From c0fa485960859ce910f79f4994b7cc2719982c29 Mon Sep 17 00:00:00 2001 From: "KJK::Hyperion" Date: Sat, 25 Oct 2008 17:56:00 +0000 Subject: [PATCH 1/2] The real, definitive, Visual C++ support branch. Accept no substitutes svn path=/branches/the-real-msvc/; revision=36960 --- reactos/COPYING => COPYING | 0 reactos/COPYING.ARM => COPYING.ARM | 0 reactos/CREDITS => CREDITS | 0 reactos/Doxyfile => Doxyfile | 0 reactos/INSTALL => INSTALL | 0 reactos/LGPL.txt => LGPL.txt | 0 reactos/Makefile => Makefile | 0 reactos/README => README | 0 .../ReactOS-arm.rbuild => ReactOS-arm.rbuild | 0 ...S-generic.rbuild => ReactOS-generic.rbuild | 0 ...ReactOS-i386.rbuild => ReactOS-i386.rbuild | 0 .../ReactOS-ppc.rbuild => ReactOS-ppc.rbuild | 0 reactos/apistatus.lst => apistatus.lst | 0 .../applications/applications.rbuild | 0 .../base => base}/applications/cacls/cacls.c | 0 .../applications/cacls/cacls.rbuild | 0 .../base => base}/applications/cacls/cacls.rc | 0 .../applications/cacls/lang/bg-BG.rc | 0 .../applications/cacls/lang/ca-ES.rc | 0 .../applications/cacls/lang/cs-CZ.rc | 0 .../applications/cacls/lang/de-DE.rc | 0 .../applications/cacls/lang/el-GR.rc | 0 .../applications/cacls/lang/en-US.rc | 0 .../applications/cacls/lang/fr-FR.rc | 0 .../applications/cacls/lang/id-ID.rc | 0 .../applications/cacls/lang/it-IT.rc | 0 .../applications/cacls/lang/ko-KR.rc | 0 .../applications/cacls/lang/nl-NL.rc | 0 .../applications/cacls/lang/no-NO.rc | 0 .../applications/cacls/lang/pl-PL.rc | 0 .../applications/cacls/lang/pt-BR.rc | 0 .../applications/cacls/lang/ru-RU.rc | 0 .../applications/cacls/lang/sk-SK.rc | 0 .../applications/cacls/lang/uk-UA.rc | 0 .../applications/cacls/lang/zh-CN.rc | 0 .../applications/cacls/lang/zh-TW.rc | 0 .../applications/cacls/precomp.h | 0 .../applications/cacls/resource.h | 0 .../base => base}/applications/cacls/rsrc.rc | 0 .../base => base}/applications/calc/about.c | 0 .../base => base}/applications/calc/calc.h | 0 .../applications/calc/calc.rbuild | 0 .../base => base}/applications/calc/convert.c | 0 .../applications/calc/copying.txt | 0 .../applications/calc/fun_mpfr.c | 0 .../applications/calc/function.c | 0 .../base => base}/applications/calc/help.txt | 0 .../applications/calc/lang/bg-BG.rc | 0 .../applications/calc/lang/cs-CZ.rc | 0 .../applications/calc/lang/de-DE.rc | 0 .../applications/calc/lang/en-US.rc | 0 .../applications/calc/lang/es-ES.rc | 0 .../applications/calc/lang/it-IT.rc | 0 .../applications/calc/lang/ko-KR.rc | 0 .../applications/calc/lang/nl-NL.rc | 0 .../applications/calc/lang/no-NO.rc | 0 .../applications/calc/lang/pl-PL.rc | 0 .../applications/calc/lang/ru-RU.rc | 0 .../applications/calc/lang/sk-SK.rc | 0 .../applications/calc/lang/uk-UA.rc | 0 .../applications/calc/readme.txt | 0 .../applications/calc/res/ROS_logo.bmp | Bin .../applications/calc/res/calc.ico | Bin .../applications/calc/res/calc_sm.ico | Bin .../applications/calc/resource.h | 0 .../applications/calc/resource.rc | 0 .../base => base}/applications/calc/rpn.c | 0 .../applications/calc/rpn_mpfr.c | 0 .../base => base}/applications/calc/todo.txt | 0 .../base => base}/applications/calc/utl.c | 0 .../applications/calc/utl_mpfr.c | 0 .../applications/calc/whatsnew.txt | 0 .../base => base}/applications/calc/winmain.c | 0 .../base => base}/applications/calc/wmmsg.h | 0 .../applications/charmap/about.c | 0 .../applications/charmap/charmap.c | 0 .../applications/charmap/charmap.rbuild | 0 .../applications/charmap/charmap.rc | 0 .../applications/charmap/lang/bg-BG.rc | 0 .../applications/charmap/lang/ca-ES.rc | 0 .../applications/charmap/lang/cs-CZ.rc | 0 .../applications/charmap/lang/de-DE.rc | 0 .../applications/charmap/lang/el-GR.rc | 0 .../applications/charmap/lang/en-US.rc | 0 .../applications/charmap/lang/es-ES.rc | 0 .../applications/charmap/lang/fr-FR.rc | 0 .../applications/charmap/lang/id-ID.rc | 0 .../applications/charmap/lang/it-IT.rc | 0 .../applications/charmap/lang/ko-KR.rc | 0 .../applications/charmap/lang/lt-LT.rc | 0 .../applications/charmap/lang/nl-NL.rc | 0 .../applications/charmap/lang/no-NO.rc | 0 .../applications/charmap/lang/pl-PL.rc | 0 .../applications/charmap/lang/pt-BR.rc | 0 .../applications/charmap/lang/ru-RU.rc | 0 .../applications/charmap/lang/sk-SK.rc | 0 .../applications/charmap/lang/uk-UA.rc | 0 .../applications/charmap/lrgcell.c | 0 .../base => base}/applications/charmap/map.c | 0 .../applications/charmap/precomp.h | 0 .../applications/charmap/res/charmap.ico | Bin .../applications/charmap/resource.h | 0 .../applications/charmap/rsrc.rc | 0 .../applications/cmdutils/cmdutils.rbuild | 0 .../applications/cmdutils/dbgprint/dbgprint.c | 0 .../cmdutils/dbgprint/dbgprint.rbuild | 0 .../applications/cmdutils/doskey/doskey.c | 0 .../cmdutils/doskey/doskey.rbuild | 0 .../applications/cmdutils/doskey/doskey.rc | 0 .../applications/cmdutils/find/find.c | 0 .../applications/cmdutils/find/find.rbuild | 0 .../applications/cmdutils/find/find.rc | 0 .../applications/cmdutils/find/lang/bg-BG.rc | 0 .../applications/cmdutils/find/lang/ca-ES.rc | 0 .../applications/cmdutils/find/lang/cs-CZ.rc | 0 .../applications/cmdutils/find/lang/de-DE.rc | 0 .../applications/cmdutils/find/lang/el-GR.rc | 0 .../applications/cmdutils/find/lang/en-US.rc | 0 .../applications/cmdutils/find/lang/es-ES.rc | 0 .../applications/cmdutils/find/lang/fr-FR.rc | 0 .../applications/cmdutils/find/lang/it-IT.rc | 0 .../applications/cmdutils/find/lang/lt-LT.rc | 0 .../applications/cmdutils/find/lang/no-NO.rc | 0 .../applications/cmdutils/find/lang/pl-PL.rc | 0 .../applications/cmdutils/find/lang/pt-BR.rc | 0 .../applications/cmdutils/find/lang/ru-RU.rc | 0 .../applications/cmdutils/find/lang/sk-SK.rc | 0 .../applications/cmdutils/find/lang/uk-UA.rc | 0 .../applications/cmdutils/find/resource.h | 0 .../applications/cmdutils/find/rsrc.rc | 0 .../applications/cmdutils/hostname/hostname.c | 0 .../cmdutils/hostname/hostname.rbuild | 0 .../cmdutils/hostname/hostname.rc | 0 .../applications/cmdutils/more/lang/bg-BG.rc | 0 .../applications/cmdutils/more/lang/ca-ES.rc | 0 .../applications/cmdutils/more/lang/cs-CZ.rc | 0 .../applications/cmdutils/more/lang/de-DE.rc | 0 .../applications/cmdutils/more/lang/el-GR.rc | 0 .../applications/cmdutils/more/lang/en-US.rc | 0 .../applications/cmdutils/more/lang/es-ES.rc | 0 .../applications/cmdutils/more/lang/fr-FR.rc | 0 .../applications/cmdutils/more/lang/it-IT.rc | 0 .../applications/cmdutils/more/lang/lt-LT.rc | 0 .../applications/cmdutils/more/lang/no-NO.rc | 0 .../applications/cmdutils/more/lang/pl-PL.rc | 0 .../applications/cmdutils/more/lang/ru-RU.rc | 0 .../applications/cmdutils/more/lang/sk-SK.rc | 0 .../applications/cmdutils/more/lang/uk-UA.rc | 0 .../applications/cmdutils/more/more.c | 0 .../applications/cmdutils/more/more.rbuild | 0 .../applications/cmdutils/more/more.rc | 0 .../applications/cmdutils/more/resource.h | 0 .../applications/cmdutils/more/rsrc.rc | 0 .../applications/cmdutils/xcopy/Bg.rc | 0 .../applications/cmdutils/xcopy/Da.rc | 0 .../applications/cmdutils/xcopy/De.rc | 0 .../applications/cmdutils/xcopy/El.rc | 0 .../applications/cmdutils/xcopy/En.rc | 0 .../applications/cmdutils/xcopy/Fr.rc | 0 .../applications/cmdutils/xcopy/It.rc | 0 .../applications/cmdutils/xcopy/Ko.rc | 0 .../applications/cmdutils/xcopy/Nl.rc | 0 .../applications/cmdutils/xcopy/No.rc | 0 .../applications/cmdutils/xcopy/Pl.rc | 0 .../applications/cmdutils/xcopy/Ru.rc | 0 .../applications/cmdutils/xcopy/Si.rc | 0 .../applications/cmdutils/xcopy/rsrc.rc | 0 .../applications/cmdutils/xcopy/xcopy.c | 0 .../applications/cmdutils/xcopy/xcopy.h | 0 .../applications/cmdutils/xcopy/xcopy.rbuild | 0 .../applications/cmdutils/xcopy/xcopy.rc | 0 .../applications/control/control.c | 0 .../applications/control/control.dsp | 0 .../applications/control/control.dsw | 0 .../applications/control/control.h | 0 .../applications/control/control.rbuild | 0 .../applications/control/control.rc | 0 .../applications/control/resource.h | 0 .../applications/control/resources/config.ico | Bin .../applications/dxdiag/ddtest.c | 0 .../applications/dxdiag/display.c | 0 .../applications/dxdiag/dxdiag.c | 0 .../applications/dxdiag/dxdiag.rbuild | 0 .../applications/dxdiag/dxdiag.rc | 0 .../base => base}/applications/dxdiag/help.c | 0 .../base => base}/applications/dxdiag/input.c | 0 .../applications/dxdiag/lang/bg-BG.rc | 0 .../applications/dxdiag/lang/cs-CZ.rc | 0 .../applications/dxdiag/lang/de-DE.rc | 0 .../applications/dxdiag/lang/en-US.rc | 0 .../applications/dxdiag/lang/es-ES.rc | 0 .../applications/dxdiag/lang/fr-FR.rc | 0 .../applications/dxdiag/lang/no-NO.rc | 0 .../applications/dxdiag/lang/pl-PL.rc | 0 .../applications/dxdiag/lang/ru-RU.rc | 0 .../applications/dxdiag/lang/sk-SK.rc | 0 .../base => base}/applications/dxdiag/music.c | 0 .../applications/dxdiag/network.c | 0 .../applications/dxdiag/precomp.h | 0 .../applications/dxdiag/res/dxdiag.ico | Bin .../applications/dxdiag/resource.h | 0 .../base => base}/applications/dxdiag/rsrc.rc | 0 .../base => base}/applications/dxdiag/sound.c | 0 .../applications/dxdiag/system.c | 0 .../applications/games/games.rbuild | 0 .../applications/games/solitaire/ReadMe.txt | 0 .../games/solitaire/cardlib/card.h | 0 .../games/solitaire/cardlib/cardbitmaps.cpp | 0 .../games/solitaire/cardlib/cardbutton.cpp | 0 .../games/solitaire/cardlib/cardbutton.h | 0 .../games/solitaire/cardlib/cardcolor.cpp | 0 .../games/solitaire/cardlib/cardcolor.h | 0 .../games/solitaire/cardlib/cardcount.cpp | 0 .../games/solitaire/cardlib/cardcount.h | 0 .../games/solitaire/cardlib/cardlib.cpp | 0 .../games/solitaire/cardlib/cardlib.h | 0 .../games/solitaire/cardlib/cardregion.cpp | 0 .../games/solitaire/cardlib/cardregion.h | 0 .../games/solitaire/cardlib/cardrgndraw.cpp | 0 .../games/solitaire/cardlib/cardrgnmouse.cpp | 0 .../games/solitaire/cardlib/cardstack.cpp | 0 .../games/solitaire/cardlib/cardstack.h | 0 .../games/solitaire/cardlib/cardwindow.cpp | 0 .../games/solitaire/cardlib/cardwindow.h | 0 .../games/solitaire/cardlib/dropzone.cpp | 0 .../games/solitaire/cardlib/dropzone.h | 0 .../games/solitaire/cardlib/globals.h | 0 .../games/solitaire/lang/bg-BG.rc | 0 .../games/solitaire/lang/ca-ES.rc | 0 .../games/solitaire/lang/cs-CZ.rc | 0 .../games/solitaire/lang/de-DE.rc | 0 .../games/solitaire/lang/el-GR.rc | 0 .../games/solitaire/lang/en-US.rc | 0 .../games/solitaire/lang/es-ES.rc | 0 .../games/solitaire/lang/eu-ES.rc | 0 .../games/solitaire/lang/fr-FR.rc | 0 .../games/solitaire/lang/id-ID.rc | 0 .../games/solitaire/lang/it-IT.rc | 0 .../games/solitaire/lang/lt-LT.rc | 0 .../games/solitaire/lang/no-NO.rc | 0 .../games/solitaire/lang/pl-PL.rc | 0 .../games/solitaire/lang/ru-RU.rc | 0 .../games/solitaire/lang/sk-SK.rc | 0 .../games/solitaire/lang/th-TH.rc | 0 .../games/solitaire/lang/uk-UA.rc | 0 .../games/solitaire/lang/zh-CN.rc | 0 .../applications/games/solitaire/resource.h | 0 .../applications/games/solitaire/rsrc.rc | 0 .../games/solitaire/solcreate.cpp | 0 .../applications/games/solitaire/solgame.cpp | 0 .../games/solitaire/solitaire.cpp | 0 .../applications/games/solitaire/solitaire.h | 0 .../games/solitaire/solitaire.ico | Bin .../games/solitaire/solitaire.rbuild | 0 .../applications/games/winemine/README | 0 .../applications/games/winemine/dialog.c | 0 .../applications/games/winemine/dialog.h | 0 .../applications/games/winemine/lang/bg-BG.rc | 0 .../applications/games/winemine/lang/ca-ES.rc | 0 .../applications/games/winemine/lang/cs-CZ.rc | 0 .../applications/games/winemine/lang/de-DE.rc | 0 .../applications/games/winemine/lang/el-GR.rc | 0 .../applications/games/winemine/lang/en-US.rc | 0 .../applications/games/winemine/lang/es-ES.rc | 0 .../applications/games/winemine/lang/eu-ES.rc | 0 .../applications/games/winemine/lang/fr-FR.rc | 0 .../applications/games/winemine/lang/id-ID.rc | 0 .../applications/games/winemine/lang/it-IT.rc | 0 .../applications/games/winemine/lang/ko-KR.rc | 0 .../applications/games/winemine/lang/lt-LT.rc | 0 .../applications/games/winemine/lang/nl-NL.rc | 0 .../applications/games/winemine/lang/no-NO.rc | 0 .../applications/games/winemine/lang/pl-PL.rc | 0 .../applications/games/winemine/lang/ru-RU.rc | 0 .../applications/games/winemine/lang/sk-SK.rc | 0 .../applications/games/winemine/lang/th-TH.rc | 0 .../applications/games/winemine/lang/uk-UA.rc | 0 .../applications/games/winemine/lang/zh-CN.rc | 0 .../applications/games/winemine/main.c | 0 .../applications/games/winemine/main.h | 0 .../applications/games/winemine/rc/faces.bmp | Bin .../applications/games/winemine/rc/leds.bmp | Bin .../applications/games/winemine/rc/mines.bmp | Bin .../games/winemine/rc/winemine.ico | Bin .../applications/games/winemine/resource.h | 0 .../applications/games/winemine/rsrc.rc | 0 .../games/winemine/winemine.rbuild | 0 {reactos/base => base}/applications/hh/hh.ico | Bin .../base => base}/applications/hh/hh.rbuild | 0 {reactos/base => base}/applications/hh/hh.rc | 0 {reactos/base => base}/applications/hh/main.c | 0 .../applications/iexplore/iexplore.rbuild | 0 .../applications/iexplore/main.c | 0 .../applications/iexplore/version.rc | 0 .../applications/kbswitch/kbsdll/kbsdll.c | 0 .../kbswitch/kbsdll/kbsdll.rbuild | 0 .../applications/kbswitch/kbsdll/kbsdll.rc | 0 .../applications/kbswitch/kbsdll/kbsdll.spec | 0 .../applications/kbswitch/kbswitch.c | 0 .../applications/kbswitch/kbswitch.h | 0 .../applications/kbswitch/kbswitch.rbuild | 0 .../applications/kbswitch/kbswitch.rc | 0 .../applications/kbswitch/lang/bg-BG.rc | 0 .../applications/kbswitch/lang/cs-CZ.rc | 0 .../applications/kbswitch/lang/de-DE.rc | 0 .../applications/kbswitch/lang/en-US.rc | 0 .../applications/kbswitch/lang/es-ES.rc | 0 .../applications/kbswitch/lang/fr-FR.rc | 0 .../applications/kbswitch/lang/it-IT.rc | 0 .../applications/kbswitch/lang/lt-LT.rc | 0 .../applications/kbswitch/lang/no-NO.rc | 0 .../applications/kbswitch/lang/pl-PL.rc | 0 .../applications/kbswitch/lang/ru-RU.rc | 0 .../applications/kbswitch/lang/sk-SK.rc | 0 .../applications/kbswitch/lang/uk-UA.rc | 0 .../applications/kbswitch/res/kbswitch.ico | Bin .../applications/kbswitch/resource.h | 0 .../applications/kbswitch/rsrc.rc | 0 .../applications/logoff/lang/bg-BG.rc | 0 .../applications/logoff/lang/ca-ES.rc | 0 .../applications/logoff/lang/cs-CZ.rc | 0 .../applications/logoff/lang/de-DE.rc | 0 .../applications/logoff/lang/el-GR.rc | 0 .../applications/logoff/lang/en-US.rc | 0 .../applications/logoff/lang/es-ES.rc | 0 .../applications/logoff/lang/fr-FR.rc | 0 .../applications/logoff/lang/it-IT.rc | 0 .../applications/logoff/lang/ko-KR.rc | 0 .../applications/logoff/lang/lt-LT.rc | 0 .../applications/logoff/lang/no-NO.rc | 0 .../applications/logoff/lang/pl-PL.rc | 0 .../applications/logoff/lang/ru-RU.rc | 0 .../applications/logoff/lang/sk-SK.rc | 0 .../applications/logoff/lang/uk-UA.rc | 0 .../applications/logoff/logoff.c | 0 .../applications/logoff/logoff.rbuild | 0 .../applications/logoff/logoff.rc | 0 .../base => base}/applications/logoff/misc.c | 0 .../applications/logoff/precomp.h | 0 .../applications/logoff/resource.h | 0 .../base => base}/applications/logoff/rsrc.rc | 0 .../base => base}/applications/mmc/console.c | 0 .../applications/mmc/lang/bg-BG.rc | 0 .../applications/mmc/lang/ca-ES.rc | 0 .../applications/mmc/lang/cs-CZ.rc | 0 .../applications/mmc/lang/de-DE.rc | 0 .../applications/mmc/lang/el-GR.rc | 0 .../applications/mmc/lang/en-US.rc | 0 .../applications/mmc/lang/es-ES.rc | 0 .../applications/mmc/lang/fr-FR.rc | 0 .../applications/mmc/lang/it-IT.rc | 0 .../applications/mmc/lang/ko-KR.rc | 0 .../applications/mmc/lang/lt-LT.rc | 0 .../applications/mmc/lang/no-NO.rc | 0 .../applications/mmc/lang/pl-PL.rc | 0 .../applications/mmc/lang/pt-BR.rc | 0 .../applications/mmc/lang/ru-RU.rc | 0 .../applications/mmc/lang/sk-SK.rc | 0 .../applications/mmc/lang/uk-UA.rc | 0 .../base => base}/applications/mmc/misc.c | 0 {reactos/base => base}/applications/mmc/mmc.c | 0 .../base => base}/applications/mmc/mmc.rbuild | 0 .../base => base}/applications/mmc/mmc.rc | 0 .../base => base}/applications/mmc/precomp.h | 0 .../base => base}/applications/mmc/resource.h | 0 .../applications/mmc/resources/mmc.ico | Bin .../base => base}/applications/mmc/rsrc.rc | 0 .../applications/msconfig/freeldrpage.c | 0 .../applications/msconfig/freeldrpage.h | 0 .../applications/msconfig/generalpage.c | 0 .../applications/msconfig/generalpage.h | 0 .../applications/msconfig/lang/bg-BG.rc | 0 .../applications/msconfig/lang/ca-ES.rc | 0 .../applications/msconfig/lang/cs-CZ.rc | 0 .../applications/msconfig/lang/de-DE.rc | 0 .../applications/msconfig/lang/el-GR.rc | 0 .../applications/msconfig/lang/en-US.rc | 0 .../applications/msconfig/lang/es-ES.rc | 0 .../applications/msconfig/lang/fr-FR.rc | 0 .../applications/msconfig/lang/hu-HU.rc | 0 .../applications/msconfig/lang/id-ID.rc | 0 .../applications/msconfig/lang/it-IT.rc | 0 .../applications/msconfig/lang/ko-KR.rc | 0 .../applications/msconfig/lang/nl-NL.rc | 0 .../applications/msconfig/lang/no-NO.rc | 0 .../applications/msconfig/lang/pl-PL.rc | 0 .../applications/msconfig/lang/pt-BR.rc | 0 .../applications/msconfig/lang/ru-RU.rc | 0 .../applications/msconfig/lang/sk-SK.rc | 0 .../applications/msconfig/lang/th-TH.rc | 0 .../applications/msconfig/lang/uk-UA.rc | 0 .../applications/msconfig/lang/zh-CN.rc | 0 .../applications/msconfig/msconfig.c | 0 .../applications/msconfig/msconfig.h | 0 .../applications/msconfig/msconfig.rbuild | 0 .../applications/msconfig/msconfig.rc | 0 .../applications/msconfig/precomp.h | 0 .../applications/msconfig/res/msconfig.ico | Bin .../applications/msconfig/resource.h | 0 .../applications/msconfig/rsrc.rc | 0 .../applications/msconfig/srvpage.c | 0 .../applications/msconfig/srvpage.h | 0 .../applications/msconfig/startuppage.c | 0 .../applications/msconfig/startuppage.h | 0 .../applications/msconfig/systempage.c | 0 .../applications/msconfig/systempage.h | 0 .../applications/msconfig/toolspage.c | 0 .../applications/msconfig/toolspage.h | 0 .../applications/mscutils/devmgmt/about.c | 0 .../applications/mscutils/devmgmt/devmgmt.c | 0 .../mscutils/devmgmt/devmgmt.rbuild | 0 .../applications/mscutils/devmgmt/devmgmt.rc | 0 .../mscutils/devmgmt/enumdevices.c | 0 .../mscutils/devmgmt/lang/bg-BG.rc | 0 .../mscutils/devmgmt/lang/de-DE.rc | 0 .../mscutils/devmgmt/lang/el-GR.rc | 0 .../mscutils/devmgmt/lang/en-US.rc | 0 .../mscutils/devmgmt/lang/es-ES.rc | 0 .../mscutils/devmgmt/lang/fr-FR.rc | 0 .../mscutils/devmgmt/lang/id-ID.rc | 0 .../mscutils/devmgmt/lang/it-IT.rc | 0 .../mscutils/devmgmt/lang/ko-KR.rc | 0 .../mscutils/devmgmt/lang/no-NO.rc | 0 .../mscutils/devmgmt/lang/pl-PL.rc | 0 .../mscutils/devmgmt/lang/ru-RU.rc | 0 .../mscutils/devmgmt/lang/sk-SK.rc | 0 .../mscutils/devmgmt/lang/th-TH.rc | 0 .../mscutils/devmgmt/lang/uk-UA.rc | 0 .../applications/mscutils/devmgmt/mainwnd.c | 0 .../applications/mscutils/devmgmt/misc.c | 0 .../applications/mscutils/devmgmt/precomp.h | 0 .../mscutils/devmgmt/res/computer.ico | Bin .../mscutils/devmgmt/res/exit.bmp | Bin .../mscutils/devmgmt/res/help.bmp | Bin .../mscutils/devmgmt/res/properties.bmp | Bin .../mscutils/devmgmt/res/refresh.bmp | Bin .../mscutils/devmgmt/res/root.bmp | Bin .../applications/mscutils/devmgmt/resource.h | 0 .../applications/mscutils/devmgmt/rsrc.rc | 0 .../applications/mscutils/directory.rbuild | 0 .../applications/mscutils/eventvwr/eventvwr.c | 0 .../applications/mscutils/eventvwr/eventvwr.h | 0 .../mscutils/eventvwr/eventvwr.rbuild | 0 .../mscutils/eventvwr/eventvwr.rc | 0 .../mscutils/eventvwr/lang/bg-BG.rc | 0 .../mscutils/eventvwr/lang/de-DE.rc | 0 .../mscutils/eventvwr/lang/el-GR.rc | 0 .../mscutils/eventvwr/lang/en-US.rc | 0 .../mscutils/eventvwr/lang/es-ES.rc | 0 .../mscutils/eventvwr/lang/fr-FR.rc | 0 .../mscutils/eventvwr/lang/it-IT.rc | 0 .../mscutils/eventvwr/lang/ko-KR.rc | 0 .../mscutils/eventvwr/lang/no-NO.rc | 0 .../mscutils/eventvwr/lang/pl-PL.rc | 0 .../mscutils/eventvwr/lang/ru-RU.rc | 0 .../mscutils/eventvwr/lang/sk-SK.rc | 0 .../mscutils/eventvwr/lang/uk-UA.rc | 0 .../mscutils/eventvwr/res/error.ico | Bin .../mscutils/eventvwr/res/eventvwr.ico | Bin .../mscutils/eventvwr/res/info.ico | Bin .../mscutils/eventvwr/res/warning.ico | Bin .../applications/mscutils/eventvwr/resource.h | 0 .../applications/mscutils/eventvwr/rsrc.rc | 0 .../applications/mscutils/servman/about.c | 0 .../applications/mscutils/servman/control.c | 0 .../applications/mscutils/servman/create.c | 0 .../applications/mscutils/servman/delete.c | 0 .../applications/mscutils/servman/export.c | 0 .../mscutils/servman/lang/bg-BG.rc | 0 .../mscutils/servman/lang/de-DE.rc | 0 .../mscutils/servman/lang/el-GR.rc | 0 .../mscutils/servman/lang/en-US.rc | 0 .../mscutils/servman/lang/es-ES.rc | 0 .../mscutils/servman/lang/fr-FR.rc | 0 .../mscutils/servman/lang/id-ID.rc | 0 .../mscutils/servman/lang/it-IT.rc | 0 .../mscutils/servman/lang/ko-KR.rc | 0 .../mscutils/servman/lang/no-NO.rc | 0 .../mscutils/servman/lang/pl-PL.rc | 0 .../mscutils/servman/lang/ru-RU.rc | 0 .../mscutils/servman/lang/sk-SK.rc | 0 .../mscutils/servman/lang/th-TH.rc | 0 .../mscutils/servman/lang/uk-UA.rc | 0 .../applications/mscutils/servman/listview.c | 0 .../applications/mscutils/servman/mainwnd.c | 0 .../applications/mscutils/servman/misc.c | 0 .../applications/mscutils/servman/precomp.h | 0 .../applications/mscutils/servman/progress.c | 0 .../applications/mscutils/servman/propsheet.c | 0 .../applications/mscutils/servman/query.c | 0 .../mscutils/servman/res/create.bmp | Bin .../mscutils/servman/res/delete.bmp | Bin .../mscutils/servman/res/export.bmp | Bin .../mscutils/servman/res/pause.bmp | Bin .../mscutils/servman/res/properties.bmp | Bin .../mscutils/servman/res/refresh.bmp | Bin .../mscutils/servman/res/restart.bmp | Bin .../mscutils/servman/res/start.bmp | Bin .../mscutils/servman/res/stop.bmp | Bin .../mscutils/servman/res/system.ico | Bin .../applications/mscutils/servman/resource.h | 0 .../applications/mscutils/servman/rsrc.rc | 0 .../applications/mscutils/servman/servman.c | 0 .../mscutils/servman/servman.rbuild | 0 .../applications/mscutils/servman/servman.rc | 0 .../applications/mscutils/servman/start.c | 0 .../applications/mscutils/servman/stop.c | 0 .../base => base}/applications/mstsc/bitmap.c | 0 .../base => base}/applications/mstsc/bsops.c | 0 .../base => base}/applications/mstsc/bsops.h | 0 .../base => base}/applications/mstsc/cache.c | 0 .../applications/mstsc/channels.c | 0 .../applications/mstsc/connectdialog.c | 0 .../applications/mstsc/constants.h | 0 .../base => base}/applications/mstsc/iso.c | 0 .../applications/mstsc/lang/bg-BG.rc | 0 .../applications/mstsc/lang/ca-ES.rc | 0 .../applications/mstsc/lang/de-DE.rc | 0 .../applications/mstsc/lang/el-GR.rc | 0 .../applications/mstsc/lang/en-US.rc | 0 .../applications/mstsc/lang/es-ES.rc | 0 .../applications/mstsc/lang/fr-FR.rc | 0 .../applications/mstsc/lang/it-IT.rc | 0 .../applications/mstsc/lang/ko-KR.rc | 0 .../applications/mstsc/lang/lt-LT.rc | 0 .../applications/mstsc/lang/no-NO.rc | 0 .../applications/mstsc/lang/pl-PL.rc | 0 .../applications/mstsc/lang/ru-RU.rc | 0 .../applications/mstsc/lang/sk-SK.rc | 0 .../applications/mstsc/lang/uk-UA.rc | 0 .../applications/mstsc/licence.c | 0 .../base => base}/applications/mstsc/mcs.c | 0 .../base => base}/applications/mstsc/mppc.c | 0 .../applications/mstsc/mstsc.rbuild | 0 .../base => base}/applications/mstsc/orders.c | 0 .../base => base}/applications/mstsc/orders.h | 0 .../base => base}/applications/mstsc/parse.h | 0 .../applications/mstsc/precomp.h | 0 .../base => base}/applications/mstsc/proto.h | 0 .../applications/mstsc/pstcache.c | 0 .../base => base}/applications/mstsc/rdc.rc | 0 .../applications/mstsc/rdesktop.h | 0 .../base => base}/applications/mstsc/rdp.c | 0 .../base => base}/applications/mstsc/rdp5.c | 0 .../applications/mstsc/res/colors.ico | Bin .../applications/mstsc/res/connection.ico | Bin .../applications/mstsc/res/header.bmp | Bin .../applications/mstsc/res/header.pdn | Bin .../applications/mstsc/res/logon.ico | Bin .../applications/mstsc/res/mstsc.ico | Bin .../applications/mstsc/res/remote.ico | Bin .../applications/mstsc/res/spectrum.bmp | Bin .../applications/mstsc/res/video-display.png | Bin .../applications/mstsc/resource.h | 0 .../base => base}/applications/mstsc/rsrc.rc | 0 .../base => base}/applications/mstsc/secure.c | 0 .../applications/mstsc/settings.c | 0 .../applications/mstsc/ssl_calls.c | 0 .../base => base}/applications/mstsc/tcp.c | 0 .../base => base}/applications/mstsc/types.h | 0 .../base => base}/applications/mstsc/uimain.c | 0 .../base => base}/applications/mstsc/uimain.h | 0 .../base => base}/applications/mstsc/win32.c | 0 .../applications/network/arp/arp.c | 0 .../applications/network/arp/arp.rbuild | 0 .../applications/network/arp/arp.rc | 0 .../applications/network/dwnl/dwnl.c | 0 .../applications/network/dwnl/dwnl.rbuild | 0 .../applications/network/finger/LICENSE.txt | 0 .../applications/network/finger/err.c | 0 .../applications/network/finger/err.h | 0 .../applications/network/finger/finger.c | 0 .../applications/network/finger/finger.rbuild | 0 .../applications/network/finger/finger.rc | 0 .../applications/network/finger/getopt.c | 0 .../applications/network/finger/getopt.h | 0 .../applications/network/finger/net.c | 0 .../applications/network/finger/various.h | 0 .../applications/network/ftp/cmds.c | 0 .../applications/network/ftp/cmdtab.c | 0 .../applications/network/ftp/domacro.c | 0 .../applications/network/ftp/fake.c | 0 .../applications/network/ftp/fake.h | 0 .../applications/network/ftp/ftp.c | 0 .../applications/network/ftp/ftp.rbuild | 0 .../applications/network/ftp/ftp.rc | 0 .../applications/network/ftp/ftp_var.h | 0 .../applications/network/ftp/main.c | 0 .../applications/network/ftp/pathnames.h | 0 .../applications/network/ftp/prototypes.h | 0 .../applications/network/ftp/ruserpass.c | 0 .../applications/network/ipconfig/ipconfig.c | 0 .../network/ipconfig/ipconfig.rbuild | 0 .../applications/network/ipconfig/ipconfig.rc | 0 .../network/ipconfig/lang/bg-BG.rc | 0 .../network/ipconfig/lang/de-DE.rc | 0 .../network/ipconfig/lang/el-GR.rc | 0 .../network/ipconfig/lang/en-US.rc | 0 .../network/ipconfig/lang/fr-FR.rc | 0 .../network/ipconfig/lang/id-ID.rc | 0 .../network/ipconfig/lang/it-IT.rc | 0 .../network/ipconfig/lang/no-NO.rc | 0 .../network/ipconfig/lang/pl-PL.rc | 0 .../network/ipconfig/lang/ru-RU.rc | 0 .../network/ipconfig/lang/sk-SK.rc | 0 .../network/ipconfig/lang/uk-UA.rc | 0 .../applications/network/ipconfig/resource.h | 0 .../applications/network/net/cmdStop.c | 0 .../applications/network/net/cmdstart.c | 0 .../applications/network/net/help.c | 0 .../applications/network/net/main.c | 0 .../applications/network/net/net.h | 0 .../applications/network/net/net.rbuild | 0 .../applications/network/net/process.c | 0 .../applications/network/netstat/netstat.c | 0 .../applications/network/netstat/netstat.h | 0 .../network/netstat/netstat.rbuild | 0 .../applications/network/netstat/netstat.rc | 0 .../applications/network/network.rbuild | 0 .../applications/network/ping/ping.c | 0 .../applications/network/ping/ping.rbuild | 0 .../applications/network/ping/ping.rc | 0 .../applications/network/route/route.c | 0 .../applications/network/route/route.rbuild | 0 .../applications/network/route/route.rc | 0 .../network/telnet/Makefile.mingw | 0 .../network/telnet/doc/00readme.avs | 0 .../applications/network/telnet/doc/bugs.txt | 0 .../network/telnet/doc/changes.txt | 0 .../network/telnet/doc/license.txt | 0 .../network/telnet/doc/options.txt | 0 .../network/telnet/doc/readme.txt | 0 .../applications/network/telnet/doc/ssh.txt | 0 .../network/telnet/resource/tnmsg.h | 0 .../network/telnet/resource/tnmsg.rc | 0 .../network/telnet/src/ansiprsr.cpp | 0 .../network/telnet/src/ansiprsr.h | 0 .../network/telnet/src/keytrans.cpp | 0 .../network/telnet/src/keytrans.h | 0 .../network/telnet/src/stl_bids.h | 0 .../network/telnet/src/tcharmap.cpp | 0 .../network/telnet/src/tcharmap.h | 0 .../network/telnet/src/tconsole.cpp | 0 .../network/telnet/src/tconsole.h | 0 .../applications/network/telnet/src/telnet.h | 0 .../network/telnet/src/tkeydef.cpp | 0 .../applications/network/telnet/src/tkeydef.h | 0 .../network/telnet/src/tkeymap.cpp | 0 .../applications/network/telnet/src/tkeymap.h | 0 .../network/telnet/src/tmapldr.cpp | 0 .../applications/network/telnet/src/tmapldr.h | 0 .../network/telnet/src/tmouse.cpp | 0 .../applications/network/telnet/src/tmouse.h | 0 .../network/telnet/src/tnclass.cpp | 0 .../applications/network/telnet/src/tnclass.h | 0 .../network/telnet/src/tnclip.cpp | 0 .../applications/network/telnet/src/tnclip.h | 0 .../applications/network/telnet/src/tncon.cpp | 0 .../applications/network/telnet/src/tncon.h | 0 .../network/telnet/src/tnconfig.cpp | 0 .../network/telnet/src/tnconfig.h | 0 .../network/telnet/src/tnerror.cpp | 0 .../applications/network/telnet/src/tnerror.h | 0 .../network/telnet/src/tnetwork.cpp | 0 .../network/telnet/src/tnetwork.h | 0 .../network/telnet/src/tnmain.cpp | 0 .../applications/network/telnet/src/tnmain.h | 0 .../network/telnet/src/tnmisc.cpp | 0 .../applications/network/telnet/src/tnmisc.h | 0 .../applications/network/telnet/src/tnmsg.h | 0 .../applications/network/telnet/src/tparams.h | 0 .../applications/network/telnet/src/tparser.h | 0 .../network/telnet/src/tscript.cpp | 0 .../applications/network/telnet/src/tscript.h | 0 .../network/telnet/src/tscroll.cpp | 0 .../applications/network/telnet/src/tscroll.h | 0 .../network/telnet/src/ttelhndl.cpp | 0 .../network/telnet/src/ttelhndl.h | 0 .../applications/network/telnet/telnet.cfg | 0 .../applications/network/telnet/telnet.ico | Bin .../applications/network/telnet/telnet.ini | 0 .../applications/network/telnet/telnet.rbuild | 0 .../applications/network/telnet/telnet.rc | 0 .../applications/network/tracert/tracert.c | 0 .../applications/network/tracert/tracert.h | 0 .../network/tracert/tracert.rbuild | 0 .../applications/network/tracert/tracert.rc | 0 .../applications/network/whois/LICENSE.txt | 0 .../applications/network/whois/whois.c | 0 .../applications/network/whois/whois.rbuild | 0 .../applications/network/whois/whois.rc | 0 .../applications/notepad/ChangeLog | 0 .../applications/notepad/dialog.c | 0 .../applications/notepad/dialog.h | 0 .../applications/notepad/lang/bg-BG.rc | 0 .../applications/notepad/lang/cs-CZ.rc | 0 .../applications/notepad/lang/da-DK.rc | 0 .../applications/notepad/lang/de-DE.rc | 0 .../applications/notepad/lang/el-GR.rc | 0 .../applications/notepad/lang/en-US.rc | 0 .../applications/notepad/lang/es-ES.rc | 0 .../applications/notepad/lang/eu-ES.rc | 0 .../applications/notepad/lang/fi-FI.rc | 0 .../applications/notepad/lang/fr-FR.rc | 0 .../applications/notepad/lang/hu-HU.rc | 0 .../applications/notepad/lang/id-ID.rc | 0 .../applications/notepad/lang/it-IT.rc | 0 .../applications/notepad/lang/ja-JP.rc | 0 .../applications/notepad/lang/lt-LT.rc | 0 .../applications/notepad/lang/nl-NL.rc | 0 .../applications/notepad/lang/no-NO.rc | 0 .../applications/notepad/lang/pl-PL.rc | 0 .../applications/notepad/lang/pt-PT.rc | 0 .../applications/notepad/lang/ru-RU.rc | 0 .../applications/notepad/lang/sk-SK.rc | 0 .../applications/notepad/lang/sl-SI.rc | 0 .../applications/notepad/lang/sv-SE.rc | 0 .../applications/notepad/lang/th-TH.rc | 0 .../applications/notepad/lang/uk-UA.rc | 0 .../applications/notepad/lang/zh-CN.rc | 0 .../applications/notepad/license.c | 0 .../base => base}/applications/notepad/main.c | 0 .../base => base}/applications/notepad/main.h | 0 .../applications/notepad/notepad.h | 0 .../applications/notepad/notepad.rbuild | 0 .../applications/notepad/notepad_res.h | 0 .../applications/notepad/res/notepad.ico | Bin .../applications/notepad/rsrc.rc | 0 .../applications/notepad/settings.c | 0 .../base => base}/applications/notepad/text.c | 0 .../applications/regedit/about.c | 0 .../applications/regedit/childwnd.c | 0 .../applications/regedit/clb/clb.c | 0 .../applications/regedit/clb/clb.rbuild | 0 .../applications/regedit/clb/clb.rc | 0 .../applications/regedit/clb/clb.spec | 0 .../applications/regedit/clb/clbdll.h | 0 .../applications/regedit/clb/lang/bg-BG.rc | 0 .../applications/regedit/clb/lang/de-DE.rc | 0 .../applications/regedit/clb/lang/el-GR.rc | 0 .../applications/regedit/clb/lang/en-US.rc | 0 .../applications/regedit/clb/lang/es-ES.rc | 0 .../applications/regedit/clb/lang/id-ID.rc | 0 .../applications/regedit/clb/lang/it-IT.rc | 0 .../applications/regedit/clb/lang/ja-JP.rc | 0 .../applications/regedit/clb/lang/no-NO.rc | 0 .../applications/regedit/clb/lang/pl-PL.rc | 0 .../applications/regedit/clb/lang/ru-RU.rc | 0 .../applications/regedit/clb/lang/sk-SK.rc | 0 .../applications/regedit/clb/lang/th-TH.rc | 0 .../applications/regedit/clb/lang/uk-UA.rc | 0 .../applications/regedit/clb/precomp.h | 0 .../applications/regedit/clb/resource.h | 0 .../applications/regedit/clb/rsrc.rc | 0 .../base => base}/applications/regedit/edit.c | 0 .../base => base}/applications/regedit/find.c | 0 .../applications/regedit/framewnd.c | 0 .../applications/regedit/hexedit.c | 0 .../applications/regedit/hexedit.h | 0 .../applications/regedit/lang/bg-BG.rc | 0 .../applications/regedit/lang/cs-CZ.rc | 0 .../applications/regedit/lang/de-DE.rc | 0 .../applications/regedit/lang/el-GR.rc | 0 .../applications/regedit/lang/en-US.rc | 0 .../applications/regedit/lang/es-ES.rc | 0 .../applications/regedit/lang/fr-FR.rc | 0 .../applications/regedit/lang/hu-HU.rc | 0 .../applications/regedit/lang/id-ID.rc | 0 .../applications/regedit/lang/it-IT.rc | 0 .../applications/regedit/lang/ja-JP.rc | 0 .../applications/regedit/lang/ko-KR.rc | 0 .../applications/regedit/lang/nl-NL.rc | 0 .../applications/regedit/lang/no-NO.rc | 0 .../applications/regedit/lang/pl-PL.rc | 0 .../applications/regedit/lang/pt-BR.rc | 0 .../applications/regedit/lang/pt-PT.rc | 0 .../applications/regedit/lang/ru-RU.rc | 0 .../applications/regedit/lang/sk-SK.rc | 0 .../applications/regedit/lang/sl-SI.rc | 0 .../applications/regedit/lang/sv-SE.rc | 0 .../applications/regedit/lang/th-TH.rc | 0 .../applications/regedit/lang/uk-UA.rc | 0 .../applications/regedit/lang/zh-CN.rc | 0 .../applications/regedit/listview.c | 0 .../base => base}/applications/regedit/main.c | 0 .../base => base}/applications/regedit/main.h | 0 .../applications/regedit/regedit.c | 0 .../applications/regedit/regedit.h | 0 .../applications/regedit/regedit.rbuild | 0 .../applications/regedit/regedit.rc | 0 .../applications/regedit/regproc.c | 0 .../applications/regedit/regproc.h | 0 .../applications/regedit/res/bin.ico | Bin .../applications/regedit/res/computer.ico | Bin .../applications/regedit/res/folder.ico | Bin .../applications/regedit/res/folderopen.ico | Bin .../applications/regedit/res/regedit.ico | Bin .../applications/regedit/res/string.ico | Bin .../applications/regedit/resource.h | 0 .../applications/regedit/rsrc.rc | 0 .../applications/regedit/security.c | 0 .../applications/regedit/security.h | 0 .../applications/regedit/treeview.c | 0 .../applications/regedt32/regedt32.c | 0 .../applications/regedt32/regedt32.rbuild | 0 .../applications/regedt32/res/regedt32.ico | Bin .../applications/regedt32/resource.h | 0 .../applications/regedt32/resource.rc | 0 .../base => base}/applications/sc/control.c | 0 .../base => base}/applications/sc/create.c | 0 .../base => base}/applications/sc/delete.c | 0 .../base => base}/applications/sc/print.c | 0 .../base => base}/applications/sc/query.c | 0 {reactos/base => base}/applications/sc/sc.c | 0 {reactos/base => base}/applications/sc/sc.h | 0 .../base => base}/applications/sc/sc.rbuild | 0 {reactos/base => base}/applications/sc/sc.rc | 0 .../base => base}/applications/sc/start.c | 0 .../base => base}/applications/sc/usage.c | 0 .../applications/screensavers/3dtext/3dtext.c | 0 .../applications/screensavers/3dtext/3dtext.h | 0 .../screensavers/3dtext/3dtext.rbuild | 0 .../screensavers/3dtext/lang/bg-BG.rc | 0 .../screensavers/3dtext/lang/de-DE.rc | 0 .../screensavers/3dtext/lang/el-GR.rc | 0 .../screensavers/3dtext/lang/en-US.rc | 0 .../screensavers/3dtext/lang/es-ES.rc | 0 .../screensavers/3dtext/lang/eu-ES.rc | 0 .../screensavers/3dtext/lang/fr-FR.rc | 0 .../screensavers/3dtext/lang/it-IT.rc | 0 .../screensavers/3dtext/lang/ko-KR.rc | 0 .../screensavers/3dtext/lang/lt-LT.rc | 0 .../screensavers/3dtext/lang/no-NO.rc | 0 .../screensavers/3dtext/lang/pl-PL.rc | 0 .../screensavers/3dtext/lang/ru-RU.rc | 0 .../screensavers/3dtext/lang/sk-SK.rc | 0 .../screensavers/3dtext/lang/uk-UA.rc | 0 .../screensavers/3dtext/resource.h | 0 .../applications/screensavers/3dtext/rsrc.rc | 0 .../screensavers/3dtext/settings.c | 0 .../screensavers/logon/lang/bg-BG.rc | 0 .../screensavers/logon/lang/de-DE.rc | 0 .../screensavers/logon/lang/el-GR.rc | 0 .../screensavers/logon/lang/en-US.rc | 0 .../screensavers/logon/lang/es-ES.rc | 0 .../screensavers/logon/lang/eu-ES.rc | 0 .../screensavers/logon/lang/fr-FR.rc | 0 .../screensavers/logon/lang/it-IT.rc | 0 .../screensavers/logon/lang/ko-KR.rc | 0 .../screensavers/logon/lang/lt-LT.rc | 0 .../screensavers/logon/lang/nl-NL.rc | 0 .../screensavers/logon/lang/no-NO.rc | 0 .../screensavers/logon/lang/pl-PL.rc | 0 .../screensavers/logon/lang/ru-RU.rc | 0 .../screensavers/logon/lang/sk-SK.rc | 0 .../screensavers/logon/lang/uk-UA.rc | 0 .../applications/screensavers/logon/logon.c | 0 .../screensavers/logon/logon.rbuild | 0 .../applications/screensavers/logon/logon.rc | 0 .../applications/screensavers/logon/res/0.bmp | Bin .../applications/screensavers/logon/res/1.bmp | Bin .../screensavers/logon/resource.h | 0 .../screensavers/screensavers.rbuild | 0 .../applications/shutdown/lang/bg-BG.rc | 0 .../applications/shutdown/lang/de-DE.rc | 0 .../applications/shutdown/lang/el-GR.rc | 0 .../applications/shutdown/lang/en-US.rc | 0 .../applications/shutdown/lang/fr-FR.rc | 0 .../applications/shutdown/lang/it-IT.rc | 0 .../applications/shutdown/lang/ko-KR.rc | 0 .../applications/shutdown/lang/lt-LT.rc | 0 .../applications/shutdown/lang/no-NO.rc | 0 .../applications/shutdown/lang/pl-PL.rc | 0 .../applications/shutdown/lang/ru-RU.rc | 0 .../applications/shutdown/lang/sk-SK.rc | 0 .../applications/shutdown/lang/uk-UA.rc | 0 .../applications/shutdown/misc.c | 0 .../applications/shutdown/precomp.h | 0 .../applications/shutdown/resource.h | 0 .../applications/shutdown/rsrc.rc | 0 .../applications/shutdown/shutdown.c | 0 .../applications/shutdown/shutdown.rbuild | 0 .../applications/shutdown/shutdown.rc | 0 .../applications/sndvol32/lang/bg-BG.rc | 0 .../applications/sndvol32/lang/cs-CZ.rc | 0 .../applications/sndvol32/lang/de-DE.rc | 0 .../applications/sndvol32/lang/el-GR.rc | 0 .../applications/sndvol32/lang/en-US.rc | 0 .../applications/sndvol32/lang/es-ES.rc | 0 .../applications/sndvol32/lang/fr-FR.rc | 0 .../applications/sndvol32/lang/hu-HU.rc | 0 .../applications/sndvol32/lang/id-ID.rc | 0 .../applications/sndvol32/lang/it-IT.rc | 0 .../applications/sndvol32/lang/ja-JP.rc | 0 .../applications/sndvol32/lang/ko-KR.rc | 0 .../applications/sndvol32/lang/lt-LT.rc | 0 .../applications/sndvol32/lang/nl-NL.rc | 0 .../applications/sndvol32/lang/no-NO.rc | 0 .../applications/sndvol32/lang/pl-PL.rc | 0 .../applications/sndvol32/lang/pt-BR.rc | 0 .../applications/sndvol32/lang/ru-RU.rc | 0 .../applications/sndvol32/lang/sk-SK.rc | 0 .../applications/sndvol32/lang/sv-SE.rc | 0 .../applications/sndvol32/lang/th-TH.rc | 0 .../applications/sndvol32/lang/uk-UA.rc | 0 .../applications/sndvol32/misc.c | 0 .../applications/sndvol32/mixer.c | 0 .../applications/sndvol32/resources.h | 0 .../sndvol32/resources/sndvol32.ico | Bin .../applications/sndvol32/rsrc.rc | 0 .../applications/sndvol32/sndvol32.c | 0 .../applications/sndvol32/sndvol32.h | 0 .../applications/sndvol32/sndvol32.rbuild | 0 .../applications/sndvol32/sndvol32.rc | 0 .../applications/taskmgr/about.c | 0 .../applications/taskmgr/about.h | 0 .../applications/taskmgr/affinity.c | 0 .../applications/taskmgr/affinity.h | 0 .../applications/taskmgr/applpage.c | 0 .../applications/taskmgr/applpage.h | 0 .../applications/taskmgr/column.c | 0 .../applications/taskmgr/column.h | 0 .../applications/taskmgr/dbgchnl.c | 0 .../applications/taskmgr/dbgchnl.h | 0 .../applications/taskmgr/debug.c | 0 .../applications/taskmgr/debug.h | 0 .../applications/taskmgr/endproc.c | 0 .../applications/taskmgr/endproc.h | 0 .../applications/taskmgr/graph.c | 0 .../applications/taskmgr/graph.h | 0 .../applications/taskmgr/graphctl.c | 0 .../applications/taskmgr/graphctl.h | 0 .../applications/taskmgr/lang/bg-BG.rc | 0 .../applications/taskmgr/lang/cs-CZ.rc | 0 .../applications/taskmgr/lang/da-DK.rc | 0 .../applications/taskmgr/lang/de-DE.rc | 0 .../applications/taskmgr/lang/el-GR.rc | 0 .../applications/taskmgr/lang/en-US.rc | 0 .../applications/taskmgr/lang/es-ES.rc | 0 .../applications/taskmgr/lang/fr-FR.rc | 0 .../applications/taskmgr/lang/hu-HU.rc | 0 .../applications/taskmgr/lang/id-ID.rc | 0 .../applications/taskmgr/lang/it-IT.rc | 0 .../applications/taskmgr/lang/ja-JP.rc | 0 .../applications/taskmgr/lang/ko-KR.rc | 0 .../applications/taskmgr/lang/nl-NL.rc | 0 .../applications/taskmgr/lang/no-NO.rc | 0 .../applications/taskmgr/lang/pl-PL.rc | 0 .../applications/taskmgr/lang/pt-BR.rc | 0 .../applications/taskmgr/lang/ru-RU.rc | 0 .../applications/taskmgr/lang/sk-SK.rc | 0 .../applications/taskmgr/lang/sv-SE.rc | 0 .../applications/taskmgr/lang/uk-UA.rc | 0 .../applications/taskmgr/lang/zh-CN.rc | 0 .../applications/taskmgr/optnmenu.c | 0 .../applications/taskmgr/optnmenu.h | 0 .../applications/taskmgr/perfdata.c | 0 .../applications/taskmgr/perfdata.h | 0 .../applications/taskmgr/perfpage.c | 0 .../applications/taskmgr/perfpage.h | 0 .../applications/taskmgr/precomp.h | 0 .../applications/taskmgr/priority.c | 0 .../applications/taskmgr/priority.h | 0 .../applications/taskmgr/proclist.c | 0 .../applications/taskmgr/proclist.h | 0 .../applications/taskmgr/procpage.c | 0 .../applications/taskmgr/procpage.h | 0 .../applications/taskmgr/res/taskmgr.ico | Bin .../applications/taskmgr/res/trayicon.bmp | Bin .../applications/taskmgr/res/traymask.bmp | Bin .../applications/taskmgr/res/window.ico | Bin .../applications/taskmgr/res/windowsm.ico | Bin .../applications/taskmgr/resource.h | 0 .../applications/taskmgr/rsrc.rc | 0 .../base => base}/applications/taskmgr/run.c | 0 .../base => base}/applications/taskmgr/run.h | 0 .../applications/taskmgr/taskmgr.c | 0 .../applications/taskmgr/taskmgr.h | 0 .../applications/taskmgr/taskmgr.rbuild | 0 .../applications/taskmgr/taskmgr.rc | 0 .../applications/taskmgr/trayicon.c | 0 .../applications/taskmgr/trayicon.h | 0 .../applications/tsclient/MissTosca.sln | 0 .../applications/tsclient/mstsc/mstsc.cpp | 0 .../applications/tsclient/mstsc/mstsc.vcproj | 0 .../applications/tsclient/mstsc/stdafx.cpp | 0 .../applications/tsclient/mstsc/stdafx.h | 0 .../applications/tsclient/mstscax/mstscax.cpp | 0 .../tsclient/mstscax/mstscax.vcproj | 0 .../applications/tsclient/mstscax/stdafx.cpp | 0 .../applications/tsclient/mstscax/stdafx.h | 0 .../porting-tools/mstscax/mstscax.cpp | 0 .../porting-tools/mstscax/mstscax.def | 0 .../porting-tools/mstscax/mstscax.sln | 0 .../porting-tools/mstscax/mstscax.vcproj | 0 .../tsclient/porting-tools/mstscax/stdafx.cpp | 0 .../tsclient/porting-tools/mstscax/stdafx.h | 0 .../rdesktop-core-tester/activex.cpp | 0 .../rdesktop-core-tester/mstsclib.idl | 0 .../rdesktop-core-tester/mstsclib.rc | 0 .../rdesktop-core-tester/mstsclib_h.h | 0 .../rdesktop-core-tester/mstsclib_i.c | 0 .../rdesktop-core-tester/mstsclib_redist.idl | 0 .../rdesktop-core-tester/mstsclib_redist.rc | 0 .../rdesktop-core-tester/mstsclib_redist_h.h | 0 .../rdesktop-core-tester/mstsclib_redist_i.c | 0 .../rdesktop-core-tester.cpp | 0 .../rdesktop-core-tester.vcproj | 0 .../rdesktop-core-tester/stdafx.cpp | 0 .../rdesktop-core-tester/stdafx.h | 0 .../rdesktop-core-tester/typelib.rh | 0 .../applications/tsclient/rdesktop/COPYING | 0 .../tsclient/rdesktop/Makefile.in | 0 .../applications/tsclient/rdesktop/README | 0 .../applications/tsclient/rdesktop/bitmap.c | 0 .../applications/tsclient/rdesktop/bootstrap | 0 .../applications/tsclient/rdesktop/cache.c | 0 .../applications/tsclient/rdesktop/channels.c | 0 .../applications/tsclient/rdesktop/cliprdr.c | 0 .../tsclient/rdesktop/config.guess | 0 .../applications/tsclient/rdesktop/config.sub | 0 .../tsclient/rdesktop/configure.ac | 0 .../tsclient/rdesktop/constants.h | 0 .../applications/tsclient/rdesktop/disk.c | 0 .../applications/tsclient/rdesktop/disk.h | 0 .../tsclient/rdesktop/doc/AUTHORS | 0 .../tsclient/rdesktop/doc/ChangeLog | 0 .../tsclient/rdesktop/doc/HACKING | 0 .../applications/tsclient/rdesktop/doc/TODO | 0 .../tsclient/rdesktop/doc/ipv6.txt | 0 .../tsclient/rdesktop/doc/keymap-names.txt | 0 .../tsclient/rdesktop/doc/keymapping.txt | 0 .../tsclient/rdesktop/doc/keynums.png | Bin .../tsclient/rdesktop/doc/licensing.txt | 0 .../tsclient/rdesktop/doc/lspci-channel.txt | 0 .../tsclient/rdesktop/doc/patches.txt | 0 .../tsclient/rdesktop/doc/rdesktop.1 | 0 .../tsclient/rdesktop/doc/redirection.txt | 0 .../rdesktop/doc/seamlessrdp-channel.txt | 0 .../applications/tsclient/rdesktop/ewmhints.c | 0 .../tsclient/rdesktop/indent-all.sh | 0 .../applications/tsclient/rdesktop/install-sh | 0 .../applications/tsclient/rdesktop/iso.c | 0 .../applications/tsclient/rdesktop/keymaps/ar | 0 .../tsclient/rdesktop/keymaps/common | 0 .../tsclient/rdesktop/keymaps/convert-map | 0 .../applications/tsclient/rdesktop/keymaps/cs | 0 .../applications/tsclient/rdesktop/keymaps/da | 0 .../applications/tsclient/rdesktop/keymaps/de | 0 .../tsclient/rdesktop/keymaps/de-ch | 0 .../tsclient/rdesktop/keymaps/en-dv | 0 .../tsclient/rdesktop/keymaps/en-gb | 0 .../tsclient/rdesktop/keymaps/en-us | 0 .../applications/tsclient/rdesktop/keymaps/es | 0 .../applications/tsclient/rdesktop/keymaps/et | 0 .../applications/tsclient/rdesktop/keymaps/fi | 0 .../applications/tsclient/rdesktop/keymaps/fo | 0 .../applications/tsclient/rdesktop/keymaps/fr | 0 .../tsclient/rdesktop/keymaps/fr-be | 0 .../tsclient/rdesktop/keymaps/fr-ca | 0 .../tsclient/rdesktop/keymaps/fr-ch | 0 .../applications/tsclient/rdesktop/keymaps/he | 0 .../applications/tsclient/rdesktop/keymaps/hr | 0 .../applications/tsclient/rdesktop/keymaps/hu | 0 .../applications/tsclient/rdesktop/keymaps/is | 0 .../applications/tsclient/rdesktop/keymaps/it | 0 .../applications/tsclient/rdesktop/keymaps/ja | 0 .../applications/tsclient/rdesktop/keymaps/ko | 0 .../applications/tsclient/rdesktop/keymaps/lt | 0 .../applications/tsclient/rdesktop/keymaps/lv | 0 .../applications/tsclient/rdesktop/keymaps/mk | 0 .../tsclient/rdesktop/keymaps/modifiers | 0 .../applications/tsclient/rdesktop/keymaps/nl | 0 .../tsclient/rdesktop/keymaps/nl-be | 0 .../applications/tsclient/rdesktop/keymaps/no | 0 .../applications/tsclient/rdesktop/keymaps/pl | 0 .../applications/tsclient/rdesktop/keymaps/pt | 0 .../tsclient/rdesktop/keymaps/pt-br | 0 .../applications/tsclient/rdesktop/keymaps/ru | 0 .../applications/tsclient/rdesktop/keymaps/sl | 0 .../applications/tsclient/rdesktop/keymaps/sv | 0 .../applications/tsclient/rdesktop/keymaps/th | 0 .../applications/tsclient/rdesktop/keymaps/tr | 0 .../applications/tsclient/rdesktop/licence.c | 0 .../applications/tsclient/rdesktop/lspci.c | 0 .../applications/tsclient/rdesktop/mcs.c | 0 .../applications/tsclient/rdesktop/mppc.c | 0 .../applications/tsclient/rdesktop/orders.c | 0 .../applications/tsclient/rdesktop/orders.h | 0 .../applications/tsclient/rdesktop/parallel.c | 0 .../applications/tsclient/rdesktop/parse.h | 0 .../applications/tsclient/rdesktop/printer.c | 0 .../tsclient/rdesktop/printercache.c | 0 .../applications/tsclient/rdesktop/proto.h | 0 .../applications/tsclient/rdesktop/proto.head | 0 .../applications/tsclient/rdesktop/proto.tail | 0 .../applications/tsclient/rdesktop/pstcache.c | 0 .../tsclient/rdesktop/rdesktop-core.vcproj | 0 .../applications/tsclient/rdesktop/rdesktop.c | 0 .../applications/tsclient/rdesktop/rdesktop.h | 0 .../tsclient/rdesktop/rdesktop.spec | 0 .../applications/tsclient/rdesktop/rdp.c | 0 .../applications/tsclient/rdesktop/rdp5.c | 0 .../applications/tsclient/rdesktop/rdpdr.c | 0 .../applications/tsclient/rdesktop/rdpsnd.c | 0 .../tsclient/rdesktop/rdpsnd_libao.c | 0 .../tsclient/rdesktop/rdpsnd_oss.c | 0 .../tsclient/rdesktop/rdpsnd_sgi.c | 0 .../tsclient/rdesktop/rdpsnd_sun.c | 0 .../tsclient/rdesktop/scancodes.h | 0 .../applications/tsclient/rdesktop/seamless.c | 0 .../applications/tsclient/rdesktop/seamless.h | 0 .../applications/tsclient/rdesktop/secure.c | 0 .../applications/tsclient/rdesktop/serial.c | 0 .../applications/tsclient/rdesktop/tcp.c | 0 .../applications/tsclient/rdesktop/types.h | 0 .../tsclient/rdesktop/uiports/makefile_nanox | 0 .../tsclient/rdesktop/uiports/makefile_qt | 0 .../tsclient/rdesktop/uiports/makefile_qte | 0 .../tsclient/rdesktop/uiports/makefile_svga | 0 .../tsclient/rdesktop/uiports/makefile_xxx | 0 .../tsclient/rdesktop/uiports/nanoxreadme.txt | 0 .../tsclient/rdesktop/uiports/nanoxwin.c | 0 .../tsclient/rdesktop/uiports/qtereadme.txt | 0 .../tsclient/rdesktop/uiports/qtewin.cpp | 0 .../tsclient/rdesktop/uiports/qtewin.h | 0 .../tsclient/rdesktop/uiports/qtreadme.txt | 0 .../tsclient/rdesktop/uiports/qtwin.cpp | 0 .../tsclient/rdesktop/uiports/qtwin.h | 0 .../tsclient/rdesktop/uiports/readme.txt | 0 .../tsclient/rdesktop/uiports/svgareadme.txt | 0 .../tsclient/rdesktop/uiports/svgawin.c | 0 .../tsclient/rdesktop/uiports/xxxwin.c | 0 .../applications/tsclient/rdesktop/vnc/vnc.c | 0 .../applications/tsclient/rdesktop/vnc/vnc.h | 0 .../tsclient/rdesktop/vnc/x11stubs.c | 0 .../tsclient/rdesktop/vnc/x11stubs.h | 0 .../applications/tsclient/rdesktop/xclip.c | 0 .../applications/tsclient/rdesktop/xkeymap.c | 0 .../applications/tsclient/rdesktop/xproto.h | 0 .../applications/tsclient/rdesktop/xwin.c | 0 .../applications/winhlp32/callback.c | 0 .../applications/winhlp32/hlpfile.c | 0 .../applications/winhlp32/hlpfile.h | 0 .../applications/winhlp32/lang/bg-BG.rc | 0 .../applications/winhlp32/lang/cs-CZ.rc | 0 .../applications/winhlp32/lang/da-DK.rc | 0 .../applications/winhlp32/lang/de-DE.rc | 0 .../applications/winhlp32/lang/el-GR.rc | 0 .../applications/winhlp32/lang/en-US.rc | 0 .../applications/winhlp32/lang/es-ES.rc | 0 .../applications/winhlp32/lang/fi-FI.rc | 0 .../applications/winhlp32/lang/fr-FR.rc | 0 .../applications/winhlp32/lang/hu-HU.rc | 0 .../applications/winhlp32/lang/it-IT.rc | 0 .../applications/winhlp32/lang/ja-JP.rc | 0 .../applications/winhlp32/lang/ko-KR.rc | 0 .../applications/winhlp32/lang/lt-LT.rc | 0 .../applications/winhlp32/lang/nl-NL.rc | 0 .../applications/winhlp32/lang/no-NO.rc | 0 .../applications/winhlp32/lang/pl-PL.rc | 0 .../applications/winhlp32/lang/pt-BR.rc | 0 .../applications/winhlp32/lang/rm-CH.rc | 0 .../applications/winhlp32/lang/ru-RU.rc | 0 .../applications/winhlp32/lang/sk-SK.rc | 0 .../applications/winhlp32/lang/sl-SI.rc | 0 .../applications/winhlp32/lang/sv-SE.rc | 0 .../applications/winhlp32/lang/tr-TR.rc | 0 .../applications/winhlp32/lang/uk-UA.rc | 0 .../applications/winhlp32/lang/zh-CN.rc | 0 .../applications/winhlp32/lex.yy.c | 0 .../applications/winhlp32/macro.c | 0 .../applications/winhlp32/macro.h | 0 .../applications/winhlp32/macro.lex.l | 0 .../applications/winhlp32/rsrc.rc | 0 .../applications/winhlp32/string.c | 0 .../applications/winhlp32/winhelp.c | 0 .../applications/winhlp32/winhelp.h | 0 .../applications/winhlp32/winhelp.ico | Bin .../applications/winhlp32/winhelp_res.h | 0 .../applications/winhlp32/winhlp32.rbuild | 0 .../base => base}/applications/wordpad/Da.rc | 0 .../base => base}/applications/wordpad/De.rc | 0 .../base => base}/applications/wordpad/En.rc | 0 .../base => base}/applications/wordpad/Fr.rc | 0 .../base => base}/applications/wordpad/Hu.rc | 0 .../base => base}/applications/wordpad/Ja.rc | 0 .../base => base}/applications/wordpad/Ko.rc | 0 .../base => base}/applications/wordpad/Nl.rc | 0 .../base => base}/applications/wordpad/No.rc | 0 .../base => base}/applications/wordpad/Pl.rc | 0 .../base => base}/applications/wordpad/Ru.rc | 0 .../base => base}/applications/wordpad/Si.rc | 0 .../base => base}/applications/wordpad/Tr.rc | 0 .../base => base}/applications/wordpad/Zh.rc | 0 .../applications/wordpad/formatbar.bmp | Bin .../applications/wordpad/print.c | 0 .../applications/wordpad/registry.c | 0 .../applications/wordpad/rsrc.rc | 0 .../applications/wordpad/rtf.ico | Bin .../applications/wordpad/toolbar.bmp | Bin .../applications/wordpad/txt.ico | Bin .../applications/wordpad/wordpad.c | 0 .../applications/wordpad/wordpad.h | 0 .../applications/wordpad/wordpad.ico | Bin .../applications/wordpad/wordpad.rbuild | 0 .../applications/wordpad/wri.ico | Bin {reactos/base => base}/base.rbuild | 0 .../services/audiosrv/audiosrv.h | 0 .../services/audiosrv/audiosrv.rbuild | 0 .../services/audiosrv/audiosrv.rc | 0 .../services/audiosrv/audiosrv.txt | 0 .../base => base}/services/audiosrv/debug.c | 0 .../base => base}/services/audiosrv/main.c | 0 .../base => base}/services/audiosrv/pnp.c | 0 .../services/audiosrv/pnp_list_lock.c | 0 .../services/audiosrv/pnp_list_manager.c | 0 .../base => base}/services/dhcp/adapter.c | 0 {reactos/base => base}/services/dhcp/alloc.c | 0 {reactos/base => base}/services/dhcp/api.c | 0 {reactos/base => base}/services/dhcp/compat.c | 0 .../base => base}/services/dhcp/design.txt | 0 .../base => base}/services/dhcp/dhclient.c | 0 .../base => base}/services/dhcp/dhcp.rbuild | 0 {reactos/base => base}/services/dhcp/dhcp.rc | 0 .../base => base}/services/dhcp/dhcpmain.c | 0 .../base => base}/services/dhcp/dispatch.c | 0 {reactos/base => base}/services/dhcp/hash.c | 0 .../services/dhcp/include/cdefs.h | 0 .../services/dhcp/include/debug.h | 0 .../services/dhcp/include/dhcp.h | 0 .../services/dhcp/include/dhcpd.h | 0 .../services/dhcp/include/dhctoken.h | 0 .../services/dhcp/include/hash.h | 0 .../services/dhcp/include/inet.h | 0 .../services/dhcp/include/osdep.h | 0 .../services/dhcp/include/predec.h | 0 .../services/dhcp/include/privsep.h | 0 .../services/dhcp/include/rosdhcp.h | 0 .../services/dhcp/include/site.h | 0 .../services/dhcp/include/stdint.h | 0 .../services/dhcp/include/sysconf.h | 0 .../services/dhcp/include/tree.h | 0 .../services/dhcp/include/version.h | 0 {reactos/base => base}/services/dhcp/memory.c | 0 .../base => base}/services/dhcp/options.c | 0 {reactos/base => base}/services/dhcp/pipe.c | 0 .../base => base}/services/dhcp/privsep.c | 0 {reactos/base => base}/services/dhcp/socket.c | 0 {reactos/base => base}/services/dhcp/tables.c | 0 {reactos/base => base}/services/dhcp/timer.c | 0 {reactos/base => base}/services/dhcp/tree.c | 0 {reactos/base => base}/services/dhcp/util.c | 0 .../services/eventlog/eventlog.c | 0 .../services/eventlog/eventlog.h | 0 .../services/eventlog/eventlog.rbuild | 0 .../services/eventlog/eventlog.rc | 0 .../base => base}/services/eventlog/file.c | 0 .../base => base}/services/eventlog/logport.c | 0 .../base => base}/services/eventlog/rpc.c | 0 .../base => base}/services/rpcss/endpoint.c | 0 {reactos/base => base}/services/rpcss/rpcss.c | 0 {reactos/base => base}/services/rpcss/rpcss.h | 0 .../base => base}/services/rpcss/rpcss.rbuild | 0 .../base => base}/services/rpcss/rpcss.rc | 0 .../base => base}/services/services.rbuild | 0 .../base => base}/services/spoolsv/spoolsv.c | 0 .../services/spoolsv/spoolsv.rbuild | 0 .../base => base}/services/spoolsv/spoolsv.rc | 0 .../base => base}/services/svchost/svchost.c | 0 .../base => base}/services/svchost/svchost.h | 0 .../services/svchost/svchost.rbuild | 0 .../base => base}/services/svchost/svchost.rc | 0 .../base => base}/services/tcpsvcs/chargen.c | 0 .../base => base}/services/tcpsvcs/daytime.c | 0 .../base => base}/services/tcpsvcs/discard.c | 0 .../base => base}/services/tcpsvcs/echo.c | 0 {reactos/base => base}/services/tcpsvcs/log.c | 0 .../base => base}/services/tcpsvcs/qotd.c | 0 .../base => base}/services/tcpsvcs/quotes | 0 .../services/tcpsvcs/skelserver.c | 0 .../base => base}/services/tcpsvcs/tcpsvcs.c | 0 .../base => base}/services/tcpsvcs/tcpsvcs.h | 0 .../services/tcpsvcs/tcpsvcs.rbuild | 0 .../base => base}/services/tcpsvcs/tcpsvcs.rc | 0 .../services/umpnpmgr/umpnpmgr.c | 0 .../services/umpnpmgr/umpnpmgr.rbuild | 0 .../services/umpnpmgr/umpnpmgr.rc | 0 .../base => base}/setup/reactos/lang/bg-BG.rc | 0 .../base => base}/setup/reactos/lang/cs-CZ.rc | 0 .../base => base}/setup/reactos/lang/de-DE.rc | 0 .../base => base}/setup/reactos/lang/el-GR.rc | 0 .../base => base}/setup/reactos/lang/en-US.rc | 0 .../base => base}/setup/reactos/lang/es-ES.rc | 0 .../base => base}/setup/reactos/lang/fi-FI.rc | 0 .../base => base}/setup/reactos/lang/fr-FR.rc | 0 .../base => base}/setup/reactos/lang/hu-HU.rc | 0 .../base => base}/setup/reactos/lang/id-ID.rc | 0 .../base => base}/setup/reactos/lang/it-IT.rc | 0 .../base => base}/setup/reactos/lang/ja-JP.rc | 0 .../base => base}/setup/reactos/lang/lt-LT.rc | 0 .../base => base}/setup/reactos/lang/nl-NL.rc | 0 .../base => base}/setup/reactos/lang/no-NO.rc | 0 .../base => base}/setup/reactos/lang/pl-PL.rc | 0 .../base => base}/setup/reactos/lang/pt-BR.rc | 0 .../base => base}/setup/reactos/lang/ru-RU.rc | 0 .../base => base}/setup/reactos/lang/sk-SK.rc | 0 .../base => base}/setup/reactos/lang/sv-SE.rc | 0 .../base => base}/setup/reactos/lang/th-TH.rc | 0 .../base => base}/setup/reactos/lang/uk-UA.rc | 0 .../base => base}/setup/reactos/lang/zh-CN.rc | 0 .../base => base}/setup/reactos/reactos.c | 0 .../setup/reactos/reactos.rbuild | 0 .../base => base}/setup/reactos/reactos.rc | 0 .../setup/reactos/res/header.bmp | Bin .../setup/reactos/res/reactos.ico | Bin .../setup/reactos/res/rosbitmap.bmp | Bin .../setup/reactos/res/watermark.bmp | Bin .../base => base}/setup/reactos/resource.h | 0 {reactos/base => base}/setup/reactos/rsrc.rc | 0 {reactos/base => base}/setup/setup.rbuild | 0 {reactos/base => base}/setup/setup/setup.c | 0 .../base => base}/setup/setup/setup.rbuild | 0 {reactos/base => base}/setup/setup/setup.rc | 0 {reactos/base => base}/setup/usetup/bootsup.c | 0 {reactos/base => base}/setup/usetup/bootsup.h | 0 {reactos/base => base}/setup/usetup/cabinet.c | 0 {reactos/base => base}/setup/usetup/cabinet.h | 0 {reactos/base => base}/setup/usetup/chkdsk.c | 0 {reactos/base => base}/setup/usetup/chkdsk.h | 0 .../base => base}/setup/usetup/drivesup.c | 0 .../base => base}/setup/usetup/drivesup.h | 0 .../base => base}/setup/usetup/errorcode.h | 0 .../base => base}/setup/usetup/filequeue.c | 0 .../base => base}/setup/usetup/filequeue.h | 0 {reactos/base => base}/setup/usetup/filesup.c | 0 {reactos/base => base}/setup/usetup/filesup.h | 0 {reactos/base => base}/setup/usetup/format.c | 0 {reactos/base => base}/setup/usetup/format.h | 0 {reactos/base => base}/setup/usetup/fslist.c | 0 {reactos/base => base}/setup/usetup/fslist.h | 0 {reactos/base => base}/setup/usetup/genlist.c | 0 {reactos/base => base}/setup/usetup/genlist.h | 0 {reactos/base => base}/setup/usetup/host.h | 0 {reactos/base => base}/setup/usetup/inffile.c | 0 {reactos/base => base}/setup/usetup/inffile.h | 0 .../base => base}/setup/usetup/inicache.c | 0 .../base => base}/setup/usetup/inicache.h | 0 .../setup/usetup/interface/consup.c | 0 .../setup/usetup/interface/consup.h | 0 .../setup/usetup/interface/devinst.c | 0 .../setup/usetup/interface/usetup.c | 0 .../base => base}/setup/usetup/lang/af-ZA.h | 0 .../base => base}/setup/usetup/lang/ar-AE.h | 0 .../base => base}/setup/usetup/lang/ar-BH.h | 0 .../base => base}/setup/usetup/lang/ar-DZ.h | 0 .../base => base}/setup/usetup/lang/ar-EG.h | 0 .../base => base}/setup/usetup/lang/ar-IQ.h | 0 .../base => base}/setup/usetup/lang/ar-JO.h | 0 .../base => base}/setup/usetup/lang/ar-KW.h | 0 .../base => base}/setup/usetup/lang/ar-LB.h | 0 .../base => base}/setup/usetup/lang/ar-LY.h | 0 .../base => base}/setup/usetup/lang/ar-MA.h | 0 .../base => base}/setup/usetup/lang/ar-OM.h | 0 .../base => base}/setup/usetup/lang/ar-QA.h | 0 .../base => base}/setup/usetup/lang/ar-SA.h | 0 .../base => base}/setup/usetup/lang/ar-SY.h | 0 .../base => base}/setup/usetup/lang/ar-TN.h | 0 .../base => base}/setup/usetup/lang/ar-YE.h | 0 .../base => base}/setup/usetup/lang/az-AZ.h | 0 .../base => base}/setup/usetup/lang/be-BY.h | 0 .../base => base}/setup/usetup/lang/bg-BG.h | 0 .../base => base}/setup/usetup/lang/ca-ES.h | 0 .../base => base}/setup/usetup/lang/cs-CZ.h | 0 .../base => base}/setup/usetup/lang/da-DK.h | 0 .../base => base}/setup/usetup/lang/de-AT.h | 0 .../base => base}/setup/usetup/lang/de-CH.h | 0 .../base => base}/setup/usetup/lang/de-DE.h | 0 .../base => base}/setup/usetup/lang/de-LI.h | 0 .../base => base}/setup/usetup/lang/de-LU.h | 0 .../base => base}/setup/usetup/lang/dv-MV.h | 0 .../base => base}/setup/usetup/lang/el-GR.h | 0 .../base => base}/setup/usetup/lang/en-AU.h | 0 .../base => base}/setup/usetup/lang/en-BZ.h | 0 .../base => base}/setup/usetup/lang/en-CA.h | 0 .../base => base}/setup/usetup/lang/en-CB.h | 0 .../base => base}/setup/usetup/lang/en-GB.h | 0 .../base => base}/setup/usetup/lang/en-IE.h | 0 .../base => base}/setup/usetup/lang/en-JM.h | 0 .../base => base}/setup/usetup/lang/en-NZ.h | 0 .../base => base}/setup/usetup/lang/en-PH.h | 0 .../base => base}/setup/usetup/lang/en-TT.h | 0 .../base => base}/setup/usetup/lang/en-US.h | 0 .../base => base}/setup/usetup/lang/en-ZA.h | 0 .../base => base}/setup/usetup/lang/en-ZW.h | 0 .../base => base}/setup/usetup/lang/es-AR.h | 0 .../base => base}/setup/usetup/lang/es-BO.h | 0 .../base => base}/setup/usetup/lang/es-CL.h | 0 .../base => base}/setup/usetup/lang/es-CO.h | 0 .../base => base}/setup/usetup/lang/es-CR.h | 0 .../base => base}/setup/usetup/lang/es-DO.h | 0 .../base => base}/setup/usetup/lang/es-EC.h | 0 .../base => base}/setup/usetup/lang/es-ES.h | 0 .../base => base}/setup/usetup/lang/es-GT.h | 0 .../base => base}/setup/usetup/lang/es-HN.h | 0 .../base => base}/setup/usetup/lang/es-MX.h | 0 .../base => base}/setup/usetup/lang/es-NI.h | 0 .../base => base}/setup/usetup/lang/es-PA.h | 0 .../base => base}/setup/usetup/lang/es-PE.h | 0 .../base => base}/setup/usetup/lang/es-PR.h | 0 .../base => base}/setup/usetup/lang/es-PY.h | 0 .../base => base}/setup/usetup/lang/es-SV.h | 0 .../base => base}/setup/usetup/lang/es-UY.h | 0 .../base => base}/setup/usetup/lang/es-VE.h | 0 .../base => base}/setup/usetup/lang/et-EE.h | 0 .../base => base}/setup/usetup/lang/eu-ES.h | 0 .../base => base}/setup/usetup/lang/fa-IR.h | 0 .../base => base}/setup/usetup/lang/fi-FI.h | 0 .../base => base}/setup/usetup/lang/fo-FO.h | 0 .../base => base}/setup/usetup/lang/fr-BE.h | 0 .../base => base}/setup/usetup/lang/fr-CA.h | 0 .../base => base}/setup/usetup/lang/fr-CH.h | 0 .../base => base}/setup/usetup/lang/fr-FR.h | 0 .../base => base}/setup/usetup/lang/fr-LU.h | 0 .../base => base}/setup/usetup/lang/fr-MC.h | 0 .../base => base}/setup/usetup/lang/gl-ES.h | 0 .../base => base}/setup/usetup/lang/gu-IN.h | 0 .../base => base}/setup/usetup/lang/he-IL.h | 0 .../base => base}/setup/usetup/lang/hi-IN.h | 0 .../base => base}/setup/usetup/lang/hr-HR.h | 0 .../base => base}/setup/usetup/lang/hu-HU.h | 0 .../base => base}/setup/usetup/lang/hy-AM.h | 0 .../base => base}/setup/usetup/lang/id-ID.h | 0 .../base => base}/setup/usetup/lang/is-IS.h | 0 .../base => base}/setup/usetup/lang/it-CH.h | 0 .../base => base}/setup/usetup/lang/it-IT.h | 0 .../base => base}/setup/usetup/lang/ja-JP.h | 0 .../base => base}/setup/usetup/lang/ka-GE.h | 0 .../base => base}/setup/usetup/lang/kk-KZ.h | 0 .../base => base}/setup/usetup/lang/kn-IN.h | 0 .../base => base}/setup/usetup/lang/ko-KR.h | 0 .../base => base}/setup/usetup/lang/kok-IN.h | 0 .../base => base}/setup/usetup/lang/ky-KG.h | 0 .../base => base}/setup/usetup/lang/lt-LT.h | 0 .../base => base}/setup/usetup/lang/lv-LV.h | 0 .../base => base}/setup/usetup/lang/mk-MK.h | 0 .../base => base}/setup/usetup/lang/mn-MN.h | 0 .../base => base}/setup/usetup/lang/mr-IN.h | 0 .../base => base}/setup/usetup/lang/ms-BN.h | 0 .../base => base}/setup/usetup/lang/ms-MY.h | 0 .../base => base}/setup/usetup/lang/nl-BE.h | 0 .../base => base}/setup/usetup/lang/nl-NL.h | 0 .../base => base}/setup/usetup/lang/nn-NO.h | 0 .../base => base}/setup/usetup/lang/pa-IN.h | 0 .../base => base}/setup/usetup/lang/pl-PL.h | 0 .../base => base}/setup/usetup/lang/pt-BR.h | 0 .../base => base}/setup/usetup/lang/pt-PT.h | 0 .../base => base}/setup/usetup/lang/ro-RO.h | 0 .../base => base}/setup/usetup/lang/ru-RU.h | 0 .../base => base}/setup/usetup/lang/sa-IN.h | 0 .../base => base}/setup/usetup/lang/sk-SK.h | 0 .../base => base}/setup/usetup/lang/sl-SI.h | 0 .../base => base}/setup/usetup/lang/sq-AL.h | 0 .../base => base}/setup/usetup/lang/sr-SP.h | 0 .../base => base}/setup/usetup/lang/sv-FI.h | 0 .../base => base}/setup/usetup/lang/sv-SE.h | 0 .../base => base}/setup/usetup/lang/sw-KE.h | 0 .../base => base}/setup/usetup/lang/syr-SY.h | 0 .../base => base}/setup/usetup/lang/ta-IN.h | 0 .../base => base}/setup/usetup/lang/te-IN.h | 0 .../base => base}/setup/usetup/lang/th-TH.h | 0 .../base => base}/setup/usetup/lang/tr-TR.h | 0 .../base => base}/setup/usetup/lang/tt-TA.h | 0 .../base => base}/setup/usetup/lang/uk-UA.h | 0 .../base => base}/setup/usetup/lang/ur-PK.h | 0 .../base => base}/setup/usetup/lang/uz-UZ.h | 0 .../base => base}/setup/usetup/lang/vi-VN.h | 0 .../base => base}/setup/usetup/lang/zh-CN.h | 0 .../base => base}/setup/usetup/lang/zh-HK.h | 0 .../base => base}/setup/usetup/lang/zh-MO.h | 0 .../base => base}/setup/usetup/lang/zh-SG.h | 0 .../base => base}/setup/usetup/lang/zh-TW.h | 0 {reactos/base => base}/setup/usetup/mui.c | 0 {reactos/base => base}/setup/usetup/mui.h | 0 .../base => base}/setup/usetup/muifonts.h | 0 .../base => base}/setup/usetup/muilanguages.h | 0 .../setup/usetup/native/console.c | 0 .../setup/usetup/native/fslist.c | 0 .../setup/usetup/native/host_native.h | 0 .../setup/usetup/native/utils/console.c | 0 .../setup/usetup/native/utils/console.h | 0 .../setup/usetup/native/utils/keytrans.c | 0 .../setup/usetup/native/utils/keytrans.h | 0 .../base => base}/setup/usetup/partlist.c | 0 .../base => base}/setup/usetup/partlist.h | 0 .../base => base}/setup/usetup/progress.c | 0 .../base => base}/setup/usetup/progress.h | 0 .../base => base}/setup/usetup/registry.c | 0 .../base => base}/setup/usetup/registry.h | 0 .../base => base}/setup/usetup/settings.c | 0 .../base => base}/setup/usetup/settings.h | 0 {reactos/base => base}/setup/usetup/usetup.h | 0 .../base => base}/setup/usetup/usetup.rbuild | 0 {reactos/base => base}/setup/usetup/usetup.rc | 0 .../base => base}/setup/vmwinst/lang/bg-BG.rc | 0 .../base => base}/setup/vmwinst/lang/cs-CZ.rc | 0 .../base => base}/setup/vmwinst/lang/da-DK.rc | 0 .../base => base}/setup/vmwinst/lang/de-DE.rc | 0 .../base => base}/setup/vmwinst/lang/el-GR.rc | 0 .../base => base}/setup/vmwinst/lang/en-US.rc | 0 .../base => base}/setup/vmwinst/lang/es-ES.rc | 0 .../base => base}/setup/vmwinst/lang/fr-FR.rc | 0 .../base => base}/setup/vmwinst/lang/hu-HU.rc | 0 .../base => base}/setup/vmwinst/lang/id-ID.rc | 0 .../base => base}/setup/vmwinst/lang/it-IT.rc | 0 .../base => base}/setup/vmwinst/lang/ja-JP.rc | 0 .../base => base}/setup/vmwinst/lang/lt-LT.rc | 0 .../base => base}/setup/vmwinst/lang/no-NO.rc | 0 .../base => base}/setup/vmwinst/lang/pl-PL.rc | 0 .../base => base}/setup/vmwinst/lang/ru-RU.rc | 0 .../base => base}/setup/vmwinst/lang/sk-SK.rc | 0 .../base => base}/setup/vmwinst/lang/uk-UA.rc | 0 .../base => base}/setup/vmwinst/lang/zh-CN.rc | 0 .../setup/vmwinst/resources/header.bmp | Bin .../setup/vmwinst/resources/watermark.bmp | Bin {reactos/base => base}/setup/vmwinst/rsrc.rc | 0 .../base => base}/setup/vmwinst/vmwinst.c | 0 .../base => base}/setup/vmwinst/vmwinst.h | 0 .../setup/vmwinst/vmwinst.rbuild | 0 .../base => base}/setup/vmwinst/vmwinst.rc | 0 .../base => base}/setup/welcome/lang/bg-BG.rc | 0 .../base => base}/setup/welcome/lang/cs-CZ.rc | 0 .../base => base}/setup/welcome/lang/da-DK.rc | 0 .../base => base}/setup/welcome/lang/de-DE.rc | 0 .../base => base}/setup/welcome/lang/el-GR.rc | 0 .../base => base}/setup/welcome/lang/en-US.rc | 0 .../base => base}/setup/welcome/lang/es-ES.rc | 0 .../base => base}/setup/welcome/lang/fr-FR.rc | 0 .../base => base}/setup/welcome/lang/hu-HU.rc | 0 .../base => base}/setup/welcome/lang/id-ID.rc | 0 .../base => base}/setup/welcome/lang/it-IT.rc | 0 .../base => base}/setup/welcome/lang/ja-JP.rc | 0 .../base => base}/setup/welcome/lang/lt-LT.rc | 0 .../base => base}/setup/welcome/lang/nl-NL.rc | 0 .../base => base}/setup/welcome/lang/no-NO.rc | 0 .../base => base}/setup/welcome/lang/pl-PL.rc | 0 .../base => base}/setup/welcome/lang/pt-BR.rc | 0 .../base => base}/setup/welcome/lang/ru-RU.rc | 0 .../base => base}/setup/welcome/lang/sk-SK.rc | 0 .../base => base}/setup/welcome/lang/sv-SE.rc | 0 .../base => base}/setup/welcome/lang/th-TH.rc | 0 .../base => base}/setup/welcome/lang/uk-UA.rc | 0 .../base => base}/setup/welcome/lang/zh-CN.rc | 0 .../base => base}/setup/welcome/res/title.bmp | Bin .../setup/welcome/res/welcome.ico | Bin .../base => base}/setup/welcome/resource.h | 0 {reactos/base => base}/setup/welcome/rsrc.rc | 0 .../base => base}/setup/welcome/welcome.c | 0 .../setup/welcome/welcome.rbuild | 0 .../base => base}/setup/welcome/welcome.rc | 0 {reactos/base => base}/shell/cmd/alias.c | 0 {reactos/base => base}/shell/cmd/attrib.c | 0 {reactos/base => base}/shell/cmd/batch.c | 0 {reactos/base => base}/shell/cmd/batch.h | 0 {reactos/base => base}/shell/cmd/beep.c | 0 {reactos/base => base}/shell/cmd/call.c | 0 {reactos/base => base}/shell/cmd/chcp.c | 0 {reactos/base => base}/shell/cmd/choice.c | 0 {reactos/base => base}/shell/cmd/cls.c | 0 {reactos/base => base}/shell/cmd/cmd.c | 0 {reactos/base => base}/shell/cmd/cmd.h | 0 {reactos/base => base}/shell/cmd/cmd.rbuild | 0 {reactos/base => base}/shell/cmd/cmd.rc | 0 {reactos/base => base}/shell/cmd/cmddbg.c | 0 {reactos/base => base}/shell/cmd/cmddbg.h | 0 {reactos/base => base}/shell/cmd/cmdinput.c | 0 {reactos/base => base}/shell/cmd/cmdtable.c | 0 {reactos/base => base}/shell/cmd/cmdver.h | 0 {reactos/base => base}/shell/cmd/color.c | 0 {reactos/base => base}/shell/cmd/config.h | 0 {reactos/base => base}/shell/cmd/console.c | 0 {reactos/base => base}/shell/cmd/copy.c | 0 {reactos/base => base}/shell/cmd/date.c | 0 {reactos/base => base}/shell/cmd/del.c | 0 {reactos/base => base}/shell/cmd/delay.c | 0 {reactos/base => base}/shell/cmd/dir.c | 0 {reactos/base => base}/shell/cmd/dirstack.c | 0 {reactos/base => base}/shell/cmd/echo.c | 0 {reactos/base => base}/shell/cmd/error.c | 0 {reactos/base => base}/shell/cmd/filecomp.c | 0 {reactos/base => base}/shell/cmd/files.txt | 0 {reactos/base => base}/shell/cmd/for.c | 0 {reactos/base => base}/shell/cmd/free.c | 0 {reactos/base => base}/shell/cmd/goto.c | 0 {reactos/base => base}/shell/cmd/history.c | 0 {reactos/base => base}/shell/cmd/history.txt | 0 {reactos/base => base}/shell/cmd/if.c | 0 {reactos/base => base}/shell/cmd/internal.c | 0 {reactos/base => base}/shell/cmd/label.c | 0 .../base => base}/shell/cmd/lang/de-DE.rc | 0 .../base => base}/shell/cmd/lang/el-GR.rc | 0 .../base => base}/shell/cmd/lang/en-US.rc | 0 .../base => base}/shell/cmd/lang/es-ES.rc | 0 .../base => base}/shell/cmd/lang/fr-FR.rc | 0 .../base => base}/shell/cmd/lang/hu-HU.rc | 0 .../base => base}/shell/cmd/lang/id-ID.rc | 0 .../base => base}/shell/cmd/lang/it-IT.rc | 0 .../base => base}/shell/cmd/lang/ja-JP.rc | 0 .../base => base}/shell/cmd/lang/no-NO.rc | 0 .../base => base}/shell/cmd/lang/pl-PL.rc | 0 .../base => base}/shell/cmd/lang/ru-RU.rc | 0 .../base => base}/shell/cmd/lang/uk-UA.rc | 0 {reactos/base => base}/shell/cmd/license.txt | 0 {reactos/base => base}/shell/cmd/locale.c | 0 {reactos/base => base}/shell/cmd/main.c | 0 {reactos/base => base}/shell/cmd/memory.c | 0 {reactos/base => base}/shell/cmd/misc.c | 0 {reactos/base => base}/shell/cmd/move.c | 0 {reactos/base => base}/shell/cmd/msgbox.c | 0 {reactos/base => base}/shell/cmd/parser.c | 0 {reactos/base => base}/shell/cmd/path.c | 0 {reactos/base => base}/shell/cmd/pause.c | 0 {reactos/base => base}/shell/cmd/precomp.h | 0 {reactos/base => base}/shell/cmd/prompt.c | 0 {reactos/base => base}/shell/cmd/readme.txt | 0 {reactos/base => base}/shell/cmd/readme2.txt | 0 {reactos/base => base}/shell/cmd/redir.c | 0 {reactos/base => base}/shell/cmd/ren.c | 0 {reactos/base => base}/shell/cmd/replace.c | 0 .../base => base}/shell/cmd/res/terminal.ico | Bin {reactos/base => base}/shell/cmd/resource.h | 0 {reactos/base => base}/shell/cmd/screen.c | 0 {reactos/base => base}/shell/cmd/set.c | 0 {reactos/base => base}/shell/cmd/setlocal.c | 0 {reactos/base => base}/shell/cmd/shift.c | 0 {reactos/base => base}/shell/cmd/start.c | 0 {reactos/base => base}/shell/cmd/strtoclr.c | 0 {reactos/base => base}/shell/cmd/time.c | 0 {reactos/base => base}/shell/cmd/timer.c | 0 {reactos/base => base}/shell/cmd/title.c | 0 {reactos/base => base}/shell/cmd/todo.txt | 0 {reactos/base => base}/shell/cmd/type.c | 0 {reactos/base => base}/shell/cmd/ver.c | 0 {reactos/base => base}/shell/cmd/verify.c | 0 {reactos/base => base}/shell/cmd/vol.c | 0 {reactos/base => base}/shell/cmd/where.c | 0 {reactos/base => base}/shell/cmd/window.c | 0 .../shell/explorer-new/comcsup.h | 0 .../shell/explorer-new/desktop.c | 0 .../shell/explorer-new/dragdrop.c | 0 .../shell/explorer-new/explorer.c | 0 .../shell/explorer-new/explorer.rbuild | 0 .../shell/explorer-new/explorer.rc | 0 .../shell/explorer-new/lang/bg-BG.rc | 0 .../shell/explorer-new/lang/cs-CZ.rc | 0 .../shell/explorer-new/lang/de-DE.rc | 0 .../shell/explorer-new/lang/en-US.rc | 0 .../shell/explorer-new/lang/es-ES.rc | 0 .../shell/explorer-new/lang/fr-FR.rc | 0 .../shell/explorer-new/lang/it-IT.rc | 0 .../shell/explorer-new/lang/ko-KR.rc | 0 .../shell/explorer-new/lang/lt-LT.rc | 0 .../shell/explorer-new/lang/no-NO.rc | 0 .../shell/explorer-new/lang/pl-PL.rc | 0 .../shell/explorer-new/lang/ru-RU.rc | 0 .../shell/explorer-new/lang/sk-SK.rc | 0 .../shell/explorer-new/lang/uk-UA.rc | 0 .../shell/explorer-new/precomp.h | 0 .../shell/explorer-new/res/logov.bmp | Bin .../shell/explorer-new/res/start.ico | Bin .../shell/explorer-new/resource.h | 0 .../shell/explorer-new/startmnu.c | 0 .../shell/explorer-new/taskband.c | 0 .../shell/explorer-new/taskswnd.c | 0 .../base => base}/shell/explorer-new/tbsite.c | 0 .../base => base}/shell/explorer-new/todo.h | 0 .../shell/explorer-new/trayntfy.c | 0 .../shell/explorer-new/trayprop.c | 0 .../shell/explorer-new/traywnd.c | 0 .../base => base}/shell/explorer-new/undoc.h | 0 .../base => base}/shell/explorer/Doxyfile | 0 .../base => base}/shell/explorer/Doxyfile-all | 0 {reactos/base => base}/shell/explorer/Jamfile | 0 .../shell/explorer/Make-rosshell-MinGW | 0 .../shell/explorer/Make-rosshell.mak | 0 .../shell/explorer/Makefile-MinGW | 0 .../shell/explorer/Makefile-Wine | 0 .../shell/explorer/Makefile-precomp | 0 .../shell/explorer/desktop/desktop.cpp | 0 .../shell/explorer/desktop/desktop.h | 0 .../shell/explorer/dialogs/searchprogram.cpp | 0 .../shell/explorer/dialogs/searchprogram.h | 0 .../shell/explorer/dialogs/settings.cpp | 0 .../shell/explorer/dialogs/settings.h | 0 .../base => base}/shell/explorer/doc/TODO.txt | 0 .../shell/explorer/doc/changes.txt | 0 .../shell/explorer/doc/readme.txt | 0 .../shell/explorer/doxy-footer.html | 0 .../shell/explorer/doxy-footer.htmt | 0 .../shell/explorer/explorer-bg.rc | 0 .../shell/explorer/explorer-bn.rc | 0 .../shell/explorer/explorer-cfg-template.xml | 0 .../shell/explorer/explorer-cn-msvc.rc | Bin .../shell/explorer/explorer-cn.rc | 0 .../shell/explorer/explorer-cz.rc | 0 .../shell/explorer/explorer-de.rc | 0 .../shell/explorer/explorer-en.rc | 0 .../shell/explorer/explorer-es.rc | 0 .../shell/explorer/explorer-fr.rc | 0 .../shell/explorer/explorer-gr.rc | 0 .../shell/explorer/explorer-hu.rc | 0 .../shell/explorer/explorer-id.rc | 0 .../shell/explorer/explorer-it.rc | 0 .../shell/explorer/explorer-jp.rc | 0 .../shell/explorer/explorer-ko.rc | 0 .../shell/explorer/explorer-nl.rc | 0 .../shell/explorer/explorer-no.rc | 0 .../shell/explorer/explorer-pl.rc | 0 .../shell/explorer/explorer-pt.rc | 0 .../shell/explorer/explorer-ro.rc | 0 .../shell/explorer/explorer-ru.rc | 0 .../shell/explorer/explorer-sk.rc | 0 .../shell/explorer/explorer-sv.rc | 0 .../shell/explorer/explorer-uk.rc | 0 .../base => base}/shell/explorer/explorer.cpp | 0 .../base => base}/shell/explorer/explorer.dsp | 0 .../base => base}/shell/explorer/explorer.dsw | 0 .../shell/explorer/explorer.exe.manifest | 0 .../base => base}/shell/explorer/explorer.h | 0 .../shell/explorer/explorer.rbuild | 0 .../base => base}/shell/explorer/explorer.rc | 0 .../base => base}/shell/explorer/explorer.sln | 0 .../shell/explorer/explorer.vcproj | 0 .../shell/explorer/explorer_intres.rc | 0 .../base => base}/shell/explorer/externals.h | 0 .../base => base}/shell/explorer/globals.h | 0 .../shell/explorer/i386-stub-win32.c | 0 .../base => base}/shell/explorer/make-docu.sh | 0 .../shell/explorer/make-full-docu.bat | 0 .../shell/explorer/make_explorer.dsp | 0 .../shell/explorer/make_explorer.vcproj | 0 .../shell/explorer/make_rosshell.dsp | 0 .../shell/explorer/makearchive.bat | 0 .../shell/explorer/notifyhook/notifyhook.c | 0 .../shell/explorer/notifyhook/notifyhook.def | 0 .../shell/explorer/notifyhook/notifyhook.dsp | 0 .../shell/explorer/notifyhook/notifyhook.h | 0 .../explorer/notifyhook/notifyhook.rbuild | 0 .../shell/explorer/notifyhook/notifyhook.rc | 0 .../explorer/notifyhook/notifyhook.vcproj | 0 .../base => base}/shell/explorer/precomp.cpp | 0 .../base => base}/shell/explorer/precomp.h | 0 .../shell/explorer/project-root.jam | 0 .../base => base}/shell/explorer/rc-mingw.jam | 0 .../shell/explorer/res/action.ico | Bin .../shell/explorer/res/administration.ico | Bin .../shell/explorer/res/appicon.ico | Bin .../base => base}/shell/explorer/res/apps.ico | Bin .../shell/explorer/res/arrow.ico | Bin .../shell/explorer/res/arrow_dwn.ico | Bin .../shell/explorer/res/arrow_up.ico | Bin .../shell/explorer/res/arrowsel.ico | Bin .../shell/explorer/res/computer.ico | Bin .../shell/explorer/res/config.ico | Bin .../shell/explorer/res/control-panel.ico | Bin .../shell/explorer/res/desktop-settings.ico | Bin .../shell/explorer/res/documents.ico | Bin .../base => base}/shell/explorer/res/dot.ico | Bin .../shell/explorer/res/dot_red.ico | Bin .../shell/explorer/res/dot_trans.ico | Bin .../shell/explorer/res/drivebar.bmp | Bin .../shell/explorer/res/explorer.ico | Bin .../shell/explorer/res/favorites.ico | Bin .../shell/explorer/res/floating.ico | Bin .../shell/explorer/res/folder.ico | Bin .../shell/explorer/res/icoali10.bmp | Bin .../shell/explorer/res/icoalig0.bmp | Bin .../shell/explorer/res/icoalig1.bmp | Bin .../shell/explorer/res/icoalig2.bmp | Bin .../shell/explorer/res/icoalig3.bmp | Bin .../shell/explorer/res/icoalig4.bmp | Bin .../shell/explorer/res/icoalig5.bmp | Bin .../shell/explorer/res/icoalig6.bmp | Bin .../shell/explorer/res/icoalig7.bmp | Bin .../shell/explorer/res/icoalig8.bmp | Bin .../shell/explorer/res/icoalig9.bmp | Bin .../shell/explorer/res/images.bmp | Bin .../base => base}/shell/explorer/res/info.ico | Bin .../shell/explorer/res/logoff.ico | Bin .../shell/explorer/res/logov.bmp | Bin .../shell/explorer/res/logov.psd | Bin .../shell/explorer/res/logov16.bmp | Bin .../shell/explorer/res/logov256.bmp | Bin .../base => base}/shell/explorer/res/mdi.bmp | Bin .../shell/explorer/res/minimize.ico | Bin .../shell/explorer/res/network-conns.ico | Bin .../shell/explorer/res/network.ico | Bin .../shell/explorer/res/notify_l.ico | Bin .../shell/explorer/res/notify_r.ico | Bin .../shell/explorer/res/printer.ico | Bin .../shell/explorer/res/reactos.ico | Bin .../shell/explorer/res/recent-documents.ico | Bin .../shell/explorer/res/restart.ico | Bin .../shell/explorer/res/ros-big.ico | Bin .../base => base}/shell/explorer/res/sdi.bmp | Bin .../shell/explorer/res/search-doc.ico | Bin .../shell/explorer/res/search.ico | Bin .../shell/explorer/res/shutdown.ico | Bin .../shell/explorer/res/speaker.ico | Bin .../shell/explorer/res/startmenu.ico | Bin .../shell/explorer/res/toolbar.bmp | Bin .../base => base}/shell/explorer/resource.h | 0 .../base => base}/shell/explorer/rosshell.dsp | 0 .../base => base}/shell/explorer/rosshell.dsw | 0 .../shell/explorer/services/shellservices.cpp | 0 .../shell/explorer/services/shellservices.h | 0 .../shell/explorer/services/startup.c | 0 .../shell/explorer/shell/entries.cpp | 0 .../shell/explorer/shell/entries.h | 0 .../shell/explorer/shell/fatfs.cpp | 0 .../shell/explorer/shell/fatfs.h | 0 .../shell/explorer/shell/filechild.cpp | 0 .../shell/explorer/shell/filechild.h | 0 .../shell/explorer/shell/mainframe.cpp | 0 .../shell/explorer/shell/mainframe.h | 0 .../shell/explorer/shell/ntobjfs.cpp | 0 .../shell/explorer/shell/ntobjfs.h | 0 .../shell/explorer/shell/pane.cpp | 0 .../base => base}/shell/explorer/shell/pane.h | 0 .../shell/explorer/shell/regfs.cpp | 0 .../shell/explorer/shell/regfs.h | 0 .../shell/explorer/shell/shellbrowser.cpp | 0 .../shell/explorer/shell/shellbrowser.h | 0 .../shell/explorer/shell/shellfs.cpp | 0 .../shell/explorer/shell/shellfs.h | 0 .../shell/explorer/shell/unixfs.cpp | 0 .../shell/explorer/shell/unixfs.h | 0 .../shell/explorer/shell/webchild.cpp | 0 .../shell/explorer/shell/webchild.h | 0 .../shell/explorer/shell/winfs.cpp | 0 .../shell/explorer/shell/winfs.h | 0 .../shell/explorer/taskbar/desktopbar.cpp | 0 .../shell/explorer/taskbar/desktopbar.h | 0 .../shell/explorer/taskbar/favorites.cpp | 0 .../shell/explorer/taskbar/favorites.h | 0 .../shell/explorer/taskbar/quicklaunch.cpp | 0 .../shell/explorer/taskbar/quicklaunch.h | 0 .../shell/explorer/taskbar/startmenu.cpp | 0 .../shell/explorer/taskbar/startmenu.h | 0 .../shell/explorer/taskbar/taskbar.cpp | 0 .../shell/explorer/taskbar/taskbar.h | 0 .../shell/explorer/taskbar/traynotify.cpp | 0 .../shell/explorer/taskbar/traynotify.h | 0 .../shell/explorer/utility/dragdropimpl.cpp | 0 .../shell/explorer/utility/dragdropimpl.h | 0 .../explorer/utility/shellbrowserimpl.cpp | 0 .../shell/explorer/utility/shellbrowserimpl.h | 0 .../shell/explorer/utility/shellclasses.cpp | 0 .../shell/explorer/utility/shellclasses.dsp | 0 .../shell/explorer/utility/shellclasses.dsw | 0 .../shell/explorer/utility/shellclasses.h | 0 .../shell/explorer/utility/shelltests.cpp | 0 .../shell/explorer/utility/splitpath.c | 0 .../shell/explorer/utility/treedroptarget.h | 0 .../shell/explorer/utility/utility.cpp | 0 .../shell/explorer/utility/utility.h | 0 .../shell/explorer/utility/window.cpp | 0 .../shell/explorer/utility/window.h | 0 .../shell/explorer/utility/xmlstorage.cpp | 0 .../shell/explorer/utility/xmlstorage.h | 0 .../shell/explorer/utility/xs-native.cpp | 0 .../shell/explorer/wexplorer.dsw | 0 {reactos/base => base}/shell/shell.rbuild | 0 .../base => base}/system/autochk/autochk.c | 0 .../system/autochk/autochk.rbuild | 0 .../base => base}/system/autochk/autochk.rc | 0 {reactos/base => base}/system/bootok/bootok.c | 0 .../base => base}/system/bootok/bootok.rbuild | 0 .../base => base}/system/bootok/bootok.rc | 0 {reactos/base => base}/system/expand/expand.c | 0 .../base => base}/system/expand/expand.rbuild | 0 .../base => base}/system/expand/expand.rc | 0 .../base => base}/system/expand/lang/bg-BG.rc | 0 .../base => base}/system/expand/lang/cs-CZ.rc | 0 .../base => base}/system/expand/lang/de-DE.rc | 0 .../base => base}/system/expand/lang/el-GR.rc | 0 .../base => base}/system/expand/lang/en-US.rc | 0 .../base => base}/system/expand/lang/es-ES.rc | 0 .../base => base}/system/expand/lang/fr-FR.rc | 0 .../base => base}/system/expand/lang/hu-HU.rc | 0 .../base => base}/system/expand/lang/id-ID.rc | 0 .../base => base}/system/expand/lang/it-IT.rc | 0 .../base => base}/system/expand/lang/ja-JP.rc | 0 .../base => base}/system/expand/lang/lt-LT.rc | 0 .../base => base}/system/expand/lang/no-NO.rc | 0 .../base => base}/system/expand/lang/pl-PL.rc | 0 .../base => base}/system/expand/lang/pt-BR.rc | 0 .../base => base}/system/expand/lang/ru-RU.rc | 0 .../base => base}/system/expand/lang/sv-SE.rc | 0 .../base => base}/system/expand/lang/th-TH.rc | 0 .../base => base}/system/expand/lang/uk-UA.rc | 0 .../base => base}/system/expand/resource.h | 0 {reactos/base => base}/system/expand/rsrc.rc | 0 {reactos/base => base}/system/format/format.c | 0 .../base => base}/system/format/format.rbuild | 0 .../base => base}/system/format/format.rc | 0 .../base => base}/system/format/lang/bg-BG.rc | 0 .../base => base}/system/format/lang/cs-CZ.rc | 0 .../base => base}/system/format/lang/de-DE.rc | 0 .../base => base}/system/format/lang/el-GR.rc | 0 .../base => base}/system/format/lang/en-US.rc | 0 .../base => base}/system/format/lang/es-ES.rc | 0 .../base => base}/system/format/lang/fr-FR.rc | 0 .../base => base}/system/format/lang/hu-HU.rc | 0 .../base => base}/system/format/lang/id-ID.rc | 0 .../base => base}/system/format/lang/it-IT.rc | 0 .../base => base}/system/format/lang/ja-JP.rc | 0 .../base => base}/system/format/lang/lt-LT.rc | 0 .../base => base}/system/format/lang/no-NO.rc | 0 .../base => base}/system/format/lang/pl-PL.rc | 0 .../base => base}/system/format/lang/ru-RU.rc | 0 .../base => base}/system/format/lang/sk-SK.rc | 0 .../base => base}/system/format/lang/uk-UA.rc | 0 .../base => base}/system/format/resource.h | 0 {reactos/base => base}/system/format/rsrc.rc | 0 {reactos/base => base}/system/lsass/lsass.c | 0 .../base => base}/system/lsass/lsass.rbuild | 0 {reactos/base => base}/system/lsass/lsass.rc | 0 .../base => base}/system/msiexec/msiexec.c | 0 .../base => base}/system/msiexec/msiexec.ico | Bin .../system/msiexec/msiexec.rbuild | 0 {reactos/base => base}/system/msiexec/rsrc.rc | 0 .../base => base}/system/msiexec/service.c | 0 .../base => base}/system/msiexec/version.rc | 0 .../system/regsvr32/lang/cs-CZ.rc | 0 .../system/regsvr32/lang/de-DE.rc | 0 .../system/regsvr32/lang/en-US.rc | 0 .../system/regsvr32/lang/es-ES.rc | 0 .../system/regsvr32/lang/fr-FR.rc | 0 .../system/regsvr32/lang/hu-HU.rc | 0 .../system/regsvr32/lang/id-ID.rc | 0 .../system/regsvr32/lang/it-IT.rc | 0 .../system/regsvr32/lang/ja-JP.rc | 0 .../system/regsvr32/lang/lt-LT.rc | 0 .../system/regsvr32/lang/no-NO.rc | 0 .../system/regsvr32/lang/pl-PL.rc | 0 .../system/regsvr32/lang/pt-BR.rc | 0 .../system/regsvr32/lang/ru-RU.rc | 0 .../system/regsvr32/lang/uk-UA.rc | 0 .../base => base}/system/regsvr32/regsvr32.c | 0 .../system/regsvr32/regsvr32.rbuild | 0 .../base => base}/system/regsvr32/regsvr32.rc | 0 .../base => base}/system/regsvr32/resource.h | 0 .../base => base}/system/regsvr32/rsrc.rc | 0 .../system/rundll32/lang/bg-BG.rc | 0 .../system/rundll32/lang/cs-CZ.rc | 0 .../system/rundll32/lang/de-DE.rc | 0 .../system/rundll32/lang/el-GR.rc | 0 .../system/rundll32/lang/en-US.rc | 0 .../system/rundll32/lang/es-ES.rc | 0 .../system/rundll32/lang/fr-FR.rc | 0 .../system/rundll32/lang/hu-HU.rc | 0 .../system/rundll32/lang/id-ID.rc | 0 .../system/rundll32/lang/it-IT.rc | 0 .../system/rundll32/lang/ja-JP.rc | 0 .../system/rundll32/lang/lt-LT.rc | 0 .../system/rundll32/lang/nl-NL.rc | 0 .../system/rundll32/lang/no-NO.rc | 0 .../system/rundll32/lang/pl-PL.rc | 0 .../system/rundll32/lang/pt-BR.rc | 0 .../system/rundll32/lang/ru-RU.rc | 0 .../system/rundll32/lang/sk-SK.rc | 0 .../system/rundll32/lang/th-TH.rc | 0 .../system/rundll32/lang/uk-UA.rc | 0 .../base => base}/system/rundll32/resource.h | 0 .../base => base}/system/rundll32/rsrc.rc | 0 .../base => base}/system/rundll32/rundll32.c | 0 .../system/rundll32/rundll32.rbuild | 0 .../base => base}/system/rundll32/rundll32.rc | 0 .../base => base}/system/services/config.c | 0 .../base => base}/system/services/database.c | 0 .../base => base}/system/services/driver.c | 0 .../base => base}/system/services/groupdb.c | 0 .../base => base}/system/services/rpcserver.c | 0 .../base => base}/system/services/services.c | 0 .../base => base}/system/services/services.h | 0 .../system/services/services.rbuild | 0 .../base => base}/system/services/services.rc | 0 {reactos/base => base}/system/smss/client.c | 0 {reactos/base => base}/system/smss/debug.c | 0 {reactos/base => base}/system/smss/init.c | 0 .../base => base}/system/smss/initdosdev.c | 0 {reactos/base => base}/system/smss/initenv.c | 0 {reactos/base => base}/system/smss/initheap.c | 0 {reactos/base => base}/system/smss/initmv.c | 0 .../base => base}/system/smss/initobdir.c | 0 {reactos/base => base}/system/smss/initpage.c | 0 {reactos/base => base}/system/smss/initreg.c | 0 {reactos/base => base}/system/smss/initrun.c | 0 {reactos/base => base}/system/smss/initss.c | 0 .../base => base}/system/smss/initwkdll.c | 0 {reactos/base => base}/system/smss/print.c | 0 {reactos/base => base}/system/smss/smapi.c | 0 .../base => base}/system/smss/smapicomp.c | 0 .../base => base}/system/smss/smapiexec.c | 0 .../base => base}/system/smss/smapiquery.c | 0 {reactos/base => base}/system/smss/smss.c | 0 {reactos/base => base}/system/smss/smss.h | 0 .../base => base}/system/smss/smss.rbuild | 0 {reactos/base => base}/system/smss/smss.rc | 0 {reactos/base => base}/system/system.rbuild | 0 .../system/userinit/lang/bg-BG.rc | 0 .../system/userinit/lang/cs-CZ.rc | 0 .../system/userinit/lang/de-DE.rc | 0 .../system/userinit/lang/el-GR.rc | 0 .../system/userinit/lang/en-US.rc | 0 .../system/userinit/lang/es-ES.rc | 0 .../system/userinit/lang/fr-FR.rc | 0 .../system/userinit/lang/hu-HU.rc | 0 .../system/userinit/lang/id-ID.rc | 0 .../system/userinit/lang/it-IT.rc | 0 .../system/userinit/lang/ja-JP.rc | 0 .../system/userinit/lang/lt-LT.rc | 0 .../system/userinit/lang/no-NO.rc | 0 .../system/userinit/lang/pl-PL.rc | 0 .../system/userinit/lang/pt-BR.rc | 0 .../system/userinit/lang/ru-RU.rc | 0 .../system/userinit/lang/sk-SK.rc | 0 .../system/userinit/lang/sv-SE.rc | 0 .../system/userinit/lang/th-TH.rc | 0 .../system/userinit/lang/uk-UA.rc | 0 .../base => base}/system/userinit/resource.h | 0 .../base => base}/system/userinit/rsrc.rc | 0 .../base => base}/system/userinit/userinit.c | 0 .../system/userinit/userinit.rbuild | 0 .../base => base}/system/userinit/userinit.rc | 0 .../system/winlogon/lang/bg-BG.rc | 0 .../system/winlogon/lang/cs-CZ.rc | 0 .../system/winlogon/lang/de-DE.rc | 0 .../system/winlogon/lang/el-GR.rc | 0 .../system/winlogon/lang/en-US.rc | 0 .../system/winlogon/lang/es-ES.rc | 0 .../system/winlogon/lang/fr-FR.rc | 0 .../system/winlogon/lang/hu-HU.rc | 0 .../system/winlogon/lang/id-ID.rc | 0 .../system/winlogon/lang/it-IT.rc | 0 .../system/winlogon/lang/ja-JP.rc | 0 .../system/winlogon/lang/lt-LT.rc | 0 .../system/winlogon/lang/nl-NL.rc | 0 .../system/winlogon/lang/no-NO.rc | 0 .../system/winlogon/lang/pl-PL.rc | 0 .../system/winlogon/lang/ru-RU.rc | 0 .../system/winlogon/lang/sk-SK.rc | 0 .../system/winlogon/lang/sv-SE.rc | 0 .../system/winlogon/lang/uk-UA.rc | 0 .../system/winlogon/lang/zh-CN.rc | 0 .../base => base}/system/winlogon/resource.h | 0 .../base => base}/system/winlogon/rsrc.rc | 0 {reactos/base => base}/system/winlogon/sas.c | 0 .../system/winlogon/screensaver.c | 0 .../base => base}/system/winlogon/setup.c | 0 .../base => base}/system/winlogon/setup.h | 0 .../base => base}/system/winlogon/winlogon.c | 0 .../base => base}/system/winlogon/winlogon.h | 0 .../system/winlogon/winlogon.rbuild | 0 .../base => base}/system/winlogon/winlogon.rc | 0 {reactos/base => base}/system/winlogon/wlx.c | 0 .../baseaddress.rbuild => baseaddress.rbuild | 0 {reactos/boot => boot}/boot.rbuild | 0 {reactos/boot => boot}/bootdata/autorun.inf | 0 .../bootdata/bootcd/bootcd.rbuild | 0 .../bootcdregtest/bootcdregtest.rbuild | 0 .../bootcdregtest/testboot.bat.sample | 0 .../bootdata/bootcdregtest/unattend.inf | 0 .../boot => boot}/bootdata/bootdata.rbuild | 0 .../boot => boot}/bootdata/hivecls_arm.inf | 0 .../boot => boot}/bootdata/hivecls_i386.inf | 0 .../boot => boot}/bootdata/hivedef_arm.inf | 0 .../boot => boot}/bootdata/hivedef_i386.inf | 0 .../boot => boot}/bootdata/hiveinst_arm.inf | 0 .../boot => boot}/bootdata/hiveinst_i386.inf | 0 .../boot => boot}/bootdata/hivesft_arm.inf | 0 .../boot => boot}/bootdata/hivesft_i386.inf | 0 .../boot => boot}/bootdata/hivesys_arm.inf | 0 .../boot => boot}/bootdata/hivesys_i386.inf | 0 {reactos/boot => boot}/bootdata/icon.ico | Bin {reactos/boot => boot}/bootdata/livecd.inf | 0 {reactos/boot => boot}/bootdata/livecd.ini | 0 .../bootdata/livecd/livecd.rbuild | 0 .../livecdregtest/livecdregtest.rbuild | 0 .../bootdata/packages/reactos.dff | 0 {reactos/boot => boot}/bootdata/readme.txt | 0 {reactos/boot => boot}/bootdata/system.ini | 0 {reactos/boot => boot}/bootdata/txtsetup.sif | 0 {reactos/boot => boot}/bootdata/unattend.inf | 0 {reactos/boot => boot}/freeldr/COPYING | 0 {reactos/boot => boot}/freeldr/FREELDR.INI | 0 .../freeldr/bootsect/bootsect.rbuild | 0 .../boot => boot}/freeldr/bootsect/dosmbr.asm | 0 .../boot => boot}/freeldr/bootsect/ext2.asm | 0 .../boot => boot}/freeldr/bootsect/fat.asm | 0 {reactos/boot => boot}/freeldr/bootsect/fat.h | 0 .../boot => boot}/freeldr/bootsect/fat32.asm | 0 .../boot => boot}/freeldr/bootsect/fat32.h | 0 .../freeldr/bootsect/isoboot.asm | 0 .../freeldr/bootsect/isobtrt.asm | 0 .../boot => boot}/freeldr/bootsect/ofwboot.s | 0 .../boot => boot}/freeldr/bootsect/win2k.asm | 0 .../freeldr/bootsect/wxpfat16.asm | 0 .../boot => boot}/freeldr/fdebug/fdebug.c | 0 .../boot => boot}/freeldr/fdebug/fdebug.ico | Bin .../freeldr/fdebug/fdebug.rbuild | 0 .../boot => boot}/freeldr/fdebug/fdebug.rc | 0 .../freeldr/fdebug/lang/bg-BG.rc | 0 .../freeldr/fdebug/lang/cs-CZ.rc | 0 .../freeldr/fdebug/lang/de-DE.rc | 0 .../freeldr/fdebug/lang/el-GR.rc | 0 .../freeldr/fdebug/lang/en-US.rc | 0 .../freeldr/fdebug/lang/es-ES.rc | 0 .../freeldr/fdebug/lang/fr-FR.rc | 0 .../freeldr/fdebug/lang/hu-HU.rc | 0 .../freeldr/fdebug/lang/id-ID.rc | 0 .../freeldr/fdebug/lang/it-IT.rc | 0 .../freeldr/fdebug/lang/ja-JP.rc | 0 .../freeldr/fdebug/lang/no-NO.rc | 0 .../freeldr/fdebug/lang/pl-PL.rc | 0 .../freeldr/fdebug/lang/ru-RU.rc | 0 .../freeldr/fdebug/lang/sk-SK.rc | 0 .../freeldr/fdebug/lang/tr-TR.rc | 0 .../freeldr/fdebug/lang/uk-UA.rc | 0 .../boot => boot}/freeldr/fdebug/resource.h | 0 {reactos/boot => boot}/freeldr/fdebug/rs232.c | 0 {reactos/boot => boot}/freeldr/fdebug/rs232.h | 0 {reactos/boot => boot}/freeldr/freeldr.rbuild | 0 .../boot => boot}/freeldr/freeldr/.cvsignore | 0 .../boot => boot}/freeldr/freeldr/CHANGELOG | 0 .../freeldr/freeldr/arch/arm/boot.s | 0 .../freeldr/freeldr/arch/arm/ferouart.c | 0 .../freeldr/freeldr/arch/arm/loader.c | 0 .../freeldr/freeldr/arch/arm/macharm.c | 0 .../freeldr/freeldr/arch/arm/versuart.c | 0 .../freeldr/freeldr/arch/i386/_alloca.S | 0 .../freeldr/freeldr/arch/i386/arch.S | 0 .../freeldr/freeldr/arch/i386/archmach.c | 0 .../freeldr/freeldr/arch/i386/boot.S | 0 .../freeldr/freeldr/arch/i386/drvmap.S | 0 .../freeldr/freeldr/arch/i386/fathelp.asm | 0 .../freeldr/freeldr/arch/i386/hardware.c | 0 .../freeldr/freeldr/arch/i386/hwacpi.c | 0 .../freeldr/freeldr/arch/i386/hwapm.c | 0 .../freeldr/freeldr/arch/i386/hwpci.c | 0 .../freeldr/freeldr/arch/i386/i386cpu.S | 0 .../freeldr/freeldr/arch/i386/i386disk.c | 0 .../freeldr/freeldr/arch/i386/i386idt.S | 0 .../freeldr/freeldr/arch/i386/i386pnp.S | 0 .../freeldr/freeldr/arch/i386/i386rtl.c | 0 .../freeldr/freeldr/arch/i386/i386trap.S | 0 .../freeldr/freeldr/arch/i386/i386vid.c | 0 .../freeldr/freeldr/arch/i386/int386.S | 0 .../freeldr/freeldr/arch/i386/linux.S | 0 .../freeldr/freeldr/arch/i386/loader.c | 0 .../freeldr/freeldr/arch/i386/machpc.c | 0 .../freeldr/freeldr/arch/i386/machxbox.c | 0 .../freeldr/freeldr/arch/i386/mb.S | 0 .../freeldr/freeldr/arch/i386/pccons.c | 0 .../freeldr/freeldr/arch/i386/pcdisk.c | 0 .../freeldr/freeldr/arch/i386/pcmem.c | 0 .../freeldr/freeldr/arch/i386/pcrtc.c | 0 .../freeldr/freeldr/arch/i386/pcvideo.c | 0 .../freeldr/freeldr/arch/i386/xboxcons.c | 0 .../freeldr/freeldr/arch/i386/xboxdisk.c | 0 .../freeldr/freeldr/arch/i386/xboxfont.c | 0 .../freeldr/freeldr/arch/i386/xboxhw.c | 0 .../freeldr/freeldr/arch/i386/xboxi2c.c | 0 .../freeldr/freeldr/arch/i386/xboxmem.c | 0 .../freeldr/freeldr/arch/i386/xboxrtc.c | 0 .../freeldr/freeldr/arch/i386/xboxvideo.c | 0 .../freeldr/freeldr/arch/powerpc/boot.s | 0 .../freeldr/freeldr/arch/powerpc/compat.h | 0 .../freeldr/freeldr/arch/powerpc/loader.c | 0 .../freeldr/freeldr/arch/powerpc/mach.c | 0 .../freeldr/freeldr/arch/powerpc/mboot.c | 0 .../freeldr/freeldr/arch/powerpc/mmu.c | 0 .../freeldr/freeldr/arch/powerpc/ofw_method.c | 0 .../freeldr/freeldr/arch/powerpc/ofw_util.s | 0 .../freeldr/freeldr/arch/powerpc/prep.c | 0 .../freeldr/freeldr/arch/powerpc/prep.h | 0 .../freeldr/freeldr/arch/powerpc/prep_ide.c | 0 .../freeldr/freeldr/arch/powerpc/prep_pci.c | 0 .../freeldr/freeldr/arch/powerpc/prep_vga.c | 0 .../boot => boot}/freeldr/freeldr/bootmgr.c | 0 .../freeldr/freeldr/cache/blocklist.c | 0 .../freeldr/freeldr/cache/cache.c | 0 .../boot => boot}/freeldr/freeldr/cmdline.c | 0 .../freeldr/freeldr/comm/rs232.c | 0 .../boot => boot}/freeldr/freeldr/custom.c | 0 .../boot => boot}/freeldr/freeldr/debug.c | 0 .../boot => boot}/freeldr/freeldr/disk/disk.c | 0 .../freeldr/freeldr/disk/partition.c | 0 .../freeldr/freeldr/disk/ramdisk.c | 0 .../boot => boot}/freeldr/freeldr/drivemap.c | 0 .../boot => boot}/freeldr/freeldr/freeldr.c | 0 .../freeldr/freeldr/freeldr.rbuild | 0 .../freeldr/freeldr/freeldr_arch.rbuild | 0 .../freeldr/freeldr/freeldr_base.rbuild | 0 .../freeldr/freeldr/freeldr_base64k.rbuild | 0 .../freeldr/freeldr/freeldr_main.rbuild | 0 .../freeldr/freeldr/freeldr_startup.rbuild | 0 .../boot => boot}/freeldr/freeldr/fs/ext2.c | 0 .../boot => boot}/freeldr/freeldr/fs/fat.c | 0 .../boot => boot}/freeldr/freeldr/fs/fs.c | 0 .../boot => boot}/freeldr/freeldr/fs/fsrec.c | 0 .../boot => boot}/freeldr/freeldr/fs/iso.c | 0 .../boot => boot}/freeldr/freeldr/fs/ntfs.c | 0 .../freeldr/freeldr/include/arch.h | 0 .../freeldr/include/arch/arm/hardware.h | 0 .../freeldr/include/arch/i386/hardware.h | 0 .../freeldr/freeldr/include/arch/i386/i386.h | 0 .../freeldr/include/arch/i386/machpc.h | 0 .../freeldr/include/arch/i386/machxbox.h | 0 .../freeldr/include/arch/powerpc/hardware.h | 0 .../freeldr/freeldr/include/bget.h | 0 .../freeldr/freeldr/include/bootmgr.h | 0 .../freeldr/freeldr/include/bytesex.h | 0 .../freeldr/freeldr/include/cache.h | 0 .../freeldr/freeldr/include/cmdline.h | 0 .../freeldr/freeldr/include/comm.h | 0 .../freeldr/freeldr/include/debug.h | 0 .../freeldr/freeldr/include/disk.h | 0 .../freeldr/freeldr/include/drivemap.h | 0 .../freeldr/freeldr/include/freeldr.h | 0 .../freeldr/freeldr/include/fs.h | 0 .../freeldr/freeldr/include/fs/ext2.h | 0 .../freeldr/freeldr/include/fs/fat.h | 0 .../freeldr/freeldr/include/fs/iso.h | 0 .../freeldr/freeldr/include/fs/ntfs.h | 0 .../freeldr/freeldr/include/fsrec.h | 0 .../freeldr/freeldr/include/inffile.h | 0 .../freeldr/freeldr/include/inifile.h | 0 .../freeldr/freeldr/include/keycodes.h | 0 .../freeldr/freeldr/include/linux.h | 0 .../freeldr/freeldr/include/machine.h | 0 .../freeldr/freeldr/include/miscboot.h | 0 .../freeldr/freeldr/include/mm.h | 0 .../freeldr/freeldr/include/multiboot.h | 0 .../freeldr/freeldr/include/of.h | 0 .../freeldr/freeldr/include/options.h | 0 .../freeldr/freeldr/include/oslist.h | 0 .../freeldr/freeldr/include/ramdisk.h | 0 .../freeldr/freeldr/include/reactos.h | 0 .../freeldr/freeldr/include/registry.h | 0 .../freeldr/freeldr/include/rtl.h | 0 .../freeldr/freeldr/include/ui.h | 0 .../freeldr/freeldr/include/ui/gui.h | 0 .../freeldr/freeldr/include/ui/minitui.h | 0 .../freeldr/freeldr/include/ui/noui.h | 0 .../freeldr/freeldr/include/ui/tui.h | 0 .../freeldr/freeldr/include/ver.h | 0 .../freeldr/freeldr/include/video.h | 0 .../freeldr/freeldr/include/winldr.h | 0 .../freeldr/freeldr/inffile/inffile.c | 0 .../freeldr/freeldr/inifile/ini_init.c | 0 .../freeldr/freeldr/inifile/inifile.c | 0 .../freeldr/freeldr/inifile/parse.c | 0 .../boot => boot}/freeldr/freeldr/linuxboot.c | 0 .../boot => boot}/freeldr/freeldr/machine.c | 0 .../boot => boot}/freeldr/freeldr/miscboot.c | 0 .../freeldr/freeldr/mm/meminit.c | 0 .../boot => boot}/freeldr/freeldr/mm/mm.c | 0 .../boot => boot}/freeldr/freeldr/options.c | 0 .../boot => boot}/freeldr/freeldr/oslist.c | 0 .../freeldr/freeldr/reactos/archwsup.c | 0 .../freeldr/freeldr/reactos/arcname.c | 0 .../freeldr/freeldr/reactos/binhive.c | 0 .../freeldr/freeldr/reactos/imageldr.c | 0 .../freeldr/freeldr/reactos/reactos.c | 0 .../freeldr/freeldr/reactos/registry.c | 0 .../freeldr/freeldr/reactos/setupldr.c | 0 .../boot => boot}/freeldr/freeldr/rtl/bget.c | 0 .../freeldr/freeldr/rtl/libsupp.c | 0 .../freeldr/freeldr/setupldr.rbuild | 0 .../freeldr/freeldr/setupldr_main.rbuild | 0 .../boot => boot}/freeldr/freeldr/ui/gui.c | 0 .../freeldr/freeldr/ui/minitui.c | 0 .../boot => boot}/freeldr/freeldr/ui/noui.c | 0 .../boot => boot}/freeldr/freeldr/ui/tui.c | 0 .../freeldr/freeldr/ui/tuimenu.c | 0 .../boot => boot}/freeldr/freeldr/ui/ui.c | 0 .../boot => boot}/freeldr/freeldr/version.c | 0 .../freeldr/freeldr/video/fade.c | 0 .../freeldr/freeldr/video/palette.c | 0 .../freeldr/freeldr/video/video.c | 0 .../freeldr/freeldr/windows/conversion.c | 0 .../freeldr/freeldr/windows/peloader.c | 0 .../freeldr/freeldr/windows/winldr.c | 0 .../freeldr/freeldr/windows/wlmemory.c | 0 .../freeldr/freeldr/windows/wlregistry.c | 0 .../boot => boot}/freeldr/install/install.c | 0 .../boot => boot}/freeldr/install/install.h | 0 .../freeldr/install/installfreeldr.rbuild | 0 .../freeldr/install/linux/finstext2.c | 0 .../freeldr/install/linux/finstext2.h | 0 .../boot => boot}/freeldr/install/volume.c | 0 .../boot => boot}/freeldr/install/volume.h | 0 {reactos/boot => boot}/freeldr/notes.txt | 0 .../boot => boot}/freeldr/tools/.cvsignore | 0 .../boot => boot}/freeldr/tools/deptool.c | 0 .../boot => boot}/freeldr/tools/hosttype.c | 0 {reactos/boot => boot}/freeldr/tools/rcopy.c | 0 {reactos/boot => boot}/freeldr/tools/rdel.c | 0 {reactos/boot => boot}/freeldr/tools/rmkdir.c | 0 {reactos/boot => boot}/freeldr/tools/rrmdir.c | 0 ...plate.rbuild => config-arm.template.rbuild | 0 ...plate.rbuild => config-ppc.template.rbuild | 0 ....template.rbuild => config.template.rbuild | 0 reactos/depmap.xsl => depmap.xsl | 0 {reactos/dll => dll}/3rdparty/3rdparty.rbuild | 0 {reactos/dll => dll}/3rdparty/dxtn/dxtn.c | 0 {reactos/dll => dll}/3rdparty/dxtn/dxtn.def | 0 {reactos/dll => dll}/3rdparty/dxtn/dxtn.h | 0 .../dll => dll}/3rdparty/dxtn/dxtn.rbuild | 0 {reactos/dll => dll}/3rdparty/dxtn/fxt1.c | 0 {reactos/dll => dll}/3rdparty/dxtn/fxt1.h | 0 {reactos/dll => dll}/3rdparty/dxtn/internal.h | 0 {reactos/dll => dll}/3rdparty/dxtn/texstore.c | 0 {reactos/dll => dll}/3rdparty/dxtn/types.h | 0 {reactos/dll => dll}/3rdparty/dxtn/wrapper.c | 0 .../dll => dll}/3rdparty/freetype/ChangeLog | 0 .../3rdparty/freetype/ChangeLog.20 | 0 .../3rdparty/freetype/ChangeLog.21 | 0 .../3rdparty/freetype/ChangeLog.22 | 0 .../dll => dll}/3rdparty/freetype/Doxyfile | 0 .../dll => dll}/3rdparty/freetype/Jamfile | 0 .../dll => dll}/3rdparty/freetype/Jamrules | 0 .../dll => dll}/3rdparty/freetype/Makefile | 0 {reactos/dll => dll}/3rdparty/freetype/README | 0 .../dll => dll}/3rdparty/freetype/README.CVS | 0 .../dll => dll}/3rdparty/freetype/README.ROS | 0 .../dll => dll}/3rdparty/freetype/autogen.sh | 0 .../dll => dll}/3rdparty/freetype/configure | 0 .../3rdparty/freetype/devel/ft2build.h | 0 .../3rdparty/freetype/devel/ftoption.h | 0 .../3rdparty/freetype/freetype.def | 0 .../3rdparty/freetype/freetype.rbuild | 0 .../dll => dll}/3rdparty/freetype/freetype.rc | 0 .../3rdparty/freetype/i386/setjmplongjmp.s | 0 .../include/freetype/config/ftconfig.h | 0 .../include/freetype/config/ftheader.h | 0 .../include/freetype/config/ftmodule.h | 0 .../include/freetype/config/ftoption.h | 0 .../include/freetype/config/ftstdlib.h | 0 .../freetype/include/freetype/freetype.h | 0 .../freetype/include/freetype/ftbbox.h | 0 .../freetype/include/freetype/ftbdf.h | 0 .../freetype/include/freetype/ftbitmap.h | 0 .../freetype/include/freetype/ftcache.h | 0 .../freetype/include/freetype/ftchapters.h | 0 .../freetype/include/freetype/fterrdef.h | 0 .../freetype/include/freetype/fterrors.h | 0 .../freetype/include/freetype/ftgasp.h | 0 .../freetype/include/freetype/ftglyph.h | 0 .../freetype/include/freetype/ftgxval.h | 0 .../freetype/include/freetype/ftgzip.h | 0 .../freetype/include/freetype/ftimage.h | 0 .../freetype/include/freetype/ftincrem.h | 0 .../freetype/include/freetype/ftlcdfil.h | 0 .../freetype/include/freetype/ftlist.h | 0 .../freetype/include/freetype/ftlzw.h | 0 .../freetype/include/freetype/ftmac.h | 0 .../3rdparty/freetype/include/freetype/ftmm.h | 0 .../freetype/include/freetype/ftmodapi.h | 0 .../freetype/include/freetype/ftmoderr.h | 0 .../freetype/include/freetype/ftotval.h | 0 .../freetype/include/freetype/ftoutln.h | 0 .../freetype/include/freetype/ftpfr.h | 0 .../freetype/include/freetype/ftrender.h | 0 .../freetype/include/freetype/ftsizes.h | 0 .../freetype/include/freetype/ftsnames.h | 0 .../freetype/include/freetype/ftstroke.h | 0 .../freetype/include/freetype/ftsynth.h | 0 .../freetype/include/freetype/ftsystem.h | 0 .../freetype/include/freetype/fttrigon.h | 0 .../freetype/include/freetype/fttypes.h | 0 .../freetype/include/freetype/ftwinfnt.h | 0 .../freetype/include/freetype/ftxf86.h | 0 .../include/freetype/internal/autohint.h | 0 .../include/freetype/internal/ftcalc.h | 0 .../include/freetype/internal/ftdebug.h | 0 .../include/freetype/internal/ftdriver.h | 0 .../include/freetype/internal/ftgloadr.h | 0 .../include/freetype/internal/ftmemory.h | 0 .../include/freetype/internal/ftobjs.h | 0 .../include/freetype/internal/ftrfork.h | 0 .../include/freetype/internal/ftserv.h | 0 .../include/freetype/internal/ftstream.h | 0 .../include/freetype/internal/fttrace.h | 0 .../include/freetype/internal/ftvalid.h | 0 .../include/freetype/internal/internal.h | 0 .../include/freetype/internal/pcftypes.h | 0 .../include/freetype/internal/psaux.h | 0 .../include/freetype/internal/pshints.h | 0 .../freetype/internal/services/svbdf.h | 0 .../freetype/internal/services/svgldict.h | 0 .../freetype/internal/services/svgxval.h | 0 .../freetype/internal/services/svkern.h | 0 .../include/freetype/internal/services/svmm.h | 0 .../freetype/internal/services/svotval.h | 0 .../freetype/internal/services/svpfr.h | 0 .../freetype/internal/services/svpostnm.h | 0 .../freetype/internal/services/svpscmap.h | 0 .../freetype/internal/services/svpsinfo.h | 0 .../freetype/internal/services/svsfnt.h | 0 .../freetype/internal/services/svttcmap.h | 0 .../freetype/internal/services/svtteng.h | 0 .../freetype/internal/services/svttglyf.h | 0 .../freetype/internal/services/svwinfnt.h | 0 .../freetype/internal/services/svxf86nm.h | 0 .../freetype/include/freetype/internal/sfnt.h | 0 .../include/freetype/internal/t1types.h | 0 .../include/freetype/internal/tttypes.h | 0 .../freetype/include/freetype/t1tables.h | 0 .../freetype/include/freetype/ttnameid.h | 0 .../freetype/include/freetype/tttables.h | 0 .../freetype/include/freetype/tttags.h | 0 .../freetype/include/freetype/ttunpat.h | 0 .../3rdparty/freetype/include/ft2build.h | 0 .../dll => dll}/3rdparty/freetype/modules.cfg | 0 .../dll => dll}/3rdparty/freetype/objs/README | 0 .../dll => dll}/3rdparty/freetype/rosglue.c | 0 .../dll => dll}/3rdparty/freetype/src/Jamfile | 0 .../3rdparty/freetype/src/autofit/Jamfile | 0 .../3rdparty/freetype/src/autofit/afangles.c | 0 .../3rdparty/freetype/src/autofit/afangles.h | 0 .../3rdparty/freetype/src/autofit/afcjk.c | 0 .../3rdparty/freetype/src/autofit/afcjk.h | 0 .../3rdparty/freetype/src/autofit/afdummy.c | 0 .../3rdparty/freetype/src/autofit/afdummy.h | 0 .../3rdparty/freetype/src/autofit/aferrors.h | 0 .../3rdparty/freetype/src/autofit/afglobal.c | 0 .../3rdparty/freetype/src/autofit/afglobal.h | 0 .../3rdparty/freetype/src/autofit/afhints.c | 0 .../3rdparty/freetype/src/autofit/afhints.h | 0 .../3rdparty/freetype/src/autofit/afindic.c | 0 .../3rdparty/freetype/src/autofit/afindic.h | 0 .../3rdparty/freetype/src/autofit/aflatin.c | 0 .../3rdparty/freetype/src/autofit/aflatin.h | 0 .../3rdparty/freetype/src/autofit/aflatin2.c | 0 .../3rdparty/freetype/src/autofit/aflatin2.h | 0 .../3rdparty/freetype/src/autofit/afloader.c | 0 .../3rdparty/freetype/src/autofit/afloader.h | 0 .../3rdparty/freetype/src/autofit/afmodule.c | 0 .../3rdparty/freetype/src/autofit/afmodule.h | 0 .../3rdparty/freetype/src/autofit/aftypes.h | 0 .../3rdparty/freetype/src/autofit/afwarp.c | 0 .../3rdparty/freetype/src/autofit/afwarp.h | 0 .../3rdparty/freetype/src/autofit/autofit.c | 0 .../3rdparty/freetype/src/autofit/module.mk | 0 .../3rdparty/freetype/src/autofit/rules.mk | 0 .../3rdparty/freetype/src/base/Jamfile | 0 .../3rdparty/freetype/src/base/_ftbase_ros.c | 0 .../freetype/src/base/_ftmulfix_ros.c | 0 .../3rdparty/freetype/src/base/ftapi.c | 0 .../3rdparty/freetype/src/base/ftbase.c | 0 .../3rdparty/freetype/src/base/ftbbox.c | 0 .../3rdparty/freetype/src/base/ftbdf.c | 0 .../3rdparty/freetype/src/base/ftbitmap.c | 0 .../3rdparty/freetype/src/base/ftcalc.c | 0 .../3rdparty/freetype/src/base/ftdbgmem.c | 0 .../3rdparty/freetype/src/base/ftdebug.c | 0 .../3rdparty/freetype/src/base/ftgasp.c | 0 .../3rdparty/freetype/src/base/ftgloadr.c | 0 .../3rdparty/freetype/src/base/ftglyph.c | 0 .../3rdparty/freetype/src/base/ftgxval.c | 0 .../3rdparty/freetype/src/base/ftinit.c | 0 .../3rdparty/freetype/src/base/ftlcdfil.c | 0 .../3rdparty/freetype/src/base/ftmac.c | 0 .../3rdparty/freetype/src/base/ftmm.c | 0 .../3rdparty/freetype/src/base/ftnames.c | 0 .../3rdparty/freetype/src/base/ftobjs.c | 0 .../3rdparty/freetype/src/base/ftotval.c | 0 .../3rdparty/freetype/src/base/ftoutln.c | 0 .../3rdparty/freetype/src/base/ftpatent.c | 0 .../3rdparty/freetype/src/base/ftpfr.c | 0 .../3rdparty/freetype/src/base/ftrfork.c | 0 .../3rdparty/freetype/src/base/ftstream.c | 0 .../3rdparty/freetype/src/base/ftstroke.c | 0 .../3rdparty/freetype/src/base/ftsynth.c | 0 .../3rdparty/freetype/src/base/ftsystem.c | 0 .../3rdparty/freetype/src/base/fttrigon.c | 0 .../3rdparty/freetype/src/base/fttype1.c | 0 .../3rdparty/freetype/src/base/ftutil.c | 0 .../3rdparty/freetype/src/base/ftwinfnt.c | 0 .../3rdparty/freetype/src/base/ftxf86.c | 0 .../3rdparty/freetype/src/base/rules.mk | 0 .../3rdparty/freetype/src/bdf/Jamfile | 0 .../3rdparty/freetype/src/bdf/README | 0 .../3rdparty/freetype/src/bdf/bdf.c | 0 .../3rdparty/freetype/src/bdf/bdf.h | 0 .../3rdparty/freetype/src/bdf/bdfdrivr.c | 0 .../3rdparty/freetype/src/bdf/bdfdrivr.h | 0 .../3rdparty/freetype/src/bdf/bdferror.h | 0 .../3rdparty/freetype/src/bdf/bdflib.c | 0 .../3rdparty/freetype/src/bdf/module.mk | 0 .../3rdparty/freetype/src/bdf/rules.mk | 0 .../3rdparty/freetype/src/cache/Jamfile | 0 .../3rdparty/freetype/src/cache/ftcache.c | 0 .../3rdparty/freetype/src/cache/ftcbasic.c | 0 .../3rdparty/freetype/src/cache/ftccache.c | 0 .../3rdparty/freetype/src/cache/ftccache.h | 0 .../3rdparty/freetype/src/cache/ftccback.h | 0 .../3rdparty/freetype/src/cache/ftccmap.c | 0 .../3rdparty/freetype/src/cache/ftcerror.h | 0 .../3rdparty/freetype/src/cache/ftcglyph.c | 0 .../3rdparty/freetype/src/cache/ftcglyph.h | 0 .../3rdparty/freetype/src/cache/ftcimage.c | 0 .../3rdparty/freetype/src/cache/ftcimage.h | 0 .../3rdparty/freetype/src/cache/ftcmanag.c | 0 .../3rdparty/freetype/src/cache/ftcmanag.h | 0 .../3rdparty/freetype/src/cache/ftcmru.c | 0 .../3rdparty/freetype/src/cache/ftcmru.h | 0 .../3rdparty/freetype/src/cache/ftcsbits.c | 0 .../3rdparty/freetype/src/cache/ftcsbits.h | 0 .../3rdparty/freetype/src/cache/rules.mk | 0 .../3rdparty/freetype/src/cff/Jamfile | 0 .../3rdparty/freetype/src/cff/cff.c | 0 .../3rdparty/freetype/src/cff/cffcmap.c | 0 .../3rdparty/freetype/src/cff/cffcmap.h | 0 .../3rdparty/freetype/src/cff/cffdrivr.c | 0 .../3rdparty/freetype/src/cff/cffdrivr.h | 0 .../3rdparty/freetype/src/cff/cfferrs.h | 0 .../3rdparty/freetype/src/cff/cffgload.c | 0 .../3rdparty/freetype/src/cff/cffgload.h | 0 .../3rdparty/freetype/src/cff/cffload.c | 0 .../3rdparty/freetype/src/cff/cffload.h | 0 .../3rdparty/freetype/src/cff/cffobjs.c | 0 .../3rdparty/freetype/src/cff/cffobjs.h | 0 .../3rdparty/freetype/src/cff/cffparse.c | 0 .../3rdparty/freetype/src/cff/cffparse.h | 0 .../3rdparty/freetype/src/cff/cfftoken.h | 0 .../3rdparty/freetype/src/cff/cfftypes.h | 0 .../3rdparty/freetype/src/cff/module.mk | 0 .../3rdparty/freetype/src/cff/rules.mk | 0 .../3rdparty/freetype/src/cid/Jamfile | 0 .../3rdparty/freetype/src/cid/ciderrs.h | 0 .../3rdparty/freetype/src/cid/cidgload.c | 0 .../3rdparty/freetype/src/cid/cidgload.h | 0 .../3rdparty/freetype/src/cid/cidload.c | 0 .../3rdparty/freetype/src/cid/cidload.h | 0 .../3rdparty/freetype/src/cid/cidobjs.c | 0 .../3rdparty/freetype/src/cid/cidobjs.h | 0 .../3rdparty/freetype/src/cid/cidparse.c | 0 .../3rdparty/freetype/src/cid/cidparse.h | 0 .../3rdparty/freetype/src/cid/cidriver.c | 0 .../3rdparty/freetype/src/cid/cidriver.h | 0 .../3rdparty/freetype/src/cid/cidtoken.h | 0 .../3rdparty/freetype/src/cid/module.mk | 0 .../3rdparty/freetype/src/cid/rules.mk | 0 .../3rdparty/freetype/src/cid/type1cid.c | 0 .../3rdparty/freetype/src/gxvalid/Jamfile | 0 .../3rdparty/freetype/src/gxvalid/README | 0 .../3rdparty/freetype/src/gxvalid/gxvalid.c | 0 .../3rdparty/freetype/src/gxvalid/gxvalid.h | 0 .../3rdparty/freetype/src/gxvalid/gxvbsln.c | 0 .../3rdparty/freetype/src/gxvalid/gxvcommn.c | 0 .../3rdparty/freetype/src/gxvalid/gxvcommn.h | 0 .../3rdparty/freetype/src/gxvalid/gxverror.h | 0 .../3rdparty/freetype/src/gxvalid/gxvfeat.c | 0 .../3rdparty/freetype/src/gxvalid/gxvfeat.h | 0 .../3rdparty/freetype/src/gxvalid/gxvfgen.c | 0 .../3rdparty/freetype/src/gxvalid/gxvjust.c | 0 .../3rdparty/freetype/src/gxvalid/gxvkern.c | 0 .../3rdparty/freetype/src/gxvalid/gxvlcar.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmod.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmod.h | 0 .../3rdparty/freetype/src/gxvalid/gxvmort.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmort.h | 0 .../3rdparty/freetype/src/gxvalid/gxvmort0.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmort1.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmort2.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmort4.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmort5.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmorx.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmorx.h | 0 .../3rdparty/freetype/src/gxvalid/gxvmorx0.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmorx1.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmorx2.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmorx4.c | 0 .../3rdparty/freetype/src/gxvalid/gxvmorx5.c | 0 .../3rdparty/freetype/src/gxvalid/gxvopbd.c | 0 .../3rdparty/freetype/src/gxvalid/gxvprop.c | 0 .../3rdparty/freetype/src/gxvalid/gxvtrak.c | 0 .../3rdparty/freetype/src/gxvalid/module.mk | 0 .../3rdparty/freetype/src/gxvalid/rules.mk | 0 .../3rdparty/freetype/src/gzip/Jamfile | 0 .../3rdparty/freetype/src/gzip/adler32.c | 0 .../3rdparty/freetype/src/gzip/ftgzip.c | 0 .../3rdparty/freetype/src/gzip/infblock.c | 0 .../3rdparty/freetype/src/gzip/infblock.h | 0 .../3rdparty/freetype/src/gzip/infcodes.c | 0 .../3rdparty/freetype/src/gzip/infcodes.h | 0 .../3rdparty/freetype/src/gzip/inffixed.h | 0 .../3rdparty/freetype/src/gzip/inflate.c | 0 .../3rdparty/freetype/src/gzip/inftrees.c | 0 .../3rdparty/freetype/src/gzip/inftrees.h | 0 .../3rdparty/freetype/src/gzip/infutil.c | 0 .../3rdparty/freetype/src/gzip/infutil.h | 0 .../3rdparty/freetype/src/gzip/rules.mk | 0 .../3rdparty/freetype/src/gzip/zconf.h | 0 .../3rdparty/freetype/src/gzip/zlib.h | 0 .../3rdparty/freetype/src/gzip/zutil.c | 0 .../3rdparty/freetype/src/gzip/zutil.h | 0 .../3rdparty/freetype/src/lzw/Jamfile | 0 .../3rdparty/freetype/src/lzw/ftlzw.c | 0 .../3rdparty/freetype/src/lzw/ftzopen.c | 0 .../3rdparty/freetype/src/lzw/ftzopen.h | 0 .../3rdparty/freetype/src/lzw/rules.mk | 0 .../3rdparty/freetype/src/otvalid/Jamfile | 0 .../3rdparty/freetype/src/otvalid/module.mk | 0 .../3rdparty/freetype/src/otvalid/otvalid.c | 0 .../3rdparty/freetype/src/otvalid/otvalid.h | 0 .../3rdparty/freetype/src/otvalid/otvbase.c | 0 .../3rdparty/freetype/src/otvalid/otvcommn.c | 0 .../3rdparty/freetype/src/otvalid/otvcommn.h | 0 .../3rdparty/freetype/src/otvalid/otverror.h | 0 .../3rdparty/freetype/src/otvalid/otvgdef.c | 0 .../3rdparty/freetype/src/otvalid/otvgpos.c | 0 .../3rdparty/freetype/src/otvalid/otvgpos.h | 0 .../3rdparty/freetype/src/otvalid/otvgsub.c | 0 .../3rdparty/freetype/src/otvalid/otvjstf.c | 0 .../3rdparty/freetype/src/otvalid/otvmod.c | 0 .../3rdparty/freetype/src/otvalid/otvmod.h | 0 .../3rdparty/freetype/src/otvalid/rules.mk | 0 .../3rdparty/freetype/src/pcf/Jamfile | 0 .../3rdparty/freetype/src/pcf/README | 0 .../3rdparty/freetype/src/pcf/module.mk | 0 .../3rdparty/freetype/src/pcf/pcf.c | 0 .../3rdparty/freetype/src/pcf/pcf.h | 0 .../3rdparty/freetype/src/pcf/pcfdrivr.c | 0 .../3rdparty/freetype/src/pcf/pcfdrivr.h | 0 .../3rdparty/freetype/src/pcf/pcferror.h | 0 .../3rdparty/freetype/src/pcf/pcfread.c | 0 .../3rdparty/freetype/src/pcf/pcfread.h | 0 .../3rdparty/freetype/src/pcf/pcfutil.c | 0 .../3rdparty/freetype/src/pcf/pcfutil.h | 0 .../3rdparty/freetype/src/pcf/rules.mk | 0 .../3rdparty/freetype/src/pfr/Jamfile | 0 .../3rdparty/freetype/src/pfr/module.mk | 0 .../3rdparty/freetype/src/pfr/pfr.c | 0 .../3rdparty/freetype/src/pfr/pfrcmap.c | 0 .../3rdparty/freetype/src/pfr/pfrcmap.h | 0 .../3rdparty/freetype/src/pfr/pfrdrivr.c | 0 .../3rdparty/freetype/src/pfr/pfrdrivr.h | 0 .../3rdparty/freetype/src/pfr/pfrerror.h | 0 .../3rdparty/freetype/src/pfr/pfrgload.c | 0 .../3rdparty/freetype/src/pfr/pfrgload.h | 0 .../3rdparty/freetype/src/pfr/pfrload.c | 0 .../3rdparty/freetype/src/pfr/pfrload.h | 0 .../3rdparty/freetype/src/pfr/pfrobjs.c | 0 .../3rdparty/freetype/src/pfr/pfrobjs.h | 0 .../3rdparty/freetype/src/pfr/pfrsbit.c | 0 .../3rdparty/freetype/src/pfr/pfrsbit.h | 0 .../3rdparty/freetype/src/pfr/pfrtypes.h | 0 .../3rdparty/freetype/src/pfr/rules.mk | 0 .../3rdparty/freetype/src/psaux/Jamfile | 0 .../3rdparty/freetype/src/psaux/afmparse.c | 0 .../3rdparty/freetype/src/psaux/afmparse.h | 0 .../3rdparty/freetype/src/psaux/module.mk | 0 .../3rdparty/freetype/src/psaux/psaux.c | 0 .../3rdparty/freetype/src/psaux/psauxerr.h | 0 .../3rdparty/freetype/src/psaux/psauxmod.c | 0 .../3rdparty/freetype/src/psaux/psauxmod.h | 0 .../3rdparty/freetype/src/psaux/psconv.c | 0 .../3rdparty/freetype/src/psaux/psconv.h | 0 .../3rdparty/freetype/src/psaux/psobjs.c | 0 .../3rdparty/freetype/src/psaux/psobjs.h | 0 .../3rdparty/freetype/src/psaux/rules.mk | 0 .../3rdparty/freetype/src/psaux/t1cmap.c | 0 .../3rdparty/freetype/src/psaux/t1cmap.h | 0 .../3rdparty/freetype/src/psaux/t1decode.c | 0 .../3rdparty/freetype/src/psaux/t1decode.h | 0 .../3rdparty/freetype/src/pshinter/Jamfile | 0 .../3rdparty/freetype/src/pshinter/module.mk | 0 .../3rdparty/freetype/src/pshinter/pshalgo.c | 0 .../3rdparty/freetype/src/pshinter/pshalgo.h | 0 .../3rdparty/freetype/src/pshinter/pshglob.c | 0 .../3rdparty/freetype/src/pshinter/pshglob.h | 0 .../3rdparty/freetype/src/pshinter/pshinter.c | 0 .../3rdparty/freetype/src/pshinter/pshmod.c | 0 .../3rdparty/freetype/src/pshinter/pshmod.h | 0 .../3rdparty/freetype/src/pshinter/pshnterr.h | 0 .../3rdparty/freetype/src/pshinter/pshrec.c | 0 .../3rdparty/freetype/src/pshinter/pshrec.h | 0 .../3rdparty/freetype/src/pshinter/rules.mk | 0 .../3rdparty/freetype/src/psnames/Jamfile | 0 .../3rdparty/freetype/src/psnames/module.mk | 0 .../3rdparty/freetype/src/psnames/psmodule.c | 0 .../3rdparty/freetype/src/psnames/psmodule.h | 0 .../3rdparty/freetype/src/psnames/psnamerr.h | 0 .../3rdparty/freetype/src/psnames/psnames.c | 0 .../3rdparty/freetype/src/psnames/pstables.h | 0 .../3rdparty/freetype/src/psnames/rules.mk | 0 .../3rdparty/freetype/src/raster/Jamfile | 0 .../3rdparty/freetype/src/raster/ftmisc.h | 0 .../3rdparty/freetype/src/raster/ftraster.c | 0 .../3rdparty/freetype/src/raster/ftraster.h | 0 .../3rdparty/freetype/src/raster/ftrend1.c | 0 .../3rdparty/freetype/src/raster/ftrend1.h | 0 .../3rdparty/freetype/src/raster/module.mk | 0 .../3rdparty/freetype/src/raster/raster.c | 0 .../3rdparty/freetype/src/raster/rasterrs.h | 0 .../3rdparty/freetype/src/raster/rules.mk | 0 .../3rdparty/freetype/src/sfnt/Jamfile | 0 .../3rdparty/freetype/src/sfnt/module.mk | 0 .../3rdparty/freetype/src/sfnt/rules.mk | 0 .../3rdparty/freetype/src/sfnt/sfdriver.c | 0 .../3rdparty/freetype/src/sfnt/sfdriver.h | 0 .../3rdparty/freetype/src/sfnt/sferrors.h | 0 .../3rdparty/freetype/src/sfnt/sfnt.c | 0 .../3rdparty/freetype/src/sfnt/sfobjs.c | 0 .../3rdparty/freetype/src/sfnt/sfobjs.h | 0 .../3rdparty/freetype/src/sfnt/ttbdf.c | 0 .../3rdparty/freetype/src/sfnt/ttbdf.h | 0 .../3rdparty/freetype/src/sfnt/ttcmap.c | 0 .../3rdparty/freetype/src/sfnt/ttcmap.h | 0 .../3rdparty/freetype/src/sfnt/ttkern.c | 0 .../3rdparty/freetype/src/sfnt/ttkern.h | 0 .../3rdparty/freetype/src/sfnt/ttload.c | 0 .../3rdparty/freetype/src/sfnt/ttload.h | 0 .../3rdparty/freetype/src/sfnt/ttmtx.c | 0 .../3rdparty/freetype/src/sfnt/ttmtx.h | 0 .../3rdparty/freetype/src/sfnt/ttpost.c | 0 .../3rdparty/freetype/src/sfnt/ttpost.h | 0 .../3rdparty/freetype/src/sfnt/ttsbit.c | 0 .../3rdparty/freetype/src/sfnt/ttsbit.h | 0 .../3rdparty/freetype/src/sfnt/ttsbit0.c | 0 .../3rdparty/freetype/src/smooth/Jamfile | 0 .../3rdparty/freetype/src/smooth/ftgrays.c | 0 .../3rdparty/freetype/src/smooth/ftgrays.h | 0 .../3rdparty/freetype/src/smooth/ftsmerrs.h | 0 .../3rdparty/freetype/src/smooth/ftsmooth.c | 0 .../3rdparty/freetype/src/smooth/ftsmooth.h | 0 .../3rdparty/freetype/src/smooth/module.mk | 0 .../3rdparty/freetype/src/smooth/rules.mk | 0 .../3rdparty/freetype/src/smooth/smooth.c | 0 .../3rdparty/freetype/src/tools/Jamfile | 0 .../3rdparty/freetype/src/tools/apinames.c | 0 .../3rdparty/freetype/src/tools/cordic.py | 0 .../freetype/src/tools/docmaker/content.py | 0 .../freetype/src/tools/docmaker/docbeauty.py | 0 .../freetype/src/tools/docmaker/docmaker.py | 0 .../freetype/src/tools/docmaker/formatter.py | 0 .../freetype/src/tools/docmaker/sources.py | 0 .../freetype/src/tools/docmaker/tohtml.py | 0 .../freetype/src/tools/docmaker/utils.py | 0 .../freetype/src/tools/ftrandom/Makefile | 0 .../freetype/src/tools/ftrandom/README | 0 .../freetype/src/tools/ftrandom/ftrandom.c | 0 .../3rdparty/freetype/src/tools/glnames.py | 0 .../3rdparty/freetype/src/tools/test_afm.c | 0 .../3rdparty/freetype/src/tools/test_bbox.c | 0 .../3rdparty/freetype/src/tools/test_trig.c | 0 .../3rdparty/freetype/src/truetype/Jamfile | 0 .../3rdparty/freetype/src/truetype/module.mk | 0 .../3rdparty/freetype/src/truetype/rules.mk | 0 .../3rdparty/freetype/src/truetype/truetype.c | 0 .../3rdparty/freetype/src/truetype/ttdriver.c | 0 .../3rdparty/freetype/src/truetype/ttdriver.h | 0 .../3rdparty/freetype/src/truetype/tterrors.h | 0 .../3rdparty/freetype/src/truetype/ttgload.c | 0 .../freetype/src/truetype/ttgload.c.old | 0 .../3rdparty/freetype/src/truetype/ttgload.h | 0 .../3rdparty/freetype/src/truetype/ttgxvar.c | 0 .../3rdparty/freetype/src/truetype/ttgxvar.h | 0 .../3rdparty/freetype/src/truetype/ttinterp.c | 0 .../3rdparty/freetype/src/truetype/ttinterp.h | 0 .../3rdparty/freetype/src/truetype/ttobjs.c | 0 .../3rdparty/freetype/src/truetype/ttobjs.h | 0 .../3rdparty/freetype/src/truetype/ttpload.c | 0 .../3rdparty/freetype/src/truetype/ttpload.h | 0 .../3rdparty/freetype/src/type1/Jamfile | 0 .../3rdparty/freetype/src/type1/module.mk | 0 .../3rdparty/freetype/src/type1/rules.mk | 0 .../3rdparty/freetype/src/type1/t1afm.c | 0 .../3rdparty/freetype/src/type1/t1afm.h | 0 .../3rdparty/freetype/src/type1/t1driver.c | 0 .../3rdparty/freetype/src/type1/t1driver.h | 0 .../3rdparty/freetype/src/type1/t1errors.h | 0 .../3rdparty/freetype/src/type1/t1gload.c | 0 .../3rdparty/freetype/src/type1/t1gload.h | 0 .../3rdparty/freetype/src/type1/t1load.c | 0 .../3rdparty/freetype/src/type1/t1load.h | 0 .../3rdparty/freetype/src/type1/t1objs.c | 0 .../3rdparty/freetype/src/type1/t1objs.h | 0 .../3rdparty/freetype/src/type1/t1parse.c | 0 .../3rdparty/freetype/src/type1/t1parse.h | 0 .../3rdparty/freetype/src/type1/t1tokens.h | 0 .../3rdparty/freetype/src/type1/type1.c | 0 .../3rdparty/freetype/src/type42/Jamfile | 0 .../3rdparty/freetype/src/type42/module.mk | 0 .../3rdparty/freetype/src/type42/rules.mk | 0 .../3rdparty/freetype/src/type42/t42drivr.c | 0 .../3rdparty/freetype/src/type42/t42drivr.h | 0 .../3rdparty/freetype/src/type42/t42error.h | 0 .../3rdparty/freetype/src/type42/t42objs.c | 0 .../3rdparty/freetype/src/type42/t42objs.h | 0 .../3rdparty/freetype/src/type42/t42parse.c | 0 .../3rdparty/freetype/src/type42/t42parse.h | 0 .../3rdparty/freetype/src/type42/t42types.h | 0 .../3rdparty/freetype/src/type42/type42.c | 0 .../3rdparty/freetype/src/winfonts/Jamfile | 0 .../3rdparty/freetype/src/winfonts/fnterrs.h | 0 .../3rdparty/freetype/src/winfonts/module.mk | 0 .../3rdparty/freetype/src/winfonts/rules.mk | 0 .../3rdparty/freetype/src/winfonts/winfnt.c | 0 .../3rdparty/freetype/src/winfonts/winfnt.h | 0 .../dll => dll}/3rdparty/freetype/version.sed | 0 .../3rdparty/mesa32/include/GL/amesa.h | 0 .../3rdparty/mesa32/include/GL/dmesa.h | 0 .../3rdparty/mesa32/include/GL/fxmesa.h | 0 .../3rdparty/mesa32/include/GL/ggimesa.h | 0 .../3rdparty/mesa32/include/GL/gl.h | 0 .../3rdparty/mesa32/include/GL/gl_mangle.h | 0 .../3rdparty/mesa32/include/GL/glext.h | 0 .../3rdparty/mesa32/include/GL/glfbdev.h | 0 .../3rdparty/mesa32/include/GL/glu.h | 0 .../3rdparty/mesa32/include/GL/glu_mangle.h | 0 .../3rdparty/mesa32/include/GL/glx.h | 0 .../3rdparty/mesa32/include/GL/glx_mangle.h | 0 .../3rdparty/mesa32/include/GL/glxext.h | 0 .../include/GL/internal/dri_interface.h | 0 .../mesa32/include/GL/internal/dri_sarea.h | 0 .../mesa32/include/GL/internal/glcore.h | 0 .../mesa32/include/GL/internal/sarea.h | 0 .../3rdparty/mesa32/include/GL/mesa_wgl.h | 0 .../3rdparty/mesa32/include/GL/mglmesa.h | 0 .../3rdparty/mesa32/include/GL/osmesa.h | 0 .../3rdparty/mesa32/include/GL/svgamesa.h | 0 .../mesa32/include/GL/uglglutshapes.h | 0 .../3rdparty/mesa32/include/GL/uglmesa.h | 0 .../3rdparty/mesa32/include/GL/vms_x_fix.h | 0 .../3rdparty/mesa32/include/GL/wmesa.h | 0 .../3rdparty/mesa32/include/GL/xmesa.h | 0 .../3rdparty/mesa32/include/GL/xmesa_x.h | 0 .../3rdparty/mesa32/include/GL/xmesa_xf86.h | 0 .../3rdparty/mesa32/include/GLView.h | 0 .../dll => dll}/3rdparty/mesa32/mesa32.rbuild | 0 .../3rdparty/mesa32/mesa3d_icd_fix_ros.patch | 0 .../dll => dll}/3rdparty/mesa32/src/Makefile | 0 .../3rdparty/mesa32/src/Makefile.DJ | 0 .../3rdparty/mesa32/src/Makefile.mgw | 0 .../dll => dll}/3rdparty/mesa32/src/depend | 0 .../3rdparty/mesa32/src/descrip.mms | 0 .../mesa32/src/drivers/beos/GLView.cpp | 0 .../3rdparty/mesa32/src/drivers/beos/Makefile | 0 .../mesa32/src/drivers/common/descrip.mms | 0 .../mesa32/src/drivers/common/driverfuncs.c | 0 .../mesa32/src/drivers/common/driverfuncs.h | 0 .../mesa32/src/drivers/common/sources | 0 .../mesa32/src/drivers/directfb/Makefile | 0 .../src/drivers/directfb/idirectfbgl_mesa.c | 0 .../3rdparty/mesa32/src/drivers/dos/blit.S | 0 .../3rdparty/mesa32/src/drivers/dos/dmesa.c | 0 .../3rdparty/mesa32/src/drivers/dos/dpmi.c | 0 .../mesa32/src/drivers/dos/internal.h | 0 .../3rdparty/mesa32/src/drivers/dos/null.c | 0 .../3rdparty/mesa32/src/drivers/dos/null.h | 0 .../3rdparty/mesa32/src/drivers/dos/vesa.c | 0 .../3rdparty/mesa32/src/drivers/dos/vesa.h | 0 .../3rdparty/mesa32/src/drivers/dos/vga.c | 0 .../3rdparty/mesa32/src/drivers/dos/vga.h | 0 .../3rdparty/mesa32/src/drivers/dos/video.c | 0 .../3rdparty/mesa32/src/drivers/dos/video.h | 0 .../3rdparty/mesa32/src/drivers/dri/Makefile | 0 .../mesa32/src/drivers/dri/Makefile.template | 0 .../mesa32/src/drivers/dri/common/depthtmp.h | 0 .../src/drivers/dri/common/dri_bufmgr.c | 0 .../src/drivers/dri/common/dri_bufmgr.h | 0 .../src/drivers/dri/common/dri_bufpool.h | 0 .../src/drivers/dri/common/dri_drmpool.c | 0 .../mesa32/src/drivers/dri/common/dri_util.c | 0 .../mesa32/src/drivers/dri/common/dri_util.h | 0 .../src/drivers/dri/common/drirenderbuffer.c | 0 .../src/drivers/dri/common/drirenderbuffer.h | 0 .../src/drivers/dri/common/extension_helper.h | 0 .../mesa32/src/drivers/dri/common/memops.h | 0 .../mesa32/src/drivers/dri/common/mmio.h | 0 .../mesa32/src/drivers/dri/common/mmx.h | 0 .../mesa32/src/drivers/dri/common/spantmp.h | 0 .../mesa32/src/drivers/dri/common/spantmp2.h | 0 .../src/drivers/dri/common/spantmp_common.h | 0 .../src/drivers/dri/common/stenciltmp.h | 0 .../mesa32/src/drivers/dri/common/texmem.c | 0 .../mesa32/src/drivers/dri/common/texmem.h | 0 .../mesa32/src/drivers/dri/common/utils.c | 0 .../mesa32/src/drivers/dri/common/utils.h | 0 .../mesa32/src/drivers/dri/common/vblank.c | 0 .../mesa32/src/drivers/dri/common/vblank.h | 0 .../mesa32/src/drivers/dri/common/xmlconfig.c | 0 .../mesa32/src/drivers/dri/common/xmlconfig.h | 0 .../mesa32/src/drivers/dri/common/xmlpool.h | 0 .../src/drivers/dri/common/xmlpool/de.po | 0 .../src/drivers/dri/common/xmlpool/es.po | 0 .../src/drivers/dri/common/xmlpool/fr.po | 0 .../src/drivers/dri/common/xmlpool/nl.po | 0 .../src/drivers/dri/common/xmlpool/options.h | 0 .../src/drivers/dri/common/xmlpool/sv.po | 0 .../drivers/dri/common/xmlpool/t_options.h | 0 .../mesa32/src/drivers/dri/fb/Doxyfile | 0 .../mesa32/src/drivers/dri/fb/Makefile | 0 .../mesa32/src/drivers/dri/fb/fb_dri.c | 0 .../mesa32/src/drivers/dri/fb/fb_egl.c | 0 .../mesa32/src/drivers/dri/ffb/Makefile | 0 .../mesa32/src/drivers/dri/ffb/ffb_bitmap.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_bitmap.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_clear.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_clear.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_context.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_dd.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_dd.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_depth.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_depth.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_fifo.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_fog.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_lines.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_lines.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_linetmp.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_lock.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_points.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_points.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_pointtmp.h | 0 .../src/drivers/dri/ffb/ffb_rendertmp.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_span.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_span.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_state.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_state.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_stencil.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_stencil.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_tex.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_tex.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_tris.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_tris.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_tritmp.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_vb.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_vb.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_vbtmp.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_vtxfmt.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_vtxfmt.h | 0 .../mesa32/src/drivers/dri/ffb/ffb_xmesa.c | 0 .../mesa32/src/drivers/dri/ffb/ffb_xmesa.h | 0 .../src/drivers/dri/ffb/server/ffb_dac.h | 0 .../src/drivers/dri/ffb/server/ffb_drishare.h | 0 .../src/drivers/dri/ffb/server/ffb_regs.h | 0 .../mesa32/src/drivers/dri/gamma/Makefile | 0 .../src/drivers/dri/gamma/gamma_client.h | 0 .../src/drivers/dri/gamma/gamma_context.c | 0 .../src/drivers/dri/gamma/gamma_context.h | 0 .../mesa32/src/drivers/dri/gamma/gamma_dd.c | 0 .../src/drivers/dri/gamma/gamma_inithw.c | 0 .../mesa32/src/drivers/dri/gamma/gamma_lock.c | 0 .../mesa32/src/drivers/dri/gamma/gamma_lock.h | 0 .../src/drivers/dri/gamma/gamma_macros.h | 0 .../mesa32/src/drivers/dri/gamma/gamma_regs.h | 0 .../src/drivers/dri/gamma/gamma_render.c | 0 .../src/drivers/dri/gamma/gamma_screen.c | 0 .../src/drivers/dri/gamma/gamma_screen.h | 0 .../mesa32/src/drivers/dri/gamma/gamma_span.c | 0 .../src/drivers/dri/gamma/gamma_state.c | 0 .../mesa32/src/drivers/dri/gamma/gamma_tex.c | 0 .../src/drivers/dri/gamma/gamma_texmem.c | 0 .../src/drivers/dri/gamma/gamma_texstate.c | 0 .../mesa32/src/drivers/dri/gamma/gamma_tris.c | 0 .../mesa32/src/drivers/dri/gamma/gamma_tris.h | 0 .../src/drivers/dri/gamma/gamma_tritmp.h | 0 .../mesa32/src/drivers/dri/gamma/gamma_vb.c | 0 .../mesa32/src/drivers/dri/gamma/gamma_vb.h | 0 .../src/drivers/dri/gamma/gamma_xmesa.c | 0 .../drivers/dri/gamma/server/glint_common.h | 0 .../src/drivers/dri/gamma/server/glint_dri.h | 0 .../mesa32/src/drivers/dri/glcore/Makefile | 0 .../src/drivers/dri/glcore/glcore_driver.c | 0 .../mesa32/src/drivers/dri/i810/Makefile | 0 .../mesa32/src/drivers/dri/i810/i810_3d_reg.h | 0 .../mesa32/src/drivers/dri/i810/i810context.c | 0 .../mesa32/src/drivers/dri/i810/i810context.h | 0 .../mesa32/src/drivers/dri/i810/i810ioctl.c | 0 .../mesa32/src/drivers/dri/i810/i810ioctl.h | 0 .../mesa32/src/drivers/dri/i810/i810render.c | 0 .../mesa32/src/drivers/dri/i810/i810screen.c | 0 .../mesa32/src/drivers/dri/i810/i810screen.h | 0 .../mesa32/src/drivers/dri/i810/i810span.c | 0 .../mesa32/src/drivers/dri/i810/i810span.h | 0 .../mesa32/src/drivers/dri/i810/i810state.c | 0 .../mesa32/src/drivers/dri/i810/i810state.h | 0 .../mesa32/src/drivers/dri/i810/i810tex.c | 0 .../mesa32/src/drivers/dri/i810/i810tex.h | 0 .../mesa32/src/drivers/dri/i810/i810texmem.c | 0 .../src/drivers/dri/i810/i810texstate.c | 0 .../mesa32/src/drivers/dri/i810/i810tris.c | 0 .../mesa32/src/drivers/dri/i810/i810tris.h | 0 .../mesa32/src/drivers/dri/i810/i810vb.c | 0 .../mesa32/src/drivers/dri/i810/i810vb.h | 0 .../src/drivers/dri/i810/server/i810_common.h | 0 .../src/drivers/dri/i810/server/i810_dri.c | 0 .../src/drivers/dri/i810/server/i810_dri.h | 0 .../src/drivers/dri/i810/server/i810_reg.h | 0 .../mesa32/src/drivers/dri/i915/Makefile | 0 .../src/drivers/dri/i915/i830_context.c | 0 .../src/drivers/dri/i915/i830_context.h | 0 .../src/drivers/dri/i915/i830_metaops.c | 0 .../mesa32/src/drivers/dri/i915/i830_reg.h | 0 .../mesa32/src/drivers/dri/i915/i830_state.c | 0 .../mesa32/src/drivers/dri/i915/i830_tex.c | 0 .../src/drivers/dri/i915/i830_texblend.c | 0 .../src/drivers/dri/i915/i830_texstate.c | 0 .../mesa32/src/drivers/dri/i915/i830_vtbl.c | 0 .../src/drivers/dri/i915/i915_context.c | 0 .../src/drivers/dri/i915/i915_context.h | 0 .../mesa32/src/drivers/dri/i915/i915_debug.c | 0 .../src/drivers/dri/i915/i915_fragprog.c | 0 .../src/drivers/dri/i915/i915_metaops.c | 0 .../src/drivers/dri/i915/i915_program.c | 0 .../src/drivers/dri/i915/i915_program.h | 0 .../mesa32/src/drivers/dri/i915/i915_reg.h | 0 .../mesa32/src/drivers/dri/i915/i915_state.c | 0 .../mesa32/src/drivers/dri/i915/i915_tex.c | 0 .../src/drivers/dri/i915/i915_texprog.c | 0 .../src/drivers/dri/i915/i915_texstate.c | 0 .../mesa32/src/drivers/dri/i915/i915_vtbl.c | 0 .../src/drivers/dri/i915/intel_batchbuffer.c | 0 .../src/drivers/dri/i915/intel_batchbuffer.h | 0 .../src/drivers/dri/i915/intel_context.c | 0 .../src/drivers/dri/i915/intel_context.h | 0 .../mesa32/src/drivers/dri/i915/intel_ioctl.c | 0 .../mesa32/src/drivers/dri/i915/intel_ioctl.h | 0 .../mesa32/src/drivers/dri/i915/intel_pixel.c | 0 .../mesa32/src/drivers/dri/i915/intel_reg.h | 0 .../src/drivers/dri/i915/intel_render.c | 0 .../src/drivers/dri/i915/intel_rotate.c | 0 .../src/drivers/dri/i915/intel_rotate.h | 0 .../src/drivers/dri/i915/intel_screen.c | 0 .../src/drivers/dri/i915/intel_screen.h | 0 .../mesa32/src/drivers/dri/i915/intel_span.c | 0 .../mesa32/src/drivers/dri/i915/intel_span.h | 0 .../mesa32/src/drivers/dri/i915/intel_state.c | 0 .../mesa32/src/drivers/dri/i915/intel_tex.c | 0 .../mesa32/src/drivers/dri/i915/intel_tex.h | 0 .../src/drivers/dri/i915/intel_texmem.c | 0 .../mesa32/src/drivers/dri/i915/intel_tris.c | 0 .../mesa32/src/drivers/dri/i915/intel_tris.h | 0 .../src/drivers/dri/i915/server/i830_common.h | 0 .../src/drivers/dri/i915/server/i830_dri.h | 0 .../src/drivers/dri/i915/server/intel.h | 0 .../src/drivers/dri/i915/server/intel_dri.c | 0 .../mesa32/src/drivers/dri/i915tex/Makefile | 0 .../src/drivers/dri/i915tex/i830_context.c | 0 .../src/drivers/dri/i915tex/i830_context.h | 0 .../src/drivers/dri/i915tex/i830_metaops.c | 0 .../mesa32/src/drivers/dri/i915tex/i830_reg.h | 0 .../src/drivers/dri/i915tex/i830_state.c | 0 .../mesa32/src/drivers/dri/i915tex/i830_tex.c | 0 .../src/drivers/dri/i915tex/i830_texblend.c | 0 .../src/drivers/dri/i915tex/i830_texstate.c | 0 .../src/drivers/dri/i915tex/i830_vtbl.c | 0 .../src/drivers/dri/i915tex/i915_context.c | 0 .../src/drivers/dri/i915tex/i915_context.h | 0 .../src/drivers/dri/i915tex/i915_debug.c | 0 .../src/drivers/dri/i915tex/i915_fragprog.c | 0 .../src/drivers/dri/i915tex/i915_metaops.c | 0 .../src/drivers/dri/i915tex/i915_program.c | 0 .../src/drivers/dri/i915tex/i915_program.h | 0 .../mesa32/src/drivers/dri/i915tex/i915_reg.h | 0 .../src/drivers/dri/i915tex/i915_state.c | 0 .../mesa32/src/drivers/dri/i915tex/i915_tex.c | 0 .../src/drivers/dri/i915tex/i915_tex_layout.c | 0 .../src/drivers/dri/i915tex/i915_texstate.c | 0 .../src/drivers/dri/i915tex/i915_vtbl.c | 0 .../drivers/dri/i915tex/intel_batchbuffer.c | 0 .../drivers/dri/i915tex/intel_batchbuffer.h | 0 .../src/drivers/dri/i915tex/intel_batchpool.c | 0 .../src/drivers/dri/i915tex/intel_blit.c | 0 .../src/drivers/dri/i915tex/intel_blit.h | 0 .../dri/i915tex/intel_buffer_objects.c | 0 .../dri/i915tex/intel_buffer_objects.h | 0 .../src/drivers/dri/i915tex/intel_buffers.c | 0 .../src/drivers/dri/i915tex/intel_buffers.h | 0 .../src/drivers/dri/i915tex/intel_context.c | 0 .../src/drivers/dri/i915tex/intel_context.h | 0 .../drivers/dri/i915tex/intel_depthstencil.c | 0 .../drivers/dri/i915tex/intel_depthstencil.h | 0 .../src/drivers/dri/i915tex/intel_fbo.c | 0 .../src/drivers/dri/i915tex/intel_fbo.h | 0 .../src/drivers/dri/i915tex/intel_ioctl.c | 0 .../src/drivers/dri/i915tex/intel_ioctl.h | 0 .../drivers/dri/i915tex/intel_mipmap_tree.c | 0 .../drivers/dri/i915tex/intel_mipmap_tree.h | 0 .../src/drivers/dri/i915tex/intel_pixel.c | 0 .../src/drivers/dri/i915tex/intel_pixel.h | 0 .../drivers/dri/i915tex/intel_pixel_bitmap.c | 0 .../drivers/dri/i915tex/intel_pixel_copy.c | 0 .../drivers/dri/i915tex/intel_pixel_draw.c | 0 .../drivers/dri/i915tex/intel_pixel_read.c | 0 .../src/drivers/dri/i915tex/intel_reg.h | 0 .../src/drivers/dri/i915tex/intel_regions.c | 0 .../src/drivers/dri/i915tex/intel_regions.h | 0 .../src/drivers/dri/i915tex/intel_render.c | 0 .../src/drivers/dri/i915tex/intel_rotate.c | 0 .../src/drivers/dri/i915tex/intel_rotate.h | 0 .../src/drivers/dri/i915tex/intel_screen.c | 0 .../src/drivers/dri/i915tex/intel_screen.h | 0 .../src/drivers/dri/i915tex/intel_span.c | 0 .../src/drivers/dri/i915tex/intel_span.h | 0 .../src/drivers/dri/i915tex/intel_state.c | 0 .../src/drivers/dri/i915tex/intel_structs.h | 0 .../src/drivers/dri/i915tex/intel_tex.c | 0 .../src/drivers/dri/i915tex/intel_tex.h | 0 .../src/drivers/dri/i915tex/intel_tex_copy.c | 0 .../drivers/dri/i915tex/intel_tex_format.c | 0 .../src/drivers/dri/i915tex/intel_tex_image.c | 0 .../drivers/dri/i915tex/intel_tex_layout.c | 0 .../drivers/dri/i915tex/intel_tex_subimage.c | 0 .../drivers/dri/i915tex/intel_tex_validate.c | 0 .../src/drivers/dri/i915tex/intel_tris.c | 0 .../src/drivers/dri/i915tex/intel_tris.h | 0 .../drivers/dri/i915tex/server/i830_common.h | 0 .../src/drivers/dri/i915tex/server/i830_dri.h | 0 .../src/drivers/dri/i915tex/server/intel.h | 0 .../drivers/dri/i915tex/server/intel_dri.c | 0 .../mesa32/src/drivers/dri/i965/Makefile | 0 .../mesa32/src/drivers/dri/i965/brw_aub.c | 0 .../mesa32/src/drivers/dri/i965/brw_aub.h | 0 .../src/drivers/dri/i965/brw_aub_playback.c | 0 .../mesa32/src/drivers/dri/i965/brw_cc.c | 0 .../mesa32/src/drivers/dri/i965/brw_clip.c | 0 .../mesa32/src/drivers/dri/i965/brw_clip.h | 0 .../src/drivers/dri/i965/brw_clip_line.c | 0 .../src/drivers/dri/i965/brw_clip_point.c | 0 .../src/drivers/dri/i965/brw_clip_state.c | 0 .../src/drivers/dri/i965/brw_clip_tri.c | 0 .../src/drivers/dri/i965/brw_clip_unfilled.c | 0 .../src/drivers/dri/i965/brw_clip_util.c | 0 .../mesa32/src/drivers/dri/i965/brw_context.c | 0 .../mesa32/src/drivers/dri/i965/brw_context.h | 0 .../mesa32/src/drivers/dri/i965/brw_curbe.c | 0 .../mesa32/src/drivers/dri/i965/brw_defines.h | 0 .../mesa32/src/drivers/dri/i965/brw_draw.c | 0 .../mesa32/src/drivers/dri/i965/brw_draw.h | 0 .../src/drivers/dri/i965/brw_draw_upload.c | 0 .../mesa32/src/drivers/dri/i965/brw_eu.c | 0 .../mesa32/src/drivers/dri/i965/brw_eu.h | 0 .../src/drivers/dri/i965/brw_eu_debug.c | 0 .../mesa32/src/drivers/dri/i965/brw_eu_emit.c | 0 .../mesa32/src/drivers/dri/i965/brw_eu_util.c | 0 .../src/drivers/dri/i965/brw_exec_generic.c | 0 .../src/drivers/dri/i965/brw_fallback.c | 0 .../src/drivers/dri/i965/brw_fallback.h | 0 .../mesa32/src/drivers/dri/i965/brw_gs.c | 0 .../mesa32/src/drivers/dri/i965/brw_gs.h | 0 .../mesa32/src/drivers/dri/i965/brw_gs_emit.c | 0 .../src/drivers/dri/i965/brw_gs_state.c | 0 .../mesa32/src/drivers/dri/i965/brw_hal.c | 0 .../mesa32/src/drivers/dri/i965/brw_hal.h | 0 .../mesa32/src/drivers/dri/i965/brw_metaops.c | 0 .../src/drivers/dri/i965/brw_misc_state.c | 0 .../mesa32/src/drivers/dri/i965/brw_program.c | 0 .../mesa32/src/drivers/dri/i965/brw_sf.c | 0 .../mesa32/src/drivers/dri/i965/brw_sf.h | 0 .../mesa32/src/drivers/dri/i965/brw_sf_emit.c | 0 .../src/drivers/dri/i965/brw_sf_state.c | 0 .../mesa32/src/drivers/dri/i965/brw_state.h | 0 .../src/drivers/dri/i965/brw_state_batch.c | 0 .../src/drivers/dri/i965/brw_state_cache.c | 0 .../src/drivers/dri/i965/brw_state_pool.c | 0 .../src/drivers/dri/i965/brw_state_upload.c | 0 .../mesa32/src/drivers/dri/i965/brw_structs.h | 0 .../mesa32/src/drivers/dri/i965/brw_tex.c | 0 .../src/drivers/dri/i965/brw_tex_layout.c | 0 .../mesa32/src/drivers/dri/i965/brw_urb.c | 0 .../mesa32/src/drivers/dri/i965/brw_util.c | 0 .../mesa32/src/drivers/dri/i965/brw_util.h | 0 .../mesa32/src/drivers/dri/i965/brw_vs.c | 0 .../mesa32/src/drivers/dri/i965/brw_vs.h | 0 .../src/drivers/dri/i965/brw_vs_constval.c | 0 .../mesa32/src/drivers/dri/i965/brw_vs_emit.c | 0 .../src/drivers/dri/i965/brw_vs_state.c | 0 .../mesa32/src/drivers/dri/i965/brw_vs_tnl.c | 0 .../mesa32/src/drivers/dri/i965/brw_vtbl.c | 0 .../mesa32/src/drivers/dri/i965/brw_wm.c | 0 .../mesa32/src/drivers/dri/i965/brw_wm.h | 0 .../src/drivers/dri/i965/brw_wm_debug.c | 0 .../mesa32/src/drivers/dri/i965/brw_wm_emit.c | 0 .../mesa32/src/drivers/dri/i965/brw_wm_fp.c | 0 .../mesa32/src/drivers/dri/i965/brw_wm_iz.c | 0 .../src/drivers/dri/i965/brw_wm_pass0.c | 0 .../src/drivers/dri/i965/brw_wm_pass1.c | 0 .../src/drivers/dri/i965/brw_wm_pass2.c | 0 .../drivers/dri/i965/brw_wm_sampler_state.c | 0 .../src/drivers/dri/i965/brw_wm_state.c | 0 .../drivers/dri/i965/brw_wm_surface_state.c | 0 .../mesa32/src/drivers/dri/i965/bufmgr.h | 0 .../mesa32/src/drivers/dri/i965/bufmgr_fake.c | 0 .../src/drivers/dri/i965/intel_batchbuffer.c | 0 .../src/drivers/dri/i965/intel_batchbuffer.h | 0 .../mesa32/src/drivers/dri/i965/intel_blit.c | 0 .../mesa32/src/drivers/dri/i965/intel_blit.h | 0 .../drivers/dri/i965/intel_buffer_objects.c | 0 .../drivers/dri/i965/intel_buffer_objects.h | 0 .../src/drivers/dri/i965/intel_buffers.c | 0 .../src/drivers/dri/i965/intel_context.c | 0 .../src/drivers/dri/i965/intel_context.h | 0 .../mesa32/src/drivers/dri/i965/intel_ioctl.c | 0 .../mesa32/src/drivers/dri/i965/intel_ioctl.h | 0 .../src/drivers/dri/i965/intel_mipmap_tree.c | 0 .../src/drivers/dri/i965/intel_mipmap_tree.h | 0 .../src/drivers/dri/i965/intel_pixel_bitmap.c | 0 .../src/drivers/dri/i965/intel_pixel_copy.c | 0 .../mesa32/src/drivers/dri/i965/intel_reg.h | 0 .../src/drivers/dri/i965/intel_regions.c | 0 .../src/drivers/dri/i965/intel_regions.h | 0 .../src/drivers/dri/i965/intel_screen.c | 0 .../src/drivers/dri/i965/intel_screen.h | 0 .../mesa32/src/drivers/dri/i965/intel_span.c | 0 .../mesa32/src/drivers/dri/i965/intel_span.h | 0 .../mesa32/src/drivers/dri/i965/intel_state.c | 0 .../src/drivers/dri/i965/intel_structs.h | 0 .../mesa32/src/drivers/dri/i965/intel_tex.c | 0 .../mesa32/src/drivers/dri/i965/intel_tex.h | 0 .../src/drivers/dri/i965/intel_tex_layout.c | 0 .../src/drivers/dri/i965/intel_tex_validate.c | 0 .../src/drivers/dri/i965/server/i830_common.h | 0 .../src/drivers/dri/i965/server/i830_dri.h | 0 .../src/drivers/dri/i965/server/intel.h | 0 .../src/drivers/dri/i965/server/intel_dri.c | 0 .../src/drivers/dri/intel/intel_tex_layout.c | 0 .../src/drivers/dri/intel/intel_tex_layout.h | 0 .../mesa32/src/drivers/dri/mach64/Makefile | 0 .../src/drivers/dri/mach64/mach64_context.c | 0 .../src/drivers/dri/mach64/mach64_context.h | 0 .../mesa32/src/drivers/dri/mach64/mach64_dd.c | 0 .../mesa32/src/drivers/dri/mach64/mach64_dd.h | 0 .../src/drivers/dri/mach64/mach64_ioctl.c | 0 .../src/drivers/dri/mach64/mach64_ioctl.h | 0 .../src/drivers/dri/mach64/mach64_lock.c | 0 .../src/drivers/dri/mach64/mach64_lock.h | 0 .../src/drivers/dri/mach64/mach64_native_vb.c | 0 .../drivers/dri/mach64/mach64_native_vbtmp.h | 0 .../src/drivers/dri/mach64/mach64_reg.h | 0 .../src/drivers/dri/mach64/mach64_screen.c | 0 .../src/drivers/dri/mach64/mach64_screen.h | 0 .../src/drivers/dri/mach64/mach64_span.c | 0 .../src/drivers/dri/mach64/mach64_span.h | 0 .../src/drivers/dri/mach64/mach64_state.c | 0 .../src/drivers/dri/mach64/mach64_state.h | 0 .../src/drivers/dri/mach64/mach64_tex.c | 0 .../src/drivers/dri/mach64/mach64_tex.h | 0 .../src/drivers/dri/mach64/mach64_texmem.c | 0 .../src/drivers/dri/mach64/mach64_texstate.c | 0 .../src/drivers/dri/mach64/mach64_tris.c | 0 .../src/drivers/dri/mach64/mach64_tris.h | 0 .../mesa32/src/drivers/dri/mach64/mach64_vb.c | 0 .../mesa32/src/drivers/dri/mach64/mach64_vb.h | 0 .../src/drivers/dri/mach64/mach64_vbtmp.h | 0 .../drivers/dri/mach64/server/mach64_dri.h | 0 .../mesa32/src/drivers/dri/mga/Doxyfile | 0 .../mesa32/src/drivers/dri/mga/Makefile | 0 .../src/drivers/dri/mga/mga_texcombine.c | 0 .../mesa32/src/drivers/dri/mga/mga_texstate.c | 0 .../mesa32/src/drivers/dri/mga/mga_xmesa.c | 0 .../mesa32/src/drivers/dri/mga/mga_xmesa.h | 0 .../mesa32/src/drivers/dri/mga/mgacontext.h | 0 .../mesa32/src/drivers/dri/mga/mgadd.c | 0 .../mesa32/src/drivers/dri/mga/mgadd.h | 0 .../mesa32/src/drivers/dri/mga/mgaioctl.c | 0 .../mesa32/src/drivers/dri/mga/mgaioctl.h | 0 .../mesa32/src/drivers/dri/mga/mgapixel.c | 0 .../mesa32/src/drivers/dri/mga/mgapixel.h | 0 .../mesa32/src/drivers/dri/mga/mgaregs.h | 0 .../mesa32/src/drivers/dri/mga/mgarender.c | 0 .../mesa32/src/drivers/dri/mga/mgaspan.c | 0 .../mesa32/src/drivers/dri/mga/mgaspan.h | 0 .../mesa32/src/drivers/dri/mga/mgastate.c | 0 .../mesa32/src/drivers/dri/mga/mgastate.h | 0 .../mesa32/src/drivers/dri/mga/mgatex.c | 0 .../mesa32/src/drivers/dri/mga/mgatex.h | 0 .../mesa32/src/drivers/dri/mga/mgatexmem.c | 0 .../mesa32/src/drivers/dri/mga/mgatris.c | 0 .../mesa32/src/drivers/dri/mga/mgatris.h | 0 .../mesa32/src/drivers/dri/mga/mgavb.c | 0 .../mesa32/src/drivers/dri/mga/mgavb.h | 0 .../mesa32/src/drivers/dri/mga/server/mga.h | 0 .../src/drivers/dri/mga/server/mga_bios.h | 0 .../src/drivers/dri/mga/server/mga_dri.c | 0 .../src/drivers/dri/mga/server/mga_dri.h | 0 .../src/drivers/dri/mga/server/mga_macros.h | 0 .../src/drivers/dri/mga/server/mga_reg.h | 0 .../mesa32/src/drivers/dri/nouveau/Makefile | 0 .../drivers/dri/nouveau/nouveau_bufferobj.c | 0 .../drivers/dri/nouveau/nouveau_bufferobj.h | 0 .../src/drivers/dri/nouveau/nouveau_buffers.c | 0 .../src/drivers/dri/nouveau/nouveau_buffers.h | 0 .../src/drivers/dri/nouveau/nouveau_card.c | 0 .../src/drivers/dri/nouveau/nouveau_card.h | 0 .../drivers/dri/nouveau/nouveau_card_list.h | 0 .../src/drivers/dri/nouveau/nouveau_context.c | 0 .../src/drivers/dri/nouveau/nouveau_context.h | 0 .../src/drivers/dri/nouveau/nouveau_ctrlreg.h | 0 .../src/drivers/dri/nouveau/nouveau_dri.h | 0 .../src/drivers/dri/nouveau/nouveau_driver.c | 0 .../src/drivers/dri/nouveau/nouveau_driver.h | 0 .../src/drivers/dri/nouveau/nouveau_fifo.c | 0 .../src/drivers/dri/nouveau/nouveau_fifo.h | 0 .../src/drivers/dri/nouveau/nouveau_lock.c | 0 .../src/drivers/dri/nouveau/nouveau_lock.h | 0 .../src/drivers/dri/nouveau/nouveau_msg.h | 0 .../src/drivers/dri/nouveau/nouveau_object.c | 0 .../src/drivers/dri/nouveau/nouveau_object.h | 0 .../src/drivers/dri/nouveau/nouveau_query.c | 0 .../src/drivers/dri/nouveau/nouveau_query.h | 0 .../src/drivers/dri/nouveau/nouveau_reg.h | 0 .../src/drivers/dri/nouveau/nouveau_screen.c | 0 .../src/drivers/dri/nouveau/nouveau_screen.h | 0 .../src/drivers/dri/nouveau/nouveau_shader.c | 0 .../src/drivers/dri/nouveau/nouveau_shader.h | 0 .../drivers/dri/nouveau/nouveau_shader_0.c | 0 .../drivers/dri/nouveau/nouveau_shader_1.c | 0 .../drivers/dri/nouveau/nouveau_shader_2.c | 0 .../src/drivers/dri/nouveau/nouveau_span.c | 0 .../src/drivers/dri/nouveau/nouveau_span.h | 0 .../src/drivers/dri/nouveau/nouveau_state.c | 0 .../src/drivers/dri/nouveau/nouveau_state.h | 0 .../drivers/dri/nouveau/nouveau_state_cache.c | 0 .../drivers/dri/nouveau/nouveau_state_cache.h | 0 .../src/drivers/dri/nouveau/nouveau_swtcl.c | 0 .../src/drivers/dri/nouveau/nouveau_swtcl.h | 0 .../src/drivers/dri/nouveau/nouveau_sync.c | 0 .../src/drivers/dri/nouveau/nouveau_sync.h | 0 .../src/drivers/dri/nouveau/nouveau_tex.c | 0 .../src/drivers/dri/nouveau/nouveau_tex.h | 0 .../src/drivers/dri/nouveau/nv04_state.c | 0 .../src/drivers/dri/nouveau/nv04_swtcl.c | 0 .../src/drivers/dri/nouveau/nv04_swtcl.h | 0 .../src/drivers/dri/nouveau/nv10_state.c | 0 .../src/drivers/dri/nouveau/nv10_swtcl.c | 0 .../src/drivers/dri/nouveau/nv10_swtcl.h | 0 .../src/drivers/dri/nouveau/nv20_shader.h | 0 .../src/drivers/dri/nouveau/nv20_state.c | 0 .../src/drivers/dri/nouveau/nv20_vertprog.c | 0 .../src/drivers/dri/nouveau/nv30_fragprog.c | 0 .../src/drivers/dri/nouveau/nv30_shader.h | 0 .../src/drivers/dri/nouveau/nv30_state.c | 0 .../src/drivers/dri/nouveau/nv30_vertprog.c | 0 .../src/drivers/dri/nouveau/nv40_fragprog.c | 0 .../src/drivers/dri/nouveau/nv40_shader.h | 0 .../src/drivers/dri/nouveau/nv40_vertprog.c | 0 .../src/drivers/dri/nouveau/nv50_state.c | 0 .../mesa32/src/drivers/dri/r128/Makefile | 0 .../src/drivers/dri/r128/r128_context.c | 0 .../src/drivers/dri/r128/r128_context.h | 0 .../mesa32/src/drivers/dri/r128/r128_dd.c | 0 .../mesa32/src/drivers/dri/r128/r128_dd.h | 0 .../mesa32/src/drivers/dri/r128/r128_ioctl.c | 0 .../mesa32/src/drivers/dri/r128/r128_ioctl.h | 0 .../mesa32/src/drivers/dri/r128/r128_lock.c | 0 .../mesa32/src/drivers/dri/r128/r128_lock.h | 0 .../mesa32/src/drivers/dri/r128/r128_screen.c | 0 .../mesa32/src/drivers/dri/r128/r128_screen.h | 0 .../mesa32/src/drivers/dri/r128/r128_span.c | 0 .../mesa32/src/drivers/dri/r128/r128_span.h | 0 .../mesa32/src/drivers/dri/r128/r128_state.c | 0 .../mesa32/src/drivers/dri/r128/r128_state.h | 0 .../mesa32/src/drivers/dri/r128/r128_tex.c | 0 .../mesa32/src/drivers/dri/r128/r128_tex.h | 0 .../mesa32/src/drivers/dri/r128/r128_texmem.c | 0 .../mesa32/src/drivers/dri/r128/r128_texobj.h | 0 .../src/drivers/dri/r128/r128_texstate.c | 0 .../mesa32/src/drivers/dri/r128/r128_tris.c | 0 .../mesa32/src/drivers/dri/r128/r128_tris.h | 0 .../src/drivers/dri/r128/server/pci_ids.h | 0 .../mesa32/src/drivers/dri/r128/server/r128.h | 0 .../src/drivers/dri/r128/server/r128_dri.c | 0 .../src/drivers/dri/r128/server/r128_dri.h | 0 .../src/drivers/dri/r128/server/r128_macros.h | 0 .../src/drivers/dri/r128/server/r128_reg.h | 0 .../drivers/dri/r128/server/r128_version.h | 0 .../mesa32/src/drivers/dri/r200/Doxyfile | 0 .../mesa32/src/drivers/dri/r200/Makefile | 0 .../mesa32/src/drivers/dri/r200/r200_cmdbuf.c | 0 .../src/drivers/dri/r200/r200_context.c | 0 .../src/drivers/dri/r200/r200_context.h | 0 .../src/drivers/dri/r200/r200_fragshader.c | 0 .../mesa32/src/drivers/dri/r200/r200_ioctl.c | 0 .../mesa32/src/drivers/dri/r200/r200_ioctl.h | 0 .../mesa32/src/drivers/dri/r200/r200_lock.c | 0 .../mesa32/src/drivers/dri/r200/r200_lock.h | 0 .../mesa32/src/drivers/dri/r200/r200_maos.c | 0 .../mesa32/src/drivers/dri/r200/r200_maos.h | 0 .../src/drivers/dri/r200/r200_maos_arrays.c | 0 .../mesa32/src/drivers/dri/r200/r200_pixel.c | 0 .../mesa32/src/drivers/dri/r200/r200_pixel.h | 0 .../mesa32/src/drivers/dri/r200/r200_reg.h | 0 .../mesa32/src/drivers/dri/r200/r200_sanity.c | 0 .../mesa32/src/drivers/dri/r200/r200_sanity.h | 0 .../mesa32/src/drivers/dri/r200/r200_span.c | 0 .../mesa32/src/drivers/dri/r200/r200_span.h | 0 .../mesa32/src/drivers/dri/r200/r200_state.c | 0 .../mesa32/src/drivers/dri/r200/r200_state.h | 0 .../src/drivers/dri/r200/r200_state_init.c | 0 .../mesa32/src/drivers/dri/r200/r200_swtcl.c | 0 .../mesa32/src/drivers/dri/r200/r200_swtcl.h | 0 .../mesa32/src/drivers/dri/r200/r200_tcl.c | 0 .../mesa32/src/drivers/dri/r200/r200_tcl.h | 0 .../mesa32/src/drivers/dri/r200/r200_tex.c | 0 .../mesa32/src/drivers/dri/r200/r200_tex.h | 0 .../mesa32/src/drivers/dri/r200/r200_texmem.c | 0 .../src/drivers/dri/r200/r200_texstate.c | 0 .../src/drivers/dri/r200/r200_vertprog.c | 0 .../src/drivers/dri/r200/r200_vertprog.h | 0 .../src/drivers/dri/r200/radeon_chipset.h | 0 .../src/drivers/dri/r200/radeon_screen.c | 0 .../src/drivers/dri/r200/radeon_screen.h | 0 .../src/drivers/dri/r200/server/radeon.h | 0 .../src/drivers/dri/r200/server/radeon_dri.c | 0 .../src/drivers/dri/r200/server/radeon_dri.h | 0 .../src/drivers/dri/r200/server/radeon_egl.c | 0 .../drivers/dri/r200/server/radeon_macros.h | 0 .../src/drivers/dri/r200/server/radeon_reg.h | 0 .../mesa32/src/drivers/dri/r300/Makefile | 0 .../mesa32/src/drivers/dri/r300/r300_cmdbuf.c | 0 .../mesa32/src/drivers/dri/r300/r300_cmdbuf.h | 0 .../src/drivers/dri/r300/r300_context.c | 0 .../src/drivers/dri/r300/r300_context.h | 0 .../mesa32/src/drivers/dri/r300/r300_emit.c | 0 .../mesa32/src/drivers/dri/r300/r300_emit.h | 0 .../src/drivers/dri/r300/r300_fragprog.c | 0 .../src/drivers/dri/r300/r300_fragprog.h | 0 .../mesa32/src/drivers/dri/r300/r300_ioctl.c | 0 .../mesa32/src/drivers/dri/r300/r300_ioctl.h | 0 .../mesa32/src/drivers/dri/r300/r300_mem.c | 0 .../mesa32/src/drivers/dri/r300/r300_mem.h | 0 .../src/drivers/dri/r300/r300_program.h | 0 .../mesa32/src/drivers/dri/r300/r300_reg.h | 0 .../mesa32/src/drivers/dri/r300/r300_render.c | 0 .../mesa32/src/drivers/dri/r300/r300_shader.c | 0 .../mesa32/src/drivers/dri/r300/r300_state.c | 0 .../mesa32/src/drivers/dri/r300/r300_state.h | 0 .../mesa32/src/drivers/dri/r300/r300_tex.c | 0 .../mesa32/src/drivers/dri/r300/r300_tex.h | 0 .../mesa32/src/drivers/dri/r300/r300_texmem.c | 0 .../src/drivers/dri/r300/r300_texstate.c | 0 .../src/drivers/dri/r300/r300_vertprog.c | 0 .../src/drivers/dri/r300/r300_vertprog.h | 0 .../src/drivers/dri/r300/radeon_chipset.h | 0 .../src/drivers/dri/r300/radeon_context.c | 0 .../src/drivers/dri/r300/radeon_context.h | 0 .../src/drivers/dri/r300/radeon_ioctl.c | 0 .../src/drivers/dri/r300/radeon_ioctl.h | 0 .../mesa32/src/drivers/dri/r300/radeon_lock.c | 0 .../mesa32/src/drivers/dri/r300/radeon_lock.h | 0 .../src/drivers/dri/r300/radeon_screen.c | 0 .../src/drivers/dri/r300/radeon_screen.h | 0 .../mesa32/src/drivers/dri/r300/radeon_span.c | 0 .../mesa32/src/drivers/dri/r300/radeon_span.h | 0 .../src/drivers/dri/r300/radeon_state.c | 0 .../src/drivers/dri/r300/radeon_state.h | 0 .../src/drivers/dri/r300/server/radeon.h | 0 .../src/drivers/dri/r300/server/radeon_dri.c | 0 .../src/drivers/dri/r300/server/radeon_dri.h | 0 .../src/drivers/dri/r300/server/radeon_egl.c | 0 .../drivers/dri/r300/server/radeon_macros.h | 0 .../src/drivers/dri/r300/server/radeon_reg.h | 0 .../mesa32/src/drivers/dri/radeon/Makefile | 0 .../src/drivers/dri/radeon/radeon_chipset.h | 0 .../src/drivers/dri/radeon/radeon_compat.c | 0 .../src/drivers/dri/radeon/radeon_context.c | 0 .../src/drivers/dri/radeon/radeon_context.h | 0 .../src/drivers/dri/radeon/radeon_ioctl.c | 0 .../src/drivers/dri/radeon/radeon_ioctl.h | 0 .../src/drivers/dri/radeon/radeon_lighting.c | 0 .../src/drivers/dri/radeon/radeon_lock.c | 0 .../src/drivers/dri/radeon/radeon_lock.h | 0 .../src/drivers/dri/radeon/radeon_maos.c | 0 .../src/drivers/dri/radeon/radeon_maos.h | 0 .../drivers/dri/radeon/radeon_maos_arrays.c | 0 .../drivers/dri/radeon/radeon_maos_vbtmp.h | 0 .../drivers/dri/radeon/radeon_maos_verts.c | 0 .../src/drivers/dri/radeon/radeon_sanity.c | 0 .../src/drivers/dri/radeon/radeon_sanity.h | 0 .../src/drivers/dri/radeon/radeon_screen.c | 0 .../src/drivers/dri/radeon/radeon_screen.h | 0 .../src/drivers/dri/radeon/radeon_span.c | 0 .../src/drivers/dri/radeon/radeon_span.h | 0 .../src/drivers/dri/radeon/radeon_state.c | 0 .../src/drivers/dri/radeon/radeon_state.h | 0 .../drivers/dri/radeon/radeon_state_init.c | 0 .../src/drivers/dri/radeon/radeon_swtcl.c | 0 .../src/drivers/dri/radeon/radeon_swtcl.h | 0 .../src/drivers/dri/radeon/radeon_tcl.c | 0 .../src/drivers/dri/radeon/radeon_tcl.h | 0 .../src/drivers/dri/radeon/radeon_tex.c | 0 .../src/drivers/dri/radeon/radeon_tex.h | 0 .../src/drivers/dri/radeon/radeon_texmem.c | 0 .../src/drivers/dri/radeon/radeon_texstate.c | 0 .../src/drivers/dri/radeon/server/radeon.h | 0 .../drivers/dri/radeon/server/radeon_dri.c | 0 .../drivers/dri/radeon/server/radeon_dri.h | 0 .../drivers/dri/radeon/server/radeon_egl.c | 0 .../drivers/dri/radeon/server/radeon_macros.h | 0 .../drivers/dri/radeon/server/radeon_reg.h | 0 .../mesa32/src/drivers/dri/s3v/Makefile | 0 .../mesa32/src/drivers/dri/s3v/s3v_common.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_context.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_context.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_dd.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_dri.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_inithw.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_lock.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_lock.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_macros.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_regs.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_render.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_screen.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_screen.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_span.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_state.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_tex.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_tex.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_texmem.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_texstate.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_tris.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_tris.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_tritmp.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_vb.c | 0 .../mesa32/src/drivers/dri/s3v/s3v_vb.h | 0 .../mesa32/src/drivers/dri/s3v/s3v_xmesa.c | 0 .../mesa32/src/drivers/dri/s3v/s3virgetri.h | 0 .../mesa32/src/drivers/dri/savage/Makefile | 0 .../src/drivers/dri/savage/savage_3d_reg.h | 0 .../src/drivers/dri/savage/savage_bci.h | 0 .../src/drivers/dri/savage/savage_init.h | 0 .../src/drivers/dri/savage/savage_xmesa.c | 0 .../src/drivers/dri/savage/savagecontext.h | 0 .../mesa32/src/drivers/dri/savage/savagedd.c | 0 .../mesa32/src/drivers/dri/savage/savagedd.h | 0 .../src/drivers/dri/savage/savageioctl.c | 0 .../src/drivers/dri/savage/savageioctl.h | 0 .../src/drivers/dri/savage/savagerender.c | 0 .../src/drivers/dri/savage/savagespan.c | 0 .../src/drivers/dri/savage/savagespan.h | 0 .../src/drivers/dri/savage/savagestate.c | 0 .../src/drivers/dri/savage/savagestate.h | 0 .../mesa32/src/drivers/dri/savage/savagetex.c | 0 .../mesa32/src/drivers/dri/savage/savagetex.h | 0 .../src/drivers/dri/savage/savagetris.c | 0 .../src/drivers/dri/savage/savagetris.h | 0 .../drivers/dri/savage/server/savage_dri.h | 0 .../mesa32/src/drivers/dri/sis/Makefile | 0 .../src/drivers/dri/sis/server/sis_common.h | 0 .../src/drivers/dri/sis/server/sis_dri.h | 0 .../src/drivers/dri/sis/sis6326_clear.c | 0 .../mesa32/src/drivers/dri/sis/sis6326_reg.h | 0 .../src/drivers/dri/sis/sis6326_state.c | 0 .../mesa32/src/drivers/dri/sis/sis_alloc.c | 0 .../mesa32/src/drivers/dri/sis/sis_alloc.h | 0 .../mesa32/src/drivers/dri/sis/sis_clear.c | 0 .../mesa32/src/drivers/dri/sis/sis_context.c | 0 .../mesa32/src/drivers/dri/sis/sis_context.h | 0 .../mesa32/src/drivers/dri/sis/sis_dd.c | 0 .../mesa32/src/drivers/dri/sis/sis_dd.h | 0 .../mesa32/src/drivers/dri/sis/sis_fog.c | 0 .../mesa32/src/drivers/dri/sis/sis_lock.c | 0 .../mesa32/src/drivers/dri/sis/sis_lock.h | 0 .../mesa32/src/drivers/dri/sis/sis_reg.h | 0 .../mesa32/src/drivers/dri/sis/sis_screen.c | 0 .../mesa32/src/drivers/dri/sis/sis_screen.h | 0 .../mesa32/src/drivers/dri/sis/sis_span.c | 0 .../mesa32/src/drivers/dri/sis/sis_span.h | 0 .../mesa32/src/drivers/dri/sis/sis_state.c | 0 .../mesa32/src/drivers/dri/sis/sis_state.h | 0 .../mesa32/src/drivers/dri/sis/sis_stencil.c | 0 .../mesa32/src/drivers/dri/sis/sis_stencil.h | 0 .../mesa32/src/drivers/dri/sis/sis_tex.c | 0 .../mesa32/src/drivers/dri/sis/sis_tex.h | 0 .../mesa32/src/drivers/dri/sis/sis_texstate.c | 0 .../mesa32/src/drivers/dri/sis/sis_tris.c | 0 .../mesa32/src/drivers/dri/sis/sis_tris.h | 0 .../mesa32/src/drivers/dri/sis/sis_tritmp.h | 0 .../mesa32/src/drivers/dri/tdfx/Makefile | 0 .../mesa32/src/drivers/dri/tdfx/dri_glide.h | 0 .../src/drivers/dri/tdfx/server/tdfx_dri.c | 0 .../src/drivers/dri/tdfx/server/tdfx_dri.h | 0 .../src/drivers/dri/tdfx/tdfx_context.c | 0 .../src/drivers/dri/tdfx/tdfx_context.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_dd.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_dd.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_glide.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_lock.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_lock.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_pixels.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_pixels.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_render.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_render.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_screen.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_screen.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_span.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_span.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_state.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_state.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_tex.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_tex.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_texman.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_texman.h | 0 .../src/drivers/dri/tdfx/tdfx_texstate.c | 0 .../src/drivers/dri/tdfx/tdfx_texstate.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_tris.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_tris.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_vb.c | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_vb.h | 0 .../mesa32/src/drivers/dri/tdfx/tdfx_vbtmp.h | 0 .../mesa32/src/drivers/dri/trident/Makefile | 0 .../src/drivers/dri/trident/trident_context.c | 0 .../src/drivers/dri/trident/trident_context.h | 0 .../src/drivers/dri/trident/trident_dd.c | 0 .../src/drivers/dri/trident/trident_dri.h | 0 .../src/drivers/dri/trident/trident_lock.h | 0 .../src/drivers/dri/trident/trident_state.c | 0 .../src/drivers/dri/trident/trident_tris.c | 0 .../src/drivers/dri/trident/trident_vb.c | 0 .../mesa32/src/drivers/dri/unichrome/Makefile | 0 .../src/drivers/dri/unichrome/server/via.h | 0 .../drivers/dri/unichrome/server/via_dri.c | 0 .../drivers/dri/unichrome/server/via_dri.h | 0 .../drivers/dri/unichrome/server/via_driver.h | 0 .../drivers/dri/unichrome/server/via_priv.h | 0 .../drivers/dri/unichrome/server/via_regs.h | 0 .../src/drivers/dri/unichrome/via_3d_reg.h | 0 .../src/drivers/dri/unichrome/via_context.c | 0 .../src/drivers/dri/unichrome/via_context.h | 0 .../src/drivers/dri/unichrome/via_drmclient.h | 0 .../mesa32/src/drivers/dri/unichrome/via_fb.c | 0 .../mesa32/src/drivers/dri/unichrome/via_fb.h | 0 .../src/drivers/dri/unichrome/via_ioctl.c | 0 .../src/drivers/dri/unichrome/via_ioctl.h | 0 .../src/drivers/dri/unichrome/via_memcpy.c | 0 .../src/drivers/dri/unichrome/via_render.c | 0 .../src/drivers/dri/unichrome/via_screen.c | 0 .../src/drivers/dri/unichrome/via_screen.h | 0 .../src/drivers/dri/unichrome/via_span.c | 0 .../src/drivers/dri/unichrome/via_span.h | 0 .../src/drivers/dri/unichrome/via_state.c | 0 .../src/drivers/dri/unichrome/via_state.h | 0 .../src/drivers/dri/unichrome/via_tex.c | 0 .../src/drivers/dri/unichrome/via_tex.h | 0 .../drivers/dri/unichrome/via_texcombine.c | 0 .../src/drivers/dri/unichrome/via_tris.c | 0 .../src/drivers/dri/unichrome/via_tris.h | 0 .../mesa32/src/drivers/fbdev/glfbdev.c | 0 .../src/drivers/ggi/default/genkgi.conf.in | 0 .../src/drivers/ggi/default/genkgi_mode.c | 0 .../src/drivers/ggi/default/genkgi_visual.c | 0 .../mesa32/src/drivers/ggi/default/linear.c | 0 .../src/drivers/ggi/default/linear_15.c | 0 .../src/drivers/ggi/default/linear_16.c | 0 .../src/drivers/ggi/default/linear_24.c | 0 .../src/drivers/ggi/default/linear_32.c | 0 .../mesa32/src/drivers/ggi/default/linear_8.c | 0 .../mesa32/src/drivers/ggi/default/stubs.c | 0 .../src/drivers/ggi/display/fbdev.conf.in | 0 .../src/drivers/ggi/display/fbdev_mode.c | 0 .../src/drivers/ggi/display/fbdev_visual.c | 0 .../3rdparty/mesa32/src/drivers/ggi/ggimesa.c | 0 .../mesa32/src/drivers/ggi/ggimesa.conf.in | 0 .../src/drivers/ggi/include/ggi/mesa/debug.h | 0 .../ggi/include/ggi/mesa/display_fbdev.h | 0 .../drivers/ggi/include/ggi/mesa/ggimesa.h | 0 .../ggi/include/ggi/mesa/ggimesa_int.h | 0 .../3rdparty/mesa32/src/drivers/glide/fxapi.c | 0 .../3rdparty/mesa32/src/drivers/glide/fxdd.c | 0 .../mesa32/src/drivers/glide/fxddspan.c | 0 .../mesa32/src/drivers/glide/fxddtex.c | 0 .../3rdparty/mesa32/src/drivers/glide/fxdrv.h | 0 .../3rdparty/mesa32/src/drivers/glide/fxg.c | 0 .../3rdparty/mesa32/src/drivers/glide/fxg.h | 0 .../mesa32/src/drivers/glide/fxglidew.c | 0 .../mesa32/src/drivers/glide/fxglidew.h | 0 .../mesa32/src/drivers/glide/fxsetup.c | 0 .../mesa32/src/drivers/glide/fxsetup.h | 0 .../mesa32/src/drivers/glide/fxtexman.c | 0 .../mesa32/src/drivers/glide/fxtris.c | 0 .../3rdparty/mesa32/src/drivers/glide/fxvb.c | 0 .../mesa32/src/drivers/glide/fxvbtmp.h | 0 .../mesa32/src/drivers/osmesa/Makefile.win | 0 .../mesa32/src/drivers/osmesa/descrip.mms | 0 .../mesa32/src/drivers/osmesa/osmesa.c | 0 .../mesa32/src/drivers/osmesa/osmesa.def | 0 .../mesa32/src/drivers/svga/svgamesa.c | 0 .../mesa32/src/drivers/svga/svgamesa15.c | 0 .../mesa32/src/drivers/svga/svgamesa15.h | 0 .../mesa32/src/drivers/svga/svgamesa16.c | 0 .../mesa32/src/drivers/svga/svgamesa16.h | 0 .../mesa32/src/drivers/svga/svgamesa24.c | 0 .../mesa32/src/drivers/svga/svgamesa24.h | 0 .../mesa32/src/drivers/svga/svgamesa32.c | 0 .../mesa32/src/drivers/svga/svgamesa32.h | 0 .../mesa32/src/drivers/svga/svgamesa8.c | 0 .../mesa32/src/drivers/svga/svgamesa8.h | 0 .../mesa32/src/drivers/svga/svgapix.h | 0 .../src/drivers/windows/fx/fxopengl.def | 0 .../mesa32/src/drivers/windows/fx/fxwgl.c | 0 .../mesa32/src/drivers/windows/gdi/colors.h | 0 .../mesa32/src/drivers/windows/gdi/mesa.def | 0 .../mesa32/src/drivers/windows/gdi/wgl.c | 0 .../mesa32/src/drivers/windows/gdi/wmesa.c | 0 .../mesa32/src/drivers/windows/gdi/wmesadef.h | 0 .../src/drivers/windows/gldirect/ddlog.c | 0 .../src/drivers/windows/gldirect/ddlog.h | 0 .../src/drivers/windows/gldirect/dglcontext.c | 0 .../src/drivers/windows/gldirect/dglcontext.h | 0 .../src/drivers/windows/gldirect/dglglobals.c | 0 .../src/drivers/windows/gldirect/dglglobals.h | 0 .../src/drivers/windows/gldirect/dglmacros.h | 0 .../src/drivers/windows/gldirect/dglpf.c | 0 .../src/drivers/windows/gldirect/dglpf.h | 0 .../src/drivers/windows/gldirect/dglwgl.c | 0 .../src/drivers/windows/gldirect/dglwgl.h | 0 .../src/drivers/windows/gldirect/dll_main.c | 0 .../src/drivers/windows/gldirect/dllmain.h | 0 .../drivers/windows/gldirect/gld_debug_clip.c | 0 .../drivers/windows/gldirect/gld_debug_norm.c | 0 .../windows/gldirect/gld_debug_xform.c | 0 .../drivers/windows/gldirect/gld_dispatch.c | 0 .../src/drivers/windows/gldirect/gld_driver.c | 0 .../src/drivers/windows/gldirect/gld_driver.h | 0 .../src/drivers/windows/gldirect/gldlame8.c | 0 .../src/drivers/windows/gldirect/opengl32.def | 0 .../src/drivers/windows/gldirect/pixpack.h | 0 .../mesa32/src/drivers/windows/icd/icd.c | 0 .../mesa32/src/drivers/windows/icd/icdlist.h | 0 .../mesa32/src/drivers/windows/icd/mesa.def | 0 .../mesa32/src/drivers/x11/descrip.mms | 0 .../3rdparty/mesa32/src/drivers/x11/fakeglx.c | 0 .../3rdparty/mesa32/src/drivers/x11/glxapi.c | 0 .../3rdparty/mesa32/src/drivers/x11/glxapi.h | 0 .../mesa32/src/drivers/x11/glxheader.h | 0 .../3rdparty/mesa32/src/drivers/x11/realglx.c | 0 .../3rdparty/mesa32/src/drivers/x11/realglx.h | 0 .../3rdparty/mesa32/src/drivers/x11/sources | 0 .../3rdparty/mesa32/src/drivers/x11/xfonts.c | 0 .../3rdparty/mesa32/src/drivers/x11/xfonts.h | 0 .../3rdparty/mesa32/src/drivers/x11/xm_api.c | 0 .../mesa32/src/drivers/x11/xm_buffer.c | 0 .../3rdparty/mesa32/src/drivers/x11/xm_dd.c | 0 .../mesa32/src/drivers/x11/xm_glide.c | 0 .../mesa32/src/drivers/x11/xm_glide.h | 0 .../mesa32/src/drivers/x11/xm_image.c | 0 .../mesa32/src/drivers/x11/xm_image.h | 0 .../3rdparty/mesa32/src/drivers/x11/xm_line.c | 0 .../3rdparty/mesa32/src/drivers/x11/xm_span.c | 0 .../3rdparty/mesa32/src/drivers/x11/xm_tri.c | 0 .../3rdparty/mesa32/src/drivers/x11/xmesaP.h | 0 .../3rdparty/mesa32/src/glapi/descrip.mms | 0 .../3rdparty/mesa32/src/glapi/dispatch.h | 0 .../3rdparty/mesa32/src/glapi/glapi.c | 0 .../3rdparty/mesa32/src/glapi/glapi.h | 0 .../3rdparty/mesa32/src/glapi/glapioffsets.h | 0 .../3rdparty/mesa32/src/glapi/glapitable.h | 0 .../3rdparty/mesa32/src/glapi/glapitemp.h | 0 .../3rdparty/mesa32/src/glapi/glprocs.h | 0 .../3rdparty/mesa32/src/glapi/glthread.c | 0 .../3rdparty/mesa32/src/glapi/glthread.h | 0 .../3rdparty/mesa32/src/glapi/sources | 0 .../3rdparty/mesa32/src/main/accum.c | 0 .../3rdparty/mesa32/src/main/accum.h | 0 .../3rdparty/mesa32/src/main/api_arrayelt.c | 0 .../3rdparty/mesa32/src/main/api_arrayelt.h | 0 .../3rdparty/mesa32/src/main/api_eval.h | 0 .../3rdparty/mesa32/src/main/api_loopback.c | 0 .../3rdparty/mesa32/src/main/api_loopback.h | 0 .../3rdparty/mesa32/src/main/api_noop.c | 0 .../3rdparty/mesa32/src/main/api_noop.h | 0 .../3rdparty/mesa32/src/main/api_validate.c | 0 .../3rdparty/mesa32/src/main/api_validate.h | 0 .../3rdparty/mesa32/src/main/arrayobj.c | 0 .../3rdparty/mesa32/src/main/arrayobj.h | 0 .../3rdparty/mesa32/src/main/attrib.c | 0 .../3rdparty/mesa32/src/main/attrib.h | 0 .../3rdparty/mesa32/src/main/bitset.h | 0 .../3rdparty/mesa32/src/main/blend.c | 0 .../3rdparty/mesa32/src/main/blend.h | 0 .../3rdparty/mesa32/src/main/bufferobj.c | 0 .../3rdparty/mesa32/src/main/bufferobj.h | 0 .../3rdparty/mesa32/src/main/buffers.c | 0 .../3rdparty/mesa32/src/main/buffers.h | 0 .../3rdparty/mesa32/src/main/clip.c | 0 .../3rdparty/mesa32/src/main/clip.h | 0 .../3rdparty/mesa32/src/main/colormac.h | 0 .../3rdparty/mesa32/src/main/colortab.c | 0 .../3rdparty/mesa32/src/main/colortab.h | 0 .../3rdparty/mesa32/src/main/config.h | 0 .../3rdparty/mesa32/src/main/context.c | 0 .../3rdparty/mesa32/src/main/context.h | 0 .../3rdparty/mesa32/src/main/convolve.c | 0 .../3rdparty/mesa32/src/main/convolve.h | 0 .../dll => dll}/3rdparty/mesa32/src/main/dd.h | 0 .../3rdparty/mesa32/src/main/debug.c | 0 .../3rdparty/mesa32/src/main/debug.h | 0 .../3rdparty/mesa32/src/main/depth.c | 0 .../3rdparty/mesa32/src/main/depth.h | 0 .../3rdparty/mesa32/src/main/depthstencil.c | 0 .../3rdparty/mesa32/src/main/depthstencil.h | 0 .../3rdparty/mesa32/src/main/descrip.mms | 0 .../3rdparty/mesa32/src/main/dispatch.c | 0 .../3rdparty/mesa32/src/main/dlist.c | 0 .../3rdparty/mesa32/src/main/dlist.h | 0 .../3rdparty/mesa32/src/main/drawpix.c | 0 .../3rdparty/mesa32/src/main/drawpix.h | 0 .../3rdparty/mesa32/src/main/enable.c | 0 .../3rdparty/mesa32/src/main/enable.h | 0 .../3rdparty/mesa32/src/main/enums.c | 0 .../3rdparty/mesa32/src/main/enums.h | 0 .../3rdparty/mesa32/src/main/eval.c | 0 .../3rdparty/mesa32/src/main/eval.h | 0 .../3rdparty/mesa32/src/main/execmem.c | 0 .../3rdparty/mesa32/src/main/extensions.c | 0 .../3rdparty/mesa32/src/main/extensions.h | 0 .../3rdparty/mesa32/src/main/fbobject.c | 0 .../3rdparty/mesa32/src/main/fbobject.h | 0 .../3rdparty/mesa32/src/main/feedback.c | 0 .../3rdparty/mesa32/src/main/feedback.h | 0 .../3rdparty/mesa32/src/main/fog.c | 0 .../3rdparty/mesa32/src/main/fog.h | 0 .../3rdparty/mesa32/src/main/framebuffer.c | 0 .../3rdparty/mesa32/src/main/framebuffer.h | 0 .../3rdparty/mesa32/src/main/get.c | 0 .../3rdparty/mesa32/src/main/get.h | 0 .../3rdparty/mesa32/src/main/getstring.c | 0 .../3rdparty/mesa32/src/main/glheader.h | 0 .../3rdparty/mesa32/src/main/hash.c | 0 .../3rdparty/mesa32/src/main/hash.h | 0 .../3rdparty/mesa32/src/main/hint.c | 0 .../3rdparty/mesa32/src/main/hint.h | 0 .../3rdparty/mesa32/src/main/histogram.c | 0 .../3rdparty/mesa32/src/main/histogram.h | 0 .../3rdparty/mesa32/src/main/image.c | 0 .../3rdparty/mesa32/src/main/image.h | 0 .../3rdparty/mesa32/src/main/imports.c | 0 .../3rdparty/mesa32/src/main/imports.h | 0 .../3rdparty/mesa32/src/main/light.c | 0 .../3rdparty/mesa32/src/main/light.h | 0 .../3rdparty/mesa32/src/main/lines.c | 0 .../3rdparty/mesa32/src/main/lines.h | 0 .../3rdparty/mesa32/src/main/macros.h | 0 .../3rdparty/mesa32/src/main/matrix.c | 0 .../3rdparty/mesa32/src/main/matrix.h | 0 .../3rdparty/mesa32/src/main/mipmap.c | 0 .../3rdparty/mesa32/src/main/mipmap.h | 0 .../dll => dll}/3rdparty/mesa32/src/main/mm.c | 0 .../dll => dll}/3rdparty/mesa32/src/main/mm.h | 0 .../3rdparty/mesa32/src/main/mtypes.h | 0 .../3rdparty/mesa32/src/main/pixel.c | 0 .../3rdparty/mesa32/src/main/pixel.h | 0 .../3rdparty/mesa32/src/main/points.c | 0 .../3rdparty/mesa32/src/main/points.h | 0 .../3rdparty/mesa32/src/main/polygon.c | 0 .../3rdparty/mesa32/src/main/polygon.h | 0 .../3rdparty/mesa32/src/main/queryobj.c | 0 .../3rdparty/mesa32/src/main/queryobj.h | 0 .../3rdparty/mesa32/src/main/rastpos.c | 0 .../3rdparty/mesa32/src/main/rastpos.h | 0 .../3rdparty/mesa32/src/main/rbadaptors.c | 0 .../3rdparty/mesa32/src/main/rbadaptors.h | 0 .../3rdparty/mesa32/src/main/renderbuffer.c | 0 .../3rdparty/mesa32/src/main/renderbuffer.h | 0 .../3rdparty/mesa32/src/main/shaders.c | 0 .../3rdparty/mesa32/src/main/shaders.h | 0 .../3rdparty/mesa32/src/main/simple_list.h | 0 .../3rdparty/mesa32/src/main/sources | 0 .../3rdparty/mesa32/src/main/state.c | 0 .../3rdparty/mesa32/src/main/state.h | 0 .../3rdparty/mesa32/src/main/stencil.c | 0 .../3rdparty/mesa32/src/main/stencil.h | 0 .../3rdparty/mesa32/src/main/texcompress.c | 0 .../3rdparty/mesa32/src/main/texcompress.h | 0 .../mesa32/src/main/texcompress_fxt1.c | 0 .../mesa32/src/main/texcompress_s3tc.c | 0 .../3rdparty/mesa32/src/main/texenvprogram.c | 0 .../3rdparty/mesa32/src/main/texenvprogram.h | 0 .../3rdparty/mesa32/src/main/texformat.c | 0 .../3rdparty/mesa32/src/main/texformat.h | 0 .../3rdparty/mesa32/src/main/texformat_tmp.h | 0 .../3rdparty/mesa32/src/main/teximage.c | 0 .../3rdparty/mesa32/src/main/teximage.h | 0 .../3rdparty/mesa32/src/main/texobj.c | 0 .../3rdparty/mesa32/src/main/texobj.h | 0 .../3rdparty/mesa32/src/main/texrender.c | 0 .../3rdparty/mesa32/src/main/texrender.h | 0 .../3rdparty/mesa32/src/main/texstate.c | 0 .../3rdparty/mesa32/src/main/texstate.h | 0 .../3rdparty/mesa32/src/main/texstore.c | 0 .../3rdparty/mesa32/src/main/texstore.h | 0 .../3rdparty/mesa32/src/main/varray.c | 0 .../3rdparty/mesa32/src/main/varray.h | 0 .../3rdparty/mesa32/src/main/version.h | 0 .../3rdparty/mesa32/src/main/vsnprintf.c | 0 .../3rdparty/mesa32/src/main/vtxfmt.c | 0 .../3rdparty/mesa32/src/main/vtxfmt.h | 0 .../3rdparty/mesa32/src/main/vtxfmt_tmp.h | 0 .../3rdparty/mesa32/src/math/descrip.mms | 0 .../3rdparty/mesa32/src/math/m_clip_tmp.h | 0 .../3rdparty/mesa32/src/math/m_copy_tmp.h | 0 .../3rdparty/mesa32/src/math/m_debug.h | 0 .../3rdparty/mesa32/src/math/m_debug_clip.c | 0 .../3rdparty/mesa32/src/math/m_debug_norm.c | 0 .../3rdparty/mesa32/src/math/m_debug_util.h | 0 .../3rdparty/mesa32/src/math/m_debug_xform.c | 0 .../3rdparty/mesa32/src/math/m_dotprod_tmp.h | 0 .../3rdparty/mesa32/src/math/m_eval.c | 0 .../3rdparty/mesa32/src/math/m_eval.h | 0 .../3rdparty/mesa32/src/math/m_matrix.c | 0 .../3rdparty/mesa32/src/math/m_matrix.h | 0 .../3rdparty/mesa32/src/math/m_norm_tmp.h | 0 .../3rdparty/mesa32/src/math/m_trans_tmp.h | 0 .../3rdparty/mesa32/src/math/m_translate.c | 0 .../3rdparty/mesa32/src/math/m_translate.h | 0 .../3rdparty/mesa32/src/math/m_vector.c | 0 .../3rdparty/mesa32/src/math/m_vector.h | 0 .../3rdparty/mesa32/src/math/m_xform.c | 0 .../3rdparty/mesa32/src/math/m_xform.h | 0 .../3rdparty/mesa32/src/math/m_xform_tmp.h | 0 .../3rdparty/mesa32/src/math/mathmod.h | 0 .../3rdparty/mesa32/src/math/sources | 0 .../3rdparty/mesa32/src/ppc/common_ppc.c | 0 .../mesa32/src/ppc/common_ppc_features.h | 0 .../3rdparty/mesa32/src/shader/arbprogparse.c | 0 .../3rdparty/mesa32/src/shader/arbprogparse.h | 0 .../3rdparty/mesa32/src/shader/arbprogram.c | 0 .../3rdparty/mesa32/src/shader/arbprogram.h | 0 .../mesa32/src/shader/arbprogram_syn.h | 0 .../mesa32/src/shader/atifragshader.c | 0 .../mesa32/src/shader/atifragshader.h | 0 .../3rdparty/mesa32/src/shader/descrip.mms | 0 .../mesa32/src/shader/grammar/descrip.mms | 0 .../mesa32/src/shader/grammar/grammar.c | 0 .../mesa32/src/shader/grammar/grammar.h | 0 .../mesa32/src/shader/grammar/grammar_crt.c | 0 .../mesa32/src/shader/grammar/grammar_crt.h | 0 .../mesa32/src/shader/grammar/grammar_mesa.c | 0 .../mesa32/src/shader/grammar/grammar_mesa.h | 0 .../mesa32/src/shader/grammar/grammar_syn.h | 0 .../mesa32/src/shader/grammar/sources | 0 .../3rdparty/mesa32/src/shader/nvfragparse.c | 0 .../3rdparty/mesa32/src/shader/nvfragparse.h | 0 .../3rdparty/mesa32/src/shader/nvprogram.c | 0 .../3rdparty/mesa32/src/shader/nvprogram.h | 0 .../3rdparty/mesa32/src/shader/nvvertparse.c | 0 .../3rdparty/mesa32/src/shader/nvvertparse.h | 0 .../3rdparty/mesa32/src/shader/prog_debug.c | 0 .../3rdparty/mesa32/src/shader/prog_debug.h | 0 .../3rdparty/mesa32/src/shader/prog_execute.c | 0 .../3rdparty/mesa32/src/shader/prog_execute.h | 0 .../mesa32/src/shader/prog_instruction.c | 0 .../mesa32/src/shader/prog_instruction.h | 0 .../mesa32/src/shader/prog_parameter.c | 0 .../mesa32/src/shader/prog_parameter.h | 0 .../3rdparty/mesa32/src/shader/prog_print.c | 0 .../3rdparty/mesa32/src/shader/prog_print.h | 0 .../mesa32/src/shader/prog_statevars.c | 0 .../mesa32/src/shader/prog_statevars.h | 0 .../3rdparty/mesa32/src/shader/prog_uniform.c | 0 .../3rdparty/mesa32/src/shader/prog_uniform.h | 0 .../3rdparty/mesa32/src/shader/program.c | 0 .../3rdparty/mesa32/src/shader/program.h | 0 .../3rdparty/mesa32/src/shader/programopt.c | 0 .../3rdparty/mesa32/src/shader/programopt.h | 0 .../3rdparty/mesa32/src/shader/shader_api.c | 0 .../3rdparty/mesa32/src/shader/shader_api.h | 0 .../mesa32/src/shader/slang/descrip.mms | 0 .../mesa32/src/shader/slang/library/Makefile | 0 .../src/shader/slang/library/gc_to_bin.c | 0 .../shader/slang/library/slang_120_core.gc | 0 .../shader/slang/library/slang_120_core_gc.h | 0 .../slang/library/slang_builtin_120_common.gc | 0 .../library/slang_builtin_120_common_gc.h | 0 .../library/slang_builtin_120_fragment.gc | 0 .../library/slang_builtin_120_fragment_gc.h | 0 .../slang/library/slang_common_builtin.gc | 0 .../slang/library/slang_common_builtin_gc.h | 0 .../src/shader/slang/library/slang_core.gc | 0 .../src/shader/slang/library/slang_core_gc.h | 0 .../slang/library/slang_fragment_builtin.gc | 0 .../slang/library/slang_fragment_builtin_gc.h | 0 .../slang/library/slang_pp_directives.syn | 0 .../slang/library/slang_pp_directives_syn.h | 0 .../slang/library/slang_pp_expression.syn | 0 .../slang/library/slang_pp_expression_syn.h | 0 .../shader/slang/library/slang_pp_version.syn | 0 .../slang/library/slang_pp_version_syn.h | 0 .../src/shader/slang/library/slang_shader.syn | 0 .../shader/slang/library/slang_shader_syn.h | 0 .../shader/slang/library/slang_version.syn | 0 .../shader/slang/library/slang_version_syn.h | 0 .../slang/library/slang_vertex_builtin.gc | 0 .../slang/library/slang_vertex_builtin_gc.h | 0 .../src/shader/slang/library/syn_to_c.c | 0 .../mesa32/src/shader/slang/slang_builtin.c | 0 .../mesa32/src/shader/slang/slang_builtin.h | 0 .../mesa32/src/shader/slang/slang_codegen.c | 0 .../mesa32/src/shader/slang/slang_codegen.h | 0 .../mesa32/src/shader/slang/slang_compile.c | 0 .../mesa32/src/shader/slang/slang_compile.h | 0 .../src/shader/slang/slang_compile_function.c | 0 .../src/shader/slang/slang_compile_function.h | 0 .../shader/slang/slang_compile_operation.c | 0 .../shader/slang/slang_compile_operation.h | 0 .../src/shader/slang/slang_compile_struct.c | 0 .../src/shader/slang/slang_compile_struct.h | 0 .../src/shader/slang/slang_compile_variable.c | 0 .../src/shader/slang/slang_compile_variable.h | 0 .../mesa32/src/shader/slang/slang_emit.c | 0 .../mesa32/src/shader/slang/slang_emit.h | 0 .../mesa32/src/shader/slang/slang_ir.c | 0 .../mesa32/src/shader/slang/slang_ir.h | 0 .../mesa32/src/shader/slang/slang_label.c | 0 .../mesa32/src/shader/slang/slang_label.h | 0 .../src/shader/slang/slang_library_noise.c | 0 .../src/shader/slang/slang_library_noise.h | 0 .../mesa32/src/shader/slang/slang_link.c | 0 .../mesa32/src/shader/slang/slang_link.h | 0 .../mesa32/src/shader/slang/slang_log.c | 0 .../mesa32/src/shader/slang/slang_log.h | 0 .../mesa32/src/shader/slang/slang_mem.c | 0 .../mesa32/src/shader/slang/slang_mem.h | 0 .../src/shader/slang/slang_preprocess.c | 0 .../src/shader/slang/slang_preprocess.h | 0 .../mesa32/src/shader/slang/slang_print.c | 0 .../mesa32/src/shader/slang/slang_print.h | 0 .../mesa32/src/shader/slang/slang_simplify.c | 0 .../mesa32/src/shader/slang/slang_simplify.h | 0 .../mesa32/src/shader/slang/slang_storage.c | 0 .../mesa32/src/shader/slang/slang_storage.h | 0 .../mesa32/src/shader/slang/slang_typeinfo.c | 0 .../mesa32/src/shader/slang/slang_typeinfo.h | 0 .../mesa32/src/shader/slang/slang_utility.c | 0 .../mesa32/src/shader/slang/slang_utility.h | 0 .../mesa32/src/shader/slang/slang_vartable.c | 0 .../mesa32/src/shader/slang/slang_vartable.h | 0 .../3rdparty/mesa32/src/shader/slang/sources | 0 .../3rdparty/mesa32/src/shader/sources | 0 .../dll => dll}/3rdparty/mesa32/src/sources | 0 .../3rdparty/mesa32/src/sparc/clip.S | 0 .../3rdparty/mesa32/src/sparc/glapi_sparc.S | 0 .../3rdparty/mesa32/src/sparc/norm.S | 0 .../3rdparty/mesa32/src/sparc/sparc.c | 0 .../3rdparty/mesa32/src/sparc/sparc.h | 0 .../3rdparty/mesa32/src/sparc/sparc_matrix.h | 0 .../3rdparty/mesa32/src/sparc/xform.S | 0 .../3rdparty/mesa32/src/swrast/descrip.mms | 0 .../3rdparty/mesa32/src/swrast/s_aaline.c | 0 .../3rdparty/mesa32/src/swrast/s_aaline.h | 0 .../3rdparty/mesa32/src/swrast/s_aalinetemp.h | 0 .../3rdparty/mesa32/src/swrast/s_aatriangle.c | 0 .../3rdparty/mesa32/src/swrast/s_aatriangle.h | 0 .../3rdparty/mesa32/src/swrast/s_aatritemp.h | 0 .../3rdparty/mesa32/src/swrast/s_accum.c | 0 .../3rdparty/mesa32/src/swrast/s_accum.h | 0 .../3rdparty/mesa32/src/swrast/s_alpha.c | 0 .../3rdparty/mesa32/src/swrast/s_alpha.h | 0 .../mesa32/src/swrast/s_atifragshader.c | 0 .../mesa32/src/swrast/s_atifragshader.h | 0 .../3rdparty/mesa32/src/swrast/s_bitmap.c | 0 .../3rdparty/mesa32/src/swrast/s_blend.c | 0 .../3rdparty/mesa32/src/swrast/s_blend.h | 0 .../3rdparty/mesa32/src/swrast/s_blit.c | 0 .../3rdparty/mesa32/src/swrast/s_buffers.c | 0 .../3rdparty/mesa32/src/swrast/s_context.c | 0 .../3rdparty/mesa32/src/swrast/s_context.h | 0 .../3rdparty/mesa32/src/swrast/s_copypix.c | 0 .../3rdparty/mesa32/src/swrast/s_depth.c | 0 .../3rdparty/mesa32/src/swrast/s_depth.h | 0 .../3rdparty/mesa32/src/swrast/s_drawpix.c | 0 .../3rdparty/mesa32/src/swrast/s_drawpix.h | 0 .../3rdparty/mesa32/src/swrast/s_feedback.c | 0 .../3rdparty/mesa32/src/swrast/s_feedback.h | 0 .../3rdparty/mesa32/src/swrast/s_fog.c | 0 .../3rdparty/mesa32/src/swrast/s_fog.h | 0 .../3rdparty/mesa32/src/swrast/s_fragprog.c | 0 .../3rdparty/mesa32/src/swrast/s_fragprog.h | 0 .../3rdparty/mesa32/src/swrast/s_imaging.c | 0 .../3rdparty/mesa32/src/swrast/s_lines.c | 0 .../3rdparty/mesa32/src/swrast/s_lines.h | 0 .../3rdparty/mesa32/src/swrast/s_linetemp.h | 0 .../3rdparty/mesa32/src/swrast/s_logic.c | 0 .../3rdparty/mesa32/src/swrast/s_logic.h | 0 .../3rdparty/mesa32/src/swrast/s_masking.c | 0 .../3rdparty/mesa32/src/swrast/s_masking.h | 0 .../3rdparty/mesa32/src/swrast/s_points.c | 0 .../3rdparty/mesa32/src/swrast/s_points.h | 0 .../3rdparty/mesa32/src/swrast/s_pointtemp.h | 0 .../3rdparty/mesa32/src/swrast/s_readpix.c | 0 .../3rdparty/mesa32/src/swrast/s_span.c | 0 .../3rdparty/mesa32/src/swrast/s_span.h | 0 .../3rdparty/mesa32/src/swrast/s_spantemp.h | 0 .../3rdparty/mesa32/src/swrast/s_stencil.c | 0 .../3rdparty/mesa32/src/swrast/s_stencil.h | 0 .../3rdparty/mesa32/src/swrast/s_texcombine.c | 0 .../3rdparty/mesa32/src/swrast/s_texcombine.h | 0 .../3rdparty/mesa32/src/swrast/s_texfilter.c | 0 .../3rdparty/mesa32/src/swrast/s_texfilter.h | 0 .../3rdparty/mesa32/src/swrast/s_texstore.c | 0 .../3rdparty/mesa32/src/swrast/s_triangle.c | 0 .../3rdparty/mesa32/src/swrast/s_triangle.h | 0 .../3rdparty/mesa32/src/swrast/s_trispan.h | 0 .../3rdparty/mesa32/src/swrast/s_tritemp.h | 0 .../3rdparty/mesa32/src/swrast/s_zoom.c | 0 .../3rdparty/mesa32/src/swrast/s_zoom.h | 0 .../3rdparty/mesa32/src/swrast/sources | 0 .../3rdparty/mesa32/src/swrast/swrast.h | 0 .../mesa32/src/swrast_setup/descrip.mms | 0 .../3rdparty/mesa32/src/swrast_setup/sources | 0 .../mesa32/src/swrast_setup/ss_context.c | 0 .../mesa32/src/swrast_setup/ss_context.h | 0 .../mesa32/src/swrast_setup/ss_triangle.c | 0 .../mesa32/src/swrast_setup/ss_triangle.h | 0 .../mesa32/src/swrast_setup/ss_tritmp.h | 0 .../3rdparty/mesa32/src/swrast_setup/ss_vb.h | 0 .../mesa32/src/swrast_setup/swrast_setup.h | 0 .../3rdparty/mesa32/src/tnl/descrip.mms | 0 .../3rdparty/mesa32/src/tnl/sources | 0 .../3rdparty/mesa32/src/tnl/t_context.c | 0 .../3rdparty/mesa32/src/tnl/t_context.h | 0 .../3rdparty/mesa32/src/tnl/t_draw.c | 0 .../3rdparty/mesa32/src/tnl/t_pipeline.c | 0 .../3rdparty/mesa32/src/tnl/t_pipeline.h | 0 .../3rdparty/mesa32/src/tnl/t_vb_cliptmp.h | 0 .../3rdparty/mesa32/src/tnl/t_vb_cull.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_fog.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_light.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_lighttmp.h | 0 .../3rdparty/mesa32/src/tnl/t_vb_normals.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_points.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_program.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_render.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_rendertmp.h | 0 .../3rdparty/mesa32/src/tnl/t_vb_texgen.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_texmat.c | 0 .../3rdparty/mesa32/src/tnl/t_vb_vertex.c | 0 .../3rdparty/mesa32/src/tnl/t_vertex.c | 0 .../3rdparty/mesa32/src/tnl/t_vertex.h | 0 .../mesa32/src/tnl/t_vertex_generic.c | 0 .../3rdparty/mesa32/src/tnl/t_vertex_sse.c | 0 .../3rdparty/mesa32/src/tnl/t_vp_build.c | 0 .../3rdparty/mesa32/src/tnl/t_vp_build.h | 0 .../dll => dll}/3rdparty/mesa32/src/tnl/tnl.h | 0 .../3rdparty/mesa32/src/tnl_dd/imm/NOTES.imm | 0 .../mesa32/src/tnl_dd/imm/t_dd_imm_capi.h | 0 .../mesa32/src/tnl_dd/imm/t_dd_imm_napi.h | 0 .../mesa32/src/tnl_dd/imm/t_dd_imm_primtmp.h | 0 .../mesa32/src/tnl_dd/imm/t_dd_imm_tapi.h | 0 .../mesa32/src/tnl_dd/imm/t_dd_imm_vapi.h | 0 .../mesa32/src/tnl_dd/imm/t_dd_imm_vb.c | 0 .../mesa32/src/tnl_dd/imm/t_dd_imm_vbtmp.h | 0 .../3rdparty/mesa32/src/tnl_dd/t_dd.c | 0 .../3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp.h | 0 .../3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp2.h | 0 .../mesa32/src/tnl_dd/t_dd_rendertmp.h | 0 .../3rdparty/mesa32/src/tnl_dd/t_dd_triemit.h | 0 .../3rdparty/mesa32/src/tnl_dd/t_dd_tritmp.h | 0 .../mesa32/src/tnl_dd/t_dd_unfilled.h | 0 .../3rdparty/mesa32/src/tnl_dd/t_dd_vb.c | 0 .../3rdparty/mesa32/src/tnl_dd/t_dd_vbtmp.h | 0 .../3rdparty/mesa32/src/tnl_dd/t_dd_vertex.h | 0 .../3rdparty/mesa32/src/vbo/descrip.mms | 0 .../dll => dll}/3rdparty/mesa32/src/vbo/vbo.h | 0 .../3rdparty/mesa32/src/vbo/vbo_attrib.h | 0 .../3rdparty/mesa32/src/vbo/vbo_attrib_tmp.h | 0 .../3rdparty/mesa32/src/vbo/vbo_context.c | 0 .../3rdparty/mesa32/src/vbo/vbo_context.h | 0 .../3rdparty/mesa32/src/vbo/vbo_exec.c | 0 .../3rdparty/mesa32/src/vbo/vbo_exec.h | 0 .../3rdparty/mesa32/src/vbo/vbo_exec_api.c | 0 .../3rdparty/mesa32/src/vbo/vbo_exec_array.c | 0 .../3rdparty/mesa32/src/vbo/vbo_exec_draw.c | 0 .../3rdparty/mesa32/src/vbo/vbo_exec_eval.c | 0 .../3rdparty/mesa32/src/vbo/vbo_rebase.c | 0 .../3rdparty/mesa32/src/vbo/vbo_save.c | 0 .../3rdparty/mesa32/src/vbo/vbo_save.h | 0 .../3rdparty/mesa32/src/vbo/vbo_save_api.c | 0 .../3rdparty/mesa32/src/vbo/vbo_save_draw.c | 0 .../mesa32/src/vbo/vbo_save_loopback.c | 0 .../3rdparty/mesa32/src/vbo/vbo_split.c | 0 .../3rdparty/mesa32/src/vbo/vbo_split.h | 0 .../3rdparty/mesa32/src/vbo/vbo_split_copy.c | 0 .../mesa32/src/vbo/vbo_split_inplace.c | 0 .../3rdparty/mesa32/src/x86-64/Makefile | 0 .../3rdparty/mesa32/src/x86-64/glapi_x86-64.S | 0 .../3rdparty/mesa32/src/x86-64/matypes.h | 0 .../3rdparty/mesa32/src/x86-64/x86-64.c | 0 .../3rdparty/mesa32/src/x86-64/x86-64.h | 0 .../3rdparty/mesa32/src/x86-64/xform4.S | 0 .../3rdparty/mesa32/src/x86/3dnow.c | 0 .../3rdparty/mesa32/src/x86/3dnow.h | 0 .../3rdparty/mesa32/src/x86/3dnow_normal.S | 0 .../3rdparty/mesa32/src/x86/3dnow_xform1.S | 0 .../3rdparty/mesa32/src/x86/3dnow_xform2.S | 0 .../3rdparty/mesa32/src/x86/3dnow_xform3.S | 0 .../3rdparty/mesa32/src/x86/3dnow_xform4.S | 0 .../3rdparty/mesa32/src/x86/Makefile | 0 .../3rdparty/mesa32/src/x86/assyntax.h | 0 .../3rdparty/mesa32/src/x86/clip_args.h | 0 .../3rdparty/mesa32/src/x86/common_x86.c | 0 .../3rdparty/mesa32/src/x86/common_x86_asm.S | 0 .../3rdparty/mesa32/src/x86/common_x86_asm.h | 0 .../mesa32/src/x86/common_x86_features.h | 0 .../mesa32/src/x86/common_x86_macros.h | 0 .../3rdparty/mesa32/src/x86/gen_matypes.c | 0 .../3rdparty/mesa32/src/x86/glapi_x86.S | 0 .../3rdparty/mesa32/src/x86/matypes.h | 0 .../dll => dll}/3rdparty/mesa32/src/x86/mmx.h | 0 .../3rdparty/mesa32/src/x86/mmx_blend.S | 0 .../3rdparty/mesa32/src/x86/mmx_blendtmp.h | 0 .../3rdparty/mesa32/src/x86/norm_args.h | 0 .../mesa32/src/x86/read_rgba_span_x86.S | 0 .../mesa32/src/x86/read_rgba_span_x86.h | 0 .../3rdparty/mesa32/src/x86/rtasm/x86sse.c | 0 .../3rdparty/mesa32/src/x86/rtasm/x86sse.h | 0 .../dll => dll}/3rdparty/mesa32/src/x86/sse.c | 0 .../dll => dll}/3rdparty/mesa32/src/x86/sse.h | 0 .../3rdparty/mesa32/src/x86/sse_normal.S | 0 .../3rdparty/mesa32/src/x86/sse_xform1.S | 0 .../3rdparty/mesa32/src/x86/sse_xform2.S | 0 .../3rdparty/mesa32/src/x86/sse_xform3.S | 0 .../3rdparty/mesa32/src/x86/sse_xform4.S | 0 .../dll => dll}/3rdparty/mesa32/src/x86/x86.c | 0 .../dll => dll}/3rdparty/mesa32/src/x86/x86.h | 0 .../3rdparty/mesa32/src/x86/x86_cliptest.S | 0 .../3rdparty/mesa32/src/x86/x86_xform2.S | 0 .../3rdparty/mesa32/src/x86/x86_xform3.S | 0 .../3rdparty/mesa32/src/x86/x86_xform4.S | 0 .../3rdparty/mesa32/src/x86/xform_args.h | 0 {reactos/dll => dll}/Doxyfile | 0 {reactos/dll => dll}/cpl/access/access.c | 0 {reactos/dll => dll}/cpl/access/access.h | 0 {reactos/dll => dll}/cpl/access/access.rbuild | 0 {reactos/dll => dll}/cpl/access/access.rc | 0 {reactos/dll => dll}/cpl/access/access.spec | 0 {reactos/dll => dll}/cpl/access/display.c | 0 {reactos/dll => dll}/cpl/access/general.c | 0 {reactos/dll => dll}/cpl/access/keyboard.c | 0 {reactos/dll => dll}/cpl/access/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/access/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/access/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/access/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/access/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/access/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/access/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/access/lang/hu-HU.rc | 0 {reactos/dll => dll}/cpl/access/lang/id-ID.rc | 0 {reactos/dll => dll}/cpl/access/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/access/lang/ja-JP.rc | 0 {reactos/dll => dll}/cpl/access/lang/nl-NL.rc | 0 {reactos/dll => dll}/cpl/access/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/access/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/access/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/access/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/access/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/access/lang/zh-CN.rc | 0 {reactos/dll => dll}/cpl/access/mouse.c | 0 {reactos/dll => dll}/cpl/access/resource.h | 0 .../cpl/access/resources/applet.ico | Bin {reactos/dll => dll}/cpl/access/rsrc.rc | 0 {reactos/dll => dll}/cpl/access/sound.c | 0 {reactos/dll => dll}/cpl/appwiz-new/appwiz.c | 0 .../dll => dll}/cpl/appwiz-new/appwiz.def | 0 {reactos/dll => dll}/cpl/appwiz-new/appwiz.h | 0 .../dll => dll}/cpl/appwiz-new/appwiz.rbuild | 0 {reactos/dll => dll}/cpl/appwiz-new/appwiz.rc | 0 .../dll => dll}/cpl/appwiz-new/createlink.c | 0 .../dll => dll}/cpl/appwiz-new/lang/bg-BG.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/cs-CZ.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/de-DE.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/en-US.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/es-ES.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/fr-FR.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/it-IT.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/no-NO.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/pl-PL.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/ru-RU.rc | 0 .../dll => dll}/cpl/appwiz-new/lang/uk-UA.rc | 0 .../dll => dll}/cpl/appwiz-new/resource.h | 0 .../cpl/appwiz-new/resources/1501.ico | Bin .../cpl/appwiz-new/resources/1502.ico | Bin .../cpl/appwiz-new/resources/1503.ico | Bin .../cpl/appwiz-new/resources/applet.ico | Bin .../cpl/appwiz-new/resources/icon.bmp | Bin .../cpl/appwiz-new/resources/search.ico | Bin .../cpl/appwiz-new/resources/select.bmp | Bin .../cpl/appwiz-new/resources/underline.bmp | Bin .../cpl/appwiz-new/resources/watermark.bmp | Bin {reactos/dll => dll}/cpl/appwiz-new/rsrc.rc | 0 {reactos/dll => dll}/cpl/appwiz/add.c | 0 {reactos/dll => dll}/cpl/appwiz/appwiz.c | 0 {reactos/dll => dll}/cpl/appwiz/appwiz.def | 0 {reactos/dll => dll}/cpl/appwiz/appwiz.dsp | 0 {reactos/dll => dll}/cpl/appwiz/appwiz.dsw | 0 {reactos/dll => dll}/cpl/appwiz/appwiz.h | 0 {reactos/dll => dll}/cpl/appwiz/appwiz.rbuild | 0 {reactos/dll => dll}/cpl/appwiz/appwiz.rc | 0 {reactos/dll => dll}/cpl/appwiz/createlink.c | 0 {reactos/dll => dll}/cpl/appwiz/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/appwiz/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/appwiz/remove.c | 0 {reactos/dll => dll}/cpl/appwiz/resource.h | 0 .../dll => dll}/cpl/appwiz/resources/1501.ico | Bin .../dll => dll}/cpl/appwiz/resources/1502.ico | Bin .../dll => dll}/cpl/appwiz/resources/1503.ico | Bin .../dll => dll}/cpl/appwiz/resources/1504.ico | Bin .../dll => dll}/cpl/appwiz/resources/1505.ico | Bin .../cpl/appwiz/resources/applet.ico | Bin .../cpl/appwiz/resources/reactos.ico | Bin .../cpl/appwiz/resources/updates.ico | Bin .../cpl/appwiz/resources/watermark.bmp | Bin {reactos/dll => dll}/cpl/appwiz/rossetup.c | 0 {reactos/dll => dll}/cpl/appwiz/rsrc.rc | 0 {reactos/dll => dll}/cpl/appwiz/updates.c | 0 {reactos/dll => dll}/cpl/console/colors.c | 0 {reactos/dll => dll}/cpl/console/console.c | 0 {reactos/dll => dll}/cpl/console/console.h | 0 .../dll => dll}/cpl/console/console.rbuild | 0 {reactos/dll => dll}/cpl/console/console.rc | 0 {reactos/dll => dll}/cpl/console/console.spec | 0 {reactos/dll => dll}/cpl/console/font.c | 0 .../dll => dll}/cpl/console/lang/cs-CZ.rc | 0 .../dll => dll}/cpl/console/lang/de-DE.rc | 0 .../dll => dll}/cpl/console/lang/en-US.rc | 0 .../dll => dll}/cpl/console/lang/es-ES.rc | 0 .../dll => dll}/cpl/console/lang/id-ID.rc | 0 .../dll => dll}/cpl/console/lang/it-IT.rc | 0 .../dll => dll}/cpl/console/lang/no-NO.rc | 0 .../dll => dll}/cpl/console/lang/pl-PL.rc | 0 .../dll => dll}/cpl/console/lang/ru-RU.rc | 0 .../dll => dll}/cpl/console/lang/sk-SK.rc | 0 .../dll => dll}/cpl/console/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/console/layout.c | 0 {reactos/dll => dll}/cpl/console/options.c | 0 {reactos/dll => dll}/cpl/console/resource.h | 0 {reactos/dll => dll}/cpl/console/rsrc.rc | 0 {reactos/dll => dll}/cpl/cpl.rbuild | 0 {reactos/dll => dll}/cpl/desk/advappdlg.c | 0 {reactos/dll => dll}/cpl/desk/advmon.c | 0 {reactos/dll => dll}/cpl/desk/appearance.c | 0 {reactos/dll => dll}/cpl/desk/appearance.h | 0 {reactos/dll => dll}/cpl/desk/background.c | 0 {reactos/dll => dll}/cpl/desk/classinst.c | 0 {reactos/dll => dll}/cpl/desk/desk.c | 0 {reactos/dll => dll}/cpl/desk/desk.def | 0 {reactos/dll => dll}/cpl/desk/desk.h | 0 {reactos/dll => dll}/cpl/desk/desk.rbuild | 0 {reactos/dll => dll}/cpl/desk/desk.rc | 0 {reactos/dll => dll}/cpl/desk/devsett.c | 0 {reactos/dll => dll}/cpl/desk/dibitmap.c | 0 {reactos/dll => dll}/cpl/desk/general.c | 0 {reactos/dll => dll}/cpl/desk/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/desk/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/desk/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/desk/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/desk/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/desk/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/desk/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/desk/lang/hu-HU.rc | 0 {reactos/dll => dll}/cpl/desk/lang/id-ID.rc | 0 {reactos/dll => dll}/cpl/desk/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/desk/lang/ja-JP.rc | 0 {reactos/dll => dll}/cpl/desk/lang/nl-NL.rc | 0 {reactos/dll => dll}/cpl/desk/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/desk/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/desk/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/desk/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/desk/lang/sv-SE.rc | 0 {reactos/dll => dll}/cpl/desk/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/desk/lang/zh-CN.rc | 0 {reactos/dll => dll}/cpl/desk/misc.c | 0 {reactos/dll => dll}/cpl/desk/monslctl.c | 0 {reactos/dll => dll}/cpl/desk/monslctl.h | 0 {reactos/dll => dll}/cpl/desk/preview.c | 0 {reactos/dll => dll}/cpl/desk/preview.h | 0 {reactos/dll => dll}/cpl/desk/resource.h | 0 .../dll => dll}/cpl/desk/resources/applet.ico | Bin .../cpl/desk/resources/monitor.bmp | Bin .../cpl/desk/resources/spectrum_16.bmp | Bin .../cpl/desk/resources/spectrum_4.bmp | Bin .../cpl/desk/resources/spectrum_8.bmp | Bin {reactos/dll => dll}/cpl/desk/rsrc.rc | 0 {reactos/dll => dll}/cpl/desk/screensaver.c | 0 {reactos/dll => dll}/cpl/desk/settings.c | 0 {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.c | 0 {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.h | 0 {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.rbuild | 0 {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.spec | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/hu-HU.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/id-ID.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/ja-JP.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/nl-NL.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/pt-BR.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/th-TH.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/lang/zh-CN.rc | 0 {reactos/dll => dll}/cpl/hdwwiz/resource.h | 0 .../cpl/hdwwiz/resources/applet.ico | Bin {reactos/dll => dll}/cpl/hdwwiz/rsrc.rc | 0 {reactos/dll => dll}/cpl/input/add.c | 0 {reactos/dll => dll}/cpl/input/changekeyseq.c | 0 {reactos/dll => dll}/cpl/input/input.c | 0 {reactos/dll => dll}/cpl/input/input.def | 0 {reactos/dll => dll}/cpl/input/input.h | 0 {reactos/dll => dll}/cpl/input/input.rbuild | 0 {reactos/dll => dll}/cpl/input/input.rc | 0 {reactos/dll => dll}/cpl/input/keysettings.c | 0 {reactos/dll => dll}/cpl/input/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/input/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/input/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/input/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/input/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/input/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/input/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/input/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/input/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/input/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/input/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/input/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/input/resource.h | 0 .../input/resources/keyboard-shortcuts.ico | Bin {reactos/dll => dll}/cpl/input/rsrc.rc | 0 {reactos/dll => dll}/cpl/input/settings.c | 0 {reactos/dll => dll}/cpl/intl/advanced.c | 0 {reactos/dll => dll}/cpl/intl/currency.c | 0 {reactos/dll => dll}/cpl/intl/date.c | 0 {reactos/dll => dll}/cpl/intl/generalp.c | 0 {reactos/dll => dll}/cpl/intl/inplocale.c | 0 {reactos/dll => dll}/cpl/intl/intl.c | 0 {reactos/dll => dll}/cpl/intl/intl.def | 0 {reactos/dll => dll}/cpl/intl/intl.h | 0 {reactos/dll => dll}/cpl/intl/intl.rbuild | 0 {reactos/dll => dll}/cpl/intl/intl.rc | 0 {reactos/dll => dll}/cpl/intl/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/intl/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/intl/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/intl/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/intl/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/intl/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/intl/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/intl/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/intl/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/intl/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/intl/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/intl/languages.c | 0 {reactos/dll => dll}/cpl/intl/misc.c | 0 {reactos/dll => dll}/cpl/intl/numbers.c | 0 {reactos/dll => dll}/cpl/intl/resource.h | 0 .../dll => dll}/cpl/intl/resources/applet.ico | Bin {reactos/dll => dll}/cpl/intl/rsrc.rc | 0 {reactos/dll => dll}/cpl/intl/setupreg.c | 0 {reactos/dll => dll}/cpl/intl/sort.c | 0 {reactos/dll => dll}/cpl/intl/time.c | 0 {reactos/dll => dll}/cpl/joy/joy.c | 0 {reactos/dll => dll}/cpl/joy/joy.def | 0 {reactos/dll => dll}/cpl/joy/joy.h | 0 {reactos/dll => dll}/cpl/joy/joy.rbuild | 0 {reactos/dll => dll}/cpl/joy/joy.rc | 0 {reactos/dll => dll}/cpl/joy/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/joy/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/joy/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/joy/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/joy/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/joy/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/joy/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/joy/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/joy/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/joy/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/joy/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/joy/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/joy/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/joy/lang/zh-CN.rc | 0 {reactos/dll => dll}/cpl/joy/resource.h | 0 .../dll => dll}/cpl/joy/resources/applet.ico | Bin {reactos/dll => dll}/cpl/joy/rsrc.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/id-ID.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/ja-JP.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/liccpa/lang/zh-CN.rc | 0 {reactos/dll => dll}/cpl/liccpa/liccpa.c | 0 {reactos/dll => dll}/cpl/liccpa/liccpa.def | 0 {reactos/dll => dll}/cpl/liccpa/liccpa.h | 0 {reactos/dll => dll}/cpl/liccpa/liccpa.rc | 0 {reactos/dll => dll}/cpl/liccpa/resource.h | 0 .../cpl/liccpa/resources/cpl_icon1.ico | Bin {reactos/dll => dll}/cpl/liccpa/rsrc.rc | 0 {reactos/dll => dll}/cpl/main/keyboard.c | 0 {reactos/dll => dll}/cpl/main/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/main/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/main/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/main/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/main/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/main/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/main/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/main/lang/hu-HU.rc | 0 {reactos/dll => dll}/cpl/main/lang/id-ID.rc | 0 {reactos/dll => dll}/cpl/main/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/main/lang/ja-JP.rc | 0 {reactos/dll => dll}/cpl/main/lang/nl-NL.rc | 0 {reactos/dll => dll}/cpl/main/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/main/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/main/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/main/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/main/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/main/lang/zh-CN.rc | 0 {reactos/dll => dll}/cpl/main/main.c | 0 {reactos/dll => dll}/cpl/main/main.def | 0 {reactos/dll => dll}/cpl/main/main.h | 0 {reactos/dll => dll}/cpl/main/main.rbuild | 0 {reactos/dll => dll}/cpl/main/main.rc | 0 {reactos/dll => dll}/cpl/main/mouse.c | 0 {reactos/dll => dll}/cpl/main/resource.h | 0 .../cpl/main/resources/folder_closed.ico | Bin .../cpl/main/resources/folder_open.ico | Bin .../cpl/main/resources/keyboard.ico | Bin .../cpl/main/resources/look_key.ico | Bin .../dll => dll}/cpl/main/resources/mouse.ico | Bin .../cpl/main/resources/mouse_button.ico | Bin .../cpl/main/resources/mouse_left.ico | Bin .../cpl/main/resources/mouse_pointer.ico | Bin .../cpl/main/resources/mouse_right.ico | Bin .../cpl/main/resources/mouse_speed.ico | Bin .../cpl/main/resources/mouse_trails.ico | Bin .../cpl/main/resources/mouse_wheel.ico | Bin .../cpl/main/resources/repeat_delay.ico | Bin .../cpl/main/resources/repeat_rate.ico | Bin {reactos/dll => dll}/cpl/main/rsrc.rc | 0 {reactos/dll => dll}/cpl/mmsys/audio.c | 0 {reactos/dll => dll}/cpl/mmsys/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/id-ID.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/nl-NL.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/pt-BR.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/mmsys/lang/zh-CN.rc | 0 {reactos/dll => dll}/cpl/mmsys/mmsys.c | 0 {reactos/dll => dll}/cpl/mmsys/mmsys.h | 0 {reactos/dll => dll}/cpl/mmsys/mmsys.rbuild | 0 {reactos/dll => dll}/cpl/mmsys/mmsys.rc | 0 {reactos/dll => dll}/cpl/mmsys/mmsys.spec | 0 {reactos/dll => dll}/cpl/mmsys/resource.h | 0 .../dll => dll}/cpl/mmsys/resources/3004.ico | Bin .../dll => dll}/cpl/mmsys/resources/4353.ico | Bin .../dll => dll}/cpl/mmsys/resources/4354.ico | Bin .../dll => dll}/cpl/mmsys/resources/4355.ico | Bin .../dll => dll}/cpl/mmsys/resources/4356.ico | Bin .../dll => dll}/cpl/mmsys/resources/4357.ico | Bin .../dll => dll}/cpl/mmsys/resources/4358.ico | Bin .../dll => dll}/cpl/mmsys/resources/4359.ico | Bin .../dll => dll}/cpl/mmsys/resources/4360.ico | Bin .../dll => dll}/cpl/mmsys/resources/4361.ico | Bin .../dll => dll}/cpl/mmsys/resources/4362.ico | Bin .../dll => dll}/cpl/mmsys/resources/4363.ico | Bin .../dll => dll}/cpl/mmsys/resources/4364.ico | Bin .../dll => dll}/cpl/mmsys/resources/4365.ico | Bin .../dll => dll}/cpl/mmsys/resources/4366.ico | Bin .../dll => dll}/cpl/mmsys/resources/4367.ico | Bin .../dll => dll}/cpl/mmsys/resources/4368.ico | Bin .../dll => dll}/cpl/mmsys/resources/4369.ico | Bin .../dll => dll}/cpl/mmsys/resources/4370.ico | Bin .../dll => dll}/cpl/mmsys/resources/4371.ico | Bin .../dll => dll}/cpl/mmsys/resources/4372.ico | Bin .../dll => dll}/cpl/mmsys/resources/4373.ico | Bin .../dll => dll}/cpl/mmsys/resources/4374.ico | Bin .../dll => dll}/cpl/mmsys/resources/4375.ico | Bin .../dll => dll}/cpl/mmsys/resources/4376.ico | Bin .../dll => dll}/cpl/mmsys/resources/4377.ico | Bin .../dll => dll}/cpl/mmsys/resources/4378.ico | Bin .../dll => dll}/cpl/mmsys/resources/4379.ico | Bin .../dll => dll}/cpl/mmsys/resources/4380.ico | Bin .../dll => dll}/cpl/mmsys/resources/4381.ico | Bin .../dll => dll}/cpl/mmsys/resources/4382.ico | Bin .../dll => dll}/cpl/mmsys/resources/4383.ico | Bin .../dll => dll}/cpl/mmsys/resources/4384.ico | Bin .../dll => dll}/cpl/mmsys/resources/4385.ico | Bin .../dll => dll}/cpl/mmsys/resources/4386.ico | Bin .../dll => dll}/cpl/mmsys/resources/4387.ico | Bin .../dll => dll}/cpl/mmsys/resources/4388.ico | Bin .../dll => dll}/cpl/mmsys/resources/4390.ico | Bin .../dll => dll}/cpl/mmsys/resources/4393.ico | Bin .../dll => dll}/cpl/mmsys/resources/4394.ico | Bin .../dll => dll}/cpl/mmsys/resources/play.ico | Bin .../cpl/mmsys/resources/speaker.bmp | Bin .../dll => dll}/cpl/mmsys/resources/stop.ico | Bin {reactos/dll => dll}/cpl/mmsys/rsrc.rc | 0 {reactos/dll => dll}/cpl/mmsys/sounds.c | 0 {reactos/dll => dll}/cpl/mmsys/voice.c | 0 {reactos/dll => dll}/cpl/mmsys/volume.c | 0 {reactos/dll => dll}/cpl/ncpa/ncpa.c | 0 {reactos/dll => dll}/cpl/ncpa/ncpa.def | 0 {reactos/dll => dll}/cpl/ncpa/ncpa.rbuild | 0 {reactos/dll => dll}/cpl/odbccp32/odbccp32.c | 0 .../dll => dll}/cpl/odbccp32/odbccp32.def | 0 {reactos/dll => dll}/cpl/odbccp32/odbccp32.h | 0 .../dll => dll}/cpl/odbccp32/odbccp32.rbuild | 0 {reactos/dll => dll}/cpl/odbccp32/odbccp32.rc | 0 {reactos/dll => dll}/cpl/powercfg/advanced.c | 0 {reactos/dll => dll}/cpl/powercfg/alarms.c | 0 {reactos/dll => dll}/cpl/powercfg/hibernate.c | 0 .../dll => dll}/cpl/powercfg/lang/bg-BG.rc | 0 .../dll => dll}/cpl/powercfg/lang/cs-CZ.rc | 0 .../dll => dll}/cpl/powercfg/lang/de-DE.rc | 0 .../dll => dll}/cpl/powercfg/lang/el-GR.rc | 0 .../dll => dll}/cpl/powercfg/lang/en-US.rc | 0 .../dll => dll}/cpl/powercfg/lang/es-ES.rc | 0 .../dll => dll}/cpl/powercfg/lang/fr-FR.rc | 0 .../dll => dll}/cpl/powercfg/lang/id-ID.rc | 0 .../dll => dll}/cpl/powercfg/lang/it-IT.rc | 0 .../dll => dll}/cpl/powercfg/lang/nl-NL.rc | 0 .../dll => dll}/cpl/powercfg/lang/no-NO.rc | 0 .../dll => dll}/cpl/powercfg/lang/pl-PL.rc | 0 .../dll => dll}/cpl/powercfg/lang/ru-RU.rc | 0 .../dll => dll}/cpl/powercfg/lang/sk-SK.rc | 0 .../dll => dll}/cpl/powercfg/lang/th-TH.rc | 0 .../dll => dll}/cpl/powercfg/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/powercfg/powercfg.c | 0 .../dll => dll}/cpl/powercfg/powercfg.def | 0 {reactos/dll => dll}/cpl/powercfg/powercfg.h | 0 .../dll => dll}/cpl/powercfg/powercfg.rbuild | 0 {reactos/dll => dll}/cpl/powercfg/powercfg.rc | 0 .../dll => dll}/cpl/powercfg/powershemes.c | 0 {reactos/dll => dll}/cpl/powercfg/resource.h | 0 .../dll => dll}/cpl/powercfg/resources/ac.ico | Bin .../cpl/powercfg/resources/acdc.ico | Bin .../powercfg/resources/batterycharging.ico | Bin .../resources/batterychargingcritical.ico | Bin .../resources/batterycharginghalf.ico | Bin .../resources/batterycharginghigh.ico | Bin .../powercfg/resources/batterycharginglow.ico | Bin .../powercfg/resources/batterycritical.ico | Bin .../cpl/powercfg/resources/batteryfull.ico | Bin .../cpl/powercfg/resources/batteryhalf.ico | Bin .../cpl/powercfg/resources/batteryhigh.ico | Bin .../cpl/powercfg/resources/batterylow.ico | Bin .../cpl/powercfg/resources/batteryunknown.ico | Bin .../dll => dll}/cpl/powercfg/resources/dc.ico | Bin .../cpl/powercfg/resources/hibernate.ico | Bin .../cpl/powercfg/resources/nobattery.ico | Bin .../cpl/powercfg/resources/screen.ico | Bin {reactos/dll => dll}/cpl/powercfg/rsrc.rc | 0 {reactos/dll => dll}/cpl/sysdm/advanced.c | 0 {reactos/dll => dll}/cpl/sysdm/environment.c | 0 {reactos/dll => dll}/cpl/sysdm/general.c | 0 {reactos/dll => dll}/cpl/sysdm/hardprof.c | 0 {reactos/dll => dll}/cpl/sysdm/hardware.c | 0 {reactos/dll => dll}/cpl/sysdm/lang/bg-BG.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/cs-CZ.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/da-DK.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/de-DE.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/el-GR.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/es-ES.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/fr-FR.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/hu-HU.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/id-ID.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/it-IT.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/ja-JP.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/nl-NL.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/no-NO.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/sk-SK.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/sv-SE.rc | 0 {reactos/dll => dll}/cpl/sysdm/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/sysdm/licence.c | 0 {reactos/dll => dll}/cpl/sysdm/precomp.h | 0 {reactos/dll => dll}/cpl/sysdm/resource.h | 0 .../cpl/sysdm/resources/applet.ico | Bin .../cpl/sysdm/resources/devmgr.ico | Bin .../dll => dll}/cpl/sysdm/resources/down.ico | Bin .../dll => dll}/cpl/sysdm/resources/gpl.txt | Bin .../cpl/sysdm/resources/rosbitmap.bmp | Bin .../dll => dll}/cpl/sysdm/resources/up.ico | Bin {reactos/dll => dll}/cpl/sysdm/rsrc.rc | 0 {reactos/dll => dll}/cpl/sysdm/startrec.c | 0 {reactos/dll => dll}/cpl/sysdm/sysdm.c | 0 {reactos/dll => dll}/cpl/sysdm/sysdm.def | 0 {reactos/dll => dll}/cpl/sysdm/sysdm.rbuild | 0 {reactos/dll => dll}/cpl/sysdm/sysdm.rc | 0 {reactos/dll => dll}/cpl/sysdm/userprofile.c | 0 {reactos/dll => dll}/cpl/sysdm/virtmem.c | 0 .../dll => dll}/cpl/telephon/lang/bg-BG.rc | 0 .../dll => dll}/cpl/telephon/lang/de-DE.rc | 0 .../dll => dll}/cpl/telephon/lang/el-GR.rc | 0 .../dll => dll}/cpl/telephon/lang/en-US.rc | 0 .../dll => dll}/cpl/telephon/lang/es-ES.rc | 0 .../dll => dll}/cpl/telephon/lang/fr-FR.rc | 0 .../dll => dll}/cpl/telephon/lang/it-IT.rc | 0 .../dll => dll}/cpl/telephon/lang/no-NO.rc | 0 .../dll => dll}/cpl/telephon/lang/pl-PL.rc | 0 .../dll => dll}/cpl/telephon/lang/ru-RU.rc | 0 .../dll => dll}/cpl/telephon/lang/sk-SK.rc | 0 .../dll => dll}/cpl/telephon/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/telephon/resource.h | 0 .../cpl/telephon/resources/applet.ico | Bin {reactos/dll => dll}/cpl/telephon/rsrc.rc | 0 {reactos/dll => dll}/cpl/telephon/telephon.c | 0 .../dll => dll}/cpl/telephon/telephon.def | 0 {reactos/dll => dll}/cpl/telephon/telephon.h | 0 .../dll => dll}/cpl/telephon/telephon.rbuild | 0 {reactos/dll => dll}/cpl/telephon/telephon.rc | 0 {reactos/dll => dll}/cpl/timedate/clock.c | 0 .../dll => dll}/cpl/timedate/dateandtime.c | 0 .../dll => dll}/cpl/timedate/internettime.c | 0 .../dll => dll}/cpl/timedate/lang/bg-BG.rc | 0 .../dll => dll}/cpl/timedate/lang/cs-CZ.rc | 0 .../dll => dll}/cpl/timedate/lang/da-DK.rc | 0 .../dll => dll}/cpl/timedate/lang/de-DE.rc | 0 .../dll => dll}/cpl/timedate/lang/el-GR.rc | 0 .../dll => dll}/cpl/timedate/lang/en-US.rc | 0 .../dll => dll}/cpl/timedate/lang/es-ES.rc | 0 .../dll => dll}/cpl/timedate/lang/fr-FR.rc | 0 .../dll => dll}/cpl/timedate/lang/hu-HU.rc | 0 .../dll => dll}/cpl/timedate/lang/id-ID.rc | 0 .../dll => dll}/cpl/timedate/lang/it-IT.rc | 0 .../dll => dll}/cpl/timedate/lang/ja-JP.rc | 0 .../dll => dll}/cpl/timedate/lang/nl-NL.rc | 0 .../dll => dll}/cpl/timedate/lang/no-NO.rc | 0 .../dll => dll}/cpl/timedate/lang/pl-PL.rc | 0 .../dll => dll}/cpl/timedate/lang/ru-RU.rc | 0 .../dll => dll}/cpl/timedate/lang/sk-SK.rc | 0 .../dll => dll}/cpl/timedate/lang/sv-SE.rc | 0 .../dll => dll}/cpl/timedate/lang/th-TH.rc | 0 .../dll => dll}/cpl/timedate/lang/uk-UA.rc | 0 {reactos/dll => dll}/cpl/timedate/monthcal.c | 0 {reactos/dll => dll}/cpl/timedate/ntpclient.c | 0 {reactos/dll => dll}/cpl/timedate/resource.h | 0 .../cpl/timedate/resources/applet.ico | Bin .../cpl/timedate/resources/world.bmp | Bin {reactos/dll => dll}/cpl/timedate/rsrc.rc | 0 {reactos/dll => dll}/cpl/timedate/timedate.c | 0 .../dll => dll}/cpl/timedate/timedate.def | 0 {reactos/dll => dll}/cpl/timedate/timedate.h | 0 .../dll => dll}/cpl/timedate/timedate.rbuild | 0 {reactos/dll => dll}/cpl/timedate/timedate.rc | 0 {reactos/dll => dll}/cpl/timedate/timezone.c | 0 {reactos/dll => dll}/cpl/usrmgr/extra.c | 0 {reactos/dll => dll}/cpl/usrmgr/groupprops.c | 0 {reactos/dll => dll}/cpl/usrmgr/groups.c | 0 {reactos/dll => dll}/cpl/usrmgr/lang/en-US.rc | 0 {reactos/dll => dll}/cpl/usrmgr/lang/pl-PL.rc | 0 {reactos/dll => dll}/cpl/usrmgr/lang/ru-RU.rc | 0 {reactos/dll => dll}/cpl/usrmgr/misc.c | 0 {reactos/dll => dll}/cpl/usrmgr/resource.h | 0 .../cpl/usrmgr/resources/applet.ico | Bin .../cpl/usrmgr/resources/group.ico | Bin .../cpl/usrmgr/resources/locked.ico | Bin .../dll => dll}/cpl/usrmgr/resources/user.ico | Bin {reactos/dll => dll}/cpl/usrmgr/rsrc.rc | 0 {reactos/dll => dll}/cpl/usrmgr/userprops.c | 0 {reactos/dll => dll}/cpl/usrmgr/users.c | 0 {reactos/dll => dll}/cpl/usrmgr/usrmgr.c | 0 {reactos/dll => dll}/cpl/usrmgr/usrmgr.def | 0 {reactos/dll => dll}/cpl/usrmgr/usrmgr.h | 0 {reactos/dll => dll}/cpl/usrmgr/usrmgr.rbuild | 0 {reactos/dll => dll}/cpl/usrmgr/usrmgr.rc | 0 {reactos/dll => dll}/directx/d3d8/d3d8.c | 0 {reactos/dll => dll}/directx/d3d8/d3d8.def | 0 {reactos/dll => dll}/directx/d3d8/d3d8.h | 0 {reactos/dll => dll}/directx/d3d8/d3d8.rbuild | 0 {reactos/dll => dll}/directx/d3d8/d3d8.rc | 0 .../dll => dll}/directx/d3d8thk/d3d8thk.def | 0 .../directx/d3d8thk/d3d8thk.rbuild | 0 .../dll => dll}/directx/d3d8thk/d3d8thk.rc | 0 {reactos/dll => dll}/directx/d3d9/adapter.c | 0 {reactos/dll => dll}/directx/d3d9/adapter.h | 0 {reactos/dll => dll}/directx/d3d9/d3d9.c | 0 {reactos/dll => dll}/directx/d3d9/d3d9.rbuild | 0 {reactos/dll => dll}/directx/d3d9/d3d9.rc | 0 {reactos/dll => dll}/directx/d3d9/d3d9.spec | 0 .../directx/d3d9/d3d9_baseobject.c | 0 .../directx/d3d9/d3d9_baseobject.h | 0 .../directx/d3d9/d3d9_basetexture.h | 0 .../dll => dll}/directx/d3d9/d3d9_callbacks.c | 0 .../dll => dll}/directx/d3d9/d3d9_callbacks.h | 0 {reactos/dll => dll}/directx/d3d9/d3d9_caps.c | 0 {reactos/dll => dll}/directx/d3d9/d3d9_caps.h | 0 .../dll => dll}/directx/d3d9/d3d9_common.h | 0 .../dll => dll}/directx/d3d9/d3d9_create.c | 0 .../dll => dll}/directx/d3d9/d3d9_create.h | 0 .../dll => dll}/directx/d3d9/d3d9_cursor.c | 0 .../dll => dll}/directx/d3d9/d3d9_cursor.h | 0 .../dll => dll}/directx/d3d9/d3d9_device.c | 0 .../dll => dll}/directx/d3d9/d3d9_device.h | 0 .../dll => dll}/directx/d3d9/d3d9_haldevice.c | 0 .../dll => dll}/directx/d3d9/d3d9_haldevice.h | 0 .../dll => dll}/directx/d3d9/d3d9_helpers.c | 0 .../dll => dll}/directx/d3d9/d3d9_helpers.h | 0 {reactos/dll => dll}/directx/d3d9/d3d9_impl.c | 0 .../dll => dll}/directx/d3d9/d3d9_mipmap.c | 0 .../dll => dll}/directx/d3d9/d3d9_mipmap.h | 0 .../dll => dll}/directx/d3d9/d3d9_private.h | 0 .../directx/d3d9/d3d9_puredevice.c | 0 .../directx/d3d9/d3d9_puredevice.h | 0 .../dll => dll}/directx/d3d9/d3d9_resource.c | 0 .../dll => dll}/directx/d3d9/d3d9_resource.h | 0 .../dll => dll}/directx/d3d9/d3d9_surface.h | 0 .../dll => dll}/directx/d3d9/d3d9_swapchain.c | 0 .../dll => dll}/directx/d3d9/d3d9_swapchain.h | 0 .../dll => dll}/directx/d3d9/d3d9_texture.c | 0 .../dll => dll}/directx/d3d9/d3d9_texture.h | 0 {reactos/dll => dll}/directx/d3d9/device.c | 0 {reactos/dll => dll}/directx/d3d9/device.h | 0 {reactos/dll => dll}/directx/d3d9/format.c | 0 {reactos/dll => dll}/directx/d3d9/format.h | 0 .../directx/ddraw/Clipper/clipper.h | 0 .../directx/ddraw/Clipper/clipper_main.c | 0 .../directx/ddraw/Clipper/clipper_stubs.c | 0 .../directx/ddraw/Color/color_stubs.c | 0 .../dll => dll}/directx/ddraw/Ddraw/GetCaps.c | 0 .../directx/ddraw/Ddraw/GetDeviceIdentifier.c | 0 .../directx/ddraw/Ddraw/callbacks_dd_hel.c | 0 .../dll => dll}/directx/ddraw/Ddraw/ddraw.h | 0 .../directx/ddraw/Ddraw/ddraw_displaymode.c | 0 .../directx/ddraw/Ddraw/ddraw_main.c | 0 .../ddraw/Ddraw/ddraw_setcooperativelevel.c | 0 .../directx/ddraw/Ddraw/ddraw_stubs.c | 0 .../directx/ddraw/Gamma/gamma_stubs.c | 0 .../directx/ddraw/Kernel/kernel_stubs.c | 0 .../directx/ddraw/Palette/palette_stubs.c | 0 .../ddraw/Surface/callbacks_surf_hel.c | 0 .../directx/ddraw/Surface/createsurface.c | 0 .../directx/ddraw/Surface/surface.h | 0 .../directx/ddraw/Surface/surface_main.c | 0 .../directx/ddraw/Surface/surface_stubs.c | 0 .../directx/ddraw/Videoport/videoport_stubs.c | 0 .../directx/ddraw/Vtable/DirectD3D2_Vtable.c | 0 .../directx/ddraw/Vtable/DirectD3D3_Vtable.c | 0 .../directx/ddraw/Vtable/DirectD3D7_Vtable.c | 0 .../directx/ddraw/Vtable/DirectD3D_Vtable.c | 0 .../directx/ddraw/Vtable/DirectDraw2_Vtable.c | 0 .../directx/ddraw/Vtable/DirectDraw4_Vtable.c | 0 .../directx/ddraw/Vtable/DirectDraw7_Vtable.c | 0 .../ddraw/Vtable/DirectDrawSurface2_Vtable.c | 0 .../ddraw/Vtable/DirectDrawSurface3_Vtable.c | 0 .../ddraw/Vtable/DirectDrawSurface4_Vtable.c | 0 .../ddraw/Vtable/DirectDrawSurface7_Vtable.c | 0 .../ddraw/Vtable/DirectDrawSurface_Vtable.c | 0 .../directx/ddraw/Vtable/DirectDraw_Vtable.c | 0 {reactos/dll => dll}/directx/ddraw/cleanup.c | 0 .../directx/ddraw/d3d/DirectD3D_main.c | 0 {reactos/dll => dll}/directx/ddraw/ddraw.def | 0 .../dll => dll}/directx/ddraw/ddraw.rbuild | 0 {reactos/dll => dll}/directx/ddraw/ddraw.rc | 0 .../directx/ddraw/ddraw_structures.txt | 0 {reactos/dll => dll}/directx/ddraw/main.c | 0 {reactos/dll => dll}/directx/ddraw/resource.h | 0 {reactos/dll => dll}/directx/ddraw/rosdraw.h | 0 {reactos/dll => dll}/directx/ddraw/startup.c | 0 .../directx/ddraw/thunks/ddraw_thunk.c | 0 .../directx/ddraw/thunks/surface_thunk.c | 0 .../dll => dll}/directx/devenum/Makefile.in | 0 .../directx/devenum/createdevenum.c | 0 .../directx/devenum/devenum.rbuild | 0 .../dll => dll}/directx/devenum/devenum.rc | 0 .../dll => dll}/directx/devenum/devenum.spec | 0 .../directx/devenum/devenum_main.c | 0 .../directx/devenum/devenum_private.h | 0 .../dll => dll}/directx/devenum/factory.c | 0 .../directx/devenum/mediacatenum.c | 0 .../directx/devenum/parsedisplayname.c | 0 .../dll => dll}/directx/dinput/data_formats.c | 0 {reactos/dll => dll}/directx/dinput/device.c | 0 .../directx/dinput/device_private.h | 0 .../dll => dll}/directx/dinput/dinput.rbuild | 0 .../dll => dll}/directx/dinput/dinput.spec | 0 .../dll => dll}/directx/dinput/dinput_main.c | 0 .../directx/dinput/dinput_private.h | 0 .../directx/dinput/effect_linuxinput.c | 0 .../directx/dinput/joystick_linux.c | 0 .../directx/dinput/joystick_linuxinput.c | 0 .../dll => dll}/directx/dinput/keyboard.c | 0 {reactos/dll => dll}/directx/dinput/mouse.c | 0 {reactos/dll => dll}/directx/dinput/regsvr.c | 0 .../dll => dll}/directx/dinput/version.rc | 0 .../directx/dinput8/dinput8.rbuild | 0 .../dll => dll}/directx/dinput8/dinput8.spec | 0 .../directx/dinput8/dinput8_main.c | 0 .../dll => dll}/directx/dinput8/version.rc | 0 {reactos/dll => dll}/directx/directx.rbuild | 0 .../dll => dll}/directx/dplay/dplay.rbuild | 0 {reactos/dll => dll}/directx/dplay/dplay.spec | 0 .../dll => dll}/directx/dplay/dplay_main.c | 0 {reactos/dll => dll}/directx/dplay/version.rc | 0 .../directx/dplayx/dpclassfactory.c | 0 {reactos/dll => dll}/directx/dplayx/dpinit.h | 0 {reactos/dll => dll}/directx/dplayx/dplay.c | 0 .../dll => dll}/directx/dplayx/dplay_global.h | 0 {reactos/dll => dll}/directx/dplayx/dplaysp.c | 0 {reactos/dll => dll}/directx/dplayx/dplaysp.h | 0 .../dll => dll}/directx/dplayx/dplayx.rbuild | 0 .../dll => dll}/directx/dplayx/dplayx.spec | 0 .../directx/dplayx/dplayx_global.c | 0 .../directx/dplayx/dplayx_global.h | 0 .../dll => dll}/directx/dplayx/dplayx_main.c | 0 .../directx/dplayx/dplayx_messages.c | 0 .../directx/dplayx/dplayx_messages.h | 0 .../dll => dll}/directx/dplayx/dplayx_queue.h | 0 {reactos/dll => dll}/directx/dplayx/dplobby.c | 0 {reactos/dll => dll}/directx/dplayx/lobbysp.c | 0 {reactos/dll => dll}/directx/dplayx/lobbysp.h | 0 .../dll => dll}/directx/dplayx/name_server.c | 0 .../dll => dll}/directx/dplayx/name_server.h | 0 {reactos/dll => dll}/directx/dplayx/regsvr.c | 0 .../dll => dll}/directx/dplayx/version.rc | 0 {reactos/dll => dll}/directx/dsound/buffer.c | 0 {reactos/dll => dll}/directx/dsound/capture.c | 0 {reactos/dll => dll}/directx/dsound/dsound.c | 0 .../dll => dll}/directx/dsound/dsound.rbuild | 0 .../dll => dll}/directx/dsound/dsound.spec | 0 .../dll => dll}/directx/dsound/dsound_main.c | 0 .../directx/dsound/dsound_private.h | 0 {reactos/dll => dll}/directx/dsound/duplex.c | 0 .../directx/dsound/dxroslayer/dxros_layer.h | 0 .../dxroslayer/dxrosdrv_querydsounddesc.c | 0 .../dxroslayer/dxrosdrv_querydsoundiface.c | 0 .../directx/dsound/dxroslayer/dxroslayer.c | 0 .../dsound/dxroslayer/getguidfromstring.c | 0 {reactos/dll => dll}/directx/dsound/mixer.c | 0 {reactos/dll => dll}/directx/dsound/primary.c | 0 {reactos/dll => dll}/directx/dsound/propset.c | 0 {reactos/dll => dll}/directx/dsound/regsvr.c | 0 {reactos/dll => dll}/directx/dsound/sound3d.c | 0 .../directx/dsound/tests/.cvsignore | 0 .../directx/dsound/tests/Makefile.in | 0 .../directx/dsound/tests/capture.c | 0 .../dll => dll}/directx/dsound/tests/ds3d.c | 0 .../dll => dll}/directx/dsound/tests/ds3d8.c | 0 .../dll => dll}/directx/dsound/tests/dsound.c | 0 .../directx/dsound/tests/dsound8.c | 0 .../directx/dsound/tests/dsound_test.h | 0 .../directx/dsound/tests/propset.c | 0 .../dll => dll}/directx/dsound/version.rc | 0 .../dll => dll}/directx/dxdiagn/container.c | 0 .../dll => dll}/directx/dxdiagn/dxdiag_main.c | 0 .../directx/dxdiagn/dxdiag_private.h | 0 .../directx/dxdiagn/dxdiagn.rbuild | 0 .../dll => dll}/directx/dxdiagn/dxdiagn.spec | 0 .../dll => dll}/directx/dxdiagn/provider.c | 0 {reactos/dll => dll}/directx/dxdiagn/regsvr.c | 0 .../dll => dll}/directx/dxdiagn/version.rc | 0 .../dll => dll}/directx/ksproxy/ksproxy.c | 0 .../directx/ksproxy/ksproxy.rbuild | 0 .../dll => dll}/directx/ksproxy/ksproxy.rc | 0 .../dll => dll}/directx/ksproxy/ksproxy.spec | 0 {reactos/dll => dll}/directx/ksuser/ksuser.c | 0 .../dll => dll}/directx/ksuser/ksuser.def | 0 {reactos/dll => dll}/directx/ksuser/ksuser.h | 0 .../dll => dll}/directx/ksuser/ksuser.rbuild | 0 {reactos/dll => dll}/directx/ksuser/ksuser.rc | 0 {reactos/dll => dll}/directx/msdmo/msdmo.c | 0 .../dll => dll}/directx/msdmo/msdmo.rbuild | 0 {reactos/dll => dll}/directx/msdmo/msdmo.rc | 0 {reactos/dll => dll}/directx/msdmo/msdmo.spec | 0 {reactos/dll => dll}/directx/qedit/qedit.c | 0 .../dll => dll}/directx/qedit/qedit.rbuild | 0 {reactos/dll => dll}/directx/qedit/qedit.rc | 0 {reactos/dll => dll}/directx/qedit/qedit.spec | 0 .../dll => dll}/directx/quartz/acmwrapper.c | 0 {reactos/dll => dll}/directx/quartz/avidec.c | 0 .../dll => dll}/directx/quartz/avisplit.c | 0 {reactos/dll => dll}/directx/quartz/control.c | 0 .../directx/quartz/control_private.h | 0 .../dll => dll}/directx/quartz/dsoundrender.c | 0 .../dll => dll}/directx/quartz/enumfilters.c | 0 .../dll => dll}/directx/quartz/enummedia.c | 0 .../dll => dll}/directx/quartz/enummoniker.c | 0 .../dll => dll}/directx/quartz/enumpins.c | 0 .../directx/quartz/enumregfilters.c | 0 .../dll => dll}/directx/quartz/filesource.c | 0 .../dll => dll}/directx/quartz/filtergraph.c | 0 .../dll => dll}/directx/quartz/filtermapper.c | 0 {reactos/dll => dll}/directx/quartz/main.c | 0 .../dll => dll}/directx/quartz/memallocator.c | 0 .../dll => dll}/directx/quartz/mpegsplit.c | 0 .../dll => dll}/directx/quartz/nullrenderer.c | 0 {reactos/dll => dll}/directx/quartz/parser.c | 0 {reactos/dll => dll}/directx/quartz/parser.h | 0 {reactos/dll => dll}/directx/quartz/pin.c | 0 {reactos/dll => dll}/directx/quartz/pin.h | 0 .../dll => dll}/directx/quartz/quartz.rbuild | 0 .../dll => dll}/directx/quartz/quartz.spec | 0 .../directx/quartz/quartz_private.h | 0 {reactos/dll => dll}/directx/quartz/regsvr.c | 0 .../dll => dll}/directx/quartz/systemclock.c | 0 .../dll => dll}/directx/quartz/transform.c | 0 .../dll => dll}/directx/quartz/transform.h | 0 .../dll => dll}/directx/quartz/version.rc | 0 .../directx/quartz/videorenderer.c | 0 .../dll => dll}/directx/quartz/waveparser.c | 0 .../dll => dll}/directx/wine/d3d8/Makefile.in | 0 .../directx/wine/d3d8/basetexture.c | 0 .../directx/wine/d3d8/cubetexture.c | 0 .../dll => dll}/directx/wine/d3d8/d3d8.rbuild | 0 .../dll => dll}/directx/wine/d3d8/d3d8.spec | 0 .../dll => dll}/directx/wine/d3d8/d3d8_main.c | 0 .../directx/wine/d3d8/d3d8_private.h | 0 .../dll => dll}/directx/wine/d3d8/device.c | 0 .../dll => dll}/directx/wine/d3d8/directx.c | 0 .../directx/wine/d3d8/indexbuffer.c | 0 .../directx/wine/d3d8/pixelshader.c | 0 .../dll => dll}/directx/wine/d3d8/resource.c | 0 .../directx/wine/d3d8/stateblock.c | 0 .../dll => dll}/directx/wine/d3d8/surface.c | 0 .../dll => dll}/directx/wine/d3d8/swapchain.c | 0 .../dll => dll}/directx/wine/d3d8/texture.c | 0 .../dll => dll}/directx/wine/d3d8/version.rc | 0 .../directx/wine/d3d8/vertexbuffer.c | 0 .../directx/wine/d3d8/vertexdeclaration.c | 0 .../directx/wine/d3d8/vertexshader.c | 0 .../dll => dll}/directx/wine/d3d8/volume.c | 0 .../directx/wine/d3d8/volumetexture.c | 0 .../dll => dll}/directx/wine/d3d9/Makefile.in | 0 .../directx/wine/d3d9/basetexture.c | 0 .../directx/wine/d3d9/cubetexture.c | 0 .../dll => dll}/directx/wine/d3d9/d3d9.rbuild | 0 .../dll => dll}/directx/wine/d3d9/d3d9.spec | 0 .../dll => dll}/directx/wine/d3d9/d3d9_main.c | 0 .../directx/wine/d3d9/d3d9_private.h | 0 .../dll => dll}/directx/wine/d3d9/device.c | 0 .../dll => dll}/directx/wine/d3d9/directx.c | 0 .../directx/wine/d3d9/indexbuffer.c | 0 .../directx/wine/d3d9/pixelshader.c | 0 .../dll => dll}/directx/wine/d3d9/query.c | 0 .../dll => dll}/directx/wine/d3d9/resource.c | 0 .../directx/wine/d3d9/stateblock.c | 0 .../dll => dll}/directx/wine/d3d9/surface.c | 0 .../dll => dll}/directx/wine/d3d9/swapchain.c | 0 .../dll => dll}/directx/wine/d3d9/texture.c | 0 .../dll => dll}/directx/wine/d3d9/version.rc | 0 .../directx/wine/d3d9/vertexbuffer.c | 0 .../directx/wine/d3d9/vertexdeclaration.c | 0 .../directx/wine/d3d9/vertexshader.c | 0 .../dll => dll}/directx/wine/d3d9/volume.c | 0 .../directx/wine/d3d9/volumetexture.c | 0 {reactos/dll => dll}/directx/wine/readme.txt | 0 {reactos/dll => dll}/directx/wine/wine.rbuild | 0 .../directx/wine/wined3d/Makefile.in | 0 .../directx/wine/wined3d/arb_program_shader.c | 0 .../wine/wined3d/ati_fragment_shader.c | 0 .../directx/wine/wined3d/baseshader.c | 0 .../directx/wine/wined3d/basetexture.c | 0 .../directx/wine/wined3d/clipper.c | 0 .../directx/wine/wined3d/context.c | 0 .../directx/wine/wined3d/cubetexture.c | 0 .../dll => dll}/directx/wine/wined3d/device.c | 0 .../directx/wine/wined3d/directx.c | 0 .../directx/wine/wined3d/drawprim.c | 0 .../directx/wine/wined3d/glsl_shader.c | 0 .../directx/wine/wined3d/indexbuffer.c | 0 .../wine/wined3d/nvidia_texture_shader.c | 0 .../directx/wine/wined3d/palette.c | 0 .../directx/wine/wined3d/pixelshader.c | 0 .../dll => dll}/directx/wine/wined3d/query.c | 0 .../directx/wine/wined3d/resource.c | 0 .../directx/wine/wined3d/roshacks.txt | 0 .../dll => dll}/directx/wine/wined3d/state.c | 0 .../directx/wine/wined3d/stateblock.c | 0 .../directx/wine/wined3d/surface.c | 0 .../directx/wine/wined3d/surface_base.c | 0 .../directx/wine/wined3d/surface_gdi.c | 0 .../directx/wine/wined3d/swapchain.c | 0 .../directx/wine/wined3d/swapchain_base.c | 0 .../directx/wine/wined3d/swapchain_gdi.c | 0 .../directx/wine/wined3d/texture.c | 0 .../dll => dll}/directx/wine/wined3d/utils.c | 0 .../directx/wine/wined3d/version.rc | 0 .../directx/wine/wined3d/vertexbuffer.c | 0 .../directx/wine/wined3d/vertexdeclaration.c | 0 .../directx/wine/wined3d/vertexshader.c | 0 .../dll => dll}/directx/wine/wined3d/volume.c | 0 .../directx/wine/wined3d/volumetexture.c | 0 .../directx/wine/wined3d/wined3d.def | 0 .../directx/wine/wined3d/wined3d.rbuild | 0 .../directx/wine/wined3d/wined3d.spec | 0 .../directx/wine/wined3d/wined3d_main.c | 0 .../directx/wine/wined3d/wined3d_private.h | 0 .../wine/wined3d/wined3d_private_types.h | 0 {reactos/dll => dll}/dll.rbuild | 0 {reactos/dll => dll}/keyboard/kbda1/kbda1.c | 0 .../dll => dll}/keyboard/kbda1/kbda1.rbuild | 0 {reactos/dll => dll}/keyboard/kbda1/kbda1.rc | 0 .../dll => dll}/keyboard/kbda1/kbda1.spec | 0 {reactos/dll => dll}/keyboard/kbda2/kbda2.c | 0 .../dll => dll}/keyboard/kbda2/kbda2.rbuild | 0 {reactos/dll => dll}/keyboard/kbda2/kbda2.rc | 0 .../dll => dll}/keyboard/kbda2/kbda2.spec | 0 {reactos/dll => dll}/keyboard/kbda3/kbda3.c | 0 .../dll => dll}/keyboard/kbda3/kbda3.rbuild | 0 {reactos/dll => dll}/keyboard/kbda3/kbda3.rc | 0 .../dll => dll}/keyboard/kbda3/kbda3.spec | 0 {reactos/dll => dll}/keyboard/kbdal/kbdal.c | 0 .../dll => dll}/keyboard/kbdal/kbdal.rbuild | 0 {reactos/dll => dll}/keyboard/kbdal/kbdal.rc | 0 .../dll => dll}/keyboard/kbdal/kbdal.spec | 0 .../dll => dll}/keyboard/kbdarme/kbdarme.c | 0 .../keyboard/kbdarme/kbdarme.rbuild | 0 .../dll => dll}/keyboard/kbdarme/kbdarme.rc | 0 .../dll => dll}/keyboard/kbdarme/kbdarme.spec | 0 .../dll => dll}/keyboard/kbdarmw/kbdarmw.c | 0 .../keyboard/kbdarmw/kbdarmw.rbuild | 0 .../dll => dll}/keyboard/kbdarmw/kbdarmw.rc | 0 .../dll => dll}/keyboard/kbdarmw/kbdarmw.spec | 0 {reactos/dll => dll}/keyboard/kbdaze/kbdaze.c | 0 .../dll => dll}/keyboard/kbdaze/kbdaze.rbuild | 0 .../dll => dll}/keyboard/kbdaze/kbdaze.rc | 0 .../dll => dll}/keyboard/kbdaze/kbdaze.spec | 0 .../dll => dll}/keyboard/kbdazel/kbdazel.c | 0 .../keyboard/kbdazel/kbdazel.rbuild | 0 .../dll => dll}/keyboard/kbdazel/kbdazel.rc | 0 .../dll => dll}/keyboard/kbdazel/kbdazel.spec | 0 {reactos/dll => dll}/keyboard/kbdbe/kbdbe.c | 0 .../dll => dll}/keyboard/kbdbe/kbdbe.rbuild | 0 {reactos/dll => dll}/keyboard/kbdbe/kbdbe.rc | 0 .../dll => dll}/keyboard/kbdbe/kbdbe.spec | 0 {reactos/dll => dll}/keyboard/kbdbga/kbdbga.c | 0 .../dll => dll}/keyboard/kbdbga/kbdbga.rbuild | 0 .../dll => dll}/keyboard/kbdbga/kbdbga.rc | 0 .../dll => dll}/keyboard/kbdbga/kbdbga.spec | 0 {reactos/dll => dll}/keyboard/kbdbgm/kbdbgm.c | 0 .../dll => dll}/keyboard/kbdbgm/kbdbgm.rbuild | 0 .../dll => dll}/keyboard/kbdbgm/kbdbgm.rc | 0 .../dll => dll}/keyboard/kbdbgm/kbdbgm.spec | 0 {reactos/dll => dll}/keyboard/kbdbgt/kbdbgt.c | 0 .../dll => dll}/keyboard/kbdbgt/kbdbgt.rbuild | 0 .../dll => dll}/keyboard/kbdbgt/kbdbgt.rc | 0 .../dll => dll}/keyboard/kbdbgt/kbdbgt.spec | 0 {reactos/dll => dll}/keyboard/kbdblr/kbdblr.c | 0 .../dll => dll}/keyboard/kbdblr/kbdblr.rbuild | 0 .../dll => dll}/keyboard/kbdblr/kbdblr.rc | 0 .../dll => dll}/keyboard/kbdblr/kbdblr.spec | 0 {reactos/dll => dll}/keyboard/kbdbr/kbdbr.c | 0 .../dll => dll}/keyboard/kbdbr/kbdbr.rbuild | 0 {reactos/dll => dll}/keyboard/kbdbr/kbdbr.rc | 0 .../dll => dll}/keyboard/kbdbr/kbdbr.spec | 0 {reactos/dll => dll}/keyboard/kbdbur/kbdbur.c | 0 .../dll => dll}/keyboard/kbdbur/kbdbur.rbuild | 0 .../dll => dll}/keyboard/kbdbur/kbdbur.rc | 0 .../dll => dll}/keyboard/kbdbur/kbdbur.spec | 0 {reactos/dll => dll}/keyboard/kbdcan/kbdcan.c | 0 .../dll => dll}/keyboard/kbdcan/kbdcan.rbuild | 0 .../dll => dll}/keyboard/kbdcan/kbdcan.rc | 0 .../dll => dll}/keyboard/kbdcan/kbdcan.spec | 0 {reactos/dll => dll}/keyboard/kbdcr/kbdcr.c | 0 .../dll => dll}/keyboard/kbdcr/kbdcr.rbuild | 0 {reactos/dll => dll}/keyboard/kbdcr/kbdcr.rc | 0 .../dll => dll}/keyboard/kbdcr/kbdcr.spec | 0 {reactos/dll => dll}/keyboard/kbdcz1/kbdcz1.c | 0 .../dll => dll}/keyboard/kbdcz1/kbdcz1.rbuild | 0 .../dll => dll}/keyboard/kbdcz1/kbdcz1.rc | 0 .../dll => dll}/keyboard/kbdcz1/kbdcz1.spec | 0 {reactos/dll => dll}/keyboard/kbdda/kbdda.c | 0 .../dll => dll}/keyboard/kbdda/kbdda.rbuild | 0 {reactos/dll => dll}/keyboard/kbdda/kbdda.rc | 0 .../dll => dll}/keyboard/kbdda/kbdda.spec | 0 {reactos/dll => dll}/keyboard/kbddv/kbddv.c | 0 .../dll => dll}/keyboard/kbddv/kbddv.rbuild | 0 {reactos/dll => dll}/keyboard/kbddv/kbddv.rc | 0 .../dll => dll}/keyboard/kbddv/kbddv.spec | 0 {reactos/dll => dll}/keyboard/kbdes/kbdes.c | 0 .../dll => dll}/keyboard/kbdes/kbdes.rbuild | 0 {reactos/dll => dll}/keyboard/kbdes/kbdes.rc | 0 .../dll => dll}/keyboard/kbdes/kbdes.spec | 0 {reactos/dll => dll}/keyboard/kbdest/kbdest.c | 0 .../dll => dll}/keyboard/kbdest/kbdest.rbuild | 0 .../dll => dll}/keyboard/kbdest/kbdest.rc | 0 .../dll => dll}/keyboard/kbdest/kbdest.spec | 0 {reactos/dll => dll}/keyboard/kbdfc/kbdfc.c | 0 .../dll => dll}/keyboard/kbdfc/kbdfc.rbuild | 0 {reactos/dll => dll}/keyboard/kbdfc/kbdfc.rc | 0 .../dll => dll}/keyboard/kbdfc/kbdfc.spec | 0 {reactos/dll => dll}/keyboard/kbdfi/kbdfi.c | 0 .../dll => dll}/keyboard/kbdfi/kbdfi.rbuild | 0 {reactos/dll => dll}/keyboard/kbdfi/kbdfi.rc | 0 .../dll => dll}/keyboard/kbdfi/kbdfi.spec | 0 {reactos/dll => dll}/keyboard/kbdfr/kbdfr.c | 0 .../dll => dll}/keyboard/kbdfr/kbdfr.rbuild | 0 {reactos/dll => dll}/keyboard/kbdfr/kbdfr.rc | 0 .../dll => dll}/keyboard/kbdfr/kbdfr.spec | 0 {reactos/dll => dll}/keyboard/kbdgeo/kbdgeo.c | 0 .../dll => dll}/keyboard/kbdgeo/kbdgeo.rbuild | 0 .../dll => dll}/keyboard/kbdgeo/kbdgeo.rc | 0 .../dll => dll}/keyboard/kbdgeo/kbdgeo.spec | 0 .../dll => dll}/keyboard/kbdgerg/kbdgerg.c | 0 .../keyboard/kbdgerg/kbdgerg.rbuild | 0 .../dll => dll}/keyboard/kbdgerg/kbdgerg.rc | 0 .../dll => dll}/keyboard/kbdgerg/kbdgerg.spec | 0 .../dll => dll}/keyboard/kbdgneo/kbdgneo.c | 0 .../keyboard/kbdgneo/kbdgneo.rbuild | 0 .../dll => dll}/keyboard/kbdgneo/kbdgneo.rc | 0 .../dll => dll}/keyboard/kbdgneo/kbdgneo.spec | 0 {reactos/dll => dll}/keyboard/kbdgr/kbdgr.c | 0 .../dll => dll}/keyboard/kbdgr/kbdgr.rbuild | 0 {reactos/dll => dll}/keyboard/kbdgr/kbdgr.rc | 0 .../dll => dll}/keyboard/kbdgr/kbdgr.spec | 0 .../dll => dll}/keyboard/kbdgrist/kbdgrist.c | 0 .../keyboard/kbdgrist/kbdgrist.rbuild | 0 .../dll => dll}/keyboard/kbdgrist/kbdgrist.rc | 0 .../keyboard/kbdgrist/kbdgrist.spec | 0 {reactos/dll => dll}/keyboard/kbdhe/kbdhe.c | 0 .../dll => dll}/keyboard/kbdhe/kbdhe.rbuild | 0 {reactos/dll => dll}/keyboard/kbdhe/kbdhe.rc | 0 .../dll => dll}/keyboard/kbdhe/kbdhe.spec | 0 {reactos/dll => dll}/keyboard/kbdheb/kbdheb.c | 0 .../dll => dll}/keyboard/kbdheb/kbdheb.rbuild | 0 .../dll => dll}/keyboard/kbdheb/kbdheb.rc | 0 .../dll => dll}/keyboard/kbdheb/kbdheb.spec | 0 {reactos/dll => dll}/keyboard/kbdhu/kbdhu.c | 0 .../dll => dll}/keyboard/kbdhu/kbdhu.rbuild | 0 {reactos/dll => dll}/keyboard/kbdhu/kbdhu.rc | 0 .../dll => dll}/keyboard/kbdhu/kbdhu.spec | 0 {reactos/dll => dll}/keyboard/kbdic/kbdic.c | 0 .../dll => dll}/keyboard/kbdic/kbdic.rbuild | 0 {reactos/dll => dll}/keyboard/kbdic/kbdic.rc | 0 .../dll => dll}/keyboard/kbdic/kbdic.spec | 0 .../dll => dll}/keyboard/kbdinasa/kbdinasa.c | 0 .../keyboard/kbdinasa/kbdinasa.rbuild | 0 .../dll => dll}/keyboard/kbdinasa/kbdinasa.rc | 0 .../keyboard/kbdinasa/kbdinasa.spec | 0 .../dll => dll}/keyboard/kbdinben/kbdinben.c | 0 .../keyboard/kbdinben/kbdinben.rbuild | 0 .../dll => dll}/keyboard/kbdinben/kbdinben.rc | 0 .../keyboard/kbdinben/kbdinben.spec | 0 .../dll => dll}/keyboard/kbdindev/kbdindev.c | 0 .../keyboard/kbdindev/kbdindev.rbuild | 0 .../dll => dll}/keyboard/kbdindev/kbdindev.rc | 0 .../keyboard/kbdindev/kbdindev.spec | 0 .../dll => dll}/keyboard/kbdinguj/kbdinguj.c | 0 .../keyboard/kbdinguj/kbdinguj.rbuild | 0 .../dll => dll}/keyboard/kbdinguj/kbdinguj.rc | 0 .../keyboard/kbdinguj/kbdinguj.spec | 0 .../dll => dll}/keyboard/kbdinmal/kbdinmal.c | 0 .../keyboard/kbdinmal/kbdinmal.rbuild | 0 .../dll => dll}/keyboard/kbdinmal/kbdinmal.rc | 0 .../keyboard/kbdinmal/kbdinmal.spec | 0 {reactos/dll => dll}/keyboard/kbdir/kbdir.c | 0 .../dll => dll}/keyboard/kbdir/kbdir.rbuild | 0 {reactos/dll => dll}/keyboard/kbdir/kbdir.rc | 0 .../dll => dll}/keyboard/kbdir/kbdir.spec | 0 {reactos/dll => dll}/keyboard/kbdit/kbdit.c | 0 .../dll => dll}/keyboard/kbdit/kbdit.rbuild | 0 {reactos/dll => dll}/keyboard/kbdit/kbdit.rc | 0 .../dll => dll}/keyboard/kbdit/kbdit.spec | 0 {reactos/dll => dll}/keyboard/kbdja/kbdja.c | 0 .../dll => dll}/keyboard/kbdja/kbdja.rbuild | 0 {reactos/dll => dll}/keyboard/kbdja/kbdja.rc | 0 .../dll => dll}/keyboard/kbdja/kbdja.spec | 0 {reactos/dll => dll}/keyboard/kbdkaz/kbdkaz.c | 0 .../dll => dll}/keyboard/kbdkaz/kbdkaz.rbuild | 0 .../dll => dll}/keyboard/kbdkaz/kbdkaz.rc | 0 .../dll => dll}/keyboard/kbdkaz/kbdkaz.spec | 0 {reactos/dll => dll}/keyboard/kbdko/kbdko.c | 0 .../dll => dll}/keyboard/kbdko/kbdko.rbuild | 0 {reactos/dll => dll}/keyboard/kbdko/kbdko.rc | 0 .../dll => dll}/keyboard/kbdko/kbdko.spec | 0 {reactos/dll => dll}/keyboard/kbdla/kbdla.c | 0 .../dll => dll}/keyboard/kbdla/kbdla.rbuild | 0 {reactos/dll => dll}/keyboard/kbdla/kbdla.rc | 0 .../dll => dll}/keyboard/kbdla/kbdla.spec | 0 {reactos/dll => dll}/keyboard/kbdlt/kbdlt.c | 0 .../dll => dll}/keyboard/kbdlt/kbdlt.rbuild | 0 {reactos/dll => dll}/keyboard/kbdlt/kbdlt.rc | 0 .../dll => dll}/keyboard/kbdlt/kbdlt.spec | 0 {reactos/dll => dll}/keyboard/kbdlv/kbdlv.c | 0 .../dll => dll}/keyboard/kbdlv/kbdlv.rbuild | 0 {reactos/dll => dll}/keyboard/kbdlv/kbdlv.rc | 0 .../dll => dll}/keyboard/kbdlv/kbdlv.spec | 0 {reactos/dll => dll}/keyboard/kbdmac/kbdmac.c | 0 .../dll => dll}/keyboard/kbdmac/kbdmac.rbuild | 0 .../dll => dll}/keyboard/kbdmac/kbdmac.rc | 0 .../dll => dll}/keyboard/kbdmac/kbdmac.spec | 0 {reactos/dll => dll}/keyboard/kbdne/kbdne.c | 0 .../dll => dll}/keyboard/kbdne/kbdne.rbuild | 0 {reactos/dll => dll}/keyboard/kbdne/kbdne.rc | 0 .../dll => dll}/keyboard/kbdne/kbdne.spec | 0 {reactos/dll => dll}/keyboard/kbdno/kbdno.c | 0 .../dll => dll}/keyboard/kbdno/kbdno.rbuild | 0 {reactos/dll => dll}/keyboard/kbdno/kbdno.rc | 0 .../dll => dll}/keyboard/kbdno/kbdno.spec | 0 {reactos/dll => dll}/keyboard/kbdpl1/kbdpl1.c | 0 .../dll => dll}/keyboard/kbdpl1/kbdpl1.rbuild | 0 .../dll => dll}/keyboard/kbdpl1/kbdpl1.rc | 0 .../dll => dll}/keyboard/kbdpl1/kbdpl1.spec | 0 {reactos/dll => dll}/keyboard/kbdpo/kbdpo.c | 0 .../dll => dll}/keyboard/kbdpo/kbdpo.rbuild | 0 {reactos/dll => dll}/keyboard/kbdpo/kbdpo.rc | 0 .../dll => dll}/keyboard/kbdpo/kbdpo.spec | 0 {reactos/dll => dll}/keyboard/kbdro/kbdro.c | 0 .../dll => dll}/keyboard/kbdro/kbdro.rbuild | 0 {reactos/dll => dll}/keyboard/kbdro/kbdro.rc | 0 .../dll => dll}/keyboard/kbdro/kbdro.spec | 0 {reactos/dll => dll}/keyboard/kbdru/kbdru.c | 0 .../dll => dll}/keyboard/kbdru/kbdru.rbuild | 0 {reactos/dll => dll}/keyboard/kbdru/kbdru.rc | 0 .../dll => dll}/keyboard/kbdru/kbdru.spec | 0 {reactos/dll => dll}/keyboard/kbdru1/kbdru1.c | 0 .../dll => dll}/keyboard/kbdru1/kbdru1.rbuild | 0 .../dll => dll}/keyboard/kbdru1/kbdru1.rc | 0 .../dll => dll}/keyboard/kbdru1/kbdru1.spec | 0 {reactos/dll => dll}/keyboard/kbdsg/kbdsg.c | 0 .../dll => dll}/keyboard/kbdsg/kbdsg.rbuild | 0 {reactos/dll => dll}/keyboard/kbdsg/kbdsg.rc | 0 .../dll => dll}/keyboard/kbdsg/kbdsg.spec | 0 {reactos/dll => dll}/keyboard/kbdsk/kbdsk.c | 0 .../dll => dll}/keyboard/kbdsk/kbdsk.rbuild | 0 {reactos/dll => dll}/keyboard/kbdsk/kbdsk.rc | 0 .../dll => dll}/keyboard/kbdsk/kbdsk.spec | 0 {reactos/dll => dll}/keyboard/kbdsk1/kbdsk1.c | 0 .../dll => dll}/keyboard/kbdsk1/kbdsk1.rbuild | 0 .../dll => dll}/keyboard/kbdsk1/kbdsk1.rc | 0 .../dll => dll}/keyboard/kbdsk1/kbdsk1.spec | 0 {reactos/dll => dll}/keyboard/kbdsw/kbdsw.c | 0 .../dll => dll}/keyboard/kbdsw/kbdsw.rbuild | 0 {reactos/dll => dll}/keyboard/kbdsw/kbdsw.rc | 0 .../dll => dll}/keyboard/kbdsw/kbdsw.spec | 0 {reactos/dll => dll}/keyboard/kbdtat/kbdtat.c | 0 .../dll => dll}/keyboard/kbdtat/kbdtat.rbuild | 0 .../dll => dll}/keyboard/kbdtat/kbdtat.rc | 0 .../dll => dll}/keyboard/kbdtat/kbdtat.spec | 0 {reactos/dll => dll}/keyboard/kbdth0/kbdth0.c | 0 .../dll => dll}/keyboard/kbdth0/kbdth0.rbuild | 0 .../dll => dll}/keyboard/kbdth0/kbdth0.rc | 0 .../dll => dll}/keyboard/kbdth0/kbdth0.spec | 0 {reactos/dll => dll}/keyboard/kbdth1/kbdth1.c | 0 .../dll => dll}/keyboard/kbdth1/kbdth1.rbuild | 0 .../dll => dll}/keyboard/kbdth1/kbdth1.rc | 0 .../dll => dll}/keyboard/kbdth1/kbdth1.spec | 0 {reactos/dll => dll}/keyboard/kbdth2/kbdth2.c | 0 .../dll => dll}/keyboard/kbdth2/kbdth2.rbuild | 0 .../dll => dll}/keyboard/kbdth2/kbdth2.rc | 0 .../dll => dll}/keyboard/kbdth2/kbdth2.spec | 0 {reactos/dll => dll}/keyboard/kbdth3/kbdth3.c | 0 .../dll => dll}/keyboard/kbdth3/kbdth3.rbuild | 0 .../dll => dll}/keyboard/kbdth3/kbdth3.rc | 0 .../dll => dll}/keyboard/kbdth3/kbdth3.spec | 0 {reactos/dll => dll}/keyboard/kbdtuf/kbdtuf.c | 0 .../dll => dll}/keyboard/kbdtuf/kbdtuf.rbuild | 0 .../dll => dll}/keyboard/kbdtuf/kbdtuf.rc | 0 .../dll => dll}/keyboard/kbdtuf/kbdtuf.spec | 0 {reactos/dll => dll}/keyboard/kbdtuq/kbdtuq.c | 0 .../dll => dll}/keyboard/kbdtuq/kbdtuq.rbuild | 0 .../dll => dll}/keyboard/kbdtuq/kbdtuq.rc | 0 .../dll => dll}/keyboard/kbdtuq/kbdtuq.spec | 0 {reactos/dll => dll}/keyboard/kbduk/kbduk.c | 0 .../dll => dll}/keyboard/kbduk/kbduk.rbuild | 0 {reactos/dll => dll}/keyboard/kbduk/kbduk.rc | 0 .../dll => dll}/keyboard/kbduk/kbduk.spec | 0 {reactos/dll => dll}/keyboard/kbdur/kbdur.c | 0 .../dll => dll}/keyboard/kbdur/kbdur.rbuild | 0 {reactos/dll => dll}/keyboard/kbdur/kbdur.rc | 0 .../dll => dll}/keyboard/kbdur/kbdur.spec | 0 {reactos/dll => dll}/keyboard/kbdurs/kbdurs.c | 0 .../dll => dll}/keyboard/kbdurs/kbdurs.rbuild | 0 .../dll => dll}/keyboard/kbdurs/kbdurs.rc | 0 .../dll => dll}/keyboard/kbdurs/kbdurs.spec | 0 {reactos/dll => dll}/keyboard/kbdus/kbdus.c | 0 .../dll => dll}/keyboard/kbdus/kbdus.rbuild | 0 {reactos/dll => dll}/keyboard/kbdus/kbdus.rc | 0 .../dll => dll}/keyboard/kbdus/kbdus.spec | 0 {reactos/dll => dll}/keyboard/kbdusa/kbdusa.c | 0 .../dll => dll}/keyboard/kbdusa/kbdusa.rbuild | 0 .../dll => dll}/keyboard/kbdusa/kbdusa.rc | 0 .../dll => dll}/keyboard/kbdusa/kbdusa.spec | 0 {reactos/dll => dll}/keyboard/kbdusl/kbdusl.c | 0 .../dll => dll}/keyboard/kbdusl/kbdusl.rbuild | 0 .../dll => dll}/keyboard/kbdusl/kbdusl.rc | 0 .../dll => dll}/keyboard/kbdusl/kbdusl.spec | 0 {reactos/dll => dll}/keyboard/kbdusr/kbdusr.c | 0 .../dll => dll}/keyboard/kbdusr/kbdusr.rbuild | 0 .../dll => dll}/keyboard/kbdusr/kbdusr.rc | 0 .../dll => dll}/keyboard/kbdusr/kbdusr.spec | 0 {reactos/dll => dll}/keyboard/kbdusx/kbdusx.c | 0 .../dll => dll}/keyboard/kbdusx/kbdusx.rbuild | 0 .../dll => dll}/keyboard/kbdusx/kbdusx.rc | 0 .../dll => dll}/keyboard/kbdusx/kbdusx.spec | 0 {reactos/dll => dll}/keyboard/kbduzb/kbduzb.c | 0 .../dll => dll}/keyboard/kbduzb/kbduzb.rbuild | 0 .../dll => dll}/keyboard/kbduzb/kbduzb.rc | 0 .../dll => dll}/keyboard/kbduzb/kbduzb.spec | 0 .../dll => dll}/keyboard/kbdvntc/kbdvntc.c | 0 .../keyboard/kbdvntc/kbdvntc.rbuild | 0 .../dll => dll}/keyboard/kbdvntc/kbdvntc.rc | 0 .../dll => dll}/keyboard/kbdvntc/kbdvntc.spec | 0 {reactos/dll => dll}/keyboard/kbdycc/kbdycc.c | 0 .../dll => dll}/keyboard/kbdycc/kbdycc.rbuild | 0 .../dll => dll}/keyboard/kbdycc/kbdycc.rc | 0 .../dll => dll}/keyboard/kbdycc/kbdycc.spec | 0 {reactos/dll => dll}/keyboard/kbdycl/kbdycl.c | 0 .../dll => dll}/keyboard/kbdycl/kbdycl.rbuild | 0 .../dll => dll}/keyboard/kbdycl/kbdycl.rc | 0 .../dll => dll}/keyboard/kbdycl/kbdycl.spec | 0 {reactos/dll => dll}/keyboard/keyboard.rbuild | 0 {reactos/dll => dll}/nls/idndl/idndl.cpp | 0 {reactos/dll => dll}/nls/idndl/idndl.def | 0 {reactos/dll => dll}/nls/idndl/idndl.rbuild | 0 .../nls/idndl_redist/data/genidldndata.cpp | 0 .../nls/idndl_redist/data/idldata.cpp | 0 .../dll => dll}/nls/idndl_redist/idndl.cpp | 0 .../dll => dll}/nls/idndl_redist/idndl.def | 0 .../nls/idndl_redist/idndl_redist.rbuild | 0 .../dll => dll}/nls/idndl_redist/stubs.cpp | 0 {reactos/dll => dll}/nls/nls.rbuild | 0 {reactos/dll => dll}/nls/normaliz/dummy.c | 0 .../dll => dll}/nls/normaliz/normaliz.def | 0 .../dll => dll}/nls/normaliz/normaliz.rbuild | 0 .../nls/normaliz_redist/data/icudt38.c | 0 .../nls/normaliz_redist/data/icudt38.lst | 0 .../nls/normaliz_redist/normaliz.cpp | 0 .../nls/normaliz_redist/normaliz.def | 0 .../normaliz_redist/normaliz_redist.rbuild | 0 {reactos/dll => dll}/ntdll/Doxyfile | 0 {reactos/dll => dll}/ntdll/csr/api.c | 0 {reactos/dll => dll}/ntdll/csr/capture.c | 0 {reactos/dll => dll}/ntdll/csr/connect.c | 0 {reactos/dll => dll}/ntdll/dbg/dbgui.c | 0 {reactos/dll => dll}/ntdll/def/ntdll.rc | 0 {reactos/dll => dll}/ntdll/def/ntdll_arm.def | 0 {reactos/dll => dll}/ntdll/def/ntdll_i386.def | 0 .../ntdll/dispatch/arm/stubs_asm.s | 0 .../dll => dll}/ntdll/dispatch/dispatch.c | 0 .../ntdll/dispatch/i386/dispatch.S | 0 {reactos/dll => dll}/ntdll/include/ntdll.h | 0 {reactos/dll => dll}/ntdll/include/ntdllp.h | 0 {reactos/dll => dll}/ntdll/ldr/elf.c | 0 {reactos/dll => dll}/ntdll/ldr/startup.c | 0 {reactos/dll => dll}/ntdll/ldr/utils.c | 0 {reactos/dll => dll}/ntdll/ntdll.rbuild | 0 {reactos/dll => dll}/ntdll/rtl/libsupp.c | 0 {reactos/dll => dll}/ntdll/rtl/version.c | 0 .../dll => dll}/shellext/deskadp/deskadp.c | 0 .../dll => dll}/shellext/deskadp/deskadp.h | 0 .../shellext/deskadp/deskadp.rbuild | 0 .../dll => dll}/shellext/deskadp/deskadp.rc | 0 .../dll => dll}/shellext/deskadp/deskadp.spec | 0 .../shellext/deskadp/lang/bg-BG.rc | 0 .../shellext/deskadp/lang/cs-CZ.rc | 0 .../shellext/deskadp/lang/de-DE.rc | 0 .../shellext/deskadp/lang/el-GR.rc | 0 .../shellext/deskadp/lang/en-US.rc | 0 .../shellext/deskadp/lang/es-ES.rc | 0 .../shellext/deskadp/lang/eu-ES.rc | 0 .../shellext/deskadp/lang/fr-FR.rc | 0 .../shellext/deskadp/lang/it-IT.rc | 0 .../shellext/deskadp/lang/no-NO.rc | 0 .../shellext/deskadp/lang/pl-PL.rc | 0 .../shellext/deskadp/lang/ru-RU.rc | 0 .../shellext/deskadp/lang/sk-SK.rc | 0 .../shellext/deskadp/lang/uk-UA.rc | 0 .../dll => dll}/shellext/deskadp/precomp.h | 0 .../dll => dll}/shellext/deskadp/resource.h | 0 {reactos/dll => dll}/shellext/deskadp/rsrc.rc | 0 .../dll => dll}/shellext/deskadp/shxiface.c | 0 .../dll => dll}/shellext/deskmon/deskmon.c | 0 .../dll => dll}/shellext/deskmon/deskmon.h | 0 .../shellext/deskmon/deskmon.rbuild | 0 .../dll => dll}/shellext/deskmon/deskmon.rc | 0 .../dll => dll}/shellext/deskmon/deskmon.spec | 0 .../shellext/deskmon/lang/bg-BG.rc | 0 .../shellext/deskmon/lang/cs-CZ.rc | 0 .../shellext/deskmon/lang/de-DE.rc | 0 .../shellext/deskmon/lang/el-GR.rc | 0 .../shellext/deskmon/lang/en-US.rc | 0 .../shellext/deskmon/lang/es-ES.rc | 0 .../shellext/deskmon/lang/eu-ES.rc | 0 .../shellext/deskmon/lang/fr-FR.rc | 0 .../shellext/deskmon/lang/it-IT.rc | 0 .../shellext/deskmon/lang/no-NO.rc | 0 .../shellext/deskmon/lang/pl-PL.rc | 0 .../shellext/deskmon/lang/ru-RU.rc | 0 .../shellext/deskmon/lang/sk-SK.rc | 0 .../shellext/deskmon/lang/uk-UA.rc | 0 .../dll => dll}/shellext/deskmon/precomp.h | 0 .../dll => dll}/shellext/deskmon/resource.h | 0 {reactos/dll => dll}/shellext/deskmon/rsrc.rc | 0 .../dll => dll}/shellext/deskmon/shxiface.c | 0 .../dll => dll}/shellext/devcpux/devcpux.def | 0 .../shellext/devcpux/devcpux.rbuild | 0 .../dll => dll}/shellext/devcpux/processor.c | 0 .../dll => dll}/shellext/devcpux/processor.rc | 0 .../dll => dll}/shellext/devcpux/resource.h | 0 .../dll => dll}/shellext/fontext/fontext.c | 0 .../dll => dll}/shellext/fontext/fontext.h | 0 .../shellext/fontext/fontext.rbuild | 0 .../dll => dll}/shellext/fontext/fontext.rc | 0 .../dll => dll}/shellext/fontext/fontext.spec | 0 .../shellext/fontext/lang/en-US.rc | 0 .../dll => dll}/shellext/fontext/regsvr.c | 0 .../dll => dll}/shellext/fontext/resource.h | 0 {reactos/dll => dll}/shellext/fontext/rsrc.rc | 0 {reactos/dll => dll}/shellext/shellext.rbuild | 0 .../dll => dll}/shellext/slayer/lang/bg-BG.rc | 0 .../dll => dll}/shellext/slayer/lang/cs-CZ.rc | 0 .../dll => dll}/shellext/slayer/lang/de-DE.rc | 0 .../dll => dll}/shellext/slayer/lang/en-US.rc | 0 .../dll => dll}/shellext/slayer/lang/es-ES.rc | 0 .../dll => dll}/shellext/slayer/lang/eu-ES.rc | 0 .../dll => dll}/shellext/slayer/lang/fr-FR.rc | 0 .../dll => dll}/shellext/slayer/lang/hu-HU.rc | 0 .../dll => dll}/shellext/slayer/lang/id-ID.rc | 0 .../dll => dll}/shellext/slayer/lang/it-IT.rc | 0 .../dll => dll}/shellext/slayer/lang/nl-NL.rc | 0 .../dll => dll}/shellext/slayer/lang/no-NO.rc | 0 .../dll => dll}/shellext/slayer/lang/pl-PL.rc | 0 .../dll => dll}/shellext/slayer/lang/ru-RU.rc | 0 .../dll => dll}/shellext/slayer/lang/sk-SK.rc | 0 .../dll => dll}/shellext/slayer/lang/sv-SE.rc | 0 .../dll => dll}/shellext/slayer/lang/uk-UA.rc | 0 .../dll => dll}/shellext/slayer/precomp.h | 0 .../dll => dll}/shellext/slayer/resource.h | 0 {reactos/dll => dll}/shellext/slayer/rsrc.rc | 0 {reactos/dll => dll}/shellext/slayer/slayer.c | 0 .../dll => dll}/shellext/slayer/slayer.def | 0 {reactos/dll => dll}/shellext/slayer/slayer.h | 0 .../dll => dll}/shellext/slayer/slayer.rbuild | 0 .../dll => dll}/shellext/slayer/slayer.rc | 0 {reactos/dll => dll}/win32/acledit/acledit.c | 0 .../dll => dll}/win32/acledit/acledit.rbuild | 0 {reactos/dll => dll}/win32/acledit/acledit.rc | 0 .../dll => dll}/win32/acledit/acledit.spec | 0 .../dll => dll}/win32/acledit/acleditint.h | 0 {reactos/dll => dll}/win32/acledit/resource.h | 0 {reactos/dll => dll}/win32/acledit/stubs.c | 0 {reactos/dll => dll}/win32/aclui/aclui.c | 0 {reactos/dll => dll}/win32/aclui/aclui.rbuild | 0 {reactos/dll => dll}/win32/aclui/aclui.rc | 0 {reactos/dll => dll}/win32/aclui/aclui.spec | 0 {reactos/dll => dll}/win32/aclui/aclui_Bg.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_De.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_El.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_En.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Es.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Fr.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Hu.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Id.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_It.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Ja.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Nl.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_No.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Pl.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Ru.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Sv.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Th.rc | 0 {reactos/dll => dll}/win32/aclui/aclui_Uk.rc | 0 {reactos/dll => dll}/win32/aclui/checklist.c | 0 {reactos/dll => dll}/win32/aclui/guid.c | 0 {reactos/dll => dll}/win32/aclui/misc.c | 0 {reactos/dll => dll}/win32/aclui/precomp.h | 0 .../dll => dll}/win32/aclui/res/usrgrp.bmp | Bin {reactos/dll => dll}/win32/aclui/resource.h | 0 {reactos/dll => dll}/win32/aclui/sidcache.c | 0 .../dll => dll}/win32/advapi32/advapi32.def | 0 .../dll => dll}/win32/advapi32/advapi32.h | 0 .../win32/advapi32/advapi32.rbuild | 0 .../dll => dll}/win32/advapi32/advapi32.rc | 0 .../dll => dll}/win32/advapi32/crypt/crypt.c | 0 .../dll => dll}/win32/advapi32/crypt/crypt.h | 0 .../win32/advapi32/crypt/crypt_arc4.c | 0 .../win32/advapi32/crypt/crypt_des.c | 0 .../win32/advapi32/crypt/crypt_lmhash.c | 0 .../win32/advapi32/crypt/crypt_md4.c | 0 .../win32/advapi32/crypt/crypt_md5.c | 0 .../win32/advapi32/crypt/crypt_sha.c | 0 .../dll => dll}/win32/advapi32/misc/dllmain.c | 0 .../win32/advapi32/misc/hwprofiles.c | 0 .../dll => dll}/win32/advapi32/misc/logon.c | 0 .../dll => dll}/win32/advapi32/misc/msi.c | 0 .../win32/advapi32/misc/shutdown.c | 0 .../dll => dll}/win32/advapi32/misc/sysfunc.c | 0 .../dll => dll}/win32/advapi32/misc/trace.c | 0 {reactos/dll => dll}/win32/advapi32/reg/reg.c | 0 {reactos/dll => dll}/win32/advapi32/sec/ac.c | 0 .../dll => dll}/win32/advapi32/sec/audit.c | 0 .../dll => dll}/win32/advapi32/sec/cred.c | 0 {reactos/dll => dll}/win32/advapi32/sec/lsa.c | 0 .../dll => dll}/win32/advapi32/sec/misc.c | 0 {reactos/dll => dll}/win32/advapi32/sec/sec.c | 0 {reactos/dll => dll}/win32/advapi32/sec/sid.c | 0 .../dll => dll}/win32/advapi32/sec/trustee.c | 0 .../win32/advapi32/service/eventlog.c | 0 .../dll => dll}/win32/advapi32/service/rpc.c | 0 .../dll => dll}/win32/advapi32/service/scm.c | 0 .../win32/advapi32/service/sctrl.c | 0 .../win32/advapi32/token/privilege.c | 0 .../dll => dll}/win32/advapi32/token/token.c | 0 {reactos/dll => dll}/win32/advpack/advpack.c | 0 .../dll => dll}/win32/advpack/advpack.rbuild | 0 .../dll => dll}/win32/advpack/advpack.spec | 0 .../win32/advpack/advpack_private.h | 0 {reactos/dll => dll}/win32/advpack/files.c | 0 {reactos/dll => dll}/win32/advpack/install.c | 0 {reactos/dll => dll}/win32/advpack/reg.c | 0 {reactos/dll => dll}/win32/atl/atl.rbuild | 0 {reactos/dll => dll}/win32/atl/atl.rgs | 0 {reactos/dll => dll}/win32/atl/atl.spec | 0 {reactos/dll => dll}/win32/atl/atl_ax.c | 0 {reactos/dll => dll}/win32/atl/atl_main.c | 0 {reactos/dll => dll}/win32/atl/atlbase.h | 0 {reactos/dll => dll}/win32/atl/atliface.idl | 0 {reactos/dll => dll}/win32/atl/atlwin.h | 0 {reactos/dll => dll}/win32/atl/registrar.c | 0 {reactos/dll => dll}/win32/atl/rsrc.rc | 0 {reactos/dll => dll}/win32/authz/authz.c | 0 {reactos/dll => dll}/win32/authz/authz.def | 0 {reactos/dll => dll}/win32/authz/authz.rbuild | 0 {reactos/dll => dll}/win32/authz/authz.rc | 0 {reactos/dll => dll}/win32/authz/clictx.c | 0 {reactos/dll => dll}/win32/authz/precomp.h | 0 {reactos/dll => dll}/win32/authz/resman.c | 0 .../dll => dll}/win32/avifil32/acmstream.c | 0 {reactos/dll => dll}/win32/avifil32/api.c | 0 .../win32/avifil32/avifil32.rbuild | 0 .../dll => dll}/win32/avifil32/avifil32.spec | 0 .../win32/avifil32/avifil32_ros.diff | 0 {reactos/dll => dll}/win32/avifil32/avifile.c | 0 .../dll => dll}/win32/avifil32/avifile.spec | 0 .../dll => dll}/win32/avifil32/avifile_Cs.rc | 0 .../dll => dll}/win32/avifil32/avifile_Da.rc | 0 .../dll => dll}/win32/avifil32/avifile_De.rc | 0 .../dll => dll}/win32/avifil32/avifile_En.rc | 0 .../dll => dll}/win32/avifil32/avifile_Es.rc | 0 .../dll => dll}/win32/avifil32/avifile_Fr.rc | 0 .../dll => dll}/win32/avifil32/avifile_Hu.rc | 0 .../dll => dll}/win32/avifil32/avifile_It.rc | 0 .../dll => dll}/win32/avifil32/avifile_Ja.rc | 0 .../dll => dll}/win32/avifil32/avifile_Ko.rc | 0 .../dll => dll}/win32/avifil32/avifile_Nl.rc | 0 .../dll => dll}/win32/avifil32/avifile_No.rc | 0 .../dll => dll}/win32/avifil32/avifile_Pl.rc | 0 .../dll => dll}/win32/avifil32/avifile_Pt.rc | 0 .../dll => dll}/win32/avifil32/avifile_Ru.rc | 0 .../dll => dll}/win32/avifil32/avifile_Si.rc | 0 .../dll => dll}/win32/avifil32/avifile_Sv.rc | 0 .../dll => dll}/win32/avifil32/avifile_Tr.rc | 0 .../dll => dll}/win32/avifil32/avifile_Uk.rc | 0 .../win32/avifil32/avifile_private.h | 0 .../dll => dll}/win32/avifil32/editstream.c | 0 .../dll => dll}/win32/avifil32/extrachunk.c | 0 .../dll => dll}/win32/avifil32/extrachunk.h | 0 {reactos/dll => dll}/win32/avifil32/factory.c | 0 .../dll => dll}/win32/avifil32/getframe.c | 0 .../dll => dll}/win32/avifil32/icmstream.c | 0 {reactos/dll => dll}/win32/avifil32/regsvr.c | 0 {reactos/dll => dll}/win32/avifil32/rsrc.rc | 0 {reactos/dll => dll}/win32/avifil32/tmpfile.c | 0 {reactos/dll => dll}/win32/avifil32/wavfile.c | 0 .../dll => dll}/win32/beepmidi/beepmidi.c | 0 .../dll => dll}/win32/beepmidi/beepmidi.def | 0 .../win32/beepmidi/beepmidi.rbuild | 0 .../dll => dll}/win32/beepmidi/readme.txt | 0 .../dll => dll}/win32/browseui/aclmulti.c | 0 .../dll => dll}/win32/browseui/bandsite.c | 0 .../dll => dll}/win32/browseui/bandsitemenu.c | 0 .../dll => dll}/win32/browseui/browseui.h | 0 .../win32/browseui/browseui.rbuild | 0 .../dll => dll}/win32/browseui/browseui.spec | 0 .../win32/browseui/browseui_main.c | 0 .../win32/browseui/browseui_ros.diff | 0 {reactos/dll => dll}/win32/browseui/regsvr.c | 0 .../dll => dll}/win32/browseui/version.rc | 0 {reactos/dll => dll}/win32/cabinet/cabinet.h | 0 .../dll => dll}/win32/cabinet/cabinet.rbuild | 0 {reactos/dll => dll}/win32/cabinet/cabinet.rc | 0 .../dll => dll}/win32/cabinet/cabinet.spec | 0 .../dll => dll}/win32/cabinet/cabinet_main.c | 0 {reactos/dll => dll}/win32/cabinet/fci.c | 0 {reactos/dll => dll}/win32/cabinet/fdi.c | 0 {reactos/dll => dll}/win32/cards/cards.c | 0 {reactos/dll => dll}/win32/cards/cards.h | 0 {reactos/dll => dll}/win32/cards/cards.rbuild | 0 {reactos/dll => dll}/win32/cards/cards.rc | 0 {reactos/dll => dll}/win32/cards/cards.spec | 0 .../win32/cards/res/bavarian/Eichel10.bmp | Bin .../win32/cards/res/bavarian/Eichel2.bmp | Bin .../win32/cards/res/bavarian/Eichel3.bmp | Bin .../win32/cards/res/bavarian/Eichel4.bmp | Bin .../win32/cards/res/bavarian/Eichel5.bmp | Bin .../win32/cards/res/bavarian/Eichel6.bmp | Bin .../win32/cards/res/bavarian/Eichel7.bmp | Bin .../win32/cards/res/bavarian/Eichel8.bmp | Bin .../win32/cards/res/bavarian/Eichel9.bmp | Bin .../win32/cards/res/bavarian/EichelAs.bmp | Bin .../win32/cards/res/bavarian/EichelKoenig.bmp | Bin .../win32/cards/res/bavarian/EichelOber.bmp | Bin .../win32/cards/res/bavarian/EichelUnter.bmp | Bin .../win32/cards/res/bavarian/FreeCard.bmp | Bin .../win32/cards/res/bavarian/Gras10.bmp | Bin .../win32/cards/res/bavarian/Gras2.bmp | Bin .../win32/cards/res/bavarian/Gras3.bmp | Bin .../win32/cards/res/bavarian/Gras4.bmp | Bin .../win32/cards/res/bavarian/Gras5.bmp | Bin .../win32/cards/res/bavarian/Gras6.bmp | Bin .../win32/cards/res/bavarian/Gras7.bmp | Bin .../win32/cards/res/bavarian/Gras8.bmp | Bin .../win32/cards/res/bavarian/Gras9.bmp | Bin .../win32/cards/res/bavarian/GrasAs.bmp | Bin .../win32/cards/res/bavarian/GrasKoenig.bmp | Bin .../win32/cards/res/bavarian/GrasOber.bmp | Bin .../win32/cards/res/bavarian/GrasUnter.bmp | Bin .../win32/cards/res/bavarian/Herz10.bmp | Bin .../win32/cards/res/bavarian/Herz2.bmp | Bin .../win32/cards/res/bavarian/Herz3.bmp | Bin .../win32/cards/res/bavarian/Herz4.bmp | Bin .../win32/cards/res/bavarian/Herz5.bmp | Bin .../win32/cards/res/bavarian/Herz6.bmp | Bin .../win32/cards/res/bavarian/Herz7.bmp | Bin .../win32/cards/res/bavarian/Herz8.bmp | Bin .../win32/cards/res/bavarian/Herz9.bmp | Bin .../win32/cards/res/bavarian/HerzAs.bmp | Bin .../win32/cards/res/bavarian/HerzKoenig.bmp | Bin .../win32/cards/res/bavarian/HerzOber.bmp | Bin .../win32/cards/res/bavarian/HerzUnter.bmp | Bin .../win32/cards/res/bavarian/Joker.bmp | Bin .../win32/cards/res/bavarian/OSign.bmp | Bin .../win32/cards/res/bavarian/Ruecken.bmp | Bin .../win32/cards/res/bavarian/Schellen10.bmp | Bin .../win32/cards/res/bavarian/Schellen2.bmp | Bin .../win32/cards/res/bavarian/Schellen3.bmp | Bin .../win32/cards/res/bavarian/Schellen4.bmp | Bin .../win32/cards/res/bavarian/Schellen5.bmp | Bin .../win32/cards/res/bavarian/Schellen6.bmp | Bin .../win32/cards/res/bavarian/Schellen7.bmp | Bin .../win32/cards/res/bavarian/Schellen8.bmp | Bin .../win32/cards/res/bavarian/Schellen9.bmp | Bin .../win32/cards/res/bavarian/SchellenAs.bmp | Bin .../cards/res/bavarian/SchellenKoenig.bmp | Bin .../win32/cards/res/bavarian/SchellenOber.bmp | Bin .../cards/res/bavarian/SchellenUnter.bmp | Bin .../win32/cards/res/bavarian/XSign.bmp | Bin .../win32/cards/res/default/Background_1.bmp | Bin .../win32/cards/res/default/Background_10.bmp | Bin .../win32/cards/res/default/Background_11.bmp | Bin .../win32/cards/res/default/Background_12.bmp | Bin .../win32/cards/res/default/Background_2.bmp | Bin .../win32/cards/res/default/Background_3.bmp | Bin .../win32/cards/res/default/Background_4.bmp | Bin .../win32/cards/res/default/Background_5.bmp | Bin .../win32/cards/res/default/Background_6.bmp | Bin .../win32/cards/res/default/Background_7.bmp | Bin .../win32/cards/res/default/Background_8.bmp | Bin .../win32/cards/res/default/Background_9.bmp | Bin .../win32/cards/res/default/Clubs_Ace.bmp | Bin .../win32/cards/res/default/Clubs_Eight.bmp | Bin .../win32/cards/res/default/Clubs_Five.bmp | Bin .../win32/cards/res/default/Clubs_Four.bmp | Bin .../win32/cards/res/default/Clubs_Jack.bmp | Bin .../win32/cards/res/default/Clubs_King.bmp | Bin .../win32/cards/res/default/Clubs_Nine.bmp | Bin .../win32/cards/res/default/Clubs_Queen.bmp | Bin .../win32/cards/res/default/Clubs_Seven.bmp | Bin .../win32/cards/res/default/Clubs_Six.bmp | Bin .../win32/cards/res/default/Clubs_Ten.bmp | Bin .../win32/cards/res/default/Clubs_Three.bmp | Bin .../win32/cards/res/default/Clubs_Two.bmp | Bin .../win32/cards/res/default/Diamonds_Ace.bmp | Bin .../cards/res/default/Diamonds_Eight.bmp | Bin .../win32/cards/res/default/Diamonds_Five.bmp | Bin .../win32/cards/res/default/Diamonds_Four.bmp | Bin .../win32/cards/res/default/Diamonds_Jack.bmp | Bin .../win32/cards/res/default/Diamonds_King.bmp | Bin .../win32/cards/res/default/Diamonds_Nine.bmp | Bin .../cards/res/default/Diamonds_Queen.bmp | Bin .../cards/res/default/Diamonds_Seven.bmp | Bin .../win32/cards/res/default/Diamonds_Six.bmp | Bin .../win32/cards/res/default/Diamonds_Ten.bmp | Bin .../cards/res/default/Diamonds_Three.bmp | Bin .../win32/cards/res/default/Diamonds_Two.bmp | Bin .../win32/cards/res/default/FreeCard.bmp | Bin .../win32/cards/res/default/Hearts_Ace.bmp | Bin .../win32/cards/res/default/Hearts_Eight.bmp | Bin .../win32/cards/res/default/Hearts_Five.bmp | Bin .../win32/cards/res/default/Hearts_Four.bmp | Bin .../win32/cards/res/default/Hearts_Jack.bmp | Bin .../win32/cards/res/default/Hearts_King.bmp | Bin .../win32/cards/res/default/Hearts_Nine.bmp | Bin .../win32/cards/res/default/Hearts_Queen.bmp | Bin .../win32/cards/res/default/Hearts_Seven.bmp | Bin .../win32/cards/res/default/Hearts_Six.bmp | Bin .../win32/cards/res/default/Hearts_Ten.bmp | Bin .../win32/cards/res/default/Hearts_Three.bmp | Bin .../win32/cards/res/default/Hearts_Two.bmp | Bin .../win32/cards/res/default/Joker.bmp | Bin .../win32/cards/res/default/OSign.bmp | Bin .../win32/cards/res/default/Spades_Ace.bmp | Bin .../win32/cards/res/default/Spades_Eight.bmp | Bin .../win32/cards/res/default/Spades_Five.bmp | Bin .../win32/cards/res/default/Spades_Four.bmp | Bin .../win32/cards/res/default/Spades_Jack.bmp | Bin .../win32/cards/res/default/Spades_King.bmp | Bin .../win32/cards/res/default/Spades_Nine.bmp | Bin .../win32/cards/res/default/Spades_Queen.bmp | Bin .../win32/cards/res/default/Spades_Seven.bmp | Bin .../win32/cards/res/default/Spades_Six.bmp | Bin .../win32/cards/res/default/Spades_Ten.bmp | Bin .../win32/cards/res/default/Spades_Three.bmp | Bin .../win32/cards/res/default/Spades_Two.bmp | Bin .../win32/cards/res/default/XSign.bmp | Bin .../dll => dll}/win32/cfgmgr32/cfgmgr32.def | 0 .../win32/cfgmgr32/cfgmgr32.rbuild | 0 .../dll => dll}/win32/cfgmgr32/cfgmgr32.rc | 0 {reactos/dll => dll}/win32/clusapi/clusapi.c | 0 .../dll => dll}/win32/clusapi/clusapi.rbuild | 0 .../dll => dll}/win32/clusapi/clusapi.spec | 0 .../dll => dll}/win32/comcat/comcat.rbuild | 0 {reactos/dll => dll}/win32/comcat/comcat.spec | 0 .../dll => dll}/win32/comcat/comcat_main.c | 0 .../dll => dll}/win32/comcat/comcat_private.h | 0 {reactos/dll => dll}/win32/comcat/factory.c | 0 .../dll => dll}/win32/comcat/information.c | 0 {reactos/dll => dll}/win32/comcat/manager.c | 0 {reactos/dll => dll}/win32/comcat/register.c | 0 {reactos/dll => dll}/win32/comcat/regsvr.c | 0 {reactos/dll => dll}/win32/comcat/version.rc | 0 {reactos/dll => dll}/win32/comctl32/animate.c | 0 {reactos/dll => dll}/win32/comctl32/comboex.c | 0 .../dll => dll}/win32/comctl32/comctl32.h | 0 .../win32/comctl32/comctl32.rbuild | 0 .../dll => dll}/win32/comctl32/comctl32.spec | 0 .../win32/comctl32/comctl32_ros.diff | 0 .../win32/comctl32/comctl32undoc.c | 0 .../dll => dll}/win32/comctl32/comctl_Bg.rc | 0 .../dll => dll}/win32/comctl32/comctl_Cn.rc | 0 .../dll => dll}/win32/comctl32/comctl_Cs.rc | 0 .../dll => dll}/win32/comctl32/comctl_De.rc | 0 .../dll => dll}/win32/comctl32/comctl_El.rc | 0 .../dll => dll}/win32/comctl32/comctl_En.rc | 0 .../dll => dll}/win32/comctl32/comctl_Eo.rc | 0 .../dll => dll}/win32/comctl32/comctl_Es.rc | 0 .../dll => dll}/win32/comctl32/comctl_Fr.rc | 0 .../dll => dll}/win32/comctl32/comctl_Hu.rc | 0 .../dll => dll}/win32/comctl32/comctl_It.rc | 0 .../dll => dll}/win32/comctl32/comctl_Ja.rc | 0 .../dll => dll}/win32/comctl32/comctl_Ko.rc | 0 .../dll => dll}/win32/comctl32/comctl_Nl.rc | 0 .../dll => dll}/win32/comctl32/comctl_No.rc | 0 .../dll => dll}/win32/comctl32/comctl_Pl.rc | 0 .../dll => dll}/win32/comctl32/comctl_Pt.rc | 0 .../dll => dll}/win32/comctl32/comctl_Ro.rc | 0 .../dll => dll}/win32/comctl32/comctl_Ru.rc | 0 .../dll => dll}/win32/comctl32/comctl_Si.rc | 0 .../dll => dll}/win32/comctl32/comctl_Sv.rc | 0 .../dll => dll}/win32/comctl32/comctl_Th.rc | 0 .../dll => dll}/win32/comctl32/comctl_Tr.rc | 0 .../dll => dll}/win32/comctl32/comctl_Uk.rc | 0 .../dll => dll}/win32/comctl32/commctrl.c | 0 .../dll => dll}/win32/comctl32/datetime.c | 0 {reactos/dll => dll}/win32/comctl32/dpa.c | 0 .../dll => dll}/win32/comctl32/draglist.c | 0 {reactos/dll => dll}/win32/comctl32/dsa.c | 0 {reactos/dll => dll}/win32/comctl32/flatsb.c | 0 {reactos/dll => dll}/win32/comctl32/header.c | 0 {reactos/dll => dll}/win32/comctl32/hotkey.c | 0 .../win32/comctl32/idb_hist_large.bmp | Bin .../win32/comctl32/idb_hist_small.bmp | Bin .../win32/comctl32/idb_std_large.bmp | Bin .../win32/comctl32/idb_std_small.bmp | Bin .../win32/comctl32/idb_view_large.bmp | Bin .../win32/comctl32/idb_view_small.bmp | Bin .../dll => dll}/win32/comctl32/idc_copy.cur | Bin .../win32/comctl32/idc_divider.cur | Bin .../win32/comctl32/idc_divideropen.cur | Bin .../win32/comctl32/idc_movebutton.cur | Bin .../win32/comctl32/idi_dragarrow.ico | Bin .../win32/comctl32/idi_tt_error_sm.ico | Bin .../win32/comctl32/idi_tt_info_sm.ico | Bin .../win32/comctl32/idi_tt_warn_sm.ico | Bin .../dll => dll}/win32/comctl32/idt_check.bmp | Bin .../dll => dll}/win32/comctl32/imagelist.c | 0 .../dll => dll}/win32/comctl32/imagelist.h | 0 .../dll => dll}/win32/comctl32/ipaddress.c | 0 .../dll => dll}/win32/comctl32/listview.c | 0 .../dll => dll}/win32/comctl32/monthcal.c | 0 .../dll => dll}/win32/comctl32/nativefont.c | 0 {reactos/dll => dll}/win32/comctl32/pager.c | 0 .../dll => dll}/win32/comctl32/progress.c | 0 .../dll => dll}/win32/comctl32/propsheet.c | 0 {reactos/dll => dll}/win32/comctl32/rebar.c | 0 {reactos/dll => dll}/win32/comctl32/rsrc.rc | 0 .../dll => dll}/win32/comctl32/smoothscroll.c | 0 {reactos/dll => dll}/win32/comctl32/status.c | 0 {reactos/dll => dll}/win32/comctl32/string.c | 0 {reactos/dll => dll}/win32/comctl32/syslink.c | 0 {reactos/dll => dll}/win32/comctl32/tab.c | 0 .../dll => dll}/win32/comctl32/theme_combo.c | 0 .../dll => dll}/win32/comctl32/theme_dialog.c | 0 .../dll => dll}/win32/comctl32/theme_edit.c | 0 .../win32/comctl32/theme_listbox.c | 0 {reactos/dll => dll}/win32/comctl32/theming.c | 0 {reactos/dll => dll}/win32/comctl32/toolbar.c | 0 .../dll => dll}/win32/comctl32/tooltips.c | 0 .../dll => dll}/win32/comctl32/trackbar.c | 0 .../dll => dll}/win32/comctl32/treeview.c | 0 {reactos/dll => dll}/win32/comctl32/updown.c | 0 {reactos/dll => dll}/win32/comdlg32/800.bmp | Bin {reactos/dll => dll}/win32/comdlg32/cdlg.h | 0 {reactos/dll => dll}/win32/comdlg32/cdlg16.h | 0 {reactos/dll => dll}/win32/comdlg32/cdlg32.c | 0 .../dll => dll}/win32/comdlg32/cdlg_Bg.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Ca.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Cn.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Cs.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Da.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_De.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_El.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_En.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Eo.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Es.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Fi.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Fr.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Hu.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_It.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Ja.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Ko.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Nl.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_No.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Pl.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Pt.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Ro.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Ru.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Si.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Sk.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Sv.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Th.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Tr.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Uk.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Wa.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_Zh.rc | 0 .../dll => dll}/win32/comdlg32/cdlg_xx.rc | 0 {reactos/dll => dll}/win32/comdlg32/cdrom.ico | Bin .../dll => dll}/win32/comdlg32/colordlg.c | 0 .../dll => dll}/win32/comdlg32/colordlg16.c | 0 .../win32/comdlg32/comdlg32.rbuild | 0 .../dll => dll}/win32/comdlg32/comdlg32.spec | 0 .../dll => dll}/win32/comdlg32/commdlg.spec | 0 {reactos/dll => dll}/win32/comdlg32/filedlg.c | 0 .../dll => dll}/win32/comdlg32/filedlg16.c | 0 .../dll => dll}/win32/comdlg32/filedlg31.c | 0 .../dll => dll}/win32/comdlg32/filedlg31.h | 0 .../win32/comdlg32/filedlgbrowser.c | 0 .../win32/comdlg32/filedlgbrowser.h | 0 .../dll => dll}/win32/comdlg32/finddlg16.c | 0 .../dll => dll}/win32/comdlg32/finddlg32.c | 0 .../dll => dll}/win32/comdlg32/floppy.ico | Bin .../dll => dll}/win32/comdlg32/folder.ico | Bin .../dll => dll}/win32/comdlg32/folder2.ico | Bin {reactos/dll => dll}/win32/comdlg32/fontdlg.c | 0 .../dll => dll}/win32/comdlg32/fontdlg16.c | 0 .../dll => dll}/win32/comdlg32/fontpics.bmp | Bin {reactos/dll => dll}/win32/comdlg32/hdisk.ico | Bin .../dll => dll}/win32/comdlg32/network.ico | Bin .../win32/comdlg32/pd32_collate.ico | Bin .../win32/comdlg32/pd32_landscape.ico | Bin .../win32/comdlg32/pd32_nocollate.ico | Bin .../win32/comdlg32/pd32_portrait.ico | Bin .../dll => dll}/win32/comdlg32/printdlg.c | 0 .../dll => dll}/win32/comdlg32/printdlg.h | 0 .../dll => dll}/win32/comdlg32/printdlg16.c | 0 {reactos/dll => dll}/win32/comdlg32/rsrc.rc | 0 .../win32/compstui/compstui.rbuild | 0 .../dll => dll}/win32/compstui/compstui.spec | 0 .../win32/compstui/compstui_main.c | 0 {reactos/dll => dll}/win32/credui/banner.bmp | Bin .../dll => dll}/win32/credui/credui.rbuild | 0 {reactos/dll => dll}/win32/credui/credui.rc | 0 {reactos/dll => dll}/win32/credui/credui.spec | 0 .../dll => dll}/win32/credui/credui_Da.rc | 0 .../dll => dll}/win32/credui/credui_De.rc | 0 .../dll => dll}/win32/credui/credui_En.rc | 0 .../dll => dll}/win32/credui/credui_Es.rc | 0 .../dll => dll}/win32/credui/credui_Fr.rc | 0 .../dll => dll}/win32/credui/credui_Ko.rc | 0 .../dll => dll}/win32/credui/credui_Nl.rc | 0 .../dll => dll}/win32/credui/credui_No.rc | 0 .../dll => dll}/win32/credui/credui_Pl.rc | 0 .../dll => dll}/win32/credui/credui_Ru.rc | 0 .../dll => dll}/win32/credui/credui_Si.rc | 0 .../dll => dll}/win32/credui/credui_Sv.rc | 0 .../dll => dll}/win32/credui/credui_Zh.rc | 0 .../dll => dll}/win32/credui/credui_main.c | 0 .../win32/credui/credui_resources.h | 0 {reactos/dll => dll}/win32/crtdll/crtdll.def | 0 .../dll => dll}/win32/crtdll/crtdll.rbuild | 0 {reactos/dll => dll}/win32/crtdll/crtdll.rc | 0 {reactos/dll => dll}/win32/crtdll/dllmain.c | 0 {reactos/dll => dll}/win32/crtdll/precomp.h | 0 {reactos/dll => dll}/win32/crypt32/base64.c | 0 {reactos/dll => dll}/win32/crypt32/cert.c | 0 {reactos/dll => dll}/win32/crypt32/chain.c | 0 .../win32/crypt32/collectionstore.c | 0 {reactos/dll => dll}/win32/crypt32/context.c | 0 {reactos/dll => dll}/win32/crypt32/crl.c | 0 .../dll => dll}/win32/crypt32/crypt32.rbuild | 0 {reactos/dll => dll}/win32/crypt32/crypt32.rc | 0 .../dll => dll}/win32/crypt32/crypt32.spec | 0 .../dll => dll}/win32/crypt32/crypt32_De.rc | 0 .../dll => dll}/win32/crypt32/crypt32_En.rc | 0 .../dll => dll}/win32/crypt32/crypt32_Fr.rc | 0 .../dll => dll}/win32/crypt32/crypt32_Ko.rc | 0 .../dll => dll}/win32/crypt32/crypt32_Nl.rc | 0 .../dll => dll}/win32/crypt32/crypt32_No.rc | 0 .../dll => dll}/win32/crypt32/crypt32_Sv.rc | 0 .../win32/crypt32/crypt32_private.h | 0 .../win32/crypt32/crypt32_ros.diff | 0 {reactos/dll => dll}/win32/crypt32/cryptres.h | 0 {reactos/dll => dll}/win32/crypt32/ctl.c | 0 {reactos/dll => dll}/win32/crypt32/decode.c | 0 {reactos/dll => dll}/win32/crypt32/encode.c | 0 .../dll => dll}/win32/crypt32/filestore.c | 0 {reactos/dll => dll}/win32/crypt32/main.c | 0 {reactos/dll => dll}/win32/crypt32/message.c | 0 {reactos/dll => dll}/win32/crypt32/msg.c | 0 {reactos/dll => dll}/win32/crypt32/object.c | 0 {reactos/dll => dll}/win32/crypt32/oid.c | 0 {reactos/dll => dll}/win32/crypt32/proplist.c | 0 .../dll => dll}/win32/crypt32/protectdata.c | 0 .../dll => dll}/win32/crypt32/provstore.c | 0 {reactos/dll => dll}/win32/crypt32/regstore.c | 0 .../dll => dll}/win32/crypt32/rootstore.c | 0 .../dll => dll}/win32/crypt32/serialize.c | 0 {reactos/dll => dll}/win32/crypt32/sip.c | 0 {reactos/dll => dll}/win32/crypt32/store.c | 0 {reactos/dll => dll}/win32/crypt32/str.c | 0 {reactos/dll => dll}/win32/crypt32/version.rc | 0 .../dll => dll}/win32/cryptdll/cryptdll.c | 0 .../win32/cryptdll/cryptdll.rbuild | 0 .../dll => dll}/win32/cryptdll/cryptdll.spec | 0 .../win32/cryptnet/cryptnet.rbuild | 0 .../dll => dll}/win32/cryptnet/cryptnet.spec | 0 .../win32/cryptnet/cryptnet_main.c | 0 .../dll => dll}/win32/cryptui/cryptui.rbuild | 0 .../dll => dll}/win32/cryptui/cryptui.spec | 0 {reactos/dll => dll}/win32/cryptui/main.c | 0 {reactos/dll => dll}/win32/dbghelp/coff.c | 0 {reactos/dll => dll}/win32/dbghelp/dbghelp.c | 0 .../dll => dll}/win32/dbghelp/dbghelp.rbuild | 0 .../dll => dll}/win32/dbghelp/dbghelp.spec | 0 .../win32/dbghelp/dbghelp_private.h | 0 .../win32/dbghelp/dbghelp_ros.diff | 0 {reactos/dll => dll}/win32/dbghelp/dwarf.c | 0 {reactos/dll => dll}/win32/dbghelp/dwarf.h | 0 .../dll => dll}/win32/dbghelp/elf_module.c | 0 {reactos/dll => dll}/win32/dbghelp/image.c | 0 {reactos/dll => dll}/win32/dbghelp/memory.c | 0 {reactos/dll => dll}/win32/dbghelp/minidump.c | 0 {reactos/dll => dll}/win32/dbghelp/module.c | 0 {reactos/dll => dll}/win32/dbghelp/msc.c | 0 {reactos/dll => dll}/win32/dbghelp/path.c | 0 .../dll => dll}/win32/dbghelp/pe_module.c | 0 {reactos/dll => dll}/win32/dbghelp/regex.c | 0 {reactos/dll => dll}/win32/dbghelp/source.c | 0 {reactos/dll => dll}/win32/dbghelp/stabs.c | 0 {reactos/dll => dll}/win32/dbghelp/stack.c | 0 {reactos/dll => dll}/win32/dbghelp/storage.c | 0 {reactos/dll => dll}/win32/dbghelp/symbol.c | 0 {reactos/dll => dll}/win32/dbghelp/type.c | 0 {reactos/dll => dll}/win32/dbghelp/wdbgexts.h | 0 .../win32/dciman32/dciman32.rbuild | 0 .../dll => dll}/win32/dciman32/dciman32.spec | 0 .../dll => dll}/win32/dciman32/dciman_main.c | 0 {reactos/dll => dll}/win32/devmgr/advprop.c | 0 .../dll => dll}/win32/devmgr/devmgr.rbuild | 0 {reactos/dll => dll}/win32/devmgr/devmgr.rc | 0 {reactos/dll => dll}/win32/devmgr/devmgr.spec | 0 {reactos/dll => dll}/win32/devmgr/devprblm.c | 0 {reactos/dll => dll}/win32/devmgr/hwpage.c | 0 .../dll => dll}/win32/devmgr/lang/cs-CZ.rc | 0 .../dll => dll}/win32/devmgr/lang/de-DE.rc | 0 .../dll => dll}/win32/devmgr/lang/en-US.rc | 0 .../dll => dll}/win32/devmgr/lang/es-ES.rc | 0 .../dll => dll}/win32/devmgr/lang/fr-FR.rc | 0 .../dll => dll}/win32/devmgr/lang/hu-HU.rc | 0 .../dll => dll}/win32/devmgr/lang/id-ID.rc | 0 .../dll => dll}/win32/devmgr/lang/it-IT.rc | 0 .../dll => dll}/win32/devmgr/lang/no-NO.rc | 0 .../dll => dll}/win32/devmgr/lang/pl-PL.rc | 0 .../dll => dll}/win32/devmgr/lang/pt-BR.rc | 0 .../dll => dll}/win32/devmgr/lang/ru-RU.rc | 0 .../dll => dll}/win32/devmgr/lang/sk-SK.rc | 0 .../dll => dll}/win32/devmgr/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/devmgr/misc.c | 0 {reactos/dll => dll}/win32/devmgr/precomp.h | 0 {reactos/dll => dll}/win32/devmgr/resource.h | 0 .../win32/devmgr/resources/devmgr.ico | Bin {reactos/dll => dll}/win32/devmgr/stubs.c | 0 .../dll => dll}/win32/dhcpcsvc/dhcpcsvc.c | 0 .../win32/dhcpcsvc/dhcpcsvc.rbuild | 0 .../dll => dll}/win32/dhcpcsvc/dhcpcsvc.rc | 0 .../dll => dll}/win32/dhcpcsvc/dhcpcsvc.spec | 0 {reactos/dll => dll}/win32/dnsapi/dnsapi.def | 0 .../dll => dll}/win32/dnsapi/dnsapi.rbuild | 0 {reactos/dll => dll}/win32/dnsapi/dnsapi.rc | 0 .../dll => dll}/win32/dnsapi/dnsapi/adns.c | 0 .../dll => dll}/win32/dnsapi/dnsapi/context.c | 0 .../dll => dll}/win32/dnsapi/dnsapi/free.c | 0 .../dll => dll}/win32/dnsapi/dnsapi/names.c | 0 .../dll => dll}/win32/dnsapi/dnsapi/precomp.h | 0 .../dll => dll}/win32/dnsapi/dnsapi/query.c | 0 .../dll => dll}/win32/dnsapi/dnsapi/stubs.c | 0 .../win32/dnsapi/include/internal/windns.h | 0 {reactos/dll => dll}/win32/fmifs/chkdsk.c | 0 {reactos/dll => dll}/win32/fmifs/compress.c | 0 {reactos/dll => dll}/win32/fmifs/diskcopy.c | 0 {reactos/dll => dll}/win32/fmifs/extend.c | 0 {reactos/dll => dll}/win32/fmifs/fmifs.def | 0 {reactos/dll => dll}/win32/fmifs/fmifs.rbuild | 0 {reactos/dll => dll}/win32/fmifs/fmifs.rc | 0 {reactos/dll => dll}/win32/fmifs/format.c | 0 {reactos/dll => dll}/win32/fmifs/init.c | 0 {reactos/dll => dll}/win32/fmifs/media.c | 0 {reactos/dll => dll}/win32/fmifs/precomp.h | 0 {reactos/dll => dll}/win32/fmifs/query.c | 0 {reactos/dll => dll}/win32/fusion/asmcache.c | 0 {reactos/dll => dll}/win32/fusion/asmname.c | 0 {reactos/dll => dll}/win32/fusion/assembly.c | 0 {reactos/dll => dll}/win32/fusion/fusion.c | 0 .../dll => dll}/win32/fusion/fusion.rbuild | 0 {reactos/dll => dll}/win32/fusion/fusion.spec | 0 .../dll => dll}/win32/fusion/fusion_main.c | 0 .../dll => dll}/win32/fusion/fusion_ros.diff | 0 .../dll => dll}/win32/fusion/fusionpriv.h | 0 {reactos/dll => dll}/win32/gdi32/gdi32.def | 0 {reactos/dll => dll}/win32/gdi32/gdi32.rbuild | 0 {reactos/dll => dll}/win32/gdi32/gdi32.rc | 0 {reactos/dll => dll}/win32/gdi32/good api.def | 0 .../dll => dll}/win32/gdi32/include/gdi32p.h | 0 .../dll => dll}/win32/gdi32/include/precomp.h | 0 .../dll => dll}/win32/gdi32/main/dllmain.c | 0 .../dll => dll}/win32/gdi32/misc/gdientry.c | 0 {reactos/dll => dll}/win32/gdi32/misc/hacks.c | 0 {reactos/dll => dll}/win32/gdi32/misc/heap.c | 0 .../dll => dll}/win32/gdi32/misc/historic.c | 0 {reactos/dll => dll}/win32/gdi32/misc/misc.c | 0 {reactos/dll => dll}/win32/gdi32/misc/stubs.c | 0 .../dll => dll}/win32/gdi32/misc/stubsa.c | 0 .../dll => dll}/win32/gdi32/misc/stubsw.c | 0 {reactos/dll => dll}/win32/gdi32/misc/wingl.c | 0 .../dll => dll}/win32/gdi32/objects/arc.c | 0 .../dll => dll}/win32/gdi32/objects/bitmap.c | 0 .../dll => dll}/win32/gdi32/objects/brush.c | 0 .../dll => dll}/win32/gdi32/objects/coord.c | 0 {reactos/dll => dll}/win32/gdi32/objects/dc.c | 0 .../dll => dll}/win32/gdi32/objects/eng.c | 0 .../win32/gdi32/objects/enhmfile.c | 0 .../dll => dll}/win32/gdi32/objects/font.c | 0 .../dll => dll}/win32/gdi32/objects/icm.c | 0 .../dll => dll}/win32/gdi32/objects/linedda.c | 0 .../win32/gdi32/objects/metafile.c | 0 .../win32/gdi32/objects/painting.c | 0 .../dll => dll}/win32/gdi32/objects/palette.c | 0 .../dll => dll}/win32/gdi32/objects/path.c | 0 .../dll => dll}/win32/gdi32/objects/pen.c | 0 .../dll => dll}/win32/gdi32/objects/region.c | 0 .../dll => dll}/win32/gdi32/objects/text.c | 0 .../dll => dll}/win32/gdi32/objects/utils.c | 0 {reactos/dll => dll}/win32/gdiplus/brush.c | 0 .../dll => dll}/win32/gdiplus/customlinecap.c | 0 {reactos/dll => dll}/win32/gdiplus/font.c | 0 {reactos/dll => dll}/win32/gdiplus/gdiplus.c | 0 .../dll => dll}/win32/gdiplus/gdiplus.rbuild | 0 .../dll => dll}/win32/gdiplus/gdiplus.spec | 0 .../win32/gdiplus/gdiplus_private.h | 0 .../win32/gdiplus/gdiplus_ros.diff | 0 {reactos/dll => dll}/win32/gdiplus/graphics.c | 0 .../dll => dll}/win32/gdiplus/graphicspath.c | 0 {reactos/dll => dll}/win32/gdiplus/image.c | 0 .../win32/gdiplus/imageattributes.c | 0 {reactos/dll => dll}/win32/gdiplus/matrix.c | 0 .../dll => dll}/win32/gdiplus/pathiterator.c | 0 {reactos/dll => dll}/win32/gdiplus/pen.c | 0 {reactos/dll => dll}/win32/gdiplus/region.c | 0 .../dll => dll}/win32/gdiplus/stringformat.c | 0 .../dll => dll}/win32/getuname/getuname.c | 0 .../win32/getuname/getuname.rbuild | 0 .../dll => dll}/win32/getuname/getuname.rc | 0 .../dll => dll}/win32/getuname/getuname.spec | 0 {reactos/dll => dll}/win32/glu32/glu32.def | 0 {reactos/dll => dll}/win32/glu32/glu32.rbuild | 0 .../dll => dll}/win32/glu32/include/gluos.h | 0 .../glu32/libnurbs/interface/bezierEval.cc | 0 .../glu32/libnurbs/interface/bezierEval.h | 0 .../glu32/libnurbs/interface/bezierPatch.cc | 0 .../glu32/libnurbs/interface/bezierPatch.h | 0 .../libnurbs/interface/bezierPatchMesh.cc | 0 .../libnurbs/interface/bezierPatchMesh.h | 0 .../glu32/libnurbs/interface/glcurveval.cc | 0 .../glu32/libnurbs/interface/glcurveval.h | 0 .../glu32/libnurbs/interface/glimports.h | 0 .../glu32/libnurbs/interface/glinterface.cc | 0 .../glu32/libnurbs/interface/glrenderer.cc | 0 .../glu32/libnurbs/interface/glrenderer.h | 0 .../glu32/libnurbs/interface/glsurfeval.cc | 0 .../glu32/libnurbs/interface/glsurfeval.h | 0 .../glu32/libnurbs/interface/incurveeval.cc | 0 .../glu32/libnurbs/interface/insurfeval.cc | 0 .../win32/glu32/libnurbs/interface/mystdio.h | 0 .../win32/glu32/libnurbs/interface/mystdlib.h | 0 .../win32/glu32/libnurbs/internals/arc.cc | 0 .../win32/glu32/libnurbs/internals/arc.h | 0 .../glu32/libnurbs/internals/arcsorter.cc | 0 .../glu32/libnurbs/internals/arcsorter.h | 0 .../win32/glu32/libnurbs/internals/arctess.cc | 0 .../win32/glu32/libnurbs/internals/arctess.h | 0 .../win32/glu32/libnurbs/internals/backend.cc | 0 .../win32/glu32/libnurbs/internals/backend.h | 0 .../glu32/libnurbs/internals/basiccrveval.cc | 0 .../glu32/libnurbs/internals/basiccrveval.h | 0 .../glu32/libnurbs/internals/basicsurfeval.cc | 0 .../glu32/libnurbs/internals/basicsurfeval.h | 0 .../glu32/libnurbs/internals/bezierarc.h | 0 .../win32/glu32/libnurbs/internals/bin.cc | 0 .../win32/glu32/libnurbs/internals/bin.h | 0 .../win32/glu32/libnurbs/internals/bufpool.cc | 0 .../win32/glu32/libnurbs/internals/bufpool.h | 0 .../glu32/libnurbs/internals/cachingeval.cc | 0 .../glu32/libnurbs/internals/cachingeval.h | 0 .../win32/glu32/libnurbs/internals/ccw.cc | 0 .../glu32/libnurbs/internals/coveandtiler.cc | 0 .../glu32/libnurbs/internals/coveandtiler.h | 0 .../win32/glu32/libnurbs/internals/curve.cc | 0 .../win32/glu32/libnurbs/internals/curve.h | 0 .../glu32/libnurbs/internals/curvelist.cc | 0 .../glu32/libnurbs/internals/curvelist.h | 0 .../glu32/libnurbs/internals/curvesub.cc | 0 .../glu32/libnurbs/internals/dataTransform.cc | 0 .../glu32/libnurbs/internals/dataTransform.h | 0 .../win32/glu32/libnurbs/internals/defines.h | 0 .../glu32/libnurbs/internals/displaylist.cc | 0 .../glu32/libnurbs/internals/displaylist.h | 0 .../glu32/libnurbs/internals/displaymode.h | 0 .../win32/glu32/libnurbs/internals/flist.cc | 0 .../win32/glu32/libnurbs/internals/flist.h | 0 .../glu32/libnurbs/internals/flistsorter.cc | 0 .../glu32/libnurbs/internals/flistsorter.h | 0 .../win32/glu32/libnurbs/internals/gridline.h | 0 .../glu32/libnurbs/internals/gridtrimvertex.h | 0 .../glu32/libnurbs/internals/gridvertex.h | 0 .../win32/glu32/libnurbs/internals/hull.cc | 0 .../win32/glu32/libnurbs/internals/hull.h | 0 .../glu32/libnurbs/internals/intersect.cc | 0 .../win32/glu32/libnurbs/internals/jarcloc.h | 0 .../glu32/libnurbs/internals/knotvector.cc | 0 .../glu32/libnurbs/internals/knotvector.h | 0 .../win32/glu32/libnurbs/internals/mapdesc.cc | 0 .../win32/glu32/libnurbs/internals/mapdesc.h | 0 .../glu32/libnurbs/internals/mapdescv.cc | 0 .../win32/glu32/libnurbs/internals/maplist.cc | 0 .../win32/glu32/libnurbs/internals/maplist.h | 0 .../win32/glu32/libnurbs/internals/mesher.cc | 0 .../win32/glu32/libnurbs/internals/mesher.h | 0 .../internals/monoTriangulationBackend.cc | 0 .../glu32/libnurbs/internals/monotonizer.cc | 0 .../glu32/libnurbs/internals/monotonizer.h | 0 .../win32/glu32/libnurbs/internals/myassert.h | 0 .../win32/glu32/libnurbs/internals/mycode.cc | 0 .../win32/glu32/libnurbs/internals/mymath.h | 0 .../win32/glu32/libnurbs/internals/mysetjmp.h | 0 .../win32/glu32/libnurbs/internals/mystring.h | 0 .../glu32/libnurbs/internals/nurbsconsts.h | 0 .../glu32/libnurbs/internals/nurbsinterfac.cc | 0 .../glu32/libnurbs/internals/nurbstess.cc | 0 .../glu32/libnurbs/internals/nurbstess.h | 0 .../win32/glu32/libnurbs/internals/patch.cc | 0 .../win32/glu32/libnurbs/internals/patch.h | 0 .../glu32/libnurbs/internals/patchlist.cc | 0 .../glu32/libnurbs/internals/patchlist.h | 0 .../win32/glu32/libnurbs/internals/pwlarc.h | 0 .../win32/glu32/libnurbs/internals/quilt.cc | 0 .../win32/glu32/libnurbs/internals/quilt.h | 0 .../win32/glu32/libnurbs/internals/reader.cc | 0 .../win32/glu32/libnurbs/internals/reader.h | 0 .../glu32/libnurbs/internals/renderhints.cc | 0 .../glu32/libnurbs/internals/renderhints.h | 0 .../glu32/libnurbs/internals/simplemath.h | 0 .../win32/glu32/libnurbs/internals/slicer.cc | 0 .../win32/glu32/libnurbs/internals/slicer.h | 0 .../win32/glu32/libnurbs/internals/sorter.cc | 0 .../win32/glu32/libnurbs/internals/sorter.h | 0 .../glu32/libnurbs/internals/splitarcs.cc | 0 .../glu32/libnurbs/internals/subdivider.cc | 0 .../glu32/libnurbs/internals/subdivider.h | 0 .../glu32/libnurbs/internals/tobezier.cc | 0 .../glu32/libnurbs/internals/trimline.cc | 0 .../win32/glu32/libnurbs/internals/trimline.h | 0 .../glu32/libnurbs/internals/trimregion.cc | 0 .../glu32/libnurbs/internals/trimregion.h | 0 .../glu32/libnurbs/internals/trimvertex.h | 0 .../glu32/libnurbs/internals/trimvertpool.cc | 0 .../glu32/libnurbs/internals/trimvertpool.h | 0 .../win32/glu32/libnurbs/internals/types.h | 0 .../win32/glu32/libnurbs/internals/uarray.cc | 0 .../win32/glu32/libnurbs/internals/uarray.h | 0 .../win32/glu32/libnurbs/internals/varray.cc | 0 .../win32/glu32/libnurbs/internals/varray.h | 0 .../glu32/libnurbs/nurbtess/definitions.h | 0 .../glu32/libnurbs/nurbtess/directedLine.cc | 0 .../glu32/libnurbs/nurbtess/directedLine.h | 0 .../win32/glu32/libnurbs/nurbtess/glimports.h | 0 .../win32/glu32/libnurbs/nurbtess/gridWrap.cc | 0 .../win32/glu32/libnurbs/nurbtess/gridWrap.h | 0 .../glu32/libnurbs/nurbtess/monoChain.cc | 0 .../win32/glu32/libnurbs/nurbtess/monoChain.h | 0 .../glu32/libnurbs/nurbtess/monoPolyPart.cc | 0 .../glu32/libnurbs/nurbtess/monoPolyPart.h | 0 .../libnurbs/nurbtess/monoTriangulation.cc | 0 .../libnurbs/nurbtess/monoTriangulation.h | 0 .../win32/glu32/libnurbs/nurbtess/mystdio.h | 0 .../win32/glu32/libnurbs/nurbtess/mystdlib.h | 0 .../glu32/libnurbs/nurbtess/partitionX.cc | 0 .../glu32/libnurbs/nurbtess/partitionX.h | 0 .../glu32/libnurbs/nurbtess/partitionY.cc | 0 .../glu32/libnurbs/nurbtess/partitionY.h | 0 .../win32/glu32/libnurbs/nurbtess/polyDBG.cc | 0 .../win32/glu32/libnurbs/nurbtess/polyDBG.h | 0 .../win32/glu32/libnurbs/nurbtess/polyUtil.cc | 0 .../win32/glu32/libnurbs/nurbtess/polyUtil.h | 0 .../libnurbs/nurbtess/primitiveStream.cc | 0 .../glu32/libnurbs/nurbtess/primitiveStream.h | 0 .../glu32/libnurbs/nurbtess/quicksort.cc | 0 .../win32/glu32/libnurbs/nurbtess/quicksort.h | 0 .../glu32/libnurbs/nurbtess/rectBlock.cc | 0 .../win32/glu32/libnurbs/nurbtess/rectBlock.h | 0 .../glu32/libnurbs/nurbtess/sampleComp.cc | 0 .../glu32/libnurbs/nurbtess/sampleComp.h | 0 .../glu32/libnurbs/nurbtess/sampleCompBot.cc | 0 .../glu32/libnurbs/nurbtess/sampleCompBot.h | 0 .../libnurbs/nurbtess/sampleCompRight.cc | 0 .../glu32/libnurbs/nurbtess/sampleCompRight.h | 0 .../glu32/libnurbs/nurbtess/sampleCompTop.cc | 0 .../glu32/libnurbs/nurbtess/sampleCompTop.h | 0 .../glu32/libnurbs/nurbtess/sampleMonoPoly.cc | 0 .../glu32/libnurbs/nurbtess/sampleMonoPoly.h | 0 .../glu32/libnurbs/nurbtess/sampledLine.cc | 0 .../glu32/libnurbs/nurbtess/sampledLine.h | 0 .../glu32/libnurbs/nurbtess/searchTree.cc | 0 .../glu32/libnurbs/nurbtess/searchTree.h | 0 .../win32/glu32/libnurbs/nurbtess/zlassert.h | 0 .../dll => dll}/win32/glu32/libtess/README | 0 .../win32/glu32/libtess/alg-outline | 0 .../win32/glu32/libtess/dict-list.h | 0 .../dll => dll}/win32/glu32/libtess/dict.c | 0 .../dll => dll}/win32/glu32/libtess/dict.h | 0 .../dll => dll}/win32/glu32/libtess/geom.c | 0 .../dll => dll}/win32/glu32/libtess/geom.h | 0 .../win32/glu32/libtess/memalloc.c | 0 .../win32/glu32/libtess/memalloc.h | 0 .../dll => dll}/win32/glu32/libtess/mesh.c | 0 .../dll => dll}/win32/glu32/libtess/mesh.h | 0 .../dll => dll}/win32/glu32/libtess/normal.c | 0 .../dll => dll}/win32/glu32/libtess/normal.h | 0 .../win32/glu32/libtess/priorityq-heap.c | 0 .../win32/glu32/libtess/priorityq-heap.h | 0 .../win32/glu32/libtess/priorityq-sort.h | 0 .../win32/glu32/libtess/priorityq.c | 0 .../win32/glu32/libtess/priorityq.h | 0 .../dll => dll}/win32/glu32/libtess/render.c | 0 .../dll => dll}/win32/glu32/libtess/render.h | 0 .../dll => dll}/win32/glu32/libtess/sweep.c | 0 .../dll => dll}/win32/glu32/libtess/sweep.h | 0 .../dll => dll}/win32/glu32/libtess/tess.c | 0 .../dll => dll}/win32/glu32/libtess/tess.h | 0 .../win32/glu32/libtess/tessmono.c | 0 .../win32/glu32/libtess/tessmono.h | 0 .../dll => dll}/win32/glu32/libutil/error.c | 0 .../dll => dll}/win32/glu32/libutil/glue.c | 0 .../dll => dll}/win32/glu32/libutil/gluint.h | 0 .../dll => dll}/win32/glu32/libutil/mipmap.c | 0 .../dll => dll}/win32/glu32/libutil/project.c | 0 .../dll => dll}/win32/glu32/libutil/quad.c | 0 .../win32/glu32/libutil/registry.c | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Cs.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Da.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/De.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/El.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/En.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Fi.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Fr.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Hu.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Ko.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Nl.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/No.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Pl.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Ru.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Si.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Sv.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Tr.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/Zh.rc | 0 {reactos/dll => dll}/win32/hhctrl.ocx/chm.c | 0 .../dll => dll}/win32/hhctrl.ocx/content.c | 0 {reactos/dll => dll}/win32/hhctrl.ocx/help.c | 0 .../dll => dll}/win32/hhctrl.ocx/hhctrl.c | 0 .../dll => dll}/win32/hhctrl.ocx/hhctrl.h | 0 .../win32/hhctrl.ocx/hhctrl.ocx.rbuild | 0 .../win32/hhctrl.ocx/hhctrl.ocx.spec | 0 .../win32/hhctrl.ocx/hhctrl.ocx_ros.diff | 0 .../dll => dll}/win32/hhctrl.ocx/hhctrl.rc | 0 .../dll => dll}/win32/hhctrl.ocx/regsvr.c | 0 .../dll => dll}/win32/hhctrl.ocx/resource.h | 0 .../dll => dll}/win32/hhctrl.ocx/version.rc | 0 .../dll => dll}/win32/hhctrl.ocx/webbrowser.c | 0 {reactos/dll => dll}/win32/hid/hid.c | 0 {reactos/dll => dll}/win32/hid/hid.def | 0 {reactos/dll => dll}/win32/hid/hid.rbuild | 0 {reactos/dll => dll}/win32/hid/hid.rc | 0 {reactos/dll => dll}/win32/hid/precomp.h | 0 {reactos/dll => dll}/win32/hid/stubs.c | 0 {reactos/dll => dll}/win32/hlink/browse_ctx.c | 0 {reactos/dll => dll}/win32/hlink/extserv.c | 0 {reactos/dll => dll}/win32/hlink/hlink.rbuild | 0 {reactos/dll => dll}/win32/hlink/hlink.spec | 0 {reactos/dll => dll}/win32/hlink/hlink_main.c | 0 .../dll => dll}/win32/hlink/hlink_private.h | 0 {reactos/dll => dll}/win32/hlink/link.c | 0 {reactos/dll => dll}/win32/icmp/Makefile.in | 0 {reactos/dll => dll}/win32/icmp/icmp.dsp | 0 {reactos/dll => dll}/win32/icmp/icmp.rbuild | 0 {reactos/dll => dll}/win32/icmp/icmp.rc | 0 {reactos/dll => dll}/win32/icmp/icmp.spec | 0 {reactos/dll => dll}/win32/icmp/icmp_main.c | 0 {reactos/dll => dll}/win32/icmp/ip.h | 0 {reactos/dll => dll}/win32/icmp/ip_icmp.h | 0 {reactos/dll => dll}/win32/imagehlp/access.c | 0 .../win32/imagehlp/imagehlp.rbuild | 0 .../dll => dll}/win32/imagehlp/imagehlp.rc | 0 .../dll => dll}/win32/imagehlp/imagehlp.spec | 0 .../win32/imagehlp/imagehlp_main.c | 0 .../dll => dll}/win32/imagehlp/integrity.c | 0 {reactos/dll => dll}/win32/imagehlp/modify.c | 0 {reactos/dll => dll}/win32/imagehlp/precomp.h | 0 {reactos/dll => dll}/win32/imm32/imm.c | 0 {reactos/dll => dll}/win32/imm32/imm.spec | 0 {reactos/dll => dll}/win32/imm32/imm32.rbuild | 0 {reactos/dll => dll}/win32/imm32/imm32.spec | 0 {reactos/dll => dll}/win32/imm32/version.rc | 0 .../win32/inetcomm/inetcomm.rbuild | 0 .../dll => dll}/win32/inetcomm/inetcomm.spec | 0 .../win32/inetcomm/inetcomm_main.c | 0 .../win32/inetcomm/inetcomm_private.h | 0 .../win32/inetcomm/internettransport.c | 0 {reactos/dll => dll}/win32/inetcomm/mimeole.c | 0 {reactos/dll => dll}/win32/inetcomm/regsvr.c | 0 .../win32/inetmib1/inetmib1.rbuild | 0 .../dll => dll}/win32/inetmib1/inetmib1.spec | 0 {reactos/dll => dll}/win32/inetmib1/main.c | 0 .../dll => dll}/win32/iphlpapi/Makefile.in | 0 {reactos/dll => dll}/win32/iphlpapi/dhcp.h | 0 .../dll => dll}/win32/iphlpapi/dhcp_reactos.c | 0 {reactos/dll => dll}/win32/iphlpapi/ifenum.h | 0 .../win32/iphlpapi/ifenum_reactos.c | 0 .../win32/iphlpapi/iphlpapi.rbuild | 0 .../dll => dll}/win32/iphlpapi/iphlpapi.rc | 0 .../dll => dll}/win32/iphlpapi/iphlpapi.spec | 0 .../win32/iphlpapi/iphlpapi_main.c | 0 .../win32/iphlpapi/iphlpapi_private.h | 0 {reactos/dll => dll}/win32/iphlpapi/ipstats.h | 0 .../win32/iphlpapi/ipstats_reactos.c | 0 {reactos/dll => dll}/win32/iphlpapi/media.c | 0 .../win32/iphlpapi/merge-notes.txt | 0 .../dll => dll}/win32/iphlpapi/registry.c | 0 {reactos/dll => dll}/win32/iphlpapi/resinfo.c | 0 {reactos/dll => dll}/win32/iphlpapi/resinfo.h | 0 .../win32/iphlpapi/resinfo_reactos.c | 0 {reactos/dll => dll}/win32/iphlpapi/route.c | 0 {reactos/dll => dll}/win32/iphlpapi/route.h | 0 .../win32/iphlpapi/route_reactos.c | 0 .../dll => dll}/win32/iprtprio/iprtprio.c | 0 .../dll => dll}/win32/iprtprio/iprtprio.def | 0 .../dll => dll}/win32/iprtprio/iprtprio.rc | 0 {reactos/dll => dll}/win32/jscript/array.c | 0 {reactos/dll => dll}/win32/jscript/bool.c | 0 {reactos/dll => dll}/win32/jscript/dispex.c | 0 {reactos/dll => dll}/win32/jscript/engine.c | 0 {reactos/dll => dll}/win32/jscript/engine.h | 0 {reactos/dll => dll}/win32/jscript/function.c | 0 {reactos/dll => dll}/win32/jscript/global.c | 0 {reactos/dll => dll}/win32/jscript/jscript.c | 0 {reactos/dll => dll}/win32/jscript/jscript.h | 0 .../dll => dll}/win32/jscript/jscript.inf | 0 .../dll => dll}/win32/jscript/jscript.rbuild | 0 .../dll => dll}/win32/jscript/jscript.spec | 0 .../dll => dll}/win32/jscript/jscript_main.c | 0 .../dll => dll}/win32/jscript/jsglobal.idl | 0 .../win32/jscript/jsglobal_dispid.h | 0 {reactos/dll => dll}/win32/jscript/jsutils.c | 0 {reactos/dll => dll}/win32/jscript/lex.c | 0 {reactos/dll => dll}/win32/jscript/math.c | 0 {reactos/dll => dll}/win32/jscript/number.c | 0 {reactos/dll => dll}/win32/jscript/object.c | 0 .../dll => dll}/win32/jscript/parser.tab.c | 0 .../dll => dll}/win32/jscript/parser.tab.h | 0 {reactos/dll => dll}/win32/jscript/parser.y | 0 {reactos/dll => dll}/win32/jscript/regexp.c | 0 {reactos/dll => dll}/win32/jscript/rsrc.rc | 0 {reactos/dll => dll}/win32/jscript/string.c | 0 .../win32/kernel32/debug/debugger.c | 0 .../dll => dll}/win32/kernel32/debug/output.c | 0 .../win32/kernel32/except/except.c | 0 .../dll => dll}/win32/kernel32/file/backup.c | 0 .../dll => dll}/win32/kernel32/file/bintype.c | 0 .../dll => dll}/win32/kernel32/file/cnotify.c | 0 .../dll => dll}/win32/kernel32/file/copy.c | 0 .../dll => dll}/win32/kernel32/file/create.c | 0 .../dll => dll}/win32/kernel32/file/curdir.c | 0 .../dll => dll}/win32/kernel32/file/delete.c | 0 .../win32/kernel32/file/deviceio.c | 0 .../dll => dll}/win32/kernel32/file/dir.c | 0 .../dll => dll}/win32/kernel32/file/dosdev.c | 0 .../dll => dll}/win32/kernel32/file/file.c | 0 .../dll => dll}/win32/kernel32/file/find.c | 0 .../win32/kernel32/file/hardlink.c | 0 .../dll => dll}/win32/kernel32/file/iocompl.c | 0 .../dll => dll}/win32/kernel32/file/lfile.c | 0 .../dll => dll}/win32/kernel32/file/lock.c | 0 .../win32/kernel32/file/mailslot.c | 0 .../dll => dll}/win32/kernel32/file/move.c | 0 .../dll => dll}/win32/kernel32/file/npipe.c | 0 .../dll => dll}/win32/kernel32/file/pipe.c | 0 {reactos/dll => dll}/win32/kernel32/file/rw.c | 0 .../dll => dll}/win32/kernel32/file/tape.c | 0 .../dll => dll}/win32/kernel32/file/volume.c | 0 .../win32/kernel32/include/baseheap.h | 0 .../win32/kernel32/include/kernel32.h | 0 {reactos/dll => dll}/win32/kernel32/k32.h | 0 .../dll => dll}/win32/kernel32/kernel32.def | 0 .../win32/kernel32/kernel32.rbuild | 0 .../dll => dll}/win32/kernel32/kernel32.rc | 0 .../dll => dll}/win32/kernel32/lang/bg-BG.mc | 0 .../dll => dll}/win32/kernel32/lang/de-DE.mc | 0 .../dll => dll}/win32/kernel32/lang/pl-PL.mc | 0 .../dll => dll}/win32/kernel32/lang/ru-RU.mc | 0 .../dll => dll}/win32/kernel32/locale_rc.rc | 0 .../dll => dll}/win32/kernel32/mem/global.c | 0 .../dll => dll}/win32/kernel32/mem/heap.c | 0 .../dll => dll}/win32/kernel32/mem/isbad.c | 0 .../dll => dll}/win32/kernel32/mem/local.c | 0 .../dll => dll}/win32/kernel32/mem/procmem.c | 0 .../win32/kernel32/mem/resnotify.c | 0 .../dll => dll}/win32/kernel32/mem/section.c | 0 .../dll => dll}/win32/kernel32/mem/virtual.c | 0 .../dll => dll}/win32/kernel32/misc/actctx.c | 0 .../dll => dll}/win32/kernel32/misc/atom.c | 0 .../win32/kernel32/misc/chartype.c | 0 .../dll => dll}/win32/kernel32/misc/comm.c | 0 .../win32/kernel32/misc/computername.c | 0 .../dll => dll}/win32/kernel32/misc/console.c | 0 .../dll => dll}/win32/kernel32/misc/dllmain.c | 0 .../dll => dll}/win32/kernel32/misc/env.c | 0 .../dll => dll}/win32/kernel32/misc/error.c | 0 .../win32/kernel32/misc/errormsg.c | 0 .../dll => dll}/win32/kernel32/misc/handle.c | 0 .../win32/kernel32/misc/icustubs.cpp | 0 .../dll => dll}/win32/kernel32/misc/lang.c | 0 .../win32/kernel32/misc/lcformat.c | 0 .../win32/kernel32/misc/lcformat_private.h | 0 .../dll => dll}/win32/kernel32/misc/ldr.c | 0 .../win32/kernel32/misc/lzexpand_main.c | 0 .../dll => dll}/win32/kernel32/misc/muldiv.c | 0 .../dll => dll}/win32/kernel32/misc/nls.c | 0 .../dll => dll}/win32/kernel32/misc/perfcnt.c | 0 .../dll => dll}/win32/kernel32/misc/profile.c | 0 .../win32/kernel32/misc/recovery.c | 0 .../dll => dll}/win32/kernel32/misc/res.c | 0 .../dll => dll}/win32/kernel32/misc/stubs.c | 0 .../dll => dll}/win32/kernel32/misc/sysinfo.c | 0 .../dll => dll}/win32/kernel32/misc/time.c | 0 .../win32/kernel32/misc/timerqueue.c | 0 .../win32/kernel32/misc/toolhelp.c | 0 .../dll => dll}/win32/kernel32/misc/utils.c | 0 .../dll => dll}/win32/kernel32/misc/version.c | 0 .../dll => dll}/win32/kernel32/nls/afk.nls | 0 .../dll => dll}/win32/kernel32/nls/ara.nls | 0 .../dll => dll}/win32/kernel32/nls/arb.nls | 0 .../dll => dll}/win32/kernel32/nls/are.nls | 0 .../dll => dll}/win32/kernel32/nls/arg.nls | 0 .../dll => dll}/win32/kernel32/nls/arh.nls | 0 .../dll => dll}/win32/kernel32/nls/ari.nls | 0 .../dll => dll}/win32/kernel32/nls/arj.nls | 0 .../dll => dll}/win32/kernel32/nls/ark.nls | 0 .../dll => dll}/win32/kernel32/nls/arl.nls | 0 .../dll => dll}/win32/kernel32/nls/arm.nls | 0 .../dll => dll}/win32/kernel32/nls/aro.nls | 0 .../dll => dll}/win32/kernel32/nls/arq.nls | 0 .../dll => dll}/win32/kernel32/nls/ars.nls | 0 .../dll => dll}/win32/kernel32/nls/art.nls | 0 .../dll => dll}/win32/kernel32/nls/aru.nls | 0 .../dll => dll}/win32/kernel32/nls/ary.nls | 0 .../dll => dll}/win32/kernel32/nls/aze.nls | 0 .../dll => dll}/win32/kernel32/nls/azl.nls | 0 .../dll => dll}/win32/kernel32/nls/bel.nls | 0 .../dll => dll}/win32/kernel32/nls/bgr.nls | 0 .../dll => dll}/win32/kernel32/nls/cat.nls | 0 .../dll => dll}/win32/kernel32/nls/chs.nls | 0 .../dll => dll}/win32/kernel32/nls/cht.nls | 0 .../dll => dll}/win32/kernel32/nls/csy.nls | 0 .../dll => dll}/win32/kernel32/nls/dan.nls | 0 .../dll => dll}/win32/kernel32/nls/dea.nls | 0 .../dll => dll}/win32/kernel32/nls/dec.nls | 0 .../dll => dll}/win32/kernel32/nls/del.nls | 0 .../dll => dll}/win32/kernel32/nls/des.nls | 0 .../dll => dll}/win32/kernel32/nls/deu.nls | 0 .../dll => dll}/win32/kernel32/nls/div.nls | 0 .../dll => dll}/win32/kernel32/nls/ell.nls | 0 .../dll => dll}/win32/kernel32/nls/ena.nls | 0 .../dll => dll}/win32/kernel32/nls/enb.nls | 0 .../dll => dll}/win32/kernel32/nls/enc.nls | 0 .../dll => dll}/win32/kernel32/nls/eng.nls | 0 .../dll => dll}/win32/kernel32/nls/eni.nls | 0 .../dll => dll}/win32/kernel32/nls/enj.nls | 0 .../dll => dll}/win32/kernel32/nls/enl.nls | 0 .../dll => dll}/win32/kernel32/nls/enp.nls | 0 .../dll => dll}/win32/kernel32/nls/ens.nls | 0 .../dll => dll}/win32/kernel32/nls/ent.nls | 0 .../dll => dll}/win32/kernel32/nls/enu.nls | 0 .../dll => dll}/win32/kernel32/nls/enw.nls | 0 .../dll => dll}/win32/kernel32/nls/enz.nls | 0 .../dll => dll}/win32/kernel32/nls/esa.nls | 0 .../dll => dll}/win32/kernel32/nls/esb.nls | 0 .../dll => dll}/win32/kernel32/nls/esc.nls | 0 .../dll => dll}/win32/kernel32/nls/esd.nls | 0 .../dll => dll}/win32/kernel32/nls/ese.nls | 0 .../dll => dll}/win32/kernel32/nls/esf.nls | 0 .../dll => dll}/win32/kernel32/nls/esg.nls | 0 .../dll => dll}/win32/kernel32/nls/esh.nls | 0 .../dll => dll}/win32/kernel32/nls/esi.nls | 0 .../dll => dll}/win32/kernel32/nls/esl.nls | 0 .../dll => dll}/win32/kernel32/nls/esm.nls | 0 .../dll => dll}/win32/kernel32/nls/esn.nls | 0 .../dll => dll}/win32/kernel32/nls/eso.nls | 0 .../dll => dll}/win32/kernel32/nls/esp.nls | 0 .../dll => dll}/win32/kernel32/nls/esr.nls | 0 .../dll => dll}/win32/kernel32/nls/ess.nls | 0 .../dll => dll}/win32/kernel32/nls/esu.nls | 0 .../dll => dll}/win32/kernel32/nls/esv.nls | 0 .../dll => dll}/win32/kernel32/nls/esy.nls | 0 .../dll => dll}/win32/kernel32/nls/esz.nls | 0 .../dll => dll}/win32/kernel32/nls/eti.nls | 0 .../dll => dll}/win32/kernel32/nls/euq.nls | 0 .../dll => dll}/win32/kernel32/nls/far.nls | 0 .../dll => dll}/win32/kernel32/nls/fin.nls | 0 .../dll => dll}/win32/kernel32/nls/fos.nls | 0 .../dll => dll}/win32/kernel32/nls/fra.nls | 0 .../dll => dll}/win32/kernel32/nls/frb.nls | 0 .../dll => dll}/win32/kernel32/nls/frc.nls | 0 .../dll => dll}/win32/kernel32/nls/frl.nls | 0 .../dll => dll}/win32/kernel32/nls/frm.nls | 0 .../dll => dll}/win32/kernel32/nls/frs.nls | 0 .../dll => dll}/win32/kernel32/nls/glc.nls | 0 .../dll => dll}/win32/kernel32/nls/guj.nls | 0 .../dll => dll}/win32/kernel32/nls/heb.nls | 0 .../dll => dll}/win32/kernel32/nls/hin.nls | 0 .../dll => dll}/win32/kernel32/nls/hrv.nls | 0 .../dll => dll}/win32/kernel32/nls/hun.nls | 0 .../dll => dll}/win32/kernel32/nls/hye.nls | 0 .../dll => dll}/win32/kernel32/nls/ind.nls | 0 .../dll => dll}/win32/kernel32/nls/isl.nls | 0 .../dll => dll}/win32/kernel32/nls/ita.nls | 0 .../dll => dll}/win32/kernel32/nls/its.nls | 0 .../dll => dll}/win32/kernel32/nls/jpn.nls | 0 .../dll => dll}/win32/kernel32/nls/kan.nls | 0 .../dll => dll}/win32/kernel32/nls/kat.nls | 0 .../dll => dll}/win32/kernel32/nls/kkz.nls | 0 .../dll => dll}/win32/kernel32/nls/knk.nls | 0 .../dll => dll}/win32/kernel32/nls/kor.nls | 0 .../dll => dll}/win32/kernel32/nls/kyr.nls | 0 .../dll => dll}/win32/kernel32/nls/lth.nls | 0 .../dll => dll}/win32/kernel32/nls/lvi.nls | 0 .../dll => dll}/win32/kernel32/nls/mar.nls | 0 .../dll => dll}/win32/kernel32/nls/mki.nls | 0 .../dll => dll}/win32/kernel32/nls/mon.nls | 0 .../dll => dll}/win32/kernel32/nls/msb.nls | 0 .../dll => dll}/win32/kernel32/nls/msl.nls | 0 .../dll => dll}/win32/kernel32/nls/nlb.nls | 0 .../dll => dll}/win32/kernel32/nls/nld.nls | 0 .../dll => dll}/win32/kernel32/nls/non.nls | 0 .../dll => dll}/win32/kernel32/nls/nor.nls | 0 .../dll => dll}/win32/kernel32/nls/pan.nls | 0 .../dll => dll}/win32/kernel32/nls/plk.nls | 0 .../dll => dll}/win32/kernel32/nls/ptb.nls | 0 .../dll => dll}/win32/kernel32/nls/ptg.nls | 0 .../dll => dll}/win32/kernel32/nls/rom.nls | 0 .../dll => dll}/win32/kernel32/nls/rus.nls | 0 .../dll => dll}/win32/kernel32/nls/san.nls | 0 .../dll => dll}/win32/kernel32/nls/sky.nls | 0 .../dll => dll}/win32/kernel32/nls/slv.nls | 0 .../dll => dll}/win32/kernel32/nls/sqi.nls | 0 .../dll => dll}/win32/kernel32/nls/srb.nls | 0 .../dll => dll}/win32/kernel32/nls/srl.nls | 0 .../dll => dll}/win32/kernel32/nls/sve.nls | 0 .../dll => dll}/win32/kernel32/nls/svf.nls | 0 .../dll => dll}/win32/kernel32/nls/swk.nls | 0 .../dll => dll}/win32/kernel32/nls/syr.nls | 0 .../dll => dll}/win32/kernel32/nls/tam.nls | 0 .../dll => dll}/win32/kernel32/nls/tel.nls | 0 .../dll => dll}/win32/kernel32/nls/tha.nls | 0 .../dll => dll}/win32/kernel32/nls/trk.nls | 0 .../dll => dll}/win32/kernel32/nls/ttt.nls | 0 .../dll => dll}/win32/kernel32/nls/ukr.nls | 0 .../dll => dll}/win32/kernel32/nls/urd.nls | 0 .../dll => dll}/win32/kernel32/nls/uzb.nls | 0 .../dll => dll}/win32/kernel32/nls/uzl.nls | 0 .../dll => dll}/win32/kernel32/nls/vit.nls | 0 .../dll => dll}/win32/kernel32/nls/zhh.nls | 0 .../dll => dll}/win32/kernel32/nls/zhi.nls | 0 .../dll => dll}/win32/kernel32/nls/zhm.nls | 0 .../win32/kernel32/process/cmdline.c | 0 .../dll => dll}/win32/kernel32/process/job.c | 0 .../dll => dll}/win32/kernel32/process/proc.c | 0 .../win32/kernel32/process/procsup.c | 0 .../win32/kernel32/process/session.c | 0 .../win32/kernel32/string/lstring.c | 0 .../win32/kernel32/synch/condvar.c | 0 .../win32/kernel32/synch/critical.c | 0 .../dll => dll}/win32/kernel32/synch/event.c | 0 .../dll => dll}/win32/kernel32/synch/mutex.c | 0 .../dll => dll}/win32/kernel32/synch/sem.c | 0 .../dll => dll}/win32/kernel32/synch/timer.c | 0 .../dll => dll}/win32/kernel32/synch/wait.c | 0 .../dll => dll}/win32/kernel32/thread/fiber.c | 0 .../dll => dll}/win32/kernel32/thread/fls.c | 0 .../win32/kernel32/thread/i386/fiber.S | 0 .../win32/kernel32/thread/i386/thread.S | 0 .../win32/kernel32/thread/thread.c | 0 .../dll => dll}/win32/kernel32/thread/tls.c | 0 {reactos/dll => dll}/win32/lpk/dllmain.c | 0 {reactos/dll => dll}/win32/lpk/lpk.rbuild | 0 {reactos/dll => dll}/win32/lpk/lpk.rc | 0 {reactos/dll => dll}/win32/lpk/lpk.spec | 0 {reactos/dll => dll}/win32/lpk/ros_lpk.h | 0 {reactos/dll => dll}/win32/lpk/stub.c | 0 {reactos/dll => dll}/win32/lsasrv/lsarpc.c | 0 {reactos/dll => dll}/win32/lsasrv/lsasrv.c | 0 {reactos/dll => dll}/win32/lsasrv/lsasrv.def | 0 .../dll => dll}/win32/lsasrv/lsasrv.rbuild | 0 {reactos/dll => dll}/win32/lsasrv/lsasrv.rc | 0 {reactos/dll => dll}/win32/lz32/lz32.rbuild | 0 {reactos/dll => dll}/win32/lz32/lz32.spec | 0 {reactos/dll => dll}/win32/lz32/lzexpand.spec | 0 {reactos/dll => dll}/win32/lz32/lzexpand16.c | 0 {reactos/dll => dll}/win32/lz32/version.rc | 0 {reactos/dll => dll}/win32/mapi32/imalloc.c | 0 .../dll => dll}/win32/mapi32/mapi32.rbuild | 0 {reactos/dll => dll}/win32/mapi32/mapi32.spec | 0 .../dll => dll}/win32/mapi32/mapi32_main.c | 0 {reactos/dll => dll}/win32/mapi32/prop.c | 0 {reactos/dll => dll}/win32/mapi32/sendmail.c | 0 {reactos/dll => dll}/win32/mapi32/util.c | 0 {reactos/dll => dll}/win32/mlang/mlang.c | 0 {reactos/dll => dll}/win32/mlang/mlang.rbuild | 0 {reactos/dll => dll}/win32/mlang/mlang.spec | 0 {reactos/dll => dll}/win32/mlang/regsvr.c | 0 {reactos/dll => dll}/win32/mmdrv/TODO | 0 {reactos/dll => dll}/win32/mmdrv/auxil.c | 0 {reactos/dll => dll}/win32/mmdrv/common.c | 0 {reactos/dll => dll}/win32/mmdrv/entry.c | 0 {reactos/dll => dll}/win32/mmdrv/kernel.c | 0 {reactos/dll => dll}/win32/mmdrv/midi.c | 0 {reactos/dll => dll}/win32/mmdrv/mmddk.h | 0 {reactos/dll => dll}/win32/mmdrv/mmdef.h | 0 {reactos/dll => dll}/win32/mmdrv/mmdrv.h | 0 {reactos/dll => dll}/win32/mmdrv/mmdrv.rbuild | 0 {reactos/dll => dll}/win32/mmdrv/mmdrv.spec | 0 {reactos/dll => dll}/win32/mmdrv/mme.c | 0 {reactos/dll => dll}/win32/mmdrv/mmioctl.h | 0 {reactos/dll => dll}/win32/mmdrv/session.c | 0 {reactos/dll => dll}/win32/mmdrv/utils.c | 0 {reactos/dll => dll}/win32/mmdrv/wave.c | 0 {reactos/dll => dll}/win32/mmdrv/wave.h | 0 {reactos/dll => dll}/win32/mmdrv/wave_io.c | 0 .../dll => dll}/win32/modemui/lang/de-DE.rc | 0 .../dll => dll}/win32/modemui/lang/en-US.rc | 0 .../dll => dll}/win32/modemui/lang/es-ES.rc | 0 .../dll => dll}/win32/modemui/lang/no-NO.rc | 0 .../dll => dll}/win32/modemui/lang/pl-PL.rc | 0 .../dll => dll}/win32/modemui/lang/ru-RU.rc | 0 .../dll => dll}/win32/modemui/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/modemui/modemui.c | 0 .../dll => dll}/win32/modemui/modemui.rbuild | 0 {reactos/dll => dll}/win32/modemui/modemui.rc | 0 .../dll => dll}/win32/modemui/modemui.spec | 0 .../dll => dll}/win32/modemui/res/5100.ico | Bin .../dll => dll}/win32/modemui/res/700.ico | Bin .../dll => dll}/win32/modemui/res/701.ico | Bin .../dll => dll}/win32/modemui/res/702.ico | Bin .../dll => dll}/win32/modemui/res/703.ico | Bin {reactos/dll => dll}/win32/modemui/resource.h | 0 {reactos/dll => dll}/win32/mpr/auth.c | 0 {reactos/dll => dll}/win32/mpr/mpr.rbuild | 0 {reactos/dll => dll}/win32/mpr/mpr.rc | 0 {reactos/dll => dll}/win32/mpr/mpr.spec | 0 {reactos/dll => dll}/win32/mpr/mpr_Bg.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Cs.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Da.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_De.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_En.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Eo.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Es.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Fr.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Hu.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_It.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Ja.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Ko.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Nl.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_No.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Pl.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Pt.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Ro.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Ru.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Si.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Sv.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Tr.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Uk.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_Zh.rc | 0 {reactos/dll => dll}/win32/mpr/mpr_main.c | 0 {reactos/dll => dll}/win32/mpr/mpr_ros.diff | 0 {reactos/dll => dll}/win32/mpr/mprres.h | 0 {reactos/dll => dll}/win32/mpr/multinet.c | 0 {reactos/dll => dll}/win32/mpr/netspi.h | 0 {reactos/dll => dll}/win32/mpr/nps.c | 0 {reactos/dll => dll}/win32/mpr/pwcache.c | 0 {reactos/dll => dll}/win32/mpr/version.rc | 0 {reactos/dll => dll}/win32/mpr/wnet.c | 0 {reactos/dll => dll}/win32/mpr/wnetpriv.h | 0 {reactos/dll => dll}/win32/mprapi/mprapi.c | 0 .../dll => dll}/win32/mprapi/mprapi.rbuild | 0 {reactos/dll => dll}/win32/mprapi/mprapi.spec | 0 .../dll => dll}/win32/msacm32/Makefile.in | 0 {reactos/dll => dll}/win32/msacm32/driver.c | 0 {reactos/dll => dll}/win32/msacm32/filter.c | 0 {reactos/dll => dll}/win32/msacm32/format.c | 0 .../win32/msacm32/imaadp32/Makefile.in | 0 .../win32/msacm32/imaadp32/imaadp32.acm.spec | 0 .../win32/msacm32/imaadp32/imaadp32.c | 0 {reactos/dll => dll}/win32/msacm32/internal.c | 0 {reactos/dll => dll}/win32/msacm32/msacm.rc | 0 {reactos/dll => dll}/win32/msacm32/msacm.spec | 0 .../dll => dll}/win32/msacm32/msacm.spec.def | 0 .../dll => dll}/win32/msacm32/msacm32.rbuild | 0 .../dll => dll}/win32/msacm32/msacm32.spec | 0 .../dll => dll}/win32/msacm32/msacm32_main.c | 0 .../dll => dll}/win32/msacm32/msacm_De.rc | 0 .../dll => dll}/win32/msacm32/msacm_El.rc | 0 .../dll => dll}/win32/msacm32/msacm_En.rc | 0 .../dll => dll}/win32/msacm32/msacm_Es.rc | 0 .../dll => dll}/win32/msacm32/msacm_Fr.rc | 0 .../dll => dll}/win32/msacm32/msacm_Hu.rc | 0 .../dll => dll}/win32/msacm32/msacm_It.rc | 0 .../dll => dll}/win32/msacm32/msacm_Ja.rc | 0 .../dll => dll}/win32/msacm32/msacm_Nl.rc | 0 .../dll => dll}/win32/msacm32/msacm_No.rc | 0 .../dll => dll}/win32/msacm32/msacm_Pl.rc | 0 .../dll => dll}/win32/msacm32/msacm_Pt.rc | 0 .../dll => dll}/win32/msacm32/msacm_Ru.rc | 0 .../dll => dll}/win32/msacm32/msacm_Sv.rc | 0 .../dll => dll}/win32/msacm32/msacm_Uk.rc | 0 .../dll => dll}/win32/msacm32/msacm_main.c | 0 .../dll => dll}/win32/msacm32/msacm_ros.diff | 0 .../win32/msacm32/msadp32/Makefile.in | 0 .../win32/msacm32/msadp32/msadp32.acm.spec | 0 .../win32/msacm32/msadp32/msadp32.c | 0 .../dll => dll}/win32/msacm32/pcmconverter.c | 0 {reactos/dll => dll}/win32/msacm32/stream.c | 0 {reactos/dll => dll}/win32/msacm32/wineacm.h | 0 .../dll => dll}/win32/msafd/include/debug.h | 0 .../dll => dll}/win32/msafd/include/helpers.h | 0 .../dll => dll}/win32/msafd/misc/dllmain.c | 0 {reactos/dll => dll}/win32/msafd/misc/event.c | 0 .../dll => dll}/win32/msafd/misc/helpers.c | 0 .../dll => dll}/win32/msafd/misc/sndrcv.c | 0 {reactos/dll => dll}/win32/msafd/misc/stubs.c | 0 {reactos/dll => dll}/win32/msafd/msafd.def | 0 {reactos/dll => dll}/win32/msafd/msafd.h | 0 {reactos/dll => dll}/win32/msafd/msafd.rbuild | 0 {reactos/dll => dll}/win32/msafd/msafd.rc | 0 .../win32/mscoree/corruntimehost.c | 0 .../dll => dll}/win32/mscoree/mscoree.rbuild | 0 .../dll => dll}/win32/mscoree/mscoree.spec | 0 .../dll => dll}/win32/mscoree/mscoree_main.c | 0 .../win32/mscoree/mscoree_private.h | 0 .../win32/mscoree/mscoree_ros.diff | 0 {reactos/dll => dll}/win32/msgina/gui.c | 0 .../dll => dll}/win32/msgina/lang/bg-BG.rc | 0 .../dll => dll}/win32/msgina/lang/cs-CZ.rc | 0 .../dll => dll}/win32/msgina/lang/de-DE.rc | 0 .../dll => dll}/win32/msgina/lang/en-US.rc | 0 .../dll => dll}/win32/msgina/lang/es-ES.rc | 0 .../dll => dll}/win32/msgina/lang/fr-FR.rc | 0 .../dll => dll}/win32/msgina/lang/id-ID.rc | 0 .../dll => dll}/win32/msgina/lang/it-IT.rc | 0 .../dll => dll}/win32/msgina/lang/no-NO.rc | 0 .../dll => dll}/win32/msgina/lang/pl-PL.rc | 0 .../dll => dll}/win32/msgina/lang/ru-RU.rc | 0 .../dll => dll}/win32/msgina/lang/sk-SK.rc | 0 .../dll => dll}/win32/msgina/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/msgina/msgina.c | 0 {reactos/dll => dll}/win32/msgina/msgina.h | 0 .../dll => dll}/win32/msgina/msgina.rbuild | 0 {reactos/dll => dll}/win32/msgina/msgina.rc | 0 {reactos/dll => dll}/win32/msgina/msgina.spec | 0 {reactos/dll => dll}/win32/msgina/resource.h | 0 .../win32/msgina/resources/ico_logoff.ico | Bin .../win32/msgina/resources/reactos.bmp | Bin {reactos/dll => dll}/win32/msgina/stubs.c | 0 {reactos/dll => dll}/win32/msgina/tui.c | 0 .../win32/mshtml.tlb/mshtml.tlb.rbuild | 0 .../win32/mshtml.tlb/mshtml.tlb.spec | 0 .../win32/mshtml.tlb/mshtml_tlb.idl | 0 {reactos/dll => dll}/win32/mshtml.tlb/rsrc.rc | 0 {reactos/dll => dll}/win32/mshtml/Bg.rc | 0 {reactos/dll => dll}/win32/mshtml/Da.rc | 0 {reactos/dll => dll}/win32/mshtml/De.rc | 0 {reactos/dll => dll}/win32/mshtml/En.rc | 0 {reactos/dll => dll}/win32/mshtml/Es.rc | 0 {reactos/dll => dll}/win32/mshtml/Fi.rc | 0 {reactos/dll => dll}/win32/mshtml/Fr.rc | 0 {reactos/dll => dll}/win32/mshtml/Hu.rc | 0 {reactos/dll => dll}/win32/mshtml/Ko.rc | 0 {reactos/dll => dll}/win32/mshtml/Nl.rc | 0 {reactos/dll => dll}/win32/mshtml/No.rc | 0 {reactos/dll => dll}/win32/mshtml/Pl.rc | 0 {reactos/dll => dll}/win32/mshtml/Ru.rc | 0 {reactos/dll => dll}/win32/mshtml/Si.rc | 0 {reactos/dll => dll}/win32/mshtml/Sv.rc | 0 {reactos/dll => dll}/win32/mshtml/Tr.rc | 0 {reactos/dll => dll}/win32/mshtml/Zh.rc | 0 {reactos/dll => dll}/win32/mshtml/blank.htm | 0 {reactos/dll => dll}/win32/mshtml/conpoint.c | 0 {reactos/dll => dll}/win32/mshtml/dispex.c | 0 {reactos/dll => dll}/win32/mshtml/editor.c | 0 {reactos/dll => dll}/win32/mshtml/hlink.c | 0 .../dll => dll}/win32/mshtml/htmlanchor.c | 0 {reactos/dll => dll}/win32/mshtml/htmlbody.c | 0 .../dll => dll}/win32/mshtml/htmlcomment.c | 0 {reactos/dll => dll}/win32/mshtml/htmldoc.c | 0 {reactos/dll => dll}/win32/mshtml/htmldoc3.c | 0 {reactos/dll => dll}/win32/mshtml/htmldoc5.c | 0 {reactos/dll => dll}/win32/mshtml/htmlelem.c | 0 {reactos/dll => dll}/win32/mshtml/htmlelem2.c | 0 {reactos/dll => dll}/win32/mshtml/htmlevent.c | 0 .../dll => dll}/win32/mshtml/htmlgeneric.c | 0 {reactos/dll => dll}/win32/mshtml/htmlimg.c | 0 {reactos/dll => dll}/win32/mshtml/htmlinput.c | 0 .../dll => dll}/win32/mshtml/htmllocation.c | 0 {reactos/dll => dll}/win32/mshtml/htmlnode.c | 0 .../dll => dll}/win32/mshtml/htmloption.c | 0 .../dll => dll}/win32/mshtml/htmlscript.c | 0 .../dll => dll}/win32/mshtml/htmlselect.c | 0 {reactos/dll => dll}/win32/mshtml/htmlstyle.c | 0 .../dll => dll}/win32/mshtml/htmlstylesheet.c | 0 {reactos/dll => dll}/win32/mshtml/htmltable.c | 0 .../dll => dll}/win32/mshtml/htmltextarea.c | 0 .../dll => dll}/win32/mshtml/htmltextcont.c | 0 .../dll => dll}/win32/mshtml/htmltextnode.c | 0 .../dll => dll}/win32/mshtml/htmlwindow.c | 0 {reactos/dll => dll}/win32/mshtml/install.c | 0 {reactos/dll => dll}/win32/mshtml/loadopts.c | 0 {reactos/dll => dll}/win32/mshtml/main.c | 0 {reactos/dll => dll}/win32/mshtml/mshtml.inf | 0 .../dll => dll}/win32/mshtml/mshtml.rbuild | 0 {reactos/dll => dll}/win32/mshtml/mshtml.spec | 0 .../dll => dll}/win32/mshtml/mshtml_private.h | 0 {reactos/dll => dll}/win32/mshtml/navigate.c | 0 {reactos/dll => dll}/win32/mshtml/nsembed.c | 0 {reactos/dll => dll}/win32/mshtml/nsevents.c | 0 {reactos/dll => dll}/win32/mshtml/nsiface.idl | 0 {reactos/dll => dll}/win32/mshtml/nsio.c | 0 {reactos/dll => dll}/win32/mshtml/nsservice.c | 0 {reactos/dll => dll}/win32/mshtml/olecmd.c | 0 {reactos/dll => dll}/win32/mshtml/oleobj.c | 0 {reactos/dll => dll}/win32/mshtml/olewnd.c | 0 .../dll => dll}/win32/mshtml/omnavigator.c | 0 {reactos/dll => dll}/win32/mshtml/persist.c | 0 {reactos/dll => dll}/win32/mshtml/protocol.c | 0 {reactos/dll => dll}/win32/mshtml/resource.h | 0 {reactos/dll => dll}/win32/mshtml/rsrc.rc | 0 {reactos/dll => dll}/win32/mshtml/script.c | 0 {reactos/dll => dll}/win32/mshtml/selection.c | 0 {reactos/dll => dll}/win32/mshtml/service.c | 0 {reactos/dll => dll}/win32/mshtml/task.c | 0 {reactos/dll => dll}/win32/mshtml/txtrange.c | 0 {reactos/dll => dll}/win32/mshtml/view.c | 0 {reactos/dll => dll}/win32/msi/action.c | 0 {reactos/dll => dll}/win32/msi/alter.c | 0 {reactos/dll => dll}/win32/msi/appsearch.c | 0 {reactos/dll => dll}/win32/msi/automation.c | 0 {reactos/dll => dll}/win32/msi/classes.c | 0 {reactos/dll => dll}/win32/msi/cond.tab.c | 0 {reactos/dll => dll}/win32/msi/cond.tab.h | 0 {reactos/dll => dll}/win32/msi/cond.y | 0 {reactos/dll => dll}/win32/msi/create.c | 0 {reactos/dll => dll}/win32/msi/custom.c | 0 {reactos/dll => dll}/win32/msi/database.c | 0 {reactos/dll => dll}/win32/msi/delete.c | 0 {reactos/dll => dll}/win32/msi/dialog.c | 0 {reactos/dll => dll}/win32/msi/distinct.c | 0 {reactos/dll => dll}/win32/msi/events.c | 0 {reactos/dll => dll}/win32/msi/files.c | 0 {reactos/dll => dll}/win32/msi/font.c | 0 {reactos/dll => dll}/win32/msi/format.c | 0 {reactos/dll => dll}/win32/msi/handle.c | 0 {reactos/dll => dll}/win32/msi/helpers.c | 0 {reactos/dll => dll}/win32/msi/insert.c | 0 {reactos/dll => dll}/win32/msi/instabsent.bmp | Bin {reactos/dll => dll}/win32/msi/instadvert.bmp | Bin {reactos/dll => dll}/win32/msi/install.c | 0 {reactos/dll => dll}/win32/msi/instlocal.bmp | Bin {reactos/dll => dll}/win32/msi/join.c | 0 {reactos/dll => dll}/win32/msi/msi.c | 0 {reactos/dll => dll}/win32/msi/msi.rbuild | 0 {reactos/dll => dll}/win32/msi/msi.rc | 0 {reactos/dll => dll}/win32/msi/msi.spec | 0 {reactos/dll => dll}/win32/msi/msi_Bg.rc | 0 {reactos/dll => dll}/win32/msi/msi_Da.rc | 0 {reactos/dll => dll}/win32/msi/msi_De.rc | 0 {reactos/dll => dll}/win32/msi/msi_En.rc | 0 {reactos/dll => dll}/win32/msi/msi_Eo.rc | 0 {reactos/dll => dll}/win32/msi/msi_Es.rc | 0 {reactos/dll => dll}/win32/msi/msi_Fi.rc | 0 {reactos/dll => dll}/win32/msi/msi_Fr.rc | 0 {reactos/dll => dll}/win32/msi/msi_Hu.rc | 0 {reactos/dll => dll}/win32/msi/msi_It.rc | 0 {reactos/dll => dll}/win32/msi/msi_Ja.rc | 0 {reactos/dll => dll}/win32/msi/msi_Ko.rc | 0 {reactos/dll => dll}/win32/msi/msi_Nl.rc | 0 {reactos/dll => dll}/win32/msi/msi_No.rc | 0 {reactos/dll => dll}/win32/msi/msi_Pl.rc | 0 {reactos/dll => dll}/win32/msi/msi_Pt.rc | 0 {reactos/dll => dll}/win32/msi/msi_Ru.rc | 0 {reactos/dll => dll}/win32/msi/msi_Si.rc | 0 {reactos/dll => dll}/win32/msi/msi_Sv.rc | 0 {reactos/dll => dll}/win32/msi/msi_Tr.rc | 0 {reactos/dll => dll}/win32/msi/msi_main.c | 0 {reactos/dll => dll}/win32/msi/msi_ros.diff | 0 {reactos/dll => dll}/win32/msi/msipriv.h | 0 {reactos/dll => dll}/win32/msi/msiquery.c | 0 {reactos/dll => dll}/win32/msi/msiserver.idl | 0 .../dll => dll}/win32/msi/msiserver_dispids.h | 0 {reactos/dll => dll}/win32/msi/package.c | 0 {reactos/dll => dll}/win32/msi/preview.c | 0 {reactos/dll => dll}/win32/msi/query.h | 0 {reactos/dll => dll}/win32/msi/record.c | 0 {reactos/dll => dll}/win32/msi/registry.c | 0 {reactos/dll => dll}/win32/msi/regsvr.c | 0 {reactos/dll => dll}/win32/msi/script.c | 0 {reactos/dll => dll}/win32/msi/select.c | 0 {reactos/dll => dll}/win32/msi/source.c | 0 {reactos/dll => dll}/win32/msi/sql.tab.c | 0 {reactos/dll => dll}/win32/msi/sql.tab.h | 0 {reactos/dll => dll}/win32/msi/sql.y | 0 {reactos/dll => dll}/win32/msi/storages.c | 0 {reactos/dll => dll}/win32/msi/streams.c | 0 {reactos/dll => dll}/win32/msi/string.c | 0 {reactos/dll => dll}/win32/msi/suminfo.c | 0 {reactos/dll => dll}/win32/msi/table.c | 0 {reactos/dll => dll}/win32/msi/tokenize.c | 0 {reactos/dll => dll}/win32/msi/update.c | 0 {reactos/dll => dll}/win32/msi/upgrade.c | 0 {reactos/dll => dll}/win32/msi/version.rc | 0 {reactos/dll => dll}/win32/msi/where.c | 0 .../dll => dll}/win32/msimg32/msimg32.rbuild | 0 .../dll => dll}/win32/msimg32/msimg32.spec | 0 .../dll => dll}/win32/msimg32/msimg32_main.c | 0 {reactos/dll => dll}/win32/mstask/factory.c | 0 {reactos/dll => dll}/win32/mstask/mstask.inf | 0 .../dll => dll}/win32/mstask/mstask.rbuild | 0 {reactos/dll => dll}/win32/mstask/mstask.spec | 0 .../dll => dll}/win32/mstask/mstask_local.idl | 0 .../dll => dll}/win32/mstask/mstask_main.c | 0 .../dll => dll}/win32/mstask/mstask_private.h | 0 {reactos/dll => dll}/win32/mstask/rsrc.rc | 0 {reactos/dll => dll}/win32/mstask/task.c | 0 .../dll => dll}/win32/mstask/task_scheduler.c | 0 .../dll => dll}/win32/mstask/task_trigger.c | 0 {reactos/dll => dll}/win32/msvcrt/dllmain.c | 0 {reactos/dll => dll}/win32/msvcrt/msvcrt.def | 0 .../dll => dll}/win32/msvcrt/msvcrt.rbuild | 0 {reactos/dll => dll}/win32/msvcrt/msvcrt.rc | 0 {reactos/dll => dll}/win32/msvcrt/precomp.h | 0 .../dll => dll}/win32/msvcrt20/msvcrt20.c | 0 .../win32/msvcrt20/msvcrt20.rbuild | 0 .../dll => dll}/win32/msvcrt20/msvcrt20.spec | 0 .../dll => dll}/win32/msvcrt40/msvcrt40.c | 0 .../win32/msvcrt40/msvcrt40.rbuild | 0 .../dll => dll}/win32/msvcrt40/msvcrt40.spec | 0 {reactos/dll => dll}/win32/msvfw32/drawdib.c | 0 {reactos/dll => dll}/win32/msvfw32/mciwnd.c | 0 .../dll => dll}/win32/msvfw32/msvfw32.rbuild | 0 .../dll => dll}/win32/msvfw32/msvfw32.spec | 0 .../dll => dll}/win32/msvfw32/msvfw32_Da.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_De.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_En.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Es.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Fr.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Hu.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Ko.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Nl.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_No.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Pl.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Ru.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Si.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Sv.rc | 0 .../dll => dll}/win32/msvfw32/msvfw32_Tr.rc | 0 .../win32/msvfw32/msvfw32_ros.diff | 0 .../dll => dll}/win32/msvfw32/msvideo.spec | 0 .../dll => dll}/win32/msvfw32/msvideo16.c | 0 .../dll => dll}/win32/msvfw32/msvideo_main.c | 0 .../win32/msvfw32/msvideo_private.h | 0 {reactos/dll => dll}/win32/msvfw32/rsrc.rc | 0 {reactos/dll => dll}/win32/msvfw32/vfw16.h | 0 .../dll => dll}/win32/mswsock/extensions.c | 0 .../dll => dll}/win32/mswsock/mswsock.def | 0 .../dll => dll}/win32/mswsock/mswsock.rbuild | 0 {reactos/dll => dll}/win32/mswsock/mswsock.rc | 0 {reactos/dll => dll}/win32/mswsock/stubs.c | 0 {reactos/dll => dll}/win32/msxml3/attribute.c | 0 {reactos/dll => dll}/win32/msxml3/bsc.c | 0 {reactos/dll => dll}/win32/msxml3/cdata.c | 0 {reactos/dll => dll}/win32/msxml3/comment.c | 0 {reactos/dll => dll}/win32/msxml3/dispex.c | 0 {reactos/dll => dll}/win32/msxml3/docfrag.c | 0 {reactos/dll => dll}/win32/msxml3/domdoc.c | 0 {reactos/dll => dll}/win32/msxml3/domimpl.c | 0 {reactos/dll => dll}/win32/msxml3/element.c | 0 {reactos/dll => dll}/win32/msxml3/entityref.c | 0 {reactos/dll => dll}/win32/msxml3/factory.c | 0 {reactos/dll => dll}/win32/msxml3/main.c | 0 .../dll => dll}/win32/msxml3/msxml3.rbuild | 0 {reactos/dll => dll}/win32/msxml3/msxml3.spec | 0 .../dll => dll}/win32/msxml3/msxml3_v1.idl | 0 .../dll => dll}/win32/msxml3/msxml_private.h | 0 {reactos/dll => dll}/win32/msxml3/node.c | 0 {reactos/dll => dll}/win32/msxml3/nodelist.c | 0 {reactos/dll => dll}/win32/msxml3/nodemap.c | 0 .../dll => dll}/win32/msxml3/parseerror.c | 0 {reactos/dll => dll}/win32/msxml3/pi.c | 0 .../dll => dll}/win32/msxml3/queryresult.c | 0 {reactos/dll => dll}/win32/msxml3/regsvr.c | 0 {reactos/dll => dll}/win32/msxml3/saxreader.c | 0 {reactos/dll => dll}/win32/msxml3/schema.c | 0 {reactos/dll => dll}/win32/msxml3/text.c | 0 {reactos/dll => dll}/win32/msxml3/uuid.c | 0 {reactos/dll => dll}/win32/msxml3/version.rc | 0 {reactos/dll => dll}/win32/msxml3/xmldoc.c | 0 {reactos/dll => dll}/win32/msxml3/xmlelem.c | 0 {reactos/dll => dll}/win32/nddeapi/nddeapi.c | 0 .../dll => dll}/win32/nddeapi/nddeapi.rbuild | 0 .../dll => dll}/win32/nddeapi/nddeapi.spec | 0 {reactos/dll => dll}/win32/netapi32/access.c | 0 {reactos/dll => dll}/win32/netapi32/apibuf.c | 0 {reactos/dll => dll}/win32/netapi32/browsr.c | 0 {reactos/dll => dll}/win32/netapi32/ds.c | 0 .../dll => dll}/win32/netapi32/local_group.c | 0 .../dll => dll}/win32/netapi32/nbcmdqueue.c | 0 .../dll => dll}/win32/netapi32/nbcmdqueue.h | 0 .../dll => dll}/win32/netapi32/nbnamecache.c | 0 .../dll => dll}/win32/netapi32/nbnamecache.h | 0 {reactos/dll => dll}/win32/netapi32/nbt.c | 0 .../dll => dll}/win32/netapi32/netapi32.c | 0 .../win32/netapi32/netapi32.rbuild | 0 .../dll => dll}/win32/netapi32/netapi32.spec | 0 {reactos/dll => dll}/win32/netapi32/netbios.c | 0 {reactos/dll => dll}/win32/netapi32/netbios.h | 0 {reactos/dll => dll}/win32/netapi32/share.c | 0 {reactos/dll => dll}/win32/netapi32/wksta.c | 0 .../dll => dll}/win32/netcfgx/classfactory.c | 0 .../win32/netcfgx/inetcfgcomp_iface.c | 0 .../dll => dll}/win32/netcfgx/lang/bg-BG.rc | 0 .../dll => dll}/win32/netcfgx/lang/cs-CZ.rc | 0 .../dll => dll}/win32/netcfgx/lang/da-DK.rc | 0 .../dll => dll}/win32/netcfgx/lang/de-DE.rc | 0 .../dll => dll}/win32/netcfgx/lang/el-GR.rc | 0 .../dll => dll}/win32/netcfgx/lang/en-US.rc | 0 .../dll => dll}/win32/netcfgx/lang/es-ES.rc | 0 .../dll => dll}/win32/netcfgx/lang/fr-FR.rc | 0 .../dll => dll}/win32/netcfgx/lang/hu-HU.rc | 0 .../dll => dll}/win32/netcfgx/lang/id-ID.rc | 0 .../dll => dll}/win32/netcfgx/lang/it-IT.rc | 0 .../dll => dll}/win32/netcfgx/lang/ja-JP.rc | 0 .../dll => dll}/win32/netcfgx/lang/nl-NL.rc | 0 .../dll => dll}/win32/netcfgx/lang/no-NO.rc | 0 .../dll => dll}/win32/netcfgx/lang/pl-PL.rc | 0 .../dll => dll}/win32/netcfgx/lang/ru-RU.rc | 0 .../dll => dll}/win32/netcfgx/lang/sk-SK.rc | 0 .../dll => dll}/win32/netcfgx/lang/sv-SE.rc | 0 .../dll => dll}/win32/netcfgx/lang/uk-UA.rc | 0 .../dll => dll}/win32/netcfgx/lang/zh-CN.rc | 0 .../dll => dll}/win32/netcfgx/netcfg_iface.c | 0 {reactos/dll => dll}/win32/netcfgx/netcfgx.c | 0 .../dll => dll}/win32/netcfgx/netcfgx.rbuild | 0 {reactos/dll => dll}/win32/netcfgx/netcfgx.rc | 0 .../dll => dll}/win32/netcfgx/netcfgx.spec | 0 {reactos/dll => dll}/win32/netcfgx/precomp.h | 0 {reactos/dll => dll}/win32/netcfgx/resource.h | 0 .../win32/netcfgx/tcpipconf_notify.c | 0 .../dll => dll}/win32/netid/lang/bg-BG.rc | 0 .../dll => dll}/win32/netid/lang/cs-CZ.rc | 0 .../dll => dll}/win32/netid/lang/de-DE.rc | 0 .../dll => dll}/win32/netid/lang/el-GR.rc | 0 .../dll => dll}/win32/netid/lang/en-US.rc | 0 .../dll => dll}/win32/netid/lang/es-ES.rc | 0 .../dll => dll}/win32/netid/lang/fr-FR.rc | 0 .../dll => dll}/win32/netid/lang/id-ID.rc | 0 .../dll => dll}/win32/netid/lang/it-IT.rc | 0 .../dll => dll}/win32/netid/lang/no-NO.rc | 0 .../dll => dll}/win32/netid/lang/pl-PL.rc | 0 .../dll => dll}/win32/netid/lang/ru-RU.rc | 0 .../dll => dll}/win32/netid/lang/sk-SK.rc | 0 .../dll => dll}/win32/netid/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/netid/netid.c | 0 {reactos/dll => dll}/win32/netid/netid.rbuild | 0 {reactos/dll => dll}/win32/netid/netid.rc | 0 {reactos/dll => dll}/win32/netid/netid.spec | 0 {reactos/dll => dll}/win32/netid/res/101.ico | Bin {reactos/dll => dll}/win32/netid/res/102.ico | Bin {reactos/dll => dll}/win32/netid/resource.h | 0 {reactos/dll => dll}/win32/netid/rsrc.rc | 0 .../dll => dll}/win32/netshell/classfactory.c | 0 .../win32/netshell/connectmanager.c | 0 .../dll => dll}/win32/netshell/enumlist.c | 0 .../dll => dll}/win32/netshell/lanconnectui.c | 0 .../dll => dll}/win32/netshell/lang/bg-BG.rc | 0 .../dll => dll}/win32/netshell/lang/cs-CZ.rc | 0 .../dll => dll}/win32/netshell/lang/da-DK.rc | 0 .../dll => dll}/win32/netshell/lang/de-DE.rc | 0 .../dll => dll}/win32/netshell/lang/el-GR.rc | 0 .../dll => dll}/win32/netshell/lang/en-US.rc | 0 .../dll => dll}/win32/netshell/lang/es-ES.rc | 0 .../dll => dll}/win32/netshell/lang/fr-FR.rc | 0 .../dll => dll}/win32/netshell/lang/hu-HU.rc | 0 .../dll => dll}/win32/netshell/lang/id-ID.rc | 0 .../dll => dll}/win32/netshell/lang/it-IT.rc | 0 .../dll => dll}/win32/netshell/lang/ja-JP.rc | 0 .../dll => dll}/win32/netshell/lang/nl-NL.rc | 0 .../dll => dll}/win32/netshell/lang/no-NO.rc | 0 .../dll => dll}/win32/netshell/lang/pl-PL.rc | 0 .../dll => dll}/win32/netshell/lang/ru-RU.rc | 0 .../dll => dll}/win32/netshell/lang/sk-SK.rc | 0 .../dll => dll}/win32/netshell/lang/sv-SE.rc | 0 .../dll => dll}/win32/netshell/lang/uk-UA.rc | 0 .../dll => dll}/win32/netshell/lang/zh-CN.rc | 0 .../dll => dll}/win32/netshell/lanstatusui.c | 0 .../dll => dll}/win32/netshell/netshell.c | 0 .../win32/netshell/netshell.rbuild | 0 .../dll => dll}/win32/netshell/netshell.rc | 0 .../dll => dll}/win32/netshell/netshell.spec | 0 {reactos/dll => dll}/win32/netshell/precomp.h | 0 .../win32/netshell/res/neterror.ico | Bin .../win32/netshell/res/netidle.ico | Bin .../dll => dll}/win32/netshell/res/netoff.ico | Bin .../dll => dll}/win32/netshell/res/netrec.ico | Bin .../win32/netshell/res/netshell.ico | Bin .../win32/netshell/res/nettrans.ico | Bin .../win32/netshell/res/nettrrec.ico | Bin .../dll => dll}/win32/netshell/resource.h | 0 .../win32/netshell/shfldr_netconnect.c | 0 .../dll => dll}/win32/newdev/lang/bg-BG.rc | 0 .../dll => dll}/win32/newdev/lang/cs-CZ.rc | 0 .../dll => dll}/win32/newdev/lang/de-DE.rc | 0 .../dll => dll}/win32/newdev/lang/el-GR.rc | 0 .../dll => dll}/win32/newdev/lang/en-US.rc | 0 .../dll => dll}/win32/newdev/lang/es-ES.rc | 0 .../dll => dll}/win32/newdev/lang/fr-FR.rc | 0 .../dll => dll}/win32/newdev/lang/hu-HU.rc | 0 .../dll => dll}/win32/newdev/lang/id-ID.rc | 0 .../dll => dll}/win32/newdev/lang/it-IT.rc | 0 .../dll => dll}/win32/newdev/lang/no-NO.rc | 0 .../dll => dll}/win32/newdev/lang/pl-PL.rc | 0 .../dll => dll}/win32/newdev/lang/ru-RU.rc | 0 .../dll => dll}/win32/newdev/lang/sk-SK.rc | 0 .../dll => dll}/win32/newdev/lang/th-TH.rc | 0 .../dll => dll}/win32/newdev/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/newdev/newdev.c | 0 .../dll => dll}/win32/newdev/newdev.rbuild | 0 {reactos/dll => dll}/win32/newdev/newdev.rc | 0 {reactos/dll => dll}/win32/newdev/newdev.spec | 0 .../dll => dll}/win32/newdev/newdev_private.h | 0 {reactos/dll => dll}/win32/newdev/resource.h | 0 .../win32/newdev/resources/header.bmp | Bin .../win32/newdev/resources/watermark.bmp | Bin {reactos/dll => dll}/win32/newdev/rsrc.rc | 0 {reactos/dll => dll}/win32/newdev/stubs.c | 0 {reactos/dll => dll}/win32/newdev/wizard.c | 0 {reactos/dll => dll}/win32/ntdsapi/ntdsapi.c | 0 .../dll => dll}/win32/ntdsapi/ntdsapi.rbuild | 0 .../dll => dll}/win32/ntdsapi/ntdsapi.spec | 0 {reactos/dll => dll}/win32/ntmarta/ntmarta.c | 0 {reactos/dll => dll}/win32/ntmarta/ntmarta.h | 0 .../dll => dll}/win32/ntmarta/ntmarta.rbuild | 0 {reactos/dll => dll}/win32/ntmarta/ntmarta.rc | 0 .../dll => dll}/win32/ntmarta/ntmarta.spec | 0 {reactos/dll => dll}/win32/objsel/factory.c | 0 {reactos/dll => dll}/win32/objsel/objsel.c | 0 .../dll => dll}/win32/objsel/objsel.rbuild | 0 {reactos/dll => dll}/win32/objsel/objsel.rc | 0 {reactos/dll => dll}/win32/objsel/objsel.spec | 0 .../dll => dll}/win32/objsel/objsel_private.h | 0 {reactos/dll => dll}/win32/objsel/regsvr.c | 0 {reactos/dll => dll}/win32/odbc32/Makefile.in | 0 {reactos/dll => dll}/win32/odbc32/README.txt | 0 .../dll => dll}/win32/odbc32/odbc32.rbuild | 0 {reactos/dll => dll}/win32/odbc32/odbc32.rc | 0 {reactos/dll => dll}/win32/odbc32/odbc32.spec | 0 {reactos/dll => dll}/win32/odbc32/proxyodbc.c | 0 {reactos/dll => dll}/win32/odbc32/proxyodbc.h | 0 .../dll => dll}/win32/odbccp32/odbccp32.c | 0 .../win32/odbccp32/odbccp32.rbuild | 0 .../dll => dll}/win32/odbccp32/odbccp32.spec | 0 .../dll => dll}/win32/ole32/antimoniker.c | 0 {reactos/dll => dll}/win32/ole32/bindctx.c | 0 .../dll => dll}/win32/ole32/classmoniker.c | 0 {reactos/dll => dll}/win32/ole32/clipboard.c | 0 {reactos/dll => dll}/win32/ole32/compobj.c | 0 {reactos/dll => dll}/win32/ole32/compobj.spec | 0 .../dll => dll}/win32/ole32/compobj_private.h | 0 .../win32/ole32/compositemoniker.c | 0 {reactos/dll => dll}/win32/ole32/datacache.c | 0 {reactos/dll => dll}/win32/ole32/dcom.idl | 0 .../dll => dll}/win32/ole32/defaulthandler.c | 0 {reactos/dll => dll}/win32/ole32/dictionary.c | 0 {reactos/dll => dll}/win32/ole32/dictionary.h | 0 .../dll => dll}/win32/ole32/drag_copy.cur | Bin .../dll => dll}/win32/ole32/drag_link.cur | Bin .../dll => dll}/win32/ole32/drag_move.cur | Bin {reactos/dll => dll}/win32/ole32/enumx.c | 0 {reactos/dll => dll}/win32/ole32/enumx.h | 0 {reactos/dll => dll}/win32/ole32/errorinfo.c | 0 .../dll => dll}/win32/ole32/filemoniker.c | 0 {reactos/dll => dll}/win32/ole32/ftmarshal.c | 0 {reactos/dll => dll}/win32/ole32/git.c | 0 .../dll => dll}/win32/ole32/hglobalstream.c | 0 {reactos/dll => dll}/win32/ole32/ifs.c | 0 {reactos/dll => dll}/win32/ole32/ifs.h | 0 {reactos/dll => dll}/win32/ole32/irot.idl | 0 .../dll => dll}/win32/ole32/itemmoniker.c | 0 {reactos/dll => dll}/win32/ole32/marshal.c | 0 .../dll => dll}/win32/ole32/memlockbytes.c | 0 .../dll => dll}/win32/ole32/memlockbytes16.c | 0 {reactos/dll => dll}/win32/ole32/moniker.c | 0 {reactos/dll => dll}/win32/ole32/moniker.h | 0 {reactos/dll => dll}/win32/ole32/nodrop.cur | Bin {reactos/dll => dll}/win32/ole32/ole16.c | 0 {reactos/dll => dll}/win32/ole32/ole2.c | 0 {reactos/dll => dll}/win32/ole32/ole2.spec | 0 {reactos/dll => dll}/win32/ole32/ole2_16.c | 0 .../dll => dll}/win32/ole32/ole2conv.spec | 0 {reactos/dll => dll}/win32/ole32/ole2impl.c | 0 {reactos/dll => dll}/win32/ole32/ole2nls.c | 0 {reactos/dll => dll}/win32/ole32/ole2nls.spec | 0 .../dll => dll}/win32/ole32/ole2prox.spec | 0 {reactos/dll => dll}/win32/ole32/ole2stubs.c | 0 {reactos/dll => dll}/win32/ole32/ole2thk.spec | 0 {reactos/dll => dll}/win32/ole32/ole32.rbuild | 0 {reactos/dll => dll}/win32/ole32/ole32.spec | 0 {reactos/dll => dll}/win32/ole32/ole32_main.c | 0 .../dll => dll}/win32/ole32/ole32_objidl.idl | 0 .../dll => dll}/win32/ole32/ole32_oleidl.idl | 0 .../dll => dll}/win32/ole32/ole32_ros.diff | 0 .../dll => dll}/win32/ole32/ole32_unknwn.idl | 0 {reactos/dll => dll}/win32/ole32/ole32res.rc | 0 {reactos/dll => dll}/win32/ole32/oleobj.c | 0 {reactos/dll => dll}/win32/ole32/oleproxy.c | 0 {reactos/dll => dll}/win32/ole32/olestd.h | 0 .../dll => dll}/win32/ole32/pointermoniker.c | 0 {reactos/dll => dll}/win32/ole32/regsvr.c | 0 {reactos/dll => dll}/win32/ole32/rpc.c | 0 .../win32/ole32/stg_bigblockfile.c | 0 {reactos/dll => dll}/win32/ole32/stg_prop.c | 0 {reactos/dll => dll}/win32/ole32/stg_stream.c | 0 {reactos/dll => dll}/win32/ole32/storage.c | 0 {reactos/dll => dll}/win32/ole32/storage.spec | 0 {reactos/dll => dll}/win32/ole32/storage32.c | 0 {reactos/dll => dll}/win32/ole32/storage32.h | 0 .../dll => dll}/win32/ole32/stubmanager.c | 0 {reactos/dll => dll}/win32/ole32/usrmarshal.c | 0 {reactos/dll => dll}/win32/ole32/version.rc | 0 {reactos/dll => dll}/win32/ole32/version16.rc | 0 {reactos/dll => dll}/win32/oleacc/main.c | 0 .../dll => dll}/win32/oleacc/oleacc.rbuild | 0 {reactos/dll => dll}/win32/oleacc/oleacc.spec | 0 {reactos/dll => dll}/win32/oleaut32/connpt.c | 0 {reactos/dll => dll}/win32/oleaut32/connpt.h | 0 .../dll => dll}/win32/oleaut32/dispatch.c | 0 {reactos/dll => dll}/win32/oleaut32/hash.c | 0 .../dll => dll}/win32/oleaut32/ole2disp.c | 0 .../dll => dll}/win32/oleaut32/ole2disp.h | 0 .../dll => dll}/win32/oleaut32/ole2disp.spec | 0 {reactos/dll => dll}/win32/oleaut32/oleaut.c | 0 .../win32/oleaut32/oleaut32.rbuild | 0 .../dll => dll}/win32/oleaut32/oleaut32.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32.spec | 0 .../dll => dll}/win32/oleaut32/oleaut32_Bg.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Cz.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Da.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_De.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_El.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_En.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Eo.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Es.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Fr.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Hu.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_It.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Ja.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Ko.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Nl.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_No.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Pl.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Pt.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Ro.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Ru.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Si.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Sv.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Th.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Tr.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Uk.rc | 0 .../dll => dll}/win32/oleaut32/oleaut32_Zh.rc | 0 .../win32/oleaut32/oleaut32_oaidl.idl | 0 .../win32/oleaut32/oleaut32_ocidl.idl | 0 .../win32/oleaut32/oleaut32_ros.diff | 0 {reactos/dll => dll}/win32/oleaut32/olefont.c | 0 .../dll => dll}/win32/oleaut32/olepicture.c | 0 {reactos/dll => dll}/win32/oleaut32/recinfo.c | 0 {reactos/dll => dll}/win32/oleaut32/regsvr.c | 0 .../dll => dll}/win32/oleaut32/resource.h | 0 .../dll => dll}/win32/oleaut32/safearray.c | 0 {reactos/dll => dll}/win32/oleaut32/stubs.c | 0 .../dll => dll}/win32/oleaut32/tmarshal.c | 0 {reactos/dll => dll}/win32/oleaut32/typelib.c | 0 {reactos/dll => dll}/win32/oleaut32/typelib.h | 0 .../dll => dll}/win32/oleaut32/typelib.spec | 0 .../dll => dll}/win32/oleaut32/typelib16.c | 0 .../dll => dll}/win32/oleaut32/typelib2.c | 0 {reactos/dll => dll}/win32/oleaut32/ungif.c | 0 {reactos/dll => dll}/win32/oleaut32/ungif.h | 0 .../dll => dll}/win32/oleaut32/usrmarshal.c | 0 .../dll => dll}/win32/oleaut32/varformat.c | 0 {reactos/dll => dll}/win32/oleaut32/variant.c | 0 {reactos/dll => dll}/win32/oleaut32/variant.h | 0 {reactos/dll => dll}/win32/oleaut32/vartype.c | 0 .../dll => dll}/win32/oleaut32/version.rc | 0 {reactos/dll => dll}/win32/oledlg/insobjdlg.c | 0 .../dll => dll}/win32/oledlg/oledlg.rbuild | 0 {reactos/dll => dll}/win32/oledlg/oledlg.spec | 0 .../dll => dll}/win32/oledlg/oledlg_Cs.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Da.rc | 0 .../dll => dll}/win32/oledlg/oledlg_De.rc | 0 .../dll => dll}/win32/oledlg/oledlg_En.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Es.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Fr.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Hu.rc | 0 .../dll => dll}/win32/oledlg/oledlg_It.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Ja.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Ko.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Nl.rc | 0 .../dll => dll}/win32/oledlg/oledlg_No.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Pl.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Pt.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Ru.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Si.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Sv.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Tr.rc | 0 .../dll => dll}/win32/oledlg/oledlg_Uk.rc | 0 .../dll => dll}/win32/oledlg/oledlg_main.c | 0 .../dll => dll}/win32/oledlg/oledlg_private.h | 0 .../dll => dll}/win32/oledlg/oledlg_ros.diff | 0 {reactos/dll => dll}/win32/oledlg/pastespl.c | 0 {reactos/dll => dll}/win32/oledlg/resource.h | 0 {reactos/dll => dll}/win32/oledlg/rsrc.rc | 0 {reactos/dll => dll}/win32/olepro32/README | 0 .../win32/olepro32/olepro32.rbuild | 0 .../dll => dll}/win32/olepro32/olepro32.spec | 0 .../win32/olepro32/olepro32stubs.c | 0 .../dll => dll}/win32/olepro32/version.rc | 0 {reactos/dll => dll}/win32/opengl32/gl.c | 0 {reactos/dll => dll}/win32/opengl32/glfuncs.h | 0 {reactos/dll => dll}/win32/opengl32/icdlist.h | 0 .../dll => dll}/win32/opengl32/icdtable.h | 0 .../dll => dll}/win32/opengl32/opengl32.c | 0 .../dll => dll}/win32/opengl32/opengl32.def | 0 .../dll => dll}/win32/opengl32/opengl32.dsp | 0 .../dll => dll}/win32/opengl32/opengl32.dsw | 0 .../dll => dll}/win32/opengl32/opengl32.h | 0 .../win32/opengl32/opengl32.rbuild | 0 {reactos/dll => dll}/win32/opengl32/wgl.c | 0 {reactos/dll => dll}/win32/packet/Packet32.c | 0 .../win32/packet/include/packet32.h | 0 {reactos/dll => dll}/win32/packet/packet.def | 0 {reactos/dll => dll}/win32/packet/packet.rc | 0 {reactos/dll => dll}/win32/packet/resource.h | 0 {reactos/dll => dll}/win32/packet/trace.c | 0 {reactos/dll => dll}/win32/packet/trace.h | 0 {reactos/dll => dll}/win32/pdh/pdh.rbuild | 0 {reactos/dll => dll}/win32/pdh/pdh.spec | 0 {reactos/dll => dll}/win32/pdh/pdh_main.c | 0 .../dll => dll}/win32/powrprof/powrprof.c | 0 .../win32/powrprof/powrprof.rbuild | 0 .../dll => dll}/win32/powrprof/powrprof.rc | 0 .../dll => dll}/win32/powrprof/powrprof.spec | 0 {reactos/dll => dll}/win32/printui/printui.c | 0 .../dll => dll}/win32/printui/printui.rbuild | 0 {reactos/dll => dll}/win32/printui/printui.rc | 0 .../dll => dll}/win32/printui/printui.spec | 0 .../win32/printui/printui_private.h | 0 {reactos/dll => dll}/win32/psapi/internal.h | 0 {reactos/dll => dll}/win32/psapi/malloc.c | 0 {reactos/dll => dll}/win32/psapi/precomp.h | 0 {reactos/dll => dll}/win32/psapi/psapi.c | 0 {reactos/dll => dll}/win32/psapi/psapi.def | 0 {reactos/dll => dll}/win32/psapi/psapi.rbuild | 0 {reactos/dll => dll}/win32/psapi/psapi.rc | 0 {reactos/dll => dll}/win32/pstorec/pstorec.c | 0 .../dll => dll}/win32/pstorec/pstorec.rbuild | 0 .../dll => dll}/win32/pstorec/pstorec.spec | 0 .../win32/pstorec/pstorec_ros.diff | 0 {reactos/dll => dll}/win32/rasapi32/rasapi.c | 0 .../dll => dll}/win32/rasapi32/rasapi16.spec | 0 .../win32/rasapi32/rasapi32.rbuild | 0 .../dll => dll}/win32/rasapi32/rasapi32.spec | 0 .../dll => dll}/win32/rasdlg/lang/de-DE.rc | 0 .../dll => dll}/win32/rasdlg/lang/en-US.rc | 0 .../dll => dll}/win32/rasdlg/lang/no-NO.rc | 0 .../dll => dll}/win32/rasdlg/lang/pl-PL.rc | 0 .../dll => dll}/win32/rasdlg/lang/ru-RU.rc | 0 .../dll => dll}/win32/rasdlg/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/rasdlg/rasdlg.c | 0 .../dll => dll}/win32/rasdlg/rasdlg.rbuild | 0 {reactos/dll => dll}/win32/rasdlg/rasdlg.rc | 0 {reactos/dll => dll}/win32/rasdlg/rasdlg.spec | 0 .../win32/rasdlg/res/bitmaps/100.bmp | Bin .../win32/rasdlg/res/bitmaps/101.bmp | Bin .../win32/rasdlg/res/bitmaps/102.bmp | Bin .../win32/rasdlg/res/bitmaps/1678.bmp | Bin .../win32/rasdlg/res/icons/134.ico | Bin .../win32/rasdlg/res/icons/135.ico | Bin .../win32/rasdlg/res/icons/144.ico | Bin .../win32/rasdlg/res/icons/145.ico | Bin .../win32/rasdlg/res/icons/15102.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/50.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/51.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/52.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/53.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/54.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/55.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/56.ico | Bin .../win32/rasdlg/res/icons/562.ico | Bin .../win32/rasdlg/res/icons/563.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/57.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/58.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/59.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/60.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/61.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/62.ico | Bin .../dll => dll}/win32/rasdlg/res/icons/63.ico | Bin {reactos/dll => dll}/win32/rasdlg/resource.h | 0 {reactos/dll => dll}/win32/rasman/rasman.c | 0 .../dll => dll}/win32/rasman/rasman.rbuild | 0 {reactos/dll => dll}/win32/rasman/rasman.rc | 0 {reactos/dll => dll}/win32/rasman/rasman.spec | 0 {reactos/dll => dll}/win32/riched20/caret.c | 0 .../dll => dll}/win32/riched20/clipboard.c | 0 {reactos/dll => dll}/win32/riched20/context.c | 0 {reactos/dll => dll}/win32/riched20/editor.c | 0 {reactos/dll => dll}/win32/riched20/editor.h | 0 {reactos/dll => dll}/win32/riched20/editstr.h | 0 {reactos/dll => dll}/win32/riched20/list.c | 0 .../win32/riched20/ocr_reverse.cur | Bin {reactos/dll => dll}/win32/riched20/paint.c | 0 {reactos/dll => dll}/win32/riched20/para.c | 0 {reactos/dll => dll}/win32/riched20/reader.c | 0 {reactos/dll => dll}/win32/riched20/res.h | 0 .../win32/riched20/riched20.rbuild | 0 .../dll => dll}/win32/riched20/riched20.spec | 0 {reactos/dll => dll}/win32/riched20/richole.c | 0 {reactos/dll => dll}/win32/riched20/row.c | 0 {reactos/dll => dll}/win32/riched20/rtf.h | 0 {reactos/dll => dll}/win32/riched20/run.c | 0 {reactos/dll => dll}/win32/riched20/string.c | 0 {reactos/dll => dll}/win32/riched20/style.c | 0 {reactos/dll => dll}/win32/riched20/table.c | 0 {reactos/dll => dll}/win32/riched20/txtsrv.c | 0 {reactos/dll => dll}/win32/riched20/undo.c | 0 .../dll => dll}/win32/riched20/version.rc | 0 {reactos/dll => dll}/win32/riched20/wrap.c | 0 {reactos/dll => dll}/win32/riched20/writer.c | 0 .../win32/riched32/riched32.rbuild | 0 .../dll => dll}/win32/riched32/riched32.spec | 0 .../dll => dll}/win32/riched32/richedit.c | 0 .../dll => dll}/win32/riched32/version.rc | 0 {reactos/dll => dll}/win32/rpcrt4/cproxy.c | 0 {reactos/dll => dll}/win32/rpcrt4/cpsf.c | 0 {reactos/dll => dll}/win32/rpcrt4/cpsf.h | 0 {reactos/dll => dll}/win32/rpcrt4/cstub.c | 0 .../dll => dll}/win32/rpcrt4/epm_towers.h | 0 {reactos/dll => dll}/win32/rpcrt4/ncastatus.h | 0 .../win32/rpcrt4/ndr_clientserver.c | 0 .../win32/rpcrt4/ndr_contexthandle.c | 0 {reactos/dll => dll}/win32/rpcrt4/ndr_es.c | 0 .../win32/rpcrt4/ndr_fullpointer.c | 0 .../dll => dll}/win32/rpcrt4/ndr_marshall.c | 0 {reactos/dll => dll}/win32/rpcrt4/ndr_misc.h | 0 {reactos/dll => dll}/win32/rpcrt4/ndr_ole.c | 0 .../dll => dll}/win32/rpcrt4/ndr_stubless.c | 0 .../dll => dll}/win32/rpcrt4/ndr_stubless.h | 0 {reactos/dll => dll}/win32/rpcrt4/rpc_assoc.c | 0 {reactos/dll => dll}/win32/rpcrt4/rpc_assoc.h | 0 {reactos/dll => dll}/win32/rpcrt4/rpc_async.c | 0 .../dll => dll}/win32/rpcrt4/rpc_binding.c | 0 .../dll => dll}/win32/rpcrt4/rpc_binding.h | 0 {reactos/dll => dll}/win32/rpcrt4/rpc_defs.h | 0 {reactos/dll => dll}/win32/rpcrt4/rpc_epmap.c | 0 .../dll => dll}/win32/rpcrt4/rpc_message.c | 0 .../dll => dll}/win32/rpcrt4/rpc_message.h | 0 .../dll => dll}/win32/rpcrt4/rpc_server.c | 0 .../dll => dll}/win32/rpcrt4/rpc_server.h | 0 .../dll => dll}/win32/rpcrt4/rpc_transport.c | 0 .../dll => dll}/win32/rpcrt4/rpcrt4.rbuild | 0 {reactos/dll => dll}/win32/rpcrt4/rpcrt4.rc | 0 {reactos/dll => dll}/win32/rpcrt4/rpcrt4.spec | 0 .../dll => dll}/win32/rpcrt4/rpcrt4_main.c | 0 .../dll => dll}/win32/rpcrt4/rpcrt4_ros.diff | 0 .../win32/rpcrt4/rpcss_np_client.c | 0 .../win32/rpcrt4/rpcss_np_client.h | 0 {reactos/dll => dll}/win32/rpcrt4/unix_func.c | 0 {reactos/dll => dll}/win32/rpcrt4/unix_func.h | 0 .../dll => dll}/win32/rsabase/rsabase.rbuild | 0 .../dll => dll}/win32/rsabase/rsabase.spec | 0 {reactos/dll => dll}/win32/rsabase/version.rc | 0 {reactos/dll => dll}/win32/rsaenh/aes.c | 0 {reactos/dll => dll}/win32/rsaenh/des.c | 0 {reactos/dll => dll}/win32/rsaenh/handle.c | 0 {reactos/dll => dll}/win32/rsaenh/handle.h | 0 {reactos/dll => dll}/win32/rsaenh/implglue.c | 0 {reactos/dll => dll}/win32/rsaenh/implglue.h | 0 {reactos/dll => dll}/win32/rsaenh/md2.c | 0 {reactos/dll => dll}/win32/rsaenh/mpi.c | 0 {reactos/dll => dll}/win32/rsaenh/rc2.c | 0 {reactos/dll => dll}/win32/rsaenh/rc4.c | 0 {reactos/dll => dll}/win32/rsaenh/rsa.c | 0 {reactos/dll => dll}/win32/rsaenh/rsaenh.c | 0 .../dll => dll}/win32/rsaenh/rsaenh.rbuild | 0 {reactos/dll => dll}/win32/rsaenh/rsaenh.spec | 0 .../dll => dll}/win32/rsaenh/rsaenh_ros.diff | 0 {reactos/dll => dll}/win32/rsaenh/tomcrypt.h | 0 {reactos/dll => dll}/win32/rsaenh/version.rc | 0 {reactos/dll => dll}/win32/samlib/debug.h | 0 {reactos/dll => dll}/win32/samlib/dllmain.c | 0 {reactos/dll => dll}/win32/samlib/samlib.c | 0 {reactos/dll => dll}/win32/samlib/samlib.def | 0 .../dll => dll}/win32/samlib/samlib.rbuild | 0 {reactos/dll => dll}/win32/samlib/samlib.rc | 0 {reactos/dll => dll}/win32/samsrv/samsrv.c | 0 .../dll => dll}/win32/samsrv/samsrv.rbuild | 0 {reactos/dll => dll}/win32/samsrv/samsrv.rc | 0 {reactos/dll => dll}/win32/samsrv/samsrv.spec | 0 {reactos/dll => dll}/win32/schannel/lsamode.c | 0 .../win32/schannel/schannel.rbuild | 0 .../dll => dll}/win32/schannel/schannel.spec | 0 .../win32/schannel/schannel_main.c | 0 .../dll => dll}/win32/schannel/usermode.c | 0 .../dll => dll}/win32/schannel/version.rc | 0 {reactos/dll => dll}/win32/secur32/dllmain.c | 0 {reactos/dll => dll}/win32/secur32/lsa.c | 0 {reactos/dll => dll}/win32/secur32/precomp.h | 0 {reactos/dll => dll}/win32/secur32/secext.c | 0 .../dll => dll}/win32/secur32/secur32.def | 0 .../dll => dll}/win32/secur32/secur32.rbuild | 0 {reactos/dll => dll}/win32/secur32/secur32.rc | 0 {reactos/dll => dll}/win32/secur32/sspi.c | 0 .../dll => dll}/win32/security/security.def | 0 .../win32/security/security.rbuild | 0 .../dll => dll}/win32/security/security.rc | 0 {reactos/dll => dll}/win32/sensapi/sensapi.c | 0 .../dll => dll}/win32/sensapi/sensapi.rbuild | 0 .../dll => dll}/win32/sensapi/sensapi.spec | 0 .../dll => dll}/win32/serialui/lang/bg-BG.rc | 0 .../dll => dll}/win32/serialui/lang/cs-CZ.rc | 0 .../dll => dll}/win32/serialui/lang/de-DE.rc | 0 .../dll => dll}/win32/serialui/lang/en-US.rc | 0 .../dll => dll}/win32/serialui/lang/es-ES.rc | 0 .../dll => dll}/win32/serialui/lang/fr-FR.rc | 0 .../dll => dll}/win32/serialui/lang/id-ID.rc | 0 .../dll => dll}/win32/serialui/lang/it-IT.rc | 0 .../dll => dll}/win32/serialui/lang/no-NO.rc | 0 .../dll => dll}/win32/serialui/lang/pl-PL.rc | 0 .../dll => dll}/win32/serialui/lang/ru-RU.rc | 0 .../dll => dll}/win32/serialui/lang/uk-UA.rc | 0 .../dll => dll}/win32/serialui/resource.h | 0 .../dll => dll}/win32/serialui/serialui.c | 0 .../dll => dll}/win32/serialui/serialui.h | 0 .../win32/serialui/serialui.rbuild | 0 .../dll => dll}/win32/serialui/serialui.rc | 0 .../dll => dll}/win32/serialui/serialui.spec | 0 {reactos/dll => dll}/win32/setupapi/cfgmgr.c | 0 .../dll => dll}/win32/setupapi/devclass.c | 0 {reactos/dll => dll}/win32/setupapi/devinst.c | 0 {reactos/dll => dll}/win32/setupapi/dirid.c | 0 .../dll => dll}/win32/setupapi/diskspace.c | 0 {reactos/dll => dll}/win32/setupapi/driver.c | 0 {reactos/dll => dll}/win32/setupapi/install.c | 0 .../dll => dll}/win32/setupapi/interface.c | 0 .../dll => dll}/win32/setupapi/lang/bg-BG.rc | 0 .../dll => dll}/win32/setupapi/lang/cs-CZ.rc | 0 .../dll => dll}/win32/setupapi/lang/da-DK.rc | 0 .../dll => dll}/win32/setupapi/lang/de-DE.rc | 0 .../dll => dll}/win32/setupapi/lang/en-US.rc | 0 .../dll => dll}/win32/setupapi/lang/es-ES.rc | 0 .../dll => dll}/win32/setupapi/lang/fi-FI.rc | 0 .../dll => dll}/win32/setupapi/lang/fr-FR.rc | 0 .../dll => dll}/win32/setupapi/lang/hu-HU.rc | 0 .../dll => dll}/win32/setupapi/lang/id-ID.rc | 0 .../dll => dll}/win32/setupapi/lang/it-IT.rc | 0 .../dll => dll}/win32/setupapi/lang/ja-JP.rc | 0 .../dll => dll}/win32/setupapi/lang/ko-KR.rc | 0 .../dll => dll}/win32/setupapi/lang/nl-NL.rc | 0 .../dll => dll}/win32/setupapi/lang/no-NO.rc | 0 .../dll => dll}/win32/setupapi/lang/pl-PL.rc | 0 .../dll => dll}/win32/setupapi/lang/pt-BR.rc | 0 .../dll => dll}/win32/setupapi/lang/ru-RU.rc | 0 .../dll => dll}/win32/setupapi/lang/sk-SK.rc | 0 .../dll => dll}/win32/setupapi/lang/sv-SE.rc | 0 .../dll => dll}/win32/setupapi/lang/th-TH.rc | 0 .../dll => dll}/win32/setupapi/lang/tr-TR.rc | 0 .../dll => dll}/win32/setupapi/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/setupapi/misc.c | 0 {reactos/dll => dll}/win32/setupapi/parser.c | 0 {reactos/dll => dll}/win32/setupapi/query.c | 0 {reactos/dll => dll}/win32/setupapi/queue.c | 0 {reactos/dll => dll}/win32/setupapi/res/1.ico | Bin .../dll => dll}/win32/setupapi/res/10.ico | Bin .../dll => dll}/win32/setupapi/res/105.ico | Bin .../dll => dll}/win32/setupapi/res/11.ico | Bin .../dll => dll}/win32/setupapi/res/159.ico | Bin .../dll => dll}/win32/setupapi/res/161.ico | Bin .../dll => dll}/win32/setupapi/res/18.ico | Bin .../dll => dll}/win32/setupapi/res/19.ico | Bin {reactos/dll => dll}/win32/setupapi/res/2.ico | Bin .../dll => dll}/win32/setupapi/res/20.ico | Bin .../dll => dll}/win32/setupapi/res/21.ico | Bin .../dll => dll}/win32/setupapi/res/22.ico | Bin .../dll => dll}/win32/setupapi/res/23.ico | Bin .../dll => dll}/win32/setupapi/res/24.ico | Bin .../dll => dll}/win32/setupapi/res/25.ico | Bin .../dll => dll}/win32/setupapi/res/26.ico | Bin .../dll => dll}/win32/setupapi/res/27.ico | Bin .../dll => dll}/win32/setupapi/res/28.ico | Bin {reactos/dll => dll}/win32/setupapi/res/3.ico | Bin {reactos/dll => dll}/win32/setupapi/res/4.ico | Bin .../dll => dll}/win32/setupapi/res/40.ico | Bin .../dll => dll}/win32/setupapi/res/41.ico | Bin .../dll => dll}/win32/setupapi/res/42.ico | Bin .../dll => dll}/win32/setupapi/res/43.ico | Bin {reactos/dll => dll}/win32/setupapi/res/5.ico | Bin .../dll => dll}/win32/setupapi/res/50.ico | Bin .../dll => dll}/win32/setupapi/res/500.ico | Bin .../dll => dll}/win32/setupapi/res/501.ico | Bin .../dll => dll}/win32/setupapi/res/502.ico | Bin .../dll => dll}/win32/setupapi/res/51.ico | Bin .../dll => dll}/win32/setupapi/res/52.ico | Bin .../dll => dll}/win32/setupapi/res/53.ico | Bin .../dll => dll}/win32/setupapi/res/54.ico | Bin {reactos/dll => dll}/win32/setupapi/res/6.ico | Bin {reactos/dll => dll}/win32/setupapi/res/7.ico | Bin {reactos/dll => dll}/win32/setupapi/res/8.ico | Bin {reactos/dll => dll}/win32/setupapi/res/9.ico | Bin .../win32/setupapi/res/Icon_Licence/COPYING | 0 .../win32/setupapi/res/Icon_Licence/Tango.txt | 0 .../win32/setupapi/res/icons_res.rc | 0 .../dll => dll}/win32/setupapi/resource.h | 0 {reactos/dll => dll}/win32/setupapi/rpc.c | 0 .../dll => dll}/win32/setupapi/rpc_private.h | 0 .../win32/setupapi/setupapi.rbuild | 0 .../dll => dll}/win32/setupapi/setupapi.rc | 0 .../dll => dll}/win32/setupapi/setupapi.spec | 0 .../win32/setupapi/setupapi_private.h | 0 .../dll => dll}/win32/setupapi/setupcab.c | 0 .../dll => dll}/win32/setupapi/stringtable.c | 0 {reactos/dll => dll}/win32/setupapi/stubs.c | 0 {reactos/dll => dll}/win32/sfc/precomp.h | 0 {reactos/dll => dll}/win32/sfc/sfc.c | 0 {reactos/dll => dll}/win32/sfc/sfc.rbuild | 0 {reactos/dll => dll}/win32/sfc/sfc.spec | 0 {reactos/dll => dll}/win32/sfc_os/precomp.h | 0 {reactos/dll => dll}/win32/sfc_os/sfc_os.c | 0 .../dll => dll}/win32/sfc_os/sfc_os.rbuild | 0 {reactos/dll => dll}/win32/sfc_os/sfc_os.spec | 0 {reactos/dll => dll}/win32/shdocvw/Bg.rc | 0 {reactos/dll => dll}/win32/shdocvw/Cs.rc | 0 {reactos/dll => dll}/win32/shdocvw/De.rc | 0 {reactos/dll => dll}/win32/shdocvw/En.rc | 0 {reactos/dll => dll}/win32/shdocvw/Es.rc | 0 {reactos/dll => dll}/win32/shdocvw/Fi.rc | 0 {reactos/dll => dll}/win32/shdocvw/Fr.rc | 0 {reactos/dll => dll}/win32/shdocvw/Hu.rc | 0 {reactos/dll => dll}/win32/shdocvw/Ja.rc | 0 {reactos/dll => dll}/win32/shdocvw/Ko.rc | 0 {reactos/dll => dll}/win32/shdocvw/Nl.rc | 0 {reactos/dll => dll}/win32/shdocvw/No.rc | 0 {reactos/dll => dll}/win32/shdocvw/Pl.rc | 0 {reactos/dll => dll}/win32/shdocvw/Pt.rc | 0 {reactos/dll => dll}/win32/shdocvw/Ru.rc | 0 {reactos/dll => dll}/win32/shdocvw/Sk.rc | 0 {reactos/dll => dll}/win32/shdocvw/Sv.rc | 0 {reactos/dll => dll}/win32/shdocvw/Uk.rc | 0 .../dll => dll}/win32/shdocvw/classinfo.c | 0 {reactos/dll => dll}/win32/shdocvw/client.c | 0 {reactos/dll => dll}/win32/shdocvw/dochost.c | 0 {reactos/dll => dll}/win32/shdocvw/events.c | 0 {reactos/dll => dll}/win32/shdocvw/factory.c | 0 {reactos/dll => dll}/win32/shdocvw/frame.c | 0 {reactos/dll => dll}/win32/shdocvw/misc.c | 0 .../dll => dll}/win32/shdocvw/oleobject.c | 0 {reactos/dll => dll}/win32/shdocvw/persist.c | 0 {reactos/dll => dll}/win32/shdocvw/regsvr.c | 0 {reactos/dll => dll}/win32/shdocvw/shdocvw.h | 0 .../dll => dll}/win32/shdocvw/shdocvw.rbuild | 0 {reactos/dll => dll}/win32/shdocvw/shdocvw.rc | 0 .../dll => dll}/win32/shdocvw/shdocvw.spec | 0 .../dll => dll}/win32/shdocvw/shdocvw_main.c | 0 .../win32/shdocvw/shdocvw_ros.diff | 0 .../dll => dll}/win32/shdocvw/shlinstobj.c | 0 {reactos/dll => dll}/win32/shdocvw/version.rc | 0 {reactos/dll => dll}/win32/shdocvw/view.c | 0 .../dll => dll}/win32/shdocvw/webbrowser.c | 0 {reactos/dll => dll}/win32/shell32/authors.c | 0 .../dll => dll}/win32/shell32/autocomplete.c | 0 {reactos/dll => dll}/win32/shell32/avi_res.rc | 0 .../dll => dll}/win32/shell32/bitmap_res.rc | 0 .../dll => dll}/win32/shell32/brsfolder.c | 0 .../dll => dll}/win32/shell32/changenotify.c | 0 {reactos/dll => dll}/win32/shell32/classes.c | 0 .../dll => dll}/win32/shell32/clipboard.c | 0 {reactos/dll => dll}/win32/shell32/control.c | 0 {reactos/dll => dll}/win32/shell32/cpanel.h | 0 .../dll => dll}/win32/shell32/dataobject.c | 0 {reactos/dll => dll}/win32/shell32/dde.c | 0 {reactos/dll => dll}/win32/shell32/debughlp.c | 0 {reactos/dll => dll}/win32/shell32/debughlp.h | 0 {reactos/dll => dll}/win32/shell32/desktop.c | 0 {reactos/dll => dll}/win32/shell32/dialogs.c | 0 .../win32/shell32/dragdrophelper.c | 0 {reactos/dll => dll}/win32/shell32/drive.c | 0 .../dll => dll}/win32/shell32/enumidlist.c | 0 .../dll => dll}/win32/shell32/enumidlist.h | 0 .../dll => dll}/win32/shell32/extracticon.c | 0 .../win32/shell32/folder_options.c | 0 {reactos/dll => dll}/win32/shell32/folders.c | 0 {reactos/dll => dll}/win32/shell32/fprop.c | 0 .../dll => dll}/win32/shell32/icon_res.rc | 0 .../dll => dll}/win32/shell32/iconcache.c | 0 .../dll => dll}/win32/shell32/lang/bg-BG.rc | 0 .../dll => dll}/win32/shell32/lang/ca-ES.rc | 0 .../dll => dll}/win32/shell32/lang/cs-CZ.rc | 0 .../dll => dll}/win32/shell32/lang/da-DK.rc | 0 .../dll => dll}/win32/shell32/lang/de-DE.rc | 0 .../dll => dll}/win32/shell32/lang/el-GR.rc | 0 .../dll => dll}/win32/shell32/lang/en-GB.rc | 0 .../dll => dll}/win32/shell32/lang/en-US.rc | 0 .../dll => dll}/win32/shell32/lang/es-ES.rc | 0 .../dll => dll}/win32/shell32/lang/fi-FI.rc | 0 .../dll => dll}/win32/shell32/lang/fr-FR.rc | 0 .../dll => dll}/win32/shell32/lang/hu-HU.rc | 0 .../dll => dll}/win32/shell32/lang/it-IT.rc | 0 .../dll => dll}/win32/shell32/lang/ja-JP.rc | 0 .../dll => dll}/win32/shell32/lang/ko-KR.rc | 0 .../dll => dll}/win32/shell32/lang/nl-NL.rc | 0 .../dll => dll}/win32/shell32/lang/no-NO.rc | 0 .../dll => dll}/win32/shell32/lang/pl-PL.rc | 0 .../dll => dll}/win32/shell32/lang/pt-BR.rc | 0 .../dll => dll}/win32/shell32/lang/pt-PT.rc | 0 .../dll => dll}/win32/shell32/lang/ru-RU.rc | 0 .../dll => dll}/win32/shell32/lang/sk-SK.rc | 0 .../dll => dll}/win32/shell32/lang/sl-SI.rc | 0 .../dll => dll}/win32/shell32/lang/sv-SE.rc | 0 .../dll => dll}/win32/shell32/lang/tr-TR.rc | 0 .../dll => dll}/win32/shell32/lang/uk-UA.rc | 0 .../dll => dll}/win32/shell32/lang/zh-CN.rc | 0 .../dll => dll}/win32/shell32/lang/zh-TW.rc | 0 {reactos/dll => dll}/win32/shell32/pidl.c | 0 {reactos/dll => dll}/win32/shell32/pidl.h | 0 {reactos/dll => dll}/win32/shell32/precomp.h | 0 {reactos/dll => dll}/win32/shell32/regsvr.c | 0 .../shell32/res/avis/160+161+167+168.avi | Bin .../win32/shell32/res/avis/162.avi | Bin .../win32/shell32/res/avis/163.avi | Bin .../win32/shell32/res/avis/164+169.avi | Bin .../win32/shell32/res/avis/170.avi | Bin .../win32/shell32/res/avis/Licence/COPYING | 0 .../win32/shell32/res/avis/Licence/Tango.txt | 0 .../win32/shell32/res/bitmaps/204.bmp | Bin .../win32/shell32/res/bitmaps/205.bmp | Bin .../win32/shell32/res/bitmaps/206.bmp | Bin .../win32/shell32/res/bitmaps/207.bmp | Bin .../win32/shell32/res/bitmaps/225.bmp | Bin .../win32/shell32/res/bitmaps/226.bmp | Bin .../win32/shell32/res/bitmaps/227.bmp | Bin .../win32/shell32/res/bitmaps/228.bmp | Bin .../res/bitmaps/shell_about_logo_24bpp.bmp | Bin .../dll => dll}/win32/shell32/res/icons/1.ico | Bin .../win32/shell32/res/icons/10.ico | Bin .../win32/shell32/res/icons/1001.ico | Bin .../win32/shell32/res/icons/1004.ico | Bin .../win32/shell32/res/icons/11.ico | Bin .../win32/shell32/res/icons/12.ico | Bin .../win32/shell32/res/icons/13.ico | Bin .../win32/shell32/res/icons/134.ico | Bin .../win32/shell32/res/icons/135.ico | Bin .../win32/shell32/res/icons/137.ico | Bin .../win32/shell32/res/icons/138.ico | Bin .../win32/shell32/res/icons/14.ico | Bin .../win32/shell32/res/icons/15.ico | Bin .../win32/shell32/res/icons/151.ico | Bin .../win32/shell32/res/icons/152.ico | Bin .../win32/shell32/res/icons/153.ico | Bin .../win32/shell32/res/icons/154.ico | Bin .../win32/shell32/res/icons/155.ico | Bin .../win32/shell32/res/icons/156.ico | Bin .../win32/shell32/res/icons/157.ico | Bin .../win32/shell32/res/icons/16.ico | Bin .../win32/shell32/res/icons/160.ico | Bin .../win32/shell32/res/icons/161.ico | Bin .../win32/shell32/res/icons/16710.ico | Bin .../win32/shell32/res/icons/16715.ico | Bin .../win32/shell32/res/icons/16717.ico | Bin .../win32/shell32/res/icons/16718.ico | Bin .../win32/shell32/res/icons/16721.ico | Bin .../win32/shell32/res/icons/17.ico | Bin .../win32/shell32/res/icons/172.ico | Bin .../win32/shell32/res/icons/173.ico | Bin .../win32/shell32/res/icons/18.ico | Bin .../win32/shell32/res/icons/182.ico | Bin .../win32/shell32/res/icons/183.ico | Bin .../win32/shell32/res/icons/184.ico | Bin .../win32/shell32/res/icons/185.ico | Bin .../win32/shell32/res/icons/186.ico | Bin .../win32/shell32/res/icons/187.ico | Bin .../win32/shell32/res/icons/19.ico | Bin .../win32/shell32/res/icons/191.ico | Bin .../win32/shell32/res/icons/192.ico | Bin .../dll => dll}/win32/shell32/res/icons/2.ico | Bin .../win32/shell32/res/icons/20.ico | Bin .../win32/shell32/res/icons/21.ico | Bin .../win32/shell32/res/icons/210.ico | Bin .../win32/shell32/res/icons/22.ico | Bin .../win32/shell32/res/icons/220.ico | Bin .../win32/shell32/res/icons/221.ico | Bin .../win32/shell32/res/icons/222.ico | Bin .../win32/shell32/res/icons/224.ico | Bin .../win32/shell32/res/icons/225.ico | Bin .../win32/shell32/res/icons/226.ico | Bin .../win32/shell32/res/icons/228.ico | Bin .../win32/shell32/res/icons/23.ico | Bin .../win32/shell32/res/icons/233.ico | Bin .../win32/shell32/res/icons/235.ico | Bin .../win32/shell32/res/icons/236.ico | Bin .../win32/shell32/res/icons/237.ico | Bin .../win32/shell32/res/icons/238.ico | Bin .../win32/shell32/res/icons/24.ico | Bin .../win32/shell32/res/icons/240.ico | Bin .../win32/shell32/res/icons/245.ico | Bin .../win32/shell32/res/icons/246.ico | Bin .../win32/shell32/res/icons/248.ico | Bin .../win32/shell32/res/icons/249.ico | Bin .../win32/shell32/res/icons/25.ico | Bin .../win32/shell32/res/icons/250.ico | Bin .../win32/shell32/res/icons/252.ico | Bin .../win32/shell32/res/icons/254.ico | Bin .../win32/shell32/res/icons/255.ico | Bin .../win32/shell32/res/icons/263.ico | Bin .../win32/shell32/res/icons/265.ico | Bin .../win32/shell32/res/icons/268.ico | Bin .../win32/shell32/res/icons/269.ico | Bin .../win32/shell32/res/icons/270.ico | Bin .../win32/shell32/res/icons/271.ico | Bin .../win32/shell32/res/icons/277.ico | Bin .../win32/shell32/res/icons/279.ico | Bin .../win32/shell32/res/icons/28.ico | Bin .../win32/shell32/res/icons/289.ico | Bin .../win32/shell32/res/icons/29.ico | Bin .../win32/shell32/res/icons/290.ico | Bin .../win32/shell32/res/icons/291.ico | Bin .../win32/shell32/res/icons/292.ico | Bin .../win32/shell32/res/icons/293.ico | Bin .../win32/shell32/res/icons/294.ico | Bin .../win32/shell32/res/icons/295.ico | Bin .../win32/shell32/res/icons/296.ico | Bin .../win32/shell32/res/icons/297.ico | Bin .../win32/shell32/res/icons/298.ico | Bin .../win32/shell32/res/icons/299.ico | Bin .../dll => dll}/win32/shell32/res/icons/3.ico | Bin .../win32/shell32/res/icons/30.ico | Bin .../win32/shell32/res/icons/302.ico | Bin .../win32/shell32/res/icons/304.ico | Bin .../win32/shell32/res/icons/305.ico | Bin .../win32/shell32/res/icons/309.ico | Bin .../win32/shell32/res/icons/315.ico | Bin .../win32/shell32/res/icons/317.ico | Bin .../win32/shell32/res/icons/318.ico | Bin .../win32/shell32/res/icons/319.ico | Bin .../win32/shell32/res/icons/32.ico | Bin .../win32/shell32/res/icons/322.ico | Bin .../win32/shell32/res/icons/323.ico | Bin .../win32/shell32/res/icons/324.ico | Bin .../win32/shell32/res/icons/325.ico | Bin .../win32/shell32/res/icons/326.ico | Bin .../win32/shell32/res/icons/327.ico | Bin .../win32/shell32/res/icons/328.ico | Bin .../win32/shell32/res/icons/329.ico | Bin .../win32/shell32/res/icons/33.ico | Bin .../win32/shell32/res/icons/330.ico | Bin .../win32/shell32/res/icons/35.ico | Bin .../win32/shell32/res/icons/36.ico | Bin .../win32/shell32/res/icons/37.ico | Bin .../win32/shell32/res/icons/38.ico | Bin .../win32/shell32/res/icons/39.ico | Bin .../dll => dll}/win32/shell32/res/icons/4.ico | Bin .../win32/shell32/res/icons/40.ico | Bin .../win32/shell32/res/icons/41.ico | Bin .../win32/shell32/res/icons/44.ico | Bin .../win32/shell32/res/icons/45.ico | Bin .../win32/shell32/res/icons/46.ico | Bin .../win32/shell32/res/icons/47.ico | Bin .../win32/shell32/res/icons/48.ico | Bin .../dll => dll}/win32/shell32/res/icons/5.ico | Bin .../win32/shell32/res/icons/54.ico | Bin .../dll => dll}/win32/shell32/res/icons/6.ico | Bin .../dll => dll}/win32/shell32/res/icons/7.ico | Bin .../dll => dll}/win32/shell32/res/icons/8.ico | Bin .../win32/shell32/res/icons/8240.ico | Bin .../dll => dll}/win32/shell32/res/icons/9.ico | Bin .../shell32/res/icons/Icon_Licence/COPYING | 0 .../shell32/res/icons/Icon_Licence/Tango.txt | 0 .../dll => dll}/win32/shell32/ros-systray.c | 0 .../dll => dll}/win32/shell32/she_ocmenu.c | 0 {reactos/dll => dll}/win32/shell32/shell.c | 0 {reactos/dll => dll}/win32/shell32/shell.spec | 0 .../dll => dll}/win32/shell32/shell32.rbuild | 0 {reactos/dll => dll}/win32/shell32/shell32.rc | 0 .../dll => dll}/win32/shell32/shell32.spec | 0 .../dll => dll}/win32/shell32/shell32_main.c | 0 .../dll => dll}/win32/shell32/shell32_main.h | 0 .../dll => dll}/win32/shell32/shellfolder.h | 0 .../dll => dll}/win32/shell32/shelllink.c | 0 {reactos/dll => dll}/win32/shell32/shellole.c | 0 {reactos/dll => dll}/win32/shell32/shellord.c | 0 .../dll => dll}/win32/shell32/shellpath.c | 0 {reactos/dll => dll}/win32/shell32/shellreg.c | 0 .../dll => dll}/win32/shell32/shellstring.c | 0 {reactos/dll => dll}/win32/shell32/shfldr.h | 0 .../win32/shell32/shfldr_admintools.c | 0 .../dll => dll}/win32/shell32/shfldr_cpanel.c | 0 .../win32/shell32/shfldr_desktop.c | 0 .../dll => dll}/win32/shell32/shfldr_fonts.c | 0 .../dll => dll}/win32/shell32/shfldr_fs.c | 0 .../dll => dll}/win32/shell32/shfldr_mycomp.c | 0 .../win32/shell32/shfldr_mydocuments.c | 0 .../win32/shell32/shfldr_netplaces.c | 0 .../win32/shell32/shfldr_printers.c | 0 .../win32/shell32/shfldr_recyclebin.c | 0 .../dll => dll}/win32/shell32/shfldr_unixfs.c | 0 {reactos/dll => dll}/win32/shell32/shlexec.c | 0 .../dll => dll}/win32/shell32/shlfileop.c | 0 .../dll => dll}/win32/shell32/shlfolder.c | 0 .../dll => dll}/win32/shell32/shlfsbind.c | 0 {reactos/dll => dll}/win32/shell32/shlmenu.c | 0 {reactos/dll => dll}/win32/shell32/shlview.c | 0 {reactos/dll => dll}/win32/shell32/shpolicy.c | 0 {reactos/dll => dll}/win32/shell32/shresdef.h | 0 .../dll => dll}/win32/shell32/shv_def_cmenu.c | 0 .../dll => dll}/win32/shell32/shv_item_new.c | 0 .../dll => dll}/win32/shell32/startmenu.c | 0 {reactos/dll => dll}/win32/shell32/systray.c | 0 .../dll => dll}/win32/shell32/undocshell.h | 0 {reactos/dll => dll}/win32/shell32/version.h | 0 {reactos/dll => dll}/win32/shell32/version.rc | 0 .../dll => dll}/win32/shell32/version16.rc | 0 {reactos/dll => dll}/win32/shell32/xdg.h | 0 .../win32/shfolder/shfolder.rbuild | 0 .../dll => dll}/win32/shfolder/shfolder.spec | 0 .../dll => dll}/win32/shfolder/version.rc | 0 .../dll => dll}/win32/shimgvw/lang/cs-CZ.rc | 0 .../dll => dll}/win32/shimgvw/lang/de-DE.rc | 0 .../dll => dll}/win32/shimgvw/lang/en-US.rc | 0 .../dll => dll}/win32/shimgvw/lang/es-ES.rc | 0 .../dll => dll}/win32/shimgvw/lang/lt-LT.rc | 0 .../dll => dll}/win32/shimgvw/lang/no-NO.rc | 0 .../dll => dll}/win32/shimgvw/lang/ru-RU.rc | 0 .../dll => dll}/win32/shimgvw/lang/sk-SK.rc | 0 .../dll => dll}/win32/shimgvw/res/main.ico | Bin .../dll => dll}/win32/shimgvw/res/next.bmp | Bin .../dll => dll}/win32/shimgvw/res/prev.bmp | Bin .../dll => dll}/win32/shimgvw/res/print.bmp | Bin .../dll => dll}/win32/shimgvw/res/rot1.bmp | Bin .../dll => dll}/win32/shimgvw/res/rot2.bmp | Bin .../dll => dll}/win32/shimgvw/res/save.bmp | Bin .../dll => dll}/win32/shimgvw/res/zoomm.bmp | Bin .../dll => dll}/win32/shimgvw/res/zoomp.bmp | Bin {reactos/dll => dll}/win32/shimgvw/resource.h | 0 {reactos/dll => dll}/win32/shimgvw/rsrc.rc | 0 {reactos/dll => dll}/win32/shimgvw/shimgvw.c | 0 {reactos/dll => dll}/win32/shimgvw/shimgvw.h | 0 .../dll => dll}/win32/shimgvw/shimgvw.rbuild | 0 {reactos/dll => dll}/win32/shimgvw/shimgvw.rc | 0 .../dll => dll}/win32/shimgvw/shimgvw.spec | 0 {reactos/dll => dll}/win32/shlwapi/assoc.c | 0 {reactos/dll => dll}/win32/shlwapi/clist.c | 0 {reactos/dll => dll}/win32/shlwapi/istream.c | 0 {reactos/dll => dll}/win32/shlwapi/msgbox.c | 0 {reactos/dll => dll}/win32/shlwapi/ordinal.c | 0 {reactos/dll => dll}/win32/shlwapi/path.c | 0 {reactos/dll => dll}/win32/shlwapi/reg.c | 0 .../dll => dll}/win32/shlwapi/regstream.c | 0 {reactos/dll => dll}/win32/shlwapi/resource.h | 0 .../dll => dll}/win32/shlwapi/shlwapi.rbuild | 0 {reactos/dll => dll}/win32/shlwapi/shlwapi.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi.spec | 0 .../dll => dll}/win32/shlwapi/shlwapi_Da.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_De.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_En.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Eo.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Es.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Fi.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Fr.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Hu.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_It.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Ja.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Ko.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Nl.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_No.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Pl.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Pt.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Ro.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Ru.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Si.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Sv.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Tr.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Uk.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_Zh.rc | 0 .../dll => dll}/win32/shlwapi/shlwapi_main.c | 0 .../win32/shlwapi/shlwapi_ros.diff | 0 .../dll => dll}/win32/shlwapi/stopwatch.c | 0 {reactos/dll => dll}/win32/shlwapi/string.c | 0 {reactos/dll => dll}/win32/shlwapi/thread.c | 0 {reactos/dll => dll}/win32/shlwapi/url.c | 0 {reactos/dll => dll}/win32/shlwapi/version.rc | 0 {reactos/dll => dll}/win32/shlwapi/wsprintf.c | 0 {reactos/dll => dll}/win32/smdll/dllmain.c | 0 {reactos/dll => dll}/win32/smdll/query.c | 0 {reactos/dll => dll}/win32/smdll/readme.txt | 0 {reactos/dll => dll}/win32/smdll/smdll.def | 0 {reactos/dll => dll}/win32/smdll/smdll.rbuild | 0 {reactos/dll => dll}/win32/smdll/smdll.rc | 0 {reactos/dll => dll}/win32/snmpapi/debug.h | 0 {reactos/dll => dll}/win32/snmpapi/snmpapi.c | 0 .../dll => dll}/win32/snmpapi/snmpapi.rbuild | 0 {reactos/dll => dll}/win32/snmpapi/snmpapi.rc | 0 .../dll => dll}/win32/snmpapi/snmpapi.spec | 0 .../dll => dll}/win32/stdole2.tlb/rsrc.rc | 0 .../win32/stdole2.tlb/std_ole_v2.idl | 0 .../win32/stdole2.tlb/stdole2.rbuild | 0 .../win32/stdole2.tlb/stdole2.tlb.spec | 0 .../dll => dll}/win32/stdole32.tlb/rsrc.rc | 0 .../win32/stdole32.tlb/std_ole_v1.idl | 0 .../win32/stdole32.tlb/stdole32.rbuild | 0 .../win32/stdole32.tlb/stdole32.tlb.spec | 0 {reactos/dll => dll}/win32/sxs/sxs.c | 0 {reactos/dll => dll}/win32/sxs/sxs.rbuild | 0 {reactos/dll => dll}/win32/sxs/sxs.spec | 0 {reactos/dll => dll}/win32/syssetup/COPYING | 0 .../dll => dll}/win32/syssetup/classinst.c | 0 {reactos/dll => dll}/win32/syssetup/dllmain.c | 0 {reactos/dll => dll}/win32/syssetup/globals.h | 0 {reactos/dll => dll}/win32/syssetup/install.c | 0 .../dll => dll}/win32/syssetup/lang/bg-BG.rc | 0 .../dll => dll}/win32/syssetup/lang/cs-CZ.rc | 0 .../dll => dll}/win32/syssetup/lang/de-DE.rc | 0 .../dll => dll}/win32/syssetup/lang/el-GR.rc | 0 .../dll => dll}/win32/syssetup/lang/en-US.rc | 0 .../dll => dll}/win32/syssetup/lang/es-ES.rc | 0 .../dll => dll}/win32/syssetup/lang/fr-FR.rc | 0 .../dll => dll}/win32/syssetup/lang/hu-HU.rc | 0 .../dll => dll}/win32/syssetup/lang/id-ID.rc | 0 .../dll => dll}/win32/syssetup/lang/it-IT.rc | 0 .../dll => dll}/win32/syssetup/lang/ja-JP.rc | 0 .../dll => dll}/win32/syssetup/lang/nl-NL.rc | 0 .../dll => dll}/win32/syssetup/lang/no-NO.rc | 0 .../dll => dll}/win32/syssetup/lang/pl-PL.rc | 0 .../dll => dll}/win32/syssetup/lang/ru-RU.rc | 0 .../dll => dll}/win32/syssetup/lang/sk-SK.rc | 0 .../dll => dll}/win32/syssetup/lang/uk-UA.rc | 0 .../dll => dll}/win32/syssetup/lang/zh-CN.rc | 0 {reactos/dll => dll}/win32/syssetup/logfile.c | 0 .../dll => dll}/win32/syssetup/resource.h | 0 .../win32/syssetup/resources/header.bmp | Bin .../win32/syssetup/resources/watermark.bmp | Bin .../dll => dll}/win32/syssetup/syssetup.def | 0 .../win32/syssetup/syssetup.rbuild | 0 .../dll => dll}/win32/syssetup/syssetup.rc | 0 {reactos/dll => dll}/win32/syssetup/wizard.c | 0 {reactos/dll => dll}/win32/tapi32/assisted.c | 0 {reactos/dll => dll}/win32/tapi32/line.c | 0 {reactos/dll => dll}/win32/tapi32/phone.c | 0 .../dll => dll}/win32/tapi32/tapi32.rbuild | 0 {reactos/dll => dll}/win32/tapi32/tapi32.spec | 0 .../dll => dll}/win32/tapiui/lang/de-DE.rc | 0 .../dll => dll}/win32/tapiui/lang/en-US.rc | 0 .../dll => dll}/win32/tapiui/lang/no-NO.rc | 0 .../dll => dll}/win32/tapiui/lang/pl-PL.rc | 0 .../dll => dll}/win32/tapiui/lang/ru-RU.rc | 0 .../dll => dll}/win32/tapiui/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/tapiui/res/201.ico | Bin {reactos/dll => dll}/win32/tapiui/res/202.ico | Bin {reactos/dll => dll}/win32/tapiui/res/203.ico | Bin {reactos/dll => dll}/win32/tapiui/res/301.bmp | Bin {reactos/dll => dll}/win32/tapiui/res/302.bmp | Bin {reactos/dll => dll}/win32/tapiui/res/504.ico | Bin {reactos/dll => dll}/win32/tapiui/resource.h | 0 .../dll => dll}/win32/tapiui/tapiui.rbuild | 0 {reactos/dll => dll}/win32/tapiui/tapiui.rc | 0 .../dll => dll}/win32/twain_32/Makefile.in | 0 {reactos/dll => dll}/win32/twain_32/README | 0 {reactos/dll => dll}/win32/twain_32/TWAIN | 0 .../dll => dll}/win32/twain_32/capability.c | 0 .../dll => dll}/win32/twain_32/ds_audio.c | 0 {reactos/dll => dll}/win32/twain_32/ds_ctrl.c | 0 .../dll => dll}/win32/twain_32/ds_image.c | 0 .../dll => dll}/win32/twain_32/dsm_ctrl.c | 0 {reactos/dll => dll}/win32/twain_32/twain.h | 0 .../dll => dll}/win32/twain_32/twain32_main.c | 0 .../dll => dll}/win32/twain_32/twain_32.def | 0 .../win32/twain_32/twain_32.rbuild | 0 .../dll => dll}/win32/twain_32/twain_32.rc | 0 {reactos/dll => dll}/win32/twain_32/twain_i.h | 0 {reactos/dll => dll}/win32/uext2/uext2.c | 0 {reactos/dll => dll}/win32/uext2/uext2.def | 0 {reactos/dll => dll}/win32/uext2/uext2.rbuild | 0 {reactos/dll => dll}/win32/uext2/uext2.rc | 0 {reactos/dll => dll}/win32/ufat/ufat.c | 0 {reactos/dll => dll}/win32/ufat/ufat.def | 0 {reactos/dll => dll}/win32/ufat/ufat.rbuild | 0 {reactos/dll => dll}/win32/ufat/ufat.rc | 0 {reactos/dll => dll}/win32/ufatx/ufatx.def | 0 {reactos/dll => dll}/win32/ufatx/ufatx.rbuild | 0 {reactos/dll => dll}/win32/ufatx/ufatx.rc | 0 {reactos/dll => dll}/win32/untfs/untfs.c | 0 {reactos/dll => dll}/win32/untfs/untfs.def | 0 {reactos/dll => dll}/win32/untfs/untfs.rbuild | 0 {reactos/dll => dll}/win32/untfs/untfs.rc | 0 {reactos/dll => dll}/win32/urlmon/bindctx.c | 0 {reactos/dll => dll}/win32/urlmon/binding.c | 0 {reactos/dll => dll}/win32/urlmon/bindprot.c | 0 {reactos/dll => dll}/win32/urlmon/download.c | 0 {reactos/dll => dll}/win32/urlmon/file.c | 0 {reactos/dll => dll}/win32/urlmon/format.c | 0 {reactos/dll => dll}/win32/urlmon/ftp.c | 0 {reactos/dll => dll}/win32/urlmon/http.c | 0 {reactos/dll => dll}/win32/urlmon/internet.c | 0 {reactos/dll => dll}/win32/urlmon/mk.c | 0 {reactos/dll => dll}/win32/urlmon/regsvr.c | 0 {reactos/dll => dll}/win32/urlmon/rsrc.rc | 0 {reactos/dll => dll}/win32/urlmon/sec_mgr.c | 0 {reactos/dll => dll}/win32/urlmon/session.c | 0 {reactos/dll => dll}/win32/urlmon/umon.c | 0 {reactos/dll => dll}/win32/urlmon/umstream.c | 0 {reactos/dll => dll}/win32/urlmon/urlmon.inf | 0 .../dll => dll}/win32/urlmon/urlmon.rbuild | 0 {reactos/dll => dll}/win32/urlmon/urlmon.spec | 0 .../dll => dll}/win32/urlmon/urlmon_main.c | 0 .../dll => dll}/win32/urlmon/urlmon_main.h | 0 {reactos/dll => dll}/win32/urlmon/version.rc | 0 .../win32/user32/controls/button.c | 0 .../dll => dll}/win32/user32/controls/combo.c | 0 .../dll => dll}/win32/user32/controls/edit.c | 0 .../win32/user32/controls/icontitle.c | 0 .../win32/user32/controls/listbox.c | 0 .../win32/user32/controls/regcontrol.c | 0 .../win32/user32/controls/scrollbar.c | 0 .../win32/user32/controls/static.c | 0 .../dll => dll}/win32/user32/include/accel.h | 0 .../win32/user32/include/controls.h | 0 .../dll => dll}/win32/user32/include/cursor.h | 0 .../win32/user32/include/dde_private.h | 0 .../dll => dll}/win32/user32/include/draw.h | 0 .../dll => dll}/win32/user32/include/menu.h | 0 .../win32/user32/include/message.h | 0 .../win32/user32/include/regcontrol.h | 0 .../win32/user32/include/resource.h | 0 .../dll => dll}/win32/user32/include/scroll.h | 0 .../dll => dll}/win32/user32/include/user32.h | 0 .../win32/user32/include/user32p.h | 0 .../dll => dll}/win32/user32/include/window.h | 0 .../dll => dll}/win32/user32/include/winpos.h | 0 .../dll => dll}/win32/user32/include/winsta.h | 0 .../dll => dll}/win32/user32/lang/bg-BG.rc | 0 .../dll => dll}/win32/user32/lang/cs-CZ.rc | 0 .../dll => dll}/win32/user32/lang/da-DK.rc | 0 .../dll => dll}/win32/user32/lang/de-DE.rc | 0 .../dll => dll}/win32/user32/lang/el-GR.rc | 0 .../dll => dll}/win32/user32/lang/en-US.rc | 0 .../dll => dll}/win32/user32/lang/es-ES.rc | 0 .../dll => dll}/win32/user32/lang/fr-FR.rc | 0 .../dll => dll}/win32/user32/lang/hu-HU.rc | 0 .../dll => dll}/win32/user32/lang/id-ID.rc | 0 .../dll => dll}/win32/user32/lang/it-IT.rc | 0 .../dll => dll}/win32/user32/lang/ja-JP.rc | 0 .../dll => dll}/win32/user32/lang/nl-NL.rc | 0 .../dll => dll}/win32/user32/lang/no-NO.rc | 0 .../dll => dll}/win32/user32/lang/pl-PL.rc | 0 .../dll => dll}/win32/user32/lang/ru-RU.rc | 0 .../dll => dll}/win32/user32/lang/sk-SK.rc | 0 .../dll => dll}/win32/user32/lang/sv-SE.rc | 0 .../dll => dll}/win32/user32/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/user32/misc/dde.c | 0 .../dll => dll}/win32/user32/misc/ddeclient.c | 0 .../dll => dll}/win32/user32/misc/ddeserver.c | 0 .../dll => dll}/win32/user32/misc/desktop.c | 0 .../dll => dll}/win32/user32/misc/display.c | 0 .../dll => dll}/win32/user32/misc/dllmain.c | 0 {reactos/dll => dll}/win32/user32/misc/exit.c | 0 .../dll => dll}/win32/user32/misc/exticon.c | 0 {reactos/dll => dll}/win32/user32/misc/misc.c | 0 .../dll => dll}/win32/user32/misc/object.c | 0 .../dll => dll}/win32/user32/misc/resources.c | 0 .../dll => dll}/win32/user32/misc/stubs.c | 0 .../dll => dll}/win32/user32/misc/timer.c | 0 .../dll => dll}/win32/user32/misc/winhelp.c | 0 .../dll => dll}/win32/user32/misc/winsta.c | 0 .../dll => dll}/win32/user32/misc/wsprintf.c | 0 .../win32/user32/resources/obm_checkboxes.bmp | Bin .../win32/user32/resources/obm_close.bmp | Bin .../win32/user32/resources/obm_combo.bmp | Bin .../win32/user32/resources/obm_mnarrow.bmp | Bin .../user32/resources/ocr_appstarting.cur | Bin .../user32/resources/ocr_cdautostart.cur | Bin .../win32/user32/resources/ocr_cross.cur | Bin .../win32/user32/resources/ocr_dragobject.cur | Bin .../win32/user32/resources/ocr_hand.cur | Bin .../win32/user32/resources/ocr_help.cur | Bin .../win32/user32/resources/ocr_ibeam.cur | Bin .../win32/user32/resources/ocr_icon.cur | Bin .../win32/user32/resources/ocr_no.cur | Bin .../win32/user32/resources/ocr_normal.cur | Bin .../win32/user32/resources/ocr_pen.cur | Bin .../win32/user32/resources/ocr_size.cur | Bin .../win32/user32/resources/ocr_sizeall.cur | Bin .../win32/user32/resources/ocr_sizenesw.cur | Bin .../win32/user32/resources/ocr_sizens.cur | Bin .../win32/user32/resources/ocr_sizenwse.cur | Bin .../win32/user32/resources/ocr_sizewe.cur | Bin .../win32/user32/resources/ocr_up.cur | Bin .../win32/user32/resources/ocr_wait.cur | Bin .../win32/user32/resources/oic_bang.ico | Bin .../win32/user32/resources/oic_hand.ico | Bin .../win32/user32/resources/oic_note.ico | Bin .../win32/user32/resources/oic_ques.ico | Bin .../win32/user32/resources/oic_reactos.ico | Bin .../win32/user32/resources/oic_sample.ico | Bin {reactos/dll => dll}/win32/user32/user32.def | 0 .../dll => dll}/win32/user32/user32.rbuild | 0 {reactos/dll => dll}/win32/user32/user32.rc | 0 .../dll => dll}/win32/user32/windows/accel.c | 0 .../dll => dll}/win32/user32/windows/bitmap.c | 0 .../dll => dll}/win32/user32/windows/caret.c | 0 .../dll => dll}/win32/user32/windows/class.c | 0 .../win32/user32/windows/clipboard.c | 0 .../dll => dll}/win32/user32/windows/cursor.c | 0 .../dll => dll}/win32/user32/windows/dc.c | 0 .../dll => dll}/win32/user32/windows/defwnd.c | 0 .../dll => dll}/win32/user32/windows/dialog.c | 0 .../dll => dll}/win32/user32/windows/draw.c | 0 .../dll => dll}/win32/user32/windows/font.c | 0 .../dll => dll}/win32/user32/windows/hook.c | 0 .../dll => dll}/win32/user32/windows/icon.c | 0 .../dll => dll}/win32/user32/windows/input.c | 0 .../dll => dll}/win32/user32/windows/mdi.c | 0 .../dll => dll}/win32/user32/windows/menu.c | 0 .../win32/user32/windows/message.c | 0 .../win32/user32/windows/messagebox.c | 0 .../win32/user32/windows/nonclient.c | 0 .../dll => dll}/win32/user32/windows/paint.c | 0 .../dll => dll}/win32/user32/windows/prop.c | 0 .../dll => dll}/win32/user32/windows/rect.c | 0 .../dll => dll}/win32/user32/windows/spy.c | 0 .../dll => dll}/win32/user32/windows/text.c | 0 .../dll => dll}/win32/user32/windows/window.c | 0 .../dll => dll}/win32/user32/windows/winpos.c | 0 {reactos/dll => dll}/win32/userenv/desktop.c | 0 .../dll => dll}/win32/userenv/directory.c | 0 .../dll => dll}/win32/userenv/environment.c | 0 {reactos/dll => dll}/win32/userenv/gpolicy.c | 0 {reactos/dll => dll}/win32/userenv/internal.h | 0 .../dll => dll}/win32/userenv/lang/bg-BG.rc | 0 .../dll => dll}/win32/userenv/lang/cs-CZ.rc | 0 .../dll => dll}/win32/userenv/lang/de-DE.rc | 0 .../dll => dll}/win32/userenv/lang/el-GR.rc | 0 .../dll => dll}/win32/userenv/lang/en-US.rc | 0 .../dll => dll}/win32/userenv/lang/es-ES.rc | 0 .../dll => dll}/win32/userenv/lang/fi-FI.rc | 0 .../dll => dll}/win32/userenv/lang/fr-FR.rc | 0 .../dll => dll}/win32/userenv/lang/hu-HU.rc | 0 .../dll => dll}/win32/userenv/lang/id-ID.rc | 0 .../dll => dll}/win32/userenv/lang/it-IT.rc | 0 .../dll => dll}/win32/userenv/lang/ja-JP.rc | 0 .../dll => dll}/win32/userenv/lang/nl-NL.rc | 0 .../dll => dll}/win32/userenv/lang/no-NO.rc | 0 .../dll => dll}/win32/userenv/lang/pl-PL.rc | 0 .../dll => dll}/win32/userenv/lang/ru-RU.rc | 0 .../dll => dll}/win32/userenv/lang/sk-SK.rc | 0 .../dll => dll}/win32/userenv/lang/sv-SE.rc | 0 .../dll => dll}/win32/userenv/lang/th-TH.rc | 0 .../dll => dll}/win32/userenv/lang/uk-UA.rc | 0 {reactos/dll => dll}/win32/userenv/misc.c | 0 {reactos/dll => dll}/win32/userenv/precomp.h | 0 {reactos/dll => dll}/win32/userenv/profile.c | 0 {reactos/dll => dll}/win32/userenv/registry.c | 0 .../dll => dll}/win32/userenv/resources.h | 0 {reactos/dll => dll}/win32/userenv/setup.c | 0 {reactos/dll => dll}/win32/userenv/userenv.c | 0 .../dll => dll}/win32/userenv/userenv.def | 0 .../dll => dll}/win32/userenv/userenv.rbuild | 0 {reactos/dll => dll}/win32/userenv/userenv.rc | 0 {reactos/dll => dll}/win32/usp10/usp10.c | 0 {reactos/dll => dll}/win32/usp10/usp10.rbuild | 0 {reactos/dll => dll}/win32/usp10/usp10.spec | 0 .../dll => dll}/win32/usp10/usp10_ros.diff | 0 {reactos/dll => dll}/win32/uxtheme/draw.c | 0 {reactos/dll => dll}/win32/uxtheme/main.c | 0 {reactos/dll => dll}/win32/uxtheme/metric.c | 0 {reactos/dll => dll}/win32/uxtheme/msstyles.c | 0 {reactos/dll => dll}/win32/uxtheme/msstyles.h | 0 {reactos/dll => dll}/win32/uxtheme/property.c | 0 {reactos/dll => dll}/win32/uxtheme/stylemap.c | 0 {reactos/dll => dll}/win32/uxtheme/system.c | 0 {reactos/dll => dll}/win32/uxtheme/uxini.c | 0 .../dll => dll}/win32/uxtheme/uxtheme.rbuild | 0 .../dll => dll}/win32/uxtheme/uxtheme.spec | 0 .../dll => dll}/win32/uxtheme/uxthemedll.h | 0 {reactos/dll => dll}/win32/uxtheme/version.rc | 0 {reactos/dll => dll}/win32/vdmdbg/vdmdbg.c | 0 {reactos/dll => dll}/win32/vdmdbg/vdmdbg.h | 0 .../dll => dll}/win32/vdmdbg/vdmdbg.rbuild | 0 {reactos/dll => dll}/win32/vdmdbg/vdmdbg.spec | 0 {reactos/dll => dll}/win32/version/info.c | 0 {reactos/dll => dll}/win32/version/install.c | 0 {reactos/dll => dll}/win32/version/resource.c | 0 {reactos/dll => dll}/win32/version/ver.spec | 0 {reactos/dll => dll}/win32/version/ver16.c | 0 .../dll => dll}/win32/version/version.rbuild | 0 {reactos/dll => dll}/win32/version/version.rc | 0 .../dll => dll}/win32/version/version.spec | 0 .../win32/version/version_ros.diff | 0 .../dll => dll}/win32/wdmaud.drv/wdmaud.c | 0 .../win32/wdmaud.drv/wdmaud.rbuild | 0 .../dll => dll}/win32/wdmaud.drv/wdmaud.rc | 0 .../dll => dll}/win32/wdmaud.drv/wdmaud.spec | 0 {reactos/dll => dll}/win32/win32.rbuild | 0 {reactos/dll => dll}/win32/winfax/precomp.h | 0 {reactos/dll => dll}/win32/winfax/winfax.c | 0 {reactos/dll => dll}/win32/winfax/winfax.def | 0 .../dll => dll}/win32/winfax/winfax.rbuild | 0 {reactos/dll => dll}/win32/winfax/winfax.rc | 0 {reactos/dll => dll}/win32/winhttp/handle.c | 0 .../dll => dll}/win32/winhttp/inet_ntop.c | 0 {reactos/dll => dll}/win32/winhttp/main.c | 0 {reactos/dll => dll}/win32/winhttp/net.c | 0 {reactos/dll => dll}/win32/winhttp/request.c | 0 {reactos/dll => dll}/win32/winhttp/session.c | 0 .../dll => dll}/win32/winhttp/winhttp.rbuild | 0 .../dll => dll}/win32/winhttp/winhttp.spec | 0 .../win32/winhttp/winhttp_private.h | 0 .../win32/winhttp/winhttp_ros.diff | 0 {reactos/dll => dll}/win32/wininet/cookie.c | 0 {reactos/dll => dll}/win32/wininet/dialogs.c | 0 {reactos/dll => dll}/win32/wininet/ftp.c | 0 {reactos/dll => dll}/win32/wininet/gopher.c | 0 {reactos/dll => dll}/win32/wininet/http.c | 0 .../dll => dll}/win32/wininet/inet_ntop.c | 0 {reactos/dll => dll}/win32/wininet/internet.c | 0 {reactos/dll => dll}/win32/wininet/internet.h | 0 .../dll => dll}/win32/wininet/netconnection.c | 0 {reactos/dll => dll}/win32/wininet/resource.h | 0 {reactos/dll => dll}/win32/wininet/rsrc.rc | 0 {reactos/dll => dll}/win32/wininet/urlcache.c | 0 {reactos/dll => dll}/win32/wininet/utility.c | 0 {reactos/dll => dll}/win32/wininet/version.rc | 0 .../dll => dll}/win32/wininet/wininet.rbuild | 0 .../dll => dll}/win32/wininet/wininet.spec | 0 .../dll => dll}/win32/wininet/wininet_Bg.rc | 0 .../dll => dll}/win32/wininet/wininet_Cs.rc | 0 .../dll => dll}/win32/wininet/wininet_Da.rc | 0 .../dll => dll}/win32/wininet/wininet_De.rc | 0 .../dll => dll}/win32/wininet/wininet_En.rc | 0 .../dll => dll}/win32/wininet/wininet_Eo.rc | 0 .../dll => dll}/win32/wininet/wininet_Es.rc | 0 .../dll => dll}/win32/wininet/wininet_Fi.rc | 0 .../dll => dll}/win32/wininet/wininet_Fr.rc | 0 .../dll => dll}/win32/wininet/wininet_Hu.rc | 0 .../dll => dll}/win32/wininet/wininet_It.rc | 0 .../dll => dll}/win32/wininet/wininet_Ja.rc | 0 .../dll => dll}/win32/wininet/wininet_Ko.rc | 0 .../dll => dll}/win32/wininet/wininet_Nl.rc | 0 .../dll => dll}/win32/wininet/wininet_No.rc | 0 .../dll => dll}/win32/wininet/wininet_Pl.rc | 0 .../dll => dll}/win32/wininet/wininet_Pt.rc | 0 .../dll => dll}/win32/wininet/wininet_Ro.rc | 0 .../dll => dll}/win32/wininet/wininet_Ru.rc | 0 .../dll => dll}/win32/wininet/wininet_Si.rc | 0 .../dll => dll}/win32/wininet/wininet_Sv.rc | 0 .../dll => dll}/win32/wininet/wininet_Tr.rc | 0 .../dll => dll}/win32/wininet/wininet_Uk.rc | 0 .../dll => dll}/win32/wininet/wininet_main.c | 0 .../win32/wininet/wininet_ros.diff | 0 {reactos/dll => dll}/win32/winmm/driver.c | 0 {reactos/dll => dll}/win32/winmm/joystick.c | 0 {reactos/dll => dll}/win32/winmm/lolvldrv.c | 0 {reactos/dll => dll}/win32/winmm/mci.c | 0 {reactos/dll => dll}/win32/winmm/message16.c | 0 .../dll => dll}/win32/winmm/midimap/midimap.c | 0 .../win32/winmm/midimap/midimap.drv.spec | 0 .../win32/winmm/midimap/midimap.rbuild | 0 .../win32/winmm/midimap/midimap.rc | 0 .../win32/winmm/midimap/midimap.spec | 0 {reactos/dll => dll}/win32/winmm/mmio.c | 0 {reactos/dll => dll}/win32/winmm/mmsystem.c | 0 .../dll => dll}/win32/winmm/mmsystem.spec | 0 {reactos/dll => dll}/win32/winmm/playsound.c | 0 {reactos/dll => dll}/win32/winmm/registry.c | 0 {reactos/dll => dll}/win32/winmm/sound.spec | 0 {reactos/dll => dll}/win32/winmm/sound16.c | 0 {reactos/dll => dll}/win32/winmm/time.c | 0 .../win32/winmm/wavemap/msacm.drv.spec | 0 .../win32/winmm/wavemap/msacm.spec | 0 .../dll => dll}/win32/winmm/wavemap/wavemap.c | 0 .../win32/winmm/wavemap/wavemap.rbuild | 0 .../win32/winmm/wavemap/wavemap.rc | 0 {reactos/dll => dll}/win32/winmm/winemm.h | 0 {reactos/dll => dll}/win32/winmm/winemm16.h | 0 {reactos/dll => dll}/win32/winmm/winmm.c | 0 {reactos/dll => dll}/win32/winmm/winmm.rbuild | 0 {reactos/dll => dll}/win32/winmm/winmm.spec | 0 {reactos/dll => dll}/win32/winmm/winmm_Br.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Cs.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_De.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_En.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Es.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Fr.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Hu.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Id.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_It.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Ja.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Nl.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_No.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Pl.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Pt.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Ru.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Si.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Sk.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_Uk.rc | 0 {reactos/dll => dll}/win32/winmm/winmm_res.rc | 0 {reactos/dll => dll}/win32/winscard/precomp.h | 0 .../dll => dll}/win32/winscard/winscard.c | 0 .../dll => dll}/win32/winscard/winscard.def | 0 .../dll => dll}/win32/winscard/winscard.rc | 0 {reactos/dll => dll}/win32/winspool/info.c | 0 {reactos/dll => dll}/win32/winspool/stubs.c | 0 .../dll => dll}/win32/winspool/winspool.def | 0 .../win32/winspool/winspool.rbuild | 0 .../dll => dll}/win32/winspool/winspool.rc | 0 {reactos/dll => dll}/win32/winsta/main.c | 0 {reactos/dll => dll}/win32/winsta/misc.c | 0 {reactos/dll => dll}/win32/winsta/server.c | 0 {reactos/dll => dll}/win32/winsta/winsta.def | 0 {reactos/dll => dll}/win32/winsta/winsta.h | 0 .../dll => dll}/win32/winsta/winsta.rbuild | 0 {reactos/dll => dll}/win32/winsta/winsta.rc | 0 {reactos/dll => dll}/win32/winsta/ws.c | 0 {reactos/dll => dll}/win32/wintrust/asn.c | 0 {reactos/dll => dll}/win32/wintrust/crypt.c | 0 .../dll => dll}/win32/wintrust/register.c | 0 {reactos/dll => dll}/win32/wintrust/softpub.c | 0 .../dll => dll}/win32/wintrust/version.rc | 0 .../win32/wintrust/wintrust.rbuild | 0 .../dll => dll}/win32/wintrust/wintrust.spec | 0 .../win32/wintrust/wintrust_main.c | 0 .../win32/wintrust/wintrust_priv.h | 0 .../win32/wintrust/wintrust_ros.diff | 0 {reactos/dll => dll}/win32/wldap32/add.c | 0 {reactos/dll => dll}/win32/wldap32/ber.c | 0 {reactos/dll => dll}/win32/wldap32/bind.c | 0 {reactos/dll => dll}/win32/wldap32/compare.c | 0 {reactos/dll => dll}/win32/wldap32/control.c | 0 {reactos/dll => dll}/win32/wldap32/delete.c | 0 {reactos/dll => dll}/win32/wldap32/dn.c | 0 {reactos/dll => dll}/win32/wldap32/error.c | 0 {reactos/dll => dll}/win32/wldap32/extended.c | 0 {reactos/dll => dll}/win32/wldap32/init.c | 0 {reactos/dll => dll}/win32/wldap32/main.c | 0 {reactos/dll => dll}/win32/wldap32/misc.c | 0 {reactos/dll => dll}/win32/wldap32/modify.c | 0 {reactos/dll => dll}/win32/wldap32/modrdn.c | 0 {reactos/dll => dll}/win32/wldap32/option.c | 0 {reactos/dll => dll}/win32/wldap32/page.c | 0 {reactos/dll => dll}/win32/wldap32/parse.c | 0 {reactos/dll => dll}/win32/wldap32/rename.c | 0 {reactos/dll => dll}/win32/wldap32/search.c | 0 {reactos/dll => dll}/win32/wldap32/value.c | 0 .../win32/wldap32/winldap_private.h | 0 {reactos/dll => dll}/win32/wldap32/wldap32.h | 0 .../dll => dll}/win32/wldap32/wldap32.rbuild | 0 {reactos/dll => dll}/win32/wldap32/wldap32.rc | 0 .../dll => dll}/win32/wldap32/wldap32.spec | 0 .../dll => dll}/win32/wldap32/wldap32_Da.rc | 0 .../dll => dll}/win32/wldap32/wldap32_De.rc | 0 .../dll => dll}/win32/wldap32/wldap32_En.rc | 0 .../dll => dll}/win32/wldap32/wldap32_Es.rc | 0 .../dll => dll}/win32/wldap32/wldap32_Fr.rc | 0 .../dll => dll}/win32/wldap32/wldap32_Ko.rc | 0 .../dll => dll}/win32/wldap32/wldap32_Nl.rc | 0 .../dll => dll}/win32/wldap32/wldap32_No.rc | 0 .../dll => dll}/win32/wldap32/wldap32_Pl.rc | 0 .../dll => dll}/win32/wldap32/wldap32_Ru.rc | 0 .../dll => dll}/win32/wldap32/wldap32_Sv.rc | 0 .../dll => dll}/win32/wldap32/wldap32_Tr.rc | 0 .../win32/ws2_32/include/catalog.h | 0 .../dll => dll}/win32/ws2_32/include/debug.h | 0 .../dll => dll}/win32/ws2_32/include/handle.h | 0 .../dll => dll}/win32/ws2_32/include/upcall.h | 0 .../dll => dll}/win32/ws2_32/include/ws2_32.h | 0 .../dll => dll}/win32/ws2_32/misc/async.c | 0 {reactos/dll => dll}/win32/ws2_32/misc/bsd.c | 0 .../dll => dll}/win32/ws2_32/misc/catalog.c | 0 .../dll => dll}/win32/ws2_32/misc/dllmain.c | 0 .../dll => dll}/win32/ws2_32/misc/event.c | 0 .../dll => dll}/win32/ws2_32/misc/handle.c | 0 {reactos/dll => dll}/win32/ws2_32/misc/ns.c | 0 .../dll => dll}/win32/ws2_32/misc/sndrcv.c | 0 .../dll => dll}/win32/ws2_32/misc/stubs.c | 0 .../dll => dll}/win32/ws2_32/misc/upcall.c | 0 .../dll => dll}/win32/ws2_32/tests/setup.c | 0 .../dll => dll}/win32/ws2_32/tests/stubs.tst | 0 .../win32/ws2_32/tests/tests/WinsockEvent.c | 0 {reactos/dll => dll}/win32/ws2_32/ws2_32.def | 0 .../dll => dll}/win32/ws2_32/ws2_32.rbuild | 0 {reactos/dll => dll}/win32/ws2_32/ws2_32.rc | 0 {reactos/dll => dll}/win32/ws2help/debug.h | 0 {reactos/dll => dll}/win32/ws2help/ws2help.c | 0 .../dll => dll}/win32/ws2help/ws2help.def | 0 {reactos/dll => dll}/win32/ws2help/ws2help.h | 0 .../dll => dll}/win32/ws2help/ws2help.rbuild | 0 {reactos/dll => dll}/win32/ws2help/ws2help.rc | 0 {reactos/dll => dll}/win32/wshirda/debug.h | 0 {reactos/dll => dll}/win32/wshirda/wshirda.c | 0 .../dll => dll}/win32/wshirda/wshirda.def | 0 {reactos/dll => dll}/win32/wshirda/wshirda.h | 0 .../dll => dll}/win32/wshirda/wshirda.rbuild | 0 {reactos/dll => dll}/win32/wshirda/wshirda.rc | 0 .../dll => dll}/win32/wshtcpip/wshtcpip.c | 0 .../dll => dll}/win32/wshtcpip/wshtcpip.h | 0 .../win32/wshtcpip/wshtcpip.rbuild | 0 .../dll => dll}/win32/wshtcpip/wshtcpip.rc | 0 .../dll => dll}/win32/wshtcpip/wshtcpip.spec | 0 .../dll => dll}/win32/wshtcpip/wshtcpip_specs | 0 {reactos/dll => dll}/win32/wsock32/stubs.c | 0 .../dll => dll}/win32/wsock32/wsock32.def | 0 .../dll => dll}/win32/wsock32/wsock32.rbuild | 0 {reactos/dll => dll}/win32/wsock32/wsock32.rc | 0 .../dll => dll}/win32/wtsapi32/wtsapi32.c | 0 .../win32/wtsapi32/wtsapi32.rbuild | 0 .../dll => dll}/win32/wtsapi32/wtsapi32.spec | 0 {reactos/drivers => drivers}/Doxyfile | 0 {reactos/drivers => drivers}/base/beep/beep.c | 0 .../drivers => drivers}/base/beep/beep.rbuild | 0 .../drivers => drivers}/base/beep/beep.rc | 0 .../base/bootvid/arm/bootdata.c | 0 .../base/bootvid/arm/bootvid.c | 0 .../base/bootvid/bootvid.rbuild | 0 .../base/bootvid/bootvid.rc | 0 .../base/bootvid/bootvid.spec | 0 .../base/bootvid/i386/bootdata.c | 0 .../base/bootvid/i386/bootvid.c | 0 .../base/bootvid/i386/vga.c | 0 .../base/bootvid/precomp.h | 0 .../drivers => drivers}/base/directory.rbuild | 0 .../drivers => drivers}/base/kdcom/arm/kdbg.c | 0 .../base/kdcom/i386/kdbg.c | 0 .../base/kdcom/kdcom.rbuild | 0 .../drivers => drivers}/base/kdcom/kdcom.rc | 0 .../drivers => drivers}/base/kdcom/kdcom.spec | 0 {reactos/drivers => drivers}/base/null/null.c | 0 .../drivers => drivers}/base/null/null.rbuild | 0 .../drivers => drivers}/base/null/null.rc | 0 .../drivers => drivers}/bus/acpi/acpi.rbuild | 0 {reactos/drivers => drivers}/bus/acpi/acpi.rc | 0 .../drivers => drivers}/bus/acpi/changed.txt | 0 .../bus/acpi/dispatcher/dsfield.c | 0 .../bus/acpi/dispatcher/dsmethod.c | 0 .../bus/acpi/dispatcher/dsmthdat.c | 0 .../bus/acpi/dispatcher/dsobject.c | 0 .../bus/acpi/dispatcher/dsopcode.c | 0 .../bus/acpi/dispatcher/dsutils.c | 0 .../bus/acpi/dispatcher/dswexec.c | 0 .../bus/acpi/dispatcher/dswload.c | 0 .../bus/acpi/dispatcher/dswscope.c | 0 .../bus/acpi/dispatcher/dswstate.c | 0 .../bus/acpi/events/evevent.c | 0 .../bus/acpi/events/evmisc.c | 0 .../bus/acpi/events/evregion.c | 0 .../bus/acpi/events/evrgnini.c | 0 .../bus/acpi/events/evsci.c | 0 .../bus/acpi/events/evxface.c | 0 .../bus/acpi/events/evxfevnt.c | 0 .../bus/acpi/events/evxfregn.c | 0 .../bus/acpi/executer/amconfig.c | 0 .../bus/acpi/executer/amconvrt.c | 0 .../bus/acpi/executer/amcreate.c | 0 .../bus/acpi/executer/amdump.c | 0 .../bus/acpi/executer/amdyadic.c | 0 .../bus/acpi/executer/amfield.c | 0 .../bus/acpi/executer/amfldio.c | 0 .../bus/acpi/executer/ammisc.c | 0 .../bus/acpi/executer/ammonad.c | 0 .../bus/acpi/executer/ammutex.c | 0 .../bus/acpi/executer/amnames.c | 0 .../bus/acpi/executer/amprep.c | 0 .../bus/acpi/executer/amregion.c | 0 .../bus/acpi/executer/amresnte.c | 0 .../bus/acpi/executer/amresolv.c | 0 .../bus/acpi/executer/amresop.c | 0 .../bus/acpi/executer/amstore.c | 0 .../bus/acpi/executer/amstoren.c | 0 .../bus/acpi/executer/amstorob.c | 0 .../bus/acpi/executer/amsystem.c | 0 .../bus/acpi/executer/amutils.c | 0 .../bus/acpi/executer/amxface.c | 0 .../bus/acpi/hardware/hwacpi.c | 0 .../bus/acpi/hardware/hwgpe.c | 0 .../bus/acpi/hardware/hwregs.c | 0 .../bus/acpi/hardware/hwsleep.c | 0 .../bus/acpi/hardware/hwtimer.c | 0 .../bus/acpi/include/accommon.h | 0 .../bus/acpi/include/acconfig.h | 0 .../bus/acpi/include/acdebug.h | 0 .../bus/acpi/include/acdispat.h | 0 .../bus/acpi/include/acevents.h | 0 .../bus/acpi/include/acexcep.h | 0 .../bus/acpi/include/acglobal.h | 0 .../bus/acpi/include/achware.h | 0 .../bus/acpi/include/acinterp.h | 0 .../bus/acpi/include/aclocal.h | 0 .../bus/acpi/include/acmacros.h | 0 .../bus/acpi/include/acnamesp.h | 0 .../bus/acpi/include/acobject.h | 0 .../bus/acpi/include/acoutput.h | 0 .../bus/acpi/include/acparser.h | 0 .../bus/acpi/include/acpi.h | 0 .../bus/acpi/include/acpiosxf.h | 0 .../bus/acpi/include/acpixf.h | 0 .../bus/acpi/include/acresrc.h | 0 .../bus/acpi/include/acstruct.h | 0 .../bus/acpi/include/actables.h | 0 .../bus/acpi/include/actbl.h | 0 .../bus/acpi/include/actbl1.h | 0 .../bus/acpi/include/actbl2.h | 0 .../bus/acpi/include/actbl71.h | 0 .../bus/acpi/include/actypes.h | 0 .../bus/acpi/include/amlcode.h | 0 .../bus/acpi/include/platform/acenv.h | 0 .../bus/acpi/include/platform/acgcc.h | 0 .../bus/acpi/include/platform/aclinux.h | 0 .../bus/acpi/include/platform/acwin.h | 0 .../bus/acpi/include/platform/types.h | 0 .../bus/acpi/namespace/nsaccess.c | 0 .../bus/acpi/namespace/nsalloc.c | 0 .../bus/acpi/namespace/nseval.c | 0 .../bus/acpi/namespace/nsinit.c | 0 .../bus/acpi/namespace/nsload.c | 0 .../bus/acpi/namespace/nsnames.c | 0 .../bus/acpi/namespace/nsobject.c | 0 .../bus/acpi/namespace/nssearch.c | 0 .../bus/acpi/namespace/nsutils.c | 0 .../bus/acpi/namespace/nswalk.c | 0 .../bus/acpi/namespace/nsxfname.c | 0 .../bus/acpi/namespace/nsxfobj.c | 0 .../bus/acpi/ospm/acpienum.c | 0 .../bus/acpi/ospm/acpisys.c | 0 .../drivers => drivers}/bus/acpi/ospm/bn.c | 0 .../bus/acpi/ospm/busmgr/bm.c | 0 .../bus/acpi/ospm/busmgr/bmnotify.c | 0 .../bus/acpi/ospm/busmgr/bmpm.c | 0 .../bus/acpi/ospm/busmgr/bmpower.c | 0 .../bus/acpi/ospm/busmgr/bmrequest.c | 0 .../bus/acpi/ospm/busmgr/bmsearch.c | 0 .../bus/acpi/ospm/busmgr/bmutils.c | 0 .../bus/acpi/ospm/busmgr/bmxface.c | 0 .../drivers => drivers}/bus/acpi/ospm/fdo.c | 0 .../bus/acpi/ospm/include/acpisys.h | 0 .../bus/acpi/ospm/include/bm.h | 0 .../bus/acpi/ospm/include/bmpower.h | 0 .../bus/acpi/ospm/include/bn.h | 0 .../drivers => drivers}/bus/acpi/ospm/osl.c | 0 .../drivers => drivers}/bus/acpi/ospm/pdo.c | 0 .../bus/acpi/parser/psargs.c | 0 .../bus/acpi/parser/psopcode.c | 0 .../bus/acpi/parser/psparse.c | 0 .../bus/acpi/parser/psscope.c | 0 .../bus/acpi/parser/pstree.c | 0 .../bus/acpi/parser/psutils.c | 0 .../bus/acpi/parser/pswalk.c | 0 .../bus/acpi/parser/psxface.c | 0 .../bus/acpi/resource/rsaddr.c | 0 .../bus/acpi/resource/rscalc.c | 0 .../bus/acpi/resource/rscreate.c | 0 .../bus/acpi/resource/rsdump.c | 0 .../bus/acpi/resource/rsio.c | 0 .../bus/acpi/resource/rsirq.c | 0 .../bus/acpi/resource/rslist.c | 0 .../bus/acpi/resource/rsmemory.c | 0 .../bus/acpi/resource/rsmisc.c | 0 .../bus/acpi/resource/rsutils.c | 0 .../bus/acpi/resource/rsxface.c | 0 .../bus/acpi/tables/tbconvrt.c | 0 .../bus/acpi/tables/tbget.c | 0 .../bus/acpi/tables/tbinstal.c | 0 .../bus/acpi/tables/tbutils.c | 0 .../bus/acpi/tables/tbxface.c | 0 .../bus/acpi/tables/tbxfroot.c | 0 .../bus/acpi/utils/cmalloc.c | 0 .../bus/acpi/utils/cmclib.c | 0 .../bus/acpi/utils/cmcopy.c | 0 .../bus/acpi/utils/cmdebug.c | 0 .../bus/acpi/utils/cmdelete.c | 0 .../bus/acpi/utils/cmeval.c | 0 .../bus/acpi/utils/cmglobal.c | 0 .../bus/acpi/utils/cminit.c | 0 .../bus/acpi/utils/cmobject.c | 0 .../bus/acpi/utils/cmutils.c | 0 .../bus/acpi/utils/cmxface.c | 0 .../drivers => drivers}/bus/directory.rbuild | 0 .../drivers => drivers}/bus/isapnp/isapnp.c | 0 .../drivers => drivers}/bus/isapnp/isapnp.h | 0 .../bus/isapnp/isapnp.rbuild | 0 .../drivers => drivers}/bus/isapnp/isapnp.rc | 0 {reactos/drivers => drivers}/bus/pci/fdo.c | 0 {reactos/drivers => drivers}/bus/pci/pci.c | 0 {reactos/drivers => drivers}/bus/pci/pci.h | 0 .../drivers => drivers}/bus/pci/pci.rbuild | 0 {reactos/drivers => drivers}/bus/pci/pci.rc | 0 {reactos/drivers => drivers}/bus/pci/pcidef.h | 0 {reactos/drivers => drivers}/bus/pci/pdo.c | 0 .../directx/directory.rbuild | 0 .../directx/dxapi/dxapi.rbuild | 0 .../directx/dxapi/dxapi.rc | 0 .../directx/dxapi/dxapi.spec | 0 .../directx/dxapi/dxapi_driver.h | 0 .../drivers => drivers}/directx/dxapi/main.c | 0 .../drivers => drivers}/directx/dxg/ddhmg.c | 0 .../directx/dxg/dxg.rbuild | 0 .../drivers => drivers}/directx/dxg/dxg.rc | 0 .../drivers => drivers}/directx/dxg/dxg.spec | 0 .../directx/dxg/dxg_driver.h | 0 .../drivers => drivers}/directx/dxg/dxg_int.h | 0 .../drivers => drivers}/directx/dxg/eng.c | 0 .../directx/dxg/historic.c | 0 .../drivers => drivers}/directx/dxg/main.c | 0 .../drivers => drivers}/directx/dxg/tags.h | 0 .../directx/dxgthk/dxgthk.rbuild | 0 .../directx/dxgthk/dxgthk.rc | 0 .../directx/dxgthk/dxgthk.spec | 0 .../drivers => drivers}/directx/dxgthk/main.c | 0 {reactos/drivers => drivers}/drivers.rbuild | 0 .../filesystems/cdfs/cdfs.c | 0 .../filesystems/cdfs/cdfs.h | 0 .../filesystems/cdfs/cdfs.rbuild | 0 .../filesystems/cdfs/cdfs.rc | 0 .../filesystems/cdfs/cleanup.c | 0 .../filesystems/cdfs/close.c | 0 .../filesystems/cdfs/common.c | 0 .../filesystems/cdfs/create.c | 0 .../filesystems/cdfs/dirctl.c | 0 .../filesystems/cdfs/fcb.c | 0 .../filesystems/cdfs/finfo.c | 0 .../filesystems/cdfs/fsctl.c | 0 .../filesystems/cdfs/misc.c | 0 .../drivers => drivers}/filesystems/cdfs/rw.c | 0 .../filesystems/cdfs/volinfo.c | 0 .../filesystems/directory.rbuild | 0 .../filesystems/ext2/ext2.rbuild | 0 .../filesystems/ext2/ext2fs.rc | 0 .../filesystems/ext2/inc/errmsg.h | 0 .../filesystems/ext2/inc/ext2_fs.h | 0 .../filesystems/ext2/inc/ext2fsd.h | 0 .../filesystems/ext2/inc/ext2metadata.h | 0 .../filesystems/ext2/inc/protos.h | 0 .../filesystems/ext2/inc/resource.h | 0 .../filesystems/ext2/inc/struct.h | 0 .../filesystems/ext2/src/DiskIO.c | 0 .../filesystems/ext2/src/cleanup.c | 0 .../filesystems/ext2/src/close.c | 0 .../filesystems/ext2/src/create.c | 0 .../filesystems/ext2/src/devcntrl.c | 0 .../filesystems/ext2/src/dircntrl.c | 0 .../filesystems/ext2/src/ext2.rc | 0 .../filesystems/ext2/src/ext2init.c | 0 .../filesystems/ext2/src/fastio.c | 0 .../filesystems/ext2/src/fileinfo.c | 0 .../filesystems/ext2/src/flush.c | 0 .../filesystems/ext2/src/fsctrl.c | 0 .../filesystems/ext2/src/io.c | 0 .../filesystems/ext2/src/metadata.c | 0 .../filesystems/ext2/src/misc.c | 0 .../filesystems/ext2/src/read.c | 0 .../filesystems/ext2/src/shutdown.c | 0 .../filesystems/ext2/src/volinfo.c | 0 .../filesystems/ext2/src/write.c | 0 .../filesystems/fastfat/blockdev.c | 0 .../filesystems/fastfat/cleanup.c | 0 .../filesystems/fastfat/close.c | 0 .../filesystems/fastfat/create.c | 0 .../filesystems/fastfat/dir.c | 0 .../filesystems/fastfat/direntry.c | 0 .../filesystems/fastfat/dirwr.c | 0 .../filesystems/fastfat/ea.c | 0 .../filesystems/fastfat/fastio.c | 0 .../filesystems/fastfat/fat.c | 0 .../filesystems/fastfat/fcb.c | 0 .../filesystems/fastfat/finfo.c | 0 .../filesystems/fastfat/flush.c | 0 .../filesystems/fastfat/fsctl.c | 0 .../filesystems/fastfat/iface.c | 0 .../filesystems/fastfat/misc.c | 0 .../filesystems/fastfat/rw.c | 0 .../filesystems/fastfat/shutdown.c | 0 .../filesystems/fastfat/string.c | 0 .../filesystems/fastfat/vfat.h | 0 .../filesystems/fastfat/vfat005.1st | 0 .../filesystems/fastfat/vfat_fr.txt | 0 .../filesystems/fastfat/vfatfs.rbuild | 0 .../filesystems/fastfat/vfatfs.rc | 0 .../filesystems/fastfat/volume.c | 0 .../filesystems/fs_rec/blockdev.c | 0 .../filesystems/fs_rec/cdfs.c | 0 .../filesystems/fs_rec/ext2.c | 0 .../filesystems/fs_rec/fat.c | 0 .../filesystems/fs_rec/fs_rec.c | 0 .../filesystems/fs_rec/fs_rec.h | 0 .../filesystems/fs_rec/fs_rec.rbuild | 0 .../filesystems/fs_rec/fs_rec.rc | 0 .../filesystems/fs_rec/ntfs.c | 0 .../filesystems/fs_rec/udfs.c | 0 .../filesystems/msfs/create.c | 0 .../filesystems/msfs/finfo.c | 0 .../filesystems/msfs/fsctrl.c | 0 .../filesystems/msfs/msfs.c | 0 .../filesystems/msfs/msfs.h | 0 .../filesystems/msfs/msfs.rbuild | 0 .../filesystems/msfs/msfs.rc | 0 .../drivers => drivers}/filesystems/msfs/rw.c | 0 .../filesystems/mup/create.c | 0 .../drivers => drivers}/filesystems/mup/mup.c | 0 .../drivers => drivers}/filesystems/mup/mup.h | 0 .../filesystems/mup/mup.rbuild | 0 .../filesystems/mup/mup.rc | 0 .../filesystems/npfs/create.c | 0 .../filesystems/npfs/finfo.c | 0 .../filesystems/npfs/fsctrl.c | 0 .../filesystems/npfs/npfs.c | 0 .../filesystems/npfs/npfs.h | 0 .../filesystems/npfs/npfs.rbuild | 0 .../filesystems/npfs/npfs.rc | 0 .../drivers => drivers}/filesystems/npfs/rw.c | 0 .../filesystems/npfs/volume.c | 0 .../filesystems/npfs_new/create.c | 0 .../filesystems/npfs_new/finfo.c | 0 .../filesystems/npfs_new/fsctrl.c | 0 .../filesystems/npfs_new/npfs.c | 0 .../filesystems/npfs_new/npfs.h | 0 .../filesystems/npfs_new/npfs.rbuild | 0 .../filesystems/npfs_new/npfs.rc | 0 .../filesystems/npfs_new/rw.c | 0 .../filesystems/npfs_new/volume.c | 0 .../filesystems/ntfs/attrib.c | 0 .../filesystems/ntfs/blockdev.c | 0 .../filesystems/ntfs/close.c | 0 .../filesystems/ntfs/create.c | 0 .../filesystems/ntfs/dirctl.c | 0 .../filesystems/ntfs/dispatch.c | 0 .../filesystems/ntfs/fastio.c | 0 .../filesystems/ntfs/fcb.c | 0 .../filesystems/ntfs/finfo.c | 0 .../filesystems/ntfs/fsctl.c | 0 .../filesystems/ntfs/mft.c | 0 .../filesystems/ntfs/misc.c | 0 .../filesystems/ntfs/notes.txt | 0 .../filesystems/ntfs/ntfs.c | 0 .../filesystems/ntfs/ntfs.h | 0 .../filesystems/ntfs/ntfs.rbuild | 0 .../filesystems/ntfs/ntfs.rc | 0 .../drivers => drivers}/filesystems/ntfs/rw.c | 0 .../filesystems/ntfs/volinfo.c | 0 .../input/directory.rbuild | 0 .../input/i8042prt/README.txt | 0 .../input/i8042prt/createclose.c | 0 .../input/i8042prt/i8042prt.c | 0 .../input/i8042prt/i8042prt.h | 0 .../input/i8042prt/i8042prt.rbuild | 0 .../input/i8042prt/i8042prt.rc | 0 .../input/i8042prt/keyboard.c | 0 .../drivers => drivers}/input/i8042prt/misc.c | 0 .../input/i8042prt/mouse.c | 0 .../drivers => drivers}/input/i8042prt/pnp.c | 0 .../input/i8042prt/ps2pp.c | 0 .../input/i8042prt/readwrite.c | 0 .../input/i8042prt/registry.c | 0 .../input/i8042prt/setup.c | 0 .../input/kbdclass/kbdclass.c | 0 .../input/kbdclass/kbdclass.h | 0 .../input/kbdclass/kbdclass.rbuild | 0 .../input/kbdclass/kbdclass.rc | 0 .../drivers => drivers}/input/kbdclass/misc.c | 0 .../drivers => drivers}/input/mouclass/misc.c | 0 .../input/mouclass/mouclass.c | 0 .../input/mouclass/mouclass.h | 0 .../input/mouclass/mouclass.rbuild | 0 .../input/mouclass/mouclass.rc | 0 .../input/sermouse/createclose.c | 0 .../input/sermouse/detect.c | 0 .../drivers => drivers}/input/sermouse/fdo.c | 0 .../input/sermouse/internaldevctl.c | 0 .../drivers => drivers}/input/sermouse/misc.c | 0 .../input/sermouse/readmouse.c | 0 .../input/sermouse/sermouse.c | 0 .../input/sermouse/sermouse.h | 0 .../input/sermouse/sermouse.rbuild | 0 .../input/sermouse/sermouse.rc | 0 .../input/sermouse/sermouse.txt | 0 .../ksfilter/directory.rbuild | 0 .../ksfilter/ks/allocators.c | 0 .../drivers => drivers}/ksfilter/ks/clocks.c | 0 .../ksfilter/ks/connectivity.c | 0 .../drivers => drivers}/ksfilter/ks/events.c | 0 .../drivers => drivers}/ksfilter/ks/irp.c | 0 .../drivers => drivers}/ksfilter/ks/kcom.c | 0 .../drivers => drivers}/ksfilter/ks/ks.rbuild | 0 .../drivers => drivers}/ksfilter/ks/ks.rc | 0 .../drivers => drivers}/ksfilter/ks/ks.spec | 0 .../drivers => drivers}/ksfilter/ks/methods.c | 0 .../drivers => drivers}/ksfilter/ks/misc.c | 0 .../ksfilter/ks/properties.c | 0 .../ksfilter/ks/topology.c | 0 .../drivers => drivers}/ksfilter/ks/worker.c | 0 .../drivers => drivers}/multimedia/README | 0 .../multimedia/audio/directory.rbuild | 0 .../multimedia/audio/mpu401_nt4/mpu401.c | 0 .../multimedia/audio/mpu401_nt4/mpu401.h | 0 .../multimedia/audio/mpu401_nt4/mpu401.rbuild | 0 .../multimedia/audio/mpu401_nt4/mpu401.rc | 0 .../multimedia/audio/mpu401_nt4/portio.c | 0 .../multimedia/audio/mpu401_nt4/readme.txt | 0 .../multimedia/audio/mpu401_nt4/sbdebug.h | 0 .../multimedia/audio/mpu401_nt4/settings.c | 0 .../multimedia/audio/mpu401_nt4/test.c | 0 .../multimedia/audio/sb16_nt4/control.c | 0 .../multimedia/audio/sb16_nt4/interrupt.c | 0 .../multimedia/audio/sb16_nt4/main.c | 0 .../multimedia/audio/sb16_nt4/sb16_nt4.rbuild | 0 .../multimedia/audio/sb16_nt4/sndblst.h | 0 .../multimedia/audio/sndblst/card.c | 0 .../multimedia/audio/sndblst/dma.c | 0 .../multimedia/audio/sndblst/irq.c | 0 .../multimedia/audio/sndblst/portio.c | 0 .../multimedia/audio/sndblst/sbdebug.h | 0 .../multimedia/audio/sndblst/settings.c | 0 .../multimedia/audio/sndblst/sndblst.c | 0 .../multimedia/audio/sndblst/sndblst.h | 0 .../multimedia/audio/sndblst/sndblst.rbuild | 0 .../multimedia/audio/sndblst/sndblst.rc | 0 .../multimedia/audio/sndblst/test.c | 0 .../multimedia/audio/sndblst/test/sb.c | 0 .../multimedia/audio/sound/dsp.c | 0 .../multimedia/audio/sound/dsp.h | 0 .../multimedia/audio/sound/in.h | 0 .../multimedia/audio/sound/include/devices.h | 0 .../multimedia/audio/sound/mixer.c | 0 .../multimedia/audio/sound/mixer.h | 0 .../multimedia/audio/sound/sb16.c | 0 .../multimedia/audio/sound/sb16.h | 0 .../multimedia/audio/sound/sb16.rc | 0 .../multimedia/audio/sound/sb_waveout.c | 0 .../multimedia/audio/sound/sound.c | 0 .../multimedia/audio/sound/sound.rbuild | 0 .../multimedia/audio/sound/wave.c | 0 .../multimedia/audio/sound/wave.h | 0 .../multimedia/directory.rbuild | 0 .../network/acd/acd/main.c | 0 .../network/acd/include/acdapi.h | 0 .../network/acd/rasacd.rbuild | 0 .../drivers => drivers}/network/acd/rasacd.rc | 0 .../network/afd/afd.rbuild | 0 .../drivers => drivers}/network/afd/afd.rc | 0 .../network/afd/afd/bind.c | 0 .../network/afd/afd/connect.c | 0 .../network/afd/afd/context.c | 0 .../network/afd/afd/event.c | 0 .../network/afd/afd/info.c | 0 .../network/afd/afd/listen.c | 0 .../network/afd/afd/lock.c | 0 .../network/afd/afd/main.c | 0 .../network/afd/afd/read.c | 0 .../network/afd/afd/select.c | 0 .../drivers => drivers}/network/afd/afd/tdi.c | 0 .../network/afd/afd/tdiconn.c | 0 .../network/afd/afd/write.c | 0 .../network/afd/doc/simple_select.txt | 0 .../network/afd/include/afd.h | 0 .../network/afd/include/debug.h | 0 .../network/afd/include/tdi_proto.h | 0 .../network/afd/include/tdiconn.h | 0 .../network/dd/directory.rbuild | 0 .../network/dd/ne2000/include/8390.h | 0 .../network/dd/ne2000/include/debug.h | 0 .../network/dd/ne2000/include/ne2000.h | 0 .../network/dd/ne2000/ne2000.rbuild | 0 .../network/dd/ne2000/ne2000.rc | 0 .../network/dd/ne2000/ne2000/8390.c | 0 .../network/dd/ne2000/ne2000/main.c | 0 .../network/dd/pcnet/pci.h | 0 .../network/dd/pcnet/pcnet.c | 0 .../network/dd/pcnet/pcnet.h | 0 .../network/dd/pcnet/pcnet.rbuild | 0 .../network/dd/pcnet/pcnet.rc | 0 .../network/dd/pcnet/pcnethw.h | 0 .../network/dd/pcnet/requests.c | 0 .../network/directory.rbuild | 0 .../network/lan/include/debug.h | 0 .../network/lan/include/lan.h | 0 .../network/lan/include/memtrack.h | 0 .../network/lan/include/net_lan.h | 0 .../network/lan/include/net_wh.h | 0 .../network/lan/include/precomp.h | 0 .../drivers => drivers}/network/lan/lan.rc | 0 .../drivers => drivers}/network/lan/lan/lan.c | 0 .../network/lan/lan/routines.c | 0 .../drivers => drivers}/network/ndis/DIRS | 0 .../network/ndis/include/buffer.h | 0 .../network/ndis/include/debug.h | 0 .../network/ndis/include/efilter.h | 0 .../network/ndis/include/miniport.h | 0 .../network/ndis/include/ndissys.h | 0 .../network/ndis/include/protocol.h | 0 .../drivers => drivers}/network/ndis/ndis.def | 0 .../network/ndis/ndis.rbuild | 0 .../drivers => drivers}/network/ndis/ndis.rc | 0 .../network/ndis/ndis/40gone.c | 0 .../network/ndis/ndis/50gone.c | 0 .../network/ndis/ndis/SOURCES | 0 .../network/ndis/ndis/buffer.c | 0 .../network/ndis/ndis/cl.c | 0 .../network/ndis/ndis/cm.c | 0 .../network/ndis/ndis/co.c | 0 .../network/ndis/ndis/config.c | 0 .../network/ndis/ndis/control.c | 0 .../network/ndis/ndis/efilter.c | 0 .../network/ndis/ndis/hardware.c | 0 .../network/ndis/ndis/io.c | 0 .../network/ndis/ndis/main.c | 0 .../network/ndis/ndis/memory.c | 0 .../network/ndis/ndis/miniport.c | 0 .../network/ndis/ndis/object.c | 0 .../network/ndis/ndis/protocol.c | 0 .../network/ndis/ndis/string.c | 0 .../network/ndis/ndis/stubs.c | 0 .../network/ndis/ndis/time.c | 0 .../network/ndis/ndis/workitem.c | 0 .../network/ndis/readme.txt | 0 .../drivers => drivers}/network/tcpip/DIRS | 0 .../network/tcpip/datalink/SOURCES | 0 .../network/tcpip/datalink/lan.c | 0 .../network/tcpip/include/address.h | 0 .../network/tcpip/include/arp.h | 0 .../network/tcpip/include/bug.h | 0 .../network/tcpip/include/checksum.h | 0 .../network/tcpip/include/datagram.h | 0 .../network/tcpip/include/debug.h | 0 .../network/tcpip/include/dispatch.h | 0 .../network/tcpip/include/fileobjs.h | 0 .../network/tcpip/include/icmp.h | 0 .../network/tcpip/include/info.h | 0 .../network/tcpip/include/interface.h | 0 .../network/tcpip/include/ip.h | 0 .../network/tcpip/include/irp.h | 0 .../network/tcpip/include/lan.h | 0 .../network/tcpip/include/linux.h | 0 .../network/tcpip/include/lock.h | 0 .../network/tcpip/include/loopback.h | 0 .../network/tcpip/include/memtrack.h | 0 .../network/tcpip/include/neighbor.h | 0 .../network/tcpip/include/pool.h | 0 .../network/tcpip/include/ports.h | 0 .../network/tcpip/include/precomp.h | 0 .../network/tcpip/include/rawip.h | 0 .../network/tcpip/include/receive.h | 0 .../network/tcpip/include/route.h | 0 .../network/tcpip/include/router.h | 0 .../network/tcpip/include/routines.h | 0 .../network/tcpip/include/tcp.h | 0 .../network/tcpip/include/tcpcore.h | 0 .../network/tcpip/include/tcpdef.h | 0 .../network/tcpip/include/tcpip.h | 0 .../network/tcpip/include/ticonsts.h | 0 .../network/tcpip/include/tilists.h | 0 .../network/tcpip/include/titypes.h | 0 .../network/tcpip/include/transmit.h | 0 .../network/tcpip/include/udp.h | 0 .../network/tcpip/include/wait.h | 0 .../network/tcpip/notes.txt | 0 .../network/tcpip/readme.txt | 0 .../network/tcpip/recmutex/recmutex.c | 0 .../network/tcpip/recmutex/recmutex.h | 0 .../network/tcpip/tcpip.rbuild | 0 .../network/tcpip/tcpip.rc | 0 .../network/tcpip/tcpip.spec | 0 .../network/tcpip/tcpip/SOURCES | 0 .../network/tcpip/tcpip/buffer.c | 0 .../network/tcpip/tcpip/bug.c | 0 .../network/tcpip/tcpip/dispatch.c | 0 .../network/tcpip/tcpip/fileobjs.c | 0 .../network/tcpip/tcpip/iinfo.c | 0 .../network/tcpip/tcpip/info.c | 0 .../network/tcpip/tcpip/irp.c | 0 .../network/tcpip/tcpip/lock.c | 0 .../network/tcpip/tcpip/main.c | 0 .../network/tcpip/tcpip/mockbuffer.c | 0 .../network/tcpip/tcpip/mockbug.c | 0 .../network/tcpip/tcpip/mocklock.c | 0 .../network/tcpip/tcpip/mockpool.c | 0 .../network/tcpip/tcpip/mockwait.c | 0 .../network/tcpip/tcpip/ninfo.c | 0 .../network/tcpip/tcpip/pool.c | 0 .../network/tcpip/tcpip/proto.c | 0 .../network/tcpip/tcpip/resource.rc | 0 .../network/tcpip/tcpip/tcpip.def | 0 .../network/tcpip/tcpip/tinfo.c | 0 .../network/tcpip/tcpip/wait.c | 0 .../network/tcpip/tests/setup.c | 0 .../network/tcpip/tests/stubs.tst | 0 .../network/tcpip/tests/tests/ipreceive.c | 0 .../tcpip/tests/tests/tigetprotocolnumber.c | 0 .../network/tdi/cte/string.c | 0 .../network/tdi/cte/stubs.c | 0 .../network/tdi/misc/main.c | 0 .../network/tdi/misc/tdi.def | 0 .../network/tdi/misc/tdi.rc | 0 .../network/tdi/tdi.rbuild | 0 .../network/tdi/tdi/dereg.c | 0 .../network/tdi/tdi/handler.c | 0 .../network/tdi/tdi/obsolete.c | 0 .../network/tdi/tdi/stubs.c | 0 .../parallel/directory.rbuild | 0 .../parallel/parallel/parallel.c | 0 .../parallel/parallel/parallel.h | 0 .../parallel/parallel/parallel.rbuild | 0 .../parallel/parallel/parallel.rc | 0 .../serial/directory.rbuild | 0 .../serial/serenum/detect.c | 0 .../drivers => drivers}/serial/serenum/fdo.c | 0 .../drivers => drivers}/serial/serenum/misc.c | 0 .../drivers => drivers}/serial/serenum/pdo.c | 0 .../serial/serenum/serenum.c | 0 .../serial/serenum/serenum.h | 0 .../serial/serenum/serenum.rbuild | 0 .../serial/serenum/serenum.rc | 0 .../serial/serial/circularbuffer.c | 0 .../serial/serial/cleanup.c | 0 .../drivers => drivers}/serial/serial/close.c | 0 .../serial/serial/create.c | 0 .../serial/serial/devctrl.c | 0 .../drivers => drivers}/serial/serial/info.c | 0 .../serial/serial/legacy.c | 0 .../drivers => drivers}/serial/serial/misc.c | 0 .../drivers => drivers}/serial/serial/pnp.c | 0 .../drivers => drivers}/serial/serial/power.c | 0 .../drivers => drivers}/serial/serial/rw.c | 0 .../serial/serial/serial.c | 0 .../serial/serial/serial.h | 0 .../serial/serial/serial.rbuild | 0 .../serial/serial/serial.rc | 0 .../drivers => drivers}/setup/blue/blue.c | 0 .../drivers => drivers}/setup/blue/blue.h | 0 .../setup/blue/blue.rbuild | 0 .../drivers => drivers}/setup/blue/blue.rc | 0 .../drivers => drivers}/setup/blue/font.c | 0 .../setup/directory.rbuild | 0 .../storage/class/cdrom/cdrom.c | 0 .../storage/class/cdrom/cdrom.rbuild | 0 .../storage/class/cdrom/cdrom.rc | 0 .../storage/class/cdrom/findscsi.c | 0 .../storage/class/cdrom/license.txt | 0 .../storage/class/class2/class2.c | 0 .../storage/class/class2/class2.rbuild | 0 .../storage/class/class2/class2.rc | 0 .../storage/class/class2/class2.spec | 0 .../storage/class/class2/license.txt | 0 .../storage/class/directory.rbuild | 0 .../storage/class/disk/disk.c | 0 .../storage/class/disk/disk.rbuild | 0 .../storage/class/disk/disk.rc | 0 .../storage/class/disk/license.txt | 0 .../storage/class/include/class2.h | 0 .../storage/class/ramdisk/ramdisk.c | 0 .../storage/class/ramdisk/ramdisk.rbuild | 0 .../storage/class/ramdisk/ramdisk.rc | 0 .../storage/directory.rbuild | 0 .../storage/floppy/SOURCES | 0 .../storage/floppy/csqrtns.c | 0 .../storage/floppy/csqrtns.h | 0 .../storage/floppy/floppy.c | 0 .../storage/floppy/floppy.h | 0 .../storage/floppy/floppy.rbuild | 0 .../storage/floppy/floppy.rc | 0 .../storage/floppy/hardware.c | 0 .../storage/floppy/hardware.h | 0 .../storage/floppy/ioctl.c | 0 .../storage/floppy/ioctl.h | 0 .../storage/floppy/readwrite.c | 0 .../storage/floppy/readwrite.h | 0 .../storage/ide/atapi/atapi.c | 0 .../storage/ide/atapi/atapi.h | 0 .../storage/ide/atapi/atapi.rbuild | 0 .../storage/ide/atapi/atapi.rc | 0 .../storage/ide/atapi/license.txt | 0 .../storage/ide/directory.rbuild | 0 .../storage/ide/pciide/pciide.c | 0 .../storage/ide/pciide/pciide.h | 0 .../storage/ide/pciide/pciide.rbuild | 0 .../storage/ide/pciide/pciide.rc | 0 .../storage/ide/pciidex/fdo.c | 0 .../storage/ide/pciidex/miniport.c | 0 .../storage/ide/pciidex/misc.c | 0 .../storage/ide/pciidex/pciidex.c | 0 .../storage/ide/pciidex/pciidex.h | 0 .../storage/ide/pciidex/pciidex.rbuild | 0 .../storage/ide/pciidex/pciidex.rc | 0 .../storage/ide/pciidex/pciidex.spec | 0 .../storage/ide/pciidex/pdo.c | 0 .../storage/ide/uniata/atapi.h | 0 .../storage/ide/uniata/badblock.h | 0 .../storage/ide/uniata/bm_devs.h | 0 .../storage/ide/uniata/bsmaster.h | 0 .../storage/ide/uniata/config.h | 0 .../storage/ide/uniata/id_ata.cpp | 0 .../storage/ide/uniata/id_badblock.cpp | 0 .../storage/ide/uniata/id_dma.cpp | 0 .../storage/ide/uniata/id_init.cpp | 0 .../storage/ide/uniata/id_probe.cpp | 0 .../storage/ide/uniata/id_queue.cpp | 0 .../storage/ide/uniata/id_queue.h | 0 .../storage/ide/uniata/id_sata.cpp | 0 .../storage/ide/uniata/id_sata.h | 0 .../storage/ide/uniata/idedma.def | 0 .../storage/ide/uniata/idedma.rc | 0 .../storage/ide/uniata/inc/CrNtDecl.h | 0 .../storage/ide/uniata/inc/CrNtStubs.h | 0 .../storage/ide/uniata/inc/CrossNt.h | 0 .../storage/ide/uniata/inc/PostDbgMesg.h | 0 .../storage/ide/uniata/inc/misc.h | 0 .../storage/ide/uniata/inc/rwlock.h | 0 .../storage/ide/uniata/ntddk_ex.h | 0 .../storage/ide/uniata/ntddscsi.h | 0 .../storage/ide/uniata/ros_glue/ros_glue.cpp | 0 .../ide/uniata/ros_glue/ros_glue_asm.s | 0 .../storage/ide/uniata/scsi.h | 0 .../storage/ide/uniata/srb.h | 0 .../storage/ide/uniata/stdafx.h | 0 .../storage/ide/uniata/tools.h | 0 .../storage/ide/uniata/uata_ctl.h | 0 .../storage/ide/uniata/uniata.rbuild | 0 .../storage/ide/uniata/uniata_ver.h | 0 .../storage/port/buslogic/BT958.bmf | Bin .../storage/port/buslogic/BT958.mof | 0 .../storage/port/buslogic/BT958dt.h | 0 .../storage/port/buslogic/BusLogic958.c | 0 .../storage/port/buslogic/BusLogic958.h | 0 .../storage/port/buslogic/BusLogic958.rc | 0 .../storage/port/buslogic/Log.c | 0 .../storage/port/buslogic/Log.h | 0 .../storage/port/buslogic/README.ReactOS | 0 .../storage/port/buslogic/buslogic.rbuild | 0 .../storage/port/buslogic/makefile.inc | 0 .../storage/port/buslogic/makefile.original | 0 .../storage/port/buslogic/resource.h | 0 .../storage/port/buslogic/sources | 0 .../storage/port/buslogic/wmi.c | 0 .../storage/port/directory.rbuild | 0 .../storage/port/diskdump/diskdump.c | 0 .../storage/port/diskdump/diskdump.rbuild | 0 .../storage/port/diskdump/diskdump.rc | 0 .../storage/port/diskdump/diskdump.spec | 0 .../storage/port/diskdump/diskdump_helper.S | 0 .../storage/scsiport/scsiport.c | 0 .../storage/scsiport/scsiport.rbuild | 0 .../storage/scsiport/scsiport.rc | 0 .../storage/scsiport/scsiport.spec | 0 .../storage/scsiport/scsiport_int.h | 0 .../drivers => drivers}/usb/directory.rbuild | 0 .../usb/nt4compat/directory.rbuild | 0 .../usb/nt4compat/usbdriver/bulkonly.c | 0 .../usb/nt4compat/usbdriver/cbi.c | 0 .../usb/nt4compat/usbdriver/compdrv.c | 0 .../usb/nt4compat/usbdriver/debug.h | 0 .../usb/nt4compat/usbdriver/devmgr.c | 0 .../usb/nt4compat/usbdriver/devmgr.h | 0 .../usb/nt4compat/usbdriver/dmgrdisp.c | 0 .../usb/nt4compat/usbdriver/ehci.c | 0 .../usb/nt4compat/usbdriver/ehci.h | 0 .../usb/nt4compat/usbdriver/etd.c | 0 .../usb/nt4compat/usbdriver/events.h | 0 .../usb/nt4compat/usbdriver/gendrv.c | 0 .../usb/nt4compat/usbdriver/gendrv.h | 0 .../usb/nt4compat/usbdriver/hcd.h | 0 .../usb/nt4compat/usbdriver/hub.c | 0 .../usb/nt4compat/usbdriver/hub.h | 0 .../usb/nt4compat/usbdriver/irplist.h | 0 .../usb/nt4compat/usbdriver/mouse.c | 0 .../usb/nt4compat/usbdriver/mouse.h | 0 .../usb/nt4compat/usbdriver/ohci.c | 0 .../usb/nt4compat/usbdriver/ohci.h | 0 .../usb/nt4compat/usbdriver/roothub.c | 0 .../usb/nt4compat/usbdriver/td.c | 0 .../usb/nt4compat/usbdriver/td.h | 0 .../usb/nt4compat/usbdriver/uhci.c | 0 .../usb/nt4compat/usbdriver/uhciver.h | 0 .../usb/nt4compat/usbdriver/umss.c | 0 .../usb/nt4compat/usbdriver/umss.h | 0 .../usb/nt4compat/usbdriver/usb.c | 0 .../usb/nt4compat/usbdriver/usb.h | 0 .../usb/nt4compat/usbdriver/usbdriver.h | 0 .../usb/nt4compat/usbdriver/usbdriver.rbuild | 0 .../usb/nt4compat/usbdriver/usbdriver.rc | 0 {reactos/drivers => drivers}/usb/usbd/test.c | 0 {reactos/drivers => drivers}/usb/usbd/usbd.c | 0 .../drivers => drivers}/usb/usbd/usbd.rbuild | 0 {reactos/drivers => drivers}/usb/usbd/usbd.rc | 0 .../drivers => drivers}/usb/usbd/usbd.spec | 0 .../usb/usbhub/createclose.c | 0 {reactos/drivers => drivers}/usb/usbhub/fdo.c | 0 .../drivers => drivers}/usb/usbhub/misc.c | 0 {reactos/drivers => drivers}/usb/usbhub/pdo.c | 0 .../drivers => drivers}/usb/usbhub/usbhub.c | 0 .../drivers => drivers}/usb/usbhub/usbhub.h | 0 .../usb/usbhub/usbhub.rbuild | 0 .../drivers => drivers}/usb/usbhub/usbhub.rc | 0 .../drivers => drivers}/usb/usbstor/usbstor.c | 0 .../drivers => drivers}/usb/usbstor/usbstor.h | 0 .../usb/usbstor/usbstor.rbuild | 0 .../usb/usbstor/usbstor.rc | 0 .../video/directory.rbuild | 0 .../video/displays/directory.rbuild | 0 .../video/displays/framebuf/dd.c | 0 .../video/displays/framebuf/ddenable.c | 0 .../video/displays/framebuf/enable.c | 0 .../video/displays/framebuf/framebuf.h | 0 .../video/displays/framebuf/framebuf.rbuild | 0 .../video/displays/framebuf/framebuf.rc | 0 .../video/displays/framebuf/framebuf.spec | 0 .../video/displays/framebuf/palette.c | 0 .../video/displays/framebuf/pointer.c | 0 .../video/displays/framebuf/screen.c | 0 .../video/displays/framebuf/surface.c | 0 .../video/displays/framebufacc/dd.c | 0 .../video/displays/framebufacc/ddenable.c | 0 .../video/displays/framebufacc/enable.c | 0 .../video/displays/framebufacc/framebufacc.h | 0 .../displays/framebufacc/framebufacc.rbuild | 0 .../video/displays/framebufacc/framebufacc.rc | 0 .../displays/framebufacc/framebufacc.spec | 0 .../video/displays/framebufacc/palette.c | 0 .../video/displays/framebufacc/pointer.c | 0 .../video/displays/framebufacc/screen.c | 0 .../video/displays/framebufacc/surface.c | 0 .../video/displays/vga/main/enable.c | 0 .../video/displays/vga/objects/bitblt.c | 0 .../video/displays/vga/objects/bitblt.h | 0 .../video/displays/vga/objects/brush.h | 0 .../video/displays/vga/objects/copybits.c | 0 .../video/displays/vga/objects/lineto.c | 0 .../video/displays/vga/objects/offscreen.c | 0 .../video/displays/vga/objects/paint.c | 0 .../video/displays/vga/objects/pointer.c | 0 .../video/displays/vga/objects/screen.c | 0 .../video/displays/vga/objects/transblt.c | 0 .../video/displays/vga/vgaddi.h | 0 .../video/displays/vga/vgaddi.rbuild | 0 .../video/displays/vga/vgaddi.rc | 0 .../video/displays/vga/vgaddi.spec | 0 .../video/displays/vga/vgavideo/vgavideo.c | 0 .../video/displays/vga/vgavideo/vgavideo.h | 0 .../video/miniport/directory.rbuild | 0 .../video/miniport/vbe/edid.c | 0 .../video/miniport/vbe/vbemp.c | 0 .../video/miniport/vbe/vbemp.h | 0 .../video/miniport/vbe/vbemp.rbuild | 0 .../video/miniport/vbe/vbemp.rc | 0 .../video/miniport/vga/initvga.c | 0 .../video/miniport/vga/vgamp.c | 0 .../video/miniport/vga/vgamp.h | 0 .../video/miniport/vga/vgamp.rbuild | 0 .../video/miniport/vga/vgamp.rc | 0 .../video/miniport/vga/vgavideo.h | 0 .../video/miniport/xboxvmp/xboxvmp.c | 0 .../video/miniport/xboxvmp/xboxvmp.h | 0 .../video/miniport/xboxvmp/xboxvmp.rbuild | 0 .../video/miniport/xboxvmp/xboxvmp.rc | 0 .../drivers => drivers}/video/videoprt/agp.c | 0 .../drivers => drivers}/video/videoprt/ddc.c | 0 .../video/videoprt/dispatch.c | 0 .../drivers => drivers}/video/videoprt/dma.c | 0 .../video/videoprt/event.c | 0 .../video/videoprt/funclist.c | 0 .../video/videoprt/int10.c | 0 .../video/videoprt/interrupt.c | 0 .../video/videoprt/resource.c | 0 .../video/videoprt/services.c | 0 .../video/videoprt/spinlock.c | 0 .../video/videoprt/timer.c | 0 .../video/videoprt/videoprt.c | 0 .../video/videoprt/videoprt.h | 0 .../video/videoprt/videoprt.rbuild | 0 .../video/videoprt/videoprt.rc | 0 .../video/videoprt/videoprt.spec | 0 .../wdm/audio/backpln/directory.rbuild | 0 .../wdm/audio/backpln/portcls/Miniport.cpp | 0 .../audio/backpln/portcls/MiniportDMus.cpp | 0 .../audio/backpln/portcls/MiniportMidi.cpp | 0 .../backpln/portcls/MiniportTopology.cpp | 0 .../backpln/portcls/MiniportWaveCyclic.cpp | 0 .../audio/backpln/portcls/MiniportWavePci.cpp | 0 .../wdm/audio/backpln/portcls/Port.cpp | 0 .../wdm/audio/backpln/portcls/PortDMus.cpp | 0 .../wdm/audio/backpln/portcls/PortMidi.cpp | 0 .../audio/backpln/portcls/PortTopology.cpp | 0 .../audio/backpln/portcls/PortWaveCyclic.cpp | 0 .../wdm/audio/backpln/portcls/PortWavePci.cpp | 0 .../wdm/audio/backpln/portcls/ResourceList.c | 0 .../wdm/audio/backpln/portcls/adapter.c | 0 .../wdm/audio/backpln/portcls/dll.c | 0 .../wdm/audio/backpln/portcls/drm.c | 0 .../wdm/audio/backpln/portcls/irp.c | 0 .../backpln/portcls/miniport_factory.cpp | 0 .../wdm/audio/backpln/portcls/port.h | 0 .../wdm/audio/backpln/portcls/port_factory.c | 0 .../wdm/audio/backpln/portcls/portcls.rbuild | 0 .../wdm/audio/backpln/portcls}/portcls.rc | 0 .../wdm/audio/backpln/portcls/portcls.spec | 0 .../wdm/audio/backpln/portcls/private.h | 0 .../wdm/audio/backpln/portcls/stubs.c | 0 .../wdm/audio/backpln/portcls/undoc.c | 0 .../wdm/audio/backpln/stdunk/stdunk.c | 0 .../wdm/audio/backpln/stdunk/stdunk.cpp | 0 .../wdm/audio/directory.rbuild | 0 .../wdm/audio/drivers/CMIDriver/CHANGELOG.txt | 0 .../drivers/CMIDriver/CM8738-x32-WaveRT.inf | 0 .../audio/drivers/CMIDriver/CM8738-x32.inf | 0 .../drivers/CMIDriver/CM8738-x64-WaveRT.inf | 0 .../audio/drivers/CMIDriver/CM8738-x64.inf | 0 .../audio/drivers/CMIDriver/HowToBuild.txt | 0 .../wdm/audio/drivers/CMIDriver/adapter.cpp | 0 .../wdm/audio/drivers/CMIDriver/adapter.hpp | 0 .../wdm/audio/drivers/CMIDriver/build-all.bat | 0 .../CMIDriver/build-release-x64-WaveRT.bat | 0 .../drivers/CMIDriver/build-release-x64.bat | 0 .../CMIDriver/build-release-x86-WaveRT.bat | 0 .../drivers/CMIDriver/build-release-x86.bat | 0 .../drivers/CMIDriver/cmicontrol/main.cpp | 0 .../audio/drivers/CMIDriver/cmicontrol/main.h | 0 .../drivers/CMIDriver/cmicontrol/makefile | 0 .../drivers/CMIDriver/cmicontrol/resource.h | 0 .../drivers/CMIDriver/cmicontrol/sources | 0 .../drivers/CMIDriver/cmicontrol/window.aps | Bin .../drivers/CMIDriver/cmicontrol/window.ico | Bin .../cmicontrol/window.ico-license.txt | 0 .../drivers/CMIDriver/cmicontrol/window.rc | 0 .../wdm/audio/drivers/CMIDriver/cmipci.rc | 0 .../wdm/audio/drivers/CMIDriver/cmireg.hpp | 0 .../wdm/audio/drivers/CMIDriver/common.cpp | 0 .../wdm/audio/drivers/CMIDriver/common.hpp | 0 .../audio/drivers/CMIDriver/cpl/cmicpl.cpp | 0 .../audio/drivers/CMIDriver/cpl/cmicpl.def | 0 .../wdm/audio/drivers/CMIDriver/cpl/cmicpl.rc | 0 .../wdm/audio/drivers/CMIDriver/cpl/makefile | 0 .../audio/drivers/CMIDriver/cpl/resource.h | 0 .../wdm/audio/drivers/CMIDriver/cpl/sources | 0 .../wdm/audio/drivers/CMIDriver/debug.hpp | Bin .../wdm/audio/drivers/CMIDriver/distclean.bat | 0 .../wdm/audio/drivers/CMIDriver/envars.bat | 0 .../drivers/CMIDriver/installer/main.cpp | 0 .../audio/drivers/CMIDriver/installer/main.h | 0 .../drivers/CMIDriver/installer/makefile | 0 .../drivers/CMIDriver/installer/resource.h | 0 .../audio/drivers/CMIDriver/installer/sources | 0 .../drivers/CMIDriver/installer/window.rc | 0 .../audio/drivers/CMIDriver/interfaces.hpp | 0 .../wdm/audio/drivers/CMIDriver/make.bat | 0 .../wdm/audio/drivers/CMIDriver/makefile | 0 .../wdm/audio/drivers/CMIDriver/mintopo.cpp | 0 .../wdm/audio/drivers/CMIDriver/mintopo.hpp | 0 .../audio/drivers/CMIDriver/mintopotables.hpp | 0 .../wdm/audio/drivers/CMIDriver/minwave.cpp | 0 .../wdm/audio/drivers/CMIDriver/minwave.hpp | 0 .../audio/drivers/CMIDriver/minwavetables.hpp | 0 .../wdm/audio/drivers/CMIDriver/property.h | 0 .../wdm/audio/drivers/CMIDriver/sources | 0 .../wdm/audio/drivers/CMIDriver/update.bat | 0 .../wdm/audio/drivers/directory.rbuild | 0 .../wdm/audio/drivers/mpu401/adapter.cpp | 0 .../wdm/audio/drivers/mpu401/mpu401.rbuild | 0 .../wdm/audio/drivers/mpu401/mpu401.rc | 0 .../wdm/audio/drivers/sb16/adapter.cpp | 0 .../wdm/audio/drivers/sb16/main.cpp | 0 .../wdm/audio/drivers/sb16/sb16.h | 0 .../wdm/audio/drivers/sb16/sb16.rbuild | 0 .../wdm/audio/drivers/sb16/stdunk.cpp | 0 .../wdm/audio/drm/directory.rbuild | 0 .../wdm/audio/drm/drmk/drmk.rbuild | 0 .../wdm/audio/drm/drmk/drmk.rc | 0 .../wdm/audio/drm/drmk/drmk.spec | 0 .../wdm/audio/drm/drmk/stubs.cpp | 0 .../wdm/audio/legacy/directory.rbuild | 0 .../wdm/audio/legacy/wdmaud/entry.c | 0 .../wdm/audio/legacy/wdmaud/wdmaud.rbuild | 0 .../wdm/audio/sysaudio/main.c | 0 .../wdm/audio/sysaudio/sysaudio.rbuild | 0 .../wdm/audio/sysaudio/sysaudio.rc | 0 {reactos/drivers => drivers}/wdm/wdm.rbuild | 0 {reactos/drivers => drivers}/wmi/wmilib.c | 0 .../drivers => drivers}/wmi/wmilib.rbuild | 0 {reactos/drivers => drivers}/wmi/wmilib.rc | 0 {reactos/drivers => drivers}/wmi/wmilib.spec | 0 {reactos/hal => hal}/hal.rbuild | 0 {reactos/hal => hal}/hal/hal.c | 0 {reactos/hal => hal}/hal/hal.rbuild | 0 {reactos/hal => hal}/hal/hal.rc | 0 {reactos/hal => hal}/hal/hal.spec | 0 {reactos/hal => hal}/halarm/directory.rbuild | 0 .../hal => hal}/halarm/generic/generic.rbuild | 0 {reactos/hal => hal}/halarm/generic/hal.c | 0 {reactos/hal => hal}/halarm/include/hal.h | 0 {reactos/hal => hal}/halarm/include/halp.h | 0 {reactos/hal => hal}/halarm/up/halinit_up.c | 0 {reactos/hal => hal}/halarm/up/halup.rbuild | 0 {reactos/hal => hal}/halarm/up/halup.rc | 0 {reactos/hal => hal}/halppc/directory.rbuild | 0 {reactos/hal => hal}/halppc/generic/beep.c | 0 {reactos/hal => hal}/halppc/generic/bus.c | 0 {reactos/hal => hal}/halppc/generic/cmos.c | 0 {reactos/hal => hal}/halppc/generic/display.c | 0 {reactos/hal => hal}/halppc/generic/dma.c | 0 {reactos/hal => hal}/halppc/generic/drive.c | 0 {reactos/hal => hal}/halppc/generic/enum.c | 0 {reactos/hal => hal}/halppc/generic/fmutex.c | 0 {reactos/hal => hal}/halppc/generic/font.c | 0 .../hal => hal}/halppc/generic/generic.rbuild | 0 {reactos/hal => hal}/halppc/generic/halinit.c | 0 {reactos/hal => hal}/halppc/generic/irql.c | 0 {reactos/hal => hal}/halppc/generic/isa.c | 0 {reactos/hal => hal}/halppc/generic/misc.c | 0 {reactos/hal => hal}/halppc/generic/pci.c | 0 {reactos/hal => hal}/halppc/generic/portio.c | 0 .../hal => hal}/halppc/generic/processor.c | 0 {reactos/hal => hal}/halppc/generic/profil.c | 0 {reactos/hal => hal}/halppc/generic/reboot.c | 0 .../hal => hal}/halppc/generic/spinlock.c | 0 {reactos/hal => hal}/halppc/generic/sysinfo.c | 0 {reactos/hal => hal}/halppc/generic/timer.c | 0 {reactos/hal => hal}/halppc/include/apic.h | 0 {reactos/hal => hal}/halppc/include/bus.h | 0 {reactos/hal => hal}/halppc/include/hal.h | 0 {reactos/hal => hal}/halppc/include/haldma.h | 0 {reactos/hal => hal}/halppc/include/halirq.h | 0 {reactos/hal => hal}/halppc/include/halp.h | 0 {reactos/hal => hal}/halppc/include/ioapic.h | 0 {reactos/hal => hal}/halppc/include/mps.h | 0 {reactos/hal => hal}/halppc/up/halinit_up.c | 0 {reactos/hal => hal}/halppc/up/halup.rbuild | 0 {reactos/hal => hal}/halppc/up/halup.rc | 0 {reactos/hal => hal}/halx86/generic/beep.c | 0 {reactos/hal => hal}/halx86/generic/bios.c | 0 {reactos/hal => hal}/halx86/generic/bus.c | 0 {reactos/hal => hal}/halx86/generic/cmos.c | 0 {reactos/hal => hal}/halx86/generic/display.c | 0 {reactos/hal => hal}/halx86/generic/dma.c | 0 {reactos/hal => hal}/halx86/generic/drive.c | 0 .../hal => hal}/halx86/generic/generic.rbuild | 0 {reactos/hal => hal}/halx86/generic/halinit.c | 0 {reactos/hal => hal}/halx86/generic/irq.S | 0 {reactos/hal => hal}/halx86/generic/misc.c | 0 {reactos/hal => hal}/halx86/generic/pci.c | 0 {reactos/hal => hal}/halx86/generic/portio.c | 0 .../hal => hal}/halx86/generic/processor.c | 0 {reactos/hal => hal}/halx86/generic/profil.c | 0 {reactos/hal => hal}/halx86/generic/reboot.c | 0 .../hal => hal}/halx86/generic/spinlock.c | 0 {reactos/hal => hal}/halx86/generic/sysinfo.c | 0 .../hal => hal}/halx86/generic/systimer.S | 0 {reactos/hal => hal}/halx86/generic/timer.c | 0 {reactos/hal => hal}/halx86/generic/v86.s | 0 .../hal => hal}/halx86/hal_generic.rbuild | 0 .../hal => hal}/halx86/hal_generic_pc.rbuild | 0 .../hal => hal}/halx86/hal_generic_up.rbuild | 0 {reactos/hal => hal}/halx86/halmp.rbuild | 0 {reactos/hal => hal}/halx86/halup.rbuild | 0 {reactos/hal => hal}/halx86/halxbox.rbuild | 0 {reactos/hal => hal}/halx86/include/apic.h | 0 {reactos/hal => hal}/halx86/include/bus.h | 0 {reactos/hal => hal}/halx86/include/hal.h | 0 {reactos/hal => hal}/halx86/include/haldma.h | 0 {reactos/hal => hal}/halx86/include/halirq.h | 0 {reactos/hal => hal}/halx86/include/halp.h | 0 {reactos/hal => hal}/halx86/include/ioapic.h | 0 {reactos/hal => hal}/halx86/include/mps.h | 0 {reactos/hal => hal}/halx86/mp/apic.c | 0 {reactos/hal => hal}/halx86/mp/halinit_mp.c | 0 {reactos/hal => hal}/halx86/mp/halmp.rc | 0 {reactos/hal => hal}/halx86/mp/ioapic.c | 0 {reactos/hal => hal}/halx86/mp/ipi_mp.c | 0 {reactos/hal => hal}/halx86/mp/mpconfig.c | 0 {reactos/hal => hal}/halx86/mp/mps.S | 0 {reactos/hal => hal}/halx86/mp/mpsboot.asm | 0 {reactos/hal => hal}/halx86/mp/mpsirql.c | 0 {reactos/hal => hal}/halx86/mp/processor_mp.c | 0 {reactos/hal => hal}/halx86/mp/spinlock.c | 0 {reactos/hal => hal}/halx86/up/halinit_up.c | 0 {reactos/hal => hal}/halx86/up/halup.rc | 0 .../hal => hal}/halx86/xbox/halinit_xbox.c | 0 {reactos/hal => hal}/halx86/xbox/halxbox.h | 0 {reactos/hal => hal}/halx86/xbox/halxbox.rc | 0 {reactos/hal => hal}/halx86/xbox/part_xbox.c | 0 {reactos/include => include}/GL/gl.h | 0 {reactos/include => include}/GL/glext.h | 0 {reactos/include => include}/GL/glu.h | 0 {reactos/include => include}/crt/_mingw.h | 0 {reactos/include => include}/crt/assert.h | 0 {reactos/include => include}/crt/complex.h | 0 {reactos/include => include}/crt/conio.h | 0 {reactos/include => include}/crt/ctype.h | 0 {reactos/include => include}/crt/direct.h | 0 {reactos/include => include}/crt/dirent.h | 0 {reactos/include => include}/crt/dos.h | 0 {reactos/include => include}/crt/errno.h | 0 {reactos/include => include}/crt/excpt.h | 0 {reactos/include => include}/crt/fcntl.h | 0 {reactos/include => include}/crt/fenv.h | 0 {reactos/include => include}/crt/float.h | 0 {reactos/include => include}/crt/getopt.h | 0 {reactos/include => include}/crt/inttypes.h | 0 {reactos/include => include}/crt/io.h | 0 {reactos/include => include}/crt/libgen.h | 0 {reactos/include => include}/crt/limits.h | 0 {reactos/include => include}/crt/locale.h | 0 {reactos/include => include}/crt/malloc.h | 0 {reactos/include => include}/crt/math.h | 0 {reactos/include => include}/crt/mbctype.h | 0 {reactos/include => include}/crt/mbstring.h | 0 {reactos/include => include}/crt/mem.h | 0 {reactos/include => include}/crt/memory.h | 0 .../include => include}/crt/mingw32/float.h | 0 .../include => include}/crt/mingw32/stdarg.h | 0 .../include => include}/crt/mingw32/stdbool.h | 0 .../include => include}/crt/mingw32/stddef.h | 0 {reactos/include => include}/crt/process.h | 0 {reactos/include => include}/crt/search.h | 0 {reactos/include => include}/crt/setjmp.h | 0 {reactos/include => include}/crt/share.h | 0 {reactos/include => include}/crt/signal.h | 0 {reactos/include => include}/crt/stdint.h | 0 {reactos/include => include}/crt/stdio.h | 0 {reactos/include => include}/crt/stdlib.h | 0 {reactos/include => include}/crt/string.h | 0 {reactos/include => include}/crt/strings.h | 0 {reactos/include => include}/crt/sys/fcntl.h | 0 {reactos/include => include}/crt/sys/file.h | 0 .../include => include}/crt/sys/locking.h | 0 {reactos/include => include}/crt/sys/param.h | 0 {reactos/include => include}/crt/sys/stat.h | 0 {reactos/include => include}/crt/sys/time.h | 0 {reactos/include => include}/crt/sys/timeb.h | 0 {reactos/include => include}/crt/sys/types.h | 0 {reactos/include => include}/crt/sys/unistd.h | 0 {reactos/include => include}/crt/sys/utime.h | 0 {reactos/include => include}/crt/time.h | 0 {reactos/include => include}/crt/unistd.h | 0 {reactos/include => include}/crt/utime.h | 0 {reactos/include => include}/crt/wchar.h | 0 {reactos/include => include}/crt/wctype.h | 0 {reactos/include => include}/ddk/afilter.h | 0 {reactos/include => include}/ddk/amtvuids.h | 0 {reactos/include => include}/ddk/atm.h | 0 {reactos/include => include}/ddk/atsmedia.h | 0 {reactos/include => include}/ddk/batclass.h | 0 {reactos/include => include}/ddk/cfg.h | 0 {reactos/include => include}/ddk/cfgmgr32.h | 0 {reactos/include => include}/ddk/compstui.h | 0 {reactos/include => include}/ddk/csq.h | 0 {reactos/include => include}/ddk/d3dhal.h | 0 {reactos/include => include}/ddk/d3dhalex.h | 0 {reactos/include => include}/ddk/d3dnthal.h | 0 {reactos/include => include}/ddk/d4drvif.h | 0 {reactos/include => include}/ddk/d4iface.h | 0 {reactos/include => include}/ddk/dciddi.h | 0 {reactos/include => include}/ddk/dderror.h | 0 {reactos/include => include}/ddk/ddkernel.h | 0 {reactos/include => include}/ddk/ddkmapi.h | 0 {reactos/include => include}/ddk/ddrawi.h | 0 {reactos/include => include}/ddk/ddrawint.h | 0 {reactos/include => include}/ddk/diskguid.h | 0 {reactos/include => include}/ddk/dmemmgr.h | 0 {reactos/include => include}/ddk/drivinit.h | 0 {reactos/include => include}/ddk/drmk.h | 0 {reactos/include => include}/ddk/dvp.h | 0 {reactos/include => include}/ddk/dxapi.h | 0 {reactos/include => include}/ddk/fltsafe.h | 0 {reactos/include => include}/ddk/hidclass.h | 0 {reactos/include => include}/ddk/hidpi.h | 0 {reactos/include => include}/ddk/hidusage.h | 0 {reactos/include => include}/ddk/ide.h | 0 {reactos/include => include}/ddk/ieverp.h | 0 {reactos/include => include}/ddk/imm.h | 0 {reactos/include => include}/ddk/ioaccess.h | 0 {reactos/include => include}/ddk/isguids.h | 0 {reactos/include => include}/ddk/kbdmou.h | 0 {reactos/include => include}/ddk/kcom.h | 0 {reactos/include => include}/ddk/ksdebug.h | 0 {reactos/include => include}/ddk/ksuuids.h | 0 {reactos/include => include}/ddk/lmon.h | 0 {reactos/include => include}/ddk/mcd.h | 0 {reactos/include => include}/ddk/miniport.h | 0 {reactos/include => include}/ddk/minitape.h | 0 {reactos/include => include}/ddk/mountdev.h | 0 {reactos/include => include}/ddk/mountmgr.h | 0 {reactos/include => include}/ddk/ndis.h | 0 {reactos/include => include}/ddk/ndisguid.h | 0 {reactos/include => include}/ddk/ndistapi.h | 0 {reactos/include => include}/ddk/ndiswan.h | 0 {reactos/include => include}/ddk/netevent.h | 0 {reactos/include => include}/ddk/netpnp.h | 0 {reactos/include => include}/ddk/nettypes.h | 0 {reactos/include => include}/ddk/newdev.h | 0 {reactos/include => include}/ddk/ntagp.h | 0 {reactos/include => include}/ddk/ntdd1394.h | 0 {reactos/include => include}/ddk/ntdd1934.h | 0 {reactos/include => include}/ddk/ntdd8042.h | 0 {reactos/include => include}/ddk/ntddbeep.h | 0 {reactos/include => include}/ddk/ntddcdrm.h | 0 {reactos/include => include}/ddk/ntddcdvd.h | 0 {reactos/include => include}/ddk/ntddchgr.h | 0 {reactos/include => include}/ddk/ntdddisk.h | 0 {reactos/include => include}/ddk/ntddft.h | 0 {reactos/include => include}/ddk/ntddk.h | 0 {reactos/include => include}/ddk/ntddkbd.h | 0 {reactos/include => include}/ddk/ntddmou.h | 0 {reactos/include => include}/ddk/ntddndis.h | 0 {reactos/include => include}/ddk/ntddpar.h | 0 {reactos/include => include}/ddk/ntddpcm.h | 0 {reactos/include => include}/ddk/ntddscsi.h | 0 {reactos/include => include}/ddk/ntddser.h | 0 {reactos/include => include}/ddk/ntddstor.h | 0 {reactos/include => include}/ddk/ntddtape.h | 0 {reactos/include => include}/ddk/ntddtdi.h | 0 {reactos/include => include}/ddk/ntddvdeo.h | 0 {reactos/include => include}/ddk/ntddvol.h | 0 {reactos/include => include}/ddk/ntifs.h | 0 {reactos/include => include}/ddk/ntnls.h | 0 {reactos/include => include}/ddk/ntpoapi.h | 0 {reactos/include => include}/ddk/ntstatus.h | 0 {reactos/include => include}/ddk/ntstrsafe.h | 0 {reactos/include => include}/ddk/objerror.h | 0 {reactos/include => include}/ddk/oprghdlr.h | 0 {reactos/include => include}/ddk/parallel.h | 0 {reactos/include => include}/ddk/pfhook.h | 0 {reactos/include => include}/ddk/poclass.h | 0 {reactos/include => include}/ddk/polarity.h | 0 {reactos/include => include}/ddk/portcls.h | 0 {reactos/include => include}/ddk/prntfont.h | 0 {reactos/include => include}/ddk/punknown.h | 0 {reactos/include => include}/ddk/scsi.h | 0 {reactos/include => include}/ddk/scsiscan.h | 0 {reactos/include => include}/ddk/scsiwmi.h | 0 {reactos/include => include}/ddk/smbus.h | 0 {reactos/include => include}/ddk/srb.h | 0 {reactos/include => include}/ddk/stdunk.h | 0 {reactos/include => include}/ddk/stierr.h | 0 {reactos/include => include}/ddk/stireg.h | 0 {reactos/include => include}/ddk/storport.h | 0 {reactos/include => include}/ddk/tdi.h | 0 {reactos/include => include}/ddk/tdiinfo.h | 0 {reactos/include => include}/ddk/tdikrnl.h | 0 {reactos/include => include}/ddk/tdistat.h | 0 {reactos/include => include}/ddk/tvout.h | 0 {reactos/include => include}/ddk/unknown.h | 0 {reactos/include => include}/ddk/upssvc.h | 0 {reactos/include => include}/ddk/usb.h | 0 {reactos/include => include}/ddk/usb100.h | 0 {reactos/include => include}/ddk/usb200.h | 0 {reactos/include => include}/ddk/usbcamdi.h | 0 {reactos/include => include}/ddk/usbdi.h | 0 {reactos/include => include}/ddk/usbioctl.h | 0 {reactos/include => include}/ddk/usbiodef.h | 0 {reactos/include => include}/ddk/usbkern.h | 0 {reactos/include => include}/ddk/usbprint.h | 0 {reactos/include => include}/ddk/usbscan.h | 0 {reactos/include => include}/ddk/usbuser.h | 0 {reactos/include => include}/ddk/video.h | 0 {reactos/include => include}/ddk/videoagp.h | 0 {reactos/include => include}/ddk/warning.h | 0 {reactos/include => include}/ddk/wdm.h | 0 {reactos/include => include}/ddk/wdmguid.h | 0 {reactos/include => include}/ddk/win2k.h | 0 {reactos/include => include}/ddk/winddi.h | 0 {reactos/include => include}/ddk/winddk.h | 0 {reactos/include => include}/ddk/winnt4.h | 0 {reactos/include => include}/ddk/winxp.h | 0 {reactos/include => include}/ddk/ws2san.h | 0 {reactos/include => include}/ddk/xfilter.h | 0 {reactos/include => include}/ddk/xmldsodid.h | 0 {reactos/include => include}/directory.rbuild | 0 {reactos/include => include}/dxsdk/Iwstdec.h | 0 {reactos/include => include}/dxsdk/activecf.h | 0 {reactos/include => include}/dxsdk/amaudio.h | 0 {reactos/include => include}/dxsdk/amparse.h | 0 .../include => include}/dxsdk/amstream.idl | 0 {reactos/include => include}/dxsdk/amva.h | 0 {reactos/include => include}/dxsdk/amvideo.h | 0 {reactos/include => include}/dxsdk/atsmedia.h | 0 {reactos/include => include}/dxsdk/audevcod.h | 0 .../include => include}/dxsdk/austream.idl | 0 {reactos/include => include}/dxsdk/aviriff.h | 0 {reactos/include => include}/dxsdk/axcore.idl | 0 .../include => include}/dxsdk/axextend.idl | 0 {reactos/include => include}/dxsdk/bdatypes.h | 0 {reactos/include => include}/dxsdk/comlite.h | 0 {reactos/include => include}/dxsdk/d3d8caps.h | 0 {reactos/include => include}/dxsdk/d3d9caps.h | 0 {reactos/include => include}/dxsdk/d3dcaps.h | 0 {reactos/include => include}/dxsdk/d3drmwin.h | 0 {reactos/include => include}/dxsdk/d3dvec.inl | 0 {reactos/include => include}/dxsdk/d3dx9.h | 0 .../include => include}/dxsdk/d3dx9shape.h | 0 {reactos/include => include}/dxsdk/d3dx9xof.h | 0 {reactos/include => include}/dxsdk/ddraw.h | 0 {reactos/include => include}/dxsdk/ddrawex.h | 0 .../include => include}/dxsdk/ddstream.idl | 0 .../include => include}/dxsdk/devenum.idl | 0 {reactos/include => include}/dxsdk/dls1.h | 0 {reactos/include => include}/dxsdk/dls2.h | 0 {reactos/include => include}/dxsdk/dmdls.h | 0 {reactos/include => include}/dxsdk/dmksctrl.h | 0 {reactos/include => include}/dxsdk/dmo.h | 0 .../include => include}/dxsdk/dmodshow.idl | 0 {reactos/include => include}/dxsdk/dmoreg.h | 0 {reactos/include => include}/dxsdk/dmort.h | 0 {reactos/include => include}/dxsdk/dmusbuff.h | 0 {reactos/include => include}/dxsdk/dmusics.h | 0 {reactos/include => include}/dxsdk/dsconf.h | 0 {reactos/include => include}/dxsdk/dsetup.h | 0 {reactos/include => include}/dxsdk/dshow.h | 0 .../include => include}/dxsdk/dshowasf.idl | 0 {reactos/include => include}/dxsdk/dv.h | 0 {reactos/include => include}/dxsdk/dx7todx8.h | 0 {reactos/include => include}/dxsdk/dxdiag.h | 0 {reactos/include => include}/dxsdk/dxerr8.h | 0 {reactos/include => include}/dxsdk/dxerr9.h | 0 {reactos/include => include}/dxsdk/dxfile.h | 0 .../include => include}/dxsdk/dxsdk.rbuild | 0 {reactos/include => include}/dxsdk/dxsdkver.h | 0 .../include => include}/dxsdk/dyngraph.idl | 0 {reactos/include => include}/dxsdk/errors.h | 0 {reactos/include => include}/dxsdk/evcode.h | 0 {reactos/include => include}/dxsdk/il21dec.h | 0 {reactos/include => include}/dxsdk/ksguid.h | 0 {reactos/include => include}/dxsdk/ksuuids.h | 0 {reactos/include => include}/dxsdk/mediaerr.h | 0 .../include => include}/dxsdk/mediaobj.idl | 0 .../include => include}/dxsdk/medparam.idl | 0 .../include => include}/dxsdk/mixerocx.idl | 0 .../include => include}/dxsdk/mmstream.idl | 0 {reactos/include => include}/dxsdk/mpconfig.h | 0 .../include => include}/dxsdk/mpeg2bits.h | 0 .../include => include}/dxsdk/mpeg2error.h | 0 {reactos/include => include}/dxsdk/mpegtype.h | 0 .../include => include}/dxsdk/pixplugin.h | 0 {reactos/include => include}/dxsdk/qedit.idl | 0 {reactos/include => include}/dxsdk/regbag.idl | 0 {reactos/include => include}/dxsdk/rmxfguid.h | 0 {reactos/include => include}/dxsdk/strmif.idl | 0 .../include => include}/dxsdk/tvratings.idl | 0 {reactos/include => include}/dxsdk/uuids.h | 0 {reactos/include => include}/dxsdk/vidcap.idl | 0 .../include => include}/dxsdk/videoacc.idl | 0 .../include => include}/dxsdk/vmrender.idl | 0 {reactos/include => include}/dxsdk/vpconfig.h | 0 {reactos/include => include}/dxsdk/vpnotify.h | 0 {reactos/include => include}/dxsdk/vptype.h | 0 {reactos/include => include}/host/nls.h | 0 {reactos/include => include}/host/poppack.h | 0 {reactos/include => include}/host/pshpack1.h | 0 {reactos/include => include}/host/pshpack2.h | 0 {reactos/include => include}/host/pshpack4.h | 0 {reactos/include => include}/host/pshpack8.h | 0 {reactos/include => include}/host/pshpck16.h | 0 {reactos/include => include}/host/typedefs.h | 0 {reactos/include => include}/host/wcsfuncs.h | 0 .../include => include}/ndk/arch/ketypes.h | 0 .../include => include}/ndk/arch/mmtypes.h | 0 .../include => include}/ndk/arm/ketypes.h | 0 .../include => include}/ndk/arm/mmtypes.h | 0 {reactos/include => include}/ndk/asm.h | 0 {reactos/include => include}/ndk/cctypes.h | 0 {reactos/include => include}/ndk/cmfuncs.h | 0 {reactos/include => include}/ndk/cmtypes.h | 0 {reactos/include => include}/ndk/dbgkfuncs.h | 0 {reactos/include => include}/ndk/dbgktypes.h | 0 {reactos/include => include}/ndk/exfuncs.h | 0 {reactos/include => include}/ndk/extypes.h | 0 {reactos/include => include}/ndk/halfuncs.h | 0 {reactos/include => include}/ndk/haltypes.h | 0 .../include => include}/ndk/i386/ketypes.h | 0 .../include => include}/ndk/i386/mmtypes.h | 0 {reactos/include => include}/ndk/ifssupp.h | 0 {reactos/include => include}/ndk/inbvfuncs.h | 0 {reactos/include => include}/ndk/inbvtypes.h | 0 {reactos/include => include}/ndk/iofuncs.h | 0 {reactos/include => include}/ndk/iotypes.h | 0 {reactos/include => include}/ndk/kdfuncs.h | 0 {reactos/include => include}/ndk/kdtypes.h | 0 {reactos/include => include}/ndk/kefuncs.h | 0 {reactos/include => include}/ndk/ketypes.h | 0 {reactos/include => include}/ndk/ldrfuncs.h | 0 {reactos/include => include}/ndk/ldrtypes.h | 0 {reactos/include => include}/ndk/lpcfuncs.h | 0 {reactos/include => include}/ndk/lpctypes.h | 0 {reactos/include => include}/ndk/mmfuncs.h | 0 {reactos/include => include}/ndk/mmtypes.h | 0 {reactos/include => include}/ndk/ntndk.h | 0 {reactos/include => include}/ndk/obfuncs.h | 0 {reactos/include => include}/ndk/obtypes.h | 0 {reactos/include => include}/ndk/pofuncs.h | 0 {reactos/include => include}/ndk/potypes.h | 0 .../include => include}/ndk/powerpc/ketypes.h | 0 .../include => include}/ndk/powerpc/mmtypes.h | 0 {reactos/include => include}/ndk/psfuncs.h | 0 {reactos/include => include}/ndk/pstypes.h | 0 {reactos/include => include}/ndk/readme.txt | 0 {reactos/include => include}/ndk/rtlfuncs.h | 0 {reactos/include => include}/ndk/rtltypes.h | 0 {reactos/include => include}/ndk/sefuncs.h | 0 {reactos/include => include}/ndk/setypes.h | 0 {reactos/include => include}/ndk/umfuncs.h | 0 {reactos/include => include}/ndk/umtypes.h | 0 .../include => include}/psdk/README.w32api | 0 {reactos/include => include}/psdk/accctrl.h | 0 {reactos/include => include}/psdk/aclapi.h | 0 {reactos/include => include}/psdk/aclui.h | 0 .../include => include}/psdk/activaut.idl | 0 .../include => include}/psdk/activdbg.idl | 0 .../include => include}/psdk/activscp.idl | 0 {reactos/include => include}/psdk/adshlp.h | 0 {reactos/include => include}/psdk/advpub.h | 0 {reactos/include => include}/psdk/af_irda.h | 0 {reactos/include => include}/psdk/afxres.h | 0 {reactos/include => include}/psdk/appmgmt.h | 0 {reactos/include => include}/psdk/authz.h | 0 {reactos/include => include}/psdk/basetsd.h | 0 {reactos/include => include}/psdk/basetyps.h | 0 {reactos/include => include}/psdk/bcrypt.h | 0 {reactos/include => include}/psdk/cderr.h | 0 {reactos/include => include}/psdk/cguid.h | 0 {reactos/include => include}/psdk/clusapi.h | 0 {reactos/include => include}/psdk/comcat.idl | 0 {reactos/include => include}/psdk/commctrl.h | 0 {reactos/include => include}/psdk/commdlg.h | 0 {reactos/include => include}/psdk/common.ver | 0 {reactos/include => include}/psdk/control.idl | 0 {reactos/include => include}/psdk/cor.h | 0 {reactos/include => include}/psdk/corerror.h | 0 {reactos/include => include}/psdk/corhdr.h | 0 {reactos/include => include}/psdk/cpl.h | 0 {reactos/include => include}/psdk/cplext.h | 0 .../include => include}/psdk/cryptuiapi.h | 0 {reactos/include => include}/psdk/custcntl.h | 0 {reactos/include => include}/psdk/cvconst.h | 0 {reactos/include => include}/psdk/d3d.h | 0 {reactos/include => include}/psdk/d3d8.h | 0 {reactos/include => include}/psdk/d3d8types.h | 0 {reactos/include => include}/psdk/d3d9.h | 0 {reactos/include => include}/psdk/d3d9types.h | 0 {reactos/include => include}/psdk/d3drm.h | 0 {reactos/include => include}/psdk/d3drmdef.h | 0 {reactos/include => include}/psdk/d3dtypes.h | 0 {reactos/include => include}/psdk/d3dx8core.h | 0 {reactos/include => include}/psdk/dbghelp.h | 0 {reactos/include => include}/psdk/dbinit.idl | 0 {reactos/include => include}/psdk/dbprop.idl | 0 {reactos/include => include}/psdk/dbs.idl | 0 {reactos/include => include}/psdk/dbt.h | 0 {reactos/include => include}/psdk/dciddi.h | 0 {reactos/include => include}/psdk/dciman.h | 0 {reactos/include => include}/psdk/dde.h | 0 {reactos/include => include}/psdk/ddeml.h | 0 {reactos/include => include}/psdk/ddrawgdi.h | 0 {reactos/include => include}/psdk/devenum.idl | 0 {reactos/include => include}/psdk/devguid.h | 0 {reactos/include => include}/psdk/dhcpcapi.h | 0 {reactos/include => include}/psdk/dhcpcsdk.h | 0 {reactos/include => include}/psdk/digitalv.h | 0 {reactos/include => include}/psdk/dimm.idl | 0 {reactos/include => include}/psdk/dinput.h | 0 {reactos/include => include}/psdk/dispex.idl | 0 {reactos/include => include}/psdk/dlgs.h | 0 {reactos/include => include}/psdk/docobj.idl | 0 .../include => include}/psdk/downloadmgr.idl | 0 {reactos/include => include}/psdk/dplay.h | 0 {reactos/include => include}/psdk/dplobby.h | 0 {reactos/include => include}/psdk/dsdriver.h | 0 {reactos/include => include}/psdk/dsgetdc.h | 0 {reactos/include => include}/psdk/dsound.h | 0 {reactos/include => include}/psdk/dsrole.h | 0 {reactos/include => include}/psdk/dvdevcod.h | 0 {reactos/include => include}/psdk/dvdmedia.h | 0 .../include => include}/psdk/dyngraph.idl | 0 {reactos/include => include}/psdk/edevdefs.h | 0 {reactos/include => include}/psdk/errorrep.h | 0 {reactos/include => include}/psdk/evntrace.h | 0 {reactos/include => include}/psdk/exdisp.idl | 0 {reactos/include => include}/psdk/exdispid.h | 0 {reactos/include => include}/psdk/fci.h | 0 {reactos/include => include}/psdk/fdi.h | 0 {reactos/include => include}/psdk/fusion.idl | 0 {reactos/include => include}/psdk/gdiplus.h | 0 .../include => include}/psdk/gdiplusbase.h | 0 .../include => include}/psdk/gdiplusbrush.h | 0 .../include => include}/psdk/gdipluscolor.h | 0 .../psdk/gdipluscolormatrix.h | 0 .../include => include}/psdk/gdipluseffects.h | 0 .../include => include}/psdk/gdiplusenums.h | 0 .../include => include}/psdk/gdiplusflat.h | 0 .../include => include}/psdk/gdiplusgpstubs.h | 0 .../psdk/gdiplusgraphics.h | 0 .../include => include}/psdk/gdiplusheaders.h | 0 .../psdk/gdiplusimageattributes.h | 0 .../include => include}/psdk/gdiplusimaging.h | 0 .../include => include}/psdk/gdiplusinit.h | 0 .../psdk/gdipluslinecaps.h | 0 .../include => include}/psdk/gdiplusmatrix.h | 0 .../include => include}/psdk/gdiplusmem.h | 0 .../psdk/gdiplusmetafile.h | 0 .../psdk/gdiplusmetaheader.h | 0 .../include => include}/psdk/gdipluspath.h | 0 .../include => include}/psdk/gdipluspen.h | 0 .../psdk/gdipluspixelformats.h | 0 .../psdk/gdiplusstringformat.h | 0 .../include => include}/psdk/gdiplustypes.h | 0 {reactos/include => include}/psdk/guiddef.h | 0 {reactos/include => include}/psdk/hlguids.h | 0 {reactos/include => include}/psdk/hlink.idl | 0 .../include => include}/psdk/htiframe.idl | 0 {reactos/include => include}/psdk/htmlhelp.h | 0 {reactos/include => include}/psdk/httpext.h | 0 .../include => include}/psdk/i_cryptasn1tls.h | 0 {reactos/include => include}/psdk/iads.idl | 0 {reactos/include => include}/psdk/icm.h | 0 {reactos/include => include}/psdk/icmpapi.h | 0 {reactos/include => include}/psdk/idispids.h | 0 {reactos/include => include}/psdk/idndl.h | 0 {reactos/include => include}/psdk/imagehlp.h | 0 {reactos/include => include}/psdk/imm.h | 0 {reactos/include => include}/psdk/imnact.idl | 0 .../include => include}/psdk/imnxport.idl | 0 {reactos/include => include}/psdk/in6addr.h | 0 {reactos/include => include}/psdk/inaddr.h | 0 .../include => include}/psdk/indexsrv.idl | 0 {reactos/include => include}/psdk/initguid.h | 0 {reactos/include => include}/psdk/intrin.h | 0 .../include => include}/psdk/intrin_arm.h | 0 .../include => include}/psdk/intrin_ppc.h | 0 .../include => include}/psdk/intrin_x86.h | 0 .../include => include}/psdk/intrin_x86_64.h | 0 {reactos/include => include}/psdk/intshcut.h | 0 {reactos/include => include}/psdk/ipexport.h | 0 {reactos/include => include}/psdk/iphlpapi.h | 0 {reactos/include => include}/psdk/ipifcons.h | 0 {reactos/include => include}/psdk/iprtrmib.h | 0 {reactos/include => include}/psdk/iptypes.h | 0 {reactos/include => include}/psdk/isguids.h | 0 {reactos/include => include}/psdk/ks.h | 0 {reactos/include => include}/psdk/ksmedia.h | 0 {reactos/include => include}/psdk/largeint.h | 0 {reactos/include => include}/psdk/lm.h | 0 {reactos/include => include}/psdk/lmaccess.h | 0 {reactos/include => include}/psdk/lmalert.h | 0 {reactos/include => include}/psdk/lmapibuf.h | 0 {reactos/include => include}/psdk/lmat.h | 0 {reactos/include => include}/psdk/lmaudit.h | 0 {reactos/include => include}/psdk/lmchdev.h | 0 {reactos/include => include}/psdk/lmconfig.h | 0 {reactos/include => include}/psdk/lmcons.h | 0 {reactos/include => include}/psdk/lmerr.h | 0 {reactos/include => include}/psdk/lmerrlog.h | 0 {reactos/include => include}/psdk/lmjoin.h | 0 {reactos/include => include}/psdk/lmmsg.h | 0 {reactos/include => include}/psdk/lmremutl.h | 0 {reactos/include => include}/psdk/lmrepl.h | 0 {reactos/include => include}/psdk/lmserver.h | 0 {reactos/include => include}/psdk/lmshare.h | 0 {reactos/include => include}/psdk/lmsname.h | 0 {reactos/include => include}/psdk/lmstats.h | 0 {reactos/include => include}/psdk/lmsvc.h | 0 {reactos/include => include}/psdk/lmuse.h | 0 {reactos/include => include}/psdk/lmuseflg.h | 0 {reactos/include => include}/psdk/lmwksta.h | 0 {reactos/include => include}/psdk/lzexpand.h | 0 {reactos/include => include}/psdk/mapi.h | 0 {reactos/include => include}/psdk/mapicode.h | 0 {reactos/include => include}/psdk/mapidefs.h | 0 {reactos/include => include}/psdk/mapiform.h | 0 {reactos/include => include}/psdk/mapiguid.h | 0 {reactos/include => include}/psdk/mapitags.h | 0 {reactos/include => include}/psdk/mapiutil.h | 0 {reactos/include => include}/psdk/mapival.h | 0 {reactos/include => include}/psdk/mapix.h | 0 {reactos/include => include}/psdk/mciavi.h | 0 {reactos/include => include}/psdk/mcx.h | 0 {reactos/include => include}/psdk/mgmtapi.h | 0 {reactos/include => include}/psdk/midles.h | 0 .../include => include}/psdk/mimeinfo.idl | 0 {reactos/include => include}/psdk/mimeole.idl | 0 {reactos/include => include}/psdk/mlang.idl | 0 {reactos/include => include}/psdk/mmddk.h | 0 {reactos/include => include}/psdk/mmreg.h | 0 {reactos/include => include}/psdk/mmsystem.h | 0 {reactos/include => include}/psdk/mprapi.h | 0 {reactos/include => include}/psdk/msacm.h | 0 {reactos/include => include}/psdk/mscat.h | 0 {reactos/include => include}/psdk/mscoree.idl | 0 {reactos/include => include}/psdk/mshtmcid.h | 0 {reactos/include => include}/psdk/mshtmdid.h | 0 .../include => include}/psdk/mshtmhst.idl | 0 {reactos/include => include}/psdk/mshtml.idl | 0 {reactos/include => include}/psdk/msi.h | 0 {reactos/include => include}/psdk/msidefs.h | 0 {reactos/include => include}/psdk/msiquery.h | 0 {reactos/include => include}/psdk/mssip.h | 0 {reactos/include => include}/psdk/mstask.idl | 0 {reactos/include => include}/psdk/mswsock.h | 0 {reactos/include => include}/psdk/msxml.idl | 0 {reactos/include => include}/psdk/msxml2.idl | 0 {reactos/include => include}/psdk/msxml2did.h | 0 {reactos/include => include}/psdk/msxmldid.h | 0 {reactos/include => include}/psdk/multimon.h | 0 {reactos/include => include}/psdk/nb30.h | 0 {reactos/include => include}/psdk/nddeapi.h | 0 {reactos/include => include}/psdk/ndrtypes.h | 0 {reactos/include => include}/psdk/netcfgn.h | 0 {reactos/include => include}/psdk/netcfgx.h | 0 {reactos/include => include}/psdk/netcon.h | 0 {reactos/include => include}/psdk/newdev.h | 0 {reactos/include => include}/psdk/npapi.h | 0 {reactos/include => include}/psdk/nspapi.h | 0 {reactos/include => include}/psdk/ntdef.h | 0 {reactos/include => include}/psdk/ntdll.h | 0 {reactos/include => include}/psdk/ntdsapi.h | 0 {reactos/include => include}/psdk/ntgdi.h | 0 {reactos/include => include}/psdk/ntldap.h | 0 {reactos/include => include}/psdk/ntquery.h | 0 {reactos/include => include}/psdk/ntsecapi.h | 0 {reactos/include => include}/psdk/ntsecpkg.h | 0 {reactos/include => include}/psdk/ntstatus.h | 0 {reactos/include => include}/psdk/ntverp.h | 0 {reactos/include => include}/psdk/oaidl.idl | 0 {reactos/include => include}/psdk/objbase.h | 0 {reactos/include => include}/psdk/objfwd.h | 0 {reactos/include => include}/psdk/objidl.idl | 0 {reactos/include => include}/psdk/objsafe.idl | 0 {reactos/include => include}/psdk/objsel.h | 0 {reactos/include => include}/psdk/ocidl.idl | 0 {reactos/include => include}/psdk/ocmm.idl | 0 {reactos/include => include}/psdk/odbcinst.h | 0 {reactos/include => include}/psdk/ole.h | 0 {reactos/include => include}/psdk/ole2.h | 0 {reactos/include => include}/psdk/ole2ver.h | 0 {reactos/include => include}/psdk/oleacc.h | 0 {reactos/include => include}/psdk/oleacc.idl | 0 {reactos/include => include}/psdk/oleauto.h | 0 {reactos/include => include}/psdk/olectl.h | 0 {reactos/include => include}/psdk/olectlid.h | 0 {reactos/include => include}/psdk/oledb.idl | 0 {reactos/include => include}/psdk/oledlg.h | 0 {reactos/include => include}/psdk/oleidl.idl | 0 {reactos/include => include}/psdk/optary.idl | 0 {reactos/include => include}/psdk/pbt.h | 0 {reactos/include => include}/psdk/pdh.h | 0 {reactos/include => include}/psdk/pdhmsg.h | 0 {reactos/include => include}/psdk/poppack.h | 0 {reactos/include => include}/psdk/powrprof.h | 0 {reactos/include => include}/psdk/propidl.idl | 0 .../include => include}/psdk/propvarutil.h | 0 {reactos/include => include}/psdk/prsht.h | 0 {reactos/include => include}/psdk/psapi.h | 0 {reactos/include => include}/psdk/psdk.rbuild | 0 {reactos/include => include}/psdk/pshpack1.h | 0 {reactos/include => include}/psdk/pshpack2.h | 0 {reactos/include => include}/psdk/pshpack4.h | 0 {reactos/include => include}/psdk/pshpack8.h | 0 {reactos/include => include}/psdk/pshpck16.h | 0 {reactos/include => include}/psdk/pstore.idl | 0 {reactos/include => include}/psdk/qos.h | 0 {reactos/include => include}/psdk/rapi.h | 0 {reactos/include => include}/psdk/ras.h | 0 {reactos/include => include}/psdk/rasdlg.h | 0 {reactos/include => include}/psdk/raseapif.h | 0 {reactos/include => include}/psdk/raserror.h | 0 {reactos/include => include}/psdk/rassapi.h | 0 {reactos/include => include}/psdk/rasshost.h | 0 {reactos/include => include}/psdk/reason.h | 0 {reactos/include => include}/psdk/regstr.h | 0 {reactos/include => include}/psdk/richedit.h | 0 {reactos/include => include}/psdk/richole.idl | 0 {reactos/include => include}/psdk/rpc.h | 0 {reactos/include => include}/psdk/rpcasync.h | 0 {reactos/include => include}/psdk/rpcdce.h | 0 {reactos/include => include}/psdk/rpcdce2.h | 0 {reactos/include => include}/psdk/rpcdcep.h | 0 {reactos/include => include}/psdk/rpcndr.h | 0 {reactos/include => include}/psdk/rpcnsi.h | 0 {reactos/include => include}/psdk/rpcnsip.h | 0 {reactos/include => include}/psdk/rpcnterr.h | 0 {reactos/include => include}/psdk/rpcproxy.h | 0 {reactos/include => include}/psdk/schannel.h | 0 {reactos/include => include}/psdk/schemadef.h | 0 {reactos/include => include}/psdk/schnlsp.h | 0 {reactos/include => include}/psdk/scrnsave.h | 0 {reactos/include => include}/psdk/sddl.h | 0 {reactos/include => include}/psdk/sdkddkver.h | 0 {reactos/include => include}/psdk/secext.h | 0 {reactos/include => include}/psdk/security.h | 0 {reactos/include => include}/psdk/sensapi.h | 0 .../include => include}/psdk/sensevts.idl | 0 .../include => include}/psdk/servprov.idl | 0 {reactos/include => include}/psdk/setupapi.h | 0 {reactos/include => include}/psdk/sfc.h | 0 {reactos/include => include}/psdk/shellapi.h | 0 {reactos/include => include}/psdk/shldisp.idl | 0 {reactos/include => include}/psdk/shlguid.h | 0 {reactos/include => include}/psdk/shlobj.h | 0 {reactos/include => include}/psdk/shlwapi.h | 0 .../include => include}/psdk/shobjidl.idl | 0 {reactos/include => include}/psdk/shtypes.idl | 0 {reactos/include => include}/psdk/snmp.h | 0 {reactos/include => include}/psdk/softpub.h | 0 {reactos/include => include}/psdk/sql.h | 0 {reactos/include => include}/psdk/sqlext.h | 0 {reactos/include => include}/psdk/sqltypes.h | 0 {reactos/include => include}/psdk/sqlucode.h | 0 .../include => include}/psdk/srrestoreptapi.h | 0 {reactos/include => include}/psdk/sspi.h | 0 {reactos/include => include}/psdk/stdole2.idl | 0 {reactos/include => include}/psdk/strmif.idl | 0 {reactos/include => include}/psdk/subauth.h | 0 {reactos/include => include}/psdk/svcguid.h | 0 {reactos/include => include}/psdk/svrapi.h | 0 {reactos/include => include}/psdk/tapi.h | 0 {reactos/include => include}/psdk/tchar.h | 0 {reactos/include => include}/psdk/tcpioctl.h | 0 {reactos/include => include}/psdk/textserv.h | 0 {reactos/include => include}/psdk/tlhelp32.h | 0 {reactos/include => include}/psdk/tmschema.h | 0 {reactos/include => include}/psdk/tom.idl | 0 {reactos/include => include}/psdk/unknwn.idl | 0 {reactos/include => include}/psdk/urlhist.idl | 0 {reactos/include => include}/psdk/urlmon.idl | 0 {reactos/include => include}/psdk/userenv.h | 0 {reactos/include => include}/psdk/usp10.h | 0 {reactos/include => include}/psdk/uxtheme.h | 0 {reactos/include => include}/psdk/vfw.h | 0 {reactos/include => include}/psdk/vfwmsgs.h | 0 {reactos/include => include}/psdk/w32api.h | 0 {reactos/include => include}/psdk/wdbgexts.h | 0 {reactos/include => include}/psdk/winable.h | 0 {reactos/include => include}/psdk/winbase.h | 0 {reactos/include => include}/psdk/winber.h | 0 {reactos/include => include}/psdk/wincon.h | 0 {reactos/include => include}/psdk/wincred.h | 0 {reactos/include => include}/psdk/wincrypt.h | 0 {reactos/include => include}/psdk/windef.h | 0 {reactos/include => include}/psdk/windns.h | 0 {reactos/include => include}/psdk/windows.h | 0 {reactos/include => include}/psdk/windowsx.h | 0 {reactos/include => include}/psdk/winefs.h | 0 {reactos/include => include}/psdk/winerror.h | 0 {reactos/include => include}/psdk/winfax.h | 0 {reactos/include => include}/psdk/wingdi.h | 0 {reactos/include => include}/psdk/winhttp.h | 0 {reactos/include => include}/psdk/wininet.h | 0 {reactos/include => include}/psdk/winineti.h | 0 {reactos/include => include}/psdk/winioctl.h | 0 {reactos/include => include}/psdk/winldap.h | 0 {reactos/include => include}/psdk/winnetwk.h | 0 {reactos/include => include}/psdk/winnls.h | 0 {reactos/include => include}/psdk/winnls32.h | 0 {reactos/include => include}/psdk/winnt.h | 0 {reactos/include => include}/psdk/winperf.h | 0 {reactos/include => include}/psdk/winreg.h | 0 {reactos/include => include}/psdk/winres.h | 0 {reactos/include => include}/psdk/winresrc.h | 0 {reactos/include => include}/psdk/winscard.h | 0 {reactos/include => include}/psdk/winsmcrd.h | 0 {reactos/include => include}/psdk/winsnmp.h | 0 {reactos/include => include}/psdk/winsock.h | 0 {reactos/include => include}/psdk/winsock2.h | 0 {reactos/include => include}/psdk/winspool.h | 0 {reactos/include => include}/psdk/winsvc.h | 0 {reactos/include => include}/psdk/winternl.h | 0 {reactos/include => include}/psdk/wintrust.h | 0 {reactos/include => include}/psdk/winuser.h | 0 {reactos/include => include}/psdk/winver.h | 0 {reactos/include => include}/psdk/winwlx.h | 0 {reactos/include => include}/psdk/wmistr.h | 0 {reactos/include => include}/psdk/ws2spi.h | 0 {reactos/include => include}/psdk/ws2tcpip.h | 0 {reactos/include => include}/psdk/wsahelp.h | 0 {reactos/include => include}/psdk/wsipx.h | 0 {reactos/include => include}/psdk/wsnetbs.h | 0 {reactos/include => include}/psdk/wtsapi32.h | 0 {reactos/include => include}/psdk/wtypes.idl | 0 {reactos/include => include}/psdk/xcmc.h | 0 {reactos/include => include}/psdk/xmldom.idl | 0 {reactos/include => include}/psdk/xmldomdid.h | 0 {reactos/include => include}/psdk/xmldso.idl | 0 {reactos/include => include}/psdk/xmldsodid.h | 0 {reactos/include => include}/psdk/xprtdefs.h | 0 {reactos/include => include}/psdk/zmouse.h | 0 .../include => include}/reactos/arc/arc.h | 0 .../reactos/arc/setupblk.h | 0 .../include => include}/reactos/arm/armddk.h | 0 .../reactos/arm/peripherals/pl011.h | 0 .../reactos/arm/peripherals/pl190.h | 0 .../reactos/arm/peripherals/sp804.h | 0 {reactos/include => include}/reactos/ccros.h | 0 .../include => include}/reactos/chew/chew.h | 0 {reactos/include => include}/reactos/config.h | 0 {reactos/include => include}/reactos/debug.h | 0 .../reactos/dll/desk/deskcplx.h | 0 .../reactos/dll/devmgr/devmgr.h | 0 .../reactos/dll/directx/d3d8thk.h | 0 .../reactos/drivers/afd/shared.h | 0 .../reactos/drivers/blue/ntddblue.h | 0 .../reactos/drivers/bootvid/bootvid.h | 0 .../reactos/drivers/directx/directxint.h | 0 .../reactos/drivers/directx/dxeng.h | 0 .../reactos/drivers/directx/dxg.h | 0 .../reactos/drivers/diskdump/diskdump.h | 0 .../reactos/drivers/ntddrdsk.h | 0 .../include => include}/reactos/elf/common.h | 0 .../reactos/elf/elf-i386.h | 0 .../reactos/elf/elf-powerpc.h | 0 .../include => include}/reactos/elf/elf.h | 0 .../include => include}/reactos/elf/elf32.h | 0 .../include => include}/reactos/elf/elf64.h | 0 .../include => include}/reactos/elf/generic.h | 0 .../include => include}/reactos/elf/machine.h | 0 .../include => include}/reactos/elf/reactos.h | 0 .../include => include}/reactos/exeformat.h | 0 {reactos/include => include}/reactos/helper.h | 0 .../reactos/idl/eventlogrpc.acf | 0 .../reactos/idl/eventlogrpc.idl | 0 .../reactos/idl/idl.rbuild | 0 .../include => include}/reactos/idl/lsa.acf | 0 .../include => include}/reactos/idl/lsa.idl | 0 .../reactos/idl/ms-dtyp.idl | 0 .../include => include}/reactos/idl/pnp.acf | 0 .../include => include}/reactos/idl/pnp.idl | 0 .../reactos/idl/svcctl.acf | 0 .../reactos/idl/svcctl.idl | 0 {reactos/include => include}/reactos/kddll.h | 0 .../reactos/libs/audiosrv/audiosrv.h | 0 .../reactos/libs/dhcp/rosdhcp_public.h | 0 .../reactos/libs/epsapi/epsapi.h | 0 .../reactos/libs/expat/expat.h | 0 .../reactos/libs/expat/expat_external.h | 0 .../reactos/libs/fmifs/fmifs.h | 0 .../reactos/libs/fslib/ext2lib.h | 0 .../reactos/libs/fslib/vfatlib.h | 0 .../reactos/libs/fslib/vfatxlib.h | 0 .../reactos/libs/libxml/DOCBparser.h | 0 .../reactos/libs/libxml/HTMLparser.h | 0 .../reactos/libs/libxml/HTMLtree.h | 0 .../reactos/libs/libxml/Makefile.am | 0 .../reactos/libs/libxml/Makefile.in | 0 .../reactos/libs/libxml/SAX.h | 0 .../reactos/libs/libxml/SAX2.h | 0 .../reactos/libs/libxml/c14n.h | 0 .../reactos/libs/libxml/catalog.h | 0 .../reactos/libs/libxml/chvalid.h | 0 .../reactos/libs/libxml/debugXML.h | 0 .../reactos/libs/libxml/dict.h | 0 .../reactos/libs/libxml/encoding.h | 0 .../reactos/libs/libxml/entities.h | 0 .../reactos/libs/libxml/globals.h | 0 .../reactos/libs/libxml/hash.h | 0 .../reactos/libs/libxml/list.h | 0 .../reactos/libs/libxml/nanoftp.h | 0 .../reactos/libs/libxml/nanohttp.h | 0 .../reactos/libs/libxml/parser.h | 0 .../reactos/libs/libxml/parserInternals.h | 0 .../reactos/libs/libxml/pattern.h | 0 .../reactos/libs/libxml/relaxng.h | 0 .../reactos/libs/libxml/schemasInternals.h | 0 .../reactos/libs/libxml/schematron.h | 0 .../reactos/libs/libxml/threads.h | 0 .../reactos/libs/libxml/tree.h | 0 .../reactos/libs/libxml/uri.h | 0 .../reactos/libs/libxml/valid.h | 0 .../reactos/libs/libxml/xinclude.h | 0 .../reactos/libs/libxml/xlink.h | 0 .../reactos/libs/libxml/xmlIO.h | 0 .../reactos/libs/libxml/xmlautomata.h | 0 .../reactos/libs/libxml/xmlerror.h | 0 .../reactos/libs/libxml/xmlexports.h | 0 .../reactos/libs/libxml/xmlmemory.h | 0 .../reactos/libs/libxml/xmlmodule.h | 0 .../reactos/libs/libxml/xmlreader.h | 0 .../reactos/libs/libxml/xmlregexp.h | 0 .../reactos/libs/libxml/xmlsave.h | 0 .../reactos/libs/libxml/xmlschemas.h | 0 .../reactos/libs/libxml/xmlschemastypes.h | 0 .../reactos/libs/libxml/xmlstring.h | 0 .../reactos/libs/libxml/xmlunicode.h | 0 .../reactos/libs/libxml/xmlversion.h | 0 .../reactos/libs/libxml/xmlversion.h.in | 0 .../reactos/libs/libxml/xmlwriter.h | 0 .../reactos/libs/libxml/xpath.h | 0 .../reactos/libs/libxml/xpathInternals.h | 0 .../reactos/libs/libxml/xpointer.h | 0 .../reactos/libs/ppcmmu/mmu.h | 0 .../reactos/libs/ppcmmu/mmuutil.h | 0 .../reactos/libs/pseh/excpt.h | 0 .../reactos/libs/pseh/framebased.h | 0 .../reactos/libs/pseh/framebased/internal.h | 0 .../reactos/libs/pseh/pseh.h | 0 .../reactos/libs/samlib/samlib.h | 0 .../reactos/libs/syssetup/syssetup.h | 0 .../reactos/libs/umpnpmgr/sysguid.h | 0 .../reactos/mc/bugcodes.mc | 0 .../reactos/mc/errcodes.mc | 0 .../include => include}/reactos/mc/mc.rbuild | 0 .../reactos/mc/ntstatus.mc | 0 .../include => include}/reactos/msvctarget.h | 0 {reactos/include => include}/reactos/probe.h | 0 .../reactos/reactos.rbuild | 0 {reactos/include => include}/reactos/reactx.h | 0 {reactos/include => include}/reactos/rosldr.h | 0 {reactos/include => include}/reactos/rossym.h | 0 .../reactos/services/services.h | 0 .../reactos/subsys/csr/server.h | 0 .../reactos/subsys/csrss/csrss.h | 0 .../reactos/subsys/lsass/lsasrv.h | 0 .../reactos/subsys/lsass/lsass.h | 0 .../reactos/subsys/sm/api.h | 0 .../reactos/subsys/sm/helper.h | 0 .../reactos/subsys/sm/ns.h | 0 .../reactos/subsys/win/base.h | 0 .../reactos/subsys/win/windows.h | 0 .../include => include}/reactos/version.h | 0 .../include => include}/reactos/version.rc | 0 .../reactos/win32k/callback.h | 0 .../reactos/win32k/ntgdibad.h | 0 .../reactos/win32k/ntgdihdl.h | 0 .../reactos/win32k/ntgdityp.h | 0 .../reactos/win32k/ntuser.h | 0 .../reactos/win32k/ntusrtyp.h | 0 .../include => include}/reactos/windbgkd.h | 0 .../reactos/wine/cfgmgr32.h | 0 .../include => include}/reactos/wine/config.h | 0 .../include => include}/reactos/wine/debug.h | 0 .../include => include}/reactos/wine/dlgs.h | 0 .../reactos/wine/exception.h | 0 .../reactos/wine/guiddef.h | 0 .../include => include}/reactos/wine/irot.idl | 0 .../include => include}/reactos/wine/itss.idl | 0 .../reactos/wine/library.h | 0 .../include => include}/reactos/wine/list.h | 0 .../reactos/wine/lmbrowsr.h | 0 .../include => include}/reactos/wine/mmddk.h | 0 .../include => include}/reactos/wine/mmreg.h | 0 .../reactos/wine/mmsystem.h | 0 .../include => include}/reactos/wine/msacm.h | 0 .../reactos/wine/msacmdlg.h | 0 .../reactos/wine/msacmdrv.h | 0 .../reactos/wine/mscvpdb.h | 0 .../reactos/wine/msvcrt/fcntl.h | 0 .../include => include}/reactos/wine/port.h | 0 .../include => include}/reactos/wine/prsht.h | 0 .../include => include}/reactos/wine/regex.h | 0 .../include => include}/reactos/wine/rpcfc.h | 0 .../reactos/wine/rpcss_shared.h | 0 .../include => include}/reactos/wine/test.h | 0 .../reactos/wine/unicode.h | 0 .../reactos/wine/winbase.h | 0 .../reactos/wine/winbase16.h | 0 .../include => include}/reactos/wine/windef.h | 0 .../reactos/wine/windef16.h | 0 .../reactos/wine/wine_common_ver.rc | 0 .../reactos/wine/wined3d_caps.h | 0 .../reactos/wine/wined3d_gl.h | 0 .../reactos/wine/wined3d_interface.h | 0 .../reactos/wine/wined3d_types.h | 0 .../reactos/wine/wineheaders.rbuild | 0 .../reactos/wine/wingdi16.h | 0 .../reactos/wine/winnetwk.h | 0 .../include => include}/reactos/wine/winnt.h | 0 .../reactos/wine/winsock16.h | 0 .../reactos/wine/winuser.h | 0 .../reactos/wine/winuser16.h | 0 .../reactos/wine/wownt32.h | 0 .../include => include}/reactos/wine/wpp.h | 0 .../include => include}/reactos/winlogon.h | 0 irc/ArchBlackmann/ArchBlackmann.cpp | 608 - irc/ArchBlackmann/ArchBlackmann.dsp | 216 - irc/ArchBlackmann/ArchBlackmann.dsw | 29 - irc/ArchBlackmann/File.cpp | 265 - irc/ArchBlackmann/File.h | 173 - irc/ArchBlackmann/IRCClient.cpp | 418 - irc/ArchBlackmann/IRCClient.h | 148 - irc/ArchBlackmann/MD5.cpp | 418 - irc/ArchBlackmann/MD5.h | 95 - irc/ArchBlackmann/QueueT.h | 315 - irc/ArchBlackmann/Reli.h | 143 - irc/ArchBlackmann/ReliMT.cpp | 331 - irc/ArchBlackmann/ReliMT.h | 229 - irc/ArchBlackmann/SockUtils.cpp | 504 - irc/ArchBlackmann/SockUtils.h | 132 - irc/ArchBlackmann/SplitJoin.cpp | 96 - irc/ArchBlackmann/SplitJoin.h | 32 - irc/ArchBlackmann/ThreadPool.cpp | 240 - irc/ArchBlackmann/ThreadPool.h | 28 - irc/ArchBlackmann/auto_ptr.h | 87 - irc/ArchBlackmann/auto_vector.h | 141 - irc/ArchBlackmann/base64.cpp | 58 - irc/ArchBlackmann/base64.h | 12 - irc/ArchBlackmann/chomp.cpp | 15 - irc/ArchBlackmann/chomp.h | 13 - irc/ArchBlackmann/config.h | 7 - irc/ArchBlackmann/cram_md5.cpp | 23 - irc/ArchBlackmann/cram_md5.h | 15 - irc/ArchBlackmann/curse.txt | 1 - irc/ArchBlackmann/cursecop.txt | 10 - irc/ArchBlackmann/dev.txt | 15 - irc/ArchBlackmann/func.txt | 580 - irc/ArchBlackmann/grovel.txt | 10 - irc/ArchBlackmann/idle.txt | 1 - irc/ArchBlackmann/irql.txt | 9 - irc/ArchBlackmann/makefile | 38 - irc/ArchBlackmann/module.txt | 13 - irc/ArchBlackmann/nogrovel.txt | 5 - irc/ArchBlackmann/panic.cpp | 34 - irc/ArchBlackmann/panic.h | 18 - irc/ArchBlackmann/period.txt | 11 - irc/ArchBlackmann/readme.txt | 44 - irc/ArchBlackmann/ssprintf.cpp | 998 -- irc/ArchBlackmann/ssprintf.h | 12 - irc/ArchBlackmann/status.txt | 654 - irc/ArchBlackmann/stru.txt | 7 - irc/ArchBlackmann/tech.txt | 73 - irc/ArchBlackmann/trim.cpp | 17 - irc/ArchBlackmann/trim.h | 13 - irc/ArchBlackmann/type.txt | 1000 -- irc/ArchBlackmann/verify.h | 37 - irc/TechBot/CHMLibrary/AssemblyInfo.cs | 32 - .../CHMDecoding/BinaryReaderHelp.cs | 274 - .../CHMLibrary/CHMDecoding/CHMBtree.cs | 325 - irc/TechBot/CHMLibrary/CHMDecoding/CHMFile.cs | 2061 --- .../CHMLibrary/CHMDecoding/CHMIdxhdr.cs | 286 - .../CHMLibrary/CHMDecoding/CHMStrings.cs | 256 - .../CHMLibrary/CHMDecoding/CHMSystem.cs | 821 -- .../CHMLibrary/CHMDecoding/CHMTocidx.cs | 288 - .../CHMLibrary/CHMDecoding/CHMTopics.cs | 235 - .../CHMLibrary/CHMDecoding/CHMUrlstr.cs | 308 - .../CHMLibrary/CHMDecoding/CHMUrltable.cs | 245 - .../CHMLibrary/CHMDecoding/DumpingInfo.cs | 395 - .../CHMLibrary/CHMDecoding/FullTextEngine.cs | 1131 -- .../CHMLibrary/CHMDecoding/HHCParser.cs | 593 - .../CHMLibrary/CHMDecoding/HHCParser2.cs | 220 - .../CHMLibrary/CHMDecoding/HHKParser.cs | 550 - .../CHMLibrary/CHMDecoding/TopicEntry.cs | 245 - .../CHMLibrary/CHMDecoding/UrlTableEntry.cs | 175 - .../CHMLibrary/CHMDecoding/enumerations.cs | 19 - irc/TechBot/CHMLibrary/CHMLibrary.cmbx | 16 - irc/TechBot/CHMLibrary/CHMLibrary.csproj | 85 - irc/TechBot/CHMLibrary/CHMLibrary.prjx | 58 - irc/TechBot/CHMLibrary/Category.cs | 201 - irc/TechBot/CHMLibrary/ChmFileInfo.cs | 478 - irc/TechBot/CHMLibrary/Default.build | 23 - irc/TechBot/CHMLibrary/HtmlHelpSystem.cs | 894 -- irc/TechBot/CHMLibrary/HttpUtility.cs | 855 -- irc/TechBot/CHMLibrary/Index.cs | 322 - irc/TechBot/CHMLibrary/IndexItem.cs | 396 - irc/TechBot/CHMLibrary/IndexTopic.cs | 216 - irc/TechBot/CHMLibrary/InformationType.cs | 146 - irc/TechBot/CHMLibrary/Storage/CHMStream.cs | 2842 ----- irc/TechBot/CHMLibrary/TOCItem.cs | 494 - irc/TechBot/CHMLibrary/TableOfContents.cs | 198 - irc/TechBot/Compression/AssemblyInfo.cs | 32 - irc/TechBot/Compression/Checksums/Adler32.cs | 200 - irc/TechBot/Compression/Checksums/CRC32.cs | 211 - .../Compression/Checksums/IChecksum.cs | 93 - .../Compression/Checksums/StrangeCRC.cs | 159 - irc/TechBot/Compression/Compression.cmbx | 16 - irc/TechBot/Compression/Compression.csproj | 65 - irc/TechBot/Compression/Compression.prjx | 45 - irc/TechBot/Compression/Default.build | 20 - irc/TechBot/Compression/Deflater.cs | 542 - irc/TechBot/Compression/DeflaterConstants.cs | 85 - irc/TechBot/Compression/DeflaterEngine.cs | 653 - irc/TechBot/Compression/DeflaterHuffman.cs | 780 -- irc/TechBot/Compression/DeflaterPending.cs | 52 - irc/TechBot/Compression/Inflater.cs | 782 -- irc/TechBot/Compression/InflaterDynHeader.cs | 207 - .../Compression/InflaterHuffmanTree.cs | 213 - irc/TechBot/Compression/PendingBuffer.cs | 210 - .../Streams/DeflaterOutputStream.cs | 379 - .../Streams/InflaterInputStream.cs | 386 - .../Compression/Streams/OutputWindow.cs | 176 - .../Compression/Streams/StreamManipulator.cs | 245 - irc/TechBot/Compression/ZipException.cs | 62 - irc/TechBot/Resources/hresult.xml | 1088 -- irc/TechBot/Resources/ntstatus.xml | 1111 -- irc/TechBot/Resources/winerror.xml | 1839 --- irc/TechBot/Resources/wm.xml | 321 - .../Base/BugCommand.cs | 42 - .../TechBot.Commands.Common/ErrorCommand.cs | 180 - .../TechBot.Commands.Common/HResultCommand.cs | 66 - .../NtStatusCommand.cs | 66 - .../Properties/AssemblyInfo.cs | 35 - .../TechBot.Commands.Common/ReactOSBugUrl.cs | 21 - .../TechBot.Commands.Common/SambaBugUrl.cs | 21 - .../Settings.Designer.cs | 71 - .../TechBot.Commands.Common/Settings.cs | 28 - .../TechBot.Commands.Common/Settings.settings | 21 - .../TechBot.Commands.Common/SvnCommand.cs | 22 - .../TechBot.Commands.Common.csproj | 75 - .../TechBot.Commands.Common/WMCommand.cs | 94 - .../TechBot.Commands.Common/WineBugUrl.cs | 21 - .../WinerrorCommand.cs | 66 - .../TechBot.Commands.Common/app.config | 27 - .../TechBot.Commands.MSDN/ApiCommand.cs | 309 - .../Properties/AssemblyInfo.cs | 35 - .../Settings.Designer.cs | 50 - .../TechBot.Commands.MSDN/Settings.settings | 12 - .../TechBot.Commands.MSDN.csproj | 69 - .../TechBot.Commands.MSDN.csproj.user | 5 - irc/TechBot/TechBot.Commands.MSDN/app.config | 18 - irc/TechBot/TechBot.Console/App.config | 27 - irc/TechBot/TechBot.Console/AssemblyInfo.cs | 32 - .../TechBot.Console/ConsoleTechBotService.cs | 37 - irc/TechBot/TechBot.Console/Default.build | 23 - irc/TechBot/TechBot.Console/Main.cs | 29 - .../TechBot.Console/Properties/.gitignore | 0 .../TechBot.Console/Settings.Designer.cs | 86 - irc/TechBot/TechBot.Console/Settings.settings | 21 - .../TechBot.Console/TechBot.Console.cmbx | 16 - .../TechBot.Console/TechBot.Console.csproj | 80 - .../TechBot.Console/TechBot.Console.prjx | 29 - .../TechBot.IRCLibrary/AssemblyInfo.cs | 32 - irc/TechBot/TechBot.IRCLibrary/Default.build | 20 - irc/TechBot/TechBot.IRCLibrary/IRC.cs | 30 - irc/TechBot/TechBot.IRCLibrary/IrcChannel.cs | 137 - irc/TechBot/TechBot.IRCLibrary/IrcClient.cs | 794 -- .../TechBot.IRCLibrary/IrcException.cs | 50 - irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs | 503 - irc/TechBot/TechBot.IRCLibrary/IrcUser.cs | 132 - .../TechBot.IRCLibrary/Properties/.gitignore | 0 .../TechBot.IRCLibrary.cmbx | 16 - .../TechBot.IRCLibrary.csproj | 59 - .../TechBot.IRCLibrary.prjx | 31 - irc/TechBot/TechBot.IRCLibrary/app.config | 15 - .../Attributes/CommandAttribute.cs | 35 - .../CommandParameterAliasAttribute.cs | 34 - .../Attributes/CommandParameterAttribute.cs | 50 - .../Collections/CommandBuilderCollection.cs | 20 - .../TechBot.Library/Commands/Base/Command.cs | 90 - .../Commands/Base/XmlCommand.cs | 25 - .../Commands/Base/XmlLookupCommand.cs | 15 - .../TechBot.Library/Commands/HelpCommand.cs | 78 - .../TechBot.Library/Factory/CommandBuilder.cs | 52 - .../TechBot.Library/Factory/CommandFactory.cs | 60 - irc/TechBot/TechBot.Library/MessageContext.cs | 39 - irc/TechBot/TechBot.Library/NumberParser.cs | 62 - .../TechBot.Library/Properties/.gitignore | 0 .../Properties/AssemblyInfo.cs | 32 - irc/TechBot/TechBot.Library/ServiceOutput.cs | 9 - .../TechBot.Library/Settings.Designer.cs | 80 - irc/TechBot/TechBot.Library/Settings.cs | 28 - irc/TechBot/TechBot.Library/Settings.settings | 24 - .../TechBot.Library/TechBot.Library.csproj | 83 - .../TechBot.Library/TechBotIrcService.cs | 312 - irc/TechBot/TechBot.Library/TechBotService.cs | 101 - irc/TechBot/TechBot.Library/app.config | 30 - irc/TechBot/TechBot.sln | 62 - irc/TechBot/TechBot/App.config | 44 - irc/TechBot/TechBot/AssemblyInfo.cs | 32 - irc/TechBot/TechBot/Default.build | 23 - irc/TechBot/TechBot/ProjectInstaller.cs | 28 - irc/TechBot/TechBot/Properties/.gitignore | 0 irc/TechBot/TechBot/ServiceThread.cs | 43 - irc/TechBot/TechBot/Settings.Designer.cs | 86 - irc/TechBot/TechBot/Settings.settings | 21 - irc/TechBot/TechBot/TechBot.csproj | 82 - irc/TechBot/TechBot/TechBot.prjx | 30 - irc/TechBot/TechBot/TechBotService.cs | 82 - {reactos/lib => lib}/3rdparty/3rdparty.rbuild | 0 {reactos/lib => lib}/3rdparty/adns/COPYING | 0 .../lib => lib}/3rdparty/adns/GPL-vs-LGPL | 0 {reactos/lib => lib}/3rdparty/adns/INSTALL | 0 .../lib => lib}/3rdparty/adns/Makefile.in | 0 {reactos/lib => lib}/3rdparty/adns/README | 0 .../lib => lib}/3rdparty/adns/README.html | 0 {reactos/lib => lib}/3rdparty/adns/TODO | 0 {reactos/lib => lib}/3rdparty/adns/acconfig.h | 0 {reactos/lib => lib}/3rdparty/adns/aclocal.m4 | 0 .../lib => lib}/3rdparty/adns/adns.rbuild | 0 .../3rdparty/adns/adns_win32/README.TXT | 0 .../adns/adns_win32/adns_unix_calls.c | 0 .../3rdparty/adns/adns_win32/adns_win32.h | 0 .../3rdparty/adns/adns_win32/getopt.c | 0 .../3rdparty/adns/adns_win32/getopt.h | 0 .../3rdparty/adns/adns_win32/timercmp.h | 0 {reactos/lib => lib}/3rdparty/adns/changelog | 0 .../3rdparty/adns/client/Makefile.in | 0 .../3rdparty/adns/client/adh-main.c | 0 .../3rdparty/adns/client/adh-opts.c | 0 .../3rdparty/adns/client/adh-query.c | 0 .../3rdparty/adns/client/adnshost.h | 0 .../3rdparty/adns/client/adnslogres.c | 0 .../3rdparty/adns/client/adnsresfilter.c | 0 .../3rdparty/adns/client/adnstest.c | 0 .../lib => lib}/3rdparty/adns/client/client.h | 0 .../3rdparty/adns/client/fanftest.c | 0 .../lib => lib}/3rdparty/adns/configure.in | 0 .../3rdparty/adns/dynamic/Makefile.in | 0 {reactos/lib => lib}/3rdparty/adns/install-sh | 0 .../3rdparty/adns/settings.make.in | 0 .../lib => lib}/3rdparty/adns/src/Makefile.in | 0 {reactos/lib => lib}/3rdparty/adns/src/adns.h | 0 .../lib => lib}/3rdparty/adns/src/adns.make | 0 .../lib => lib}/3rdparty/adns/src/check.c | 0 .../lib => lib}/3rdparty/adns/src/config.h | 0 .../lib => lib}/3rdparty/adns/src/config.h.in | 0 .../lib => lib}/3rdparty/adns/src/dlist.h | 0 .../lib => lib}/3rdparty/adns/src/event.c | 0 .../lib => lib}/3rdparty/adns/src/general.c | 0 .../lib => lib}/3rdparty/adns/src/internal.h | 0 .../lib => lib}/3rdparty/adns/src/parse.c | 0 {reactos/lib => lib}/3rdparty/adns/src/poll.c | 0 .../lib => lib}/3rdparty/adns/src/query.c | 0 .../lib => lib}/3rdparty/adns/src/reply.c | 0 .../lib => lib}/3rdparty/adns/src/setup.c | 0 .../lib => lib}/3rdparty/adns/src/transmit.c | 0 .../lib => lib}/3rdparty/adns/src/tvarith.h | 0 .../lib => lib}/3rdparty/adns/src/types.c | 0 {reactos/lib => lib}/3rdparty/bzip2/CHANGES | 0 {reactos/lib => lib}/3rdparty/bzip2/LICENSE | 0 .../3rdparty/bzip2/Makefile-libbz2_so | 0 {reactos/lib => lib}/3rdparty/bzip2/README | 0 .../bzip2/README.COMPILATION.PROBLEMS | 0 .../lib => lib}/3rdparty/bzip2/README.reactos | 0 {reactos/lib => lib}/3rdparty/bzip2/Y2K_INFO | 0 .../lib => lib}/3rdparty/bzip2/blocksort.c | 0 {reactos/lib => lib}/3rdparty/bzip2/bzip2.1 | 0 .../3rdparty/bzip2/bzip2.1.preformatted | 0 {reactos/lib => lib}/3rdparty/bzip2/bzip2.c | 0 .../lib => lib}/3rdparty/bzip2/bzip2.rbuild | 0 {reactos/lib => lib}/3rdparty/bzip2/bzip2.txt | 0 .../lib => lib}/3rdparty/bzip2/bzip2recover.c | 0 {reactos/lib => lib}/3rdparty/bzip2/bzlib.c | 0 {reactos/lib => lib}/3rdparty/bzip2/bzlib.h | 0 .../3rdparty/bzip2/bzlib_private.h | 0 .../lib => lib}/3rdparty/bzip2/compress.c | 0 .../lib => lib}/3rdparty/bzip2/crctable.c | 0 .../lib => lib}/3rdparty/bzip2/decompress.c | 0 {reactos/lib => lib}/3rdparty/bzip2/dllmain.c | 0 {reactos/lib => lib}/3rdparty/bzip2/dlltest.c | 0 .../lib => lib}/3rdparty/bzip2/dlltest.dsp | 0 {reactos/lib => lib}/3rdparty/bzip2/huffman.c | 0 .../lib => lib}/3rdparty/bzip2/libbz2.def | 0 .../lib => lib}/3rdparty/bzip2/libbz2.dsp | 0 .../lib => lib}/3rdparty/bzip2/makefile.msc | 0 {reactos/lib => lib}/3rdparty/bzip2/manual.ps | 0 .../lib => lib}/3rdparty/bzip2/manual.texi | 0 .../lib => lib}/3rdparty/bzip2/manual_1.html | 0 .../lib => lib}/3rdparty/bzip2/manual_2.html | 0 .../lib => lib}/3rdparty/bzip2/manual_3.html | 0 .../lib => lib}/3rdparty/bzip2/manual_4.html | 0 .../3rdparty/bzip2/manual_toc.html | 0 .../lib => lib}/3rdparty/bzip2/randtable.c | 0 .../lib => lib}/3rdparty/bzip2/sample1.ref | Bin .../lib => lib}/3rdparty/bzip2/sample2.ref | Bin .../lib => lib}/3rdparty/bzip2/sample3.ref | 0 {reactos/lib => lib}/3rdparty/bzip2/spewG.c | 0 .../lib => lib}/3rdparty/bzip2/unbzip2.def | 0 .../lib => lib}/3rdparty/bzip2/unzcrash.c | 0 {reactos/lib => lib}/3rdparty/bzip2/words0 | 0 {reactos/lib => lib}/3rdparty/bzip2/words1 | 0 {reactos/lib => lib}/3rdparty/bzip2/words2 | 0 {reactos/lib => lib}/3rdparty/bzip2/words3 | 0 {reactos/lib => lib}/3rdparty/expat/COPYING | 0 .../lib => lib}/3rdparty/expat/Makefile.in | 0 {reactos/lib => lib}/3rdparty/expat/README | 0 {reactos/lib => lib}/3rdparty/expat/expat.dsw | 0 .../lib => lib}/3rdparty/expat/expat.rbuild | 0 .../lib => lib}/3rdparty/expat/expat.spec | 0 .../3rdparty/expat/lib/Makefile.MPW | 0 .../lib => lib}/3rdparty/expat/lib/ascii.h | 0 .../lib => lib}/3rdparty/expat/lib/asciitab.h | 0 .../lib => lib}/3rdparty/expat/lib/expat.dsp | 0 .../3rdparty/expat/lib/expat_config.h | 0 .../3rdparty/expat/lib/expat_static.dsp | 0 .../lib => lib}/3rdparty/expat/lib/expatw.dsp | 0 .../3rdparty/expat/lib/expatw_static.dsp | 0 .../3rdparty/expat/lib/iasciitab.h | 0 .../lib => lib}/3rdparty/expat/lib/internal.h | 0 .../3rdparty/expat/lib/latin1tab.h | 0 .../3rdparty/expat/lib/libexpat.def | 0 .../3rdparty/expat/lib/libexpatw.def | 0 .../3rdparty/expat/lib/macconfig.h | 0 .../lib => lib}/3rdparty/expat/lib/nametab.h | 0 .../lib => lib}/3rdparty/expat/lib/utf8tab.h | 0 .../3rdparty/expat/lib/winconfig.h | 0 .../lib => lib}/3rdparty/expat/lib/xmlparse.c | 0 .../lib => lib}/3rdparty/expat/lib/xmlrole.c | 0 .../lib => lib}/3rdparty/expat/lib/xmlrole.h | 0 .../lib => lib}/3rdparty/expat/lib/xmltok.c | 0 .../lib => lib}/3rdparty/expat/lib/xmltok.h | 0 .../3rdparty/expat/lib/xmltok_impl.c | 0 .../3rdparty/expat/lib/xmltok_impl.h | 0 .../3rdparty/expat/lib/xmltok_ns.c | 0 .../icu4ros/icu/as_is/os390/unpax-icu.sh | 0 .../icu/as_is/os400/convertConfigure.sed | 0 .../icu4ros/icu/as_is/os400/unpax-icu.sh | 0 .../3rdparty/icu4ros/icu/debian/.cvsignore | 0 .../icu/debian/README.Debian.libicu-dev | 0 .../3rdparty/icu4ros/icu/debian/changelog | 0 .../3rdparty/icu4ros/icu/debian/control | 0 .../3rdparty/icu4ros/icu/debian/copyright | 0 .../icu4ros/icu/debian/icu-doc.doc-base | 0 .../icu4ros/icu/debian/icu-doc.install | 0 .../icu4ros/icu/debian/icu.conffiles.in | 0 .../icu4ros/icu/debian/icu.postinst.in | 0 .../3rdparty/icu4ros/icu/debian/icu.prerm.in | 0 .../icu4ros/icu/debian/libicu.postinst | 0 .../icu4ros/icu/debian/libicu.prerm.in | 0 .../3rdparty/icu4ros/icu/debian/postinst.in | 0 .../3rdparty/icu4ros/icu/debian/prerm.in | 0 .../3rdparty/icu4ros/icu/debian/rules | 0 .../3rdparty/icu4ros/icu/debian/watch.not-yet | 0 .../3rdparty/icu4ros/icu/license.html | 0 .../3rdparty/icu4ros/icu/packaging/PACKAGES | 0 .../3rdparty/icu4ros/icu/packaging/README | 0 .../icu4ros/icu/packaging/debian/README | 0 .../icu4ros/icu/packaging/rpm/icu.spec | 0 .../3rdparty/icu4ros/icu/readme.html | 0 .../3rdparty/icu4ros/icu/source/Doxyfile.in | 0 .../3rdparty/icu4ros/icu/source/Makefile.in | 0 .../3rdparty/icu4ros/icu/source/aclocal.m4 | 0 .../icu4ros/icu/source/allinone/allinone.sln | 0 .../icu4ros/icu/source/common/Makefile.in | 0 .../icu4ros/icu/source/common/bmpset.cpp | 0 .../icu4ros/icu/source/common/bmpset.h | 0 .../icu4ros/icu/source/common/brkeng.cpp | 0 .../icu4ros/icu/source/common/brkeng.h | 0 .../icu4ros/icu/source/common/brkiter.cpp | 0 .../icu4ros/icu/source/common/caniter.cpp | 0 .../icu4ros/icu/source/common/chariter.cpp | 0 .../icu4ros/icu/source/common/charstr.h | 0 .../icu4ros/icu/source/common/cmemory.c | 0 .../icu4ros/icu/source/common/cmemory.h | 0 .../icu4ros/icu/source/common/common.rc | 0 .../icu4ros/icu/source/common/common.vcproj | 0 .../icu4ros/icu/source/common/cpputils.h | 0 .../icu4ros/icu/source/common/cstring.c | 0 .../icu4ros/icu/source/common/cstring.h | 0 .../icu4ros/icu/source/common/cwchar.c | 0 .../icu4ros/icu/source/common/cwchar.h | 0 .../icu4ros/icu/source/common/dictbe.cpp | 0 .../icu4ros/icu/source/common/dictbe.h | 0 .../3rdparty/icu4ros/icu/source/common/hash.h | 0 .../icu4ros/icu/source/common/icucfg.h.in | 0 .../icu4ros/icu/source/common/localsvc.h | 0 .../icu4ros/icu/source/common/locbased.cpp | 0 .../icu4ros/icu/source/common/locbased.h | 0 .../icu4ros/icu/source/common/locid.cpp | 0 .../icu4ros/icu/source/common/locmap.c | 0 .../icu4ros/icu/source/common/locmap.h | 0 .../icu4ros/icu/source/common/locutil.cpp | 0 .../icu4ros/icu/source/common/locutil.h | 0 .../icu4ros/icu/source/common/msvcres.h | 0 .../icu4ros/icu/source/common/mutex.h | 0 .../icu4ros/icu/source/common/normlzr.cpp | 0 .../icu4ros/icu/source/common/parsepos.cpp | 0 .../icu4ros/icu/source/common/propname.cpp | 0 .../icu4ros/icu/source/common/propname.h | 0 .../icu4ros/icu/source/common/punycode.c | 0 .../icu4ros/icu/source/common/punycode.h | 0 .../icu4ros/icu/source/common/putil.c | 0 .../icu4ros/icu/source/common/putilimp.h | 0 .../icu4ros/icu/source/common/rbbi.cpp | 0 .../icu4ros/icu/source/common/rbbicst.pl | 0 .../icu4ros/icu/source/common/rbbidata.cpp | 0 .../icu4ros/icu/source/common/rbbidata.h | 0 .../icu4ros/icu/source/common/rbbinode.cpp | 0 .../icu4ros/icu/source/common/rbbinode.h | 0 .../icu4ros/icu/source/common/rbbirb.cpp | 0 .../icu4ros/icu/source/common/rbbirb.h | 0 .../icu4ros/icu/source/common/rbbirpt.h | 0 .../icu4ros/icu/source/common/rbbirpt.txt | 0 .../icu4ros/icu/source/common/rbbiscan.cpp | 0 .../icu4ros/icu/source/common/rbbiscan.h | 0 .../icu4ros/icu/source/common/rbbisetb.cpp | 0 .../icu4ros/icu/source/common/rbbisetb.h | 0 .../icu4ros/icu/source/common/rbbistbl.cpp | 0 .../icu4ros/icu/source/common/rbbitblb.cpp | 0 .../icu4ros/icu/source/common/rbbitblb.h | 0 .../icu4ros/icu/source/common/resbund.cpp | 0 .../icu4ros/icu/source/common/resbund_cnv.cpp | 0 .../icu4ros/icu/source/common/ruleiter.cpp | 0 .../icu4ros/icu/source/common/ruleiter.h | 0 .../icu4ros/icu/source/common/schriter.cpp | 0 .../icu4ros/icu/source/common/serv.cpp | 0 .../3rdparty/icu4ros/icu/source/common/serv.h | 0 .../icu4ros/icu/source/common/servlk.cpp | 0 .../icu4ros/icu/source/common/servlkf.cpp | 0 .../icu4ros/icu/source/common/servloc.h | 0 .../icu4ros/icu/source/common/servls.cpp | 0 .../icu4ros/icu/source/common/servnotf.cpp | 0 .../icu4ros/icu/source/common/servnotf.h | 0 .../icu4ros/icu/source/common/servrbf.cpp | 0 .../icu4ros/icu/source/common/servslkf.cpp | 0 .../icu4ros/icu/source/common/sprpimpl.h | 0 .../icu4ros/icu/source/common/triedict.cpp | 0 .../icu4ros/icu/source/common/triedict.h | 0 .../icu4ros/icu/source/common/uarrsort.c | 0 .../icu4ros/icu/source/common/uarrsort.h | 0 .../icu4ros/icu/source/common/uassert.h | 0 .../icu4ros/icu/source/common/ubidi.c | 0 .../icu4ros/icu/source/common/ubidi_props.c | 0 .../icu4ros/icu/source/common/ubidi_props.h | 0 .../icu/source/common/ubidi_props_data.c | 0 .../icu4ros/icu/source/common/ubidiimp.h | 0 .../icu4ros/icu/source/common/ubidiln.c | 0 .../icu4ros/icu/source/common/ubidiwrt.c | 0 .../icu4ros/icu/source/common/ubrk.cpp | 0 .../icu4ros/icu/source/common/ubrkimpl.h | 0 .../icu4ros/icu/source/common/ucase.c | 0 .../icu4ros/icu/source/common/ucase.h | 0 .../icu/source/common/ucase_props_data.c | 0 .../icu4ros/icu/source/common/ucasemap.c | 0 .../3rdparty/icu4ros/icu/source/common/ucat.c | 0 .../icu4ros/icu/source/common/uchar.c | 0 .../icu/source/common/uchar_props_data.c | 0 .../icu4ros/icu/source/common/uchriter.cpp | 0 .../3rdparty/icu4ros/icu/source/common/ucln.h | 0 .../icu4ros/icu/source/common/ucln_cmn.c | 0 .../icu4ros/icu/source/common/ucln_cmn.h | 0 .../icu4ros/icu/source/common/ucmndata.c | 0 .../icu4ros/icu/source/common/ucmndata.h | 0 .../3rdparty/icu4ros/icu/source/common/ucnv.c | 0 .../icu4ros/icu/source/common/ucnv2022.c | 0 .../icu4ros/icu/source/common/ucnv_bld.c | 0 .../icu4ros/icu/source/common/ucnv_bld.h | 0 .../icu4ros/icu/source/common/ucnv_cb.c | 0 .../icu4ros/icu/source/common/ucnv_cnv.c | 0 .../icu4ros/icu/source/common/ucnv_cnv.h | 0 .../icu4ros/icu/source/common/ucnv_err.c | 0 .../icu4ros/icu/source/common/ucnv_ext.c | 0 .../icu4ros/icu/source/common/ucnv_ext.h | 0 .../icu4ros/icu/source/common/ucnv_imp.h | 0 .../icu4ros/icu/source/common/ucnv_io.c | 0 .../icu4ros/icu/source/common/ucnv_io.h | 0 .../icu4ros/icu/source/common/ucnv_lmb.c | 0 .../icu4ros/icu/source/common/ucnv_set.c | 0 .../icu4ros/icu/source/common/ucnv_u16.c | 0 .../icu4ros/icu/source/common/ucnv_u32.c | 0 .../icu4ros/icu/source/common/ucnv_u7.c | 0 .../icu4ros/icu/source/common/ucnv_u8.c | 0 .../icu4ros/icu/source/common/ucnvbocu.c | 0 .../icu4ros/icu/source/common/ucnvdisp.c | 0 .../icu4ros/icu/source/common/ucnvhz.c | 0 .../icu4ros/icu/source/common/ucnvisci.c | 0 .../icu4ros/icu/source/common/ucnvlat1.c | 0 .../icu4ros/icu/source/common/ucnvmbcs.c | 0 .../icu4ros/icu/source/common/ucnvmbcs.h | 0 .../icu4ros/icu/source/common/ucnvscsu.c | 0 .../icu4ros/icu/source/common/ucol_swp.c | 0 .../icu4ros/icu/source/common/ucol_swp.h | 0 .../icu4ros/icu/source/common/udata.c | 0 .../icu4ros/icu/source/common/udatamem.c | 0 .../icu4ros/icu/source/common/udatamem.h | 0 .../icu4ros/icu/source/common/udataswp.c | 0 .../icu4ros/icu/source/common/udataswp.h | 0 .../icu4ros/icu/source/common/uenum.c | 0 .../icu4ros/icu/source/common/uenumimp.h | 0 .../icu4ros/icu/source/common/uhash.c | 0 .../icu4ros/icu/source/common/uhash.h | 0 .../icu4ros/icu/source/common/uhash_us.cpp | 0 .../icu4ros/icu/source/common/uidna.cpp | 0 .../icu4ros/icu/source/common/uinit.c | 0 .../icu4ros/icu/source/common/uinvchar.c | 0 .../icu4ros/icu/source/common/uinvchar.h | 0 .../icu4ros/icu/source/common/uiter.cpp | 0 .../3rdparty/icu4ros/icu/source/common/uloc.c | 0 .../icu4ros/icu/source/common/ulocimp.h | 0 .../icu4ros/icu/source/common/umapfile.c | 0 .../icu4ros/icu/source/common/umapfile.h | 0 .../icu4ros/icu/source/common/umath.c | 0 .../icu4ros/icu/source/common/umutex.c | 0 .../icu4ros/icu/source/common/umutex.h | 0 .../icu4ros/icu/source/common/unames.c | 0 .../icu/source/common/unicode/brkiter.h | 0 .../icu/source/common/unicode/caniter.h | 0 .../icu/source/common/unicode/chariter.h | 0 .../icu4ros/icu/source/common/unicode/dbbi.h | 0 .../icu/source/common/unicode/docmain.h | 0 .../icu4ros/icu/source/common/unicode/locid.h | 0 .../icu/source/common/unicode/normlzr.h | 0 .../icu/source/common/unicode/parseerr.h | 0 .../icu/source/common/unicode/parsepos.h | 0 .../icu/source/common/unicode/platform.h.in | 0 .../icu/source/common/unicode/ppalmos.h | 0 .../icu4ros/icu/source/common/unicode/putil.h | 0 .../icu/source/common/unicode/pwin32.h | 0 .../icu4ros/icu/source/common/unicode/rbbi.h | 0 .../icu4ros/icu/source/common/unicode/rep.h | 0 .../icu/source/common/unicode/resbund.h | 0 .../icu/source/common/unicode/schriter.h | 0 .../icu/source/common/unicode/strenum.h | 0 .../icu/source/common/unicode/symtable.h | 0 .../icu4ros/icu/source/common/unicode/ubidi.h | 0 .../icu4ros/icu/source/common/unicode/ubrk.h | 0 .../icu/source/common/unicode/ucasemap.h | 0 .../icu4ros/icu/source/common/unicode/ucat.h | 0 .../icu4ros/icu/source/common/unicode/uchar.h | 0 .../icu/source/common/unicode/uchriter.h | 0 .../icu/source/common/unicode/uclean.h | 0 .../icu4ros/icu/source/common/unicode/ucnv.h | 0 .../icu/source/common/unicode/ucnv_cb.h | 0 .../icu/source/common/unicode/ucnv_err.h | 0 .../icu/source/common/unicode/uconfig.h | 0 .../icu4ros/icu/source/common/unicode/udata.h | 0 .../icu/source/common/unicode/udeprctd.h | 0 .../icu/source/common/unicode/udraft.h | 0 .../icu4ros/icu/source/common/unicode/uenum.h | 0 .../icu4ros/icu/source/common/unicode/uidna.h | 0 .../icu/source/common/unicode/uintrnal.h | 0 .../icu4ros/icu/source/common/unicode/uiter.h | 0 .../icu4ros/icu/source/common/unicode/uloc.h | 0 .../icu/source/common/unicode/umachine.h | 0 .../icu4ros/icu/source/common/unicode/umisc.h | 0 .../icu/source/common/unicode/unifilt.h | 0 .../icu/source/common/unicode/unifunct.h | 0 .../icu/source/common/unicode/unimatch.h | 0 .../icu/source/common/unicode/uniset.h | 0 .../icu/source/common/unicode/unistr.h | 0 .../icu4ros/icu/source/common/unicode/unorm.h | 0 .../icu/source/common/unicode/uobject.h | 0 .../icu/source/common/unicode/uobslete.h | 0 .../icu/source/common/unicode/urename.h | 0 .../icu4ros/icu/source/common/unicode/urep.h | 0 .../icu4ros/icu/source/common/unicode/ures.h | 0 .../icu/source/common/unicode/uscript.h | 0 .../icu4ros/icu/source/common/unicode/uset.h | 0 .../icu/source/common/unicode/usetiter.h | 0 .../icu/source/common/unicode/ushape.h | 0 .../icu/source/common/unicode/usprep.h | 0 .../icu/source/common/unicode/ustring.h | 0 .../icu/source/common/unicode/usystem.h | 0 .../icu4ros/icu/source/common/unicode/utext.h | 0 .../icu4ros/icu/source/common/unicode/utf.h | 0 .../icu4ros/icu/source/common/unicode/utf16.h | 0 .../icu4ros/icu/source/common/unicode/utf32.h | 0 .../icu4ros/icu/source/common/unicode/utf8.h | 0 .../icu/source/common/unicode/utf_old.h | 0 .../icu/source/common/unicode/utrace.h | 0 .../icu/source/common/unicode/utypes.h | 0 .../icu/source/common/unicode/uversion.h | 0 .../icu4ros/icu/source/common/unifilt.cpp | 0 .../icu4ros/icu/source/common/unifunct.cpp | 0 .../icu4ros/icu/source/common/uniset.cpp | 0 .../icu/source/common/uniset_props.cpp | 0 .../icu4ros/icu/source/common/unisetspan.cpp | 0 .../icu4ros/icu/source/common/unisetspan.h | 0 .../icu4ros/icu/source/common/unistr.cpp | 0 .../icu4ros/icu/source/common/unistr_case.cpp | 0 .../icu4ros/icu/source/common/unistr_cnv.cpp | 0 .../icu/source/common/unistr_props.cpp | 0 .../icu4ros/icu/source/common/unorm.cpp | 0 .../icu4ros/icu/source/common/unorm_it.c | 0 .../icu4ros/icu/source/common/unorm_it.h | 0 .../icu/source/common/unorm_props_data.c | 0 .../icu4ros/icu/source/common/unormcmp.cpp | 0 .../icu4ros/icu/source/common/unormimp.h | 0 .../icu4ros/icu/source/common/uobject.cpp | 0 .../icu4ros/icu/source/common/uprops.c | 0 .../icu4ros/icu/source/common/uprops.h | 0 .../icu4ros/icu/source/common/ures_cnv.c | 0 .../icu4ros/icu/source/common/uresbund.c | 0 .../icu4ros/icu/source/common/uresdata.c | 0 .../icu4ros/icu/source/common/uresdata.h | 0 .../icu4ros/icu/source/common/uresimp.h | 0 .../icu4ros/icu/source/common/usc_impl.c | 0 .../icu4ros/icu/source/common/usc_impl.h | 0 .../icu4ros/icu/source/common/uscript.c | 0 .../icu4ros/icu/source/common/uset.cpp | 0 .../icu4ros/icu/source/common/uset_imp.h | 0 .../icu4ros/icu/source/common/uset_props.cpp | 0 .../icu4ros/icu/source/common/usetiter.cpp | 0 .../icu4ros/icu/source/common/ushape.c | 0 .../icu4ros/icu/source/common/usprep.cpp | 0 .../icu4ros/icu/source/common/ustack.cpp | 0 .../icu4ros/icu/source/common/ustr_cnv.c | 0 .../icu4ros/icu/source/common/ustr_cnv.h | 0 .../icu4ros/icu/source/common/ustr_imp.h | 0 .../icu4ros/icu/source/common/ustr_wcs.c | 0 .../icu4ros/icu/source/common/ustrcase.c | 0 .../icu4ros/icu/source/common/ustrenum.cpp | 0 .../icu4ros/icu/source/common/ustrenum.h | 0 .../icu4ros/icu/source/common/ustrfmt.c | 0 .../icu4ros/icu/source/common/ustrfmt.h | 0 .../icu4ros/icu/source/common/ustring.c | 0 .../icu4ros/icu/source/common/ustrtrns.c | 0 .../icu4ros/icu/source/common/utext.cpp | 0 .../icu4ros/icu/source/common/utf_impl.c | 0 .../icu4ros/icu/source/common/util.cpp | 0 .../3rdparty/icu4ros/icu/source/common/util.h | 0 .../icu4ros/icu/source/common/util_props.cpp | 0 .../icu4ros/icu/source/common/utrace.c | 0 .../icu4ros/icu/source/common/utracimp.h | 0 .../icu4ros/icu/source/common/utrie.c | 0 .../icu4ros/icu/source/common/utrie.h | 0 .../icu4ros/icu/source/common/utypes.c | 0 .../icu4ros/icu/source/common/uvector.cpp | 0 .../icu4ros/icu/source/common/uvector.h | 0 .../icu4ros/icu/source/common/uvectr32.cpp | 0 .../icu4ros/icu/source/common/uvectr32.h | 0 .../icu4ros/icu/source/common/wintz.c | 0 .../icu4ros/icu/source/common/wintz.h | 0 .../3rdparty/icu4ros/icu/source/config.guess | 0 .../3rdparty/icu4ros/icu/source/config.sub | 0 .../icu4ros/icu/source/config/Makefile.inc.in | 0 .../icu/source/config/icu-config-bottom | 0 .../icu4ros/icu/source/config/icu-config-top | 0 .../icu4ros/icu/source/config/icu-config.1.in | 0 .../icu4ros/icu/source/config/make2sh.sed | 0 .../icu4ros/icu/source/config/mh-aix-gcc | 0 .../icu4ros/icu/source/config/mh-aix-va | 0 .../icu/source/config/mh-alpha-linux-cc | 0 .../icu/source/config/mh-alpha-linux-gcc | 0 .../icu4ros/icu/source/config/mh-alpha-osf | 0 .../icu4ros/icu/source/config/mh-beos | 0 .../icu4ros/icu/source/config/mh-bsd-gcc | 0 .../icu4ros/icu/source/config/mh-cygwin | 0 .../icu4ros/icu/source/config/mh-cygwin-msvc | 0 .../icu4ros/icu/source/config/mh-darwin | 0 .../icu4ros/icu/source/config/mh-hpux-acc | 0 .../icu4ros/icu/source/config/mh-hpux-gcc | 0 .../icu4ros/icu/source/config/mh-irix | 0 .../icu4ros/icu/source/config/mh-linux | 0 .../icu4ros/icu/source/config/mh-linux-va | 0 .../icu4ros/icu/source/config/mh-mingw | 0 .../icu4ros/icu/source/config/mh-mpras | 0 .../icu4ros/icu/source/config/mh-os390 | 0 .../icu4ros/icu/source/config/mh-os400 | 0 .../3rdparty/icu4ros/icu/source/config/mh-qnx | 0 .../icu4ros/icu/source/config/mh-solaris | 0 .../icu4ros/icu/source/config/mh-solaris-gcc | 0 .../icu4ros/icu/source/config/mh-unknown | 0 .../icu/source/config/test-icu-config.sh | 0 .../3rdparty/icu4ros/icu/source/configure | 0 .../3rdparty/icu4ros/icu/source/configure.in | 0 .../icu4ros/icu/source/data/Makefile.in | 0 .../icu/source/data/brkitr/brkfiles.mk | 0 .../icu4ros/icu/source/data/brkitr/char.txt | 0 .../icu4ros/icu/source/data/brkitr/en.txt | 0 .../icu4ros/icu/source/data/brkitr/en_US.txt | 0 .../icu/source/data/brkitr/en_US_POSIX.txt | 0 .../icu4ros/icu/source/data/brkitr/ja.txt | 0 .../icu4ros/icu/source/data/brkitr/line.txt | 0 .../icu4ros/icu/source/data/brkitr/root.txt | 0 .../icu4ros/icu/source/data/brkitr/sent.txt | 0 .../icu/source/data/brkitr/thaidict.txt | 0 .../icu4ros/icu/source/data/brkitr/title.txt | 0 .../icu4ros/icu/source/data/brkitr/word.txt | 0 .../icu/source/data/brkitr/word_POSIX.txt | 0 .../icu/source/data/brkitr/word_ja.txt | 0 .../icu4ros/icu/source/data/build.xml | 0 .../icu/source/data/cldr-icu-readme.txt | 0 .../icu4ros/icu/source/data/coll/ar.txt | 0 .../icu4ros/icu/source/data/coll/ar_AE.txt | 0 .../icu4ros/icu/source/data/coll/ar_BH.txt | 0 .../icu4ros/icu/source/data/coll/ar_DZ.txt | 0 .../icu4ros/icu/source/data/coll/ar_EG.txt | 0 .../icu4ros/icu/source/data/coll/ar_IQ.txt | 0 .../icu4ros/icu/source/data/coll/ar_JO.txt | 0 .../icu4ros/icu/source/data/coll/ar_KW.txt | 0 .../icu4ros/icu/source/data/coll/ar_LB.txt | 0 .../icu4ros/icu/source/data/coll/ar_LY.txt | 0 .../icu4ros/icu/source/data/coll/ar_MA.txt | 0 .../icu4ros/icu/source/data/coll/ar_OM.txt | 0 .../icu4ros/icu/source/data/coll/ar_QA.txt | 0 .../icu4ros/icu/source/data/coll/ar_SA.txt | 0 .../icu4ros/icu/source/data/coll/ar_SD.txt | 0 .../icu4ros/icu/source/data/coll/ar_SY.txt | 0 .../icu4ros/icu/source/data/coll/ar_TN.txt | 0 .../icu4ros/icu/source/data/coll/ar_YE.txt | 0 .../icu4ros/icu/source/data/coll/as.txt | 0 .../icu4ros/icu/source/data/coll/as_IN.txt | 0 .../icu4ros/icu/source/data/coll/be.txt | 0 .../icu4ros/icu/source/data/coll/be_BY.txt | 0 .../icu4ros/icu/source/data/coll/bg.txt | 0 .../icu4ros/icu/source/data/coll/bg_BG.txt | 0 .../icu4ros/icu/source/data/coll/bn.txt | 0 .../icu4ros/icu/source/data/coll/ca.txt | 0 .../icu4ros/icu/source/data/coll/ca_ES.txt | 0 .../icu4ros/icu/source/data/coll/colfiles.mk | 0 .../icu4ros/icu/source/data/coll/cs.txt | 0 .../icu4ros/icu/source/data/coll/cs_CZ.txt | 0 .../icu4ros/icu/source/data/coll/cy.txt | 0 .../icu4ros/icu/source/data/coll/da.txt | 0 .../icu4ros/icu/source/data/coll/da_DK.txt | 0 .../icu4ros/icu/source/data/coll/de.txt | 0 .../icu4ros/icu/source/data/coll/de_.txt | 0 .../icu4ros/icu/source/data/coll/de_AT.txt | 0 .../icu4ros/icu/source/data/coll/de_BE.txt | 0 .../icu4ros/icu/source/data/coll/de_CH.txt | 0 .../icu4ros/icu/source/data/coll/de_DE.txt | 0 .../icu4ros/icu/source/data/coll/de_LU.txt | 0 .../icu/source/data/coll/de__PHONEBOOK.txt | 0 .../icu4ros/icu/source/data/coll/el.txt | 0 .../icu4ros/icu/source/data/coll/el_GR.txt | 0 .../icu4ros/icu/source/data/coll/en.txt | 0 .../icu4ros/icu/source/data/coll/en_AU.txt | 0 .../icu4ros/icu/source/data/coll/en_BE.txt | 0 .../icu4ros/icu/source/data/coll/en_BW.txt | 0 .../icu4ros/icu/source/data/coll/en_CA.txt | 0 .../icu4ros/icu/source/data/coll/en_GB.txt | 0 .../icu4ros/icu/source/data/coll/en_HK.txt | 0 .../icu4ros/icu/source/data/coll/en_IE.txt | 0 .../icu4ros/icu/source/data/coll/en_IN.txt | 0 .../icu4ros/icu/source/data/coll/en_MT.txt | 0 .../icu4ros/icu/source/data/coll/en_NZ.txt | 0 .../icu4ros/icu/source/data/coll/en_PH.txt | 0 .../icu4ros/icu/source/data/coll/en_SG.txt | 0 .../icu4ros/icu/source/data/coll/en_US.txt | 0 .../icu/source/data/coll/en_US_POSIX.txt | 0 .../icu4ros/icu/source/data/coll/en_VI.txt | 0 .../icu4ros/icu/source/data/coll/en_ZA.txt | 0 .../icu4ros/icu/source/data/coll/en_ZW.txt | 0 .../icu4ros/icu/source/data/coll/eo.txt | 0 .../icu4ros/icu/source/data/coll/es.txt | 0 .../icu4ros/icu/source/data/coll/es_.txt | 0 .../icu4ros/icu/source/data/coll/es_AR.txt | 0 .../icu4ros/icu/source/data/coll/es_BO.txt | 0 .../icu4ros/icu/source/data/coll/es_CL.txt | 0 .../icu4ros/icu/source/data/coll/es_CO.txt | 0 .../icu4ros/icu/source/data/coll/es_CR.txt | 0 .../icu4ros/icu/source/data/coll/es_DO.txt | 0 .../icu4ros/icu/source/data/coll/es_EC.txt | 0 .../icu4ros/icu/source/data/coll/es_ES.txt | 0 .../icu4ros/icu/source/data/coll/es_GT.txt | 0 .../icu4ros/icu/source/data/coll/es_HN.txt | 0 .../icu4ros/icu/source/data/coll/es_MX.txt | 0 .../icu4ros/icu/source/data/coll/es_NI.txt | 0 .../icu4ros/icu/source/data/coll/es_PA.txt | 0 .../icu4ros/icu/source/data/coll/es_PE.txt | 0 .../icu4ros/icu/source/data/coll/es_PR.txt | 0 .../icu4ros/icu/source/data/coll/es_PY.txt | 0 .../icu4ros/icu/source/data/coll/es_SV.txt | 0 .../icu4ros/icu/source/data/coll/es_US.txt | 0 .../icu4ros/icu/source/data/coll/es_UY.txt | 0 .../icu4ros/icu/source/data/coll/es_VE.txt | 0 .../icu/source/data/coll/es__TRADITIONAL.txt | 0 .../icu4ros/icu/source/data/coll/et.txt | 0 .../icu4ros/icu/source/data/coll/et_EE.txt | 0 .../icu4ros/icu/source/data/coll/fa.txt | 0 .../icu4ros/icu/source/data/coll/fa_AF.txt | 0 .../icu4ros/icu/source/data/coll/fa_IR.txt | 0 .../icu4ros/icu/source/data/coll/fi.txt | 0 .../icu4ros/icu/source/data/coll/fi_FI.txt | 0 .../icu4ros/icu/source/data/coll/fo.txt | 0 .../icu4ros/icu/source/data/coll/fo_FO.txt | 0 .../icu4ros/icu/source/data/coll/fr.txt | 0 .../icu4ros/icu/source/data/coll/fr_BE.txt | 0 .../icu4ros/icu/source/data/coll/fr_CA.txt | 0 .../icu4ros/icu/source/data/coll/fr_CH.txt | 0 .../icu4ros/icu/source/data/coll/fr_FR.txt | 0 .../icu4ros/icu/source/data/coll/fr_LU.txt | 0 .../icu4ros/icu/source/data/coll/ga.txt | 0 .../icu4ros/icu/source/data/coll/ga_IE.txt | 0 .../icu4ros/icu/source/data/coll/gu.txt | 0 .../icu4ros/icu/source/data/coll/gu_IN.txt | 0 .../icu4ros/icu/source/data/coll/haw.txt | 0 .../icu4ros/icu/source/data/coll/he.txt | 0 .../icu4ros/icu/source/data/coll/he_IL.txt | 0 .../icu4ros/icu/source/data/coll/hi.txt | 0 .../icu4ros/icu/source/data/coll/hi_.txt | 0 .../icu4ros/icu/source/data/coll/hi_IN.txt | 0 .../icu/source/data/coll/hi__DIRECT.txt | 0 .../icu4ros/icu/source/data/coll/hr.txt | 0 .../icu4ros/icu/source/data/coll/hr_HR.txt | 0 .../icu4ros/icu/source/data/coll/hu.txt | 0 .../icu4ros/icu/source/data/coll/hu_HU.txt | 0 .../icu4ros/icu/source/data/coll/id.txt | 0 .../icu4ros/icu/source/data/coll/id_ID.txt | 0 .../icu4ros/icu/source/data/coll/in.txt | 0 .../icu4ros/icu/source/data/coll/in_ID.txt | 0 .../icu4ros/icu/source/data/coll/is.txt | 0 .../icu4ros/icu/source/data/coll/is_IS.txt | 0 .../icu4ros/icu/source/data/coll/it.txt | 0 .../icu4ros/icu/source/data/coll/it_CH.txt | 0 .../icu4ros/icu/source/data/coll/it_IT.txt | 0 .../icu4ros/icu/source/data/coll/iw.txt | 0 .../icu4ros/icu/source/data/coll/iw_IL.txt | 0 .../icu4ros/icu/source/data/coll/ja.txt | 0 .../icu4ros/icu/source/data/coll/ja_JP.txt | 0 .../icu4ros/icu/source/data/coll/kk.txt | 0 .../icu4ros/icu/source/data/coll/kk_KZ.txt | 0 .../icu4ros/icu/source/data/coll/kl.txt | 0 .../icu4ros/icu/source/data/coll/kl_GL.txt | 0 .../icu4ros/icu/source/data/coll/km.txt | 0 .../icu4ros/icu/source/data/coll/kn.txt | 0 .../icu4ros/icu/source/data/coll/kn_IN.txt | 0 .../icu4ros/icu/source/data/coll/ko.txt | 0 .../icu4ros/icu/source/data/coll/ko_KR.txt | 0 .../icu4ros/icu/source/data/coll/kok.txt | 0 .../icu4ros/icu/source/data/coll/lt.txt | 0 .../icu4ros/icu/source/data/coll/lt_LT.txt | 0 .../icu4ros/icu/source/data/coll/lv.txt | 0 .../icu4ros/icu/source/data/coll/lv_LV.txt | 0 .../icu4ros/icu/source/data/coll/mk.txt | 0 .../icu4ros/icu/source/data/coll/mk_MK.txt | 0 .../icu4ros/icu/source/data/coll/ml.txt | 0 .../icu4ros/icu/source/data/coll/mr.txt | 0 .../icu4ros/icu/source/data/coll/mr_IN.txt | 0 .../icu4ros/icu/source/data/coll/ms.txt | 0 .../icu4ros/icu/source/data/coll/ms_BN.txt | 0 .../icu4ros/icu/source/data/coll/ms_MY.txt | 0 .../icu4ros/icu/source/data/coll/mt.txt | 0 .../icu4ros/icu/source/data/coll/mt_MT.txt | 0 .../icu4ros/icu/source/data/coll/nb.txt | 0 .../icu4ros/icu/source/data/coll/nb_NO.txt | 0 .../icu4ros/icu/source/data/coll/nl.txt | 0 .../icu4ros/icu/source/data/coll/nl_BE.txt | 0 .../icu4ros/icu/source/data/coll/nl_NL.txt | 0 .../icu4ros/icu/source/data/coll/nn.txt | 0 .../icu4ros/icu/source/data/coll/nn_NO.txt | 0 .../icu4ros/icu/source/data/coll/no.txt | 0 .../icu4ros/icu/source/data/coll/no_NO.txt | 0 .../icu4ros/icu/source/data/coll/om.txt | 0 .../icu4ros/icu/source/data/coll/om_ET.txt | 0 .../icu4ros/icu/source/data/coll/om_KE.txt | 0 .../icu4ros/icu/source/data/coll/or.txt | 0 .../icu4ros/icu/source/data/coll/pa.txt | 0 .../icu4ros/icu/source/data/coll/pa_IN.txt | 0 .../icu4ros/icu/source/data/coll/pl.txt | 0 .../icu4ros/icu/source/data/coll/pl_PL.txt | 0 .../icu4ros/icu/source/data/coll/ps.txt | 0 .../icu4ros/icu/source/data/coll/ps_AF.txt | 0 .../icu4ros/icu/source/data/coll/pt.txt | 0 .../icu4ros/icu/source/data/coll/pt_BR.txt | 0 .../icu4ros/icu/source/data/coll/pt_PT.txt | 0 .../icu4ros/icu/source/data/coll/ro.txt | 0 .../icu4ros/icu/source/data/coll/ro_RO.txt | 0 .../icu4ros/icu/source/data/coll/root.txt | 0 .../icu4ros/icu/source/data/coll/ru.txt | 0 .../icu4ros/icu/source/data/coll/ru_RU.txt | 0 .../icu4ros/icu/source/data/coll/ru_UA.txt | 0 .../icu4ros/icu/source/data/coll/sh.txt | 0 .../icu4ros/icu/source/data/coll/sh_BA.txt | 0 .../icu4ros/icu/source/data/coll/sh_YU.txt | 0 .../icu4ros/icu/source/data/coll/sk.txt | 0 .../icu4ros/icu/source/data/coll/sk_SK.txt | 0 .../icu4ros/icu/source/data/coll/sl.txt | 0 .../icu4ros/icu/source/data/coll/sl_SI.txt | 0 .../icu4ros/icu/source/data/coll/sq.txt | 0 .../icu4ros/icu/source/data/coll/sq_AL.txt | 0 .../icu4ros/icu/source/data/coll/sr.txt | 0 .../icu4ros/icu/source/data/coll/sr_BA.txt | 0 .../icu4ros/icu/source/data/coll/sr_Cyrl.txt | 0 .../icu/source/data/coll/sr_Cyrl_BA.txt | 0 .../icu/source/data/coll/sr_Cyrl_ME.txt | 0 .../icu/source/data/coll/sr_Cyrl_RS.txt | 0 .../icu4ros/icu/source/data/coll/sr_Latn.txt | 0 .../icu/source/data/coll/sr_Latn_BA.txt | 0 .../icu/source/data/coll/sr_Latn_ME.txt | 0 .../icu/source/data/coll/sr_Latn_RS.txt | 0 .../icu4ros/icu/source/data/coll/sr_ME.txt | 0 .../icu4ros/icu/source/data/coll/sr_RS.txt | 0 .../icu4ros/icu/source/data/coll/sv.txt | 0 .../icu4ros/icu/source/data/coll/sv_FI.txt | 0 .../icu4ros/icu/source/data/coll/sv_SE.txt | 0 .../icu4ros/icu/source/data/coll/ta.txt | 0 .../icu4ros/icu/source/data/coll/ta_IN.txt | 0 .../icu4ros/icu/source/data/coll/te.txt | 0 .../icu4ros/icu/source/data/coll/te_IN.txt | 0 .../icu4ros/icu/source/data/coll/th.txt | 0 .../icu4ros/icu/source/data/coll/th_TH.txt | 0 .../icu4ros/icu/source/data/coll/tr.txt | 0 .../icu4ros/icu/source/data/coll/tr_TR.txt | 0 .../icu4ros/icu/source/data/coll/uk.txt | 0 .../icu4ros/icu/source/data/coll/uk_UA.txt | 0 .../icu4ros/icu/source/data/coll/vi.txt | 0 .../icu4ros/icu/source/data/coll/vi_VN.txt | 0 .../icu4ros/icu/source/data/coll/zh.txt | 0 .../icu4ros/icu/source/data/coll/zh_.txt | 0 .../icu4ros/icu/source/data/coll/zh_CN.txt | 0 .../icu4ros/icu/source/data/coll/zh_HK.txt | 0 .../icu4ros/icu/source/data/coll/zh_Hans.txt | 0 .../icu/source/data/coll/zh_Hans_CN.txt | 0 .../icu/source/data/coll/zh_Hans_SG.txt | 0 .../icu4ros/icu/source/data/coll/zh_Hant.txt | 0 .../icu/source/data/coll/zh_Hant_HK.txt | 0 .../icu/source/data/coll/zh_Hant_MO.txt | 0 .../icu/source/data/coll/zh_Hant_TW.txt | 0 .../icu4ros/icu/source/data/coll/zh_MO.txt | 0 .../icu4ros/icu/source/data/coll/zh_SG.txt | 0 .../icu4ros/icu/source/data/coll/zh_TW.txt | 0 .../icu/source/data/coll/zh_TW_STROKE.txt | 0 .../icu/source/data/coll/zh__PINYIN.txt | 0 .../icu4ros/icu/source/data/icu-config.xml | 0 .../icu4ros/icu/source/data/icupkg.inc.in | 0 .../icu4ros/icu/source/data/locales/af.txt | 0 .../icu4ros/icu/source/data/locales/af_NA.txt | 0 .../icu4ros/icu/source/data/locales/af_ZA.txt | 0 .../icu4ros/icu/source/data/locales/am.txt | 0 .../icu4ros/icu/source/data/locales/am_ET.txt | 0 .../icu4ros/icu/source/data/locales/ar.txt | 0 .../icu4ros/icu/source/data/locales/ar_AE.txt | 0 .../icu4ros/icu/source/data/locales/ar_BH.txt | 0 .../icu4ros/icu/source/data/locales/ar_DZ.txt | 0 .../icu4ros/icu/source/data/locales/ar_EG.txt | 0 .../icu4ros/icu/source/data/locales/ar_IQ.txt | 0 .../icu4ros/icu/source/data/locales/ar_JO.txt | 0 .../icu4ros/icu/source/data/locales/ar_KW.txt | 0 .../icu4ros/icu/source/data/locales/ar_LB.txt | 0 .../icu4ros/icu/source/data/locales/ar_LY.txt | 0 .../icu4ros/icu/source/data/locales/ar_MA.txt | 0 .../icu4ros/icu/source/data/locales/ar_OM.txt | 0 .../icu4ros/icu/source/data/locales/ar_QA.txt | 0 .../icu4ros/icu/source/data/locales/ar_SA.txt | 0 .../icu4ros/icu/source/data/locales/ar_SD.txt | 0 .../icu4ros/icu/source/data/locales/ar_SY.txt | 0 .../icu4ros/icu/source/data/locales/ar_TN.txt | 0 .../icu4ros/icu/source/data/locales/ar_YE.txt | 0 .../icu4ros/icu/source/data/locales/as.txt | 0 .../icu4ros/icu/source/data/locales/as_IN.txt | 0 .../icu4ros/icu/source/data/locales/az.txt | 0 .../icu4ros/icu/source/data/locales/az_AZ.txt | 0 .../icu/source/data/locales/az_Cyrl.txt | 0 .../icu/source/data/locales/az_Cyrl_AZ.txt | 0 .../icu/source/data/locales/az_Latn.txt | 0 .../icu/source/data/locales/az_Latn_AZ.txt | 0 .../icu4ros/icu/source/data/locales/be.txt | 0 .../icu4ros/icu/source/data/locales/be_BY.txt | 0 .../icu4ros/icu/source/data/locales/bg.txt | 0 .../icu4ros/icu/source/data/locales/bg_BG.txt | 0 .../icu4ros/icu/source/data/locales/bn.txt | 0 .../icu4ros/icu/source/data/locales/bn_BD.txt | 0 .../icu4ros/icu/source/data/locales/bn_IN.txt | 0 .../icu4ros/icu/source/data/locales/ca.txt | 0 .../icu4ros/icu/source/data/locales/ca_ES.txt | 0 .../icu4ros/icu/source/data/locales/cs.txt | 0 .../icu4ros/icu/source/data/locales/cs_CZ.txt | 0 .../icu4ros/icu/source/data/locales/cy.txt | 0 .../icu4ros/icu/source/data/locales/cy_GB.txt | 0 .../icu4ros/icu/source/data/locales/da.txt | 0 .../icu4ros/icu/source/data/locales/da_DK.txt | 0 .../icu4ros/icu/source/data/locales/de.txt | 0 .../icu4ros/icu/source/data/locales/de_AT.txt | 0 .../icu4ros/icu/source/data/locales/de_BE.txt | 0 .../icu4ros/icu/source/data/locales/de_CH.txt | 0 .../icu4ros/icu/source/data/locales/de_DE.txt | 0 .../icu4ros/icu/source/data/locales/de_LI.txt | 0 .../icu4ros/icu/source/data/locales/de_LU.txt | 0 .../icu4ros/icu/source/data/locales/el.txt | 0 .../icu4ros/icu/source/data/locales/el_CY.txt | 0 .../icu4ros/icu/source/data/locales/el_GR.txt | 0 .../icu4ros/icu/source/data/locales/en.txt | 0 .../icu4ros/icu/source/data/locales/en_AU.txt | 0 .../icu4ros/icu/source/data/locales/en_BE.txt | 0 .../icu4ros/icu/source/data/locales/en_BW.txt | 0 .../icu4ros/icu/source/data/locales/en_BZ.txt | 0 .../icu4ros/icu/source/data/locales/en_CA.txt | 0 .../icu4ros/icu/source/data/locales/en_GB.txt | 0 .../icu4ros/icu/source/data/locales/en_HK.txt | 0 .../icu4ros/icu/source/data/locales/en_IE.txt | 0 .../icu4ros/icu/source/data/locales/en_IN.txt | 0 .../icu4ros/icu/source/data/locales/en_JM.txt | 0 .../icu4ros/icu/source/data/locales/en_MH.txt | 0 .../icu4ros/icu/source/data/locales/en_MT.txt | 0 .../icu4ros/icu/source/data/locales/en_NA.txt | 0 .../icu4ros/icu/source/data/locales/en_NZ.txt | 0 .../icu4ros/icu/source/data/locales/en_PH.txt | 0 .../icu4ros/icu/source/data/locales/en_PK.txt | 0 .../icu4ros/icu/source/data/locales/en_RH.txt | 0 .../icu4ros/icu/source/data/locales/en_SG.txt | 0 .../icu4ros/icu/source/data/locales/en_TT.txt | 0 .../icu4ros/icu/source/data/locales/en_US.txt | 0 .../icu/source/data/locales/en_US_POSIX.txt | 0 .../icu4ros/icu/source/data/locales/en_VI.txt | 0 .../icu4ros/icu/source/data/locales/en_ZA.txt | 0 .../icu4ros/icu/source/data/locales/en_ZW.txt | 0 .../icu4ros/icu/source/data/locales/eo.txt | 0 .../icu4ros/icu/source/data/locales/es.txt | 0 .../icu4ros/icu/source/data/locales/es_AR.txt | 0 .../icu4ros/icu/source/data/locales/es_BO.txt | 0 .../icu4ros/icu/source/data/locales/es_CL.txt | 0 .../icu4ros/icu/source/data/locales/es_CO.txt | 0 .../icu4ros/icu/source/data/locales/es_CR.txt | 0 .../icu4ros/icu/source/data/locales/es_DO.txt | 0 .../icu4ros/icu/source/data/locales/es_EC.txt | 0 .../icu4ros/icu/source/data/locales/es_ES.txt | 0 .../icu4ros/icu/source/data/locales/es_GT.txt | 0 .../icu4ros/icu/source/data/locales/es_HN.txt | 0 .../icu4ros/icu/source/data/locales/es_MX.txt | 0 .../icu4ros/icu/source/data/locales/es_NI.txt | 0 .../icu4ros/icu/source/data/locales/es_PA.txt | 0 .../icu4ros/icu/source/data/locales/es_PE.txt | 0 .../icu4ros/icu/source/data/locales/es_PR.txt | 0 .../icu4ros/icu/source/data/locales/es_PY.txt | 0 .../icu4ros/icu/source/data/locales/es_SV.txt | 0 .../icu4ros/icu/source/data/locales/es_US.txt | 0 .../icu4ros/icu/source/data/locales/es_UY.txt | 0 .../icu4ros/icu/source/data/locales/es_VE.txt | 0 .../icu4ros/icu/source/data/locales/et.txt | 0 .../icu4ros/icu/source/data/locales/et_EE.txt | 0 .../icu4ros/icu/source/data/locales/eu.txt | 0 .../icu4ros/icu/source/data/locales/eu_ES.txt | 0 .../icu4ros/icu/source/data/locales/fa.txt | 0 .../icu4ros/icu/source/data/locales/fa_AF.txt | 0 .../icu4ros/icu/source/data/locales/fa_IR.txt | 0 .../icu4ros/icu/source/data/locales/fi.txt | 0 .../icu4ros/icu/source/data/locales/fi_FI.txt | 0 .../icu4ros/icu/source/data/locales/fo.txt | 0 .../icu4ros/icu/source/data/locales/fo_FO.txt | 0 .../icu4ros/icu/source/data/locales/fr.txt | 0 .../icu4ros/icu/source/data/locales/fr_BE.txt | 0 .../icu4ros/icu/source/data/locales/fr_CA.txt | 0 .../icu4ros/icu/source/data/locales/fr_CH.txt | 0 .../icu4ros/icu/source/data/locales/fr_FR.txt | 0 .../icu4ros/icu/source/data/locales/fr_LU.txt | 0 .../icu4ros/icu/source/data/locales/fr_MC.txt | 0 .../icu4ros/icu/source/data/locales/ga.txt | 0 .../icu4ros/icu/source/data/locales/ga_IE.txt | 0 .../icu4ros/icu/source/data/locales/gl.txt | 0 .../icu4ros/icu/source/data/locales/gl_ES.txt | 0 .../icu4ros/icu/source/data/locales/gu.txt | 0 .../icu4ros/icu/source/data/locales/gu_IN.txt | 0 .../icu4ros/icu/source/data/locales/gv.txt | 0 .../icu4ros/icu/source/data/locales/gv_GB.txt | 0 .../icu4ros/icu/source/data/locales/haw.txt | 0 .../icu/source/data/locales/haw_US.txt | 0 .../icu4ros/icu/source/data/locales/he.txt | 0 .../icu4ros/icu/source/data/locales/he_IL.txt | 0 .../icu4ros/icu/source/data/locales/hi.txt | 0 .../icu4ros/icu/source/data/locales/hi_IN.txt | 0 .../icu4ros/icu/source/data/locales/hr.txt | 0 .../icu4ros/icu/source/data/locales/hr_HR.txt | 0 .../icu4ros/icu/source/data/locales/hu.txt | 0 .../icu4ros/icu/source/data/locales/hu_HU.txt | 0 .../icu4ros/icu/source/data/locales/hy.txt | 0 .../icu4ros/icu/source/data/locales/hy_AM.txt | 0 .../icu/source/data/locales/hy_AM_REVISED.txt | 0 .../icu4ros/icu/source/data/locales/id.txt | 0 .../icu4ros/icu/source/data/locales/id_ID.txt | 0 .../icu4ros/icu/source/data/locales/in.txt | 0 .../icu4ros/icu/source/data/locales/in_ID.txt | 0 .../icu4ros/icu/source/data/locales/is.txt | 0 .../icu4ros/icu/source/data/locales/is_IS.txt | 0 .../icu4ros/icu/source/data/locales/it.txt | 0 .../icu4ros/icu/source/data/locales/it_CH.txt | 0 .../icu4ros/icu/source/data/locales/it_IT.txt | 0 .../icu4ros/icu/source/data/locales/iw.txt | 0 .../icu4ros/icu/source/data/locales/iw_IL.txt | 0 .../icu4ros/icu/source/data/locales/ja.txt | 0 .../icu4ros/icu/source/data/locales/ja_JP.txt | 0 .../source/data/locales/ja_JP_TRADITIONAL.txt | 0 .../icu4ros/icu/source/data/locales/ka.txt | 0 .../icu4ros/icu/source/data/locales/ka_GE.txt | 0 .../icu4ros/icu/source/data/locales/kk.txt | 0 .../icu4ros/icu/source/data/locales/kk_KZ.txt | 0 .../icu4ros/icu/source/data/locales/kl.txt | 0 .../icu4ros/icu/source/data/locales/kl_GL.txt | 0 .../icu4ros/icu/source/data/locales/km.txt | 0 .../icu4ros/icu/source/data/locales/km_KH.txt | 0 .../icu4ros/icu/source/data/locales/kn.txt | 0 .../icu4ros/icu/source/data/locales/kn_IN.txt | 0 .../icu4ros/icu/source/data/locales/ko.txt | 0 .../icu4ros/icu/source/data/locales/ko_KR.txt | 0 .../icu4ros/icu/source/data/locales/kok.txt | 0 .../icu/source/data/locales/kok_IN.txt | 0 .../icu4ros/icu/source/data/locales/kw.txt | 0 .../icu4ros/icu/source/data/locales/kw_GB.txt | 0 .../icu4ros/icu/source/data/locales/lt.txt | 0 .../icu4ros/icu/source/data/locales/lt_LT.txt | 0 .../icu4ros/icu/source/data/locales/lv.txt | 0 .../icu4ros/icu/source/data/locales/lv_LV.txt | 0 .../icu4ros/icu/source/data/locales/mk.txt | 0 .../icu4ros/icu/source/data/locales/mk_MK.txt | 0 .../icu4ros/icu/source/data/locales/ml.txt | 0 .../icu4ros/icu/source/data/locales/ml_IN.txt | 0 .../icu4ros/icu/source/data/locales/mr.txt | 0 .../icu4ros/icu/source/data/locales/mr_IN.txt | 0 .../icu4ros/icu/source/data/locales/ms.txt | 0 .../icu4ros/icu/source/data/locales/ms_BN.txt | 0 .../icu4ros/icu/source/data/locales/ms_MY.txt | 0 .../icu4ros/icu/source/data/locales/mt.txt | 0 .../icu4ros/icu/source/data/locales/mt_MT.txt | 0 .../icu4ros/icu/source/data/locales/nb.txt | 0 .../icu4ros/icu/source/data/locales/nb_NO.txt | 0 .../icu4ros/icu/source/data/locales/nl.txt | 0 .../icu4ros/icu/source/data/locales/nl_BE.txt | 0 .../icu4ros/icu/source/data/locales/nl_NL.txt | 0 .../icu4ros/icu/source/data/locales/nn.txt | 0 .../icu4ros/icu/source/data/locales/nn_NO.txt | 0 .../icu4ros/icu/source/data/locales/no.txt | 0 .../icu4ros/icu/source/data/locales/no_NO.txt | 0 .../icu/source/data/locales/no_NO_NY.txt | 0 .../icu4ros/icu/source/data/locales/om.txt | 0 .../icu4ros/icu/source/data/locales/om_ET.txt | 0 .../icu4ros/icu/source/data/locales/om_KE.txt | 0 .../icu4ros/icu/source/data/locales/or.txt | 0 .../icu4ros/icu/source/data/locales/or_IN.txt | 0 .../icu4ros/icu/source/data/locales/pa.txt | 0 .../icu/source/data/locales/pa_Guru.txt | 0 .../icu/source/data/locales/pa_Guru_IN.txt | 0 .../icu4ros/icu/source/data/locales/pa_IN.txt | 0 .../icu4ros/icu/source/data/locales/pl.txt | 0 .../icu4ros/icu/source/data/locales/pl_PL.txt | 0 .../icu4ros/icu/source/data/locales/ps.txt | 0 .../icu4ros/icu/source/data/locales/ps_AF.txt | 0 .../icu4ros/icu/source/data/locales/pt.txt | 0 .../icu4ros/icu/source/data/locales/pt_BR.txt | 0 .../icu4ros/icu/source/data/locales/pt_PT.txt | 0 .../icu/source/data/locales/resfiles.mk | 0 .../icu4ros/icu/source/data/locales/ro.txt | 0 .../icu4ros/icu/source/data/locales/ro_RO.txt | 0 .../icu4ros/icu/source/data/locales/root.txt | 0 .../icu4ros/icu/source/data/locales/ru.txt | 0 .../icu4ros/icu/source/data/locales/ru_RU.txt | 0 .../icu4ros/icu/source/data/locales/ru_UA.txt | 0 .../icu4ros/icu/source/data/locales/sh.txt | 0 .../icu4ros/icu/source/data/locales/sh_BA.txt | 0 .../icu4ros/icu/source/data/locales/sh_CS.txt | 0 .../icu4ros/icu/source/data/locales/sh_YU.txt | 0 .../icu4ros/icu/source/data/locales/sk.txt | 0 .../icu4ros/icu/source/data/locales/sk_SK.txt | 0 .../icu4ros/icu/source/data/locales/sl.txt | 0 .../icu4ros/icu/source/data/locales/sl_SI.txt | 0 .../icu4ros/icu/source/data/locales/so.txt | 0 .../icu4ros/icu/source/data/locales/so_DJ.txt | 0 .../icu4ros/icu/source/data/locales/so_ET.txt | 0 .../icu4ros/icu/source/data/locales/so_KE.txt | 0 .../icu4ros/icu/source/data/locales/so_SO.txt | 0 .../icu4ros/icu/source/data/locales/sq.txt | 0 .../icu4ros/icu/source/data/locales/sq_AL.txt | 0 .../icu4ros/icu/source/data/locales/sr.txt | 0 .../icu4ros/icu/source/data/locales/sr_BA.txt | 0 .../icu4ros/icu/source/data/locales/sr_CS.txt | 0 .../icu/source/data/locales/sr_Cyrl.txt | 0 .../icu/source/data/locales/sr_Cyrl_BA.txt | 0 .../icu/source/data/locales/sr_Cyrl_CS.txt | 0 .../icu/source/data/locales/sr_Cyrl_ME.txt | 0 .../icu/source/data/locales/sr_Cyrl_RS.txt | 0 .../icu/source/data/locales/sr_Cyrl_YU.txt | 0 .../icu/source/data/locales/sr_Latn.txt | 0 .../icu/source/data/locales/sr_Latn_BA.txt | 0 .../icu/source/data/locales/sr_Latn_CS.txt | 0 .../icu/source/data/locales/sr_Latn_ME.txt | 0 .../icu/source/data/locales/sr_Latn_RS.txt | 0 .../icu/source/data/locales/sr_Latn_YU.txt | 0 .../icu4ros/icu/source/data/locales/sr_ME.txt | 0 .../icu4ros/icu/source/data/locales/sr_RS.txt | 0 .../icu4ros/icu/source/data/locales/sr_YU.txt | 0 .../icu4ros/icu/source/data/locales/sv.txt | 0 .../icu4ros/icu/source/data/locales/sv_FI.txt | 0 .../icu4ros/icu/source/data/locales/sv_SE.txt | 0 .../icu4ros/icu/source/data/locales/sw.txt | 0 .../icu4ros/icu/source/data/locales/sw_KE.txt | 0 .../icu4ros/icu/source/data/locales/sw_TZ.txt | 0 .../icu4ros/icu/source/data/locales/ta.txt | 0 .../icu4ros/icu/source/data/locales/ta_IN.txt | 0 .../icu4ros/icu/source/data/locales/te.txt | 0 .../icu4ros/icu/source/data/locales/te_IN.txt | 0 .../icu4ros/icu/source/data/locales/th.txt | 0 .../icu4ros/icu/source/data/locales/th_TH.txt | 0 .../source/data/locales/th_TH_TRADITIONAL.txt | 0 .../icu4ros/icu/source/data/locales/ti.txt | 0 .../icu4ros/icu/source/data/locales/ti_ER.txt | 0 .../icu4ros/icu/source/data/locales/ti_ET.txt | 0 .../icu4ros/icu/source/data/locales/tr.txt | 0 .../icu4ros/icu/source/data/locales/tr_TR.txt | 0 .../icu4ros/icu/source/data/locales/uk.txt | 0 .../icu4ros/icu/source/data/locales/uk_UA.txt | 0 .../icu4ros/icu/source/data/locales/ur.txt | 0 .../icu4ros/icu/source/data/locales/ur_IN.txt | 0 .../icu4ros/icu/source/data/locales/ur_PK.txt | 0 .../icu4ros/icu/source/data/locales/uz.txt | 0 .../icu4ros/icu/source/data/locales/uz_AF.txt | 0 .../icu/source/data/locales/uz_Arab.txt | 0 .../icu/source/data/locales/uz_Arab_AF.txt | 0 .../icu/source/data/locales/uz_Cyrl.txt | 0 .../icu/source/data/locales/uz_Cyrl_UZ.txt | 0 .../icu/source/data/locales/uz_Latn.txt | 0 .../icu/source/data/locales/uz_Latn_UZ.txt | 0 .../icu4ros/icu/source/data/locales/uz_UZ.txt | 0 .../icu4ros/icu/source/data/locales/vi.txt | 0 .../icu4ros/icu/source/data/locales/vi_VN.txt | 0 .../icu4ros/icu/source/data/locales/zh.txt | 0 .../icu4ros/icu/source/data/locales/zh_CN.txt | 0 .../icu4ros/icu/source/data/locales/zh_HK.txt | 0 .../icu/source/data/locales/zh_Hans.txt | 0 .../icu/source/data/locales/zh_Hans_CN.txt | 0 .../icu/source/data/locales/zh_Hans_SG.txt | 0 .../icu/source/data/locales/zh_Hant.txt | 0 .../icu/source/data/locales/zh_Hant_HK.txt | 0 .../icu/source/data/locales/zh_Hant_MO.txt | 0 .../icu/source/data/locales/zh_Hant_TW.txt | 0 .../icu4ros/icu/source/data/locales/zh_MO.txt | 0 .../icu4ros/icu/source/data/locales/zh_SG.txt | 0 .../icu4ros/icu/source/data/locales/zh_TW.txt | 0 .../icu4ros/icu/source/data/makedata.mak | 0 .../icu4ros/icu/source/data/makedata.vcproj | 0 .../source/data/mappings/cns-11643-1992.ucm | 0 .../icu/source/data/mappings/convrtrs.txt | 0 .../source/data/mappings/ebcdic-xml-us.ucm | 0 .../icu/source/data/mappings/gb18030.ucm | 0 .../data/mappings/ibm-1006_P100-1995.ucm | 0 .../data/mappings/ibm-1025_P100-1995.ucm | 0 .../data/mappings/ibm-1026_P100-1995.ucm | 0 .../data/mappings/ibm-1047_P100-1995.ucm | 0 .../data/mappings/ibm-1051_P100-1995.ucm | 0 .../data/mappings/ibm-1089_P100-1995.ucm | 0 .../data/mappings/ibm-1097_P100-1995.ucm | 0 .../data/mappings/ibm-1098_P100-1995.ucm | 0 .../data/mappings/ibm-1112_P100-1995.ucm | 0 .../data/mappings/ibm-1122_P100-1999.ucm | 0 .../data/mappings/ibm-1123_P100-1995.ucm | 0 .../data/mappings/ibm-1124_P100-1996.ucm | 0 .../data/mappings/ibm-1125_P100-1997.ucm | 0 .../data/mappings/ibm-1129_P100-1997.ucm | 0 .../data/mappings/ibm-1130_P100-1997.ucm | 0 .../data/mappings/ibm-1131_P100-1997.ucm | 0 .../data/mappings/ibm-1132_P100-1998.ucm | 0 .../data/mappings/ibm-1133_P100-1997.ucm | 0 .../data/mappings/ibm-1137_P100-1999.ucm | 0 .../data/mappings/ibm-1140_P100-1997.ucm | 0 .../data/mappings/ibm-1141_P100-1997.ucm | 0 .../data/mappings/ibm-1142_P100-1997.ucm | 0 .../data/mappings/ibm-1143_P100-1997.ucm | 0 .../data/mappings/ibm-1144_P100-1997.ucm | 0 .../data/mappings/ibm-1145_P100-1997.ucm | 0 .../data/mappings/ibm-1146_P100-1997.ucm | 0 .../data/mappings/ibm-1147_P100-1997.ucm | 0 .../data/mappings/ibm-1148_P100-1997.ucm | 0 .../data/mappings/ibm-1149_P100-1997.ucm | 0 .../data/mappings/ibm-1153_P100-1999.ucm | 0 .../data/mappings/ibm-1154_P100-1999.ucm | 0 .../data/mappings/ibm-1155_P100-1999.ucm | 0 .../data/mappings/ibm-1156_P100-1999.ucm | 0 .../data/mappings/ibm-1157_P100-1999.ucm | 0 .../data/mappings/ibm-1158_P100-1999.ucm | 0 .../data/mappings/ibm-1160_P100-1999.ucm | 0 .../data/mappings/ibm-1162_P100-1999.ucm | 0 .../data/mappings/ibm-1164_P100-1999.ucm | 0 .../data/mappings/ibm-1168_P100-2002.ucm | 0 .../data/mappings/ibm-1250_P100-1995.ucm | 0 .../data/mappings/ibm-1251_P100-1995.ucm | 0 .../data/mappings/ibm-1252_P100-2000.ucm | 0 .../data/mappings/ibm-1253_P100-1995.ucm | 0 .../data/mappings/ibm-1254_P100-1995.ucm | 0 .../data/mappings/ibm-1255_P100-1995.ucm | 0 .../data/mappings/ibm-1256_P110-1997.ucm | 0 .../data/mappings/ibm-1257_P100-1995.ucm | 0 .../data/mappings/ibm-1258_P100-1997.ucm | 0 .../data/mappings/ibm-12712_P100-1998.ucm | 0 .../data/mappings/ibm-1276_P100-1995.ucm | 0 .../data/mappings/ibm-1363_P110-1997.ucm | 0 .../data/mappings/ibm-1363_P11B-1998.ucm | 0 .../data/mappings/ibm-1364_P110-2007.ucm | 0 .../data/mappings/ibm-1371_P100-1999.ucm | 0 .../data/mappings/ibm-1373_P100-2002.ucm | 0 .../data/mappings/ibm-1375_P100-2007.ucm | 0 .../data/mappings/ibm-1383_P110-1999.ucm | 0 .../data/mappings/ibm-1386_P100-2001.ucm | 0 .../data/mappings/ibm-1388_P103-2001.ucm | 0 .../data/mappings/ibm-1390_P110-2003.ucm | 0 .../data/mappings/ibm-1399_P110-2003.ucm | 0 .../data/mappings/ibm-16684_P110-2003.ucm | 0 .../data/mappings/ibm-16804_X110-1999.ucm | 0 .../data/mappings/ibm-273_P100-1995.ucm | 0 .../data/mappings/ibm-277_P100-1995.ucm | 0 .../data/mappings/ibm-278_P100-1995.ucm | 0 .../data/mappings/ibm-280_P100-1995.ucm | 0 .../data/mappings/ibm-284_P100-1995.ucm | 0 .../data/mappings/ibm-285_P100-1995.ucm | 0 .../data/mappings/ibm-290_P100-1995.ucm | 0 .../data/mappings/ibm-297_P100-1995.ucm | 0 .../data/mappings/ibm-33722_P120-1999.ucm | 0 .../mappings/ibm-33722_P12A_P12A-2004_U2.ucm | 0 .../source/data/mappings/ibm-37_P100-1995.ucm | 0 .../data/mappings/ibm-420_X120-1999.ucm | 0 .../data/mappings/ibm-424_P100-1995.ucm | 0 .../data/mappings/ibm-437_P100-1995.ucm | 0 .../data/mappings/ibm-4517_P100-2005.ucm | 0 .../data/mappings/ibm-4899_P100-1998.ucm | 0 .../data/mappings/ibm-4909_P100-1999.ucm | 0 .../data/mappings/ibm-4971_P100-1999.ucm | 0 .../data/mappings/ibm-500_P100-1995.ucm | 0 .../data/mappings/ibm-5012_P100-1999.ucm | 0 .../data/mappings/ibm-5123_P100-1999.ucm | 0 .../data/mappings/ibm-5346_P100-1998.ucm | 0 .../data/mappings/ibm-5347_P100-1998.ucm | 0 .../data/mappings/ibm-5348_P100-1997.ucm | 0 .../data/mappings/ibm-5349_P100-1998.ucm | 0 .../data/mappings/ibm-5350_P100-1998.ucm | 0 .../data/mappings/ibm-5351_P100-1998.ucm | 0 .../data/mappings/ibm-5352_P100-1998.ucm | 0 .../data/mappings/ibm-5353_P100-1998.ucm | 0 .../data/mappings/ibm-5354_P100-1998.ucm | 0 .../data/mappings/ibm-5471_P100-2006.ucm | 0 .../data/mappings/ibm-5478_P100-1995.ucm | 0 .../data/mappings/ibm-720_P100-1997.ucm | 0 .../data/mappings/ibm-737_P100-1997.ucm | 0 .../data/mappings/ibm-775_P100-1996.ucm | 0 .../data/mappings/ibm-803_P100-1999.ucm | 0 .../data/mappings/ibm-813_P100-1995.ucm | 0 .../data/mappings/ibm-838_P100-1995.ucm | 0 .../data/mappings/ibm-8482_P100-1999.ucm | 0 .../data/mappings/ibm-850_P100-1995.ucm | 0 .../data/mappings/ibm-851_P100-1995.ucm | 0 .../data/mappings/ibm-852_P100-1995.ucm | 0 .../data/mappings/ibm-855_P100-1995.ucm | 0 .../data/mappings/ibm-856_P100-1995.ucm | 0 .../data/mappings/ibm-857_P100-1995.ucm | 0 .../data/mappings/ibm-858_P100-1997.ucm | 0 .../data/mappings/ibm-860_P100-1995.ucm | 0 .../data/mappings/ibm-861_P100-1995.ucm | 0 .../data/mappings/ibm-862_P100-1995.ucm | 0 .../data/mappings/ibm-863_P100-1995.ucm | 0 .../data/mappings/ibm-864_X110-1999.ucm | 0 .../data/mappings/ibm-865_P100-1995.ucm | 0 .../data/mappings/ibm-866_P100-1995.ucm | 0 .../data/mappings/ibm-867_P100-1998.ucm | 0 .../data/mappings/ibm-868_P100-1995.ucm | 0 .../data/mappings/ibm-869_P100-1995.ucm | 0 .../data/mappings/ibm-870_P100-1995.ucm | 0 .../data/mappings/ibm-871_P100-1995.ucm | 0 .../data/mappings/ibm-874_P100-1995.ucm | 0 .../data/mappings/ibm-875_P100-1995.ucm | 0 .../data/mappings/ibm-878_P100-1996.ucm | 0 .../data/mappings/ibm-897_P100-1995.ucm | 0 .../data/mappings/ibm-9005_X110-2007.ucm | 0 .../data/mappings/ibm-901_P100-1999.ucm | 0 .../data/mappings/ibm-902_P100-1999.ucm | 0 .../data/mappings/ibm-9067_X100-2005.ucm | 0 .../data/mappings/ibm-912_P100-1995.ucm | 0 .../data/mappings/ibm-913_P100-2000.ucm | 0 .../data/mappings/ibm-914_P100-1995.ucm | 0 .../data/mappings/ibm-915_P100-1995.ucm | 0 .../data/mappings/ibm-916_P100-1995.ucm | 0 .../data/mappings/ibm-918_P100-1995.ucm | 0 .../data/mappings/ibm-920_P100-1995.ucm | 0 .../data/mappings/ibm-921_P100-1995.ucm | 0 .../data/mappings/ibm-922_P100-1999.ucm | 0 .../data/mappings/ibm-923_P100-1998.ucm | 0 .../data/mappings/ibm-930_P120-1999.ucm | 0 .../data/mappings/ibm-933_P110-1995.ucm | 0 .../data/mappings/ibm-935_P110-1999.ucm | 0 .../data/mappings/ibm-937_P110-1999.ucm | 0 .../data/mappings/ibm-939_P120-1999.ucm | 0 .../data/mappings/ibm-942_P12A-1999.ucm | 0 .../data/mappings/ibm-943_P130-1999.ucm | 0 .../data/mappings/ibm-943_P15A-2003.ucm | 0 .../data/mappings/ibm-9447_P100-2002.ucm | 0 .../data/mappings/ibm-9448_X100-2005.ucm | 0 .../data/mappings/ibm-9449_P100-2002.ucm | 0 .../data/mappings/ibm-949_P110-1999.ucm | 0 .../data/mappings/ibm-949_P11A-1999.ucm | 0 .../data/mappings/ibm-950_P110-1999.ucm | 0 .../data/mappings/ibm-954_P101-2007.ucm | 0 .../data/mappings/ibm-964_P110-1999.ucm | 0 .../mappings/ibm-970_P110_P110-2006_U2.ucm | 0 .../data/mappings/ibm-971_P100-1995.ucm | 0 .../data/mappings/icu-internal-25546.ucm | 0 .../source/data/mappings/iso-8859_10-1998.ucm | 0 .../source/data/mappings/iso-8859_11-2001.ucm | 0 .../source/data/mappings/iso-8859_14-1998.ucm | 0 .../icu/source/data/mappings/iso-ir-165.ucm | 0 .../icu/source/data/mappings/jisx-208.ucm | 0 .../icu/source/data/mappings/jisx-212.ucm | 0 .../icu/source/data/mappings/lmb-excp.ucm | 0 .../source/data/mappings/macos-0_2-10.2.ucm | 0 .../source/data/mappings/macos-29-10.2.ucm | 0 .../source/data/mappings/macos-35-10.2.ucm | 0 .../source/data/mappings/macos-6_2-10.4.ucm | 0 .../source/data/mappings/macos-7_3-10.2.ucm | 0 .../icu/source/data/mappings/ucmcore.mk | 0 .../icu/source/data/mappings/ucmebcdic.mk | 0 .../icu/source/data/mappings/ucmfiles.mk | 0 .../source/data/mappings/windows-874-2000.ucm | 0 .../source/data/mappings/windows-936-2000.ucm | 0 .../source/data/mappings/windows-949-2000.ucm | 0 .../source/data/mappings/windows-950-2000.ucm | 0 .../icu/source/data/misc/NamePrepProfile.txt | 0 .../icu4ros/icu/source/data/misc/icudata.rc | 0 .../icu/source/data/misc/metazoneInfo.txt | 0 .../icu4ros/icu/source/data/misc/miscfiles.mk | 0 .../icu/source/data/misc/supplementalData.txt | 0 .../icu4ros/icu/source/data/misc/zoneinfo.txt | 0 .../icu4ros/icu/source/data/rbnf/da.txt | 0 .../icu4ros/icu/source/data/rbnf/de.txt | 0 .../icu4ros/icu/source/data/rbnf/el.txt | 0 .../icu4ros/icu/source/data/rbnf/en.txt | 0 .../icu4ros/icu/source/data/rbnf/en_GB.txt | 0 .../icu4ros/icu/source/data/rbnf/eo.txt | 0 .../icu4ros/icu/source/data/rbnf/es.txt | 0 .../icu4ros/icu/source/data/rbnf/fa.txt | 0 .../icu4ros/icu/source/data/rbnf/fa_AF.txt | 0 .../icu4ros/icu/source/data/rbnf/fr.txt | 0 .../icu4ros/icu/source/data/rbnf/fr_BE.txt | 0 .../icu4ros/icu/source/data/rbnf/fr_CH.txt | 0 .../icu4ros/icu/source/data/rbnf/ga.txt | 0 .../icu4ros/icu/source/data/rbnf/he.txt | 0 .../icu4ros/icu/source/data/rbnf/it.txt | 0 .../icu4ros/icu/source/data/rbnf/ja.txt | 0 .../icu4ros/icu/source/data/rbnf/mt.txt | 0 .../icu4ros/icu/source/data/rbnf/nl.txt | 0 .../icu4ros/icu/source/data/rbnf/pl.txt | 0 .../icu4ros/icu/source/data/rbnf/pt.txt | 0 .../icu4ros/icu/source/data/rbnf/rbnffiles.mk | 0 .../icu4ros/icu/source/data/rbnf/root.txt | 0 .../icu4ros/icu/source/data/rbnf/ru.txt | 0 .../icu4ros/icu/source/data/rbnf/sv.txt | 0 .../icu4ros/icu/source/data/rbnf/th.txt | 0 .../icu4ros/icu/source/data/rbnf/uk.txt | 0 .../icu/source/data/translit/Any_Accents.txt | 0 .../source/data/translit/Any_Publishing.txt | 0 .../icu/source/data/translit/Arabic_Latin.txt | 0 .../data/translit/Bengali_Devanagari.txt | 0 .../source/data/translit/Bengali_Gujarati.txt | 0 .../source/data/translit/Bengali_Gurmukhi.txt | 0 .../data/translit/Bengali_InterIndic.txt | 0 .../source/data/translit/Bengali_Kannada.txt | 0 .../source/data/translit/Bengali_Latin.txt | 0 .../data/translit/Bengali_Malayalam.txt | 0 .../source/data/translit/Bengali_Oriya.txt | 0 .../source/data/translit/Bengali_Tamil.txt | 0 .../source/data/translit/Bengali_Telugu.txt | 0 .../source/data/translit/Cyrillic_Latin.txt | 0 .../data/translit/Devanagari_Bengali.txt | 0 .../data/translit/Devanagari_Gujarati.txt | 0 .../data/translit/Devanagari_Gurmukhi.txt | 0 .../data/translit/Devanagari_InterIndic.txt | 0 .../data/translit/Devanagari_Kannada.txt | 0 .../source/data/translit/Devanagari_Latin.txt | 0 .../data/translit/Devanagari_Malayalam.txt | 0 .../source/data/translit/Devanagari_Oriya.txt | 0 .../source/data/translit/Devanagari_Tamil.txt | 0 .../data/translit/Devanagari_Telugu.txt | 0 .../data/translit/Fullwidth_Halfwidth.txt | 0 .../source/data/translit/Georgian_Latin.txt | 0 .../icu/source/data/translit/Greek_Latin.txt | 0 .../data/translit/Greek_Latin_UNGEGN.txt | 0 .../source/data/translit/Gujarati_Bengali.txt | 0 .../data/translit/Gujarati_Devanagari.txt | 0 .../data/translit/Gujarati_Gurmukhi.txt | 0 .../data/translit/Gujarati_InterIndic.txt | 0 .../source/data/translit/Gujarati_Kannada.txt | 0 .../source/data/translit/Gujarati_Latin.txt | 0 .../data/translit/Gujarati_Malayalam.txt | 0 .../source/data/translit/Gujarati_Oriya.txt | 0 .../source/data/translit/Gujarati_Tamil.txt | 0 .../source/data/translit/Gujarati_Telugu.txt | 0 .../source/data/translit/Gurmukhi_Bengali.txt | 0 .../data/translit/Gurmukhi_Devanagari.txt | 0 .../data/translit/Gurmukhi_Gujarati.txt | 0 .../data/translit/Gurmukhi_InterIndic.txt | 0 .../source/data/translit/Gurmukhi_Kannada.txt | 0 .../source/data/translit/Gurmukhi_Latin.txt | 0 .../data/translit/Gurmukhi_Malayalam.txt | 0 .../source/data/translit/Gurmukhi_Oriya.txt | 0 .../source/data/translit/Gurmukhi_Tamil.txt | 0 .../source/data/translit/Gurmukhi_Telugu.txt | 0 .../icu/source/data/translit/Han_Latin.txt | 0 .../source/data/translit/Han_Spacedhan.txt | 0 .../icu/source/data/translit/Hangul_Latin.txt | 0 .../icu/source/data/translit/Hebrew_Latin.txt | 0 .../data/translit/Hiragana_Katakana.txt | 0 .../source/data/translit/Hiragana_Latin.txt | 0 .../data/translit/InterIndic_Bengali.txt | 0 .../data/translit/InterIndic_Devanagari.txt | 0 .../data/translit/InterIndic_Gujarati.txt | 0 .../data/translit/InterIndic_Gurmukhi.txt | 0 .../data/translit/InterIndic_Kannada.txt | 0 .../source/data/translit/InterIndic_Latin.txt | 0 .../data/translit/InterIndic_Malayalam.txt | 0 .../source/data/translit/InterIndic_Oriya.txt | 0 .../source/data/translit/InterIndic_Tamil.txt | 0 .../data/translit/InterIndic_Telugu.txt | 0 .../icu/source/data/translit/Jamo_Latin.txt | 0 .../source/data/translit/Kannada_Bengali.txt | 0 .../data/translit/Kannada_Devanagari.txt | 0 .../source/data/translit/Kannada_Gujarati.txt | 0 .../source/data/translit/Kannada_Gurmukhi.txt | 0 .../data/translit/Kannada_InterIndic.txt | 0 .../source/data/translit/Kannada_Latin.txt | 0 .../data/translit/Kannada_Malayalam.txt | 0 .../source/data/translit/Kannada_Oriya.txt | 0 .../source/data/translit/Kannada_Tamil.txt | 0 .../source/data/translit/Kannada_Telugu.txt | 0 .../source/data/translit/Latin_Armenian.txt | 0 .../source/data/translit/Latin_Bengali.txt | 0 .../data/translit/Latin_ConjoiningJamo.txt | 0 .../source/data/translit/Latin_Devanagari.txt | 0 .../source/data/translit/Latin_Gujarati.txt | 0 .../source/data/translit/Latin_Gurmukhi.txt | 0 .../icu/source/data/translit/Latin_Hangul.txt | 0 .../source/data/translit/Latin_InterIndic.txt | 0 .../icu/source/data/translit/Latin_Jamo.txt | 0 .../source/data/translit/Latin_Kannada.txt | 0 .../source/data/translit/Latin_Katakana.txt | 0 .../source/data/translit/Latin_Malayalam.txt | 0 .../data/translit/Latin_NumericPinyin.txt | 0 .../icu/source/data/translit/Latin_Oriya.txt | 0 .../icu/source/data/translit/Latin_Tamil.txt | 0 .../icu/source/data/translit/Latin_Telugu.txt | 0 .../icu/source/data/translit/Latin_Thai.txt | 0 .../data/translit/Malayalam_Bengali.txt | 0 .../data/translit/Malayalam_Devanagari.txt | 0 .../data/translit/Malayalam_Gujarati.txt | 0 .../data/translit/Malayalam_Gurmukhi.txt | 0 .../data/translit/Malayalam_InterIndic.txt | 0 .../data/translit/Malayalam_Kannada.txt | 0 .../source/data/translit/Malayalam_Latin.txt | 0 .../source/data/translit/Malayalam_Oriya.txt | 0 .../source/data/translit/Malayalam_Tamil.txt | 0 .../source/data/translit/Malayalam_Telugu.txt | 0 .../source/data/translit/Oriya_Bengali.txt | 0 .../source/data/translit/Oriya_Devanagari.txt | 0 .../source/data/translit/Oriya_Gujarati.txt | 0 .../source/data/translit/Oriya_Gurmukhi.txt | 0 .../source/data/translit/Oriya_InterIndic.txt | 0 .../source/data/translit/Oriya_Kannada.txt | 0 .../icu/source/data/translit/Oriya_Latin.txt | 0 .../source/data/translit/Oriya_Malayalam.txt | 0 .../icu/source/data/translit/Oriya_Tamil.txt | 0 .../icu/source/data/translit/Oriya_Telugu.txt | 0 .../data/translit/Pinyin_NumericPinyin.txt | 0 .../data/translit/Simplified_Traditional.txt | 0 .../icu/source/data/translit/Syriac_Latin.txt | 0 .../source/data/translit/Tamil_Bengali.txt | 0 .../source/data/translit/Tamil_Devanagari.txt | 0 .../source/data/translit/Tamil_Gujarati.txt | 0 .../source/data/translit/Tamil_Gurmukhi.txt | 0 .../source/data/translit/Tamil_InterIndic.txt | 0 .../source/data/translit/Tamil_Kannada.txt | 0 .../icu/source/data/translit/Tamil_Latin.txt | 0 .../source/data/translit/Tamil_Malayalam.txt | 0 .../icu/source/data/translit/Tamil_Oriya.txt | 0 .../icu/source/data/translit/Tamil_Telugu.txt | 0 .../source/data/translit/Telugu_Bengali.txt | 0 .../data/translit/Telugu_Devanagari.txt | 0 .../source/data/translit/Telugu_Gujarati.txt | 0 .../source/data/translit/Telugu_Gurmukhi.txt | 0 .../data/translit/Telugu_InterIndic.txt | 0 .../source/data/translit/Telugu_Kannada.txt | 0 .../icu/source/data/translit/Telugu_Latin.txt | 0 .../source/data/translit/Telugu_Malayalam.txt | 0 .../icu/source/data/translit/Telugu_Oriya.txt | 0 .../icu/source/data/translit/Telugu_Tamil.txt | 0 .../icu/source/data/translit/Thaana_Latin.txt | 0 .../data/translit/ThaiLogical_Latin.txt | 0 .../icu/source/data/translit/Thai_Latin.txt | 0 .../source/data/translit/Thai_ThaiLogical.txt | 0 .../source/data/translit/Thai_ThaiSemi.txt | 0 .../icu4ros/icu/source/data/translit/el.txt | 0 .../icu4ros/icu/source/data/translit/en.txt | 0 .../icu4ros/icu/source/data/translit/root.txt | 0 .../icu/source/data/translit/trnsfiles.mk | 0 .../icu/source/data/unidata/BidiMirroring.txt | 0 .../icu/source/data/unidata/Blocks.txt | 0 .../icu/source/data/unidata/CaseFolding.txt | 0 .../icu/source/data/unidata/DerivedAge.txt | 0 .../source/data/unidata/DerivedBidiClass.txt | 0 .../data/unidata/DerivedCoreProperties.txt | 0 .../data/unidata/DerivedJoiningGroup.txt | 0 .../data/unidata/DerivedJoiningType.txt | 0 .../unidata/DerivedNormalizationProps.txt | 0 .../data/unidata/DerivedNumericValues.txt | 0 .../source/data/unidata/EastAsianWidth.txt | 0 .../icu/source/data/unidata/FractionalUCA.txt | 0 .../data/unidata/GraphemeBreakProperty.txt | 0 .../icu/source/data/unidata/LineBreak.txt | 0 .../data/unidata/NormalizationCorrections.txt | 0 .../source/data/unidata/NormalizationTest.txt | 0 .../icu/source/data/unidata/PropList.txt | 0 .../source/data/unidata/PropertyAliases.txt | 0 .../data/unidata/PropertyValueAliases.txt | 0 .../icu/source/data/unidata/Scripts.txt | 0 .../data/unidata/SentenceBreakProperty.txt | 0 .../icu/source/data/unidata/SpecialCasing.txt | 0 .../icu/source/data/unidata/UCARules.txt | 0 .../icu/source/data/unidata/UnicodeData.txt | 0 .../source/data/unidata/WordBreakProperty.txt | 0 .../icu/source/data/unidata/changes.txt | 0 .../icu/source/data/unidata/ucdterms.txt | 0 .../icu4ros/icu/source/data/xml/brkitr/en.xml | 0 .../icu/source/data/xml/brkitr/en_US.xml | 0 .../source/data/xml/brkitr/en_US_POSIX.xml | 0 .../icu4ros/icu/source/data/xml/brkitr/ja.xml | 0 .../icu/source/data/xml/brkitr/root.xml | 0 .../icu/source/data/xml/collation/ar.xml | 0 .../icu/source/data/xml/collation/as.xml | 0 .../icu/source/data/xml/collation/be.xml | 0 .../icu/source/data/xml/collation/bg.xml | 0 .../icu/source/data/xml/collation/bn.xml | 0 .../icu/source/data/xml/collation/ca.xml | 0 .../icu/source/data/xml/collation/cs.xml | 0 .../icu/source/data/xml/collation/cy.xml | 0 .../icu/source/data/xml/collation/da.xml | 0 .../icu/source/data/xml/collation/de.xml | 0 .../icu/source/data/xml/collation/dz.xml | 0 .../icu/source/data/xml/collation/el.xml | 0 .../icu/source/data/xml/collation/en.xml | 0 .../icu/source/data/xml/collation/en_BE.xml | 0 .../icu/source/data/xml/collation/eo.xml | 0 .../icu/source/data/xml/collation/es.xml | 0 .../icu/source/data/xml/collation/et.xml | 0 .../icu/source/data/xml/collation/fa.xml | 0 .../icu/source/data/xml/collation/fa_AF.xml | 0 .../icu/source/data/xml/collation/fi.xml | 0 .../icu/source/data/xml/collation/fo.xml | 0 .../icu/source/data/xml/collation/fr.xml | 0 .../icu/source/data/xml/collation/gu.xml | 0 .../icu/source/data/xml/collation/haw.xml | 0 .../icu/source/data/xml/collation/he.xml | 0 .../icu/source/data/xml/collation/hi.xml | 0 .../icu/source/data/xml/collation/hr.xml | 0 .../icu/source/data/xml/collation/hu.xml | 0 .../icu/source/data/xml/collation/is.xml | 0 .../icu/source/data/xml/collation/it.xml | 0 .../icu/source/data/xml/collation/ja.xml | 0 .../icu/source/data/xml/collation/kk.xml | 0 .../icu/source/data/xml/collation/kl.xml | 0 .../icu/source/data/xml/collation/km.xml | 0 .../icu/source/data/xml/collation/kn.xml | 0 .../icu/source/data/xml/collation/ko.xml | 0 .../icu/source/data/xml/collation/kok.xml | 0 .../icu/source/data/xml/collation/lt.xml | 0 .../icu/source/data/xml/collation/lv.xml | 0 .../icu/source/data/xml/collation/mk.xml | 0 .../icu/source/data/xml/collation/ml.xml | 0 .../icu/source/data/xml/collation/mr.xml | 0 .../icu/source/data/xml/collation/mt.xml | 0 .../icu/source/data/xml/collation/nb.xml | 0 .../icu/source/data/xml/collation/nn.xml | 0 .../icu/source/data/xml/collation/om.xml | 0 .../icu/source/data/xml/collation/or.xml | 0 .../icu/source/data/xml/collation/pa.xml | 0 .../icu/source/data/xml/collation/pl.xml | 0 .../icu/source/data/xml/collation/ps.xml | 0 .../icu/source/data/xml/collation/ro.xml | 0 .../icu/source/data/xml/collation/root.xml | 0 .../icu/source/data/xml/collation/ru.xml | 0 .../icu/source/data/xml/collation/sk.xml | 0 .../icu/source/data/xml/collation/sl.xml | 0 .../icu/source/data/xml/collation/sq.xml | 0 .../icu/source/data/xml/collation/sr.xml | 0 .../icu/source/data/xml/collation/sr_Latn.xml | 0 .../icu/source/data/xml/collation/sv.xml | 0 .../icu/source/data/xml/collation/ta.xml | 0 .../icu/source/data/xml/collation/te.xml | 0 .../icu/source/data/xml/collation/th.xml | 0 .../icu/source/data/xml/collation/tr.xml | 0 .../icu/source/data/xml/collation/uk.xml | 0 .../icu/source/data/xml/collation/vi.xml | 0 .../icu/source/data/xml/collation/zh.xml | 0 .../icu/source/data/xml/collation/zh_HK.xml | 0 .../icu/source/data/xml/collation/zh_Hant.xml | 0 .../icu/source/data/xml/collation/zh_MO.xml | 0 .../icu/source/data/xml/collation/zh_TW.xml | 0 .../data/xml/collation/zh_TW_STROKE.xml | 0 .../icu4ros/icu/source/data/xml/main/aa.xml | 0 .../icu4ros/icu/source/data/xml/main/af.xml | 0 .../icu4ros/icu/source/data/xml/main/am.xml | 0 .../icu4ros/icu/source/data/xml/main/ar.xml | 0 .../icu4ros/icu/source/data/xml/main/as.xml | 0 .../icu4ros/icu/source/data/xml/main/az.xml | 0 .../icu/source/data/xml/main/az_AZ.xml | 0 .../icu/source/data/xml/main/az_Cyrl.xml | 0 .../icu/source/data/xml/main/az_Latn.xml | 0 .../icu4ros/icu/source/data/xml/main/be.xml | 0 .../icu4ros/icu/source/data/xml/main/bg.xml | 0 .../icu4ros/icu/source/data/xml/main/bn.xml | 0 .../icu4ros/icu/source/data/xml/main/ca.xml | 0 .../icu4ros/icu/source/data/xml/main/cs.xml | 0 .../icu4ros/icu/source/data/xml/main/cy.xml | 0 .../icu4ros/icu/source/data/xml/main/da.xml | 0 .../icu4ros/icu/source/data/xml/main/de.xml | 0 .../icu4ros/icu/source/data/xml/main/el.xml | 0 .../icu4ros/icu/source/data/xml/main/en.xml | 0 .../icu/source/data/xml/main/en_US_POSIX.xml | 0 .../icu4ros/icu/source/data/xml/main/eo.xml | 0 .../icu4ros/icu/source/data/xml/main/es.xml | 0 .../icu4ros/icu/source/data/xml/main/et.xml | 0 .../icu4ros/icu/source/data/xml/main/eu.xml | 0 .../icu4ros/icu/source/data/xml/main/fa.xml | 0 .../icu4ros/icu/source/data/xml/main/fi.xml | 0 .../icu4ros/icu/source/data/xml/main/fo.xml | 0 .../icu4ros/icu/source/data/xml/main/fr.xml | 0 .../icu4ros/icu/source/data/xml/main/ga.xml | 0 .../icu4ros/icu/source/data/xml/main/gl.xml | 0 .../icu4ros/icu/source/data/xml/main/gu.xml | 0 .../icu4ros/icu/source/data/xml/main/gv.xml | 0 .../icu4ros/icu/source/data/xml/main/haw.xml | 0 .../icu4ros/icu/source/data/xml/main/he.xml | 0 .../icu4ros/icu/source/data/xml/main/hi.xml | 0 .../icu4ros/icu/source/data/xml/main/hr.xml | 0 .../icu4ros/icu/source/data/xml/main/hu.xml | 0 .../icu4ros/icu/source/data/xml/main/hy.xml | 0 .../icu4ros/icu/source/data/xml/main/id.xml | 0 .../icu4ros/icu/source/data/xml/main/ii.xml | 0 .../icu4ros/icu/source/data/xml/main/is.xml | 0 .../icu4ros/icu/source/data/xml/main/it.xml | 0 .../icu4ros/icu/source/data/xml/main/iw.xml | 0 .../icu4ros/icu/source/data/xml/main/ja.xml | 0 .../icu4ros/icu/source/data/xml/main/ka.xml | 0 .../icu4ros/icu/source/data/xml/main/kk.xml | 0 .../icu4ros/icu/source/data/xml/main/kl.xml | 0 .../icu4ros/icu/source/data/xml/main/km.xml | 0 .../icu4ros/icu/source/data/xml/main/kn.xml | 0 .../icu4ros/icu/source/data/xml/main/ko.xml | 0 .../icu4ros/icu/source/data/xml/main/kok.xml | 0 .../icu4ros/icu/source/data/xml/main/kw.xml | 0 .../icu4ros/icu/source/data/xml/main/lt.xml | 0 .../icu4ros/icu/source/data/xml/main/lv.xml | 0 .../icu4ros/icu/source/data/xml/main/mk.xml | 0 .../icu4ros/icu/source/data/xml/main/ml.xml | 0 .../icu4ros/icu/source/data/xml/main/mr.xml | 0 .../icu4ros/icu/source/data/xml/main/ms.xml | 0 .../icu4ros/icu/source/data/xml/main/mt.xml | 0 .../icu4ros/icu/source/data/xml/main/my.xml | 0 .../icu4ros/icu/source/data/xml/main/nb.xml | 0 .../icu4ros/icu/source/data/xml/main/nl.xml | 0 .../icu4ros/icu/source/data/xml/main/nn.xml | 0 .../icu4ros/icu/source/data/xml/main/no.xml | 0 .../icu4ros/icu/source/data/xml/main/nr.xml | 0 .../icu4ros/icu/source/data/xml/main/om.xml | 0 .../icu4ros/icu/source/data/xml/main/or.xml | 0 .../icu4ros/icu/source/data/xml/main/pa.xml | 0 .../icu/source/data/xml/main/pa_Guru.xml | 0 .../icu4ros/icu/source/data/xml/main/pl.xml | 0 .../icu4ros/icu/source/data/xml/main/ps.xml | 0 .../icu4ros/icu/source/data/xml/main/pt.xml | 0 .../icu4ros/icu/source/data/xml/main/ro.xml | 0 .../icu4ros/icu/source/data/xml/main/root.xml | 0 .../icu4ros/icu/source/data/xml/main/ru.xml | 0 .../icu4ros/icu/source/data/xml/main/sh.xml | 0 .../icu4ros/icu/source/data/xml/main/sk.xml | 0 .../icu4ros/icu/source/data/xml/main/sl.xml | 0 .../icu4ros/icu/source/data/xml/main/so.xml | 0 .../icu4ros/icu/source/data/xml/main/sq.xml | 0 .../icu4ros/icu/source/data/xml/main/sr.xml | 0 .../icu/source/data/xml/main/sr_Cyrl.xml | 0 .../icu/source/data/xml/main/sr_Latn.xml | 0 .../icu4ros/icu/source/data/xml/main/sv.xml | 0 .../icu4ros/icu/source/data/xml/main/sw.xml | 0 .../icu4ros/icu/source/data/xml/main/ta.xml | 0 .../icu4ros/icu/source/data/xml/main/te.xml | 0 .../icu4ros/icu/source/data/xml/main/th.xml | 0 .../icu4ros/icu/source/data/xml/main/ti.xml | 0 .../icu4ros/icu/source/data/xml/main/tl.xml | 0 .../icu4ros/icu/source/data/xml/main/to.xml | 0 .../icu4ros/icu/source/data/xml/main/tr.xml | 0 .../icu4ros/icu/source/data/xml/main/uk.xml | 0 .../icu4ros/icu/source/data/xml/main/ur.xml | 0 .../icu/source/data/xml/main/ur_IN.xml | 0 .../icu4ros/icu/source/data/xml/main/uz.xml | 0 .../icu/source/data/xml/main/uz_Arab.xml | 0 .../icu/source/data/xml/main/uz_Cyrl.xml | 0 .../icu/source/data/xml/main/uz_Latn.xml | 0 .../icu/source/data/xml/main/uz_UZ.xml | 0 .../icu4ros/icu/source/data/xml/main/vi.xml | 0 .../icu4ros/icu/source/data/xml/main/zh.xml | 0 .../icu/source/data/xml/main/zh_Hans.xml | 0 .../icu/source/data/xml/main/zh_Hant.xml | 0 .../icu4ros/icu/source/extra/Makefile.in | 0 .../icu/source/extra/scrptrun/Makefile.in | 0 .../icu/source/extra/scrptrun/readme.html | 0 .../icu/source/extra/scrptrun/scrptrun.cpp | 0 .../icu/source/extra/scrptrun/scrptrun.h | 0 .../icu/source/extra/scrptrun/srtest.cpp | 0 .../icu/source/extra/scrptrun/srtest.dsp | 0 .../icu/source/extra/scrptrun/srtest.dsw | 0 .../icu/source/extra/uconv/Makefile.in | 0 .../icu4ros/icu/source/extra/uconv/README | 0 .../icu/source/extra/uconv/makedata.mak | 0 .../icu/source/extra/uconv/pkgdata.inc.in | 0 .../icu/source/extra/uconv/resfiles.mk | 0 .../icu/source/extra/uconv/resources/fr.txt | 0 .../icu/source/extra/uconv/resources/root.txt | 0 .../source/extra/uconv/samples/ISO-8859-2.txt | 0 .../source/extra/uconv/samples/ISO-8859-3.txt | 0 .../extra/uconv/samples/danish-ISO-8859-1.txt | 0 .../icu/source/extra/uconv/samples/eucJP.txt | 0 .../extra/uconv/samples/hangul-eucKR.txt | 0 .../extra/uconv/samples/hania-eucKR.txt | 0 .../source/extra/uconv/samples/iso8859-1.txt | 0 .../icu/source/extra/uconv/samples/koi8r.txt | 0 .../extra/uconv/samples/utf8/armenian.txt | 0 .../extra/uconv/samples/utf8/banviet.txt | 0 .../uconv/samples/utf8/chinese-ulysses.txt | 0 .../source/extra/uconv/samples/utf8/croat.txt | 0 .../extra/uconv/samples/utf8/danish.txt | 0 .../source/extra/uconv/samples/utf8/greek.txt | 0 .../extra/uconv/samples/utf8/hangul.txt | 0 .../source/extra/uconv/samples/utf8/hania.txt | 0 .../source/extra/uconv/samples/utf8/jap.txt | 0 .../extra/uconv/samples/utf8/korean.txt | 0 .../source/extra/uconv/samples/utf8/linji.txt | 0 .../source/extra/uconv/samples/utf8/many.txt | 0 .../extra/uconv/samples/utf8/maopoem.txt | 0 .../extra/uconv/samples/utf8/russian.txt | 0 .../uconv/samples/utf8/simplechinese.txt | 0 .../extra/uconv/samples/utf8/turkish.txt | 0 .../extra/uconv/samples/utf8/utf-8-demo.txt | 0 .../icu4ros/icu/source/extra/uconv/uconv.1.in | 0 .../icu4ros/icu/source/extra/uconv/uconv.cpp | 0 .../icu/source/extra/uconv/uconv.vcproj | 0 .../icu/source/extra/uconv/unicode/uwmsg.h | 0 .../icu4ros/icu/source/extra/uconv/uwmsg.c | 0 .../icu4ros/icu/source/i18n/Makefile.in | 0 .../icu4ros/icu/source/i18n/anytrans.cpp | 0 .../icu4ros/icu/source/i18n/anytrans.h | 0 .../icu4ros/icu/source/i18n/astro.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/astro.h | 0 .../icu4ros/icu/source/i18n/basictz.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/bocsu.c | 0 .../3rdparty/icu4ros/icu/source/i18n/bocsu.h | 0 .../icu4ros/icu/source/i18n/buddhcal.cpp | 0 .../icu4ros/icu/source/i18n/buddhcal.h | 0 .../icu4ros/icu/source/i18n/calendar.cpp | 0 .../icu4ros/icu/source/i18n/casetrn.cpp | 0 .../icu4ros/icu/source/i18n/casetrn.h | 0 .../icu4ros/icu/source/i18n/chnsecal.cpp | 0 .../icu4ros/icu/source/i18n/chnsecal.h | 0 .../icu4ros/icu/source/i18n/choicfmt.cpp | 0 .../icu4ros/icu/source/i18n/coleitr.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/coll.cpp | 0 .../icu4ros/icu/source/i18n/cpdtrans.cpp | 0 .../icu4ros/icu/source/i18n/cpdtrans.h | 0 .../icu4ros/icu/source/i18n/csdetect.cpp | 0 .../icu4ros/icu/source/i18n/csdetect.h | 0 .../icu4ros/icu/source/i18n/csmatch.cpp | 0 .../icu4ros/icu/source/i18n/csmatch.h | 0 .../icu4ros/icu/source/i18n/csr2022.cpp | 0 .../icu4ros/icu/source/i18n/csr2022.h | 0 .../icu4ros/icu/source/i18n/csrecog.cpp | 0 .../icu4ros/icu/source/i18n/csrecog.h | 0 .../icu4ros/icu/source/i18n/csrmbcs.cpp | 0 .../icu4ros/icu/source/i18n/csrmbcs.h | 0 .../icu4ros/icu/source/i18n/csrsbcs.cpp | 0 .../icu4ros/icu/source/i18n/csrsbcs.h | 0 .../icu4ros/icu/source/i18n/csrucode.cpp | 0 .../icu4ros/icu/source/i18n/csrucode.h | 0 .../icu4ros/icu/source/i18n/csrutf8.cpp | 0 .../icu4ros/icu/source/i18n/csrutf8.h | 0 .../icu4ros/icu/source/i18n/curramt.cpp | 0 .../icu4ros/icu/source/i18n/currfmt.cpp | 0 .../icu4ros/icu/source/i18n/currfmt.h | 0 .../icu4ros/icu/source/i18n/currunit.cpp | 0 .../icu4ros/icu/source/i18n/datefmt.cpp | 0 .../icu4ros/icu/source/i18n/dcfmtsym.cpp | 0 .../icu4ros/icu/source/i18n/decimfmt.cpp | 0 .../icu4ros/icu/source/i18n/digitlst.cpp | 0 .../icu4ros/icu/source/i18n/digitlst.h | 0 .../icu4ros/icu/source/i18n/dtfmtsym.cpp | 0 .../icu4ros/icu/source/i18n/dtptngen.cpp | 0 .../icu4ros/icu/source/i18n/dtptngen_impl.h | 0 .../icu4ros/icu/source/i18n/dtrule.cpp | 0 .../icu4ros/icu/source/i18n/esctrn.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/esctrn.h | 0 .../icu4ros/icu/source/i18n/fmtable.cpp | 0 .../icu4ros/icu/source/i18n/fmtable_cnv.cpp | 0 .../icu4ros/icu/source/i18n/format.cpp | 0 .../icu4ros/icu/source/i18n/funcrepl.cpp | 0 .../icu4ros/icu/source/i18n/funcrepl.h | 0 .../icu4ros/icu/source/i18n/gregocal.cpp | 0 .../icu4ros/icu/source/i18n/gregoimp.cpp | 0 .../icu4ros/icu/source/i18n/gregoimp.h | 0 .../icu4ros/icu/source/i18n/hebrwcal.cpp | 0 .../icu4ros/icu/source/i18n/hebrwcal.h | 0 .../3rdparty/icu4ros/icu/source/i18n/i18n.rc | 0 .../icu4ros/icu/source/i18n/i18n.vcproj | 0 .../icu4ros/icu/source/i18n/indiancal.cpp | 0 .../icu4ros/icu/source/i18n/indiancal.h | 0 .../icu4ros/icu/source/i18n/inputext.cpp | 0 .../icu4ros/icu/source/i18n/inputext.h | 0 .../icu4ros/icu/source/i18n/islamcal.cpp | 0 .../icu4ros/icu/source/i18n/islamcal.h | 0 .../icu4ros/icu/source/i18n/japancal.cpp | 0 .../icu4ros/icu/source/i18n/japancal.h | 0 .../icu4ros/icu/source/i18n/measfmt.cpp | 0 .../icu4ros/icu/source/i18n/measure.cpp | 0 .../icu4ros/icu/source/i18n/msgfmt.cpp | 0 .../icu4ros/icu/source/i18n/name2uni.cpp | 0 .../icu4ros/icu/source/i18n/name2uni.h | 0 .../icu4ros/icu/source/i18n/nfrlist.h | 0 .../3rdparty/icu4ros/icu/source/i18n/nfrs.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/nfrs.h | 0 .../icu4ros/icu/source/i18n/nfrule.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/nfrule.h | 0 .../icu4ros/icu/source/i18n/nfsubs.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/nfsubs.h | 0 .../icu4ros/icu/source/i18n/nortrans.cpp | 0 .../icu4ros/icu/source/i18n/nortrans.h | 0 .../icu4ros/icu/source/i18n/nultrans.cpp | 0 .../icu4ros/icu/source/i18n/nultrans.h | 0 .../icu4ros/icu/source/i18n/numfmt.cpp | 0 .../icu4ros/icu/source/i18n/olsontz.cpp | 0 .../icu4ros/icu/source/i18n/olsontz.h | 0 .../icu4ros/icu/source/i18n/persncal.cpp | 0 .../icu4ros/icu/source/i18n/persncal.h | 0 .../icu4ros/icu/source/i18n/quant.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/quant.h | 0 .../3rdparty/icu4ros/icu/source/i18n/rbnf.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/rbt.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/rbt.h | 0 .../icu4ros/icu/source/i18n/rbt_data.cpp | 0 .../icu4ros/icu/source/i18n/rbt_data.h | 0 .../icu4ros/icu/source/i18n/rbt_pars.cpp | 0 .../icu4ros/icu/source/i18n/rbt_pars.h | 0 .../icu4ros/icu/source/i18n/rbt_rule.cpp | 0 .../icu4ros/icu/source/i18n/rbt_rule.h | 0 .../icu4ros/icu/source/i18n/rbt_set.cpp | 0 .../icu4ros/icu/source/i18n/rbt_set.h | 0 .../3rdparty/icu4ros/icu/source/i18n/rbtz.cpp | 0 .../icu4ros/icu/source/i18n/regexcmp.cpp | 0 .../icu4ros/icu/source/i18n/regexcmp.h | 0 .../icu4ros/icu/source/i18n/regexcst.h | 0 .../icu4ros/icu/source/i18n/regexcst.pl | 0 .../icu4ros/icu/source/i18n/regexcst.txt | 0 .../icu4ros/icu/source/i18n/regeximp.h | 0 .../icu4ros/icu/source/i18n/regexst.cpp | 0 .../icu4ros/icu/source/i18n/regexst.h | 0 .../icu4ros/icu/source/i18n/reldtfmt.cpp | 0 .../icu4ros/icu/source/i18n/reldtfmt.h | 0 .../icu4ros/icu/source/i18n/rematch.cpp | 0 .../icu4ros/icu/source/i18n/remtrans.cpp | 0 .../icu4ros/icu/source/i18n/remtrans.h | 0 .../icu4ros/icu/source/i18n/repattrn.cpp | 0 .../icu4ros/icu/source/i18n/search.cpp | 0 .../icu4ros/icu/source/i18n/simpletz.cpp | 0 .../icu4ros/icu/source/i18n/smpdtfmt.cpp | 0 .../icu4ros/icu/source/i18n/sortkey.cpp | 0 .../icu4ros/icu/source/i18n/strmatch.cpp | 0 .../icu4ros/icu/source/i18n/strmatch.h | 0 .../icu4ros/icu/source/i18n/strrepl.cpp | 0 .../icu4ros/icu/source/i18n/strrepl.h | 0 .../icu4ros/icu/source/i18n/stsearch.cpp | 0 .../icu4ros/icu/source/i18n/taiwncal.cpp | 0 .../icu4ros/icu/source/i18n/taiwncal.h | 0 .../icu4ros/icu/source/i18n/tblcoll.cpp | 0 .../icu4ros/icu/source/i18n/timezone.cpp | 0 .../icu4ros/icu/source/i18n/titletrn.cpp | 0 .../icu4ros/icu/source/i18n/titletrn.h | 0 .../icu4ros/icu/source/i18n/tolowtrn.cpp | 0 .../icu4ros/icu/source/i18n/tolowtrn.h | 0 .../icu4ros/icu/source/i18n/toupptrn.cpp | 0 .../icu4ros/icu/source/i18n/toupptrn.h | 0 .../icu4ros/icu/source/i18n/translit.cpp | 0 .../icu4ros/icu/source/i18n/transreg.cpp | 0 .../icu4ros/icu/source/i18n/transreg.h | 0 .../icu4ros/icu/source/i18n/tridpars.cpp | 0 .../icu4ros/icu/source/i18n/tridpars.h | 0 .../icu4ros/icu/source/i18n/tzrule.cpp | 0 .../icu4ros/icu/source/i18n/tztrans.cpp | 0 .../3rdparty/icu4ros/icu/source/i18n/ucal.cpp | 0 .../icu4ros/icu/source/i18n/ucln_in.c | 0 .../icu4ros/icu/source/i18n/ucln_in.h | 0 .../3rdparty/icu4ros/icu/source/i18n/ucol.cpp | 0 .../icu4ros/icu/source/i18n/ucol_bld.cpp | 0 .../icu4ros/icu/source/i18n/ucol_bld.h | 0 .../icu4ros/icu/source/i18n/ucol_cnt.cpp | 0 .../icu4ros/icu/source/i18n/ucol_cnt.h | 0 .../icu4ros/icu/source/i18n/ucol_elm.cpp | 0 .../icu4ros/icu/source/i18n/ucol_elm.h | 0 .../icu4ros/icu/source/i18n/ucol_imp.h | 0 .../icu4ros/icu/source/i18n/ucol_res.cpp | 0 .../icu4ros/icu/source/i18n/ucol_sit.cpp | 0 .../icu4ros/icu/source/i18n/ucol_tok.cpp | 0 .../icu4ros/icu/source/i18n/ucol_tok.h | 0 .../icu4ros/icu/source/i18n/ucol_wgt.c | 0 .../icu4ros/icu/source/i18n/ucol_wgt.h | 0 .../icu4ros/icu/source/i18n/ucoleitr.cpp | 0 .../icu4ros/icu/source/i18n/ucsdet.cpp | 0 .../icu4ros/icu/source/i18n/ucurr.cpp | 0 .../icu4ros/icu/source/i18n/ucurrimp.h | 0 .../3rdparty/icu4ros/icu/source/i18n/udat.cpp | 0 .../icu4ros/icu/source/i18n/udatpg.cpp | 0 .../icu4ros/icu/source/i18n/ulocdata.c | 0 .../3rdparty/icu4ros/icu/source/i18n/umsg.cpp | 0 .../icu4ros/icu/source/i18n/umsg_imp.h | 0 .../icu4ros/icu/source/i18n/unesctrn.cpp | 0 .../icu4ros/icu/source/i18n/unesctrn.h | 0 .../icu4ros/icu/source/i18n/uni2name.cpp | 0 .../icu4ros/icu/source/i18n/uni2name.h | 0 .../icu4ros/icu/source/i18n/unicode/basictz.h | 0 .../icu/source/i18n/unicode/calendar.h | 0 .../icu/source/i18n/unicode/choicfmt.h | 0 .../icu4ros/icu/source/i18n/unicode/coleitr.h | 0 .../icu4ros/icu/source/i18n/unicode/coll.h | 0 .../icu4ros/icu/source/i18n/unicode/curramt.h | 0 .../icu/source/i18n/unicode/currunit.h | 0 .../icu4ros/icu/source/i18n/unicode/datefmt.h | 0 .../icu/source/i18n/unicode/dcfmtsym.h | 0 .../icu/source/i18n/unicode/decimfmt.h | 0 .../icu/source/i18n/unicode/dtfmtsym.h | 0 .../icu/source/i18n/unicode/dtptngen.h | 0 .../icu4ros/icu/source/i18n/unicode/dtrule.h | 0 .../icu/source/i18n/unicode/fieldpos.h | 0 .../icu4ros/icu/source/i18n/unicode/fmtable.h | 0 .../icu4ros/icu/source/i18n/unicode/format.h | 0 .../icu/source/i18n/unicode/gregocal.h | 0 .../icu4ros/icu/source/i18n/unicode/measfmt.h | 0 .../icu/source/i18n/unicode/measunit.h | 0 .../icu4ros/icu/source/i18n/unicode/measure.h | 0 .../icu4ros/icu/source/i18n/unicode/msgfmt.h | 0 .../icu4ros/icu/source/i18n/unicode/numfmt.h | 0 .../icu4ros/icu/source/i18n/unicode/rbnf.h | 0 .../icu4ros/icu/source/i18n/unicode/rbtz.h | 0 .../icu4ros/icu/source/i18n/unicode/regex.h | 0 .../icu4ros/icu/source/i18n/unicode/search.h | 0 .../icu/source/i18n/unicode/simpletz.h | 0 .../icu/source/i18n/unicode/smpdtfmt.h | 0 .../icu4ros/icu/source/i18n/unicode/sortkey.h | 0 .../icu/source/i18n/unicode/stsearch.h | 0 .../icu4ros/icu/source/i18n/unicode/tblcoll.h | 0 .../icu/source/i18n/unicode/timezone.h | 0 .../icu/source/i18n/unicode/translit.h | 0 .../icu4ros/icu/source/i18n/unicode/tzrule.h | 0 .../icu4ros/icu/source/i18n/unicode/tztrans.h | 0 .../icu4ros/icu/source/i18n/unicode/ucal.h | 0 .../icu4ros/icu/source/i18n/unicode/ucol.h | 0 .../icu/source/i18n/unicode/ucoleitr.h | 0 .../icu4ros/icu/source/i18n/unicode/ucsdet.h | 0 .../icu4ros/icu/source/i18n/unicode/ucurr.h | 0 .../icu4ros/icu/source/i18n/unicode/udat.h | 0 .../icu4ros/icu/source/i18n/unicode/udatpg.h | 0 .../icu/source/i18n/unicode/ulocdata.h | 0 .../icu4ros/icu/source/i18n/unicode/umsg.h | 0 .../icu4ros/icu/source/i18n/unicode/unirepl.h | 0 .../icu4ros/icu/source/i18n/unicode/unum.h | 0 .../icu4ros/icu/source/i18n/unicode/uregex.h | 0 .../icu4ros/icu/source/i18n/unicode/usearch.h | 0 .../icu/source/i18n/unicode/utmscale.h | 0 .../icu4ros/icu/source/i18n/unicode/utrans.h | 0 .../icu4ros/icu/source/i18n/unicode/vtzone.h | 0 .../3rdparty/icu4ros/icu/source/i18n/unum.cpp | 0 .../icu4ros/icu/source/i18n/uregex.cpp | 0 .../icu4ros/icu/source/i18n/uregexc.cpp | 0 .../icu4ros/icu/source/i18n/usearch.cpp | 0 .../icu4ros/icu/source/i18n/usrchimp.h | 0 .../icu4ros/icu/source/i18n/utmscale.c | 0 .../icu4ros/icu/source/i18n/utrans.cpp | 0 .../icu4ros/icu/source/i18n/vtzone.cpp | 0 .../icu4ros/icu/source/i18n/windtfmt.cpp | 0 .../icu4ros/icu/source/i18n/windtfmt.h | 0 .../icu4ros/icu/source/i18n/winnmfmt.cpp | 0 .../icu4ros/icu/source/i18n/winnmfmt.h | 0 .../icu4ros/icu/source/i18n/zonemeta.cpp | 0 .../icu4ros/icu/source/i18n/zonemeta.h | 0 .../icu4ros/icu/source/i18n/zstrfmt.cpp | 0 .../icu4ros/icu/source/i18n/zstrfmt.h | 0 .../3rdparty/icu4ros/icu/source/icudefs.mk.in | 0 .../3rdparty/icu4ros/icu/source/install-sh | 0 .../icu4ros/icu/source/io/Makefile.in | 0 .../3rdparty/icu4ros/icu/source/io/io.rc | 0 .../3rdparty/icu4ros/icu/source/io/io.vcproj | 0 .../3rdparty/icu4ros/icu/source/io/locbund.c | 0 .../3rdparty/icu4ros/icu/source/io/locbund.h | 0 .../3rdparty/icu4ros/icu/source/io/sprintf.c | 0 .../3rdparty/icu4ros/icu/source/io/sscanf.c | 0 .../3rdparty/icu4ros/icu/source/io/ucln_io.c | 0 .../3rdparty/icu4ros/icu/source/io/ucln_io.h | 0 .../3rdparty/icu4ros/icu/source/io/ufile.c | 0 .../3rdparty/icu4ros/icu/source/io/ufile.h | 0 .../3rdparty/icu4ros/icu/source/io/ufmt_cmn.c | 0 .../3rdparty/icu4ros/icu/source/io/ufmt_cmn.h | 0 .../icu4ros/icu/source/io/unicode/ustdio.h | 0 .../icu4ros/icu/source/io/unicode/ustream.h | 0 .../3rdparty/icu4ros/icu/source/io/uprintf.c | 0 .../3rdparty/icu4ros/icu/source/io/uprintf.h | 0 .../3rdparty/icu4ros/icu/source/io/uprntf_p.c | 0 .../3rdparty/icu4ros/icu/source/io/uscanf.c | 0 .../3rdparty/icu4ros/icu/source/io/uscanf.h | 0 .../3rdparty/icu4ros/icu/source/io/uscanf_p.c | 0 .../3rdparty/icu4ros/icu/source/io/ustdio.c | 0 .../icu4ros/icu/source/io/ustream.cpp | 0 .../source/layout/AlternateSubstSubtables.cpp | 0 .../source/layout/AlternateSubstSubtables.h | 0 .../icu/source/layout/AnchorTables.cpp | 0 .../icu4ros/icu/source/layout/AnchorTables.h | 0 .../icu/source/layout/ArabicLayoutEngine.cpp | 0 .../icu/source/layout/ArabicLayoutEngine.h | 0 .../icu/source/layout/ArabicShaping.cpp | 0 .../icu4ros/icu/source/layout/ArabicShaping.h | 0 .../source/layout/AttachmentPosnSubtables.h | 0 .../icu4ros/icu/source/layout/CanonData.cpp | 0 .../icu/source/layout/CanonShaping.cpp | 0 .../icu4ros/icu/source/layout/CanonShaping.h | 0 .../source/layout/CharSubstitutionFilter.h | 0 .../source/layout/ClassDefinitionTables.cpp | 0 .../icu/source/layout/ClassDefinitionTables.h | 0 .../source/layout/ContextualGlyphInsertion.h | 0 .../layout/ContextualGlyphSubstProc.cpp | 0 .../source/layout/ContextualGlyphSubstProc.h | 0 .../layout/ContextualGlyphSubstitution.h | 0 .../layout/ContextualSubstSubtables.cpp | 0 .../source/layout/ContextualSubstSubtables.h | 0 .../icu/source/layout/CoverageTables.cpp | 0 .../icu/source/layout/CoverageTables.h | 0 .../layout/CursiveAttachmentSubtables.cpp | 0 .../layout/CursiveAttachmentSubtables.h | 0 .../icu/source/layout/DefaultCharMapper.h | 0 .../icu/source/layout/DeviceTables.cpp | 0 .../icu4ros/icu/source/layout/DeviceTables.h | 0 .../icu/source/layout/ExtensionSubtables.cpp | 0 .../icu/source/layout/ExtensionSubtables.h | 0 .../icu4ros/icu/source/layout/Features.cpp | 0 .../icu4ros/icu/source/layout/Features.h | 0 .../icu/source/layout/GDEFMarkFilter.cpp | 0 .../icu/source/layout/GDEFMarkFilter.h | 0 .../icu/source/layout/GXLayoutEngine.cpp | 0 .../icu/source/layout/GXLayoutEngine.h | 0 .../source/layout/GlyphDefinitionTables.cpp | 0 .../icu/source/layout/GlyphDefinitionTables.h | 0 .../icu/source/layout/GlyphIterator.cpp | 0 .../icu4ros/icu/source/layout/GlyphIterator.h | 0 .../icu/source/layout/GlyphLookupTables.cpp | 0 .../icu/source/layout/GlyphLookupTables.h | 0 .../layout/GlyphPositionAdjustments.cpp | 0 .../source/layout/GlyphPositionAdjustments.h | 0 .../source/layout/GlyphPositioningTables.cpp | 0 .../source/layout/GlyphPositioningTables.h | 0 .../icu/source/layout/GlyphPosnLookupProc.cpp | 0 .../icu/source/layout/GlyphPosnLookupProc.h | 0 .../source/layout/GlyphSubstLookupProc.cpp | 0 .../icu/source/layout/GlyphSubstLookupProc.h | 0 .../source/layout/GlyphSubstitutionTables.cpp | 0 .../source/layout/GlyphSubstitutionTables.h | 0 .../icu/source/layout/HanLayoutEngine.cpp | 0 .../icu/source/layout/HanLayoutEngine.h | 0 .../icu/source/layout/HangulLayoutEngine.cpp | 0 .../icu/source/layout/HangulLayoutEngine.h | 0 .../icu/source/layout/HindiFeatureTags.h | 0 .../icu/source/layout/IndicClassTables.cpp | 0 .../icu/source/layout/IndicLayoutEngine.cpp | 0 .../icu/source/layout/IndicLayoutEngine.h | 0 .../icu/source/layout/IndicRearrangement.h | 0 .../layout/IndicRearrangementProcessor.cpp | 0 .../layout/IndicRearrangementProcessor.h | 0 .../icu/source/layout/IndicReordering.cpp | 0 .../icu/source/layout/IndicReordering.h | 0 .../icu4ros/icu/source/layout/KernTable.cpp | 0 .../icu4ros/icu/source/layout/KernTable.h | 0 .../icu/source/layout/KhmerLayoutEngine.cpp | 0 .../icu/source/layout/KhmerLayoutEngine.h | 0 .../icu/source/layout/KhmerReordering.cpp | 0 .../icu/source/layout/KhmerReordering.h | 0 .../icu/source/layout/LEFontInstance.cpp | 0 .../icu/source/layout/LEFontInstance.h | 0 .../icu4ros/icu/source/layout/LEGlyphFilter.h | 0 .../icu/source/layout/LEGlyphStorage.cpp | 0 .../icu/source/layout/LEGlyphStorage.h | 0 .../icu/source/layout/LEInsertionList.cpp | 0 .../icu/source/layout/LEInsertionList.h | 0 .../icu4ros/icu/source/layout/LELanguages.h | 0 .../icu4ros/icu/source/layout/LEScripts.h | 0 .../icu4ros/icu/source/layout/LESwaps.h | 0 .../icu4ros/icu/source/layout/LETypes.h | 0 .../icu/source/layout/LayoutEngine.cpp | 0 .../icu4ros/icu/source/layout/LayoutEngine.h | 0 .../icu4ros/icu/source/layout/LayoutTables.h | 0 .../icu/source/layout/LigatureSubstProc.cpp | 0 .../icu/source/layout/LigatureSubstProc.h | 0 .../source/layout/LigatureSubstSubtables.cpp | 0 .../source/layout/LigatureSubstSubtables.h | 0 .../icu/source/layout/LigatureSubstitution.h | 0 .../icu/source/layout/LookupProcessor.cpp | 0 .../icu/source/layout/LookupProcessor.h | 0 .../icu/source/layout/LookupTables.cpp | 0 .../icu4ros/icu/source/layout/LookupTables.h | 0 .../icu4ros/icu/source/layout/Lookups.cpp | 0 .../icu4ros/icu/source/layout/Lookups.h | 0 .../icu4ros/icu/source/layout/MPreFixups.cpp | 0 .../icu4ros/icu/source/layout/MPreFixups.h | 0 .../icu4ros/icu/source/layout/Makefile.in | 0 .../icu4ros/icu/source/layout/MarkArrays.cpp | 0 .../icu4ros/icu/source/layout/MarkArrays.h | 0 .../source/layout/MarkToBasePosnSubtables.cpp | 0 .../source/layout/MarkToBasePosnSubtables.h | 0 .../layout/MarkToLigaturePosnSubtables.cpp | 0 .../layout/MarkToLigaturePosnSubtables.h | 0 .../source/layout/MarkToMarkPosnSubtables.cpp | 0 .../source/layout/MarkToMarkPosnSubtables.h | 0 .../icu/source/layout/MirroredCharData.cpp | 0 .../icu/source/layout/MorphStateTables.h | 0 .../icu4ros/icu/source/layout/MorphTables.cpp | 0 .../icu4ros/icu/source/layout/MorphTables.h | 0 .../source/layout/MultipleSubstSubtables.cpp | 0 .../source/layout/MultipleSubstSubtables.h | 0 .../source/layout/NonContextualGlyphSubst.h | 0 .../layout/NonContextualGlyphSubstProc.cpp | 0 .../layout/NonContextualGlyphSubstProc.h | 0 .../source/layout/OpenTypeLayoutEngine.cpp | 0 .../icu/source/layout/OpenTypeLayoutEngine.h | 0 .../icu/source/layout/OpenTypeTables.h | 0 .../icu/source/layout/OpenTypeUtilities.cpp | 0 .../icu/source/layout/OpenTypeUtilities.h | 0 .../layout/PairPositioningSubtables.cpp | 0 .../source/layout/PairPositioningSubtables.h | 0 .../icu/source/layout/ScriptAndLanguage.cpp | 0 .../icu/source/layout/ScriptAndLanguage.h | 0 .../source/layout/ScriptAndLanguageTags.cpp | 0 .../icu/source/layout/ScriptAndLanguageTags.h | 0 .../source/layout/SegmentArrayProcessor.cpp | 0 .../icu/source/layout/SegmentArrayProcessor.h | 0 .../source/layout/SegmentSingleProcessor.cpp | 0 .../source/layout/SegmentSingleProcessor.h | 0 .../icu/source/layout/ShapingTypeData.cpp | 0 .../source/layout/SimpleArrayProcessor.cpp | 0 .../icu/source/layout/SimpleArrayProcessor.h | 0 .../layout/SinglePositioningSubtables.cpp | 0 .../layout/SinglePositioningSubtables.h | 0 .../layout/SingleSubstitutionSubtables.cpp | 0 .../layout/SingleSubstitutionSubtables.h | 0 .../source/layout/SingleTableProcessor.cpp | 0 .../icu/source/layout/SingleTableProcessor.h | 0 .../icu/source/layout/StateTableProcessor.cpp | 0 .../icu/source/layout/StateTableProcessor.h | 0 .../icu4ros/icu/source/layout/StateTables.h | 0 .../icu/source/layout/SubstitutionLookups.cpp | 0 .../icu/source/layout/SubstitutionLookups.h | 0 .../icu/source/layout/SubtableProcessor.cpp | 0 .../icu/source/layout/SubtableProcessor.h | 0 .../icu/source/layout/ThaiLayoutEngine.cpp | 0 .../icu/source/layout/ThaiLayoutEngine.h | 0 .../icu4ros/icu/source/layout/ThaiShaping.cpp | 0 .../icu4ros/icu/source/layout/ThaiShaping.h | 0 .../icu/source/layout/ThaiStateTables.cpp | 0 .../icu/source/layout/TibetanLayoutEngine.cpp | 0 .../icu/source/layout/TibetanLayoutEngine.h | 0 .../icu/source/layout/TibetanReordering.cpp | 0 .../icu/source/layout/TibetanReordering.h | 0 .../source/layout/TrimmedArrayProcessor.cpp | 0 .../icu/source/layout/TrimmedArrayProcessor.h | 0 .../icu/source/layout/ValueRecords.cpp | 0 .../icu4ros/icu/source/layout/ValueRecords.h | 0 .../icu4ros/icu/source/layout/layout.rc | 0 .../icu4ros/icu/source/layout/layout.vcproj | 0 .../icu4ros/icu/source/layout/loengine.cpp | 0 .../icu4ros/icu/source/layout/loengine.h | 0 .../icu/source/layoutex/LXUtilities.cpp | 0 .../icu4ros/icu/source/layoutex/LXUtilities.h | 0 .../icu4ros/icu/source/layoutex/Makefile.in | 0 .../icu/source/layoutex/ParagraphLayout.cpp | 0 .../icu4ros/icu/source/layoutex/RunArrays.cpp | 0 .../source/layoutex/layout/ParagraphLayout.h | 0 .../icu/source/layoutex/layout/RunArrays.h | 0 .../icu/source/layoutex/layout/playout.h | 0 .../icu/source/layoutex/layout/plruns.h | 0 .../icu4ros/icu/source/layoutex/layoutex.rc | 0 .../icu/source/layoutex/layoutex.vcproj | 0 .../icu4ros/icu/source/layoutex/playout.cpp | 0 .../icu4ros/icu/source/layoutex/plruns.cpp | 0 .../3rdparty/icu4ros/icu/source/mkinstalldirs | 0 .../icu4ros/icu/source/runConfigureICU | 0 .../icu4ros/icu/source/samples/Makefile.in | 0 .../icu4ros/icu/source/samples/all/all.sln | 0 .../icu4ros/icu/source/samples/break/Makefile | 0 .../icu/source/samples/break/break.cpp | 0 .../icu/source/samples/break/break.sln | 0 .../icu/source/samples/break/break.vcproj | 0 .../icu/source/samples/break/readme.txt | 0 .../icu4ros/icu/source/samples/break/ubreak.c | 0 .../icu/source/samples/cal/Makefile.in | 0 .../icu4ros/icu/source/samples/cal/cal.c | 0 .../icu4ros/icu/source/samples/cal/cal.sln | 0 .../icu4ros/icu/source/samples/cal/cal.vcproj | 0 .../icu4ros/icu/source/samples/cal/readme.txt | 0 .../icu4ros/icu/source/samples/cal/uprint.c | 0 .../icu4ros/icu/source/samples/cal/uprint.h | 0 .../icu4ros/icu/source/samples/case/Makefile | 0 .../icu4ros/icu/source/samples/case/case.cpp | 0 .../icu4ros/icu/source/samples/case/case.sln | 0 .../icu/source/samples/case/case.vcproj | 0 .../icu/source/samples/case/readme.txt | 0 .../icu4ros/icu/source/samples/case/ucase.c | 0 .../icu4ros/icu/source/samples/citer/Makefile | 0 .../icu/source/samples/citer/citer.cpp | 0 .../icu/source/samples/citer/citer.vcproj | 0 .../icu/source/samples/citer/readme.txt | 0 .../icu4ros/icu/source/samples/coll/Makefile | 0 .../icu4ros/icu/source/samples/coll/coll.cpp | 0 .../icu4ros/icu/source/samples/coll/coll.sln | 0 .../icu/source/samples/coll/coll.vcproj | 0 .../icu/source/samples/coll/readme.txt | 0 .../icu4ros/icu/source/samples/csdet/Makefile | 0 .../icu4ros/icu/source/samples/csdet/csdet.c | 0 .../icu/source/samples/csdet/csdet.vcproj | 0 .../icu/source/samples/date/Makefile.in | 0 .../icu4ros/icu/source/samples/date/date.c | 0 .../icu4ros/icu/source/samples/date/date.sln | 0 .../icu/source/samples/date/date.vcproj | 0 .../icu/source/samples/date/readme.txt | 0 .../icu4ros/icu/source/samples/date/uprint.c | 0 .../icu4ros/icu/source/samples/date/uprint.h | 0 .../icu/source/samples/datecal/Makefile | 0 .../icu/source/samples/datecal/cal.cpp | 0 .../icu4ros/icu/source/samples/datecal/ccal.c | 0 .../icu/source/samples/datefmt/Makefile | 0 .../icu/source/samples/datefmt/README.TXT | 0 .../source/samples/datefmt/answers/main_0.cpp | 0 .../source/samples/datefmt/answers/main_1.cpp | 0 .../source/samples/datefmt/answers/main_2.cpp | 0 .../source/samples/datefmt/answers/main_3.cpp | 0 .../icu/source/samples/datefmt/datefmt.sln | 0 .../icu/source/samples/datefmt/datefmt.vcproj | 0 .../icu/source/samples/datefmt/main.cpp | 0 .../icu/source/samples/datefmt/util.cpp | 0 .../icu4ros/icu/source/samples/datefmt/util.h | 0 .../icu4ros/icu/source/samples/defs.mk | 0 .../icu/source/samples/layout/FontMap.GDI | 0 .../icu/source/samples/layout/FontMap.Gnome | 0 .../icu/source/samples/layout/FontMap.cpp | 0 .../icu/source/samples/layout/FontMap.h | 0 .../source/samples/layout/FontTableCache.cpp | 0 .../source/samples/layout/FontTableCache.h | 0 .../source/samples/layout/GDIFontInstance.cpp | 0 .../source/samples/layout/GDIFontInstance.h | 0 .../icu/source/samples/layout/GDIFontMap.cpp | 0 .../icu/source/samples/layout/GDIFontMap.h | 0 .../source/samples/layout/GDIGUISupport.cpp | 0 .../icu/source/samples/layout/GDIGUISupport.h | 0 .../icu/source/samples/layout/GUISupport.h | 0 .../samples/layout/GnomeFontInstance.cpp | 0 .../source/samples/layout/GnomeFontInstance.h | 0 .../source/samples/layout/GnomeFontMap.cpp | 0 .../icu/source/samples/layout/GnomeFontMap.h | 0 .../source/samples/layout/GnomeGUISupport.cpp | 0 .../source/samples/layout/GnomeGUISupport.h | 0 .../icu/source/samples/layout/LayoutSample.rc | 0 .../icu/source/samples/layout/Makefile.in | 0 .../source/samples/layout/RenderingSurface.h | 0 .../icu/source/samples/layout/Sample.txt | 0 .../layout/ScriptCompositeFontInstance.cpp | 0 .../layout/ScriptCompositeFontInstance.h | 0 .../icu/source/samples/layout/Surface.cpp | 0 .../icu/source/samples/layout/Surface.h | 0 .../source/samples/layout/UnicodeReader.cpp | 0 .../icu/source/samples/layout/UnicodeReader.h | 0 .../icu/source/samples/layout/arraymem.h | 0 .../icu/source/samples/layout/cgnomelayout.c | 0 .../icu/source/samples/layout/clayout.c | 0 .../icu/source/samples/layout/cmaps.cpp | 0 .../icu4ros/icu/source/samples/layout/cmaps.h | 0 .../icu/source/samples/layout/gdiglue.cpp | 0 .../icu/source/samples/layout/gdiglue.h | 0 .../icu/source/samples/layout/gnomeglue.cpp | 0 .../icu/source/samples/layout/gnomeglue.h | 0 .../icu/source/samples/layout/gnomelayout.cpp | 0 .../icu/source/samples/layout/gsupport.h | 0 .../icu/source/samples/layout/layout.cpp | 0 .../icu/source/samples/layout/layout.sln | 0 .../icu/source/samples/layout/layout.vcproj | 0 .../icu/source/samples/layout/paragraph.cpp | 0 .../icu/source/samples/layout/paragraph.h | 0 .../icu4ros/icu/source/samples/layout/pflow.c | 0 .../icu4ros/icu/source/samples/layout/pflow.h | 0 .../icu/source/samples/layout/readme.html | 0 .../icu/source/samples/layout/resource.h | 0 .../icu/source/samples/layout/rsurface.cpp | 0 .../icu/source/samples/layout/rsurface.h | 0 .../icu4ros/icu/source/samples/layout/sfnt.h | 0 .../icu/source/samples/layout/ucreader.cpp | 0 .../icu/source/samples/layout/ucreader.h | 0 .../icu/source/samples/legacy/Makefile | 0 .../icu4ros/icu/source/samples/legacy/README | 0 .../icu/source/samples/legacy/legacy.cpp | 0 .../icu/source/samples/legacy/legacy.sln | 0 .../icu/source/samples/legacy/legacy.vcproj | 0 .../icu/source/samples/legacy/newcol.cpp | 0 .../icu/source/samples/legacy/oldcol.cpp | 0 .../icu/source/samples/msgfmt/Makefile | 0 .../icu/source/samples/msgfmt/README.TXT | 0 .../source/samples/msgfmt/answers/main_0.cpp | 0 .../source/samples/msgfmt/answers/main_1.cpp | 0 .../source/samples/msgfmt/answers/main_2.cpp | 0 .../source/samples/msgfmt/answers/main_3.cpp | 0 .../icu/source/samples/msgfmt/main.cpp | 0 .../icu/source/samples/msgfmt/msgfmt.sln | 0 .../icu/source/samples/msgfmt/msgfmt.vcproj | 0 .../icu/source/samples/msgfmt/util.cpp | 0 .../icu4ros/icu/source/samples/msgfmt/util.h | 0 .../icu/source/samples/numfmt/Makefile | 0 .../icu4ros/icu/source/samples/numfmt/capi.c | 0 .../icu/source/samples/numfmt/main.cpp | 0 .../icu/source/samples/numfmt/numfmt.sln | 0 .../icu/source/samples/numfmt/numfmt.vcproj | 0 .../icu/source/samples/numfmt/readme.txt | 0 .../icu/source/samples/numfmt/util.cpp | 0 .../icu4ros/icu/source/samples/numfmt/util.h | 0 .../icu4ros/icu/source/samples/props/Makefile | 0 .../icu/source/samples/props/props.cpp | 0 .../icu/source/samples/props/props.sln | 0 .../icu/source/samples/props/props.vcproj | 0 .../icu/source/samples/props/readme.txt | 0 .../icu4ros/icu/source/samples/readme.txt | 0 .../icu4ros/icu/source/samples/rules.mk | 0 .../icu/source/samples/strsrch/Makefile | 0 .../icu/source/samples/strsrch/readme.txt | 0 .../icu/source/samples/strsrch/strsrch.cpp | 0 .../icu/source/samples/strsrch/strsrch.sln | 0 .../icu/source/samples/strsrch/strsrch.vcproj | 0 .../icu/source/samples/translit/Makefile | 0 .../icu/source/samples/translit/README.TXT | 0 .../samples/translit/answers/main_1.cpp | 0 .../samples/translit/answers/main_2.cpp | 0 .../samples/translit/answers/main_3.cpp | 0 .../samples/translit/answers/main_4.cpp | 0 .../samples/translit/answers/unaccent.cpp | 0 .../samples/translit/answers/unaccent.h | 0 .../icu/source/samples/translit/main.cpp | 0 .../icu/source/samples/translit/translit.sln | 0 .../source/samples/translit/translit.vcproj | 0 .../icu/source/samples/translit/unaccent.cpp | 0 .../icu/source/samples/translit/unaccent.h | 0 .../icu/source/samples/translit/util.cpp | 0 .../icu/source/samples/translit/util.h | 0 .../icu/source/samples/uciter8/Makefile | 0 .../icu/source/samples/uciter8/readme.txt | 0 .../icu/source/samples/uciter8/uciter8.c | 0 .../icu/source/samples/uciter8/uciter8.sln | 0 .../icu/source/samples/uciter8/uciter8.vcproj | 0 .../icu/source/samples/uciter8/uit_len8.c | 0 .../icu/source/samples/uciter8/uit_len8.h | 0 .../icu4ros/icu/source/samples/ucnv/Makefile | 0 .../icu/source/samples/ucnv/convsamp.cpp | 0 .../icu/source/samples/ucnv/data01.txt | 0 .../icu/source/samples/ucnv/data02.bin | 0 .../icu/source/samples/ucnv/data06.txt | 0 .../icu4ros/icu/source/samples/ucnv/flagcb.c | 0 .../icu4ros/icu/source/samples/ucnv/flagcb.h | 0 .../icu/source/samples/ucnv/readme.txt | 0 .../icu4ros/icu/source/samples/ucnv/ucnv.sln | 0 .../icu/source/samples/ucnv/ucnv.vcproj | 0 .../icu4ros/icu/source/samples/udata/Makefile | 0 .../icu4ros/icu/source/samples/udata/reader.c | 0 .../icu/source/samples/udata/reader.vcproj | 0 .../icu/source/samples/udata/readme.txt | 0 .../icu/source/samples/udata/udata.sln | 0 .../icu4ros/icu/source/samples/udata/writer.c | 0 .../icu/source/samples/udata/writer.vcproj | 0 .../icu/source/samples/ufortune/Makefile | 0 .../source/samples/ufortune/fortunedefs.mk | 0 .../icu/source/samples/ufortune/readme.txt | 0 .../samples/ufortune/resources/Makefile | 0 .../source/samples/ufortune/resources/es.txt | 0 .../ufortune/resources/fortune_resources.mak | 0 .../ufortune/resources/res-file-list.txt | 0 .../samples/ufortune/resources/root.txt | 0 .../icu/source/samples/ufortune/ufortune.c | 0 .../icu/source/samples/ufortune/ufortune.sln | 0 .../source/samples/ufortune/ufortune.vcproj | 0 .../icu4ros/icu/source/samples/ugrep/Makefile | 0 .../icu/source/samples/ugrep/readme.txt | 0 .../icu/source/samples/ugrep/ugrep.cpp | 0 .../icu/source/samples/ugrep/ugrep.sln | 0 .../icu/source/samples/ugrep/ugrep.vcproj | 0 .../icu4ros/icu/source/samples/uresb/Makefile | 0 .../icu4ros/icu/source/samples/uresb/en.txt | 0 .../icu/source/samples/uresb/readme.txt | 0 .../icu/source/samples/uresb/resources.mak | 0 .../icu/source/samples/uresb/resources.vcproj | 0 .../icu4ros/icu/source/samples/uresb/root.txt | 0 .../icu4ros/icu/source/samples/uresb/sr.txt | 0 .../icu4ros/icu/source/samples/uresb/uresb.c | 0 .../icu/source/samples/uresb/uresb.sln | 0 .../icu/source/samples/uresb/uresb.vcproj | 0 .../icu/source/samples/ustring/Makefile | 0 .../icu/source/samples/ustring/readme.txt | 0 .../icu/source/samples/ustring/ustring.cpp | 0 .../icu/source/samples/ustring/ustring.sln | 0 .../icu/source/samples/ustring/ustring.vcproj | 0 .../icu4ros/icu/source/stubdata/Makefile.in | 0 .../icu4ros/icu/source/stubdata/stubdata.c | 0 .../icu/source/stubdata/stubdata.vcproj | 0 .../icu4ros/icu/source/test/Makefile.in | 0 .../icu/source/test/cintltst/Makefile.in | 0 .../icu/source/test/cintltst/bocu1tst.c | 0 .../icu/source/test/cintltst/callcoll.c | 0 .../icu/source/test/cintltst/callcoll.h | 0 .../icu/source/test/cintltst/calldata.h | 0 .../icu/source/test/cintltst/calltest.c | 0 .../icu/source/test/cintltst/capitst.c | 0 .../icu/source/test/cintltst/capitst.h | 0 .../icu/source/test/cintltst/cbiapts.c | 0 .../icu/source/test/cintltst/cbiapts.h | 0 .../icu/source/test/cintltst/cbididat.c | 0 .../icu/source/test/cintltst/cbiditst.c | 0 .../icu/source/test/cintltst/cbiditst.h | 0 .../icu/source/test/cintltst/cbkittst.c | 0 .../icu/source/test/cintltst/ccaltst.c | 0 .../icu/source/test/cintltst/ccaltst.h | 0 .../icu/source/test/cintltst/ccapitst.c | 0 .../icu/source/test/cintltst/ccapitst.h | 0 .../icu/source/test/cintltst/ccolltst.c | 0 .../icu/source/test/cintltst/ccolltst.h | 0 .../icu/source/test/cintltst/cconvtst.c | 0 .../icu4ros/icu/source/test/cintltst/cctest.c | 0 .../icu/source/test/cintltst/ccurrtst.c | 0 .../icu/source/test/cintltst/ccurrtst.h | 0 .../icu/source/test/cintltst/cdattst.c | 0 .../icu/source/test/cintltst/cdattst.h | 0 .../icu4ros/icu/source/test/cintltst/cdetst.c | 0 .../icu4ros/icu/source/test/cintltst/cdetst.h | 0 .../icu/source/test/cintltst/cdtdptst.c | 0 .../icu/source/test/cintltst/cdtdptst.h | 0 .../icu/source/test/cintltst/cdtrgtst.c | 0 .../icu/source/test/cintltst/cdtrgtst.h | 0 .../icu4ros/icu/source/test/cintltst/cestst.c | 0 .../icu4ros/icu/source/test/cintltst/cestst.h | 0 .../icu/source/test/cintltst/cfintst.c | 0 .../icu/source/test/cintltst/cfintst.h | 0 .../icu/source/test/cintltst/cformtst.c | 0 .../icu/source/test/cintltst/cformtst.h | 0 .../icu4ros/icu/source/test/cintltst/cfrtst.c | 0 .../icu4ros/icu/source/test/cintltst/cfrtst.h | 0 .../icu/source/test/cintltst/cg7coll.c | 0 .../icu/source/test/cintltst/cg7coll.h | 0 .../icu/source/test/cintltst/chashtst.c | 0 .../icu/source/test/cintltst/cintltst.c | 0 .../icu/source/test/cintltst/cintltst.h | 0 .../icu/source/test/cintltst/cintltst.vcproj | 0 .../icu/source/test/cintltst/citertst.c | 0 .../icu/source/test/cintltst/citertst.h | 0 .../icu/source/test/cintltst/cjaptst.c | 0 .../icu/source/test/cintltst/cjaptst.h | 0 .../icu/source/test/cintltst/cldrtest.c | 0 .../icu/source/test/cintltst/cloctst.c | 0 .../icu/source/test/cintltst/cloctst.h | 0 .../icu/source/test/cintltst/cmsccoll.c | 0 .../icu/source/test/cintltst/cmsgtst.c | 0 .../icu/source/test/cintltst/cmsgtst.h | 0 .../icu/source/test/cintltst/cnmdptst.c | 0 .../icu/source/test/cintltst/cnmdptst.h | 0 .../icu/source/test/cintltst/cnormtst.c | 0 .../icu/source/test/cintltst/cnormtst.h | 0 .../icu/source/test/cintltst/cnumtst.c | 0 .../icu/source/test/cintltst/cnumtst.h | 0 .../icu/source/test/cintltst/colutil.c | 0 .../icu/source/test/cintltst/cposxtst.c | 0 .../icu/source/test/cintltst/crestst.c | 0 .../icu/source/test/cintltst/crestst.h | 0 .../icu/source/test/cintltst/creststn.c | 0 .../icu/source/test/cintltst/creststn.h | 0 .../icu/source/test/cintltst/cstrcase.c | 0 .../icu/source/test/cintltst/cstrtest.c | 0 .../icu/source/test/cintltst/cturtst.c | 0 .../icu/source/test/cintltst/cturtst.h | 0 .../icu/source/test/cintltst/cucdapi.c | 0 .../icu/source/test/cintltst/cucdapi.h | 0 .../icu/source/test/cintltst/cucdtst.c | 0 .../icu/source/test/cintltst/currtest.c | 0 .../icu/source/test/cintltst/custrtrn.c | 0 .../icu/source/test/cintltst/custrtst.c | 0 .../icu/source/test/cintltst/cutiltst.c | 0 .../icu4ros/icu/source/test/cintltst/encoll.c | 0 .../icu4ros/icu/source/test/cintltst/encoll.h | 0 .../icu/source/test/cintltst/eurocreg.c | 0 .../icu4ros/icu/source/test/cintltst/hpmufn.c | 0 .../icu/source/test/cintltst/idnatest.c | 0 .../icu/source/test/cintltst/nccbtst.c | 0 .../icu/source/test/cintltst/nccbtst.h | 0 .../icu/source/test/cintltst/ncnvfbts.c | 0 .../icu/source/test/cintltst/ncnvfbts.h | 0 .../icu/source/test/cintltst/ncnvtst.c | 0 .../icu/source/test/cintltst/nfsprep.c | 0 .../icu/source/test/cintltst/nfsprep.h | 0 .../icu/source/test/cintltst/nucnvtst.c | 0 .../icu/source/test/cintltst/nucnvtst.h | 0 .../icu/source/test/cintltst/putiltst.c | 0 .../icu/source/test/cintltst/reapits.c | 0 .../icu/source/test/cintltst/sorttest.c | 0 .../icu/source/test/cintltst/spreptst.c | 0 .../icu/source/test/cintltst/sprpdata.c | 0 .../icu/source/test/cintltst/stdnmtst.c | 0 .../icu/source/test/cintltst/tracetst.c | 0 .../icu/source/test/cintltst/trietest.c | 0 .../icu/source/test/cintltst/ucsdetst.c | 0 .../icu/source/test/cintltst/udatatst.c | 0 .../icu/source/test/cintltst/udatpg_test.c | 0 .../icu/source/test/cintltst/uenumtst.c | 0 .../icu/source/test/cintltst/usettest.c | 0 .../icu/source/test/cintltst/usrchdat.c | 0 .../icu/source/test/cintltst/usrchtst.c | 0 .../icu/source/test/cintltst/utexttst.c | 0 .../icu/source/test/cintltst/utf16tst.c | 0 .../icu/source/test/cintltst/utf8tst.c | 0 .../icu/source/test/cintltst/utmstest.c | 0 .../icu/source/test/cintltst/utransts.c | 0 .../icu/source/test/compat/Makefile.in | 0 .../icu4ros/icu/source/test/compat/readme.txt | 0 .../icu4ros/icu/source/test/compat/tzdate.c | 0 .../icu4ros/icu/source/test/compat/tzone.pl | 0 .../icu/source/test/hdrtst/Makefile.in | 0 .../icu/source/test/hdrtst/cxxfiles.txt | 0 .../icu4ros/icu/source/test/hdrtst/dfiles.txt | 0 .../icu4ros/icu/source/test/hdrtst/pfiles.txt | 0 .../icu/source/test/intltest/Makefile.in | 0 .../icu/source/test/intltest/aliastst.cpp | 0 .../icu/source/test/intltest/aliastst.h | 0 .../icu/source/test/intltest/allcoll.cpp | 0 .../icu/source/test/intltest/allcoll.h | 0 .../icu/source/test/intltest/apicoll.cpp | 0 .../icu/source/test/intltest/apicoll.h | 0 .../icu/source/test/intltest/astrotst.cpp | 0 .../icu/source/test/intltest/astrotst.h | 0 .../icu/source/test/intltest/calcasts.cpp | 0 .../icu/source/test/intltest/calcasts.h | 0 .../icu/source/test/intltest/callimts.cpp | 0 .../icu/source/test/intltest/callimts.h | 0 .../icu/source/test/intltest/calregts.cpp | 0 .../icu/source/test/intltest/calregts.h | 0 .../icu/source/test/intltest/caltest.cpp | 0 .../icu/source/test/intltest/caltest.h | 0 .../icu/source/test/intltest/caltztst.cpp | 0 .../icu/source/test/intltest/caltztst.h | 0 .../icu/source/test/intltest/canittst.cpp | 0 .../icu/source/test/intltest/canittst.h | 0 .../icu/source/test/intltest/citrtest.cpp | 0 .../icu/source/test/intltest/citrtest.h | 0 .../icu/source/test/intltest/cntabcol.cpp | 0 .../icu/source/test/intltest/cntabcol.h | 0 .../icu/source/test/intltest/convtest.cpp | 0 .../icu/source/test/intltest/convtest.h | 0 .../icu/source/test/intltest/cpdtrtst.cpp | 0 .../icu/source/test/intltest/cpdtrtst.h | 0 .../icu/source/test/intltest/csdetest.cpp | 0 .../icu/source/test/intltest/csdetest.h | 0 .../icu/source/test/intltest/currcoll.cpp | 0 .../icu/source/test/intltest/currcoll.h | 0 .../icu/source/test/intltest/dadrcal.cpp | 0 .../icu/source/test/intltest/dadrcal.h | 0 .../icu/source/test/intltest/dadrcoll.cpp | 0 .../icu/source/test/intltest/dadrcoll.h | 0 .../icu/source/test/intltest/dadrfmt.cpp | 0 .../icu/source/test/intltest/dadrfmt.h | 0 .../icu/source/test/intltest/dcfmapts.cpp | 0 .../icu/source/test/intltest/dcfmapts.h | 0 .../icu/source/test/intltest/decoll.cpp | 0 .../icu4ros/icu/source/test/intltest/decoll.h | 0 .../icu/source/test/intltest/dtfmapts.cpp | 0 .../icu/source/test/intltest/dtfmapts.h | 0 .../icu/source/test/intltest/dtfmrgts.cpp | 0 .../icu/source/test/intltest/dtfmrgts.h | 0 .../icu/source/test/intltest/dtfmtrtts.cpp | 0 .../icu/source/test/intltest/dtfmtrtts.h | 0 .../icu/source/test/intltest/dtfmttst.cpp | 0 .../icu/source/test/intltest/dtfmttst.h | 0 .../icu/source/test/intltest/dtptngts.cpp | 0 .../icu/source/test/intltest/dtptngts.h | 0 .../icu/source/test/intltest/encoll.cpp | 0 .../icu4ros/icu/source/test/intltest/encoll.h | 0 .../icu/source/test/intltest/escoll.cpp | 0 .../icu4ros/icu/source/test/intltest/escoll.h | 0 .../icu/source/test/intltest/ficoll.cpp | 0 .../icu4ros/icu/source/test/intltest/ficoll.h | 0 .../icu/source/test/intltest/fldset.cpp | 0 .../icu4ros/icu/source/test/intltest/fldset.h | 0 .../icu/source/test/intltest/frcoll.cpp | 0 .../icu4ros/icu/source/test/intltest/frcoll.h | 0 .../icu/source/test/intltest/g7coll.cpp | 0 .../icu4ros/icu/source/test/intltest/g7coll.h | 0 .../icu/source/test/intltest/icusvtst.cpp | 0 .../icu/source/test/intltest/icusvtst.h | 0 .../icu/source/test/intltest/idnaconf.cpp | 0 .../icu/source/test/intltest/idnaconf.h | 0 .../icu/source/test/intltest/idnaref.cpp | 0 .../icu/source/test/intltest/idnaref.h | 0 .../icu/source/test/intltest/incaltst.cpp | 0 .../icu/source/test/intltest/incaltst.h | 0 .../icu/source/test/intltest/intltest.cpp | 0 .../icu/source/test/intltest/intltest.h | 0 .../icu/source/test/intltest/intltest.vcproj | 0 .../icu/source/test/intltest/itercoll.cpp | 0 .../icu/source/test/intltest/itercoll.h | 0 .../icu/source/test/intltest/itformat.cpp | 0 .../icu/source/test/intltest/itformat.h | 0 .../icu/source/test/intltest/itmajor.cpp | 0 .../icu/source/test/intltest/itmajor.h | 0 .../icu/source/test/intltest/itrbbi.cpp | 0 .../icu4ros/icu/source/test/intltest/itrbbi.h | 0 .../icu/source/test/intltest/itrbnf.cpp | 0 .../icu4ros/icu/source/test/intltest/itrbnf.h | 0 .../icu/source/test/intltest/itrbnfp.cpp | 0 .../icu/source/test/intltest/itrbnfp.h | 0 .../icu/source/test/intltest/itrbnfrt.cpp | 0 .../icu/source/test/intltest/itrbnfrt.h | 0 .../icu/source/test/intltest/ittrans.cpp | 0 .../icu/source/test/intltest/ittrans.h | 0 .../icu/source/test/intltest/itutil.cpp | 0 .../icu4ros/icu/source/test/intltest/itutil.h | 0 .../icu/source/test/intltest/jacoll.cpp | 0 .../icu4ros/icu/source/test/intltest/jacoll.h | 0 .../icu/source/test/intltest/jamotest.cpp | 0 .../icu/source/test/intltest/jamotest.h | 0 .../icu/source/test/intltest/lcukocol.cpp | 0 .../icu/source/test/intltest/lcukocol.h | 0 .../icu/source/test/intltest/loctest.cpp | 0 .../icu/source/test/intltest/loctest.h | 0 .../icu/source/test/intltest/miscdtfm.cpp | 0 .../icu/source/test/intltest/miscdtfm.h | 0 .../icu/source/test/intltest/mnkytst.cpp | 0 .../icu/source/test/intltest/mnkytst.h | 0 .../icu/source/test/intltest/msfmrgts.cpp | 0 .../icu/source/test/intltest/msfmrgts.h | 0 .../icu/source/test/intltest/nmfmapts.cpp | 0 .../icu/source/test/intltest/nmfmapts.h | 0 .../icu/source/test/intltest/nmfmtrt.cpp | 0 .../icu/source/test/intltest/nmfmtrt.h | 0 .../icu/source/test/intltest/normconf.cpp | 0 .../icu/source/test/intltest/normconf.h | 0 .../icu/source/test/intltest/nptrans.cpp | 0 .../icu/source/test/intltest/nptrans.h | 0 .../icu/source/test/intltest/numfmtst.cpp | 0 .../icu/source/test/intltest/numfmtst.h | 0 .../icu/source/test/intltest/numrgts.cpp | 0 .../icu/source/test/intltest/numrgts.h | 0 .../icu/source/test/intltest/pptest.cpp | 0 .../icu4ros/icu/source/test/intltest/pptest.h | 0 .../icu/source/test/intltest/punyref.c | 0 .../icu/source/test/intltest/punyref.h | 0 .../icu/source/test/intltest/rbbiapts.cpp | 0 .../icu/source/test/intltest/rbbiapts.h | 0 .../icu/source/test/intltest/rbbitst.cpp | 0 .../icu/source/test/intltest/rbbitst.h | 0 .../icu/source/test/intltest/regcoll.cpp | 0 .../icu/source/test/intltest/regcoll.h | 0 .../icu/source/test/intltest/regextst.cpp | 0 .../icu/source/test/intltest/regextst.h | 0 .../icu/source/test/intltest/reptest.cpp | 0 .../icu/source/test/intltest/reptest.h | 0 .../icu/source/test/intltest/restest.cpp | 0 .../icu/source/test/intltest/restest.h | 0 .../icu/source/test/intltest/restsnew.cpp | 0 .../icu/source/test/intltest/restsnew.h | 0 .../icu/source/test/intltest/rndmcoll.cpp | 0 .../icu/source/test/intltest/rndmcoll.h | 0 .../icu/source/test/intltest/sdtfmtts.cpp | 0 .../icu/source/test/intltest/sdtfmtts.h | 0 .../icu/source/test/intltest/sfwdchit.cpp | 0 .../icu/source/test/intltest/sfwdchit.h | 0 .../icu/source/test/intltest/srchtest.cpp | 0 .../icu/source/test/intltest/srchtest.h | 0 .../icu/source/test/intltest/strcase.cpp | 0 .../icu/source/test/intltest/strtest.cpp | 0 .../icu/source/test/intltest/strtest.h | 0 .../icu/source/test/intltest/svccoll.cpp | 0 .../icu/source/test/intltest/svccoll.h | 0 .../icu/source/test/intltest/tchcfmt.cpp | 0 .../icu/source/test/intltest/tchcfmt.h | 0 .../icu/source/test/intltest/testidn.cpp | 0 .../icu/source/test/intltest/testidna.cpp | 0 .../icu/source/test/intltest/testidna.h | 0 .../icu/source/test/intltest/testutil.cpp | 0 .../icu/source/test/intltest/testutil.h | 0 .../icu/source/test/intltest/textfile.cpp | 0 .../icu/source/test/intltest/textfile.h | 0 .../icu/source/test/intltest/tfsmalls.cpp | 0 .../icu/source/test/intltest/tfsmalls.h | 0 .../icu/source/test/intltest/thcoll.cpp | 0 .../icu4ros/icu/source/test/intltest/thcoll.h | 0 .../icu/source/test/intltest/tmsgfmt.cpp | 0 .../icu/source/test/intltest/tmsgfmt.h | 0 .../icu/source/test/intltest/tokiter.cpp | 0 .../icu/source/test/intltest/tokiter.h | 0 .../icu/source/test/intltest/transapi.cpp | 0 .../icu/source/test/intltest/transapi.h | 0 .../icu/source/test/intltest/transrt.cpp | 0 .../icu/source/test/intltest/transrt.h | 0 .../icu/source/test/intltest/transtst.cpp | 0 .../icu/source/test/intltest/transtst.h | 0 .../icu/source/test/intltest/trcoll.cpp | 0 .../icu4ros/icu/source/test/intltest/trcoll.h | 0 .../icu/source/test/intltest/trnserr.cpp | 0 .../icu/source/test/intltest/trnserr.h | 0 .../icu/source/test/intltest/tscoll.cpp | 0 .../icu4ros/icu/source/test/intltest/tscoll.h | 0 .../icu/source/test/intltest/tsdate.cpp | 0 .../icu4ros/icu/source/test/intltest/tsdate.h | 0 .../icu/source/test/intltest/tsdcfmsy.cpp | 0 .../icu/source/test/intltest/tsdcfmsy.h | 0 .../icu/source/test/intltest/tsdtfmsy.cpp | 0 .../icu/source/test/intltest/tsdtfmsy.h | 0 .../icu/source/test/intltest/tsmthred.cpp | 0 .../icu/source/test/intltest/tsmthred.h | 0 .../icu/source/test/intltest/tsnmfmt.cpp | 0 .../icu/source/test/intltest/tsnmfmt.h | 0 .../icu/source/test/intltest/tsputil.cpp | 0 .../icu/source/test/intltest/tsputil.h | 0 .../icu/source/test/intltest/tstnorm.cpp | 0 .../icu/source/test/intltest/tstnorm.h | 0 .../icu/source/test/intltest/tstnrapi.cpp | 0 .../icu/source/test/intltest/tzbdtest.cpp | 0 .../icu/source/test/intltest/tzbdtest.h | 0 .../icu/source/test/intltest/tzfmttst.cpp | 0 .../icu/source/test/intltest/tzfmttst.h | 0 .../icu/source/test/intltest/tzoffloc.cpp | 0 .../icu/source/test/intltest/tzoffloc.h | 0 .../icu/source/test/intltest/tzregts.cpp | 0 .../icu/source/test/intltest/tzregts.h | 0 .../icu/source/test/intltest/tzrulets.cpp | 0 .../icu/source/test/intltest/tzrulets.h | 0 .../icu/source/test/intltest/tztest.cpp | 0 .../icu4ros/icu/source/test/intltest/tztest.h | 0 .../icu/source/test/intltest/ucaconf.cpp | 0 .../icu/source/test/intltest/ucaconf.h | 0 .../icu/source/test/intltest/ucdtest.cpp | 0 .../icu/source/test/intltest/ucdtest.h | 0 .../icu/source/test/intltest/uobjtest.cpp | 0 .../icu/source/test/intltest/uobjtest.h | 0 .../icu/source/test/intltest/usettest.cpp | 0 .../icu/source/test/intltest/usettest.h | 0 .../icu/source/test/intltest/ustrtest.cpp | 0 .../icu/source/test/intltest/ustrtest.h | 0 .../icu/source/test/intltest/utxttest.cpp | 0 .../icu/source/test/intltest/utxttest.h | 0 .../icu/source/test/intltest/uvectest.cpp | 0 .../icu/source/test/intltest/uvectest.h | 0 .../icu/source/test/intltest/v32test.cpp | 0 .../icu/source/test/intltest/v32test.h | 0 .../icu4ros/icu/source/test/intltest/wbnf.cpp | 0 .../icu4ros/icu/source/test/intltest/wbnf.h | 0 .../icu/source/test/intltest/windttst.cpp | 0 .../icu/source/test/intltest/windttst.h | 0 .../icu/source/test/intltest/winnmtst.cpp | 0 .../icu/source/test/intltest/winnmtst.h | 0 .../icu/source/test/intltest/winutil.cpp | 0 .../icu/source/test/intltest/winutil.h | 0 .../icu/source/test/iotest/Makefile.in | 0 .../icu4ros/icu/source/test/iotest/filetst.c | 0 .../icu4ros/icu/source/test/iotest/iotest.cpp | 0 .../icu4ros/icu/source/test/iotest/iotest.h | 0 .../icu/source/test/iotest/iotest.vcproj | 0 .../icu4ros/icu/source/test/iotest/stream.cpp | 0 .../icu4ros/icu/source/test/iotest/strtst.c | 0 .../icu4ros/icu/source/test/iotest/trnstst.c | 0 .../icu/source/test/letest/FontObject.cpp | 0 .../icu/source/test/letest/FontObject.h | 0 .../icu/source/test/letest/FontTableCache.cpp | 0 .../icu/source/test/letest/FontTableCache.h | 0 .../icu/source/test/letest/Makefile.in | 0 .../test/letest/PortableFontInstance.cpp | 0 .../source/test/letest/PortableFontInstance.h | 0 .../source/test/letest/SimpleFontInstance.cpp | 0 .../source/test/letest/SimpleFontInstance.h | 0 .../icu4ros/icu/source/test/letest/cfonts.cpp | 0 .../icu4ros/icu/source/test/letest/cfonts.h | 0 .../icu4ros/icu/source/test/letest/cletest.c | 0 .../icu/source/test/letest/cletest.sln | 0 .../icu/source/test/letest/cletest.vcproj | 0 .../icu4ros/icu/source/test/letest/cmaps.cpp | 0 .../icu4ros/icu/source/test/letest/cmaps.h | 0 .../icu/source/test/letest/gendata.cpp | 0 .../icu/source/test/letest/gendata.sln | 0 .../icu/source/test/letest/gendata.vcproj | 0 .../icu/source/test/letest/gendata.xml | 0 .../icu4ros/icu/source/test/letest/letest.cpp | 0 .../icu4ros/icu/source/test/letest/letest.h | 0 .../icu4ros/icu/source/test/letest/letest.sln | 0 .../icu/source/test/letest/letest.vcproj | 0 .../icu/source/test/letest/letsutil.cpp | 0 .../icu4ros/icu/source/test/letest/letsutil.h | 0 .../icu/source/test/letest/readme.html | 0 .../icu4ros/icu/source/test/letest/sfnt.h | 0 .../icu/source/test/letest/testdata.cpp | 0 .../icu/source/test/letest/xmlreader.cpp | 0 .../icu/source/test/letest/xmlreader.h | 0 .../icu/source/test/perf/charperf/CharPerf.pl | 0 .../source/test/perf/charperf/CharPerf_r.pl | 0 .../icu/source/test/perf/charperf/Makefile.in | 0 .../source/test/perf/charperf/charperf.cpp | 0 .../icu/source/test/perf/charperf/charperf.h | 0 .../source/test/perf/charperf/charperf.vcproj | 0 .../icu/source/test/perf/collperf/CollPerf.pl | 0 .../icu/source/test/perf/collperf/Makefile.in | 0 .../source/test/perf/collperf/collperf.cpp | 0 .../source/test/perf/collperf/collperf.vcproj | 0 .../source/test/perf/convperf/ConvPerf_r.pl | 0 .../icu/source/test/perf/convperf/Makefile.in | 0 .../source/test/perf/convperf/convperf.cpp | 0 .../icu/source/test/perf/convperf/convperf.h | 0 .../source/test/perf/convperf/convperf.vcproj | 0 .../test/perf/convperf/convperf_ansi.pl | 0 .../source/test/perf/convperf/convperf_iml.pl | 0 .../icu/source/test/perf/convperf/data.h | 0 .../icu/source/test/perf/normperf/Makefile.in | 0 .../icu/source/test/perf/normperf/NormPerf.pl | 0 .../source/test/perf/normperf/NormPerf_r.pl | 0 .../source/test/perf/normperf/normperf.cpp | 0 .../icu/source/test/perf/normperf/normperf.h | 0 .../source/test/perf/normperf/normperf.vcproj | 0 .../icu4ros/icu/source/test/perf/perf.sln | 0 .../source/test/perf/perldriver/Dataset.pm | 0 .../icu/source/test/perf/perldriver/Format.pm | 0 .../icu/source/test/perf/perldriver/Output.pm | 0 .../test/perf/perldriver/PerfFramework.pm | 0 .../icu/source/test/perf/ubrkperf/Makefile.in | 0 .../icu/source/test/perf/ubrkperf/UBrkPerf.pl | 0 .../source/test/perf/ubrkperf/UBrkPerf_r.pl | 0 .../source/test/perf/ubrkperf/ubrkperf.cpp | 0 .../source/test/perf/ubrkperf/ubrkperf.dsp | 0 .../icu/source/test/perf/ubrkperf/ubrkperf.h | 0 .../source/test/perf/ubrkperf/ubrkperf.vcproj | 0 .../source/test/perf/ubrkperf/ubrkperf20.dsp | 0 .../source/test/perf/ubrkperf/ubrkperfold.cpp | 0 .../source/test/perf/ubrkperf/ubrkperfold.dsp | 0 .../source/test/perf/unisetperf/Makefile.in | 0 .../test/perf/unisetperf/draft/bitset.cpp | 0 .../test/perf/unisetperf/draft/contperf.bat | 0 .../test/perf/unisetperf/draft/contperf.sh | 0 .../test/perf/unisetperf/draft/span16perf.bat | 0 .../test/perf/unisetperf/draft/span16perf.sh | 0 .../test/perf/unisetperf/draft/span8perf.bat | 0 .../test/perf/unisetperf/draft/span8perf.sh | 0 .../test/perf/unisetperf/draft/trieset.cpp | 0 .../test/perf/unisetperf/draft/unicont.h | 0 .../test/perf/unisetperf/unisetperf.cpp | 0 .../source/test/perf/unisetperf/unisetperf.pl | 0 .../test/perf/unisetperf/unisetperf.vcproj | 0 .../icu/source/test/perf/usetperf/Makefile.in | 0 .../icu/source/test/perf/usetperf/UsetPerf.pl | 0 .../icu/source/test/perf/usetperf/bitset.cpp | 0 .../icu/source/test/perf/usetperf/bitset.h | 0 .../source/test/perf/usetperf/usetperf.cpp | 0 .../source/test/perf/usetperf/usetperf.vcproj | 0 .../icu/source/test/perf/ustrperf/Makefile.in | 0 .../source/test/perf/ustrperf/StringPerf.pl | 0 .../source/test/perf/ustrperf/StringPerf_r.pl | 0 .../source/test/perf/ustrperf/stringperf.cpp | 0 .../source/test/perf/ustrperf/stringperf.h | 0 .../test/perf/ustrperf/stringperf.vcproj | 0 .../icu/source/test/perf/utfperf/Makefile.in | 0 .../icu/source/test/perf/utfperf/UtfPerf.pl | 0 .../icu/source/test/perf/utfperf/utfperf.cpp | 0 .../source/test/perf/utfperf/utfperf.vcproj | 0 .../CollationTest_NON_IGNORABLE_STUB.txt | 0 .../testdata/CollationTest_SHIFTED_STUB.txt | 0 .../test/testdata/DataDrivenCollationTest.txt | 0 .../test/testdata/GraphemeBreakTest.txt | 0 .../testdata/GraphemeClusterBreakTest.txt | 0 .../icu/source/test/testdata/Makefile.in | 0 .../test/testdata/NormalizationTest-3.2.0.txt | 0 .../test/testdata/NumberFormatTestCases.txt | 0 .../test/testdata/SentenceBreakTest.txt | 0 .../icu/source/test/testdata/TestFont1.otf | Bin .../source/test/testdata/WordBreakTest.txt | 0 .../icu/source/test/testdata/calendar.txt | 0 .../icu/source/test/testdata/casing.txt | 0 .../icu/source/test/testdata/conversion.txt | 0 .../icu/source/test/testdata/csdetest.xml | 0 .../icu/source/test/testdata/default.txt | 0 .../icu/source/test/testdata/format.txt | 0 .../icu/source/test/testdata/ibm9027.ucm | 0 .../source/test/testdata/icu26_testtypes.res | Bin .../source/test/testdata/icu26e_testtypes.res | Bin .../icu/source/test/testdata/icuio.txt | 0 .../icu/source/test/testdata/idna_conf.txt | 0 .../icu/source/test/testdata/idna_rules.txt | 0 .../icu/source/test/testdata/importtest.bin | Bin .../icu/source/test/testdata/iscii.bin | 0 .../icu/source/test/testdata/letest.xml | 0 .../icu4ros/icu/source/test/testdata/mc.txt | 0 .../source/test/testdata/nfs4_cis_prep.txt | 0 .../source/test/testdata/nfs4_cs_prep_ci.txt | 0 .../source/test/testdata/nfs4_cs_prep_cs.txt | 0 .../test/testdata/nfs4_mixed_prep_p.txt | 0 .../test/testdata/nfs4_mixed_prep_s.txt | 0 .../icu/source/test/testdata/pkgdata.inc.in | 0 .../icu4ros/icu/source/test/testdata/ra.txt | 0 .../icu4ros/icu/source/test/testdata/ra.xlf | 0 .../icu/source/test/testdata/rbbitst.txt | 0 .../icu/source/test/testdata/re_tests.txt | 0 .../icu/source/test/testdata/readme.txt | 0 .../icu/source/test/testdata/regextst.txt | 0 .../icu/source/test/testdata/riwords.txt | 0 .../icu4ros/icu/source/test/testdata/root.txt | 0 .../icu4ros/icu/source/test/testdata/sh.txt | 0 .../icu/source/test/testdata/sh_YU.txt | 0 .../icu/source/test/testdata/structLocale.txt | 0 .../icu4ros/icu/source/test/testdata/te.txt | 0 .../icu/source/test/testdata/te_IN.txt | 0 .../source/test/testdata/te_IN_REVISED.txt | 0 .../icu/source/test/testdata/test1.ucm | 0 .../icu/source/test/testdata/test3.ucm | 0 .../icu/source/test/testdata/test4.ucm | 0 .../icu/source/test/testdata/test4x.ucm | 0 .../icu/source/test/testdata/testaliases.txt | 0 .../icu/source/test/testdata/testdata.mak | 0 .../icu/source/test/testdata/testempty.txt | 0 .../icu/source/test/testdata/testtypes.txt | 0 .../source/test/testdata/translit_rules.txt | 0 .../icu/source/test/testdata/tstfiles.mk | 0 .../icu/source/test/testdata/uni-text.bin | Bin .../icu/source/test/testmap/Makefile.in | 0 .../icu4ros/icu/source/test/testmap/testmap.c | 0 .../icu/source/test/testmap/testmap.dsp | 0 .../icu/source/test/thaitest/Makefile.in | 0 .../icu/source/test/thaitest/space.txt | 0 .../icu/source/test/thaitest/thaitest.cpp | 0 .../icu/source/test/thaitest/thaitest.dsp | 0 .../icu/source/test/threadtest/Makefile.in | 0 .../source/test/threadtest/converttest.cpp | 0 .../icu/source/test/threadtest/stringtest.cpp | 0 .../icu/source/test/threadtest/threadtest.cpp | 0 .../icu/source/test/threadtest/threadtest.dsp | 0 .../icu/source/test/threadtest/threadtest.dsw | 0 .../icu/source/test/threadtest/threadtest.h | 0 .../icu4ros/icu/source/tools/Makefile.in | 0 .../icu/source/tools/cpysearch/cpyscan.pl | 0 .../icu/source/tools/cpysearch/cpysearch.pl | 0 .../icu/source/tools/cpysearch/cpyskip.txt | 0 .../icu/source/tools/cpysearch/readme.txt | 0 .../icu/source/tools/ctestfw/Makefile.in | 0 .../icu4ros/icu/source/tools/ctestfw/ctest.c | 0 .../icu/source/tools/ctestfw/ctestfw.vcproj | 0 .../icu/source/tools/ctestfw/datamap.cpp | 0 .../icu/source/tools/ctestfw/dbgutil.cpp | 0 .../icu/source/tools/ctestfw/testdata.cpp | 0 .../icu/source/tools/ctestfw/tstdtmod.cpp | 0 .../icu/source/tools/ctestfw/udbgutil.cpp | 0 .../icu/source/tools/ctestfw/unicode/ctest.h | 0 .../source/tools/ctestfw/unicode/datamap.h | 0 .../source/tools/ctestfw/unicode/dbgutil.h | 0 .../source/tools/ctestfw/unicode/testdata.h | 0 .../source/tools/ctestfw/unicode/testlog.h | 0 .../source/tools/ctestfw/unicode/testtype.h | 0 .../source/tools/ctestfw/unicode/tstdtmod.h | 0 .../source/tools/ctestfw/unicode/udbgutil.h | 0 .../icu/source/tools/ctestfw/unicode/uperf.h | 0 .../icu/source/tools/ctestfw/unicode/utimer.h | 0 .../icu/source/tools/ctestfw/uperf.cpp | 0 .../icu/source/tools/dumpce/Makefile.in | 0 .../icu/source/tools/dumpce/dumpce.cpp | 0 .../icu/source/tools/dumpce/dumpce.dsp | 0 .../icu/source/tools/dumpce/dumpce.dsw | 0 .../icu/source/tools/genbidi/Makefile.in | 0 .../icu/source/tools/genbidi/genbidi.c | 0 .../icu/source/tools/genbidi/genbidi.h | 0 .../icu/source/tools/genbidi/genbidi.vcproj | 0 .../icu4ros/icu/source/tools/genbidi/store.c | 0 .../icu/source/tools/genbrk/Makefile.in | 0 .../icu/source/tools/genbrk/genbrk.1.in | 0 .../icu/source/tools/genbrk/genbrk.cpp | 0 .../icu/source/tools/genbrk/genbrk.vcproj | 0 .../icu/source/tools/gencase/Makefile.in | 0 .../icu/source/tools/gencase/gencase.c | 0 .../icu/source/tools/gencase/gencase.h | 0 .../icu/source/tools/gencase/gencase.vcproj | 0 .../icu4ros/icu/source/tools/gencase/store.c | 0 .../icu/source/tools/genccode/Makefile.in | 0 .../icu/source/tools/genccode/genccode.8.in | 0 .../icu/source/tools/genccode/genccode.c | 0 .../icu/source/tools/genccode/genccode.vcproj | 0 .../icu/source/tools/gencmn/Makefile.in | 0 .../icu/source/tools/gencmn/gencmn.8.in | 0 .../icu4ros/icu/source/tools/gencmn/gencmn.c | 0 .../icu/source/tools/gencmn/gencmn.vcproj | 0 .../icu/source/tools/gencnval/Makefile.in | 0 .../icu/source/tools/gencnval/gencnval.1.in | 0 .../icu/source/tools/gencnval/gencnval.c | 0 .../icu/source/tools/gencnval/gencnval.vcproj | 0 .../icu/source/tools/genctd/Makefile.in | 0 .../icu/source/tools/genctd/genctd.1.in | 0 .../icu/source/tools/genctd/genctd.cpp | 0 .../icu/source/tools/genctd/genctd.vcproj | 0 .../icu/source/tools/gendraft/exclude.txt | 0 .../icu/source/tools/gendraft/genheaders.pl | 0 .../icu/source/tools/gennames/Makefile.in | 0 .../icu/source/tools/gennames/gennames.c | 0 .../icu/source/tools/gennames/gennames.vcproj | 0 .../icu/source/tools/gennorm/Makefile.in | 0 .../icu/source/tools/gennorm/gennorm.c | 0 .../icu/source/tools/gennorm/gennorm.h | 0 .../icu/source/tools/gennorm/gennorm.vcproj | 0 .../icu4ros/icu/source/tools/gennorm/store.c | 0 .../icu/source/tools/genpname/Makefile.in | 0 .../genpname/SyntheticPropertyAliases.txt | 0 .../SyntheticPropertyValueAliases.txt | 0 .../icu4ros/icu/source/tools/genpname/data.h | 0 .../icu/source/tools/genpname/genpname.cpp | 0 .../icu/source/tools/genpname/genpname.vcproj | 0 .../icu/source/tools/genpname/gensvpa.pl | 0 .../icu/source/tools/genpname/preparse.pl | 0 .../icu/source/tools/genprops/Makefile.in | 0 .../icu/source/tools/genprops/genprops.c | 0 .../icu/source/tools/genprops/genprops.h | 0 .../icu/source/tools/genprops/genprops.vcproj | 0 .../icu/source/tools/genprops/misc/ucdmerge.c | 0 .../icu/source/tools/genprops/misc/ucdstrip.c | 0 .../source/tools/genprops/misc/ucdstrip.pl | 0 .../icu/source/tools/genprops/props2.c | 0 .../icu4ros/icu/source/tools/genprops/store.c | 0 .../icu/source/tools/genrb/Makefile.in | 0 .../icu4ros/icu/source/tools/genrb/derb.1.in | 0 .../icu4ros/icu/source/tools/genrb/derb.c | 0 .../icu/source/tools/genrb/derb.vcproj | 0 .../icu4ros/icu/source/tools/genrb/errmsg.c | 0 .../icu4ros/icu/source/tools/genrb/errmsg.h | 0 .../icu/source/tools/genrb/gendtjar.pl | 0 .../icu4ros/icu/source/tools/genrb/genrb.1.in | 0 .../icu4ros/icu/source/tools/genrb/genrb.c | 0 .../icu4ros/icu/source/tools/genrb/genrb.h | 0 .../icu/source/tools/genrb/genrb.vcproj | 0 .../icu4ros/icu/source/tools/genrb/parse.c | 0 .../icu4ros/icu/source/tools/genrb/parse.h | 0 .../icu/source/tools/genrb/prscmnts.cpp | 0 .../icu4ros/icu/source/tools/genrb/prscmnts.h | 0 .../icu4ros/icu/source/tools/genrb/rbutil.c | 0 .../icu4ros/icu/source/tools/genrb/rbutil.h | 0 .../icu4ros/icu/source/tools/genrb/read.c | 0 .../icu4ros/icu/source/tools/genrb/read.h | 0 .../icu4ros/icu/source/tools/genrb/reslist.c | 0 .../icu4ros/icu/source/tools/genrb/reslist.h | 0 .../icu4ros/icu/source/tools/genrb/rle.c | 0 .../icu4ros/icu/source/tools/genrb/rle.h | 0 .../icu4ros/icu/source/tools/genrb/ustr.c | 0 .../icu4ros/icu/source/tools/genrb/ustr.h | 0 .../icu4ros/icu/source/tools/genrb/wrtjava.c | 0 .../icu4ros/icu/source/tools/genrb/wrtxml.c | 0 .../icu4ros/icu/source/tools/genren/Makefile | 0 .../icu4ros/icu/source/tools/genren/README | 0 .../icu4ros/icu/source/tools/genren/genren.pl | 0 .../icu/source/tools/gensprep/Makefile.in | 0 .../source/tools/gensprep/filterRFC3454.pl | 0 .../icu/source/tools/gensprep/gensprep.8.in | 0 .../icu/source/tools/gensprep/gensprep.c | 0 .../icu/source/tools/gensprep/gensprep.h | 0 .../icu/source/tools/gensprep/gensprep.vcproj | 0 .../icu4ros/icu/source/tools/gensprep/store.c | 0 .../icu/source/tools/gentest/Makefile.in | 0 .../icu/source/tools/gentest/genres32.c | 0 .../icu/source/tools/gentest/gentest.c | 0 .../icu/source/tools/gentest/gentest.h | 0 .../icu/source/tools/gentest/gentest.vcproj | 0 .../icu/source/tools/genuca/Makefile.in | 0 .../icu/source/tools/genuca/genuca.8.in | 0 .../icu/source/tools/genuca/genuca.cpp | 0 .../icu4ros/icu/source/tools/genuca/genuca.h | 0 .../icu/source/tools/genuca/genuca.vcproj | 0 .../icu/source/tools/icupkg/Makefile.in | 0 .../icu/source/tools/icupkg/icupkg.8.in | 0 .../icu/source/tools/icupkg/icupkg.cpp | 0 .../icu/source/tools/icupkg/icupkg.vcproj | 0 .../icu/source/tools/icuswap/Makefile.in | 0 .../icu/source/tools/icuswap/icuswap.cpp | 0 .../icu/source/tools/icuswap/icuswap.vcproj | 0 .../icu/source/tools/makeconv/Makefile.in | 0 .../icu/source/tools/makeconv/gencnvex.c | 0 .../icu/source/tools/makeconv/genmbcs.c | 0 .../icu/source/tools/makeconv/genmbcs.h | 0 .../icu/source/tools/makeconv/makeconv.1.in | 0 .../icu/source/tools/makeconv/makeconv.c | 0 .../icu/source/tools/makeconv/makeconv.h | 0 .../icu/source/tools/makeconv/makeconv.vcproj | 0 .../icu/source/tools/makeconv/ucnvstat.c | 0 .../icu/source/tools/memcheck/ICUMemCheck.pl | 0 .../icu/source/tools/pkgdata/Makefile.in | 0 .../icu/source/tools/pkgdata/cmnmode.c | 0 .../icu/source/tools/pkgdata/dllmode.c | 0 .../icu/source/tools/pkgdata/filemode.c | 0 .../icu4ros/icu/source/tools/pkgdata/make.c | 0 .../icu/source/tools/pkgdata/makefile.h | 0 .../icu/source/tools/pkgdata/pkgdata.1.in | 0 .../icu/source/tools/pkgdata/pkgdata.c | 0 .../icu/source/tools/pkgdata/pkgdata.vcproj | 0 .../icu/source/tools/pkgdata/pkgtypes.c | 0 .../icu/source/tools/pkgdata/pkgtypes.h | 0 .../icu/source/tools/pkgdata/sttcmode.c | 0 .../icu/source/tools/pkgdata/winmode.c | 0 .../icu/source/tools/toolutil/Makefile.in | 0 .../icu/source/tools/toolutil/filestrm.c | 0 .../icu/source/tools/toolutil/filestrm.h | 0 .../icu/source/tools/toolutil/package.cpp | 0 .../icu/source/tools/toolutil/package.h | 0 .../icu/source/tools/toolutil/pkg_imp.h | 0 .../icu/source/tools/toolutil/pkgitems.cpp | 0 .../icu/source/tools/toolutil/propsvec.c | 0 .../icu/source/tools/toolutil/propsvec.h | 0 .../icu/source/tools/toolutil/swapimpl.cpp | 0 .../icu/source/tools/toolutil/swapimpl.h | 0 .../icu/source/tools/toolutil/toolutil.c | 0 .../icu/source/tools/toolutil/toolutil.h | 0 .../icu/source/tools/toolutil/toolutil.vcproj | 0 .../icu4ros/icu/source/tools/toolutil/ucbuf.c | 0 .../icu4ros/icu/source/tools/toolutil/ucbuf.h | 0 .../icu4ros/icu/source/tools/toolutil/ucm.c | 0 .../icu4ros/icu/source/tools/toolutil/ucm.h | 0 .../icu/source/tools/toolutil/ucmstate.c | 0 .../icu/source/tools/toolutil/unewdata.c | 0 .../icu/source/tools/toolutil/unewdata.h | 0 .../icu/source/tools/toolutil/uoptions.c | 0 .../icu/source/tools/toolutil/uoptions.h | 0 .../icu/source/tools/toolutil/uparse.c | 0 .../icu/source/tools/toolutil/uparse.h | 0 .../icu/source/tools/toolutil/writesrc.c | 0 .../icu/source/tools/toolutil/writesrc.h | 0 .../icu/source/tools/toolutil/xmlparser.cpp | 0 .../icu/source/tools/toolutil/xmlparser.h | 0 .../icu/source/tools/tzcode/Makefile.in | 0 .../icu4ros/icu/source/tools/tzcode/asctime.c | 0 .../icu4ros/icu/source/tools/tzcode/ialloc.c | 0 .../icu/source/tools/tzcode/icuzdump.cpp | 0 .../icu/source/tools/tzcode/icuzdump.vcproj | 0 .../icu4ros/icu/source/tools/tzcode/icuzones | 0 .../icu/source/tools/tzcode/localtime.c | 0 .../icu4ros/icu/source/tools/tzcode/private.h | 0 .../icu/source/tools/tzcode/readme.txt | 0 .../icu4ros/icu/source/tools/tzcode/scheck.c | 0 .../icu4ros/icu/source/tools/tzcode/tz.alias | 0 .../icu/source/tools/tzcode/tz2icu.cpp | 0 .../icu4ros/icu/source/tools/tzcode/tz2icu.h | 0 .../icu4ros/icu/source/tools/tzcode/tzfile.h | 0 .../icu/source/tools/tzcode/tzselect.ksh | 0 .../icu4ros/icu/source/tools/tzcode/zdump.c | 0 .../icu4ros/icu/source/tools/tzcode/zic.c | 0 .../3rdparty/icu4ros/icu/unicode-license.txt | 0 .../3rdparty/icu4ros/icu4ros.rbuild | 0 .../lib => lib}/3rdparty/icu4ros/stubs.cpp | 0 .../lib => lib}/3rdparty/libwine/config.c | 0 {reactos/lib => lib}/3rdparty/libwine/debug.c | 0 .../lib => lib}/3rdparty/libwine/debug_ros.c | 0 .../3rdparty/libwine/libwine.rbuild | 0 .../lib => lib}/3rdparty/libwine/string.c | 0 {reactos/lib => lib}/3rdparty/libxml2/AUTHORS | 0 {reactos/lib => lib}/3rdparty/libxml2/COPYING | 0 .../lib => lib}/3rdparty/libxml2/ChangeLog | 0 .../lib => lib}/3rdparty/libxml2/Copyright | 0 .../lib => lib}/3rdparty/libxml2/DOCBparser.c | 0 .../lib => lib}/3rdparty/libxml2/HTMLparser.c | 0 .../lib => lib}/3rdparty/libxml2/HTMLtree.c | 0 {reactos/lib => lib}/3rdparty/libxml2/INSTALL | 0 .../lib => lib}/3rdparty/libxml2/Makefile.am | 0 .../lib => lib}/3rdparty/libxml2/Makefile.in | 0 .../3rdparty/libxml2/Makefile.tests | 0 {reactos/lib => lib}/3rdparty/libxml2/NEWS | 0 {reactos/lib => lib}/3rdparty/libxml2/README | 0 .../lib => lib}/3rdparty/libxml2/README.tests | 0 {reactos/lib => lib}/3rdparty/libxml2/SAX.c | 0 {reactos/lib => lib}/3rdparty/libxml2/SAX2.c | 0 {reactos/lib => lib}/3rdparty/libxml2/TODO | 0 .../lib => lib}/3rdparty/libxml2/TODO_SCHEMAS | 0 .../lib => lib}/3rdparty/libxml2/acconfig.h | 0 .../lib => lib}/3rdparty/libxml2/acinclude.m4 | 0 .../lib => lib}/3rdparty/libxml2/aclocal.m4 | 0 {reactos/lib => lib}/3rdparty/libxml2/c14n.c | 0 .../lib => lib}/3rdparty/libxml2/catalog.c | 0 .../libxml2/check-relaxng-test-suite.py | 0 .../libxml2/check-relaxng-test-suite2.py | 0 .../libxml2/check-xinclude-test-suite.py | 0 .../3rdparty/libxml2/check-xml-test-suite.py | 0 .../libxml2/check-xsddata-test-suite.py | 0 .../lib => lib}/3rdparty/libxml2/chvalid.c | 0 .../lib => lib}/3rdparty/libxml2/config.guess | 0 .../lib => lib}/3rdparty/libxml2/config.h | 0 .../lib => lib}/3rdparty/libxml2/config.h.in | 0 .../lib => lib}/3rdparty/libxml2/config.sub | 0 .../lib => lib}/3rdparty/libxml2/configure | 0 .../lib => lib}/3rdparty/libxml2/configure.in | 0 .../lib => lib}/3rdparty/libxml2/dbgen.pl | 0 .../lib => lib}/3rdparty/libxml2/dbgenattr.pl | 0 .../lib => lib}/3rdparty/libxml2/debugXML.c | 0 {reactos/lib => lib}/3rdparty/libxml2/depcomp | 0 {reactos/lib => lib}/3rdparty/libxml2/dict.c | 0 .../lib => lib}/3rdparty/libxml2/elfgcchack.h | 0 .../lib => lib}/3rdparty/libxml2/encoding.c | 0 .../lib => lib}/3rdparty/libxml2/entities.c | 0 {reactos/lib => lib}/3rdparty/libxml2/error.c | 0 .../3rdparty/libxml2/genUnicode.py | 0 .../lib => lib}/3rdparty/libxml2/gentest.py | 0 .../lib => lib}/3rdparty/libxml2/globals.c | 0 {reactos/lib => lib}/3rdparty/libxml2/hash.c | 0 .../3rdparty/libxml2/include/Makefile.am | 0 .../3rdparty/libxml2/include/Makefile.in | 0 .../3rdparty/libxml2/include/win32config.h | 0 .../3rdparty/libxml2/include/wsockcompat.h | 0 .../lib => lib}/3rdparty/libxml2/install-sh | 0 .../lib => lib}/3rdparty/libxml2/legacy.c | 0 .../libxml2/libxml-2.0-uninstalled.pc.in | 0 .../3rdparty/libxml2/libxml-2.0.pc.in | 0 .../lib => lib}/3rdparty/libxml2/libxml.3 | 0 .../lib => lib}/3rdparty/libxml2/libxml.h | 0 .../lib => lib}/3rdparty/libxml2/libxml.m4 | 0 .../3rdparty/libxml2/libxml.spec.in | 0 .../3rdparty/libxml2/libxml2.rbuild | 0 .../lib => lib}/3rdparty/libxml2/libxml2.spec | 0 {reactos/lib => lib}/3rdparty/libxml2/list.c | 0 .../lib => lib}/3rdparty/libxml2/ltmain.sh | 0 {reactos/lib => lib}/3rdparty/libxml2/missing | 0 .../3rdparty/libxml2/mkinstalldirs | 0 .../lib => lib}/3rdparty/libxml2/nanoftp.c | 0 .../lib => lib}/3rdparty/libxml2/nanohttp.c | 0 .../lib => lib}/3rdparty/libxml2/parser.c | 0 .../3rdparty/libxml2/parserInternals.c | 0 .../lib => lib}/3rdparty/libxml2/pattern.c | 0 .../3rdparty/libxml2/regressions.py | 0 .../3rdparty/libxml2/regressions.xml | 0 .../lib => lib}/3rdparty/libxml2/relaxng.c | 0 .../lib => lib}/3rdparty/libxml2/runsuite.c | 0 .../lib => lib}/3rdparty/libxml2/runtest.c | 0 .../lib => lib}/3rdparty/libxml2/runxmlconf.c | 0 .../lib => lib}/3rdparty/libxml2/schematron.c | 0 .../3rdparty/libxml2/testAutomata.c | 0 .../lib => lib}/3rdparty/libxml2/testC14N.c | 0 .../lib => lib}/3rdparty/libxml2/testHTML.c | 0 .../lib => lib}/3rdparty/libxml2/testModule.c | 0 .../lib => lib}/3rdparty/libxml2/testReader.c | 0 .../lib => lib}/3rdparty/libxml2/testRegexp.c | 0 .../lib => lib}/3rdparty/libxml2/testRelax.c | 0 .../lib => lib}/3rdparty/libxml2/testSAX.c | 0 .../3rdparty/libxml2/testSchemas.c | 0 .../3rdparty/libxml2/testThreads.c | 0 .../3rdparty/libxml2/testThreadsWin32.c | 0 .../lib => lib}/3rdparty/libxml2/testURI.c | 0 .../lib => lib}/3rdparty/libxml2/testXPath.c | 0 .../lib => lib}/3rdparty/libxml2/testapi.c | 0 .../lib => lib}/3rdparty/libxml2/testchar.c | 0 .../lib => lib}/3rdparty/libxml2/testdict.c | 0 .../lib => lib}/3rdparty/libxml2/testdso.c | 0 .../3rdparty/libxml2/testrecurse.c | 0 .../lib => lib}/3rdparty/libxml2/threads.c | 0 {reactos/lib => lib}/3rdparty/libxml2/tree.c | 0 {reactos/lib => lib}/3rdparty/libxml2/trio.c | 0 {reactos/lib => lib}/3rdparty/libxml2/trio.h | 0 .../lib => lib}/3rdparty/libxml2/triodef.h | 0 .../lib => lib}/3rdparty/libxml2/trionan.c | 0 .../lib => lib}/3rdparty/libxml2/trionan.h | 0 {reactos/lib => lib}/3rdparty/libxml2/triop.h | 0 .../lib => lib}/3rdparty/libxml2/triostr.c | 0 .../lib => lib}/3rdparty/libxml2/triostr.h | 0 {reactos/lib => lib}/3rdparty/libxml2/uri.c | 0 {reactos/lib => lib}/3rdparty/libxml2/valid.c | 0 .../lib => lib}/3rdparty/libxml2/xinclude.c | 0 {reactos/lib => lib}/3rdparty/libxml2/xlink.c | 0 .../3rdparty/libxml2/xml2-config.1 | 0 .../3rdparty/libxml2/xml2-config.in | 0 .../3rdparty/libxml2/xml2Conf.sh.in | 0 {reactos/lib => lib}/3rdparty/libxml2/xmlIO.c | 0 .../lib => lib}/3rdparty/libxml2/xmlcatalog.c | 0 .../lib => lib}/3rdparty/libxml2/xmllint.c | 0 .../lib => lib}/3rdparty/libxml2/xmlmemory.c | 0 .../lib => lib}/3rdparty/libxml2/xmlmodule.c | 0 .../lib => lib}/3rdparty/libxml2/xmlreader.c | 0 .../lib => lib}/3rdparty/libxml2/xmlregexp.c | 0 .../lib => lib}/3rdparty/libxml2/xmlsave.c | 0 .../lib => lib}/3rdparty/libxml2/xmlschemas.c | 0 .../3rdparty/libxml2/xmlschemastypes.c | 0 .../lib => lib}/3rdparty/libxml2/xmlstring.c | 0 .../lib => lib}/3rdparty/libxml2/xmlunicode.c | 0 .../lib => lib}/3rdparty/libxml2/xmlwriter.c | 0 {reactos/lib => lib}/3rdparty/libxml2/xpath.c | 0 .../lib => lib}/3rdparty/libxml2/xpointer.c | 0 .../lib => lib}/3rdparty/mingw/CRTfmode.c | 0 {reactos/lib => lib}/3rdparty/mingw/CRTglob.c | 0 {reactos/lib => lib}/3rdparty/mingw/CRTinit.c | 0 .../lib => lib}/3rdparty/mingw/_wgetopt.c | 0 {reactos/lib => lib}/3rdparty/mingw/binmode.c | 0 .../lib => lib}/3rdparty/mingw/cpu_features.c | 0 .../lib => lib}/3rdparty/mingw/cpu_features.h | 0 {reactos/lib => lib}/3rdparty/mingw/crt1.c | 0 {reactos/lib => lib}/3rdparty/mingw/dllcrt1.c | 0 {reactos/lib => lib}/3rdparty/mingw/gccmain.c | 0 {reactos/lib => lib}/3rdparty/mingw/getopt.c | 0 {reactos/lib => lib}/3rdparty/mingw/init.c | 0 {reactos/lib => lib}/3rdparty/mingw/isascii.c | 0 {reactos/lib => lib}/3rdparty/mingw/iscsym.c | 0 {reactos/lib => lib}/3rdparty/mingw/iscsymf.c | 0 {reactos/lib => lib}/3rdparty/mingw/main.c | 0 .../lib => lib}/3rdparty/mingw/mingw.rbuild | 0 .../3rdparty/mingw/moldname-msvcrt.def | 0 .../lib => lib}/3rdparty/mingw/pseudo-reloc.c | 0 .../lib => lib}/3rdparty/mingw/strcasecmp.c | 0 .../lib => lib}/3rdparty/mingw/strncasecmp.c | 0 {reactos/lib => lib}/3rdparty/mingw/tgetopt.h | 0 {reactos/lib => lib}/3rdparty/mingw/toascii.c | 0 .../lib => lib}/3rdparty/mingw/wbinmode.c | 0 {reactos/lib => lib}/3rdparty/mingw/wcrt1.c | 0 {reactos/lib => lib}/3rdparty/mingw/wcscmpi.c | 0 {reactos/lib => lib}/3rdparty/mingw/winit.c | 0 {reactos/lib => lib}/3rdparty/mingw/wmain.c | 0 {reactos/lib => lib}/3rdparty/zlib/ChangeLog | 0 {reactos/lib => lib}/3rdparty/zlib/FAQ | 0 {reactos/lib => lib}/3rdparty/zlib/INDEX | 0 .../lib => lib}/3rdparty/zlib/Makefile.host | 0 .../lib => lib}/3rdparty/zlib/Makefile.in | 0 {reactos/lib => lib}/3rdparty/zlib/README | 0 {reactos/lib => lib}/3rdparty/zlib/adler32.c | 0 .../lib => lib}/3rdparty/zlib/algorithm.txt | 0 {reactos/lib => lib}/3rdparty/zlib/compress.c | 0 {reactos/lib => lib}/3rdparty/zlib/configure | 0 {reactos/lib => lib}/3rdparty/zlib/crc32.c | 0 {reactos/lib => lib}/3rdparty/zlib/crc32.h | 0 {reactos/lib => lib}/3rdparty/zlib/deflate.c | 0 {reactos/lib => lib}/3rdparty/zlib/deflate.h | 0 {reactos/lib => lib}/3rdparty/zlib/example.c | 0 {reactos/lib => lib}/3rdparty/zlib/gzio.c | 0 {reactos/lib => lib}/3rdparty/zlib/infback.c | 0 {reactos/lib => lib}/3rdparty/zlib/inffast.c | 0 {reactos/lib => lib}/3rdparty/zlib/inffast.h | 0 {reactos/lib => lib}/3rdparty/zlib/inffixed.h | 0 {reactos/lib => lib}/3rdparty/zlib/inflate.c | 0 {reactos/lib => lib}/3rdparty/zlib/inflate.h | 0 {reactos/lib => lib}/3rdparty/zlib/inftrees.c | 0 {reactos/lib => lib}/3rdparty/zlib/inftrees.h | 0 {reactos/lib => lib}/3rdparty/zlib/minigzip.c | 0 {reactos/lib => lib}/3rdparty/zlib/trees.c | 0 {reactos/lib => lib}/3rdparty/zlib/trees.h | 0 {reactos/lib => lib}/3rdparty/zlib/uncompr.c | 0 {reactos/lib => lib}/3rdparty/zlib/zconf.h | 0 {reactos/lib => lib}/3rdparty/zlib/zconf.in.h | 0 {reactos/lib => lib}/3rdparty/zlib/zlib.h | 0 .../lib => lib}/3rdparty/zlib/zlib.rbuild | 0 {reactos/lib => lib}/3rdparty/zlib/zutil.c | 0 {reactos/lib => lib}/3rdparty/zlib/zutil.h | 0 {reactos/lib => lib}/cmlib/cmdata.h | 0 {reactos/lib => lib}/cmlib/cminit.c | 0 {reactos/lib => lib}/cmlib/cmlib.h | 0 {reactos/lib => lib}/cmlib/cmlib.rbuild | 0 {reactos/lib => lib}/cmlib/hivebin.c | 0 {reactos/lib => lib}/cmlib/hivecell.c | 0 {reactos/lib => lib}/cmlib/hivedata.h | 0 {reactos/lib => lib}/cmlib/hiveinit.c | 0 {reactos/lib => lib}/cmlib/hivesum.c | 0 {reactos/lib => lib}/cmlib/hivewrt.c | 0 .../lib => lib}/debugsup/debugsup-ntos.spec | 0 {reactos/lib => lib}/debugsup/debugsup.rbuild | 0 {reactos/lib => lib}/drivers/chew/chew.rbuild | 0 {reactos/lib => lib}/drivers/chew/workqueue.c | 0 {reactos/lib => lib}/drivers/csq/SOURCES | 0 {reactos/lib => lib}/drivers/csq/csq.c | 0 {reactos/lib => lib}/drivers/csq/csq.def | 0 {reactos/lib => lib}/drivers/csq/csq.h | 0 {reactos/lib => lib}/drivers/csq/csq.rbuild | 0 {reactos/lib => lib}/drivers/directory.rbuild | 0 {reactos/lib => lib}/drivers/ip/ip.rbuild | 0 .../lib => lib}/drivers/ip/network/address.c | 0 {reactos/lib => lib}/drivers/ip/network/arp.c | 0 .../lib => lib}/drivers/ip/network/checksum.c | 0 .../drivers/ip/network/i386/checksum.S | 0 .../lib => lib}/drivers/ip/network/icmp.c | 0 .../drivers/ip/network/interface.c | 0 {reactos/lib => lib}/drivers/ip/network/ip.c | 0 .../lib => lib}/drivers/ip/network/loopback.c | 0 .../lib => lib}/drivers/ip/network/memtrack.c | 0 .../lib => lib}/drivers/ip/network/neighbor.c | 0 .../lib => lib}/drivers/ip/network/ports.c | 0 .../lib => lib}/drivers/ip/network/receive.c | 0 .../lib => lib}/drivers/ip/network/router.c | 0 .../lib => lib}/drivers/ip/network/routines.c | 0 .../lib => lib}/drivers/ip/network/transmit.c | 0 .../drivers/ip/transport/datagram/datagram.c | 0 .../drivers/ip/transport/rawip/rawip.c | 0 .../drivers/ip/transport/tcp/accept.c | 0 .../drivers/ip/transport/tcp/event.c | 0 .../lib => lib}/drivers/ip/transport/tcp/if.c | 0 .../drivers/ip/transport/tcp/tcp.c | 0 .../drivers/ip/transport/udp/udp.c | 0 {reactos/lib => lib}/drivers/oskittcp/README | 0 .../include/freebsd/dev/include/vm/vm.h | 0 .../include/freebsd/dev/include/vm/vm_param.h | 0 .../include/freebsd/net/include/arpa/inet.h | 0 .../include/freebsd/net/include/imp.h | 0 .../include/freebsd/src/sys/machine/ansi.h | 0 .../include/freebsd/src/sys/machine/cpufunc.h | 0 .../include/freebsd/src/sys/machine/endian.h | 0 .../include/freebsd/src/sys/machine/ipl.h | 0 .../include/freebsd/src/sys/machine/limits.h | 0 .../include/freebsd/src/sys/machine/param.h | 0 .../include/freebsd/src/sys/machine/proc.h | 0 .../include/freebsd/src/sys/machine/signal.h | 0 .../include/freebsd/src/sys/machine/spl.h | 0 .../include/freebsd/src/sys/machine/stdarg.h | 0 .../include/freebsd/src/sys/machine/trap.h | 0 .../include/freebsd/src/sys/machine/types.h | 0 .../include/freebsd/src/sys/machine/vmparam.h | 0 .../oskittcp/include/freebsd/src/sys/net/if.h | 0 .../include/freebsd/src/sys/net/if_arp.h | 0 .../include/freebsd/src/sys/net/netisr.h | 0 .../include/freebsd/src/sys/net/radix.h | 0 .../include/freebsd/src/sys/net/raw_cb.h | 0 .../include/freebsd/src/sys/net/route.h | 0 .../freebsd/src/sys/netinet/if_ether.h | 0 .../freebsd/src/sys/netinet/igmp_var.h | 0 .../include/freebsd/src/sys/netinet/in.h | 0 .../include/freebsd/src/sys/netinet/in_pcb.h | 0 .../freebsd/src/sys/netinet/in_systm.h | 0 .../include/freebsd/src/sys/netinet/in_var.h | 0 .../include/freebsd/src/sys/netinet/ip.h | 0 .../include/freebsd/src/sys/netinet/ip_fw.h | 0 .../include/freebsd/src/sys/netinet/ip_icmp.h | 0 .../include/freebsd/src/sys/netinet/ip_var.h | 0 .../include/freebsd/src/sys/netinet/tcp.h | 0 .../freebsd/src/sys/netinet/tcp_debug.h | 0 .../include/freebsd/src/sys/netinet/tcp_fsm.h | 0 .../include/freebsd/src/sys/netinet/tcp_seq.h | 0 .../freebsd/src/sys/netinet/tcp_timer.h | 0 .../include/freebsd/src/sys/netinet/tcp_var.h | 0 .../include/freebsd/src/sys/netinet/tcpip.h | 0 .../include/freebsd/src/sys/netinet/udp.h | 0 .../include/freebsd/src/sys/netinet/udp_var.h | 0 .../include/freebsd/src/sys/sys/buf.h | 0 .../include/freebsd/src/sys/sys/callout.h | 0 .../include/freebsd/src/sys/sys/cdefs.h | 0 .../include/freebsd/src/sys/sys/domain.h | 0 .../include/freebsd/src/sys/sys/errno.h | 0 .../include/freebsd/src/sys/sys/fcntl.h | 0 .../include/freebsd/src/sys/sys/file.h | 0 .../include/freebsd/src/sys/sys/filedesc.h | 0 .../include/freebsd/src/sys/sys/filio.h | 0 .../include/freebsd/src/sys/sys/ioccom.h | 0 .../include/freebsd/src/sys/sys/ioctl.h | 0 .../include/freebsd/src/sys/sys/kernel.h | 0 .../include/freebsd/src/sys/sys/libkern.h | 0 .../include/freebsd/src/sys/sys/malloc.h | 0 .../include/freebsd/src/sys/sys/mbuf.h | 0 .../include/freebsd/src/sys/sys/param.h | 0 .../include/freebsd/src/sys/sys/proc.h | 0 .../include/freebsd/src/sys/sys/protosw.h | 0 .../include/freebsd/src/sys/sys/queue.h | 0 .../include/freebsd/src/sys/sys/resource.h | 0 .../include/freebsd/src/sys/sys/resourcevar.h | 0 .../include/freebsd/src/sys/sys/rtprio.h | 0 .../include/freebsd/src/sys/sys/select.h | 0 .../include/freebsd/src/sys/sys/signal.h | 0 .../include/freebsd/src/sys/sys/signalvar.h | 0 .../include/freebsd/src/sys/sys/socket.h | 0 .../include/freebsd/src/sys/sys/socketvar.h | 0 .../include/freebsd/src/sys/sys/sockio.h | 0 .../include/freebsd/src/sys/sys/stat.h | 0 .../include/freebsd/src/sys/sys/sysctl.h | 0 .../include/freebsd/src/sys/sys/syslimits.h | 0 .../include/freebsd/src/sys/sys/syslog.h | 0 .../include/freebsd/src/sys/sys/systm.h | 0 .../include/freebsd/src/sys/sys/time.h | 0 .../include/freebsd/src/sys/sys/ttycom.h | 0 .../include/freebsd/src/sys/sys/types.h | 0 .../include/freebsd/src/sys/sys/ucred.h | 0 .../include/freebsd/src/sys/sys/uio.h | 0 .../include/freebsd/src/sys/sys/unistd.h | 0 .../drivers/oskittcp/include/memtrack.h | 0 .../drivers/oskittcp/include/oskitdebug.h | 0 .../drivers/oskittcp/include/oskiterrno.h | 0 .../drivers/oskittcp/include/oskitfreebsd.h | 0 .../drivers/oskittcp/include/oskittcp.h | 0 .../drivers/oskittcp/include/oskittypes.h | 0 .../lib => lib}/drivers/oskittcp/notes.txt | 0 .../drivers/oskittcp/oskittcp.rbuild | 0 .../drivers/oskittcp/oskittcp/defaults.c | 0 .../drivers/oskittcp/oskittcp/in.c | 0 .../drivers/oskittcp/oskittcp/in_cksum.c | 0 .../drivers/oskittcp/oskittcp/in_pcb.c | 0 .../drivers/oskittcp/oskittcp/in_proto.c | 0 .../drivers/oskittcp/oskittcp/in_rmx.c | 0 .../drivers/oskittcp/oskittcp/inet_ntoa.c | 0 .../drivers/oskittcp/oskittcp/interface.c | 0 .../drivers/oskittcp/oskittcp/ip_input.c | 0 .../drivers/oskittcp/oskittcp/ip_output.c | 0 .../drivers/oskittcp/oskittcp/kern_clock.c | 0 .../drivers/oskittcp/oskittcp/kern_subr.c | 0 .../drivers/oskittcp/oskittcp/param.c | 0 .../drivers/oskittcp/oskittcp/radix.c | 0 .../drivers/oskittcp/oskittcp/random.c | 0 .../drivers/oskittcp/oskittcp/raw_cb.c | 0 .../drivers/oskittcp/oskittcp/raw_ip.c | 0 .../drivers/oskittcp/oskittcp/raw_usrreq.c | 0 .../drivers/oskittcp/oskittcp/route.c | 0 .../drivers/oskittcp/oskittcp/rtsock.c | 0 .../drivers/oskittcp/oskittcp/scanc.c | 0 .../drivers/oskittcp/oskittcp/sleep.c | 0 .../drivers/oskittcp/oskittcp/tcp_debug.c | 0 .../drivers/oskittcp/oskittcp/tcp_input.c | 0 .../drivers/oskittcp/oskittcp/tcp_output.c | 0 .../drivers/oskittcp/oskittcp/tcp_subr.c | 0 .../drivers/oskittcp/oskittcp/tcp_timer.c | 0 .../drivers/oskittcp/oskittcp/tcp_usrreq.c | 0 .../drivers/oskittcp/oskittcp/uipc_domain.c | 0 .../drivers/oskittcp/oskittcp/uipc_mbuf.c | 0 .../drivers/oskittcp/oskittcp/uipc_socket.c | 0 .../drivers/oskittcp/oskittcp/uipc_socket2.c | 0 {reactos/lib => lib}/epsapi/enum/drivers.c | 0 {reactos/lib => lib}/epsapi/enum/modules.c | 0 {reactos/lib => lib}/epsapi/enum/processes.c | 0 {reactos/lib => lib}/epsapi/epsapi.rbuild | 0 {reactos/lib => lib}/fslib/directory.rbuild | 0 {reactos/lib => lib}/fslib/ext2lib/Badblock.c | 0 {reactos/lib => lib}/fslib/ext2lib/Bitmap.c | 0 {reactos/lib => lib}/fslib/ext2lib/Bitmap.h | 0 {reactos/lib => lib}/fslib/ext2lib/Disk.c | 0 {reactos/lib => lib}/fslib/ext2lib/Disk.h | 0 {reactos/lib => lib}/fslib/ext2lib/Group.c | 0 {reactos/lib => lib}/fslib/ext2lib/Inode.c | 0 {reactos/lib => lib}/fslib/ext2lib/Memory.c | 0 {reactos/lib => lib}/fslib/ext2lib/Mke2fs.c | 0 {reactos/lib => lib}/fslib/ext2lib/Mke2fs.h | 0 {reactos/lib => lib}/fslib/ext2lib/Super.c | 0 {reactos/lib => lib}/fslib/ext2lib/Uuid.c | 0 {reactos/lib => lib}/fslib/ext2lib/ext2_fs.h | 0 .../lib => lib}/fslib/ext2lib/ext2lib.rbuild | 0 {reactos/lib => lib}/fslib/ext2lib/types.h | 0 {reactos/lib => lib}/fslib/ntfslib/ntfslib.c | 0 {reactos/lib => lib}/fslib/ntfslib/ntfslib.h | 0 .../lib => lib}/fslib/ntfslib/ntfslib.rbuild | 0 .../lib => lib}/fslib/vfatlib/check/boot.c | 0 .../lib => lib}/fslib/vfatlib/check/boot.h | 0 .../fslib/vfatlib/check/byteorder.h | 0 .../fslib/vfatlib/check/byteswap.h | 0 .../fslib/vfatlib/check/byteswap1.h | 0 .../lib => lib}/fslib/vfatlib/check/check.c | 0 .../lib => lib}/fslib/vfatlib/check/check.h | 0 .../lib => lib}/fslib/vfatlib/check/common.c | 0 .../lib => lib}/fslib/vfatlib/check/common.h | 0 .../fslib/vfatlib/check/compiler.h | 0 .../lib => lib}/fslib/vfatlib/check/dosfsck.h | 0 .../lib => lib}/fslib/vfatlib/check/fat.c | 0 .../lib => lib}/fslib/vfatlib/check/fat.h | 0 .../lib => lib}/fslib/vfatlib/check/file.c | 0 .../lib => lib}/fslib/vfatlib/check/file.h | 0 {reactos/lib => lib}/fslib/vfatlib/check/io.c | 0 {reactos/lib => lib}/fslib/vfatlib/check/io.h | 0 .../lib => lib}/fslib/vfatlib/check/lfn.c | 0 .../lib => lib}/fslib/vfatlib/check/lfn.h | 0 .../fslib/vfatlib/check/msdos_fs.h | 0 .../lib => lib}/fslib/vfatlib/check/swab.h | 0 .../lib => lib}/fslib/vfatlib/check/version.h | 0 .../lib => lib}/fslib/vfatlib/check/vfat.h | 0 {reactos/lib => lib}/fslib/vfatlib/fat12.c | 0 {reactos/lib => lib}/fslib/vfatlib/fat16.c | 0 {reactos/lib => lib}/fslib/vfatlib/fat32.c | 0 {reactos/lib => lib}/fslib/vfatlib/vfatlib.c | 0 {reactos/lib => lib}/fslib/vfatlib/vfatlib.h | 0 .../lib => lib}/fslib/vfatlib/vfatlib.rbuild | 0 {reactos/lib => lib}/fslib/vfatxlib/fatx.c | 0 .../lib => lib}/fslib/vfatxlib/vfatxlib.c | 0 .../lib => lib}/fslib/vfatxlib/vfatxlib.h | 0 .../fslib/vfatxlib/vfatxlib.rbuild | 0 {reactos/lib => lib}/host/directory.rbuild | 0 {reactos/lib => lib}/host/wcsfuncs/wcsfuncs.c | 0 .../lib => lib}/host/wcsfuncs/wcsfuncs.rbuild | 0 {reactos/lib => lib}/inflib/README.txt | 0 {reactos/lib => lib}/inflib/builddep.h | 0 {reactos/lib => lib}/inflib/infcommon.h | 0 {reactos/lib => lib}/inflib/infcore.c | 0 {reactos/lib => lib}/inflib/infget.c | 0 {reactos/lib => lib}/inflib/infhost.h | 0 {reactos/lib => lib}/inflib/infhostgen.c | 0 {reactos/lib => lib}/inflib/infhostget.c | 0 {reactos/lib => lib}/inflib/infhostput.c | 0 {reactos/lib => lib}/inflib/inflib.h | 0 {reactos/lib => lib}/inflib/inflib.mak | 0 {reactos/lib => lib}/inflib/inflib.rbuild | 0 {reactos/lib => lib}/inflib/infpriv.h | 0 {reactos/lib => lib}/inflib/infput.c | 0 {reactos/lib => lib}/inflib/infros.h | 0 {reactos/lib => lib}/inflib/infrosgen.c | 0 {reactos/lib => lib}/inflib/infrosget.c | 0 {reactos/lib => lib}/inflib/infrosput.c | 0 {reactos/lib => lib}/lib.mak | 0 {reactos/lib => lib}/lib.rbuild | 0 {reactos/lib => lib}/nls/idna/idna.cpp | 0 {reactos/lib => lib}/nls/idna/idna.rbuild | 0 {reactos/lib => lib}/nls/idna/nameprep.cpp | 0 {reactos/lib => lib}/nls/nls.rbuild | 0 .../lib => lib}/nls/normalize/normalize.cpp | 0 .../nls/normalize/normalize.rbuild | 0 {reactos/lib => lib}/nls/scripts/scripts.cpp | 0 {reactos/lib => lib}/nls/scripts/scripts.h | 0 .../lib => lib}/nls/scripts/scripts.rbuild | 0 {reactos/lib => lib}/ntdllsys/ntdllsys.rbuild | 0 {reactos/lib => lib}/ppcmmu/devint.s | 0 {reactos/lib => lib}/ppcmmu/dummy.c | 0 {reactos/lib => lib}/ppcmmu/gdblib.c | 0 {reactos/lib => lib}/ppcmmu/ldscript | 0 {reactos/lib => lib}/ppcmmu/mmuobject.c | 0 {reactos/lib => lib}/ppcmmu/mmuobject.h | 0 {reactos/lib => lib}/ppcmmu/mmutest.c | 0 {reactos/lib => lib}/ppcmmu/mmuutil.c | 0 {reactos/lib => lib}/ppcmmu/ppcmmu.mak | 0 {reactos/lib => lib}/ppcmmu/ppcmmu.rbuild | 0 {reactos/lib => lib}/pseh/framebased.c | 0 {reactos/lib => lib}/pseh/i386/framebased.S | 0 .../lib => lib}/pseh/powerpc/framebased.S | 0 {reactos/lib => lib}/pseh/pseh.rbuild | 0 {reactos/lib => lib}/recyclebin/guid.c | 0 {reactos/lib => lib}/recyclebin/readme.txt | 0 {reactos/lib => lib}/recyclebin/recyclebin.c | 0 {reactos/lib => lib}/recyclebin/recyclebin.h | 0 .../lib => lib}/recyclebin/recyclebin.rbuild | 0 .../recyclebin/recyclebin_generic.c | 0 .../recyclebin_generic_enumerator.c | 0 .../recyclebin/recyclebin_private.h | 0 .../lib => lib}/recyclebin/recyclebin_v5.c | 0 .../lib => lib}/recyclebin/recyclebin_v5.h | 0 .../recyclebin/recyclebin_v5_enumerator.c | 0 {reactos/lib => lib}/rossym/delete.c | 0 {reactos/lib => lib}/rossym/find.c | 0 {reactos/lib => lib}/rossym/fromfile.c | 0 {reactos/lib => lib}/rossym/frommem.c | 0 {reactos/lib => lib}/rossym/fromraw.c | 0 {reactos/lib => lib}/rossym/getraw.c | 0 {reactos/lib => lib}/rossym/init.c | 0 {reactos/lib => lib}/rossym/initkm.c | 0 {reactos/lib => lib}/rossym/initum.c | 0 {reactos/lib => lib}/rossym/rossym.rbuild | 0 {reactos/lib => lib}/rossym/rossympriv.h | 0 {reactos/lib => lib}/rossym/zwfile.c | 0 {reactos/lib => lib}/rtl/access.c | 0 {reactos/lib => lib}/rtl/acl.c | 0 {reactos/lib => lib}/rtl/actctx.c | 0 {reactos/lib => lib}/rtl/arm/debug_asm.S | 0 {reactos/lib => lib}/rtl/atom.c | 0 {reactos/lib => lib}/rtl/austin/avl.c | 0 {reactos/lib => lib}/rtl/austin/avl.h | 0 {reactos/lib => lib}/rtl/austin/macros.h | 0 {reactos/lib => lib}/rtl/austin/tree.c | 0 {reactos/lib => lib}/rtl/austin/tree.h | 0 {reactos/lib => lib}/rtl/austin/udict.h | 0 {reactos/lib => lib}/rtl/bitmap.c | 0 {reactos/lib => lib}/rtl/bootdata.c | 0 {reactos/lib => lib}/rtl/compress.c | 0 {reactos/lib => lib}/rtl/condvar.c | 0 {reactos/lib => lib}/rtl/crc32.c | 0 {reactos/lib => lib}/rtl/critical.c | 0 {reactos/lib => lib}/rtl/dbgbuffer.c | 0 {reactos/lib => lib}/rtl/debug.c | 0 {reactos/lib => lib}/rtl/dos8dot3.c | 0 {reactos/lib => lib}/rtl/encode.c | 0 {reactos/lib => lib}/rtl/env.c | 0 {reactos/lib => lib}/rtl/error.c | 0 {reactos/lib => lib}/rtl/exception.c | 0 {reactos/lib => lib}/rtl/generictable.c | 0 {reactos/lib => lib}/rtl/handle.c | 0 {reactos/lib => lib}/rtl/heap.c | 0 {reactos/lib => lib}/rtl/i386/debug_asm.S | 0 {reactos/lib => lib}/rtl/i386/except.c | 0 {reactos/lib => lib}/rtl/i386/except_asm.s | 0 {reactos/lib => lib}/rtl/i386/random_asm.S | 0 {reactos/lib => lib}/rtl/i386/res_asm.s | 0 {reactos/lib => lib}/rtl/i386/rtlmem.s | 0 {reactos/lib => lib}/rtl/i386/rtlswap.S | 0 {reactos/lib => lib}/rtl/i386/thread.c | 0 {reactos/lib => lib}/rtl/image.c | 0 {reactos/lib => lib}/rtl/interlck.c | 0 {reactos/lib => lib}/rtl/largeint.c | 0 {reactos/lib => lib}/rtl/luid.c | 0 {reactos/lib => lib}/rtl/mem.c | 0 {reactos/lib => lib}/rtl/memgen.c | 0 {reactos/lib => lib}/rtl/message.c | 0 {reactos/lib => lib}/rtl/network.c | 0 {reactos/lib => lib}/rtl/nls.c | 0 {reactos/lib => lib}/rtl/path.c | 0 {reactos/lib => lib}/rtl/powerpc/debug.c | 0 {reactos/lib => lib}/rtl/powerpc/except.c | 0 .../lib => lib}/rtl/powerpc/interlocked.c | 0 {reactos/lib => lib}/rtl/powerpc/rtlmem.s | 0 {reactos/lib => lib}/rtl/powerpc/rtlswap.s | 0 {reactos/lib => lib}/rtl/powerpc/thread.c | 0 {reactos/lib => lib}/rtl/ppb.c | 0 {reactos/lib => lib}/rtl/process.c | 0 {reactos/lib => lib}/rtl/propvar.c | 0 {reactos/lib => lib}/rtl/qsort.c | 0 {reactos/lib => lib}/rtl/random.c | 0 {reactos/lib => lib}/rtl/rangelist.c | 0 {reactos/lib => lib}/rtl/readme.txt | 0 {reactos/lib => lib}/rtl/registry.c | 0 {reactos/lib => lib}/rtl/res.c | 0 {reactos/lib => lib}/rtl/resource.c | 0 {reactos/lib => lib}/rtl/rtl-common.rbuild | 0 {reactos/lib => lib}/rtl/rtl.h | 0 {reactos/lib => lib}/rtl/rtl.rbuild | 0 {reactos/lib => lib}/rtl/rtlp.h | 0 {reactos/lib => lib}/rtl/sd.c | 0 {reactos/lib => lib}/rtl/security.c | 0 {reactos/lib => lib}/rtl/sid.c | 0 {reactos/lib => lib}/rtl/slist.c | 0 {reactos/lib => lib}/rtl/splaytree.c | 0 {reactos/lib => lib}/rtl/sprintf.c | 0 {reactos/lib => lib}/rtl/srw.c | 0 {reactos/lib => lib}/rtl/swprintf.c | 0 {reactos/lib => lib}/rtl/thread.c | 0 {reactos/lib => lib}/rtl/time.c | 0 {reactos/lib => lib}/rtl/timerqueue.c | 0 {reactos/lib => lib}/rtl/timezone.c | 0 {reactos/lib => lib}/rtl/unicode.c | 0 {reactos/lib => lib}/rtl/unicodeprefix.c | 0 {reactos/lib => lib}/rtl/vectoreh.c | 0 {reactos/lib => lib}/rtl/version.c | 0 {reactos/lib => lib}/rtl/wait.c | 0 {reactos/lib => lib}/rtl/workitem.c | 0 {reactos/lib => lib}/sdk/crt/README.txt | 0 {reactos/lib => lib}/sdk/crt/conio/cgets.c | 0 {reactos/lib => lib}/sdk/crt/conio/cprintf.c | 0 {reactos/lib => lib}/sdk/crt/conio/cputs.c | 0 {reactos/lib => lib}/sdk/crt/conio/getch.c | 0 {reactos/lib => lib}/sdk/crt/conio/getche.c | 0 {reactos/lib => lib}/sdk/crt/conio/kbhit.c | 0 {reactos/lib => lib}/sdk/crt/conio/putch.c | 0 {reactos/lib => lib}/sdk/crt/conio/ungetch.c | 0 {reactos/lib => lib}/sdk/crt/crt.rbuild | 0 {reactos/lib => lib}/sdk/crt/direct/chdir.c | 0 {reactos/lib => lib}/sdk/crt/direct/chdrive.c | 0 {reactos/lib => lib}/sdk/crt/direct/getcwd.c | 0 {reactos/lib => lib}/sdk/crt/direct/getdcwd.c | 0 .../lib => lib}/sdk/crt/direct/getdfree.c | 0 .../lib => lib}/sdk/crt/direct/getdrive.c | 0 {reactos/lib => lib}/sdk/crt/direct/mkdir.c | 0 {reactos/lib => lib}/sdk/crt/direct/rmdir.c | 0 {reactos/lib => lib}/sdk/crt/direct/wchdir.c | 0 {reactos/lib => lib}/sdk/crt/direct/wgetcwd.c | 0 .../lib => lib}/sdk/crt/direct/wgetdcwd.c | 0 {reactos/lib => lib}/sdk/crt/direct/wmkdir.c | 0 {reactos/lib => lib}/sdk/crt/direct/wrmdir.c | 0 .../lib => lib}/sdk/crt/except/abnorter.c | 0 .../lib => lib}/sdk/crt/except/checkesp.c | 0 {reactos/lib => lib}/sdk/crt/except/cpp.c | 0 .../lib => lib}/sdk/crt/except/cppexcept.c | 0 .../sdk/crt/except/i386/chkstk_asm.s | 0 .../lib => lib}/sdk/crt/except/i386/prolog.s | 0 .../lib => lib}/sdk/crt/except/i386/seh.s | 0 .../lib => lib}/sdk/crt/except/i386/unwind.c | 0 {reactos/lib => lib}/sdk/crt/except/matherr.c | 0 .../sdk/crt/except/powerpc/chkstk_asm.s | 0 .../lib => lib}/sdk/crt/except/powerpc/seh.s | 0 {reactos/lib => lib}/sdk/crt/except/xcptfil.c | 0 {reactos/lib => lib}/sdk/crt/float/chgsign.c | 0 {reactos/lib => lib}/sdk/crt/float/copysign.c | 0 {reactos/lib => lib}/sdk/crt/float/fpclass.c | 0 {reactos/lib => lib}/sdk/crt/float/fpecode.c | 0 {reactos/lib => lib}/sdk/crt/float/fpreset.c | 0 .../lib => lib}/sdk/crt/float/i386/clearfp.c | 0 .../lib => lib}/sdk/crt/float/i386/cntrlfp.c | 0 .../lib => lib}/sdk/crt/float/i386/logb.c | 0 .../lib => lib}/sdk/crt/float/i386/statfp.c | 0 {reactos/lib => lib}/sdk/crt/float/isnan.c | 0 {reactos/lib => lib}/sdk/crt/float/nafter.c | 0 {reactos/lib => lib}/sdk/crt/float/scalb.c | 0 {reactos/lib => lib}/sdk/crt/include/float.h | 0 .../sdk/crt/include/internal/atexit.h | 0 .../sdk/crt/include/internal/console.h | 0 .../sdk/crt/include/internal/file.h | 0 .../sdk/crt/include/internal/ieee.h | 0 .../sdk/crt/include/internal/math.h | 0 .../sdk/crt/include/internal/mbstring.h | 0 .../sdk/crt/include/internal/mtdll.h | 0 .../sdk/crt/include/internal/printf.h | 0 .../sdk/crt/include/internal/rterror.h | 0 .../sdk/crt/include/internal/tls.h | 0 .../sdk/crt/include/internal/wine/cppexcept.h | 0 .../sdk/crt/include/internal/wine/eh.h | 0 .../sdk/crt/include/internal/wine/msvcrt.h | 0 {reactos/lib => lib}/sdk/crt/libcntpr.rbuild | 0 {reactos/lib => lib}/sdk/crt/locale/locale.c | 0 {reactos/lib => lib}/sdk/crt/math/abs.c | 0 {reactos/lib => lib}/sdk/crt/math/acos.c | 0 {reactos/lib => lib}/sdk/crt/math/adjust.c | 0 {reactos/lib => lib}/sdk/crt/math/asin.c | 0 {reactos/lib => lib}/sdk/crt/math/cabs.c | 0 {reactos/lib => lib}/sdk/crt/math/cosh.c | 0 {reactos/lib => lib}/sdk/crt/math/div.c | 0 {reactos/lib => lib}/sdk/crt/math/fdivbug.c | 0 {reactos/lib => lib}/sdk/crt/math/frexp.c | 0 {reactos/lib => lib}/sdk/crt/math/huge_val.c | 0 {reactos/lib => lib}/sdk/crt/math/hypot.c | 0 .../sdk/crt/math/i386/alldiv_asm.s | 0 .../sdk/crt/math/i386/alldvrm_asm.s | 0 .../sdk/crt/math/i386/allmul_asm.s | 0 .../sdk/crt/math/i386/allrem_asm.s | 0 .../sdk/crt/math/i386/allshl_asm.s | 0 .../sdk/crt/math/i386/allshr_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/atan2.c | 0 .../lib => lib}/sdk/crt/math/i386/atan_asm.s | 0 .../sdk/crt/math/i386/aulldiv_asm.s | 0 .../sdk/crt/math/i386/aulldvrm_asm.s | 0 .../sdk/crt/math/i386/aullrem_asm.s | 0 .../sdk/crt/math/i386/aullshr_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/ceil_asm.s | 0 {reactos/lib => lib}/sdk/crt/math/i386/ci.c | 0 .../lib => lib}/sdk/crt/math/i386/cos_asm.s | 0 {reactos/lib => lib}/sdk/crt/math/i386/exp.c | 0 .../lib => lib}/sdk/crt/math/i386/fabs_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/floor_asm.s | 0 {reactos/lib => lib}/sdk/crt/math/i386/fmod.c | 0 .../lib => lib}/sdk/crt/math/i386/ftol_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/ldexp.c | 0 .../lib => lib}/sdk/crt/math/i386/log10_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/log_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/pow_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/sin_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/sqrt_asm.s | 0 .../lib => lib}/sdk/crt/math/i386/tan_asm.s | 0 {reactos/lib => lib}/sdk/crt/math/j0_y0.c | 0 {reactos/lib => lib}/sdk/crt/math/j1_y1.c | 0 {reactos/lib => lib}/sdk/crt/math/jn_yn.c | 0 {reactos/lib => lib}/sdk/crt/math/labs.c | 0 {reactos/lib => lib}/sdk/crt/math/ldiv.c | 0 {reactos/lib => lib}/sdk/crt/math/modf.c | 0 {reactos/lib => lib}/sdk/crt/math/pow_asm.c | 0 {reactos/lib => lib}/sdk/crt/math/rand.c | 0 {reactos/lib => lib}/sdk/crt/math/rand_nt.c | 0 {reactos/lib => lib}/sdk/crt/math/s_modf.c | 0 {reactos/lib => lib}/sdk/crt/math/sinh.c | 0 {reactos/lib => lib}/sdk/crt/math/stubs.c | 0 {reactos/lib => lib}/sdk/crt/math/tanh.c | 0 .../lib => lib}/sdk/crt/mbstring/hanzen.c | 0 .../lib => lib}/sdk/crt/mbstring/ischira.c | 0 .../lib => lib}/sdk/crt/mbstring/iskana.c | 0 .../lib => lib}/sdk/crt/mbstring/iskmoji.c | 0 .../lib => lib}/sdk/crt/mbstring/iskpun.c | 0 .../lib => lib}/sdk/crt/mbstring/islead.c | 0 {reactos/lib => lib}/sdk/crt/mbstring/islwr.c | 0 .../lib => lib}/sdk/crt/mbstring/ismbal.c | 0 .../lib => lib}/sdk/crt/mbstring/ismbaln.c | 0 {reactos/lib => lib}/sdk/crt/mbstring/ismbc.c | 0 .../lib => lib}/sdk/crt/mbstring/ismbgra.c | 0 .../lib => lib}/sdk/crt/mbstring/ismbkaln.c | 0 .../lib => lib}/sdk/crt/mbstring/ismblead.c | 0 .../lib => lib}/sdk/crt/mbstring/ismbpri.c | 0 .../lib => lib}/sdk/crt/mbstring/ismbpun.c | 0 .../lib => lib}/sdk/crt/mbstring/ismbtrl.c | 0 .../lib => lib}/sdk/crt/mbstring/isuppr.c | 0 .../lib => lib}/sdk/crt/mbstring/jistojms.c | 0 .../lib => lib}/sdk/crt/mbstring/jmstojis.c | 0 .../lib => lib}/sdk/crt/mbstring/mbbtype.c | 0 .../lib => lib}/sdk/crt/mbstring/mbccpy.c | 0 .../lib => lib}/sdk/crt/mbstring/mbclen.c | 0 .../lib => lib}/sdk/crt/mbstring/mbscat.c | 0 .../lib => lib}/sdk/crt/mbstring/mbschr.c | 0 .../lib => lib}/sdk/crt/mbstring/mbscmp.c | 0 .../lib => lib}/sdk/crt/mbstring/mbscoll.c | 0 .../lib => lib}/sdk/crt/mbstring/mbscpy.c | 0 .../lib => lib}/sdk/crt/mbstring/mbscspn.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsdec.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsdup.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsicmp.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsicoll.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsinc.c | 0 .../lib => lib}/sdk/crt/mbstring/mbslen.c | 0 .../lib => lib}/sdk/crt/mbstring/mbslwr.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsncat.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsnccnt.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsncmp.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsncoll.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsncpy.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsnextc.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsnicmp.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsnicoll.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsninc.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsnset.c | 0 .../lib => lib}/sdk/crt/mbstring/mbspbrk.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsrchr.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsrev.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsset.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsspn.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsspnp.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsstr.c | 0 .../lib => lib}/sdk/crt/mbstring/mbstok.c | 0 .../lib => lib}/sdk/crt/mbstring/mbstrlen.c | 0 .../lib => lib}/sdk/crt/mbstring/mbsupr.c | 0 .../lib => lib}/sdk/crt/mem/i386/memchr_asm.s | 0 .../lib => lib}/sdk/crt/mem/i386/memcpy_asm.s | 0 .../sdk/crt/mem/i386/memmove_asm.s | 0 .../lib => lib}/sdk/crt/mem/i386/memset_asm.s | 0 {reactos/lib => lib}/sdk/crt/mem/memccpy.c | 0 {reactos/lib => lib}/sdk/crt/mem/memchr.c | 0 {reactos/lib => lib}/sdk/crt/mem/memcmp.c | 0 {reactos/lib => lib}/sdk/crt/mem/memcpy.c | 0 {reactos/lib => lib}/sdk/crt/mem/memicmp.c | 0 {reactos/lib => lib}/sdk/crt/mem/memmove.c | 0 {reactos/lib => lib}/sdk/crt/mem/memset.c | 0 {reactos/lib => lib}/sdk/crt/misc/amsg.c | 0 {reactos/lib => lib}/sdk/crt/misc/assert.c | 0 {reactos/lib => lib}/sdk/crt/misc/crtmain.c | 0 {reactos/lib => lib}/sdk/crt/misc/environ.c | 0 {reactos/lib => lib}/sdk/crt/misc/getargs.c | 0 {reactos/lib => lib}/sdk/crt/misc/initterm.c | 0 {reactos/lib => lib}/sdk/crt/misc/lock.c | 0 {reactos/lib => lib}/sdk/crt/misc/purecall.c | 0 {reactos/lib => lib}/sdk/crt/misc/stubs.c | 0 {reactos/lib => lib}/sdk/crt/misc/tls.c | 0 {reactos/lib => lib}/sdk/crt/precomp.h | 0 {reactos/lib => lib}/sdk/crt/process/_cwait.c | 0 .../lib => lib}/sdk/crt/process/_system.c | 0 {reactos/lib => lib}/sdk/crt/process/dll.c | 0 .../lib => lib}/sdk/crt/process/process.c | 0 {reactos/lib => lib}/sdk/crt/process/procid.c | 0 {reactos/lib => lib}/sdk/crt/process/thread.c | 0 .../lib => lib}/sdk/crt/process/threadid.c | 0 .../lib => lib}/sdk/crt/process/threadx.c | 0 .../lib => lib}/sdk/crt/process/wprocess.c | 0 {reactos/lib => lib}/sdk/crt/search/bsearch.c | 0 {reactos/lib => lib}/sdk/crt/search/lfind.c | 0 {reactos/lib => lib}/sdk/crt/search/lsearch.c | 0 .../lib => lib}/sdk/crt/setjmp/i386/setjmp.s | 0 {reactos/lib => lib}/sdk/crt/signal/signal.c | 0 .../lib => lib}/sdk/crt/signal/xcptinfo.c | 0 {reactos/lib => lib}/sdk/crt/stdio/access.c | 0 {reactos/lib => lib}/sdk/crt/stdio/file.c | 0 {reactos/lib => lib}/sdk/crt/stdio/find.c | 0 {reactos/lib => lib}/sdk/crt/stdio/fmode.c | 0 .../lib => lib}/sdk/crt/stdio/lnx_sprintf.c | 0 {reactos/lib => lib}/sdk/crt/stdio/perror.c | 0 {reactos/lib => lib}/sdk/crt/stdio/popen.c | 0 {reactos/lib => lib}/sdk/crt/stdio/waccess.c | 0 {reactos/lib => lib}/sdk/crt/stdio/wfind.c | 0 {reactos/lib => lib}/sdk/crt/stdio/wpopen.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/_exit.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/abort.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/atexit.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/atold.c | 0 .../lib => lib}/sdk/crt/stdlib/doserrmap.h | 0 {reactos/lib => lib}/sdk/crt/stdlib/ecvt.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/ecvtbuf.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/errno.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/fcvt.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/fcvtbuf.c | 0 .../lib => lib}/sdk/crt/stdlib/fullpath.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/gcvt.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/getenv.c | 0 .../lib => lib}/sdk/crt/stdlib/makepath.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/malloc.c | 0 .../lib => lib}/sdk/crt/stdlib/mbstowcs.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/mbtowc.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/obsol.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/putenv.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/qsort.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/rot.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/senv.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/swab.c | 0 .../lib => lib}/sdk/crt/stdlib/wfulpath.c | 0 .../lib => lib}/sdk/crt/stdlib/wmakpath.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/wputenv.c | 0 {reactos/lib => lib}/sdk/crt/stdlib/wsenv.c | 0 {reactos/lib => lib}/sdk/crt/string/atof.c | 0 {reactos/lib => lib}/sdk/crt/string/atoi.c | 0 {reactos/lib => lib}/sdk/crt/string/atoi64.c | 0 {reactos/lib => lib}/sdk/crt/string/atol.c | 0 {reactos/lib => lib}/sdk/crt/string/ctype.c | 0 .../sdk/crt/string/i386/strcat_asm.s | 0 .../sdk/crt/string/i386/strchr_asm.s | 0 .../sdk/crt/string/i386/strcmp_asm.s | 0 .../sdk/crt/string/i386/strcpy_asm.s | 0 .../sdk/crt/string/i386/strlen_asm.s | 0 .../sdk/crt/string/i386/strncat_asm.s | 0 .../sdk/crt/string/i386/strncmp_asm.s | 0 .../sdk/crt/string/i386/strncpy_asm.s | 0 .../sdk/crt/string/i386/strnlen_asm.s | 0 .../sdk/crt/string/i386/strrchr_asm.s | 0 .../lib => lib}/sdk/crt/string/i386/tchar.h | 0 .../lib => lib}/sdk/crt/string/i386/tcscat.h | 0 .../lib => lib}/sdk/crt/string/i386/tcschr.h | 0 .../lib => lib}/sdk/crt/string/i386/tcscmp.h | 0 .../lib => lib}/sdk/crt/string/i386/tcscpy.h | 0 .../lib => lib}/sdk/crt/string/i386/tcslen.h | 0 .../lib => lib}/sdk/crt/string/i386/tcsncat.h | 0 .../lib => lib}/sdk/crt/string/i386/tcsncmp.h | 0 .../lib => lib}/sdk/crt/string/i386/tcsncpy.h | 0 .../lib => lib}/sdk/crt/string/i386/tcsnlen.h | 0 .../lib => lib}/sdk/crt/string/i386/tcsrchr.h | 0 .../sdk/crt/string/i386/wcscat_asm.s | 0 .../sdk/crt/string/i386/wcschr_asm.s | 0 .../sdk/crt/string/i386/wcscmp_asm.s | 0 .../sdk/crt/string/i386/wcscpy_asm.s | 0 .../sdk/crt/string/i386/wcslen_asm.s | 0 .../sdk/crt/string/i386/wcsncat_asm.s | 0 .../sdk/crt/string/i386/wcsncmp_asm.s | 0 .../sdk/crt/string/i386/wcsncpy_asm.s | 0 .../sdk/crt/string/i386/wcsnlen_asm.s | 0 .../sdk/crt/string/i386/wcsrchr_asm.s | 0 {reactos/lib => lib}/sdk/crt/string/itoa.c | 0 {reactos/lib => lib}/sdk/crt/string/itow.c | 0 {reactos/lib => lib}/sdk/crt/string/lasttok.c | 0 .../lib => lib}/sdk/crt/string/mbstowcs_nt.c | 0 {reactos/lib => lib}/sdk/crt/string/scanf.c | 0 {reactos/lib => lib}/sdk/crt/string/scanf.h | 0 {reactos/lib => lib}/sdk/crt/string/splitp.c | 0 {reactos/lib => lib}/sdk/crt/string/strcat.c | 0 {reactos/lib => lib}/sdk/crt/string/strchr.c | 0 {reactos/lib => lib}/sdk/crt/string/strcmp.c | 0 {reactos/lib => lib}/sdk/crt/string/strcoll.c | 0 {reactos/lib => lib}/sdk/crt/string/strcpy.c | 0 {reactos/lib => lib}/sdk/crt/string/strcspn.c | 0 {reactos/lib => lib}/sdk/crt/string/strdup.c | 0 .../lib => lib}/sdk/crt/string/strerror.c | 0 {reactos/lib => lib}/sdk/crt/string/stricmp.c | 0 {reactos/lib => lib}/sdk/crt/string/strlen.c | 0 {reactos/lib => lib}/sdk/crt/string/strlwr.c | 0 {reactos/lib => lib}/sdk/crt/string/strncat.c | 0 {reactos/lib => lib}/sdk/crt/string/strncmp.c | 0 .../lib => lib}/sdk/crt/string/strncoll.c | 0 {reactos/lib => lib}/sdk/crt/string/strncpy.c | 0 .../lib => lib}/sdk/crt/string/strnicmp.c | 0 {reactos/lib => lib}/sdk/crt/string/strnlen.c | 0 {reactos/lib => lib}/sdk/crt/string/strpbrk.c | 0 {reactos/lib => lib}/sdk/crt/string/strrchr.c | 0 {reactos/lib => lib}/sdk/crt/string/strrev.c | 0 {reactos/lib => lib}/sdk/crt/string/strset.c | 0 {reactos/lib => lib}/sdk/crt/string/strspn.c | 0 {reactos/lib => lib}/sdk/crt/string/strstr.c | 0 {reactos/lib => lib}/sdk/crt/string/strtod.c | 0 {reactos/lib => lib}/sdk/crt/string/strtok.c | 0 {reactos/lib => lib}/sdk/crt/string/strtol.c | 0 {reactos/lib => lib}/sdk/crt/string/strtold.c | 0 {reactos/lib => lib}/sdk/crt/string/strtoul.c | 0 .../lib => lib}/sdk/crt/string/strtoull.c | 0 {reactos/lib => lib}/sdk/crt/string/strupr.c | 0 {reactos/lib => lib}/sdk/crt/string/strxfrm.c | 0 {reactos/lib => lib}/sdk/crt/string/strxspn.h | 0 {reactos/lib => lib}/sdk/crt/string/tcscat.h | 0 {reactos/lib => lib}/sdk/crt/string/tcschr.h | 0 {reactos/lib => lib}/sdk/crt/string/tcscmp.h | 0 {reactos/lib => lib}/sdk/crt/string/tcscpy.h | 0 {reactos/lib => lib}/sdk/crt/string/tcslen.h | 0 {reactos/lib => lib}/sdk/crt/string/tcsncat.h | 0 {reactos/lib => lib}/sdk/crt/string/tcsncmp.h | 0 {reactos/lib => lib}/sdk/crt/string/tcsncpy.h | 0 {reactos/lib => lib}/sdk/crt/string/tcsnlen.h | 0 {reactos/lib => lib}/sdk/crt/string/tcsrchr.h | 0 {reactos/lib => lib}/sdk/crt/string/wcs.c | 0 {reactos/lib => lib}/sdk/crt/string/wcscat.c | 0 {reactos/lib => lib}/sdk/crt/string/wcschr.c | 0 {reactos/lib => lib}/sdk/crt/string/wcscmp.c | 0 {reactos/lib => lib}/sdk/crt/string/wcscpy.c | 0 {reactos/lib => lib}/sdk/crt/string/wcslen.c | 0 {reactos/lib => lib}/sdk/crt/string/wcsncat.c | 0 {reactos/lib => lib}/sdk/crt/string/wcsncmp.c | 0 {reactos/lib => lib}/sdk/crt/string/wcsncpy.c | 0 {reactos/lib => lib}/sdk/crt/string/wcsnlen.c | 0 {reactos/lib => lib}/sdk/crt/string/wcsrchr.c | 0 {reactos/lib => lib}/sdk/crt/string/wcstod.c | 0 {reactos/lib => lib}/sdk/crt/string/wcstol.c | 0 .../lib => lib}/sdk/crt/string/wcstombs_nt.c | 0 {reactos/lib => lib}/sdk/crt/string/wcstoul.c | 0 {reactos/lib => lib}/sdk/crt/string/witoa.c | 0 {reactos/lib => lib}/sdk/crt/string/witow.c | 0 {reactos/lib => lib}/sdk/crt/string/wsplitp.c | 0 {reactos/lib => lib}/sdk/crt/string/wtoi.c | 0 {reactos/lib => lib}/sdk/crt/string/wtoi64.c | 0 {reactos/lib => lib}/sdk/crt/string/wtol.c | 0 .../lib => lib}/sdk/crt/sys_stat/systime.c | 0 {reactos/lib => lib}/sdk/crt/time/clock.c | 0 {reactos/lib => lib}/sdk/crt/time/ctime.c | 0 {reactos/lib => lib}/sdk/crt/time/difftime.c | 0 {reactos/lib => lib}/sdk/crt/time/ftime.c | 0 {reactos/lib => lib}/sdk/crt/time/posixrul.h | 0 {reactos/lib => lib}/sdk/crt/time/strdate.c | 0 {reactos/lib => lib}/sdk/crt/time/strftime.c | 0 {reactos/lib => lib}/sdk/crt/time/strtime.c | 0 {reactos/lib => lib}/sdk/crt/time/time.c | 0 {reactos/lib => lib}/sdk/crt/time/tz_vars.c | 0 {reactos/lib => lib}/sdk/crt/time/tzfile.h | 0 {reactos/lib => lib}/sdk/crt/time/wctime.c | 0 {reactos/lib => lib}/sdk/crt/time/wstrdate.c | 0 {reactos/lib => lib}/sdk/crt/time/wstrtime.c | 0 {reactos/lib => lib}/sdk/crt/wine/heap.c | 0 {reactos/lib => lib}/sdk/crt/wine/undname.c | 0 .../lib => lib}/sdk/crt/wstring/wcscoll.c | 0 .../lib => lib}/sdk/crt/wstring/wcscspn.c | 0 .../lib => lib}/sdk/crt/wstring/wcsicmp.c | 0 {reactos/lib => lib}/sdk/crt/wstring/wcslwr.c | 0 .../lib => lib}/sdk/crt/wstring/wcsnicmp.c | 0 {reactos/lib => lib}/sdk/crt/wstring/wcsspn.c | 0 {reactos/lib => lib}/sdk/crt/wstring/wcsstr.c | 0 {reactos/lib => lib}/sdk/crt/wstring/wcstok.c | 0 {reactos/lib => lib}/sdk/crt/wstring/wcsupr.c | 0 .../lib => lib}/sdk/crt/wstring/wcsxfrm.c | 0 .../lib => lib}/sdk/crt/wstring/wlasttok.c | 0 .../lib => lib}/sdk/dxguid/dxguid-mingw.c | 0 {reactos/lib => lib}/sdk/dxguid/dxguid.rbuild | 0 {reactos/lib => lib}/sdk/nt/entry_point.c | 0 {reactos/lib => lib}/sdk/nt/nt.rbuild | 0 {reactos/lib => lib}/sdk/nt/readme.txt | 0 {reactos/lib => lib}/sdk/scrnsave/scrnsave.c | 0 .../lib => lib}/sdk/scrnsave/scrnsave.rbuild | 0 {reactos/lib => lib}/sdk/sdk.rbuild | 0 {reactos/lib => lib}/sdk/strmiids/strmiids.c | 0 .../lib => lib}/sdk/strmiids/strmiids.rbuild | 0 {reactos/lib => lib}/sdk/uuid/uuid.c | 0 {reactos/lib => lib}/sdk/uuid/uuid.rbuild | 0 {reactos/lib => lib}/sdk/wdmguid/wdmguid.c | 0 .../lib => lib}/sdk/wdmguid/wdmguid.rbuild | 0 {reactos/lib => lib}/smlib/compses.c | 0 {reactos/lib => lib}/smlib/connect.c | 0 {reactos/lib => lib}/smlib/execpgm.c | 0 {reactos/lib => lib}/smlib/lookupss.c | 0 {reactos/lib => lib}/smlib/precomp.h | 0 {reactos/lib => lib}/smlib/smlib.rbuild | 0 .../lib => lib}/win32ksys/win32ksys.rbuild | 0 .../media => media}/doc/3rd Party Files.txt | 0 {reactos/media => media}/doc/DIRS | 0 .../doc/DdCreateDirectDrawObject.txt | 0 .../doc/DdDeleteDirectDrawObject.txt | 0 {reactos/media => media}/doc/HACKING | 0 {reactos/media => media}/doc/INDEX | 0 {reactos/media => media}/doc/INTERNALS | 0 {reactos/media => media}/doc/LPC.txt | 0 {reactos/media => media}/doc/README.WINE | 0 {reactos/media => media}/doc/apc | 0 {reactos/media => media}/doc/books.txt | 0 .../doc/irp cancel boilerplate.c | 0 {reactos/media => media}/doc/locks.txt | 0 .../media => media}/doc/memcpy_optimize.txt | 0 {reactos/media => media}/doc/news1 | 0 {reactos/media => media}/doc/news2 | 0 {reactos/media => media}/doc/notes | 0 {reactos/media => media}/doc/todo | 0 {reactos/media => media}/doc/win32k_refs.txt | 0 .../doc/winsta and desktops.txt | 0 .../media => media}/drivers/drivers.rbuild | 0 {reactos/media => media}/drivers/etc/KDBinit | 0 .../media => media}/drivers/etc/etc.rbuild | 0 {reactos/media => media}/drivers/etc/services | 0 .../media => media}/fonts/DejaVuSans-Bold.ttf | Bin .../fonts/DejaVuSans-BoldOblique.ttf | Bin .../fonts/DejaVuSans-Oblique.ttf | Bin {reactos/media => media}/fonts/DejaVuSans.ttf | Bin .../fonts/DejaVuSansMono-Bold.ttf | Bin .../fonts/DejaVuSansMono-BoldOblique.ttf | Bin .../fonts/DejaVuSansMono-Oblique.ttf | Bin .../media => media}/fonts/DejaVuSansMono.ttf | Bin .../fonts/DejaVuSerif-Bold.ttf | Bin .../fonts/DejaVuSerif-BoldItalic.ttf | Bin .../fonts/DejaVuSerif-Italic.ttf | Bin .../media => media}/fonts/DejaVuSerif.ttf | Bin {reactos/media => media}/fonts/FreeMono.ttf | Bin .../media => media}/fonts/FreeMonoBold.ttf | Bin .../fonts/FreeMonoBoldOblique.ttf | Bin .../media => media}/fonts/FreeMonoOblique.ttf | Bin .../fonts/LiberationMono-Bold.ttf | Bin .../fonts/LiberationMono-BoldItalic.ttf | Bin .../fonts/LiberationMono-Italic.ttf | Bin .../fonts/LiberationMono-Regular.ttf | Bin .../fonts/LiberationSans-Bold.ttf | Bin .../fonts/LiberationSans-BoldItalic.ttf | Bin .../fonts/LiberationSans-Italic.ttf | Bin .../fonts/LiberationSans-Regular.ttf | Bin .../fonts/LiberationSerif-Bold.ttf | Bin .../fonts/LiberationSerif-BoldItalic.ttf | Bin .../fonts/LiberationSerif-Italic.ttf | Bin .../fonts/LiberationSerif-Regular.ttf | Bin {reactos/media => media}/fonts/Marlett.ttf | Bin .../fonts/doc/DejaVu_AUTHORS.txt | 0 .../media => media}/fonts/doc/DejaVu_BUGS.txt | 0 .../fonts/doc/DejaVu_LICENSE.txt | 0 .../media => media}/fonts/doc/DejaVu_NEWS.txt | 0 .../fonts/doc/DejaVu_README.txt | 0 .../fonts/doc/DejaVu_langcover.txt | 0 .../fonts/doc/DejaVu_status.txt | 0 .../fonts/doc/DejaVu_unicover.txt | 0 .../fonts/doc/FreeFont_readme.txt | 0 .../fonts/doc/LICENSE_DejaVu.txt | 0 {reactos/media => media}/fonts/fonts.rbuild | 0 {reactos/media => media}/fonts/tahoma.ttf | Bin {reactos/media => media}/fonts/tahomabd.ttf | Bin {reactos/media => media}/inf/NET_NIC.inf | Bin {reactos/media => media}/inf/acpi.inf | Bin {reactos/media => media}/inf/cdrom.inf | Bin {reactos/media => media}/inf/cpu.inf | Bin {reactos/media => media}/inf/display.inf | Bin {reactos/media => media}/inf/fdc.inf | Bin {reactos/media => media}/inf/font.inf | 0 {reactos/media => media}/inf/hdc.inf | Bin {reactos/media => media}/inf/inf.rbuild | 0 {reactos/media => media}/inf/intl.inf | 0 {reactos/media => media}/inf/keyboard.inf | Bin {reactos/media => media}/inf/layout.inf | 0 {reactos/media => media}/inf/machine.inf | Bin {reactos/media => media}/inf/msmouse.inf | Bin {reactos/media => media}/inf/netamd.inf | 0 {reactos/media => media}/inf/netisa.inf | Bin {reactos/media => media}/inf/netrtpnt.inf | 0 {reactos/media => media}/inf/nettcpip.inf | 0 {reactos/media => media}/inf/ports.inf | Bin {reactos/media => media}/inf/scsi.inf | Bin {reactos/media => media}/inf/syssetup.inf.tpl | 0 {reactos/media => media}/inf/usb.inf | Bin {reactos/media => media}/inf/usbport.inf | Bin {reactos/media => media}/inf/usbstor.inf | Bin {reactos/media => media}/inf/xboxdisp.inf | 0 {reactos/media => media}/media.rbuild | 0 {reactos/media => media}/nls/c_037.nls | Bin {reactos/media => media}/nls/c_10000.nls | Bin {reactos/media => media}/nls/c_10006.nls | Bin {reactos/media => media}/nls/c_10007.nls | Bin {reactos/media => media}/nls/c_10029.nls | Bin {reactos/media => media}/nls/c_1006.nls | Bin {reactos/media => media}/nls/c_10079.nls | Bin {reactos/media => media}/nls/c_10081.nls | Bin {reactos/media => media}/nls/c_1026.nls | Bin {reactos/media => media}/nls/c_1250.nls | Bin {reactos/media => media}/nls/c_1251.nls | Bin {reactos/media => media}/nls/c_1252.nls | Bin {reactos/media => media}/nls/c_1253.nls | Bin {reactos/media => media}/nls/c_1254.nls | Bin {reactos/media => media}/nls/c_1255.nls | Bin {reactos/media => media}/nls/c_1256.nls | Bin {reactos/media => media}/nls/c_1257.nls | Bin {reactos/media => media}/nls/c_1258.nls | Bin {reactos/media => media}/nls/c_20866.nls | Bin {reactos/media => media}/nls/c_28591.nls | Bin {reactos/media => media}/nls/c_28592.nls | Bin {reactos/media => media}/nls/c_28593.nls | Bin {reactos/media => media}/nls/c_28594.nls | Bin {reactos/media => media}/nls/c_28595.nls | Bin {reactos/media => media}/nls/c_28596.nls | Bin {reactos/media => media}/nls/c_28597.nls | Bin {reactos/media => media}/nls/c_28598.nls | Bin {reactos/media => media}/nls/c_28599.nls | Bin {reactos/media => media}/nls/c_424.nls | Bin {reactos/media => media}/nls/c_437.nls | Bin {reactos/media => media}/nls/c_500.nls | Bin {reactos/media => media}/nls/c_737.nls | Bin {reactos/media => media}/nls/c_775.nls | Bin {reactos/media => media}/nls/c_850.nls | Bin {reactos/media => media}/nls/c_852.nls | Bin {reactos/media => media}/nls/c_855.nls | Bin {reactos/media => media}/nls/c_856.nls | Bin {reactos/media => media}/nls/c_857.nls | Bin {reactos/media => media}/nls/c_860.nls | Bin {reactos/media => media}/nls/c_861.nls | Bin {reactos/media => media}/nls/c_862.nls | Bin {reactos/media => media}/nls/c_863.nls | Bin {reactos/media => media}/nls/c_864.nls | Bin {reactos/media => media}/nls/c_865.nls | Bin {reactos/media => media}/nls/c_866.nls | Bin {reactos/media => media}/nls/c_869.nls | Bin {reactos/media => media}/nls/c_874.nls | Bin {reactos/media => media}/nls/c_875.nls | Bin {reactos/media => media}/nls/c_878.nls | Bin {reactos/media => media}/nls/c_932.nls | Bin {reactos/media => media}/nls/c_936.nls | Bin {reactos/media => media}/nls/c_949.nls | Bin {reactos/media => media}/nls/c_950.nls | Bin {reactos/media => media}/nls/l_intl.nls | Bin {reactos/media => media}/nls/nls.rbuild | 0 {reactos/media => media}/sounds/error.mp3 | Bin {reactos/media => media}/sounds/notice.mp3 | Bin {reactos/media => media}/vgafonts/437-8x8.bin | Bin {reactos/media => media}/vgafonts/737-8x8.bin | Bin {reactos/media => media}/vgafonts/775-8x8.bin | Bin {reactos/media => media}/vgafonts/850-8x8.bin | Bin {reactos/media => media}/vgafonts/852-8x8.bin | Bin {reactos/media => media}/vgafonts/865-8x8.bin | Bin {reactos/media => media}/vgafonts/866-8x8.bin | Bin .../media => media}/vgafonts/vgafonts.rbuild | 0 .../media => media}/wallpapers/wallpapers.txt | 0 {reactos/modules => modules}/directory.rbuild | 0 {reactos/modules => modules}/empty.rbuild | 0 {reactos/ntoskrnl => ntoskrnl}/Doxyfile | 0 {reactos/ntoskrnl => ntoskrnl}/KrnlFun.c | 0 {reactos/ntoskrnl => ntoskrnl}/cc/cacheman.c | 0 {reactos/ntoskrnl => ntoskrnl}/cc/copy.c | 0 {reactos/ntoskrnl => ntoskrnl}/cc/fs.c | 0 {reactos/ntoskrnl => ntoskrnl}/cc/mdl.c | 0 {reactos/ntoskrnl => ntoskrnl}/cc/pin.c | 0 {reactos/ntoskrnl => ntoskrnl}/cc/view.c | 0 .../config/arm/cmhardwr.c | 0 .../ntoskrnl => ntoskrnl}/config/cmalloc.c | 0 {reactos/ntoskrnl => ntoskrnl}/config/cmapi.c | 0 .../ntoskrnl => ntoskrnl}/config/cmboot.c | 0 .../ntoskrnl => ntoskrnl}/config/cmcheck.c | 0 .../ntoskrnl => ntoskrnl}/config/cmconfig.c | 0 .../ntoskrnl => ntoskrnl}/config/cmcontrl.c | 0 .../ntoskrnl => ntoskrnl}/config/cmdata.c | 0 .../ntoskrnl => ntoskrnl}/config/cmdelay.c | 0 .../ntoskrnl => ntoskrnl}/config/cmhook.c | 0 .../ntoskrnl => ntoskrnl}/config/cmindex.c | 0 .../ntoskrnl => ntoskrnl}/config/cminit.c | 0 .../ntoskrnl => ntoskrnl}/config/cmkcbncb.c | 0 .../ntoskrnl => ntoskrnl}/config/cmkeydel.c | 0 .../ntoskrnl => ntoskrnl}/config/cmlazy.c | 0 .../ntoskrnl => ntoskrnl}/config/cmmapvw.c | 0 .../ntoskrnl => ntoskrnl}/config/cmname.c | 0 .../ntoskrnl => ntoskrnl}/config/cmparse.c | 0 {reactos/ntoskrnl => ntoskrnl}/config/cmse.c | 0 .../ntoskrnl => ntoskrnl}/config/cmsecach.c | 0 .../ntoskrnl => ntoskrnl}/config/cmsysini.c | 0 .../ntoskrnl => ntoskrnl}/config/cmvalche.c | 0 .../ntoskrnl => ntoskrnl}/config/cmvalue.c | 0 .../ntoskrnl => ntoskrnl}/config/cmwraprs.c | 0 .../config/i386/cmhardwr.c | 0 {reactos/ntoskrnl => ntoskrnl}/config/ntapi.c | 0 .../config/powerpc/cmhardwr.c | 0 {reactos/ntoskrnl => ntoskrnl}/dbgk/dbgkobj.c | 0 .../ntoskrnl => ntoskrnl}/dbgk/dbgkutil.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/atom.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/callback.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/dbgctrl.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/efi.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/event.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/evtpair.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/exintrin.c | 0 .../ntoskrnl => ntoskrnl}/ex/fastinterlck.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/fmutex.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/handle.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/harderr.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/hdlsterm.c | 0 .../ex/i386/fastinterlck_asm.S | 0 .../ex/i386/interlck_asm.S | 0 .../ntoskrnl => ntoskrnl}/ex/i386/ioport.S | 0 {reactos/ntoskrnl => ntoskrnl}/ex/init.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/keyedevt.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/locale.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/lookas.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/mutant.c | 0 .../ntoskrnl => ntoskrnl}/ex/powerpc/ioport.s | 0 {reactos/ntoskrnl => ntoskrnl}/ex/profile.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/pushlock.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/resource.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/rundown.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/sem.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/shutdown.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/sysinfo.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/time.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/timer.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/uuid.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/win32k.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/work.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/xipdisp.c | 0 {reactos/ntoskrnl => ntoskrnl}/ex/zone.c | 0 .../ntoskrnl => ntoskrnl}/fsrtl/dbcsname.c | 0 {reactos/ntoskrnl => ntoskrnl}/fsrtl/fastio.c | 0 .../ntoskrnl => ntoskrnl}/fsrtl/faulttol.c | 0 .../ntoskrnl => ntoskrnl}/fsrtl/filelock.c | 0 {reactos/ntoskrnl => ntoskrnl}/fsrtl/filter.c | 0 .../ntoskrnl => ntoskrnl}/fsrtl/filtrctx.c | 0 .../ntoskrnl => ntoskrnl}/fsrtl/fsfilter.c | 0 .../ntoskrnl => ntoskrnl}/fsrtl/fsrtlpc.c | 0 .../ntoskrnl => ntoskrnl}/fsrtl/largemcb.c | 0 {reactos/ntoskrnl => ntoskrnl}/fsrtl/name.c | 0 {reactos/ntoskrnl => ntoskrnl}/fsrtl/notify.c | 0 {reactos/ntoskrnl => ntoskrnl}/fsrtl/oplock.c | 0 {reactos/ntoskrnl => ntoskrnl}/fsrtl/pnp.c | 0 .../ntoskrnl => ntoskrnl}/fsrtl/stackovf.c | 0 {reactos/ntoskrnl => ntoskrnl}/fsrtl/tunnel.c | 0 {reactos/ntoskrnl => ntoskrnl}/fsrtl/unc.c | 0 .../ntoskrnl => ntoskrnl}/fstub/disksup.c | 0 .../ntoskrnl => ntoskrnl}/fstub/fstubex.c | 0 .../ntoskrnl => ntoskrnl}/fstub/halstub.c | 0 {reactos/ntoskrnl => ntoskrnl}/inbv/inbv.c | 0 .../ntoskrnl => ntoskrnl}/inbv/logo/1.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/13.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/14.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/15.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/16.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/17.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/2.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/3.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/4.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/5.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/6.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/7.bmp | Bin .../ntoskrnl => ntoskrnl}/inbv/logo/8.bmp | Bin .../ntoskrnl => ntoskrnl}/include/config.h | 0 .../include/internal/arch/intrin_i.h | 0 .../include/internal/arch/ke.h | 0 .../include/internal/arch/mm.h | 0 .../include/internal/arm/asmmacro.S | 0 .../include/internal/arm/intrin_i.h | 0 .../include/internal/arm/ke.h | 0 .../include/internal/arm/ksarm.h | 0 .../include/internal/arm/kxarm.h | 0 .../include/internal/arm/mm.h | 0 .../include/internal/cc.h | 0 .../include/internal/cm.h | 0 .../include/internal/cm_x.h | 0 .../include/internal/dbgk.h | 0 .../include/internal/ex.h | 0 .../include/internal/fsrtl.h | 0 .../include/internal/hal.h | 0 .../include/internal/i386/asmmacro.S | 0 .../include/internal/i386/intrin_i.h | 0 .../include/internal/i386/ke.h | 0 .../include/internal/i386/mm.h | 0 .../include/internal/i386/v86m.h | 0 .../include/internal/inbv.h | 0 .../include/internal/io.h | 0 .../include/internal/io_i.h | 0 .../include/internal/io_x.h | 0 .../include/internal/kbd.h | 0 .../include/internal/kd.h | 0 .../include/internal/kd64.h | 0 .../include/internal/ke.h | 0 .../include/internal/ke_x.h | 0 .../include/internal/ldr.h | 0 .../include/internal/lpc.h | 0 .../include/internal/lpc_x.h | 0 .../include/internal/mm.h | 0 .../include/internal/ntoskrnl.h | 0 .../include/internal/ob.h | 0 .../include/internal/ob_x.h | 0 .../include/internal/pci.h | 0 .../include/internal/po.h | 0 .../include/internal/powerpc/intrin_i.h | 0 .../include/internal/powerpc/ke.h | 0 .../include/internal/ps.h | 0 .../include/internal/ps_i.h | 0 .../include/internal/ps_x.h | 0 .../include/internal/rtl.h | 0 .../include/internal/se.h | 0 .../include/internal/tag.h | 0 .../include/internal/test.h | 0 .../include/internal/vdm.h | 0 .../ntoskrnl => ntoskrnl}/include/ntoskrnl.h | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/adapter.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/arcname.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/bootlog.c | 0 .../io/iomgr/controller.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/device.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/deviface.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/driver.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/drvrlist.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/error.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/file.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/iocomp.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/ioevent.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/iofunc.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/iomdl.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/iomgr.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/iorsrce.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/iotimer.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/iowork.c | 0 {reactos/ntoskrnl => ntoskrnl}/io/iomgr/irp.c | 0 {reactos/ntoskrnl => ntoskrnl}/io/iomgr/irq.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/ramdisk.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/rawfs.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/remlock.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/symlink.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/util.c | 0 .../ntoskrnl => ntoskrnl}/io/iomgr/volume.c | 0 .../io/pnpmgr/plugplay.c | 0 .../ntoskrnl => ntoskrnl}/io/pnpmgr/pnpdma.c | 0 .../ntoskrnl => ntoskrnl}/io/pnpmgr/pnpmgr.c | 0 .../io/pnpmgr/pnpnotify.c | 0 .../io/pnpmgr/pnpreport.c | 0 .../ntoskrnl => ntoskrnl}/io/pnpmgr/pnproot.c | 0 .../ntoskrnl => ntoskrnl}/kd/i386/kdmemsup.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd/kdinit.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd/kdio.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd/kdmain.c | 0 .../ntoskrnl => ntoskrnl}/kd/wrappers/bochs.c | 0 .../kd/wrappers/gdbstub.c | 0 .../kd/wrappers/gdbstub_powerpc.c | 0 .../ntoskrnl => ntoskrnl}/kd/wrappers/kdbg.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd64/kdapi.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd64/kdbreak.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd64/kddata.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd64/kdinit.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd64/kdlock.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd64/kdprint.c | 0 {reactos/ntoskrnl => ntoskrnl}/kd64/kdtrap.c | 0 .../ntoskrnl => ntoskrnl}/kdbg/i386/dis-asm.h | 0 .../kdbg/i386/i386-dis.c | 0 .../kdbg/i386/kdb_help.S | 0 .../ntoskrnl => ntoskrnl}/kdbg/i386/longjmp.S | 0 .../ntoskrnl => ntoskrnl}/kdbg/i386/setjmp.S | 0 {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb.c | 0 {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb.h | 0 {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb_cli.c | 0 .../ntoskrnl => ntoskrnl}/kdbg/kdb_expr.c | 0 .../ntoskrnl => ntoskrnl}/kdbg/kdb_keyboard.c | 0 .../ntoskrnl => ntoskrnl}/kdbg/kdb_serial.c | 0 .../ntoskrnl => ntoskrnl}/kdbg/kdb_symbols.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/apc.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/arm/boot.s | 0 {reactos/ntoskrnl => ntoskrnl}/ke/arm/cpu.c | 0 .../ntoskrnl => ntoskrnl}/ke/arm/ctxswtch.s | 0 {reactos/ntoskrnl => ntoskrnl}/ke/arm/exp.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/arm/ke_i.h | 0 .../ntoskrnl => ntoskrnl}/ke/arm/kiinit.c | 0 .../ntoskrnl => ntoskrnl}/ke/arm/stubs_asm.s | 0 .../ntoskrnl => ntoskrnl}/ke/arm/thrdini.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/arm/time.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/arm/trap.s | 0 {reactos/ntoskrnl => ntoskrnl}/ke/arm/trapc.c | 0 .../ntoskrnl => ntoskrnl}/ke/arm/usercall.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/balmgr.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/bug.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/clock.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/config.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/devqueue.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/dpc.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/eventobj.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/except.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/freeldr.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/gate.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/gmutex.c | 0 .../ntoskrnl => ntoskrnl}/ke/i386/abios.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/i386/boot.S | 0 {reactos/ntoskrnl => ntoskrnl}/ke/i386/cpu.c | 0 .../ntoskrnl => ntoskrnl}/ke/i386/ctxswitch.S | 0 {reactos/ntoskrnl => ntoskrnl}/ke/i386/exp.c | 0 .../ntoskrnl => ntoskrnl}/ke/i386/irqobj.c | 0 .../ntoskrnl => ntoskrnl}/ke/i386/kiinit.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/i386/ldt.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/i386/mtrr.c | 0 .../ntoskrnl => ntoskrnl}/ke/i386/patpge.c | 0 .../ntoskrnl => ntoskrnl}/ke/i386/systimer.S | 0 .../ntoskrnl => ntoskrnl}/ke/i386/thrdini.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/i386/trap.s | 0 .../ntoskrnl => ntoskrnl}/ke/i386/usercall.c | 0 .../ke/i386/usercall_asm.S | 0 .../ntoskrnl => ntoskrnl}/ke/i386/v86m_sup.S | 0 .../ntoskrnl => ntoskrnl}/ke/i386/v86vdm.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/ipi.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/krnlinit.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/mutex.c | 0 .../ntoskrnl => ntoskrnl}/ke/powerpc/cpu.c | 0 .../ke/powerpc/ctxhelp.S | 0 .../ke/powerpc/ctxswitch.c | 0 .../ntoskrnl => ntoskrnl}/ke/powerpc/exp.c | 0 .../ntoskrnl => ntoskrnl}/ke/powerpc/kiinit.c | 0 .../ke/powerpc/main_asm.S | 0 .../ke/powerpc/ppc_irq.c | 0 .../ntoskrnl => ntoskrnl}/ke/powerpc/stubs.c | 0 .../ke/powerpc/systimer.c | 0 .../ke/powerpc/thrdini.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/procobj.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/profobj.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/queue.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/semphobj.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/spinlock.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/thrdobj.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/thrdschd.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/timerobj.c | 0 {reactos/ntoskrnl => ntoskrnl}/ke/wait.c | 0 {reactos/ntoskrnl => ntoskrnl}/lpc/close.c | 0 {reactos/ntoskrnl => ntoskrnl}/lpc/complete.c | 0 {reactos/ntoskrnl => ntoskrnl}/lpc/connect.c | 0 {reactos/ntoskrnl => ntoskrnl}/lpc/create.c | 0 {reactos/ntoskrnl => ntoskrnl}/lpc/listen.c | 0 {reactos/ntoskrnl => ntoskrnl}/lpc/port.c | 0 {reactos/ntoskrnl => ntoskrnl}/lpc/reply.c | 0 {reactos/ntoskrnl => ntoskrnl}/lpc/send.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/anonmem.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/arm/stubs.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/balance.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/cont.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/drvlck.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/elf.inc.h | 0 {reactos/ntoskrnl => ntoskrnl}/mm/elf32.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/elf64.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/freelist.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/i386/page.c | 0 .../ntoskrnl => ntoskrnl}/mm/i386/pagepae.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/iospace.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/kmap.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/marea.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/mdlsup.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/mm.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/mminit.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/mpw.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/ncache.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/npool.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/pagefile.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/pageop.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/pe.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/physical.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/pool.c | 0 .../ntoskrnl => ntoskrnl}/mm/powerpc/page.c | 0 .../ntoskrnl => ntoskrnl}/mm/powerpc/pfault.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/ppool.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/procsup.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/region.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/rmap.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/rpoolmgr.h | 0 {reactos/ntoskrnl => ntoskrnl}/mm/section.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/sysldr.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/verifier.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/virtual.c | 0 {reactos/ntoskrnl => ntoskrnl}/mm/wset.c | 0 .../ntoskrnl => ntoskrnl}/ntkrnlmp.rbuild | 0 .../ntoskrnl-generic.rbuild | 0 .../ntoskrnl => ntoskrnl}/ntoskrnl.rbuild | 0 {reactos/ntoskrnl => ntoskrnl}/ntoskrnl.rc | 0 {reactos/ntoskrnl => ntoskrnl}/ntoskrnl.spec | 0 .../ntoskrnl => ntoskrnl}/ntoskrnl_arm.lnk | 0 .../ntoskrnl => ntoskrnl}/ntoskrnl_i386.lnk | 0 .../ntoskrnl_powerpc.lnk | 0 {reactos/ntoskrnl => ntoskrnl}/ob/obdir.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/obhandle.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/obinit.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/oblife.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/oblink.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/obname.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/obref.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/obsdcach.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/obsecure.c | 0 {reactos/ntoskrnl => ntoskrnl}/ob/obwait.c | 0 {reactos/ntoskrnl => ntoskrnl}/po/events.c | 0 {reactos/ntoskrnl => ntoskrnl}/po/power.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/arm/psctx.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/debug.c | 0 .../ntoskrnl => ntoskrnl}/ps/i386/psctx.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/job.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/kill.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/process.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/psmgr.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/psnotify.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/query.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/quota.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/security.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/state.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/thread.c | 0 {reactos/ntoskrnl => ntoskrnl}/ps/win32.c | 0 .../ntoskrnl => ntoskrnl}/rtl/arm/rtlexcpt.c | 0 .../ntoskrnl => ntoskrnl}/rtl/i386/stack.S | 0 {reactos/ntoskrnl => ntoskrnl}/rtl/libsupp.c | 0 {reactos/ntoskrnl => ntoskrnl}/rtl/misc.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/access.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/acl.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/audit.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/lsa.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/priv.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/sd.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/semgr.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/sid.c | 0 {reactos/ntoskrnl => ntoskrnl}/se/token.c | 0 {reactos/ntoskrnl => ntoskrnl}/sysfuncs.lst | 0 .../ntoskrnl => ntoskrnl}/tests/TestDebug.c | 0 .../ntoskrnl => ntoskrnl}/tests/TestTimer.c | 0 {reactos/ntoskrnl => ntoskrnl}/tests/fsrtl.c | 0 {reactos/ntoskrnl => ntoskrnl}/tests/setup.c | 0 .../ntoskrnl => ntoskrnl}/tests/stubs.tst | 0 .../ntoskrnl => ntoskrnl}/tests/symtest.c | 0 .../tests/tests/VirtualMemory.c | 0 {reactos/ntoskrnl => ntoskrnl}/vdm/vdmexec.c | 0 {reactos/ntoskrnl => ntoskrnl}/vdm/vdmmain.c | 0 {reactos/ntoskrnl => ntoskrnl}/wmi/wmi.c | 0 reactos/proxy.mak => proxy.mak | 0 .../base/applications/cacls/lang/.gitignore | 0 .../base/applications/calc/lang/.gitignore | 0 reactos/base/applications/cmdutils/.gitignore | 0 reactos/base/applications/tsclient/.gitignore | 0 .../applications/tsclient/mstsc/.gitignore | 0 .../applications/tsclient/mstscax/.gitignore | 0 .../tsclient/porting-tools/.gitignore | 0 reactos/base/setup/.gitignore | 0 reactos/base/shell/.gitignore | 0 reactos/base/system/.gitignore | 0 reactos/dll/3rdparty/.gitignore | 0 reactos/dll/win32/.gitignore | 0 reactos/dll/win32/browseui/.gitignore | 0 reactos/dll/win32/netshell/lang/.gitignore | 0 reactos/dll/win32/odbccp32/.gitignore | 0 reactos/dll/win32/powrprof/.gitignore | 0 reactos/drivers/ksfilter/swenum/.gitignore | 0 .../drivers/multimedia/portcls.NEW/adapter.c | 87 - reactos/drivers/multimedia/portcls.NEW/dll.c | 29 - reactos/drivers/multimedia/portcls.NEW/drm.c | 73 - .../drivers/multimedia/portcls.NEW/portcls.c | 489 - .../multimedia/portcls.NEW/portcls.def | 55 - .../drivers/multimedia/portcls.NEW/portcls.h | 253 - .../multimedia/portcls.NEW/portcls.rbuild | 12 - .../drivers/multimedia/portcls.NEW/stubs.c | 338 - reactos/drivers/multimedia/x/allocators.c | 70 - reactos/drivers/multimedia/x/clocks.c | 124 - reactos/drivers/multimedia/x/connectivity.c | 64 - reactos/drivers/multimedia/x/events.c | 100 - reactos/drivers/multimedia/x/irp.c | 479 - reactos/drivers/multimedia/x/ks.def | 111 - reactos/drivers/multimedia/x/ks.rbuild | 20 - reactos/drivers/multimedia/x/ks.rc | 5 - reactos/drivers/multimedia/x/methods.c | 51 - reactos/drivers/multimedia/x/misc.c | 218 - reactos/drivers/multimedia/x/properties.c | 64 - reactos/drivers/multimedia/x/topology.c | 46 - reactos/drivers/multimedia/x/worker.c | 74 - reactos/drivers/parallel/parclass/.gitignore | 0 reactos/drivers/parallel/parport/.gitignore | 0 reactos/drivers/storage/classpnp/.gitignore | 0 reactos/drivers/storage/fdc/fdc/.gitignore | 0 .../drivers/storage/fdc/flpydisk/.gitignore | 0 .../audio/backpln/adapters/dmusic/.gitignore | 0 .../wdm/audio/backpln/portcls/portcls.rc | 5 - .../wdm/audio/filters/kmixer/.gitignore | 0 .../wdm/audio/filters/splitter/.gitignore | 0 .../wdm/audio/filters/swmidi/.gitignore | 0 reactos/drivers/wdm/audio/sysaudio/.gitignore | 0 reactos/include/dxsdk/DShowIDL/.gitignore | 0 reactos/include/reactos/chew/chew/.gitignore | 0 .../reactos/drivers/drivers/.gitignore | 0 reactos/include/reactos/elf/elf/.gitignore | 0 reactos/lib/3rdparty/.gitignore | 0 reactos/subsystems/.gitignore | 0 reactos/subsystems/win32/.gitignore | 0 reactos/tools/bin2c.c | 48 - reactos/tools/bin2c.mak | 36 - reactos/tools/buildno/buildno.cpp | 412 - reactos/tools/buildno/buildno.mak | 57 - reactos/tools/buildno/pch.h | 47 - reactos/tools/cabman/cabinet.cxx | 3741 ------ reactos/tools/cabman/cabinet.h | 503 - reactos/tools/cabman/cabman.h | 46 - reactos/tools/cabman/cabman.rbuild | 12 - reactos/tools/cabman/dff.txt | 55 - reactos/tools/cabman/dfp.cxx | 1395 -- reactos/tools/cabman/dfp.h | 143 - reactos/tools/cabman/main.cxx | 652 - reactos/tools/cabman/makefile.win32 | 29 - reactos/tools/cabman/mszip.cxx | 182 - reactos/tools/cabman/mszip.h | 41 - reactos/tools/cabman/raw.cxx | 70 - reactos/tools/cabman/raw.h | 35 - reactos/tools/cdmake/cdmake.c | 1680 --- reactos/tools/cdmake/cdmake.rbuild | 6 - reactos/tools/cdmake/llmosrt.c | 106 - reactos/tools/cdmake/readme.txt | 94 - reactos/tools/create_nls/Readme | 23 - reactos/tools/create_nls/create_nls.c | 969 -- .../create_nls/unicode.org/ReactOS/ReadMe | 7 - .../unicode.org/ReactOS/ibmcp861.diff | 23 - reactos/tools/dumpstab.c | 210 - reactos/tools/gendib/gendib.c | 1037 -- reactos/tools/gendib/gendib.mak | 57 - reactos/tools/mkconfig.c | 136 - reactos/tools/mkhive/binhive.c | 58 - reactos/tools/mkhive/binhive.h | 36 - reactos/tools/mkhive/cmi.c | 820 -- reactos/tools/mkhive/cmi.h | 67 - reactos/tools/mkhive/mkhive.c | 182 - reactos/tools/mkhive/mkhive.h | 104 - reactos/tools/mkhive/mkhive.rbuild | 21 - reactos/tools/mkhive/reginf.c | 493 - reactos/tools/mkhive/reginf.h | 34 - reactos/tools/mkhive/registry.c | 685 - reactos/tools/mkhive/registry.h | 130 - reactos/tools/mkhive/rtl.c | 181 - reactos/tools/ms2ps/ms2ps.cpp | 431 - reactos/tools/nci/nci.mak | 87 - reactos/tools/nci/ncitool.c | 646 - reactos/tools/ofw_interface/calls.ofw | 16 - reactos/tools/ofw_interface/ofw_interface.cpp | 316 - reactos/tools/ofw_interface/ofw_interface.mak | 63 - reactos/tools/pefixup.c | 418 - reactos/tools/pefixup.mak | 36 - reactos/tools/pipetools/piperead.cpp | 81 - reactos/tools/pipetools/pipespy.cpp | 251 - reactos/tools/pipetools/pipetunnel.cpp | 317 - reactos/tools/raddr2line.c | 188 - reactos/tools/raddr2line.mak | 41 - reactos/tools/rbuild/automaticdependency.cpp | 560 - reactos/tools/rbuild/autoregister.cpp | 88 - reactos/tools/rbuild/backend/backend.cpp | 126 - reactos/tools/rbuild/backend/backend.h | 79 - .../rbuild/backend/codeblocks/codeblocks.cpp | 912 -- .../rbuild/backend/codeblocks/codeblocks.h | 104 - .../backend/dependencymap/dependencymap.cpp | 206 - .../backend/dependencymap/dependencymap.h | 68 - .../tools/rbuild/backend/devcpp/devcpp.cpp | 249 - reactos/tools/rbuild/backend/devcpp/devcpp.h | 65 - reactos/tools/rbuild/backend/mingw/mingw.cpp | 1272 -- reactos/tools/rbuild/backend/mingw/mingw.h | 155 - .../rbuild/backend/mingw/modulehandler.cpp | 3555 ------ .../rbuild/backend/mingw/modulehandler.h | 372 - .../rbuild/backend/mingw/pch_detection.h | 17 - .../rbuild/backend/mingw/pipe_detection.c | 23 - .../rbuild/backend/mingw/proxymakefile.cpp | 127 - reactos/tools/rbuild/backend/mingw/rule.cpp | 125 - reactos/tools/rbuild/backend/mingw/rule.h | 40 - .../tools/rbuild/backend/msbuild/msbuild.cpp | 265 - .../tools/rbuild/backend/msbuild/msbuild.h | 72 - reactos/tools/rbuild/backend/msvc/genguid.cpp | 96 - reactos/tools/rbuild/backend/msvc/msvc.cpp | 471 - reactos/tools/rbuild/backend/msvc/msvc.h | 150 - .../tools/rbuild/backend/msvc/msvcmaker.cpp | 872 -- .../tools/rbuild/backend/msvc/vcprojmaker.cpp | 1123 -- .../backend/versionreport/versionreport.cpp | 128 - .../backend/versionreport/versionreport.h | 68 - reactos/tools/rbuild/bootstrap.cpp | 123 - reactos/tools/rbuild/cdfile.cpp | 65 - reactos/tools/rbuild/compilationunit.cpp | 137 - .../rbuild/compilationunitsupportcode.cpp | 97 - reactos/tools/rbuild/compilerflag.cpp | 82 - reactos/tools/rbuild/configuration.cpp | 40 - reactos/tools/rbuild/define.cpp | 90 - reactos/tools/rbuild/directory.cpp | 249 - reactos/tools/rbuild/doc/rbuild.dbk | 1809 --- reactos/tools/rbuild/doc/rbuild.txt | 538 - reactos/tools/rbuild/empty.def | 1 - reactos/tools/rbuild/exception.cpp | 184 - reactos/tools/rbuild/exception.h | 148 - reactos/tools/rbuild/filesupportcode.cpp | 90 - reactos/tools/rbuild/global.cpp | 70 - reactos/tools/rbuild/include.cpp | 128 - reactos/tools/rbuild/installfile.cpp | 68 - reactos/tools/rbuild/linkerflag.cpp | 64 - reactos/tools/rbuild/linkerscript.cpp | 38 - reactos/tools/rbuild/makefile | 3 - reactos/tools/rbuild/module.cpp | 1809 --- reactos/tools/rbuild/pch.h | 81 - reactos/tools/rbuild/project.cpp | 455 - reactos/tools/rbuild/project.dtd | 152 - reactos/tools/rbuild/rbuild.cpp | 347 - reactos/tools/rbuild/rbuild.dsp | 356 - reactos/tools/rbuild/rbuild.dsw | 29 - reactos/tools/rbuild/rbuild.h | 1014 -- reactos/tools/rbuild/rbuild.mak | 588 - reactos/tools/rbuild/rbuild.sln | 19 - reactos/tools/rbuild/rbuild.vcproj | 1311 -- reactos/tools/rbuild/stubbedcomponent.cpp | 118 - reactos/tools/rbuild/syssetupgenerator.cpp | 117 - reactos/tools/rbuild/test.h | 164 - reactos/tools/rbuild/tests/alltests.cpp | 215 - reactos/tools/rbuild/tests/cdfiletest.cpp | 40 - .../rbuild/tests/compilationunittest.cpp | 49 - .../tests/data/automaticdependency.rbuild | 16 - .../data/automaticdependency_include.rbuild | 17 - reactos/tools/rbuild/tests/data/cdfile.rbuild | 9 - .../rbuild/tests/data/compilationunit.rbuild | 13 - reactos/tools/rbuild/tests/data/define.rbuild | 10 - reactos/tools/rbuild/tests/data/if.rbuild | 14 - .../tools/rbuild/tests/data/include.rbuild | 15 - reactos/tools/rbuild/tests/data/invoke.rbuild | 14 - .../tools/rbuild/tests/data/linkerflag.rbuild | 8 - reactos/tools/rbuild/tests/data/module.rbuild | 18 - .../tools/rbuild/tests/data/project.rbuild | 12 - reactos/tools/rbuild/tests/data/sourcefile1.c | 13 - .../data/sourcefile1/sourcefile1_header3.h | 1 - .../data/sourcefile1/sourcefile_includenext.h | 1 - .../rbuild/tests/data/sourcefile1_header1.h | 1 - .../rbuild/tests/data/sourcefile1_header2.h | 3 - .../rbuild/tests/data/sourcefile1_recurse.h | 2 - .../rbuild/tests/data/sourcefile_include.c | 2 - .../rbuild/tests/data/sourcefile_include.h | 1 - .../tests/data/sourcefile_includenext.h | 1 - reactos/tools/rbuild/tests/data/symbol.rbuild | 10 - reactos/tools/rbuild/tests/definetest.cpp | 39 - reactos/tools/rbuild/tests/functiontest.cpp | 28 - reactos/tools/rbuild/tests/iftest.cpp | 68 - reactos/tools/rbuild/tests/includetest.cpp | 42 - reactos/tools/rbuild/tests/invoketest.cpp | 37 - reactos/tools/rbuild/tests/linkerflagtest.cpp | 37 - reactos/tools/rbuild/tests/moduletest.cpp | 55 - reactos/tools/rbuild/tests/projecttest.cpp | 28 - reactos/tools/rbuild/tests/sourcefiletest.cpp | 91 - reactos/tools/rbuild/tests/symboltest.cpp | 43 - reactos/tools/rbuild/testsupportcode.cpp | 413 - reactos/tools/rbuild/xmlnode.cpp | 38 - reactos/tools/regtests2xml/regtests2xml.c | 442 - reactos/tools/rgenstat/llmosrt.c | 106 - reactos/tools/rgenstat/module_list.txt | 136 - reactos/tools/rgenstat/rgenstat.c | 908 -- reactos/tools/rgenstat/rgenstat.rbuild | 6 - reactos/tools/rgenstat/web/c.gif | Bin 92 -> 0 bytes reactos/tools/rgenstat/web/f.gif | Bin 101 -> 0 bytes reactos/tools/rgenstat/web/i.gif | Bin 73 -> 0 bytes reactos/tools/rgenstat/web/index.html | 14 - reactos/tools/rgenstat/web/rapistatus.css | 57 - reactos/tools/rgenstat/web/rapistatus.js | 291 - reactos/tools/rgenstat/web/rapistatus.xsl | 199 - reactos/tools/rgenstat/web/sc.gif | Bin 70 -> 0 bytes reactos/tools/rgenstat/web/tb.gif | Bin 49 -> 0 bytes reactos/tools/rgenstat/web/tm.gif | Bin 64 -> 0 bytes reactos/tools/rgenstat/web/tp.gif | Bin 67 -> 0 bytes reactos/tools/rgenstat/web/u.gif | Bin 76 -> 0 bytes reactos/tools/rsym.c | 978 -- reactos/tools/rsym.h | 357 - reactos/tools/rsym.mak | 45 - reactos/tools/rsym_common.c | 62 - reactos/tools/ssprintf.cpp | 1964 --- reactos/tools/ssprintf.h | 42 - reactos/tools/stubgen.c | 157 - reactos/tools/tools.mak | 53 - reactos/tools/tools.rbuild | 34 - reactos/tools/unicode/Makefile.in | 88 - reactos/tools/unicode/c_037.c | 683 - reactos/tools/unicode/c_10000.c | 683 - reactos/tools/unicode/c_10006.c | 683 - reactos/tools/unicode/c_10007.c | 716 -- reactos/tools/unicode/c_10029.c | 683 - reactos/tools/unicode/c_1006.c | 716 -- reactos/tools/unicode/c_10079.c | 683 - reactos/tools/unicode/c_10081.c | 683 - reactos/tools/unicode/c_1026.c | 683 - reactos/tools/unicode/c_1250.c | 683 - reactos/tools/unicode/c_1251.c | 716 -- reactos/tools/unicode/c_1252.c | 683 - reactos/tools/unicode/c_1253.c | 683 - reactos/tools/unicode/c_1254.c | 683 - reactos/tools/unicode/c_1255.c | 716 -- reactos/tools/unicode/c_1256.c | 716 -- reactos/tools/unicode/c_1257.c | 683 - reactos/tools/unicode/c_1258.c | 683 - reactos/tools/unicode/c_20866.c | 716 -- reactos/tools/unicode/c_20932.c | 6298 ---------- reactos/tools/unicode/c_21866.c | 716 -- reactos/tools/unicode/c_28591.c | 683 - reactos/tools/unicode/c_28592.c | 683 - reactos/tools/unicode/c_28593.c | 683 - reactos/tools/unicode/c_28594.c | 683 - reactos/tools/unicode/c_28595.c | 716 -- reactos/tools/unicode/c_28596.c | 716 -- reactos/tools/unicode/c_28597.c | 683 - reactos/tools/unicode/c_28598.c | 716 -- reactos/tools/unicode/c_28599.c | 683 - reactos/tools/unicode/c_28600.c | 683 - reactos/tools/unicode/c_28603.c | 683 - reactos/tools/unicode/c_28604.c | 683 - reactos/tools/unicode/c_28605.c | 683 - reactos/tools/unicode/c_28606.c | 683 - reactos/tools/unicode/c_424.c | 716 -- reactos/tools/unicode/c_437.c | 683 - reactos/tools/unicode/c_500.c | 683 - reactos/tools/unicode/c_737.c | 683 - reactos/tools/unicode/c_775.c | 683 - reactos/tools/unicode/c_850.c | 683 - reactos/tools/unicode/c_852.c | 683 - reactos/tools/unicode/c_855.c | 716 -- reactos/tools/unicode/c_856.c | 716 -- reactos/tools/unicode/c_857.c | 683 - reactos/tools/unicode/c_860.c | 683 - reactos/tools/unicode/c_861.c | 683 - reactos/tools/unicode/c_862.c | 716 -- reactos/tools/unicode/c_863.c | 683 - reactos/tools/unicode/c_864.c | 716 -- reactos/tools/unicode/c_865.c | 683 - reactos/tools/unicode/c_866.c | 716 -- reactos/tools/unicode/c_869.c | 683 - reactos/tools/unicode/c_874.c | 716 -- reactos/tools/unicode/c_875.c | 683 - reactos/tools/unicode/c_878.c | 716 -- reactos/tools/unicode/c_932.c | 5242 -------- reactos/tools/unicode/c_936.c | 7882 ------------ reactos/tools/unicode/c_949.c | 9301 -------------- reactos/tools/unicode/c_950.c | 6595 ---------- reactos/tools/unicode/casemap.c | 1647 --- reactos/tools/unicode/collation.c | 1657 --- reactos/tools/unicode/compose.c | 1098 -- reactos/tools/unicode/cpmap.pl | 1237 -- reactos/tools/unicode/cptable.c | 179 - reactos/tools/unicode/defaults | 202 - reactos/tools/unicode/fold.c | 198 - reactos/tools/unicode/mbtowc.c | 300 - reactos/tools/unicode/sortkey.c | 351 - reactos/tools/unicode/string.c | 643 - reactos/tools/unicode/unicode.rbuild | 76 - reactos/tools/unicode/utf8.c | 249 - reactos/tools/unicode/wctomb.c | 488 - reactos/tools/unicode/wctype.c | 2026 --- reactos/tools/unicode/wine/unicode.h | 303 - reactos/tools/unicode/wine_unicode.def | 58 - reactos/tools/widl/client.c | 506 - reactos/tools/widl/hash.c | 620 - reactos/tools/widl/hash.h | 33 - reactos/tools/widl/header.c | 1131 -- reactos/tools/widl/header.h | 107 - reactos/tools/widl/parser.h | 48 - reactos/tools/widl/parser.l | 455 - reactos/tools/widl/parser.tab.c | 5132 -------- reactos/tools/widl/parser.tab.h | 345 - reactos/tools/widl/parser.y | 2153 ---- reactos/tools/widl/parser.yy.c | 2158 ---- reactos/tools/widl/port/mkstemps.c | 138 - reactos/tools/widl/proxy.c | 727 -- reactos/tools/widl/server.c | 470 - reactos/tools/widl/typegen.c | 3407 ----- reactos/tools/widl/typegen.h | 65 - reactos/tools/widl/typelib.c | 402 - reactos/tools/widl/typelib.h | 87 - reactos/tools/widl/typelib_struct.h | 605 - reactos/tools/widl/utils.c | 221 - reactos/tools/widl/utils.h | 55 - reactos/tools/widl/widl.c | 657 - reactos/tools/widl/widl.h | 76 - reactos/tools/widl/widl.rbuild | 27 - reactos/tools/widl/widl_ros.diff | 333 - reactos/tools/widl/widltypes.h | 353 - reactos/tools/widl/write_msft.c | 2533 ---- reactos/tools/winebuild/Makefile.in | 38 - reactos/tools/winebuild/build.h | 236 - reactos/tools/winebuild/import.c | 1274 -- reactos/tools/winebuild/main.c | 662 - reactos/tools/winebuild/mkstemps.c | 138 - reactos/tools/winebuild/parser.c | 986 -- reactos/tools/winebuild/relay.c | 1001 -- reactos/tools/winebuild/res16.c | 333 - reactos/tools/winebuild/res32.c | 463 - reactos/tools/winebuild/spec16.c | 809 -- reactos/tools/winebuild/spec32.c | 715 -- reactos/tools/winebuild/utils.c | 631 - reactos/tools/winebuild/winebuild.man.in | 469 - reactos/tools/winebuild/winebuild.rbuild | 16 - reactos/tools/winebuild/winglue.h | 125 - reactos/tools/wmc/CHANGES | 5 - reactos/tools/wmc/lang.c | 205 - reactos/tools/wmc/lang.h | 39 - reactos/tools/wmc/mcl.c | 747 -- reactos/tools/wmc/mcy.tab.c | 2435 ---- reactos/tools/wmc/mcy.tab.h | 97 - reactos/tools/wmc/mcy.y | 680 - reactos/tools/wmc/utils.c | 259 - reactos/tools/wmc/utils.h | 52 - reactos/tools/wmc/wmc.c | 305 - reactos/tools/wmc/wmc.h | 75 - reactos/tools/wmc/wmc.rbuild | 17 - reactos/tools/wmc/wmctypes.h | 121 - reactos/tools/wmc/write.c | 618 - reactos/tools/wmc/write.h | 27 - reactos/tools/wpp/lex.yy.c | 4128 ------ reactos/tools/wpp/ppl.l | 1494 --- reactos/tools/wpp/ppy.tab.c | 2497 ---- reactos/tools/wpp/ppy.tab.h | 150 - reactos/tools/wpp/ppy.y | 658 - reactos/tools/wpp/preproc.c | 646 - reactos/tools/wpp/wpp.c | 201 - reactos/tools/wpp/wpp.rbuild | 12 - reactos/tools/wpp/wpp_private.h | 259 - reactos/tools/wpp/wpp_ros.diff | 20 - reactos/tools/wrc/CHANGES | 336 - reactos/tools/wrc/dumpres.c | 1038 -- reactos/tools/wrc/dumpres.h | 30 - reactos/tools/wrc/genres.c | 2013 --- reactos/tools/wrc/genres.h | 36 - reactos/tools/wrc/lex.yy.c | 2635 ---- reactos/tools/wrc/newstruc.c | 1193 -- reactos/tools/wrc/newstruc.h | 87 - reactos/tools/wrc/parser.h | 39 - reactos/tools/wrc/parser.l | 640 - reactos/tools/wrc/parser.tab.c | 5731 --------- reactos/tools/wrc/parser.tab.h | 260 - reactos/tools/wrc/parser.y | 3031 ----- reactos/tools/wrc/port/mkstemps.c | 138 - reactos/tools/wrc/readres.c | 387 - reactos/tools/wrc/readres.h | 28 - reactos/tools/wrc/translation.c | 1152 -- reactos/tools/wrc/utils.c | 454 - reactos/tools/wrc/utils.h | 50 - reactos/tools/wrc/wrc.c | 529 - reactos/tools/wrc/wrc.doc | 174 - reactos/tools/wrc/wrc.h | 61 - reactos/tools/wrc/wrc.rbuild | 26 - reactos/tools/wrc/wrcrostypes.h | 118 - reactos/tools/wrc/wrctypes.h | 648 - reactos/tools/wrc/writeres.c | 105 - reactos/tools/xml.cpp | 936 -- reactos/tools/xml.h | 239 - rosapps/Doxyfile | 206 - rosapps/applications/applications.rbuild | 64 - rosapps/applications/cmdutils/appwiz/appwiz.c | 261 - .../cmdutils/appwiz/appwiz.rbuild | 8 - .../applications/cmdutils/appwiz/appwiz.rc | 4 - rosapps/applications/cmdutils/cmdutils.rbuild | 27 - rosapps/applications/cmdutils/comp/comp.c | 181 - .../applications/cmdutils/comp/comp.rbuild | 6 - rosapps/applications/cmdutils/comp/comp.rc | 4 - rosapps/applications/cmdutils/mode/mode.c | 458 - .../applications/cmdutils/mode/mode.rbuild | 8 - rosapps/applications/cmdutils/mode/mode.rc | 6 - rosapps/applications/cmdutils/sort/sort.c | 141 - .../applications/cmdutils/sort/sort.rbuild | 5 - rosapps/applications/cmdutils/sort/sort.rc | 6 - rosapps/applications/cmdutils/tee/tee.c | 220 - rosapps/applications/cmdutils/tee/tee.rbuild | 5 - rosapps/applications/cmdutils/tee/tee.rc | 6 - rosapps/applications/cmdutils/touch/err.c | 180 - rosapps/applications/cmdutils/touch/err.h | 60 - rosapps/applications/cmdutils/touch/touch.c | 347 - .../applications/cmdutils/touch/touch.rbuild | 8 - rosapps/applications/cmdutils/touch/touch.rc | 6 - rosapps/applications/cmdutils/touch/various.h | 55 - rosapps/applications/cmdutils/uptime/uptime.c | 34 - .../cmdutils/uptime/uptime.rbuild | 6 - .../applications/cmdutils/uptime/uptime.rc | 4 - rosapps/applications/cmdutils/y/y.c | 122 - rosapps/applications/cmdutils/y/y.rbuild | 5 - rosapps/applications/cmdutils/y/y.rc | 6 - .../devutils/cputointel/AnyalsingProcess.c | 17 - .../cputointel/ConvertToIA32Process.c | 261 - .../devutils/cputointel/ConvertToPPCProcess.c | 180 - .../devutils/cputointel/ConvertingProcess.c | 100 - .../devutils/cputointel/CpuToIntel.c | 117 - .../devutils/cputointel/From/ARM/ARM.h | 17 - .../devutils/cputointel/From/ARM/ARMBrain.c | 98 - .../devutils/cputointel/From/ARM/ARMBrain.h | 12 - .../devutils/cputointel/From/ARM/ARMopcode.c | 50 - .../devutils/cputointel/From/IA32/IA32.h | 17 - .../devutils/cputointel/From/IA32/IA32Brain.c | 107 - .../devutils/cputointel/From/IA32/IA32Brain.h | 13 - .../cputointel/From/IA32/IA32opcode.c | 50 - .../devutils/cputointel/From/PPC/PPC.h | 23 - .../devutils/cputointel/From/PPC/PPCBrain.c | 143 - .../devutils/cputointel/From/PPC/PPCBrain.h | 32 - .../devutils/cputointel/From/PPC/PPCopcode.c | 192 - .../devutils/cputointel/From/dummycpu/Dummy.h | 17 - .../cputointel/From/dummycpu/DummyBrain.c | 95 - .../cputointel/From/dummycpu/DummyBrain.h | 12 - .../cputointel/From/dummycpu/Dummyopcode.c | 39 - .../devutils/cputointel/From/m68k/M68kBrain.c | 320 - .../devutils/cputointel/From/m68k/M68kBrain.h | 38 - .../cputointel/From/m68k/M68kopcode.c | 287 - .../devutils/cputointel/From/m68k/m68k.h | 41 - .../devutils/cputointel/ImageLoader.c | 563 - .../devutils/cputointel/OpCodePPC.txt | 77 - .../devutils/cputointel/ReadMe.txt | 76 - .../applications/devutils/cputointel/any_op.h | 74 - .../devutils/cputointel/cputointel.rbuild | 31 - .../applications/devutils/cputointel/misc.c | 199 - .../applications/devutils/cputointel/misc.h | 35 - .../applications/devutils/directory.rbuild | 35 - rosapps/applications/devutils/gdb2/README | 1 - rosapps/applications/devutils/gdb2/gdb2.cpp | 298 - .../applications/devutils/gdb2/gdb2.rbuild | 6 - rosapps/applications/devutils/gdb2/ph.h | 10 - rosapps/applications/devutils/gdihv/gdi.h | 66 - rosapps/applications/devutils/gdihv/gdihv.c | 53 - rosapps/applications/devutils/gdihv/gdihv.h | 22 - .../applications/devutils/gdihv/gdihv.rbuild | 12 - rosapps/applications/devutils/gdihv/gdihv.rc | 16 - .../applications/devutils/gdihv/handlelist.c | 193 - .../applications/devutils/gdihv/handlelist.h | 4 - rosapps/applications/devutils/gdihv/mainwnd.c | 147 - rosapps/applications/devutils/gdihv/mainwnd.h | 2 - .../applications/devutils/gdihv/proclist.c | 104 - .../applications/devutils/gdihv/proclist.h | 3 - .../applications/devutils/gdihv/resource.h | 8 - .../applications/devutils/gdihv/system.ico | Bin 29926 -> 0 bytes .../applications/devutils/genguid/genguid.c | 83 - .../devutils/genguid/genguid.rbuild | 6 - .../applications/devutils/genguid/genguid.rc | 6 - .../devutils/roswebparser/Windows28591.h | 32 - .../devutils/roswebparser/Windows28592.h | 33 - .../devutils/roswebparser/oem437.h | 35 - .../devutils/roswebparser/oem850.h | 32 - .../devutils/roswebparser/roswebparser.c | 1779 --- .../devutils/roswebparser/roswebparser.rbuild | 8 - .../applications/devutils/roswebparser/utf8.c | 75 - .../applications/devutils/symdump/symdump.c | 985 -- .../devutils/symdump/symdump.rbuild | 7 - .../devutils/syscalldump/syscalldump.c | 229 - .../devutils/syscalldump/syscalldump.rbuild | 6 - .../devutils/vgafontedit/aboutdlg.c | 31 - .../devutils/vgafontedit/customwndclasses.h | 15 - .../devutils/vgafontedit/editglyphdlg.c | 307 - .../devutils/vgafontedit/fileformats.txt | 55 - .../devutils/vgafontedit/fontboxeswnd.c | 356 - .../devutils/vgafontedit/fontwnd.c | 440 - .../devutils/vgafontedit/lang/bg-BG.rc | 94 - .../devutils/vgafontedit/lang/de-DE.rc | 94 - .../devutils/vgafontedit/lang/en-US.rc | 94 - .../devutils/vgafontedit/lang/es-ES.rc | 94 - .../devutils/vgafontedit/lang/fr-FR.rc | 94 - .../devutils/vgafontedit/lang/it-IT.rc | 94 - .../devutils/vgafontedit/lang/no-NO.rc | 94 - .../devutils/vgafontedit/lang/pl-PL.rc | 94 - .../devutils/vgafontedit/lang/ru-RU.rc | 94 - .../devutils/vgafontedit/lang/uk-UA.rc | 94 - .../applications/devutils/vgafontedit/main.c | 67 - .../applications/devutils/vgafontedit/main.rc | 43 - .../devutils/vgafontedit/mainwnd.c | 586 - .../applications/devutils/vgafontedit/misc.c | 118 - .../devutils/vgafontedit/opensave.c | 77 - .../devutils/vgafontedit/precomp.h | 170 - .../devutils/vgafontedit/res/doc.ico | Bin 318 -> 0 bytes .../devutils/vgafontedit/res/main.ico | Bin 2734 -> 0 bytes .../devutils/vgafontedit/res/toolbar.bmp | Bin 246 -> 0 bytes .../devutils/vgafontedit/res/toolbox.bmp | Bin 406 -> 0 bytes .../devutils/vgafontedit/resource.h | 79 - .../devutils/vgafontedit/vgafontedit.rbuild | 19 - .../applications/devutils/zoomin/framewnd.c | 240 - .../applications/devutils/zoomin/framewnd.h | 32 - .../devutils/zoomin/lang/en-US.rc | 85 - .../devutils/zoomin/lang/no-NO.rc | 85 - .../devutils/zoomin/lang/sk-SK.rc | 87 - rosapps/applications/devutils/zoomin/main.c | 119 - rosapps/applications/devutils/zoomin/main.h | 40 - .../applications/devutils/zoomin/resource.h | 22 - .../applications/devutils/zoomin/zoomin.ico | Bin 1078 -> 0 bytes .../devutils/zoomin/zoomin.rbuild | 9 - .../applications/devutils/zoomin/zoomin.rc | 13 - rosapps/applications/downloader/download.c | 402 - .../applications/downloader/downloader.rbuild | 26 - rosapps/applications/downloader/downloader.rc | 10 - .../applications/downloader/downloader.xml | 305 - rosapps/applications/downloader/lang/bg-BG.rc | 60 - rosapps/applications/downloader/lang/de-DE.rc | 61 - rosapps/applications/downloader/lang/en-US.rc | 61 - rosapps/applications/downloader/lang/es-ES.rc | 66 - rosapps/applications/downloader/lang/fr-FR.rc | 61 - rosapps/applications/downloader/lang/id-ID.rc | 61 - rosapps/applications/downloader/lang/it-IT.rc | 61 - rosapps/applications/downloader/lang/lt-LT.rc | 63 - rosapps/applications/downloader/lang/no-NO.rc | 61 - rosapps/applications/downloader/lang/pl-PL.rc | 68 - rosapps/applications/downloader/lang/ru-RU.rc | 63 - rosapps/applications/downloader/lang/sk-SK.rc | 66 - rosapps/applications/downloader/lang/uk-UA.rc | 69 - rosapps/applications/downloader/main.c | 922 -- .../applications/downloader/patches/d2fix.c | 36 - rosapps/applications/downloader/resources.h | 71 - .../applications/downloader/resources/0.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/1.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/10.bmp | Bin 824 -> 0 bytes .../applications/downloader/resources/11.bmp | Bin 1080 -> 0 bytes .../applications/downloader/resources/12.bmp | Bin 1080 -> 0 bytes .../applications/downloader/resources/13.bmp | Bin 1080 -> 0 bytes .../applications/downloader/resources/2.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/3.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/4.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/5.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/6.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/7.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/8.bmp | Bin 822 -> 0 bytes .../applications/downloader/resources/9.bmp | Bin 824 -> 0 bytes .../downloader/resources/download.bmp | Bin 13914 -> 0 bytes .../downloader/resources/help.ico | Bin 9774 -> 0 bytes .../downloader/resources/logo.bmp | Bin 17414 -> 0 bytes .../downloader/resources/main.ico | Bin 43302 -> 0 bytes .../downloader/resources/preferences.ico | Bin 9774 -> 0 bytes .../downloader/resources/underline.bmp | Bin 170 -> 0 bytes .../downloader/resources/uninstall.bmp | Bin 13914 -> 0 bytes .../downloader/resources/update.ico | Bin 9774 -> 0 bytes rosapps/applications/downloader/rsrc.rc | 39 - rosapps/applications/downloader/structures.h | 26 - rosapps/applications/downloader/xml.c | 236 - rosapps/applications/fontview/display.c | 412 - rosapps/applications/fontview/display.h | 18 - rosapps/applications/fontview/fontview.c | 327 - rosapps/applications/fontview/fontview.h | 21 - rosapps/applications/fontview/fontview.rbuild | 10 - rosapps/applications/fontview/fontview.rc | 26 - rosapps/applications/fontview/lang/bg-BG.rc | 14 - rosapps/applications/fontview/lang/de-DE.rc | 14 - rosapps/applications/fontview/lang/en-US.rc | 16 - rosapps/applications/fontview/lang/es-ES.rc | 18 - rosapps/applications/fontview/lang/fr-FR.rc | 15 - rosapps/applications/fontview/lang/lt-LT.rc | 18 - rosapps/applications/fontview/lang/no-NO.rc | 16 - rosapps/applications/fontview/lang/pl-PL.rc | 20 - rosapps/applications/fontview/lang/ru-RU.rc | 17 - rosapps/applications/fontview/lang/sk-SK.rc | 18 - rosapps/applications/fontview/lang/uk-UA.rc | 21 - rosapps/applications/fontview/resource.h | 15 - rosapps/applications/fontview/ttf.ico | Bin 766 -> 0 bytes .../applications/fraginator/DefragDialog.cpp | 38 - .../applications/fraginator/Defragment.cpp | 458 - rosapps/applications/fraginator/Defragment.h | 92 - .../applications/fraginator/DriveVolume.cpp | 806 -- rosapps/applications/fraginator/DriveVolume.h | 157 - .../fraginator/Fraginator Motif Icon.bmp | Bin 4438 -> 0 bytes .../applications/fraginator/Fraginator.cpp | 64 - rosapps/applications/fraginator/Fraginator.h | 25 - rosapps/applications/fraginator/Fraginator.rc | 18 - .../applications/fraginator/MainDialog.cpp | 574 - rosapps/applications/fraginator/MainDialog.h | 14 - rosapps/applications/fraginator/Mutex.h | 78 - .../applications/fraginator/ReportDialog.cpp | 231 - .../applications/fraginator/ReportDialog.h | 18 - rosapps/applications/fraginator/Unfrag.cpp | 463 - rosapps/applications/fraginator/Unfrag.h | 86 - .../applications/fraginator/fraginator.rbuild | 28 - rosapps/applications/fraginator/icon1.ico | Bin 8166 -> 0 bytes rosapps/applications/fraginator/lang/en-US.rc | 230 - rosapps/applications/fraginator/lang/no-NO.rc | 230 - rosapps/applications/fraginator/lang/sk-SK.rc | 234 - rosapps/applications/fraginator/resource.h | 51 - rosapps/applications/imagesoft/about.c | 54 - rosapps/applications/imagesoft/adjust.c | 525 - rosapps/applications/imagesoft/brightness.c | 379 - rosapps/applications/imagesoft/contrast.c | 380 - rosapps/applications/imagesoft/custcombo.c | 213 - rosapps/applications/imagesoft/floatwindow.c | 629 - rosapps/applications/imagesoft/font.c | 178 - rosapps/applications/imagesoft/imageprop.h | 49 - rosapps/applications/imagesoft/imagesoft.c | 100 - .../applications/imagesoft/imagesoft.rbuild | 31 - rosapps/applications/imagesoft/imagesoft.rc | 73 - rosapps/applications/imagesoft/imgedwnd.c | 542 - rosapps/applications/imagesoft/imgedwnd.h | 94 - rosapps/applications/imagesoft/lang/bg-BG.rc | 239 - rosapps/applications/imagesoft/lang/en-GB.rc | 234 - rosapps/applications/imagesoft/lang/en-US.rc | 234 - rosapps/applications/imagesoft/lang/es-ES.rc | 234 - rosapps/applications/imagesoft/lang/fr-FR.rc | 234 - rosapps/applications/imagesoft/lang/id-ID.rc | 234 - rosapps/applications/imagesoft/lang/it-IT.rc | 234 - rosapps/applications/imagesoft/lang/no-NO.rc | 233 - rosapps/applications/imagesoft/lang/pl-PL.rc | 241 - rosapps/applications/imagesoft/lang/ru-RU.rc | 236 - rosapps/applications/imagesoft/lang/sk-SK.rc | 241 - rosapps/applications/imagesoft/lang/th-TH.rc | 234 - rosapps/applications/imagesoft/lang/uk-UA.rc | 242 - rosapps/applications/imagesoft/mainwnd.c | 1454 --- rosapps/applications/imagesoft/mainwnd.h | 41 - rosapps/applications/imagesoft/misc.c | 422 - rosapps/applications/imagesoft/misc.h | 44 - rosapps/applications/imagesoft/opensave.c | 87 - rosapps/applications/imagesoft/precomp.h | 70 - .../res/cursors/PaintBrushToolCursor.cur | Bin 326 -> 0 bytes .../cursors/PaintBrushToolCursorMouseDown.cur | Bin 326 -> 0 bytes .../imagesoft/res/icons/color/ColorLess.bmp | Bin 670 -> 0 bytes .../imagesoft/res/icons/color/ColorMore.bmp | Bin 450 -> 0 bytes .../imagesoft/res/icons/hist/HistBack.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/hist/HistDelete.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/hist/HistForward.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/hist/HistRedo.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/hist/HistUndo.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainCopyIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainCutIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainNewIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainOpenIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainPasteIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainPrintIcon.bmp | Bin 824 -> 0 bytes .../res/icons/std/MainPrintPreIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainRedoIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainSaveIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/std/MainUndoIcon.bmp | Bin 824 -> 0 bytes .../res/icons/text/TextAlignCenterIcon.bmp | Bin 824 -> 0 bytes .../res/icons/text/TextAlignLeftIcon.bmp | Bin 822 -> 0 bytes .../res/icons/text/TextAlignRightIcon.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/text/TextBoldIcon.bmp | Bin 824 -> 0 bytes .../res/icons/text/TextItalicIcon.bmp | Bin 824 -> 0 bytes .../res/icons/text/TextUnderlineIcon.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsCloneStamp.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsColorPicker.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsEllipse.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsEllipseSelect.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/tools/ToolsEraser.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsFreeformShape.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsLassoSelect.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/tools/ToolsLine.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsMagicWand.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/tools/ToolsMove.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsMoveSelection.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsPaintBrush.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsPaintBucket.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/tools/ToolsPencil.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsRecoloring.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsRectangle.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsRectangleSelect.bmp | Bin 824 -> 0 bytes .../res/icons/tools/ToolsRoundedRectangle.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/tools/ToolsText.bmp | Bin 824 -> 0 bytes .../imagesoft/res/icons/tools/ToolsZoom.bmp | Bin 824 -> 0 bytes .../applications/imagesoft/res/imagesoft.ico | Bin 29926 -> 0 bytes rosapps/applications/imagesoft/resource.h | 297 - rosapps/applications/imagesoft/rsrc.rc | 21 - rosapps/applications/imagesoft/tooldock.c | 1138 -- rosapps/applications/imagesoft/tooldock.h | 115 - rosapps/applications/magnify/lang/bg-BG.rc | 67 - rosapps/applications/magnify/lang/de-DE.rc | 64 - rosapps/applications/magnify/lang/en-US.rc | 64 - rosapps/applications/magnify/lang/es-ES.rc | 68 - rosapps/applications/magnify/lang/fr-FR.rc | 64 - rosapps/applications/magnify/lang/it-IT.rc | 64 - rosapps/applications/magnify/lang/no-NO.rc | 64 - rosapps/applications/magnify/lang/pl-PL.rc | 71 - rosapps/applications/magnify/lang/ru-RU.rc | 64 - rosapps/applications/magnify/lang/sk-SK.rc | 69 - rosapps/applications/magnify/lang/uk-UA.rc | 72 - rosapps/applications/magnify/magnifier.c | 546 - rosapps/applications/magnify/magnifier.h | 36 - rosapps/applications/magnify/magnify.rbuild | 13 - rosapps/applications/magnify/magnify.rc | 15 - rosapps/applications/magnify/res/magnify.ico | Bin 40070 -> 0 bytes rosapps/applications/magnify/resource.h | 26 - rosapps/applications/magnify/rsrc.rc | 14 - rosapps/applications/magnify/settings.c | 89 - rosapps/applications/net/dhcpd/AUTHORS | 3 - rosapps/applications/net/dhcpd/COPYING | 222 - rosapps/applications/net/dhcpd/ChangeLog | 18 - rosapps/applications/net/dhcpd/INSTALL | 188 - rosapps/applications/net/dhcpd/Makefile.am | 1 - rosapps/applications/net/dhcpd/Makefile.in | 352 - rosapps/applications/net/dhcpd/NEWS | 2 - rosapps/applications/net/dhcpd/README | 19 - rosapps/applications/net/dhcpd/README.ROS | 6 - rosapps/applications/net/dhcpd/TODO | 8 - rosapps/applications/net/dhcpd/aclocal.m4 | 104 - rosapps/applications/net/dhcpd/config.cache | 26 - rosapps/applications/net/dhcpd/config.h | 25 - rosapps/applications/net/dhcpd/config.h.in | 24 - rosapps/applications/net/dhcpd/config.h.top | 1 - rosapps/applications/net/dhcpd/config.log | 22 - rosapps/applications/net/dhcpd/config.status | 251 - rosapps/applications/net/dhcpd/configure | 1678 --- rosapps/applications/net/dhcpd/configure.in | 24 - rosapps/applications/net/dhcpd/dhcpd.rc | 6 - rosapps/applications/net/dhcpd/install-sh | 251 - rosapps/applications/net/dhcpd/missing | 190 - rosapps/applications/net/dhcpd/mkinstalldirs | 40 - .../applications/net/dhcpd/samples/dhcp.conf | 8 - .../applications/net/dhcpd/src/Makefile.am | 6 - .../applications/net/dhcpd/src/Makefile.in | 388 - rosapps/applications/net/dhcpd/src/dhcp.conf | 9 - .../net/dhcpd/src/display/display.c | 61 - .../net/dhcpd/src/include/datatypes.h | 56 - .../net/dhcpd/src/include/display.h | 6 - .../net/dhcpd/src/include/headers.h | 25 - .../net/dhcpd/src/include/iputils.h | 7 - .../net/dhcpd/src/include/leases.h | 10 - .../applications/net/dhcpd/src/include/lock.h | 11 - .../net/dhcpd/src/include/macutils.h | 7 - .../net/dhcpd/src/include/options.h | 118 - .../net/dhcpd/src/include/parser.h | 8 - .../net/dhcpd/src/include/utils.h | 7 - .../net/dhcpd/src/include/wutils.h | 6 - .../net/dhcpd/src/leases/leases.c | 231 - .../applications/net/dhcpd/src/lock/locker.c | 40 - rosapps/applications/net/dhcpd/src/main.c | 72 - .../net/dhcpd/src/parsing/parser.c | 402 - .../net/dhcpd/src/utils/iputils.c | 59 - .../net/dhcpd/src/utils/macutils.c | 46 - .../net/dhcpd/src/utils/macutils.h | 8 - .../applications/net/dhcpd/src/utils/utils.h | 6 - .../applications/net/dhcpd/src/utils/wutils.c | 9 - rosapps/applications/net/dhcpd/stamp-h | 1 - rosapps/applications/net/dhcpd/stamp-h.in | 1 - rosapps/applications/net/directory.rbuild | 23 - rosapps/applications/net/ncftp/LICENSE.txt | 137 - rosapps/applications/net/ncftp/Strn/Dynscat.c | 54 - .../applications/net/ncftp/Strn/Makefile.in | 115 - rosapps/applications/net/ncftp/Strn/Strn.h | 52 - rosapps/applications/net/ncftp/Strn/Strncat.c | 44 - rosapps/applications/net/ncftp/Strn/Strncpy.c | 45 - .../applications/net/ncftp/Strn/Strnpcat.c | 54 - .../applications/net/ncftp/Strn/Strnpcpy.c | 54 - rosapps/applications/net/ncftp/Strn/Strntok.c | 179 - .../applications/net/ncftp/Strn/config.h.in | 10 - .../applications/net/ncftp/Strn/configure.in | 19 - rosapps/applications/net/ncftp/Strn/strtokc.c | 240 - rosapps/applications/net/ncftp/Strn/tester.c | 135 - rosapps/applications/net/ncftp/Strn/version.c | 1 - .../net/ncftp/autoconf/acconfig.h | 389 - .../net/ncftp/autoconf/aclocal.m4 | 2391 ---- .../net/ncftp/libncftp/Makefile.in | 144 - .../net/ncftp/libncftp/Readme.txt | 73 - .../applications/net/ncftp/libncftp/cmds.c | 1700 --- .../net/ncftp/libncftp/config.h.in | 207 - .../net/ncftp/libncftp/configure.in | 292 - .../net/ncftp/libncftp/dos2unix.sh | 33 - .../applications/net/ncftp/libncftp/errno.c | 163 - rosapps/applications/net/ncftp/libncftp/ftp.c | 1362 -- rosapps/applications/net/ncftp/libncftp/ftp.h | 22 - .../applications/net/ncftp/libncftp/glob.c | 1760 --- rosapps/applications/net/ncftp/libncftp/io.c | 2824 ----- .../net/ncftp/libncftp/libncftp.dsp | 160 - .../net/ncftp/libncftp/libncftp.dsw | 29 - .../net/ncftp/libncftp/linelist.c | 783 -- .../net/ncftp/libncftp/mksrctar.sh | 97 - .../net/ncftp/libncftp/mksrczip.bat | 19 - .../applications/net/ncftp/libncftp/ncftp.h | 691 - .../net/ncftp/libncftp/ncftp_errno.h | 113 - .../applications/net/ncftp/libncftp/open.c | 1137 -- .../applications/net/ncftp/libncftp/rcmd.c | 1038 -- .../applications/net/ncftp/libncftp/syshdrs.h | 237 - .../applications/net/ncftp/libncftp/util.c | 1048 -- .../applications/net/ncftp/libncftp/util.h | 108 - .../applications/net/ncftp/libncftp/util2.cpp | 34 - .../applications/net/ncftp/libncftp/wincfg.h | 33 - rosapps/applications/net/ncftp/ncftp.rbuild | 92 - rosapps/applications/net/ncftp/ncftp.rc | 7 - .../applications/net/ncftp/ncftp/Makefile.in | 89 - .../applications/net/ncftp/ncftp/bookmark.c | 845 -- .../applications/net/ncftp/ncftp/bookmark.h | 59 - .../applications/net/ncftp/ncftp/cmdlist.c | 527 - rosapps/applications/net/ncftp/ncftp/cmds.c | 3701 ------ rosapps/applications/net/ncftp/ncftp/cmds.h | 63 - .../applications/net/ncftp/ncftp/getline.c | 2473 ---- .../applications/net/ncftp/ncftp/getline.h | 50 - rosapps/applications/net/ncftp/ncftp/getopt.c | 82 - rosapps/applications/net/ncftp/ncftp/getopt.h | 12 - rosapps/applications/net/ncftp/ncftp/log.c | 124 - rosapps/applications/net/ncftp/ncftp/log.h | 18 - rosapps/applications/net/ncftp/ncftp/ls.c | 779 -- rosapps/applications/net/ncftp/ncftp/ls.h | 29 - rosapps/applications/net/ncftp/ncftp/main.c | 477 - rosapps/applications/net/ncftp/ncftp/main.h | 11 - rosapps/applications/net/ncftp/ncftp/pref.c | 791 -- rosapps/applications/net/ncftp/ncftp/pref.h | 74 - rosapps/applications/net/ncftp/ncftp/preffw.c | 338 - .../applications/net/ncftp/ncftp/progress.c | 498 - .../applications/net/ncftp/ncftp/progress.h | 17 - rosapps/applications/net/ncftp/ncftp/readln.c | 831 -- rosapps/applications/net/ncftp/ncftp/readln.h | 31 - .../applications/net/ncftp/ncftp/resource.h | 16 - rosapps/applications/net/ncftp/ncftp/shell.c | 607 - rosapps/applications/net/ncftp/ncftp/shell.h | 78 - rosapps/applications/net/ncftp/ncftp/spool.c | 496 - rosapps/applications/net/ncftp/ncftp/spool.h | 24 - .../applications/net/ncftp/ncftp/syshdrs.h | 194 - rosapps/applications/net/ncftp/ncftp/trace.c | 178 - rosapps/applications/net/ncftp/ncftp/trace.h | 25 - rosapps/applications/net/ncftp/ncftp/util.c | 1139 -- rosapps/applications/net/ncftp/ncftp/util.h | 84 - .../applications/net/ncftp/ncftp/version.c | 22 - .../applications/net/ncftp/sio/Makefile.in | 194 - rosapps/applications/net/ncftp/sio/PRead.c | 71 - rosapps/applications/net/ncftp/sio/PWrite.c | 55 - rosapps/applications/net/ncftp/sio/SAcceptA.c | 52 - rosapps/applications/net/ncftp/sio/SAcceptS.c | 47 - rosapps/applications/net/ncftp/sio/SBind.c | 63 - rosapps/applications/net/ncftp/sio/SClose.c | 217 - rosapps/applications/net/ncftp/sio/SConnect.c | 196 - .../net/ncftp/sio/SConnectByName.c | 13 - rosapps/applications/net/ncftp/sio/SError.c | 171 - rosapps/applications/net/ncftp/sio/SNew.c | 81 - rosapps/applications/net/ncftp/sio/SRead.c | 213 - .../applications/net/ncftp/sio/SReadline.c | 157 - rosapps/applications/net/ncftp/sio/SRecv.c | 184 - .../applications/net/ncftp/sio/SRecvfrom.c | 127 - rosapps/applications/net/ncftp/sio/SRecvmsg.c | 137 - rosapps/applications/net/ncftp/sio/SSelect.c | 74 - rosapps/applications/net/ncftp/sio/SSend.c | 172 - rosapps/applications/net/ncftp/sio/SSendto.c | 137 - .../net/ncftp/sio/SSendtoByName.c | 149 - rosapps/applications/net/ncftp/sio/SWait.c | 108 - rosapps/applications/net/ncftp/sio/SWrite.c | 180 - .../applications/net/ncftp/sio/SocketUtil.c | 203 - rosapps/applications/net/ncftp/sio/StrAddr.c | 221 - rosapps/applications/net/ncftp/sio/UAcceptA.c | 49 - rosapps/applications/net/ncftp/sio/UAcceptS.c | 50 - rosapps/applications/net/ncftp/sio/UBind.c | 57 - rosapps/applications/net/ncftp/sio/UConnect.c | 35 - .../net/ncftp/sio/UConnectByName.c | 18 - rosapps/applications/net/ncftp/sio/UNew.c | 106 - .../applications/net/ncftp/sio/URecvfrom.c | 63 - rosapps/applications/net/ncftp/sio/USendto.c | 63 - .../net/ncftp/sio/USendtoByName.c | 66 - .../applications/net/ncftp/sio/config.h.in | 63 - .../applications/net/ncftp/sio/configure.in | 105 - rosapps/applications/net/ncftp/sio/main.c | 49 - rosapps/applications/net/ncftp/sio/sio.h | 243 - rosapps/applications/net/ncftp/sio/sio.html | 1086 -- rosapps/applications/net/ncftp/sio/srltest.c | 118 - rosapps/applications/net/ncftp/sio/syshdrs.h | 203 - rosapps/applications/net/ncftp/sio/usio.h | 48 - rosapps/applications/net/ncftp/sio/wincfg.h | 63 - rosapps/applications/net/netreg/netreg.cpp | 520 - rosapps/applications/net/netreg/netreg.rbuild | 10 - rosapps/applications/net/netreg/netreg.rc | 6 - rosapps/applications/net/niclist/niclist.c | 100 - .../applications/net/niclist/niclist.rbuild | 8 - rosapps/applications/net/niclist/niclist.rc | 6 - .../applications/net/roshttpd/common/list.cpp | 94 - .../net/roshttpd/common/roshttpd.rc | 6 - .../net/roshttpd/common/socket.cpp | 344 - .../net/roshttpd/common/thread.cpp | 80 - rosapps/applications/net/roshttpd/config.cpp | 131 - rosapps/applications/net/roshttpd/error.cpp | 16 - rosapps/applications/net/roshttpd/http.cpp | 377 - rosapps/applications/net/roshttpd/httpd.cpp | 492 - .../net/roshttpd/include/config.h | 49 - .../applications/net/roshttpd/include/debug.h | 17 - .../applications/net/roshttpd/include/error.h | 15 - .../applications/net/roshttpd/include/http.h | 57 - .../applications/net/roshttpd/include/httpd.h | 85 - .../net/roshttpd/include/iterator.h | 22 - .../applications/net/roshttpd/include/list.h | 233 - .../net/roshttpd/include/socket.h | 140 - .../net/roshttpd/include/thread.h | 34 - .../applications/net/roshttpd/roshttpd.cpp | 66 - .../applications/net/roshttpd/roshttpd.rbuild | 20 - rosapps/applications/net/tditest/DIRS | 1 - .../applications/net/tditest/include/debug.h | 89 - .../net/tditest/include/tditest.h | 121 - rosapps/applications/net/tditest/readme.txt | 18 - rosapps/applications/net/tditest/tditest.def | 7 - .../applications/net/tditest/tditest.rbuild | 8 - rosapps/applications/net/tditest/tditest.rc | 7 - .../applications/net/tditest/tditest/SOURCES | 14 - .../net/tditest/tditest/tditest.c | 961 -- rosapps/applications/notevil/notevil.c | 267 - rosapps/applications/notevil/notevil.rbuild | 7 - rosapps/applications/notevil/notevil.rc | 89 - rosapps/applications/notevil/readme.txt | 21 - rosapps/applications/notevil/resource.h | 2 - rosapps/applications/packmgr/cmd-line/main.c | 211 - rosapps/applications/packmgr/cmd-line/main.h | 17 - .../applications/packmgr/cmd-line/ros-get.rc | 8 - .../packmgr/cmd-line/rosget.rbuild | 9 - rosapps/applications/packmgr/directory.rbuild | 9 - rosapps/applications/packmgr/gui/generic.rc | 34 - rosapps/applications/packmgr/gui/help.txt | 8 - .../applications/packmgr/gui/lang/cs-CZ.rc | 43 - .../applications/packmgr/gui/lang/de-DE.rc | 43 - .../applications/packmgr/gui/lang/en-US.rc | 43 - .../applications/packmgr/gui/lang/es-ES.rc | 43 - .../applications/packmgr/gui/lang/fr-FR.rc | 46 - .../applications/packmgr/gui/lang/no-NO.rc | 43 - .../applications/packmgr/gui/lang/pl-PL.rc | 48 - .../applications/packmgr/gui/lang/ru-RU.rc | 44 - .../applications/packmgr/gui/lang/sk-SK.rc | 45 - .../applications/packmgr/gui/lang/uk-UA.rc | 50 - rosapps/applications/packmgr/gui/main.c | 451 - rosapps/applications/packmgr/gui/main.h | 43 - .../applications/packmgr/gui/packmgr.rbuild | 13 - rosapps/applications/packmgr/gui/packmgr.rc | 27 - .../applications/packmgr/gui/res/blank.ico | Bin 3750 -> 0 bytes .../packmgr/gui/res/development.ico | Bin 4710 -> 0 bytes .../applications/packmgr/gui/res/games.ico | Bin 11502 -> 0 bytes .../applications/packmgr/gui/res/graphics.ico | Bin 9062 -> 0 bytes rosapps/applications/packmgr/gui/res/inet.ico | Bin 18902 -> 0 bytes .../applications/packmgr/gui/res/install.ico | Bin 18902 -> 0 bytes .../packmgr/gui/res/installed.ico | Bin 21630 -> 0 bytes .../packmgr/gui/res/installsource.ico | Bin 18902 -> 0 bytes .../packmgr/gui/res/multimedia.ico | Bin 7782 -> 0 bytes .../applications/packmgr/gui/res/office.ico | Bin 7782 -> 0 bytes .../applications/packmgr/gui/res/others.ico | Bin 21630 -> 0 bytes .../packmgr/gui/res/packetmanager.ico | Bin 22486 -> 0 bytes .../applications/packmgr/gui/res/toolbar.bmp | Bin 9270 -> 0 bytes .../applications/packmgr/gui/res/tools.ico | Bin 18902 -> 0 bytes .../packmgr/gui/res/uninstall.ico | Bin 21630 -> 0 bytes .../applications/packmgr/gui/res/update.ico | Bin 21630 -> 0 bytes rosapps/applications/packmgr/gui/resource.h | 15 - rosapps/applications/packmgr/lib/download.cpp | 168 - rosapps/applications/packmgr/lib/error.h | 20 - rosapps/applications/packmgr/lib/expat.h | 1081 -- .../applications/packmgr/lib/functions.cpp | 101 - .../applications/packmgr/lib/lang/cs-CZ.rc | 25 - .../applications/packmgr/lib/lang/de-DE.rc | 24 - .../applications/packmgr/lib/lang/en-US.rc | 25 - .../applications/packmgr/lib/lang/es-ES.rc | 24 - .../applications/packmgr/lib/lang/fr-FR.rc | 28 - .../applications/packmgr/lib/lang/no-NO.rc | 25 - .../applications/packmgr/lib/lang/ru-RU.rc | 26 - .../applications/packmgr/lib/lang/uk-UA.rc | 32 - rosapps/applications/packmgr/lib/log.cpp | 117 - rosapps/applications/packmgr/lib/log.h | 21 - rosapps/applications/packmgr/lib/main.cpp | 192 - rosapps/applications/packmgr/lib/options.cpp | 101 - rosapps/applications/packmgr/lib/options.xml | 3 - rosapps/applications/packmgr/lib/package.cpp | 288 - rosapps/applications/packmgr/lib/package.def | 15 - rosapps/applications/packmgr/lib/package.h | 47 - rosapps/applications/packmgr/lib/package.hpp | 92 - .../applications/packmgr/lib/package.rbuild | 23 - rosapps/applications/packmgr/lib/package.rc | 22 - rosapps/applications/packmgr/lib/script.cpp | 278 - rosapps/applications/packmgr/lib/script.h | 65 - rosapps/applications/packmgr/lib/tree.cpp | 126 - .../applications/packmgr/tree/7zip.inst.rps | 9 - rosapps/applications/packmgr/tree/7zip.xml | 7 - .../packmgr/tree/abiword.inst.rps | 8 - rosapps/applications/packmgr/tree/abiword.xml | 7 - .../packmgr/tree/firefox.inst.rps | 9 - rosapps/applications/packmgr/tree/firefox.xml | 7 - .../packmgr/tree/irfanview.inst.rps | 8 - .../applications/packmgr/tree/irfanview.xml | 7 - .../packmgr/tree/mplayer.inst.rps | 2 - rosapps/applications/packmgr/tree/mplayer.xml | 13 - .../packmgr/tree/openoffice.inst.rps | 1 - .../applications/packmgr/tree/openoffice.xml | 7 - .../applications/packmgr/tree/putty.inst.rps | 4 - rosapps/applications/packmgr/tree/putty.xml | 7 - .../applications/packmgr/tree/rosbe.inst.rps | 8 - rosapps/applications/packmgr/tree/rosbe.xml | 7 - .../packmgr/tree/samba-tng.inst.rps | 9 - .../applications/packmgr/tree/samba-tng.xml | 7 - .../applications/packmgr/tree/tiny.inst.rps | 2 - rosapps/applications/packmgr/tree/tiny.xml | 11 - rosapps/applications/packmgr/tree/tree.xml | 27 - .../applications/packmgr/tree/tree_bare.xml | 13 - .../packmgr/tree/tree_withsubs.xml | 70 - .../packmgr/tree/tuxpaint.inst.rps | 9 - .../applications/packmgr/tree/tuxpaint.xml | 7 - .../screensavers/blankscr/blankscr.rbuild | 11 - .../screensavers/blankscr/lang/bg-BG.rc | 7 - .../screensavers/blankscr/lang/de-DE.rc | 7 - .../screensavers/blankscr/lang/en-US.rc | 7 - .../screensavers/blankscr/lang/es-ES.rc | 7 - .../screensavers/blankscr/lang/fr-FR.rc | 7 - .../screensavers/blankscr/lang/lt-LT.rc | 16 - .../screensavers/blankscr/lang/nl-NL.rc | 7 - .../screensavers/blankscr/lang/no-NO.rc | 7 - .../screensavers/blankscr/lang/pl-PL.rc | 14 - .../screensavers/blankscr/lang/sk-SK.rc | 11 - .../screensavers/blankscr/lang/uk-UA.rc | 15 - .../screensavers/blankscr/resource.h | 1 - .../screensavers/blankscr/scrnsave.c | 47 - .../screensavers/blankscr/scrnsave.rc | 23 - .../screensavers/butterflies/butterflies.c | 329 - .../butterflies/butterflies.rbuild | 18 - .../screensavers/butterflies/butterflies.rc | 16 - .../screensavers/butterflies/lang/bg-BG.rc | 34 - .../screensavers/butterflies/lang/de-DE.rc | 34 - .../screensavers/butterflies/lang/en-US.rc | 34 - .../screensavers/butterflies/lang/es-ES.rc | 34 - .../screensavers/butterflies/lang/fr-FR.rc | 34 - .../screensavers/butterflies/lang/lt-LT.rc | 43 - .../screensavers/butterflies/lang/no-NO.rc | 34 - .../screensavers/butterflies/lang/pl-PL.rc | 41 - .../screensavers/butterflies/lang/sk-SK.rc | 38 - .../screensavers/butterflies/lang/uk-UA.rc | 34 - .../butterflies/res/butterfly1.bmp | Bin 49206 -> 0 bytes .../butterflies/res/butterfly2.bmp | Bin 49206 -> 0 bytes .../butterflies/res/butterfly3.bmp | Bin 49206 -> 0 bytes .../screensavers/butterflies/resource.h | 14 - .../screensavers/butterflies/rsrc.rc | 10 - .../screensavers/circles/circles.c | 110 - .../screensavers/circles/circles.rbuild | 14 - .../screensavers/circles/circles.rc | 17 - .../screensavers/circles/lang/en-US.rc | 7 - .../screensavers/circles/lang/es-ES.rc | 7 - .../screensavers/circles/lang/no-NO.rc | 7 - .../screensavers/circles/lang/sk-SK.rc | 11 - .../screensavers/circles/resource.h | 3 - .../screensavers/cylfrac/cylfrac.c | 333 - .../screensavers/cylfrac/cylfrac.rbuild | 13 - .../screensavers/cylfrac/cylfrac.rc | 23 - .../screensavers/cylfrac/lang/bg-BG.rc | 8 - .../screensavers/cylfrac/lang/de-DE.rc | 8 - .../screensavers/cylfrac/lang/en-US.rc | 8 - .../screensavers/cylfrac/lang/es-ES.rc | 8 - .../screensavers/cylfrac/lang/fr-FR.rc | 8 - .../screensavers/cylfrac/lang/lt-LT.rc | 17 - .../screensavers/cylfrac/lang/nl-NL.rc | 8 - .../screensavers/cylfrac/lang/no-NO.rc | 8 - .../screensavers/cylfrac/lang/pl-PL.rc | 15 - .../screensavers/cylfrac/lang/sk-SK.rc | 12 - .../screensavers/cylfrac/lang/uk-UA.rc | 16 - .../screensavers/cylfrac/resource.h | 4 - .../screensavers/matrix/Permission.txt | 17 - .../screensavers/matrix/ReadMe.txt | 32 - .../applications/screensavers/matrix/config.c | 312 - .../screensavers/matrix/cursor1.cur | Bin 326 -> 0 bytes .../screensavers/matrix/globals.h | 63 - .../screensavers/matrix/icon1.ico | Bin 4398 -> 0 bytes .../screensavers/matrix/lang/bg-BG.rc | 53 - .../screensavers/matrix/lang/de-DE.rc | 52 - .../screensavers/matrix/lang/en-US.rc | 53 - .../screensavers/matrix/lang/es-ES.rc | 53 - .../screensavers/matrix/lang/fr-FR.rc | 53 - .../screensavers/matrix/lang/lt-LT.rc | 62 - .../screensavers/matrix/lang/nl-NL.rc | 53 - .../screensavers/matrix/lang/no-NO.rc | 53 - .../screensavers/matrix/lang/pl-PL.rc | 60 - .../screensavers/matrix/lang/sk-SK.rc | 61 - .../screensavers/matrix/lang/th-TH.rc | 53 - .../screensavers/matrix/lang/uk-UA.rc | 61 - .../screensavers/matrix/matrix.bmp | Bin 31656 -> 0 bytes .../applications/screensavers/matrix/matrix.c | 446 - .../screensavers/matrix/matrix.dsp | 158 - .../applications/screensavers/matrix/matrix.h | 70 - .../screensavers/matrix/matrix.rbuild | 22 - .../screensavers/matrix/message.c | 250 - .../screensavers/matrix/message.h | 32 - .../screensavers/matrix/password.c | 69 - .../screensavers/matrix/resource.h | 22 - .../applications/screensavers/matrix/rsrc.rc | 21 - .../screensavers/matrix/screensave.c | 160 - .../screensavers/matrix/settings.c | 160 - .../screensavers/mazescr/lang/bg-BG.rc | 8 - .../screensavers/mazescr/lang/de-DE.rc | 8 - .../screensavers/mazescr/lang/en-US.rc | 8 - .../screensavers/mazescr/lang/es-ES.rc | 8 - .../screensavers/mazescr/lang/lt-LT.rc | 8 - .../screensavers/mazescr/lang/no-NO.rc | 8 - .../screensavers/mazescr/lang/pl-PL.rc | 15 - .../screensavers/mazescr/lang/sk-SK.rc | 12 - .../screensavers/mazescr/lang/uk-UA.rc | 16 - .../applications/screensavers/mazescr/maze.c | 868 -- .../screensavers/mazescr/mazescr.rbuild | 12 - .../screensavers/mazescr/resource.h | 4 - .../screensavers/mazescr/scrnsave.c | 234 - .../screensavers/mazescr/scrnsave.rc | 21 - .../screensavers/screensavers.rbuild | 25 - .../screensavers/starfield/lang/bg-BG.rc | 8 - .../screensavers/starfield/lang/de-DE.rc | 8 - .../screensavers/starfield/lang/en-US.rc | 8 - .../screensavers/starfield/lang/es-ES.rc | 8 - .../screensavers/starfield/lang/fr-FR.rc | 8 - .../screensavers/starfield/lang/lt-LT.rc | 17 - .../screensavers/starfield/lang/nl-NL.rc | 8 - .../screensavers/starfield/lang/no-NO.rc | 8 - .../screensavers/starfield/lang/pl-PL.rc | 15 - .../screensavers/starfield/lang/sk-SK.rc | 12 - .../screensavers/starfield/lang/uk-UA.rc | 16 - .../screensavers/starfield/resource.h | 4 - .../screensavers/starfield/screensaver.c | 385 - .../screensavers/starfield/starfield.rbuild | 12 - .../screensavers/starfield/starfield.rc | 23 - rosapps/applications/sysutils/chkdsk/chkdsk.c | 488 - .../sysutils/chkdsk/chkdsk.rbuild | 12 - .../applications/sysutils/chkdsk/chkdsk.rc | 7 - rosapps/applications/sysutils/chklib/chklib.c | 200 - .../sysutils/chklib/chklib.rbuild | 9 - .../applications/sysutils/chklib/chklib.rc | 6 - rosapps/applications/sysutils/config.h | 6 - rosapps/applications/sysutils/ctm/ctm.c | 727 -- rosapps/applications/sysutils/ctm/ctm.h | 60 - rosapps/applications/sysutils/ctm/ctm.rbuild | 9 - rosapps/applications/sysutils/ctm/ctm.rc | 18 - .../applications/sysutils/ctm/lang/de-DE.rc | 32 - .../applications/sysutils/ctm/lang/el-GR.rc | 32 - .../applications/sysutils/ctm/lang/en-US.rc | 32 - .../applications/sysutils/ctm/lang/fr-FR.rc | 32 - .../applications/sysutils/ctm/lang/no-NO.rc | 32 - .../applications/sysutils/ctm/lang/ru-RU.rc | 32 - .../applications/sysutils/ctm/lang/uk-UA.rc | 38 - rosapps/applications/sysutils/ctm/resource.h | 45 - .../applications/sysutils/dosfsck/.cvsignore | 1 - rosapps/applications/sysutils/dosfsck/CHANGES | 10 - rosapps/applications/sysutils/dosfsck/COPYING | 345 - .../applications/sysutils/dosfsck/Makefile | 44 - rosapps/applications/sysutils/dosfsck/README | 60 - rosapps/applications/sysutils/dosfsck/boot.c | 370 - rosapps/applications/sysutils/dosfsck/boot.h | 13 - .../applications/sysutils/dosfsck/byteorder.h | 59 - .../applications/sysutils/dosfsck/byteswap.h | 40 - .../applications/sysutils/dosfsck/byteswap1.h | 133 - rosapps/applications/sysutils/dosfsck/check.c | 867 -- rosapps/applications/sysutils/dosfsck/check.h | 23 - .../applications/sysutils/dosfsck/common.c | 110 - .../applications/sysutils/dosfsck/common.h | 42 - .../applications/sysutils/dosfsck/compiler.h | 158 - .../applications/sysutils/dosfsck/dosfsck.8 | 143 - .../applications/sysutils/dosfsck/dosfsck.c | 184 - .../applications/sysutils/dosfsck/dosfsck.h | 187 - .../sysutils/dosfsck/dosfsck.rbuild | 15 - .../applications/sysutils/dosfsck/dosfsck.rc | 7 - rosapps/applications/sysutils/dosfsck/fat.c | 366 - rosapps/applications/sysutils/dosfsck/fat.h | 64 - rosapps/applications/sysutils/dosfsck/file.c | 251 - rosapps/applications/sysutils/dosfsck/file.h | 55 - rosapps/applications/sysutils/dosfsck/io.c | 445 - rosapps/applications/sysutils/dosfsck/io.h | 54 - rosapps/applications/sysutils/dosfsck/lfn.c | 480 - rosapps/applications/sysutils/dosfsck/lfn.h | 20 - .../applications/sysutils/dosfsck/msdos_fs.h | 182 - rosapps/applications/sysutils/dosfsck/swab.h | 192 - .../applications/sysutils/dosfsck/version.h | 8 - rosapps/applications/sysutils/dosfsck/vfat.h | 744 -- .../applications/sysutils/gettype/gettype.c | 394 - .../sysutils/gettype/gettype.rbuild | 9 - rosapps/applications/sysutils/kill/kill.c | 77 - .../applications/sysutils/kill/kill.rbuild | 8 - rosapps/applications/sysutils/kill/kill.rc | 6 - .../applications/sysutils/logevent/logevent.c | 206 - .../sysutils/logevent/logevent.rbuild | 8 - .../sysutils/logevent/logevent.rc | 5 - rosapps/applications/sysutils/lsdd/lsdd.c | 126 - .../applications/sysutils/lsdd/lsdd.rbuild | 8 - rosapps/applications/sysutils/lsdd/lsdd.rc | 6 - rosapps/applications/sysutils/man/man.c | 231 - rosapps/applications/sysutils/man/man.cmd | 54 - rosapps/applications/sysutils/man/man.rbuild | 7 - .../sysutils/man/man/2/chkdsk.man | 13 - .../sysutils/man/man/2/chklib.man | 8 - .../sysutils/man/man/2/format.man | 22 - .../applications/sysutils/man/man/2/man.man | 21 - .../applications/sysutils/man/man/2/ping.man | 13 - .../sysutils/man/man/3/taskmgr.man | 8 - rosapps/applications/sysutils/man/man/foo.1 | 78 - rosapps/applications/sysutils/man/man/man.1 | 100 - .../applications/sysutils/man/used_tags.txt | 7 - .../applications/sysutils/mkdosfs/.cvsignore | 1 - .../applications/sysutils/mkdosfs/ANNOUNCE | 41 - rosapps/applications/sysutils/mkdosfs/COPYING | 347 - .../applications/sysutils/mkdosfs/ChangeLog | 18 - .../applications/sysutils/mkdosfs/Makefile | 31 - rosapps/applications/sysutils/mkdosfs/README | 50 - .../applications/sysutils/mkdosfs/getopt.c | 63 - .../sysutils/mkdosfs/mkdosfs-ygg-0.3b.lsm | 19 - .../applications/sysutils/mkdosfs/mkdosfs.8 | 198 - .../applications/sysutils/mkdosfs/mkdosfs.c | 2070 --- .../applications/sysutils/mkdosfs/mkdosfs.dsp | 104 - .../applications/sysutils/mkdosfs/mkdosfs.dsw | 29 - .../applications/sysutils/mkdosfs/mkdosfs.plg | 49 - rosapps/applications/sysutils/pedump/pedump.c | 4311 ------- .../sysutils/pedump/pedump.rbuild | 6 - .../applications/sysutils/pedump/pedump.rc | 7 - rosapps/applications/sysutils/qssi/qssi.c | 2684 ---- rosapps/applications/sysutils/qssi/qssi.rc | 6 - .../sysutils/regexpl/ArgumentParser.cpp | 111 - .../sysutils/regexpl/ArgumentParser.h | 42 - .../sysutils/regexpl/Completion.cpp | 505 - .../sysutils/regexpl/Completion.h | 17 - .../applications/sysutils/regexpl/Console.cpp | 1082 -- .../applications/sysutils/regexpl/Console.h | 61 - .../sysutils/regexpl/CrtSupplement.c | 50 - .../applications/sysutils/regexpl/Pattern.cpp | 59 - .../applications/sysutils/regexpl/Pattern.h | 12 - .../applications/sysutils/regexpl/Prompt.cpp | 94 - .../applications/sysutils/regexpl/Prompt.h | 21 - rosapps/applications/sysutils/regexpl/README | 19 - .../sysutils/regexpl/RegistryExplorer.cpp | 271 - .../sysutils/regexpl/RegistryExplorer.h | 52 - .../sysutils/regexpl/RegistryKey.cpp | 576 - .../sysutils/regexpl/RegistryKey.h | 259 - .../sysutils/regexpl/RegistryTree.cpp | 641 - .../sysutils/regexpl/RegistryTree.h | 116 - .../sysutils/regexpl/SecurityDescriptor.cpp | 290 - .../sysutils/regexpl/SecurityDescriptor.h | 57 - .../sysutils/regexpl/Settings.cpp | 146 - .../applications/sysutils/regexpl/Settings.h | 23 - .../sysutils/regexpl/ShellCommand.cpp | 42 - .../sysutils/regexpl/ShellCommand.h | 25 - .../regexpl/ShellCommandChangeKey.cpp | 106 - .../sysutils/regexpl/ShellCommandChangeKey.h | 26 - .../sysutils/regexpl/ShellCommandConnect.cpp | 103 - .../sysutils/regexpl/ShellCommandConnect.h | 26 - .../sysutils/regexpl/ShellCommandDACL.cpp | 383 - .../sysutils/regexpl/ShellCommandDACL.h | 26 - .../sysutils/regexpl/ShellCommandDOKA.cpp | 254 - .../sysutils/regexpl/ShellCommandDOKA.h | 26 - .../regexpl/ShellCommandDeleteKey.cpp | 176 - .../sysutils/regexpl/ShellCommandDeleteKey.h | 26 - .../regexpl/ShellCommandDeleteValue.cpp | 197 - .../regexpl/ShellCommandDeleteValue.h | 26 - .../sysutils/regexpl/ShellCommandDir.cpp | 297 - .../sysutils/regexpl/ShellCommandDir.h | 26 - .../sysutils/regexpl/ShellCommandExit.cpp | 67 - .../sysutils/regexpl/ShellCommandExit.h | 23 - .../sysutils/regexpl/ShellCommandHelp.cpp | 135 - .../sysutils/regexpl/ShellCommandHelp.h | 26 - .../sysutils/regexpl/ShellCommandNewKey.cpp | 177 - .../sysutils/regexpl/ShellCommandNewKey.h | 26 - .../sysutils/regexpl/ShellCommandOwner.cpp | 248 - .../sysutils/regexpl/ShellCommandOwner.h | 26 - .../sysutils/regexpl/ShellCommandSACL.cpp | 455 - .../sysutils/regexpl/ShellCommandSACL.h | 26 - .../sysutils/regexpl/ShellCommandSetValue.cpp | 434 - .../sysutils/regexpl/ShellCommandSetValue.h | 26 - .../sysutils/regexpl/ShellCommandValue.cpp | 439 - .../sysutils/regexpl/ShellCommandValue.h | 26 - .../sysutils/regexpl/ShellCommandVersion.cpp | 66 - .../sysutils/regexpl/ShellCommandVersion.h | 23 - .../regexpl/ShellCommandsLinkedList.cpp | 120 - .../regexpl/ShellCommandsLinkedList.h | 35 - .../sysutils/regexpl/TextHistory.cpp | 93 - .../sysutils/regexpl/TextHistory.h | 27 - rosapps/applications/sysutils/regexpl/ph.h | 50 - .../sysutils/regexpl/regexpl.rbuild | 35 - .../applications/sysutils/regexpl/regexpl.rc | 7 - .../sysutils/screenshot/screenshot.c | 404 - .../sysutils/screenshot/screenshot.h | 15 - .../sysutils/screenshot/screenshot.rbuild | 9 - .../sysutils/screenshot/screenshot.rc | 10 - .../applications/sysutils/screenshot/snap.ico | Bin 29926 -> 0 bytes .../sysutils/systeminfo/lang/de-DE.rc | 66 - .../sysutils/systeminfo/lang/en-US.rc | 64 - .../sysutils/systeminfo/lang/es-ES.rc | 69 - .../sysutils/systeminfo/lang/fr-FR.rc | 64 - .../sysutils/systeminfo/lang/no-NO.rc | 64 - .../sysutils/systeminfo/lang/pl-PL.rc | 71 - .../sysutils/systeminfo/lang/sk-SK.rc | 68 - .../sysutils/systeminfo/lang/uk-UA.rc | 72 - .../sysutils/systeminfo/resource.h | 33 - .../applications/sysutils/systeminfo/rsrc.rc | 11 - .../sysutils/systeminfo/systeminfo.c | 368 - .../sysutils/systeminfo/systeminfo.rbuild | 9 - .../sysutils/systeminfo/systeminfo.rc | 6 - rosapps/applications/sysutils/sysutils.rbuild | 66 - rosapps/applications/sysutils/tcat/cat.c | 52 - .../applications/sysutils/tcat/tcat.rbuild | 7 - rosapps/applications/sysutils/tlist/tlist.c | 464 - .../applications/sysutils/tlist/tlist.rbuild | 8 - rosapps/applications/sysutils/tlist/tlist.rc | 7 - .../sysutils/utils/binpatch/binpatch.rbuild | 5 - .../sysutils/utils/binpatch/patch.c | 616 - rosapps/applications/sysutils/utils/cat/cat.c | 26 - .../sysutils/utils/cat/cat.rbuild | 5 - .../sysutils/utils/driver/driver.rbuild | 8 - .../sysutils/utils/driver/load/load.c | 33 - .../sysutils/utils/driver/load/load.rbuild | 6 - .../sysutils/utils/driver/unload/unload.c | 33 - .../utils/driver/unload/unload.rbuild | 6 - .../sysutils/utils/infinst/infinst.c | 84 - .../sysutils/utils/infinst/infinst.rbuild | 8 - .../sysutils/utils/nts2w32err/nts2w32err.c | 56 - .../utils/nts2w32err/nts2w32err.rbuild | 6 - .../sysutils/utils/objdir/objdir.c | 380 - .../sysutils/utils/objdir/objdir.rbuild | 6 - .../sysutils/utils/partinfo/partinfo.c | 212 - .../sysutils/utils/partinfo/partinfo.rbuild | 6 - .../sysutils/utils/pice/loader/main.c | 1001 -- .../sysutils/utils/pice/loader/retypes.h | 15 - .../sysutils/utils/pice/loader/stab.def | 264 - .../sysutils/utils/pice/loader/stab_gnu.h | 37 - .../sysutils/utils/pice/loader/stdinc.h | 28 - .../sysutils/utils/pice/loader/terminal.c | 430 - .../sysutils/utils/pice/loader/terminal.h | 34 - .../sysutils/utils/pice/module/animation.h | 2116 ---- .../sysutils/utils/pice/module/bp.c | 752 -- .../sysutils/utils/pice/module/bp.h | 62 - .../sysutils/utils/pice/module/charset.h | 2564 ---- .../sysutils/utils/pice/module/dblflt.c | 133 - .../sysutils/utils/pice/module/dblflt.h | 32 - .../sysutils/utils/pice/module/debug.c | 192 - .../sysutils/utils/pice/module/debug.h | 47 - .../sysutils/utils/pice/module/disassembler.c | 716 -- .../sysutils/utils/pice/module/disassembler.h | 159 - .../utils/pice/module/disassemblerdata.h | 1802 --- .../utils/pice/module/disassemblerdefines.h | 515 - .../sysutils/utils/pice/module/gpfault.c | 142 - .../sysutils/utils/pice/module/gpfault.h | 34 - .../sysutils/utils/pice/module/hardware.c | 1042 -- .../sysutils/utils/pice/module/hardware.h | 166 - .../sysutils/utils/pice/module/hercules.c | 486 - .../sysutils/utils/pice/module/hercules.h | 32 - .../sysutils/utils/pice/module/hooks.c | 177 - .../sysutils/utils/pice/module/hooks.h | 49 - .../sysutils/utils/pice/module/init.c | 379 - .../sysutils/utils/pice/module/init.h | 35 - .../sysutils/utils/pice/module/ldrsym.h | 38 - .../sysutils/utils/pice/module/logo.h | 100 - .../sysutils/utils/pice/module/output.c | 290 - .../sysutils/utils/pice/module/output.h | 42 - .../sysutils/utils/pice/module/parse.c | 4102 ------ .../sysutils/utils/pice/module/parse.h | 182 - .../sysutils/utils/pice/module/patch.c | 235 - .../sysutils/utils/pice/module/patch.h | 34 - .../sysutils/utils/pice/module/pci_ids.h | 905 -- .../sysutils/utils/pice/module/pgflt.c | 402 - .../sysutils/utils/pice/module/pgflt.h | 34 - .../sysutils/utils/pice/module/pice.rc | 7 - .../sysutils/utils/pice/module/pice_ver.h | 36 - .../sysutils/utils/pice/module/precomp.h | 65 - .../sysutils/utils/pice/module/privateice.c | 203 - .../sysutils/utils/pice/module/regs.h | 122 - .../sysutils/utils/pice/module/remods.h | 33 - .../sysutils/utils/pice/module/retypes.h | 52 - .../sysutils/utils/pice/module/scancodes.h | 106 - .../sysutils/utils/pice/module/serial.c | 656 - .../sysutils/utils/pice/module/serial.h | 36 - .../sysutils/utils/pice/module/serial_port.h | 173 - .../sysutils/utils/pice/module/shell.c | 1692 --- .../sysutils/utils/pice/module/shell.h | 91 - .../sysutils/utils/pice/module/stab.def | 265 - .../sysutils/utils/pice/module/stab_gnu.h | 67 - .../sysutils/utils/pice/module/symbols.c | 2984 ----- .../sysutils/utils/pice/module/symbols.h | 88 - .../sysutils/utils/pice/module/syscall.c | 231 - .../sysutils/utils/pice/module/syscall.h | 35 - .../sysutils/utils/pice/module/trace.c | 91 - .../sysutils/utils/pice/module/trace.h | 35 - .../sysutils/utils/pice/module/utils.c | 2430 ---- .../sysutils/utils/pice/module/utils.h | 325 - .../sysutils/utils/pice/module/vga.c | 572 - .../sysutils/utils/pice/module/vga.h | 32 - .../sysutils/utils/pice/module/vga_utils.asm | 729 -- .../applications/sysutils/utils/pice/pice.cfg | 4 - .../sysutils/utils/pice/readme.txt | 107 - .../sysutils/utils/pice/shared/shared.h | 204 - .../sysutils/utils/pnpdump/pnpdump.c | 855 -- rosapps/applications/sysutils/utils/ps/ps.c | 281 - .../sysutils/utils/ps/ps.c.toolhelp | 70 - .../applications/sysutils/utils/ps/ps.rbuild | 7 - .../sysutils/utils/rosperf/alphablend.c | 88 - .../sysutils/utils/rosperf/fill.c | 60 - .../sysutils/utils/rosperf/gradient.c | 154 - .../sysutils/utils/rosperf/lines.c | 97 - .../sysutils/utils/rosperf/rosperf.c | 923 -- .../sysutils/utils/rosperf/rosperf.h | 74 - .../sysutils/utils/rosperf/rosperf.rbuild | 21 - .../sysutils/utils/rosperf/rosperf.rc | 4 - .../sysutils/utils/rosperf/testlist.c | 44 - .../sysutils/utils/rosperf/text.c | 44 - .../sysutils/utils/sdkparse/EnumDirs.h | 15 - .../sysutils/utils/sdkparse/EnumDirsImpl.h | 42 - .../sysutils/utils/sdkparse/EnumFiles.h | 11 - .../sysutils/utils/sdkparse/EnumFilesImpl.h | 92 - .../sysutils/utils/sdkparse/File.cpp | 129 - .../sysutils/utils/sdkparse/File.h | 111 - .../sysutils/utils/sdkparse/FixLFN.h | 32 - .../sysutils/utils/sdkparse/Header.h | 26 - .../sysutils/utils/sdkparse/Symbol.h | 18 - .../sysutils/utils/sdkparse/Type.h | 22 - .../sysutils/utils/sdkparse/assert.h | 47 - .../sysutils/utils/sdkparse/binary2cstr.cpp | 49 - .../sysutils/utils/sdkparse/binary2cstr.h | 10 - .../sysutils/utils/sdkparse/input.lst | 349 - .../sysutils/utils/sdkparse/iskeyword.cpp | 138 - .../sysutils/utils/sdkparse/iskeyword.h | 8 - .../sysutils/utils/sdkparse/safestr.h | 61 - .../sysutils/utils/sdkparse/sdkparse.cpp | 988 -- .../sysutils/utils/sdkparse/sdkparse.dsp | 169 - .../sysutils/utils/sdkparse/sdkparse.dsw | 29 - .../sysutils/utils/sdkparse/skip_ws.cpp | 17 - .../sysutils/utils/sdkparse/skip_ws.h | 10 - .../utils/sdkparse/strip_comments.cpp | 43 - .../sysutils/utils/sdkparse/strip_comments.h | 10 - .../sysutils/utils/sdkparse/test.h | 263 - .../sysutils/utils/sdkparse/tokenize.cpp | 312 - .../sysutils/utils/sdkparse/tokenize.h | 8 - .../applications/sysutils/utils/stats/stats.c | 478 - .../sysutils/utils/stats/stats.rbuild | 5 - .../sysutils/utils/theme/dump/manifest.rbuild | 24 - .../sysutils/utils/theme/dump/themedump.bpr | 116 - .../sysutils/utils/theme/dump/themedump.cpp | 642 - .../sysutils/utils/theme/dump/themedump.rc | 6 - .../sysutils/utils/tickcount/tickcount.c | 191 - .../sysutils/utils/tickcount/tickcount.rbuild | 5 - .../applications/sysutils/utils/utils.rbuild | 35 - rosapps/applications/sysutils/win32err.h | 9 - rosapps/applications/sysutils/wmain.c | 55 - rosapps/applications/winfile/Makefile.in | 20 - rosapps/applications/winfile/drivebar.bmp | Bin 742 -> 0 bytes rosapps/applications/winfile/images.bmp | Bin 1158 -> 0 bytes rosapps/applications/winfile/lang/cs-CZ.rc | 211 - rosapps/applications/winfile/lang/da-DK.rc | 258 - rosapps/applications/winfile/lang/de-DE.rc | 256 - rosapps/applications/winfile/lang/en-US.rc | 260 - rosapps/applications/winfile/lang/es-ES.rc | 258 - rosapps/applications/winfile/lang/fr-FR.rc | 262 - rosapps/applications/winfile/lang/hu-HU.rc | 161 - rosapps/applications/winfile/lang/it-IT.rc | 180 - rosapps/applications/winfile/lang/ja-JP.rc | 265 - rosapps/applications/winfile/lang/ko-KR.rc | 262 - rosapps/applications/winfile/lang/nl-NL.rc | 257 - rosapps/applications/winfile/lang/no-NO.rc | 258 - rosapps/applications/winfile/lang/pl-PL.rc | 260 - rosapps/applications/winfile/lang/pt-BR.rc | 385 - rosapps/applications/winfile/lang/ru-RU.rc | 257 - rosapps/applications/winfile/lang/sl-SI.rc | 262 - rosapps/applications/winfile/lang/sv-SE.rc | 205 - rosapps/applications/winfile/lang/tr-TR.rc | 258 - rosapps/applications/winfile/lang/zh-CN.rc | 302 - rosapps/applications/winfile/resource.h | 142 - rosapps/applications/winfile/rsrc.rc | 76 - rosapps/applications/winfile/splitpath.c | 155 - rosapps/applications/winfile/toolbar.bmp | Bin 958 -> 0 bytes rosapps/applications/winfile/winefile.c | 4961 -------- rosapps/applications/winfile/winefile.h | 164 - rosapps/applications/winfile/winefile.ico | Bin 15086 -> 0 bytes rosapps/applications/winfile/winfile.rbuild | 20 - rosapps/applications/winver/winver.c | 12 - rosapps/applications/winver/winver.rbuild | 6 - rosapps/applications/write/lang/bg-BG.rc | 26 - rosapps/applications/write/lang/de-DE.rc | 25 - rosapps/applications/write/lang/en-US.rc | 26 - rosapps/applications/write/lang/fr-FR.rc | 29 - rosapps/applications/write/lang/ja-JP.rc | 31 - rosapps/applications/write/lang/ko-KR.rc | 27 - rosapps/applications/write/lang/nl-NL.rc | 26 - rosapps/applications/write/lang/no-NO.rc | 26 - rosapps/applications/write/lang/pl-PL.rc | 26 - rosapps/applications/write/lang/ro-RO.rc | 29 - rosapps/applications/write/lang/ru-RU.rc | 26 - rosapps/applications/write/lang/sk-SK.rc | 10 - rosapps/applications/write/lang/sl-SI.rc | 30 - rosapps/applications/write/lang/uk-UA.rc | 26 - rosapps/applications/write/resources.h | 19 - rosapps/applications/write/rsrc.rc | 39 - rosapps/applications/write/write.c | 54 - rosapps/applications/write/write.rbuild | 11 - rosapps/copying | 340 - rosapps/demos/ddraw/ddraw.rbuild | 8 - rosapps/demos/ddraw/main.cpp | 357 - rosapps/demos/directory.rbuild | 10 - rosapps/demos/maze/Makefile | 25 - rosapps/demos/maze/maze.c | 907 -- rosapps/demos/maze/maze.rbuild | 7 - rosapps/demos/maze/maze.rc | 60 - rosapps/demos/maze/resource.h | 16 - rosapps/dflat32/applicat.c | 622 - rosapps/dflat32/barchart.c | 74 - rosapps/dflat32/box.c | 44 - rosapps/dflat32/button.c | 92 - rosapps/dflat32/calendar.c | 185 - rosapps/dflat32/checkbox.c | 49 - rosapps/dflat32/classdef.h | 31 - rosapps/dflat32/classes.h | 56 - rosapps/dflat32/clipbord.c | 54 - rosapps/dflat32/combobox.c | 149 - rosapps/dflat32/commands.h | 121 - rosapps/dflat32/config.c | 514 - rosapps/dflat32/config.h | 48 - rosapps/dflat32/console.c | 217 - rosapps/dflat32/decomp.c | 134 - rosapps/dflat32/dfalloc.c | 70 - rosapps/dflat32/dflat.doc | 1350 -- rosapps/dflat32/dflat.h | 487 - rosapps/dflat32/dflat32.rbuild | 50 - rosapps/dflat32/dflatmsg.h | 100 - rosapps/dflat32/dialbox.c | 792 -- rosapps/dflat32/dialbox.h | 55 - rosapps/dflat32/dialogs.c | 160 - rosapps/dflat32/direct.c | 175 - rosapps/dflat32/edit.c | 741 -- rosapps/dflat32/edit.rc | 9 - rosapps/dflat32/edit.txt | 1455 --- rosapps/dflat32/editbox.c | 1113 -- rosapps/dflat32/fileopen.c | 259 - rosapps/dflat32/help.txt | 1 - rosapps/dflat32/helpbox.c | 717 -- rosapps/dflat32/htree.c | 64 - rosapps/dflat32/htree.h | 31 - rosapps/dflat32/huffc.c | 118 - rosapps/dflat32/keys.c | 86 - rosapps/dflat32/keys.h | 119 - rosapps/dflat32/listbox.c | 469 - rosapps/dflat32/lists.c | 149 - rosapps/dflat32/log.c | 75 - rosapps/dflat32/memopad.c | 638 - rosapps/dflat32/menu.c | 85 - rosapps/dflat32/menu.h | 63 - rosapps/dflat32/menubar.c | 432 - rosapps/dflat32/menus.c | 126 - rosapps/dflat32/message.c | 681 - rosapps/dflat32/msgbox.c | 216 - rosapps/dflat32/normal.c | 1085 -- rosapps/dflat32/pictbox.c | 284 - rosapps/dflat32/popdown.c | 395 - rosapps/dflat32/radio.c | 116 - rosapps/dflat32/readme.doc | 104 - rosapps/dflat32/readme.txt | 31 - rosapps/dflat32/rect.c | 106 - rosapps/dflat32/rect.h | 24 - rosapps/dflat32/search.c | 164 - rosapps/dflat32/slidebox.c | 114 - rosapps/dflat32/spinbutt.c | 48 - rosapps/dflat32/statbar.c | 53 - rosapps/dflat32/sysmenu.c | 108 - rosapps/dflat32/system.h | 99 - rosapps/dflat32/text.c | 65 - rosapps/dflat32/textbox.c | 873 -- rosapps/dflat32/video.c | 323 - rosapps/dflat32/video.h | 18 - rosapps/dflat32/watch.c | 58 - rosapps/dflat32/window.c | 521 - rosapps/directory.rbuild | 27 - rosapps/drivers/avtest/avtest.rbuild | 7 - rosapps/drivers/avtest/entry.c | 84 - rosapps/drivers/directory.rbuild | 14 - rosapps/drivers/green/createclose.c | 38 - rosapps/drivers/green/dispatch.c | 105 - rosapps/drivers/green/green.c | 113 - rosapps/drivers/green/green.h | 193 - rosapps/drivers/green/green.inf | 96 - rosapps/drivers/green/green.rbuild | 15 - rosapps/drivers/green/green.rc | 5 - rosapps/drivers/green/keyboard.c | 320 - rosapps/drivers/green/misc.c | 114 - rosapps/drivers/green/pnp.c | 563 - rosapps/drivers/green/power.c | 58 - rosapps/drivers/green/screen.c | 670 - rosapps/drivers/ramdrv/minix/bitops.c | 203 - rosapps/drivers/ramdrv/minix/bitops.h | 30 - rosapps/drivers/ramdrv/minix/block.c | 109 - rosapps/drivers/ramdrv/minix/blockdev.c | 154 - rosapps/drivers/ramdrv/minix/cache.c | 45 - rosapps/drivers/ramdrv/minix/dir.c | 234 - rosapps/drivers/ramdrv/minix/inode.c | 136 - rosapps/drivers/ramdrv/minix/minix.h | 133 - rosapps/drivers/ramdrv/minix/minix.rc | 7 - rosapps/drivers/ramdrv/minix/minix_fs.h | 80 - rosapps/drivers/ramdrv/minix/mount.c | 160 - rosapps/drivers/ramdrv/minix/rw.c | 162 - rosapps/drivers/ramdrv/ramdrv.c | 242 - rosapps/drivers/ramdrv/ramdrv.h | 8 - rosapps/drivers/ramdrv/ramdrv.rbuild | 9 - rosapps/drivers/ramdrv/ramdrv.rc | 5 - rosapps/lib/dflat32/Makefile | 60 - rosapps/lib/dflat32/applicat.c | 622 - rosapps/lib/dflat32/box.c | 44 - rosapps/lib/dflat32/checkbox.c | 49 - rosapps/lib/dflat32/clipbord.c | 54 - rosapps/lib/dflat32/config.c | 514 - rosapps/lib/dflat32/console.c | 217 - rosapps/lib/dflat32/decomp.c | 134 - rosapps/lib/dflat32/dfalloc.c | 70 - rosapps/lib/dflat32/dflat32.def | 115 - rosapps/lib/dflat32/dflat32.rbuild | 40 - rosapps/lib/dflat32/dflat32.rc | 9 - rosapps/lib/dflat32/dialbox.c | 792 -- rosapps/lib/dflat32/dialogs.c | 160 - rosapps/lib/dflat32/dllmain.c | 24 - rosapps/lib/dflat32/editbox.c | 1113 -- rosapps/lib/dflat32/helpbox.c | 717 -- rosapps/lib/dflat32/keys.c | 86 - rosapps/lib/dflat32/listbox.c | 469 - rosapps/lib/dflat32/lists.c | 149 - rosapps/lib/dflat32/log.c | 75 - rosapps/lib/dflat32/menu.c | 85 - rosapps/lib/dflat32/menubar.c | 432 - rosapps/lib/dflat32/menus.c | 126 - rosapps/lib/dflat32/message.c | 681 - rosapps/lib/dflat32/msgbox.c | 216 - rosapps/lib/dflat32/normal.c | 1085 -- rosapps/lib/dflat32/pictbox.c | 284 - rosapps/lib/dflat32/popdown.c | 396 - rosapps/lib/dflat32/radio.c | 116 - rosapps/lib/dflat32/rect.c | 106 - rosapps/lib/dflat32/spinbutt.c | 48 - rosapps/lib/dflat32/statbar.c | 53 - rosapps/lib/dflat32/stubs.c | 28 - rosapps/lib/dflat32/sysmenu.c | 108 - rosapps/lib/dflat32/text.c | 65 - rosapps/lib/dflat32/video.c | 323 - rosapps/lib/dflat32/watch.c | 58 - rosapps/lib/dflat32/window.c | 521 - rosapps/lib/directory.rbuild | 21 - rosapps/lib/libjpeg/LibJPEG.dsp | 328 - rosapps/lib/libjpeg/LibJPEG.vcproj | 315 - rosapps/lib/libjpeg/ansi2knr.c | 693 - rosapps/lib/libjpeg/cderror.h | 132 - rosapps/lib/libjpeg/cdjpeg.c | 181 - rosapps/lib/libjpeg/cdjpeg.h | 184 - rosapps/lib/libjpeg/change.log | 217 - rosapps/lib/libjpeg/cjpeg.c | 606 - rosapps/lib/libjpeg/ckconfig.c | 402 - rosapps/lib/libjpeg/djpeg.c | 616 - rosapps/lib/libjpeg/example.c | 433 - rosapps/lib/libjpeg/jcapimin.c | 280 - rosapps/lib/libjpeg/jcapistd.c | 161 - rosapps/lib/libjpeg/jccoefct.c | 449 - rosapps/lib/libjpeg/jccolor.c | 459 - rosapps/lib/libjpeg/jcdctmgr.c | 387 - rosapps/lib/libjpeg/jchuff.c | 909 -- rosapps/lib/libjpeg/jchuff.h | 47 - rosapps/lib/libjpeg/jcinit.c | 72 - rosapps/lib/libjpeg/jcmainct.c | 293 - rosapps/lib/libjpeg/jcmarker.c | 664 - rosapps/lib/libjpeg/jcmaster.c | 590 - rosapps/lib/libjpeg/jcomapi.c | 106 - rosapps/lib/libjpeg/jconfig.h | 47 - rosapps/lib/libjpeg/jcparam.c | 610 - rosapps/lib/libjpeg/jcphuff.c | 833 -- rosapps/lib/libjpeg/jcprepct.c | 354 - rosapps/lib/libjpeg/jcsample.c | 519 - rosapps/lib/libjpeg/jctrans.c | 388 - rosapps/lib/libjpeg/jdapimin.c | 499 - rosapps/lib/libjpeg/jdapistd.c | 275 - rosapps/lib/libjpeg/jdatadst.c | 151 - rosapps/lib/libjpeg/jdatasrc.c | 213 - rosapps/lib/libjpeg/jdcoefct.c | 736 -- rosapps/lib/libjpeg/jdcolor.c | 396 - rosapps/lib/libjpeg/jdct.h | 176 - rosapps/lib/libjpeg/jddctmgr.c | 305 - rosapps/lib/libjpeg/jdhuff.c | 651 - rosapps/lib/libjpeg/jdhuff.h | 201 - rosapps/lib/libjpeg/jdinput.c | 381 - rosapps/lib/libjpeg/jdmainct.c | 512 - rosapps/lib/libjpeg/jdmarker.c | 1360 -- rosapps/lib/libjpeg/jdmaster.c | 557 - rosapps/lib/libjpeg/jdmerge.c | 1024 -- rosapps/lib/libjpeg/jdphuff.c | 668 - rosapps/lib/libjpeg/jdpostct.c | 290 - rosapps/lib/libjpeg/jdsample.c | 478 - rosapps/lib/libjpeg/jdtrans.c | 143 - rosapps/lib/libjpeg/jerror.c | 248 - rosapps/lib/libjpeg/jerror.h | 292 - rosapps/lib/libjpeg/jfdctflt.c | 168 - rosapps/lib/libjpeg/jfdctfst.c | 224 - rosapps/lib/libjpeg/jfdctint.c | 283 - rosapps/lib/libjpeg/jidctflt.c | 242 - rosapps/lib/libjpeg/jidctfst.c | 1650 --- rosapps/lib/libjpeg/jidctint.c | 963 -- rosapps/lib/libjpeg/jidctred.c | 398 - rosapps/lib/libjpeg/jinclude.h | 91 - rosapps/lib/libjpeg/jmemansi.c | 167 - rosapps/lib/libjpeg/jmemdos.c | 638 - rosapps/lib/libjpeg/jmemdosa.asm | 379 - rosapps/lib/libjpeg/jmemmac.c | 289 - rosapps/lib/libjpeg/jmemmgr.c | 1118 -- rosapps/lib/libjpeg/jmemname.c | 276 - rosapps/lib/libjpeg/jmemnobs.c | 109 - rosapps/lib/libjpeg/jmemsys.h | 198 - rosapps/lib/libjpeg/jmorecfg.h | 384 - rosapps/lib/libjpeg/jpegint.h | 392 - rosapps/lib/libjpeg/jpeglib.h | 1107 -- rosapps/lib/libjpeg/jpegtran.c | 546 - rosapps/lib/libjpeg/jquant1.c | 856 -- rosapps/lib/libjpeg/jquant2.c | 1310 -- rosapps/lib/libjpeg/jutils.c | 179 - rosapps/lib/libjpeg/jversion.h | 14 - rosapps/lib/libjpeg/libjpeg.rbuild | 59 - rosapps/lib/libjpeg/rdbmp.c | 439 - rosapps/lib/libjpeg/rdcolmap.c | 253 - rosapps/lib/libjpeg/rdgif.c | 38 - rosapps/lib/libjpeg/rdjpgcom.c | 496 - rosapps/lib/libjpeg/rdppm.c | 458 - rosapps/lib/libjpeg/rdrle.c | 387 - rosapps/lib/libjpeg/rdswitch.c | 332 - rosapps/lib/libjpeg/rdtarga.c | 500 - rosapps/lib/libjpeg/transupp.c | 1529 --- rosapps/lib/libjpeg/transupp.h | 205 - rosapps/lib/libjpeg/wrbmp.c | 442 - rosapps/lib/libjpeg/wrgif.c | 399 - rosapps/lib/libjpeg/wrjpgcom.c | 583 - rosapps/lib/libjpeg/wrppm.c | 268 - rosapps/lib/libjpeg/wrrle.c | 305 - rosapps/lib/libjpeg/wrtarga.c | 253 - rosapps/lib/libpng/docs/ANNOUNCE | 62 - rosapps/lib/libpng/docs/CHANGES | 2041 --- rosapps/lib/libpng/docs/INSTALL | 219 - rosapps/lib/libpng/docs/KNOWNBUG | 22 - rosapps/lib/libpng/docs/LICENSE | 109 - rosapps/lib/libpng/docs/README | 263 - rosapps/lib/libpng/docs/TODO | 24 - rosapps/lib/libpng/docs/Y2KINFO | 55 - rosapps/lib/libpng/docs/example.c | 814 -- rosapps/lib/libpng/docs/libpng-1.2.24.txt | 2851 ----- rosapps/lib/libpng/libpng.rbuild | 27 - rosapps/lib/libpng/png.c | 798 -- rosapps/lib/libpng/png.h | 3549 ------ rosapps/lib/libpng/pngconf.h | 1481 --- rosapps/lib/libpng/pngerror.c | 343 - rosapps/lib/libpng/pnggccrd.c | 101 - rosapps/lib/libpng/pngget.c | 901 -- rosapps/lib/libpng/pngmem.c | 608 - rosapps/lib/libpng/pngpread.c | 1586 --- rosapps/lib/libpng/pngread.c | 1473 --- rosapps/lib/libpng/pngrio.c | 167 - rosapps/lib/libpng/pngrtran.c | 4284 ------- rosapps/lib/libpng/pngrutil.c | 3164 ----- rosapps/lib/libpng/pngset.c | 1250 -- rosapps/lib/libpng/pngtest.c | 1556 --- rosapps/lib/libpng/pngtrans.c | 662 - rosapps/lib/libpng/pngvcrd.c | 1 - rosapps/lib/libpng/pngwio.c | 234 - rosapps/lib/libpng/pngwrite.c | 1516 --- rosapps/lib/libpng/pngwtran.c | 572 - rosapps/lib/libpng/pngwutil.c | 2792 ----- rosapps/lib/win32err/win32err.c | 70 - rosapps/lib/win32err/win32err.rbuild | 3 - rosapps/makefile | 20 - rosapps/readme.txt | 10 - rosapps/templates/dialog/dialog.c | 211 - rosapps/templates/dialog/dialog.rbuild | 14 - rosapps/templates/dialog/dialog.rc | 108 - rosapps/templates/dialog/memdlg.c | 158 - rosapps/templates/dialog/page1.c | 177 - rosapps/templates/dialog/page2.c | 55 - rosapps/templates/dialog/page3.c | 55 - rosapps/templates/dialog/resource.h | 14 - rosapps/templates/dialog/trace.c | 53 - rosapps/templates/dialog/trace.h | 61 - rosapps/templates/directory.rbuild | 12 - rosapps/templates/mdi/StdAfx.cpp | 8 - rosapps/templates/mdi/StdAfx.h | 33 - rosapps/templates/mdi/about.c | 69 - rosapps/templates/mdi/about.h | 38 - rosapps/templates/mdi/childwnd.c | 258 - rosapps/templates/mdi/childwnd.h | 42 - rosapps/templates/mdi/framewnd.c | 375 - rosapps/templates/mdi/framewnd.h | 42 - rosapps/templates/mdi/main.c | 259 - rosapps/templates/mdi/main.h | 80 - rosapps/templates/mdi/mdi.rbuild | 11 - rosapps/templates/mdi/mdi.rc | 272 - rosapps/templates/mdi/panelwnd.c | 112 - rosapps/templates/mdi/panelwnd.h | 42 - rosapps/templates/mdi/res/images.bmp | Bin 758 -> 0 bytes rosapps/templates/mdi/res/mdi.ico | Bin 1078 -> 0 bytes rosapps/templates/mdi/res/small.ico | Bin 318 -> 0 bytes rosapps/templates/mdi/res/toolbar.bmp | Bin 3838 -> 0 bytes rosapps/templates/mdi/resource.h | 71 - rosapps/templates/mdi/ros2win.c | 82 - rosapps/templates/mdi/ros2win.h | 47 - rosapps/templates/old_wordpad/about.c | 54 - rosapps/templates/old_wordpad/dialogs.c | 134 - rosapps/templates/old_wordpad/editwnd.c | 202 - rosapps/templates/old_wordpad/lang/bg-BG.rc | 170 - rosapps/templates/old_wordpad/lang/de-DE.rc | 169 - rosapps/templates/old_wordpad/lang/el-GR.rc | 168 - rosapps/templates/old_wordpad/lang/en-US.rc | 169 - rosapps/templates/old_wordpad/lang/fi-FI.rc | 169 - rosapps/templates/old_wordpad/lang/fr-FR.rc | 168 - rosapps/templates/old_wordpad/lang/it-IT.rc | 171 - rosapps/templates/old_wordpad/lang/nl-NL.rc | 169 - rosapps/templates/old_wordpad/lang/no-NO.rc | 170 - rosapps/templates/old_wordpad/lang/pl-PL.rc | 174 - rosapps/templates/old_wordpad/lang/ru-RU.rc | 172 - rosapps/templates/old_wordpad/lang/th-TH.rc | 189 - rosapps/templates/old_wordpad/lang/uk-UA.rc | 177 - rosapps/templates/old_wordpad/lang/zh-CN.rc | 190 - rosapps/templates/old_wordpad/mainwnd.c | 663 - rosapps/templates/old_wordpad/misc.c | 204 - .../templates/old_wordpad/old_wordpad.rbuild | 22 - rosapps/templates/old_wordpad/opensave.c | 80 - rosapps/templates/old_wordpad/precomp.h | 160 - rosapps/templates/old_wordpad/res/toolbar.bmp | Bin 5558 -> 0 bytes rosapps/templates/old_wordpad/res/wordpad.ico | Bin 29926 -> 0 bytes rosapps/templates/old_wordpad/resource.h | 102 - rosapps/templates/old_wordpad/rsrc.rc | 18 - rosapps/templates/old_wordpad/wordpad.c | 84 - rosapps/templates/old_wordpad/wordpad.rc | 24 - rosapps/templates/skel_service/ServiceMain.c | 198 - rosapps/templates/skel_service/log.c | 194 - rosapps/templates/skel_service/myservice.h | 21 - rosapps/templates/template/template.c | 284 - rostests/.gitignore | 0 rostests/apitests/apitest.c | 204 - rostests/apitests/apitest.h | 95 - rostests/apitests/dciman32api/dciman32api.c | 19 - rostests/apitests/dciman32api/dciman32api.h | 22 - .../apitests/dciman32api/dciman32api.rbuild | 12 - rostests/apitests/dciman32api/testlist.c | 32 - .../dciman32api/tests/DCICreatePrimary.c | 8 - rostests/apitests/directory.rbuild | 34 - rostests/apitests/gdi32api/Notes.txt | 7 - rostests/apitests/gdi32api/gdi.h | 63 - rostests/apitests/gdi32api/gdi32api.c | 36 - rostests/apitests/gdi32api/gdi32api.h | 26 - rostests/apitests/gdi32api/gdi32api.rbuild | 12 - rostests/apitests/gdi32api/testlist.c | 94 - .../apitests/gdi32api/tests/AddFontResource.c | 74 - .../gdi32api/tests/AddFontResourceEx.c | 36 - rostests/apitests/gdi32api/tests/BeginPath.c | 24 - .../gdi32api/tests/CreateBitmapIndirect.c | 58 - .../gdi32api/tests/CreateCompatibleDC.c | 47 - rostests/apitests/gdi32api/tests/CreateFont.c | 22 - rostests/apitests/gdi32api/tests/CreatePen.c | 56 - .../apitests/gdi32api/tests/CreateRectRgn.c | 8 - .../gdi32api/tests/EngAcquireSemaphore.c | 45 - .../gdi32api/tests/EngCreateSemaphore.c | 31 - .../gdi32api/tests/EngDeleteSemaphore.c | 51 - .../gdi32api/tests/EngReleaseSemaphore.c | 56 - .../apitests/gdi32api/tests/ExtCreatePen.c | 29 - .../gdi32api/tests/GdiConvertBitmap.c | 10 - .../apitests/gdi32api/tests/GdiConvertBrush.c | 9 - .../apitests/gdi32api/tests/GdiConvertDC.c | 10 - .../apitests/gdi32api/tests/GdiConvertFont.c | 9 - .../gdi32api/tests/GdiConvertPalette.c | 9 - .../gdi32api/tests/GdiConvertRegion.c | 12 - .../gdi32api/tests/GdiDeleteLocalDC.c | 9 - .../gdi32api/tests/GdiGetCharDimensions.c | 27 - .../gdi32api/tests/GdiGetLocalBrush.c | 11 - .../apitests/gdi32api/tests/GdiGetLocalDC.c | 11 - .../gdi32api/tests/GdiReleaseLocalDC.c | 9 - .../apitests/gdi32api/tests/GdiSetAttrs.c | 9 - rostests/apitests/gdi32api/tests/GetClipRgn.c | 31 - .../gdi32api/tests/GetCurrentObject.c | 139 - rostests/apitests/gdi32api/tests/GetDIBits.c | 89 - rostests/apitests/gdi32api/tests/GetObject.c | 444 - .../apitests/gdi32api/tests/GetStockObject.c | 41 - .../apitests/gdi32api/tests/GetTextFace.c | 68 - .../apitests/gdi32api/tests/SelectObject.c | 152 - .../apitests/gdi32api/tests/SetDCPenColor.c | 40 - rostests/apitests/gdi32api/tests/SetMapMode.c | 34 - .../apitests/gdi32api/tests/SetSysColors.c | 29 - .../gdi32api/tests/SetWorldTransform.c | 20 - rostests/apitests/testdata/ReadMe.txt | 21 - rostests/apitests/testdata/test.otf | Bin 266784 -> 0 bytes rostests/apitests/testdata/test.sfd | 6612 ---------- rostests/apitests/testdata/test.ttf | Bin 19388 -> 0 bytes rostests/apitests/user32api/testlist.c | 31 - .../user32api/tests/InitializeLpkHooks.c | 96 - .../user32api/tests/RealGetWindowClass.c | 119 - rostests/apitests/user32api/tests/ScrollDC.c | 57 - .../apitests/user32api/tests/ScrollWindowEx.c | 47 - rostests/apitests/user32api/user32api.c | 18 - rostests/apitests/user32api/user32api.h | 10 - rostests/apitests/user32api/user32api.rbuild | 12 - rostests/apitests/w32kdll/directory.rbuild | 23 - .../apitests/w32kdll/w32kdll_2k3sp2/main.c | 31 - .../w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.S | 4665 ------- .../w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.def | 674 - .../w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild | 7 - .../apitests/w32kdll/w32kdll_2ksp4/main.c | 31 - .../w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.S | 4483 ------- .../w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.def | 649 - .../w32kdll_2ksp4/w32kdll_2ksp4.rbuild | 7 - rostests/apitests/w32kdll/w32kdll_ros/main.c | 31 - .../w32kdll/w32kdll_ros/w32kdll_ros.def | 679 - .../w32kdll/w32kdll_ros/w32kdll_ros.rbuild | 7 - .../apitests/w32kdll/w32kdll_vista/main.c | 31 - .../w32kdll/w32kdll_vista/w32kdll_vista.S | 5414 -------- .../w32kdll/w32kdll_vista/w32kdll_vista.def | 781 -- .../w32kdll_vista/w32kdll_vista.rbuild | 7 - .../apitests/w32kdll/w32kdll_xpsp2/main.c | 31 - .../w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.S | 4675 ------- .../w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.def | 678 - .../w32kdll_xpsp2/w32kdll_xpsp2.rbuild | 7 - .../ntdd/NtGdiDdCreateDirectDrawObject.c | 18 - .../ntdd/NtGdiDdDeleteDirectDrawObject.c | 20 - .../ntdd/NtGdiDdQueryDirectDrawObject.c | 791 -- .../w32knapi/ntgdi/NtGdiArcInternal.c | 36 - .../apitests/w32knapi/ntgdi/NtGdiBitBlt.c | 20 - .../w32knapi/ntgdi/NtGdiCreateBitmap.c | 196 - .../ntgdi/NtGdiCreateCompatibleBitmap.c | 6 - .../apitests/w32knapi/ntgdi/NtGdiDoPalette.c | 247 - .../w32knapi/ntgdi/NtGdiEngCreatePalette.c | 20 - .../w32knapi/ntgdi/NtGdiEnumFontOpen.c | 36 - .../w32knapi/ntgdi/NtGdiGetBitmapBits.c | 62 - .../apitests/w32knapi/ntgdi/NtGdiGetDIBits.c | 131 - .../ntgdi/NtGdiGetFontResourceInfoInternalW.c | 43 - .../w32knapi/ntgdi/NtGdiGetRandomRgn.c | 80 - .../w32knapi/ntgdi/NtGdiGetStockObject.c | 137 - .../w32knapi/ntgdi/NtGdiSelectBitmap.c | 49 - .../w32knapi/ntgdi/NtGdiSelectBrush.c | 47 - .../apitests/w32knapi/ntgdi/NtGdiSelectFont.c | 47 - .../apitests/w32knapi/ntgdi/NtGdiSelectPen.c | 46 - .../w32knapi/ntgdi/NtGdiSetBitmapBits.c | 62 - .../ntgdi/NtGdiSetDIBitsToDeviceInternal.c | 52 - .../apitests/w32knapi/ntuser/NtUserCallHwnd.c | 56 - .../w32knapi/ntuser/NtUserCallHwndLock.c | 100 - .../w32knapi/ntuser/NtUserCallHwndOpt.c | 25 - .../w32knapi/ntuser/NtUserCallHwndParam.c | 34 - .../w32knapi/ntuser/NtUserCallHwndParamLock.c | 7 - .../w32knapi/ntuser/NtUserCallNoParam.c | 69 - .../w32knapi/ntuser/NtUserCallOneParam.c | 73 - .../ntuser/NtUserCountClipboardFormats.c | 15 - .../ntuser/NtUserEnumDisplaySettings.c | 99 - .../ntuser/NtUserFindExistingCursorIcon.c | 7 - .../w32knapi/ntuser/NtUserGetTitleBarInfo.c | 40 - .../w32knapi/ntuser/NtUserRedrawWindow.c | 30 - .../apitests/w32knapi/ntuser/NtUserScrollDC.c | 111 - .../ntuser/NtUserSystemParametersInfo.c | 359 - .../w32knapi/ntuser/NtUserToUnicodeEx.c | 438 - rostests/apitests/w32knapi/osver.c | 49 - rostests/apitests/w32knapi/resource.h | 2 - .../apitests/w32knapi/resource/system.ico | Bin 29926 -> 0 bytes rostests/apitests/w32knapi/testlist.c | 102 - rostests/apitests/w32knapi/w32knapi.c | 98 - rostests/apitests/w32knapi/w32knapi.h | 65 - rostests/apitests/w32knapi/w32knapi.rbuild | 19 - rostests/apitests/w32knapi/w32knapi.rc | 5 - rostests/apitests/ws2_32/helpers.c | 65 - rostests/apitests/ws2_32/testlist.c | 33 - rostests/apitests/ws2_32/tests/ioctlsocket.c | 83 - rostests/apitests/ws2_32/tests/recv.c | 69 - rostests/apitests/ws2_32/ws2_32.c | 24 - rostests/apitests/ws2_32/ws2_32.h | 36 - rostests/apitests/ws2_32/ws2_32.rbuild | 11 - rostests/copying | 340 - rostests/directory.rbuild | 25 - rostests/drivers/csqtest/SOURCES | 5 - rostests/drivers/csqtest/csqtest.c | 227 - rostests/drivers/csqtest/csqtest.rbuild | 9 - rostests/drivers/csqtest/csqtest.rc | 7 - rostests/drivers/directory.rbuild | 13 - rostests/drivers/kmtest/deviface.c | 545 - rostests/drivers/kmtest/deviface_test.c | 154 - rostests/drivers/kmtest/kmtest.c | 140 - rostests/drivers/kmtest/kmtest.h | 48 - rostests/drivers/kmtest/kmtest.rbuild | 15 - rostests/drivers/kmtest/kmtest.rc | 7 - rostests/drivers/kmtest/ntos_ex.c | 179 - rostests/drivers/kmtest/ntos_io.c | 177 - rostests/drivers/kmtest/ntos_ob.c | 519 - rostests/drivers/kmtest/ntos_pools.c | 134 - rostests/drivers/memtest/memtest.c | 110 - rostests/drivers/memtest/memtest.h | 100 - rostests/drivers/memtest/memtest.rbuild | 9 - rostests/drivers/memtest/memtest.rc | 7 - rostests/drivers/ntoskrnl/IoEaTest.cpp | 507 - rostests/dxtest/ddraw/DDraw/available_mem.cpp | 269 - rostests/dxtest/ddraw/DDraw/create.cpp | 157 - rostests/dxtest/ddraw/DDraw/display_modes.cpp | 127 - rostests/dxtest/ddraw/Surface/blt.cpp | 157 - rostests/dxtest/ddraw/Surface/caps_tests.h | 2311 ---- rostests/dxtest/ddraw/Surface/create.cpp | 71 - rostests/dxtest/ddraw/Surface/misc.cpp | 64 - .../dxtest/ddraw/Surface/private_data.cpp | 49 - rostests/dxtest/ddraw/ddraw.rbuild | 13 - rostests/dxtest/ddraw/ddraw_test.cpp | 51 - rostests/dxtest/ddraw/ddrawtest.h | 38 - rostests/dxtest/ddraw/debug.cpp | 111 - rostests/dxtest/ddraw/helper.cpp | 73 - rostests/dxtest/ddraw/testlist.cpp | 39 - rostests/dxtest/directory.rbuild | 10 - .../win32kdxtest/NtGdiDdCanCreateSurface.c | 45 - .../NtGdiDdCreateDirectDrawObject.c | 50 - .../NtGdiDdDeleteDirectDrawObject.c | 29 - .../dxtest/win32kdxtest/NtGdiDdGetScanLine.c | 40 - .../NtGdiDdQueryDirectDrawObject.c | 423 - .../NtGdiDdWaitForVerticalBlank.c | 46 - rostests/dxtest/win32kdxtest/dump.c | 1436 --- rostests/dxtest/win32kdxtest/main.c | 91 - rostests/dxtest/win32kdxtest/test.h | 61 - .../dxtest/win32kdxtest/win32kdxtest.rbuild | 15 - rostests/readme.txt | 9 - rostests/regtests_by_casper/directory.rbuild | 10 - .../regtests_by_casper/regtests/regtests.c | 106 - .../regtests_by_casper/regtests/regtests.def | 17 - .../regtests/regtests.rbuild | 7 - rostests/regtests_by_casper/shared/regtests.c | 234 - rostests/regtests_by_casper/shared/regtests.h | 384 - .../regtests_by_casper/shared/rtshared.rbuild | 5 - .../D3DParseUnknownCommand_show.rbuild | 8 - .../tests/D3DParseUnknownCommand_show/main.c | 49 - rostests/tests/DxHalTest/DxHalTest.rbuild | 7 - rostests/tests/DxHalTest/main.c | 665 - rostests/tests/DxHalTest/main.h | 267 - .../Imagelistviewer/imagelistviewer.rbuild | 10 - rostests/tests/Imagelistviewer/main.c | 145 - rostests/tests/Imagelistviewer/res.rc | 14 - rostests/tests/Imagelistviewer/resource.h | 4 - rostests/tests/README.txt | 4 - rostests/tests/accelerator/accelerator.c | 165 - rostests/tests/accelerator/accelerator.rbuild | 7 - rostests/tests/alive/alive.c | 48 - rostests/tests/alive/alive.rbuild | 7 - rostests/tests/alphablend/alphablend.c | 212 - rostests/tests/alphablend/alphablend.rbuild | 9 - rostests/tests/alphablend/alphablend.rc | 3 - rostests/tests/alphablend/lena.bmp | Bin 89322 -> 0 bytes rostests/tests/alphablend/lenaalpha.bmp | Bin 89322 -> 0 bytes rostests/tests/apc/apc.c | 94 - rostests/tests/apc/apc.rbuild | 6 - rostests/tests/apc2/apc2.c | 53 - rostests/tests/apc2/apc2.rbuild | 5 - rostests/tests/args/args.c | 39 - rostests/tests/args/args.rbuild | 5 - rostests/tests/atomtest/atomtest.c | 116 - rostests/tests/atomtest/atomtest.rbuild | 6 - rostests/tests/bench/bench-syscall.c | 8 - rostests/tests/bench/bench-thread.c | 81 - rostests/tests/bench/bench.rbuild | 6 - rostests/tests/bitblt/bitblt.c | 139 - rostests/tests/bitblt/bitblt.rbuild | 9 - rostests/tests/bitblt/bitblt.rc | 2 - rostests/tests/bitblt/lena.bmp | Bin 89322 -> 0 bytes rostests/tests/button/button.rbuild | 7 - rostests/tests/button/buttontst.c | 107 - rostests/tests/button2/button2.rbuild | 7 - rostests/tests/button2/buttontst2.c | 219 - rostests/tests/capclock/capclock.c | 70 - rostests/tests/capclock/capclock.ico | Bin 766 -> 0 bytes rostests/tests/capclock/capclock.rbuild | 9 - rostests/tests/capclock/capclock.rc | 20 - rostests/tests/carets/caret.bmp | Bin 106 -> 0 bytes rostests/tests/carets/carets.c | 152 - rostests/tests/carets/carets.rbuild | 10 - rostests/tests/carets/carets.rc | 3 - rostests/tests/carets/resource.h | 1 - rostests/tests/combotst/combotst.c | 687 - rostests/tests/combotst/combotst.rbuild | 8 - rostests/tests/combotst/utils.c | 33 - rostests/tests/combotst/utils.h | 9 - rostests/tests/consume/consume.c | 31 - rostests/tests/consume/consume.rbuild | 7 - rostests/tests/copymove/copymove.c | 303 - rostests/tests/copymove/copymove.rbuild | 6 - rostests/tests/count/count.c | 15 - rostests/tests/count/count.rbuild | 6 - rostests/tests/create-links/create-links.c | 97 - .../tests/create-links/create-links.rbuild | 10 - rostests/tests/dibtest/dibtest.c | 196 - rostests/tests/dibtest/dibtest.rbuild | 7 - rostests/tests/dirdlg/dirdlg.c | 115 - rostests/tests/dirdlg/dirdlg.rbuild | 9 - rostests/tests/dirdlg/dirdlg.rc | 13 - rostests/tests/dirdlg/resource.h | 6 - rostests/tests/directory.rbuild | 286 - rostests/tests/diskspeed/diskspeed.c | 169 - rostests/tests/diskspeed/diskspeed.rbuild | 6 - rostests/tests/dnsapi/dnsapi.c | 33 - rostests/tests/dnsapi/dnsapi.rbuild | 7 - rostests/tests/dnsquery/dnsquery.c | 28 - rostests/tests/dnsquery/dnsquery.rbuild | 7 - rostests/tests/edit/edit.rbuild | 8 - rostests/tests/edit/edittest.c | 649 - rostests/tests/edit/utils.c | 33 - rostests/tests/edit/utils.h | 9 - rostests/tests/enhmetafile/enhmetafile.c | 123 - rostests/tests/enhmetafile/enhmetafile.rbuild | 7 - rostests/tests/enhmetafile/test.emf | Bin 120908 -> 0 bytes rostests/tests/enumfonts/enumfonts.cpp | 271 - rostests/tests/enumfonts/enumfonts.rbuild | 7 - rostests/tests/enumwnd/enumwnd.c | 187 - rostests/tests/enumwnd/enumwnd.dsp | 90 - rostests/tests/enumwnd/enumwnd.rbuild | 7 - rostests/tests/enumws/enumws.c | 35 - rostests/tests/enumws/enumws.rbuild | 7 - rostests/tests/event/event.c | 33 - rostests/tests/event/event.rbuild | 6 - rostests/tests/fiber/fiber.c | 446 - rostests/tests/fiber/fiber.rbuild | 6 - rostests/tests/gethostbyname/gethostbyname.c | 21 - .../tests/gethostbyname/gethostbyname.rbuild | 6 - rostests/tests/global_mem/global_mem.c | 1062 -- rostests/tests/global_mem/global_mem.rbuild | 6 - rostests/tests/gradient/gradient.c | 184 - rostests/tests/gradient/gradient.rbuild | 7 - rostests/tests/guithreadinfo/guithreadinfo.c | 132 - .../tests/guithreadinfo/guithreadinfo.rbuild | 6 - rostests/tests/hello/hello.c | 8 - rostests/tests/hello/hello.rbuild | 7 - rostests/tests/hivetest/hivetest.c | 1031 -- rostests/tests/hivetest/hivetest.rbuild | 8 - rostests/tests/icontest/icon.ico | Bin 766 -> 0 bytes rostests/tests/icontest/icontest.c | 208 - rostests/tests/icontest/icontest.rbuild | 10 - rostests/tests/icontest/icontest.rc | 4 - rostests/tests/icontest/resource.h | 1 - rostests/tests/iptest/iptest.cpp | 476 - rostests/tests/iptest/iptest.rbuild | 6 - rostests/tests/isotest/isotest.c | 234 - rostests/tests/isotest/isotest.rbuild | 6 - rostests/tests/lantst/lantest.cpp | 218 - rostests/tests/lantst/lantest.rbuild | 6 - rostests/tests/lineclip/lineclip.c | 166 - rostests/tests/lineclip/lineclip.rbuild | 7 - rostests/tests/linetest/linetest.c | 184 - rostests/tests/linetest/linetest.rbuild | 8 - rostests/tests/lpctst/conport.c | 205 - rostests/tests/lpctst/creport.c | 192 - rostests/tests/lpctst/dumpinfo.c | 239 - rostests/tests/lpctst/dumpinfo.h | 8 - rostests/tests/lpctst/lpcclt.c | 92 - rostests/tests/lpctst/lpcsrv.c | 139 - rostests/tests/lpctst/lpctest.h | 5 - rostests/tests/lpctst/lpctst.rbuild | 6 - .../tests/map_dup_inherit/map_dup_inherit.c | 110 - .../map_dup_inherit/map_dup_inherit.rbuild | 6 - rostests/tests/mdi/mdi.c | 523 - rostests/tests/mdi/mdi.rbuild | 11 - rostests/tests/mdi/mdi.rc | 27 - rostests/tests/mdi/resource.h | 27 - rostests/tests/miditest/miditest.c | 52 - rostests/tests/miditest/miditest.rbuild | 8 - rostests/tests/miditest/miditest.rc | 26 - rostests/tests/mktime/mktime.c | 29 - rostests/tests/mktime/mktime.rbuild | 6 - rostests/tests/moztest/moztest.c | 251 - rostests/tests/moztest/moztest.rbuild | 7 - rostests/tests/mstest/msclient.c | 46 - rostests/tests/mstest/msserver.c | 40 - rostests/tests/mstest/mstest.rbuild | 6 - rostests/tests/multithrdwin/multithrdwin.c | 238 - .../tests/multithrdwin/multithrdwin.rbuild | 8 - rostests/tests/multiwin/multiwin.c | 147 - rostests/tests/multiwin/multiwin.rbuild | 7 - rostests/tests/mutex/mutex.c | 121 - rostests/tests/mutex/mutex.rbuild | 6 - .../tests/nameserverlist/nameserverlist.c | 32 - .../nameserverlist/nameserverlist.rbuild | 6 - rostests/tests/noexecute/noexecute.c | 65 - rostests/tests/noexecute/noexecute.rbuild | 7 - rostests/tests/nptest/npclient.c | 100 - rostests/tests/nptest/npserver.c | 120 - rostests/tests/nptest/nptest.rbuild | 6 - rostests/tests/oskittcp/cmd_oskit.py | 10 - rostests/tests/oskittcp/oskittcp.rbuild | 6 - rostests/tests/oskittcp/tcptest.cpp | 380 - rostests/tests/oskittcp/tcptest.dsp | 434 - rostests/tests/oskittcp/tcptest.dsw | 29 - rostests/tests/p_dup_handle/p_dup_handle.c | 69 - .../tests/p_dup_handle/p_dup_handle.rbuild | 6 - rostests/tests/palbitblt/pal.c | 201 - rostests/tests/palbitblt/palbitblt.rbuild | 7 - rostests/tests/patblt/Penguin.bmp | Bin 106226 -> 0 bytes rostests/tests/patblt/patblt.cpp | 270 - rostests/tests/patblt/patblt.rbuild | 7 - rostests/tests/polytest/polytest.cpp | 874 -- rostests/tests/polytest/polytest.dsp | 88 - rostests/tests/polytest/polytest.dsw | 29 - rostests/tests/polytest/polytest.rbuild | 6 - rostests/tests/popupmenu/popupmenu.c | 102 - rostests/tests/popupmenu/popupmenu.rbuild | 9 - rostests/tests/popupmenu/popupmenu.rc | 46 - rostests/tests/popupmenu/resource.h | 2 - rostests/tests/primitives/mk_font.cpp | 69 - rostests/tests/primitives/mk_font.h | 39 - rostests/tests/primitives/primitives.cpp | 351 - rostests/tests/primitives/primitives.rbuild | 8 - rostests/tests/pteb/pteb.c | 23 - rostests/tests/pteb/pteb.rbuild | 6 - rostests/tests/readconsole/main.c | 33 - rostests/tests/readconsole/readconsole.rbuild | 7 - rostests/tests/regdump/main.c | 45 - rostests/tests/regdump/regcmds.c | 224 - rostests/tests/regdump/regdump.c | 167 - rostests/tests/regdump/regdump.h | 44 - rostests/tests/regdump/regdump.rbuild | 10 - rostests/tests/regdump/regproc.c | 1491 --- rostests/tests/regdump/regproc.h | 110 - rostests/tests/regqueryvalue/regqueryvalue.c | 69 - .../tests/regqueryvalue/regqueryvalue.rbuild | 8 - rostests/tests/regtest/regtest.c | 995 -- rostests/tests/regtest/regtest.rbuild | 6 - rostests/tests/sectest/sectest.c | 75 - rostests/tests/sectest/sectest.rbuild | 6 - rostests/tests/sertest/sertest.c | 133 - rostests/tests/sertest/sertest.rbuild | 6 - rostests/tests/shaptest/shaptest.c | 252 - rostests/tests/shaptest/shaptest.rbuild | 7 - rostests/tests/shm/shm.rbuild | 6 - rostests/tests/shm/shmclt.c | 61 - rostests/tests/shm/shmsrv.c | 53 - rostests/tests/statst/statst.c | 165 - rostests/tests/statst/statst.rbuild | 7 - rostests/tests/statst2/statst2.c | 180 - rostests/tests/statst2/statst2.rbuild | 7 - rostests/tests/stretchblt/lena.bmp | Bin 89322 -> 0 bytes rostests/tests/stretchblt/stretchblt.cpp | 380 - rostests/tests/stretchblt/stretchblt.rbuild | 7 - rostests/tests/subclass/subclass.c | 173 - rostests/tests/subclass/subclass.rbuild | 7 - rostests/tests/suspend/suspend.c | 73 - rostests/tests/suspend/suspend.rbuild | 6 - rostests/tests/tcpsvr/tcpsvr.c | 175 - rostests/tests/tcpsvr/tcpsvr.rbuild | 6 - rostests/tests/terminate/terminate.c | 75 - rostests/tests/terminate/terminate.rbuild | 6 - rostests/tests/thread/thread.c | 88 - rostests/tests/thread/thread.rbuild | 6 - rostests/tests/thread_msg/thread_msg.c | 97 - rostests/tests/thread_msg/thread_msg.rbuild | 7 - rostests/tests/threadwait/threadwait.c | 35 - rostests/tests/threadwait/threadwait.rbuild | 6 - rostests/tests/tmrqueue/tmrqueue.c | 365 - rostests/tests/tmrqueue/tmrqueue.rbuild | 6 - rostests/tests/tokentest/tokentest.c | 524 - rostests/tests/tokentest/tokentest.rbuild | 6 - rostests/tests/txtscale/mk_font.cpp | 69 - rostests/tests/txtscale/mk_font.h | 39 - rostests/tests/txtscale/txtscale.cpp | 266 - rostests/tests/txtscale/txtscale.rbuild | 9 - rostests/tests/vmtest/vmtest.c | 55 - rostests/tests/vmtest/vmtest.rbuild | 6 - rostests/tests/wclickat/wclickat.c | 686 - rostests/tests/wclickat/wclickat.rbuild | 8 - .../tests/wcstombs-tests/wcstombs-tests.c | 336 - .../wcstombs-tests/wcstombs-tests.rbuild | 4 - rostests/tests/winhello/winhello.c | 707 -- rostests/tests/winhello/winhello.rbuild | 7 - rostests/tests/wm_erasebkgnd/BACKBITMAP.BMP | Bin 26566 -> 0 bytes .../tests/wm_erasebkgnd/wm_erasebkgnd.cpp | 179 - .../tests/wm_erasebkgnd/wm_erasebkgnd.rbuild | 7 - rostests/tests/wm_paint/wm_paint.c | 131 - rostests/tests/wm_paint/wm_paint.rbuild | 7 - rostests/tests/wpickclick/wpickclick.c | 219 - rostests/tests/wpickclick/wpickclick.rbuild | 6 - rostests/tests/zwcontinue/i386/zwcontinue.asm | 48 - rostests/tests/zwcontinue/zwcontinue.c | 185 - rostests/tests/zwcontinue/zwcontinue.rbuild | 6 - .../Application/Application.vcproj | 214 - .../DriverLoading/Application/DriverTester.h | 72 - .../win32/DriverLoading/Application/main.c | 157 - .../win32/DriverLoading/Application/umode.c | 162 - .../win32/DriverLoading/Application/undoc.c | 276 - .../win32/DriverLoading/Driver/Driver.vcproj | 213 - rostests/win32/DriverLoading/Driver/driver.c | 18 - rostests/win32/DriverLoading/DriverTester.sln | 26 - rostests/win32/cmd/cmd_test.rbuild | 18 - .../cmd/script_testsuite/lib/testlib.cmd | 69 - rostests/win32/cmd/script_testsuite/run.cmd | 43 - .../win32/cmd/script_testsuite/tests/at.cmd | 20 - .../script_testsuite/tests/environment.cmd | 47 - .../win32/cmd/script_testsuite/tests/if.cmd | 26 - .../cmd/script_testsuite/tests/redirect.cmd | 28 - .../win32/cmd/script_testsuite/tests/set.cmd | 104 - rostests/win32/cmd/setup.c | 23 - rostests/win32/cmd/stubs.rbuild | 84 - rostests/win32/kernel32/directory.rbuild | 10 - rostests/win32/kernel32/queuetest/queuetest.c | 41 - .../win32/kernel32/queuetest/queuetest.rbuild | 5 - rostests/win32/kernel32/tests/CreateFile.c | 129 - rostests/win32/kernel32/tests/kernel32.rbuild | 24 - rostests/win32/kernel32/tests/setup.c | 12 - rostests/win32/kernel32/tests/stubs.rbuild | 257 - rostests/win32/kmtloader/kmtloader.c | 90 - rostests/win32/kmtloader/kmtloader.rbuild | 6 - rostests/win32/loadlib/loadlib.c | 223 - rostests/win32/loadlib/loadlib.h | 45 - rostests/win32/msvcrt/fileio/_tfileio.c | 421 - rostests/win32/msvcrt/fileio/fileio.c | 31 - rostests/win32/msvcrt/fileio/main.c | 124 - rostests/win32/msvcrt/fileio/main.h | 42 - rostests/win32/msvcrt/fileio/wfileio.c | 31 - .../win32/rpcrt4/context_handles/client.c | 457 - rostests/win32/rpcrt4/context_handles/ctx.acf | 8 - rostests/win32/rpcrt4/context_handles/ctx.h | 80 - rostests/win32/rpcrt4/context_handles/ctx.idl | 19 - rostests/win32/rpcrt4/context_handles/ctx_c.c | 335 - rostests/win32/rpcrt4/context_handles/ctx_s.c | 349 - .../win32/rpcrt4/context_handles/server.c | 78 - rostests/win32/smss/movefile/movefile.cpp | 235 - rostests/win32/smss/movefile/movefile.rbuild | 9 - rostests/win32/smss/movefile/movefile.rc | 8 - rostests/win32/smss/smss.rbuild | 7 - rostests/win32/testsets.rbuild | 19 - rostests/win32/user32/drawcaption/capicon.c | 145 - rostests/win32/user32/drawcaption/capicon.rc | 13 - rostests/win32/user32/drawcaption/drawcap.c | 289 - rostests/win32/user32/drawcaption/drawcap.rc | 11 - .../user32/drawcaption/drawcaption.rbuild | 27 - .../win32/user32/drawcaption/res/icon1big.ico | Bin 4286 -> 0 bytes .../win32/user32/drawcaption/res/icon1sm.ico | Bin 318 -> 0 bytes .../win32/user32/drawcaption/res/icon2big.ico | Bin 17542 -> 0 bytes .../win32/user32/drawcaption/res/icon2sm.ico | Bin 318 -> 0 bytes rostests/win32/user32/drawcaption/resource.h | 10 - rostests/win32/user32/kbdlayout/kbdlayout.c | 387 - rostests/win32/user32/kbdlayout/kbdlayout.dsp | 98 - .../win32/user32/kbdlayout/kbdlayout.rbuild | 10 - rostests/win32/user32/kbdlayout/kbdlayout.rc | 142 - rostests/win32/user32/kbdlayout/resource.h | 46 - rostests/win32/user32/sysicon/sysicon.c | 163 - rostests/win32/user32/sysicon/sysicon.rbuild | 10 - rostests/win32/user32/user32.rbuild | 13 - rostests/win32/win32k/setup.c | 6 - rostests/win32/win32k/stubs.rbuild | 171 - rostests/win32/win32k/tests/eng-mem-1.c | 48 - rostests/win32/win32k/win32k.rbuild | 21 - rostests/winetests/GUI/GUI.rbuild | 16 - rostests/winetests/GUI/WinetestsGUI.rc | 11 - rostests/winetests/GUI/browsewnd.c | 410 - rostests/winetests/GUI/lang/en-US.rc | 47 - rostests/winetests/GUI/mainwnd.c | 295 - rostests/winetests/GUI/misc.c | 311 - rostests/winetests/GUI/optionswnd.c | 100 - rostests/winetests/GUI/precomp.h | 65 - rostests/winetests/GUI/res/.gitignore | 0 rostests/winetests/GUI/res/main.ico | Bin 63600 -> 0 bytes rostests/winetests/GUI/res/tests.ico | Bin 60146 -> 0 bytes rostests/winetests/GUI/resource.h | 28 - rostests/winetests/GUI/rsrc.rc | 26 - rostests/winetests/advapi32/advapi32.rbuild | 24 - rostests/winetests/advapi32/cred.c | 317 - rostests/winetests/advapi32/crypt.c | 930 -- rostests/winetests/advapi32/crypt_lmhash.c | 649 - rostests/winetests/advapi32/crypt_md4.c | 178 - rostests/winetests/advapi32/crypt_md5.c | 110 - rostests/winetests/advapi32/crypt_sha.c | 71 - rostests/winetests/advapi32/lsa.c | 190 - rostests/winetests/advapi32/registry.c | 1420 --- rostests/winetests/advapi32/security.c | 2585 ---- rostests/winetests/advapi32/service.c | 2089 --- rostests/winetests/advapi32/testlist.c | 33 - rostests/winetests/advpack/advpack.c | 662 - rostests/winetests/advpack/advpack.rbuild | 16 - rostests/winetests/advpack/files.c | 549 - rostests/winetests/advpack/install.c | 299 - rostests/winetests/advpack/testlist.c | 19 - rostests/winetests/browseui/autocomplete.c | 324 - rostests/winetests/browseui/browseui.rbuild | 15 - rostests/winetests/browseui/testlist.c | 15 - rostests/winetests/cabinet/cabinet.rbuild | 14 - rostests/winetests/cabinet/extract.c | 691 - rostests/winetests/cabinet/fdi.c | 650 - rostests/winetests/cabinet/testlist.c | 17 - rostests/winetests/comcat/comcat.c | 129 - rostests/winetests/comcat/comcat.rbuild | 15 - rostests/winetests/comcat/testlist.c | 15 - rostests/winetests/comctl32/bmp128x15.bmp | Bin 1078 -> 0 bytes rostests/winetests/comctl32/bmp80x15.bmp | Bin 718 -> 0 bytes rostests/winetests/comctl32/comboex.c | 349 - rostests/winetests/comctl32/comctl32.rbuild | 38 - rostests/winetests/comctl32/comctl32_ros.diff | 37 - rostests/winetests/comctl32/datetime.c | 596 - rostests/winetests/comctl32/dpa.c | 457 - rostests/winetests/comctl32/header.c | 1553 --- rostests/winetests/comctl32/imagelist.c | 993 -- rostests/winetests/comctl32/listview.c | 1247 -- rostests/winetests/comctl32/misc.c | 203 - rostests/winetests/comctl32/monthcal.c | 1171 -- rostests/winetests/comctl32/mru.c | 428 - rostests/winetests/comctl32/msg.c | 251 - rostests/winetests/comctl32/msg.h | 73 - rostests/winetests/comctl32/progress.c | 230 - rostests/winetests/comctl32/propsheet.c | 139 - rostests/winetests/comctl32/rebar.c | 885 -- rostests/winetests/comctl32/resources.h | 34 - rostests/winetests/comctl32/rsrc.rc | 47 - rostests/winetests/comctl32/status.c | 196 - rostests/winetests/comctl32/subclass.c | 301 - rostests/winetests/comctl32/tab.c | 996 -- rostests/winetests/comctl32/testlist.c | 55 - rostests/winetests/comctl32/toolbar.c | 1167 -- rostests/winetests/comctl32/tooltips.c | 241 - rostests/winetests/comctl32/trackbar.c | 1012 -- rostests/winetests/comctl32/treeview.c | 714 -- rostests/winetests/comctl32/updown.c | 592 - rostests/winetests/comdlg32/comdlg32.rbuild | 15 - rostests/winetests/comdlg32/filedlg.c | 139 - rostests/winetests/comdlg32/printdlg.c | 310 - rostests/winetests/comdlg32/testlist.c | 17 - rostests/winetests/directory.rbuild | 141 - rostests/winetests/gdi32/bitmap.c | 2148 ---- rostests/winetests/gdi32/brush.c | 80 - rostests/winetests/gdi32/clipping.c | 261 - rostests/winetests/gdi32/dc.c | 262 - rostests/winetests/gdi32/font.c | 1887 --- rostests/winetests/gdi32/gdi32.rbuild | 27 - rostests/winetests/gdi32/gdiobj.c | 274 - rostests/winetests/gdi32/generated.c | 4370 ------- rostests/winetests/gdi32/icm.c | 171 - rostests/winetests/gdi32/mapping.c | 162 - rostests/winetests/gdi32/metafile.c | 2113 ---- rostests/winetests/gdi32/palette.c | 152 - rostests/winetests/gdi32/path.c | 514 - rostests/winetests/gdi32/pen.c | 552 - rostests/winetests/gdi32/testlist.c | 39 - rostests/winetests/gdiplus/brush.c | 74 - rostests/winetests/gdiplus/font.c | 256 - rostests/winetests/gdiplus/gdiplus.rbuild | 24 - rostests/winetests/gdiplus/graphics.c | 476 - rostests/winetests/gdiplus/graphicspath.c | 724 -- rostests/winetests/gdiplus/image.c | 534 - rostests/winetests/gdiplus/matrix.c | 108 - rostests/winetests/gdiplus/pathiterator.c | 109 - rostests/winetests/gdiplus/pen.c | 249 - rostests/winetests/gdiplus/region.c | 222 - rostests/winetests/gdiplus/stringformat.c | 67 - rostests/winetests/gdiplus/testlist.c | 33 - rostests/winetests/hlink/hlink.c | 920 -- rostests/winetests/hlink/hlink.rbuild | 15 - rostests/winetests/hlink/testlist.c | 15 - rostests/winetests/icmp/icmp.c | 51 - rostests/winetests/icmp/icmp.rbuild | 13 - rostests/winetests/icmp/testlist.c | 15 - rostests/winetests/imm32/imm32.c | 227 - rostests/winetests/imm32/imm32.rbuild | 14 - rostests/winetests/imm32/testlist.c | 15 - rostests/winetests/kernel32/actctx.c | 1170 -- rostests/winetests/kernel32/alloc.c | 405 - rostests/winetests/kernel32/atom.c | 626 - rostests/winetests/kernel32/change.c | 881 -- rostests/winetests/kernel32/codepage.c | 219 - rostests/winetests/kernel32/comm.c | 1729 --- rostests/winetests/kernel32/console.c | 884 -- rostests/winetests/kernel32/debugger.c | 407 - rostests/winetests/kernel32/directory.c | 482 - rostests/winetests/kernel32/drive.c | 209 - rostests/winetests/kernel32/environ.c | 499 - rostests/winetests/kernel32/file.c | 2212 ---- rostests/winetests/kernel32/format_msg.c | 250 - rostests/winetests/kernel32/heap.c | 320 - rostests/winetests/kernel32/interlck.c | 130 - rostests/winetests/kernel32/kernel32.rbuild | 45 - rostests/winetests/kernel32/loader.c | 482 - rostests/winetests/kernel32/locale.c | 2325 ---- rostests/winetests/kernel32/mailslot.c | 311 - rostests/winetests/kernel32/module.c | 241 - rostests/winetests/kernel32/path.c | 1275 -- rostests/winetests/kernel32/pipe.c | 1340 -- rostests/winetests/kernel32/process.c | 1427 --- rostests/winetests/kernel32/profile.c | 275 - rostests/winetests/kernel32/resource.c | 323 - rostests/winetests/kernel32/resource.rc | 26 - rostests/winetests/kernel32/sync.c | 401 - rostests/winetests/kernel32/testlist.c | 82 - rostests/winetests/kernel32/thread.c | 1015 -- rostests/winetests/kernel32/time.c | 614 - rostests/winetests/kernel32/timer.c | 71 - rostests/winetests/kernel32/toolhelp.c | 346 - rostests/winetests/kernel32/version.c | 268 - rostests/winetests/kernel32/virtual.c | 671 - rostests/winetests/kernel32/volume.c | 150 - rostests/winetests/lz32/lz32.rbuild | 13 - rostests/winetests/lz32/lzexpand_main.c | 884 -- rostests/winetests/lz32/testlist.c | 15 - rostests/winetests/mapi32/imalloc.c | 114 - rostests/winetests/mapi32/mapi32.rbuild | 15 - rostests/winetests/mapi32/prop.c | 1388 -- rostests/winetests/mapi32/testlist.c | 19 - rostests/winetests/mapi32/util.c | 203 - rostests/winetests/mlang/mlang.c | 856 -- rostests/winetests/mlang/mlang.rbuild | 16 - rostests/winetests/mlang/testlist.c | 15 - rostests/winetests/msacm32/msacm.c | 498 - rostests/winetests/msacm32/msacm32.rbuild | 12 - rostests/winetests/msacm32/testlist.c | 15 - rostests/winetests/mshtml/dom.c | 2593 ---- rostests/winetests/mshtml/htmldoc.c | 4110 ------ rostests/winetests/mshtml/misc.c | 117 - rostests/winetests/mshtml/mshtml.rbuild | 23 - rostests/winetests/mshtml/protocol.c | 781 -- rostests/winetests/mshtml/script.c | 957 -- rostests/winetests/mshtml/testlist.c | 23 - rostests/winetests/msi/automation.c | 2494 ---- rostests/winetests/msi/db.c | 6155 --------- rostests/winetests/msi/format.c | 2465 ---- rostests/winetests/msi/install.c | 4613 ------- rostests/winetests/msi/msi.c | 6930 ---------- rostests/winetests/msi/msi.rbuild | 29 - rostests/winetests/msi/package.c | 5532 -------- rostests/winetests/msi/record.c | 385 - rostests/winetests/msi/source.c | 3329 ----- rostests/winetests/msi/suminfo.c | 422 - rostests/winetests/msi/testlist.c | 31 - rostests/winetests/mstask/mstask.rbuild | 15 - rostests/winetests/mstask/task.c | 520 - rostests/winetests/mstask/task_scheduler.c | 111 - rostests/winetests/mstask/task_trigger.c | 380 - rostests/winetests/mstask/testlist.c | 19 - rostests/winetests/msvcrt/Makefile.in | 21 - rostests/winetests/msvcrt/cpp.c | 1020 -- rostests/winetests/msvcrt/data.c | 79 - rostests/winetests/msvcrt/dir.c | 110 - rostests/winetests/msvcrt/environ.c | 57 - rostests/winetests/msvcrt/file.c | 1076 -- rostests/winetests/msvcrt/headers.c | 493 - rostests/winetests/msvcrt/heap.c | 440 - rostests/winetests/msvcrt/msvcrt.rbuild | 23 - rostests/winetests/msvcrt/msvcrt_test.dsp | 107 - rostests/winetests/msvcrt/printf.c | 654 - rostests/winetests/msvcrt/scanf.c | 176 - rostests/winetests/msvcrt/string.c | 429 - rostests/winetests/msvcrt/testlist.c | 35 - rostests/winetests/msvcrt/time.c | 259 - rostests/winetests/netapi32/access.c | 344 - rostests/winetests/netapi32/apibuf.c | 104 - rostests/winetests/netapi32/ds.c | 93 - rostests/winetests/netapi32/netapi32.rbuild | 16 - rostests/winetests/netapi32/testlist.c | 21 - rostests/winetests/netapi32/wksta.c | 207 - rostests/winetests/ntdll/atom.c | 479 - rostests/winetests/ntdll/change.c | 338 - rostests/winetests/ntdll/env.c | 292 - rostests/winetests/ntdll/error.c | 945 -- rostests/winetests/ntdll/exception.c | 910 -- rostests/winetests/ntdll/file.c | 627 - rostests/winetests/ntdll/generated.c | 2391 ---- rostests/winetests/ntdll/info.c | 933 -- rostests/winetests/ntdll/large_int.c | 436 - rostests/winetests/ntdll/ntdll.rbuild | 28 - rostests/winetests/ntdll/ntdll_test.h | 35 - rostests/winetests/ntdll/om.c | 577 - rostests/winetests/ntdll/path.c | 315 - rostests/winetests/ntdll/port.c | 312 - rostests/winetests/ntdll/reg.c | 602 - rostests/winetests/ntdll/rtl.c | 959 -- rostests/winetests/ntdll/rtlbitmap.c | 644 - rostests/winetests/ntdll/rtlstr.c | 1804 --- rostests/winetests/ntdll/string.c | 1098 -- rostests/winetests/ntdll/testlist.c | 49 - rostests/winetests/ntdll/time.c | 109 - rostests/winetests/odbccp32/misc.c | 132 - rostests/winetests/odbccp32/odbccp32.rbuild | 13 - rostests/winetests/odbccp32/testlist.c | 15 - rostests/winetests/ole32/clipboard.c | 491 - rostests/winetests/ole32/compobj.c | 1053 -- rostests/winetests/ole32/dragdrop.c | 147 - rostests/winetests/ole32/errorinfo.c | 111 - rostests/winetests/ole32/hglobalstream.c | 318 - rostests/winetests/ole32/marshal.c | 3061 ----- rostests/winetests/ole32/moniker.c | 1848 --- rostests/winetests/ole32/ole2.c | 1554 --- rostests/winetests/ole32/ole32.rbuild | 29 - rostests/winetests/ole32/propvariant.c | 242 - rostests/winetests/ole32/stg_prop.c | 535 - rostests/winetests/ole32/storage32.c | 1226 -- rostests/winetests/ole32/testlist.c | 37 - rostests/winetests/ole32/usrmarshal.c | 494 - rostests/winetests/oleaut32/oleaut32.rbuild | 29 - rostests/winetests/oleaut32/olefont.c | 828 -- rostests/winetests/oleaut32/olepicture.c | 799 -- rostests/winetests/oleaut32/safearray.c | 1712 --- rostests/winetests/oleaut32/test_tlb.idl | 39 - rostests/winetests/oleaut32/testlist.c | 31 - rostests/winetests/oleaut32/tmarshal.c | 1178 -- rostests/winetests/oleaut32/tmarshal.idl | 286 - rostests/winetests/oleaut32/tmarshal.rc | 30 - .../winetests/oleaut32/tmarshal_dispids.h | 36 - rostests/winetests/oleaut32/typelib.c | 1285 -- rostests/winetests/oleaut32/usrmarshal.c | 1282 -- rostests/winetests/oleaut32/varformat.c | 401 - rostests/winetests/oleaut32/vartest.c | 8442 ------------- rostests/winetests/oleaut32/vartype.c | 6074 --------- rostests/winetests/powrprof/powrprof.rbuild | 12 - rostests/winetests/powrprof/pwrprof.c | 1095 -- rostests/winetests/powrprof/testlist.c | 27 - rostests/winetests/psapi/psapi.rbuild | 13 - rostests/winetests/psapi/psapi_main.c | 325 - rostests/winetests/psapi/testlist.c | 15 - rostests/winetests/riched20/editor.c | 5441 -------- rostests/winetests/riched20/riched20.rbuild | 17 - rostests/winetests/riched20/richole.c | 116 - rostests/winetests/riched20/testlist.c | 13 - rostests/winetests/riched32/editor.c | 865 -- rostests/winetests/riched32/riched32.rbuild | 14 - rostests/winetests/riched32/testlist.c | 13 - rostests/winetests/rpcrt4/cstub.c | 948 -- rostests/winetests/rpcrt4/generated.c | 723 -- rostests/winetests/rpcrt4/ndr_marshall.c | 2058 --- rostests/winetests/rpcrt4/rpc.c | 780 -- rostests/winetests/rpcrt4/rpc_async.c | 91 - rostests/winetests/rpcrt4/rpcrt4.rbuild | 31 - rostests/winetests/rpcrt4/server.c | 1370 -- rostests/winetests/rpcrt4/server.idl | 343 - rostests/winetests/rpcrt4/server_defines.h | 33 - rostests/winetests/rpcrt4/testlist.c | 25 - rostests/winetests/rsabase/rsabase.c | 84 - rostests/winetests/rsabase/rsabase.rbuild | 11 - rostests/winetests/rsabase/testlist.c | 15 - rostests/winetests/rsaenh/rsaenh.c | 2011 --- rostests/winetests/rsaenh/rsaenh.rbuild | 13 - rostests/winetests/rsaenh/testlist.c | 15 - rostests/winetests/schannel/main.c | 193 - rostests/winetests/schannel/schannel.rbuild | 12 - rostests/winetests/schannel/testlist.c | 15 - rostests/winetests/setupapi/devclass.c | 346 - rostests/winetests/setupapi/devinst.c | 1096 -- rostests/winetests/setupapi/install.c | 396 - rostests/winetests/setupapi/misc.c | 595 - rostests/winetests/setupapi/parser.c | 664 - rostests/winetests/setupapi/query.c | 401 - rostests/winetests/setupapi/setupapi.rbuild | 21 - rostests/winetests/setupapi/stringtable.c | 190 - rostests/winetests/setupapi/testlist.c | 27 - rostests/winetests/shell32/generated.c | 1389 -- rostests/winetests/shell32/shell32.rbuild | 28 - rostests/winetests/shell32/shell32_test.h | 37 - rostests/winetests/shell32/shelllink.c | 711 -- rostests/winetests/shell32/shellpath.c | 912 -- rostests/winetests/shell32/shfldr_netplaces.c | 63 - rostests/winetests/shell32/shlexec.c | 1599 --- rostests/winetests/shell32/shlfileop.c | 1452 --- rostests/winetests/shell32/shlfolder.c | 1501 --- rostests/winetests/shell32/string.c | 113 - rostests/winetests/shell32/systray.c | 174 - rostests/winetests/shell32/testlist.c | 31 - rostests/winetests/shlwapi/clist.c | 637 - rostests/winetests/shlwapi/clsid.c | 191 - rostests/winetests/shlwapi/generated.c | 180 - rostests/winetests/shlwapi/istream.c | 578 - rostests/winetests/shlwapi/ordinal.c | 502 - rostests/winetests/shlwapi/path.c | 1312 -- rostests/winetests/shlwapi/shlwapi.rbuild | 25 - rostests/winetests/shlwapi/shreg.c | 394 - rostests/winetests/shlwapi/string.c | 962 -- rostests/winetests/shlwapi/testlist.c | 31 - rostests/winetests/shlwapi/url.c | 850 -- rostests/winetests/urlmon/generated.c | 349 - rostests/winetests/urlmon/misc.c | 1518 --- rostests/winetests/urlmon/protocol.c | 1970 --- rostests/winetests/urlmon/stream.c | 374 - rostests/winetests/urlmon/testlist.c | 13 - rostests/winetests/urlmon/url.c | 2670 ---- rostests/winetests/urlmon/urlmon.rbuild | 21 - rostests/winetests/user32/broadcast.c | 353 - rostests/winetests/user32/class.c | 847 -- rostests/winetests/user32/clipboard.c | 201 - rostests/winetests/user32/combo.c | 280 - rostests/winetests/user32/cursoricon.c | 892 -- rostests/winetests/user32/dce.c | 434 - rostests/winetests/user32/dde.c | 2111 ---- rostests/winetests/user32/dialog.c | 937 -- rostests/winetests/user32/edit.c | 2017 --- rostests/winetests/user32/generated.c | 2481 ---- rostests/winetests/user32/input.c | 1151 -- rostests/winetests/user32/listbox.c | 1535 --- rostests/winetests/user32/menu.c | 2364 ---- rostests/winetests/user32/monitor.c | 252 - rostests/winetests/user32/msg.c | 10463 ---------------- rostests/winetests/user32/resource.c | 367 - rostests/winetests/user32/resource.rc | 183 - rostests/winetests/user32/scroll.c | 160 - rostests/winetests/user32/static.c | 130 - rostests/winetests/user32/sysparams.c | 2628 ---- rostests/winetests/user32/test_mono.bmp | Bin 66 -> 0 bytes rostests/winetests/user32/testlist.c | 59 - rostests/winetests/user32/text.c | 313 - rostests/winetests/user32/user32.rbuild | 39 - rostests/winetests/user32/win.c | 4720 ------- rostests/winetests/user32/winstation.c | 366 - rostests/winetests/user32/wsprintf.c | 103 - rostests/winetests/usp10/testlist.c | 15 - rostests/winetests/usp10/usp10.c | 1419 --- rostests/winetests/usp10/usp10.rbuild | 15 - rostests/winetests/uxtheme/system.c | 515 - rostests/winetests/uxtheme/testlist.c | 15 - rostests/winetests/uxtheme/uxtheme.rbuild | 13 - rostests/winetests/version/info.c | 571 - rostests/winetests/version/install.c | 171 - rostests/winetests/version/testlist.c | 17 - rostests/winetests/version/version.rbuild | 15 - rostests/winetests/version/version.rc | 57 - rostests/winetests/winetest/config.h | 949 -- rostests/winetests/winetest/dist.rc | 31 - rostests/winetests/winetest/gui.c | 528 - rostests/winetests/winetest/main.c | 751 -- rostests/winetests/winetest/maketest | 25 - rostests/winetests/winetest/port.h | 469 - rostests/winetests/winetest/resource.h | 59 - rostests/winetests/winetest/send.c | 223 - rostests/winetests/winetest/tests.rc | 8 - rostests/winetests/winetest/util.c | 130 - rostests/winetests/winetest/wine.ico | Bin 1078 -> 0 bytes rostests/winetests/winetest/winetest.h | 67 - rostests/winetests/winetest/winetest.ico | Bin 15086 -> 0 bytes rostests/winetests/winetest/winetest.rbuild | 17 - rostests/winetests/winetest/winetest.rc | 169 - rostests/winetests/winhttp/notification.c | 267 - rostests/winetests/winhttp/testlist.c | 15 - rostests/winetests/winhttp/winhttp.c | 670 - rostests/winetests/winhttp/winhttp.rbuild | 14 - rostests/winetests/wininet/ftp.c | 838 -- rostests/winetests/wininet/generated.c | 1028 -- rostests/winetests/wininet/http.c | 1850 --- rostests/winetests/wininet/internet.c | 351 - rostests/winetests/wininet/testlist.c | 25 - rostests/winetests/wininet/url.c | 754 -- rostests/winetests/wininet/urlcache.c | 172 - rostests/winetests/wininet/wininet.rbuild | 19 - rostests/winetests/wininet/wininet_test.h | 84 - .../subsystems => subsystems}/csr/csr.rbuild | 0 {reactos/subsystems => subsystems}/csr/csr.rc | 0 .../csr/csrsrv/api.c | 0 .../csr/csrsrv/csrsrv.def | 0 .../csr/csrsrv/csrsrv.rbuild | 0 .../csr/csrsrv/csrsrv.rc | 0 .../csr/csrsrv/init.c | 0 .../csr/csrsrv/process.c | 0 .../csr/csrsrv/server.c | 0 .../csr/csrsrv/session.c | 0 .../csr/csrsrv/srv.h | 0 .../csr/csrsrv/status.h | 0 .../csr/csrsrv/thread.c | 0 .../csr/csrsrv/wait.c | 0 {reactos/subsystems => subsystems}/csr/main.c | 0 .../ntvdm/lang/bg-BG.rc | 0 .../ntvdm/lang/cs-CZ.rc | 0 .../ntvdm/lang/de-DE.rc | 0 .../ntvdm/lang/en-US.rc | 0 .../ntvdm/lang/es-ES.rc | 0 .../ntvdm/lang/fr-FR.rc | 0 .../ntvdm/lang/hu-HU.rc | 0 .../ntvdm/lang/id-ID.rc | 0 .../ntvdm/lang/it-IT.rc | 0 .../ntvdm/lang/ja-JP.rc | 0 .../ntvdm/lang/no-NO.rc | 0 .../ntvdm/lang/pl-PL.rc | 0 .../ntvdm/lang/pt-BR.rc | 0 .../ntvdm/lang/ru-RU.rc | 0 .../ntvdm/lang/sk-SK.rc | 0 .../ntvdm/lang/th-TH.rc | 0 .../ntvdm/lang/uk-UA.rc | 0 .../subsystems => subsystems}/ntvdm/ntvdm.c | 0 .../ntvdm/ntvdm.rbuild | 0 .../subsystems => subsystems}/ntvdm/ntvdm.rc | 0 .../ntvdm/resource.h | 0 .../subsystems => subsystems}/ntvdm/rsrc.rc | 0 .../subsystems.rbuild | 0 .../win/basesrv/basesrv.def | 0 .../win/basesrv/basesrv.h | 0 .../win/basesrv/basesrv.rbuild | 0 .../win/basesrv/basesrv.rc | 0 .../win/basesrv/init.c | 0 .../win/basesrv/main.c | 0 .../win/basesrv/server.c | 0 .../win/directory.rbuild | 0 .../win/winsrv/dllmain.c | 0 .../win/winsrv/init.c | 0 .../win/winsrv/server.c | 0 .../win/winsrv/winsrv.def | 0 .../win/winsrv/winsrv.h | 0 .../win/winsrv/winsrv.rbuild | 0 .../win/winsrv/winsrv.rc | 0 .../win32/csrss/api/handle.c | 0 .../win32/csrss/api/process.c | 0 .../win32/csrss/api/user.c | 0 .../win32/csrss/api/wapi.c | 0 .../win32/csrss/csrss.c | 0 .../win32/csrss/csrss.h | 0 .../win32/csrss/csrss.rbuild | 0 .../win32/csrss/csrss.rc | 0 .../win32/csrss/include/api.h | 0 .../win32/csrss/include/conio.h | 0 .../win32/csrss/include/csrplugin.h | 0 .../win32/csrss/include/desktopbg.h | 0 .../win32/csrss/include/win32csr.h | 0 .../win32/csrss/init.c | 0 .../win32/csrss/print.c | 0 .../win32/csrss/video.c | 0 .../win32/csrss/win32csr/alias.c | 0 .../win32/csrss/win32csr/appswitch.c | 0 .../win32/csrss/win32csr/conio.c | 0 .../win32/csrss/win32csr/desktopbg.c | 0 .../win32/csrss/win32csr/dllmain.c | 0 .../win32/csrss/win32csr/exitros.c | 0 .../win32/csrss/win32csr/guiconsole.c | 0 .../win32/csrss/win32csr/guiconsole.h | 0 .../win32/csrss/win32csr/lang/bg-BG.rc | 0 .../win32/csrss/win32csr/lang/de-DE.rc | 0 .../win32/csrss/win32csr/lang/el-GR.rc | 0 .../win32/csrss/win32csr/lang/en-US.rc | 0 .../win32/csrss/win32csr/lang/es-ES.rc | 0 .../win32/csrss/win32csr/lang/fr-FR.rc | 0 .../win32/csrss/win32csr/lang/id-ID.rc | 0 .../win32/csrss/win32csr/lang/it-IT.rc | 0 .../win32/csrss/win32csr/lang/no-NO.rc | 0 .../win32/csrss/win32csr/lang/pl-PL.rc | 0 .../win32/csrss/win32csr/lang/ru-RU.rc | 0 .../win32/csrss/win32csr/lang/sk-SK.rc | 0 .../win32/csrss/win32csr/lang/uk-UA.rc | 0 .../win32/csrss/win32csr/res/terminal.ico | Bin .../win32/csrss/win32csr/resource.h | 0 .../win32/csrss/win32csr/rsrc.rc | 0 .../win32/csrss/win32csr/tuiconsole.c | 0 .../win32/csrss/win32csr/tuiconsole.h | 0 .../win32/csrss/win32csr/w32csr.h | 0 .../win32/csrss/win32csr/win32csr.def | 0 .../win32/csrss/win32csr/win32csr.rbuild | 0 .../win32/csrss/win32csr/win32csr.rc | 0 .../win32/win32.rbuild | 0 .../win32/win32k/Doxyfile | 0 .../win32/win32k/dib/dib.c | 0 .../win32/win32k/dib/dib.h | 0 .../win32/win32k/dib/dib16bpp.c | 0 .../win32/win32k/dib/dib1bpp.c | 0 .../win32/win32k/dib/dib24bpp.c | 0 .../win32/win32k/dib/dib24bppc.c | 0 .../win32/win32k/dib/dib32bpp.c | 0 .../win32/win32k/dib/dib32bppc.c | 0 .../win32/win32k/dib/dib4bpp.c | 0 .../win32/win32k/dib/dib8bpp.c | 0 .../win32/win32k/dib/i386/dib24bpp_hline.s | 0 .../win32k/dib/i386/dib32bpp_colorfill.s | 0 .../win32/win32k/dib/i386/dib32bpp_hline.s | 0 .../win32/win32k/eng/bitblt.c | 0 .../win32/win32k/eng/clip.c | 0 .../win32/win32k/eng/copybits.c | 0 .../win32/win32k/eng/debug.c | 0 .../win32/win32k/eng/device.c | 0 .../win32/win32k/eng/driverobj.c | 0 .../win32/win32k/eng/engbrush.c | 0 .../win32/win32k/eng/engmisc.c | 0 .../win32/win32k/eng/engwindow.c | 0 .../win32/win32k/eng/error.c | 0 .../win32/win32k/eng/event.c | 0 .../win32/win32k/eng/float.c | 0 .../win32/win32k/eng/gradient.c | 0 .../win32/win32k/eng/i386/floatobj.S | 0 .../win32/win32k/eng/lineto.c | 0 .../win32/win32k/eng/mem.c | 0 .../win32/win32k/eng/misc.h | 0 .../win32/win32k/eng/mouse.c | 0 .../win32/win32k/eng/objects.h | 0 .../win32/win32k/eng/paint.c | 0 .../win32/win32k/eng/palette.c | 0 .../win32/win32k/eng/perfcnt.c | 0 .../win32/win32k/eng/semaphor.c | 0 .../win32/win32k/eng/sort.c | 0 .../win32/win32k/eng/string.c | 0 .../win32/win32k/eng/surface.c | 0 .../win32/win32k/eng/transblt.c | 0 .../win32/win32k/eng/xlate.c | 0 .../win32/win32k/include/accelerator.h | 0 .../win32/win32k/include/bitmaps.h | 0 .../win32/win32k/include/brush.h | 0 .../win32/win32k/include/callback.h | 0 .../win32/win32k/include/caret.h | 0 .../win32/win32k/include/class.h | 0 .../win32/win32k/include/cleanup.h | 0 .../win32/win32k/include/clipboard.h | 0 .../win32/win32k/include/cliprgn.h | 0 .../win32/win32k/include/color.h | 0 .../win32/win32k/include/coord.h | 0 .../win32/win32k/include/csr.h | 0 .../win32/win32k/include/cursoricon.h | 0 .../win32/win32k/include/dc.h | 0 .../win32/win32k/include/dce.h | 0 .../win32/win32k/include/desktop.h | 0 .../win32/win32k/include/dib.h | 0 .../win32/win32k/include/driver.h | 0 .../win32/win32k/include/eng.h | 0 .../win32/win32k/include/error.h | 0 .../win32/win32k/include/floatobj.h | 0 .../win32/win32k/include/focus.h | 0 .../win32/win32k/include/gdifloat.h | 0 .../win32/win32k/include/gdiobj.h | 0 .../win32/win32k/include/guicheck.h | 0 .../win32/win32k/include/hook.h | 0 .../win32/win32k/include/hotkey.h | 0 .../win32/win32k/include/input.h | 0 .../win32/win32k/include/intddraw.h | 0 .../win32/win32k/include/inteng.h | 0 .../win32/win32k/include/intgdi.h | 0 .../win32/win32k/include/menu.h | 0 .../win32/win32k/include/misc.h | 0 .../win32/win32k/include/mmcopy.h | 0 .../win32/win32k/include/monitor.h | 0 .../win32/win32k/include/mouse.h | 0 .../win32/win32k/include/msgqueue.h | 0 .../win32/win32k/include/ntuser.h | 0 .../win32/win32k/include/object.h | 0 .../win32/win32k/include/paint.h | 0 .../win32/win32k/include/painting.h | 0 .../win32/win32k/include/palette.h | 0 .../win32/win32k/include/path.h | 0 .../win32/win32k/include/pen.h | 0 .../win32/win32k/include/prop.h | 0 .../win32/win32k/include/rect.h | 0 .../win32/win32k/include/region.h | 0 .../win32/win32k/include/scroll.h | 0 .../win32/win32k/include/surface.h | 0 .../win32/win32k/include/tags.h | 0 .../win32/win32k/include/text.h | 0 .../win32/win32k/include/timer.h | 0 .../win32/win32k/include/useratom.h | 0 .../win32/win32k/include/userfuncs.h | 0 .../win32/win32k/include/vis.h | 0 .../win32/win32k/include/win32.h | 0 .../win32/win32k/include/win32k.h | 0 .../win32/win32k/include/window.h | 0 .../win32/win32k/include/winpos.h | 0 .../win32/win32k/include/winsta.h | 0 .../win32/win32k/include/xformobj.h | 0 .../win32/win32k/ldr/loader.c | 0 .../win32/win32k/main/dllmain.c | 0 .../win32/win32k/misc/copy.c | 0 .../win32/win32k/misc/driver.c | 0 .../win32/win32k/misc/err.c | 0 .../win32/win32k/misc/i386/atan2_asm.s | 0 .../win32/win32k/misc/i386/ceil_asm.s | 0 .../win32/win32k/misc/i386/cos_asm.s | 0 .../win32/win32k/misc/i386/floor_asm.s | 0 .../win32/win32k/misc/i386/sin_asm.s | 0 .../win32/win32k/misc/math.c | 0 .../win32/win32k/misc/usrheap.c | 0 .../win32/win32k/ntddraw/d3d.c | 0 .../win32/win32k/ntddraw/dd.c | 0 .../win32/win32k/ntddraw/ddraw.c | 0 .../win32/win32k/ntddraw/ddsurf.c | 0 .../win32/win32k/ntddraw/dvp.c | 0 .../win32/win32k/ntddraw/dxeng.c | 0 .../win32/win32k/ntddraw/eng.c | 0 .../win32/win32k/ntddraw/mocomp.c | 0 .../win32/win32k/ntuser/accelerator.c | 0 .../win32/win32k/ntuser/callback.c | 0 .../win32/win32k/ntuser/callproc.c | 0 .../win32/win32k/ntuser/caret.c | 0 .../win32/win32k/ntuser/class.c | 0 .../win32/win32k/ntuser/clipboard.c | 0 .../win32/win32k/ntuser/csr.c | 0 .../win32/win32k/ntuser/cursoricon.c | 0 .../win32/win32k/ntuser/defwnd.c | 0 .../win32/win32k/ntuser/desktop.c | 0 .../win32/win32k/ntuser/display.c | 0 .../win32/win32k/ntuser/event.c | 0 .../win32/win32k/ntuser/focus.c | 0 .../win32/win32k/ntuser/guicheck.c | 0 .../win32/win32k/ntuser/hook.c | 0 .../win32/win32k/ntuser/hotkey.c | 0 .../win32/win32k/ntuser/input.c | 0 .../win32/win32k/ntuser/kbdlayout.c | 0 .../win32/win32k/ntuser/keyboard.c | 0 .../win32/win32k/ntuser/menu.c | 0 .../win32/win32k/ntuser/message.c | 0 .../win32/win32k/ntuser/metric.c | 0 .../win32/win32k/ntuser/misc.c | 0 .../win32/win32k/ntuser/monitor.c | 0 .../win32/win32k/ntuser/msgqueue.c | 0 .../win32/win32k/ntuser/ntstubs.c | 0 .../win32/win32k/ntuser/ntuser.c | 0 .../win32/win32k/ntuser/object.c | 0 .../win32/win32k/ntuser/painting.c | 0 .../win32/win32k/ntuser/prop.c | 0 .../win32/win32k/ntuser/scrollbar.c | 0 .../win32/win32k/ntuser/session.c | 0 .../win32/win32k/ntuser/simplecall.c | 0 .../win32/win32k/ntuser/sysparams.c | 0 .../win32/win32k/ntuser/timer.c | 0 .../win32/win32k/ntuser/useratom.c | 0 .../win32/win32k/ntuser/vis.c | 0 .../win32/win32k/ntuser/windc.c | 0 .../win32/win32k/ntuser/window.c | 0 .../win32/win32k/ntuser/winpos.c | 0 .../win32/win32k/ntuser/winsta.c | 0 .../win32/win32k/objects/arc.c | 0 .../win32/win32k/objects/bezier.c | 0 .../win32/win32k/objects/bitblt.c | 0 .../win32/win32k/objects/bitmaps.c | 0 .../win32/win32k/objects/brush.c | 0 .../win32/win32k/objects/cliprgn.c | 0 .../win32/win32k/objects/color.c | 0 .../win32/win32k/objects/coord.c | 0 .../win32/win32k/objects/dc.c | 0 .../win32/win32k/objects/dcutil.c | 0 .../win32/win32k/objects/dibobj.c | 0 .../win32/win32k/objects/drawing.c | 0 .../win32/win32k/objects/fillshap.c | 0 .../win32/win32k/objects/font.c | 0 .../win32/win32k/objects/gdibatch.c | 0 .../win32/win32k/objects/gdidbg.c | 0 .../win32/win32k/objects/gdiobj.c | 0 .../win32/win32k/objects/icm.c | 0 .../win32/win32k/objects/line.c | 0 .../win32/win32k/objects/metafile.c | 0 .../win32/win32k/objects/palobj.c | 0 .../win32/win32k/objects/path.c | 0 .../win32/win32k/objects/pen.c | 0 .../win32/win32k/objects/polyfill.c | 0 .../win32/win32k/objects/print.c | 0 .../win32/win32k/objects/rect.c | 0 .../win32/win32k/objects/region.c | 0 .../win32/win32k/objects/stockobj.c | 0 .../win32/win32k/objects/text.c | 0 .../win32/win32k/objects/wingl.c | 0 .../win32/win32k/objects/xformobj.c | 0 .../win32/win32k/stubs/stubs.c | 0 .../win32/win32k/w32k.h | 0 .../win32/win32k/w32ksvc.db | 0 .../win32/win32k/win32k.def | 0 .../win32/win32k/win32k.rbuild | 0 .../win32/win32k/win32k.rc | 0 reactos/vreport.xsl => vreport.xsl | 0 wallpaper/.gitignore | 0 wallpaper/ReadMe.txt | 10 - wallpaper/clouds.jpg | Bin 135721 -> 0 bytes wallpaper/directory.rbuild | 3 - wallpaper/lake.bmp | Bin 2359350 -> 0 bytes wallpaper/lake.jpg | Bin 221691 -> 0 bytes 18464 files changed, 863943 deletions(-) rename reactos/COPYING => COPYING (100%) rename reactos/COPYING.ARM => COPYING.ARM (100%) rename reactos/CREDITS => CREDITS (100%) rename reactos/Doxyfile => Doxyfile (100%) rename reactos/INSTALL => INSTALL (100%) rename reactos/LGPL.txt => LGPL.txt (100%) rename reactos/Makefile => Makefile (100%) rename reactos/README => README (100%) rename reactos/ReactOS-arm.rbuild => ReactOS-arm.rbuild (100%) rename reactos/ReactOS-generic.rbuild => ReactOS-generic.rbuild (100%) rename reactos/ReactOS-i386.rbuild => ReactOS-i386.rbuild (100%) rename reactos/ReactOS-ppc.rbuild => ReactOS-ppc.rbuild (100%) rename reactos/apistatus.lst => apistatus.lst (100%) rename {reactos/base => base}/applications/applications.rbuild (100%) rename {reactos/base => base}/applications/cacls/cacls.c (100%) rename {reactos/base => base}/applications/cacls/cacls.rbuild (100%) rename {reactos/base => base}/applications/cacls/cacls.rc (100%) rename {reactos/base => base}/applications/cacls/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/cacls/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/cacls/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/cacls/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/cacls/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/cacls/lang/en-US.rc (100%) rename {reactos/base => base}/applications/cacls/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/cacls/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/cacls/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/cacls/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/cacls/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/cacls/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/cacls/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/cacls/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/cacls/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/cacls/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/cacls/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/cacls/lang/zh-CN.rc (100%) rename {reactos/base => base}/applications/cacls/lang/zh-TW.rc (100%) rename {reactos/base => base}/applications/cacls/precomp.h (100%) rename {reactos/base => base}/applications/cacls/resource.h (100%) rename {reactos/base => base}/applications/cacls/rsrc.rc (100%) rename {reactos/base => base}/applications/calc/about.c (100%) rename {reactos/base => base}/applications/calc/calc.h (100%) rename {reactos/base => base}/applications/calc/calc.rbuild (100%) rename {reactos/base => base}/applications/calc/convert.c (100%) rename {reactos/base => base}/applications/calc/copying.txt (100%) rename {reactos/base => base}/applications/calc/fun_mpfr.c (100%) rename {reactos/base => base}/applications/calc/function.c (100%) rename {reactos/base => base}/applications/calc/help.txt (100%) rename {reactos/base => base}/applications/calc/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/calc/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/calc/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/calc/lang/en-US.rc (100%) rename {reactos/base => base}/applications/calc/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/calc/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/calc/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/calc/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/calc/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/calc/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/calc/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/calc/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/calc/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/calc/readme.txt (100%) rename {reactos/base => base}/applications/calc/res/ROS_logo.bmp (100%) rename {reactos/base => base}/applications/calc/res/calc.ico (100%) rename {reactos/base => base}/applications/calc/res/calc_sm.ico (100%) rename {reactos/base => base}/applications/calc/resource.h (100%) rename {reactos/base => base}/applications/calc/resource.rc (100%) rename {reactos/base => base}/applications/calc/rpn.c (100%) rename {reactos/base => base}/applications/calc/rpn_mpfr.c (100%) rename {reactos/base => base}/applications/calc/todo.txt (100%) rename {reactos/base => base}/applications/calc/utl.c (100%) rename {reactos/base => base}/applications/calc/utl_mpfr.c (100%) rename {reactos/base => base}/applications/calc/whatsnew.txt (100%) rename {reactos/base => base}/applications/calc/winmain.c (100%) rename {reactos/base => base}/applications/calc/wmmsg.h (100%) rename {reactos/base => base}/applications/charmap/about.c (100%) rename {reactos/base => base}/applications/charmap/charmap.c (100%) rename {reactos/base => base}/applications/charmap/charmap.rbuild (100%) rename {reactos/base => base}/applications/charmap/charmap.rc (100%) rename {reactos/base => base}/applications/charmap/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/charmap/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/charmap/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/charmap/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/charmap/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/charmap/lang/en-US.rc (100%) rename {reactos/base => base}/applications/charmap/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/charmap/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/charmap/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/charmap/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/charmap/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/charmap/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/charmap/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/charmap/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/charmap/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/charmap/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/charmap/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/charmap/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/charmap/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/charmap/lrgcell.c (100%) rename {reactos/base => base}/applications/charmap/map.c (100%) rename {reactos/base => base}/applications/charmap/precomp.h (100%) rename {reactos/base => base}/applications/charmap/res/charmap.ico (100%) rename {reactos/base => base}/applications/charmap/resource.h (100%) rename {reactos/base => base}/applications/charmap/rsrc.rc (100%) rename {reactos/base => base}/applications/cmdutils/cmdutils.rbuild (100%) rename {reactos/base => base}/applications/cmdutils/dbgprint/dbgprint.c (100%) rename {reactos/base => base}/applications/cmdutils/dbgprint/dbgprint.rbuild (100%) rename {reactos/base => base}/applications/cmdutils/doskey/doskey.c (100%) rename {reactos/base => base}/applications/cmdutils/doskey/doskey.rbuild (100%) rename {reactos/base => base}/applications/cmdutils/doskey/doskey.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/find.c (100%) rename {reactos/base => base}/applications/cmdutils/find/find.rbuild (100%) rename {reactos/base => base}/applications/cmdutils/find/find.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/en-US.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/cmdutils/find/resource.h (100%) rename {reactos/base => base}/applications/cmdutils/find/rsrc.rc (100%) rename {reactos/base => base}/applications/cmdutils/hostname/hostname.c (100%) rename {reactos/base => base}/applications/cmdutils/hostname/hostname.rbuild (100%) rename {reactos/base => base}/applications/cmdutils/hostname/hostname.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/en-US.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/more.c (100%) rename {reactos/base => base}/applications/cmdutils/more/more.rbuild (100%) rename {reactos/base => base}/applications/cmdutils/more/more.rc (100%) rename {reactos/base => base}/applications/cmdutils/more/resource.h (100%) rename {reactos/base => base}/applications/cmdutils/more/rsrc.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/Bg.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/Da.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/De.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/El.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/En.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/Fr.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/It.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/Ko.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/Nl.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/No.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/Pl.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/Ru.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/Si.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/rsrc.rc (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/xcopy.c (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/xcopy.h (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/xcopy.rbuild (100%) rename {reactos/base => base}/applications/cmdutils/xcopy/xcopy.rc (100%) rename {reactos/base => base}/applications/control/control.c (100%) rename {reactos/base => base}/applications/control/control.dsp (100%) rename {reactos/base => base}/applications/control/control.dsw (100%) rename {reactos/base => base}/applications/control/control.h (100%) rename {reactos/base => base}/applications/control/control.rbuild (100%) rename {reactos/base => base}/applications/control/control.rc (100%) rename {reactos/base => base}/applications/control/resource.h (100%) rename {reactos/base => base}/applications/control/resources/config.ico (100%) rename {reactos/base => base}/applications/dxdiag/ddtest.c (100%) rename {reactos/base => base}/applications/dxdiag/display.c (100%) rename {reactos/base => base}/applications/dxdiag/dxdiag.c (100%) rename {reactos/base => base}/applications/dxdiag/dxdiag.rbuild (100%) rename {reactos/base => base}/applications/dxdiag/dxdiag.rc (100%) rename {reactos/base => base}/applications/dxdiag/help.c (100%) rename {reactos/base => base}/applications/dxdiag/input.c (100%) rename {reactos/base => base}/applications/dxdiag/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/en-US.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/dxdiag/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/dxdiag/music.c (100%) rename {reactos/base => base}/applications/dxdiag/network.c (100%) rename {reactos/base => base}/applications/dxdiag/precomp.h (100%) rename {reactos/base => base}/applications/dxdiag/res/dxdiag.ico (100%) rename {reactos/base => base}/applications/dxdiag/resource.h (100%) rename {reactos/base => base}/applications/dxdiag/rsrc.rc (100%) rename {reactos/base => base}/applications/dxdiag/sound.c (100%) rename {reactos/base => base}/applications/dxdiag/system.c (100%) rename {reactos/base => base}/applications/games/games.rbuild (100%) rename {reactos/base => base}/applications/games/solitaire/ReadMe.txt (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/card.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardbitmaps.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardbutton.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardbutton.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardcolor.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardcolor.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardcount.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardcount.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardlib.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardlib.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardregion.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardregion.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardrgndraw.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardrgnmouse.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardstack.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardstack.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardwindow.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/cardwindow.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/dropzone.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/dropzone.h (100%) rename {reactos/base => base}/applications/games/solitaire/cardlib/globals.h (100%) rename {reactos/base => base}/applications/games/solitaire/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/en-US.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/eu-ES.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/games/solitaire/lang/zh-CN.rc (100%) rename {reactos/base => base}/applications/games/solitaire/resource.h (100%) rename {reactos/base => base}/applications/games/solitaire/rsrc.rc (100%) rename {reactos/base => base}/applications/games/solitaire/solcreate.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/solgame.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/solitaire.cpp (100%) rename {reactos/base => base}/applications/games/solitaire/solitaire.h (100%) rename {reactos/base => base}/applications/games/solitaire/solitaire.ico (100%) rename {reactos/base => base}/applications/games/solitaire/solitaire.rbuild (100%) rename {reactos/base => base}/applications/games/winemine/README (100%) rename {reactos/base => base}/applications/games/winemine/dialog.c (100%) rename {reactos/base => base}/applications/games/winemine/dialog.h (100%) rename {reactos/base => base}/applications/games/winemine/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/en-US.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/eu-ES.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/games/winemine/lang/zh-CN.rc (100%) rename {reactos/base => base}/applications/games/winemine/main.c (100%) rename {reactos/base => base}/applications/games/winemine/main.h (100%) rename {reactos/base => base}/applications/games/winemine/rc/faces.bmp (100%) rename {reactos/base => base}/applications/games/winemine/rc/leds.bmp (100%) rename {reactos/base => base}/applications/games/winemine/rc/mines.bmp (100%) rename {reactos/base => base}/applications/games/winemine/rc/winemine.ico (100%) rename {reactos/base => base}/applications/games/winemine/resource.h (100%) rename {reactos/base => base}/applications/games/winemine/rsrc.rc (100%) rename {reactos/base => base}/applications/games/winemine/winemine.rbuild (100%) rename {reactos/base => base}/applications/hh/hh.ico (100%) rename {reactos/base => base}/applications/hh/hh.rbuild (100%) rename {reactos/base => base}/applications/hh/hh.rc (100%) rename {reactos/base => base}/applications/hh/main.c (100%) rename {reactos/base => base}/applications/iexplore/iexplore.rbuild (100%) rename {reactos/base => base}/applications/iexplore/main.c (100%) rename {reactos/base => base}/applications/iexplore/version.rc (100%) rename {reactos/base => base}/applications/kbswitch/kbsdll/kbsdll.c (100%) rename {reactos/base => base}/applications/kbswitch/kbsdll/kbsdll.rbuild (100%) rename {reactos/base => base}/applications/kbswitch/kbsdll/kbsdll.rc (100%) rename {reactos/base => base}/applications/kbswitch/kbsdll/kbsdll.spec (100%) rename {reactos/base => base}/applications/kbswitch/kbswitch.c (100%) rename {reactos/base => base}/applications/kbswitch/kbswitch.h (100%) rename {reactos/base => base}/applications/kbswitch/kbswitch.rbuild (100%) rename {reactos/base => base}/applications/kbswitch/kbswitch.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/en-US.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/kbswitch/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/kbswitch/res/kbswitch.ico (100%) rename {reactos/base => base}/applications/kbswitch/resource.h (100%) rename {reactos/base => base}/applications/kbswitch/rsrc.rc (100%) rename {reactos/base => base}/applications/logoff/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/logoff/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/logoff/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/logoff/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/logoff/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/logoff/lang/en-US.rc (100%) rename {reactos/base => base}/applications/logoff/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/logoff/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/logoff/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/logoff/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/logoff/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/logoff/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/logoff/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/logoff/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/logoff/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/logoff/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/logoff/logoff.c (100%) rename {reactos/base => base}/applications/logoff/logoff.rbuild (100%) rename {reactos/base => base}/applications/logoff/logoff.rc (100%) rename {reactos/base => base}/applications/logoff/misc.c (100%) rename {reactos/base => base}/applications/logoff/precomp.h (100%) rename {reactos/base => base}/applications/logoff/resource.h (100%) rename {reactos/base => base}/applications/logoff/rsrc.rc (100%) rename {reactos/base => base}/applications/mmc/console.c (100%) rename {reactos/base => base}/applications/mmc/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/mmc/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/mmc/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/mmc/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/mmc/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/mmc/lang/en-US.rc (100%) rename {reactos/base => base}/applications/mmc/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/mmc/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/mmc/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/mmc/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/mmc/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/mmc/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/mmc/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/mmc/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/mmc/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/mmc/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/mmc/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/mmc/misc.c (100%) rename {reactos/base => base}/applications/mmc/mmc.c (100%) rename {reactos/base => base}/applications/mmc/mmc.rbuild (100%) rename {reactos/base => base}/applications/mmc/mmc.rc (100%) rename {reactos/base => base}/applications/mmc/precomp.h (100%) rename {reactos/base => base}/applications/mmc/resource.h (100%) rename {reactos/base => base}/applications/mmc/resources/mmc.ico (100%) rename {reactos/base => base}/applications/mmc/rsrc.rc (100%) rename {reactos/base => base}/applications/msconfig/freeldrpage.c (100%) rename {reactos/base => base}/applications/msconfig/freeldrpage.h (100%) rename {reactos/base => base}/applications/msconfig/generalpage.c (100%) rename {reactos/base => base}/applications/msconfig/generalpage.h (100%) rename {reactos/base => base}/applications/msconfig/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/en-US.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/hu-HU.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/msconfig/lang/zh-CN.rc (100%) rename {reactos/base => base}/applications/msconfig/msconfig.c (100%) rename {reactos/base => base}/applications/msconfig/msconfig.h (100%) rename {reactos/base => base}/applications/msconfig/msconfig.rbuild (100%) rename {reactos/base => base}/applications/msconfig/msconfig.rc (100%) rename {reactos/base => base}/applications/msconfig/precomp.h (100%) rename {reactos/base => base}/applications/msconfig/res/msconfig.ico (100%) rename {reactos/base => base}/applications/msconfig/resource.h (100%) rename {reactos/base => base}/applications/msconfig/rsrc.rc (100%) rename {reactos/base => base}/applications/msconfig/srvpage.c (100%) rename {reactos/base => base}/applications/msconfig/srvpage.h (100%) rename {reactos/base => base}/applications/msconfig/startuppage.c (100%) rename {reactos/base => base}/applications/msconfig/startuppage.h (100%) rename {reactos/base => base}/applications/msconfig/systempage.c (100%) rename {reactos/base => base}/applications/msconfig/systempage.h (100%) rename {reactos/base => base}/applications/msconfig/toolspage.c (100%) rename {reactos/base => base}/applications/msconfig/toolspage.h (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/about.c (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/devmgmt.c (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/devmgmt.rbuild (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/devmgmt.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/enumdevices.c (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/en-US.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/mainwnd.c (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/misc.c (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/precomp.h (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/res/computer.ico (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/res/exit.bmp (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/res/help.bmp (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/res/properties.bmp (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/res/refresh.bmp (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/res/root.bmp (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/resource.h (100%) rename {reactos/base => base}/applications/mscutils/devmgmt/rsrc.rc (100%) rename {reactos/base => base}/applications/mscutils/directory.rbuild (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/eventvwr.c (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/eventvwr.h (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/eventvwr.rbuild (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/eventvwr.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/en-US.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/res/error.ico (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/res/eventvwr.ico (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/res/info.ico (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/res/warning.ico (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/resource.h (100%) rename {reactos/base => base}/applications/mscutils/eventvwr/rsrc.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/about.c (100%) rename {reactos/base => base}/applications/mscutils/servman/control.c (100%) rename {reactos/base => base}/applications/mscutils/servman/create.c (100%) rename {reactos/base => base}/applications/mscutils/servman/delete.c (100%) rename {reactos/base => base}/applications/mscutils/servman/export.c (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/en-US.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/listview.c (100%) rename {reactos/base => base}/applications/mscutils/servman/mainwnd.c (100%) rename {reactos/base => base}/applications/mscutils/servman/misc.c (100%) rename {reactos/base => base}/applications/mscutils/servman/precomp.h (100%) rename {reactos/base => base}/applications/mscutils/servman/progress.c (100%) rename {reactos/base => base}/applications/mscutils/servman/propsheet.c (100%) rename {reactos/base => base}/applications/mscutils/servman/query.c (100%) rename {reactos/base => base}/applications/mscutils/servman/res/create.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/delete.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/export.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/pause.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/properties.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/refresh.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/restart.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/start.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/stop.bmp (100%) rename {reactos/base => base}/applications/mscutils/servman/res/system.ico (100%) rename {reactos/base => base}/applications/mscutils/servman/resource.h (100%) rename {reactos/base => base}/applications/mscutils/servman/rsrc.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/servman.c (100%) rename {reactos/base => base}/applications/mscutils/servman/servman.rbuild (100%) rename {reactos/base => base}/applications/mscutils/servman/servman.rc (100%) rename {reactos/base => base}/applications/mscutils/servman/start.c (100%) rename {reactos/base => base}/applications/mscutils/servman/stop.c (100%) rename {reactos/base => base}/applications/mstsc/bitmap.c (100%) rename {reactos/base => base}/applications/mstsc/bsops.c (100%) rename {reactos/base => base}/applications/mstsc/bsops.h (100%) rename {reactos/base => base}/applications/mstsc/cache.c (100%) rename {reactos/base => base}/applications/mstsc/channels.c (100%) rename {reactos/base => base}/applications/mstsc/connectdialog.c (100%) rename {reactos/base => base}/applications/mstsc/constants.h (100%) rename {reactos/base => base}/applications/mstsc/iso.c (100%) rename {reactos/base => base}/applications/mstsc/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/ca-ES.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/en-US.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/mstsc/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/mstsc/licence.c (100%) rename {reactos/base => base}/applications/mstsc/mcs.c (100%) rename {reactos/base => base}/applications/mstsc/mppc.c (100%) rename {reactos/base => base}/applications/mstsc/mstsc.rbuild (100%) rename {reactos/base => base}/applications/mstsc/orders.c (100%) rename {reactos/base => base}/applications/mstsc/orders.h (100%) rename {reactos/base => base}/applications/mstsc/parse.h (100%) rename {reactos/base => base}/applications/mstsc/precomp.h (100%) rename {reactos/base => base}/applications/mstsc/proto.h (100%) rename {reactos/base => base}/applications/mstsc/pstcache.c (100%) rename {reactos/base => base}/applications/mstsc/rdc.rc (100%) rename {reactos/base => base}/applications/mstsc/rdesktop.h (100%) rename {reactos/base => base}/applications/mstsc/rdp.c (100%) rename {reactos/base => base}/applications/mstsc/rdp5.c (100%) rename {reactos/base => base}/applications/mstsc/res/colors.ico (100%) rename {reactos/base => base}/applications/mstsc/res/connection.ico (100%) rename {reactos/base => base}/applications/mstsc/res/header.bmp (100%) rename {reactos/base => base}/applications/mstsc/res/header.pdn (100%) rename {reactos/base => base}/applications/mstsc/res/logon.ico (100%) rename {reactos/base => base}/applications/mstsc/res/mstsc.ico (100%) rename {reactos/base => base}/applications/mstsc/res/remote.ico (100%) rename {reactos/base => base}/applications/mstsc/res/spectrum.bmp (100%) rename {reactos/base => base}/applications/mstsc/res/video-display.png (100%) rename {reactos/base => base}/applications/mstsc/resource.h (100%) rename {reactos/base => base}/applications/mstsc/rsrc.rc (100%) rename {reactos/base => base}/applications/mstsc/secure.c (100%) rename {reactos/base => base}/applications/mstsc/settings.c (100%) rename {reactos/base => base}/applications/mstsc/ssl_calls.c (100%) rename {reactos/base => base}/applications/mstsc/tcp.c (100%) rename {reactos/base => base}/applications/mstsc/types.h (100%) rename {reactos/base => base}/applications/mstsc/uimain.c (100%) rename {reactos/base => base}/applications/mstsc/uimain.h (100%) rename {reactos/base => base}/applications/mstsc/win32.c (100%) rename {reactos/base => base}/applications/network/arp/arp.c (100%) rename {reactos/base => base}/applications/network/arp/arp.rbuild (100%) rename {reactos/base => base}/applications/network/arp/arp.rc (100%) rename {reactos/base => base}/applications/network/dwnl/dwnl.c (100%) rename {reactos/base => base}/applications/network/dwnl/dwnl.rbuild (100%) rename {reactos/base => base}/applications/network/finger/LICENSE.txt (100%) rename {reactos/base => base}/applications/network/finger/err.c (100%) rename {reactos/base => base}/applications/network/finger/err.h (100%) rename {reactos/base => base}/applications/network/finger/finger.c (100%) rename {reactos/base => base}/applications/network/finger/finger.rbuild (100%) rename {reactos/base => base}/applications/network/finger/finger.rc (100%) rename {reactos/base => base}/applications/network/finger/getopt.c (100%) rename {reactos/base => base}/applications/network/finger/getopt.h (100%) rename {reactos/base => base}/applications/network/finger/net.c (100%) rename {reactos/base => base}/applications/network/finger/various.h (100%) rename {reactos/base => base}/applications/network/ftp/cmds.c (100%) rename {reactos/base => base}/applications/network/ftp/cmdtab.c (100%) rename {reactos/base => base}/applications/network/ftp/domacro.c (100%) rename {reactos/base => base}/applications/network/ftp/fake.c (100%) rename {reactos/base => base}/applications/network/ftp/fake.h (100%) rename {reactos/base => base}/applications/network/ftp/ftp.c (100%) rename {reactos/base => base}/applications/network/ftp/ftp.rbuild (100%) rename {reactos/base => base}/applications/network/ftp/ftp.rc (100%) rename {reactos/base => base}/applications/network/ftp/ftp_var.h (100%) rename {reactos/base => base}/applications/network/ftp/main.c (100%) rename {reactos/base => base}/applications/network/ftp/pathnames.h (100%) rename {reactos/base => base}/applications/network/ftp/prototypes.h (100%) rename {reactos/base => base}/applications/network/ftp/ruserpass.c (100%) rename {reactos/base => base}/applications/network/ipconfig/ipconfig.c (100%) rename {reactos/base => base}/applications/network/ipconfig/ipconfig.rbuild (100%) rename {reactos/base => base}/applications/network/ipconfig/ipconfig.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/en-US.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/network/ipconfig/resource.h (100%) rename {reactos/base => base}/applications/network/net/cmdStop.c (100%) rename {reactos/base => base}/applications/network/net/cmdstart.c (100%) rename {reactos/base => base}/applications/network/net/help.c (100%) rename {reactos/base => base}/applications/network/net/main.c (100%) rename {reactos/base => base}/applications/network/net/net.h (100%) rename {reactos/base => base}/applications/network/net/net.rbuild (100%) rename {reactos/base => base}/applications/network/net/process.c (100%) rename {reactos/base => base}/applications/network/netstat/netstat.c (100%) rename {reactos/base => base}/applications/network/netstat/netstat.h (100%) rename {reactos/base => base}/applications/network/netstat/netstat.rbuild (100%) rename {reactos/base => base}/applications/network/netstat/netstat.rc (100%) rename {reactos/base => base}/applications/network/network.rbuild (100%) rename {reactos/base => base}/applications/network/ping/ping.c (100%) rename {reactos/base => base}/applications/network/ping/ping.rbuild (100%) rename {reactos/base => base}/applications/network/ping/ping.rc (100%) rename {reactos/base => base}/applications/network/route/route.c (100%) rename {reactos/base => base}/applications/network/route/route.rbuild (100%) rename {reactos/base => base}/applications/network/route/route.rc (100%) rename {reactos/base => base}/applications/network/telnet/Makefile.mingw (100%) rename {reactos/base => base}/applications/network/telnet/doc/00readme.avs (100%) rename {reactos/base => base}/applications/network/telnet/doc/bugs.txt (100%) rename {reactos/base => base}/applications/network/telnet/doc/changes.txt (100%) rename {reactos/base => base}/applications/network/telnet/doc/license.txt (100%) rename {reactos/base => base}/applications/network/telnet/doc/options.txt (100%) rename {reactos/base => base}/applications/network/telnet/doc/readme.txt (100%) rename {reactos/base => base}/applications/network/telnet/doc/ssh.txt (100%) rename {reactos/base => base}/applications/network/telnet/resource/tnmsg.h (100%) rename {reactos/base => base}/applications/network/telnet/resource/tnmsg.rc (100%) rename {reactos/base => base}/applications/network/telnet/src/ansiprsr.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/ansiprsr.h (100%) rename {reactos/base => base}/applications/network/telnet/src/keytrans.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/keytrans.h (100%) rename {reactos/base => base}/applications/network/telnet/src/stl_bids.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tcharmap.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tcharmap.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tconsole.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tconsole.h (100%) rename {reactos/base => base}/applications/network/telnet/src/telnet.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tkeydef.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tkeydef.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tkeymap.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tkeymap.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tmapldr.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tmapldr.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tmouse.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tmouse.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tnclass.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tnclass.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tnclip.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tnclip.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tncon.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tncon.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tnconfig.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tnconfig.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tnerror.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tnerror.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tnetwork.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tnetwork.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tnmain.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tnmain.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tnmisc.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tnmisc.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tnmsg.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tparams.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tparser.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tscript.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tscript.h (100%) rename {reactos/base => base}/applications/network/telnet/src/tscroll.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/tscroll.h (100%) rename {reactos/base => base}/applications/network/telnet/src/ttelhndl.cpp (100%) rename {reactos/base => base}/applications/network/telnet/src/ttelhndl.h (100%) rename {reactos/base => base}/applications/network/telnet/telnet.cfg (100%) rename {reactos/base => base}/applications/network/telnet/telnet.ico (100%) rename {reactos/base => base}/applications/network/telnet/telnet.ini (100%) rename {reactos/base => base}/applications/network/telnet/telnet.rbuild (100%) rename {reactos/base => base}/applications/network/telnet/telnet.rc (100%) rename {reactos/base => base}/applications/network/tracert/tracert.c (100%) rename {reactos/base => base}/applications/network/tracert/tracert.h (100%) rename {reactos/base => base}/applications/network/tracert/tracert.rbuild (100%) rename {reactos/base => base}/applications/network/tracert/tracert.rc (100%) rename {reactos/base => base}/applications/network/whois/LICENSE.txt (100%) rename {reactos/base => base}/applications/network/whois/whois.c (100%) rename {reactos/base => base}/applications/network/whois/whois.rbuild (100%) rename {reactos/base => base}/applications/network/whois/whois.rc (100%) rename {reactos/base => base}/applications/notepad/ChangeLog (100%) rename {reactos/base => base}/applications/notepad/dialog.c (100%) rename {reactos/base => base}/applications/notepad/dialog.h (100%) rename {reactos/base => base}/applications/notepad/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/notepad/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/notepad/lang/da-DK.rc (100%) rename {reactos/base => base}/applications/notepad/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/notepad/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/notepad/lang/en-US.rc (100%) rename {reactos/base => base}/applications/notepad/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/notepad/lang/eu-ES.rc (100%) rename {reactos/base => base}/applications/notepad/lang/fi-FI.rc (100%) rename {reactos/base => base}/applications/notepad/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/notepad/lang/hu-HU.rc (100%) rename {reactos/base => base}/applications/notepad/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/notepad/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/notepad/lang/ja-JP.rc (100%) rename {reactos/base => base}/applications/notepad/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/notepad/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/notepad/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/notepad/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/notepad/lang/pt-PT.rc (100%) rename {reactos/base => base}/applications/notepad/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/notepad/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/notepad/lang/sl-SI.rc (100%) rename {reactos/base => base}/applications/notepad/lang/sv-SE.rc (100%) rename {reactos/base => base}/applications/notepad/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/notepad/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/notepad/lang/zh-CN.rc (100%) rename {reactos/base => base}/applications/notepad/license.c (100%) rename {reactos/base => base}/applications/notepad/main.c (100%) rename {reactos/base => base}/applications/notepad/main.h (100%) rename {reactos/base => base}/applications/notepad/notepad.h (100%) rename {reactos/base => base}/applications/notepad/notepad.rbuild (100%) rename {reactos/base => base}/applications/notepad/notepad_res.h (100%) rename {reactos/base => base}/applications/notepad/res/notepad.ico (100%) rename {reactos/base => base}/applications/notepad/rsrc.rc (100%) rename {reactos/base => base}/applications/notepad/settings.c (100%) rename {reactos/base => base}/applications/notepad/text.c (100%) rename {reactos/base => base}/applications/regedit/about.c (100%) rename {reactos/base => base}/applications/regedit/childwnd.c (100%) rename {reactos/base => base}/applications/regedit/clb/clb.c (100%) rename {reactos/base => base}/applications/regedit/clb/clb.rbuild (100%) rename {reactos/base => base}/applications/regedit/clb/clb.rc (100%) rename {reactos/base => base}/applications/regedit/clb/clb.spec (100%) rename {reactos/base => base}/applications/regedit/clb/clbdll.h (100%) rename {reactos/base => base}/applications/regedit/clb/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/en-US.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/ja-JP.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/regedit/clb/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/regedit/clb/precomp.h (100%) rename {reactos/base => base}/applications/regedit/clb/resource.h (100%) rename {reactos/base => base}/applications/regedit/clb/rsrc.rc (100%) rename {reactos/base => base}/applications/regedit/edit.c (100%) rename {reactos/base => base}/applications/regedit/find.c (100%) rename {reactos/base => base}/applications/regedit/framewnd.c (100%) rename {reactos/base => base}/applications/regedit/hexedit.c (100%) rename {reactos/base => base}/applications/regedit/hexedit.h (100%) rename {reactos/base => base}/applications/regedit/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/regedit/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/regedit/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/regedit/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/regedit/lang/en-US.rc (100%) rename {reactos/base => base}/applications/regedit/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/regedit/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/regedit/lang/hu-HU.rc (100%) rename {reactos/base => base}/applications/regedit/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/regedit/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/regedit/lang/ja-JP.rc (100%) rename {reactos/base => base}/applications/regedit/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/regedit/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/regedit/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/regedit/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/regedit/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/regedit/lang/pt-PT.rc (100%) rename {reactos/base => base}/applications/regedit/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/regedit/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/regedit/lang/sl-SI.rc (100%) rename {reactos/base => base}/applications/regedit/lang/sv-SE.rc (100%) rename {reactos/base => base}/applications/regedit/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/regedit/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/regedit/lang/zh-CN.rc (100%) rename {reactos/base => base}/applications/regedit/listview.c (100%) rename {reactos/base => base}/applications/regedit/main.c (100%) rename {reactos/base => base}/applications/regedit/main.h (100%) rename {reactos/base => base}/applications/regedit/regedit.c (100%) rename {reactos/base => base}/applications/regedit/regedit.h (100%) rename {reactos/base => base}/applications/regedit/regedit.rbuild (100%) rename {reactos/base => base}/applications/regedit/regedit.rc (100%) rename {reactos/base => base}/applications/regedit/regproc.c (100%) rename {reactos/base => base}/applications/regedit/regproc.h (100%) rename {reactos/base => base}/applications/regedit/res/bin.ico (100%) rename {reactos/base => base}/applications/regedit/res/computer.ico (100%) rename {reactos/base => base}/applications/regedit/res/folder.ico (100%) rename {reactos/base => base}/applications/regedit/res/folderopen.ico (100%) rename {reactos/base => base}/applications/regedit/res/regedit.ico (100%) rename {reactos/base => base}/applications/regedit/res/string.ico (100%) rename {reactos/base => base}/applications/regedit/resource.h (100%) rename {reactos/base => base}/applications/regedit/rsrc.rc (100%) rename {reactos/base => base}/applications/regedit/security.c (100%) rename {reactos/base => base}/applications/regedit/security.h (100%) rename {reactos/base => base}/applications/regedit/treeview.c (100%) rename {reactos/base => base}/applications/regedt32/regedt32.c (100%) rename {reactos/base => base}/applications/regedt32/regedt32.rbuild (100%) rename {reactos/base => base}/applications/regedt32/res/regedt32.ico (100%) rename {reactos/base => base}/applications/regedt32/resource.h (100%) rename {reactos/base => base}/applications/regedt32/resource.rc (100%) rename {reactos/base => base}/applications/sc/control.c (100%) rename {reactos/base => base}/applications/sc/create.c (100%) rename {reactos/base => base}/applications/sc/delete.c (100%) rename {reactos/base => base}/applications/sc/print.c (100%) rename {reactos/base => base}/applications/sc/query.c (100%) rename {reactos/base => base}/applications/sc/sc.c (100%) rename {reactos/base => base}/applications/sc/sc.h (100%) rename {reactos/base => base}/applications/sc/sc.rbuild (100%) rename {reactos/base => base}/applications/sc/sc.rc (100%) rename {reactos/base => base}/applications/sc/start.c (100%) rename {reactos/base => base}/applications/sc/usage.c (100%) rename {reactos/base => base}/applications/screensavers/3dtext/3dtext.c (100%) rename {reactos/base => base}/applications/screensavers/3dtext/3dtext.h (100%) rename {reactos/base => base}/applications/screensavers/3dtext/3dtext.rbuild (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/en-US.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/eu-ES.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/resource.h (100%) rename {reactos/base => base}/applications/screensavers/3dtext/rsrc.rc (100%) rename {reactos/base => base}/applications/screensavers/3dtext/settings.c (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/en-US.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/eu-ES.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/logon.c (100%) rename {reactos/base => base}/applications/screensavers/logon/logon.rbuild (100%) rename {reactos/base => base}/applications/screensavers/logon/logon.rc (100%) rename {reactos/base => base}/applications/screensavers/logon/res/0.bmp (100%) rename {reactos/base => base}/applications/screensavers/logon/res/1.bmp (100%) rename {reactos/base => base}/applications/screensavers/logon/resource.h (100%) rename {reactos/base => base}/applications/screensavers/screensavers.rbuild (100%) rename {reactos/base => base}/applications/shutdown/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/en-US.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/shutdown/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/shutdown/misc.c (100%) rename {reactos/base => base}/applications/shutdown/precomp.h (100%) rename {reactos/base => base}/applications/shutdown/resource.h (100%) rename {reactos/base => base}/applications/shutdown/rsrc.rc (100%) rename {reactos/base => base}/applications/shutdown/shutdown.c (100%) rename {reactos/base => base}/applications/shutdown/shutdown.rbuild (100%) rename {reactos/base => base}/applications/shutdown/shutdown.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/en-US.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/hu-HU.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/ja-JP.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/sv-SE.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/th-TH.rc (100%) rename {reactos/base => base}/applications/sndvol32/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/sndvol32/misc.c (100%) rename {reactos/base => base}/applications/sndvol32/mixer.c (100%) rename {reactos/base => base}/applications/sndvol32/resources.h (100%) rename {reactos/base => base}/applications/sndvol32/resources/sndvol32.ico (100%) rename {reactos/base => base}/applications/sndvol32/rsrc.rc (100%) rename {reactos/base => base}/applications/sndvol32/sndvol32.c (100%) rename {reactos/base => base}/applications/sndvol32/sndvol32.h (100%) rename {reactos/base => base}/applications/sndvol32/sndvol32.rbuild (100%) rename {reactos/base => base}/applications/sndvol32/sndvol32.rc (100%) rename {reactos/base => base}/applications/taskmgr/about.c (100%) rename {reactos/base => base}/applications/taskmgr/about.h (100%) rename {reactos/base => base}/applications/taskmgr/affinity.c (100%) rename {reactos/base => base}/applications/taskmgr/affinity.h (100%) rename {reactos/base => base}/applications/taskmgr/applpage.c (100%) rename {reactos/base => base}/applications/taskmgr/applpage.h (100%) rename {reactos/base => base}/applications/taskmgr/column.c (100%) rename {reactos/base => base}/applications/taskmgr/column.h (100%) rename {reactos/base => base}/applications/taskmgr/dbgchnl.c (100%) rename {reactos/base => base}/applications/taskmgr/dbgchnl.h (100%) rename {reactos/base => base}/applications/taskmgr/debug.c (100%) rename {reactos/base => base}/applications/taskmgr/debug.h (100%) rename {reactos/base => base}/applications/taskmgr/endproc.c (100%) rename {reactos/base => base}/applications/taskmgr/endproc.h (100%) rename {reactos/base => base}/applications/taskmgr/graph.c (100%) rename {reactos/base => base}/applications/taskmgr/graph.h (100%) rename {reactos/base => base}/applications/taskmgr/graphctl.c (100%) rename {reactos/base => base}/applications/taskmgr/graphctl.h (100%) rename {reactos/base => base}/applications/taskmgr/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/da-DK.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/en-US.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/hu-HU.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/id-ID.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/ja-JP.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/sv-SE.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/taskmgr/lang/zh-CN.rc (100%) rename {reactos/base => base}/applications/taskmgr/optnmenu.c (100%) rename {reactos/base => base}/applications/taskmgr/optnmenu.h (100%) rename {reactos/base => base}/applications/taskmgr/perfdata.c (100%) rename {reactos/base => base}/applications/taskmgr/perfdata.h (100%) rename {reactos/base => base}/applications/taskmgr/perfpage.c (100%) rename {reactos/base => base}/applications/taskmgr/perfpage.h (100%) rename {reactos/base => base}/applications/taskmgr/precomp.h (100%) rename {reactos/base => base}/applications/taskmgr/priority.c (100%) rename {reactos/base => base}/applications/taskmgr/priority.h (100%) rename {reactos/base => base}/applications/taskmgr/proclist.c (100%) rename {reactos/base => base}/applications/taskmgr/proclist.h (100%) rename {reactos/base => base}/applications/taskmgr/procpage.c (100%) rename {reactos/base => base}/applications/taskmgr/procpage.h (100%) rename {reactos/base => base}/applications/taskmgr/res/taskmgr.ico (100%) rename {reactos/base => base}/applications/taskmgr/res/trayicon.bmp (100%) rename {reactos/base => base}/applications/taskmgr/res/traymask.bmp (100%) rename {reactos/base => base}/applications/taskmgr/res/window.ico (100%) rename {reactos/base => base}/applications/taskmgr/res/windowsm.ico (100%) rename {reactos/base => base}/applications/taskmgr/resource.h (100%) rename {reactos/base => base}/applications/taskmgr/rsrc.rc (100%) rename {reactos/base => base}/applications/taskmgr/run.c (100%) rename {reactos/base => base}/applications/taskmgr/run.h (100%) rename {reactos/base => base}/applications/taskmgr/taskmgr.c (100%) rename {reactos/base => base}/applications/taskmgr/taskmgr.h (100%) rename {reactos/base => base}/applications/taskmgr/taskmgr.rbuild (100%) rename {reactos/base => base}/applications/taskmgr/taskmgr.rc (100%) rename {reactos/base => base}/applications/taskmgr/trayicon.c (100%) rename {reactos/base => base}/applications/taskmgr/trayicon.h (100%) rename {reactos/base => base}/applications/tsclient/MissTosca.sln (100%) rename {reactos/base => base}/applications/tsclient/mstsc/mstsc.cpp (100%) rename {reactos/base => base}/applications/tsclient/mstsc/mstsc.vcproj (100%) rename {reactos/base => base}/applications/tsclient/mstsc/stdafx.cpp (100%) rename {reactos/base => base}/applications/tsclient/mstsc/stdafx.h (100%) rename {reactos/base => base}/applications/tsclient/mstscax/mstscax.cpp (100%) rename {reactos/base => base}/applications/tsclient/mstscax/mstscax.vcproj (100%) rename {reactos/base => base}/applications/tsclient/mstscax/stdafx.cpp (100%) rename {reactos/base => base}/applications/tsclient/mstscax/stdafx.h (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/mstscax/mstscax.cpp (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/mstscax/mstscax.def (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/mstscax/mstscax.sln (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/mstscax/mstscax.vcproj (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/mstscax/stdafx.cpp (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/mstscax/stdafx.h (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/activex.cpp (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.idl (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.rc (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_h.h (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_i.c (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.idl (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.rc (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_h.h (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_i.c (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.cpp (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.h (100%) rename {reactos/base => base}/applications/tsclient/porting-tools/rdesktop-core-tester/typelib.rh (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/COPYING (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/Makefile.in (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/README (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/bitmap.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/bootstrap (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/cache.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/channels.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/cliprdr.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/config.guess (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/config.sub (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/configure.ac (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/constants.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/disk.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/disk.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/AUTHORS (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/ChangeLog (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/HACKING (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/TODO (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/ipv6.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/keymap-names.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/keymapping.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/keynums.png (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/licensing.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/lspci-channel.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/patches.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/rdesktop.1 (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/redirection.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/doc/seamlessrdp-channel.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/ewmhints.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/indent-all.sh (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/install-sh (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/iso.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/ar (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/common (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/convert-map (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/cs (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/da (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/de (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/de-ch (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/en-dv (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/en-gb (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/en-us (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/es (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/et (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/fi (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/fo (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/fr (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/fr-be (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/fr-ca (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/fr-ch (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/he (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/hr (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/hu (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/is (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/it (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/ja (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/ko (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/lt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/lv (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/mk (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/modifiers (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/nl (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/nl-be (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/no (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/pl (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/pt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/pt-br (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/ru (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/sl (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/sv (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/th (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/keymaps/tr (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/licence.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/lspci.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/mcs.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/mppc.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/orders.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/orders.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/parallel.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/parse.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/printer.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/printercache.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/proto.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/proto.head (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/proto.tail (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/pstcache.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdesktop-core.vcproj (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdesktop.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdesktop.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdesktop.spec (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdp.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdp5.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdpdr.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdpsnd.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdpsnd_libao.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdpsnd_oss.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdpsnd_sgi.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/rdpsnd_sun.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/scancodes.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/seamless.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/seamless.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/secure.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/serial.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/tcp.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/types.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/makefile_nanox (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/makefile_qt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/makefile_qte (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/makefile_svga (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/makefile_xxx (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/nanoxreadme.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/nanoxwin.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/qtereadme.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/qtewin.cpp (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/qtewin.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/qtreadme.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/qtwin.cpp (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/qtwin.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/readme.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/svgareadme.txt (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/svgawin.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/uiports/xxxwin.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/vnc/vnc.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/vnc/vnc.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/vnc/x11stubs.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/vnc/x11stubs.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/xclip.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/xkeymap.c (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/xproto.h (100%) rename {reactos/base => base}/applications/tsclient/rdesktop/xwin.c (100%) rename {reactos/base => base}/applications/winhlp32/callback.c (100%) rename {reactos/base => base}/applications/winhlp32/hlpfile.c (100%) rename {reactos/base => base}/applications/winhlp32/hlpfile.h (100%) rename {reactos/base => base}/applications/winhlp32/lang/bg-BG.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/cs-CZ.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/da-DK.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/de-DE.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/el-GR.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/en-US.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/es-ES.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/fi-FI.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/fr-FR.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/hu-HU.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/it-IT.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/ja-JP.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/ko-KR.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/lt-LT.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/nl-NL.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/no-NO.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/pl-PL.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/pt-BR.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/rm-CH.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/ru-RU.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/sk-SK.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/sl-SI.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/sv-SE.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/tr-TR.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/uk-UA.rc (100%) rename {reactos/base => base}/applications/winhlp32/lang/zh-CN.rc (100%) rename {reactos/base => base}/applications/winhlp32/lex.yy.c (100%) rename {reactos/base => base}/applications/winhlp32/macro.c (100%) rename {reactos/base => base}/applications/winhlp32/macro.h (100%) rename {reactos/base => base}/applications/winhlp32/macro.lex.l (100%) rename {reactos/base => base}/applications/winhlp32/rsrc.rc (100%) rename {reactos/base => base}/applications/winhlp32/string.c (100%) rename {reactos/base => base}/applications/winhlp32/winhelp.c (100%) rename {reactos/base => base}/applications/winhlp32/winhelp.h (100%) rename {reactos/base => base}/applications/winhlp32/winhelp.ico (100%) rename {reactos/base => base}/applications/winhlp32/winhelp_res.h (100%) rename {reactos/base => base}/applications/winhlp32/winhlp32.rbuild (100%) rename {reactos/base => base}/applications/wordpad/Da.rc (100%) rename {reactos/base => base}/applications/wordpad/De.rc (100%) rename {reactos/base => base}/applications/wordpad/En.rc (100%) rename {reactos/base => base}/applications/wordpad/Fr.rc (100%) rename {reactos/base => base}/applications/wordpad/Hu.rc (100%) rename {reactos/base => base}/applications/wordpad/Ja.rc (100%) rename {reactos/base => base}/applications/wordpad/Ko.rc (100%) rename {reactos/base => base}/applications/wordpad/Nl.rc (100%) rename {reactos/base => base}/applications/wordpad/No.rc (100%) rename {reactos/base => base}/applications/wordpad/Pl.rc (100%) rename {reactos/base => base}/applications/wordpad/Ru.rc (100%) rename {reactos/base => base}/applications/wordpad/Si.rc (100%) rename {reactos/base => base}/applications/wordpad/Tr.rc (100%) rename {reactos/base => base}/applications/wordpad/Zh.rc (100%) rename {reactos/base => base}/applications/wordpad/formatbar.bmp (100%) rename {reactos/base => base}/applications/wordpad/print.c (100%) rename {reactos/base => base}/applications/wordpad/registry.c (100%) rename {reactos/base => base}/applications/wordpad/rsrc.rc (100%) rename {reactos/base => base}/applications/wordpad/rtf.ico (100%) rename {reactos/base => base}/applications/wordpad/toolbar.bmp (100%) rename {reactos/base => base}/applications/wordpad/txt.ico (100%) rename {reactos/base => base}/applications/wordpad/wordpad.c (100%) rename {reactos/base => base}/applications/wordpad/wordpad.h (100%) rename {reactos/base => base}/applications/wordpad/wordpad.ico (100%) rename {reactos/base => base}/applications/wordpad/wordpad.rbuild (100%) rename {reactos/base => base}/applications/wordpad/wri.ico (100%) rename {reactos/base => base}/base.rbuild (100%) rename {reactos/base => base}/services/audiosrv/audiosrv.h (100%) rename {reactos/base => base}/services/audiosrv/audiosrv.rbuild (100%) rename {reactos/base => base}/services/audiosrv/audiosrv.rc (100%) rename {reactos/base => base}/services/audiosrv/audiosrv.txt (100%) rename {reactos/base => base}/services/audiosrv/debug.c (100%) rename {reactos/base => base}/services/audiosrv/main.c (100%) rename {reactos/base => base}/services/audiosrv/pnp.c (100%) rename {reactos/base => base}/services/audiosrv/pnp_list_lock.c (100%) rename {reactos/base => base}/services/audiosrv/pnp_list_manager.c (100%) rename {reactos/base => base}/services/dhcp/adapter.c (100%) rename {reactos/base => base}/services/dhcp/alloc.c (100%) rename {reactos/base => base}/services/dhcp/api.c (100%) rename {reactos/base => base}/services/dhcp/compat.c (100%) rename {reactos/base => base}/services/dhcp/design.txt (100%) rename {reactos/base => base}/services/dhcp/dhclient.c (100%) rename {reactos/base => base}/services/dhcp/dhcp.rbuild (100%) rename {reactos/base => base}/services/dhcp/dhcp.rc (100%) rename {reactos/base => base}/services/dhcp/dhcpmain.c (100%) rename {reactos/base => base}/services/dhcp/dispatch.c (100%) rename {reactos/base => base}/services/dhcp/hash.c (100%) rename {reactos/base => base}/services/dhcp/include/cdefs.h (100%) rename {reactos/base => base}/services/dhcp/include/debug.h (100%) rename {reactos/base => base}/services/dhcp/include/dhcp.h (100%) rename {reactos/base => base}/services/dhcp/include/dhcpd.h (100%) rename {reactos/base => base}/services/dhcp/include/dhctoken.h (100%) rename {reactos/base => base}/services/dhcp/include/hash.h (100%) rename {reactos/base => base}/services/dhcp/include/inet.h (100%) rename {reactos/base => base}/services/dhcp/include/osdep.h (100%) rename {reactos/base => base}/services/dhcp/include/predec.h (100%) rename {reactos/base => base}/services/dhcp/include/privsep.h (100%) rename {reactos/base => base}/services/dhcp/include/rosdhcp.h (100%) rename {reactos/base => base}/services/dhcp/include/site.h (100%) rename {reactos/base => base}/services/dhcp/include/stdint.h (100%) rename {reactos/base => base}/services/dhcp/include/sysconf.h (100%) rename {reactos/base => base}/services/dhcp/include/tree.h (100%) rename {reactos/base => base}/services/dhcp/include/version.h (100%) rename {reactos/base => base}/services/dhcp/memory.c (100%) rename {reactos/base => base}/services/dhcp/options.c (100%) rename {reactos/base => base}/services/dhcp/pipe.c (100%) rename {reactos/base => base}/services/dhcp/privsep.c (100%) rename {reactos/base => base}/services/dhcp/socket.c (100%) rename {reactos/base => base}/services/dhcp/tables.c (100%) rename {reactos/base => base}/services/dhcp/timer.c (100%) rename {reactos/base => base}/services/dhcp/tree.c (100%) rename {reactos/base => base}/services/dhcp/util.c (100%) rename {reactos/base => base}/services/eventlog/eventlog.c (100%) rename {reactos/base => base}/services/eventlog/eventlog.h (100%) rename {reactos/base => base}/services/eventlog/eventlog.rbuild (100%) rename {reactos/base => base}/services/eventlog/eventlog.rc (100%) rename {reactos/base => base}/services/eventlog/file.c (100%) rename {reactos/base => base}/services/eventlog/logport.c (100%) rename {reactos/base => base}/services/eventlog/rpc.c (100%) rename {reactos/base => base}/services/rpcss/endpoint.c (100%) rename {reactos/base => base}/services/rpcss/rpcss.c (100%) rename {reactos/base => base}/services/rpcss/rpcss.h (100%) rename {reactos/base => base}/services/rpcss/rpcss.rbuild (100%) rename {reactos/base => base}/services/rpcss/rpcss.rc (100%) rename {reactos/base => base}/services/services.rbuild (100%) rename {reactos/base => base}/services/spoolsv/spoolsv.c (100%) rename {reactos/base => base}/services/spoolsv/spoolsv.rbuild (100%) rename {reactos/base => base}/services/spoolsv/spoolsv.rc (100%) rename {reactos/base => base}/services/svchost/svchost.c (100%) rename {reactos/base => base}/services/svchost/svchost.h (100%) rename {reactos/base => base}/services/svchost/svchost.rbuild (100%) rename {reactos/base => base}/services/svchost/svchost.rc (100%) rename {reactos/base => base}/services/tcpsvcs/chargen.c (100%) rename {reactos/base => base}/services/tcpsvcs/daytime.c (100%) rename {reactos/base => base}/services/tcpsvcs/discard.c (100%) rename {reactos/base => base}/services/tcpsvcs/echo.c (100%) rename {reactos/base => base}/services/tcpsvcs/log.c (100%) rename {reactos/base => base}/services/tcpsvcs/qotd.c (100%) rename {reactos/base => base}/services/tcpsvcs/quotes (100%) rename {reactos/base => base}/services/tcpsvcs/skelserver.c (100%) rename {reactos/base => base}/services/tcpsvcs/tcpsvcs.c (100%) rename {reactos/base => base}/services/tcpsvcs/tcpsvcs.h (100%) rename {reactos/base => base}/services/tcpsvcs/tcpsvcs.rbuild (100%) rename {reactos/base => base}/services/tcpsvcs/tcpsvcs.rc (100%) rename {reactos/base => base}/services/umpnpmgr/umpnpmgr.c (100%) rename {reactos/base => base}/services/umpnpmgr/umpnpmgr.rbuild (100%) rename {reactos/base => base}/services/umpnpmgr/umpnpmgr.rc (100%) rename {reactos/base => base}/setup/reactos/lang/bg-BG.rc (100%) rename {reactos/base => base}/setup/reactos/lang/cs-CZ.rc (100%) rename {reactos/base => base}/setup/reactos/lang/de-DE.rc (100%) rename {reactos/base => base}/setup/reactos/lang/el-GR.rc (100%) rename {reactos/base => base}/setup/reactos/lang/en-US.rc (100%) rename {reactos/base => base}/setup/reactos/lang/es-ES.rc (100%) rename {reactos/base => base}/setup/reactos/lang/fi-FI.rc (100%) rename {reactos/base => base}/setup/reactos/lang/fr-FR.rc (100%) rename {reactos/base => base}/setup/reactos/lang/hu-HU.rc (100%) rename {reactos/base => base}/setup/reactos/lang/id-ID.rc (100%) rename {reactos/base => base}/setup/reactos/lang/it-IT.rc (100%) rename {reactos/base => base}/setup/reactos/lang/ja-JP.rc (100%) rename {reactos/base => base}/setup/reactos/lang/lt-LT.rc (100%) rename {reactos/base => base}/setup/reactos/lang/nl-NL.rc (100%) rename {reactos/base => base}/setup/reactos/lang/no-NO.rc (100%) rename {reactos/base => base}/setup/reactos/lang/pl-PL.rc (100%) rename {reactos/base => base}/setup/reactos/lang/pt-BR.rc (100%) rename {reactos/base => base}/setup/reactos/lang/ru-RU.rc (100%) rename {reactos/base => base}/setup/reactos/lang/sk-SK.rc (100%) rename {reactos/base => base}/setup/reactos/lang/sv-SE.rc (100%) rename {reactos/base => base}/setup/reactos/lang/th-TH.rc (100%) rename {reactos/base => base}/setup/reactos/lang/uk-UA.rc (100%) rename {reactos/base => base}/setup/reactos/lang/zh-CN.rc (100%) rename {reactos/base => base}/setup/reactos/reactos.c (100%) rename {reactos/base => base}/setup/reactos/reactos.rbuild (100%) rename {reactos/base => base}/setup/reactos/reactos.rc (100%) rename {reactos/base => base}/setup/reactos/res/header.bmp (100%) rename {reactos/base => base}/setup/reactos/res/reactos.ico (100%) rename {reactos/base => base}/setup/reactos/res/rosbitmap.bmp (100%) rename {reactos/base => base}/setup/reactos/res/watermark.bmp (100%) rename {reactos/base => base}/setup/reactos/resource.h (100%) rename {reactos/base => base}/setup/reactos/rsrc.rc (100%) rename {reactos/base => base}/setup/setup.rbuild (100%) rename {reactos/base => base}/setup/setup/setup.c (100%) rename {reactos/base => base}/setup/setup/setup.rbuild (100%) rename {reactos/base => base}/setup/setup/setup.rc (100%) rename {reactos/base => base}/setup/usetup/bootsup.c (100%) rename {reactos/base => base}/setup/usetup/bootsup.h (100%) rename {reactos/base => base}/setup/usetup/cabinet.c (100%) rename {reactos/base => base}/setup/usetup/cabinet.h (100%) rename {reactos/base => base}/setup/usetup/chkdsk.c (100%) rename {reactos/base => base}/setup/usetup/chkdsk.h (100%) rename {reactos/base => base}/setup/usetup/drivesup.c (100%) rename {reactos/base => base}/setup/usetup/drivesup.h (100%) rename {reactos/base => base}/setup/usetup/errorcode.h (100%) rename {reactos/base => base}/setup/usetup/filequeue.c (100%) rename {reactos/base => base}/setup/usetup/filequeue.h (100%) rename {reactos/base => base}/setup/usetup/filesup.c (100%) rename {reactos/base => base}/setup/usetup/filesup.h (100%) rename {reactos/base => base}/setup/usetup/format.c (100%) rename {reactos/base => base}/setup/usetup/format.h (100%) rename {reactos/base => base}/setup/usetup/fslist.c (100%) rename {reactos/base => base}/setup/usetup/fslist.h (100%) rename {reactos/base => base}/setup/usetup/genlist.c (100%) rename {reactos/base => base}/setup/usetup/genlist.h (100%) rename {reactos/base => base}/setup/usetup/host.h (100%) rename {reactos/base => base}/setup/usetup/inffile.c (100%) rename {reactos/base => base}/setup/usetup/inffile.h (100%) rename {reactos/base => base}/setup/usetup/inicache.c (100%) rename {reactos/base => base}/setup/usetup/inicache.h (100%) rename {reactos/base => base}/setup/usetup/interface/consup.c (100%) rename {reactos/base => base}/setup/usetup/interface/consup.h (100%) rename {reactos/base => base}/setup/usetup/interface/devinst.c (100%) rename {reactos/base => base}/setup/usetup/interface/usetup.c (100%) rename {reactos/base => base}/setup/usetup/lang/af-ZA.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-AE.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-BH.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-DZ.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-EG.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-IQ.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-JO.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-KW.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-LB.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-LY.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-MA.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-OM.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-QA.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-SA.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-SY.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-TN.h (100%) rename {reactos/base => base}/setup/usetup/lang/ar-YE.h (100%) rename {reactos/base => base}/setup/usetup/lang/az-AZ.h (100%) rename {reactos/base => base}/setup/usetup/lang/be-BY.h (100%) rename {reactos/base => base}/setup/usetup/lang/bg-BG.h (100%) rename {reactos/base => base}/setup/usetup/lang/ca-ES.h (100%) rename {reactos/base => base}/setup/usetup/lang/cs-CZ.h (100%) rename {reactos/base => base}/setup/usetup/lang/da-DK.h (100%) rename {reactos/base => base}/setup/usetup/lang/de-AT.h (100%) rename {reactos/base => base}/setup/usetup/lang/de-CH.h (100%) rename {reactos/base => base}/setup/usetup/lang/de-DE.h (100%) rename {reactos/base => base}/setup/usetup/lang/de-LI.h (100%) rename {reactos/base => base}/setup/usetup/lang/de-LU.h (100%) rename {reactos/base => base}/setup/usetup/lang/dv-MV.h (100%) rename {reactos/base => base}/setup/usetup/lang/el-GR.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-AU.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-BZ.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-CA.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-CB.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-GB.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-IE.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-JM.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-NZ.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-PH.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-TT.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-US.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-ZA.h (100%) rename {reactos/base => base}/setup/usetup/lang/en-ZW.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-AR.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-BO.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-CL.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-CO.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-CR.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-DO.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-EC.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-ES.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-GT.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-HN.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-MX.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-NI.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-PA.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-PE.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-PR.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-PY.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-SV.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-UY.h (100%) rename {reactos/base => base}/setup/usetup/lang/es-VE.h (100%) rename {reactos/base => base}/setup/usetup/lang/et-EE.h (100%) rename {reactos/base => base}/setup/usetup/lang/eu-ES.h (100%) rename {reactos/base => base}/setup/usetup/lang/fa-IR.h (100%) rename {reactos/base => base}/setup/usetup/lang/fi-FI.h (100%) rename {reactos/base => base}/setup/usetup/lang/fo-FO.h (100%) rename {reactos/base => base}/setup/usetup/lang/fr-BE.h (100%) rename {reactos/base => base}/setup/usetup/lang/fr-CA.h (100%) rename {reactos/base => base}/setup/usetup/lang/fr-CH.h (100%) rename {reactos/base => base}/setup/usetup/lang/fr-FR.h (100%) rename {reactos/base => base}/setup/usetup/lang/fr-LU.h (100%) rename {reactos/base => base}/setup/usetup/lang/fr-MC.h (100%) rename {reactos/base => base}/setup/usetup/lang/gl-ES.h (100%) rename {reactos/base => base}/setup/usetup/lang/gu-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/he-IL.h (100%) rename {reactos/base => base}/setup/usetup/lang/hi-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/hr-HR.h (100%) rename {reactos/base => base}/setup/usetup/lang/hu-HU.h (100%) rename {reactos/base => base}/setup/usetup/lang/hy-AM.h (100%) rename {reactos/base => base}/setup/usetup/lang/id-ID.h (100%) rename {reactos/base => base}/setup/usetup/lang/is-IS.h (100%) rename {reactos/base => base}/setup/usetup/lang/it-CH.h (100%) rename {reactos/base => base}/setup/usetup/lang/it-IT.h (100%) rename {reactos/base => base}/setup/usetup/lang/ja-JP.h (100%) rename {reactos/base => base}/setup/usetup/lang/ka-GE.h (100%) rename {reactos/base => base}/setup/usetup/lang/kk-KZ.h (100%) rename {reactos/base => base}/setup/usetup/lang/kn-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/ko-KR.h (100%) rename {reactos/base => base}/setup/usetup/lang/kok-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/ky-KG.h (100%) rename {reactos/base => base}/setup/usetup/lang/lt-LT.h (100%) rename {reactos/base => base}/setup/usetup/lang/lv-LV.h (100%) rename {reactos/base => base}/setup/usetup/lang/mk-MK.h (100%) rename {reactos/base => base}/setup/usetup/lang/mn-MN.h (100%) rename {reactos/base => base}/setup/usetup/lang/mr-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/ms-BN.h (100%) rename {reactos/base => base}/setup/usetup/lang/ms-MY.h (100%) rename {reactos/base => base}/setup/usetup/lang/nl-BE.h (100%) rename {reactos/base => base}/setup/usetup/lang/nl-NL.h (100%) rename {reactos/base => base}/setup/usetup/lang/nn-NO.h (100%) rename {reactos/base => base}/setup/usetup/lang/pa-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/pl-PL.h (100%) rename {reactos/base => base}/setup/usetup/lang/pt-BR.h (100%) rename {reactos/base => base}/setup/usetup/lang/pt-PT.h (100%) rename {reactos/base => base}/setup/usetup/lang/ro-RO.h (100%) rename {reactos/base => base}/setup/usetup/lang/ru-RU.h (100%) rename {reactos/base => base}/setup/usetup/lang/sa-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/sk-SK.h (100%) rename {reactos/base => base}/setup/usetup/lang/sl-SI.h (100%) rename {reactos/base => base}/setup/usetup/lang/sq-AL.h (100%) rename {reactos/base => base}/setup/usetup/lang/sr-SP.h (100%) rename {reactos/base => base}/setup/usetup/lang/sv-FI.h (100%) rename {reactos/base => base}/setup/usetup/lang/sv-SE.h (100%) rename {reactos/base => base}/setup/usetup/lang/sw-KE.h (100%) rename {reactos/base => base}/setup/usetup/lang/syr-SY.h (100%) rename {reactos/base => base}/setup/usetup/lang/ta-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/te-IN.h (100%) rename {reactos/base => base}/setup/usetup/lang/th-TH.h (100%) rename {reactos/base => base}/setup/usetup/lang/tr-TR.h (100%) rename {reactos/base => base}/setup/usetup/lang/tt-TA.h (100%) rename {reactos/base => base}/setup/usetup/lang/uk-UA.h (100%) rename {reactos/base => base}/setup/usetup/lang/ur-PK.h (100%) rename {reactos/base => base}/setup/usetup/lang/uz-UZ.h (100%) rename {reactos/base => base}/setup/usetup/lang/vi-VN.h (100%) rename {reactos/base => base}/setup/usetup/lang/zh-CN.h (100%) rename {reactos/base => base}/setup/usetup/lang/zh-HK.h (100%) rename {reactos/base => base}/setup/usetup/lang/zh-MO.h (100%) rename {reactos/base => base}/setup/usetup/lang/zh-SG.h (100%) rename {reactos/base => base}/setup/usetup/lang/zh-TW.h (100%) rename {reactos/base => base}/setup/usetup/mui.c (100%) rename {reactos/base => base}/setup/usetup/mui.h (100%) rename {reactos/base => base}/setup/usetup/muifonts.h (100%) rename {reactos/base => base}/setup/usetup/muilanguages.h (100%) rename {reactos/base => base}/setup/usetup/native/console.c (100%) rename {reactos/base => base}/setup/usetup/native/fslist.c (100%) rename {reactos/base => base}/setup/usetup/native/host_native.h (100%) rename {reactos/base => base}/setup/usetup/native/utils/console.c (100%) rename {reactos/base => base}/setup/usetup/native/utils/console.h (100%) rename {reactos/base => base}/setup/usetup/native/utils/keytrans.c (100%) rename {reactos/base => base}/setup/usetup/native/utils/keytrans.h (100%) rename {reactos/base => base}/setup/usetup/partlist.c (100%) rename {reactos/base => base}/setup/usetup/partlist.h (100%) rename {reactos/base => base}/setup/usetup/progress.c (100%) rename {reactos/base => base}/setup/usetup/progress.h (100%) rename {reactos/base => base}/setup/usetup/registry.c (100%) rename {reactos/base => base}/setup/usetup/registry.h (100%) rename {reactos/base => base}/setup/usetup/settings.c (100%) rename {reactos/base => base}/setup/usetup/settings.h (100%) rename {reactos/base => base}/setup/usetup/usetup.h (100%) rename {reactos/base => base}/setup/usetup/usetup.rbuild (100%) rename {reactos/base => base}/setup/usetup/usetup.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/bg-BG.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/cs-CZ.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/da-DK.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/de-DE.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/el-GR.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/en-US.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/es-ES.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/fr-FR.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/hu-HU.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/id-ID.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/it-IT.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/ja-JP.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/lt-LT.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/no-NO.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/pl-PL.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/ru-RU.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/sk-SK.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/uk-UA.rc (100%) rename {reactos/base => base}/setup/vmwinst/lang/zh-CN.rc (100%) rename {reactos/base => base}/setup/vmwinst/resources/header.bmp (100%) rename {reactos/base => base}/setup/vmwinst/resources/watermark.bmp (100%) rename {reactos/base => base}/setup/vmwinst/rsrc.rc (100%) rename {reactos/base => base}/setup/vmwinst/vmwinst.c (100%) rename {reactos/base => base}/setup/vmwinst/vmwinst.h (100%) rename {reactos/base => base}/setup/vmwinst/vmwinst.rbuild (100%) rename {reactos/base => base}/setup/vmwinst/vmwinst.rc (100%) rename {reactos/base => base}/setup/welcome/lang/bg-BG.rc (100%) rename {reactos/base => base}/setup/welcome/lang/cs-CZ.rc (100%) rename {reactos/base => base}/setup/welcome/lang/da-DK.rc (100%) rename {reactos/base => base}/setup/welcome/lang/de-DE.rc (100%) rename {reactos/base => base}/setup/welcome/lang/el-GR.rc (100%) rename {reactos/base => base}/setup/welcome/lang/en-US.rc (100%) rename {reactos/base => base}/setup/welcome/lang/es-ES.rc (100%) rename {reactos/base => base}/setup/welcome/lang/fr-FR.rc (100%) rename {reactos/base => base}/setup/welcome/lang/hu-HU.rc (100%) rename {reactos/base => base}/setup/welcome/lang/id-ID.rc (100%) rename {reactos/base => base}/setup/welcome/lang/it-IT.rc (100%) rename {reactos/base => base}/setup/welcome/lang/ja-JP.rc (100%) rename {reactos/base => base}/setup/welcome/lang/lt-LT.rc (100%) rename {reactos/base => base}/setup/welcome/lang/nl-NL.rc (100%) rename {reactos/base => base}/setup/welcome/lang/no-NO.rc (100%) rename {reactos/base => base}/setup/welcome/lang/pl-PL.rc (100%) rename {reactos/base => base}/setup/welcome/lang/pt-BR.rc (100%) rename {reactos/base => base}/setup/welcome/lang/ru-RU.rc (100%) rename {reactos/base => base}/setup/welcome/lang/sk-SK.rc (100%) rename {reactos/base => base}/setup/welcome/lang/sv-SE.rc (100%) rename {reactos/base => base}/setup/welcome/lang/th-TH.rc (100%) rename {reactos/base => base}/setup/welcome/lang/uk-UA.rc (100%) rename {reactos/base => base}/setup/welcome/lang/zh-CN.rc (100%) rename {reactos/base => base}/setup/welcome/res/title.bmp (100%) rename {reactos/base => base}/setup/welcome/res/welcome.ico (100%) rename {reactos/base => base}/setup/welcome/resource.h (100%) rename {reactos/base => base}/setup/welcome/rsrc.rc (100%) rename {reactos/base => base}/setup/welcome/welcome.c (100%) rename {reactos/base => base}/setup/welcome/welcome.rbuild (100%) rename {reactos/base => base}/setup/welcome/welcome.rc (100%) rename {reactos/base => base}/shell/cmd/alias.c (100%) rename {reactos/base => base}/shell/cmd/attrib.c (100%) rename {reactos/base => base}/shell/cmd/batch.c (100%) rename {reactos/base => base}/shell/cmd/batch.h (100%) rename {reactos/base => base}/shell/cmd/beep.c (100%) rename {reactos/base => base}/shell/cmd/call.c (100%) rename {reactos/base => base}/shell/cmd/chcp.c (100%) rename {reactos/base => base}/shell/cmd/choice.c (100%) rename {reactos/base => base}/shell/cmd/cls.c (100%) rename {reactos/base => base}/shell/cmd/cmd.c (100%) rename {reactos/base => base}/shell/cmd/cmd.h (100%) rename {reactos/base => base}/shell/cmd/cmd.rbuild (100%) rename {reactos/base => base}/shell/cmd/cmd.rc (100%) rename {reactos/base => base}/shell/cmd/cmddbg.c (100%) rename {reactos/base => base}/shell/cmd/cmddbg.h (100%) rename {reactos/base => base}/shell/cmd/cmdinput.c (100%) rename {reactos/base => base}/shell/cmd/cmdtable.c (100%) rename {reactos/base => base}/shell/cmd/cmdver.h (100%) rename {reactos/base => base}/shell/cmd/color.c (100%) rename {reactos/base => base}/shell/cmd/config.h (100%) rename {reactos/base => base}/shell/cmd/console.c (100%) rename {reactos/base => base}/shell/cmd/copy.c (100%) rename {reactos/base => base}/shell/cmd/date.c (100%) rename {reactos/base => base}/shell/cmd/del.c (100%) rename {reactos/base => base}/shell/cmd/delay.c (100%) rename {reactos/base => base}/shell/cmd/dir.c (100%) rename {reactos/base => base}/shell/cmd/dirstack.c (100%) rename {reactos/base => base}/shell/cmd/echo.c (100%) rename {reactos/base => base}/shell/cmd/error.c (100%) rename {reactos/base => base}/shell/cmd/filecomp.c (100%) rename {reactos/base => base}/shell/cmd/files.txt (100%) rename {reactos/base => base}/shell/cmd/for.c (100%) rename {reactos/base => base}/shell/cmd/free.c (100%) rename {reactos/base => base}/shell/cmd/goto.c (100%) rename {reactos/base => base}/shell/cmd/history.c (100%) rename {reactos/base => base}/shell/cmd/history.txt (100%) rename {reactos/base => base}/shell/cmd/if.c (100%) rename {reactos/base => base}/shell/cmd/internal.c (100%) rename {reactos/base => base}/shell/cmd/label.c (100%) rename {reactos/base => base}/shell/cmd/lang/de-DE.rc (100%) rename {reactos/base => base}/shell/cmd/lang/el-GR.rc (100%) rename {reactos/base => base}/shell/cmd/lang/en-US.rc (100%) rename {reactos/base => base}/shell/cmd/lang/es-ES.rc (100%) rename {reactos/base => base}/shell/cmd/lang/fr-FR.rc (100%) rename {reactos/base => base}/shell/cmd/lang/hu-HU.rc (100%) rename {reactos/base => base}/shell/cmd/lang/id-ID.rc (100%) rename {reactos/base => base}/shell/cmd/lang/it-IT.rc (100%) rename {reactos/base => base}/shell/cmd/lang/ja-JP.rc (100%) rename {reactos/base => base}/shell/cmd/lang/no-NO.rc (100%) rename {reactos/base => base}/shell/cmd/lang/pl-PL.rc (100%) rename {reactos/base => base}/shell/cmd/lang/ru-RU.rc (100%) rename {reactos/base => base}/shell/cmd/lang/uk-UA.rc (100%) rename {reactos/base => base}/shell/cmd/license.txt (100%) rename {reactos/base => base}/shell/cmd/locale.c (100%) rename {reactos/base => base}/shell/cmd/main.c (100%) rename {reactos/base => base}/shell/cmd/memory.c (100%) rename {reactos/base => base}/shell/cmd/misc.c (100%) rename {reactos/base => base}/shell/cmd/move.c (100%) rename {reactos/base => base}/shell/cmd/msgbox.c (100%) rename {reactos/base => base}/shell/cmd/parser.c (100%) rename {reactos/base => base}/shell/cmd/path.c (100%) rename {reactos/base => base}/shell/cmd/pause.c (100%) rename {reactos/base => base}/shell/cmd/precomp.h (100%) rename {reactos/base => base}/shell/cmd/prompt.c (100%) rename {reactos/base => base}/shell/cmd/readme.txt (100%) rename {reactos/base => base}/shell/cmd/readme2.txt (100%) rename {reactos/base => base}/shell/cmd/redir.c (100%) rename {reactos/base => base}/shell/cmd/ren.c (100%) rename {reactos/base => base}/shell/cmd/replace.c (100%) rename {reactos/base => base}/shell/cmd/res/terminal.ico (100%) rename {reactos/base => base}/shell/cmd/resource.h (100%) rename {reactos/base => base}/shell/cmd/screen.c (100%) rename {reactos/base => base}/shell/cmd/set.c (100%) rename {reactos/base => base}/shell/cmd/setlocal.c (100%) rename {reactos/base => base}/shell/cmd/shift.c (100%) rename {reactos/base => base}/shell/cmd/start.c (100%) rename {reactos/base => base}/shell/cmd/strtoclr.c (100%) rename {reactos/base => base}/shell/cmd/time.c (100%) rename {reactos/base => base}/shell/cmd/timer.c (100%) rename {reactos/base => base}/shell/cmd/title.c (100%) rename {reactos/base => base}/shell/cmd/todo.txt (100%) rename {reactos/base => base}/shell/cmd/type.c (100%) rename {reactos/base => base}/shell/cmd/ver.c (100%) rename {reactos/base => base}/shell/cmd/verify.c (100%) rename {reactos/base => base}/shell/cmd/vol.c (100%) rename {reactos/base => base}/shell/cmd/where.c (100%) rename {reactos/base => base}/shell/cmd/window.c (100%) rename {reactos/base => base}/shell/explorer-new/comcsup.h (100%) rename {reactos/base => base}/shell/explorer-new/desktop.c (100%) rename {reactos/base => base}/shell/explorer-new/dragdrop.c (100%) rename {reactos/base => base}/shell/explorer-new/explorer.c (100%) rename {reactos/base => base}/shell/explorer-new/explorer.rbuild (100%) rename {reactos/base => base}/shell/explorer-new/explorer.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/bg-BG.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/cs-CZ.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/de-DE.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/en-US.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/es-ES.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/fr-FR.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/it-IT.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/ko-KR.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/lt-LT.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/no-NO.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/pl-PL.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/ru-RU.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/sk-SK.rc (100%) rename {reactos/base => base}/shell/explorer-new/lang/uk-UA.rc (100%) rename {reactos/base => base}/shell/explorer-new/precomp.h (100%) rename {reactos/base => base}/shell/explorer-new/res/logov.bmp (100%) rename {reactos/base => base}/shell/explorer-new/res/start.ico (100%) rename {reactos/base => base}/shell/explorer-new/resource.h (100%) rename {reactos/base => base}/shell/explorer-new/startmnu.c (100%) rename {reactos/base => base}/shell/explorer-new/taskband.c (100%) rename {reactos/base => base}/shell/explorer-new/taskswnd.c (100%) rename {reactos/base => base}/shell/explorer-new/tbsite.c (100%) rename {reactos/base => base}/shell/explorer-new/todo.h (100%) rename {reactos/base => base}/shell/explorer-new/trayntfy.c (100%) rename {reactos/base => base}/shell/explorer-new/trayprop.c (100%) rename {reactos/base => base}/shell/explorer-new/traywnd.c (100%) rename {reactos/base => base}/shell/explorer-new/undoc.h (100%) rename {reactos/base => base}/shell/explorer/Doxyfile (100%) rename {reactos/base => base}/shell/explorer/Doxyfile-all (100%) rename {reactos/base => base}/shell/explorer/Jamfile (100%) rename {reactos/base => base}/shell/explorer/Make-rosshell-MinGW (100%) rename {reactos/base => base}/shell/explorer/Make-rosshell.mak (100%) rename {reactos/base => base}/shell/explorer/Makefile-MinGW (100%) rename {reactos/base => base}/shell/explorer/Makefile-Wine (100%) rename {reactos/base => base}/shell/explorer/Makefile-precomp (100%) rename {reactos/base => base}/shell/explorer/desktop/desktop.cpp (100%) rename {reactos/base => base}/shell/explorer/desktop/desktop.h (100%) rename {reactos/base => base}/shell/explorer/dialogs/searchprogram.cpp (100%) rename {reactos/base => base}/shell/explorer/dialogs/searchprogram.h (100%) rename {reactos/base => base}/shell/explorer/dialogs/settings.cpp (100%) rename {reactos/base => base}/shell/explorer/dialogs/settings.h (100%) rename {reactos/base => base}/shell/explorer/doc/TODO.txt (100%) rename {reactos/base => base}/shell/explorer/doc/changes.txt (100%) rename {reactos/base => base}/shell/explorer/doc/readme.txt (100%) rename {reactos/base => base}/shell/explorer/doxy-footer.html (100%) rename {reactos/base => base}/shell/explorer/doxy-footer.htmt (100%) rename {reactos/base => base}/shell/explorer/explorer-bg.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-bn.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-cfg-template.xml (100%) rename {reactos/base => base}/shell/explorer/explorer-cn-msvc.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-cn.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-cz.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-de.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-en.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-es.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-fr.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-gr.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-hu.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-id.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-it.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-jp.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-ko.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-nl.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-no.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-pl.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-pt.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-ro.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-ru.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-sk.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-sv.rc (100%) rename {reactos/base => base}/shell/explorer/explorer-uk.rc (100%) rename {reactos/base => base}/shell/explorer/explorer.cpp (100%) rename {reactos/base => base}/shell/explorer/explorer.dsp (100%) rename {reactos/base => base}/shell/explorer/explorer.dsw (100%) rename {reactos/base => base}/shell/explorer/explorer.exe.manifest (100%) rename {reactos/base => base}/shell/explorer/explorer.h (100%) rename {reactos/base => base}/shell/explorer/explorer.rbuild (100%) rename {reactos/base => base}/shell/explorer/explorer.rc (100%) rename {reactos/base => base}/shell/explorer/explorer.sln (100%) rename {reactos/base => base}/shell/explorer/explorer.vcproj (100%) rename {reactos/base => base}/shell/explorer/explorer_intres.rc (100%) rename {reactos/base => base}/shell/explorer/externals.h (100%) rename {reactos/base => base}/shell/explorer/globals.h (100%) rename {reactos/base => base}/shell/explorer/i386-stub-win32.c (100%) rename {reactos/base => base}/shell/explorer/make-docu.sh (100%) rename {reactos/base => base}/shell/explorer/make-full-docu.bat (100%) rename {reactos/base => base}/shell/explorer/make_explorer.dsp (100%) rename {reactos/base => base}/shell/explorer/make_explorer.vcproj (100%) rename {reactos/base => base}/shell/explorer/make_rosshell.dsp (100%) rename {reactos/base => base}/shell/explorer/makearchive.bat (100%) rename {reactos/base => base}/shell/explorer/notifyhook/notifyhook.c (100%) rename {reactos/base => base}/shell/explorer/notifyhook/notifyhook.def (100%) rename {reactos/base => base}/shell/explorer/notifyhook/notifyhook.dsp (100%) rename {reactos/base => base}/shell/explorer/notifyhook/notifyhook.h (100%) rename {reactos/base => base}/shell/explorer/notifyhook/notifyhook.rbuild (100%) rename {reactos/base => base}/shell/explorer/notifyhook/notifyhook.rc (100%) rename {reactos/base => base}/shell/explorer/notifyhook/notifyhook.vcproj (100%) rename {reactos/base => base}/shell/explorer/precomp.cpp (100%) rename {reactos/base => base}/shell/explorer/precomp.h (100%) rename {reactos/base => base}/shell/explorer/project-root.jam (100%) rename {reactos/base => base}/shell/explorer/rc-mingw.jam (100%) rename {reactos/base => base}/shell/explorer/res/action.ico (100%) rename {reactos/base => base}/shell/explorer/res/administration.ico (100%) rename {reactos/base => base}/shell/explorer/res/appicon.ico (100%) rename {reactos/base => base}/shell/explorer/res/apps.ico (100%) rename {reactos/base => base}/shell/explorer/res/arrow.ico (100%) rename {reactos/base => base}/shell/explorer/res/arrow_dwn.ico (100%) rename {reactos/base => base}/shell/explorer/res/arrow_up.ico (100%) rename {reactos/base => base}/shell/explorer/res/arrowsel.ico (100%) rename {reactos/base => base}/shell/explorer/res/computer.ico (100%) rename {reactos/base => base}/shell/explorer/res/config.ico (100%) rename {reactos/base => base}/shell/explorer/res/control-panel.ico (100%) rename {reactos/base => base}/shell/explorer/res/desktop-settings.ico (100%) rename {reactos/base => base}/shell/explorer/res/documents.ico (100%) rename {reactos/base => base}/shell/explorer/res/dot.ico (100%) rename {reactos/base => base}/shell/explorer/res/dot_red.ico (100%) rename {reactos/base => base}/shell/explorer/res/dot_trans.ico (100%) rename {reactos/base => base}/shell/explorer/res/drivebar.bmp (100%) rename {reactos/base => base}/shell/explorer/res/explorer.ico (100%) rename {reactos/base => base}/shell/explorer/res/favorites.ico (100%) rename {reactos/base => base}/shell/explorer/res/floating.ico (100%) rename {reactos/base => base}/shell/explorer/res/folder.ico (100%) rename {reactos/base => base}/shell/explorer/res/icoali10.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig0.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig1.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig2.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig3.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig4.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig5.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig6.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig7.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig8.bmp (100%) rename {reactos/base => base}/shell/explorer/res/icoalig9.bmp (100%) rename {reactos/base => base}/shell/explorer/res/images.bmp (100%) rename {reactos/base => base}/shell/explorer/res/info.ico (100%) rename {reactos/base => base}/shell/explorer/res/logoff.ico (100%) rename {reactos/base => base}/shell/explorer/res/logov.bmp (100%) rename {reactos/base => base}/shell/explorer/res/logov.psd (100%) rename {reactos/base => base}/shell/explorer/res/logov16.bmp (100%) rename {reactos/base => base}/shell/explorer/res/logov256.bmp (100%) rename {reactos/base => base}/shell/explorer/res/mdi.bmp (100%) rename {reactos/base => base}/shell/explorer/res/minimize.ico (100%) rename {reactos/base => base}/shell/explorer/res/network-conns.ico (100%) rename {reactos/base => base}/shell/explorer/res/network.ico (100%) rename {reactos/base => base}/shell/explorer/res/notify_l.ico (100%) rename {reactos/base => base}/shell/explorer/res/notify_r.ico (100%) rename {reactos/base => base}/shell/explorer/res/printer.ico (100%) rename {reactos/base => base}/shell/explorer/res/reactos.ico (100%) rename {reactos/base => base}/shell/explorer/res/recent-documents.ico (100%) rename {reactos/base => base}/shell/explorer/res/restart.ico (100%) rename {reactos/base => base}/shell/explorer/res/ros-big.ico (100%) rename {reactos/base => base}/shell/explorer/res/sdi.bmp (100%) rename {reactos/base => base}/shell/explorer/res/search-doc.ico (100%) rename {reactos/base => base}/shell/explorer/res/search.ico (100%) rename {reactos/base => base}/shell/explorer/res/shutdown.ico (100%) rename {reactos/base => base}/shell/explorer/res/speaker.ico (100%) rename {reactos/base => base}/shell/explorer/res/startmenu.ico (100%) rename {reactos/base => base}/shell/explorer/res/toolbar.bmp (100%) rename {reactos/base => base}/shell/explorer/resource.h (100%) rename {reactos/base => base}/shell/explorer/rosshell.dsp (100%) rename {reactos/base => base}/shell/explorer/rosshell.dsw (100%) rename {reactos/base => base}/shell/explorer/services/shellservices.cpp (100%) rename {reactos/base => base}/shell/explorer/services/shellservices.h (100%) rename {reactos/base => base}/shell/explorer/services/startup.c (100%) rename {reactos/base => base}/shell/explorer/shell/entries.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/entries.h (100%) rename {reactos/base => base}/shell/explorer/shell/fatfs.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/fatfs.h (100%) rename {reactos/base => base}/shell/explorer/shell/filechild.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/filechild.h (100%) rename {reactos/base => base}/shell/explorer/shell/mainframe.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/mainframe.h (100%) rename {reactos/base => base}/shell/explorer/shell/ntobjfs.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/ntobjfs.h (100%) rename {reactos/base => base}/shell/explorer/shell/pane.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/pane.h (100%) rename {reactos/base => base}/shell/explorer/shell/regfs.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/regfs.h (100%) rename {reactos/base => base}/shell/explorer/shell/shellbrowser.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/shellbrowser.h (100%) rename {reactos/base => base}/shell/explorer/shell/shellfs.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/shellfs.h (100%) rename {reactos/base => base}/shell/explorer/shell/unixfs.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/unixfs.h (100%) rename {reactos/base => base}/shell/explorer/shell/webchild.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/webchild.h (100%) rename {reactos/base => base}/shell/explorer/shell/winfs.cpp (100%) rename {reactos/base => base}/shell/explorer/shell/winfs.h (100%) rename {reactos/base => base}/shell/explorer/taskbar/desktopbar.cpp (100%) rename {reactos/base => base}/shell/explorer/taskbar/desktopbar.h (100%) rename {reactos/base => base}/shell/explorer/taskbar/favorites.cpp (100%) rename {reactos/base => base}/shell/explorer/taskbar/favorites.h (100%) rename {reactos/base => base}/shell/explorer/taskbar/quicklaunch.cpp (100%) rename {reactos/base => base}/shell/explorer/taskbar/quicklaunch.h (100%) rename {reactos/base => base}/shell/explorer/taskbar/startmenu.cpp (100%) rename {reactos/base => base}/shell/explorer/taskbar/startmenu.h (100%) rename {reactos/base => base}/shell/explorer/taskbar/taskbar.cpp (100%) rename {reactos/base => base}/shell/explorer/taskbar/taskbar.h (100%) rename {reactos/base => base}/shell/explorer/taskbar/traynotify.cpp (100%) rename {reactos/base => base}/shell/explorer/taskbar/traynotify.h (100%) rename {reactos/base => base}/shell/explorer/utility/dragdropimpl.cpp (100%) rename {reactos/base => base}/shell/explorer/utility/dragdropimpl.h (100%) rename {reactos/base => base}/shell/explorer/utility/shellbrowserimpl.cpp (100%) rename {reactos/base => base}/shell/explorer/utility/shellbrowserimpl.h (100%) rename {reactos/base => base}/shell/explorer/utility/shellclasses.cpp (100%) rename {reactos/base => base}/shell/explorer/utility/shellclasses.dsp (100%) rename {reactos/base => base}/shell/explorer/utility/shellclasses.dsw (100%) rename {reactos/base => base}/shell/explorer/utility/shellclasses.h (100%) rename {reactos/base => base}/shell/explorer/utility/shelltests.cpp (100%) rename {reactos/base => base}/shell/explorer/utility/splitpath.c (100%) rename {reactos/base => base}/shell/explorer/utility/treedroptarget.h (100%) rename {reactos/base => base}/shell/explorer/utility/utility.cpp (100%) rename {reactos/base => base}/shell/explorer/utility/utility.h (100%) rename {reactos/base => base}/shell/explorer/utility/window.cpp (100%) rename {reactos/base => base}/shell/explorer/utility/window.h (100%) rename {reactos/base => base}/shell/explorer/utility/xmlstorage.cpp (100%) rename {reactos/base => base}/shell/explorer/utility/xmlstorage.h (100%) rename {reactos/base => base}/shell/explorer/utility/xs-native.cpp (100%) rename {reactos/base => base}/shell/explorer/wexplorer.dsw (100%) rename {reactos/base => base}/shell/shell.rbuild (100%) rename {reactos/base => base}/system/autochk/autochk.c (100%) rename {reactos/base => base}/system/autochk/autochk.rbuild (100%) rename {reactos/base => base}/system/autochk/autochk.rc (100%) rename {reactos/base => base}/system/bootok/bootok.c (100%) rename {reactos/base => base}/system/bootok/bootok.rbuild (100%) rename {reactos/base => base}/system/bootok/bootok.rc (100%) rename {reactos/base => base}/system/expand/expand.c (100%) rename {reactos/base => base}/system/expand/expand.rbuild (100%) rename {reactos/base => base}/system/expand/expand.rc (100%) rename {reactos/base => base}/system/expand/lang/bg-BG.rc (100%) rename {reactos/base => base}/system/expand/lang/cs-CZ.rc (100%) rename {reactos/base => base}/system/expand/lang/de-DE.rc (100%) rename {reactos/base => base}/system/expand/lang/el-GR.rc (100%) rename {reactos/base => base}/system/expand/lang/en-US.rc (100%) rename {reactos/base => base}/system/expand/lang/es-ES.rc (100%) rename {reactos/base => base}/system/expand/lang/fr-FR.rc (100%) rename {reactos/base => base}/system/expand/lang/hu-HU.rc (100%) rename {reactos/base => base}/system/expand/lang/id-ID.rc (100%) rename {reactos/base => base}/system/expand/lang/it-IT.rc (100%) rename {reactos/base => base}/system/expand/lang/ja-JP.rc (100%) rename {reactos/base => base}/system/expand/lang/lt-LT.rc (100%) rename {reactos/base => base}/system/expand/lang/no-NO.rc (100%) rename {reactos/base => base}/system/expand/lang/pl-PL.rc (100%) rename {reactos/base => base}/system/expand/lang/pt-BR.rc (100%) rename {reactos/base => base}/system/expand/lang/ru-RU.rc (100%) rename {reactos/base => base}/system/expand/lang/sv-SE.rc (100%) rename {reactos/base => base}/system/expand/lang/th-TH.rc (100%) rename {reactos/base => base}/system/expand/lang/uk-UA.rc (100%) rename {reactos/base => base}/system/expand/resource.h (100%) rename {reactos/base => base}/system/expand/rsrc.rc (100%) rename {reactos/base => base}/system/format/format.c (100%) rename {reactos/base => base}/system/format/format.rbuild (100%) rename {reactos/base => base}/system/format/format.rc (100%) rename {reactos/base => base}/system/format/lang/bg-BG.rc (100%) rename {reactos/base => base}/system/format/lang/cs-CZ.rc (100%) rename {reactos/base => base}/system/format/lang/de-DE.rc (100%) rename {reactos/base => base}/system/format/lang/el-GR.rc (100%) rename {reactos/base => base}/system/format/lang/en-US.rc (100%) rename {reactos/base => base}/system/format/lang/es-ES.rc (100%) rename {reactos/base => base}/system/format/lang/fr-FR.rc (100%) rename {reactos/base => base}/system/format/lang/hu-HU.rc (100%) rename {reactos/base => base}/system/format/lang/id-ID.rc (100%) rename {reactos/base => base}/system/format/lang/it-IT.rc (100%) rename {reactos/base => base}/system/format/lang/ja-JP.rc (100%) rename {reactos/base => base}/system/format/lang/lt-LT.rc (100%) rename {reactos/base => base}/system/format/lang/no-NO.rc (100%) rename {reactos/base => base}/system/format/lang/pl-PL.rc (100%) rename {reactos/base => base}/system/format/lang/ru-RU.rc (100%) rename {reactos/base => base}/system/format/lang/sk-SK.rc (100%) rename {reactos/base => base}/system/format/lang/uk-UA.rc (100%) rename {reactos/base => base}/system/format/resource.h (100%) rename {reactos/base => base}/system/format/rsrc.rc (100%) rename {reactos/base => base}/system/lsass/lsass.c (100%) rename {reactos/base => base}/system/lsass/lsass.rbuild (100%) rename {reactos/base => base}/system/lsass/lsass.rc (100%) rename {reactos/base => base}/system/msiexec/msiexec.c (100%) rename {reactos/base => base}/system/msiexec/msiexec.ico (100%) rename {reactos/base => base}/system/msiexec/msiexec.rbuild (100%) rename {reactos/base => base}/system/msiexec/rsrc.rc (100%) rename {reactos/base => base}/system/msiexec/service.c (100%) rename {reactos/base => base}/system/msiexec/version.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/cs-CZ.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/de-DE.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/en-US.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/es-ES.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/fr-FR.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/hu-HU.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/id-ID.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/it-IT.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/ja-JP.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/lt-LT.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/no-NO.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/pl-PL.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/pt-BR.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/ru-RU.rc (100%) rename {reactos/base => base}/system/regsvr32/lang/uk-UA.rc (100%) rename {reactos/base => base}/system/regsvr32/regsvr32.c (100%) rename {reactos/base => base}/system/regsvr32/regsvr32.rbuild (100%) rename {reactos/base => base}/system/regsvr32/regsvr32.rc (100%) rename {reactos/base => base}/system/regsvr32/resource.h (100%) rename {reactos/base => base}/system/regsvr32/rsrc.rc (100%) rename {reactos/base => base}/system/rundll32/lang/bg-BG.rc (100%) rename {reactos/base => base}/system/rundll32/lang/cs-CZ.rc (100%) rename {reactos/base => base}/system/rundll32/lang/de-DE.rc (100%) rename {reactos/base => base}/system/rundll32/lang/el-GR.rc (100%) rename {reactos/base => base}/system/rundll32/lang/en-US.rc (100%) rename {reactos/base => base}/system/rundll32/lang/es-ES.rc (100%) rename {reactos/base => base}/system/rundll32/lang/fr-FR.rc (100%) rename {reactos/base => base}/system/rundll32/lang/hu-HU.rc (100%) rename {reactos/base => base}/system/rundll32/lang/id-ID.rc (100%) rename {reactos/base => base}/system/rundll32/lang/it-IT.rc (100%) rename {reactos/base => base}/system/rundll32/lang/ja-JP.rc (100%) rename {reactos/base => base}/system/rundll32/lang/lt-LT.rc (100%) rename {reactos/base => base}/system/rundll32/lang/nl-NL.rc (100%) rename {reactos/base => base}/system/rundll32/lang/no-NO.rc (100%) rename {reactos/base => base}/system/rundll32/lang/pl-PL.rc (100%) rename {reactos/base => base}/system/rundll32/lang/pt-BR.rc (100%) rename {reactos/base => base}/system/rundll32/lang/ru-RU.rc (100%) rename {reactos/base => base}/system/rundll32/lang/sk-SK.rc (100%) rename {reactos/base => base}/system/rundll32/lang/th-TH.rc (100%) rename {reactos/base => base}/system/rundll32/lang/uk-UA.rc (100%) rename {reactos/base => base}/system/rundll32/resource.h (100%) rename {reactos/base => base}/system/rundll32/rsrc.rc (100%) rename {reactos/base => base}/system/rundll32/rundll32.c (100%) rename {reactos/base => base}/system/rundll32/rundll32.rbuild (100%) rename {reactos/base => base}/system/rundll32/rundll32.rc (100%) rename {reactos/base => base}/system/services/config.c (100%) rename {reactos/base => base}/system/services/database.c (100%) rename {reactos/base => base}/system/services/driver.c (100%) rename {reactos/base => base}/system/services/groupdb.c (100%) rename {reactos/base => base}/system/services/rpcserver.c (100%) rename {reactos/base => base}/system/services/services.c (100%) rename {reactos/base => base}/system/services/services.h (100%) rename {reactos/base => base}/system/services/services.rbuild (100%) rename {reactos/base => base}/system/services/services.rc (100%) rename {reactos/base => base}/system/smss/client.c (100%) rename {reactos/base => base}/system/smss/debug.c (100%) rename {reactos/base => base}/system/smss/init.c (100%) rename {reactos/base => base}/system/smss/initdosdev.c (100%) rename {reactos/base => base}/system/smss/initenv.c (100%) rename {reactos/base => base}/system/smss/initheap.c (100%) rename {reactos/base => base}/system/smss/initmv.c (100%) rename {reactos/base => base}/system/smss/initobdir.c (100%) rename {reactos/base => base}/system/smss/initpage.c (100%) rename {reactos/base => base}/system/smss/initreg.c (100%) rename {reactos/base => base}/system/smss/initrun.c (100%) rename {reactos/base => base}/system/smss/initss.c (100%) rename {reactos/base => base}/system/smss/initwkdll.c (100%) rename {reactos/base => base}/system/smss/print.c (100%) rename {reactos/base => base}/system/smss/smapi.c (100%) rename {reactos/base => base}/system/smss/smapicomp.c (100%) rename {reactos/base => base}/system/smss/smapiexec.c (100%) rename {reactos/base => base}/system/smss/smapiquery.c (100%) rename {reactos/base => base}/system/smss/smss.c (100%) rename {reactos/base => base}/system/smss/smss.h (100%) rename {reactos/base => base}/system/smss/smss.rbuild (100%) rename {reactos/base => base}/system/smss/smss.rc (100%) rename {reactos/base => base}/system/system.rbuild (100%) rename {reactos/base => base}/system/userinit/lang/bg-BG.rc (100%) rename {reactos/base => base}/system/userinit/lang/cs-CZ.rc (100%) rename {reactos/base => base}/system/userinit/lang/de-DE.rc (100%) rename {reactos/base => base}/system/userinit/lang/el-GR.rc (100%) rename {reactos/base => base}/system/userinit/lang/en-US.rc (100%) rename {reactos/base => base}/system/userinit/lang/es-ES.rc (100%) rename {reactos/base => base}/system/userinit/lang/fr-FR.rc (100%) rename {reactos/base => base}/system/userinit/lang/hu-HU.rc (100%) rename {reactos/base => base}/system/userinit/lang/id-ID.rc (100%) rename {reactos/base => base}/system/userinit/lang/it-IT.rc (100%) rename {reactos/base => base}/system/userinit/lang/ja-JP.rc (100%) rename {reactos/base => base}/system/userinit/lang/lt-LT.rc (100%) rename {reactos/base => base}/system/userinit/lang/no-NO.rc (100%) rename {reactos/base => base}/system/userinit/lang/pl-PL.rc (100%) rename {reactos/base => base}/system/userinit/lang/pt-BR.rc (100%) rename {reactos/base => base}/system/userinit/lang/ru-RU.rc (100%) rename {reactos/base => base}/system/userinit/lang/sk-SK.rc (100%) rename {reactos/base => base}/system/userinit/lang/sv-SE.rc (100%) rename {reactos/base => base}/system/userinit/lang/th-TH.rc (100%) rename {reactos/base => base}/system/userinit/lang/uk-UA.rc (100%) rename {reactos/base => base}/system/userinit/resource.h (100%) rename {reactos/base => base}/system/userinit/rsrc.rc (100%) rename {reactos/base => base}/system/userinit/userinit.c (100%) rename {reactos/base => base}/system/userinit/userinit.rbuild (100%) rename {reactos/base => base}/system/userinit/userinit.rc (100%) rename {reactos/base => base}/system/winlogon/lang/bg-BG.rc (100%) rename {reactos/base => base}/system/winlogon/lang/cs-CZ.rc (100%) rename {reactos/base => base}/system/winlogon/lang/de-DE.rc (100%) rename {reactos/base => base}/system/winlogon/lang/el-GR.rc (100%) rename {reactos/base => base}/system/winlogon/lang/en-US.rc (100%) rename {reactos/base => base}/system/winlogon/lang/es-ES.rc (100%) rename {reactos/base => base}/system/winlogon/lang/fr-FR.rc (100%) rename {reactos/base => base}/system/winlogon/lang/hu-HU.rc (100%) rename {reactos/base => base}/system/winlogon/lang/id-ID.rc (100%) rename {reactos/base => base}/system/winlogon/lang/it-IT.rc (100%) rename {reactos/base => base}/system/winlogon/lang/ja-JP.rc (100%) rename {reactos/base => base}/system/winlogon/lang/lt-LT.rc (100%) rename {reactos/base => base}/system/winlogon/lang/nl-NL.rc (100%) rename {reactos/base => base}/system/winlogon/lang/no-NO.rc (100%) rename {reactos/base => base}/system/winlogon/lang/pl-PL.rc (100%) rename {reactos/base => base}/system/winlogon/lang/ru-RU.rc (100%) rename {reactos/base => base}/system/winlogon/lang/sk-SK.rc (100%) rename {reactos/base => base}/system/winlogon/lang/sv-SE.rc (100%) rename {reactos/base => base}/system/winlogon/lang/uk-UA.rc (100%) rename {reactos/base => base}/system/winlogon/lang/zh-CN.rc (100%) rename {reactos/base => base}/system/winlogon/resource.h (100%) rename {reactos/base => base}/system/winlogon/rsrc.rc (100%) rename {reactos/base => base}/system/winlogon/sas.c (100%) rename {reactos/base => base}/system/winlogon/screensaver.c (100%) rename {reactos/base => base}/system/winlogon/setup.c (100%) rename {reactos/base => base}/system/winlogon/setup.h (100%) rename {reactos/base => base}/system/winlogon/winlogon.c (100%) rename {reactos/base => base}/system/winlogon/winlogon.h (100%) rename {reactos/base => base}/system/winlogon/winlogon.rbuild (100%) rename {reactos/base => base}/system/winlogon/winlogon.rc (100%) rename {reactos/base => base}/system/winlogon/wlx.c (100%) rename reactos/baseaddress.rbuild => baseaddress.rbuild (100%) rename {reactos/boot => boot}/boot.rbuild (100%) rename {reactos/boot => boot}/bootdata/autorun.inf (100%) rename {reactos/boot => boot}/bootdata/bootcd/bootcd.rbuild (100%) rename {reactos/boot => boot}/bootdata/bootcdregtest/bootcdregtest.rbuild (100%) rename {reactos/boot => boot}/bootdata/bootcdregtest/testboot.bat.sample (100%) rename {reactos/boot => boot}/bootdata/bootcdregtest/unattend.inf (100%) rename {reactos/boot => boot}/bootdata/bootdata.rbuild (100%) rename {reactos/boot => boot}/bootdata/hivecls_arm.inf (100%) rename {reactos/boot => boot}/bootdata/hivecls_i386.inf (100%) rename {reactos/boot => boot}/bootdata/hivedef_arm.inf (100%) rename {reactos/boot => boot}/bootdata/hivedef_i386.inf (100%) rename {reactos/boot => boot}/bootdata/hiveinst_arm.inf (100%) rename {reactos/boot => boot}/bootdata/hiveinst_i386.inf (100%) rename {reactos/boot => boot}/bootdata/hivesft_arm.inf (100%) rename {reactos/boot => boot}/bootdata/hivesft_i386.inf (100%) rename {reactos/boot => boot}/bootdata/hivesys_arm.inf (100%) rename {reactos/boot => boot}/bootdata/hivesys_i386.inf (100%) rename {reactos/boot => boot}/bootdata/icon.ico (100%) rename {reactos/boot => boot}/bootdata/livecd.inf (100%) rename {reactos/boot => boot}/bootdata/livecd.ini (100%) rename {reactos/boot => boot}/bootdata/livecd/livecd.rbuild (100%) rename {reactos/boot => boot}/bootdata/livecdregtest/livecdregtest.rbuild (100%) rename {reactos/boot => boot}/bootdata/packages/reactos.dff (100%) rename {reactos/boot => boot}/bootdata/readme.txt (100%) rename {reactos/boot => boot}/bootdata/system.ini (100%) rename {reactos/boot => boot}/bootdata/txtsetup.sif (100%) rename {reactos/boot => boot}/bootdata/unattend.inf (100%) rename {reactos/boot => boot}/freeldr/COPYING (100%) rename {reactos/boot => boot}/freeldr/FREELDR.INI (100%) rename {reactos/boot => boot}/freeldr/bootsect/bootsect.rbuild (100%) rename {reactos/boot => boot}/freeldr/bootsect/dosmbr.asm (100%) rename {reactos/boot => boot}/freeldr/bootsect/ext2.asm (100%) rename {reactos/boot => boot}/freeldr/bootsect/fat.asm (100%) rename {reactos/boot => boot}/freeldr/bootsect/fat.h (100%) rename {reactos/boot => boot}/freeldr/bootsect/fat32.asm (100%) rename {reactos/boot => boot}/freeldr/bootsect/fat32.h (100%) rename {reactos/boot => boot}/freeldr/bootsect/isoboot.asm (100%) rename {reactos/boot => boot}/freeldr/bootsect/isobtrt.asm (100%) rename {reactos/boot => boot}/freeldr/bootsect/ofwboot.s (100%) rename {reactos/boot => boot}/freeldr/bootsect/win2k.asm (100%) rename {reactos/boot => boot}/freeldr/bootsect/wxpfat16.asm (100%) rename {reactos/boot => boot}/freeldr/fdebug/fdebug.c (100%) rename {reactos/boot => boot}/freeldr/fdebug/fdebug.ico (100%) rename {reactos/boot => boot}/freeldr/fdebug/fdebug.rbuild (100%) rename {reactos/boot => boot}/freeldr/fdebug/fdebug.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/bg-BG.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/cs-CZ.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/de-DE.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/el-GR.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/en-US.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/es-ES.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/fr-FR.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/hu-HU.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/id-ID.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/it-IT.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/ja-JP.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/no-NO.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/pl-PL.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/ru-RU.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/sk-SK.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/tr-TR.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/lang/uk-UA.rc (100%) rename {reactos/boot => boot}/freeldr/fdebug/resource.h (100%) rename {reactos/boot => boot}/freeldr/fdebug/rs232.c (100%) rename {reactos/boot => boot}/freeldr/fdebug/rs232.h (100%) rename {reactos/boot => boot}/freeldr/freeldr.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/.cvsignore (100%) rename {reactos/boot => boot}/freeldr/freeldr/CHANGELOG (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/arm/boot.s (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/arm/ferouart.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/arm/loader.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/arm/macharm.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/arm/versuart.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/_alloca.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/arch.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/archmach.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/boot.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/drvmap.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/fathelp.asm (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/hardware.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/hwacpi.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/hwapm.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/hwpci.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/i386cpu.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/i386disk.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/i386idt.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/i386pnp.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/i386rtl.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/i386trap.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/i386vid.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/int386.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/linux.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/loader.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/machpc.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/machxbox.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/mb.S (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/pccons.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/pcdisk.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/pcmem.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/pcrtc.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/pcvideo.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/xboxcons.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/xboxdisk.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/xboxfont.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/xboxhw.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/xboxi2c.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/xboxmem.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/xboxrtc.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/i386/xboxvideo.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/boot.s (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/compat.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/loader.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/mach.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/mboot.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/mmu.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/ofw_method.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/ofw_util.s (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/prep.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/prep.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/prep_ide.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/prep_pci.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/arch/powerpc/prep_vga.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/bootmgr.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/cache/blocklist.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/cache/cache.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/cmdline.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/comm/rs232.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/custom.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/debug.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/disk/disk.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/disk/partition.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/disk/ramdisk.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/drivemap.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/freeldr.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/freeldr.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/freeldr_arch.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/freeldr_base.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/freeldr_base64k.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/freeldr_main.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/freeldr_startup.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/fs/ext2.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/fs/fat.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/fs/fs.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/fs/fsrec.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/fs/iso.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/fs/ntfs.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/arch.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/arch/arm/hardware.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/arch/i386/hardware.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/arch/i386/i386.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/arch/i386/machpc.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/arch/i386/machxbox.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/arch/powerpc/hardware.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/bget.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/bootmgr.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/bytesex.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/cache.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/cmdline.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/comm.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/debug.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/disk.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/drivemap.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/freeldr.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/fs.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/fs/ext2.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/fs/fat.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/fs/iso.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/fs/ntfs.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/fsrec.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/inffile.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/inifile.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/keycodes.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/linux.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/machine.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/miscboot.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/mm.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/multiboot.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/of.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/options.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/oslist.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/ramdisk.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/reactos.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/registry.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/rtl.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/ui.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/ui/gui.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/ui/minitui.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/ui/noui.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/ui/tui.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/ver.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/video.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/include/winldr.h (100%) rename {reactos/boot => boot}/freeldr/freeldr/inffile/inffile.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/inifile/ini_init.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/inifile/inifile.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/inifile/parse.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/linuxboot.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/machine.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/miscboot.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/mm/meminit.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/mm/mm.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/options.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/oslist.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/reactos/archwsup.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/reactos/arcname.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/reactos/binhive.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/reactos/imageldr.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/reactos/reactos.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/reactos/registry.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/reactos/setupldr.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/rtl/bget.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/rtl/libsupp.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/setupldr.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/setupldr_main.rbuild (100%) rename {reactos/boot => boot}/freeldr/freeldr/ui/gui.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/ui/minitui.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/ui/noui.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/ui/tui.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/ui/tuimenu.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/ui/ui.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/version.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/video/fade.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/video/palette.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/video/video.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/windows/conversion.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/windows/peloader.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/windows/winldr.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/windows/wlmemory.c (100%) rename {reactos/boot => boot}/freeldr/freeldr/windows/wlregistry.c (100%) rename {reactos/boot => boot}/freeldr/install/install.c (100%) rename {reactos/boot => boot}/freeldr/install/install.h (100%) rename {reactos/boot => boot}/freeldr/install/installfreeldr.rbuild (100%) rename {reactos/boot => boot}/freeldr/install/linux/finstext2.c (100%) rename {reactos/boot => boot}/freeldr/install/linux/finstext2.h (100%) rename {reactos/boot => boot}/freeldr/install/volume.c (100%) rename {reactos/boot => boot}/freeldr/install/volume.h (100%) rename {reactos/boot => boot}/freeldr/notes.txt (100%) rename {reactos/boot => boot}/freeldr/tools/.cvsignore (100%) rename {reactos/boot => boot}/freeldr/tools/deptool.c (100%) rename {reactos/boot => boot}/freeldr/tools/hosttype.c (100%) rename {reactos/boot => boot}/freeldr/tools/rcopy.c (100%) rename {reactos/boot => boot}/freeldr/tools/rdel.c (100%) rename {reactos/boot => boot}/freeldr/tools/rmkdir.c (100%) rename {reactos/boot => boot}/freeldr/tools/rrmdir.c (100%) rename reactos/config-arm.template.rbuild => config-arm.template.rbuild (100%) rename reactos/config-ppc.template.rbuild => config-ppc.template.rbuild (100%) rename reactos/config.template.rbuild => config.template.rbuild (100%) rename reactos/depmap.xsl => depmap.xsl (100%) rename {reactos/dll => dll}/3rdparty/3rdparty.rbuild (100%) rename {reactos/dll => dll}/3rdparty/dxtn/dxtn.c (100%) rename {reactos/dll => dll}/3rdparty/dxtn/dxtn.def (100%) rename {reactos/dll => dll}/3rdparty/dxtn/dxtn.h (100%) rename {reactos/dll => dll}/3rdparty/dxtn/dxtn.rbuild (100%) rename {reactos/dll => dll}/3rdparty/dxtn/fxt1.c (100%) rename {reactos/dll => dll}/3rdparty/dxtn/fxt1.h (100%) rename {reactos/dll => dll}/3rdparty/dxtn/internal.h (100%) rename {reactos/dll => dll}/3rdparty/dxtn/texstore.c (100%) rename {reactos/dll => dll}/3rdparty/dxtn/types.h (100%) rename {reactos/dll => dll}/3rdparty/dxtn/wrapper.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/ChangeLog (100%) rename {reactos/dll => dll}/3rdparty/freetype/ChangeLog.20 (100%) rename {reactos/dll => dll}/3rdparty/freetype/ChangeLog.21 (100%) rename {reactos/dll => dll}/3rdparty/freetype/ChangeLog.22 (100%) rename {reactos/dll => dll}/3rdparty/freetype/Doxyfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/Jamrules (100%) rename {reactos/dll => dll}/3rdparty/freetype/Makefile (100%) rename {reactos/dll => dll}/3rdparty/freetype/README (100%) rename {reactos/dll => dll}/3rdparty/freetype/README.CVS (100%) rename {reactos/dll => dll}/3rdparty/freetype/README.ROS (100%) rename {reactos/dll => dll}/3rdparty/freetype/autogen.sh (100%) rename {reactos/dll => dll}/3rdparty/freetype/configure (100%) rename {reactos/dll => dll}/3rdparty/freetype/devel/ft2build.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/devel/ftoption.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/freetype.def (100%) rename {reactos/dll => dll}/3rdparty/freetype/freetype.rbuild (100%) rename {reactos/dll => dll}/3rdparty/freetype/freetype.rc (100%) rename {reactos/dll => dll}/3rdparty/freetype/i386/setjmplongjmp.s (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/config/ftconfig.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/config/ftheader.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/config/ftmodule.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/config/ftoption.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/config/ftstdlib.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/freetype.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftbbox.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftbdf.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftbitmap.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftcache.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftchapters.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/fterrdef.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/fterrors.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftgasp.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftglyph.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftgxval.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftgzip.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftimage.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftincrem.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftlcdfil.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftlist.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftlzw.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftmac.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftmm.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftmodapi.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftmoderr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftotval.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftoutln.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftpfr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftrender.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftsizes.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftsnames.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftstroke.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftsynth.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftsystem.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/fttrigon.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/fttypes.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftwinfnt.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ftxf86.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/autohint.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftcalc.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftdebug.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftdriver.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftgloadr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftmemory.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftobjs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftrfork.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftserv.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftstream.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/fttrace.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/ftvalid.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/internal.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/pcftypes.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/psaux.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/pshints.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svbdf.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svgldict.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svgxval.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svkern.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svmm.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svotval.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svpfr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svpostnm.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svpscmap.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svsfnt.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svttcmap.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svtteng.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svttglyf.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/services/svxf86nm.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/sfnt.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/t1types.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/internal/tttypes.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/t1tables.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ttnameid.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/tttables.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/tttags.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/freetype/ttunpat.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/include/ft2build.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/modules.cfg (100%) rename {reactos/dll => dll}/3rdparty/freetype/objs/README (100%) rename {reactos/dll => dll}/3rdparty/freetype/rosglue.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afangles.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afangles.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afcjk.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afcjk.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afdummy.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afdummy.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/aferrors.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afglobal.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afglobal.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afhints.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afhints.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afindic.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afindic.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/aflatin.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/aflatin.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/aflatin2.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/aflatin2.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afloader.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afloader.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afmodule.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afmodule.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/aftypes.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afwarp.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/afwarp.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/autofit.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/autofit/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/_ftbase_ros.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/_ftmulfix_ros.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftapi.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftbase.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftbbox.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftbdf.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftbitmap.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftcalc.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftdbgmem.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftdebug.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftgasp.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftgloadr.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftglyph.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftgxval.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftinit.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftlcdfil.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftmac.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftmm.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftnames.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftobjs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftotval.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftoutln.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftpatent.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftpfr.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftrfork.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftstream.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftstroke.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftsynth.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftsystem.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/fttrigon.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/fttype1.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftutil.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftwinfnt.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/ftxf86.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/base/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/README (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/bdf.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/bdf.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/bdfdrivr.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/bdfdrivr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/bdferror.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/bdflib.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/bdf/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcache.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcbasic.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftccache.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftccache.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftccback.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftccmap.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcerror.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcglyph.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcglyph.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcimage.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcimage.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcmanag.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcmanag.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcmru.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcmru.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcsbits.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/ftcsbits.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cache/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cff.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffcmap.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffcmap.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffdrivr.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffdrivr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cfferrs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffgload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffgload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffobjs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffobjs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffparse.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cffparse.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cfftoken.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/cfftypes.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cff/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/ciderrs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidgload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidgload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidobjs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidobjs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidparse.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidparse.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidriver.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidriver.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/cidtoken.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/cid/type1cid.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/README (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvalid.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvalid.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvbsln.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvcommn.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvcommn.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxverror.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvfeat.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvfeat.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvfgen.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvjust.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvkern.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvlcar.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmod.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmod.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmort.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmort.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmort0.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmort1.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmort2.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmort4.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmort5.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmorx.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmorx.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmorx0.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmorx1.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmorx2.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmorx4.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvmorx5.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvopbd.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvprop.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/gxvtrak.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gxvalid/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/adler32.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/ftgzip.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/infblock.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/infblock.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/infcodes.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/infcodes.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/inffixed.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/inflate.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/inftrees.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/inftrees.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/infutil.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/infutil.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/zconf.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/zlib.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/zutil.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/gzip/zutil.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/lzw/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/lzw/ftlzw.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/lzw/ftzopen.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/lzw/ftzopen.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/lzw/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvalid.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvalid.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvbase.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvcommn.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvcommn.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otverror.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvgdef.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvgpos.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvgpos.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvgsub.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvjstf.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvmod.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/otvmod.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/otvalid/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/README (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcf.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcf.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcfdrivr.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcfdrivr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcferror.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcfread.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcfread.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcfutil.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/pcfutil.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pcf/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfr.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrcmap.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrcmap.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrdrivr.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrdrivr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrerror.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrgload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrgload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrobjs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrobjs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrsbit.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrsbit.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/pfrtypes.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pfr/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/afmparse.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/afmparse.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/psaux.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/psauxerr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/psauxmod.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/psauxmod.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/psconv.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/psconv.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/psobjs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/psobjs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/t1cmap.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/t1cmap.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/t1decode.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psaux/t1decode.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshalgo.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshalgo.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshglob.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshglob.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshinter.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshmod.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshmod.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshnterr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshrec.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/pshrec.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/pshinter/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psnames/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psnames/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psnames/psmodule.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psnames/psmodule.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psnames/psnamerr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psnames/psnames.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psnames/pstables.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/psnames/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/ftmisc.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/ftraster.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/ftraster.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/ftrend1.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/ftrend1.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/raster.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/rasterrs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/raster/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/sfdriver.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/sfdriver.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/sferrors.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/sfnt.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/sfobjs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/sfobjs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttbdf.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttbdf.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttcmap.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttcmap.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttkern.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttkern.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttmtx.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttmtx.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttpost.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttpost.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttsbit.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttsbit.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/sfnt/ttsbit0.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/ftgrays.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/ftgrays.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/ftsmerrs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/ftsmooth.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/ftsmooth.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/smooth/smooth.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/apinames.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/cordic.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/docmaker/content.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/docmaker/docbeauty.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/docmaker/docmaker.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/docmaker/formatter.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/docmaker/sources.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/docmaker/tohtml.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/docmaker/utils.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/ftrandom/Makefile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/ftrandom/README (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/ftrandom/ftrandom.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/glnames.py (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/test_afm.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/test_bbox.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/tools/test_trig.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/truetype.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttdriver.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttdriver.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/tterrors.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttgload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttgload.c.old (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttgload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttgxvar.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttgxvar.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttinterp.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttinterp.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttobjs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttobjs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttpload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/truetype/ttpload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1afm.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1afm.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1driver.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1driver.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1errors.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1gload.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1gload.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1load.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1load.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1objs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1objs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1parse.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1parse.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/t1tokens.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type1/type1.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/t42drivr.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/t42drivr.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/t42error.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/t42objs.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/t42objs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/t42parse.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/t42parse.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/t42types.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/type42/type42.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/winfonts/Jamfile (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/winfonts/fnterrs.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/winfonts/module.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/winfonts/rules.mk (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/winfonts/winfnt.c (100%) rename {reactos/dll => dll}/3rdparty/freetype/src/winfonts/winfnt.h (100%) rename {reactos/dll => dll}/3rdparty/freetype/version.sed (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/amesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/dmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/fxmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/ggimesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/gl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/gl_mangle.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/glext.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/glfbdev.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/glu.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/glu_mangle.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/glx.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/glx_mangle.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/glxext.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/internal/dri_interface.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/internal/dri_sarea.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/internal/glcore.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/internal/sarea.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/mesa_wgl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/mglmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/osmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/svgamesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/uglglutshapes.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/uglmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/vms_x_fix.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/wmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/xmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/xmesa_x.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GL/xmesa_xf86.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/include/GLView.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/mesa32.rbuild (100%) rename {reactos/dll => dll}/3rdparty/mesa32/mesa3d_icd_fix_ros.patch (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/Makefile.DJ (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/Makefile.mgw (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/depend (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/beos/GLView.cpp (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/beos/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/common/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/common/driverfuncs.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/common/driverfuncs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/common/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/directfb/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/directfb/idirectfbgl_mesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/blit.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/dmesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/dpmi.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/internal.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/null.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/null.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/vesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/vesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/vga.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/vga.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/video.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dos/video.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/Makefile.template (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/depthtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/dri_bufpool.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/dri_drmpool.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/dri_util.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/dri_util.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/extension_helper.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/memops.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/mmio.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/mmx.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/spantmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/spantmp2.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/spantmp_common.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/stenciltmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/texmem.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/utils.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/utils.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/vblank.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/vblank.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlpool.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlpool/de.po (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlpool/es.po (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlpool/fr.po (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlpool/nl.po (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlpool/options.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlpool/sv.po (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/common/xmlpool/t_options.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/fb/Doxyfile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/fb/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/fb/fb_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/fb/fb_egl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fifo.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_linetmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_pointtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_rendertmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tritmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vbtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_dac.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_drishare.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_regs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_client.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_inithw.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_regs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tritmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/gamma_xmesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_common.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/glcore/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/glcore/glcore_driver.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810_3d_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/i810vb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/server/i810_common.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i810/server/i810_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_metaops.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_texblend.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i830_vtbl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_debug.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_fragprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_metaops.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_program.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_program.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_texprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/i915_vtbl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_pixel.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/server/i830_common.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/server/i830_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/server/intel.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915/server/intel_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_metaops.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texblend.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i830_vtbl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_debug.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_fragprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_metaops.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex_layout.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/i915_vtbl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchpool.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_bitmap.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_copy.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_draw.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_read.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_structs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_copy.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_format.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_image.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_layout.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_subimage.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_validate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_common.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_aub_playback.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_cc.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_line.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_point.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_tri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_unfilled.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_util.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_curbe.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_defines.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_draw_upload.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_debug.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_emit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_util.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_exec_generic.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_emit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_metaops.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_misc_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_program.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_emit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_state_batch.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_state_cache.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_state_pool.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_state_upload.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_structs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_tex_layout.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_urb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_util.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_util.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_constval.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_emit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_tnl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_vtbl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_debug.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_emit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_fp.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_iz.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass0.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass1.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass2.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_sampler_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_surface_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/bufmgr.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/bufmgr_fake.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_buffers.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_bitmap.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_copy.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_structs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_layout.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_validate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/server/i830_common.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/server/i830_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/server/intel.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/i965/server/intel_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vbtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vbtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mach64/server/mach64_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/Doxyfile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mga_texcombine.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mga_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgacontext.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgadd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgadd.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgaregs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgarender.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgastate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgastate.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgatex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgatex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgatexmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgatris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgatris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgavb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/mgavb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/server/mga.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/server/mga_bios.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/server/mga_macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/mga/server/mga_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card_list.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_ctrlreg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_msg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_0.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_1.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_2.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_shader.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_vertprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_fragprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_shader.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_vertprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_fragprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_shader.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_vertprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/nouveau/nv50_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_texobj.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/server/pci_ids.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/server/r128.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/server/r128_macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/server/r128_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r128/server/r128_version.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/Doxyfile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_cmdbuf.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_fragshader.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_maos_arrays.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_state_init.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/radeon_chipset.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/server/radeon.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_egl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_program.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_shader.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_chipset.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/server/radeon.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_egl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_chipset.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_compat.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lighting.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_arrays.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_vbtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_verts.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state_init.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_egl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_common.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_inithw.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_regs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tritmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3v_xmesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/s3v/s3virgetri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savage_3d_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savage_bci.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savage_init.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savage_xmesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagecontext.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagedd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagedd.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagerender.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagespan.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagespan.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagestate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagestate.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagetex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagetex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagetris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/savagetris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/savage/server/savage_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/server/sis_common.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/server/sis_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis6326_clear.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis6326_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis6326_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_clear.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_fog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/sis/sis_tritmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/dri_glide.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_glide.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vbtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/trident_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/trident_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/trident_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/trident_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/trident_lock.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/trident_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/trident_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/trident/trident_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/server/via.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_driver.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_priv.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_regs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_3d_reg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_drmclient.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_memcpy.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_texcombine.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/fbdev/glfbdev.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/genkgi.conf.in (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/genkgi_mode.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/genkgi_visual.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/linear.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/linear_15.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/linear_16.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/linear_24.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/linear_32.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/linear_8.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/default/stubs.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/display/fbdev.conf.in (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/display/fbdev_mode.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/display/fbdev_visual.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/ggimesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/ggimesa.conf.in (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/debug.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/display_fbdev.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa_int.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxapi.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxdd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxddspan.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxddtex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxdrv.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxg.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxg.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxglidew.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxglidew.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxsetup.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxsetup.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxtexman.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxtris.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxvb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/glide/fxvbtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/osmesa/Makefile.win (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/osmesa/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/osmesa/osmesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/osmesa/osmesa.def (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa15.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa15.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa16.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa16.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa24.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa24.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa32.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa32.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa8.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgamesa8.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/svga/svgapix.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/fx/fxopengl.def (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/fx/fxwgl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gdi/colors.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gdi/mesa.def (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gdi/wgl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gdi/wmesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gdi/wmesadef.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglmacros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dll_main.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/dllmain.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_clip.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_norm.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_xform.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/gld_dispatch.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/gldlame8.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/opengl32.def (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/gldirect/pixpack.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/icd/icd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/icd/icdlist.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/windows/icd/mesa.def (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/fakeglx.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/glxapi.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/glxapi.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/glxheader.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/realglx.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/realglx.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xfonts.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xfonts.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_api.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_buffer.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_glide.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_glide.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_image.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_image.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_line.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xm_tri.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/drivers/x11/xmesaP.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/dispatch.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/glapi.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/glapi.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/glapioffsets.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/glapitable.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/glapitemp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/glprocs.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/glthread.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/glthread.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/glapi/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/accum.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/accum.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_arrayelt.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_arrayelt.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_eval.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_loopback.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_loopback.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_noop.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_noop.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_validate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/api_validate.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/arrayobj.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/arrayobj.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/attrib.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/attrib.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/bitset.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/blend.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/blend.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/bufferobj.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/bufferobj.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/buffers.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/buffers.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/clip.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/clip.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/colormac.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/colortab.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/colortab.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/config.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/convolve.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/convolve.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/dd.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/debug.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/debug.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/depth.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/depth.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/depthstencil.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/depthstencil.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/dispatch.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/dlist.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/dlist.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/drawpix.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/drawpix.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/enable.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/enable.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/enums.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/enums.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/eval.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/eval.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/execmem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/extensions.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/extensions.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/fbobject.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/fbobject.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/feedback.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/feedback.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/fog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/fog.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/framebuffer.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/framebuffer.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/get.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/get.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/getstring.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/glheader.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/hash.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/hash.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/hint.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/hint.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/histogram.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/histogram.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/image.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/image.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/imports.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/imports.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/light.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/light.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/lines.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/lines.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/matrix.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/matrix.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/mipmap.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/mipmap.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/mm.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/mm.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/mtypes.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/pixel.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/pixel.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/points.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/points.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/polygon.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/polygon.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/queryobj.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/queryobj.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/rastpos.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/rastpos.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/rbadaptors.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/rbadaptors.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/renderbuffer.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/renderbuffer.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/shaders.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/shaders.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/simple_list.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/state.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/state.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/stencil.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/stencil.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texcompress.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texcompress.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texcompress_fxt1.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texcompress_s3tc.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texenvprogram.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texenvprogram.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texformat.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texformat.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texformat_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/teximage.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/teximage.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texobj.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texobj.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texrender.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texrender.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texstate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texstate.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texstore.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/texstore.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/varray.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/varray.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/version.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/vsnprintf.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/vtxfmt.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/vtxfmt.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/main/vtxfmt_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_clip_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_copy_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_debug.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_debug_clip.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_debug_norm.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_debug_util.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_debug_xform.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_dotprod_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_eval.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_eval.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_matrix.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_matrix.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_norm_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_trans_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_translate.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_translate.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_vector.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_vector.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_xform.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_xform.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/m_xform_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/mathmod.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/math/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/ppc/common_ppc.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/ppc/common_ppc_features.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/arbprogparse.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/arbprogparse.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/arbprogram.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/arbprogram.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/arbprogram_syn.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/atifragshader.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/atifragshader.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/grammar.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/grammar.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/grammar_crt.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/grammar_crt.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/grammar_mesa.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/grammar_mesa.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/grammar_syn.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/grammar/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/nvfragparse.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/nvfragparse.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/nvprogram.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/nvprogram.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/nvvertparse.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/nvvertparse.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_debug.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_debug.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_execute.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_execute.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_instruction.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_instruction.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_parameter.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_parameter.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_print.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_print.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_statevars.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_statevars.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_uniform.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/prog_uniform.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/program.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/program.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/programopt.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/programopt.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/shader_api.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/shader_api.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/gc_to_bin.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_120_core.gc (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_120_core_gc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common.gc (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common_gc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment.gc (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment_gc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin.gc (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin_gc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_core.gc (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_core_gc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin.gc (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin_gc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives.syn (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives_syn.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression.syn (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression_syn.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_pp_version.syn (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_pp_version_syn.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_shader.syn (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_shader_syn.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_version.syn (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_version_syn.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin.gc (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin_gc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/library/syn_to_c.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_builtin.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_builtin.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_codegen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_codegen.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile_function.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile_function.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile_operation.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile_operation.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile_struct.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile_struct.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile_variable.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_compile_variable.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_emit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_emit.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_ir.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_ir.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_label.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_label.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_library_noise.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_library_noise.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_link.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_link.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_log.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_log.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_mem.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_mem.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_preprocess.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_preprocess.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_print.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_print.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_simplify.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_simplify.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_storage.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_storage.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_typeinfo.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_typeinfo.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_utility.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_utility.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_vartable.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/slang_vartable.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/slang/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/shader/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/sparc/clip.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/sparc/glapi_sparc.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/sparc/norm.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/sparc/sparc.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/sparc/sparc.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/sparc/sparc_matrix.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/sparc/xform.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_aaline.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_aaline.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_aalinetemp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_aatriangle.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_aatriangle.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_aatritemp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_accum.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_accum.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_alpha.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_alpha.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_atifragshader.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_atifragshader.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_bitmap.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_blend.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_blend.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_blit.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_buffers.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_copypix.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_depth.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_depth.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_drawpix.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_drawpix.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_feedback.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_feedback.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_fog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_fog.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_fragprog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_fragprog.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_imaging.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_lines.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_lines.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_linetemp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_logic.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_logic.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_masking.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_masking.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_points.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_points.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_pointtemp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_readpix.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_span.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_span.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_spantemp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_stencil.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_stencil.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_texcombine.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_texcombine.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_texfilter.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_texfilter.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_texstore.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_triangle.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_triangle.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_trispan.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_tritemp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_zoom.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/s_zoom.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast/swrast.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/ss_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/ss_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/ss_triangle.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/ss_triangle.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/ss_tritmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/ss_vb.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/swrast_setup/swrast_setup.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/sources (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_draw.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_pipeline.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_pipeline.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_cliptmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_cull.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_fog.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_light.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_lighttmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_normals.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_points.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_program.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_render.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_rendertmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_texgen.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_texmat.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vb_vertex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vertex.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vertex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vertex_generic.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vertex_sse.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vp_build.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/t_vp_build.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl/tnl.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/imm/NOTES.imm (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_capi.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_napi.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_primtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_tapi.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vapi.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vbtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp2.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_rendertmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_triemit.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_tritmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_unfilled.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_vb.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_vbtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/tnl_dd/t_dd_vertex.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/descrip.mms (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_attrib.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_attrib_tmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_context.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_context.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_exec.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_exec.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_exec_api.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_exec_array.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_exec_draw.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_exec_eval.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_rebase.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_save.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_save.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_save_api.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_save_draw.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_save_loopback.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_split.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_split.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_split_copy.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/vbo/vbo_split_inplace.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86-64/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86-64/glapi_x86-64.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86-64/matypes.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86-64/x86-64.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86-64/x86-64.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86-64/xform4.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/3dnow.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/3dnow.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/3dnow_normal.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/3dnow_xform1.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/3dnow_xform2.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/3dnow_xform3.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/3dnow_xform4.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/Makefile (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/assyntax.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/clip_args.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/common_x86.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/common_x86_asm.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/common_x86_asm.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/common_x86_features.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/common_x86_macros.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/gen_matypes.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/glapi_x86.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/matypes.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/mmx.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/mmx_blend.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/mmx_blendtmp.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/norm_args.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/read_rgba_span_x86.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/read_rgba_span_x86.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/rtasm/x86sse.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/rtasm/x86sse.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/sse.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/sse.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/sse_normal.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/sse_xform1.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/sse_xform2.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/sse_xform3.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/sse_xform4.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/x86.c (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/x86.h (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/x86_cliptest.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/x86_xform2.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/x86_xform3.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/x86_xform4.S (100%) rename {reactos/dll => dll}/3rdparty/mesa32/src/x86/xform_args.h (100%) rename {reactos/dll => dll}/Doxyfile (100%) rename {reactos/dll => dll}/cpl/access/access.c (100%) rename {reactos/dll => dll}/cpl/access/access.h (100%) rename {reactos/dll => dll}/cpl/access/access.rbuild (100%) rename {reactos/dll => dll}/cpl/access/access.rc (100%) rename {reactos/dll => dll}/cpl/access/access.spec (100%) rename {reactos/dll => dll}/cpl/access/display.c (100%) rename {reactos/dll => dll}/cpl/access/general.c (100%) rename {reactos/dll => dll}/cpl/access/keyboard.c (100%) rename {reactos/dll => dll}/cpl/access/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/access/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/cpl/access/mouse.c (100%) rename {reactos/dll => dll}/cpl/access/resource.h (100%) rename {reactos/dll => dll}/cpl/access/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/access/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/access/sound.c (100%) rename {reactos/dll => dll}/cpl/appwiz-new/appwiz.c (100%) rename {reactos/dll => dll}/cpl/appwiz-new/appwiz.def (100%) rename {reactos/dll => dll}/cpl/appwiz-new/appwiz.h (100%) rename {reactos/dll => dll}/cpl/appwiz-new/appwiz.rbuild (100%) rename {reactos/dll => dll}/cpl/appwiz-new/appwiz.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/createlink.c (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resource.h (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/1501.ico (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/1502.ico (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/1503.ico (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/icon.bmp (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/search.ico (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/select.bmp (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/underline.bmp (100%) rename {reactos/dll => dll}/cpl/appwiz-new/resources/watermark.bmp (100%) rename {reactos/dll => dll}/cpl/appwiz-new/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/add.c (100%) rename {reactos/dll => dll}/cpl/appwiz/appwiz.c (100%) rename {reactos/dll => dll}/cpl/appwiz/appwiz.def (100%) rename {reactos/dll => dll}/cpl/appwiz/appwiz.dsp (100%) rename {reactos/dll => dll}/cpl/appwiz/appwiz.dsw (100%) rename {reactos/dll => dll}/cpl/appwiz/appwiz.h (100%) rename {reactos/dll => dll}/cpl/appwiz/appwiz.rbuild (100%) rename {reactos/dll => dll}/cpl/appwiz/appwiz.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/createlink.c (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/remove.c (100%) rename {reactos/dll => dll}/cpl/appwiz/resource.h (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/1501.ico (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/1502.ico (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/1503.ico (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/1504.ico (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/1505.ico (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/reactos.ico (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/updates.ico (100%) rename {reactos/dll => dll}/cpl/appwiz/resources/watermark.bmp (100%) rename {reactos/dll => dll}/cpl/appwiz/rossetup.c (100%) rename {reactos/dll => dll}/cpl/appwiz/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/appwiz/updates.c (100%) rename {reactos/dll => dll}/cpl/console/colors.c (100%) rename {reactos/dll => dll}/cpl/console/console.c (100%) rename {reactos/dll => dll}/cpl/console/console.h (100%) rename {reactos/dll => dll}/cpl/console/console.rbuild (100%) rename {reactos/dll => dll}/cpl/console/console.rc (100%) rename {reactos/dll => dll}/cpl/console/console.spec (100%) rename {reactos/dll => dll}/cpl/console/font.c (100%) rename {reactos/dll => dll}/cpl/console/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/console/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/console/layout.c (100%) rename {reactos/dll => dll}/cpl/console/options.c (100%) rename {reactos/dll => dll}/cpl/console/resource.h (100%) rename {reactos/dll => dll}/cpl/console/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/cpl.rbuild (100%) rename {reactos/dll => dll}/cpl/desk/advappdlg.c (100%) rename {reactos/dll => dll}/cpl/desk/advmon.c (100%) rename {reactos/dll => dll}/cpl/desk/appearance.c (100%) rename {reactos/dll => dll}/cpl/desk/appearance.h (100%) rename {reactos/dll => dll}/cpl/desk/background.c (100%) rename {reactos/dll => dll}/cpl/desk/classinst.c (100%) rename {reactos/dll => dll}/cpl/desk/desk.c (100%) rename {reactos/dll => dll}/cpl/desk/desk.def (100%) rename {reactos/dll => dll}/cpl/desk/desk.h (100%) rename {reactos/dll => dll}/cpl/desk/desk.rbuild (100%) rename {reactos/dll => dll}/cpl/desk/desk.rc (100%) rename {reactos/dll => dll}/cpl/desk/devsett.c (100%) rename {reactos/dll => dll}/cpl/desk/dibitmap.c (100%) rename {reactos/dll => dll}/cpl/desk/general.c (100%) rename {reactos/dll => dll}/cpl/desk/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/desk/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/cpl/desk/misc.c (100%) rename {reactos/dll => dll}/cpl/desk/monslctl.c (100%) rename {reactos/dll => dll}/cpl/desk/monslctl.h (100%) rename {reactos/dll => dll}/cpl/desk/preview.c (100%) rename {reactos/dll => dll}/cpl/desk/preview.h (100%) rename {reactos/dll => dll}/cpl/desk/resource.h (100%) rename {reactos/dll => dll}/cpl/desk/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/desk/resources/monitor.bmp (100%) rename {reactos/dll => dll}/cpl/desk/resources/spectrum_16.bmp (100%) rename {reactos/dll => dll}/cpl/desk/resources/spectrum_4.bmp (100%) rename {reactos/dll => dll}/cpl/desk/resources/spectrum_8.bmp (100%) rename {reactos/dll => dll}/cpl/desk/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/desk/screensaver.c (100%) rename {reactos/dll => dll}/cpl/desk/settings.c (100%) rename {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.c (100%) rename {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.h (100%) rename {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.rbuild (100%) rename {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/hdwwiz.spec (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/pt-BR.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/th-TH.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/cpl/hdwwiz/resource.h (100%) rename {reactos/dll => dll}/cpl/hdwwiz/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/hdwwiz/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/input/add.c (100%) rename {reactos/dll => dll}/cpl/input/changekeyseq.c (100%) rename {reactos/dll => dll}/cpl/input/input.c (100%) rename {reactos/dll => dll}/cpl/input/input.def (100%) rename {reactos/dll => dll}/cpl/input/input.h (100%) rename {reactos/dll => dll}/cpl/input/input.rbuild (100%) rename {reactos/dll => dll}/cpl/input/input.rc (100%) rename {reactos/dll => dll}/cpl/input/keysettings.c (100%) rename {reactos/dll => dll}/cpl/input/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/input/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/input/resource.h (100%) rename {reactos/dll => dll}/cpl/input/resources/keyboard-shortcuts.ico (100%) rename {reactos/dll => dll}/cpl/input/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/input/settings.c (100%) rename {reactos/dll => dll}/cpl/intl/advanced.c (100%) rename {reactos/dll => dll}/cpl/intl/currency.c (100%) rename {reactos/dll => dll}/cpl/intl/date.c (100%) rename {reactos/dll => dll}/cpl/intl/generalp.c (100%) rename {reactos/dll => dll}/cpl/intl/inplocale.c (100%) rename {reactos/dll => dll}/cpl/intl/intl.c (100%) rename {reactos/dll => dll}/cpl/intl/intl.def (100%) rename {reactos/dll => dll}/cpl/intl/intl.h (100%) rename {reactos/dll => dll}/cpl/intl/intl.rbuild (100%) rename {reactos/dll => dll}/cpl/intl/intl.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/intl/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/intl/languages.c (100%) rename {reactos/dll => dll}/cpl/intl/misc.c (100%) rename {reactos/dll => dll}/cpl/intl/numbers.c (100%) rename {reactos/dll => dll}/cpl/intl/resource.h (100%) rename {reactos/dll => dll}/cpl/intl/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/intl/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/intl/setupreg.c (100%) rename {reactos/dll => dll}/cpl/intl/sort.c (100%) rename {reactos/dll => dll}/cpl/intl/time.c (100%) rename {reactos/dll => dll}/cpl/joy/joy.c (100%) rename {reactos/dll => dll}/cpl/joy/joy.def (100%) rename {reactos/dll => dll}/cpl/joy/joy.h (100%) rename {reactos/dll => dll}/cpl/joy/joy.rbuild (100%) rename {reactos/dll => dll}/cpl/joy/joy.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/joy/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/cpl/joy/resource.h (100%) rename {reactos/dll => dll}/cpl/joy/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/joy/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/liccpa.c (100%) rename {reactos/dll => dll}/cpl/liccpa/liccpa.def (100%) rename {reactos/dll => dll}/cpl/liccpa/liccpa.h (100%) rename {reactos/dll => dll}/cpl/liccpa/liccpa.rc (100%) rename {reactos/dll => dll}/cpl/liccpa/resource.h (100%) rename {reactos/dll => dll}/cpl/liccpa/resources/cpl_icon1.ico (100%) rename {reactos/dll => dll}/cpl/liccpa/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/main/keyboard.c (100%) rename {reactos/dll => dll}/cpl/main/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/main/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/cpl/main/main.c (100%) rename {reactos/dll => dll}/cpl/main/main.def (100%) rename {reactos/dll => dll}/cpl/main/main.h (100%) rename {reactos/dll => dll}/cpl/main/main.rbuild (100%) rename {reactos/dll => dll}/cpl/main/main.rc (100%) rename {reactos/dll => dll}/cpl/main/mouse.c (100%) rename {reactos/dll => dll}/cpl/main/resource.h (100%) rename {reactos/dll => dll}/cpl/main/resources/folder_closed.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/folder_open.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/keyboard.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/look_key.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/mouse.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/mouse_button.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/mouse_left.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/mouse_pointer.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/mouse_right.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/mouse_speed.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/mouse_trails.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/mouse_wheel.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/repeat_delay.ico (100%) rename {reactos/dll => dll}/cpl/main/resources/repeat_rate.ico (100%) rename {reactos/dll => dll}/cpl/main/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/audio.c (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/pt-BR.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/mmsys.c (100%) rename {reactos/dll => dll}/cpl/mmsys/mmsys.h (100%) rename {reactos/dll => dll}/cpl/mmsys/mmsys.rbuild (100%) rename {reactos/dll => dll}/cpl/mmsys/mmsys.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/mmsys.spec (100%) rename {reactos/dll => dll}/cpl/mmsys/resource.h (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/3004.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4353.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4354.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4355.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4356.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4357.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4358.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4359.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4360.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4361.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4362.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4363.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4364.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4365.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4366.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4367.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4368.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4369.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4370.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4371.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4372.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4373.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4374.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4375.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4376.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4377.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4378.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4379.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4380.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4381.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4382.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4383.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4384.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4385.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4386.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4387.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4388.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4390.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4393.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/4394.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/play.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/speaker.bmp (100%) rename {reactos/dll => dll}/cpl/mmsys/resources/stop.ico (100%) rename {reactos/dll => dll}/cpl/mmsys/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/mmsys/sounds.c (100%) rename {reactos/dll => dll}/cpl/mmsys/voice.c (100%) rename {reactos/dll => dll}/cpl/mmsys/volume.c (100%) rename {reactos/dll => dll}/cpl/ncpa/ncpa.c (100%) rename {reactos/dll => dll}/cpl/ncpa/ncpa.def (100%) rename {reactos/dll => dll}/cpl/ncpa/ncpa.rbuild (100%) rename {reactos/dll => dll}/cpl/odbccp32/odbccp32.c (100%) rename {reactos/dll => dll}/cpl/odbccp32/odbccp32.def (100%) rename {reactos/dll => dll}/cpl/odbccp32/odbccp32.h (100%) rename {reactos/dll => dll}/cpl/odbccp32/odbccp32.rbuild (100%) rename {reactos/dll => dll}/cpl/odbccp32/odbccp32.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/advanced.c (100%) rename {reactos/dll => dll}/cpl/powercfg/alarms.c (100%) rename {reactos/dll => dll}/cpl/powercfg/hibernate.c (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/th-TH.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/powercfg.c (100%) rename {reactos/dll => dll}/cpl/powercfg/powercfg.def (100%) rename {reactos/dll => dll}/cpl/powercfg/powercfg.h (100%) rename {reactos/dll => dll}/cpl/powercfg/powercfg.rbuild (100%) rename {reactos/dll => dll}/cpl/powercfg/powercfg.rc (100%) rename {reactos/dll => dll}/cpl/powercfg/powershemes.c (100%) rename {reactos/dll => dll}/cpl/powercfg/resource.h (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/ac.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/acdc.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batterycharging.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batterychargingcritical.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batterycharginghalf.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batterycharginghigh.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batterycharginglow.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batterycritical.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batteryfull.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batteryhalf.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batteryhigh.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batterylow.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/batteryunknown.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/dc.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/hibernate.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/nobattery.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/resources/screen.ico (100%) rename {reactos/dll => dll}/cpl/powercfg/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/advanced.c (100%) rename {reactos/dll => dll}/cpl/sysdm/environment.c (100%) rename {reactos/dll => dll}/cpl/sysdm/general.c (100%) rename {reactos/dll => dll}/cpl/sysdm/hardprof.c (100%) rename {reactos/dll => dll}/cpl/sysdm/hardware.c (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/da-DK.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/licence.c (100%) rename {reactos/dll => dll}/cpl/sysdm/precomp.h (100%) rename {reactos/dll => dll}/cpl/sysdm/resource.h (100%) rename {reactos/dll => dll}/cpl/sysdm/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/sysdm/resources/devmgr.ico (100%) rename {reactos/dll => dll}/cpl/sysdm/resources/down.ico (100%) rename {reactos/dll => dll}/cpl/sysdm/resources/gpl.txt (100%) rename {reactos/dll => dll}/cpl/sysdm/resources/rosbitmap.bmp (100%) rename {reactos/dll => dll}/cpl/sysdm/resources/up.ico (100%) rename {reactos/dll => dll}/cpl/sysdm/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/startrec.c (100%) rename {reactos/dll => dll}/cpl/sysdm/sysdm.c (100%) rename {reactos/dll => dll}/cpl/sysdm/sysdm.def (100%) rename {reactos/dll => dll}/cpl/sysdm/sysdm.rbuild (100%) rename {reactos/dll => dll}/cpl/sysdm/sysdm.rc (100%) rename {reactos/dll => dll}/cpl/sysdm/userprofile.c (100%) rename {reactos/dll => dll}/cpl/sysdm/virtmem.c (100%) rename {reactos/dll => dll}/cpl/telephon/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/telephon/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/telephon/resource.h (100%) rename {reactos/dll => dll}/cpl/telephon/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/telephon/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/telephon/telephon.c (100%) rename {reactos/dll => dll}/cpl/telephon/telephon.def (100%) rename {reactos/dll => dll}/cpl/telephon/telephon.h (100%) rename {reactos/dll => dll}/cpl/telephon/telephon.rbuild (100%) rename {reactos/dll => dll}/cpl/telephon/telephon.rc (100%) rename {reactos/dll => dll}/cpl/timedate/clock.c (100%) rename {reactos/dll => dll}/cpl/timedate/dateandtime.c (100%) rename {reactos/dll => dll}/cpl/timedate/internettime.c (100%) rename {reactos/dll => dll}/cpl/timedate/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/da-DK.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/de-DE.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/el-GR.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/es-ES.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/id-ID.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/it-IT.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/no-NO.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/th-TH.rc (100%) rename {reactos/dll => dll}/cpl/timedate/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/cpl/timedate/monthcal.c (100%) rename {reactos/dll => dll}/cpl/timedate/ntpclient.c (100%) rename {reactos/dll => dll}/cpl/timedate/resource.h (100%) rename {reactos/dll => dll}/cpl/timedate/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/timedate/resources/world.bmp (100%) rename {reactos/dll => dll}/cpl/timedate/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/timedate/timedate.c (100%) rename {reactos/dll => dll}/cpl/timedate/timedate.def (100%) rename {reactos/dll => dll}/cpl/timedate/timedate.h (100%) rename {reactos/dll => dll}/cpl/timedate/timedate.rbuild (100%) rename {reactos/dll => dll}/cpl/timedate/timedate.rc (100%) rename {reactos/dll => dll}/cpl/timedate/timezone.c (100%) rename {reactos/dll => dll}/cpl/usrmgr/extra.c (100%) rename {reactos/dll => dll}/cpl/usrmgr/groupprops.c (100%) rename {reactos/dll => dll}/cpl/usrmgr/groups.c (100%) rename {reactos/dll => dll}/cpl/usrmgr/lang/en-US.rc (100%) rename {reactos/dll => dll}/cpl/usrmgr/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/cpl/usrmgr/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/cpl/usrmgr/misc.c (100%) rename {reactos/dll => dll}/cpl/usrmgr/resource.h (100%) rename {reactos/dll => dll}/cpl/usrmgr/resources/applet.ico (100%) rename {reactos/dll => dll}/cpl/usrmgr/resources/group.ico (100%) rename {reactos/dll => dll}/cpl/usrmgr/resources/locked.ico (100%) rename {reactos/dll => dll}/cpl/usrmgr/resources/user.ico (100%) rename {reactos/dll => dll}/cpl/usrmgr/rsrc.rc (100%) rename {reactos/dll => dll}/cpl/usrmgr/userprops.c (100%) rename {reactos/dll => dll}/cpl/usrmgr/users.c (100%) rename {reactos/dll => dll}/cpl/usrmgr/usrmgr.c (100%) rename {reactos/dll => dll}/cpl/usrmgr/usrmgr.def (100%) rename {reactos/dll => dll}/cpl/usrmgr/usrmgr.h (100%) rename {reactos/dll => dll}/cpl/usrmgr/usrmgr.rbuild (100%) rename {reactos/dll => dll}/cpl/usrmgr/usrmgr.rc (100%) rename {reactos/dll => dll}/directx/d3d8/d3d8.c (100%) rename {reactos/dll => dll}/directx/d3d8/d3d8.def (100%) rename {reactos/dll => dll}/directx/d3d8/d3d8.h (100%) rename {reactos/dll => dll}/directx/d3d8/d3d8.rbuild (100%) rename {reactos/dll => dll}/directx/d3d8/d3d8.rc (100%) rename {reactos/dll => dll}/directx/d3d8thk/d3d8thk.def (100%) rename {reactos/dll => dll}/directx/d3d8thk/d3d8thk.rbuild (100%) rename {reactos/dll => dll}/directx/d3d8thk/d3d8thk.rc (100%) rename {reactos/dll => dll}/directx/d3d9/adapter.c (100%) rename {reactos/dll => dll}/directx/d3d9/adapter.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9.rbuild (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9.rc (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9.spec (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_baseobject.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_baseobject.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_basetexture.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_callbacks.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_callbacks.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_caps.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_caps.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_common.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_create.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_create.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_cursor.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_cursor.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_device.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_device.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_haldevice.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_haldevice.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_helpers.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_helpers.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_impl.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_mipmap.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_mipmap.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_private.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_puredevice.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_puredevice.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_resource.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_resource.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_surface.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_swapchain.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_swapchain.h (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_texture.c (100%) rename {reactos/dll => dll}/directx/d3d9/d3d9_texture.h (100%) rename {reactos/dll => dll}/directx/d3d9/device.c (100%) rename {reactos/dll => dll}/directx/d3d9/device.h (100%) rename {reactos/dll => dll}/directx/d3d9/format.c (100%) rename {reactos/dll => dll}/directx/d3d9/format.h (100%) rename {reactos/dll => dll}/directx/ddraw/Clipper/clipper.h (100%) rename {reactos/dll => dll}/directx/ddraw/Clipper/clipper_main.c (100%) rename {reactos/dll => dll}/directx/ddraw/Clipper/clipper_stubs.c (100%) rename {reactos/dll => dll}/directx/ddraw/Color/color_stubs.c (100%) rename {reactos/dll => dll}/directx/ddraw/Ddraw/GetCaps.c (100%) rename {reactos/dll => dll}/directx/ddraw/Ddraw/GetDeviceIdentifier.c (100%) rename {reactos/dll => dll}/directx/ddraw/Ddraw/callbacks_dd_hel.c (100%) rename {reactos/dll => dll}/directx/ddraw/Ddraw/ddraw.h (100%) rename {reactos/dll => dll}/directx/ddraw/Ddraw/ddraw_displaymode.c (100%) rename {reactos/dll => dll}/directx/ddraw/Ddraw/ddraw_main.c (100%) rename {reactos/dll => dll}/directx/ddraw/Ddraw/ddraw_setcooperativelevel.c (100%) rename {reactos/dll => dll}/directx/ddraw/Ddraw/ddraw_stubs.c (100%) rename {reactos/dll => dll}/directx/ddraw/Gamma/gamma_stubs.c (100%) rename {reactos/dll => dll}/directx/ddraw/Kernel/kernel_stubs.c (100%) rename {reactos/dll => dll}/directx/ddraw/Palette/palette_stubs.c (100%) rename {reactos/dll => dll}/directx/ddraw/Surface/callbacks_surf_hel.c (100%) rename {reactos/dll => dll}/directx/ddraw/Surface/createsurface.c (100%) rename {reactos/dll => dll}/directx/ddraw/Surface/surface.h (100%) rename {reactos/dll => dll}/directx/ddraw/Surface/surface_main.c (100%) rename {reactos/dll => dll}/directx/ddraw/Surface/surface_stubs.c (100%) rename {reactos/dll => dll}/directx/ddraw/Videoport/videoport_stubs.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectD3D2_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectD3D3_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectD3D7_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectD3D_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDraw2_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDraw4_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDraw7_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDrawSurface2_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDrawSurface3_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDrawSurface4_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDrawSurface7_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDrawSurface_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/Vtable/DirectDraw_Vtable.c (100%) rename {reactos/dll => dll}/directx/ddraw/cleanup.c (100%) rename {reactos/dll => dll}/directx/ddraw/d3d/DirectD3D_main.c (100%) rename {reactos/dll => dll}/directx/ddraw/ddraw.def (100%) rename {reactos/dll => dll}/directx/ddraw/ddraw.rbuild (100%) rename {reactos/dll => dll}/directx/ddraw/ddraw.rc (100%) rename {reactos/dll => dll}/directx/ddraw/ddraw_structures.txt (100%) rename {reactos/dll => dll}/directx/ddraw/main.c (100%) rename {reactos/dll => dll}/directx/ddraw/resource.h (100%) rename {reactos/dll => dll}/directx/ddraw/rosdraw.h (100%) rename {reactos/dll => dll}/directx/ddraw/startup.c (100%) rename {reactos/dll => dll}/directx/ddraw/thunks/ddraw_thunk.c (100%) rename {reactos/dll => dll}/directx/ddraw/thunks/surface_thunk.c (100%) rename {reactos/dll => dll}/directx/devenum/Makefile.in (100%) rename {reactos/dll => dll}/directx/devenum/createdevenum.c (100%) rename {reactos/dll => dll}/directx/devenum/devenum.rbuild (100%) rename {reactos/dll => dll}/directx/devenum/devenum.rc (100%) rename {reactos/dll => dll}/directx/devenum/devenum.spec (100%) rename {reactos/dll => dll}/directx/devenum/devenum_main.c (100%) rename {reactos/dll => dll}/directx/devenum/devenum_private.h (100%) rename {reactos/dll => dll}/directx/devenum/factory.c (100%) rename {reactos/dll => dll}/directx/devenum/mediacatenum.c (100%) rename {reactos/dll => dll}/directx/devenum/parsedisplayname.c (100%) rename {reactos/dll => dll}/directx/dinput/data_formats.c (100%) rename {reactos/dll => dll}/directx/dinput/device.c (100%) rename {reactos/dll => dll}/directx/dinput/device_private.h (100%) rename {reactos/dll => dll}/directx/dinput/dinput.rbuild (100%) rename {reactos/dll => dll}/directx/dinput/dinput.spec (100%) rename {reactos/dll => dll}/directx/dinput/dinput_main.c (100%) rename {reactos/dll => dll}/directx/dinput/dinput_private.h (100%) rename {reactos/dll => dll}/directx/dinput/effect_linuxinput.c (100%) rename {reactos/dll => dll}/directx/dinput/joystick_linux.c (100%) rename {reactos/dll => dll}/directx/dinput/joystick_linuxinput.c (100%) rename {reactos/dll => dll}/directx/dinput/keyboard.c (100%) rename {reactos/dll => dll}/directx/dinput/mouse.c (100%) rename {reactos/dll => dll}/directx/dinput/regsvr.c (100%) rename {reactos/dll => dll}/directx/dinput/version.rc (100%) rename {reactos/dll => dll}/directx/dinput8/dinput8.rbuild (100%) rename {reactos/dll => dll}/directx/dinput8/dinput8.spec (100%) rename {reactos/dll => dll}/directx/dinput8/dinput8_main.c (100%) rename {reactos/dll => dll}/directx/dinput8/version.rc (100%) rename {reactos/dll => dll}/directx/directx.rbuild (100%) rename {reactos/dll => dll}/directx/dplay/dplay.rbuild (100%) rename {reactos/dll => dll}/directx/dplay/dplay.spec (100%) rename {reactos/dll => dll}/directx/dplay/dplay_main.c (100%) rename {reactos/dll => dll}/directx/dplay/version.rc (100%) rename {reactos/dll => dll}/directx/dplayx/dpclassfactory.c (100%) rename {reactos/dll => dll}/directx/dplayx/dpinit.h (100%) rename {reactos/dll => dll}/directx/dplayx/dplay.c (100%) rename {reactos/dll => dll}/directx/dplayx/dplay_global.h (100%) rename {reactos/dll => dll}/directx/dplayx/dplaysp.c (100%) rename {reactos/dll => dll}/directx/dplayx/dplaysp.h (100%) rename {reactos/dll => dll}/directx/dplayx/dplayx.rbuild (100%) rename {reactos/dll => dll}/directx/dplayx/dplayx.spec (100%) rename {reactos/dll => dll}/directx/dplayx/dplayx_global.c (100%) rename {reactos/dll => dll}/directx/dplayx/dplayx_global.h (100%) rename {reactos/dll => dll}/directx/dplayx/dplayx_main.c (100%) rename {reactos/dll => dll}/directx/dplayx/dplayx_messages.c (100%) rename {reactos/dll => dll}/directx/dplayx/dplayx_messages.h (100%) rename {reactos/dll => dll}/directx/dplayx/dplayx_queue.h (100%) rename {reactos/dll => dll}/directx/dplayx/dplobby.c (100%) rename {reactos/dll => dll}/directx/dplayx/lobbysp.c (100%) rename {reactos/dll => dll}/directx/dplayx/lobbysp.h (100%) rename {reactos/dll => dll}/directx/dplayx/name_server.c (100%) rename {reactos/dll => dll}/directx/dplayx/name_server.h (100%) rename {reactos/dll => dll}/directx/dplayx/regsvr.c (100%) rename {reactos/dll => dll}/directx/dplayx/version.rc (100%) rename {reactos/dll => dll}/directx/dsound/buffer.c (100%) rename {reactos/dll => dll}/directx/dsound/capture.c (100%) rename {reactos/dll => dll}/directx/dsound/dsound.c (100%) rename {reactos/dll => dll}/directx/dsound/dsound.rbuild (100%) rename {reactos/dll => dll}/directx/dsound/dsound.spec (100%) rename {reactos/dll => dll}/directx/dsound/dsound_main.c (100%) rename {reactos/dll => dll}/directx/dsound/dsound_private.h (100%) rename {reactos/dll => dll}/directx/dsound/duplex.c (100%) rename {reactos/dll => dll}/directx/dsound/dxroslayer/dxros_layer.h (100%) rename {reactos/dll => dll}/directx/dsound/dxroslayer/dxrosdrv_querydsounddesc.c (100%) rename {reactos/dll => dll}/directx/dsound/dxroslayer/dxrosdrv_querydsoundiface.c (100%) rename {reactos/dll => dll}/directx/dsound/dxroslayer/dxroslayer.c (100%) rename {reactos/dll => dll}/directx/dsound/dxroslayer/getguidfromstring.c (100%) rename {reactos/dll => dll}/directx/dsound/mixer.c (100%) rename {reactos/dll => dll}/directx/dsound/primary.c (100%) rename {reactos/dll => dll}/directx/dsound/propset.c (100%) rename {reactos/dll => dll}/directx/dsound/regsvr.c (100%) rename {reactos/dll => dll}/directx/dsound/sound3d.c (100%) rename {reactos/dll => dll}/directx/dsound/tests/.cvsignore (100%) rename {reactos/dll => dll}/directx/dsound/tests/Makefile.in (100%) rename {reactos/dll => dll}/directx/dsound/tests/capture.c (100%) rename {reactos/dll => dll}/directx/dsound/tests/ds3d.c (100%) rename {reactos/dll => dll}/directx/dsound/tests/ds3d8.c (100%) rename {reactos/dll => dll}/directx/dsound/tests/dsound.c (100%) rename {reactos/dll => dll}/directx/dsound/tests/dsound8.c (100%) rename {reactos/dll => dll}/directx/dsound/tests/dsound_test.h (100%) rename {reactos/dll => dll}/directx/dsound/tests/propset.c (100%) rename {reactos/dll => dll}/directx/dsound/version.rc (100%) rename {reactos/dll => dll}/directx/dxdiagn/container.c (100%) rename {reactos/dll => dll}/directx/dxdiagn/dxdiag_main.c (100%) rename {reactos/dll => dll}/directx/dxdiagn/dxdiag_private.h (100%) rename {reactos/dll => dll}/directx/dxdiagn/dxdiagn.rbuild (100%) rename {reactos/dll => dll}/directx/dxdiagn/dxdiagn.spec (100%) rename {reactos/dll => dll}/directx/dxdiagn/provider.c (100%) rename {reactos/dll => dll}/directx/dxdiagn/regsvr.c (100%) rename {reactos/dll => dll}/directx/dxdiagn/version.rc (100%) rename {reactos/dll => dll}/directx/ksproxy/ksproxy.c (100%) rename {reactos/dll => dll}/directx/ksproxy/ksproxy.rbuild (100%) rename {reactos/dll => dll}/directx/ksproxy/ksproxy.rc (100%) rename {reactos/dll => dll}/directx/ksproxy/ksproxy.spec (100%) rename {reactos/dll => dll}/directx/ksuser/ksuser.c (100%) rename {reactos/dll => dll}/directx/ksuser/ksuser.def (100%) rename {reactos/dll => dll}/directx/ksuser/ksuser.h (100%) rename {reactos/dll => dll}/directx/ksuser/ksuser.rbuild (100%) rename {reactos/dll => dll}/directx/ksuser/ksuser.rc (100%) rename {reactos/dll => dll}/directx/msdmo/msdmo.c (100%) rename {reactos/dll => dll}/directx/msdmo/msdmo.rbuild (100%) rename {reactos/dll => dll}/directx/msdmo/msdmo.rc (100%) rename {reactos/dll => dll}/directx/msdmo/msdmo.spec (100%) rename {reactos/dll => dll}/directx/qedit/qedit.c (100%) rename {reactos/dll => dll}/directx/qedit/qedit.rbuild (100%) rename {reactos/dll => dll}/directx/qedit/qedit.rc (100%) rename {reactos/dll => dll}/directx/qedit/qedit.spec (100%) rename {reactos/dll => dll}/directx/quartz/acmwrapper.c (100%) rename {reactos/dll => dll}/directx/quartz/avidec.c (100%) rename {reactos/dll => dll}/directx/quartz/avisplit.c (100%) rename {reactos/dll => dll}/directx/quartz/control.c (100%) rename {reactos/dll => dll}/directx/quartz/control_private.h (100%) rename {reactos/dll => dll}/directx/quartz/dsoundrender.c (100%) rename {reactos/dll => dll}/directx/quartz/enumfilters.c (100%) rename {reactos/dll => dll}/directx/quartz/enummedia.c (100%) rename {reactos/dll => dll}/directx/quartz/enummoniker.c (100%) rename {reactos/dll => dll}/directx/quartz/enumpins.c (100%) rename {reactos/dll => dll}/directx/quartz/enumregfilters.c (100%) rename {reactos/dll => dll}/directx/quartz/filesource.c (100%) rename {reactos/dll => dll}/directx/quartz/filtergraph.c (100%) rename {reactos/dll => dll}/directx/quartz/filtermapper.c (100%) rename {reactos/dll => dll}/directx/quartz/main.c (100%) rename {reactos/dll => dll}/directx/quartz/memallocator.c (100%) rename {reactos/dll => dll}/directx/quartz/mpegsplit.c (100%) rename {reactos/dll => dll}/directx/quartz/nullrenderer.c (100%) rename {reactos/dll => dll}/directx/quartz/parser.c (100%) rename {reactos/dll => dll}/directx/quartz/parser.h (100%) rename {reactos/dll => dll}/directx/quartz/pin.c (100%) rename {reactos/dll => dll}/directx/quartz/pin.h (100%) rename {reactos/dll => dll}/directx/quartz/quartz.rbuild (100%) rename {reactos/dll => dll}/directx/quartz/quartz.spec (100%) rename {reactos/dll => dll}/directx/quartz/quartz_private.h (100%) rename {reactos/dll => dll}/directx/quartz/regsvr.c (100%) rename {reactos/dll => dll}/directx/quartz/systemclock.c (100%) rename {reactos/dll => dll}/directx/quartz/transform.c (100%) rename {reactos/dll => dll}/directx/quartz/transform.h (100%) rename {reactos/dll => dll}/directx/quartz/version.rc (100%) rename {reactos/dll => dll}/directx/quartz/videorenderer.c (100%) rename {reactos/dll => dll}/directx/quartz/waveparser.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/Makefile.in (100%) rename {reactos/dll => dll}/directx/wine/d3d8/basetexture.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/cubetexture.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/d3d8.rbuild (100%) rename {reactos/dll => dll}/directx/wine/d3d8/d3d8.spec (100%) rename {reactos/dll => dll}/directx/wine/d3d8/d3d8_main.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/d3d8_private.h (100%) rename {reactos/dll => dll}/directx/wine/d3d8/device.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/directx.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/indexbuffer.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/pixelshader.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/resource.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/stateblock.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/surface.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/swapchain.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/texture.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/version.rc (100%) rename {reactos/dll => dll}/directx/wine/d3d8/vertexbuffer.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/vertexdeclaration.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/vertexshader.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/volume.c (100%) rename {reactos/dll => dll}/directx/wine/d3d8/volumetexture.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/Makefile.in (100%) rename {reactos/dll => dll}/directx/wine/d3d9/basetexture.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/cubetexture.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/d3d9.rbuild (100%) rename {reactos/dll => dll}/directx/wine/d3d9/d3d9.spec (100%) rename {reactos/dll => dll}/directx/wine/d3d9/d3d9_main.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/d3d9_private.h (100%) rename {reactos/dll => dll}/directx/wine/d3d9/device.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/directx.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/indexbuffer.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/pixelshader.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/query.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/resource.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/stateblock.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/surface.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/swapchain.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/texture.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/version.rc (100%) rename {reactos/dll => dll}/directx/wine/d3d9/vertexbuffer.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/vertexdeclaration.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/vertexshader.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/volume.c (100%) rename {reactos/dll => dll}/directx/wine/d3d9/volumetexture.c (100%) rename {reactos/dll => dll}/directx/wine/readme.txt (100%) rename {reactos/dll => dll}/directx/wine/wine.rbuild (100%) rename {reactos/dll => dll}/directx/wine/wined3d/Makefile.in (100%) rename {reactos/dll => dll}/directx/wine/wined3d/arb_program_shader.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/ati_fragment_shader.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/baseshader.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/basetexture.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/clipper.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/context.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/cubetexture.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/device.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/directx.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/drawprim.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/glsl_shader.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/indexbuffer.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/nvidia_texture_shader.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/palette.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/pixelshader.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/query.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/resource.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/roshacks.txt (100%) rename {reactos/dll => dll}/directx/wine/wined3d/state.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/stateblock.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/surface.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/surface_base.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/surface_gdi.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/swapchain.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/swapchain_base.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/swapchain_gdi.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/texture.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/utils.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/version.rc (100%) rename {reactos/dll => dll}/directx/wine/wined3d/vertexbuffer.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/vertexdeclaration.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/vertexshader.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/volume.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/volumetexture.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/wined3d.def (100%) rename {reactos/dll => dll}/directx/wine/wined3d/wined3d.rbuild (100%) rename {reactos/dll => dll}/directx/wine/wined3d/wined3d.spec (100%) rename {reactos/dll => dll}/directx/wine/wined3d/wined3d_main.c (100%) rename {reactos/dll => dll}/directx/wine/wined3d/wined3d_private.h (100%) rename {reactos/dll => dll}/directx/wine/wined3d/wined3d_private_types.h (100%) rename {reactos/dll => dll}/dll.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbda1/kbda1.c (100%) rename {reactos/dll => dll}/keyboard/kbda1/kbda1.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbda1/kbda1.rc (100%) rename {reactos/dll => dll}/keyboard/kbda1/kbda1.spec (100%) rename {reactos/dll => dll}/keyboard/kbda2/kbda2.c (100%) rename {reactos/dll => dll}/keyboard/kbda2/kbda2.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbda2/kbda2.rc (100%) rename {reactos/dll => dll}/keyboard/kbda2/kbda2.spec (100%) rename {reactos/dll => dll}/keyboard/kbda3/kbda3.c (100%) rename {reactos/dll => dll}/keyboard/kbda3/kbda3.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbda3/kbda3.rc (100%) rename {reactos/dll => dll}/keyboard/kbda3/kbda3.spec (100%) rename {reactos/dll => dll}/keyboard/kbdal/kbdal.c (100%) rename {reactos/dll => dll}/keyboard/kbdal/kbdal.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdal/kbdal.rc (100%) rename {reactos/dll => dll}/keyboard/kbdal/kbdal.spec (100%) rename {reactos/dll => dll}/keyboard/kbdarme/kbdarme.c (100%) rename {reactos/dll => dll}/keyboard/kbdarme/kbdarme.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdarme/kbdarme.rc (100%) rename {reactos/dll => dll}/keyboard/kbdarme/kbdarme.spec (100%) rename {reactos/dll => dll}/keyboard/kbdarmw/kbdarmw.c (100%) rename {reactos/dll => dll}/keyboard/kbdarmw/kbdarmw.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdarmw/kbdarmw.rc (100%) rename {reactos/dll => dll}/keyboard/kbdarmw/kbdarmw.spec (100%) rename {reactos/dll => dll}/keyboard/kbdaze/kbdaze.c (100%) rename {reactos/dll => dll}/keyboard/kbdaze/kbdaze.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdaze/kbdaze.rc (100%) rename {reactos/dll => dll}/keyboard/kbdaze/kbdaze.spec (100%) rename {reactos/dll => dll}/keyboard/kbdazel/kbdazel.c (100%) rename {reactos/dll => dll}/keyboard/kbdazel/kbdazel.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdazel/kbdazel.rc (100%) rename {reactos/dll => dll}/keyboard/kbdazel/kbdazel.spec (100%) rename {reactos/dll => dll}/keyboard/kbdbe/kbdbe.c (100%) rename {reactos/dll => dll}/keyboard/kbdbe/kbdbe.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdbe/kbdbe.rc (100%) rename {reactos/dll => dll}/keyboard/kbdbe/kbdbe.spec (100%) rename {reactos/dll => dll}/keyboard/kbdbga/kbdbga.c (100%) rename {reactos/dll => dll}/keyboard/kbdbga/kbdbga.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdbga/kbdbga.rc (100%) rename {reactos/dll => dll}/keyboard/kbdbga/kbdbga.spec (100%) rename {reactos/dll => dll}/keyboard/kbdbgm/kbdbgm.c (100%) rename {reactos/dll => dll}/keyboard/kbdbgm/kbdbgm.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdbgm/kbdbgm.rc (100%) rename {reactos/dll => dll}/keyboard/kbdbgm/kbdbgm.spec (100%) rename {reactos/dll => dll}/keyboard/kbdbgt/kbdbgt.c (100%) rename {reactos/dll => dll}/keyboard/kbdbgt/kbdbgt.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdbgt/kbdbgt.rc (100%) rename {reactos/dll => dll}/keyboard/kbdbgt/kbdbgt.spec (100%) rename {reactos/dll => dll}/keyboard/kbdblr/kbdblr.c (100%) rename {reactos/dll => dll}/keyboard/kbdblr/kbdblr.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdblr/kbdblr.rc (100%) rename {reactos/dll => dll}/keyboard/kbdblr/kbdblr.spec (100%) rename {reactos/dll => dll}/keyboard/kbdbr/kbdbr.c (100%) rename {reactos/dll => dll}/keyboard/kbdbr/kbdbr.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdbr/kbdbr.rc (100%) rename {reactos/dll => dll}/keyboard/kbdbr/kbdbr.spec (100%) rename {reactos/dll => dll}/keyboard/kbdbur/kbdbur.c (100%) rename {reactos/dll => dll}/keyboard/kbdbur/kbdbur.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdbur/kbdbur.rc (100%) rename {reactos/dll => dll}/keyboard/kbdbur/kbdbur.spec (100%) rename {reactos/dll => dll}/keyboard/kbdcan/kbdcan.c (100%) rename {reactos/dll => dll}/keyboard/kbdcan/kbdcan.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdcan/kbdcan.rc (100%) rename {reactos/dll => dll}/keyboard/kbdcan/kbdcan.spec (100%) rename {reactos/dll => dll}/keyboard/kbdcr/kbdcr.c (100%) rename {reactos/dll => dll}/keyboard/kbdcr/kbdcr.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdcr/kbdcr.rc (100%) rename {reactos/dll => dll}/keyboard/kbdcr/kbdcr.spec (100%) rename {reactos/dll => dll}/keyboard/kbdcz1/kbdcz1.c (100%) rename {reactos/dll => dll}/keyboard/kbdcz1/kbdcz1.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdcz1/kbdcz1.rc (100%) rename {reactos/dll => dll}/keyboard/kbdcz1/kbdcz1.spec (100%) rename {reactos/dll => dll}/keyboard/kbdda/kbdda.c (100%) rename {reactos/dll => dll}/keyboard/kbdda/kbdda.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdda/kbdda.rc (100%) rename {reactos/dll => dll}/keyboard/kbdda/kbdda.spec (100%) rename {reactos/dll => dll}/keyboard/kbddv/kbddv.c (100%) rename {reactos/dll => dll}/keyboard/kbddv/kbddv.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbddv/kbddv.rc (100%) rename {reactos/dll => dll}/keyboard/kbddv/kbddv.spec (100%) rename {reactos/dll => dll}/keyboard/kbdes/kbdes.c (100%) rename {reactos/dll => dll}/keyboard/kbdes/kbdes.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdes/kbdes.rc (100%) rename {reactos/dll => dll}/keyboard/kbdes/kbdes.spec (100%) rename {reactos/dll => dll}/keyboard/kbdest/kbdest.c (100%) rename {reactos/dll => dll}/keyboard/kbdest/kbdest.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdest/kbdest.rc (100%) rename {reactos/dll => dll}/keyboard/kbdest/kbdest.spec (100%) rename {reactos/dll => dll}/keyboard/kbdfc/kbdfc.c (100%) rename {reactos/dll => dll}/keyboard/kbdfc/kbdfc.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdfc/kbdfc.rc (100%) rename {reactos/dll => dll}/keyboard/kbdfc/kbdfc.spec (100%) rename {reactos/dll => dll}/keyboard/kbdfi/kbdfi.c (100%) rename {reactos/dll => dll}/keyboard/kbdfi/kbdfi.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdfi/kbdfi.rc (100%) rename {reactos/dll => dll}/keyboard/kbdfi/kbdfi.spec (100%) rename {reactos/dll => dll}/keyboard/kbdfr/kbdfr.c (100%) rename {reactos/dll => dll}/keyboard/kbdfr/kbdfr.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdfr/kbdfr.rc (100%) rename {reactos/dll => dll}/keyboard/kbdfr/kbdfr.spec (100%) rename {reactos/dll => dll}/keyboard/kbdgeo/kbdgeo.c (100%) rename {reactos/dll => dll}/keyboard/kbdgeo/kbdgeo.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdgeo/kbdgeo.rc (100%) rename {reactos/dll => dll}/keyboard/kbdgeo/kbdgeo.spec (100%) rename {reactos/dll => dll}/keyboard/kbdgerg/kbdgerg.c (100%) rename {reactos/dll => dll}/keyboard/kbdgerg/kbdgerg.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdgerg/kbdgerg.rc (100%) rename {reactos/dll => dll}/keyboard/kbdgerg/kbdgerg.spec (100%) rename {reactos/dll => dll}/keyboard/kbdgneo/kbdgneo.c (100%) rename {reactos/dll => dll}/keyboard/kbdgneo/kbdgneo.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdgneo/kbdgneo.rc (100%) rename {reactos/dll => dll}/keyboard/kbdgneo/kbdgneo.spec (100%) rename {reactos/dll => dll}/keyboard/kbdgr/kbdgr.c (100%) rename {reactos/dll => dll}/keyboard/kbdgr/kbdgr.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdgr/kbdgr.rc (100%) rename {reactos/dll => dll}/keyboard/kbdgr/kbdgr.spec (100%) rename {reactos/dll => dll}/keyboard/kbdgrist/kbdgrist.c (100%) rename {reactos/dll => dll}/keyboard/kbdgrist/kbdgrist.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdgrist/kbdgrist.rc (100%) rename {reactos/dll => dll}/keyboard/kbdgrist/kbdgrist.spec (100%) rename {reactos/dll => dll}/keyboard/kbdhe/kbdhe.c (100%) rename {reactos/dll => dll}/keyboard/kbdhe/kbdhe.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdhe/kbdhe.rc (100%) rename {reactos/dll => dll}/keyboard/kbdhe/kbdhe.spec (100%) rename {reactos/dll => dll}/keyboard/kbdheb/kbdheb.c (100%) rename {reactos/dll => dll}/keyboard/kbdheb/kbdheb.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdheb/kbdheb.rc (100%) rename {reactos/dll => dll}/keyboard/kbdheb/kbdheb.spec (100%) rename {reactos/dll => dll}/keyboard/kbdhu/kbdhu.c (100%) rename {reactos/dll => dll}/keyboard/kbdhu/kbdhu.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdhu/kbdhu.rc (100%) rename {reactos/dll => dll}/keyboard/kbdhu/kbdhu.spec (100%) rename {reactos/dll => dll}/keyboard/kbdic/kbdic.c (100%) rename {reactos/dll => dll}/keyboard/kbdic/kbdic.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdic/kbdic.rc (100%) rename {reactos/dll => dll}/keyboard/kbdic/kbdic.spec (100%) rename {reactos/dll => dll}/keyboard/kbdinasa/kbdinasa.c (100%) rename {reactos/dll => dll}/keyboard/kbdinasa/kbdinasa.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdinasa/kbdinasa.rc (100%) rename {reactos/dll => dll}/keyboard/kbdinasa/kbdinasa.spec (100%) rename {reactos/dll => dll}/keyboard/kbdinben/kbdinben.c (100%) rename {reactos/dll => dll}/keyboard/kbdinben/kbdinben.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdinben/kbdinben.rc (100%) rename {reactos/dll => dll}/keyboard/kbdinben/kbdinben.spec (100%) rename {reactos/dll => dll}/keyboard/kbdindev/kbdindev.c (100%) rename {reactos/dll => dll}/keyboard/kbdindev/kbdindev.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdindev/kbdindev.rc (100%) rename {reactos/dll => dll}/keyboard/kbdindev/kbdindev.spec (100%) rename {reactos/dll => dll}/keyboard/kbdinguj/kbdinguj.c (100%) rename {reactos/dll => dll}/keyboard/kbdinguj/kbdinguj.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdinguj/kbdinguj.rc (100%) rename {reactos/dll => dll}/keyboard/kbdinguj/kbdinguj.spec (100%) rename {reactos/dll => dll}/keyboard/kbdinmal/kbdinmal.c (100%) rename {reactos/dll => dll}/keyboard/kbdinmal/kbdinmal.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdinmal/kbdinmal.rc (100%) rename {reactos/dll => dll}/keyboard/kbdinmal/kbdinmal.spec (100%) rename {reactos/dll => dll}/keyboard/kbdir/kbdir.c (100%) rename {reactos/dll => dll}/keyboard/kbdir/kbdir.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdir/kbdir.rc (100%) rename {reactos/dll => dll}/keyboard/kbdir/kbdir.spec (100%) rename {reactos/dll => dll}/keyboard/kbdit/kbdit.c (100%) rename {reactos/dll => dll}/keyboard/kbdit/kbdit.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdit/kbdit.rc (100%) rename {reactos/dll => dll}/keyboard/kbdit/kbdit.spec (100%) rename {reactos/dll => dll}/keyboard/kbdja/kbdja.c (100%) rename {reactos/dll => dll}/keyboard/kbdja/kbdja.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdja/kbdja.rc (100%) rename {reactos/dll => dll}/keyboard/kbdja/kbdja.spec (100%) rename {reactos/dll => dll}/keyboard/kbdkaz/kbdkaz.c (100%) rename {reactos/dll => dll}/keyboard/kbdkaz/kbdkaz.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdkaz/kbdkaz.rc (100%) rename {reactos/dll => dll}/keyboard/kbdkaz/kbdkaz.spec (100%) rename {reactos/dll => dll}/keyboard/kbdko/kbdko.c (100%) rename {reactos/dll => dll}/keyboard/kbdko/kbdko.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdko/kbdko.rc (100%) rename {reactos/dll => dll}/keyboard/kbdko/kbdko.spec (100%) rename {reactos/dll => dll}/keyboard/kbdla/kbdla.c (100%) rename {reactos/dll => dll}/keyboard/kbdla/kbdla.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdla/kbdla.rc (100%) rename {reactos/dll => dll}/keyboard/kbdla/kbdla.spec (100%) rename {reactos/dll => dll}/keyboard/kbdlt/kbdlt.c (100%) rename {reactos/dll => dll}/keyboard/kbdlt/kbdlt.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdlt/kbdlt.rc (100%) rename {reactos/dll => dll}/keyboard/kbdlt/kbdlt.spec (100%) rename {reactos/dll => dll}/keyboard/kbdlv/kbdlv.c (100%) rename {reactos/dll => dll}/keyboard/kbdlv/kbdlv.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdlv/kbdlv.rc (100%) rename {reactos/dll => dll}/keyboard/kbdlv/kbdlv.spec (100%) rename {reactos/dll => dll}/keyboard/kbdmac/kbdmac.c (100%) rename {reactos/dll => dll}/keyboard/kbdmac/kbdmac.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdmac/kbdmac.rc (100%) rename {reactos/dll => dll}/keyboard/kbdmac/kbdmac.spec (100%) rename {reactos/dll => dll}/keyboard/kbdne/kbdne.c (100%) rename {reactos/dll => dll}/keyboard/kbdne/kbdne.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdne/kbdne.rc (100%) rename {reactos/dll => dll}/keyboard/kbdne/kbdne.spec (100%) rename {reactos/dll => dll}/keyboard/kbdno/kbdno.c (100%) rename {reactos/dll => dll}/keyboard/kbdno/kbdno.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdno/kbdno.rc (100%) rename {reactos/dll => dll}/keyboard/kbdno/kbdno.spec (100%) rename {reactos/dll => dll}/keyboard/kbdpl1/kbdpl1.c (100%) rename {reactos/dll => dll}/keyboard/kbdpl1/kbdpl1.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdpl1/kbdpl1.rc (100%) rename {reactos/dll => dll}/keyboard/kbdpl1/kbdpl1.spec (100%) rename {reactos/dll => dll}/keyboard/kbdpo/kbdpo.c (100%) rename {reactos/dll => dll}/keyboard/kbdpo/kbdpo.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdpo/kbdpo.rc (100%) rename {reactos/dll => dll}/keyboard/kbdpo/kbdpo.spec (100%) rename {reactos/dll => dll}/keyboard/kbdro/kbdro.c (100%) rename {reactos/dll => dll}/keyboard/kbdro/kbdro.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdro/kbdro.rc (100%) rename {reactos/dll => dll}/keyboard/kbdro/kbdro.spec (100%) rename {reactos/dll => dll}/keyboard/kbdru/kbdru.c (100%) rename {reactos/dll => dll}/keyboard/kbdru/kbdru.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdru/kbdru.rc (100%) rename {reactos/dll => dll}/keyboard/kbdru/kbdru.spec (100%) rename {reactos/dll => dll}/keyboard/kbdru1/kbdru1.c (100%) rename {reactos/dll => dll}/keyboard/kbdru1/kbdru1.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdru1/kbdru1.rc (100%) rename {reactos/dll => dll}/keyboard/kbdru1/kbdru1.spec (100%) rename {reactos/dll => dll}/keyboard/kbdsg/kbdsg.c (100%) rename {reactos/dll => dll}/keyboard/kbdsg/kbdsg.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdsg/kbdsg.rc (100%) rename {reactos/dll => dll}/keyboard/kbdsg/kbdsg.spec (100%) rename {reactos/dll => dll}/keyboard/kbdsk/kbdsk.c (100%) rename {reactos/dll => dll}/keyboard/kbdsk/kbdsk.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdsk/kbdsk.rc (100%) rename {reactos/dll => dll}/keyboard/kbdsk/kbdsk.spec (100%) rename {reactos/dll => dll}/keyboard/kbdsk1/kbdsk1.c (100%) rename {reactos/dll => dll}/keyboard/kbdsk1/kbdsk1.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdsk1/kbdsk1.rc (100%) rename {reactos/dll => dll}/keyboard/kbdsk1/kbdsk1.spec (100%) rename {reactos/dll => dll}/keyboard/kbdsw/kbdsw.c (100%) rename {reactos/dll => dll}/keyboard/kbdsw/kbdsw.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdsw/kbdsw.rc (100%) rename {reactos/dll => dll}/keyboard/kbdsw/kbdsw.spec (100%) rename {reactos/dll => dll}/keyboard/kbdtat/kbdtat.c (100%) rename {reactos/dll => dll}/keyboard/kbdtat/kbdtat.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdtat/kbdtat.rc (100%) rename {reactos/dll => dll}/keyboard/kbdtat/kbdtat.spec (100%) rename {reactos/dll => dll}/keyboard/kbdth0/kbdth0.c (100%) rename {reactos/dll => dll}/keyboard/kbdth0/kbdth0.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdth0/kbdth0.rc (100%) rename {reactos/dll => dll}/keyboard/kbdth0/kbdth0.spec (100%) rename {reactos/dll => dll}/keyboard/kbdth1/kbdth1.c (100%) rename {reactos/dll => dll}/keyboard/kbdth1/kbdth1.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdth1/kbdth1.rc (100%) rename {reactos/dll => dll}/keyboard/kbdth1/kbdth1.spec (100%) rename {reactos/dll => dll}/keyboard/kbdth2/kbdth2.c (100%) rename {reactos/dll => dll}/keyboard/kbdth2/kbdth2.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdth2/kbdth2.rc (100%) rename {reactos/dll => dll}/keyboard/kbdth2/kbdth2.spec (100%) rename {reactos/dll => dll}/keyboard/kbdth3/kbdth3.c (100%) rename {reactos/dll => dll}/keyboard/kbdth3/kbdth3.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdth3/kbdth3.rc (100%) rename {reactos/dll => dll}/keyboard/kbdth3/kbdth3.spec (100%) rename {reactos/dll => dll}/keyboard/kbdtuf/kbdtuf.c (100%) rename {reactos/dll => dll}/keyboard/kbdtuf/kbdtuf.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdtuf/kbdtuf.rc (100%) rename {reactos/dll => dll}/keyboard/kbdtuf/kbdtuf.spec (100%) rename {reactos/dll => dll}/keyboard/kbdtuq/kbdtuq.c (100%) rename {reactos/dll => dll}/keyboard/kbdtuq/kbdtuq.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdtuq/kbdtuq.rc (100%) rename {reactos/dll => dll}/keyboard/kbdtuq/kbdtuq.spec (100%) rename {reactos/dll => dll}/keyboard/kbduk/kbduk.c (100%) rename {reactos/dll => dll}/keyboard/kbduk/kbduk.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbduk/kbduk.rc (100%) rename {reactos/dll => dll}/keyboard/kbduk/kbduk.spec (100%) rename {reactos/dll => dll}/keyboard/kbdur/kbdur.c (100%) rename {reactos/dll => dll}/keyboard/kbdur/kbdur.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdur/kbdur.rc (100%) rename {reactos/dll => dll}/keyboard/kbdur/kbdur.spec (100%) rename {reactos/dll => dll}/keyboard/kbdurs/kbdurs.c (100%) rename {reactos/dll => dll}/keyboard/kbdurs/kbdurs.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdurs/kbdurs.rc (100%) rename {reactos/dll => dll}/keyboard/kbdurs/kbdurs.spec (100%) rename {reactos/dll => dll}/keyboard/kbdus/kbdus.c (100%) rename {reactos/dll => dll}/keyboard/kbdus/kbdus.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdus/kbdus.rc (100%) rename {reactos/dll => dll}/keyboard/kbdus/kbdus.spec (100%) rename {reactos/dll => dll}/keyboard/kbdusa/kbdusa.c (100%) rename {reactos/dll => dll}/keyboard/kbdusa/kbdusa.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdusa/kbdusa.rc (100%) rename {reactos/dll => dll}/keyboard/kbdusa/kbdusa.spec (100%) rename {reactos/dll => dll}/keyboard/kbdusl/kbdusl.c (100%) rename {reactos/dll => dll}/keyboard/kbdusl/kbdusl.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdusl/kbdusl.rc (100%) rename {reactos/dll => dll}/keyboard/kbdusl/kbdusl.spec (100%) rename {reactos/dll => dll}/keyboard/kbdusr/kbdusr.c (100%) rename {reactos/dll => dll}/keyboard/kbdusr/kbdusr.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdusr/kbdusr.rc (100%) rename {reactos/dll => dll}/keyboard/kbdusr/kbdusr.spec (100%) rename {reactos/dll => dll}/keyboard/kbdusx/kbdusx.c (100%) rename {reactos/dll => dll}/keyboard/kbdusx/kbdusx.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdusx/kbdusx.rc (100%) rename {reactos/dll => dll}/keyboard/kbdusx/kbdusx.spec (100%) rename {reactos/dll => dll}/keyboard/kbduzb/kbduzb.c (100%) rename {reactos/dll => dll}/keyboard/kbduzb/kbduzb.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbduzb/kbduzb.rc (100%) rename {reactos/dll => dll}/keyboard/kbduzb/kbduzb.spec (100%) rename {reactos/dll => dll}/keyboard/kbdvntc/kbdvntc.c (100%) rename {reactos/dll => dll}/keyboard/kbdvntc/kbdvntc.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdvntc/kbdvntc.rc (100%) rename {reactos/dll => dll}/keyboard/kbdvntc/kbdvntc.spec (100%) rename {reactos/dll => dll}/keyboard/kbdycc/kbdycc.c (100%) rename {reactos/dll => dll}/keyboard/kbdycc/kbdycc.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdycc/kbdycc.rc (100%) rename {reactos/dll => dll}/keyboard/kbdycc/kbdycc.spec (100%) rename {reactos/dll => dll}/keyboard/kbdycl/kbdycl.c (100%) rename {reactos/dll => dll}/keyboard/kbdycl/kbdycl.rbuild (100%) rename {reactos/dll => dll}/keyboard/kbdycl/kbdycl.rc (100%) rename {reactos/dll => dll}/keyboard/kbdycl/kbdycl.spec (100%) rename {reactos/dll => dll}/keyboard/keyboard.rbuild (100%) rename {reactos/dll => dll}/nls/idndl/idndl.cpp (100%) rename {reactos/dll => dll}/nls/idndl/idndl.def (100%) rename {reactos/dll => dll}/nls/idndl/idndl.rbuild (100%) rename {reactos/dll => dll}/nls/idndl_redist/data/genidldndata.cpp (100%) rename {reactos/dll => dll}/nls/idndl_redist/data/idldata.cpp (100%) rename {reactos/dll => dll}/nls/idndl_redist/idndl.cpp (100%) rename {reactos/dll => dll}/nls/idndl_redist/idndl.def (100%) rename {reactos/dll => dll}/nls/idndl_redist/idndl_redist.rbuild (100%) rename {reactos/dll => dll}/nls/idndl_redist/stubs.cpp (100%) rename {reactos/dll => dll}/nls/nls.rbuild (100%) rename {reactos/dll => dll}/nls/normaliz/dummy.c (100%) rename {reactos/dll => dll}/nls/normaliz/normaliz.def (100%) rename {reactos/dll => dll}/nls/normaliz/normaliz.rbuild (100%) rename {reactos/dll => dll}/nls/normaliz_redist/data/icudt38.c (100%) rename {reactos/dll => dll}/nls/normaliz_redist/data/icudt38.lst (100%) rename {reactos/dll => dll}/nls/normaliz_redist/normaliz.cpp (100%) rename {reactos/dll => dll}/nls/normaliz_redist/normaliz.def (100%) rename {reactos/dll => dll}/nls/normaliz_redist/normaliz_redist.rbuild (100%) rename {reactos/dll => dll}/ntdll/Doxyfile (100%) rename {reactos/dll => dll}/ntdll/csr/api.c (100%) rename {reactos/dll => dll}/ntdll/csr/capture.c (100%) rename {reactos/dll => dll}/ntdll/csr/connect.c (100%) rename {reactos/dll => dll}/ntdll/dbg/dbgui.c (100%) rename {reactos/dll => dll}/ntdll/def/ntdll.rc (100%) rename {reactos/dll => dll}/ntdll/def/ntdll_arm.def (100%) rename {reactos/dll => dll}/ntdll/def/ntdll_i386.def (100%) rename {reactos/dll => dll}/ntdll/dispatch/arm/stubs_asm.s (100%) rename {reactos/dll => dll}/ntdll/dispatch/dispatch.c (100%) rename {reactos/dll => dll}/ntdll/dispatch/i386/dispatch.S (100%) rename {reactos/dll => dll}/ntdll/include/ntdll.h (100%) rename {reactos/dll => dll}/ntdll/include/ntdllp.h (100%) rename {reactos/dll => dll}/ntdll/ldr/elf.c (100%) rename {reactos/dll => dll}/ntdll/ldr/startup.c (100%) rename {reactos/dll => dll}/ntdll/ldr/utils.c (100%) rename {reactos/dll => dll}/ntdll/ntdll.rbuild (100%) rename {reactos/dll => dll}/ntdll/rtl/libsupp.c (100%) rename {reactos/dll => dll}/ntdll/rtl/version.c (100%) rename {reactos/dll => dll}/shellext/deskadp/deskadp.c (100%) rename {reactos/dll => dll}/shellext/deskadp/deskadp.h (100%) rename {reactos/dll => dll}/shellext/deskadp/deskadp.rbuild (100%) rename {reactos/dll => dll}/shellext/deskadp/deskadp.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/deskadp.spec (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/de-DE.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/el-GR.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/en-US.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/es-ES.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/eu-ES.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/it-IT.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/no-NO.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/precomp.h (100%) rename {reactos/dll => dll}/shellext/deskadp/resource.h (100%) rename {reactos/dll => dll}/shellext/deskadp/rsrc.rc (100%) rename {reactos/dll => dll}/shellext/deskadp/shxiface.c (100%) rename {reactos/dll => dll}/shellext/deskmon/deskmon.c (100%) rename {reactos/dll => dll}/shellext/deskmon/deskmon.h (100%) rename {reactos/dll => dll}/shellext/deskmon/deskmon.rbuild (100%) rename {reactos/dll => dll}/shellext/deskmon/deskmon.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/deskmon.spec (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/de-DE.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/el-GR.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/en-US.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/es-ES.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/eu-ES.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/it-IT.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/no-NO.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/precomp.h (100%) rename {reactos/dll => dll}/shellext/deskmon/resource.h (100%) rename {reactos/dll => dll}/shellext/deskmon/rsrc.rc (100%) rename {reactos/dll => dll}/shellext/deskmon/shxiface.c (100%) rename {reactos/dll => dll}/shellext/devcpux/devcpux.def (100%) rename {reactos/dll => dll}/shellext/devcpux/devcpux.rbuild (100%) rename {reactos/dll => dll}/shellext/devcpux/processor.c (100%) rename {reactos/dll => dll}/shellext/devcpux/processor.rc (100%) rename {reactos/dll => dll}/shellext/devcpux/resource.h (100%) rename {reactos/dll => dll}/shellext/fontext/fontext.c (100%) rename {reactos/dll => dll}/shellext/fontext/fontext.h (100%) rename {reactos/dll => dll}/shellext/fontext/fontext.rbuild (100%) rename {reactos/dll => dll}/shellext/fontext/fontext.rc (100%) rename {reactos/dll => dll}/shellext/fontext/fontext.spec (100%) rename {reactos/dll => dll}/shellext/fontext/lang/en-US.rc (100%) rename {reactos/dll => dll}/shellext/fontext/regsvr.c (100%) rename {reactos/dll => dll}/shellext/fontext/resource.h (100%) rename {reactos/dll => dll}/shellext/fontext/rsrc.rc (100%) rename {reactos/dll => dll}/shellext/shellext.rbuild (100%) rename {reactos/dll => dll}/shellext/slayer/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/de-DE.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/en-US.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/es-ES.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/eu-ES.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/id-ID.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/it-IT.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/no-NO.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/shellext/slayer/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/shellext/slayer/precomp.h (100%) rename {reactos/dll => dll}/shellext/slayer/resource.h (100%) rename {reactos/dll => dll}/shellext/slayer/rsrc.rc (100%) rename {reactos/dll => dll}/shellext/slayer/slayer.c (100%) rename {reactos/dll => dll}/shellext/slayer/slayer.def (100%) rename {reactos/dll => dll}/shellext/slayer/slayer.h (100%) rename {reactos/dll => dll}/shellext/slayer/slayer.rbuild (100%) rename {reactos/dll => dll}/shellext/slayer/slayer.rc (100%) rename {reactos/dll => dll}/win32/acledit/acledit.c (100%) rename {reactos/dll => dll}/win32/acledit/acledit.rbuild (100%) rename {reactos/dll => dll}/win32/acledit/acledit.rc (100%) rename {reactos/dll => dll}/win32/acledit/acledit.spec (100%) rename {reactos/dll => dll}/win32/acledit/acleditint.h (100%) rename {reactos/dll => dll}/win32/acledit/resource.h (100%) rename {reactos/dll => dll}/win32/acledit/stubs.c (100%) rename {reactos/dll => dll}/win32/aclui/aclui.c (100%) rename {reactos/dll => dll}/win32/aclui/aclui.rbuild (100%) rename {reactos/dll => dll}/win32/aclui/aclui.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui.spec (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Bg.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_De.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_El.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_En.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Es.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Fr.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Hu.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Id.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_It.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Ja.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Nl.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_No.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Pl.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Ru.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Sv.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Th.rc (100%) rename {reactos/dll => dll}/win32/aclui/aclui_Uk.rc (100%) rename {reactos/dll => dll}/win32/aclui/checklist.c (100%) rename {reactos/dll => dll}/win32/aclui/guid.c (100%) rename {reactos/dll => dll}/win32/aclui/misc.c (100%) rename {reactos/dll => dll}/win32/aclui/precomp.h (100%) rename {reactos/dll => dll}/win32/aclui/res/usrgrp.bmp (100%) rename {reactos/dll => dll}/win32/aclui/resource.h (100%) rename {reactos/dll => dll}/win32/aclui/sidcache.c (100%) rename {reactos/dll => dll}/win32/advapi32/advapi32.def (100%) rename {reactos/dll => dll}/win32/advapi32/advapi32.h (100%) rename {reactos/dll => dll}/win32/advapi32/advapi32.rbuild (100%) rename {reactos/dll => dll}/win32/advapi32/advapi32.rc (100%) rename {reactos/dll => dll}/win32/advapi32/crypt/crypt.c (100%) rename {reactos/dll => dll}/win32/advapi32/crypt/crypt.h (100%) rename {reactos/dll => dll}/win32/advapi32/crypt/crypt_arc4.c (100%) rename {reactos/dll => dll}/win32/advapi32/crypt/crypt_des.c (100%) rename {reactos/dll => dll}/win32/advapi32/crypt/crypt_lmhash.c (100%) rename {reactos/dll => dll}/win32/advapi32/crypt/crypt_md4.c (100%) rename {reactos/dll => dll}/win32/advapi32/crypt/crypt_md5.c (100%) rename {reactos/dll => dll}/win32/advapi32/crypt/crypt_sha.c (100%) rename {reactos/dll => dll}/win32/advapi32/misc/dllmain.c (100%) rename {reactos/dll => dll}/win32/advapi32/misc/hwprofiles.c (100%) rename {reactos/dll => dll}/win32/advapi32/misc/logon.c (100%) rename {reactos/dll => dll}/win32/advapi32/misc/msi.c (100%) rename {reactos/dll => dll}/win32/advapi32/misc/shutdown.c (100%) rename {reactos/dll => dll}/win32/advapi32/misc/sysfunc.c (100%) rename {reactos/dll => dll}/win32/advapi32/misc/trace.c (100%) rename {reactos/dll => dll}/win32/advapi32/reg/reg.c (100%) rename {reactos/dll => dll}/win32/advapi32/sec/ac.c (100%) rename {reactos/dll => dll}/win32/advapi32/sec/audit.c (100%) rename {reactos/dll => dll}/win32/advapi32/sec/cred.c (100%) rename {reactos/dll => dll}/win32/advapi32/sec/lsa.c (100%) rename {reactos/dll => dll}/win32/advapi32/sec/misc.c (100%) rename {reactos/dll => dll}/win32/advapi32/sec/sec.c (100%) rename {reactos/dll => dll}/win32/advapi32/sec/sid.c (100%) rename {reactos/dll => dll}/win32/advapi32/sec/trustee.c (100%) rename {reactos/dll => dll}/win32/advapi32/service/eventlog.c (100%) rename {reactos/dll => dll}/win32/advapi32/service/rpc.c (100%) rename {reactos/dll => dll}/win32/advapi32/service/scm.c (100%) rename {reactos/dll => dll}/win32/advapi32/service/sctrl.c (100%) rename {reactos/dll => dll}/win32/advapi32/token/privilege.c (100%) rename {reactos/dll => dll}/win32/advapi32/token/token.c (100%) rename {reactos/dll => dll}/win32/advpack/advpack.c (100%) rename {reactos/dll => dll}/win32/advpack/advpack.rbuild (100%) rename {reactos/dll => dll}/win32/advpack/advpack.spec (100%) rename {reactos/dll => dll}/win32/advpack/advpack_private.h (100%) rename {reactos/dll => dll}/win32/advpack/files.c (100%) rename {reactos/dll => dll}/win32/advpack/install.c (100%) rename {reactos/dll => dll}/win32/advpack/reg.c (100%) rename {reactos/dll => dll}/win32/atl/atl.rbuild (100%) rename {reactos/dll => dll}/win32/atl/atl.rgs (100%) rename {reactos/dll => dll}/win32/atl/atl.spec (100%) rename {reactos/dll => dll}/win32/atl/atl_ax.c (100%) rename {reactos/dll => dll}/win32/atl/atl_main.c (100%) rename {reactos/dll => dll}/win32/atl/atlbase.h (100%) rename {reactos/dll => dll}/win32/atl/atliface.idl (100%) rename {reactos/dll => dll}/win32/atl/atlwin.h (100%) rename {reactos/dll => dll}/win32/atl/registrar.c (100%) rename {reactos/dll => dll}/win32/atl/rsrc.rc (100%) rename {reactos/dll => dll}/win32/authz/authz.c (100%) rename {reactos/dll => dll}/win32/authz/authz.def (100%) rename {reactos/dll => dll}/win32/authz/authz.rbuild (100%) rename {reactos/dll => dll}/win32/authz/authz.rc (100%) rename {reactos/dll => dll}/win32/authz/clictx.c (100%) rename {reactos/dll => dll}/win32/authz/precomp.h (100%) rename {reactos/dll => dll}/win32/authz/resman.c (100%) rename {reactos/dll => dll}/win32/avifil32/acmstream.c (100%) rename {reactos/dll => dll}/win32/avifil32/api.c (100%) rename {reactos/dll => dll}/win32/avifil32/avifil32.rbuild (100%) rename {reactos/dll => dll}/win32/avifil32/avifil32.spec (100%) rename {reactos/dll => dll}/win32/avifil32/avifil32_ros.diff (100%) rename {reactos/dll => dll}/win32/avifil32/avifile.c (100%) rename {reactos/dll => dll}/win32/avifil32/avifile.spec (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Cs.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Da.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_De.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_En.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Es.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Fr.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Hu.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_It.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Ja.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Ko.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Nl.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_No.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Pl.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Pt.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Ru.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Si.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Sv.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Tr.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_Uk.rc (100%) rename {reactos/dll => dll}/win32/avifil32/avifile_private.h (100%) rename {reactos/dll => dll}/win32/avifil32/editstream.c (100%) rename {reactos/dll => dll}/win32/avifil32/extrachunk.c (100%) rename {reactos/dll => dll}/win32/avifil32/extrachunk.h (100%) rename {reactos/dll => dll}/win32/avifil32/factory.c (100%) rename {reactos/dll => dll}/win32/avifil32/getframe.c (100%) rename {reactos/dll => dll}/win32/avifil32/icmstream.c (100%) rename {reactos/dll => dll}/win32/avifil32/regsvr.c (100%) rename {reactos/dll => dll}/win32/avifil32/rsrc.rc (100%) rename {reactos/dll => dll}/win32/avifil32/tmpfile.c (100%) rename {reactos/dll => dll}/win32/avifil32/wavfile.c (100%) rename {reactos/dll => dll}/win32/beepmidi/beepmidi.c (100%) rename {reactos/dll => dll}/win32/beepmidi/beepmidi.def (100%) rename {reactos/dll => dll}/win32/beepmidi/beepmidi.rbuild (100%) rename {reactos/dll => dll}/win32/beepmidi/readme.txt (100%) rename {reactos/dll => dll}/win32/browseui/aclmulti.c (100%) rename {reactos/dll => dll}/win32/browseui/bandsite.c (100%) rename {reactos/dll => dll}/win32/browseui/bandsitemenu.c (100%) rename {reactos/dll => dll}/win32/browseui/browseui.h (100%) rename {reactos/dll => dll}/win32/browseui/browseui.rbuild (100%) rename {reactos/dll => dll}/win32/browseui/browseui.spec (100%) rename {reactos/dll => dll}/win32/browseui/browseui_main.c (100%) rename {reactos/dll => dll}/win32/browseui/browseui_ros.diff (100%) rename {reactos/dll => dll}/win32/browseui/regsvr.c (100%) rename {reactos/dll => dll}/win32/browseui/version.rc (100%) rename {reactos/dll => dll}/win32/cabinet/cabinet.h (100%) rename {reactos/dll => dll}/win32/cabinet/cabinet.rbuild (100%) rename {reactos/dll => dll}/win32/cabinet/cabinet.rc (100%) rename {reactos/dll => dll}/win32/cabinet/cabinet.spec (100%) rename {reactos/dll => dll}/win32/cabinet/cabinet_main.c (100%) rename {reactos/dll => dll}/win32/cabinet/fci.c (100%) rename {reactos/dll => dll}/win32/cabinet/fdi.c (100%) rename {reactos/dll => dll}/win32/cards/cards.c (100%) rename {reactos/dll => dll}/win32/cards/cards.h (100%) rename {reactos/dll => dll}/win32/cards/cards.rbuild (100%) rename {reactos/dll => dll}/win32/cards/cards.rc (100%) rename {reactos/dll => dll}/win32/cards/cards.spec (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel10.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel2.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel3.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel4.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel5.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel6.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel7.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel8.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Eichel9.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/EichelAs.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/EichelKoenig.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/EichelOber.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/EichelUnter.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/FreeCard.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras10.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras2.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras3.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras4.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras5.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras6.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras7.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras8.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Gras9.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/GrasAs.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/GrasKoenig.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/GrasOber.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/GrasUnter.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz10.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz2.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz3.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz4.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz5.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz6.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz7.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz8.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Herz9.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/HerzAs.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/HerzKoenig.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/HerzOber.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/HerzUnter.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Joker.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/OSign.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Ruecken.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen10.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen2.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen3.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen4.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen5.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen6.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen7.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen8.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/Schellen9.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/SchellenAs.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/SchellenKoenig.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/SchellenOber.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/SchellenUnter.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/bavarian/XSign.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_1.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_10.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_11.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_12.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_2.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_3.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_4.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_5.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_6.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_7.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_8.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Background_9.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Ace.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Eight.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Five.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Four.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Jack.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_King.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Nine.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Queen.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Seven.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Six.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Ten.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Three.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Clubs_Two.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Ace.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Eight.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Five.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Four.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Jack.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_King.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Nine.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Queen.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Seven.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Six.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Ten.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Three.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Diamonds_Two.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/FreeCard.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Ace.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Eight.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Five.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Four.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Jack.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_King.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Nine.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Queen.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Seven.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Six.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Ten.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Three.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Hearts_Two.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Joker.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/OSign.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Ace.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Eight.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Five.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Four.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Jack.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_King.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Nine.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Queen.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Seven.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Six.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Ten.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Three.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/Spades_Two.bmp (100%) rename {reactos/dll => dll}/win32/cards/res/default/XSign.bmp (100%) rename {reactos/dll => dll}/win32/cfgmgr32/cfgmgr32.def (100%) rename {reactos/dll => dll}/win32/cfgmgr32/cfgmgr32.rbuild (100%) rename {reactos/dll => dll}/win32/cfgmgr32/cfgmgr32.rc (100%) rename {reactos/dll => dll}/win32/clusapi/clusapi.c (100%) rename {reactos/dll => dll}/win32/clusapi/clusapi.rbuild (100%) rename {reactos/dll => dll}/win32/clusapi/clusapi.spec (100%) rename {reactos/dll => dll}/win32/comcat/comcat.rbuild (100%) rename {reactos/dll => dll}/win32/comcat/comcat.spec (100%) rename {reactos/dll => dll}/win32/comcat/comcat_main.c (100%) rename {reactos/dll => dll}/win32/comcat/comcat_private.h (100%) rename {reactos/dll => dll}/win32/comcat/factory.c (100%) rename {reactos/dll => dll}/win32/comcat/information.c (100%) rename {reactos/dll => dll}/win32/comcat/manager.c (100%) rename {reactos/dll => dll}/win32/comcat/register.c (100%) rename {reactos/dll => dll}/win32/comcat/regsvr.c (100%) rename {reactos/dll => dll}/win32/comcat/version.rc (100%) rename {reactos/dll => dll}/win32/comctl32/animate.c (100%) rename {reactos/dll => dll}/win32/comctl32/comboex.c (100%) rename {reactos/dll => dll}/win32/comctl32/comctl32.h (100%) rename {reactos/dll => dll}/win32/comctl32/comctl32.rbuild (100%) rename {reactos/dll => dll}/win32/comctl32/comctl32.spec (100%) rename {reactos/dll => dll}/win32/comctl32/comctl32_ros.diff (100%) rename {reactos/dll => dll}/win32/comctl32/comctl32undoc.c (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Bg.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Cn.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Cs.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_De.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_El.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_En.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Eo.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Es.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Fr.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Hu.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_It.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Ja.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Ko.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Nl.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_No.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Pl.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Pt.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Ro.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Ru.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Si.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Sv.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Th.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Tr.rc (100%) rename {reactos/dll => dll}/win32/comctl32/comctl_Uk.rc (100%) rename {reactos/dll => dll}/win32/comctl32/commctrl.c (100%) rename {reactos/dll => dll}/win32/comctl32/datetime.c (100%) rename {reactos/dll => dll}/win32/comctl32/dpa.c (100%) rename {reactos/dll => dll}/win32/comctl32/draglist.c (100%) rename {reactos/dll => dll}/win32/comctl32/dsa.c (100%) rename {reactos/dll => dll}/win32/comctl32/flatsb.c (100%) rename {reactos/dll => dll}/win32/comctl32/header.c (100%) rename {reactos/dll => dll}/win32/comctl32/hotkey.c (100%) rename {reactos/dll => dll}/win32/comctl32/idb_hist_large.bmp (100%) rename {reactos/dll => dll}/win32/comctl32/idb_hist_small.bmp (100%) rename {reactos/dll => dll}/win32/comctl32/idb_std_large.bmp (100%) rename {reactos/dll => dll}/win32/comctl32/idb_std_small.bmp (100%) rename {reactos/dll => dll}/win32/comctl32/idb_view_large.bmp (100%) rename {reactos/dll => dll}/win32/comctl32/idb_view_small.bmp (100%) rename {reactos/dll => dll}/win32/comctl32/idc_copy.cur (100%) rename {reactos/dll => dll}/win32/comctl32/idc_divider.cur (100%) rename {reactos/dll => dll}/win32/comctl32/idc_divideropen.cur (100%) rename {reactos/dll => dll}/win32/comctl32/idc_movebutton.cur (100%) rename {reactos/dll => dll}/win32/comctl32/idi_dragarrow.ico (100%) rename {reactos/dll => dll}/win32/comctl32/idi_tt_error_sm.ico (100%) rename {reactos/dll => dll}/win32/comctl32/idi_tt_info_sm.ico (100%) rename {reactos/dll => dll}/win32/comctl32/idi_tt_warn_sm.ico (100%) rename {reactos/dll => dll}/win32/comctl32/idt_check.bmp (100%) rename {reactos/dll => dll}/win32/comctl32/imagelist.c (100%) rename {reactos/dll => dll}/win32/comctl32/imagelist.h (100%) rename {reactos/dll => dll}/win32/comctl32/ipaddress.c (100%) rename {reactos/dll => dll}/win32/comctl32/listview.c (100%) rename {reactos/dll => dll}/win32/comctl32/monthcal.c (100%) rename {reactos/dll => dll}/win32/comctl32/nativefont.c (100%) rename {reactos/dll => dll}/win32/comctl32/pager.c (100%) rename {reactos/dll => dll}/win32/comctl32/progress.c (100%) rename {reactos/dll => dll}/win32/comctl32/propsheet.c (100%) rename {reactos/dll => dll}/win32/comctl32/rebar.c (100%) rename {reactos/dll => dll}/win32/comctl32/rsrc.rc (100%) rename {reactos/dll => dll}/win32/comctl32/smoothscroll.c (100%) rename {reactos/dll => dll}/win32/comctl32/status.c (100%) rename {reactos/dll => dll}/win32/comctl32/string.c (100%) rename {reactos/dll => dll}/win32/comctl32/syslink.c (100%) rename {reactos/dll => dll}/win32/comctl32/tab.c (100%) rename {reactos/dll => dll}/win32/comctl32/theme_combo.c (100%) rename {reactos/dll => dll}/win32/comctl32/theme_dialog.c (100%) rename {reactos/dll => dll}/win32/comctl32/theme_edit.c (100%) rename {reactos/dll => dll}/win32/comctl32/theme_listbox.c (100%) rename {reactos/dll => dll}/win32/comctl32/theming.c (100%) rename {reactos/dll => dll}/win32/comctl32/toolbar.c (100%) rename {reactos/dll => dll}/win32/comctl32/tooltips.c (100%) rename {reactos/dll => dll}/win32/comctl32/trackbar.c (100%) rename {reactos/dll => dll}/win32/comctl32/treeview.c (100%) rename {reactos/dll => dll}/win32/comctl32/updown.c (100%) rename {reactos/dll => dll}/win32/comdlg32/800.bmp (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg.h (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg16.h (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg32.c (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Bg.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Ca.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Cn.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Cs.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Da.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_De.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_El.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_En.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Eo.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Es.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Fi.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Fr.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Hu.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_It.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Ja.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Ko.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Nl.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_No.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Pl.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Pt.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Ro.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Ru.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Si.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Sk.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Sv.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Th.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Tr.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Uk.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Wa.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_Zh.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdlg_xx.rc (100%) rename {reactos/dll => dll}/win32/comdlg32/cdrom.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/colordlg.c (100%) rename {reactos/dll => dll}/win32/comdlg32/colordlg16.c (100%) rename {reactos/dll => dll}/win32/comdlg32/comdlg32.rbuild (100%) rename {reactos/dll => dll}/win32/comdlg32/comdlg32.spec (100%) rename {reactos/dll => dll}/win32/comdlg32/commdlg.spec (100%) rename {reactos/dll => dll}/win32/comdlg32/filedlg.c (100%) rename {reactos/dll => dll}/win32/comdlg32/filedlg16.c (100%) rename {reactos/dll => dll}/win32/comdlg32/filedlg31.c (100%) rename {reactos/dll => dll}/win32/comdlg32/filedlg31.h (100%) rename {reactos/dll => dll}/win32/comdlg32/filedlgbrowser.c (100%) rename {reactos/dll => dll}/win32/comdlg32/filedlgbrowser.h (100%) rename {reactos/dll => dll}/win32/comdlg32/finddlg16.c (100%) rename {reactos/dll => dll}/win32/comdlg32/finddlg32.c (100%) rename {reactos/dll => dll}/win32/comdlg32/floppy.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/folder.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/folder2.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/fontdlg.c (100%) rename {reactos/dll => dll}/win32/comdlg32/fontdlg16.c (100%) rename {reactos/dll => dll}/win32/comdlg32/fontpics.bmp (100%) rename {reactos/dll => dll}/win32/comdlg32/hdisk.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/network.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/pd32_collate.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/pd32_landscape.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/pd32_nocollate.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/pd32_portrait.ico (100%) rename {reactos/dll => dll}/win32/comdlg32/printdlg.c (100%) rename {reactos/dll => dll}/win32/comdlg32/printdlg.h (100%) rename {reactos/dll => dll}/win32/comdlg32/printdlg16.c (100%) rename {reactos/dll => dll}/win32/comdlg32/rsrc.rc (100%) rename {reactos/dll => dll}/win32/compstui/compstui.rbuild (100%) rename {reactos/dll => dll}/win32/compstui/compstui.spec (100%) rename {reactos/dll => dll}/win32/compstui/compstui_main.c (100%) rename {reactos/dll => dll}/win32/credui/banner.bmp (100%) rename {reactos/dll => dll}/win32/credui/credui.rbuild (100%) rename {reactos/dll => dll}/win32/credui/credui.rc (100%) rename {reactos/dll => dll}/win32/credui/credui.spec (100%) rename {reactos/dll => dll}/win32/credui/credui_Da.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_De.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_En.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Es.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Fr.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Ko.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Nl.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_No.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Pl.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Ru.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Si.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Sv.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_Zh.rc (100%) rename {reactos/dll => dll}/win32/credui/credui_main.c (100%) rename {reactos/dll => dll}/win32/credui/credui_resources.h (100%) rename {reactos/dll => dll}/win32/crtdll/crtdll.def (100%) rename {reactos/dll => dll}/win32/crtdll/crtdll.rbuild (100%) rename {reactos/dll => dll}/win32/crtdll/crtdll.rc (100%) rename {reactos/dll => dll}/win32/crtdll/dllmain.c (100%) rename {reactos/dll => dll}/win32/crtdll/precomp.h (100%) rename {reactos/dll => dll}/win32/crypt32/base64.c (100%) rename {reactos/dll => dll}/win32/crypt32/cert.c (100%) rename {reactos/dll => dll}/win32/crypt32/chain.c (100%) rename {reactos/dll => dll}/win32/crypt32/collectionstore.c (100%) rename {reactos/dll => dll}/win32/crypt32/context.c (100%) rename {reactos/dll => dll}/win32/crypt32/crl.c (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32.rbuild (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32.rc (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32.spec (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_De.rc (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_En.rc (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_Fr.rc (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_Ko.rc (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_Nl.rc (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_No.rc (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_Sv.rc (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_private.h (100%) rename {reactos/dll => dll}/win32/crypt32/crypt32_ros.diff (100%) rename {reactos/dll => dll}/win32/crypt32/cryptres.h (100%) rename {reactos/dll => dll}/win32/crypt32/ctl.c (100%) rename {reactos/dll => dll}/win32/crypt32/decode.c (100%) rename {reactos/dll => dll}/win32/crypt32/encode.c (100%) rename {reactos/dll => dll}/win32/crypt32/filestore.c (100%) rename {reactos/dll => dll}/win32/crypt32/main.c (100%) rename {reactos/dll => dll}/win32/crypt32/message.c (100%) rename {reactos/dll => dll}/win32/crypt32/msg.c (100%) rename {reactos/dll => dll}/win32/crypt32/object.c (100%) rename {reactos/dll => dll}/win32/crypt32/oid.c (100%) rename {reactos/dll => dll}/win32/crypt32/proplist.c (100%) rename {reactos/dll => dll}/win32/crypt32/protectdata.c (100%) rename {reactos/dll => dll}/win32/crypt32/provstore.c (100%) rename {reactos/dll => dll}/win32/crypt32/regstore.c (100%) rename {reactos/dll => dll}/win32/crypt32/rootstore.c (100%) rename {reactos/dll => dll}/win32/crypt32/serialize.c (100%) rename {reactos/dll => dll}/win32/crypt32/sip.c (100%) rename {reactos/dll => dll}/win32/crypt32/store.c (100%) rename {reactos/dll => dll}/win32/crypt32/str.c (100%) rename {reactos/dll => dll}/win32/crypt32/version.rc (100%) rename {reactos/dll => dll}/win32/cryptdll/cryptdll.c (100%) rename {reactos/dll => dll}/win32/cryptdll/cryptdll.rbuild (100%) rename {reactos/dll => dll}/win32/cryptdll/cryptdll.spec (100%) rename {reactos/dll => dll}/win32/cryptnet/cryptnet.rbuild (100%) rename {reactos/dll => dll}/win32/cryptnet/cryptnet.spec (100%) rename {reactos/dll => dll}/win32/cryptnet/cryptnet_main.c (100%) rename {reactos/dll => dll}/win32/cryptui/cryptui.rbuild (100%) rename {reactos/dll => dll}/win32/cryptui/cryptui.spec (100%) rename {reactos/dll => dll}/win32/cryptui/main.c (100%) rename {reactos/dll => dll}/win32/dbghelp/coff.c (100%) rename {reactos/dll => dll}/win32/dbghelp/dbghelp.c (100%) rename {reactos/dll => dll}/win32/dbghelp/dbghelp.rbuild (100%) rename {reactos/dll => dll}/win32/dbghelp/dbghelp.spec (100%) rename {reactos/dll => dll}/win32/dbghelp/dbghelp_private.h (100%) rename {reactos/dll => dll}/win32/dbghelp/dbghelp_ros.diff (100%) rename {reactos/dll => dll}/win32/dbghelp/dwarf.c (100%) rename {reactos/dll => dll}/win32/dbghelp/dwarf.h (100%) rename {reactos/dll => dll}/win32/dbghelp/elf_module.c (100%) rename {reactos/dll => dll}/win32/dbghelp/image.c (100%) rename {reactos/dll => dll}/win32/dbghelp/memory.c (100%) rename {reactos/dll => dll}/win32/dbghelp/minidump.c (100%) rename {reactos/dll => dll}/win32/dbghelp/module.c (100%) rename {reactos/dll => dll}/win32/dbghelp/msc.c (100%) rename {reactos/dll => dll}/win32/dbghelp/path.c (100%) rename {reactos/dll => dll}/win32/dbghelp/pe_module.c (100%) rename {reactos/dll => dll}/win32/dbghelp/regex.c (100%) rename {reactos/dll => dll}/win32/dbghelp/source.c (100%) rename {reactos/dll => dll}/win32/dbghelp/stabs.c (100%) rename {reactos/dll => dll}/win32/dbghelp/stack.c (100%) rename {reactos/dll => dll}/win32/dbghelp/storage.c (100%) rename {reactos/dll => dll}/win32/dbghelp/symbol.c (100%) rename {reactos/dll => dll}/win32/dbghelp/type.c (100%) rename {reactos/dll => dll}/win32/dbghelp/wdbgexts.h (100%) rename {reactos/dll => dll}/win32/dciman32/dciman32.rbuild (100%) rename {reactos/dll => dll}/win32/dciman32/dciman32.spec (100%) rename {reactos/dll => dll}/win32/dciman32/dciman_main.c (100%) rename {reactos/dll => dll}/win32/devmgr/advprop.c (100%) rename {reactos/dll => dll}/win32/devmgr/devmgr.rbuild (100%) rename {reactos/dll => dll}/win32/devmgr/devmgr.rc (100%) rename {reactos/dll => dll}/win32/devmgr/devmgr.spec (100%) rename {reactos/dll => dll}/win32/devmgr/devprblm.c (100%) rename {reactos/dll => dll}/win32/devmgr/hwpage.c (100%) rename {reactos/dll => dll}/win32/devmgr/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/pt-BR.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/devmgr/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/devmgr/misc.c (100%) rename {reactos/dll => dll}/win32/devmgr/precomp.h (100%) rename {reactos/dll => dll}/win32/devmgr/resource.h (100%) rename {reactos/dll => dll}/win32/devmgr/resources/devmgr.ico (100%) rename {reactos/dll => dll}/win32/devmgr/stubs.c (100%) rename {reactos/dll => dll}/win32/dhcpcsvc/dhcpcsvc.c (100%) rename {reactos/dll => dll}/win32/dhcpcsvc/dhcpcsvc.rbuild (100%) rename {reactos/dll => dll}/win32/dhcpcsvc/dhcpcsvc.rc (100%) rename {reactos/dll => dll}/win32/dhcpcsvc/dhcpcsvc.spec (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi.def (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi.rbuild (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi.rc (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi/adns.c (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi/context.c (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi/free.c (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi/names.c (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi/precomp.h (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi/query.c (100%) rename {reactos/dll => dll}/win32/dnsapi/dnsapi/stubs.c (100%) rename {reactos/dll => dll}/win32/dnsapi/include/internal/windns.h (100%) rename {reactos/dll => dll}/win32/fmifs/chkdsk.c (100%) rename {reactos/dll => dll}/win32/fmifs/compress.c (100%) rename {reactos/dll => dll}/win32/fmifs/diskcopy.c (100%) rename {reactos/dll => dll}/win32/fmifs/extend.c (100%) rename {reactos/dll => dll}/win32/fmifs/fmifs.def (100%) rename {reactos/dll => dll}/win32/fmifs/fmifs.rbuild (100%) rename {reactos/dll => dll}/win32/fmifs/fmifs.rc (100%) rename {reactos/dll => dll}/win32/fmifs/format.c (100%) rename {reactos/dll => dll}/win32/fmifs/init.c (100%) rename {reactos/dll => dll}/win32/fmifs/media.c (100%) rename {reactos/dll => dll}/win32/fmifs/precomp.h (100%) rename {reactos/dll => dll}/win32/fmifs/query.c (100%) rename {reactos/dll => dll}/win32/fusion/asmcache.c (100%) rename {reactos/dll => dll}/win32/fusion/asmname.c (100%) rename {reactos/dll => dll}/win32/fusion/assembly.c (100%) rename {reactos/dll => dll}/win32/fusion/fusion.c (100%) rename {reactos/dll => dll}/win32/fusion/fusion.rbuild (100%) rename {reactos/dll => dll}/win32/fusion/fusion.spec (100%) rename {reactos/dll => dll}/win32/fusion/fusion_main.c (100%) rename {reactos/dll => dll}/win32/fusion/fusion_ros.diff (100%) rename {reactos/dll => dll}/win32/fusion/fusionpriv.h (100%) rename {reactos/dll => dll}/win32/gdi32/gdi32.def (100%) rename {reactos/dll => dll}/win32/gdi32/gdi32.rbuild (100%) rename {reactos/dll => dll}/win32/gdi32/gdi32.rc (100%) rename {reactos/dll => dll}/win32/gdi32/good api.def (100%) rename {reactos/dll => dll}/win32/gdi32/include/gdi32p.h (100%) rename {reactos/dll => dll}/win32/gdi32/include/precomp.h (100%) rename {reactos/dll => dll}/win32/gdi32/main/dllmain.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/gdientry.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/hacks.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/heap.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/historic.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/misc.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/stubs.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/stubsa.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/stubsw.c (100%) rename {reactos/dll => dll}/win32/gdi32/misc/wingl.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/arc.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/bitmap.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/brush.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/coord.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/dc.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/eng.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/enhmfile.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/font.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/icm.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/linedda.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/metafile.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/painting.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/palette.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/path.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/pen.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/region.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/text.c (100%) rename {reactos/dll => dll}/win32/gdi32/objects/utils.c (100%) rename {reactos/dll => dll}/win32/gdiplus/brush.c (100%) rename {reactos/dll => dll}/win32/gdiplus/customlinecap.c (100%) rename {reactos/dll => dll}/win32/gdiplus/font.c (100%) rename {reactos/dll => dll}/win32/gdiplus/gdiplus.c (100%) rename {reactos/dll => dll}/win32/gdiplus/gdiplus.rbuild (100%) rename {reactos/dll => dll}/win32/gdiplus/gdiplus.spec (100%) rename {reactos/dll => dll}/win32/gdiplus/gdiplus_private.h (100%) rename {reactos/dll => dll}/win32/gdiplus/gdiplus_ros.diff (100%) rename {reactos/dll => dll}/win32/gdiplus/graphics.c (100%) rename {reactos/dll => dll}/win32/gdiplus/graphicspath.c (100%) rename {reactos/dll => dll}/win32/gdiplus/image.c (100%) rename {reactos/dll => dll}/win32/gdiplus/imageattributes.c (100%) rename {reactos/dll => dll}/win32/gdiplus/matrix.c (100%) rename {reactos/dll => dll}/win32/gdiplus/pathiterator.c (100%) rename {reactos/dll => dll}/win32/gdiplus/pen.c (100%) rename {reactos/dll => dll}/win32/gdiplus/region.c (100%) rename {reactos/dll => dll}/win32/gdiplus/stringformat.c (100%) rename {reactos/dll => dll}/win32/getuname/getuname.c (100%) rename {reactos/dll => dll}/win32/getuname/getuname.rbuild (100%) rename {reactos/dll => dll}/win32/getuname/getuname.rc (100%) rename {reactos/dll => dll}/win32/getuname/getuname.spec (100%) rename {reactos/dll => dll}/win32/glu32/glu32.def (100%) rename {reactos/dll => dll}/win32/glu32/glu32.rbuild (100%) rename {reactos/dll => dll}/win32/glu32/include/gluos.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/bezierEval.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/bezierEval.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/bezierPatch.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/bezierPatch.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/bezierPatchMesh.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/bezierPatchMesh.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/glcurveval.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/glcurveval.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/glimports.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/glinterface.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/glrenderer.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/glrenderer.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/glsurfeval.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/glsurfeval.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/incurveeval.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/insurfeval.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/mystdio.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/interface/mystdlib.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/arc.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/arc.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/arcsorter.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/arcsorter.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/arctess.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/arctess.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/backend.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/backend.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/basiccrveval.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/basiccrveval.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/basicsurfeval.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/basicsurfeval.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/bezierarc.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/bin.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/bin.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/bufpool.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/bufpool.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/cachingeval.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/cachingeval.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/ccw.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/coveandtiler.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/coveandtiler.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/curve.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/curve.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/curvelist.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/curvelist.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/curvesub.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/dataTransform.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/dataTransform.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/defines.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/displaylist.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/displaylist.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/displaymode.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/flist.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/flist.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/flistsorter.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/flistsorter.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/gridline.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/gridtrimvertex.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/gridvertex.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/hull.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/hull.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/intersect.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/jarcloc.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/knotvector.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/knotvector.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mapdesc.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mapdesc.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mapdescv.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/maplist.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/maplist.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mesher.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mesher.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/monoTriangulationBackend.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/monotonizer.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/monotonizer.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/myassert.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mycode.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mymath.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mysetjmp.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/mystring.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/nurbsconsts.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/nurbsinterfac.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/nurbstess.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/nurbstess.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/patch.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/patch.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/patchlist.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/patchlist.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/pwlarc.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/quilt.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/quilt.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/reader.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/reader.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/renderhints.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/renderhints.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/simplemath.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/slicer.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/slicer.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/sorter.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/sorter.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/splitarcs.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/subdivider.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/subdivider.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/tobezier.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/trimline.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/trimline.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/trimregion.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/trimregion.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/trimvertex.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/trimvertpool.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/trimvertpool.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/types.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/uarray.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/uarray.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/varray.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/internals/varray.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/definitions.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/directedLine.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/directedLine.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/glimports.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/gridWrap.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/gridWrap.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/monoChain.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/monoChain.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/monoPolyPart.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/monoPolyPart.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/monoTriangulation.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/monoTriangulation.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/mystdio.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/mystdlib.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/partitionX.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/partitionX.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/partitionY.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/partitionY.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/polyDBG.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/polyDBG.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/polyUtil.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/polyUtil.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/primitiveStream.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/primitiveStream.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/quicksort.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/quicksort.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/rectBlock.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/rectBlock.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleComp.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleComp.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleCompBot.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleCompBot.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleCompRight.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleCompRight.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleCompTop.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleCompTop.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampledLine.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/sampledLine.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/searchTree.cc (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/searchTree.h (100%) rename {reactos/dll => dll}/win32/glu32/libnurbs/nurbtess/zlassert.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/README (100%) rename {reactos/dll => dll}/win32/glu32/libtess/alg-outline (100%) rename {reactos/dll => dll}/win32/glu32/libtess/dict-list.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/dict.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/dict.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/geom.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/geom.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/memalloc.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/memalloc.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/mesh.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/mesh.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/normal.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/normal.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/priorityq-heap.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/priorityq-heap.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/priorityq-sort.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/priorityq.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/priorityq.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/render.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/render.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/sweep.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/sweep.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/tess.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/tess.h (100%) rename {reactos/dll => dll}/win32/glu32/libtess/tessmono.c (100%) rename {reactos/dll => dll}/win32/glu32/libtess/tessmono.h (100%) rename {reactos/dll => dll}/win32/glu32/libutil/error.c (100%) rename {reactos/dll => dll}/win32/glu32/libutil/glue.c (100%) rename {reactos/dll => dll}/win32/glu32/libutil/gluint.h (100%) rename {reactos/dll => dll}/win32/glu32/libutil/mipmap.c (100%) rename {reactos/dll => dll}/win32/glu32/libutil/project.c (100%) rename {reactos/dll => dll}/win32/glu32/libutil/quad.c (100%) rename {reactos/dll => dll}/win32/glu32/libutil/registry.c (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Cs.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Da.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/De.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/El.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/En.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Fi.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Fr.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Hu.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Ko.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Nl.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/No.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Pl.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Ru.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Si.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Sv.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Tr.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/Zh.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/chm.c (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/content.c (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/help.c (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/hhctrl.c (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/hhctrl.h (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/hhctrl.ocx.rbuild (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/hhctrl.ocx.spec (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/hhctrl.ocx_ros.diff (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/hhctrl.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/regsvr.c (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/resource.h (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/version.rc (100%) rename {reactos/dll => dll}/win32/hhctrl.ocx/webbrowser.c (100%) rename {reactos/dll => dll}/win32/hid/hid.c (100%) rename {reactos/dll => dll}/win32/hid/hid.def (100%) rename {reactos/dll => dll}/win32/hid/hid.rbuild (100%) rename {reactos/dll => dll}/win32/hid/hid.rc (100%) rename {reactos/dll => dll}/win32/hid/precomp.h (100%) rename {reactos/dll => dll}/win32/hid/stubs.c (100%) rename {reactos/dll => dll}/win32/hlink/browse_ctx.c (100%) rename {reactos/dll => dll}/win32/hlink/extserv.c (100%) rename {reactos/dll => dll}/win32/hlink/hlink.rbuild (100%) rename {reactos/dll => dll}/win32/hlink/hlink.spec (100%) rename {reactos/dll => dll}/win32/hlink/hlink_main.c (100%) rename {reactos/dll => dll}/win32/hlink/hlink_private.h (100%) rename {reactos/dll => dll}/win32/hlink/link.c (100%) rename {reactos/dll => dll}/win32/icmp/Makefile.in (100%) rename {reactos/dll => dll}/win32/icmp/icmp.dsp (100%) rename {reactos/dll => dll}/win32/icmp/icmp.rbuild (100%) rename {reactos/dll => dll}/win32/icmp/icmp.rc (100%) rename {reactos/dll => dll}/win32/icmp/icmp.spec (100%) rename {reactos/dll => dll}/win32/icmp/icmp_main.c (100%) rename {reactos/dll => dll}/win32/icmp/ip.h (100%) rename {reactos/dll => dll}/win32/icmp/ip_icmp.h (100%) rename {reactos/dll => dll}/win32/imagehlp/access.c (100%) rename {reactos/dll => dll}/win32/imagehlp/imagehlp.rbuild (100%) rename {reactos/dll => dll}/win32/imagehlp/imagehlp.rc (100%) rename {reactos/dll => dll}/win32/imagehlp/imagehlp.spec (100%) rename {reactos/dll => dll}/win32/imagehlp/imagehlp_main.c (100%) rename {reactos/dll => dll}/win32/imagehlp/integrity.c (100%) rename {reactos/dll => dll}/win32/imagehlp/modify.c (100%) rename {reactos/dll => dll}/win32/imagehlp/precomp.h (100%) rename {reactos/dll => dll}/win32/imm32/imm.c (100%) rename {reactos/dll => dll}/win32/imm32/imm.spec (100%) rename {reactos/dll => dll}/win32/imm32/imm32.rbuild (100%) rename {reactos/dll => dll}/win32/imm32/imm32.spec (100%) rename {reactos/dll => dll}/win32/imm32/version.rc (100%) rename {reactos/dll => dll}/win32/inetcomm/inetcomm.rbuild (100%) rename {reactos/dll => dll}/win32/inetcomm/inetcomm.spec (100%) rename {reactos/dll => dll}/win32/inetcomm/inetcomm_main.c (100%) rename {reactos/dll => dll}/win32/inetcomm/inetcomm_private.h (100%) rename {reactos/dll => dll}/win32/inetcomm/internettransport.c (100%) rename {reactos/dll => dll}/win32/inetcomm/mimeole.c (100%) rename {reactos/dll => dll}/win32/inetcomm/regsvr.c (100%) rename {reactos/dll => dll}/win32/inetmib1/inetmib1.rbuild (100%) rename {reactos/dll => dll}/win32/inetmib1/inetmib1.spec (100%) rename {reactos/dll => dll}/win32/inetmib1/main.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/Makefile.in (100%) rename {reactos/dll => dll}/win32/iphlpapi/dhcp.h (100%) rename {reactos/dll => dll}/win32/iphlpapi/dhcp_reactos.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/ifenum.h (100%) rename {reactos/dll => dll}/win32/iphlpapi/ifenum_reactos.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/iphlpapi.rbuild (100%) rename {reactos/dll => dll}/win32/iphlpapi/iphlpapi.rc (100%) rename {reactos/dll => dll}/win32/iphlpapi/iphlpapi.spec (100%) rename {reactos/dll => dll}/win32/iphlpapi/iphlpapi_main.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/iphlpapi_private.h (100%) rename {reactos/dll => dll}/win32/iphlpapi/ipstats.h (100%) rename {reactos/dll => dll}/win32/iphlpapi/ipstats_reactos.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/media.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/merge-notes.txt (100%) rename {reactos/dll => dll}/win32/iphlpapi/registry.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/resinfo.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/resinfo.h (100%) rename {reactos/dll => dll}/win32/iphlpapi/resinfo_reactos.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/route.c (100%) rename {reactos/dll => dll}/win32/iphlpapi/route.h (100%) rename {reactos/dll => dll}/win32/iphlpapi/route_reactos.c (100%) rename {reactos/dll => dll}/win32/iprtprio/iprtprio.c (100%) rename {reactos/dll => dll}/win32/iprtprio/iprtprio.def (100%) rename {reactos/dll => dll}/win32/iprtprio/iprtprio.rc (100%) rename {reactos/dll => dll}/win32/jscript/array.c (100%) rename {reactos/dll => dll}/win32/jscript/bool.c (100%) rename {reactos/dll => dll}/win32/jscript/dispex.c (100%) rename {reactos/dll => dll}/win32/jscript/engine.c (100%) rename {reactos/dll => dll}/win32/jscript/engine.h (100%) rename {reactos/dll => dll}/win32/jscript/function.c (100%) rename {reactos/dll => dll}/win32/jscript/global.c (100%) rename {reactos/dll => dll}/win32/jscript/jscript.c (100%) rename {reactos/dll => dll}/win32/jscript/jscript.h (100%) rename {reactos/dll => dll}/win32/jscript/jscript.inf (100%) rename {reactos/dll => dll}/win32/jscript/jscript.rbuild (100%) rename {reactos/dll => dll}/win32/jscript/jscript.spec (100%) rename {reactos/dll => dll}/win32/jscript/jscript_main.c (100%) rename {reactos/dll => dll}/win32/jscript/jsglobal.idl (100%) rename {reactos/dll => dll}/win32/jscript/jsglobal_dispid.h (100%) rename {reactos/dll => dll}/win32/jscript/jsutils.c (100%) rename {reactos/dll => dll}/win32/jscript/lex.c (100%) rename {reactos/dll => dll}/win32/jscript/math.c (100%) rename {reactos/dll => dll}/win32/jscript/number.c (100%) rename {reactos/dll => dll}/win32/jscript/object.c (100%) rename {reactos/dll => dll}/win32/jscript/parser.tab.c (100%) rename {reactos/dll => dll}/win32/jscript/parser.tab.h (100%) rename {reactos/dll => dll}/win32/jscript/parser.y (100%) rename {reactos/dll => dll}/win32/jscript/regexp.c (100%) rename {reactos/dll => dll}/win32/jscript/rsrc.rc (100%) rename {reactos/dll => dll}/win32/jscript/string.c (100%) rename {reactos/dll => dll}/win32/kernel32/debug/debugger.c (100%) rename {reactos/dll => dll}/win32/kernel32/debug/output.c (100%) rename {reactos/dll => dll}/win32/kernel32/except/except.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/backup.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/bintype.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/cnotify.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/copy.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/create.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/curdir.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/delete.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/deviceio.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/dir.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/dosdev.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/file.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/find.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/hardlink.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/iocompl.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/lfile.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/lock.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/mailslot.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/move.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/npipe.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/pipe.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/rw.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/tape.c (100%) rename {reactos/dll => dll}/win32/kernel32/file/volume.c (100%) rename {reactos/dll => dll}/win32/kernel32/include/baseheap.h (100%) rename {reactos/dll => dll}/win32/kernel32/include/kernel32.h (100%) rename {reactos/dll => dll}/win32/kernel32/k32.h (100%) rename {reactos/dll => dll}/win32/kernel32/kernel32.def (100%) rename {reactos/dll => dll}/win32/kernel32/kernel32.rbuild (100%) rename {reactos/dll => dll}/win32/kernel32/kernel32.rc (100%) rename {reactos/dll => dll}/win32/kernel32/lang/bg-BG.mc (100%) rename {reactos/dll => dll}/win32/kernel32/lang/de-DE.mc (100%) rename {reactos/dll => dll}/win32/kernel32/lang/pl-PL.mc (100%) rename {reactos/dll => dll}/win32/kernel32/lang/ru-RU.mc (100%) rename {reactos/dll => dll}/win32/kernel32/locale_rc.rc (100%) rename {reactos/dll => dll}/win32/kernel32/mem/global.c (100%) rename {reactos/dll => dll}/win32/kernel32/mem/heap.c (100%) rename {reactos/dll => dll}/win32/kernel32/mem/isbad.c (100%) rename {reactos/dll => dll}/win32/kernel32/mem/local.c (100%) rename {reactos/dll => dll}/win32/kernel32/mem/procmem.c (100%) rename {reactos/dll => dll}/win32/kernel32/mem/resnotify.c (100%) rename {reactos/dll => dll}/win32/kernel32/mem/section.c (100%) rename {reactos/dll => dll}/win32/kernel32/mem/virtual.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/actctx.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/atom.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/chartype.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/comm.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/computername.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/console.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/dllmain.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/env.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/error.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/errormsg.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/handle.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/icustubs.cpp (100%) rename {reactos/dll => dll}/win32/kernel32/misc/lang.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/lcformat.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/lcformat_private.h (100%) rename {reactos/dll => dll}/win32/kernel32/misc/ldr.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/lzexpand_main.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/muldiv.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/nls.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/perfcnt.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/profile.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/recovery.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/res.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/stubs.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/sysinfo.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/time.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/timerqueue.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/toolhelp.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/utils.c (100%) rename {reactos/dll => dll}/win32/kernel32/misc/version.c (100%) rename {reactos/dll => dll}/win32/kernel32/nls/afk.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ara.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/arb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/are.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/arg.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/arh.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ari.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/arj.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ark.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/arl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/arm.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/aro.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/arq.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ars.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/art.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/aru.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ary.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/aze.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/azl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/bel.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/bgr.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/cat.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/chs.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/cht.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/csy.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/dan.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/dea.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/dec.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/del.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/des.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/deu.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/div.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ell.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ena.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/enb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/enc.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/eng.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/eni.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/enj.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/enl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/enp.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ens.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ent.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/enu.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/enw.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/enz.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esa.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esc.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esd.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ese.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esf.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esg.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esh.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esi.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esm.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esn.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/eso.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esp.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esr.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ess.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esu.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esv.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esy.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/esz.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/eti.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/euq.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/far.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/fin.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/fos.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/fra.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/frb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/frc.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/frl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/frm.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/frs.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/glc.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/guj.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/heb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/hin.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/hrv.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/hun.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/hye.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ind.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/isl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ita.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/its.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/jpn.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/kan.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/kat.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/kkz.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/knk.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/kor.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/kyr.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/lth.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/lvi.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/mar.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/mki.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/mon.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/msb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/msl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/nlb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/nld.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/non.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/nor.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/pan.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/plk.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ptb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ptg.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/rom.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/rus.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/san.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/sky.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/slv.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/sqi.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/srb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/srl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/sve.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/svf.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/swk.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/syr.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/tam.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/tel.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/tha.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/trk.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ttt.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/ukr.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/urd.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/uzb.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/uzl.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/vit.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/zhh.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/zhi.nls (100%) rename {reactos/dll => dll}/win32/kernel32/nls/zhm.nls (100%) rename {reactos/dll => dll}/win32/kernel32/process/cmdline.c (100%) rename {reactos/dll => dll}/win32/kernel32/process/job.c (100%) rename {reactos/dll => dll}/win32/kernel32/process/proc.c (100%) rename {reactos/dll => dll}/win32/kernel32/process/procsup.c (100%) rename {reactos/dll => dll}/win32/kernel32/process/session.c (100%) rename {reactos/dll => dll}/win32/kernel32/string/lstring.c (100%) rename {reactos/dll => dll}/win32/kernel32/synch/condvar.c (100%) rename {reactos/dll => dll}/win32/kernel32/synch/critical.c (100%) rename {reactos/dll => dll}/win32/kernel32/synch/event.c (100%) rename {reactos/dll => dll}/win32/kernel32/synch/mutex.c (100%) rename {reactos/dll => dll}/win32/kernel32/synch/sem.c (100%) rename {reactos/dll => dll}/win32/kernel32/synch/timer.c (100%) rename {reactos/dll => dll}/win32/kernel32/synch/wait.c (100%) rename {reactos/dll => dll}/win32/kernel32/thread/fiber.c (100%) rename {reactos/dll => dll}/win32/kernel32/thread/fls.c (100%) rename {reactos/dll => dll}/win32/kernel32/thread/i386/fiber.S (100%) rename {reactos/dll => dll}/win32/kernel32/thread/i386/thread.S (100%) rename {reactos/dll => dll}/win32/kernel32/thread/thread.c (100%) rename {reactos/dll => dll}/win32/kernel32/thread/tls.c (100%) rename {reactos/dll => dll}/win32/lpk/dllmain.c (100%) rename {reactos/dll => dll}/win32/lpk/lpk.rbuild (100%) rename {reactos/dll => dll}/win32/lpk/lpk.rc (100%) rename {reactos/dll => dll}/win32/lpk/lpk.spec (100%) rename {reactos/dll => dll}/win32/lpk/ros_lpk.h (100%) rename {reactos/dll => dll}/win32/lpk/stub.c (100%) rename {reactos/dll => dll}/win32/lsasrv/lsarpc.c (100%) rename {reactos/dll => dll}/win32/lsasrv/lsasrv.c (100%) rename {reactos/dll => dll}/win32/lsasrv/lsasrv.def (100%) rename {reactos/dll => dll}/win32/lsasrv/lsasrv.rbuild (100%) rename {reactos/dll => dll}/win32/lsasrv/lsasrv.rc (100%) rename {reactos/dll => dll}/win32/lz32/lz32.rbuild (100%) rename {reactos/dll => dll}/win32/lz32/lz32.spec (100%) rename {reactos/dll => dll}/win32/lz32/lzexpand.spec (100%) rename {reactos/dll => dll}/win32/lz32/lzexpand16.c (100%) rename {reactos/dll => dll}/win32/lz32/version.rc (100%) rename {reactos/dll => dll}/win32/mapi32/imalloc.c (100%) rename {reactos/dll => dll}/win32/mapi32/mapi32.rbuild (100%) rename {reactos/dll => dll}/win32/mapi32/mapi32.spec (100%) rename {reactos/dll => dll}/win32/mapi32/mapi32_main.c (100%) rename {reactos/dll => dll}/win32/mapi32/prop.c (100%) rename {reactos/dll => dll}/win32/mapi32/sendmail.c (100%) rename {reactos/dll => dll}/win32/mapi32/util.c (100%) rename {reactos/dll => dll}/win32/mlang/mlang.c (100%) rename {reactos/dll => dll}/win32/mlang/mlang.rbuild (100%) rename {reactos/dll => dll}/win32/mlang/mlang.spec (100%) rename {reactos/dll => dll}/win32/mlang/regsvr.c (100%) rename {reactos/dll => dll}/win32/mmdrv/TODO (100%) rename {reactos/dll => dll}/win32/mmdrv/auxil.c (100%) rename {reactos/dll => dll}/win32/mmdrv/common.c (100%) rename {reactos/dll => dll}/win32/mmdrv/entry.c (100%) rename {reactos/dll => dll}/win32/mmdrv/kernel.c (100%) rename {reactos/dll => dll}/win32/mmdrv/midi.c (100%) rename {reactos/dll => dll}/win32/mmdrv/mmddk.h (100%) rename {reactos/dll => dll}/win32/mmdrv/mmdef.h (100%) rename {reactos/dll => dll}/win32/mmdrv/mmdrv.h (100%) rename {reactos/dll => dll}/win32/mmdrv/mmdrv.rbuild (100%) rename {reactos/dll => dll}/win32/mmdrv/mmdrv.spec (100%) rename {reactos/dll => dll}/win32/mmdrv/mme.c (100%) rename {reactos/dll => dll}/win32/mmdrv/mmioctl.h (100%) rename {reactos/dll => dll}/win32/mmdrv/session.c (100%) rename {reactos/dll => dll}/win32/mmdrv/utils.c (100%) rename {reactos/dll => dll}/win32/mmdrv/wave.c (100%) rename {reactos/dll => dll}/win32/mmdrv/wave.h (100%) rename {reactos/dll => dll}/win32/mmdrv/wave_io.c (100%) rename {reactos/dll => dll}/win32/modemui/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/modemui/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/modemui/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/modemui/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/modemui/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/modemui/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/modemui/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/modemui/modemui.c (100%) rename {reactos/dll => dll}/win32/modemui/modemui.rbuild (100%) rename {reactos/dll => dll}/win32/modemui/modemui.rc (100%) rename {reactos/dll => dll}/win32/modemui/modemui.spec (100%) rename {reactos/dll => dll}/win32/modemui/res/5100.ico (100%) rename {reactos/dll => dll}/win32/modemui/res/700.ico (100%) rename {reactos/dll => dll}/win32/modemui/res/701.ico (100%) rename {reactos/dll => dll}/win32/modemui/res/702.ico (100%) rename {reactos/dll => dll}/win32/modemui/res/703.ico (100%) rename {reactos/dll => dll}/win32/modemui/resource.h (100%) rename {reactos/dll => dll}/win32/mpr/auth.c (100%) rename {reactos/dll => dll}/win32/mpr/mpr.rbuild (100%) rename {reactos/dll => dll}/win32/mpr/mpr.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr.spec (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Bg.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Cs.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Da.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_De.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_En.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Eo.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Es.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Fr.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Hu.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_It.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Ja.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Ko.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Nl.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_No.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Pl.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Pt.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Ro.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Ru.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Si.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Sv.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Tr.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Uk.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_Zh.rc (100%) rename {reactos/dll => dll}/win32/mpr/mpr_main.c (100%) rename {reactos/dll => dll}/win32/mpr/mpr_ros.diff (100%) rename {reactos/dll => dll}/win32/mpr/mprres.h (100%) rename {reactos/dll => dll}/win32/mpr/multinet.c (100%) rename {reactos/dll => dll}/win32/mpr/netspi.h (100%) rename {reactos/dll => dll}/win32/mpr/nps.c (100%) rename {reactos/dll => dll}/win32/mpr/pwcache.c (100%) rename {reactos/dll => dll}/win32/mpr/version.rc (100%) rename {reactos/dll => dll}/win32/mpr/wnet.c (100%) rename {reactos/dll => dll}/win32/mpr/wnetpriv.h (100%) rename {reactos/dll => dll}/win32/mprapi/mprapi.c (100%) rename {reactos/dll => dll}/win32/mprapi/mprapi.rbuild (100%) rename {reactos/dll => dll}/win32/mprapi/mprapi.spec (100%) rename {reactos/dll => dll}/win32/msacm32/Makefile.in (100%) rename {reactos/dll => dll}/win32/msacm32/driver.c (100%) rename {reactos/dll => dll}/win32/msacm32/filter.c (100%) rename {reactos/dll => dll}/win32/msacm32/format.c (100%) rename {reactos/dll => dll}/win32/msacm32/imaadp32/Makefile.in (100%) rename {reactos/dll => dll}/win32/msacm32/imaadp32/imaadp32.acm.spec (100%) rename {reactos/dll => dll}/win32/msacm32/imaadp32/imaadp32.c (100%) rename {reactos/dll => dll}/win32/msacm32/internal.c (100%) rename {reactos/dll => dll}/win32/msacm32/msacm.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm.spec (100%) rename {reactos/dll => dll}/win32/msacm32/msacm.spec.def (100%) rename {reactos/dll => dll}/win32/msacm32/msacm32.rbuild (100%) rename {reactos/dll => dll}/win32/msacm32/msacm32.spec (100%) rename {reactos/dll => dll}/win32/msacm32/msacm32_main.c (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_De.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_El.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_En.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Es.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Fr.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Hu.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_It.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Ja.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Nl.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_No.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Pl.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Pt.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Ru.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Sv.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_Uk.rc (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_main.c (100%) rename {reactos/dll => dll}/win32/msacm32/msacm_ros.diff (100%) rename {reactos/dll => dll}/win32/msacm32/msadp32/Makefile.in (100%) rename {reactos/dll => dll}/win32/msacm32/msadp32/msadp32.acm.spec (100%) rename {reactos/dll => dll}/win32/msacm32/msadp32/msadp32.c (100%) rename {reactos/dll => dll}/win32/msacm32/pcmconverter.c (100%) rename {reactos/dll => dll}/win32/msacm32/stream.c (100%) rename {reactos/dll => dll}/win32/msacm32/wineacm.h (100%) rename {reactos/dll => dll}/win32/msafd/include/debug.h (100%) rename {reactos/dll => dll}/win32/msafd/include/helpers.h (100%) rename {reactos/dll => dll}/win32/msafd/misc/dllmain.c (100%) rename {reactos/dll => dll}/win32/msafd/misc/event.c (100%) rename {reactos/dll => dll}/win32/msafd/misc/helpers.c (100%) rename {reactos/dll => dll}/win32/msafd/misc/sndrcv.c (100%) rename {reactos/dll => dll}/win32/msafd/misc/stubs.c (100%) rename {reactos/dll => dll}/win32/msafd/msafd.def (100%) rename {reactos/dll => dll}/win32/msafd/msafd.h (100%) rename {reactos/dll => dll}/win32/msafd/msafd.rbuild (100%) rename {reactos/dll => dll}/win32/msafd/msafd.rc (100%) rename {reactos/dll => dll}/win32/mscoree/corruntimehost.c (100%) rename {reactos/dll => dll}/win32/mscoree/mscoree.rbuild (100%) rename {reactos/dll => dll}/win32/mscoree/mscoree.spec (100%) rename {reactos/dll => dll}/win32/mscoree/mscoree_main.c (100%) rename {reactos/dll => dll}/win32/mscoree/mscoree_private.h (100%) rename {reactos/dll => dll}/win32/mscoree/mscoree_ros.diff (100%) rename {reactos/dll => dll}/win32/msgina/gui.c (100%) rename {reactos/dll => dll}/win32/msgina/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/msgina/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/msgina/msgina.c (100%) rename {reactos/dll => dll}/win32/msgina/msgina.h (100%) rename {reactos/dll => dll}/win32/msgina/msgina.rbuild (100%) rename {reactos/dll => dll}/win32/msgina/msgina.rc (100%) rename {reactos/dll => dll}/win32/msgina/msgina.spec (100%) rename {reactos/dll => dll}/win32/msgina/resource.h (100%) rename {reactos/dll => dll}/win32/msgina/resources/ico_logoff.ico (100%) rename {reactos/dll => dll}/win32/msgina/resources/reactos.bmp (100%) rename {reactos/dll => dll}/win32/msgina/stubs.c (100%) rename {reactos/dll => dll}/win32/msgina/tui.c (100%) rename {reactos/dll => dll}/win32/mshtml.tlb/mshtml.tlb.rbuild (100%) rename {reactos/dll => dll}/win32/mshtml.tlb/mshtml.tlb.spec (100%) rename {reactos/dll => dll}/win32/mshtml.tlb/mshtml_tlb.idl (100%) rename {reactos/dll => dll}/win32/mshtml.tlb/rsrc.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Bg.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Da.rc (100%) rename {reactos/dll => dll}/win32/mshtml/De.rc (100%) rename {reactos/dll => dll}/win32/mshtml/En.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Es.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Fi.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Fr.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Hu.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Ko.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Nl.rc (100%) rename {reactos/dll => dll}/win32/mshtml/No.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Pl.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Ru.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Si.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Sv.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Tr.rc (100%) rename {reactos/dll => dll}/win32/mshtml/Zh.rc (100%) rename {reactos/dll => dll}/win32/mshtml/blank.htm (100%) rename {reactos/dll => dll}/win32/mshtml/conpoint.c (100%) rename {reactos/dll => dll}/win32/mshtml/dispex.c (100%) rename {reactos/dll => dll}/win32/mshtml/editor.c (100%) rename {reactos/dll => dll}/win32/mshtml/hlink.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlanchor.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlbody.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlcomment.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmldoc.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmldoc3.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmldoc5.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlelem.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlelem2.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlevent.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlgeneric.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlimg.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlinput.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmllocation.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlnode.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmloption.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlscript.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlselect.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlstyle.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlstylesheet.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmltable.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmltextarea.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmltextcont.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmltextnode.c (100%) rename {reactos/dll => dll}/win32/mshtml/htmlwindow.c (100%) rename {reactos/dll => dll}/win32/mshtml/install.c (100%) rename {reactos/dll => dll}/win32/mshtml/loadopts.c (100%) rename {reactos/dll => dll}/win32/mshtml/main.c (100%) rename {reactos/dll => dll}/win32/mshtml/mshtml.inf (100%) rename {reactos/dll => dll}/win32/mshtml/mshtml.rbuild (100%) rename {reactos/dll => dll}/win32/mshtml/mshtml.spec (100%) rename {reactos/dll => dll}/win32/mshtml/mshtml_private.h (100%) rename {reactos/dll => dll}/win32/mshtml/navigate.c (100%) rename {reactos/dll => dll}/win32/mshtml/nsembed.c (100%) rename {reactos/dll => dll}/win32/mshtml/nsevents.c (100%) rename {reactos/dll => dll}/win32/mshtml/nsiface.idl (100%) rename {reactos/dll => dll}/win32/mshtml/nsio.c (100%) rename {reactos/dll => dll}/win32/mshtml/nsservice.c (100%) rename {reactos/dll => dll}/win32/mshtml/olecmd.c (100%) rename {reactos/dll => dll}/win32/mshtml/oleobj.c (100%) rename {reactos/dll => dll}/win32/mshtml/olewnd.c (100%) rename {reactos/dll => dll}/win32/mshtml/omnavigator.c (100%) rename {reactos/dll => dll}/win32/mshtml/persist.c (100%) rename {reactos/dll => dll}/win32/mshtml/protocol.c (100%) rename {reactos/dll => dll}/win32/mshtml/resource.h (100%) rename {reactos/dll => dll}/win32/mshtml/rsrc.rc (100%) rename {reactos/dll => dll}/win32/mshtml/script.c (100%) rename {reactos/dll => dll}/win32/mshtml/selection.c (100%) rename {reactos/dll => dll}/win32/mshtml/service.c (100%) rename {reactos/dll => dll}/win32/mshtml/task.c (100%) rename {reactos/dll => dll}/win32/mshtml/txtrange.c (100%) rename {reactos/dll => dll}/win32/mshtml/view.c (100%) rename {reactos/dll => dll}/win32/msi/action.c (100%) rename {reactos/dll => dll}/win32/msi/alter.c (100%) rename {reactos/dll => dll}/win32/msi/appsearch.c (100%) rename {reactos/dll => dll}/win32/msi/automation.c (100%) rename {reactos/dll => dll}/win32/msi/classes.c (100%) rename {reactos/dll => dll}/win32/msi/cond.tab.c (100%) rename {reactos/dll => dll}/win32/msi/cond.tab.h (100%) rename {reactos/dll => dll}/win32/msi/cond.y (100%) rename {reactos/dll => dll}/win32/msi/create.c (100%) rename {reactos/dll => dll}/win32/msi/custom.c (100%) rename {reactos/dll => dll}/win32/msi/database.c (100%) rename {reactos/dll => dll}/win32/msi/delete.c (100%) rename {reactos/dll => dll}/win32/msi/dialog.c (100%) rename {reactos/dll => dll}/win32/msi/distinct.c (100%) rename {reactos/dll => dll}/win32/msi/events.c (100%) rename {reactos/dll => dll}/win32/msi/files.c (100%) rename {reactos/dll => dll}/win32/msi/font.c (100%) rename {reactos/dll => dll}/win32/msi/format.c (100%) rename {reactos/dll => dll}/win32/msi/handle.c (100%) rename {reactos/dll => dll}/win32/msi/helpers.c (100%) rename {reactos/dll => dll}/win32/msi/insert.c (100%) rename {reactos/dll => dll}/win32/msi/instabsent.bmp (100%) rename {reactos/dll => dll}/win32/msi/instadvert.bmp (100%) rename {reactos/dll => dll}/win32/msi/install.c (100%) rename {reactos/dll => dll}/win32/msi/instlocal.bmp (100%) rename {reactos/dll => dll}/win32/msi/join.c (100%) rename {reactos/dll => dll}/win32/msi/msi.c (100%) rename {reactos/dll => dll}/win32/msi/msi.rbuild (100%) rename {reactos/dll => dll}/win32/msi/msi.rc (100%) rename {reactos/dll => dll}/win32/msi/msi.spec (100%) rename {reactos/dll => dll}/win32/msi/msi_Bg.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Da.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_De.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_En.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Eo.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Es.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Fi.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Fr.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Hu.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_It.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Ja.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Ko.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Nl.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_No.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Pl.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Pt.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Ru.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Si.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Sv.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_Tr.rc (100%) rename {reactos/dll => dll}/win32/msi/msi_main.c (100%) rename {reactos/dll => dll}/win32/msi/msi_ros.diff (100%) rename {reactos/dll => dll}/win32/msi/msipriv.h (100%) rename {reactos/dll => dll}/win32/msi/msiquery.c (100%) rename {reactos/dll => dll}/win32/msi/msiserver.idl (100%) rename {reactos/dll => dll}/win32/msi/msiserver_dispids.h (100%) rename {reactos/dll => dll}/win32/msi/package.c (100%) rename {reactos/dll => dll}/win32/msi/preview.c (100%) rename {reactos/dll => dll}/win32/msi/query.h (100%) rename {reactos/dll => dll}/win32/msi/record.c (100%) rename {reactos/dll => dll}/win32/msi/registry.c (100%) rename {reactos/dll => dll}/win32/msi/regsvr.c (100%) rename {reactos/dll => dll}/win32/msi/script.c (100%) rename {reactos/dll => dll}/win32/msi/select.c (100%) rename {reactos/dll => dll}/win32/msi/source.c (100%) rename {reactos/dll => dll}/win32/msi/sql.tab.c (100%) rename {reactos/dll => dll}/win32/msi/sql.tab.h (100%) rename {reactos/dll => dll}/win32/msi/sql.y (100%) rename {reactos/dll => dll}/win32/msi/storages.c (100%) rename {reactos/dll => dll}/win32/msi/streams.c (100%) rename {reactos/dll => dll}/win32/msi/string.c (100%) rename {reactos/dll => dll}/win32/msi/suminfo.c (100%) rename {reactos/dll => dll}/win32/msi/table.c (100%) rename {reactos/dll => dll}/win32/msi/tokenize.c (100%) rename {reactos/dll => dll}/win32/msi/update.c (100%) rename {reactos/dll => dll}/win32/msi/upgrade.c (100%) rename {reactos/dll => dll}/win32/msi/version.rc (100%) rename {reactos/dll => dll}/win32/msi/where.c (100%) rename {reactos/dll => dll}/win32/msimg32/msimg32.rbuild (100%) rename {reactos/dll => dll}/win32/msimg32/msimg32.spec (100%) rename {reactos/dll => dll}/win32/msimg32/msimg32_main.c (100%) rename {reactos/dll => dll}/win32/mstask/factory.c (100%) rename {reactos/dll => dll}/win32/mstask/mstask.inf (100%) rename {reactos/dll => dll}/win32/mstask/mstask.rbuild (100%) rename {reactos/dll => dll}/win32/mstask/mstask.spec (100%) rename {reactos/dll => dll}/win32/mstask/mstask_local.idl (100%) rename {reactos/dll => dll}/win32/mstask/mstask_main.c (100%) rename {reactos/dll => dll}/win32/mstask/mstask_private.h (100%) rename {reactos/dll => dll}/win32/mstask/rsrc.rc (100%) rename {reactos/dll => dll}/win32/mstask/task.c (100%) rename {reactos/dll => dll}/win32/mstask/task_scheduler.c (100%) rename {reactos/dll => dll}/win32/mstask/task_trigger.c (100%) rename {reactos/dll => dll}/win32/msvcrt/dllmain.c (100%) rename {reactos/dll => dll}/win32/msvcrt/msvcrt.def (100%) rename {reactos/dll => dll}/win32/msvcrt/msvcrt.rbuild (100%) rename {reactos/dll => dll}/win32/msvcrt/msvcrt.rc (100%) rename {reactos/dll => dll}/win32/msvcrt/precomp.h (100%) rename {reactos/dll => dll}/win32/msvcrt20/msvcrt20.c (100%) rename {reactos/dll => dll}/win32/msvcrt20/msvcrt20.rbuild (100%) rename {reactos/dll => dll}/win32/msvcrt20/msvcrt20.spec (100%) rename {reactos/dll => dll}/win32/msvcrt40/msvcrt40.c (100%) rename {reactos/dll => dll}/win32/msvcrt40/msvcrt40.rbuild (100%) rename {reactos/dll => dll}/win32/msvcrt40/msvcrt40.spec (100%) rename {reactos/dll => dll}/win32/msvfw32/drawdib.c (100%) rename {reactos/dll => dll}/win32/msvfw32/mciwnd.c (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32.rbuild (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32.spec (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Da.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_De.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_En.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Es.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Fr.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Hu.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Ko.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Nl.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_No.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Pl.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Ru.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Si.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Sv.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_Tr.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/msvfw32_ros.diff (100%) rename {reactos/dll => dll}/win32/msvfw32/msvideo.spec (100%) rename {reactos/dll => dll}/win32/msvfw32/msvideo16.c (100%) rename {reactos/dll => dll}/win32/msvfw32/msvideo_main.c (100%) rename {reactos/dll => dll}/win32/msvfw32/msvideo_private.h (100%) rename {reactos/dll => dll}/win32/msvfw32/rsrc.rc (100%) rename {reactos/dll => dll}/win32/msvfw32/vfw16.h (100%) rename {reactos/dll => dll}/win32/mswsock/extensions.c (100%) rename {reactos/dll => dll}/win32/mswsock/mswsock.def (100%) rename {reactos/dll => dll}/win32/mswsock/mswsock.rbuild (100%) rename {reactos/dll => dll}/win32/mswsock/mswsock.rc (100%) rename {reactos/dll => dll}/win32/mswsock/stubs.c (100%) rename {reactos/dll => dll}/win32/msxml3/attribute.c (100%) rename {reactos/dll => dll}/win32/msxml3/bsc.c (100%) rename {reactos/dll => dll}/win32/msxml3/cdata.c (100%) rename {reactos/dll => dll}/win32/msxml3/comment.c (100%) rename {reactos/dll => dll}/win32/msxml3/dispex.c (100%) rename {reactos/dll => dll}/win32/msxml3/docfrag.c (100%) rename {reactos/dll => dll}/win32/msxml3/domdoc.c (100%) rename {reactos/dll => dll}/win32/msxml3/domimpl.c (100%) rename {reactos/dll => dll}/win32/msxml3/element.c (100%) rename {reactos/dll => dll}/win32/msxml3/entityref.c (100%) rename {reactos/dll => dll}/win32/msxml3/factory.c (100%) rename {reactos/dll => dll}/win32/msxml3/main.c (100%) rename {reactos/dll => dll}/win32/msxml3/msxml3.rbuild (100%) rename {reactos/dll => dll}/win32/msxml3/msxml3.spec (100%) rename {reactos/dll => dll}/win32/msxml3/msxml3_v1.idl (100%) rename {reactos/dll => dll}/win32/msxml3/msxml_private.h (100%) rename {reactos/dll => dll}/win32/msxml3/node.c (100%) rename {reactos/dll => dll}/win32/msxml3/nodelist.c (100%) rename {reactos/dll => dll}/win32/msxml3/nodemap.c (100%) rename {reactos/dll => dll}/win32/msxml3/parseerror.c (100%) rename {reactos/dll => dll}/win32/msxml3/pi.c (100%) rename {reactos/dll => dll}/win32/msxml3/queryresult.c (100%) rename {reactos/dll => dll}/win32/msxml3/regsvr.c (100%) rename {reactos/dll => dll}/win32/msxml3/saxreader.c (100%) rename {reactos/dll => dll}/win32/msxml3/schema.c (100%) rename {reactos/dll => dll}/win32/msxml3/text.c (100%) rename {reactos/dll => dll}/win32/msxml3/uuid.c (100%) rename {reactos/dll => dll}/win32/msxml3/version.rc (100%) rename {reactos/dll => dll}/win32/msxml3/xmldoc.c (100%) rename {reactos/dll => dll}/win32/msxml3/xmlelem.c (100%) rename {reactos/dll => dll}/win32/nddeapi/nddeapi.c (100%) rename {reactos/dll => dll}/win32/nddeapi/nddeapi.rbuild (100%) rename {reactos/dll => dll}/win32/nddeapi/nddeapi.spec (100%) rename {reactos/dll => dll}/win32/netapi32/access.c (100%) rename {reactos/dll => dll}/win32/netapi32/apibuf.c (100%) rename {reactos/dll => dll}/win32/netapi32/browsr.c (100%) rename {reactos/dll => dll}/win32/netapi32/ds.c (100%) rename {reactos/dll => dll}/win32/netapi32/local_group.c (100%) rename {reactos/dll => dll}/win32/netapi32/nbcmdqueue.c (100%) rename {reactos/dll => dll}/win32/netapi32/nbcmdqueue.h (100%) rename {reactos/dll => dll}/win32/netapi32/nbnamecache.c (100%) rename {reactos/dll => dll}/win32/netapi32/nbnamecache.h (100%) rename {reactos/dll => dll}/win32/netapi32/nbt.c (100%) rename {reactos/dll => dll}/win32/netapi32/netapi32.c (100%) rename {reactos/dll => dll}/win32/netapi32/netapi32.rbuild (100%) rename {reactos/dll => dll}/win32/netapi32/netapi32.spec (100%) rename {reactos/dll => dll}/win32/netapi32/netbios.c (100%) rename {reactos/dll => dll}/win32/netapi32/netbios.h (100%) rename {reactos/dll => dll}/win32/netapi32/share.c (100%) rename {reactos/dll => dll}/win32/netapi32/wksta.c (100%) rename {reactos/dll => dll}/win32/netcfgx/classfactory.c (100%) rename {reactos/dll => dll}/win32/netcfgx/inetcfgcomp_iface.c (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/da-DK.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/el-GR.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/netcfg_iface.c (100%) rename {reactos/dll => dll}/win32/netcfgx/netcfgx.c (100%) rename {reactos/dll => dll}/win32/netcfgx/netcfgx.rbuild (100%) rename {reactos/dll => dll}/win32/netcfgx/netcfgx.rc (100%) rename {reactos/dll => dll}/win32/netcfgx/netcfgx.spec (100%) rename {reactos/dll => dll}/win32/netcfgx/precomp.h (100%) rename {reactos/dll => dll}/win32/netcfgx/resource.h (100%) rename {reactos/dll => dll}/win32/netcfgx/tcpipconf_notify.c (100%) rename {reactos/dll => dll}/win32/netid/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/el-GR.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/netid/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/netid/netid.c (100%) rename {reactos/dll => dll}/win32/netid/netid.rbuild (100%) rename {reactos/dll => dll}/win32/netid/netid.rc (100%) rename {reactos/dll => dll}/win32/netid/netid.spec (100%) rename {reactos/dll => dll}/win32/netid/res/101.ico (100%) rename {reactos/dll => dll}/win32/netid/res/102.ico (100%) rename {reactos/dll => dll}/win32/netid/resource.h (100%) rename {reactos/dll => dll}/win32/netid/rsrc.rc (100%) rename {reactos/dll => dll}/win32/netshell/classfactory.c (100%) rename {reactos/dll => dll}/win32/netshell/connectmanager.c (100%) rename {reactos/dll => dll}/win32/netshell/enumlist.c (100%) rename {reactos/dll => dll}/win32/netshell/lanconnectui.c (100%) rename {reactos/dll => dll}/win32/netshell/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/da-DK.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/el-GR.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/netshell/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/win32/netshell/lanstatusui.c (100%) rename {reactos/dll => dll}/win32/netshell/netshell.c (100%) rename {reactos/dll => dll}/win32/netshell/netshell.rbuild (100%) rename {reactos/dll => dll}/win32/netshell/netshell.rc (100%) rename {reactos/dll => dll}/win32/netshell/netshell.spec (100%) rename {reactos/dll => dll}/win32/netshell/precomp.h (100%) rename {reactos/dll => dll}/win32/netshell/res/neterror.ico (100%) rename {reactos/dll => dll}/win32/netshell/res/netidle.ico (100%) rename {reactos/dll => dll}/win32/netshell/res/netoff.ico (100%) rename {reactos/dll => dll}/win32/netshell/res/netrec.ico (100%) rename {reactos/dll => dll}/win32/netshell/res/netshell.ico (100%) rename {reactos/dll => dll}/win32/netshell/res/nettrans.ico (100%) rename {reactos/dll => dll}/win32/netshell/res/nettrrec.ico (100%) rename {reactos/dll => dll}/win32/netshell/resource.h (100%) rename {reactos/dll => dll}/win32/netshell/shfldr_netconnect.c (100%) rename {reactos/dll => dll}/win32/newdev/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/el-GR.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/th-TH.rc (100%) rename {reactos/dll => dll}/win32/newdev/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/newdev/newdev.c (100%) rename {reactos/dll => dll}/win32/newdev/newdev.rbuild (100%) rename {reactos/dll => dll}/win32/newdev/newdev.rc (100%) rename {reactos/dll => dll}/win32/newdev/newdev.spec (100%) rename {reactos/dll => dll}/win32/newdev/newdev_private.h (100%) rename {reactos/dll => dll}/win32/newdev/resource.h (100%) rename {reactos/dll => dll}/win32/newdev/resources/header.bmp (100%) rename {reactos/dll => dll}/win32/newdev/resources/watermark.bmp (100%) rename {reactos/dll => dll}/win32/newdev/rsrc.rc (100%) rename {reactos/dll => dll}/win32/newdev/stubs.c (100%) rename {reactos/dll => dll}/win32/newdev/wizard.c (100%) rename {reactos/dll => dll}/win32/ntdsapi/ntdsapi.c (100%) rename {reactos/dll => dll}/win32/ntdsapi/ntdsapi.rbuild (100%) rename {reactos/dll => dll}/win32/ntdsapi/ntdsapi.spec (100%) rename {reactos/dll => dll}/win32/ntmarta/ntmarta.c (100%) rename {reactos/dll => dll}/win32/ntmarta/ntmarta.h (100%) rename {reactos/dll => dll}/win32/ntmarta/ntmarta.rbuild (100%) rename {reactos/dll => dll}/win32/ntmarta/ntmarta.rc (100%) rename {reactos/dll => dll}/win32/ntmarta/ntmarta.spec (100%) rename {reactos/dll => dll}/win32/objsel/factory.c (100%) rename {reactos/dll => dll}/win32/objsel/objsel.c (100%) rename {reactos/dll => dll}/win32/objsel/objsel.rbuild (100%) rename {reactos/dll => dll}/win32/objsel/objsel.rc (100%) rename {reactos/dll => dll}/win32/objsel/objsel.spec (100%) rename {reactos/dll => dll}/win32/objsel/objsel_private.h (100%) rename {reactos/dll => dll}/win32/objsel/regsvr.c (100%) rename {reactos/dll => dll}/win32/odbc32/Makefile.in (100%) rename {reactos/dll => dll}/win32/odbc32/README.txt (100%) rename {reactos/dll => dll}/win32/odbc32/odbc32.rbuild (100%) rename {reactos/dll => dll}/win32/odbc32/odbc32.rc (100%) rename {reactos/dll => dll}/win32/odbc32/odbc32.spec (100%) rename {reactos/dll => dll}/win32/odbc32/proxyodbc.c (100%) rename {reactos/dll => dll}/win32/odbc32/proxyodbc.h (100%) rename {reactos/dll => dll}/win32/odbccp32/odbccp32.c (100%) rename {reactos/dll => dll}/win32/odbccp32/odbccp32.rbuild (100%) rename {reactos/dll => dll}/win32/odbccp32/odbccp32.spec (100%) rename {reactos/dll => dll}/win32/ole32/antimoniker.c (100%) rename {reactos/dll => dll}/win32/ole32/bindctx.c (100%) rename {reactos/dll => dll}/win32/ole32/classmoniker.c (100%) rename {reactos/dll => dll}/win32/ole32/clipboard.c (100%) rename {reactos/dll => dll}/win32/ole32/compobj.c (100%) rename {reactos/dll => dll}/win32/ole32/compobj.spec (100%) rename {reactos/dll => dll}/win32/ole32/compobj_private.h (100%) rename {reactos/dll => dll}/win32/ole32/compositemoniker.c (100%) rename {reactos/dll => dll}/win32/ole32/datacache.c (100%) rename {reactos/dll => dll}/win32/ole32/dcom.idl (100%) rename {reactos/dll => dll}/win32/ole32/defaulthandler.c (100%) rename {reactos/dll => dll}/win32/ole32/dictionary.c (100%) rename {reactos/dll => dll}/win32/ole32/dictionary.h (100%) rename {reactos/dll => dll}/win32/ole32/drag_copy.cur (100%) rename {reactos/dll => dll}/win32/ole32/drag_link.cur (100%) rename {reactos/dll => dll}/win32/ole32/drag_move.cur (100%) rename {reactos/dll => dll}/win32/ole32/enumx.c (100%) rename {reactos/dll => dll}/win32/ole32/enumx.h (100%) rename {reactos/dll => dll}/win32/ole32/errorinfo.c (100%) rename {reactos/dll => dll}/win32/ole32/filemoniker.c (100%) rename {reactos/dll => dll}/win32/ole32/ftmarshal.c (100%) rename {reactos/dll => dll}/win32/ole32/git.c (100%) rename {reactos/dll => dll}/win32/ole32/hglobalstream.c (100%) rename {reactos/dll => dll}/win32/ole32/ifs.c (100%) rename {reactos/dll => dll}/win32/ole32/ifs.h (100%) rename {reactos/dll => dll}/win32/ole32/irot.idl (100%) rename {reactos/dll => dll}/win32/ole32/itemmoniker.c (100%) rename {reactos/dll => dll}/win32/ole32/marshal.c (100%) rename {reactos/dll => dll}/win32/ole32/memlockbytes.c (100%) rename {reactos/dll => dll}/win32/ole32/memlockbytes16.c (100%) rename {reactos/dll => dll}/win32/ole32/moniker.c (100%) rename {reactos/dll => dll}/win32/ole32/moniker.h (100%) rename {reactos/dll => dll}/win32/ole32/nodrop.cur (100%) rename {reactos/dll => dll}/win32/ole32/ole16.c (100%) rename {reactos/dll => dll}/win32/ole32/ole2.c (100%) rename {reactos/dll => dll}/win32/ole32/ole2.spec (100%) rename {reactos/dll => dll}/win32/ole32/ole2_16.c (100%) rename {reactos/dll => dll}/win32/ole32/ole2conv.spec (100%) rename {reactos/dll => dll}/win32/ole32/ole2impl.c (100%) rename {reactos/dll => dll}/win32/ole32/ole2nls.c (100%) rename {reactos/dll => dll}/win32/ole32/ole2nls.spec (100%) rename {reactos/dll => dll}/win32/ole32/ole2prox.spec (100%) rename {reactos/dll => dll}/win32/ole32/ole2stubs.c (100%) rename {reactos/dll => dll}/win32/ole32/ole2thk.spec (100%) rename {reactos/dll => dll}/win32/ole32/ole32.rbuild (100%) rename {reactos/dll => dll}/win32/ole32/ole32.spec (100%) rename {reactos/dll => dll}/win32/ole32/ole32_main.c (100%) rename {reactos/dll => dll}/win32/ole32/ole32_objidl.idl (100%) rename {reactos/dll => dll}/win32/ole32/ole32_oleidl.idl (100%) rename {reactos/dll => dll}/win32/ole32/ole32_ros.diff (100%) rename {reactos/dll => dll}/win32/ole32/ole32_unknwn.idl (100%) rename {reactos/dll => dll}/win32/ole32/ole32res.rc (100%) rename {reactos/dll => dll}/win32/ole32/oleobj.c (100%) rename {reactos/dll => dll}/win32/ole32/oleproxy.c (100%) rename {reactos/dll => dll}/win32/ole32/olestd.h (100%) rename {reactos/dll => dll}/win32/ole32/pointermoniker.c (100%) rename {reactos/dll => dll}/win32/ole32/regsvr.c (100%) rename {reactos/dll => dll}/win32/ole32/rpc.c (100%) rename {reactos/dll => dll}/win32/ole32/stg_bigblockfile.c (100%) rename {reactos/dll => dll}/win32/ole32/stg_prop.c (100%) rename {reactos/dll => dll}/win32/ole32/stg_stream.c (100%) rename {reactos/dll => dll}/win32/ole32/storage.c (100%) rename {reactos/dll => dll}/win32/ole32/storage.spec (100%) rename {reactos/dll => dll}/win32/ole32/storage32.c (100%) rename {reactos/dll => dll}/win32/ole32/storage32.h (100%) rename {reactos/dll => dll}/win32/ole32/stubmanager.c (100%) rename {reactos/dll => dll}/win32/ole32/usrmarshal.c (100%) rename {reactos/dll => dll}/win32/ole32/version.rc (100%) rename {reactos/dll => dll}/win32/ole32/version16.rc (100%) rename {reactos/dll => dll}/win32/oleacc/main.c (100%) rename {reactos/dll => dll}/win32/oleacc/oleacc.rbuild (100%) rename {reactos/dll => dll}/win32/oleacc/oleacc.spec (100%) rename {reactos/dll => dll}/win32/oleaut32/connpt.c (100%) rename {reactos/dll => dll}/win32/oleaut32/connpt.h (100%) rename {reactos/dll => dll}/win32/oleaut32/dispatch.c (100%) rename {reactos/dll => dll}/win32/oleaut32/hash.c (100%) rename {reactos/dll => dll}/win32/oleaut32/ole2disp.c (100%) rename {reactos/dll => dll}/win32/oleaut32/ole2disp.h (100%) rename {reactos/dll => dll}/win32/oleaut32/ole2disp.spec (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut.c (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32.rbuild (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32.spec (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Bg.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Cz.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Da.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_De.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_El.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_En.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Eo.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Es.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Fr.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Hu.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_It.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Ja.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Ko.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Nl.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_No.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Pl.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Pt.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Ro.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Ru.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Si.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Sv.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Th.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Tr.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Uk.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_Zh.rc (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_oaidl.idl (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_ocidl.idl (100%) rename {reactos/dll => dll}/win32/oleaut32/oleaut32_ros.diff (100%) rename {reactos/dll => dll}/win32/oleaut32/olefont.c (100%) rename {reactos/dll => dll}/win32/oleaut32/olepicture.c (100%) rename {reactos/dll => dll}/win32/oleaut32/recinfo.c (100%) rename {reactos/dll => dll}/win32/oleaut32/regsvr.c (100%) rename {reactos/dll => dll}/win32/oleaut32/resource.h (100%) rename {reactos/dll => dll}/win32/oleaut32/safearray.c (100%) rename {reactos/dll => dll}/win32/oleaut32/stubs.c (100%) rename {reactos/dll => dll}/win32/oleaut32/tmarshal.c (100%) rename {reactos/dll => dll}/win32/oleaut32/typelib.c (100%) rename {reactos/dll => dll}/win32/oleaut32/typelib.h (100%) rename {reactos/dll => dll}/win32/oleaut32/typelib.spec (100%) rename {reactos/dll => dll}/win32/oleaut32/typelib16.c (100%) rename {reactos/dll => dll}/win32/oleaut32/typelib2.c (100%) rename {reactos/dll => dll}/win32/oleaut32/ungif.c (100%) rename {reactos/dll => dll}/win32/oleaut32/ungif.h (100%) rename {reactos/dll => dll}/win32/oleaut32/usrmarshal.c (100%) rename {reactos/dll => dll}/win32/oleaut32/varformat.c (100%) rename {reactos/dll => dll}/win32/oleaut32/variant.c (100%) rename {reactos/dll => dll}/win32/oleaut32/variant.h (100%) rename {reactos/dll => dll}/win32/oleaut32/vartype.c (100%) rename {reactos/dll => dll}/win32/oleaut32/version.rc (100%) rename {reactos/dll => dll}/win32/oledlg/insobjdlg.c (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg.rbuild (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg.spec (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Cs.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Da.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_De.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_En.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Es.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Fr.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Hu.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_It.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Ja.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Ko.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Nl.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_No.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Pl.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Pt.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Ru.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Si.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Sv.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Tr.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_Uk.rc (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_main.c (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_private.h (100%) rename {reactos/dll => dll}/win32/oledlg/oledlg_ros.diff (100%) rename {reactos/dll => dll}/win32/oledlg/pastespl.c (100%) rename {reactos/dll => dll}/win32/oledlg/resource.h (100%) rename {reactos/dll => dll}/win32/oledlg/rsrc.rc (100%) rename {reactos/dll => dll}/win32/olepro32/README (100%) rename {reactos/dll => dll}/win32/olepro32/olepro32.rbuild (100%) rename {reactos/dll => dll}/win32/olepro32/olepro32.spec (100%) rename {reactos/dll => dll}/win32/olepro32/olepro32stubs.c (100%) rename {reactos/dll => dll}/win32/olepro32/version.rc (100%) rename {reactos/dll => dll}/win32/opengl32/gl.c (100%) rename {reactos/dll => dll}/win32/opengl32/glfuncs.h (100%) rename {reactos/dll => dll}/win32/opengl32/icdlist.h (100%) rename {reactos/dll => dll}/win32/opengl32/icdtable.h (100%) rename {reactos/dll => dll}/win32/opengl32/opengl32.c (100%) rename {reactos/dll => dll}/win32/opengl32/opengl32.def (100%) rename {reactos/dll => dll}/win32/opengl32/opengl32.dsp (100%) rename {reactos/dll => dll}/win32/opengl32/opengl32.dsw (100%) rename {reactos/dll => dll}/win32/opengl32/opengl32.h (100%) rename {reactos/dll => dll}/win32/opengl32/opengl32.rbuild (100%) rename {reactos/dll => dll}/win32/opengl32/wgl.c (100%) rename {reactos/dll => dll}/win32/packet/Packet32.c (100%) rename {reactos/dll => dll}/win32/packet/include/packet32.h (100%) rename {reactos/dll => dll}/win32/packet/packet.def (100%) rename {reactos/dll => dll}/win32/packet/packet.rc (100%) rename {reactos/dll => dll}/win32/packet/resource.h (100%) rename {reactos/dll => dll}/win32/packet/trace.c (100%) rename {reactos/dll => dll}/win32/packet/trace.h (100%) rename {reactos/dll => dll}/win32/pdh/pdh.rbuild (100%) rename {reactos/dll => dll}/win32/pdh/pdh.spec (100%) rename {reactos/dll => dll}/win32/pdh/pdh_main.c (100%) rename {reactos/dll => dll}/win32/powrprof/powrprof.c (100%) rename {reactos/dll => dll}/win32/powrprof/powrprof.rbuild (100%) rename {reactos/dll => dll}/win32/powrprof/powrprof.rc (100%) rename {reactos/dll => dll}/win32/powrprof/powrprof.spec (100%) rename {reactos/dll => dll}/win32/printui/printui.c (100%) rename {reactos/dll => dll}/win32/printui/printui.rbuild (100%) rename {reactos/dll => dll}/win32/printui/printui.rc (100%) rename {reactos/dll => dll}/win32/printui/printui.spec (100%) rename {reactos/dll => dll}/win32/printui/printui_private.h (100%) rename {reactos/dll => dll}/win32/psapi/internal.h (100%) rename {reactos/dll => dll}/win32/psapi/malloc.c (100%) rename {reactos/dll => dll}/win32/psapi/precomp.h (100%) rename {reactos/dll => dll}/win32/psapi/psapi.c (100%) rename {reactos/dll => dll}/win32/psapi/psapi.def (100%) rename {reactos/dll => dll}/win32/psapi/psapi.rbuild (100%) rename {reactos/dll => dll}/win32/psapi/psapi.rc (100%) rename {reactos/dll => dll}/win32/pstorec/pstorec.c (100%) rename {reactos/dll => dll}/win32/pstorec/pstorec.rbuild (100%) rename {reactos/dll => dll}/win32/pstorec/pstorec.spec (100%) rename {reactos/dll => dll}/win32/pstorec/pstorec_ros.diff (100%) rename {reactos/dll => dll}/win32/rasapi32/rasapi.c (100%) rename {reactos/dll => dll}/win32/rasapi32/rasapi16.spec (100%) rename {reactos/dll => dll}/win32/rasapi32/rasapi32.rbuild (100%) rename {reactos/dll => dll}/win32/rasapi32/rasapi32.spec (100%) rename {reactos/dll => dll}/win32/rasdlg/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/rasdlg/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/rasdlg/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/rasdlg/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/rasdlg/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/rasdlg/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/rasdlg/rasdlg.c (100%) rename {reactos/dll => dll}/win32/rasdlg/rasdlg.rbuild (100%) rename {reactos/dll => dll}/win32/rasdlg/rasdlg.rc (100%) rename {reactos/dll => dll}/win32/rasdlg/rasdlg.spec (100%) rename {reactos/dll => dll}/win32/rasdlg/res/bitmaps/100.bmp (100%) rename {reactos/dll => dll}/win32/rasdlg/res/bitmaps/101.bmp (100%) rename {reactos/dll => dll}/win32/rasdlg/res/bitmaps/102.bmp (100%) rename {reactos/dll => dll}/win32/rasdlg/res/bitmaps/1678.bmp (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/134.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/135.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/144.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/145.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/15102.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/50.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/51.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/52.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/53.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/54.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/55.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/56.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/562.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/563.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/57.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/58.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/59.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/60.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/61.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/62.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/res/icons/63.ico (100%) rename {reactos/dll => dll}/win32/rasdlg/resource.h (100%) rename {reactos/dll => dll}/win32/rasman/rasman.c (100%) rename {reactos/dll => dll}/win32/rasman/rasman.rbuild (100%) rename {reactos/dll => dll}/win32/rasman/rasman.rc (100%) rename {reactos/dll => dll}/win32/rasman/rasman.spec (100%) rename {reactos/dll => dll}/win32/riched20/caret.c (100%) rename {reactos/dll => dll}/win32/riched20/clipboard.c (100%) rename {reactos/dll => dll}/win32/riched20/context.c (100%) rename {reactos/dll => dll}/win32/riched20/editor.c (100%) rename {reactos/dll => dll}/win32/riched20/editor.h (100%) rename {reactos/dll => dll}/win32/riched20/editstr.h (100%) rename {reactos/dll => dll}/win32/riched20/list.c (100%) rename {reactos/dll => dll}/win32/riched20/ocr_reverse.cur (100%) rename {reactos/dll => dll}/win32/riched20/paint.c (100%) rename {reactos/dll => dll}/win32/riched20/para.c (100%) rename {reactos/dll => dll}/win32/riched20/reader.c (100%) rename {reactos/dll => dll}/win32/riched20/res.h (100%) rename {reactos/dll => dll}/win32/riched20/riched20.rbuild (100%) rename {reactos/dll => dll}/win32/riched20/riched20.spec (100%) rename {reactos/dll => dll}/win32/riched20/richole.c (100%) rename {reactos/dll => dll}/win32/riched20/row.c (100%) rename {reactos/dll => dll}/win32/riched20/rtf.h (100%) rename {reactos/dll => dll}/win32/riched20/run.c (100%) rename {reactos/dll => dll}/win32/riched20/string.c (100%) rename {reactos/dll => dll}/win32/riched20/style.c (100%) rename {reactos/dll => dll}/win32/riched20/table.c (100%) rename {reactos/dll => dll}/win32/riched20/txtsrv.c (100%) rename {reactos/dll => dll}/win32/riched20/undo.c (100%) rename {reactos/dll => dll}/win32/riched20/version.rc (100%) rename {reactos/dll => dll}/win32/riched20/wrap.c (100%) rename {reactos/dll => dll}/win32/riched20/writer.c (100%) rename {reactos/dll => dll}/win32/riched32/riched32.rbuild (100%) rename {reactos/dll => dll}/win32/riched32/riched32.spec (100%) rename {reactos/dll => dll}/win32/riched32/richedit.c (100%) rename {reactos/dll => dll}/win32/riched32/version.rc (100%) rename {reactos/dll => dll}/win32/rpcrt4/cproxy.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/cpsf.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/cpsf.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/cstub.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/epm_towers.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/ncastatus.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_clientserver.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_contexthandle.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_es.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_fullpointer.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_marshall.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_misc.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_ole.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_stubless.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/ndr_stubless.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_assoc.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_assoc.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_async.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_binding.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_binding.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_defs.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_epmap.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_message.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_message.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_server.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_server.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpc_transport.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpcrt4.rbuild (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpcrt4.rc (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpcrt4.spec (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpcrt4_main.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpcrt4_ros.diff (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpcss_np_client.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/rpcss_np_client.h (100%) rename {reactos/dll => dll}/win32/rpcrt4/unix_func.c (100%) rename {reactos/dll => dll}/win32/rpcrt4/unix_func.h (100%) rename {reactos/dll => dll}/win32/rsabase/rsabase.rbuild (100%) rename {reactos/dll => dll}/win32/rsabase/rsabase.spec (100%) rename {reactos/dll => dll}/win32/rsabase/version.rc (100%) rename {reactos/dll => dll}/win32/rsaenh/aes.c (100%) rename {reactos/dll => dll}/win32/rsaenh/des.c (100%) rename {reactos/dll => dll}/win32/rsaenh/handle.c (100%) rename {reactos/dll => dll}/win32/rsaenh/handle.h (100%) rename {reactos/dll => dll}/win32/rsaenh/implglue.c (100%) rename {reactos/dll => dll}/win32/rsaenh/implglue.h (100%) rename {reactos/dll => dll}/win32/rsaenh/md2.c (100%) rename {reactos/dll => dll}/win32/rsaenh/mpi.c (100%) rename {reactos/dll => dll}/win32/rsaenh/rc2.c (100%) rename {reactos/dll => dll}/win32/rsaenh/rc4.c (100%) rename {reactos/dll => dll}/win32/rsaenh/rsa.c (100%) rename {reactos/dll => dll}/win32/rsaenh/rsaenh.c (100%) rename {reactos/dll => dll}/win32/rsaenh/rsaenh.rbuild (100%) rename {reactos/dll => dll}/win32/rsaenh/rsaenh.spec (100%) rename {reactos/dll => dll}/win32/rsaenh/rsaenh_ros.diff (100%) rename {reactos/dll => dll}/win32/rsaenh/tomcrypt.h (100%) rename {reactos/dll => dll}/win32/rsaenh/version.rc (100%) rename {reactos/dll => dll}/win32/samlib/debug.h (100%) rename {reactos/dll => dll}/win32/samlib/dllmain.c (100%) rename {reactos/dll => dll}/win32/samlib/samlib.c (100%) rename {reactos/dll => dll}/win32/samlib/samlib.def (100%) rename {reactos/dll => dll}/win32/samlib/samlib.rbuild (100%) rename {reactos/dll => dll}/win32/samlib/samlib.rc (100%) rename {reactos/dll => dll}/win32/samsrv/samsrv.c (100%) rename {reactos/dll => dll}/win32/samsrv/samsrv.rbuild (100%) rename {reactos/dll => dll}/win32/samsrv/samsrv.rc (100%) rename {reactos/dll => dll}/win32/samsrv/samsrv.spec (100%) rename {reactos/dll => dll}/win32/schannel/lsamode.c (100%) rename {reactos/dll => dll}/win32/schannel/schannel.rbuild (100%) rename {reactos/dll => dll}/win32/schannel/schannel.spec (100%) rename {reactos/dll => dll}/win32/schannel/schannel_main.c (100%) rename {reactos/dll => dll}/win32/schannel/usermode.c (100%) rename {reactos/dll => dll}/win32/schannel/version.rc (100%) rename {reactos/dll => dll}/win32/secur32/dllmain.c (100%) rename {reactos/dll => dll}/win32/secur32/lsa.c (100%) rename {reactos/dll => dll}/win32/secur32/precomp.h (100%) rename {reactos/dll => dll}/win32/secur32/secext.c (100%) rename {reactos/dll => dll}/win32/secur32/secur32.def (100%) rename {reactos/dll => dll}/win32/secur32/secur32.rbuild (100%) rename {reactos/dll => dll}/win32/secur32/secur32.rc (100%) rename {reactos/dll => dll}/win32/secur32/sspi.c (100%) rename {reactos/dll => dll}/win32/security/security.def (100%) rename {reactos/dll => dll}/win32/security/security.rbuild (100%) rename {reactos/dll => dll}/win32/security/security.rc (100%) rename {reactos/dll => dll}/win32/sensapi/sensapi.c (100%) rename {reactos/dll => dll}/win32/sensapi/sensapi.rbuild (100%) rename {reactos/dll => dll}/win32/sensapi/sensapi.spec (100%) rename {reactos/dll => dll}/win32/serialui/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/serialui/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/serialui/resource.h (100%) rename {reactos/dll => dll}/win32/serialui/serialui.c (100%) rename {reactos/dll => dll}/win32/serialui/serialui.h (100%) rename {reactos/dll => dll}/win32/serialui/serialui.rbuild (100%) rename {reactos/dll => dll}/win32/serialui/serialui.rc (100%) rename {reactos/dll => dll}/win32/serialui/serialui.spec (100%) rename {reactos/dll => dll}/win32/setupapi/cfgmgr.c (100%) rename {reactos/dll => dll}/win32/setupapi/devclass.c (100%) rename {reactos/dll => dll}/win32/setupapi/devinst.c (100%) rename {reactos/dll => dll}/win32/setupapi/dirid.c (100%) rename {reactos/dll => dll}/win32/setupapi/diskspace.c (100%) rename {reactos/dll => dll}/win32/setupapi/driver.c (100%) rename {reactos/dll => dll}/win32/setupapi/install.c (100%) rename {reactos/dll => dll}/win32/setupapi/interface.c (100%) rename {reactos/dll => dll}/win32/setupapi/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/da-DK.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/fi-FI.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/ko-KR.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/pt-BR.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/th-TH.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/tr-TR.rc (100%) rename {reactos/dll => dll}/win32/setupapi/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/setupapi/misc.c (100%) rename {reactos/dll => dll}/win32/setupapi/parser.c (100%) rename {reactos/dll => dll}/win32/setupapi/query.c (100%) rename {reactos/dll => dll}/win32/setupapi/queue.c (100%) rename {reactos/dll => dll}/win32/setupapi/res/1.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/10.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/105.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/11.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/159.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/161.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/18.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/19.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/2.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/20.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/21.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/22.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/23.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/24.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/25.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/26.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/27.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/28.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/3.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/4.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/40.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/41.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/42.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/43.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/5.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/50.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/500.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/501.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/502.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/51.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/52.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/53.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/54.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/6.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/7.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/8.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/9.ico (100%) rename {reactos/dll => dll}/win32/setupapi/res/Icon_Licence/COPYING (100%) rename {reactos/dll => dll}/win32/setupapi/res/Icon_Licence/Tango.txt (100%) rename {reactos/dll => dll}/win32/setupapi/res/icons_res.rc (100%) rename {reactos/dll => dll}/win32/setupapi/resource.h (100%) rename {reactos/dll => dll}/win32/setupapi/rpc.c (100%) rename {reactos/dll => dll}/win32/setupapi/rpc_private.h (100%) rename {reactos/dll => dll}/win32/setupapi/setupapi.rbuild (100%) rename {reactos/dll => dll}/win32/setupapi/setupapi.rc (100%) rename {reactos/dll => dll}/win32/setupapi/setupapi.spec (100%) rename {reactos/dll => dll}/win32/setupapi/setupapi_private.h (100%) rename {reactos/dll => dll}/win32/setupapi/setupcab.c (100%) rename {reactos/dll => dll}/win32/setupapi/stringtable.c (100%) rename {reactos/dll => dll}/win32/setupapi/stubs.c (100%) rename {reactos/dll => dll}/win32/sfc/precomp.h (100%) rename {reactos/dll => dll}/win32/sfc/sfc.c (100%) rename {reactos/dll => dll}/win32/sfc/sfc.rbuild (100%) rename {reactos/dll => dll}/win32/sfc/sfc.spec (100%) rename {reactos/dll => dll}/win32/sfc_os/precomp.h (100%) rename {reactos/dll => dll}/win32/sfc_os/sfc_os.c (100%) rename {reactos/dll => dll}/win32/sfc_os/sfc_os.rbuild (100%) rename {reactos/dll => dll}/win32/sfc_os/sfc_os.spec (100%) rename {reactos/dll => dll}/win32/shdocvw/Bg.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Cs.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/De.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/En.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Es.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Fi.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Fr.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Hu.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Ja.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Ko.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Nl.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/No.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Pl.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Pt.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Ru.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Sk.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Sv.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/Uk.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/classinfo.c (100%) rename {reactos/dll => dll}/win32/shdocvw/client.c (100%) rename {reactos/dll => dll}/win32/shdocvw/dochost.c (100%) rename {reactos/dll => dll}/win32/shdocvw/events.c (100%) rename {reactos/dll => dll}/win32/shdocvw/factory.c (100%) rename {reactos/dll => dll}/win32/shdocvw/frame.c (100%) rename {reactos/dll => dll}/win32/shdocvw/misc.c (100%) rename {reactos/dll => dll}/win32/shdocvw/oleobject.c (100%) rename {reactos/dll => dll}/win32/shdocvw/persist.c (100%) rename {reactos/dll => dll}/win32/shdocvw/regsvr.c (100%) rename {reactos/dll => dll}/win32/shdocvw/shdocvw.h (100%) rename {reactos/dll => dll}/win32/shdocvw/shdocvw.rbuild (100%) rename {reactos/dll => dll}/win32/shdocvw/shdocvw.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/shdocvw.spec (100%) rename {reactos/dll => dll}/win32/shdocvw/shdocvw_main.c (100%) rename {reactos/dll => dll}/win32/shdocvw/shdocvw_ros.diff (100%) rename {reactos/dll => dll}/win32/shdocvw/shlinstobj.c (100%) rename {reactos/dll => dll}/win32/shdocvw/version.rc (100%) rename {reactos/dll => dll}/win32/shdocvw/view.c (100%) rename {reactos/dll => dll}/win32/shdocvw/webbrowser.c (100%) rename {reactos/dll => dll}/win32/shell32/authors.c (100%) rename {reactos/dll => dll}/win32/shell32/autocomplete.c (100%) rename {reactos/dll => dll}/win32/shell32/avi_res.rc (100%) rename {reactos/dll => dll}/win32/shell32/bitmap_res.rc (100%) rename {reactos/dll => dll}/win32/shell32/brsfolder.c (100%) rename {reactos/dll => dll}/win32/shell32/changenotify.c (100%) rename {reactos/dll => dll}/win32/shell32/classes.c (100%) rename {reactos/dll => dll}/win32/shell32/clipboard.c (100%) rename {reactos/dll => dll}/win32/shell32/control.c (100%) rename {reactos/dll => dll}/win32/shell32/cpanel.h (100%) rename {reactos/dll => dll}/win32/shell32/dataobject.c (100%) rename {reactos/dll => dll}/win32/shell32/dde.c (100%) rename {reactos/dll => dll}/win32/shell32/debughlp.c (100%) rename {reactos/dll => dll}/win32/shell32/debughlp.h (100%) rename {reactos/dll => dll}/win32/shell32/desktop.c (100%) rename {reactos/dll => dll}/win32/shell32/dialogs.c (100%) rename {reactos/dll => dll}/win32/shell32/dragdrophelper.c (100%) rename {reactos/dll => dll}/win32/shell32/drive.c (100%) rename {reactos/dll => dll}/win32/shell32/enumidlist.c (100%) rename {reactos/dll => dll}/win32/shell32/enumidlist.h (100%) rename {reactos/dll => dll}/win32/shell32/extracticon.c (100%) rename {reactos/dll => dll}/win32/shell32/folder_options.c (100%) rename {reactos/dll => dll}/win32/shell32/folders.c (100%) rename {reactos/dll => dll}/win32/shell32/fprop.c (100%) rename {reactos/dll => dll}/win32/shell32/icon_res.rc (100%) rename {reactos/dll => dll}/win32/shell32/iconcache.c (100%) rename {reactos/dll => dll}/win32/shell32/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/ca-ES.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/da-DK.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/el-GR.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/en-GB.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/fi-FI.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/ko-KR.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/pt-BR.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/pt-PT.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/sl-SI.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/tr-TR.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/win32/shell32/lang/zh-TW.rc (100%) rename {reactos/dll => dll}/win32/shell32/pidl.c (100%) rename {reactos/dll => dll}/win32/shell32/pidl.h (100%) rename {reactos/dll => dll}/win32/shell32/precomp.h (100%) rename {reactos/dll => dll}/win32/shell32/regsvr.c (100%) rename {reactos/dll => dll}/win32/shell32/res/avis/160+161+167+168.avi (100%) rename {reactos/dll => dll}/win32/shell32/res/avis/162.avi (100%) rename {reactos/dll => dll}/win32/shell32/res/avis/163.avi (100%) rename {reactos/dll => dll}/win32/shell32/res/avis/164+169.avi (100%) rename {reactos/dll => dll}/win32/shell32/res/avis/170.avi (100%) rename {reactos/dll => dll}/win32/shell32/res/avis/Licence/COPYING (100%) rename {reactos/dll => dll}/win32/shell32/res/avis/Licence/Tango.txt (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/204.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/205.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/206.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/207.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/225.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/226.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/227.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/228.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/bitmaps/shell_about_logo_24bpp.bmp (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/1.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/10.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/1001.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/1004.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/11.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/12.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/13.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/134.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/135.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/137.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/138.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/14.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/15.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/151.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/152.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/153.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/154.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/155.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/156.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/157.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/16.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/160.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/161.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/16710.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/16715.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/16717.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/16718.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/16721.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/17.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/172.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/173.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/18.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/182.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/183.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/184.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/185.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/186.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/187.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/19.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/191.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/192.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/2.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/20.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/21.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/210.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/22.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/220.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/221.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/222.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/224.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/225.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/226.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/228.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/23.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/233.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/235.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/236.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/237.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/238.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/24.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/240.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/245.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/246.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/248.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/249.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/25.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/250.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/252.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/254.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/255.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/263.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/265.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/268.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/269.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/270.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/271.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/277.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/279.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/28.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/289.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/29.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/290.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/291.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/292.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/293.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/294.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/295.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/296.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/297.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/298.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/299.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/3.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/30.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/302.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/304.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/305.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/309.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/315.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/317.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/318.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/319.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/32.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/322.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/323.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/324.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/325.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/326.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/327.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/328.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/329.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/33.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/330.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/35.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/36.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/37.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/38.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/39.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/4.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/40.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/41.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/44.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/45.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/46.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/47.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/48.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/5.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/54.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/6.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/7.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/8.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/8240.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/9.ico (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/Icon_Licence/COPYING (100%) rename {reactos/dll => dll}/win32/shell32/res/icons/Icon_Licence/Tango.txt (100%) rename {reactos/dll => dll}/win32/shell32/ros-systray.c (100%) rename {reactos/dll => dll}/win32/shell32/she_ocmenu.c (100%) rename {reactos/dll => dll}/win32/shell32/shell.c (100%) rename {reactos/dll => dll}/win32/shell32/shell.spec (100%) rename {reactos/dll => dll}/win32/shell32/shell32.rbuild (100%) rename {reactos/dll => dll}/win32/shell32/shell32.rc (100%) rename {reactos/dll => dll}/win32/shell32/shell32.spec (100%) rename {reactos/dll => dll}/win32/shell32/shell32_main.c (100%) rename {reactos/dll => dll}/win32/shell32/shell32_main.h (100%) rename {reactos/dll => dll}/win32/shell32/shellfolder.h (100%) rename {reactos/dll => dll}/win32/shell32/shelllink.c (100%) rename {reactos/dll => dll}/win32/shell32/shellole.c (100%) rename {reactos/dll => dll}/win32/shell32/shellord.c (100%) rename {reactos/dll => dll}/win32/shell32/shellpath.c (100%) rename {reactos/dll => dll}/win32/shell32/shellreg.c (100%) rename {reactos/dll => dll}/win32/shell32/shellstring.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr.h (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_admintools.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_cpanel.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_desktop.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_fonts.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_fs.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_mycomp.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_mydocuments.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_netplaces.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_printers.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_recyclebin.c (100%) rename {reactos/dll => dll}/win32/shell32/shfldr_unixfs.c (100%) rename {reactos/dll => dll}/win32/shell32/shlexec.c (100%) rename {reactos/dll => dll}/win32/shell32/shlfileop.c (100%) rename {reactos/dll => dll}/win32/shell32/shlfolder.c (100%) rename {reactos/dll => dll}/win32/shell32/shlfsbind.c (100%) rename {reactos/dll => dll}/win32/shell32/shlmenu.c (100%) rename {reactos/dll => dll}/win32/shell32/shlview.c (100%) rename {reactos/dll => dll}/win32/shell32/shpolicy.c (100%) rename {reactos/dll => dll}/win32/shell32/shresdef.h (100%) rename {reactos/dll => dll}/win32/shell32/shv_def_cmenu.c (100%) rename {reactos/dll => dll}/win32/shell32/shv_item_new.c (100%) rename {reactos/dll => dll}/win32/shell32/startmenu.c (100%) rename {reactos/dll => dll}/win32/shell32/systray.c (100%) rename {reactos/dll => dll}/win32/shell32/undocshell.h (100%) rename {reactos/dll => dll}/win32/shell32/version.h (100%) rename {reactos/dll => dll}/win32/shell32/version.rc (100%) rename {reactos/dll => dll}/win32/shell32/version16.rc (100%) rename {reactos/dll => dll}/win32/shell32/xdg.h (100%) rename {reactos/dll => dll}/win32/shfolder/shfolder.rbuild (100%) rename {reactos/dll => dll}/win32/shfolder/shfolder.spec (100%) rename {reactos/dll => dll}/win32/shfolder/version.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/lang/lt-LT.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/res/main.ico (100%) rename {reactos/dll => dll}/win32/shimgvw/res/next.bmp (100%) rename {reactos/dll => dll}/win32/shimgvw/res/prev.bmp (100%) rename {reactos/dll => dll}/win32/shimgvw/res/print.bmp (100%) rename {reactos/dll => dll}/win32/shimgvw/res/rot1.bmp (100%) rename {reactos/dll => dll}/win32/shimgvw/res/rot2.bmp (100%) rename {reactos/dll => dll}/win32/shimgvw/res/save.bmp (100%) rename {reactos/dll => dll}/win32/shimgvw/res/zoomm.bmp (100%) rename {reactos/dll => dll}/win32/shimgvw/res/zoomp.bmp (100%) rename {reactos/dll => dll}/win32/shimgvw/resource.h (100%) rename {reactos/dll => dll}/win32/shimgvw/rsrc.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/shimgvw.c (100%) rename {reactos/dll => dll}/win32/shimgvw/shimgvw.h (100%) rename {reactos/dll => dll}/win32/shimgvw/shimgvw.rbuild (100%) rename {reactos/dll => dll}/win32/shimgvw/shimgvw.rc (100%) rename {reactos/dll => dll}/win32/shimgvw/shimgvw.spec (100%) rename {reactos/dll => dll}/win32/shlwapi/assoc.c (100%) rename {reactos/dll => dll}/win32/shlwapi/clist.c (100%) rename {reactos/dll => dll}/win32/shlwapi/istream.c (100%) rename {reactos/dll => dll}/win32/shlwapi/msgbox.c (100%) rename {reactos/dll => dll}/win32/shlwapi/ordinal.c (100%) rename {reactos/dll => dll}/win32/shlwapi/path.c (100%) rename {reactos/dll => dll}/win32/shlwapi/reg.c (100%) rename {reactos/dll => dll}/win32/shlwapi/regstream.c (100%) rename {reactos/dll => dll}/win32/shlwapi/resource.h (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi.rbuild (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi.spec (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Da.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_De.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_En.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Eo.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Es.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Fi.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Fr.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Hu.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_It.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Ja.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Ko.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Nl.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_No.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Pl.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Pt.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Ro.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Ru.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Si.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Sv.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Tr.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Uk.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_Zh.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_main.c (100%) rename {reactos/dll => dll}/win32/shlwapi/shlwapi_ros.diff (100%) rename {reactos/dll => dll}/win32/shlwapi/stopwatch.c (100%) rename {reactos/dll => dll}/win32/shlwapi/string.c (100%) rename {reactos/dll => dll}/win32/shlwapi/thread.c (100%) rename {reactos/dll => dll}/win32/shlwapi/url.c (100%) rename {reactos/dll => dll}/win32/shlwapi/version.rc (100%) rename {reactos/dll => dll}/win32/shlwapi/wsprintf.c (100%) rename {reactos/dll => dll}/win32/smdll/dllmain.c (100%) rename {reactos/dll => dll}/win32/smdll/query.c (100%) rename {reactos/dll => dll}/win32/smdll/readme.txt (100%) rename {reactos/dll => dll}/win32/smdll/smdll.def (100%) rename {reactos/dll => dll}/win32/smdll/smdll.rbuild (100%) rename {reactos/dll => dll}/win32/smdll/smdll.rc (100%) rename {reactos/dll => dll}/win32/snmpapi/debug.h (100%) rename {reactos/dll => dll}/win32/snmpapi/snmpapi.c (100%) rename {reactos/dll => dll}/win32/snmpapi/snmpapi.rbuild (100%) rename {reactos/dll => dll}/win32/snmpapi/snmpapi.rc (100%) rename {reactos/dll => dll}/win32/snmpapi/snmpapi.spec (100%) rename {reactos/dll => dll}/win32/stdole2.tlb/rsrc.rc (100%) rename {reactos/dll => dll}/win32/stdole2.tlb/std_ole_v2.idl (100%) rename {reactos/dll => dll}/win32/stdole2.tlb/stdole2.rbuild (100%) rename {reactos/dll => dll}/win32/stdole2.tlb/stdole2.tlb.spec (100%) rename {reactos/dll => dll}/win32/stdole32.tlb/rsrc.rc (100%) rename {reactos/dll => dll}/win32/stdole32.tlb/std_ole_v1.idl (100%) rename {reactos/dll => dll}/win32/stdole32.tlb/stdole32.rbuild (100%) rename {reactos/dll => dll}/win32/stdole32.tlb/stdole32.tlb.spec (100%) rename {reactos/dll => dll}/win32/sxs/sxs.c (100%) rename {reactos/dll => dll}/win32/sxs/sxs.rbuild (100%) rename {reactos/dll => dll}/win32/sxs/sxs.spec (100%) rename {reactos/dll => dll}/win32/syssetup/COPYING (100%) rename {reactos/dll => dll}/win32/syssetup/classinst.c (100%) rename {reactos/dll => dll}/win32/syssetup/dllmain.c (100%) rename {reactos/dll => dll}/win32/syssetup/globals.h (100%) rename {reactos/dll => dll}/win32/syssetup/install.c (100%) rename {reactos/dll => dll}/win32/syssetup/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/el-GR.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/syssetup/lang/zh-CN.rc (100%) rename {reactos/dll => dll}/win32/syssetup/logfile.c (100%) rename {reactos/dll => dll}/win32/syssetup/resource.h (100%) rename {reactos/dll => dll}/win32/syssetup/resources/header.bmp (100%) rename {reactos/dll => dll}/win32/syssetup/resources/watermark.bmp (100%) rename {reactos/dll => dll}/win32/syssetup/syssetup.def (100%) rename {reactos/dll => dll}/win32/syssetup/syssetup.rbuild (100%) rename {reactos/dll => dll}/win32/syssetup/syssetup.rc (100%) rename {reactos/dll => dll}/win32/syssetup/wizard.c (100%) rename {reactos/dll => dll}/win32/tapi32/assisted.c (100%) rename {reactos/dll => dll}/win32/tapi32/line.c (100%) rename {reactos/dll => dll}/win32/tapi32/phone.c (100%) rename {reactos/dll => dll}/win32/tapi32/tapi32.rbuild (100%) rename {reactos/dll => dll}/win32/tapi32/tapi32.spec (100%) rename {reactos/dll => dll}/win32/tapiui/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/tapiui/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/tapiui/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/tapiui/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/tapiui/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/tapiui/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/tapiui/res/201.ico (100%) rename {reactos/dll => dll}/win32/tapiui/res/202.ico (100%) rename {reactos/dll => dll}/win32/tapiui/res/203.ico (100%) rename {reactos/dll => dll}/win32/tapiui/res/301.bmp (100%) rename {reactos/dll => dll}/win32/tapiui/res/302.bmp (100%) rename {reactos/dll => dll}/win32/tapiui/res/504.ico (100%) rename {reactos/dll => dll}/win32/tapiui/resource.h (100%) rename {reactos/dll => dll}/win32/tapiui/tapiui.rbuild (100%) rename {reactos/dll => dll}/win32/tapiui/tapiui.rc (100%) rename {reactos/dll => dll}/win32/twain_32/Makefile.in (100%) rename {reactos/dll => dll}/win32/twain_32/README (100%) rename {reactos/dll => dll}/win32/twain_32/TWAIN (100%) rename {reactos/dll => dll}/win32/twain_32/capability.c (100%) rename {reactos/dll => dll}/win32/twain_32/ds_audio.c (100%) rename {reactos/dll => dll}/win32/twain_32/ds_ctrl.c (100%) rename {reactos/dll => dll}/win32/twain_32/ds_image.c (100%) rename {reactos/dll => dll}/win32/twain_32/dsm_ctrl.c (100%) rename {reactos/dll => dll}/win32/twain_32/twain.h (100%) rename {reactos/dll => dll}/win32/twain_32/twain32_main.c (100%) rename {reactos/dll => dll}/win32/twain_32/twain_32.def (100%) rename {reactos/dll => dll}/win32/twain_32/twain_32.rbuild (100%) rename {reactos/dll => dll}/win32/twain_32/twain_32.rc (100%) rename {reactos/dll => dll}/win32/twain_32/twain_i.h (100%) rename {reactos/dll => dll}/win32/uext2/uext2.c (100%) rename {reactos/dll => dll}/win32/uext2/uext2.def (100%) rename {reactos/dll => dll}/win32/uext2/uext2.rbuild (100%) rename {reactos/dll => dll}/win32/uext2/uext2.rc (100%) rename {reactos/dll => dll}/win32/ufat/ufat.c (100%) rename {reactos/dll => dll}/win32/ufat/ufat.def (100%) rename {reactos/dll => dll}/win32/ufat/ufat.rbuild (100%) rename {reactos/dll => dll}/win32/ufat/ufat.rc (100%) rename {reactos/dll => dll}/win32/ufatx/ufatx.def (100%) rename {reactos/dll => dll}/win32/ufatx/ufatx.rbuild (100%) rename {reactos/dll => dll}/win32/ufatx/ufatx.rc (100%) rename {reactos/dll => dll}/win32/untfs/untfs.c (100%) rename {reactos/dll => dll}/win32/untfs/untfs.def (100%) rename {reactos/dll => dll}/win32/untfs/untfs.rbuild (100%) rename {reactos/dll => dll}/win32/untfs/untfs.rc (100%) rename {reactos/dll => dll}/win32/urlmon/bindctx.c (100%) rename {reactos/dll => dll}/win32/urlmon/binding.c (100%) rename {reactos/dll => dll}/win32/urlmon/bindprot.c (100%) rename {reactos/dll => dll}/win32/urlmon/download.c (100%) rename {reactos/dll => dll}/win32/urlmon/file.c (100%) rename {reactos/dll => dll}/win32/urlmon/format.c (100%) rename {reactos/dll => dll}/win32/urlmon/ftp.c (100%) rename {reactos/dll => dll}/win32/urlmon/http.c (100%) rename {reactos/dll => dll}/win32/urlmon/internet.c (100%) rename {reactos/dll => dll}/win32/urlmon/mk.c (100%) rename {reactos/dll => dll}/win32/urlmon/regsvr.c (100%) rename {reactos/dll => dll}/win32/urlmon/rsrc.rc (100%) rename {reactos/dll => dll}/win32/urlmon/sec_mgr.c (100%) rename {reactos/dll => dll}/win32/urlmon/session.c (100%) rename {reactos/dll => dll}/win32/urlmon/umon.c (100%) rename {reactos/dll => dll}/win32/urlmon/umstream.c (100%) rename {reactos/dll => dll}/win32/urlmon/urlmon.inf (100%) rename {reactos/dll => dll}/win32/urlmon/urlmon.rbuild (100%) rename {reactos/dll => dll}/win32/urlmon/urlmon.spec (100%) rename {reactos/dll => dll}/win32/urlmon/urlmon_main.c (100%) rename {reactos/dll => dll}/win32/urlmon/urlmon_main.h (100%) rename {reactos/dll => dll}/win32/urlmon/version.rc (100%) rename {reactos/dll => dll}/win32/user32/controls/button.c (100%) rename {reactos/dll => dll}/win32/user32/controls/combo.c (100%) rename {reactos/dll => dll}/win32/user32/controls/edit.c (100%) rename {reactos/dll => dll}/win32/user32/controls/icontitle.c (100%) rename {reactos/dll => dll}/win32/user32/controls/listbox.c (100%) rename {reactos/dll => dll}/win32/user32/controls/regcontrol.c (100%) rename {reactos/dll => dll}/win32/user32/controls/scrollbar.c (100%) rename {reactos/dll => dll}/win32/user32/controls/static.c (100%) rename {reactos/dll => dll}/win32/user32/include/accel.h (100%) rename {reactos/dll => dll}/win32/user32/include/controls.h (100%) rename {reactos/dll => dll}/win32/user32/include/cursor.h (100%) rename {reactos/dll => dll}/win32/user32/include/dde_private.h (100%) rename {reactos/dll => dll}/win32/user32/include/draw.h (100%) rename {reactos/dll => dll}/win32/user32/include/menu.h (100%) rename {reactos/dll => dll}/win32/user32/include/message.h (100%) rename {reactos/dll => dll}/win32/user32/include/regcontrol.h (100%) rename {reactos/dll => dll}/win32/user32/include/resource.h (100%) rename {reactos/dll => dll}/win32/user32/include/scroll.h (100%) rename {reactos/dll => dll}/win32/user32/include/user32.h (100%) rename {reactos/dll => dll}/win32/user32/include/user32p.h (100%) rename {reactos/dll => dll}/win32/user32/include/window.h (100%) rename {reactos/dll => dll}/win32/user32/include/winpos.h (100%) rename {reactos/dll => dll}/win32/user32/include/winsta.h (100%) rename {reactos/dll => dll}/win32/user32/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/da-DK.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/el-GR.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/win32/user32/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/user32/misc/dde.c (100%) rename {reactos/dll => dll}/win32/user32/misc/ddeclient.c (100%) rename {reactos/dll => dll}/win32/user32/misc/ddeserver.c (100%) rename {reactos/dll => dll}/win32/user32/misc/desktop.c (100%) rename {reactos/dll => dll}/win32/user32/misc/display.c (100%) rename {reactos/dll => dll}/win32/user32/misc/dllmain.c (100%) rename {reactos/dll => dll}/win32/user32/misc/exit.c (100%) rename {reactos/dll => dll}/win32/user32/misc/exticon.c (100%) rename {reactos/dll => dll}/win32/user32/misc/misc.c (100%) rename {reactos/dll => dll}/win32/user32/misc/object.c (100%) rename {reactos/dll => dll}/win32/user32/misc/resources.c (100%) rename {reactos/dll => dll}/win32/user32/misc/stubs.c (100%) rename {reactos/dll => dll}/win32/user32/misc/timer.c (100%) rename {reactos/dll => dll}/win32/user32/misc/winhelp.c (100%) rename {reactos/dll => dll}/win32/user32/misc/winsta.c (100%) rename {reactos/dll => dll}/win32/user32/misc/wsprintf.c (100%) rename {reactos/dll => dll}/win32/user32/resources/obm_checkboxes.bmp (100%) rename {reactos/dll => dll}/win32/user32/resources/obm_close.bmp (100%) rename {reactos/dll => dll}/win32/user32/resources/obm_combo.bmp (100%) rename {reactos/dll => dll}/win32/user32/resources/obm_mnarrow.bmp (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_appstarting.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_cdautostart.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_cross.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_dragobject.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_hand.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_help.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_ibeam.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_icon.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_no.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_normal.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_pen.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_size.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_sizeall.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_sizenesw.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_sizens.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_sizenwse.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_sizewe.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_up.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/ocr_wait.cur (100%) rename {reactos/dll => dll}/win32/user32/resources/oic_bang.ico (100%) rename {reactos/dll => dll}/win32/user32/resources/oic_hand.ico (100%) rename {reactos/dll => dll}/win32/user32/resources/oic_note.ico (100%) rename {reactos/dll => dll}/win32/user32/resources/oic_ques.ico (100%) rename {reactos/dll => dll}/win32/user32/resources/oic_reactos.ico (100%) rename {reactos/dll => dll}/win32/user32/resources/oic_sample.ico (100%) rename {reactos/dll => dll}/win32/user32/user32.def (100%) rename {reactos/dll => dll}/win32/user32/user32.rbuild (100%) rename {reactos/dll => dll}/win32/user32/user32.rc (100%) rename {reactos/dll => dll}/win32/user32/windows/accel.c (100%) rename {reactos/dll => dll}/win32/user32/windows/bitmap.c (100%) rename {reactos/dll => dll}/win32/user32/windows/caret.c (100%) rename {reactos/dll => dll}/win32/user32/windows/class.c (100%) rename {reactos/dll => dll}/win32/user32/windows/clipboard.c (100%) rename {reactos/dll => dll}/win32/user32/windows/cursor.c (100%) rename {reactos/dll => dll}/win32/user32/windows/dc.c (100%) rename {reactos/dll => dll}/win32/user32/windows/defwnd.c (100%) rename {reactos/dll => dll}/win32/user32/windows/dialog.c (100%) rename {reactos/dll => dll}/win32/user32/windows/draw.c (100%) rename {reactos/dll => dll}/win32/user32/windows/font.c (100%) rename {reactos/dll => dll}/win32/user32/windows/hook.c (100%) rename {reactos/dll => dll}/win32/user32/windows/icon.c (100%) rename {reactos/dll => dll}/win32/user32/windows/input.c (100%) rename {reactos/dll => dll}/win32/user32/windows/mdi.c (100%) rename {reactos/dll => dll}/win32/user32/windows/menu.c (100%) rename {reactos/dll => dll}/win32/user32/windows/message.c (100%) rename {reactos/dll => dll}/win32/user32/windows/messagebox.c (100%) rename {reactos/dll => dll}/win32/user32/windows/nonclient.c (100%) rename {reactos/dll => dll}/win32/user32/windows/paint.c (100%) rename {reactos/dll => dll}/win32/user32/windows/prop.c (100%) rename {reactos/dll => dll}/win32/user32/windows/rect.c (100%) rename {reactos/dll => dll}/win32/user32/windows/spy.c (100%) rename {reactos/dll => dll}/win32/user32/windows/text.c (100%) rename {reactos/dll => dll}/win32/user32/windows/window.c (100%) rename {reactos/dll => dll}/win32/user32/windows/winpos.c (100%) rename {reactos/dll => dll}/win32/userenv/desktop.c (100%) rename {reactos/dll => dll}/win32/userenv/directory.c (100%) rename {reactos/dll => dll}/win32/userenv/environment.c (100%) rename {reactos/dll => dll}/win32/userenv/gpolicy.c (100%) rename {reactos/dll => dll}/win32/userenv/internal.h (100%) rename {reactos/dll => dll}/win32/userenv/lang/bg-BG.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/cs-CZ.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/de-DE.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/el-GR.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/en-US.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/es-ES.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/fi-FI.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/fr-FR.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/hu-HU.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/id-ID.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/it-IT.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/ja-JP.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/nl-NL.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/no-NO.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/pl-PL.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/ru-RU.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/sk-SK.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/sv-SE.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/th-TH.rc (100%) rename {reactos/dll => dll}/win32/userenv/lang/uk-UA.rc (100%) rename {reactos/dll => dll}/win32/userenv/misc.c (100%) rename {reactos/dll => dll}/win32/userenv/precomp.h (100%) rename {reactos/dll => dll}/win32/userenv/profile.c (100%) rename {reactos/dll => dll}/win32/userenv/registry.c (100%) rename {reactos/dll => dll}/win32/userenv/resources.h (100%) rename {reactos/dll => dll}/win32/userenv/setup.c (100%) rename {reactos/dll => dll}/win32/userenv/userenv.c (100%) rename {reactos/dll => dll}/win32/userenv/userenv.def (100%) rename {reactos/dll => dll}/win32/userenv/userenv.rbuild (100%) rename {reactos/dll => dll}/win32/userenv/userenv.rc (100%) rename {reactos/dll => dll}/win32/usp10/usp10.c (100%) rename {reactos/dll => dll}/win32/usp10/usp10.rbuild (100%) rename {reactos/dll => dll}/win32/usp10/usp10.spec (100%) rename {reactos/dll => dll}/win32/usp10/usp10_ros.diff (100%) rename {reactos/dll => dll}/win32/uxtheme/draw.c (100%) rename {reactos/dll => dll}/win32/uxtheme/main.c (100%) rename {reactos/dll => dll}/win32/uxtheme/metric.c (100%) rename {reactos/dll => dll}/win32/uxtheme/msstyles.c (100%) rename {reactos/dll => dll}/win32/uxtheme/msstyles.h (100%) rename {reactos/dll => dll}/win32/uxtheme/property.c (100%) rename {reactos/dll => dll}/win32/uxtheme/stylemap.c (100%) rename {reactos/dll => dll}/win32/uxtheme/system.c (100%) rename {reactos/dll => dll}/win32/uxtheme/uxini.c (100%) rename {reactos/dll => dll}/win32/uxtheme/uxtheme.rbuild (100%) rename {reactos/dll => dll}/win32/uxtheme/uxtheme.spec (100%) rename {reactos/dll => dll}/win32/uxtheme/uxthemedll.h (100%) rename {reactos/dll => dll}/win32/uxtheme/version.rc (100%) rename {reactos/dll => dll}/win32/vdmdbg/vdmdbg.c (100%) rename {reactos/dll => dll}/win32/vdmdbg/vdmdbg.h (100%) rename {reactos/dll => dll}/win32/vdmdbg/vdmdbg.rbuild (100%) rename {reactos/dll => dll}/win32/vdmdbg/vdmdbg.spec (100%) rename {reactos/dll => dll}/win32/version/info.c (100%) rename {reactos/dll => dll}/win32/version/install.c (100%) rename {reactos/dll => dll}/win32/version/resource.c (100%) rename {reactos/dll => dll}/win32/version/ver.spec (100%) rename {reactos/dll => dll}/win32/version/ver16.c (100%) rename {reactos/dll => dll}/win32/version/version.rbuild (100%) rename {reactos/dll => dll}/win32/version/version.rc (100%) rename {reactos/dll => dll}/win32/version/version.spec (100%) rename {reactos/dll => dll}/win32/version/version_ros.diff (100%) rename {reactos/dll => dll}/win32/wdmaud.drv/wdmaud.c (100%) rename {reactos/dll => dll}/win32/wdmaud.drv/wdmaud.rbuild (100%) rename {reactos/dll => dll}/win32/wdmaud.drv/wdmaud.rc (100%) rename {reactos/dll => dll}/win32/wdmaud.drv/wdmaud.spec (100%) rename {reactos/dll => dll}/win32/win32.rbuild (100%) rename {reactos/dll => dll}/win32/winfax/precomp.h (100%) rename {reactos/dll => dll}/win32/winfax/winfax.c (100%) rename {reactos/dll => dll}/win32/winfax/winfax.def (100%) rename {reactos/dll => dll}/win32/winfax/winfax.rbuild (100%) rename {reactos/dll => dll}/win32/winfax/winfax.rc (100%) rename {reactos/dll => dll}/win32/winhttp/handle.c (100%) rename {reactos/dll => dll}/win32/winhttp/inet_ntop.c (100%) rename {reactos/dll => dll}/win32/winhttp/main.c (100%) rename {reactos/dll => dll}/win32/winhttp/net.c (100%) rename {reactos/dll => dll}/win32/winhttp/request.c (100%) rename {reactos/dll => dll}/win32/winhttp/session.c (100%) rename {reactos/dll => dll}/win32/winhttp/winhttp.rbuild (100%) rename {reactos/dll => dll}/win32/winhttp/winhttp.spec (100%) rename {reactos/dll => dll}/win32/winhttp/winhttp_private.h (100%) rename {reactos/dll => dll}/win32/winhttp/winhttp_ros.diff (100%) rename {reactos/dll => dll}/win32/wininet/cookie.c (100%) rename {reactos/dll => dll}/win32/wininet/dialogs.c (100%) rename {reactos/dll => dll}/win32/wininet/ftp.c (100%) rename {reactos/dll => dll}/win32/wininet/gopher.c (100%) rename {reactos/dll => dll}/win32/wininet/http.c (100%) rename {reactos/dll => dll}/win32/wininet/inet_ntop.c (100%) rename {reactos/dll => dll}/win32/wininet/internet.c (100%) rename {reactos/dll => dll}/win32/wininet/internet.h (100%) rename {reactos/dll => dll}/win32/wininet/netconnection.c (100%) rename {reactos/dll => dll}/win32/wininet/resource.h (100%) rename {reactos/dll => dll}/win32/wininet/rsrc.rc (100%) rename {reactos/dll => dll}/win32/wininet/urlcache.c (100%) rename {reactos/dll => dll}/win32/wininet/utility.c (100%) rename {reactos/dll => dll}/win32/wininet/version.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet.rbuild (100%) rename {reactos/dll => dll}/win32/wininet/wininet.spec (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Bg.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Cs.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Da.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_De.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_En.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Eo.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Es.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Fi.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Fr.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Hu.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_It.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Ja.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Ko.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Nl.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_No.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Pl.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Pt.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Ro.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Ru.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Si.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Sv.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Tr.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_Uk.rc (100%) rename {reactos/dll => dll}/win32/wininet/wininet_main.c (100%) rename {reactos/dll => dll}/win32/wininet/wininet_ros.diff (100%) rename {reactos/dll => dll}/win32/winmm/driver.c (100%) rename {reactos/dll => dll}/win32/winmm/joystick.c (100%) rename {reactos/dll => dll}/win32/winmm/lolvldrv.c (100%) rename {reactos/dll => dll}/win32/winmm/mci.c (100%) rename {reactos/dll => dll}/win32/winmm/message16.c (100%) rename {reactos/dll => dll}/win32/winmm/midimap/midimap.c (100%) rename {reactos/dll => dll}/win32/winmm/midimap/midimap.drv.spec (100%) rename {reactos/dll => dll}/win32/winmm/midimap/midimap.rbuild (100%) rename {reactos/dll => dll}/win32/winmm/midimap/midimap.rc (100%) rename {reactos/dll => dll}/win32/winmm/midimap/midimap.spec (100%) rename {reactos/dll => dll}/win32/winmm/mmio.c (100%) rename {reactos/dll => dll}/win32/winmm/mmsystem.c (100%) rename {reactos/dll => dll}/win32/winmm/mmsystem.spec (100%) rename {reactos/dll => dll}/win32/winmm/playsound.c (100%) rename {reactos/dll => dll}/win32/winmm/registry.c (100%) rename {reactos/dll => dll}/win32/winmm/sound.spec (100%) rename {reactos/dll => dll}/win32/winmm/sound16.c (100%) rename {reactos/dll => dll}/win32/winmm/time.c (100%) rename {reactos/dll => dll}/win32/winmm/wavemap/msacm.drv.spec (100%) rename {reactos/dll => dll}/win32/winmm/wavemap/msacm.spec (100%) rename {reactos/dll => dll}/win32/winmm/wavemap/wavemap.c (100%) rename {reactos/dll => dll}/win32/winmm/wavemap/wavemap.rbuild (100%) rename {reactos/dll => dll}/win32/winmm/wavemap/wavemap.rc (100%) rename {reactos/dll => dll}/win32/winmm/winemm.h (100%) rename {reactos/dll => dll}/win32/winmm/winemm16.h (100%) rename {reactos/dll => dll}/win32/winmm/winmm.c (100%) rename {reactos/dll => dll}/win32/winmm/winmm.rbuild (100%) rename {reactos/dll => dll}/win32/winmm/winmm.spec (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Br.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Cs.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_De.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_En.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Es.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Fr.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Hu.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Id.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_It.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Ja.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Nl.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_No.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Pl.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Pt.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Ru.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Si.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Sk.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_Uk.rc (100%) rename {reactos/dll => dll}/win32/winmm/winmm_res.rc (100%) rename {reactos/dll => dll}/win32/winscard/precomp.h (100%) rename {reactos/dll => dll}/win32/winscard/winscard.c (100%) rename {reactos/dll => dll}/win32/winscard/winscard.def (100%) rename {reactos/dll => dll}/win32/winscard/winscard.rc (100%) rename {reactos/dll => dll}/win32/winspool/info.c (100%) rename {reactos/dll => dll}/win32/winspool/stubs.c (100%) rename {reactos/dll => dll}/win32/winspool/winspool.def (100%) rename {reactos/dll => dll}/win32/winspool/winspool.rbuild (100%) rename {reactos/dll => dll}/win32/winspool/winspool.rc (100%) rename {reactos/dll => dll}/win32/winsta/main.c (100%) rename {reactos/dll => dll}/win32/winsta/misc.c (100%) rename {reactos/dll => dll}/win32/winsta/server.c (100%) rename {reactos/dll => dll}/win32/winsta/winsta.def (100%) rename {reactos/dll => dll}/win32/winsta/winsta.h (100%) rename {reactos/dll => dll}/win32/winsta/winsta.rbuild (100%) rename {reactos/dll => dll}/win32/winsta/winsta.rc (100%) rename {reactos/dll => dll}/win32/winsta/ws.c (100%) rename {reactos/dll => dll}/win32/wintrust/asn.c (100%) rename {reactos/dll => dll}/win32/wintrust/crypt.c (100%) rename {reactos/dll => dll}/win32/wintrust/register.c (100%) rename {reactos/dll => dll}/win32/wintrust/softpub.c (100%) rename {reactos/dll => dll}/win32/wintrust/version.rc (100%) rename {reactos/dll => dll}/win32/wintrust/wintrust.rbuild (100%) rename {reactos/dll => dll}/win32/wintrust/wintrust.spec (100%) rename {reactos/dll => dll}/win32/wintrust/wintrust_main.c (100%) rename {reactos/dll => dll}/win32/wintrust/wintrust_priv.h (100%) rename {reactos/dll => dll}/win32/wintrust/wintrust_ros.diff (100%) rename {reactos/dll => dll}/win32/wldap32/add.c (100%) rename {reactos/dll => dll}/win32/wldap32/ber.c (100%) rename {reactos/dll => dll}/win32/wldap32/bind.c (100%) rename {reactos/dll => dll}/win32/wldap32/compare.c (100%) rename {reactos/dll => dll}/win32/wldap32/control.c (100%) rename {reactos/dll => dll}/win32/wldap32/delete.c (100%) rename {reactos/dll => dll}/win32/wldap32/dn.c (100%) rename {reactos/dll => dll}/win32/wldap32/error.c (100%) rename {reactos/dll => dll}/win32/wldap32/extended.c (100%) rename {reactos/dll => dll}/win32/wldap32/init.c (100%) rename {reactos/dll => dll}/win32/wldap32/main.c (100%) rename {reactos/dll => dll}/win32/wldap32/misc.c (100%) rename {reactos/dll => dll}/win32/wldap32/modify.c (100%) rename {reactos/dll => dll}/win32/wldap32/modrdn.c (100%) rename {reactos/dll => dll}/win32/wldap32/option.c (100%) rename {reactos/dll => dll}/win32/wldap32/page.c (100%) rename {reactos/dll => dll}/win32/wldap32/parse.c (100%) rename {reactos/dll => dll}/win32/wldap32/rename.c (100%) rename {reactos/dll => dll}/win32/wldap32/search.c (100%) rename {reactos/dll => dll}/win32/wldap32/value.c (100%) rename {reactos/dll => dll}/win32/wldap32/winldap_private.h (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32.h (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32.rbuild (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32.spec (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Da.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_De.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_En.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Es.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Fr.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Ko.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Nl.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_No.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Pl.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Ru.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Sv.rc (100%) rename {reactos/dll => dll}/win32/wldap32/wldap32_Tr.rc (100%) rename {reactos/dll => dll}/win32/ws2_32/include/catalog.h (100%) rename {reactos/dll => dll}/win32/ws2_32/include/debug.h (100%) rename {reactos/dll => dll}/win32/ws2_32/include/handle.h (100%) rename {reactos/dll => dll}/win32/ws2_32/include/upcall.h (100%) rename {reactos/dll => dll}/win32/ws2_32/include/ws2_32.h (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/async.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/bsd.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/catalog.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/dllmain.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/event.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/handle.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/ns.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/sndrcv.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/stubs.c (100%) rename {reactos/dll => dll}/win32/ws2_32/misc/upcall.c (100%) rename {reactos/dll => dll}/win32/ws2_32/tests/setup.c (100%) rename {reactos/dll => dll}/win32/ws2_32/tests/stubs.tst (100%) rename {reactos/dll => dll}/win32/ws2_32/tests/tests/WinsockEvent.c (100%) rename {reactos/dll => dll}/win32/ws2_32/ws2_32.def (100%) rename {reactos/dll => dll}/win32/ws2_32/ws2_32.rbuild (100%) rename {reactos/dll => dll}/win32/ws2_32/ws2_32.rc (100%) rename {reactos/dll => dll}/win32/ws2help/debug.h (100%) rename {reactos/dll => dll}/win32/ws2help/ws2help.c (100%) rename {reactos/dll => dll}/win32/ws2help/ws2help.def (100%) rename {reactos/dll => dll}/win32/ws2help/ws2help.h (100%) rename {reactos/dll => dll}/win32/ws2help/ws2help.rbuild (100%) rename {reactos/dll => dll}/win32/ws2help/ws2help.rc (100%) rename {reactos/dll => dll}/win32/wshirda/debug.h (100%) rename {reactos/dll => dll}/win32/wshirda/wshirda.c (100%) rename {reactos/dll => dll}/win32/wshirda/wshirda.def (100%) rename {reactos/dll => dll}/win32/wshirda/wshirda.h (100%) rename {reactos/dll => dll}/win32/wshirda/wshirda.rbuild (100%) rename {reactos/dll => dll}/win32/wshirda/wshirda.rc (100%) rename {reactos/dll => dll}/win32/wshtcpip/wshtcpip.c (100%) rename {reactos/dll => dll}/win32/wshtcpip/wshtcpip.h (100%) rename {reactos/dll => dll}/win32/wshtcpip/wshtcpip.rbuild (100%) rename {reactos/dll => dll}/win32/wshtcpip/wshtcpip.rc (100%) rename {reactos/dll => dll}/win32/wshtcpip/wshtcpip.spec (100%) rename {reactos/dll => dll}/win32/wshtcpip/wshtcpip_specs (100%) rename {reactos/dll => dll}/win32/wsock32/stubs.c (100%) rename {reactos/dll => dll}/win32/wsock32/wsock32.def (100%) rename {reactos/dll => dll}/win32/wsock32/wsock32.rbuild (100%) rename {reactos/dll => dll}/win32/wsock32/wsock32.rc (100%) rename {reactos/dll => dll}/win32/wtsapi32/wtsapi32.c (100%) rename {reactos/dll => dll}/win32/wtsapi32/wtsapi32.rbuild (100%) rename {reactos/dll => dll}/win32/wtsapi32/wtsapi32.spec (100%) rename {reactos/drivers => drivers}/Doxyfile (100%) rename {reactos/drivers => drivers}/base/beep/beep.c (100%) rename {reactos/drivers => drivers}/base/beep/beep.rbuild (100%) rename {reactos/drivers => drivers}/base/beep/beep.rc (100%) rename {reactos/drivers => drivers}/base/bootvid/arm/bootdata.c (100%) rename {reactos/drivers => drivers}/base/bootvid/arm/bootvid.c (100%) rename {reactos/drivers => drivers}/base/bootvid/bootvid.rbuild (100%) rename {reactos/drivers => drivers}/base/bootvid/bootvid.rc (100%) rename {reactos/drivers => drivers}/base/bootvid/bootvid.spec (100%) rename {reactos/drivers => drivers}/base/bootvid/i386/bootdata.c (100%) rename {reactos/drivers => drivers}/base/bootvid/i386/bootvid.c (100%) rename {reactos/drivers => drivers}/base/bootvid/i386/vga.c (100%) rename {reactos/drivers => drivers}/base/bootvid/precomp.h (100%) rename {reactos/drivers => drivers}/base/directory.rbuild (100%) rename {reactos/drivers => drivers}/base/kdcom/arm/kdbg.c (100%) rename {reactos/drivers => drivers}/base/kdcom/i386/kdbg.c (100%) rename {reactos/drivers => drivers}/base/kdcom/kdcom.rbuild (100%) rename {reactos/drivers => drivers}/base/kdcom/kdcom.rc (100%) rename {reactos/drivers => drivers}/base/kdcom/kdcom.spec (100%) rename {reactos/drivers => drivers}/base/null/null.c (100%) rename {reactos/drivers => drivers}/base/null/null.rbuild (100%) rename {reactos/drivers => drivers}/base/null/null.rc (100%) rename {reactos/drivers => drivers}/bus/acpi/acpi.rbuild (100%) rename {reactos/drivers => drivers}/bus/acpi/acpi.rc (100%) rename {reactos/drivers => drivers}/bus/acpi/changed.txt (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dsfield.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dsmethod.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dsmthdat.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dsobject.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dsopcode.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dsutils.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dswexec.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dswload.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dswscope.c (100%) rename {reactos/drivers => drivers}/bus/acpi/dispatcher/dswstate.c (100%) rename {reactos/drivers => drivers}/bus/acpi/events/evevent.c (100%) rename {reactos/drivers => drivers}/bus/acpi/events/evmisc.c (100%) rename {reactos/drivers => drivers}/bus/acpi/events/evregion.c (100%) rename {reactos/drivers => drivers}/bus/acpi/events/evrgnini.c (100%) rename {reactos/drivers => drivers}/bus/acpi/events/evsci.c (100%) rename {reactos/drivers => drivers}/bus/acpi/events/evxface.c (100%) rename {reactos/drivers => drivers}/bus/acpi/events/evxfevnt.c (100%) rename {reactos/drivers => drivers}/bus/acpi/events/evxfregn.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amconfig.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amconvrt.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amcreate.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amdump.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amdyadic.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amfield.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amfldio.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/ammisc.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/ammonad.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/ammutex.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amnames.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amprep.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amregion.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amresnte.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amresolv.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amresop.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amstore.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amstoren.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amstorob.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amsystem.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amutils.c (100%) rename {reactos/drivers => drivers}/bus/acpi/executer/amxface.c (100%) rename {reactos/drivers => drivers}/bus/acpi/hardware/hwacpi.c (100%) rename {reactos/drivers => drivers}/bus/acpi/hardware/hwgpe.c (100%) rename {reactos/drivers => drivers}/bus/acpi/hardware/hwregs.c (100%) rename {reactos/drivers => drivers}/bus/acpi/hardware/hwsleep.c (100%) rename {reactos/drivers => drivers}/bus/acpi/hardware/hwtimer.c (100%) rename {reactos/drivers => drivers}/bus/acpi/include/accommon.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acconfig.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acdebug.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acdispat.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acevents.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acexcep.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acglobal.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/achware.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acinterp.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/aclocal.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acmacros.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acnamesp.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acobject.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acoutput.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acparser.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acpi.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acpiosxf.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acpixf.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acresrc.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/acstruct.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/actables.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/actbl.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/actbl1.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/actbl2.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/actbl71.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/actypes.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/amlcode.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/platform/acenv.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/platform/acgcc.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/platform/aclinux.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/platform/acwin.h (100%) rename {reactos/drivers => drivers}/bus/acpi/include/platform/types.h (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsaccess.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsalloc.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nseval.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsinit.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsload.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsnames.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsobject.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nssearch.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsutils.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nswalk.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsxfname.c (100%) rename {reactos/drivers => drivers}/bus/acpi/namespace/nsxfobj.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/acpienum.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/acpisys.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/bn.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/busmgr/bm.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/busmgr/bmnotify.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/busmgr/bmpm.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/busmgr/bmpower.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/busmgr/bmrequest.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/busmgr/bmsearch.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/busmgr/bmutils.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/busmgr/bmxface.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/fdo.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/include/acpisys.h (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/include/bm.h (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/include/bmpower.h (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/include/bn.h (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/osl.c (100%) rename {reactos/drivers => drivers}/bus/acpi/ospm/pdo.c (100%) rename {reactos/drivers => drivers}/bus/acpi/parser/psargs.c (100%) rename {reactos/drivers => drivers}/bus/acpi/parser/psopcode.c (100%) rename {reactos/drivers => drivers}/bus/acpi/parser/psparse.c (100%) rename {reactos/drivers => drivers}/bus/acpi/parser/psscope.c (100%) rename {reactos/drivers => drivers}/bus/acpi/parser/pstree.c (100%) rename {reactos/drivers => drivers}/bus/acpi/parser/psutils.c (100%) rename {reactos/drivers => drivers}/bus/acpi/parser/pswalk.c (100%) rename {reactos/drivers => drivers}/bus/acpi/parser/psxface.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rsaddr.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rscalc.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rscreate.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rsdump.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rsio.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rsirq.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rslist.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rsmemory.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rsmisc.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rsutils.c (100%) rename {reactos/drivers => drivers}/bus/acpi/resource/rsxface.c (100%) rename {reactos/drivers => drivers}/bus/acpi/tables/tbconvrt.c (100%) rename {reactos/drivers => drivers}/bus/acpi/tables/tbget.c (100%) rename {reactos/drivers => drivers}/bus/acpi/tables/tbinstal.c (100%) rename {reactos/drivers => drivers}/bus/acpi/tables/tbutils.c (100%) rename {reactos/drivers => drivers}/bus/acpi/tables/tbxface.c (100%) rename {reactos/drivers => drivers}/bus/acpi/tables/tbxfroot.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmalloc.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmclib.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmcopy.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmdebug.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmdelete.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmeval.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmglobal.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cminit.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmobject.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmutils.c (100%) rename {reactos/drivers => drivers}/bus/acpi/utils/cmxface.c (100%) rename {reactos/drivers => drivers}/bus/directory.rbuild (100%) rename {reactos/drivers => drivers}/bus/isapnp/isapnp.c (100%) rename {reactos/drivers => drivers}/bus/isapnp/isapnp.h (100%) rename {reactos/drivers => drivers}/bus/isapnp/isapnp.rbuild (100%) rename {reactos/drivers => drivers}/bus/isapnp/isapnp.rc (100%) rename {reactos/drivers => drivers}/bus/pci/fdo.c (100%) rename {reactos/drivers => drivers}/bus/pci/pci.c (100%) rename {reactos/drivers => drivers}/bus/pci/pci.h (100%) rename {reactos/drivers => drivers}/bus/pci/pci.rbuild (100%) rename {reactos/drivers => drivers}/bus/pci/pci.rc (100%) rename {reactos/drivers => drivers}/bus/pci/pcidef.h (100%) rename {reactos/drivers => drivers}/bus/pci/pdo.c (100%) rename {reactos/drivers => drivers}/directx/directory.rbuild (100%) rename {reactos/drivers => drivers}/directx/dxapi/dxapi.rbuild (100%) rename {reactos/drivers => drivers}/directx/dxapi/dxapi.rc (100%) rename {reactos/drivers => drivers}/directx/dxapi/dxapi.spec (100%) rename {reactos/drivers => drivers}/directx/dxapi/dxapi_driver.h (100%) rename {reactos/drivers => drivers}/directx/dxapi/main.c (100%) rename {reactos/drivers => drivers}/directx/dxg/ddhmg.c (100%) rename {reactos/drivers => drivers}/directx/dxg/dxg.rbuild (100%) rename {reactos/drivers => drivers}/directx/dxg/dxg.rc (100%) rename {reactos/drivers => drivers}/directx/dxg/dxg.spec (100%) rename {reactos/drivers => drivers}/directx/dxg/dxg_driver.h (100%) rename {reactos/drivers => drivers}/directx/dxg/dxg_int.h (100%) rename {reactos/drivers => drivers}/directx/dxg/eng.c (100%) rename {reactos/drivers => drivers}/directx/dxg/historic.c (100%) rename {reactos/drivers => drivers}/directx/dxg/main.c (100%) rename {reactos/drivers => drivers}/directx/dxg/tags.h (100%) rename {reactos/drivers => drivers}/directx/dxgthk/dxgthk.rbuild (100%) rename {reactos/drivers => drivers}/directx/dxgthk/dxgthk.rc (100%) rename {reactos/drivers => drivers}/directx/dxgthk/dxgthk.spec (100%) rename {reactos/drivers => drivers}/directx/dxgthk/main.c (100%) rename {reactos/drivers => drivers}/drivers.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/cdfs.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/cdfs.h (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/cdfs.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/cdfs.rc (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/cleanup.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/close.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/common.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/create.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/dirctl.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/fcb.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/finfo.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/fsctl.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/misc.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/rw.c (100%) rename {reactos/drivers => drivers}/filesystems/cdfs/volinfo.c (100%) rename {reactos/drivers => drivers}/filesystems/directory.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/ext2/ext2.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/ext2/ext2fs.rc (100%) rename {reactos/drivers => drivers}/filesystems/ext2/inc/errmsg.h (100%) rename {reactos/drivers => drivers}/filesystems/ext2/inc/ext2_fs.h (100%) rename {reactos/drivers => drivers}/filesystems/ext2/inc/ext2fsd.h (100%) rename {reactos/drivers => drivers}/filesystems/ext2/inc/ext2metadata.h (100%) rename {reactos/drivers => drivers}/filesystems/ext2/inc/protos.h (100%) rename {reactos/drivers => drivers}/filesystems/ext2/inc/resource.h (100%) rename {reactos/drivers => drivers}/filesystems/ext2/inc/struct.h (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/DiskIO.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/cleanup.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/close.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/create.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/devcntrl.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/dircntrl.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/ext2.rc (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/ext2init.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/fastio.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/fileinfo.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/flush.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/fsctrl.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/io.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/metadata.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/misc.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/read.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/shutdown.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/volinfo.c (100%) rename {reactos/drivers => drivers}/filesystems/ext2/src/write.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/blockdev.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/cleanup.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/close.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/create.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/dir.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/direntry.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/dirwr.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/ea.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/fastio.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/fat.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/fcb.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/finfo.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/flush.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/fsctl.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/iface.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/misc.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/rw.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/shutdown.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/string.c (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/vfat.h (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/vfat005.1st (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/vfat_fr.txt (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/vfatfs.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/vfatfs.rc (100%) rename {reactos/drivers => drivers}/filesystems/fastfat/volume.c (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/blockdev.c (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/cdfs.c (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/ext2.c (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/fat.c (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/fs_rec.c (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/fs_rec.h (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/fs_rec.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/fs_rec.rc (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/ntfs.c (100%) rename {reactos/drivers => drivers}/filesystems/fs_rec/udfs.c (100%) rename {reactos/drivers => drivers}/filesystems/msfs/create.c (100%) rename {reactos/drivers => drivers}/filesystems/msfs/finfo.c (100%) rename {reactos/drivers => drivers}/filesystems/msfs/fsctrl.c (100%) rename {reactos/drivers => drivers}/filesystems/msfs/msfs.c (100%) rename {reactos/drivers => drivers}/filesystems/msfs/msfs.h (100%) rename {reactos/drivers => drivers}/filesystems/msfs/msfs.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/msfs/msfs.rc (100%) rename {reactos/drivers => drivers}/filesystems/msfs/rw.c (100%) rename {reactos/drivers => drivers}/filesystems/mup/create.c (100%) rename {reactos/drivers => drivers}/filesystems/mup/mup.c (100%) rename {reactos/drivers => drivers}/filesystems/mup/mup.h (100%) rename {reactos/drivers => drivers}/filesystems/mup/mup.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/mup/mup.rc (100%) rename {reactos/drivers => drivers}/filesystems/npfs/create.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs/finfo.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs/fsctrl.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs/npfs.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs/npfs.h (100%) rename {reactos/drivers => drivers}/filesystems/npfs/npfs.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/npfs/npfs.rc (100%) rename {reactos/drivers => drivers}/filesystems/npfs/rw.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs/volume.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/create.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/finfo.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/fsctrl.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/npfs.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/npfs.h (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/npfs.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/npfs.rc (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/rw.c (100%) rename {reactos/drivers => drivers}/filesystems/npfs_new/volume.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/attrib.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/blockdev.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/close.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/create.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/dirctl.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/dispatch.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/fastio.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/fcb.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/finfo.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/fsctl.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/mft.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/misc.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/notes.txt (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/ntfs.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/ntfs.h (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/ntfs.rbuild (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/ntfs.rc (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/rw.c (100%) rename {reactos/drivers => drivers}/filesystems/ntfs/volinfo.c (100%) rename {reactos/drivers => drivers}/input/directory.rbuild (100%) rename {reactos/drivers => drivers}/input/i8042prt/README.txt (100%) rename {reactos/drivers => drivers}/input/i8042prt/createclose.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/i8042prt.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/i8042prt.h (100%) rename {reactos/drivers => drivers}/input/i8042prt/i8042prt.rbuild (100%) rename {reactos/drivers => drivers}/input/i8042prt/i8042prt.rc (100%) rename {reactos/drivers => drivers}/input/i8042prt/keyboard.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/misc.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/mouse.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/pnp.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/ps2pp.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/readwrite.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/registry.c (100%) rename {reactos/drivers => drivers}/input/i8042prt/setup.c (100%) rename {reactos/drivers => drivers}/input/kbdclass/kbdclass.c (100%) rename {reactos/drivers => drivers}/input/kbdclass/kbdclass.h (100%) rename {reactos/drivers => drivers}/input/kbdclass/kbdclass.rbuild (100%) rename {reactos/drivers => drivers}/input/kbdclass/kbdclass.rc (100%) rename {reactos/drivers => drivers}/input/kbdclass/misc.c (100%) rename {reactos/drivers => drivers}/input/mouclass/misc.c (100%) rename {reactos/drivers => drivers}/input/mouclass/mouclass.c (100%) rename {reactos/drivers => drivers}/input/mouclass/mouclass.h (100%) rename {reactos/drivers => drivers}/input/mouclass/mouclass.rbuild (100%) rename {reactos/drivers => drivers}/input/mouclass/mouclass.rc (100%) rename {reactos/drivers => drivers}/input/sermouse/createclose.c (100%) rename {reactos/drivers => drivers}/input/sermouse/detect.c (100%) rename {reactos/drivers => drivers}/input/sermouse/fdo.c (100%) rename {reactos/drivers => drivers}/input/sermouse/internaldevctl.c (100%) rename {reactos/drivers => drivers}/input/sermouse/misc.c (100%) rename {reactos/drivers => drivers}/input/sermouse/readmouse.c (100%) rename {reactos/drivers => drivers}/input/sermouse/sermouse.c (100%) rename {reactos/drivers => drivers}/input/sermouse/sermouse.h (100%) rename {reactos/drivers => drivers}/input/sermouse/sermouse.rbuild (100%) rename {reactos/drivers => drivers}/input/sermouse/sermouse.rc (100%) rename {reactos/drivers => drivers}/input/sermouse/sermouse.txt (100%) rename {reactos/drivers => drivers}/ksfilter/directory.rbuild (100%) rename {reactos/drivers => drivers}/ksfilter/ks/allocators.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/clocks.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/connectivity.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/events.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/irp.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/kcom.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/ks.rbuild (100%) rename {reactos/drivers => drivers}/ksfilter/ks/ks.rc (100%) rename {reactos/drivers => drivers}/ksfilter/ks/ks.spec (100%) rename {reactos/drivers => drivers}/ksfilter/ks/methods.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/misc.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/properties.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/topology.c (100%) rename {reactos/drivers => drivers}/ksfilter/ks/worker.c (100%) rename {reactos/drivers => drivers}/multimedia/README (100%) rename {reactos/drivers => drivers}/multimedia/audio/directory.rbuild (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/mpu401.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/mpu401.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/mpu401.rbuild (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/mpu401.rc (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/portio.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/readme.txt (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/sbdebug.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/settings.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/mpu401_nt4/test.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sb16_nt4/control.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sb16_nt4/interrupt.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sb16_nt4/main.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sb16_nt4/sb16_nt4.rbuild (100%) rename {reactos/drivers => drivers}/multimedia/audio/sb16_nt4/sndblst.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/card.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/dma.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/irq.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/portio.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/sbdebug.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/settings.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/sndblst.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/sndblst.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/sndblst.rbuild (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/sndblst.rc (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/test.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sndblst/test/sb.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/dsp.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/dsp.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/in.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/include/devices.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/mixer.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/mixer.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/sb16.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/sb16.h (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/sb16.rc (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/sb_waveout.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/sound.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/sound.rbuild (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/wave.c (100%) rename {reactos/drivers => drivers}/multimedia/audio/sound/wave.h (100%) rename {reactos/drivers => drivers}/multimedia/directory.rbuild (100%) rename {reactos/drivers => drivers}/network/acd/acd/main.c (100%) rename {reactos/drivers => drivers}/network/acd/include/acdapi.h (100%) rename {reactos/drivers => drivers}/network/acd/rasacd.rbuild (100%) rename {reactos/drivers => drivers}/network/acd/rasacd.rc (100%) rename {reactos/drivers => drivers}/network/afd/afd.rbuild (100%) rename {reactos/drivers => drivers}/network/afd/afd.rc (100%) rename {reactos/drivers => drivers}/network/afd/afd/bind.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/connect.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/context.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/event.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/info.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/listen.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/lock.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/main.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/read.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/select.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/tdi.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/tdiconn.c (100%) rename {reactos/drivers => drivers}/network/afd/afd/write.c (100%) rename {reactos/drivers => drivers}/network/afd/doc/simple_select.txt (100%) rename {reactos/drivers => drivers}/network/afd/include/afd.h (100%) rename {reactos/drivers => drivers}/network/afd/include/debug.h (100%) rename {reactos/drivers => drivers}/network/afd/include/tdi_proto.h (100%) rename {reactos/drivers => drivers}/network/afd/include/tdiconn.h (100%) rename {reactos/drivers => drivers}/network/dd/directory.rbuild (100%) rename {reactos/drivers => drivers}/network/dd/ne2000/include/8390.h (100%) rename {reactos/drivers => drivers}/network/dd/ne2000/include/debug.h (100%) rename {reactos/drivers => drivers}/network/dd/ne2000/include/ne2000.h (100%) rename {reactos/drivers => drivers}/network/dd/ne2000/ne2000.rbuild (100%) rename {reactos/drivers => drivers}/network/dd/ne2000/ne2000.rc (100%) rename {reactos/drivers => drivers}/network/dd/ne2000/ne2000/8390.c (100%) rename {reactos/drivers => drivers}/network/dd/ne2000/ne2000/main.c (100%) rename {reactos/drivers => drivers}/network/dd/pcnet/pci.h (100%) rename {reactos/drivers => drivers}/network/dd/pcnet/pcnet.c (100%) rename {reactos/drivers => drivers}/network/dd/pcnet/pcnet.h (100%) rename {reactos/drivers => drivers}/network/dd/pcnet/pcnet.rbuild (100%) rename {reactos/drivers => drivers}/network/dd/pcnet/pcnet.rc (100%) rename {reactos/drivers => drivers}/network/dd/pcnet/pcnethw.h (100%) rename {reactos/drivers => drivers}/network/dd/pcnet/requests.c (100%) rename {reactos/drivers => drivers}/network/directory.rbuild (100%) rename {reactos/drivers => drivers}/network/lan/include/debug.h (100%) rename {reactos/drivers => drivers}/network/lan/include/lan.h (100%) rename {reactos/drivers => drivers}/network/lan/include/memtrack.h (100%) rename {reactos/drivers => drivers}/network/lan/include/net_lan.h (100%) rename {reactos/drivers => drivers}/network/lan/include/net_wh.h (100%) rename {reactos/drivers => drivers}/network/lan/include/precomp.h (100%) rename {reactos/drivers => drivers}/network/lan/lan.rc (100%) rename {reactos/drivers => drivers}/network/lan/lan/lan.c (100%) rename {reactos/drivers => drivers}/network/lan/lan/routines.c (100%) rename {reactos/drivers => drivers}/network/ndis/DIRS (100%) rename {reactos/drivers => drivers}/network/ndis/include/buffer.h (100%) rename {reactos/drivers => drivers}/network/ndis/include/debug.h (100%) rename {reactos/drivers => drivers}/network/ndis/include/efilter.h (100%) rename {reactos/drivers => drivers}/network/ndis/include/miniport.h (100%) rename {reactos/drivers => drivers}/network/ndis/include/ndissys.h (100%) rename {reactos/drivers => drivers}/network/ndis/include/protocol.h (100%) rename {reactos/drivers => drivers}/network/ndis/ndis.def (100%) rename {reactos/drivers => drivers}/network/ndis/ndis.rbuild (100%) rename {reactos/drivers => drivers}/network/ndis/ndis.rc (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/40gone.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/50gone.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/SOURCES (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/buffer.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/cl.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/cm.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/co.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/config.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/control.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/efilter.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/hardware.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/io.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/main.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/memory.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/miniport.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/object.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/protocol.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/string.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/stubs.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/time.c (100%) rename {reactos/drivers => drivers}/network/ndis/ndis/workitem.c (100%) rename {reactos/drivers => drivers}/network/ndis/readme.txt (100%) rename {reactos/drivers => drivers}/network/tcpip/DIRS (100%) rename {reactos/drivers => drivers}/network/tcpip/datalink/SOURCES (100%) rename {reactos/drivers => drivers}/network/tcpip/datalink/lan.c (100%) rename {reactos/drivers => drivers}/network/tcpip/include/address.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/arp.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/bug.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/checksum.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/datagram.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/debug.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/dispatch.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/fileobjs.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/icmp.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/info.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/interface.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/ip.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/irp.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/lan.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/linux.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/lock.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/loopback.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/memtrack.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/neighbor.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/pool.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/ports.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/precomp.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/rawip.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/receive.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/route.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/router.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/routines.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/tcp.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/tcpcore.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/tcpdef.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/tcpip.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/ticonsts.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/tilists.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/titypes.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/transmit.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/udp.h (100%) rename {reactos/drivers => drivers}/network/tcpip/include/wait.h (100%) rename {reactos/drivers => drivers}/network/tcpip/notes.txt (100%) rename {reactos/drivers => drivers}/network/tcpip/readme.txt (100%) rename {reactos/drivers => drivers}/network/tcpip/recmutex/recmutex.c (100%) rename {reactos/drivers => drivers}/network/tcpip/recmutex/recmutex.h (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip.rbuild (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip.rc (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip.spec (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/SOURCES (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/buffer.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/bug.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/dispatch.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/fileobjs.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/iinfo.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/info.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/irp.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/lock.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/main.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/mockbuffer.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/mockbug.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/mocklock.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/mockpool.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/mockwait.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/ninfo.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/pool.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/proto.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/resource.rc (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/tcpip.def (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/tinfo.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tcpip/wait.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tests/setup.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tests/stubs.tst (100%) rename {reactos/drivers => drivers}/network/tcpip/tests/tests/ipreceive.c (100%) rename {reactos/drivers => drivers}/network/tcpip/tests/tests/tigetprotocolnumber.c (100%) rename {reactos/drivers => drivers}/network/tdi/cte/string.c (100%) rename {reactos/drivers => drivers}/network/tdi/cte/stubs.c (100%) rename {reactos/drivers => drivers}/network/tdi/misc/main.c (100%) rename {reactos/drivers => drivers}/network/tdi/misc/tdi.def (100%) rename {reactos/drivers => drivers}/network/tdi/misc/tdi.rc (100%) rename {reactos/drivers => drivers}/network/tdi/tdi.rbuild (100%) rename {reactos/drivers => drivers}/network/tdi/tdi/dereg.c (100%) rename {reactos/drivers => drivers}/network/tdi/tdi/handler.c (100%) rename {reactos/drivers => drivers}/network/tdi/tdi/obsolete.c (100%) rename {reactos/drivers => drivers}/network/tdi/tdi/stubs.c (100%) rename {reactos/drivers => drivers}/parallel/directory.rbuild (100%) rename {reactos/drivers => drivers}/parallel/parallel/parallel.c (100%) rename {reactos/drivers => drivers}/parallel/parallel/parallel.h (100%) rename {reactos/drivers => drivers}/parallel/parallel/parallel.rbuild (100%) rename {reactos/drivers => drivers}/parallel/parallel/parallel.rc (100%) rename {reactos/drivers => drivers}/serial/directory.rbuild (100%) rename {reactos/drivers => drivers}/serial/serenum/detect.c (100%) rename {reactos/drivers => drivers}/serial/serenum/fdo.c (100%) rename {reactos/drivers => drivers}/serial/serenum/misc.c (100%) rename {reactos/drivers => drivers}/serial/serenum/pdo.c (100%) rename {reactos/drivers => drivers}/serial/serenum/serenum.c (100%) rename {reactos/drivers => drivers}/serial/serenum/serenum.h (100%) rename {reactos/drivers => drivers}/serial/serenum/serenum.rbuild (100%) rename {reactos/drivers => drivers}/serial/serenum/serenum.rc (100%) rename {reactos/drivers => drivers}/serial/serial/circularbuffer.c (100%) rename {reactos/drivers => drivers}/serial/serial/cleanup.c (100%) rename {reactos/drivers => drivers}/serial/serial/close.c (100%) rename {reactos/drivers => drivers}/serial/serial/create.c (100%) rename {reactos/drivers => drivers}/serial/serial/devctrl.c (100%) rename {reactos/drivers => drivers}/serial/serial/info.c (100%) rename {reactos/drivers => drivers}/serial/serial/legacy.c (100%) rename {reactos/drivers => drivers}/serial/serial/misc.c (100%) rename {reactos/drivers => drivers}/serial/serial/pnp.c (100%) rename {reactos/drivers => drivers}/serial/serial/power.c (100%) rename {reactos/drivers => drivers}/serial/serial/rw.c (100%) rename {reactos/drivers => drivers}/serial/serial/serial.c (100%) rename {reactos/drivers => drivers}/serial/serial/serial.h (100%) rename {reactos/drivers => drivers}/serial/serial/serial.rbuild (100%) rename {reactos/drivers => drivers}/serial/serial/serial.rc (100%) rename {reactos/drivers => drivers}/setup/blue/blue.c (100%) rename {reactos/drivers => drivers}/setup/blue/blue.h (100%) rename {reactos/drivers => drivers}/setup/blue/blue.rbuild (100%) rename {reactos/drivers => drivers}/setup/blue/blue.rc (100%) rename {reactos/drivers => drivers}/setup/blue/font.c (100%) rename {reactos/drivers => drivers}/setup/directory.rbuild (100%) rename {reactos/drivers => drivers}/storage/class/cdrom/cdrom.c (100%) rename {reactos/drivers => drivers}/storage/class/cdrom/cdrom.rbuild (100%) rename {reactos/drivers => drivers}/storage/class/cdrom/cdrom.rc (100%) rename {reactos/drivers => drivers}/storage/class/cdrom/findscsi.c (100%) rename {reactos/drivers => drivers}/storage/class/cdrom/license.txt (100%) rename {reactos/drivers => drivers}/storage/class/class2/class2.c (100%) rename {reactos/drivers => drivers}/storage/class/class2/class2.rbuild (100%) rename {reactos/drivers => drivers}/storage/class/class2/class2.rc (100%) rename {reactos/drivers => drivers}/storage/class/class2/class2.spec (100%) rename {reactos/drivers => drivers}/storage/class/class2/license.txt (100%) rename {reactos/drivers => drivers}/storage/class/directory.rbuild (100%) rename {reactos/drivers => drivers}/storage/class/disk/disk.c (100%) rename {reactos/drivers => drivers}/storage/class/disk/disk.rbuild (100%) rename {reactos/drivers => drivers}/storage/class/disk/disk.rc (100%) rename {reactos/drivers => drivers}/storage/class/disk/license.txt (100%) rename {reactos/drivers => drivers}/storage/class/include/class2.h (100%) rename {reactos/drivers => drivers}/storage/class/ramdisk/ramdisk.c (100%) rename {reactos/drivers => drivers}/storage/class/ramdisk/ramdisk.rbuild (100%) rename {reactos/drivers => drivers}/storage/class/ramdisk/ramdisk.rc (100%) rename {reactos/drivers => drivers}/storage/directory.rbuild (100%) rename {reactos/drivers => drivers}/storage/floppy/SOURCES (100%) rename {reactos/drivers => drivers}/storage/floppy/csqrtns.c (100%) rename {reactos/drivers => drivers}/storage/floppy/csqrtns.h (100%) rename {reactos/drivers => drivers}/storage/floppy/floppy.c (100%) rename {reactos/drivers => drivers}/storage/floppy/floppy.h (100%) rename {reactos/drivers => drivers}/storage/floppy/floppy.rbuild (100%) rename {reactos/drivers => drivers}/storage/floppy/floppy.rc (100%) rename {reactos/drivers => drivers}/storage/floppy/hardware.c (100%) rename {reactos/drivers => drivers}/storage/floppy/hardware.h (100%) rename {reactos/drivers => drivers}/storage/floppy/ioctl.c (100%) rename {reactos/drivers => drivers}/storage/floppy/ioctl.h (100%) rename {reactos/drivers => drivers}/storage/floppy/readwrite.c (100%) rename {reactos/drivers => drivers}/storage/floppy/readwrite.h (100%) rename {reactos/drivers => drivers}/storage/ide/atapi/atapi.c (100%) rename {reactos/drivers => drivers}/storage/ide/atapi/atapi.h (100%) rename {reactos/drivers => drivers}/storage/ide/atapi/atapi.rbuild (100%) rename {reactos/drivers => drivers}/storage/ide/atapi/atapi.rc (100%) rename {reactos/drivers => drivers}/storage/ide/atapi/license.txt (100%) rename {reactos/drivers => drivers}/storage/ide/directory.rbuild (100%) rename {reactos/drivers => drivers}/storage/ide/pciide/pciide.c (100%) rename {reactos/drivers => drivers}/storage/ide/pciide/pciide.h (100%) rename {reactos/drivers => drivers}/storage/ide/pciide/pciide.rbuild (100%) rename {reactos/drivers => drivers}/storage/ide/pciide/pciide.rc (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/fdo.c (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/miniport.c (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/misc.c (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/pciidex.c (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/pciidex.h (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/pciidex.rbuild (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/pciidex.rc (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/pciidex.spec (100%) rename {reactos/drivers => drivers}/storage/ide/pciidex/pdo.c (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/atapi.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/badblock.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/bm_devs.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/bsmaster.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/config.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_ata.cpp (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_badblock.cpp (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_dma.cpp (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_init.cpp (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_probe.cpp (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_queue.cpp (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_queue.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_sata.cpp (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/id_sata.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/idedma.def (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/idedma.rc (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/inc/CrNtDecl.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/inc/CrNtStubs.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/inc/CrossNt.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/inc/PostDbgMesg.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/inc/misc.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/inc/rwlock.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/ntddk_ex.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/ntddscsi.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/ros_glue/ros_glue.cpp (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/ros_glue/ros_glue_asm.s (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/scsi.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/srb.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/stdafx.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/tools.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/uata_ctl.h (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/uniata.rbuild (100%) rename {reactos/drivers => drivers}/storage/ide/uniata/uniata_ver.h (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/BT958.bmf (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/BT958.mof (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/BT958dt.h (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/BusLogic958.c (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/BusLogic958.h (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/BusLogic958.rc (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/Log.c (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/Log.h (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/README.ReactOS (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/buslogic.rbuild (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/makefile.inc (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/makefile.original (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/resource.h (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/sources (100%) rename {reactos/drivers => drivers}/storage/port/buslogic/wmi.c (100%) rename {reactos/drivers => drivers}/storage/port/directory.rbuild (100%) rename {reactos/drivers => drivers}/storage/port/diskdump/diskdump.c (100%) rename {reactos/drivers => drivers}/storage/port/diskdump/diskdump.rbuild (100%) rename {reactos/drivers => drivers}/storage/port/diskdump/diskdump.rc (100%) rename {reactos/drivers => drivers}/storage/port/diskdump/diskdump.spec (100%) rename {reactos/drivers => drivers}/storage/port/diskdump/diskdump_helper.S (100%) rename {reactos/drivers => drivers}/storage/scsiport/scsiport.c (100%) rename {reactos/drivers => drivers}/storage/scsiport/scsiport.rbuild (100%) rename {reactos/drivers => drivers}/storage/scsiport/scsiport.rc (100%) rename {reactos/drivers => drivers}/storage/scsiport/scsiport.spec (100%) rename {reactos/drivers => drivers}/storage/scsiport/scsiport_int.h (100%) rename {reactos/drivers => drivers}/usb/directory.rbuild (100%) rename {reactos/drivers => drivers}/usb/nt4compat/directory.rbuild (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/bulkonly.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/cbi.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/compdrv.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/debug.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/devmgr.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/devmgr.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/dmgrdisp.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/ehci.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/ehci.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/etd.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/events.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/gendrv.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/gendrv.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/hcd.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/hub.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/hub.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/irplist.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/mouse.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/mouse.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/ohci.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/ohci.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/roothub.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/td.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/td.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/uhci.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/uhciver.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/umss.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/umss.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/usb.c (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/usb.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/usbdriver.h (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/usbdriver.rbuild (100%) rename {reactos/drivers => drivers}/usb/nt4compat/usbdriver/usbdriver.rc (100%) rename {reactos/drivers => drivers}/usb/usbd/test.c (100%) rename {reactos/drivers => drivers}/usb/usbd/usbd.c (100%) rename {reactos/drivers => drivers}/usb/usbd/usbd.rbuild (100%) rename {reactos/drivers => drivers}/usb/usbd/usbd.rc (100%) rename {reactos/drivers => drivers}/usb/usbd/usbd.spec (100%) rename {reactos/drivers => drivers}/usb/usbhub/createclose.c (100%) rename {reactos/drivers => drivers}/usb/usbhub/fdo.c (100%) rename {reactos/drivers => drivers}/usb/usbhub/misc.c (100%) rename {reactos/drivers => drivers}/usb/usbhub/pdo.c (100%) rename {reactos/drivers => drivers}/usb/usbhub/usbhub.c (100%) rename {reactos/drivers => drivers}/usb/usbhub/usbhub.h (100%) rename {reactos/drivers => drivers}/usb/usbhub/usbhub.rbuild (100%) rename {reactos/drivers => drivers}/usb/usbhub/usbhub.rc (100%) rename {reactos/drivers => drivers}/usb/usbstor/usbstor.c (100%) rename {reactos/drivers => drivers}/usb/usbstor/usbstor.h (100%) rename {reactos/drivers => drivers}/usb/usbstor/usbstor.rbuild (100%) rename {reactos/drivers => drivers}/usb/usbstor/usbstor.rc (100%) rename {reactos/drivers => drivers}/video/directory.rbuild (100%) rename {reactos/drivers => drivers}/video/displays/directory.rbuild (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/dd.c (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/ddenable.c (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/enable.c (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/framebuf.h (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/framebuf.rbuild (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/framebuf.rc (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/framebuf.spec (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/palette.c (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/pointer.c (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/screen.c (100%) rename {reactos/drivers => drivers}/video/displays/framebuf/surface.c (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/dd.c (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/ddenable.c (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/enable.c (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/framebufacc.h (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/framebufacc.rbuild (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/framebufacc.rc (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/framebufacc.spec (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/palette.c (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/pointer.c (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/screen.c (100%) rename {reactos/drivers => drivers}/video/displays/framebufacc/surface.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/main/enable.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/bitblt.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/bitblt.h (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/brush.h (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/copybits.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/lineto.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/offscreen.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/paint.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/pointer.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/screen.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/objects/transblt.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/vgaddi.h (100%) rename {reactos/drivers => drivers}/video/displays/vga/vgaddi.rbuild (100%) rename {reactos/drivers => drivers}/video/displays/vga/vgaddi.rc (100%) rename {reactos/drivers => drivers}/video/displays/vga/vgaddi.spec (100%) rename {reactos/drivers => drivers}/video/displays/vga/vgavideo/vgavideo.c (100%) rename {reactos/drivers => drivers}/video/displays/vga/vgavideo/vgavideo.h (100%) rename {reactos/drivers => drivers}/video/miniport/directory.rbuild (100%) rename {reactos/drivers => drivers}/video/miniport/vbe/edid.c (100%) rename {reactos/drivers => drivers}/video/miniport/vbe/vbemp.c (100%) rename {reactos/drivers => drivers}/video/miniport/vbe/vbemp.h (100%) rename {reactos/drivers => drivers}/video/miniport/vbe/vbemp.rbuild (100%) rename {reactos/drivers => drivers}/video/miniport/vbe/vbemp.rc (100%) rename {reactos/drivers => drivers}/video/miniport/vga/initvga.c (100%) rename {reactos/drivers => drivers}/video/miniport/vga/vgamp.c (100%) rename {reactos/drivers => drivers}/video/miniport/vga/vgamp.h (100%) rename {reactos/drivers => drivers}/video/miniport/vga/vgamp.rbuild (100%) rename {reactos/drivers => drivers}/video/miniport/vga/vgamp.rc (100%) rename {reactos/drivers => drivers}/video/miniport/vga/vgavideo.h (100%) rename {reactos/drivers => drivers}/video/miniport/xboxvmp/xboxvmp.c (100%) rename {reactos/drivers => drivers}/video/miniport/xboxvmp/xboxvmp.h (100%) rename {reactos/drivers => drivers}/video/miniport/xboxvmp/xboxvmp.rbuild (100%) rename {reactos/drivers => drivers}/video/miniport/xboxvmp/xboxvmp.rc (100%) rename {reactos/drivers => drivers}/video/videoprt/agp.c (100%) rename {reactos/drivers => drivers}/video/videoprt/ddc.c (100%) rename {reactos/drivers => drivers}/video/videoprt/dispatch.c (100%) rename {reactos/drivers => drivers}/video/videoprt/dma.c (100%) rename {reactos/drivers => drivers}/video/videoprt/event.c (100%) rename {reactos/drivers => drivers}/video/videoprt/funclist.c (100%) rename {reactos/drivers => drivers}/video/videoprt/int10.c (100%) rename {reactos/drivers => drivers}/video/videoprt/interrupt.c (100%) rename {reactos/drivers => drivers}/video/videoprt/resource.c (100%) rename {reactos/drivers => drivers}/video/videoprt/services.c (100%) rename {reactos/drivers => drivers}/video/videoprt/spinlock.c (100%) rename {reactos/drivers => drivers}/video/videoprt/timer.c (100%) rename {reactos/drivers => drivers}/video/videoprt/videoprt.c (100%) rename {reactos/drivers => drivers}/video/videoprt/videoprt.h (100%) rename {reactos/drivers => drivers}/video/videoprt/videoprt.rbuild (100%) rename {reactos/drivers => drivers}/video/videoprt/videoprt.rc (100%) rename {reactos/drivers => drivers}/video/videoprt/videoprt.spec (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/directory.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/Miniport.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/MiniportDMus.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/MiniportMidi.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/MiniportTopology.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/MiniportWaveCyclic.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/MiniportWavePci.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/Port.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/PortDMus.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/PortMidi.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/PortTopology.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/PortWaveCyclic.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/PortWavePci.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/ResourceList.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/adapter.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/dll.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/drm.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/irp.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/miniport_factory.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/port.h (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/port_factory.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/portcls.rbuild (100%) rename {reactos/drivers/multimedia/portcls.NEW => drivers/wdm/audio/backpln/portcls}/portcls.rc (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/portcls.spec (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/private.h (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/stubs.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/portcls/undoc.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/stdunk/stdunk.c (100%) rename {reactos/drivers => drivers}/wdm/audio/backpln/stdunk/stdunk.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/directory.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/CHANGELOG.txt (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/CM8738-x32-WaveRT.inf (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/CM8738-x32.inf (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/CM8738-x64-WaveRT.inf (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/CM8738-x64.inf (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/HowToBuild.txt (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/adapter.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/adapter.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/build-all.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/build-release-x64-WaveRT.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/build-release-x64.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/build-release-x86-WaveRT.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/build-release-x86.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/main.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/main.h (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/makefile (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/resource.h (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/sources (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/window.aps (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico-license.txt (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmicontrol/window.rc (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmipci.rc (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cmireg.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/common.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/common.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cpl/cmicpl.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cpl/cmicpl.def (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cpl/cmicpl.rc (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cpl/makefile (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cpl/resource.h (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/cpl/sources (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/debug.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/distclean.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/envars.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/installer/main.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/installer/main.h (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/installer/makefile (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/installer/resource.h (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/installer/sources (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/installer/window.rc (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/interfaces.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/make.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/makefile (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/mintopo.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/mintopo.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/mintopotables.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/minwave.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/minwave.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/minwavetables.hpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/property.h (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/sources (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/CMIDriver/update.bat (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/directory.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/mpu401/adapter.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/mpu401/mpu401.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/mpu401/mpu401.rc (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/sb16/adapter.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/sb16/main.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/sb16/sb16.h (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/sb16/sb16.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/drivers/sb16/stdunk.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/drm/directory.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/drm/drmk/drmk.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/drm/drmk/drmk.rc (100%) rename {reactos/drivers => drivers}/wdm/audio/drm/drmk/drmk.spec (100%) rename {reactos/drivers => drivers}/wdm/audio/drm/drmk/stubs.cpp (100%) rename {reactos/drivers => drivers}/wdm/audio/legacy/directory.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/legacy/wdmaud/entry.c (100%) rename {reactos/drivers => drivers}/wdm/audio/legacy/wdmaud/wdmaud.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/sysaudio/main.c (100%) rename {reactos/drivers => drivers}/wdm/audio/sysaudio/sysaudio.rbuild (100%) rename {reactos/drivers => drivers}/wdm/audio/sysaudio/sysaudio.rc (100%) rename {reactos/drivers => drivers}/wdm/wdm.rbuild (100%) rename {reactos/drivers => drivers}/wmi/wmilib.c (100%) rename {reactos/drivers => drivers}/wmi/wmilib.rbuild (100%) rename {reactos/drivers => drivers}/wmi/wmilib.rc (100%) rename {reactos/drivers => drivers}/wmi/wmilib.spec (100%) rename {reactos/hal => hal}/hal.rbuild (100%) rename {reactos/hal => hal}/hal/hal.c (100%) rename {reactos/hal => hal}/hal/hal.rbuild (100%) rename {reactos/hal => hal}/hal/hal.rc (100%) rename {reactos/hal => hal}/hal/hal.spec (100%) rename {reactos/hal => hal}/halarm/directory.rbuild (100%) rename {reactos/hal => hal}/halarm/generic/generic.rbuild (100%) rename {reactos/hal => hal}/halarm/generic/hal.c (100%) rename {reactos/hal => hal}/halarm/include/hal.h (100%) rename {reactos/hal => hal}/halarm/include/halp.h (100%) rename {reactos/hal => hal}/halarm/up/halinit_up.c (100%) rename {reactos/hal => hal}/halarm/up/halup.rbuild (100%) rename {reactos/hal => hal}/halarm/up/halup.rc (100%) rename {reactos/hal => hal}/halppc/directory.rbuild (100%) rename {reactos/hal => hal}/halppc/generic/beep.c (100%) rename {reactos/hal => hal}/halppc/generic/bus.c (100%) rename {reactos/hal => hal}/halppc/generic/cmos.c (100%) rename {reactos/hal => hal}/halppc/generic/display.c (100%) rename {reactos/hal => hal}/halppc/generic/dma.c (100%) rename {reactos/hal => hal}/halppc/generic/drive.c (100%) rename {reactos/hal => hal}/halppc/generic/enum.c (100%) rename {reactos/hal => hal}/halppc/generic/fmutex.c (100%) rename {reactos/hal => hal}/halppc/generic/font.c (100%) rename {reactos/hal => hal}/halppc/generic/generic.rbuild (100%) rename {reactos/hal => hal}/halppc/generic/halinit.c (100%) rename {reactos/hal => hal}/halppc/generic/irql.c (100%) rename {reactos/hal => hal}/halppc/generic/isa.c (100%) rename {reactos/hal => hal}/halppc/generic/misc.c (100%) rename {reactos/hal => hal}/halppc/generic/pci.c (100%) rename {reactos/hal => hal}/halppc/generic/portio.c (100%) rename {reactos/hal => hal}/halppc/generic/processor.c (100%) rename {reactos/hal => hal}/halppc/generic/profil.c (100%) rename {reactos/hal => hal}/halppc/generic/reboot.c (100%) rename {reactos/hal => hal}/halppc/generic/spinlock.c (100%) rename {reactos/hal => hal}/halppc/generic/sysinfo.c (100%) rename {reactos/hal => hal}/halppc/generic/timer.c (100%) rename {reactos/hal => hal}/halppc/include/apic.h (100%) rename {reactos/hal => hal}/halppc/include/bus.h (100%) rename {reactos/hal => hal}/halppc/include/hal.h (100%) rename {reactos/hal => hal}/halppc/include/haldma.h (100%) rename {reactos/hal => hal}/halppc/include/halirq.h (100%) rename {reactos/hal => hal}/halppc/include/halp.h (100%) rename {reactos/hal => hal}/halppc/include/ioapic.h (100%) rename {reactos/hal => hal}/halppc/include/mps.h (100%) rename {reactos/hal => hal}/halppc/up/halinit_up.c (100%) rename {reactos/hal => hal}/halppc/up/halup.rbuild (100%) rename {reactos/hal => hal}/halppc/up/halup.rc (100%) rename {reactos/hal => hal}/halx86/generic/beep.c (100%) rename {reactos/hal => hal}/halx86/generic/bios.c (100%) rename {reactos/hal => hal}/halx86/generic/bus.c (100%) rename {reactos/hal => hal}/halx86/generic/cmos.c (100%) rename {reactos/hal => hal}/halx86/generic/display.c (100%) rename {reactos/hal => hal}/halx86/generic/dma.c (100%) rename {reactos/hal => hal}/halx86/generic/drive.c (100%) rename {reactos/hal => hal}/halx86/generic/generic.rbuild (100%) rename {reactos/hal => hal}/halx86/generic/halinit.c (100%) rename {reactos/hal => hal}/halx86/generic/irq.S (100%) rename {reactos/hal => hal}/halx86/generic/misc.c (100%) rename {reactos/hal => hal}/halx86/generic/pci.c (100%) rename {reactos/hal => hal}/halx86/generic/portio.c (100%) rename {reactos/hal => hal}/halx86/generic/processor.c (100%) rename {reactos/hal => hal}/halx86/generic/profil.c (100%) rename {reactos/hal => hal}/halx86/generic/reboot.c (100%) rename {reactos/hal => hal}/halx86/generic/spinlock.c (100%) rename {reactos/hal => hal}/halx86/generic/sysinfo.c (100%) rename {reactos/hal => hal}/halx86/generic/systimer.S (100%) rename {reactos/hal => hal}/halx86/generic/timer.c (100%) rename {reactos/hal => hal}/halx86/generic/v86.s (100%) rename {reactos/hal => hal}/halx86/hal_generic.rbuild (100%) rename {reactos/hal => hal}/halx86/hal_generic_pc.rbuild (100%) rename {reactos/hal => hal}/halx86/hal_generic_up.rbuild (100%) rename {reactos/hal => hal}/halx86/halmp.rbuild (100%) rename {reactos/hal => hal}/halx86/halup.rbuild (100%) rename {reactos/hal => hal}/halx86/halxbox.rbuild (100%) rename {reactos/hal => hal}/halx86/include/apic.h (100%) rename {reactos/hal => hal}/halx86/include/bus.h (100%) rename {reactos/hal => hal}/halx86/include/hal.h (100%) rename {reactos/hal => hal}/halx86/include/haldma.h (100%) rename {reactos/hal => hal}/halx86/include/halirq.h (100%) rename {reactos/hal => hal}/halx86/include/halp.h (100%) rename {reactos/hal => hal}/halx86/include/ioapic.h (100%) rename {reactos/hal => hal}/halx86/include/mps.h (100%) rename {reactos/hal => hal}/halx86/mp/apic.c (100%) rename {reactos/hal => hal}/halx86/mp/halinit_mp.c (100%) rename {reactos/hal => hal}/halx86/mp/halmp.rc (100%) rename {reactos/hal => hal}/halx86/mp/ioapic.c (100%) rename {reactos/hal => hal}/halx86/mp/ipi_mp.c (100%) rename {reactos/hal => hal}/halx86/mp/mpconfig.c (100%) rename {reactos/hal => hal}/halx86/mp/mps.S (100%) rename {reactos/hal => hal}/halx86/mp/mpsboot.asm (100%) rename {reactos/hal => hal}/halx86/mp/mpsirql.c (100%) rename {reactos/hal => hal}/halx86/mp/processor_mp.c (100%) rename {reactos/hal => hal}/halx86/mp/spinlock.c (100%) rename {reactos/hal => hal}/halx86/up/halinit_up.c (100%) rename {reactos/hal => hal}/halx86/up/halup.rc (100%) rename {reactos/hal => hal}/halx86/xbox/halinit_xbox.c (100%) rename {reactos/hal => hal}/halx86/xbox/halxbox.h (100%) rename {reactos/hal => hal}/halx86/xbox/halxbox.rc (100%) rename {reactos/hal => hal}/halx86/xbox/part_xbox.c (100%) rename {reactos/include => include}/GL/gl.h (100%) rename {reactos/include => include}/GL/glext.h (100%) rename {reactos/include => include}/GL/glu.h (100%) rename {reactos/include => include}/crt/_mingw.h (100%) rename {reactos/include => include}/crt/assert.h (100%) rename {reactos/include => include}/crt/complex.h (100%) rename {reactos/include => include}/crt/conio.h (100%) rename {reactos/include => include}/crt/ctype.h (100%) rename {reactos/include => include}/crt/direct.h (100%) rename {reactos/include => include}/crt/dirent.h (100%) rename {reactos/include => include}/crt/dos.h (100%) rename {reactos/include => include}/crt/errno.h (100%) rename {reactos/include => include}/crt/excpt.h (100%) rename {reactos/include => include}/crt/fcntl.h (100%) rename {reactos/include => include}/crt/fenv.h (100%) rename {reactos/include => include}/crt/float.h (100%) rename {reactos/include => include}/crt/getopt.h (100%) rename {reactos/include => include}/crt/inttypes.h (100%) rename {reactos/include => include}/crt/io.h (100%) rename {reactos/include => include}/crt/libgen.h (100%) rename {reactos/include => include}/crt/limits.h (100%) rename {reactos/include => include}/crt/locale.h (100%) rename {reactos/include => include}/crt/malloc.h (100%) rename {reactos/include => include}/crt/math.h (100%) rename {reactos/include => include}/crt/mbctype.h (100%) rename {reactos/include => include}/crt/mbstring.h (100%) rename {reactos/include => include}/crt/mem.h (100%) rename {reactos/include => include}/crt/memory.h (100%) rename {reactos/include => include}/crt/mingw32/float.h (100%) rename {reactos/include => include}/crt/mingw32/stdarg.h (100%) rename {reactos/include => include}/crt/mingw32/stdbool.h (100%) rename {reactos/include => include}/crt/mingw32/stddef.h (100%) rename {reactos/include => include}/crt/process.h (100%) rename {reactos/include => include}/crt/search.h (100%) rename {reactos/include => include}/crt/setjmp.h (100%) rename {reactos/include => include}/crt/share.h (100%) rename {reactos/include => include}/crt/signal.h (100%) rename {reactos/include => include}/crt/stdint.h (100%) rename {reactos/include => include}/crt/stdio.h (100%) rename {reactos/include => include}/crt/stdlib.h (100%) rename {reactos/include => include}/crt/string.h (100%) rename {reactos/include => include}/crt/strings.h (100%) rename {reactos/include => include}/crt/sys/fcntl.h (100%) rename {reactos/include => include}/crt/sys/file.h (100%) rename {reactos/include => include}/crt/sys/locking.h (100%) rename {reactos/include => include}/crt/sys/param.h (100%) rename {reactos/include => include}/crt/sys/stat.h (100%) rename {reactos/include => include}/crt/sys/time.h (100%) rename {reactos/include => include}/crt/sys/timeb.h (100%) rename {reactos/include => include}/crt/sys/types.h (100%) rename {reactos/include => include}/crt/sys/unistd.h (100%) rename {reactos/include => include}/crt/sys/utime.h (100%) rename {reactos/include => include}/crt/time.h (100%) rename {reactos/include => include}/crt/unistd.h (100%) rename {reactos/include => include}/crt/utime.h (100%) rename {reactos/include => include}/crt/wchar.h (100%) rename {reactos/include => include}/crt/wctype.h (100%) rename {reactos/include => include}/ddk/afilter.h (100%) rename {reactos/include => include}/ddk/amtvuids.h (100%) rename {reactos/include => include}/ddk/atm.h (100%) rename {reactos/include => include}/ddk/atsmedia.h (100%) rename {reactos/include => include}/ddk/batclass.h (100%) rename {reactos/include => include}/ddk/cfg.h (100%) rename {reactos/include => include}/ddk/cfgmgr32.h (100%) rename {reactos/include => include}/ddk/compstui.h (100%) rename {reactos/include => include}/ddk/csq.h (100%) rename {reactos/include => include}/ddk/d3dhal.h (100%) rename {reactos/include => include}/ddk/d3dhalex.h (100%) rename {reactos/include => include}/ddk/d3dnthal.h (100%) rename {reactos/include => include}/ddk/d4drvif.h (100%) rename {reactos/include => include}/ddk/d4iface.h (100%) rename {reactos/include => include}/ddk/dciddi.h (100%) rename {reactos/include => include}/ddk/dderror.h (100%) rename {reactos/include => include}/ddk/ddkernel.h (100%) rename {reactos/include => include}/ddk/ddkmapi.h (100%) rename {reactos/include => include}/ddk/ddrawi.h (100%) rename {reactos/include => include}/ddk/ddrawint.h (100%) rename {reactos/include => include}/ddk/diskguid.h (100%) rename {reactos/include => include}/ddk/dmemmgr.h (100%) rename {reactos/include => include}/ddk/drivinit.h (100%) rename {reactos/include => include}/ddk/drmk.h (100%) rename {reactos/include => include}/ddk/dvp.h (100%) rename {reactos/include => include}/ddk/dxapi.h (100%) rename {reactos/include => include}/ddk/fltsafe.h (100%) rename {reactos/include => include}/ddk/hidclass.h (100%) rename {reactos/include => include}/ddk/hidpi.h (100%) rename {reactos/include => include}/ddk/hidusage.h (100%) rename {reactos/include => include}/ddk/ide.h (100%) rename {reactos/include => include}/ddk/ieverp.h (100%) rename {reactos/include => include}/ddk/imm.h (100%) rename {reactos/include => include}/ddk/ioaccess.h (100%) rename {reactos/include => include}/ddk/isguids.h (100%) rename {reactos/include => include}/ddk/kbdmou.h (100%) rename {reactos/include => include}/ddk/kcom.h (100%) rename {reactos/include => include}/ddk/ksdebug.h (100%) rename {reactos/include => include}/ddk/ksuuids.h (100%) rename {reactos/include => include}/ddk/lmon.h (100%) rename {reactos/include => include}/ddk/mcd.h (100%) rename {reactos/include => include}/ddk/miniport.h (100%) rename {reactos/include => include}/ddk/minitape.h (100%) rename {reactos/include => include}/ddk/mountdev.h (100%) rename {reactos/include => include}/ddk/mountmgr.h (100%) rename {reactos/include => include}/ddk/ndis.h (100%) rename {reactos/include => include}/ddk/ndisguid.h (100%) rename {reactos/include => include}/ddk/ndistapi.h (100%) rename {reactos/include => include}/ddk/ndiswan.h (100%) rename {reactos/include => include}/ddk/netevent.h (100%) rename {reactos/include => include}/ddk/netpnp.h (100%) rename {reactos/include => include}/ddk/nettypes.h (100%) rename {reactos/include => include}/ddk/newdev.h (100%) rename {reactos/include => include}/ddk/ntagp.h (100%) rename {reactos/include => include}/ddk/ntdd1394.h (100%) rename {reactos/include => include}/ddk/ntdd1934.h (100%) rename {reactos/include => include}/ddk/ntdd8042.h (100%) rename {reactos/include => include}/ddk/ntddbeep.h (100%) rename {reactos/include => include}/ddk/ntddcdrm.h (100%) rename {reactos/include => include}/ddk/ntddcdvd.h (100%) rename {reactos/include => include}/ddk/ntddchgr.h (100%) rename {reactos/include => include}/ddk/ntdddisk.h (100%) rename {reactos/include => include}/ddk/ntddft.h (100%) rename {reactos/include => include}/ddk/ntddk.h (100%) rename {reactos/include => include}/ddk/ntddkbd.h (100%) rename {reactos/include => include}/ddk/ntddmou.h (100%) rename {reactos/include => include}/ddk/ntddndis.h (100%) rename {reactos/include => include}/ddk/ntddpar.h (100%) rename {reactos/include => include}/ddk/ntddpcm.h (100%) rename {reactos/include => include}/ddk/ntddscsi.h (100%) rename {reactos/include => include}/ddk/ntddser.h (100%) rename {reactos/include => include}/ddk/ntddstor.h (100%) rename {reactos/include => include}/ddk/ntddtape.h (100%) rename {reactos/include => include}/ddk/ntddtdi.h (100%) rename {reactos/include => include}/ddk/ntddvdeo.h (100%) rename {reactos/include => include}/ddk/ntddvol.h (100%) rename {reactos/include => include}/ddk/ntifs.h (100%) rename {reactos/include => include}/ddk/ntnls.h (100%) rename {reactos/include => include}/ddk/ntpoapi.h (100%) rename {reactos/include => include}/ddk/ntstatus.h (100%) rename {reactos/include => include}/ddk/ntstrsafe.h (100%) rename {reactos/include => include}/ddk/objerror.h (100%) rename {reactos/include => include}/ddk/oprghdlr.h (100%) rename {reactos/include => include}/ddk/parallel.h (100%) rename {reactos/include => include}/ddk/pfhook.h (100%) rename {reactos/include => include}/ddk/poclass.h (100%) rename {reactos/include => include}/ddk/polarity.h (100%) rename {reactos/include => include}/ddk/portcls.h (100%) rename {reactos/include => include}/ddk/prntfont.h (100%) rename {reactos/include => include}/ddk/punknown.h (100%) rename {reactos/include => include}/ddk/scsi.h (100%) rename {reactos/include => include}/ddk/scsiscan.h (100%) rename {reactos/include => include}/ddk/scsiwmi.h (100%) rename {reactos/include => include}/ddk/smbus.h (100%) rename {reactos/include => include}/ddk/srb.h (100%) rename {reactos/include => include}/ddk/stdunk.h (100%) rename {reactos/include => include}/ddk/stierr.h (100%) rename {reactos/include => include}/ddk/stireg.h (100%) rename {reactos/include => include}/ddk/storport.h (100%) rename {reactos/include => include}/ddk/tdi.h (100%) rename {reactos/include => include}/ddk/tdiinfo.h (100%) rename {reactos/include => include}/ddk/tdikrnl.h (100%) rename {reactos/include => include}/ddk/tdistat.h (100%) rename {reactos/include => include}/ddk/tvout.h (100%) rename {reactos/include => include}/ddk/unknown.h (100%) rename {reactos/include => include}/ddk/upssvc.h (100%) rename {reactos/include => include}/ddk/usb.h (100%) rename {reactos/include => include}/ddk/usb100.h (100%) rename {reactos/include => include}/ddk/usb200.h (100%) rename {reactos/include => include}/ddk/usbcamdi.h (100%) rename {reactos/include => include}/ddk/usbdi.h (100%) rename {reactos/include => include}/ddk/usbioctl.h (100%) rename {reactos/include => include}/ddk/usbiodef.h (100%) rename {reactos/include => include}/ddk/usbkern.h (100%) rename {reactos/include => include}/ddk/usbprint.h (100%) rename {reactos/include => include}/ddk/usbscan.h (100%) rename {reactos/include => include}/ddk/usbuser.h (100%) rename {reactos/include => include}/ddk/video.h (100%) rename {reactos/include => include}/ddk/videoagp.h (100%) rename {reactos/include => include}/ddk/warning.h (100%) rename {reactos/include => include}/ddk/wdm.h (100%) rename {reactos/include => include}/ddk/wdmguid.h (100%) rename {reactos/include => include}/ddk/win2k.h (100%) rename {reactos/include => include}/ddk/winddi.h (100%) rename {reactos/include => include}/ddk/winddk.h (100%) rename {reactos/include => include}/ddk/winnt4.h (100%) rename {reactos/include => include}/ddk/winxp.h (100%) rename {reactos/include => include}/ddk/ws2san.h (100%) rename {reactos/include => include}/ddk/xfilter.h (100%) rename {reactos/include => include}/ddk/xmldsodid.h (100%) rename {reactos/include => include}/directory.rbuild (100%) rename {reactos/include => include}/dxsdk/Iwstdec.h (100%) rename {reactos/include => include}/dxsdk/activecf.h (100%) rename {reactos/include => include}/dxsdk/amaudio.h (100%) rename {reactos/include => include}/dxsdk/amparse.h (100%) rename {reactos/include => include}/dxsdk/amstream.idl (100%) rename {reactos/include => include}/dxsdk/amva.h (100%) rename {reactos/include => include}/dxsdk/amvideo.h (100%) rename {reactos/include => include}/dxsdk/atsmedia.h (100%) rename {reactos/include => include}/dxsdk/audevcod.h (100%) rename {reactos/include => include}/dxsdk/austream.idl (100%) rename {reactos/include => include}/dxsdk/aviriff.h (100%) rename {reactos/include => include}/dxsdk/axcore.idl (100%) rename {reactos/include => include}/dxsdk/axextend.idl (100%) rename {reactos/include => include}/dxsdk/bdatypes.h (100%) rename {reactos/include => include}/dxsdk/comlite.h (100%) rename {reactos/include => include}/dxsdk/d3d8caps.h (100%) rename {reactos/include => include}/dxsdk/d3d9caps.h (100%) rename {reactos/include => include}/dxsdk/d3dcaps.h (100%) rename {reactos/include => include}/dxsdk/d3drmwin.h (100%) rename {reactos/include => include}/dxsdk/d3dvec.inl (100%) rename {reactos/include => include}/dxsdk/d3dx9.h (100%) rename {reactos/include => include}/dxsdk/d3dx9shape.h (100%) rename {reactos/include => include}/dxsdk/d3dx9xof.h (100%) rename {reactos/include => include}/dxsdk/ddraw.h (100%) rename {reactos/include => include}/dxsdk/ddrawex.h (100%) rename {reactos/include => include}/dxsdk/ddstream.idl (100%) rename {reactos/include => include}/dxsdk/devenum.idl (100%) rename {reactos/include => include}/dxsdk/dls1.h (100%) rename {reactos/include => include}/dxsdk/dls2.h (100%) rename {reactos/include => include}/dxsdk/dmdls.h (100%) rename {reactos/include => include}/dxsdk/dmksctrl.h (100%) rename {reactos/include => include}/dxsdk/dmo.h (100%) rename {reactos/include => include}/dxsdk/dmodshow.idl (100%) rename {reactos/include => include}/dxsdk/dmoreg.h (100%) rename {reactos/include => include}/dxsdk/dmort.h (100%) rename {reactos/include => include}/dxsdk/dmusbuff.h (100%) rename {reactos/include => include}/dxsdk/dmusics.h (100%) rename {reactos/include => include}/dxsdk/dsconf.h (100%) rename {reactos/include => include}/dxsdk/dsetup.h (100%) rename {reactos/include => include}/dxsdk/dshow.h (100%) rename {reactos/include => include}/dxsdk/dshowasf.idl (100%) rename {reactos/include => include}/dxsdk/dv.h (100%) rename {reactos/include => include}/dxsdk/dx7todx8.h (100%) rename {reactos/include => include}/dxsdk/dxdiag.h (100%) rename {reactos/include => include}/dxsdk/dxerr8.h (100%) rename {reactos/include => include}/dxsdk/dxerr9.h (100%) rename {reactos/include => include}/dxsdk/dxfile.h (100%) rename {reactos/include => include}/dxsdk/dxsdk.rbuild (100%) rename {reactos/include => include}/dxsdk/dxsdkver.h (100%) rename {reactos/include => include}/dxsdk/dyngraph.idl (100%) rename {reactos/include => include}/dxsdk/errors.h (100%) rename {reactos/include => include}/dxsdk/evcode.h (100%) rename {reactos/include => include}/dxsdk/il21dec.h (100%) rename {reactos/include => include}/dxsdk/ksguid.h (100%) rename {reactos/include => include}/dxsdk/ksuuids.h (100%) rename {reactos/include => include}/dxsdk/mediaerr.h (100%) rename {reactos/include => include}/dxsdk/mediaobj.idl (100%) rename {reactos/include => include}/dxsdk/medparam.idl (100%) rename {reactos/include => include}/dxsdk/mixerocx.idl (100%) rename {reactos/include => include}/dxsdk/mmstream.idl (100%) rename {reactos/include => include}/dxsdk/mpconfig.h (100%) rename {reactos/include => include}/dxsdk/mpeg2bits.h (100%) rename {reactos/include => include}/dxsdk/mpeg2error.h (100%) rename {reactos/include => include}/dxsdk/mpegtype.h (100%) rename {reactos/include => include}/dxsdk/pixplugin.h (100%) rename {reactos/include => include}/dxsdk/qedit.idl (100%) rename {reactos/include => include}/dxsdk/regbag.idl (100%) rename {reactos/include => include}/dxsdk/rmxfguid.h (100%) rename {reactos/include => include}/dxsdk/strmif.idl (100%) rename {reactos/include => include}/dxsdk/tvratings.idl (100%) rename {reactos/include => include}/dxsdk/uuids.h (100%) rename {reactos/include => include}/dxsdk/vidcap.idl (100%) rename {reactos/include => include}/dxsdk/videoacc.idl (100%) rename {reactos/include => include}/dxsdk/vmrender.idl (100%) rename {reactos/include => include}/dxsdk/vpconfig.h (100%) rename {reactos/include => include}/dxsdk/vpnotify.h (100%) rename {reactos/include => include}/dxsdk/vptype.h (100%) rename {reactos/include => include}/host/nls.h (100%) rename {reactos/include => include}/host/poppack.h (100%) rename {reactos/include => include}/host/pshpack1.h (100%) rename {reactos/include => include}/host/pshpack2.h (100%) rename {reactos/include => include}/host/pshpack4.h (100%) rename {reactos/include => include}/host/pshpack8.h (100%) rename {reactos/include => include}/host/pshpck16.h (100%) rename {reactos/include => include}/host/typedefs.h (100%) rename {reactos/include => include}/host/wcsfuncs.h (100%) rename {reactos/include => include}/ndk/arch/ketypes.h (100%) rename {reactos/include => include}/ndk/arch/mmtypes.h (100%) rename {reactos/include => include}/ndk/arm/ketypes.h (100%) rename {reactos/include => include}/ndk/arm/mmtypes.h (100%) rename {reactos/include => include}/ndk/asm.h (100%) rename {reactos/include => include}/ndk/cctypes.h (100%) rename {reactos/include => include}/ndk/cmfuncs.h (100%) rename {reactos/include => include}/ndk/cmtypes.h (100%) rename {reactos/include => include}/ndk/dbgkfuncs.h (100%) rename {reactos/include => include}/ndk/dbgktypes.h (100%) rename {reactos/include => include}/ndk/exfuncs.h (100%) rename {reactos/include => include}/ndk/extypes.h (100%) rename {reactos/include => include}/ndk/halfuncs.h (100%) rename {reactos/include => include}/ndk/haltypes.h (100%) rename {reactos/include => include}/ndk/i386/ketypes.h (100%) rename {reactos/include => include}/ndk/i386/mmtypes.h (100%) rename {reactos/include => include}/ndk/ifssupp.h (100%) rename {reactos/include => include}/ndk/inbvfuncs.h (100%) rename {reactos/include => include}/ndk/inbvtypes.h (100%) rename {reactos/include => include}/ndk/iofuncs.h (100%) rename {reactos/include => include}/ndk/iotypes.h (100%) rename {reactos/include => include}/ndk/kdfuncs.h (100%) rename {reactos/include => include}/ndk/kdtypes.h (100%) rename {reactos/include => include}/ndk/kefuncs.h (100%) rename {reactos/include => include}/ndk/ketypes.h (100%) rename {reactos/include => include}/ndk/ldrfuncs.h (100%) rename {reactos/include => include}/ndk/ldrtypes.h (100%) rename {reactos/include => include}/ndk/lpcfuncs.h (100%) rename {reactos/include => include}/ndk/lpctypes.h (100%) rename {reactos/include => include}/ndk/mmfuncs.h (100%) rename {reactos/include => include}/ndk/mmtypes.h (100%) rename {reactos/include => include}/ndk/ntndk.h (100%) rename {reactos/include => include}/ndk/obfuncs.h (100%) rename {reactos/include => include}/ndk/obtypes.h (100%) rename {reactos/include => include}/ndk/pofuncs.h (100%) rename {reactos/include => include}/ndk/potypes.h (100%) rename {reactos/include => include}/ndk/powerpc/ketypes.h (100%) rename {reactos/include => include}/ndk/powerpc/mmtypes.h (100%) rename {reactos/include => include}/ndk/psfuncs.h (100%) rename {reactos/include => include}/ndk/pstypes.h (100%) rename {reactos/include => include}/ndk/readme.txt (100%) rename {reactos/include => include}/ndk/rtlfuncs.h (100%) rename {reactos/include => include}/ndk/rtltypes.h (100%) rename {reactos/include => include}/ndk/sefuncs.h (100%) rename {reactos/include => include}/ndk/setypes.h (100%) rename {reactos/include => include}/ndk/umfuncs.h (100%) rename {reactos/include => include}/ndk/umtypes.h (100%) rename {reactos/include => include}/psdk/README.w32api (100%) rename {reactos/include => include}/psdk/accctrl.h (100%) rename {reactos/include => include}/psdk/aclapi.h (100%) rename {reactos/include => include}/psdk/aclui.h (100%) rename {reactos/include => include}/psdk/activaut.idl (100%) rename {reactos/include => include}/psdk/activdbg.idl (100%) rename {reactos/include => include}/psdk/activscp.idl (100%) rename {reactos/include => include}/psdk/adshlp.h (100%) rename {reactos/include => include}/psdk/advpub.h (100%) rename {reactos/include => include}/psdk/af_irda.h (100%) rename {reactos/include => include}/psdk/afxres.h (100%) rename {reactos/include => include}/psdk/appmgmt.h (100%) rename {reactos/include => include}/psdk/authz.h (100%) rename {reactos/include => include}/psdk/basetsd.h (100%) rename {reactos/include => include}/psdk/basetyps.h (100%) rename {reactos/include => include}/psdk/bcrypt.h (100%) rename {reactos/include => include}/psdk/cderr.h (100%) rename {reactos/include => include}/psdk/cguid.h (100%) rename {reactos/include => include}/psdk/clusapi.h (100%) rename {reactos/include => include}/psdk/comcat.idl (100%) rename {reactos/include => include}/psdk/commctrl.h (100%) rename {reactos/include => include}/psdk/commdlg.h (100%) rename {reactos/include => include}/psdk/common.ver (100%) rename {reactos/include => include}/psdk/control.idl (100%) rename {reactos/include => include}/psdk/cor.h (100%) rename {reactos/include => include}/psdk/corerror.h (100%) rename {reactos/include => include}/psdk/corhdr.h (100%) rename {reactos/include => include}/psdk/cpl.h (100%) rename {reactos/include => include}/psdk/cplext.h (100%) rename {reactos/include => include}/psdk/cryptuiapi.h (100%) rename {reactos/include => include}/psdk/custcntl.h (100%) rename {reactos/include => include}/psdk/cvconst.h (100%) rename {reactos/include => include}/psdk/d3d.h (100%) rename {reactos/include => include}/psdk/d3d8.h (100%) rename {reactos/include => include}/psdk/d3d8types.h (100%) rename {reactos/include => include}/psdk/d3d9.h (100%) rename {reactos/include => include}/psdk/d3d9types.h (100%) rename {reactos/include => include}/psdk/d3drm.h (100%) rename {reactos/include => include}/psdk/d3drmdef.h (100%) rename {reactos/include => include}/psdk/d3dtypes.h (100%) rename {reactos/include => include}/psdk/d3dx8core.h (100%) rename {reactos/include => include}/psdk/dbghelp.h (100%) rename {reactos/include => include}/psdk/dbinit.idl (100%) rename {reactos/include => include}/psdk/dbprop.idl (100%) rename {reactos/include => include}/psdk/dbs.idl (100%) rename {reactos/include => include}/psdk/dbt.h (100%) rename {reactos/include => include}/psdk/dciddi.h (100%) rename {reactos/include => include}/psdk/dciman.h (100%) rename {reactos/include => include}/psdk/dde.h (100%) rename {reactos/include => include}/psdk/ddeml.h (100%) rename {reactos/include => include}/psdk/ddrawgdi.h (100%) rename {reactos/include => include}/psdk/devenum.idl (100%) rename {reactos/include => include}/psdk/devguid.h (100%) rename {reactos/include => include}/psdk/dhcpcapi.h (100%) rename {reactos/include => include}/psdk/dhcpcsdk.h (100%) rename {reactos/include => include}/psdk/digitalv.h (100%) rename {reactos/include => include}/psdk/dimm.idl (100%) rename {reactos/include => include}/psdk/dinput.h (100%) rename {reactos/include => include}/psdk/dispex.idl (100%) rename {reactos/include => include}/psdk/dlgs.h (100%) rename {reactos/include => include}/psdk/docobj.idl (100%) rename {reactos/include => include}/psdk/downloadmgr.idl (100%) rename {reactos/include => include}/psdk/dplay.h (100%) rename {reactos/include => include}/psdk/dplobby.h (100%) rename {reactos/include => include}/psdk/dsdriver.h (100%) rename {reactos/include => include}/psdk/dsgetdc.h (100%) rename {reactos/include => include}/psdk/dsound.h (100%) rename {reactos/include => include}/psdk/dsrole.h (100%) rename {reactos/include => include}/psdk/dvdevcod.h (100%) rename {reactos/include => include}/psdk/dvdmedia.h (100%) rename {reactos/include => include}/psdk/dyngraph.idl (100%) rename {reactos/include => include}/psdk/edevdefs.h (100%) rename {reactos/include => include}/psdk/errorrep.h (100%) rename {reactos/include => include}/psdk/evntrace.h (100%) rename {reactos/include => include}/psdk/exdisp.idl (100%) rename {reactos/include => include}/psdk/exdispid.h (100%) rename {reactos/include => include}/psdk/fci.h (100%) rename {reactos/include => include}/psdk/fdi.h (100%) rename {reactos/include => include}/psdk/fusion.idl (100%) rename {reactos/include => include}/psdk/gdiplus.h (100%) rename {reactos/include => include}/psdk/gdiplusbase.h (100%) rename {reactos/include => include}/psdk/gdiplusbrush.h (100%) rename {reactos/include => include}/psdk/gdipluscolor.h (100%) rename {reactos/include => include}/psdk/gdipluscolormatrix.h (100%) rename {reactos/include => include}/psdk/gdipluseffects.h (100%) rename {reactos/include => include}/psdk/gdiplusenums.h (100%) rename {reactos/include => include}/psdk/gdiplusflat.h (100%) rename {reactos/include => include}/psdk/gdiplusgpstubs.h (100%) rename {reactos/include => include}/psdk/gdiplusgraphics.h (100%) rename {reactos/include => include}/psdk/gdiplusheaders.h (100%) rename {reactos/include => include}/psdk/gdiplusimageattributes.h (100%) rename {reactos/include => include}/psdk/gdiplusimaging.h (100%) rename {reactos/include => include}/psdk/gdiplusinit.h (100%) rename {reactos/include => include}/psdk/gdipluslinecaps.h (100%) rename {reactos/include => include}/psdk/gdiplusmatrix.h (100%) rename {reactos/include => include}/psdk/gdiplusmem.h (100%) rename {reactos/include => include}/psdk/gdiplusmetafile.h (100%) rename {reactos/include => include}/psdk/gdiplusmetaheader.h (100%) rename {reactos/include => include}/psdk/gdipluspath.h (100%) rename {reactos/include => include}/psdk/gdipluspen.h (100%) rename {reactos/include => include}/psdk/gdipluspixelformats.h (100%) rename {reactos/include => include}/psdk/gdiplusstringformat.h (100%) rename {reactos/include => include}/psdk/gdiplustypes.h (100%) rename {reactos/include => include}/psdk/guiddef.h (100%) rename {reactos/include => include}/psdk/hlguids.h (100%) rename {reactos/include => include}/psdk/hlink.idl (100%) rename {reactos/include => include}/psdk/htiframe.idl (100%) rename {reactos/include => include}/psdk/htmlhelp.h (100%) rename {reactos/include => include}/psdk/httpext.h (100%) rename {reactos/include => include}/psdk/i_cryptasn1tls.h (100%) rename {reactos/include => include}/psdk/iads.idl (100%) rename {reactos/include => include}/psdk/icm.h (100%) rename {reactos/include => include}/psdk/icmpapi.h (100%) rename {reactos/include => include}/psdk/idispids.h (100%) rename {reactos/include => include}/psdk/idndl.h (100%) rename {reactos/include => include}/psdk/imagehlp.h (100%) rename {reactos/include => include}/psdk/imm.h (100%) rename {reactos/include => include}/psdk/imnact.idl (100%) rename {reactos/include => include}/psdk/imnxport.idl (100%) rename {reactos/include => include}/psdk/in6addr.h (100%) rename {reactos/include => include}/psdk/inaddr.h (100%) rename {reactos/include => include}/psdk/indexsrv.idl (100%) rename {reactos/include => include}/psdk/initguid.h (100%) rename {reactos/include => include}/psdk/intrin.h (100%) rename {reactos/include => include}/psdk/intrin_arm.h (100%) rename {reactos/include => include}/psdk/intrin_ppc.h (100%) rename {reactos/include => include}/psdk/intrin_x86.h (100%) rename {reactos/include => include}/psdk/intrin_x86_64.h (100%) rename {reactos/include => include}/psdk/intshcut.h (100%) rename {reactos/include => include}/psdk/ipexport.h (100%) rename {reactos/include => include}/psdk/iphlpapi.h (100%) rename {reactos/include => include}/psdk/ipifcons.h (100%) rename {reactos/include => include}/psdk/iprtrmib.h (100%) rename {reactos/include => include}/psdk/iptypes.h (100%) rename {reactos/include => include}/psdk/isguids.h (100%) rename {reactos/include => include}/psdk/ks.h (100%) rename {reactos/include => include}/psdk/ksmedia.h (100%) rename {reactos/include => include}/psdk/largeint.h (100%) rename {reactos/include => include}/psdk/lm.h (100%) rename {reactos/include => include}/psdk/lmaccess.h (100%) rename {reactos/include => include}/psdk/lmalert.h (100%) rename {reactos/include => include}/psdk/lmapibuf.h (100%) rename {reactos/include => include}/psdk/lmat.h (100%) rename {reactos/include => include}/psdk/lmaudit.h (100%) rename {reactos/include => include}/psdk/lmchdev.h (100%) rename {reactos/include => include}/psdk/lmconfig.h (100%) rename {reactos/include => include}/psdk/lmcons.h (100%) rename {reactos/include => include}/psdk/lmerr.h (100%) rename {reactos/include => include}/psdk/lmerrlog.h (100%) rename {reactos/include => include}/psdk/lmjoin.h (100%) rename {reactos/include => include}/psdk/lmmsg.h (100%) rename {reactos/include => include}/psdk/lmremutl.h (100%) rename {reactos/include => include}/psdk/lmrepl.h (100%) rename {reactos/include => include}/psdk/lmserver.h (100%) rename {reactos/include => include}/psdk/lmshare.h (100%) rename {reactos/include => include}/psdk/lmsname.h (100%) rename {reactos/include => include}/psdk/lmstats.h (100%) rename {reactos/include => include}/psdk/lmsvc.h (100%) rename {reactos/include => include}/psdk/lmuse.h (100%) rename {reactos/include => include}/psdk/lmuseflg.h (100%) rename {reactos/include => include}/psdk/lmwksta.h (100%) rename {reactos/include => include}/psdk/lzexpand.h (100%) rename {reactos/include => include}/psdk/mapi.h (100%) rename {reactos/include => include}/psdk/mapicode.h (100%) rename {reactos/include => include}/psdk/mapidefs.h (100%) rename {reactos/include => include}/psdk/mapiform.h (100%) rename {reactos/include => include}/psdk/mapiguid.h (100%) rename {reactos/include => include}/psdk/mapitags.h (100%) rename {reactos/include => include}/psdk/mapiutil.h (100%) rename {reactos/include => include}/psdk/mapival.h (100%) rename {reactos/include => include}/psdk/mapix.h (100%) rename {reactos/include => include}/psdk/mciavi.h (100%) rename {reactos/include => include}/psdk/mcx.h (100%) rename {reactos/include => include}/psdk/mgmtapi.h (100%) rename {reactos/include => include}/psdk/midles.h (100%) rename {reactos/include => include}/psdk/mimeinfo.idl (100%) rename {reactos/include => include}/psdk/mimeole.idl (100%) rename {reactos/include => include}/psdk/mlang.idl (100%) rename {reactos/include => include}/psdk/mmddk.h (100%) rename {reactos/include => include}/psdk/mmreg.h (100%) rename {reactos/include => include}/psdk/mmsystem.h (100%) rename {reactos/include => include}/psdk/mprapi.h (100%) rename {reactos/include => include}/psdk/msacm.h (100%) rename {reactos/include => include}/psdk/mscat.h (100%) rename {reactos/include => include}/psdk/mscoree.idl (100%) rename {reactos/include => include}/psdk/mshtmcid.h (100%) rename {reactos/include => include}/psdk/mshtmdid.h (100%) rename {reactos/include => include}/psdk/mshtmhst.idl (100%) rename {reactos/include => include}/psdk/mshtml.idl (100%) rename {reactos/include => include}/psdk/msi.h (100%) rename {reactos/include => include}/psdk/msidefs.h (100%) rename {reactos/include => include}/psdk/msiquery.h (100%) rename {reactos/include => include}/psdk/mssip.h (100%) rename {reactos/include => include}/psdk/mstask.idl (100%) rename {reactos/include => include}/psdk/mswsock.h (100%) rename {reactos/include => include}/psdk/msxml.idl (100%) rename {reactos/include => include}/psdk/msxml2.idl (100%) rename {reactos/include => include}/psdk/msxml2did.h (100%) rename {reactos/include => include}/psdk/msxmldid.h (100%) rename {reactos/include => include}/psdk/multimon.h (100%) rename {reactos/include => include}/psdk/nb30.h (100%) rename {reactos/include => include}/psdk/nddeapi.h (100%) rename {reactos/include => include}/psdk/ndrtypes.h (100%) rename {reactos/include => include}/psdk/netcfgn.h (100%) rename {reactos/include => include}/psdk/netcfgx.h (100%) rename {reactos/include => include}/psdk/netcon.h (100%) rename {reactos/include => include}/psdk/newdev.h (100%) rename {reactos/include => include}/psdk/npapi.h (100%) rename {reactos/include => include}/psdk/nspapi.h (100%) rename {reactos/include => include}/psdk/ntdef.h (100%) rename {reactos/include => include}/psdk/ntdll.h (100%) rename {reactos/include => include}/psdk/ntdsapi.h (100%) rename {reactos/include => include}/psdk/ntgdi.h (100%) rename {reactos/include => include}/psdk/ntldap.h (100%) rename {reactos/include => include}/psdk/ntquery.h (100%) rename {reactos/include => include}/psdk/ntsecapi.h (100%) rename {reactos/include => include}/psdk/ntsecpkg.h (100%) rename {reactos/include => include}/psdk/ntstatus.h (100%) rename {reactos/include => include}/psdk/ntverp.h (100%) rename {reactos/include => include}/psdk/oaidl.idl (100%) rename {reactos/include => include}/psdk/objbase.h (100%) rename {reactos/include => include}/psdk/objfwd.h (100%) rename {reactos/include => include}/psdk/objidl.idl (100%) rename {reactos/include => include}/psdk/objsafe.idl (100%) rename {reactos/include => include}/psdk/objsel.h (100%) rename {reactos/include => include}/psdk/ocidl.idl (100%) rename {reactos/include => include}/psdk/ocmm.idl (100%) rename {reactos/include => include}/psdk/odbcinst.h (100%) rename {reactos/include => include}/psdk/ole.h (100%) rename {reactos/include => include}/psdk/ole2.h (100%) rename {reactos/include => include}/psdk/ole2ver.h (100%) rename {reactos/include => include}/psdk/oleacc.h (100%) rename {reactos/include => include}/psdk/oleacc.idl (100%) rename {reactos/include => include}/psdk/oleauto.h (100%) rename {reactos/include => include}/psdk/olectl.h (100%) rename {reactos/include => include}/psdk/olectlid.h (100%) rename {reactos/include => include}/psdk/oledb.idl (100%) rename {reactos/include => include}/psdk/oledlg.h (100%) rename {reactos/include => include}/psdk/oleidl.idl (100%) rename {reactos/include => include}/psdk/optary.idl (100%) rename {reactos/include => include}/psdk/pbt.h (100%) rename {reactos/include => include}/psdk/pdh.h (100%) rename {reactos/include => include}/psdk/pdhmsg.h (100%) rename {reactos/include => include}/psdk/poppack.h (100%) rename {reactos/include => include}/psdk/powrprof.h (100%) rename {reactos/include => include}/psdk/propidl.idl (100%) rename {reactos/include => include}/psdk/propvarutil.h (100%) rename {reactos/include => include}/psdk/prsht.h (100%) rename {reactos/include => include}/psdk/psapi.h (100%) rename {reactos/include => include}/psdk/psdk.rbuild (100%) rename {reactos/include => include}/psdk/pshpack1.h (100%) rename {reactos/include => include}/psdk/pshpack2.h (100%) rename {reactos/include => include}/psdk/pshpack4.h (100%) rename {reactos/include => include}/psdk/pshpack8.h (100%) rename {reactos/include => include}/psdk/pshpck16.h (100%) rename {reactos/include => include}/psdk/pstore.idl (100%) rename {reactos/include => include}/psdk/qos.h (100%) rename {reactos/include => include}/psdk/rapi.h (100%) rename {reactos/include => include}/psdk/ras.h (100%) rename {reactos/include => include}/psdk/rasdlg.h (100%) rename {reactos/include => include}/psdk/raseapif.h (100%) rename {reactos/include => include}/psdk/raserror.h (100%) rename {reactos/include => include}/psdk/rassapi.h (100%) rename {reactos/include => include}/psdk/rasshost.h (100%) rename {reactos/include => include}/psdk/reason.h (100%) rename {reactos/include => include}/psdk/regstr.h (100%) rename {reactos/include => include}/psdk/richedit.h (100%) rename {reactos/include => include}/psdk/richole.idl (100%) rename {reactos/include => include}/psdk/rpc.h (100%) rename {reactos/include => include}/psdk/rpcasync.h (100%) rename {reactos/include => include}/psdk/rpcdce.h (100%) rename {reactos/include => include}/psdk/rpcdce2.h (100%) rename {reactos/include => include}/psdk/rpcdcep.h (100%) rename {reactos/include => include}/psdk/rpcndr.h (100%) rename {reactos/include => include}/psdk/rpcnsi.h (100%) rename {reactos/include => include}/psdk/rpcnsip.h (100%) rename {reactos/include => include}/psdk/rpcnterr.h (100%) rename {reactos/include => include}/psdk/rpcproxy.h (100%) rename {reactos/include => include}/psdk/schannel.h (100%) rename {reactos/include => include}/psdk/schemadef.h (100%) rename {reactos/include => include}/psdk/schnlsp.h (100%) rename {reactos/include => include}/psdk/scrnsave.h (100%) rename {reactos/include => include}/psdk/sddl.h (100%) rename {reactos/include => include}/psdk/sdkddkver.h (100%) rename {reactos/include => include}/psdk/secext.h (100%) rename {reactos/include => include}/psdk/security.h (100%) rename {reactos/include => include}/psdk/sensapi.h (100%) rename {reactos/include => include}/psdk/sensevts.idl (100%) rename {reactos/include => include}/psdk/servprov.idl (100%) rename {reactos/include => include}/psdk/setupapi.h (100%) rename {reactos/include => include}/psdk/sfc.h (100%) rename {reactos/include => include}/psdk/shellapi.h (100%) rename {reactos/include => include}/psdk/shldisp.idl (100%) rename {reactos/include => include}/psdk/shlguid.h (100%) rename {reactos/include => include}/psdk/shlobj.h (100%) rename {reactos/include => include}/psdk/shlwapi.h (100%) rename {reactos/include => include}/psdk/shobjidl.idl (100%) rename {reactos/include => include}/psdk/shtypes.idl (100%) rename {reactos/include => include}/psdk/snmp.h (100%) rename {reactos/include => include}/psdk/softpub.h (100%) rename {reactos/include => include}/psdk/sql.h (100%) rename {reactos/include => include}/psdk/sqlext.h (100%) rename {reactos/include => include}/psdk/sqltypes.h (100%) rename {reactos/include => include}/psdk/sqlucode.h (100%) rename {reactos/include => include}/psdk/srrestoreptapi.h (100%) rename {reactos/include => include}/psdk/sspi.h (100%) rename {reactos/include => include}/psdk/stdole2.idl (100%) rename {reactos/include => include}/psdk/strmif.idl (100%) rename {reactos/include => include}/psdk/subauth.h (100%) rename {reactos/include => include}/psdk/svcguid.h (100%) rename {reactos/include => include}/psdk/svrapi.h (100%) rename {reactos/include => include}/psdk/tapi.h (100%) rename {reactos/include => include}/psdk/tchar.h (100%) rename {reactos/include => include}/psdk/tcpioctl.h (100%) rename {reactos/include => include}/psdk/textserv.h (100%) rename {reactos/include => include}/psdk/tlhelp32.h (100%) rename {reactos/include => include}/psdk/tmschema.h (100%) rename {reactos/include => include}/psdk/tom.idl (100%) rename {reactos/include => include}/psdk/unknwn.idl (100%) rename {reactos/include => include}/psdk/urlhist.idl (100%) rename {reactos/include => include}/psdk/urlmon.idl (100%) rename {reactos/include => include}/psdk/userenv.h (100%) rename {reactos/include => include}/psdk/usp10.h (100%) rename {reactos/include => include}/psdk/uxtheme.h (100%) rename {reactos/include => include}/psdk/vfw.h (100%) rename {reactos/include => include}/psdk/vfwmsgs.h (100%) rename {reactos/include => include}/psdk/w32api.h (100%) rename {reactos/include => include}/psdk/wdbgexts.h (100%) rename {reactos/include => include}/psdk/winable.h (100%) rename {reactos/include => include}/psdk/winbase.h (100%) rename {reactos/include => include}/psdk/winber.h (100%) rename {reactos/include => include}/psdk/wincon.h (100%) rename {reactos/include => include}/psdk/wincred.h (100%) rename {reactos/include => include}/psdk/wincrypt.h (100%) rename {reactos/include => include}/psdk/windef.h (100%) rename {reactos/include => include}/psdk/windns.h (100%) rename {reactos/include => include}/psdk/windows.h (100%) rename {reactos/include => include}/psdk/windowsx.h (100%) rename {reactos/include => include}/psdk/winefs.h (100%) rename {reactos/include => include}/psdk/winerror.h (100%) rename {reactos/include => include}/psdk/winfax.h (100%) rename {reactos/include => include}/psdk/wingdi.h (100%) rename {reactos/include => include}/psdk/winhttp.h (100%) rename {reactos/include => include}/psdk/wininet.h (100%) rename {reactos/include => include}/psdk/winineti.h (100%) rename {reactos/include => include}/psdk/winioctl.h (100%) rename {reactos/include => include}/psdk/winldap.h (100%) rename {reactos/include => include}/psdk/winnetwk.h (100%) rename {reactos/include => include}/psdk/winnls.h (100%) rename {reactos/include => include}/psdk/winnls32.h (100%) rename {reactos/include => include}/psdk/winnt.h (100%) rename {reactos/include => include}/psdk/winperf.h (100%) rename {reactos/include => include}/psdk/winreg.h (100%) rename {reactos/include => include}/psdk/winres.h (100%) rename {reactos/include => include}/psdk/winresrc.h (100%) rename {reactos/include => include}/psdk/winscard.h (100%) rename {reactos/include => include}/psdk/winsmcrd.h (100%) rename {reactos/include => include}/psdk/winsnmp.h (100%) rename {reactos/include => include}/psdk/winsock.h (100%) rename {reactos/include => include}/psdk/winsock2.h (100%) rename {reactos/include => include}/psdk/winspool.h (100%) rename {reactos/include => include}/psdk/winsvc.h (100%) rename {reactos/include => include}/psdk/winternl.h (100%) rename {reactos/include => include}/psdk/wintrust.h (100%) rename {reactos/include => include}/psdk/winuser.h (100%) rename {reactos/include => include}/psdk/winver.h (100%) rename {reactos/include => include}/psdk/winwlx.h (100%) rename {reactos/include => include}/psdk/wmistr.h (100%) rename {reactos/include => include}/psdk/ws2spi.h (100%) rename {reactos/include => include}/psdk/ws2tcpip.h (100%) rename {reactos/include => include}/psdk/wsahelp.h (100%) rename {reactos/include => include}/psdk/wsipx.h (100%) rename {reactos/include => include}/psdk/wsnetbs.h (100%) rename {reactos/include => include}/psdk/wtsapi32.h (100%) rename {reactos/include => include}/psdk/wtypes.idl (100%) rename {reactos/include => include}/psdk/xcmc.h (100%) rename {reactos/include => include}/psdk/xmldom.idl (100%) rename {reactos/include => include}/psdk/xmldomdid.h (100%) rename {reactos/include => include}/psdk/xmldso.idl (100%) rename {reactos/include => include}/psdk/xmldsodid.h (100%) rename {reactos/include => include}/psdk/xprtdefs.h (100%) rename {reactos/include => include}/psdk/zmouse.h (100%) rename {reactos/include => include}/reactos/arc/arc.h (100%) rename {reactos/include => include}/reactos/arc/setupblk.h (100%) rename {reactos/include => include}/reactos/arm/armddk.h (100%) rename {reactos/include => include}/reactos/arm/peripherals/pl011.h (100%) rename {reactos/include => include}/reactos/arm/peripherals/pl190.h (100%) rename {reactos/include => include}/reactos/arm/peripherals/sp804.h (100%) rename {reactos/include => include}/reactos/ccros.h (100%) rename {reactos/include => include}/reactos/chew/chew.h (100%) rename {reactos/include => include}/reactos/config.h (100%) rename {reactos/include => include}/reactos/debug.h (100%) rename {reactos/include => include}/reactos/dll/desk/deskcplx.h (100%) rename {reactos/include => include}/reactos/dll/devmgr/devmgr.h (100%) rename {reactos/include => include}/reactos/dll/directx/d3d8thk.h (100%) rename {reactos/include => include}/reactos/drivers/afd/shared.h (100%) rename {reactos/include => include}/reactos/drivers/blue/ntddblue.h (100%) rename {reactos/include => include}/reactos/drivers/bootvid/bootvid.h (100%) rename {reactos/include => include}/reactos/drivers/directx/directxint.h (100%) rename {reactos/include => include}/reactos/drivers/directx/dxeng.h (100%) rename {reactos/include => include}/reactos/drivers/directx/dxg.h (100%) rename {reactos/include => include}/reactos/drivers/diskdump/diskdump.h (100%) rename {reactos/include => include}/reactos/drivers/ntddrdsk.h (100%) rename {reactos/include => include}/reactos/elf/common.h (100%) rename {reactos/include => include}/reactos/elf/elf-i386.h (100%) rename {reactos/include => include}/reactos/elf/elf-powerpc.h (100%) rename {reactos/include => include}/reactos/elf/elf.h (100%) rename {reactos/include => include}/reactos/elf/elf32.h (100%) rename {reactos/include => include}/reactos/elf/elf64.h (100%) rename {reactos/include => include}/reactos/elf/generic.h (100%) rename {reactos/include => include}/reactos/elf/machine.h (100%) rename {reactos/include => include}/reactos/elf/reactos.h (100%) rename {reactos/include => include}/reactos/exeformat.h (100%) rename {reactos/include => include}/reactos/helper.h (100%) rename {reactos/include => include}/reactos/idl/eventlogrpc.acf (100%) rename {reactos/include => include}/reactos/idl/eventlogrpc.idl (100%) rename {reactos/include => include}/reactos/idl/idl.rbuild (100%) rename {reactos/include => include}/reactos/idl/lsa.acf (100%) rename {reactos/include => include}/reactos/idl/lsa.idl (100%) rename {reactos/include => include}/reactos/idl/ms-dtyp.idl (100%) rename {reactos/include => include}/reactos/idl/pnp.acf (100%) rename {reactos/include => include}/reactos/idl/pnp.idl (100%) rename {reactos/include => include}/reactos/idl/svcctl.acf (100%) rename {reactos/include => include}/reactos/idl/svcctl.idl (100%) rename {reactos/include => include}/reactos/kddll.h (100%) rename {reactos/include => include}/reactos/libs/audiosrv/audiosrv.h (100%) rename {reactos/include => include}/reactos/libs/dhcp/rosdhcp_public.h (100%) rename {reactos/include => include}/reactos/libs/epsapi/epsapi.h (100%) rename {reactos/include => include}/reactos/libs/expat/expat.h (100%) rename {reactos/include => include}/reactos/libs/expat/expat_external.h (100%) rename {reactos/include => include}/reactos/libs/fmifs/fmifs.h (100%) rename {reactos/include => include}/reactos/libs/fslib/ext2lib.h (100%) rename {reactos/include => include}/reactos/libs/fslib/vfatlib.h (100%) rename {reactos/include => include}/reactos/libs/fslib/vfatxlib.h (100%) rename {reactos/include => include}/reactos/libs/libxml/DOCBparser.h (100%) rename {reactos/include => include}/reactos/libs/libxml/HTMLparser.h (100%) rename {reactos/include => include}/reactos/libs/libxml/HTMLtree.h (100%) rename {reactos/include => include}/reactos/libs/libxml/Makefile.am (100%) rename {reactos/include => include}/reactos/libs/libxml/Makefile.in (100%) rename {reactos/include => include}/reactos/libs/libxml/SAX.h (100%) rename {reactos/include => include}/reactos/libs/libxml/SAX2.h (100%) rename {reactos/include => include}/reactos/libs/libxml/c14n.h (100%) rename {reactos/include => include}/reactos/libs/libxml/catalog.h (100%) rename {reactos/include => include}/reactos/libs/libxml/chvalid.h (100%) rename {reactos/include => include}/reactos/libs/libxml/debugXML.h (100%) rename {reactos/include => include}/reactos/libs/libxml/dict.h (100%) rename {reactos/include => include}/reactos/libs/libxml/encoding.h (100%) rename {reactos/include => include}/reactos/libs/libxml/entities.h (100%) rename {reactos/include => include}/reactos/libs/libxml/globals.h (100%) rename {reactos/include => include}/reactos/libs/libxml/hash.h (100%) rename {reactos/include => include}/reactos/libs/libxml/list.h (100%) rename {reactos/include => include}/reactos/libs/libxml/nanoftp.h (100%) rename {reactos/include => include}/reactos/libs/libxml/nanohttp.h (100%) rename {reactos/include => include}/reactos/libs/libxml/parser.h (100%) rename {reactos/include => include}/reactos/libs/libxml/parserInternals.h (100%) rename {reactos/include => include}/reactos/libs/libxml/pattern.h (100%) rename {reactos/include => include}/reactos/libs/libxml/relaxng.h (100%) rename {reactos/include => include}/reactos/libs/libxml/schemasInternals.h (100%) rename {reactos/include => include}/reactos/libs/libxml/schematron.h (100%) rename {reactos/include => include}/reactos/libs/libxml/threads.h (100%) rename {reactos/include => include}/reactos/libs/libxml/tree.h (100%) rename {reactos/include => include}/reactos/libs/libxml/uri.h (100%) rename {reactos/include => include}/reactos/libs/libxml/valid.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xinclude.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xlink.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlIO.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlautomata.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlerror.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlexports.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlmemory.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlmodule.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlreader.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlregexp.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlsave.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlschemas.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlschemastypes.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlstring.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlunicode.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlversion.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlversion.h.in (100%) rename {reactos/include => include}/reactos/libs/libxml/xmlwriter.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xpath.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xpathInternals.h (100%) rename {reactos/include => include}/reactos/libs/libxml/xpointer.h (100%) rename {reactos/include => include}/reactos/libs/ppcmmu/mmu.h (100%) rename {reactos/include => include}/reactos/libs/ppcmmu/mmuutil.h (100%) rename {reactos/include => include}/reactos/libs/pseh/excpt.h (100%) rename {reactos/include => include}/reactos/libs/pseh/framebased.h (100%) rename {reactos/include => include}/reactos/libs/pseh/framebased/internal.h (100%) rename {reactos/include => include}/reactos/libs/pseh/pseh.h (100%) rename {reactos/include => include}/reactos/libs/samlib/samlib.h (100%) rename {reactos/include => include}/reactos/libs/syssetup/syssetup.h (100%) rename {reactos/include => include}/reactos/libs/umpnpmgr/sysguid.h (100%) rename {reactos/include => include}/reactos/mc/bugcodes.mc (100%) rename {reactos/include => include}/reactos/mc/errcodes.mc (100%) rename {reactos/include => include}/reactos/mc/mc.rbuild (100%) rename {reactos/include => include}/reactos/mc/ntstatus.mc (100%) rename {reactos/include => include}/reactos/msvctarget.h (100%) rename {reactos/include => include}/reactos/probe.h (100%) rename {reactos/include => include}/reactos/reactos.rbuild (100%) rename {reactos/include => include}/reactos/reactx.h (100%) rename {reactos/include => include}/reactos/rosldr.h (100%) rename {reactos/include => include}/reactos/rossym.h (100%) rename {reactos/include => include}/reactos/services/services.h (100%) rename {reactos/include => include}/reactos/subsys/csr/server.h (100%) rename {reactos/include => include}/reactos/subsys/csrss/csrss.h (100%) rename {reactos/include => include}/reactos/subsys/lsass/lsasrv.h (100%) rename {reactos/include => include}/reactos/subsys/lsass/lsass.h (100%) rename {reactos/include => include}/reactos/subsys/sm/api.h (100%) rename {reactos/include => include}/reactos/subsys/sm/helper.h (100%) rename {reactos/include => include}/reactos/subsys/sm/ns.h (100%) rename {reactos/include => include}/reactos/subsys/win/base.h (100%) rename {reactos/include => include}/reactos/subsys/win/windows.h (100%) rename {reactos/include => include}/reactos/version.h (100%) rename {reactos/include => include}/reactos/version.rc (100%) rename {reactos/include => include}/reactos/win32k/callback.h (100%) rename {reactos/include => include}/reactos/win32k/ntgdibad.h (100%) rename {reactos/include => include}/reactos/win32k/ntgdihdl.h (100%) rename {reactos/include => include}/reactos/win32k/ntgdityp.h (100%) rename {reactos/include => include}/reactos/win32k/ntuser.h (100%) rename {reactos/include => include}/reactos/win32k/ntusrtyp.h (100%) rename {reactos/include => include}/reactos/windbgkd.h (100%) rename {reactos/include => include}/reactos/wine/cfgmgr32.h (100%) rename {reactos/include => include}/reactos/wine/config.h (100%) rename {reactos/include => include}/reactos/wine/debug.h (100%) rename {reactos/include => include}/reactos/wine/dlgs.h (100%) rename {reactos/include => include}/reactos/wine/exception.h (100%) rename {reactos/include => include}/reactos/wine/guiddef.h (100%) rename {reactos/include => include}/reactos/wine/irot.idl (100%) rename {reactos/include => include}/reactos/wine/itss.idl (100%) rename {reactos/include => include}/reactos/wine/library.h (100%) rename {reactos/include => include}/reactos/wine/list.h (100%) rename {reactos/include => include}/reactos/wine/lmbrowsr.h (100%) rename {reactos/include => include}/reactos/wine/mmddk.h (100%) rename {reactos/include => include}/reactos/wine/mmreg.h (100%) rename {reactos/include => include}/reactos/wine/mmsystem.h (100%) rename {reactos/include => include}/reactos/wine/msacm.h (100%) rename {reactos/include => include}/reactos/wine/msacmdlg.h (100%) rename {reactos/include => include}/reactos/wine/msacmdrv.h (100%) rename {reactos/include => include}/reactos/wine/mscvpdb.h (100%) rename {reactos/include => include}/reactos/wine/msvcrt/fcntl.h (100%) rename {reactos/include => include}/reactos/wine/port.h (100%) rename {reactos/include => include}/reactos/wine/prsht.h (100%) rename {reactos/include => include}/reactos/wine/regex.h (100%) rename {reactos/include => include}/reactos/wine/rpcfc.h (100%) rename {reactos/include => include}/reactos/wine/rpcss_shared.h (100%) rename {reactos/include => include}/reactos/wine/test.h (100%) rename {reactos/include => include}/reactos/wine/unicode.h (100%) rename {reactos/include => include}/reactos/wine/winbase.h (100%) rename {reactos/include => include}/reactos/wine/winbase16.h (100%) rename {reactos/include => include}/reactos/wine/windef.h (100%) rename {reactos/include => include}/reactos/wine/windef16.h (100%) rename {reactos/include => include}/reactos/wine/wine_common_ver.rc (100%) rename {reactos/include => include}/reactos/wine/wined3d_caps.h (100%) rename {reactos/include => include}/reactos/wine/wined3d_gl.h (100%) rename {reactos/include => include}/reactos/wine/wined3d_interface.h (100%) rename {reactos/include => include}/reactos/wine/wined3d_types.h (100%) rename {reactos/include => include}/reactos/wine/wineheaders.rbuild (100%) rename {reactos/include => include}/reactos/wine/wingdi16.h (100%) rename {reactos/include => include}/reactos/wine/winnetwk.h (100%) rename {reactos/include => include}/reactos/wine/winnt.h (100%) rename {reactos/include => include}/reactos/wine/winsock16.h (100%) rename {reactos/include => include}/reactos/wine/winuser.h (100%) rename {reactos/include => include}/reactos/wine/winuser16.h (100%) rename {reactos/include => include}/reactos/wine/wownt32.h (100%) rename {reactos/include => include}/reactos/wine/wpp.h (100%) rename {reactos/include => include}/reactos/winlogon.h (100%) delete mode 100644 irc/ArchBlackmann/ArchBlackmann.cpp delete mode 100644 irc/ArchBlackmann/ArchBlackmann.dsp delete mode 100644 irc/ArchBlackmann/ArchBlackmann.dsw delete mode 100644 irc/ArchBlackmann/File.cpp delete mode 100644 irc/ArchBlackmann/File.h delete mode 100644 irc/ArchBlackmann/IRCClient.cpp delete mode 100644 irc/ArchBlackmann/IRCClient.h delete mode 100644 irc/ArchBlackmann/MD5.cpp delete mode 100644 irc/ArchBlackmann/MD5.h delete mode 100644 irc/ArchBlackmann/QueueT.h delete mode 100644 irc/ArchBlackmann/Reli.h delete mode 100644 irc/ArchBlackmann/ReliMT.cpp delete mode 100644 irc/ArchBlackmann/ReliMT.h delete mode 100644 irc/ArchBlackmann/SockUtils.cpp delete mode 100644 irc/ArchBlackmann/SockUtils.h delete mode 100644 irc/ArchBlackmann/SplitJoin.cpp delete mode 100644 irc/ArchBlackmann/SplitJoin.h delete mode 100644 irc/ArchBlackmann/ThreadPool.cpp delete mode 100644 irc/ArchBlackmann/ThreadPool.h delete mode 100644 irc/ArchBlackmann/auto_ptr.h delete mode 100644 irc/ArchBlackmann/auto_vector.h delete mode 100644 irc/ArchBlackmann/base64.cpp delete mode 100644 irc/ArchBlackmann/base64.h delete mode 100644 irc/ArchBlackmann/chomp.cpp delete mode 100644 irc/ArchBlackmann/chomp.h delete mode 100644 irc/ArchBlackmann/config.h delete mode 100644 irc/ArchBlackmann/cram_md5.cpp delete mode 100644 irc/ArchBlackmann/cram_md5.h delete mode 100644 irc/ArchBlackmann/curse.txt delete mode 100644 irc/ArchBlackmann/cursecop.txt delete mode 100644 irc/ArchBlackmann/dev.txt delete mode 100644 irc/ArchBlackmann/func.txt delete mode 100644 irc/ArchBlackmann/grovel.txt delete mode 100644 irc/ArchBlackmann/idle.txt delete mode 100644 irc/ArchBlackmann/irql.txt delete mode 100644 irc/ArchBlackmann/makefile delete mode 100644 irc/ArchBlackmann/module.txt delete mode 100644 irc/ArchBlackmann/nogrovel.txt delete mode 100644 irc/ArchBlackmann/panic.cpp delete mode 100644 irc/ArchBlackmann/panic.h delete mode 100644 irc/ArchBlackmann/period.txt delete mode 100644 irc/ArchBlackmann/readme.txt delete mode 100644 irc/ArchBlackmann/ssprintf.cpp delete mode 100644 irc/ArchBlackmann/ssprintf.h delete mode 100644 irc/ArchBlackmann/status.txt delete mode 100644 irc/ArchBlackmann/stru.txt delete mode 100644 irc/ArchBlackmann/tech.txt delete mode 100644 irc/ArchBlackmann/trim.cpp delete mode 100644 irc/ArchBlackmann/trim.h delete mode 100644 irc/ArchBlackmann/type.txt delete mode 100644 irc/ArchBlackmann/verify.h delete mode 100644 irc/TechBot/CHMLibrary/AssemblyInfo.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/BinaryReaderHelp.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMBtree.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMFile.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMIdxhdr.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMStrings.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMSystem.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMTocidx.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMTopics.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMUrlstr.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/CHMUrltable.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/DumpingInfo.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/FullTextEngine.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/HHCParser.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/HHCParser2.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/HHKParser.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/TopicEntry.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/UrlTableEntry.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMDecoding/enumerations.cs delete mode 100644 irc/TechBot/CHMLibrary/CHMLibrary.cmbx delete mode 100644 irc/TechBot/CHMLibrary/CHMLibrary.csproj delete mode 100644 irc/TechBot/CHMLibrary/CHMLibrary.prjx delete mode 100644 irc/TechBot/CHMLibrary/Category.cs delete mode 100644 irc/TechBot/CHMLibrary/ChmFileInfo.cs delete mode 100644 irc/TechBot/CHMLibrary/Default.build delete mode 100644 irc/TechBot/CHMLibrary/HtmlHelpSystem.cs delete mode 100644 irc/TechBot/CHMLibrary/HttpUtility.cs delete mode 100644 irc/TechBot/CHMLibrary/Index.cs delete mode 100644 irc/TechBot/CHMLibrary/IndexItem.cs delete mode 100644 irc/TechBot/CHMLibrary/IndexTopic.cs delete mode 100644 irc/TechBot/CHMLibrary/InformationType.cs delete mode 100644 irc/TechBot/CHMLibrary/Storage/CHMStream.cs delete mode 100644 irc/TechBot/CHMLibrary/TOCItem.cs delete mode 100644 irc/TechBot/CHMLibrary/TableOfContents.cs delete mode 100644 irc/TechBot/Compression/AssemblyInfo.cs delete mode 100644 irc/TechBot/Compression/Checksums/Adler32.cs delete mode 100644 irc/TechBot/Compression/Checksums/CRC32.cs delete mode 100644 irc/TechBot/Compression/Checksums/IChecksum.cs delete mode 100644 irc/TechBot/Compression/Checksums/StrangeCRC.cs delete mode 100644 irc/TechBot/Compression/Compression.cmbx delete mode 100644 irc/TechBot/Compression/Compression.csproj delete mode 100644 irc/TechBot/Compression/Compression.prjx delete mode 100644 irc/TechBot/Compression/Default.build delete mode 100644 irc/TechBot/Compression/Deflater.cs delete mode 100644 irc/TechBot/Compression/DeflaterConstants.cs delete mode 100644 irc/TechBot/Compression/DeflaterEngine.cs delete mode 100644 irc/TechBot/Compression/DeflaterHuffman.cs delete mode 100644 irc/TechBot/Compression/DeflaterPending.cs delete mode 100644 irc/TechBot/Compression/Inflater.cs delete mode 100644 irc/TechBot/Compression/InflaterDynHeader.cs delete mode 100644 irc/TechBot/Compression/InflaterHuffmanTree.cs delete mode 100644 irc/TechBot/Compression/PendingBuffer.cs delete mode 100644 irc/TechBot/Compression/Streams/DeflaterOutputStream.cs delete mode 100644 irc/TechBot/Compression/Streams/InflaterInputStream.cs delete mode 100644 irc/TechBot/Compression/Streams/OutputWindow.cs delete mode 100644 irc/TechBot/Compression/Streams/StreamManipulator.cs delete mode 100644 irc/TechBot/Compression/ZipException.cs delete mode 100644 irc/TechBot/Resources/hresult.xml delete mode 100644 irc/TechBot/Resources/ntstatus.xml delete mode 100644 irc/TechBot/Resources/winerror.xml delete mode 100644 irc/TechBot/Resources/wm.xml delete mode 100644 irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/HResultCommand.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/NtStatusCommand.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/Properties/AssemblyInfo.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/ReactOSBugUrl.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/SambaBugUrl.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/Settings.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/Settings.settings delete mode 100644 irc/TechBot/TechBot.Commands.Common/SvnCommand.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj delete mode 100644 irc/TechBot/TechBot.Commands.Common/WMCommand.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/WineBugUrl.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/WinerrorCommand.cs delete mode 100644 irc/TechBot/TechBot.Commands.Common/app.config delete mode 100644 irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs delete mode 100644 irc/TechBot/TechBot.Commands.MSDN/Properties/AssemblyInfo.cs delete mode 100644 irc/TechBot/TechBot.Commands.MSDN/Settings.Designer.cs delete mode 100644 irc/TechBot/TechBot.Commands.MSDN/Settings.settings delete mode 100644 irc/TechBot/TechBot.Commands.MSDN/TechBot.Commands.MSDN.csproj delete mode 100644 irc/TechBot/TechBot.Commands.MSDN/TechBot.Commands.MSDN.csproj.user delete mode 100644 irc/TechBot/TechBot.Commands.MSDN/app.config delete mode 100644 irc/TechBot/TechBot.Console/App.config delete mode 100644 irc/TechBot/TechBot.Console/AssemblyInfo.cs delete mode 100644 irc/TechBot/TechBot.Console/ConsoleTechBotService.cs delete mode 100644 irc/TechBot/TechBot.Console/Default.build delete mode 100644 irc/TechBot/TechBot.Console/Main.cs delete mode 100644 irc/TechBot/TechBot.Console/Properties/.gitignore delete mode 100644 irc/TechBot/TechBot.Console/Settings.Designer.cs delete mode 100644 irc/TechBot/TechBot.Console/Settings.settings delete mode 100644 irc/TechBot/TechBot.Console/TechBot.Console.cmbx delete mode 100644 irc/TechBot/TechBot.Console/TechBot.Console.csproj delete mode 100644 irc/TechBot/TechBot.Console/TechBot.Console.prjx delete mode 100644 irc/TechBot/TechBot.IRCLibrary/AssemblyInfo.cs delete mode 100644 irc/TechBot/TechBot.IRCLibrary/Default.build delete mode 100644 irc/TechBot/TechBot.IRCLibrary/IRC.cs delete mode 100644 irc/TechBot/TechBot.IRCLibrary/IrcChannel.cs delete mode 100644 irc/TechBot/TechBot.IRCLibrary/IrcClient.cs delete mode 100644 irc/TechBot/TechBot.IRCLibrary/IrcException.cs delete mode 100644 irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs delete mode 100644 irc/TechBot/TechBot.IRCLibrary/IrcUser.cs delete mode 100644 irc/TechBot/TechBot.IRCLibrary/Properties/.gitignore delete mode 100644 irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.cmbx delete mode 100644 irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.csproj delete mode 100644 irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.prjx delete mode 100644 irc/TechBot/TechBot.IRCLibrary/app.config delete mode 100644 irc/TechBot/TechBot.Library/Attributes/CommandAttribute.cs delete mode 100644 irc/TechBot/TechBot.Library/Attributes/CommandParameterAliasAttribute.cs delete mode 100644 irc/TechBot/TechBot.Library/Attributes/CommandParameterAttribute.cs delete mode 100644 irc/TechBot/TechBot.Library/Collections/CommandBuilderCollection.cs delete mode 100644 irc/TechBot/TechBot.Library/Commands/Base/Command.cs delete mode 100644 irc/TechBot/TechBot.Library/Commands/Base/XmlCommand.cs delete mode 100644 irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs delete mode 100644 irc/TechBot/TechBot.Library/Commands/HelpCommand.cs delete mode 100644 irc/TechBot/TechBot.Library/Factory/CommandBuilder.cs delete mode 100644 irc/TechBot/TechBot.Library/Factory/CommandFactory.cs delete mode 100644 irc/TechBot/TechBot.Library/MessageContext.cs delete mode 100644 irc/TechBot/TechBot.Library/NumberParser.cs delete mode 100644 irc/TechBot/TechBot.Library/Properties/.gitignore delete mode 100644 irc/TechBot/TechBot.Library/Properties/AssemblyInfo.cs delete mode 100644 irc/TechBot/TechBot.Library/ServiceOutput.cs delete mode 100644 irc/TechBot/TechBot.Library/Settings.Designer.cs delete mode 100644 irc/TechBot/TechBot.Library/Settings.cs delete mode 100644 irc/TechBot/TechBot.Library/Settings.settings delete mode 100644 irc/TechBot/TechBot.Library/TechBot.Library.csproj delete mode 100644 irc/TechBot/TechBot.Library/TechBotIrcService.cs delete mode 100644 irc/TechBot/TechBot.Library/TechBotService.cs delete mode 100644 irc/TechBot/TechBot.Library/app.config delete mode 100644 irc/TechBot/TechBot.sln delete mode 100644 irc/TechBot/TechBot/App.config delete mode 100644 irc/TechBot/TechBot/AssemblyInfo.cs delete mode 100644 irc/TechBot/TechBot/Default.build delete mode 100644 irc/TechBot/TechBot/ProjectInstaller.cs delete mode 100644 irc/TechBot/TechBot/Properties/.gitignore delete mode 100644 irc/TechBot/TechBot/ServiceThread.cs delete mode 100644 irc/TechBot/TechBot/Settings.Designer.cs delete mode 100644 irc/TechBot/TechBot/Settings.settings delete mode 100644 irc/TechBot/TechBot/TechBot.csproj delete mode 100644 irc/TechBot/TechBot/TechBot.prjx delete mode 100644 irc/TechBot/TechBot/TechBotService.cs rename {reactos/lib => lib}/3rdparty/3rdparty.rbuild (100%) rename {reactos/lib => lib}/3rdparty/adns/COPYING (100%) rename {reactos/lib => lib}/3rdparty/adns/GPL-vs-LGPL (100%) rename {reactos/lib => lib}/3rdparty/adns/INSTALL (100%) rename {reactos/lib => lib}/3rdparty/adns/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/adns/README (100%) rename {reactos/lib => lib}/3rdparty/adns/README.html (100%) rename {reactos/lib => lib}/3rdparty/adns/TODO (100%) rename {reactos/lib => lib}/3rdparty/adns/acconfig.h (100%) rename {reactos/lib => lib}/3rdparty/adns/aclocal.m4 (100%) rename {reactos/lib => lib}/3rdparty/adns/adns.rbuild (100%) rename {reactos/lib => lib}/3rdparty/adns/adns_win32/README.TXT (100%) rename {reactos/lib => lib}/3rdparty/adns/adns_win32/adns_unix_calls.c (100%) rename {reactos/lib => lib}/3rdparty/adns/adns_win32/adns_win32.h (100%) rename {reactos/lib => lib}/3rdparty/adns/adns_win32/getopt.c (100%) rename {reactos/lib => lib}/3rdparty/adns/adns_win32/getopt.h (100%) rename {reactos/lib => lib}/3rdparty/adns/adns_win32/timercmp.h (100%) rename {reactos/lib => lib}/3rdparty/adns/changelog (100%) rename {reactos/lib => lib}/3rdparty/adns/client/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/adns/client/adh-main.c (100%) rename {reactos/lib => lib}/3rdparty/adns/client/adh-opts.c (100%) rename {reactos/lib => lib}/3rdparty/adns/client/adh-query.c (100%) rename {reactos/lib => lib}/3rdparty/adns/client/adnshost.h (100%) rename {reactos/lib => lib}/3rdparty/adns/client/adnslogres.c (100%) rename {reactos/lib => lib}/3rdparty/adns/client/adnsresfilter.c (100%) rename {reactos/lib => lib}/3rdparty/adns/client/adnstest.c (100%) rename {reactos/lib => lib}/3rdparty/adns/client/client.h (100%) rename {reactos/lib => lib}/3rdparty/adns/client/fanftest.c (100%) rename {reactos/lib => lib}/3rdparty/adns/configure.in (100%) rename {reactos/lib => lib}/3rdparty/adns/dynamic/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/adns/install-sh (100%) rename {reactos/lib => lib}/3rdparty/adns/settings.make.in (100%) rename {reactos/lib => lib}/3rdparty/adns/src/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/adns/src/adns.h (100%) rename {reactos/lib => lib}/3rdparty/adns/src/adns.make (100%) rename {reactos/lib => lib}/3rdparty/adns/src/check.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/config.h (100%) rename {reactos/lib => lib}/3rdparty/adns/src/config.h.in (100%) rename {reactos/lib => lib}/3rdparty/adns/src/dlist.h (100%) rename {reactos/lib => lib}/3rdparty/adns/src/event.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/general.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/internal.h (100%) rename {reactos/lib => lib}/3rdparty/adns/src/parse.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/poll.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/query.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/reply.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/setup.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/transmit.c (100%) rename {reactos/lib => lib}/3rdparty/adns/src/tvarith.h (100%) rename {reactos/lib => lib}/3rdparty/adns/src/types.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/CHANGES (100%) rename {reactos/lib => lib}/3rdparty/bzip2/LICENSE (100%) rename {reactos/lib => lib}/3rdparty/bzip2/Makefile-libbz2_so (100%) rename {reactos/lib => lib}/3rdparty/bzip2/README (100%) rename {reactos/lib => lib}/3rdparty/bzip2/README.COMPILATION.PROBLEMS (100%) rename {reactos/lib => lib}/3rdparty/bzip2/README.reactos (100%) rename {reactos/lib => lib}/3rdparty/bzip2/Y2K_INFO (100%) rename {reactos/lib => lib}/3rdparty/bzip2/blocksort.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzip2.1 (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzip2.1.preformatted (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzip2.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzip2.rbuild (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzip2.txt (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzip2recover.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzlib.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzlib.h (100%) rename {reactos/lib => lib}/3rdparty/bzip2/bzlib_private.h (100%) rename {reactos/lib => lib}/3rdparty/bzip2/compress.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/crctable.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/decompress.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/dllmain.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/dlltest.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/dlltest.dsp (100%) rename {reactos/lib => lib}/3rdparty/bzip2/huffman.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/libbz2.def (100%) rename {reactos/lib => lib}/3rdparty/bzip2/libbz2.dsp (100%) rename {reactos/lib => lib}/3rdparty/bzip2/makefile.msc (100%) rename {reactos/lib => lib}/3rdparty/bzip2/manual.ps (100%) rename {reactos/lib => lib}/3rdparty/bzip2/manual.texi (100%) rename {reactos/lib => lib}/3rdparty/bzip2/manual_1.html (100%) rename {reactos/lib => lib}/3rdparty/bzip2/manual_2.html (100%) rename {reactos/lib => lib}/3rdparty/bzip2/manual_3.html (100%) rename {reactos/lib => lib}/3rdparty/bzip2/manual_4.html (100%) rename {reactos/lib => lib}/3rdparty/bzip2/manual_toc.html (100%) rename {reactos/lib => lib}/3rdparty/bzip2/randtable.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/sample1.ref (100%) rename {reactos/lib => lib}/3rdparty/bzip2/sample2.ref (100%) rename {reactos/lib => lib}/3rdparty/bzip2/sample3.ref (100%) rename {reactos/lib => lib}/3rdparty/bzip2/spewG.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/unbzip2.def (100%) rename {reactos/lib => lib}/3rdparty/bzip2/unzcrash.c (100%) rename {reactos/lib => lib}/3rdparty/bzip2/words0 (100%) rename {reactos/lib => lib}/3rdparty/bzip2/words1 (100%) rename {reactos/lib => lib}/3rdparty/bzip2/words2 (100%) rename {reactos/lib => lib}/3rdparty/bzip2/words3 (100%) rename {reactos/lib => lib}/3rdparty/expat/COPYING (100%) rename {reactos/lib => lib}/3rdparty/expat/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/expat/README (100%) rename {reactos/lib => lib}/3rdparty/expat/expat.dsw (100%) rename {reactos/lib => lib}/3rdparty/expat/expat.rbuild (100%) rename {reactos/lib => lib}/3rdparty/expat/expat.spec (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/Makefile.MPW (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/ascii.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/asciitab.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/expat.dsp (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/expat_config.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/expat_static.dsp (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/expatw.dsp (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/expatw_static.dsp (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/iasciitab.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/internal.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/latin1tab.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/libexpat.def (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/libexpatw.def (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/macconfig.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/nametab.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/utf8tab.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/winconfig.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/xmlparse.c (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/xmlrole.c (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/xmlrole.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/xmltok.c (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/xmltok.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/xmltok_impl.c (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/xmltok_impl.h (100%) rename {reactos/lib => lib}/3rdparty/expat/lib/xmltok_ns.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/as_is/os390/unpax-icu.sh (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/as_is/os400/convertConfigure.sed (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/as_is/os400/unpax-icu.sh (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/.cvsignore (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/README.Debian.libicu-dev (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/changelog (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/control (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/copyright (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/icu-doc.doc-base (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/icu-doc.install (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/icu.conffiles.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/icu.postinst.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/icu.prerm.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/libicu.postinst (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/libicu.prerm.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/postinst.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/prerm.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/rules (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/debian/watch.not-yet (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/license.html (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/packaging/PACKAGES (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/packaging/README (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/packaging/debian/README (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/packaging/rpm/icu.spec (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/readme.html (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/Doxyfile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/aclocal.m4 (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/allinone/allinone.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/bmpset.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/bmpset.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/brkeng.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/brkeng.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/brkiter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/caniter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/chariter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/charstr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/cmemory.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/cmemory.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/common.rc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/common.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/cpputils.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/cstring.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/cstring.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/cwchar.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/cwchar.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/dictbe.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/dictbe.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/hash.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/icucfg.h.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/localsvc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/locbased.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/locbased.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/locid.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/locmap.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/locmap.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/locutil.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/locutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/msvcres.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/mutex.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/normlzr.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/parsepos.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/propname.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/propname.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/punycode.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/punycode.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/putil.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/putilimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbi.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbicst.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbidata.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbidata.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbinode.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbinode.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbirb.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbirb.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbirpt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbirpt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbiscan.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbiscan.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbisetb.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbisetb.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbistbl.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbitblb.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/rbbitblb.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/resbund.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/resbund_cnv.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ruleiter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ruleiter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/schriter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/serv.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/serv.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/servlk.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/servlkf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/servloc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/servls.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/servnotf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/servnotf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/servrbf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/servslkf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/sprpimpl.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/triedict.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/triedict.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uarrsort.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uarrsort.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uassert.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubidi.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubidi_props.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubidi_props.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubidi_props_data.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubidiimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubidiln.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubidiwrt.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubrk.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ubrkimpl.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucase.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucase.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucase_props_data.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucasemap.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucat.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uchar.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uchar_props_data.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uchriter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucln.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucln_cmn.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucln_cmn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucmndata.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucmndata.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv2022.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_bld.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_bld.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_cb.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_cnv.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_cnv.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_err.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_ext.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_ext.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_imp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_io.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_io.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_lmb.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_set.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_u16.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_u32.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_u7.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnv_u8.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnvbocu.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnvdisp.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnvhz.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnvisci.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnvlat1.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnvmbcs.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnvmbcs.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucnvscsu.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucol_swp.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ucol_swp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/udata.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/udatamem.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/udatamem.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/udataswp.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/udataswp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uenum.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uenumimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uhash.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uhash.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uhash_us.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uidna.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uinit.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uinvchar.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uinvchar.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uiter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uloc.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ulocimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/umapfile.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/umapfile.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/umath.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/umutex.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/umutex.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unames.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/brkiter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/caniter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/chariter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/dbbi.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/docmain.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/locid.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/normlzr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/parseerr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/parsepos.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/platform.h.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ppalmos.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/putil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/pwin32.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/rbbi.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/rep.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/resbund.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/schriter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/strenum.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/symtable.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ubidi.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ubrk.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ucasemap.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ucat.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uchar.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uchriter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uclean.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ucnv.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ucnv_cb.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ucnv_err.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uconfig.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/udata.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/udeprctd.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/udraft.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uenum.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uidna.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uintrnal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uiter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uloc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/umachine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/umisc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/unifilt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/unifunct.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/unimatch.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uniset.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/unistr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/unorm.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uobject.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uobslete.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/urename.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/urep.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ures.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uscript.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uset.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/usetiter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ushape.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/usprep.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/ustring.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/usystem.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/utext.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/utf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/utf16.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/utf32.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/utf8.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/utf_old.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/utrace.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/utypes.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unicode/uversion.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unifilt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unifunct.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uniset.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uniset_props.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unisetspan.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unisetspan.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unistr.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unistr_case.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unistr_cnv.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unistr_props.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unorm.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unorm_it.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unorm_it.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unorm_props_data.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unormcmp.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/unormimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uobject.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uprops.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uprops.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ures_cnv.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uresbund.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uresdata.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uresdata.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uresimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/usc_impl.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/usc_impl.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uscript.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uset.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uset_imp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uset_props.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/usetiter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ushape.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/usprep.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustack.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustr_cnv.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustr_cnv.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustr_imp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustr_wcs.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustrcase.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustrenum.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustrenum.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustrfmt.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustrfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustring.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/ustrtrns.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/utext.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/utf_impl.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/util.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/util.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/util_props.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/utrace.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/utracimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/utrie.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/utrie.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/utypes.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uvector.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uvector.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uvectr32.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/uvectr32.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/wintz.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/common/wintz.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config.guess (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config.sub (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/Makefile.inc.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/icu-config-bottom (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/icu-config-top (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/icu-config.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/make2sh.sed (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-aix-gcc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-aix-va (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-cc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-gcc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-alpha-osf (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-beos (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-bsd-gcc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-cygwin (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-cygwin-msvc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-darwin (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-hpux-acc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-hpux-gcc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-irix (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-linux (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-linux-va (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-mingw (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-mpras (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-os390 (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-os400 (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-qnx (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-solaris (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-solaris-gcc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/mh-unknown (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/config/test-icu-config.sh (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/configure (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/configure.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/brkfiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/char.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/en.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/en_US.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/en_US_POSIX.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/ja.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/line.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/sent.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/thaidict.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/title.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/word.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/word_POSIX.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/brkitr/word_ja.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/build.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/cldr-icu-readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_AE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_BH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_DZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_EG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_IQ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_JO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_KW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_LB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_LY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_MA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_OM.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_QA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_SA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_SD.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_SY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_TN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ar_YE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/as.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/as_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/be.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/be_BY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/bg.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/bg_BG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/bn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ca.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ca_ES.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/colfiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/cs.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/cs_CZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/cy.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/da.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/da_DK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/de.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/de_.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/de_AT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/de_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/de_CH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/de_DE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/de_LU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/de__PHONEBOOK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/el.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/el_GR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_AU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_BW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_CA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_GB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_HK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_IE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_MT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_NZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_PH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_SG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_US.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_US_POSIX.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_VI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_ZA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/en_ZW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/eo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_AR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_BO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_CL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_CO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_CR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_DO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_EC.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_ES.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_GT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_HN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_MX.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_NI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_PA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_PE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_PR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_PY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_SV.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_US.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_UY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es_VE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/es__TRADITIONAL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/et.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/et_EE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fa.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fa_AF.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fa_IR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fi_FI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fo_FO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fr_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fr_CA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fr_CH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fr_FR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/fr_LU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ga.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ga_IE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/gu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/gu_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/haw.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/he.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/he_IL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/hi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/hi_.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/hi_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/hi__DIRECT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/hr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/hr_HR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/hu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/hu_HU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/id.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/id_ID.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/in.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/in_ID.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/is.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/is_IS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/it.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/it_CH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/it_IT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/iw.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/iw_IL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ja.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ja_JP.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/kk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/kk_KZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/kl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/kl_GL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/km.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/kn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/kn_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ko.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ko_KR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/kok.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/lt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/lt_LT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/lv.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/lv_LV.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/mk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/mk_MK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ml.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/mr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/mr_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ms.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ms_BN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ms_MY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/mt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/mt_MT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/nb.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/nb_NO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/nl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/nl_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/nl_NL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/nn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/nn_NO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/no.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/no_NO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/om.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/om_ET.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/om_KE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/or.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/pa.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/pa_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/pl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/pl_PL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ps.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ps_AF.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/pt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/pt_BR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/pt_PT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ro.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ro_RO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ru.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ru_RU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ru_UA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sh.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sh_BA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sh_YU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sk_SK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sl_SI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sq.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sq_AL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_BA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_BA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_ME.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_RS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_Latn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_BA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_ME.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_RS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_ME.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sr_RS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sv.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sv_FI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/sv_SE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ta.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/ta_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/te.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/te_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/th.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/th_TH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/tr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/tr_TR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/uk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/uk_UA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/vi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/vi_VN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_CN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_HK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_Hans.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_CN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_SG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_Hant.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_HK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_MO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_TW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_MO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_SG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_TW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh_TW_STROKE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/coll/zh__PINYIN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/icu-config.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/icupkg.inc.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/af.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/af_NA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/af_ZA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/am.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/am_ET.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_AE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_BH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_DZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_EG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_IQ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_JO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_KW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_LB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_LY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_MA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_OM.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_QA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_SA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_SD.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_SY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_TN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ar_YE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/as.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/as_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/az.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/az_AZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl_AZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/az_Latn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/az_Latn_AZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/be.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/be_BY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/bg.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/bg_BG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/bn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/bn_BD.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/bn_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ca.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ca_ES.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/cs.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/cs_CZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/cy.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/cy_GB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/da.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/da_DK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/de.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/de_AT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/de_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/de_CH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/de_DE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/de_LI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/de_LU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/el.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/el_CY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/el_GR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_AU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_BW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_BZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_CA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_GB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_HK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_IE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_JM.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_MH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_MT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_NA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_NZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_PH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_PK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_RH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_SG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_TT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_US.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_US_POSIX.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_VI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_ZA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/en_ZW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/eo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_AR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_BO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_CL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_CO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_CR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_DO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_EC.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_ES.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_GT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_HN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_MX.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_NI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_PA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_PE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_PR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_PY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_SV.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_US.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_UY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/es_VE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/et.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/et_EE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/eu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/eu_ES.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fa.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fa_AF.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fa_IR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fi_FI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fo_FO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fr_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fr_CA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fr_CH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fr_FR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fr_LU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/fr_MC.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ga.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ga_IE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/gl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/gl_ES.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/gu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/gu_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/gv.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/gv_GB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/haw.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/haw_US.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/he.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/he_IL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hi_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hr_HR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hu_HU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hy.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hy_AM.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/hy_AM_REVISED.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/id.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/id_ID.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/in.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/in_ID.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/is.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/is_IS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/it.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/it_CH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/it_IT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/iw.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/iw_IL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ja.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ja_JP.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ja_JP_TRADITIONAL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ka.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ka_GE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kk_KZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kl_GL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/km.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/km_KH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kn_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ko.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ko_KR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kok.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kok_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kw.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/kw_GB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/lt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/lt_LT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/lv.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/lv_LV.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/mk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/mk_MK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ml.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ml_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/mr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/mr_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ms.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ms_BN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ms_MY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/mt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/mt_MT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/nb.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/nb_NO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/nl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/nl_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/nl_NL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/nn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/nn_NO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/no.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/no_NO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/no_NO_NY.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/om.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/om_ET.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/om_KE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/or.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/or_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pa.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pa_Guru.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pa_Guru_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pa_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pl_PL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ps.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ps_AF.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pt_BR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/pt_PT.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/resfiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ro.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ro_RO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ru.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ru_RU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ru_UA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sh.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sh_BA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sh_CS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sh_YU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sk_SK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sl_SI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/so.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/so_DJ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/so_ET.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/so_KE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/so_SO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sq.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sq_AL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_BA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_CS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_BA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_CS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_ME.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_RS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_YU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Latn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_BA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_CS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_ME.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_RS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_YU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_ME.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_RS.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sr_YU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sv.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sv_FI.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sv_SE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sw.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sw_KE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/sw_TZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ta.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ta_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/te.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/te_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/th.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/th_TH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/th_TH_TRADITIONAL.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ti.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ti_ER.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ti_ET.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/tr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/tr_TR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uk_UA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ur.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ur_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/ur_PK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz_AF.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz_Arab.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz_Arab_AF.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl_UZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz_Latn.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz_Latn_UZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/uz_UZ.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/vi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/vi_VN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_CN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_HK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_Hans.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_CN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_SG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_Hant.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_HK.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_MO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_TW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_MO.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_SG.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/locales/zh_TW.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/makedata.mak (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/makedata.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/cns-11643-1992.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/convrtrs.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ebcdic-xml-us.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/gb18030.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1006_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1025_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1026_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1047_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1051_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1089_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1097_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1098_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1112_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1122_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1123_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1124_P100-1996.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1125_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1129_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1130_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1131_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1132_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1133_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1137_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1140_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1141_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1142_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1143_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1144_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1145_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1146_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1147_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1148_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1149_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1153_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1154_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1155_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1156_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1157_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1158_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1160_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1162_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1164_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1168_P100-2002.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1250_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1251_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1252_P100-2000.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1253_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1254_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1255_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1256_P110-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1257_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1258_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-12712_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1276_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P110-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P11B-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1364_P110-2007.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1371_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1373_P100-2002.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1375_P100-2007.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1383_P110-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1386_P100-2001.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1388_P103-2001.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1390_P110-2003.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-1399_P110-2003.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-16684_P110-2003.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-16804_X110-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-273_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-277_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-278_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-280_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-284_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-285_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-290_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-297_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P120-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P12A_P12A-2004_U2.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-37_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-420_X120-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-424_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-437_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-4517_P100-2005.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-4899_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-4909_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-4971_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-500_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5012_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5123_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5346_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5347_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5348_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5349_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5350_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5351_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5352_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5353_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5354_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5471_P100-2006.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-5478_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-720_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-737_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-775_P100-1996.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-803_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-813_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-838_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-8482_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-850_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-851_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-852_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-855_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-856_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-857_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-858_P100-1997.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-860_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-861_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-862_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-863_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-864_X110-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-865_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-866_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-867_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-868_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-869_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-870_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-871_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-874_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-875_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-878_P100-1996.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-897_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-9005_X110-2007.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-901_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-902_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-9067_X100-2005.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-912_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-913_P100-2000.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-914_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-915_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-916_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-918_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-920_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-921_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-922_P100-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-923_P100-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-930_P120-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-933_P110-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-935_P110-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-937_P110-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-939_P120-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-942_P12A-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P130-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P15A-2003.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-9447_P100-2002.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-9448_X100-2005.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-9449_P100-2002.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P110-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P11A-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-950_P110-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-954_P101-2007.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-964_P110-1999.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-970_P110_P110-2006_U2.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ibm-971_P100-1995.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/icu-internal-25546.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_10-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_11-2001.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_14-1998.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/iso-ir-165.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/jisx-208.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/jisx-212.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/lmb-excp.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/macos-0_2-10.2.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/macos-29-10.2.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/macos-35-10.2.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/macos-6_2-10.4.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/macos-7_3-10.2.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ucmcore.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ucmebcdic.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/ucmfiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/windows-874-2000.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/windows-936-2000.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/windows-949-2000.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/mappings/windows-950-2000.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/misc/NamePrepProfile.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/misc/icudata.rc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/misc/metazoneInfo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/misc/miscfiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/misc/supplementalData.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/misc/zoneinfo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/da.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/de.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/el.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/en.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/en_GB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/eo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/es.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/fa.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/fa_AF.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/fr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/fr_BE.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/fr_CH.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/ga.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/he.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/it.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/ja.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/mt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/nl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/pl.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/pt.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/rbnffiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/ru.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/sv.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/th.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/rbnf/uk.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Any_Accents.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Any_Publishing.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Arabic_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Bengali_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Cyrillic_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Fullwidth_Halfwidth.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Georgian_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin_UNGEGN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Han_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Han_Spacedhan.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Hangul_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Hebrew_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Katakana.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Jamo_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Kannada_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Armenian.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_ConjoiningJamo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Hangul.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Jamo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Katakana.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_NumericPinyin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Latin_Thai.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Oriya_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Pinyin_NumericPinyin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Simplified_Traditional.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Syriac_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Tamil_Telugu.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Bengali.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Devanagari.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gujarati.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gurmukhi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_InterIndic.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Kannada.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Malayalam.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Oriya.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Telugu_Tamil.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Thaana_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/ThaiLogical_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Thai_Latin.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiLogical.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiSemi.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/el.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/en.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/translit/trnsfiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/BidiMirroring.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/Blocks.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/CaseFolding.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/DerivedAge.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/DerivedBidiClass.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/DerivedCoreProperties.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningGroup.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningType.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/DerivedNormalizationProps.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/DerivedNumericValues.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/EastAsianWidth.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/FractionalUCA.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/GraphemeBreakProperty.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/LineBreak.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/NormalizationCorrections.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/NormalizationTest.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/PropList.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/PropertyAliases.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/PropertyValueAliases.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/Scripts.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/SentenceBreakProperty.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/SpecialCasing.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/UCARules.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/UnicodeData.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/WordBreakProperty.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/changes.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/unidata/ucdterms.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/brkitr/en.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US_POSIX.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/brkitr/ja.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/brkitr/root.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ar.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/as.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/be.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/bg.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/bn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ca.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/cs.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/cy.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/da.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/de.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/dz.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/el.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/en.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/en_BE.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/eo.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/es.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/et.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/fa.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/fa_AF.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/fi.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/fo.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/fr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/gu.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/haw.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/he.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/hi.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/hr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/hu.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/is.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/it.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ja.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/kk.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/kl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/km.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/kn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ko.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/kok.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/lt.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/lv.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/mk.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ml.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/mr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/mt.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/nb.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/nn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/om.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/or.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/pa.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/pl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ps.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ro.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/root.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ru.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/sk.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/sl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/sq.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/sr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/sr_Latn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/sv.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/ta.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/te.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/th.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/tr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/uk.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/vi.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/zh.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/zh_HK.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/zh_Hant.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/zh_MO.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW_STROKE.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/aa.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/af.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/am.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ar.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/as.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/az.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/az_AZ.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/az_Cyrl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/az_Latn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/be.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/bg.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/bn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ca.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/cs.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/cy.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/da.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/de.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/el.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/en.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/en_US_POSIX.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/eo.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/es.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/et.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/eu.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/fa.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/fi.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/fo.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/fr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ga.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/gl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/gu.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/gv.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/haw.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/he.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/hi.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/hr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/hu.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/hy.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/id.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ii.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/is.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/it.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/iw.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ja.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ka.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/kk.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/kl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/km.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/kn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ko.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/kok.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/kw.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/lt.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/lv.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/mk.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ml.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/mr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ms.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/mt.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/my.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/nb.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/nl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/nn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/no.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/nr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/om.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/or.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/pa.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/pa_Guru.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/pl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ps.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/pt.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ro.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/root.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ru.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sh.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sk.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/so.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sq.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sr_Cyrl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sr_Latn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sv.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/sw.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ta.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/te.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/th.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ti.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/tl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/to.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/tr.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/uk.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ur.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/ur_IN.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/uz.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/uz_Arab.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/uz_Cyrl.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/uz_Latn.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/uz_UZ.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/vi.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/zh.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hans.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hant.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/scrptrun/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/scrptrun/readme.html (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsw (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/README (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/makedata.mak (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/pkgdata.inc.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/resfiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/resources/fr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/resources/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-2.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-3.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/danish-ISO-8859-1.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/eucJP.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/hangul-eucKR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/hania-eucKR.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/iso8859-1.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/koi8r.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/armenian.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/banviet.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/croat.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/danish.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/greek.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hangul.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hania.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/jap.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/korean.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/linji.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/many.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/maopoem.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/russian.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/simplechinese.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/turkish.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/uconv.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/uconv.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/uconv.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/unicode/uwmsg.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/extra/uconv/uwmsg.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/anytrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/anytrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/astro.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/astro.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/basictz.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/bocsu.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/bocsu.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/buddhcal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/buddhcal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/calendar.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/casetrn.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/casetrn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/chnsecal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/chnsecal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/choicfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/coleitr.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/coll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/cpdtrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/cpdtrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csdetect.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csdetect.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csmatch.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csmatch.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csr2022.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csr2022.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrecog.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrecog.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrmbcs.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrmbcs.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrsbcs.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrsbcs.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrucode.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrucode.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrutf8.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/csrutf8.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/curramt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/currfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/currfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/currunit.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/datefmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/dcfmtsym.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/decimfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/digitlst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/digitlst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/dtfmtsym.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/dtptngen.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/dtptngen_impl.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/dtrule.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/esctrn.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/esctrn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/fmtable.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/fmtable_cnv.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/format.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/funcrepl.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/funcrepl.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/gregocal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/gregoimp.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/gregoimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/hebrwcal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/hebrwcal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/i18n.rc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/i18n.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/indiancal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/indiancal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/inputext.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/inputext.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/islamcal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/islamcal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/japancal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/japancal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/measfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/measure.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/msgfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/name2uni.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/name2uni.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nfrlist.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nfrs.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nfrs.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nfrule.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nfrule.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nfsubs.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nfsubs.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nortrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nortrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nultrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/nultrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/numfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/olsontz.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/olsontz.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/persncal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/persncal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/quant.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/quant.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbnf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt_data.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt_data.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt_pars.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt_pars.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt_rule.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt_rule.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt_set.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbt_set.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rbtz.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/regexcmp.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/regexcmp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/regexcst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/regexcst.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/regexcst.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/regeximp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/regexst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/regexst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/reldtfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/reldtfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/rematch.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/remtrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/remtrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/repattrn.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/search.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/simpletz.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/smpdtfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/sortkey.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/strmatch.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/strmatch.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/strrepl.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/strrepl.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/stsearch.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/taiwncal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/taiwncal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/tblcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/timezone.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/titletrn.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/titletrn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/tolowtrn.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/tolowtrn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/toupptrn.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/toupptrn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/translit.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/transreg.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/transreg.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/tridpars.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/tridpars.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/tzrule.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/tztrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucln_in.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucln_in.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_bld.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_bld.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_elm.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_elm.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_imp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_res.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_sit.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_tok.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_tok.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucoleitr.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucsdet.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucurr.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ucurrimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/udat.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/udatpg.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/ulocdata.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/umsg.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/umsg_imp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unesctrn.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unesctrn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/uni2name.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/uni2name.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/basictz.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/calendar.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/choicfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/coleitr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/coll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/curramt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/currunit.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/datefmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/dcfmtsym.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/decimfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/dtfmtsym.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/dtptngen.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/dtrule.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/fieldpos.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/fmtable.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/format.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/gregocal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/measfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/measunit.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/measure.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/msgfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/numfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/rbnf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/rbtz.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/regex.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/search.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/simpletz.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/smpdtfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/sortkey.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/stsearch.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/tblcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/timezone.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/translit.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/tzrule.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/tztrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/ucal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/ucol.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/ucoleitr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/ucsdet.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/ucurr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/udat.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/udatpg.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/ulocdata.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/umsg.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/unirepl.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/unum.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/uregex.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/usearch.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/utmscale.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/utrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unicode/vtzone.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/unum.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/uregex.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/uregexc.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/usearch.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/usrchimp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/utmscale.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/utrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/vtzone.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/windtfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/windtfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/winnmfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/winnmfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/zonemeta.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/zonemeta.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/zstrfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/i18n/zstrfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/icudefs.mk.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/install-sh (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/io.rc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/io.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/locbund.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/locbund.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/sprintf.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/sscanf.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/ucln_io.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/ucln_io.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/ufile.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/ufile.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/ufmt_cmn.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/ufmt_cmn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/unicode/ustdio.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/unicode/ustream.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/uprintf.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/uprintf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/uprntf_p.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/uscanf.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/uscanf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/uscanf_p.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/ustdio.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/io/ustream.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/AnchorTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/AnchorTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ArabicShaping.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ArabicShaping.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/AttachmentPosnSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/CanonData.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/CanonShaping.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/CanonShaping.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/CharSubstitutionFilter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ContextualGlyphInsertion.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstitution.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/CoverageTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/CoverageTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/DefaultCharMapper.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/DeviceTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/DeviceTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/Features.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/Features.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphIterator.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphIterator.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/HindiFeatureTags.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/IndicClassTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/IndicRearrangement.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/IndicReordering.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/IndicReordering.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/KernTable.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/KernTable.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/KhmerReordering.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/KhmerReordering.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LEFontInstance.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LEFontInstance.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LEGlyphFilter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LEInsertionList.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LEInsertionList.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LELanguages.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LEScripts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LESwaps.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LETypes.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LayoutTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LigatureSubstitution.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LookupProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LookupProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LookupTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/LookupTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/Lookups.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/Lookups.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MPreFixups.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MPreFixups.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MarkArrays.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MarkArrays.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MirroredCharData.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MorphStateTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MorphTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MorphTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/OpenTypeTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ShapingTypeData.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/StateTables.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ThaiShaping.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ThaiShaping.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ThaiStateTables.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/TibetanReordering.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/TibetanReordering.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ValueRecords.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/ValueRecords.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/layout.rc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/layout.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/loengine.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layout/loengine.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/ParagraphLayout.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/RunArrays.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/layout/ParagraphLayout.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/layout/RunArrays.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/layout/playout.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/layout/plruns.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/layoutex.rc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/layoutex.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/playout.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/layoutex/plruns.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/mkinstalldirs (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/runConfigureICU (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/all/all.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/break/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/break/break.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/break/break.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/break/break.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/break/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/break/ubreak.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/cal/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/cal/cal.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/cal/cal.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/cal/cal.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/cal/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/cal/uprint.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/cal/uprint.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/case/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/case/case.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/case/case.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/case/case.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/case/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/case/ucase.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/citer/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/citer/citer.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/citer/citer.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/citer/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/coll/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/coll/coll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/coll/coll.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/coll/coll.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/coll/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/csdet/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/csdet/csdet.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/csdet/csdet.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/date/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/date/date.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/date/date.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/date/date.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/date/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/date/uprint.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/date/uprint.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datecal/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datecal/cal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datecal/ccal.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/README.TXT (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_0.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_1.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_2.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_3.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/main.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/util.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/datefmt/util.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/defs.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/FontMap.GDI (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/FontMap.Gnome (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/FontMap.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/FontMap.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GUISupport.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/LayoutSample.rc (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/RenderingSurface.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/Sample.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/Surface.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/Surface.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/arraymem.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/cgnomelayout.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/clayout.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/cmaps.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/cmaps.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/gnomelayout.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/gsupport.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/layout.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/layout.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/layout.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/paragraph.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/paragraph.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/pflow.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/pflow.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/readme.html (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/resource.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/rsurface.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/rsurface.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/sfnt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/ucreader.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/layout/ucreader.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/legacy/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/legacy/README (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/legacy/legacy.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/legacy/legacy.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/legacy/legacy.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/legacy/newcol.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/legacy/oldcol.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/README.TXT (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_0.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_1.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_2.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_3.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/main.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/util.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/msgfmt/util.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/numfmt/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/numfmt/capi.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/numfmt/main.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/numfmt/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/numfmt/util.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/numfmt/util.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/props/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/props/props.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/props/props.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/props/props.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/props/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/rules.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/strsrch/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/strsrch/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/README.TXT (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/answers/main_1.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/answers/main_2.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/answers/main_3.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/answers/main_4.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/main.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/translit.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/translit.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/unaccent.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/unaccent.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/util.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/translit/util.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uciter8/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uciter8/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/convsamp.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/data01.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/data02.bin (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/data06.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/udata/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/udata/reader.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/udata/reader.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/udata/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/udata/udata.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/udata/writer.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/udata/writer.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/fortunedefs.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/resources/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/resources/es.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/resources/fortune_resources.mak (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/resources/res-file-list.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/resources/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ugrep/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ugrep/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/en.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/resources.mak (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/resources.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/sr.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/uresb.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/uresb.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/uresb/uresb.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ustring/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ustring/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ustring/ustring.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ustring/ustring.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/samples/ustring/ustring.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/stubdata/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/stubdata/stubdata.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/stubdata/stubdata.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/bocu1tst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/calldata.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/calltest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/capitst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/capitst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cbididat.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cbkittst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cconvtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cctest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cestst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cestst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/chashtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/citertst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/citertst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cldrtest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cmsccoll.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/colutil.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cposxtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/crestst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/crestst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/creststn.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/creststn.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cstrcase.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cstrtest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cucdtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/currtest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/custrtrn.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/custrtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/cutiltst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/encoll.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/encoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/eurocreg.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/hpmufn.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/idnatest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ncnvtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/putiltst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/reapits.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/sorttest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/spreptst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/sprpdata.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/stdnmtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/tracetst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/trietest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/ucsdetst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/udatatst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/udatpg_test.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/uenumtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/usettest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/usrchdat.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/usrchtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/utexttst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/utf16tst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/utf8tst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/utmstest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/cintltst/utransts.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/compat/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/compat/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/compat/tzdate.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/compat/tzone.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/hdrtst/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/hdrtst/cxxfiles.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/hdrtst/dfiles.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/hdrtst/pfiles.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/aliastst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/aliastst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/allcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/allcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/apicoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/apicoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/astrotst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/astrotst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/calcasts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/calcasts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/callimts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/callimts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/calregts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/calregts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/caltest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/caltest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/caltztst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/caltztst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/canittst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/canittst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/citrtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/citrtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/convtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/convtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/csdetest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/csdetest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/currcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/currcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/decoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/decoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/encoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/encoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/escoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/escoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ficoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ficoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/fldset.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/fldset.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/frcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/frcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/g7coll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/g7coll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/idnaref.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/idnaref.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/incaltst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/incaltst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/intltest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/intltest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/intltest.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itercoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itercoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itformat.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itformat.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itmajor.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itmajor.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ittrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ittrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itutil.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/itutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/jacoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/jacoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/jamotest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/jamotest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/loctest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/loctest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/normconf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/normconf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/nptrans.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/nptrans.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/numrgts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/numrgts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/pptest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/pptest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/punyref.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/punyref.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/regcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/regcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/regextst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/regextst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/reptest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/reptest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/restest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/restest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/restsnew.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/restsnew.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/srchtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/srchtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/strcase.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/strtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/strtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/svccoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/svccoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/testidn.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/testidna.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/testidna.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/testutil.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/testutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/textfile.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/textfile.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/thcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/thcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tokiter.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tokiter.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/transapi.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/transapi.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/transrt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/transrt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/transtst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/transtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/trcoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/trcoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/trnserr.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/trnserr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tscoll.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tscoll.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsdate.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsdate.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsputil.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tsputil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tstnrapi.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzregts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzregts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tztest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/tztest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/usettest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/usettest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/utxttest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/utxttest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/uvectest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/uvectest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/v32test.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/v32test.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/wbnf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/wbnf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/windttst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/windttst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/winutil.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/intltest/winutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/iotest/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/iotest/filetst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/iotest/iotest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/iotest/iotest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/iotest/iotest.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/iotest/stream.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/iotest/strtst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/iotest/trnstst.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/FontObject.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/FontObject.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/cfonts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/cfonts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/cletest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/cletest.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/cletest.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/cmaps.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/cmaps.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/gendata.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/gendata.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/gendata.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/gendata.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/letest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/letest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/letest.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/letest.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/letsutil.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/letsutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/readme.html (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/sfnt.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/testdata.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/xmlreader.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/letest/xmlreader.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf_r.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/charperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/collperf/CollPerf.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/collperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/convperf/ConvPerf_r.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/convperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_ansi.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_iml.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/convperf/data.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/normperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf_r.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/perf.sln (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/perldriver/Dataset.pm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/perldriver/Format.pm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/perldriver/Output.pm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/perldriver/PerfFramework.pm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf_r.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.dsp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf20.dsp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.dsp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/bitset.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.bat (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.sh (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.bat (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.sh (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.bat (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.sh (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/trieset.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/unicont.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/usetperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/usetperf/UsetPerf.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ustrperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf_r.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/utfperf/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/utfperf/UtfPerf.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_SHIFTED_STUB.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/DataDrivenCollationTest.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/GraphemeBreakTest.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/GraphemeClusterBreakTest.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/NormalizationTest-3.2.0.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/NumberFormatTestCases.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/SentenceBreakTest.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/TestFont1.otf (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/WordBreakTest.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/calendar.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/casing.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/conversion.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/csdetest.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/default.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/format.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/ibm9027.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/icu26_testtypes.res (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/icu26e_testtypes.res (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/icuio.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/idna_conf.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/idna_rules.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/importtest.bin (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/iscii.bin (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/letest.xml (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/mc.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cis_prep.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_ci.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_cs.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_p.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_s.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/pkgdata.inc.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/ra.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/ra.xlf (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/rbbitst.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/re_tests.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/regextst.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/riwords.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/root.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/sh.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/sh_YU.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/structLocale.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/te.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/te_IN.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/te_IN_REVISED.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/test1.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/test3.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/test4.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/test4x.ucm (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/testaliases.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/testdata.mak (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/testempty.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/testtypes.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/translit_rules.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/tstfiles.mk (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testdata/uni-text.bin (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testmap/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testmap/testmap.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/testmap/testmap.dsp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/thaitest/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/thaitest/space.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.dsp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/threadtest/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/threadtest/converttest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/threadtest/stringtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsw (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyscan.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/cpysearch/cpysearch.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyskip.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/cpysearch/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/ctest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/ctestfw.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/datamap.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/dbgutil.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/testdata.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/tstdtmod.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/udbgutil.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/ctest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/datamap.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/dbgutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testdata.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testlog.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testtype.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/tstdtmod.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/udbgutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/uperf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/utimer.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/ctestfw/uperf.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/dumpce/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsw (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbidi/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbidi/store.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbrk/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencase/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencase/gencase.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencase/gencase.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencase/gencase.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencase/store.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genccode/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genccode/genccode.8.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genccode/genccode.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genccode/genccode.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencmn/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.8.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencnval/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genctd/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genctd/genctd.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genctd/genctd.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genctd/genctd.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gendraft/exclude.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gendraft/genheaders.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gennames/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gennames/gennames.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gennames/gennames.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gennorm/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gennorm/store.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genpname/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyAliases.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyValueAliases.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genpname/data.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genpname/genpname.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genpname/genpname.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genpname/gensvpa.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genpname/preparse.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/genprops.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/genprops.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/genprops.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdmerge.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/props2.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genprops/store.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/derb.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/derb.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/derb.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/gendtjar.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/genrb.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/genrb.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/genrb.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/genrb.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/parse.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/parse.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/read.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/read.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/reslist.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/reslist.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/rle.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/rle.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/ustr.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/ustr.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/wrtjava.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genrb/wrtxml.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genren/Makefile (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genren/README (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genren/genren.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gensprep/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gensprep/filterRFC3454.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.8.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gensprep/store.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gentest/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gentest/genres32.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gentest/gentest.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gentest/gentest.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/gentest/gentest.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genuca/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genuca/genuca.8.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genuca/genuca.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genuca/genuca.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/genuca/genuca.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/icupkg/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.8.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/icuswap/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/gencnvex.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/makeconv/ucnvstat.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/memcheck/ICUMemCheck.pl (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/cmnmode.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/dllmode.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/filemode.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/make.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/makefile.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.1.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/sttcmode.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/pkgdata/winmode.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/package.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/package.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/pkg_imp.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/pkgitems.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/ucmstate.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/asctime.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/ialloc.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.vcproj (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/icuzones (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/localtime.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/private.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/readme.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/scheck.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/tz.alias (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.cpp (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/tzfile.h (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/tzselect.ksh (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/zdump.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/source/tools/tzcode/zic.c (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu/unicode-license.txt (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/icu4ros.rbuild (100%) rename {reactos/lib => lib}/3rdparty/icu4ros/stubs.cpp (100%) rename {reactos/lib => lib}/3rdparty/libwine/config.c (100%) rename {reactos/lib => lib}/3rdparty/libwine/debug.c (100%) rename {reactos/lib => lib}/3rdparty/libwine/debug_ros.c (100%) rename {reactos/lib => lib}/3rdparty/libwine/libwine.rbuild (100%) rename {reactos/lib => lib}/3rdparty/libwine/string.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/AUTHORS (100%) rename {reactos/lib => lib}/3rdparty/libxml2/COPYING (100%) rename {reactos/lib => lib}/3rdparty/libxml2/ChangeLog (100%) rename {reactos/lib => lib}/3rdparty/libxml2/Copyright (100%) rename {reactos/lib => lib}/3rdparty/libxml2/DOCBparser.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/HTMLparser.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/HTMLtree.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/INSTALL (100%) rename {reactos/lib => lib}/3rdparty/libxml2/Makefile.am (100%) rename {reactos/lib => lib}/3rdparty/libxml2/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/Makefile.tests (100%) rename {reactos/lib => lib}/3rdparty/libxml2/NEWS (100%) rename {reactos/lib => lib}/3rdparty/libxml2/README (100%) rename {reactos/lib => lib}/3rdparty/libxml2/README.tests (100%) rename {reactos/lib => lib}/3rdparty/libxml2/SAX.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/SAX2.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/TODO (100%) rename {reactos/lib => lib}/3rdparty/libxml2/TODO_SCHEMAS (100%) rename {reactos/lib => lib}/3rdparty/libxml2/acconfig.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/acinclude.m4 (100%) rename {reactos/lib => lib}/3rdparty/libxml2/aclocal.m4 (100%) rename {reactos/lib => lib}/3rdparty/libxml2/c14n.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/catalog.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/check-relaxng-test-suite.py (100%) rename {reactos/lib => lib}/3rdparty/libxml2/check-relaxng-test-suite2.py (100%) rename {reactos/lib => lib}/3rdparty/libxml2/check-xinclude-test-suite.py (100%) rename {reactos/lib => lib}/3rdparty/libxml2/check-xml-test-suite.py (100%) rename {reactos/lib => lib}/3rdparty/libxml2/check-xsddata-test-suite.py (100%) rename {reactos/lib => lib}/3rdparty/libxml2/chvalid.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/config.guess (100%) rename {reactos/lib => lib}/3rdparty/libxml2/config.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/config.h.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/config.sub (100%) rename {reactos/lib => lib}/3rdparty/libxml2/configure (100%) rename {reactos/lib => lib}/3rdparty/libxml2/configure.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/dbgen.pl (100%) rename {reactos/lib => lib}/3rdparty/libxml2/dbgenattr.pl (100%) rename {reactos/lib => lib}/3rdparty/libxml2/debugXML.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/depcomp (100%) rename {reactos/lib => lib}/3rdparty/libxml2/dict.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/elfgcchack.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/encoding.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/entities.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/error.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/genUnicode.py (100%) rename {reactos/lib => lib}/3rdparty/libxml2/gentest.py (100%) rename {reactos/lib => lib}/3rdparty/libxml2/globals.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/hash.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/include/Makefile.am (100%) rename {reactos/lib => lib}/3rdparty/libxml2/include/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/include/win32config.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/include/wsockcompat.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/install-sh (100%) rename {reactos/lib => lib}/3rdparty/libxml2/legacy.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/libxml-2.0.pc.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/libxml.3 (100%) rename {reactos/lib => lib}/3rdparty/libxml2/libxml.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/libxml.m4 (100%) rename {reactos/lib => lib}/3rdparty/libxml2/libxml.spec.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/libxml2.rbuild (100%) rename {reactos/lib => lib}/3rdparty/libxml2/libxml2.spec (100%) rename {reactos/lib => lib}/3rdparty/libxml2/list.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/ltmain.sh (100%) rename {reactos/lib => lib}/3rdparty/libxml2/missing (100%) rename {reactos/lib => lib}/3rdparty/libxml2/mkinstalldirs (100%) rename {reactos/lib => lib}/3rdparty/libxml2/nanoftp.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/nanohttp.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/parser.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/parserInternals.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/pattern.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/regressions.py (100%) rename {reactos/lib => lib}/3rdparty/libxml2/regressions.xml (100%) rename {reactos/lib => lib}/3rdparty/libxml2/relaxng.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/runsuite.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/runtest.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/runxmlconf.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/schematron.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testAutomata.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testC14N.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testHTML.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testModule.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testReader.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testRegexp.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testRelax.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testSAX.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testSchemas.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testThreads.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testThreadsWin32.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testURI.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testXPath.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testapi.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testchar.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testdict.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testdso.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/testrecurse.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/threads.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/tree.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/trio.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/trio.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/triodef.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/trionan.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/trionan.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/triop.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/triostr.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/triostr.h (100%) rename {reactos/lib => lib}/3rdparty/libxml2/uri.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/valid.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xinclude.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xlink.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xml2-config.1 (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xml2-config.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xml2Conf.sh.in (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlIO.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlcatalog.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmllint.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlmemory.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlmodule.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlreader.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlregexp.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlsave.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlschemas.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlschemastypes.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlstring.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlunicode.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xmlwriter.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xpath.c (100%) rename {reactos/lib => lib}/3rdparty/libxml2/xpointer.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/CRTfmode.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/CRTglob.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/CRTinit.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/_wgetopt.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/binmode.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/cpu_features.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/cpu_features.h (100%) rename {reactos/lib => lib}/3rdparty/mingw/crt1.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/dllcrt1.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/gccmain.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/getopt.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/init.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/isascii.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/iscsym.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/iscsymf.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/main.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/mingw.rbuild (100%) rename {reactos/lib => lib}/3rdparty/mingw/moldname-msvcrt.def (100%) rename {reactos/lib => lib}/3rdparty/mingw/pseudo-reloc.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/strcasecmp.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/strncasecmp.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/tgetopt.h (100%) rename {reactos/lib => lib}/3rdparty/mingw/toascii.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/wbinmode.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/wcrt1.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/wcscmpi.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/winit.c (100%) rename {reactos/lib => lib}/3rdparty/mingw/wmain.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/ChangeLog (100%) rename {reactos/lib => lib}/3rdparty/zlib/FAQ (100%) rename {reactos/lib => lib}/3rdparty/zlib/INDEX (100%) rename {reactos/lib => lib}/3rdparty/zlib/Makefile.host (100%) rename {reactos/lib => lib}/3rdparty/zlib/Makefile.in (100%) rename {reactos/lib => lib}/3rdparty/zlib/README (100%) rename {reactos/lib => lib}/3rdparty/zlib/adler32.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/algorithm.txt (100%) rename {reactos/lib => lib}/3rdparty/zlib/compress.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/configure (100%) rename {reactos/lib => lib}/3rdparty/zlib/crc32.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/crc32.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/deflate.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/deflate.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/example.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/gzio.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/infback.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/inffast.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/inffast.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/inffixed.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/inflate.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/inflate.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/inftrees.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/inftrees.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/minigzip.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/trees.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/trees.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/uncompr.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/zconf.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/zconf.in.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/zlib.h (100%) rename {reactos/lib => lib}/3rdparty/zlib/zlib.rbuild (100%) rename {reactos/lib => lib}/3rdparty/zlib/zutil.c (100%) rename {reactos/lib => lib}/3rdparty/zlib/zutil.h (100%) rename {reactos/lib => lib}/cmlib/cmdata.h (100%) rename {reactos/lib => lib}/cmlib/cminit.c (100%) rename {reactos/lib => lib}/cmlib/cmlib.h (100%) rename {reactos/lib => lib}/cmlib/cmlib.rbuild (100%) rename {reactos/lib => lib}/cmlib/hivebin.c (100%) rename {reactos/lib => lib}/cmlib/hivecell.c (100%) rename {reactos/lib => lib}/cmlib/hivedata.h (100%) rename {reactos/lib => lib}/cmlib/hiveinit.c (100%) rename {reactos/lib => lib}/cmlib/hivesum.c (100%) rename {reactos/lib => lib}/cmlib/hivewrt.c (100%) rename {reactos/lib => lib}/debugsup/debugsup-ntos.spec (100%) rename {reactos/lib => lib}/debugsup/debugsup.rbuild (100%) rename {reactos/lib => lib}/drivers/chew/chew.rbuild (100%) rename {reactos/lib => lib}/drivers/chew/workqueue.c (100%) rename {reactos/lib => lib}/drivers/csq/SOURCES (100%) rename {reactos/lib => lib}/drivers/csq/csq.c (100%) rename {reactos/lib => lib}/drivers/csq/csq.def (100%) rename {reactos/lib => lib}/drivers/csq/csq.h (100%) rename {reactos/lib => lib}/drivers/csq/csq.rbuild (100%) rename {reactos/lib => lib}/drivers/directory.rbuild (100%) rename {reactos/lib => lib}/drivers/ip/ip.rbuild (100%) rename {reactos/lib => lib}/drivers/ip/network/address.c (100%) rename {reactos/lib => lib}/drivers/ip/network/arp.c (100%) rename {reactos/lib => lib}/drivers/ip/network/checksum.c (100%) rename {reactos/lib => lib}/drivers/ip/network/i386/checksum.S (100%) rename {reactos/lib => lib}/drivers/ip/network/icmp.c (100%) rename {reactos/lib => lib}/drivers/ip/network/interface.c (100%) rename {reactos/lib => lib}/drivers/ip/network/ip.c (100%) rename {reactos/lib => lib}/drivers/ip/network/loopback.c (100%) rename {reactos/lib => lib}/drivers/ip/network/memtrack.c (100%) rename {reactos/lib => lib}/drivers/ip/network/neighbor.c (100%) rename {reactos/lib => lib}/drivers/ip/network/ports.c (100%) rename {reactos/lib => lib}/drivers/ip/network/receive.c (100%) rename {reactos/lib => lib}/drivers/ip/network/router.c (100%) rename {reactos/lib => lib}/drivers/ip/network/routines.c (100%) rename {reactos/lib => lib}/drivers/ip/network/transmit.c (100%) rename {reactos/lib => lib}/drivers/ip/transport/datagram/datagram.c (100%) rename {reactos/lib => lib}/drivers/ip/transport/rawip/rawip.c (100%) rename {reactos/lib => lib}/drivers/ip/transport/tcp/accept.c (100%) rename {reactos/lib => lib}/drivers/ip/transport/tcp/event.c (100%) rename {reactos/lib => lib}/drivers/ip/transport/tcp/if.c (100%) rename {reactos/lib => lib}/drivers/ip/transport/tcp/tcp.c (100%) rename {reactos/lib => lib}/drivers/ip/transport/udp/udp.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/README (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/dev/include/vm/vm.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/dev/include/vm/vm_param.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/net/include/arpa/inet.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/net/include/imp.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/cpufunc.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/endian.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/ipl.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/limits.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/param.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/proc.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/signal.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/spl.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/stdarg.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/trap.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/types.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/machine/vmparam.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/net/if.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/net/if_arp.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/net/netisr.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/net/radix.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/net/raw_cb.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/net/route.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/if_ether.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/igmp_var.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/in.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/in_pcb.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/in_systm.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/in_var.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/ip.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_fw.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_icmp.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_var.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_debug.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_fsm.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_seq.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_timer.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_var.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/tcpip.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/udp.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/netinet/udp_var.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/buf.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/callout.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/cdefs.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/domain.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/errno.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/fcntl.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/file.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/filedesc.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/filio.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/ioccom.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/ioctl.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/kernel.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/libkern.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/malloc.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/mbuf.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/param.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/proc.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/protosw.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/queue.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/resource.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/resourcevar.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/rtprio.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/select.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/signal.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/signalvar.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/socket.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/socketvar.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/sockio.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/stat.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/sysctl.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/syslimits.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/syslog.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/systm.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/time.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/ttycom.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/types.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/ucred.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/uio.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/freebsd/src/sys/sys/unistd.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/memtrack.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/oskitdebug.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/oskiterrno.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/oskitfreebsd.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/oskittcp.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/include/oskittypes.h (100%) rename {reactos/lib => lib}/drivers/oskittcp/notes.txt (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp.rbuild (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/defaults.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/in.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/in_cksum.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/in_pcb.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/in_proto.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/in_rmx.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/inet_ntoa.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/interface.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/ip_input.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/ip_output.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/kern_clock.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/kern_subr.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/param.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/radix.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/random.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/raw_cb.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/raw_ip.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/raw_usrreq.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/route.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/rtsock.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/scanc.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/sleep.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/tcp_debug.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/tcp_input.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/tcp_output.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/tcp_subr.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/tcp_timer.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/tcp_usrreq.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/uipc_domain.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/uipc_mbuf.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/uipc_socket.c (100%) rename {reactos/lib => lib}/drivers/oskittcp/oskittcp/uipc_socket2.c (100%) rename {reactos/lib => lib}/epsapi/enum/drivers.c (100%) rename {reactos/lib => lib}/epsapi/enum/modules.c (100%) rename {reactos/lib => lib}/epsapi/enum/processes.c (100%) rename {reactos/lib => lib}/epsapi/epsapi.rbuild (100%) rename {reactos/lib => lib}/fslib/directory.rbuild (100%) rename {reactos/lib => lib}/fslib/ext2lib/Badblock.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/Bitmap.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/Bitmap.h (100%) rename {reactos/lib => lib}/fslib/ext2lib/Disk.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/Disk.h (100%) rename {reactos/lib => lib}/fslib/ext2lib/Group.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/Inode.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/Memory.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/Mke2fs.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/Mke2fs.h (100%) rename {reactos/lib => lib}/fslib/ext2lib/Super.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/Uuid.c (100%) rename {reactos/lib => lib}/fslib/ext2lib/ext2_fs.h (100%) rename {reactos/lib => lib}/fslib/ext2lib/ext2lib.rbuild (100%) rename {reactos/lib => lib}/fslib/ext2lib/types.h (100%) rename {reactos/lib => lib}/fslib/ntfslib/ntfslib.c (100%) rename {reactos/lib => lib}/fslib/ntfslib/ntfslib.h (100%) rename {reactos/lib => lib}/fslib/ntfslib/ntfslib.rbuild (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/boot.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/boot.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/byteorder.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/byteswap.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/byteswap1.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/check.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/check.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/common.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/common.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/compiler.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/dosfsck.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/fat.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/fat.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/file.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/file.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/io.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/io.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/lfn.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/lfn.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/msdos_fs.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/swab.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/version.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/check/vfat.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/fat12.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/fat16.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/fat32.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/vfatlib.c (100%) rename {reactos/lib => lib}/fslib/vfatlib/vfatlib.h (100%) rename {reactos/lib => lib}/fslib/vfatlib/vfatlib.rbuild (100%) rename {reactos/lib => lib}/fslib/vfatxlib/fatx.c (100%) rename {reactos/lib => lib}/fslib/vfatxlib/vfatxlib.c (100%) rename {reactos/lib => lib}/fslib/vfatxlib/vfatxlib.h (100%) rename {reactos/lib => lib}/fslib/vfatxlib/vfatxlib.rbuild (100%) rename {reactos/lib => lib}/host/directory.rbuild (100%) rename {reactos/lib => lib}/host/wcsfuncs/wcsfuncs.c (100%) rename {reactos/lib => lib}/host/wcsfuncs/wcsfuncs.rbuild (100%) rename {reactos/lib => lib}/inflib/README.txt (100%) rename {reactos/lib => lib}/inflib/builddep.h (100%) rename {reactos/lib => lib}/inflib/infcommon.h (100%) rename {reactos/lib => lib}/inflib/infcore.c (100%) rename {reactos/lib => lib}/inflib/infget.c (100%) rename {reactos/lib => lib}/inflib/infhost.h (100%) rename {reactos/lib => lib}/inflib/infhostgen.c (100%) rename {reactos/lib => lib}/inflib/infhostget.c (100%) rename {reactos/lib => lib}/inflib/infhostput.c (100%) rename {reactos/lib => lib}/inflib/inflib.h (100%) rename {reactos/lib => lib}/inflib/inflib.mak (100%) rename {reactos/lib => lib}/inflib/inflib.rbuild (100%) rename {reactos/lib => lib}/inflib/infpriv.h (100%) rename {reactos/lib => lib}/inflib/infput.c (100%) rename {reactos/lib => lib}/inflib/infros.h (100%) rename {reactos/lib => lib}/inflib/infrosgen.c (100%) rename {reactos/lib => lib}/inflib/infrosget.c (100%) rename {reactos/lib => lib}/inflib/infrosput.c (100%) rename {reactos/lib => lib}/lib.mak (100%) rename {reactos/lib => lib}/lib.rbuild (100%) rename {reactos/lib => lib}/nls/idna/idna.cpp (100%) rename {reactos/lib => lib}/nls/idna/idna.rbuild (100%) rename {reactos/lib => lib}/nls/idna/nameprep.cpp (100%) rename {reactos/lib => lib}/nls/nls.rbuild (100%) rename {reactos/lib => lib}/nls/normalize/normalize.cpp (100%) rename {reactos/lib => lib}/nls/normalize/normalize.rbuild (100%) rename {reactos/lib => lib}/nls/scripts/scripts.cpp (100%) rename {reactos/lib => lib}/nls/scripts/scripts.h (100%) rename {reactos/lib => lib}/nls/scripts/scripts.rbuild (100%) rename {reactos/lib => lib}/ntdllsys/ntdllsys.rbuild (100%) rename {reactos/lib => lib}/ppcmmu/devint.s (100%) rename {reactos/lib => lib}/ppcmmu/dummy.c (100%) rename {reactos/lib => lib}/ppcmmu/gdblib.c (100%) rename {reactos/lib => lib}/ppcmmu/ldscript (100%) rename {reactos/lib => lib}/ppcmmu/mmuobject.c (100%) rename {reactos/lib => lib}/ppcmmu/mmuobject.h (100%) rename {reactos/lib => lib}/ppcmmu/mmutest.c (100%) rename {reactos/lib => lib}/ppcmmu/mmuutil.c (100%) rename {reactos/lib => lib}/ppcmmu/ppcmmu.mak (100%) rename {reactos/lib => lib}/ppcmmu/ppcmmu.rbuild (100%) rename {reactos/lib => lib}/pseh/framebased.c (100%) rename {reactos/lib => lib}/pseh/i386/framebased.S (100%) rename {reactos/lib => lib}/pseh/powerpc/framebased.S (100%) rename {reactos/lib => lib}/pseh/pseh.rbuild (100%) rename {reactos/lib => lib}/recyclebin/guid.c (100%) rename {reactos/lib => lib}/recyclebin/readme.txt (100%) rename {reactos/lib => lib}/recyclebin/recyclebin.c (100%) rename {reactos/lib => lib}/recyclebin/recyclebin.h (100%) rename {reactos/lib => lib}/recyclebin/recyclebin.rbuild (100%) rename {reactos/lib => lib}/recyclebin/recyclebin_generic.c (100%) rename {reactos/lib => lib}/recyclebin/recyclebin_generic_enumerator.c (100%) rename {reactos/lib => lib}/recyclebin/recyclebin_private.h (100%) rename {reactos/lib => lib}/recyclebin/recyclebin_v5.c (100%) rename {reactos/lib => lib}/recyclebin/recyclebin_v5.h (100%) rename {reactos/lib => lib}/recyclebin/recyclebin_v5_enumerator.c (100%) rename {reactos/lib => lib}/rossym/delete.c (100%) rename {reactos/lib => lib}/rossym/find.c (100%) rename {reactos/lib => lib}/rossym/fromfile.c (100%) rename {reactos/lib => lib}/rossym/frommem.c (100%) rename {reactos/lib => lib}/rossym/fromraw.c (100%) rename {reactos/lib => lib}/rossym/getraw.c (100%) rename {reactos/lib => lib}/rossym/init.c (100%) rename {reactos/lib => lib}/rossym/initkm.c (100%) rename {reactos/lib => lib}/rossym/initum.c (100%) rename {reactos/lib => lib}/rossym/rossym.rbuild (100%) rename {reactos/lib => lib}/rossym/rossympriv.h (100%) rename {reactos/lib => lib}/rossym/zwfile.c (100%) rename {reactos/lib => lib}/rtl/access.c (100%) rename {reactos/lib => lib}/rtl/acl.c (100%) rename {reactos/lib => lib}/rtl/actctx.c (100%) rename {reactos/lib => lib}/rtl/arm/debug_asm.S (100%) rename {reactos/lib => lib}/rtl/atom.c (100%) rename {reactos/lib => lib}/rtl/austin/avl.c (100%) rename {reactos/lib => lib}/rtl/austin/avl.h (100%) rename {reactos/lib => lib}/rtl/austin/macros.h (100%) rename {reactos/lib => lib}/rtl/austin/tree.c (100%) rename {reactos/lib => lib}/rtl/austin/tree.h (100%) rename {reactos/lib => lib}/rtl/austin/udict.h (100%) rename {reactos/lib => lib}/rtl/bitmap.c (100%) rename {reactos/lib => lib}/rtl/bootdata.c (100%) rename {reactos/lib => lib}/rtl/compress.c (100%) rename {reactos/lib => lib}/rtl/condvar.c (100%) rename {reactos/lib => lib}/rtl/crc32.c (100%) rename {reactos/lib => lib}/rtl/critical.c (100%) rename {reactos/lib => lib}/rtl/dbgbuffer.c (100%) rename {reactos/lib => lib}/rtl/debug.c (100%) rename {reactos/lib => lib}/rtl/dos8dot3.c (100%) rename {reactos/lib => lib}/rtl/encode.c (100%) rename {reactos/lib => lib}/rtl/env.c (100%) rename {reactos/lib => lib}/rtl/error.c (100%) rename {reactos/lib => lib}/rtl/exception.c (100%) rename {reactos/lib => lib}/rtl/generictable.c (100%) rename {reactos/lib => lib}/rtl/handle.c (100%) rename {reactos/lib => lib}/rtl/heap.c (100%) rename {reactos/lib => lib}/rtl/i386/debug_asm.S (100%) rename {reactos/lib => lib}/rtl/i386/except.c (100%) rename {reactos/lib => lib}/rtl/i386/except_asm.s (100%) rename {reactos/lib => lib}/rtl/i386/random_asm.S (100%) rename {reactos/lib => lib}/rtl/i386/res_asm.s (100%) rename {reactos/lib => lib}/rtl/i386/rtlmem.s (100%) rename {reactos/lib => lib}/rtl/i386/rtlswap.S (100%) rename {reactos/lib => lib}/rtl/i386/thread.c (100%) rename {reactos/lib => lib}/rtl/image.c (100%) rename {reactos/lib => lib}/rtl/interlck.c (100%) rename {reactos/lib => lib}/rtl/largeint.c (100%) rename {reactos/lib => lib}/rtl/luid.c (100%) rename {reactos/lib => lib}/rtl/mem.c (100%) rename {reactos/lib => lib}/rtl/memgen.c (100%) rename {reactos/lib => lib}/rtl/message.c (100%) rename {reactos/lib => lib}/rtl/network.c (100%) rename {reactos/lib => lib}/rtl/nls.c (100%) rename {reactos/lib => lib}/rtl/path.c (100%) rename {reactos/lib => lib}/rtl/powerpc/debug.c (100%) rename {reactos/lib => lib}/rtl/powerpc/except.c (100%) rename {reactos/lib => lib}/rtl/powerpc/interlocked.c (100%) rename {reactos/lib => lib}/rtl/powerpc/rtlmem.s (100%) rename {reactos/lib => lib}/rtl/powerpc/rtlswap.s (100%) rename {reactos/lib => lib}/rtl/powerpc/thread.c (100%) rename {reactos/lib => lib}/rtl/ppb.c (100%) rename {reactos/lib => lib}/rtl/process.c (100%) rename {reactos/lib => lib}/rtl/propvar.c (100%) rename {reactos/lib => lib}/rtl/qsort.c (100%) rename {reactos/lib => lib}/rtl/random.c (100%) rename {reactos/lib => lib}/rtl/rangelist.c (100%) rename {reactos/lib => lib}/rtl/readme.txt (100%) rename {reactos/lib => lib}/rtl/registry.c (100%) rename {reactos/lib => lib}/rtl/res.c (100%) rename {reactos/lib => lib}/rtl/resource.c (100%) rename {reactos/lib => lib}/rtl/rtl-common.rbuild (100%) rename {reactos/lib => lib}/rtl/rtl.h (100%) rename {reactos/lib => lib}/rtl/rtl.rbuild (100%) rename {reactos/lib => lib}/rtl/rtlp.h (100%) rename {reactos/lib => lib}/rtl/sd.c (100%) rename {reactos/lib => lib}/rtl/security.c (100%) rename {reactos/lib => lib}/rtl/sid.c (100%) rename {reactos/lib => lib}/rtl/slist.c (100%) rename {reactos/lib => lib}/rtl/splaytree.c (100%) rename {reactos/lib => lib}/rtl/sprintf.c (100%) rename {reactos/lib => lib}/rtl/srw.c (100%) rename {reactos/lib => lib}/rtl/swprintf.c (100%) rename {reactos/lib => lib}/rtl/thread.c (100%) rename {reactos/lib => lib}/rtl/time.c (100%) rename {reactos/lib => lib}/rtl/timerqueue.c (100%) rename {reactos/lib => lib}/rtl/timezone.c (100%) rename {reactos/lib => lib}/rtl/unicode.c (100%) rename {reactos/lib => lib}/rtl/unicodeprefix.c (100%) rename {reactos/lib => lib}/rtl/vectoreh.c (100%) rename {reactos/lib => lib}/rtl/version.c (100%) rename {reactos/lib => lib}/rtl/wait.c (100%) rename {reactos/lib => lib}/rtl/workitem.c (100%) rename {reactos/lib => lib}/sdk/crt/README.txt (100%) rename {reactos/lib => lib}/sdk/crt/conio/cgets.c (100%) rename {reactos/lib => lib}/sdk/crt/conio/cprintf.c (100%) rename {reactos/lib => lib}/sdk/crt/conio/cputs.c (100%) rename {reactos/lib => lib}/sdk/crt/conio/getch.c (100%) rename {reactos/lib => lib}/sdk/crt/conio/getche.c (100%) rename {reactos/lib => lib}/sdk/crt/conio/kbhit.c (100%) rename {reactos/lib => lib}/sdk/crt/conio/putch.c (100%) rename {reactos/lib => lib}/sdk/crt/conio/ungetch.c (100%) rename {reactos/lib => lib}/sdk/crt/crt.rbuild (100%) rename {reactos/lib => lib}/sdk/crt/direct/chdir.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/chdrive.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/getcwd.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/getdcwd.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/getdfree.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/getdrive.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/mkdir.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/rmdir.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/wchdir.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/wgetcwd.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/wgetdcwd.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/wmkdir.c (100%) rename {reactos/lib => lib}/sdk/crt/direct/wrmdir.c (100%) rename {reactos/lib => lib}/sdk/crt/except/abnorter.c (100%) rename {reactos/lib => lib}/sdk/crt/except/checkesp.c (100%) rename {reactos/lib => lib}/sdk/crt/except/cpp.c (100%) rename {reactos/lib => lib}/sdk/crt/except/cppexcept.c (100%) rename {reactos/lib => lib}/sdk/crt/except/i386/chkstk_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/except/i386/prolog.s (100%) rename {reactos/lib => lib}/sdk/crt/except/i386/seh.s (100%) rename {reactos/lib => lib}/sdk/crt/except/i386/unwind.c (100%) rename {reactos/lib => lib}/sdk/crt/except/matherr.c (100%) rename {reactos/lib => lib}/sdk/crt/except/powerpc/chkstk_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/except/powerpc/seh.s (100%) rename {reactos/lib => lib}/sdk/crt/except/xcptfil.c (100%) rename {reactos/lib => lib}/sdk/crt/float/chgsign.c (100%) rename {reactos/lib => lib}/sdk/crt/float/copysign.c (100%) rename {reactos/lib => lib}/sdk/crt/float/fpclass.c (100%) rename {reactos/lib => lib}/sdk/crt/float/fpecode.c (100%) rename {reactos/lib => lib}/sdk/crt/float/fpreset.c (100%) rename {reactos/lib => lib}/sdk/crt/float/i386/clearfp.c (100%) rename {reactos/lib => lib}/sdk/crt/float/i386/cntrlfp.c (100%) rename {reactos/lib => lib}/sdk/crt/float/i386/logb.c (100%) rename {reactos/lib => lib}/sdk/crt/float/i386/statfp.c (100%) rename {reactos/lib => lib}/sdk/crt/float/isnan.c (100%) rename {reactos/lib => lib}/sdk/crt/float/nafter.c (100%) rename {reactos/lib => lib}/sdk/crt/float/scalb.c (100%) rename {reactos/lib => lib}/sdk/crt/include/float.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/atexit.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/console.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/file.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/ieee.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/math.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/mbstring.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/mtdll.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/printf.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/rterror.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/tls.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/wine/cppexcept.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/wine/eh.h (100%) rename {reactos/lib => lib}/sdk/crt/include/internal/wine/msvcrt.h (100%) rename {reactos/lib => lib}/sdk/crt/libcntpr.rbuild (100%) rename {reactos/lib => lib}/sdk/crt/locale/locale.c (100%) rename {reactos/lib => lib}/sdk/crt/math/abs.c (100%) rename {reactos/lib => lib}/sdk/crt/math/acos.c (100%) rename {reactos/lib => lib}/sdk/crt/math/adjust.c (100%) rename {reactos/lib => lib}/sdk/crt/math/asin.c (100%) rename {reactos/lib => lib}/sdk/crt/math/cabs.c (100%) rename {reactos/lib => lib}/sdk/crt/math/cosh.c (100%) rename {reactos/lib => lib}/sdk/crt/math/div.c (100%) rename {reactos/lib => lib}/sdk/crt/math/fdivbug.c (100%) rename {reactos/lib => lib}/sdk/crt/math/frexp.c (100%) rename {reactos/lib => lib}/sdk/crt/math/huge_val.c (100%) rename {reactos/lib => lib}/sdk/crt/math/hypot.c (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/alldiv_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/alldvrm_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/allmul_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/allrem_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/allshl_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/allshr_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/atan2.c (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/atan_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/aulldiv_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/aulldvrm_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/aullrem_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/aullshr_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/ceil_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/ci.c (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/cos_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/exp.c (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/fabs_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/floor_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/fmod.c (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/ftol_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/ldexp.c (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/log10_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/log_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/pow_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/sin_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/sqrt_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/i386/tan_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/math/j0_y0.c (100%) rename {reactos/lib => lib}/sdk/crt/math/j1_y1.c (100%) rename {reactos/lib => lib}/sdk/crt/math/jn_yn.c (100%) rename {reactos/lib => lib}/sdk/crt/math/labs.c (100%) rename {reactos/lib => lib}/sdk/crt/math/ldiv.c (100%) rename {reactos/lib => lib}/sdk/crt/math/modf.c (100%) rename {reactos/lib => lib}/sdk/crt/math/pow_asm.c (100%) rename {reactos/lib => lib}/sdk/crt/math/rand.c (100%) rename {reactos/lib => lib}/sdk/crt/math/rand_nt.c (100%) rename {reactos/lib => lib}/sdk/crt/math/s_modf.c (100%) rename {reactos/lib => lib}/sdk/crt/math/sinh.c (100%) rename {reactos/lib => lib}/sdk/crt/math/stubs.c (100%) rename {reactos/lib => lib}/sdk/crt/math/tanh.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/hanzen.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ischira.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/iskana.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/iskmoji.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/iskpun.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/islead.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/islwr.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismbal.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismbaln.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismbc.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismbgra.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismbkaln.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismblead.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismbpri.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismbpun.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/ismbtrl.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/isuppr.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/jistojms.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/jmstojis.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbbtype.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbccpy.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbclen.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbscat.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbschr.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbscmp.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbscoll.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbscpy.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbscspn.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsdec.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsdup.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsicmp.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsicoll.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsinc.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbslen.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbslwr.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsncat.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsnccnt.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsncmp.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsncoll.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsncpy.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsnextc.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsnicmp.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsnicoll.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsninc.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsnset.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbspbrk.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsrchr.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsrev.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsset.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsspn.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsspnp.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsstr.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbstok.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbstrlen.c (100%) rename {reactos/lib => lib}/sdk/crt/mbstring/mbsupr.c (100%) rename {reactos/lib => lib}/sdk/crt/mem/i386/memchr_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/mem/i386/memcpy_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/mem/i386/memmove_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/mem/i386/memset_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/mem/memccpy.c (100%) rename {reactos/lib => lib}/sdk/crt/mem/memchr.c (100%) rename {reactos/lib => lib}/sdk/crt/mem/memcmp.c (100%) rename {reactos/lib => lib}/sdk/crt/mem/memcpy.c (100%) rename {reactos/lib => lib}/sdk/crt/mem/memicmp.c (100%) rename {reactos/lib => lib}/sdk/crt/mem/memmove.c (100%) rename {reactos/lib => lib}/sdk/crt/mem/memset.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/amsg.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/assert.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/crtmain.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/environ.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/getargs.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/initterm.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/lock.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/purecall.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/stubs.c (100%) rename {reactos/lib => lib}/sdk/crt/misc/tls.c (100%) rename {reactos/lib => lib}/sdk/crt/precomp.h (100%) rename {reactos/lib => lib}/sdk/crt/process/_cwait.c (100%) rename {reactos/lib => lib}/sdk/crt/process/_system.c (100%) rename {reactos/lib => lib}/sdk/crt/process/dll.c (100%) rename {reactos/lib => lib}/sdk/crt/process/process.c (100%) rename {reactos/lib => lib}/sdk/crt/process/procid.c (100%) rename {reactos/lib => lib}/sdk/crt/process/thread.c (100%) rename {reactos/lib => lib}/sdk/crt/process/threadid.c (100%) rename {reactos/lib => lib}/sdk/crt/process/threadx.c (100%) rename {reactos/lib => lib}/sdk/crt/process/wprocess.c (100%) rename {reactos/lib => lib}/sdk/crt/search/bsearch.c (100%) rename {reactos/lib => lib}/sdk/crt/search/lfind.c (100%) rename {reactos/lib => lib}/sdk/crt/search/lsearch.c (100%) rename {reactos/lib => lib}/sdk/crt/setjmp/i386/setjmp.s (100%) rename {reactos/lib => lib}/sdk/crt/signal/signal.c (100%) rename {reactos/lib => lib}/sdk/crt/signal/xcptinfo.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/access.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/file.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/find.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/fmode.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/lnx_sprintf.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/perror.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/popen.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/waccess.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/wfind.c (100%) rename {reactos/lib => lib}/sdk/crt/stdio/wpopen.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/_exit.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/abort.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/atexit.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/atold.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/doserrmap.h (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/ecvt.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/ecvtbuf.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/errno.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/fcvt.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/fcvtbuf.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/fullpath.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/gcvt.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/getenv.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/makepath.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/malloc.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/mbstowcs.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/mbtowc.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/obsol.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/putenv.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/qsort.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/rot.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/senv.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/swab.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/wfulpath.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/wmakpath.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/wputenv.c (100%) rename {reactos/lib => lib}/sdk/crt/stdlib/wsenv.c (100%) rename {reactos/lib => lib}/sdk/crt/string/atof.c (100%) rename {reactos/lib => lib}/sdk/crt/string/atoi.c (100%) rename {reactos/lib => lib}/sdk/crt/string/atoi64.c (100%) rename {reactos/lib => lib}/sdk/crt/string/atol.c (100%) rename {reactos/lib => lib}/sdk/crt/string/ctype.c (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strcat_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strchr_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strcmp_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strcpy_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strlen_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strncat_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strncmp_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strncpy_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strnlen_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/strrchr_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tchar.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcscat.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcschr.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcscmp.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcscpy.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcslen.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcsncat.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcsncmp.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcsncpy.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcsnlen.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/tcsrchr.h (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcscat_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcschr_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcscmp_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcscpy_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcslen_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcsncat_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcsncmp_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcsncpy_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcsnlen_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/i386/wcsrchr_asm.s (100%) rename {reactos/lib => lib}/sdk/crt/string/itoa.c (100%) rename {reactos/lib => lib}/sdk/crt/string/itow.c (100%) rename {reactos/lib => lib}/sdk/crt/string/lasttok.c (100%) rename {reactos/lib => lib}/sdk/crt/string/mbstowcs_nt.c (100%) rename {reactos/lib => lib}/sdk/crt/string/scanf.c (100%) rename {reactos/lib => lib}/sdk/crt/string/scanf.h (100%) rename {reactos/lib => lib}/sdk/crt/string/splitp.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strcat.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strchr.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strcmp.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strcoll.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strcpy.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strcspn.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strdup.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strerror.c (100%) rename {reactos/lib => lib}/sdk/crt/string/stricmp.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strlen.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strlwr.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strncat.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strncmp.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strncoll.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strncpy.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strnicmp.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strnlen.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strpbrk.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strrchr.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strrev.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strset.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strspn.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strstr.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strtod.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strtok.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strtol.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strtold.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strtoul.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strtoull.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strupr.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strxfrm.c (100%) rename {reactos/lib => lib}/sdk/crt/string/strxspn.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcscat.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcschr.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcscmp.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcscpy.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcslen.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcsncat.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcsncmp.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcsncpy.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcsnlen.h (100%) rename {reactos/lib => lib}/sdk/crt/string/tcsrchr.h (100%) rename {reactos/lib => lib}/sdk/crt/string/wcs.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcscat.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcschr.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcscmp.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcscpy.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcslen.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcsncat.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcsncmp.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcsncpy.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcsnlen.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcsrchr.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcstod.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcstol.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcstombs_nt.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wcstoul.c (100%) rename {reactos/lib => lib}/sdk/crt/string/witoa.c (100%) rename {reactos/lib => lib}/sdk/crt/string/witow.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wsplitp.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wtoi.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wtoi64.c (100%) rename {reactos/lib => lib}/sdk/crt/string/wtol.c (100%) rename {reactos/lib => lib}/sdk/crt/sys_stat/systime.c (100%) rename {reactos/lib => lib}/sdk/crt/time/clock.c (100%) rename {reactos/lib => lib}/sdk/crt/time/ctime.c (100%) rename {reactos/lib => lib}/sdk/crt/time/difftime.c (100%) rename {reactos/lib => lib}/sdk/crt/time/ftime.c (100%) rename {reactos/lib => lib}/sdk/crt/time/posixrul.h (100%) rename {reactos/lib => lib}/sdk/crt/time/strdate.c (100%) rename {reactos/lib => lib}/sdk/crt/time/strftime.c (100%) rename {reactos/lib => lib}/sdk/crt/time/strtime.c (100%) rename {reactos/lib => lib}/sdk/crt/time/time.c (100%) rename {reactos/lib => lib}/sdk/crt/time/tz_vars.c (100%) rename {reactos/lib => lib}/sdk/crt/time/tzfile.h (100%) rename {reactos/lib => lib}/sdk/crt/time/wctime.c (100%) rename {reactos/lib => lib}/sdk/crt/time/wstrdate.c (100%) rename {reactos/lib => lib}/sdk/crt/time/wstrtime.c (100%) rename {reactos/lib => lib}/sdk/crt/wine/heap.c (100%) rename {reactos/lib => lib}/sdk/crt/wine/undname.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcscoll.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcscspn.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcsicmp.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcslwr.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcsnicmp.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcsspn.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcsstr.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcstok.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcsupr.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wcsxfrm.c (100%) rename {reactos/lib => lib}/sdk/crt/wstring/wlasttok.c (100%) rename {reactos/lib => lib}/sdk/dxguid/dxguid-mingw.c (100%) rename {reactos/lib => lib}/sdk/dxguid/dxguid.rbuild (100%) rename {reactos/lib => lib}/sdk/nt/entry_point.c (100%) rename {reactos/lib => lib}/sdk/nt/nt.rbuild (100%) rename {reactos/lib => lib}/sdk/nt/readme.txt (100%) rename {reactos/lib => lib}/sdk/scrnsave/scrnsave.c (100%) rename {reactos/lib => lib}/sdk/scrnsave/scrnsave.rbuild (100%) rename {reactos/lib => lib}/sdk/sdk.rbuild (100%) rename {reactos/lib => lib}/sdk/strmiids/strmiids.c (100%) rename {reactos/lib => lib}/sdk/strmiids/strmiids.rbuild (100%) rename {reactos/lib => lib}/sdk/uuid/uuid.c (100%) rename {reactos/lib => lib}/sdk/uuid/uuid.rbuild (100%) rename {reactos/lib => lib}/sdk/wdmguid/wdmguid.c (100%) rename {reactos/lib => lib}/sdk/wdmguid/wdmguid.rbuild (100%) rename {reactos/lib => lib}/smlib/compses.c (100%) rename {reactos/lib => lib}/smlib/connect.c (100%) rename {reactos/lib => lib}/smlib/execpgm.c (100%) rename {reactos/lib => lib}/smlib/lookupss.c (100%) rename {reactos/lib => lib}/smlib/precomp.h (100%) rename {reactos/lib => lib}/smlib/smlib.rbuild (100%) rename {reactos/lib => lib}/win32ksys/win32ksys.rbuild (100%) rename {reactos/media => media}/doc/3rd Party Files.txt (100%) rename {reactos/media => media}/doc/DIRS (100%) rename {reactos/media => media}/doc/DdCreateDirectDrawObject.txt (100%) rename {reactos/media => media}/doc/DdDeleteDirectDrawObject.txt (100%) rename {reactos/media => media}/doc/HACKING (100%) rename {reactos/media => media}/doc/INDEX (100%) rename {reactos/media => media}/doc/INTERNALS (100%) rename {reactos/media => media}/doc/LPC.txt (100%) rename {reactos/media => media}/doc/README.WINE (100%) rename {reactos/media => media}/doc/apc (100%) rename {reactos/media => media}/doc/books.txt (100%) rename {reactos/media => media}/doc/irp cancel boilerplate.c (100%) rename {reactos/media => media}/doc/locks.txt (100%) rename {reactos/media => media}/doc/memcpy_optimize.txt (100%) rename {reactos/media => media}/doc/news1 (100%) rename {reactos/media => media}/doc/news2 (100%) rename {reactos/media => media}/doc/notes (100%) rename {reactos/media => media}/doc/todo (100%) rename {reactos/media => media}/doc/win32k_refs.txt (100%) rename {reactos/media => media}/doc/winsta and desktops.txt (100%) rename {reactos/media => media}/drivers/drivers.rbuild (100%) rename {reactos/media => media}/drivers/etc/KDBinit (100%) rename {reactos/media => media}/drivers/etc/etc.rbuild (100%) rename {reactos/media => media}/drivers/etc/services (100%) rename {reactos/media => media}/fonts/DejaVuSans-Bold.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSans-BoldOblique.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSans-Oblique.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSans.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSansMono-Bold.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSansMono-BoldOblique.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSansMono-Oblique.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSansMono.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSerif-Bold.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSerif-BoldItalic.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSerif-Italic.ttf (100%) rename {reactos/media => media}/fonts/DejaVuSerif.ttf (100%) rename {reactos/media => media}/fonts/FreeMono.ttf (100%) rename {reactos/media => media}/fonts/FreeMonoBold.ttf (100%) rename {reactos/media => media}/fonts/FreeMonoBoldOblique.ttf (100%) rename {reactos/media => media}/fonts/FreeMonoOblique.ttf (100%) rename {reactos/media => media}/fonts/LiberationMono-Bold.ttf (100%) rename {reactos/media => media}/fonts/LiberationMono-BoldItalic.ttf (100%) rename {reactos/media => media}/fonts/LiberationMono-Italic.ttf (100%) rename {reactos/media => media}/fonts/LiberationMono-Regular.ttf (100%) rename {reactos/media => media}/fonts/LiberationSans-Bold.ttf (100%) rename {reactos/media => media}/fonts/LiberationSans-BoldItalic.ttf (100%) rename {reactos/media => media}/fonts/LiberationSans-Italic.ttf (100%) rename {reactos/media => media}/fonts/LiberationSans-Regular.ttf (100%) rename {reactos/media => media}/fonts/LiberationSerif-Bold.ttf (100%) rename {reactos/media => media}/fonts/LiberationSerif-BoldItalic.ttf (100%) rename {reactos/media => media}/fonts/LiberationSerif-Italic.ttf (100%) rename {reactos/media => media}/fonts/LiberationSerif-Regular.ttf (100%) rename {reactos/media => media}/fonts/Marlett.ttf (100%) rename {reactos/media => media}/fonts/doc/DejaVu_AUTHORS.txt (100%) rename {reactos/media => media}/fonts/doc/DejaVu_BUGS.txt (100%) rename {reactos/media => media}/fonts/doc/DejaVu_LICENSE.txt (100%) rename {reactos/media => media}/fonts/doc/DejaVu_NEWS.txt (100%) rename {reactos/media => media}/fonts/doc/DejaVu_README.txt (100%) rename {reactos/media => media}/fonts/doc/DejaVu_langcover.txt (100%) rename {reactos/media => media}/fonts/doc/DejaVu_status.txt (100%) rename {reactos/media => media}/fonts/doc/DejaVu_unicover.txt (100%) rename {reactos/media => media}/fonts/doc/FreeFont_readme.txt (100%) rename {reactos/media => media}/fonts/doc/LICENSE_DejaVu.txt (100%) rename {reactos/media => media}/fonts/fonts.rbuild (100%) rename {reactos/media => media}/fonts/tahoma.ttf (100%) rename {reactos/media => media}/fonts/tahomabd.ttf (100%) rename {reactos/media => media}/inf/NET_NIC.inf (100%) rename {reactos/media => media}/inf/acpi.inf (100%) rename {reactos/media => media}/inf/cdrom.inf (100%) rename {reactos/media => media}/inf/cpu.inf (100%) rename {reactos/media => media}/inf/display.inf (100%) rename {reactos/media => media}/inf/fdc.inf (100%) rename {reactos/media => media}/inf/font.inf (100%) rename {reactos/media => media}/inf/hdc.inf (100%) rename {reactos/media => media}/inf/inf.rbuild (100%) rename {reactos/media => media}/inf/intl.inf (100%) rename {reactos/media => media}/inf/keyboard.inf (100%) rename {reactos/media => media}/inf/layout.inf (100%) rename {reactos/media => media}/inf/machine.inf (100%) rename {reactos/media => media}/inf/msmouse.inf (100%) rename {reactos/media => media}/inf/netamd.inf (100%) rename {reactos/media => media}/inf/netisa.inf (100%) rename {reactos/media => media}/inf/netrtpnt.inf (100%) rename {reactos/media => media}/inf/nettcpip.inf (100%) rename {reactos/media => media}/inf/ports.inf (100%) rename {reactos/media => media}/inf/scsi.inf (100%) rename {reactos/media => media}/inf/syssetup.inf.tpl (100%) rename {reactos/media => media}/inf/usb.inf (100%) rename {reactos/media => media}/inf/usbport.inf (100%) rename {reactos/media => media}/inf/usbstor.inf (100%) rename {reactos/media => media}/inf/xboxdisp.inf (100%) rename {reactos/media => media}/media.rbuild (100%) rename {reactos/media => media}/nls/c_037.nls (100%) rename {reactos/media => media}/nls/c_10000.nls (100%) rename {reactos/media => media}/nls/c_10006.nls (100%) rename {reactos/media => media}/nls/c_10007.nls (100%) rename {reactos/media => media}/nls/c_10029.nls (100%) rename {reactos/media => media}/nls/c_1006.nls (100%) rename {reactos/media => media}/nls/c_10079.nls (100%) rename {reactos/media => media}/nls/c_10081.nls (100%) rename {reactos/media => media}/nls/c_1026.nls (100%) rename {reactos/media => media}/nls/c_1250.nls (100%) rename {reactos/media => media}/nls/c_1251.nls (100%) rename {reactos/media => media}/nls/c_1252.nls (100%) rename {reactos/media => media}/nls/c_1253.nls (100%) rename {reactos/media => media}/nls/c_1254.nls (100%) rename {reactos/media => media}/nls/c_1255.nls (100%) rename {reactos/media => media}/nls/c_1256.nls (100%) rename {reactos/media => media}/nls/c_1257.nls (100%) rename {reactos/media => media}/nls/c_1258.nls (100%) rename {reactos/media => media}/nls/c_20866.nls (100%) rename {reactos/media => media}/nls/c_28591.nls (100%) rename {reactos/media => media}/nls/c_28592.nls (100%) rename {reactos/media => media}/nls/c_28593.nls (100%) rename {reactos/media => media}/nls/c_28594.nls (100%) rename {reactos/media => media}/nls/c_28595.nls (100%) rename {reactos/media => media}/nls/c_28596.nls (100%) rename {reactos/media => media}/nls/c_28597.nls (100%) rename {reactos/media => media}/nls/c_28598.nls (100%) rename {reactos/media => media}/nls/c_28599.nls (100%) rename {reactos/media => media}/nls/c_424.nls (100%) rename {reactos/media => media}/nls/c_437.nls (100%) rename {reactos/media => media}/nls/c_500.nls (100%) rename {reactos/media => media}/nls/c_737.nls (100%) rename {reactos/media => media}/nls/c_775.nls (100%) rename {reactos/media => media}/nls/c_850.nls (100%) rename {reactos/media => media}/nls/c_852.nls (100%) rename {reactos/media => media}/nls/c_855.nls (100%) rename {reactos/media => media}/nls/c_856.nls (100%) rename {reactos/media => media}/nls/c_857.nls (100%) rename {reactos/media => media}/nls/c_860.nls (100%) rename {reactos/media => media}/nls/c_861.nls (100%) rename {reactos/media => media}/nls/c_862.nls (100%) rename {reactos/media => media}/nls/c_863.nls (100%) rename {reactos/media => media}/nls/c_864.nls (100%) rename {reactos/media => media}/nls/c_865.nls (100%) rename {reactos/media => media}/nls/c_866.nls (100%) rename {reactos/media => media}/nls/c_869.nls (100%) rename {reactos/media => media}/nls/c_874.nls (100%) rename {reactos/media => media}/nls/c_875.nls (100%) rename {reactos/media => media}/nls/c_878.nls (100%) rename {reactos/media => media}/nls/c_932.nls (100%) rename {reactos/media => media}/nls/c_936.nls (100%) rename {reactos/media => media}/nls/c_949.nls (100%) rename {reactos/media => media}/nls/c_950.nls (100%) rename {reactos/media => media}/nls/l_intl.nls (100%) rename {reactos/media => media}/nls/nls.rbuild (100%) rename {reactos/media => media}/sounds/error.mp3 (100%) rename {reactos/media => media}/sounds/notice.mp3 (100%) rename {reactos/media => media}/vgafonts/437-8x8.bin (100%) rename {reactos/media => media}/vgafonts/737-8x8.bin (100%) rename {reactos/media => media}/vgafonts/775-8x8.bin (100%) rename {reactos/media => media}/vgafonts/850-8x8.bin (100%) rename {reactos/media => media}/vgafonts/852-8x8.bin (100%) rename {reactos/media => media}/vgafonts/865-8x8.bin (100%) rename {reactos/media => media}/vgafonts/866-8x8.bin (100%) rename {reactos/media => media}/vgafonts/vgafonts.rbuild (100%) rename {reactos/media => media}/wallpapers/wallpapers.txt (100%) rename {reactos/modules => modules}/directory.rbuild (100%) rename {reactos/modules => modules}/empty.rbuild (100%) rename {reactos/ntoskrnl => ntoskrnl}/Doxyfile (100%) rename {reactos/ntoskrnl => ntoskrnl}/KrnlFun.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/cc/cacheman.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/cc/copy.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/cc/fs.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/cc/mdl.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/cc/pin.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/cc/view.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/arm/cmhardwr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmalloc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmapi.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmboot.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmcheck.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmconfig.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmcontrl.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmdata.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmdelay.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmhook.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmindex.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cminit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmkcbncb.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmkeydel.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmlazy.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmmapvw.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmname.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmparse.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmse.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmsecach.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmsysini.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmvalche.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmvalue.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/cmwraprs.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/i386/cmhardwr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/ntapi.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/config/powerpc/cmhardwr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/dbgk/dbgkobj.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/dbgk/dbgkutil.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/atom.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/callback.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/dbgctrl.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/efi.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/event.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/evtpair.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/exintrin.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/fastinterlck.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/fmutex.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/handle.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/harderr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/hdlsterm.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/i386/fastinterlck_asm.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/i386/interlck_asm.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/i386/ioport.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/init.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/keyedevt.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/locale.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/lookas.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/mutant.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/powerpc/ioport.s (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/profile.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/pushlock.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/resource.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/rundown.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/sem.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/shutdown.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/sysinfo.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/time.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/timer.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/uuid.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/win32k.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/work.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/xipdisp.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ex/zone.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/dbcsname.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/fastio.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/faulttol.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/filelock.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/filter.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/filtrctx.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/fsfilter.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/fsrtlpc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/largemcb.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/name.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/notify.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/oplock.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/pnp.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/stackovf.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/tunnel.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fsrtl/unc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fstub/disksup.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fstub/fstubex.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/fstub/halstub.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/inbv.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/1.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/13.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/14.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/15.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/16.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/17.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/2.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/3.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/4.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/5.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/6.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/7.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/inbv/logo/8.bmp (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/config.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arch/intrin_i.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arch/ke.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arch/mm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arm/asmmacro.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arm/intrin_i.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arm/ke.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arm/ksarm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arm/kxarm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/arm/mm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/cc.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/cm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/cm_x.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/dbgk.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ex.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/fsrtl.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/hal.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/i386/asmmacro.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/i386/intrin_i.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/i386/ke.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/i386/mm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/i386/v86m.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/inbv.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/io.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/io_i.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/io_x.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/kbd.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/kd.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/kd64.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ke.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ke_x.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ldr.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/lpc.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/lpc_x.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/mm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ntoskrnl.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ob.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ob_x.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/pci.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/po.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/powerpc/intrin_i.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/powerpc/ke.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ps.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ps_i.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/ps_x.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/rtl.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/se.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/tag.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/test.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/internal/vdm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/include/ntoskrnl.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/adapter.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/arcname.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/bootlog.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/controller.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/device.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/deviface.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/driver.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/drvrlist.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/error.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/file.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/iocomp.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/ioevent.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/iofunc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/iomdl.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/iomgr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/iorsrce.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/iotimer.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/iowork.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/irp.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/irq.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/ramdisk.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/rawfs.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/remlock.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/symlink.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/util.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/iomgr/volume.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/pnpmgr/plugplay.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/pnpmgr/pnpdma.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/pnpmgr/pnpmgr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/pnpmgr/pnpnotify.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/pnpmgr/pnpreport.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/io/pnpmgr/pnproot.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd/i386/kdmemsup.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd/kdinit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd/kdio.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd/kdmain.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd/wrappers/bochs.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd/wrappers/gdbstub.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd/wrappers/gdbstub_powerpc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd/wrappers/kdbg.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd64/kdapi.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd64/kdbreak.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd64/kddata.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd64/kdinit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd64/kdlock.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd64/kdprint.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kd64/kdtrap.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/i386/dis-asm.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/i386/i386-dis.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/i386/kdb_help.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/i386/longjmp.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/i386/setjmp.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb_cli.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb_expr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb_keyboard.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb_serial.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/kdbg/kdb_symbols.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/apc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/boot.s (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/cpu.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/ctxswtch.s (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/exp.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/ke_i.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/kiinit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/stubs_asm.s (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/thrdini.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/time.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/trap.s (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/trapc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/arm/usercall.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/balmgr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/bug.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/clock.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/config.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/devqueue.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/dpc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/eventobj.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/except.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/freeldr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/gate.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/gmutex.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/abios.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/boot.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/cpu.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/ctxswitch.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/exp.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/irqobj.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/kiinit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/ldt.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/mtrr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/patpge.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/systimer.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/thrdini.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/trap.s (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/usercall.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/usercall_asm.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/v86m_sup.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/i386/v86vdm.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/ipi.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/krnlinit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/mutex.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/cpu.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/ctxhelp.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/ctxswitch.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/exp.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/kiinit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/main_asm.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/ppc_irq.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/stubs.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/systimer.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/powerpc/thrdini.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/procobj.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/profobj.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/queue.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/semphobj.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/spinlock.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/thrdobj.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/thrdschd.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/timerobj.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ke/wait.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/lpc/close.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/lpc/complete.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/lpc/connect.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/lpc/create.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/lpc/listen.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/lpc/port.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/lpc/reply.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/lpc/send.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/anonmem.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/arm/stubs.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/balance.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/cont.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/drvlck.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/elf.inc.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/elf32.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/elf64.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/freelist.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/i386/page.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/i386/pagepae.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/iospace.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/kmap.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/marea.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/mdlsup.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/mm.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/mminit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/mpw.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/ncache.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/npool.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/pagefile.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/pageop.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/pe.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/physical.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/pool.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/powerpc/page.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/powerpc/pfault.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/ppool.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/procsup.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/region.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/rmap.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/rpoolmgr.h (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/section.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/sysldr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/verifier.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/virtual.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/mm/wset.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ntkrnlmp.rbuild (100%) rename {reactos/ntoskrnl => ntoskrnl}/ntoskrnl-generic.rbuild (100%) rename {reactos/ntoskrnl => ntoskrnl}/ntoskrnl.rbuild (100%) rename {reactos/ntoskrnl => ntoskrnl}/ntoskrnl.rc (100%) rename {reactos/ntoskrnl => ntoskrnl}/ntoskrnl.spec (100%) rename {reactos/ntoskrnl => ntoskrnl}/ntoskrnl_arm.lnk (100%) rename {reactos/ntoskrnl => ntoskrnl}/ntoskrnl_i386.lnk (100%) rename {reactos/ntoskrnl => ntoskrnl}/ntoskrnl_powerpc.lnk (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/obdir.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/obhandle.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/obinit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/oblife.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/oblink.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/obname.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/obref.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/obsdcach.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/obsecure.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ob/obwait.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/po/events.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/po/power.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/arm/psctx.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/debug.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/i386/psctx.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/job.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/kill.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/process.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/psmgr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/psnotify.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/query.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/quota.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/security.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/state.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/thread.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/ps/win32.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/rtl/arm/rtlexcpt.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/rtl/i386/stack.S (100%) rename {reactos/ntoskrnl => ntoskrnl}/rtl/libsupp.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/rtl/misc.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/access.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/acl.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/audit.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/lsa.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/priv.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/sd.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/semgr.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/sid.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/se/token.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/sysfuncs.lst (100%) rename {reactos/ntoskrnl => ntoskrnl}/tests/TestDebug.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/tests/TestTimer.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/tests/fsrtl.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/tests/setup.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/tests/stubs.tst (100%) rename {reactos/ntoskrnl => ntoskrnl}/tests/symtest.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/tests/tests/VirtualMemory.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/vdm/vdmexec.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/vdm/vdmmain.c (100%) rename {reactos/ntoskrnl => ntoskrnl}/wmi/wmi.c (100%) rename reactos/proxy.mak => proxy.mak (100%) delete mode 100644 reactos/base/applications/cacls/lang/.gitignore delete mode 100644 reactos/base/applications/calc/lang/.gitignore delete mode 100644 reactos/base/applications/cmdutils/.gitignore delete mode 100644 reactos/base/applications/tsclient/.gitignore delete mode 100644 reactos/base/applications/tsclient/mstsc/.gitignore delete mode 100644 reactos/base/applications/tsclient/mstscax/.gitignore delete mode 100644 reactos/base/applications/tsclient/porting-tools/.gitignore delete mode 100644 reactos/base/setup/.gitignore delete mode 100644 reactos/base/shell/.gitignore delete mode 100644 reactos/base/system/.gitignore delete mode 100644 reactos/dll/3rdparty/.gitignore delete mode 100644 reactos/dll/win32/.gitignore delete mode 100644 reactos/dll/win32/browseui/.gitignore delete mode 100644 reactos/dll/win32/netshell/lang/.gitignore delete mode 100644 reactos/dll/win32/odbccp32/.gitignore delete mode 100644 reactos/dll/win32/powrprof/.gitignore delete mode 100644 reactos/drivers/ksfilter/swenum/.gitignore delete mode 100644 reactos/drivers/multimedia/portcls.NEW/adapter.c delete mode 100644 reactos/drivers/multimedia/portcls.NEW/dll.c delete mode 100644 reactos/drivers/multimedia/portcls.NEW/drm.c delete mode 100644 reactos/drivers/multimedia/portcls.NEW/portcls.c delete mode 100644 reactos/drivers/multimedia/portcls.NEW/portcls.def delete mode 100644 reactos/drivers/multimedia/portcls.NEW/portcls.h delete mode 100644 reactos/drivers/multimedia/portcls.NEW/portcls.rbuild delete mode 100644 reactos/drivers/multimedia/portcls.NEW/stubs.c delete mode 100644 reactos/drivers/multimedia/x/allocators.c delete mode 100644 reactos/drivers/multimedia/x/clocks.c delete mode 100644 reactos/drivers/multimedia/x/connectivity.c delete mode 100644 reactos/drivers/multimedia/x/events.c delete mode 100644 reactos/drivers/multimedia/x/irp.c delete mode 100644 reactos/drivers/multimedia/x/ks.def delete mode 100644 reactos/drivers/multimedia/x/ks.rbuild delete mode 100644 reactos/drivers/multimedia/x/ks.rc delete mode 100644 reactos/drivers/multimedia/x/methods.c delete mode 100644 reactos/drivers/multimedia/x/misc.c delete mode 100644 reactos/drivers/multimedia/x/properties.c delete mode 100644 reactos/drivers/multimedia/x/topology.c delete mode 100644 reactos/drivers/multimedia/x/worker.c delete mode 100644 reactos/drivers/parallel/parclass/.gitignore delete mode 100644 reactos/drivers/parallel/parport/.gitignore delete mode 100644 reactos/drivers/storage/classpnp/.gitignore delete mode 100644 reactos/drivers/storage/fdc/fdc/.gitignore delete mode 100644 reactos/drivers/storage/fdc/flpydisk/.gitignore delete mode 100644 reactos/drivers/wdm/audio/backpln/adapters/dmusic/.gitignore delete mode 100644 reactos/drivers/wdm/audio/backpln/portcls/portcls.rc delete mode 100644 reactos/drivers/wdm/audio/filters/kmixer/.gitignore delete mode 100644 reactos/drivers/wdm/audio/filters/splitter/.gitignore delete mode 100644 reactos/drivers/wdm/audio/filters/swmidi/.gitignore delete mode 100644 reactos/drivers/wdm/audio/sysaudio/.gitignore delete mode 100644 reactos/include/dxsdk/DShowIDL/.gitignore delete mode 100644 reactos/include/reactos/chew/chew/.gitignore delete mode 100644 reactos/include/reactos/drivers/drivers/.gitignore delete mode 100644 reactos/include/reactos/elf/elf/.gitignore delete mode 100644 reactos/lib/3rdparty/.gitignore delete mode 100644 reactos/subsystems/.gitignore delete mode 100644 reactos/subsystems/win32/.gitignore delete mode 100644 reactos/tools/bin2c.c delete mode 100644 reactos/tools/bin2c.mak delete mode 100644 reactos/tools/buildno/buildno.cpp delete mode 100644 reactos/tools/buildno/buildno.mak delete mode 100644 reactos/tools/buildno/pch.h delete mode 100755 reactos/tools/cabman/cabinet.cxx delete mode 100755 reactos/tools/cabman/cabinet.h delete mode 100755 reactos/tools/cabman/cabman.h delete mode 100644 reactos/tools/cabman/cabman.rbuild delete mode 100755 reactos/tools/cabman/dff.txt delete mode 100755 reactos/tools/cabman/dfp.cxx delete mode 100755 reactos/tools/cabman/dfp.h delete mode 100755 reactos/tools/cabman/main.cxx delete mode 100755 reactos/tools/cabman/makefile.win32 delete mode 100755 reactos/tools/cabman/mszip.cxx delete mode 100755 reactos/tools/cabman/mszip.h delete mode 100755 reactos/tools/cabman/raw.cxx delete mode 100755 reactos/tools/cabman/raw.h delete mode 100644 reactos/tools/cdmake/cdmake.c delete mode 100644 reactos/tools/cdmake/cdmake.rbuild delete mode 100644 reactos/tools/cdmake/llmosrt.c delete mode 100644 reactos/tools/cdmake/readme.txt delete mode 100644 reactos/tools/create_nls/Readme delete mode 100644 reactos/tools/create_nls/create_nls.c delete mode 100644 reactos/tools/create_nls/unicode.org/ReactOS/ReadMe delete mode 100644 reactos/tools/create_nls/unicode.org/ReactOS/ibmcp861.diff delete mode 100644 reactos/tools/dumpstab.c delete mode 100644 reactos/tools/gendib/gendib.c delete mode 100644 reactos/tools/gendib/gendib.mak delete mode 100644 reactos/tools/mkconfig.c delete mode 100644 reactos/tools/mkhive/binhive.c delete mode 100644 reactos/tools/mkhive/binhive.h delete mode 100644 reactos/tools/mkhive/cmi.c delete mode 100644 reactos/tools/mkhive/cmi.h delete mode 100644 reactos/tools/mkhive/mkhive.c delete mode 100644 reactos/tools/mkhive/mkhive.h delete mode 100644 reactos/tools/mkhive/mkhive.rbuild delete mode 100644 reactos/tools/mkhive/reginf.c delete mode 100644 reactos/tools/mkhive/reginf.h delete mode 100644 reactos/tools/mkhive/registry.c delete mode 100644 reactos/tools/mkhive/registry.h delete mode 100644 reactos/tools/mkhive/rtl.c delete mode 100644 reactos/tools/ms2ps/ms2ps.cpp delete mode 100644 reactos/tools/nci/nci.mak delete mode 100644 reactos/tools/nci/ncitool.c delete mode 100644 reactos/tools/ofw_interface/calls.ofw delete mode 100644 reactos/tools/ofw_interface/ofw_interface.cpp delete mode 100644 reactos/tools/ofw_interface/ofw_interface.mak delete mode 100644 reactos/tools/pefixup.c delete mode 100644 reactos/tools/pefixup.mak delete mode 100644 reactos/tools/pipetools/piperead.cpp delete mode 100644 reactos/tools/pipetools/pipespy.cpp delete mode 100644 reactos/tools/pipetools/pipetunnel.cpp delete mode 100644 reactos/tools/raddr2line.c delete mode 100644 reactos/tools/raddr2line.mak delete mode 100644 reactos/tools/rbuild/automaticdependency.cpp delete mode 100644 reactos/tools/rbuild/autoregister.cpp delete mode 100644 reactos/tools/rbuild/backend/backend.cpp delete mode 100644 reactos/tools/rbuild/backend/backend.h delete mode 100644 reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp delete mode 100644 reactos/tools/rbuild/backend/codeblocks/codeblocks.h delete mode 100644 reactos/tools/rbuild/backend/dependencymap/dependencymap.cpp delete mode 100644 reactos/tools/rbuild/backend/dependencymap/dependencymap.h delete mode 100644 reactos/tools/rbuild/backend/devcpp/devcpp.cpp delete mode 100644 reactos/tools/rbuild/backend/devcpp/devcpp.h delete mode 100644 reactos/tools/rbuild/backend/mingw/mingw.cpp delete mode 100644 reactos/tools/rbuild/backend/mingw/mingw.h delete mode 100644 reactos/tools/rbuild/backend/mingw/modulehandler.cpp delete mode 100644 reactos/tools/rbuild/backend/mingw/modulehandler.h delete mode 100644 reactos/tools/rbuild/backend/mingw/pch_detection.h delete mode 100644 reactos/tools/rbuild/backend/mingw/pipe_detection.c delete mode 100644 reactos/tools/rbuild/backend/mingw/proxymakefile.cpp delete mode 100644 reactos/tools/rbuild/backend/mingw/rule.cpp delete mode 100644 reactos/tools/rbuild/backend/mingw/rule.h delete mode 100644 reactos/tools/rbuild/backend/msbuild/msbuild.cpp delete mode 100644 reactos/tools/rbuild/backend/msbuild/msbuild.h delete mode 100644 reactos/tools/rbuild/backend/msvc/genguid.cpp delete mode 100644 reactos/tools/rbuild/backend/msvc/msvc.cpp delete mode 100644 reactos/tools/rbuild/backend/msvc/msvc.h delete mode 100644 reactos/tools/rbuild/backend/msvc/msvcmaker.cpp delete mode 100644 reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp delete mode 100644 reactos/tools/rbuild/backend/versionreport/versionreport.cpp delete mode 100644 reactos/tools/rbuild/backend/versionreport/versionreport.h delete mode 100644 reactos/tools/rbuild/bootstrap.cpp delete mode 100644 reactos/tools/rbuild/cdfile.cpp delete mode 100644 reactos/tools/rbuild/compilationunit.cpp delete mode 100644 reactos/tools/rbuild/compilationunitsupportcode.cpp delete mode 100644 reactos/tools/rbuild/compilerflag.cpp delete mode 100644 reactos/tools/rbuild/configuration.cpp delete mode 100644 reactos/tools/rbuild/define.cpp delete mode 100644 reactos/tools/rbuild/directory.cpp delete mode 100644 reactos/tools/rbuild/doc/rbuild.dbk delete mode 100644 reactos/tools/rbuild/doc/rbuild.txt delete mode 100644 reactos/tools/rbuild/empty.def delete mode 100644 reactos/tools/rbuild/exception.cpp delete mode 100644 reactos/tools/rbuild/exception.h delete mode 100644 reactos/tools/rbuild/filesupportcode.cpp delete mode 100644 reactos/tools/rbuild/global.cpp delete mode 100644 reactos/tools/rbuild/include.cpp delete mode 100644 reactos/tools/rbuild/installfile.cpp delete mode 100644 reactos/tools/rbuild/linkerflag.cpp delete mode 100644 reactos/tools/rbuild/linkerscript.cpp delete mode 100644 reactos/tools/rbuild/makefile delete mode 100644 reactos/tools/rbuild/module.cpp delete mode 100644 reactos/tools/rbuild/pch.h delete mode 100644 reactos/tools/rbuild/project.cpp delete mode 100644 reactos/tools/rbuild/project.dtd delete mode 100644 reactos/tools/rbuild/rbuild.cpp delete mode 100644 reactos/tools/rbuild/rbuild.dsp delete mode 100644 reactos/tools/rbuild/rbuild.dsw delete mode 100644 reactos/tools/rbuild/rbuild.h delete mode 100644 reactos/tools/rbuild/rbuild.mak delete mode 100644 reactos/tools/rbuild/rbuild.sln delete mode 100644 reactos/tools/rbuild/rbuild.vcproj delete mode 100644 reactos/tools/rbuild/stubbedcomponent.cpp delete mode 100644 reactos/tools/rbuild/syssetupgenerator.cpp delete mode 100644 reactos/tools/rbuild/test.h delete mode 100644 reactos/tools/rbuild/tests/alltests.cpp delete mode 100644 reactos/tools/rbuild/tests/cdfiletest.cpp delete mode 100644 reactos/tools/rbuild/tests/compilationunittest.cpp delete mode 100644 reactos/tools/rbuild/tests/data/automaticdependency.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/automaticdependency_include.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/cdfile.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/compilationunit.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/define.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/if.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/include.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/invoke.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/linkerflag.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/module.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/project.rbuild delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile1.c delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile1/sourcefile1_header3.h delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile1/sourcefile_includenext.h delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile1_header1.h delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile1_header2.h delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile1_recurse.h delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile_include.c delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile_include.h delete mode 100644 reactos/tools/rbuild/tests/data/sourcefile_includenext.h delete mode 100644 reactos/tools/rbuild/tests/data/symbol.rbuild delete mode 100644 reactos/tools/rbuild/tests/definetest.cpp delete mode 100644 reactos/tools/rbuild/tests/functiontest.cpp delete mode 100644 reactos/tools/rbuild/tests/iftest.cpp delete mode 100644 reactos/tools/rbuild/tests/includetest.cpp delete mode 100644 reactos/tools/rbuild/tests/invoketest.cpp delete mode 100644 reactos/tools/rbuild/tests/linkerflagtest.cpp delete mode 100644 reactos/tools/rbuild/tests/moduletest.cpp delete mode 100644 reactos/tools/rbuild/tests/projecttest.cpp delete mode 100644 reactos/tools/rbuild/tests/sourcefiletest.cpp delete mode 100644 reactos/tools/rbuild/tests/symboltest.cpp delete mode 100644 reactos/tools/rbuild/testsupportcode.cpp delete mode 100644 reactos/tools/rbuild/xmlnode.cpp delete mode 100644 reactos/tools/regtests2xml/regtests2xml.c delete mode 100755 reactos/tools/rgenstat/llmosrt.c delete mode 100644 reactos/tools/rgenstat/module_list.txt delete mode 100755 reactos/tools/rgenstat/rgenstat.c delete mode 100644 reactos/tools/rgenstat/rgenstat.rbuild delete mode 100755 reactos/tools/rgenstat/web/c.gif delete mode 100755 reactos/tools/rgenstat/web/f.gif delete mode 100755 reactos/tools/rgenstat/web/i.gif delete mode 100644 reactos/tools/rgenstat/web/index.html delete mode 100755 reactos/tools/rgenstat/web/rapistatus.css delete mode 100755 reactos/tools/rgenstat/web/rapistatus.js delete mode 100755 reactos/tools/rgenstat/web/rapistatus.xsl delete mode 100755 reactos/tools/rgenstat/web/sc.gif delete mode 100755 reactos/tools/rgenstat/web/tb.gif delete mode 100755 reactos/tools/rgenstat/web/tm.gif delete mode 100755 reactos/tools/rgenstat/web/tp.gif delete mode 100755 reactos/tools/rgenstat/web/u.gif delete mode 100644 reactos/tools/rsym.c delete mode 100644 reactos/tools/rsym.h delete mode 100644 reactos/tools/rsym.mak delete mode 100644 reactos/tools/rsym_common.c delete mode 100644 reactos/tools/ssprintf.cpp delete mode 100644 reactos/tools/ssprintf.h delete mode 100644 reactos/tools/stubgen.c delete mode 100644 reactos/tools/tools.mak delete mode 100644 reactos/tools/tools.rbuild delete mode 100644 reactos/tools/unicode/Makefile.in delete mode 100644 reactos/tools/unicode/c_037.c delete mode 100644 reactos/tools/unicode/c_10000.c delete mode 100644 reactos/tools/unicode/c_10006.c delete mode 100644 reactos/tools/unicode/c_10007.c delete mode 100644 reactos/tools/unicode/c_10029.c delete mode 100644 reactos/tools/unicode/c_1006.c delete mode 100644 reactos/tools/unicode/c_10079.c delete mode 100644 reactos/tools/unicode/c_10081.c delete mode 100644 reactos/tools/unicode/c_1026.c delete mode 100644 reactos/tools/unicode/c_1250.c delete mode 100644 reactos/tools/unicode/c_1251.c delete mode 100644 reactos/tools/unicode/c_1252.c delete mode 100644 reactos/tools/unicode/c_1253.c delete mode 100644 reactos/tools/unicode/c_1254.c delete mode 100644 reactos/tools/unicode/c_1255.c delete mode 100644 reactos/tools/unicode/c_1256.c delete mode 100644 reactos/tools/unicode/c_1257.c delete mode 100644 reactos/tools/unicode/c_1258.c delete mode 100644 reactos/tools/unicode/c_20866.c delete mode 100644 reactos/tools/unicode/c_20932.c delete mode 100644 reactos/tools/unicode/c_21866.c delete mode 100644 reactos/tools/unicode/c_28591.c delete mode 100644 reactos/tools/unicode/c_28592.c delete mode 100644 reactos/tools/unicode/c_28593.c delete mode 100644 reactos/tools/unicode/c_28594.c delete mode 100644 reactos/tools/unicode/c_28595.c delete mode 100644 reactos/tools/unicode/c_28596.c delete mode 100644 reactos/tools/unicode/c_28597.c delete mode 100644 reactos/tools/unicode/c_28598.c delete mode 100644 reactos/tools/unicode/c_28599.c delete mode 100644 reactos/tools/unicode/c_28600.c delete mode 100644 reactos/tools/unicode/c_28603.c delete mode 100644 reactos/tools/unicode/c_28604.c delete mode 100644 reactos/tools/unicode/c_28605.c delete mode 100644 reactos/tools/unicode/c_28606.c delete mode 100644 reactos/tools/unicode/c_424.c delete mode 100644 reactos/tools/unicode/c_437.c delete mode 100644 reactos/tools/unicode/c_500.c delete mode 100644 reactos/tools/unicode/c_737.c delete mode 100644 reactos/tools/unicode/c_775.c delete mode 100644 reactos/tools/unicode/c_850.c delete mode 100644 reactos/tools/unicode/c_852.c delete mode 100644 reactos/tools/unicode/c_855.c delete mode 100644 reactos/tools/unicode/c_856.c delete mode 100644 reactos/tools/unicode/c_857.c delete mode 100644 reactos/tools/unicode/c_860.c delete mode 100644 reactos/tools/unicode/c_861.c delete mode 100644 reactos/tools/unicode/c_862.c delete mode 100644 reactos/tools/unicode/c_863.c delete mode 100644 reactos/tools/unicode/c_864.c delete mode 100644 reactos/tools/unicode/c_865.c delete mode 100644 reactos/tools/unicode/c_866.c delete mode 100644 reactos/tools/unicode/c_869.c delete mode 100644 reactos/tools/unicode/c_874.c delete mode 100644 reactos/tools/unicode/c_875.c delete mode 100644 reactos/tools/unicode/c_878.c delete mode 100644 reactos/tools/unicode/c_932.c delete mode 100644 reactos/tools/unicode/c_936.c delete mode 100644 reactos/tools/unicode/c_949.c delete mode 100644 reactos/tools/unicode/c_950.c delete mode 100644 reactos/tools/unicode/casemap.c delete mode 100644 reactos/tools/unicode/collation.c delete mode 100644 reactos/tools/unicode/compose.c delete mode 100644 reactos/tools/unicode/cpmap.pl delete mode 100644 reactos/tools/unicode/cptable.c delete mode 100644 reactos/tools/unicode/defaults delete mode 100644 reactos/tools/unicode/fold.c delete mode 100644 reactos/tools/unicode/mbtowc.c delete mode 100644 reactos/tools/unicode/sortkey.c delete mode 100644 reactos/tools/unicode/string.c delete mode 100644 reactos/tools/unicode/unicode.rbuild delete mode 100644 reactos/tools/unicode/utf8.c delete mode 100644 reactos/tools/unicode/wctomb.c delete mode 100644 reactos/tools/unicode/wctype.c delete mode 100644 reactos/tools/unicode/wine/unicode.h delete mode 100644 reactos/tools/unicode/wine_unicode.def delete mode 100644 reactos/tools/widl/client.c delete mode 100644 reactos/tools/widl/hash.c delete mode 100644 reactos/tools/widl/hash.h delete mode 100644 reactos/tools/widl/header.c delete mode 100644 reactos/tools/widl/header.h delete mode 100644 reactos/tools/widl/parser.h delete mode 100644 reactos/tools/widl/parser.l delete mode 100644 reactos/tools/widl/parser.tab.c delete mode 100644 reactos/tools/widl/parser.tab.h delete mode 100644 reactos/tools/widl/parser.y delete mode 100644 reactos/tools/widl/parser.yy.c delete mode 100644 reactos/tools/widl/port/mkstemps.c delete mode 100644 reactos/tools/widl/proxy.c delete mode 100644 reactos/tools/widl/server.c delete mode 100644 reactos/tools/widl/typegen.c delete mode 100644 reactos/tools/widl/typegen.h delete mode 100644 reactos/tools/widl/typelib.c delete mode 100644 reactos/tools/widl/typelib.h delete mode 100644 reactos/tools/widl/typelib_struct.h delete mode 100644 reactos/tools/widl/utils.c delete mode 100644 reactos/tools/widl/utils.h delete mode 100644 reactos/tools/widl/widl.c delete mode 100644 reactos/tools/widl/widl.h delete mode 100644 reactos/tools/widl/widl.rbuild delete mode 100644 reactos/tools/widl/widl_ros.diff delete mode 100644 reactos/tools/widl/widltypes.h delete mode 100644 reactos/tools/widl/write_msft.c delete mode 100644 reactos/tools/winebuild/Makefile.in delete mode 100644 reactos/tools/winebuild/build.h delete mode 100644 reactos/tools/winebuild/import.c delete mode 100644 reactos/tools/winebuild/main.c delete mode 100644 reactos/tools/winebuild/mkstemps.c delete mode 100644 reactos/tools/winebuild/parser.c delete mode 100644 reactos/tools/winebuild/relay.c delete mode 100644 reactos/tools/winebuild/res16.c delete mode 100644 reactos/tools/winebuild/res32.c delete mode 100644 reactos/tools/winebuild/spec16.c delete mode 100644 reactos/tools/winebuild/spec32.c delete mode 100644 reactos/tools/winebuild/utils.c delete mode 100644 reactos/tools/winebuild/winebuild.man.in delete mode 100644 reactos/tools/winebuild/winebuild.rbuild delete mode 100644 reactos/tools/winebuild/winglue.h delete mode 100644 reactos/tools/wmc/CHANGES delete mode 100644 reactos/tools/wmc/lang.c delete mode 100644 reactos/tools/wmc/lang.h delete mode 100644 reactos/tools/wmc/mcl.c delete mode 100644 reactos/tools/wmc/mcy.tab.c delete mode 100644 reactos/tools/wmc/mcy.tab.h delete mode 100644 reactos/tools/wmc/mcy.y delete mode 100644 reactos/tools/wmc/utils.c delete mode 100644 reactos/tools/wmc/utils.h delete mode 100644 reactos/tools/wmc/wmc.c delete mode 100644 reactos/tools/wmc/wmc.h delete mode 100644 reactos/tools/wmc/wmc.rbuild delete mode 100644 reactos/tools/wmc/wmctypes.h delete mode 100644 reactos/tools/wmc/write.c delete mode 100644 reactos/tools/wmc/write.h delete mode 100644 reactos/tools/wpp/lex.yy.c delete mode 100644 reactos/tools/wpp/ppl.l delete mode 100644 reactos/tools/wpp/ppy.tab.c delete mode 100644 reactos/tools/wpp/ppy.tab.h delete mode 100644 reactos/tools/wpp/ppy.y delete mode 100644 reactos/tools/wpp/preproc.c delete mode 100644 reactos/tools/wpp/wpp.c delete mode 100644 reactos/tools/wpp/wpp.rbuild delete mode 100644 reactos/tools/wpp/wpp_private.h delete mode 100644 reactos/tools/wpp/wpp_ros.diff delete mode 100644 reactos/tools/wrc/CHANGES delete mode 100644 reactos/tools/wrc/dumpres.c delete mode 100644 reactos/tools/wrc/dumpres.h delete mode 100644 reactos/tools/wrc/genres.c delete mode 100644 reactos/tools/wrc/genres.h delete mode 100644 reactos/tools/wrc/lex.yy.c delete mode 100644 reactos/tools/wrc/newstruc.c delete mode 100644 reactos/tools/wrc/newstruc.h delete mode 100644 reactos/tools/wrc/parser.h delete mode 100644 reactos/tools/wrc/parser.l delete mode 100644 reactos/tools/wrc/parser.tab.c delete mode 100644 reactos/tools/wrc/parser.tab.h delete mode 100644 reactos/tools/wrc/parser.y delete mode 100644 reactos/tools/wrc/port/mkstemps.c delete mode 100644 reactos/tools/wrc/readres.c delete mode 100644 reactos/tools/wrc/readres.h delete mode 100644 reactos/tools/wrc/translation.c delete mode 100644 reactos/tools/wrc/utils.c delete mode 100644 reactos/tools/wrc/utils.h delete mode 100644 reactos/tools/wrc/wrc.c delete mode 100644 reactos/tools/wrc/wrc.doc delete mode 100644 reactos/tools/wrc/wrc.h delete mode 100644 reactos/tools/wrc/wrc.rbuild delete mode 100644 reactos/tools/wrc/wrcrostypes.h delete mode 100644 reactos/tools/wrc/wrctypes.h delete mode 100644 reactos/tools/wrc/writeres.c delete mode 100644 reactos/tools/xml.cpp delete mode 100644 reactos/tools/xml.h delete mode 100644 rosapps/Doxyfile delete mode 100644 rosapps/applications/applications.rbuild delete mode 100644 rosapps/applications/cmdutils/appwiz/appwiz.c delete mode 100644 rosapps/applications/cmdutils/appwiz/appwiz.rbuild delete mode 100644 rosapps/applications/cmdutils/appwiz/appwiz.rc delete mode 100644 rosapps/applications/cmdutils/cmdutils.rbuild delete mode 100644 rosapps/applications/cmdutils/comp/comp.c delete mode 100644 rosapps/applications/cmdutils/comp/comp.rbuild delete mode 100644 rosapps/applications/cmdutils/comp/comp.rc delete mode 100644 rosapps/applications/cmdutils/mode/mode.c delete mode 100644 rosapps/applications/cmdutils/mode/mode.rbuild delete mode 100644 rosapps/applications/cmdutils/mode/mode.rc delete mode 100644 rosapps/applications/cmdutils/sort/sort.c delete mode 100644 rosapps/applications/cmdutils/sort/sort.rbuild delete mode 100644 rosapps/applications/cmdutils/sort/sort.rc delete mode 100644 rosapps/applications/cmdutils/tee/tee.c delete mode 100644 rosapps/applications/cmdutils/tee/tee.rbuild delete mode 100644 rosapps/applications/cmdutils/tee/tee.rc delete mode 100644 rosapps/applications/cmdutils/touch/err.c delete mode 100644 rosapps/applications/cmdutils/touch/err.h delete mode 100644 rosapps/applications/cmdutils/touch/touch.c delete mode 100644 rosapps/applications/cmdutils/touch/touch.rbuild delete mode 100644 rosapps/applications/cmdutils/touch/touch.rc delete mode 100644 rosapps/applications/cmdutils/touch/various.h delete mode 100644 rosapps/applications/cmdutils/uptime/uptime.c delete mode 100644 rosapps/applications/cmdutils/uptime/uptime.rbuild delete mode 100644 rosapps/applications/cmdutils/uptime/uptime.rc delete mode 100644 rosapps/applications/cmdutils/y/y.c delete mode 100644 rosapps/applications/cmdutils/y/y.rbuild delete mode 100644 rosapps/applications/cmdutils/y/y.rc delete mode 100644 rosapps/applications/devutils/cputointel/AnyalsingProcess.c delete mode 100644 rosapps/applications/devutils/cputointel/ConvertToIA32Process.c delete mode 100644 rosapps/applications/devutils/cputointel/ConvertToPPCProcess.c delete mode 100644 rosapps/applications/devutils/cputointel/ConvertingProcess.c delete mode 100644 rosapps/applications/devutils/cputointel/CpuToIntel.c delete mode 100644 rosapps/applications/devutils/cputointel/From/ARM/ARM.h delete mode 100644 rosapps/applications/devutils/cputointel/From/ARM/ARMBrain.c delete mode 100644 rosapps/applications/devutils/cputointel/From/ARM/ARMBrain.h delete mode 100644 rosapps/applications/devutils/cputointel/From/ARM/ARMopcode.c delete mode 100644 rosapps/applications/devutils/cputointel/From/IA32/IA32.h delete mode 100644 rosapps/applications/devutils/cputointel/From/IA32/IA32Brain.c delete mode 100644 rosapps/applications/devutils/cputointel/From/IA32/IA32Brain.h delete mode 100644 rosapps/applications/devutils/cputointel/From/IA32/IA32opcode.c delete mode 100644 rosapps/applications/devutils/cputointel/From/PPC/PPC.h delete mode 100644 rosapps/applications/devutils/cputointel/From/PPC/PPCBrain.c delete mode 100644 rosapps/applications/devutils/cputointel/From/PPC/PPCBrain.h delete mode 100644 rosapps/applications/devutils/cputointel/From/PPC/PPCopcode.c delete mode 100644 rosapps/applications/devutils/cputointel/From/dummycpu/Dummy.h delete mode 100644 rosapps/applications/devutils/cputointel/From/dummycpu/DummyBrain.c delete mode 100644 rosapps/applications/devutils/cputointel/From/dummycpu/DummyBrain.h delete mode 100644 rosapps/applications/devutils/cputointel/From/dummycpu/Dummyopcode.c delete mode 100644 rosapps/applications/devutils/cputointel/From/m68k/M68kBrain.c delete mode 100644 rosapps/applications/devutils/cputointel/From/m68k/M68kBrain.h delete mode 100644 rosapps/applications/devutils/cputointel/From/m68k/M68kopcode.c delete mode 100644 rosapps/applications/devutils/cputointel/From/m68k/m68k.h delete mode 100644 rosapps/applications/devutils/cputointel/ImageLoader.c delete mode 100644 rosapps/applications/devutils/cputointel/OpCodePPC.txt delete mode 100644 rosapps/applications/devutils/cputointel/ReadMe.txt delete mode 100644 rosapps/applications/devutils/cputointel/any_op.h delete mode 100644 rosapps/applications/devutils/cputointel/cputointel.rbuild delete mode 100644 rosapps/applications/devutils/cputointel/misc.c delete mode 100644 rosapps/applications/devutils/cputointel/misc.h delete mode 100644 rosapps/applications/devutils/directory.rbuild delete mode 100644 rosapps/applications/devutils/gdb2/README delete mode 100644 rosapps/applications/devutils/gdb2/gdb2.cpp delete mode 100644 rosapps/applications/devutils/gdb2/gdb2.rbuild delete mode 100644 rosapps/applications/devutils/gdb2/ph.h delete mode 100644 rosapps/applications/devutils/gdihv/gdi.h delete mode 100644 rosapps/applications/devutils/gdihv/gdihv.c delete mode 100644 rosapps/applications/devutils/gdihv/gdihv.h delete mode 100644 rosapps/applications/devutils/gdihv/gdihv.rbuild delete mode 100644 rosapps/applications/devutils/gdihv/gdihv.rc delete mode 100644 rosapps/applications/devutils/gdihv/handlelist.c delete mode 100644 rosapps/applications/devutils/gdihv/handlelist.h delete mode 100644 rosapps/applications/devutils/gdihv/mainwnd.c delete mode 100644 rosapps/applications/devutils/gdihv/mainwnd.h delete mode 100644 rosapps/applications/devutils/gdihv/proclist.c delete mode 100644 rosapps/applications/devutils/gdihv/proclist.h delete mode 100644 rosapps/applications/devutils/gdihv/resource.h delete mode 100644 rosapps/applications/devutils/gdihv/system.ico delete mode 100644 rosapps/applications/devutils/genguid/genguid.c delete mode 100644 rosapps/applications/devutils/genguid/genguid.rbuild delete mode 100644 rosapps/applications/devutils/genguid/genguid.rc delete mode 100644 rosapps/applications/devutils/roswebparser/Windows28591.h delete mode 100644 rosapps/applications/devutils/roswebparser/Windows28592.h delete mode 100644 rosapps/applications/devutils/roswebparser/oem437.h delete mode 100644 rosapps/applications/devutils/roswebparser/oem850.h delete mode 100644 rosapps/applications/devutils/roswebparser/roswebparser.c delete mode 100644 rosapps/applications/devutils/roswebparser/roswebparser.rbuild delete mode 100644 rosapps/applications/devutils/roswebparser/utf8.c delete mode 100644 rosapps/applications/devutils/symdump/symdump.c delete mode 100644 rosapps/applications/devutils/symdump/symdump.rbuild delete mode 100644 rosapps/applications/devutils/syscalldump/syscalldump.c delete mode 100644 rosapps/applications/devutils/syscalldump/syscalldump.rbuild delete mode 100644 rosapps/applications/devutils/vgafontedit/aboutdlg.c delete mode 100644 rosapps/applications/devutils/vgafontedit/customwndclasses.h delete mode 100644 rosapps/applications/devutils/vgafontedit/editglyphdlg.c delete mode 100644 rosapps/applications/devutils/vgafontedit/fileformats.txt delete mode 100644 rosapps/applications/devutils/vgafontedit/fontboxeswnd.c delete mode 100644 rosapps/applications/devutils/vgafontedit/fontwnd.c delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/bg-BG.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/de-DE.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/en-US.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/es-ES.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/fr-FR.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/it-IT.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/no-NO.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/pl-PL.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/ru-RU.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/lang/uk-UA.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/main.c delete mode 100644 rosapps/applications/devutils/vgafontedit/main.rc delete mode 100644 rosapps/applications/devutils/vgafontedit/mainwnd.c delete mode 100644 rosapps/applications/devutils/vgafontedit/misc.c delete mode 100644 rosapps/applications/devutils/vgafontedit/opensave.c delete mode 100644 rosapps/applications/devutils/vgafontedit/precomp.h delete mode 100644 rosapps/applications/devutils/vgafontedit/res/doc.ico delete mode 100644 rosapps/applications/devutils/vgafontedit/res/main.ico delete mode 100644 rosapps/applications/devutils/vgafontedit/res/toolbar.bmp delete mode 100644 rosapps/applications/devutils/vgafontedit/res/toolbox.bmp delete mode 100644 rosapps/applications/devutils/vgafontedit/resource.h delete mode 100644 rosapps/applications/devutils/vgafontedit/vgafontedit.rbuild delete mode 100644 rosapps/applications/devutils/zoomin/framewnd.c delete mode 100644 rosapps/applications/devutils/zoomin/framewnd.h delete mode 100644 rosapps/applications/devutils/zoomin/lang/en-US.rc delete mode 100644 rosapps/applications/devutils/zoomin/lang/no-NO.rc delete mode 100644 rosapps/applications/devutils/zoomin/lang/sk-SK.rc delete mode 100644 rosapps/applications/devutils/zoomin/main.c delete mode 100644 rosapps/applications/devutils/zoomin/main.h delete mode 100644 rosapps/applications/devutils/zoomin/resource.h delete mode 100644 rosapps/applications/devutils/zoomin/zoomin.ico delete mode 100644 rosapps/applications/devutils/zoomin/zoomin.rbuild delete mode 100644 rosapps/applications/devutils/zoomin/zoomin.rc delete mode 100644 rosapps/applications/downloader/download.c delete mode 100644 rosapps/applications/downloader/downloader.rbuild delete mode 100644 rosapps/applications/downloader/downloader.rc delete mode 100644 rosapps/applications/downloader/downloader.xml delete mode 100644 rosapps/applications/downloader/lang/bg-BG.rc delete mode 100644 rosapps/applications/downloader/lang/de-DE.rc delete mode 100644 rosapps/applications/downloader/lang/en-US.rc delete mode 100644 rosapps/applications/downloader/lang/es-ES.rc delete mode 100644 rosapps/applications/downloader/lang/fr-FR.rc delete mode 100644 rosapps/applications/downloader/lang/id-ID.rc delete mode 100644 rosapps/applications/downloader/lang/it-IT.rc delete mode 100644 rosapps/applications/downloader/lang/lt-LT.rc delete mode 100644 rosapps/applications/downloader/lang/no-NO.rc delete mode 100644 rosapps/applications/downloader/lang/pl-PL.rc delete mode 100644 rosapps/applications/downloader/lang/ru-RU.rc delete mode 100644 rosapps/applications/downloader/lang/sk-SK.rc delete mode 100644 rosapps/applications/downloader/lang/uk-UA.rc delete mode 100644 rosapps/applications/downloader/main.c delete mode 100644 rosapps/applications/downloader/patches/d2fix.c delete mode 100644 rosapps/applications/downloader/resources.h delete mode 100644 rosapps/applications/downloader/resources/0.bmp delete mode 100644 rosapps/applications/downloader/resources/1.bmp delete mode 100644 rosapps/applications/downloader/resources/10.bmp delete mode 100644 rosapps/applications/downloader/resources/11.bmp delete mode 100644 rosapps/applications/downloader/resources/12.bmp delete mode 100644 rosapps/applications/downloader/resources/13.bmp delete mode 100644 rosapps/applications/downloader/resources/2.bmp delete mode 100644 rosapps/applications/downloader/resources/3.bmp delete mode 100644 rosapps/applications/downloader/resources/4.bmp delete mode 100644 rosapps/applications/downloader/resources/5.bmp delete mode 100644 rosapps/applications/downloader/resources/6.bmp delete mode 100644 rosapps/applications/downloader/resources/7.bmp delete mode 100644 rosapps/applications/downloader/resources/8.bmp delete mode 100644 rosapps/applications/downloader/resources/9.bmp delete mode 100644 rosapps/applications/downloader/resources/download.bmp delete mode 100644 rosapps/applications/downloader/resources/help.ico delete mode 100644 rosapps/applications/downloader/resources/logo.bmp delete mode 100644 rosapps/applications/downloader/resources/main.ico delete mode 100644 rosapps/applications/downloader/resources/preferences.ico delete mode 100644 rosapps/applications/downloader/resources/underline.bmp delete mode 100644 rosapps/applications/downloader/resources/uninstall.bmp delete mode 100644 rosapps/applications/downloader/resources/update.ico delete mode 100644 rosapps/applications/downloader/rsrc.rc delete mode 100644 rosapps/applications/downloader/structures.h delete mode 100644 rosapps/applications/downloader/xml.c delete mode 100644 rosapps/applications/fontview/display.c delete mode 100644 rosapps/applications/fontview/display.h delete mode 100644 rosapps/applications/fontview/fontview.c delete mode 100644 rosapps/applications/fontview/fontview.h delete mode 100644 rosapps/applications/fontview/fontview.rbuild delete mode 100644 rosapps/applications/fontview/fontview.rc delete mode 100644 rosapps/applications/fontview/lang/bg-BG.rc delete mode 100644 rosapps/applications/fontview/lang/de-DE.rc delete mode 100644 rosapps/applications/fontview/lang/en-US.rc delete mode 100644 rosapps/applications/fontview/lang/es-ES.rc delete mode 100644 rosapps/applications/fontview/lang/fr-FR.rc delete mode 100644 rosapps/applications/fontview/lang/lt-LT.rc delete mode 100644 rosapps/applications/fontview/lang/no-NO.rc delete mode 100644 rosapps/applications/fontview/lang/pl-PL.rc delete mode 100644 rosapps/applications/fontview/lang/ru-RU.rc delete mode 100644 rosapps/applications/fontview/lang/sk-SK.rc delete mode 100644 rosapps/applications/fontview/lang/uk-UA.rc delete mode 100644 rosapps/applications/fontview/resource.h delete mode 100644 rosapps/applications/fontview/ttf.ico delete mode 100644 rosapps/applications/fraginator/DefragDialog.cpp delete mode 100644 rosapps/applications/fraginator/Defragment.cpp delete mode 100644 rosapps/applications/fraginator/Defragment.h delete mode 100644 rosapps/applications/fraginator/DriveVolume.cpp delete mode 100644 rosapps/applications/fraginator/DriveVolume.h delete mode 100644 rosapps/applications/fraginator/Fraginator Motif Icon.bmp delete mode 100644 rosapps/applications/fraginator/Fraginator.cpp delete mode 100644 rosapps/applications/fraginator/Fraginator.h delete mode 100644 rosapps/applications/fraginator/Fraginator.rc delete mode 100644 rosapps/applications/fraginator/MainDialog.cpp delete mode 100644 rosapps/applications/fraginator/MainDialog.h delete mode 100644 rosapps/applications/fraginator/Mutex.h delete mode 100644 rosapps/applications/fraginator/ReportDialog.cpp delete mode 100644 rosapps/applications/fraginator/ReportDialog.h delete mode 100644 rosapps/applications/fraginator/Unfrag.cpp delete mode 100644 rosapps/applications/fraginator/Unfrag.h delete mode 100644 rosapps/applications/fraginator/fraginator.rbuild delete mode 100644 rosapps/applications/fraginator/icon1.ico delete mode 100644 rosapps/applications/fraginator/lang/en-US.rc delete mode 100644 rosapps/applications/fraginator/lang/no-NO.rc delete mode 100644 rosapps/applications/fraginator/lang/sk-SK.rc delete mode 100644 rosapps/applications/fraginator/resource.h delete mode 100644 rosapps/applications/imagesoft/about.c delete mode 100644 rosapps/applications/imagesoft/adjust.c delete mode 100644 rosapps/applications/imagesoft/brightness.c delete mode 100644 rosapps/applications/imagesoft/contrast.c delete mode 100644 rosapps/applications/imagesoft/custcombo.c delete mode 100644 rosapps/applications/imagesoft/floatwindow.c delete mode 100644 rosapps/applications/imagesoft/font.c delete mode 100644 rosapps/applications/imagesoft/imageprop.h delete mode 100644 rosapps/applications/imagesoft/imagesoft.c delete mode 100644 rosapps/applications/imagesoft/imagesoft.rbuild delete mode 100644 rosapps/applications/imagesoft/imagesoft.rc delete mode 100644 rosapps/applications/imagesoft/imgedwnd.c delete mode 100644 rosapps/applications/imagesoft/imgedwnd.h delete mode 100644 rosapps/applications/imagesoft/lang/bg-BG.rc delete mode 100644 rosapps/applications/imagesoft/lang/en-GB.rc delete mode 100644 rosapps/applications/imagesoft/lang/en-US.rc delete mode 100644 rosapps/applications/imagesoft/lang/es-ES.rc delete mode 100644 rosapps/applications/imagesoft/lang/fr-FR.rc delete mode 100644 rosapps/applications/imagesoft/lang/id-ID.rc delete mode 100644 rosapps/applications/imagesoft/lang/it-IT.rc delete mode 100644 rosapps/applications/imagesoft/lang/no-NO.rc delete mode 100644 rosapps/applications/imagesoft/lang/pl-PL.rc delete mode 100644 rosapps/applications/imagesoft/lang/ru-RU.rc delete mode 100644 rosapps/applications/imagesoft/lang/sk-SK.rc delete mode 100644 rosapps/applications/imagesoft/lang/th-TH.rc delete mode 100644 rosapps/applications/imagesoft/lang/uk-UA.rc delete mode 100644 rosapps/applications/imagesoft/mainwnd.c delete mode 100644 rosapps/applications/imagesoft/mainwnd.h delete mode 100644 rosapps/applications/imagesoft/misc.c delete mode 100644 rosapps/applications/imagesoft/misc.h delete mode 100644 rosapps/applications/imagesoft/opensave.c delete mode 100644 rosapps/applications/imagesoft/precomp.h delete mode 100644 rosapps/applications/imagesoft/res/cursors/PaintBrushToolCursor.cur delete mode 100644 rosapps/applications/imagesoft/res/cursors/PaintBrushToolCursorMouseDown.cur delete mode 100644 rosapps/applications/imagesoft/res/icons/color/ColorLess.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/color/ColorMore.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/hist/HistBack.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/hist/HistDelete.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/hist/HistForward.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/hist/HistRedo.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/hist/HistUndo.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainCopyIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainCutIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainNewIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainOpenIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainPasteIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainPrintIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainPrintPreIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainRedoIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainSaveIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/std/MainUndoIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/text/TextAlignCenterIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/text/TextAlignLeftIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/text/TextAlignRightIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/text/TextBoldIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/text/TextItalicIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/text/TextUnderlineIcon.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsCloneStamp.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsColorPicker.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsEllipse.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsEllipseSelect.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsEraser.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsFreeformShape.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsLassoSelect.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsLine.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsMagicWand.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsMove.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsMoveSelection.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsPaintBrush.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsPaintBucket.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsPencil.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsRecoloring.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsRectangle.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsRectangleSelect.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsRoundedRectangle.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsText.bmp delete mode 100644 rosapps/applications/imagesoft/res/icons/tools/ToolsZoom.bmp delete mode 100644 rosapps/applications/imagesoft/res/imagesoft.ico delete mode 100644 rosapps/applications/imagesoft/resource.h delete mode 100644 rosapps/applications/imagesoft/rsrc.rc delete mode 100644 rosapps/applications/imagesoft/tooldock.c delete mode 100644 rosapps/applications/imagesoft/tooldock.h delete mode 100644 rosapps/applications/magnify/lang/bg-BG.rc delete mode 100644 rosapps/applications/magnify/lang/de-DE.rc delete mode 100644 rosapps/applications/magnify/lang/en-US.rc delete mode 100644 rosapps/applications/magnify/lang/es-ES.rc delete mode 100644 rosapps/applications/magnify/lang/fr-FR.rc delete mode 100644 rosapps/applications/magnify/lang/it-IT.rc delete mode 100644 rosapps/applications/magnify/lang/no-NO.rc delete mode 100644 rosapps/applications/magnify/lang/pl-PL.rc delete mode 100644 rosapps/applications/magnify/lang/ru-RU.rc delete mode 100644 rosapps/applications/magnify/lang/sk-SK.rc delete mode 100644 rosapps/applications/magnify/lang/uk-UA.rc delete mode 100644 rosapps/applications/magnify/magnifier.c delete mode 100644 rosapps/applications/magnify/magnifier.h delete mode 100644 rosapps/applications/magnify/magnify.rbuild delete mode 100644 rosapps/applications/magnify/magnify.rc delete mode 100644 rosapps/applications/magnify/res/magnify.ico delete mode 100644 rosapps/applications/magnify/resource.h delete mode 100644 rosapps/applications/magnify/rsrc.rc delete mode 100644 rosapps/applications/magnify/settings.c delete mode 100644 rosapps/applications/net/dhcpd/AUTHORS delete mode 100644 rosapps/applications/net/dhcpd/COPYING delete mode 100644 rosapps/applications/net/dhcpd/ChangeLog delete mode 100644 rosapps/applications/net/dhcpd/INSTALL delete mode 100644 rosapps/applications/net/dhcpd/Makefile.am delete mode 100644 rosapps/applications/net/dhcpd/Makefile.in delete mode 100644 rosapps/applications/net/dhcpd/NEWS delete mode 100644 rosapps/applications/net/dhcpd/README delete mode 100644 rosapps/applications/net/dhcpd/README.ROS delete mode 100644 rosapps/applications/net/dhcpd/TODO delete mode 100644 rosapps/applications/net/dhcpd/aclocal.m4 delete mode 100644 rosapps/applications/net/dhcpd/config.cache delete mode 100644 rosapps/applications/net/dhcpd/config.h delete mode 100644 rosapps/applications/net/dhcpd/config.h.in delete mode 100644 rosapps/applications/net/dhcpd/config.h.top delete mode 100644 rosapps/applications/net/dhcpd/config.log delete mode 100644 rosapps/applications/net/dhcpd/config.status delete mode 100644 rosapps/applications/net/dhcpd/configure delete mode 100644 rosapps/applications/net/dhcpd/configure.in delete mode 100644 rosapps/applications/net/dhcpd/dhcpd.rc delete mode 100644 rosapps/applications/net/dhcpd/install-sh delete mode 100644 rosapps/applications/net/dhcpd/missing delete mode 100644 rosapps/applications/net/dhcpd/mkinstalldirs delete mode 100644 rosapps/applications/net/dhcpd/samples/dhcp.conf delete mode 100644 rosapps/applications/net/dhcpd/src/Makefile.am delete mode 100644 rosapps/applications/net/dhcpd/src/Makefile.in delete mode 100644 rosapps/applications/net/dhcpd/src/dhcp.conf delete mode 100644 rosapps/applications/net/dhcpd/src/display/display.c delete mode 100644 rosapps/applications/net/dhcpd/src/include/datatypes.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/display.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/headers.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/iputils.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/leases.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/lock.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/macutils.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/options.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/parser.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/utils.h delete mode 100644 rosapps/applications/net/dhcpd/src/include/wutils.h delete mode 100644 rosapps/applications/net/dhcpd/src/leases/leases.c delete mode 100644 rosapps/applications/net/dhcpd/src/lock/locker.c delete mode 100644 rosapps/applications/net/dhcpd/src/main.c delete mode 100644 rosapps/applications/net/dhcpd/src/parsing/parser.c delete mode 100644 rosapps/applications/net/dhcpd/src/utils/iputils.c delete mode 100644 rosapps/applications/net/dhcpd/src/utils/macutils.c delete mode 100644 rosapps/applications/net/dhcpd/src/utils/macutils.h delete mode 100644 rosapps/applications/net/dhcpd/src/utils/utils.h delete mode 100644 rosapps/applications/net/dhcpd/src/utils/wutils.c delete mode 100644 rosapps/applications/net/dhcpd/stamp-h delete mode 100644 rosapps/applications/net/dhcpd/stamp-h.in delete mode 100644 rosapps/applications/net/directory.rbuild delete mode 100644 rosapps/applications/net/ncftp/LICENSE.txt delete mode 100644 rosapps/applications/net/ncftp/Strn/Dynscat.c delete mode 100644 rosapps/applications/net/ncftp/Strn/Makefile.in delete mode 100644 rosapps/applications/net/ncftp/Strn/Strn.h delete mode 100644 rosapps/applications/net/ncftp/Strn/Strncat.c delete mode 100644 rosapps/applications/net/ncftp/Strn/Strncpy.c delete mode 100644 rosapps/applications/net/ncftp/Strn/Strnpcat.c delete mode 100644 rosapps/applications/net/ncftp/Strn/Strnpcpy.c delete mode 100644 rosapps/applications/net/ncftp/Strn/Strntok.c delete mode 100644 rosapps/applications/net/ncftp/Strn/config.h.in delete mode 100644 rosapps/applications/net/ncftp/Strn/configure.in delete mode 100644 rosapps/applications/net/ncftp/Strn/strtokc.c delete mode 100644 rosapps/applications/net/ncftp/Strn/tester.c delete mode 100644 rosapps/applications/net/ncftp/Strn/version.c delete mode 100644 rosapps/applications/net/ncftp/autoconf/acconfig.h delete mode 100644 rosapps/applications/net/ncftp/autoconf/aclocal.m4 delete mode 100644 rosapps/applications/net/ncftp/libncftp/Makefile.in delete mode 100644 rosapps/applications/net/ncftp/libncftp/Readme.txt delete mode 100644 rosapps/applications/net/ncftp/libncftp/cmds.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/config.h.in delete mode 100644 rosapps/applications/net/ncftp/libncftp/configure.in delete mode 100644 rosapps/applications/net/ncftp/libncftp/dos2unix.sh delete mode 100644 rosapps/applications/net/ncftp/libncftp/errno.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/ftp.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/ftp.h delete mode 100644 rosapps/applications/net/ncftp/libncftp/glob.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/io.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/libncftp.dsp delete mode 100644 rosapps/applications/net/ncftp/libncftp/libncftp.dsw delete mode 100644 rosapps/applications/net/ncftp/libncftp/linelist.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/mksrctar.sh delete mode 100644 rosapps/applications/net/ncftp/libncftp/mksrczip.bat delete mode 100644 rosapps/applications/net/ncftp/libncftp/ncftp.h delete mode 100644 rosapps/applications/net/ncftp/libncftp/ncftp_errno.h delete mode 100644 rosapps/applications/net/ncftp/libncftp/open.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/rcmd.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/syshdrs.h delete mode 100644 rosapps/applications/net/ncftp/libncftp/util.c delete mode 100644 rosapps/applications/net/ncftp/libncftp/util.h delete mode 100644 rosapps/applications/net/ncftp/libncftp/util2.cpp delete mode 100644 rosapps/applications/net/ncftp/libncftp/wincfg.h delete mode 100644 rosapps/applications/net/ncftp/ncftp.rbuild delete mode 100644 rosapps/applications/net/ncftp/ncftp.rc delete mode 100644 rosapps/applications/net/ncftp/ncftp/Makefile.in delete mode 100644 rosapps/applications/net/ncftp/ncftp/bookmark.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/bookmark.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/cmdlist.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/cmds.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/cmds.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/getline.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/getline.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/getopt.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/getopt.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/log.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/log.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/ls.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/ls.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/main.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/main.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/pref.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/pref.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/preffw.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/progress.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/progress.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/readln.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/readln.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/resource.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/shell.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/shell.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/spool.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/spool.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/syshdrs.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/trace.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/trace.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/util.c delete mode 100644 rosapps/applications/net/ncftp/ncftp/util.h delete mode 100644 rosapps/applications/net/ncftp/ncftp/version.c delete mode 100644 rosapps/applications/net/ncftp/sio/Makefile.in delete mode 100644 rosapps/applications/net/ncftp/sio/PRead.c delete mode 100644 rosapps/applications/net/ncftp/sio/PWrite.c delete mode 100644 rosapps/applications/net/ncftp/sio/SAcceptA.c delete mode 100644 rosapps/applications/net/ncftp/sio/SAcceptS.c delete mode 100644 rosapps/applications/net/ncftp/sio/SBind.c delete mode 100644 rosapps/applications/net/ncftp/sio/SClose.c delete mode 100644 rosapps/applications/net/ncftp/sio/SConnect.c delete mode 100644 rosapps/applications/net/ncftp/sio/SConnectByName.c delete mode 100644 rosapps/applications/net/ncftp/sio/SError.c delete mode 100644 rosapps/applications/net/ncftp/sio/SNew.c delete mode 100644 rosapps/applications/net/ncftp/sio/SRead.c delete mode 100644 rosapps/applications/net/ncftp/sio/SReadline.c delete mode 100644 rosapps/applications/net/ncftp/sio/SRecv.c delete mode 100644 rosapps/applications/net/ncftp/sio/SRecvfrom.c delete mode 100644 rosapps/applications/net/ncftp/sio/SRecvmsg.c delete mode 100644 rosapps/applications/net/ncftp/sio/SSelect.c delete mode 100644 rosapps/applications/net/ncftp/sio/SSend.c delete mode 100644 rosapps/applications/net/ncftp/sio/SSendto.c delete mode 100644 rosapps/applications/net/ncftp/sio/SSendtoByName.c delete mode 100644 rosapps/applications/net/ncftp/sio/SWait.c delete mode 100644 rosapps/applications/net/ncftp/sio/SWrite.c delete mode 100644 rosapps/applications/net/ncftp/sio/SocketUtil.c delete mode 100644 rosapps/applications/net/ncftp/sio/StrAddr.c delete mode 100644 rosapps/applications/net/ncftp/sio/UAcceptA.c delete mode 100644 rosapps/applications/net/ncftp/sio/UAcceptS.c delete mode 100644 rosapps/applications/net/ncftp/sio/UBind.c delete mode 100644 rosapps/applications/net/ncftp/sio/UConnect.c delete mode 100644 rosapps/applications/net/ncftp/sio/UConnectByName.c delete mode 100644 rosapps/applications/net/ncftp/sio/UNew.c delete mode 100644 rosapps/applications/net/ncftp/sio/URecvfrom.c delete mode 100644 rosapps/applications/net/ncftp/sio/USendto.c delete mode 100644 rosapps/applications/net/ncftp/sio/USendtoByName.c delete mode 100644 rosapps/applications/net/ncftp/sio/config.h.in delete mode 100644 rosapps/applications/net/ncftp/sio/configure.in delete mode 100644 rosapps/applications/net/ncftp/sio/main.c delete mode 100644 rosapps/applications/net/ncftp/sio/sio.h delete mode 100644 rosapps/applications/net/ncftp/sio/sio.html delete mode 100644 rosapps/applications/net/ncftp/sio/srltest.c delete mode 100644 rosapps/applications/net/ncftp/sio/syshdrs.h delete mode 100644 rosapps/applications/net/ncftp/sio/usio.h delete mode 100644 rosapps/applications/net/ncftp/sio/wincfg.h delete mode 100644 rosapps/applications/net/netreg/netreg.cpp delete mode 100644 rosapps/applications/net/netreg/netreg.rbuild delete mode 100644 rosapps/applications/net/netreg/netreg.rc delete mode 100644 rosapps/applications/net/niclist/niclist.c delete mode 100644 rosapps/applications/net/niclist/niclist.rbuild delete mode 100644 rosapps/applications/net/niclist/niclist.rc delete mode 100644 rosapps/applications/net/roshttpd/common/list.cpp delete mode 100644 rosapps/applications/net/roshttpd/common/roshttpd.rc delete mode 100644 rosapps/applications/net/roshttpd/common/socket.cpp delete mode 100644 rosapps/applications/net/roshttpd/common/thread.cpp delete mode 100644 rosapps/applications/net/roshttpd/config.cpp delete mode 100644 rosapps/applications/net/roshttpd/error.cpp delete mode 100644 rosapps/applications/net/roshttpd/http.cpp delete mode 100644 rosapps/applications/net/roshttpd/httpd.cpp delete mode 100644 rosapps/applications/net/roshttpd/include/config.h delete mode 100644 rosapps/applications/net/roshttpd/include/debug.h delete mode 100644 rosapps/applications/net/roshttpd/include/error.h delete mode 100644 rosapps/applications/net/roshttpd/include/http.h delete mode 100644 rosapps/applications/net/roshttpd/include/httpd.h delete mode 100644 rosapps/applications/net/roshttpd/include/iterator.h delete mode 100644 rosapps/applications/net/roshttpd/include/list.h delete mode 100644 rosapps/applications/net/roshttpd/include/socket.h delete mode 100644 rosapps/applications/net/roshttpd/include/thread.h delete mode 100644 rosapps/applications/net/roshttpd/roshttpd.cpp delete mode 100644 rosapps/applications/net/roshttpd/roshttpd.rbuild delete mode 100644 rosapps/applications/net/tditest/DIRS delete mode 100644 rosapps/applications/net/tditest/include/debug.h delete mode 100644 rosapps/applications/net/tditest/include/tditest.h delete mode 100644 rosapps/applications/net/tditest/readme.txt delete mode 100644 rosapps/applications/net/tditest/tditest.def delete mode 100644 rosapps/applications/net/tditest/tditest.rbuild delete mode 100644 rosapps/applications/net/tditest/tditest.rc delete mode 100644 rosapps/applications/net/tditest/tditest/SOURCES delete mode 100644 rosapps/applications/net/tditest/tditest/tditest.c delete mode 100644 rosapps/applications/notevil/notevil.c delete mode 100644 rosapps/applications/notevil/notevil.rbuild delete mode 100644 rosapps/applications/notevil/notevil.rc delete mode 100644 rosapps/applications/notevil/readme.txt delete mode 100644 rosapps/applications/notevil/resource.h delete mode 100644 rosapps/applications/packmgr/cmd-line/main.c delete mode 100644 rosapps/applications/packmgr/cmd-line/main.h delete mode 100644 rosapps/applications/packmgr/cmd-line/ros-get.rc delete mode 100644 rosapps/applications/packmgr/cmd-line/rosget.rbuild delete mode 100644 rosapps/applications/packmgr/directory.rbuild delete mode 100644 rosapps/applications/packmgr/gui/generic.rc delete mode 100644 rosapps/applications/packmgr/gui/help.txt delete mode 100644 rosapps/applications/packmgr/gui/lang/cs-CZ.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/de-DE.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/en-US.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/es-ES.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/fr-FR.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/no-NO.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/pl-PL.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/ru-RU.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/sk-SK.rc delete mode 100644 rosapps/applications/packmgr/gui/lang/uk-UA.rc delete mode 100644 rosapps/applications/packmgr/gui/main.c delete mode 100644 rosapps/applications/packmgr/gui/main.h delete mode 100644 rosapps/applications/packmgr/gui/packmgr.rbuild delete mode 100644 rosapps/applications/packmgr/gui/packmgr.rc delete mode 100644 rosapps/applications/packmgr/gui/res/blank.ico delete mode 100644 rosapps/applications/packmgr/gui/res/development.ico delete mode 100644 rosapps/applications/packmgr/gui/res/games.ico delete mode 100644 rosapps/applications/packmgr/gui/res/graphics.ico delete mode 100644 rosapps/applications/packmgr/gui/res/inet.ico delete mode 100644 rosapps/applications/packmgr/gui/res/install.ico delete mode 100644 rosapps/applications/packmgr/gui/res/installed.ico delete mode 100644 rosapps/applications/packmgr/gui/res/installsource.ico delete mode 100644 rosapps/applications/packmgr/gui/res/multimedia.ico delete mode 100644 rosapps/applications/packmgr/gui/res/office.ico delete mode 100644 rosapps/applications/packmgr/gui/res/others.ico delete mode 100644 rosapps/applications/packmgr/gui/res/packetmanager.ico delete mode 100644 rosapps/applications/packmgr/gui/res/toolbar.bmp delete mode 100644 rosapps/applications/packmgr/gui/res/tools.ico delete mode 100644 rosapps/applications/packmgr/gui/res/uninstall.ico delete mode 100644 rosapps/applications/packmgr/gui/res/update.ico delete mode 100644 rosapps/applications/packmgr/gui/resource.h delete mode 100644 rosapps/applications/packmgr/lib/download.cpp delete mode 100644 rosapps/applications/packmgr/lib/error.h delete mode 100644 rosapps/applications/packmgr/lib/expat.h delete mode 100644 rosapps/applications/packmgr/lib/functions.cpp delete mode 100644 rosapps/applications/packmgr/lib/lang/cs-CZ.rc delete mode 100644 rosapps/applications/packmgr/lib/lang/de-DE.rc delete mode 100644 rosapps/applications/packmgr/lib/lang/en-US.rc delete mode 100644 rosapps/applications/packmgr/lib/lang/es-ES.rc delete mode 100644 rosapps/applications/packmgr/lib/lang/fr-FR.rc delete mode 100644 rosapps/applications/packmgr/lib/lang/no-NO.rc delete mode 100644 rosapps/applications/packmgr/lib/lang/ru-RU.rc delete mode 100644 rosapps/applications/packmgr/lib/lang/uk-UA.rc delete mode 100644 rosapps/applications/packmgr/lib/log.cpp delete mode 100644 rosapps/applications/packmgr/lib/log.h delete mode 100644 rosapps/applications/packmgr/lib/main.cpp delete mode 100644 rosapps/applications/packmgr/lib/options.cpp delete mode 100644 rosapps/applications/packmgr/lib/options.xml delete mode 100644 rosapps/applications/packmgr/lib/package.cpp delete mode 100644 rosapps/applications/packmgr/lib/package.def delete mode 100644 rosapps/applications/packmgr/lib/package.h delete mode 100644 rosapps/applications/packmgr/lib/package.hpp delete mode 100644 rosapps/applications/packmgr/lib/package.rbuild delete mode 100644 rosapps/applications/packmgr/lib/package.rc delete mode 100644 rosapps/applications/packmgr/lib/script.cpp delete mode 100644 rosapps/applications/packmgr/lib/script.h delete mode 100644 rosapps/applications/packmgr/lib/tree.cpp delete mode 100644 rosapps/applications/packmgr/tree/7zip.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/7zip.xml delete mode 100644 rosapps/applications/packmgr/tree/abiword.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/abiword.xml delete mode 100644 rosapps/applications/packmgr/tree/firefox.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/firefox.xml delete mode 100644 rosapps/applications/packmgr/tree/irfanview.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/irfanview.xml delete mode 100644 rosapps/applications/packmgr/tree/mplayer.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/mplayer.xml delete mode 100644 rosapps/applications/packmgr/tree/openoffice.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/openoffice.xml delete mode 100644 rosapps/applications/packmgr/tree/putty.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/putty.xml delete mode 100644 rosapps/applications/packmgr/tree/rosbe.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/rosbe.xml delete mode 100644 rosapps/applications/packmgr/tree/samba-tng.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/samba-tng.xml delete mode 100644 rosapps/applications/packmgr/tree/tiny.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/tiny.xml delete mode 100644 rosapps/applications/packmgr/tree/tree.xml delete mode 100644 rosapps/applications/packmgr/tree/tree_bare.xml delete mode 100644 rosapps/applications/packmgr/tree/tree_withsubs.xml delete mode 100644 rosapps/applications/packmgr/tree/tuxpaint.inst.rps delete mode 100644 rosapps/applications/packmgr/tree/tuxpaint.xml delete mode 100644 rosapps/applications/screensavers/blankscr/blankscr.rbuild delete mode 100644 rosapps/applications/screensavers/blankscr/lang/bg-BG.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/de-DE.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/en-US.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/es-ES.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/fr-FR.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/lt-LT.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/nl-NL.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/no-NO.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/pl-PL.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/sk-SK.rc delete mode 100644 rosapps/applications/screensavers/blankscr/lang/uk-UA.rc delete mode 100644 rosapps/applications/screensavers/blankscr/resource.h delete mode 100644 rosapps/applications/screensavers/blankscr/scrnsave.c delete mode 100644 rosapps/applications/screensavers/blankscr/scrnsave.rc delete mode 100644 rosapps/applications/screensavers/butterflies/butterflies.c delete mode 100644 rosapps/applications/screensavers/butterflies/butterflies.rbuild delete mode 100644 rosapps/applications/screensavers/butterflies/butterflies.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/bg-BG.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/de-DE.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/en-US.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/es-ES.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/fr-FR.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/lt-LT.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/no-NO.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/pl-PL.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/sk-SK.rc delete mode 100644 rosapps/applications/screensavers/butterflies/lang/uk-UA.rc delete mode 100644 rosapps/applications/screensavers/butterflies/res/butterfly1.bmp delete mode 100644 rosapps/applications/screensavers/butterflies/res/butterfly2.bmp delete mode 100644 rosapps/applications/screensavers/butterflies/res/butterfly3.bmp delete mode 100644 rosapps/applications/screensavers/butterflies/resource.h delete mode 100644 rosapps/applications/screensavers/butterflies/rsrc.rc delete mode 100644 rosapps/applications/screensavers/circles/circles.c delete mode 100644 rosapps/applications/screensavers/circles/circles.rbuild delete mode 100644 rosapps/applications/screensavers/circles/circles.rc delete mode 100644 rosapps/applications/screensavers/circles/lang/en-US.rc delete mode 100644 rosapps/applications/screensavers/circles/lang/es-ES.rc delete mode 100644 rosapps/applications/screensavers/circles/lang/no-NO.rc delete mode 100644 rosapps/applications/screensavers/circles/lang/sk-SK.rc delete mode 100644 rosapps/applications/screensavers/circles/resource.h delete mode 100644 rosapps/applications/screensavers/cylfrac/cylfrac.c delete mode 100644 rosapps/applications/screensavers/cylfrac/cylfrac.rbuild delete mode 100644 rosapps/applications/screensavers/cylfrac/cylfrac.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/bg-BG.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/de-DE.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/en-US.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/es-ES.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/fr-FR.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/lt-LT.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/nl-NL.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/no-NO.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/pl-PL.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/sk-SK.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/lang/uk-UA.rc delete mode 100644 rosapps/applications/screensavers/cylfrac/resource.h delete mode 100644 rosapps/applications/screensavers/matrix/Permission.txt delete mode 100644 rosapps/applications/screensavers/matrix/ReadMe.txt delete mode 100644 rosapps/applications/screensavers/matrix/config.c delete mode 100644 rosapps/applications/screensavers/matrix/cursor1.cur delete mode 100644 rosapps/applications/screensavers/matrix/globals.h delete mode 100644 rosapps/applications/screensavers/matrix/icon1.ico delete mode 100644 rosapps/applications/screensavers/matrix/lang/bg-BG.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/de-DE.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/en-US.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/es-ES.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/fr-FR.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/lt-LT.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/nl-NL.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/no-NO.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/pl-PL.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/sk-SK.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/th-TH.rc delete mode 100644 rosapps/applications/screensavers/matrix/lang/uk-UA.rc delete mode 100644 rosapps/applications/screensavers/matrix/matrix.bmp delete mode 100644 rosapps/applications/screensavers/matrix/matrix.c delete mode 100644 rosapps/applications/screensavers/matrix/matrix.dsp delete mode 100644 rosapps/applications/screensavers/matrix/matrix.h delete mode 100644 rosapps/applications/screensavers/matrix/matrix.rbuild delete mode 100644 rosapps/applications/screensavers/matrix/message.c delete mode 100644 rosapps/applications/screensavers/matrix/message.h delete mode 100644 rosapps/applications/screensavers/matrix/password.c delete mode 100644 rosapps/applications/screensavers/matrix/resource.h delete mode 100644 rosapps/applications/screensavers/matrix/rsrc.rc delete mode 100644 rosapps/applications/screensavers/matrix/screensave.c delete mode 100644 rosapps/applications/screensavers/matrix/settings.c delete mode 100644 rosapps/applications/screensavers/mazescr/lang/bg-BG.rc delete mode 100644 rosapps/applications/screensavers/mazescr/lang/de-DE.rc delete mode 100644 rosapps/applications/screensavers/mazescr/lang/en-US.rc delete mode 100644 rosapps/applications/screensavers/mazescr/lang/es-ES.rc delete mode 100644 rosapps/applications/screensavers/mazescr/lang/lt-LT.rc delete mode 100644 rosapps/applications/screensavers/mazescr/lang/no-NO.rc delete mode 100644 rosapps/applications/screensavers/mazescr/lang/pl-PL.rc delete mode 100644 rosapps/applications/screensavers/mazescr/lang/sk-SK.rc delete mode 100644 rosapps/applications/screensavers/mazescr/lang/uk-UA.rc delete mode 100644 rosapps/applications/screensavers/mazescr/maze.c delete mode 100644 rosapps/applications/screensavers/mazescr/mazescr.rbuild delete mode 100644 rosapps/applications/screensavers/mazescr/resource.h delete mode 100644 rosapps/applications/screensavers/mazescr/scrnsave.c delete mode 100644 rosapps/applications/screensavers/mazescr/scrnsave.rc delete mode 100644 rosapps/applications/screensavers/screensavers.rbuild delete mode 100644 rosapps/applications/screensavers/starfield/lang/bg-BG.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/de-DE.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/en-US.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/es-ES.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/fr-FR.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/lt-LT.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/nl-NL.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/no-NO.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/pl-PL.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/sk-SK.rc delete mode 100644 rosapps/applications/screensavers/starfield/lang/uk-UA.rc delete mode 100644 rosapps/applications/screensavers/starfield/resource.h delete mode 100644 rosapps/applications/screensavers/starfield/screensaver.c delete mode 100644 rosapps/applications/screensavers/starfield/starfield.rbuild delete mode 100644 rosapps/applications/screensavers/starfield/starfield.rc delete mode 100644 rosapps/applications/sysutils/chkdsk/chkdsk.c delete mode 100644 rosapps/applications/sysutils/chkdsk/chkdsk.rbuild delete mode 100644 rosapps/applications/sysutils/chkdsk/chkdsk.rc delete mode 100644 rosapps/applications/sysutils/chklib/chklib.c delete mode 100644 rosapps/applications/sysutils/chklib/chklib.rbuild delete mode 100644 rosapps/applications/sysutils/chklib/chklib.rc delete mode 100644 rosapps/applications/sysutils/config.h delete mode 100644 rosapps/applications/sysutils/ctm/ctm.c delete mode 100644 rosapps/applications/sysutils/ctm/ctm.h delete mode 100644 rosapps/applications/sysutils/ctm/ctm.rbuild delete mode 100644 rosapps/applications/sysutils/ctm/ctm.rc delete mode 100644 rosapps/applications/sysutils/ctm/lang/de-DE.rc delete mode 100644 rosapps/applications/sysutils/ctm/lang/el-GR.rc delete mode 100644 rosapps/applications/sysutils/ctm/lang/en-US.rc delete mode 100644 rosapps/applications/sysutils/ctm/lang/fr-FR.rc delete mode 100644 rosapps/applications/sysutils/ctm/lang/no-NO.rc delete mode 100644 rosapps/applications/sysutils/ctm/lang/ru-RU.rc delete mode 100644 rosapps/applications/sysutils/ctm/lang/uk-UA.rc delete mode 100644 rosapps/applications/sysutils/ctm/resource.h delete mode 100644 rosapps/applications/sysutils/dosfsck/.cvsignore delete mode 100644 rosapps/applications/sysutils/dosfsck/CHANGES delete mode 100644 rosapps/applications/sysutils/dosfsck/COPYING delete mode 100644 rosapps/applications/sysutils/dosfsck/Makefile delete mode 100644 rosapps/applications/sysutils/dosfsck/README delete mode 100644 rosapps/applications/sysutils/dosfsck/boot.c delete mode 100644 rosapps/applications/sysutils/dosfsck/boot.h delete mode 100644 rosapps/applications/sysutils/dosfsck/byteorder.h delete mode 100644 rosapps/applications/sysutils/dosfsck/byteswap.h delete mode 100644 rosapps/applications/sysutils/dosfsck/byteswap1.h delete mode 100644 rosapps/applications/sysutils/dosfsck/check.c delete mode 100644 rosapps/applications/sysutils/dosfsck/check.h delete mode 100644 rosapps/applications/sysutils/dosfsck/common.c delete mode 100644 rosapps/applications/sysutils/dosfsck/common.h delete mode 100644 rosapps/applications/sysutils/dosfsck/compiler.h delete mode 100644 rosapps/applications/sysutils/dosfsck/dosfsck.8 delete mode 100644 rosapps/applications/sysutils/dosfsck/dosfsck.c delete mode 100644 rosapps/applications/sysutils/dosfsck/dosfsck.h delete mode 100644 rosapps/applications/sysutils/dosfsck/dosfsck.rbuild delete mode 100644 rosapps/applications/sysutils/dosfsck/dosfsck.rc delete mode 100644 rosapps/applications/sysutils/dosfsck/fat.c delete mode 100644 rosapps/applications/sysutils/dosfsck/fat.h delete mode 100644 rosapps/applications/sysutils/dosfsck/file.c delete mode 100644 rosapps/applications/sysutils/dosfsck/file.h delete mode 100644 rosapps/applications/sysutils/dosfsck/io.c delete mode 100644 rosapps/applications/sysutils/dosfsck/io.h delete mode 100644 rosapps/applications/sysutils/dosfsck/lfn.c delete mode 100644 rosapps/applications/sysutils/dosfsck/lfn.h delete mode 100644 rosapps/applications/sysutils/dosfsck/msdos_fs.h delete mode 100644 rosapps/applications/sysutils/dosfsck/swab.h delete mode 100644 rosapps/applications/sysutils/dosfsck/version.h delete mode 100755 rosapps/applications/sysutils/dosfsck/vfat.h delete mode 100644 rosapps/applications/sysutils/gettype/gettype.c delete mode 100644 rosapps/applications/sysutils/gettype/gettype.rbuild delete mode 100644 rosapps/applications/sysutils/kill/kill.c delete mode 100644 rosapps/applications/sysutils/kill/kill.rbuild delete mode 100644 rosapps/applications/sysutils/kill/kill.rc delete mode 100644 rosapps/applications/sysutils/logevent/logevent.c delete mode 100644 rosapps/applications/sysutils/logevent/logevent.rbuild delete mode 100644 rosapps/applications/sysutils/logevent/logevent.rc delete mode 100644 rosapps/applications/sysutils/lsdd/lsdd.c delete mode 100644 rosapps/applications/sysutils/lsdd/lsdd.rbuild delete mode 100644 rosapps/applications/sysutils/lsdd/lsdd.rc delete mode 100644 rosapps/applications/sysutils/man/man.c delete mode 100755 rosapps/applications/sysutils/man/man.cmd delete mode 100644 rosapps/applications/sysutils/man/man.rbuild delete mode 100644 rosapps/applications/sysutils/man/man/2/chkdsk.man delete mode 100644 rosapps/applications/sysutils/man/man/2/chklib.man delete mode 100644 rosapps/applications/sysutils/man/man/2/format.man delete mode 100644 rosapps/applications/sysutils/man/man/2/man.man delete mode 100644 rosapps/applications/sysutils/man/man/2/ping.man delete mode 100644 rosapps/applications/sysutils/man/man/3/taskmgr.man delete mode 100644 rosapps/applications/sysutils/man/man/foo.1 delete mode 100644 rosapps/applications/sysutils/man/man/man.1 delete mode 100644 rosapps/applications/sysutils/man/used_tags.txt delete mode 100644 rosapps/applications/sysutils/mkdosfs/.cvsignore delete mode 100644 rosapps/applications/sysutils/mkdosfs/ANNOUNCE delete mode 100644 rosapps/applications/sysutils/mkdosfs/COPYING delete mode 100644 rosapps/applications/sysutils/mkdosfs/ChangeLog delete mode 100644 rosapps/applications/sysutils/mkdosfs/Makefile delete mode 100644 rosapps/applications/sysutils/mkdosfs/README delete mode 100644 rosapps/applications/sysutils/mkdosfs/getopt.c delete mode 100644 rosapps/applications/sysutils/mkdosfs/mkdosfs-ygg-0.3b.lsm delete mode 100644 rosapps/applications/sysutils/mkdosfs/mkdosfs.8 delete mode 100644 rosapps/applications/sysutils/mkdosfs/mkdosfs.c delete mode 100644 rosapps/applications/sysutils/mkdosfs/mkdosfs.dsp delete mode 100644 rosapps/applications/sysutils/mkdosfs/mkdosfs.dsw delete mode 100644 rosapps/applications/sysutils/mkdosfs/mkdosfs.plg delete mode 100644 rosapps/applications/sysutils/pedump/pedump.c delete mode 100644 rosapps/applications/sysutils/pedump/pedump.rbuild delete mode 100644 rosapps/applications/sysutils/pedump/pedump.rc delete mode 100644 rosapps/applications/sysutils/qssi/qssi.c delete mode 100644 rosapps/applications/sysutils/qssi/qssi.rc delete mode 100644 rosapps/applications/sysutils/regexpl/ArgumentParser.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ArgumentParser.h delete mode 100644 rosapps/applications/sysutils/regexpl/Completion.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/Completion.h delete mode 100644 rosapps/applications/sysutils/regexpl/Console.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/Console.h delete mode 100644 rosapps/applications/sysutils/regexpl/CrtSupplement.c delete mode 100644 rosapps/applications/sysutils/regexpl/Pattern.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/Pattern.h delete mode 100644 rosapps/applications/sysutils/regexpl/Prompt.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/Prompt.h delete mode 100644 rosapps/applications/sysutils/regexpl/README delete mode 100644 rosapps/applications/sysutils/regexpl/RegistryExplorer.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/RegistryExplorer.h delete mode 100644 rosapps/applications/sysutils/regexpl/RegistryKey.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/RegistryKey.h delete mode 100644 rosapps/applications/sysutils/regexpl/RegistryTree.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/RegistryTree.h delete mode 100644 rosapps/applications/sysutils/regexpl/SecurityDescriptor.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/SecurityDescriptor.h delete mode 100644 rosapps/applications/sysutils/regexpl/Settings.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/Settings.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommand.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommand.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandChangeKey.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandChangeKey.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandConnect.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandConnect.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDACL.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDACL.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDOKA.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDOKA.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDeleteKey.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDeleteKey.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDeleteValue.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDeleteValue.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDir.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandDir.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandExit.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandExit.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandHelp.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandHelp.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandNewKey.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandNewKey.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandOwner.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandOwner.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandSACL.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandSACL.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandSetValue.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandSetValue.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandValue.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandValue.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandVersion.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandVersion.h delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandsLinkedList.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/ShellCommandsLinkedList.h delete mode 100644 rosapps/applications/sysutils/regexpl/TextHistory.cpp delete mode 100644 rosapps/applications/sysutils/regexpl/TextHistory.h delete mode 100644 rosapps/applications/sysutils/regexpl/ph.h delete mode 100644 rosapps/applications/sysutils/regexpl/regexpl.rbuild delete mode 100644 rosapps/applications/sysutils/regexpl/regexpl.rc delete mode 100644 rosapps/applications/sysutils/screenshot/screenshot.c delete mode 100644 rosapps/applications/sysutils/screenshot/screenshot.h delete mode 100644 rosapps/applications/sysutils/screenshot/screenshot.rbuild delete mode 100644 rosapps/applications/sysutils/screenshot/screenshot.rc delete mode 100644 rosapps/applications/sysutils/screenshot/snap.ico delete mode 100644 rosapps/applications/sysutils/systeminfo/lang/de-DE.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/lang/en-US.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/lang/es-ES.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/lang/fr-FR.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/lang/no-NO.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/lang/pl-PL.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/lang/uk-UA.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/resource.h delete mode 100644 rosapps/applications/sysutils/systeminfo/rsrc.rc delete mode 100644 rosapps/applications/sysutils/systeminfo/systeminfo.c delete mode 100644 rosapps/applications/sysutils/systeminfo/systeminfo.rbuild delete mode 100644 rosapps/applications/sysutils/systeminfo/systeminfo.rc delete mode 100644 rosapps/applications/sysutils/sysutils.rbuild delete mode 100644 rosapps/applications/sysutils/tcat/cat.c delete mode 100644 rosapps/applications/sysutils/tcat/tcat.rbuild delete mode 100644 rosapps/applications/sysutils/tlist/tlist.c delete mode 100644 rosapps/applications/sysutils/tlist/tlist.rbuild delete mode 100644 rosapps/applications/sysutils/tlist/tlist.rc delete mode 100644 rosapps/applications/sysutils/utils/binpatch/binpatch.rbuild delete mode 100644 rosapps/applications/sysutils/utils/binpatch/patch.c delete mode 100644 rosapps/applications/sysutils/utils/cat/cat.c delete mode 100644 rosapps/applications/sysutils/utils/cat/cat.rbuild delete mode 100644 rosapps/applications/sysutils/utils/driver/driver.rbuild delete mode 100644 rosapps/applications/sysutils/utils/driver/load/load.c delete mode 100644 rosapps/applications/sysutils/utils/driver/load/load.rbuild delete mode 100644 rosapps/applications/sysutils/utils/driver/unload/unload.c delete mode 100644 rosapps/applications/sysutils/utils/driver/unload/unload.rbuild delete mode 100644 rosapps/applications/sysutils/utils/infinst/infinst.c delete mode 100644 rosapps/applications/sysutils/utils/infinst/infinst.rbuild delete mode 100644 rosapps/applications/sysutils/utils/nts2w32err/nts2w32err.c delete mode 100644 rosapps/applications/sysutils/utils/nts2w32err/nts2w32err.rbuild delete mode 100644 rosapps/applications/sysutils/utils/objdir/objdir.c delete mode 100644 rosapps/applications/sysutils/utils/objdir/objdir.rbuild delete mode 100644 rosapps/applications/sysutils/utils/partinfo/partinfo.c delete mode 100644 rosapps/applications/sysutils/utils/partinfo/partinfo.rbuild delete mode 100644 rosapps/applications/sysutils/utils/pice/loader/main.c delete mode 100644 rosapps/applications/sysutils/utils/pice/loader/retypes.h delete mode 100644 rosapps/applications/sysutils/utils/pice/loader/stab.def delete mode 100644 rosapps/applications/sysutils/utils/pice/loader/stab_gnu.h delete mode 100644 rosapps/applications/sysutils/utils/pice/loader/stdinc.h delete mode 100644 rosapps/applications/sysutils/utils/pice/loader/terminal.c delete mode 100644 rosapps/applications/sysutils/utils/pice/loader/terminal.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/animation.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/bp.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/bp.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/charset.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/dblflt.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/dblflt.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/debug.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/debug.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/disassembler.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/disassembler.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/disassemblerdata.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/disassemblerdefines.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/gpfault.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/gpfault.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/hardware.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/hardware.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/hercules.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/hercules.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/hooks.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/hooks.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/init.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/init.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/ldrsym.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/logo.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/output.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/output.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/parse.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/parse.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/patch.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/patch.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/pci_ids.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/pgflt.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/pgflt.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/pice.rc delete mode 100644 rosapps/applications/sysutils/utils/pice/module/pice_ver.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/precomp.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/privateice.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/regs.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/remods.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/retypes.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/scancodes.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/serial.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/serial.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/serial_port.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/shell.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/shell.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/stab.def delete mode 100644 rosapps/applications/sysutils/utils/pice/module/stab_gnu.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/symbols.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/symbols.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/syscall.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/syscall.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/trace.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/trace.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/utils.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/utils.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/vga.c delete mode 100644 rosapps/applications/sysutils/utils/pice/module/vga.h delete mode 100644 rosapps/applications/sysutils/utils/pice/module/vga_utils.asm delete mode 100644 rosapps/applications/sysutils/utils/pice/pice.cfg delete mode 100644 rosapps/applications/sysutils/utils/pice/readme.txt delete mode 100644 rosapps/applications/sysutils/utils/pice/shared/shared.h delete mode 100644 rosapps/applications/sysutils/utils/pnpdump/pnpdump.c delete mode 100644 rosapps/applications/sysutils/utils/ps/ps.c delete mode 100644 rosapps/applications/sysutils/utils/ps/ps.c.toolhelp delete mode 100644 rosapps/applications/sysutils/utils/ps/ps.rbuild delete mode 100644 rosapps/applications/sysutils/utils/rosperf/alphablend.c delete mode 100644 rosapps/applications/sysutils/utils/rosperf/fill.c delete mode 100644 rosapps/applications/sysutils/utils/rosperf/gradient.c delete mode 100644 rosapps/applications/sysutils/utils/rosperf/lines.c delete mode 100644 rosapps/applications/sysutils/utils/rosperf/rosperf.c delete mode 100644 rosapps/applications/sysutils/utils/rosperf/rosperf.h delete mode 100644 rosapps/applications/sysutils/utils/rosperf/rosperf.rbuild delete mode 100644 rosapps/applications/sysutils/utils/rosperf/rosperf.rc delete mode 100644 rosapps/applications/sysutils/utils/rosperf/testlist.c delete mode 100644 rosapps/applications/sysutils/utils/rosperf/text.c delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/EnumDirs.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/EnumDirsImpl.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/EnumFiles.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/EnumFilesImpl.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/File.cpp delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/File.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/FixLFN.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/Header.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/Symbol.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/Type.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/assert.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/binary2cstr.cpp delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/binary2cstr.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/input.lst delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/iskeyword.cpp delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/iskeyword.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/safestr.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/sdkparse.cpp delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/sdkparse.dsp delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/sdkparse.dsw delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/skip_ws.cpp delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/skip_ws.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/strip_comments.cpp delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/strip_comments.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/test.h delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/tokenize.cpp delete mode 100644 rosapps/applications/sysutils/utils/sdkparse/tokenize.h delete mode 100644 rosapps/applications/sysutils/utils/stats/stats.c delete mode 100644 rosapps/applications/sysutils/utils/stats/stats.rbuild delete mode 100644 rosapps/applications/sysutils/utils/theme/dump/manifest.rbuild delete mode 100644 rosapps/applications/sysutils/utils/theme/dump/themedump.bpr delete mode 100644 rosapps/applications/sysutils/utils/theme/dump/themedump.cpp delete mode 100644 rosapps/applications/sysutils/utils/theme/dump/themedump.rc delete mode 100644 rosapps/applications/sysutils/utils/tickcount/tickcount.c delete mode 100644 rosapps/applications/sysutils/utils/tickcount/tickcount.rbuild delete mode 100644 rosapps/applications/sysutils/utils/utils.rbuild delete mode 100644 rosapps/applications/sysutils/win32err.h delete mode 100644 rosapps/applications/sysutils/wmain.c delete mode 100644 rosapps/applications/winfile/Makefile.in delete mode 100644 rosapps/applications/winfile/drivebar.bmp delete mode 100644 rosapps/applications/winfile/images.bmp delete mode 100644 rosapps/applications/winfile/lang/cs-CZ.rc delete mode 100644 rosapps/applications/winfile/lang/da-DK.rc delete mode 100644 rosapps/applications/winfile/lang/de-DE.rc delete mode 100644 rosapps/applications/winfile/lang/en-US.rc delete mode 100644 rosapps/applications/winfile/lang/es-ES.rc delete mode 100644 rosapps/applications/winfile/lang/fr-FR.rc delete mode 100644 rosapps/applications/winfile/lang/hu-HU.rc delete mode 100644 rosapps/applications/winfile/lang/it-IT.rc delete mode 100644 rosapps/applications/winfile/lang/ja-JP.rc delete mode 100644 rosapps/applications/winfile/lang/ko-KR.rc delete mode 100644 rosapps/applications/winfile/lang/nl-NL.rc delete mode 100644 rosapps/applications/winfile/lang/no-NO.rc delete mode 100644 rosapps/applications/winfile/lang/pl-PL.rc delete mode 100644 rosapps/applications/winfile/lang/pt-BR.rc delete mode 100644 rosapps/applications/winfile/lang/ru-RU.rc delete mode 100644 rosapps/applications/winfile/lang/sl-SI.rc delete mode 100644 rosapps/applications/winfile/lang/sv-SE.rc delete mode 100644 rosapps/applications/winfile/lang/tr-TR.rc delete mode 100644 rosapps/applications/winfile/lang/zh-CN.rc delete mode 100644 rosapps/applications/winfile/resource.h delete mode 100644 rosapps/applications/winfile/rsrc.rc delete mode 100644 rosapps/applications/winfile/splitpath.c delete mode 100644 rosapps/applications/winfile/toolbar.bmp delete mode 100644 rosapps/applications/winfile/winefile.c delete mode 100644 rosapps/applications/winfile/winefile.h delete mode 100644 rosapps/applications/winfile/winefile.ico delete mode 100644 rosapps/applications/winfile/winfile.rbuild delete mode 100644 rosapps/applications/winver/winver.c delete mode 100644 rosapps/applications/winver/winver.rbuild delete mode 100644 rosapps/applications/write/lang/bg-BG.rc delete mode 100644 rosapps/applications/write/lang/de-DE.rc delete mode 100644 rosapps/applications/write/lang/en-US.rc delete mode 100644 rosapps/applications/write/lang/fr-FR.rc delete mode 100644 rosapps/applications/write/lang/ja-JP.rc delete mode 100644 rosapps/applications/write/lang/ko-KR.rc delete mode 100644 rosapps/applications/write/lang/nl-NL.rc delete mode 100644 rosapps/applications/write/lang/no-NO.rc delete mode 100644 rosapps/applications/write/lang/pl-PL.rc delete mode 100644 rosapps/applications/write/lang/ro-RO.rc delete mode 100644 rosapps/applications/write/lang/ru-RU.rc delete mode 100644 rosapps/applications/write/lang/sk-SK.rc delete mode 100644 rosapps/applications/write/lang/sl-SI.rc delete mode 100644 rosapps/applications/write/lang/uk-UA.rc delete mode 100644 rosapps/applications/write/resources.h delete mode 100644 rosapps/applications/write/rsrc.rc delete mode 100644 rosapps/applications/write/write.c delete mode 100644 rosapps/applications/write/write.rbuild delete mode 100644 rosapps/copying delete mode 100644 rosapps/demos/ddraw/ddraw.rbuild delete mode 100644 rosapps/demos/ddraw/main.cpp delete mode 100644 rosapps/demos/directory.rbuild delete mode 100644 rosapps/demos/maze/Makefile delete mode 100644 rosapps/demos/maze/maze.c delete mode 100644 rosapps/demos/maze/maze.rbuild delete mode 100644 rosapps/demos/maze/maze.rc delete mode 100644 rosapps/demos/maze/resource.h delete mode 100644 rosapps/dflat32/applicat.c delete mode 100644 rosapps/dflat32/barchart.c delete mode 100644 rosapps/dflat32/box.c delete mode 100644 rosapps/dflat32/button.c delete mode 100644 rosapps/dflat32/calendar.c delete mode 100644 rosapps/dflat32/checkbox.c delete mode 100644 rosapps/dflat32/classdef.h delete mode 100644 rosapps/dflat32/classes.h delete mode 100644 rosapps/dflat32/clipbord.c delete mode 100644 rosapps/dflat32/combobox.c delete mode 100644 rosapps/dflat32/commands.h delete mode 100644 rosapps/dflat32/config.c delete mode 100644 rosapps/dflat32/config.h delete mode 100644 rosapps/dflat32/console.c delete mode 100644 rosapps/dflat32/decomp.c delete mode 100644 rosapps/dflat32/dfalloc.c delete mode 100644 rosapps/dflat32/dflat.doc delete mode 100644 rosapps/dflat32/dflat.h delete mode 100644 rosapps/dflat32/dflat32.rbuild delete mode 100644 rosapps/dflat32/dflatmsg.h delete mode 100644 rosapps/dflat32/dialbox.c delete mode 100644 rosapps/dflat32/dialbox.h delete mode 100644 rosapps/dflat32/dialogs.c delete mode 100644 rosapps/dflat32/direct.c delete mode 100644 rosapps/dflat32/edit.c delete mode 100644 rosapps/dflat32/edit.rc delete mode 100644 rosapps/dflat32/edit.txt delete mode 100644 rosapps/dflat32/editbox.c delete mode 100644 rosapps/dflat32/fileopen.c delete mode 100644 rosapps/dflat32/help.txt delete mode 100644 rosapps/dflat32/helpbox.c delete mode 100644 rosapps/dflat32/htree.c delete mode 100644 rosapps/dflat32/htree.h delete mode 100644 rosapps/dflat32/huffc.c delete mode 100644 rosapps/dflat32/keys.c delete mode 100644 rosapps/dflat32/keys.h delete mode 100644 rosapps/dflat32/listbox.c delete mode 100644 rosapps/dflat32/lists.c delete mode 100644 rosapps/dflat32/log.c delete mode 100644 rosapps/dflat32/memopad.c delete mode 100644 rosapps/dflat32/menu.c delete mode 100644 rosapps/dflat32/menu.h delete mode 100644 rosapps/dflat32/menubar.c delete mode 100644 rosapps/dflat32/menus.c delete mode 100644 rosapps/dflat32/message.c delete mode 100644 rosapps/dflat32/msgbox.c delete mode 100644 rosapps/dflat32/normal.c delete mode 100644 rosapps/dflat32/pictbox.c delete mode 100644 rosapps/dflat32/popdown.c delete mode 100644 rosapps/dflat32/radio.c delete mode 100644 rosapps/dflat32/readme.doc delete mode 100644 rosapps/dflat32/readme.txt delete mode 100644 rosapps/dflat32/rect.c delete mode 100644 rosapps/dflat32/rect.h delete mode 100644 rosapps/dflat32/search.c delete mode 100644 rosapps/dflat32/slidebox.c delete mode 100644 rosapps/dflat32/spinbutt.c delete mode 100644 rosapps/dflat32/statbar.c delete mode 100644 rosapps/dflat32/sysmenu.c delete mode 100644 rosapps/dflat32/system.h delete mode 100644 rosapps/dflat32/text.c delete mode 100644 rosapps/dflat32/textbox.c delete mode 100644 rosapps/dflat32/video.c delete mode 100644 rosapps/dflat32/video.h delete mode 100644 rosapps/dflat32/watch.c delete mode 100644 rosapps/dflat32/window.c delete mode 100644 rosapps/directory.rbuild delete mode 100755 rosapps/drivers/avtest/avtest.rbuild delete mode 100755 rosapps/drivers/avtest/entry.c delete mode 100644 rosapps/drivers/directory.rbuild delete mode 100644 rosapps/drivers/green/createclose.c delete mode 100644 rosapps/drivers/green/dispatch.c delete mode 100644 rosapps/drivers/green/green.c delete mode 100644 rosapps/drivers/green/green.h delete mode 100644 rosapps/drivers/green/green.inf delete mode 100644 rosapps/drivers/green/green.rbuild delete mode 100644 rosapps/drivers/green/green.rc delete mode 100644 rosapps/drivers/green/keyboard.c delete mode 100644 rosapps/drivers/green/misc.c delete mode 100644 rosapps/drivers/green/pnp.c delete mode 100644 rosapps/drivers/green/power.c delete mode 100644 rosapps/drivers/green/screen.c delete mode 100644 rosapps/drivers/ramdrv/minix/bitops.c delete mode 100644 rosapps/drivers/ramdrv/minix/bitops.h delete mode 100644 rosapps/drivers/ramdrv/minix/block.c delete mode 100644 rosapps/drivers/ramdrv/minix/blockdev.c delete mode 100644 rosapps/drivers/ramdrv/minix/cache.c delete mode 100644 rosapps/drivers/ramdrv/minix/dir.c delete mode 100644 rosapps/drivers/ramdrv/minix/inode.c delete mode 100644 rosapps/drivers/ramdrv/minix/minix.h delete mode 100644 rosapps/drivers/ramdrv/minix/minix.rc delete mode 100644 rosapps/drivers/ramdrv/minix/minix_fs.h delete mode 100644 rosapps/drivers/ramdrv/minix/mount.c delete mode 100644 rosapps/drivers/ramdrv/minix/rw.c delete mode 100644 rosapps/drivers/ramdrv/ramdrv.c delete mode 100644 rosapps/drivers/ramdrv/ramdrv.h delete mode 100644 rosapps/drivers/ramdrv/ramdrv.rbuild delete mode 100644 rosapps/drivers/ramdrv/ramdrv.rc delete mode 100644 rosapps/lib/dflat32/Makefile delete mode 100644 rosapps/lib/dflat32/applicat.c delete mode 100644 rosapps/lib/dflat32/box.c delete mode 100644 rosapps/lib/dflat32/checkbox.c delete mode 100644 rosapps/lib/dflat32/clipbord.c delete mode 100644 rosapps/lib/dflat32/config.c delete mode 100644 rosapps/lib/dflat32/console.c delete mode 100644 rosapps/lib/dflat32/decomp.c delete mode 100644 rosapps/lib/dflat32/dfalloc.c delete mode 100644 rosapps/lib/dflat32/dflat32.def delete mode 100644 rosapps/lib/dflat32/dflat32.rbuild delete mode 100644 rosapps/lib/dflat32/dflat32.rc delete mode 100644 rosapps/lib/dflat32/dialbox.c delete mode 100644 rosapps/lib/dflat32/dialogs.c delete mode 100644 rosapps/lib/dflat32/dllmain.c delete mode 100644 rosapps/lib/dflat32/editbox.c delete mode 100644 rosapps/lib/dflat32/helpbox.c delete mode 100644 rosapps/lib/dflat32/keys.c delete mode 100644 rosapps/lib/dflat32/listbox.c delete mode 100644 rosapps/lib/dflat32/lists.c delete mode 100644 rosapps/lib/dflat32/log.c delete mode 100644 rosapps/lib/dflat32/menu.c delete mode 100644 rosapps/lib/dflat32/menubar.c delete mode 100644 rosapps/lib/dflat32/menus.c delete mode 100644 rosapps/lib/dflat32/message.c delete mode 100644 rosapps/lib/dflat32/msgbox.c delete mode 100644 rosapps/lib/dflat32/normal.c delete mode 100644 rosapps/lib/dflat32/pictbox.c delete mode 100644 rosapps/lib/dflat32/popdown.c delete mode 100644 rosapps/lib/dflat32/radio.c delete mode 100644 rosapps/lib/dflat32/rect.c delete mode 100644 rosapps/lib/dflat32/spinbutt.c delete mode 100644 rosapps/lib/dflat32/statbar.c delete mode 100644 rosapps/lib/dflat32/stubs.c delete mode 100644 rosapps/lib/dflat32/sysmenu.c delete mode 100644 rosapps/lib/dflat32/text.c delete mode 100644 rosapps/lib/dflat32/video.c delete mode 100644 rosapps/lib/dflat32/watch.c delete mode 100644 rosapps/lib/dflat32/window.c delete mode 100644 rosapps/lib/directory.rbuild delete mode 100644 rosapps/lib/libjpeg/LibJPEG.dsp delete mode 100644 rosapps/lib/libjpeg/LibJPEG.vcproj delete mode 100644 rosapps/lib/libjpeg/ansi2knr.c delete mode 100644 rosapps/lib/libjpeg/cderror.h delete mode 100644 rosapps/lib/libjpeg/cdjpeg.c delete mode 100644 rosapps/lib/libjpeg/cdjpeg.h delete mode 100644 rosapps/lib/libjpeg/change.log delete mode 100644 rosapps/lib/libjpeg/cjpeg.c delete mode 100644 rosapps/lib/libjpeg/ckconfig.c delete mode 100644 rosapps/lib/libjpeg/djpeg.c delete mode 100644 rosapps/lib/libjpeg/example.c delete mode 100644 rosapps/lib/libjpeg/jcapimin.c delete mode 100644 rosapps/lib/libjpeg/jcapistd.c delete mode 100644 rosapps/lib/libjpeg/jccoefct.c delete mode 100644 rosapps/lib/libjpeg/jccolor.c delete mode 100644 rosapps/lib/libjpeg/jcdctmgr.c delete mode 100644 rosapps/lib/libjpeg/jchuff.c delete mode 100644 rosapps/lib/libjpeg/jchuff.h delete mode 100644 rosapps/lib/libjpeg/jcinit.c delete mode 100644 rosapps/lib/libjpeg/jcmainct.c delete mode 100644 rosapps/lib/libjpeg/jcmarker.c delete mode 100644 rosapps/lib/libjpeg/jcmaster.c delete mode 100644 rosapps/lib/libjpeg/jcomapi.c delete mode 100644 rosapps/lib/libjpeg/jconfig.h delete mode 100644 rosapps/lib/libjpeg/jcparam.c delete mode 100644 rosapps/lib/libjpeg/jcphuff.c delete mode 100644 rosapps/lib/libjpeg/jcprepct.c delete mode 100644 rosapps/lib/libjpeg/jcsample.c delete mode 100644 rosapps/lib/libjpeg/jctrans.c delete mode 100644 rosapps/lib/libjpeg/jdapimin.c delete mode 100644 rosapps/lib/libjpeg/jdapistd.c delete mode 100644 rosapps/lib/libjpeg/jdatadst.c delete mode 100644 rosapps/lib/libjpeg/jdatasrc.c delete mode 100644 rosapps/lib/libjpeg/jdcoefct.c delete mode 100644 rosapps/lib/libjpeg/jdcolor.c delete mode 100644 rosapps/lib/libjpeg/jdct.h delete mode 100644 rosapps/lib/libjpeg/jddctmgr.c delete mode 100644 rosapps/lib/libjpeg/jdhuff.c delete mode 100644 rosapps/lib/libjpeg/jdhuff.h delete mode 100644 rosapps/lib/libjpeg/jdinput.c delete mode 100644 rosapps/lib/libjpeg/jdmainct.c delete mode 100644 rosapps/lib/libjpeg/jdmarker.c delete mode 100644 rosapps/lib/libjpeg/jdmaster.c delete mode 100644 rosapps/lib/libjpeg/jdmerge.c delete mode 100644 rosapps/lib/libjpeg/jdphuff.c delete mode 100644 rosapps/lib/libjpeg/jdpostct.c delete mode 100644 rosapps/lib/libjpeg/jdsample.c delete mode 100644 rosapps/lib/libjpeg/jdtrans.c delete mode 100644 rosapps/lib/libjpeg/jerror.c delete mode 100644 rosapps/lib/libjpeg/jerror.h delete mode 100644 rosapps/lib/libjpeg/jfdctflt.c delete mode 100644 rosapps/lib/libjpeg/jfdctfst.c delete mode 100644 rosapps/lib/libjpeg/jfdctint.c delete mode 100644 rosapps/lib/libjpeg/jidctflt.c delete mode 100644 rosapps/lib/libjpeg/jidctfst.c delete mode 100644 rosapps/lib/libjpeg/jidctint.c delete mode 100644 rosapps/lib/libjpeg/jidctred.c delete mode 100644 rosapps/lib/libjpeg/jinclude.h delete mode 100644 rosapps/lib/libjpeg/jmemansi.c delete mode 100644 rosapps/lib/libjpeg/jmemdos.c delete mode 100644 rosapps/lib/libjpeg/jmemdosa.asm delete mode 100644 rosapps/lib/libjpeg/jmemmac.c delete mode 100644 rosapps/lib/libjpeg/jmemmgr.c delete mode 100644 rosapps/lib/libjpeg/jmemname.c delete mode 100644 rosapps/lib/libjpeg/jmemnobs.c delete mode 100644 rosapps/lib/libjpeg/jmemsys.h delete mode 100644 rosapps/lib/libjpeg/jmorecfg.h delete mode 100644 rosapps/lib/libjpeg/jpegint.h delete mode 100644 rosapps/lib/libjpeg/jpeglib.h delete mode 100644 rosapps/lib/libjpeg/jpegtran.c delete mode 100644 rosapps/lib/libjpeg/jquant1.c delete mode 100644 rosapps/lib/libjpeg/jquant2.c delete mode 100644 rosapps/lib/libjpeg/jutils.c delete mode 100644 rosapps/lib/libjpeg/jversion.h delete mode 100644 rosapps/lib/libjpeg/libjpeg.rbuild delete mode 100644 rosapps/lib/libjpeg/rdbmp.c delete mode 100644 rosapps/lib/libjpeg/rdcolmap.c delete mode 100644 rosapps/lib/libjpeg/rdgif.c delete mode 100644 rosapps/lib/libjpeg/rdjpgcom.c delete mode 100644 rosapps/lib/libjpeg/rdppm.c delete mode 100644 rosapps/lib/libjpeg/rdrle.c delete mode 100644 rosapps/lib/libjpeg/rdswitch.c delete mode 100644 rosapps/lib/libjpeg/rdtarga.c delete mode 100644 rosapps/lib/libjpeg/transupp.c delete mode 100644 rosapps/lib/libjpeg/transupp.h delete mode 100644 rosapps/lib/libjpeg/wrbmp.c delete mode 100644 rosapps/lib/libjpeg/wrgif.c delete mode 100644 rosapps/lib/libjpeg/wrjpgcom.c delete mode 100644 rosapps/lib/libjpeg/wrppm.c delete mode 100644 rosapps/lib/libjpeg/wrrle.c delete mode 100644 rosapps/lib/libjpeg/wrtarga.c delete mode 100644 rosapps/lib/libpng/docs/ANNOUNCE delete mode 100644 rosapps/lib/libpng/docs/CHANGES delete mode 100644 rosapps/lib/libpng/docs/INSTALL delete mode 100644 rosapps/lib/libpng/docs/KNOWNBUG delete mode 100644 rosapps/lib/libpng/docs/LICENSE delete mode 100644 rosapps/lib/libpng/docs/README delete mode 100644 rosapps/lib/libpng/docs/TODO delete mode 100644 rosapps/lib/libpng/docs/Y2KINFO delete mode 100644 rosapps/lib/libpng/docs/example.c delete mode 100644 rosapps/lib/libpng/docs/libpng-1.2.24.txt delete mode 100644 rosapps/lib/libpng/libpng.rbuild delete mode 100644 rosapps/lib/libpng/png.c delete mode 100644 rosapps/lib/libpng/png.h delete mode 100644 rosapps/lib/libpng/pngconf.h delete mode 100644 rosapps/lib/libpng/pngerror.c delete mode 100644 rosapps/lib/libpng/pnggccrd.c delete mode 100644 rosapps/lib/libpng/pngget.c delete mode 100644 rosapps/lib/libpng/pngmem.c delete mode 100644 rosapps/lib/libpng/pngpread.c delete mode 100644 rosapps/lib/libpng/pngread.c delete mode 100644 rosapps/lib/libpng/pngrio.c delete mode 100644 rosapps/lib/libpng/pngrtran.c delete mode 100644 rosapps/lib/libpng/pngrutil.c delete mode 100644 rosapps/lib/libpng/pngset.c delete mode 100644 rosapps/lib/libpng/pngtest.c delete mode 100644 rosapps/lib/libpng/pngtrans.c delete mode 100644 rosapps/lib/libpng/pngvcrd.c delete mode 100644 rosapps/lib/libpng/pngwio.c delete mode 100644 rosapps/lib/libpng/pngwrite.c delete mode 100644 rosapps/lib/libpng/pngwtran.c delete mode 100644 rosapps/lib/libpng/pngwutil.c delete mode 100644 rosapps/lib/win32err/win32err.c delete mode 100644 rosapps/lib/win32err/win32err.rbuild delete mode 100644 rosapps/makefile delete mode 100644 rosapps/readme.txt delete mode 100644 rosapps/templates/dialog/dialog.c delete mode 100644 rosapps/templates/dialog/dialog.rbuild delete mode 100644 rosapps/templates/dialog/dialog.rc delete mode 100644 rosapps/templates/dialog/memdlg.c delete mode 100644 rosapps/templates/dialog/page1.c delete mode 100644 rosapps/templates/dialog/page2.c delete mode 100644 rosapps/templates/dialog/page3.c delete mode 100644 rosapps/templates/dialog/resource.h delete mode 100644 rosapps/templates/dialog/trace.c delete mode 100644 rosapps/templates/dialog/trace.h delete mode 100644 rosapps/templates/directory.rbuild delete mode 100644 rosapps/templates/mdi/StdAfx.cpp delete mode 100644 rosapps/templates/mdi/StdAfx.h delete mode 100644 rosapps/templates/mdi/about.c delete mode 100644 rosapps/templates/mdi/about.h delete mode 100644 rosapps/templates/mdi/childwnd.c delete mode 100644 rosapps/templates/mdi/childwnd.h delete mode 100644 rosapps/templates/mdi/framewnd.c delete mode 100644 rosapps/templates/mdi/framewnd.h delete mode 100644 rosapps/templates/mdi/main.c delete mode 100644 rosapps/templates/mdi/main.h delete mode 100644 rosapps/templates/mdi/mdi.rbuild delete mode 100644 rosapps/templates/mdi/mdi.rc delete mode 100644 rosapps/templates/mdi/panelwnd.c delete mode 100644 rosapps/templates/mdi/panelwnd.h delete mode 100644 rosapps/templates/mdi/res/images.bmp delete mode 100644 rosapps/templates/mdi/res/mdi.ico delete mode 100644 rosapps/templates/mdi/res/small.ico delete mode 100644 rosapps/templates/mdi/res/toolbar.bmp delete mode 100644 rosapps/templates/mdi/resource.h delete mode 100644 rosapps/templates/mdi/ros2win.c delete mode 100644 rosapps/templates/mdi/ros2win.h delete mode 100644 rosapps/templates/old_wordpad/about.c delete mode 100644 rosapps/templates/old_wordpad/dialogs.c delete mode 100644 rosapps/templates/old_wordpad/editwnd.c delete mode 100644 rosapps/templates/old_wordpad/lang/bg-BG.rc delete mode 100644 rosapps/templates/old_wordpad/lang/de-DE.rc delete mode 100644 rosapps/templates/old_wordpad/lang/el-GR.rc delete mode 100644 rosapps/templates/old_wordpad/lang/en-US.rc delete mode 100644 rosapps/templates/old_wordpad/lang/fi-FI.rc delete mode 100644 rosapps/templates/old_wordpad/lang/fr-FR.rc delete mode 100644 rosapps/templates/old_wordpad/lang/it-IT.rc delete mode 100644 rosapps/templates/old_wordpad/lang/nl-NL.rc delete mode 100644 rosapps/templates/old_wordpad/lang/no-NO.rc delete mode 100644 rosapps/templates/old_wordpad/lang/pl-PL.rc delete mode 100644 rosapps/templates/old_wordpad/lang/ru-RU.rc delete mode 100644 rosapps/templates/old_wordpad/lang/th-TH.rc delete mode 100644 rosapps/templates/old_wordpad/lang/uk-UA.rc delete mode 100644 rosapps/templates/old_wordpad/lang/zh-CN.rc delete mode 100644 rosapps/templates/old_wordpad/mainwnd.c delete mode 100644 rosapps/templates/old_wordpad/misc.c delete mode 100644 rosapps/templates/old_wordpad/old_wordpad.rbuild delete mode 100644 rosapps/templates/old_wordpad/opensave.c delete mode 100644 rosapps/templates/old_wordpad/precomp.h delete mode 100644 rosapps/templates/old_wordpad/res/toolbar.bmp delete mode 100644 rosapps/templates/old_wordpad/res/wordpad.ico delete mode 100644 rosapps/templates/old_wordpad/resource.h delete mode 100644 rosapps/templates/old_wordpad/rsrc.rc delete mode 100644 rosapps/templates/old_wordpad/wordpad.c delete mode 100644 rosapps/templates/old_wordpad/wordpad.rc delete mode 100644 rosapps/templates/skel_service/ServiceMain.c delete mode 100644 rosapps/templates/skel_service/log.c delete mode 100644 rosapps/templates/skel_service/myservice.h delete mode 100644 rosapps/templates/template/template.c delete mode 100644 rostests/.gitignore delete mode 100644 rostests/apitests/apitest.c delete mode 100644 rostests/apitests/apitest.h delete mode 100644 rostests/apitests/dciman32api/dciman32api.c delete mode 100644 rostests/apitests/dciman32api/dciman32api.h delete mode 100644 rostests/apitests/dciman32api/dciman32api.rbuild delete mode 100644 rostests/apitests/dciman32api/testlist.c delete mode 100644 rostests/apitests/dciman32api/tests/DCICreatePrimary.c delete mode 100644 rostests/apitests/directory.rbuild delete mode 100644 rostests/apitests/gdi32api/Notes.txt delete mode 100644 rostests/apitests/gdi32api/gdi.h delete mode 100644 rostests/apitests/gdi32api/gdi32api.c delete mode 100644 rostests/apitests/gdi32api/gdi32api.h delete mode 100644 rostests/apitests/gdi32api/gdi32api.rbuild delete mode 100644 rostests/apitests/gdi32api/testlist.c delete mode 100644 rostests/apitests/gdi32api/tests/AddFontResource.c delete mode 100644 rostests/apitests/gdi32api/tests/AddFontResourceEx.c delete mode 100644 rostests/apitests/gdi32api/tests/BeginPath.c delete mode 100644 rostests/apitests/gdi32api/tests/CreateBitmapIndirect.c delete mode 100644 rostests/apitests/gdi32api/tests/CreateCompatibleDC.c delete mode 100644 rostests/apitests/gdi32api/tests/CreateFont.c delete mode 100644 rostests/apitests/gdi32api/tests/CreatePen.c delete mode 100644 rostests/apitests/gdi32api/tests/CreateRectRgn.c delete mode 100644 rostests/apitests/gdi32api/tests/EngAcquireSemaphore.c delete mode 100644 rostests/apitests/gdi32api/tests/EngCreateSemaphore.c delete mode 100644 rostests/apitests/gdi32api/tests/EngDeleteSemaphore.c delete mode 100644 rostests/apitests/gdi32api/tests/EngReleaseSemaphore.c delete mode 100644 rostests/apitests/gdi32api/tests/ExtCreatePen.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiConvertBitmap.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiConvertBrush.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiConvertDC.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiConvertFont.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiConvertPalette.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiConvertRegion.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiDeleteLocalDC.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiGetCharDimensions.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiGetLocalBrush.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiGetLocalDC.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiReleaseLocalDC.c delete mode 100644 rostests/apitests/gdi32api/tests/GdiSetAttrs.c delete mode 100644 rostests/apitests/gdi32api/tests/GetClipRgn.c delete mode 100644 rostests/apitests/gdi32api/tests/GetCurrentObject.c delete mode 100644 rostests/apitests/gdi32api/tests/GetDIBits.c delete mode 100644 rostests/apitests/gdi32api/tests/GetObject.c delete mode 100644 rostests/apitests/gdi32api/tests/GetStockObject.c delete mode 100644 rostests/apitests/gdi32api/tests/GetTextFace.c delete mode 100644 rostests/apitests/gdi32api/tests/SelectObject.c delete mode 100644 rostests/apitests/gdi32api/tests/SetDCPenColor.c delete mode 100644 rostests/apitests/gdi32api/tests/SetMapMode.c delete mode 100644 rostests/apitests/gdi32api/tests/SetSysColors.c delete mode 100644 rostests/apitests/gdi32api/tests/SetWorldTransform.c delete mode 100644 rostests/apitests/testdata/ReadMe.txt delete mode 100644 rostests/apitests/testdata/test.otf delete mode 100644 rostests/apitests/testdata/test.sfd delete mode 100644 rostests/apitests/testdata/test.ttf delete mode 100644 rostests/apitests/user32api/testlist.c delete mode 100644 rostests/apitests/user32api/tests/InitializeLpkHooks.c delete mode 100644 rostests/apitests/user32api/tests/RealGetWindowClass.c delete mode 100644 rostests/apitests/user32api/tests/ScrollDC.c delete mode 100644 rostests/apitests/user32api/tests/ScrollWindowEx.c delete mode 100644 rostests/apitests/user32api/user32api.c delete mode 100644 rostests/apitests/user32api/user32api.h delete mode 100644 rostests/apitests/user32api/user32api.rbuild delete mode 100644 rostests/apitests/w32kdll/directory.rbuild delete mode 100644 rostests/apitests/w32kdll/w32kdll_2k3sp2/main.c delete mode 100644 rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.S delete mode 100644 rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.def delete mode 100644 rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild delete mode 100644 rostests/apitests/w32kdll/w32kdll_2ksp4/main.c delete mode 100644 rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.S delete mode 100644 rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.def delete mode 100644 rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.rbuild delete mode 100644 rostests/apitests/w32kdll/w32kdll_ros/main.c delete mode 100644 rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.def delete mode 100644 rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.rbuild delete mode 100644 rostests/apitests/w32kdll/w32kdll_vista/main.c delete mode 100644 rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.S delete mode 100644 rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.def delete mode 100644 rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild delete mode 100644 rostests/apitests/w32kdll/w32kdll_xpsp2/main.c delete mode 100644 rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.S delete mode 100644 rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.def delete mode 100644 rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.rbuild delete mode 100644 rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c delete mode 100644 rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c delete mode 100644 rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiBitBlt.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiCreateBitmap.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiCreateCompatibleBitmap.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiDoPalette.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiEngCreatePalette.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiEnumFontOpen.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiGetDIBits.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiGetFontResourceInfoInternalW.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiGetRandomRgn.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiGetStockObject.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiSelectBitmap.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiSelectBrush.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiSelectFont.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiSelectPen.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c delete mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiSetDIBitsToDeviceInternal.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwnd.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwndLock.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwndOpt.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwndParam.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwndParamLock.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallNoParam.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallOneParam.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserEnumDisplaySettings.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserFindExistingCursorIcon.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserGetTitleBarInfo.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserRedrawWindow.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserScrollDC.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserSystemParametersInfo.c delete mode 100644 rostests/apitests/w32knapi/ntuser/NtUserToUnicodeEx.c delete mode 100644 rostests/apitests/w32knapi/osver.c delete mode 100644 rostests/apitests/w32knapi/resource.h delete mode 100644 rostests/apitests/w32knapi/resource/system.ico delete mode 100644 rostests/apitests/w32knapi/testlist.c delete mode 100644 rostests/apitests/w32knapi/w32knapi.c delete mode 100644 rostests/apitests/w32knapi/w32knapi.h delete mode 100644 rostests/apitests/w32knapi/w32knapi.rbuild delete mode 100644 rostests/apitests/w32knapi/w32knapi.rc delete mode 100644 rostests/apitests/ws2_32/helpers.c delete mode 100644 rostests/apitests/ws2_32/testlist.c delete mode 100644 rostests/apitests/ws2_32/tests/ioctlsocket.c delete mode 100644 rostests/apitests/ws2_32/tests/recv.c delete mode 100644 rostests/apitests/ws2_32/ws2_32.c delete mode 100644 rostests/apitests/ws2_32/ws2_32.h delete mode 100644 rostests/apitests/ws2_32/ws2_32.rbuild delete mode 100644 rostests/copying delete mode 100644 rostests/directory.rbuild delete mode 100644 rostests/drivers/csqtest/SOURCES delete mode 100644 rostests/drivers/csqtest/csqtest.c delete mode 100644 rostests/drivers/csqtest/csqtest.rbuild delete mode 100644 rostests/drivers/csqtest/csqtest.rc delete mode 100644 rostests/drivers/directory.rbuild delete mode 100644 rostests/drivers/kmtest/deviface.c delete mode 100644 rostests/drivers/kmtest/deviface_test.c delete mode 100644 rostests/drivers/kmtest/kmtest.c delete mode 100644 rostests/drivers/kmtest/kmtest.h delete mode 100644 rostests/drivers/kmtest/kmtest.rbuild delete mode 100644 rostests/drivers/kmtest/kmtest.rc delete mode 100644 rostests/drivers/kmtest/ntos_ex.c delete mode 100644 rostests/drivers/kmtest/ntos_io.c delete mode 100644 rostests/drivers/kmtest/ntos_ob.c delete mode 100644 rostests/drivers/kmtest/ntos_pools.c delete mode 100644 rostests/drivers/memtest/memtest.c delete mode 100644 rostests/drivers/memtest/memtest.h delete mode 100644 rostests/drivers/memtest/memtest.rbuild delete mode 100644 rostests/drivers/memtest/memtest.rc delete mode 100644 rostests/drivers/ntoskrnl/IoEaTest.cpp delete mode 100644 rostests/dxtest/ddraw/DDraw/available_mem.cpp delete mode 100644 rostests/dxtest/ddraw/DDraw/create.cpp delete mode 100644 rostests/dxtest/ddraw/DDraw/display_modes.cpp delete mode 100644 rostests/dxtest/ddraw/Surface/blt.cpp delete mode 100644 rostests/dxtest/ddraw/Surface/caps_tests.h delete mode 100644 rostests/dxtest/ddraw/Surface/create.cpp delete mode 100644 rostests/dxtest/ddraw/Surface/misc.cpp delete mode 100644 rostests/dxtest/ddraw/Surface/private_data.cpp delete mode 100644 rostests/dxtest/ddraw/ddraw.rbuild delete mode 100644 rostests/dxtest/ddraw/ddraw_test.cpp delete mode 100644 rostests/dxtest/ddraw/ddrawtest.h delete mode 100644 rostests/dxtest/ddraw/debug.cpp delete mode 100644 rostests/dxtest/ddraw/helper.cpp delete mode 100644 rostests/dxtest/ddraw/testlist.cpp delete mode 100644 rostests/dxtest/directory.rbuild delete mode 100644 rostests/dxtest/win32kdxtest/NtGdiDdCanCreateSurface.c delete mode 100644 rostests/dxtest/win32kdxtest/NtGdiDdCreateDirectDrawObject.c delete mode 100644 rostests/dxtest/win32kdxtest/NtGdiDdDeleteDirectDrawObject.c delete mode 100644 rostests/dxtest/win32kdxtest/NtGdiDdGetScanLine.c delete mode 100644 rostests/dxtest/win32kdxtest/NtGdiDdQueryDirectDrawObject.c delete mode 100644 rostests/dxtest/win32kdxtest/NtGdiDdWaitForVerticalBlank.c delete mode 100644 rostests/dxtest/win32kdxtest/dump.c delete mode 100644 rostests/dxtest/win32kdxtest/main.c delete mode 100644 rostests/dxtest/win32kdxtest/test.h delete mode 100644 rostests/dxtest/win32kdxtest/win32kdxtest.rbuild delete mode 100644 rostests/readme.txt delete mode 100644 rostests/regtests_by_casper/directory.rbuild delete mode 100644 rostests/regtests_by_casper/regtests/regtests.c delete mode 100644 rostests/regtests_by_casper/regtests/regtests.def delete mode 100644 rostests/regtests_by_casper/regtests/regtests.rbuild delete mode 100644 rostests/regtests_by_casper/shared/regtests.c delete mode 100644 rostests/regtests_by_casper/shared/regtests.h delete mode 100644 rostests/regtests_by_casper/shared/rtshared.rbuild delete mode 100644 rostests/tests/D3DParseUnknownCommand_show/D3DParseUnknownCommand_show.rbuild delete mode 100644 rostests/tests/D3DParseUnknownCommand_show/main.c delete mode 100644 rostests/tests/DxHalTest/DxHalTest.rbuild delete mode 100644 rostests/tests/DxHalTest/main.c delete mode 100644 rostests/tests/DxHalTest/main.h delete mode 100644 rostests/tests/Imagelistviewer/imagelistviewer.rbuild delete mode 100644 rostests/tests/Imagelistviewer/main.c delete mode 100644 rostests/tests/Imagelistviewer/res.rc delete mode 100644 rostests/tests/Imagelistviewer/resource.h delete mode 100644 rostests/tests/README.txt delete mode 100644 rostests/tests/accelerator/accelerator.c delete mode 100644 rostests/tests/accelerator/accelerator.rbuild delete mode 100644 rostests/tests/alive/alive.c delete mode 100644 rostests/tests/alive/alive.rbuild delete mode 100644 rostests/tests/alphablend/alphablend.c delete mode 100644 rostests/tests/alphablend/alphablend.rbuild delete mode 100644 rostests/tests/alphablend/alphablend.rc delete mode 100644 rostests/tests/alphablend/lena.bmp delete mode 100644 rostests/tests/alphablend/lenaalpha.bmp delete mode 100644 rostests/tests/apc/apc.c delete mode 100644 rostests/tests/apc/apc.rbuild delete mode 100644 rostests/tests/apc2/apc2.c delete mode 100644 rostests/tests/apc2/apc2.rbuild delete mode 100644 rostests/tests/args/args.c delete mode 100644 rostests/tests/args/args.rbuild delete mode 100644 rostests/tests/atomtest/atomtest.c delete mode 100644 rostests/tests/atomtest/atomtest.rbuild delete mode 100644 rostests/tests/bench/bench-syscall.c delete mode 100644 rostests/tests/bench/bench-thread.c delete mode 100644 rostests/tests/bench/bench.rbuild delete mode 100644 rostests/tests/bitblt/bitblt.c delete mode 100644 rostests/tests/bitblt/bitblt.rbuild delete mode 100644 rostests/tests/bitblt/bitblt.rc delete mode 100644 rostests/tests/bitblt/lena.bmp delete mode 100644 rostests/tests/button/button.rbuild delete mode 100644 rostests/tests/button/buttontst.c delete mode 100644 rostests/tests/button2/button2.rbuild delete mode 100644 rostests/tests/button2/buttontst2.c delete mode 100644 rostests/tests/capclock/capclock.c delete mode 100644 rostests/tests/capclock/capclock.ico delete mode 100644 rostests/tests/capclock/capclock.rbuild delete mode 100644 rostests/tests/capclock/capclock.rc delete mode 100644 rostests/tests/carets/caret.bmp delete mode 100644 rostests/tests/carets/carets.c delete mode 100644 rostests/tests/carets/carets.rbuild delete mode 100644 rostests/tests/carets/carets.rc delete mode 100644 rostests/tests/carets/resource.h delete mode 100644 rostests/tests/combotst/combotst.c delete mode 100644 rostests/tests/combotst/combotst.rbuild delete mode 100644 rostests/tests/combotst/utils.c delete mode 100644 rostests/tests/combotst/utils.h delete mode 100644 rostests/tests/consume/consume.c delete mode 100644 rostests/tests/consume/consume.rbuild delete mode 100644 rostests/tests/copymove/copymove.c delete mode 100644 rostests/tests/copymove/copymove.rbuild delete mode 100644 rostests/tests/count/count.c delete mode 100644 rostests/tests/count/count.rbuild delete mode 100644 rostests/tests/create-links/create-links.c delete mode 100644 rostests/tests/create-links/create-links.rbuild delete mode 100644 rostests/tests/dibtest/dibtest.c delete mode 100644 rostests/tests/dibtest/dibtest.rbuild delete mode 100644 rostests/tests/dirdlg/dirdlg.c delete mode 100644 rostests/tests/dirdlg/dirdlg.rbuild delete mode 100644 rostests/tests/dirdlg/dirdlg.rc delete mode 100644 rostests/tests/dirdlg/resource.h delete mode 100644 rostests/tests/directory.rbuild delete mode 100644 rostests/tests/diskspeed/diskspeed.c delete mode 100644 rostests/tests/diskspeed/diskspeed.rbuild delete mode 100644 rostests/tests/dnsapi/dnsapi.c delete mode 100644 rostests/tests/dnsapi/dnsapi.rbuild delete mode 100644 rostests/tests/dnsquery/dnsquery.c delete mode 100644 rostests/tests/dnsquery/dnsquery.rbuild delete mode 100644 rostests/tests/edit/edit.rbuild delete mode 100644 rostests/tests/edit/edittest.c delete mode 100644 rostests/tests/edit/utils.c delete mode 100644 rostests/tests/edit/utils.h delete mode 100644 rostests/tests/enhmetafile/enhmetafile.c delete mode 100644 rostests/tests/enhmetafile/enhmetafile.rbuild delete mode 100644 rostests/tests/enhmetafile/test.emf delete mode 100644 rostests/tests/enumfonts/enumfonts.cpp delete mode 100644 rostests/tests/enumfonts/enumfonts.rbuild delete mode 100644 rostests/tests/enumwnd/enumwnd.c delete mode 100644 rostests/tests/enumwnd/enumwnd.dsp delete mode 100644 rostests/tests/enumwnd/enumwnd.rbuild delete mode 100644 rostests/tests/enumws/enumws.c delete mode 100644 rostests/tests/enumws/enumws.rbuild delete mode 100644 rostests/tests/event/event.c delete mode 100644 rostests/tests/event/event.rbuild delete mode 100644 rostests/tests/fiber/fiber.c delete mode 100644 rostests/tests/fiber/fiber.rbuild delete mode 100644 rostests/tests/gethostbyname/gethostbyname.c delete mode 100644 rostests/tests/gethostbyname/gethostbyname.rbuild delete mode 100644 rostests/tests/global_mem/global_mem.c delete mode 100644 rostests/tests/global_mem/global_mem.rbuild delete mode 100644 rostests/tests/gradient/gradient.c delete mode 100644 rostests/tests/gradient/gradient.rbuild delete mode 100644 rostests/tests/guithreadinfo/guithreadinfo.c delete mode 100644 rostests/tests/guithreadinfo/guithreadinfo.rbuild delete mode 100644 rostests/tests/hello/hello.c delete mode 100644 rostests/tests/hello/hello.rbuild delete mode 100644 rostests/tests/hivetest/hivetest.c delete mode 100644 rostests/tests/hivetest/hivetest.rbuild delete mode 100644 rostests/tests/icontest/icon.ico delete mode 100644 rostests/tests/icontest/icontest.c delete mode 100644 rostests/tests/icontest/icontest.rbuild delete mode 100644 rostests/tests/icontest/icontest.rc delete mode 100644 rostests/tests/icontest/resource.h delete mode 100644 rostests/tests/iptest/iptest.cpp delete mode 100644 rostests/tests/iptest/iptest.rbuild delete mode 100644 rostests/tests/isotest/isotest.c delete mode 100644 rostests/tests/isotest/isotest.rbuild delete mode 100644 rostests/tests/lantst/lantest.cpp delete mode 100644 rostests/tests/lantst/lantest.rbuild delete mode 100644 rostests/tests/lineclip/lineclip.c delete mode 100644 rostests/tests/lineclip/lineclip.rbuild delete mode 100644 rostests/tests/linetest/linetest.c delete mode 100644 rostests/tests/linetest/linetest.rbuild delete mode 100644 rostests/tests/lpctst/conport.c delete mode 100644 rostests/tests/lpctst/creport.c delete mode 100644 rostests/tests/lpctst/dumpinfo.c delete mode 100644 rostests/tests/lpctst/dumpinfo.h delete mode 100644 rostests/tests/lpctst/lpcclt.c delete mode 100644 rostests/tests/lpctst/lpcsrv.c delete mode 100644 rostests/tests/lpctst/lpctest.h delete mode 100644 rostests/tests/lpctst/lpctst.rbuild delete mode 100644 rostests/tests/map_dup_inherit/map_dup_inherit.c delete mode 100644 rostests/tests/map_dup_inherit/map_dup_inherit.rbuild delete mode 100644 rostests/tests/mdi/mdi.c delete mode 100644 rostests/tests/mdi/mdi.rbuild delete mode 100644 rostests/tests/mdi/mdi.rc delete mode 100644 rostests/tests/mdi/resource.h delete mode 100644 rostests/tests/miditest/miditest.c delete mode 100644 rostests/tests/miditest/miditest.rbuild delete mode 100644 rostests/tests/miditest/miditest.rc delete mode 100644 rostests/tests/mktime/mktime.c delete mode 100644 rostests/tests/mktime/mktime.rbuild delete mode 100644 rostests/tests/moztest/moztest.c delete mode 100644 rostests/tests/moztest/moztest.rbuild delete mode 100644 rostests/tests/mstest/msclient.c delete mode 100644 rostests/tests/mstest/msserver.c delete mode 100644 rostests/tests/mstest/mstest.rbuild delete mode 100644 rostests/tests/multithrdwin/multithrdwin.c delete mode 100644 rostests/tests/multithrdwin/multithrdwin.rbuild delete mode 100644 rostests/tests/multiwin/multiwin.c delete mode 100644 rostests/tests/multiwin/multiwin.rbuild delete mode 100644 rostests/tests/mutex/mutex.c delete mode 100644 rostests/tests/mutex/mutex.rbuild delete mode 100644 rostests/tests/nameserverlist/nameserverlist.c delete mode 100644 rostests/tests/nameserverlist/nameserverlist.rbuild delete mode 100644 rostests/tests/noexecute/noexecute.c delete mode 100644 rostests/tests/noexecute/noexecute.rbuild delete mode 100644 rostests/tests/nptest/npclient.c delete mode 100644 rostests/tests/nptest/npserver.c delete mode 100644 rostests/tests/nptest/nptest.rbuild delete mode 100644 rostests/tests/oskittcp/cmd_oskit.py delete mode 100644 rostests/tests/oskittcp/oskittcp.rbuild delete mode 100644 rostests/tests/oskittcp/tcptest.cpp delete mode 100644 rostests/tests/oskittcp/tcptest.dsp delete mode 100644 rostests/tests/oskittcp/tcptest.dsw delete mode 100644 rostests/tests/p_dup_handle/p_dup_handle.c delete mode 100644 rostests/tests/p_dup_handle/p_dup_handle.rbuild delete mode 100644 rostests/tests/palbitblt/pal.c delete mode 100644 rostests/tests/palbitblt/palbitblt.rbuild delete mode 100644 rostests/tests/patblt/Penguin.bmp delete mode 100644 rostests/tests/patblt/patblt.cpp delete mode 100644 rostests/tests/patblt/patblt.rbuild delete mode 100644 rostests/tests/polytest/polytest.cpp delete mode 100644 rostests/tests/polytest/polytest.dsp delete mode 100644 rostests/tests/polytest/polytest.dsw delete mode 100644 rostests/tests/polytest/polytest.rbuild delete mode 100644 rostests/tests/popupmenu/popupmenu.c delete mode 100644 rostests/tests/popupmenu/popupmenu.rbuild delete mode 100644 rostests/tests/popupmenu/popupmenu.rc delete mode 100644 rostests/tests/popupmenu/resource.h delete mode 100644 rostests/tests/primitives/mk_font.cpp delete mode 100644 rostests/tests/primitives/mk_font.h delete mode 100644 rostests/tests/primitives/primitives.cpp delete mode 100644 rostests/tests/primitives/primitives.rbuild delete mode 100644 rostests/tests/pteb/pteb.c delete mode 100644 rostests/tests/pteb/pteb.rbuild delete mode 100644 rostests/tests/readconsole/main.c delete mode 100644 rostests/tests/readconsole/readconsole.rbuild delete mode 100644 rostests/tests/regdump/main.c delete mode 100644 rostests/tests/regdump/regcmds.c delete mode 100644 rostests/tests/regdump/regdump.c delete mode 100644 rostests/tests/regdump/regdump.h delete mode 100644 rostests/tests/regdump/regdump.rbuild delete mode 100644 rostests/tests/regdump/regproc.c delete mode 100644 rostests/tests/regdump/regproc.h delete mode 100644 rostests/tests/regqueryvalue/regqueryvalue.c delete mode 100644 rostests/tests/regqueryvalue/regqueryvalue.rbuild delete mode 100644 rostests/tests/regtest/regtest.c delete mode 100644 rostests/tests/regtest/regtest.rbuild delete mode 100644 rostests/tests/sectest/sectest.c delete mode 100644 rostests/tests/sectest/sectest.rbuild delete mode 100644 rostests/tests/sertest/sertest.c delete mode 100644 rostests/tests/sertest/sertest.rbuild delete mode 100644 rostests/tests/shaptest/shaptest.c delete mode 100644 rostests/tests/shaptest/shaptest.rbuild delete mode 100644 rostests/tests/shm/shm.rbuild delete mode 100644 rostests/tests/shm/shmclt.c delete mode 100644 rostests/tests/shm/shmsrv.c delete mode 100644 rostests/tests/statst/statst.c delete mode 100644 rostests/tests/statst/statst.rbuild delete mode 100644 rostests/tests/statst2/statst2.c delete mode 100644 rostests/tests/statst2/statst2.rbuild delete mode 100644 rostests/tests/stretchblt/lena.bmp delete mode 100644 rostests/tests/stretchblt/stretchblt.cpp delete mode 100644 rostests/tests/stretchblt/stretchblt.rbuild delete mode 100644 rostests/tests/subclass/subclass.c delete mode 100644 rostests/tests/subclass/subclass.rbuild delete mode 100644 rostests/tests/suspend/suspend.c delete mode 100644 rostests/tests/suspend/suspend.rbuild delete mode 100644 rostests/tests/tcpsvr/tcpsvr.c delete mode 100644 rostests/tests/tcpsvr/tcpsvr.rbuild delete mode 100644 rostests/tests/terminate/terminate.c delete mode 100644 rostests/tests/terminate/terminate.rbuild delete mode 100644 rostests/tests/thread/thread.c delete mode 100644 rostests/tests/thread/thread.rbuild delete mode 100644 rostests/tests/thread_msg/thread_msg.c delete mode 100644 rostests/tests/thread_msg/thread_msg.rbuild delete mode 100644 rostests/tests/threadwait/threadwait.c delete mode 100644 rostests/tests/threadwait/threadwait.rbuild delete mode 100644 rostests/tests/tmrqueue/tmrqueue.c delete mode 100644 rostests/tests/tmrqueue/tmrqueue.rbuild delete mode 100644 rostests/tests/tokentest/tokentest.c delete mode 100644 rostests/tests/tokentest/tokentest.rbuild delete mode 100644 rostests/tests/txtscale/mk_font.cpp delete mode 100644 rostests/tests/txtscale/mk_font.h delete mode 100644 rostests/tests/txtscale/txtscale.cpp delete mode 100644 rostests/tests/txtscale/txtscale.rbuild delete mode 100644 rostests/tests/vmtest/vmtest.c delete mode 100644 rostests/tests/vmtest/vmtest.rbuild delete mode 100644 rostests/tests/wclickat/wclickat.c delete mode 100644 rostests/tests/wclickat/wclickat.rbuild delete mode 100644 rostests/tests/wcstombs-tests/wcstombs-tests.c delete mode 100644 rostests/tests/wcstombs-tests/wcstombs-tests.rbuild delete mode 100644 rostests/tests/winhello/winhello.c delete mode 100644 rostests/tests/winhello/winhello.rbuild delete mode 100644 rostests/tests/wm_erasebkgnd/BACKBITMAP.BMP delete mode 100644 rostests/tests/wm_erasebkgnd/wm_erasebkgnd.cpp delete mode 100644 rostests/tests/wm_erasebkgnd/wm_erasebkgnd.rbuild delete mode 100644 rostests/tests/wm_paint/wm_paint.c delete mode 100644 rostests/tests/wm_paint/wm_paint.rbuild delete mode 100644 rostests/tests/wpickclick/wpickclick.c delete mode 100644 rostests/tests/wpickclick/wpickclick.rbuild delete mode 100644 rostests/tests/zwcontinue/i386/zwcontinue.asm delete mode 100644 rostests/tests/zwcontinue/zwcontinue.c delete mode 100644 rostests/tests/zwcontinue/zwcontinue.rbuild delete mode 100644 rostests/win32/DriverLoading/Application/Application.vcproj delete mode 100644 rostests/win32/DriverLoading/Application/DriverTester.h delete mode 100644 rostests/win32/DriverLoading/Application/main.c delete mode 100644 rostests/win32/DriverLoading/Application/umode.c delete mode 100644 rostests/win32/DriverLoading/Application/undoc.c delete mode 100644 rostests/win32/DriverLoading/Driver/Driver.vcproj delete mode 100644 rostests/win32/DriverLoading/Driver/driver.c delete mode 100644 rostests/win32/DriverLoading/DriverTester.sln delete mode 100644 rostests/win32/cmd/cmd_test.rbuild delete mode 100644 rostests/win32/cmd/script_testsuite/lib/testlib.cmd delete mode 100644 rostests/win32/cmd/script_testsuite/run.cmd delete mode 100644 rostests/win32/cmd/script_testsuite/tests/at.cmd delete mode 100644 rostests/win32/cmd/script_testsuite/tests/environment.cmd delete mode 100644 rostests/win32/cmd/script_testsuite/tests/if.cmd delete mode 100644 rostests/win32/cmd/script_testsuite/tests/redirect.cmd delete mode 100644 rostests/win32/cmd/script_testsuite/tests/set.cmd delete mode 100644 rostests/win32/cmd/setup.c delete mode 100644 rostests/win32/cmd/stubs.rbuild delete mode 100644 rostests/win32/kernel32/directory.rbuild delete mode 100644 rostests/win32/kernel32/queuetest/queuetest.c delete mode 100644 rostests/win32/kernel32/queuetest/queuetest.rbuild delete mode 100644 rostests/win32/kernel32/tests/CreateFile.c delete mode 100644 rostests/win32/kernel32/tests/kernel32.rbuild delete mode 100644 rostests/win32/kernel32/tests/setup.c delete mode 100644 rostests/win32/kernel32/tests/stubs.rbuild delete mode 100644 rostests/win32/kmtloader/kmtloader.c delete mode 100644 rostests/win32/kmtloader/kmtloader.rbuild delete mode 100644 rostests/win32/loadlib/loadlib.c delete mode 100644 rostests/win32/loadlib/loadlib.h delete mode 100644 rostests/win32/msvcrt/fileio/_tfileio.c delete mode 100644 rostests/win32/msvcrt/fileio/fileio.c delete mode 100644 rostests/win32/msvcrt/fileio/main.c delete mode 100644 rostests/win32/msvcrt/fileio/main.h delete mode 100644 rostests/win32/msvcrt/fileio/wfileio.c delete mode 100644 rostests/win32/rpcrt4/context_handles/client.c delete mode 100644 rostests/win32/rpcrt4/context_handles/ctx.acf delete mode 100644 rostests/win32/rpcrt4/context_handles/ctx.h delete mode 100644 rostests/win32/rpcrt4/context_handles/ctx.idl delete mode 100644 rostests/win32/rpcrt4/context_handles/ctx_c.c delete mode 100644 rostests/win32/rpcrt4/context_handles/ctx_s.c delete mode 100644 rostests/win32/rpcrt4/context_handles/server.c delete mode 100644 rostests/win32/smss/movefile/movefile.cpp delete mode 100644 rostests/win32/smss/movefile/movefile.rbuild delete mode 100644 rostests/win32/smss/movefile/movefile.rc delete mode 100644 rostests/win32/smss/smss.rbuild delete mode 100644 rostests/win32/testsets.rbuild delete mode 100644 rostests/win32/user32/drawcaption/capicon.c delete mode 100644 rostests/win32/user32/drawcaption/capicon.rc delete mode 100644 rostests/win32/user32/drawcaption/drawcap.c delete mode 100644 rostests/win32/user32/drawcaption/drawcap.rc delete mode 100644 rostests/win32/user32/drawcaption/drawcaption.rbuild delete mode 100644 rostests/win32/user32/drawcaption/res/icon1big.ico delete mode 100644 rostests/win32/user32/drawcaption/res/icon1sm.ico delete mode 100644 rostests/win32/user32/drawcaption/res/icon2big.ico delete mode 100644 rostests/win32/user32/drawcaption/res/icon2sm.ico delete mode 100644 rostests/win32/user32/drawcaption/resource.h delete mode 100644 rostests/win32/user32/kbdlayout/kbdlayout.c delete mode 100644 rostests/win32/user32/kbdlayout/kbdlayout.dsp delete mode 100644 rostests/win32/user32/kbdlayout/kbdlayout.rbuild delete mode 100644 rostests/win32/user32/kbdlayout/kbdlayout.rc delete mode 100644 rostests/win32/user32/kbdlayout/resource.h delete mode 100644 rostests/win32/user32/sysicon/sysicon.c delete mode 100644 rostests/win32/user32/sysicon/sysicon.rbuild delete mode 100644 rostests/win32/user32/user32.rbuild delete mode 100644 rostests/win32/win32k/setup.c delete mode 100644 rostests/win32/win32k/stubs.rbuild delete mode 100644 rostests/win32/win32k/tests/eng-mem-1.c delete mode 100644 rostests/win32/win32k/win32k.rbuild delete mode 100644 rostests/winetests/GUI/GUI.rbuild delete mode 100644 rostests/winetests/GUI/WinetestsGUI.rc delete mode 100644 rostests/winetests/GUI/browsewnd.c delete mode 100644 rostests/winetests/GUI/lang/en-US.rc delete mode 100644 rostests/winetests/GUI/mainwnd.c delete mode 100644 rostests/winetests/GUI/misc.c delete mode 100644 rostests/winetests/GUI/optionswnd.c delete mode 100644 rostests/winetests/GUI/precomp.h delete mode 100644 rostests/winetests/GUI/res/.gitignore delete mode 100644 rostests/winetests/GUI/res/main.ico delete mode 100644 rostests/winetests/GUI/res/tests.ico delete mode 100644 rostests/winetests/GUI/resource.h delete mode 100644 rostests/winetests/GUI/rsrc.rc delete mode 100644 rostests/winetests/advapi32/advapi32.rbuild delete mode 100644 rostests/winetests/advapi32/cred.c delete mode 100644 rostests/winetests/advapi32/crypt.c delete mode 100644 rostests/winetests/advapi32/crypt_lmhash.c delete mode 100644 rostests/winetests/advapi32/crypt_md4.c delete mode 100644 rostests/winetests/advapi32/crypt_md5.c delete mode 100644 rostests/winetests/advapi32/crypt_sha.c delete mode 100644 rostests/winetests/advapi32/lsa.c delete mode 100644 rostests/winetests/advapi32/registry.c delete mode 100644 rostests/winetests/advapi32/security.c delete mode 100644 rostests/winetests/advapi32/service.c delete mode 100644 rostests/winetests/advapi32/testlist.c delete mode 100644 rostests/winetests/advpack/advpack.c delete mode 100644 rostests/winetests/advpack/advpack.rbuild delete mode 100644 rostests/winetests/advpack/files.c delete mode 100644 rostests/winetests/advpack/install.c delete mode 100644 rostests/winetests/advpack/testlist.c delete mode 100644 rostests/winetests/browseui/autocomplete.c delete mode 100644 rostests/winetests/browseui/browseui.rbuild delete mode 100644 rostests/winetests/browseui/testlist.c delete mode 100644 rostests/winetests/cabinet/cabinet.rbuild delete mode 100644 rostests/winetests/cabinet/extract.c delete mode 100644 rostests/winetests/cabinet/fdi.c delete mode 100644 rostests/winetests/cabinet/testlist.c delete mode 100644 rostests/winetests/comcat/comcat.c delete mode 100644 rostests/winetests/comcat/comcat.rbuild delete mode 100644 rostests/winetests/comcat/testlist.c delete mode 100644 rostests/winetests/comctl32/bmp128x15.bmp delete mode 100644 rostests/winetests/comctl32/bmp80x15.bmp delete mode 100644 rostests/winetests/comctl32/comboex.c delete mode 100644 rostests/winetests/comctl32/comctl32.rbuild delete mode 100644 rostests/winetests/comctl32/comctl32_ros.diff delete mode 100644 rostests/winetests/comctl32/datetime.c delete mode 100644 rostests/winetests/comctl32/dpa.c delete mode 100644 rostests/winetests/comctl32/header.c delete mode 100644 rostests/winetests/comctl32/imagelist.c delete mode 100644 rostests/winetests/comctl32/listview.c delete mode 100644 rostests/winetests/comctl32/misc.c delete mode 100644 rostests/winetests/comctl32/monthcal.c delete mode 100644 rostests/winetests/comctl32/mru.c delete mode 100644 rostests/winetests/comctl32/msg.c delete mode 100644 rostests/winetests/comctl32/msg.h delete mode 100644 rostests/winetests/comctl32/progress.c delete mode 100644 rostests/winetests/comctl32/propsheet.c delete mode 100644 rostests/winetests/comctl32/rebar.c delete mode 100644 rostests/winetests/comctl32/resources.h delete mode 100644 rostests/winetests/comctl32/rsrc.rc delete mode 100644 rostests/winetests/comctl32/status.c delete mode 100644 rostests/winetests/comctl32/subclass.c delete mode 100644 rostests/winetests/comctl32/tab.c delete mode 100644 rostests/winetests/comctl32/testlist.c delete mode 100644 rostests/winetests/comctl32/toolbar.c delete mode 100644 rostests/winetests/comctl32/tooltips.c delete mode 100644 rostests/winetests/comctl32/trackbar.c delete mode 100644 rostests/winetests/comctl32/treeview.c delete mode 100644 rostests/winetests/comctl32/updown.c delete mode 100644 rostests/winetests/comdlg32/comdlg32.rbuild delete mode 100644 rostests/winetests/comdlg32/filedlg.c delete mode 100644 rostests/winetests/comdlg32/printdlg.c delete mode 100644 rostests/winetests/comdlg32/testlist.c delete mode 100644 rostests/winetests/directory.rbuild delete mode 100755 rostests/winetests/gdi32/bitmap.c delete mode 100755 rostests/winetests/gdi32/brush.c delete mode 100644 rostests/winetests/gdi32/clipping.c delete mode 100644 rostests/winetests/gdi32/dc.c delete mode 100644 rostests/winetests/gdi32/font.c delete mode 100644 rostests/winetests/gdi32/gdi32.rbuild delete mode 100755 rostests/winetests/gdi32/gdiobj.c delete mode 100644 rostests/winetests/gdi32/generated.c delete mode 100644 rostests/winetests/gdi32/icm.c delete mode 100644 rostests/winetests/gdi32/mapping.c delete mode 100755 rostests/winetests/gdi32/metafile.c delete mode 100644 rostests/winetests/gdi32/palette.c delete mode 100644 rostests/winetests/gdi32/path.c delete mode 100644 rostests/winetests/gdi32/pen.c delete mode 100644 rostests/winetests/gdi32/testlist.c delete mode 100644 rostests/winetests/gdiplus/brush.c delete mode 100644 rostests/winetests/gdiplus/font.c delete mode 100644 rostests/winetests/gdiplus/gdiplus.rbuild delete mode 100644 rostests/winetests/gdiplus/graphics.c delete mode 100644 rostests/winetests/gdiplus/graphicspath.c delete mode 100644 rostests/winetests/gdiplus/image.c delete mode 100644 rostests/winetests/gdiplus/matrix.c delete mode 100644 rostests/winetests/gdiplus/pathiterator.c delete mode 100644 rostests/winetests/gdiplus/pen.c delete mode 100644 rostests/winetests/gdiplus/region.c delete mode 100644 rostests/winetests/gdiplus/stringformat.c delete mode 100644 rostests/winetests/gdiplus/testlist.c delete mode 100644 rostests/winetests/hlink/hlink.c delete mode 100644 rostests/winetests/hlink/hlink.rbuild delete mode 100644 rostests/winetests/hlink/testlist.c delete mode 100644 rostests/winetests/icmp/icmp.c delete mode 100644 rostests/winetests/icmp/icmp.rbuild delete mode 100644 rostests/winetests/icmp/testlist.c delete mode 100644 rostests/winetests/imm32/imm32.c delete mode 100644 rostests/winetests/imm32/imm32.rbuild delete mode 100644 rostests/winetests/imm32/testlist.c delete mode 100644 rostests/winetests/kernel32/actctx.c delete mode 100755 rostests/winetests/kernel32/alloc.c delete mode 100755 rostests/winetests/kernel32/atom.c delete mode 100755 rostests/winetests/kernel32/change.c delete mode 100755 rostests/winetests/kernel32/codepage.c delete mode 100755 rostests/winetests/kernel32/comm.c delete mode 100755 rostests/winetests/kernel32/console.c delete mode 100644 rostests/winetests/kernel32/debugger.c delete mode 100755 rostests/winetests/kernel32/directory.c delete mode 100755 rostests/winetests/kernel32/drive.c delete mode 100755 rostests/winetests/kernel32/environ.c delete mode 100755 rostests/winetests/kernel32/file.c delete mode 100755 rostests/winetests/kernel32/format_msg.c delete mode 100755 rostests/winetests/kernel32/heap.c delete mode 100644 rostests/winetests/kernel32/interlck.c delete mode 100644 rostests/winetests/kernel32/kernel32.rbuild delete mode 100644 rostests/winetests/kernel32/loader.c delete mode 100755 rostests/winetests/kernel32/locale.c delete mode 100755 rostests/winetests/kernel32/mailslot.c delete mode 100755 rostests/winetests/kernel32/module.c delete mode 100755 rostests/winetests/kernel32/path.c delete mode 100755 rostests/winetests/kernel32/pipe.c delete mode 100755 rostests/winetests/kernel32/process.c delete mode 100755 rostests/winetests/kernel32/profile.c delete mode 100644 rostests/winetests/kernel32/resource.c delete mode 100644 rostests/winetests/kernel32/resource.rc delete mode 100755 rostests/winetests/kernel32/sync.c delete mode 100755 rostests/winetests/kernel32/testlist.c delete mode 100755 rostests/winetests/kernel32/thread.c delete mode 100755 rostests/winetests/kernel32/time.c delete mode 100755 rostests/winetests/kernel32/timer.c delete mode 100644 rostests/winetests/kernel32/toolhelp.c delete mode 100644 rostests/winetests/kernel32/version.c delete mode 100755 rostests/winetests/kernel32/virtual.c delete mode 100644 rostests/winetests/kernel32/volume.c delete mode 100644 rostests/winetests/lz32/lz32.rbuild delete mode 100644 rostests/winetests/lz32/lzexpand_main.c delete mode 100644 rostests/winetests/lz32/testlist.c delete mode 100644 rostests/winetests/mapi32/imalloc.c delete mode 100644 rostests/winetests/mapi32/mapi32.rbuild delete mode 100644 rostests/winetests/mapi32/prop.c delete mode 100644 rostests/winetests/mapi32/testlist.c delete mode 100644 rostests/winetests/mapi32/util.c delete mode 100644 rostests/winetests/mlang/mlang.c delete mode 100644 rostests/winetests/mlang/mlang.rbuild delete mode 100644 rostests/winetests/mlang/testlist.c delete mode 100644 rostests/winetests/msacm32/msacm.c delete mode 100644 rostests/winetests/msacm32/msacm32.rbuild delete mode 100644 rostests/winetests/msacm32/testlist.c delete mode 100644 rostests/winetests/mshtml/dom.c delete mode 100644 rostests/winetests/mshtml/htmldoc.c delete mode 100644 rostests/winetests/mshtml/misc.c delete mode 100644 rostests/winetests/mshtml/mshtml.rbuild delete mode 100644 rostests/winetests/mshtml/protocol.c delete mode 100644 rostests/winetests/mshtml/script.c delete mode 100644 rostests/winetests/mshtml/testlist.c delete mode 100644 rostests/winetests/msi/automation.c delete mode 100644 rostests/winetests/msi/db.c delete mode 100644 rostests/winetests/msi/format.c delete mode 100644 rostests/winetests/msi/install.c delete mode 100644 rostests/winetests/msi/msi.c delete mode 100644 rostests/winetests/msi/msi.rbuild delete mode 100644 rostests/winetests/msi/package.c delete mode 100644 rostests/winetests/msi/record.c delete mode 100644 rostests/winetests/msi/source.c delete mode 100644 rostests/winetests/msi/suminfo.c delete mode 100644 rostests/winetests/msi/testlist.c delete mode 100644 rostests/winetests/mstask/mstask.rbuild delete mode 100644 rostests/winetests/mstask/task.c delete mode 100644 rostests/winetests/mstask/task_scheduler.c delete mode 100644 rostests/winetests/mstask/task_trigger.c delete mode 100644 rostests/winetests/mstask/testlist.c delete mode 100644 rostests/winetests/msvcrt/Makefile.in delete mode 100644 rostests/winetests/msvcrt/cpp.c delete mode 100644 rostests/winetests/msvcrt/data.c delete mode 100644 rostests/winetests/msvcrt/dir.c delete mode 100644 rostests/winetests/msvcrt/environ.c delete mode 100644 rostests/winetests/msvcrt/file.c delete mode 100644 rostests/winetests/msvcrt/headers.c delete mode 100644 rostests/winetests/msvcrt/heap.c delete mode 100644 rostests/winetests/msvcrt/msvcrt.rbuild delete mode 100644 rostests/winetests/msvcrt/msvcrt_test.dsp delete mode 100644 rostests/winetests/msvcrt/printf.c delete mode 100644 rostests/winetests/msvcrt/scanf.c delete mode 100644 rostests/winetests/msvcrt/string.c delete mode 100644 rostests/winetests/msvcrt/testlist.c delete mode 100644 rostests/winetests/msvcrt/time.c delete mode 100644 rostests/winetests/netapi32/access.c delete mode 100644 rostests/winetests/netapi32/apibuf.c delete mode 100644 rostests/winetests/netapi32/ds.c delete mode 100644 rostests/winetests/netapi32/netapi32.rbuild delete mode 100644 rostests/winetests/netapi32/testlist.c delete mode 100644 rostests/winetests/netapi32/wksta.c delete mode 100755 rostests/winetests/ntdll/atom.c delete mode 100644 rostests/winetests/ntdll/change.c delete mode 100755 rostests/winetests/ntdll/env.c delete mode 100755 rostests/winetests/ntdll/error.c delete mode 100644 rostests/winetests/ntdll/exception.c delete mode 100644 rostests/winetests/ntdll/file.c delete mode 100755 rostests/winetests/ntdll/generated.c delete mode 100755 rostests/winetests/ntdll/info.c delete mode 100755 rostests/winetests/ntdll/large_int.c delete mode 100644 rostests/winetests/ntdll/ntdll.rbuild delete mode 100755 rostests/winetests/ntdll/ntdll_test.h delete mode 100644 rostests/winetests/ntdll/om.c delete mode 100755 rostests/winetests/ntdll/path.c delete mode 100644 rostests/winetests/ntdll/port.c delete mode 100755 rostests/winetests/ntdll/reg.c delete mode 100755 rostests/winetests/ntdll/rtl.c delete mode 100755 rostests/winetests/ntdll/rtlbitmap.c delete mode 100755 rostests/winetests/ntdll/rtlstr.c delete mode 100755 rostests/winetests/ntdll/string.c delete mode 100644 rostests/winetests/ntdll/testlist.c delete mode 100755 rostests/winetests/ntdll/time.c delete mode 100644 rostests/winetests/odbccp32/misc.c delete mode 100644 rostests/winetests/odbccp32/odbccp32.rbuild delete mode 100644 rostests/winetests/odbccp32/testlist.c delete mode 100644 rostests/winetests/ole32/clipboard.c delete mode 100644 rostests/winetests/ole32/compobj.c delete mode 100644 rostests/winetests/ole32/dragdrop.c delete mode 100644 rostests/winetests/ole32/errorinfo.c delete mode 100644 rostests/winetests/ole32/hglobalstream.c delete mode 100644 rostests/winetests/ole32/marshal.c delete mode 100644 rostests/winetests/ole32/moniker.c delete mode 100644 rostests/winetests/ole32/ole2.c delete mode 100644 rostests/winetests/ole32/ole32.rbuild delete mode 100644 rostests/winetests/ole32/propvariant.c delete mode 100644 rostests/winetests/ole32/stg_prop.c delete mode 100644 rostests/winetests/ole32/storage32.c delete mode 100644 rostests/winetests/ole32/testlist.c delete mode 100644 rostests/winetests/ole32/usrmarshal.c delete mode 100644 rostests/winetests/oleaut32/oleaut32.rbuild delete mode 100644 rostests/winetests/oleaut32/olefont.c delete mode 100644 rostests/winetests/oleaut32/olepicture.c delete mode 100644 rostests/winetests/oleaut32/safearray.c delete mode 100644 rostests/winetests/oleaut32/test_tlb.idl delete mode 100644 rostests/winetests/oleaut32/testlist.c delete mode 100644 rostests/winetests/oleaut32/tmarshal.c delete mode 100644 rostests/winetests/oleaut32/tmarshal.idl delete mode 100644 rostests/winetests/oleaut32/tmarshal.rc delete mode 100644 rostests/winetests/oleaut32/tmarshal_dispids.h delete mode 100644 rostests/winetests/oleaut32/typelib.c delete mode 100644 rostests/winetests/oleaut32/usrmarshal.c delete mode 100644 rostests/winetests/oleaut32/varformat.c delete mode 100644 rostests/winetests/oleaut32/vartest.c delete mode 100644 rostests/winetests/oleaut32/vartype.c delete mode 100644 rostests/winetests/powrprof/powrprof.rbuild delete mode 100644 rostests/winetests/powrprof/pwrprof.c delete mode 100644 rostests/winetests/powrprof/testlist.c delete mode 100644 rostests/winetests/psapi/psapi.rbuild delete mode 100644 rostests/winetests/psapi/psapi_main.c delete mode 100644 rostests/winetests/psapi/testlist.c delete mode 100644 rostests/winetests/riched20/editor.c delete mode 100644 rostests/winetests/riched20/riched20.rbuild delete mode 100644 rostests/winetests/riched20/richole.c delete mode 100644 rostests/winetests/riched20/testlist.c delete mode 100644 rostests/winetests/riched32/editor.c delete mode 100644 rostests/winetests/riched32/riched32.rbuild delete mode 100644 rostests/winetests/riched32/testlist.c delete mode 100644 rostests/winetests/rpcrt4/cstub.c delete mode 100644 rostests/winetests/rpcrt4/generated.c delete mode 100644 rostests/winetests/rpcrt4/ndr_marshall.c delete mode 100644 rostests/winetests/rpcrt4/rpc.c delete mode 100644 rostests/winetests/rpcrt4/rpc_async.c delete mode 100644 rostests/winetests/rpcrt4/rpcrt4.rbuild delete mode 100644 rostests/winetests/rpcrt4/server.c delete mode 100644 rostests/winetests/rpcrt4/server.idl delete mode 100644 rostests/winetests/rpcrt4/server_defines.h delete mode 100644 rostests/winetests/rpcrt4/testlist.c delete mode 100644 rostests/winetests/rsabase/rsabase.c delete mode 100644 rostests/winetests/rsabase/rsabase.rbuild delete mode 100644 rostests/winetests/rsabase/testlist.c delete mode 100644 rostests/winetests/rsaenh/rsaenh.c delete mode 100644 rostests/winetests/rsaenh/rsaenh.rbuild delete mode 100644 rostests/winetests/rsaenh/testlist.c delete mode 100644 rostests/winetests/schannel/main.c delete mode 100644 rostests/winetests/schannel/schannel.rbuild delete mode 100644 rostests/winetests/schannel/testlist.c delete mode 100644 rostests/winetests/setupapi/devclass.c delete mode 100644 rostests/winetests/setupapi/devinst.c delete mode 100644 rostests/winetests/setupapi/install.c delete mode 100644 rostests/winetests/setupapi/misc.c delete mode 100644 rostests/winetests/setupapi/parser.c delete mode 100644 rostests/winetests/setupapi/query.c delete mode 100644 rostests/winetests/setupapi/setupapi.rbuild delete mode 100644 rostests/winetests/setupapi/stringtable.c delete mode 100644 rostests/winetests/setupapi/testlist.c delete mode 100755 rostests/winetests/shell32/generated.c delete mode 100644 rostests/winetests/shell32/shell32.rbuild delete mode 100755 rostests/winetests/shell32/shell32_test.h delete mode 100755 rostests/winetests/shell32/shelllink.c delete mode 100644 rostests/winetests/shell32/shellpath.c delete mode 100644 rostests/winetests/shell32/shfldr_netplaces.c delete mode 100755 rostests/winetests/shell32/shlexec.c delete mode 100644 rostests/winetests/shell32/shlfileop.c delete mode 100644 rostests/winetests/shell32/shlfolder.c delete mode 100755 rostests/winetests/shell32/string.c delete mode 100644 rostests/winetests/shell32/systray.c delete mode 100644 rostests/winetests/shell32/testlist.c delete mode 100755 rostests/winetests/shlwapi/clist.c delete mode 100755 rostests/winetests/shlwapi/clsid.c delete mode 100755 rostests/winetests/shlwapi/generated.c delete mode 100644 rostests/winetests/shlwapi/istream.c delete mode 100755 rostests/winetests/shlwapi/ordinal.c delete mode 100755 rostests/winetests/shlwapi/path.c delete mode 100644 rostests/winetests/shlwapi/shlwapi.rbuild delete mode 100755 rostests/winetests/shlwapi/shreg.c delete mode 100755 rostests/winetests/shlwapi/string.c delete mode 100755 rostests/winetests/shlwapi/testlist.c delete mode 100644 rostests/winetests/shlwapi/url.c delete mode 100644 rostests/winetests/urlmon/generated.c delete mode 100644 rostests/winetests/urlmon/misc.c delete mode 100644 rostests/winetests/urlmon/protocol.c delete mode 100644 rostests/winetests/urlmon/stream.c delete mode 100644 rostests/winetests/urlmon/testlist.c delete mode 100644 rostests/winetests/urlmon/url.c delete mode 100644 rostests/winetests/urlmon/urlmon.rbuild delete mode 100644 rostests/winetests/user32/broadcast.c delete mode 100755 rostests/winetests/user32/class.c delete mode 100755 rostests/winetests/user32/clipboard.c delete mode 100644 rostests/winetests/user32/combo.c delete mode 100644 rostests/winetests/user32/cursoricon.c delete mode 100755 rostests/winetests/user32/dce.c delete mode 100755 rostests/winetests/user32/dde.c delete mode 100755 rostests/winetests/user32/dialog.c delete mode 100755 rostests/winetests/user32/edit.c delete mode 100644 rostests/winetests/user32/generated.c delete mode 100755 rostests/winetests/user32/input.c delete mode 100644 rostests/winetests/user32/listbox.c delete mode 100755 rostests/winetests/user32/menu.c delete mode 100644 rostests/winetests/user32/monitor.c delete mode 100755 rostests/winetests/user32/msg.c delete mode 100755 rostests/winetests/user32/resource.c delete mode 100755 rostests/winetests/user32/resource.rc delete mode 100644 rostests/winetests/user32/scroll.c delete mode 100644 rostests/winetests/user32/static.c delete mode 100755 rostests/winetests/user32/sysparams.c delete mode 100644 rostests/winetests/user32/test_mono.bmp delete mode 100644 rostests/winetests/user32/testlist.c delete mode 100755 rostests/winetests/user32/text.c delete mode 100644 rostests/winetests/user32/user32.rbuild delete mode 100644 rostests/winetests/user32/win.c delete mode 100755 rostests/winetests/user32/winstation.c delete mode 100755 rostests/winetests/user32/wsprintf.c delete mode 100644 rostests/winetests/usp10/testlist.c delete mode 100644 rostests/winetests/usp10/usp10.c delete mode 100644 rostests/winetests/usp10/usp10.rbuild delete mode 100644 rostests/winetests/uxtheme/system.c delete mode 100644 rostests/winetests/uxtheme/testlist.c delete mode 100644 rostests/winetests/uxtheme/uxtheme.rbuild delete mode 100644 rostests/winetests/version/info.c delete mode 100644 rostests/winetests/version/install.c delete mode 100644 rostests/winetests/version/testlist.c delete mode 100644 rostests/winetests/version/version.rbuild delete mode 100644 rostests/winetests/version/version.rc delete mode 100644 rostests/winetests/winetest/config.h delete mode 100644 rostests/winetests/winetest/dist.rc delete mode 100644 rostests/winetests/winetest/gui.c delete mode 100644 rostests/winetests/winetest/main.c delete mode 100644 rostests/winetests/winetest/maketest delete mode 100644 rostests/winetests/winetest/port.h delete mode 100644 rostests/winetests/winetest/resource.h delete mode 100644 rostests/winetests/winetest/send.c delete mode 100644 rostests/winetests/winetest/tests.rc delete mode 100644 rostests/winetests/winetest/util.c delete mode 100644 rostests/winetests/winetest/wine.ico delete mode 100644 rostests/winetests/winetest/winetest.h delete mode 100644 rostests/winetests/winetest/winetest.ico delete mode 100644 rostests/winetests/winetest/winetest.rbuild delete mode 100644 rostests/winetests/winetest/winetest.rc delete mode 100644 rostests/winetests/winhttp/notification.c delete mode 100644 rostests/winetests/winhttp/testlist.c delete mode 100644 rostests/winetests/winhttp/winhttp.c delete mode 100644 rostests/winetests/winhttp/winhttp.rbuild delete mode 100644 rostests/winetests/wininet/ftp.c delete mode 100644 rostests/winetests/wininet/generated.c delete mode 100644 rostests/winetests/wininet/http.c delete mode 100644 rostests/winetests/wininet/internet.c delete mode 100644 rostests/winetests/wininet/testlist.c delete mode 100644 rostests/winetests/wininet/url.c delete mode 100644 rostests/winetests/wininet/urlcache.c delete mode 100644 rostests/winetests/wininet/wininet.rbuild delete mode 100644 rostests/winetests/wininet/wininet_test.h rename {reactos/subsystems => subsystems}/csr/csr.rbuild (100%) rename {reactos/subsystems => subsystems}/csr/csr.rc (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/api.c (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/csrsrv.def (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/csrsrv.rbuild (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/csrsrv.rc (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/init.c (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/process.c (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/server.c (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/session.c (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/srv.h (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/status.h (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/thread.c (100%) rename {reactos/subsystems => subsystems}/csr/csrsrv/wait.c (100%) rename {reactos/subsystems => subsystems}/csr/main.c (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/bg-BG.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/cs-CZ.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/de-DE.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/en-US.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/es-ES.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/fr-FR.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/hu-HU.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/id-ID.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/it-IT.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/ja-JP.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/no-NO.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/pl-PL.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/pt-BR.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/ru-RU.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/sk-SK.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/th-TH.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/lang/uk-UA.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/ntvdm.c (100%) rename {reactos/subsystems => subsystems}/ntvdm/ntvdm.rbuild (100%) rename {reactos/subsystems => subsystems}/ntvdm/ntvdm.rc (100%) rename {reactos/subsystems => subsystems}/ntvdm/resource.h (100%) rename {reactos/subsystems => subsystems}/ntvdm/rsrc.rc (100%) rename {reactos/subsystems => subsystems}/subsystems.rbuild (100%) rename {reactos/subsystems => subsystems}/win/basesrv/basesrv.def (100%) rename {reactos/subsystems => subsystems}/win/basesrv/basesrv.h (100%) rename {reactos/subsystems => subsystems}/win/basesrv/basesrv.rbuild (100%) rename {reactos/subsystems => subsystems}/win/basesrv/basesrv.rc (100%) rename {reactos/subsystems => subsystems}/win/basesrv/init.c (100%) rename {reactos/subsystems => subsystems}/win/basesrv/main.c (100%) rename {reactos/subsystems => subsystems}/win/basesrv/server.c (100%) rename {reactos/subsystems => subsystems}/win/directory.rbuild (100%) rename {reactos/subsystems => subsystems}/win/winsrv/dllmain.c (100%) rename {reactos/subsystems => subsystems}/win/winsrv/init.c (100%) rename {reactos/subsystems => subsystems}/win/winsrv/server.c (100%) rename {reactos/subsystems => subsystems}/win/winsrv/winsrv.def (100%) rename {reactos/subsystems => subsystems}/win/winsrv/winsrv.h (100%) rename {reactos/subsystems => subsystems}/win/winsrv/winsrv.rbuild (100%) rename {reactos/subsystems => subsystems}/win/winsrv/winsrv.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/api/handle.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/api/process.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/api/user.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/api/wapi.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/csrss.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/csrss.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/csrss.rbuild (100%) rename {reactos/subsystems => subsystems}/win32/csrss/csrss.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/include/api.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/include/conio.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/include/csrplugin.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/include/desktopbg.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/include/win32csr.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/init.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/print.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/video.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/alias.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/appswitch.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/conio.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/desktopbg.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/dllmain.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/exitros.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/guiconsole.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/guiconsole.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/bg-BG.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/de-DE.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/el-GR.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/en-US.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/es-ES.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/fr-FR.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/id-ID.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/it-IT.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/no-NO.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/pl-PL.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/ru-RU.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/sk-SK.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/lang/uk-UA.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/res/terminal.ico (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/resource.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/rsrc.rc (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/tuiconsole.c (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/tuiconsole.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/w32csr.h (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/win32csr.def (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/win32csr.rbuild (100%) rename {reactos/subsystems => subsystems}/win32/csrss/win32csr/win32csr.rc (100%) rename {reactos/subsystems => subsystems}/win32/win32.rbuild (100%) rename {reactos/subsystems => subsystems}/win32/win32k/Doxyfile (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib16bpp.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib1bpp.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib24bpp.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib24bppc.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib32bpp.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib32bppc.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib4bpp.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/dib8bpp.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/i386/dib24bpp_hline.s (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/i386/dib32bpp_colorfill.s (100%) rename {reactos/subsystems => subsystems}/win32/win32k/dib/i386/dib32bpp_hline.s (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/bitblt.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/clip.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/copybits.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/debug.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/device.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/driverobj.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/engbrush.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/engmisc.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/engwindow.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/error.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/event.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/float.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/gradient.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/i386/floatobj.S (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/lineto.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/mem.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/misc.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/mouse.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/objects.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/paint.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/palette.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/perfcnt.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/semaphor.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/sort.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/string.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/surface.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/transblt.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/eng/xlate.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/accelerator.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/bitmaps.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/brush.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/callback.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/caret.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/class.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/cleanup.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/clipboard.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/cliprgn.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/color.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/coord.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/csr.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/cursoricon.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/dc.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/dce.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/desktop.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/dib.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/driver.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/eng.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/error.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/floatobj.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/focus.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/gdifloat.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/gdiobj.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/guicheck.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/hook.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/hotkey.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/input.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/intddraw.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/inteng.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/intgdi.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/menu.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/misc.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/mmcopy.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/monitor.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/mouse.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/msgqueue.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/ntuser.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/object.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/paint.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/painting.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/palette.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/path.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/pen.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/prop.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/rect.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/region.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/scroll.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/surface.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/tags.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/text.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/timer.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/useratom.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/userfuncs.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/vis.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/win32.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/win32k.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/window.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/winpos.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/winsta.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/include/xformobj.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ldr/loader.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/main/dllmain.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/copy.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/driver.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/err.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/i386/atan2_asm.s (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/i386/ceil_asm.s (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/i386/cos_asm.s (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/i386/floor_asm.s (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/i386/sin_asm.s (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/math.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/misc/usrheap.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntddraw/d3d.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntddraw/dd.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntddraw/ddraw.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntddraw/ddsurf.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntddraw/dvp.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntddraw/dxeng.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntddraw/eng.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntddraw/mocomp.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/accelerator.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/callback.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/callproc.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/caret.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/class.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/clipboard.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/csr.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/cursoricon.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/defwnd.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/desktop.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/display.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/event.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/focus.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/guicheck.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/hook.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/hotkey.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/input.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/kbdlayout.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/keyboard.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/menu.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/message.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/metric.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/misc.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/monitor.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/msgqueue.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/ntstubs.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/ntuser.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/object.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/painting.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/prop.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/scrollbar.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/session.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/simplecall.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/sysparams.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/timer.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/useratom.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/vis.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/windc.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/window.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/winpos.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/ntuser/winsta.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/arc.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/bezier.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/bitblt.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/bitmaps.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/brush.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/cliprgn.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/color.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/coord.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/dc.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/dcutil.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/dibobj.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/drawing.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/fillshap.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/font.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/gdibatch.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/gdidbg.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/gdiobj.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/icm.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/line.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/metafile.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/palobj.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/path.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/pen.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/polyfill.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/print.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/rect.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/region.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/stockobj.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/text.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/wingl.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/objects/xformobj.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/stubs/stubs.c (100%) rename {reactos/subsystems => subsystems}/win32/win32k/w32k.h (100%) rename {reactos/subsystems => subsystems}/win32/win32k/w32ksvc.db (100%) rename {reactos/subsystems => subsystems}/win32/win32k/win32k.def (100%) rename {reactos/subsystems => subsystems}/win32/win32k/win32k.rbuild (100%) rename {reactos/subsystems => subsystems}/win32/win32k/win32k.rc (100%) rename reactos/vreport.xsl => vreport.xsl (100%) delete mode 100644 wallpaper/.gitignore delete mode 100644 wallpaper/ReadMe.txt delete mode 100644 wallpaper/clouds.jpg delete mode 100644 wallpaper/directory.rbuild delete mode 100644 wallpaper/lake.bmp delete mode 100644 wallpaper/lake.jpg diff --git a/reactos/COPYING b/COPYING similarity index 100% rename from reactos/COPYING rename to COPYING diff --git a/reactos/COPYING.ARM b/COPYING.ARM similarity index 100% rename from reactos/COPYING.ARM rename to COPYING.ARM diff --git a/reactos/CREDITS b/CREDITS similarity index 100% rename from reactos/CREDITS rename to CREDITS diff --git a/reactos/Doxyfile b/Doxyfile similarity index 100% rename from reactos/Doxyfile rename to Doxyfile diff --git a/reactos/INSTALL b/INSTALL similarity index 100% rename from reactos/INSTALL rename to INSTALL diff --git a/reactos/LGPL.txt b/LGPL.txt similarity index 100% rename from reactos/LGPL.txt rename to LGPL.txt diff --git a/reactos/Makefile b/Makefile similarity index 100% rename from reactos/Makefile rename to Makefile diff --git a/reactos/README b/README similarity index 100% rename from reactos/README rename to README diff --git a/reactos/ReactOS-arm.rbuild b/ReactOS-arm.rbuild similarity index 100% rename from reactos/ReactOS-arm.rbuild rename to ReactOS-arm.rbuild diff --git a/reactos/ReactOS-generic.rbuild b/ReactOS-generic.rbuild similarity index 100% rename from reactos/ReactOS-generic.rbuild rename to ReactOS-generic.rbuild diff --git a/reactos/ReactOS-i386.rbuild b/ReactOS-i386.rbuild similarity index 100% rename from reactos/ReactOS-i386.rbuild rename to ReactOS-i386.rbuild diff --git a/reactos/ReactOS-ppc.rbuild b/ReactOS-ppc.rbuild similarity index 100% rename from reactos/ReactOS-ppc.rbuild rename to ReactOS-ppc.rbuild diff --git a/reactos/apistatus.lst b/apistatus.lst similarity index 100% rename from reactos/apistatus.lst rename to apistatus.lst diff --git a/reactos/base/applications/applications.rbuild b/base/applications/applications.rbuild similarity index 100% rename from reactos/base/applications/applications.rbuild rename to base/applications/applications.rbuild diff --git a/reactos/base/applications/cacls/cacls.c b/base/applications/cacls/cacls.c similarity index 100% rename from reactos/base/applications/cacls/cacls.c rename to base/applications/cacls/cacls.c diff --git a/reactos/base/applications/cacls/cacls.rbuild b/base/applications/cacls/cacls.rbuild similarity index 100% rename from reactos/base/applications/cacls/cacls.rbuild rename to base/applications/cacls/cacls.rbuild diff --git a/reactos/base/applications/cacls/cacls.rc b/base/applications/cacls/cacls.rc similarity index 100% rename from reactos/base/applications/cacls/cacls.rc rename to base/applications/cacls/cacls.rc diff --git a/reactos/base/applications/cacls/lang/bg-BG.rc b/base/applications/cacls/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/cacls/lang/bg-BG.rc rename to base/applications/cacls/lang/bg-BG.rc diff --git a/reactos/base/applications/cacls/lang/ca-ES.rc b/base/applications/cacls/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/cacls/lang/ca-ES.rc rename to base/applications/cacls/lang/ca-ES.rc diff --git a/reactos/base/applications/cacls/lang/cs-CZ.rc b/base/applications/cacls/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/cacls/lang/cs-CZ.rc rename to base/applications/cacls/lang/cs-CZ.rc diff --git a/reactos/base/applications/cacls/lang/de-DE.rc b/base/applications/cacls/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/cacls/lang/de-DE.rc rename to base/applications/cacls/lang/de-DE.rc diff --git a/reactos/base/applications/cacls/lang/el-GR.rc b/base/applications/cacls/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/cacls/lang/el-GR.rc rename to base/applications/cacls/lang/el-GR.rc diff --git a/reactos/base/applications/cacls/lang/en-US.rc b/base/applications/cacls/lang/en-US.rc similarity index 100% rename from reactos/base/applications/cacls/lang/en-US.rc rename to base/applications/cacls/lang/en-US.rc diff --git a/reactos/base/applications/cacls/lang/fr-FR.rc b/base/applications/cacls/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/cacls/lang/fr-FR.rc rename to base/applications/cacls/lang/fr-FR.rc diff --git a/reactos/base/applications/cacls/lang/id-ID.rc b/base/applications/cacls/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/cacls/lang/id-ID.rc rename to base/applications/cacls/lang/id-ID.rc diff --git a/reactos/base/applications/cacls/lang/it-IT.rc b/base/applications/cacls/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/cacls/lang/it-IT.rc rename to base/applications/cacls/lang/it-IT.rc diff --git a/reactos/base/applications/cacls/lang/ko-KR.rc b/base/applications/cacls/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/cacls/lang/ko-KR.rc rename to base/applications/cacls/lang/ko-KR.rc diff --git a/reactos/base/applications/cacls/lang/nl-NL.rc b/base/applications/cacls/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/cacls/lang/nl-NL.rc rename to base/applications/cacls/lang/nl-NL.rc diff --git a/reactos/base/applications/cacls/lang/no-NO.rc b/base/applications/cacls/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/cacls/lang/no-NO.rc rename to base/applications/cacls/lang/no-NO.rc diff --git a/reactos/base/applications/cacls/lang/pl-PL.rc b/base/applications/cacls/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/cacls/lang/pl-PL.rc rename to base/applications/cacls/lang/pl-PL.rc diff --git a/reactos/base/applications/cacls/lang/pt-BR.rc b/base/applications/cacls/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/cacls/lang/pt-BR.rc rename to base/applications/cacls/lang/pt-BR.rc diff --git a/reactos/base/applications/cacls/lang/ru-RU.rc b/base/applications/cacls/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/cacls/lang/ru-RU.rc rename to base/applications/cacls/lang/ru-RU.rc diff --git a/reactos/base/applications/cacls/lang/sk-SK.rc b/base/applications/cacls/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/cacls/lang/sk-SK.rc rename to base/applications/cacls/lang/sk-SK.rc diff --git a/reactos/base/applications/cacls/lang/uk-UA.rc b/base/applications/cacls/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/cacls/lang/uk-UA.rc rename to base/applications/cacls/lang/uk-UA.rc diff --git a/reactos/base/applications/cacls/lang/zh-CN.rc b/base/applications/cacls/lang/zh-CN.rc similarity index 100% rename from reactos/base/applications/cacls/lang/zh-CN.rc rename to base/applications/cacls/lang/zh-CN.rc diff --git a/reactos/base/applications/cacls/lang/zh-TW.rc b/base/applications/cacls/lang/zh-TW.rc similarity index 100% rename from reactos/base/applications/cacls/lang/zh-TW.rc rename to base/applications/cacls/lang/zh-TW.rc diff --git a/reactos/base/applications/cacls/precomp.h b/base/applications/cacls/precomp.h similarity index 100% rename from reactos/base/applications/cacls/precomp.h rename to base/applications/cacls/precomp.h diff --git a/reactos/base/applications/cacls/resource.h b/base/applications/cacls/resource.h similarity index 100% rename from reactos/base/applications/cacls/resource.h rename to base/applications/cacls/resource.h diff --git a/reactos/base/applications/cacls/rsrc.rc b/base/applications/cacls/rsrc.rc similarity index 100% rename from reactos/base/applications/cacls/rsrc.rc rename to base/applications/cacls/rsrc.rc diff --git a/reactos/base/applications/calc/about.c b/base/applications/calc/about.c similarity index 100% rename from reactos/base/applications/calc/about.c rename to base/applications/calc/about.c diff --git a/reactos/base/applications/calc/calc.h b/base/applications/calc/calc.h similarity index 100% rename from reactos/base/applications/calc/calc.h rename to base/applications/calc/calc.h diff --git a/reactos/base/applications/calc/calc.rbuild b/base/applications/calc/calc.rbuild similarity index 100% rename from reactos/base/applications/calc/calc.rbuild rename to base/applications/calc/calc.rbuild diff --git a/reactos/base/applications/calc/convert.c b/base/applications/calc/convert.c similarity index 100% rename from reactos/base/applications/calc/convert.c rename to base/applications/calc/convert.c diff --git a/reactos/base/applications/calc/copying.txt b/base/applications/calc/copying.txt similarity index 100% rename from reactos/base/applications/calc/copying.txt rename to base/applications/calc/copying.txt diff --git a/reactos/base/applications/calc/fun_mpfr.c b/base/applications/calc/fun_mpfr.c similarity index 100% rename from reactos/base/applications/calc/fun_mpfr.c rename to base/applications/calc/fun_mpfr.c diff --git a/reactos/base/applications/calc/function.c b/base/applications/calc/function.c similarity index 100% rename from reactos/base/applications/calc/function.c rename to base/applications/calc/function.c diff --git a/reactos/base/applications/calc/help.txt b/base/applications/calc/help.txt similarity index 100% rename from reactos/base/applications/calc/help.txt rename to base/applications/calc/help.txt diff --git a/reactos/base/applications/calc/lang/bg-BG.rc b/base/applications/calc/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/calc/lang/bg-BG.rc rename to base/applications/calc/lang/bg-BG.rc diff --git a/reactos/base/applications/calc/lang/cs-CZ.rc b/base/applications/calc/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/calc/lang/cs-CZ.rc rename to base/applications/calc/lang/cs-CZ.rc diff --git a/reactos/base/applications/calc/lang/de-DE.rc b/base/applications/calc/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/calc/lang/de-DE.rc rename to base/applications/calc/lang/de-DE.rc diff --git a/reactos/base/applications/calc/lang/en-US.rc b/base/applications/calc/lang/en-US.rc similarity index 100% rename from reactos/base/applications/calc/lang/en-US.rc rename to base/applications/calc/lang/en-US.rc diff --git a/reactos/base/applications/calc/lang/es-ES.rc b/base/applications/calc/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/calc/lang/es-ES.rc rename to base/applications/calc/lang/es-ES.rc diff --git a/reactos/base/applications/calc/lang/it-IT.rc b/base/applications/calc/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/calc/lang/it-IT.rc rename to base/applications/calc/lang/it-IT.rc diff --git a/reactos/base/applications/calc/lang/ko-KR.rc b/base/applications/calc/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/calc/lang/ko-KR.rc rename to base/applications/calc/lang/ko-KR.rc diff --git a/reactos/base/applications/calc/lang/nl-NL.rc b/base/applications/calc/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/calc/lang/nl-NL.rc rename to base/applications/calc/lang/nl-NL.rc diff --git a/reactos/base/applications/calc/lang/no-NO.rc b/base/applications/calc/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/calc/lang/no-NO.rc rename to base/applications/calc/lang/no-NO.rc diff --git a/reactos/base/applications/calc/lang/pl-PL.rc b/base/applications/calc/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/calc/lang/pl-PL.rc rename to base/applications/calc/lang/pl-PL.rc diff --git a/reactos/base/applications/calc/lang/ru-RU.rc b/base/applications/calc/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/calc/lang/ru-RU.rc rename to base/applications/calc/lang/ru-RU.rc diff --git a/reactos/base/applications/calc/lang/sk-SK.rc b/base/applications/calc/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/calc/lang/sk-SK.rc rename to base/applications/calc/lang/sk-SK.rc diff --git a/reactos/base/applications/calc/lang/uk-UA.rc b/base/applications/calc/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/calc/lang/uk-UA.rc rename to base/applications/calc/lang/uk-UA.rc diff --git a/reactos/base/applications/calc/readme.txt b/base/applications/calc/readme.txt similarity index 100% rename from reactos/base/applications/calc/readme.txt rename to base/applications/calc/readme.txt diff --git a/reactos/base/applications/calc/res/ROS_logo.bmp b/base/applications/calc/res/ROS_logo.bmp similarity index 100% rename from reactos/base/applications/calc/res/ROS_logo.bmp rename to base/applications/calc/res/ROS_logo.bmp diff --git a/reactos/base/applications/calc/res/calc.ico b/base/applications/calc/res/calc.ico similarity index 100% rename from reactos/base/applications/calc/res/calc.ico rename to base/applications/calc/res/calc.ico diff --git a/reactos/base/applications/calc/res/calc_sm.ico b/base/applications/calc/res/calc_sm.ico similarity index 100% rename from reactos/base/applications/calc/res/calc_sm.ico rename to base/applications/calc/res/calc_sm.ico diff --git a/reactos/base/applications/calc/resource.h b/base/applications/calc/resource.h similarity index 100% rename from reactos/base/applications/calc/resource.h rename to base/applications/calc/resource.h diff --git a/reactos/base/applications/calc/resource.rc b/base/applications/calc/resource.rc similarity index 100% rename from reactos/base/applications/calc/resource.rc rename to base/applications/calc/resource.rc diff --git a/reactos/base/applications/calc/rpn.c b/base/applications/calc/rpn.c similarity index 100% rename from reactos/base/applications/calc/rpn.c rename to base/applications/calc/rpn.c diff --git a/reactos/base/applications/calc/rpn_mpfr.c b/base/applications/calc/rpn_mpfr.c similarity index 100% rename from reactos/base/applications/calc/rpn_mpfr.c rename to base/applications/calc/rpn_mpfr.c diff --git a/reactos/base/applications/calc/todo.txt b/base/applications/calc/todo.txt similarity index 100% rename from reactos/base/applications/calc/todo.txt rename to base/applications/calc/todo.txt diff --git a/reactos/base/applications/calc/utl.c b/base/applications/calc/utl.c similarity index 100% rename from reactos/base/applications/calc/utl.c rename to base/applications/calc/utl.c diff --git a/reactos/base/applications/calc/utl_mpfr.c b/base/applications/calc/utl_mpfr.c similarity index 100% rename from reactos/base/applications/calc/utl_mpfr.c rename to base/applications/calc/utl_mpfr.c diff --git a/reactos/base/applications/calc/whatsnew.txt b/base/applications/calc/whatsnew.txt similarity index 100% rename from reactos/base/applications/calc/whatsnew.txt rename to base/applications/calc/whatsnew.txt diff --git a/reactos/base/applications/calc/winmain.c b/base/applications/calc/winmain.c similarity index 100% rename from reactos/base/applications/calc/winmain.c rename to base/applications/calc/winmain.c diff --git a/reactos/base/applications/calc/wmmsg.h b/base/applications/calc/wmmsg.h similarity index 100% rename from reactos/base/applications/calc/wmmsg.h rename to base/applications/calc/wmmsg.h diff --git a/reactos/base/applications/charmap/about.c b/base/applications/charmap/about.c similarity index 100% rename from reactos/base/applications/charmap/about.c rename to base/applications/charmap/about.c diff --git a/reactos/base/applications/charmap/charmap.c b/base/applications/charmap/charmap.c similarity index 100% rename from reactos/base/applications/charmap/charmap.c rename to base/applications/charmap/charmap.c diff --git a/reactos/base/applications/charmap/charmap.rbuild b/base/applications/charmap/charmap.rbuild similarity index 100% rename from reactos/base/applications/charmap/charmap.rbuild rename to base/applications/charmap/charmap.rbuild diff --git a/reactos/base/applications/charmap/charmap.rc b/base/applications/charmap/charmap.rc similarity index 100% rename from reactos/base/applications/charmap/charmap.rc rename to base/applications/charmap/charmap.rc diff --git a/reactos/base/applications/charmap/lang/bg-BG.rc b/base/applications/charmap/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/charmap/lang/bg-BG.rc rename to base/applications/charmap/lang/bg-BG.rc diff --git a/reactos/base/applications/charmap/lang/ca-ES.rc b/base/applications/charmap/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/charmap/lang/ca-ES.rc rename to base/applications/charmap/lang/ca-ES.rc diff --git a/reactos/base/applications/charmap/lang/cs-CZ.rc b/base/applications/charmap/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/charmap/lang/cs-CZ.rc rename to base/applications/charmap/lang/cs-CZ.rc diff --git a/reactos/base/applications/charmap/lang/de-DE.rc b/base/applications/charmap/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/charmap/lang/de-DE.rc rename to base/applications/charmap/lang/de-DE.rc diff --git a/reactos/base/applications/charmap/lang/el-GR.rc b/base/applications/charmap/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/charmap/lang/el-GR.rc rename to base/applications/charmap/lang/el-GR.rc diff --git a/reactos/base/applications/charmap/lang/en-US.rc b/base/applications/charmap/lang/en-US.rc similarity index 100% rename from reactos/base/applications/charmap/lang/en-US.rc rename to base/applications/charmap/lang/en-US.rc diff --git a/reactos/base/applications/charmap/lang/es-ES.rc b/base/applications/charmap/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/charmap/lang/es-ES.rc rename to base/applications/charmap/lang/es-ES.rc diff --git a/reactos/base/applications/charmap/lang/fr-FR.rc b/base/applications/charmap/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/charmap/lang/fr-FR.rc rename to base/applications/charmap/lang/fr-FR.rc diff --git a/reactos/base/applications/charmap/lang/id-ID.rc b/base/applications/charmap/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/charmap/lang/id-ID.rc rename to base/applications/charmap/lang/id-ID.rc diff --git a/reactos/base/applications/charmap/lang/it-IT.rc b/base/applications/charmap/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/charmap/lang/it-IT.rc rename to base/applications/charmap/lang/it-IT.rc diff --git a/reactos/base/applications/charmap/lang/ko-KR.rc b/base/applications/charmap/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/charmap/lang/ko-KR.rc rename to base/applications/charmap/lang/ko-KR.rc diff --git a/reactos/base/applications/charmap/lang/lt-LT.rc b/base/applications/charmap/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/charmap/lang/lt-LT.rc rename to base/applications/charmap/lang/lt-LT.rc diff --git a/reactos/base/applications/charmap/lang/nl-NL.rc b/base/applications/charmap/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/charmap/lang/nl-NL.rc rename to base/applications/charmap/lang/nl-NL.rc diff --git a/reactos/base/applications/charmap/lang/no-NO.rc b/base/applications/charmap/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/charmap/lang/no-NO.rc rename to base/applications/charmap/lang/no-NO.rc diff --git a/reactos/base/applications/charmap/lang/pl-PL.rc b/base/applications/charmap/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/charmap/lang/pl-PL.rc rename to base/applications/charmap/lang/pl-PL.rc diff --git a/reactos/base/applications/charmap/lang/pt-BR.rc b/base/applications/charmap/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/charmap/lang/pt-BR.rc rename to base/applications/charmap/lang/pt-BR.rc diff --git a/reactos/base/applications/charmap/lang/ru-RU.rc b/base/applications/charmap/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/charmap/lang/ru-RU.rc rename to base/applications/charmap/lang/ru-RU.rc diff --git a/reactos/base/applications/charmap/lang/sk-SK.rc b/base/applications/charmap/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/charmap/lang/sk-SK.rc rename to base/applications/charmap/lang/sk-SK.rc diff --git a/reactos/base/applications/charmap/lang/uk-UA.rc b/base/applications/charmap/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/charmap/lang/uk-UA.rc rename to base/applications/charmap/lang/uk-UA.rc diff --git a/reactos/base/applications/charmap/lrgcell.c b/base/applications/charmap/lrgcell.c similarity index 100% rename from reactos/base/applications/charmap/lrgcell.c rename to base/applications/charmap/lrgcell.c diff --git a/reactos/base/applications/charmap/map.c b/base/applications/charmap/map.c similarity index 100% rename from reactos/base/applications/charmap/map.c rename to base/applications/charmap/map.c diff --git a/reactos/base/applications/charmap/precomp.h b/base/applications/charmap/precomp.h similarity index 100% rename from reactos/base/applications/charmap/precomp.h rename to base/applications/charmap/precomp.h diff --git a/reactos/base/applications/charmap/res/charmap.ico b/base/applications/charmap/res/charmap.ico similarity index 100% rename from reactos/base/applications/charmap/res/charmap.ico rename to base/applications/charmap/res/charmap.ico diff --git a/reactos/base/applications/charmap/resource.h b/base/applications/charmap/resource.h similarity index 100% rename from reactos/base/applications/charmap/resource.h rename to base/applications/charmap/resource.h diff --git a/reactos/base/applications/charmap/rsrc.rc b/base/applications/charmap/rsrc.rc similarity index 100% rename from reactos/base/applications/charmap/rsrc.rc rename to base/applications/charmap/rsrc.rc diff --git a/reactos/base/applications/cmdutils/cmdutils.rbuild b/base/applications/cmdutils/cmdutils.rbuild similarity index 100% rename from reactos/base/applications/cmdutils/cmdutils.rbuild rename to base/applications/cmdutils/cmdutils.rbuild diff --git a/reactos/base/applications/cmdutils/dbgprint/dbgprint.c b/base/applications/cmdutils/dbgprint/dbgprint.c similarity index 100% rename from reactos/base/applications/cmdutils/dbgprint/dbgprint.c rename to base/applications/cmdutils/dbgprint/dbgprint.c diff --git a/reactos/base/applications/cmdutils/dbgprint/dbgprint.rbuild b/base/applications/cmdutils/dbgprint/dbgprint.rbuild similarity index 100% rename from reactos/base/applications/cmdutils/dbgprint/dbgprint.rbuild rename to base/applications/cmdutils/dbgprint/dbgprint.rbuild diff --git a/reactos/base/applications/cmdutils/doskey/doskey.c b/base/applications/cmdutils/doskey/doskey.c similarity index 100% rename from reactos/base/applications/cmdutils/doskey/doskey.c rename to base/applications/cmdutils/doskey/doskey.c diff --git a/reactos/base/applications/cmdutils/doskey/doskey.rbuild b/base/applications/cmdutils/doskey/doskey.rbuild similarity index 100% rename from reactos/base/applications/cmdutils/doskey/doskey.rbuild rename to base/applications/cmdutils/doskey/doskey.rbuild diff --git a/reactos/base/applications/cmdutils/doskey/doskey.rc b/base/applications/cmdutils/doskey/doskey.rc similarity index 100% rename from reactos/base/applications/cmdutils/doskey/doskey.rc rename to base/applications/cmdutils/doskey/doskey.rc diff --git a/reactos/base/applications/cmdutils/find/find.c b/base/applications/cmdutils/find/find.c similarity index 100% rename from reactos/base/applications/cmdutils/find/find.c rename to base/applications/cmdutils/find/find.c diff --git a/reactos/base/applications/cmdutils/find/find.rbuild b/base/applications/cmdutils/find/find.rbuild similarity index 100% rename from reactos/base/applications/cmdutils/find/find.rbuild rename to base/applications/cmdutils/find/find.rbuild diff --git a/reactos/base/applications/cmdutils/find/find.rc b/base/applications/cmdutils/find/find.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/find.rc rename to base/applications/cmdutils/find/find.rc diff --git a/reactos/base/applications/cmdutils/find/lang/bg-BG.rc b/base/applications/cmdutils/find/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/bg-BG.rc rename to base/applications/cmdutils/find/lang/bg-BG.rc diff --git a/reactos/base/applications/cmdutils/find/lang/ca-ES.rc b/base/applications/cmdutils/find/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/ca-ES.rc rename to base/applications/cmdutils/find/lang/ca-ES.rc diff --git a/reactos/base/applications/cmdutils/find/lang/cs-CZ.rc b/base/applications/cmdutils/find/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/cs-CZ.rc rename to base/applications/cmdutils/find/lang/cs-CZ.rc diff --git a/reactos/base/applications/cmdutils/find/lang/de-DE.rc b/base/applications/cmdutils/find/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/de-DE.rc rename to base/applications/cmdutils/find/lang/de-DE.rc diff --git a/reactos/base/applications/cmdutils/find/lang/el-GR.rc b/base/applications/cmdutils/find/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/el-GR.rc rename to base/applications/cmdutils/find/lang/el-GR.rc diff --git a/reactos/base/applications/cmdutils/find/lang/en-US.rc b/base/applications/cmdutils/find/lang/en-US.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/en-US.rc rename to base/applications/cmdutils/find/lang/en-US.rc diff --git a/reactos/base/applications/cmdutils/find/lang/es-ES.rc b/base/applications/cmdutils/find/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/es-ES.rc rename to base/applications/cmdutils/find/lang/es-ES.rc diff --git a/reactos/base/applications/cmdutils/find/lang/fr-FR.rc b/base/applications/cmdutils/find/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/fr-FR.rc rename to base/applications/cmdutils/find/lang/fr-FR.rc diff --git a/reactos/base/applications/cmdutils/find/lang/it-IT.rc b/base/applications/cmdutils/find/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/it-IT.rc rename to base/applications/cmdutils/find/lang/it-IT.rc diff --git a/reactos/base/applications/cmdutils/find/lang/lt-LT.rc b/base/applications/cmdutils/find/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/lt-LT.rc rename to base/applications/cmdutils/find/lang/lt-LT.rc diff --git a/reactos/base/applications/cmdutils/find/lang/no-NO.rc b/base/applications/cmdutils/find/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/no-NO.rc rename to base/applications/cmdutils/find/lang/no-NO.rc diff --git a/reactos/base/applications/cmdutils/find/lang/pl-PL.rc b/base/applications/cmdutils/find/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/pl-PL.rc rename to base/applications/cmdutils/find/lang/pl-PL.rc diff --git a/reactos/base/applications/cmdutils/find/lang/pt-BR.rc b/base/applications/cmdutils/find/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/pt-BR.rc rename to base/applications/cmdutils/find/lang/pt-BR.rc diff --git a/reactos/base/applications/cmdutils/find/lang/ru-RU.rc b/base/applications/cmdutils/find/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/ru-RU.rc rename to base/applications/cmdutils/find/lang/ru-RU.rc diff --git a/reactos/base/applications/cmdutils/find/lang/sk-SK.rc b/base/applications/cmdutils/find/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/sk-SK.rc rename to base/applications/cmdutils/find/lang/sk-SK.rc diff --git a/reactos/base/applications/cmdutils/find/lang/uk-UA.rc b/base/applications/cmdutils/find/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/lang/uk-UA.rc rename to base/applications/cmdutils/find/lang/uk-UA.rc diff --git a/reactos/base/applications/cmdutils/find/resource.h b/base/applications/cmdutils/find/resource.h similarity index 100% rename from reactos/base/applications/cmdutils/find/resource.h rename to base/applications/cmdutils/find/resource.h diff --git a/reactos/base/applications/cmdutils/find/rsrc.rc b/base/applications/cmdutils/find/rsrc.rc similarity index 100% rename from reactos/base/applications/cmdutils/find/rsrc.rc rename to base/applications/cmdutils/find/rsrc.rc diff --git a/reactos/base/applications/cmdutils/hostname/hostname.c b/base/applications/cmdutils/hostname/hostname.c similarity index 100% rename from reactos/base/applications/cmdutils/hostname/hostname.c rename to base/applications/cmdutils/hostname/hostname.c diff --git a/reactos/base/applications/cmdutils/hostname/hostname.rbuild b/base/applications/cmdutils/hostname/hostname.rbuild similarity index 100% rename from reactos/base/applications/cmdutils/hostname/hostname.rbuild rename to base/applications/cmdutils/hostname/hostname.rbuild diff --git a/reactos/base/applications/cmdutils/hostname/hostname.rc b/base/applications/cmdutils/hostname/hostname.rc similarity index 100% rename from reactos/base/applications/cmdutils/hostname/hostname.rc rename to base/applications/cmdutils/hostname/hostname.rc diff --git a/reactos/base/applications/cmdutils/more/lang/bg-BG.rc b/base/applications/cmdutils/more/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/bg-BG.rc rename to base/applications/cmdutils/more/lang/bg-BG.rc diff --git a/reactos/base/applications/cmdutils/more/lang/ca-ES.rc b/base/applications/cmdutils/more/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/ca-ES.rc rename to base/applications/cmdutils/more/lang/ca-ES.rc diff --git a/reactos/base/applications/cmdutils/more/lang/cs-CZ.rc b/base/applications/cmdutils/more/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/cs-CZ.rc rename to base/applications/cmdutils/more/lang/cs-CZ.rc diff --git a/reactos/base/applications/cmdutils/more/lang/de-DE.rc b/base/applications/cmdutils/more/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/de-DE.rc rename to base/applications/cmdutils/more/lang/de-DE.rc diff --git a/reactos/base/applications/cmdutils/more/lang/el-GR.rc b/base/applications/cmdutils/more/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/el-GR.rc rename to base/applications/cmdutils/more/lang/el-GR.rc diff --git a/reactos/base/applications/cmdutils/more/lang/en-US.rc b/base/applications/cmdutils/more/lang/en-US.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/en-US.rc rename to base/applications/cmdutils/more/lang/en-US.rc diff --git a/reactos/base/applications/cmdutils/more/lang/es-ES.rc b/base/applications/cmdutils/more/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/es-ES.rc rename to base/applications/cmdutils/more/lang/es-ES.rc diff --git a/reactos/base/applications/cmdutils/more/lang/fr-FR.rc b/base/applications/cmdutils/more/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/fr-FR.rc rename to base/applications/cmdutils/more/lang/fr-FR.rc diff --git a/reactos/base/applications/cmdutils/more/lang/it-IT.rc b/base/applications/cmdutils/more/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/it-IT.rc rename to base/applications/cmdutils/more/lang/it-IT.rc diff --git a/reactos/base/applications/cmdutils/more/lang/lt-LT.rc b/base/applications/cmdutils/more/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/lt-LT.rc rename to base/applications/cmdutils/more/lang/lt-LT.rc diff --git a/reactos/base/applications/cmdutils/more/lang/no-NO.rc b/base/applications/cmdutils/more/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/no-NO.rc rename to base/applications/cmdutils/more/lang/no-NO.rc diff --git a/reactos/base/applications/cmdutils/more/lang/pl-PL.rc b/base/applications/cmdutils/more/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/pl-PL.rc rename to base/applications/cmdutils/more/lang/pl-PL.rc diff --git a/reactos/base/applications/cmdutils/more/lang/ru-RU.rc b/base/applications/cmdutils/more/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/ru-RU.rc rename to base/applications/cmdutils/more/lang/ru-RU.rc diff --git a/reactos/base/applications/cmdutils/more/lang/sk-SK.rc b/base/applications/cmdutils/more/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/sk-SK.rc rename to base/applications/cmdutils/more/lang/sk-SK.rc diff --git a/reactos/base/applications/cmdutils/more/lang/uk-UA.rc b/base/applications/cmdutils/more/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/lang/uk-UA.rc rename to base/applications/cmdutils/more/lang/uk-UA.rc diff --git a/reactos/base/applications/cmdutils/more/more.c b/base/applications/cmdutils/more/more.c similarity index 100% rename from reactos/base/applications/cmdutils/more/more.c rename to base/applications/cmdutils/more/more.c diff --git a/reactos/base/applications/cmdutils/more/more.rbuild b/base/applications/cmdutils/more/more.rbuild similarity index 100% rename from reactos/base/applications/cmdutils/more/more.rbuild rename to base/applications/cmdutils/more/more.rbuild diff --git a/reactos/base/applications/cmdutils/more/more.rc b/base/applications/cmdutils/more/more.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/more.rc rename to base/applications/cmdutils/more/more.rc diff --git a/reactos/base/applications/cmdutils/more/resource.h b/base/applications/cmdutils/more/resource.h similarity index 100% rename from reactos/base/applications/cmdutils/more/resource.h rename to base/applications/cmdutils/more/resource.h diff --git a/reactos/base/applications/cmdutils/more/rsrc.rc b/base/applications/cmdutils/more/rsrc.rc similarity index 100% rename from reactos/base/applications/cmdutils/more/rsrc.rc rename to base/applications/cmdutils/more/rsrc.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Bg.rc b/base/applications/cmdutils/xcopy/Bg.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/Bg.rc rename to base/applications/cmdutils/xcopy/Bg.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Da.rc b/base/applications/cmdutils/xcopy/Da.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/Da.rc rename to base/applications/cmdutils/xcopy/Da.rc diff --git a/reactos/base/applications/cmdutils/xcopy/De.rc b/base/applications/cmdutils/xcopy/De.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/De.rc rename to base/applications/cmdutils/xcopy/De.rc diff --git a/reactos/base/applications/cmdutils/xcopy/El.rc b/base/applications/cmdutils/xcopy/El.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/El.rc rename to base/applications/cmdutils/xcopy/El.rc diff --git a/reactos/base/applications/cmdutils/xcopy/En.rc b/base/applications/cmdutils/xcopy/En.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/En.rc rename to base/applications/cmdutils/xcopy/En.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Fr.rc b/base/applications/cmdutils/xcopy/Fr.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/Fr.rc rename to base/applications/cmdutils/xcopy/Fr.rc diff --git a/reactos/base/applications/cmdutils/xcopy/It.rc b/base/applications/cmdutils/xcopy/It.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/It.rc rename to base/applications/cmdutils/xcopy/It.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Ko.rc b/base/applications/cmdutils/xcopy/Ko.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/Ko.rc rename to base/applications/cmdutils/xcopy/Ko.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Nl.rc b/base/applications/cmdutils/xcopy/Nl.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/Nl.rc rename to base/applications/cmdutils/xcopy/Nl.rc diff --git a/reactos/base/applications/cmdutils/xcopy/No.rc b/base/applications/cmdutils/xcopy/No.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/No.rc rename to base/applications/cmdutils/xcopy/No.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Pl.rc b/base/applications/cmdutils/xcopy/Pl.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/Pl.rc rename to base/applications/cmdutils/xcopy/Pl.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Ru.rc b/base/applications/cmdutils/xcopy/Ru.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/Ru.rc rename to base/applications/cmdutils/xcopy/Ru.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Si.rc b/base/applications/cmdutils/xcopy/Si.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/Si.rc rename to base/applications/cmdutils/xcopy/Si.rc diff --git a/reactos/base/applications/cmdutils/xcopy/rsrc.rc b/base/applications/cmdutils/xcopy/rsrc.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/rsrc.rc rename to base/applications/cmdutils/xcopy/rsrc.rc diff --git a/reactos/base/applications/cmdutils/xcopy/xcopy.c b/base/applications/cmdutils/xcopy/xcopy.c similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/xcopy.c rename to base/applications/cmdutils/xcopy/xcopy.c diff --git a/reactos/base/applications/cmdutils/xcopy/xcopy.h b/base/applications/cmdutils/xcopy/xcopy.h similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/xcopy.h rename to base/applications/cmdutils/xcopy/xcopy.h diff --git a/reactos/base/applications/cmdutils/xcopy/xcopy.rbuild b/base/applications/cmdutils/xcopy/xcopy.rbuild similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/xcopy.rbuild rename to base/applications/cmdutils/xcopy/xcopy.rbuild diff --git a/reactos/base/applications/cmdutils/xcopy/xcopy.rc b/base/applications/cmdutils/xcopy/xcopy.rc similarity index 100% rename from reactos/base/applications/cmdutils/xcopy/xcopy.rc rename to base/applications/cmdutils/xcopy/xcopy.rc diff --git a/reactos/base/applications/control/control.c b/base/applications/control/control.c similarity index 100% rename from reactos/base/applications/control/control.c rename to base/applications/control/control.c diff --git a/reactos/base/applications/control/control.dsp b/base/applications/control/control.dsp similarity index 100% rename from reactos/base/applications/control/control.dsp rename to base/applications/control/control.dsp diff --git a/reactos/base/applications/control/control.dsw b/base/applications/control/control.dsw similarity index 100% rename from reactos/base/applications/control/control.dsw rename to base/applications/control/control.dsw diff --git a/reactos/base/applications/control/control.h b/base/applications/control/control.h similarity index 100% rename from reactos/base/applications/control/control.h rename to base/applications/control/control.h diff --git a/reactos/base/applications/control/control.rbuild b/base/applications/control/control.rbuild similarity index 100% rename from reactos/base/applications/control/control.rbuild rename to base/applications/control/control.rbuild diff --git a/reactos/base/applications/control/control.rc b/base/applications/control/control.rc similarity index 100% rename from reactos/base/applications/control/control.rc rename to base/applications/control/control.rc diff --git a/reactos/base/applications/control/resource.h b/base/applications/control/resource.h similarity index 100% rename from reactos/base/applications/control/resource.h rename to base/applications/control/resource.h diff --git a/reactos/base/applications/control/resources/config.ico b/base/applications/control/resources/config.ico similarity index 100% rename from reactos/base/applications/control/resources/config.ico rename to base/applications/control/resources/config.ico diff --git a/reactos/base/applications/dxdiag/ddtest.c b/base/applications/dxdiag/ddtest.c similarity index 100% rename from reactos/base/applications/dxdiag/ddtest.c rename to base/applications/dxdiag/ddtest.c diff --git a/reactos/base/applications/dxdiag/display.c b/base/applications/dxdiag/display.c similarity index 100% rename from reactos/base/applications/dxdiag/display.c rename to base/applications/dxdiag/display.c diff --git a/reactos/base/applications/dxdiag/dxdiag.c b/base/applications/dxdiag/dxdiag.c similarity index 100% rename from reactos/base/applications/dxdiag/dxdiag.c rename to base/applications/dxdiag/dxdiag.c diff --git a/reactos/base/applications/dxdiag/dxdiag.rbuild b/base/applications/dxdiag/dxdiag.rbuild similarity index 100% rename from reactos/base/applications/dxdiag/dxdiag.rbuild rename to base/applications/dxdiag/dxdiag.rbuild diff --git a/reactos/base/applications/dxdiag/dxdiag.rc b/base/applications/dxdiag/dxdiag.rc similarity index 100% rename from reactos/base/applications/dxdiag/dxdiag.rc rename to base/applications/dxdiag/dxdiag.rc diff --git a/reactos/base/applications/dxdiag/help.c b/base/applications/dxdiag/help.c similarity index 100% rename from reactos/base/applications/dxdiag/help.c rename to base/applications/dxdiag/help.c diff --git a/reactos/base/applications/dxdiag/input.c b/base/applications/dxdiag/input.c similarity index 100% rename from reactos/base/applications/dxdiag/input.c rename to base/applications/dxdiag/input.c diff --git a/reactos/base/applications/dxdiag/lang/bg-BG.rc b/base/applications/dxdiag/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/bg-BG.rc rename to base/applications/dxdiag/lang/bg-BG.rc diff --git a/reactos/base/applications/dxdiag/lang/cs-CZ.rc b/base/applications/dxdiag/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/cs-CZ.rc rename to base/applications/dxdiag/lang/cs-CZ.rc diff --git a/reactos/base/applications/dxdiag/lang/de-DE.rc b/base/applications/dxdiag/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/de-DE.rc rename to base/applications/dxdiag/lang/de-DE.rc diff --git a/reactos/base/applications/dxdiag/lang/en-US.rc b/base/applications/dxdiag/lang/en-US.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/en-US.rc rename to base/applications/dxdiag/lang/en-US.rc diff --git a/reactos/base/applications/dxdiag/lang/es-ES.rc b/base/applications/dxdiag/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/es-ES.rc rename to base/applications/dxdiag/lang/es-ES.rc diff --git a/reactos/base/applications/dxdiag/lang/fr-FR.rc b/base/applications/dxdiag/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/fr-FR.rc rename to base/applications/dxdiag/lang/fr-FR.rc diff --git a/reactos/base/applications/dxdiag/lang/no-NO.rc b/base/applications/dxdiag/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/no-NO.rc rename to base/applications/dxdiag/lang/no-NO.rc diff --git a/reactos/base/applications/dxdiag/lang/pl-PL.rc b/base/applications/dxdiag/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/pl-PL.rc rename to base/applications/dxdiag/lang/pl-PL.rc diff --git a/reactos/base/applications/dxdiag/lang/ru-RU.rc b/base/applications/dxdiag/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/ru-RU.rc rename to base/applications/dxdiag/lang/ru-RU.rc diff --git a/reactos/base/applications/dxdiag/lang/sk-SK.rc b/base/applications/dxdiag/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/sk-SK.rc rename to base/applications/dxdiag/lang/sk-SK.rc diff --git a/reactos/base/applications/dxdiag/music.c b/base/applications/dxdiag/music.c similarity index 100% rename from reactos/base/applications/dxdiag/music.c rename to base/applications/dxdiag/music.c diff --git a/reactos/base/applications/dxdiag/network.c b/base/applications/dxdiag/network.c similarity index 100% rename from reactos/base/applications/dxdiag/network.c rename to base/applications/dxdiag/network.c diff --git a/reactos/base/applications/dxdiag/precomp.h b/base/applications/dxdiag/precomp.h similarity index 100% rename from reactos/base/applications/dxdiag/precomp.h rename to base/applications/dxdiag/precomp.h diff --git a/reactos/base/applications/dxdiag/res/dxdiag.ico b/base/applications/dxdiag/res/dxdiag.ico similarity index 100% rename from reactos/base/applications/dxdiag/res/dxdiag.ico rename to base/applications/dxdiag/res/dxdiag.ico diff --git a/reactos/base/applications/dxdiag/resource.h b/base/applications/dxdiag/resource.h similarity index 100% rename from reactos/base/applications/dxdiag/resource.h rename to base/applications/dxdiag/resource.h diff --git a/reactos/base/applications/dxdiag/rsrc.rc b/base/applications/dxdiag/rsrc.rc similarity index 100% rename from reactos/base/applications/dxdiag/rsrc.rc rename to base/applications/dxdiag/rsrc.rc diff --git a/reactos/base/applications/dxdiag/sound.c b/base/applications/dxdiag/sound.c similarity index 100% rename from reactos/base/applications/dxdiag/sound.c rename to base/applications/dxdiag/sound.c diff --git a/reactos/base/applications/dxdiag/system.c b/base/applications/dxdiag/system.c similarity index 100% rename from reactos/base/applications/dxdiag/system.c rename to base/applications/dxdiag/system.c diff --git a/reactos/base/applications/games/games.rbuild b/base/applications/games/games.rbuild similarity index 100% rename from reactos/base/applications/games/games.rbuild rename to base/applications/games/games.rbuild diff --git a/reactos/base/applications/games/solitaire/ReadMe.txt b/base/applications/games/solitaire/ReadMe.txt similarity index 100% rename from reactos/base/applications/games/solitaire/ReadMe.txt rename to base/applications/games/solitaire/ReadMe.txt diff --git a/reactos/base/applications/games/solitaire/cardlib/card.h b/base/applications/games/solitaire/cardlib/card.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/card.h rename to base/applications/games/solitaire/cardlib/card.h diff --git a/reactos/base/applications/games/solitaire/cardlib/cardbitmaps.cpp b/base/applications/games/solitaire/cardlib/cardbitmaps.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardbitmaps.cpp rename to base/applications/games/solitaire/cardlib/cardbitmaps.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardbutton.cpp b/base/applications/games/solitaire/cardlib/cardbutton.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardbutton.cpp rename to base/applications/games/solitaire/cardlib/cardbutton.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardbutton.h b/base/applications/games/solitaire/cardlib/cardbutton.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardbutton.h rename to base/applications/games/solitaire/cardlib/cardbutton.h diff --git a/reactos/base/applications/games/solitaire/cardlib/cardcolor.cpp b/base/applications/games/solitaire/cardlib/cardcolor.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardcolor.cpp rename to base/applications/games/solitaire/cardlib/cardcolor.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardcolor.h b/base/applications/games/solitaire/cardlib/cardcolor.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardcolor.h rename to base/applications/games/solitaire/cardlib/cardcolor.h diff --git a/reactos/base/applications/games/solitaire/cardlib/cardcount.cpp b/base/applications/games/solitaire/cardlib/cardcount.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardcount.cpp rename to base/applications/games/solitaire/cardlib/cardcount.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardcount.h b/base/applications/games/solitaire/cardlib/cardcount.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardcount.h rename to base/applications/games/solitaire/cardlib/cardcount.h diff --git a/reactos/base/applications/games/solitaire/cardlib/cardlib.cpp b/base/applications/games/solitaire/cardlib/cardlib.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardlib.cpp rename to base/applications/games/solitaire/cardlib/cardlib.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardlib.h b/base/applications/games/solitaire/cardlib/cardlib.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardlib.h rename to base/applications/games/solitaire/cardlib/cardlib.h diff --git a/reactos/base/applications/games/solitaire/cardlib/cardregion.cpp b/base/applications/games/solitaire/cardlib/cardregion.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardregion.cpp rename to base/applications/games/solitaire/cardlib/cardregion.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardregion.h b/base/applications/games/solitaire/cardlib/cardregion.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardregion.h rename to base/applications/games/solitaire/cardlib/cardregion.h diff --git a/reactos/base/applications/games/solitaire/cardlib/cardrgndraw.cpp b/base/applications/games/solitaire/cardlib/cardrgndraw.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardrgndraw.cpp rename to base/applications/games/solitaire/cardlib/cardrgndraw.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardrgnmouse.cpp b/base/applications/games/solitaire/cardlib/cardrgnmouse.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardrgnmouse.cpp rename to base/applications/games/solitaire/cardlib/cardrgnmouse.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardstack.cpp b/base/applications/games/solitaire/cardlib/cardstack.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardstack.cpp rename to base/applications/games/solitaire/cardlib/cardstack.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardstack.h b/base/applications/games/solitaire/cardlib/cardstack.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardstack.h rename to base/applications/games/solitaire/cardlib/cardstack.h diff --git a/reactos/base/applications/games/solitaire/cardlib/cardwindow.cpp b/base/applications/games/solitaire/cardlib/cardwindow.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardwindow.cpp rename to base/applications/games/solitaire/cardlib/cardwindow.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/cardwindow.h b/base/applications/games/solitaire/cardlib/cardwindow.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/cardwindow.h rename to base/applications/games/solitaire/cardlib/cardwindow.h diff --git a/reactos/base/applications/games/solitaire/cardlib/dropzone.cpp b/base/applications/games/solitaire/cardlib/dropzone.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/dropzone.cpp rename to base/applications/games/solitaire/cardlib/dropzone.cpp diff --git a/reactos/base/applications/games/solitaire/cardlib/dropzone.h b/base/applications/games/solitaire/cardlib/dropzone.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/dropzone.h rename to base/applications/games/solitaire/cardlib/dropzone.h diff --git a/reactos/base/applications/games/solitaire/cardlib/globals.h b/base/applications/games/solitaire/cardlib/globals.h similarity index 100% rename from reactos/base/applications/games/solitaire/cardlib/globals.h rename to base/applications/games/solitaire/cardlib/globals.h diff --git a/reactos/base/applications/games/solitaire/lang/bg-BG.rc b/base/applications/games/solitaire/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/bg-BG.rc rename to base/applications/games/solitaire/lang/bg-BG.rc diff --git a/reactos/base/applications/games/solitaire/lang/ca-ES.rc b/base/applications/games/solitaire/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/ca-ES.rc rename to base/applications/games/solitaire/lang/ca-ES.rc diff --git a/reactos/base/applications/games/solitaire/lang/cs-CZ.rc b/base/applications/games/solitaire/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/cs-CZ.rc rename to base/applications/games/solitaire/lang/cs-CZ.rc diff --git a/reactos/base/applications/games/solitaire/lang/de-DE.rc b/base/applications/games/solitaire/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/de-DE.rc rename to base/applications/games/solitaire/lang/de-DE.rc diff --git a/reactos/base/applications/games/solitaire/lang/el-GR.rc b/base/applications/games/solitaire/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/el-GR.rc rename to base/applications/games/solitaire/lang/el-GR.rc diff --git a/reactos/base/applications/games/solitaire/lang/en-US.rc b/base/applications/games/solitaire/lang/en-US.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/en-US.rc rename to base/applications/games/solitaire/lang/en-US.rc diff --git a/reactos/base/applications/games/solitaire/lang/es-ES.rc b/base/applications/games/solitaire/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/es-ES.rc rename to base/applications/games/solitaire/lang/es-ES.rc diff --git a/reactos/base/applications/games/solitaire/lang/eu-ES.rc b/base/applications/games/solitaire/lang/eu-ES.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/eu-ES.rc rename to base/applications/games/solitaire/lang/eu-ES.rc diff --git a/reactos/base/applications/games/solitaire/lang/fr-FR.rc b/base/applications/games/solitaire/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/fr-FR.rc rename to base/applications/games/solitaire/lang/fr-FR.rc diff --git a/reactos/base/applications/games/solitaire/lang/id-ID.rc b/base/applications/games/solitaire/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/id-ID.rc rename to base/applications/games/solitaire/lang/id-ID.rc diff --git a/reactos/base/applications/games/solitaire/lang/it-IT.rc b/base/applications/games/solitaire/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/it-IT.rc rename to base/applications/games/solitaire/lang/it-IT.rc diff --git a/reactos/base/applications/games/solitaire/lang/lt-LT.rc b/base/applications/games/solitaire/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/lt-LT.rc rename to base/applications/games/solitaire/lang/lt-LT.rc diff --git a/reactos/base/applications/games/solitaire/lang/no-NO.rc b/base/applications/games/solitaire/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/no-NO.rc rename to base/applications/games/solitaire/lang/no-NO.rc diff --git a/reactos/base/applications/games/solitaire/lang/pl-PL.rc b/base/applications/games/solitaire/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/pl-PL.rc rename to base/applications/games/solitaire/lang/pl-PL.rc diff --git a/reactos/base/applications/games/solitaire/lang/ru-RU.rc b/base/applications/games/solitaire/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/ru-RU.rc rename to base/applications/games/solitaire/lang/ru-RU.rc diff --git a/reactos/base/applications/games/solitaire/lang/sk-SK.rc b/base/applications/games/solitaire/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/sk-SK.rc rename to base/applications/games/solitaire/lang/sk-SK.rc diff --git a/reactos/base/applications/games/solitaire/lang/th-TH.rc b/base/applications/games/solitaire/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/th-TH.rc rename to base/applications/games/solitaire/lang/th-TH.rc diff --git a/reactos/base/applications/games/solitaire/lang/uk-UA.rc b/base/applications/games/solitaire/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/uk-UA.rc rename to base/applications/games/solitaire/lang/uk-UA.rc diff --git a/reactos/base/applications/games/solitaire/lang/zh-CN.rc b/base/applications/games/solitaire/lang/zh-CN.rc similarity index 100% rename from reactos/base/applications/games/solitaire/lang/zh-CN.rc rename to base/applications/games/solitaire/lang/zh-CN.rc diff --git a/reactos/base/applications/games/solitaire/resource.h b/base/applications/games/solitaire/resource.h similarity index 100% rename from reactos/base/applications/games/solitaire/resource.h rename to base/applications/games/solitaire/resource.h diff --git a/reactos/base/applications/games/solitaire/rsrc.rc b/base/applications/games/solitaire/rsrc.rc similarity index 100% rename from reactos/base/applications/games/solitaire/rsrc.rc rename to base/applications/games/solitaire/rsrc.rc diff --git a/reactos/base/applications/games/solitaire/solcreate.cpp b/base/applications/games/solitaire/solcreate.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/solcreate.cpp rename to base/applications/games/solitaire/solcreate.cpp diff --git a/reactos/base/applications/games/solitaire/solgame.cpp b/base/applications/games/solitaire/solgame.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/solgame.cpp rename to base/applications/games/solitaire/solgame.cpp diff --git a/reactos/base/applications/games/solitaire/solitaire.cpp b/base/applications/games/solitaire/solitaire.cpp similarity index 100% rename from reactos/base/applications/games/solitaire/solitaire.cpp rename to base/applications/games/solitaire/solitaire.cpp diff --git a/reactos/base/applications/games/solitaire/solitaire.h b/base/applications/games/solitaire/solitaire.h similarity index 100% rename from reactos/base/applications/games/solitaire/solitaire.h rename to base/applications/games/solitaire/solitaire.h diff --git a/reactos/base/applications/games/solitaire/solitaire.ico b/base/applications/games/solitaire/solitaire.ico similarity index 100% rename from reactos/base/applications/games/solitaire/solitaire.ico rename to base/applications/games/solitaire/solitaire.ico diff --git a/reactos/base/applications/games/solitaire/solitaire.rbuild b/base/applications/games/solitaire/solitaire.rbuild similarity index 100% rename from reactos/base/applications/games/solitaire/solitaire.rbuild rename to base/applications/games/solitaire/solitaire.rbuild diff --git a/reactos/base/applications/games/winemine/README b/base/applications/games/winemine/README similarity index 100% rename from reactos/base/applications/games/winemine/README rename to base/applications/games/winemine/README diff --git a/reactos/base/applications/games/winemine/dialog.c b/base/applications/games/winemine/dialog.c similarity index 100% rename from reactos/base/applications/games/winemine/dialog.c rename to base/applications/games/winemine/dialog.c diff --git a/reactos/base/applications/games/winemine/dialog.h b/base/applications/games/winemine/dialog.h similarity index 100% rename from reactos/base/applications/games/winemine/dialog.h rename to base/applications/games/winemine/dialog.h diff --git a/reactos/base/applications/games/winemine/lang/bg-BG.rc b/base/applications/games/winemine/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/bg-BG.rc rename to base/applications/games/winemine/lang/bg-BG.rc diff --git a/reactos/base/applications/games/winemine/lang/ca-ES.rc b/base/applications/games/winemine/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/ca-ES.rc rename to base/applications/games/winemine/lang/ca-ES.rc diff --git a/reactos/base/applications/games/winemine/lang/cs-CZ.rc b/base/applications/games/winemine/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/cs-CZ.rc rename to base/applications/games/winemine/lang/cs-CZ.rc diff --git a/reactos/base/applications/games/winemine/lang/de-DE.rc b/base/applications/games/winemine/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/de-DE.rc rename to base/applications/games/winemine/lang/de-DE.rc diff --git a/reactos/base/applications/games/winemine/lang/el-GR.rc b/base/applications/games/winemine/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/el-GR.rc rename to base/applications/games/winemine/lang/el-GR.rc diff --git a/reactos/base/applications/games/winemine/lang/en-US.rc b/base/applications/games/winemine/lang/en-US.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/en-US.rc rename to base/applications/games/winemine/lang/en-US.rc diff --git a/reactos/base/applications/games/winemine/lang/es-ES.rc b/base/applications/games/winemine/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/es-ES.rc rename to base/applications/games/winemine/lang/es-ES.rc diff --git a/reactos/base/applications/games/winemine/lang/eu-ES.rc b/base/applications/games/winemine/lang/eu-ES.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/eu-ES.rc rename to base/applications/games/winemine/lang/eu-ES.rc diff --git a/reactos/base/applications/games/winemine/lang/fr-FR.rc b/base/applications/games/winemine/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/fr-FR.rc rename to base/applications/games/winemine/lang/fr-FR.rc diff --git a/reactos/base/applications/games/winemine/lang/id-ID.rc b/base/applications/games/winemine/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/id-ID.rc rename to base/applications/games/winemine/lang/id-ID.rc diff --git a/reactos/base/applications/games/winemine/lang/it-IT.rc b/base/applications/games/winemine/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/it-IT.rc rename to base/applications/games/winemine/lang/it-IT.rc diff --git a/reactos/base/applications/games/winemine/lang/ko-KR.rc b/base/applications/games/winemine/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/ko-KR.rc rename to base/applications/games/winemine/lang/ko-KR.rc diff --git a/reactos/base/applications/games/winemine/lang/lt-LT.rc b/base/applications/games/winemine/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/lt-LT.rc rename to base/applications/games/winemine/lang/lt-LT.rc diff --git a/reactos/base/applications/games/winemine/lang/nl-NL.rc b/base/applications/games/winemine/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/nl-NL.rc rename to base/applications/games/winemine/lang/nl-NL.rc diff --git a/reactos/base/applications/games/winemine/lang/no-NO.rc b/base/applications/games/winemine/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/no-NO.rc rename to base/applications/games/winemine/lang/no-NO.rc diff --git a/reactos/base/applications/games/winemine/lang/pl-PL.rc b/base/applications/games/winemine/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/pl-PL.rc rename to base/applications/games/winemine/lang/pl-PL.rc diff --git a/reactos/base/applications/games/winemine/lang/ru-RU.rc b/base/applications/games/winemine/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/ru-RU.rc rename to base/applications/games/winemine/lang/ru-RU.rc diff --git a/reactos/base/applications/games/winemine/lang/sk-SK.rc b/base/applications/games/winemine/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/sk-SK.rc rename to base/applications/games/winemine/lang/sk-SK.rc diff --git a/reactos/base/applications/games/winemine/lang/th-TH.rc b/base/applications/games/winemine/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/th-TH.rc rename to base/applications/games/winemine/lang/th-TH.rc diff --git a/reactos/base/applications/games/winemine/lang/uk-UA.rc b/base/applications/games/winemine/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/uk-UA.rc rename to base/applications/games/winemine/lang/uk-UA.rc diff --git a/reactos/base/applications/games/winemine/lang/zh-CN.rc b/base/applications/games/winemine/lang/zh-CN.rc similarity index 100% rename from reactos/base/applications/games/winemine/lang/zh-CN.rc rename to base/applications/games/winemine/lang/zh-CN.rc diff --git a/reactos/base/applications/games/winemine/main.c b/base/applications/games/winemine/main.c similarity index 100% rename from reactos/base/applications/games/winemine/main.c rename to base/applications/games/winemine/main.c diff --git a/reactos/base/applications/games/winemine/main.h b/base/applications/games/winemine/main.h similarity index 100% rename from reactos/base/applications/games/winemine/main.h rename to base/applications/games/winemine/main.h diff --git a/reactos/base/applications/games/winemine/rc/faces.bmp b/base/applications/games/winemine/rc/faces.bmp similarity index 100% rename from reactos/base/applications/games/winemine/rc/faces.bmp rename to base/applications/games/winemine/rc/faces.bmp diff --git a/reactos/base/applications/games/winemine/rc/leds.bmp b/base/applications/games/winemine/rc/leds.bmp similarity index 100% rename from reactos/base/applications/games/winemine/rc/leds.bmp rename to base/applications/games/winemine/rc/leds.bmp diff --git a/reactos/base/applications/games/winemine/rc/mines.bmp b/base/applications/games/winemine/rc/mines.bmp similarity index 100% rename from reactos/base/applications/games/winemine/rc/mines.bmp rename to base/applications/games/winemine/rc/mines.bmp diff --git a/reactos/base/applications/games/winemine/rc/winemine.ico b/base/applications/games/winemine/rc/winemine.ico similarity index 100% rename from reactos/base/applications/games/winemine/rc/winemine.ico rename to base/applications/games/winemine/rc/winemine.ico diff --git a/reactos/base/applications/games/winemine/resource.h b/base/applications/games/winemine/resource.h similarity index 100% rename from reactos/base/applications/games/winemine/resource.h rename to base/applications/games/winemine/resource.h diff --git a/reactos/base/applications/games/winemine/rsrc.rc b/base/applications/games/winemine/rsrc.rc similarity index 100% rename from reactos/base/applications/games/winemine/rsrc.rc rename to base/applications/games/winemine/rsrc.rc diff --git a/reactos/base/applications/games/winemine/winemine.rbuild b/base/applications/games/winemine/winemine.rbuild similarity index 100% rename from reactos/base/applications/games/winemine/winemine.rbuild rename to base/applications/games/winemine/winemine.rbuild diff --git a/reactos/base/applications/hh/hh.ico b/base/applications/hh/hh.ico similarity index 100% rename from reactos/base/applications/hh/hh.ico rename to base/applications/hh/hh.ico diff --git a/reactos/base/applications/hh/hh.rbuild b/base/applications/hh/hh.rbuild similarity index 100% rename from reactos/base/applications/hh/hh.rbuild rename to base/applications/hh/hh.rbuild diff --git a/reactos/base/applications/hh/hh.rc b/base/applications/hh/hh.rc similarity index 100% rename from reactos/base/applications/hh/hh.rc rename to base/applications/hh/hh.rc diff --git a/reactos/base/applications/hh/main.c b/base/applications/hh/main.c similarity index 100% rename from reactos/base/applications/hh/main.c rename to base/applications/hh/main.c diff --git a/reactos/base/applications/iexplore/iexplore.rbuild b/base/applications/iexplore/iexplore.rbuild similarity index 100% rename from reactos/base/applications/iexplore/iexplore.rbuild rename to base/applications/iexplore/iexplore.rbuild diff --git a/reactos/base/applications/iexplore/main.c b/base/applications/iexplore/main.c similarity index 100% rename from reactos/base/applications/iexplore/main.c rename to base/applications/iexplore/main.c diff --git a/reactos/base/applications/iexplore/version.rc b/base/applications/iexplore/version.rc similarity index 100% rename from reactos/base/applications/iexplore/version.rc rename to base/applications/iexplore/version.rc diff --git a/reactos/base/applications/kbswitch/kbsdll/kbsdll.c b/base/applications/kbswitch/kbsdll/kbsdll.c similarity index 100% rename from reactos/base/applications/kbswitch/kbsdll/kbsdll.c rename to base/applications/kbswitch/kbsdll/kbsdll.c diff --git a/reactos/base/applications/kbswitch/kbsdll/kbsdll.rbuild b/base/applications/kbswitch/kbsdll/kbsdll.rbuild similarity index 100% rename from reactos/base/applications/kbswitch/kbsdll/kbsdll.rbuild rename to base/applications/kbswitch/kbsdll/kbsdll.rbuild diff --git a/reactos/base/applications/kbswitch/kbsdll/kbsdll.rc b/base/applications/kbswitch/kbsdll/kbsdll.rc similarity index 100% rename from reactos/base/applications/kbswitch/kbsdll/kbsdll.rc rename to base/applications/kbswitch/kbsdll/kbsdll.rc diff --git a/reactos/base/applications/kbswitch/kbsdll/kbsdll.spec b/base/applications/kbswitch/kbsdll/kbsdll.spec similarity index 100% rename from reactos/base/applications/kbswitch/kbsdll/kbsdll.spec rename to base/applications/kbswitch/kbsdll/kbsdll.spec diff --git a/reactos/base/applications/kbswitch/kbswitch.c b/base/applications/kbswitch/kbswitch.c similarity index 100% rename from reactos/base/applications/kbswitch/kbswitch.c rename to base/applications/kbswitch/kbswitch.c diff --git a/reactos/base/applications/kbswitch/kbswitch.h b/base/applications/kbswitch/kbswitch.h similarity index 100% rename from reactos/base/applications/kbswitch/kbswitch.h rename to base/applications/kbswitch/kbswitch.h diff --git a/reactos/base/applications/kbswitch/kbswitch.rbuild b/base/applications/kbswitch/kbswitch.rbuild similarity index 100% rename from reactos/base/applications/kbswitch/kbswitch.rbuild rename to base/applications/kbswitch/kbswitch.rbuild diff --git a/reactos/base/applications/kbswitch/kbswitch.rc b/base/applications/kbswitch/kbswitch.rc similarity index 100% rename from reactos/base/applications/kbswitch/kbswitch.rc rename to base/applications/kbswitch/kbswitch.rc diff --git a/reactos/base/applications/kbswitch/lang/bg-BG.rc b/base/applications/kbswitch/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/bg-BG.rc rename to base/applications/kbswitch/lang/bg-BG.rc diff --git a/reactos/base/applications/kbswitch/lang/cs-CZ.rc b/base/applications/kbswitch/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/cs-CZ.rc rename to base/applications/kbswitch/lang/cs-CZ.rc diff --git a/reactos/base/applications/kbswitch/lang/de-DE.rc b/base/applications/kbswitch/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/de-DE.rc rename to base/applications/kbswitch/lang/de-DE.rc diff --git a/reactos/base/applications/kbswitch/lang/en-US.rc b/base/applications/kbswitch/lang/en-US.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/en-US.rc rename to base/applications/kbswitch/lang/en-US.rc diff --git a/reactos/base/applications/kbswitch/lang/es-ES.rc b/base/applications/kbswitch/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/es-ES.rc rename to base/applications/kbswitch/lang/es-ES.rc diff --git a/reactos/base/applications/kbswitch/lang/fr-FR.rc b/base/applications/kbswitch/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/fr-FR.rc rename to base/applications/kbswitch/lang/fr-FR.rc diff --git a/reactos/base/applications/kbswitch/lang/it-IT.rc b/base/applications/kbswitch/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/it-IT.rc rename to base/applications/kbswitch/lang/it-IT.rc diff --git a/reactos/base/applications/kbswitch/lang/lt-LT.rc b/base/applications/kbswitch/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/lt-LT.rc rename to base/applications/kbswitch/lang/lt-LT.rc diff --git a/reactos/base/applications/kbswitch/lang/no-NO.rc b/base/applications/kbswitch/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/no-NO.rc rename to base/applications/kbswitch/lang/no-NO.rc diff --git a/reactos/base/applications/kbswitch/lang/pl-PL.rc b/base/applications/kbswitch/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/pl-PL.rc rename to base/applications/kbswitch/lang/pl-PL.rc diff --git a/reactos/base/applications/kbswitch/lang/ru-RU.rc b/base/applications/kbswitch/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/ru-RU.rc rename to base/applications/kbswitch/lang/ru-RU.rc diff --git a/reactos/base/applications/kbswitch/lang/sk-SK.rc b/base/applications/kbswitch/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/sk-SK.rc rename to base/applications/kbswitch/lang/sk-SK.rc diff --git a/reactos/base/applications/kbswitch/lang/uk-UA.rc b/base/applications/kbswitch/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/uk-UA.rc rename to base/applications/kbswitch/lang/uk-UA.rc diff --git a/reactos/base/applications/kbswitch/res/kbswitch.ico b/base/applications/kbswitch/res/kbswitch.ico similarity index 100% rename from reactos/base/applications/kbswitch/res/kbswitch.ico rename to base/applications/kbswitch/res/kbswitch.ico diff --git a/reactos/base/applications/kbswitch/resource.h b/base/applications/kbswitch/resource.h similarity index 100% rename from reactos/base/applications/kbswitch/resource.h rename to base/applications/kbswitch/resource.h diff --git a/reactos/base/applications/kbswitch/rsrc.rc b/base/applications/kbswitch/rsrc.rc similarity index 100% rename from reactos/base/applications/kbswitch/rsrc.rc rename to base/applications/kbswitch/rsrc.rc diff --git a/reactos/base/applications/logoff/lang/bg-BG.rc b/base/applications/logoff/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/logoff/lang/bg-BG.rc rename to base/applications/logoff/lang/bg-BG.rc diff --git a/reactos/base/applications/logoff/lang/ca-ES.rc b/base/applications/logoff/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/logoff/lang/ca-ES.rc rename to base/applications/logoff/lang/ca-ES.rc diff --git a/reactos/base/applications/logoff/lang/cs-CZ.rc b/base/applications/logoff/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/logoff/lang/cs-CZ.rc rename to base/applications/logoff/lang/cs-CZ.rc diff --git a/reactos/base/applications/logoff/lang/de-DE.rc b/base/applications/logoff/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/logoff/lang/de-DE.rc rename to base/applications/logoff/lang/de-DE.rc diff --git a/reactos/base/applications/logoff/lang/el-GR.rc b/base/applications/logoff/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/logoff/lang/el-GR.rc rename to base/applications/logoff/lang/el-GR.rc diff --git a/reactos/base/applications/logoff/lang/en-US.rc b/base/applications/logoff/lang/en-US.rc similarity index 100% rename from reactos/base/applications/logoff/lang/en-US.rc rename to base/applications/logoff/lang/en-US.rc diff --git a/reactos/base/applications/logoff/lang/es-ES.rc b/base/applications/logoff/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/logoff/lang/es-ES.rc rename to base/applications/logoff/lang/es-ES.rc diff --git a/reactos/base/applications/logoff/lang/fr-FR.rc b/base/applications/logoff/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/logoff/lang/fr-FR.rc rename to base/applications/logoff/lang/fr-FR.rc diff --git a/reactos/base/applications/logoff/lang/it-IT.rc b/base/applications/logoff/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/logoff/lang/it-IT.rc rename to base/applications/logoff/lang/it-IT.rc diff --git a/reactos/base/applications/logoff/lang/ko-KR.rc b/base/applications/logoff/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/logoff/lang/ko-KR.rc rename to base/applications/logoff/lang/ko-KR.rc diff --git a/reactos/base/applications/logoff/lang/lt-LT.rc b/base/applications/logoff/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/logoff/lang/lt-LT.rc rename to base/applications/logoff/lang/lt-LT.rc diff --git a/reactos/base/applications/logoff/lang/no-NO.rc b/base/applications/logoff/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/logoff/lang/no-NO.rc rename to base/applications/logoff/lang/no-NO.rc diff --git a/reactos/base/applications/logoff/lang/pl-PL.rc b/base/applications/logoff/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/logoff/lang/pl-PL.rc rename to base/applications/logoff/lang/pl-PL.rc diff --git a/reactos/base/applications/logoff/lang/ru-RU.rc b/base/applications/logoff/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/logoff/lang/ru-RU.rc rename to base/applications/logoff/lang/ru-RU.rc diff --git a/reactos/base/applications/logoff/lang/sk-SK.rc b/base/applications/logoff/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/logoff/lang/sk-SK.rc rename to base/applications/logoff/lang/sk-SK.rc diff --git a/reactos/base/applications/logoff/lang/uk-UA.rc b/base/applications/logoff/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/logoff/lang/uk-UA.rc rename to base/applications/logoff/lang/uk-UA.rc diff --git a/reactos/base/applications/logoff/logoff.c b/base/applications/logoff/logoff.c similarity index 100% rename from reactos/base/applications/logoff/logoff.c rename to base/applications/logoff/logoff.c diff --git a/reactos/base/applications/logoff/logoff.rbuild b/base/applications/logoff/logoff.rbuild similarity index 100% rename from reactos/base/applications/logoff/logoff.rbuild rename to base/applications/logoff/logoff.rbuild diff --git a/reactos/base/applications/logoff/logoff.rc b/base/applications/logoff/logoff.rc similarity index 100% rename from reactos/base/applications/logoff/logoff.rc rename to base/applications/logoff/logoff.rc diff --git a/reactos/base/applications/logoff/misc.c b/base/applications/logoff/misc.c similarity index 100% rename from reactos/base/applications/logoff/misc.c rename to base/applications/logoff/misc.c diff --git a/reactos/base/applications/logoff/precomp.h b/base/applications/logoff/precomp.h similarity index 100% rename from reactos/base/applications/logoff/precomp.h rename to base/applications/logoff/precomp.h diff --git a/reactos/base/applications/logoff/resource.h b/base/applications/logoff/resource.h similarity index 100% rename from reactos/base/applications/logoff/resource.h rename to base/applications/logoff/resource.h diff --git a/reactos/base/applications/logoff/rsrc.rc b/base/applications/logoff/rsrc.rc similarity index 100% rename from reactos/base/applications/logoff/rsrc.rc rename to base/applications/logoff/rsrc.rc diff --git a/reactos/base/applications/mmc/console.c b/base/applications/mmc/console.c similarity index 100% rename from reactos/base/applications/mmc/console.c rename to base/applications/mmc/console.c diff --git a/reactos/base/applications/mmc/lang/bg-BG.rc b/base/applications/mmc/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/mmc/lang/bg-BG.rc rename to base/applications/mmc/lang/bg-BG.rc diff --git a/reactos/base/applications/mmc/lang/ca-ES.rc b/base/applications/mmc/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/mmc/lang/ca-ES.rc rename to base/applications/mmc/lang/ca-ES.rc diff --git a/reactos/base/applications/mmc/lang/cs-CZ.rc b/base/applications/mmc/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/mmc/lang/cs-CZ.rc rename to base/applications/mmc/lang/cs-CZ.rc diff --git a/reactos/base/applications/mmc/lang/de-DE.rc b/base/applications/mmc/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/mmc/lang/de-DE.rc rename to base/applications/mmc/lang/de-DE.rc diff --git a/reactos/base/applications/mmc/lang/el-GR.rc b/base/applications/mmc/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/mmc/lang/el-GR.rc rename to base/applications/mmc/lang/el-GR.rc diff --git a/reactos/base/applications/mmc/lang/en-US.rc b/base/applications/mmc/lang/en-US.rc similarity index 100% rename from reactos/base/applications/mmc/lang/en-US.rc rename to base/applications/mmc/lang/en-US.rc diff --git a/reactos/base/applications/mmc/lang/es-ES.rc b/base/applications/mmc/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/mmc/lang/es-ES.rc rename to base/applications/mmc/lang/es-ES.rc diff --git a/reactos/base/applications/mmc/lang/fr-FR.rc b/base/applications/mmc/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/mmc/lang/fr-FR.rc rename to base/applications/mmc/lang/fr-FR.rc diff --git a/reactos/base/applications/mmc/lang/it-IT.rc b/base/applications/mmc/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/mmc/lang/it-IT.rc rename to base/applications/mmc/lang/it-IT.rc diff --git a/reactos/base/applications/mmc/lang/ko-KR.rc b/base/applications/mmc/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/mmc/lang/ko-KR.rc rename to base/applications/mmc/lang/ko-KR.rc diff --git a/reactos/base/applications/mmc/lang/lt-LT.rc b/base/applications/mmc/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/mmc/lang/lt-LT.rc rename to base/applications/mmc/lang/lt-LT.rc diff --git a/reactos/base/applications/mmc/lang/no-NO.rc b/base/applications/mmc/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mmc/lang/no-NO.rc rename to base/applications/mmc/lang/no-NO.rc diff --git a/reactos/base/applications/mmc/lang/pl-PL.rc b/base/applications/mmc/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/mmc/lang/pl-PL.rc rename to base/applications/mmc/lang/pl-PL.rc diff --git a/reactos/base/applications/mmc/lang/pt-BR.rc b/base/applications/mmc/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/mmc/lang/pt-BR.rc rename to base/applications/mmc/lang/pt-BR.rc diff --git a/reactos/base/applications/mmc/lang/ru-RU.rc b/base/applications/mmc/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/mmc/lang/ru-RU.rc rename to base/applications/mmc/lang/ru-RU.rc diff --git a/reactos/base/applications/mmc/lang/sk-SK.rc b/base/applications/mmc/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/mmc/lang/sk-SK.rc rename to base/applications/mmc/lang/sk-SK.rc diff --git a/reactos/base/applications/mmc/lang/uk-UA.rc b/base/applications/mmc/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/mmc/lang/uk-UA.rc rename to base/applications/mmc/lang/uk-UA.rc diff --git a/reactos/base/applications/mmc/misc.c b/base/applications/mmc/misc.c similarity index 100% rename from reactos/base/applications/mmc/misc.c rename to base/applications/mmc/misc.c diff --git a/reactos/base/applications/mmc/mmc.c b/base/applications/mmc/mmc.c similarity index 100% rename from reactos/base/applications/mmc/mmc.c rename to base/applications/mmc/mmc.c diff --git a/reactos/base/applications/mmc/mmc.rbuild b/base/applications/mmc/mmc.rbuild similarity index 100% rename from reactos/base/applications/mmc/mmc.rbuild rename to base/applications/mmc/mmc.rbuild diff --git a/reactos/base/applications/mmc/mmc.rc b/base/applications/mmc/mmc.rc similarity index 100% rename from reactos/base/applications/mmc/mmc.rc rename to base/applications/mmc/mmc.rc diff --git a/reactos/base/applications/mmc/precomp.h b/base/applications/mmc/precomp.h similarity index 100% rename from reactos/base/applications/mmc/precomp.h rename to base/applications/mmc/precomp.h diff --git a/reactos/base/applications/mmc/resource.h b/base/applications/mmc/resource.h similarity index 100% rename from reactos/base/applications/mmc/resource.h rename to base/applications/mmc/resource.h diff --git a/reactos/base/applications/mmc/resources/mmc.ico b/base/applications/mmc/resources/mmc.ico similarity index 100% rename from reactos/base/applications/mmc/resources/mmc.ico rename to base/applications/mmc/resources/mmc.ico diff --git a/reactos/base/applications/mmc/rsrc.rc b/base/applications/mmc/rsrc.rc similarity index 100% rename from reactos/base/applications/mmc/rsrc.rc rename to base/applications/mmc/rsrc.rc diff --git a/reactos/base/applications/msconfig/freeldrpage.c b/base/applications/msconfig/freeldrpage.c similarity index 100% rename from reactos/base/applications/msconfig/freeldrpage.c rename to base/applications/msconfig/freeldrpage.c diff --git a/reactos/base/applications/msconfig/freeldrpage.h b/base/applications/msconfig/freeldrpage.h similarity index 100% rename from reactos/base/applications/msconfig/freeldrpage.h rename to base/applications/msconfig/freeldrpage.h diff --git a/reactos/base/applications/msconfig/generalpage.c b/base/applications/msconfig/generalpage.c similarity index 100% rename from reactos/base/applications/msconfig/generalpage.c rename to base/applications/msconfig/generalpage.c diff --git a/reactos/base/applications/msconfig/generalpage.h b/base/applications/msconfig/generalpage.h similarity index 100% rename from reactos/base/applications/msconfig/generalpage.h rename to base/applications/msconfig/generalpage.h diff --git a/reactos/base/applications/msconfig/lang/bg-BG.rc b/base/applications/msconfig/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/bg-BG.rc rename to base/applications/msconfig/lang/bg-BG.rc diff --git a/reactos/base/applications/msconfig/lang/ca-ES.rc b/base/applications/msconfig/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/ca-ES.rc rename to base/applications/msconfig/lang/ca-ES.rc diff --git a/reactos/base/applications/msconfig/lang/cs-CZ.rc b/base/applications/msconfig/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/cs-CZ.rc rename to base/applications/msconfig/lang/cs-CZ.rc diff --git a/reactos/base/applications/msconfig/lang/de-DE.rc b/base/applications/msconfig/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/de-DE.rc rename to base/applications/msconfig/lang/de-DE.rc diff --git a/reactos/base/applications/msconfig/lang/el-GR.rc b/base/applications/msconfig/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/el-GR.rc rename to base/applications/msconfig/lang/el-GR.rc diff --git a/reactos/base/applications/msconfig/lang/en-US.rc b/base/applications/msconfig/lang/en-US.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/en-US.rc rename to base/applications/msconfig/lang/en-US.rc diff --git a/reactos/base/applications/msconfig/lang/es-ES.rc b/base/applications/msconfig/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/es-ES.rc rename to base/applications/msconfig/lang/es-ES.rc diff --git a/reactos/base/applications/msconfig/lang/fr-FR.rc b/base/applications/msconfig/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/fr-FR.rc rename to base/applications/msconfig/lang/fr-FR.rc diff --git a/reactos/base/applications/msconfig/lang/hu-HU.rc b/base/applications/msconfig/lang/hu-HU.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/hu-HU.rc rename to base/applications/msconfig/lang/hu-HU.rc diff --git a/reactos/base/applications/msconfig/lang/id-ID.rc b/base/applications/msconfig/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/id-ID.rc rename to base/applications/msconfig/lang/id-ID.rc diff --git a/reactos/base/applications/msconfig/lang/it-IT.rc b/base/applications/msconfig/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/it-IT.rc rename to base/applications/msconfig/lang/it-IT.rc diff --git a/reactos/base/applications/msconfig/lang/ko-KR.rc b/base/applications/msconfig/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/ko-KR.rc rename to base/applications/msconfig/lang/ko-KR.rc diff --git a/reactos/base/applications/msconfig/lang/nl-NL.rc b/base/applications/msconfig/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/nl-NL.rc rename to base/applications/msconfig/lang/nl-NL.rc diff --git a/reactos/base/applications/msconfig/lang/no-NO.rc b/base/applications/msconfig/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/no-NO.rc rename to base/applications/msconfig/lang/no-NO.rc diff --git a/reactos/base/applications/msconfig/lang/pl-PL.rc b/base/applications/msconfig/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/pl-PL.rc rename to base/applications/msconfig/lang/pl-PL.rc diff --git a/reactos/base/applications/msconfig/lang/pt-BR.rc b/base/applications/msconfig/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/pt-BR.rc rename to base/applications/msconfig/lang/pt-BR.rc diff --git a/reactos/base/applications/msconfig/lang/ru-RU.rc b/base/applications/msconfig/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/ru-RU.rc rename to base/applications/msconfig/lang/ru-RU.rc diff --git a/reactos/base/applications/msconfig/lang/sk-SK.rc b/base/applications/msconfig/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/sk-SK.rc rename to base/applications/msconfig/lang/sk-SK.rc diff --git a/reactos/base/applications/msconfig/lang/th-TH.rc b/base/applications/msconfig/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/th-TH.rc rename to base/applications/msconfig/lang/th-TH.rc diff --git a/reactos/base/applications/msconfig/lang/uk-UA.rc b/base/applications/msconfig/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/uk-UA.rc rename to base/applications/msconfig/lang/uk-UA.rc diff --git a/reactos/base/applications/msconfig/lang/zh-CN.rc b/base/applications/msconfig/lang/zh-CN.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/zh-CN.rc rename to base/applications/msconfig/lang/zh-CN.rc diff --git a/reactos/base/applications/msconfig/msconfig.c b/base/applications/msconfig/msconfig.c similarity index 100% rename from reactos/base/applications/msconfig/msconfig.c rename to base/applications/msconfig/msconfig.c diff --git a/reactos/base/applications/msconfig/msconfig.h b/base/applications/msconfig/msconfig.h similarity index 100% rename from reactos/base/applications/msconfig/msconfig.h rename to base/applications/msconfig/msconfig.h diff --git a/reactos/base/applications/msconfig/msconfig.rbuild b/base/applications/msconfig/msconfig.rbuild similarity index 100% rename from reactos/base/applications/msconfig/msconfig.rbuild rename to base/applications/msconfig/msconfig.rbuild diff --git a/reactos/base/applications/msconfig/msconfig.rc b/base/applications/msconfig/msconfig.rc similarity index 100% rename from reactos/base/applications/msconfig/msconfig.rc rename to base/applications/msconfig/msconfig.rc diff --git a/reactos/base/applications/msconfig/precomp.h b/base/applications/msconfig/precomp.h similarity index 100% rename from reactos/base/applications/msconfig/precomp.h rename to base/applications/msconfig/precomp.h diff --git a/reactos/base/applications/msconfig/res/msconfig.ico b/base/applications/msconfig/res/msconfig.ico similarity index 100% rename from reactos/base/applications/msconfig/res/msconfig.ico rename to base/applications/msconfig/res/msconfig.ico diff --git a/reactos/base/applications/msconfig/resource.h b/base/applications/msconfig/resource.h similarity index 100% rename from reactos/base/applications/msconfig/resource.h rename to base/applications/msconfig/resource.h diff --git a/reactos/base/applications/msconfig/rsrc.rc b/base/applications/msconfig/rsrc.rc similarity index 100% rename from reactos/base/applications/msconfig/rsrc.rc rename to base/applications/msconfig/rsrc.rc diff --git a/reactos/base/applications/msconfig/srvpage.c b/base/applications/msconfig/srvpage.c similarity index 100% rename from reactos/base/applications/msconfig/srvpage.c rename to base/applications/msconfig/srvpage.c diff --git a/reactos/base/applications/msconfig/srvpage.h b/base/applications/msconfig/srvpage.h similarity index 100% rename from reactos/base/applications/msconfig/srvpage.h rename to base/applications/msconfig/srvpage.h diff --git a/reactos/base/applications/msconfig/startuppage.c b/base/applications/msconfig/startuppage.c similarity index 100% rename from reactos/base/applications/msconfig/startuppage.c rename to base/applications/msconfig/startuppage.c diff --git a/reactos/base/applications/msconfig/startuppage.h b/base/applications/msconfig/startuppage.h similarity index 100% rename from reactos/base/applications/msconfig/startuppage.h rename to base/applications/msconfig/startuppage.h diff --git a/reactos/base/applications/msconfig/systempage.c b/base/applications/msconfig/systempage.c similarity index 100% rename from reactos/base/applications/msconfig/systempage.c rename to base/applications/msconfig/systempage.c diff --git a/reactos/base/applications/msconfig/systempage.h b/base/applications/msconfig/systempage.h similarity index 100% rename from reactos/base/applications/msconfig/systempage.h rename to base/applications/msconfig/systempage.h diff --git a/reactos/base/applications/msconfig/toolspage.c b/base/applications/msconfig/toolspage.c similarity index 100% rename from reactos/base/applications/msconfig/toolspage.c rename to base/applications/msconfig/toolspage.c diff --git a/reactos/base/applications/msconfig/toolspage.h b/base/applications/msconfig/toolspage.h similarity index 100% rename from reactos/base/applications/msconfig/toolspage.h rename to base/applications/msconfig/toolspage.h diff --git a/reactos/base/applications/mscutils/devmgmt/about.c b/base/applications/mscutils/devmgmt/about.c similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/about.c rename to base/applications/mscutils/devmgmt/about.c diff --git a/reactos/base/applications/mscutils/devmgmt/devmgmt.c b/base/applications/mscutils/devmgmt/devmgmt.c similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/devmgmt.c rename to base/applications/mscutils/devmgmt/devmgmt.c diff --git a/reactos/base/applications/mscutils/devmgmt/devmgmt.rbuild b/base/applications/mscutils/devmgmt/devmgmt.rbuild similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/devmgmt.rbuild rename to base/applications/mscutils/devmgmt/devmgmt.rbuild diff --git a/reactos/base/applications/mscutils/devmgmt/devmgmt.rc b/base/applications/mscutils/devmgmt/devmgmt.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/devmgmt.rc rename to base/applications/mscutils/devmgmt/devmgmt.rc diff --git a/reactos/base/applications/mscutils/devmgmt/enumdevices.c b/base/applications/mscutils/devmgmt/enumdevices.c similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/enumdevices.c rename to base/applications/mscutils/devmgmt/enumdevices.c diff --git a/reactos/base/applications/mscutils/devmgmt/lang/bg-BG.rc b/base/applications/mscutils/devmgmt/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/bg-BG.rc rename to base/applications/mscutils/devmgmt/lang/bg-BG.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/de-DE.rc b/base/applications/mscutils/devmgmt/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/de-DE.rc rename to base/applications/mscutils/devmgmt/lang/de-DE.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/el-GR.rc b/base/applications/mscutils/devmgmt/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/el-GR.rc rename to base/applications/mscutils/devmgmt/lang/el-GR.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/en-US.rc b/base/applications/mscutils/devmgmt/lang/en-US.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/en-US.rc rename to base/applications/mscutils/devmgmt/lang/en-US.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/es-ES.rc b/base/applications/mscutils/devmgmt/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/es-ES.rc rename to base/applications/mscutils/devmgmt/lang/es-ES.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/fr-FR.rc b/base/applications/mscutils/devmgmt/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/fr-FR.rc rename to base/applications/mscutils/devmgmt/lang/fr-FR.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/id-ID.rc b/base/applications/mscutils/devmgmt/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/id-ID.rc rename to base/applications/mscutils/devmgmt/lang/id-ID.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/it-IT.rc b/base/applications/mscutils/devmgmt/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/it-IT.rc rename to base/applications/mscutils/devmgmt/lang/it-IT.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/ko-KR.rc b/base/applications/mscutils/devmgmt/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/ko-KR.rc rename to base/applications/mscutils/devmgmt/lang/ko-KR.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/no-NO.rc b/base/applications/mscutils/devmgmt/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/no-NO.rc rename to base/applications/mscutils/devmgmt/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/pl-PL.rc b/base/applications/mscutils/devmgmt/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/pl-PL.rc rename to base/applications/mscutils/devmgmt/lang/pl-PL.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/ru-RU.rc b/base/applications/mscutils/devmgmt/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/ru-RU.rc rename to base/applications/mscutils/devmgmt/lang/ru-RU.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/sk-SK.rc b/base/applications/mscutils/devmgmt/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/sk-SK.rc rename to base/applications/mscutils/devmgmt/lang/sk-SK.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/th-TH.rc b/base/applications/mscutils/devmgmt/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/th-TH.rc rename to base/applications/mscutils/devmgmt/lang/th-TH.rc diff --git a/reactos/base/applications/mscutils/devmgmt/lang/uk-UA.rc b/base/applications/mscutils/devmgmt/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/uk-UA.rc rename to base/applications/mscutils/devmgmt/lang/uk-UA.rc diff --git a/reactos/base/applications/mscutils/devmgmt/mainwnd.c b/base/applications/mscutils/devmgmt/mainwnd.c similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/mainwnd.c rename to base/applications/mscutils/devmgmt/mainwnd.c diff --git a/reactos/base/applications/mscutils/devmgmt/misc.c b/base/applications/mscutils/devmgmt/misc.c similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/misc.c rename to base/applications/mscutils/devmgmt/misc.c diff --git a/reactos/base/applications/mscutils/devmgmt/precomp.h b/base/applications/mscutils/devmgmt/precomp.h similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/precomp.h rename to base/applications/mscutils/devmgmt/precomp.h diff --git a/reactos/base/applications/mscutils/devmgmt/res/computer.ico b/base/applications/mscutils/devmgmt/res/computer.ico similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/res/computer.ico rename to base/applications/mscutils/devmgmt/res/computer.ico diff --git a/reactos/base/applications/mscutils/devmgmt/res/exit.bmp b/base/applications/mscutils/devmgmt/res/exit.bmp similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/res/exit.bmp rename to base/applications/mscutils/devmgmt/res/exit.bmp diff --git a/reactos/base/applications/mscutils/devmgmt/res/help.bmp b/base/applications/mscutils/devmgmt/res/help.bmp similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/res/help.bmp rename to base/applications/mscutils/devmgmt/res/help.bmp diff --git a/reactos/base/applications/mscutils/devmgmt/res/properties.bmp b/base/applications/mscutils/devmgmt/res/properties.bmp similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/res/properties.bmp rename to base/applications/mscutils/devmgmt/res/properties.bmp diff --git a/reactos/base/applications/mscutils/devmgmt/res/refresh.bmp b/base/applications/mscutils/devmgmt/res/refresh.bmp similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/res/refresh.bmp rename to base/applications/mscutils/devmgmt/res/refresh.bmp diff --git a/reactos/base/applications/mscutils/devmgmt/res/root.bmp b/base/applications/mscutils/devmgmt/res/root.bmp similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/res/root.bmp rename to base/applications/mscutils/devmgmt/res/root.bmp diff --git a/reactos/base/applications/mscutils/devmgmt/resource.h b/base/applications/mscutils/devmgmt/resource.h similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/resource.h rename to base/applications/mscutils/devmgmt/resource.h diff --git a/reactos/base/applications/mscutils/devmgmt/rsrc.rc b/base/applications/mscutils/devmgmt/rsrc.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/rsrc.rc rename to base/applications/mscutils/devmgmt/rsrc.rc diff --git a/reactos/base/applications/mscutils/directory.rbuild b/base/applications/mscutils/directory.rbuild similarity index 100% rename from reactos/base/applications/mscutils/directory.rbuild rename to base/applications/mscutils/directory.rbuild diff --git a/reactos/base/applications/mscutils/eventvwr/eventvwr.c b/base/applications/mscutils/eventvwr/eventvwr.c similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/eventvwr.c rename to base/applications/mscutils/eventvwr/eventvwr.c diff --git a/reactos/base/applications/mscutils/eventvwr/eventvwr.h b/base/applications/mscutils/eventvwr/eventvwr.h similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/eventvwr.h rename to base/applications/mscutils/eventvwr/eventvwr.h diff --git a/reactos/base/applications/mscutils/eventvwr/eventvwr.rbuild b/base/applications/mscutils/eventvwr/eventvwr.rbuild similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/eventvwr.rbuild rename to base/applications/mscutils/eventvwr/eventvwr.rbuild diff --git a/reactos/base/applications/mscutils/eventvwr/eventvwr.rc b/base/applications/mscutils/eventvwr/eventvwr.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/eventvwr.rc rename to base/applications/mscutils/eventvwr/eventvwr.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/bg-BG.rc b/base/applications/mscutils/eventvwr/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/bg-BG.rc rename to base/applications/mscutils/eventvwr/lang/bg-BG.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/de-DE.rc b/base/applications/mscutils/eventvwr/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/de-DE.rc rename to base/applications/mscutils/eventvwr/lang/de-DE.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/el-GR.rc b/base/applications/mscutils/eventvwr/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/el-GR.rc rename to base/applications/mscutils/eventvwr/lang/el-GR.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc b/base/applications/mscutils/eventvwr/lang/en-US.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/en-US.rc rename to base/applications/mscutils/eventvwr/lang/en-US.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/es-ES.rc b/base/applications/mscutils/eventvwr/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/es-ES.rc rename to base/applications/mscutils/eventvwr/lang/es-ES.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/fr-FR.rc b/base/applications/mscutils/eventvwr/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/fr-FR.rc rename to base/applications/mscutils/eventvwr/lang/fr-FR.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/it-IT.rc b/base/applications/mscutils/eventvwr/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/it-IT.rc rename to base/applications/mscutils/eventvwr/lang/it-IT.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/ko-KR.rc b/base/applications/mscutils/eventvwr/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/ko-KR.rc rename to base/applications/mscutils/eventvwr/lang/ko-KR.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc b/base/applications/mscutils/eventvwr/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc rename to base/applications/mscutils/eventvwr/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/pl-PL.rc b/base/applications/mscutils/eventvwr/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/pl-PL.rc rename to base/applications/mscutils/eventvwr/lang/pl-PL.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc b/base/applications/mscutils/eventvwr/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc rename to base/applications/mscutils/eventvwr/lang/ru-RU.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc b/base/applications/mscutils/eventvwr/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc rename to base/applications/mscutils/eventvwr/lang/sk-SK.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc b/base/applications/mscutils/eventvwr/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc rename to base/applications/mscutils/eventvwr/lang/uk-UA.rc diff --git a/reactos/base/applications/mscutils/eventvwr/res/error.ico b/base/applications/mscutils/eventvwr/res/error.ico similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/res/error.ico rename to base/applications/mscutils/eventvwr/res/error.ico diff --git a/reactos/base/applications/mscutils/eventvwr/res/eventvwr.ico b/base/applications/mscutils/eventvwr/res/eventvwr.ico similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/res/eventvwr.ico rename to base/applications/mscutils/eventvwr/res/eventvwr.ico diff --git a/reactos/base/applications/mscutils/eventvwr/res/info.ico b/base/applications/mscutils/eventvwr/res/info.ico similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/res/info.ico rename to base/applications/mscutils/eventvwr/res/info.ico diff --git a/reactos/base/applications/mscutils/eventvwr/res/warning.ico b/base/applications/mscutils/eventvwr/res/warning.ico similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/res/warning.ico rename to base/applications/mscutils/eventvwr/res/warning.ico diff --git a/reactos/base/applications/mscutils/eventvwr/resource.h b/base/applications/mscutils/eventvwr/resource.h similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/resource.h rename to base/applications/mscutils/eventvwr/resource.h diff --git a/reactos/base/applications/mscutils/eventvwr/rsrc.rc b/base/applications/mscutils/eventvwr/rsrc.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/rsrc.rc rename to base/applications/mscutils/eventvwr/rsrc.rc diff --git a/reactos/base/applications/mscutils/servman/about.c b/base/applications/mscutils/servman/about.c similarity index 100% rename from reactos/base/applications/mscutils/servman/about.c rename to base/applications/mscutils/servman/about.c diff --git a/reactos/base/applications/mscutils/servman/control.c b/base/applications/mscutils/servman/control.c similarity index 100% rename from reactos/base/applications/mscutils/servman/control.c rename to base/applications/mscutils/servman/control.c diff --git a/reactos/base/applications/mscutils/servman/create.c b/base/applications/mscutils/servman/create.c similarity index 100% rename from reactos/base/applications/mscutils/servman/create.c rename to base/applications/mscutils/servman/create.c diff --git a/reactos/base/applications/mscutils/servman/delete.c b/base/applications/mscutils/servman/delete.c similarity index 100% rename from reactos/base/applications/mscutils/servman/delete.c rename to base/applications/mscutils/servman/delete.c diff --git a/reactos/base/applications/mscutils/servman/export.c b/base/applications/mscutils/servman/export.c similarity index 100% rename from reactos/base/applications/mscutils/servman/export.c rename to base/applications/mscutils/servman/export.c diff --git a/reactos/base/applications/mscutils/servman/lang/bg-BG.rc b/base/applications/mscutils/servman/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/bg-BG.rc rename to base/applications/mscutils/servman/lang/bg-BG.rc diff --git a/reactos/base/applications/mscutils/servman/lang/de-DE.rc b/base/applications/mscutils/servman/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/de-DE.rc rename to base/applications/mscutils/servman/lang/de-DE.rc diff --git a/reactos/base/applications/mscutils/servman/lang/el-GR.rc b/base/applications/mscutils/servman/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/el-GR.rc rename to base/applications/mscutils/servman/lang/el-GR.rc diff --git a/reactos/base/applications/mscutils/servman/lang/en-US.rc b/base/applications/mscutils/servman/lang/en-US.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/en-US.rc rename to base/applications/mscutils/servman/lang/en-US.rc diff --git a/reactos/base/applications/mscutils/servman/lang/es-ES.rc b/base/applications/mscutils/servman/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/es-ES.rc rename to base/applications/mscutils/servman/lang/es-ES.rc diff --git a/reactos/base/applications/mscutils/servman/lang/fr-FR.rc b/base/applications/mscutils/servman/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/fr-FR.rc rename to base/applications/mscutils/servman/lang/fr-FR.rc diff --git a/reactos/base/applications/mscutils/servman/lang/id-ID.rc b/base/applications/mscutils/servman/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/id-ID.rc rename to base/applications/mscutils/servman/lang/id-ID.rc diff --git a/reactos/base/applications/mscutils/servman/lang/it-IT.rc b/base/applications/mscutils/servman/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/it-IT.rc rename to base/applications/mscutils/servman/lang/it-IT.rc diff --git a/reactos/base/applications/mscutils/servman/lang/ko-KR.rc b/base/applications/mscutils/servman/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/ko-KR.rc rename to base/applications/mscutils/servman/lang/ko-KR.rc diff --git a/reactos/base/applications/mscutils/servman/lang/no-NO.rc b/base/applications/mscutils/servman/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/no-NO.rc rename to base/applications/mscutils/servman/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/servman/lang/pl-PL.rc b/base/applications/mscutils/servman/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/pl-PL.rc rename to base/applications/mscutils/servman/lang/pl-PL.rc diff --git a/reactos/base/applications/mscutils/servman/lang/ru-RU.rc b/base/applications/mscutils/servman/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/ru-RU.rc rename to base/applications/mscutils/servman/lang/ru-RU.rc diff --git a/reactos/base/applications/mscutils/servman/lang/sk-SK.rc b/base/applications/mscutils/servman/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/sk-SK.rc rename to base/applications/mscutils/servman/lang/sk-SK.rc diff --git a/reactos/base/applications/mscutils/servman/lang/th-TH.rc b/base/applications/mscutils/servman/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/th-TH.rc rename to base/applications/mscutils/servman/lang/th-TH.rc diff --git a/reactos/base/applications/mscutils/servman/lang/uk-UA.rc b/base/applications/mscutils/servman/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/uk-UA.rc rename to base/applications/mscutils/servman/lang/uk-UA.rc diff --git a/reactos/base/applications/mscutils/servman/listview.c b/base/applications/mscutils/servman/listview.c similarity index 100% rename from reactos/base/applications/mscutils/servman/listview.c rename to base/applications/mscutils/servman/listview.c diff --git a/reactos/base/applications/mscutils/servman/mainwnd.c b/base/applications/mscutils/servman/mainwnd.c similarity index 100% rename from reactos/base/applications/mscutils/servman/mainwnd.c rename to base/applications/mscutils/servman/mainwnd.c diff --git a/reactos/base/applications/mscutils/servman/misc.c b/base/applications/mscutils/servman/misc.c similarity index 100% rename from reactos/base/applications/mscutils/servman/misc.c rename to base/applications/mscutils/servman/misc.c diff --git a/reactos/base/applications/mscutils/servman/precomp.h b/base/applications/mscutils/servman/precomp.h similarity index 100% rename from reactos/base/applications/mscutils/servman/precomp.h rename to base/applications/mscutils/servman/precomp.h diff --git a/reactos/base/applications/mscutils/servman/progress.c b/base/applications/mscutils/servman/progress.c similarity index 100% rename from reactos/base/applications/mscutils/servman/progress.c rename to base/applications/mscutils/servman/progress.c diff --git a/reactos/base/applications/mscutils/servman/propsheet.c b/base/applications/mscutils/servman/propsheet.c similarity index 100% rename from reactos/base/applications/mscutils/servman/propsheet.c rename to base/applications/mscutils/servman/propsheet.c diff --git a/reactos/base/applications/mscutils/servman/query.c b/base/applications/mscutils/servman/query.c similarity index 100% rename from reactos/base/applications/mscutils/servman/query.c rename to base/applications/mscutils/servman/query.c diff --git a/reactos/base/applications/mscutils/servman/res/create.bmp b/base/applications/mscutils/servman/res/create.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/create.bmp rename to base/applications/mscutils/servman/res/create.bmp diff --git a/reactos/base/applications/mscutils/servman/res/delete.bmp b/base/applications/mscutils/servman/res/delete.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/delete.bmp rename to base/applications/mscutils/servman/res/delete.bmp diff --git a/reactos/base/applications/mscutils/servman/res/export.bmp b/base/applications/mscutils/servman/res/export.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/export.bmp rename to base/applications/mscutils/servman/res/export.bmp diff --git a/reactos/base/applications/mscutils/servman/res/pause.bmp b/base/applications/mscutils/servman/res/pause.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/pause.bmp rename to base/applications/mscutils/servman/res/pause.bmp diff --git a/reactos/base/applications/mscutils/servman/res/properties.bmp b/base/applications/mscutils/servman/res/properties.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/properties.bmp rename to base/applications/mscutils/servman/res/properties.bmp diff --git a/reactos/base/applications/mscutils/servman/res/refresh.bmp b/base/applications/mscutils/servman/res/refresh.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/refresh.bmp rename to base/applications/mscutils/servman/res/refresh.bmp diff --git a/reactos/base/applications/mscutils/servman/res/restart.bmp b/base/applications/mscutils/servman/res/restart.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/restart.bmp rename to base/applications/mscutils/servman/res/restart.bmp diff --git a/reactos/base/applications/mscutils/servman/res/start.bmp b/base/applications/mscutils/servman/res/start.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/start.bmp rename to base/applications/mscutils/servman/res/start.bmp diff --git a/reactos/base/applications/mscutils/servman/res/stop.bmp b/base/applications/mscutils/servman/res/stop.bmp similarity index 100% rename from reactos/base/applications/mscutils/servman/res/stop.bmp rename to base/applications/mscutils/servman/res/stop.bmp diff --git a/reactos/base/applications/mscutils/servman/res/system.ico b/base/applications/mscutils/servman/res/system.ico similarity index 100% rename from reactos/base/applications/mscutils/servman/res/system.ico rename to base/applications/mscutils/servman/res/system.ico diff --git a/reactos/base/applications/mscutils/servman/resource.h b/base/applications/mscutils/servman/resource.h similarity index 100% rename from reactos/base/applications/mscutils/servman/resource.h rename to base/applications/mscutils/servman/resource.h diff --git a/reactos/base/applications/mscutils/servman/rsrc.rc b/base/applications/mscutils/servman/rsrc.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/rsrc.rc rename to base/applications/mscutils/servman/rsrc.rc diff --git a/reactos/base/applications/mscutils/servman/servman.c b/base/applications/mscutils/servman/servman.c similarity index 100% rename from reactos/base/applications/mscutils/servman/servman.c rename to base/applications/mscutils/servman/servman.c diff --git a/reactos/base/applications/mscutils/servman/servman.rbuild b/base/applications/mscutils/servman/servman.rbuild similarity index 100% rename from reactos/base/applications/mscutils/servman/servman.rbuild rename to base/applications/mscutils/servman/servman.rbuild diff --git a/reactos/base/applications/mscutils/servman/servman.rc b/base/applications/mscutils/servman/servman.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/servman.rc rename to base/applications/mscutils/servman/servman.rc diff --git a/reactos/base/applications/mscutils/servman/start.c b/base/applications/mscutils/servman/start.c similarity index 100% rename from reactos/base/applications/mscutils/servman/start.c rename to base/applications/mscutils/servman/start.c diff --git a/reactos/base/applications/mscutils/servman/stop.c b/base/applications/mscutils/servman/stop.c similarity index 100% rename from reactos/base/applications/mscutils/servman/stop.c rename to base/applications/mscutils/servman/stop.c diff --git a/reactos/base/applications/mstsc/bitmap.c b/base/applications/mstsc/bitmap.c similarity index 100% rename from reactos/base/applications/mstsc/bitmap.c rename to base/applications/mstsc/bitmap.c diff --git a/reactos/base/applications/mstsc/bsops.c b/base/applications/mstsc/bsops.c similarity index 100% rename from reactos/base/applications/mstsc/bsops.c rename to base/applications/mstsc/bsops.c diff --git a/reactos/base/applications/mstsc/bsops.h b/base/applications/mstsc/bsops.h similarity index 100% rename from reactos/base/applications/mstsc/bsops.h rename to base/applications/mstsc/bsops.h diff --git a/reactos/base/applications/mstsc/cache.c b/base/applications/mstsc/cache.c similarity index 100% rename from reactos/base/applications/mstsc/cache.c rename to base/applications/mstsc/cache.c diff --git a/reactos/base/applications/mstsc/channels.c b/base/applications/mstsc/channels.c similarity index 100% rename from reactos/base/applications/mstsc/channels.c rename to base/applications/mstsc/channels.c diff --git a/reactos/base/applications/mstsc/connectdialog.c b/base/applications/mstsc/connectdialog.c similarity index 100% rename from reactos/base/applications/mstsc/connectdialog.c rename to base/applications/mstsc/connectdialog.c diff --git a/reactos/base/applications/mstsc/constants.h b/base/applications/mstsc/constants.h similarity index 100% rename from reactos/base/applications/mstsc/constants.h rename to base/applications/mstsc/constants.h diff --git a/reactos/base/applications/mstsc/iso.c b/base/applications/mstsc/iso.c similarity index 100% rename from reactos/base/applications/mstsc/iso.c rename to base/applications/mstsc/iso.c diff --git a/reactos/base/applications/mstsc/lang/bg-BG.rc b/base/applications/mstsc/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/bg-BG.rc rename to base/applications/mstsc/lang/bg-BG.rc diff --git a/reactos/base/applications/mstsc/lang/ca-ES.rc b/base/applications/mstsc/lang/ca-ES.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/ca-ES.rc rename to base/applications/mstsc/lang/ca-ES.rc diff --git a/reactos/base/applications/mstsc/lang/de-DE.rc b/base/applications/mstsc/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/de-DE.rc rename to base/applications/mstsc/lang/de-DE.rc diff --git a/reactos/base/applications/mstsc/lang/el-GR.rc b/base/applications/mstsc/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/el-GR.rc rename to base/applications/mstsc/lang/el-GR.rc diff --git a/reactos/base/applications/mstsc/lang/en-US.rc b/base/applications/mstsc/lang/en-US.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/en-US.rc rename to base/applications/mstsc/lang/en-US.rc diff --git a/reactos/base/applications/mstsc/lang/es-ES.rc b/base/applications/mstsc/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/es-ES.rc rename to base/applications/mstsc/lang/es-ES.rc diff --git a/reactos/base/applications/mstsc/lang/fr-FR.rc b/base/applications/mstsc/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/fr-FR.rc rename to base/applications/mstsc/lang/fr-FR.rc diff --git a/reactos/base/applications/mstsc/lang/it-IT.rc b/base/applications/mstsc/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/it-IT.rc rename to base/applications/mstsc/lang/it-IT.rc diff --git a/reactos/base/applications/mstsc/lang/ko-KR.rc b/base/applications/mstsc/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/ko-KR.rc rename to base/applications/mstsc/lang/ko-KR.rc diff --git a/reactos/base/applications/mstsc/lang/lt-LT.rc b/base/applications/mstsc/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/lt-LT.rc rename to base/applications/mstsc/lang/lt-LT.rc diff --git a/reactos/base/applications/mstsc/lang/no-NO.rc b/base/applications/mstsc/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/no-NO.rc rename to base/applications/mstsc/lang/no-NO.rc diff --git a/reactos/base/applications/mstsc/lang/pl-PL.rc b/base/applications/mstsc/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/pl-PL.rc rename to base/applications/mstsc/lang/pl-PL.rc diff --git a/reactos/base/applications/mstsc/lang/ru-RU.rc b/base/applications/mstsc/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/ru-RU.rc rename to base/applications/mstsc/lang/ru-RU.rc diff --git a/reactos/base/applications/mstsc/lang/sk-SK.rc b/base/applications/mstsc/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/sk-SK.rc rename to base/applications/mstsc/lang/sk-SK.rc diff --git a/reactos/base/applications/mstsc/lang/uk-UA.rc b/base/applications/mstsc/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/uk-UA.rc rename to base/applications/mstsc/lang/uk-UA.rc diff --git a/reactos/base/applications/mstsc/licence.c b/base/applications/mstsc/licence.c similarity index 100% rename from reactos/base/applications/mstsc/licence.c rename to base/applications/mstsc/licence.c diff --git a/reactos/base/applications/mstsc/mcs.c b/base/applications/mstsc/mcs.c similarity index 100% rename from reactos/base/applications/mstsc/mcs.c rename to base/applications/mstsc/mcs.c diff --git a/reactos/base/applications/mstsc/mppc.c b/base/applications/mstsc/mppc.c similarity index 100% rename from reactos/base/applications/mstsc/mppc.c rename to base/applications/mstsc/mppc.c diff --git a/reactos/base/applications/mstsc/mstsc.rbuild b/base/applications/mstsc/mstsc.rbuild similarity index 100% rename from reactos/base/applications/mstsc/mstsc.rbuild rename to base/applications/mstsc/mstsc.rbuild diff --git a/reactos/base/applications/mstsc/orders.c b/base/applications/mstsc/orders.c similarity index 100% rename from reactos/base/applications/mstsc/orders.c rename to base/applications/mstsc/orders.c diff --git a/reactos/base/applications/mstsc/orders.h b/base/applications/mstsc/orders.h similarity index 100% rename from reactos/base/applications/mstsc/orders.h rename to base/applications/mstsc/orders.h diff --git a/reactos/base/applications/mstsc/parse.h b/base/applications/mstsc/parse.h similarity index 100% rename from reactos/base/applications/mstsc/parse.h rename to base/applications/mstsc/parse.h diff --git a/reactos/base/applications/mstsc/precomp.h b/base/applications/mstsc/precomp.h similarity index 100% rename from reactos/base/applications/mstsc/precomp.h rename to base/applications/mstsc/precomp.h diff --git a/reactos/base/applications/mstsc/proto.h b/base/applications/mstsc/proto.h similarity index 100% rename from reactos/base/applications/mstsc/proto.h rename to base/applications/mstsc/proto.h diff --git a/reactos/base/applications/mstsc/pstcache.c b/base/applications/mstsc/pstcache.c similarity index 100% rename from reactos/base/applications/mstsc/pstcache.c rename to base/applications/mstsc/pstcache.c diff --git a/reactos/base/applications/mstsc/rdc.rc b/base/applications/mstsc/rdc.rc similarity index 100% rename from reactos/base/applications/mstsc/rdc.rc rename to base/applications/mstsc/rdc.rc diff --git a/reactos/base/applications/mstsc/rdesktop.h b/base/applications/mstsc/rdesktop.h similarity index 100% rename from reactos/base/applications/mstsc/rdesktop.h rename to base/applications/mstsc/rdesktop.h diff --git a/reactos/base/applications/mstsc/rdp.c b/base/applications/mstsc/rdp.c similarity index 100% rename from reactos/base/applications/mstsc/rdp.c rename to base/applications/mstsc/rdp.c diff --git a/reactos/base/applications/mstsc/rdp5.c b/base/applications/mstsc/rdp5.c similarity index 100% rename from reactos/base/applications/mstsc/rdp5.c rename to base/applications/mstsc/rdp5.c diff --git a/reactos/base/applications/mstsc/res/colors.ico b/base/applications/mstsc/res/colors.ico similarity index 100% rename from reactos/base/applications/mstsc/res/colors.ico rename to base/applications/mstsc/res/colors.ico diff --git a/reactos/base/applications/mstsc/res/connection.ico b/base/applications/mstsc/res/connection.ico similarity index 100% rename from reactos/base/applications/mstsc/res/connection.ico rename to base/applications/mstsc/res/connection.ico diff --git a/reactos/base/applications/mstsc/res/header.bmp b/base/applications/mstsc/res/header.bmp similarity index 100% rename from reactos/base/applications/mstsc/res/header.bmp rename to base/applications/mstsc/res/header.bmp diff --git a/reactos/base/applications/mstsc/res/header.pdn b/base/applications/mstsc/res/header.pdn similarity index 100% rename from reactos/base/applications/mstsc/res/header.pdn rename to base/applications/mstsc/res/header.pdn diff --git a/reactos/base/applications/mstsc/res/logon.ico b/base/applications/mstsc/res/logon.ico similarity index 100% rename from reactos/base/applications/mstsc/res/logon.ico rename to base/applications/mstsc/res/logon.ico diff --git a/reactos/base/applications/mstsc/res/mstsc.ico b/base/applications/mstsc/res/mstsc.ico similarity index 100% rename from reactos/base/applications/mstsc/res/mstsc.ico rename to base/applications/mstsc/res/mstsc.ico diff --git a/reactos/base/applications/mstsc/res/remote.ico b/base/applications/mstsc/res/remote.ico similarity index 100% rename from reactos/base/applications/mstsc/res/remote.ico rename to base/applications/mstsc/res/remote.ico diff --git a/reactos/base/applications/mstsc/res/spectrum.bmp b/base/applications/mstsc/res/spectrum.bmp similarity index 100% rename from reactos/base/applications/mstsc/res/spectrum.bmp rename to base/applications/mstsc/res/spectrum.bmp diff --git a/reactos/base/applications/mstsc/res/video-display.png b/base/applications/mstsc/res/video-display.png similarity index 100% rename from reactos/base/applications/mstsc/res/video-display.png rename to base/applications/mstsc/res/video-display.png diff --git a/reactos/base/applications/mstsc/resource.h b/base/applications/mstsc/resource.h similarity index 100% rename from reactos/base/applications/mstsc/resource.h rename to base/applications/mstsc/resource.h diff --git a/reactos/base/applications/mstsc/rsrc.rc b/base/applications/mstsc/rsrc.rc similarity index 100% rename from reactos/base/applications/mstsc/rsrc.rc rename to base/applications/mstsc/rsrc.rc diff --git a/reactos/base/applications/mstsc/secure.c b/base/applications/mstsc/secure.c similarity index 100% rename from reactos/base/applications/mstsc/secure.c rename to base/applications/mstsc/secure.c diff --git a/reactos/base/applications/mstsc/settings.c b/base/applications/mstsc/settings.c similarity index 100% rename from reactos/base/applications/mstsc/settings.c rename to base/applications/mstsc/settings.c diff --git a/reactos/base/applications/mstsc/ssl_calls.c b/base/applications/mstsc/ssl_calls.c similarity index 100% rename from reactos/base/applications/mstsc/ssl_calls.c rename to base/applications/mstsc/ssl_calls.c diff --git a/reactos/base/applications/mstsc/tcp.c b/base/applications/mstsc/tcp.c similarity index 100% rename from reactos/base/applications/mstsc/tcp.c rename to base/applications/mstsc/tcp.c diff --git a/reactos/base/applications/mstsc/types.h b/base/applications/mstsc/types.h similarity index 100% rename from reactos/base/applications/mstsc/types.h rename to base/applications/mstsc/types.h diff --git a/reactos/base/applications/mstsc/uimain.c b/base/applications/mstsc/uimain.c similarity index 100% rename from reactos/base/applications/mstsc/uimain.c rename to base/applications/mstsc/uimain.c diff --git a/reactos/base/applications/mstsc/uimain.h b/base/applications/mstsc/uimain.h similarity index 100% rename from reactos/base/applications/mstsc/uimain.h rename to base/applications/mstsc/uimain.h diff --git a/reactos/base/applications/mstsc/win32.c b/base/applications/mstsc/win32.c similarity index 100% rename from reactos/base/applications/mstsc/win32.c rename to base/applications/mstsc/win32.c diff --git a/reactos/base/applications/network/arp/arp.c b/base/applications/network/arp/arp.c similarity index 100% rename from reactos/base/applications/network/arp/arp.c rename to base/applications/network/arp/arp.c diff --git a/reactos/base/applications/network/arp/arp.rbuild b/base/applications/network/arp/arp.rbuild similarity index 100% rename from reactos/base/applications/network/arp/arp.rbuild rename to base/applications/network/arp/arp.rbuild diff --git a/reactos/base/applications/network/arp/arp.rc b/base/applications/network/arp/arp.rc similarity index 100% rename from reactos/base/applications/network/arp/arp.rc rename to base/applications/network/arp/arp.rc diff --git a/reactos/base/applications/network/dwnl/dwnl.c b/base/applications/network/dwnl/dwnl.c similarity index 100% rename from reactos/base/applications/network/dwnl/dwnl.c rename to base/applications/network/dwnl/dwnl.c diff --git a/reactos/base/applications/network/dwnl/dwnl.rbuild b/base/applications/network/dwnl/dwnl.rbuild similarity index 100% rename from reactos/base/applications/network/dwnl/dwnl.rbuild rename to base/applications/network/dwnl/dwnl.rbuild diff --git a/reactos/base/applications/network/finger/LICENSE.txt b/base/applications/network/finger/LICENSE.txt similarity index 100% rename from reactos/base/applications/network/finger/LICENSE.txt rename to base/applications/network/finger/LICENSE.txt diff --git a/reactos/base/applications/network/finger/err.c b/base/applications/network/finger/err.c similarity index 100% rename from reactos/base/applications/network/finger/err.c rename to base/applications/network/finger/err.c diff --git a/reactos/base/applications/network/finger/err.h b/base/applications/network/finger/err.h similarity index 100% rename from reactos/base/applications/network/finger/err.h rename to base/applications/network/finger/err.h diff --git a/reactos/base/applications/network/finger/finger.c b/base/applications/network/finger/finger.c similarity index 100% rename from reactos/base/applications/network/finger/finger.c rename to base/applications/network/finger/finger.c diff --git a/reactos/base/applications/network/finger/finger.rbuild b/base/applications/network/finger/finger.rbuild similarity index 100% rename from reactos/base/applications/network/finger/finger.rbuild rename to base/applications/network/finger/finger.rbuild diff --git a/reactos/base/applications/network/finger/finger.rc b/base/applications/network/finger/finger.rc similarity index 100% rename from reactos/base/applications/network/finger/finger.rc rename to base/applications/network/finger/finger.rc diff --git a/reactos/base/applications/network/finger/getopt.c b/base/applications/network/finger/getopt.c similarity index 100% rename from reactos/base/applications/network/finger/getopt.c rename to base/applications/network/finger/getopt.c diff --git a/reactos/base/applications/network/finger/getopt.h b/base/applications/network/finger/getopt.h similarity index 100% rename from reactos/base/applications/network/finger/getopt.h rename to base/applications/network/finger/getopt.h diff --git a/reactos/base/applications/network/finger/net.c b/base/applications/network/finger/net.c similarity index 100% rename from reactos/base/applications/network/finger/net.c rename to base/applications/network/finger/net.c diff --git a/reactos/base/applications/network/finger/various.h b/base/applications/network/finger/various.h similarity index 100% rename from reactos/base/applications/network/finger/various.h rename to base/applications/network/finger/various.h diff --git a/reactos/base/applications/network/ftp/cmds.c b/base/applications/network/ftp/cmds.c similarity index 100% rename from reactos/base/applications/network/ftp/cmds.c rename to base/applications/network/ftp/cmds.c diff --git a/reactos/base/applications/network/ftp/cmdtab.c b/base/applications/network/ftp/cmdtab.c similarity index 100% rename from reactos/base/applications/network/ftp/cmdtab.c rename to base/applications/network/ftp/cmdtab.c diff --git a/reactos/base/applications/network/ftp/domacro.c b/base/applications/network/ftp/domacro.c similarity index 100% rename from reactos/base/applications/network/ftp/domacro.c rename to base/applications/network/ftp/domacro.c diff --git a/reactos/base/applications/network/ftp/fake.c b/base/applications/network/ftp/fake.c similarity index 100% rename from reactos/base/applications/network/ftp/fake.c rename to base/applications/network/ftp/fake.c diff --git a/reactos/base/applications/network/ftp/fake.h b/base/applications/network/ftp/fake.h similarity index 100% rename from reactos/base/applications/network/ftp/fake.h rename to base/applications/network/ftp/fake.h diff --git a/reactos/base/applications/network/ftp/ftp.c b/base/applications/network/ftp/ftp.c similarity index 100% rename from reactos/base/applications/network/ftp/ftp.c rename to base/applications/network/ftp/ftp.c diff --git a/reactos/base/applications/network/ftp/ftp.rbuild b/base/applications/network/ftp/ftp.rbuild similarity index 100% rename from reactos/base/applications/network/ftp/ftp.rbuild rename to base/applications/network/ftp/ftp.rbuild diff --git a/reactos/base/applications/network/ftp/ftp.rc b/base/applications/network/ftp/ftp.rc similarity index 100% rename from reactos/base/applications/network/ftp/ftp.rc rename to base/applications/network/ftp/ftp.rc diff --git a/reactos/base/applications/network/ftp/ftp_var.h b/base/applications/network/ftp/ftp_var.h similarity index 100% rename from reactos/base/applications/network/ftp/ftp_var.h rename to base/applications/network/ftp/ftp_var.h diff --git a/reactos/base/applications/network/ftp/main.c b/base/applications/network/ftp/main.c similarity index 100% rename from reactos/base/applications/network/ftp/main.c rename to base/applications/network/ftp/main.c diff --git a/reactos/base/applications/network/ftp/pathnames.h b/base/applications/network/ftp/pathnames.h similarity index 100% rename from reactos/base/applications/network/ftp/pathnames.h rename to base/applications/network/ftp/pathnames.h diff --git a/reactos/base/applications/network/ftp/prototypes.h b/base/applications/network/ftp/prototypes.h similarity index 100% rename from reactos/base/applications/network/ftp/prototypes.h rename to base/applications/network/ftp/prototypes.h diff --git a/reactos/base/applications/network/ftp/ruserpass.c b/base/applications/network/ftp/ruserpass.c similarity index 100% rename from reactos/base/applications/network/ftp/ruserpass.c rename to base/applications/network/ftp/ruserpass.c diff --git a/reactos/base/applications/network/ipconfig/ipconfig.c b/base/applications/network/ipconfig/ipconfig.c similarity index 100% rename from reactos/base/applications/network/ipconfig/ipconfig.c rename to base/applications/network/ipconfig/ipconfig.c diff --git a/reactos/base/applications/network/ipconfig/ipconfig.rbuild b/base/applications/network/ipconfig/ipconfig.rbuild similarity index 100% rename from reactos/base/applications/network/ipconfig/ipconfig.rbuild rename to base/applications/network/ipconfig/ipconfig.rbuild diff --git a/reactos/base/applications/network/ipconfig/ipconfig.rc b/base/applications/network/ipconfig/ipconfig.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/ipconfig.rc rename to base/applications/network/ipconfig/ipconfig.rc diff --git a/reactos/base/applications/network/ipconfig/lang/bg-BG.rc b/base/applications/network/ipconfig/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/bg-BG.rc rename to base/applications/network/ipconfig/lang/bg-BG.rc diff --git a/reactos/base/applications/network/ipconfig/lang/de-DE.rc b/base/applications/network/ipconfig/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/de-DE.rc rename to base/applications/network/ipconfig/lang/de-DE.rc diff --git a/reactos/base/applications/network/ipconfig/lang/el-GR.rc b/base/applications/network/ipconfig/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/el-GR.rc rename to base/applications/network/ipconfig/lang/el-GR.rc diff --git a/reactos/base/applications/network/ipconfig/lang/en-US.rc b/base/applications/network/ipconfig/lang/en-US.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/en-US.rc rename to base/applications/network/ipconfig/lang/en-US.rc diff --git a/reactos/base/applications/network/ipconfig/lang/fr-FR.rc b/base/applications/network/ipconfig/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/fr-FR.rc rename to base/applications/network/ipconfig/lang/fr-FR.rc diff --git a/reactos/base/applications/network/ipconfig/lang/id-ID.rc b/base/applications/network/ipconfig/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/id-ID.rc rename to base/applications/network/ipconfig/lang/id-ID.rc diff --git a/reactos/base/applications/network/ipconfig/lang/it-IT.rc b/base/applications/network/ipconfig/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/it-IT.rc rename to base/applications/network/ipconfig/lang/it-IT.rc diff --git a/reactos/base/applications/network/ipconfig/lang/no-NO.rc b/base/applications/network/ipconfig/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/no-NO.rc rename to base/applications/network/ipconfig/lang/no-NO.rc diff --git a/reactos/base/applications/network/ipconfig/lang/pl-PL.rc b/base/applications/network/ipconfig/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/pl-PL.rc rename to base/applications/network/ipconfig/lang/pl-PL.rc diff --git a/reactos/base/applications/network/ipconfig/lang/ru-RU.rc b/base/applications/network/ipconfig/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/ru-RU.rc rename to base/applications/network/ipconfig/lang/ru-RU.rc diff --git a/reactos/base/applications/network/ipconfig/lang/sk-SK.rc b/base/applications/network/ipconfig/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/sk-SK.rc rename to base/applications/network/ipconfig/lang/sk-SK.rc diff --git a/reactos/base/applications/network/ipconfig/lang/uk-UA.rc b/base/applications/network/ipconfig/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/network/ipconfig/lang/uk-UA.rc rename to base/applications/network/ipconfig/lang/uk-UA.rc diff --git a/reactos/base/applications/network/ipconfig/resource.h b/base/applications/network/ipconfig/resource.h similarity index 100% rename from reactos/base/applications/network/ipconfig/resource.h rename to base/applications/network/ipconfig/resource.h diff --git a/reactos/base/applications/network/net/cmdStop.c b/base/applications/network/net/cmdStop.c similarity index 100% rename from reactos/base/applications/network/net/cmdStop.c rename to base/applications/network/net/cmdStop.c diff --git a/reactos/base/applications/network/net/cmdstart.c b/base/applications/network/net/cmdstart.c similarity index 100% rename from reactos/base/applications/network/net/cmdstart.c rename to base/applications/network/net/cmdstart.c diff --git a/reactos/base/applications/network/net/help.c b/base/applications/network/net/help.c similarity index 100% rename from reactos/base/applications/network/net/help.c rename to base/applications/network/net/help.c diff --git a/reactos/base/applications/network/net/main.c b/base/applications/network/net/main.c similarity index 100% rename from reactos/base/applications/network/net/main.c rename to base/applications/network/net/main.c diff --git a/reactos/base/applications/network/net/net.h b/base/applications/network/net/net.h similarity index 100% rename from reactos/base/applications/network/net/net.h rename to base/applications/network/net/net.h diff --git a/reactos/base/applications/network/net/net.rbuild b/base/applications/network/net/net.rbuild similarity index 100% rename from reactos/base/applications/network/net/net.rbuild rename to base/applications/network/net/net.rbuild diff --git a/reactos/base/applications/network/net/process.c b/base/applications/network/net/process.c similarity index 100% rename from reactos/base/applications/network/net/process.c rename to base/applications/network/net/process.c diff --git a/reactos/base/applications/network/netstat/netstat.c b/base/applications/network/netstat/netstat.c similarity index 100% rename from reactos/base/applications/network/netstat/netstat.c rename to base/applications/network/netstat/netstat.c diff --git a/reactos/base/applications/network/netstat/netstat.h b/base/applications/network/netstat/netstat.h similarity index 100% rename from reactos/base/applications/network/netstat/netstat.h rename to base/applications/network/netstat/netstat.h diff --git a/reactos/base/applications/network/netstat/netstat.rbuild b/base/applications/network/netstat/netstat.rbuild similarity index 100% rename from reactos/base/applications/network/netstat/netstat.rbuild rename to base/applications/network/netstat/netstat.rbuild diff --git a/reactos/base/applications/network/netstat/netstat.rc b/base/applications/network/netstat/netstat.rc similarity index 100% rename from reactos/base/applications/network/netstat/netstat.rc rename to base/applications/network/netstat/netstat.rc diff --git a/reactos/base/applications/network/network.rbuild b/base/applications/network/network.rbuild similarity index 100% rename from reactos/base/applications/network/network.rbuild rename to base/applications/network/network.rbuild diff --git a/reactos/base/applications/network/ping/ping.c b/base/applications/network/ping/ping.c similarity index 100% rename from reactos/base/applications/network/ping/ping.c rename to base/applications/network/ping/ping.c diff --git a/reactos/base/applications/network/ping/ping.rbuild b/base/applications/network/ping/ping.rbuild similarity index 100% rename from reactos/base/applications/network/ping/ping.rbuild rename to base/applications/network/ping/ping.rbuild diff --git a/reactos/base/applications/network/ping/ping.rc b/base/applications/network/ping/ping.rc similarity index 100% rename from reactos/base/applications/network/ping/ping.rc rename to base/applications/network/ping/ping.rc diff --git a/reactos/base/applications/network/route/route.c b/base/applications/network/route/route.c similarity index 100% rename from reactos/base/applications/network/route/route.c rename to base/applications/network/route/route.c diff --git a/reactos/base/applications/network/route/route.rbuild b/base/applications/network/route/route.rbuild similarity index 100% rename from reactos/base/applications/network/route/route.rbuild rename to base/applications/network/route/route.rbuild diff --git a/reactos/base/applications/network/route/route.rc b/base/applications/network/route/route.rc similarity index 100% rename from reactos/base/applications/network/route/route.rc rename to base/applications/network/route/route.rc diff --git a/reactos/base/applications/network/telnet/Makefile.mingw b/base/applications/network/telnet/Makefile.mingw similarity index 100% rename from reactos/base/applications/network/telnet/Makefile.mingw rename to base/applications/network/telnet/Makefile.mingw diff --git a/reactos/base/applications/network/telnet/doc/00readme.avs b/base/applications/network/telnet/doc/00readme.avs similarity index 100% rename from reactos/base/applications/network/telnet/doc/00readme.avs rename to base/applications/network/telnet/doc/00readme.avs diff --git a/reactos/base/applications/network/telnet/doc/bugs.txt b/base/applications/network/telnet/doc/bugs.txt similarity index 100% rename from reactos/base/applications/network/telnet/doc/bugs.txt rename to base/applications/network/telnet/doc/bugs.txt diff --git a/reactos/base/applications/network/telnet/doc/changes.txt b/base/applications/network/telnet/doc/changes.txt similarity index 100% rename from reactos/base/applications/network/telnet/doc/changes.txt rename to base/applications/network/telnet/doc/changes.txt diff --git a/reactos/base/applications/network/telnet/doc/license.txt b/base/applications/network/telnet/doc/license.txt similarity index 100% rename from reactos/base/applications/network/telnet/doc/license.txt rename to base/applications/network/telnet/doc/license.txt diff --git a/reactos/base/applications/network/telnet/doc/options.txt b/base/applications/network/telnet/doc/options.txt similarity index 100% rename from reactos/base/applications/network/telnet/doc/options.txt rename to base/applications/network/telnet/doc/options.txt diff --git a/reactos/base/applications/network/telnet/doc/readme.txt b/base/applications/network/telnet/doc/readme.txt similarity index 100% rename from reactos/base/applications/network/telnet/doc/readme.txt rename to base/applications/network/telnet/doc/readme.txt diff --git a/reactos/base/applications/network/telnet/doc/ssh.txt b/base/applications/network/telnet/doc/ssh.txt similarity index 100% rename from reactos/base/applications/network/telnet/doc/ssh.txt rename to base/applications/network/telnet/doc/ssh.txt diff --git a/reactos/base/applications/network/telnet/resource/tnmsg.h b/base/applications/network/telnet/resource/tnmsg.h similarity index 100% rename from reactos/base/applications/network/telnet/resource/tnmsg.h rename to base/applications/network/telnet/resource/tnmsg.h diff --git a/reactos/base/applications/network/telnet/resource/tnmsg.rc b/base/applications/network/telnet/resource/tnmsg.rc similarity index 100% rename from reactos/base/applications/network/telnet/resource/tnmsg.rc rename to base/applications/network/telnet/resource/tnmsg.rc diff --git a/reactos/base/applications/network/telnet/src/ansiprsr.cpp b/base/applications/network/telnet/src/ansiprsr.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/ansiprsr.cpp rename to base/applications/network/telnet/src/ansiprsr.cpp diff --git a/reactos/base/applications/network/telnet/src/ansiprsr.h b/base/applications/network/telnet/src/ansiprsr.h similarity index 100% rename from reactos/base/applications/network/telnet/src/ansiprsr.h rename to base/applications/network/telnet/src/ansiprsr.h diff --git a/reactos/base/applications/network/telnet/src/keytrans.cpp b/base/applications/network/telnet/src/keytrans.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/keytrans.cpp rename to base/applications/network/telnet/src/keytrans.cpp diff --git a/reactos/base/applications/network/telnet/src/keytrans.h b/base/applications/network/telnet/src/keytrans.h similarity index 100% rename from reactos/base/applications/network/telnet/src/keytrans.h rename to base/applications/network/telnet/src/keytrans.h diff --git a/reactos/base/applications/network/telnet/src/stl_bids.h b/base/applications/network/telnet/src/stl_bids.h similarity index 100% rename from reactos/base/applications/network/telnet/src/stl_bids.h rename to base/applications/network/telnet/src/stl_bids.h diff --git a/reactos/base/applications/network/telnet/src/tcharmap.cpp b/base/applications/network/telnet/src/tcharmap.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tcharmap.cpp rename to base/applications/network/telnet/src/tcharmap.cpp diff --git a/reactos/base/applications/network/telnet/src/tcharmap.h b/base/applications/network/telnet/src/tcharmap.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tcharmap.h rename to base/applications/network/telnet/src/tcharmap.h diff --git a/reactos/base/applications/network/telnet/src/tconsole.cpp b/base/applications/network/telnet/src/tconsole.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tconsole.cpp rename to base/applications/network/telnet/src/tconsole.cpp diff --git a/reactos/base/applications/network/telnet/src/tconsole.h b/base/applications/network/telnet/src/tconsole.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tconsole.h rename to base/applications/network/telnet/src/tconsole.h diff --git a/reactos/base/applications/network/telnet/src/telnet.h b/base/applications/network/telnet/src/telnet.h similarity index 100% rename from reactos/base/applications/network/telnet/src/telnet.h rename to base/applications/network/telnet/src/telnet.h diff --git a/reactos/base/applications/network/telnet/src/tkeydef.cpp b/base/applications/network/telnet/src/tkeydef.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tkeydef.cpp rename to base/applications/network/telnet/src/tkeydef.cpp diff --git a/reactos/base/applications/network/telnet/src/tkeydef.h b/base/applications/network/telnet/src/tkeydef.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tkeydef.h rename to base/applications/network/telnet/src/tkeydef.h diff --git a/reactos/base/applications/network/telnet/src/tkeymap.cpp b/base/applications/network/telnet/src/tkeymap.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tkeymap.cpp rename to base/applications/network/telnet/src/tkeymap.cpp diff --git a/reactos/base/applications/network/telnet/src/tkeymap.h b/base/applications/network/telnet/src/tkeymap.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tkeymap.h rename to base/applications/network/telnet/src/tkeymap.h diff --git a/reactos/base/applications/network/telnet/src/tmapldr.cpp b/base/applications/network/telnet/src/tmapldr.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tmapldr.cpp rename to base/applications/network/telnet/src/tmapldr.cpp diff --git a/reactos/base/applications/network/telnet/src/tmapldr.h b/base/applications/network/telnet/src/tmapldr.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tmapldr.h rename to base/applications/network/telnet/src/tmapldr.h diff --git a/reactos/base/applications/network/telnet/src/tmouse.cpp b/base/applications/network/telnet/src/tmouse.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tmouse.cpp rename to base/applications/network/telnet/src/tmouse.cpp diff --git a/reactos/base/applications/network/telnet/src/tmouse.h b/base/applications/network/telnet/src/tmouse.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tmouse.h rename to base/applications/network/telnet/src/tmouse.h diff --git a/reactos/base/applications/network/telnet/src/tnclass.cpp b/base/applications/network/telnet/src/tnclass.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tnclass.cpp rename to base/applications/network/telnet/src/tnclass.cpp diff --git a/reactos/base/applications/network/telnet/src/tnclass.h b/base/applications/network/telnet/src/tnclass.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tnclass.h rename to base/applications/network/telnet/src/tnclass.h diff --git a/reactos/base/applications/network/telnet/src/tnclip.cpp b/base/applications/network/telnet/src/tnclip.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tnclip.cpp rename to base/applications/network/telnet/src/tnclip.cpp diff --git a/reactos/base/applications/network/telnet/src/tnclip.h b/base/applications/network/telnet/src/tnclip.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tnclip.h rename to base/applications/network/telnet/src/tnclip.h diff --git a/reactos/base/applications/network/telnet/src/tncon.cpp b/base/applications/network/telnet/src/tncon.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tncon.cpp rename to base/applications/network/telnet/src/tncon.cpp diff --git a/reactos/base/applications/network/telnet/src/tncon.h b/base/applications/network/telnet/src/tncon.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tncon.h rename to base/applications/network/telnet/src/tncon.h diff --git a/reactos/base/applications/network/telnet/src/tnconfig.cpp b/base/applications/network/telnet/src/tnconfig.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tnconfig.cpp rename to base/applications/network/telnet/src/tnconfig.cpp diff --git a/reactos/base/applications/network/telnet/src/tnconfig.h b/base/applications/network/telnet/src/tnconfig.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tnconfig.h rename to base/applications/network/telnet/src/tnconfig.h diff --git a/reactos/base/applications/network/telnet/src/tnerror.cpp b/base/applications/network/telnet/src/tnerror.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tnerror.cpp rename to base/applications/network/telnet/src/tnerror.cpp diff --git a/reactos/base/applications/network/telnet/src/tnerror.h b/base/applications/network/telnet/src/tnerror.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tnerror.h rename to base/applications/network/telnet/src/tnerror.h diff --git a/reactos/base/applications/network/telnet/src/tnetwork.cpp b/base/applications/network/telnet/src/tnetwork.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tnetwork.cpp rename to base/applications/network/telnet/src/tnetwork.cpp diff --git a/reactos/base/applications/network/telnet/src/tnetwork.h b/base/applications/network/telnet/src/tnetwork.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tnetwork.h rename to base/applications/network/telnet/src/tnetwork.h diff --git a/reactos/base/applications/network/telnet/src/tnmain.cpp b/base/applications/network/telnet/src/tnmain.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tnmain.cpp rename to base/applications/network/telnet/src/tnmain.cpp diff --git a/reactos/base/applications/network/telnet/src/tnmain.h b/base/applications/network/telnet/src/tnmain.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tnmain.h rename to base/applications/network/telnet/src/tnmain.h diff --git a/reactos/base/applications/network/telnet/src/tnmisc.cpp b/base/applications/network/telnet/src/tnmisc.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tnmisc.cpp rename to base/applications/network/telnet/src/tnmisc.cpp diff --git a/reactos/base/applications/network/telnet/src/tnmisc.h b/base/applications/network/telnet/src/tnmisc.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tnmisc.h rename to base/applications/network/telnet/src/tnmisc.h diff --git a/reactos/base/applications/network/telnet/src/tnmsg.h b/base/applications/network/telnet/src/tnmsg.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tnmsg.h rename to base/applications/network/telnet/src/tnmsg.h diff --git a/reactos/base/applications/network/telnet/src/tparams.h b/base/applications/network/telnet/src/tparams.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tparams.h rename to base/applications/network/telnet/src/tparams.h diff --git a/reactos/base/applications/network/telnet/src/tparser.h b/base/applications/network/telnet/src/tparser.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tparser.h rename to base/applications/network/telnet/src/tparser.h diff --git a/reactos/base/applications/network/telnet/src/tscript.cpp b/base/applications/network/telnet/src/tscript.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tscript.cpp rename to base/applications/network/telnet/src/tscript.cpp diff --git a/reactos/base/applications/network/telnet/src/tscript.h b/base/applications/network/telnet/src/tscript.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tscript.h rename to base/applications/network/telnet/src/tscript.h diff --git a/reactos/base/applications/network/telnet/src/tscroll.cpp b/base/applications/network/telnet/src/tscroll.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/tscroll.cpp rename to base/applications/network/telnet/src/tscroll.cpp diff --git a/reactos/base/applications/network/telnet/src/tscroll.h b/base/applications/network/telnet/src/tscroll.h similarity index 100% rename from reactos/base/applications/network/telnet/src/tscroll.h rename to base/applications/network/telnet/src/tscroll.h diff --git a/reactos/base/applications/network/telnet/src/ttelhndl.cpp b/base/applications/network/telnet/src/ttelhndl.cpp similarity index 100% rename from reactos/base/applications/network/telnet/src/ttelhndl.cpp rename to base/applications/network/telnet/src/ttelhndl.cpp diff --git a/reactos/base/applications/network/telnet/src/ttelhndl.h b/base/applications/network/telnet/src/ttelhndl.h similarity index 100% rename from reactos/base/applications/network/telnet/src/ttelhndl.h rename to base/applications/network/telnet/src/ttelhndl.h diff --git a/reactos/base/applications/network/telnet/telnet.cfg b/base/applications/network/telnet/telnet.cfg similarity index 100% rename from reactos/base/applications/network/telnet/telnet.cfg rename to base/applications/network/telnet/telnet.cfg diff --git a/reactos/base/applications/network/telnet/telnet.ico b/base/applications/network/telnet/telnet.ico similarity index 100% rename from reactos/base/applications/network/telnet/telnet.ico rename to base/applications/network/telnet/telnet.ico diff --git a/reactos/base/applications/network/telnet/telnet.ini b/base/applications/network/telnet/telnet.ini similarity index 100% rename from reactos/base/applications/network/telnet/telnet.ini rename to base/applications/network/telnet/telnet.ini diff --git a/reactos/base/applications/network/telnet/telnet.rbuild b/base/applications/network/telnet/telnet.rbuild similarity index 100% rename from reactos/base/applications/network/telnet/telnet.rbuild rename to base/applications/network/telnet/telnet.rbuild diff --git a/reactos/base/applications/network/telnet/telnet.rc b/base/applications/network/telnet/telnet.rc similarity index 100% rename from reactos/base/applications/network/telnet/telnet.rc rename to base/applications/network/telnet/telnet.rc diff --git a/reactos/base/applications/network/tracert/tracert.c b/base/applications/network/tracert/tracert.c similarity index 100% rename from reactos/base/applications/network/tracert/tracert.c rename to base/applications/network/tracert/tracert.c diff --git a/reactos/base/applications/network/tracert/tracert.h b/base/applications/network/tracert/tracert.h similarity index 100% rename from reactos/base/applications/network/tracert/tracert.h rename to base/applications/network/tracert/tracert.h diff --git a/reactos/base/applications/network/tracert/tracert.rbuild b/base/applications/network/tracert/tracert.rbuild similarity index 100% rename from reactos/base/applications/network/tracert/tracert.rbuild rename to base/applications/network/tracert/tracert.rbuild diff --git a/reactos/base/applications/network/tracert/tracert.rc b/base/applications/network/tracert/tracert.rc similarity index 100% rename from reactos/base/applications/network/tracert/tracert.rc rename to base/applications/network/tracert/tracert.rc diff --git a/reactos/base/applications/network/whois/LICENSE.txt b/base/applications/network/whois/LICENSE.txt similarity index 100% rename from reactos/base/applications/network/whois/LICENSE.txt rename to base/applications/network/whois/LICENSE.txt diff --git a/reactos/base/applications/network/whois/whois.c b/base/applications/network/whois/whois.c similarity index 100% rename from reactos/base/applications/network/whois/whois.c rename to base/applications/network/whois/whois.c diff --git a/reactos/base/applications/network/whois/whois.rbuild b/base/applications/network/whois/whois.rbuild similarity index 100% rename from reactos/base/applications/network/whois/whois.rbuild rename to base/applications/network/whois/whois.rbuild diff --git a/reactos/base/applications/network/whois/whois.rc b/base/applications/network/whois/whois.rc similarity index 100% rename from reactos/base/applications/network/whois/whois.rc rename to base/applications/network/whois/whois.rc diff --git a/reactos/base/applications/notepad/ChangeLog b/base/applications/notepad/ChangeLog similarity index 100% rename from reactos/base/applications/notepad/ChangeLog rename to base/applications/notepad/ChangeLog diff --git a/reactos/base/applications/notepad/dialog.c b/base/applications/notepad/dialog.c similarity index 100% rename from reactos/base/applications/notepad/dialog.c rename to base/applications/notepad/dialog.c diff --git a/reactos/base/applications/notepad/dialog.h b/base/applications/notepad/dialog.h similarity index 100% rename from reactos/base/applications/notepad/dialog.h rename to base/applications/notepad/dialog.h diff --git a/reactos/base/applications/notepad/lang/bg-BG.rc b/base/applications/notepad/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/notepad/lang/bg-BG.rc rename to base/applications/notepad/lang/bg-BG.rc diff --git a/reactos/base/applications/notepad/lang/cs-CZ.rc b/base/applications/notepad/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/notepad/lang/cs-CZ.rc rename to base/applications/notepad/lang/cs-CZ.rc diff --git a/reactos/base/applications/notepad/lang/da-DK.rc b/base/applications/notepad/lang/da-DK.rc similarity index 100% rename from reactos/base/applications/notepad/lang/da-DK.rc rename to base/applications/notepad/lang/da-DK.rc diff --git a/reactos/base/applications/notepad/lang/de-DE.rc b/base/applications/notepad/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/notepad/lang/de-DE.rc rename to base/applications/notepad/lang/de-DE.rc diff --git a/reactos/base/applications/notepad/lang/el-GR.rc b/base/applications/notepad/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/notepad/lang/el-GR.rc rename to base/applications/notepad/lang/el-GR.rc diff --git a/reactos/base/applications/notepad/lang/en-US.rc b/base/applications/notepad/lang/en-US.rc similarity index 100% rename from reactos/base/applications/notepad/lang/en-US.rc rename to base/applications/notepad/lang/en-US.rc diff --git a/reactos/base/applications/notepad/lang/es-ES.rc b/base/applications/notepad/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/notepad/lang/es-ES.rc rename to base/applications/notepad/lang/es-ES.rc diff --git a/reactos/base/applications/notepad/lang/eu-ES.rc b/base/applications/notepad/lang/eu-ES.rc similarity index 100% rename from reactos/base/applications/notepad/lang/eu-ES.rc rename to base/applications/notepad/lang/eu-ES.rc diff --git a/reactos/base/applications/notepad/lang/fi-FI.rc b/base/applications/notepad/lang/fi-FI.rc similarity index 100% rename from reactos/base/applications/notepad/lang/fi-FI.rc rename to base/applications/notepad/lang/fi-FI.rc diff --git a/reactos/base/applications/notepad/lang/fr-FR.rc b/base/applications/notepad/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/notepad/lang/fr-FR.rc rename to base/applications/notepad/lang/fr-FR.rc diff --git a/reactos/base/applications/notepad/lang/hu-HU.rc b/base/applications/notepad/lang/hu-HU.rc similarity index 100% rename from reactos/base/applications/notepad/lang/hu-HU.rc rename to base/applications/notepad/lang/hu-HU.rc diff --git a/reactos/base/applications/notepad/lang/id-ID.rc b/base/applications/notepad/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/notepad/lang/id-ID.rc rename to base/applications/notepad/lang/id-ID.rc diff --git a/reactos/base/applications/notepad/lang/it-IT.rc b/base/applications/notepad/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/notepad/lang/it-IT.rc rename to base/applications/notepad/lang/it-IT.rc diff --git a/reactos/base/applications/notepad/lang/ja-JP.rc b/base/applications/notepad/lang/ja-JP.rc similarity index 100% rename from reactos/base/applications/notepad/lang/ja-JP.rc rename to base/applications/notepad/lang/ja-JP.rc diff --git a/reactos/base/applications/notepad/lang/lt-LT.rc b/base/applications/notepad/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/notepad/lang/lt-LT.rc rename to base/applications/notepad/lang/lt-LT.rc diff --git a/reactos/base/applications/notepad/lang/nl-NL.rc b/base/applications/notepad/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/notepad/lang/nl-NL.rc rename to base/applications/notepad/lang/nl-NL.rc diff --git a/reactos/base/applications/notepad/lang/no-NO.rc b/base/applications/notepad/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/notepad/lang/no-NO.rc rename to base/applications/notepad/lang/no-NO.rc diff --git a/reactos/base/applications/notepad/lang/pl-PL.rc b/base/applications/notepad/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/notepad/lang/pl-PL.rc rename to base/applications/notepad/lang/pl-PL.rc diff --git a/reactos/base/applications/notepad/lang/pt-PT.rc b/base/applications/notepad/lang/pt-PT.rc similarity index 100% rename from reactos/base/applications/notepad/lang/pt-PT.rc rename to base/applications/notepad/lang/pt-PT.rc diff --git a/reactos/base/applications/notepad/lang/ru-RU.rc b/base/applications/notepad/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/notepad/lang/ru-RU.rc rename to base/applications/notepad/lang/ru-RU.rc diff --git a/reactos/base/applications/notepad/lang/sk-SK.rc b/base/applications/notepad/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/notepad/lang/sk-SK.rc rename to base/applications/notepad/lang/sk-SK.rc diff --git a/reactos/base/applications/notepad/lang/sl-SI.rc b/base/applications/notepad/lang/sl-SI.rc similarity index 100% rename from reactos/base/applications/notepad/lang/sl-SI.rc rename to base/applications/notepad/lang/sl-SI.rc diff --git a/reactos/base/applications/notepad/lang/sv-SE.rc b/base/applications/notepad/lang/sv-SE.rc similarity index 100% rename from reactos/base/applications/notepad/lang/sv-SE.rc rename to base/applications/notepad/lang/sv-SE.rc diff --git a/reactos/base/applications/notepad/lang/th-TH.rc b/base/applications/notepad/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/notepad/lang/th-TH.rc rename to base/applications/notepad/lang/th-TH.rc diff --git a/reactos/base/applications/notepad/lang/uk-UA.rc b/base/applications/notepad/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/notepad/lang/uk-UA.rc rename to base/applications/notepad/lang/uk-UA.rc diff --git a/reactos/base/applications/notepad/lang/zh-CN.rc b/base/applications/notepad/lang/zh-CN.rc similarity index 100% rename from reactos/base/applications/notepad/lang/zh-CN.rc rename to base/applications/notepad/lang/zh-CN.rc diff --git a/reactos/base/applications/notepad/license.c b/base/applications/notepad/license.c similarity index 100% rename from reactos/base/applications/notepad/license.c rename to base/applications/notepad/license.c diff --git a/reactos/base/applications/notepad/main.c b/base/applications/notepad/main.c similarity index 100% rename from reactos/base/applications/notepad/main.c rename to base/applications/notepad/main.c diff --git a/reactos/base/applications/notepad/main.h b/base/applications/notepad/main.h similarity index 100% rename from reactos/base/applications/notepad/main.h rename to base/applications/notepad/main.h diff --git a/reactos/base/applications/notepad/notepad.h b/base/applications/notepad/notepad.h similarity index 100% rename from reactos/base/applications/notepad/notepad.h rename to base/applications/notepad/notepad.h diff --git a/reactos/base/applications/notepad/notepad.rbuild b/base/applications/notepad/notepad.rbuild similarity index 100% rename from reactos/base/applications/notepad/notepad.rbuild rename to base/applications/notepad/notepad.rbuild diff --git a/reactos/base/applications/notepad/notepad_res.h b/base/applications/notepad/notepad_res.h similarity index 100% rename from reactos/base/applications/notepad/notepad_res.h rename to base/applications/notepad/notepad_res.h diff --git a/reactos/base/applications/notepad/res/notepad.ico b/base/applications/notepad/res/notepad.ico similarity index 100% rename from reactos/base/applications/notepad/res/notepad.ico rename to base/applications/notepad/res/notepad.ico diff --git a/reactos/base/applications/notepad/rsrc.rc b/base/applications/notepad/rsrc.rc similarity index 100% rename from reactos/base/applications/notepad/rsrc.rc rename to base/applications/notepad/rsrc.rc diff --git a/reactos/base/applications/notepad/settings.c b/base/applications/notepad/settings.c similarity index 100% rename from reactos/base/applications/notepad/settings.c rename to base/applications/notepad/settings.c diff --git a/reactos/base/applications/notepad/text.c b/base/applications/notepad/text.c similarity index 100% rename from reactos/base/applications/notepad/text.c rename to base/applications/notepad/text.c diff --git a/reactos/base/applications/regedit/about.c b/base/applications/regedit/about.c similarity index 100% rename from reactos/base/applications/regedit/about.c rename to base/applications/regedit/about.c diff --git a/reactos/base/applications/regedit/childwnd.c b/base/applications/regedit/childwnd.c similarity index 100% rename from reactos/base/applications/regedit/childwnd.c rename to base/applications/regedit/childwnd.c diff --git a/reactos/base/applications/regedit/clb/clb.c b/base/applications/regedit/clb/clb.c similarity index 100% rename from reactos/base/applications/regedit/clb/clb.c rename to base/applications/regedit/clb/clb.c diff --git a/reactos/base/applications/regedit/clb/clb.rbuild b/base/applications/regedit/clb/clb.rbuild similarity index 100% rename from reactos/base/applications/regedit/clb/clb.rbuild rename to base/applications/regedit/clb/clb.rbuild diff --git a/reactos/base/applications/regedit/clb/clb.rc b/base/applications/regedit/clb/clb.rc similarity index 100% rename from reactos/base/applications/regedit/clb/clb.rc rename to base/applications/regedit/clb/clb.rc diff --git a/reactos/base/applications/regedit/clb/clb.spec b/base/applications/regedit/clb/clb.spec similarity index 100% rename from reactos/base/applications/regedit/clb/clb.spec rename to base/applications/regedit/clb/clb.spec diff --git a/reactos/base/applications/regedit/clb/clbdll.h b/base/applications/regedit/clb/clbdll.h similarity index 100% rename from reactos/base/applications/regedit/clb/clbdll.h rename to base/applications/regedit/clb/clbdll.h diff --git a/reactos/base/applications/regedit/clb/lang/bg-BG.rc b/base/applications/regedit/clb/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/bg-BG.rc rename to base/applications/regedit/clb/lang/bg-BG.rc diff --git a/reactos/base/applications/regedit/clb/lang/de-DE.rc b/base/applications/regedit/clb/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/de-DE.rc rename to base/applications/regedit/clb/lang/de-DE.rc diff --git a/reactos/base/applications/regedit/clb/lang/el-GR.rc b/base/applications/regedit/clb/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/el-GR.rc rename to base/applications/regedit/clb/lang/el-GR.rc diff --git a/reactos/base/applications/regedit/clb/lang/en-US.rc b/base/applications/regedit/clb/lang/en-US.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/en-US.rc rename to base/applications/regedit/clb/lang/en-US.rc diff --git a/reactos/base/applications/regedit/clb/lang/es-ES.rc b/base/applications/regedit/clb/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/es-ES.rc rename to base/applications/regedit/clb/lang/es-ES.rc diff --git a/reactos/base/applications/regedit/clb/lang/id-ID.rc b/base/applications/regedit/clb/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/id-ID.rc rename to base/applications/regedit/clb/lang/id-ID.rc diff --git a/reactos/base/applications/regedit/clb/lang/it-IT.rc b/base/applications/regedit/clb/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/it-IT.rc rename to base/applications/regedit/clb/lang/it-IT.rc diff --git a/reactos/base/applications/regedit/clb/lang/ja-JP.rc b/base/applications/regedit/clb/lang/ja-JP.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/ja-JP.rc rename to base/applications/regedit/clb/lang/ja-JP.rc diff --git a/reactos/base/applications/regedit/clb/lang/no-NO.rc b/base/applications/regedit/clb/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/no-NO.rc rename to base/applications/regedit/clb/lang/no-NO.rc diff --git a/reactos/base/applications/regedit/clb/lang/pl-PL.rc b/base/applications/regedit/clb/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/pl-PL.rc rename to base/applications/regedit/clb/lang/pl-PL.rc diff --git a/reactos/base/applications/regedit/clb/lang/ru-RU.rc b/base/applications/regedit/clb/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/ru-RU.rc rename to base/applications/regedit/clb/lang/ru-RU.rc diff --git a/reactos/base/applications/regedit/clb/lang/sk-SK.rc b/base/applications/regedit/clb/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/sk-SK.rc rename to base/applications/regedit/clb/lang/sk-SK.rc diff --git a/reactos/base/applications/regedit/clb/lang/th-TH.rc b/base/applications/regedit/clb/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/th-TH.rc rename to base/applications/regedit/clb/lang/th-TH.rc diff --git a/reactos/base/applications/regedit/clb/lang/uk-UA.rc b/base/applications/regedit/clb/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/uk-UA.rc rename to base/applications/regedit/clb/lang/uk-UA.rc diff --git a/reactos/base/applications/regedit/clb/precomp.h b/base/applications/regedit/clb/precomp.h similarity index 100% rename from reactos/base/applications/regedit/clb/precomp.h rename to base/applications/regedit/clb/precomp.h diff --git a/reactos/base/applications/regedit/clb/resource.h b/base/applications/regedit/clb/resource.h similarity index 100% rename from reactos/base/applications/regedit/clb/resource.h rename to base/applications/regedit/clb/resource.h diff --git a/reactos/base/applications/regedit/clb/rsrc.rc b/base/applications/regedit/clb/rsrc.rc similarity index 100% rename from reactos/base/applications/regedit/clb/rsrc.rc rename to base/applications/regedit/clb/rsrc.rc diff --git a/reactos/base/applications/regedit/edit.c b/base/applications/regedit/edit.c similarity index 100% rename from reactos/base/applications/regedit/edit.c rename to base/applications/regedit/edit.c diff --git a/reactos/base/applications/regedit/find.c b/base/applications/regedit/find.c similarity index 100% rename from reactos/base/applications/regedit/find.c rename to base/applications/regedit/find.c diff --git a/reactos/base/applications/regedit/framewnd.c b/base/applications/regedit/framewnd.c similarity index 100% rename from reactos/base/applications/regedit/framewnd.c rename to base/applications/regedit/framewnd.c diff --git a/reactos/base/applications/regedit/hexedit.c b/base/applications/regedit/hexedit.c similarity index 100% rename from reactos/base/applications/regedit/hexedit.c rename to base/applications/regedit/hexedit.c diff --git a/reactos/base/applications/regedit/hexedit.h b/base/applications/regedit/hexedit.h similarity index 100% rename from reactos/base/applications/regedit/hexedit.h rename to base/applications/regedit/hexedit.h diff --git a/reactos/base/applications/regedit/lang/bg-BG.rc b/base/applications/regedit/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/regedit/lang/bg-BG.rc rename to base/applications/regedit/lang/bg-BG.rc diff --git a/reactos/base/applications/regedit/lang/cs-CZ.rc b/base/applications/regedit/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/regedit/lang/cs-CZ.rc rename to base/applications/regedit/lang/cs-CZ.rc diff --git a/reactos/base/applications/regedit/lang/de-DE.rc b/base/applications/regedit/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/regedit/lang/de-DE.rc rename to base/applications/regedit/lang/de-DE.rc diff --git a/reactos/base/applications/regedit/lang/el-GR.rc b/base/applications/regedit/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/regedit/lang/el-GR.rc rename to base/applications/regedit/lang/el-GR.rc diff --git a/reactos/base/applications/regedit/lang/en-US.rc b/base/applications/regedit/lang/en-US.rc similarity index 100% rename from reactos/base/applications/regedit/lang/en-US.rc rename to base/applications/regedit/lang/en-US.rc diff --git a/reactos/base/applications/regedit/lang/es-ES.rc b/base/applications/regedit/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/regedit/lang/es-ES.rc rename to base/applications/regedit/lang/es-ES.rc diff --git a/reactos/base/applications/regedit/lang/fr-FR.rc b/base/applications/regedit/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/regedit/lang/fr-FR.rc rename to base/applications/regedit/lang/fr-FR.rc diff --git a/reactos/base/applications/regedit/lang/hu-HU.rc b/base/applications/regedit/lang/hu-HU.rc similarity index 100% rename from reactos/base/applications/regedit/lang/hu-HU.rc rename to base/applications/regedit/lang/hu-HU.rc diff --git a/reactos/base/applications/regedit/lang/id-ID.rc b/base/applications/regedit/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/regedit/lang/id-ID.rc rename to base/applications/regedit/lang/id-ID.rc diff --git a/reactos/base/applications/regedit/lang/it-IT.rc b/base/applications/regedit/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/regedit/lang/it-IT.rc rename to base/applications/regedit/lang/it-IT.rc diff --git a/reactos/base/applications/regedit/lang/ja-JP.rc b/base/applications/regedit/lang/ja-JP.rc similarity index 100% rename from reactos/base/applications/regedit/lang/ja-JP.rc rename to base/applications/regedit/lang/ja-JP.rc diff --git a/reactos/base/applications/regedit/lang/ko-KR.rc b/base/applications/regedit/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/regedit/lang/ko-KR.rc rename to base/applications/regedit/lang/ko-KR.rc diff --git a/reactos/base/applications/regedit/lang/nl-NL.rc b/base/applications/regedit/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/regedit/lang/nl-NL.rc rename to base/applications/regedit/lang/nl-NL.rc diff --git a/reactos/base/applications/regedit/lang/no-NO.rc b/base/applications/regedit/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/regedit/lang/no-NO.rc rename to base/applications/regedit/lang/no-NO.rc diff --git a/reactos/base/applications/regedit/lang/pl-PL.rc b/base/applications/regedit/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/regedit/lang/pl-PL.rc rename to base/applications/regedit/lang/pl-PL.rc diff --git a/reactos/base/applications/regedit/lang/pt-BR.rc b/base/applications/regedit/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/regedit/lang/pt-BR.rc rename to base/applications/regedit/lang/pt-BR.rc diff --git a/reactos/base/applications/regedit/lang/pt-PT.rc b/base/applications/regedit/lang/pt-PT.rc similarity index 100% rename from reactos/base/applications/regedit/lang/pt-PT.rc rename to base/applications/regedit/lang/pt-PT.rc diff --git a/reactos/base/applications/regedit/lang/ru-RU.rc b/base/applications/regedit/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/regedit/lang/ru-RU.rc rename to base/applications/regedit/lang/ru-RU.rc diff --git a/reactos/base/applications/regedit/lang/sk-SK.rc b/base/applications/regedit/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/regedit/lang/sk-SK.rc rename to base/applications/regedit/lang/sk-SK.rc diff --git a/reactos/base/applications/regedit/lang/sl-SI.rc b/base/applications/regedit/lang/sl-SI.rc similarity index 100% rename from reactos/base/applications/regedit/lang/sl-SI.rc rename to base/applications/regedit/lang/sl-SI.rc diff --git a/reactos/base/applications/regedit/lang/sv-SE.rc b/base/applications/regedit/lang/sv-SE.rc similarity index 100% rename from reactos/base/applications/regedit/lang/sv-SE.rc rename to base/applications/regedit/lang/sv-SE.rc diff --git a/reactos/base/applications/regedit/lang/th-TH.rc b/base/applications/regedit/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/regedit/lang/th-TH.rc rename to base/applications/regedit/lang/th-TH.rc diff --git a/reactos/base/applications/regedit/lang/uk-UA.rc b/base/applications/regedit/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/regedit/lang/uk-UA.rc rename to base/applications/regedit/lang/uk-UA.rc diff --git a/reactos/base/applications/regedit/lang/zh-CN.rc b/base/applications/regedit/lang/zh-CN.rc similarity index 100% rename from reactos/base/applications/regedit/lang/zh-CN.rc rename to base/applications/regedit/lang/zh-CN.rc diff --git a/reactos/base/applications/regedit/listview.c b/base/applications/regedit/listview.c similarity index 100% rename from reactos/base/applications/regedit/listview.c rename to base/applications/regedit/listview.c diff --git a/reactos/base/applications/regedit/main.c b/base/applications/regedit/main.c similarity index 100% rename from reactos/base/applications/regedit/main.c rename to base/applications/regedit/main.c diff --git a/reactos/base/applications/regedit/main.h b/base/applications/regedit/main.h similarity index 100% rename from reactos/base/applications/regedit/main.h rename to base/applications/regedit/main.h diff --git a/reactos/base/applications/regedit/regedit.c b/base/applications/regedit/regedit.c similarity index 100% rename from reactos/base/applications/regedit/regedit.c rename to base/applications/regedit/regedit.c diff --git a/reactos/base/applications/regedit/regedit.h b/base/applications/regedit/regedit.h similarity index 100% rename from reactos/base/applications/regedit/regedit.h rename to base/applications/regedit/regedit.h diff --git a/reactos/base/applications/regedit/regedit.rbuild b/base/applications/regedit/regedit.rbuild similarity index 100% rename from reactos/base/applications/regedit/regedit.rbuild rename to base/applications/regedit/regedit.rbuild diff --git a/reactos/base/applications/regedit/regedit.rc b/base/applications/regedit/regedit.rc similarity index 100% rename from reactos/base/applications/regedit/regedit.rc rename to base/applications/regedit/regedit.rc diff --git a/reactos/base/applications/regedit/regproc.c b/base/applications/regedit/regproc.c similarity index 100% rename from reactos/base/applications/regedit/regproc.c rename to base/applications/regedit/regproc.c diff --git a/reactos/base/applications/regedit/regproc.h b/base/applications/regedit/regproc.h similarity index 100% rename from reactos/base/applications/regedit/regproc.h rename to base/applications/regedit/regproc.h diff --git a/reactos/base/applications/regedit/res/bin.ico b/base/applications/regedit/res/bin.ico similarity index 100% rename from reactos/base/applications/regedit/res/bin.ico rename to base/applications/regedit/res/bin.ico diff --git a/reactos/base/applications/regedit/res/computer.ico b/base/applications/regedit/res/computer.ico similarity index 100% rename from reactos/base/applications/regedit/res/computer.ico rename to base/applications/regedit/res/computer.ico diff --git a/reactos/base/applications/regedit/res/folder.ico b/base/applications/regedit/res/folder.ico similarity index 100% rename from reactos/base/applications/regedit/res/folder.ico rename to base/applications/regedit/res/folder.ico diff --git a/reactos/base/applications/regedit/res/folderopen.ico b/base/applications/regedit/res/folderopen.ico similarity index 100% rename from reactos/base/applications/regedit/res/folderopen.ico rename to base/applications/regedit/res/folderopen.ico diff --git a/reactos/base/applications/regedit/res/regedit.ico b/base/applications/regedit/res/regedit.ico similarity index 100% rename from reactos/base/applications/regedit/res/regedit.ico rename to base/applications/regedit/res/regedit.ico diff --git a/reactos/base/applications/regedit/res/string.ico b/base/applications/regedit/res/string.ico similarity index 100% rename from reactos/base/applications/regedit/res/string.ico rename to base/applications/regedit/res/string.ico diff --git a/reactos/base/applications/regedit/resource.h b/base/applications/regedit/resource.h similarity index 100% rename from reactos/base/applications/regedit/resource.h rename to base/applications/regedit/resource.h diff --git a/reactos/base/applications/regedit/rsrc.rc b/base/applications/regedit/rsrc.rc similarity index 100% rename from reactos/base/applications/regedit/rsrc.rc rename to base/applications/regedit/rsrc.rc diff --git a/reactos/base/applications/regedit/security.c b/base/applications/regedit/security.c similarity index 100% rename from reactos/base/applications/regedit/security.c rename to base/applications/regedit/security.c diff --git a/reactos/base/applications/regedit/security.h b/base/applications/regedit/security.h similarity index 100% rename from reactos/base/applications/regedit/security.h rename to base/applications/regedit/security.h diff --git a/reactos/base/applications/regedit/treeview.c b/base/applications/regedit/treeview.c similarity index 100% rename from reactos/base/applications/regedit/treeview.c rename to base/applications/regedit/treeview.c diff --git a/reactos/base/applications/regedt32/regedt32.c b/base/applications/regedt32/regedt32.c similarity index 100% rename from reactos/base/applications/regedt32/regedt32.c rename to base/applications/regedt32/regedt32.c diff --git a/reactos/base/applications/regedt32/regedt32.rbuild b/base/applications/regedt32/regedt32.rbuild similarity index 100% rename from reactos/base/applications/regedt32/regedt32.rbuild rename to base/applications/regedt32/regedt32.rbuild diff --git a/reactos/base/applications/regedt32/res/regedt32.ico b/base/applications/regedt32/res/regedt32.ico similarity index 100% rename from reactos/base/applications/regedt32/res/regedt32.ico rename to base/applications/regedt32/res/regedt32.ico diff --git a/reactos/base/applications/regedt32/resource.h b/base/applications/regedt32/resource.h similarity index 100% rename from reactos/base/applications/regedt32/resource.h rename to base/applications/regedt32/resource.h diff --git a/reactos/base/applications/regedt32/resource.rc b/base/applications/regedt32/resource.rc similarity index 100% rename from reactos/base/applications/regedt32/resource.rc rename to base/applications/regedt32/resource.rc diff --git a/reactos/base/applications/sc/control.c b/base/applications/sc/control.c similarity index 100% rename from reactos/base/applications/sc/control.c rename to base/applications/sc/control.c diff --git a/reactos/base/applications/sc/create.c b/base/applications/sc/create.c similarity index 100% rename from reactos/base/applications/sc/create.c rename to base/applications/sc/create.c diff --git a/reactos/base/applications/sc/delete.c b/base/applications/sc/delete.c similarity index 100% rename from reactos/base/applications/sc/delete.c rename to base/applications/sc/delete.c diff --git a/reactos/base/applications/sc/print.c b/base/applications/sc/print.c similarity index 100% rename from reactos/base/applications/sc/print.c rename to base/applications/sc/print.c diff --git a/reactos/base/applications/sc/query.c b/base/applications/sc/query.c similarity index 100% rename from reactos/base/applications/sc/query.c rename to base/applications/sc/query.c diff --git a/reactos/base/applications/sc/sc.c b/base/applications/sc/sc.c similarity index 100% rename from reactos/base/applications/sc/sc.c rename to base/applications/sc/sc.c diff --git a/reactos/base/applications/sc/sc.h b/base/applications/sc/sc.h similarity index 100% rename from reactos/base/applications/sc/sc.h rename to base/applications/sc/sc.h diff --git a/reactos/base/applications/sc/sc.rbuild b/base/applications/sc/sc.rbuild similarity index 100% rename from reactos/base/applications/sc/sc.rbuild rename to base/applications/sc/sc.rbuild diff --git a/reactos/base/applications/sc/sc.rc b/base/applications/sc/sc.rc similarity index 100% rename from reactos/base/applications/sc/sc.rc rename to base/applications/sc/sc.rc diff --git a/reactos/base/applications/sc/start.c b/base/applications/sc/start.c similarity index 100% rename from reactos/base/applications/sc/start.c rename to base/applications/sc/start.c diff --git a/reactos/base/applications/sc/usage.c b/base/applications/sc/usage.c similarity index 100% rename from reactos/base/applications/sc/usage.c rename to base/applications/sc/usage.c diff --git a/reactos/base/applications/screensavers/3dtext/3dtext.c b/base/applications/screensavers/3dtext/3dtext.c similarity index 100% rename from reactos/base/applications/screensavers/3dtext/3dtext.c rename to base/applications/screensavers/3dtext/3dtext.c diff --git a/reactos/base/applications/screensavers/3dtext/3dtext.h b/base/applications/screensavers/3dtext/3dtext.h similarity index 100% rename from reactos/base/applications/screensavers/3dtext/3dtext.h rename to base/applications/screensavers/3dtext/3dtext.h diff --git a/reactos/base/applications/screensavers/3dtext/3dtext.rbuild b/base/applications/screensavers/3dtext/3dtext.rbuild similarity index 100% rename from reactos/base/applications/screensavers/3dtext/3dtext.rbuild rename to base/applications/screensavers/3dtext/3dtext.rbuild diff --git a/reactos/base/applications/screensavers/3dtext/lang/bg-BG.rc b/base/applications/screensavers/3dtext/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/bg-BG.rc rename to base/applications/screensavers/3dtext/lang/bg-BG.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/de-DE.rc b/base/applications/screensavers/3dtext/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/de-DE.rc rename to base/applications/screensavers/3dtext/lang/de-DE.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/el-GR.rc b/base/applications/screensavers/3dtext/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/el-GR.rc rename to base/applications/screensavers/3dtext/lang/el-GR.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/en-US.rc b/base/applications/screensavers/3dtext/lang/en-US.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/en-US.rc rename to base/applications/screensavers/3dtext/lang/en-US.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/es-ES.rc b/base/applications/screensavers/3dtext/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/es-ES.rc rename to base/applications/screensavers/3dtext/lang/es-ES.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/eu-ES.rc b/base/applications/screensavers/3dtext/lang/eu-ES.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/eu-ES.rc rename to base/applications/screensavers/3dtext/lang/eu-ES.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/fr-FR.rc b/base/applications/screensavers/3dtext/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/fr-FR.rc rename to base/applications/screensavers/3dtext/lang/fr-FR.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/it-IT.rc b/base/applications/screensavers/3dtext/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/it-IT.rc rename to base/applications/screensavers/3dtext/lang/it-IT.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/ko-KR.rc b/base/applications/screensavers/3dtext/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/ko-KR.rc rename to base/applications/screensavers/3dtext/lang/ko-KR.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/lt-LT.rc b/base/applications/screensavers/3dtext/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/lt-LT.rc rename to base/applications/screensavers/3dtext/lang/lt-LT.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/no-NO.rc b/base/applications/screensavers/3dtext/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/no-NO.rc rename to base/applications/screensavers/3dtext/lang/no-NO.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/pl-PL.rc b/base/applications/screensavers/3dtext/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/pl-PL.rc rename to base/applications/screensavers/3dtext/lang/pl-PL.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/ru-RU.rc b/base/applications/screensavers/3dtext/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/ru-RU.rc rename to base/applications/screensavers/3dtext/lang/ru-RU.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/sk-SK.rc b/base/applications/screensavers/3dtext/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/sk-SK.rc rename to base/applications/screensavers/3dtext/lang/sk-SK.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/uk-UA.rc b/base/applications/screensavers/3dtext/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/lang/uk-UA.rc rename to base/applications/screensavers/3dtext/lang/uk-UA.rc diff --git a/reactos/base/applications/screensavers/3dtext/resource.h b/base/applications/screensavers/3dtext/resource.h similarity index 100% rename from reactos/base/applications/screensavers/3dtext/resource.h rename to base/applications/screensavers/3dtext/resource.h diff --git a/reactos/base/applications/screensavers/3dtext/rsrc.rc b/base/applications/screensavers/3dtext/rsrc.rc similarity index 100% rename from reactos/base/applications/screensavers/3dtext/rsrc.rc rename to base/applications/screensavers/3dtext/rsrc.rc diff --git a/reactos/base/applications/screensavers/3dtext/settings.c b/base/applications/screensavers/3dtext/settings.c similarity index 100% rename from reactos/base/applications/screensavers/3dtext/settings.c rename to base/applications/screensavers/3dtext/settings.c diff --git a/reactos/base/applications/screensavers/logon/lang/bg-BG.rc b/base/applications/screensavers/logon/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/bg-BG.rc rename to base/applications/screensavers/logon/lang/bg-BG.rc diff --git a/reactos/base/applications/screensavers/logon/lang/de-DE.rc b/base/applications/screensavers/logon/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/de-DE.rc rename to base/applications/screensavers/logon/lang/de-DE.rc diff --git a/reactos/base/applications/screensavers/logon/lang/el-GR.rc b/base/applications/screensavers/logon/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/el-GR.rc rename to base/applications/screensavers/logon/lang/el-GR.rc diff --git a/reactos/base/applications/screensavers/logon/lang/en-US.rc b/base/applications/screensavers/logon/lang/en-US.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/en-US.rc rename to base/applications/screensavers/logon/lang/en-US.rc diff --git a/reactos/base/applications/screensavers/logon/lang/es-ES.rc b/base/applications/screensavers/logon/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/es-ES.rc rename to base/applications/screensavers/logon/lang/es-ES.rc diff --git a/reactos/base/applications/screensavers/logon/lang/eu-ES.rc b/base/applications/screensavers/logon/lang/eu-ES.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/eu-ES.rc rename to base/applications/screensavers/logon/lang/eu-ES.rc diff --git a/reactos/base/applications/screensavers/logon/lang/fr-FR.rc b/base/applications/screensavers/logon/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/fr-FR.rc rename to base/applications/screensavers/logon/lang/fr-FR.rc diff --git a/reactos/base/applications/screensavers/logon/lang/it-IT.rc b/base/applications/screensavers/logon/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/it-IT.rc rename to base/applications/screensavers/logon/lang/it-IT.rc diff --git a/reactos/base/applications/screensavers/logon/lang/ko-KR.rc b/base/applications/screensavers/logon/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/ko-KR.rc rename to base/applications/screensavers/logon/lang/ko-KR.rc diff --git a/reactos/base/applications/screensavers/logon/lang/lt-LT.rc b/base/applications/screensavers/logon/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/lt-LT.rc rename to base/applications/screensavers/logon/lang/lt-LT.rc diff --git a/reactos/base/applications/screensavers/logon/lang/nl-NL.rc b/base/applications/screensavers/logon/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/nl-NL.rc rename to base/applications/screensavers/logon/lang/nl-NL.rc diff --git a/reactos/base/applications/screensavers/logon/lang/no-NO.rc b/base/applications/screensavers/logon/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/no-NO.rc rename to base/applications/screensavers/logon/lang/no-NO.rc diff --git a/reactos/base/applications/screensavers/logon/lang/pl-PL.rc b/base/applications/screensavers/logon/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/pl-PL.rc rename to base/applications/screensavers/logon/lang/pl-PL.rc diff --git a/reactos/base/applications/screensavers/logon/lang/ru-RU.rc b/base/applications/screensavers/logon/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/ru-RU.rc rename to base/applications/screensavers/logon/lang/ru-RU.rc diff --git a/reactos/base/applications/screensavers/logon/lang/sk-SK.rc b/base/applications/screensavers/logon/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/sk-SK.rc rename to base/applications/screensavers/logon/lang/sk-SK.rc diff --git a/reactos/base/applications/screensavers/logon/lang/uk-UA.rc b/base/applications/screensavers/logon/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/lang/uk-UA.rc rename to base/applications/screensavers/logon/lang/uk-UA.rc diff --git a/reactos/base/applications/screensavers/logon/logon.c b/base/applications/screensavers/logon/logon.c similarity index 100% rename from reactos/base/applications/screensavers/logon/logon.c rename to base/applications/screensavers/logon/logon.c diff --git a/reactos/base/applications/screensavers/logon/logon.rbuild b/base/applications/screensavers/logon/logon.rbuild similarity index 100% rename from reactos/base/applications/screensavers/logon/logon.rbuild rename to base/applications/screensavers/logon/logon.rbuild diff --git a/reactos/base/applications/screensavers/logon/logon.rc b/base/applications/screensavers/logon/logon.rc similarity index 100% rename from reactos/base/applications/screensavers/logon/logon.rc rename to base/applications/screensavers/logon/logon.rc diff --git a/reactos/base/applications/screensavers/logon/res/0.bmp b/base/applications/screensavers/logon/res/0.bmp similarity index 100% rename from reactos/base/applications/screensavers/logon/res/0.bmp rename to base/applications/screensavers/logon/res/0.bmp diff --git a/reactos/base/applications/screensavers/logon/res/1.bmp b/base/applications/screensavers/logon/res/1.bmp similarity index 100% rename from reactos/base/applications/screensavers/logon/res/1.bmp rename to base/applications/screensavers/logon/res/1.bmp diff --git a/reactos/base/applications/screensavers/logon/resource.h b/base/applications/screensavers/logon/resource.h similarity index 100% rename from reactos/base/applications/screensavers/logon/resource.h rename to base/applications/screensavers/logon/resource.h diff --git a/reactos/base/applications/screensavers/screensavers.rbuild b/base/applications/screensavers/screensavers.rbuild similarity index 100% rename from reactos/base/applications/screensavers/screensavers.rbuild rename to base/applications/screensavers/screensavers.rbuild diff --git a/reactos/base/applications/shutdown/lang/bg-BG.rc b/base/applications/shutdown/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/bg-BG.rc rename to base/applications/shutdown/lang/bg-BG.rc diff --git a/reactos/base/applications/shutdown/lang/de-DE.rc b/base/applications/shutdown/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/de-DE.rc rename to base/applications/shutdown/lang/de-DE.rc diff --git a/reactos/base/applications/shutdown/lang/el-GR.rc b/base/applications/shutdown/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/el-GR.rc rename to base/applications/shutdown/lang/el-GR.rc diff --git a/reactos/base/applications/shutdown/lang/en-US.rc b/base/applications/shutdown/lang/en-US.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/en-US.rc rename to base/applications/shutdown/lang/en-US.rc diff --git a/reactos/base/applications/shutdown/lang/fr-FR.rc b/base/applications/shutdown/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/fr-FR.rc rename to base/applications/shutdown/lang/fr-FR.rc diff --git a/reactos/base/applications/shutdown/lang/it-IT.rc b/base/applications/shutdown/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/it-IT.rc rename to base/applications/shutdown/lang/it-IT.rc diff --git a/reactos/base/applications/shutdown/lang/ko-KR.rc b/base/applications/shutdown/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/ko-KR.rc rename to base/applications/shutdown/lang/ko-KR.rc diff --git a/reactos/base/applications/shutdown/lang/lt-LT.rc b/base/applications/shutdown/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/lt-LT.rc rename to base/applications/shutdown/lang/lt-LT.rc diff --git a/reactos/base/applications/shutdown/lang/no-NO.rc b/base/applications/shutdown/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/no-NO.rc rename to base/applications/shutdown/lang/no-NO.rc diff --git a/reactos/base/applications/shutdown/lang/pl-PL.rc b/base/applications/shutdown/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/pl-PL.rc rename to base/applications/shutdown/lang/pl-PL.rc diff --git a/reactos/base/applications/shutdown/lang/ru-RU.rc b/base/applications/shutdown/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/ru-RU.rc rename to base/applications/shutdown/lang/ru-RU.rc diff --git a/reactos/base/applications/shutdown/lang/sk-SK.rc b/base/applications/shutdown/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/sk-SK.rc rename to base/applications/shutdown/lang/sk-SK.rc diff --git a/reactos/base/applications/shutdown/lang/uk-UA.rc b/base/applications/shutdown/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/uk-UA.rc rename to base/applications/shutdown/lang/uk-UA.rc diff --git a/reactos/base/applications/shutdown/misc.c b/base/applications/shutdown/misc.c similarity index 100% rename from reactos/base/applications/shutdown/misc.c rename to base/applications/shutdown/misc.c diff --git a/reactos/base/applications/shutdown/precomp.h b/base/applications/shutdown/precomp.h similarity index 100% rename from reactos/base/applications/shutdown/precomp.h rename to base/applications/shutdown/precomp.h diff --git a/reactos/base/applications/shutdown/resource.h b/base/applications/shutdown/resource.h similarity index 100% rename from reactos/base/applications/shutdown/resource.h rename to base/applications/shutdown/resource.h diff --git a/reactos/base/applications/shutdown/rsrc.rc b/base/applications/shutdown/rsrc.rc similarity index 100% rename from reactos/base/applications/shutdown/rsrc.rc rename to base/applications/shutdown/rsrc.rc diff --git a/reactos/base/applications/shutdown/shutdown.c b/base/applications/shutdown/shutdown.c similarity index 100% rename from reactos/base/applications/shutdown/shutdown.c rename to base/applications/shutdown/shutdown.c diff --git a/reactos/base/applications/shutdown/shutdown.rbuild b/base/applications/shutdown/shutdown.rbuild similarity index 100% rename from reactos/base/applications/shutdown/shutdown.rbuild rename to base/applications/shutdown/shutdown.rbuild diff --git a/reactos/base/applications/shutdown/shutdown.rc b/base/applications/shutdown/shutdown.rc similarity index 100% rename from reactos/base/applications/shutdown/shutdown.rc rename to base/applications/shutdown/shutdown.rc diff --git a/reactos/base/applications/sndvol32/lang/bg-BG.rc b/base/applications/sndvol32/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/bg-BG.rc rename to base/applications/sndvol32/lang/bg-BG.rc diff --git a/reactos/base/applications/sndvol32/lang/cs-CZ.rc b/base/applications/sndvol32/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/cs-CZ.rc rename to base/applications/sndvol32/lang/cs-CZ.rc diff --git a/reactos/base/applications/sndvol32/lang/de-DE.rc b/base/applications/sndvol32/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/de-DE.rc rename to base/applications/sndvol32/lang/de-DE.rc diff --git a/reactos/base/applications/sndvol32/lang/el-GR.rc b/base/applications/sndvol32/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/el-GR.rc rename to base/applications/sndvol32/lang/el-GR.rc diff --git a/reactos/base/applications/sndvol32/lang/en-US.rc b/base/applications/sndvol32/lang/en-US.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/en-US.rc rename to base/applications/sndvol32/lang/en-US.rc diff --git a/reactos/base/applications/sndvol32/lang/es-ES.rc b/base/applications/sndvol32/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/es-ES.rc rename to base/applications/sndvol32/lang/es-ES.rc diff --git a/reactos/base/applications/sndvol32/lang/fr-FR.rc b/base/applications/sndvol32/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/fr-FR.rc rename to base/applications/sndvol32/lang/fr-FR.rc diff --git a/reactos/base/applications/sndvol32/lang/hu-HU.rc b/base/applications/sndvol32/lang/hu-HU.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/hu-HU.rc rename to base/applications/sndvol32/lang/hu-HU.rc diff --git a/reactos/base/applications/sndvol32/lang/id-ID.rc b/base/applications/sndvol32/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/id-ID.rc rename to base/applications/sndvol32/lang/id-ID.rc diff --git a/reactos/base/applications/sndvol32/lang/it-IT.rc b/base/applications/sndvol32/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/it-IT.rc rename to base/applications/sndvol32/lang/it-IT.rc diff --git a/reactos/base/applications/sndvol32/lang/ja-JP.rc b/base/applications/sndvol32/lang/ja-JP.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/ja-JP.rc rename to base/applications/sndvol32/lang/ja-JP.rc diff --git a/reactos/base/applications/sndvol32/lang/ko-KR.rc b/base/applications/sndvol32/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/ko-KR.rc rename to base/applications/sndvol32/lang/ko-KR.rc diff --git a/reactos/base/applications/sndvol32/lang/lt-LT.rc b/base/applications/sndvol32/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/lt-LT.rc rename to base/applications/sndvol32/lang/lt-LT.rc diff --git a/reactos/base/applications/sndvol32/lang/nl-NL.rc b/base/applications/sndvol32/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/nl-NL.rc rename to base/applications/sndvol32/lang/nl-NL.rc diff --git a/reactos/base/applications/sndvol32/lang/no-NO.rc b/base/applications/sndvol32/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/no-NO.rc rename to base/applications/sndvol32/lang/no-NO.rc diff --git a/reactos/base/applications/sndvol32/lang/pl-PL.rc b/base/applications/sndvol32/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/pl-PL.rc rename to base/applications/sndvol32/lang/pl-PL.rc diff --git a/reactos/base/applications/sndvol32/lang/pt-BR.rc b/base/applications/sndvol32/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/pt-BR.rc rename to base/applications/sndvol32/lang/pt-BR.rc diff --git a/reactos/base/applications/sndvol32/lang/ru-RU.rc b/base/applications/sndvol32/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/ru-RU.rc rename to base/applications/sndvol32/lang/ru-RU.rc diff --git a/reactos/base/applications/sndvol32/lang/sk-SK.rc b/base/applications/sndvol32/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/sk-SK.rc rename to base/applications/sndvol32/lang/sk-SK.rc diff --git a/reactos/base/applications/sndvol32/lang/sv-SE.rc b/base/applications/sndvol32/lang/sv-SE.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/sv-SE.rc rename to base/applications/sndvol32/lang/sv-SE.rc diff --git a/reactos/base/applications/sndvol32/lang/th-TH.rc b/base/applications/sndvol32/lang/th-TH.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/th-TH.rc rename to base/applications/sndvol32/lang/th-TH.rc diff --git a/reactos/base/applications/sndvol32/lang/uk-UA.rc b/base/applications/sndvol32/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/uk-UA.rc rename to base/applications/sndvol32/lang/uk-UA.rc diff --git a/reactos/base/applications/sndvol32/misc.c b/base/applications/sndvol32/misc.c similarity index 100% rename from reactos/base/applications/sndvol32/misc.c rename to base/applications/sndvol32/misc.c diff --git a/reactos/base/applications/sndvol32/mixer.c b/base/applications/sndvol32/mixer.c similarity index 100% rename from reactos/base/applications/sndvol32/mixer.c rename to base/applications/sndvol32/mixer.c diff --git a/reactos/base/applications/sndvol32/resources.h b/base/applications/sndvol32/resources.h similarity index 100% rename from reactos/base/applications/sndvol32/resources.h rename to base/applications/sndvol32/resources.h diff --git a/reactos/base/applications/sndvol32/resources/sndvol32.ico b/base/applications/sndvol32/resources/sndvol32.ico similarity index 100% rename from reactos/base/applications/sndvol32/resources/sndvol32.ico rename to base/applications/sndvol32/resources/sndvol32.ico diff --git a/reactos/base/applications/sndvol32/rsrc.rc b/base/applications/sndvol32/rsrc.rc similarity index 100% rename from reactos/base/applications/sndvol32/rsrc.rc rename to base/applications/sndvol32/rsrc.rc diff --git a/reactos/base/applications/sndvol32/sndvol32.c b/base/applications/sndvol32/sndvol32.c similarity index 100% rename from reactos/base/applications/sndvol32/sndvol32.c rename to base/applications/sndvol32/sndvol32.c diff --git a/reactos/base/applications/sndvol32/sndvol32.h b/base/applications/sndvol32/sndvol32.h similarity index 100% rename from reactos/base/applications/sndvol32/sndvol32.h rename to base/applications/sndvol32/sndvol32.h diff --git a/reactos/base/applications/sndvol32/sndvol32.rbuild b/base/applications/sndvol32/sndvol32.rbuild similarity index 100% rename from reactos/base/applications/sndvol32/sndvol32.rbuild rename to base/applications/sndvol32/sndvol32.rbuild diff --git a/reactos/base/applications/sndvol32/sndvol32.rc b/base/applications/sndvol32/sndvol32.rc similarity index 100% rename from reactos/base/applications/sndvol32/sndvol32.rc rename to base/applications/sndvol32/sndvol32.rc diff --git a/reactos/base/applications/taskmgr/about.c b/base/applications/taskmgr/about.c similarity index 100% rename from reactos/base/applications/taskmgr/about.c rename to base/applications/taskmgr/about.c diff --git a/reactos/base/applications/taskmgr/about.h b/base/applications/taskmgr/about.h similarity index 100% rename from reactos/base/applications/taskmgr/about.h rename to base/applications/taskmgr/about.h diff --git a/reactos/base/applications/taskmgr/affinity.c b/base/applications/taskmgr/affinity.c similarity index 100% rename from reactos/base/applications/taskmgr/affinity.c rename to base/applications/taskmgr/affinity.c diff --git a/reactos/base/applications/taskmgr/affinity.h b/base/applications/taskmgr/affinity.h similarity index 100% rename from reactos/base/applications/taskmgr/affinity.h rename to base/applications/taskmgr/affinity.h diff --git a/reactos/base/applications/taskmgr/applpage.c b/base/applications/taskmgr/applpage.c similarity index 100% rename from reactos/base/applications/taskmgr/applpage.c rename to base/applications/taskmgr/applpage.c diff --git a/reactos/base/applications/taskmgr/applpage.h b/base/applications/taskmgr/applpage.h similarity index 100% rename from reactos/base/applications/taskmgr/applpage.h rename to base/applications/taskmgr/applpage.h diff --git a/reactos/base/applications/taskmgr/column.c b/base/applications/taskmgr/column.c similarity index 100% rename from reactos/base/applications/taskmgr/column.c rename to base/applications/taskmgr/column.c diff --git a/reactos/base/applications/taskmgr/column.h b/base/applications/taskmgr/column.h similarity index 100% rename from reactos/base/applications/taskmgr/column.h rename to base/applications/taskmgr/column.h diff --git a/reactos/base/applications/taskmgr/dbgchnl.c b/base/applications/taskmgr/dbgchnl.c similarity index 100% rename from reactos/base/applications/taskmgr/dbgchnl.c rename to base/applications/taskmgr/dbgchnl.c diff --git a/reactos/base/applications/taskmgr/dbgchnl.h b/base/applications/taskmgr/dbgchnl.h similarity index 100% rename from reactos/base/applications/taskmgr/dbgchnl.h rename to base/applications/taskmgr/dbgchnl.h diff --git a/reactos/base/applications/taskmgr/debug.c b/base/applications/taskmgr/debug.c similarity index 100% rename from reactos/base/applications/taskmgr/debug.c rename to base/applications/taskmgr/debug.c diff --git a/reactos/base/applications/taskmgr/debug.h b/base/applications/taskmgr/debug.h similarity index 100% rename from reactos/base/applications/taskmgr/debug.h rename to base/applications/taskmgr/debug.h diff --git a/reactos/base/applications/taskmgr/endproc.c b/base/applications/taskmgr/endproc.c similarity index 100% rename from reactos/base/applications/taskmgr/endproc.c rename to base/applications/taskmgr/endproc.c diff --git a/reactos/base/applications/taskmgr/endproc.h b/base/applications/taskmgr/endproc.h similarity index 100% rename from reactos/base/applications/taskmgr/endproc.h rename to base/applications/taskmgr/endproc.h diff --git a/reactos/base/applications/taskmgr/graph.c b/base/applications/taskmgr/graph.c similarity index 100% rename from reactos/base/applications/taskmgr/graph.c rename to base/applications/taskmgr/graph.c diff --git a/reactos/base/applications/taskmgr/graph.h b/base/applications/taskmgr/graph.h similarity index 100% rename from reactos/base/applications/taskmgr/graph.h rename to base/applications/taskmgr/graph.h diff --git a/reactos/base/applications/taskmgr/graphctl.c b/base/applications/taskmgr/graphctl.c similarity index 100% rename from reactos/base/applications/taskmgr/graphctl.c rename to base/applications/taskmgr/graphctl.c diff --git a/reactos/base/applications/taskmgr/graphctl.h b/base/applications/taskmgr/graphctl.h similarity index 100% rename from reactos/base/applications/taskmgr/graphctl.h rename to base/applications/taskmgr/graphctl.h diff --git a/reactos/base/applications/taskmgr/lang/bg-BG.rc b/base/applications/taskmgr/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/bg-BG.rc rename to base/applications/taskmgr/lang/bg-BG.rc diff --git a/reactos/base/applications/taskmgr/lang/cs-CZ.rc b/base/applications/taskmgr/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/cs-CZ.rc rename to base/applications/taskmgr/lang/cs-CZ.rc diff --git a/reactos/base/applications/taskmgr/lang/da-DK.rc b/base/applications/taskmgr/lang/da-DK.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/da-DK.rc rename to base/applications/taskmgr/lang/da-DK.rc diff --git a/reactos/base/applications/taskmgr/lang/de-DE.rc b/base/applications/taskmgr/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/de-DE.rc rename to base/applications/taskmgr/lang/de-DE.rc diff --git a/reactos/base/applications/taskmgr/lang/el-GR.rc b/base/applications/taskmgr/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/el-GR.rc rename to base/applications/taskmgr/lang/el-GR.rc diff --git a/reactos/base/applications/taskmgr/lang/en-US.rc b/base/applications/taskmgr/lang/en-US.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/en-US.rc rename to base/applications/taskmgr/lang/en-US.rc diff --git a/reactos/base/applications/taskmgr/lang/es-ES.rc b/base/applications/taskmgr/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/es-ES.rc rename to base/applications/taskmgr/lang/es-ES.rc diff --git a/reactos/base/applications/taskmgr/lang/fr-FR.rc b/base/applications/taskmgr/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/fr-FR.rc rename to base/applications/taskmgr/lang/fr-FR.rc diff --git a/reactos/base/applications/taskmgr/lang/hu-HU.rc b/base/applications/taskmgr/lang/hu-HU.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/hu-HU.rc rename to base/applications/taskmgr/lang/hu-HU.rc diff --git a/reactos/base/applications/taskmgr/lang/id-ID.rc b/base/applications/taskmgr/lang/id-ID.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/id-ID.rc rename to base/applications/taskmgr/lang/id-ID.rc diff --git a/reactos/base/applications/taskmgr/lang/it-IT.rc b/base/applications/taskmgr/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/it-IT.rc rename to base/applications/taskmgr/lang/it-IT.rc diff --git a/reactos/base/applications/taskmgr/lang/ja-JP.rc b/base/applications/taskmgr/lang/ja-JP.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/ja-JP.rc rename to base/applications/taskmgr/lang/ja-JP.rc diff --git a/reactos/base/applications/taskmgr/lang/ko-KR.rc b/base/applications/taskmgr/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/ko-KR.rc rename to base/applications/taskmgr/lang/ko-KR.rc diff --git a/reactos/base/applications/taskmgr/lang/nl-NL.rc b/base/applications/taskmgr/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/nl-NL.rc rename to base/applications/taskmgr/lang/nl-NL.rc diff --git a/reactos/base/applications/taskmgr/lang/no-NO.rc b/base/applications/taskmgr/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/no-NO.rc rename to base/applications/taskmgr/lang/no-NO.rc diff --git a/reactos/base/applications/taskmgr/lang/pl-PL.rc b/base/applications/taskmgr/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/pl-PL.rc rename to base/applications/taskmgr/lang/pl-PL.rc diff --git a/reactos/base/applications/taskmgr/lang/pt-BR.rc b/base/applications/taskmgr/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/pt-BR.rc rename to base/applications/taskmgr/lang/pt-BR.rc diff --git a/reactos/base/applications/taskmgr/lang/ru-RU.rc b/base/applications/taskmgr/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/ru-RU.rc rename to base/applications/taskmgr/lang/ru-RU.rc diff --git a/reactos/base/applications/taskmgr/lang/sk-SK.rc b/base/applications/taskmgr/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/sk-SK.rc rename to base/applications/taskmgr/lang/sk-SK.rc diff --git a/reactos/base/applications/taskmgr/lang/sv-SE.rc b/base/applications/taskmgr/lang/sv-SE.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/sv-SE.rc rename to base/applications/taskmgr/lang/sv-SE.rc diff --git a/reactos/base/applications/taskmgr/lang/uk-UA.rc b/base/applications/taskmgr/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/uk-UA.rc rename to base/applications/taskmgr/lang/uk-UA.rc diff --git a/reactos/base/applications/taskmgr/lang/zh-CN.rc b/base/applications/taskmgr/lang/zh-CN.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/zh-CN.rc rename to base/applications/taskmgr/lang/zh-CN.rc diff --git a/reactos/base/applications/taskmgr/optnmenu.c b/base/applications/taskmgr/optnmenu.c similarity index 100% rename from reactos/base/applications/taskmgr/optnmenu.c rename to base/applications/taskmgr/optnmenu.c diff --git a/reactos/base/applications/taskmgr/optnmenu.h b/base/applications/taskmgr/optnmenu.h similarity index 100% rename from reactos/base/applications/taskmgr/optnmenu.h rename to base/applications/taskmgr/optnmenu.h diff --git a/reactos/base/applications/taskmgr/perfdata.c b/base/applications/taskmgr/perfdata.c similarity index 100% rename from reactos/base/applications/taskmgr/perfdata.c rename to base/applications/taskmgr/perfdata.c diff --git a/reactos/base/applications/taskmgr/perfdata.h b/base/applications/taskmgr/perfdata.h similarity index 100% rename from reactos/base/applications/taskmgr/perfdata.h rename to base/applications/taskmgr/perfdata.h diff --git a/reactos/base/applications/taskmgr/perfpage.c b/base/applications/taskmgr/perfpage.c similarity index 100% rename from reactos/base/applications/taskmgr/perfpage.c rename to base/applications/taskmgr/perfpage.c diff --git a/reactos/base/applications/taskmgr/perfpage.h b/base/applications/taskmgr/perfpage.h similarity index 100% rename from reactos/base/applications/taskmgr/perfpage.h rename to base/applications/taskmgr/perfpage.h diff --git a/reactos/base/applications/taskmgr/precomp.h b/base/applications/taskmgr/precomp.h similarity index 100% rename from reactos/base/applications/taskmgr/precomp.h rename to base/applications/taskmgr/precomp.h diff --git a/reactos/base/applications/taskmgr/priority.c b/base/applications/taskmgr/priority.c similarity index 100% rename from reactos/base/applications/taskmgr/priority.c rename to base/applications/taskmgr/priority.c diff --git a/reactos/base/applications/taskmgr/priority.h b/base/applications/taskmgr/priority.h similarity index 100% rename from reactos/base/applications/taskmgr/priority.h rename to base/applications/taskmgr/priority.h diff --git a/reactos/base/applications/taskmgr/proclist.c b/base/applications/taskmgr/proclist.c similarity index 100% rename from reactos/base/applications/taskmgr/proclist.c rename to base/applications/taskmgr/proclist.c diff --git a/reactos/base/applications/taskmgr/proclist.h b/base/applications/taskmgr/proclist.h similarity index 100% rename from reactos/base/applications/taskmgr/proclist.h rename to base/applications/taskmgr/proclist.h diff --git a/reactos/base/applications/taskmgr/procpage.c b/base/applications/taskmgr/procpage.c similarity index 100% rename from reactos/base/applications/taskmgr/procpage.c rename to base/applications/taskmgr/procpage.c diff --git a/reactos/base/applications/taskmgr/procpage.h b/base/applications/taskmgr/procpage.h similarity index 100% rename from reactos/base/applications/taskmgr/procpage.h rename to base/applications/taskmgr/procpage.h diff --git a/reactos/base/applications/taskmgr/res/taskmgr.ico b/base/applications/taskmgr/res/taskmgr.ico similarity index 100% rename from reactos/base/applications/taskmgr/res/taskmgr.ico rename to base/applications/taskmgr/res/taskmgr.ico diff --git a/reactos/base/applications/taskmgr/res/trayicon.bmp b/base/applications/taskmgr/res/trayicon.bmp similarity index 100% rename from reactos/base/applications/taskmgr/res/trayicon.bmp rename to base/applications/taskmgr/res/trayicon.bmp diff --git a/reactos/base/applications/taskmgr/res/traymask.bmp b/base/applications/taskmgr/res/traymask.bmp similarity index 100% rename from reactos/base/applications/taskmgr/res/traymask.bmp rename to base/applications/taskmgr/res/traymask.bmp diff --git a/reactos/base/applications/taskmgr/res/window.ico b/base/applications/taskmgr/res/window.ico similarity index 100% rename from reactos/base/applications/taskmgr/res/window.ico rename to base/applications/taskmgr/res/window.ico diff --git a/reactos/base/applications/taskmgr/res/windowsm.ico b/base/applications/taskmgr/res/windowsm.ico similarity index 100% rename from reactos/base/applications/taskmgr/res/windowsm.ico rename to base/applications/taskmgr/res/windowsm.ico diff --git a/reactos/base/applications/taskmgr/resource.h b/base/applications/taskmgr/resource.h similarity index 100% rename from reactos/base/applications/taskmgr/resource.h rename to base/applications/taskmgr/resource.h diff --git a/reactos/base/applications/taskmgr/rsrc.rc b/base/applications/taskmgr/rsrc.rc similarity index 100% rename from reactos/base/applications/taskmgr/rsrc.rc rename to base/applications/taskmgr/rsrc.rc diff --git a/reactos/base/applications/taskmgr/run.c b/base/applications/taskmgr/run.c similarity index 100% rename from reactos/base/applications/taskmgr/run.c rename to base/applications/taskmgr/run.c diff --git a/reactos/base/applications/taskmgr/run.h b/base/applications/taskmgr/run.h similarity index 100% rename from reactos/base/applications/taskmgr/run.h rename to base/applications/taskmgr/run.h diff --git a/reactos/base/applications/taskmgr/taskmgr.c b/base/applications/taskmgr/taskmgr.c similarity index 100% rename from reactos/base/applications/taskmgr/taskmgr.c rename to base/applications/taskmgr/taskmgr.c diff --git a/reactos/base/applications/taskmgr/taskmgr.h b/base/applications/taskmgr/taskmgr.h similarity index 100% rename from reactos/base/applications/taskmgr/taskmgr.h rename to base/applications/taskmgr/taskmgr.h diff --git a/reactos/base/applications/taskmgr/taskmgr.rbuild b/base/applications/taskmgr/taskmgr.rbuild similarity index 100% rename from reactos/base/applications/taskmgr/taskmgr.rbuild rename to base/applications/taskmgr/taskmgr.rbuild diff --git a/reactos/base/applications/taskmgr/taskmgr.rc b/base/applications/taskmgr/taskmgr.rc similarity index 100% rename from reactos/base/applications/taskmgr/taskmgr.rc rename to base/applications/taskmgr/taskmgr.rc diff --git a/reactos/base/applications/taskmgr/trayicon.c b/base/applications/taskmgr/trayicon.c similarity index 100% rename from reactos/base/applications/taskmgr/trayicon.c rename to base/applications/taskmgr/trayicon.c diff --git a/reactos/base/applications/taskmgr/trayicon.h b/base/applications/taskmgr/trayicon.h similarity index 100% rename from reactos/base/applications/taskmgr/trayicon.h rename to base/applications/taskmgr/trayicon.h diff --git a/reactos/base/applications/tsclient/MissTosca.sln b/base/applications/tsclient/MissTosca.sln similarity index 100% rename from reactos/base/applications/tsclient/MissTosca.sln rename to base/applications/tsclient/MissTosca.sln diff --git a/reactos/base/applications/tsclient/mstsc/mstsc.cpp b/base/applications/tsclient/mstsc/mstsc.cpp similarity index 100% rename from reactos/base/applications/tsclient/mstsc/mstsc.cpp rename to base/applications/tsclient/mstsc/mstsc.cpp diff --git a/reactos/base/applications/tsclient/mstsc/mstsc.vcproj b/base/applications/tsclient/mstsc/mstsc.vcproj similarity index 100% rename from reactos/base/applications/tsclient/mstsc/mstsc.vcproj rename to base/applications/tsclient/mstsc/mstsc.vcproj diff --git a/reactos/base/applications/tsclient/mstsc/stdafx.cpp b/base/applications/tsclient/mstsc/stdafx.cpp similarity index 100% rename from reactos/base/applications/tsclient/mstsc/stdafx.cpp rename to base/applications/tsclient/mstsc/stdafx.cpp diff --git a/reactos/base/applications/tsclient/mstsc/stdafx.h b/base/applications/tsclient/mstsc/stdafx.h similarity index 100% rename from reactos/base/applications/tsclient/mstsc/stdafx.h rename to base/applications/tsclient/mstsc/stdafx.h diff --git a/reactos/base/applications/tsclient/mstscax/mstscax.cpp b/base/applications/tsclient/mstscax/mstscax.cpp similarity index 100% rename from reactos/base/applications/tsclient/mstscax/mstscax.cpp rename to base/applications/tsclient/mstscax/mstscax.cpp diff --git a/reactos/base/applications/tsclient/mstscax/mstscax.vcproj b/base/applications/tsclient/mstscax/mstscax.vcproj similarity index 100% rename from reactos/base/applications/tsclient/mstscax/mstscax.vcproj rename to base/applications/tsclient/mstscax/mstscax.vcproj diff --git a/reactos/base/applications/tsclient/mstscax/stdafx.cpp b/base/applications/tsclient/mstscax/stdafx.cpp similarity index 100% rename from reactos/base/applications/tsclient/mstscax/stdafx.cpp rename to base/applications/tsclient/mstscax/stdafx.cpp diff --git a/reactos/base/applications/tsclient/mstscax/stdafx.h b/base/applications/tsclient/mstscax/stdafx.h similarity index 100% rename from reactos/base/applications/tsclient/mstscax/stdafx.h rename to base/applications/tsclient/mstscax/stdafx.h diff --git a/reactos/base/applications/tsclient/porting-tools/mstscax/mstscax.cpp b/base/applications/tsclient/porting-tools/mstscax/mstscax.cpp similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/mstscax/mstscax.cpp rename to base/applications/tsclient/porting-tools/mstscax/mstscax.cpp diff --git a/reactos/base/applications/tsclient/porting-tools/mstscax/mstscax.def b/base/applications/tsclient/porting-tools/mstscax/mstscax.def similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/mstscax/mstscax.def rename to base/applications/tsclient/porting-tools/mstscax/mstscax.def diff --git a/reactos/base/applications/tsclient/porting-tools/mstscax/mstscax.sln b/base/applications/tsclient/porting-tools/mstscax/mstscax.sln similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/mstscax/mstscax.sln rename to base/applications/tsclient/porting-tools/mstscax/mstscax.sln diff --git a/reactos/base/applications/tsclient/porting-tools/mstscax/mstscax.vcproj b/base/applications/tsclient/porting-tools/mstscax/mstscax.vcproj similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/mstscax/mstscax.vcproj rename to base/applications/tsclient/porting-tools/mstscax/mstscax.vcproj diff --git a/reactos/base/applications/tsclient/porting-tools/mstscax/stdafx.cpp b/base/applications/tsclient/porting-tools/mstscax/stdafx.cpp similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/mstscax/stdafx.cpp rename to base/applications/tsclient/porting-tools/mstscax/stdafx.cpp diff --git a/reactos/base/applications/tsclient/porting-tools/mstscax/stdafx.h b/base/applications/tsclient/porting-tools/mstscax/stdafx.h similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/mstscax/stdafx.h rename to base/applications/tsclient/porting-tools/mstscax/stdafx.h diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/activex.cpp b/base/applications/tsclient/porting-tools/rdesktop-core-tester/activex.cpp similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/activex.cpp rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/activex.cpp diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.idl b/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.idl similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.idl rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.idl diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.rc b/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.rc similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.rc rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib.rc diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_h.h b/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_h.h similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_h.h rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_h.h diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_i.c b/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_i.c similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_i.c rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_i.c diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.idl b/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.idl similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.idl rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.idl diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.rc b/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.rc similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.rc rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist.rc diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_h.h b/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_h.h similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_h.h rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_h.h diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_i.c b/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_i.c similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_i.c rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/mstsclib_redist_i.c diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp b/base/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj b/base/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.cpp b/base/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.cpp similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.cpp rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.cpp diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.h b/base/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.h similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.h rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/stdafx.h diff --git a/reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/typelib.rh b/base/applications/tsclient/porting-tools/rdesktop-core-tester/typelib.rh similarity index 100% rename from reactos/base/applications/tsclient/porting-tools/rdesktop-core-tester/typelib.rh rename to base/applications/tsclient/porting-tools/rdesktop-core-tester/typelib.rh diff --git a/reactos/base/applications/tsclient/rdesktop/COPYING b/base/applications/tsclient/rdesktop/COPYING similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/COPYING rename to base/applications/tsclient/rdesktop/COPYING diff --git a/reactos/base/applications/tsclient/rdesktop/Makefile.in b/base/applications/tsclient/rdesktop/Makefile.in similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/Makefile.in rename to base/applications/tsclient/rdesktop/Makefile.in diff --git a/reactos/base/applications/tsclient/rdesktop/README b/base/applications/tsclient/rdesktop/README similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/README rename to base/applications/tsclient/rdesktop/README diff --git a/reactos/base/applications/tsclient/rdesktop/bitmap.c b/base/applications/tsclient/rdesktop/bitmap.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/bitmap.c rename to base/applications/tsclient/rdesktop/bitmap.c diff --git a/reactos/base/applications/tsclient/rdesktop/bootstrap b/base/applications/tsclient/rdesktop/bootstrap similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/bootstrap rename to base/applications/tsclient/rdesktop/bootstrap diff --git a/reactos/base/applications/tsclient/rdesktop/cache.c b/base/applications/tsclient/rdesktop/cache.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/cache.c rename to base/applications/tsclient/rdesktop/cache.c diff --git a/reactos/base/applications/tsclient/rdesktop/channels.c b/base/applications/tsclient/rdesktop/channels.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/channels.c rename to base/applications/tsclient/rdesktop/channels.c diff --git a/reactos/base/applications/tsclient/rdesktop/cliprdr.c b/base/applications/tsclient/rdesktop/cliprdr.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/cliprdr.c rename to base/applications/tsclient/rdesktop/cliprdr.c diff --git a/reactos/base/applications/tsclient/rdesktop/config.guess b/base/applications/tsclient/rdesktop/config.guess similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/config.guess rename to base/applications/tsclient/rdesktop/config.guess diff --git a/reactos/base/applications/tsclient/rdesktop/config.sub b/base/applications/tsclient/rdesktop/config.sub similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/config.sub rename to base/applications/tsclient/rdesktop/config.sub diff --git a/reactos/base/applications/tsclient/rdesktop/configure.ac b/base/applications/tsclient/rdesktop/configure.ac similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/configure.ac rename to base/applications/tsclient/rdesktop/configure.ac diff --git a/reactos/base/applications/tsclient/rdesktop/constants.h b/base/applications/tsclient/rdesktop/constants.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/constants.h rename to base/applications/tsclient/rdesktop/constants.h diff --git a/reactos/base/applications/tsclient/rdesktop/disk.c b/base/applications/tsclient/rdesktop/disk.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/disk.c rename to base/applications/tsclient/rdesktop/disk.c diff --git a/reactos/base/applications/tsclient/rdesktop/disk.h b/base/applications/tsclient/rdesktop/disk.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/disk.h rename to base/applications/tsclient/rdesktop/disk.h diff --git a/reactos/base/applications/tsclient/rdesktop/doc/AUTHORS b/base/applications/tsclient/rdesktop/doc/AUTHORS similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/AUTHORS rename to base/applications/tsclient/rdesktop/doc/AUTHORS diff --git a/reactos/base/applications/tsclient/rdesktop/doc/ChangeLog b/base/applications/tsclient/rdesktop/doc/ChangeLog similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/ChangeLog rename to base/applications/tsclient/rdesktop/doc/ChangeLog diff --git a/reactos/base/applications/tsclient/rdesktop/doc/HACKING b/base/applications/tsclient/rdesktop/doc/HACKING similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/HACKING rename to base/applications/tsclient/rdesktop/doc/HACKING diff --git a/reactos/base/applications/tsclient/rdesktop/doc/TODO b/base/applications/tsclient/rdesktop/doc/TODO similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/TODO rename to base/applications/tsclient/rdesktop/doc/TODO diff --git a/reactos/base/applications/tsclient/rdesktop/doc/ipv6.txt b/base/applications/tsclient/rdesktop/doc/ipv6.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/ipv6.txt rename to base/applications/tsclient/rdesktop/doc/ipv6.txt diff --git a/reactos/base/applications/tsclient/rdesktop/doc/keymap-names.txt b/base/applications/tsclient/rdesktop/doc/keymap-names.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/keymap-names.txt rename to base/applications/tsclient/rdesktop/doc/keymap-names.txt diff --git a/reactos/base/applications/tsclient/rdesktop/doc/keymapping.txt b/base/applications/tsclient/rdesktop/doc/keymapping.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/keymapping.txt rename to base/applications/tsclient/rdesktop/doc/keymapping.txt diff --git a/reactos/base/applications/tsclient/rdesktop/doc/keynums.png b/base/applications/tsclient/rdesktop/doc/keynums.png similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/keynums.png rename to base/applications/tsclient/rdesktop/doc/keynums.png diff --git a/reactos/base/applications/tsclient/rdesktop/doc/licensing.txt b/base/applications/tsclient/rdesktop/doc/licensing.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/licensing.txt rename to base/applications/tsclient/rdesktop/doc/licensing.txt diff --git a/reactos/base/applications/tsclient/rdesktop/doc/lspci-channel.txt b/base/applications/tsclient/rdesktop/doc/lspci-channel.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/lspci-channel.txt rename to base/applications/tsclient/rdesktop/doc/lspci-channel.txt diff --git a/reactos/base/applications/tsclient/rdesktop/doc/patches.txt b/base/applications/tsclient/rdesktop/doc/patches.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/patches.txt rename to base/applications/tsclient/rdesktop/doc/patches.txt diff --git a/reactos/base/applications/tsclient/rdesktop/doc/rdesktop.1 b/base/applications/tsclient/rdesktop/doc/rdesktop.1 similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/rdesktop.1 rename to base/applications/tsclient/rdesktop/doc/rdesktop.1 diff --git a/reactos/base/applications/tsclient/rdesktop/doc/redirection.txt b/base/applications/tsclient/rdesktop/doc/redirection.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/redirection.txt rename to base/applications/tsclient/rdesktop/doc/redirection.txt diff --git a/reactos/base/applications/tsclient/rdesktop/doc/seamlessrdp-channel.txt b/base/applications/tsclient/rdesktop/doc/seamlessrdp-channel.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/doc/seamlessrdp-channel.txt rename to base/applications/tsclient/rdesktop/doc/seamlessrdp-channel.txt diff --git a/reactos/base/applications/tsclient/rdesktop/ewmhints.c b/base/applications/tsclient/rdesktop/ewmhints.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/ewmhints.c rename to base/applications/tsclient/rdesktop/ewmhints.c diff --git a/reactos/base/applications/tsclient/rdesktop/indent-all.sh b/base/applications/tsclient/rdesktop/indent-all.sh similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/indent-all.sh rename to base/applications/tsclient/rdesktop/indent-all.sh diff --git a/reactos/base/applications/tsclient/rdesktop/install-sh b/base/applications/tsclient/rdesktop/install-sh similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/install-sh rename to base/applications/tsclient/rdesktop/install-sh diff --git a/reactos/base/applications/tsclient/rdesktop/iso.c b/base/applications/tsclient/rdesktop/iso.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/iso.c rename to base/applications/tsclient/rdesktop/iso.c diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/ar b/base/applications/tsclient/rdesktop/keymaps/ar similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/ar rename to base/applications/tsclient/rdesktop/keymaps/ar diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/common b/base/applications/tsclient/rdesktop/keymaps/common similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/common rename to base/applications/tsclient/rdesktop/keymaps/common diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/convert-map b/base/applications/tsclient/rdesktop/keymaps/convert-map similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/convert-map rename to base/applications/tsclient/rdesktop/keymaps/convert-map diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/cs b/base/applications/tsclient/rdesktop/keymaps/cs similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/cs rename to base/applications/tsclient/rdesktop/keymaps/cs diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/da b/base/applications/tsclient/rdesktop/keymaps/da similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/da rename to base/applications/tsclient/rdesktop/keymaps/da diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/de b/base/applications/tsclient/rdesktop/keymaps/de similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/de rename to base/applications/tsclient/rdesktop/keymaps/de diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/de-ch b/base/applications/tsclient/rdesktop/keymaps/de-ch similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/de-ch rename to base/applications/tsclient/rdesktop/keymaps/de-ch diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/en-dv b/base/applications/tsclient/rdesktop/keymaps/en-dv similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/en-dv rename to base/applications/tsclient/rdesktop/keymaps/en-dv diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/en-gb b/base/applications/tsclient/rdesktop/keymaps/en-gb similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/en-gb rename to base/applications/tsclient/rdesktop/keymaps/en-gb diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/en-us b/base/applications/tsclient/rdesktop/keymaps/en-us similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/en-us rename to base/applications/tsclient/rdesktop/keymaps/en-us diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/es b/base/applications/tsclient/rdesktop/keymaps/es similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/es rename to base/applications/tsclient/rdesktop/keymaps/es diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/et b/base/applications/tsclient/rdesktop/keymaps/et similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/et rename to base/applications/tsclient/rdesktop/keymaps/et diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/fi b/base/applications/tsclient/rdesktop/keymaps/fi similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/fi rename to base/applications/tsclient/rdesktop/keymaps/fi diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/fo b/base/applications/tsclient/rdesktop/keymaps/fo similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/fo rename to base/applications/tsclient/rdesktop/keymaps/fo diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/fr b/base/applications/tsclient/rdesktop/keymaps/fr similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/fr rename to base/applications/tsclient/rdesktop/keymaps/fr diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/fr-be b/base/applications/tsclient/rdesktop/keymaps/fr-be similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/fr-be rename to base/applications/tsclient/rdesktop/keymaps/fr-be diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/fr-ca b/base/applications/tsclient/rdesktop/keymaps/fr-ca similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/fr-ca rename to base/applications/tsclient/rdesktop/keymaps/fr-ca diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/fr-ch b/base/applications/tsclient/rdesktop/keymaps/fr-ch similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/fr-ch rename to base/applications/tsclient/rdesktop/keymaps/fr-ch diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/he b/base/applications/tsclient/rdesktop/keymaps/he similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/he rename to base/applications/tsclient/rdesktop/keymaps/he diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/hr b/base/applications/tsclient/rdesktop/keymaps/hr similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/hr rename to base/applications/tsclient/rdesktop/keymaps/hr diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/hu b/base/applications/tsclient/rdesktop/keymaps/hu similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/hu rename to base/applications/tsclient/rdesktop/keymaps/hu diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/is b/base/applications/tsclient/rdesktop/keymaps/is similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/is rename to base/applications/tsclient/rdesktop/keymaps/is diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/it b/base/applications/tsclient/rdesktop/keymaps/it similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/it rename to base/applications/tsclient/rdesktop/keymaps/it diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/ja b/base/applications/tsclient/rdesktop/keymaps/ja similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/ja rename to base/applications/tsclient/rdesktop/keymaps/ja diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/ko b/base/applications/tsclient/rdesktop/keymaps/ko similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/ko rename to base/applications/tsclient/rdesktop/keymaps/ko diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/lt b/base/applications/tsclient/rdesktop/keymaps/lt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/lt rename to base/applications/tsclient/rdesktop/keymaps/lt diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/lv b/base/applications/tsclient/rdesktop/keymaps/lv similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/lv rename to base/applications/tsclient/rdesktop/keymaps/lv diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/mk b/base/applications/tsclient/rdesktop/keymaps/mk similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/mk rename to base/applications/tsclient/rdesktop/keymaps/mk diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/modifiers b/base/applications/tsclient/rdesktop/keymaps/modifiers similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/modifiers rename to base/applications/tsclient/rdesktop/keymaps/modifiers diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/nl b/base/applications/tsclient/rdesktop/keymaps/nl similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/nl rename to base/applications/tsclient/rdesktop/keymaps/nl diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/nl-be b/base/applications/tsclient/rdesktop/keymaps/nl-be similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/nl-be rename to base/applications/tsclient/rdesktop/keymaps/nl-be diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/no b/base/applications/tsclient/rdesktop/keymaps/no similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/no rename to base/applications/tsclient/rdesktop/keymaps/no diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/pl b/base/applications/tsclient/rdesktop/keymaps/pl similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/pl rename to base/applications/tsclient/rdesktop/keymaps/pl diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/pt b/base/applications/tsclient/rdesktop/keymaps/pt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/pt rename to base/applications/tsclient/rdesktop/keymaps/pt diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/pt-br b/base/applications/tsclient/rdesktop/keymaps/pt-br similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/pt-br rename to base/applications/tsclient/rdesktop/keymaps/pt-br diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/ru b/base/applications/tsclient/rdesktop/keymaps/ru similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/ru rename to base/applications/tsclient/rdesktop/keymaps/ru diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/sl b/base/applications/tsclient/rdesktop/keymaps/sl similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/sl rename to base/applications/tsclient/rdesktop/keymaps/sl diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/sv b/base/applications/tsclient/rdesktop/keymaps/sv similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/sv rename to base/applications/tsclient/rdesktop/keymaps/sv diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/th b/base/applications/tsclient/rdesktop/keymaps/th similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/th rename to base/applications/tsclient/rdesktop/keymaps/th diff --git a/reactos/base/applications/tsclient/rdesktop/keymaps/tr b/base/applications/tsclient/rdesktop/keymaps/tr similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/keymaps/tr rename to base/applications/tsclient/rdesktop/keymaps/tr diff --git a/reactos/base/applications/tsclient/rdesktop/licence.c b/base/applications/tsclient/rdesktop/licence.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/licence.c rename to base/applications/tsclient/rdesktop/licence.c diff --git a/reactos/base/applications/tsclient/rdesktop/lspci.c b/base/applications/tsclient/rdesktop/lspci.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/lspci.c rename to base/applications/tsclient/rdesktop/lspci.c diff --git a/reactos/base/applications/tsclient/rdesktop/mcs.c b/base/applications/tsclient/rdesktop/mcs.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/mcs.c rename to base/applications/tsclient/rdesktop/mcs.c diff --git a/reactos/base/applications/tsclient/rdesktop/mppc.c b/base/applications/tsclient/rdesktop/mppc.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/mppc.c rename to base/applications/tsclient/rdesktop/mppc.c diff --git a/reactos/base/applications/tsclient/rdesktop/orders.c b/base/applications/tsclient/rdesktop/orders.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/orders.c rename to base/applications/tsclient/rdesktop/orders.c diff --git a/reactos/base/applications/tsclient/rdesktop/orders.h b/base/applications/tsclient/rdesktop/orders.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/orders.h rename to base/applications/tsclient/rdesktop/orders.h diff --git a/reactos/base/applications/tsclient/rdesktop/parallel.c b/base/applications/tsclient/rdesktop/parallel.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/parallel.c rename to base/applications/tsclient/rdesktop/parallel.c diff --git a/reactos/base/applications/tsclient/rdesktop/parse.h b/base/applications/tsclient/rdesktop/parse.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/parse.h rename to base/applications/tsclient/rdesktop/parse.h diff --git a/reactos/base/applications/tsclient/rdesktop/printer.c b/base/applications/tsclient/rdesktop/printer.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/printer.c rename to base/applications/tsclient/rdesktop/printer.c diff --git a/reactos/base/applications/tsclient/rdesktop/printercache.c b/base/applications/tsclient/rdesktop/printercache.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/printercache.c rename to base/applications/tsclient/rdesktop/printercache.c diff --git a/reactos/base/applications/tsclient/rdesktop/proto.h b/base/applications/tsclient/rdesktop/proto.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/proto.h rename to base/applications/tsclient/rdesktop/proto.h diff --git a/reactos/base/applications/tsclient/rdesktop/proto.head b/base/applications/tsclient/rdesktop/proto.head similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/proto.head rename to base/applications/tsclient/rdesktop/proto.head diff --git a/reactos/base/applications/tsclient/rdesktop/proto.tail b/base/applications/tsclient/rdesktop/proto.tail similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/proto.tail rename to base/applications/tsclient/rdesktop/proto.tail diff --git a/reactos/base/applications/tsclient/rdesktop/pstcache.c b/base/applications/tsclient/rdesktop/pstcache.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/pstcache.c rename to base/applications/tsclient/rdesktop/pstcache.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdesktop-core.vcproj b/base/applications/tsclient/rdesktop/rdesktop-core.vcproj similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdesktop-core.vcproj rename to base/applications/tsclient/rdesktop/rdesktop-core.vcproj diff --git a/reactos/base/applications/tsclient/rdesktop/rdesktop.c b/base/applications/tsclient/rdesktop/rdesktop.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdesktop.c rename to base/applications/tsclient/rdesktop/rdesktop.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdesktop.h b/base/applications/tsclient/rdesktop/rdesktop.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdesktop.h rename to base/applications/tsclient/rdesktop/rdesktop.h diff --git a/reactos/base/applications/tsclient/rdesktop/rdesktop.spec b/base/applications/tsclient/rdesktop/rdesktop.spec similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdesktop.spec rename to base/applications/tsclient/rdesktop/rdesktop.spec diff --git a/reactos/base/applications/tsclient/rdesktop/rdp.c b/base/applications/tsclient/rdesktop/rdp.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdp.c rename to base/applications/tsclient/rdesktop/rdp.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdp5.c b/base/applications/tsclient/rdesktop/rdp5.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdp5.c rename to base/applications/tsclient/rdesktop/rdp5.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdpdr.c b/base/applications/tsclient/rdesktop/rdpdr.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdpdr.c rename to base/applications/tsclient/rdesktop/rdpdr.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdpsnd.c b/base/applications/tsclient/rdesktop/rdpsnd.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdpsnd.c rename to base/applications/tsclient/rdesktop/rdpsnd.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdpsnd_libao.c b/base/applications/tsclient/rdesktop/rdpsnd_libao.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdpsnd_libao.c rename to base/applications/tsclient/rdesktop/rdpsnd_libao.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdpsnd_oss.c b/base/applications/tsclient/rdesktop/rdpsnd_oss.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdpsnd_oss.c rename to base/applications/tsclient/rdesktop/rdpsnd_oss.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdpsnd_sgi.c b/base/applications/tsclient/rdesktop/rdpsnd_sgi.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdpsnd_sgi.c rename to base/applications/tsclient/rdesktop/rdpsnd_sgi.c diff --git a/reactos/base/applications/tsclient/rdesktop/rdpsnd_sun.c b/base/applications/tsclient/rdesktop/rdpsnd_sun.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/rdpsnd_sun.c rename to base/applications/tsclient/rdesktop/rdpsnd_sun.c diff --git a/reactos/base/applications/tsclient/rdesktop/scancodes.h b/base/applications/tsclient/rdesktop/scancodes.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/scancodes.h rename to base/applications/tsclient/rdesktop/scancodes.h diff --git a/reactos/base/applications/tsclient/rdesktop/seamless.c b/base/applications/tsclient/rdesktop/seamless.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/seamless.c rename to base/applications/tsclient/rdesktop/seamless.c diff --git a/reactos/base/applications/tsclient/rdesktop/seamless.h b/base/applications/tsclient/rdesktop/seamless.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/seamless.h rename to base/applications/tsclient/rdesktop/seamless.h diff --git a/reactos/base/applications/tsclient/rdesktop/secure.c b/base/applications/tsclient/rdesktop/secure.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/secure.c rename to base/applications/tsclient/rdesktop/secure.c diff --git a/reactos/base/applications/tsclient/rdesktop/serial.c b/base/applications/tsclient/rdesktop/serial.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/serial.c rename to base/applications/tsclient/rdesktop/serial.c diff --git a/reactos/base/applications/tsclient/rdesktop/tcp.c b/base/applications/tsclient/rdesktop/tcp.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/tcp.c rename to base/applications/tsclient/rdesktop/tcp.c diff --git a/reactos/base/applications/tsclient/rdesktop/types.h b/base/applications/tsclient/rdesktop/types.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/types.h rename to base/applications/tsclient/rdesktop/types.h diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/makefile_nanox b/base/applications/tsclient/rdesktop/uiports/makefile_nanox similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/makefile_nanox rename to base/applications/tsclient/rdesktop/uiports/makefile_nanox diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/makefile_qt b/base/applications/tsclient/rdesktop/uiports/makefile_qt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/makefile_qt rename to base/applications/tsclient/rdesktop/uiports/makefile_qt diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/makefile_qte b/base/applications/tsclient/rdesktop/uiports/makefile_qte similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/makefile_qte rename to base/applications/tsclient/rdesktop/uiports/makefile_qte diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/makefile_svga b/base/applications/tsclient/rdesktop/uiports/makefile_svga similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/makefile_svga rename to base/applications/tsclient/rdesktop/uiports/makefile_svga diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/makefile_xxx b/base/applications/tsclient/rdesktop/uiports/makefile_xxx similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/makefile_xxx rename to base/applications/tsclient/rdesktop/uiports/makefile_xxx diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/nanoxreadme.txt b/base/applications/tsclient/rdesktop/uiports/nanoxreadme.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/nanoxreadme.txt rename to base/applications/tsclient/rdesktop/uiports/nanoxreadme.txt diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/nanoxwin.c b/base/applications/tsclient/rdesktop/uiports/nanoxwin.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/nanoxwin.c rename to base/applications/tsclient/rdesktop/uiports/nanoxwin.c diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/qtereadme.txt b/base/applications/tsclient/rdesktop/uiports/qtereadme.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/qtereadme.txt rename to base/applications/tsclient/rdesktop/uiports/qtereadme.txt diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/qtewin.cpp b/base/applications/tsclient/rdesktop/uiports/qtewin.cpp similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/qtewin.cpp rename to base/applications/tsclient/rdesktop/uiports/qtewin.cpp diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/qtewin.h b/base/applications/tsclient/rdesktop/uiports/qtewin.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/qtewin.h rename to base/applications/tsclient/rdesktop/uiports/qtewin.h diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/qtreadme.txt b/base/applications/tsclient/rdesktop/uiports/qtreadme.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/qtreadme.txt rename to base/applications/tsclient/rdesktop/uiports/qtreadme.txt diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/qtwin.cpp b/base/applications/tsclient/rdesktop/uiports/qtwin.cpp similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/qtwin.cpp rename to base/applications/tsclient/rdesktop/uiports/qtwin.cpp diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/qtwin.h b/base/applications/tsclient/rdesktop/uiports/qtwin.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/qtwin.h rename to base/applications/tsclient/rdesktop/uiports/qtwin.h diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/readme.txt b/base/applications/tsclient/rdesktop/uiports/readme.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/readme.txt rename to base/applications/tsclient/rdesktop/uiports/readme.txt diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/svgareadme.txt b/base/applications/tsclient/rdesktop/uiports/svgareadme.txt similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/svgareadme.txt rename to base/applications/tsclient/rdesktop/uiports/svgareadme.txt diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/svgawin.c b/base/applications/tsclient/rdesktop/uiports/svgawin.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/svgawin.c rename to base/applications/tsclient/rdesktop/uiports/svgawin.c diff --git a/reactos/base/applications/tsclient/rdesktop/uiports/xxxwin.c b/base/applications/tsclient/rdesktop/uiports/xxxwin.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/uiports/xxxwin.c rename to base/applications/tsclient/rdesktop/uiports/xxxwin.c diff --git a/reactos/base/applications/tsclient/rdesktop/vnc/vnc.c b/base/applications/tsclient/rdesktop/vnc/vnc.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/vnc/vnc.c rename to base/applications/tsclient/rdesktop/vnc/vnc.c diff --git a/reactos/base/applications/tsclient/rdesktop/vnc/vnc.h b/base/applications/tsclient/rdesktop/vnc/vnc.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/vnc/vnc.h rename to base/applications/tsclient/rdesktop/vnc/vnc.h diff --git a/reactos/base/applications/tsclient/rdesktop/vnc/x11stubs.c b/base/applications/tsclient/rdesktop/vnc/x11stubs.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/vnc/x11stubs.c rename to base/applications/tsclient/rdesktop/vnc/x11stubs.c diff --git a/reactos/base/applications/tsclient/rdesktop/vnc/x11stubs.h b/base/applications/tsclient/rdesktop/vnc/x11stubs.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/vnc/x11stubs.h rename to base/applications/tsclient/rdesktop/vnc/x11stubs.h diff --git a/reactos/base/applications/tsclient/rdesktop/xclip.c b/base/applications/tsclient/rdesktop/xclip.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/xclip.c rename to base/applications/tsclient/rdesktop/xclip.c diff --git a/reactos/base/applications/tsclient/rdesktop/xkeymap.c b/base/applications/tsclient/rdesktop/xkeymap.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/xkeymap.c rename to base/applications/tsclient/rdesktop/xkeymap.c diff --git a/reactos/base/applications/tsclient/rdesktop/xproto.h b/base/applications/tsclient/rdesktop/xproto.h similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/xproto.h rename to base/applications/tsclient/rdesktop/xproto.h diff --git a/reactos/base/applications/tsclient/rdesktop/xwin.c b/base/applications/tsclient/rdesktop/xwin.c similarity index 100% rename from reactos/base/applications/tsclient/rdesktop/xwin.c rename to base/applications/tsclient/rdesktop/xwin.c diff --git a/reactos/base/applications/winhlp32/callback.c b/base/applications/winhlp32/callback.c similarity index 100% rename from reactos/base/applications/winhlp32/callback.c rename to base/applications/winhlp32/callback.c diff --git a/reactos/base/applications/winhlp32/hlpfile.c b/base/applications/winhlp32/hlpfile.c similarity index 100% rename from reactos/base/applications/winhlp32/hlpfile.c rename to base/applications/winhlp32/hlpfile.c diff --git a/reactos/base/applications/winhlp32/hlpfile.h b/base/applications/winhlp32/hlpfile.h similarity index 100% rename from reactos/base/applications/winhlp32/hlpfile.h rename to base/applications/winhlp32/hlpfile.h diff --git a/reactos/base/applications/winhlp32/lang/bg-BG.rc b/base/applications/winhlp32/lang/bg-BG.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/bg-BG.rc rename to base/applications/winhlp32/lang/bg-BG.rc diff --git a/reactos/base/applications/winhlp32/lang/cs-CZ.rc b/base/applications/winhlp32/lang/cs-CZ.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/cs-CZ.rc rename to base/applications/winhlp32/lang/cs-CZ.rc diff --git a/reactos/base/applications/winhlp32/lang/da-DK.rc b/base/applications/winhlp32/lang/da-DK.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/da-DK.rc rename to base/applications/winhlp32/lang/da-DK.rc diff --git a/reactos/base/applications/winhlp32/lang/de-DE.rc b/base/applications/winhlp32/lang/de-DE.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/de-DE.rc rename to base/applications/winhlp32/lang/de-DE.rc diff --git a/reactos/base/applications/winhlp32/lang/el-GR.rc b/base/applications/winhlp32/lang/el-GR.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/el-GR.rc rename to base/applications/winhlp32/lang/el-GR.rc diff --git a/reactos/base/applications/winhlp32/lang/en-US.rc b/base/applications/winhlp32/lang/en-US.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/en-US.rc rename to base/applications/winhlp32/lang/en-US.rc diff --git a/reactos/base/applications/winhlp32/lang/es-ES.rc b/base/applications/winhlp32/lang/es-ES.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/es-ES.rc rename to base/applications/winhlp32/lang/es-ES.rc diff --git a/reactos/base/applications/winhlp32/lang/fi-FI.rc b/base/applications/winhlp32/lang/fi-FI.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/fi-FI.rc rename to base/applications/winhlp32/lang/fi-FI.rc diff --git a/reactos/base/applications/winhlp32/lang/fr-FR.rc b/base/applications/winhlp32/lang/fr-FR.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/fr-FR.rc rename to base/applications/winhlp32/lang/fr-FR.rc diff --git a/reactos/base/applications/winhlp32/lang/hu-HU.rc b/base/applications/winhlp32/lang/hu-HU.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/hu-HU.rc rename to base/applications/winhlp32/lang/hu-HU.rc diff --git a/reactos/base/applications/winhlp32/lang/it-IT.rc b/base/applications/winhlp32/lang/it-IT.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/it-IT.rc rename to base/applications/winhlp32/lang/it-IT.rc diff --git a/reactos/base/applications/winhlp32/lang/ja-JP.rc b/base/applications/winhlp32/lang/ja-JP.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/ja-JP.rc rename to base/applications/winhlp32/lang/ja-JP.rc diff --git a/reactos/base/applications/winhlp32/lang/ko-KR.rc b/base/applications/winhlp32/lang/ko-KR.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/ko-KR.rc rename to base/applications/winhlp32/lang/ko-KR.rc diff --git a/reactos/base/applications/winhlp32/lang/lt-LT.rc b/base/applications/winhlp32/lang/lt-LT.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/lt-LT.rc rename to base/applications/winhlp32/lang/lt-LT.rc diff --git a/reactos/base/applications/winhlp32/lang/nl-NL.rc b/base/applications/winhlp32/lang/nl-NL.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/nl-NL.rc rename to base/applications/winhlp32/lang/nl-NL.rc diff --git a/reactos/base/applications/winhlp32/lang/no-NO.rc b/base/applications/winhlp32/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/no-NO.rc rename to base/applications/winhlp32/lang/no-NO.rc diff --git a/reactos/base/applications/winhlp32/lang/pl-PL.rc b/base/applications/winhlp32/lang/pl-PL.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/pl-PL.rc rename to base/applications/winhlp32/lang/pl-PL.rc diff --git a/reactos/base/applications/winhlp32/lang/pt-BR.rc b/base/applications/winhlp32/lang/pt-BR.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/pt-BR.rc rename to base/applications/winhlp32/lang/pt-BR.rc diff --git a/reactos/base/applications/winhlp32/lang/rm-CH.rc b/base/applications/winhlp32/lang/rm-CH.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/rm-CH.rc rename to base/applications/winhlp32/lang/rm-CH.rc diff --git a/reactos/base/applications/winhlp32/lang/ru-RU.rc b/base/applications/winhlp32/lang/ru-RU.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/ru-RU.rc rename to base/applications/winhlp32/lang/ru-RU.rc diff --git a/reactos/base/applications/winhlp32/lang/sk-SK.rc b/base/applications/winhlp32/lang/sk-SK.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/sk-SK.rc rename to base/applications/winhlp32/lang/sk-SK.rc diff --git a/reactos/base/applications/winhlp32/lang/sl-SI.rc b/base/applications/winhlp32/lang/sl-SI.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/sl-SI.rc rename to base/applications/winhlp32/lang/sl-SI.rc diff --git a/reactos/base/applications/winhlp32/lang/sv-SE.rc b/base/applications/winhlp32/lang/sv-SE.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/sv-SE.rc rename to base/applications/winhlp32/lang/sv-SE.rc diff --git a/reactos/base/applications/winhlp32/lang/tr-TR.rc b/base/applications/winhlp32/lang/tr-TR.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/tr-TR.rc rename to base/applications/winhlp32/lang/tr-TR.rc diff --git a/reactos/base/applications/winhlp32/lang/uk-UA.rc b/base/applications/winhlp32/lang/uk-UA.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/uk-UA.rc rename to base/applications/winhlp32/lang/uk-UA.rc diff --git a/reactos/base/applications/winhlp32/lang/zh-CN.rc b/base/applications/winhlp32/lang/zh-CN.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/zh-CN.rc rename to base/applications/winhlp32/lang/zh-CN.rc diff --git a/reactos/base/applications/winhlp32/lex.yy.c b/base/applications/winhlp32/lex.yy.c similarity index 100% rename from reactos/base/applications/winhlp32/lex.yy.c rename to base/applications/winhlp32/lex.yy.c diff --git a/reactos/base/applications/winhlp32/macro.c b/base/applications/winhlp32/macro.c similarity index 100% rename from reactos/base/applications/winhlp32/macro.c rename to base/applications/winhlp32/macro.c diff --git a/reactos/base/applications/winhlp32/macro.h b/base/applications/winhlp32/macro.h similarity index 100% rename from reactos/base/applications/winhlp32/macro.h rename to base/applications/winhlp32/macro.h diff --git a/reactos/base/applications/winhlp32/macro.lex.l b/base/applications/winhlp32/macro.lex.l similarity index 100% rename from reactos/base/applications/winhlp32/macro.lex.l rename to base/applications/winhlp32/macro.lex.l diff --git a/reactos/base/applications/winhlp32/rsrc.rc b/base/applications/winhlp32/rsrc.rc similarity index 100% rename from reactos/base/applications/winhlp32/rsrc.rc rename to base/applications/winhlp32/rsrc.rc diff --git a/reactos/base/applications/winhlp32/string.c b/base/applications/winhlp32/string.c similarity index 100% rename from reactos/base/applications/winhlp32/string.c rename to base/applications/winhlp32/string.c diff --git a/reactos/base/applications/winhlp32/winhelp.c b/base/applications/winhlp32/winhelp.c similarity index 100% rename from reactos/base/applications/winhlp32/winhelp.c rename to base/applications/winhlp32/winhelp.c diff --git a/reactos/base/applications/winhlp32/winhelp.h b/base/applications/winhlp32/winhelp.h similarity index 100% rename from reactos/base/applications/winhlp32/winhelp.h rename to base/applications/winhlp32/winhelp.h diff --git a/reactos/base/applications/winhlp32/winhelp.ico b/base/applications/winhlp32/winhelp.ico similarity index 100% rename from reactos/base/applications/winhlp32/winhelp.ico rename to base/applications/winhlp32/winhelp.ico diff --git a/reactos/base/applications/winhlp32/winhelp_res.h b/base/applications/winhlp32/winhelp_res.h similarity index 100% rename from reactos/base/applications/winhlp32/winhelp_res.h rename to base/applications/winhlp32/winhelp_res.h diff --git a/reactos/base/applications/winhlp32/winhlp32.rbuild b/base/applications/winhlp32/winhlp32.rbuild similarity index 100% rename from reactos/base/applications/winhlp32/winhlp32.rbuild rename to base/applications/winhlp32/winhlp32.rbuild diff --git a/reactos/base/applications/wordpad/Da.rc b/base/applications/wordpad/Da.rc similarity index 100% rename from reactos/base/applications/wordpad/Da.rc rename to base/applications/wordpad/Da.rc diff --git a/reactos/base/applications/wordpad/De.rc b/base/applications/wordpad/De.rc similarity index 100% rename from reactos/base/applications/wordpad/De.rc rename to base/applications/wordpad/De.rc diff --git a/reactos/base/applications/wordpad/En.rc b/base/applications/wordpad/En.rc similarity index 100% rename from reactos/base/applications/wordpad/En.rc rename to base/applications/wordpad/En.rc diff --git a/reactos/base/applications/wordpad/Fr.rc b/base/applications/wordpad/Fr.rc similarity index 100% rename from reactos/base/applications/wordpad/Fr.rc rename to base/applications/wordpad/Fr.rc diff --git a/reactos/base/applications/wordpad/Hu.rc b/base/applications/wordpad/Hu.rc similarity index 100% rename from reactos/base/applications/wordpad/Hu.rc rename to base/applications/wordpad/Hu.rc diff --git a/reactos/base/applications/wordpad/Ja.rc b/base/applications/wordpad/Ja.rc similarity index 100% rename from reactos/base/applications/wordpad/Ja.rc rename to base/applications/wordpad/Ja.rc diff --git a/reactos/base/applications/wordpad/Ko.rc b/base/applications/wordpad/Ko.rc similarity index 100% rename from reactos/base/applications/wordpad/Ko.rc rename to base/applications/wordpad/Ko.rc diff --git a/reactos/base/applications/wordpad/Nl.rc b/base/applications/wordpad/Nl.rc similarity index 100% rename from reactos/base/applications/wordpad/Nl.rc rename to base/applications/wordpad/Nl.rc diff --git a/reactos/base/applications/wordpad/No.rc b/base/applications/wordpad/No.rc similarity index 100% rename from reactos/base/applications/wordpad/No.rc rename to base/applications/wordpad/No.rc diff --git a/reactos/base/applications/wordpad/Pl.rc b/base/applications/wordpad/Pl.rc similarity index 100% rename from reactos/base/applications/wordpad/Pl.rc rename to base/applications/wordpad/Pl.rc diff --git a/reactos/base/applications/wordpad/Ru.rc b/base/applications/wordpad/Ru.rc similarity index 100% rename from reactos/base/applications/wordpad/Ru.rc rename to base/applications/wordpad/Ru.rc diff --git a/reactos/base/applications/wordpad/Si.rc b/base/applications/wordpad/Si.rc similarity index 100% rename from reactos/base/applications/wordpad/Si.rc rename to base/applications/wordpad/Si.rc diff --git a/reactos/base/applications/wordpad/Tr.rc b/base/applications/wordpad/Tr.rc similarity index 100% rename from reactos/base/applications/wordpad/Tr.rc rename to base/applications/wordpad/Tr.rc diff --git a/reactos/base/applications/wordpad/Zh.rc b/base/applications/wordpad/Zh.rc similarity index 100% rename from reactos/base/applications/wordpad/Zh.rc rename to base/applications/wordpad/Zh.rc diff --git a/reactos/base/applications/wordpad/formatbar.bmp b/base/applications/wordpad/formatbar.bmp similarity index 100% rename from reactos/base/applications/wordpad/formatbar.bmp rename to base/applications/wordpad/formatbar.bmp diff --git a/reactos/base/applications/wordpad/print.c b/base/applications/wordpad/print.c similarity index 100% rename from reactos/base/applications/wordpad/print.c rename to base/applications/wordpad/print.c diff --git a/reactos/base/applications/wordpad/registry.c b/base/applications/wordpad/registry.c similarity index 100% rename from reactos/base/applications/wordpad/registry.c rename to base/applications/wordpad/registry.c diff --git a/reactos/base/applications/wordpad/rsrc.rc b/base/applications/wordpad/rsrc.rc similarity index 100% rename from reactos/base/applications/wordpad/rsrc.rc rename to base/applications/wordpad/rsrc.rc diff --git a/reactos/base/applications/wordpad/rtf.ico b/base/applications/wordpad/rtf.ico similarity index 100% rename from reactos/base/applications/wordpad/rtf.ico rename to base/applications/wordpad/rtf.ico diff --git a/reactos/base/applications/wordpad/toolbar.bmp b/base/applications/wordpad/toolbar.bmp similarity index 100% rename from reactos/base/applications/wordpad/toolbar.bmp rename to base/applications/wordpad/toolbar.bmp diff --git a/reactos/base/applications/wordpad/txt.ico b/base/applications/wordpad/txt.ico similarity index 100% rename from reactos/base/applications/wordpad/txt.ico rename to base/applications/wordpad/txt.ico diff --git a/reactos/base/applications/wordpad/wordpad.c b/base/applications/wordpad/wordpad.c similarity index 100% rename from reactos/base/applications/wordpad/wordpad.c rename to base/applications/wordpad/wordpad.c diff --git a/reactos/base/applications/wordpad/wordpad.h b/base/applications/wordpad/wordpad.h similarity index 100% rename from reactos/base/applications/wordpad/wordpad.h rename to base/applications/wordpad/wordpad.h diff --git a/reactos/base/applications/wordpad/wordpad.ico b/base/applications/wordpad/wordpad.ico similarity index 100% rename from reactos/base/applications/wordpad/wordpad.ico rename to base/applications/wordpad/wordpad.ico diff --git a/reactos/base/applications/wordpad/wordpad.rbuild b/base/applications/wordpad/wordpad.rbuild similarity index 100% rename from reactos/base/applications/wordpad/wordpad.rbuild rename to base/applications/wordpad/wordpad.rbuild diff --git a/reactos/base/applications/wordpad/wri.ico b/base/applications/wordpad/wri.ico similarity index 100% rename from reactos/base/applications/wordpad/wri.ico rename to base/applications/wordpad/wri.ico diff --git a/reactos/base/base.rbuild b/base/base.rbuild similarity index 100% rename from reactos/base/base.rbuild rename to base/base.rbuild diff --git a/reactos/base/services/audiosrv/audiosrv.h b/base/services/audiosrv/audiosrv.h similarity index 100% rename from reactos/base/services/audiosrv/audiosrv.h rename to base/services/audiosrv/audiosrv.h diff --git a/reactos/base/services/audiosrv/audiosrv.rbuild b/base/services/audiosrv/audiosrv.rbuild similarity index 100% rename from reactos/base/services/audiosrv/audiosrv.rbuild rename to base/services/audiosrv/audiosrv.rbuild diff --git a/reactos/base/services/audiosrv/audiosrv.rc b/base/services/audiosrv/audiosrv.rc similarity index 100% rename from reactos/base/services/audiosrv/audiosrv.rc rename to base/services/audiosrv/audiosrv.rc diff --git a/reactos/base/services/audiosrv/audiosrv.txt b/base/services/audiosrv/audiosrv.txt similarity index 100% rename from reactos/base/services/audiosrv/audiosrv.txt rename to base/services/audiosrv/audiosrv.txt diff --git a/reactos/base/services/audiosrv/debug.c b/base/services/audiosrv/debug.c similarity index 100% rename from reactos/base/services/audiosrv/debug.c rename to base/services/audiosrv/debug.c diff --git a/reactos/base/services/audiosrv/main.c b/base/services/audiosrv/main.c similarity index 100% rename from reactos/base/services/audiosrv/main.c rename to base/services/audiosrv/main.c diff --git a/reactos/base/services/audiosrv/pnp.c b/base/services/audiosrv/pnp.c similarity index 100% rename from reactos/base/services/audiosrv/pnp.c rename to base/services/audiosrv/pnp.c diff --git a/reactos/base/services/audiosrv/pnp_list_lock.c b/base/services/audiosrv/pnp_list_lock.c similarity index 100% rename from reactos/base/services/audiosrv/pnp_list_lock.c rename to base/services/audiosrv/pnp_list_lock.c diff --git a/reactos/base/services/audiosrv/pnp_list_manager.c b/base/services/audiosrv/pnp_list_manager.c similarity index 100% rename from reactos/base/services/audiosrv/pnp_list_manager.c rename to base/services/audiosrv/pnp_list_manager.c diff --git a/reactos/base/services/dhcp/adapter.c b/base/services/dhcp/adapter.c similarity index 100% rename from reactos/base/services/dhcp/adapter.c rename to base/services/dhcp/adapter.c diff --git a/reactos/base/services/dhcp/alloc.c b/base/services/dhcp/alloc.c similarity index 100% rename from reactos/base/services/dhcp/alloc.c rename to base/services/dhcp/alloc.c diff --git a/reactos/base/services/dhcp/api.c b/base/services/dhcp/api.c similarity index 100% rename from reactos/base/services/dhcp/api.c rename to base/services/dhcp/api.c diff --git a/reactos/base/services/dhcp/compat.c b/base/services/dhcp/compat.c similarity index 100% rename from reactos/base/services/dhcp/compat.c rename to base/services/dhcp/compat.c diff --git a/reactos/base/services/dhcp/design.txt b/base/services/dhcp/design.txt similarity index 100% rename from reactos/base/services/dhcp/design.txt rename to base/services/dhcp/design.txt diff --git a/reactos/base/services/dhcp/dhclient.c b/base/services/dhcp/dhclient.c similarity index 100% rename from reactos/base/services/dhcp/dhclient.c rename to base/services/dhcp/dhclient.c diff --git a/reactos/base/services/dhcp/dhcp.rbuild b/base/services/dhcp/dhcp.rbuild similarity index 100% rename from reactos/base/services/dhcp/dhcp.rbuild rename to base/services/dhcp/dhcp.rbuild diff --git a/reactos/base/services/dhcp/dhcp.rc b/base/services/dhcp/dhcp.rc similarity index 100% rename from reactos/base/services/dhcp/dhcp.rc rename to base/services/dhcp/dhcp.rc diff --git a/reactos/base/services/dhcp/dhcpmain.c b/base/services/dhcp/dhcpmain.c similarity index 100% rename from reactos/base/services/dhcp/dhcpmain.c rename to base/services/dhcp/dhcpmain.c diff --git a/reactos/base/services/dhcp/dispatch.c b/base/services/dhcp/dispatch.c similarity index 100% rename from reactos/base/services/dhcp/dispatch.c rename to base/services/dhcp/dispatch.c diff --git a/reactos/base/services/dhcp/hash.c b/base/services/dhcp/hash.c similarity index 100% rename from reactos/base/services/dhcp/hash.c rename to base/services/dhcp/hash.c diff --git a/reactos/base/services/dhcp/include/cdefs.h b/base/services/dhcp/include/cdefs.h similarity index 100% rename from reactos/base/services/dhcp/include/cdefs.h rename to base/services/dhcp/include/cdefs.h diff --git a/reactos/base/services/dhcp/include/debug.h b/base/services/dhcp/include/debug.h similarity index 100% rename from reactos/base/services/dhcp/include/debug.h rename to base/services/dhcp/include/debug.h diff --git a/reactos/base/services/dhcp/include/dhcp.h b/base/services/dhcp/include/dhcp.h similarity index 100% rename from reactos/base/services/dhcp/include/dhcp.h rename to base/services/dhcp/include/dhcp.h diff --git a/reactos/base/services/dhcp/include/dhcpd.h b/base/services/dhcp/include/dhcpd.h similarity index 100% rename from reactos/base/services/dhcp/include/dhcpd.h rename to base/services/dhcp/include/dhcpd.h diff --git a/reactos/base/services/dhcp/include/dhctoken.h b/base/services/dhcp/include/dhctoken.h similarity index 100% rename from reactos/base/services/dhcp/include/dhctoken.h rename to base/services/dhcp/include/dhctoken.h diff --git a/reactos/base/services/dhcp/include/hash.h b/base/services/dhcp/include/hash.h similarity index 100% rename from reactos/base/services/dhcp/include/hash.h rename to base/services/dhcp/include/hash.h diff --git a/reactos/base/services/dhcp/include/inet.h b/base/services/dhcp/include/inet.h similarity index 100% rename from reactos/base/services/dhcp/include/inet.h rename to base/services/dhcp/include/inet.h diff --git a/reactos/base/services/dhcp/include/osdep.h b/base/services/dhcp/include/osdep.h similarity index 100% rename from reactos/base/services/dhcp/include/osdep.h rename to base/services/dhcp/include/osdep.h diff --git a/reactos/base/services/dhcp/include/predec.h b/base/services/dhcp/include/predec.h similarity index 100% rename from reactos/base/services/dhcp/include/predec.h rename to base/services/dhcp/include/predec.h diff --git a/reactos/base/services/dhcp/include/privsep.h b/base/services/dhcp/include/privsep.h similarity index 100% rename from reactos/base/services/dhcp/include/privsep.h rename to base/services/dhcp/include/privsep.h diff --git a/reactos/base/services/dhcp/include/rosdhcp.h b/base/services/dhcp/include/rosdhcp.h similarity index 100% rename from reactos/base/services/dhcp/include/rosdhcp.h rename to base/services/dhcp/include/rosdhcp.h diff --git a/reactos/base/services/dhcp/include/site.h b/base/services/dhcp/include/site.h similarity index 100% rename from reactos/base/services/dhcp/include/site.h rename to base/services/dhcp/include/site.h diff --git a/reactos/base/services/dhcp/include/stdint.h b/base/services/dhcp/include/stdint.h similarity index 100% rename from reactos/base/services/dhcp/include/stdint.h rename to base/services/dhcp/include/stdint.h diff --git a/reactos/base/services/dhcp/include/sysconf.h b/base/services/dhcp/include/sysconf.h similarity index 100% rename from reactos/base/services/dhcp/include/sysconf.h rename to base/services/dhcp/include/sysconf.h diff --git a/reactos/base/services/dhcp/include/tree.h b/base/services/dhcp/include/tree.h similarity index 100% rename from reactos/base/services/dhcp/include/tree.h rename to base/services/dhcp/include/tree.h diff --git a/reactos/base/services/dhcp/include/version.h b/base/services/dhcp/include/version.h similarity index 100% rename from reactos/base/services/dhcp/include/version.h rename to base/services/dhcp/include/version.h diff --git a/reactos/base/services/dhcp/memory.c b/base/services/dhcp/memory.c similarity index 100% rename from reactos/base/services/dhcp/memory.c rename to base/services/dhcp/memory.c diff --git a/reactos/base/services/dhcp/options.c b/base/services/dhcp/options.c similarity index 100% rename from reactos/base/services/dhcp/options.c rename to base/services/dhcp/options.c diff --git a/reactos/base/services/dhcp/pipe.c b/base/services/dhcp/pipe.c similarity index 100% rename from reactos/base/services/dhcp/pipe.c rename to base/services/dhcp/pipe.c diff --git a/reactos/base/services/dhcp/privsep.c b/base/services/dhcp/privsep.c similarity index 100% rename from reactos/base/services/dhcp/privsep.c rename to base/services/dhcp/privsep.c diff --git a/reactos/base/services/dhcp/socket.c b/base/services/dhcp/socket.c similarity index 100% rename from reactos/base/services/dhcp/socket.c rename to base/services/dhcp/socket.c diff --git a/reactos/base/services/dhcp/tables.c b/base/services/dhcp/tables.c similarity index 100% rename from reactos/base/services/dhcp/tables.c rename to base/services/dhcp/tables.c diff --git a/reactos/base/services/dhcp/timer.c b/base/services/dhcp/timer.c similarity index 100% rename from reactos/base/services/dhcp/timer.c rename to base/services/dhcp/timer.c diff --git a/reactos/base/services/dhcp/tree.c b/base/services/dhcp/tree.c similarity index 100% rename from reactos/base/services/dhcp/tree.c rename to base/services/dhcp/tree.c diff --git a/reactos/base/services/dhcp/util.c b/base/services/dhcp/util.c similarity index 100% rename from reactos/base/services/dhcp/util.c rename to base/services/dhcp/util.c diff --git a/reactos/base/services/eventlog/eventlog.c b/base/services/eventlog/eventlog.c similarity index 100% rename from reactos/base/services/eventlog/eventlog.c rename to base/services/eventlog/eventlog.c diff --git a/reactos/base/services/eventlog/eventlog.h b/base/services/eventlog/eventlog.h similarity index 100% rename from reactos/base/services/eventlog/eventlog.h rename to base/services/eventlog/eventlog.h diff --git a/reactos/base/services/eventlog/eventlog.rbuild b/base/services/eventlog/eventlog.rbuild similarity index 100% rename from reactos/base/services/eventlog/eventlog.rbuild rename to base/services/eventlog/eventlog.rbuild diff --git a/reactos/base/services/eventlog/eventlog.rc b/base/services/eventlog/eventlog.rc similarity index 100% rename from reactos/base/services/eventlog/eventlog.rc rename to base/services/eventlog/eventlog.rc diff --git a/reactos/base/services/eventlog/file.c b/base/services/eventlog/file.c similarity index 100% rename from reactos/base/services/eventlog/file.c rename to base/services/eventlog/file.c diff --git a/reactos/base/services/eventlog/logport.c b/base/services/eventlog/logport.c similarity index 100% rename from reactos/base/services/eventlog/logport.c rename to base/services/eventlog/logport.c diff --git a/reactos/base/services/eventlog/rpc.c b/base/services/eventlog/rpc.c similarity index 100% rename from reactos/base/services/eventlog/rpc.c rename to base/services/eventlog/rpc.c diff --git a/reactos/base/services/rpcss/endpoint.c b/base/services/rpcss/endpoint.c similarity index 100% rename from reactos/base/services/rpcss/endpoint.c rename to base/services/rpcss/endpoint.c diff --git a/reactos/base/services/rpcss/rpcss.c b/base/services/rpcss/rpcss.c similarity index 100% rename from reactos/base/services/rpcss/rpcss.c rename to base/services/rpcss/rpcss.c diff --git a/reactos/base/services/rpcss/rpcss.h b/base/services/rpcss/rpcss.h similarity index 100% rename from reactos/base/services/rpcss/rpcss.h rename to base/services/rpcss/rpcss.h diff --git a/reactos/base/services/rpcss/rpcss.rbuild b/base/services/rpcss/rpcss.rbuild similarity index 100% rename from reactos/base/services/rpcss/rpcss.rbuild rename to base/services/rpcss/rpcss.rbuild diff --git a/reactos/base/services/rpcss/rpcss.rc b/base/services/rpcss/rpcss.rc similarity index 100% rename from reactos/base/services/rpcss/rpcss.rc rename to base/services/rpcss/rpcss.rc diff --git a/reactos/base/services/services.rbuild b/base/services/services.rbuild similarity index 100% rename from reactos/base/services/services.rbuild rename to base/services/services.rbuild diff --git a/reactos/base/services/spoolsv/spoolsv.c b/base/services/spoolsv/spoolsv.c similarity index 100% rename from reactos/base/services/spoolsv/spoolsv.c rename to base/services/spoolsv/spoolsv.c diff --git a/reactos/base/services/spoolsv/spoolsv.rbuild b/base/services/spoolsv/spoolsv.rbuild similarity index 100% rename from reactos/base/services/spoolsv/spoolsv.rbuild rename to base/services/spoolsv/spoolsv.rbuild diff --git a/reactos/base/services/spoolsv/spoolsv.rc b/base/services/spoolsv/spoolsv.rc similarity index 100% rename from reactos/base/services/spoolsv/spoolsv.rc rename to base/services/spoolsv/spoolsv.rc diff --git a/reactos/base/services/svchost/svchost.c b/base/services/svchost/svchost.c similarity index 100% rename from reactos/base/services/svchost/svchost.c rename to base/services/svchost/svchost.c diff --git a/reactos/base/services/svchost/svchost.h b/base/services/svchost/svchost.h similarity index 100% rename from reactos/base/services/svchost/svchost.h rename to base/services/svchost/svchost.h diff --git a/reactos/base/services/svchost/svchost.rbuild b/base/services/svchost/svchost.rbuild similarity index 100% rename from reactos/base/services/svchost/svchost.rbuild rename to base/services/svchost/svchost.rbuild diff --git a/reactos/base/services/svchost/svchost.rc b/base/services/svchost/svchost.rc similarity index 100% rename from reactos/base/services/svchost/svchost.rc rename to base/services/svchost/svchost.rc diff --git a/reactos/base/services/tcpsvcs/chargen.c b/base/services/tcpsvcs/chargen.c similarity index 100% rename from reactos/base/services/tcpsvcs/chargen.c rename to base/services/tcpsvcs/chargen.c diff --git a/reactos/base/services/tcpsvcs/daytime.c b/base/services/tcpsvcs/daytime.c similarity index 100% rename from reactos/base/services/tcpsvcs/daytime.c rename to base/services/tcpsvcs/daytime.c diff --git a/reactos/base/services/tcpsvcs/discard.c b/base/services/tcpsvcs/discard.c similarity index 100% rename from reactos/base/services/tcpsvcs/discard.c rename to base/services/tcpsvcs/discard.c diff --git a/reactos/base/services/tcpsvcs/echo.c b/base/services/tcpsvcs/echo.c similarity index 100% rename from reactos/base/services/tcpsvcs/echo.c rename to base/services/tcpsvcs/echo.c diff --git a/reactos/base/services/tcpsvcs/log.c b/base/services/tcpsvcs/log.c similarity index 100% rename from reactos/base/services/tcpsvcs/log.c rename to base/services/tcpsvcs/log.c diff --git a/reactos/base/services/tcpsvcs/qotd.c b/base/services/tcpsvcs/qotd.c similarity index 100% rename from reactos/base/services/tcpsvcs/qotd.c rename to base/services/tcpsvcs/qotd.c diff --git a/reactos/base/services/tcpsvcs/quotes b/base/services/tcpsvcs/quotes similarity index 100% rename from reactos/base/services/tcpsvcs/quotes rename to base/services/tcpsvcs/quotes diff --git a/reactos/base/services/tcpsvcs/skelserver.c b/base/services/tcpsvcs/skelserver.c similarity index 100% rename from reactos/base/services/tcpsvcs/skelserver.c rename to base/services/tcpsvcs/skelserver.c diff --git a/reactos/base/services/tcpsvcs/tcpsvcs.c b/base/services/tcpsvcs/tcpsvcs.c similarity index 100% rename from reactos/base/services/tcpsvcs/tcpsvcs.c rename to base/services/tcpsvcs/tcpsvcs.c diff --git a/reactos/base/services/tcpsvcs/tcpsvcs.h b/base/services/tcpsvcs/tcpsvcs.h similarity index 100% rename from reactos/base/services/tcpsvcs/tcpsvcs.h rename to base/services/tcpsvcs/tcpsvcs.h diff --git a/reactos/base/services/tcpsvcs/tcpsvcs.rbuild b/base/services/tcpsvcs/tcpsvcs.rbuild similarity index 100% rename from reactos/base/services/tcpsvcs/tcpsvcs.rbuild rename to base/services/tcpsvcs/tcpsvcs.rbuild diff --git a/reactos/base/services/tcpsvcs/tcpsvcs.rc b/base/services/tcpsvcs/tcpsvcs.rc similarity index 100% rename from reactos/base/services/tcpsvcs/tcpsvcs.rc rename to base/services/tcpsvcs/tcpsvcs.rc diff --git a/reactos/base/services/umpnpmgr/umpnpmgr.c b/base/services/umpnpmgr/umpnpmgr.c similarity index 100% rename from reactos/base/services/umpnpmgr/umpnpmgr.c rename to base/services/umpnpmgr/umpnpmgr.c diff --git a/reactos/base/services/umpnpmgr/umpnpmgr.rbuild b/base/services/umpnpmgr/umpnpmgr.rbuild similarity index 100% rename from reactos/base/services/umpnpmgr/umpnpmgr.rbuild rename to base/services/umpnpmgr/umpnpmgr.rbuild diff --git a/reactos/base/services/umpnpmgr/umpnpmgr.rc b/base/services/umpnpmgr/umpnpmgr.rc similarity index 100% rename from reactos/base/services/umpnpmgr/umpnpmgr.rc rename to base/services/umpnpmgr/umpnpmgr.rc diff --git a/reactos/base/setup/reactos/lang/bg-BG.rc b/base/setup/reactos/lang/bg-BG.rc similarity index 100% rename from reactos/base/setup/reactos/lang/bg-BG.rc rename to base/setup/reactos/lang/bg-BG.rc diff --git a/reactos/base/setup/reactos/lang/cs-CZ.rc b/base/setup/reactos/lang/cs-CZ.rc similarity index 100% rename from reactos/base/setup/reactos/lang/cs-CZ.rc rename to base/setup/reactos/lang/cs-CZ.rc diff --git a/reactos/base/setup/reactos/lang/de-DE.rc b/base/setup/reactos/lang/de-DE.rc similarity index 100% rename from reactos/base/setup/reactos/lang/de-DE.rc rename to base/setup/reactos/lang/de-DE.rc diff --git a/reactos/base/setup/reactos/lang/el-GR.rc b/base/setup/reactos/lang/el-GR.rc similarity index 100% rename from reactos/base/setup/reactos/lang/el-GR.rc rename to base/setup/reactos/lang/el-GR.rc diff --git a/reactos/base/setup/reactos/lang/en-US.rc b/base/setup/reactos/lang/en-US.rc similarity index 100% rename from reactos/base/setup/reactos/lang/en-US.rc rename to base/setup/reactos/lang/en-US.rc diff --git a/reactos/base/setup/reactos/lang/es-ES.rc b/base/setup/reactos/lang/es-ES.rc similarity index 100% rename from reactos/base/setup/reactos/lang/es-ES.rc rename to base/setup/reactos/lang/es-ES.rc diff --git a/reactos/base/setup/reactos/lang/fi-FI.rc b/base/setup/reactos/lang/fi-FI.rc similarity index 100% rename from reactos/base/setup/reactos/lang/fi-FI.rc rename to base/setup/reactos/lang/fi-FI.rc diff --git a/reactos/base/setup/reactos/lang/fr-FR.rc b/base/setup/reactos/lang/fr-FR.rc similarity index 100% rename from reactos/base/setup/reactos/lang/fr-FR.rc rename to base/setup/reactos/lang/fr-FR.rc diff --git a/reactos/base/setup/reactos/lang/hu-HU.rc b/base/setup/reactos/lang/hu-HU.rc similarity index 100% rename from reactos/base/setup/reactos/lang/hu-HU.rc rename to base/setup/reactos/lang/hu-HU.rc diff --git a/reactos/base/setup/reactos/lang/id-ID.rc b/base/setup/reactos/lang/id-ID.rc similarity index 100% rename from reactos/base/setup/reactos/lang/id-ID.rc rename to base/setup/reactos/lang/id-ID.rc diff --git a/reactos/base/setup/reactos/lang/it-IT.rc b/base/setup/reactos/lang/it-IT.rc similarity index 100% rename from reactos/base/setup/reactos/lang/it-IT.rc rename to base/setup/reactos/lang/it-IT.rc diff --git a/reactos/base/setup/reactos/lang/ja-JP.rc b/base/setup/reactos/lang/ja-JP.rc similarity index 100% rename from reactos/base/setup/reactos/lang/ja-JP.rc rename to base/setup/reactos/lang/ja-JP.rc diff --git a/reactos/base/setup/reactos/lang/lt-LT.rc b/base/setup/reactos/lang/lt-LT.rc similarity index 100% rename from reactos/base/setup/reactos/lang/lt-LT.rc rename to base/setup/reactos/lang/lt-LT.rc diff --git a/reactos/base/setup/reactos/lang/nl-NL.rc b/base/setup/reactos/lang/nl-NL.rc similarity index 100% rename from reactos/base/setup/reactos/lang/nl-NL.rc rename to base/setup/reactos/lang/nl-NL.rc diff --git a/reactos/base/setup/reactos/lang/no-NO.rc b/base/setup/reactos/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/reactos/lang/no-NO.rc rename to base/setup/reactos/lang/no-NO.rc diff --git a/reactos/base/setup/reactos/lang/pl-PL.rc b/base/setup/reactos/lang/pl-PL.rc similarity index 100% rename from reactos/base/setup/reactos/lang/pl-PL.rc rename to base/setup/reactos/lang/pl-PL.rc diff --git a/reactos/base/setup/reactos/lang/pt-BR.rc b/base/setup/reactos/lang/pt-BR.rc similarity index 100% rename from reactos/base/setup/reactos/lang/pt-BR.rc rename to base/setup/reactos/lang/pt-BR.rc diff --git a/reactos/base/setup/reactos/lang/ru-RU.rc b/base/setup/reactos/lang/ru-RU.rc similarity index 100% rename from reactos/base/setup/reactos/lang/ru-RU.rc rename to base/setup/reactos/lang/ru-RU.rc diff --git a/reactos/base/setup/reactos/lang/sk-SK.rc b/base/setup/reactos/lang/sk-SK.rc similarity index 100% rename from reactos/base/setup/reactos/lang/sk-SK.rc rename to base/setup/reactos/lang/sk-SK.rc diff --git a/reactos/base/setup/reactos/lang/sv-SE.rc b/base/setup/reactos/lang/sv-SE.rc similarity index 100% rename from reactos/base/setup/reactos/lang/sv-SE.rc rename to base/setup/reactos/lang/sv-SE.rc diff --git a/reactos/base/setup/reactos/lang/th-TH.rc b/base/setup/reactos/lang/th-TH.rc similarity index 100% rename from reactos/base/setup/reactos/lang/th-TH.rc rename to base/setup/reactos/lang/th-TH.rc diff --git a/reactos/base/setup/reactos/lang/uk-UA.rc b/base/setup/reactos/lang/uk-UA.rc similarity index 100% rename from reactos/base/setup/reactos/lang/uk-UA.rc rename to base/setup/reactos/lang/uk-UA.rc diff --git a/reactos/base/setup/reactos/lang/zh-CN.rc b/base/setup/reactos/lang/zh-CN.rc similarity index 100% rename from reactos/base/setup/reactos/lang/zh-CN.rc rename to base/setup/reactos/lang/zh-CN.rc diff --git a/reactos/base/setup/reactos/reactos.c b/base/setup/reactos/reactos.c similarity index 100% rename from reactos/base/setup/reactos/reactos.c rename to base/setup/reactos/reactos.c diff --git a/reactos/base/setup/reactos/reactos.rbuild b/base/setup/reactos/reactos.rbuild similarity index 100% rename from reactos/base/setup/reactos/reactos.rbuild rename to base/setup/reactos/reactos.rbuild diff --git a/reactos/base/setup/reactos/reactos.rc b/base/setup/reactos/reactos.rc similarity index 100% rename from reactos/base/setup/reactos/reactos.rc rename to base/setup/reactos/reactos.rc diff --git a/reactos/base/setup/reactos/res/header.bmp b/base/setup/reactos/res/header.bmp similarity index 100% rename from reactos/base/setup/reactos/res/header.bmp rename to base/setup/reactos/res/header.bmp diff --git a/reactos/base/setup/reactos/res/reactos.ico b/base/setup/reactos/res/reactos.ico similarity index 100% rename from reactos/base/setup/reactos/res/reactos.ico rename to base/setup/reactos/res/reactos.ico diff --git a/reactos/base/setup/reactos/res/rosbitmap.bmp b/base/setup/reactos/res/rosbitmap.bmp similarity index 100% rename from reactos/base/setup/reactos/res/rosbitmap.bmp rename to base/setup/reactos/res/rosbitmap.bmp diff --git a/reactos/base/setup/reactos/res/watermark.bmp b/base/setup/reactos/res/watermark.bmp similarity index 100% rename from reactos/base/setup/reactos/res/watermark.bmp rename to base/setup/reactos/res/watermark.bmp diff --git a/reactos/base/setup/reactos/resource.h b/base/setup/reactos/resource.h similarity index 100% rename from reactos/base/setup/reactos/resource.h rename to base/setup/reactos/resource.h diff --git a/reactos/base/setup/reactos/rsrc.rc b/base/setup/reactos/rsrc.rc similarity index 100% rename from reactos/base/setup/reactos/rsrc.rc rename to base/setup/reactos/rsrc.rc diff --git a/reactos/base/setup/setup.rbuild b/base/setup/setup.rbuild similarity index 100% rename from reactos/base/setup/setup.rbuild rename to base/setup/setup.rbuild diff --git a/reactos/base/setup/setup/setup.c b/base/setup/setup/setup.c similarity index 100% rename from reactos/base/setup/setup/setup.c rename to base/setup/setup/setup.c diff --git a/reactos/base/setup/setup/setup.rbuild b/base/setup/setup/setup.rbuild similarity index 100% rename from reactos/base/setup/setup/setup.rbuild rename to base/setup/setup/setup.rbuild diff --git a/reactos/base/setup/setup/setup.rc b/base/setup/setup/setup.rc similarity index 100% rename from reactos/base/setup/setup/setup.rc rename to base/setup/setup/setup.rc diff --git a/reactos/base/setup/usetup/bootsup.c b/base/setup/usetup/bootsup.c similarity index 100% rename from reactos/base/setup/usetup/bootsup.c rename to base/setup/usetup/bootsup.c diff --git a/reactos/base/setup/usetup/bootsup.h b/base/setup/usetup/bootsup.h similarity index 100% rename from reactos/base/setup/usetup/bootsup.h rename to base/setup/usetup/bootsup.h diff --git a/reactos/base/setup/usetup/cabinet.c b/base/setup/usetup/cabinet.c similarity index 100% rename from reactos/base/setup/usetup/cabinet.c rename to base/setup/usetup/cabinet.c diff --git a/reactos/base/setup/usetup/cabinet.h b/base/setup/usetup/cabinet.h similarity index 100% rename from reactos/base/setup/usetup/cabinet.h rename to base/setup/usetup/cabinet.h diff --git a/reactos/base/setup/usetup/chkdsk.c b/base/setup/usetup/chkdsk.c similarity index 100% rename from reactos/base/setup/usetup/chkdsk.c rename to base/setup/usetup/chkdsk.c diff --git a/reactos/base/setup/usetup/chkdsk.h b/base/setup/usetup/chkdsk.h similarity index 100% rename from reactos/base/setup/usetup/chkdsk.h rename to base/setup/usetup/chkdsk.h diff --git a/reactos/base/setup/usetup/drivesup.c b/base/setup/usetup/drivesup.c similarity index 100% rename from reactos/base/setup/usetup/drivesup.c rename to base/setup/usetup/drivesup.c diff --git a/reactos/base/setup/usetup/drivesup.h b/base/setup/usetup/drivesup.h similarity index 100% rename from reactos/base/setup/usetup/drivesup.h rename to base/setup/usetup/drivesup.h diff --git a/reactos/base/setup/usetup/errorcode.h b/base/setup/usetup/errorcode.h similarity index 100% rename from reactos/base/setup/usetup/errorcode.h rename to base/setup/usetup/errorcode.h diff --git a/reactos/base/setup/usetup/filequeue.c b/base/setup/usetup/filequeue.c similarity index 100% rename from reactos/base/setup/usetup/filequeue.c rename to base/setup/usetup/filequeue.c diff --git a/reactos/base/setup/usetup/filequeue.h b/base/setup/usetup/filequeue.h similarity index 100% rename from reactos/base/setup/usetup/filequeue.h rename to base/setup/usetup/filequeue.h diff --git a/reactos/base/setup/usetup/filesup.c b/base/setup/usetup/filesup.c similarity index 100% rename from reactos/base/setup/usetup/filesup.c rename to base/setup/usetup/filesup.c diff --git a/reactos/base/setup/usetup/filesup.h b/base/setup/usetup/filesup.h similarity index 100% rename from reactos/base/setup/usetup/filesup.h rename to base/setup/usetup/filesup.h diff --git a/reactos/base/setup/usetup/format.c b/base/setup/usetup/format.c similarity index 100% rename from reactos/base/setup/usetup/format.c rename to base/setup/usetup/format.c diff --git a/reactos/base/setup/usetup/format.h b/base/setup/usetup/format.h similarity index 100% rename from reactos/base/setup/usetup/format.h rename to base/setup/usetup/format.h diff --git a/reactos/base/setup/usetup/fslist.c b/base/setup/usetup/fslist.c similarity index 100% rename from reactos/base/setup/usetup/fslist.c rename to base/setup/usetup/fslist.c diff --git a/reactos/base/setup/usetup/fslist.h b/base/setup/usetup/fslist.h similarity index 100% rename from reactos/base/setup/usetup/fslist.h rename to base/setup/usetup/fslist.h diff --git a/reactos/base/setup/usetup/genlist.c b/base/setup/usetup/genlist.c similarity index 100% rename from reactos/base/setup/usetup/genlist.c rename to base/setup/usetup/genlist.c diff --git a/reactos/base/setup/usetup/genlist.h b/base/setup/usetup/genlist.h similarity index 100% rename from reactos/base/setup/usetup/genlist.h rename to base/setup/usetup/genlist.h diff --git a/reactos/base/setup/usetup/host.h b/base/setup/usetup/host.h similarity index 100% rename from reactos/base/setup/usetup/host.h rename to base/setup/usetup/host.h diff --git a/reactos/base/setup/usetup/inffile.c b/base/setup/usetup/inffile.c similarity index 100% rename from reactos/base/setup/usetup/inffile.c rename to base/setup/usetup/inffile.c diff --git a/reactos/base/setup/usetup/inffile.h b/base/setup/usetup/inffile.h similarity index 100% rename from reactos/base/setup/usetup/inffile.h rename to base/setup/usetup/inffile.h diff --git a/reactos/base/setup/usetup/inicache.c b/base/setup/usetup/inicache.c similarity index 100% rename from reactos/base/setup/usetup/inicache.c rename to base/setup/usetup/inicache.c diff --git a/reactos/base/setup/usetup/inicache.h b/base/setup/usetup/inicache.h similarity index 100% rename from reactos/base/setup/usetup/inicache.h rename to base/setup/usetup/inicache.h diff --git a/reactos/base/setup/usetup/interface/consup.c b/base/setup/usetup/interface/consup.c similarity index 100% rename from reactos/base/setup/usetup/interface/consup.c rename to base/setup/usetup/interface/consup.c diff --git a/reactos/base/setup/usetup/interface/consup.h b/base/setup/usetup/interface/consup.h similarity index 100% rename from reactos/base/setup/usetup/interface/consup.h rename to base/setup/usetup/interface/consup.h diff --git a/reactos/base/setup/usetup/interface/devinst.c b/base/setup/usetup/interface/devinst.c similarity index 100% rename from reactos/base/setup/usetup/interface/devinst.c rename to base/setup/usetup/interface/devinst.c diff --git a/reactos/base/setup/usetup/interface/usetup.c b/base/setup/usetup/interface/usetup.c similarity index 100% rename from reactos/base/setup/usetup/interface/usetup.c rename to base/setup/usetup/interface/usetup.c diff --git a/reactos/base/setup/usetup/lang/af-ZA.h b/base/setup/usetup/lang/af-ZA.h similarity index 100% rename from reactos/base/setup/usetup/lang/af-ZA.h rename to base/setup/usetup/lang/af-ZA.h diff --git a/reactos/base/setup/usetup/lang/ar-AE.h b/base/setup/usetup/lang/ar-AE.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-AE.h rename to base/setup/usetup/lang/ar-AE.h diff --git a/reactos/base/setup/usetup/lang/ar-BH.h b/base/setup/usetup/lang/ar-BH.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-BH.h rename to base/setup/usetup/lang/ar-BH.h diff --git a/reactos/base/setup/usetup/lang/ar-DZ.h b/base/setup/usetup/lang/ar-DZ.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-DZ.h rename to base/setup/usetup/lang/ar-DZ.h diff --git a/reactos/base/setup/usetup/lang/ar-EG.h b/base/setup/usetup/lang/ar-EG.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-EG.h rename to base/setup/usetup/lang/ar-EG.h diff --git a/reactos/base/setup/usetup/lang/ar-IQ.h b/base/setup/usetup/lang/ar-IQ.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-IQ.h rename to base/setup/usetup/lang/ar-IQ.h diff --git a/reactos/base/setup/usetup/lang/ar-JO.h b/base/setup/usetup/lang/ar-JO.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-JO.h rename to base/setup/usetup/lang/ar-JO.h diff --git a/reactos/base/setup/usetup/lang/ar-KW.h b/base/setup/usetup/lang/ar-KW.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-KW.h rename to base/setup/usetup/lang/ar-KW.h diff --git a/reactos/base/setup/usetup/lang/ar-LB.h b/base/setup/usetup/lang/ar-LB.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-LB.h rename to base/setup/usetup/lang/ar-LB.h diff --git a/reactos/base/setup/usetup/lang/ar-LY.h b/base/setup/usetup/lang/ar-LY.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-LY.h rename to base/setup/usetup/lang/ar-LY.h diff --git a/reactos/base/setup/usetup/lang/ar-MA.h b/base/setup/usetup/lang/ar-MA.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-MA.h rename to base/setup/usetup/lang/ar-MA.h diff --git a/reactos/base/setup/usetup/lang/ar-OM.h b/base/setup/usetup/lang/ar-OM.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-OM.h rename to base/setup/usetup/lang/ar-OM.h diff --git a/reactos/base/setup/usetup/lang/ar-QA.h b/base/setup/usetup/lang/ar-QA.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-QA.h rename to base/setup/usetup/lang/ar-QA.h diff --git a/reactos/base/setup/usetup/lang/ar-SA.h b/base/setup/usetup/lang/ar-SA.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-SA.h rename to base/setup/usetup/lang/ar-SA.h diff --git a/reactos/base/setup/usetup/lang/ar-SY.h b/base/setup/usetup/lang/ar-SY.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-SY.h rename to base/setup/usetup/lang/ar-SY.h diff --git a/reactos/base/setup/usetup/lang/ar-TN.h b/base/setup/usetup/lang/ar-TN.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-TN.h rename to base/setup/usetup/lang/ar-TN.h diff --git a/reactos/base/setup/usetup/lang/ar-YE.h b/base/setup/usetup/lang/ar-YE.h similarity index 100% rename from reactos/base/setup/usetup/lang/ar-YE.h rename to base/setup/usetup/lang/ar-YE.h diff --git a/reactos/base/setup/usetup/lang/az-AZ.h b/base/setup/usetup/lang/az-AZ.h similarity index 100% rename from reactos/base/setup/usetup/lang/az-AZ.h rename to base/setup/usetup/lang/az-AZ.h diff --git a/reactos/base/setup/usetup/lang/be-BY.h b/base/setup/usetup/lang/be-BY.h similarity index 100% rename from reactos/base/setup/usetup/lang/be-BY.h rename to base/setup/usetup/lang/be-BY.h diff --git a/reactos/base/setup/usetup/lang/bg-BG.h b/base/setup/usetup/lang/bg-BG.h similarity index 100% rename from reactos/base/setup/usetup/lang/bg-BG.h rename to base/setup/usetup/lang/bg-BG.h diff --git a/reactos/base/setup/usetup/lang/ca-ES.h b/base/setup/usetup/lang/ca-ES.h similarity index 100% rename from reactos/base/setup/usetup/lang/ca-ES.h rename to base/setup/usetup/lang/ca-ES.h diff --git a/reactos/base/setup/usetup/lang/cs-CZ.h b/base/setup/usetup/lang/cs-CZ.h similarity index 100% rename from reactos/base/setup/usetup/lang/cs-CZ.h rename to base/setup/usetup/lang/cs-CZ.h diff --git a/reactos/base/setup/usetup/lang/da-DK.h b/base/setup/usetup/lang/da-DK.h similarity index 100% rename from reactos/base/setup/usetup/lang/da-DK.h rename to base/setup/usetup/lang/da-DK.h diff --git a/reactos/base/setup/usetup/lang/de-AT.h b/base/setup/usetup/lang/de-AT.h similarity index 100% rename from reactos/base/setup/usetup/lang/de-AT.h rename to base/setup/usetup/lang/de-AT.h diff --git a/reactos/base/setup/usetup/lang/de-CH.h b/base/setup/usetup/lang/de-CH.h similarity index 100% rename from reactos/base/setup/usetup/lang/de-CH.h rename to base/setup/usetup/lang/de-CH.h diff --git a/reactos/base/setup/usetup/lang/de-DE.h b/base/setup/usetup/lang/de-DE.h similarity index 100% rename from reactos/base/setup/usetup/lang/de-DE.h rename to base/setup/usetup/lang/de-DE.h diff --git a/reactos/base/setup/usetup/lang/de-LI.h b/base/setup/usetup/lang/de-LI.h similarity index 100% rename from reactos/base/setup/usetup/lang/de-LI.h rename to base/setup/usetup/lang/de-LI.h diff --git a/reactos/base/setup/usetup/lang/de-LU.h b/base/setup/usetup/lang/de-LU.h similarity index 100% rename from reactos/base/setup/usetup/lang/de-LU.h rename to base/setup/usetup/lang/de-LU.h diff --git a/reactos/base/setup/usetup/lang/dv-MV.h b/base/setup/usetup/lang/dv-MV.h similarity index 100% rename from reactos/base/setup/usetup/lang/dv-MV.h rename to base/setup/usetup/lang/dv-MV.h diff --git a/reactos/base/setup/usetup/lang/el-GR.h b/base/setup/usetup/lang/el-GR.h similarity index 100% rename from reactos/base/setup/usetup/lang/el-GR.h rename to base/setup/usetup/lang/el-GR.h diff --git a/reactos/base/setup/usetup/lang/en-AU.h b/base/setup/usetup/lang/en-AU.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-AU.h rename to base/setup/usetup/lang/en-AU.h diff --git a/reactos/base/setup/usetup/lang/en-BZ.h b/base/setup/usetup/lang/en-BZ.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-BZ.h rename to base/setup/usetup/lang/en-BZ.h diff --git a/reactos/base/setup/usetup/lang/en-CA.h b/base/setup/usetup/lang/en-CA.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-CA.h rename to base/setup/usetup/lang/en-CA.h diff --git a/reactos/base/setup/usetup/lang/en-CB.h b/base/setup/usetup/lang/en-CB.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-CB.h rename to base/setup/usetup/lang/en-CB.h diff --git a/reactos/base/setup/usetup/lang/en-GB.h b/base/setup/usetup/lang/en-GB.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-GB.h rename to base/setup/usetup/lang/en-GB.h diff --git a/reactos/base/setup/usetup/lang/en-IE.h b/base/setup/usetup/lang/en-IE.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-IE.h rename to base/setup/usetup/lang/en-IE.h diff --git a/reactos/base/setup/usetup/lang/en-JM.h b/base/setup/usetup/lang/en-JM.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-JM.h rename to base/setup/usetup/lang/en-JM.h diff --git a/reactos/base/setup/usetup/lang/en-NZ.h b/base/setup/usetup/lang/en-NZ.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-NZ.h rename to base/setup/usetup/lang/en-NZ.h diff --git a/reactos/base/setup/usetup/lang/en-PH.h b/base/setup/usetup/lang/en-PH.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-PH.h rename to base/setup/usetup/lang/en-PH.h diff --git a/reactos/base/setup/usetup/lang/en-TT.h b/base/setup/usetup/lang/en-TT.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-TT.h rename to base/setup/usetup/lang/en-TT.h diff --git a/reactos/base/setup/usetup/lang/en-US.h b/base/setup/usetup/lang/en-US.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-US.h rename to base/setup/usetup/lang/en-US.h diff --git a/reactos/base/setup/usetup/lang/en-ZA.h b/base/setup/usetup/lang/en-ZA.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-ZA.h rename to base/setup/usetup/lang/en-ZA.h diff --git a/reactos/base/setup/usetup/lang/en-ZW.h b/base/setup/usetup/lang/en-ZW.h similarity index 100% rename from reactos/base/setup/usetup/lang/en-ZW.h rename to base/setup/usetup/lang/en-ZW.h diff --git a/reactos/base/setup/usetup/lang/es-AR.h b/base/setup/usetup/lang/es-AR.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-AR.h rename to base/setup/usetup/lang/es-AR.h diff --git a/reactos/base/setup/usetup/lang/es-BO.h b/base/setup/usetup/lang/es-BO.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-BO.h rename to base/setup/usetup/lang/es-BO.h diff --git a/reactos/base/setup/usetup/lang/es-CL.h b/base/setup/usetup/lang/es-CL.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-CL.h rename to base/setup/usetup/lang/es-CL.h diff --git a/reactos/base/setup/usetup/lang/es-CO.h b/base/setup/usetup/lang/es-CO.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-CO.h rename to base/setup/usetup/lang/es-CO.h diff --git a/reactos/base/setup/usetup/lang/es-CR.h b/base/setup/usetup/lang/es-CR.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-CR.h rename to base/setup/usetup/lang/es-CR.h diff --git a/reactos/base/setup/usetup/lang/es-DO.h b/base/setup/usetup/lang/es-DO.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-DO.h rename to base/setup/usetup/lang/es-DO.h diff --git a/reactos/base/setup/usetup/lang/es-EC.h b/base/setup/usetup/lang/es-EC.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-EC.h rename to base/setup/usetup/lang/es-EC.h diff --git a/reactos/base/setup/usetup/lang/es-ES.h b/base/setup/usetup/lang/es-ES.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-ES.h rename to base/setup/usetup/lang/es-ES.h diff --git a/reactos/base/setup/usetup/lang/es-GT.h b/base/setup/usetup/lang/es-GT.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-GT.h rename to base/setup/usetup/lang/es-GT.h diff --git a/reactos/base/setup/usetup/lang/es-HN.h b/base/setup/usetup/lang/es-HN.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-HN.h rename to base/setup/usetup/lang/es-HN.h diff --git a/reactos/base/setup/usetup/lang/es-MX.h b/base/setup/usetup/lang/es-MX.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-MX.h rename to base/setup/usetup/lang/es-MX.h diff --git a/reactos/base/setup/usetup/lang/es-NI.h b/base/setup/usetup/lang/es-NI.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-NI.h rename to base/setup/usetup/lang/es-NI.h diff --git a/reactos/base/setup/usetup/lang/es-PA.h b/base/setup/usetup/lang/es-PA.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-PA.h rename to base/setup/usetup/lang/es-PA.h diff --git a/reactos/base/setup/usetup/lang/es-PE.h b/base/setup/usetup/lang/es-PE.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-PE.h rename to base/setup/usetup/lang/es-PE.h diff --git a/reactos/base/setup/usetup/lang/es-PR.h b/base/setup/usetup/lang/es-PR.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-PR.h rename to base/setup/usetup/lang/es-PR.h diff --git a/reactos/base/setup/usetup/lang/es-PY.h b/base/setup/usetup/lang/es-PY.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-PY.h rename to base/setup/usetup/lang/es-PY.h diff --git a/reactos/base/setup/usetup/lang/es-SV.h b/base/setup/usetup/lang/es-SV.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-SV.h rename to base/setup/usetup/lang/es-SV.h diff --git a/reactos/base/setup/usetup/lang/es-UY.h b/base/setup/usetup/lang/es-UY.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-UY.h rename to base/setup/usetup/lang/es-UY.h diff --git a/reactos/base/setup/usetup/lang/es-VE.h b/base/setup/usetup/lang/es-VE.h similarity index 100% rename from reactos/base/setup/usetup/lang/es-VE.h rename to base/setup/usetup/lang/es-VE.h diff --git a/reactos/base/setup/usetup/lang/et-EE.h b/base/setup/usetup/lang/et-EE.h similarity index 100% rename from reactos/base/setup/usetup/lang/et-EE.h rename to base/setup/usetup/lang/et-EE.h diff --git a/reactos/base/setup/usetup/lang/eu-ES.h b/base/setup/usetup/lang/eu-ES.h similarity index 100% rename from reactos/base/setup/usetup/lang/eu-ES.h rename to base/setup/usetup/lang/eu-ES.h diff --git a/reactos/base/setup/usetup/lang/fa-IR.h b/base/setup/usetup/lang/fa-IR.h similarity index 100% rename from reactos/base/setup/usetup/lang/fa-IR.h rename to base/setup/usetup/lang/fa-IR.h diff --git a/reactos/base/setup/usetup/lang/fi-FI.h b/base/setup/usetup/lang/fi-FI.h similarity index 100% rename from reactos/base/setup/usetup/lang/fi-FI.h rename to base/setup/usetup/lang/fi-FI.h diff --git a/reactos/base/setup/usetup/lang/fo-FO.h b/base/setup/usetup/lang/fo-FO.h similarity index 100% rename from reactos/base/setup/usetup/lang/fo-FO.h rename to base/setup/usetup/lang/fo-FO.h diff --git a/reactos/base/setup/usetup/lang/fr-BE.h b/base/setup/usetup/lang/fr-BE.h similarity index 100% rename from reactos/base/setup/usetup/lang/fr-BE.h rename to base/setup/usetup/lang/fr-BE.h diff --git a/reactos/base/setup/usetup/lang/fr-CA.h b/base/setup/usetup/lang/fr-CA.h similarity index 100% rename from reactos/base/setup/usetup/lang/fr-CA.h rename to base/setup/usetup/lang/fr-CA.h diff --git a/reactos/base/setup/usetup/lang/fr-CH.h b/base/setup/usetup/lang/fr-CH.h similarity index 100% rename from reactos/base/setup/usetup/lang/fr-CH.h rename to base/setup/usetup/lang/fr-CH.h diff --git a/reactos/base/setup/usetup/lang/fr-FR.h b/base/setup/usetup/lang/fr-FR.h similarity index 100% rename from reactos/base/setup/usetup/lang/fr-FR.h rename to base/setup/usetup/lang/fr-FR.h diff --git a/reactos/base/setup/usetup/lang/fr-LU.h b/base/setup/usetup/lang/fr-LU.h similarity index 100% rename from reactos/base/setup/usetup/lang/fr-LU.h rename to base/setup/usetup/lang/fr-LU.h diff --git a/reactos/base/setup/usetup/lang/fr-MC.h b/base/setup/usetup/lang/fr-MC.h similarity index 100% rename from reactos/base/setup/usetup/lang/fr-MC.h rename to base/setup/usetup/lang/fr-MC.h diff --git a/reactos/base/setup/usetup/lang/gl-ES.h b/base/setup/usetup/lang/gl-ES.h similarity index 100% rename from reactos/base/setup/usetup/lang/gl-ES.h rename to base/setup/usetup/lang/gl-ES.h diff --git a/reactos/base/setup/usetup/lang/gu-IN.h b/base/setup/usetup/lang/gu-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/gu-IN.h rename to base/setup/usetup/lang/gu-IN.h diff --git a/reactos/base/setup/usetup/lang/he-IL.h b/base/setup/usetup/lang/he-IL.h similarity index 100% rename from reactos/base/setup/usetup/lang/he-IL.h rename to base/setup/usetup/lang/he-IL.h diff --git a/reactos/base/setup/usetup/lang/hi-IN.h b/base/setup/usetup/lang/hi-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/hi-IN.h rename to base/setup/usetup/lang/hi-IN.h diff --git a/reactos/base/setup/usetup/lang/hr-HR.h b/base/setup/usetup/lang/hr-HR.h similarity index 100% rename from reactos/base/setup/usetup/lang/hr-HR.h rename to base/setup/usetup/lang/hr-HR.h diff --git a/reactos/base/setup/usetup/lang/hu-HU.h b/base/setup/usetup/lang/hu-HU.h similarity index 100% rename from reactos/base/setup/usetup/lang/hu-HU.h rename to base/setup/usetup/lang/hu-HU.h diff --git a/reactos/base/setup/usetup/lang/hy-AM.h b/base/setup/usetup/lang/hy-AM.h similarity index 100% rename from reactos/base/setup/usetup/lang/hy-AM.h rename to base/setup/usetup/lang/hy-AM.h diff --git a/reactos/base/setup/usetup/lang/id-ID.h b/base/setup/usetup/lang/id-ID.h similarity index 100% rename from reactos/base/setup/usetup/lang/id-ID.h rename to base/setup/usetup/lang/id-ID.h diff --git a/reactos/base/setup/usetup/lang/is-IS.h b/base/setup/usetup/lang/is-IS.h similarity index 100% rename from reactos/base/setup/usetup/lang/is-IS.h rename to base/setup/usetup/lang/is-IS.h diff --git a/reactos/base/setup/usetup/lang/it-CH.h b/base/setup/usetup/lang/it-CH.h similarity index 100% rename from reactos/base/setup/usetup/lang/it-CH.h rename to base/setup/usetup/lang/it-CH.h diff --git a/reactos/base/setup/usetup/lang/it-IT.h b/base/setup/usetup/lang/it-IT.h similarity index 100% rename from reactos/base/setup/usetup/lang/it-IT.h rename to base/setup/usetup/lang/it-IT.h diff --git a/reactos/base/setup/usetup/lang/ja-JP.h b/base/setup/usetup/lang/ja-JP.h similarity index 100% rename from reactos/base/setup/usetup/lang/ja-JP.h rename to base/setup/usetup/lang/ja-JP.h diff --git a/reactos/base/setup/usetup/lang/ka-GE.h b/base/setup/usetup/lang/ka-GE.h similarity index 100% rename from reactos/base/setup/usetup/lang/ka-GE.h rename to base/setup/usetup/lang/ka-GE.h diff --git a/reactos/base/setup/usetup/lang/kk-KZ.h b/base/setup/usetup/lang/kk-KZ.h similarity index 100% rename from reactos/base/setup/usetup/lang/kk-KZ.h rename to base/setup/usetup/lang/kk-KZ.h diff --git a/reactos/base/setup/usetup/lang/kn-IN.h b/base/setup/usetup/lang/kn-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/kn-IN.h rename to base/setup/usetup/lang/kn-IN.h diff --git a/reactos/base/setup/usetup/lang/ko-KR.h b/base/setup/usetup/lang/ko-KR.h similarity index 100% rename from reactos/base/setup/usetup/lang/ko-KR.h rename to base/setup/usetup/lang/ko-KR.h diff --git a/reactos/base/setup/usetup/lang/kok-IN.h b/base/setup/usetup/lang/kok-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/kok-IN.h rename to base/setup/usetup/lang/kok-IN.h diff --git a/reactos/base/setup/usetup/lang/ky-KG.h b/base/setup/usetup/lang/ky-KG.h similarity index 100% rename from reactos/base/setup/usetup/lang/ky-KG.h rename to base/setup/usetup/lang/ky-KG.h diff --git a/reactos/base/setup/usetup/lang/lt-LT.h b/base/setup/usetup/lang/lt-LT.h similarity index 100% rename from reactos/base/setup/usetup/lang/lt-LT.h rename to base/setup/usetup/lang/lt-LT.h diff --git a/reactos/base/setup/usetup/lang/lv-LV.h b/base/setup/usetup/lang/lv-LV.h similarity index 100% rename from reactos/base/setup/usetup/lang/lv-LV.h rename to base/setup/usetup/lang/lv-LV.h diff --git a/reactos/base/setup/usetup/lang/mk-MK.h b/base/setup/usetup/lang/mk-MK.h similarity index 100% rename from reactos/base/setup/usetup/lang/mk-MK.h rename to base/setup/usetup/lang/mk-MK.h diff --git a/reactos/base/setup/usetup/lang/mn-MN.h b/base/setup/usetup/lang/mn-MN.h similarity index 100% rename from reactos/base/setup/usetup/lang/mn-MN.h rename to base/setup/usetup/lang/mn-MN.h diff --git a/reactos/base/setup/usetup/lang/mr-IN.h b/base/setup/usetup/lang/mr-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/mr-IN.h rename to base/setup/usetup/lang/mr-IN.h diff --git a/reactos/base/setup/usetup/lang/ms-BN.h b/base/setup/usetup/lang/ms-BN.h similarity index 100% rename from reactos/base/setup/usetup/lang/ms-BN.h rename to base/setup/usetup/lang/ms-BN.h diff --git a/reactos/base/setup/usetup/lang/ms-MY.h b/base/setup/usetup/lang/ms-MY.h similarity index 100% rename from reactos/base/setup/usetup/lang/ms-MY.h rename to base/setup/usetup/lang/ms-MY.h diff --git a/reactos/base/setup/usetup/lang/nl-BE.h b/base/setup/usetup/lang/nl-BE.h similarity index 100% rename from reactos/base/setup/usetup/lang/nl-BE.h rename to base/setup/usetup/lang/nl-BE.h diff --git a/reactos/base/setup/usetup/lang/nl-NL.h b/base/setup/usetup/lang/nl-NL.h similarity index 100% rename from reactos/base/setup/usetup/lang/nl-NL.h rename to base/setup/usetup/lang/nl-NL.h diff --git a/reactos/base/setup/usetup/lang/nn-NO.h b/base/setup/usetup/lang/nn-NO.h similarity index 100% rename from reactos/base/setup/usetup/lang/nn-NO.h rename to base/setup/usetup/lang/nn-NO.h diff --git a/reactos/base/setup/usetup/lang/pa-IN.h b/base/setup/usetup/lang/pa-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/pa-IN.h rename to base/setup/usetup/lang/pa-IN.h diff --git a/reactos/base/setup/usetup/lang/pl-PL.h b/base/setup/usetup/lang/pl-PL.h similarity index 100% rename from reactos/base/setup/usetup/lang/pl-PL.h rename to base/setup/usetup/lang/pl-PL.h diff --git a/reactos/base/setup/usetup/lang/pt-BR.h b/base/setup/usetup/lang/pt-BR.h similarity index 100% rename from reactos/base/setup/usetup/lang/pt-BR.h rename to base/setup/usetup/lang/pt-BR.h diff --git a/reactos/base/setup/usetup/lang/pt-PT.h b/base/setup/usetup/lang/pt-PT.h similarity index 100% rename from reactos/base/setup/usetup/lang/pt-PT.h rename to base/setup/usetup/lang/pt-PT.h diff --git a/reactos/base/setup/usetup/lang/ro-RO.h b/base/setup/usetup/lang/ro-RO.h similarity index 100% rename from reactos/base/setup/usetup/lang/ro-RO.h rename to base/setup/usetup/lang/ro-RO.h diff --git a/reactos/base/setup/usetup/lang/ru-RU.h b/base/setup/usetup/lang/ru-RU.h similarity index 100% rename from reactos/base/setup/usetup/lang/ru-RU.h rename to base/setup/usetup/lang/ru-RU.h diff --git a/reactos/base/setup/usetup/lang/sa-IN.h b/base/setup/usetup/lang/sa-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/sa-IN.h rename to base/setup/usetup/lang/sa-IN.h diff --git a/reactos/base/setup/usetup/lang/sk-SK.h b/base/setup/usetup/lang/sk-SK.h similarity index 100% rename from reactos/base/setup/usetup/lang/sk-SK.h rename to base/setup/usetup/lang/sk-SK.h diff --git a/reactos/base/setup/usetup/lang/sl-SI.h b/base/setup/usetup/lang/sl-SI.h similarity index 100% rename from reactos/base/setup/usetup/lang/sl-SI.h rename to base/setup/usetup/lang/sl-SI.h diff --git a/reactos/base/setup/usetup/lang/sq-AL.h b/base/setup/usetup/lang/sq-AL.h similarity index 100% rename from reactos/base/setup/usetup/lang/sq-AL.h rename to base/setup/usetup/lang/sq-AL.h diff --git a/reactos/base/setup/usetup/lang/sr-SP.h b/base/setup/usetup/lang/sr-SP.h similarity index 100% rename from reactos/base/setup/usetup/lang/sr-SP.h rename to base/setup/usetup/lang/sr-SP.h diff --git a/reactos/base/setup/usetup/lang/sv-FI.h b/base/setup/usetup/lang/sv-FI.h similarity index 100% rename from reactos/base/setup/usetup/lang/sv-FI.h rename to base/setup/usetup/lang/sv-FI.h diff --git a/reactos/base/setup/usetup/lang/sv-SE.h b/base/setup/usetup/lang/sv-SE.h similarity index 100% rename from reactos/base/setup/usetup/lang/sv-SE.h rename to base/setup/usetup/lang/sv-SE.h diff --git a/reactos/base/setup/usetup/lang/sw-KE.h b/base/setup/usetup/lang/sw-KE.h similarity index 100% rename from reactos/base/setup/usetup/lang/sw-KE.h rename to base/setup/usetup/lang/sw-KE.h diff --git a/reactos/base/setup/usetup/lang/syr-SY.h b/base/setup/usetup/lang/syr-SY.h similarity index 100% rename from reactos/base/setup/usetup/lang/syr-SY.h rename to base/setup/usetup/lang/syr-SY.h diff --git a/reactos/base/setup/usetup/lang/ta-IN.h b/base/setup/usetup/lang/ta-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/ta-IN.h rename to base/setup/usetup/lang/ta-IN.h diff --git a/reactos/base/setup/usetup/lang/te-IN.h b/base/setup/usetup/lang/te-IN.h similarity index 100% rename from reactos/base/setup/usetup/lang/te-IN.h rename to base/setup/usetup/lang/te-IN.h diff --git a/reactos/base/setup/usetup/lang/th-TH.h b/base/setup/usetup/lang/th-TH.h similarity index 100% rename from reactos/base/setup/usetup/lang/th-TH.h rename to base/setup/usetup/lang/th-TH.h diff --git a/reactos/base/setup/usetup/lang/tr-TR.h b/base/setup/usetup/lang/tr-TR.h similarity index 100% rename from reactos/base/setup/usetup/lang/tr-TR.h rename to base/setup/usetup/lang/tr-TR.h diff --git a/reactos/base/setup/usetup/lang/tt-TA.h b/base/setup/usetup/lang/tt-TA.h similarity index 100% rename from reactos/base/setup/usetup/lang/tt-TA.h rename to base/setup/usetup/lang/tt-TA.h diff --git a/reactos/base/setup/usetup/lang/uk-UA.h b/base/setup/usetup/lang/uk-UA.h similarity index 100% rename from reactos/base/setup/usetup/lang/uk-UA.h rename to base/setup/usetup/lang/uk-UA.h diff --git a/reactos/base/setup/usetup/lang/ur-PK.h b/base/setup/usetup/lang/ur-PK.h similarity index 100% rename from reactos/base/setup/usetup/lang/ur-PK.h rename to base/setup/usetup/lang/ur-PK.h diff --git a/reactos/base/setup/usetup/lang/uz-UZ.h b/base/setup/usetup/lang/uz-UZ.h similarity index 100% rename from reactos/base/setup/usetup/lang/uz-UZ.h rename to base/setup/usetup/lang/uz-UZ.h diff --git a/reactos/base/setup/usetup/lang/vi-VN.h b/base/setup/usetup/lang/vi-VN.h similarity index 100% rename from reactos/base/setup/usetup/lang/vi-VN.h rename to base/setup/usetup/lang/vi-VN.h diff --git a/reactos/base/setup/usetup/lang/zh-CN.h b/base/setup/usetup/lang/zh-CN.h similarity index 100% rename from reactos/base/setup/usetup/lang/zh-CN.h rename to base/setup/usetup/lang/zh-CN.h diff --git a/reactos/base/setup/usetup/lang/zh-HK.h b/base/setup/usetup/lang/zh-HK.h similarity index 100% rename from reactos/base/setup/usetup/lang/zh-HK.h rename to base/setup/usetup/lang/zh-HK.h diff --git a/reactos/base/setup/usetup/lang/zh-MO.h b/base/setup/usetup/lang/zh-MO.h similarity index 100% rename from reactos/base/setup/usetup/lang/zh-MO.h rename to base/setup/usetup/lang/zh-MO.h diff --git a/reactos/base/setup/usetup/lang/zh-SG.h b/base/setup/usetup/lang/zh-SG.h similarity index 100% rename from reactos/base/setup/usetup/lang/zh-SG.h rename to base/setup/usetup/lang/zh-SG.h diff --git a/reactos/base/setup/usetup/lang/zh-TW.h b/base/setup/usetup/lang/zh-TW.h similarity index 100% rename from reactos/base/setup/usetup/lang/zh-TW.h rename to base/setup/usetup/lang/zh-TW.h diff --git a/reactos/base/setup/usetup/mui.c b/base/setup/usetup/mui.c similarity index 100% rename from reactos/base/setup/usetup/mui.c rename to base/setup/usetup/mui.c diff --git a/reactos/base/setup/usetup/mui.h b/base/setup/usetup/mui.h similarity index 100% rename from reactos/base/setup/usetup/mui.h rename to base/setup/usetup/mui.h diff --git a/reactos/base/setup/usetup/muifonts.h b/base/setup/usetup/muifonts.h similarity index 100% rename from reactos/base/setup/usetup/muifonts.h rename to base/setup/usetup/muifonts.h diff --git a/reactos/base/setup/usetup/muilanguages.h b/base/setup/usetup/muilanguages.h similarity index 100% rename from reactos/base/setup/usetup/muilanguages.h rename to base/setup/usetup/muilanguages.h diff --git a/reactos/base/setup/usetup/native/console.c b/base/setup/usetup/native/console.c similarity index 100% rename from reactos/base/setup/usetup/native/console.c rename to base/setup/usetup/native/console.c diff --git a/reactos/base/setup/usetup/native/fslist.c b/base/setup/usetup/native/fslist.c similarity index 100% rename from reactos/base/setup/usetup/native/fslist.c rename to base/setup/usetup/native/fslist.c diff --git a/reactos/base/setup/usetup/native/host_native.h b/base/setup/usetup/native/host_native.h similarity index 100% rename from reactos/base/setup/usetup/native/host_native.h rename to base/setup/usetup/native/host_native.h diff --git a/reactos/base/setup/usetup/native/utils/console.c b/base/setup/usetup/native/utils/console.c similarity index 100% rename from reactos/base/setup/usetup/native/utils/console.c rename to base/setup/usetup/native/utils/console.c diff --git a/reactos/base/setup/usetup/native/utils/console.h b/base/setup/usetup/native/utils/console.h similarity index 100% rename from reactos/base/setup/usetup/native/utils/console.h rename to base/setup/usetup/native/utils/console.h diff --git a/reactos/base/setup/usetup/native/utils/keytrans.c b/base/setup/usetup/native/utils/keytrans.c similarity index 100% rename from reactos/base/setup/usetup/native/utils/keytrans.c rename to base/setup/usetup/native/utils/keytrans.c diff --git a/reactos/base/setup/usetup/native/utils/keytrans.h b/base/setup/usetup/native/utils/keytrans.h similarity index 100% rename from reactos/base/setup/usetup/native/utils/keytrans.h rename to base/setup/usetup/native/utils/keytrans.h diff --git a/reactos/base/setup/usetup/partlist.c b/base/setup/usetup/partlist.c similarity index 100% rename from reactos/base/setup/usetup/partlist.c rename to base/setup/usetup/partlist.c diff --git a/reactos/base/setup/usetup/partlist.h b/base/setup/usetup/partlist.h similarity index 100% rename from reactos/base/setup/usetup/partlist.h rename to base/setup/usetup/partlist.h diff --git a/reactos/base/setup/usetup/progress.c b/base/setup/usetup/progress.c similarity index 100% rename from reactos/base/setup/usetup/progress.c rename to base/setup/usetup/progress.c diff --git a/reactos/base/setup/usetup/progress.h b/base/setup/usetup/progress.h similarity index 100% rename from reactos/base/setup/usetup/progress.h rename to base/setup/usetup/progress.h diff --git a/reactos/base/setup/usetup/registry.c b/base/setup/usetup/registry.c similarity index 100% rename from reactos/base/setup/usetup/registry.c rename to base/setup/usetup/registry.c diff --git a/reactos/base/setup/usetup/registry.h b/base/setup/usetup/registry.h similarity index 100% rename from reactos/base/setup/usetup/registry.h rename to base/setup/usetup/registry.h diff --git a/reactos/base/setup/usetup/settings.c b/base/setup/usetup/settings.c similarity index 100% rename from reactos/base/setup/usetup/settings.c rename to base/setup/usetup/settings.c diff --git a/reactos/base/setup/usetup/settings.h b/base/setup/usetup/settings.h similarity index 100% rename from reactos/base/setup/usetup/settings.h rename to base/setup/usetup/settings.h diff --git a/reactos/base/setup/usetup/usetup.h b/base/setup/usetup/usetup.h similarity index 100% rename from reactos/base/setup/usetup/usetup.h rename to base/setup/usetup/usetup.h diff --git a/reactos/base/setup/usetup/usetup.rbuild b/base/setup/usetup/usetup.rbuild similarity index 100% rename from reactos/base/setup/usetup/usetup.rbuild rename to base/setup/usetup/usetup.rbuild diff --git a/reactos/base/setup/usetup/usetup.rc b/base/setup/usetup/usetup.rc similarity index 100% rename from reactos/base/setup/usetup/usetup.rc rename to base/setup/usetup/usetup.rc diff --git a/reactos/base/setup/vmwinst/lang/bg-BG.rc b/base/setup/vmwinst/lang/bg-BG.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/bg-BG.rc rename to base/setup/vmwinst/lang/bg-BG.rc diff --git a/reactos/base/setup/vmwinst/lang/cs-CZ.rc b/base/setup/vmwinst/lang/cs-CZ.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/cs-CZ.rc rename to base/setup/vmwinst/lang/cs-CZ.rc diff --git a/reactos/base/setup/vmwinst/lang/da-DK.rc b/base/setup/vmwinst/lang/da-DK.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/da-DK.rc rename to base/setup/vmwinst/lang/da-DK.rc diff --git a/reactos/base/setup/vmwinst/lang/de-DE.rc b/base/setup/vmwinst/lang/de-DE.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/de-DE.rc rename to base/setup/vmwinst/lang/de-DE.rc diff --git a/reactos/base/setup/vmwinst/lang/el-GR.rc b/base/setup/vmwinst/lang/el-GR.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/el-GR.rc rename to base/setup/vmwinst/lang/el-GR.rc diff --git a/reactos/base/setup/vmwinst/lang/en-US.rc b/base/setup/vmwinst/lang/en-US.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/en-US.rc rename to base/setup/vmwinst/lang/en-US.rc diff --git a/reactos/base/setup/vmwinst/lang/es-ES.rc b/base/setup/vmwinst/lang/es-ES.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/es-ES.rc rename to base/setup/vmwinst/lang/es-ES.rc diff --git a/reactos/base/setup/vmwinst/lang/fr-FR.rc b/base/setup/vmwinst/lang/fr-FR.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/fr-FR.rc rename to base/setup/vmwinst/lang/fr-FR.rc diff --git a/reactos/base/setup/vmwinst/lang/hu-HU.rc b/base/setup/vmwinst/lang/hu-HU.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/hu-HU.rc rename to base/setup/vmwinst/lang/hu-HU.rc diff --git a/reactos/base/setup/vmwinst/lang/id-ID.rc b/base/setup/vmwinst/lang/id-ID.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/id-ID.rc rename to base/setup/vmwinst/lang/id-ID.rc diff --git a/reactos/base/setup/vmwinst/lang/it-IT.rc b/base/setup/vmwinst/lang/it-IT.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/it-IT.rc rename to base/setup/vmwinst/lang/it-IT.rc diff --git a/reactos/base/setup/vmwinst/lang/ja-JP.rc b/base/setup/vmwinst/lang/ja-JP.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/ja-JP.rc rename to base/setup/vmwinst/lang/ja-JP.rc diff --git a/reactos/base/setup/vmwinst/lang/lt-LT.rc b/base/setup/vmwinst/lang/lt-LT.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/lt-LT.rc rename to base/setup/vmwinst/lang/lt-LT.rc diff --git a/reactos/base/setup/vmwinst/lang/no-NO.rc b/base/setup/vmwinst/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/no-NO.rc rename to base/setup/vmwinst/lang/no-NO.rc diff --git a/reactos/base/setup/vmwinst/lang/pl-PL.rc b/base/setup/vmwinst/lang/pl-PL.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/pl-PL.rc rename to base/setup/vmwinst/lang/pl-PL.rc diff --git a/reactos/base/setup/vmwinst/lang/ru-RU.rc b/base/setup/vmwinst/lang/ru-RU.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/ru-RU.rc rename to base/setup/vmwinst/lang/ru-RU.rc diff --git a/reactos/base/setup/vmwinst/lang/sk-SK.rc b/base/setup/vmwinst/lang/sk-SK.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/sk-SK.rc rename to base/setup/vmwinst/lang/sk-SK.rc diff --git a/reactos/base/setup/vmwinst/lang/uk-UA.rc b/base/setup/vmwinst/lang/uk-UA.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/uk-UA.rc rename to base/setup/vmwinst/lang/uk-UA.rc diff --git a/reactos/base/setup/vmwinst/lang/zh-CN.rc b/base/setup/vmwinst/lang/zh-CN.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/zh-CN.rc rename to base/setup/vmwinst/lang/zh-CN.rc diff --git a/reactos/base/setup/vmwinst/resources/header.bmp b/base/setup/vmwinst/resources/header.bmp similarity index 100% rename from reactos/base/setup/vmwinst/resources/header.bmp rename to base/setup/vmwinst/resources/header.bmp diff --git a/reactos/base/setup/vmwinst/resources/watermark.bmp b/base/setup/vmwinst/resources/watermark.bmp similarity index 100% rename from reactos/base/setup/vmwinst/resources/watermark.bmp rename to base/setup/vmwinst/resources/watermark.bmp diff --git a/reactos/base/setup/vmwinst/rsrc.rc b/base/setup/vmwinst/rsrc.rc similarity index 100% rename from reactos/base/setup/vmwinst/rsrc.rc rename to base/setup/vmwinst/rsrc.rc diff --git a/reactos/base/setup/vmwinst/vmwinst.c b/base/setup/vmwinst/vmwinst.c similarity index 100% rename from reactos/base/setup/vmwinst/vmwinst.c rename to base/setup/vmwinst/vmwinst.c diff --git a/reactos/base/setup/vmwinst/vmwinst.h b/base/setup/vmwinst/vmwinst.h similarity index 100% rename from reactos/base/setup/vmwinst/vmwinst.h rename to base/setup/vmwinst/vmwinst.h diff --git a/reactos/base/setup/vmwinst/vmwinst.rbuild b/base/setup/vmwinst/vmwinst.rbuild similarity index 100% rename from reactos/base/setup/vmwinst/vmwinst.rbuild rename to base/setup/vmwinst/vmwinst.rbuild diff --git a/reactos/base/setup/vmwinst/vmwinst.rc b/base/setup/vmwinst/vmwinst.rc similarity index 100% rename from reactos/base/setup/vmwinst/vmwinst.rc rename to base/setup/vmwinst/vmwinst.rc diff --git a/reactos/base/setup/welcome/lang/bg-BG.rc b/base/setup/welcome/lang/bg-BG.rc similarity index 100% rename from reactos/base/setup/welcome/lang/bg-BG.rc rename to base/setup/welcome/lang/bg-BG.rc diff --git a/reactos/base/setup/welcome/lang/cs-CZ.rc b/base/setup/welcome/lang/cs-CZ.rc similarity index 100% rename from reactos/base/setup/welcome/lang/cs-CZ.rc rename to base/setup/welcome/lang/cs-CZ.rc diff --git a/reactos/base/setup/welcome/lang/da-DK.rc b/base/setup/welcome/lang/da-DK.rc similarity index 100% rename from reactos/base/setup/welcome/lang/da-DK.rc rename to base/setup/welcome/lang/da-DK.rc diff --git a/reactos/base/setup/welcome/lang/de-DE.rc b/base/setup/welcome/lang/de-DE.rc similarity index 100% rename from reactos/base/setup/welcome/lang/de-DE.rc rename to base/setup/welcome/lang/de-DE.rc diff --git a/reactos/base/setup/welcome/lang/el-GR.rc b/base/setup/welcome/lang/el-GR.rc similarity index 100% rename from reactos/base/setup/welcome/lang/el-GR.rc rename to base/setup/welcome/lang/el-GR.rc diff --git a/reactos/base/setup/welcome/lang/en-US.rc b/base/setup/welcome/lang/en-US.rc similarity index 100% rename from reactos/base/setup/welcome/lang/en-US.rc rename to base/setup/welcome/lang/en-US.rc diff --git a/reactos/base/setup/welcome/lang/es-ES.rc b/base/setup/welcome/lang/es-ES.rc similarity index 100% rename from reactos/base/setup/welcome/lang/es-ES.rc rename to base/setup/welcome/lang/es-ES.rc diff --git a/reactos/base/setup/welcome/lang/fr-FR.rc b/base/setup/welcome/lang/fr-FR.rc similarity index 100% rename from reactos/base/setup/welcome/lang/fr-FR.rc rename to base/setup/welcome/lang/fr-FR.rc diff --git a/reactos/base/setup/welcome/lang/hu-HU.rc b/base/setup/welcome/lang/hu-HU.rc similarity index 100% rename from reactos/base/setup/welcome/lang/hu-HU.rc rename to base/setup/welcome/lang/hu-HU.rc diff --git a/reactos/base/setup/welcome/lang/id-ID.rc b/base/setup/welcome/lang/id-ID.rc similarity index 100% rename from reactos/base/setup/welcome/lang/id-ID.rc rename to base/setup/welcome/lang/id-ID.rc diff --git a/reactos/base/setup/welcome/lang/it-IT.rc b/base/setup/welcome/lang/it-IT.rc similarity index 100% rename from reactos/base/setup/welcome/lang/it-IT.rc rename to base/setup/welcome/lang/it-IT.rc diff --git a/reactos/base/setup/welcome/lang/ja-JP.rc b/base/setup/welcome/lang/ja-JP.rc similarity index 100% rename from reactos/base/setup/welcome/lang/ja-JP.rc rename to base/setup/welcome/lang/ja-JP.rc diff --git a/reactos/base/setup/welcome/lang/lt-LT.rc b/base/setup/welcome/lang/lt-LT.rc similarity index 100% rename from reactos/base/setup/welcome/lang/lt-LT.rc rename to base/setup/welcome/lang/lt-LT.rc diff --git a/reactos/base/setup/welcome/lang/nl-NL.rc b/base/setup/welcome/lang/nl-NL.rc similarity index 100% rename from reactos/base/setup/welcome/lang/nl-NL.rc rename to base/setup/welcome/lang/nl-NL.rc diff --git a/reactos/base/setup/welcome/lang/no-NO.rc b/base/setup/welcome/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/welcome/lang/no-NO.rc rename to base/setup/welcome/lang/no-NO.rc diff --git a/reactos/base/setup/welcome/lang/pl-PL.rc b/base/setup/welcome/lang/pl-PL.rc similarity index 100% rename from reactos/base/setup/welcome/lang/pl-PL.rc rename to base/setup/welcome/lang/pl-PL.rc diff --git a/reactos/base/setup/welcome/lang/pt-BR.rc b/base/setup/welcome/lang/pt-BR.rc similarity index 100% rename from reactos/base/setup/welcome/lang/pt-BR.rc rename to base/setup/welcome/lang/pt-BR.rc diff --git a/reactos/base/setup/welcome/lang/ru-RU.rc b/base/setup/welcome/lang/ru-RU.rc similarity index 100% rename from reactos/base/setup/welcome/lang/ru-RU.rc rename to base/setup/welcome/lang/ru-RU.rc diff --git a/reactos/base/setup/welcome/lang/sk-SK.rc b/base/setup/welcome/lang/sk-SK.rc similarity index 100% rename from reactos/base/setup/welcome/lang/sk-SK.rc rename to base/setup/welcome/lang/sk-SK.rc diff --git a/reactos/base/setup/welcome/lang/sv-SE.rc b/base/setup/welcome/lang/sv-SE.rc similarity index 100% rename from reactos/base/setup/welcome/lang/sv-SE.rc rename to base/setup/welcome/lang/sv-SE.rc diff --git a/reactos/base/setup/welcome/lang/th-TH.rc b/base/setup/welcome/lang/th-TH.rc similarity index 100% rename from reactos/base/setup/welcome/lang/th-TH.rc rename to base/setup/welcome/lang/th-TH.rc diff --git a/reactos/base/setup/welcome/lang/uk-UA.rc b/base/setup/welcome/lang/uk-UA.rc similarity index 100% rename from reactos/base/setup/welcome/lang/uk-UA.rc rename to base/setup/welcome/lang/uk-UA.rc diff --git a/reactos/base/setup/welcome/lang/zh-CN.rc b/base/setup/welcome/lang/zh-CN.rc similarity index 100% rename from reactos/base/setup/welcome/lang/zh-CN.rc rename to base/setup/welcome/lang/zh-CN.rc diff --git a/reactos/base/setup/welcome/res/title.bmp b/base/setup/welcome/res/title.bmp similarity index 100% rename from reactos/base/setup/welcome/res/title.bmp rename to base/setup/welcome/res/title.bmp diff --git a/reactos/base/setup/welcome/res/welcome.ico b/base/setup/welcome/res/welcome.ico similarity index 100% rename from reactos/base/setup/welcome/res/welcome.ico rename to base/setup/welcome/res/welcome.ico diff --git a/reactos/base/setup/welcome/resource.h b/base/setup/welcome/resource.h similarity index 100% rename from reactos/base/setup/welcome/resource.h rename to base/setup/welcome/resource.h diff --git a/reactos/base/setup/welcome/rsrc.rc b/base/setup/welcome/rsrc.rc similarity index 100% rename from reactos/base/setup/welcome/rsrc.rc rename to base/setup/welcome/rsrc.rc diff --git a/reactos/base/setup/welcome/welcome.c b/base/setup/welcome/welcome.c similarity index 100% rename from reactos/base/setup/welcome/welcome.c rename to base/setup/welcome/welcome.c diff --git a/reactos/base/setup/welcome/welcome.rbuild b/base/setup/welcome/welcome.rbuild similarity index 100% rename from reactos/base/setup/welcome/welcome.rbuild rename to base/setup/welcome/welcome.rbuild diff --git a/reactos/base/setup/welcome/welcome.rc b/base/setup/welcome/welcome.rc similarity index 100% rename from reactos/base/setup/welcome/welcome.rc rename to base/setup/welcome/welcome.rc diff --git a/reactos/base/shell/cmd/alias.c b/base/shell/cmd/alias.c similarity index 100% rename from reactos/base/shell/cmd/alias.c rename to base/shell/cmd/alias.c diff --git a/reactos/base/shell/cmd/attrib.c b/base/shell/cmd/attrib.c similarity index 100% rename from reactos/base/shell/cmd/attrib.c rename to base/shell/cmd/attrib.c diff --git a/reactos/base/shell/cmd/batch.c b/base/shell/cmd/batch.c similarity index 100% rename from reactos/base/shell/cmd/batch.c rename to base/shell/cmd/batch.c diff --git a/reactos/base/shell/cmd/batch.h b/base/shell/cmd/batch.h similarity index 100% rename from reactos/base/shell/cmd/batch.h rename to base/shell/cmd/batch.h diff --git a/reactos/base/shell/cmd/beep.c b/base/shell/cmd/beep.c similarity index 100% rename from reactos/base/shell/cmd/beep.c rename to base/shell/cmd/beep.c diff --git a/reactos/base/shell/cmd/call.c b/base/shell/cmd/call.c similarity index 100% rename from reactos/base/shell/cmd/call.c rename to base/shell/cmd/call.c diff --git a/reactos/base/shell/cmd/chcp.c b/base/shell/cmd/chcp.c similarity index 100% rename from reactos/base/shell/cmd/chcp.c rename to base/shell/cmd/chcp.c diff --git a/reactos/base/shell/cmd/choice.c b/base/shell/cmd/choice.c similarity index 100% rename from reactos/base/shell/cmd/choice.c rename to base/shell/cmd/choice.c diff --git a/reactos/base/shell/cmd/cls.c b/base/shell/cmd/cls.c similarity index 100% rename from reactos/base/shell/cmd/cls.c rename to base/shell/cmd/cls.c diff --git a/reactos/base/shell/cmd/cmd.c b/base/shell/cmd/cmd.c similarity index 100% rename from reactos/base/shell/cmd/cmd.c rename to base/shell/cmd/cmd.c diff --git a/reactos/base/shell/cmd/cmd.h b/base/shell/cmd/cmd.h similarity index 100% rename from reactos/base/shell/cmd/cmd.h rename to base/shell/cmd/cmd.h diff --git a/reactos/base/shell/cmd/cmd.rbuild b/base/shell/cmd/cmd.rbuild similarity index 100% rename from reactos/base/shell/cmd/cmd.rbuild rename to base/shell/cmd/cmd.rbuild diff --git a/reactos/base/shell/cmd/cmd.rc b/base/shell/cmd/cmd.rc similarity index 100% rename from reactos/base/shell/cmd/cmd.rc rename to base/shell/cmd/cmd.rc diff --git a/reactos/base/shell/cmd/cmddbg.c b/base/shell/cmd/cmddbg.c similarity index 100% rename from reactos/base/shell/cmd/cmddbg.c rename to base/shell/cmd/cmddbg.c diff --git a/reactos/base/shell/cmd/cmddbg.h b/base/shell/cmd/cmddbg.h similarity index 100% rename from reactos/base/shell/cmd/cmddbg.h rename to base/shell/cmd/cmddbg.h diff --git a/reactos/base/shell/cmd/cmdinput.c b/base/shell/cmd/cmdinput.c similarity index 100% rename from reactos/base/shell/cmd/cmdinput.c rename to base/shell/cmd/cmdinput.c diff --git a/reactos/base/shell/cmd/cmdtable.c b/base/shell/cmd/cmdtable.c similarity index 100% rename from reactos/base/shell/cmd/cmdtable.c rename to base/shell/cmd/cmdtable.c diff --git a/reactos/base/shell/cmd/cmdver.h b/base/shell/cmd/cmdver.h similarity index 100% rename from reactos/base/shell/cmd/cmdver.h rename to base/shell/cmd/cmdver.h diff --git a/reactos/base/shell/cmd/color.c b/base/shell/cmd/color.c similarity index 100% rename from reactos/base/shell/cmd/color.c rename to base/shell/cmd/color.c diff --git a/reactos/base/shell/cmd/config.h b/base/shell/cmd/config.h similarity index 100% rename from reactos/base/shell/cmd/config.h rename to base/shell/cmd/config.h diff --git a/reactos/base/shell/cmd/console.c b/base/shell/cmd/console.c similarity index 100% rename from reactos/base/shell/cmd/console.c rename to base/shell/cmd/console.c diff --git a/reactos/base/shell/cmd/copy.c b/base/shell/cmd/copy.c similarity index 100% rename from reactos/base/shell/cmd/copy.c rename to base/shell/cmd/copy.c diff --git a/reactos/base/shell/cmd/date.c b/base/shell/cmd/date.c similarity index 100% rename from reactos/base/shell/cmd/date.c rename to base/shell/cmd/date.c diff --git a/reactos/base/shell/cmd/del.c b/base/shell/cmd/del.c similarity index 100% rename from reactos/base/shell/cmd/del.c rename to base/shell/cmd/del.c diff --git a/reactos/base/shell/cmd/delay.c b/base/shell/cmd/delay.c similarity index 100% rename from reactos/base/shell/cmd/delay.c rename to base/shell/cmd/delay.c diff --git a/reactos/base/shell/cmd/dir.c b/base/shell/cmd/dir.c similarity index 100% rename from reactos/base/shell/cmd/dir.c rename to base/shell/cmd/dir.c diff --git a/reactos/base/shell/cmd/dirstack.c b/base/shell/cmd/dirstack.c similarity index 100% rename from reactos/base/shell/cmd/dirstack.c rename to base/shell/cmd/dirstack.c diff --git a/reactos/base/shell/cmd/echo.c b/base/shell/cmd/echo.c similarity index 100% rename from reactos/base/shell/cmd/echo.c rename to base/shell/cmd/echo.c diff --git a/reactos/base/shell/cmd/error.c b/base/shell/cmd/error.c similarity index 100% rename from reactos/base/shell/cmd/error.c rename to base/shell/cmd/error.c diff --git a/reactos/base/shell/cmd/filecomp.c b/base/shell/cmd/filecomp.c similarity index 100% rename from reactos/base/shell/cmd/filecomp.c rename to base/shell/cmd/filecomp.c diff --git a/reactos/base/shell/cmd/files.txt b/base/shell/cmd/files.txt similarity index 100% rename from reactos/base/shell/cmd/files.txt rename to base/shell/cmd/files.txt diff --git a/reactos/base/shell/cmd/for.c b/base/shell/cmd/for.c similarity index 100% rename from reactos/base/shell/cmd/for.c rename to base/shell/cmd/for.c diff --git a/reactos/base/shell/cmd/free.c b/base/shell/cmd/free.c similarity index 100% rename from reactos/base/shell/cmd/free.c rename to base/shell/cmd/free.c diff --git a/reactos/base/shell/cmd/goto.c b/base/shell/cmd/goto.c similarity index 100% rename from reactos/base/shell/cmd/goto.c rename to base/shell/cmd/goto.c diff --git a/reactos/base/shell/cmd/history.c b/base/shell/cmd/history.c similarity index 100% rename from reactos/base/shell/cmd/history.c rename to base/shell/cmd/history.c diff --git a/reactos/base/shell/cmd/history.txt b/base/shell/cmd/history.txt similarity index 100% rename from reactos/base/shell/cmd/history.txt rename to base/shell/cmd/history.txt diff --git a/reactos/base/shell/cmd/if.c b/base/shell/cmd/if.c similarity index 100% rename from reactos/base/shell/cmd/if.c rename to base/shell/cmd/if.c diff --git a/reactos/base/shell/cmd/internal.c b/base/shell/cmd/internal.c similarity index 100% rename from reactos/base/shell/cmd/internal.c rename to base/shell/cmd/internal.c diff --git a/reactos/base/shell/cmd/label.c b/base/shell/cmd/label.c similarity index 100% rename from reactos/base/shell/cmd/label.c rename to base/shell/cmd/label.c diff --git a/reactos/base/shell/cmd/lang/de-DE.rc b/base/shell/cmd/lang/de-DE.rc similarity index 100% rename from reactos/base/shell/cmd/lang/de-DE.rc rename to base/shell/cmd/lang/de-DE.rc diff --git a/reactos/base/shell/cmd/lang/el-GR.rc b/base/shell/cmd/lang/el-GR.rc similarity index 100% rename from reactos/base/shell/cmd/lang/el-GR.rc rename to base/shell/cmd/lang/el-GR.rc diff --git a/reactos/base/shell/cmd/lang/en-US.rc b/base/shell/cmd/lang/en-US.rc similarity index 100% rename from reactos/base/shell/cmd/lang/en-US.rc rename to base/shell/cmd/lang/en-US.rc diff --git a/reactos/base/shell/cmd/lang/es-ES.rc b/base/shell/cmd/lang/es-ES.rc similarity index 100% rename from reactos/base/shell/cmd/lang/es-ES.rc rename to base/shell/cmd/lang/es-ES.rc diff --git a/reactos/base/shell/cmd/lang/fr-FR.rc b/base/shell/cmd/lang/fr-FR.rc similarity index 100% rename from reactos/base/shell/cmd/lang/fr-FR.rc rename to base/shell/cmd/lang/fr-FR.rc diff --git a/reactos/base/shell/cmd/lang/hu-HU.rc b/base/shell/cmd/lang/hu-HU.rc similarity index 100% rename from reactos/base/shell/cmd/lang/hu-HU.rc rename to base/shell/cmd/lang/hu-HU.rc diff --git a/reactos/base/shell/cmd/lang/id-ID.rc b/base/shell/cmd/lang/id-ID.rc similarity index 100% rename from reactos/base/shell/cmd/lang/id-ID.rc rename to base/shell/cmd/lang/id-ID.rc diff --git a/reactos/base/shell/cmd/lang/it-IT.rc b/base/shell/cmd/lang/it-IT.rc similarity index 100% rename from reactos/base/shell/cmd/lang/it-IT.rc rename to base/shell/cmd/lang/it-IT.rc diff --git a/reactos/base/shell/cmd/lang/ja-JP.rc b/base/shell/cmd/lang/ja-JP.rc similarity index 100% rename from reactos/base/shell/cmd/lang/ja-JP.rc rename to base/shell/cmd/lang/ja-JP.rc diff --git a/reactos/base/shell/cmd/lang/no-NO.rc b/base/shell/cmd/lang/no-NO.rc similarity index 100% rename from reactos/base/shell/cmd/lang/no-NO.rc rename to base/shell/cmd/lang/no-NO.rc diff --git a/reactos/base/shell/cmd/lang/pl-PL.rc b/base/shell/cmd/lang/pl-PL.rc similarity index 100% rename from reactos/base/shell/cmd/lang/pl-PL.rc rename to base/shell/cmd/lang/pl-PL.rc diff --git a/reactos/base/shell/cmd/lang/ru-RU.rc b/base/shell/cmd/lang/ru-RU.rc similarity index 100% rename from reactos/base/shell/cmd/lang/ru-RU.rc rename to base/shell/cmd/lang/ru-RU.rc diff --git a/reactos/base/shell/cmd/lang/uk-UA.rc b/base/shell/cmd/lang/uk-UA.rc similarity index 100% rename from reactos/base/shell/cmd/lang/uk-UA.rc rename to base/shell/cmd/lang/uk-UA.rc diff --git a/reactos/base/shell/cmd/license.txt b/base/shell/cmd/license.txt similarity index 100% rename from reactos/base/shell/cmd/license.txt rename to base/shell/cmd/license.txt diff --git a/reactos/base/shell/cmd/locale.c b/base/shell/cmd/locale.c similarity index 100% rename from reactos/base/shell/cmd/locale.c rename to base/shell/cmd/locale.c diff --git a/reactos/base/shell/cmd/main.c b/base/shell/cmd/main.c similarity index 100% rename from reactos/base/shell/cmd/main.c rename to base/shell/cmd/main.c diff --git a/reactos/base/shell/cmd/memory.c b/base/shell/cmd/memory.c similarity index 100% rename from reactos/base/shell/cmd/memory.c rename to base/shell/cmd/memory.c diff --git a/reactos/base/shell/cmd/misc.c b/base/shell/cmd/misc.c similarity index 100% rename from reactos/base/shell/cmd/misc.c rename to base/shell/cmd/misc.c diff --git a/reactos/base/shell/cmd/move.c b/base/shell/cmd/move.c similarity index 100% rename from reactos/base/shell/cmd/move.c rename to base/shell/cmd/move.c diff --git a/reactos/base/shell/cmd/msgbox.c b/base/shell/cmd/msgbox.c similarity index 100% rename from reactos/base/shell/cmd/msgbox.c rename to base/shell/cmd/msgbox.c diff --git a/reactos/base/shell/cmd/parser.c b/base/shell/cmd/parser.c similarity index 100% rename from reactos/base/shell/cmd/parser.c rename to base/shell/cmd/parser.c diff --git a/reactos/base/shell/cmd/path.c b/base/shell/cmd/path.c similarity index 100% rename from reactos/base/shell/cmd/path.c rename to base/shell/cmd/path.c diff --git a/reactos/base/shell/cmd/pause.c b/base/shell/cmd/pause.c similarity index 100% rename from reactos/base/shell/cmd/pause.c rename to base/shell/cmd/pause.c diff --git a/reactos/base/shell/cmd/precomp.h b/base/shell/cmd/precomp.h similarity index 100% rename from reactos/base/shell/cmd/precomp.h rename to base/shell/cmd/precomp.h diff --git a/reactos/base/shell/cmd/prompt.c b/base/shell/cmd/prompt.c similarity index 100% rename from reactos/base/shell/cmd/prompt.c rename to base/shell/cmd/prompt.c diff --git a/reactos/base/shell/cmd/readme.txt b/base/shell/cmd/readme.txt similarity index 100% rename from reactos/base/shell/cmd/readme.txt rename to base/shell/cmd/readme.txt diff --git a/reactos/base/shell/cmd/readme2.txt b/base/shell/cmd/readme2.txt similarity index 100% rename from reactos/base/shell/cmd/readme2.txt rename to base/shell/cmd/readme2.txt diff --git a/reactos/base/shell/cmd/redir.c b/base/shell/cmd/redir.c similarity index 100% rename from reactos/base/shell/cmd/redir.c rename to base/shell/cmd/redir.c diff --git a/reactos/base/shell/cmd/ren.c b/base/shell/cmd/ren.c similarity index 100% rename from reactos/base/shell/cmd/ren.c rename to base/shell/cmd/ren.c diff --git a/reactos/base/shell/cmd/replace.c b/base/shell/cmd/replace.c similarity index 100% rename from reactos/base/shell/cmd/replace.c rename to base/shell/cmd/replace.c diff --git a/reactos/base/shell/cmd/res/terminal.ico b/base/shell/cmd/res/terminal.ico similarity index 100% rename from reactos/base/shell/cmd/res/terminal.ico rename to base/shell/cmd/res/terminal.ico diff --git a/reactos/base/shell/cmd/resource.h b/base/shell/cmd/resource.h similarity index 100% rename from reactos/base/shell/cmd/resource.h rename to base/shell/cmd/resource.h diff --git a/reactos/base/shell/cmd/screen.c b/base/shell/cmd/screen.c similarity index 100% rename from reactos/base/shell/cmd/screen.c rename to base/shell/cmd/screen.c diff --git a/reactos/base/shell/cmd/set.c b/base/shell/cmd/set.c similarity index 100% rename from reactos/base/shell/cmd/set.c rename to base/shell/cmd/set.c diff --git a/reactos/base/shell/cmd/setlocal.c b/base/shell/cmd/setlocal.c similarity index 100% rename from reactos/base/shell/cmd/setlocal.c rename to base/shell/cmd/setlocal.c diff --git a/reactos/base/shell/cmd/shift.c b/base/shell/cmd/shift.c similarity index 100% rename from reactos/base/shell/cmd/shift.c rename to base/shell/cmd/shift.c diff --git a/reactos/base/shell/cmd/start.c b/base/shell/cmd/start.c similarity index 100% rename from reactos/base/shell/cmd/start.c rename to base/shell/cmd/start.c diff --git a/reactos/base/shell/cmd/strtoclr.c b/base/shell/cmd/strtoclr.c similarity index 100% rename from reactos/base/shell/cmd/strtoclr.c rename to base/shell/cmd/strtoclr.c diff --git a/reactos/base/shell/cmd/time.c b/base/shell/cmd/time.c similarity index 100% rename from reactos/base/shell/cmd/time.c rename to base/shell/cmd/time.c diff --git a/reactos/base/shell/cmd/timer.c b/base/shell/cmd/timer.c similarity index 100% rename from reactos/base/shell/cmd/timer.c rename to base/shell/cmd/timer.c diff --git a/reactos/base/shell/cmd/title.c b/base/shell/cmd/title.c similarity index 100% rename from reactos/base/shell/cmd/title.c rename to base/shell/cmd/title.c diff --git a/reactos/base/shell/cmd/todo.txt b/base/shell/cmd/todo.txt similarity index 100% rename from reactos/base/shell/cmd/todo.txt rename to base/shell/cmd/todo.txt diff --git a/reactos/base/shell/cmd/type.c b/base/shell/cmd/type.c similarity index 100% rename from reactos/base/shell/cmd/type.c rename to base/shell/cmd/type.c diff --git a/reactos/base/shell/cmd/ver.c b/base/shell/cmd/ver.c similarity index 100% rename from reactos/base/shell/cmd/ver.c rename to base/shell/cmd/ver.c diff --git a/reactos/base/shell/cmd/verify.c b/base/shell/cmd/verify.c similarity index 100% rename from reactos/base/shell/cmd/verify.c rename to base/shell/cmd/verify.c diff --git a/reactos/base/shell/cmd/vol.c b/base/shell/cmd/vol.c similarity index 100% rename from reactos/base/shell/cmd/vol.c rename to base/shell/cmd/vol.c diff --git a/reactos/base/shell/cmd/where.c b/base/shell/cmd/where.c similarity index 100% rename from reactos/base/shell/cmd/where.c rename to base/shell/cmd/where.c diff --git a/reactos/base/shell/cmd/window.c b/base/shell/cmd/window.c similarity index 100% rename from reactos/base/shell/cmd/window.c rename to base/shell/cmd/window.c diff --git a/reactos/base/shell/explorer-new/comcsup.h b/base/shell/explorer-new/comcsup.h similarity index 100% rename from reactos/base/shell/explorer-new/comcsup.h rename to base/shell/explorer-new/comcsup.h diff --git a/reactos/base/shell/explorer-new/desktop.c b/base/shell/explorer-new/desktop.c similarity index 100% rename from reactos/base/shell/explorer-new/desktop.c rename to base/shell/explorer-new/desktop.c diff --git a/reactos/base/shell/explorer-new/dragdrop.c b/base/shell/explorer-new/dragdrop.c similarity index 100% rename from reactos/base/shell/explorer-new/dragdrop.c rename to base/shell/explorer-new/dragdrop.c diff --git a/reactos/base/shell/explorer-new/explorer.c b/base/shell/explorer-new/explorer.c similarity index 100% rename from reactos/base/shell/explorer-new/explorer.c rename to base/shell/explorer-new/explorer.c diff --git a/reactos/base/shell/explorer-new/explorer.rbuild b/base/shell/explorer-new/explorer.rbuild similarity index 100% rename from reactos/base/shell/explorer-new/explorer.rbuild rename to base/shell/explorer-new/explorer.rbuild diff --git a/reactos/base/shell/explorer-new/explorer.rc b/base/shell/explorer-new/explorer.rc similarity index 100% rename from reactos/base/shell/explorer-new/explorer.rc rename to base/shell/explorer-new/explorer.rc diff --git a/reactos/base/shell/explorer-new/lang/bg-BG.rc b/base/shell/explorer-new/lang/bg-BG.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/bg-BG.rc rename to base/shell/explorer-new/lang/bg-BG.rc diff --git a/reactos/base/shell/explorer-new/lang/cs-CZ.rc b/base/shell/explorer-new/lang/cs-CZ.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/cs-CZ.rc rename to base/shell/explorer-new/lang/cs-CZ.rc diff --git a/reactos/base/shell/explorer-new/lang/de-DE.rc b/base/shell/explorer-new/lang/de-DE.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/de-DE.rc rename to base/shell/explorer-new/lang/de-DE.rc diff --git a/reactos/base/shell/explorer-new/lang/en-US.rc b/base/shell/explorer-new/lang/en-US.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/en-US.rc rename to base/shell/explorer-new/lang/en-US.rc diff --git a/reactos/base/shell/explorer-new/lang/es-ES.rc b/base/shell/explorer-new/lang/es-ES.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/es-ES.rc rename to base/shell/explorer-new/lang/es-ES.rc diff --git a/reactos/base/shell/explorer-new/lang/fr-FR.rc b/base/shell/explorer-new/lang/fr-FR.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/fr-FR.rc rename to base/shell/explorer-new/lang/fr-FR.rc diff --git a/reactos/base/shell/explorer-new/lang/it-IT.rc b/base/shell/explorer-new/lang/it-IT.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/it-IT.rc rename to base/shell/explorer-new/lang/it-IT.rc diff --git a/reactos/base/shell/explorer-new/lang/ko-KR.rc b/base/shell/explorer-new/lang/ko-KR.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/ko-KR.rc rename to base/shell/explorer-new/lang/ko-KR.rc diff --git a/reactos/base/shell/explorer-new/lang/lt-LT.rc b/base/shell/explorer-new/lang/lt-LT.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/lt-LT.rc rename to base/shell/explorer-new/lang/lt-LT.rc diff --git a/reactos/base/shell/explorer-new/lang/no-NO.rc b/base/shell/explorer-new/lang/no-NO.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/no-NO.rc rename to base/shell/explorer-new/lang/no-NO.rc diff --git a/reactos/base/shell/explorer-new/lang/pl-PL.rc b/base/shell/explorer-new/lang/pl-PL.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/pl-PL.rc rename to base/shell/explorer-new/lang/pl-PL.rc diff --git a/reactos/base/shell/explorer-new/lang/ru-RU.rc b/base/shell/explorer-new/lang/ru-RU.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/ru-RU.rc rename to base/shell/explorer-new/lang/ru-RU.rc diff --git a/reactos/base/shell/explorer-new/lang/sk-SK.rc b/base/shell/explorer-new/lang/sk-SK.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/sk-SK.rc rename to base/shell/explorer-new/lang/sk-SK.rc diff --git a/reactos/base/shell/explorer-new/lang/uk-UA.rc b/base/shell/explorer-new/lang/uk-UA.rc similarity index 100% rename from reactos/base/shell/explorer-new/lang/uk-UA.rc rename to base/shell/explorer-new/lang/uk-UA.rc diff --git a/reactos/base/shell/explorer-new/precomp.h b/base/shell/explorer-new/precomp.h similarity index 100% rename from reactos/base/shell/explorer-new/precomp.h rename to base/shell/explorer-new/precomp.h diff --git a/reactos/base/shell/explorer-new/res/logov.bmp b/base/shell/explorer-new/res/logov.bmp similarity index 100% rename from reactos/base/shell/explorer-new/res/logov.bmp rename to base/shell/explorer-new/res/logov.bmp diff --git a/reactos/base/shell/explorer-new/res/start.ico b/base/shell/explorer-new/res/start.ico similarity index 100% rename from reactos/base/shell/explorer-new/res/start.ico rename to base/shell/explorer-new/res/start.ico diff --git a/reactos/base/shell/explorer-new/resource.h b/base/shell/explorer-new/resource.h similarity index 100% rename from reactos/base/shell/explorer-new/resource.h rename to base/shell/explorer-new/resource.h diff --git a/reactos/base/shell/explorer-new/startmnu.c b/base/shell/explorer-new/startmnu.c similarity index 100% rename from reactos/base/shell/explorer-new/startmnu.c rename to base/shell/explorer-new/startmnu.c diff --git a/reactos/base/shell/explorer-new/taskband.c b/base/shell/explorer-new/taskband.c similarity index 100% rename from reactos/base/shell/explorer-new/taskband.c rename to base/shell/explorer-new/taskband.c diff --git a/reactos/base/shell/explorer-new/taskswnd.c b/base/shell/explorer-new/taskswnd.c similarity index 100% rename from reactos/base/shell/explorer-new/taskswnd.c rename to base/shell/explorer-new/taskswnd.c diff --git a/reactos/base/shell/explorer-new/tbsite.c b/base/shell/explorer-new/tbsite.c similarity index 100% rename from reactos/base/shell/explorer-new/tbsite.c rename to base/shell/explorer-new/tbsite.c diff --git a/reactos/base/shell/explorer-new/todo.h b/base/shell/explorer-new/todo.h similarity index 100% rename from reactos/base/shell/explorer-new/todo.h rename to base/shell/explorer-new/todo.h diff --git a/reactos/base/shell/explorer-new/trayntfy.c b/base/shell/explorer-new/trayntfy.c similarity index 100% rename from reactos/base/shell/explorer-new/trayntfy.c rename to base/shell/explorer-new/trayntfy.c diff --git a/reactos/base/shell/explorer-new/trayprop.c b/base/shell/explorer-new/trayprop.c similarity index 100% rename from reactos/base/shell/explorer-new/trayprop.c rename to base/shell/explorer-new/trayprop.c diff --git a/reactos/base/shell/explorer-new/traywnd.c b/base/shell/explorer-new/traywnd.c similarity index 100% rename from reactos/base/shell/explorer-new/traywnd.c rename to base/shell/explorer-new/traywnd.c diff --git a/reactos/base/shell/explorer-new/undoc.h b/base/shell/explorer-new/undoc.h similarity index 100% rename from reactos/base/shell/explorer-new/undoc.h rename to base/shell/explorer-new/undoc.h diff --git a/reactos/base/shell/explorer/Doxyfile b/base/shell/explorer/Doxyfile similarity index 100% rename from reactos/base/shell/explorer/Doxyfile rename to base/shell/explorer/Doxyfile diff --git a/reactos/base/shell/explorer/Doxyfile-all b/base/shell/explorer/Doxyfile-all similarity index 100% rename from reactos/base/shell/explorer/Doxyfile-all rename to base/shell/explorer/Doxyfile-all diff --git a/reactos/base/shell/explorer/Jamfile b/base/shell/explorer/Jamfile similarity index 100% rename from reactos/base/shell/explorer/Jamfile rename to base/shell/explorer/Jamfile diff --git a/reactos/base/shell/explorer/Make-rosshell-MinGW b/base/shell/explorer/Make-rosshell-MinGW similarity index 100% rename from reactos/base/shell/explorer/Make-rosshell-MinGW rename to base/shell/explorer/Make-rosshell-MinGW diff --git a/reactos/base/shell/explorer/Make-rosshell.mak b/base/shell/explorer/Make-rosshell.mak similarity index 100% rename from reactos/base/shell/explorer/Make-rosshell.mak rename to base/shell/explorer/Make-rosshell.mak diff --git a/reactos/base/shell/explorer/Makefile-MinGW b/base/shell/explorer/Makefile-MinGW similarity index 100% rename from reactos/base/shell/explorer/Makefile-MinGW rename to base/shell/explorer/Makefile-MinGW diff --git a/reactos/base/shell/explorer/Makefile-Wine b/base/shell/explorer/Makefile-Wine similarity index 100% rename from reactos/base/shell/explorer/Makefile-Wine rename to base/shell/explorer/Makefile-Wine diff --git a/reactos/base/shell/explorer/Makefile-precomp b/base/shell/explorer/Makefile-precomp similarity index 100% rename from reactos/base/shell/explorer/Makefile-precomp rename to base/shell/explorer/Makefile-precomp diff --git a/reactos/base/shell/explorer/desktop/desktop.cpp b/base/shell/explorer/desktop/desktop.cpp similarity index 100% rename from reactos/base/shell/explorer/desktop/desktop.cpp rename to base/shell/explorer/desktop/desktop.cpp diff --git a/reactos/base/shell/explorer/desktop/desktop.h b/base/shell/explorer/desktop/desktop.h similarity index 100% rename from reactos/base/shell/explorer/desktop/desktop.h rename to base/shell/explorer/desktop/desktop.h diff --git a/reactos/base/shell/explorer/dialogs/searchprogram.cpp b/base/shell/explorer/dialogs/searchprogram.cpp similarity index 100% rename from reactos/base/shell/explorer/dialogs/searchprogram.cpp rename to base/shell/explorer/dialogs/searchprogram.cpp diff --git a/reactos/base/shell/explorer/dialogs/searchprogram.h b/base/shell/explorer/dialogs/searchprogram.h similarity index 100% rename from reactos/base/shell/explorer/dialogs/searchprogram.h rename to base/shell/explorer/dialogs/searchprogram.h diff --git a/reactos/base/shell/explorer/dialogs/settings.cpp b/base/shell/explorer/dialogs/settings.cpp similarity index 100% rename from reactos/base/shell/explorer/dialogs/settings.cpp rename to base/shell/explorer/dialogs/settings.cpp diff --git a/reactos/base/shell/explorer/dialogs/settings.h b/base/shell/explorer/dialogs/settings.h similarity index 100% rename from reactos/base/shell/explorer/dialogs/settings.h rename to base/shell/explorer/dialogs/settings.h diff --git a/reactos/base/shell/explorer/doc/TODO.txt b/base/shell/explorer/doc/TODO.txt similarity index 100% rename from reactos/base/shell/explorer/doc/TODO.txt rename to base/shell/explorer/doc/TODO.txt diff --git a/reactos/base/shell/explorer/doc/changes.txt b/base/shell/explorer/doc/changes.txt similarity index 100% rename from reactos/base/shell/explorer/doc/changes.txt rename to base/shell/explorer/doc/changes.txt diff --git a/reactos/base/shell/explorer/doc/readme.txt b/base/shell/explorer/doc/readme.txt similarity index 100% rename from reactos/base/shell/explorer/doc/readme.txt rename to base/shell/explorer/doc/readme.txt diff --git a/reactos/base/shell/explorer/doxy-footer.html b/base/shell/explorer/doxy-footer.html similarity index 100% rename from reactos/base/shell/explorer/doxy-footer.html rename to base/shell/explorer/doxy-footer.html diff --git a/reactos/base/shell/explorer/doxy-footer.htmt b/base/shell/explorer/doxy-footer.htmt similarity index 100% rename from reactos/base/shell/explorer/doxy-footer.htmt rename to base/shell/explorer/doxy-footer.htmt diff --git a/reactos/base/shell/explorer/explorer-bg.rc b/base/shell/explorer/explorer-bg.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-bg.rc rename to base/shell/explorer/explorer-bg.rc diff --git a/reactos/base/shell/explorer/explorer-bn.rc b/base/shell/explorer/explorer-bn.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-bn.rc rename to base/shell/explorer/explorer-bn.rc diff --git a/reactos/base/shell/explorer/explorer-cfg-template.xml b/base/shell/explorer/explorer-cfg-template.xml similarity index 100% rename from reactos/base/shell/explorer/explorer-cfg-template.xml rename to base/shell/explorer/explorer-cfg-template.xml diff --git a/reactos/base/shell/explorer/explorer-cn-msvc.rc b/base/shell/explorer/explorer-cn-msvc.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-cn-msvc.rc rename to base/shell/explorer/explorer-cn-msvc.rc diff --git a/reactos/base/shell/explorer/explorer-cn.rc b/base/shell/explorer/explorer-cn.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-cn.rc rename to base/shell/explorer/explorer-cn.rc diff --git a/reactos/base/shell/explorer/explorer-cz.rc b/base/shell/explorer/explorer-cz.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-cz.rc rename to base/shell/explorer/explorer-cz.rc diff --git a/reactos/base/shell/explorer/explorer-de.rc b/base/shell/explorer/explorer-de.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-de.rc rename to base/shell/explorer/explorer-de.rc diff --git a/reactos/base/shell/explorer/explorer-en.rc b/base/shell/explorer/explorer-en.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-en.rc rename to base/shell/explorer/explorer-en.rc diff --git a/reactos/base/shell/explorer/explorer-es.rc b/base/shell/explorer/explorer-es.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-es.rc rename to base/shell/explorer/explorer-es.rc diff --git a/reactos/base/shell/explorer/explorer-fr.rc b/base/shell/explorer/explorer-fr.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-fr.rc rename to base/shell/explorer/explorer-fr.rc diff --git a/reactos/base/shell/explorer/explorer-gr.rc b/base/shell/explorer/explorer-gr.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-gr.rc rename to base/shell/explorer/explorer-gr.rc diff --git a/reactos/base/shell/explorer/explorer-hu.rc b/base/shell/explorer/explorer-hu.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-hu.rc rename to base/shell/explorer/explorer-hu.rc diff --git a/reactos/base/shell/explorer/explorer-id.rc b/base/shell/explorer/explorer-id.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-id.rc rename to base/shell/explorer/explorer-id.rc diff --git a/reactos/base/shell/explorer/explorer-it.rc b/base/shell/explorer/explorer-it.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-it.rc rename to base/shell/explorer/explorer-it.rc diff --git a/reactos/base/shell/explorer/explorer-jp.rc b/base/shell/explorer/explorer-jp.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-jp.rc rename to base/shell/explorer/explorer-jp.rc diff --git a/reactos/base/shell/explorer/explorer-ko.rc b/base/shell/explorer/explorer-ko.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-ko.rc rename to base/shell/explorer/explorer-ko.rc diff --git a/reactos/base/shell/explorer/explorer-nl.rc b/base/shell/explorer/explorer-nl.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-nl.rc rename to base/shell/explorer/explorer-nl.rc diff --git a/reactos/base/shell/explorer/explorer-no.rc b/base/shell/explorer/explorer-no.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-no.rc rename to base/shell/explorer/explorer-no.rc diff --git a/reactos/base/shell/explorer/explorer-pl.rc b/base/shell/explorer/explorer-pl.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-pl.rc rename to base/shell/explorer/explorer-pl.rc diff --git a/reactos/base/shell/explorer/explorer-pt.rc b/base/shell/explorer/explorer-pt.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-pt.rc rename to base/shell/explorer/explorer-pt.rc diff --git a/reactos/base/shell/explorer/explorer-ro.rc b/base/shell/explorer/explorer-ro.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-ro.rc rename to base/shell/explorer/explorer-ro.rc diff --git a/reactos/base/shell/explorer/explorer-ru.rc b/base/shell/explorer/explorer-ru.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-ru.rc rename to base/shell/explorer/explorer-ru.rc diff --git a/reactos/base/shell/explorer/explorer-sk.rc b/base/shell/explorer/explorer-sk.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-sk.rc rename to base/shell/explorer/explorer-sk.rc diff --git a/reactos/base/shell/explorer/explorer-sv.rc b/base/shell/explorer/explorer-sv.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-sv.rc rename to base/shell/explorer/explorer-sv.rc diff --git a/reactos/base/shell/explorer/explorer-uk.rc b/base/shell/explorer/explorer-uk.rc similarity index 100% rename from reactos/base/shell/explorer/explorer-uk.rc rename to base/shell/explorer/explorer-uk.rc diff --git a/reactos/base/shell/explorer/explorer.cpp b/base/shell/explorer/explorer.cpp similarity index 100% rename from reactos/base/shell/explorer/explorer.cpp rename to base/shell/explorer/explorer.cpp diff --git a/reactos/base/shell/explorer/explorer.dsp b/base/shell/explorer/explorer.dsp similarity index 100% rename from reactos/base/shell/explorer/explorer.dsp rename to base/shell/explorer/explorer.dsp diff --git a/reactos/base/shell/explorer/explorer.dsw b/base/shell/explorer/explorer.dsw similarity index 100% rename from reactos/base/shell/explorer/explorer.dsw rename to base/shell/explorer/explorer.dsw diff --git a/reactos/base/shell/explorer/explorer.exe.manifest b/base/shell/explorer/explorer.exe.manifest similarity index 100% rename from reactos/base/shell/explorer/explorer.exe.manifest rename to base/shell/explorer/explorer.exe.manifest diff --git a/reactos/base/shell/explorer/explorer.h b/base/shell/explorer/explorer.h similarity index 100% rename from reactos/base/shell/explorer/explorer.h rename to base/shell/explorer/explorer.h diff --git a/reactos/base/shell/explorer/explorer.rbuild b/base/shell/explorer/explorer.rbuild similarity index 100% rename from reactos/base/shell/explorer/explorer.rbuild rename to base/shell/explorer/explorer.rbuild diff --git a/reactos/base/shell/explorer/explorer.rc b/base/shell/explorer/explorer.rc similarity index 100% rename from reactos/base/shell/explorer/explorer.rc rename to base/shell/explorer/explorer.rc diff --git a/reactos/base/shell/explorer/explorer.sln b/base/shell/explorer/explorer.sln similarity index 100% rename from reactos/base/shell/explorer/explorer.sln rename to base/shell/explorer/explorer.sln diff --git a/reactos/base/shell/explorer/explorer.vcproj b/base/shell/explorer/explorer.vcproj similarity index 100% rename from reactos/base/shell/explorer/explorer.vcproj rename to base/shell/explorer/explorer.vcproj diff --git a/reactos/base/shell/explorer/explorer_intres.rc b/base/shell/explorer/explorer_intres.rc similarity index 100% rename from reactos/base/shell/explorer/explorer_intres.rc rename to base/shell/explorer/explorer_intres.rc diff --git a/reactos/base/shell/explorer/externals.h b/base/shell/explorer/externals.h similarity index 100% rename from reactos/base/shell/explorer/externals.h rename to base/shell/explorer/externals.h diff --git a/reactos/base/shell/explorer/globals.h b/base/shell/explorer/globals.h similarity index 100% rename from reactos/base/shell/explorer/globals.h rename to base/shell/explorer/globals.h diff --git a/reactos/base/shell/explorer/i386-stub-win32.c b/base/shell/explorer/i386-stub-win32.c similarity index 100% rename from reactos/base/shell/explorer/i386-stub-win32.c rename to base/shell/explorer/i386-stub-win32.c diff --git a/reactos/base/shell/explorer/make-docu.sh b/base/shell/explorer/make-docu.sh similarity index 100% rename from reactos/base/shell/explorer/make-docu.sh rename to base/shell/explorer/make-docu.sh diff --git a/reactos/base/shell/explorer/make-full-docu.bat b/base/shell/explorer/make-full-docu.bat similarity index 100% rename from reactos/base/shell/explorer/make-full-docu.bat rename to base/shell/explorer/make-full-docu.bat diff --git a/reactos/base/shell/explorer/make_explorer.dsp b/base/shell/explorer/make_explorer.dsp similarity index 100% rename from reactos/base/shell/explorer/make_explorer.dsp rename to base/shell/explorer/make_explorer.dsp diff --git a/reactos/base/shell/explorer/make_explorer.vcproj b/base/shell/explorer/make_explorer.vcproj similarity index 100% rename from reactos/base/shell/explorer/make_explorer.vcproj rename to base/shell/explorer/make_explorer.vcproj diff --git a/reactos/base/shell/explorer/make_rosshell.dsp b/base/shell/explorer/make_rosshell.dsp similarity index 100% rename from reactos/base/shell/explorer/make_rosshell.dsp rename to base/shell/explorer/make_rosshell.dsp diff --git a/reactos/base/shell/explorer/makearchive.bat b/base/shell/explorer/makearchive.bat similarity index 100% rename from reactos/base/shell/explorer/makearchive.bat rename to base/shell/explorer/makearchive.bat diff --git a/reactos/base/shell/explorer/notifyhook/notifyhook.c b/base/shell/explorer/notifyhook/notifyhook.c similarity index 100% rename from reactos/base/shell/explorer/notifyhook/notifyhook.c rename to base/shell/explorer/notifyhook/notifyhook.c diff --git a/reactos/base/shell/explorer/notifyhook/notifyhook.def b/base/shell/explorer/notifyhook/notifyhook.def similarity index 100% rename from reactos/base/shell/explorer/notifyhook/notifyhook.def rename to base/shell/explorer/notifyhook/notifyhook.def diff --git a/reactos/base/shell/explorer/notifyhook/notifyhook.dsp b/base/shell/explorer/notifyhook/notifyhook.dsp similarity index 100% rename from reactos/base/shell/explorer/notifyhook/notifyhook.dsp rename to base/shell/explorer/notifyhook/notifyhook.dsp diff --git a/reactos/base/shell/explorer/notifyhook/notifyhook.h b/base/shell/explorer/notifyhook/notifyhook.h similarity index 100% rename from reactos/base/shell/explorer/notifyhook/notifyhook.h rename to base/shell/explorer/notifyhook/notifyhook.h diff --git a/reactos/base/shell/explorer/notifyhook/notifyhook.rbuild b/base/shell/explorer/notifyhook/notifyhook.rbuild similarity index 100% rename from reactos/base/shell/explorer/notifyhook/notifyhook.rbuild rename to base/shell/explorer/notifyhook/notifyhook.rbuild diff --git a/reactos/base/shell/explorer/notifyhook/notifyhook.rc b/base/shell/explorer/notifyhook/notifyhook.rc similarity index 100% rename from reactos/base/shell/explorer/notifyhook/notifyhook.rc rename to base/shell/explorer/notifyhook/notifyhook.rc diff --git a/reactos/base/shell/explorer/notifyhook/notifyhook.vcproj b/base/shell/explorer/notifyhook/notifyhook.vcproj similarity index 100% rename from reactos/base/shell/explorer/notifyhook/notifyhook.vcproj rename to base/shell/explorer/notifyhook/notifyhook.vcproj diff --git a/reactos/base/shell/explorer/precomp.cpp b/base/shell/explorer/precomp.cpp similarity index 100% rename from reactos/base/shell/explorer/precomp.cpp rename to base/shell/explorer/precomp.cpp diff --git a/reactos/base/shell/explorer/precomp.h b/base/shell/explorer/precomp.h similarity index 100% rename from reactos/base/shell/explorer/precomp.h rename to base/shell/explorer/precomp.h diff --git a/reactos/base/shell/explorer/project-root.jam b/base/shell/explorer/project-root.jam similarity index 100% rename from reactos/base/shell/explorer/project-root.jam rename to base/shell/explorer/project-root.jam diff --git a/reactos/base/shell/explorer/rc-mingw.jam b/base/shell/explorer/rc-mingw.jam similarity index 100% rename from reactos/base/shell/explorer/rc-mingw.jam rename to base/shell/explorer/rc-mingw.jam diff --git a/reactos/base/shell/explorer/res/action.ico b/base/shell/explorer/res/action.ico similarity index 100% rename from reactos/base/shell/explorer/res/action.ico rename to base/shell/explorer/res/action.ico diff --git a/reactos/base/shell/explorer/res/administration.ico b/base/shell/explorer/res/administration.ico similarity index 100% rename from reactos/base/shell/explorer/res/administration.ico rename to base/shell/explorer/res/administration.ico diff --git a/reactos/base/shell/explorer/res/appicon.ico b/base/shell/explorer/res/appicon.ico similarity index 100% rename from reactos/base/shell/explorer/res/appicon.ico rename to base/shell/explorer/res/appicon.ico diff --git a/reactos/base/shell/explorer/res/apps.ico b/base/shell/explorer/res/apps.ico similarity index 100% rename from reactos/base/shell/explorer/res/apps.ico rename to base/shell/explorer/res/apps.ico diff --git a/reactos/base/shell/explorer/res/arrow.ico b/base/shell/explorer/res/arrow.ico similarity index 100% rename from reactos/base/shell/explorer/res/arrow.ico rename to base/shell/explorer/res/arrow.ico diff --git a/reactos/base/shell/explorer/res/arrow_dwn.ico b/base/shell/explorer/res/arrow_dwn.ico similarity index 100% rename from reactos/base/shell/explorer/res/arrow_dwn.ico rename to base/shell/explorer/res/arrow_dwn.ico diff --git a/reactos/base/shell/explorer/res/arrow_up.ico b/base/shell/explorer/res/arrow_up.ico similarity index 100% rename from reactos/base/shell/explorer/res/arrow_up.ico rename to base/shell/explorer/res/arrow_up.ico diff --git a/reactos/base/shell/explorer/res/arrowsel.ico b/base/shell/explorer/res/arrowsel.ico similarity index 100% rename from reactos/base/shell/explorer/res/arrowsel.ico rename to base/shell/explorer/res/arrowsel.ico diff --git a/reactos/base/shell/explorer/res/computer.ico b/base/shell/explorer/res/computer.ico similarity index 100% rename from reactos/base/shell/explorer/res/computer.ico rename to base/shell/explorer/res/computer.ico diff --git a/reactos/base/shell/explorer/res/config.ico b/base/shell/explorer/res/config.ico similarity index 100% rename from reactos/base/shell/explorer/res/config.ico rename to base/shell/explorer/res/config.ico diff --git a/reactos/base/shell/explorer/res/control-panel.ico b/base/shell/explorer/res/control-panel.ico similarity index 100% rename from reactos/base/shell/explorer/res/control-panel.ico rename to base/shell/explorer/res/control-panel.ico diff --git a/reactos/base/shell/explorer/res/desktop-settings.ico b/base/shell/explorer/res/desktop-settings.ico similarity index 100% rename from reactos/base/shell/explorer/res/desktop-settings.ico rename to base/shell/explorer/res/desktop-settings.ico diff --git a/reactos/base/shell/explorer/res/documents.ico b/base/shell/explorer/res/documents.ico similarity index 100% rename from reactos/base/shell/explorer/res/documents.ico rename to base/shell/explorer/res/documents.ico diff --git a/reactos/base/shell/explorer/res/dot.ico b/base/shell/explorer/res/dot.ico similarity index 100% rename from reactos/base/shell/explorer/res/dot.ico rename to base/shell/explorer/res/dot.ico diff --git a/reactos/base/shell/explorer/res/dot_red.ico b/base/shell/explorer/res/dot_red.ico similarity index 100% rename from reactos/base/shell/explorer/res/dot_red.ico rename to base/shell/explorer/res/dot_red.ico diff --git a/reactos/base/shell/explorer/res/dot_trans.ico b/base/shell/explorer/res/dot_trans.ico similarity index 100% rename from reactos/base/shell/explorer/res/dot_trans.ico rename to base/shell/explorer/res/dot_trans.ico diff --git a/reactos/base/shell/explorer/res/drivebar.bmp b/base/shell/explorer/res/drivebar.bmp similarity index 100% rename from reactos/base/shell/explorer/res/drivebar.bmp rename to base/shell/explorer/res/drivebar.bmp diff --git a/reactos/base/shell/explorer/res/explorer.ico b/base/shell/explorer/res/explorer.ico similarity index 100% rename from reactos/base/shell/explorer/res/explorer.ico rename to base/shell/explorer/res/explorer.ico diff --git a/reactos/base/shell/explorer/res/favorites.ico b/base/shell/explorer/res/favorites.ico similarity index 100% rename from reactos/base/shell/explorer/res/favorites.ico rename to base/shell/explorer/res/favorites.ico diff --git a/reactos/base/shell/explorer/res/floating.ico b/base/shell/explorer/res/floating.ico similarity index 100% rename from reactos/base/shell/explorer/res/floating.ico rename to base/shell/explorer/res/floating.ico diff --git a/reactos/base/shell/explorer/res/folder.ico b/base/shell/explorer/res/folder.ico similarity index 100% rename from reactos/base/shell/explorer/res/folder.ico rename to base/shell/explorer/res/folder.ico diff --git a/reactos/base/shell/explorer/res/icoali10.bmp b/base/shell/explorer/res/icoali10.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoali10.bmp rename to base/shell/explorer/res/icoali10.bmp diff --git a/reactos/base/shell/explorer/res/icoalig0.bmp b/base/shell/explorer/res/icoalig0.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig0.bmp rename to base/shell/explorer/res/icoalig0.bmp diff --git a/reactos/base/shell/explorer/res/icoalig1.bmp b/base/shell/explorer/res/icoalig1.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig1.bmp rename to base/shell/explorer/res/icoalig1.bmp diff --git a/reactos/base/shell/explorer/res/icoalig2.bmp b/base/shell/explorer/res/icoalig2.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig2.bmp rename to base/shell/explorer/res/icoalig2.bmp diff --git a/reactos/base/shell/explorer/res/icoalig3.bmp b/base/shell/explorer/res/icoalig3.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig3.bmp rename to base/shell/explorer/res/icoalig3.bmp diff --git a/reactos/base/shell/explorer/res/icoalig4.bmp b/base/shell/explorer/res/icoalig4.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig4.bmp rename to base/shell/explorer/res/icoalig4.bmp diff --git a/reactos/base/shell/explorer/res/icoalig5.bmp b/base/shell/explorer/res/icoalig5.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig5.bmp rename to base/shell/explorer/res/icoalig5.bmp diff --git a/reactos/base/shell/explorer/res/icoalig6.bmp b/base/shell/explorer/res/icoalig6.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig6.bmp rename to base/shell/explorer/res/icoalig6.bmp diff --git a/reactos/base/shell/explorer/res/icoalig7.bmp b/base/shell/explorer/res/icoalig7.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig7.bmp rename to base/shell/explorer/res/icoalig7.bmp diff --git a/reactos/base/shell/explorer/res/icoalig8.bmp b/base/shell/explorer/res/icoalig8.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig8.bmp rename to base/shell/explorer/res/icoalig8.bmp diff --git a/reactos/base/shell/explorer/res/icoalig9.bmp b/base/shell/explorer/res/icoalig9.bmp similarity index 100% rename from reactos/base/shell/explorer/res/icoalig9.bmp rename to base/shell/explorer/res/icoalig9.bmp diff --git a/reactos/base/shell/explorer/res/images.bmp b/base/shell/explorer/res/images.bmp similarity index 100% rename from reactos/base/shell/explorer/res/images.bmp rename to base/shell/explorer/res/images.bmp diff --git a/reactos/base/shell/explorer/res/info.ico b/base/shell/explorer/res/info.ico similarity index 100% rename from reactos/base/shell/explorer/res/info.ico rename to base/shell/explorer/res/info.ico diff --git a/reactos/base/shell/explorer/res/logoff.ico b/base/shell/explorer/res/logoff.ico similarity index 100% rename from reactos/base/shell/explorer/res/logoff.ico rename to base/shell/explorer/res/logoff.ico diff --git a/reactos/base/shell/explorer/res/logov.bmp b/base/shell/explorer/res/logov.bmp similarity index 100% rename from reactos/base/shell/explorer/res/logov.bmp rename to base/shell/explorer/res/logov.bmp diff --git a/reactos/base/shell/explorer/res/logov.psd b/base/shell/explorer/res/logov.psd similarity index 100% rename from reactos/base/shell/explorer/res/logov.psd rename to base/shell/explorer/res/logov.psd diff --git a/reactos/base/shell/explorer/res/logov16.bmp b/base/shell/explorer/res/logov16.bmp similarity index 100% rename from reactos/base/shell/explorer/res/logov16.bmp rename to base/shell/explorer/res/logov16.bmp diff --git a/reactos/base/shell/explorer/res/logov256.bmp b/base/shell/explorer/res/logov256.bmp similarity index 100% rename from reactos/base/shell/explorer/res/logov256.bmp rename to base/shell/explorer/res/logov256.bmp diff --git a/reactos/base/shell/explorer/res/mdi.bmp b/base/shell/explorer/res/mdi.bmp similarity index 100% rename from reactos/base/shell/explorer/res/mdi.bmp rename to base/shell/explorer/res/mdi.bmp diff --git a/reactos/base/shell/explorer/res/minimize.ico b/base/shell/explorer/res/minimize.ico similarity index 100% rename from reactos/base/shell/explorer/res/minimize.ico rename to base/shell/explorer/res/minimize.ico diff --git a/reactos/base/shell/explorer/res/network-conns.ico b/base/shell/explorer/res/network-conns.ico similarity index 100% rename from reactos/base/shell/explorer/res/network-conns.ico rename to base/shell/explorer/res/network-conns.ico diff --git a/reactos/base/shell/explorer/res/network.ico b/base/shell/explorer/res/network.ico similarity index 100% rename from reactos/base/shell/explorer/res/network.ico rename to base/shell/explorer/res/network.ico diff --git a/reactos/base/shell/explorer/res/notify_l.ico b/base/shell/explorer/res/notify_l.ico similarity index 100% rename from reactos/base/shell/explorer/res/notify_l.ico rename to base/shell/explorer/res/notify_l.ico diff --git a/reactos/base/shell/explorer/res/notify_r.ico b/base/shell/explorer/res/notify_r.ico similarity index 100% rename from reactos/base/shell/explorer/res/notify_r.ico rename to base/shell/explorer/res/notify_r.ico diff --git a/reactos/base/shell/explorer/res/printer.ico b/base/shell/explorer/res/printer.ico similarity index 100% rename from reactos/base/shell/explorer/res/printer.ico rename to base/shell/explorer/res/printer.ico diff --git a/reactos/base/shell/explorer/res/reactos.ico b/base/shell/explorer/res/reactos.ico similarity index 100% rename from reactos/base/shell/explorer/res/reactos.ico rename to base/shell/explorer/res/reactos.ico diff --git a/reactos/base/shell/explorer/res/recent-documents.ico b/base/shell/explorer/res/recent-documents.ico similarity index 100% rename from reactos/base/shell/explorer/res/recent-documents.ico rename to base/shell/explorer/res/recent-documents.ico diff --git a/reactos/base/shell/explorer/res/restart.ico b/base/shell/explorer/res/restart.ico similarity index 100% rename from reactos/base/shell/explorer/res/restart.ico rename to base/shell/explorer/res/restart.ico diff --git a/reactos/base/shell/explorer/res/ros-big.ico b/base/shell/explorer/res/ros-big.ico similarity index 100% rename from reactos/base/shell/explorer/res/ros-big.ico rename to base/shell/explorer/res/ros-big.ico diff --git a/reactos/base/shell/explorer/res/sdi.bmp b/base/shell/explorer/res/sdi.bmp similarity index 100% rename from reactos/base/shell/explorer/res/sdi.bmp rename to base/shell/explorer/res/sdi.bmp diff --git a/reactos/base/shell/explorer/res/search-doc.ico b/base/shell/explorer/res/search-doc.ico similarity index 100% rename from reactos/base/shell/explorer/res/search-doc.ico rename to base/shell/explorer/res/search-doc.ico diff --git a/reactos/base/shell/explorer/res/search.ico b/base/shell/explorer/res/search.ico similarity index 100% rename from reactos/base/shell/explorer/res/search.ico rename to base/shell/explorer/res/search.ico diff --git a/reactos/base/shell/explorer/res/shutdown.ico b/base/shell/explorer/res/shutdown.ico similarity index 100% rename from reactos/base/shell/explorer/res/shutdown.ico rename to base/shell/explorer/res/shutdown.ico diff --git a/reactos/base/shell/explorer/res/speaker.ico b/base/shell/explorer/res/speaker.ico similarity index 100% rename from reactos/base/shell/explorer/res/speaker.ico rename to base/shell/explorer/res/speaker.ico diff --git a/reactos/base/shell/explorer/res/startmenu.ico b/base/shell/explorer/res/startmenu.ico similarity index 100% rename from reactos/base/shell/explorer/res/startmenu.ico rename to base/shell/explorer/res/startmenu.ico diff --git a/reactos/base/shell/explorer/res/toolbar.bmp b/base/shell/explorer/res/toolbar.bmp similarity index 100% rename from reactos/base/shell/explorer/res/toolbar.bmp rename to base/shell/explorer/res/toolbar.bmp diff --git a/reactos/base/shell/explorer/resource.h b/base/shell/explorer/resource.h similarity index 100% rename from reactos/base/shell/explorer/resource.h rename to base/shell/explorer/resource.h diff --git a/reactos/base/shell/explorer/rosshell.dsp b/base/shell/explorer/rosshell.dsp similarity index 100% rename from reactos/base/shell/explorer/rosshell.dsp rename to base/shell/explorer/rosshell.dsp diff --git a/reactos/base/shell/explorer/rosshell.dsw b/base/shell/explorer/rosshell.dsw similarity index 100% rename from reactos/base/shell/explorer/rosshell.dsw rename to base/shell/explorer/rosshell.dsw diff --git a/reactos/base/shell/explorer/services/shellservices.cpp b/base/shell/explorer/services/shellservices.cpp similarity index 100% rename from reactos/base/shell/explorer/services/shellservices.cpp rename to base/shell/explorer/services/shellservices.cpp diff --git a/reactos/base/shell/explorer/services/shellservices.h b/base/shell/explorer/services/shellservices.h similarity index 100% rename from reactos/base/shell/explorer/services/shellservices.h rename to base/shell/explorer/services/shellservices.h diff --git a/reactos/base/shell/explorer/services/startup.c b/base/shell/explorer/services/startup.c similarity index 100% rename from reactos/base/shell/explorer/services/startup.c rename to base/shell/explorer/services/startup.c diff --git a/reactos/base/shell/explorer/shell/entries.cpp b/base/shell/explorer/shell/entries.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/entries.cpp rename to base/shell/explorer/shell/entries.cpp diff --git a/reactos/base/shell/explorer/shell/entries.h b/base/shell/explorer/shell/entries.h similarity index 100% rename from reactos/base/shell/explorer/shell/entries.h rename to base/shell/explorer/shell/entries.h diff --git a/reactos/base/shell/explorer/shell/fatfs.cpp b/base/shell/explorer/shell/fatfs.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/fatfs.cpp rename to base/shell/explorer/shell/fatfs.cpp diff --git a/reactos/base/shell/explorer/shell/fatfs.h b/base/shell/explorer/shell/fatfs.h similarity index 100% rename from reactos/base/shell/explorer/shell/fatfs.h rename to base/shell/explorer/shell/fatfs.h diff --git a/reactos/base/shell/explorer/shell/filechild.cpp b/base/shell/explorer/shell/filechild.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/filechild.cpp rename to base/shell/explorer/shell/filechild.cpp diff --git a/reactos/base/shell/explorer/shell/filechild.h b/base/shell/explorer/shell/filechild.h similarity index 100% rename from reactos/base/shell/explorer/shell/filechild.h rename to base/shell/explorer/shell/filechild.h diff --git a/reactos/base/shell/explorer/shell/mainframe.cpp b/base/shell/explorer/shell/mainframe.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/mainframe.cpp rename to base/shell/explorer/shell/mainframe.cpp diff --git a/reactos/base/shell/explorer/shell/mainframe.h b/base/shell/explorer/shell/mainframe.h similarity index 100% rename from reactos/base/shell/explorer/shell/mainframe.h rename to base/shell/explorer/shell/mainframe.h diff --git a/reactos/base/shell/explorer/shell/ntobjfs.cpp b/base/shell/explorer/shell/ntobjfs.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/ntobjfs.cpp rename to base/shell/explorer/shell/ntobjfs.cpp diff --git a/reactos/base/shell/explorer/shell/ntobjfs.h b/base/shell/explorer/shell/ntobjfs.h similarity index 100% rename from reactos/base/shell/explorer/shell/ntobjfs.h rename to base/shell/explorer/shell/ntobjfs.h diff --git a/reactos/base/shell/explorer/shell/pane.cpp b/base/shell/explorer/shell/pane.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/pane.cpp rename to base/shell/explorer/shell/pane.cpp diff --git a/reactos/base/shell/explorer/shell/pane.h b/base/shell/explorer/shell/pane.h similarity index 100% rename from reactos/base/shell/explorer/shell/pane.h rename to base/shell/explorer/shell/pane.h diff --git a/reactos/base/shell/explorer/shell/regfs.cpp b/base/shell/explorer/shell/regfs.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/regfs.cpp rename to base/shell/explorer/shell/regfs.cpp diff --git a/reactos/base/shell/explorer/shell/regfs.h b/base/shell/explorer/shell/regfs.h similarity index 100% rename from reactos/base/shell/explorer/shell/regfs.h rename to base/shell/explorer/shell/regfs.h diff --git a/reactos/base/shell/explorer/shell/shellbrowser.cpp b/base/shell/explorer/shell/shellbrowser.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/shellbrowser.cpp rename to base/shell/explorer/shell/shellbrowser.cpp diff --git a/reactos/base/shell/explorer/shell/shellbrowser.h b/base/shell/explorer/shell/shellbrowser.h similarity index 100% rename from reactos/base/shell/explorer/shell/shellbrowser.h rename to base/shell/explorer/shell/shellbrowser.h diff --git a/reactos/base/shell/explorer/shell/shellfs.cpp b/base/shell/explorer/shell/shellfs.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/shellfs.cpp rename to base/shell/explorer/shell/shellfs.cpp diff --git a/reactos/base/shell/explorer/shell/shellfs.h b/base/shell/explorer/shell/shellfs.h similarity index 100% rename from reactos/base/shell/explorer/shell/shellfs.h rename to base/shell/explorer/shell/shellfs.h diff --git a/reactos/base/shell/explorer/shell/unixfs.cpp b/base/shell/explorer/shell/unixfs.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/unixfs.cpp rename to base/shell/explorer/shell/unixfs.cpp diff --git a/reactos/base/shell/explorer/shell/unixfs.h b/base/shell/explorer/shell/unixfs.h similarity index 100% rename from reactos/base/shell/explorer/shell/unixfs.h rename to base/shell/explorer/shell/unixfs.h diff --git a/reactos/base/shell/explorer/shell/webchild.cpp b/base/shell/explorer/shell/webchild.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/webchild.cpp rename to base/shell/explorer/shell/webchild.cpp diff --git a/reactos/base/shell/explorer/shell/webchild.h b/base/shell/explorer/shell/webchild.h similarity index 100% rename from reactos/base/shell/explorer/shell/webchild.h rename to base/shell/explorer/shell/webchild.h diff --git a/reactos/base/shell/explorer/shell/winfs.cpp b/base/shell/explorer/shell/winfs.cpp similarity index 100% rename from reactos/base/shell/explorer/shell/winfs.cpp rename to base/shell/explorer/shell/winfs.cpp diff --git a/reactos/base/shell/explorer/shell/winfs.h b/base/shell/explorer/shell/winfs.h similarity index 100% rename from reactos/base/shell/explorer/shell/winfs.h rename to base/shell/explorer/shell/winfs.h diff --git a/reactos/base/shell/explorer/taskbar/desktopbar.cpp b/base/shell/explorer/taskbar/desktopbar.cpp similarity index 100% rename from reactos/base/shell/explorer/taskbar/desktopbar.cpp rename to base/shell/explorer/taskbar/desktopbar.cpp diff --git a/reactos/base/shell/explorer/taskbar/desktopbar.h b/base/shell/explorer/taskbar/desktopbar.h similarity index 100% rename from reactos/base/shell/explorer/taskbar/desktopbar.h rename to base/shell/explorer/taskbar/desktopbar.h diff --git a/reactos/base/shell/explorer/taskbar/favorites.cpp b/base/shell/explorer/taskbar/favorites.cpp similarity index 100% rename from reactos/base/shell/explorer/taskbar/favorites.cpp rename to base/shell/explorer/taskbar/favorites.cpp diff --git a/reactos/base/shell/explorer/taskbar/favorites.h b/base/shell/explorer/taskbar/favorites.h similarity index 100% rename from reactos/base/shell/explorer/taskbar/favorites.h rename to base/shell/explorer/taskbar/favorites.h diff --git a/reactos/base/shell/explorer/taskbar/quicklaunch.cpp b/base/shell/explorer/taskbar/quicklaunch.cpp similarity index 100% rename from reactos/base/shell/explorer/taskbar/quicklaunch.cpp rename to base/shell/explorer/taskbar/quicklaunch.cpp diff --git a/reactos/base/shell/explorer/taskbar/quicklaunch.h b/base/shell/explorer/taskbar/quicklaunch.h similarity index 100% rename from reactos/base/shell/explorer/taskbar/quicklaunch.h rename to base/shell/explorer/taskbar/quicklaunch.h diff --git a/reactos/base/shell/explorer/taskbar/startmenu.cpp b/base/shell/explorer/taskbar/startmenu.cpp similarity index 100% rename from reactos/base/shell/explorer/taskbar/startmenu.cpp rename to base/shell/explorer/taskbar/startmenu.cpp diff --git a/reactos/base/shell/explorer/taskbar/startmenu.h b/base/shell/explorer/taskbar/startmenu.h similarity index 100% rename from reactos/base/shell/explorer/taskbar/startmenu.h rename to base/shell/explorer/taskbar/startmenu.h diff --git a/reactos/base/shell/explorer/taskbar/taskbar.cpp b/base/shell/explorer/taskbar/taskbar.cpp similarity index 100% rename from reactos/base/shell/explorer/taskbar/taskbar.cpp rename to base/shell/explorer/taskbar/taskbar.cpp diff --git a/reactos/base/shell/explorer/taskbar/taskbar.h b/base/shell/explorer/taskbar/taskbar.h similarity index 100% rename from reactos/base/shell/explorer/taskbar/taskbar.h rename to base/shell/explorer/taskbar/taskbar.h diff --git a/reactos/base/shell/explorer/taskbar/traynotify.cpp b/base/shell/explorer/taskbar/traynotify.cpp similarity index 100% rename from reactos/base/shell/explorer/taskbar/traynotify.cpp rename to base/shell/explorer/taskbar/traynotify.cpp diff --git a/reactos/base/shell/explorer/taskbar/traynotify.h b/base/shell/explorer/taskbar/traynotify.h similarity index 100% rename from reactos/base/shell/explorer/taskbar/traynotify.h rename to base/shell/explorer/taskbar/traynotify.h diff --git a/reactos/base/shell/explorer/utility/dragdropimpl.cpp b/base/shell/explorer/utility/dragdropimpl.cpp similarity index 100% rename from reactos/base/shell/explorer/utility/dragdropimpl.cpp rename to base/shell/explorer/utility/dragdropimpl.cpp diff --git a/reactos/base/shell/explorer/utility/dragdropimpl.h b/base/shell/explorer/utility/dragdropimpl.h similarity index 100% rename from reactos/base/shell/explorer/utility/dragdropimpl.h rename to base/shell/explorer/utility/dragdropimpl.h diff --git a/reactos/base/shell/explorer/utility/shellbrowserimpl.cpp b/base/shell/explorer/utility/shellbrowserimpl.cpp similarity index 100% rename from reactos/base/shell/explorer/utility/shellbrowserimpl.cpp rename to base/shell/explorer/utility/shellbrowserimpl.cpp diff --git a/reactos/base/shell/explorer/utility/shellbrowserimpl.h b/base/shell/explorer/utility/shellbrowserimpl.h similarity index 100% rename from reactos/base/shell/explorer/utility/shellbrowserimpl.h rename to base/shell/explorer/utility/shellbrowserimpl.h diff --git a/reactos/base/shell/explorer/utility/shellclasses.cpp b/base/shell/explorer/utility/shellclasses.cpp similarity index 100% rename from reactos/base/shell/explorer/utility/shellclasses.cpp rename to base/shell/explorer/utility/shellclasses.cpp diff --git a/reactos/base/shell/explorer/utility/shellclasses.dsp b/base/shell/explorer/utility/shellclasses.dsp similarity index 100% rename from reactos/base/shell/explorer/utility/shellclasses.dsp rename to base/shell/explorer/utility/shellclasses.dsp diff --git a/reactos/base/shell/explorer/utility/shellclasses.dsw b/base/shell/explorer/utility/shellclasses.dsw similarity index 100% rename from reactos/base/shell/explorer/utility/shellclasses.dsw rename to base/shell/explorer/utility/shellclasses.dsw diff --git a/reactos/base/shell/explorer/utility/shellclasses.h b/base/shell/explorer/utility/shellclasses.h similarity index 100% rename from reactos/base/shell/explorer/utility/shellclasses.h rename to base/shell/explorer/utility/shellclasses.h diff --git a/reactos/base/shell/explorer/utility/shelltests.cpp b/base/shell/explorer/utility/shelltests.cpp similarity index 100% rename from reactos/base/shell/explorer/utility/shelltests.cpp rename to base/shell/explorer/utility/shelltests.cpp diff --git a/reactos/base/shell/explorer/utility/splitpath.c b/base/shell/explorer/utility/splitpath.c similarity index 100% rename from reactos/base/shell/explorer/utility/splitpath.c rename to base/shell/explorer/utility/splitpath.c diff --git a/reactos/base/shell/explorer/utility/treedroptarget.h b/base/shell/explorer/utility/treedroptarget.h similarity index 100% rename from reactos/base/shell/explorer/utility/treedroptarget.h rename to base/shell/explorer/utility/treedroptarget.h diff --git a/reactos/base/shell/explorer/utility/utility.cpp b/base/shell/explorer/utility/utility.cpp similarity index 100% rename from reactos/base/shell/explorer/utility/utility.cpp rename to base/shell/explorer/utility/utility.cpp diff --git a/reactos/base/shell/explorer/utility/utility.h b/base/shell/explorer/utility/utility.h similarity index 100% rename from reactos/base/shell/explorer/utility/utility.h rename to base/shell/explorer/utility/utility.h diff --git a/reactos/base/shell/explorer/utility/window.cpp b/base/shell/explorer/utility/window.cpp similarity index 100% rename from reactos/base/shell/explorer/utility/window.cpp rename to base/shell/explorer/utility/window.cpp diff --git a/reactos/base/shell/explorer/utility/window.h b/base/shell/explorer/utility/window.h similarity index 100% rename from reactos/base/shell/explorer/utility/window.h rename to base/shell/explorer/utility/window.h diff --git a/reactos/base/shell/explorer/utility/xmlstorage.cpp b/base/shell/explorer/utility/xmlstorage.cpp similarity index 100% rename from reactos/base/shell/explorer/utility/xmlstorage.cpp rename to base/shell/explorer/utility/xmlstorage.cpp diff --git a/reactos/base/shell/explorer/utility/xmlstorage.h b/base/shell/explorer/utility/xmlstorage.h similarity index 100% rename from reactos/base/shell/explorer/utility/xmlstorage.h rename to base/shell/explorer/utility/xmlstorage.h diff --git a/reactos/base/shell/explorer/utility/xs-native.cpp b/base/shell/explorer/utility/xs-native.cpp similarity index 100% rename from reactos/base/shell/explorer/utility/xs-native.cpp rename to base/shell/explorer/utility/xs-native.cpp diff --git a/reactos/base/shell/explorer/wexplorer.dsw b/base/shell/explorer/wexplorer.dsw similarity index 100% rename from reactos/base/shell/explorer/wexplorer.dsw rename to base/shell/explorer/wexplorer.dsw diff --git a/reactos/base/shell/shell.rbuild b/base/shell/shell.rbuild similarity index 100% rename from reactos/base/shell/shell.rbuild rename to base/shell/shell.rbuild diff --git a/reactos/base/system/autochk/autochk.c b/base/system/autochk/autochk.c similarity index 100% rename from reactos/base/system/autochk/autochk.c rename to base/system/autochk/autochk.c diff --git a/reactos/base/system/autochk/autochk.rbuild b/base/system/autochk/autochk.rbuild similarity index 100% rename from reactos/base/system/autochk/autochk.rbuild rename to base/system/autochk/autochk.rbuild diff --git a/reactos/base/system/autochk/autochk.rc b/base/system/autochk/autochk.rc similarity index 100% rename from reactos/base/system/autochk/autochk.rc rename to base/system/autochk/autochk.rc diff --git a/reactos/base/system/bootok/bootok.c b/base/system/bootok/bootok.c similarity index 100% rename from reactos/base/system/bootok/bootok.c rename to base/system/bootok/bootok.c diff --git a/reactos/base/system/bootok/bootok.rbuild b/base/system/bootok/bootok.rbuild similarity index 100% rename from reactos/base/system/bootok/bootok.rbuild rename to base/system/bootok/bootok.rbuild diff --git a/reactos/base/system/bootok/bootok.rc b/base/system/bootok/bootok.rc similarity index 100% rename from reactos/base/system/bootok/bootok.rc rename to base/system/bootok/bootok.rc diff --git a/reactos/base/system/expand/expand.c b/base/system/expand/expand.c similarity index 100% rename from reactos/base/system/expand/expand.c rename to base/system/expand/expand.c diff --git a/reactos/base/system/expand/expand.rbuild b/base/system/expand/expand.rbuild similarity index 100% rename from reactos/base/system/expand/expand.rbuild rename to base/system/expand/expand.rbuild diff --git a/reactos/base/system/expand/expand.rc b/base/system/expand/expand.rc similarity index 100% rename from reactos/base/system/expand/expand.rc rename to base/system/expand/expand.rc diff --git a/reactos/base/system/expand/lang/bg-BG.rc b/base/system/expand/lang/bg-BG.rc similarity index 100% rename from reactos/base/system/expand/lang/bg-BG.rc rename to base/system/expand/lang/bg-BG.rc diff --git a/reactos/base/system/expand/lang/cs-CZ.rc b/base/system/expand/lang/cs-CZ.rc similarity index 100% rename from reactos/base/system/expand/lang/cs-CZ.rc rename to base/system/expand/lang/cs-CZ.rc diff --git a/reactos/base/system/expand/lang/de-DE.rc b/base/system/expand/lang/de-DE.rc similarity index 100% rename from reactos/base/system/expand/lang/de-DE.rc rename to base/system/expand/lang/de-DE.rc diff --git a/reactos/base/system/expand/lang/el-GR.rc b/base/system/expand/lang/el-GR.rc similarity index 100% rename from reactos/base/system/expand/lang/el-GR.rc rename to base/system/expand/lang/el-GR.rc diff --git a/reactos/base/system/expand/lang/en-US.rc b/base/system/expand/lang/en-US.rc similarity index 100% rename from reactos/base/system/expand/lang/en-US.rc rename to base/system/expand/lang/en-US.rc diff --git a/reactos/base/system/expand/lang/es-ES.rc b/base/system/expand/lang/es-ES.rc similarity index 100% rename from reactos/base/system/expand/lang/es-ES.rc rename to base/system/expand/lang/es-ES.rc diff --git a/reactos/base/system/expand/lang/fr-FR.rc b/base/system/expand/lang/fr-FR.rc similarity index 100% rename from reactos/base/system/expand/lang/fr-FR.rc rename to base/system/expand/lang/fr-FR.rc diff --git a/reactos/base/system/expand/lang/hu-HU.rc b/base/system/expand/lang/hu-HU.rc similarity index 100% rename from reactos/base/system/expand/lang/hu-HU.rc rename to base/system/expand/lang/hu-HU.rc diff --git a/reactos/base/system/expand/lang/id-ID.rc b/base/system/expand/lang/id-ID.rc similarity index 100% rename from reactos/base/system/expand/lang/id-ID.rc rename to base/system/expand/lang/id-ID.rc diff --git a/reactos/base/system/expand/lang/it-IT.rc b/base/system/expand/lang/it-IT.rc similarity index 100% rename from reactos/base/system/expand/lang/it-IT.rc rename to base/system/expand/lang/it-IT.rc diff --git a/reactos/base/system/expand/lang/ja-JP.rc b/base/system/expand/lang/ja-JP.rc similarity index 100% rename from reactos/base/system/expand/lang/ja-JP.rc rename to base/system/expand/lang/ja-JP.rc diff --git a/reactos/base/system/expand/lang/lt-LT.rc b/base/system/expand/lang/lt-LT.rc similarity index 100% rename from reactos/base/system/expand/lang/lt-LT.rc rename to base/system/expand/lang/lt-LT.rc diff --git a/reactos/base/system/expand/lang/no-NO.rc b/base/system/expand/lang/no-NO.rc similarity index 100% rename from reactos/base/system/expand/lang/no-NO.rc rename to base/system/expand/lang/no-NO.rc diff --git a/reactos/base/system/expand/lang/pl-PL.rc b/base/system/expand/lang/pl-PL.rc similarity index 100% rename from reactos/base/system/expand/lang/pl-PL.rc rename to base/system/expand/lang/pl-PL.rc diff --git a/reactos/base/system/expand/lang/pt-BR.rc b/base/system/expand/lang/pt-BR.rc similarity index 100% rename from reactos/base/system/expand/lang/pt-BR.rc rename to base/system/expand/lang/pt-BR.rc diff --git a/reactos/base/system/expand/lang/ru-RU.rc b/base/system/expand/lang/ru-RU.rc similarity index 100% rename from reactos/base/system/expand/lang/ru-RU.rc rename to base/system/expand/lang/ru-RU.rc diff --git a/reactos/base/system/expand/lang/sv-SE.rc b/base/system/expand/lang/sv-SE.rc similarity index 100% rename from reactos/base/system/expand/lang/sv-SE.rc rename to base/system/expand/lang/sv-SE.rc diff --git a/reactos/base/system/expand/lang/th-TH.rc b/base/system/expand/lang/th-TH.rc similarity index 100% rename from reactos/base/system/expand/lang/th-TH.rc rename to base/system/expand/lang/th-TH.rc diff --git a/reactos/base/system/expand/lang/uk-UA.rc b/base/system/expand/lang/uk-UA.rc similarity index 100% rename from reactos/base/system/expand/lang/uk-UA.rc rename to base/system/expand/lang/uk-UA.rc diff --git a/reactos/base/system/expand/resource.h b/base/system/expand/resource.h similarity index 100% rename from reactos/base/system/expand/resource.h rename to base/system/expand/resource.h diff --git a/reactos/base/system/expand/rsrc.rc b/base/system/expand/rsrc.rc similarity index 100% rename from reactos/base/system/expand/rsrc.rc rename to base/system/expand/rsrc.rc diff --git a/reactos/base/system/format/format.c b/base/system/format/format.c similarity index 100% rename from reactos/base/system/format/format.c rename to base/system/format/format.c diff --git a/reactos/base/system/format/format.rbuild b/base/system/format/format.rbuild similarity index 100% rename from reactos/base/system/format/format.rbuild rename to base/system/format/format.rbuild diff --git a/reactos/base/system/format/format.rc b/base/system/format/format.rc similarity index 100% rename from reactos/base/system/format/format.rc rename to base/system/format/format.rc diff --git a/reactos/base/system/format/lang/bg-BG.rc b/base/system/format/lang/bg-BG.rc similarity index 100% rename from reactos/base/system/format/lang/bg-BG.rc rename to base/system/format/lang/bg-BG.rc diff --git a/reactos/base/system/format/lang/cs-CZ.rc b/base/system/format/lang/cs-CZ.rc similarity index 100% rename from reactos/base/system/format/lang/cs-CZ.rc rename to base/system/format/lang/cs-CZ.rc diff --git a/reactos/base/system/format/lang/de-DE.rc b/base/system/format/lang/de-DE.rc similarity index 100% rename from reactos/base/system/format/lang/de-DE.rc rename to base/system/format/lang/de-DE.rc diff --git a/reactos/base/system/format/lang/el-GR.rc b/base/system/format/lang/el-GR.rc similarity index 100% rename from reactos/base/system/format/lang/el-GR.rc rename to base/system/format/lang/el-GR.rc diff --git a/reactos/base/system/format/lang/en-US.rc b/base/system/format/lang/en-US.rc similarity index 100% rename from reactos/base/system/format/lang/en-US.rc rename to base/system/format/lang/en-US.rc diff --git a/reactos/base/system/format/lang/es-ES.rc b/base/system/format/lang/es-ES.rc similarity index 100% rename from reactos/base/system/format/lang/es-ES.rc rename to base/system/format/lang/es-ES.rc diff --git a/reactos/base/system/format/lang/fr-FR.rc b/base/system/format/lang/fr-FR.rc similarity index 100% rename from reactos/base/system/format/lang/fr-FR.rc rename to base/system/format/lang/fr-FR.rc diff --git a/reactos/base/system/format/lang/hu-HU.rc b/base/system/format/lang/hu-HU.rc similarity index 100% rename from reactos/base/system/format/lang/hu-HU.rc rename to base/system/format/lang/hu-HU.rc diff --git a/reactos/base/system/format/lang/id-ID.rc b/base/system/format/lang/id-ID.rc similarity index 100% rename from reactos/base/system/format/lang/id-ID.rc rename to base/system/format/lang/id-ID.rc diff --git a/reactos/base/system/format/lang/it-IT.rc b/base/system/format/lang/it-IT.rc similarity index 100% rename from reactos/base/system/format/lang/it-IT.rc rename to base/system/format/lang/it-IT.rc diff --git a/reactos/base/system/format/lang/ja-JP.rc b/base/system/format/lang/ja-JP.rc similarity index 100% rename from reactos/base/system/format/lang/ja-JP.rc rename to base/system/format/lang/ja-JP.rc diff --git a/reactos/base/system/format/lang/lt-LT.rc b/base/system/format/lang/lt-LT.rc similarity index 100% rename from reactos/base/system/format/lang/lt-LT.rc rename to base/system/format/lang/lt-LT.rc diff --git a/reactos/base/system/format/lang/no-NO.rc b/base/system/format/lang/no-NO.rc similarity index 100% rename from reactos/base/system/format/lang/no-NO.rc rename to base/system/format/lang/no-NO.rc diff --git a/reactos/base/system/format/lang/pl-PL.rc b/base/system/format/lang/pl-PL.rc similarity index 100% rename from reactos/base/system/format/lang/pl-PL.rc rename to base/system/format/lang/pl-PL.rc diff --git a/reactos/base/system/format/lang/ru-RU.rc b/base/system/format/lang/ru-RU.rc similarity index 100% rename from reactos/base/system/format/lang/ru-RU.rc rename to base/system/format/lang/ru-RU.rc diff --git a/reactos/base/system/format/lang/sk-SK.rc b/base/system/format/lang/sk-SK.rc similarity index 100% rename from reactos/base/system/format/lang/sk-SK.rc rename to base/system/format/lang/sk-SK.rc diff --git a/reactos/base/system/format/lang/uk-UA.rc b/base/system/format/lang/uk-UA.rc similarity index 100% rename from reactos/base/system/format/lang/uk-UA.rc rename to base/system/format/lang/uk-UA.rc diff --git a/reactos/base/system/format/resource.h b/base/system/format/resource.h similarity index 100% rename from reactos/base/system/format/resource.h rename to base/system/format/resource.h diff --git a/reactos/base/system/format/rsrc.rc b/base/system/format/rsrc.rc similarity index 100% rename from reactos/base/system/format/rsrc.rc rename to base/system/format/rsrc.rc diff --git a/reactos/base/system/lsass/lsass.c b/base/system/lsass/lsass.c similarity index 100% rename from reactos/base/system/lsass/lsass.c rename to base/system/lsass/lsass.c diff --git a/reactos/base/system/lsass/lsass.rbuild b/base/system/lsass/lsass.rbuild similarity index 100% rename from reactos/base/system/lsass/lsass.rbuild rename to base/system/lsass/lsass.rbuild diff --git a/reactos/base/system/lsass/lsass.rc b/base/system/lsass/lsass.rc similarity index 100% rename from reactos/base/system/lsass/lsass.rc rename to base/system/lsass/lsass.rc diff --git a/reactos/base/system/msiexec/msiexec.c b/base/system/msiexec/msiexec.c similarity index 100% rename from reactos/base/system/msiexec/msiexec.c rename to base/system/msiexec/msiexec.c diff --git a/reactos/base/system/msiexec/msiexec.ico b/base/system/msiexec/msiexec.ico similarity index 100% rename from reactos/base/system/msiexec/msiexec.ico rename to base/system/msiexec/msiexec.ico diff --git a/reactos/base/system/msiexec/msiexec.rbuild b/base/system/msiexec/msiexec.rbuild similarity index 100% rename from reactos/base/system/msiexec/msiexec.rbuild rename to base/system/msiexec/msiexec.rbuild diff --git a/reactos/base/system/msiexec/rsrc.rc b/base/system/msiexec/rsrc.rc similarity index 100% rename from reactos/base/system/msiexec/rsrc.rc rename to base/system/msiexec/rsrc.rc diff --git a/reactos/base/system/msiexec/service.c b/base/system/msiexec/service.c similarity index 100% rename from reactos/base/system/msiexec/service.c rename to base/system/msiexec/service.c diff --git a/reactos/base/system/msiexec/version.rc b/base/system/msiexec/version.rc similarity index 100% rename from reactos/base/system/msiexec/version.rc rename to base/system/msiexec/version.rc diff --git a/reactos/base/system/regsvr32/lang/cs-CZ.rc b/base/system/regsvr32/lang/cs-CZ.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/cs-CZ.rc rename to base/system/regsvr32/lang/cs-CZ.rc diff --git a/reactos/base/system/regsvr32/lang/de-DE.rc b/base/system/regsvr32/lang/de-DE.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/de-DE.rc rename to base/system/regsvr32/lang/de-DE.rc diff --git a/reactos/base/system/regsvr32/lang/en-US.rc b/base/system/regsvr32/lang/en-US.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/en-US.rc rename to base/system/regsvr32/lang/en-US.rc diff --git a/reactos/base/system/regsvr32/lang/es-ES.rc b/base/system/regsvr32/lang/es-ES.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/es-ES.rc rename to base/system/regsvr32/lang/es-ES.rc diff --git a/reactos/base/system/regsvr32/lang/fr-FR.rc b/base/system/regsvr32/lang/fr-FR.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/fr-FR.rc rename to base/system/regsvr32/lang/fr-FR.rc diff --git a/reactos/base/system/regsvr32/lang/hu-HU.rc b/base/system/regsvr32/lang/hu-HU.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/hu-HU.rc rename to base/system/regsvr32/lang/hu-HU.rc diff --git a/reactos/base/system/regsvr32/lang/id-ID.rc b/base/system/regsvr32/lang/id-ID.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/id-ID.rc rename to base/system/regsvr32/lang/id-ID.rc diff --git a/reactos/base/system/regsvr32/lang/it-IT.rc b/base/system/regsvr32/lang/it-IT.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/it-IT.rc rename to base/system/regsvr32/lang/it-IT.rc diff --git a/reactos/base/system/regsvr32/lang/ja-JP.rc b/base/system/regsvr32/lang/ja-JP.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/ja-JP.rc rename to base/system/regsvr32/lang/ja-JP.rc diff --git a/reactos/base/system/regsvr32/lang/lt-LT.rc b/base/system/regsvr32/lang/lt-LT.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/lt-LT.rc rename to base/system/regsvr32/lang/lt-LT.rc diff --git a/reactos/base/system/regsvr32/lang/no-NO.rc b/base/system/regsvr32/lang/no-NO.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/no-NO.rc rename to base/system/regsvr32/lang/no-NO.rc diff --git a/reactos/base/system/regsvr32/lang/pl-PL.rc b/base/system/regsvr32/lang/pl-PL.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/pl-PL.rc rename to base/system/regsvr32/lang/pl-PL.rc diff --git a/reactos/base/system/regsvr32/lang/pt-BR.rc b/base/system/regsvr32/lang/pt-BR.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/pt-BR.rc rename to base/system/regsvr32/lang/pt-BR.rc diff --git a/reactos/base/system/regsvr32/lang/ru-RU.rc b/base/system/regsvr32/lang/ru-RU.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/ru-RU.rc rename to base/system/regsvr32/lang/ru-RU.rc diff --git a/reactos/base/system/regsvr32/lang/uk-UA.rc b/base/system/regsvr32/lang/uk-UA.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/uk-UA.rc rename to base/system/regsvr32/lang/uk-UA.rc diff --git a/reactos/base/system/regsvr32/regsvr32.c b/base/system/regsvr32/regsvr32.c similarity index 100% rename from reactos/base/system/regsvr32/regsvr32.c rename to base/system/regsvr32/regsvr32.c diff --git a/reactos/base/system/regsvr32/regsvr32.rbuild b/base/system/regsvr32/regsvr32.rbuild similarity index 100% rename from reactos/base/system/regsvr32/regsvr32.rbuild rename to base/system/regsvr32/regsvr32.rbuild diff --git a/reactos/base/system/regsvr32/regsvr32.rc b/base/system/regsvr32/regsvr32.rc similarity index 100% rename from reactos/base/system/regsvr32/regsvr32.rc rename to base/system/regsvr32/regsvr32.rc diff --git a/reactos/base/system/regsvr32/resource.h b/base/system/regsvr32/resource.h similarity index 100% rename from reactos/base/system/regsvr32/resource.h rename to base/system/regsvr32/resource.h diff --git a/reactos/base/system/regsvr32/rsrc.rc b/base/system/regsvr32/rsrc.rc similarity index 100% rename from reactos/base/system/regsvr32/rsrc.rc rename to base/system/regsvr32/rsrc.rc diff --git a/reactos/base/system/rundll32/lang/bg-BG.rc b/base/system/rundll32/lang/bg-BG.rc similarity index 100% rename from reactos/base/system/rundll32/lang/bg-BG.rc rename to base/system/rundll32/lang/bg-BG.rc diff --git a/reactos/base/system/rundll32/lang/cs-CZ.rc b/base/system/rundll32/lang/cs-CZ.rc similarity index 100% rename from reactos/base/system/rundll32/lang/cs-CZ.rc rename to base/system/rundll32/lang/cs-CZ.rc diff --git a/reactos/base/system/rundll32/lang/de-DE.rc b/base/system/rundll32/lang/de-DE.rc similarity index 100% rename from reactos/base/system/rundll32/lang/de-DE.rc rename to base/system/rundll32/lang/de-DE.rc diff --git a/reactos/base/system/rundll32/lang/el-GR.rc b/base/system/rundll32/lang/el-GR.rc similarity index 100% rename from reactos/base/system/rundll32/lang/el-GR.rc rename to base/system/rundll32/lang/el-GR.rc diff --git a/reactos/base/system/rundll32/lang/en-US.rc b/base/system/rundll32/lang/en-US.rc similarity index 100% rename from reactos/base/system/rundll32/lang/en-US.rc rename to base/system/rundll32/lang/en-US.rc diff --git a/reactos/base/system/rundll32/lang/es-ES.rc b/base/system/rundll32/lang/es-ES.rc similarity index 100% rename from reactos/base/system/rundll32/lang/es-ES.rc rename to base/system/rundll32/lang/es-ES.rc diff --git a/reactos/base/system/rundll32/lang/fr-FR.rc b/base/system/rundll32/lang/fr-FR.rc similarity index 100% rename from reactos/base/system/rundll32/lang/fr-FR.rc rename to base/system/rundll32/lang/fr-FR.rc diff --git a/reactos/base/system/rundll32/lang/hu-HU.rc b/base/system/rundll32/lang/hu-HU.rc similarity index 100% rename from reactos/base/system/rundll32/lang/hu-HU.rc rename to base/system/rundll32/lang/hu-HU.rc diff --git a/reactos/base/system/rundll32/lang/id-ID.rc b/base/system/rundll32/lang/id-ID.rc similarity index 100% rename from reactos/base/system/rundll32/lang/id-ID.rc rename to base/system/rundll32/lang/id-ID.rc diff --git a/reactos/base/system/rundll32/lang/it-IT.rc b/base/system/rundll32/lang/it-IT.rc similarity index 100% rename from reactos/base/system/rundll32/lang/it-IT.rc rename to base/system/rundll32/lang/it-IT.rc diff --git a/reactos/base/system/rundll32/lang/ja-JP.rc b/base/system/rundll32/lang/ja-JP.rc similarity index 100% rename from reactos/base/system/rundll32/lang/ja-JP.rc rename to base/system/rundll32/lang/ja-JP.rc diff --git a/reactos/base/system/rundll32/lang/lt-LT.rc b/base/system/rundll32/lang/lt-LT.rc similarity index 100% rename from reactos/base/system/rundll32/lang/lt-LT.rc rename to base/system/rundll32/lang/lt-LT.rc diff --git a/reactos/base/system/rundll32/lang/nl-NL.rc b/base/system/rundll32/lang/nl-NL.rc similarity index 100% rename from reactos/base/system/rundll32/lang/nl-NL.rc rename to base/system/rundll32/lang/nl-NL.rc diff --git a/reactos/base/system/rundll32/lang/no-NO.rc b/base/system/rundll32/lang/no-NO.rc similarity index 100% rename from reactos/base/system/rundll32/lang/no-NO.rc rename to base/system/rundll32/lang/no-NO.rc diff --git a/reactos/base/system/rundll32/lang/pl-PL.rc b/base/system/rundll32/lang/pl-PL.rc similarity index 100% rename from reactos/base/system/rundll32/lang/pl-PL.rc rename to base/system/rundll32/lang/pl-PL.rc diff --git a/reactos/base/system/rundll32/lang/pt-BR.rc b/base/system/rundll32/lang/pt-BR.rc similarity index 100% rename from reactos/base/system/rundll32/lang/pt-BR.rc rename to base/system/rundll32/lang/pt-BR.rc diff --git a/reactos/base/system/rundll32/lang/ru-RU.rc b/base/system/rundll32/lang/ru-RU.rc similarity index 100% rename from reactos/base/system/rundll32/lang/ru-RU.rc rename to base/system/rundll32/lang/ru-RU.rc diff --git a/reactos/base/system/rundll32/lang/sk-SK.rc b/base/system/rundll32/lang/sk-SK.rc similarity index 100% rename from reactos/base/system/rundll32/lang/sk-SK.rc rename to base/system/rundll32/lang/sk-SK.rc diff --git a/reactos/base/system/rundll32/lang/th-TH.rc b/base/system/rundll32/lang/th-TH.rc similarity index 100% rename from reactos/base/system/rundll32/lang/th-TH.rc rename to base/system/rundll32/lang/th-TH.rc diff --git a/reactos/base/system/rundll32/lang/uk-UA.rc b/base/system/rundll32/lang/uk-UA.rc similarity index 100% rename from reactos/base/system/rundll32/lang/uk-UA.rc rename to base/system/rundll32/lang/uk-UA.rc diff --git a/reactos/base/system/rundll32/resource.h b/base/system/rundll32/resource.h similarity index 100% rename from reactos/base/system/rundll32/resource.h rename to base/system/rundll32/resource.h diff --git a/reactos/base/system/rundll32/rsrc.rc b/base/system/rundll32/rsrc.rc similarity index 100% rename from reactos/base/system/rundll32/rsrc.rc rename to base/system/rundll32/rsrc.rc diff --git a/reactos/base/system/rundll32/rundll32.c b/base/system/rundll32/rundll32.c similarity index 100% rename from reactos/base/system/rundll32/rundll32.c rename to base/system/rundll32/rundll32.c diff --git a/reactos/base/system/rundll32/rundll32.rbuild b/base/system/rundll32/rundll32.rbuild similarity index 100% rename from reactos/base/system/rundll32/rundll32.rbuild rename to base/system/rundll32/rundll32.rbuild diff --git a/reactos/base/system/rundll32/rundll32.rc b/base/system/rundll32/rundll32.rc similarity index 100% rename from reactos/base/system/rundll32/rundll32.rc rename to base/system/rundll32/rundll32.rc diff --git a/reactos/base/system/services/config.c b/base/system/services/config.c similarity index 100% rename from reactos/base/system/services/config.c rename to base/system/services/config.c diff --git a/reactos/base/system/services/database.c b/base/system/services/database.c similarity index 100% rename from reactos/base/system/services/database.c rename to base/system/services/database.c diff --git a/reactos/base/system/services/driver.c b/base/system/services/driver.c similarity index 100% rename from reactos/base/system/services/driver.c rename to base/system/services/driver.c diff --git a/reactos/base/system/services/groupdb.c b/base/system/services/groupdb.c similarity index 100% rename from reactos/base/system/services/groupdb.c rename to base/system/services/groupdb.c diff --git a/reactos/base/system/services/rpcserver.c b/base/system/services/rpcserver.c similarity index 100% rename from reactos/base/system/services/rpcserver.c rename to base/system/services/rpcserver.c diff --git a/reactos/base/system/services/services.c b/base/system/services/services.c similarity index 100% rename from reactos/base/system/services/services.c rename to base/system/services/services.c diff --git a/reactos/base/system/services/services.h b/base/system/services/services.h similarity index 100% rename from reactos/base/system/services/services.h rename to base/system/services/services.h diff --git a/reactos/base/system/services/services.rbuild b/base/system/services/services.rbuild similarity index 100% rename from reactos/base/system/services/services.rbuild rename to base/system/services/services.rbuild diff --git a/reactos/base/system/services/services.rc b/base/system/services/services.rc similarity index 100% rename from reactos/base/system/services/services.rc rename to base/system/services/services.rc diff --git a/reactos/base/system/smss/client.c b/base/system/smss/client.c similarity index 100% rename from reactos/base/system/smss/client.c rename to base/system/smss/client.c diff --git a/reactos/base/system/smss/debug.c b/base/system/smss/debug.c similarity index 100% rename from reactos/base/system/smss/debug.c rename to base/system/smss/debug.c diff --git a/reactos/base/system/smss/init.c b/base/system/smss/init.c similarity index 100% rename from reactos/base/system/smss/init.c rename to base/system/smss/init.c diff --git a/reactos/base/system/smss/initdosdev.c b/base/system/smss/initdosdev.c similarity index 100% rename from reactos/base/system/smss/initdosdev.c rename to base/system/smss/initdosdev.c diff --git a/reactos/base/system/smss/initenv.c b/base/system/smss/initenv.c similarity index 100% rename from reactos/base/system/smss/initenv.c rename to base/system/smss/initenv.c diff --git a/reactos/base/system/smss/initheap.c b/base/system/smss/initheap.c similarity index 100% rename from reactos/base/system/smss/initheap.c rename to base/system/smss/initheap.c diff --git a/reactos/base/system/smss/initmv.c b/base/system/smss/initmv.c similarity index 100% rename from reactos/base/system/smss/initmv.c rename to base/system/smss/initmv.c diff --git a/reactos/base/system/smss/initobdir.c b/base/system/smss/initobdir.c similarity index 100% rename from reactos/base/system/smss/initobdir.c rename to base/system/smss/initobdir.c diff --git a/reactos/base/system/smss/initpage.c b/base/system/smss/initpage.c similarity index 100% rename from reactos/base/system/smss/initpage.c rename to base/system/smss/initpage.c diff --git a/reactos/base/system/smss/initreg.c b/base/system/smss/initreg.c similarity index 100% rename from reactos/base/system/smss/initreg.c rename to base/system/smss/initreg.c diff --git a/reactos/base/system/smss/initrun.c b/base/system/smss/initrun.c similarity index 100% rename from reactos/base/system/smss/initrun.c rename to base/system/smss/initrun.c diff --git a/reactos/base/system/smss/initss.c b/base/system/smss/initss.c similarity index 100% rename from reactos/base/system/smss/initss.c rename to base/system/smss/initss.c diff --git a/reactos/base/system/smss/initwkdll.c b/base/system/smss/initwkdll.c similarity index 100% rename from reactos/base/system/smss/initwkdll.c rename to base/system/smss/initwkdll.c diff --git a/reactos/base/system/smss/print.c b/base/system/smss/print.c similarity index 100% rename from reactos/base/system/smss/print.c rename to base/system/smss/print.c diff --git a/reactos/base/system/smss/smapi.c b/base/system/smss/smapi.c similarity index 100% rename from reactos/base/system/smss/smapi.c rename to base/system/smss/smapi.c diff --git a/reactos/base/system/smss/smapicomp.c b/base/system/smss/smapicomp.c similarity index 100% rename from reactos/base/system/smss/smapicomp.c rename to base/system/smss/smapicomp.c diff --git a/reactos/base/system/smss/smapiexec.c b/base/system/smss/smapiexec.c similarity index 100% rename from reactos/base/system/smss/smapiexec.c rename to base/system/smss/smapiexec.c diff --git a/reactos/base/system/smss/smapiquery.c b/base/system/smss/smapiquery.c similarity index 100% rename from reactos/base/system/smss/smapiquery.c rename to base/system/smss/smapiquery.c diff --git a/reactos/base/system/smss/smss.c b/base/system/smss/smss.c similarity index 100% rename from reactos/base/system/smss/smss.c rename to base/system/smss/smss.c diff --git a/reactos/base/system/smss/smss.h b/base/system/smss/smss.h similarity index 100% rename from reactos/base/system/smss/smss.h rename to base/system/smss/smss.h diff --git a/reactos/base/system/smss/smss.rbuild b/base/system/smss/smss.rbuild similarity index 100% rename from reactos/base/system/smss/smss.rbuild rename to base/system/smss/smss.rbuild diff --git a/reactos/base/system/smss/smss.rc b/base/system/smss/smss.rc similarity index 100% rename from reactos/base/system/smss/smss.rc rename to base/system/smss/smss.rc diff --git a/reactos/base/system/system.rbuild b/base/system/system.rbuild similarity index 100% rename from reactos/base/system/system.rbuild rename to base/system/system.rbuild diff --git a/reactos/base/system/userinit/lang/bg-BG.rc b/base/system/userinit/lang/bg-BG.rc similarity index 100% rename from reactos/base/system/userinit/lang/bg-BG.rc rename to base/system/userinit/lang/bg-BG.rc diff --git a/reactos/base/system/userinit/lang/cs-CZ.rc b/base/system/userinit/lang/cs-CZ.rc similarity index 100% rename from reactos/base/system/userinit/lang/cs-CZ.rc rename to base/system/userinit/lang/cs-CZ.rc diff --git a/reactos/base/system/userinit/lang/de-DE.rc b/base/system/userinit/lang/de-DE.rc similarity index 100% rename from reactos/base/system/userinit/lang/de-DE.rc rename to base/system/userinit/lang/de-DE.rc diff --git a/reactos/base/system/userinit/lang/el-GR.rc b/base/system/userinit/lang/el-GR.rc similarity index 100% rename from reactos/base/system/userinit/lang/el-GR.rc rename to base/system/userinit/lang/el-GR.rc diff --git a/reactos/base/system/userinit/lang/en-US.rc b/base/system/userinit/lang/en-US.rc similarity index 100% rename from reactos/base/system/userinit/lang/en-US.rc rename to base/system/userinit/lang/en-US.rc diff --git a/reactos/base/system/userinit/lang/es-ES.rc b/base/system/userinit/lang/es-ES.rc similarity index 100% rename from reactos/base/system/userinit/lang/es-ES.rc rename to base/system/userinit/lang/es-ES.rc diff --git a/reactos/base/system/userinit/lang/fr-FR.rc b/base/system/userinit/lang/fr-FR.rc similarity index 100% rename from reactos/base/system/userinit/lang/fr-FR.rc rename to base/system/userinit/lang/fr-FR.rc diff --git a/reactos/base/system/userinit/lang/hu-HU.rc b/base/system/userinit/lang/hu-HU.rc similarity index 100% rename from reactos/base/system/userinit/lang/hu-HU.rc rename to base/system/userinit/lang/hu-HU.rc diff --git a/reactos/base/system/userinit/lang/id-ID.rc b/base/system/userinit/lang/id-ID.rc similarity index 100% rename from reactos/base/system/userinit/lang/id-ID.rc rename to base/system/userinit/lang/id-ID.rc diff --git a/reactos/base/system/userinit/lang/it-IT.rc b/base/system/userinit/lang/it-IT.rc similarity index 100% rename from reactos/base/system/userinit/lang/it-IT.rc rename to base/system/userinit/lang/it-IT.rc diff --git a/reactos/base/system/userinit/lang/ja-JP.rc b/base/system/userinit/lang/ja-JP.rc similarity index 100% rename from reactos/base/system/userinit/lang/ja-JP.rc rename to base/system/userinit/lang/ja-JP.rc diff --git a/reactos/base/system/userinit/lang/lt-LT.rc b/base/system/userinit/lang/lt-LT.rc similarity index 100% rename from reactos/base/system/userinit/lang/lt-LT.rc rename to base/system/userinit/lang/lt-LT.rc diff --git a/reactos/base/system/userinit/lang/no-NO.rc b/base/system/userinit/lang/no-NO.rc similarity index 100% rename from reactos/base/system/userinit/lang/no-NO.rc rename to base/system/userinit/lang/no-NO.rc diff --git a/reactos/base/system/userinit/lang/pl-PL.rc b/base/system/userinit/lang/pl-PL.rc similarity index 100% rename from reactos/base/system/userinit/lang/pl-PL.rc rename to base/system/userinit/lang/pl-PL.rc diff --git a/reactos/base/system/userinit/lang/pt-BR.rc b/base/system/userinit/lang/pt-BR.rc similarity index 100% rename from reactos/base/system/userinit/lang/pt-BR.rc rename to base/system/userinit/lang/pt-BR.rc diff --git a/reactos/base/system/userinit/lang/ru-RU.rc b/base/system/userinit/lang/ru-RU.rc similarity index 100% rename from reactos/base/system/userinit/lang/ru-RU.rc rename to base/system/userinit/lang/ru-RU.rc diff --git a/reactos/base/system/userinit/lang/sk-SK.rc b/base/system/userinit/lang/sk-SK.rc similarity index 100% rename from reactos/base/system/userinit/lang/sk-SK.rc rename to base/system/userinit/lang/sk-SK.rc diff --git a/reactos/base/system/userinit/lang/sv-SE.rc b/base/system/userinit/lang/sv-SE.rc similarity index 100% rename from reactos/base/system/userinit/lang/sv-SE.rc rename to base/system/userinit/lang/sv-SE.rc diff --git a/reactos/base/system/userinit/lang/th-TH.rc b/base/system/userinit/lang/th-TH.rc similarity index 100% rename from reactos/base/system/userinit/lang/th-TH.rc rename to base/system/userinit/lang/th-TH.rc diff --git a/reactos/base/system/userinit/lang/uk-UA.rc b/base/system/userinit/lang/uk-UA.rc similarity index 100% rename from reactos/base/system/userinit/lang/uk-UA.rc rename to base/system/userinit/lang/uk-UA.rc diff --git a/reactos/base/system/userinit/resource.h b/base/system/userinit/resource.h similarity index 100% rename from reactos/base/system/userinit/resource.h rename to base/system/userinit/resource.h diff --git a/reactos/base/system/userinit/rsrc.rc b/base/system/userinit/rsrc.rc similarity index 100% rename from reactos/base/system/userinit/rsrc.rc rename to base/system/userinit/rsrc.rc diff --git a/reactos/base/system/userinit/userinit.c b/base/system/userinit/userinit.c similarity index 100% rename from reactos/base/system/userinit/userinit.c rename to base/system/userinit/userinit.c diff --git a/reactos/base/system/userinit/userinit.rbuild b/base/system/userinit/userinit.rbuild similarity index 100% rename from reactos/base/system/userinit/userinit.rbuild rename to base/system/userinit/userinit.rbuild diff --git a/reactos/base/system/userinit/userinit.rc b/base/system/userinit/userinit.rc similarity index 100% rename from reactos/base/system/userinit/userinit.rc rename to base/system/userinit/userinit.rc diff --git a/reactos/base/system/winlogon/lang/bg-BG.rc b/base/system/winlogon/lang/bg-BG.rc similarity index 100% rename from reactos/base/system/winlogon/lang/bg-BG.rc rename to base/system/winlogon/lang/bg-BG.rc diff --git a/reactos/base/system/winlogon/lang/cs-CZ.rc b/base/system/winlogon/lang/cs-CZ.rc similarity index 100% rename from reactos/base/system/winlogon/lang/cs-CZ.rc rename to base/system/winlogon/lang/cs-CZ.rc diff --git a/reactos/base/system/winlogon/lang/de-DE.rc b/base/system/winlogon/lang/de-DE.rc similarity index 100% rename from reactos/base/system/winlogon/lang/de-DE.rc rename to base/system/winlogon/lang/de-DE.rc diff --git a/reactos/base/system/winlogon/lang/el-GR.rc b/base/system/winlogon/lang/el-GR.rc similarity index 100% rename from reactos/base/system/winlogon/lang/el-GR.rc rename to base/system/winlogon/lang/el-GR.rc diff --git a/reactos/base/system/winlogon/lang/en-US.rc b/base/system/winlogon/lang/en-US.rc similarity index 100% rename from reactos/base/system/winlogon/lang/en-US.rc rename to base/system/winlogon/lang/en-US.rc diff --git a/reactos/base/system/winlogon/lang/es-ES.rc b/base/system/winlogon/lang/es-ES.rc similarity index 100% rename from reactos/base/system/winlogon/lang/es-ES.rc rename to base/system/winlogon/lang/es-ES.rc diff --git a/reactos/base/system/winlogon/lang/fr-FR.rc b/base/system/winlogon/lang/fr-FR.rc similarity index 100% rename from reactos/base/system/winlogon/lang/fr-FR.rc rename to base/system/winlogon/lang/fr-FR.rc diff --git a/reactos/base/system/winlogon/lang/hu-HU.rc b/base/system/winlogon/lang/hu-HU.rc similarity index 100% rename from reactos/base/system/winlogon/lang/hu-HU.rc rename to base/system/winlogon/lang/hu-HU.rc diff --git a/reactos/base/system/winlogon/lang/id-ID.rc b/base/system/winlogon/lang/id-ID.rc similarity index 100% rename from reactos/base/system/winlogon/lang/id-ID.rc rename to base/system/winlogon/lang/id-ID.rc diff --git a/reactos/base/system/winlogon/lang/it-IT.rc b/base/system/winlogon/lang/it-IT.rc similarity index 100% rename from reactos/base/system/winlogon/lang/it-IT.rc rename to base/system/winlogon/lang/it-IT.rc diff --git a/reactos/base/system/winlogon/lang/ja-JP.rc b/base/system/winlogon/lang/ja-JP.rc similarity index 100% rename from reactos/base/system/winlogon/lang/ja-JP.rc rename to base/system/winlogon/lang/ja-JP.rc diff --git a/reactos/base/system/winlogon/lang/lt-LT.rc b/base/system/winlogon/lang/lt-LT.rc similarity index 100% rename from reactos/base/system/winlogon/lang/lt-LT.rc rename to base/system/winlogon/lang/lt-LT.rc diff --git a/reactos/base/system/winlogon/lang/nl-NL.rc b/base/system/winlogon/lang/nl-NL.rc similarity index 100% rename from reactos/base/system/winlogon/lang/nl-NL.rc rename to base/system/winlogon/lang/nl-NL.rc diff --git a/reactos/base/system/winlogon/lang/no-NO.rc b/base/system/winlogon/lang/no-NO.rc similarity index 100% rename from reactos/base/system/winlogon/lang/no-NO.rc rename to base/system/winlogon/lang/no-NO.rc diff --git a/reactos/base/system/winlogon/lang/pl-PL.rc b/base/system/winlogon/lang/pl-PL.rc similarity index 100% rename from reactos/base/system/winlogon/lang/pl-PL.rc rename to base/system/winlogon/lang/pl-PL.rc diff --git a/reactos/base/system/winlogon/lang/ru-RU.rc b/base/system/winlogon/lang/ru-RU.rc similarity index 100% rename from reactos/base/system/winlogon/lang/ru-RU.rc rename to base/system/winlogon/lang/ru-RU.rc diff --git a/reactos/base/system/winlogon/lang/sk-SK.rc b/base/system/winlogon/lang/sk-SK.rc similarity index 100% rename from reactos/base/system/winlogon/lang/sk-SK.rc rename to base/system/winlogon/lang/sk-SK.rc diff --git a/reactos/base/system/winlogon/lang/sv-SE.rc b/base/system/winlogon/lang/sv-SE.rc similarity index 100% rename from reactos/base/system/winlogon/lang/sv-SE.rc rename to base/system/winlogon/lang/sv-SE.rc diff --git a/reactos/base/system/winlogon/lang/uk-UA.rc b/base/system/winlogon/lang/uk-UA.rc similarity index 100% rename from reactos/base/system/winlogon/lang/uk-UA.rc rename to base/system/winlogon/lang/uk-UA.rc diff --git a/reactos/base/system/winlogon/lang/zh-CN.rc b/base/system/winlogon/lang/zh-CN.rc similarity index 100% rename from reactos/base/system/winlogon/lang/zh-CN.rc rename to base/system/winlogon/lang/zh-CN.rc diff --git a/reactos/base/system/winlogon/resource.h b/base/system/winlogon/resource.h similarity index 100% rename from reactos/base/system/winlogon/resource.h rename to base/system/winlogon/resource.h diff --git a/reactos/base/system/winlogon/rsrc.rc b/base/system/winlogon/rsrc.rc similarity index 100% rename from reactos/base/system/winlogon/rsrc.rc rename to base/system/winlogon/rsrc.rc diff --git a/reactos/base/system/winlogon/sas.c b/base/system/winlogon/sas.c similarity index 100% rename from reactos/base/system/winlogon/sas.c rename to base/system/winlogon/sas.c diff --git a/reactos/base/system/winlogon/screensaver.c b/base/system/winlogon/screensaver.c similarity index 100% rename from reactos/base/system/winlogon/screensaver.c rename to base/system/winlogon/screensaver.c diff --git a/reactos/base/system/winlogon/setup.c b/base/system/winlogon/setup.c similarity index 100% rename from reactos/base/system/winlogon/setup.c rename to base/system/winlogon/setup.c diff --git a/reactos/base/system/winlogon/setup.h b/base/system/winlogon/setup.h similarity index 100% rename from reactos/base/system/winlogon/setup.h rename to base/system/winlogon/setup.h diff --git a/reactos/base/system/winlogon/winlogon.c b/base/system/winlogon/winlogon.c similarity index 100% rename from reactos/base/system/winlogon/winlogon.c rename to base/system/winlogon/winlogon.c diff --git a/reactos/base/system/winlogon/winlogon.h b/base/system/winlogon/winlogon.h similarity index 100% rename from reactos/base/system/winlogon/winlogon.h rename to base/system/winlogon/winlogon.h diff --git a/reactos/base/system/winlogon/winlogon.rbuild b/base/system/winlogon/winlogon.rbuild similarity index 100% rename from reactos/base/system/winlogon/winlogon.rbuild rename to base/system/winlogon/winlogon.rbuild diff --git a/reactos/base/system/winlogon/winlogon.rc b/base/system/winlogon/winlogon.rc similarity index 100% rename from reactos/base/system/winlogon/winlogon.rc rename to base/system/winlogon/winlogon.rc diff --git a/reactos/base/system/winlogon/wlx.c b/base/system/winlogon/wlx.c similarity index 100% rename from reactos/base/system/winlogon/wlx.c rename to base/system/winlogon/wlx.c diff --git a/reactos/baseaddress.rbuild b/baseaddress.rbuild similarity index 100% rename from reactos/baseaddress.rbuild rename to baseaddress.rbuild diff --git a/reactos/boot/boot.rbuild b/boot/boot.rbuild similarity index 100% rename from reactos/boot/boot.rbuild rename to boot/boot.rbuild diff --git a/reactos/boot/bootdata/autorun.inf b/boot/bootdata/autorun.inf similarity index 100% rename from reactos/boot/bootdata/autorun.inf rename to boot/bootdata/autorun.inf diff --git a/reactos/boot/bootdata/bootcd/bootcd.rbuild b/boot/bootdata/bootcd/bootcd.rbuild similarity index 100% rename from reactos/boot/bootdata/bootcd/bootcd.rbuild rename to boot/bootdata/bootcd/bootcd.rbuild diff --git a/reactos/boot/bootdata/bootcdregtest/bootcdregtest.rbuild b/boot/bootdata/bootcdregtest/bootcdregtest.rbuild similarity index 100% rename from reactos/boot/bootdata/bootcdregtest/bootcdregtest.rbuild rename to boot/bootdata/bootcdregtest/bootcdregtest.rbuild diff --git a/reactos/boot/bootdata/bootcdregtest/testboot.bat.sample b/boot/bootdata/bootcdregtest/testboot.bat.sample similarity index 100% rename from reactos/boot/bootdata/bootcdregtest/testboot.bat.sample rename to boot/bootdata/bootcdregtest/testboot.bat.sample diff --git a/reactos/boot/bootdata/bootcdregtest/unattend.inf b/boot/bootdata/bootcdregtest/unattend.inf similarity index 100% rename from reactos/boot/bootdata/bootcdregtest/unattend.inf rename to boot/bootdata/bootcdregtest/unattend.inf diff --git a/reactos/boot/bootdata/bootdata.rbuild b/boot/bootdata/bootdata.rbuild similarity index 100% rename from reactos/boot/bootdata/bootdata.rbuild rename to boot/bootdata/bootdata.rbuild diff --git a/reactos/boot/bootdata/hivecls_arm.inf b/boot/bootdata/hivecls_arm.inf similarity index 100% rename from reactos/boot/bootdata/hivecls_arm.inf rename to boot/bootdata/hivecls_arm.inf diff --git a/reactos/boot/bootdata/hivecls_i386.inf b/boot/bootdata/hivecls_i386.inf similarity index 100% rename from reactos/boot/bootdata/hivecls_i386.inf rename to boot/bootdata/hivecls_i386.inf diff --git a/reactos/boot/bootdata/hivedef_arm.inf b/boot/bootdata/hivedef_arm.inf similarity index 100% rename from reactos/boot/bootdata/hivedef_arm.inf rename to boot/bootdata/hivedef_arm.inf diff --git a/reactos/boot/bootdata/hivedef_i386.inf b/boot/bootdata/hivedef_i386.inf similarity index 100% rename from reactos/boot/bootdata/hivedef_i386.inf rename to boot/bootdata/hivedef_i386.inf diff --git a/reactos/boot/bootdata/hiveinst_arm.inf b/boot/bootdata/hiveinst_arm.inf similarity index 100% rename from reactos/boot/bootdata/hiveinst_arm.inf rename to boot/bootdata/hiveinst_arm.inf diff --git a/reactos/boot/bootdata/hiveinst_i386.inf b/boot/bootdata/hiveinst_i386.inf similarity index 100% rename from reactos/boot/bootdata/hiveinst_i386.inf rename to boot/bootdata/hiveinst_i386.inf diff --git a/reactos/boot/bootdata/hivesft_arm.inf b/boot/bootdata/hivesft_arm.inf similarity index 100% rename from reactos/boot/bootdata/hivesft_arm.inf rename to boot/bootdata/hivesft_arm.inf diff --git a/reactos/boot/bootdata/hivesft_i386.inf b/boot/bootdata/hivesft_i386.inf similarity index 100% rename from reactos/boot/bootdata/hivesft_i386.inf rename to boot/bootdata/hivesft_i386.inf diff --git a/reactos/boot/bootdata/hivesys_arm.inf b/boot/bootdata/hivesys_arm.inf similarity index 100% rename from reactos/boot/bootdata/hivesys_arm.inf rename to boot/bootdata/hivesys_arm.inf diff --git a/reactos/boot/bootdata/hivesys_i386.inf b/boot/bootdata/hivesys_i386.inf similarity index 100% rename from reactos/boot/bootdata/hivesys_i386.inf rename to boot/bootdata/hivesys_i386.inf diff --git a/reactos/boot/bootdata/icon.ico b/boot/bootdata/icon.ico similarity index 100% rename from reactos/boot/bootdata/icon.ico rename to boot/bootdata/icon.ico diff --git a/reactos/boot/bootdata/livecd.inf b/boot/bootdata/livecd.inf similarity index 100% rename from reactos/boot/bootdata/livecd.inf rename to boot/bootdata/livecd.inf diff --git a/reactos/boot/bootdata/livecd.ini b/boot/bootdata/livecd.ini similarity index 100% rename from reactos/boot/bootdata/livecd.ini rename to boot/bootdata/livecd.ini diff --git a/reactos/boot/bootdata/livecd/livecd.rbuild b/boot/bootdata/livecd/livecd.rbuild similarity index 100% rename from reactos/boot/bootdata/livecd/livecd.rbuild rename to boot/bootdata/livecd/livecd.rbuild diff --git a/reactos/boot/bootdata/livecdregtest/livecdregtest.rbuild b/boot/bootdata/livecdregtest/livecdregtest.rbuild similarity index 100% rename from reactos/boot/bootdata/livecdregtest/livecdregtest.rbuild rename to boot/bootdata/livecdregtest/livecdregtest.rbuild diff --git a/reactos/boot/bootdata/packages/reactos.dff b/boot/bootdata/packages/reactos.dff similarity index 100% rename from reactos/boot/bootdata/packages/reactos.dff rename to boot/bootdata/packages/reactos.dff diff --git a/reactos/boot/bootdata/readme.txt b/boot/bootdata/readme.txt similarity index 100% rename from reactos/boot/bootdata/readme.txt rename to boot/bootdata/readme.txt diff --git a/reactos/boot/bootdata/system.ini b/boot/bootdata/system.ini similarity index 100% rename from reactos/boot/bootdata/system.ini rename to boot/bootdata/system.ini diff --git a/reactos/boot/bootdata/txtsetup.sif b/boot/bootdata/txtsetup.sif similarity index 100% rename from reactos/boot/bootdata/txtsetup.sif rename to boot/bootdata/txtsetup.sif diff --git a/reactos/boot/bootdata/unattend.inf b/boot/bootdata/unattend.inf similarity index 100% rename from reactos/boot/bootdata/unattend.inf rename to boot/bootdata/unattend.inf diff --git a/reactos/boot/freeldr/COPYING b/boot/freeldr/COPYING similarity index 100% rename from reactos/boot/freeldr/COPYING rename to boot/freeldr/COPYING diff --git a/reactos/boot/freeldr/FREELDR.INI b/boot/freeldr/FREELDR.INI similarity index 100% rename from reactos/boot/freeldr/FREELDR.INI rename to boot/freeldr/FREELDR.INI diff --git a/reactos/boot/freeldr/bootsect/bootsect.rbuild b/boot/freeldr/bootsect/bootsect.rbuild similarity index 100% rename from reactos/boot/freeldr/bootsect/bootsect.rbuild rename to boot/freeldr/bootsect/bootsect.rbuild diff --git a/reactos/boot/freeldr/bootsect/dosmbr.asm b/boot/freeldr/bootsect/dosmbr.asm similarity index 100% rename from reactos/boot/freeldr/bootsect/dosmbr.asm rename to boot/freeldr/bootsect/dosmbr.asm diff --git a/reactos/boot/freeldr/bootsect/ext2.asm b/boot/freeldr/bootsect/ext2.asm similarity index 100% rename from reactos/boot/freeldr/bootsect/ext2.asm rename to boot/freeldr/bootsect/ext2.asm diff --git a/reactos/boot/freeldr/bootsect/fat.asm b/boot/freeldr/bootsect/fat.asm similarity index 100% rename from reactos/boot/freeldr/bootsect/fat.asm rename to boot/freeldr/bootsect/fat.asm diff --git a/reactos/boot/freeldr/bootsect/fat.h b/boot/freeldr/bootsect/fat.h similarity index 100% rename from reactos/boot/freeldr/bootsect/fat.h rename to boot/freeldr/bootsect/fat.h diff --git a/reactos/boot/freeldr/bootsect/fat32.asm b/boot/freeldr/bootsect/fat32.asm similarity index 100% rename from reactos/boot/freeldr/bootsect/fat32.asm rename to boot/freeldr/bootsect/fat32.asm diff --git a/reactos/boot/freeldr/bootsect/fat32.h b/boot/freeldr/bootsect/fat32.h similarity index 100% rename from reactos/boot/freeldr/bootsect/fat32.h rename to boot/freeldr/bootsect/fat32.h diff --git a/reactos/boot/freeldr/bootsect/isoboot.asm b/boot/freeldr/bootsect/isoboot.asm similarity index 100% rename from reactos/boot/freeldr/bootsect/isoboot.asm rename to boot/freeldr/bootsect/isoboot.asm diff --git a/reactos/boot/freeldr/bootsect/isobtrt.asm b/boot/freeldr/bootsect/isobtrt.asm similarity index 100% rename from reactos/boot/freeldr/bootsect/isobtrt.asm rename to boot/freeldr/bootsect/isobtrt.asm diff --git a/reactos/boot/freeldr/bootsect/ofwboot.s b/boot/freeldr/bootsect/ofwboot.s similarity index 100% rename from reactos/boot/freeldr/bootsect/ofwboot.s rename to boot/freeldr/bootsect/ofwboot.s diff --git a/reactos/boot/freeldr/bootsect/win2k.asm b/boot/freeldr/bootsect/win2k.asm similarity index 100% rename from reactos/boot/freeldr/bootsect/win2k.asm rename to boot/freeldr/bootsect/win2k.asm diff --git a/reactos/boot/freeldr/bootsect/wxpfat16.asm b/boot/freeldr/bootsect/wxpfat16.asm similarity index 100% rename from reactos/boot/freeldr/bootsect/wxpfat16.asm rename to boot/freeldr/bootsect/wxpfat16.asm diff --git a/reactos/boot/freeldr/fdebug/fdebug.c b/boot/freeldr/fdebug/fdebug.c similarity index 100% rename from reactos/boot/freeldr/fdebug/fdebug.c rename to boot/freeldr/fdebug/fdebug.c diff --git a/reactos/boot/freeldr/fdebug/fdebug.ico b/boot/freeldr/fdebug/fdebug.ico similarity index 100% rename from reactos/boot/freeldr/fdebug/fdebug.ico rename to boot/freeldr/fdebug/fdebug.ico diff --git a/reactos/boot/freeldr/fdebug/fdebug.rbuild b/boot/freeldr/fdebug/fdebug.rbuild similarity index 100% rename from reactos/boot/freeldr/fdebug/fdebug.rbuild rename to boot/freeldr/fdebug/fdebug.rbuild diff --git a/reactos/boot/freeldr/fdebug/fdebug.rc b/boot/freeldr/fdebug/fdebug.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/fdebug.rc rename to boot/freeldr/fdebug/fdebug.rc diff --git a/reactos/boot/freeldr/fdebug/lang/bg-BG.rc b/boot/freeldr/fdebug/lang/bg-BG.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/bg-BG.rc rename to boot/freeldr/fdebug/lang/bg-BG.rc diff --git a/reactos/boot/freeldr/fdebug/lang/cs-CZ.rc b/boot/freeldr/fdebug/lang/cs-CZ.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/cs-CZ.rc rename to boot/freeldr/fdebug/lang/cs-CZ.rc diff --git a/reactos/boot/freeldr/fdebug/lang/de-DE.rc b/boot/freeldr/fdebug/lang/de-DE.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/de-DE.rc rename to boot/freeldr/fdebug/lang/de-DE.rc diff --git a/reactos/boot/freeldr/fdebug/lang/el-GR.rc b/boot/freeldr/fdebug/lang/el-GR.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/el-GR.rc rename to boot/freeldr/fdebug/lang/el-GR.rc diff --git a/reactos/boot/freeldr/fdebug/lang/en-US.rc b/boot/freeldr/fdebug/lang/en-US.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/en-US.rc rename to boot/freeldr/fdebug/lang/en-US.rc diff --git a/reactos/boot/freeldr/fdebug/lang/es-ES.rc b/boot/freeldr/fdebug/lang/es-ES.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/es-ES.rc rename to boot/freeldr/fdebug/lang/es-ES.rc diff --git a/reactos/boot/freeldr/fdebug/lang/fr-FR.rc b/boot/freeldr/fdebug/lang/fr-FR.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/fr-FR.rc rename to boot/freeldr/fdebug/lang/fr-FR.rc diff --git a/reactos/boot/freeldr/fdebug/lang/hu-HU.rc b/boot/freeldr/fdebug/lang/hu-HU.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/hu-HU.rc rename to boot/freeldr/fdebug/lang/hu-HU.rc diff --git a/reactos/boot/freeldr/fdebug/lang/id-ID.rc b/boot/freeldr/fdebug/lang/id-ID.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/id-ID.rc rename to boot/freeldr/fdebug/lang/id-ID.rc diff --git a/reactos/boot/freeldr/fdebug/lang/it-IT.rc b/boot/freeldr/fdebug/lang/it-IT.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/it-IT.rc rename to boot/freeldr/fdebug/lang/it-IT.rc diff --git a/reactos/boot/freeldr/fdebug/lang/ja-JP.rc b/boot/freeldr/fdebug/lang/ja-JP.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/ja-JP.rc rename to boot/freeldr/fdebug/lang/ja-JP.rc diff --git a/reactos/boot/freeldr/fdebug/lang/no-NO.rc b/boot/freeldr/fdebug/lang/no-NO.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/no-NO.rc rename to boot/freeldr/fdebug/lang/no-NO.rc diff --git a/reactos/boot/freeldr/fdebug/lang/pl-PL.rc b/boot/freeldr/fdebug/lang/pl-PL.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/pl-PL.rc rename to boot/freeldr/fdebug/lang/pl-PL.rc diff --git a/reactos/boot/freeldr/fdebug/lang/ru-RU.rc b/boot/freeldr/fdebug/lang/ru-RU.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/ru-RU.rc rename to boot/freeldr/fdebug/lang/ru-RU.rc diff --git a/reactos/boot/freeldr/fdebug/lang/sk-SK.rc b/boot/freeldr/fdebug/lang/sk-SK.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/sk-SK.rc rename to boot/freeldr/fdebug/lang/sk-SK.rc diff --git a/reactos/boot/freeldr/fdebug/lang/tr-TR.rc b/boot/freeldr/fdebug/lang/tr-TR.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/tr-TR.rc rename to boot/freeldr/fdebug/lang/tr-TR.rc diff --git a/reactos/boot/freeldr/fdebug/lang/uk-UA.rc b/boot/freeldr/fdebug/lang/uk-UA.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/uk-UA.rc rename to boot/freeldr/fdebug/lang/uk-UA.rc diff --git a/reactos/boot/freeldr/fdebug/resource.h b/boot/freeldr/fdebug/resource.h similarity index 100% rename from reactos/boot/freeldr/fdebug/resource.h rename to boot/freeldr/fdebug/resource.h diff --git a/reactos/boot/freeldr/fdebug/rs232.c b/boot/freeldr/fdebug/rs232.c similarity index 100% rename from reactos/boot/freeldr/fdebug/rs232.c rename to boot/freeldr/fdebug/rs232.c diff --git a/reactos/boot/freeldr/fdebug/rs232.h b/boot/freeldr/fdebug/rs232.h similarity index 100% rename from reactos/boot/freeldr/fdebug/rs232.h rename to boot/freeldr/fdebug/rs232.h diff --git a/reactos/boot/freeldr/freeldr.rbuild b/boot/freeldr/freeldr.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr.rbuild rename to boot/freeldr/freeldr.rbuild diff --git a/reactos/boot/freeldr/freeldr/.cvsignore b/boot/freeldr/freeldr/.cvsignore similarity index 100% rename from reactos/boot/freeldr/freeldr/.cvsignore rename to boot/freeldr/freeldr/.cvsignore diff --git a/reactos/boot/freeldr/freeldr/CHANGELOG b/boot/freeldr/freeldr/CHANGELOG similarity index 100% rename from reactos/boot/freeldr/freeldr/CHANGELOG rename to boot/freeldr/freeldr/CHANGELOG diff --git a/reactos/boot/freeldr/freeldr/arch/arm/boot.s b/boot/freeldr/freeldr/arch/arm/boot.s similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/arm/boot.s rename to boot/freeldr/freeldr/arch/arm/boot.s diff --git a/reactos/boot/freeldr/freeldr/arch/arm/ferouart.c b/boot/freeldr/freeldr/arch/arm/ferouart.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/arm/ferouart.c rename to boot/freeldr/freeldr/arch/arm/ferouart.c diff --git a/reactos/boot/freeldr/freeldr/arch/arm/loader.c b/boot/freeldr/freeldr/arch/arm/loader.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/arm/loader.c rename to boot/freeldr/freeldr/arch/arm/loader.c diff --git a/reactos/boot/freeldr/freeldr/arch/arm/macharm.c b/boot/freeldr/freeldr/arch/arm/macharm.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/arm/macharm.c rename to boot/freeldr/freeldr/arch/arm/macharm.c diff --git a/reactos/boot/freeldr/freeldr/arch/arm/versuart.c b/boot/freeldr/freeldr/arch/arm/versuart.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/arm/versuart.c rename to boot/freeldr/freeldr/arch/arm/versuart.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/_alloca.S b/boot/freeldr/freeldr/arch/i386/_alloca.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/_alloca.S rename to boot/freeldr/freeldr/arch/i386/_alloca.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/arch.S b/boot/freeldr/freeldr/arch/i386/arch.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/arch.S rename to boot/freeldr/freeldr/arch/i386/arch.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/archmach.c b/boot/freeldr/freeldr/arch/i386/archmach.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/archmach.c rename to boot/freeldr/freeldr/arch/i386/archmach.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/boot.S b/boot/freeldr/freeldr/arch/i386/boot.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/boot.S rename to boot/freeldr/freeldr/arch/i386/boot.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/drvmap.S b/boot/freeldr/freeldr/arch/i386/drvmap.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/drvmap.S rename to boot/freeldr/freeldr/arch/i386/drvmap.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/fathelp.asm b/boot/freeldr/freeldr/arch/i386/fathelp.asm similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/fathelp.asm rename to boot/freeldr/freeldr/arch/i386/fathelp.asm diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hardware.c b/boot/freeldr/freeldr/arch/i386/hardware.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/hardware.c rename to boot/freeldr/freeldr/arch/i386/hardware.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hwacpi.c b/boot/freeldr/freeldr/arch/i386/hwacpi.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/hwacpi.c rename to boot/freeldr/freeldr/arch/i386/hwacpi.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hwapm.c b/boot/freeldr/freeldr/arch/i386/hwapm.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/hwapm.c rename to boot/freeldr/freeldr/arch/i386/hwapm.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c b/boot/freeldr/freeldr/arch/i386/hwpci.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/hwpci.c rename to boot/freeldr/freeldr/arch/i386/hwpci.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/i386cpu.S b/boot/freeldr/freeldr/arch/i386/i386cpu.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/i386cpu.S rename to boot/freeldr/freeldr/arch/i386/i386cpu.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/i386disk.c b/boot/freeldr/freeldr/arch/i386/i386disk.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/i386disk.c rename to boot/freeldr/freeldr/arch/i386/i386disk.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/i386idt.S b/boot/freeldr/freeldr/arch/i386/i386idt.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/i386idt.S rename to boot/freeldr/freeldr/arch/i386/i386idt.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/i386pnp.S b/boot/freeldr/freeldr/arch/i386/i386pnp.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/i386pnp.S rename to boot/freeldr/freeldr/arch/i386/i386pnp.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/i386rtl.c b/boot/freeldr/freeldr/arch/i386/i386rtl.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/i386rtl.c rename to boot/freeldr/freeldr/arch/i386/i386rtl.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/i386trap.S b/boot/freeldr/freeldr/arch/i386/i386trap.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/i386trap.S rename to boot/freeldr/freeldr/arch/i386/i386trap.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/i386vid.c b/boot/freeldr/freeldr/arch/i386/i386vid.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/i386vid.c rename to boot/freeldr/freeldr/arch/i386/i386vid.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/int386.S b/boot/freeldr/freeldr/arch/i386/int386.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/int386.S rename to boot/freeldr/freeldr/arch/i386/int386.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/linux.S b/boot/freeldr/freeldr/arch/i386/linux.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/linux.S rename to boot/freeldr/freeldr/arch/i386/linux.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/loader.c b/boot/freeldr/freeldr/arch/i386/loader.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/loader.c rename to boot/freeldr/freeldr/arch/i386/loader.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/machpc.c b/boot/freeldr/freeldr/arch/i386/machpc.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/machpc.c rename to boot/freeldr/freeldr/arch/i386/machpc.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/machxbox.c b/boot/freeldr/freeldr/arch/i386/machxbox.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/machxbox.c rename to boot/freeldr/freeldr/arch/i386/machxbox.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/mb.S b/boot/freeldr/freeldr/arch/i386/mb.S similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/mb.S rename to boot/freeldr/freeldr/arch/i386/mb.S diff --git a/reactos/boot/freeldr/freeldr/arch/i386/pccons.c b/boot/freeldr/freeldr/arch/i386/pccons.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/pccons.c rename to boot/freeldr/freeldr/arch/i386/pccons.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/pcdisk.c b/boot/freeldr/freeldr/arch/i386/pcdisk.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/pcdisk.c rename to boot/freeldr/freeldr/arch/i386/pcdisk.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/pcmem.c b/boot/freeldr/freeldr/arch/i386/pcmem.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/pcmem.c rename to boot/freeldr/freeldr/arch/i386/pcmem.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c b/boot/freeldr/freeldr/arch/i386/pcrtc.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c rename to boot/freeldr/freeldr/arch/i386/pcrtc.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/pcvideo.c b/boot/freeldr/freeldr/arch/i386/pcvideo.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/pcvideo.c rename to boot/freeldr/freeldr/arch/i386/pcvideo.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxcons.c b/boot/freeldr/freeldr/arch/i386/xboxcons.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/xboxcons.c rename to boot/freeldr/freeldr/arch/i386/xboxcons.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxdisk.c b/boot/freeldr/freeldr/arch/i386/xboxdisk.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/xboxdisk.c rename to boot/freeldr/freeldr/arch/i386/xboxdisk.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxfont.c b/boot/freeldr/freeldr/arch/i386/xboxfont.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/xboxfont.c rename to boot/freeldr/freeldr/arch/i386/xboxfont.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c b/boot/freeldr/freeldr/arch/i386/xboxhw.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c rename to boot/freeldr/freeldr/arch/i386/xboxhw.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxi2c.c b/boot/freeldr/freeldr/arch/i386/xboxi2c.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/xboxi2c.c rename to boot/freeldr/freeldr/arch/i386/xboxi2c.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxmem.c b/boot/freeldr/freeldr/arch/i386/xboxmem.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/xboxmem.c rename to boot/freeldr/freeldr/arch/i386/xboxmem.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxrtc.c b/boot/freeldr/freeldr/arch/i386/xboxrtc.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/xboxrtc.c rename to boot/freeldr/freeldr/arch/i386/xboxrtc.c diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxvideo.c b/boot/freeldr/freeldr/arch/i386/xboxvideo.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/i386/xboxvideo.c rename to boot/freeldr/freeldr/arch/i386/xboxvideo.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/boot.s b/boot/freeldr/freeldr/arch/powerpc/boot.s similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/boot.s rename to boot/freeldr/freeldr/arch/powerpc/boot.s diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/compat.h b/boot/freeldr/freeldr/arch/powerpc/compat.h similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/compat.h rename to boot/freeldr/freeldr/arch/powerpc/compat.h diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/loader.c b/boot/freeldr/freeldr/arch/powerpc/loader.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/loader.c rename to boot/freeldr/freeldr/arch/powerpc/loader.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c b/boot/freeldr/freeldr/arch/powerpc/mach.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/mach.c rename to boot/freeldr/freeldr/arch/powerpc/mach.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c b/boot/freeldr/freeldr/arch/powerpc/mboot.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c rename to boot/freeldr/freeldr/arch/powerpc/mboot.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/mmu.c b/boot/freeldr/freeldr/arch/powerpc/mmu.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/mmu.c rename to boot/freeldr/freeldr/arch/powerpc/mmu.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/ofw_method.c b/boot/freeldr/freeldr/arch/powerpc/ofw_method.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/ofw_method.c rename to boot/freeldr/freeldr/arch/powerpc/ofw_method.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/ofw_util.s b/boot/freeldr/freeldr/arch/powerpc/ofw_util.s similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/ofw_util.s rename to boot/freeldr/freeldr/arch/powerpc/ofw_util.s diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/prep.c b/boot/freeldr/freeldr/arch/powerpc/prep.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/prep.c rename to boot/freeldr/freeldr/arch/powerpc/prep.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/prep.h b/boot/freeldr/freeldr/arch/powerpc/prep.h similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/prep.h rename to boot/freeldr/freeldr/arch/powerpc/prep.h diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/prep_ide.c b/boot/freeldr/freeldr/arch/powerpc/prep_ide.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/prep_ide.c rename to boot/freeldr/freeldr/arch/powerpc/prep_ide.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/prep_pci.c b/boot/freeldr/freeldr/arch/powerpc/prep_pci.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/prep_pci.c rename to boot/freeldr/freeldr/arch/powerpc/prep_pci.c diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/prep_vga.c b/boot/freeldr/freeldr/arch/powerpc/prep_vga.c similarity index 100% rename from reactos/boot/freeldr/freeldr/arch/powerpc/prep_vga.c rename to boot/freeldr/freeldr/arch/powerpc/prep_vga.c diff --git a/reactos/boot/freeldr/freeldr/bootmgr.c b/boot/freeldr/freeldr/bootmgr.c similarity index 100% rename from reactos/boot/freeldr/freeldr/bootmgr.c rename to boot/freeldr/freeldr/bootmgr.c diff --git a/reactos/boot/freeldr/freeldr/cache/blocklist.c b/boot/freeldr/freeldr/cache/blocklist.c similarity index 100% rename from reactos/boot/freeldr/freeldr/cache/blocklist.c rename to boot/freeldr/freeldr/cache/blocklist.c diff --git a/reactos/boot/freeldr/freeldr/cache/cache.c b/boot/freeldr/freeldr/cache/cache.c similarity index 100% rename from reactos/boot/freeldr/freeldr/cache/cache.c rename to boot/freeldr/freeldr/cache/cache.c diff --git a/reactos/boot/freeldr/freeldr/cmdline.c b/boot/freeldr/freeldr/cmdline.c similarity index 100% rename from reactos/boot/freeldr/freeldr/cmdline.c rename to boot/freeldr/freeldr/cmdline.c diff --git a/reactos/boot/freeldr/freeldr/comm/rs232.c b/boot/freeldr/freeldr/comm/rs232.c similarity index 100% rename from reactos/boot/freeldr/freeldr/comm/rs232.c rename to boot/freeldr/freeldr/comm/rs232.c diff --git a/reactos/boot/freeldr/freeldr/custom.c b/boot/freeldr/freeldr/custom.c similarity index 100% rename from reactos/boot/freeldr/freeldr/custom.c rename to boot/freeldr/freeldr/custom.c diff --git a/reactos/boot/freeldr/freeldr/debug.c b/boot/freeldr/freeldr/debug.c similarity index 100% rename from reactos/boot/freeldr/freeldr/debug.c rename to boot/freeldr/freeldr/debug.c diff --git a/reactos/boot/freeldr/freeldr/disk/disk.c b/boot/freeldr/freeldr/disk/disk.c similarity index 100% rename from reactos/boot/freeldr/freeldr/disk/disk.c rename to boot/freeldr/freeldr/disk/disk.c diff --git a/reactos/boot/freeldr/freeldr/disk/partition.c b/boot/freeldr/freeldr/disk/partition.c similarity index 100% rename from reactos/boot/freeldr/freeldr/disk/partition.c rename to boot/freeldr/freeldr/disk/partition.c diff --git a/reactos/boot/freeldr/freeldr/disk/ramdisk.c b/boot/freeldr/freeldr/disk/ramdisk.c similarity index 100% rename from reactos/boot/freeldr/freeldr/disk/ramdisk.c rename to boot/freeldr/freeldr/disk/ramdisk.c diff --git a/reactos/boot/freeldr/freeldr/drivemap.c b/boot/freeldr/freeldr/drivemap.c similarity index 100% rename from reactos/boot/freeldr/freeldr/drivemap.c rename to boot/freeldr/freeldr/drivemap.c diff --git a/reactos/boot/freeldr/freeldr/freeldr.c b/boot/freeldr/freeldr/freeldr.c similarity index 100% rename from reactos/boot/freeldr/freeldr/freeldr.c rename to boot/freeldr/freeldr/freeldr.c diff --git a/reactos/boot/freeldr/freeldr/freeldr.rbuild b/boot/freeldr/freeldr/freeldr.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr/freeldr.rbuild rename to boot/freeldr/freeldr/freeldr.rbuild diff --git a/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild b/boot/freeldr/freeldr/freeldr_arch.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr/freeldr_arch.rbuild rename to boot/freeldr/freeldr/freeldr_arch.rbuild diff --git a/reactos/boot/freeldr/freeldr/freeldr_base.rbuild b/boot/freeldr/freeldr/freeldr_base.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr/freeldr_base.rbuild rename to boot/freeldr/freeldr/freeldr_base.rbuild diff --git a/reactos/boot/freeldr/freeldr/freeldr_base64k.rbuild b/boot/freeldr/freeldr/freeldr_base64k.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr/freeldr_base64k.rbuild rename to boot/freeldr/freeldr/freeldr_base64k.rbuild diff --git a/reactos/boot/freeldr/freeldr/freeldr_main.rbuild b/boot/freeldr/freeldr/freeldr_main.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr/freeldr_main.rbuild rename to boot/freeldr/freeldr/freeldr_main.rbuild diff --git a/reactos/boot/freeldr/freeldr/freeldr_startup.rbuild b/boot/freeldr/freeldr/freeldr_startup.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr/freeldr_startup.rbuild rename to boot/freeldr/freeldr/freeldr_startup.rbuild diff --git a/reactos/boot/freeldr/freeldr/fs/ext2.c b/boot/freeldr/freeldr/fs/ext2.c similarity index 100% rename from reactos/boot/freeldr/freeldr/fs/ext2.c rename to boot/freeldr/freeldr/fs/ext2.c diff --git a/reactos/boot/freeldr/freeldr/fs/fat.c b/boot/freeldr/freeldr/fs/fat.c similarity index 100% rename from reactos/boot/freeldr/freeldr/fs/fat.c rename to boot/freeldr/freeldr/fs/fat.c diff --git a/reactos/boot/freeldr/freeldr/fs/fs.c b/boot/freeldr/freeldr/fs/fs.c similarity index 100% rename from reactos/boot/freeldr/freeldr/fs/fs.c rename to boot/freeldr/freeldr/fs/fs.c diff --git a/reactos/boot/freeldr/freeldr/fs/fsrec.c b/boot/freeldr/freeldr/fs/fsrec.c similarity index 100% rename from reactos/boot/freeldr/freeldr/fs/fsrec.c rename to boot/freeldr/freeldr/fs/fsrec.c diff --git a/reactos/boot/freeldr/freeldr/fs/iso.c b/boot/freeldr/freeldr/fs/iso.c similarity index 100% rename from reactos/boot/freeldr/freeldr/fs/iso.c rename to boot/freeldr/freeldr/fs/iso.c diff --git a/reactos/boot/freeldr/freeldr/fs/ntfs.c b/boot/freeldr/freeldr/fs/ntfs.c similarity index 100% rename from reactos/boot/freeldr/freeldr/fs/ntfs.c rename to boot/freeldr/freeldr/fs/ntfs.c diff --git a/reactos/boot/freeldr/freeldr/include/arch.h b/boot/freeldr/freeldr/include/arch.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/arch.h rename to boot/freeldr/freeldr/include/arch.h diff --git a/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h b/boot/freeldr/freeldr/include/arch/arm/hardware.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h rename to boot/freeldr/freeldr/include/arch/arm/hardware.h diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/hardware.h b/boot/freeldr/freeldr/include/arch/i386/hardware.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/arch/i386/hardware.h rename to boot/freeldr/freeldr/include/arch/i386/hardware.h diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h b/boot/freeldr/freeldr/include/arch/i386/i386.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/arch/i386/i386.h rename to boot/freeldr/freeldr/include/arch/i386/i386.h diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/machpc.h b/boot/freeldr/freeldr/include/arch/i386/machpc.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/arch/i386/machpc.h rename to boot/freeldr/freeldr/include/arch/i386/machpc.h diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/machxbox.h b/boot/freeldr/freeldr/include/arch/i386/machxbox.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/arch/i386/machxbox.h rename to boot/freeldr/freeldr/include/arch/i386/machxbox.h diff --git a/reactos/boot/freeldr/freeldr/include/arch/powerpc/hardware.h b/boot/freeldr/freeldr/include/arch/powerpc/hardware.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/arch/powerpc/hardware.h rename to boot/freeldr/freeldr/include/arch/powerpc/hardware.h diff --git a/reactos/boot/freeldr/freeldr/include/bget.h b/boot/freeldr/freeldr/include/bget.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/bget.h rename to boot/freeldr/freeldr/include/bget.h diff --git a/reactos/boot/freeldr/freeldr/include/bootmgr.h b/boot/freeldr/freeldr/include/bootmgr.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/bootmgr.h rename to boot/freeldr/freeldr/include/bootmgr.h diff --git a/reactos/boot/freeldr/freeldr/include/bytesex.h b/boot/freeldr/freeldr/include/bytesex.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/bytesex.h rename to boot/freeldr/freeldr/include/bytesex.h diff --git a/reactos/boot/freeldr/freeldr/include/cache.h b/boot/freeldr/freeldr/include/cache.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/cache.h rename to boot/freeldr/freeldr/include/cache.h diff --git a/reactos/boot/freeldr/freeldr/include/cmdline.h b/boot/freeldr/freeldr/include/cmdline.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/cmdline.h rename to boot/freeldr/freeldr/include/cmdline.h diff --git a/reactos/boot/freeldr/freeldr/include/comm.h b/boot/freeldr/freeldr/include/comm.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/comm.h rename to boot/freeldr/freeldr/include/comm.h diff --git a/reactos/boot/freeldr/freeldr/include/debug.h b/boot/freeldr/freeldr/include/debug.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/debug.h rename to boot/freeldr/freeldr/include/debug.h diff --git a/reactos/boot/freeldr/freeldr/include/disk.h b/boot/freeldr/freeldr/include/disk.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/disk.h rename to boot/freeldr/freeldr/include/disk.h diff --git a/reactos/boot/freeldr/freeldr/include/drivemap.h b/boot/freeldr/freeldr/include/drivemap.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/drivemap.h rename to boot/freeldr/freeldr/include/drivemap.h diff --git a/reactos/boot/freeldr/freeldr/include/freeldr.h b/boot/freeldr/freeldr/include/freeldr.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/freeldr.h rename to boot/freeldr/freeldr/include/freeldr.h diff --git a/reactos/boot/freeldr/freeldr/include/fs.h b/boot/freeldr/freeldr/include/fs.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/fs.h rename to boot/freeldr/freeldr/include/fs.h diff --git a/reactos/boot/freeldr/freeldr/include/fs/ext2.h b/boot/freeldr/freeldr/include/fs/ext2.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/fs/ext2.h rename to boot/freeldr/freeldr/include/fs/ext2.h diff --git a/reactos/boot/freeldr/freeldr/include/fs/fat.h b/boot/freeldr/freeldr/include/fs/fat.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/fs/fat.h rename to boot/freeldr/freeldr/include/fs/fat.h diff --git a/reactos/boot/freeldr/freeldr/include/fs/iso.h b/boot/freeldr/freeldr/include/fs/iso.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/fs/iso.h rename to boot/freeldr/freeldr/include/fs/iso.h diff --git a/reactos/boot/freeldr/freeldr/include/fs/ntfs.h b/boot/freeldr/freeldr/include/fs/ntfs.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/fs/ntfs.h rename to boot/freeldr/freeldr/include/fs/ntfs.h diff --git a/reactos/boot/freeldr/freeldr/include/fsrec.h b/boot/freeldr/freeldr/include/fsrec.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/fsrec.h rename to boot/freeldr/freeldr/include/fsrec.h diff --git a/reactos/boot/freeldr/freeldr/include/inffile.h b/boot/freeldr/freeldr/include/inffile.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/inffile.h rename to boot/freeldr/freeldr/include/inffile.h diff --git a/reactos/boot/freeldr/freeldr/include/inifile.h b/boot/freeldr/freeldr/include/inifile.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/inifile.h rename to boot/freeldr/freeldr/include/inifile.h diff --git a/reactos/boot/freeldr/freeldr/include/keycodes.h b/boot/freeldr/freeldr/include/keycodes.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/keycodes.h rename to boot/freeldr/freeldr/include/keycodes.h diff --git a/reactos/boot/freeldr/freeldr/include/linux.h b/boot/freeldr/freeldr/include/linux.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/linux.h rename to boot/freeldr/freeldr/include/linux.h diff --git a/reactos/boot/freeldr/freeldr/include/machine.h b/boot/freeldr/freeldr/include/machine.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/machine.h rename to boot/freeldr/freeldr/include/machine.h diff --git a/reactos/boot/freeldr/freeldr/include/miscboot.h b/boot/freeldr/freeldr/include/miscboot.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/miscboot.h rename to boot/freeldr/freeldr/include/miscboot.h diff --git a/reactos/boot/freeldr/freeldr/include/mm.h b/boot/freeldr/freeldr/include/mm.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/mm.h rename to boot/freeldr/freeldr/include/mm.h diff --git a/reactos/boot/freeldr/freeldr/include/multiboot.h b/boot/freeldr/freeldr/include/multiboot.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/multiboot.h rename to boot/freeldr/freeldr/include/multiboot.h diff --git a/reactos/boot/freeldr/freeldr/include/of.h b/boot/freeldr/freeldr/include/of.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/of.h rename to boot/freeldr/freeldr/include/of.h diff --git a/reactos/boot/freeldr/freeldr/include/options.h b/boot/freeldr/freeldr/include/options.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/options.h rename to boot/freeldr/freeldr/include/options.h diff --git a/reactos/boot/freeldr/freeldr/include/oslist.h b/boot/freeldr/freeldr/include/oslist.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/oslist.h rename to boot/freeldr/freeldr/include/oslist.h diff --git a/reactos/boot/freeldr/freeldr/include/ramdisk.h b/boot/freeldr/freeldr/include/ramdisk.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/ramdisk.h rename to boot/freeldr/freeldr/include/ramdisk.h diff --git a/reactos/boot/freeldr/freeldr/include/reactos.h b/boot/freeldr/freeldr/include/reactos.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/reactos.h rename to boot/freeldr/freeldr/include/reactos.h diff --git a/reactos/boot/freeldr/freeldr/include/registry.h b/boot/freeldr/freeldr/include/registry.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/registry.h rename to boot/freeldr/freeldr/include/registry.h diff --git a/reactos/boot/freeldr/freeldr/include/rtl.h b/boot/freeldr/freeldr/include/rtl.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/rtl.h rename to boot/freeldr/freeldr/include/rtl.h diff --git a/reactos/boot/freeldr/freeldr/include/ui.h b/boot/freeldr/freeldr/include/ui.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/ui.h rename to boot/freeldr/freeldr/include/ui.h diff --git a/reactos/boot/freeldr/freeldr/include/ui/gui.h b/boot/freeldr/freeldr/include/ui/gui.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/ui/gui.h rename to boot/freeldr/freeldr/include/ui/gui.h diff --git a/reactos/boot/freeldr/freeldr/include/ui/minitui.h b/boot/freeldr/freeldr/include/ui/minitui.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/ui/minitui.h rename to boot/freeldr/freeldr/include/ui/minitui.h diff --git a/reactos/boot/freeldr/freeldr/include/ui/noui.h b/boot/freeldr/freeldr/include/ui/noui.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/ui/noui.h rename to boot/freeldr/freeldr/include/ui/noui.h diff --git a/reactos/boot/freeldr/freeldr/include/ui/tui.h b/boot/freeldr/freeldr/include/ui/tui.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/ui/tui.h rename to boot/freeldr/freeldr/include/ui/tui.h diff --git a/reactos/boot/freeldr/freeldr/include/ver.h b/boot/freeldr/freeldr/include/ver.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/ver.h rename to boot/freeldr/freeldr/include/ver.h diff --git a/reactos/boot/freeldr/freeldr/include/video.h b/boot/freeldr/freeldr/include/video.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/video.h rename to boot/freeldr/freeldr/include/video.h diff --git a/reactos/boot/freeldr/freeldr/include/winldr.h b/boot/freeldr/freeldr/include/winldr.h similarity index 100% rename from reactos/boot/freeldr/freeldr/include/winldr.h rename to boot/freeldr/freeldr/include/winldr.h diff --git a/reactos/boot/freeldr/freeldr/inffile/inffile.c b/boot/freeldr/freeldr/inffile/inffile.c similarity index 100% rename from reactos/boot/freeldr/freeldr/inffile/inffile.c rename to boot/freeldr/freeldr/inffile/inffile.c diff --git a/reactos/boot/freeldr/freeldr/inifile/ini_init.c b/boot/freeldr/freeldr/inifile/ini_init.c similarity index 100% rename from reactos/boot/freeldr/freeldr/inifile/ini_init.c rename to boot/freeldr/freeldr/inifile/ini_init.c diff --git a/reactos/boot/freeldr/freeldr/inifile/inifile.c b/boot/freeldr/freeldr/inifile/inifile.c similarity index 100% rename from reactos/boot/freeldr/freeldr/inifile/inifile.c rename to boot/freeldr/freeldr/inifile/inifile.c diff --git a/reactos/boot/freeldr/freeldr/inifile/parse.c b/boot/freeldr/freeldr/inifile/parse.c similarity index 100% rename from reactos/boot/freeldr/freeldr/inifile/parse.c rename to boot/freeldr/freeldr/inifile/parse.c diff --git a/reactos/boot/freeldr/freeldr/linuxboot.c b/boot/freeldr/freeldr/linuxboot.c similarity index 100% rename from reactos/boot/freeldr/freeldr/linuxboot.c rename to boot/freeldr/freeldr/linuxboot.c diff --git a/reactos/boot/freeldr/freeldr/machine.c b/boot/freeldr/freeldr/machine.c similarity index 100% rename from reactos/boot/freeldr/freeldr/machine.c rename to boot/freeldr/freeldr/machine.c diff --git a/reactos/boot/freeldr/freeldr/miscboot.c b/boot/freeldr/freeldr/miscboot.c similarity index 100% rename from reactos/boot/freeldr/freeldr/miscboot.c rename to boot/freeldr/freeldr/miscboot.c diff --git a/reactos/boot/freeldr/freeldr/mm/meminit.c b/boot/freeldr/freeldr/mm/meminit.c similarity index 100% rename from reactos/boot/freeldr/freeldr/mm/meminit.c rename to boot/freeldr/freeldr/mm/meminit.c diff --git a/reactos/boot/freeldr/freeldr/mm/mm.c b/boot/freeldr/freeldr/mm/mm.c similarity index 100% rename from reactos/boot/freeldr/freeldr/mm/mm.c rename to boot/freeldr/freeldr/mm/mm.c diff --git a/reactos/boot/freeldr/freeldr/options.c b/boot/freeldr/freeldr/options.c similarity index 100% rename from reactos/boot/freeldr/freeldr/options.c rename to boot/freeldr/freeldr/options.c diff --git a/reactos/boot/freeldr/freeldr/oslist.c b/boot/freeldr/freeldr/oslist.c similarity index 100% rename from reactos/boot/freeldr/freeldr/oslist.c rename to boot/freeldr/freeldr/oslist.c diff --git a/reactos/boot/freeldr/freeldr/reactos/archwsup.c b/boot/freeldr/freeldr/reactos/archwsup.c similarity index 100% rename from reactos/boot/freeldr/freeldr/reactos/archwsup.c rename to boot/freeldr/freeldr/reactos/archwsup.c diff --git a/reactos/boot/freeldr/freeldr/reactos/arcname.c b/boot/freeldr/freeldr/reactos/arcname.c similarity index 100% rename from reactos/boot/freeldr/freeldr/reactos/arcname.c rename to boot/freeldr/freeldr/reactos/arcname.c diff --git a/reactos/boot/freeldr/freeldr/reactos/binhive.c b/boot/freeldr/freeldr/reactos/binhive.c similarity index 100% rename from reactos/boot/freeldr/freeldr/reactos/binhive.c rename to boot/freeldr/freeldr/reactos/binhive.c diff --git a/reactos/boot/freeldr/freeldr/reactos/imageldr.c b/boot/freeldr/freeldr/reactos/imageldr.c similarity index 100% rename from reactos/boot/freeldr/freeldr/reactos/imageldr.c rename to boot/freeldr/freeldr/reactos/imageldr.c diff --git a/reactos/boot/freeldr/freeldr/reactos/reactos.c b/boot/freeldr/freeldr/reactos/reactos.c similarity index 100% rename from reactos/boot/freeldr/freeldr/reactos/reactos.c rename to boot/freeldr/freeldr/reactos/reactos.c diff --git a/reactos/boot/freeldr/freeldr/reactos/registry.c b/boot/freeldr/freeldr/reactos/registry.c similarity index 100% rename from reactos/boot/freeldr/freeldr/reactos/registry.c rename to boot/freeldr/freeldr/reactos/registry.c diff --git a/reactos/boot/freeldr/freeldr/reactos/setupldr.c b/boot/freeldr/freeldr/reactos/setupldr.c similarity index 100% rename from reactos/boot/freeldr/freeldr/reactos/setupldr.c rename to boot/freeldr/freeldr/reactos/setupldr.c diff --git a/reactos/boot/freeldr/freeldr/rtl/bget.c b/boot/freeldr/freeldr/rtl/bget.c similarity index 100% rename from reactos/boot/freeldr/freeldr/rtl/bget.c rename to boot/freeldr/freeldr/rtl/bget.c diff --git a/reactos/boot/freeldr/freeldr/rtl/libsupp.c b/boot/freeldr/freeldr/rtl/libsupp.c similarity index 100% rename from reactos/boot/freeldr/freeldr/rtl/libsupp.c rename to boot/freeldr/freeldr/rtl/libsupp.c diff --git a/reactos/boot/freeldr/freeldr/setupldr.rbuild b/boot/freeldr/freeldr/setupldr.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr/setupldr.rbuild rename to boot/freeldr/freeldr/setupldr.rbuild diff --git a/reactos/boot/freeldr/freeldr/setupldr_main.rbuild b/boot/freeldr/freeldr/setupldr_main.rbuild similarity index 100% rename from reactos/boot/freeldr/freeldr/setupldr_main.rbuild rename to boot/freeldr/freeldr/setupldr_main.rbuild diff --git a/reactos/boot/freeldr/freeldr/ui/gui.c b/boot/freeldr/freeldr/ui/gui.c similarity index 100% rename from reactos/boot/freeldr/freeldr/ui/gui.c rename to boot/freeldr/freeldr/ui/gui.c diff --git a/reactos/boot/freeldr/freeldr/ui/minitui.c b/boot/freeldr/freeldr/ui/minitui.c similarity index 100% rename from reactos/boot/freeldr/freeldr/ui/minitui.c rename to boot/freeldr/freeldr/ui/minitui.c diff --git a/reactos/boot/freeldr/freeldr/ui/noui.c b/boot/freeldr/freeldr/ui/noui.c similarity index 100% rename from reactos/boot/freeldr/freeldr/ui/noui.c rename to boot/freeldr/freeldr/ui/noui.c diff --git a/reactos/boot/freeldr/freeldr/ui/tui.c b/boot/freeldr/freeldr/ui/tui.c similarity index 100% rename from reactos/boot/freeldr/freeldr/ui/tui.c rename to boot/freeldr/freeldr/ui/tui.c diff --git a/reactos/boot/freeldr/freeldr/ui/tuimenu.c b/boot/freeldr/freeldr/ui/tuimenu.c similarity index 100% rename from reactos/boot/freeldr/freeldr/ui/tuimenu.c rename to boot/freeldr/freeldr/ui/tuimenu.c diff --git a/reactos/boot/freeldr/freeldr/ui/ui.c b/boot/freeldr/freeldr/ui/ui.c similarity index 100% rename from reactos/boot/freeldr/freeldr/ui/ui.c rename to boot/freeldr/freeldr/ui/ui.c diff --git a/reactos/boot/freeldr/freeldr/version.c b/boot/freeldr/freeldr/version.c similarity index 100% rename from reactos/boot/freeldr/freeldr/version.c rename to boot/freeldr/freeldr/version.c diff --git a/reactos/boot/freeldr/freeldr/video/fade.c b/boot/freeldr/freeldr/video/fade.c similarity index 100% rename from reactos/boot/freeldr/freeldr/video/fade.c rename to boot/freeldr/freeldr/video/fade.c diff --git a/reactos/boot/freeldr/freeldr/video/palette.c b/boot/freeldr/freeldr/video/palette.c similarity index 100% rename from reactos/boot/freeldr/freeldr/video/palette.c rename to boot/freeldr/freeldr/video/palette.c diff --git a/reactos/boot/freeldr/freeldr/video/video.c b/boot/freeldr/freeldr/video/video.c similarity index 100% rename from reactos/boot/freeldr/freeldr/video/video.c rename to boot/freeldr/freeldr/video/video.c diff --git a/reactos/boot/freeldr/freeldr/windows/conversion.c b/boot/freeldr/freeldr/windows/conversion.c similarity index 100% rename from reactos/boot/freeldr/freeldr/windows/conversion.c rename to boot/freeldr/freeldr/windows/conversion.c diff --git a/reactos/boot/freeldr/freeldr/windows/peloader.c b/boot/freeldr/freeldr/windows/peloader.c similarity index 100% rename from reactos/boot/freeldr/freeldr/windows/peloader.c rename to boot/freeldr/freeldr/windows/peloader.c diff --git a/reactos/boot/freeldr/freeldr/windows/winldr.c b/boot/freeldr/freeldr/windows/winldr.c similarity index 100% rename from reactos/boot/freeldr/freeldr/windows/winldr.c rename to boot/freeldr/freeldr/windows/winldr.c diff --git a/reactos/boot/freeldr/freeldr/windows/wlmemory.c b/boot/freeldr/freeldr/windows/wlmemory.c similarity index 100% rename from reactos/boot/freeldr/freeldr/windows/wlmemory.c rename to boot/freeldr/freeldr/windows/wlmemory.c diff --git a/reactos/boot/freeldr/freeldr/windows/wlregistry.c b/boot/freeldr/freeldr/windows/wlregistry.c similarity index 100% rename from reactos/boot/freeldr/freeldr/windows/wlregistry.c rename to boot/freeldr/freeldr/windows/wlregistry.c diff --git a/reactos/boot/freeldr/install/install.c b/boot/freeldr/install/install.c similarity index 100% rename from reactos/boot/freeldr/install/install.c rename to boot/freeldr/install/install.c diff --git a/reactos/boot/freeldr/install/install.h b/boot/freeldr/install/install.h similarity index 100% rename from reactos/boot/freeldr/install/install.h rename to boot/freeldr/install/install.h diff --git a/reactos/boot/freeldr/install/installfreeldr.rbuild b/boot/freeldr/install/installfreeldr.rbuild similarity index 100% rename from reactos/boot/freeldr/install/installfreeldr.rbuild rename to boot/freeldr/install/installfreeldr.rbuild diff --git a/reactos/boot/freeldr/install/linux/finstext2.c b/boot/freeldr/install/linux/finstext2.c similarity index 100% rename from reactos/boot/freeldr/install/linux/finstext2.c rename to boot/freeldr/install/linux/finstext2.c diff --git a/reactos/boot/freeldr/install/linux/finstext2.h b/boot/freeldr/install/linux/finstext2.h similarity index 100% rename from reactos/boot/freeldr/install/linux/finstext2.h rename to boot/freeldr/install/linux/finstext2.h diff --git a/reactos/boot/freeldr/install/volume.c b/boot/freeldr/install/volume.c similarity index 100% rename from reactos/boot/freeldr/install/volume.c rename to boot/freeldr/install/volume.c diff --git a/reactos/boot/freeldr/install/volume.h b/boot/freeldr/install/volume.h similarity index 100% rename from reactos/boot/freeldr/install/volume.h rename to boot/freeldr/install/volume.h diff --git a/reactos/boot/freeldr/notes.txt b/boot/freeldr/notes.txt similarity index 100% rename from reactos/boot/freeldr/notes.txt rename to boot/freeldr/notes.txt diff --git a/reactos/boot/freeldr/tools/.cvsignore b/boot/freeldr/tools/.cvsignore similarity index 100% rename from reactos/boot/freeldr/tools/.cvsignore rename to boot/freeldr/tools/.cvsignore diff --git a/reactos/boot/freeldr/tools/deptool.c b/boot/freeldr/tools/deptool.c similarity index 100% rename from reactos/boot/freeldr/tools/deptool.c rename to boot/freeldr/tools/deptool.c diff --git a/reactos/boot/freeldr/tools/hosttype.c b/boot/freeldr/tools/hosttype.c similarity index 100% rename from reactos/boot/freeldr/tools/hosttype.c rename to boot/freeldr/tools/hosttype.c diff --git a/reactos/boot/freeldr/tools/rcopy.c b/boot/freeldr/tools/rcopy.c similarity index 100% rename from reactos/boot/freeldr/tools/rcopy.c rename to boot/freeldr/tools/rcopy.c diff --git a/reactos/boot/freeldr/tools/rdel.c b/boot/freeldr/tools/rdel.c similarity index 100% rename from reactos/boot/freeldr/tools/rdel.c rename to boot/freeldr/tools/rdel.c diff --git a/reactos/boot/freeldr/tools/rmkdir.c b/boot/freeldr/tools/rmkdir.c similarity index 100% rename from reactos/boot/freeldr/tools/rmkdir.c rename to boot/freeldr/tools/rmkdir.c diff --git a/reactos/boot/freeldr/tools/rrmdir.c b/boot/freeldr/tools/rrmdir.c similarity index 100% rename from reactos/boot/freeldr/tools/rrmdir.c rename to boot/freeldr/tools/rrmdir.c diff --git a/reactos/config-arm.template.rbuild b/config-arm.template.rbuild similarity index 100% rename from reactos/config-arm.template.rbuild rename to config-arm.template.rbuild diff --git a/reactos/config-ppc.template.rbuild b/config-ppc.template.rbuild similarity index 100% rename from reactos/config-ppc.template.rbuild rename to config-ppc.template.rbuild diff --git a/reactos/config.template.rbuild b/config.template.rbuild similarity index 100% rename from reactos/config.template.rbuild rename to config.template.rbuild diff --git a/reactos/depmap.xsl b/depmap.xsl similarity index 100% rename from reactos/depmap.xsl rename to depmap.xsl diff --git a/reactos/dll/3rdparty/3rdparty.rbuild b/dll/3rdparty/3rdparty.rbuild similarity index 100% rename from reactos/dll/3rdparty/3rdparty.rbuild rename to dll/3rdparty/3rdparty.rbuild diff --git a/reactos/dll/3rdparty/dxtn/dxtn.c b/dll/3rdparty/dxtn/dxtn.c similarity index 100% rename from reactos/dll/3rdparty/dxtn/dxtn.c rename to dll/3rdparty/dxtn/dxtn.c diff --git a/reactos/dll/3rdparty/dxtn/dxtn.def b/dll/3rdparty/dxtn/dxtn.def similarity index 100% rename from reactos/dll/3rdparty/dxtn/dxtn.def rename to dll/3rdparty/dxtn/dxtn.def diff --git a/reactos/dll/3rdparty/dxtn/dxtn.h b/dll/3rdparty/dxtn/dxtn.h similarity index 100% rename from reactos/dll/3rdparty/dxtn/dxtn.h rename to dll/3rdparty/dxtn/dxtn.h diff --git a/reactos/dll/3rdparty/dxtn/dxtn.rbuild b/dll/3rdparty/dxtn/dxtn.rbuild similarity index 100% rename from reactos/dll/3rdparty/dxtn/dxtn.rbuild rename to dll/3rdparty/dxtn/dxtn.rbuild diff --git a/reactos/dll/3rdparty/dxtn/fxt1.c b/dll/3rdparty/dxtn/fxt1.c similarity index 100% rename from reactos/dll/3rdparty/dxtn/fxt1.c rename to dll/3rdparty/dxtn/fxt1.c diff --git a/reactos/dll/3rdparty/dxtn/fxt1.h b/dll/3rdparty/dxtn/fxt1.h similarity index 100% rename from reactos/dll/3rdparty/dxtn/fxt1.h rename to dll/3rdparty/dxtn/fxt1.h diff --git a/reactos/dll/3rdparty/dxtn/internal.h b/dll/3rdparty/dxtn/internal.h similarity index 100% rename from reactos/dll/3rdparty/dxtn/internal.h rename to dll/3rdparty/dxtn/internal.h diff --git a/reactos/dll/3rdparty/dxtn/texstore.c b/dll/3rdparty/dxtn/texstore.c similarity index 100% rename from reactos/dll/3rdparty/dxtn/texstore.c rename to dll/3rdparty/dxtn/texstore.c diff --git a/reactos/dll/3rdparty/dxtn/types.h b/dll/3rdparty/dxtn/types.h similarity index 100% rename from reactos/dll/3rdparty/dxtn/types.h rename to dll/3rdparty/dxtn/types.h diff --git a/reactos/dll/3rdparty/dxtn/wrapper.c b/dll/3rdparty/dxtn/wrapper.c similarity index 100% rename from reactos/dll/3rdparty/dxtn/wrapper.c rename to dll/3rdparty/dxtn/wrapper.c diff --git a/reactos/dll/3rdparty/freetype/ChangeLog b/dll/3rdparty/freetype/ChangeLog similarity index 100% rename from reactos/dll/3rdparty/freetype/ChangeLog rename to dll/3rdparty/freetype/ChangeLog diff --git a/reactos/dll/3rdparty/freetype/ChangeLog.20 b/dll/3rdparty/freetype/ChangeLog.20 similarity index 100% rename from reactos/dll/3rdparty/freetype/ChangeLog.20 rename to dll/3rdparty/freetype/ChangeLog.20 diff --git a/reactos/dll/3rdparty/freetype/ChangeLog.21 b/dll/3rdparty/freetype/ChangeLog.21 similarity index 100% rename from reactos/dll/3rdparty/freetype/ChangeLog.21 rename to dll/3rdparty/freetype/ChangeLog.21 diff --git a/reactos/dll/3rdparty/freetype/ChangeLog.22 b/dll/3rdparty/freetype/ChangeLog.22 similarity index 100% rename from reactos/dll/3rdparty/freetype/ChangeLog.22 rename to dll/3rdparty/freetype/ChangeLog.22 diff --git a/reactos/dll/3rdparty/freetype/Doxyfile b/dll/3rdparty/freetype/Doxyfile similarity index 100% rename from reactos/dll/3rdparty/freetype/Doxyfile rename to dll/3rdparty/freetype/Doxyfile diff --git a/reactos/dll/3rdparty/freetype/Jamfile b/dll/3rdparty/freetype/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/Jamfile rename to dll/3rdparty/freetype/Jamfile diff --git a/reactos/dll/3rdparty/freetype/Jamrules b/dll/3rdparty/freetype/Jamrules similarity index 100% rename from reactos/dll/3rdparty/freetype/Jamrules rename to dll/3rdparty/freetype/Jamrules diff --git a/reactos/dll/3rdparty/freetype/Makefile b/dll/3rdparty/freetype/Makefile similarity index 100% rename from reactos/dll/3rdparty/freetype/Makefile rename to dll/3rdparty/freetype/Makefile diff --git a/reactos/dll/3rdparty/freetype/README b/dll/3rdparty/freetype/README similarity index 100% rename from reactos/dll/3rdparty/freetype/README rename to dll/3rdparty/freetype/README diff --git a/reactos/dll/3rdparty/freetype/README.CVS b/dll/3rdparty/freetype/README.CVS similarity index 100% rename from reactos/dll/3rdparty/freetype/README.CVS rename to dll/3rdparty/freetype/README.CVS diff --git a/reactos/dll/3rdparty/freetype/README.ROS b/dll/3rdparty/freetype/README.ROS similarity index 100% rename from reactos/dll/3rdparty/freetype/README.ROS rename to dll/3rdparty/freetype/README.ROS diff --git a/reactos/dll/3rdparty/freetype/autogen.sh b/dll/3rdparty/freetype/autogen.sh similarity index 100% rename from reactos/dll/3rdparty/freetype/autogen.sh rename to dll/3rdparty/freetype/autogen.sh diff --git a/reactos/dll/3rdparty/freetype/configure b/dll/3rdparty/freetype/configure similarity index 100% rename from reactos/dll/3rdparty/freetype/configure rename to dll/3rdparty/freetype/configure diff --git a/reactos/dll/3rdparty/freetype/devel/ft2build.h b/dll/3rdparty/freetype/devel/ft2build.h similarity index 100% rename from reactos/dll/3rdparty/freetype/devel/ft2build.h rename to dll/3rdparty/freetype/devel/ft2build.h diff --git a/reactos/dll/3rdparty/freetype/devel/ftoption.h b/dll/3rdparty/freetype/devel/ftoption.h similarity index 100% rename from reactos/dll/3rdparty/freetype/devel/ftoption.h rename to dll/3rdparty/freetype/devel/ftoption.h diff --git a/reactos/dll/3rdparty/freetype/freetype.def b/dll/3rdparty/freetype/freetype.def similarity index 100% rename from reactos/dll/3rdparty/freetype/freetype.def rename to dll/3rdparty/freetype/freetype.def diff --git a/reactos/dll/3rdparty/freetype/freetype.rbuild b/dll/3rdparty/freetype/freetype.rbuild similarity index 100% rename from reactos/dll/3rdparty/freetype/freetype.rbuild rename to dll/3rdparty/freetype/freetype.rbuild diff --git a/reactos/dll/3rdparty/freetype/freetype.rc b/dll/3rdparty/freetype/freetype.rc similarity index 100% rename from reactos/dll/3rdparty/freetype/freetype.rc rename to dll/3rdparty/freetype/freetype.rc diff --git a/reactos/dll/3rdparty/freetype/i386/setjmplongjmp.s b/dll/3rdparty/freetype/i386/setjmplongjmp.s similarity index 100% rename from reactos/dll/3rdparty/freetype/i386/setjmplongjmp.s rename to dll/3rdparty/freetype/i386/setjmplongjmp.s diff --git a/reactos/dll/3rdparty/freetype/include/freetype/config/ftconfig.h b/dll/3rdparty/freetype/include/freetype/config/ftconfig.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/config/ftconfig.h rename to dll/3rdparty/freetype/include/freetype/config/ftconfig.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/config/ftheader.h b/dll/3rdparty/freetype/include/freetype/config/ftheader.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/config/ftheader.h rename to dll/3rdparty/freetype/include/freetype/config/ftheader.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/config/ftmodule.h b/dll/3rdparty/freetype/include/freetype/config/ftmodule.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/config/ftmodule.h rename to dll/3rdparty/freetype/include/freetype/config/ftmodule.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/config/ftoption.h b/dll/3rdparty/freetype/include/freetype/config/ftoption.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/config/ftoption.h rename to dll/3rdparty/freetype/include/freetype/config/ftoption.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/config/ftstdlib.h b/dll/3rdparty/freetype/include/freetype/config/ftstdlib.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/config/ftstdlib.h rename to dll/3rdparty/freetype/include/freetype/config/ftstdlib.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/freetype.h b/dll/3rdparty/freetype/include/freetype/freetype.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/freetype.h rename to dll/3rdparty/freetype/include/freetype/freetype.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftbbox.h b/dll/3rdparty/freetype/include/freetype/ftbbox.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftbbox.h rename to dll/3rdparty/freetype/include/freetype/ftbbox.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftbdf.h b/dll/3rdparty/freetype/include/freetype/ftbdf.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftbdf.h rename to dll/3rdparty/freetype/include/freetype/ftbdf.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftbitmap.h b/dll/3rdparty/freetype/include/freetype/ftbitmap.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftbitmap.h rename to dll/3rdparty/freetype/include/freetype/ftbitmap.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftcache.h b/dll/3rdparty/freetype/include/freetype/ftcache.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftcache.h rename to dll/3rdparty/freetype/include/freetype/ftcache.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftchapters.h b/dll/3rdparty/freetype/include/freetype/ftchapters.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftchapters.h rename to dll/3rdparty/freetype/include/freetype/ftchapters.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/fterrdef.h b/dll/3rdparty/freetype/include/freetype/fterrdef.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/fterrdef.h rename to dll/3rdparty/freetype/include/freetype/fterrdef.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/fterrors.h b/dll/3rdparty/freetype/include/freetype/fterrors.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/fterrors.h rename to dll/3rdparty/freetype/include/freetype/fterrors.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftgasp.h b/dll/3rdparty/freetype/include/freetype/ftgasp.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftgasp.h rename to dll/3rdparty/freetype/include/freetype/ftgasp.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftglyph.h b/dll/3rdparty/freetype/include/freetype/ftglyph.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftglyph.h rename to dll/3rdparty/freetype/include/freetype/ftglyph.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftgxval.h b/dll/3rdparty/freetype/include/freetype/ftgxval.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftgxval.h rename to dll/3rdparty/freetype/include/freetype/ftgxval.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftgzip.h b/dll/3rdparty/freetype/include/freetype/ftgzip.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftgzip.h rename to dll/3rdparty/freetype/include/freetype/ftgzip.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftimage.h b/dll/3rdparty/freetype/include/freetype/ftimage.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftimage.h rename to dll/3rdparty/freetype/include/freetype/ftimage.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftincrem.h b/dll/3rdparty/freetype/include/freetype/ftincrem.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftincrem.h rename to dll/3rdparty/freetype/include/freetype/ftincrem.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftlcdfil.h b/dll/3rdparty/freetype/include/freetype/ftlcdfil.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftlcdfil.h rename to dll/3rdparty/freetype/include/freetype/ftlcdfil.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftlist.h b/dll/3rdparty/freetype/include/freetype/ftlist.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftlist.h rename to dll/3rdparty/freetype/include/freetype/ftlist.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftlzw.h b/dll/3rdparty/freetype/include/freetype/ftlzw.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftlzw.h rename to dll/3rdparty/freetype/include/freetype/ftlzw.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftmac.h b/dll/3rdparty/freetype/include/freetype/ftmac.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftmac.h rename to dll/3rdparty/freetype/include/freetype/ftmac.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftmm.h b/dll/3rdparty/freetype/include/freetype/ftmm.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftmm.h rename to dll/3rdparty/freetype/include/freetype/ftmm.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftmodapi.h b/dll/3rdparty/freetype/include/freetype/ftmodapi.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftmodapi.h rename to dll/3rdparty/freetype/include/freetype/ftmodapi.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftmoderr.h b/dll/3rdparty/freetype/include/freetype/ftmoderr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftmoderr.h rename to dll/3rdparty/freetype/include/freetype/ftmoderr.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftotval.h b/dll/3rdparty/freetype/include/freetype/ftotval.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftotval.h rename to dll/3rdparty/freetype/include/freetype/ftotval.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftoutln.h b/dll/3rdparty/freetype/include/freetype/ftoutln.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftoutln.h rename to dll/3rdparty/freetype/include/freetype/ftoutln.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftpfr.h b/dll/3rdparty/freetype/include/freetype/ftpfr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftpfr.h rename to dll/3rdparty/freetype/include/freetype/ftpfr.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftrender.h b/dll/3rdparty/freetype/include/freetype/ftrender.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftrender.h rename to dll/3rdparty/freetype/include/freetype/ftrender.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftsizes.h b/dll/3rdparty/freetype/include/freetype/ftsizes.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftsizes.h rename to dll/3rdparty/freetype/include/freetype/ftsizes.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftsnames.h b/dll/3rdparty/freetype/include/freetype/ftsnames.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftsnames.h rename to dll/3rdparty/freetype/include/freetype/ftsnames.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftstroke.h b/dll/3rdparty/freetype/include/freetype/ftstroke.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftstroke.h rename to dll/3rdparty/freetype/include/freetype/ftstroke.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftsynth.h b/dll/3rdparty/freetype/include/freetype/ftsynth.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftsynth.h rename to dll/3rdparty/freetype/include/freetype/ftsynth.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftsystem.h b/dll/3rdparty/freetype/include/freetype/ftsystem.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftsystem.h rename to dll/3rdparty/freetype/include/freetype/ftsystem.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/fttrigon.h b/dll/3rdparty/freetype/include/freetype/fttrigon.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/fttrigon.h rename to dll/3rdparty/freetype/include/freetype/fttrigon.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/fttypes.h b/dll/3rdparty/freetype/include/freetype/fttypes.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/fttypes.h rename to dll/3rdparty/freetype/include/freetype/fttypes.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftwinfnt.h b/dll/3rdparty/freetype/include/freetype/ftwinfnt.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftwinfnt.h rename to dll/3rdparty/freetype/include/freetype/ftwinfnt.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ftxf86.h b/dll/3rdparty/freetype/include/freetype/ftxf86.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ftxf86.h rename to dll/3rdparty/freetype/include/freetype/ftxf86.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/autohint.h b/dll/3rdparty/freetype/include/freetype/internal/autohint.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/autohint.h rename to dll/3rdparty/freetype/include/freetype/internal/autohint.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftcalc.h b/dll/3rdparty/freetype/include/freetype/internal/ftcalc.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftcalc.h rename to dll/3rdparty/freetype/include/freetype/internal/ftcalc.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftdebug.h b/dll/3rdparty/freetype/include/freetype/internal/ftdebug.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftdebug.h rename to dll/3rdparty/freetype/include/freetype/internal/ftdebug.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftdriver.h b/dll/3rdparty/freetype/include/freetype/internal/ftdriver.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftdriver.h rename to dll/3rdparty/freetype/include/freetype/internal/ftdriver.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftgloadr.h b/dll/3rdparty/freetype/include/freetype/internal/ftgloadr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftgloadr.h rename to dll/3rdparty/freetype/include/freetype/internal/ftgloadr.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftmemory.h b/dll/3rdparty/freetype/include/freetype/internal/ftmemory.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftmemory.h rename to dll/3rdparty/freetype/include/freetype/internal/ftmemory.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftobjs.h b/dll/3rdparty/freetype/include/freetype/internal/ftobjs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftobjs.h rename to dll/3rdparty/freetype/include/freetype/internal/ftobjs.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftrfork.h b/dll/3rdparty/freetype/include/freetype/internal/ftrfork.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftrfork.h rename to dll/3rdparty/freetype/include/freetype/internal/ftrfork.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftserv.h b/dll/3rdparty/freetype/include/freetype/internal/ftserv.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftserv.h rename to dll/3rdparty/freetype/include/freetype/internal/ftserv.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftstream.h b/dll/3rdparty/freetype/include/freetype/internal/ftstream.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftstream.h rename to dll/3rdparty/freetype/include/freetype/internal/ftstream.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/fttrace.h b/dll/3rdparty/freetype/include/freetype/internal/fttrace.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/fttrace.h rename to dll/3rdparty/freetype/include/freetype/internal/fttrace.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/ftvalid.h b/dll/3rdparty/freetype/include/freetype/internal/ftvalid.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/ftvalid.h rename to dll/3rdparty/freetype/include/freetype/internal/ftvalid.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/internal.h b/dll/3rdparty/freetype/include/freetype/internal/internal.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/internal.h rename to dll/3rdparty/freetype/include/freetype/internal/internal.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/pcftypes.h b/dll/3rdparty/freetype/include/freetype/internal/pcftypes.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/pcftypes.h rename to dll/3rdparty/freetype/include/freetype/internal/pcftypes.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/psaux.h b/dll/3rdparty/freetype/include/freetype/internal/psaux.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/psaux.h rename to dll/3rdparty/freetype/include/freetype/internal/psaux.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/pshints.h b/dll/3rdparty/freetype/include/freetype/internal/pshints.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/pshints.h rename to dll/3rdparty/freetype/include/freetype/internal/pshints.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svbdf.h b/dll/3rdparty/freetype/include/freetype/internal/services/svbdf.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svbdf.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svbdf.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svgldict.h b/dll/3rdparty/freetype/include/freetype/internal/services/svgldict.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svgldict.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svgldict.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svgxval.h b/dll/3rdparty/freetype/include/freetype/internal/services/svgxval.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svgxval.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svgxval.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svkern.h b/dll/3rdparty/freetype/include/freetype/internal/services/svkern.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svkern.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svkern.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svmm.h b/dll/3rdparty/freetype/include/freetype/internal/services/svmm.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svmm.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svmm.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svotval.h b/dll/3rdparty/freetype/include/freetype/internal/services/svotval.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svotval.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svotval.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svpfr.h b/dll/3rdparty/freetype/include/freetype/internal/services/svpfr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svpfr.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svpfr.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svpostnm.h b/dll/3rdparty/freetype/include/freetype/internal/services/svpostnm.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svpostnm.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svpostnm.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svpscmap.h b/dll/3rdparty/freetype/include/freetype/internal/services/svpscmap.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svpscmap.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svpscmap.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h b/dll/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svsfnt.h b/dll/3rdparty/freetype/include/freetype/internal/services/svsfnt.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svsfnt.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svsfnt.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svttcmap.h b/dll/3rdparty/freetype/include/freetype/internal/services/svttcmap.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svttcmap.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svttcmap.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svtteng.h b/dll/3rdparty/freetype/include/freetype/internal/services/svtteng.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svtteng.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svtteng.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svttglyf.h b/dll/3rdparty/freetype/include/freetype/internal/services/svttglyf.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svttglyf.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svttglyf.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h b/dll/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/services/svxf86nm.h b/dll/3rdparty/freetype/include/freetype/internal/services/svxf86nm.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/services/svxf86nm.h rename to dll/3rdparty/freetype/include/freetype/internal/services/svxf86nm.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/sfnt.h b/dll/3rdparty/freetype/include/freetype/internal/sfnt.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/sfnt.h rename to dll/3rdparty/freetype/include/freetype/internal/sfnt.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/t1types.h b/dll/3rdparty/freetype/include/freetype/internal/t1types.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/t1types.h rename to dll/3rdparty/freetype/include/freetype/internal/t1types.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/internal/tttypes.h b/dll/3rdparty/freetype/include/freetype/internal/tttypes.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/internal/tttypes.h rename to dll/3rdparty/freetype/include/freetype/internal/tttypes.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/t1tables.h b/dll/3rdparty/freetype/include/freetype/t1tables.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/t1tables.h rename to dll/3rdparty/freetype/include/freetype/t1tables.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ttnameid.h b/dll/3rdparty/freetype/include/freetype/ttnameid.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ttnameid.h rename to dll/3rdparty/freetype/include/freetype/ttnameid.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/tttables.h b/dll/3rdparty/freetype/include/freetype/tttables.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/tttables.h rename to dll/3rdparty/freetype/include/freetype/tttables.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/tttags.h b/dll/3rdparty/freetype/include/freetype/tttags.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/tttags.h rename to dll/3rdparty/freetype/include/freetype/tttags.h diff --git a/reactos/dll/3rdparty/freetype/include/freetype/ttunpat.h b/dll/3rdparty/freetype/include/freetype/ttunpat.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/freetype/ttunpat.h rename to dll/3rdparty/freetype/include/freetype/ttunpat.h diff --git a/reactos/dll/3rdparty/freetype/include/ft2build.h b/dll/3rdparty/freetype/include/ft2build.h similarity index 100% rename from reactos/dll/3rdparty/freetype/include/ft2build.h rename to dll/3rdparty/freetype/include/ft2build.h diff --git a/reactos/dll/3rdparty/freetype/modules.cfg b/dll/3rdparty/freetype/modules.cfg similarity index 100% rename from reactos/dll/3rdparty/freetype/modules.cfg rename to dll/3rdparty/freetype/modules.cfg diff --git a/reactos/dll/3rdparty/freetype/objs/README b/dll/3rdparty/freetype/objs/README similarity index 100% rename from reactos/dll/3rdparty/freetype/objs/README rename to dll/3rdparty/freetype/objs/README diff --git a/reactos/dll/3rdparty/freetype/rosglue.c b/dll/3rdparty/freetype/rosglue.c similarity index 100% rename from reactos/dll/3rdparty/freetype/rosglue.c rename to dll/3rdparty/freetype/rosglue.c diff --git a/reactos/dll/3rdparty/freetype/src/Jamfile b/dll/3rdparty/freetype/src/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/Jamfile rename to dll/3rdparty/freetype/src/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/autofit/Jamfile b/dll/3rdparty/freetype/src/autofit/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/Jamfile rename to dll/3rdparty/freetype/src/autofit/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afangles.c b/dll/3rdparty/freetype/src/autofit/afangles.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afangles.c rename to dll/3rdparty/freetype/src/autofit/afangles.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afangles.h b/dll/3rdparty/freetype/src/autofit/afangles.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afangles.h rename to dll/3rdparty/freetype/src/autofit/afangles.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afcjk.c b/dll/3rdparty/freetype/src/autofit/afcjk.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afcjk.c rename to dll/3rdparty/freetype/src/autofit/afcjk.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afcjk.h b/dll/3rdparty/freetype/src/autofit/afcjk.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afcjk.h rename to dll/3rdparty/freetype/src/autofit/afcjk.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afdummy.c b/dll/3rdparty/freetype/src/autofit/afdummy.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afdummy.c rename to dll/3rdparty/freetype/src/autofit/afdummy.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afdummy.h b/dll/3rdparty/freetype/src/autofit/afdummy.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afdummy.h rename to dll/3rdparty/freetype/src/autofit/afdummy.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/aferrors.h b/dll/3rdparty/freetype/src/autofit/aferrors.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/aferrors.h rename to dll/3rdparty/freetype/src/autofit/aferrors.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afglobal.c b/dll/3rdparty/freetype/src/autofit/afglobal.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afglobal.c rename to dll/3rdparty/freetype/src/autofit/afglobal.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afglobal.h b/dll/3rdparty/freetype/src/autofit/afglobal.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afglobal.h rename to dll/3rdparty/freetype/src/autofit/afglobal.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afhints.c b/dll/3rdparty/freetype/src/autofit/afhints.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afhints.c rename to dll/3rdparty/freetype/src/autofit/afhints.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afhints.h b/dll/3rdparty/freetype/src/autofit/afhints.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afhints.h rename to dll/3rdparty/freetype/src/autofit/afhints.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afindic.c b/dll/3rdparty/freetype/src/autofit/afindic.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afindic.c rename to dll/3rdparty/freetype/src/autofit/afindic.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afindic.h b/dll/3rdparty/freetype/src/autofit/afindic.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afindic.h rename to dll/3rdparty/freetype/src/autofit/afindic.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/aflatin.c b/dll/3rdparty/freetype/src/autofit/aflatin.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/aflatin.c rename to dll/3rdparty/freetype/src/autofit/aflatin.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/aflatin.h b/dll/3rdparty/freetype/src/autofit/aflatin.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/aflatin.h rename to dll/3rdparty/freetype/src/autofit/aflatin.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/aflatin2.c b/dll/3rdparty/freetype/src/autofit/aflatin2.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/aflatin2.c rename to dll/3rdparty/freetype/src/autofit/aflatin2.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/aflatin2.h b/dll/3rdparty/freetype/src/autofit/aflatin2.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/aflatin2.h rename to dll/3rdparty/freetype/src/autofit/aflatin2.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afloader.c b/dll/3rdparty/freetype/src/autofit/afloader.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afloader.c rename to dll/3rdparty/freetype/src/autofit/afloader.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afloader.h b/dll/3rdparty/freetype/src/autofit/afloader.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afloader.h rename to dll/3rdparty/freetype/src/autofit/afloader.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afmodule.c b/dll/3rdparty/freetype/src/autofit/afmodule.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afmodule.c rename to dll/3rdparty/freetype/src/autofit/afmodule.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afmodule.h b/dll/3rdparty/freetype/src/autofit/afmodule.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afmodule.h rename to dll/3rdparty/freetype/src/autofit/afmodule.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/aftypes.h b/dll/3rdparty/freetype/src/autofit/aftypes.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/aftypes.h rename to dll/3rdparty/freetype/src/autofit/aftypes.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afwarp.c b/dll/3rdparty/freetype/src/autofit/afwarp.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afwarp.c rename to dll/3rdparty/freetype/src/autofit/afwarp.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/afwarp.h b/dll/3rdparty/freetype/src/autofit/afwarp.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/afwarp.h rename to dll/3rdparty/freetype/src/autofit/afwarp.h diff --git a/reactos/dll/3rdparty/freetype/src/autofit/autofit.c b/dll/3rdparty/freetype/src/autofit/autofit.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/autofit.c rename to dll/3rdparty/freetype/src/autofit/autofit.c diff --git a/reactos/dll/3rdparty/freetype/src/autofit/module.mk b/dll/3rdparty/freetype/src/autofit/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/module.mk rename to dll/3rdparty/freetype/src/autofit/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/autofit/rules.mk b/dll/3rdparty/freetype/src/autofit/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/autofit/rules.mk rename to dll/3rdparty/freetype/src/autofit/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/base/Jamfile b/dll/3rdparty/freetype/src/base/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/Jamfile rename to dll/3rdparty/freetype/src/base/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/base/_ftbase_ros.c b/dll/3rdparty/freetype/src/base/_ftbase_ros.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/_ftbase_ros.c rename to dll/3rdparty/freetype/src/base/_ftbase_ros.c diff --git a/reactos/dll/3rdparty/freetype/src/base/_ftmulfix_ros.c b/dll/3rdparty/freetype/src/base/_ftmulfix_ros.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/_ftmulfix_ros.c rename to dll/3rdparty/freetype/src/base/_ftmulfix_ros.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftapi.c b/dll/3rdparty/freetype/src/base/ftapi.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftapi.c rename to dll/3rdparty/freetype/src/base/ftapi.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftbase.c b/dll/3rdparty/freetype/src/base/ftbase.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftbase.c rename to dll/3rdparty/freetype/src/base/ftbase.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftbbox.c b/dll/3rdparty/freetype/src/base/ftbbox.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftbbox.c rename to dll/3rdparty/freetype/src/base/ftbbox.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftbdf.c b/dll/3rdparty/freetype/src/base/ftbdf.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftbdf.c rename to dll/3rdparty/freetype/src/base/ftbdf.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftbitmap.c b/dll/3rdparty/freetype/src/base/ftbitmap.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftbitmap.c rename to dll/3rdparty/freetype/src/base/ftbitmap.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftcalc.c b/dll/3rdparty/freetype/src/base/ftcalc.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftcalc.c rename to dll/3rdparty/freetype/src/base/ftcalc.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftdbgmem.c b/dll/3rdparty/freetype/src/base/ftdbgmem.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftdbgmem.c rename to dll/3rdparty/freetype/src/base/ftdbgmem.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftdebug.c b/dll/3rdparty/freetype/src/base/ftdebug.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftdebug.c rename to dll/3rdparty/freetype/src/base/ftdebug.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftgasp.c b/dll/3rdparty/freetype/src/base/ftgasp.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftgasp.c rename to dll/3rdparty/freetype/src/base/ftgasp.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftgloadr.c b/dll/3rdparty/freetype/src/base/ftgloadr.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftgloadr.c rename to dll/3rdparty/freetype/src/base/ftgloadr.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftglyph.c b/dll/3rdparty/freetype/src/base/ftglyph.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftglyph.c rename to dll/3rdparty/freetype/src/base/ftglyph.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftgxval.c b/dll/3rdparty/freetype/src/base/ftgxval.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftgxval.c rename to dll/3rdparty/freetype/src/base/ftgxval.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftinit.c b/dll/3rdparty/freetype/src/base/ftinit.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftinit.c rename to dll/3rdparty/freetype/src/base/ftinit.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftlcdfil.c b/dll/3rdparty/freetype/src/base/ftlcdfil.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftlcdfil.c rename to dll/3rdparty/freetype/src/base/ftlcdfil.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftmac.c b/dll/3rdparty/freetype/src/base/ftmac.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftmac.c rename to dll/3rdparty/freetype/src/base/ftmac.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftmm.c b/dll/3rdparty/freetype/src/base/ftmm.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftmm.c rename to dll/3rdparty/freetype/src/base/ftmm.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftnames.c b/dll/3rdparty/freetype/src/base/ftnames.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftnames.c rename to dll/3rdparty/freetype/src/base/ftnames.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftobjs.c b/dll/3rdparty/freetype/src/base/ftobjs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftobjs.c rename to dll/3rdparty/freetype/src/base/ftobjs.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftotval.c b/dll/3rdparty/freetype/src/base/ftotval.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftotval.c rename to dll/3rdparty/freetype/src/base/ftotval.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftoutln.c b/dll/3rdparty/freetype/src/base/ftoutln.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftoutln.c rename to dll/3rdparty/freetype/src/base/ftoutln.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftpatent.c b/dll/3rdparty/freetype/src/base/ftpatent.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftpatent.c rename to dll/3rdparty/freetype/src/base/ftpatent.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftpfr.c b/dll/3rdparty/freetype/src/base/ftpfr.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftpfr.c rename to dll/3rdparty/freetype/src/base/ftpfr.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftrfork.c b/dll/3rdparty/freetype/src/base/ftrfork.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftrfork.c rename to dll/3rdparty/freetype/src/base/ftrfork.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftstream.c b/dll/3rdparty/freetype/src/base/ftstream.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftstream.c rename to dll/3rdparty/freetype/src/base/ftstream.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftstroke.c b/dll/3rdparty/freetype/src/base/ftstroke.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftstroke.c rename to dll/3rdparty/freetype/src/base/ftstroke.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftsynth.c b/dll/3rdparty/freetype/src/base/ftsynth.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftsynth.c rename to dll/3rdparty/freetype/src/base/ftsynth.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftsystem.c b/dll/3rdparty/freetype/src/base/ftsystem.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftsystem.c rename to dll/3rdparty/freetype/src/base/ftsystem.c diff --git a/reactos/dll/3rdparty/freetype/src/base/fttrigon.c b/dll/3rdparty/freetype/src/base/fttrigon.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/fttrigon.c rename to dll/3rdparty/freetype/src/base/fttrigon.c diff --git a/reactos/dll/3rdparty/freetype/src/base/fttype1.c b/dll/3rdparty/freetype/src/base/fttype1.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/fttype1.c rename to dll/3rdparty/freetype/src/base/fttype1.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftutil.c b/dll/3rdparty/freetype/src/base/ftutil.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftutil.c rename to dll/3rdparty/freetype/src/base/ftutil.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftwinfnt.c b/dll/3rdparty/freetype/src/base/ftwinfnt.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftwinfnt.c rename to dll/3rdparty/freetype/src/base/ftwinfnt.c diff --git a/reactos/dll/3rdparty/freetype/src/base/ftxf86.c b/dll/3rdparty/freetype/src/base/ftxf86.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/ftxf86.c rename to dll/3rdparty/freetype/src/base/ftxf86.c diff --git a/reactos/dll/3rdparty/freetype/src/base/rules.mk b/dll/3rdparty/freetype/src/base/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/base/rules.mk rename to dll/3rdparty/freetype/src/base/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/bdf/Jamfile b/dll/3rdparty/freetype/src/bdf/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/Jamfile rename to dll/3rdparty/freetype/src/bdf/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/bdf/README b/dll/3rdparty/freetype/src/bdf/README similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/README rename to dll/3rdparty/freetype/src/bdf/README diff --git a/reactos/dll/3rdparty/freetype/src/bdf/bdf.c b/dll/3rdparty/freetype/src/bdf/bdf.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/bdf.c rename to dll/3rdparty/freetype/src/bdf/bdf.c diff --git a/reactos/dll/3rdparty/freetype/src/bdf/bdf.h b/dll/3rdparty/freetype/src/bdf/bdf.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/bdf.h rename to dll/3rdparty/freetype/src/bdf/bdf.h diff --git a/reactos/dll/3rdparty/freetype/src/bdf/bdfdrivr.c b/dll/3rdparty/freetype/src/bdf/bdfdrivr.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/bdfdrivr.c rename to dll/3rdparty/freetype/src/bdf/bdfdrivr.c diff --git a/reactos/dll/3rdparty/freetype/src/bdf/bdfdrivr.h b/dll/3rdparty/freetype/src/bdf/bdfdrivr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/bdfdrivr.h rename to dll/3rdparty/freetype/src/bdf/bdfdrivr.h diff --git a/reactos/dll/3rdparty/freetype/src/bdf/bdferror.h b/dll/3rdparty/freetype/src/bdf/bdferror.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/bdferror.h rename to dll/3rdparty/freetype/src/bdf/bdferror.h diff --git a/reactos/dll/3rdparty/freetype/src/bdf/bdflib.c b/dll/3rdparty/freetype/src/bdf/bdflib.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/bdflib.c rename to dll/3rdparty/freetype/src/bdf/bdflib.c diff --git a/reactos/dll/3rdparty/freetype/src/bdf/module.mk b/dll/3rdparty/freetype/src/bdf/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/module.mk rename to dll/3rdparty/freetype/src/bdf/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/bdf/rules.mk b/dll/3rdparty/freetype/src/bdf/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/bdf/rules.mk rename to dll/3rdparty/freetype/src/bdf/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/cache/Jamfile b/dll/3rdparty/freetype/src/cache/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/Jamfile rename to dll/3rdparty/freetype/src/cache/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcache.c b/dll/3rdparty/freetype/src/cache/ftcache.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcache.c rename to dll/3rdparty/freetype/src/cache/ftcache.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcbasic.c b/dll/3rdparty/freetype/src/cache/ftcbasic.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcbasic.c rename to dll/3rdparty/freetype/src/cache/ftcbasic.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftccache.c b/dll/3rdparty/freetype/src/cache/ftccache.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftccache.c rename to dll/3rdparty/freetype/src/cache/ftccache.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftccache.h b/dll/3rdparty/freetype/src/cache/ftccache.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftccache.h rename to dll/3rdparty/freetype/src/cache/ftccache.h diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftccback.h b/dll/3rdparty/freetype/src/cache/ftccback.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftccback.h rename to dll/3rdparty/freetype/src/cache/ftccback.h diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftccmap.c b/dll/3rdparty/freetype/src/cache/ftccmap.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftccmap.c rename to dll/3rdparty/freetype/src/cache/ftccmap.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcerror.h b/dll/3rdparty/freetype/src/cache/ftcerror.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcerror.h rename to dll/3rdparty/freetype/src/cache/ftcerror.h diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcglyph.c b/dll/3rdparty/freetype/src/cache/ftcglyph.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcglyph.c rename to dll/3rdparty/freetype/src/cache/ftcglyph.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcglyph.h b/dll/3rdparty/freetype/src/cache/ftcglyph.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcglyph.h rename to dll/3rdparty/freetype/src/cache/ftcglyph.h diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcimage.c b/dll/3rdparty/freetype/src/cache/ftcimage.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcimage.c rename to dll/3rdparty/freetype/src/cache/ftcimage.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcimage.h b/dll/3rdparty/freetype/src/cache/ftcimage.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcimage.h rename to dll/3rdparty/freetype/src/cache/ftcimage.h diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcmanag.c b/dll/3rdparty/freetype/src/cache/ftcmanag.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcmanag.c rename to dll/3rdparty/freetype/src/cache/ftcmanag.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcmanag.h b/dll/3rdparty/freetype/src/cache/ftcmanag.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcmanag.h rename to dll/3rdparty/freetype/src/cache/ftcmanag.h diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcmru.c b/dll/3rdparty/freetype/src/cache/ftcmru.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcmru.c rename to dll/3rdparty/freetype/src/cache/ftcmru.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcmru.h b/dll/3rdparty/freetype/src/cache/ftcmru.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcmru.h rename to dll/3rdparty/freetype/src/cache/ftcmru.h diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcsbits.c b/dll/3rdparty/freetype/src/cache/ftcsbits.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcsbits.c rename to dll/3rdparty/freetype/src/cache/ftcsbits.c diff --git a/reactos/dll/3rdparty/freetype/src/cache/ftcsbits.h b/dll/3rdparty/freetype/src/cache/ftcsbits.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/ftcsbits.h rename to dll/3rdparty/freetype/src/cache/ftcsbits.h diff --git a/reactos/dll/3rdparty/freetype/src/cache/rules.mk b/dll/3rdparty/freetype/src/cache/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cache/rules.mk rename to dll/3rdparty/freetype/src/cache/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/cff/Jamfile b/dll/3rdparty/freetype/src/cff/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/Jamfile rename to dll/3rdparty/freetype/src/cff/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/cff/cff.c b/dll/3rdparty/freetype/src/cff/cff.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cff.c rename to dll/3rdparty/freetype/src/cff/cff.c diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffcmap.c b/dll/3rdparty/freetype/src/cff/cffcmap.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffcmap.c rename to dll/3rdparty/freetype/src/cff/cffcmap.c diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffcmap.h b/dll/3rdparty/freetype/src/cff/cffcmap.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffcmap.h rename to dll/3rdparty/freetype/src/cff/cffcmap.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffdrivr.c b/dll/3rdparty/freetype/src/cff/cffdrivr.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffdrivr.c rename to dll/3rdparty/freetype/src/cff/cffdrivr.c diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffdrivr.h b/dll/3rdparty/freetype/src/cff/cffdrivr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffdrivr.h rename to dll/3rdparty/freetype/src/cff/cffdrivr.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/cfferrs.h b/dll/3rdparty/freetype/src/cff/cfferrs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cfferrs.h rename to dll/3rdparty/freetype/src/cff/cfferrs.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffgload.c b/dll/3rdparty/freetype/src/cff/cffgload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffgload.c rename to dll/3rdparty/freetype/src/cff/cffgload.c diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffgload.h b/dll/3rdparty/freetype/src/cff/cffgload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffgload.h rename to dll/3rdparty/freetype/src/cff/cffgload.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffload.c b/dll/3rdparty/freetype/src/cff/cffload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffload.c rename to dll/3rdparty/freetype/src/cff/cffload.c diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffload.h b/dll/3rdparty/freetype/src/cff/cffload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffload.h rename to dll/3rdparty/freetype/src/cff/cffload.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffobjs.c b/dll/3rdparty/freetype/src/cff/cffobjs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffobjs.c rename to dll/3rdparty/freetype/src/cff/cffobjs.c diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffobjs.h b/dll/3rdparty/freetype/src/cff/cffobjs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffobjs.h rename to dll/3rdparty/freetype/src/cff/cffobjs.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffparse.c b/dll/3rdparty/freetype/src/cff/cffparse.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffparse.c rename to dll/3rdparty/freetype/src/cff/cffparse.c diff --git a/reactos/dll/3rdparty/freetype/src/cff/cffparse.h b/dll/3rdparty/freetype/src/cff/cffparse.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cffparse.h rename to dll/3rdparty/freetype/src/cff/cffparse.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/cfftoken.h b/dll/3rdparty/freetype/src/cff/cfftoken.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cfftoken.h rename to dll/3rdparty/freetype/src/cff/cfftoken.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/cfftypes.h b/dll/3rdparty/freetype/src/cff/cfftypes.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/cfftypes.h rename to dll/3rdparty/freetype/src/cff/cfftypes.h diff --git a/reactos/dll/3rdparty/freetype/src/cff/module.mk b/dll/3rdparty/freetype/src/cff/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/module.mk rename to dll/3rdparty/freetype/src/cff/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/cff/rules.mk b/dll/3rdparty/freetype/src/cff/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cff/rules.mk rename to dll/3rdparty/freetype/src/cff/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/cid/Jamfile b/dll/3rdparty/freetype/src/cid/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/Jamfile rename to dll/3rdparty/freetype/src/cid/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/cid/ciderrs.h b/dll/3rdparty/freetype/src/cid/ciderrs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/ciderrs.h rename to dll/3rdparty/freetype/src/cid/ciderrs.h diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidgload.c b/dll/3rdparty/freetype/src/cid/cidgload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidgload.c rename to dll/3rdparty/freetype/src/cid/cidgload.c diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidgload.h b/dll/3rdparty/freetype/src/cid/cidgload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidgload.h rename to dll/3rdparty/freetype/src/cid/cidgload.h diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidload.c b/dll/3rdparty/freetype/src/cid/cidload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidload.c rename to dll/3rdparty/freetype/src/cid/cidload.c diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidload.h b/dll/3rdparty/freetype/src/cid/cidload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidload.h rename to dll/3rdparty/freetype/src/cid/cidload.h diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidobjs.c b/dll/3rdparty/freetype/src/cid/cidobjs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidobjs.c rename to dll/3rdparty/freetype/src/cid/cidobjs.c diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidobjs.h b/dll/3rdparty/freetype/src/cid/cidobjs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidobjs.h rename to dll/3rdparty/freetype/src/cid/cidobjs.h diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidparse.c b/dll/3rdparty/freetype/src/cid/cidparse.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidparse.c rename to dll/3rdparty/freetype/src/cid/cidparse.c diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidparse.h b/dll/3rdparty/freetype/src/cid/cidparse.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidparse.h rename to dll/3rdparty/freetype/src/cid/cidparse.h diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidriver.c b/dll/3rdparty/freetype/src/cid/cidriver.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidriver.c rename to dll/3rdparty/freetype/src/cid/cidriver.c diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidriver.h b/dll/3rdparty/freetype/src/cid/cidriver.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidriver.h rename to dll/3rdparty/freetype/src/cid/cidriver.h diff --git a/reactos/dll/3rdparty/freetype/src/cid/cidtoken.h b/dll/3rdparty/freetype/src/cid/cidtoken.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/cidtoken.h rename to dll/3rdparty/freetype/src/cid/cidtoken.h diff --git a/reactos/dll/3rdparty/freetype/src/cid/module.mk b/dll/3rdparty/freetype/src/cid/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/module.mk rename to dll/3rdparty/freetype/src/cid/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/cid/rules.mk b/dll/3rdparty/freetype/src/cid/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/rules.mk rename to dll/3rdparty/freetype/src/cid/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/cid/type1cid.c b/dll/3rdparty/freetype/src/cid/type1cid.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/cid/type1cid.c rename to dll/3rdparty/freetype/src/cid/type1cid.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/Jamfile b/dll/3rdparty/freetype/src/gxvalid/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/Jamfile rename to dll/3rdparty/freetype/src/gxvalid/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/README b/dll/3rdparty/freetype/src/gxvalid/README similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/README rename to dll/3rdparty/freetype/src/gxvalid/README diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvalid.c b/dll/3rdparty/freetype/src/gxvalid/gxvalid.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvalid.c rename to dll/3rdparty/freetype/src/gxvalid/gxvalid.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvalid.h b/dll/3rdparty/freetype/src/gxvalid/gxvalid.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvalid.h rename to dll/3rdparty/freetype/src/gxvalid/gxvalid.h diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvbsln.c b/dll/3rdparty/freetype/src/gxvalid/gxvbsln.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvbsln.c rename to dll/3rdparty/freetype/src/gxvalid/gxvbsln.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvcommn.c b/dll/3rdparty/freetype/src/gxvalid/gxvcommn.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvcommn.c rename to dll/3rdparty/freetype/src/gxvalid/gxvcommn.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvcommn.h b/dll/3rdparty/freetype/src/gxvalid/gxvcommn.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvcommn.h rename to dll/3rdparty/freetype/src/gxvalid/gxvcommn.h diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxverror.h b/dll/3rdparty/freetype/src/gxvalid/gxverror.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxverror.h rename to dll/3rdparty/freetype/src/gxvalid/gxverror.h diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvfeat.c b/dll/3rdparty/freetype/src/gxvalid/gxvfeat.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvfeat.c rename to dll/3rdparty/freetype/src/gxvalid/gxvfeat.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvfeat.h b/dll/3rdparty/freetype/src/gxvalid/gxvfeat.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvfeat.h rename to dll/3rdparty/freetype/src/gxvalid/gxvfeat.h diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvfgen.c b/dll/3rdparty/freetype/src/gxvalid/gxvfgen.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvfgen.c rename to dll/3rdparty/freetype/src/gxvalid/gxvfgen.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvjust.c b/dll/3rdparty/freetype/src/gxvalid/gxvjust.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvjust.c rename to dll/3rdparty/freetype/src/gxvalid/gxvjust.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvkern.c b/dll/3rdparty/freetype/src/gxvalid/gxvkern.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvkern.c rename to dll/3rdparty/freetype/src/gxvalid/gxvkern.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvlcar.c b/dll/3rdparty/freetype/src/gxvalid/gxvlcar.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvlcar.c rename to dll/3rdparty/freetype/src/gxvalid/gxvlcar.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmod.c b/dll/3rdparty/freetype/src/gxvalid/gxvmod.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmod.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmod.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmod.h b/dll/3rdparty/freetype/src/gxvalid/gxvmod.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmod.h rename to dll/3rdparty/freetype/src/gxvalid/gxvmod.h diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort.c b/dll/3rdparty/freetype/src/gxvalid/gxvmort.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmort.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort.h b/dll/3rdparty/freetype/src/gxvalid/gxvmort.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort.h rename to dll/3rdparty/freetype/src/gxvalid/gxvmort.h diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort0.c b/dll/3rdparty/freetype/src/gxvalid/gxvmort0.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort0.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmort0.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort1.c b/dll/3rdparty/freetype/src/gxvalid/gxvmort1.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort1.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmort1.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort2.c b/dll/3rdparty/freetype/src/gxvalid/gxvmort2.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort2.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmort2.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort4.c b/dll/3rdparty/freetype/src/gxvalid/gxvmort4.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort4.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmort4.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort5.c b/dll/3rdparty/freetype/src/gxvalid/gxvmort5.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmort5.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmort5.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx.c b/dll/3rdparty/freetype/src/gxvalid/gxvmorx.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmorx.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx.h b/dll/3rdparty/freetype/src/gxvalid/gxvmorx.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx.h rename to dll/3rdparty/freetype/src/gxvalid/gxvmorx.h diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx0.c b/dll/3rdparty/freetype/src/gxvalid/gxvmorx0.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx0.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmorx0.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx1.c b/dll/3rdparty/freetype/src/gxvalid/gxvmorx1.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx1.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmorx1.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx2.c b/dll/3rdparty/freetype/src/gxvalid/gxvmorx2.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx2.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmorx2.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx4.c b/dll/3rdparty/freetype/src/gxvalid/gxvmorx4.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx4.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmorx4.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx5.c b/dll/3rdparty/freetype/src/gxvalid/gxvmorx5.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvmorx5.c rename to dll/3rdparty/freetype/src/gxvalid/gxvmorx5.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvopbd.c b/dll/3rdparty/freetype/src/gxvalid/gxvopbd.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvopbd.c rename to dll/3rdparty/freetype/src/gxvalid/gxvopbd.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvprop.c b/dll/3rdparty/freetype/src/gxvalid/gxvprop.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvprop.c rename to dll/3rdparty/freetype/src/gxvalid/gxvprop.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/gxvtrak.c b/dll/3rdparty/freetype/src/gxvalid/gxvtrak.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/gxvtrak.c rename to dll/3rdparty/freetype/src/gxvalid/gxvtrak.c diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/module.mk b/dll/3rdparty/freetype/src/gxvalid/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/module.mk rename to dll/3rdparty/freetype/src/gxvalid/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/gxvalid/rules.mk b/dll/3rdparty/freetype/src/gxvalid/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gxvalid/rules.mk rename to dll/3rdparty/freetype/src/gxvalid/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/gzip/Jamfile b/dll/3rdparty/freetype/src/gzip/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/Jamfile rename to dll/3rdparty/freetype/src/gzip/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/gzip/adler32.c b/dll/3rdparty/freetype/src/gzip/adler32.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/adler32.c rename to dll/3rdparty/freetype/src/gzip/adler32.c diff --git a/reactos/dll/3rdparty/freetype/src/gzip/ftgzip.c b/dll/3rdparty/freetype/src/gzip/ftgzip.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/ftgzip.c rename to dll/3rdparty/freetype/src/gzip/ftgzip.c diff --git a/reactos/dll/3rdparty/freetype/src/gzip/infblock.c b/dll/3rdparty/freetype/src/gzip/infblock.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/infblock.c rename to dll/3rdparty/freetype/src/gzip/infblock.c diff --git a/reactos/dll/3rdparty/freetype/src/gzip/infblock.h b/dll/3rdparty/freetype/src/gzip/infblock.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/infblock.h rename to dll/3rdparty/freetype/src/gzip/infblock.h diff --git a/reactos/dll/3rdparty/freetype/src/gzip/infcodes.c b/dll/3rdparty/freetype/src/gzip/infcodes.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/infcodes.c rename to dll/3rdparty/freetype/src/gzip/infcodes.c diff --git a/reactos/dll/3rdparty/freetype/src/gzip/infcodes.h b/dll/3rdparty/freetype/src/gzip/infcodes.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/infcodes.h rename to dll/3rdparty/freetype/src/gzip/infcodes.h diff --git a/reactos/dll/3rdparty/freetype/src/gzip/inffixed.h b/dll/3rdparty/freetype/src/gzip/inffixed.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/inffixed.h rename to dll/3rdparty/freetype/src/gzip/inffixed.h diff --git a/reactos/dll/3rdparty/freetype/src/gzip/inflate.c b/dll/3rdparty/freetype/src/gzip/inflate.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/inflate.c rename to dll/3rdparty/freetype/src/gzip/inflate.c diff --git a/reactos/dll/3rdparty/freetype/src/gzip/inftrees.c b/dll/3rdparty/freetype/src/gzip/inftrees.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/inftrees.c rename to dll/3rdparty/freetype/src/gzip/inftrees.c diff --git a/reactos/dll/3rdparty/freetype/src/gzip/inftrees.h b/dll/3rdparty/freetype/src/gzip/inftrees.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/inftrees.h rename to dll/3rdparty/freetype/src/gzip/inftrees.h diff --git a/reactos/dll/3rdparty/freetype/src/gzip/infutil.c b/dll/3rdparty/freetype/src/gzip/infutil.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/infutil.c rename to dll/3rdparty/freetype/src/gzip/infutil.c diff --git a/reactos/dll/3rdparty/freetype/src/gzip/infutil.h b/dll/3rdparty/freetype/src/gzip/infutil.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/infutil.h rename to dll/3rdparty/freetype/src/gzip/infutil.h diff --git a/reactos/dll/3rdparty/freetype/src/gzip/rules.mk b/dll/3rdparty/freetype/src/gzip/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/rules.mk rename to dll/3rdparty/freetype/src/gzip/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/gzip/zconf.h b/dll/3rdparty/freetype/src/gzip/zconf.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/zconf.h rename to dll/3rdparty/freetype/src/gzip/zconf.h diff --git a/reactos/dll/3rdparty/freetype/src/gzip/zlib.h b/dll/3rdparty/freetype/src/gzip/zlib.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/zlib.h rename to dll/3rdparty/freetype/src/gzip/zlib.h diff --git a/reactos/dll/3rdparty/freetype/src/gzip/zutil.c b/dll/3rdparty/freetype/src/gzip/zutil.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/zutil.c rename to dll/3rdparty/freetype/src/gzip/zutil.c diff --git a/reactos/dll/3rdparty/freetype/src/gzip/zutil.h b/dll/3rdparty/freetype/src/gzip/zutil.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/gzip/zutil.h rename to dll/3rdparty/freetype/src/gzip/zutil.h diff --git a/reactos/dll/3rdparty/freetype/src/lzw/Jamfile b/dll/3rdparty/freetype/src/lzw/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/lzw/Jamfile rename to dll/3rdparty/freetype/src/lzw/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/lzw/ftlzw.c b/dll/3rdparty/freetype/src/lzw/ftlzw.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/lzw/ftlzw.c rename to dll/3rdparty/freetype/src/lzw/ftlzw.c diff --git a/reactos/dll/3rdparty/freetype/src/lzw/ftzopen.c b/dll/3rdparty/freetype/src/lzw/ftzopen.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/lzw/ftzopen.c rename to dll/3rdparty/freetype/src/lzw/ftzopen.c diff --git a/reactos/dll/3rdparty/freetype/src/lzw/ftzopen.h b/dll/3rdparty/freetype/src/lzw/ftzopen.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/lzw/ftzopen.h rename to dll/3rdparty/freetype/src/lzw/ftzopen.h diff --git a/reactos/dll/3rdparty/freetype/src/lzw/rules.mk b/dll/3rdparty/freetype/src/lzw/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/lzw/rules.mk rename to dll/3rdparty/freetype/src/lzw/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/Jamfile b/dll/3rdparty/freetype/src/otvalid/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/Jamfile rename to dll/3rdparty/freetype/src/otvalid/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/module.mk b/dll/3rdparty/freetype/src/otvalid/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/module.mk rename to dll/3rdparty/freetype/src/otvalid/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvalid.c b/dll/3rdparty/freetype/src/otvalid/otvalid.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvalid.c rename to dll/3rdparty/freetype/src/otvalid/otvalid.c diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvalid.h b/dll/3rdparty/freetype/src/otvalid/otvalid.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvalid.h rename to dll/3rdparty/freetype/src/otvalid/otvalid.h diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvbase.c b/dll/3rdparty/freetype/src/otvalid/otvbase.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvbase.c rename to dll/3rdparty/freetype/src/otvalid/otvbase.c diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvcommn.c b/dll/3rdparty/freetype/src/otvalid/otvcommn.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvcommn.c rename to dll/3rdparty/freetype/src/otvalid/otvcommn.c diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvcommn.h b/dll/3rdparty/freetype/src/otvalid/otvcommn.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvcommn.h rename to dll/3rdparty/freetype/src/otvalid/otvcommn.h diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otverror.h b/dll/3rdparty/freetype/src/otvalid/otverror.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otverror.h rename to dll/3rdparty/freetype/src/otvalid/otverror.h diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvgdef.c b/dll/3rdparty/freetype/src/otvalid/otvgdef.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvgdef.c rename to dll/3rdparty/freetype/src/otvalid/otvgdef.c diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvgpos.c b/dll/3rdparty/freetype/src/otvalid/otvgpos.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvgpos.c rename to dll/3rdparty/freetype/src/otvalid/otvgpos.c diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvgpos.h b/dll/3rdparty/freetype/src/otvalid/otvgpos.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvgpos.h rename to dll/3rdparty/freetype/src/otvalid/otvgpos.h diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvgsub.c b/dll/3rdparty/freetype/src/otvalid/otvgsub.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvgsub.c rename to dll/3rdparty/freetype/src/otvalid/otvgsub.c diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvjstf.c b/dll/3rdparty/freetype/src/otvalid/otvjstf.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvjstf.c rename to dll/3rdparty/freetype/src/otvalid/otvjstf.c diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvmod.c b/dll/3rdparty/freetype/src/otvalid/otvmod.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvmod.c rename to dll/3rdparty/freetype/src/otvalid/otvmod.c diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/otvmod.h b/dll/3rdparty/freetype/src/otvalid/otvmod.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/otvmod.h rename to dll/3rdparty/freetype/src/otvalid/otvmod.h diff --git a/reactos/dll/3rdparty/freetype/src/otvalid/rules.mk b/dll/3rdparty/freetype/src/otvalid/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/otvalid/rules.mk rename to dll/3rdparty/freetype/src/otvalid/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/pcf/Jamfile b/dll/3rdparty/freetype/src/pcf/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/Jamfile rename to dll/3rdparty/freetype/src/pcf/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/pcf/README b/dll/3rdparty/freetype/src/pcf/README similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/README rename to dll/3rdparty/freetype/src/pcf/README diff --git a/reactos/dll/3rdparty/freetype/src/pcf/module.mk b/dll/3rdparty/freetype/src/pcf/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/module.mk rename to dll/3rdparty/freetype/src/pcf/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcf.c b/dll/3rdparty/freetype/src/pcf/pcf.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcf.c rename to dll/3rdparty/freetype/src/pcf/pcf.c diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcf.h b/dll/3rdparty/freetype/src/pcf/pcf.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcf.h rename to dll/3rdparty/freetype/src/pcf/pcf.h diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcfdrivr.c b/dll/3rdparty/freetype/src/pcf/pcfdrivr.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcfdrivr.c rename to dll/3rdparty/freetype/src/pcf/pcfdrivr.c diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcfdrivr.h b/dll/3rdparty/freetype/src/pcf/pcfdrivr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcfdrivr.h rename to dll/3rdparty/freetype/src/pcf/pcfdrivr.h diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcferror.h b/dll/3rdparty/freetype/src/pcf/pcferror.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcferror.h rename to dll/3rdparty/freetype/src/pcf/pcferror.h diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcfread.c b/dll/3rdparty/freetype/src/pcf/pcfread.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcfread.c rename to dll/3rdparty/freetype/src/pcf/pcfread.c diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcfread.h b/dll/3rdparty/freetype/src/pcf/pcfread.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcfread.h rename to dll/3rdparty/freetype/src/pcf/pcfread.h diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcfutil.c b/dll/3rdparty/freetype/src/pcf/pcfutil.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcfutil.c rename to dll/3rdparty/freetype/src/pcf/pcfutil.c diff --git a/reactos/dll/3rdparty/freetype/src/pcf/pcfutil.h b/dll/3rdparty/freetype/src/pcf/pcfutil.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/pcfutil.h rename to dll/3rdparty/freetype/src/pcf/pcfutil.h diff --git a/reactos/dll/3rdparty/freetype/src/pcf/rules.mk b/dll/3rdparty/freetype/src/pcf/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pcf/rules.mk rename to dll/3rdparty/freetype/src/pcf/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/pfr/Jamfile b/dll/3rdparty/freetype/src/pfr/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/Jamfile rename to dll/3rdparty/freetype/src/pfr/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/pfr/module.mk b/dll/3rdparty/freetype/src/pfr/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/module.mk rename to dll/3rdparty/freetype/src/pfr/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfr.c b/dll/3rdparty/freetype/src/pfr/pfr.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfr.c rename to dll/3rdparty/freetype/src/pfr/pfr.c diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrcmap.c b/dll/3rdparty/freetype/src/pfr/pfrcmap.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrcmap.c rename to dll/3rdparty/freetype/src/pfr/pfrcmap.c diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrcmap.h b/dll/3rdparty/freetype/src/pfr/pfrcmap.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrcmap.h rename to dll/3rdparty/freetype/src/pfr/pfrcmap.h diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrdrivr.c b/dll/3rdparty/freetype/src/pfr/pfrdrivr.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrdrivr.c rename to dll/3rdparty/freetype/src/pfr/pfrdrivr.c diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrdrivr.h b/dll/3rdparty/freetype/src/pfr/pfrdrivr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrdrivr.h rename to dll/3rdparty/freetype/src/pfr/pfrdrivr.h diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrerror.h b/dll/3rdparty/freetype/src/pfr/pfrerror.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrerror.h rename to dll/3rdparty/freetype/src/pfr/pfrerror.h diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrgload.c b/dll/3rdparty/freetype/src/pfr/pfrgload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrgload.c rename to dll/3rdparty/freetype/src/pfr/pfrgload.c diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrgload.h b/dll/3rdparty/freetype/src/pfr/pfrgload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrgload.h rename to dll/3rdparty/freetype/src/pfr/pfrgload.h diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrload.c b/dll/3rdparty/freetype/src/pfr/pfrload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrload.c rename to dll/3rdparty/freetype/src/pfr/pfrload.c diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrload.h b/dll/3rdparty/freetype/src/pfr/pfrload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrload.h rename to dll/3rdparty/freetype/src/pfr/pfrload.h diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrobjs.c b/dll/3rdparty/freetype/src/pfr/pfrobjs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrobjs.c rename to dll/3rdparty/freetype/src/pfr/pfrobjs.c diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrobjs.h b/dll/3rdparty/freetype/src/pfr/pfrobjs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrobjs.h rename to dll/3rdparty/freetype/src/pfr/pfrobjs.h diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrsbit.c b/dll/3rdparty/freetype/src/pfr/pfrsbit.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrsbit.c rename to dll/3rdparty/freetype/src/pfr/pfrsbit.c diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrsbit.h b/dll/3rdparty/freetype/src/pfr/pfrsbit.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrsbit.h rename to dll/3rdparty/freetype/src/pfr/pfrsbit.h diff --git a/reactos/dll/3rdparty/freetype/src/pfr/pfrtypes.h b/dll/3rdparty/freetype/src/pfr/pfrtypes.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/pfrtypes.h rename to dll/3rdparty/freetype/src/pfr/pfrtypes.h diff --git a/reactos/dll/3rdparty/freetype/src/pfr/rules.mk b/dll/3rdparty/freetype/src/pfr/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pfr/rules.mk rename to dll/3rdparty/freetype/src/pfr/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/psaux/Jamfile b/dll/3rdparty/freetype/src/psaux/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/Jamfile rename to dll/3rdparty/freetype/src/psaux/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/psaux/afmparse.c b/dll/3rdparty/freetype/src/psaux/afmparse.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/afmparse.c rename to dll/3rdparty/freetype/src/psaux/afmparse.c diff --git a/reactos/dll/3rdparty/freetype/src/psaux/afmparse.h b/dll/3rdparty/freetype/src/psaux/afmparse.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/afmparse.h rename to dll/3rdparty/freetype/src/psaux/afmparse.h diff --git a/reactos/dll/3rdparty/freetype/src/psaux/module.mk b/dll/3rdparty/freetype/src/psaux/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/module.mk rename to dll/3rdparty/freetype/src/psaux/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/psaux/psaux.c b/dll/3rdparty/freetype/src/psaux/psaux.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/psaux.c rename to dll/3rdparty/freetype/src/psaux/psaux.c diff --git a/reactos/dll/3rdparty/freetype/src/psaux/psauxerr.h b/dll/3rdparty/freetype/src/psaux/psauxerr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/psauxerr.h rename to dll/3rdparty/freetype/src/psaux/psauxerr.h diff --git a/reactos/dll/3rdparty/freetype/src/psaux/psauxmod.c b/dll/3rdparty/freetype/src/psaux/psauxmod.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/psauxmod.c rename to dll/3rdparty/freetype/src/psaux/psauxmod.c diff --git a/reactos/dll/3rdparty/freetype/src/psaux/psauxmod.h b/dll/3rdparty/freetype/src/psaux/psauxmod.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/psauxmod.h rename to dll/3rdparty/freetype/src/psaux/psauxmod.h diff --git a/reactos/dll/3rdparty/freetype/src/psaux/psconv.c b/dll/3rdparty/freetype/src/psaux/psconv.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/psconv.c rename to dll/3rdparty/freetype/src/psaux/psconv.c diff --git a/reactos/dll/3rdparty/freetype/src/psaux/psconv.h b/dll/3rdparty/freetype/src/psaux/psconv.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/psconv.h rename to dll/3rdparty/freetype/src/psaux/psconv.h diff --git a/reactos/dll/3rdparty/freetype/src/psaux/psobjs.c b/dll/3rdparty/freetype/src/psaux/psobjs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/psobjs.c rename to dll/3rdparty/freetype/src/psaux/psobjs.c diff --git a/reactos/dll/3rdparty/freetype/src/psaux/psobjs.h b/dll/3rdparty/freetype/src/psaux/psobjs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/psobjs.h rename to dll/3rdparty/freetype/src/psaux/psobjs.h diff --git a/reactos/dll/3rdparty/freetype/src/psaux/rules.mk b/dll/3rdparty/freetype/src/psaux/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/rules.mk rename to dll/3rdparty/freetype/src/psaux/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/psaux/t1cmap.c b/dll/3rdparty/freetype/src/psaux/t1cmap.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/t1cmap.c rename to dll/3rdparty/freetype/src/psaux/t1cmap.c diff --git a/reactos/dll/3rdparty/freetype/src/psaux/t1cmap.h b/dll/3rdparty/freetype/src/psaux/t1cmap.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/t1cmap.h rename to dll/3rdparty/freetype/src/psaux/t1cmap.h diff --git a/reactos/dll/3rdparty/freetype/src/psaux/t1decode.c b/dll/3rdparty/freetype/src/psaux/t1decode.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/t1decode.c rename to dll/3rdparty/freetype/src/psaux/t1decode.c diff --git a/reactos/dll/3rdparty/freetype/src/psaux/t1decode.h b/dll/3rdparty/freetype/src/psaux/t1decode.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psaux/t1decode.h rename to dll/3rdparty/freetype/src/psaux/t1decode.h diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/Jamfile b/dll/3rdparty/freetype/src/pshinter/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/Jamfile rename to dll/3rdparty/freetype/src/pshinter/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/module.mk b/dll/3rdparty/freetype/src/pshinter/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/module.mk rename to dll/3rdparty/freetype/src/pshinter/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshalgo.c b/dll/3rdparty/freetype/src/pshinter/pshalgo.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshalgo.c rename to dll/3rdparty/freetype/src/pshinter/pshalgo.c diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshalgo.h b/dll/3rdparty/freetype/src/pshinter/pshalgo.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshalgo.h rename to dll/3rdparty/freetype/src/pshinter/pshalgo.h diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshglob.c b/dll/3rdparty/freetype/src/pshinter/pshglob.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshglob.c rename to dll/3rdparty/freetype/src/pshinter/pshglob.c diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshglob.h b/dll/3rdparty/freetype/src/pshinter/pshglob.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshglob.h rename to dll/3rdparty/freetype/src/pshinter/pshglob.h diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshinter.c b/dll/3rdparty/freetype/src/pshinter/pshinter.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshinter.c rename to dll/3rdparty/freetype/src/pshinter/pshinter.c diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshmod.c b/dll/3rdparty/freetype/src/pshinter/pshmod.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshmod.c rename to dll/3rdparty/freetype/src/pshinter/pshmod.c diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshmod.h b/dll/3rdparty/freetype/src/pshinter/pshmod.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshmod.h rename to dll/3rdparty/freetype/src/pshinter/pshmod.h diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshnterr.h b/dll/3rdparty/freetype/src/pshinter/pshnterr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshnterr.h rename to dll/3rdparty/freetype/src/pshinter/pshnterr.h diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshrec.c b/dll/3rdparty/freetype/src/pshinter/pshrec.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshrec.c rename to dll/3rdparty/freetype/src/pshinter/pshrec.c diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/pshrec.h b/dll/3rdparty/freetype/src/pshinter/pshrec.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/pshrec.h rename to dll/3rdparty/freetype/src/pshinter/pshrec.h diff --git a/reactos/dll/3rdparty/freetype/src/pshinter/rules.mk b/dll/3rdparty/freetype/src/pshinter/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/pshinter/rules.mk rename to dll/3rdparty/freetype/src/pshinter/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/psnames/Jamfile b/dll/3rdparty/freetype/src/psnames/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psnames/Jamfile rename to dll/3rdparty/freetype/src/psnames/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/psnames/module.mk b/dll/3rdparty/freetype/src/psnames/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psnames/module.mk rename to dll/3rdparty/freetype/src/psnames/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/psnames/psmodule.c b/dll/3rdparty/freetype/src/psnames/psmodule.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psnames/psmodule.c rename to dll/3rdparty/freetype/src/psnames/psmodule.c diff --git a/reactos/dll/3rdparty/freetype/src/psnames/psmodule.h b/dll/3rdparty/freetype/src/psnames/psmodule.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psnames/psmodule.h rename to dll/3rdparty/freetype/src/psnames/psmodule.h diff --git a/reactos/dll/3rdparty/freetype/src/psnames/psnamerr.h b/dll/3rdparty/freetype/src/psnames/psnamerr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psnames/psnamerr.h rename to dll/3rdparty/freetype/src/psnames/psnamerr.h diff --git a/reactos/dll/3rdparty/freetype/src/psnames/psnames.c b/dll/3rdparty/freetype/src/psnames/psnames.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psnames/psnames.c rename to dll/3rdparty/freetype/src/psnames/psnames.c diff --git a/reactos/dll/3rdparty/freetype/src/psnames/pstables.h b/dll/3rdparty/freetype/src/psnames/pstables.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psnames/pstables.h rename to dll/3rdparty/freetype/src/psnames/pstables.h diff --git a/reactos/dll/3rdparty/freetype/src/psnames/rules.mk b/dll/3rdparty/freetype/src/psnames/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/psnames/rules.mk rename to dll/3rdparty/freetype/src/psnames/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/raster/Jamfile b/dll/3rdparty/freetype/src/raster/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/Jamfile rename to dll/3rdparty/freetype/src/raster/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/raster/ftmisc.h b/dll/3rdparty/freetype/src/raster/ftmisc.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/ftmisc.h rename to dll/3rdparty/freetype/src/raster/ftmisc.h diff --git a/reactos/dll/3rdparty/freetype/src/raster/ftraster.c b/dll/3rdparty/freetype/src/raster/ftraster.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/ftraster.c rename to dll/3rdparty/freetype/src/raster/ftraster.c diff --git a/reactos/dll/3rdparty/freetype/src/raster/ftraster.h b/dll/3rdparty/freetype/src/raster/ftraster.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/ftraster.h rename to dll/3rdparty/freetype/src/raster/ftraster.h diff --git a/reactos/dll/3rdparty/freetype/src/raster/ftrend1.c b/dll/3rdparty/freetype/src/raster/ftrend1.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/ftrend1.c rename to dll/3rdparty/freetype/src/raster/ftrend1.c diff --git a/reactos/dll/3rdparty/freetype/src/raster/ftrend1.h b/dll/3rdparty/freetype/src/raster/ftrend1.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/ftrend1.h rename to dll/3rdparty/freetype/src/raster/ftrend1.h diff --git a/reactos/dll/3rdparty/freetype/src/raster/module.mk b/dll/3rdparty/freetype/src/raster/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/module.mk rename to dll/3rdparty/freetype/src/raster/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/raster/raster.c b/dll/3rdparty/freetype/src/raster/raster.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/raster.c rename to dll/3rdparty/freetype/src/raster/raster.c diff --git a/reactos/dll/3rdparty/freetype/src/raster/rasterrs.h b/dll/3rdparty/freetype/src/raster/rasterrs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/rasterrs.h rename to dll/3rdparty/freetype/src/raster/rasterrs.h diff --git a/reactos/dll/3rdparty/freetype/src/raster/rules.mk b/dll/3rdparty/freetype/src/raster/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/raster/rules.mk rename to dll/3rdparty/freetype/src/raster/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/Jamfile b/dll/3rdparty/freetype/src/sfnt/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/Jamfile rename to dll/3rdparty/freetype/src/sfnt/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/module.mk b/dll/3rdparty/freetype/src/sfnt/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/module.mk rename to dll/3rdparty/freetype/src/sfnt/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/rules.mk b/dll/3rdparty/freetype/src/sfnt/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/rules.mk rename to dll/3rdparty/freetype/src/sfnt/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/sfdriver.c b/dll/3rdparty/freetype/src/sfnt/sfdriver.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/sfdriver.c rename to dll/3rdparty/freetype/src/sfnt/sfdriver.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/sfdriver.h b/dll/3rdparty/freetype/src/sfnt/sfdriver.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/sfdriver.h rename to dll/3rdparty/freetype/src/sfnt/sfdriver.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/sferrors.h b/dll/3rdparty/freetype/src/sfnt/sferrors.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/sferrors.h rename to dll/3rdparty/freetype/src/sfnt/sferrors.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/sfnt.c b/dll/3rdparty/freetype/src/sfnt/sfnt.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/sfnt.c rename to dll/3rdparty/freetype/src/sfnt/sfnt.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/sfobjs.c b/dll/3rdparty/freetype/src/sfnt/sfobjs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/sfobjs.c rename to dll/3rdparty/freetype/src/sfnt/sfobjs.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/sfobjs.h b/dll/3rdparty/freetype/src/sfnt/sfobjs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/sfobjs.h rename to dll/3rdparty/freetype/src/sfnt/sfobjs.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttbdf.c b/dll/3rdparty/freetype/src/sfnt/ttbdf.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttbdf.c rename to dll/3rdparty/freetype/src/sfnt/ttbdf.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttbdf.h b/dll/3rdparty/freetype/src/sfnt/ttbdf.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttbdf.h rename to dll/3rdparty/freetype/src/sfnt/ttbdf.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttcmap.c b/dll/3rdparty/freetype/src/sfnt/ttcmap.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttcmap.c rename to dll/3rdparty/freetype/src/sfnt/ttcmap.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttcmap.h b/dll/3rdparty/freetype/src/sfnt/ttcmap.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttcmap.h rename to dll/3rdparty/freetype/src/sfnt/ttcmap.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttkern.c b/dll/3rdparty/freetype/src/sfnt/ttkern.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttkern.c rename to dll/3rdparty/freetype/src/sfnt/ttkern.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttkern.h b/dll/3rdparty/freetype/src/sfnt/ttkern.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttkern.h rename to dll/3rdparty/freetype/src/sfnt/ttkern.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttload.c b/dll/3rdparty/freetype/src/sfnt/ttload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttload.c rename to dll/3rdparty/freetype/src/sfnt/ttload.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttload.h b/dll/3rdparty/freetype/src/sfnt/ttload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttload.h rename to dll/3rdparty/freetype/src/sfnt/ttload.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttmtx.c b/dll/3rdparty/freetype/src/sfnt/ttmtx.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttmtx.c rename to dll/3rdparty/freetype/src/sfnt/ttmtx.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttmtx.h b/dll/3rdparty/freetype/src/sfnt/ttmtx.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttmtx.h rename to dll/3rdparty/freetype/src/sfnt/ttmtx.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttpost.c b/dll/3rdparty/freetype/src/sfnt/ttpost.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttpost.c rename to dll/3rdparty/freetype/src/sfnt/ttpost.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttpost.h b/dll/3rdparty/freetype/src/sfnt/ttpost.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttpost.h rename to dll/3rdparty/freetype/src/sfnt/ttpost.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttsbit.c b/dll/3rdparty/freetype/src/sfnt/ttsbit.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttsbit.c rename to dll/3rdparty/freetype/src/sfnt/ttsbit.c diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttsbit.h b/dll/3rdparty/freetype/src/sfnt/ttsbit.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttsbit.h rename to dll/3rdparty/freetype/src/sfnt/ttsbit.h diff --git a/reactos/dll/3rdparty/freetype/src/sfnt/ttsbit0.c b/dll/3rdparty/freetype/src/sfnt/ttsbit0.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/sfnt/ttsbit0.c rename to dll/3rdparty/freetype/src/sfnt/ttsbit0.c diff --git a/reactos/dll/3rdparty/freetype/src/smooth/Jamfile b/dll/3rdparty/freetype/src/smooth/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/Jamfile rename to dll/3rdparty/freetype/src/smooth/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/smooth/ftgrays.c b/dll/3rdparty/freetype/src/smooth/ftgrays.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/ftgrays.c rename to dll/3rdparty/freetype/src/smooth/ftgrays.c diff --git a/reactos/dll/3rdparty/freetype/src/smooth/ftgrays.h b/dll/3rdparty/freetype/src/smooth/ftgrays.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/ftgrays.h rename to dll/3rdparty/freetype/src/smooth/ftgrays.h diff --git a/reactos/dll/3rdparty/freetype/src/smooth/ftsmerrs.h b/dll/3rdparty/freetype/src/smooth/ftsmerrs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/ftsmerrs.h rename to dll/3rdparty/freetype/src/smooth/ftsmerrs.h diff --git a/reactos/dll/3rdparty/freetype/src/smooth/ftsmooth.c b/dll/3rdparty/freetype/src/smooth/ftsmooth.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/ftsmooth.c rename to dll/3rdparty/freetype/src/smooth/ftsmooth.c diff --git a/reactos/dll/3rdparty/freetype/src/smooth/ftsmooth.h b/dll/3rdparty/freetype/src/smooth/ftsmooth.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/ftsmooth.h rename to dll/3rdparty/freetype/src/smooth/ftsmooth.h diff --git a/reactos/dll/3rdparty/freetype/src/smooth/module.mk b/dll/3rdparty/freetype/src/smooth/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/module.mk rename to dll/3rdparty/freetype/src/smooth/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/smooth/rules.mk b/dll/3rdparty/freetype/src/smooth/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/rules.mk rename to dll/3rdparty/freetype/src/smooth/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/smooth/smooth.c b/dll/3rdparty/freetype/src/smooth/smooth.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/smooth/smooth.c rename to dll/3rdparty/freetype/src/smooth/smooth.c diff --git a/reactos/dll/3rdparty/freetype/src/tools/Jamfile b/dll/3rdparty/freetype/src/tools/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/Jamfile rename to dll/3rdparty/freetype/src/tools/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/tools/apinames.c b/dll/3rdparty/freetype/src/tools/apinames.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/apinames.c rename to dll/3rdparty/freetype/src/tools/apinames.c diff --git a/reactos/dll/3rdparty/freetype/src/tools/cordic.py b/dll/3rdparty/freetype/src/tools/cordic.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/cordic.py rename to dll/3rdparty/freetype/src/tools/cordic.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/docmaker/content.py b/dll/3rdparty/freetype/src/tools/docmaker/content.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/docmaker/content.py rename to dll/3rdparty/freetype/src/tools/docmaker/content.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/docmaker/docbeauty.py b/dll/3rdparty/freetype/src/tools/docmaker/docbeauty.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/docmaker/docbeauty.py rename to dll/3rdparty/freetype/src/tools/docmaker/docbeauty.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/docmaker/docmaker.py b/dll/3rdparty/freetype/src/tools/docmaker/docmaker.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/docmaker/docmaker.py rename to dll/3rdparty/freetype/src/tools/docmaker/docmaker.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/docmaker/formatter.py b/dll/3rdparty/freetype/src/tools/docmaker/formatter.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/docmaker/formatter.py rename to dll/3rdparty/freetype/src/tools/docmaker/formatter.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/docmaker/sources.py b/dll/3rdparty/freetype/src/tools/docmaker/sources.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/docmaker/sources.py rename to dll/3rdparty/freetype/src/tools/docmaker/sources.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/docmaker/tohtml.py b/dll/3rdparty/freetype/src/tools/docmaker/tohtml.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/docmaker/tohtml.py rename to dll/3rdparty/freetype/src/tools/docmaker/tohtml.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/docmaker/utils.py b/dll/3rdparty/freetype/src/tools/docmaker/utils.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/docmaker/utils.py rename to dll/3rdparty/freetype/src/tools/docmaker/utils.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/ftrandom/Makefile b/dll/3rdparty/freetype/src/tools/ftrandom/Makefile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/ftrandom/Makefile rename to dll/3rdparty/freetype/src/tools/ftrandom/Makefile diff --git a/reactos/dll/3rdparty/freetype/src/tools/ftrandom/README b/dll/3rdparty/freetype/src/tools/ftrandom/README similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/ftrandom/README rename to dll/3rdparty/freetype/src/tools/ftrandom/README diff --git a/reactos/dll/3rdparty/freetype/src/tools/ftrandom/ftrandom.c b/dll/3rdparty/freetype/src/tools/ftrandom/ftrandom.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/ftrandom/ftrandom.c rename to dll/3rdparty/freetype/src/tools/ftrandom/ftrandom.c diff --git a/reactos/dll/3rdparty/freetype/src/tools/glnames.py b/dll/3rdparty/freetype/src/tools/glnames.py similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/glnames.py rename to dll/3rdparty/freetype/src/tools/glnames.py diff --git a/reactos/dll/3rdparty/freetype/src/tools/test_afm.c b/dll/3rdparty/freetype/src/tools/test_afm.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/test_afm.c rename to dll/3rdparty/freetype/src/tools/test_afm.c diff --git a/reactos/dll/3rdparty/freetype/src/tools/test_bbox.c b/dll/3rdparty/freetype/src/tools/test_bbox.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/test_bbox.c rename to dll/3rdparty/freetype/src/tools/test_bbox.c diff --git a/reactos/dll/3rdparty/freetype/src/tools/test_trig.c b/dll/3rdparty/freetype/src/tools/test_trig.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/tools/test_trig.c rename to dll/3rdparty/freetype/src/tools/test_trig.c diff --git a/reactos/dll/3rdparty/freetype/src/truetype/Jamfile b/dll/3rdparty/freetype/src/truetype/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/Jamfile rename to dll/3rdparty/freetype/src/truetype/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/truetype/module.mk b/dll/3rdparty/freetype/src/truetype/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/module.mk rename to dll/3rdparty/freetype/src/truetype/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/truetype/rules.mk b/dll/3rdparty/freetype/src/truetype/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/rules.mk rename to dll/3rdparty/freetype/src/truetype/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/truetype/truetype.c b/dll/3rdparty/freetype/src/truetype/truetype.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/truetype.c rename to dll/3rdparty/freetype/src/truetype/truetype.c diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttdriver.c b/dll/3rdparty/freetype/src/truetype/ttdriver.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttdriver.c rename to dll/3rdparty/freetype/src/truetype/ttdriver.c diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttdriver.h b/dll/3rdparty/freetype/src/truetype/ttdriver.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttdriver.h rename to dll/3rdparty/freetype/src/truetype/ttdriver.h diff --git a/reactos/dll/3rdparty/freetype/src/truetype/tterrors.h b/dll/3rdparty/freetype/src/truetype/tterrors.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/tterrors.h rename to dll/3rdparty/freetype/src/truetype/tterrors.h diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttgload.c b/dll/3rdparty/freetype/src/truetype/ttgload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttgload.c rename to dll/3rdparty/freetype/src/truetype/ttgload.c diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttgload.c.old b/dll/3rdparty/freetype/src/truetype/ttgload.c.old similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttgload.c.old rename to dll/3rdparty/freetype/src/truetype/ttgload.c.old diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttgload.h b/dll/3rdparty/freetype/src/truetype/ttgload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttgload.h rename to dll/3rdparty/freetype/src/truetype/ttgload.h diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttgxvar.c b/dll/3rdparty/freetype/src/truetype/ttgxvar.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttgxvar.c rename to dll/3rdparty/freetype/src/truetype/ttgxvar.c diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttgxvar.h b/dll/3rdparty/freetype/src/truetype/ttgxvar.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttgxvar.h rename to dll/3rdparty/freetype/src/truetype/ttgxvar.h diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttinterp.c b/dll/3rdparty/freetype/src/truetype/ttinterp.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttinterp.c rename to dll/3rdparty/freetype/src/truetype/ttinterp.c diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttinterp.h b/dll/3rdparty/freetype/src/truetype/ttinterp.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttinterp.h rename to dll/3rdparty/freetype/src/truetype/ttinterp.h diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttobjs.c b/dll/3rdparty/freetype/src/truetype/ttobjs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttobjs.c rename to dll/3rdparty/freetype/src/truetype/ttobjs.c diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttobjs.h b/dll/3rdparty/freetype/src/truetype/ttobjs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttobjs.h rename to dll/3rdparty/freetype/src/truetype/ttobjs.h diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttpload.c b/dll/3rdparty/freetype/src/truetype/ttpload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttpload.c rename to dll/3rdparty/freetype/src/truetype/ttpload.c diff --git a/reactos/dll/3rdparty/freetype/src/truetype/ttpload.h b/dll/3rdparty/freetype/src/truetype/ttpload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/truetype/ttpload.h rename to dll/3rdparty/freetype/src/truetype/ttpload.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/Jamfile b/dll/3rdparty/freetype/src/type1/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/Jamfile rename to dll/3rdparty/freetype/src/type1/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/type1/module.mk b/dll/3rdparty/freetype/src/type1/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/module.mk rename to dll/3rdparty/freetype/src/type1/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/type1/rules.mk b/dll/3rdparty/freetype/src/type1/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/rules.mk rename to dll/3rdparty/freetype/src/type1/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1afm.c b/dll/3rdparty/freetype/src/type1/t1afm.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1afm.c rename to dll/3rdparty/freetype/src/type1/t1afm.c diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1afm.h b/dll/3rdparty/freetype/src/type1/t1afm.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1afm.h rename to dll/3rdparty/freetype/src/type1/t1afm.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1driver.c b/dll/3rdparty/freetype/src/type1/t1driver.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1driver.c rename to dll/3rdparty/freetype/src/type1/t1driver.c diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1driver.h b/dll/3rdparty/freetype/src/type1/t1driver.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1driver.h rename to dll/3rdparty/freetype/src/type1/t1driver.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1errors.h b/dll/3rdparty/freetype/src/type1/t1errors.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1errors.h rename to dll/3rdparty/freetype/src/type1/t1errors.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1gload.c b/dll/3rdparty/freetype/src/type1/t1gload.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1gload.c rename to dll/3rdparty/freetype/src/type1/t1gload.c diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1gload.h b/dll/3rdparty/freetype/src/type1/t1gload.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1gload.h rename to dll/3rdparty/freetype/src/type1/t1gload.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1load.c b/dll/3rdparty/freetype/src/type1/t1load.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1load.c rename to dll/3rdparty/freetype/src/type1/t1load.c diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1load.h b/dll/3rdparty/freetype/src/type1/t1load.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1load.h rename to dll/3rdparty/freetype/src/type1/t1load.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1objs.c b/dll/3rdparty/freetype/src/type1/t1objs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1objs.c rename to dll/3rdparty/freetype/src/type1/t1objs.c diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1objs.h b/dll/3rdparty/freetype/src/type1/t1objs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1objs.h rename to dll/3rdparty/freetype/src/type1/t1objs.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1parse.c b/dll/3rdparty/freetype/src/type1/t1parse.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1parse.c rename to dll/3rdparty/freetype/src/type1/t1parse.c diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1parse.h b/dll/3rdparty/freetype/src/type1/t1parse.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1parse.h rename to dll/3rdparty/freetype/src/type1/t1parse.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/t1tokens.h b/dll/3rdparty/freetype/src/type1/t1tokens.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/t1tokens.h rename to dll/3rdparty/freetype/src/type1/t1tokens.h diff --git a/reactos/dll/3rdparty/freetype/src/type1/type1.c b/dll/3rdparty/freetype/src/type1/type1.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type1/type1.c rename to dll/3rdparty/freetype/src/type1/type1.c diff --git a/reactos/dll/3rdparty/freetype/src/type42/Jamfile b/dll/3rdparty/freetype/src/type42/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/Jamfile rename to dll/3rdparty/freetype/src/type42/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/type42/module.mk b/dll/3rdparty/freetype/src/type42/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/module.mk rename to dll/3rdparty/freetype/src/type42/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/type42/rules.mk b/dll/3rdparty/freetype/src/type42/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/rules.mk rename to dll/3rdparty/freetype/src/type42/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/type42/t42drivr.c b/dll/3rdparty/freetype/src/type42/t42drivr.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/t42drivr.c rename to dll/3rdparty/freetype/src/type42/t42drivr.c diff --git a/reactos/dll/3rdparty/freetype/src/type42/t42drivr.h b/dll/3rdparty/freetype/src/type42/t42drivr.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/t42drivr.h rename to dll/3rdparty/freetype/src/type42/t42drivr.h diff --git a/reactos/dll/3rdparty/freetype/src/type42/t42error.h b/dll/3rdparty/freetype/src/type42/t42error.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/t42error.h rename to dll/3rdparty/freetype/src/type42/t42error.h diff --git a/reactos/dll/3rdparty/freetype/src/type42/t42objs.c b/dll/3rdparty/freetype/src/type42/t42objs.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/t42objs.c rename to dll/3rdparty/freetype/src/type42/t42objs.c diff --git a/reactos/dll/3rdparty/freetype/src/type42/t42objs.h b/dll/3rdparty/freetype/src/type42/t42objs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/t42objs.h rename to dll/3rdparty/freetype/src/type42/t42objs.h diff --git a/reactos/dll/3rdparty/freetype/src/type42/t42parse.c b/dll/3rdparty/freetype/src/type42/t42parse.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/t42parse.c rename to dll/3rdparty/freetype/src/type42/t42parse.c diff --git a/reactos/dll/3rdparty/freetype/src/type42/t42parse.h b/dll/3rdparty/freetype/src/type42/t42parse.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/t42parse.h rename to dll/3rdparty/freetype/src/type42/t42parse.h diff --git a/reactos/dll/3rdparty/freetype/src/type42/t42types.h b/dll/3rdparty/freetype/src/type42/t42types.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/t42types.h rename to dll/3rdparty/freetype/src/type42/t42types.h diff --git a/reactos/dll/3rdparty/freetype/src/type42/type42.c b/dll/3rdparty/freetype/src/type42/type42.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/type42/type42.c rename to dll/3rdparty/freetype/src/type42/type42.c diff --git a/reactos/dll/3rdparty/freetype/src/winfonts/Jamfile b/dll/3rdparty/freetype/src/winfonts/Jamfile similarity index 100% rename from reactos/dll/3rdparty/freetype/src/winfonts/Jamfile rename to dll/3rdparty/freetype/src/winfonts/Jamfile diff --git a/reactos/dll/3rdparty/freetype/src/winfonts/fnterrs.h b/dll/3rdparty/freetype/src/winfonts/fnterrs.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/winfonts/fnterrs.h rename to dll/3rdparty/freetype/src/winfonts/fnterrs.h diff --git a/reactos/dll/3rdparty/freetype/src/winfonts/module.mk b/dll/3rdparty/freetype/src/winfonts/module.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/winfonts/module.mk rename to dll/3rdparty/freetype/src/winfonts/module.mk diff --git a/reactos/dll/3rdparty/freetype/src/winfonts/rules.mk b/dll/3rdparty/freetype/src/winfonts/rules.mk similarity index 100% rename from reactos/dll/3rdparty/freetype/src/winfonts/rules.mk rename to dll/3rdparty/freetype/src/winfonts/rules.mk diff --git a/reactos/dll/3rdparty/freetype/src/winfonts/winfnt.c b/dll/3rdparty/freetype/src/winfonts/winfnt.c similarity index 100% rename from reactos/dll/3rdparty/freetype/src/winfonts/winfnt.c rename to dll/3rdparty/freetype/src/winfonts/winfnt.c diff --git a/reactos/dll/3rdparty/freetype/src/winfonts/winfnt.h b/dll/3rdparty/freetype/src/winfonts/winfnt.h similarity index 100% rename from reactos/dll/3rdparty/freetype/src/winfonts/winfnt.h rename to dll/3rdparty/freetype/src/winfonts/winfnt.h diff --git a/reactos/dll/3rdparty/freetype/version.sed b/dll/3rdparty/freetype/version.sed similarity index 100% rename from reactos/dll/3rdparty/freetype/version.sed rename to dll/3rdparty/freetype/version.sed diff --git a/reactos/dll/3rdparty/mesa32/include/GL/amesa.h b/dll/3rdparty/mesa32/include/GL/amesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/amesa.h rename to dll/3rdparty/mesa32/include/GL/amesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/dmesa.h b/dll/3rdparty/mesa32/include/GL/dmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/dmesa.h rename to dll/3rdparty/mesa32/include/GL/dmesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/fxmesa.h b/dll/3rdparty/mesa32/include/GL/fxmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/fxmesa.h rename to dll/3rdparty/mesa32/include/GL/fxmesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/ggimesa.h b/dll/3rdparty/mesa32/include/GL/ggimesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/ggimesa.h rename to dll/3rdparty/mesa32/include/GL/ggimesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/gl.h b/dll/3rdparty/mesa32/include/GL/gl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/gl.h rename to dll/3rdparty/mesa32/include/GL/gl.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/gl_mangle.h b/dll/3rdparty/mesa32/include/GL/gl_mangle.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/gl_mangle.h rename to dll/3rdparty/mesa32/include/GL/gl_mangle.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/glext.h b/dll/3rdparty/mesa32/include/GL/glext.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/glext.h rename to dll/3rdparty/mesa32/include/GL/glext.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/glfbdev.h b/dll/3rdparty/mesa32/include/GL/glfbdev.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/glfbdev.h rename to dll/3rdparty/mesa32/include/GL/glfbdev.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/glu.h b/dll/3rdparty/mesa32/include/GL/glu.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/glu.h rename to dll/3rdparty/mesa32/include/GL/glu.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/glu_mangle.h b/dll/3rdparty/mesa32/include/GL/glu_mangle.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/glu_mangle.h rename to dll/3rdparty/mesa32/include/GL/glu_mangle.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/glx.h b/dll/3rdparty/mesa32/include/GL/glx.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/glx.h rename to dll/3rdparty/mesa32/include/GL/glx.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/glx_mangle.h b/dll/3rdparty/mesa32/include/GL/glx_mangle.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/glx_mangle.h rename to dll/3rdparty/mesa32/include/GL/glx_mangle.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/glxext.h b/dll/3rdparty/mesa32/include/GL/glxext.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/glxext.h rename to dll/3rdparty/mesa32/include/GL/glxext.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/internal/dri_interface.h b/dll/3rdparty/mesa32/include/GL/internal/dri_interface.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/internal/dri_interface.h rename to dll/3rdparty/mesa32/include/GL/internal/dri_interface.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/internal/dri_sarea.h b/dll/3rdparty/mesa32/include/GL/internal/dri_sarea.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/internal/dri_sarea.h rename to dll/3rdparty/mesa32/include/GL/internal/dri_sarea.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/internal/glcore.h b/dll/3rdparty/mesa32/include/GL/internal/glcore.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/internal/glcore.h rename to dll/3rdparty/mesa32/include/GL/internal/glcore.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/internal/sarea.h b/dll/3rdparty/mesa32/include/GL/internal/sarea.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/internal/sarea.h rename to dll/3rdparty/mesa32/include/GL/internal/sarea.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/mesa_wgl.h b/dll/3rdparty/mesa32/include/GL/mesa_wgl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/mesa_wgl.h rename to dll/3rdparty/mesa32/include/GL/mesa_wgl.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/mglmesa.h b/dll/3rdparty/mesa32/include/GL/mglmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/mglmesa.h rename to dll/3rdparty/mesa32/include/GL/mglmesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/osmesa.h b/dll/3rdparty/mesa32/include/GL/osmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/osmesa.h rename to dll/3rdparty/mesa32/include/GL/osmesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/svgamesa.h b/dll/3rdparty/mesa32/include/GL/svgamesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/svgamesa.h rename to dll/3rdparty/mesa32/include/GL/svgamesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/uglglutshapes.h b/dll/3rdparty/mesa32/include/GL/uglglutshapes.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/uglglutshapes.h rename to dll/3rdparty/mesa32/include/GL/uglglutshapes.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/uglmesa.h b/dll/3rdparty/mesa32/include/GL/uglmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/uglmesa.h rename to dll/3rdparty/mesa32/include/GL/uglmesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/vms_x_fix.h b/dll/3rdparty/mesa32/include/GL/vms_x_fix.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/vms_x_fix.h rename to dll/3rdparty/mesa32/include/GL/vms_x_fix.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/wmesa.h b/dll/3rdparty/mesa32/include/GL/wmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/wmesa.h rename to dll/3rdparty/mesa32/include/GL/wmesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/xmesa.h b/dll/3rdparty/mesa32/include/GL/xmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/xmesa.h rename to dll/3rdparty/mesa32/include/GL/xmesa.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/xmesa_x.h b/dll/3rdparty/mesa32/include/GL/xmesa_x.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/xmesa_x.h rename to dll/3rdparty/mesa32/include/GL/xmesa_x.h diff --git a/reactos/dll/3rdparty/mesa32/include/GL/xmesa_xf86.h b/dll/3rdparty/mesa32/include/GL/xmesa_xf86.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GL/xmesa_xf86.h rename to dll/3rdparty/mesa32/include/GL/xmesa_xf86.h diff --git a/reactos/dll/3rdparty/mesa32/include/GLView.h b/dll/3rdparty/mesa32/include/GLView.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/include/GLView.h rename to dll/3rdparty/mesa32/include/GLView.h diff --git a/reactos/dll/3rdparty/mesa32/mesa32.rbuild b/dll/3rdparty/mesa32/mesa32.rbuild similarity index 100% rename from reactos/dll/3rdparty/mesa32/mesa32.rbuild rename to dll/3rdparty/mesa32/mesa32.rbuild diff --git a/reactos/dll/3rdparty/mesa32/mesa3d_icd_fix_ros.patch b/dll/3rdparty/mesa32/mesa3d_icd_fix_ros.patch similarity index 100% rename from reactos/dll/3rdparty/mesa32/mesa3d_icd_fix_ros.patch rename to dll/3rdparty/mesa32/mesa3d_icd_fix_ros.patch diff --git a/reactos/dll/3rdparty/mesa32/src/Makefile b/dll/3rdparty/mesa32/src/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/Makefile rename to dll/3rdparty/mesa32/src/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/Makefile.DJ b/dll/3rdparty/mesa32/src/Makefile.DJ similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/Makefile.DJ rename to dll/3rdparty/mesa32/src/Makefile.DJ diff --git a/reactos/dll/3rdparty/mesa32/src/Makefile.mgw b/dll/3rdparty/mesa32/src/Makefile.mgw similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/Makefile.mgw rename to dll/3rdparty/mesa32/src/Makefile.mgw diff --git a/reactos/dll/3rdparty/mesa32/src/depend b/dll/3rdparty/mesa32/src/depend similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/depend rename to dll/3rdparty/mesa32/src/depend diff --git a/reactos/dll/3rdparty/mesa32/src/descrip.mms b/dll/3rdparty/mesa32/src/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/descrip.mms rename to dll/3rdparty/mesa32/src/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/beos/GLView.cpp b/dll/3rdparty/mesa32/src/drivers/beos/GLView.cpp similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/beos/GLView.cpp rename to dll/3rdparty/mesa32/src/drivers/beos/GLView.cpp diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/beos/Makefile b/dll/3rdparty/mesa32/src/drivers/beos/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/beos/Makefile rename to dll/3rdparty/mesa32/src/drivers/beos/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/common/descrip.mms b/dll/3rdparty/mesa32/src/drivers/common/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/common/descrip.mms rename to dll/3rdparty/mesa32/src/drivers/common/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/common/driverfuncs.c b/dll/3rdparty/mesa32/src/drivers/common/driverfuncs.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/common/driverfuncs.c rename to dll/3rdparty/mesa32/src/drivers/common/driverfuncs.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/common/driverfuncs.h b/dll/3rdparty/mesa32/src/drivers/common/driverfuncs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/common/driverfuncs.h rename to dll/3rdparty/mesa32/src/drivers/common/driverfuncs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/common/sources b/dll/3rdparty/mesa32/src/drivers/common/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/common/sources rename to dll/3rdparty/mesa32/src/drivers/common/sources diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/directfb/Makefile b/dll/3rdparty/mesa32/src/drivers/directfb/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/directfb/Makefile rename to dll/3rdparty/mesa32/src/drivers/directfb/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/directfb/idirectfbgl_mesa.c b/dll/3rdparty/mesa32/src/drivers/directfb/idirectfbgl_mesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/directfb/idirectfbgl_mesa.c rename to dll/3rdparty/mesa32/src/drivers/directfb/idirectfbgl_mesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/blit.S b/dll/3rdparty/mesa32/src/drivers/dos/blit.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/blit.S rename to dll/3rdparty/mesa32/src/drivers/dos/blit.S diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/dmesa.c b/dll/3rdparty/mesa32/src/drivers/dos/dmesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/dmesa.c rename to dll/3rdparty/mesa32/src/drivers/dos/dmesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/dpmi.c b/dll/3rdparty/mesa32/src/drivers/dos/dpmi.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/dpmi.c rename to dll/3rdparty/mesa32/src/drivers/dos/dpmi.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/internal.h b/dll/3rdparty/mesa32/src/drivers/dos/internal.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/internal.h rename to dll/3rdparty/mesa32/src/drivers/dos/internal.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/null.c b/dll/3rdparty/mesa32/src/drivers/dos/null.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/null.c rename to dll/3rdparty/mesa32/src/drivers/dos/null.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/null.h b/dll/3rdparty/mesa32/src/drivers/dos/null.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/null.h rename to dll/3rdparty/mesa32/src/drivers/dos/null.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/vesa.c b/dll/3rdparty/mesa32/src/drivers/dos/vesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/vesa.c rename to dll/3rdparty/mesa32/src/drivers/dos/vesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/vesa.h b/dll/3rdparty/mesa32/src/drivers/dos/vesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/vesa.h rename to dll/3rdparty/mesa32/src/drivers/dos/vesa.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/vga.c b/dll/3rdparty/mesa32/src/drivers/dos/vga.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/vga.c rename to dll/3rdparty/mesa32/src/drivers/dos/vga.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/vga.h b/dll/3rdparty/mesa32/src/drivers/dos/vga.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/vga.h rename to dll/3rdparty/mesa32/src/drivers/dos/vga.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/video.c b/dll/3rdparty/mesa32/src/drivers/dos/video.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/video.c rename to dll/3rdparty/mesa32/src/drivers/dos/video.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dos/video.h b/dll/3rdparty/mesa32/src/drivers/dos/video.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dos/video.h rename to dll/3rdparty/mesa32/src/drivers/dos/video.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/Makefile.template b/dll/3rdparty/mesa32/src/drivers/dri/Makefile.template similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/Makefile.template rename to dll/3rdparty/mesa32/src/drivers/dri/Makefile.template diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/depthtmp.h b/dll/3rdparty/mesa32/src/drivers/dri/common/depthtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/depthtmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/depthtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.c b/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.c rename to dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.h b/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufmgr.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufpool.h b/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufpool.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufpool.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/dri_bufpool.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_drmpool.c b/dll/3rdparty/mesa32/src/drivers/dri/common/dri_drmpool.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_drmpool.c rename to dll/3rdparty/mesa32/src/drivers/dri/common/dri_drmpool.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_util.c b/dll/3rdparty/mesa32/src/drivers/dri/common/dri_util.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_util.c rename to dll/3rdparty/mesa32/src/drivers/dri/common/dri_util.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_util.h b/dll/3rdparty/mesa32/src/drivers/dri/common/dri_util.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/dri_util.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/dri_util.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.c b/dll/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.c rename to dll/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.h b/dll/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/drirenderbuffer.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/extension_helper.h b/dll/3rdparty/mesa32/src/drivers/dri/common/extension_helper.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/extension_helper.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/extension_helper.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/memops.h b/dll/3rdparty/mesa32/src/drivers/dri/common/memops.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/memops.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/memops.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/mmio.h b/dll/3rdparty/mesa32/src/drivers/dri/common/mmio.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/mmio.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/mmio.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/mmx.h b/dll/3rdparty/mesa32/src/drivers/dri/common/mmx.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/mmx.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/mmx.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp.h b/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/spantmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp2.h b/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp2.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp2.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/spantmp2.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp_common.h b/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp_common.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/spantmp_common.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/spantmp_common.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/stenciltmp.h b/dll/3rdparty/mesa32/src/drivers/dri/common/stenciltmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/stenciltmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/stenciltmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/common/texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/common/texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/texmem.h b/dll/3rdparty/mesa32/src/drivers/dri/common/texmem.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/texmem.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/texmem.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/utils.c b/dll/3rdparty/mesa32/src/drivers/dri/common/utils.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/utils.c rename to dll/3rdparty/mesa32/src/drivers/dri/common/utils.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/utils.h b/dll/3rdparty/mesa32/src/drivers/dri/common/utils.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/utils.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/utils.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/vblank.c b/dll/3rdparty/mesa32/src/drivers/dri/common/vblank.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/vblank.c rename to dll/3rdparty/mesa32/src/drivers/dri/common/vblank.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/vblank.h b/dll/3rdparty/mesa32/src/drivers/dri/common/vblank.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/vblank.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/vblank.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.c b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.c rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.h b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlconfig.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool.h b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/de.po b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/de.po similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/de.po rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/de.po diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/es.po b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/es.po similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/es.po rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/es.po diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/fr.po b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/fr.po similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/fr.po rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/fr.po diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/nl.po b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/nl.po similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/nl.po rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/nl.po diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/options.h b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/options.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/options.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/options.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/sv.po b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/sv.po similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/sv.po rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/sv.po diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/t_options.h b/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/t_options.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/t_options.h rename to dll/3rdparty/mesa32/src/drivers/dri/common/xmlpool/t_options.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/fb/Doxyfile b/dll/3rdparty/mesa32/src/drivers/dri/fb/Doxyfile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/fb/Doxyfile rename to dll/3rdparty/mesa32/src/drivers/dri/fb/Doxyfile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/fb/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/fb/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/fb/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/fb/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/fb/fb_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/fb/fb_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/fb/fb_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/fb/fb_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/fb/fb_egl.c b/dll/3rdparty/mesa32/src/drivers/dri/fb/fb_egl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/fb/fb_egl.c rename to dll/3rdparty/mesa32/src/drivers/dri/fb/fb_egl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/ffb/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_bitmap.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_clear.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_context.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_dd.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_depth.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fifo.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fifo.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fifo.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fifo.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fog.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fog.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_fog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lines.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_linetmp.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_linetmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_linetmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_linetmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_points.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_pointtmp.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_pointtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_pointtmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_pointtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_rendertmp.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_rendertmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_rendertmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_rendertmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_stencil.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tritmp.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tritmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tritmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_tritmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vb.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vbtmp.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vbtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vbtmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vbtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_vtxfmt.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.c b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.c rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/ffb_xmesa.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_dac.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_dac.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_dac.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_dac.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_drishare.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_drishare.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_drishare.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_drishare.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_regs.h b/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_regs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_regs.h rename to dll/3rdparty/mesa32/src/drivers/dri/ffb/server/ffb_regs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/gamma/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_client.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_client.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_client.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_client.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_dd.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_dd.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_inithw.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_inithw.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_inithw.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_inithw.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_macros.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_macros.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_regs.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_regs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_regs.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_regs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_render.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_render.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_render.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_span.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_state.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tritmp.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tritmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tritmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_tritmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_vb.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_xmesa.c b/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_xmesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_xmesa.c rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/gamma_xmesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_common.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_common.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_common.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_common.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/gamma/server/glint_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/glcore/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/glcore/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/glcore/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/glcore/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/glcore/glcore_driver.c b/dll/3rdparty/mesa32/src/drivers/dri/glcore/glcore_driver.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/glcore/glcore_driver.c rename to dll/3rdparty/mesa32/src/drivers/dri/glcore/glcore_driver.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/i810/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/i810/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810_3d_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810_3d_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810_3d_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810_3d_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810context.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810context.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810render.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810render.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810render.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810screen.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810screen.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810span.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810span.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810span.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810span.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810state.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810state.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810state.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tex.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tris.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tris.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810vb.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810vb.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810vb.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/i810vb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/i810vb.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/i810vb.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_common.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_common.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_common.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_common.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i810/server/i810_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/i915/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/i915/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_context.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_context.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_metaops.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_metaops.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_metaops.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_metaops.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_texblend.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_texblend.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_texblend.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_texblend.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_vtbl.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_vtbl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i830_vtbl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i830_vtbl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_context.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_context.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_debug.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_debug.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_debug.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_debug.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_fragprog.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_fragprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_fragprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_fragprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_metaops.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_metaops.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_metaops.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_metaops.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_program.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_program.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_program.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_program.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_program.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_program.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_program.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_program.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_texprog.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_texprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_texprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_texprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_vtbl.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_vtbl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/i915_vtbl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/i915_vtbl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_batchbuffer.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_context.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_context.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_pixel.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_pixel.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_pixel.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_pixel.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_render.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_render.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_render.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_rotate.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_span.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_span.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/intel_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/server/i830_common.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/server/i830_common.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/server/i830_common.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/server/i830_common.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/server/i830_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/server/i830_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/server/i830_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/server/i830_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/server/intel.h b/dll/3rdparty/mesa32/src/drivers/dri/i915/server/intel.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/server/intel.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915/server/intel.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/server/intel_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/i915/server/intel_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915/server/intel_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915/server/intel_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_metaops.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_metaops.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_metaops.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_metaops.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texblend.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texblend.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texblend.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texblend.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_vtbl.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_vtbl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_vtbl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i830_vtbl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_debug.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_debug.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_debug.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_debug.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_fragprog.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_fragprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_fragprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_fragprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_metaops.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_metaops.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_metaops.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_metaops.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_program.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex_layout.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex_layout.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex_layout.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_tex_layout.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_vtbl.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_vtbl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_vtbl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/i915_vtbl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchbuffer.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchpool.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchpool.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchpool.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_batchpool.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_blit.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffer_objects.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_buffers.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_depthstencil.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_fbo.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_mipmap_tree.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_bitmap.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_bitmap.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_bitmap.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_bitmap.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_copy.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_copy.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_copy.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_copy.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_draw.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_draw.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_draw.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_draw.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_read.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_read.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_read.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_pixel_read.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_regions.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_render.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_render.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_render.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_rotate.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_structs.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_structs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_structs.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_structs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_copy.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_copy.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_copy.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_copy.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_format.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_format.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_format.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_format.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_image.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_image.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_image.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_image.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_layout.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_layout.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_layout.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_layout.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_subimage.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_subimage.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_subimage.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_subimage.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_validate.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_validate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_validate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tex_validate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/intel_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_common.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_common.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_common.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_common.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/i830_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel.h b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel.h rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/i915tex/server/intel_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/i965/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/i965/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub_playback.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub_playback.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub_playback.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_aub_playback.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_cc.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_cc.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_cc.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_cc.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_line.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_line.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_line.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_line.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_point.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_point.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_point.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_point.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_tri.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_tri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_tri.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_tri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_unfilled.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_unfilled.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_unfilled.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_unfilled.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_util.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_util.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_util.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_clip_util.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_context.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_context.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_curbe.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_curbe.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_curbe.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_curbe.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_defines.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_defines.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_defines.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_defines.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw_upload.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw_upload.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw_upload.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_draw_upload.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_debug.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_debug.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_debug.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_debug.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_emit.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_emit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_emit.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_emit.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_util.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_util.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_util.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_eu_util.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_exec_generic.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_exec_generic.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_exec_generic.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_exec_generic.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_fallback.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_emit.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_emit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_emit.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_emit.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_gs_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_hal.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_metaops.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_metaops.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_metaops.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_metaops.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_misc_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_misc_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_misc_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_misc_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_program.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_program.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_program.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_program.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_emit.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_emit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_emit.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_emit.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_sf_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_batch.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_batch.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_batch.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_batch.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_cache.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_cache.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_cache.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_cache.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_pool.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_pool.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_pool.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_pool.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_upload.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_upload.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_upload.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_state_upload.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_structs.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_structs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_structs.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_structs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_tex_layout.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_tex_layout.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_tex_layout.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_tex_layout.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_urb.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_urb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_urb.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_urb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_util.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_util.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_util.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_util.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_util.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_util.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_util.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_util.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_constval.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_constval.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_constval.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_constval.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_emit.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_emit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_emit.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_emit.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_tnl.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_tnl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_tnl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vs_tnl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vtbl.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vtbl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vtbl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_vtbl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_debug.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_debug.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_debug.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_debug.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_emit.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_emit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_emit.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_emit.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_fp.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_fp.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_fp.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_fp.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_iz.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_iz.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_iz.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_iz.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass0.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass0.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass0.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass0.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass1.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass1.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass1.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass1.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass2.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass2.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass2.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_pass2.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_sampler_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_sampler_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_sampler_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_sampler_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_surface_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_surface_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_surface_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/brw_wm_surface_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/bufmgr.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/bufmgr.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/bufmgr.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/bufmgr.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/bufmgr_fake.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/bufmgr_fake.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/bufmgr_fake.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/bufmgr_fake.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_batchbuffer.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_blit.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffer_objects.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffers.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffers.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffers.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_buffers.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_context.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_context.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_mipmap_tree.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_bitmap.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_bitmap.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_bitmap.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_bitmap.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_copy.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_copy.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_copy.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_pixel_copy.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_regions.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_span.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_span.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_state.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_structs.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_structs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_structs.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_structs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_layout.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_layout.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_layout.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_layout.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_validate.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_validate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_validate.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/intel_tex_validate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/server/i830_common.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/server/i830_common.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/server/i830_common.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/server/i830_common.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/server/i830_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/server/i830_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/server/i830_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/server/i830_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/server/intel.h b/dll/3rdparty/mesa32/src/drivers/dri/i965/server/intel.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/server/intel.h rename to dll/3rdparty/mesa32/src/drivers/dri/i965/server/intel.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/server/intel_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/i965/server/intel_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/i965/server/intel_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/i965/server/intel_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.c b/dll/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.c rename to dll/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.h b/dll/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.h rename to dll/3rdparty/mesa32/src/drivers/dri/intel/intel_tex_layout.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/mach64/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_dd.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vb.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vb.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vbtmp.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vbtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vbtmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_native_vbtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.c b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.c rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vb.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vbtmp.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vbtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vbtmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/mach64_vbtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/server/mach64_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/mach64/server/mach64_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mach64/server/mach64_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/mach64/server/mach64_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/Doxyfile b/dll/3rdparty/mesa32/src/drivers/dri/mga/Doxyfile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/Doxyfile rename to dll/3rdparty/mesa32/src/drivers/dri/mga/Doxyfile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/mga/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/mga/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_texcombine.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_texcombine.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_texcombine.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mga_texcombine.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mga_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mga_xmesa.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgacontext.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgacontext.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgacontext.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgacontext.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgadd.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgadd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgadd.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgadd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgadd.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgadd.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgadd.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgadd.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgaioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgapixel.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaregs.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaregs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaregs.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgaregs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgarender.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgarender.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgarender.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgarender.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgaspan.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgastate.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgastate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgastate.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgastate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgastate.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgastate.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgastate.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgastate.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatex.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatex.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgatex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatex.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatex.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgatex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatexmem.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatexmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatexmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgatexmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatris.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatris.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgatris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatris.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgatris.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgatris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgavb.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgavb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgavb.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgavb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgavb.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/mgavb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/mgavb.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/mgavb.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_bios.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_bios.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_bios.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_bios.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_macros.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_macros.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/mga/server/mga_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_bufferobj.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_buffers.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card_list.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card_list.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card_list.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_card_list.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_ctrlreg.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_ctrlreg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_ctrlreg.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_ctrlreg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_driver.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_fifo.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_msg.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_msg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_msg.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_msg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_object.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_query.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_0.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_0.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_0.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_0.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_1.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_1.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_1.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_1.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_2.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_2.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_2.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_shader_2.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_state_cache.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_swtcl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_sync.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nouveau_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_state.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv04_swtcl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_state.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv10_swtcl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_shader.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_shader.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_shader.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_shader.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_state.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_vertprog.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_vertprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_vertprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv20_vertprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_fragprog.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_fragprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_fragprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_fragprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_shader.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_shader.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_shader.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_shader.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_state.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_vertprog.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_vertprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_vertprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv30_vertprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_fragprog.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_fragprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_fragprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_fragprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_shader.h b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_shader.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_shader.h rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_shader.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_vertprog.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_vertprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_vertprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv40_vertprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv50_state.c b/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv50_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv50_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/nouveau/nv50_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/r128/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/r128/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_context.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_context.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_dd.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_span.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_span.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_state.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_state.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texobj.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texobj.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texobj.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texobj.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/r128_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/pci_ids.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/server/pci_ids.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/pci_ids.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/server/pci_ids.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_macros.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_macros.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_version.h b/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_version.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_version.h rename to dll/3rdparty/mesa32/src/drivers/dri/r128/server/r128_version.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/Doxyfile b/dll/3rdparty/mesa32/src/drivers/dri/r200/Doxyfile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/Doxyfile rename to dll/3rdparty/mesa32/src/drivers/dri/r200/Doxyfile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/r200/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/r200/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_cmdbuf.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_cmdbuf.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_cmdbuf.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_cmdbuf.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_context.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_context.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_fragshader.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_fragshader.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_fragshader.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_fragshader.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos_arrays.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos_arrays.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos_arrays.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_maos_arrays.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_pixel.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_sanity.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_span.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_span.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state_init.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state_init.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state_init.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_state_init.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_swtcl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tcl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/r200_vertprog.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_chipset.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_chipset.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_chipset.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_chipset.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/radeon_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_egl.c b/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_egl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_egl.c rename to dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_egl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_macros.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_macros.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/r200/server/radeon_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/r300/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/r300/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_cmdbuf.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_context.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_context.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_emit.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_fragprog.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_mem.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_program.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_program.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_program.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_program.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_render.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_render.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_render.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_shader.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_shader.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_shader.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_shader.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_state.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_state.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/r300_vertprog.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_chipset.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_chipset.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_chipset.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_chipset.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/radeon_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_egl.c b/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_egl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_egl.c rename to dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_egl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_macros.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_macros.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/r300/server/radeon_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/radeon/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_chipset.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_chipset.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_chipset.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_chipset.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_compat.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_compat.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_compat.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_compat.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lighting.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lighting.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lighting.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lighting.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_arrays.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_arrays.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_arrays.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_arrays.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_vbtmp.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_vbtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_vbtmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_vbtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_verts.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_verts.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_verts.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_maos_verts.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_sanity.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state_init.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state_init.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state_init.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_state_init.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_swtcl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tcl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/radeon_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_egl.c b/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_egl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_egl.c rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_egl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_macros.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_macros.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/radeon/server/radeon_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/s3v/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_common.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_common.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_common.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_common.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dd.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dd.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_inithw.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_inithw.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_inithw.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_inithw.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_macros.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_macros.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_regs.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_regs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_regs.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_regs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_render.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_render.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_render.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_span.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_state.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texmem.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texmem.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tritmp.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tritmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tritmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_tritmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_vb.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_xmesa.c b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_xmesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_xmesa.c rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3v_xmesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3virgetri.h b/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3virgetri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/s3v/s3virgetri.h rename to dll/3rdparty/mesa32/src/drivers/dri/s3v/s3virgetri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/savage/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/savage/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_3d_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_3d_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_3d_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savage_3d_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_bci.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_bci.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_bci.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savage_bci.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_init.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_init.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_init.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savage_init.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_xmesa.c b/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_xmesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savage_xmesa.c rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savage_xmesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagecontext.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagecontext.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagecontext.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagecontext.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagedd.c b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagedd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagedd.c rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagedd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagedd.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagedd.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagedd.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagedd.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savageioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagerender.c b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagerender.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagerender.c rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagerender.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagespan.c b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagespan.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagespan.c rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagespan.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagespan.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagespan.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagespan.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagespan.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagestate.c b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagestate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagestate.c rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagestate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagestate.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagestate.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagestate.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagestate.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetex.c b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetex.c rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagetex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetex.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetex.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagetex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetris.c b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetris.c rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagetris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetris.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/savagetris.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/savagetris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/server/savage_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/savage/server/savage_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/savage/server/savage_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/savage/server/savage_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/sis/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/sis/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/server/sis_common.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/server/sis_common.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/server/sis_common.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/server/sis_common.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/server/sis_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/server/sis_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/server/sis_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/server/sis_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_clear.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_clear.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_clear.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_clear.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_state.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis6326_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_alloc.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_clear.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_clear.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_clear.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_clear.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_context.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_context.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_dd.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_fog.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_fog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_fog.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_fog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_span.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_span.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_state.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_state.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_stencil.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tritmp.h b/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tritmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tritmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/sis/sis_tritmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/dri_glide.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/dri_glide.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/dri_glide.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/dri_glide.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/server/tdfx_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_dd.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_glide.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_glide.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_glide.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_glide.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_pixels.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_render.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texman.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_texstate.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.c b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.c rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vb.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vbtmp.h b/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vbtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vbtmp.h rename to dll/3rdparty/mesa32/src/drivers/dri/tdfx/tdfx_vbtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/trident/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/trident/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_context.c b/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/trident/trident_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_context.h b/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/trident/trident_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_dd.c b/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_dd.c rename to dll/3rdparty/mesa32/src/drivers/dri/trident/trident_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/trident/trident_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_lock.h b/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_lock.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_lock.h rename to dll/3rdparty/mesa32/src/drivers/dri/trident/trident_lock.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_state.c b/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/trident/trident_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/trident/trident_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_vb.c b/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/trident/trident_vb.c rename to dll/3rdparty/mesa32/src/drivers/dri/trident/trident_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/Makefile b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/Makefile rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_dri.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_driver.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_driver.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_driver.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_driver.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_priv.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_priv.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_priv.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_priv.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_regs.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_regs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_regs.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/server/via_regs.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_3d_reg.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_3d_reg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_3d_reg.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_3d_reg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_drmclient.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_drmclient.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_drmclient.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_drmclient.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_fb.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_ioctl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_memcpy.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_memcpy.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_memcpy.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_memcpy.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_render.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_render.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_render.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_screen.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_state.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tex.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_texcombine.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_texcombine.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_texcombine.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_texcombine.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.c b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.c rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.h b/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.h rename to dll/3rdparty/mesa32/src/drivers/dri/unichrome/via_tris.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/fbdev/glfbdev.c b/dll/3rdparty/mesa32/src/drivers/fbdev/glfbdev.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/fbdev/glfbdev.c rename to dll/3rdparty/mesa32/src/drivers/fbdev/glfbdev.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi.conf.in b/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi.conf.in similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi.conf.in rename to dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi.conf.in diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi_mode.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi_mode.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi_mode.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi_mode.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi_visual.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi_visual.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi_visual.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/genkgi_visual.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/linear.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/linear.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_15.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_15.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_15.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/linear_15.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_16.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_16.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_16.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/linear_16.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_24.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_24.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_24.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/linear_24.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_32.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_32.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_32.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/linear_32.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_8.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_8.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/linear_8.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/linear_8.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/stubs.c b/dll/3rdparty/mesa32/src/drivers/ggi/default/stubs.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/default/stubs.c rename to dll/3rdparty/mesa32/src/drivers/ggi/default/stubs.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev.conf.in b/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev.conf.in similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev.conf.in rename to dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev.conf.in diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev_mode.c b/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev_mode.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev_mode.c rename to dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev_mode.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev_visual.c b/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev_visual.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev_visual.c rename to dll/3rdparty/mesa32/src/drivers/ggi/display/fbdev_visual.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/ggimesa.c b/dll/3rdparty/mesa32/src/drivers/ggi/ggimesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/ggimesa.c rename to dll/3rdparty/mesa32/src/drivers/ggi/ggimesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/ggimesa.conf.in b/dll/3rdparty/mesa32/src/drivers/ggi/ggimesa.conf.in similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/ggimesa.conf.in rename to dll/3rdparty/mesa32/src/drivers/ggi/ggimesa.conf.in diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/debug.h b/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/debug.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/debug.h rename to dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/debug.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/display_fbdev.h b/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/display_fbdev.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/display_fbdev.h rename to dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/display_fbdev.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa.h b/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa.h rename to dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa_int.h b/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa_int.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa_int.h rename to dll/3rdparty/mesa32/src/drivers/ggi/include/ggi/mesa/ggimesa_int.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxapi.c b/dll/3rdparty/mesa32/src/drivers/glide/fxapi.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxapi.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxapi.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxdd.c b/dll/3rdparty/mesa32/src/drivers/glide/fxdd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxdd.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxdd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxddspan.c b/dll/3rdparty/mesa32/src/drivers/glide/fxddspan.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxddspan.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxddspan.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxddtex.c b/dll/3rdparty/mesa32/src/drivers/glide/fxddtex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxddtex.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxddtex.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxdrv.h b/dll/3rdparty/mesa32/src/drivers/glide/fxdrv.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxdrv.h rename to dll/3rdparty/mesa32/src/drivers/glide/fxdrv.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxg.c b/dll/3rdparty/mesa32/src/drivers/glide/fxg.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxg.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxg.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxg.h b/dll/3rdparty/mesa32/src/drivers/glide/fxg.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxg.h rename to dll/3rdparty/mesa32/src/drivers/glide/fxg.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxglidew.c b/dll/3rdparty/mesa32/src/drivers/glide/fxglidew.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxglidew.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxglidew.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxglidew.h b/dll/3rdparty/mesa32/src/drivers/glide/fxglidew.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxglidew.h rename to dll/3rdparty/mesa32/src/drivers/glide/fxglidew.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxsetup.c b/dll/3rdparty/mesa32/src/drivers/glide/fxsetup.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxsetup.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxsetup.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxsetup.h b/dll/3rdparty/mesa32/src/drivers/glide/fxsetup.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxsetup.h rename to dll/3rdparty/mesa32/src/drivers/glide/fxsetup.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxtexman.c b/dll/3rdparty/mesa32/src/drivers/glide/fxtexman.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxtexman.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxtexman.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxtris.c b/dll/3rdparty/mesa32/src/drivers/glide/fxtris.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxtris.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxtris.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxvb.c b/dll/3rdparty/mesa32/src/drivers/glide/fxvb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxvb.c rename to dll/3rdparty/mesa32/src/drivers/glide/fxvb.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/glide/fxvbtmp.h b/dll/3rdparty/mesa32/src/drivers/glide/fxvbtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/glide/fxvbtmp.h rename to dll/3rdparty/mesa32/src/drivers/glide/fxvbtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/osmesa/Makefile.win b/dll/3rdparty/mesa32/src/drivers/osmesa/Makefile.win similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/osmesa/Makefile.win rename to dll/3rdparty/mesa32/src/drivers/osmesa/Makefile.win diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/osmesa/descrip.mms b/dll/3rdparty/mesa32/src/drivers/osmesa/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/osmesa/descrip.mms rename to dll/3rdparty/mesa32/src/drivers/osmesa/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/osmesa/osmesa.c b/dll/3rdparty/mesa32/src/drivers/osmesa/osmesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/osmesa/osmesa.c rename to dll/3rdparty/mesa32/src/drivers/osmesa/osmesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/osmesa/osmesa.def b/dll/3rdparty/mesa32/src/drivers/osmesa/osmesa.def similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/osmesa/osmesa.def rename to dll/3rdparty/mesa32/src/drivers/osmesa/osmesa.def diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa.c b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa.c rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa15.c b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa15.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa15.c rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa15.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa15.h b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa15.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa15.h rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa15.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa16.c b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa16.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa16.c rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa16.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa16.h b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa16.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa16.h rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa16.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa24.c b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa24.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa24.c rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa24.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa24.h b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa24.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa24.h rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa24.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa32.c b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa32.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa32.c rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa32.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa32.h b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa32.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa32.h rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa32.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa8.c b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa8.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa8.c rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa8.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa8.h b/dll/3rdparty/mesa32/src/drivers/svga/svgamesa8.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgamesa8.h rename to dll/3rdparty/mesa32/src/drivers/svga/svgamesa8.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/svga/svgapix.h b/dll/3rdparty/mesa32/src/drivers/svga/svgapix.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/svga/svgapix.h rename to dll/3rdparty/mesa32/src/drivers/svga/svgapix.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/fx/fxopengl.def b/dll/3rdparty/mesa32/src/drivers/windows/fx/fxopengl.def similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/fx/fxopengl.def rename to dll/3rdparty/mesa32/src/drivers/windows/fx/fxopengl.def diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/fx/fxwgl.c b/dll/3rdparty/mesa32/src/drivers/windows/fx/fxwgl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/fx/fxwgl.c rename to dll/3rdparty/mesa32/src/drivers/windows/fx/fxwgl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/colors.h b/dll/3rdparty/mesa32/src/drivers/windows/gdi/colors.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/colors.h rename to dll/3rdparty/mesa32/src/drivers/windows/gdi/colors.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/mesa.def b/dll/3rdparty/mesa32/src/drivers/windows/gdi/mesa.def similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/mesa.def rename to dll/3rdparty/mesa32/src/drivers/windows/gdi/mesa.def diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/wgl.c b/dll/3rdparty/mesa32/src/drivers/windows/gdi/wgl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/wgl.c rename to dll/3rdparty/mesa32/src/drivers/windows/gdi/wgl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/wmesa.c b/dll/3rdparty/mesa32/src/drivers/windows/gdi/wmesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/wmesa.c rename to dll/3rdparty/mesa32/src/drivers/windows/gdi/wmesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/wmesadef.h b/dll/3rdparty/mesa32/src/drivers/windows/gdi/wmesadef.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gdi/wmesadef.h rename to dll/3rdparty/mesa32/src/drivers/windows/gdi/wmesadef.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/ddlog.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglcontext.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglglobals.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglmacros.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglmacros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglmacros.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglmacros.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglpf.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dglwgl.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dll_main.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dll_main.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dll_main.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dll_main.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dllmain.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dllmain.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/dllmain.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/dllmain.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_clip.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_clip.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_clip.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_clip.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_norm.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_norm.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_norm.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_norm.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_xform.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_xform.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_xform.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_debug_xform.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_dispatch.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_dispatch.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_dispatch.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_dispatch.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/gld_driver.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gldlame8.c b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gldlame8.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/gldlame8.c rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/gldlame8.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/opengl32.def b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/opengl32.def similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/opengl32.def rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/opengl32.def diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/pixpack.h b/dll/3rdparty/mesa32/src/drivers/windows/gldirect/pixpack.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/gldirect/pixpack.h rename to dll/3rdparty/mesa32/src/drivers/windows/gldirect/pixpack.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/icd/icd.c b/dll/3rdparty/mesa32/src/drivers/windows/icd/icd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/icd/icd.c rename to dll/3rdparty/mesa32/src/drivers/windows/icd/icd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/icd/icdlist.h b/dll/3rdparty/mesa32/src/drivers/windows/icd/icdlist.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/icd/icdlist.h rename to dll/3rdparty/mesa32/src/drivers/windows/icd/icdlist.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/windows/icd/mesa.def b/dll/3rdparty/mesa32/src/drivers/windows/icd/mesa.def similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/windows/icd/mesa.def rename to dll/3rdparty/mesa32/src/drivers/windows/icd/mesa.def diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/descrip.mms b/dll/3rdparty/mesa32/src/drivers/x11/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/descrip.mms rename to dll/3rdparty/mesa32/src/drivers/x11/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/fakeglx.c b/dll/3rdparty/mesa32/src/drivers/x11/fakeglx.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/fakeglx.c rename to dll/3rdparty/mesa32/src/drivers/x11/fakeglx.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/glxapi.c b/dll/3rdparty/mesa32/src/drivers/x11/glxapi.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/glxapi.c rename to dll/3rdparty/mesa32/src/drivers/x11/glxapi.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/glxapi.h b/dll/3rdparty/mesa32/src/drivers/x11/glxapi.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/glxapi.h rename to dll/3rdparty/mesa32/src/drivers/x11/glxapi.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/glxheader.h b/dll/3rdparty/mesa32/src/drivers/x11/glxheader.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/glxheader.h rename to dll/3rdparty/mesa32/src/drivers/x11/glxheader.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/realglx.c b/dll/3rdparty/mesa32/src/drivers/x11/realglx.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/realglx.c rename to dll/3rdparty/mesa32/src/drivers/x11/realglx.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/realglx.h b/dll/3rdparty/mesa32/src/drivers/x11/realglx.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/realglx.h rename to dll/3rdparty/mesa32/src/drivers/x11/realglx.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/sources b/dll/3rdparty/mesa32/src/drivers/x11/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/sources rename to dll/3rdparty/mesa32/src/drivers/x11/sources diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xfonts.c b/dll/3rdparty/mesa32/src/drivers/x11/xfonts.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xfonts.c rename to dll/3rdparty/mesa32/src/drivers/x11/xfonts.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xfonts.h b/dll/3rdparty/mesa32/src/drivers/x11/xfonts.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xfonts.h rename to dll/3rdparty/mesa32/src/drivers/x11/xfonts.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_api.c b/dll/3rdparty/mesa32/src/drivers/x11/xm_api.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_api.c rename to dll/3rdparty/mesa32/src/drivers/x11/xm_api.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_buffer.c b/dll/3rdparty/mesa32/src/drivers/x11/xm_buffer.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_buffer.c rename to dll/3rdparty/mesa32/src/drivers/x11/xm_buffer.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_dd.c b/dll/3rdparty/mesa32/src/drivers/x11/xm_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_dd.c rename to dll/3rdparty/mesa32/src/drivers/x11/xm_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_glide.c b/dll/3rdparty/mesa32/src/drivers/x11/xm_glide.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_glide.c rename to dll/3rdparty/mesa32/src/drivers/x11/xm_glide.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_glide.h b/dll/3rdparty/mesa32/src/drivers/x11/xm_glide.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_glide.h rename to dll/3rdparty/mesa32/src/drivers/x11/xm_glide.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_image.c b/dll/3rdparty/mesa32/src/drivers/x11/xm_image.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_image.c rename to dll/3rdparty/mesa32/src/drivers/x11/xm_image.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_image.h b/dll/3rdparty/mesa32/src/drivers/x11/xm_image.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_image.h rename to dll/3rdparty/mesa32/src/drivers/x11/xm_image.h diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_line.c b/dll/3rdparty/mesa32/src/drivers/x11/xm_line.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_line.c rename to dll/3rdparty/mesa32/src/drivers/x11/xm_line.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_span.c b/dll/3rdparty/mesa32/src/drivers/x11/xm_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_span.c rename to dll/3rdparty/mesa32/src/drivers/x11/xm_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_tri.c b/dll/3rdparty/mesa32/src/drivers/x11/xm_tri.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xm_tri.c rename to dll/3rdparty/mesa32/src/drivers/x11/xm_tri.c diff --git a/reactos/dll/3rdparty/mesa32/src/drivers/x11/xmesaP.h b/dll/3rdparty/mesa32/src/drivers/x11/xmesaP.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/drivers/x11/xmesaP.h rename to dll/3rdparty/mesa32/src/drivers/x11/xmesaP.h diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/descrip.mms b/dll/3rdparty/mesa32/src/glapi/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/descrip.mms rename to dll/3rdparty/mesa32/src/glapi/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/dispatch.h b/dll/3rdparty/mesa32/src/glapi/dispatch.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/dispatch.h rename to dll/3rdparty/mesa32/src/glapi/dispatch.h diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/glapi.c b/dll/3rdparty/mesa32/src/glapi/glapi.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/glapi.c rename to dll/3rdparty/mesa32/src/glapi/glapi.c diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/glapi.h b/dll/3rdparty/mesa32/src/glapi/glapi.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/glapi.h rename to dll/3rdparty/mesa32/src/glapi/glapi.h diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/glapioffsets.h b/dll/3rdparty/mesa32/src/glapi/glapioffsets.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/glapioffsets.h rename to dll/3rdparty/mesa32/src/glapi/glapioffsets.h diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/glapitable.h b/dll/3rdparty/mesa32/src/glapi/glapitable.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/glapitable.h rename to dll/3rdparty/mesa32/src/glapi/glapitable.h diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/glapitemp.h b/dll/3rdparty/mesa32/src/glapi/glapitemp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/glapitemp.h rename to dll/3rdparty/mesa32/src/glapi/glapitemp.h diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/glprocs.h b/dll/3rdparty/mesa32/src/glapi/glprocs.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/glprocs.h rename to dll/3rdparty/mesa32/src/glapi/glprocs.h diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/glthread.c b/dll/3rdparty/mesa32/src/glapi/glthread.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/glthread.c rename to dll/3rdparty/mesa32/src/glapi/glthread.c diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/glthread.h b/dll/3rdparty/mesa32/src/glapi/glthread.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/glthread.h rename to dll/3rdparty/mesa32/src/glapi/glthread.h diff --git a/reactos/dll/3rdparty/mesa32/src/glapi/sources b/dll/3rdparty/mesa32/src/glapi/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/glapi/sources rename to dll/3rdparty/mesa32/src/glapi/sources diff --git a/reactos/dll/3rdparty/mesa32/src/main/accum.c b/dll/3rdparty/mesa32/src/main/accum.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/accum.c rename to dll/3rdparty/mesa32/src/main/accum.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/accum.h b/dll/3rdparty/mesa32/src/main/accum.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/accum.h rename to dll/3rdparty/mesa32/src/main/accum.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_arrayelt.c b/dll/3rdparty/mesa32/src/main/api_arrayelt.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_arrayelt.c rename to dll/3rdparty/mesa32/src/main/api_arrayelt.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_arrayelt.h b/dll/3rdparty/mesa32/src/main/api_arrayelt.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_arrayelt.h rename to dll/3rdparty/mesa32/src/main/api_arrayelt.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_eval.h b/dll/3rdparty/mesa32/src/main/api_eval.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_eval.h rename to dll/3rdparty/mesa32/src/main/api_eval.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_loopback.c b/dll/3rdparty/mesa32/src/main/api_loopback.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_loopback.c rename to dll/3rdparty/mesa32/src/main/api_loopback.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_loopback.h b/dll/3rdparty/mesa32/src/main/api_loopback.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_loopback.h rename to dll/3rdparty/mesa32/src/main/api_loopback.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_noop.c b/dll/3rdparty/mesa32/src/main/api_noop.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_noop.c rename to dll/3rdparty/mesa32/src/main/api_noop.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_noop.h b/dll/3rdparty/mesa32/src/main/api_noop.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_noop.h rename to dll/3rdparty/mesa32/src/main/api_noop.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_validate.c b/dll/3rdparty/mesa32/src/main/api_validate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_validate.c rename to dll/3rdparty/mesa32/src/main/api_validate.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/api_validate.h b/dll/3rdparty/mesa32/src/main/api_validate.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/api_validate.h rename to dll/3rdparty/mesa32/src/main/api_validate.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/arrayobj.c b/dll/3rdparty/mesa32/src/main/arrayobj.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/arrayobj.c rename to dll/3rdparty/mesa32/src/main/arrayobj.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/arrayobj.h b/dll/3rdparty/mesa32/src/main/arrayobj.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/arrayobj.h rename to dll/3rdparty/mesa32/src/main/arrayobj.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/attrib.c b/dll/3rdparty/mesa32/src/main/attrib.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/attrib.c rename to dll/3rdparty/mesa32/src/main/attrib.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/attrib.h b/dll/3rdparty/mesa32/src/main/attrib.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/attrib.h rename to dll/3rdparty/mesa32/src/main/attrib.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/bitset.h b/dll/3rdparty/mesa32/src/main/bitset.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/bitset.h rename to dll/3rdparty/mesa32/src/main/bitset.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/blend.c b/dll/3rdparty/mesa32/src/main/blend.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/blend.c rename to dll/3rdparty/mesa32/src/main/blend.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/blend.h b/dll/3rdparty/mesa32/src/main/blend.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/blend.h rename to dll/3rdparty/mesa32/src/main/blend.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/bufferobj.c b/dll/3rdparty/mesa32/src/main/bufferobj.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/bufferobj.c rename to dll/3rdparty/mesa32/src/main/bufferobj.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/bufferobj.h b/dll/3rdparty/mesa32/src/main/bufferobj.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/bufferobj.h rename to dll/3rdparty/mesa32/src/main/bufferobj.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/buffers.c b/dll/3rdparty/mesa32/src/main/buffers.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/buffers.c rename to dll/3rdparty/mesa32/src/main/buffers.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/buffers.h b/dll/3rdparty/mesa32/src/main/buffers.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/buffers.h rename to dll/3rdparty/mesa32/src/main/buffers.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/clip.c b/dll/3rdparty/mesa32/src/main/clip.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/clip.c rename to dll/3rdparty/mesa32/src/main/clip.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/clip.h b/dll/3rdparty/mesa32/src/main/clip.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/clip.h rename to dll/3rdparty/mesa32/src/main/clip.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/colormac.h b/dll/3rdparty/mesa32/src/main/colormac.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/colormac.h rename to dll/3rdparty/mesa32/src/main/colormac.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/colortab.c b/dll/3rdparty/mesa32/src/main/colortab.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/colortab.c rename to dll/3rdparty/mesa32/src/main/colortab.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/colortab.h b/dll/3rdparty/mesa32/src/main/colortab.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/colortab.h rename to dll/3rdparty/mesa32/src/main/colortab.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/config.h b/dll/3rdparty/mesa32/src/main/config.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/config.h rename to dll/3rdparty/mesa32/src/main/config.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/context.c b/dll/3rdparty/mesa32/src/main/context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/context.c rename to dll/3rdparty/mesa32/src/main/context.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/context.h b/dll/3rdparty/mesa32/src/main/context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/context.h rename to dll/3rdparty/mesa32/src/main/context.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/convolve.c b/dll/3rdparty/mesa32/src/main/convolve.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/convolve.c rename to dll/3rdparty/mesa32/src/main/convolve.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/convolve.h b/dll/3rdparty/mesa32/src/main/convolve.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/convolve.h rename to dll/3rdparty/mesa32/src/main/convolve.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/dd.h b/dll/3rdparty/mesa32/src/main/dd.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/dd.h rename to dll/3rdparty/mesa32/src/main/dd.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/debug.c b/dll/3rdparty/mesa32/src/main/debug.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/debug.c rename to dll/3rdparty/mesa32/src/main/debug.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/debug.h b/dll/3rdparty/mesa32/src/main/debug.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/debug.h rename to dll/3rdparty/mesa32/src/main/debug.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/depth.c b/dll/3rdparty/mesa32/src/main/depth.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/depth.c rename to dll/3rdparty/mesa32/src/main/depth.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/depth.h b/dll/3rdparty/mesa32/src/main/depth.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/depth.h rename to dll/3rdparty/mesa32/src/main/depth.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/depthstencil.c b/dll/3rdparty/mesa32/src/main/depthstencil.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/depthstencil.c rename to dll/3rdparty/mesa32/src/main/depthstencil.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/depthstencil.h b/dll/3rdparty/mesa32/src/main/depthstencil.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/depthstencil.h rename to dll/3rdparty/mesa32/src/main/depthstencil.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/descrip.mms b/dll/3rdparty/mesa32/src/main/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/descrip.mms rename to dll/3rdparty/mesa32/src/main/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/main/dispatch.c b/dll/3rdparty/mesa32/src/main/dispatch.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/dispatch.c rename to dll/3rdparty/mesa32/src/main/dispatch.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/dlist.c b/dll/3rdparty/mesa32/src/main/dlist.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/dlist.c rename to dll/3rdparty/mesa32/src/main/dlist.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/dlist.h b/dll/3rdparty/mesa32/src/main/dlist.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/dlist.h rename to dll/3rdparty/mesa32/src/main/dlist.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/drawpix.c b/dll/3rdparty/mesa32/src/main/drawpix.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/drawpix.c rename to dll/3rdparty/mesa32/src/main/drawpix.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/drawpix.h b/dll/3rdparty/mesa32/src/main/drawpix.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/drawpix.h rename to dll/3rdparty/mesa32/src/main/drawpix.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/enable.c b/dll/3rdparty/mesa32/src/main/enable.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/enable.c rename to dll/3rdparty/mesa32/src/main/enable.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/enable.h b/dll/3rdparty/mesa32/src/main/enable.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/enable.h rename to dll/3rdparty/mesa32/src/main/enable.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/enums.c b/dll/3rdparty/mesa32/src/main/enums.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/enums.c rename to dll/3rdparty/mesa32/src/main/enums.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/enums.h b/dll/3rdparty/mesa32/src/main/enums.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/enums.h rename to dll/3rdparty/mesa32/src/main/enums.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/eval.c b/dll/3rdparty/mesa32/src/main/eval.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/eval.c rename to dll/3rdparty/mesa32/src/main/eval.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/eval.h b/dll/3rdparty/mesa32/src/main/eval.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/eval.h rename to dll/3rdparty/mesa32/src/main/eval.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/execmem.c b/dll/3rdparty/mesa32/src/main/execmem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/execmem.c rename to dll/3rdparty/mesa32/src/main/execmem.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/extensions.c b/dll/3rdparty/mesa32/src/main/extensions.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/extensions.c rename to dll/3rdparty/mesa32/src/main/extensions.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/extensions.h b/dll/3rdparty/mesa32/src/main/extensions.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/extensions.h rename to dll/3rdparty/mesa32/src/main/extensions.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/fbobject.c b/dll/3rdparty/mesa32/src/main/fbobject.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/fbobject.c rename to dll/3rdparty/mesa32/src/main/fbobject.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/fbobject.h b/dll/3rdparty/mesa32/src/main/fbobject.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/fbobject.h rename to dll/3rdparty/mesa32/src/main/fbobject.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/feedback.c b/dll/3rdparty/mesa32/src/main/feedback.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/feedback.c rename to dll/3rdparty/mesa32/src/main/feedback.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/feedback.h b/dll/3rdparty/mesa32/src/main/feedback.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/feedback.h rename to dll/3rdparty/mesa32/src/main/feedback.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/fog.c b/dll/3rdparty/mesa32/src/main/fog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/fog.c rename to dll/3rdparty/mesa32/src/main/fog.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/fog.h b/dll/3rdparty/mesa32/src/main/fog.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/fog.h rename to dll/3rdparty/mesa32/src/main/fog.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/framebuffer.c b/dll/3rdparty/mesa32/src/main/framebuffer.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/framebuffer.c rename to dll/3rdparty/mesa32/src/main/framebuffer.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/framebuffer.h b/dll/3rdparty/mesa32/src/main/framebuffer.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/framebuffer.h rename to dll/3rdparty/mesa32/src/main/framebuffer.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/get.c b/dll/3rdparty/mesa32/src/main/get.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/get.c rename to dll/3rdparty/mesa32/src/main/get.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/get.h b/dll/3rdparty/mesa32/src/main/get.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/get.h rename to dll/3rdparty/mesa32/src/main/get.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/getstring.c b/dll/3rdparty/mesa32/src/main/getstring.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/getstring.c rename to dll/3rdparty/mesa32/src/main/getstring.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/glheader.h b/dll/3rdparty/mesa32/src/main/glheader.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/glheader.h rename to dll/3rdparty/mesa32/src/main/glheader.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/hash.c b/dll/3rdparty/mesa32/src/main/hash.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/hash.c rename to dll/3rdparty/mesa32/src/main/hash.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/hash.h b/dll/3rdparty/mesa32/src/main/hash.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/hash.h rename to dll/3rdparty/mesa32/src/main/hash.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/hint.c b/dll/3rdparty/mesa32/src/main/hint.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/hint.c rename to dll/3rdparty/mesa32/src/main/hint.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/hint.h b/dll/3rdparty/mesa32/src/main/hint.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/hint.h rename to dll/3rdparty/mesa32/src/main/hint.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/histogram.c b/dll/3rdparty/mesa32/src/main/histogram.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/histogram.c rename to dll/3rdparty/mesa32/src/main/histogram.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/histogram.h b/dll/3rdparty/mesa32/src/main/histogram.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/histogram.h rename to dll/3rdparty/mesa32/src/main/histogram.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/image.c b/dll/3rdparty/mesa32/src/main/image.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/image.c rename to dll/3rdparty/mesa32/src/main/image.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/image.h b/dll/3rdparty/mesa32/src/main/image.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/image.h rename to dll/3rdparty/mesa32/src/main/image.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/imports.c b/dll/3rdparty/mesa32/src/main/imports.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/imports.c rename to dll/3rdparty/mesa32/src/main/imports.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/imports.h b/dll/3rdparty/mesa32/src/main/imports.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/imports.h rename to dll/3rdparty/mesa32/src/main/imports.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/light.c b/dll/3rdparty/mesa32/src/main/light.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/light.c rename to dll/3rdparty/mesa32/src/main/light.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/light.h b/dll/3rdparty/mesa32/src/main/light.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/light.h rename to dll/3rdparty/mesa32/src/main/light.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/lines.c b/dll/3rdparty/mesa32/src/main/lines.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/lines.c rename to dll/3rdparty/mesa32/src/main/lines.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/lines.h b/dll/3rdparty/mesa32/src/main/lines.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/lines.h rename to dll/3rdparty/mesa32/src/main/lines.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/macros.h b/dll/3rdparty/mesa32/src/main/macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/macros.h rename to dll/3rdparty/mesa32/src/main/macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/matrix.c b/dll/3rdparty/mesa32/src/main/matrix.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/matrix.c rename to dll/3rdparty/mesa32/src/main/matrix.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/matrix.h b/dll/3rdparty/mesa32/src/main/matrix.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/matrix.h rename to dll/3rdparty/mesa32/src/main/matrix.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/mipmap.c b/dll/3rdparty/mesa32/src/main/mipmap.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/mipmap.c rename to dll/3rdparty/mesa32/src/main/mipmap.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/mipmap.h b/dll/3rdparty/mesa32/src/main/mipmap.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/mipmap.h rename to dll/3rdparty/mesa32/src/main/mipmap.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/mm.c b/dll/3rdparty/mesa32/src/main/mm.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/mm.c rename to dll/3rdparty/mesa32/src/main/mm.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/mm.h b/dll/3rdparty/mesa32/src/main/mm.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/mm.h rename to dll/3rdparty/mesa32/src/main/mm.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/mtypes.h b/dll/3rdparty/mesa32/src/main/mtypes.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/mtypes.h rename to dll/3rdparty/mesa32/src/main/mtypes.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/pixel.c b/dll/3rdparty/mesa32/src/main/pixel.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/pixel.c rename to dll/3rdparty/mesa32/src/main/pixel.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/pixel.h b/dll/3rdparty/mesa32/src/main/pixel.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/pixel.h rename to dll/3rdparty/mesa32/src/main/pixel.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/points.c b/dll/3rdparty/mesa32/src/main/points.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/points.c rename to dll/3rdparty/mesa32/src/main/points.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/points.h b/dll/3rdparty/mesa32/src/main/points.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/points.h rename to dll/3rdparty/mesa32/src/main/points.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/polygon.c b/dll/3rdparty/mesa32/src/main/polygon.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/polygon.c rename to dll/3rdparty/mesa32/src/main/polygon.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/polygon.h b/dll/3rdparty/mesa32/src/main/polygon.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/polygon.h rename to dll/3rdparty/mesa32/src/main/polygon.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/queryobj.c b/dll/3rdparty/mesa32/src/main/queryobj.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/queryobj.c rename to dll/3rdparty/mesa32/src/main/queryobj.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/queryobj.h b/dll/3rdparty/mesa32/src/main/queryobj.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/queryobj.h rename to dll/3rdparty/mesa32/src/main/queryobj.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/rastpos.c b/dll/3rdparty/mesa32/src/main/rastpos.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/rastpos.c rename to dll/3rdparty/mesa32/src/main/rastpos.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/rastpos.h b/dll/3rdparty/mesa32/src/main/rastpos.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/rastpos.h rename to dll/3rdparty/mesa32/src/main/rastpos.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/rbadaptors.c b/dll/3rdparty/mesa32/src/main/rbadaptors.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/rbadaptors.c rename to dll/3rdparty/mesa32/src/main/rbadaptors.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/rbadaptors.h b/dll/3rdparty/mesa32/src/main/rbadaptors.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/rbadaptors.h rename to dll/3rdparty/mesa32/src/main/rbadaptors.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/renderbuffer.c b/dll/3rdparty/mesa32/src/main/renderbuffer.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/renderbuffer.c rename to dll/3rdparty/mesa32/src/main/renderbuffer.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/renderbuffer.h b/dll/3rdparty/mesa32/src/main/renderbuffer.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/renderbuffer.h rename to dll/3rdparty/mesa32/src/main/renderbuffer.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/shaders.c b/dll/3rdparty/mesa32/src/main/shaders.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/shaders.c rename to dll/3rdparty/mesa32/src/main/shaders.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/shaders.h b/dll/3rdparty/mesa32/src/main/shaders.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/shaders.h rename to dll/3rdparty/mesa32/src/main/shaders.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/simple_list.h b/dll/3rdparty/mesa32/src/main/simple_list.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/simple_list.h rename to dll/3rdparty/mesa32/src/main/simple_list.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/sources b/dll/3rdparty/mesa32/src/main/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/sources rename to dll/3rdparty/mesa32/src/main/sources diff --git a/reactos/dll/3rdparty/mesa32/src/main/state.c b/dll/3rdparty/mesa32/src/main/state.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/state.c rename to dll/3rdparty/mesa32/src/main/state.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/state.h b/dll/3rdparty/mesa32/src/main/state.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/state.h rename to dll/3rdparty/mesa32/src/main/state.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/stencil.c b/dll/3rdparty/mesa32/src/main/stencil.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/stencil.c rename to dll/3rdparty/mesa32/src/main/stencil.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/stencil.h b/dll/3rdparty/mesa32/src/main/stencil.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/stencil.h rename to dll/3rdparty/mesa32/src/main/stencil.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/texcompress.c b/dll/3rdparty/mesa32/src/main/texcompress.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texcompress.c rename to dll/3rdparty/mesa32/src/main/texcompress.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texcompress.h b/dll/3rdparty/mesa32/src/main/texcompress.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texcompress.h rename to dll/3rdparty/mesa32/src/main/texcompress.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/texcompress_fxt1.c b/dll/3rdparty/mesa32/src/main/texcompress_fxt1.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texcompress_fxt1.c rename to dll/3rdparty/mesa32/src/main/texcompress_fxt1.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texcompress_s3tc.c b/dll/3rdparty/mesa32/src/main/texcompress_s3tc.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texcompress_s3tc.c rename to dll/3rdparty/mesa32/src/main/texcompress_s3tc.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texenvprogram.c b/dll/3rdparty/mesa32/src/main/texenvprogram.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texenvprogram.c rename to dll/3rdparty/mesa32/src/main/texenvprogram.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texenvprogram.h b/dll/3rdparty/mesa32/src/main/texenvprogram.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texenvprogram.h rename to dll/3rdparty/mesa32/src/main/texenvprogram.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/texformat.c b/dll/3rdparty/mesa32/src/main/texformat.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texformat.c rename to dll/3rdparty/mesa32/src/main/texformat.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texformat.h b/dll/3rdparty/mesa32/src/main/texformat.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texformat.h rename to dll/3rdparty/mesa32/src/main/texformat.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/texformat_tmp.h b/dll/3rdparty/mesa32/src/main/texformat_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texformat_tmp.h rename to dll/3rdparty/mesa32/src/main/texformat_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/teximage.c b/dll/3rdparty/mesa32/src/main/teximage.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/teximage.c rename to dll/3rdparty/mesa32/src/main/teximage.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/teximage.h b/dll/3rdparty/mesa32/src/main/teximage.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/teximage.h rename to dll/3rdparty/mesa32/src/main/teximage.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/texobj.c b/dll/3rdparty/mesa32/src/main/texobj.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texobj.c rename to dll/3rdparty/mesa32/src/main/texobj.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texobj.h b/dll/3rdparty/mesa32/src/main/texobj.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texobj.h rename to dll/3rdparty/mesa32/src/main/texobj.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/texrender.c b/dll/3rdparty/mesa32/src/main/texrender.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texrender.c rename to dll/3rdparty/mesa32/src/main/texrender.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texrender.h b/dll/3rdparty/mesa32/src/main/texrender.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texrender.h rename to dll/3rdparty/mesa32/src/main/texrender.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/texstate.c b/dll/3rdparty/mesa32/src/main/texstate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texstate.c rename to dll/3rdparty/mesa32/src/main/texstate.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texstate.h b/dll/3rdparty/mesa32/src/main/texstate.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texstate.h rename to dll/3rdparty/mesa32/src/main/texstate.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/texstore.c b/dll/3rdparty/mesa32/src/main/texstore.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texstore.c rename to dll/3rdparty/mesa32/src/main/texstore.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/texstore.h b/dll/3rdparty/mesa32/src/main/texstore.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/texstore.h rename to dll/3rdparty/mesa32/src/main/texstore.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/varray.c b/dll/3rdparty/mesa32/src/main/varray.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/varray.c rename to dll/3rdparty/mesa32/src/main/varray.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/varray.h b/dll/3rdparty/mesa32/src/main/varray.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/varray.h rename to dll/3rdparty/mesa32/src/main/varray.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/version.h b/dll/3rdparty/mesa32/src/main/version.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/version.h rename to dll/3rdparty/mesa32/src/main/version.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/vsnprintf.c b/dll/3rdparty/mesa32/src/main/vsnprintf.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/vsnprintf.c rename to dll/3rdparty/mesa32/src/main/vsnprintf.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/vtxfmt.c b/dll/3rdparty/mesa32/src/main/vtxfmt.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/vtxfmt.c rename to dll/3rdparty/mesa32/src/main/vtxfmt.c diff --git a/reactos/dll/3rdparty/mesa32/src/main/vtxfmt.h b/dll/3rdparty/mesa32/src/main/vtxfmt.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/vtxfmt.h rename to dll/3rdparty/mesa32/src/main/vtxfmt.h diff --git a/reactos/dll/3rdparty/mesa32/src/main/vtxfmt_tmp.h b/dll/3rdparty/mesa32/src/main/vtxfmt_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/main/vtxfmt_tmp.h rename to dll/3rdparty/mesa32/src/main/vtxfmt_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/descrip.mms b/dll/3rdparty/mesa32/src/math/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/descrip.mms rename to dll/3rdparty/mesa32/src/math/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_clip_tmp.h b/dll/3rdparty/mesa32/src/math/m_clip_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_clip_tmp.h rename to dll/3rdparty/mesa32/src/math/m_clip_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_copy_tmp.h b/dll/3rdparty/mesa32/src/math/m_copy_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_copy_tmp.h rename to dll/3rdparty/mesa32/src/math/m_copy_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_debug.h b/dll/3rdparty/mesa32/src/math/m_debug.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_debug.h rename to dll/3rdparty/mesa32/src/math/m_debug.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_debug_clip.c b/dll/3rdparty/mesa32/src/math/m_debug_clip.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_debug_clip.c rename to dll/3rdparty/mesa32/src/math/m_debug_clip.c diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_debug_norm.c b/dll/3rdparty/mesa32/src/math/m_debug_norm.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_debug_norm.c rename to dll/3rdparty/mesa32/src/math/m_debug_norm.c diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_debug_util.h b/dll/3rdparty/mesa32/src/math/m_debug_util.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_debug_util.h rename to dll/3rdparty/mesa32/src/math/m_debug_util.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_debug_xform.c b/dll/3rdparty/mesa32/src/math/m_debug_xform.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_debug_xform.c rename to dll/3rdparty/mesa32/src/math/m_debug_xform.c diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_dotprod_tmp.h b/dll/3rdparty/mesa32/src/math/m_dotprod_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_dotprod_tmp.h rename to dll/3rdparty/mesa32/src/math/m_dotprod_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_eval.c b/dll/3rdparty/mesa32/src/math/m_eval.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_eval.c rename to dll/3rdparty/mesa32/src/math/m_eval.c diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_eval.h b/dll/3rdparty/mesa32/src/math/m_eval.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_eval.h rename to dll/3rdparty/mesa32/src/math/m_eval.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_matrix.c b/dll/3rdparty/mesa32/src/math/m_matrix.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_matrix.c rename to dll/3rdparty/mesa32/src/math/m_matrix.c diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_matrix.h b/dll/3rdparty/mesa32/src/math/m_matrix.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_matrix.h rename to dll/3rdparty/mesa32/src/math/m_matrix.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_norm_tmp.h b/dll/3rdparty/mesa32/src/math/m_norm_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_norm_tmp.h rename to dll/3rdparty/mesa32/src/math/m_norm_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_trans_tmp.h b/dll/3rdparty/mesa32/src/math/m_trans_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_trans_tmp.h rename to dll/3rdparty/mesa32/src/math/m_trans_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_translate.c b/dll/3rdparty/mesa32/src/math/m_translate.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_translate.c rename to dll/3rdparty/mesa32/src/math/m_translate.c diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_translate.h b/dll/3rdparty/mesa32/src/math/m_translate.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_translate.h rename to dll/3rdparty/mesa32/src/math/m_translate.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_vector.c b/dll/3rdparty/mesa32/src/math/m_vector.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_vector.c rename to dll/3rdparty/mesa32/src/math/m_vector.c diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_vector.h b/dll/3rdparty/mesa32/src/math/m_vector.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_vector.h rename to dll/3rdparty/mesa32/src/math/m_vector.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_xform.c b/dll/3rdparty/mesa32/src/math/m_xform.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_xform.c rename to dll/3rdparty/mesa32/src/math/m_xform.c diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_xform.h b/dll/3rdparty/mesa32/src/math/m_xform.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_xform.h rename to dll/3rdparty/mesa32/src/math/m_xform.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/m_xform_tmp.h b/dll/3rdparty/mesa32/src/math/m_xform_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/m_xform_tmp.h rename to dll/3rdparty/mesa32/src/math/m_xform_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/mathmod.h b/dll/3rdparty/mesa32/src/math/mathmod.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/mathmod.h rename to dll/3rdparty/mesa32/src/math/mathmod.h diff --git a/reactos/dll/3rdparty/mesa32/src/math/sources b/dll/3rdparty/mesa32/src/math/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/math/sources rename to dll/3rdparty/mesa32/src/math/sources diff --git a/reactos/dll/3rdparty/mesa32/src/ppc/common_ppc.c b/dll/3rdparty/mesa32/src/ppc/common_ppc.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/ppc/common_ppc.c rename to dll/3rdparty/mesa32/src/ppc/common_ppc.c diff --git a/reactos/dll/3rdparty/mesa32/src/ppc/common_ppc_features.h b/dll/3rdparty/mesa32/src/ppc/common_ppc_features.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/ppc/common_ppc_features.h rename to dll/3rdparty/mesa32/src/ppc/common_ppc_features.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/arbprogparse.c b/dll/3rdparty/mesa32/src/shader/arbprogparse.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/arbprogparse.c rename to dll/3rdparty/mesa32/src/shader/arbprogparse.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/arbprogparse.h b/dll/3rdparty/mesa32/src/shader/arbprogparse.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/arbprogparse.h rename to dll/3rdparty/mesa32/src/shader/arbprogparse.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/arbprogram.c b/dll/3rdparty/mesa32/src/shader/arbprogram.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/arbprogram.c rename to dll/3rdparty/mesa32/src/shader/arbprogram.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/arbprogram.h b/dll/3rdparty/mesa32/src/shader/arbprogram.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/arbprogram.h rename to dll/3rdparty/mesa32/src/shader/arbprogram.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/arbprogram_syn.h b/dll/3rdparty/mesa32/src/shader/arbprogram_syn.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/arbprogram_syn.h rename to dll/3rdparty/mesa32/src/shader/arbprogram_syn.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/atifragshader.c b/dll/3rdparty/mesa32/src/shader/atifragshader.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/atifragshader.c rename to dll/3rdparty/mesa32/src/shader/atifragshader.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/atifragshader.h b/dll/3rdparty/mesa32/src/shader/atifragshader.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/atifragshader.h rename to dll/3rdparty/mesa32/src/shader/atifragshader.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/descrip.mms b/dll/3rdparty/mesa32/src/shader/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/descrip.mms rename to dll/3rdparty/mesa32/src/shader/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/descrip.mms b/dll/3rdparty/mesa32/src/shader/grammar/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/descrip.mms rename to dll/3rdparty/mesa32/src/shader/grammar/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar.c b/dll/3rdparty/mesa32/src/shader/grammar/grammar.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar.c rename to dll/3rdparty/mesa32/src/shader/grammar/grammar.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar.h b/dll/3rdparty/mesa32/src/shader/grammar/grammar.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar.h rename to dll/3rdparty/mesa32/src/shader/grammar/grammar.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_crt.c b/dll/3rdparty/mesa32/src/shader/grammar/grammar_crt.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_crt.c rename to dll/3rdparty/mesa32/src/shader/grammar/grammar_crt.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_crt.h b/dll/3rdparty/mesa32/src/shader/grammar/grammar_crt.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_crt.h rename to dll/3rdparty/mesa32/src/shader/grammar/grammar_crt.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_mesa.c b/dll/3rdparty/mesa32/src/shader/grammar/grammar_mesa.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_mesa.c rename to dll/3rdparty/mesa32/src/shader/grammar/grammar_mesa.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_mesa.h b/dll/3rdparty/mesa32/src/shader/grammar/grammar_mesa.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_mesa.h rename to dll/3rdparty/mesa32/src/shader/grammar/grammar_mesa.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_syn.h b/dll/3rdparty/mesa32/src/shader/grammar/grammar_syn.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/grammar_syn.h rename to dll/3rdparty/mesa32/src/shader/grammar/grammar_syn.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/grammar/sources b/dll/3rdparty/mesa32/src/shader/grammar/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/grammar/sources rename to dll/3rdparty/mesa32/src/shader/grammar/sources diff --git a/reactos/dll/3rdparty/mesa32/src/shader/nvfragparse.c b/dll/3rdparty/mesa32/src/shader/nvfragparse.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/nvfragparse.c rename to dll/3rdparty/mesa32/src/shader/nvfragparse.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/nvfragparse.h b/dll/3rdparty/mesa32/src/shader/nvfragparse.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/nvfragparse.h rename to dll/3rdparty/mesa32/src/shader/nvfragparse.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/nvprogram.c b/dll/3rdparty/mesa32/src/shader/nvprogram.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/nvprogram.c rename to dll/3rdparty/mesa32/src/shader/nvprogram.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/nvprogram.h b/dll/3rdparty/mesa32/src/shader/nvprogram.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/nvprogram.h rename to dll/3rdparty/mesa32/src/shader/nvprogram.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/nvvertparse.c b/dll/3rdparty/mesa32/src/shader/nvvertparse.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/nvvertparse.c rename to dll/3rdparty/mesa32/src/shader/nvvertparse.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/nvvertparse.h b/dll/3rdparty/mesa32/src/shader/nvvertparse.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/nvvertparse.h rename to dll/3rdparty/mesa32/src/shader/nvvertparse.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_debug.c b/dll/3rdparty/mesa32/src/shader/prog_debug.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_debug.c rename to dll/3rdparty/mesa32/src/shader/prog_debug.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_debug.h b/dll/3rdparty/mesa32/src/shader/prog_debug.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_debug.h rename to dll/3rdparty/mesa32/src/shader/prog_debug.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_execute.c b/dll/3rdparty/mesa32/src/shader/prog_execute.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_execute.c rename to dll/3rdparty/mesa32/src/shader/prog_execute.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_execute.h b/dll/3rdparty/mesa32/src/shader/prog_execute.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_execute.h rename to dll/3rdparty/mesa32/src/shader/prog_execute.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_instruction.c b/dll/3rdparty/mesa32/src/shader/prog_instruction.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_instruction.c rename to dll/3rdparty/mesa32/src/shader/prog_instruction.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_instruction.h b/dll/3rdparty/mesa32/src/shader/prog_instruction.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_instruction.h rename to dll/3rdparty/mesa32/src/shader/prog_instruction.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_parameter.c b/dll/3rdparty/mesa32/src/shader/prog_parameter.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_parameter.c rename to dll/3rdparty/mesa32/src/shader/prog_parameter.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_parameter.h b/dll/3rdparty/mesa32/src/shader/prog_parameter.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_parameter.h rename to dll/3rdparty/mesa32/src/shader/prog_parameter.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_print.c b/dll/3rdparty/mesa32/src/shader/prog_print.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_print.c rename to dll/3rdparty/mesa32/src/shader/prog_print.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_print.h b/dll/3rdparty/mesa32/src/shader/prog_print.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_print.h rename to dll/3rdparty/mesa32/src/shader/prog_print.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_statevars.c b/dll/3rdparty/mesa32/src/shader/prog_statevars.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_statevars.c rename to dll/3rdparty/mesa32/src/shader/prog_statevars.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_statevars.h b/dll/3rdparty/mesa32/src/shader/prog_statevars.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_statevars.h rename to dll/3rdparty/mesa32/src/shader/prog_statevars.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_uniform.c b/dll/3rdparty/mesa32/src/shader/prog_uniform.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_uniform.c rename to dll/3rdparty/mesa32/src/shader/prog_uniform.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/prog_uniform.h b/dll/3rdparty/mesa32/src/shader/prog_uniform.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/prog_uniform.h rename to dll/3rdparty/mesa32/src/shader/prog_uniform.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/program.c b/dll/3rdparty/mesa32/src/shader/program.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/program.c rename to dll/3rdparty/mesa32/src/shader/program.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/program.h b/dll/3rdparty/mesa32/src/shader/program.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/program.h rename to dll/3rdparty/mesa32/src/shader/program.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/programopt.c b/dll/3rdparty/mesa32/src/shader/programopt.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/programopt.c rename to dll/3rdparty/mesa32/src/shader/programopt.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/programopt.h b/dll/3rdparty/mesa32/src/shader/programopt.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/programopt.h rename to dll/3rdparty/mesa32/src/shader/programopt.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/shader_api.c b/dll/3rdparty/mesa32/src/shader/shader_api.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/shader_api.c rename to dll/3rdparty/mesa32/src/shader/shader_api.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/shader_api.h b/dll/3rdparty/mesa32/src/shader/shader_api.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/shader_api.h rename to dll/3rdparty/mesa32/src/shader/shader_api.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/descrip.mms b/dll/3rdparty/mesa32/src/shader/slang/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/descrip.mms rename to dll/3rdparty/mesa32/src/shader/slang/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/Makefile b/dll/3rdparty/mesa32/src/shader/slang/library/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/Makefile rename to dll/3rdparty/mesa32/src/shader/slang/library/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/gc_to_bin.c b/dll/3rdparty/mesa32/src/shader/slang/library/gc_to_bin.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/gc_to_bin.c rename to dll/3rdparty/mesa32/src/shader/slang/library/gc_to_bin.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_120_core.gc b/dll/3rdparty/mesa32/src/shader/slang/library/slang_120_core.gc similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_120_core.gc rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_120_core.gc diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_120_core_gc.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_120_core_gc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_120_core_gc.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_120_core_gc.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common.gc b/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common.gc similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common.gc rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common.gc diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common_gc.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common_gc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common_gc.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_common_gc.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment.gc b/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment.gc similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment.gc rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment.gc diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment_gc.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment_gc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment_gc.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_builtin_120_fragment_gc.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin.gc b/dll/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin.gc similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin.gc rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin.gc diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin_gc.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin_gc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin_gc.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_common_builtin_gc.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_core.gc b/dll/3rdparty/mesa32/src/shader/slang/library/slang_core.gc similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_core.gc rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_core.gc diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_core_gc.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_core_gc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_core_gc.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_core_gc.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin.gc b/dll/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin.gc similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin.gc rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin.gc diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin_gc.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin_gc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin_gc.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_fragment_builtin_gc.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives.syn b/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives.syn similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives.syn rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives.syn diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives_syn.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives_syn.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives_syn.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_directives_syn.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression.syn b/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression.syn similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression.syn rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression.syn diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression_syn.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression_syn.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression_syn.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_expression_syn.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_version.syn b/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_version.syn similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_version.syn rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_version.syn diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_version_syn.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_version_syn.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_version_syn.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_pp_version_syn.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_shader.syn b/dll/3rdparty/mesa32/src/shader/slang/library/slang_shader.syn similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_shader.syn rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_shader.syn diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_shader_syn.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_shader_syn.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_shader_syn.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_shader_syn.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_version.syn b/dll/3rdparty/mesa32/src/shader/slang/library/slang_version.syn similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_version.syn rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_version.syn diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_version_syn.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_version_syn.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_version_syn.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_version_syn.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin.gc b/dll/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin.gc similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin.gc rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin.gc diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin_gc.h b/dll/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin_gc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin_gc.h rename to dll/3rdparty/mesa32/src/shader/slang/library/slang_vertex_builtin_gc.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/library/syn_to_c.c b/dll/3rdparty/mesa32/src/shader/slang/library/syn_to_c.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/library/syn_to_c.c rename to dll/3rdparty/mesa32/src/shader/slang/library/syn_to_c.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_builtin.c b/dll/3rdparty/mesa32/src/shader/slang/slang_builtin.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_builtin.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_builtin.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_builtin.h b/dll/3rdparty/mesa32/src/shader/slang/slang_builtin.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_builtin.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_builtin.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_codegen.c b/dll/3rdparty/mesa32/src/shader/slang/slang_codegen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_codegen.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_codegen.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_codegen.h b/dll/3rdparty/mesa32/src/shader/slang/slang_codegen.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_codegen.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_codegen.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile.c b/dll/3rdparty/mesa32/src/shader/slang/slang_compile.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile.h b/dll/3rdparty/mesa32/src/shader/slang/slang_compile.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_function.c b/dll/3rdparty/mesa32/src/shader/slang/slang_compile_function.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_function.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile_function.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_function.h b/dll/3rdparty/mesa32/src/shader/slang/slang_compile_function.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_function.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile_function.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_operation.c b/dll/3rdparty/mesa32/src/shader/slang/slang_compile_operation.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_operation.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile_operation.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_operation.h b/dll/3rdparty/mesa32/src/shader/slang/slang_compile_operation.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_operation.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile_operation.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_struct.c b/dll/3rdparty/mesa32/src/shader/slang/slang_compile_struct.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_struct.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile_struct.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_struct.h b/dll/3rdparty/mesa32/src/shader/slang/slang_compile_struct.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_struct.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile_struct.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_variable.c b/dll/3rdparty/mesa32/src/shader/slang/slang_compile_variable.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_variable.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile_variable.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_variable.h b/dll/3rdparty/mesa32/src/shader/slang/slang_compile_variable.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_compile_variable.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_compile_variable.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_emit.c b/dll/3rdparty/mesa32/src/shader/slang/slang_emit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_emit.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_emit.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_emit.h b/dll/3rdparty/mesa32/src/shader/slang/slang_emit.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_emit.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_emit.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_ir.c b/dll/3rdparty/mesa32/src/shader/slang/slang_ir.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_ir.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_ir.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_ir.h b/dll/3rdparty/mesa32/src/shader/slang/slang_ir.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_ir.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_ir.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_label.c b/dll/3rdparty/mesa32/src/shader/slang/slang_label.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_label.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_label.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_label.h b/dll/3rdparty/mesa32/src/shader/slang/slang_label.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_label.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_label.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_library_noise.c b/dll/3rdparty/mesa32/src/shader/slang/slang_library_noise.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_library_noise.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_library_noise.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_library_noise.h b/dll/3rdparty/mesa32/src/shader/slang/slang_library_noise.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_library_noise.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_library_noise.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_link.c b/dll/3rdparty/mesa32/src/shader/slang/slang_link.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_link.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_link.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_link.h b/dll/3rdparty/mesa32/src/shader/slang/slang_link.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_link.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_link.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_log.c b/dll/3rdparty/mesa32/src/shader/slang/slang_log.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_log.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_log.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_log.h b/dll/3rdparty/mesa32/src/shader/slang/slang_log.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_log.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_log.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_mem.c b/dll/3rdparty/mesa32/src/shader/slang/slang_mem.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_mem.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_mem.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_mem.h b/dll/3rdparty/mesa32/src/shader/slang/slang_mem.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_mem.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_mem.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_preprocess.c b/dll/3rdparty/mesa32/src/shader/slang/slang_preprocess.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_preprocess.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_preprocess.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_preprocess.h b/dll/3rdparty/mesa32/src/shader/slang/slang_preprocess.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_preprocess.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_preprocess.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_print.c b/dll/3rdparty/mesa32/src/shader/slang/slang_print.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_print.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_print.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_print.h b/dll/3rdparty/mesa32/src/shader/slang/slang_print.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_print.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_print.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_simplify.c b/dll/3rdparty/mesa32/src/shader/slang/slang_simplify.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_simplify.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_simplify.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_simplify.h b/dll/3rdparty/mesa32/src/shader/slang/slang_simplify.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_simplify.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_simplify.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_storage.c b/dll/3rdparty/mesa32/src/shader/slang/slang_storage.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_storage.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_storage.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_storage.h b/dll/3rdparty/mesa32/src/shader/slang/slang_storage.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_storage.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_storage.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_typeinfo.c b/dll/3rdparty/mesa32/src/shader/slang/slang_typeinfo.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_typeinfo.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_typeinfo.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_typeinfo.h b/dll/3rdparty/mesa32/src/shader/slang/slang_typeinfo.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_typeinfo.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_typeinfo.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_utility.c b/dll/3rdparty/mesa32/src/shader/slang/slang_utility.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_utility.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_utility.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_utility.h b/dll/3rdparty/mesa32/src/shader/slang/slang_utility.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_utility.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_utility.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_vartable.c b/dll/3rdparty/mesa32/src/shader/slang/slang_vartable.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_vartable.c rename to dll/3rdparty/mesa32/src/shader/slang/slang_vartable.c diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/slang_vartable.h b/dll/3rdparty/mesa32/src/shader/slang/slang_vartable.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/slang_vartable.h rename to dll/3rdparty/mesa32/src/shader/slang/slang_vartable.h diff --git a/reactos/dll/3rdparty/mesa32/src/shader/slang/sources b/dll/3rdparty/mesa32/src/shader/slang/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/slang/sources rename to dll/3rdparty/mesa32/src/shader/slang/sources diff --git a/reactos/dll/3rdparty/mesa32/src/shader/sources b/dll/3rdparty/mesa32/src/shader/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/shader/sources rename to dll/3rdparty/mesa32/src/shader/sources diff --git a/reactos/dll/3rdparty/mesa32/src/sources b/dll/3rdparty/mesa32/src/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/sources rename to dll/3rdparty/mesa32/src/sources diff --git a/reactos/dll/3rdparty/mesa32/src/sparc/clip.S b/dll/3rdparty/mesa32/src/sparc/clip.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/sparc/clip.S rename to dll/3rdparty/mesa32/src/sparc/clip.S diff --git a/reactos/dll/3rdparty/mesa32/src/sparc/glapi_sparc.S b/dll/3rdparty/mesa32/src/sparc/glapi_sparc.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/sparc/glapi_sparc.S rename to dll/3rdparty/mesa32/src/sparc/glapi_sparc.S diff --git a/reactos/dll/3rdparty/mesa32/src/sparc/norm.S b/dll/3rdparty/mesa32/src/sparc/norm.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/sparc/norm.S rename to dll/3rdparty/mesa32/src/sparc/norm.S diff --git a/reactos/dll/3rdparty/mesa32/src/sparc/sparc.c b/dll/3rdparty/mesa32/src/sparc/sparc.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/sparc/sparc.c rename to dll/3rdparty/mesa32/src/sparc/sparc.c diff --git a/reactos/dll/3rdparty/mesa32/src/sparc/sparc.h b/dll/3rdparty/mesa32/src/sparc/sparc.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/sparc/sparc.h rename to dll/3rdparty/mesa32/src/sparc/sparc.h diff --git a/reactos/dll/3rdparty/mesa32/src/sparc/sparc_matrix.h b/dll/3rdparty/mesa32/src/sparc/sparc_matrix.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/sparc/sparc_matrix.h rename to dll/3rdparty/mesa32/src/sparc/sparc_matrix.h diff --git a/reactos/dll/3rdparty/mesa32/src/sparc/xform.S b/dll/3rdparty/mesa32/src/sparc/xform.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/sparc/xform.S rename to dll/3rdparty/mesa32/src/sparc/xform.S diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/descrip.mms b/dll/3rdparty/mesa32/src/swrast/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/descrip.mms rename to dll/3rdparty/mesa32/src/swrast/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_aaline.c b/dll/3rdparty/mesa32/src/swrast/s_aaline.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_aaline.c rename to dll/3rdparty/mesa32/src/swrast/s_aaline.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_aaline.h b/dll/3rdparty/mesa32/src/swrast/s_aaline.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_aaline.h rename to dll/3rdparty/mesa32/src/swrast/s_aaline.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_aalinetemp.h b/dll/3rdparty/mesa32/src/swrast/s_aalinetemp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_aalinetemp.h rename to dll/3rdparty/mesa32/src/swrast/s_aalinetemp.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_aatriangle.c b/dll/3rdparty/mesa32/src/swrast/s_aatriangle.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_aatriangle.c rename to dll/3rdparty/mesa32/src/swrast/s_aatriangle.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_aatriangle.h b/dll/3rdparty/mesa32/src/swrast/s_aatriangle.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_aatriangle.h rename to dll/3rdparty/mesa32/src/swrast/s_aatriangle.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_aatritemp.h b/dll/3rdparty/mesa32/src/swrast/s_aatritemp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_aatritemp.h rename to dll/3rdparty/mesa32/src/swrast/s_aatritemp.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_accum.c b/dll/3rdparty/mesa32/src/swrast/s_accum.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_accum.c rename to dll/3rdparty/mesa32/src/swrast/s_accum.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_accum.h b/dll/3rdparty/mesa32/src/swrast/s_accum.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_accum.h rename to dll/3rdparty/mesa32/src/swrast/s_accum.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_alpha.c b/dll/3rdparty/mesa32/src/swrast/s_alpha.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_alpha.c rename to dll/3rdparty/mesa32/src/swrast/s_alpha.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_alpha.h b/dll/3rdparty/mesa32/src/swrast/s_alpha.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_alpha.h rename to dll/3rdparty/mesa32/src/swrast/s_alpha.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_atifragshader.c b/dll/3rdparty/mesa32/src/swrast/s_atifragshader.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_atifragshader.c rename to dll/3rdparty/mesa32/src/swrast/s_atifragshader.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_atifragshader.h b/dll/3rdparty/mesa32/src/swrast/s_atifragshader.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_atifragshader.h rename to dll/3rdparty/mesa32/src/swrast/s_atifragshader.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_bitmap.c b/dll/3rdparty/mesa32/src/swrast/s_bitmap.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_bitmap.c rename to dll/3rdparty/mesa32/src/swrast/s_bitmap.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_blend.c b/dll/3rdparty/mesa32/src/swrast/s_blend.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_blend.c rename to dll/3rdparty/mesa32/src/swrast/s_blend.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_blend.h b/dll/3rdparty/mesa32/src/swrast/s_blend.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_blend.h rename to dll/3rdparty/mesa32/src/swrast/s_blend.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_blit.c b/dll/3rdparty/mesa32/src/swrast/s_blit.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_blit.c rename to dll/3rdparty/mesa32/src/swrast/s_blit.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_buffers.c b/dll/3rdparty/mesa32/src/swrast/s_buffers.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_buffers.c rename to dll/3rdparty/mesa32/src/swrast/s_buffers.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_context.c b/dll/3rdparty/mesa32/src/swrast/s_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_context.c rename to dll/3rdparty/mesa32/src/swrast/s_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_context.h b/dll/3rdparty/mesa32/src/swrast/s_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_context.h rename to dll/3rdparty/mesa32/src/swrast/s_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_copypix.c b/dll/3rdparty/mesa32/src/swrast/s_copypix.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_copypix.c rename to dll/3rdparty/mesa32/src/swrast/s_copypix.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_depth.c b/dll/3rdparty/mesa32/src/swrast/s_depth.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_depth.c rename to dll/3rdparty/mesa32/src/swrast/s_depth.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_depth.h b/dll/3rdparty/mesa32/src/swrast/s_depth.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_depth.h rename to dll/3rdparty/mesa32/src/swrast/s_depth.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_drawpix.c b/dll/3rdparty/mesa32/src/swrast/s_drawpix.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_drawpix.c rename to dll/3rdparty/mesa32/src/swrast/s_drawpix.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_drawpix.h b/dll/3rdparty/mesa32/src/swrast/s_drawpix.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_drawpix.h rename to dll/3rdparty/mesa32/src/swrast/s_drawpix.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_feedback.c b/dll/3rdparty/mesa32/src/swrast/s_feedback.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_feedback.c rename to dll/3rdparty/mesa32/src/swrast/s_feedback.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_feedback.h b/dll/3rdparty/mesa32/src/swrast/s_feedback.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_feedback.h rename to dll/3rdparty/mesa32/src/swrast/s_feedback.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_fog.c b/dll/3rdparty/mesa32/src/swrast/s_fog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_fog.c rename to dll/3rdparty/mesa32/src/swrast/s_fog.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_fog.h b/dll/3rdparty/mesa32/src/swrast/s_fog.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_fog.h rename to dll/3rdparty/mesa32/src/swrast/s_fog.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_fragprog.c b/dll/3rdparty/mesa32/src/swrast/s_fragprog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_fragprog.c rename to dll/3rdparty/mesa32/src/swrast/s_fragprog.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_fragprog.h b/dll/3rdparty/mesa32/src/swrast/s_fragprog.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_fragprog.h rename to dll/3rdparty/mesa32/src/swrast/s_fragprog.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_imaging.c b/dll/3rdparty/mesa32/src/swrast/s_imaging.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_imaging.c rename to dll/3rdparty/mesa32/src/swrast/s_imaging.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_lines.c b/dll/3rdparty/mesa32/src/swrast/s_lines.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_lines.c rename to dll/3rdparty/mesa32/src/swrast/s_lines.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_lines.h b/dll/3rdparty/mesa32/src/swrast/s_lines.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_lines.h rename to dll/3rdparty/mesa32/src/swrast/s_lines.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_linetemp.h b/dll/3rdparty/mesa32/src/swrast/s_linetemp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_linetemp.h rename to dll/3rdparty/mesa32/src/swrast/s_linetemp.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_logic.c b/dll/3rdparty/mesa32/src/swrast/s_logic.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_logic.c rename to dll/3rdparty/mesa32/src/swrast/s_logic.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_logic.h b/dll/3rdparty/mesa32/src/swrast/s_logic.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_logic.h rename to dll/3rdparty/mesa32/src/swrast/s_logic.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_masking.c b/dll/3rdparty/mesa32/src/swrast/s_masking.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_masking.c rename to dll/3rdparty/mesa32/src/swrast/s_masking.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_masking.h b/dll/3rdparty/mesa32/src/swrast/s_masking.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_masking.h rename to dll/3rdparty/mesa32/src/swrast/s_masking.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_points.c b/dll/3rdparty/mesa32/src/swrast/s_points.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_points.c rename to dll/3rdparty/mesa32/src/swrast/s_points.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_points.h b/dll/3rdparty/mesa32/src/swrast/s_points.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_points.h rename to dll/3rdparty/mesa32/src/swrast/s_points.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_pointtemp.h b/dll/3rdparty/mesa32/src/swrast/s_pointtemp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_pointtemp.h rename to dll/3rdparty/mesa32/src/swrast/s_pointtemp.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_readpix.c b/dll/3rdparty/mesa32/src/swrast/s_readpix.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_readpix.c rename to dll/3rdparty/mesa32/src/swrast/s_readpix.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_span.c b/dll/3rdparty/mesa32/src/swrast/s_span.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_span.c rename to dll/3rdparty/mesa32/src/swrast/s_span.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_span.h b/dll/3rdparty/mesa32/src/swrast/s_span.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_span.h rename to dll/3rdparty/mesa32/src/swrast/s_span.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_spantemp.h b/dll/3rdparty/mesa32/src/swrast/s_spantemp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_spantemp.h rename to dll/3rdparty/mesa32/src/swrast/s_spantemp.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_stencil.c b/dll/3rdparty/mesa32/src/swrast/s_stencil.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_stencil.c rename to dll/3rdparty/mesa32/src/swrast/s_stencil.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_stencil.h b/dll/3rdparty/mesa32/src/swrast/s_stencil.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_stencil.h rename to dll/3rdparty/mesa32/src/swrast/s_stencil.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_texcombine.c b/dll/3rdparty/mesa32/src/swrast/s_texcombine.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_texcombine.c rename to dll/3rdparty/mesa32/src/swrast/s_texcombine.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_texcombine.h b/dll/3rdparty/mesa32/src/swrast/s_texcombine.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_texcombine.h rename to dll/3rdparty/mesa32/src/swrast/s_texcombine.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_texfilter.c b/dll/3rdparty/mesa32/src/swrast/s_texfilter.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_texfilter.c rename to dll/3rdparty/mesa32/src/swrast/s_texfilter.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_texfilter.h b/dll/3rdparty/mesa32/src/swrast/s_texfilter.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_texfilter.h rename to dll/3rdparty/mesa32/src/swrast/s_texfilter.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_texstore.c b/dll/3rdparty/mesa32/src/swrast/s_texstore.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_texstore.c rename to dll/3rdparty/mesa32/src/swrast/s_texstore.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_triangle.c b/dll/3rdparty/mesa32/src/swrast/s_triangle.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_triangle.c rename to dll/3rdparty/mesa32/src/swrast/s_triangle.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_triangle.h b/dll/3rdparty/mesa32/src/swrast/s_triangle.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_triangle.h rename to dll/3rdparty/mesa32/src/swrast/s_triangle.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_trispan.h b/dll/3rdparty/mesa32/src/swrast/s_trispan.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_trispan.h rename to dll/3rdparty/mesa32/src/swrast/s_trispan.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_tritemp.h b/dll/3rdparty/mesa32/src/swrast/s_tritemp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_tritemp.h rename to dll/3rdparty/mesa32/src/swrast/s_tritemp.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_zoom.c b/dll/3rdparty/mesa32/src/swrast/s_zoom.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_zoom.c rename to dll/3rdparty/mesa32/src/swrast/s_zoom.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/s_zoom.h b/dll/3rdparty/mesa32/src/swrast/s_zoom.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/s_zoom.h rename to dll/3rdparty/mesa32/src/swrast/s_zoom.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/sources b/dll/3rdparty/mesa32/src/swrast/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/sources rename to dll/3rdparty/mesa32/src/swrast/sources diff --git a/reactos/dll/3rdparty/mesa32/src/swrast/swrast.h b/dll/3rdparty/mesa32/src/swrast/swrast.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast/swrast.h rename to dll/3rdparty/mesa32/src/swrast/swrast.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/descrip.mms b/dll/3rdparty/mesa32/src/swrast_setup/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/descrip.mms rename to dll/3rdparty/mesa32/src/swrast_setup/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/sources b/dll/3rdparty/mesa32/src/swrast_setup/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/sources rename to dll/3rdparty/mesa32/src/swrast_setup/sources diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_context.c b/dll/3rdparty/mesa32/src/swrast_setup/ss_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_context.c rename to dll/3rdparty/mesa32/src/swrast_setup/ss_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_context.h b/dll/3rdparty/mesa32/src/swrast_setup/ss_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_context.h rename to dll/3rdparty/mesa32/src/swrast_setup/ss_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_triangle.c b/dll/3rdparty/mesa32/src/swrast_setup/ss_triangle.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_triangle.c rename to dll/3rdparty/mesa32/src/swrast_setup/ss_triangle.c diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_triangle.h b/dll/3rdparty/mesa32/src/swrast_setup/ss_triangle.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_triangle.h rename to dll/3rdparty/mesa32/src/swrast_setup/ss_triangle.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_tritmp.h b/dll/3rdparty/mesa32/src/swrast_setup/ss_tritmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_tritmp.h rename to dll/3rdparty/mesa32/src/swrast_setup/ss_tritmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_vb.h b/dll/3rdparty/mesa32/src/swrast_setup/ss_vb.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/ss_vb.h rename to dll/3rdparty/mesa32/src/swrast_setup/ss_vb.h diff --git a/reactos/dll/3rdparty/mesa32/src/swrast_setup/swrast_setup.h b/dll/3rdparty/mesa32/src/swrast_setup/swrast_setup.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/swrast_setup/swrast_setup.h rename to dll/3rdparty/mesa32/src/swrast_setup/swrast_setup.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/descrip.mms b/dll/3rdparty/mesa32/src/tnl/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/descrip.mms rename to dll/3rdparty/mesa32/src/tnl/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/sources b/dll/3rdparty/mesa32/src/tnl/sources similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/sources rename to dll/3rdparty/mesa32/src/tnl/sources diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_context.c b/dll/3rdparty/mesa32/src/tnl/t_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_context.c rename to dll/3rdparty/mesa32/src/tnl/t_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_context.h b/dll/3rdparty/mesa32/src/tnl/t_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_context.h rename to dll/3rdparty/mesa32/src/tnl/t_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_draw.c b/dll/3rdparty/mesa32/src/tnl/t_draw.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_draw.c rename to dll/3rdparty/mesa32/src/tnl/t_draw.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_pipeline.c b/dll/3rdparty/mesa32/src/tnl/t_pipeline.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_pipeline.c rename to dll/3rdparty/mesa32/src/tnl/t_pipeline.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_pipeline.h b/dll/3rdparty/mesa32/src/tnl/t_pipeline.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_pipeline.h rename to dll/3rdparty/mesa32/src/tnl/t_pipeline.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_cliptmp.h b/dll/3rdparty/mesa32/src/tnl/t_vb_cliptmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_cliptmp.h rename to dll/3rdparty/mesa32/src/tnl/t_vb_cliptmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_cull.c b/dll/3rdparty/mesa32/src/tnl/t_vb_cull.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_cull.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_cull.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_fog.c b/dll/3rdparty/mesa32/src/tnl/t_vb_fog.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_fog.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_fog.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_light.c b/dll/3rdparty/mesa32/src/tnl/t_vb_light.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_light.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_light.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_lighttmp.h b/dll/3rdparty/mesa32/src/tnl/t_vb_lighttmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_lighttmp.h rename to dll/3rdparty/mesa32/src/tnl/t_vb_lighttmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_normals.c b/dll/3rdparty/mesa32/src/tnl/t_vb_normals.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_normals.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_normals.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_points.c b/dll/3rdparty/mesa32/src/tnl/t_vb_points.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_points.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_points.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_program.c b/dll/3rdparty/mesa32/src/tnl/t_vb_program.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_program.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_program.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_render.c b/dll/3rdparty/mesa32/src/tnl/t_vb_render.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_render.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_render.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_rendertmp.h b/dll/3rdparty/mesa32/src/tnl/t_vb_rendertmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_rendertmp.h rename to dll/3rdparty/mesa32/src/tnl/t_vb_rendertmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_texgen.c b/dll/3rdparty/mesa32/src/tnl/t_vb_texgen.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_texgen.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_texgen.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_texmat.c b/dll/3rdparty/mesa32/src/tnl/t_vb_texmat.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_texmat.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_texmat.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vb_vertex.c b/dll/3rdparty/mesa32/src/tnl/t_vb_vertex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vb_vertex.c rename to dll/3rdparty/mesa32/src/tnl/t_vb_vertex.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vertex.c b/dll/3rdparty/mesa32/src/tnl/t_vertex.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vertex.c rename to dll/3rdparty/mesa32/src/tnl/t_vertex.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vertex.h b/dll/3rdparty/mesa32/src/tnl/t_vertex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vertex.h rename to dll/3rdparty/mesa32/src/tnl/t_vertex.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vertex_generic.c b/dll/3rdparty/mesa32/src/tnl/t_vertex_generic.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vertex_generic.c rename to dll/3rdparty/mesa32/src/tnl/t_vertex_generic.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vertex_sse.c b/dll/3rdparty/mesa32/src/tnl/t_vertex_sse.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vertex_sse.c rename to dll/3rdparty/mesa32/src/tnl/t_vertex_sse.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vp_build.c b/dll/3rdparty/mesa32/src/tnl/t_vp_build.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vp_build.c rename to dll/3rdparty/mesa32/src/tnl/t_vp_build.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/t_vp_build.h b/dll/3rdparty/mesa32/src/tnl/t_vp_build.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/t_vp_build.h rename to dll/3rdparty/mesa32/src/tnl/t_vp_build.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl/tnl.h b/dll/3rdparty/mesa32/src/tnl/tnl.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl/tnl.h rename to dll/3rdparty/mesa32/src/tnl/tnl.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/NOTES.imm b/dll/3rdparty/mesa32/src/tnl_dd/imm/NOTES.imm similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/NOTES.imm rename to dll/3rdparty/mesa32/src/tnl_dd/imm/NOTES.imm diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_capi.h b/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_capi.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_capi.h rename to dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_capi.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_napi.h b/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_napi.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_napi.h rename to dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_napi.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_primtmp.h b/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_primtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_primtmp.h rename to dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_primtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_tapi.h b/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_tapi.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_tapi.h rename to dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_tapi.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vapi.h b/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vapi.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vapi.h rename to dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vapi.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vb.c b/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vb.c rename to dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vbtmp.h b/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vbtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vbtmp.h rename to dll/3rdparty/mesa32/src/tnl_dd/imm/t_dd_imm_vbtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd.c b/dll/3rdparty/mesa32/src/tnl_dd/t_dd.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd.c rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp.h b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp.h rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp2.h b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp2.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp2.h rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_dmatmp2.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_rendertmp.h b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_rendertmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_rendertmp.h rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_rendertmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_triemit.h b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_triemit.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_triemit.h rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_triemit.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_tritmp.h b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_tritmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_tritmp.h rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_tritmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_unfilled.h b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_unfilled.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_unfilled.h rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_unfilled.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vb.c b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vb.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vb.c rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_vb.c diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vbtmp.h b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vbtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vbtmp.h rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_vbtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vertex.h b/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vertex.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/tnl_dd/t_dd_vertex.h rename to dll/3rdparty/mesa32/src/tnl_dd/t_dd_vertex.h diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/descrip.mms b/dll/3rdparty/mesa32/src/vbo/descrip.mms similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/descrip.mms rename to dll/3rdparty/mesa32/src/vbo/descrip.mms diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo.h b/dll/3rdparty/mesa32/src/vbo/vbo.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo.h rename to dll/3rdparty/mesa32/src/vbo/vbo.h diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_attrib.h b/dll/3rdparty/mesa32/src/vbo/vbo_attrib.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_attrib.h rename to dll/3rdparty/mesa32/src/vbo/vbo_attrib.h diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_attrib_tmp.h b/dll/3rdparty/mesa32/src/vbo/vbo_attrib_tmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_attrib_tmp.h rename to dll/3rdparty/mesa32/src/vbo/vbo_attrib_tmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_context.c b/dll/3rdparty/mesa32/src/vbo/vbo_context.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_context.c rename to dll/3rdparty/mesa32/src/vbo/vbo_context.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_context.h b/dll/3rdparty/mesa32/src/vbo/vbo_context.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_context.h rename to dll/3rdparty/mesa32/src/vbo/vbo_context.h diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec.c b/dll/3rdparty/mesa32/src/vbo/vbo_exec.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec.c rename to dll/3rdparty/mesa32/src/vbo/vbo_exec.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec.h b/dll/3rdparty/mesa32/src/vbo/vbo_exec.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec.h rename to dll/3rdparty/mesa32/src/vbo/vbo_exec.h diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec_api.c b/dll/3rdparty/mesa32/src/vbo/vbo_exec_api.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec_api.c rename to dll/3rdparty/mesa32/src/vbo/vbo_exec_api.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec_array.c b/dll/3rdparty/mesa32/src/vbo/vbo_exec_array.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec_array.c rename to dll/3rdparty/mesa32/src/vbo/vbo_exec_array.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec_draw.c b/dll/3rdparty/mesa32/src/vbo/vbo_exec_draw.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec_draw.c rename to dll/3rdparty/mesa32/src/vbo/vbo_exec_draw.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec_eval.c b/dll/3rdparty/mesa32/src/vbo/vbo_exec_eval.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_exec_eval.c rename to dll/3rdparty/mesa32/src/vbo/vbo_exec_eval.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_rebase.c b/dll/3rdparty/mesa32/src/vbo/vbo_rebase.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_rebase.c rename to dll/3rdparty/mesa32/src/vbo/vbo_rebase.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_save.c b/dll/3rdparty/mesa32/src/vbo/vbo_save.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_save.c rename to dll/3rdparty/mesa32/src/vbo/vbo_save.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_save.h b/dll/3rdparty/mesa32/src/vbo/vbo_save.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_save.h rename to dll/3rdparty/mesa32/src/vbo/vbo_save.h diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_save_api.c b/dll/3rdparty/mesa32/src/vbo/vbo_save_api.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_save_api.c rename to dll/3rdparty/mesa32/src/vbo/vbo_save_api.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_save_draw.c b/dll/3rdparty/mesa32/src/vbo/vbo_save_draw.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_save_draw.c rename to dll/3rdparty/mesa32/src/vbo/vbo_save_draw.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_save_loopback.c b/dll/3rdparty/mesa32/src/vbo/vbo_save_loopback.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_save_loopback.c rename to dll/3rdparty/mesa32/src/vbo/vbo_save_loopback.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_split.c b/dll/3rdparty/mesa32/src/vbo/vbo_split.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_split.c rename to dll/3rdparty/mesa32/src/vbo/vbo_split.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_split.h b/dll/3rdparty/mesa32/src/vbo/vbo_split.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_split.h rename to dll/3rdparty/mesa32/src/vbo/vbo_split.h diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_split_copy.c b/dll/3rdparty/mesa32/src/vbo/vbo_split_copy.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_split_copy.c rename to dll/3rdparty/mesa32/src/vbo/vbo_split_copy.c diff --git a/reactos/dll/3rdparty/mesa32/src/vbo/vbo_split_inplace.c b/dll/3rdparty/mesa32/src/vbo/vbo_split_inplace.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/vbo/vbo_split_inplace.c rename to dll/3rdparty/mesa32/src/vbo/vbo_split_inplace.c diff --git a/reactos/dll/3rdparty/mesa32/src/x86-64/Makefile b/dll/3rdparty/mesa32/src/x86-64/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86-64/Makefile rename to dll/3rdparty/mesa32/src/x86-64/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/x86-64/glapi_x86-64.S b/dll/3rdparty/mesa32/src/x86-64/glapi_x86-64.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86-64/glapi_x86-64.S rename to dll/3rdparty/mesa32/src/x86-64/glapi_x86-64.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86-64/matypes.h b/dll/3rdparty/mesa32/src/x86-64/matypes.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86-64/matypes.h rename to dll/3rdparty/mesa32/src/x86-64/matypes.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86-64/x86-64.c b/dll/3rdparty/mesa32/src/x86-64/x86-64.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86-64/x86-64.c rename to dll/3rdparty/mesa32/src/x86-64/x86-64.c diff --git a/reactos/dll/3rdparty/mesa32/src/x86-64/x86-64.h b/dll/3rdparty/mesa32/src/x86-64/x86-64.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86-64/x86-64.h rename to dll/3rdparty/mesa32/src/x86-64/x86-64.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86-64/xform4.S b/dll/3rdparty/mesa32/src/x86-64/xform4.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86-64/xform4.S rename to dll/3rdparty/mesa32/src/x86-64/xform4.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/3dnow.c b/dll/3rdparty/mesa32/src/x86/3dnow.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/3dnow.c rename to dll/3rdparty/mesa32/src/x86/3dnow.c diff --git a/reactos/dll/3rdparty/mesa32/src/x86/3dnow.h b/dll/3rdparty/mesa32/src/x86/3dnow.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/3dnow.h rename to dll/3rdparty/mesa32/src/x86/3dnow.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/3dnow_normal.S b/dll/3rdparty/mesa32/src/x86/3dnow_normal.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/3dnow_normal.S rename to dll/3rdparty/mesa32/src/x86/3dnow_normal.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/3dnow_xform1.S b/dll/3rdparty/mesa32/src/x86/3dnow_xform1.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/3dnow_xform1.S rename to dll/3rdparty/mesa32/src/x86/3dnow_xform1.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/3dnow_xform2.S b/dll/3rdparty/mesa32/src/x86/3dnow_xform2.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/3dnow_xform2.S rename to dll/3rdparty/mesa32/src/x86/3dnow_xform2.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/3dnow_xform3.S b/dll/3rdparty/mesa32/src/x86/3dnow_xform3.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/3dnow_xform3.S rename to dll/3rdparty/mesa32/src/x86/3dnow_xform3.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/3dnow_xform4.S b/dll/3rdparty/mesa32/src/x86/3dnow_xform4.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/3dnow_xform4.S rename to dll/3rdparty/mesa32/src/x86/3dnow_xform4.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/Makefile b/dll/3rdparty/mesa32/src/x86/Makefile similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/Makefile rename to dll/3rdparty/mesa32/src/x86/Makefile diff --git a/reactos/dll/3rdparty/mesa32/src/x86/assyntax.h b/dll/3rdparty/mesa32/src/x86/assyntax.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/assyntax.h rename to dll/3rdparty/mesa32/src/x86/assyntax.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/clip_args.h b/dll/3rdparty/mesa32/src/x86/clip_args.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/clip_args.h rename to dll/3rdparty/mesa32/src/x86/clip_args.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/common_x86.c b/dll/3rdparty/mesa32/src/x86/common_x86.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/common_x86.c rename to dll/3rdparty/mesa32/src/x86/common_x86.c diff --git a/reactos/dll/3rdparty/mesa32/src/x86/common_x86_asm.S b/dll/3rdparty/mesa32/src/x86/common_x86_asm.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/common_x86_asm.S rename to dll/3rdparty/mesa32/src/x86/common_x86_asm.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/common_x86_asm.h b/dll/3rdparty/mesa32/src/x86/common_x86_asm.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/common_x86_asm.h rename to dll/3rdparty/mesa32/src/x86/common_x86_asm.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/common_x86_features.h b/dll/3rdparty/mesa32/src/x86/common_x86_features.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/common_x86_features.h rename to dll/3rdparty/mesa32/src/x86/common_x86_features.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/common_x86_macros.h b/dll/3rdparty/mesa32/src/x86/common_x86_macros.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/common_x86_macros.h rename to dll/3rdparty/mesa32/src/x86/common_x86_macros.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/gen_matypes.c b/dll/3rdparty/mesa32/src/x86/gen_matypes.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/gen_matypes.c rename to dll/3rdparty/mesa32/src/x86/gen_matypes.c diff --git a/reactos/dll/3rdparty/mesa32/src/x86/glapi_x86.S b/dll/3rdparty/mesa32/src/x86/glapi_x86.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/glapi_x86.S rename to dll/3rdparty/mesa32/src/x86/glapi_x86.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/matypes.h b/dll/3rdparty/mesa32/src/x86/matypes.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/matypes.h rename to dll/3rdparty/mesa32/src/x86/matypes.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/mmx.h b/dll/3rdparty/mesa32/src/x86/mmx.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/mmx.h rename to dll/3rdparty/mesa32/src/x86/mmx.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/mmx_blend.S b/dll/3rdparty/mesa32/src/x86/mmx_blend.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/mmx_blend.S rename to dll/3rdparty/mesa32/src/x86/mmx_blend.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/mmx_blendtmp.h b/dll/3rdparty/mesa32/src/x86/mmx_blendtmp.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/mmx_blendtmp.h rename to dll/3rdparty/mesa32/src/x86/mmx_blendtmp.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/norm_args.h b/dll/3rdparty/mesa32/src/x86/norm_args.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/norm_args.h rename to dll/3rdparty/mesa32/src/x86/norm_args.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/read_rgba_span_x86.S b/dll/3rdparty/mesa32/src/x86/read_rgba_span_x86.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/read_rgba_span_x86.S rename to dll/3rdparty/mesa32/src/x86/read_rgba_span_x86.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/read_rgba_span_x86.h b/dll/3rdparty/mesa32/src/x86/read_rgba_span_x86.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/read_rgba_span_x86.h rename to dll/3rdparty/mesa32/src/x86/read_rgba_span_x86.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/rtasm/x86sse.c b/dll/3rdparty/mesa32/src/x86/rtasm/x86sse.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/rtasm/x86sse.c rename to dll/3rdparty/mesa32/src/x86/rtasm/x86sse.c diff --git a/reactos/dll/3rdparty/mesa32/src/x86/rtasm/x86sse.h b/dll/3rdparty/mesa32/src/x86/rtasm/x86sse.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/rtasm/x86sse.h rename to dll/3rdparty/mesa32/src/x86/rtasm/x86sse.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/sse.c b/dll/3rdparty/mesa32/src/x86/sse.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/sse.c rename to dll/3rdparty/mesa32/src/x86/sse.c diff --git a/reactos/dll/3rdparty/mesa32/src/x86/sse.h b/dll/3rdparty/mesa32/src/x86/sse.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/sse.h rename to dll/3rdparty/mesa32/src/x86/sse.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/sse_normal.S b/dll/3rdparty/mesa32/src/x86/sse_normal.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/sse_normal.S rename to dll/3rdparty/mesa32/src/x86/sse_normal.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/sse_xform1.S b/dll/3rdparty/mesa32/src/x86/sse_xform1.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/sse_xform1.S rename to dll/3rdparty/mesa32/src/x86/sse_xform1.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/sse_xform2.S b/dll/3rdparty/mesa32/src/x86/sse_xform2.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/sse_xform2.S rename to dll/3rdparty/mesa32/src/x86/sse_xform2.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/sse_xform3.S b/dll/3rdparty/mesa32/src/x86/sse_xform3.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/sse_xform3.S rename to dll/3rdparty/mesa32/src/x86/sse_xform3.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/sse_xform4.S b/dll/3rdparty/mesa32/src/x86/sse_xform4.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/sse_xform4.S rename to dll/3rdparty/mesa32/src/x86/sse_xform4.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/x86.c b/dll/3rdparty/mesa32/src/x86/x86.c similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/x86.c rename to dll/3rdparty/mesa32/src/x86/x86.c diff --git a/reactos/dll/3rdparty/mesa32/src/x86/x86.h b/dll/3rdparty/mesa32/src/x86/x86.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/x86.h rename to dll/3rdparty/mesa32/src/x86/x86.h diff --git a/reactos/dll/3rdparty/mesa32/src/x86/x86_cliptest.S b/dll/3rdparty/mesa32/src/x86/x86_cliptest.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/x86_cliptest.S rename to dll/3rdparty/mesa32/src/x86/x86_cliptest.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/x86_xform2.S b/dll/3rdparty/mesa32/src/x86/x86_xform2.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/x86_xform2.S rename to dll/3rdparty/mesa32/src/x86/x86_xform2.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/x86_xform3.S b/dll/3rdparty/mesa32/src/x86/x86_xform3.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/x86_xform3.S rename to dll/3rdparty/mesa32/src/x86/x86_xform3.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/x86_xform4.S b/dll/3rdparty/mesa32/src/x86/x86_xform4.S similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/x86_xform4.S rename to dll/3rdparty/mesa32/src/x86/x86_xform4.S diff --git a/reactos/dll/3rdparty/mesa32/src/x86/xform_args.h b/dll/3rdparty/mesa32/src/x86/xform_args.h similarity index 100% rename from reactos/dll/3rdparty/mesa32/src/x86/xform_args.h rename to dll/3rdparty/mesa32/src/x86/xform_args.h diff --git a/reactos/dll/Doxyfile b/dll/Doxyfile similarity index 100% rename from reactos/dll/Doxyfile rename to dll/Doxyfile diff --git a/reactos/dll/cpl/access/access.c b/dll/cpl/access/access.c similarity index 100% rename from reactos/dll/cpl/access/access.c rename to dll/cpl/access/access.c diff --git a/reactos/dll/cpl/access/access.h b/dll/cpl/access/access.h similarity index 100% rename from reactos/dll/cpl/access/access.h rename to dll/cpl/access/access.h diff --git a/reactos/dll/cpl/access/access.rbuild b/dll/cpl/access/access.rbuild similarity index 100% rename from reactos/dll/cpl/access/access.rbuild rename to dll/cpl/access/access.rbuild diff --git a/reactos/dll/cpl/access/access.rc b/dll/cpl/access/access.rc similarity index 100% rename from reactos/dll/cpl/access/access.rc rename to dll/cpl/access/access.rc diff --git a/reactos/dll/cpl/access/access.spec b/dll/cpl/access/access.spec similarity index 100% rename from reactos/dll/cpl/access/access.spec rename to dll/cpl/access/access.spec diff --git a/reactos/dll/cpl/access/display.c b/dll/cpl/access/display.c similarity index 100% rename from reactos/dll/cpl/access/display.c rename to dll/cpl/access/display.c diff --git a/reactos/dll/cpl/access/general.c b/dll/cpl/access/general.c similarity index 100% rename from reactos/dll/cpl/access/general.c rename to dll/cpl/access/general.c diff --git a/reactos/dll/cpl/access/keyboard.c b/dll/cpl/access/keyboard.c similarity index 100% rename from reactos/dll/cpl/access/keyboard.c rename to dll/cpl/access/keyboard.c diff --git a/reactos/dll/cpl/access/lang/bg-BG.rc b/dll/cpl/access/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/access/lang/bg-BG.rc rename to dll/cpl/access/lang/bg-BG.rc diff --git a/reactos/dll/cpl/access/lang/cs-CZ.rc b/dll/cpl/access/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/access/lang/cs-CZ.rc rename to dll/cpl/access/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/access/lang/de-DE.rc b/dll/cpl/access/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/access/lang/de-DE.rc rename to dll/cpl/access/lang/de-DE.rc diff --git a/reactos/dll/cpl/access/lang/el-GR.rc b/dll/cpl/access/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/access/lang/el-GR.rc rename to dll/cpl/access/lang/el-GR.rc diff --git a/reactos/dll/cpl/access/lang/en-US.rc b/dll/cpl/access/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/access/lang/en-US.rc rename to dll/cpl/access/lang/en-US.rc diff --git a/reactos/dll/cpl/access/lang/es-ES.rc b/dll/cpl/access/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/access/lang/es-ES.rc rename to dll/cpl/access/lang/es-ES.rc diff --git a/reactos/dll/cpl/access/lang/fr-FR.rc b/dll/cpl/access/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/access/lang/fr-FR.rc rename to dll/cpl/access/lang/fr-FR.rc diff --git a/reactos/dll/cpl/access/lang/hu-HU.rc b/dll/cpl/access/lang/hu-HU.rc similarity index 100% rename from reactos/dll/cpl/access/lang/hu-HU.rc rename to dll/cpl/access/lang/hu-HU.rc diff --git a/reactos/dll/cpl/access/lang/id-ID.rc b/dll/cpl/access/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/access/lang/id-ID.rc rename to dll/cpl/access/lang/id-ID.rc diff --git a/reactos/dll/cpl/access/lang/it-IT.rc b/dll/cpl/access/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/access/lang/it-IT.rc rename to dll/cpl/access/lang/it-IT.rc diff --git a/reactos/dll/cpl/access/lang/ja-JP.rc b/dll/cpl/access/lang/ja-JP.rc similarity index 100% rename from reactos/dll/cpl/access/lang/ja-JP.rc rename to dll/cpl/access/lang/ja-JP.rc diff --git a/reactos/dll/cpl/access/lang/nl-NL.rc b/dll/cpl/access/lang/nl-NL.rc similarity index 100% rename from reactos/dll/cpl/access/lang/nl-NL.rc rename to dll/cpl/access/lang/nl-NL.rc diff --git a/reactos/dll/cpl/access/lang/no-NO.rc b/dll/cpl/access/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/access/lang/no-NO.rc rename to dll/cpl/access/lang/no-NO.rc diff --git a/reactos/dll/cpl/access/lang/pl-PL.rc b/dll/cpl/access/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/access/lang/pl-PL.rc rename to dll/cpl/access/lang/pl-PL.rc diff --git a/reactos/dll/cpl/access/lang/ru-RU.rc b/dll/cpl/access/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/access/lang/ru-RU.rc rename to dll/cpl/access/lang/ru-RU.rc diff --git a/reactos/dll/cpl/access/lang/sk-SK.rc b/dll/cpl/access/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/access/lang/sk-SK.rc rename to dll/cpl/access/lang/sk-SK.rc diff --git a/reactos/dll/cpl/access/lang/uk-UA.rc b/dll/cpl/access/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/access/lang/uk-UA.rc rename to dll/cpl/access/lang/uk-UA.rc diff --git a/reactos/dll/cpl/access/lang/zh-CN.rc b/dll/cpl/access/lang/zh-CN.rc similarity index 100% rename from reactos/dll/cpl/access/lang/zh-CN.rc rename to dll/cpl/access/lang/zh-CN.rc diff --git a/reactos/dll/cpl/access/mouse.c b/dll/cpl/access/mouse.c similarity index 100% rename from reactos/dll/cpl/access/mouse.c rename to dll/cpl/access/mouse.c diff --git a/reactos/dll/cpl/access/resource.h b/dll/cpl/access/resource.h similarity index 100% rename from reactos/dll/cpl/access/resource.h rename to dll/cpl/access/resource.h diff --git a/reactos/dll/cpl/access/resources/applet.ico b/dll/cpl/access/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/access/resources/applet.ico rename to dll/cpl/access/resources/applet.ico diff --git a/reactos/dll/cpl/access/rsrc.rc b/dll/cpl/access/rsrc.rc similarity index 100% rename from reactos/dll/cpl/access/rsrc.rc rename to dll/cpl/access/rsrc.rc diff --git a/reactos/dll/cpl/access/sound.c b/dll/cpl/access/sound.c similarity index 100% rename from reactos/dll/cpl/access/sound.c rename to dll/cpl/access/sound.c diff --git a/reactos/dll/cpl/appwiz-new/appwiz.c b/dll/cpl/appwiz-new/appwiz.c similarity index 100% rename from reactos/dll/cpl/appwiz-new/appwiz.c rename to dll/cpl/appwiz-new/appwiz.c diff --git a/reactos/dll/cpl/appwiz-new/appwiz.def b/dll/cpl/appwiz-new/appwiz.def similarity index 100% rename from reactos/dll/cpl/appwiz-new/appwiz.def rename to dll/cpl/appwiz-new/appwiz.def diff --git a/reactos/dll/cpl/appwiz-new/appwiz.h b/dll/cpl/appwiz-new/appwiz.h similarity index 100% rename from reactos/dll/cpl/appwiz-new/appwiz.h rename to dll/cpl/appwiz-new/appwiz.h diff --git a/reactos/dll/cpl/appwiz-new/appwiz.rbuild b/dll/cpl/appwiz-new/appwiz.rbuild similarity index 100% rename from reactos/dll/cpl/appwiz-new/appwiz.rbuild rename to dll/cpl/appwiz-new/appwiz.rbuild diff --git a/reactos/dll/cpl/appwiz-new/appwiz.rc b/dll/cpl/appwiz-new/appwiz.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/appwiz.rc rename to dll/cpl/appwiz-new/appwiz.rc diff --git a/reactos/dll/cpl/appwiz-new/createlink.c b/dll/cpl/appwiz-new/createlink.c similarity index 100% rename from reactos/dll/cpl/appwiz-new/createlink.c rename to dll/cpl/appwiz-new/createlink.c diff --git a/reactos/dll/cpl/appwiz-new/lang/bg-BG.rc b/dll/cpl/appwiz-new/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/bg-BG.rc rename to dll/cpl/appwiz-new/lang/bg-BG.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc b/dll/cpl/appwiz-new/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc rename to dll/cpl/appwiz-new/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/de-DE.rc b/dll/cpl/appwiz-new/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/de-DE.rc rename to dll/cpl/appwiz-new/lang/de-DE.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/en-US.rc b/dll/cpl/appwiz-new/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/en-US.rc rename to dll/cpl/appwiz-new/lang/en-US.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/es-ES.rc b/dll/cpl/appwiz-new/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/es-ES.rc rename to dll/cpl/appwiz-new/lang/es-ES.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/fr-FR.rc b/dll/cpl/appwiz-new/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/fr-FR.rc rename to dll/cpl/appwiz-new/lang/fr-FR.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/it-IT.rc b/dll/cpl/appwiz-new/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/it-IT.rc rename to dll/cpl/appwiz-new/lang/it-IT.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/no-NO.rc b/dll/cpl/appwiz-new/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/no-NO.rc rename to dll/cpl/appwiz-new/lang/no-NO.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/pl-PL.rc b/dll/cpl/appwiz-new/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/pl-PL.rc rename to dll/cpl/appwiz-new/lang/pl-PL.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/ru-RU.rc b/dll/cpl/appwiz-new/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/ru-RU.rc rename to dll/cpl/appwiz-new/lang/ru-RU.rc diff --git a/reactos/dll/cpl/appwiz-new/lang/uk-UA.rc b/dll/cpl/appwiz-new/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/lang/uk-UA.rc rename to dll/cpl/appwiz-new/lang/uk-UA.rc diff --git a/reactos/dll/cpl/appwiz-new/resource.h b/dll/cpl/appwiz-new/resource.h similarity index 100% rename from reactos/dll/cpl/appwiz-new/resource.h rename to dll/cpl/appwiz-new/resource.h diff --git a/reactos/dll/cpl/appwiz-new/resources/1501.ico b/dll/cpl/appwiz-new/resources/1501.ico similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/1501.ico rename to dll/cpl/appwiz-new/resources/1501.ico diff --git a/reactos/dll/cpl/appwiz-new/resources/1502.ico b/dll/cpl/appwiz-new/resources/1502.ico similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/1502.ico rename to dll/cpl/appwiz-new/resources/1502.ico diff --git a/reactos/dll/cpl/appwiz-new/resources/1503.ico b/dll/cpl/appwiz-new/resources/1503.ico similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/1503.ico rename to dll/cpl/appwiz-new/resources/1503.ico diff --git a/reactos/dll/cpl/appwiz-new/resources/applet.ico b/dll/cpl/appwiz-new/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/applet.ico rename to dll/cpl/appwiz-new/resources/applet.ico diff --git a/reactos/dll/cpl/appwiz-new/resources/icon.bmp b/dll/cpl/appwiz-new/resources/icon.bmp similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/icon.bmp rename to dll/cpl/appwiz-new/resources/icon.bmp diff --git a/reactos/dll/cpl/appwiz-new/resources/search.ico b/dll/cpl/appwiz-new/resources/search.ico similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/search.ico rename to dll/cpl/appwiz-new/resources/search.ico diff --git a/reactos/dll/cpl/appwiz-new/resources/select.bmp b/dll/cpl/appwiz-new/resources/select.bmp similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/select.bmp rename to dll/cpl/appwiz-new/resources/select.bmp diff --git a/reactos/dll/cpl/appwiz-new/resources/underline.bmp b/dll/cpl/appwiz-new/resources/underline.bmp similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/underline.bmp rename to dll/cpl/appwiz-new/resources/underline.bmp diff --git a/reactos/dll/cpl/appwiz-new/resources/watermark.bmp b/dll/cpl/appwiz-new/resources/watermark.bmp similarity index 100% rename from reactos/dll/cpl/appwiz-new/resources/watermark.bmp rename to dll/cpl/appwiz-new/resources/watermark.bmp diff --git a/reactos/dll/cpl/appwiz-new/rsrc.rc b/dll/cpl/appwiz-new/rsrc.rc similarity index 100% rename from reactos/dll/cpl/appwiz-new/rsrc.rc rename to dll/cpl/appwiz-new/rsrc.rc diff --git a/reactos/dll/cpl/appwiz/add.c b/dll/cpl/appwiz/add.c similarity index 100% rename from reactos/dll/cpl/appwiz/add.c rename to dll/cpl/appwiz/add.c diff --git a/reactos/dll/cpl/appwiz/appwiz.c b/dll/cpl/appwiz/appwiz.c similarity index 100% rename from reactos/dll/cpl/appwiz/appwiz.c rename to dll/cpl/appwiz/appwiz.c diff --git a/reactos/dll/cpl/appwiz/appwiz.def b/dll/cpl/appwiz/appwiz.def similarity index 100% rename from reactos/dll/cpl/appwiz/appwiz.def rename to dll/cpl/appwiz/appwiz.def diff --git a/reactos/dll/cpl/appwiz/appwiz.dsp b/dll/cpl/appwiz/appwiz.dsp similarity index 100% rename from reactos/dll/cpl/appwiz/appwiz.dsp rename to dll/cpl/appwiz/appwiz.dsp diff --git a/reactos/dll/cpl/appwiz/appwiz.dsw b/dll/cpl/appwiz/appwiz.dsw similarity index 100% rename from reactos/dll/cpl/appwiz/appwiz.dsw rename to dll/cpl/appwiz/appwiz.dsw diff --git a/reactos/dll/cpl/appwiz/appwiz.h b/dll/cpl/appwiz/appwiz.h similarity index 100% rename from reactos/dll/cpl/appwiz/appwiz.h rename to dll/cpl/appwiz/appwiz.h diff --git a/reactos/dll/cpl/appwiz/appwiz.rbuild b/dll/cpl/appwiz/appwiz.rbuild similarity index 100% rename from reactos/dll/cpl/appwiz/appwiz.rbuild rename to dll/cpl/appwiz/appwiz.rbuild diff --git a/reactos/dll/cpl/appwiz/appwiz.rc b/dll/cpl/appwiz/appwiz.rc similarity index 100% rename from reactos/dll/cpl/appwiz/appwiz.rc rename to dll/cpl/appwiz/appwiz.rc diff --git a/reactos/dll/cpl/appwiz/createlink.c b/dll/cpl/appwiz/createlink.c similarity index 100% rename from reactos/dll/cpl/appwiz/createlink.c rename to dll/cpl/appwiz/createlink.c diff --git a/reactos/dll/cpl/appwiz/lang/bg-BG.rc b/dll/cpl/appwiz/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/bg-BG.rc rename to dll/cpl/appwiz/lang/bg-BG.rc diff --git a/reactos/dll/cpl/appwiz/lang/cs-CZ.rc b/dll/cpl/appwiz/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/cs-CZ.rc rename to dll/cpl/appwiz/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/appwiz/lang/de-DE.rc b/dll/cpl/appwiz/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/de-DE.rc rename to dll/cpl/appwiz/lang/de-DE.rc diff --git a/reactos/dll/cpl/appwiz/lang/el-GR.rc b/dll/cpl/appwiz/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/el-GR.rc rename to dll/cpl/appwiz/lang/el-GR.rc diff --git a/reactos/dll/cpl/appwiz/lang/en-US.rc b/dll/cpl/appwiz/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/en-US.rc rename to dll/cpl/appwiz/lang/en-US.rc diff --git a/reactos/dll/cpl/appwiz/lang/es-ES.rc b/dll/cpl/appwiz/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/es-ES.rc rename to dll/cpl/appwiz/lang/es-ES.rc diff --git a/reactos/dll/cpl/appwiz/lang/fr-FR.rc b/dll/cpl/appwiz/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/fr-FR.rc rename to dll/cpl/appwiz/lang/fr-FR.rc diff --git a/reactos/dll/cpl/appwiz/lang/it-IT.rc b/dll/cpl/appwiz/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/it-IT.rc rename to dll/cpl/appwiz/lang/it-IT.rc diff --git a/reactos/dll/cpl/appwiz/lang/no-NO.rc b/dll/cpl/appwiz/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/no-NO.rc rename to dll/cpl/appwiz/lang/no-NO.rc diff --git a/reactos/dll/cpl/appwiz/lang/pl-PL.rc b/dll/cpl/appwiz/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/pl-PL.rc rename to dll/cpl/appwiz/lang/pl-PL.rc diff --git a/reactos/dll/cpl/appwiz/lang/ru-RU.rc b/dll/cpl/appwiz/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/ru-RU.rc rename to dll/cpl/appwiz/lang/ru-RU.rc diff --git a/reactos/dll/cpl/appwiz/lang/sk-SK.rc b/dll/cpl/appwiz/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/sk-SK.rc rename to dll/cpl/appwiz/lang/sk-SK.rc diff --git a/reactos/dll/cpl/appwiz/lang/uk-UA.rc b/dll/cpl/appwiz/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/appwiz/lang/uk-UA.rc rename to dll/cpl/appwiz/lang/uk-UA.rc diff --git a/reactos/dll/cpl/appwiz/remove.c b/dll/cpl/appwiz/remove.c similarity index 100% rename from reactos/dll/cpl/appwiz/remove.c rename to dll/cpl/appwiz/remove.c diff --git a/reactos/dll/cpl/appwiz/resource.h b/dll/cpl/appwiz/resource.h similarity index 100% rename from reactos/dll/cpl/appwiz/resource.h rename to dll/cpl/appwiz/resource.h diff --git a/reactos/dll/cpl/appwiz/resources/1501.ico b/dll/cpl/appwiz/resources/1501.ico similarity index 100% rename from reactos/dll/cpl/appwiz/resources/1501.ico rename to dll/cpl/appwiz/resources/1501.ico diff --git a/reactos/dll/cpl/appwiz/resources/1502.ico b/dll/cpl/appwiz/resources/1502.ico similarity index 100% rename from reactos/dll/cpl/appwiz/resources/1502.ico rename to dll/cpl/appwiz/resources/1502.ico diff --git a/reactos/dll/cpl/appwiz/resources/1503.ico b/dll/cpl/appwiz/resources/1503.ico similarity index 100% rename from reactos/dll/cpl/appwiz/resources/1503.ico rename to dll/cpl/appwiz/resources/1503.ico diff --git a/reactos/dll/cpl/appwiz/resources/1504.ico b/dll/cpl/appwiz/resources/1504.ico similarity index 100% rename from reactos/dll/cpl/appwiz/resources/1504.ico rename to dll/cpl/appwiz/resources/1504.ico diff --git a/reactos/dll/cpl/appwiz/resources/1505.ico b/dll/cpl/appwiz/resources/1505.ico similarity index 100% rename from reactos/dll/cpl/appwiz/resources/1505.ico rename to dll/cpl/appwiz/resources/1505.ico diff --git a/reactos/dll/cpl/appwiz/resources/applet.ico b/dll/cpl/appwiz/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/appwiz/resources/applet.ico rename to dll/cpl/appwiz/resources/applet.ico diff --git a/reactos/dll/cpl/appwiz/resources/reactos.ico b/dll/cpl/appwiz/resources/reactos.ico similarity index 100% rename from reactos/dll/cpl/appwiz/resources/reactos.ico rename to dll/cpl/appwiz/resources/reactos.ico diff --git a/reactos/dll/cpl/appwiz/resources/updates.ico b/dll/cpl/appwiz/resources/updates.ico similarity index 100% rename from reactos/dll/cpl/appwiz/resources/updates.ico rename to dll/cpl/appwiz/resources/updates.ico diff --git a/reactos/dll/cpl/appwiz/resources/watermark.bmp b/dll/cpl/appwiz/resources/watermark.bmp similarity index 100% rename from reactos/dll/cpl/appwiz/resources/watermark.bmp rename to dll/cpl/appwiz/resources/watermark.bmp diff --git a/reactos/dll/cpl/appwiz/rossetup.c b/dll/cpl/appwiz/rossetup.c similarity index 100% rename from reactos/dll/cpl/appwiz/rossetup.c rename to dll/cpl/appwiz/rossetup.c diff --git a/reactos/dll/cpl/appwiz/rsrc.rc b/dll/cpl/appwiz/rsrc.rc similarity index 100% rename from reactos/dll/cpl/appwiz/rsrc.rc rename to dll/cpl/appwiz/rsrc.rc diff --git a/reactos/dll/cpl/appwiz/updates.c b/dll/cpl/appwiz/updates.c similarity index 100% rename from reactos/dll/cpl/appwiz/updates.c rename to dll/cpl/appwiz/updates.c diff --git a/reactos/dll/cpl/console/colors.c b/dll/cpl/console/colors.c similarity index 100% rename from reactos/dll/cpl/console/colors.c rename to dll/cpl/console/colors.c diff --git a/reactos/dll/cpl/console/console.c b/dll/cpl/console/console.c similarity index 100% rename from reactos/dll/cpl/console/console.c rename to dll/cpl/console/console.c diff --git a/reactos/dll/cpl/console/console.h b/dll/cpl/console/console.h similarity index 100% rename from reactos/dll/cpl/console/console.h rename to dll/cpl/console/console.h diff --git a/reactos/dll/cpl/console/console.rbuild b/dll/cpl/console/console.rbuild similarity index 100% rename from reactos/dll/cpl/console/console.rbuild rename to dll/cpl/console/console.rbuild diff --git a/reactos/dll/cpl/console/console.rc b/dll/cpl/console/console.rc similarity index 100% rename from reactos/dll/cpl/console/console.rc rename to dll/cpl/console/console.rc diff --git a/reactos/dll/cpl/console/console.spec b/dll/cpl/console/console.spec similarity index 100% rename from reactos/dll/cpl/console/console.spec rename to dll/cpl/console/console.spec diff --git a/reactos/dll/cpl/console/font.c b/dll/cpl/console/font.c similarity index 100% rename from reactos/dll/cpl/console/font.c rename to dll/cpl/console/font.c diff --git a/reactos/dll/cpl/console/lang/cs-CZ.rc b/dll/cpl/console/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/console/lang/cs-CZ.rc rename to dll/cpl/console/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/console/lang/de-DE.rc b/dll/cpl/console/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/console/lang/de-DE.rc rename to dll/cpl/console/lang/de-DE.rc diff --git a/reactos/dll/cpl/console/lang/en-US.rc b/dll/cpl/console/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/console/lang/en-US.rc rename to dll/cpl/console/lang/en-US.rc diff --git a/reactos/dll/cpl/console/lang/es-ES.rc b/dll/cpl/console/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/console/lang/es-ES.rc rename to dll/cpl/console/lang/es-ES.rc diff --git a/reactos/dll/cpl/console/lang/id-ID.rc b/dll/cpl/console/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/console/lang/id-ID.rc rename to dll/cpl/console/lang/id-ID.rc diff --git a/reactos/dll/cpl/console/lang/it-IT.rc b/dll/cpl/console/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/console/lang/it-IT.rc rename to dll/cpl/console/lang/it-IT.rc diff --git a/reactos/dll/cpl/console/lang/no-NO.rc b/dll/cpl/console/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/console/lang/no-NO.rc rename to dll/cpl/console/lang/no-NO.rc diff --git a/reactos/dll/cpl/console/lang/pl-PL.rc b/dll/cpl/console/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/console/lang/pl-PL.rc rename to dll/cpl/console/lang/pl-PL.rc diff --git a/reactos/dll/cpl/console/lang/ru-RU.rc b/dll/cpl/console/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/console/lang/ru-RU.rc rename to dll/cpl/console/lang/ru-RU.rc diff --git a/reactos/dll/cpl/console/lang/sk-SK.rc b/dll/cpl/console/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/console/lang/sk-SK.rc rename to dll/cpl/console/lang/sk-SK.rc diff --git a/reactos/dll/cpl/console/lang/uk-UA.rc b/dll/cpl/console/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/console/lang/uk-UA.rc rename to dll/cpl/console/lang/uk-UA.rc diff --git a/reactos/dll/cpl/console/layout.c b/dll/cpl/console/layout.c similarity index 100% rename from reactos/dll/cpl/console/layout.c rename to dll/cpl/console/layout.c diff --git a/reactos/dll/cpl/console/options.c b/dll/cpl/console/options.c similarity index 100% rename from reactos/dll/cpl/console/options.c rename to dll/cpl/console/options.c diff --git a/reactos/dll/cpl/console/resource.h b/dll/cpl/console/resource.h similarity index 100% rename from reactos/dll/cpl/console/resource.h rename to dll/cpl/console/resource.h diff --git a/reactos/dll/cpl/console/rsrc.rc b/dll/cpl/console/rsrc.rc similarity index 100% rename from reactos/dll/cpl/console/rsrc.rc rename to dll/cpl/console/rsrc.rc diff --git a/reactos/dll/cpl/cpl.rbuild b/dll/cpl/cpl.rbuild similarity index 100% rename from reactos/dll/cpl/cpl.rbuild rename to dll/cpl/cpl.rbuild diff --git a/reactos/dll/cpl/desk/advappdlg.c b/dll/cpl/desk/advappdlg.c similarity index 100% rename from reactos/dll/cpl/desk/advappdlg.c rename to dll/cpl/desk/advappdlg.c diff --git a/reactos/dll/cpl/desk/advmon.c b/dll/cpl/desk/advmon.c similarity index 100% rename from reactos/dll/cpl/desk/advmon.c rename to dll/cpl/desk/advmon.c diff --git a/reactos/dll/cpl/desk/appearance.c b/dll/cpl/desk/appearance.c similarity index 100% rename from reactos/dll/cpl/desk/appearance.c rename to dll/cpl/desk/appearance.c diff --git a/reactos/dll/cpl/desk/appearance.h b/dll/cpl/desk/appearance.h similarity index 100% rename from reactos/dll/cpl/desk/appearance.h rename to dll/cpl/desk/appearance.h diff --git a/reactos/dll/cpl/desk/background.c b/dll/cpl/desk/background.c similarity index 100% rename from reactos/dll/cpl/desk/background.c rename to dll/cpl/desk/background.c diff --git a/reactos/dll/cpl/desk/classinst.c b/dll/cpl/desk/classinst.c similarity index 100% rename from reactos/dll/cpl/desk/classinst.c rename to dll/cpl/desk/classinst.c diff --git a/reactos/dll/cpl/desk/desk.c b/dll/cpl/desk/desk.c similarity index 100% rename from reactos/dll/cpl/desk/desk.c rename to dll/cpl/desk/desk.c diff --git a/reactos/dll/cpl/desk/desk.def b/dll/cpl/desk/desk.def similarity index 100% rename from reactos/dll/cpl/desk/desk.def rename to dll/cpl/desk/desk.def diff --git a/reactos/dll/cpl/desk/desk.h b/dll/cpl/desk/desk.h similarity index 100% rename from reactos/dll/cpl/desk/desk.h rename to dll/cpl/desk/desk.h diff --git a/reactos/dll/cpl/desk/desk.rbuild b/dll/cpl/desk/desk.rbuild similarity index 100% rename from reactos/dll/cpl/desk/desk.rbuild rename to dll/cpl/desk/desk.rbuild diff --git a/reactos/dll/cpl/desk/desk.rc b/dll/cpl/desk/desk.rc similarity index 100% rename from reactos/dll/cpl/desk/desk.rc rename to dll/cpl/desk/desk.rc diff --git a/reactos/dll/cpl/desk/devsett.c b/dll/cpl/desk/devsett.c similarity index 100% rename from reactos/dll/cpl/desk/devsett.c rename to dll/cpl/desk/devsett.c diff --git a/reactos/dll/cpl/desk/dibitmap.c b/dll/cpl/desk/dibitmap.c similarity index 100% rename from reactos/dll/cpl/desk/dibitmap.c rename to dll/cpl/desk/dibitmap.c diff --git a/reactos/dll/cpl/desk/general.c b/dll/cpl/desk/general.c similarity index 100% rename from reactos/dll/cpl/desk/general.c rename to dll/cpl/desk/general.c diff --git a/reactos/dll/cpl/desk/lang/bg-BG.rc b/dll/cpl/desk/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/bg-BG.rc rename to dll/cpl/desk/lang/bg-BG.rc diff --git a/reactos/dll/cpl/desk/lang/cs-CZ.rc b/dll/cpl/desk/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/cs-CZ.rc rename to dll/cpl/desk/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/desk/lang/de-DE.rc b/dll/cpl/desk/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/de-DE.rc rename to dll/cpl/desk/lang/de-DE.rc diff --git a/reactos/dll/cpl/desk/lang/el-GR.rc b/dll/cpl/desk/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/el-GR.rc rename to dll/cpl/desk/lang/el-GR.rc diff --git a/reactos/dll/cpl/desk/lang/en-US.rc b/dll/cpl/desk/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/en-US.rc rename to dll/cpl/desk/lang/en-US.rc diff --git a/reactos/dll/cpl/desk/lang/es-ES.rc b/dll/cpl/desk/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/es-ES.rc rename to dll/cpl/desk/lang/es-ES.rc diff --git a/reactos/dll/cpl/desk/lang/fr-FR.rc b/dll/cpl/desk/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/fr-FR.rc rename to dll/cpl/desk/lang/fr-FR.rc diff --git a/reactos/dll/cpl/desk/lang/hu-HU.rc b/dll/cpl/desk/lang/hu-HU.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/hu-HU.rc rename to dll/cpl/desk/lang/hu-HU.rc diff --git a/reactos/dll/cpl/desk/lang/id-ID.rc b/dll/cpl/desk/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/id-ID.rc rename to dll/cpl/desk/lang/id-ID.rc diff --git a/reactos/dll/cpl/desk/lang/it-IT.rc b/dll/cpl/desk/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/it-IT.rc rename to dll/cpl/desk/lang/it-IT.rc diff --git a/reactos/dll/cpl/desk/lang/ja-JP.rc b/dll/cpl/desk/lang/ja-JP.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/ja-JP.rc rename to dll/cpl/desk/lang/ja-JP.rc diff --git a/reactos/dll/cpl/desk/lang/nl-NL.rc b/dll/cpl/desk/lang/nl-NL.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/nl-NL.rc rename to dll/cpl/desk/lang/nl-NL.rc diff --git a/reactos/dll/cpl/desk/lang/no-NO.rc b/dll/cpl/desk/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/no-NO.rc rename to dll/cpl/desk/lang/no-NO.rc diff --git a/reactos/dll/cpl/desk/lang/pl-PL.rc b/dll/cpl/desk/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/pl-PL.rc rename to dll/cpl/desk/lang/pl-PL.rc diff --git a/reactos/dll/cpl/desk/lang/ru-RU.rc b/dll/cpl/desk/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/ru-RU.rc rename to dll/cpl/desk/lang/ru-RU.rc diff --git a/reactos/dll/cpl/desk/lang/sk-SK.rc b/dll/cpl/desk/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/sk-SK.rc rename to dll/cpl/desk/lang/sk-SK.rc diff --git a/reactos/dll/cpl/desk/lang/sv-SE.rc b/dll/cpl/desk/lang/sv-SE.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/sv-SE.rc rename to dll/cpl/desk/lang/sv-SE.rc diff --git a/reactos/dll/cpl/desk/lang/uk-UA.rc b/dll/cpl/desk/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/uk-UA.rc rename to dll/cpl/desk/lang/uk-UA.rc diff --git a/reactos/dll/cpl/desk/lang/zh-CN.rc b/dll/cpl/desk/lang/zh-CN.rc similarity index 100% rename from reactos/dll/cpl/desk/lang/zh-CN.rc rename to dll/cpl/desk/lang/zh-CN.rc diff --git a/reactos/dll/cpl/desk/misc.c b/dll/cpl/desk/misc.c similarity index 100% rename from reactos/dll/cpl/desk/misc.c rename to dll/cpl/desk/misc.c diff --git a/reactos/dll/cpl/desk/monslctl.c b/dll/cpl/desk/monslctl.c similarity index 100% rename from reactos/dll/cpl/desk/monslctl.c rename to dll/cpl/desk/monslctl.c diff --git a/reactos/dll/cpl/desk/monslctl.h b/dll/cpl/desk/monslctl.h similarity index 100% rename from reactos/dll/cpl/desk/monslctl.h rename to dll/cpl/desk/monslctl.h diff --git a/reactos/dll/cpl/desk/preview.c b/dll/cpl/desk/preview.c similarity index 100% rename from reactos/dll/cpl/desk/preview.c rename to dll/cpl/desk/preview.c diff --git a/reactos/dll/cpl/desk/preview.h b/dll/cpl/desk/preview.h similarity index 100% rename from reactos/dll/cpl/desk/preview.h rename to dll/cpl/desk/preview.h diff --git a/reactos/dll/cpl/desk/resource.h b/dll/cpl/desk/resource.h similarity index 100% rename from reactos/dll/cpl/desk/resource.h rename to dll/cpl/desk/resource.h diff --git a/reactos/dll/cpl/desk/resources/applet.ico b/dll/cpl/desk/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/desk/resources/applet.ico rename to dll/cpl/desk/resources/applet.ico diff --git a/reactos/dll/cpl/desk/resources/monitor.bmp b/dll/cpl/desk/resources/monitor.bmp similarity index 100% rename from reactos/dll/cpl/desk/resources/monitor.bmp rename to dll/cpl/desk/resources/monitor.bmp diff --git a/reactos/dll/cpl/desk/resources/spectrum_16.bmp b/dll/cpl/desk/resources/spectrum_16.bmp similarity index 100% rename from reactos/dll/cpl/desk/resources/spectrum_16.bmp rename to dll/cpl/desk/resources/spectrum_16.bmp diff --git a/reactos/dll/cpl/desk/resources/spectrum_4.bmp b/dll/cpl/desk/resources/spectrum_4.bmp similarity index 100% rename from reactos/dll/cpl/desk/resources/spectrum_4.bmp rename to dll/cpl/desk/resources/spectrum_4.bmp diff --git a/reactos/dll/cpl/desk/resources/spectrum_8.bmp b/dll/cpl/desk/resources/spectrum_8.bmp similarity index 100% rename from reactos/dll/cpl/desk/resources/spectrum_8.bmp rename to dll/cpl/desk/resources/spectrum_8.bmp diff --git a/reactos/dll/cpl/desk/rsrc.rc b/dll/cpl/desk/rsrc.rc similarity index 100% rename from reactos/dll/cpl/desk/rsrc.rc rename to dll/cpl/desk/rsrc.rc diff --git a/reactos/dll/cpl/desk/screensaver.c b/dll/cpl/desk/screensaver.c similarity index 100% rename from reactos/dll/cpl/desk/screensaver.c rename to dll/cpl/desk/screensaver.c diff --git a/reactos/dll/cpl/desk/settings.c b/dll/cpl/desk/settings.c similarity index 100% rename from reactos/dll/cpl/desk/settings.c rename to dll/cpl/desk/settings.c diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.c b/dll/cpl/hdwwiz/hdwwiz.c similarity index 100% rename from reactos/dll/cpl/hdwwiz/hdwwiz.c rename to dll/cpl/hdwwiz/hdwwiz.c diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.h b/dll/cpl/hdwwiz/hdwwiz.h similarity index 100% rename from reactos/dll/cpl/hdwwiz/hdwwiz.h rename to dll/cpl/hdwwiz/hdwwiz.h diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild b/dll/cpl/hdwwiz/hdwwiz.rbuild similarity index 100% rename from reactos/dll/cpl/hdwwiz/hdwwiz.rbuild rename to dll/cpl/hdwwiz/hdwwiz.rbuild diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.rc b/dll/cpl/hdwwiz/hdwwiz.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/hdwwiz.rc rename to dll/cpl/hdwwiz/hdwwiz.rc diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.spec b/dll/cpl/hdwwiz/hdwwiz.spec similarity index 100% rename from reactos/dll/cpl/hdwwiz/hdwwiz.spec rename to dll/cpl/hdwwiz/hdwwiz.spec diff --git a/reactos/dll/cpl/hdwwiz/lang/bg-BG.rc b/dll/cpl/hdwwiz/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/bg-BG.rc rename to dll/cpl/hdwwiz/lang/bg-BG.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/cs-CZ.rc b/dll/cpl/hdwwiz/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/cs-CZ.rc rename to dll/cpl/hdwwiz/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/de-DE.rc b/dll/cpl/hdwwiz/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/de-DE.rc rename to dll/cpl/hdwwiz/lang/de-DE.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/el-GR.rc b/dll/cpl/hdwwiz/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/el-GR.rc rename to dll/cpl/hdwwiz/lang/el-GR.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/en-US.rc b/dll/cpl/hdwwiz/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/en-US.rc rename to dll/cpl/hdwwiz/lang/en-US.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/es-ES.rc b/dll/cpl/hdwwiz/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/es-ES.rc rename to dll/cpl/hdwwiz/lang/es-ES.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/fr-FR.rc b/dll/cpl/hdwwiz/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/fr-FR.rc rename to dll/cpl/hdwwiz/lang/fr-FR.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/hu-HU.rc b/dll/cpl/hdwwiz/lang/hu-HU.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/hu-HU.rc rename to dll/cpl/hdwwiz/lang/hu-HU.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/id-ID.rc b/dll/cpl/hdwwiz/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/id-ID.rc rename to dll/cpl/hdwwiz/lang/id-ID.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/it-IT.rc b/dll/cpl/hdwwiz/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/it-IT.rc rename to dll/cpl/hdwwiz/lang/it-IT.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/ja-JP.rc b/dll/cpl/hdwwiz/lang/ja-JP.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/ja-JP.rc rename to dll/cpl/hdwwiz/lang/ja-JP.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/nl-NL.rc b/dll/cpl/hdwwiz/lang/nl-NL.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/nl-NL.rc rename to dll/cpl/hdwwiz/lang/nl-NL.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/no-NO.rc b/dll/cpl/hdwwiz/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/no-NO.rc rename to dll/cpl/hdwwiz/lang/no-NO.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/pl-PL.rc b/dll/cpl/hdwwiz/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/pl-PL.rc rename to dll/cpl/hdwwiz/lang/pl-PL.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/pt-BR.rc b/dll/cpl/hdwwiz/lang/pt-BR.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/pt-BR.rc rename to dll/cpl/hdwwiz/lang/pt-BR.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/ru-RU.rc b/dll/cpl/hdwwiz/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/ru-RU.rc rename to dll/cpl/hdwwiz/lang/ru-RU.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/sk-SK.rc b/dll/cpl/hdwwiz/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/sk-SK.rc rename to dll/cpl/hdwwiz/lang/sk-SK.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/th-TH.rc b/dll/cpl/hdwwiz/lang/th-TH.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/th-TH.rc rename to dll/cpl/hdwwiz/lang/th-TH.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/uk-UA.rc b/dll/cpl/hdwwiz/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/uk-UA.rc rename to dll/cpl/hdwwiz/lang/uk-UA.rc diff --git a/reactos/dll/cpl/hdwwiz/lang/zh-CN.rc b/dll/cpl/hdwwiz/lang/zh-CN.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/lang/zh-CN.rc rename to dll/cpl/hdwwiz/lang/zh-CN.rc diff --git a/reactos/dll/cpl/hdwwiz/resource.h b/dll/cpl/hdwwiz/resource.h similarity index 100% rename from reactos/dll/cpl/hdwwiz/resource.h rename to dll/cpl/hdwwiz/resource.h diff --git a/reactos/dll/cpl/hdwwiz/resources/applet.ico b/dll/cpl/hdwwiz/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/hdwwiz/resources/applet.ico rename to dll/cpl/hdwwiz/resources/applet.ico diff --git a/reactos/dll/cpl/hdwwiz/rsrc.rc b/dll/cpl/hdwwiz/rsrc.rc similarity index 100% rename from reactos/dll/cpl/hdwwiz/rsrc.rc rename to dll/cpl/hdwwiz/rsrc.rc diff --git a/reactos/dll/cpl/input/add.c b/dll/cpl/input/add.c similarity index 100% rename from reactos/dll/cpl/input/add.c rename to dll/cpl/input/add.c diff --git a/reactos/dll/cpl/input/changekeyseq.c b/dll/cpl/input/changekeyseq.c similarity index 100% rename from reactos/dll/cpl/input/changekeyseq.c rename to dll/cpl/input/changekeyseq.c diff --git a/reactos/dll/cpl/input/input.c b/dll/cpl/input/input.c similarity index 100% rename from reactos/dll/cpl/input/input.c rename to dll/cpl/input/input.c diff --git a/reactos/dll/cpl/input/input.def b/dll/cpl/input/input.def similarity index 100% rename from reactos/dll/cpl/input/input.def rename to dll/cpl/input/input.def diff --git a/reactos/dll/cpl/input/input.h b/dll/cpl/input/input.h similarity index 100% rename from reactos/dll/cpl/input/input.h rename to dll/cpl/input/input.h diff --git a/reactos/dll/cpl/input/input.rbuild b/dll/cpl/input/input.rbuild similarity index 100% rename from reactos/dll/cpl/input/input.rbuild rename to dll/cpl/input/input.rbuild diff --git a/reactos/dll/cpl/input/input.rc b/dll/cpl/input/input.rc similarity index 100% rename from reactos/dll/cpl/input/input.rc rename to dll/cpl/input/input.rc diff --git a/reactos/dll/cpl/input/keysettings.c b/dll/cpl/input/keysettings.c similarity index 100% rename from reactos/dll/cpl/input/keysettings.c rename to dll/cpl/input/keysettings.c diff --git a/reactos/dll/cpl/input/lang/bg-BG.rc b/dll/cpl/input/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/input/lang/bg-BG.rc rename to dll/cpl/input/lang/bg-BG.rc diff --git a/reactos/dll/cpl/input/lang/de-DE.rc b/dll/cpl/input/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/input/lang/de-DE.rc rename to dll/cpl/input/lang/de-DE.rc diff --git a/reactos/dll/cpl/input/lang/el-GR.rc b/dll/cpl/input/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/input/lang/el-GR.rc rename to dll/cpl/input/lang/el-GR.rc diff --git a/reactos/dll/cpl/input/lang/en-US.rc b/dll/cpl/input/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/input/lang/en-US.rc rename to dll/cpl/input/lang/en-US.rc diff --git a/reactos/dll/cpl/input/lang/es-ES.rc b/dll/cpl/input/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/input/lang/es-ES.rc rename to dll/cpl/input/lang/es-ES.rc diff --git a/reactos/dll/cpl/input/lang/fr-FR.rc b/dll/cpl/input/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/input/lang/fr-FR.rc rename to dll/cpl/input/lang/fr-FR.rc diff --git a/reactos/dll/cpl/input/lang/it-IT.rc b/dll/cpl/input/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/input/lang/it-IT.rc rename to dll/cpl/input/lang/it-IT.rc diff --git a/reactos/dll/cpl/input/lang/no-NO.rc b/dll/cpl/input/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/input/lang/no-NO.rc rename to dll/cpl/input/lang/no-NO.rc diff --git a/reactos/dll/cpl/input/lang/pl-PL.rc b/dll/cpl/input/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/input/lang/pl-PL.rc rename to dll/cpl/input/lang/pl-PL.rc diff --git a/reactos/dll/cpl/input/lang/ru-RU.rc b/dll/cpl/input/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/input/lang/ru-RU.rc rename to dll/cpl/input/lang/ru-RU.rc diff --git a/reactos/dll/cpl/input/lang/sk-SK.rc b/dll/cpl/input/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/input/lang/sk-SK.rc rename to dll/cpl/input/lang/sk-SK.rc diff --git a/reactos/dll/cpl/input/lang/uk-UA.rc b/dll/cpl/input/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/input/lang/uk-UA.rc rename to dll/cpl/input/lang/uk-UA.rc diff --git a/reactos/dll/cpl/input/resource.h b/dll/cpl/input/resource.h similarity index 100% rename from reactos/dll/cpl/input/resource.h rename to dll/cpl/input/resource.h diff --git a/reactos/dll/cpl/input/resources/keyboard-shortcuts.ico b/dll/cpl/input/resources/keyboard-shortcuts.ico similarity index 100% rename from reactos/dll/cpl/input/resources/keyboard-shortcuts.ico rename to dll/cpl/input/resources/keyboard-shortcuts.ico diff --git a/reactos/dll/cpl/input/rsrc.rc b/dll/cpl/input/rsrc.rc similarity index 100% rename from reactos/dll/cpl/input/rsrc.rc rename to dll/cpl/input/rsrc.rc diff --git a/reactos/dll/cpl/input/settings.c b/dll/cpl/input/settings.c similarity index 100% rename from reactos/dll/cpl/input/settings.c rename to dll/cpl/input/settings.c diff --git a/reactos/dll/cpl/intl/advanced.c b/dll/cpl/intl/advanced.c similarity index 100% rename from reactos/dll/cpl/intl/advanced.c rename to dll/cpl/intl/advanced.c diff --git a/reactos/dll/cpl/intl/currency.c b/dll/cpl/intl/currency.c similarity index 100% rename from reactos/dll/cpl/intl/currency.c rename to dll/cpl/intl/currency.c diff --git a/reactos/dll/cpl/intl/date.c b/dll/cpl/intl/date.c similarity index 100% rename from reactos/dll/cpl/intl/date.c rename to dll/cpl/intl/date.c diff --git a/reactos/dll/cpl/intl/generalp.c b/dll/cpl/intl/generalp.c similarity index 100% rename from reactos/dll/cpl/intl/generalp.c rename to dll/cpl/intl/generalp.c diff --git a/reactos/dll/cpl/intl/inplocale.c b/dll/cpl/intl/inplocale.c similarity index 100% rename from reactos/dll/cpl/intl/inplocale.c rename to dll/cpl/intl/inplocale.c diff --git a/reactos/dll/cpl/intl/intl.c b/dll/cpl/intl/intl.c similarity index 100% rename from reactos/dll/cpl/intl/intl.c rename to dll/cpl/intl/intl.c diff --git a/reactos/dll/cpl/intl/intl.def b/dll/cpl/intl/intl.def similarity index 100% rename from reactos/dll/cpl/intl/intl.def rename to dll/cpl/intl/intl.def diff --git a/reactos/dll/cpl/intl/intl.h b/dll/cpl/intl/intl.h similarity index 100% rename from reactos/dll/cpl/intl/intl.h rename to dll/cpl/intl/intl.h diff --git a/reactos/dll/cpl/intl/intl.rbuild b/dll/cpl/intl/intl.rbuild similarity index 100% rename from reactos/dll/cpl/intl/intl.rbuild rename to dll/cpl/intl/intl.rbuild diff --git a/reactos/dll/cpl/intl/intl.rc b/dll/cpl/intl/intl.rc similarity index 100% rename from reactos/dll/cpl/intl/intl.rc rename to dll/cpl/intl/intl.rc diff --git a/reactos/dll/cpl/intl/lang/bg-BG.rc b/dll/cpl/intl/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/bg-BG.rc rename to dll/cpl/intl/lang/bg-BG.rc diff --git a/reactos/dll/cpl/intl/lang/de-DE.rc b/dll/cpl/intl/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/de-DE.rc rename to dll/cpl/intl/lang/de-DE.rc diff --git a/reactos/dll/cpl/intl/lang/en-US.rc b/dll/cpl/intl/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/en-US.rc rename to dll/cpl/intl/lang/en-US.rc diff --git a/reactos/dll/cpl/intl/lang/es-ES.rc b/dll/cpl/intl/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/es-ES.rc rename to dll/cpl/intl/lang/es-ES.rc diff --git a/reactos/dll/cpl/intl/lang/fr-FR.rc b/dll/cpl/intl/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/fr-FR.rc rename to dll/cpl/intl/lang/fr-FR.rc diff --git a/reactos/dll/cpl/intl/lang/it-IT.rc b/dll/cpl/intl/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/it-IT.rc rename to dll/cpl/intl/lang/it-IT.rc diff --git a/reactos/dll/cpl/intl/lang/no-NO.rc b/dll/cpl/intl/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/no-NO.rc rename to dll/cpl/intl/lang/no-NO.rc diff --git a/reactos/dll/cpl/intl/lang/pl-PL.rc b/dll/cpl/intl/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/pl-PL.rc rename to dll/cpl/intl/lang/pl-PL.rc diff --git a/reactos/dll/cpl/intl/lang/ru-RU.rc b/dll/cpl/intl/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/ru-RU.rc rename to dll/cpl/intl/lang/ru-RU.rc diff --git a/reactos/dll/cpl/intl/lang/sk-SK.rc b/dll/cpl/intl/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/sk-SK.rc rename to dll/cpl/intl/lang/sk-SK.rc diff --git a/reactos/dll/cpl/intl/lang/uk-UA.rc b/dll/cpl/intl/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/intl/lang/uk-UA.rc rename to dll/cpl/intl/lang/uk-UA.rc diff --git a/reactos/dll/cpl/intl/languages.c b/dll/cpl/intl/languages.c similarity index 100% rename from reactos/dll/cpl/intl/languages.c rename to dll/cpl/intl/languages.c diff --git a/reactos/dll/cpl/intl/misc.c b/dll/cpl/intl/misc.c similarity index 100% rename from reactos/dll/cpl/intl/misc.c rename to dll/cpl/intl/misc.c diff --git a/reactos/dll/cpl/intl/numbers.c b/dll/cpl/intl/numbers.c similarity index 100% rename from reactos/dll/cpl/intl/numbers.c rename to dll/cpl/intl/numbers.c diff --git a/reactos/dll/cpl/intl/resource.h b/dll/cpl/intl/resource.h similarity index 100% rename from reactos/dll/cpl/intl/resource.h rename to dll/cpl/intl/resource.h diff --git a/reactos/dll/cpl/intl/resources/applet.ico b/dll/cpl/intl/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/intl/resources/applet.ico rename to dll/cpl/intl/resources/applet.ico diff --git a/reactos/dll/cpl/intl/rsrc.rc b/dll/cpl/intl/rsrc.rc similarity index 100% rename from reactos/dll/cpl/intl/rsrc.rc rename to dll/cpl/intl/rsrc.rc diff --git a/reactos/dll/cpl/intl/setupreg.c b/dll/cpl/intl/setupreg.c similarity index 100% rename from reactos/dll/cpl/intl/setupreg.c rename to dll/cpl/intl/setupreg.c diff --git a/reactos/dll/cpl/intl/sort.c b/dll/cpl/intl/sort.c similarity index 100% rename from reactos/dll/cpl/intl/sort.c rename to dll/cpl/intl/sort.c diff --git a/reactos/dll/cpl/intl/time.c b/dll/cpl/intl/time.c similarity index 100% rename from reactos/dll/cpl/intl/time.c rename to dll/cpl/intl/time.c diff --git a/reactos/dll/cpl/joy/joy.c b/dll/cpl/joy/joy.c similarity index 100% rename from reactos/dll/cpl/joy/joy.c rename to dll/cpl/joy/joy.c diff --git a/reactos/dll/cpl/joy/joy.def b/dll/cpl/joy/joy.def similarity index 100% rename from reactos/dll/cpl/joy/joy.def rename to dll/cpl/joy/joy.def diff --git a/reactos/dll/cpl/joy/joy.h b/dll/cpl/joy/joy.h similarity index 100% rename from reactos/dll/cpl/joy/joy.h rename to dll/cpl/joy/joy.h diff --git a/reactos/dll/cpl/joy/joy.rbuild b/dll/cpl/joy/joy.rbuild similarity index 100% rename from reactos/dll/cpl/joy/joy.rbuild rename to dll/cpl/joy/joy.rbuild diff --git a/reactos/dll/cpl/joy/joy.rc b/dll/cpl/joy/joy.rc similarity index 100% rename from reactos/dll/cpl/joy/joy.rc rename to dll/cpl/joy/joy.rc diff --git a/reactos/dll/cpl/joy/lang/bg-BG.rc b/dll/cpl/joy/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/bg-BG.rc rename to dll/cpl/joy/lang/bg-BG.rc diff --git a/reactos/dll/cpl/joy/lang/cs-CZ.rc b/dll/cpl/joy/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/cs-CZ.rc rename to dll/cpl/joy/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/joy/lang/de-DE.rc b/dll/cpl/joy/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/de-DE.rc rename to dll/cpl/joy/lang/de-DE.rc diff --git a/reactos/dll/cpl/joy/lang/el-GR.rc b/dll/cpl/joy/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/el-GR.rc rename to dll/cpl/joy/lang/el-GR.rc diff --git a/reactos/dll/cpl/joy/lang/en-US.rc b/dll/cpl/joy/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/en-US.rc rename to dll/cpl/joy/lang/en-US.rc diff --git a/reactos/dll/cpl/joy/lang/es-ES.rc b/dll/cpl/joy/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/es-ES.rc rename to dll/cpl/joy/lang/es-ES.rc diff --git a/reactos/dll/cpl/joy/lang/fr-FR.rc b/dll/cpl/joy/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/fr-FR.rc rename to dll/cpl/joy/lang/fr-FR.rc diff --git a/reactos/dll/cpl/joy/lang/it-IT.rc b/dll/cpl/joy/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/it-IT.rc rename to dll/cpl/joy/lang/it-IT.rc diff --git a/reactos/dll/cpl/joy/lang/no-NO.rc b/dll/cpl/joy/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/no-NO.rc rename to dll/cpl/joy/lang/no-NO.rc diff --git a/reactos/dll/cpl/joy/lang/pl-PL.rc b/dll/cpl/joy/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/pl-PL.rc rename to dll/cpl/joy/lang/pl-PL.rc diff --git a/reactos/dll/cpl/joy/lang/ru-RU.rc b/dll/cpl/joy/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/ru-RU.rc rename to dll/cpl/joy/lang/ru-RU.rc diff --git a/reactos/dll/cpl/joy/lang/sk-SK.rc b/dll/cpl/joy/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/sk-SK.rc rename to dll/cpl/joy/lang/sk-SK.rc diff --git a/reactos/dll/cpl/joy/lang/uk-UA.rc b/dll/cpl/joy/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/uk-UA.rc rename to dll/cpl/joy/lang/uk-UA.rc diff --git a/reactos/dll/cpl/joy/lang/zh-CN.rc b/dll/cpl/joy/lang/zh-CN.rc similarity index 100% rename from reactos/dll/cpl/joy/lang/zh-CN.rc rename to dll/cpl/joy/lang/zh-CN.rc diff --git a/reactos/dll/cpl/joy/resource.h b/dll/cpl/joy/resource.h similarity index 100% rename from reactos/dll/cpl/joy/resource.h rename to dll/cpl/joy/resource.h diff --git a/reactos/dll/cpl/joy/resources/applet.ico b/dll/cpl/joy/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/joy/resources/applet.ico rename to dll/cpl/joy/resources/applet.ico diff --git a/reactos/dll/cpl/joy/rsrc.rc b/dll/cpl/joy/rsrc.rc similarity index 100% rename from reactos/dll/cpl/joy/rsrc.rc rename to dll/cpl/joy/rsrc.rc diff --git a/reactos/dll/cpl/liccpa/lang/bg-BG.rc b/dll/cpl/liccpa/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/bg-BG.rc rename to dll/cpl/liccpa/lang/bg-BG.rc diff --git a/reactos/dll/cpl/liccpa/lang/cs-CZ.rc b/dll/cpl/liccpa/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/cs-CZ.rc rename to dll/cpl/liccpa/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/liccpa/lang/de-DE.rc b/dll/cpl/liccpa/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/de-DE.rc rename to dll/cpl/liccpa/lang/de-DE.rc diff --git a/reactos/dll/cpl/liccpa/lang/en-US.rc b/dll/cpl/liccpa/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/en-US.rc rename to dll/cpl/liccpa/lang/en-US.rc diff --git a/reactos/dll/cpl/liccpa/lang/es-ES.rc b/dll/cpl/liccpa/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/es-ES.rc rename to dll/cpl/liccpa/lang/es-ES.rc diff --git a/reactos/dll/cpl/liccpa/lang/fr-FR.rc b/dll/cpl/liccpa/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/fr-FR.rc rename to dll/cpl/liccpa/lang/fr-FR.rc diff --git a/reactos/dll/cpl/liccpa/lang/id-ID.rc b/dll/cpl/liccpa/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/id-ID.rc rename to dll/cpl/liccpa/lang/id-ID.rc diff --git a/reactos/dll/cpl/liccpa/lang/it-IT.rc b/dll/cpl/liccpa/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/it-IT.rc rename to dll/cpl/liccpa/lang/it-IT.rc diff --git a/reactos/dll/cpl/liccpa/lang/ja-JP.rc b/dll/cpl/liccpa/lang/ja-JP.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/ja-JP.rc rename to dll/cpl/liccpa/lang/ja-JP.rc diff --git a/reactos/dll/cpl/liccpa/lang/no-NO.rc b/dll/cpl/liccpa/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/no-NO.rc rename to dll/cpl/liccpa/lang/no-NO.rc diff --git a/reactos/dll/cpl/liccpa/lang/pl-PL.rc b/dll/cpl/liccpa/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/pl-PL.rc rename to dll/cpl/liccpa/lang/pl-PL.rc diff --git a/reactos/dll/cpl/liccpa/lang/ru-RU.rc b/dll/cpl/liccpa/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/ru-RU.rc rename to dll/cpl/liccpa/lang/ru-RU.rc diff --git a/reactos/dll/cpl/liccpa/lang/sk-SK.rc b/dll/cpl/liccpa/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/sk-SK.rc rename to dll/cpl/liccpa/lang/sk-SK.rc diff --git a/reactos/dll/cpl/liccpa/lang/uk-UA.rc b/dll/cpl/liccpa/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/uk-UA.rc rename to dll/cpl/liccpa/lang/uk-UA.rc diff --git a/reactos/dll/cpl/liccpa/lang/zh-CN.rc b/dll/cpl/liccpa/lang/zh-CN.rc similarity index 100% rename from reactos/dll/cpl/liccpa/lang/zh-CN.rc rename to dll/cpl/liccpa/lang/zh-CN.rc diff --git a/reactos/dll/cpl/liccpa/liccpa.c b/dll/cpl/liccpa/liccpa.c similarity index 100% rename from reactos/dll/cpl/liccpa/liccpa.c rename to dll/cpl/liccpa/liccpa.c diff --git a/reactos/dll/cpl/liccpa/liccpa.def b/dll/cpl/liccpa/liccpa.def similarity index 100% rename from reactos/dll/cpl/liccpa/liccpa.def rename to dll/cpl/liccpa/liccpa.def diff --git a/reactos/dll/cpl/liccpa/liccpa.h b/dll/cpl/liccpa/liccpa.h similarity index 100% rename from reactos/dll/cpl/liccpa/liccpa.h rename to dll/cpl/liccpa/liccpa.h diff --git a/reactos/dll/cpl/liccpa/liccpa.rc b/dll/cpl/liccpa/liccpa.rc similarity index 100% rename from reactos/dll/cpl/liccpa/liccpa.rc rename to dll/cpl/liccpa/liccpa.rc diff --git a/reactos/dll/cpl/liccpa/resource.h b/dll/cpl/liccpa/resource.h similarity index 100% rename from reactos/dll/cpl/liccpa/resource.h rename to dll/cpl/liccpa/resource.h diff --git a/reactos/dll/cpl/liccpa/resources/cpl_icon1.ico b/dll/cpl/liccpa/resources/cpl_icon1.ico similarity index 100% rename from reactos/dll/cpl/liccpa/resources/cpl_icon1.ico rename to dll/cpl/liccpa/resources/cpl_icon1.ico diff --git a/reactos/dll/cpl/liccpa/rsrc.rc b/dll/cpl/liccpa/rsrc.rc similarity index 100% rename from reactos/dll/cpl/liccpa/rsrc.rc rename to dll/cpl/liccpa/rsrc.rc diff --git a/reactos/dll/cpl/main/keyboard.c b/dll/cpl/main/keyboard.c similarity index 100% rename from reactos/dll/cpl/main/keyboard.c rename to dll/cpl/main/keyboard.c diff --git a/reactos/dll/cpl/main/lang/bg-BG.rc b/dll/cpl/main/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/main/lang/bg-BG.rc rename to dll/cpl/main/lang/bg-BG.rc diff --git a/reactos/dll/cpl/main/lang/cs-CZ.rc b/dll/cpl/main/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/main/lang/cs-CZ.rc rename to dll/cpl/main/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/main/lang/de-DE.rc b/dll/cpl/main/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/main/lang/de-DE.rc rename to dll/cpl/main/lang/de-DE.rc diff --git a/reactos/dll/cpl/main/lang/el-GR.rc b/dll/cpl/main/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/main/lang/el-GR.rc rename to dll/cpl/main/lang/el-GR.rc diff --git a/reactos/dll/cpl/main/lang/en-US.rc b/dll/cpl/main/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/main/lang/en-US.rc rename to dll/cpl/main/lang/en-US.rc diff --git a/reactos/dll/cpl/main/lang/es-ES.rc b/dll/cpl/main/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/main/lang/es-ES.rc rename to dll/cpl/main/lang/es-ES.rc diff --git a/reactos/dll/cpl/main/lang/fr-FR.rc b/dll/cpl/main/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/main/lang/fr-FR.rc rename to dll/cpl/main/lang/fr-FR.rc diff --git a/reactos/dll/cpl/main/lang/hu-HU.rc b/dll/cpl/main/lang/hu-HU.rc similarity index 100% rename from reactos/dll/cpl/main/lang/hu-HU.rc rename to dll/cpl/main/lang/hu-HU.rc diff --git a/reactos/dll/cpl/main/lang/id-ID.rc b/dll/cpl/main/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/main/lang/id-ID.rc rename to dll/cpl/main/lang/id-ID.rc diff --git a/reactos/dll/cpl/main/lang/it-IT.rc b/dll/cpl/main/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/main/lang/it-IT.rc rename to dll/cpl/main/lang/it-IT.rc diff --git a/reactos/dll/cpl/main/lang/ja-JP.rc b/dll/cpl/main/lang/ja-JP.rc similarity index 100% rename from reactos/dll/cpl/main/lang/ja-JP.rc rename to dll/cpl/main/lang/ja-JP.rc diff --git a/reactos/dll/cpl/main/lang/nl-NL.rc b/dll/cpl/main/lang/nl-NL.rc similarity index 100% rename from reactos/dll/cpl/main/lang/nl-NL.rc rename to dll/cpl/main/lang/nl-NL.rc diff --git a/reactos/dll/cpl/main/lang/no-NO.rc b/dll/cpl/main/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/main/lang/no-NO.rc rename to dll/cpl/main/lang/no-NO.rc diff --git a/reactos/dll/cpl/main/lang/pl-PL.rc b/dll/cpl/main/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/main/lang/pl-PL.rc rename to dll/cpl/main/lang/pl-PL.rc diff --git a/reactos/dll/cpl/main/lang/ru-RU.rc b/dll/cpl/main/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/main/lang/ru-RU.rc rename to dll/cpl/main/lang/ru-RU.rc diff --git a/reactos/dll/cpl/main/lang/sk-SK.rc b/dll/cpl/main/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/main/lang/sk-SK.rc rename to dll/cpl/main/lang/sk-SK.rc diff --git a/reactos/dll/cpl/main/lang/uk-UA.rc b/dll/cpl/main/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/main/lang/uk-UA.rc rename to dll/cpl/main/lang/uk-UA.rc diff --git a/reactos/dll/cpl/main/lang/zh-CN.rc b/dll/cpl/main/lang/zh-CN.rc similarity index 100% rename from reactos/dll/cpl/main/lang/zh-CN.rc rename to dll/cpl/main/lang/zh-CN.rc diff --git a/reactos/dll/cpl/main/main.c b/dll/cpl/main/main.c similarity index 100% rename from reactos/dll/cpl/main/main.c rename to dll/cpl/main/main.c diff --git a/reactos/dll/cpl/main/main.def b/dll/cpl/main/main.def similarity index 100% rename from reactos/dll/cpl/main/main.def rename to dll/cpl/main/main.def diff --git a/reactos/dll/cpl/main/main.h b/dll/cpl/main/main.h similarity index 100% rename from reactos/dll/cpl/main/main.h rename to dll/cpl/main/main.h diff --git a/reactos/dll/cpl/main/main.rbuild b/dll/cpl/main/main.rbuild similarity index 100% rename from reactos/dll/cpl/main/main.rbuild rename to dll/cpl/main/main.rbuild diff --git a/reactos/dll/cpl/main/main.rc b/dll/cpl/main/main.rc similarity index 100% rename from reactos/dll/cpl/main/main.rc rename to dll/cpl/main/main.rc diff --git a/reactos/dll/cpl/main/mouse.c b/dll/cpl/main/mouse.c similarity index 100% rename from reactos/dll/cpl/main/mouse.c rename to dll/cpl/main/mouse.c diff --git a/reactos/dll/cpl/main/resource.h b/dll/cpl/main/resource.h similarity index 100% rename from reactos/dll/cpl/main/resource.h rename to dll/cpl/main/resource.h diff --git a/reactos/dll/cpl/main/resources/folder_closed.ico b/dll/cpl/main/resources/folder_closed.ico similarity index 100% rename from reactos/dll/cpl/main/resources/folder_closed.ico rename to dll/cpl/main/resources/folder_closed.ico diff --git a/reactos/dll/cpl/main/resources/folder_open.ico b/dll/cpl/main/resources/folder_open.ico similarity index 100% rename from reactos/dll/cpl/main/resources/folder_open.ico rename to dll/cpl/main/resources/folder_open.ico diff --git a/reactos/dll/cpl/main/resources/keyboard.ico b/dll/cpl/main/resources/keyboard.ico similarity index 100% rename from reactos/dll/cpl/main/resources/keyboard.ico rename to dll/cpl/main/resources/keyboard.ico diff --git a/reactos/dll/cpl/main/resources/look_key.ico b/dll/cpl/main/resources/look_key.ico similarity index 100% rename from reactos/dll/cpl/main/resources/look_key.ico rename to dll/cpl/main/resources/look_key.ico diff --git a/reactos/dll/cpl/main/resources/mouse.ico b/dll/cpl/main/resources/mouse.ico similarity index 100% rename from reactos/dll/cpl/main/resources/mouse.ico rename to dll/cpl/main/resources/mouse.ico diff --git a/reactos/dll/cpl/main/resources/mouse_button.ico b/dll/cpl/main/resources/mouse_button.ico similarity index 100% rename from reactos/dll/cpl/main/resources/mouse_button.ico rename to dll/cpl/main/resources/mouse_button.ico diff --git a/reactos/dll/cpl/main/resources/mouse_left.ico b/dll/cpl/main/resources/mouse_left.ico similarity index 100% rename from reactos/dll/cpl/main/resources/mouse_left.ico rename to dll/cpl/main/resources/mouse_left.ico diff --git a/reactos/dll/cpl/main/resources/mouse_pointer.ico b/dll/cpl/main/resources/mouse_pointer.ico similarity index 100% rename from reactos/dll/cpl/main/resources/mouse_pointer.ico rename to dll/cpl/main/resources/mouse_pointer.ico diff --git a/reactos/dll/cpl/main/resources/mouse_right.ico b/dll/cpl/main/resources/mouse_right.ico similarity index 100% rename from reactos/dll/cpl/main/resources/mouse_right.ico rename to dll/cpl/main/resources/mouse_right.ico diff --git a/reactos/dll/cpl/main/resources/mouse_speed.ico b/dll/cpl/main/resources/mouse_speed.ico similarity index 100% rename from reactos/dll/cpl/main/resources/mouse_speed.ico rename to dll/cpl/main/resources/mouse_speed.ico diff --git a/reactos/dll/cpl/main/resources/mouse_trails.ico b/dll/cpl/main/resources/mouse_trails.ico similarity index 100% rename from reactos/dll/cpl/main/resources/mouse_trails.ico rename to dll/cpl/main/resources/mouse_trails.ico diff --git a/reactos/dll/cpl/main/resources/mouse_wheel.ico b/dll/cpl/main/resources/mouse_wheel.ico similarity index 100% rename from reactos/dll/cpl/main/resources/mouse_wheel.ico rename to dll/cpl/main/resources/mouse_wheel.ico diff --git a/reactos/dll/cpl/main/resources/repeat_delay.ico b/dll/cpl/main/resources/repeat_delay.ico similarity index 100% rename from reactos/dll/cpl/main/resources/repeat_delay.ico rename to dll/cpl/main/resources/repeat_delay.ico diff --git a/reactos/dll/cpl/main/resources/repeat_rate.ico b/dll/cpl/main/resources/repeat_rate.ico similarity index 100% rename from reactos/dll/cpl/main/resources/repeat_rate.ico rename to dll/cpl/main/resources/repeat_rate.ico diff --git a/reactos/dll/cpl/main/rsrc.rc b/dll/cpl/main/rsrc.rc similarity index 100% rename from reactos/dll/cpl/main/rsrc.rc rename to dll/cpl/main/rsrc.rc diff --git a/reactos/dll/cpl/mmsys/audio.c b/dll/cpl/mmsys/audio.c similarity index 100% rename from reactos/dll/cpl/mmsys/audio.c rename to dll/cpl/mmsys/audio.c diff --git a/reactos/dll/cpl/mmsys/lang/bg-BG.rc b/dll/cpl/mmsys/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/bg-BG.rc rename to dll/cpl/mmsys/lang/bg-BG.rc diff --git a/reactos/dll/cpl/mmsys/lang/cs-CZ.rc b/dll/cpl/mmsys/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/cs-CZ.rc rename to dll/cpl/mmsys/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/mmsys/lang/de-DE.rc b/dll/cpl/mmsys/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/de-DE.rc rename to dll/cpl/mmsys/lang/de-DE.rc diff --git a/reactos/dll/cpl/mmsys/lang/el-GR.rc b/dll/cpl/mmsys/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/el-GR.rc rename to dll/cpl/mmsys/lang/el-GR.rc diff --git a/reactos/dll/cpl/mmsys/lang/en-US.rc b/dll/cpl/mmsys/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/en-US.rc rename to dll/cpl/mmsys/lang/en-US.rc diff --git a/reactos/dll/cpl/mmsys/lang/es-ES.rc b/dll/cpl/mmsys/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/es-ES.rc rename to dll/cpl/mmsys/lang/es-ES.rc diff --git a/reactos/dll/cpl/mmsys/lang/fr-FR.rc b/dll/cpl/mmsys/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/fr-FR.rc rename to dll/cpl/mmsys/lang/fr-FR.rc diff --git a/reactos/dll/cpl/mmsys/lang/id-ID.rc b/dll/cpl/mmsys/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/id-ID.rc rename to dll/cpl/mmsys/lang/id-ID.rc diff --git a/reactos/dll/cpl/mmsys/lang/it-IT.rc b/dll/cpl/mmsys/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/it-IT.rc rename to dll/cpl/mmsys/lang/it-IT.rc diff --git a/reactos/dll/cpl/mmsys/lang/nl-NL.rc b/dll/cpl/mmsys/lang/nl-NL.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/nl-NL.rc rename to dll/cpl/mmsys/lang/nl-NL.rc diff --git a/reactos/dll/cpl/mmsys/lang/no-NO.rc b/dll/cpl/mmsys/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/no-NO.rc rename to dll/cpl/mmsys/lang/no-NO.rc diff --git a/reactos/dll/cpl/mmsys/lang/pl-PL.rc b/dll/cpl/mmsys/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/pl-PL.rc rename to dll/cpl/mmsys/lang/pl-PL.rc diff --git a/reactos/dll/cpl/mmsys/lang/pt-BR.rc b/dll/cpl/mmsys/lang/pt-BR.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/pt-BR.rc rename to dll/cpl/mmsys/lang/pt-BR.rc diff --git a/reactos/dll/cpl/mmsys/lang/ru-RU.rc b/dll/cpl/mmsys/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/ru-RU.rc rename to dll/cpl/mmsys/lang/ru-RU.rc diff --git a/reactos/dll/cpl/mmsys/lang/sk-SK.rc b/dll/cpl/mmsys/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/sk-SK.rc rename to dll/cpl/mmsys/lang/sk-SK.rc diff --git a/reactos/dll/cpl/mmsys/lang/uk-UA.rc b/dll/cpl/mmsys/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/uk-UA.rc rename to dll/cpl/mmsys/lang/uk-UA.rc diff --git a/reactos/dll/cpl/mmsys/lang/zh-CN.rc b/dll/cpl/mmsys/lang/zh-CN.rc similarity index 100% rename from reactos/dll/cpl/mmsys/lang/zh-CN.rc rename to dll/cpl/mmsys/lang/zh-CN.rc diff --git a/reactos/dll/cpl/mmsys/mmsys.c b/dll/cpl/mmsys/mmsys.c similarity index 100% rename from reactos/dll/cpl/mmsys/mmsys.c rename to dll/cpl/mmsys/mmsys.c diff --git a/reactos/dll/cpl/mmsys/mmsys.h b/dll/cpl/mmsys/mmsys.h similarity index 100% rename from reactos/dll/cpl/mmsys/mmsys.h rename to dll/cpl/mmsys/mmsys.h diff --git a/reactos/dll/cpl/mmsys/mmsys.rbuild b/dll/cpl/mmsys/mmsys.rbuild similarity index 100% rename from reactos/dll/cpl/mmsys/mmsys.rbuild rename to dll/cpl/mmsys/mmsys.rbuild diff --git a/reactos/dll/cpl/mmsys/mmsys.rc b/dll/cpl/mmsys/mmsys.rc similarity index 100% rename from reactos/dll/cpl/mmsys/mmsys.rc rename to dll/cpl/mmsys/mmsys.rc diff --git a/reactos/dll/cpl/mmsys/mmsys.spec b/dll/cpl/mmsys/mmsys.spec similarity index 100% rename from reactos/dll/cpl/mmsys/mmsys.spec rename to dll/cpl/mmsys/mmsys.spec diff --git a/reactos/dll/cpl/mmsys/resource.h b/dll/cpl/mmsys/resource.h similarity index 100% rename from reactos/dll/cpl/mmsys/resource.h rename to dll/cpl/mmsys/resource.h diff --git a/reactos/dll/cpl/mmsys/resources/3004.ico b/dll/cpl/mmsys/resources/3004.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/3004.ico rename to dll/cpl/mmsys/resources/3004.ico diff --git a/reactos/dll/cpl/mmsys/resources/4353.ico b/dll/cpl/mmsys/resources/4353.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4353.ico rename to dll/cpl/mmsys/resources/4353.ico diff --git a/reactos/dll/cpl/mmsys/resources/4354.ico b/dll/cpl/mmsys/resources/4354.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4354.ico rename to dll/cpl/mmsys/resources/4354.ico diff --git a/reactos/dll/cpl/mmsys/resources/4355.ico b/dll/cpl/mmsys/resources/4355.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4355.ico rename to dll/cpl/mmsys/resources/4355.ico diff --git a/reactos/dll/cpl/mmsys/resources/4356.ico b/dll/cpl/mmsys/resources/4356.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4356.ico rename to dll/cpl/mmsys/resources/4356.ico diff --git a/reactos/dll/cpl/mmsys/resources/4357.ico b/dll/cpl/mmsys/resources/4357.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4357.ico rename to dll/cpl/mmsys/resources/4357.ico diff --git a/reactos/dll/cpl/mmsys/resources/4358.ico b/dll/cpl/mmsys/resources/4358.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4358.ico rename to dll/cpl/mmsys/resources/4358.ico diff --git a/reactos/dll/cpl/mmsys/resources/4359.ico b/dll/cpl/mmsys/resources/4359.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4359.ico rename to dll/cpl/mmsys/resources/4359.ico diff --git a/reactos/dll/cpl/mmsys/resources/4360.ico b/dll/cpl/mmsys/resources/4360.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4360.ico rename to dll/cpl/mmsys/resources/4360.ico diff --git a/reactos/dll/cpl/mmsys/resources/4361.ico b/dll/cpl/mmsys/resources/4361.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4361.ico rename to dll/cpl/mmsys/resources/4361.ico diff --git a/reactos/dll/cpl/mmsys/resources/4362.ico b/dll/cpl/mmsys/resources/4362.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4362.ico rename to dll/cpl/mmsys/resources/4362.ico diff --git a/reactos/dll/cpl/mmsys/resources/4363.ico b/dll/cpl/mmsys/resources/4363.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4363.ico rename to dll/cpl/mmsys/resources/4363.ico diff --git a/reactos/dll/cpl/mmsys/resources/4364.ico b/dll/cpl/mmsys/resources/4364.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4364.ico rename to dll/cpl/mmsys/resources/4364.ico diff --git a/reactos/dll/cpl/mmsys/resources/4365.ico b/dll/cpl/mmsys/resources/4365.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4365.ico rename to dll/cpl/mmsys/resources/4365.ico diff --git a/reactos/dll/cpl/mmsys/resources/4366.ico b/dll/cpl/mmsys/resources/4366.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4366.ico rename to dll/cpl/mmsys/resources/4366.ico diff --git a/reactos/dll/cpl/mmsys/resources/4367.ico b/dll/cpl/mmsys/resources/4367.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4367.ico rename to dll/cpl/mmsys/resources/4367.ico diff --git a/reactos/dll/cpl/mmsys/resources/4368.ico b/dll/cpl/mmsys/resources/4368.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4368.ico rename to dll/cpl/mmsys/resources/4368.ico diff --git a/reactos/dll/cpl/mmsys/resources/4369.ico b/dll/cpl/mmsys/resources/4369.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4369.ico rename to dll/cpl/mmsys/resources/4369.ico diff --git a/reactos/dll/cpl/mmsys/resources/4370.ico b/dll/cpl/mmsys/resources/4370.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4370.ico rename to dll/cpl/mmsys/resources/4370.ico diff --git a/reactos/dll/cpl/mmsys/resources/4371.ico b/dll/cpl/mmsys/resources/4371.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4371.ico rename to dll/cpl/mmsys/resources/4371.ico diff --git a/reactos/dll/cpl/mmsys/resources/4372.ico b/dll/cpl/mmsys/resources/4372.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4372.ico rename to dll/cpl/mmsys/resources/4372.ico diff --git a/reactos/dll/cpl/mmsys/resources/4373.ico b/dll/cpl/mmsys/resources/4373.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4373.ico rename to dll/cpl/mmsys/resources/4373.ico diff --git a/reactos/dll/cpl/mmsys/resources/4374.ico b/dll/cpl/mmsys/resources/4374.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4374.ico rename to dll/cpl/mmsys/resources/4374.ico diff --git a/reactos/dll/cpl/mmsys/resources/4375.ico b/dll/cpl/mmsys/resources/4375.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4375.ico rename to dll/cpl/mmsys/resources/4375.ico diff --git a/reactos/dll/cpl/mmsys/resources/4376.ico b/dll/cpl/mmsys/resources/4376.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4376.ico rename to dll/cpl/mmsys/resources/4376.ico diff --git a/reactos/dll/cpl/mmsys/resources/4377.ico b/dll/cpl/mmsys/resources/4377.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4377.ico rename to dll/cpl/mmsys/resources/4377.ico diff --git a/reactos/dll/cpl/mmsys/resources/4378.ico b/dll/cpl/mmsys/resources/4378.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4378.ico rename to dll/cpl/mmsys/resources/4378.ico diff --git a/reactos/dll/cpl/mmsys/resources/4379.ico b/dll/cpl/mmsys/resources/4379.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4379.ico rename to dll/cpl/mmsys/resources/4379.ico diff --git a/reactos/dll/cpl/mmsys/resources/4380.ico b/dll/cpl/mmsys/resources/4380.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4380.ico rename to dll/cpl/mmsys/resources/4380.ico diff --git a/reactos/dll/cpl/mmsys/resources/4381.ico b/dll/cpl/mmsys/resources/4381.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4381.ico rename to dll/cpl/mmsys/resources/4381.ico diff --git a/reactos/dll/cpl/mmsys/resources/4382.ico b/dll/cpl/mmsys/resources/4382.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4382.ico rename to dll/cpl/mmsys/resources/4382.ico diff --git a/reactos/dll/cpl/mmsys/resources/4383.ico b/dll/cpl/mmsys/resources/4383.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4383.ico rename to dll/cpl/mmsys/resources/4383.ico diff --git a/reactos/dll/cpl/mmsys/resources/4384.ico b/dll/cpl/mmsys/resources/4384.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4384.ico rename to dll/cpl/mmsys/resources/4384.ico diff --git a/reactos/dll/cpl/mmsys/resources/4385.ico b/dll/cpl/mmsys/resources/4385.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4385.ico rename to dll/cpl/mmsys/resources/4385.ico diff --git a/reactos/dll/cpl/mmsys/resources/4386.ico b/dll/cpl/mmsys/resources/4386.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4386.ico rename to dll/cpl/mmsys/resources/4386.ico diff --git a/reactos/dll/cpl/mmsys/resources/4387.ico b/dll/cpl/mmsys/resources/4387.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4387.ico rename to dll/cpl/mmsys/resources/4387.ico diff --git a/reactos/dll/cpl/mmsys/resources/4388.ico b/dll/cpl/mmsys/resources/4388.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4388.ico rename to dll/cpl/mmsys/resources/4388.ico diff --git a/reactos/dll/cpl/mmsys/resources/4390.ico b/dll/cpl/mmsys/resources/4390.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4390.ico rename to dll/cpl/mmsys/resources/4390.ico diff --git a/reactos/dll/cpl/mmsys/resources/4393.ico b/dll/cpl/mmsys/resources/4393.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4393.ico rename to dll/cpl/mmsys/resources/4393.ico diff --git a/reactos/dll/cpl/mmsys/resources/4394.ico b/dll/cpl/mmsys/resources/4394.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/4394.ico rename to dll/cpl/mmsys/resources/4394.ico diff --git a/reactos/dll/cpl/mmsys/resources/play.ico b/dll/cpl/mmsys/resources/play.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/play.ico rename to dll/cpl/mmsys/resources/play.ico diff --git a/reactos/dll/cpl/mmsys/resources/speaker.bmp b/dll/cpl/mmsys/resources/speaker.bmp similarity index 100% rename from reactos/dll/cpl/mmsys/resources/speaker.bmp rename to dll/cpl/mmsys/resources/speaker.bmp diff --git a/reactos/dll/cpl/mmsys/resources/stop.ico b/dll/cpl/mmsys/resources/stop.ico similarity index 100% rename from reactos/dll/cpl/mmsys/resources/stop.ico rename to dll/cpl/mmsys/resources/stop.ico diff --git a/reactos/dll/cpl/mmsys/rsrc.rc b/dll/cpl/mmsys/rsrc.rc similarity index 100% rename from reactos/dll/cpl/mmsys/rsrc.rc rename to dll/cpl/mmsys/rsrc.rc diff --git a/reactos/dll/cpl/mmsys/sounds.c b/dll/cpl/mmsys/sounds.c similarity index 100% rename from reactos/dll/cpl/mmsys/sounds.c rename to dll/cpl/mmsys/sounds.c diff --git a/reactos/dll/cpl/mmsys/voice.c b/dll/cpl/mmsys/voice.c similarity index 100% rename from reactos/dll/cpl/mmsys/voice.c rename to dll/cpl/mmsys/voice.c diff --git a/reactos/dll/cpl/mmsys/volume.c b/dll/cpl/mmsys/volume.c similarity index 100% rename from reactos/dll/cpl/mmsys/volume.c rename to dll/cpl/mmsys/volume.c diff --git a/reactos/dll/cpl/ncpa/ncpa.c b/dll/cpl/ncpa/ncpa.c similarity index 100% rename from reactos/dll/cpl/ncpa/ncpa.c rename to dll/cpl/ncpa/ncpa.c diff --git a/reactos/dll/cpl/ncpa/ncpa.def b/dll/cpl/ncpa/ncpa.def similarity index 100% rename from reactos/dll/cpl/ncpa/ncpa.def rename to dll/cpl/ncpa/ncpa.def diff --git a/reactos/dll/cpl/ncpa/ncpa.rbuild b/dll/cpl/ncpa/ncpa.rbuild similarity index 100% rename from reactos/dll/cpl/ncpa/ncpa.rbuild rename to dll/cpl/ncpa/ncpa.rbuild diff --git a/reactos/dll/cpl/odbccp32/odbccp32.c b/dll/cpl/odbccp32/odbccp32.c similarity index 100% rename from reactos/dll/cpl/odbccp32/odbccp32.c rename to dll/cpl/odbccp32/odbccp32.c diff --git a/reactos/dll/cpl/odbccp32/odbccp32.def b/dll/cpl/odbccp32/odbccp32.def similarity index 100% rename from reactos/dll/cpl/odbccp32/odbccp32.def rename to dll/cpl/odbccp32/odbccp32.def diff --git a/reactos/dll/cpl/odbccp32/odbccp32.h b/dll/cpl/odbccp32/odbccp32.h similarity index 100% rename from reactos/dll/cpl/odbccp32/odbccp32.h rename to dll/cpl/odbccp32/odbccp32.h diff --git a/reactos/dll/cpl/odbccp32/odbccp32.rbuild b/dll/cpl/odbccp32/odbccp32.rbuild similarity index 100% rename from reactos/dll/cpl/odbccp32/odbccp32.rbuild rename to dll/cpl/odbccp32/odbccp32.rbuild diff --git a/reactos/dll/cpl/odbccp32/odbccp32.rc b/dll/cpl/odbccp32/odbccp32.rc similarity index 100% rename from reactos/dll/cpl/odbccp32/odbccp32.rc rename to dll/cpl/odbccp32/odbccp32.rc diff --git a/reactos/dll/cpl/powercfg/advanced.c b/dll/cpl/powercfg/advanced.c similarity index 100% rename from reactos/dll/cpl/powercfg/advanced.c rename to dll/cpl/powercfg/advanced.c diff --git a/reactos/dll/cpl/powercfg/alarms.c b/dll/cpl/powercfg/alarms.c similarity index 100% rename from reactos/dll/cpl/powercfg/alarms.c rename to dll/cpl/powercfg/alarms.c diff --git a/reactos/dll/cpl/powercfg/hibernate.c b/dll/cpl/powercfg/hibernate.c similarity index 100% rename from reactos/dll/cpl/powercfg/hibernate.c rename to dll/cpl/powercfg/hibernate.c diff --git a/reactos/dll/cpl/powercfg/lang/bg-BG.rc b/dll/cpl/powercfg/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/bg-BG.rc rename to dll/cpl/powercfg/lang/bg-BG.rc diff --git a/reactos/dll/cpl/powercfg/lang/cs-CZ.rc b/dll/cpl/powercfg/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/cs-CZ.rc rename to dll/cpl/powercfg/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/powercfg/lang/de-DE.rc b/dll/cpl/powercfg/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/de-DE.rc rename to dll/cpl/powercfg/lang/de-DE.rc diff --git a/reactos/dll/cpl/powercfg/lang/el-GR.rc b/dll/cpl/powercfg/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/el-GR.rc rename to dll/cpl/powercfg/lang/el-GR.rc diff --git a/reactos/dll/cpl/powercfg/lang/en-US.rc b/dll/cpl/powercfg/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/en-US.rc rename to dll/cpl/powercfg/lang/en-US.rc diff --git a/reactos/dll/cpl/powercfg/lang/es-ES.rc b/dll/cpl/powercfg/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/es-ES.rc rename to dll/cpl/powercfg/lang/es-ES.rc diff --git a/reactos/dll/cpl/powercfg/lang/fr-FR.rc b/dll/cpl/powercfg/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/fr-FR.rc rename to dll/cpl/powercfg/lang/fr-FR.rc diff --git a/reactos/dll/cpl/powercfg/lang/id-ID.rc b/dll/cpl/powercfg/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/id-ID.rc rename to dll/cpl/powercfg/lang/id-ID.rc diff --git a/reactos/dll/cpl/powercfg/lang/it-IT.rc b/dll/cpl/powercfg/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/it-IT.rc rename to dll/cpl/powercfg/lang/it-IT.rc diff --git a/reactos/dll/cpl/powercfg/lang/nl-NL.rc b/dll/cpl/powercfg/lang/nl-NL.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/nl-NL.rc rename to dll/cpl/powercfg/lang/nl-NL.rc diff --git a/reactos/dll/cpl/powercfg/lang/no-NO.rc b/dll/cpl/powercfg/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/no-NO.rc rename to dll/cpl/powercfg/lang/no-NO.rc diff --git a/reactos/dll/cpl/powercfg/lang/pl-PL.rc b/dll/cpl/powercfg/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/pl-PL.rc rename to dll/cpl/powercfg/lang/pl-PL.rc diff --git a/reactos/dll/cpl/powercfg/lang/ru-RU.rc b/dll/cpl/powercfg/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/ru-RU.rc rename to dll/cpl/powercfg/lang/ru-RU.rc diff --git a/reactos/dll/cpl/powercfg/lang/sk-SK.rc b/dll/cpl/powercfg/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/sk-SK.rc rename to dll/cpl/powercfg/lang/sk-SK.rc diff --git a/reactos/dll/cpl/powercfg/lang/th-TH.rc b/dll/cpl/powercfg/lang/th-TH.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/th-TH.rc rename to dll/cpl/powercfg/lang/th-TH.rc diff --git a/reactos/dll/cpl/powercfg/lang/uk-UA.rc b/dll/cpl/powercfg/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/powercfg/lang/uk-UA.rc rename to dll/cpl/powercfg/lang/uk-UA.rc diff --git a/reactos/dll/cpl/powercfg/powercfg.c b/dll/cpl/powercfg/powercfg.c similarity index 100% rename from reactos/dll/cpl/powercfg/powercfg.c rename to dll/cpl/powercfg/powercfg.c diff --git a/reactos/dll/cpl/powercfg/powercfg.def b/dll/cpl/powercfg/powercfg.def similarity index 100% rename from reactos/dll/cpl/powercfg/powercfg.def rename to dll/cpl/powercfg/powercfg.def diff --git a/reactos/dll/cpl/powercfg/powercfg.h b/dll/cpl/powercfg/powercfg.h similarity index 100% rename from reactos/dll/cpl/powercfg/powercfg.h rename to dll/cpl/powercfg/powercfg.h diff --git a/reactos/dll/cpl/powercfg/powercfg.rbuild b/dll/cpl/powercfg/powercfg.rbuild similarity index 100% rename from reactos/dll/cpl/powercfg/powercfg.rbuild rename to dll/cpl/powercfg/powercfg.rbuild diff --git a/reactos/dll/cpl/powercfg/powercfg.rc b/dll/cpl/powercfg/powercfg.rc similarity index 100% rename from reactos/dll/cpl/powercfg/powercfg.rc rename to dll/cpl/powercfg/powercfg.rc diff --git a/reactos/dll/cpl/powercfg/powershemes.c b/dll/cpl/powercfg/powershemes.c similarity index 100% rename from reactos/dll/cpl/powercfg/powershemes.c rename to dll/cpl/powercfg/powershemes.c diff --git a/reactos/dll/cpl/powercfg/resource.h b/dll/cpl/powercfg/resource.h similarity index 100% rename from reactos/dll/cpl/powercfg/resource.h rename to dll/cpl/powercfg/resource.h diff --git a/reactos/dll/cpl/powercfg/resources/ac.ico b/dll/cpl/powercfg/resources/ac.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/ac.ico rename to dll/cpl/powercfg/resources/ac.ico diff --git a/reactos/dll/cpl/powercfg/resources/acdc.ico b/dll/cpl/powercfg/resources/acdc.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/acdc.ico rename to dll/cpl/powercfg/resources/acdc.ico diff --git a/reactos/dll/cpl/powercfg/resources/batterycharging.ico b/dll/cpl/powercfg/resources/batterycharging.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batterycharging.ico rename to dll/cpl/powercfg/resources/batterycharging.ico diff --git a/reactos/dll/cpl/powercfg/resources/batterychargingcritical.ico b/dll/cpl/powercfg/resources/batterychargingcritical.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batterychargingcritical.ico rename to dll/cpl/powercfg/resources/batterychargingcritical.ico diff --git a/reactos/dll/cpl/powercfg/resources/batterycharginghalf.ico b/dll/cpl/powercfg/resources/batterycharginghalf.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batterycharginghalf.ico rename to dll/cpl/powercfg/resources/batterycharginghalf.ico diff --git a/reactos/dll/cpl/powercfg/resources/batterycharginghigh.ico b/dll/cpl/powercfg/resources/batterycharginghigh.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batterycharginghigh.ico rename to dll/cpl/powercfg/resources/batterycharginghigh.ico diff --git a/reactos/dll/cpl/powercfg/resources/batterycharginglow.ico b/dll/cpl/powercfg/resources/batterycharginglow.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batterycharginglow.ico rename to dll/cpl/powercfg/resources/batterycharginglow.ico diff --git a/reactos/dll/cpl/powercfg/resources/batterycritical.ico b/dll/cpl/powercfg/resources/batterycritical.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batterycritical.ico rename to dll/cpl/powercfg/resources/batterycritical.ico diff --git a/reactos/dll/cpl/powercfg/resources/batteryfull.ico b/dll/cpl/powercfg/resources/batteryfull.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batteryfull.ico rename to dll/cpl/powercfg/resources/batteryfull.ico diff --git a/reactos/dll/cpl/powercfg/resources/batteryhalf.ico b/dll/cpl/powercfg/resources/batteryhalf.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batteryhalf.ico rename to dll/cpl/powercfg/resources/batteryhalf.ico diff --git a/reactos/dll/cpl/powercfg/resources/batteryhigh.ico b/dll/cpl/powercfg/resources/batteryhigh.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batteryhigh.ico rename to dll/cpl/powercfg/resources/batteryhigh.ico diff --git a/reactos/dll/cpl/powercfg/resources/batterylow.ico b/dll/cpl/powercfg/resources/batterylow.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batterylow.ico rename to dll/cpl/powercfg/resources/batterylow.ico diff --git a/reactos/dll/cpl/powercfg/resources/batteryunknown.ico b/dll/cpl/powercfg/resources/batteryunknown.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/batteryunknown.ico rename to dll/cpl/powercfg/resources/batteryunknown.ico diff --git a/reactos/dll/cpl/powercfg/resources/dc.ico b/dll/cpl/powercfg/resources/dc.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/dc.ico rename to dll/cpl/powercfg/resources/dc.ico diff --git a/reactos/dll/cpl/powercfg/resources/hibernate.ico b/dll/cpl/powercfg/resources/hibernate.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/hibernate.ico rename to dll/cpl/powercfg/resources/hibernate.ico diff --git a/reactos/dll/cpl/powercfg/resources/nobattery.ico b/dll/cpl/powercfg/resources/nobattery.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/nobattery.ico rename to dll/cpl/powercfg/resources/nobattery.ico diff --git a/reactos/dll/cpl/powercfg/resources/screen.ico b/dll/cpl/powercfg/resources/screen.ico similarity index 100% rename from reactos/dll/cpl/powercfg/resources/screen.ico rename to dll/cpl/powercfg/resources/screen.ico diff --git a/reactos/dll/cpl/powercfg/rsrc.rc b/dll/cpl/powercfg/rsrc.rc similarity index 100% rename from reactos/dll/cpl/powercfg/rsrc.rc rename to dll/cpl/powercfg/rsrc.rc diff --git a/reactos/dll/cpl/sysdm/advanced.c b/dll/cpl/sysdm/advanced.c similarity index 100% rename from reactos/dll/cpl/sysdm/advanced.c rename to dll/cpl/sysdm/advanced.c diff --git a/reactos/dll/cpl/sysdm/environment.c b/dll/cpl/sysdm/environment.c similarity index 100% rename from reactos/dll/cpl/sysdm/environment.c rename to dll/cpl/sysdm/environment.c diff --git a/reactos/dll/cpl/sysdm/general.c b/dll/cpl/sysdm/general.c similarity index 100% rename from reactos/dll/cpl/sysdm/general.c rename to dll/cpl/sysdm/general.c diff --git a/reactos/dll/cpl/sysdm/hardprof.c b/dll/cpl/sysdm/hardprof.c similarity index 100% rename from reactos/dll/cpl/sysdm/hardprof.c rename to dll/cpl/sysdm/hardprof.c diff --git a/reactos/dll/cpl/sysdm/hardware.c b/dll/cpl/sysdm/hardware.c similarity index 100% rename from reactos/dll/cpl/sysdm/hardware.c rename to dll/cpl/sysdm/hardware.c diff --git a/reactos/dll/cpl/sysdm/lang/bg-BG.rc b/dll/cpl/sysdm/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/bg-BG.rc rename to dll/cpl/sysdm/lang/bg-BG.rc diff --git a/reactos/dll/cpl/sysdm/lang/cs-CZ.rc b/dll/cpl/sysdm/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/cs-CZ.rc rename to dll/cpl/sysdm/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/sysdm/lang/da-DK.rc b/dll/cpl/sysdm/lang/da-DK.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/da-DK.rc rename to dll/cpl/sysdm/lang/da-DK.rc diff --git a/reactos/dll/cpl/sysdm/lang/de-DE.rc b/dll/cpl/sysdm/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/de-DE.rc rename to dll/cpl/sysdm/lang/de-DE.rc diff --git a/reactos/dll/cpl/sysdm/lang/el-GR.rc b/dll/cpl/sysdm/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/el-GR.rc rename to dll/cpl/sysdm/lang/el-GR.rc diff --git a/reactos/dll/cpl/sysdm/lang/en-US.rc b/dll/cpl/sysdm/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/en-US.rc rename to dll/cpl/sysdm/lang/en-US.rc diff --git a/reactos/dll/cpl/sysdm/lang/es-ES.rc b/dll/cpl/sysdm/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/es-ES.rc rename to dll/cpl/sysdm/lang/es-ES.rc diff --git a/reactos/dll/cpl/sysdm/lang/fr-FR.rc b/dll/cpl/sysdm/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/fr-FR.rc rename to dll/cpl/sysdm/lang/fr-FR.rc diff --git a/reactos/dll/cpl/sysdm/lang/hu-HU.rc b/dll/cpl/sysdm/lang/hu-HU.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/hu-HU.rc rename to dll/cpl/sysdm/lang/hu-HU.rc diff --git a/reactos/dll/cpl/sysdm/lang/id-ID.rc b/dll/cpl/sysdm/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/id-ID.rc rename to dll/cpl/sysdm/lang/id-ID.rc diff --git a/reactos/dll/cpl/sysdm/lang/it-IT.rc b/dll/cpl/sysdm/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/it-IT.rc rename to dll/cpl/sysdm/lang/it-IT.rc diff --git a/reactos/dll/cpl/sysdm/lang/ja-JP.rc b/dll/cpl/sysdm/lang/ja-JP.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/ja-JP.rc rename to dll/cpl/sysdm/lang/ja-JP.rc diff --git a/reactos/dll/cpl/sysdm/lang/nl-NL.rc b/dll/cpl/sysdm/lang/nl-NL.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/nl-NL.rc rename to dll/cpl/sysdm/lang/nl-NL.rc diff --git a/reactos/dll/cpl/sysdm/lang/no-NO.rc b/dll/cpl/sysdm/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/no-NO.rc rename to dll/cpl/sysdm/lang/no-NO.rc diff --git a/reactos/dll/cpl/sysdm/lang/pl-PL.rc b/dll/cpl/sysdm/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/pl-PL.rc rename to dll/cpl/sysdm/lang/pl-PL.rc diff --git a/reactos/dll/cpl/sysdm/lang/ru-RU.rc b/dll/cpl/sysdm/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/ru-RU.rc rename to dll/cpl/sysdm/lang/ru-RU.rc diff --git a/reactos/dll/cpl/sysdm/lang/sk-SK.rc b/dll/cpl/sysdm/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/sk-SK.rc rename to dll/cpl/sysdm/lang/sk-SK.rc diff --git a/reactos/dll/cpl/sysdm/lang/sv-SE.rc b/dll/cpl/sysdm/lang/sv-SE.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/sv-SE.rc rename to dll/cpl/sysdm/lang/sv-SE.rc diff --git a/reactos/dll/cpl/sysdm/lang/uk-UA.rc b/dll/cpl/sysdm/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/sysdm/lang/uk-UA.rc rename to dll/cpl/sysdm/lang/uk-UA.rc diff --git a/reactos/dll/cpl/sysdm/licence.c b/dll/cpl/sysdm/licence.c similarity index 100% rename from reactos/dll/cpl/sysdm/licence.c rename to dll/cpl/sysdm/licence.c diff --git a/reactos/dll/cpl/sysdm/precomp.h b/dll/cpl/sysdm/precomp.h similarity index 100% rename from reactos/dll/cpl/sysdm/precomp.h rename to dll/cpl/sysdm/precomp.h diff --git a/reactos/dll/cpl/sysdm/resource.h b/dll/cpl/sysdm/resource.h similarity index 100% rename from reactos/dll/cpl/sysdm/resource.h rename to dll/cpl/sysdm/resource.h diff --git a/reactos/dll/cpl/sysdm/resources/applet.ico b/dll/cpl/sysdm/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/sysdm/resources/applet.ico rename to dll/cpl/sysdm/resources/applet.ico diff --git a/reactos/dll/cpl/sysdm/resources/devmgr.ico b/dll/cpl/sysdm/resources/devmgr.ico similarity index 100% rename from reactos/dll/cpl/sysdm/resources/devmgr.ico rename to dll/cpl/sysdm/resources/devmgr.ico diff --git a/reactos/dll/cpl/sysdm/resources/down.ico b/dll/cpl/sysdm/resources/down.ico similarity index 100% rename from reactos/dll/cpl/sysdm/resources/down.ico rename to dll/cpl/sysdm/resources/down.ico diff --git a/reactos/dll/cpl/sysdm/resources/gpl.txt b/dll/cpl/sysdm/resources/gpl.txt similarity index 100% rename from reactos/dll/cpl/sysdm/resources/gpl.txt rename to dll/cpl/sysdm/resources/gpl.txt diff --git a/reactos/dll/cpl/sysdm/resources/rosbitmap.bmp b/dll/cpl/sysdm/resources/rosbitmap.bmp similarity index 100% rename from reactos/dll/cpl/sysdm/resources/rosbitmap.bmp rename to dll/cpl/sysdm/resources/rosbitmap.bmp diff --git a/reactos/dll/cpl/sysdm/resources/up.ico b/dll/cpl/sysdm/resources/up.ico similarity index 100% rename from reactos/dll/cpl/sysdm/resources/up.ico rename to dll/cpl/sysdm/resources/up.ico diff --git a/reactos/dll/cpl/sysdm/rsrc.rc b/dll/cpl/sysdm/rsrc.rc similarity index 100% rename from reactos/dll/cpl/sysdm/rsrc.rc rename to dll/cpl/sysdm/rsrc.rc diff --git a/reactos/dll/cpl/sysdm/startrec.c b/dll/cpl/sysdm/startrec.c similarity index 100% rename from reactos/dll/cpl/sysdm/startrec.c rename to dll/cpl/sysdm/startrec.c diff --git a/reactos/dll/cpl/sysdm/sysdm.c b/dll/cpl/sysdm/sysdm.c similarity index 100% rename from reactos/dll/cpl/sysdm/sysdm.c rename to dll/cpl/sysdm/sysdm.c diff --git a/reactos/dll/cpl/sysdm/sysdm.def b/dll/cpl/sysdm/sysdm.def similarity index 100% rename from reactos/dll/cpl/sysdm/sysdm.def rename to dll/cpl/sysdm/sysdm.def diff --git a/reactos/dll/cpl/sysdm/sysdm.rbuild b/dll/cpl/sysdm/sysdm.rbuild similarity index 100% rename from reactos/dll/cpl/sysdm/sysdm.rbuild rename to dll/cpl/sysdm/sysdm.rbuild diff --git a/reactos/dll/cpl/sysdm/sysdm.rc b/dll/cpl/sysdm/sysdm.rc similarity index 100% rename from reactos/dll/cpl/sysdm/sysdm.rc rename to dll/cpl/sysdm/sysdm.rc diff --git a/reactos/dll/cpl/sysdm/userprofile.c b/dll/cpl/sysdm/userprofile.c similarity index 100% rename from reactos/dll/cpl/sysdm/userprofile.c rename to dll/cpl/sysdm/userprofile.c diff --git a/reactos/dll/cpl/sysdm/virtmem.c b/dll/cpl/sysdm/virtmem.c similarity index 100% rename from reactos/dll/cpl/sysdm/virtmem.c rename to dll/cpl/sysdm/virtmem.c diff --git a/reactos/dll/cpl/telephon/lang/bg-BG.rc b/dll/cpl/telephon/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/bg-BG.rc rename to dll/cpl/telephon/lang/bg-BG.rc diff --git a/reactos/dll/cpl/telephon/lang/de-DE.rc b/dll/cpl/telephon/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/de-DE.rc rename to dll/cpl/telephon/lang/de-DE.rc diff --git a/reactos/dll/cpl/telephon/lang/el-GR.rc b/dll/cpl/telephon/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/el-GR.rc rename to dll/cpl/telephon/lang/el-GR.rc diff --git a/reactos/dll/cpl/telephon/lang/en-US.rc b/dll/cpl/telephon/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/en-US.rc rename to dll/cpl/telephon/lang/en-US.rc diff --git a/reactos/dll/cpl/telephon/lang/es-ES.rc b/dll/cpl/telephon/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/es-ES.rc rename to dll/cpl/telephon/lang/es-ES.rc diff --git a/reactos/dll/cpl/telephon/lang/fr-FR.rc b/dll/cpl/telephon/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/fr-FR.rc rename to dll/cpl/telephon/lang/fr-FR.rc diff --git a/reactos/dll/cpl/telephon/lang/it-IT.rc b/dll/cpl/telephon/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/it-IT.rc rename to dll/cpl/telephon/lang/it-IT.rc diff --git a/reactos/dll/cpl/telephon/lang/no-NO.rc b/dll/cpl/telephon/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/no-NO.rc rename to dll/cpl/telephon/lang/no-NO.rc diff --git a/reactos/dll/cpl/telephon/lang/pl-PL.rc b/dll/cpl/telephon/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/pl-PL.rc rename to dll/cpl/telephon/lang/pl-PL.rc diff --git a/reactos/dll/cpl/telephon/lang/ru-RU.rc b/dll/cpl/telephon/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/ru-RU.rc rename to dll/cpl/telephon/lang/ru-RU.rc diff --git a/reactos/dll/cpl/telephon/lang/sk-SK.rc b/dll/cpl/telephon/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/sk-SK.rc rename to dll/cpl/telephon/lang/sk-SK.rc diff --git a/reactos/dll/cpl/telephon/lang/uk-UA.rc b/dll/cpl/telephon/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/telephon/lang/uk-UA.rc rename to dll/cpl/telephon/lang/uk-UA.rc diff --git a/reactos/dll/cpl/telephon/resource.h b/dll/cpl/telephon/resource.h similarity index 100% rename from reactos/dll/cpl/telephon/resource.h rename to dll/cpl/telephon/resource.h diff --git a/reactos/dll/cpl/telephon/resources/applet.ico b/dll/cpl/telephon/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/telephon/resources/applet.ico rename to dll/cpl/telephon/resources/applet.ico diff --git a/reactos/dll/cpl/telephon/rsrc.rc b/dll/cpl/telephon/rsrc.rc similarity index 100% rename from reactos/dll/cpl/telephon/rsrc.rc rename to dll/cpl/telephon/rsrc.rc diff --git a/reactos/dll/cpl/telephon/telephon.c b/dll/cpl/telephon/telephon.c similarity index 100% rename from reactos/dll/cpl/telephon/telephon.c rename to dll/cpl/telephon/telephon.c diff --git a/reactos/dll/cpl/telephon/telephon.def b/dll/cpl/telephon/telephon.def similarity index 100% rename from reactos/dll/cpl/telephon/telephon.def rename to dll/cpl/telephon/telephon.def diff --git a/reactos/dll/cpl/telephon/telephon.h b/dll/cpl/telephon/telephon.h similarity index 100% rename from reactos/dll/cpl/telephon/telephon.h rename to dll/cpl/telephon/telephon.h diff --git a/reactos/dll/cpl/telephon/telephon.rbuild b/dll/cpl/telephon/telephon.rbuild similarity index 100% rename from reactos/dll/cpl/telephon/telephon.rbuild rename to dll/cpl/telephon/telephon.rbuild diff --git a/reactos/dll/cpl/telephon/telephon.rc b/dll/cpl/telephon/telephon.rc similarity index 100% rename from reactos/dll/cpl/telephon/telephon.rc rename to dll/cpl/telephon/telephon.rc diff --git a/reactos/dll/cpl/timedate/clock.c b/dll/cpl/timedate/clock.c similarity index 100% rename from reactos/dll/cpl/timedate/clock.c rename to dll/cpl/timedate/clock.c diff --git a/reactos/dll/cpl/timedate/dateandtime.c b/dll/cpl/timedate/dateandtime.c similarity index 100% rename from reactos/dll/cpl/timedate/dateandtime.c rename to dll/cpl/timedate/dateandtime.c diff --git a/reactos/dll/cpl/timedate/internettime.c b/dll/cpl/timedate/internettime.c similarity index 100% rename from reactos/dll/cpl/timedate/internettime.c rename to dll/cpl/timedate/internettime.c diff --git a/reactos/dll/cpl/timedate/lang/bg-BG.rc b/dll/cpl/timedate/lang/bg-BG.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/bg-BG.rc rename to dll/cpl/timedate/lang/bg-BG.rc diff --git a/reactos/dll/cpl/timedate/lang/cs-CZ.rc b/dll/cpl/timedate/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/cs-CZ.rc rename to dll/cpl/timedate/lang/cs-CZ.rc diff --git a/reactos/dll/cpl/timedate/lang/da-DK.rc b/dll/cpl/timedate/lang/da-DK.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/da-DK.rc rename to dll/cpl/timedate/lang/da-DK.rc diff --git a/reactos/dll/cpl/timedate/lang/de-DE.rc b/dll/cpl/timedate/lang/de-DE.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/de-DE.rc rename to dll/cpl/timedate/lang/de-DE.rc diff --git a/reactos/dll/cpl/timedate/lang/el-GR.rc b/dll/cpl/timedate/lang/el-GR.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/el-GR.rc rename to dll/cpl/timedate/lang/el-GR.rc diff --git a/reactos/dll/cpl/timedate/lang/en-US.rc b/dll/cpl/timedate/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/en-US.rc rename to dll/cpl/timedate/lang/en-US.rc diff --git a/reactos/dll/cpl/timedate/lang/es-ES.rc b/dll/cpl/timedate/lang/es-ES.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/es-ES.rc rename to dll/cpl/timedate/lang/es-ES.rc diff --git a/reactos/dll/cpl/timedate/lang/fr-FR.rc b/dll/cpl/timedate/lang/fr-FR.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/fr-FR.rc rename to dll/cpl/timedate/lang/fr-FR.rc diff --git a/reactos/dll/cpl/timedate/lang/hu-HU.rc b/dll/cpl/timedate/lang/hu-HU.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/hu-HU.rc rename to dll/cpl/timedate/lang/hu-HU.rc diff --git a/reactos/dll/cpl/timedate/lang/id-ID.rc b/dll/cpl/timedate/lang/id-ID.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/id-ID.rc rename to dll/cpl/timedate/lang/id-ID.rc diff --git a/reactos/dll/cpl/timedate/lang/it-IT.rc b/dll/cpl/timedate/lang/it-IT.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/it-IT.rc rename to dll/cpl/timedate/lang/it-IT.rc diff --git a/reactos/dll/cpl/timedate/lang/ja-JP.rc b/dll/cpl/timedate/lang/ja-JP.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/ja-JP.rc rename to dll/cpl/timedate/lang/ja-JP.rc diff --git a/reactos/dll/cpl/timedate/lang/nl-NL.rc b/dll/cpl/timedate/lang/nl-NL.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/nl-NL.rc rename to dll/cpl/timedate/lang/nl-NL.rc diff --git a/reactos/dll/cpl/timedate/lang/no-NO.rc b/dll/cpl/timedate/lang/no-NO.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/no-NO.rc rename to dll/cpl/timedate/lang/no-NO.rc diff --git a/reactos/dll/cpl/timedate/lang/pl-PL.rc b/dll/cpl/timedate/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/pl-PL.rc rename to dll/cpl/timedate/lang/pl-PL.rc diff --git a/reactos/dll/cpl/timedate/lang/ru-RU.rc b/dll/cpl/timedate/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/ru-RU.rc rename to dll/cpl/timedate/lang/ru-RU.rc diff --git a/reactos/dll/cpl/timedate/lang/sk-SK.rc b/dll/cpl/timedate/lang/sk-SK.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/sk-SK.rc rename to dll/cpl/timedate/lang/sk-SK.rc diff --git a/reactos/dll/cpl/timedate/lang/sv-SE.rc b/dll/cpl/timedate/lang/sv-SE.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/sv-SE.rc rename to dll/cpl/timedate/lang/sv-SE.rc diff --git a/reactos/dll/cpl/timedate/lang/th-TH.rc b/dll/cpl/timedate/lang/th-TH.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/th-TH.rc rename to dll/cpl/timedate/lang/th-TH.rc diff --git a/reactos/dll/cpl/timedate/lang/uk-UA.rc b/dll/cpl/timedate/lang/uk-UA.rc similarity index 100% rename from reactos/dll/cpl/timedate/lang/uk-UA.rc rename to dll/cpl/timedate/lang/uk-UA.rc diff --git a/reactos/dll/cpl/timedate/monthcal.c b/dll/cpl/timedate/monthcal.c similarity index 100% rename from reactos/dll/cpl/timedate/monthcal.c rename to dll/cpl/timedate/monthcal.c diff --git a/reactos/dll/cpl/timedate/ntpclient.c b/dll/cpl/timedate/ntpclient.c similarity index 100% rename from reactos/dll/cpl/timedate/ntpclient.c rename to dll/cpl/timedate/ntpclient.c diff --git a/reactos/dll/cpl/timedate/resource.h b/dll/cpl/timedate/resource.h similarity index 100% rename from reactos/dll/cpl/timedate/resource.h rename to dll/cpl/timedate/resource.h diff --git a/reactos/dll/cpl/timedate/resources/applet.ico b/dll/cpl/timedate/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/timedate/resources/applet.ico rename to dll/cpl/timedate/resources/applet.ico diff --git a/reactos/dll/cpl/timedate/resources/world.bmp b/dll/cpl/timedate/resources/world.bmp similarity index 100% rename from reactos/dll/cpl/timedate/resources/world.bmp rename to dll/cpl/timedate/resources/world.bmp diff --git a/reactos/dll/cpl/timedate/rsrc.rc b/dll/cpl/timedate/rsrc.rc similarity index 100% rename from reactos/dll/cpl/timedate/rsrc.rc rename to dll/cpl/timedate/rsrc.rc diff --git a/reactos/dll/cpl/timedate/timedate.c b/dll/cpl/timedate/timedate.c similarity index 100% rename from reactos/dll/cpl/timedate/timedate.c rename to dll/cpl/timedate/timedate.c diff --git a/reactos/dll/cpl/timedate/timedate.def b/dll/cpl/timedate/timedate.def similarity index 100% rename from reactos/dll/cpl/timedate/timedate.def rename to dll/cpl/timedate/timedate.def diff --git a/reactos/dll/cpl/timedate/timedate.h b/dll/cpl/timedate/timedate.h similarity index 100% rename from reactos/dll/cpl/timedate/timedate.h rename to dll/cpl/timedate/timedate.h diff --git a/reactos/dll/cpl/timedate/timedate.rbuild b/dll/cpl/timedate/timedate.rbuild similarity index 100% rename from reactos/dll/cpl/timedate/timedate.rbuild rename to dll/cpl/timedate/timedate.rbuild diff --git a/reactos/dll/cpl/timedate/timedate.rc b/dll/cpl/timedate/timedate.rc similarity index 100% rename from reactos/dll/cpl/timedate/timedate.rc rename to dll/cpl/timedate/timedate.rc diff --git a/reactos/dll/cpl/timedate/timezone.c b/dll/cpl/timedate/timezone.c similarity index 100% rename from reactos/dll/cpl/timedate/timezone.c rename to dll/cpl/timedate/timezone.c diff --git a/reactos/dll/cpl/usrmgr/extra.c b/dll/cpl/usrmgr/extra.c similarity index 100% rename from reactos/dll/cpl/usrmgr/extra.c rename to dll/cpl/usrmgr/extra.c diff --git a/reactos/dll/cpl/usrmgr/groupprops.c b/dll/cpl/usrmgr/groupprops.c similarity index 100% rename from reactos/dll/cpl/usrmgr/groupprops.c rename to dll/cpl/usrmgr/groupprops.c diff --git a/reactos/dll/cpl/usrmgr/groups.c b/dll/cpl/usrmgr/groups.c similarity index 100% rename from reactos/dll/cpl/usrmgr/groups.c rename to dll/cpl/usrmgr/groups.c diff --git a/reactos/dll/cpl/usrmgr/lang/en-US.rc b/dll/cpl/usrmgr/lang/en-US.rc similarity index 100% rename from reactos/dll/cpl/usrmgr/lang/en-US.rc rename to dll/cpl/usrmgr/lang/en-US.rc diff --git a/reactos/dll/cpl/usrmgr/lang/pl-PL.rc b/dll/cpl/usrmgr/lang/pl-PL.rc similarity index 100% rename from reactos/dll/cpl/usrmgr/lang/pl-PL.rc rename to dll/cpl/usrmgr/lang/pl-PL.rc diff --git a/reactos/dll/cpl/usrmgr/lang/ru-RU.rc b/dll/cpl/usrmgr/lang/ru-RU.rc similarity index 100% rename from reactos/dll/cpl/usrmgr/lang/ru-RU.rc rename to dll/cpl/usrmgr/lang/ru-RU.rc diff --git a/reactos/dll/cpl/usrmgr/misc.c b/dll/cpl/usrmgr/misc.c similarity index 100% rename from reactos/dll/cpl/usrmgr/misc.c rename to dll/cpl/usrmgr/misc.c diff --git a/reactos/dll/cpl/usrmgr/resource.h b/dll/cpl/usrmgr/resource.h similarity index 100% rename from reactos/dll/cpl/usrmgr/resource.h rename to dll/cpl/usrmgr/resource.h diff --git a/reactos/dll/cpl/usrmgr/resources/applet.ico b/dll/cpl/usrmgr/resources/applet.ico similarity index 100% rename from reactos/dll/cpl/usrmgr/resources/applet.ico rename to dll/cpl/usrmgr/resources/applet.ico diff --git a/reactos/dll/cpl/usrmgr/resources/group.ico b/dll/cpl/usrmgr/resources/group.ico similarity index 100% rename from reactos/dll/cpl/usrmgr/resources/group.ico rename to dll/cpl/usrmgr/resources/group.ico diff --git a/reactos/dll/cpl/usrmgr/resources/locked.ico b/dll/cpl/usrmgr/resources/locked.ico similarity index 100% rename from reactos/dll/cpl/usrmgr/resources/locked.ico rename to dll/cpl/usrmgr/resources/locked.ico diff --git a/reactos/dll/cpl/usrmgr/resources/user.ico b/dll/cpl/usrmgr/resources/user.ico similarity index 100% rename from reactos/dll/cpl/usrmgr/resources/user.ico rename to dll/cpl/usrmgr/resources/user.ico diff --git a/reactos/dll/cpl/usrmgr/rsrc.rc b/dll/cpl/usrmgr/rsrc.rc similarity index 100% rename from reactos/dll/cpl/usrmgr/rsrc.rc rename to dll/cpl/usrmgr/rsrc.rc diff --git a/reactos/dll/cpl/usrmgr/userprops.c b/dll/cpl/usrmgr/userprops.c similarity index 100% rename from reactos/dll/cpl/usrmgr/userprops.c rename to dll/cpl/usrmgr/userprops.c diff --git a/reactos/dll/cpl/usrmgr/users.c b/dll/cpl/usrmgr/users.c similarity index 100% rename from reactos/dll/cpl/usrmgr/users.c rename to dll/cpl/usrmgr/users.c diff --git a/reactos/dll/cpl/usrmgr/usrmgr.c b/dll/cpl/usrmgr/usrmgr.c similarity index 100% rename from reactos/dll/cpl/usrmgr/usrmgr.c rename to dll/cpl/usrmgr/usrmgr.c diff --git a/reactos/dll/cpl/usrmgr/usrmgr.def b/dll/cpl/usrmgr/usrmgr.def similarity index 100% rename from reactos/dll/cpl/usrmgr/usrmgr.def rename to dll/cpl/usrmgr/usrmgr.def diff --git a/reactos/dll/cpl/usrmgr/usrmgr.h b/dll/cpl/usrmgr/usrmgr.h similarity index 100% rename from reactos/dll/cpl/usrmgr/usrmgr.h rename to dll/cpl/usrmgr/usrmgr.h diff --git a/reactos/dll/cpl/usrmgr/usrmgr.rbuild b/dll/cpl/usrmgr/usrmgr.rbuild similarity index 100% rename from reactos/dll/cpl/usrmgr/usrmgr.rbuild rename to dll/cpl/usrmgr/usrmgr.rbuild diff --git a/reactos/dll/cpl/usrmgr/usrmgr.rc b/dll/cpl/usrmgr/usrmgr.rc similarity index 100% rename from reactos/dll/cpl/usrmgr/usrmgr.rc rename to dll/cpl/usrmgr/usrmgr.rc diff --git a/reactos/dll/directx/d3d8/d3d8.c b/dll/directx/d3d8/d3d8.c similarity index 100% rename from reactos/dll/directx/d3d8/d3d8.c rename to dll/directx/d3d8/d3d8.c diff --git a/reactos/dll/directx/d3d8/d3d8.def b/dll/directx/d3d8/d3d8.def similarity index 100% rename from reactos/dll/directx/d3d8/d3d8.def rename to dll/directx/d3d8/d3d8.def diff --git a/reactos/dll/directx/d3d8/d3d8.h b/dll/directx/d3d8/d3d8.h similarity index 100% rename from reactos/dll/directx/d3d8/d3d8.h rename to dll/directx/d3d8/d3d8.h diff --git a/reactos/dll/directx/d3d8/d3d8.rbuild b/dll/directx/d3d8/d3d8.rbuild similarity index 100% rename from reactos/dll/directx/d3d8/d3d8.rbuild rename to dll/directx/d3d8/d3d8.rbuild diff --git a/reactos/dll/directx/d3d8/d3d8.rc b/dll/directx/d3d8/d3d8.rc similarity index 100% rename from reactos/dll/directx/d3d8/d3d8.rc rename to dll/directx/d3d8/d3d8.rc diff --git a/reactos/dll/directx/d3d8thk/d3d8thk.def b/dll/directx/d3d8thk/d3d8thk.def similarity index 100% rename from reactos/dll/directx/d3d8thk/d3d8thk.def rename to dll/directx/d3d8thk/d3d8thk.def diff --git a/reactos/dll/directx/d3d8thk/d3d8thk.rbuild b/dll/directx/d3d8thk/d3d8thk.rbuild similarity index 100% rename from reactos/dll/directx/d3d8thk/d3d8thk.rbuild rename to dll/directx/d3d8thk/d3d8thk.rbuild diff --git a/reactos/dll/directx/d3d8thk/d3d8thk.rc b/dll/directx/d3d8thk/d3d8thk.rc similarity index 100% rename from reactos/dll/directx/d3d8thk/d3d8thk.rc rename to dll/directx/d3d8thk/d3d8thk.rc diff --git a/reactos/dll/directx/d3d9/adapter.c b/dll/directx/d3d9/adapter.c similarity index 100% rename from reactos/dll/directx/d3d9/adapter.c rename to dll/directx/d3d9/adapter.c diff --git a/reactos/dll/directx/d3d9/adapter.h b/dll/directx/d3d9/adapter.h similarity index 100% rename from reactos/dll/directx/d3d9/adapter.h rename to dll/directx/d3d9/adapter.h diff --git a/reactos/dll/directx/d3d9/d3d9.c b/dll/directx/d3d9/d3d9.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9.c rename to dll/directx/d3d9/d3d9.c diff --git a/reactos/dll/directx/d3d9/d3d9.rbuild b/dll/directx/d3d9/d3d9.rbuild similarity index 100% rename from reactos/dll/directx/d3d9/d3d9.rbuild rename to dll/directx/d3d9/d3d9.rbuild diff --git a/reactos/dll/directx/d3d9/d3d9.rc b/dll/directx/d3d9/d3d9.rc similarity index 100% rename from reactos/dll/directx/d3d9/d3d9.rc rename to dll/directx/d3d9/d3d9.rc diff --git a/reactos/dll/directx/d3d9/d3d9.spec b/dll/directx/d3d9/d3d9.spec similarity index 100% rename from reactos/dll/directx/d3d9/d3d9.spec rename to dll/directx/d3d9/d3d9.spec diff --git a/reactos/dll/directx/d3d9/d3d9_baseobject.c b/dll/directx/d3d9/d3d9_baseobject.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_baseobject.c rename to dll/directx/d3d9/d3d9_baseobject.c diff --git a/reactos/dll/directx/d3d9/d3d9_baseobject.h b/dll/directx/d3d9/d3d9_baseobject.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_baseobject.h rename to dll/directx/d3d9/d3d9_baseobject.h diff --git a/reactos/dll/directx/d3d9/d3d9_basetexture.h b/dll/directx/d3d9/d3d9_basetexture.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_basetexture.h rename to dll/directx/d3d9/d3d9_basetexture.h diff --git a/reactos/dll/directx/d3d9/d3d9_callbacks.c b/dll/directx/d3d9/d3d9_callbacks.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_callbacks.c rename to dll/directx/d3d9/d3d9_callbacks.c diff --git a/reactos/dll/directx/d3d9/d3d9_callbacks.h b/dll/directx/d3d9/d3d9_callbacks.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_callbacks.h rename to dll/directx/d3d9/d3d9_callbacks.h diff --git a/reactos/dll/directx/d3d9/d3d9_caps.c b/dll/directx/d3d9/d3d9_caps.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_caps.c rename to dll/directx/d3d9/d3d9_caps.c diff --git a/reactos/dll/directx/d3d9/d3d9_caps.h b/dll/directx/d3d9/d3d9_caps.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_caps.h rename to dll/directx/d3d9/d3d9_caps.h diff --git a/reactos/dll/directx/d3d9/d3d9_common.h b/dll/directx/d3d9/d3d9_common.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_common.h rename to dll/directx/d3d9/d3d9_common.h diff --git a/reactos/dll/directx/d3d9/d3d9_create.c b/dll/directx/d3d9/d3d9_create.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_create.c rename to dll/directx/d3d9/d3d9_create.c diff --git a/reactos/dll/directx/d3d9/d3d9_create.h b/dll/directx/d3d9/d3d9_create.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_create.h rename to dll/directx/d3d9/d3d9_create.h diff --git a/reactos/dll/directx/d3d9/d3d9_cursor.c b/dll/directx/d3d9/d3d9_cursor.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_cursor.c rename to dll/directx/d3d9/d3d9_cursor.c diff --git a/reactos/dll/directx/d3d9/d3d9_cursor.h b/dll/directx/d3d9/d3d9_cursor.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_cursor.h rename to dll/directx/d3d9/d3d9_cursor.h diff --git a/reactos/dll/directx/d3d9/d3d9_device.c b/dll/directx/d3d9/d3d9_device.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_device.c rename to dll/directx/d3d9/d3d9_device.c diff --git a/reactos/dll/directx/d3d9/d3d9_device.h b/dll/directx/d3d9/d3d9_device.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_device.h rename to dll/directx/d3d9/d3d9_device.h diff --git a/reactos/dll/directx/d3d9/d3d9_haldevice.c b/dll/directx/d3d9/d3d9_haldevice.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_haldevice.c rename to dll/directx/d3d9/d3d9_haldevice.c diff --git a/reactos/dll/directx/d3d9/d3d9_haldevice.h b/dll/directx/d3d9/d3d9_haldevice.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_haldevice.h rename to dll/directx/d3d9/d3d9_haldevice.h diff --git a/reactos/dll/directx/d3d9/d3d9_helpers.c b/dll/directx/d3d9/d3d9_helpers.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_helpers.c rename to dll/directx/d3d9/d3d9_helpers.c diff --git a/reactos/dll/directx/d3d9/d3d9_helpers.h b/dll/directx/d3d9/d3d9_helpers.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_helpers.h rename to dll/directx/d3d9/d3d9_helpers.h diff --git a/reactos/dll/directx/d3d9/d3d9_impl.c b/dll/directx/d3d9/d3d9_impl.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_impl.c rename to dll/directx/d3d9/d3d9_impl.c diff --git a/reactos/dll/directx/d3d9/d3d9_mipmap.c b/dll/directx/d3d9/d3d9_mipmap.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_mipmap.c rename to dll/directx/d3d9/d3d9_mipmap.c diff --git a/reactos/dll/directx/d3d9/d3d9_mipmap.h b/dll/directx/d3d9/d3d9_mipmap.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_mipmap.h rename to dll/directx/d3d9/d3d9_mipmap.h diff --git a/reactos/dll/directx/d3d9/d3d9_private.h b/dll/directx/d3d9/d3d9_private.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_private.h rename to dll/directx/d3d9/d3d9_private.h diff --git a/reactos/dll/directx/d3d9/d3d9_puredevice.c b/dll/directx/d3d9/d3d9_puredevice.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_puredevice.c rename to dll/directx/d3d9/d3d9_puredevice.c diff --git a/reactos/dll/directx/d3d9/d3d9_puredevice.h b/dll/directx/d3d9/d3d9_puredevice.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_puredevice.h rename to dll/directx/d3d9/d3d9_puredevice.h diff --git a/reactos/dll/directx/d3d9/d3d9_resource.c b/dll/directx/d3d9/d3d9_resource.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_resource.c rename to dll/directx/d3d9/d3d9_resource.c diff --git a/reactos/dll/directx/d3d9/d3d9_resource.h b/dll/directx/d3d9/d3d9_resource.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_resource.h rename to dll/directx/d3d9/d3d9_resource.h diff --git a/reactos/dll/directx/d3d9/d3d9_surface.h b/dll/directx/d3d9/d3d9_surface.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_surface.h rename to dll/directx/d3d9/d3d9_surface.h diff --git a/reactos/dll/directx/d3d9/d3d9_swapchain.c b/dll/directx/d3d9/d3d9_swapchain.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_swapchain.c rename to dll/directx/d3d9/d3d9_swapchain.c diff --git a/reactos/dll/directx/d3d9/d3d9_swapchain.h b/dll/directx/d3d9/d3d9_swapchain.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_swapchain.h rename to dll/directx/d3d9/d3d9_swapchain.h diff --git a/reactos/dll/directx/d3d9/d3d9_texture.c b/dll/directx/d3d9/d3d9_texture.c similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_texture.c rename to dll/directx/d3d9/d3d9_texture.c diff --git a/reactos/dll/directx/d3d9/d3d9_texture.h b/dll/directx/d3d9/d3d9_texture.h similarity index 100% rename from reactos/dll/directx/d3d9/d3d9_texture.h rename to dll/directx/d3d9/d3d9_texture.h diff --git a/reactos/dll/directx/d3d9/device.c b/dll/directx/d3d9/device.c similarity index 100% rename from reactos/dll/directx/d3d9/device.c rename to dll/directx/d3d9/device.c diff --git a/reactos/dll/directx/d3d9/device.h b/dll/directx/d3d9/device.h similarity index 100% rename from reactos/dll/directx/d3d9/device.h rename to dll/directx/d3d9/device.h diff --git a/reactos/dll/directx/d3d9/format.c b/dll/directx/d3d9/format.c similarity index 100% rename from reactos/dll/directx/d3d9/format.c rename to dll/directx/d3d9/format.c diff --git a/reactos/dll/directx/d3d9/format.h b/dll/directx/d3d9/format.h similarity index 100% rename from reactos/dll/directx/d3d9/format.h rename to dll/directx/d3d9/format.h diff --git a/reactos/dll/directx/ddraw/Clipper/clipper.h b/dll/directx/ddraw/Clipper/clipper.h similarity index 100% rename from reactos/dll/directx/ddraw/Clipper/clipper.h rename to dll/directx/ddraw/Clipper/clipper.h diff --git a/reactos/dll/directx/ddraw/Clipper/clipper_main.c b/dll/directx/ddraw/Clipper/clipper_main.c similarity index 100% rename from reactos/dll/directx/ddraw/Clipper/clipper_main.c rename to dll/directx/ddraw/Clipper/clipper_main.c diff --git a/reactos/dll/directx/ddraw/Clipper/clipper_stubs.c b/dll/directx/ddraw/Clipper/clipper_stubs.c similarity index 100% rename from reactos/dll/directx/ddraw/Clipper/clipper_stubs.c rename to dll/directx/ddraw/Clipper/clipper_stubs.c diff --git a/reactos/dll/directx/ddraw/Color/color_stubs.c b/dll/directx/ddraw/Color/color_stubs.c similarity index 100% rename from reactos/dll/directx/ddraw/Color/color_stubs.c rename to dll/directx/ddraw/Color/color_stubs.c diff --git a/reactos/dll/directx/ddraw/Ddraw/GetCaps.c b/dll/directx/ddraw/Ddraw/GetCaps.c similarity index 100% rename from reactos/dll/directx/ddraw/Ddraw/GetCaps.c rename to dll/directx/ddraw/Ddraw/GetCaps.c diff --git a/reactos/dll/directx/ddraw/Ddraw/GetDeviceIdentifier.c b/dll/directx/ddraw/Ddraw/GetDeviceIdentifier.c similarity index 100% rename from reactos/dll/directx/ddraw/Ddraw/GetDeviceIdentifier.c rename to dll/directx/ddraw/Ddraw/GetDeviceIdentifier.c diff --git a/reactos/dll/directx/ddraw/Ddraw/callbacks_dd_hel.c b/dll/directx/ddraw/Ddraw/callbacks_dd_hel.c similarity index 100% rename from reactos/dll/directx/ddraw/Ddraw/callbacks_dd_hel.c rename to dll/directx/ddraw/Ddraw/callbacks_dd_hel.c diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw.h b/dll/directx/ddraw/Ddraw/ddraw.h similarity index 100% rename from reactos/dll/directx/ddraw/Ddraw/ddraw.h rename to dll/directx/ddraw/Ddraw/ddraw.h diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw_displaymode.c b/dll/directx/ddraw/Ddraw/ddraw_displaymode.c similarity index 100% rename from reactos/dll/directx/ddraw/Ddraw/ddraw_displaymode.c rename to dll/directx/ddraw/Ddraw/ddraw_displaymode.c diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c b/dll/directx/ddraw/Ddraw/ddraw_main.c similarity index 100% rename from reactos/dll/directx/ddraw/Ddraw/ddraw_main.c rename to dll/directx/ddraw/Ddraw/ddraw_main.c diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw_setcooperativelevel.c b/dll/directx/ddraw/Ddraw/ddraw_setcooperativelevel.c similarity index 100% rename from reactos/dll/directx/ddraw/Ddraw/ddraw_setcooperativelevel.c rename to dll/directx/ddraw/Ddraw/ddraw_setcooperativelevel.c diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw_stubs.c b/dll/directx/ddraw/Ddraw/ddraw_stubs.c similarity index 100% rename from reactos/dll/directx/ddraw/Ddraw/ddraw_stubs.c rename to dll/directx/ddraw/Ddraw/ddraw_stubs.c diff --git a/reactos/dll/directx/ddraw/Gamma/gamma_stubs.c b/dll/directx/ddraw/Gamma/gamma_stubs.c similarity index 100% rename from reactos/dll/directx/ddraw/Gamma/gamma_stubs.c rename to dll/directx/ddraw/Gamma/gamma_stubs.c diff --git a/reactos/dll/directx/ddraw/Kernel/kernel_stubs.c b/dll/directx/ddraw/Kernel/kernel_stubs.c similarity index 100% rename from reactos/dll/directx/ddraw/Kernel/kernel_stubs.c rename to dll/directx/ddraw/Kernel/kernel_stubs.c diff --git a/reactos/dll/directx/ddraw/Palette/palette_stubs.c b/dll/directx/ddraw/Palette/palette_stubs.c similarity index 100% rename from reactos/dll/directx/ddraw/Palette/palette_stubs.c rename to dll/directx/ddraw/Palette/palette_stubs.c diff --git a/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c b/dll/directx/ddraw/Surface/callbacks_surf_hel.c similarity index 100% rename from reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c rename to dll/directx/ddraw/Surface/callbacks_surf_hel.c diff --git a/reactos/dll/directx/ddraw/Surface/createsurface.c b/dll/directx/ddraw/Surface/createsurface.c similarity index 100% rename from reactos/dll/directx/ddraw/Surface/createsurface.c rename to dll/directx/ddraw/Surface/createsurface.c diff --git a/reactos/dll/directx/ddraw/Surface/surface.h b/dll/directx/ddraw/Surface/surface.h similarity index 100% rename from reactos/dll/directx/ddraw/Surface/surface.h rename to dll/directx/ddraw/Surface/surface.h diff --git a/reactos/dll/directx/ddraw/Surface/surface_main.c b/dll/directx/ddraw/Surface/surface_main.c similarity index 100% rename from reactos/dll/directx/ddraw/Surface/surface_main.c rename to dll/directx/ddraw/Surface/surface_main.c diff --git a/reactos/dll/directx/ddraw/Surface/surface_stubs.c b/dll/directx/ddraw/Surface/surface_stubs.c similarity index 100% rename from reactos/dll/directx/ddraw/Surface/surface_stubs.c rename to dll/directx/ddraw/Surface/surface_stubs.c diff --git a/reactos/dll/directx/ddraw/Videoport/videoport_stubs.c b/dll/directx/ddraw/Videoport/videoport_stubs.c similarity index 100% rename from reactos/dll/directx/ddraw/Videoport/videoport_stubs.c rename to dll/directx/ddraw/Videoport/videoport_stubs.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectD3D2_Vtable.c b/dll/directx/ddraw/Vtable/DirectD3D2_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectD3D2_Vtable.c rename to dll/directx/ddraw/Vtable/DirectD3D2_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectD3D3_Vtable.c b/dll/directx/ddraw/Vtable/DirectD3D3_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectD3D3_Vtable.c rename to dll/directx/ddraw/Vtable/DirectD3D3_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectD3D7_Vtable.c b/dll/directx/ddraw/Vtable/DirectD3D7_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectD3D7_Vtable.c rename to dll/directx/ddraw/Vtable/DirectD3D7_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectD3D_Vtable.c b/dll/directx/ddraw/Vtable/DirectD3D_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectD3D_Vtable.c rename to dll/directx/ddraw/Vtable/DirectD3D_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDraw2_Vtable.c b/dll/directx/ddraw/Vtable/DirectDraw2_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDraw2_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDraw2_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDraw4_Vtable.c b/dll/directx/ddraw/Vtable/DirectDraw4_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDraw4_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDraw4_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDraw7_Vtable.c b/dll/directx/ddraw/Vtable/DirectDraw7_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDraw7_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDraw7_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDrawSurface2_Vtable.c b/dll/directx/ddraw/Vtable/DirectDrawSurface2_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDrawSurface2_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDrawSurface2_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDrawSurface3_Vtable.c b/dll/directx/ddraw/Vtable/DirectDrawSurface3_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDrawSurface3_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDrawSurface3_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDrawSurface4_Vtable.c b/dll/directx/ddraw/Vtable/DirectDrawSurface4_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDrawSurface4_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDrawSurface4_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDrawSurface7_Vtable.c b/dll/directx/ddraw/Vtable/DirectDrawSurface7_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDrawSurface7_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDrawSurface7_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDrawSurface_Vtable.c b/dll/directx/ddraw/Vtable/DirectDrawSurface_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDrawSurface_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDrawSurface_Vtable.c diff --git a/reactos/dll/directx/ddraw/Vtable/DirectDraw_Vtable.c b/dll/directx/ddraw/Vtable/DirectDraw_Vtable.c similarity index 100% rename from reactos/dll/directx/ddraw/Vtable/DirectDraw_Vtable.c rename to dll/directx/ddraw/Vtable/DirectDraw_Vtable.c diff --git a/reactos/dll/directx/ddraw/cleanup.c b/dll/directx/ddraw/cleanup.c similarity index 100% rename from reactos/dll/directx/ddraw/cleanup.c rename to dll/directx/ddraw/cleanup.c diff --git a/reactos/dll/directx/ddraw/d3d/DirectD3D_main.c b/dll/directx/ddraw/d3d/DirectD3D_main.c similarity index 100% rename from reactos/dll/directx/ddraw/d3d/DirectD3D_main.c rename to dll/directx/ddraw/d3d/DirectD3D_main.c diff --git a/reactos/dll/directx/ddraw/ddraw.def b/dll/directx/ddraw/ddraw.def similarity index 100% rename from reactos/dll/directx/ddraw/ddraw.def rename to dll/directx/ddraw/ddraw.def diff --git a/reactos/dll/directx/ddraw/ddraw.rbuild b/dll/directx/ddraw/ddraw.rbuild similarity index 100% rename from reactos/dll/directx/ddraw/ddraw.rbuild rename to dll/directx/ddraw/ddraw.rbuild diff --git a/reactos/dll/directx/ddraw/ddraw.rc b/dll/directx/ddraw/ddraw.rc similarity index 100% rename from reactos/dll/directx/ddraw/ddraw.rc rename to dll/directx/ddraw/ddraw.rc diff --git a/reactos/dll/directx/ddraw/ddraw_structures.txt b/dll/directx/ddraw/ddraw_structures.txt similarity index 100% rename from reactos/dll/directx/ddraw/ddraw_structures.txt rename to dll/directx/ddraw/ddraw_structures.txt diff --git a/reactos/dll/directx/ddraw/main.c b/dll/directx/ddraw/main.c similarity index 100% rename from reactos/dll/directx/ddraw/main.c rename to dll/directx/ddraw/main.c diff --git a/reactos/dll/directx/ddraw/resource.h b/dll/directx/ddraw/resource.h similarity index 100% rename from reactos/dll/directx/ddraw/resource.h rename to dll/directx/ddraw/resource.h diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/dll/directx/ddraw/rosdraw.h similarity index 100% rename from reactos/dll/directx/ddraw/rosdraw.h rename to dll/directx/ddraw/rosdraw.h diff --git a/reactos/dll/directx/ddraw/startup.c b/dll/directx/ddraw/startup.c similarity index 100% rename from reactos/dll/directx/ddraw/startup.c rename to dll/directx/ddraw/startup.c diff --git a/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c b/dll/directx/ddraw/thunks/ddraw_thunk.c similarity index 100% rename from reactos/dll/directx/ddraw/thunks/ddraw_thunk.c rename to dll/directx/ddraw/thunks/ddraw_thunk.c diff --git a/reactos/dll/directx/ddraw/thunks/surface_thunk.c b/dll/directx/ddraw/thunks/surface_thunk.c similarity index 100% rename from reactos/dll/directx/ddraw/thunks/surface_thunk.c rename to dll/directx/ddraw/thunks/surface_thunk.c diff --git a/reactos/dll/directx/devenum/Makefile.in b/dll/directx/devenum/Makefile.in similarity index 100% rename from reactos/dll/directx/devenum/Makefile.in rename to dll/directx/devenum/Makefile.in diff --git a/reactos/dll/directx/devenum/createdevenum.c b/dll/directx/devenum/createdevenum.c similarity index 100% rename from reactos/dll/directx/devenum/createdevenum.c rename to dll/directx/devenum/createdevenum.c diff --git a/reactos/dll/directx/devenum/devenum.rbuild b/dll/directx/devenum/devenum.rbuild similarity index 100% rename from reactos/dll/directx/devenum/devenum.rbuild rename to dll/directx/devenum/devenum.rbuild diff --git a/reactos/dll/directx/devenum/devenum.rc b/dll/directx/devenum/devenum.rc similarity index 100% rename from reactos/dll/directx/devenum/devenum.rc rename to dll/directx/devenum/devenum.rc diff --git a/reactos/dll/directx/devenum/devenum.spec b/dll/directx/devenum/devenum.spec similarity index 100% rename from reactos/dll/directx/devenum/devenum.spec rename to dll/directx/devenum/devenum.spec diff --git a/reactos/dll/directx/devenum/devenum_main.c b/dll/directx/devenum/devenum_main.c similarity index 100% rename from reactos/dll/directx/devenum/devenum_main.c rename to dll/directx/devenum/devenum_main.c diff --git a/reactos/dll/directx/devenum/devenum_private.h b/dll/directx/devenum/devenum_private.h similarity index 100% rename from reactos/dll/directx/devenum/devenum_private.h rename to dll/directx/devenum/devenum_private.h diff --git a/reactos/dll/directx/devenum/factory.c b/dll/directx/devenum/factory.c similarity index 100% rename from reactos/dll/directx/devenum/factory.c rename to dll/directx/devenum/factory.c diff --git a/reactos/dll/directx/devenum/mediacatenum.c b/dll/directx/devenum/mediacatenum.c similarity index 100% rename from reactos/dll/directx/devenum/mediacatenum.c rename to dll/directx/devenum/mediacatenum.c diff --git a/reactos/dll/directx/devenum/parsedisplayname.c b/dll/directx/devenum/parsedisplayname.c similarity index 100% rename from reactos/dll/directx/devenum/parsedisplayname.c rename to dll/directx/devenum/parsedisplayname.c diff --git a/reactos/dll/directx/dinput/data_formats.c b/dll/directx/dinput/data_formats.c similarity index 100% rename from reactos/dll/directx/dinput/data_formats.c rename to dll/directx/dinput/data_formats.c diff --git a/reactos/dll/directx/dinput/device.c b/dll/directx/dinput/device.c similarity index 100% rename from reactos/dll/directx/dinput/device.c rename to dll/directx/dinput/device.c diff --git a/reactos/dll/directx/dinput/device_private.h b/dll/directx/dinput/device_private.h similarity index 100% rename from reactos/dll/directx/dinput/device_private.h rename to dll/directx/dinput/device_private.h diff --git a/reactos/dll/directx/dinput/dinput.rbuild b/dll/directx/dinput/dinput.rbuild similarity index 100% rename from reactos/dll/directx/dinput/dinput.rbuild rename to dll/directx/dinput/dinput.rbuild diff --git a/reactos/dll/directx/dinput/dinput.spec b/dll/directx/dinput/dinput.spec similarity index 100% rename from reactos/dll/directx/dinput/dinput.spec rename to dll/directx/dinput/dinput.spec diff --git a/reactos/dll/directx/dinput/dinput_main.c b/dll/directx/dinput/dinput_main.c similarity index 100% rename from reactos/dll/directx/dinput/dinput_main.c rename to dll/directx/dinput/dinput_main.c diff --git a/reactos/dll/directx/dinput/dinput_private.h b/dll/directx/dinput/dinput_private.h similarity index 100% rename from reactos/dll/directx/dinput/dinput_private.h rename to dll/directx/dinput/dinput_private.h diff --git a/reactos/dll/directx/dinput/effect_linuxinput.c b/dll/directx/dinput/effect_linuxinput.c similarity index 100% rename from reactos/dll/directx/dinput/effect_linuxinput.c rename to dll/directx/dinput/effect_linuxinput.c diff --git a/reactos/dll/directx/dinput/joystick_linux.c b/dll/directx/dinput/joystick_linux.c similarity index 100% rename from reactos/dll/directx/dinput/joystick_linux.c rename to dll/directx/dinput/joystick_linux.c diff --git a/reactos/dll/directx/dinput/joystick_linuxinput.c b/dll/directx/dinput/joystick_linuxinput.c similarity index 100% rename from reactos/dll/directx/dinput/joystick_linuxinput.c rename to dll/directx/dinput/joystick_linuxinput.c diff --git a/reactos/dll/directx/dinput/keyboard.c b/dll/directx/dinput/keyboard.c similarity index 100% rename from reactos/dll/directx/dinput/keyboard.c rename to dll/directx/dinput/keyboard.c diff --git a/reactos/dll/directx/dinput/mouse.c b/dll/directx/dinput/mouse.c similarity index 100% rename from reactos/dll/directx/dinput/mouse.c rename to dll/directx/dinput/mouse.c diff --git a/reactos/dll/directx/dinput/regsvr.c b/dll/directx/dinput/regsvr.c similarity index 100% rename from reactos/dll/directx/dinput/regsvr.c rename to dll/directx/dinput/regsvr.c diff --git a/reactos/dll/directx/dinput/version.rc b/dll/directx/dinput/version.rc similarity index 100% rename from reactos/dll/directx/dinput/version.rc rename to dll/directx/dinput/version.rc diff --git a/reactos/dll/directx/dinput8/dinput8.rbuild b/dll/directx/dinput8/dinput8.rbuild similarity index 100% rename from reactos/dll/directx/dinput8/dinput8.rbuild rename to dll/directx/dinput8/dinput8.rbuild diff --git a/reactos/dll/directx/dinput8/dinput8.spec b/dll/directx/dinput8/dinput8.spec similarity index 100% rename from reactos/dll/directx/dinput8/dinput8.spec rename to dll/directx/dinput8/dinput8.spec diff --git a/reactos/dll/directx/dinput8/dinput8_main.c b/dll/directx/dinput8/dinput8_main.c similarity index 100% rename from reactos/dll/directx/dinput8/dinput8_main.c rename to dll/directx/dinput8/dinput8_main.c diff --git a/reactos/dll/directx/dinput8/version.rc b/dll/directx/dinput8/version.rc similarity index 100% rename from reactos/dll/directx/dinput8/version.rc rename to dll/directx/dinput8/version.rc diff --git a/reactos/dll/directx/directx.rbuild b/dll/directx/directx.rbuild similarity index 100% rename from reactos/dll/directx/directx.rbuild rename to dll/directx/directx.rbuild diff --git a/reactos/dll/directx/dplay/dplay.rbuild b/dll/directx/dplay/dplay.rbuild similarity index 100% rename from reactos/dll/directx/dplay/dplay.rbuild rename to dll/directx/dplay/dplay.rbuild diff --git a/reactos/dll/directx/dplay/dplay.spec b/dll/directx/dplay/dplay.spec similarity index 100% rename from reactos/dll/directx/dplay/dplay.spec rename to dll/directx/dplay/dplay.spec diff --git a/reactos/dll/directx/dplay/dplay_main.c b/dll/directx/dplay/dplay_main.c similarity index 100% rename from reactos/dll/directx/dplay/dplay_main.c rename to dll/directx/dplay/dplay_main.c diff --git a/reactos/dll/directx/dplay/version.rc b/dll/directx/dplay/version.rc similarity index 100% rename from reactos/dll/directx/dplay/version.rc rename to dll/directx/dplay/version.rc diff --git a/reactos/dll/directx/dplayx/dpclassfactory.c b/dll/directx/dplayx/dpclassfactory.c similarity index 100% rename from reactos/dll/directx/dplayx/dpclassfactory.c rename to dll/directx/dplayx/dpclassfactory.c diff --git a/reactos/dll/directx/dplayx/dpinit.h b/dll/directx/dplayx/dpinit.h similarity index 100% rename from reactos/dll/directx/dplayx/dpinit.h rename to dll/directx/dplayx/dpinit.h diff --git a/reactos/dll/directx/dplayx/dplay.c b/dll/directx/dplayx/dplay.c similarity index 100% rename from reactos/dll/directx/dplayx/dplay.c rename to dll/directx/dplayx/dplay.c diff --git a/reactos/dll/directx/dplayx/dplay_global.h b/dll/directx/dplayx/dplay_global.h similarity index 100% rename from reactos/dll/directx/dplayx/dplay_global.h rename to dll/directx/dplayx/dplay_global.h diff --git a/reactos/dll/directx/dplayx/dplaysp.c b/dll/directx/dplayx/dplaysp.c similarity index 100% rename from reactos/dll/directx/dplayx/dplaysp.c rename to dll/directx/dplayx/dplaysp.c diff --git a/reactos/dll/directx/dplayx/dplaysp.h b/dll/directx/dplayx/dplaysp.h similarity index 100% rename from reactos/dll/directx/dplayx/dplaysp.h rename to dll/directx/dplayx/dplaysp.h diff --git a/reactos/dll/directx/dplayx/dplayx.rbuild b/dll/directx/dplayx/dplayx.rbuild similarity index 100% rename from reactos/dll/directx/dplayx/dplayx.rbuild rename to dll/directx/dplayx/dplayx.rbuild diff --git a/reactos/dll/directx/dplayx/dplayx.spec b/dll/directx/dplayx/dplayx.spec similarity index 100% rename from reactos/dll/directx/dplayx/dplayx.spec rename to dll/directx/dplayx/dplayx.spec diff --git a/reactos/dll/directx/dplayx/dplayx_global.c b/dll/directx/dplayx/dplayx_global.c similarity index 100% rename from reactos/dll/directx/dplayx/dplayx_global.c rename to dll/directx/dplayx/dplayx_global.c diff --git a/reactos/dll/directx/dplayx/dplayx_global.h b/dll/directx/dplayx/dplayx_global.h similarity index 100% rename from reactos/dll/directx/dplayx/dplayx_global.h rename to dll/directx/dplayx/dplayx_global.h diff --git a/reactos/dll/directx/dplayx/dplayx_main.c b/dll/directx/dplayx/dplayx_main.c similarity index 100% rename from reactos/dll/directx/dplayx/dplayx_main.c rename to dll/directx/dplayx/dplayx_main.c diff --git a/reactos/dll/directx/dplayx/dplayx_messages.c b/dll/directx/dplayx/dplayx_messages.c similarity index 100% rename from reactos/dll/directx/dplayx/dplayx_messages.c rename to dll/directx/dplayx/dplayx_messages.c diff --git a/reactos/dll/directx/dplayx/dplayx_messages.h b/dll/directx/dplayx/dplayx_messages.h similarity index 100% rename from reactos/dll/directx/dplayx/dplayx_messages.h rename to dll/directx/dplayx/dplayx_messages.h diff --git a/reactos/dll/directx/dplayx/dplayx_queue.h b/dll/directx/dplayx/dplayx_queue.h similarity index 100% rename from reactos/dll/directx/dplayx/dplayx_queue.h rename to dll/directx/dplayx/dplayx_queue.h diff --git a/reactos/dll/directx/dplayx/dplobby.c b/dll/directx/dplayx/dplobby.c similarity index 100% rename from reactos/dll/directx/dplayx/dplobby.c rename to dll/directx/dplayx/dplobby.c diff --git a/reactos/dll/directx/dplayx/lobbysp.c b/dll/directx/dplayx/lobbysp.c similarity index 100% rename from reactos/dll/directx/dplayx/lobbysp.c rename to dll/directx/dplayx/lobbysp.c diff --git a/reactos/dll/directx/dplayx/lobbysp.h b/dll/directx/dplayx/lobbysp.h similarity index 100% rename from reactos/dll/directx/dplayx/lobbysp.h rename to dll/directx/dplayx/lobbysp.h diff --git a/reactos/dll/directx/dplayx/name_server.c b/dll/directx/dplayx/name_server.c similarity index 100% rename from reactos/dll/directx/dplayx/name_server.c rename to dll/directx/dplayx/name_server.c diff --git a/reactos/dll/directx/dplayx/name_server.h b/dll/directx/dplayx/name_server.h similarity index 100% rename from reactos/dll/directx/dplayx/name_server.h rename to dll/directx/dplayx/name_server.h diff --git a/reactos/dll/directx/dplayx/regsvr.c b/dll/directx/dplayx/regsvr.c similarity index 100% rename from reactos/dll/directx/dplayx/regsvr.c rename to dll/directx/dplayx/regsvr.c diff --git a/reactos/dll/directx/dplayx/version.rc b/dll/directx/dplayx/version.rc similarity index 100% rename from reactos/dll/directx/dplayx/version.rc rename to dll/directx/dplayx/version.rc diff --git a/reactos/dll/directx/dsound/buffer.c b/dll/directx/dsound/buffer.c similarity index 100% rename from reactos/dll/directx/dsound/buffer.c rename to dll/directx/dsound/buffer.c diff --git a/reactos/dll/directx/dsound/capture.c b/dll/directx/dsound/capture.c similarity index 100% rename from reactos/dll/directx/dsound/capture.c rename to dll/directx/dsound/capture.c diff --git a/reactos/dll/directx/dsound/dsound.c b/dll/directx/dsound/dsound.c similarity index 100% rename from reactos/dll/directx/dsound/dsound.c rename to dll/directx/dsound/dsound.c diff --git a/reactos/dll/directx/dsound/dsound.rbuild b/dll/directx/dsound/dsound.rbuild similarity index 100% rename from reactos/dll/directx/dsound/dsound.rbuild rename to dll/directx/dsound/dsound.rbuild diff --git a/reactos/dll/directx/dsound/dsound.spec b/dll/directx/dsound/dsound.spec similarity index 100% rename from reactos/dll/directx/dsound/dsound.spec rename to dll/directx/dsound/dsound.spec diff --git a/reactos/dll/directx/dsound/dsound_main.c b/dll/directx/dsound/dsound_main.c similarity index 100% rename from reactos/dll/directx/dsound/dsound_main.c rename to dll/directx/dsound/dsound_main.c diff --git a/reactos/dll/directx/dsound/dsound_private.h b/dll/directx/dsound/dsound_private.h similarity index 100% rename from reactos/dll/directx/dsound/dsound_private.h rename to dll/directx/dsound/dsound_private.h diff --git a/reactos/dll/directx/dsound/duplex.c b/dll/directx/dsound/duplex.c similarity index 100% rename from reactos/dll/directx/dsound/duplex.c rename to dll/directx/dsound/duplex.c diff --git a/reactos/dll/directx/dsound/dxroslayer/dxros_layer.h b/dll/directx/dsound/dxroslayer/dxros_layer.h similarity index 100% rename from reactos/dll/directx/dsound/dxroslayer/dxros_layer.h rename to dll/directx/dsound/dxroslayer/dxros_layer.h diff --git a/reactos/dll/directx/dsound/dxroslayer/dxrosdrv_querydsounddesc.c b/dll/directx/dsound/dxroslayer/dxrosdrv_querydsounddesc.c similarity index 100% rename from reactos/dll/directx/dsound/dxroslayer/dxrosdrv_querydsounddesc.c rename to dll/directx/dsound/dxroslayer/dxrosdrv_querydsounddesc.c diff --git a/reactos/dll/directx/dsound/dxroslayer/dxrosdrv_querydsoundiface.c b/dll/directx/dsound/dxroslayer/dxrosdrv_querydsoundiface.c similarity index 100% rename from reactos/dll/directx/dsound/dxroslayer/dxrosdrv_querydsoundiface.c rename to dll/directx/dsound/dxroslayer/dxrosdrv_querydsoundiface.c diff --git a/reactos/dll/directx/dsound/dxroslayer/dxroslayer.c b/dll/directx/dsound/dxroslayer/dxroslayer.c similarity index 100% rename from reactos/dll/directx/dsound/dxroslayer/dxroslayer.c rename to dll/directx/dsound/dxroslayer/dxroslayer.c diff --git a/reactos/dll/directx/dsound/dxroslayer/getguidfromstring.c b/dll/directx/dsound/dxroslayer/getguidfromstring.c similarity index 100% rename from reactos/dll/directx/dsound/dxroslayer/getguidfromstring.c rename to dll/directx/dsound/dxroslayer/getguidfromstring.c diff --git a/reactos/dll/directx/dsound/mixer.c b/dll/directx/dsound/mixer.c similarity index 100% rename from reactos/dll/directx/dsound/mixer.c rename to dll/directx/dsound/mixer.c diff --git a/reactos/dll/directx/dsound/primary.c b/dll/directx/dsound/primary.c similarity index 100% rename from reactos/dll/directx/dsound/primary.c rename to dll/directx/dsound/primary.c diff --git a/reactos/dll/directx/dsound/propset.c b/dll/directx/dsound/propset.c similarity index 100% rename from reactos/dll/directx/dsound/propset.c rename to dll/directx/dsound/propset.c diff --git a/reactos/dll/directx/dsound/regsvr.c b/dll/directx/dsound/regsvr.c similarity index 100% rename from reactos/dll/directx/dsound/regsvr.c rename to dll/directx/dsound/regsvr.c diff --git a/reactos/dll/directx/dsound/sound3d.c b/dll/directx/dsound/sound3d.c similarity index 100% rename from reactos/dll/directx/dsound/sound3d.c rename to dll/directx/dsound/sound3d.c diff --git a/reactos/dll/directx/dsound/tests/.cvsignore b/dll/directx/dsound/tests/.cvsignore similarity index 100% rename from reactos/dll/directx/dsound/tests/.cvsignore rename to dll/directx/dsound/tests/.cvsignore diff --git a/reactos/dll/directx/dsound/tests/Makefile.in b/dll/directx/dsound/tests/Makefile.in similarity index 100% rename from reactos/dll/directx/dsound/tests/Makefile.in rename to dll/directx/dsound/tests/Makefile.in diff --git a/reactos/dll/directx/dsound/tests/capture.c b/dll/directx/dsound/tests/capture.c similarity index 100% rename from reactos/dll/directx/dsound/tests/capture.c rename to dll/directx/dsound/tests/capture.c diff --git a/reactos/dll/directx/dsound/tests/ds3d.c b/dll/directx/dsound/tests/ds3d.c similarity index 100% rename from reactos/dll/directx/dsound/tests/ds3d.c rename to dll/directx/dsound/tests/ds3d.c diff --git a/reactos/dll/directx/dsound/tests/ds3d8.c b/dll/directx/dsound/tests/ds3d8.c similarity index 100% rename from reactos/dll/directx/dsound/tests/ds3d8.c rename to dll/directx/dsound/tests/ds3d8.c diff --git a/reactos/dll/directx/dsound/tests/dsound.c b/dll/directx/dsound/tests/dsound.c similarity index 100% rename from reactos/dll/directx/dsound/tests/dsound.c rename to dll/directx/dsound/tests/dsound.c diff --git a/reactos/dll/directx/dsound/tests/dsound8.c b/dll/directx/dsound/tests/dsound8.c similarity index 100% rename from reactos/dll/directx/dsound/tests/dsound8.c rename to dll/directx/dsound/tests/dsound8.c diff --git a/reactos/dll/directx/dsound/tests/dsound_test.h b/dll/directx/dsound/tests/dsound_test.h similarity index 100% rename from reactos/dll/directx/dsound/tests/dsound_test.h rename to dll/directx/dsound/tests/dsound_test.h diff --git a/reactos/dll/directx/dsound/tests/propset.c b/dll/directx/dsound/tests/propset.c similarity index 100% rename from reactos/dll/directx/dsound/tests/propset.c rename to dll/directx/dsound/tests/propset.c diff --git a/reactos/dll/directx/dsound/version.rc b/dll/directx/dsound/version.rc similarity index 100% rename from reactos/dll/directx/dsound/version.rc rename to dll/directx/dsound/version.rc diff --git a/reactos/dll/directx/dxdiagn/container.c b/dll/directx/dxdiagn/container.c similarity index 100% rename from reactos/dll/directx/dxdiagn/container.c rename to dll/directx/dxdiagn/container.c diff --git a/reactos/dll/directx/dxdiagn/dxdiag_main.c b/dll/directx/dxdiagn/dxdiag_main.c similarity index 100% rename from reactos/dll/directx/dxdiagn/dxdiag_main.c rename to dll/directx/dxdiagn/dxdiag_main.c diff --git a/reactos/dll/directx/dxdiagn/dxdiag_private.h b/dll/directx/dxdiagn/dxdiag_private.h similarity index 100% rename from reactos/dll/directx/dxdiagn/dxdiag_private.h rename to dll/directx/dxdiagn/dxdiag_private.h diff --git a/reactos/dll/directx/dxdiagn/dxdiagn.rbuild b/dll/directx/dxdiagn/dxdiagn.rbuild similarity index 100% rename from reactos/dll/directx/dxdiagn/dxdiagn.rbuild rename to dll/directx/dxdiagn/dxdiagn.rbuild diff --git a/reactos/dll/directx/dxdiagn/dxdiagn.spec b/dll/directx/dxdiagn/dxdiagn.spec similarity index 100% rename from reactos/dll/directx/dxdiagn/dxdiagn.spec rename to dll/directx/dxdiagn/dxdiagn.spec diff --git a/reactos/dll/directx/dxdiagn/provider.c b/dll/directx/dxdiagn/provider.c similarity index 100% rename from reactos/dll/directx/dxdiagn/provider.c rename to dll/directx/dxdiagn/provider.c diff --git a/reactos/dll/directx/dxdiagn/regsvr.c b/dll/directx/dxdiagn/regsvr.c similarity index 100% rename from reactos/dll/directx/dxdiagn/regsvr.c rename to dll/directx/dxdiagn/regsvr.c diff --git a/reactos/dll/directx/dxdiagn/version.rc b/dll/directx/dxdiagn/version.rc similarity index 100% rename from reactos/dll/directx/dxdiagn/version.rc rename to dll/directx/dxdiagn/version.rc diff --git a/reactos/dll/directx/ksproxy/ksproxy.c b/dll/directx/ksproxy/ksproxy.c similarity index 100% rename from reactos/dll/directx/ksproxy/ksproxy.c rename to dll/directx/ksproxy/ksproxy.c diff --git a/reactos/dll/directx/ksproxy/ksproxy.rbuild b/dll/directx/ksproxy/ksproxy.rbuild similarity index 100% rename from reactos/dll/directx/ksproxy/ksproxy.rbuild rename to dll/directx/ksproxy/ksproxy.rbuild diff --git a/reactos/dll/directx/ksproxy/ksproxy.rc b/dll/directx/ksproxy/ksproxy.rc similarity index 100% rename from reactos/dll/directx/ksproxy/ksproxy.rc rename to dll/directx/ksproxy/ksproxy.rc diff --git a/reactos/dll/directx/ksproxy/ksproxy.spec b/dll/directx/ksproxy/ksproxy.spec similarity index 100% rename from reactos/dll/directx/ksproxy/ksproxy.spec rename to dll/directx/ksproxy/ksproxy.spec diff --git a/reactos/dll/directx/ksuser/ksuser.c b/dll/directx/ksuser/ksuser.c similarity index 100% rename from reactos/dll/directx/ksuser/ksuser.c rename to dll/directx/ksuser/ksuser.c diff --git a/reactos/dll/directx/ksuser/ksuser.def b/dll/directx/ksuser/ksuser.def similarity index 100% rename from reactos/dll/directx/ksuser/ksuser.def rename to dll/directx/ksuser/ksuser.def diff --git a/reactos/dll/directx/ksuser/ksuser.h b/dll/directx/ksuser/ksuser.h similarity index 100% rename from reactos/dll/directx/ksuser/ksuser.h rename to dll/directx/ksuser/ksuser.h diff --git a/reactos/dll/directx/ksuser/ksuser.rbuild b/dll/directx/ksuser/ksuser.rbuild similarity index 100% rename from reactos/dll/directx/ksuser/ksuser.rbuild rename to dll/directx/ksuser/ksuser.rbuild diff --git a/reactos/dll/directx/ksuser/ksuser.rc b/dll/directx/ksuser/ksuser.rc similarity index 100% rename from reactos/dll/directx/ksuser/ksuser.rc rename to dll/directx/ksuser/ksuser.rc diff --git a/reactos/dll/directx/msdmo/msdmo.c b/dll/directx/msdmo/msdmo.c similarity index 100% rename from reactos/dll/directx/msdmo/msdmo.c rename to dll/directx/msdmo/msdmo.c diff --git a/reactos/dll/directx/msdmo/msdmo.rbuild b/dll/directx/msdmo/msdmo.rbuild similarity index 100% rename from reactos/dll/directx/msdmo/msdmo.rbuild rename to dll/directx/msdmo/msdmo.rbuild diff --git a/reactos/dll/directx/msdmo/msdmo.rc b/dll/directx/msdmo/msdmo.rc similarity index 100% rename from reactos/dll/directx/msdmo/msdmo.rc rename to dll/directx/msdmo/msdmo.rc diff --git a/reactos/dll/directx/msdmo/msdmo.spec b/dll/directx/msdmo/msdmo.spec similarity index 100% rename from reactos/dll/directx/msdmo/msdmo.spec rename to dll/directx/msdmo/msdmo.spec diff --git a/reactos/dll/directx/qedit/qedit.c b/dll/directx/qedit/qedit.c similarity index 100% rename from reactos/dll/directx/qedit/qedit.c rename to dll/directx/qedit/qedit.c diff --git a/reactos/dll/directx/qedit/qedit.rbuild b/dll/directx/qedit/qedit.rbuild similarity index 100% rename from reactos/dll/directx/qedit/qedit.rbuild rename to dll/directx/qedit/qedit.rbuild diff --git a/reactos/dll/directx/qedit/qedit.rc b/dll/directx/qedit/qedit.rc similarity index 100% rename from reactos/dll/directx/qedit/qedit.rc rename to dll/directx/qedit/qedit.rc diff --git a/reactos/dll/directx/qedit/qedit.spec b/dll/directx/qedit/qedit.spec similarity index 100% rename from reactos/dll/directx/qedit/qedit.spec rename to dll/directx/qedit/qedit.spec diff --git a/reactos/dll/directx/quartz/acmwrapper.c b/dll/directx/quartz/acmwrapper.c similarity index 100% rename from reactos/dll/directx/quartz/acmwrapper.c rename to dll/directx/quartz/acmwrapper.c diff --git a/reactos/dll/directx/quartz/avidec.c b/dll/directx/quartz/avidec.c similarity index 100% rename from reactos/dll/directx/quartz/avidec.c rename to dll/directx/quartz/avidec.c diff --git a/reactos/dll/directx/quartz/avisplit.c b/dll/directx/quartz/avisplit.c similarity index 100% rename from reactos/dll/directx/quartz/avisplit.c rename to dll/directx/quartz/avisplit.c diff --git a/reactos/dll/directx/quartz/control.c b/dll/directx/quartz/control.c similarity index 100% rename from reactos/dll/directx/quartz/control.c rename to dll/directx/quartz/control.c diff --git a/reactos/dll/directx/quartz/control_private.h b/dll/directx/quartz/control_private.h similarity index 100% rename from reactos/dll/directx/quartz/control_private.h rename to dll/directx/quartz/control_private.h diff --git a/reactos/dll/directx/quartz/dsoundrender.c b/dll/directx/quartz/dsoundrender.c similarity index 100% rename from reactos/dll/directx/quartz/dsoundrender.c rename to dll/directx/quartz/dsoundrender.c diff --git a/reactos/dll/directx/quartz/enumfilters.c b/dll/directx/quartz/enumfilters.c similarity index 100% rename from reactos/dll/directx/quartz/enumfilters.c rename to dll/directx/quartz/enumfilters.c diff --git a/reactos/dll/directx/quartz/enummedia.c b/dll/directx/quartz/enummedia.c similarity index 100% rename from reactos/dll/directx/quartz/enummedia.c rename to dll/directx/quartz/enummedia.c diff --git a/reactos/dll/directx/quartz/enummoniker.c b/dll/directx/quartz/enummoniker.c similarity index 100% rename from reactos/dll/directx/quartz/enummoniker.c rename to dll/directx/quartz/enummoniker.c diff --git a/reactos/dll/directx/quartz/enumpins.c b/dll/directx/quartz/enumpins.c similarity index 100% rename from reactos/dll/directx/quartz/enumpins.c rename to dll/directx/quartz/enumpins.c diff --git a/reactos/dll/directx/quartz/enumregfilters.c b/dll/directx/quartz/enumregfilters.c similarity index 100% rename from reactos/dll/directx/quartz/enumregfilters.c rename to dll/directx/quartz/enumregfilters.c diff --git a/reactos/dll/directx/quartz/filesource.c b/dll/directx/quartz/filesource.c similarity index 100% rename from reactos/dll/directx/quartz/filesource.c rename to dll/directx/quartz/filesource.c diff --git a/reactos/dll/directx/quartz/filtergraph.c b/dll/directx/quartz/filtergraph.c similarity index 100% rename from reactos/dll/directx/quartz/filtergraph.c rename to dll/directx/quartz/filtergraph.c diff --git a/reactos/dll/directx/quartz/filtermapper.c b/dll/directx/quartz/filtermapper.c similarity index 100% rename from reactos/dll/directx/quartz/filtermapper.c rename to dll/directx/quartz/filtermapper.c diff --git a/reactos/dll/directx/quartz/main.c b/dll/directx/quartz/main.c similarity index 100% rename from reactos/dll/directx/quartz/main.c rename to dll/directx/quartz/main.c diff --git a/reactos/dll/directx/quartz/memallocator.c b/dll/directx/quartz/memallocator.c similarity index 100% rename from reactos/dll/directx/quartz/memallocator.c rename to dll/directx/quartz/memallocator.c diff --git a/reactos/dll/directx/quartz/mpegsplit.c b/dll/directx/quartz/mpegsplit.c similarity index 100% rename from reactos/dll/directx/quartz/mpegsplit.c rename to dll/directx/quartz/mpegsplit.c diff --git a/reactos/dll/directx/quartz/nullrenderer.c b/dll/directx/quartz/nullrenderer.c similarity index 100% rename from reactos/dll/directx/quartz/nullrenderer.c rename to dll/directx/quartz/nullrenderer.c diff --git a/reactos/dll/directx/quartz/parser.c b/dll/directx/quartz/parser.c similarity index 100% rename from reactos/dll/directx/quartz/parser.c rename to dll/directx/quartz/parser.c diff --git a/reactos/dll/directx/quartz/parser.h b/dll/directx/quartz/parser.h similarity index 100% rename from reactos/dll/directx/quartz/parser.h rename to dll/directx/quartz/parser.h diff --git a/reactos/dll/directx/quartz/pin.c b/dll/directx/quartz/pin.c similarity index 100% rename from reactos/dll/directx/quartz/pin.c rename to dll/directx/quartz/pin.c diff --git a/reactos/dll/directx/quartz/pin.h b/dll/directx/quartz/pin.h similarity index 100% rename from reactos/dll/directx/quartz/pin.h rename to dll/directx/quartz/pin.h diff --git a/reactos/dll/directx/quartz/quartz.rbuild b/dll/directx/quartz/quartz.rbuild similarity index 100% rename from reactos/dll/directx/quartz/quartz.rbuild rename to dll/directx/quartz/quartz.rbuild diff --git a/reactos/dll/directx/quartz/quartz.spec b/dll/directx/quartz/quartz.spec similarity index 100% rename from reactos/dll/directx/quartz/quartz.spec rename to dll/directx/quartz/quartz.spec diff --git a/reactos/dll/directx/quartz/quartz_private.h b/dll/directx/quartz/quartz_private.h similarity index 100% rename from reactos/dll/directx/quartz/quartz_private.h rename to dll/directx/quartz/quartz_private.h diff --git a/reactos/dll/directx/quartz/regsvr.c b/dll/directx/quartz/regsvr.c similarity index 100% rename from reactos/dll/directx/quartz/regsvr.c rename to dll/directx/quartz/regsvr.c diff --git a/reactos/dll/directx/quartz/systemclock.c b/dll/directx/quartz/systemclock.c similarity index 100% rename from reactos/dll/directx/quartz/systemclock.c rename to dll/directx/quartz/systemclock.c diff --git a/reactos/dll/directx/quartz/transform.c b/dll/directx/quartz/transform.c similarity index 100% rename from reactos/dll/directx/quartz/transform.c rename to dll/directx/quartz/transform.c diff --git a/reactos/dll/directx/quartz/transform.h b/dll/directx/quartz/transform.h similarity index 100% rename from reactos/dll/directx/quartz/transform.h rename to dll/directx/quartz/transform.h diff --git a/reactos/dll/directx/quartz/version.rc b/dll/directx/quartz/version.rc similarity index 100% rename from reactos/dll/directx/quartz/version.rc rename to dll/directx/quartz/version.rc diff --git a/reactos/dll/directx/quartz/videorenderer.c b/dll/directx/quartz/videorenderer.c similarity index 100% rename from reactos/dll/directx/quartz/videorenderer.c rename to dll/directx/quartz/videorenderer.c diff --git a/reactos/dll/directx/quartz/waveparser.c b/dll/directx/quartz/waveparser.c similarity index 100% rename from reactos/dll/directx/quartz/waveparser.c rename to dll/directx/quartz/waveparser.c diff --git a/reactos/dll/directx/wine/d3d8/Makefile.in b/dll/directx/wine/d3d8/Makefile.in similarity index 100% rename from reactos/dll/directx/wine/d3d8/Makefile.in rename to dll/directx/wine/d3d8/Makefile.in diff --git a/reactos/dll/directx/wine/d3d8/basetexture.c b/dll/directx/wine/d3d8/basetexture.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/basetexture.c rename to dll/directx/wine/d3d8/basetexture.c diff --git a/reactos/dll/directx/wine/d3d8/cubetexture.c b/dll/directx/wine/d3d8/cubetexture.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/cubetexture.c rename to dll/directx/wine/d3d8/cubetexture.c diff --git a/reactos/dll/directx/wine/d3d8/d3d8.rbuild b/dll/directx/wine/d3d8/d3d8.rbuild similarity index 100% rename from reactos/dll/directx/wine/d3d8/d3d8.rbuild rename to dll/directx/wine/d3d8/d3d8.rbuild diff --git a/reactos/dll/directx/wine/d3d8/d3d8.spec b/dll/directx/wine/d3d8/d3d8.spec similarity index 100% rename from reactos/dll/directx/wine/d3d8/d3d8.spec rename to dll/directx/wine/d3d8/d3d8.spec diff --git a/reactos/dll/directx/wine/d3d8/d3d8_main.c b/dll/directx/wine/d3d8/d3d8_main.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/d3d8_main.c rename to dll/directx/wine/d3d8/d3d8_main.c diff --git a/reactos/dll/directx/wine/d3d8/d3d8_private.h b/dll/directx/wine/d3d8/d3d8_private.h similarity index 100% rename from reactos/dll/directx/wine/d3d8/d3d8_private.h rename to dll/directx/wine/d3d8/d3d8_private.h diff --git a/reactos/dll/directx/wine/d3d8/device.c b/dll/directx/wine/d3d8/device.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/device.c rename to dll/directx/wine/d3d8/device.c diff --git a/reactos/dll/directx/wine/d3d8/directx.c b/dll/directx/wine/d3d8/directx.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/directx.c rename to dll/directx/wine/d3d8/directx.c diff --git a/reactos/dll/directx/wine/d3d8/indexbuffer.c b/dll/directx/wine/d3d8/indexbuffer.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/indexbuffer.c rename to dll/directx/wine/d3d8/indexbuffer.c diff --git a/reactos/dll/directx/wine/d3d8/pixelshader.c b/dll/directx/wine/d3d8/pixelshader.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/pixelshader.c rename to dll/directx/wine/d3d8/pixelshader.c diff --git a/reactos/dll/directx/wine/d3d8/resource.c b/dll/directx/wine/d3d8/resource.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/resource.c rename to dll/directx/wine/d3d8/resource.c diff --git a/reactos/dll/directx/wine/d3d8/stateblock.c b/dll/directx/wine/d3d8/stateblock.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/stateblock.c rename to dll/directx/wine/d3d8/stateblock.c diff --git a/reactos/dll/directx/wine/d3d8/surface.c b/dll/directx/wine/d3d8/surface.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/surface.c rename to dll/directx/wine/d3d8/surface.c diff --git a/reactos/dll/directx/wine/d3d8/swapchain.c b/dll/directx/wine/d3d8/swapchain.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/swapchain.c rename to dll/directx/wine/d3d8/swapchain.c diff --git a/reactos/dll/directx/wine/d3d8/texture.c b/dll/directx/wine/d3d8/texture.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/texture.c rename to dll/directx/wine/d3d8/texture.c diff --git a/reactos/dll/directx/wine/d3d8/version.rc b/dll/directx/wine/d3d8/version.rc similarity index 100% rename from reactos/dll/directx/wine/d3d8/version.rc rename to dll/directx/wine/d3d8/version.rc diff --git a/reactos/dll/directx/wine/d3d8/vertexbuffer.c b/dll/directx/wine/d3d8/vertexbuffer.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/vertexbuffer.c rename to dll/directx/wine/d3d8/vertexbuffer.c diff --git a/reactos/dll/directx/wine/d3d8/vertexdeclaration.c b/dll/directx/wine/d3d8/vertexdeclaration.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/vertexdeclaration.c rename to dll/directx/wine/d3d8/vertexdeclaration.c diff --git a/reactos/dll/directx/wine/d3d8/vertexshader.c b/dll/directx/wine/d3d8/vertexshader.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/vertexshader.c rename to dll/directx/wine/d3d8/vertexshader.c diff --git a/reactos/dll/directx/wine/d3d8/volume.c b/dll/directx/wine/d3d8/volume.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/volume.c rename to dll/directx/wine/d3d8/volume.c diff --git a/reactos/dll/directx/wine/d3d8/volumetexture.c b/dll/directx/wine/d3d8/volumetexture.c similarity index 100% rename from reactos/dll/directx/wine/d3d8/volumetexture.c rename to dll/directx/wine/d3d8/volumetexture.c diff --git a/reactos/dll/directx/wine/d3d9/Makefile.in b/dll/directx/wine/d3d9/Makefile.in similarity index 100% rename from reactos/dll/directx/wine/d3d9/Makefile.in rename to dll/directx/wine/d3d9/Makefile.in diff --git a/reactos/dll/directx/wine/d3d9/basetexture.c b/dll/directx/wine/d3d9/basetexture.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/basetexture.c rename to dll/directx/wine/d3d9/basetexture.c diff --git a/reactos/dll/directx/wine/d3d9/cubetexture.c b/dll/directx/wine/d3d9/cubetexture.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/cubetexture.c rename to dll/directx/wine/d3d9/cubetexture.c diff --git a/reactos/dll/directx/wine/d3d9/d3d9.rbuild b/dll/directx/wine/d3d9/d3d9.rbuild similarity index 100% rename from reactos/dll/directx/wine/d3d9/d3d9.rbuild rename to dll/directx/wine/d3d9/d3d9.rbuild diff --git a/reactos/dll/directx/wine/d3d9/d3d9.spec b/dll/directx/wine/d3d9/d3d9.spec similarity index 100% rename from reactos/dll/directx/wine/d3d9/d3d9.spec rename to dll/directx/wine/d3d9/d3d9.spec diff --git a/reactos/dll/directx/wine/d3d9/d3d9_main.c b/dll/directx/wine/d3d9/d3d9_main.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/d3d9_main.c rename to dll/directx/wine/d3d9/d3d9_main.c diff --git a/reactos/dll/directx/wine/d3d9/d3d9_private.h b/dll/directx/wine/d3d9/d3d9_private.h similarity index 100% rename from reactos/dll/directx/wine/d3d9/d3d9_private.h rename to dll/directx/wine/d3d9/d3d9_private.h diff --git a/reactos/dll/directx/wine/d3d9/device.c b/dll/directx/wine/d3d9/device.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/device.c rename to dll/directx/wine/d3d9/device.c diff --git a/reactos/dll/directx/wine/d3d9/directx.c b/dll/directx/wine/d3d9/directx.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/directx.c rename to dll/directx/wine/d3d9/directx.c diff --git a/reactos/dll/directx/wine/d3d9/indexbuffer.c b/dll/directx/wine/d3d9/indexbuffer.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/indexbuffer.c rename to dll/directx/wine/d3d9/indexbuffer.c diff --git a/reactos/dll/directx/wine/d3d9/pixelshader.c b/dll/directx/wine/d3d9/pixelshader.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/pixelshader.c rename to dll/directx/wine/d3d9/pixelshader.c diff --git a/reactos/dll/directx/wine/d3d9/query.c b/dll/directx/wine/d3d9/query.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/query.c rename to dll/directx/wine/d3d9/query.c diff --git a/reactos/dll/directx/wine/d3d9/resource.c b/dll/directx/wine/d3d9/resource.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/resource.c rename to dll/directx/wine/d3d9/resource.c diff --git a/reactos/dll/directx/wine/d3d9/stateblock.c b/dll/directx/wine/d3d9/stateblock.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/stateblock.c rename to dll/directx/wine/d3d9/stateblock.c diff --git a/reactos/dll/directx/wine/d3d9/surface.c b/dll/directx/wine/d3d9/surface.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/surface.c rename to dll/directx/wine/d3d9/surface.c diff --git a/reactos/dll/directx/wine/d3d9/swapchain.c b/dll/directx/wine/d3d9/swapchain.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/swapchain.c rename to dll/directx/wine/d3d9/swapchain.c diff --git a/reactos/dll/directx/wine/d3d9/texture.c b/dll/directx/wine/d3d9/texture.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/texture.c rename to dll/directx/wine/d3d9/texture.c diff --git a/reactos/dll/directx/wine/d3d9/version.rc b/dll/directx/wine/d3d9/version.rc similarity index 100% rename from reactos/dll/directx/wine/d3d9/version.rc rename to dll/directx/wine/d3d9/version.rc diff --git a/reactos/dll/directx/wine/d3d9/vertexbuffer.c b/dll/directx/wine/d3d9/vertexbuffer.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/vertexbuffer.c rename to dll/directx/wine/d3d9/vertexbuffer.c diff --git a/reactos/dll/directx/wine/d3d9/vertexdeclaration.c b/dll/directx/wine/d3d9/vertexdeclaration.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/vertexdeclaration.c rename to dll/directx/wine/d3d9/vertexdeclaration.c diff --git a/reactos/dll/directx/wine/d3d9/vertexshader.c b/dll/directx/wine/d3d9/vertexshader.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/vertexshader.c rename to dll/directx/wine/d3d9/vertexshader.c diff --git a/reactos/dll/directx/wine/d3d9/volume.c b/dll/directx/wine/d3d9/volume.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/volume.c rename to dll/directx/wine/d3d9/volume.c diff --git a/reactos/dll/directx/wine/d3d9/volumetexture.c b/dll/directx/wine/d3d9/volumetexture.c similarity index 100% rename from reactos/dll/directx/wine/d3d9/volumetexture.c rename to dll/directx/wine/d3d9/volumetexture.c diff --git a/reactos/dll/directx/wine/readme.txt b/dll/directx/wine/readme.txt similarity index 100% rename from reactos/dll/directx/wine/readme.txt rename to dll/directx/wine/readme.txt diff --git a/reactos/dll/directx/wine/wine.rbuild b/dll/directx/wine/wine.rbuild similarity index 100% rename from reactos/dll/directx/wine/wine.rbuild rename to dll/directx/wine/wine.rbuild diff --git a/reactos/dll/directx/wine/wined3d/Makefile.in b/dll/directx/wine/wined3d/Makefile.in similarity index 100% rename from reactos/dll/directx/wine/wined3d/Makefile.in rename to dll/directx/wine/wined3d/Makefile.in diff --git a/reactos/dll/directx/wine/wined3d/arb_program_shader.c b/dll/directx/wine/wined3d/arb_program_shader.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/arb_program_shader.c rename to dll/directx/wine/wined3d/arb_program_shader.c diff --git a/reactos/dll/directx/wine/wined3d/ati_fragment_shader.c b/dll/directx/wine/wined3d/ati_fragment_shader.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/ati_fragment_shader.c rename to dll/directx/wine/wined3d/ati_fragment_shader.c diff --git a/reactos/dll/directx/wine/wined3d/baseshader.c b/dll/directx/wine/wined3d/baseshader.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/baseshader.c rename to dll/directx/wine/wined3d/baseshader.c diff --git a/reactos/dll/directx/wine/wined3d/basetexture.c b/dll/directx/wine/wined3d/basetexture.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/basetexture.c rename to dll/directx/wine/wined3d/basetexture.c diff --git a/reactos/dll/directx/wine/wined3d/clipper.c b/dll/directx/wine/wined3d/clipper.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/clipper.c rename to dll/directx/wine/wined3d/clipper.c diff --git a/reactos/dll/directx/wine/wined3d/context.c b/dll/directx/wine/wined3d/context.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/context.c rename to dll/directx/wine/wined3d/context.c diff --git a/reactos/dll/directx/wine/wined3d/cubetexture.c b/dll/directx/wine/wined3d/cubetexture.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/cubetexture.c rename to dll/directx/wine/wined3d/cubetexture.c diff --git a/reactos/dll/directx/wine/wined3d/device.c b/dll/directx/wine/wined3d/device.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/device.c rename to dll/directx/wine/wined3d/device.c diff --git a/reactos/dll/directx/wine/wined3d/directx.c b/dll/directx/wine/wined3d/directx.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/directx.c rename to dll/directx/wine/wined3d/directx.c diff --git a/reactos/dll/directx/wine/wined3d/drawprim.c b/dll/directx/wine/wined3d/drawprim.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/drawprim.c rename to dll/directx/wine/wined3d/drawprim.c diff --git a/reactos/dll/directx/wine/wined3d/glsl_shader.c b/dll/directx/wine/wined3d/glsl_shader.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/glsl_shader.c rename to dll/directx/wine/wined3d/glsl_shader.c diff --git a/reactos/dll/directx/wine/wined3d/indexbuffer.c b/dll/directx/wine/wined3d/indexbuffer.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/indexbuffer.c rename to dll/directx/wine/wined3d/indexbuffer.c diff --git a/reactos/dll/directx/wine/wined3d/nvidia_texture_shader.c b/dll/directx/wine/wined3d/nvidia_texture_shader.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/nvidia_texture_shader.c rename to dll/directx/wine/wined3d/nvidia_texture_shader.c diff --git a/reactos/dll/directx/wine/wined3d/palette.c b/dll/directx/wine/wined3d/palette.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/palette.c rename to dll/directx/wine/wined3d/palette.c diff --git a/reactos/dll/directx/wine/wined3d/pixelshader.c b/dll/directx/wine/wined3d/pixelshader.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/pixelshader.c rename to dll/directx/wine/wined3d/pixelshader.c diff --git a/reactos/dll/directx/wine/wined3d/query.c b/dll/directx/wine/wined3d/query.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/query.c rename to dll/directx/wine/wined3d/query.c diff --git a/reactos/dll/directx/wine/wined3d/resource.c b/dll/directx/wine/wined3d/resource.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/resource.c rename to dll/directx/wine/wined3d/resource.c diff --git a/reactos/dll/directx/wine/wined3d/roshacks.txt b/dll/directx/wine/wined3d/roshacks.txt similarity index 100% rename from reactos/dll/directx/wine/wined3d/roshacks.txt rename to dll/directx/wine/wined3d/roshacks.txt diff --git a/reactos/dll/directx/wine/wined3d/state.c b/dll/directx/wine/wined3d/state.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/state.c rename to dll/directx/wine/wined3d/state.c diff --git a/reactos/dll/directx/wine/wined3d/stateblock.c b/dll/directx/wine/wined3d/stateblock.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/stateblock.c rename to dll/directx/wine/wined3d/stateblock.c diff --git a/reactos/dll/directx/wine/wined3d/surface.c b/dll/directx/wine/wined3d/surface.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/surface.c rename to dll/directx/wine/wined3d/surface.c diff --git a/reactos/dll/directx/wine/wined3d/surface_base.c b/dll/directx/wine/wined3d/surface_base.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/surface_base.c rename to dll/directx/wine/wined3d/surface_base.c diff --git a/reactos/dll/directx/wine/wined3d/surface_gdi.c b/dll/directx/wine/wined3d/surface_gdi.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/surface_gdi.c rename to dll/directx/wine/wined3d/surface_gdi.c diff --git a/reactos/dll/directx/wine/wined3d/swapchain.c b/dll/directx/wine/wined3d/swapchain.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/swapchain.c rename to dll/directx/wine/wined3d/swapchain.c diff --git a/reactos/dll/directx/wine/wined3d/swapchain_base.c b/dll/directx/wine/wined3d/swapchain_base.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/swapchain_base.c rename to dll/directx/wine/wined3d/swapchain_base.c diff --git a/reactos/dll/directx/wine/wined3d/swapchain_gdi.c b/dll/directx/wine/wined3d/swapchain_gdi.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/swapchain_gdi.c rename to dll/directx/wine/wined3d/swapchain_gdi.c diff --git a/reactos/dll/directx/wine/wined3d/texture.c b/dll/directx/wine/wined3d/texture.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/texture.c rename to dll/directx/wine/wined3d/texture.c diff --git a/reactos/dll/directx/wine/wined3d/utils.c b/dll/directx/wine/wined3d/utils.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/utils.c rename to dll/directx/wine/wined3d/utils.c diff --git a/reactos/dll/directx/wine/wined3d/version.rc b/dll/directx/wine/wined3d/version.rc similarity index 100% rename from reactos/dll/directx/wine/wined3d/version.rc rename to dll/directx/wine/wined3d/version.rc diff --git a/reactos/dll/directx/wine/wined3d/vertexbuffer.c b/dll/directx/wine/wined3d/vertexbuffer.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/vertexbuffer.c rename to dll/directx/wine/wined3d/vertexbuffer.c diff --git a/reactos/dll/directx/wine/wined3d/vertexdeclaration.c b/dll/directx/wine/wined3d/vertexdeclaration.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/vertexdeclaration.c rename to dll/directx/wine/wined3d/vertexdeclaration.c diff --git a/reactos/dll/directx/wine/wined3d/vertexshader.c b/dll/directx/wine/wined3d/vertexshader.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/vertexshader.c rename to dll/directx/wine/wined3d/vertexshader.c diff --git a/reactos/dll/directx/wine/wined3d/volume.c b/dll/directx/wine/wined3d/volume.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/volume.c rename to dll/directx/wine/wined3d/volume.c diff --git a/reactos/dll/directx/wine/wined3d/volumetexture.c b/dll/directx/wine/wined3d/volumetexture.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/volumetexture.c rename to dll/directx/wine/wined3d/volumetexture.c diff --git a/reactos/dll/directx/wine/wined3d/wined3d.def b/dll/directx/wine/wined3d/wined3d.def similarity index 100% rename from reactos/dll/directx/wine/wined3d/wined3d.def rename to dll/directx/wine/wined3d/wined3d.def diff --git a/reactos/dll/directx/wine/wined3d/wined3d.rbuild b/dll/directx/wine/wined3d/wined3d.rbuild similarity index 100% rename from reactos/dll/directx/wine/wined3d/wined3d.rbuild rename to dll/directx/wine/wined3d/wined3d.rbuild diff --git a/reactos/dll/directx/wine/wined3d/wined3d.spec b/dll/directx/wine/wined3d/wined3d.spec similarity index 100% rename from reactos/dll/directx/wine/wined3d/wined3d.spec rename to dll/directx/wine/wined3d/wined3d.spec diff --git a/reactos/dll/directx/wine/wined3d/wined3d_main.c b/dll/directx/wine/wined3d/wined3d_main.c similarity index 100% rename from reactos/dll/directx/wine/wined3d/wined3d_main.c rename to dll/directx/wine/wined3d/wined3d_main.c diff --git a/reactos/dll/directx/wine/wined3d/wined3d_private.h b/dll/directx/wine/wined3d/wined3d_private.h similarity index 100% rename from reactos/dll/directx/wine/wined3d/wined3d_private.h rename to dll/directx/wine/wined3d/wined3d_private.h diff --git a/reactos/dll/directx/wine/wined3d/wined3d_private_types.h b/dll/directx/wine/wined3d/wined3d_private_types.h similarity index 100% rename from reactos/dll/directx/wine/wined3d/wined3d_private_types.h rename to dll/directx/wine/wined3d/wined3d_private_types.h diff --git a/reactos/dll/dll.rbuild b/dll/dll.rbuild similarity index 100% rename from reactos/dll/dll.rbuild rename to dll/dll.rbuild diff --git a/reactos/dll/keyboard/kbda1/kbda1.c b/dll/keyboard/kbda1/kbda1.c similarity index 100% rename from reactos/dll/keyboard/kbda1/kbda1.c rename to dll/keyboard/kbda1/kbda1.c diff --git a/reactos/dll/keyboard/kbda1/kbda1.rbuild b/dll/keyboard/kbda1/kbda1.rbuild similarity index 100% rename from reactos/dll/keyboard/kbda1/kbda1.rbuild rename to dll/keyboard/kbda1/kbda1.rbuild diff --git a/reactos/dll/keyboard/kbda1/kbda1.rc b/dll/keyboard/kbda1/kbda1.rc similarity index 100% rename from reactos/dll/keyboard/kbda1/kbda1.rc rename to dll/keyboard/kbda1/kbda1.rc diff --git a/reactos/dll/keyboard/kbda1/kbda1.spec b/dll/keyboard/kbda1/kbda1.spec similarity index 100% rename from reactos/dll/keyboard/kbda1/kbda1.spec rename to dll/keyboard/kbda1/kbda1.spec diff --git a/reactos/dll/keyboard/kbda2/kbda2.c b/dll/keyboard/kbda2/kbda2.c similarity index 100% rename from reactos/dll/keyboard/kbda2/kbda2.c rename to dll/keyboard/kbda2/kbda2.c diff --git a/reactos/dll/keyboard/kbda2/kbda2.rbuild b/dll/keyboard/kbda2/kbda2.rbuild similarity index 100% rename from reactos/dll/keyboard/kbda2/kbda2.rbuild rename to dll/keyboard/kbda2/kbda2.rbuild diff --git a/reactos/dll/keyboard/kbda2/kbda2.rc b/dll/keyboard/kbda2/kbda2.rc similarity index 100% rename from reactos/dll/keyboard/kbda2/kbda2.rc rename to dll/keyboard/kbda2/kbda2.rc diff --git a/reactos/dll/keyboard/kbda2/kbda2.spec b/dll/keyboard/kbda2/kbda2.spec similarity index 100% rename from reactos/dll/keyboard/kbda2/kbda2.spec rename to dll/keyboard/kbda2/kbda2.spec diff --git a/reactos/dll/keyboard/kbda3/kbda3.c b/dll/keyboard/kbda3/kbda3.c similarity index 100% rename from reactos/dll/keyboard/kbda3/kbda3.c rename to dll/keyboard/kbda3/kbda3.c diff --git a/reactos/dll/keyboard/kbda3/kbda3.rbuild b/dll/keyboard/kbda3/kbda3.rbuild similarity index 100% rename from reactos/dll/keyboard/kbda3/kbda3.rbuild rename to dll/keyboard/kbda3/kbda3.rbuild diff --git a/reactos/dll/keyboard/kbda3/kbda3.rc b/dll/keyboard/kbda3/kbda3.rc similarity index 100% rename from reactos/dll/keyboard/kbda3/kbda3.rc rename to dll/keyboard/kbda3/kbda3.rc diff --git a/reactos/dll/keyboard/kbda3/kbda3.spec b/dll/keyboard/kbda3/kbda3.spec similarity index 100% rename from reactos/dll/keyboard/kbda3/kbda3.spec rename to dll/keyboard/kbda3/kbda3.spec diff --git a/reactos/dll/keyboard/kbdal/kbdal.c b/dll/keyboard/kbdal/kbdal.c similarity index 100% rename from reactos/dll/keyboard/kbdal/kbdal.c rename to dll/keyboard/kbdal/kbdal.c diff --git a/reactos/dll/keyboard/kbdal/kbdal.rbuild b/dll/keyboard/kbdal/kbdal.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdal/kbdal.rbuild rename to dll/keyboard/kbdal/kbdal.rbuild diff --git a/reactos/dll/keyboard/kbdal/kbdal.rc b/dll/keyboard/kbdal/kbdal.rc similarity index 100% rename from reactos/dll/keyboard/kbdal/kbdal.rc rename to dll/keyboard/kbdal/kbdal.rc diff --git a/reactos/dll/keyboard/kbdal/kbdal.spec b/dll/keyboard/kbdal/kbdal.spec similarity index 100% rename from reactos/dll/keyboard/kbdal/kbdal.spec rename to dll/keyboard/kbdal/kbdal.spec diff --git a/reactos/dll/keyboard/kbdarme/kbdarme.c b/dll/keyboard/kbdarme/kbdarme.c similarity index 100% rename from reactos/dll/keyboard/kbdarme/kbdarme.c rename to dll/keyboard/kbdarme/kbdarme.c diff --git a/reactos/dll/keyboard/kbdarme/kbdarme.rbuild b/dll/keyboard/kbdarme/kbdarme.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdarme/kbdarme.rbuild rename to dll/keyboard/kbdarme/kbdarme.rbuild diff --git a/reactos/dll/keyboard/kbdarme/kbdarme.rc b/dll/keyboard/kbdarme/kbdarme.rc similarity index 100% rename from reactos/dll/keyboard/kbdarme/kbdarme.rc rename to dll/keyboard/kbdarme/kbdarme.rc diff --git a/reactos/dll/keyboard/kbdarme/kbdarme.spec b/dll/keyboard/kbdarme/kbdarme.spec similarity index 100% rename from reactos/dll/keyboard/kbdarme/kbdarme.spec rename to dll/keyboard/kbdarme/kbdarme.spec diff --git a/reactos/dll/keyboard/kbdarmw/kbdarmw.c b/dll/keyboard/kbdarmw/kbdarmw.c similarity index 100% rename from reactos/dll/keyboard/kbdarmw/kbdarmw.c rename to dll/keyboard/kbdarmw/kbdarmw.c diff --git a/reactos/dll/keyboard/kbdarmw/kbdarmw.rbuild b/dll/keyboard/kbdarmw/kbdarmw.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdarmw/kbdarmw.rbuild rename to dll/keyboard/kbdarmw/kbdarmw.rbuild diff --git a/reactos/dll/keyboard/kbdarmw/kbdarmw.rc b/dll/keyboard/kbdarmw/kbdarmw.rc similarity index 100% rename from reactos/dll/keyboard/kbdarmw/kbdarmw.rc rename to dll/keyboard/kbdarmw/kbdarmw.rc diff --git a/reactos/dll/keyboard/kbdarmw/kbdarmw.spec b/dll/keyboard/kbdarmw/kbdarmw.spec similarity index 100% rename from reactos/dll/keyboard/kbdarmw/kbdarmw.spec rename to dll/keyboard/kbdarmw/kbdarmw.spec diff --git a/reactos/dll/keyboard/kbdaze/kbdaze.c b/dll/keyboard/kbdaze/kbdaze.c similarity index 100% rename from reactos/dll/keyboard/kbdaze/kbdaze.c rename to dll/keyboard/kbdaze/kbdaze.c diff --git a/reactos/dll/keyboard/kbdaze/kbdaze.rbuild b/dll/keyboard/kbdaze/kbdaze.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdaze/kbdaze.rbuild rename to dll/keyboard/kbdaze/kbdaze.rbuild diff --git a/reactos/dll/keyboard/kbdaze/kbdaze.rc b/dll/keyboard/kbdaze/kbdaze.rc similarity index 100% rename from reactos/dll/keyboard/kbdaze/kbdaze.rc rename to dll/keyboard/kbdaze/kbdaze.rc diff --git a/reactos/dll/keyboard/kbdaze/kbdaze.spec b/dll/keyboard/kbdaze/kbdaze.spec similarity index 100% rename from reactos/dll/keyboard/kbdaze/kbdaze.spec rename to dll/keyboard/kbdaze/kbdaze.spec diff --git a/reactos/dll/keyboard/kbdazel/kbdazel.c b/dll/keyboard/kbdazel/kbdazel.c similarity index 100% rename from reactos/dll/keyboard/kbdazel/kbdazel.c rename to dll/keyboard/kbdazel/kbdazel.c diff --git a/reactos/dll/keyboard/kbdazel/kbdazel.rbuild b/dll/keyboard/kbdazel/kbdazel.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdazel/kbdazel.rbuild rename to dll/keyboard/kbdazel/kbdazel.rbuild diff --git a/reactos/dll/keyboard/kbdazel/kbdazel.rc b/dll/keyboard/kbdazel/kbdazel.rc similarity index 100% rename from reactos/dll/keyboard/kbdazel/kbdazel.rc rename to dll/keyboard/kbdazel/kbdazel.rc diff --git a/reactos/dll/keyboard/kbdazel/kbdazel.spec b/dll/keyboard/kbdazel/kbdazel.spec similarity index 100% rename from reactos/dll/keyboard/kbdazel/kbdazel.spec rename to dll/keyboard/kbdazel/kbdazel.spec diff --git a/reactos/dll/keyboard/kbdbe/kbdbe.c b/dll/keyboard/kbdbe/kbdbe.c similarity index 100% rename from reactos/dll/keyboard/kbdbe/kbdbe.c rename to dll/keyboard/kbdbe/kbdbe.c diff --git a/reactos/dll/keyboard/kbdbe/kbdbe.rbuild b/dll/keyboard/kbdbe/kbdbe.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdbe/kbdbe.rbuild rename to dll/keyboard/kbdbe/kbdbe.rbuild diff --git a/reactos/dll/keyboard/kbdbe/kbdbe.rc b/dll/keyboard/kbdbe/kbdbe.rc similarity index 100% rename from reactos/dll/keyboard/kbdbe/kbdbe.rc rename to dll/keyboard/kbdbe/kbdbe.rc diff --git a/reactos/dll/keyboard/kbdbe/kbdbe.spec b/dll/keyboard/kbdbe/kbdbe.spec similarity index 100% rename from reactos/dll/keyboard/kbdbe/kbdbe.spec rename to dll/keyboard/kbdbe/kbdbe.spec diff --git a/reactos/dll/keyboard/kbdbga/kbdbga.c b/dll/keyboard/kbdbga/kbdbga.c similarity index 100% rename from reactos/dll/keyboard/kbdbga/kbdbga.c rename to dll/keyboard/kbdbga/kbdbga.c diff --git a/reactos/dll/keyboard/kbdbga/kbdbga.rbuild b/dll/keyboard/kbdbga/kbdbga.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdbga/kbdbga.rbuild rename to dll/keyboard/kbdbga/kbdbga.rbuild diff --git a/reactos/dll/keyboard/kbdbga/kbdbga.rc b/dll/keyboard/kbdbga/kbdbga.rc similarity index 100% rename from reactos/dll/keyboard/kbdbga/kbdbga.rc rename to dll/keyboard/kbdbga/kbdbga.rc diff --git a/reactos/dll/keyboard/kbdbga/kbdbga.spec b/dll/keyboard/kbdbga/kbdbga.spec similarity index 100% rename from reactos/dll/keyboard/kbdbga/kbdbga.spec rename to dll/keyboard/kbdbga/kbdbga.spec diff --git a/reactos/dll/keyboard/kbdbgm/kbdbgm.c b/dll/keyboard/kbdbgm/kbdbgm.c similarity index 100% rename from reactos/dll/keyboard/kbdbgm/kbdbgm.c rename to dll/keyboard/kbdbgm/kbdbgm.c diff --git a/reactos/dll/keyboard/kbdbgm/kbdbgm.rbuild b/dll/keyboard/kbdbgm/kbdbgm.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdbgm/kbdbgm.rbuild rename to dll/keyboard/kbdbgm/kbdbgm.rbuild diff --git a/reactos/dll/keyboard/kbdbgm/kbdbgm.rc b/dll/keyboard/kbdbgm/kbdbgm.rc similarity index 100% rename from reactos/dll/keyboard/kbdbgm/kbdbgm.rc rename to dll/keyboard/kbdbgm/kbdbgm.rc diff --git a/reactos/dll/keyboard/kbdbgm/kbdbgm.spec b/dll/keyboard/kbdbgm/kbdbgm.spec similarity index 100% rename from reactos/dll/keyboard/kbdbgm/kbdbgm.spec rename to dll/keyboard/kbdbgm/kbdbgm.spec diff --git a/reactos/dll/keyboard/kbdbgt/kbdbgt.c b/dll/keyboard/kbdbgt/kbdbgt.c similarity index 100% rename from reactos/dll/keyboard/kbdbgt/kbdbgt.c rename to dll/keyboard/kbdbgt/kbdbgt.c diff --git a/reactos/dll/keyboard/kbdbgt/kbdbgt.rbuild b/dll/keyboard/kbdbgt/kbdbgt.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdbgt/kbdbgt.rbuild rename to dll/keyboard/kbdbgt/kbdbgt.rbuild diff --git a/reactos/dll/keyboard/kbdbgt/kbdbgt.rc b/dll/keyboard/kbdbgt/kbdbgt.rc similarity index 100% rename from reactos/dll/keyboard/kbdbgt/kbdbgt.rc rename to dll/keyboard/kbdbgt/kbdbgt.rc diff --git a/reactos/dll/keyboard/kbdbgt/kbdbgt.spec b/dll/keyboard/kbdbgt/kbdbgt.spec similarity index 100% rename from reactos/dll/keyboard/kbdbgt/kbdbgt.spec rename to dll/keyboard/kbdbgt/kbdbgt.spec diff --git a/reactos/dll/keyboard/kbdblr/kbdblr.c b/dll/keyboard/kbdblr/kbdblr.c similarity index 100% rename from reactos/dll/keyboard/kbdblr/kbdblr.c rename to dll/keyboard/kbdblr/kbdblr.c diff --git a/reactos/dll/keyboard/kbdblr/kbdblr.rbuild b/dll/keyboard/kbdblr/kbdblr.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdblr/kbdblr.rbuild rename to dll/keyboard/kbdblr/kbdblr.rbuild diff --git a/reactos/dll/keyboard/kbdblr/kbdblr.rc b/dll/keyboard/kbdblr/kbdblr.rc similarity index 100% rename from reactos/dll/keyboard/kbdblr/kbdblr.rc rename to dll/keyboard/kbdblr/kbdblr.rc diff --git a/reactos/dll/keyboard/kbdblr/kbdblr.spec b/dll/keyboard/kbdblr/kbdblr.spec similarity index 100% rename from reactos/dll/keyboard/kbdblr/kbdblr.spec rename to dll/keyboard/kbdblr/kbdblr.spec diff --git a/reactos/dll/keyboard/kbdbr/kbdbr.c b/dll/keyboard/kbdbr/kbdbr.c similarity index 100% rename from reactos/dll/keyboard/kbdbr/kbdbr.c rename to dll/keyboard/kbdbr/kbdbr.c diff --git a/reactos/dll/keyboard/kbdbr/kbdbr.rbuild b/dll/keyboard/kbdbr/kbdbr.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdbr/kbdbr.rbuild rename to dll/keyboard/kbdbr/kbdbr.rbuild diff --git a/reactos/dll/keyboard/kbdbr/kbdbr.rc b/dll/keyboard/kbdbr/kbdbr.rc similarity index 100% rename from reactos/dll/keyboard/kbdbr/kbdbr.rc rename to dll/keyboard/kbdbr/kbdbr.rc diff --git a/reactos/dll/keyboard/kbdbr/kbdbr.spec b/dll/keyboard/kbdbr/kbdbr.spec similarity index 100% rename from reactos/dll/keyboard/kbdbr/kbdbr.spec rename to dll/keyboard/kbdbr/kbdbr.spec diff --git a/reactos/dll/keyboard/kbdbur/kbdbur.c b/dll/keyboard/kbdbur/kbdbur.c similarity index 100% rename from reactos/dll/keyboard/kbdbur/kbdbur.c rename to dll/keyboard/kbdbur/kbdbur.c diff --git a/reactos/dll/keyboard/kbdbur/kbdbur.rbuild b/dll/keyboard/kbdbur/kbdbur.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdbur/kbdbur.rbuild rename to dll/keyboard/kbdbur/kbdbur.rbuild diff --git a/reactos/dll/keyboard/kbdbur/kbdbur.rc b/dll/keyboard/kbdbur/kbdbur.rc similarity index 100% rename from reactos/dll/keyboard/kbdbur/kbdbur.rc rename to dll/keyboard/kbdbur/kbdbur.rc diff --git a/reactos/dll/keyboard/kbdbur/kbdbur.spec b/dll/keyboard/kbdbur/kbdbur.spec similarity index 100% rename from reactos/dll/keyboard/kbdbur/kbdbur.spec rename to dll/keyboard/kbdbur/kbdbur.spec diff --git a/reactos/dll/keyboard/kbdcan/kbdcan.c b/dll/keyboard/kbdcan/kbdcan.c similarity index 100% rename from reactos/dll/keyboard/kbdcan/kbdcan.c rename to dll/keyboard/kbdcan/kbdcan.c diff --git a/reactos/dll/keyboard/kbdcan/kbdcan.rbuild b/dll/keyboard/kbdcan/kbdcan.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdcan/kbdcan.rbuild rename to dll/keyboard/kbdcan/kbdcan.rbuild diff --git a/reactos/dll/keyboard/kbdcan/kbdcan.rc b/dll/keyboard/kbdcan/kbdcan.rc similarity index 100% rename from reactos/dll/keyboard/kbdcan/kbdcan.rc rename to dll/keyboard/kbdcan/kbdcan.rc diff --git a/reactos/dll/keyboard/kbdcan/kbdcan.spec b/dll/keyboard/kbdcan/kbdcan.spec similarity index 100% rename from reactos/dll/keyboard/kbdcan/kbdcan.spec rename to dll/keyboard/kbdcan/kbdcan.spec diff --git a/reactos/dll/keyboard/kbdcr/kbdcr.c b/dll/keyboard/kbdcr/kbdcr.c similarity index 100% rename from reactos/dll/keyboard/kbdcr/kbdcr.c rename to dll/keyboard/kbdcr/kbdcr.c diff --git a/reactos/dll/keyboard/kbdcr/kbdcr.rbuild b/dll/keyboard/kbdcr/kbdcr.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdcr/kbdcr.rbuild rename to dll/keyboard/kbdcr/kbdcr.rbuild diff --git a/reactos/dll/keyboard/kbdcr/kbdcr.rc b/dll/keyboard/kbdcr/kbdcr.rc similarity index 100% rename from reactos/dll/keyboard/kbdcr/kbdcr.rc rename to dll/keyboard/kbdcr/kbdcr.rc diff --git a/reactos/dll/keyboard/kbdcr/kbdcr.spec b/dll/keyboard/kbdcr/kbdcr.spec similarity index 100% rename from reactos/dll/keyboard/kbdcr/kbdcr.spec rename to dll/keyboard/kbdcr/kbdcr.spec diff --git a/reactos/dll/keyboard/kbdcz1/kbdcz1.c b/dll/keyboard/kbdcz1/kbdcz1.c similarity index 100% rename from reactos/dll/keyboard/kbdcz1/kbdcz1.c rename to dll/keyboard/kbdcz1/kbdcz1.c diff --git a/reactos/dll/keyboard/kbdcz1/kbdcz1.rbuild b/dll/keyboard/kbdcz1/kbdcz1.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdcz1/kbdcz1.rbuild rename to dll/keyboard/kbdcz1/kbdcz1.rbuild diff --git a/reactos/dll/keyboard/kbdcz1/kbdcz1.rc b/dll/keyboard/kbdcz1/kbdcz1.rc similarity index 100% rename from reactos/dll/keyboard/kbdcz1/kbdcz1.rc rename to dll/keyboard/kbdcz1/kbdcz1.rc diff --git a/reactos/dll/keyboard/kbdcz1/kbdcz1.spec b/dll/keyboard/kbdcz1/kbdcz1.spec similarity index 100% rename from reactos/dll/keyboard/kbdcz1/kbdcz1.spec rename to dll/keyboard/kbdcz1/kbdcz1.spec diff --git a/reactos/dll/keyboard/kbdda/kbdda.c b/dll/keyboard/kbdda/kbdda.c similarity index 100% rename from reactos/dll/keyboard/kbdda/kbdda.c rename to dll/keyboard/kbdda/kbdda.c diff --git a/reactos/dll/keyboard/kbdda/kbdda.rbuild b/dll/keyboard/kbdda/kbdda.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdda/kbdda.rbuild rename to dll/keyboard/kbdda/kbdda.rbuild diff --git a/reactos/dll/keyboard/kbdda/kbdda.rc b/dll/keyboard/kbdda/kbdda.rc similarity index 100% rename from reactos/dll/keyboard/kbdda/kbdda.rc rename to dll/keyboard/kbdda/kbdda.rc diff --git a/reactos/dll/keyboard/kbdda/kbdda.spec b/dll/keyboard/kbdda/kbdda.spec similarity index 100% rename from reactos/dll/keyboard/kbdda/kbdda.spec rename to dll/keyboard/kbdda/kbdda.spec diff --git a/reactos/dll/keyboard/kbddv/kbddv.c b/dll/keyboard/kbddv/kbddv.c similarity index 100% rename from reactos/dll/keyboard/kbddv/kbddv.c rename to dll/keyboard/kbddv/kbddv.c diff --git a/reactos/dll/keyboard/kbddv/kbddv.rbuild b/dll/keyboard/kbddv/kbddv.rbuild similarity index 100% rename from reactos/dll/keyboard/kbddv/kbddv.rbuild rename to dll/keyboard/kbddv/kbddv.rbuild diff --git a/reactos/dll/keyboard/kbddv/kbddv.rc b/dll/keyboard/kbddv/kbddv.rc similarity index 100% rename from reactos/dll/keyboard/kbddv/kbddv.rc rename to dll/keyboard/kbddv/kbddv.rc diff --git a/reactos/dll/keyboard/kbddv/kbddv.spec b/dll/keyboard/kbddv/kbddv.spec similarity index 100% rename from reactos/dll/keyboard/kbddv/kbddv.spec rename to dll/keyboard/kbddv/kbddv.spec diff --git a/reactos/dll/keyboard/kbdes/kbdes.c b/dll/keyboard/kbdes/kbdes.c similarity index 100% rename from reactos/dll/keyboard/kbdes/kbdes.c rename to dll/keyboard/kbdes/kbdes.c diff --git a/reactos/dll/keyboard/kbdes/kbdes.rbuild b/dll/keyboard/kbdes/kbdes.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdes/kbdes.rbuild rename to dll/keyboard/kbdes/kbdes.rbuild diff --git a/reactos/dll/keyboard/kbdes/kbdes.rc b/dll/keyboard/kbdes/kbdes.rc similarity index 100% rename from reactos/dll/keyboard/kbdes/kbdes.rc rename to dll/keyboard/kbdes/kbdes.rc diff --git a/reactos/dll/keyboard/kbdes/kbdes.spec b/dll/keyboard/kbdes/kbdes.spec similarity index 100% rename from reactos/dll/keyboard/kbdes/kbdes.spec rename to dll/keyboard/kbdes/kbdes.spec diff --git a/reactos/dll/keyboard/kbdest/kbdest.c b/dll/keyboard/kbdest/kbdest.c similarity index 100% rename from reactos/dll/keyboard/kbdest/kbdest.c rename to dll/keyboard/kbdest/kbdest.c diff --git a/reactos/dll/keyboard/kbdest/kbdest.rbuild b/dll/keyboard/kbdest/kbdest.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdest/kbdest.rbuild rename to dll/keyboard/kbdest/kbdest.rbuild diff --git a/reactos/dll/keyboard/kbdest/kbdest.rc b/dll/keyboard/kbdest/kbdest.rc similarity index 100% rename from reactos/dll/keyboard/kbdest/kbdest.rc rename to dll/keyboard/kbdest/kbdest.rc diff --git a/reactos/dll/keyboard/kbdest/kbdest.spec b/dll/keyboard/kbdest/kbdest.spec similarity index 100% rename from reactos/dll/keyboard/kbdest/kbdest.spec rename to dll/keyboard/kbdest/kbdest.spec diff --git a/reactos/dll/keyboard/kbdfc/kbdfc.c b/dll/keyboard/kbdfc/kbdfc.c similarity index 100% rename from reactos/dll/keyboard/kbdfc/kbdfc.c rename to dll/keyboard/kbdfc/kbdfc.c diff --git a/reactos/dll/keyboard/kbdfc/kbdfc.rbuild b/dll/keyboard/kbdfc/kbdfc.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdfc/kbdfc.rbuild rename to dll/keyboard/kbdfc/kbdfc.rbuild diff --git a/reactos/dll/keyboard/kbdfc/kbdfc.rc b/dll/keyboard/kbdfc/kbdfc.rc similarity index 100% rename from reactos/dll/keyboard/kbdfc/kbdfc.rc rename to dll/keyboard/kbdfc/kbdfc.rc diff --git a/reactos/dll/keyboard/kbdfc/kbdfc.spec b/dll/keyboard/kbdfc/kbdfc.spec similarity index 100% rename from reactos/dll/keyboard/kbdfc/kbdfc.spec rename to dll/keyboard/kbdfc/kbdfc.spec diff --git a/reactos/dll/keyboard/kbdfi/kbdfi.c b/dll/keyboard/kbdfi/kbdfi.c similarity index 100% rename from reactos/dll/keyboard/kbdfi/kbdfi.c rename to dll/keyboard/kbdfi/kbdfi.c diff --git a/reactos/dll/keyboard/kbdfi/kbdfi.rbuild b/dll/keyboard/kbdfi/kbdfi.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdfi/kbdfi.rbuild rename to dll/keyboard/kbdfi/kbdfi.rbuild diff --git a/reactos/dll/keyboard/kbdfi/kbdfi.rc b/dll/keyboard/kbdfi/kbdfi.rc similarity index 100% rename from reactos/dll/keyboard/kbdfi/kbdfi.rc rename to dll/keyboard/kbdfi/kbdfi.rc diff --git a/reactos/dll/keyboard/kbdfi/kbdfi.spec b/dll/keyboard/kbdfi/kbdfi.spec similarity index 100% rename from reactos/dll/keyboard/kbdfi/kbdfi.spec rename to dll/keyboard/kbdfi/kbdfi.spec diff --git a/reactos/dll/keyboard/kbdfr/kbdfr.c b/dll/keyboard/kbdfr/kbdfr.c similarity index 100% rename from reactos/dll/keyboard/kbdfr/kbdfr.c rename to dll/keyboard/kbdfr/kbdfr.c diff --git a/reactos/dll/keyboard/kbdfr/kbdfr.rbuild b/dll/keyboard/kbdfr/kbdfr.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdfr/kbdfr.rbuild rename to dll/keyboard/kbdfr/kbdfr.rbuild diff --git a/reactos/dll/keyboard/kbdfr/kbdfr.rc b/dll/keyboard/kbdfr/kbdfr.rc similarity index 100% rename from reactos/dll/keyboard/kbdfr/kbdfr.rc rename to dll/keyboard/kbdfr/kbdfr.rc diff --git a/reactos/dll/keyboard/kbdfr/kbdfr.spec b/dll/keyboard/kbdfr/kbdfr.spec similarity index 100% rename from reactos/dll/keyboard/kbdfr/kbdfr.spec rename to dll/keyboard/kbdfr/kbdfr.spec diff --git a/reactos/dll/keyboard/kbdgeo/kbdgeo.c b/dll/keyboard/kbdgeo/kbdgeo.c similarity index 100% rename from reactos/dll/keyboard/kbdgeo/kbdgeo.c rename to dll/keyboard/kbdgeo/kbdgeo.c diff --git a/reactos/dll/keyboard/kbdgeo/kbdgeo.rbuild b/dll/keyboard/kbdgeo/kbdgeo.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdgeo/kbdgeo.rbuild rename to dll/keyboard/kbdgeo/kbdgeo.rbuild diff --git a/reactos/dll/keyboard/kbdgeo/kbdgeo.rc b/dll/keyboard/kbdgeo/kbdgeo.rc similarity index 100% rename from reactos/dll/keyboard/kbdgeo/kbdgeo.rc rename to dll/keyboard/kbdgeo/kbdgeo.rc diff --git a/reactos/dll/keyboard/kbdgeo/kbdgeo.spec b/dll/keyboard/kbdgeo/kbdgeo.spec similarity index 100% rename from reactos/dll/keyboard/kbdgeo/kbdgeo.spec rename to dll/keyboard/kbdgeo/kbdgeo.spec diff --git a/reactos/dll/keyboard/kbdgerg/kbdgerg.c b/dll/keyboard/kbdgerg/kbdgerg.c similarity index 100% rename from reactos/dll/keyboard/kbdgerg/kbdgerg.c rename to dll/keyboard/kbdgerg/kbdgerg.c diff --git a/reactos/dll/keyboard/kbdgerg/kbdgerg.rbuild b/dll/keyboard/kbdgerg/kbdgerg.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdgerg/kbdgerg.rbuild rename to dll/keyboard/kbdgerg/kbdgerg.rbuild diff --git a/reactos/dll/keyboard/kbdgerg/kbdgerg.rc b/dll/keyboard/kbdgerg/kbdgerg.rc similarity index 100% rename from reactos/dll/keyboard/kbdgerg/kbdgerg.rc rename to dll/keyboard/kbdgerg/kbdgerg.rc diff --git a/reactos/dll/keyboard/kbdgerg/kbdgerg.spec b/dll/keyboard/kbdgerg/kbdgerg.spec similarity index 100% rename from reactos/dll/keyboard/kbdgerg/kbdgerg.spec rename to dll/keyboard/kbdgerg/kbdgerg.spec diff --git a/reactos/dll/keyboard/kbdgneo/kbdgneo.c b/dll/keyboard/kbdgneo/kbdgneo.c similarity index 100% rename from reactos/dll/keyboard/kbdgneo/kbdgneo.c rename to dll/keyboard/kbdgneo/kbdgneo.c diff --git a/reactos/dll/keyboard/kbdgneo/kbdgneo.rbuild b/dll/keyboard/kbdgneo/kbdgneo.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdgneo/kbdgneo.rbuild rename to dll/keyboard/kbdgneo/kbdgneo.rbuild diff --git a/reactos/dll/keyboard/kbdgneo/kbdgneo.rc b/dll/keyboard/kbdgneo/kbdgneo.rc similarity index 100% rename from reactos/dll/keyboard/kbdgneo/kbdgneo.rc rename to dll/keyboard/kbdgneo/kbdgneo.rc diff --git a/reactos/dll/keyboard/kbdgneo/kbdgneo.spec b/dll/keyboard/kbdgneo/kbdgneo.spec similarity index 100% rename from reactos/dll/keyboard/kbdgneo/kbdgneo.spec rename to dll/keyboard/kbdgneo/kbdgneo.spec diff --git a/reactos/dll/keyboard/kbdgr/kbdgr.c b/dll/keyboard/kbdgr/kbdgr.c similarity index 100% rename from reactos/dll/keyboard/kbdgr/kbdgr.c rename to dll/keyboard/kbdgr/kbdgr.c diff --git a/reactos/dll/keyboard/kbdgr/kbdgr.rbuild b/dll/keyboard/kbdgr/kbdgr.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdgr/kbdgr.rbuild rename to dll/keyboard/kbdgr/kbdgr.rbuild diff --git a/reactos/dll/keyboard/kbdgr/kbdgr.rc b/dll/keyboard/kbdgr/kbdgr.rc similarity index 100% rename from reactos/dll/keyboard/kbdgr/kbdgr.rc rename to dll/keyboard/kbdgr/kbdgr.rc diff --git a/reactos/dll/keyboard/kbdgr/kbdgr.spec b/dll/keyboard/kbdgr/kbdgr.spec similarity index 100% rename from reactos/dll/keyboard/kbdgr/kbdgr.spec rename to dll/keyboard/kbdgr/kbdgr.spec diff --git a/reactos/dll/keyboard/kbdgrist/kbdgrist.c b/dll/keyboard/kbdgrist/kbdgrist.c similarity index 100% rename from reactos/dll/keyboard/kbdgrist/kbdgrist.c rename to dll/keyboard/kbdgrist/kbdgrist.c diff --git a/reactos/dll/keyboard/kbdgrist/kbdgrist.rbuild b/dll/keyboard/kbdgrist/kbdgrist.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdgrist/kbdgrist.rbuild rename to dll/keyboard/kbdgrist/kbdgrist.rbuild diff --git a/reactos/dll/keyboard/kbdgrist/kbdgrist.rc b/dll/keyboard/kbdgrist/kbdgrist.rc similarity index 100% rename from reactos/dll/keyboard/kbdgrist/kbdgrist.rc rename to dll/keyboard/kbdgrist/kbdgrist.rc diff --git a/reactos/dll/keyboard/kbdgrist/kbdgrist.spec b/dll/keyboard/kbdgrist/kbdgrist.spec similarity index 100% rename from reactos/dll/keyboard/kbdgrist/kbdgrist.spec rename to dll/keyboard/kbdgrist/kbdgrist.spec diff --git a/reactos/dll/keyboard/kbdhe/kbdhe.c b/dll/keyboard/kbdhe/kbdhe.c similarity index 100% rename from reactos/dll/keyboard/kbdhe/kbdhe.c rename to dll/keyboard/kbdhe/kbdhe.c diff --git a/reactos/dll/keyboard/kbdhe/kbdhe.rbuild b/dll/keyboard/kbdhe/kbdhe.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdhe/kbdhe.rbuild rename to dll/keyboard/kbdhe/kbdhe.rbuild diff --git a/reactos/dll/keyboard/kbdhe/kbdhe.rc b/dll/keyboard/kbdhe/kbdhe.rc similarity index 100% rename from reactos/dll/keyboard/kbdhe/kbdhe.rc rename to dll/keyboard/kbdhe/kbdhe.rc diff --git a/reactos/dll/keyboard/kbdhe/kbdhe.spec b/dll/keyboard/kbdhe/kbdhe.spec similarity index 100% rename from reactos/dll/keyboard/kbdhe/kbdhe.spec rename to dll/keyboard/kbdhe/kbdhe.spec diff --git a/reactos/dll/keyboard/kbdheb/kbdheb.c b/dll/keyboard/kbdheb/kbdheb.c similarity index 100% rename from reactos/dll/keyboard/kbdheb/kbdheb.c rename to dll/keyboard/kbdheb/kbdheb.c diff --git a/reactos/dll/keyboard/kbdheb/kbdheb.rbuild b/dll/keyboard/kbdheb/kbdheb.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdheb/kbdheb.rbuild rename to dll/keyboard/kbdheb/kbdheb.rbuild diff --git a/reactos/dll/keyboard/kbdheb/kbdheb.rc b/dll/keyboard/kbdheb/kbdheb.rc similarity index 100% rename from reactos/dll/keyboard/kbdheb/kbdheb.rc rename to dll/keyboard/kbdheb/kbdheb.rc diff --git a/reactos/dll/keyboard/kbdheb/kbdheb.spec b/dll/keyboard/kbdheb/kbdheb.spec similarity index 100% rename from reactos/dll/keyboard/kbdheb/kbdheb.spec rename to dll/keyboard/kbdheb/kbdheb.spec diff --git a/reactos/dll/keyboard/kbdhu/kbdhu.c b/dll/keyboard/kbdhu/kbdhu.c similarity index 100% rename from reactos/dll/keyboard/kbdhu/kbdhu.c rename to dll/keyboard/kbdhu/kbdhu.c diff --git a/reactos/dll/keyboard/kbdhu/kbdhu.rbuild b/dll/keyboard/kbdhu/kbdhu.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdhu/kbdhu.rbuild rename to dll/keyboard/kbdhu/kbdhu.rbuild diff --git a/reactos/dll/keyboard/kbdhu/kbdhu.rc b/dll/keyboard/kbdhu/kbdhu.rc similarity index 100% rename from reactos/dll/keyboard/kbdhu/kbdhu.rc rename to dll/keyboard/kbdhu/kbdhu.rc diff --git a/reactos/dll/keyboard/kbdhu/kbdhu.spec b/dll/keyboard/kbdhu/kbdhu.spec similarity index 100% rename from reactos/dll/keyboard/kbdhu/kbdhu.spec rename to dll/keyboard/kbdhu/kbdhu.spec diff --git a/reactos/dll/keyboard/kbdic/kbdic.c b/dll/keyboard/kbdic/kbdic.c similarity index 100% rename from reactos/dll/keyboard/kbdic/kbdic.c rename to dll/keyboard/kbdic/kbdic.c diff --git a/reactos/dll/keyboard/kbdic/kbdic.rbuild b/dll/keyboard/kbdic/kbdic.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdic/kbdic.rbuild rename to dll/keyboard/kbdic/kbdic.rbuild diff --git a/reactos/dll/keyboard/kbdic/kbdic.rc b/dll/keyboard/kbdic/kbdic.rc similarity index 100% rename from reactos/dll/keyboard/kbdic/kbdic.rc rename to dll/keyboard/kbdic/kbdic.rc diff --git a/reactos/dll/keyboard/kbdic/kbdic.spec b/dll/keyboard/kbdic/kbdic.spec similarity index 100% rename from reactos/dll/keyboard/kbdic/kbdic.spec rename to dll/keyboard/kbdic/kbdic.spec diff --git a/reactos/dll/keyboard/kbdinasa/kbdinasa.c b/dll/keyboard/kbdinasa/kbdinasa.c similarity index 100% rename from reactos/dll/keyboard/kbdinasa/kbdinasa.c rename to dll/keyboard/kbdinasa/kbdinasa.c diff --git a/reactos/dll/keyboard/kbdinasa/kbdinasa.rbuild b/dll/keyboard/kbdinasa/kbdinasa.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdinasa/kbdinasa.rbuild rename to dll/keyboard/kbdinasa/kbdinasa.rbuild diff --git a/reactos/dll/keyboard/kbdinasa/kbdinasa.rc b/dll/keyboard/kbdinasa/kbdinasa.rc similarity index 100% rename from reactos/dll/keyboard/kbdinasa/kbdinasa.rc rename to dll/keyboard/kbdinasa/kbdinasa.rc diff --git a/reactos/dll/keyboard/kbdinasa/kbdinasa.spec b/dll/keyboard/kbdinasa/kbdinasa.spec similarity index 100% rename from reactos/dll/keyboard/kbdinasa/kbdinasa.spec rename to dll/keyboard/kbdinasa/kbdinasa.spec diff --git a/reactos/dll/keyboard/kbdinben/kbdinben.c b/dll/keyboard/kbdinben/kbdinben.c similarity index 100% rename from reactos/dll/keyboard/kbdinben/kbdinben.c rename to dll/keyboard/kbdinben/kbdinben.c diff --git a/reactos/dll/keyboard/kbdinben/kbdinben.rbuild b/dll/keyboard/kbdinben/kbdinben.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdinben/kbdinben.rbuild rename to dll/keyboard/kbdinben/kbdinben.rbuild diff --git a/reactos/dll/keyboard/kbdinben/kbdinben.rc b/dll/keyboard/kbdinben/kbdinben.rc similarity index 100% rename from reactos/dll/keyboard/kbdinben/kbdinben.rc rename to dll/keyboard/kbdinben/kbdinben.rc diff --git a/reactos/dll/keyboard/kbdinben/kbdinben.spec b/dll/keyboard/kbdinben/kbdinben.spec similarity index 100% rename from reactos/dll/keyboard/kbdinben/kbdinben.spec rename to dll/keyboard/kbdinben/kbdinben.spec diff --git a/reactos/dll/keyboard/kbdindev/kbdindev.c b/dll/keyboard/kbdindev/kbdindev.c similarity index 100% rename from reactos/dll/keyboard/kbdindev/kbdindev.c rename to dll/keyboard/kbdindev/kbdindev.c diff --git a/reactos/dll/keyboard/kbdindev/kbdindev.rbuild b/dll/keyboard/kbdindev/kbdindev.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdindev/kbdindev.rbuild rename to dll/keyboard/kbdindev/kbdindev.rbuild diff --git a/reactos/dll/keyboard/kbdindev/kbdindev.rc b/dll/keyboard/kbdindev/kbdindev.rc similarity index 100% rename from reactos/dll/keyboard/kbdindev/kbdindev.rc rename to dll/keyboard/kbdindev/kbdindev.rc diff --git a/reactos/dll/keyboard/kbdindev/kbdindev.spec b/dll/keyboard/kbdindev/kbdindev.spec similarity index 100% rename from reactos/dll/keyboard/kbdindev/kbdindev.spec rename to dll/keyboard/kbdindev/kbdindev.spec diff --git a/reactos/dll/keyboard/kbdinguj/kbdinguj.c b/dll/keyboard/kbdinguj/kbdinguj.c similarity index 100% rename from reactos/dll/keyboard/kbdinguj/kbdinguj.c rename to dll/keyboard/kbdinguj/kbdinguj.c diff --git a/reactos/dll/keyboard/kbdinguj/kbdinguj.rbuild b/dll/keyboard/kbdinguj/kbdinguj.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdinguj/kbdinguj.rbuild rename to dll/keyboard/kbdinguj/kbdinguj.rbuild diff --git a/reactos/dll/keyboard/kbdinguj/kbdinguj.rc b/dll/keyboard/kbdinguj/kbdinguj.rc similarity index 100% rename from reactos/dll/keyboard/kbdinguj/kbdinguj.rc rename to dll/keyboard/kbdinguj/kbdinguj.rc diff --git a/reactos/dll/keyboard/kbdinguj/kbdinguj.spec b/dll/keyboard/kbdinguj/kbdinguj.spec similarity index 100% rename from reactos/dll/keyboard/kbdinguj/kbdinguj.spec rename to dll/keyboard/kbdinguj/kbdinguj.spec diff --git a/reactos/dll/keyboard/kbdinmal/kbdinmal.c b/dll/keyboard/kbdinmal/kbdinmal.c similarity index 100% rename from reactos/dll/keyboard/kbdinmal/kbdinmal.c rename to dll/keyboard/kbdinmal/kbdinmal.c diff --git a/reactos/dll/keyboard/kbdinmal/kbdinmal.rbuild b/dll/keyboard/kbdinmal/kbdinmal.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdinmal/kbdinmal.rbuild rename to dll/keyboard/kbdinmal/kbdinmal.rbuild diff --git a/reactos/dll/keyboard/kbdinmal/kbdinmal.rc b/dll/keyboard/kbdinmal/kbdinmal.rc similarity index 100% rename from reactos/dll/keyboard/kbdinmal/kbdinmal.rc rename to dll/keyboard/kbdinmal/kbdinmal.rc diff --git a/reactos/dll/keyboard/kbdinmal/kbdinmal.spec b/dll/keyboard/kbdinmal/kbdinmal.spec similarity index 100% rename from reactos/dll/keyboard/kbdinmal/kbdinmal.spec rename to dll/keyboard/kbdinmal/kbdinmal.spec diff --git a/reactos/dll/keyboard/kbdir/kbdir.c b/dll/keyboard/kbdir/kbdir.c similarity index 100% rename from reactos/dll/keyboard/kbdir/kbdir.c rename to dll/keyboard/kbdir/kbdir.c diff --git a/reactos/dll/keyboard/kbdir/kbdir.rbuild b/dll/keyboard/kbdir/kbdir.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdir/kbdir.rbuild rename to dll/keyboard/kbdir/kbdir.rbuild diff --git a/reactos/dll/keyboard/kbdir/kbdir.rc b/dll/keyboard/kbdir/kbdir.rc similarity index 100% rename from reactos/dll/keyboard/kbdir/kbdir.rc rename to dll/keyboard/kbdir/kbdir.rc diff --git a/reactos/dll/keyboard/kbdir/kbdir.spec b/dll/keyboard/kbdir/kbdir.spec similarity index 100% rename from reactos/dll/keyboard/kbdir/kbdir.spec rename to dll/keyboard/kbdir/kbdir.spec diff --git a/reactos/dll/keyboard/kbdit/kbdit.c b/dll/keyboard/kbdit/kbdit.c similarity index 100% rename from reactos/dll/keyboard/kbdit/kbdit.c rename to dll/keyboard/kbdit/kbdit.c diff --git a/reactos/dll/keyboard/kbdit/kbdit.rbuild b/dll/keyboard/kbdit/kbdit.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdit/kbdit.rbuild rename to dll/keyboard/kbdit/kbdit.rbuild diff --git a/reactos/dll/keyboard/kbdit/kbdit.rc b/dll/keyboard/kbdit/kbdit.rc similarity index 100% rename from reactos/dll/keyboard/kbdit/kbdit.rc rename to dll/keyboard/kbdit/kbdit.rc diff --git a/reactos/dll/keyboard/kbdit/kbdit.spec b/dll/keyboard/kbdit/kbdit.spec similarity index 100% rename from reactos/dll/keyboard/kbdit/kbdit.spec rename to dll/keyboard/kbdit/kbdit.spec diff --git a/reactos/dll/keyboard/kbdja/kbdja.c b/dll/keyboard/kbdja/kbdja.c similarity index 100% rename from reactos/dll/keyboard/kbdja/kbdja.c rename to dll/keyboard/kbdja/kbdja.c diff --git a/reactos/dll/keyboard/kbdja/kbdja.rbuild b/dll/keyboard/kbdja/kbdja.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdja/kbdja.rbuild rename to dll/keyboard/kbdja/kbdja.rbuild diff --git a/reactos/dll/keyboard/kbdja/kbdja.rc b/dll/keyboard/kbdja/kbdja.rc similarity index 100% rename from reactos/dll/keyboard/kbdja/kbdja.rc rename to dll/keyboard/kbdja/kbdja.rc diff --git a/reactos/dll/keyboard/kbdja/kbdja.spec b/dll/keyboard/kbdja/kbdja.spec similarity index 100% rename from reactos/dll/keyboard/kbdja/kbdja.spec rename to dll/keyboard/kbdja/kbdja.spec diff --git a/reactos/dll/keyboard/kbdkaz/kbdkaz.c b/dll/keyboard/kbdkaz/kbdkaz.c similarity index 100% rename from reactos/dll/keyboard/kbdkaz/kbdkaz.c rename to dll/keyboard/kbdkaz/kbdkaz.c diff --git a/reactos/dll/keyboard/kbdkaz/kbdkaz.rbuild b/dll/keyboard/kbdkaz/kbdkaz.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdkaz/kbdkaz.rbuild rename to dll/keyboard/kbdkaz/kbdkaz.rbuild diff --git a/reactos/dll/keyboard/kbdkaz/kbdkaz.rc b/dll/keyboard/kbdkaz/kbdkaz.rc similarity index 100% rename from reactos/dll/keyboard/kbdkaz/kbdkaz.rc rename to dll/keyboard/kbdkaz/kbdkaz.rc diff --git a/reactos/dll/keyboard/kbdkaz/kbdkaz.spec b/dll/keyboard/kbdkaz/kbdkaz.spec similarity index 100% rename from reactos/dll/keyboard/kbdkaz/kbdkaz.spec rename to dll/keyboard/kbdkaz/kbdkaz.spec diff --git a/reactos/dll/keyboard/kbdko/kbdko.c b/dll/keyboard/kbdko/kbdko.c similarity index 100% rename from reactos/dll/keyboard/kbdko/kbdko.c rename to dll/keyboard/kbdko/kbdko.c diff --git a/reactos/dll/keyboard/kbdko/kbdko.rbuild b/dll/keyboard/kbdko/kbdko.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdko/kbdko.rbuild rename to dll/keyboard/kbdko/kbdko.rbuild diff --git a/reactos/dll/keyboard/kbdko/kbdko.rc b/dll/keyboard/kbdko/kbdko.rc similarity index 100% rename from reactos/dll/keyboard/kbdko/kbdko.rc rename to dll/keyboard/kbdko/kbdko.rc diff --git a/reactos/dll/keyboard/kbdko/kbdko.spec b/dll/keyboard/kbdko/kbdko.spec similarity index 100% rename from reactos/dll/keyboard/kbdko/kbdko.spec rename to dll/keyboard/kbdko/kbdko.spec diff --git a/reactos/dll/keyboard/kbdla/kbdla.c b/dll/keyboard/kbdla/kbdla.c similarity index 100% rename from reactos/dll/keyboard/kbdla/kbdla.c rename to dll/keyboard/kbdla/kbdla.c diff --git a/reactos/dll/keyboard/kbdla/kbdla.rbuild b/dll/keyboard/kbdla/kbdla.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdla/kbdla.rbuild rename to dll/keyboard/kbdla/kbdla.rbuild diff --git a/reactos/dll/keyboard/kbdla/kbdla.rc b/dll/keyboard/kbdla/kbdla.rc similarity index 100% rename from reactos/dll/keyboard/kbdla/kbdla.rc rename to dll/keyboard/kbdla/kbdla.rc diff --git a/reactos/dll/keyboard/kbdla/kbdla.spec b/dll/keyboard/kbdla/kbdla.spec similarity index 100% rename from reactos/dll/keyboard/kbdla/kbdla.spec rename to dll/keyboard/kbdla/kbdla.spec diff --git a/reactos/dll/keyboard/kbdlt/kbdlt.c b/dll/keyboard/kbdlt/kbdlt.c similarity index 100% rename from reactos/dll/keyboard/kbdlt/kbdlt.c rename to dll/keyboard/kbdlt/kbdlt.c diff --git a/reactos/dll/keyboard/kbdlt/kbdlt.rbuild b/dll/keyboard/kbdlt/kbdlt.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdlt/kbdlt.rbuild rename to dll/keyboard/kbdlt/kbdlt.rbuild diff --git a/reactos/dll/keyboard/kbdlt/kbdlt.rc b/dll/keyboard/kbdlt/kbdlt.rc similarity index 100% rename from reactos/dll/keyboard/kbdlt/kbdlt.rc rename to dll/keyboard/kbdlt/kbdlt.rc diff --git a/reactos/dll/keyboard/kbdlt/kbdlt.spec b/dll/keyboard/kbdlt/kbdlt.spec similarity index 100% rename from reactos/dll/keyboard/kbdlt/kbdlt.spec rename to dll/keyboard/kbdlt/kbdlt.spec diff --git a/reactos/dll/keyboard/kbdlv/kbdlv.c b/dll/keyboard/kbdlv/kbdlv.c similarity index 100% rename from reactos/dll/keyboard/kbdlv/kbdlv.c rename to dll/keyboard/kbdlv/kbdlv.c diff --git a/reactos/dll/keyboard/kbdlv/kbdlv.rbuild b/dll/keyboard/kbdlv/kbdlv.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdlv/kbdlv.rbuild rename to dll/keyboard/kbdlv/kbdlv.rbuild diff --git a/reactos/dll/keyboard/kbdlv/kbdlv.rc b/dll/keyboard/kbdlv/kbdlv.rc similarity index 100% rename from reactos/dll/keyboard/kbdlv/kbdlv.rc rename to dll/keyboard/kbdlv/kbdlv.rc diff --git a/reactos/dll/keyboard/kbdlv/kbdlv.spec b/dll/keyboard/kbdlv/kbdlv.spec similarity index 100% rename from reactos/dll/keyboard/kbdlv/kbdlv.spec rename to dll/keyboard/kbdlv/kbdlv.spec diff --git a/reactos/dll/keyboard/kbdmac/kbdmac.c b/dll/keyboard/kbdmac/kbdmac.c similarity index 100% rename from reactos/dll/keyboard/kbdmac/kbdmac.c rename to dll/keyboard/kbdmac/kbdmac.c diff --git a/reactos/dll/keyboard/kbdmac/kbdmac.rbuild b/dll/keyboard/kbdmac/kbdmac.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdmac/kbdmac.rbuild rename to dll/keyboard/kbdmac/kbdmac.rbuild diff --git a/reactos/dll/keyboard/kbdmac/kbdmac.rc b/dll/keyboard/kbdmac/kbdmac.rc similarity index 100% rename from reactos/dll/keyboard/kbdmac/kbdmac.rc rename to dll/keyboard/kbdmac/kbdmac.rc diff --git a/reactos/dll/keyboard/kbdmac/kbdmac.spec b/dll/keyboard/kbdmac/kbdmac.spec similarity index 100% rename from reactos/dll/keyboard/kbdmac/kbdmac.spec rename to dll/keyboard/kbdmac/kbdmac.spec diff --git a/reactos/dll/keyboard/kbdne/kbdne.c b/dll/keyboard/kbdne/kbdne.c similarity index 100% rename from reactos/dll/keyboard/kbdne/kbdne.c rename to dll/keyboard/kbdne/kbdne.c diff --git a/reactos/dll/keyboard/kbdne/kbdne.rbuild b/dll/keyboard/kbdne/kbdne.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdne/kbdne.rbuild rename to dll/keyboard/kbdne/kbdne.rbuild diff --git a/reactos/dll/keyboard/kbdne/kbdne.rc b/dll/keyboard/kbdne/kbdne.rc similarity index 100% rename from reactos/dll/keyboard/kbdne/kbdne.rc rename to dll/keyboard/kbdne/kbdne.rc diff --git a/reactos/dll/keyboard/kbdne/kbdne.spec b/dll/keyboard/kbdne/kbdne.spec similarity index 100% rename from reactos/dll/keyboard/kbdne/kbdne.spec rename to dll/keyboard/kbdne/kbdne.spec diff --git a/reactos/dll/keyboard/kbdno/kbdno.c b/dll/keyboard/kbdno/kbdno.c similarity index 100% rename from reactos/dll/keyboard/kbdno/kbdno.c rename to dll/keyboard/kbdno/kbdno.c diff --git a/reactos/dll/keyboard/kbdno/kbdno.rbuild b/dll/keyboard/kbdno/kbdno.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdno/kbdno.rbuild rename to dll/keyboard/kbdno/kbdno.rbuild diff --git a/reactos/dll/keyboard/kbdno/kbdno.rc b/dll/keyboard/kbdno/kbdno.rc similarity index 100% rename from reactos/dll/keyboard/kbdno/kbdno.rc rename to dll/keyboard/kbdno/kbdno.rc diff --git a/reactos/dll/keyboard/kbdno/kbdno.spec b/dll/keyboard/kbdno/kbdno.spec similarity index 100% rename from reactos/dll/keyboard/kbdno/kbdno.spec rename to dll/keyboard/kbdno/kbdno.spec diff --git a/reactos/dll/keyboard/kbdpl1/kbdpl1.c b/dll/keyboard/kbdpl1/kbdpl1.c similarity index 100% rename from reactos/dll/keyboard/kbdpl1/kbdpl1.c rename to dll/keyboard/kbdpl1/kbdpl1.c diff --git a/reactos/dll/keyboard/kbdpl1/kbdpl1.rbuild b/dll/keyboard/kbdpl1/kbdpl1.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdpl1/kbdpl1.rbuild rename to dll/keyboard/kbdpl1/kbdpl1.rbuild diff --git a/reactos/dll/keyboard/kbdpl1/kbdpl1.rc b/dll/keyboard/kbdpl1/kbdpl1.rc similarity index 100% rename from reactos/dll/keyboard/kbdpl1/kbdpl1.rc rename to dll/keyboard/kbdpl1/kbdpl1.rc diff --git a/reactos/dll/keyboard/kbdpl1/kbdpl1.spec b/dll/keyboard/kbdpl1/kbdpl1.spec similarity index 100% rename from reactos/dll/keyboard/kbdpl1/kbdpl1.spec rename to dll/keyboard/kbdpl1/kbdpl1.spec diff --git a/reactos/dll/keyboard/kbdpo/kbdpo.c b/dll/keyboard/kbdpo/kbdpo.c similarity index 100% rename from reactos/dll/keyboard/kbdpo/kbdpo.c rename to dll/keyboard/kbdpo/kbdpo.c diff --git a/reactos/dll/keyboard/kbdpo/kbdpo.rbuild b/dll/keyboard/kbdpo/kbdpo.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdpo/kbdpo.rbuild rename to dll/keyboard/kbdpo/kbdpo.rbuild diff --git a/reactos/dll/keyboard/kbdpo/kbdpo.rc b/dll/keyboard/kbdpo/kbdpo.rc similarity index 100% rename from reactos/dll/keyboard/kbdpo/kbdpo.rc rename to dll/keyboard/kbdpo/kbdpo.rc diff --git a/reactos/dll/keyboard/kbdpo/kbdpo.spec b/dll/keyboard/kbdpo/kbdpo.spec similarity index 100% rename from reactos/dll/keyboard/kbdpo/kbdpo.spec rename to dll/keyboard/kbdpo/kbdpo.spec diff --git a/reactos/dll/keyboard/kbdro/kbdro.c b/dll/keyboard/kbdro/kbdro.c similarity index 100% rename from reactos/dll/keyboard/kbdro/kbdro.c rename to dll/keyboard/kbdro/kbdro.c diff --git a/reactos/dll/keyboard/kbdro/kbdro.rbuild b/dll/keyboard/kbdro/kbdro.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdro/kbdro.rbuild rename to dll/keyboard/kbdro/kbdro.rbuild diff --git a/reactos/dll/keyboard/kbdro/kbdro.rc b/dll/keyboard/kbdro/kbdro.rc similarity index 100% rename from reactos/dll/keyboard/kbdro/kbdro.rc rename to dll/keyboard/kbdro/kbdro.rc diff --git a/reactos/dll/keyboard/kbdro/kbdro.spec b/dll/keyboard/kbdro/kbdro.spec similarity index 100% rename from reactos/dll/keyboard/kbdro/kbdro.spec rename to dll/keyboard/kbdro/kbdro.spec diff --git a/reactos/dll/keyboard/kbdru/kbdru.c b/dll/keyboard/kbdru/kbdru.c similarity index 100% rename from reactos/dll/keyboard/kbdru/kbdru.c rename to dll/keyboard/kbdru/kbdru.c diff --git a/reactos/dll/keyboard/kbdru/kbdru.rbuild b/dll/keyboard/kbdru/kbdru.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdru/kbdru.rbuild rename to dll/keyboard/kbdru/kbdru.rbuild diff --git a/reactos/dll/keyboard/kbdru/kbdru.rc b/dll/keyboard/kbdru/kbdru.rc similarity index 100% rename from reactos/dll/keyboard/kbdru/kbdru.rc rename to dll/keyboard/kbdru/kbdru.rc diff --git a/reactos/dll/keyboard/kbdru/kbdru.spec b/dll/keyboard/kbdru/kbdru.spec similarity index 100% rename from reactos/dll/keyboard/kbdru/kbdru.spec rename to dll/keyboard/kbdru/kbdru.spec diff --git a/reactos/dll/keyboard/kbdru1/kbdru1.c b/dll/keyboard/kbdru1/kbdru1.c similarity index 100% rename from reactos/dll/keyboard/kbdru1/kbdru1.c rename to dll/keyboard/kbdru1/kbdru1.c diff --git a/reactos/dll/keyboard/kbdru1/kbdru1.rbuild b/dll/keyboard/kbdru1/kbdru1.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdru1/kbdru1.rbuild rename to dll/keyboard/kbdru1/kbdru1.rbuild diff --git a/reactos/dll/keyboard/kbdru1/kbdru1.rc b/dll/keyboard/kbdru1/kbdru1.rc similarity index 100% rename from reactos/dll/keyboard/kbdru1/kbdru1.rc rename to dll/keyboard/kbdru1/kbdru1.rc diff --git a/reactos/dll/keyboard/kbdru1/kbdru1.spec b/dll/keyboard/kbdru1/kbdru1.spec similarity index 100% rename from reactos/dll/keyboard/kbdru1/kbdru1.spec rename to dll/keyboard/kbdru1/kbdru1.spec diff --git a/reactos/dll/keyboard/kbdsg/kbdsg.c b/dll/keyboard/kbdsg/kbdsg.c similarity index 100% rename from reactos/dll/keyboard/kbdsg/kbdsg.c rename to dll/keyboard/kbdsg/kbdsg.c diff --git a/reactos/dll/keyboard/kbdsg/kbdsg.rbuild b/dll/keyboard/kbdsg/kbdsg.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdsg/kbdsg.rbuild rename to dll/keyboard/kbdsg/kbdsg.rbuild diff --git a/reactos/dll/keyboard/kbdsg/kbdsg.rc b/dll/keyboard/kbdsg/kbdsg.rc similarity index 100% rename from reactos/dll/keyboard/kbdsg/kbdsg.rc rename to dll/keyboard/kbdsg/kbdsg.rc diff --git a/reactos/dll/keyboard/kbdsg/kbdsg.spec b/dll/keyboard/kbdsg/kbdsg.spec similarity index 100% rename from reactos/dll/keyboard/kbdsg/kbdsg.spec rename to dll/keyboard/kbdsg/kbdsg.spec diff --git a/reactos/dll/keyboard/kbdsk/kbdsk.c b/dll/keyboard/kbdsk/kbdsk.c similarity index 100% rename from reactos/dll/keyboard/kbdsk/kbdsk.c rename to dll/keyboard/kbdsk/kbdsk.c diff --git a/reactos/dll/keyboard/kbdsk/kbdsk.rbuild b/dll/keyboard/kbdsk/kbdsk.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdsk/kbdsk.rbuild rename to dll/keyboard/kbdsk/kbdsk.rbuild diff --git a/reactos/dll/keyboard/kbdsk/kbdsk.rc b/dll/keyboard/kbdsk/kbdsk.rc similarity index 100% rename from reactos/dll/keyboard/kbdsk/kbdsk.rc rename to dll/keyboard/kbdsk/kbdsk.rc diff --git a/reactos/dll/keyboard/kbdsk/kbdsk.spec b/dll/keyboard/kbdsk/kbdsk.spec similarity index 100% rename from reactos/dll/keyboard/kbdsk/kbdsk.spec rename to dll/keyboard/kbdsk/kbdsk.spec diff --git a/reactos/dll/keyboard/kbdsk1/kbdsk1.c b/dll/keyboard/kbdsk1/kbdsk1.c similarity index 100% rename from reactos/dll/keyboard/kbdsk1/kbdsk1.c rename to dll/keyboard/kbdsk1/kbdsk1.c diff --git a/reactos/dll/keyboard/kbdsk1/kbdsk1.rbuild b/dll/keyboard/kbdsk1/kbdsk1.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdsk1/kbdsk1.rbuild rename to dll/keyboard/kbdsk1/kbdsk1.rbuild diff --git a/reactos/dll/keyboard/kbdsk1/kbdsk1.rc b/dll/keyboard/kbdsk1/kbdsk1.rc similarity index 100% rename from reactos/dll/keyboard/kbdsk1/kbdsk1.rc rename to dll/keyboard/kbdsk1/kbdsk1.rc diff --git a/reactos/dll/keyboard/kbdsk1/kbdsk1.spec b/dll/keyboard/kbdsk1/kbdsk1.spec similarity index 100% rename from reactos/dll/keyboard/kbdsk1/kbdsk1.spec rename to dll/keyboard/kbdsk1/kbdsk1.spec diff --git a/reactos/dll/keyboard/kbdsw/kbdsw.c b/dll/keyboard/kbdsw/kbdsw.c similarity index 100% rename from reactos/dll/keyboard/kbdsw/kbdsw.c rename to dll/keyboard/kbdsw/kbdsw.c diff --git a/reactos/dll/keyboard/kbdsw/kbdsw.rbuild b/dll/keyboard/kbdsw/kbdsw.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdsw/kbdsw.rbuild rename to dll/keyboard/kbdsw/kbdsw.rbuild diff --git a/reactos/dll/keyboard/kbdsw/kbdsw.rc b/dll/keyboard/kbdsw/kbdsw.rc similarity index 100% rename from reactos/dll/keyboard/kbdsw/kbdsw.rc rename to dll/keyboard/kbdsw/kbdsw.rc diff --git a/reactos/dll/keyboard/kbdsw/kbdsw.spec b/dll/keyboard/kbdsw/kbdsw.spec similarity index 100% rename from reactos/dll/keyboard/kbdsw/kbdsw.spec rename to dll/keyboard/kbdsw/kbdsw.spec diff --git a/reactos/dll/keyboard/kbdtat/kbdtat.c b/dll/keyboard/kbdtat/kbdtat.c similarity index 100% rename from reactos/dll/keyboard/kbdtat/kbdtat.c rename to dll/keyboard/kbdtat/kbdtat.c diff --git a/reactos/dll/keyboard/kbdtat/kbdtat.rbuild b/dll/keyboard/kbdtat/kbdtat.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdtat/kbdtat.rbuild rename to dll/keyboard/kbdtat/kbdtat.rbuild diff --git a/reactos/dll/keyboard/kbdtat/kbdtat.rc b/dll/keyboard/kbdtat/kbdtat.rc similarity index 100% rename from reactos/dll/keyboard/kbdtat/kbdtat.rc rename to dll/keyboard/kbdtat/kbdtat.rc diff --git a/reactos/dll/keyboard/kbdtat/kbdtat.spec b/dll/keyboard/kbdtat/kbdtat.spec similarity index 100% rename from reactos/dll/keyboard/kbdtat/kbdtat.spec rename to dll/keyboard/kbdtat/kbdtat.spec diff --git a/reactos/dll/keyboard/kbdth0/kbdth0.c b/dll/keyboard/kbdth0/kbdth0.c similarity index 100% rename from reactos/dll/keyboard/kbdth0/kbdth0.c rename to dll/keyboard/kbdth0/kbdth0.c diff --git a/reactos/dll/keyboard/kbdth0/kbdth0.rbuild b/dll/keyboard/kbdth0/kbdth0.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdth0/kbdth0.rbuild rename to dll/keyboard/kbdth0/kbdth0.rbuild diff --git a/reactos/dll/keyboard/kbdth0/kbdth0.rc b/dll/keyboard/kbdth0/kbdth0.rc similarity index 100% rename from reactos/dll/keyboard/kbdth0/kbdth0.rc rename to dll/keyboard/kbdth0/kbdth0.rc diff --git a/reactos/dll/keyboard/kbdth0/kbdth0.spec b/dll/keyboard/kbdth0/kbdth0.spec similarity index 100% rename from reactos/dll/keyboard/kbdth0/kbdth0.spec rename to dll/keyboard/kbdth0/kbdth0.spec diff --git a/reactos/dll/keyboard/kbdth1/kbdth1.c b/dll/keyboard/kbdth1/kbdth1.c similarity index 100% rename from reactos/dll/keyboard/kbdth1/kbdth1.c rename to dll/keyboard/kbdth1/kbdth1.c diff --git a/reactos/dll/keyboard/kbdth1/kbdth1.rbuild b/dll/keyboard/kbdth1/kbdth1.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdth1/kbdth1.rbuild rename to dll/keyboard/kbdth1/kbdth1.rbuild diff --git a/reactos/dll/keyboard/kbdth1/kbdth1.rc b/dll/keyboard/kbdth1/kbdth1.rc similarity index 100% rename from reactos/dll/keyboard/kbdth1/kbdth1.rc rename to dll/keyboard/kbdth1/kbdth1.rc diff --git a/reactos/dll/keyboard/kbdth1/kbdth1.spec b/dll/keyboard/kbdth1/kbdth1.spec similarity index 100% rename from reactos/dll/keyboard/kbdth1/kbdth1.spec rename to dll/keyboard/kbdth1/kbdth1.spec diff --git a/reactos/dll/keyboard/kbdth2/kbdth2.c b/dll/keyboard/kbdth2/kbdth2.c similarity index 100% rename from reactos/dll/keyboard/kbdth2/kbdth2.c rename to dll/keyboard/kbdth2/kbdth2.c diff --git a/reactos/dll/keyboard/kbdth2/kbdth2.rbuild b/dll/keyboard/kbdth2/kbdth2.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdth2/kbdth2.rbuild rename to dll/keyboard/kbdth2/kbdth2.rbuild diff --git a/reactos/dll/keyboard/kbdth2/kbdth2.rc b/dll/keyboard/kbdth2/kbdth2.rc similarity index 100% rename from reactos/dll/keyboard/kbdth2/kbdth2.rc rename to dll/keyboard/kbdth2/kbdth2.rc diff --git a/reactos/dll/keyboard/kbdth2/kbdth2.spec b/dll/keyboard/kbdth2/kbdth2.spec similarity index 100% rename from reactos/dll/keyboard/kbdth2/kbdth2.spec rename to dll/keyboard/kbdth2/kbdth2.spec diff --git a/reactos/dll/keyboard/kbdth3/kbdth3.c b/dll/keyboard/kbdth3/kbdth3.c similarity index 100% rename from reactos/dll/keyboard/kbdth3/kbdth3.c rename to dll/keyboard/kbdth3/kbdth3.c diff --git a/reactos/dll/keyboard/kbdth3/kbdth3.rbuild b/dll/keyboard/kbdth3/kbdth3.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdth3/kbdth3.rbuild rename to dll/keyboard/kbdth3/kbdth3.rbuild diff --git a/reactos/dll/keyboard/kbdth3/kbdth3.rc b/dll/keyboard/kbdth3/kbdth3.rc similarity index 100% rename from reactos/dll/keyboard/kbdth3/kbdth3.rc rename to dll/keyboard/kbdth3/kbdth3.rc diff --git a/reactos/dll/keyboard/kbdth3/kbdth3.spec b/dll/keyboard/kbdth3/kbdth3.spec similarity index 100% rename from reactos/dll/keyboard/kbdth3/kbdth3.spec rename to dll/keyboard/kbdth3/kbdth3.spec diff --git a/reactos/dll/keyboard/kbdtuf/kbdtuf.c b/dll/keyboard/kbdtuf/kbdtuf.c similarity index 100% rename from reactos/dll/keyboard/kbdtuf/kbdtuf.c rename to dll/keyboard/kbdtuf/kbdtuf.c diff --git a/reactos/dll/keyboard/kbdtuf/kbdtuf.rbuild b/dll/keyboard/kbdtuf/kbdtuf.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdtuf/kbdtuf.rbuild rename to dll/keyboard/kbdtuf/kbdtuf.rbuild diff --git a/reactos/dll/keyboard/kbdtuf/kbdtuf.rc b/dll/keyboard/kbdtuf/kbdtuf.rc similarity index 100% rename from reactos/dll/keyboard/kbdtuf/kbdtuf.rc rename to dll/keyboard/kbdtuf/kbdtuf.rc diff --git a/reactos/dll/keyboard/kbdtuf/kbdtuf.spec b/dll/keyboard/kbdtuf/kbdtuf.spec similarity index 100% rename from reactos/dll/keyboard/kbdtuf/kbdtuf.spec rename to dll/keyboard/kbdtuf/kbdtuf.spec diff --git a/reactos/dll/keyboard/kbdtuq/kbdtuq.c b/dll/keyboard/kbdtuq/kbdtuq.c similarity index 100% rename from reactos/dll/keyboard/kbdtuq/kbdtuq.c rename to dll/keyboard/kbdtuq/kbdtuq.c diff --git a/reactos/dll/keyboard/kbdtuq/kbdtuq.rbuild b/dll/keyboard/kbdtuq/kbdtuq.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdtuq/kbdtuq.rbuild rename to dll/keyboard/kbdtuq/kbdtuq.rbuild diff --git a/reactos/dll/keyboard/kbdtuq/kbdtuq.rc b/dll/keyboard/kbdtuq/kbdtuq.rc similarity index 100% rename from reactos/dll/keyboard/kbdtuq/kbdtuq.rc rename to dll/keyboard/kbdtuq/kbdtuq.rc diff --git a/reactos/dll/keyboard/kbdtuq/kbdtuq.spec b/dll/keyboard/kbdtuq/kbdtuq.spec similarity index 100% rename from reactos/dll/keyboard/kbdtuq/kbdtuq.spec rename to dll/keyboard/kbdtuq/kbdtuq.spec diff --git a/reactos/dll/keyboard/kbduk/kbduk.c b/dll/keyboard/kbduk/kbduk.c similarity index 100% rename from reactos/dll/keyboard/kbduk/kbduk.c rename to dll/keyboard/kbduk/kbduk.c diff --git a/reactos/dll/keyboard/kbduk/kbduk.rbuild b/dll/keyboard/kbduk/kbduk.rbuild similarity index 100% rename from reactos/dll/keyboard/kbduk/kbduk.rbuild rename to dll/keyboard/kbduk/kbduk.rbuild diff --git a/reactos/dll/keyboard/kbduk/kbduk.rc b/dll/keyboard/kbduk/kbduk.rc similarity index 100% rename from reactos/dll/keyboard/kbduk/kbduk.rc rename to dll/keyboard/kbduk/kbduk.rc diff --git a/reactos/dll/keyboard/kbduk/kbduk.spec b/dll/keyboard/kbduk/kbduk.spec similarity index 100% rename from reactos/dll/keyboard/kbduk/kbduk.spec rename to dll/keyboard/kbduk/kbduk.spec diff --git a/reactos/dll/keyboard/kbdur/kbdur.c b/dll/keyboard/kbdur/kbdur.c similarity index 100% rename from reactos/dll/keyboard/kbdur/kbdur.c rename to dll/keyboard/kbdur/kbdur.c diff --git a/reactos/dll/keyboard/kbdur/kbdur.rbuild b/dll/keyboard/kbdur/kbdur.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdur/kbdur.rbuild rename to dll/keyboard/kbdur/kbdur.rbuild diff --git a/reactos/dll/keyboard/kbdur/kbdur.rc b/dll/keyboard/kbdur/kbdur.rc similarity index 100% rename from reactos/dll/keyboard/kbdur/kbdur.rc rename to dll/keyboard/kbdur/kbdur.rc diff --git a/reactos/dll/keyboard/kbdur/kbdur.spec b/dll/keyboard/kbdur/kbdur.spec similarity index 100% rename from reactos/dll/keyboard/kbdur/kbdur.spec rename to dll/keyboard/kbdur/kbdur.spec diff --git a/reactos/dll/keyboard/kbdurs/kbdurs.c b/dll/keyboard/kbdurs/kbdurs.c similarity index 100% rename from reactos/dll/keyboard/kbdurs/kbdurs.c rename to dll/keyboard/kbdurs/kbdurs.c diff --git a/reactos/dll/keyboard/kbdurs/kbdurs.rbuild b/dll/keyboard/kbdurs/kbdurs.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdurs/kbdurs.rbuild rename to dll/keyboard/kbdurs/kbdurs.rbuild diff --git a/reactos/dll/keyboard/kbdurs/kbdurs.rc b/dll/keyboard/kbdurs/kbdurs.rc similarity index 100% rename from reactos/dll/keyboard/kbdurs/kbdurs.rc rename to dll/keyboard/kbdurs/kbdurs.rc diff --git a/reactos/dll/keyboard/kbdurs/kbdurs.spec b/dll/keyboard/kbdurs/kbdurs.spec similarity index 100% rename from reactos/dll/keyboard/kbdurs/kbdurs.spec rename to dll/keyboard/kbdurs/kbdurs.spec diff --git a/reactos/dll/keyboard/kbdus/kbdus.c b/dll/keyboard/kbdus/kbdus.c similarity index 100% rename from reactos/dll/keyboard/kbdus/kbdus.c rename to dll/keyboard/kbdus/kbdus.c diff --git a/reactos/dll/keyboard/kbdus/kbdus.rbuild b/dll/keyboard/kbdus/kbdus.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdus/kbdus.rbuild rename to dll/keyboard/kbdus/kbdus.rbuild diff --git a/reactos/dll/keyboard/kbdus/kbdus.rc b/dll/keyboard/kbdus/kbdus.rc similarity index 100% rename from reactos/dll/keyboard/kbdus/kbdus.rc rename to dll/keyboard/kbdus/kbdus.rc diff --git a/reactos/dll/keyboard/kbdus/kbdus.spec b/dll/keyboard/kbdus/kbdus.spec similarity index 100% rename from reactos/dll/keyboard/kbdus/kbdus.spec rename to dll/keyboard/kbdus/kbdus.spec diff --git a/reactos/dll/keyboard/kbdusa/kbdusa.c b/dll/keyboard/kbdusa/kbdusa.c similarity index 100% rename from reactos/dll/keyboard/kbdusa/kbdusa.c rename to dll/keyboard/kbdusa/kbdusa.c diff --git a/reactos/dll/keyboard/kbdusa/kbdusa.rbuild b/dll/keyboard/kbdusa/kbdusa.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdusa/kbdusa.rbuild rename to dll/keyboard/kbdusa/kbdusa.rbuild diff --git a/reactos/dll/keyboard/kbdusa/kbdusa.rc b/dll/keyboard/kbdusa/kbdusa.rc similarity index 100% rename from reactos/dll/keyboard/kbdusa/kbdusa.rc rename to dll/keyboard/kbdusa/kbdusa.rc diff --git a/reactos/dll/keyboard/kbdusa/kbdusa.spec b/dll/keyboard/kbdusa/kbdusa.spec similarity index 100% rename from reactos/dll/keyboard/kbdusa/kbdusa.spec rename to dll/keyboard/kbdusa/kbdusa.spec diff --git a/reactos/dll/keyboard/kbdusl/kbdusl.c b/dll/keyboard/kbdusl/kbdusl.c similarity index 100% rename from reactos/dll/keyboard/kbdusl/kbdusl.c rename to dll/keyboard/kbdusl/kbdusl.c diff --git a/reactos/dll/keyboard/kbdusl/kbdusl.rbuild b/dll/keyboard/kbdusl/kbdusl.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdusl/kbdusl.rbuild rename to dll/keyboard/kbdusl/kbdusl.rbuild diff --git a/reactos/dll/keyboard/kbdusl/kbdusl.rc b/dll/keyboard/kbdusl/kbdusl.rc similarity index 100% rename from reactos/dll/keyboard/kbdusl/kbdusl.rc rename to dll/keyboard/kbdusl/kbdusl.rc diff --git a/reactos/dll/keyboard/kbdusl/kbdusl.spec b/dll/keyboard/kbdusl/kbdusl.spec similarity index 100% rename from reactos/dll/keyboard/kbdusl/kbdusl.spec rename to dll/keyboard/kbdusl/kbdusl.spec diff --git a/reactos/dll/keyboard/kbdusr/kbdusr.c b/dll/keyboard/kbdusr/kbdusr.c similarity index 100% rename from reactos/dll/keyboard/kbdusr/kbdusr.c rename to dll/keyboard/kbdusr/kbdusr.c diff --git a/reactos/dll/keyboard/kbdusr/kbdusr.rbuild b/dll/keyboard/kbdusr/kbdusr.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdusr/kbdusr.rbuild rename to dll/keyboard/kbdusr/kbdusr.rbuild diff --git a/reactos/dll/keyboard/kbdusr/kbdusr.rc b/dll/keyboard/kbdusr/kbdusr.rc similarity index 100% rename from reactos/dll/keyboard/kbdusr/kbdusr.rc rename to dll/keyboard/kbdusr/kbdusr.rc diff --git a/reactos/dll/keyboard/kbdusr/kbdusr.spec b/dll/keyboard/kbdusr/kbdusr.spec similarity index 100% rename from reactos/dll/keyboard/kbdusr/kbdusr.spec rename to dll/keyboard/kbdusr/kbdusr.spec diff --git a/reactos/dll/keyboard/kbdusx/kbdusx.c b/dll/keyboard/kbdusx/kbdusx.c similarity index 100% rename from reactos/dll/keyboard/kbdusx/kbdusx.c rename to dll/keyboard/kbdusx/kbdusx.c diff --git a/reactos/dll/keyboard/kbdusx/kbdusx.rbuild b/dll/keyboard/kbdusx/kbdusx.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdusx/kbdusx.rbuild rename to dll/keyboard/kbdusx/kbdusx.rbuild diff --git a/reactos/dll/keyboard/kbdusx/kbdusx.rc b/dll/keyboard/kbdusx/kbdusx.rc similarity index 100% rename from reactos/dll/keyboard/kbdusx/kbdusx.rc rename to dll/keyboard/kbdusx/kbdusx.rc diff --git a/reactos/dll/keyboard/kbdusx/kbdusx.spec b/dll/keyboard/kbdusx/kbdusx.spec similarity index 100% rename from reactos/dll/keyboard/kbdusx/kbdusx.spec rename to dll/keyboard/kbdusx/kbdusx.spec diff --git a/reactos/dll/keyboard/kbduzb/kbduzb.c b/dll/keyboard/kbduzb/kbduzb.c similarity index 100% rename from reactos/dll/keyboard/kbduzb/kbduzb.c rename to dll/keyboard/kbduzb/kbduzb.c diff --git a/reactos/dll/keyboard/kbduzb/kbduzb.rbuild b/dll/keyboard/kbduzb/kbduzb.rbuild similarity index 100% rename from reactos/dll/keyboard/kbduzb/kbduzb.rbuild rename to dll/keyboard/kbduzb/kbduzb.rbuild diff --git a/reactos/dll/keyboard/kbduzb/kbduzb.rc b/dll/keyboard/kbduzb/kbduzb.rc similarity index 100% rename from reactos/dll/keyboard/kbduzb/kbduzb.rc rename to dll/keyboard/kbduzb/kbduzb.rc diff --git a/reactos/dll/keyboard/kbduzb/kbduzb.spec b/dll/keyboard/kbduzb/kbduzb.spec similarity index 100% rename from reactos/dll/keyboard/kbduzb/kbduzb.spec rename to dll/keyboard/kbduzb/kbduzb.spec diff --git a/reactos/dll/keyboard/kbdvntc/kbdvntc.c b/dll/keyboard/kbdvntc/kbdvntc.c similarity index 100% rename from reactos/dll/keyboard/kbdvntc/kbdvntc.c rename to dll/keyboard/kbdvntc/kbdvntc.c diff --git a/reactos/dll/keyboard/kbdvntc/kbdvntc.rbuild b/dll/keyboard/kbdvntc/kbdvntc.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdvntc/kbdvntc.rbuild rename to dll/keyboard/kbdvntc/kbdvntc.rbuild diff --git a/reactos/dll/keyboard/kbdvntc/kbdvntc.rc b/dll/keyboard/kbdvntc/kbdvntc.rc similarity index 100% rename from reactos/dll/keyboard/kbdvntc/kbdvntc.rc rename to dll/keyboard/kbdvntc/kbdvntc.rc diff --git a/reactos/dll/keyboard/kbdvntc/kbdvntc.spec b/dll/keyboard/kbdvntc/kbdvntc.spec similarity index 100% rename from reactos/dll/keyboard/kbdvntc/kbdvntc.spec rename to dll/keyboard/kbdvntc/kbdvntc.spec diff --git a/reactos/dll/keyboard/kbdycc/kbdycc.c b/dll/keyboard/kbdycc/kbdycc.c similarity index 100% rename from reactos/dll/keyboard/kbdycc/kbdycc.c rename to dll/keyboard/kbdycc/kbdycc.c diff --git a/reactos/dll/keyboard/kbdycc/kbdycc.rbuild b/dll/keyboard/kbdycc/kbdycc.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdycc/kbdycc.rbuild rename to dll/keyboard/kbdycc/kbdycc.rbuild diff --git a/reactos/dll/keyboard/kbdycc/kbdycc.rc b/dll/keyboard/kbdycc/kbdycc.rc similarity index 100% rename from reactos/dll/keyboard/kbdycc/kbdycc.rc rename to dll/keyboard/kbdycc/kbdycc.rc diff --git a/reactos/dll/keyboard/kbdycc/kbdycc.spec b/dll/keyboard/kbdycc/kbdycc.spec similarity index 100% rename from reactos/dll/keyboard/kbdycc/kbdycc.spec rename to dll/keyboard/kbdycc/kbdycc.spec diff --git a/reactos/dll/keyboard/kbdycl/kbdycl.c b/dll/keyboard/kbdycl/kbdycl.c similarity index 100% rename from reactos/dll/keyboard/kbdycl/kbdycl.c rename to dll/keyboard/kbdycl/kbdycl.c diff --git a/reactos/dll/keyboard/kbdycl/kbdycl.rbuild b/dll/keyboard/kbdycl/kbdycl.rbuild similarity index 100% rename from reactos/dll/keyboard/kbdycl/kbdycl.rbuild rename to dll/keyboard/kbdycl/kbdycl.rbuild diff --git a/reactos/dll/keyboard/kbdycl/kbdycl.rc b/dll/keyboard/kbdycl/kbdycl.rc similarity index 100% rename from reactos/dll/keyboard/kbdycl/kbdycl.rc rename to dll/keyboard/kbdycl/kbdycl.rc diff --git a/reactos/dll/keyboard/kbdycl/kbdycl.spec b/dll/keyboard/kbdycl/kbdycl.spec similarity index 100% rename from reactos/dll/keyboard/kbdycl/kbdycl.spec rename to dll/keyboard/kbdycl/kbdycl.spec diff --git a/reactos/dll/keyboard/keyboard.rbuild b/dll/keyboard/keyboard.rbuild similarity index 100% rename from reactos/dll/keyboard/keyboard.rbuild rename to dll/keyboard/keyboard.rbuild diff --git a/reactos/dll/nls/idndl/idndl.cpp b/dll/nls/idndl/idndl.cpp similarity index 100% rename from reactos/dll/nls/idndl/idndl.cpp rename to dll/nls/idndl/idndl.cpp diff --git a/reactos/dll/nls/idndl/idndl.def b/dll/nls/idndl/idndl.def similarity index 100% rename from reactos/dll/nls/idndl/idndl.def rename to dll/nls/idndl/idndl.def diff --git a/reactos/dll/nls/idndl/idndl.rbuild b/dll/nls/idndl/idndl.rbuild similarity index 100% rename from reactos/dll/nls/idndl/idndl.rbuild rename to dll/nls/idndl/idndl.rbuild diff --git a/reactos/dll/nls/idndl_redist/data/genidldndata.cpp b/dll/nls/idndl_redist/data/genidldndata.cpp similarity index 100% rename from reactos/dll/nls/idndl_redist/data/genidldndata.cpp rename to dll/nls/idndl_redist/data/genidldndata.cpp diff --git a/reactos/dll/nls/idndl_redist/data/idldata.cpp b/dll/nls/idndl_redist/data/idldata.cpp similarity index 100% rename from reactos/dll/nls/idndl_redist/data/idldata.cpp rename to dll/nls/idndl_redist/data/idldata.cpp diff --git a/reactos/dll/nls/idndl_redist/idndl.cpp b/dll/nls/idndl_redist/idndl.cpp similarity index 100% rename from reactos/dll/nls/idndl_redist/idndl.cpp rename to dll/nls/idndl_redist/idndl.cpp diff --git a/reactos/dll/nls/idndl_redist/idndl.def b/dll/nls/idndl_redist/idndl.def similarity index 100% rename from reactos/dll/nls/idndl_redist/idndl.def rename to dll/nls/idndl_redist/idndl.def diff --git a/reactos/dll/nls/idndl_redist/idndl_redist.rbuild b/dll/nls/idndl_redist/idndl_redist.rbuild similarity index 100% rename from reactos/dll/nls/idndl_redist/idndl_redist.rbuild rename to dll/nls/idndl_redist/idndl_redist.rbuild diff --git a/reactos/dll/nls/idndl_redist/stubs.cpp b/dll/nls/idndl_redist/stubs.cpp similarity index 100% rename from reactos/dll/nls/idndl_redist/stubs.cpp rename to dll/nls/idndl_redist/stubs.cpp diff --git a/reactos/dll/nls/nls.rbuild b/dll/nls/nls.rbuild similarity index 100% rename from reactos/dll/nls/nls.rbuild rename to dll/nls/nls.rbuild diff --git a/reactos/dll/nls/normaliz/dummy.c b/dll/nls/normaliz/dummy.c similarity index 100% rename from reactos/dll/nls/normaliz/dummy.c rename to dll/nls/normaliz/dummy.c diff --git a/reactos/dll/nls/normaliz/normaliz.def b/dll/nls/normaliz/normaliz.def similarity index 100% rename from reactos/dll/nls/normaliz/normaliz.def rename to dll/nls/normaliz/normaliz.def diff --git a/reactos/dll/nls/normaliz/normaliz.rbuild b/dll/nls/normaliz/normaliz.rbuild similarity index 100% rename from reactos/dll/nls/normaliz/normaliz.rbuild rename to dll/nls/normaliz/normaliz.rbuild diff --git a/reactos/dll/nls/normaliz_redist/data/icudt38.c b/dll/nls/normaliz_redist/data/icudt38.c similarity index 100% rename from reactos/dll/nls/normaliz_redist/data/icudt38.c rename to dll/nls/normaliz_redist/data/icudt38.c diff --git a/reactos/dll/nls/normaliz_redist/data/icudt38.lst b/dll/nls/normaliz_redist/data/icudt38.lst similarity index 100% rename from reactos/dll/nls/normaliz_redist/data/icudt38.lst rename to dll/nls/normaliz_redist/data/icudt38.lst diff --git a/reactos/dll/nls/normaliz_redist/normaliz.cpp b/dll/nls/normaliz_redist/normaliz.cpp similarity index 100% rename from reactos/dll/nls/normaliz_redist/normaliz.cpp rename to dll/nls/normaliz_redist/normaliz.cpp diff --git a/reactos/dll/nls/normaliz_redist/normaliz.def b/dll/nls/normaliz_redist/normaliz.def similarity index 100% rename from reactos/dll/nls/normaliz_redist/normaliz.def rename to dll/nls/normaliz_redist/normaliz.def diff --git a/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild b/dll/nls/normaliz_redist/normaliz_redist.rbuild similarity index 100% rename from reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild rename to dll/nls/normaliz_redist/normaliz_redist.rbuild diff --git a/reactos/dll/ntdll/Doxyfile b/dll/ntdll/Doxyfile similarity index 100% rename from reactos/dll/ntdll/Doxyfile rename to dll/ntdll/Doxyfile diff --git a/reactos/dll/ntdll/csr/api.c b/dll/ntdll/csr/api.c similarity index 100% rename from reactos/dll/ntdll/csr/api.c rename to dll/ntdll/csr/api.c diff --git a/reactos/dll/ntdll/csr/capture.c b/dll/ntdll/csr/capture.c similarity index 100% rename from reactos/dll/ntdll/csr/capture.c rename to dll/ntdll/csr/capture.c diff --git a/reactos/dll/ntdll/csr/connect.c b/dll/ntdll/csr/connect.c similarity index 100% rename from reactos/dll/ntdll/csr/connect.c rename to dll/ntdll/csr/connect.c diff --git a/reactos/dll/ntdll/dbg/dbgui.c b/dll/ntdll/dbg/dbgui.c similarity index 100% rename from reactos/dll/ntdll/dbg/dbgui.c rename to dll/ntdll/dbg/dbgui.c diff --git a/reactos/dll/ntdll/def/ntdll.rc b/dll/ntdll/def/ntdll.rc similarity index 100% rename from reactos/dll/ntdll/def/ntdll.rc rename to dll/ntdll/def/ntdll.rc diff --git a/reactos/dll/ntdll/def/ntdll_arm.def b/dll/ntdll/def/ntdll_arm.def similarity index 100% rename from reactos/dll/ntdll/def/ntdll_arm.def rename to dll/ntdll/def/ntdll_arm.def diff --git a/reactos/dll/ntdll/def/ntdll_i386.def b/dll/ntdll/def/ntdll_i386.def similarity index 100% rename from reactos/dll/ntdll/def/ntdll_i386.def rename to dll/ntdll/def/ntdll_i386.def diff --git a/reactos/dll/ntdll/dispatch/arm/stubs_asm.s b/dll/ntdll/dispatch/arm/stubs_asm.s similarity index 100% rename from reactos/dll/ntdll/dispatch/arm/stubs_asm.s rename to dll/ntdll/dispatch/arm/stubs_asm.s diff --git a/reactos/dll/ntdll/dispatch/dispatch.c b/dll/ntdll/dispatch/dispatch.c similarity index 100% rename from reactos/dll/ntdll/dispatch/dispatch.c rename to dll/ntdll/dispatch/dispatch.c diff --git a/reactos/dll/ntdll/dispatch/i386/dispatch.S b/dll/ntdll/dispatch/i386/dispatch.S similarity index 100% rename from reactos/dll/ntdll/dispatch/i386/dispatch.S rename to dll/ntdll/dispatch/i386/dispatch.S diff --git a/reactos/dll/ntdll/include/ntdll.h b/dll/ntdll/include/ntdll.h similarity index 100% rename from reactos/dll/ntdll/include/ntdll.h rename to dll/ntdll/include/ntdll.h diff --git a/reactos/dll/ntdll/include/ntdllp.h b/dll/ntdll/include/ntdllp.h similarity index 100% rename from reactos/dll/ntdll/include/ntdllp.h rename to dll/ntdll/include/ntdllp.h diff --git a/reactos/dll/ntdll/ldr/elf.c b/dll/ntdll/ldr/elf.c similarity index 100% rename from reactos/dll/ntdll/ldr/elf.c rename to dll/ntdll/ldr/elf.c diff --git a/reactos/dll/ntdll/ldr/startup.c b/dll/ntdll/ldr/startup.c similarity index 100% rename from reactos/dll/ntdll/ldr/startup.c rename to dll/ntdll/ldr/startup.c diff --git a/reactos/dll/ntdll/ldr/utils.c b/dll/ntdll/ldr/utils.c similarity index 100% rename from reactos/dll/ntdll/ldr/utils.c rename to dll/ntdll/ldr/utils.c diff --git a/reactos/dll/ntdll/ntdll.rbuild b/dll/ntdll/ntdll.rbuild similarity index 100% rename from reactos/dll/ntdll/ntdll.rbuild rename to dll/ntdll/ntdll.rbuild diff --git a/reactos/dll/ntdll/rtl/libsupp.c b/dll/ntdll/rtl/libsupp.c similarity index 100% rename from reactos/dll/ntdll/rtl/libsupp.c rename to dll/ntdll/rtl/libsupp.c diff --git a/reactos/dll/ntdll/rtl/version.c b/dll/ntdll/rtl/version.c similarity index 100% rename from reactos/dll/ntdll/rtl/version.c rename to dll/ntdll/rtl/version.c diff --git a/reactos/dll/shellext/deskadp/deskadp.c b/dll/shellext/deskadp/deskadp.c similarity index 100% rename from reactos/dll/shellext/deskadp/deskadp.c rename to dll/shellext/deskadp/deskadp.c diff --git a/reactos/dll/shellext/deskadp/deskadp.h b/dll/shellext/deskadp/deskadp.h similarity index 100% rename from reactos/dll/shellext/deskadp/deskadp.h rename to dll/shellext/deskadp/deskadp.h diff --git a/reactos/dll/shellext/deskadp/deskadp.rbuild b/dll/shellext/deskadp/deskadp.rbuild similarity index 100% rename from reactos/dll/shellext/deskadp/deskadp.rbuild rename to dll/shellext/deskadp/deskadp.rbuild diff --git a/reactos/dll/shellext/deskadp/deskadp.rc b/dll/shellext/deskadp/deskadp.rc similarity index 100% rename from reactos/dll/shellext/deskadp/deskadp.rc rename to dll/shellext/deskadp/deskadp.rc diff --git a/reactos/dll/shellext/deskadp/deskadp.spec b/dll/shellext/deskadp/deskadp.spec similarity index 100% rename from reactos/dll/shellext/deskadp/deskadp.spec rename to dll/shellext/deskadp/deskadp.spec diff --git a/reactos/dll/shellext/deskadp/lang/bg-BG.rc b/dll/shellext/deskadp/lang/bg-BG.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/bg-BG.rc rename to dll/shellext/deskadp/lang/bg-BG.rc diff --git a/reactos/dll/shellext/deskadp/lang/cs-CZ.rc b/dll/shellext/deskadp/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/cs-CZ.rc rename to dll/shellext/deskadp/lang/cs-CZ.rc diff --git a/reactos/dll/shellext/deskadp/lang/de-DE.rc b/dll/shellext/deskadp/lang/de-DE.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/de-DE.rc rename to dll/shellext/deskadp/lang/de-DE.rc diff --git a/reactos/dll/shellext/deskadp/lang/el-GR.rc b/dll/shellext/deskadp/lang/el-GR.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/el-GR.rc rename to dll/shellext/deskadp/lang/el-GR.rc diff --git a/reactos/dll/shellext/deskadp/lang/en-US.rc b/dll/shellext/deskadp/lang/en-US.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/en-US.rc rename to dll/shellext/deskadp/lang/en-US.rc diff --git a/reactos/dll/shellext/deskadp/lang/es-ES.rc b/dll/shellext/deskadp/lang/es-ES.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/es-ES.rc rename to dll/shellext/deskadp/lang/es-ES.rc diff --git a/reactos/dll/shellext/deskadp/lang/eu-ES.rc b/dll/shellext/deskadp/lang/eu-ES.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/eu-ES.rc rename to dll/shellext/deskadp/lang/eu-ES.rc diff --git a/reactos/dll/shellext/deskadp/lang/fr-FR.rc b/dll/shellext/deskadp/lang/fr-FR.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/fr-FR.rc rename to dll/shellext/deskadp/lang/fr-FR.rc diff --git a/reactos/dll/shellext/deskadp/lang/it-IT.rc b/dll/shellext/deskadp/lang/it-IT.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/it-IT.rc rename to dll/shellext/deskadp/lang/it-IT.rc diff --git a/reactos/dll/shellext/deskadp/lang/no-NO.rc b/dll/shellext/deskadp/lang/no-NO.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/no-NO.rc rename to dll/shellext/deskadp/lang/no-NO.rc diff --git a/reactos/dll/shellext/deskadp/lang/pl-PL.rc b/dll/shellext/deskadp/lang/pl-PL.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/pl-PL.rc rename to dll/shellext/deskadp/lang/pl-PL.rc diff --git a/reactos/dll/shellext/deskadp/lang/ru-RU.rc b/dll/shellext/deskadp/lang/ru-RU.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/ru-RU.rc rename to dll/shellext/deskadp/lang/ru-RU.rc diff --git a/reactos/dll/shellext/deskadp/lang/sk-SK.rc b/dll/shellext/deskadp/lang/sk-SK.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/sk-SK.rc rename to dll/shellext/deskadp/lang/sk-SK.rc diff --git a/reactos/dll/shellext/deskadp/lang/uk-UA.rc b/dll/shellext/deskadp/lang/uk-UA.rc similarity index 100% rename from reactos/dll/shellext/deskadp/lang/uk-UA.rc rename to dll/shellext/deskadp/lang/uk-UA.rc diff --git a/reactos/dll/shellext/deskadp/precomp.h b/dll/shellext/deskadp/precomp.h similarity index 100% rename from reactos/dll/shellext/deskadp/precomp.h rename to dll/shellext/deskadp/precomp.h diff --git a/reactos/dll/shellext/deskadp/resource.h b/dll/shellext/deskadp/resource.h similarity index 100% rename from reactos/dll/shellext/deskadp/resource.h rename to dll/shellext/deskadp/resource.h diff --git a/reactos/dll/shellext/deskadp/rsrc.rc b/dll/shellext/deskadp/rsrc.rc similarity index 100% rename from reactos/dll/shellext/deskadp/rsrc.rc rename to dll/shellext/deskadp/rsrc.rc diff --git a/reactos/dll/shellext/deskadp/shxiface.c b/dll/shellext/deskadp/shxiface.c similarity index 100% rename from reactos/dll/shellext/deskadp/shxiface.c rename to dll/shellext/deskadp/shxiface.c diff --git a/reactos/dll/shellext/deskmon/deskmon.c b/dll/shellext/deskmon/deskmon.c similarity index 100% rename from reactos/dll/shellext/deskmon/deskmon.c rename to dll/shellext/deskmon/deskmon.c diff --git a/reactos/dll/shellext/deskmon/deskmon.h b/dll/shellext/deskmon/deskmon.h similarity index 100% rename from reactos/dll/shellext/deskmon/deskmon.h rename to dll/shellext/deskmon/deskmon.h diff --git a/reactos/dll/shellext/deskmon/deskmon.rbuild b/dll/shellext/deskmon/deskmon.rbuild similarity index 100% rename from reactos/dll/shellext/deskmon/deskmon.rbuild rename to dll/shellext/deskmon/deskmon.rbuild diff --git a/reactos/dll/shellext/deskmon/deskmon.rc b/dll/shellext/deskmon/deskmon.rc similarity index 100% rename from reactos/dll/shellext/deskmon/deskmon.rc rename to dll/shellext/deskmon/deskmon.rc diff --git a/reactos/dll/shellext/deskmon/deskmon.spec b/dll/shellext/deskmon/deskmon.spec similarity index 100% rename from reactos/dll/shellext/deskmon/deskmon.spec rename to dll/shellext/deskmon/deskmon.spec diff --git a/reactos/dll/shellext/deskmon/lang/bg-BG.rc b/dll/shellext/deskmon/lang/bg-BG.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/bg-BG.rc rename to dll/shellext/deskmon/lang/bg-BG.rc diff --git a/reactos/dll/shellext/deskmon/lang/cs-CZ.rc b/dll/shellext/deskmon/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/cs-CZ.rc rename to dll/shellext/deskmon/lang/cs-CZ.rc diff --git a/reactos/dll/shellext/deskmon/lang/de-DE.rc b/dll/shellext/deskmon/lang/de-DE.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/de-DE.rc rename to dll/shellext/deskmon/lang/de-DE.rc diff --git a/reactos/dll/shellext/deskmon/lang/el-GR.rc b/dll/shellext/deskmon/lang/el-GR.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/el-GR.rc rename to dll/shellext/deskmon/lang/el-GR.rc diff --git a/reactos/dll/shellext/deskmon/lang/en-US.rc b/dll/shellext/deskmon/lang/en-US.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/en-US.rc rename to dll/shellext/deskmon/lang/en-US.rc diff --git a/reactos/dll/shellext/deskmon/lang/es-ES.rc b/dll/shellext/deskmon/lang/es-ES.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/es-ES.rc rename to dll/shellext/deskmon/lang/es-ES.rc diff --git a/reactos/dll/shellext/deskmon/lang/eu-ES.rc b/dll/shellext/deskmon/lang/eu-ES.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/eu-ES.rc rename to dll/shellext/deskmon/lang/eu-ES.rc diff --git a/reactos/dll/shellext/deskmon/lang/fr-FR.rc b/dll/shellext/deskmon/lang/fr-FR.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/fr-FR.rc rename to dll/shellext/deskmon/lang/fr-FR.rc diff --git a/reactos/dll/shellext/deskmon/lang/it-IT.rc b/dll/shellext/deskmon/lang/it-IT.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/it-IT.rc rename to dll/shellext/deskmon/lang/it-IT.rc diff --git a/reactos/dll/shellext/deskmon/lang/no-NO.rc b/dll/shellext/deskmon/lang/no-NO.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/no-NO.rc rename to dll/shellext/deskmon/lang/no-NO.rc diff --git a/reactos/dll/shellext/deskmon/lang/pl-PL.rc b/dll/shellext/deskmon/lang/pl-PL.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/pl-PL.rc rename to dll/shellext/deskmon/lang/pl-PL.rc diff --git a/reactos/dll/shellext/deskmon/lang/ru-RU.rc b/dll/shellext/deskmon/lang/ru-RU.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/ru-RU.rc rename to dll/shellext/deskmon/lang/ru-RU.rc diff --git a/reactos/dll/shellext/deskmon/lang/sk-SK.rc b/dll/shellext/deskmon/lang/sk-SK.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/sk-SK.rc rename to dll/shellext/deskmon/lang/sk-SK.rc diff --git a/reactos/dll/shellext/deskmon/lang/uk-UA.rc b/dll/shellext/deskmon/lang/uk-UA.rc similarity index 100% rename from reactos/dll/shellext/deskmon/lang/uk-UA.rc rename to dll/shellext/deskmon/lang/uk-UA.rc diff --git a/reactos/dll/shellext/deskmon/precomp.h b/dll/shellext/deskmon/precomp.h similarity index 100% rename from reactos/dll/shellext/deskmon/precomp.h rename to dll/shellext/deskmon/precomp.h diff --git a/reactos/dll/shellext/deskmon/resource.h b/dll/shellext/deskmon/resource.h similarity index 100% rename from reactos/dll/shellext/deskmon/resource.h rename to dll/shellext/deskmon/resource.h diff --git a/reactos/dll/shellext/deskmon/rsrc.rc b/dll/shellext/deskmon/rsrc.rc similarity index 100% rename from reactos/dll/shellext/deskmon/rsrc.rc rename to dll/shellext/deskmon/rsrc.rc diff --git a/reactos/dll/shellext/deskmon/shxiface.c b/dll/shellext/deskmon/shxiface.c similarity index 100% rename from reactos/dll/shellext/deskmon/shxiface.c rename to dll/shellext/deskmon/shxiface.c diff --git a/reactos/dll/shellext/devcpux/devcpux.def b/dll/shellext/devcpux/devcpux.def similarity index 100% rename from reactos/dll/shellext/devcpux/devcpux.def rename to dll/shellext/devcpux/devcpux.def diff --git a/reactos/dll/shellext/devcpux/devcpux.rbuild b/dll/shellext/devcpux/devcpux.rbuild similarity index 100% rename from reactos/dll/shellext/devcpux/devcpux.rbuild rename to dll/shellext/devcpux/devcpux.rbuild diff --git a/reactos/dll/shellext/devcpux/processor.c b/dll/shellext/devcpux/processor.c similarity index 100% rename from reactos/dll/shellext/devcpux/processor.c rename to dll/shellext/devcpux/processor.c diff --git a/reactos/dll/shellext/devcpux/processor.rc b/dll/shellext/devcpux/processor.rc similarity index 100% rename from reactos/dll/shellext/devcpux/processor.rc rename to dll/shellext/devcpux/processor.rc diff --git a/reactos/dll/shellext/devcpux/resource.h b/dll/shellext/devcpux/resource.h similarity index 100% rename from reactos/dll/shellext/devcpux/resource.h rename to dll/shellext/devcpux/resource.h diff --git a/reactos/dll/shellext/fontext/fontext.c b/dll/shellext/fontext/fontext.c similarity index 100% rename from reactos/dll/shellext/fontext/fontext.c rename to dll/shellext/fontext/fontext.c diff --git a/reactos/dll/shellext/fontext/fontext.h b/dll/shellext/fontext/fontext.h similarity index 100% rename from reactos/dll/shellext/fontext/fontext.h rename to dll/shellext/fontext/fontext.h diff --git a/reactos/dll/shellext/fontext/fontext.rbuild b/dll/shellext/fontext/fontext.rbuild similarity index 100% rename from reactos/dll/shellext/fontext/fontext.rbuild rename to dll/shellext/fontext/fontext.rbuild diff --git a/reactos/dll/shellext/fontext/fontext.rc b/dll/shellext/fontext/fontext.rc similarity index 100% rename from reactos/dll/shellext/fontext/fontext.rc rename to dll/shellext/fontext/fontext.rc diff --git a/reactos/dll/shellext/fontext/fontext.spec b/dll/shellext/fontext/fontext.spec similarity index 100% rename from reactos/dll/shellext/fontext/fontext.spec rename to dll/shellext/fontext/fontext.spec diff --git a/reactos/dll/shellext/fontext/lang/en-US.rc b/dll/shellext/fontext/lang/en-US.rc similarity index 100% rename from reactos/dll/shellext/fontext/lang/en-US.rc rename to dll/shellext/fontext/lang/en-US.rc diff --git a/reactos/dll/shellext/fontext/regsvr.c b/dll/shellext/fontext/regsvr.c similarity index 100% rename from reactos/dll/shellext/fontext/regsvr.c rename to dll/shellext/fontext/regsvr.c diff --git a/reactos/dll/shellext/fontext/resource.h b/dll/shellext/fontext/resource.h similarity index 100% rename from reactos/dll/shellext/fontext/resource.h rename to dll/shellext/fontext/resource.h diff --git a/reactos/dll/shellext/fontext/rsrc.rc b/dll/shellext/fontext/rsrc.rc similarity index 100% rename from reactos/dll/shellext/fontext/rsrc.rc rename to dll/shellext/fontext/rsrc.rc diff --git a/reactos/dll/shellext/shellext.rbuild b/dll/shellext/shellext.rbuild similarity index 100% rename from reactos/dll/shellext/shellext.rbuild rename to dll/shellext/shellext.rbuild diff --git a/reactos/dll/shellext/slayer/lang/bg-BG.rc b/dll/shellext/slayer/lang/bg-BG.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/bg-BG.rc rename to dll/shellext/slayer/lang/bg-BG.rc diff --git a/reactos/dll/shellext/slayer/lang/cs-CZ.rc b/dll/shellext/slayer/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/cs-CZ.rc rename to dll/shellext/slayer/lang/cs-CZ.rc diff --git a/reactos/dll/shellext/slayer/lang/de-DE.rc b/dll/shellext/slayer/lang/de-DE.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/de-DE.rc rename to dll/shellext/slayer/lang/de-DE.rc diff --git a/reactos/dll/shellext/slayer/lang/en-US.rc b/dll/shellext/slayer/lang/en-US.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/en-US.rc rename to dll/shellext/slayer/lang/en-US.rc diff --git a/reactos/dll/shellext/slayer/lang/es-ES.rc b/dll/shellext/slayer/lang/es-ES.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/es-ES.rc rename to dll/shellext/slayer/lang/es-ES.rc diff --git a/reactos/dll/shellext/slayer/lang/eu-ES.rc b/dll/shellext/slayer/lang/eu-ES.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/eu-ES.rc rename to dll/shellext/slayer/lang/eu-ES.rc diff --git a/reactos/dll/shellext/slayer/lang/fr-FR.rc b/dll/shellext/slayer/lang/fr-FR.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/fr-FR.rc rename to dll/shellext/slayer/lang/fr-FR.rc diff --git a/reactos/dll/shellext/slayer/lang/hu-HU.rc b/dll/shellext/slayer/lang/hu-HU.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/hu-HU.rc rename to dll/shellext/slayer/lang/hu-HU.rc diff --git a/reactos/dll/shellext/slayer/lang/id-ID.rc b/dll/shellext/slayer/lang/id-ID.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/id-ID.rc rename to dll/shellext/slayer/lang/id-ID.rc diff --git a/reactos/dll/shellext/slayer/lang/it-IT.rc b/dll/shellext/slayer/lang/it-IT.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/it-IT.rc rename to dll/shellext/slayer/lang/it-IT.rc diff --git a/reactos/dll/shellext/slayer/lang/nl-NL.rc b/dll/shellext/slayer/lang/nl-NL.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/nl-NL.rc rename to dll/shellext/slayer/lang/nl-NL.rc diff --git a/reactos/dll/shellext/slayer/lang/no-NO.rc b/dll/shellext/slayer/lang/no-NO.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/no-NO.rc rename to dll/shellext/slayer/lang/no-NO.rc diff --git a/reactos/dll/shellext/slayer/lang/pl-PL.rc b/dll/shellext/slayer/lang/pl-PL.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/pl-PL.rc rename to dll/shellext/slayer/lang/pl-PL.rc diff --git a/reactos/dll/shellext/slayer/lang/ru-RU.rc b/dll/shellext/slayer/lang/ru-RU.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/ru-RU.rc rename to dll/shellext/slayer/lang/ru-RU.rc diff --git a/reactos/dll/shellext/slayer/lang/sk-SK.rc b/dll/shellext/slayer/lang/sk-SK.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/sk-SK.rc rename to dll/shellext/slayer/lang/sk-SK.rc diff --git a/reactos/dll/shellext/slayer/lang/sv-SE.rc b/dll/shellext/slayer/lang/sv-SE.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/sv-SE.rc rename to dll/shellext/slayer/lang/sv-SE.rc diff --git a/reactos/dll/shellext/slayer/lang/uk-UA.rc b/dll/shellext/slayer/lang/uk-UA.rc similarity index 100% rename from reactos/dll/shellext/slayer/lang/uk-UA.rc rename to dll/shellext/slayer/lang/uk-UA.rc diff --git a/reactos/dll/shellext/slayer/precomp.h b/dll/shellext/slayer/precomp.h similarity index 100% rename from reactos/dll/shellext/slayer/precomp.h rename to dll/shellext/slayer/precomp.h diff --git a/reactos/dll/shellext/slayer/resource.h b/dll/shellext/slayer/resource.h similarity index 100% rename from reactos/dll/shellext/slayer/resource.h rename to dll/shellext/slayer/resource.h diff --git a/reactos/dll/shellext/slayer/rsrc.rc b/dll/shellext/slayer/rsrc.rc similarity index 100% rename from reactos/dll/shellext/slayer/rsrc.rc rename to dll/shellext/slayer/rsrc.rc diff --git a/reactos/dll/shellext/slayer/slayer.c b/dll/shellext/slayer/slayer.c similarity index 100% rename from reactos/dll/shellext/slayer/slayer.c rename to dll/shellext/slayer/slayer.c diff --git a/reactos/dll/shellext/slayer/slayer.def b/dll/shellext/slayer/slayer.def similarity index 100% rename from reactos/dll/shellext/slayer/slayer.def rename to dll/shellext/slayer/slayer.def diff --git a/reactos/dll/shellext/slayer/slayer.h b/dll/shellext/slayer/slayer.h similarity index 100% rename from reactos/dll/shellext/slayer/slayer.h rename to dll/shellext/slayer/slayer.h diff --git a/reactos/dll/shellext/slayer/slayer.rbuild b/dll/shellext/slayer/slayer.rbuild similarity index 100% rename from reactos/dll/shellext/slayer/slayer.rbuild rename to dll/shellext/slayer/slayer.rbuild diff --git a/reactos/dll/shellext/slayer/slayer.rc b/dll/shellext/slayer/slayer.rc similarity index 100% rename from reactos/dll/shellext/slayer/slayer.rc rename to dll/shellext/slayer/slayer.rc diff --git a/reactos/dll/win32/acledit/acledit.c b/dll/win32/acledit/acledit.c similarity index 100% rename from reactos/dll/win32/acledit/acledit.c rename to dll/win32/acledit/acledit.c diff --git a/reactos/dll/win32/acledit/acledit.rbuild b/dll/win32/acledit/acledit.rbuild similarity index 100% rename from reactos/dll/win32/acledit/acledit.rbuild rename to dll/win32/acledit/acledit.rbuild diff --git a/reactos/dll/win32/acledit/acledit.rc b/dll/win32/acledit/acledit.rc similarity index 100% rename from reactos/dll/win32/acledit/acledit.rc rename to dll/win32/acledit/acledit.rc diff --git a/reactos/dll/win32/acledit/acledit.spec b/dll/win32/acledit/acledit.spec similarity index 100% rename from reactos/dll/win32/acledit/acledit.spec rename to dll/win32/acledit/acledit.spec diff --git a/reactos/dll/win32/acledit/acleditint.h b/dll/win32/acledit/acleditint.h similarity index 100% rename from reactos/dll/win32/acledit/acleditint.h rename to dll/win32/acledit/acleditint.h diff --git a/reactos/dll/win32/acledit/resource.h b/dll/win32/acledit/resource.h similarity index 100% rename from reactos/dll/win32/acledit/resource.h rename to dll/win32/acledit/resource.h diff --git a/reactos/dll/win32/acledit/stubs.c b/dll/win32/acledit/stubs.c similarity index 100% rename from reactos/dll/win32/acledit/stubs.c rename to dll/win32/acledit/stubs.c diff --git a/reactos/dll/win32/aclui/aclui.c b/dll/win32/aclui/aclui.c similarity index 100% rename from reactos/dll/win32/aclui/aclui.c rename to dll/win32/aclui/aclui.c diff --git a/reactos/dll/win32/aclui/aclui.rbuild b/dll/win32/aclui/aclui.rbuild similarity index 100% rename from reactos/dll/win32/aclui/aclui.rbuild rename to dll/win32/aclui/aclui.rbuild diff --git a/reactos/dll/win32/aclui/aclui.rc b/dll/win32/aclui/aclui.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui.rc rename to dll/win32/aclui/aclui.rc diff --git a/reactos/dll/win32/aclui/aclui.spec b/dll/win32/aclui/aclui.spec similarity index 100% rename from reactos/dll/win32/aclui/aclui.spec rename to dll/win32/aclui/aclui.spec diff --git a/reactos/dll/win32/aclui/aclui_Bg.rc b/dll/win32/aclui/aclui_Bg.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Bg.rc rename to dll/win32/aclui/aclui_Bg.rc diff --git a/reactos/dll/win32/aclui/aclui_De.rc b/dll/win32/aclui/aclui_De.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_De.rc rename to dll/win32/aclui/aclui_De.rc diff --git a/reactos/dll/win32/aclui/aclui_El.rc b/dll/win32/aclui/aclui_El.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_El.rc rename to dll/win32/aclui/aclui_El.rc diff --git a/reactos/dll/win32/aclui/aclui_En.rc b/dll/win32/aclui/aclui_En.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_En.rc rename to dll/win32/aclui/aclui_En.rc diff --git a/reactos/dll/win32/aclui/aclui_Es.rc b/dll/win32/aclui/aclui_Es.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Es.rc rename to dll/win32/aclui/aclui_Es.rc diff --git a/reactos/dll/win32/aclui/aclui_Fr.rc b/dll/win32/aclui/aclui_Fr.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Fr.rc rename to dll/win32/aclui/aclui_Fr.rc diff --git a/reactos/dll/win32/aclui/aclui_Hu.rc b/dll/win32/aclui/aclui_Hu.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Hu.rc rename to dll/win32/aclui/aclui_Hu.rc diff --git a/reactos/dll/win32/aclui/aclui_Id.rc b/dll/win32/aclui/aclui_Id.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Id.rc rename to dll/win32/aclui/aclui_Id.rc diff --git a/reactos/dll/win32/aclui/aclui_It.rc b/dll/win32/aclui/aclui_It.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_It.rc rename to dll/win32/aclui/aclui_It.rc diff --git a/reactos/dll/win32/aclui/aclui_Ja.rc b/dll/win32/aclui/aclui_Ja.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Ja.rc rename to dll/win32/aclui/aclui_Ja.rc diff --git a/reactos/dll/win32/aclui/aclui_Nl.rc b/dll/win32/aclui/aclui_Nl.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Nl.rc rename to dll/win32/aclui/aclui_Nl.rc diff --git a/reactos/dll/win32/aclui/aclui_No.rc b/dll/win32/aclui/aclui_No.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_No.rc rename to dll/win32/aclui/aclui_No.rc diff --git a/reactos/dll/win32/aclui/aclui_Pl.rc b/dll/win32/aclui/aclui_Pl.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Pl.rc rename to dll/win32/aclui/aclui_Pl.rc diff --git a/reactos/dll/win32/aclui/aclui_Ru.rc b/dll/win32/aclui/aclui_Ru.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Ru.rc rename to dll/win32/aclui/aclui_Ru.rc diff --git a/reactos/dll/win32/aclui/aclui_Sv.rc b/dll/win32/aclui/aclui_Sv.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Sv.rc rename to dll/win32/aclui/aclui_Sv.rc diff --git a/reactos/dll/win32/aclui/aclui_Th.rc b/dll/win32/aclui/aclui_Th.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Th.rc rename to dll/win32/aclui/aclui_Th.rc diff --git a/reactos/dll/win32/aclui/aclui_Uk.rc b/dll/win32/aclui/aclui_Uk.rc similarity index 100% rename from reactos/dll/win32/aclui/aclui_Uk.rc rename to dll/win32/aclui/aclui_Uk.rc diff --git a/reactos/dll/win32/aclui/checklist.c b/dll/win32/aclui/checklist.c similarity index 100% rename from reactos/dll/win32/aclui/checklist.c rename to dll/win32/aclui/checklist.c diff --git a/reactos/dll/win32/aclui/guid.c b/dll/win32/aclui/guid.c similarity index 100% rename from reactos/dll/win32/aclui/guid.c rename to dll/win32/aclui/guid.c diff --git a/reactos/dll/win32/aclui/misc.c b/dll/win32/aclui/misc.c similarity index 100% rename from reactos/dll/win32/aclui/misc.c rename to dll/win32/aclui/misc.c diff --git a/reactos/dll/win32/aclui/precomp.h b/dll/win32/aclui/precomp.h similarity index 100% rename from reactos/dll/win32/aclui/precomp.h rename to dll/win32/aclui/precomp.h diff --git a/reactos/dll/win32/aclui/res/usrgrp.bmp b/dll/win32/aclui/res/usrgrp.bmp similarity index 100% rename from reactos/dll/win32/aclui/res/usrgrp.bmp rename to dll/win32/aclui/res/usrgrp.bmp diff --git a/reactos/dll/win32/aclui/resource.h b/dll/win32/aclui/resource.h similarity index 100% rename from reactos/dll/win32/aclui/resource.h rename to dll/win32/aclui/resource.h diff --git a/reactos/dll/win32/aclui/sidcache.c b/dll/win32/aclui/sidcache.c similarity index 100% rename from reactos/dll/win32/aclui/sidcache.c rename to dll/win32/aclui/sidcache.c diff --git a/reactos/dll/win32/advapi32/advapi32.def b/dll/win32/advapi32/advapi32.def similarity index 100% rename from reactos/dll/win32/advapi32/advapi32.def rename to dll/win32/advapi32/advapi32.def diff --git a/reactos/dll/win32/advapi32/advapi32.h b/dll/win32/advapi32/advapi32.h similarity index 100% rename from reactos/dll/win32/advapi32/advapi32.h rename to dll/win32/advapi32/advapi32.h diff --git a/reactos/dll/win32/advapi32/advapi32.rbuild b/dll/win32/advapi32/advapi32.rbuild similarity index 100% rename from reactos/dll/win32/advapi32/advapi32.rbuild rename to dll/win32/advapi32/advapi32.rbuild diff --git a/reactos/dll/win32/advapi32/advapi32.rc b/dll/win32/advapi32/advapi32.rc similarity index 100% rename from reactos/dll/win32/advapi32/advapi32.rc rename to dll/win32/advapi32/advapi32.rc diff --git a/reactos/dll/win32/advapi32/crypt/crypt.c b/dll/win32/advapi32/crypt/crypt.c similarity index 100% rename from reactos/dll/win32/advapi32/crypt/crypt.c rename to dll/win32/advapi32/crypt/crypt.c diff --git a/reactos/dll/win32/advapi32/crypt/crypt.h b/dll/win32/advapi32/crypt/crypt.h similarity index 100% rename from reactos/dll/win32/advapi32/crypt/crypt.h rename to dll/win32/advapi32/crypt/crypt.h diff --git a/reactos/dll/win32/advapi32/crypt/crypt_arc4.c b/dll/win32/advapi32/crypt/crypt_arc4.c similarity index 100% rename from reactos/dll/win32/advapi32/crypt/crypt_arc4.c rename to dll/win32/advapi32/crypt/crypt_arc4.c diff --git a/reactos/dll/win32/advapi32/crypt/crypt_des.c b/dll/win32/advapi32/crypt/crypt_des.c similarity index 100% rename from reactos/dll/win32/advapi32/crypt/crypt_des.c rename to dll/win32/advapi32/crypt/crypt_des.c diff --git a/reactos/dll/win32/advapi32/crypt/crypt_lmhash.c b/dll/win32/advapi32/crypt/crypt_lmhash.c similarity index 100% rename from reactos/dll/win32/advapi32/crypt/crypt_lmhash.c rename to dll/win32/advapi32/crypt/crypt_lmhash.c diff --git a/reactos/dll/win32/advapi32/crypt/crypt_md4.c b/dll/win32/advapi32/crypt/crypt_md4.c similarity index 100% rename from reactos/dll/win32/advapi32/crypt/crypt_md4.c rename to dll/win32/advapi32/crypt/crypt_md4.c diff --git a/reactos/dll/win32/advapi32/crypt/crypt_md5.c b/dll/win32/advapi32/crypt/crypt_md5.c similarity index 100% rename from reactos/dll/win32/advapi32/crypt/crypt_md5.c rename to dll/win32/advapi32/crypt/crypt_md5.c diff --git a/reactos/dll/win32/advapi32/crypt/crypt_sha.c b/dll/win32/advapi32/crypt/crypt_sha.c similarity index 100% rename from reactos/dll/win32/advapi32/crypt/crypt_sha.c rename to dll/win32/advapi32/crypt/crypt_sha.c diff --git a/reactos/dll/win32/advapi32/misc/dllmain.c b/dll/win32/advapi32/misc/dllmain.c similarity index 100% rename from reactos/dll/win32/advapi32/misc/dllmain.c rename to dll/win32/advapi32/misc/dllmain.c diff --git a/reactos/dll/win32/advapi32/misc/hwprofiles.c b/dll/win32/advapi32/misc/hwprofiles.c similarity index 100% rename from reactos/dll/win32/advapi32/misc/hwprofiles.c rename to dll/win32/advapi32/misc/hwprofiles.c diff --git a/reactos/dll/win32/advapi32/misc/logon.c b/dll/win32/advapi32/misc/logon.c similarity index 100% rename from reactos/dll/win32/advapi32/misc/logon.c rename to dll/win32/advapi32/misc/logon.c diff --git a/reactos/dll/win32/advapi32/misc/msi.c b/dll/win32/advapi32/misc/msi.c similarity index 100% rename from reactos/dll/win32/advapi32/misc/msi.c rename to dll/win32/advapi32/misc/msi.c diff --git a/reactos/dll/win32/advapi32/misc/shutdown.c b/dll/win32/advapi32/misc/shutdown.c similarity index 100% rename from reactos/dll/win32/advapi32/misc/shutdown.c rename to dll/win32/advapi32/misc/shutdown.c diff --git a/reactos/dll/win32/advapi32/misc/sysfunc.c b/dll/win32/advapi32/misc/sysfunc.c similarity index 100% rename from reactos/dll/win32/advapi32/misc/sysfunc.c rename to dll/win32/advapi32/misc/sysfunc.c diff --git a/reactos/dll/win32/advapi32/misc/trace.c b/dll/win32/advapi32/misc/trace.c similarity index 100% rename from reactos/dll/win32/advapi32/misc/trace.c rename to dll/win32/advapi32/misc/trace.c diff --git a/reactos/dll/win32/advapi32/reg/reg.c b/dll/win32/advapi32/reg/reg.c similarity index 100% rename from reactos/dll/win32/advapi32/reg/reg.c rename to dll/win32/advapi32/reg/reg.c diff --git a/reactos/dll/win32/advapi32/sec/ac.c b/dll/win32/advapi32/sec/ac.c similarity index 100% rename from reactos/dll/win32/advapi32/sec/ac.c rename to dll/win32/advapi32/sec/ac.c diff --git a/reactos/dll/win32/advapi32/sec/audit.c b/dll/win32/advapi32/sec/audit.c similarity index 100% rename from reactos/dll/win32/advapi32/sec/audit.c rename to dll/win32/advapi32/sec/audit.c diff --git a/reactos/dll/win32/advapi32/sec/cred.c b/dll/win32/advapi32/sec/cred.c similarity index 100% rename from reactos/dll/win32/advapi32/sec/cred.c rename to dll/win32/advapi32/sec/cred.c diff --git a/reactos/dll/win32/advapi32/sec/lsa.c b/dll/win32/advapi32/sec/lsa.c similarity index 100% rename from reactos/dll/win32/advapi32/sec/lsa.c rename to dll/win32/advapi32/sec/lsa.c diff --git a/reactos/dll/win32/advapi32/sec/misc.c b/dll/win32/advapi32/sec/misc.c similarity index 100% rename from reactos/dll/win32/advapi32/sec/misc.c rename to dll/win32/advapi32/sec/misc.c diff --git a/reactos/dll/win32/advapi32/sec/sec.c b/dll/win32/advapi32/sec/sec.c similarity index 100% rename from reactos/dll/win32/advapi32/sec/sec.c rename to dll/win32/advapi32/sec/sec.c diff --git a/reactos/dll/win32/advapi32/sec/sid.c b/dll/win32/advapi32/sec/sid.c similarity index 100% rename from reactos/dll/win32/advapi32/sec/sid.c rename to dll/win32/advapi32/sec/sid.c diff --git a/reactos/dll/win32/advapi32/sec/trustee.c b/dll/win32/advapi32/sec/trustee.c similarity index 100% rename from reactos/dll/win32/advapi32/sec/trustee.c rename to dll/win32/advapi32/sec/trustee.c diff --git a/reactos/dll/win32/advapi32/service/eventlog.c b/dll/win32/advapi32/service/eventlog.c similarity index 100% rename from reactos/dll/win32/advapi32/service/eventlog.c rename to dll/win32/advapi32/service/eventlog.c diff --git a/reactos/dll/win32/advapi32/service/rpc.c b/dll/win32/advapi32/service/rpc.c similarity index 100% rename from reactos/dll/win32/advapi32/service/rpc.c rename to dll/win32/advapi32/service/rpc.c diff --git a/reactos/dll/win32/advapi32/service/scm.c b/dll/win32/advapi32/service/scm.c similarity index 100% rename from reactos/dll/win32/advapi32/service/scm.c rename to dll/win32/advapi32/service/scm.c diff --git a/reactos/dll/win32/advapi32/service/sctrl.c b/dll/win32/advapi32/service/sctrl.c similarity index 100% rename from reactos/dll/win32/advapi32/service/sctrl.c rename to dll/win32/advapi32/service/sctrl.c diff --git a/reactos/dll/win32/advapi32/token/privilege.c b/dll/win32/advapi32/token/privilege.c similarity index 100% rename from reactos/dll/win32/advapi32/token/privilege.c rename to dll/win32/advapi32/token/privilege.c diff --git a/reactos/dll/win32/advapi32/token/token.c b/dll/win32/advapi32/token/token.c similarity index 100% rename from reactos/dll/win32/advapi32/token/token.c rename to dll/win32/advapi32/token/token.c diff --git a/reactos/dll/win32/advpack/advpack.c b/dll/win32/advpack/advpack.c similarity index 100% rename from reactos/dll/win32/advpack/advpack.c rename to dll/win32/advpack/advpack.c diff --git a/reactos/dll/win32/advpack/advpack.rbuild b/dll/win32/advpack/advpack.rbuild similarity index 100% rename from reactos/dll/win32/advpack/advpack.rbuild rename to dll/win32/advpack/advpack.rbuild diff --git a/reactos/dll/win32/advpack/advpack.spec b/dll/win32/advpack/advpack.spec similarity index 100% rename from reactos/dll/win32/advpack/advpack.spec rename to dll/win32/advpack/advpack.spec diff --git a/reactos/dll/win32/advpack/advpack_private.h b/dll/win32/advpack/advpack_private.h similarity index 100% rename from reactos/dll/win32/advpack/advpack_private.h rename to dll/win32/advpack/advpack_private.h diff --git a/reactos/dll/win32/advpack/files.c b/dll/win32/advpack/files.c similarity index 100% rename from reactos/dll/win32/advpack/files.c rename to dll/win32/advpack/files.c diff --git a/reactos/dll/win32/advpack/install.c b/dll/win32/advpack/install.c similarity index 100% rename from reactos/dll/win32/advpack/install.c rename to dll/win32/advpack/install.c diff --git a/reactos/dll/win32/advpack/reg.c b/dll/win32/advpack/reg.c similarity index 100% rename from reactos/dll/win32/advpack/reg.c rename to dll/win32/advpack/reg.c diff --git a/reactos/dll/win32/atl/atl.rbuild b/dll/win32/atl/atl.rbuild similarity index 100% rename from reactos/dll/win32/atl/atl.rbuild rename to dll/win32/atl/atl.rbuild diff --git a/reactos/dll/win32/atl/atl.rgs b/dll/win32/atl/atl.rgs similarity index 100% rename from reactos/dll/win32/atl/atl.rgs rename to dll/win32/atl/atl.rgs diff --git a/reactos/dll/win32/atl/atl.spec b/dll/win32/atl/atl.spec similarity index 100% rename from reactos/dll/win32/atl/atl.spec rename to dll/win32/atl/atl.spec diff --git a/reactos/dll/win32/atl/atl_ax.c b/dll/win32/atl/atl_ax.c similarity index 100% rename from reactos/dll/win32/atl/atl_ax.c rename to dll/win32/atl/atl_ax.c diff --git a/reactos/dll/win32/atl/atl_main.c b/dll/win32/atl/atl_main.c similarity index 100% rename from reactos/dll/win32/atl/atl_main.c rename to dll/win32/atl/atl_main.c diff --git a/reactos/dll/win32/atl/atlbase.h b/dll/win32/atl/atlbase.h similarity index 100% rename from reactos/dll/win32/atl/atlbase.h rename to dll/win32/atl/atlbase.h diff --git a/reactos/dll/win32/atl/atliface.idl b/dll/win32/atl/atliface.idl similarity index 100% rename from reactos/dll/win32/atl/atliface.idl rename to dll/win32/atl/atliface.idl diff --git a/reactos/dll/win32/atl/atlwin.h b/dll/win32/atl/atlwin.h similarity index 100% rename from reactos/dll/win32/atl/atlwin.h rename to dll/win32/atl/atlwin.h diff --git a/reactos/dll/win32/atl/registrar.c b/dll/win32/atl/registrar.c similarity index 100% rename from reactos/dll/win32/atl/registrar.c rename to dll/win32/atl/registrar.c diff --git a/reactos/dll/win32/atl/rsrc.rc b/dll/win32/atl/rsrc.rc similarity index 100% rename from reactos/dll/win32/atl/rsrc.rc rename to dll/win32/atl/rsrc.rc diff --git a/reactos/dll/win32/authz/authz.c b/dll/win32/authz/authz.c similarity index 100% rename from reactos/dll/win32/authz/authz.c rename to dll/win32/authz/authz.c diff --git a/reactos/dll/win32/authz/authz.def b/dll/win32/authz/authz.def similarity index 100% rename from reactos/dll/win32/authz/authz.def rename to dll/win32/authz/authz.def diff --git a/reactos/dll/win32/authz/authz.rbuild b/dll/win32/authz/authz.rbuild similarity index 100% rename from reactos/dll/win32/authz/authz.rbuild rename to dll/win32/authz/authz.rbuild diff --git a/reactos/dll/win32/authz/authz.rc b/dll/win32/authz/authz.rc similarity index 100% rename from reactos/dll/win32/authz/authz.rc rename to dll/win32/authz/authz.rc diff --git a/reactos/dll/win32/authz/clictx.c b/dll/win32/authz/clictx.c similarity index 100% rename from reactos/dll/win32/authz/clictx.c rename to dll/win32/authz/clictx.c diff --git a/reactos/dll/win32/authz/precomp.h b/dll/win32/authz/precomp.h similarity index 100% rename from reactos/dll/win32/authz/precomp.h rename to dll/win32/authz/precomp.h diff --git a/reactos/dll/win32/authz/resman.c b/dll/win32/authz/resman.c similarity index 100% rename from reactos/dll/win32/authz/resman.c rename to dll/win32/authz/resman.c diff --git a/reactos/dll/win32/avifil32/acmstream.c b/dll/win32/avifil32/acmstream.c similarity index 100% rename from reactos/dll/win32/avifil32/acmstream.c rename to dll/win32/avifil32/acmstream.c diff --git a/reactos/dll/win32/avifil32/api.c b/dll/win32/avifil32/api.c similarity index 100% rename from reactos/dll/win32/avifil32/api.c rename to dll/win32/avifil32/api.c diff --git a/reactos/dll/win32/avifil32/avifil32.rbuild b/dll/win32/avifil32/avifil32.rbuild similarity index 100% rename from reactos/dll/win32/avifil32/avifil32.rbuild rename to dll/win32/avifil32/avifil32.rbuild diff --git a/reactos/dll/win32/avifil32/avifil32.spec b/dll/win32/avifil32/avifil32.spec similarity index 100% rename from reactos/dll/win32/avifil32/avifil32.spec rename to dll/win32/avifil32/avifil32.spec diff --git a/reactos/dll/win32/avifil32/avifil32_ros.diff b/dll/win32/avifil32/avifil32_ros.diff similarity index 100% rename from reactos/dll/win32/avifil32/avifil32_ros.diff rename to dll/win32/avifil32/avifil32_ros.diff diff --git a/reactos/dll/win32/avifil32/avifile.c b/dll/win32/avifil32/avifile.c similarity index 100% rename from reactos/dll/win32/avifil32/avifile.c rename to dll/win32/avifil32/avifile.c diff --git a/reactos/dll/win32/avifil32/avifile.spec b/dll/win32/avifil32/avifile.spec similarity index 100% rename from reactos/dll/win32/avifil32/avifile.spec rename to dll/win32/avifil32/avifile.spec diff --git a/reactos/dll/win32/avifil32/avifile_Cs.rc b/dll/win32/avifil32/avifile_Cs.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Cs.rc rename to dll/win32/avifil32/avifile_Cs.rc diff --git a/reactos/dll/win32/avifil32/avifile_Da.rc b/dll/win32/avifil32/avifile_Da.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Da.rc rename to dll/win32/avifil32/avifile_Da.rc diff --git a/reactos/dll/win32/avifil32/avifile_De.rc b/dll/win32/avifil32/avifile_De.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_De.rc rename to dll/win32/avifil32/avifile_De.rc diff --git a/reactos/dll/win32/avifil32/avifile_En.rc b/dll/win32/avifil32/avifile_En.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_En.rc rename to dll/win32/avifil32/avifile_En.rc diff --git a/reactos/dll/win32/avifil32/avifile_Es.rc b/dll/win32/avifil32/avifile_Es.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Es.rc rename to dll/win32/avifil32/avifile_Es.rc diff --git a/reactos/dll/win32/avifil32/avifile_Fr.rc b/dll/win32/avifil32/avifile_Fr.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Fr.rc rename to dll/win32/avifil32/avifile_Fr.rc diff --git a/reactos/dll/win32/avifil32/avifile_Hu.rc b/dll/win32/avifil32/avifile_Hu.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Hu.rc rename to dll/win32/avifil32/avifile_Hu.rc diff --git a/reactos/dll/win32/avifil32/avifile_It.rc b/dll/win32/avifil32/avifile_It.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_It.rc rename to dll/win32/avifil32/avifile_It.rc diff --git a/reactos/dll/win32/avifil32/avifile_Ja.rc b/dll/win32/avifil32/avifile_Ja.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Ja.rc rename to dll/win32/avifil32/avifile_Ja.rc diff --git a/reactos/dll/win32/avifil32/avifile_Ko.rc b/dll/win32/avifil32/avifile_Ko.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Ko.rc rename to dll/win32/avifil32/avifile_Ko.rc diff --git a/reactos/dll/win32/avifil32/avifile_Nl.rc b/dll/win32/avifil32/avifile_Nl.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Nl.rc rename to dll/win32/avifil32/avifile_Nl.rc diff --git a/reactos/dll/win32/avifil32/avifile_No.rc b/dll/win32/avifil32/avifile_No.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_No.rc rename to dll/win32/avifil32/avifile_No.rc diff --git a/reactos/dll/win32/avifil32/avifile_Pl.rc b/dll/win32/avifil32/avifile_Pl.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Pl.rc rename to dll/win32/avifil32/avifile_Pl.rc diff --git a/reactos/dll/win32/avifil32/avifile_Pt.rc b/dll/win32/avifil32/avifile_Pt.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Pt.rc rename to dll/win32/avifil32/avifile_Pt.rc diff --git a/reactos/dll/win32/avifil32/avifile_Ru.rc b/dll/win32/avifil32/avifile_Ru.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Ru.rc rename to dll/win32/avifil32/avifile_Ru.rc diff --git a/reactos/dll/win32/avifil32/avifile_Si.rc b/dll/win32/avifil32/avifile_Si.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Si.rc rename to dll/win32/avifil32/avifile_Si.rc diff --git a/reactos/dll/win32/avifil32/avifile_Sv.rc b/dll/win32/avifil32/avifile_Sv.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Sv.rc rename to dll/win32/avifil32/avifile_Sv.rc diff --git a/reactos/dll/win32/avifil32/avifile_Tr.rc b/dll/win32/avifil32/avifile_Tr.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Tr.rc rename to dll/win32/avifil32/avifile_Tr.rc diff --git a/reactos/dll/win32/avifil32/avifile_Uk.rc b/dll/win32/avifil32/avifile_Uk.rc similarity index 100% rename from reactos/dll/win32/avifil32/avifile_Uk.rc rename to dll/win32/avifil32/avifile_Uk.rc diff --git a/reactos/dll/win32/avifil32/avifile_private.h b/dll/win32/avifil32/avifile_private.h similarity index 100% rename from reactos/dll/win32/avifil32/avifile_private.h rename to dll/win32/avifil32/avifile_private.h diff --git a/reactos/dll/win32/avifil32/editstream.c b/dll/win32/avifil32/editstream.c similarity index 100% rename from reactos/dll/win32/avifil32/editstream.c rename to dll/win32/avifil32/editstream.c diff --git a/reactos/dll/win32/avifil32/extrachunk.c b/dll/win32/avifil32/extrachunk.c similarity index 100% rename from reactos/dll/win32/avifil32/extrachunk.c rename to dll/win32/avifil32/extrachunk.c diff --git a/reactos/dll/win32/avifil32/extrachunk.h b/dll/win32/avifil32/extrachunk.h similarity index 100% rename from reactos/dll/win32/avifil32/extrachunk.h rename to dll/win32/avifil32/extrachunk.h diff --git a/reactos/dll/win32/avifil32/factory.c b/dll/win32/avifil32/factory.c similarity index 100% rename from reactos/dll/win32/avifil32/factory.c rename to dll/win32/avifil32/factory.c diff --git a/reactos/dll/win32/avifil32/getframe.c b/dll/win32/avifil32/getframe.c similarity index 100% rename from reactos/dll/win32/avifil32/getframe.c rename to dll/win32/avifil32/getframe.c diff --git a/reactos/dll/win32/avifil32/icmstream.c b/dll/win32/avifil32/icmstream.c similarity index 100% rename from reactos/dll/win32/avifil32/icmstream.c rename to dll/win32/avifil32/icmstream.c diff --git a/reactos/dll/win32/avifil32/regsvr.c b/dll/win32/avifil32/regsvr.c similarity index 100% rename from reactos/dll/win32/avifil32/regsvr.c rename to dll/win32/avifil32/regsvr.c diff --git a/reactos/dll/win32/avifil32/rsrc.rc b/dll/win32/avifil32/rsrc.rc similarity index 100% rename from reactos/dll/win32/avifil32/rsrc.rc rename to dll/win32/avifil32/rsrc.rc diff --git a/reactos/dll/win32/avifil32/tmpfile.c b/dll/win32/avifil32/tmpfile.c similarity index 100% rename from reactos/dll/win32/avifil32/tmpfile.c rename to dll/win32/avifil32/tmpfile.c diff --git a/reactos/dll/win32/avifil32/wavfile.c b/dll/win32/avifil32/wavfile.c similarity index 100% rename from reactos/dll/win32/avifil32/wavfile.c rename to dll/win32/avifil32/wavfile.c diff --git a/reactos/dll/win32/beepmidi/beepmidi.c b/dll/win32/beepmidi/beepmidi.c similarity index 100% rename from reactos/dll/win32/beepmidi/beepmidi.c rename to dll/win32/beepmidi/beepmidi.c diff --git a/reactos/dll/win32/beepmidi/beepmidi.def b/dll/win32/beepmidi/beepmidi.def similarity index 100% rename from reactos/dll/win32/beepmidi/beepmidi.def rename to dll/win32/beepmidi/beepmidi.def diff --git a/reactos/dll/win32/beepmidi/beepmidi.rbuild b/dll/win32/beepmidi/beepmidi.rbuild similarity index 100% rename from reactos/dll/win32/beepmidi/beepmidi.rbuild rename to dll/win32/beepmidi/beepmidi.rbuild diff --git a/reactos/dll/win32/beepmidi/readme.txt b/dll/win32/beepmidi/readme.txt similarity index 100% rename from reactos/dll/win32/beepmidi/readme.txt rename to dll/win32/beepmidi/readme.txt diff --git a/reactos/dll/win32/browseui/aclmulti.c b/dll/win32/browseui/aclmulti.c similarity index 100% rename from reactos/dll/win32/browseui/aclmulti.c rename to dll/win32/browseui/aclmulti.c diff --git a/reactos/dll/win32/browseui/bandsite.c b/dll/win32/browseui/bandsite.c similarity index 100% rename from reactos/dll/win32/browseui/bandsite.c rename to dll/win32/browseui/bandsite.c diff --git a/reactos/dll/win32/browseui/bandsitemenu.c b/dll/win32/browseui/bandsitemenu.c similarity index 100% rename from reactos/dll/win32/browseui/bandsitemenu.c rename to dll/win32/browseui/bandsitemenu.c diff --git a/reactos/dll/win32/browseui/browseui.h b/dll/win32/browseui/browseui.h similarity index 100% rename from reactos/dll/win32/browseui/browseui.h rename to dll/win32/browseui/browseui.h diff --git a/reactos/dll/win32/browseui/browseui.rbuild b/dll/win32/browseui/browseui.rbuild similarity index 100% rename from reactos/dll/win32/browseui/browseui.rbuild rename to dll/win32/browseui/browseui.rbuild diff --git a/reactos/dll/win32/browseui/browseui.spec b/dll/win32/browseui/browseui.spec similarity index 100% rename from reactos/dll/win32/browseui/browseui.spec rename to dll/win32/browseui/browseui.spec diff --git a/reactos/dll/win32/browseui/browseui_main.c b/dll/win32/browseui/browseui_main.c similarity index 100% rename from reactos/dll/win32/browseui/browseui_main.c rename to dll/win32/browseui/browseui_main.c diff --git a/reactos/dll/win32/browseui/browseui_ros.diff b/dll/win32/browseui/browseui_ros.diff similarity index 100% rename from reactos/dll/win32/browseui/browseui_ros.diff rename to dll/win32/browseui/browseui_ros.diff diff --git a/reactos/dll/win32/browseui/regsvr.c b/dll/win32/browseui/regsvr.c similarity index 100% rename from reactos/dll/win32/browseui/regsvr.c rename to dll/win32/browseui/regsvr.c diff --git a/reactos/dll/win32/browseui/version.rc b/dll/win32/browseui/version.rc similarity index 100% rename from reactos/dll/win32/browseui/version.rc rename to dll/win32/browseui/version.rc diff --git a/reactos/dll/win32/cabinet/cabinet.h b/dll/win32/cabinet/cabinet.h similarity index 100% rename from reactos/dll/win32/cabinet/cabinet.h rename to dll/win32/cabinet/cabinet.h diff --git a/reactos/dll/win32/cabinet/cabinet.rbuild b/dll/win32/cabinet/cabinet.rbuild similarity index 100% rename from reactos/dll/win32/cabinet/cabinet.rbuild rename to dll/win32/cabinet/cabinet.rbuild diff --git a/reactos/dll/win32/cabinet/cabinet.rc b/dll/win32/cabinet/cabinet.rc similarity index 100% rename from reactos/dll/win32/cabinet/cabinet.rc rename to dll/win32/cabinet/cabinet.rc diff --git a/reactos/dll/win32/cabinet/cabinet.spec b/dll/win32/cabinet/cabinet.spec similarity index 100% rename from reactos/dll/win32/cabinet/cabinet.spec rename to dll/win32/cabinet/cabinet.spec diff --git a/reactos/dll/win32/cabinet/cabinet_main.c b/dll/win32/cabinet/cabinet_main.c similarity index 100% rename from reactos/dll/win32/cabinet/cabinet_main.c rename to dll/win32/cabinet/cabinet_main.c diff --git a/reactos/dll/win32/cabinet/fci.c b/dll/win32/cabinet/fci.c similarity index 100% rename from reactos/dll/win32/cabinet/fci.c rename to dll/win32/cabinet/fci.c diff --git a/reactos/dll/win32/cabinet/fdi.c b/dll/win32/cabinet/fdi.c similarity index 100% rename from reactos/dll/win32/cabinet/fdi.c rename to dll/win32/cabinet/fdi.c diff --git a/reactos/dll/win32/cards/cards.c b/dll/win32/cards/cards.c similarity index 100% rename from reactos/dll/win32/cards/cards.c rename to dll/win32/cards/cards.c diff --git a/reactos/dll/win32/cards/cards.h b/dll/win32/cards/cards.h similarity index 100% rename from reactos/dll/win32/cards/cards.h rename to dll/win32/cards/cards.h diff --git a/reactos/dll/win32/cards/cards.rbuild b/dll/win32/cards/cards.rbuild similarity index 100% rename from reactos/dll/win32/cards/cards.rbuild rename to dll/win32/cards/cards.rbuild diff --git a/reactos/dll/win32/cards/cards.rc b/dll/win32/cards/cards.rc similarity index 100% rename from reactos/dll/win32/cards/cards.rc rename to dll/win32/cards/cards.rc diff --git a/reactos/dll/win32/cards/cards.spec b/dll/win32/cards/cards.spec similarity index 100% rename from reactos/dll/win32/cards/cards.spec rename to dll/win32/cards/cards.spec diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel10.bmp b/dll/win32/cards/res/bavarian/Eichel10.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel10.bmp rename to dll/win32/cards/res/bavarian/Eichel10.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel2.bmp b/dll/win32/cards/res/bavarian/Eichel2.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel2.bmp rename to dll/win32/cards/res/bavarian/Eichel2.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel3.bmp b/dll/win32/cards/res/bavarian/Eichel3.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel3.bmp rename to dll/win32/cards/res/bavarian/Eichel3.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel4.bmp b/dll/win32/cards/res/bavarian/Eichel4.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel4.bmp rename to dll/win32/cards/res/bavarian/Eichel4.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel5.bmp b/dll/win32/cards/res/bavarian/Eichel5.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel5.bmp rename to dll/win32/cards/res/bavarian/Eichel5.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel6.bmp b/dll/win32/cards/res/bavarian/Eichel6.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel6.bmp rename to dll/win32/cards/res/bavarian/Eichel6.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel7.bmp b/dll/win32/cards/res/bavarian/Eichel7.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel7.bmp rename to dll/win32/cards/res/bavarian/Eichel7.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel8.bmp b/dll/win32/cards/res/bavarian/Eichel8.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel8.bmp rename to dll/win32/cards/res/bavarian/Eichel8.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Eichel9.bmp b/dll/win32/cards/res/bavarian/Eichel9.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Eichel9.bmp rename to dll/win32/cards/res/bavarian/Eichel9.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/EichelAs.bmp b/dll/win32/cards/res/bavarian/EichelAs.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/EichelAs.bmp rename to dll/win32/cards/res/bavarian/EichelAs.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/EichelKoenig.bmp b/dll/win32/cards/res/bavarian/EichelKoenig.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/EichelKoenig.bmp rename to dll/win32/cards/res/bavarian/EichelKoenig.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/EichelOber.bmp b/dll/win32/cards/res/bavarian/EichelOber.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/EichelOber.bmp rename to dll/win32/cards/res/bavarian/EichelOber.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/EichelUnter.bmp b/dll/win32/cards/res/bavarian/EichelUnter.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/EichelUnter.bmp rename to dll/win32/cards/res/bavarian/EichelUnter.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/FreeCard.bmp b/dll/win32/cards/res/bavarian/FreeCard.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/FreeCard.bmp rename to dll/win32/cards/res/bavarian/FreeCard.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras10.bmp b/dll/win32/cards/res/bavarian/Gras10.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras10.bmp rename to dll/win32/cards/res/bavarian/Gras10.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras2.bmp b/dll/win32/cards/res/bavarian/Gras2.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras2.bmp rename to dll/win32/cards/res/bavarian/Gras2.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras3.bmp b/dll/win32/cards/res/bavarian/Gras3.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras3.bmp rename to dll/win32/cards/res/bavarian/Gras3.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras4.bmp b/dll/win32/cards/res/bavarian/Gras4.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras4.bmp rename to dll/win32/cards/res/bavarian/Gras4.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras5.bmp b/dll/win32/cards/res/bavarian/Gras5.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras5.bmp rename to dll/win32/cards/res/bavarian/Gras5.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras6.bmp b/dll/win32/cards/res/bavarian/Gras6.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras6.bmp rename to dll/win32/cards/res/bavarian/Gras6.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras7.bmp b/dll/win32/cards/res/bavarian/Gras7.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras7.bmp rename to dll/win32/cards/res/bavarian/Gras7.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras8.bmp b/dll/win32/cards/res/bavarian/Gras8.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras8.bmp rename to dll/win32/cards/res/bavarian/Gras8.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Gras9.bmp b/dll/win32/cards/res/bavarian/Gras9.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Gras9.bmp rename to dll/win32/cards/res/bavarian/Gras9.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/GrasAs.bmp b/dll/win32/cards/res/bavarian/GrasAs.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/GrasAs.bmp rename to dll/win32/cards/res/bavarian/GrasAs.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/GrasKoenig.bmp b/dll/win32/cards/res/bavarian/GrasKoenig.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/GrasKoenig.bmp rename to dll/win32/cards/res/bavarian/GrasKoenig.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/GrasOber.bmp b/dll/win32/cards/res/bavarian/GrasOber.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/GrasOber.bmp rename to dll/win32/cards/res/bavarian/GrasOber.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/GrasUnter.bmp b/dll/win32/cards/res/bavarian/GrasUnter.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/GrasUnter.bmp rename to dll/win32/cards/res/bavarian/GrasUnter.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz10.bmp b/dll/win32/cards/res/bavarian/Herz10.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz10.bmp rename to dll/win32/cards/res/bavarian/Herz10.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz2.bmp b/dll/win32/cards/res/bavarian/Herz2.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz2.bmp rename to dll/win32/cards/res/bavarian/Herz2.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz3.bmp b/dll/win32/cards/res/bavarian/Herz3.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz3.bmp rename to dll/win32/cards/res/bavarian/Herz3.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz4.bmp b/dll/win32/cards/res/bavarian/Herz4.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz4.bmp rename to dll/win32/cards/res/bavarian/Herz4.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz5.bmp b/dll/win32/cards/res/bavarian/Herz5.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz5.bmp rename to dll/win32/cards/res/bavarian/Herz5.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz6.bmp b/dll/win32/cards/res/bavarian/Herz6.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz6.bmp rename to dll/win32/cards/res/bavarian/Herz6.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz7.bmp b/dll/win32/cards/res/bavarian/Herz7.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz7.bmp rename to dll/win32/cards/res/bavarian/Herz7.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz8.bmp b/dll/win32/cards/res/bavarian/Herz8.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz8.bmp rename to dll/win32/cards/res/bavarian/Herz8.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Herz9.bmp b/dll/win32/cards/res/bavarian/Herz9.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Herz9.bmp rename to dll/win32/cards/res/bavarian/Herz9.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/HerzAs.bmp b/dll/win32/cards/res/bavarian/HerzAs.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/HerzAs.bmp rename to dll/win32/cards/res/bavarian/HerzAs.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/HerzKoenig.bmp b/dll/win32/cards/res/bavarian/HerzKoenig.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/HerzKoenig.bmp rename to dll/win32/cards/res/bavarian/HerzKoenig.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/HerzOber.bmp b/dll/win32/cards/res/bavarian/HerzOber.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/HerzOber.bmp rename to dll/win32/cards/res/bavarian/HerzOber.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/HerzUnter.bmp b/dll/win32/cards/res/bavarian/HerzUnter.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/HerzUnter.bmp rename to dll/win32/cards/res/bavarian/HerzUnter.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Joker.bmp b/dll/win32/cards/res/bavarian/Joker.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Joker.bmp rename to dll/win32/cards/res/bavarian/Joker.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/OSign.bmp b/dll/win32/cards/res/bavarian/OSign.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/OSign.bmp rename to dll/win32/cards/res/bavarian/OSign.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Ruecken.bmp b/dll/win32/cards/res/bavarian/Ruecken.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Ruecken.bmp rename to dll/win32/cards/res/bavarian/Ruecken.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen10.bmp b/dll/win32/cards/res/bavarian/Schellen10.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen10.bmp rename to dll/win32/cards/res/bavarian/Schellen10.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen2.bmp b/dll/win32/cards/res/bavarian/Schellen2.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen2.bmp rename to dll/win32/cards/res/bavarian/Schellen2.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen3.bmp b/dll/win32/cards/res/bavarian/Schellen3.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen3.bmp rename to dll/win32/cards/res/bavarian/Schellen3.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen4.bmp b/dll/win32/cards/res/bavarian/Schellen4.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen4.bmp rename to dll/win32/cards/res/bavarian/Schellen4.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen5.bmp b/dll/win32/cards/res/bavarian/Schellen5.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen5.bmp rename to dll/win32/cards/res/bavarian/Schellen5.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen6.bmp b/dll/win32/cards/res/bavarian/Schellen6.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen6.bmp rename to dll/win32/cards/res/bavarian/Schellen6.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen7.bmp b/dll/win32/cards/res/bavarian/Schellen7.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen7.bmp rename to dll/win32/cards/res/bavarian/Schellen7.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen8.bmp b/dll/win32/cards/res/bavarian/Schellen8.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen8.bmp rename to dll/win32/cards/res/bavarian/Schellen8.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/Schellen9.bmp b/dll/win32/cards/res/bavarian/Schellen9.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/Schellen9.bmp rename to dll/win32/cards/res/bavarian/Schellen9.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/SchellenAs.bmp b/dll/win32/cards/res/bavarian/SchellenAs.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/SchellenAs.bmp rename to dll/win32/cards/res/bavarian/SchellenAs.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/SchellenKoenig.bmp b/dll/win32/cards/res/bavarian/SchellenKoenig.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/SchellenKoenig.bmp rename to dll/win32/cards/res/bavarian/SchellenKoenig.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/SchellenOber.bmp b/dll/win32/cards/res/bavarian/SchellenOber.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/SchellenOber.bmp rename to dll/win32/cards/res/bavarian/SchellenOber.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/SchellenUnter.bmp b/dll/win32/cards/res/bavarian/SchellenUnter.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/SchellenUnter.bmp rename to dll/win32/cards/res/bavarian/SchellenUnter.bmp diff --git a/reactos/dll/win32/cards/res/bavarian/XSign.bmp b/dll/win32/cards/res/bavarian/XSign.bmp similarity index 100% rename from reactos/dll/win32/cards/res/bavarian/XSign.bmp rename to dll/win32/cards/res/bavarian/XSign.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_1.bmp b/dll/win32/cards/res/default/Background_1.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_1.bmp rename to dll/win32/cards/res/default/Background_1.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_10.bmp b/dll/win32/cards/res/default/Background_10.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_10.bmp rename to dll/win32/cards/res/default/Background_10.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_11.bmp b/dll/win32/cards/res/default/Background_11.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_11.bmp rename to dll/win32/cards/res/default/Background_11.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_12.bmp b/dll/win32/cards/res/default/Background_12.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_12.bmp rename to dll/win32/cards/res/default/Background_12.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_2.bmp b/dll/win32/cards/res/default/Background_2.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_2.bmp rename to dll/win32/cards/res/default/Background_2.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_3.bmp b/dll/win32/cards/res/default/Background_3.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_3.bmp rename to dll/win32/cards/res/default/Background_3.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_4.bmp b/dll/win32/cards/res/default/Background_4.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_4.bmp rename to dll/win32/cards/res/default/Background_4.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_5.bmp b/dll/win32/cards/res/default/Background_5.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_5.bmp rename to dll/win32/cards/res/default/Background_5.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_6.bmp b/dll/win32/cards/res/default/Background_6.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_6.bmp rename to dll/win32/cards/res/default/Background_6.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_7.bmp b/dll/win32/cards/res/default/Background_7.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_7.bmp rename to dll/win32/cards/res/default/Background_7.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_8.bmp b/dll/win32/cards/res/default/Background_8.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_8.bmp rename to dll/win32/cards/res/default/Background_8.bmp diff --git a/reactos/dll/win32/cards/res/default/Background_9.bmp b/dll/win32/cards/res/default/Background_9.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Background_9.bmp rename to dll/win32/cards/res/default/Background_9.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Ace.bmp b/dll/win32/cards/res/default/Clubs_Ace.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Ace.bmp rename to dll/win32/cards/res/default/Clubs_Ace.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Eight.bmp b/dll/win32/cards/res/default/Clubs_Eight.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Eight.bmp rename to dll/win32/cards/res/default/Clubs_Eight.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Five.bmp b/dll/win32/cards/res/default/Clubs_Five.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Five.bmp rename to dll/win32/cards/res/default/Clubs_Five.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Four.bmp b/dll/win32/cards/res/default/Clubs_Four.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Four.bmp rename to dll/win32/cards/res/default/Clubs_Four.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Jack.bmp b/dll/win32/cards/res/default/Clubs_Jack.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Jack.bmp rename to dll/win32/cards/res/default/Clubs_Jack.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_King.bmp b/dll/win32/cards/res/default/Clubs_King.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_King.bmp rename to dll/win32/cards/res/default/Clubs_King.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Nine.bmp b/dll/win32/cards/res/default/Clubs_Nine.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Nine.bmp rename to dll/win32/cards/res/default/Clubs_Nine.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Queen.bmp b/dll/win32/cards/res/default/Clubs_Queen.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Queen.bmp rename to dll/win32/cards/res/default/Clubs_Queen.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Seven.bmp b/dll/win32/cards/res/default/Clubs_Seven.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Seven.bmp rename to dll/win32/cards/res/default/Clubs_Seven.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Six.bmp b/dll/win32/cards/res/default/Clubs_Six.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Six.bmp rename to dll/win32/cards/res/default/Clubs_Six.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Ten.bmp b/dll/win32/cards/res/default/Clubs_Ten.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Ten.bmp rename to dll/win32/cards/res/default/Clubs_Ten.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Three.bmp b/dll/win32/cards/res/default/Clubs_Three.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Three.bmp rename to dll/win32/cards/res/default/Clubs_Three.bmp diff --git a/reactos/dll/win32/cards/res/default/Clubs_Two.bmp b/dll/win32/cards/res/default/Clubs_Two.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Clubs_Two.bmp rename to dll/win32/cards/res/default/Clubs_Two.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Ace.bmp b/dll/win32/cards/res/default/Diamonds_Ace.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Ace.bmp rename to dll/win32/cards/res/default/Diamonds_Ace.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Eight.bmp b/dll/win32/cards/res/default/Diamonds_Eight.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Eight.bmp rename to dll/win32/cards/res/default/Diamonds_Eight.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Five.bmp b/dll/win32/cards/res/default/Diamonds_Five.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Five.bmp rename to dll/win32/cards/res/default/Diamonds_Five.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Four.bmp b/dll/win32/cards/res/default/Diamonds_Four.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Four.bmp rename to dll/win32/cards/res/default/Diamonds_Four.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Jack.bmp b/dll/win32/cards/res/default/Diamonds_Jack.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Jack.bmp rename to dll/win32/cards/res/default/Diamonds_Jack.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_King.bmp b/dll/win32/cards/res/default/Diamonds_King.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_King.bmp rename to dll/win32/cards/res/default/Diamonds_King.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Nine.bmp b/dll/win32/cards/res/default/Diamonds_Nine.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Nine.bmp rename to dll/win32/cards/res/default/Diamonds_Nine.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Queen.bmp b/dll/win32/cards/res/default/Diamonds_Queen.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Queen.bmp rename to dll/win32/cards/res/default/Diamonds_Queen.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Seven.bmp b/dll/win32/cards/res/default/Diamonds_Seven.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Seven.bmp rename to dll/win32/cards/res/default/Diamonds_Seven.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Six.bmp b/dll/win32/cards/res/default/Diamonds_Six.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Six.bmp rename to dll/win32/cards/res/default/Diamonds_Six.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Ten.bmp b/dll/win32/cards/res/default/Diamonds_Ten.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Ten.bmp rename to dll/win32/cards/res/default/Diamonds_Ten.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Three.bmp b/dll/win32/cards/res/default/Diamonds_Three.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Three.bmp rename to dll/win32/cards/res/default/Diamonds_Three.bmp diff --git a/reactos/dll/win32/cards/res/default/Diamonds_Two.bmp b/dll/win32/cards/res/default/Diamonds_Two.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Diamonds_Two.bmp rename to dll/win32/cards/res/default/Diamonds_Two.bmp diff --git a/reactos/dll/win32/cards/res/default/FreeCard.bmp b/dll/win32/cards/res/default/FreeCard.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/FreeCard.bmp rename to dll/win32/cards/res/default/FreeCard.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Ace.bmp b/dll/win32/cards/res/default/Hearts_Ace.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Ace.bmp rename to dll/win32/cards/res/default/Hearts_Ace.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Eight.bmp b/dll/win32/cards/res/default/Hearts_Eight.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Eight.bmp rename to dll/win32/cards/res/default/Hearts_Eight.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Five.bmp b/dll/win32/cards/res/default/Hearts_Five.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Five.bmp rename to dll/win32/cards/res/default/Hearts_Five.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Four.bmp b/dll/win32/cards/res/default/Hearts_Four.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Four.bmp rename to dll/win32/cards/res/default/Hearts_Four.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Jack.bmp b/dll/win32/cards/res/default/Hearts_Jack.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Jack.bmp rename to dll/win32/cards/res/default/Hearts_Jack.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_King.bmp b/dll/win32/cards/res/default/Hearts_King.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_King.bmp rename to dll/win32/cards/res/default/Hearts_King.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Nine.bmp b/dll/win32/cards/res/default/Hearts_Nine.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Nine.bmp rename to dll/win32/cards/res/default/Hearts_Nine.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Queen.bmp b/dll/win32/cards/res/default/Hearts_Queen.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Queen.bmp rename to dll/win32/cards/res/default/Hearts_Queen.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Seven.bmp b/dll/win32/cards/res/default/Hearts_Seven.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Seven.bmp rename to dll/win32/cards/res/default/Hearts_Seven.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Six.bmp b/dll/win32/cards/res/default/Hearts_Six.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Six.bmp rename to dll/win32/cards/res/default/Hearts_Six.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Ten.bmp b/dll/win32/cards/res/default/Hearts_Ten.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Ten.bmp rename to dll/win32/cards/res/default/Hearts_Ten.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Three.bmp b/dll/win32/cards/res/default/Hearts_Three.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Three.bmp rename to dll/win32/cards/res/default/Hearts_Three.bmp diff --git a/reactos/dll/win32/cards/res/default/Hearts_Two.bmp b/dll/win32/cards/res/default/Hearts_Two.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Hearts_Two.bmp rename to dll/win32/cards/res/default/Hearts_Two.bmp diff --git a/reactos/dll/win32/cards/res/default/Joker.bmp b/dll/win32/cards/res/default/Joker.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Joker.bmp rename to dll/win32/cards/res/default/Joker.bmp diff --git a/reactos/dll/win32/cards/res/default/OSign.bmp b/dll/win32/cards/res/default/OSign.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/OSign.bmp rename to dll/win32/cards/res/default/OSign.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Ace.bmp b/dll/win32/cards/res/default/Spades_Ace.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Ace.bmp rename to dll/win32/cards/res/default/Spades_Ace.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Eight.bmp b/dll/win32/cards/res/default/Spades_Eight.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Eight.bmp rename to dll/win32/cards/res/default/Spades_Eight.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Five.bmp b/dll/win32/cards/res/default/Spades_Five.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Five.bmp rename to dll/win32/cards/res/default/Spades_Five.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Four.bmp b/dll/win32/cards/res/default/Spades_Four.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Four.bmp rename to dll/win32/cards/res/default/Spades_Four.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Jack.bmp b/dll/win32/cards/res/default/Spades_Jack.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Jack.bmp rename to dll/win32/cards/res/default/Spades_Jack.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_King.bmp b/dll/win32/cards/res/default/Spades_King.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_King.bmp rename to dll/win32/cards/res/default/Spades_King.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Nine.bmp b/dll/win32/cards/res/default/Spades_Nine.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Nine.bmp rename to dll/win32/cards/res/default/Spades_Nine.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Queen.bmp b/dll/win32/cards/res/default/Spades_Queen.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Queen.bmp rename to dll/win32/cards/res/default/Spades_Queen.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Seven.bmp b/dll/win32/cards/res/default/Spades_Seven.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Seven.bmp rename to dll/win32/cards/res/default/Spades_Seven.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Six.bmp b/dll/win32/cards/res/default/Spades_Six.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Six.bmp rename to dll/win32/cards/res/default/Spades_Six.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Ten.bmp b/dll/win32/cards/res/default/Spades_Ten.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Ten.bmp rename to dll/win32/cards/res/default/Spades_Ten.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Three.bmp b/dll/win32/cards/res/default/Spades_Three.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Three.bmp rename to dll/win32/cards/res/default/Spades_Three.bmp diff --git a/reactos/dll/win32/cards/res/default/Spades_Two.bmp b/dll/win32/cards/res/default/Spades_Two.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/Spades_Two.bmp rename to dll/win32/cards/res/default/Spades_Two.bmp diff --git a/reactos/dll/win32/cards/res/default/XSign.bmp b/dll/win32/cards/res/default/XSign.bmp similarity index 100% rename from reactos/dll/win32/cards/res/default/XSign.bmp rename to dll/win32/cards/res/default/XSign.bmp diff --git a/reactos/dll/win32/cfgmgr32/cfgmgr32.def b/dll/win32/cfgmgr32/cfgmgr32.def similarity index 100% rename from reactos/dll/win32/cfgmgr32/cfgmgr32.def rename to dll/win32/cfgmgr32/cfgmgr32.def diff --git a/reactos/dll/win32/cfgmgr32/cfgmgr32.rbuild b/dll/win32/cfgmgr32/cfgmgr32.rbuild similarity index 100% rename from reactos/dll/win32/cfgmgr32/cfgmgr32.rbuild rename to dll/win32/cfgmgr32/cfgmgr32.rbuild diff --git a/reactos/dll/win32/cfgmgr32/cfgmgr32.rc b/dll/win32/cfgmgr32/cfgmgr32.rc similarity index 100% rename from reactos/dll/win32/cfgmgr32/cfgmgr32.rc rename to dll/win32/cfgmgr32/cfgmgr32.rc diff --git a/reactos/dll/win32/clusapi/clusapi.c b/dll/win32/clusapi/clusapi.c similarity index 100% rename from reactos/dll/win32/clusapi/clusapi.c rename to dll/win32/clusapi/clusapi.c diff --git a/reactos/dll/win32/clusapi/clusapi.rbuild b/dll/win32/clusapi/clusapi.rbuild similarity index 100% rename from reactos/dll/win32/clusapi/clusapi.rbuild rename to dll/win32/clusapi/clusapi.rbuild diff --git a/reactos/dll/win32/clusapi/clusapi.spec b/dll/win32/clusapi/clusapi.spec similarity index 100% rename from reactos/dll/win32/clusapi/clusapi.spec rename to dll/win32/clusapi/clusapi.spec diff --git a/reactos/dll/win32/comcat/comcat.rbuild b/dll/win32/comcat/comcat.rbuild similarity index 100% rename from reactos/dll/win32/comcat/comcat.rbuild rename to dll/win32/comcat/comcat.rbuild diff --git a/reactos/dll/win32/comcat/comcat.spec b/dll/win32/comcat/comcat.spec similarity index 100% rename from reactos/dll/win32/comcat/comcat.spec rename to dll/win32/comcat/comcat.spec diff --git a/reactos/dll/win32/comcat/comcat_main.c b/dll/win32/comcat/comcat_main.c similarity index 100% rename from reactos/dll/win32/comcat/comcat_main.c rename to dll/win32/comcat/comcat_main.c diff --git a/reactos/dll/win32/comcat/comcat_private.h b/dll/win32/comcat/comcat_private.h similarity index 100% rename from reactos/dll/win32/comcat/comcat_private.h rename to dll/win32/comcat/comcat_private.h diff --git a/reactos/dll/win32/comcat/factory.c b/dll/win32/comcat/factory.c similarity index 100% rename from reactos/dll/win32/comcat/factory.c rename to dll/win32/comcat/factory.c diff --git a/reactos/dll/win32/comcat/information.c b/dll/win32/comcat/information.c similarity index 100% rename from reactos/dll/win32/comcat/information.c rename to dll/win32/comcat/information.c diff --git a/reactos/dll/win32/comcat/manager.c b/dll/win32/comcat/manager.c similarity index 100% rename from reactos/dll/win32/comcat/manager.c rename to dll/win32/comcat/manager.c diff --git a/reactos/dll/win32/comcat/register.c b/dll/win32/comcat/register.c similarity index 100% rename from reactos/dll/win32/comcat/register.c rename to dll/win32/comcat/register.c diff --git a/reactos/dll/win32/comcat/regsvr.c b/dll/win32/comcat/regsvr.c similarity index 100% rename from reactos/dll/win32/comcat/regsvr.c rename to dll/win32/comcat/regsvr.c diff --git a/reactos/dll/win32/comcat/version.rc b/dll/win32/comcat/version.rc similarity index 100% rename from reactos/dll/win32/comcat/version.rc rename to dll/win32/comcat/version.rc diff --git a/reactos/dll/win32/comctl32/animate.c b/dll/win32/comctl32/animate.c similarity index 100% rename from reactos/dll/win32/comctl32/animate.c rename to dll/win32/comctl32/animate.c diff --git a/reactos/dll/win32/comctl32/comboex.c b/dll/win32/comctl32/comboex.c similarity index 100% rename from reactos/dll/win32/comctl32/comboex.c rename to dll/win32/comctl32/comboex.c diff --git a/reactos/dll/win32/comctl32/comctl32.h b/dll/win32/comctl32/comctl32.h similarity index 100% rename from reactos/dll/win32/comctl32/comctl32.h rename to dll/win32/comctl32/comctl32.h diff --git a/reactos/dll/win32/comctl32/comctl32.rbuild b/dll/win32/comctl32/comctl32.rbuild similarity index 100% rename from reactos/dll/win32/comctl32/comctl32.rbuild rename to dll/win32/comctl32/comctl32.rbuild diff --git a/reactos/dll/win32/comctl32/comctl32.spec b/dll/win32/comctl32/comctl32.spec similarity index 100% rename from reactos/dll/win32/comctl32/comctl32.spec rename to dll/win32/comctl32/comctl32.spec diff --git a/reactos/dll/win32/comctl32/comctl32_ros.diff b/dll/win32/comctl32/comctl32_ros.diff similarity index 100% rename from reactos/dll/win32/comctl32/comctl32_ros.diff rename to dll/win32/comctl32/comctl32_ros.diff diff --git a/reactos/dll/win32/comctl32/comctl32undoc.c b/dll/win32/comctl32/comctl32undoc.c similarity index 100% rename from reactos/dll/win32/comctl32/comctl32undoc.c rename to dll/win32/comctl32/comctl32undoc.c diff --git a/reactos/dll/win32/comctl32/comctl_Bg.rc b/dll/win32/comctl32/comctl_Bg.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Bg.rc rename to dll/win32/comctl32/comctl_Bg.rc diff --git a/reactos/dll/win32/comctl32/comctl_Cn.rc b/dll/win32/comctl32/comctl_Cn.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Cn.rc rename to dll/win32/comctl32/comctl_Cn.rc diff --git a/reactos/dll/win32/comctl32/comctl_Cs.rc b/dll/win32/comctl32/comctl_Cs.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Cs.rc rename to dll/win32/comctl32/comctl_Cs.rc diff --git a/reactos/dll/win32/comctl32/comctl_De.rc b/dll/win32/comctl32/comctl_De.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_De.rc rename to dll/win32/comctl32/comctl_De.rc diff --git a/reactos/dll/win32/comctl32/comctl_El.rc b/dll/win32/comctl32/comctl_El.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_El.rc rename to dll/win32/comctl32/comctl_El.rc diff --git a/reactos/dll/win32/comctl32/comctl_En.rc b/dll/win32/comctl32/comctl_En.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_En.rc rename to dll/win32/comctl32/comctl_En.rc diff --git a/reactos/dll/win32/comctl32/comctl_Eo.rc b/dll/win32/comctl32/comctl_Eo.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Eo.rc rename to dll/win32/comctl32/comctl_Eo.rc diff --git a/reactos/dll/win32/comctl32/comctl_Es.rc b/dll/win32/comctl32/comctl_Es.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Es.rc rename to dll/win32/comctl32/comctl_Es.rc diff --git a/reactos/dll/win32/comctl32/comctl_Fr.rc b/dll/win32/comctl32/comctl_Fr.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Fr.rc rename to dll/win32/comctl32/comctl_Fr.rc diff --git a/reactos/dll/win32/comctl32/comctl_Hu.rc b/dll/win32/comctl32/comctl_Hu.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Hu.rc rename to dll/win32/comctl32/comctl_Hu.rc diff --git a/reactos/dll/win32/comctl32/comctl_It.rc b/dll/win32/comctl32/comctl_It.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_It.rc rename to dll/win32/comctl32/comctl_It.rc diff --git a/reactos/dll/win32/comctl32/comctl_Ja.rc b/dll/win32/comctl32/comctl_Ja.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Ja.rc rename to dll/win32/comctl32/comctl_Ja.rc diff --git a/reactos/dll/win32/comctl32/comctl_Ko.rc b/dll/win32/comctl32/comctl_Ko.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Ko.rc rename to dll/win32/comctl32/comctl_Ko.rc diff --git a/reactos/dll/win32/comctl32/comctl_Nl.rc b/dll/win32/comctl32/comctl_Nl.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Nl.rc rename to dll/win32/comctl32/comctl_Nl.rc diff --git a/reactos/dll/win32/comctl32/comctl_No.rc b/dll/win32/comctl32/comctl_No.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_No.rc rename to dll/win32/comctl32/comctl_No.rc diff --git a/reactos/dll/win32/comctl32/comctl_Pl.rc b/dll/win32/comctl32/comctl_Pl.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Pl.rc rename to dll/win32/comctl32/comctl_Pl.rc diff --git a/reactos/dll/win32/comctl32/comctl_Pt.rc b/dll/win32/comctl32/comctl_Pt.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Pt.rc rename to dll/win32/comctl32/comctl_Pt.rc diff --git a/reactos/dll/win32/comctl32/comctl_Ro.rc b/dll/win32/comctl32/comctl_Ro.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Ro.rc rename to dll/win32/comctl32/comctl_Ro.rc diff --git a/reactos/dll/win32/comctl32/comctl_Ru.rc b/dll/win32/comctl32/comctl_Ru.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Ru.rc rename to dll/win32/comctl32/comctl_Ru.rc diff --git a/reactos/dll/win32/comctl32/comctl_Si.rc b/dll/win32/comctl32/comctl_Si.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Si.rc rename to dll/win32/comctl32/comctl_Si.rc diff --git a/reactos/dll/win32/comctl32/comctl_Sv.rc b/dll/win32/comctl32/comctl_Sv.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Sv.rc rename to dll/win32/comctl32/comctl_Sv.rc diff --git a/reactos/dll/win32/comctl32/comctl_Th.rc b/dll/win32/comctl32/comctl_Th.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Th.rc rename to dll/win32/comctl32/comctl_Th.rc diff --git a/reactos/dll/win32/comctl32/comctl_Tr.rc b/dll/win32/comctl32/comctl_Tr.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Tr.rc rename to dll/win32/comctl32/comctl_Tr.rc diff --git a/reactos/dll/win32/comctl32/comctl_Uk.rc b/dll/win32/comctl32/comctl_Uk.rc similarity index 100% rename from reactos/dll/win32/comctl32/comctl_Uk.rc rename to dll/win32/comctl32/comctl_Uk.rc diff --git a/reactos/dll/win32/comctl32/commctrl.c b/dll/win32/comctl32/commctrl.c similarity index 100% rename from reactos/dll/win32/comctl32/commctrl.c rename to dll/win32/comctl32/commctrl.c diff --git a/reactos/dll/win32/comctl32/datetime.c b/dll/win32/comctl32/datetime.c similarity index 100% rename from reactos/dll/win32/comctl32/datetime.c rename to dll/win32/comctl32/datetime.c diff --git a/reactos/dll/win32/comctl32/dpa.c b/dll/win32/comctl32/dpa.c similarity index 100% rename from reactos/dll/win32/comctl32/dpa.c rename to dll/win32/comctl32/dpa.c diff --git a/reactos/dll/win32/comctl32/draglist.c b/dll/win32/comctl32/draglist.c similarity index 100% rename from reactos/dll/win32/comctl32/draglist.c rename to dll/win32/comctl32/draglist.c diff --git a/reactos/dll/win32/comctl32/dsa.c b/dll/win32/comctl32/dsa.c similarity index 100% rename from reactos/dll/win32/comctl32/dsa.c rename to dll/win32/comctl32/dsa.c diff --git a/reactos/dll/win32/comctl32/flatsb.c b/dll/win32/comctl32/flatsb.c similarity index 100% rename from reactos/dll/win32/comctl32/flatsb.c rename to dll/win32/comctl32/flatsb.c diff --git a/reactos/dll/win32/comctl32/header.c b/dll/win32/comctl32/header.c similarity index 100% rename from reactos/dll/win32/comctl32/header.c rename to dll/win32/comctl32/header.c diff --git a/reactos/dll/win32/comctl32/hotkey.c b/dll/win32/comctl32/hotkey.c similarity index 100% rename from reactos/dll/win32/comctl32/hotkey.c rename to dll/win32/comctl32/hotkey.c diff --git a/reactos/dll/win32/comctl32/idb_hist_large.bmp b/dll/win32/comctl32/idb_hist_large.bmp similarity index 100% rename from reactos/dll/win32/comctl32/idb_hist_large.bmp rename to dll/win32/comctl32/idb_hist_large.bmp diff --git a/reactos/dll/win32/comctl32/idb_hist_small.bmp b/dll/win32/comctl32/idb_hist_small.bmp similarity index 100% rename from reactos/dll/win32/comctl32/idb_hist_small.bmp rename to dll/win32/comctl32/idb_hist_small.bmp diff --git a/reactos/dll/win32/comctl32/idb_std_large.bmp b/dll/win32/comctl32/idb_std_large.bmp similarity index 100% rename from reactos/dll/win32/comctl32/idb_std_large.bmp rename to dll/win32/comctl32/idb_std_large.bmp diff --git a/reactos/dll/win32/comctl32/idb_std_small.bmp b/dll/win32/comctl32/idb_std_small.bmp similarity index 100% rename from reactos/dll/win32/comctl32/idb_std_small.bmp rename to dll/win32/comctl32/idb_std_small.bmp diff --git a/reactos/dll/win32/comctl32/idb_view_large.bmp b/dll/win32/comctl32/idb_view_large.bmp similarity index 100% rename from reactos/dll/win32/comctl32/idb_view_large.bmp rename to dll/win32/comctl32/idb_view_large.bmp diff --git a/reactos/dll/win32/comctl32/idb_view_small.bmp b/dll/win32/comctl32/idb_view_small.bmp similarity index 100% rename from reactos/dll/win32/comctl32/idb_view_small.bmp rename to dll/win32/comctl32/idb_view_small.bmp diff --git a/reactos/dll/win32/comctl32/idc_copy.cur b/dll/win32/comctl32/idc_copy.cur similarity index 100% rename from reactos/dll/win32/comctl32/idc_copy.cur rename to dll/win32/comctl32/idc_copy.cur diff --git a/reactos/dll/win32/comctl32/idc_divider.cur b/dll/win32/comctl32/idc_divider.cur similarity index 100% rename from reactos/dll/win32/comctl32/idc_divider.cur rename to dll/win32/comctl32/idc_divider.cur diff --git a/reactos/dll/win32/comctl32/idc_divideropen.cur b/dll/win32/comctl32/idc_divideropen.cur similarity index 100% rename from reactos/dll/win32/comctl32/idc_divideropen.cur rename to dll/win32/comctl32/idc_divideropen.cur diff --git a/reactos/dll/win32/comctl32/idc_movebutton.cur b/dll/win32/comctl32/idc_movebutton.cur similarity index 100% rename from reactos/dll/win32/comctl32/idc_movebutton.cur rename to dll/win32/comctl32/idc_movebutton.cur diff --git a/reactos/dll/win32/comctl32/idi_dragarrow.ico b/dll/win32/comctl32/idi_dragarrow.ico similarity index 100% rename from reactos/dll/win32/comctl32/idi_dragarrow.ico rename to dll/win32/comctl32/idi_dragarrow.ico diff --git a/reactos/dll/win32/comctl32/idi_tt_error_sm.ico b/dll/win32/comctl32/idi_tt_error_sm.ico similarity index 100% rename from reactos/dll/win32/comctl32/idi_tt_error_sm.ico rename to dll/win32/comctl32/idi_tt_error_sm.ico diff --git a/reactos/dll/win32/comctl32/idi_tt_info_sm.ico b/dll/win32/comctl32/idi_tt_info_sm.ico similarity index 100% rename from reactos/dll/win32/comctl32/idi_tt_info_sm.ico rename to dll/win32/comctl32/idi_tt_info_sm.ico diff --git a/reactos/dll/win32/comctl32/idi_tt_warn_sm.ico b/dll/win32/comctl32/idi_tt_warn_sm.ico similarity index 100% rename from reactos/dll/win32/comctl32/idi_tt_warn_sm.ico rename to dll/win32/comctl32/idi_tt_warn_sm.ico diff --git a/reactos/dll/win32/comctl32/idt_check.bmp b/dll/win32/comctl32/idt_check.bmp similarity index 100% rename from reactos/dll/win32/comctl32/idt_check.bmp rename to dll/win32/comctl32/idt_check.bmp diff --git a/reactos/dll/win32/comctl32/imagelist.c b/dll/win32/comctl32/imagelist.c similarity index 100% rename from reactos/dll/win32/comctl32/imagelist.c rename to dll/win32/comctl32/imagelist.c diff --git a/reactos/dll/win32/comctl32/imagelist.h b/dll/win32/comctl32/imagelist.h similarity index 100% rename from reactos/dll/win32/comctl32/imagelist.h rename to dll/win32/comctl32/imagelist.h diff --git a/reactos/dll/win32/comctl32/ipaddress.c b/dll/win32/comctl32/ipaddress.c similarity index 100% rename from reactos/dll/win32/comctl32/ipaddress.c rename to dll/win32/comctl32/ipaddress.c diff --git a/reactos/dll/win32/comctl32/listview.c b/dll/win32/comctl32/listview.c similarity index 100% rename from reactos/dll/win32/comctl32/listview.c rename to dll/win32/comctl32/listview.c diff --git a/reactos/dll/win32/comctl32/monthcal.c b/dll/win32/comctl32/monthcal.c similarity index 100% rename from reactos/dll/win32/comctl32/monthcal.c rename to dll/win32/comctl32/monthcal.c diff --git a/reactos/dll/win32/comctl32/nativefont.c b/dll/win32/comctl32/nativefont.c similarity index 100% rename from reactos/dll/win32/comctl32/nativefont.c rename to dll/win32/comctl32/nativefont.c diff --git a/reactos/dll/win32/comctl32/pager.c b/dll/win32/comctl32/pager.c similarity index 100% rename from reactos/dll/win32/comctl32/pager.c rename to dll/win32/comctl32/pager.c diff --git a/reactos/dll/win32/comctl32/progress.c b/dll/win32/comctl32/progress.c similarity index 100% rename from reactos/dll/win32/comctl32/progress.c rename to dll/win32/comctl32/progress.c diff --git a/reactos/dll/win32/comctl32/propsheet.c b/dll/win32/comctl32/propsheet.c similarity index 100% rename from reactos/dll/win32/comctl32/propsheet.c rename to dll/win32/comctl32/propsheet.c diff --git a/reactos/dll/win32/comctl32/rebar.c b/dll/win32/comctl32/rebar.c similarity index 100% rename from reactos/dll/win32/comctl32/rebar.c rename to dll/win32/comctl32/rebar.c diff --git a/reactos/dll/win32/comctl32/rsrc.rc b/dll/win32/comctl32/rsrc.rc similarity index 100% rename from reactos/dll/win32/comctl32/rsrc.rc rename to dll/win32/comctl32/rsrc.rc diff --git a/reactos/dll/win32/comctl32/smoothscroll.c b/dll/win32/comctl32/smoothscroll.c similarity index 100% rename from reactos/dll/win32/comctl32/smoothscroll.c rename to dll/win32/comctl32/smoothscroll.c diff --git a/reactos/dll/win32/comctl32/status.c b/dll/win32/comctl32/status.c similarity index 100% rename from reactos/dll/win32/comctl32/status.c rename to dll/win32/comctl32/status.c diff --git a/reactos/dll/win32/comctl32/string.c b/dll/win32/comctl32/string.c similarity index 100% rename from reactos/dll/win32/comctl32/string.c rename to dll/win32/comctl32/string.c diff --git a/reactos/dll/win32/comctl32/syslink.c b/dll/win32/comctl32/syslink.c similarity index 100% rename from reactos/dll/win32/comctl32/syslink.c rename to dll/win32/comctl32/syslink.c diff --git a/reactos/dll/win32/comctl32/tab.c b/dll/win32/comctl32/tab.c similarity index 100% rename from reactos/dll/win32/comctl32/tab.c rename to dll/win32/comctl32/tab.c diff --git a/reactos/dll/win32/comctl32/theme_combo.c b/dll/win32/comctl32/theme_combo.c similarity index 100% rename from reactos/dll/win32/comctl32/theme_combo.c rename to dll/win32/comctl32/theme_combo.c diff --git a/reactos/dll/win32/comctl32/theme_dialog.c b/dll/win32/comctl32/theme_dialog.c similarity index 100% rename from reactos/dll/win32/comctl32/theme_dialog.c rename to dll/win32/comctl32/theme_dialog.c diff --git a/reactos/dll/win32/comctl32/theme_edit.c b/dll/win32/comctl32/theme_edit.c similarity index 100% rename from reactos/dll/win32/comctl32/theme_edit.c rename to dll/win32/comctl32/theme_edit.c diff --git a/reactos/dll/win32/comctl32/theme_listbox.c b/dll/win32/comctl32/theme_listbox.c similarity index 100% rename from reactos/dll/win32/comctl32/theme_listbox.c rename to dll/win32/comctl32/theme_listbox.c diff --git a/reactos/dll/win32/comctl32/theming.c b/dll/win32/comctl32/theming.c similarity index 100% rename from reactos/dll/win32/comctl32/theming.c rename to dll/win32/comctl32/theming.c diff --git a/reactos/dll/win32/comctl32/toolbar.c b/dll/win32/comctl32/toolbar.c similarity index 100% rename from reactos/dll/win32/comctl32/toolbar.c rename to dll/win32/comctl32/toolbar.c diff --git a/reactos/dll/win32/comctl32/tooltips.c b/dll/win32/comctl32/tooltips.c similarity index 100% rename from reactos/dll/win32/comctl32/tooltips.c rename to dll/win32/comctl32/tooltips.c diff --git a/reactos/dll/win32/comctl32/trackbar.c b/dll/win32/comctl32/trackbar.c similarity index 100% rename from reactos/dll/win32/comctl32/trackbar.c rename to dll/win32/comctl32/trackbar.c diff --git a/reactos/dll/win32/comctl32/treeview.c b/dll/win32/comctl32/treeview.c similarity index 100% rename from reactos/dll/win32/comctl32/treeview.c rename to dll/win32/comctl32/treeview.c diff --git a/reactos/dll/win32/comctl32/updown.c b/dll/win32/comctl32/updown.c similarity index 100% rename from reactos/dll/win32/comctl32/updown.c rename to dll/win32/comctl32/updown.c diff --git a/reactos/dll/win32/comdlg32/800.bmp b/dll/win32/comdlg32/800.bmp similarity index 100% rename from reactos/dll/win32/comdlg32/800.bmp rename to dll/win32/comdlg32/800.bmp diff --git a/reactos/dll/win32/comdlg32/cdlg.h b/dll/win32/comdlg32/cdlg.h similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg.h rename to dll/win32/comdlg32/cdlg.h diff --git a/reactos/dll/win32/comdlg32/cdlg16.h b/dll/win32/comdlg32/cdlg16.h similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg16.h rename to dll/win32/comdlg32/cdlg16.h diff --git a/reactos/dll/win32/comdlg32/cdlg32.c b/dll/win32/comdlg32/cdlg32.c similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg32.c rename to dll/win32/comdlg32/cdlg32.c diff --git a/reactos/dll/win32/comdlg32/cdlg_Bg.rc b/dll/win32/comdlg32/cdlg_Bg.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Bg.rc rename to dll/win32/comdlg32/cdlg_Bg.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Ca.rc b/dll/win32/comdlg32/cdlg_Ca.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Ca.rc rename to dll/win32/comdlg32/cdlg_Ca.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Cn.rc b/dll/win32/comdlg32/cdlg_Cn.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Cn.rc rename to dll/win32/comdlg32/cdlg_Cn.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Cs.rc b/dll/win32/comdlg32/cdlg_Cs.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Cs.rc rename to dll/win32/comdlg32/cdlg_Cs.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Da.rc b/dll/win32/comdlg32/cdlg_Da.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Da.rc rename to dll/win32/comdlg32/cdlg_Da.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_De.rc b/dll/win32/comdlg32/cdlg_De.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_De.rc rename to dll/win32/comdlg32/cdlg_De.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_El.rc b/dll/win32/comdlg32/cdlg_El.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_El.rc rename to dll/win32/comdlg32/cdlg_El.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_En.rc b/dll/win32/comdlg32/cdlg_En.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_En.rc rename to dll/win32/comdlg32/cdlg_En.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Eo.rc b/dll/win32/comdlg32/cdlg_Eo.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Eo.rc rename to dll/win32/comdlg32/cdlg_Eo.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Es.rc b/dll/win32/comdlg32/cdlg_Es.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Es.rc rename to dll/win32/comdlg32/cdlg_Es.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Fi.rc b/dll/win32/comdlg32/cdlg_Fi.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Fi.rc rename to dll/win32/comdlg32/cdlg_Fi.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Fr.rc b/dll/win32/comdlg32/cdlg_Fr.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Fr.rc rename to dll/win32/comdlg32/cdlg_Fr.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Hu.rc b/dll/win32/comdlg32/cdlg_Hu.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Hu.rc rename to dll/win32/comdlg32/cdlg_Hu.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_It.rc b/dll/win32/comdlg32/cdlg_It.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_It.rc rename to dll/win32/comdlg32/cdlg_It.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Ja.rc b/dll/win32/comdlg32/cdlg_Ja.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Ja.rc rename to dll/win32/comdlg32/cdlg_Ja.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Ko.rc b/dll/win32/comdlg32/cdlg_Ko.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Ko.rc rename to dll/win32/comdlg32/cdlg_Ko.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Nl.rc b/dll/win32/comdlg32/cdlg_Nl.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Nl.rc rename to dll/win32/comdlg32/cdlg_Nl.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_No.rc b/dll/win32/comdlg32/cdlg_No.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_No.rc rename to dll/win32/comdlg32/cdlg_No.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Pl.rc b/dll/win32/comdlg32/cdlg_Pl.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Pl.rc rename to dll/win32/comdlg32/cdlg_Pl.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Pt.rc b/dll/win32/comdlg32/cdlg_Pt.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Pt.rc rename to dll/win32/comdlg32/cdlg_Pt.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Ro.rc b/dll/win32/comdlg32/cdlg_Ro.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Ro.rc rename to dll/win32/comdlg32/cdlg_Ro.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Ru.rc b/dll/win32/comdlg32/cdlg_Ru.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Ru.rc rename to dll/win32/comdlg32/cdlg_Ru.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Si.rc b/dll/win32/comdlg32/cdlg_Si.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Si.rc rename to dll/win32/comdlg32/cdlg_Si.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Sk.rc b/dll/win32/comdlg32/cdlg_Sk.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Sk.rc rename to dll/win32/comdlg32/cdlg_Sk.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Sv.rc b/dll/win32/comdlg32/cdlg_Sv.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Sv.rc rename to dll/win32/comdlg32/cdlg_Sv.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Th.rc b/dll/win32/comdlg32/cdlg_Th.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Th.rc rename to dll/win32/comdlg32/cdlg_Th.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Tr.rc b/dll/win32/comdlg32/cdlg_Tr.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Tr.rc rename to dll/win32/comdlg32/cdlg_Tr.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Uk.rc b/dll/win32/comdlg32/cdlg_Uk.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Uk.rc rename to dll/win32/comdlg32/cdlg_Uk.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Wa.rc b/dll/win32/comdlg32/cdlg_Wa.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Wa.rc rename to dll/win32/comdlg32/cdlg_Wa.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_Zh.rc b/dll/win32/comdlg32/cdlg_Zh.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_Zh.rc rename to dll/win32/comdlg32/cdlg_Zh.rc diff --git a/reactos/dll/win32/comdlg32/cdlg_xx.rc b/dll/win32/comdlg32/cdlg_xx.rc similarity index 100% rename from reactos/dll/win32/comdlg32/cdlg_xx.rc rename to dll/win32/comdlg32/cdlg_xx.rc diff --git a/reactos/dll/win32/comdlg32/cdrom.ico b/dll/win32/comdlg32/cdrom.ico similarity index 100% rename from reactos/dll/win32/comdlg32/cdrom.ico rename to dll/win32/comdlg32/cdrom.ico diff --git a/reactos/dll/win32/comdlg32/colordlg.c b/dll/win32/comdlg32/colordlg.c similarity index 100% rename from reactos/dll/win32/comdlg32/colordlg.c rename to dll/win32/comdlg32/colordlg.c diff --git a/reactos/dll/win32/comdlg32/colordlg16.c b/dll/win32/comdlg32/colordlg16.c similarity index 100% rename from reactos/dll/win32/comdlg32/colordlg16.c rename to dll/win32/comdlg32/colordlg16.c diff --git a/reactos/dll/win32/comdlg32/comdlg32.rbuild b/dll/win32/comdlg32/comdlg32.rbuild similarity index 100% rename from reactos/dll/win32/comdlg32/comdlg32.rbuild rename to dll/win32/comdlg32/comdlg32.rbuild diff --git a/reactos/dll/win32/comdlg32/comdlg32.spec b/dll/win32/comdlg32/comdlg32.spec similarity index 100% rename from reactos/dll/win32/comdlg32/comdlg32.spec rename to dll/win32/comdlg32/comdlg32.spec diff --git a/reactos/dll/win32/comdlg32/commdlg.spec b/dll/win32/comdlg32/commdlg.spec similarity index 100% rename from reactos/dll/win32/comdlg32/commdlg.spec rename to dll/win32/comdlg32/commdlg.spec diff --git a/reactos/dll/win32/comdlg32/filedlg.c b/dll/win32/comdlg32/filedlg.c similarity index 100% rename from reactos/dll/win32/comdlg32/filedlg.c rename to dll/win32/comdlg32/filedlg.c diff --git a/reactos/dll/win32/comdlg32/filedlg16.c b/dll/win32/comdlg32/filedlg16.c similarity index 100% rename from reactos/dll/win32/comdlg32/filedlg16.c rename to dll/win32/comdlg32/filedlg16.c diff --git a/reactos/dll/win32/comdlg32/filedlg31.c b/dll/win32/comdlg32/filedlg31.c similarity index 100% rename from reactos/dll/win32/comdlg32/filedlg31.c rename to dll/win32/comdlg32/filedlg31.c diff --git a/reactos/dll/win32/comdlg32/filedlg31.h b/dll/win32/comdlg32/filedlg31.h similarity index 100% rename from reactos/dll/win32/comdlg32/filedlg31.h rename to dll/win32/comdlg32/filedlg31.h diff --git a/reactos/dll/win32/comdlg32/filedlgbrowser.c b/dll/win32/comdlg32/filedlgbrowser.c similarity index 100% rename from reactos/dll/win32/comdlg32/filedlgbrowser.c rename to dll/win32/comdlg32/filedlgbrowser.c diff --git a/reactos/dll/win32/comdlg32/filedlgbrowser.h b/dll/win32/comdlg32/filedlgbrowser.h similarity index 100% rename from reactos/dll/win32/comdlg32/filedlgbrowser.h rename to dll/win32/comdlg32/filedlgbrowser.h diff --git a/reactos/dll/win32/comdlg32/finddlg16.c b/dll/win32/comdlg32/finddlg16.c similarity index 100% rename from reactos/dll/win32/comdlg32/finddlg16.c rename to dll/win32/comdlg32/finddlg16.c diff --git a/reactos/dll/win32/comdlg32/finddlg32.c b/dll/win32/comdlg32/finddlg32.c similarity index 100% rename from reactos/dll/win32/comdlg32/finddlg32.c rename to dll/win32/comdlg32/finddlg32.c diff --git a/reactos/dll/win32/comdlg32/floppy.ico b/dll/win32/comdlg32/floppy.ico similarity index 100% rename from reactos/dll/win32/comdlg32/floppy.ico rename to dll/win32/comdlg32/floppy.ico diff --git a/reactos/dll/win32/comdlg32/folder.ico b/dll/win32/comdlg32/folder.ico similarity index 100% rename from reactos/dll/win32/comdlg32/folder.ico rename to dll/win32/comdlg32/folder.ico diff --git a/reactos/dll/win32/comdlg32/folder2.ico b/dll/win32/comdlg32/folder2.ico similarity index 100% rename from reactos/dll/win32/comdlg32/folder2.ico rename to dll/win32/comdlg32/folder2.ico diff --git a/reactos/dll/win32/comdlg32/fontdlg.c b/dll/win32/comdlg32/fontdlg.c similarity index 100% rename from reactos/dll/win32/comdlg32/fontdlg.c rename to dll/win32/comdlg32/fontdlg.c diff --git a/reactos/dll/win32/comdlg32/fontdlg16.c b/dll/win32/comdlg32/fontdlg16.c similarity index 100% rename from reactos/dll/win32/comdlg32/fontdlg16.c rename to dll/win32/comdlg32/fontdlg16.c diff --git a/reactos/dll/win32/comdlg32/fontpics.bmp b/dll/win32/comdlg32/fontpics.bmp similarity index 100% rename from reactos/dll/win32/comdlg32/fontpics.bmp rename to dll/win32/comdlg32/fontpics.bmp diff --git a/reactos/dll/win32/comdlg32/hdisk.ico b/dll/win32/comdlg32/hdisk.ico similarity index 100% rename from reactos/dll/win32/comdlg32/hdisk.ico rename to dll/win32/comdlg32/hdisk.ico diff --git a/reactos/dll/win32/comdlg32/network.ico b/dll/win32/comdlg32/network.ico similarity index 100% rename from reactos/dll/win32/comdlg32/network.ico rename to dll/win32/comdlg32/network.ico diff --git a/reactos/dll/win32/comdlg32/pd32_collate.ico b/dll/win32/comdlg32/pd32_collate.ico similarity index 100% rename from reactos/dll/win32/comdlg32/pd32_collate.ico rename to dll/win32/comdlg32/pd32_collate.ico diff --git a/reactos/dll/win32/comdlg32/pd32_landscape.ico b/dll/win32/comdlg32/pd32_landscape.ico similarity index 100% rename from reactos/dll/win32/comdlg32/pd32_landscape.ico rename to dll/win32/comdlg32/pd32_landscape.ico diff --git a/reactos/dll/win32/comdlg32/pd32_nocollate.ico b/dll/win32/comdlg32/pd32_nocollate.ico similarity index 100% rename from reactos/dll/win32/comdlg32/pd32_nocollate.ico rename to dll/win32/comdlg32/pd32_nocollate.ico diff --git a/reactos/dll/win32/comdlg32/pd32_portrait.ico b/dll/win32/comdlg32/pd32_portrait.ico similarity index 100% rename from reactos/dll/win32/comdlg32/pd32_portrait.ico rename to dll/win32/comdlg32/pd32_portrait.ico diff --git a/reactos/dll/win32/comdlg32/printdlg.c b/dll/win32/comdlg32/printdlg.c similarity index 100% rename from reactos/dll/win32/comdlg32/printdlg.c rename to dll/win32/comdlg32/printdlg.c diff --git a/reactos/dll/win32/comdlg32/printdlg.h b/dll/win32/comdlg32/printdlg.h similarity index 100% rename from reactos/dll/win32/comdlg32/printdlg.h rename to dll/win32/comdlg32/printdlg.h diff --git a/reactos/dll/win32/comdlg32/printdlg16.c b/dll/win32/comdlg32/printdlg16.c similarity index 100% rename from reactos/dll/win32/comdlg32/printdlg16.c rename to dll/win32/comdlg32/printdlg16.c diff --git a/reactos/dll/win32/comdlg32/rsrc.rc b/dll/win32/comdlg32/rsrc.rc similarity index 100% rename from reactos/dll/win32/comdlg32/rsrc.rc rename to dll/win32/comdlg32/rsrc.rc diff --git a/reactos/dll/win32/compstui/compstui.rbuild b/dll/win32/compstui/compstui.rbuild similarity index 100% rename from reactos/dll/win32/compstui/compstui.rbuild rename to dll/win32/compstui/compstui.rbuild diff --git a/reactos/dll/win32/compstui/compstui.spec b/dll/win32/compstui/compstui.spec similarity index 100% rename from reactos/dll/win32/compstui/compstui.spec rename to dll/win32/compstui/compstui.spec diff --git a/reactos/dll/win32/compstui/compstui_main.c b/dll/win32/compstui/compstui_main.c similarity index 100% rename from reactos/dll/win32/compstui/compstui_main.c rename to dll/win32/compstui/compstui_main.c diff --git a/reactos/dll/win32/credui/banner.bmp b/dll/win32/credui/banner.bmp similarity index 100% rename from reactos/dll/win32/credui/banner.bmp rename to dll/win32/credui/banner.bmp diff --git a/reactos/dll/win32/credui/credui.rbuild b/dll/win32/credui/credui.rbuild similarity index 100% rename from reactos/dll/win32/credui/credui.rbuild rename to dll/win32/credui/credui.rbuild diff --git a/reactos/dll/win32/credui/credui.rc b/dll/win32/credui/credui.rc similarity index 100% rename from reactos/dll/win32/credui/credui.rc rename to dll/win32/credui/credui.rc diff --git a/reactos/dll/win32/credui/credui.spec b/dll/win32/credui/credui.spec similarity index 100% rename from reactos/dll/win32/credui/credui.spec rename to dll/win32/credui/credui.spec diff --git a/reactos/dll/win32/credui/credui_Da.rc b/dll/win32/credui/credui_Da.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Da.rc rename to dll/win32/credui/credui_Da.rc diff --git a/reactos/dll/win32/credui/credui_De.rc b/dll/win32/credui/credui_De.rc similarity index 100% rename from reactos/dll/win32/credui/credui_De.rc rename to dll/win32/credui/credui_De.rc diff --git a/reactos/dll/win32/credui/credui_En.rc b/dll/win32/credui/credui_En.rc similarity index 100% rename from reactos/dll/win32/credui/credui_En.rc rename to dll/win32/credui/credui_En.rc diff --git a/reactos/dll/win32/credui/credui_Es.rc b/dll/win32/credui/credui_Es.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Es.rc rename to dll/win32/credui/credui_Es.rc diff --git a/reactos/dll/win32/credui/credui_Fr.rc b/dll/win32/credui/credui_Fr.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Fr.rc rename to dll/win32/credui/credui_Fr.rc diff --git a/reactos/dll/win32/credui/credui_Ko.rc b/dll/win32/credui/credui_Ko.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Ko.rc rename to dll/win32/credui/credui_Ko.rc diff --git a/reactos/dll/win32/credui/credui_Nl.rc b/dll/win32/credui/credui_Nl.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Nl.rc rename to dll/win32/credui/credui_Nl.rc diff --git a/reactos/dll/win32/credui/credui_No.rc b/dll/win32/credui/credui_No.rc similarity index 100% rename from reactos/dll/win32/credui/credui_No.rc rename to dll/win32/credui/credui_No.rc diff --git a/reactos/dll/win32/credui/credui_Pl.rc b/dll/win32/credui/credui_Pl.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Pl.rc rename to dll/win32/credui/credui_Pl.rc diff --git a/reactos/dll/win32/credui/credui_Ru.rc b/dll/win32/credui/credui_Ru.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Ru.rc rename to dll/win32/credui/credui_Ru.rc diff --git a/reactos/dll/win32/credui/credui_Si.rc b/dll/win32/credui/credui_Si.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Si.rc rename to dll/win32/credui/credui_Si.rc diff --git a/reactos/dll/win32/credui/credui_Sv.rc b/dll/win32/credui/credui_Sv.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Sv.rc rename to dll/win32/credui/credui_Sv.rc diff --git a/reactos/dll/win32/credui/credui_Zh.rc b/dll/win32/credui/credui_Zh.rc similarity index 100% rename from reactos/dll/win32/credui/credui_Zh.rc rename to dll/win32/credui/credui_Zh.rc diff --git a/reactos/dll/win32/credui/credui_main.c b/dll/win32/credui/credui_main.c similarity index 100% rename from reactos/dll/win32/credui/credui_main.c rename to dll/win32/credui/credui_main.c diff --git a/reactos/dll/win32/credui/credui_resources.h b/dll/win32/credui/credui_resources.h similarity index 100% rename from reactos/dll/win32/credui/credui_resources.h rename to dll/win32/credui/credui_resources.h diff --git a/reactos/dll/win32/crtdll/crtdll.def b/dll/win32/crtdll/crtdll.def similarity index 100% rename from reactos/dll/win32/crtdll/crtdll.def rename to dll/win32/crtdll/crtdll.def diff --git a/reactos/dll/win32/crtdll/crtdll.rbuild b/dll/win32/crtdll/crtdll.rbuild similarity index 100% rename from reactos/dll/win32/crtdll/crtdll.rbuild rename to dll/win32/crtdll/crtdll.rbuild diff --git a/reactos/dll/win32/crtdll/crtdll.rc b/dll/win32/crtdll/crtdll.rc similarity index 100% rename from reactos/dll/win32/crtdll/crtdll.rc rename to dll/win32/crtdll/crtdll.rc diff --git a/reactos/dll/win32/crtdll/dllmain.c b/dll/win32/crtdll/dllmain.c similarity index 100% rename from reactos/dll/win32/crtdll/dllmain.c rename to dll/win32/crtdll/dllmain.c diff --git a/reactos/dll/win32/crtdll/precomp.h b/dll/win32/crtdll/precomp.h similarity index 100% rename from reactos/dll/win32/crtdll/precomp.h rename to dll/win32/crtdll/precomp.h diff --git a/reactos/dll/win32/crypt32/base64.c b/dll/win32/crypt32/base64.c similarity index 100% rename from reactos/dll/win32/crypt32/base64.c rename to dll/win32/crypt32/base64.c diff --git a/reactos/dll/win32/crypt32/cert.c b/dll/win32/crypt32/cert.c similarity index 100% rename from reactos/dll/win32/crypt32/cert.c rename to dll/win32/crypt32/cert.c diff --git a/reactos/dll/win32/crypt32/chain.c b/dll/win32/crypt32/chain.c similarity index 100% rename from reactos/dll/win32/crypt32/chain.c rename to dll/win32/crypt32/chain.c diff --git a/reactos/dll/win32/crypt32/collectionstore.c b/dll/win32/crypt32/collectionstore.c similarity index 100% rename from reactos/dll/win32/crypt32/collectionstore.c rename to dll/win32/crypt32/collectionstore.c diff --git a/reactos/dll/win32/crypt32/context.c b/dll/win32/crypt32/context.c similarity index 100% rename from reactos/dll/win32/crypt32/context.c rename to dll/win32/crypt32/context.c diff --git a/reactos/dll/win32/crypt32/crl.c b/dll/win32/crypt32/crl.c similarity index 100% rename from reactos/dll/win32/crypt32/crl.c rename to dll/win32/crypt32/crl.c diff --git a/reactos/dll/win32/crypt32/crypt32.rbuild b/dll/win32/crypt32/crypt32.rbuild similarity index 100% rename from reactos/dll/win32/crypt32/crypt32.rbuild rename to dll/win32/crypt32/crypt32.rbuild diff --git a/reactos/dll/win32/crypt32/crypt32.rc b/dll/win32/crypt32/crypt32.rc similarity index 100% rename from reactos/dll/win32/crypt32/crypt32.rc rename to dll/win32/crypt32/crypt32.rc diff --git a/reactos/dll/win32/crypt32/crypt32.spec b/dll/win32/crypt32/crypt32.spec similarity index 100% rename from reactos/dll/win32/crypt32/crypt32.spec rename to dll/win32/crypt32/crypt32.spec diff --git a/reactos/dll/win32/crypt32/crypt32_De.rc b/dll/win32/crypt32/crypt32_De.rc similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_De.rc rename to dll/win32/crypt32/crypt32_De.rc diff --git a/reactos/dll/win32/crypt32/crypt32_En.rc b/dll/win32/crypt32/crypt32_En.rc similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_En.rc rename to dll/win32/crypt32/crypt32_En.rc diff --git a/reactos/dll/win32/crypt32/crypt32_Fr.rc b/dll/win32/crypt32/crypt32_Fr.rc similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_Fr.rc rename to dll/win32/crypt32/crypt32_Fr.rc diff --git a/reactos/dll/win32/crypt32/crypt32_Ko.rc b/dll/win32/crypt32/crypt32_Ko.rc similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_Ko.rc rename to dll/win32/crypt32/crypt32_Ko.rc diff --git a/reactos/dll/win32/crypt32/crypt32_Nl.rc b/dll/win32/crypt32/crypt32_Nl.rc similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_Nl.rc rename to dll/win32/crypt32/crypt32_Nl.rc diff --git a/reactos/dll/win32/crypt32/crypt32_No.rc b/dll/win32/crypt32/crypt32_No.rc similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_No.rc rename to dll/win32/crypt32/crypt32_No.rc diff --git a/reactos/dll/win32/crypt32/crypt32_Sv.rc b/dll/win32/crypt32/crypt32_Sv.rc similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_Sv.rc rename to dll/win32/crypt32/crypt32_Sv.rc diff --git a/reactos/dll/win32/crypt32/crypt32_private.h b/dll/win32/crypt32/crypt32_private.h similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_private.h rename to dll/win32/crypt32/crypt32_private.h diff --git a/reactos/dll/win32/crypt32/crypt32_ros.diff b/dll/win32/crypt32/crypt32_ros.diff similarity index 100% rename from reactos/dll/win32/crypt32/crypt32_ros.diff rename to dll/win32/crypt32/crypt32_ros.diff diff --git a/reactos/dll/win32/crypt32/cryptres.h b/dll/win32/crypt32/cryptres.h similarity index 100% rename from reactos/dll/win32/crypt32/cryptres.h rename to dll/win32/crypt32/cryptres.h diff --git a/reactos/dll/win32/crypt32/ctl.c b/dll/win32/crypt32/ctl.c similarity index 100% rename from reactos/dll/win32/crypt32/ctl.c rename to dll/win32/crypt32/ctl.c diff --git a/reactos/dll/win32/crypt32/decode.c b/dll/win32/crypt32/decode.c similarity index 100% rename from reactos/dll/win32/crypt32/decode.c rename to dll/win32/crypt32/decode.c diff --git a/reactos/dll/win32/crypt32/encode.c b/dll/win32/crypt32/encode.c similarity index 100% rename from reactos/dll/win32/crypt32/encode.c rename to dll/win32/crypt32/encode.c diff --git a/reactos/dll/win32/crypt32/filestore.c b/dll/win32/crypt32/filestore.c similarity index 100% rename from reactos/dll/win32/crypt32/filestore.c rename to dll/win32/crypt32/filestore.c diff --git a/reactos/dll/win32/crypt32/main.c b/dll/win32/crypt32/main.c similarity index 100% rename from reactos/dll/win32/crypt32/main.c rename to dll/win32/crypt32/main.c diff --git a/reactos/dll/win32/crypt32/message.c b/dll/win32/crypt32/message.c similarity index 100% rename from reactos/dll/win32/crypt32/message.c rename to dll/win32/crypt32/message.c diff --git a/reactos/dll/win32/crypt32/msg.c b/dll/win32/crypt32/msg.c similarity index 100% rename from reactos/dll/win32/crypt32/msg.c rename to dll/win32/crypt32/msg.c diff --git a/reactos/dll/win32/crypt32/object.c b/dll/win32/crypt32/object.c similarity index 100% rename from reactos/dll/win32/crypt32/object.c rename to dll/win32/crypt32/object.c diff --git a/reactos/dll/win32/crypt32/oid.c b/dll/win32/crypt32/oid.c similarity index 100% rename from reactos/dll/win32/crypt32/oid.c rename to dll/win32/crypt32/oid.c diff --git a/reactos/dll/win32/crypt32/proplist.c b/dll/win32/crypt32/proplist.c similarity index 100% rename from reactos/dll/win32/crypt32/proplist.c rename to dll/win32/crypt32/proplist.c diff --git a/reactos/dll/win32/crypt32/protectdata.c b/dll/win32/crypt32/protectdata.c similarity index 100% rename from reactos/dll/win32/crypt32/protectdata.c rename to dll/win32/crypt32/protectdata.c diff --git a/reactos/dll/win32/crypt32/provstore.c b/dll/win32/crypt32/provstore.c similarity index 100% rename from reactos/dll/win32/crypt32/provstore.c rename to dll/win32/crypt32/provstore.c diff --git a/reactos/dll/win32/crypt32/regstore.c b/dll/win32/crypt32/regstore.c similarity index 100% rename from reactos/dll/win32/crypt32/regstore.c rename to dll/win32/crypt32/regstore.c diff --git a/reactos/dll/win32/crypt32/rootstore.c b/dll/win32/crypt32/rootstore.c similarity index 100% rename from reactos/dll/win32/crypt32/rootstore.c rename to dll/win32/crypt32/rootstore.c diff --git a/reactos/dll/win32/crypt32/serialize.c b/dll/win32/crypt32/serialize.c similarity index 100% rename from reactos/dll/win32/crypt32/serialize.c rename to dll/win32/crypt32/serialize.c diff --git a/reactos/dll/win32/crypt32/sip.c b/dll/win32/crypt32/sip.c similarity index 100% rename from reactos/dll/win32/crypt32/sip.c rename to dll/win32/crypt32/sip.c diff --git a/reactos/dll/win32/crypt32/store.c b/dll/win32/crypt32/store.c similarity index 100% rename from reactos/dll/win32/crypt32/store.c rename to dll/win32/crypt32/store.c diff --git a/reactos/dll/win32/crypt32/str.c b/dll/win32/crypt32/str.c similarity index 100% rename from reactos/dll/win32/crypt32/str.c rename to dll/win32/crypt32/str.c diff --git a/reactos/dll/win32/crypt32/version.rc b/dll/win32/crypt32/version.rc similarity index 100% rename from reactos/dll/win32/crypt32/version.rc rename to dll/win32/crypt32/version.rc diff --git a/reactos/dll/win32/cryptdll/cryptdll.c b/dll/win32/cryptdll/cryptdll.c similarity index 100% rename from reactos/dll/win32/cryptdll/cryptdll.c rename to dll/win32/cryptdll/cryptdll.c diff --git a/reactos/dll/win32/cryptdll/cryptdll.rbuild b/dll/win32/cryptdll/cryptdll.rbuild similarity index 100% rename from reactos/dll/win32/cryptdll/cryptdll.rbuild rename to dll/win32/cryptdll/cryptdll.rbuild diff --git a/reactos/dll/win32/cryptdll/cryptdll.spec b/dll/win32/cryptdll/cryptdll.spec similarity index 100% rename from reactos/dll/win32/cryptdll/cryptdll.spec rename to dll/win32/cryptdll/cryptdll.spec diff --git a/reactos/dll/win32/cryptnet/cryptnet.rbuild b/dll/win32/cryptnet/cryptnet.rbuild similarity index 100% rename from reactos/dll/win32/cryptnet/cryptnet.rbuild rename to dll/win32/cryptnet/cryptnet.rbuild diff --git a/reactos/dll/win32/cryptnet/cryptnet.spec b/dll/win32/cryptnet/cryptnet.spec similarity index 100% rename from reactos/dll/win32/cryptnet/cryptnet.spec rename to dll/win32/cryptnet/cryptnet.spec diff --git a/reactos/dll/win32/cryptnet/cryptnet_main.c b/dll/win32/cryptnet/cryptnet_main.c similarity index 100% rename from reactos/dll/win32/cryptnet/cryptnet_main.c rename to dll/win32/cryptnet/cryptnet_main.c diff --git a/reactos/dll/win32/cryptui/cryptui.rbuild b/dll/win32/cryptui/cryptui.rbuild similarity index 100% rename from reactos/dll/win32/cryptui/cryptui.rbuild rename to dll/win32/cryptui/cryptui.rbuild diff --git a/reactos/dll/win32/cryptui/cryptui.spec b/dll/win32/cryptui/cryptui.spec similarity index 100% rename from reactos/dll/win32/cryptui/cryptui.spec rename to dll/win32/cryptui/cryptui.spec diff --git a/reactos/dll/win32/cryptui/main.c b/dll/win32/cryptui/main.c similarity index 100% rename from reactos/dll/win32/cryptui/main.c rename to dll/win32/cryptui/main.c diff --git a/reactos/dll/win32/dbghelp/coff.c b/dll/win32/dbghelp/coff.c similarity index 100% rename from reactos/dll/win32/dbghelp/coff.c rename to dll/win32/dbghelp/coff.c diff --git a/reactos/dll/win32/dbghelp/dbghelp.c b/dll/win32/dbghelp/dbghelp.c similarity index 100% rename from reactos/dll/win32/dbghelp/dbghelp.c rename to dll/win32/dbghelp/dbghelp.c diff --git a/reactos/dll/win32/dbghelp/dbghelp.rbuild b/dll/win32/dbghelp/dbghelp.rbuild similarity index 100% rename from reactos/dll/win32/dbghelp/dbghelp.rbuild rename to dll/win32/dbghelp/dbghelp.rbuild diff --git a/reactos/dll/win32/dbghelp/dbghelp.spec b/dll/win32/dbghelp/dbghelp.spec similarity index 100% rename from reactos/dll/win32/dbghelp/dbghelp.spec rename to dll/win32/dbghelp/dbghelp.spec diff --git a/reactos/dll/win32/dbghelp/dbghelp_private.h b/dll/win32/dbghelp/dbghelp_private.h similarity index 100% rename from reactos/dll/win32/dbghelp/dbghelp_private.h rename to dll/win32/dbghelp/dbghelp_private.h diff --git a/reactos/dll/win32/dbghelp/dbghelp_ros.diff b/dll/win32/dbghelp/dbghelp_ros.diff similarity index 100% rename from reactos/dll/win32/dbghelp/dbghelp_ros.diff rename to dll/win32/dbghelp/dbghelp_ros.diff diff --git a/reactos/dll/win32/dbghelp/dwarf.c b/dll/win32/dbghelp/dwarf.c similarity index 100% rename from reactos/dll/win32/dbghelp/dwarf.c rename to dll/win32/dbghelp/dwarf.c diff --git a/reactos/dll/win32/dbghelp/dwarf.h b/dll/win32/dbghelp/dwarf.h similarity index 100% rename from reactos/dll/win32/dbghelp/dwarf.h rename to dll/win32/dbghelp/dwarf.h diff --git a/reactos/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c similarity index 100% rename from reactos/dll/win32/dbghelp/elf_module.c rename to dll/win32/dbghelp/elf_module.c diff --git a/reactos/dll/win32/dbghelp/image.c b/dll/win32/dbghelp/image.c similarity index 100% rename from reactos/dll/win32/dbghelp/image.c rename to dll/win32/dbghelp/image.c diff --git a/reactos/dll/win32/dbghelp/memory.c b/dll/win32/dbghelp/memory.c similarity index 100% rename from reactos/dll/win32/dbghelp/memory.c rename to dll/win32/dbghelp/memory.c diff --git a/reactos/dll/win32/dbghelp/minidump.c b/dll/win32/dbghelp/minidump.c similarity index 100% rename from reactos/dll/win32/dbghelp/minidump.c rename to dll/win32/dbghelp/minidump.c diff --git a/reactos/dll/win32/dbghelp/module.c b/dll/win32/dbghelp/module.c similarity index 100% rename from reactos/dll/win32/dbghelp/module.c rename to dll/win32/dbghelp/module.c diff --git a/reactos/dll/win32/dbghelp/msc.c b/dll/win32/dbghelp/msc.c similarity index 100% rename from reactos/dll/win32/dbghelp/msc.c rename to dll/win32/dbghelp/msc.c diff --git a/reactos/dll/win32/dbghelp/path.c b/dll/win32/dbghelp/path.c similarity index 100% rename from reactos/dll/win32/dbghelp/path.c rename to dll/win32/dbghelp/path.c diff --git a/reactos/dll/win32/dbghelp/pe_module.c b/dll/win32/dbghelp/pe_module.c similarity index 100% rename from reactos/dll/win32/dbghelp/pe_module.c rename to dll/win32/dbghelp/pe_module.c diff --git a/reactos/dll/win32/dbghelp/regex.c b/dll/win32/dbghelp/regex.c similarity index 100% rename from reactos/dll/win32/dbghelp/regex.c rename to dll/win32/dbghelp/regex.c diff --git a/reactos/dll/win32/dbghelp/source.c b/dll/win32/dbghelp/source.c similarity index 100% rename from reactos/dll/win32/dbghelp/source.c rename to dll/win32/dbghelp/source.c diff --git a/reactos/dll/win32/dbghelp/stabs.c b/dll/win32/dbghelp/stabs.c similarity index 100% rename from reactos/dll/win32/dbghelp/stabs.c rename to dll/win32/dbghelp/stabs.c diff --git a/reactos/dll/win32/dbghelp/stack.c b/dll/win32/dbghelp/stack.c similarity index 100% rename from reactos/dll/win32/dbghelp/stack.c rename to dll/win32/dbghelp/stack.c diff --git a/reactos/dll/win32/dbghelp/storage.c b/dll/win32/dbghelp/storage.c similarity index 100% rename from reactos/dll/win32/dbghelp/storage.c rename to dll/win32/dbghelp/storage.c diff --git a/reactos/dll/win32/dbghelp/symbol.c b/dll/win32/dbghelp/symbol.c similarity index 100% rename from reactos/dll/win32/dbghelp/symbol.c rename to dll/win32/dbghelp/symbol.c diff --git a/reactos/dll/win32/dbghelp/type.c b/dll/win32/dbghelp/type.c similarity index 100% rename from reactos/dll/win32/dbghelp/type.c rename to dll/win32/dbghelp/type.c diff --git a/reactos/dll/win32/dbghelp/wdbgexts.h b/dll/win32/dbghelp/wdbgexts.h similarity index 100% rename from reactos/dll/win32/dbghelp/wdbgexts.h rename to dll/win32/dbghelp/wdbgexts.h diff --git a/reactos/dll/win32/dciman32/dciman32.rbuild b/dll/win32/dciman32/dciman32.rbuild similarity index 100% rename from reactos/dll/win32/dciman32/dciman32.rbuild rename to dll/win32/dciman32/dciman32.rbuild diff --git a/reactos/dll/win32/dciman32/dciman32.spec b/dll/win32/dciman32/dciman32.spec similarity index 100% rename from reactos/dll/win32/dciman32/dciman32.spec rename to dll/win32/dciman32/dciman32.spec diff --git a/reactos/dll/win32/dciman32/dciman_main.c b/dll/win32/dciman32/dciman_main.c similarity index 100% rename from reactos/dll/win32/dciman32/dciman_main.c rename to dll/win32/dciman32/dciman_main.c diff --git a/reactos/dll/win32/devmgr/advprop.c b/dll/win32/devmgr/advprop.c similarity index 100% rename from reactos/dll/win32/devmgr/advprop.c rename to dll/win32/devmgr/advprop.c diff --git a/reactos/dll/win32/devmgr/devmgr.rbuild b/dll/win32/devmgr/devmgr.rbuild similarity index 100% rename from reactos/dll/win32/devmgr/devmgr.rbuild rename to dll/win32/devmgr/devmgr.rbuild diff --git a/reactos/dll/win32/devmgr/devmgr.rc b/dll/win32/devmgr/devmgr.rc similarity index 100% rename from reactos/dll/win32/devmgr/devmgr.rc rename to dll/win32/devmgr/devmgr.rc diff --git a/reactos/dll/win32/devmgr/devmgr.spec b/dll/win32/devmgr/devmgr.spec similarity index 100% rename from reactos/dll/win32/devmgr/devmgr.spec rename to dll/win32/devmgr/devmgr.spec diff --git a/reactos/dll/win32/devmgr/devprblm.c b/dll/win32/devmgr/devprblm.c similarity index 100% rename from reactos/dll/win32/devmgr/devprblm.c rename to dll/win32/devmgr/devprblm.c diff --git a/reactos/dll/win32/devmgr/hwpage.c b/dll/win32/devmgr/hwpage.c similarity index 100% rename from reactos/dll/win32/devmgr/hwpage.c rename to dll/win32/devmgr/hwpage.c diff --git a/reactos/dll/win32/devmgr/lang/cs-CZ.rc b/dll/win32/devmgr/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/cs-CZ.rc rename to dll/win32/devmgr/lang/cs-CZ.rc diff --git a/reactos/dll/win32/devmgr/lang/de-DE.rc b/dll/win32/devmgr/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/de-DE.rc rename to dll/win32/devmgr/lang/de-DE.rc diff --git a/reactos/dll/win32/devmgr/lang/en-US.rc b/dll/win32/devmgr/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/en-US.rc rename to dll/win32/devmgr/lang/en-US.rc diff --git a/reactos/dll/win32/devmgr/lang/es-ES.rc b/dll/win32/devmgr/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/es-ES.rc rename to dll/win32/devmgr/lang/es-ES.rc diff --git a/reactos/dll/win32/devmgr/lang/fr-FR.rc b/dll/win32/devmgr/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/fr-FR.rc rename to dll/win32/devmgr/lang/fr-FR.rc diff --git a/reactos/dll/win32/devmgr/lang/hu-HU.rc b/dll/win32/devmgr/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/hu-HU.rc rename to dll/win32/devmgr/lang/hu-HU.rc diff --git a/reactos/dll/win32/devmgr/lang/id-ID.rc b/dll/win32/devmgr/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/id-ID.rc rename to dll/win32/devmgr/lang/id-ID.rc diff --git a/reactos/dll/win32/devmgr/lang/it-IT.rc b/dll/win32/devmgr/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/it-IT.rc rename to dll/win32/devmgr/lang/it-IT.rc diff --git a/reactos/dll/win32/devmgr/lang/no-NO.rc b/dll/win32/devmgr/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/no-NO.rc rename to dll/win32/devmgr/lang/no-NO.rc diff --git a/reactos/dll/win32/devmgr/lang/pl-PL.rc b/dll/win32/devmgr/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/pl-PL.rc rename to dll/win32/devmgr/lang/pl-PL.rc diff --git a/reactos/dll/win32/devmgr/lang/pt-BR.rc b/dll/win32/devmgr/lang/pt-BR.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/pt-BR.rc rename to dll/win32/devmgr/lang/pt-BR.rc diff --git a/reactos/dll/win32/devmgr/lang/ru-RU.rc b/dll/win32/devmgr/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/ru-RU.rc rename to dll/win32/devmgr/lang/ru-RU.rc diff --git a/reactos/dll/win32/devmgr/lang/sk-SK.rc b/dll/win32/devmgr/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/sk-SK.rc rename to dll/win32/devmgr/lang/sk-SK.rc diff --git a/reactos/dll/win32/devmgr/lang/uk-UA.rc b/dll/win32/devmgr/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/devmgr/lang/uk-UA.rc rename to dll/win32/devmgr/lang/uk-UA.rc diff --git a/reactos/dll/win32/devmgr/misc.c b/dll/win32/devmgr/misc.c similarity index 100% rename from reactos/dll/win32/devmgr/misc.c rename to dll/win32/devmgr/misc.c diff --git a/reactos/dll/win32/devmgr/precomp.h b/dll/win32/devmgr/precomp.h similarity index 100% rename from reactos/dll/win32/devmgr/precomp.h rename to dll/win32/devmgr/precomp.h diff --git a/reactos/dll/win32/devmgr/resource.h b/dll/win32/devmgr/resource.h similarity index 100% rename from reactos/dll/win32/devmgr/resource.h rename to dll/win32/devmgr/resource.h diff --git a/reactos/dll/win32/devmgr/resources/devmgr.ico b/dll/win32/devmgr/resources/devmgr.ico similarity index 100% rename from reactos/dll/win32/devmgr/resources/devmgr.ico rename to dll/win32/devmgr/resources/devmgr.ico diff --git a/reactos/dll/win32/devmgr/stubs.c b/dll/win32/devmgr/stubs.c similarity index 100% rename from reactos/dll/win32/devmgr/stubs.c rename to dll/win32/devmgr/stubs.c diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c b/dll/win32/dhcpcsvc/dhcpcsvc.c similarity index 100% rename from reactos/dll/win32/dhcpcsvc/dhcpcsvc.c rename to dll/win32/dhcpcsvc/dhcpcsvc.c diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild b/dll/win32/dhcpcsvc/dhcpcsvc.rbuild similarity index 100% rename from reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild rename to dll/win32/dhcpcsvc/dhcpcsvc.rbuild diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rc b/dll/win32/dhcpcsvc/dhcpcsvc.rc similarity index 100% rename from reactos/dll/win32/dhcpcsvc/dhcpcsvc.rc rename to dll/win32/dhcpcsvc/dhcpcsvc.rc diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.spec b/dll/win32/dhcpcsvc/dhcpcsvc.spec similarity index 100% rename from reactos/dll/win32/dhcpcsvc/dhcpcsvc.spec rename to dll/win32/dhcpcsvc/dhcpcsvc.spec diff --git a/reactos/dll/win32/dnsapi/dnsapi.def b/dll/win32/dnsapi/dnsapi.def similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi.def rename to dll/win32/dnsapi/dnsapi.def diff --git a/reactos/dll/win32/dnsapi/dnsapi.rbuild b/dll/win32/dnsapi/dnsapi.rbuild similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi.rbuild rename to dll/win32/dnsapi/dnsapi.rbuild diff --git a/reactos/dll/win32/dnsapi/dnsapi.rc b/dll/win32/dnsapi/dnsapi.rc similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi.rc rename to dll/win32/dnsapi/dnsapi.rc diff --git a/reactos/dll/win32/dnsapi/dnsapi/adns.c b/dll/win32/dnsapi/dnsapi/adns.c similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi/adns.c rename to dll/win32/dnsapi/dnsapi/adns.c diff --git a/reactos/dll/win32/dnsapi/dnsapi/context.c b/dll/win32/dnsapi/dnsapi/context.c similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi/context.c rename to dll/win32/dnsapi/dnsapi/context.c diff --git a/reactos/dll/win32/dnsapi/dnsapi/free.c b/dll/win32/dnsapi/dnsapi/free.c similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi/free.c rename to dll/win32/dnsapi/dnsapi/free.c diff --git a/reactos/dll/win32/dnsapi/dnsapi/names.c b/dll/win32/dnsapi/dnsapi/names.c similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi/names.c rename to dll/win32/dnsapi/dnsapi/names.c diff --git a/reactos/dll/win32/dnsapi/dnsapi/precomp.h b/dll/win32/dnsapi/dnsapi/precomp.h similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi/precomp.h rename to dll/win32/dnsapi/dnsapi/precomp.h diff --git a/reactos/dll/win32/dnsapi/dnsapi/query.c b/dll/win32/dnsapi/dnsapi/query.c similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi/query.c rename to dll/win32/dnsapi/dnsapi/query.c diff --git a/reactos/dll/win32/dnsapi/dnsapi/stubs.c b/dll/win32/dnsapi/dnsapi/stubs.c similarity index 100% rename from reactos/dll/win32/dnsapi/dnsapi/stubs.c rename to dll/win32/dnsapi/dnsapi/stubs.c diff --git a/reactos/dll/win32/dnsapi/include/internal/windns.h b/dll/win32/dnsapi/include/internal/windns.h similarity index 100% rename from reactos/dll/win32/dnsapi/include/internal/windns.h rename to dll/win32/dnsapi/include/internal/windns.h diff --git a/reactos/dll/win32/fmifs/chkdsk.c b/dll/win32/fmifs/chkdsk.c similarity index 100% rename from reactos/dll/win32/fmifs/chkdsk.c rename to dll/win32/fmifs/chkdsk.c diff --git a/reactos/dll/win32/fmifs/compress.c b/dll/win32/fmifs/compress.c similarity index 100% rename from reactos/dll/win32/fmifs/compress.c rename to dll/win32/fmifs/compress.c diff --git a/reactos/dll/win32/fmifs/diskcopy.c b/dll/win32/fmifs/diskcopy.c similarity index 100% rename from reactos/dll/win32/fmifs/diskcopy.c rename to dll/win32/fmifs/diskcopy.c diff --git a/reactos/dll/win32/fmifs/extend.c b/dll/win32/fmifs/extend.c similarity index 100% rename from reactos/dll/win32/fmifs/extend.c rename to dll/win32/fmifs/extend.c diff --git a/reactos/dll/win32/fmifs/fmifs.def b/dll/win32/fmifs/fmifs.def similarity index 100% rename from reactos/dll/win32/fmifs/fmifs.def rename to dll/win32/fmifs/fmifs.def diff --git a/reactos/dll/win32/fmifs/fmifs.rbuild b/dll/win32/fmifs/fmifs.rbuild similarity index 100% rename from reactos/dll/win32/fmifs/fmifs.rbuild rename to dll/win32/fmifs/fmifs.rbuild diff --git a/reactos/dll/win32/fmifs/fmifs.rc b/dll/win32/fmifs/fmifs.rc similarity index 100% rename from reactos/dll/win32/fmifs/fmifs.rc rename to dll/win32/fmifs/fmifs.rc diff --git a/reactos/dll/win32/fmifs/format.c b/dll/win32/fmifs/format.c similarity index 100% rename from reactos/dll/win32/fmifs/format.c rename to dll/win32/fmifs/format.c diff --git a/reactos/dll/win32/fmifs/init.c b/dll/win32/fmifs/init.c similarity index 100% rename from reactos/dll/win32/fmifs/init.c rename to dll/win32/fmifs/init.c diff --git a/reactos/dll/win32/fmifs/media.c b/dll/win32/fmifs/media.c similarity index 100% rename from reactos/dll/win32/fmifs/media.c rename to dll/win32/fmifs/media.c diff --git a/reactos/dll/win32/fmifs/precomp.h b/dll/win32/fmifs/precomp.h similarity index 100% rename from reactos/dll/win32/fmifs/precomp.h rename to dll/win32/fmifs/precomp.h diff --git a/reactos/dll/win32/fmifs/query.c b/dll/win32/fmifs/query.c similarity index 100% rename from reactos/dll/win32/fmifs/query.c rename to dll/win32/fmifs/query.c diff --git a/reactos/dll/win32/fusion/asmcache.c b/dll/win32/fusion/asmcache.c similarity index 100% rename from reactos/dll/win32/fusion/asmcache.c rename to dll/win32/fusion/asmcache.c diff --git a/reactos/dll/win32/fusion/asmname.c b/dll/win32/fusion/asmname.c similarity index 100% rename from reactos/dll/win32/fusion/asmname.c rename to dll/win32/fusion/asmname.c diff --git a/reactos/dll/win32/fusion/assembly.c b/dll/win32/fusion/assembly.c similarity index 100% rename from reactos/dll/win32/fusion/assembly.c rename to dll/win32/fusion/assembly.c diff --git a/reactos/dll/win32/fusion/fusion.c b/dll/win32/fusion/fusion.c similarity index 100% rename from reactos/dll/win32/fusion/fusion.c rename to dll/win32/fusion/fusion.c diff --git a/reactos/dll/win32/fusion/fusion.rbuild b/dll/win32/fusion/fusion.rbuild similarity index 100% rename from reactos/dll/win32/fusion/fusion.rbuild rename to dll/win32/fusion/fusion.rbuild diff --git a/reactos/dll/win32/fusion/fusion.spec b/dll/win32/fusion/fusion.spec similarity index 100% rename from reactos/dll/win32/fusion/fusion.spec rename to dll/win32/fusion/fusion.spec diff --git a/reactos/dll/win32/fusion/fusion_main.c b/dll/win32/fusion/fusion_main.c similarity index 100% rename from reactos/dll/win32/fusion/fusion_main.c rename to dll/win32/fusion/fusion_main.c diff --git a/reactos/dll/win32/fusion/fusion_ros.diff b/dll/win32/fusion/fusion_ros.diff similarity index 100% rename from reactos/dll/win32/fusion/fusion_ros.diff rename to dll/win32/fusion/fusion_ros.diff diff --git a/reactos/dll/win32/fusion/fusionpriv.h b/dll/win32/fusion/fusionpriv.h similarity index 100% rename from reactos/dll/win32/fusion/fusionpriv.h rename to dll/win32/fusion/fusionpriv.h diff --git a/reactos/dll/win32/gdi32/gdi32.def b/dll/win32/gdi32/gdi32.def similarity index 100% rename from reactos/dll/win32/gdi32/gdi32.def rename to dll/win32/gdi32/gdi32.def diff --git a/reactos/dll/win32/gdi32/gdi32.rbuild b/dll/win32/gdi32/gdi32.rbuild similarity index 100% rename from reactos/dll/win32/gdi32/gdi32.rbuild rename to dll/win32/gdi32/gdi32.rbuild diff --git a/reactos/dll/win32/gdi32/gdi32.rc b/dll/win32/gdi32/gdi32.rc similarity index 100% rename from reactos/dll/win32/gdi32/gdi32.rc rename to dll/win32/gdi32/gdi32.rc diff --git a/reactos/dll/win32/gdi32/good api.def b/dll/win32/gdi32/good api.def similarity index 100% rename from reactos/dll/win32/gdi32/good api.def rename to dll/win32/gdi32/good api.def diff --git a/reactos/dll/win32/gdi32/include/gdi32p.h b/dll/win32/gdi32/include/gdi32p.h similarity index 100% rename from reactos/dll/win32/gdi32/include/gdi32p.h rename to dll/win32/gdi32/include/gdi32p.h diff --git a/reactos/dll/win32/gdi32/include/precomp.h b/dll/win32/gdi32/include/precomp.h similarity index 100% rename from reactos/dll/win32/gdi32/include/precomp.h rename to dll/win32/gdi32/include/precomp.h diff --git a/reactos/dll/win32/gdi32/main/dllmain.c b/dll/win32/gdi32/main/dllmain.c similarity index 100% rename from reactos/dll/win32/gdi32/main/dllmain.c rename to dll/win32/gdi32/main/dllmain.c diff --git a/reactos/dll/win32/gdi32/misc/gdientry.c b/dll/win32/gdi32/misc/gdientry.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/gdientry.c rename to dll/win32/gdi32/misc/gdientry.c diff --git a/reactos/dll/win32/gdi32/misc/hacks.c b/dll/win32/gdi32/misc/hacks.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/hacks.c rename to dll/win32/gdi32/misc/hacks.c diff --git a/reactos/dll/win32/gdi32/misc/heap.c b/dll/win32/gdi32/misc/heap.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/heap.c rename to dll/win32/gdi32/misc/heap.c diff --git a/reactos/dll/win32/gdi32/misc/historic.c b/dll/win32/gdi32/misc/historic.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/historic.c rename to dll/win32/gdi32/misc/historic.c diff --git a/reactos/dll/win32/gdi32/misc/misc.c b/dll/win32/gdi32/misc/misc.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/misc.c rename to dll/win32/gdi32/misc/misc.c diff --git a/reactos/dll/win32/gdi32/misc/stubs.c b/dll/win32/gdi32/misc/stubs.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/stubs.c rename to dll/win32/gdi32/misc/stubs.c diff --git a/reactos/dll/win32/gdi32/misc/stubsa.c b/dll/win32/gdi32/misc/stubsa.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/stubsa.c rename to dll/win32/gdi32/misc/stubsa.c diff --git a/reactos/dll/win32/gdi32/misc/stubsw.c b/dll/win32/gdi32/misc/stubsw.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/stubsw.c rename to dll/win32/gdi32/misc/stubsw.c diff --git a/reactos/dll/win32/gdi32/misc/wingl.c b/dll/win32/gdi32/misc/wingl.c similarity index 100% rename from reactos/dll/win32/gdi32/misc/wingl.c rename to dll/win32/gdi32/misc/wingl.c diff --git a/reactos/dll/win32/gdi32/objects/arc.c b/dll/win32/gdi32/objects/arc.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/arc.c rename to dll/win32/gdi32/objects/arc.c diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/dll/win32/gdi32/objects/bitmap.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/bitmap.c rename to dll/win32/gdi32/objects/bitmap.c diff --git a/reactos/dll/win32/gdi32/objects/brush.c b/dll/win32/gdi32/objects/brush.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/brush.c rename to dll/win32/gdi32/objects/brush.c diff --git a/reactos/dll/win32/gdi32/objects/coord.c b/dll/win32/gdi32/objects/coord.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/coord.c rename to dll/win32/gdi32/objects/coord.c diff --git a/reactos/dll/win32/gdi32/objects/dc.c b/dll/win32/gdi32/objects/dc.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/dc.c rename to dll/win32/gdi32/objects/dc.c diff --git a/reactos/dll/win32/gdi32/objects/eng.c b/dll/win32/gdi32/objects/eng.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/eng.c rename to dll/win32/gdi32/objects/eng.c diff --git a/reactos/dll/win32/gdi32/objects/enhmfile.c b/dll/win32/gdi32/objects/enhmfile.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/enhmfile.c rename to dll/win32/gdi32/objects/enhmfile.c diff --git a/reactos/dll/win32/gdi32/objects/font.c b/dll/win32/gdi32/objects/font.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/font.c rename to dll/win32/gdi32/objects/font.c diff --git a/reactos/dll/win32/gdi32/objects/icm.c b/dll/win32/gdi32/objects/icm.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/icm.c rename to dll/win32/gdi32/objects/icm.c diff --git a/reactos/dll/win32/gdi32/objects/linedda.c b/dll/win32/gdi32/objects/linedda.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/linedda.c rename to dll/win32/gdi32/objects/linedda.c diff --git a/reactos/dll/win32/gdi32/objects/metafile.c b/dll/win32/gdi32/objects/metafile.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/metafile.c rename to dll/win32/gdi32/objects/metafile.c diff --git a/reactos/dll/win32/gdi32/objects/painting.c b/dll/win32/gdi32/objects/painting.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/painting.c rename to dll/win32/gdi32/objects/painting.c diff --git a/reactos/dll/win32/gdi32/objects/palette.c b/dll/win32/gdi32/objects/palette.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/palette.c rename to dll/win32/gdi32/objects/palette.c diff --git a/reactos/dll/win32/gdi32/objects/path.c b/dll/win32/gdi32/objects/path.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/path.c rename to dll/win32/gdi32/objects/path.c diff --git a/reactos/dll/win32/gdi32/objects/pen.c b/dll/win32/gdi32/objects/pen.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/pen.c rename to dll/win32/gdi32/objects/pen.c diff --git a/reactos/dll/win32/gdi32/objects/region.c b/dll/win32/gdi32/objects/region.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/region.c rename to dll/win32/gdi32/objects/region.c diff --git a/reactos/dll/win32/gdi32/objects/text.c b/dll/win32/gdi32/objects/text.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/text.c rename to dll/win32/gdi32/objects/text.c diff --git a/reactos/dll/win32/gdi32/objects/utils.c b/dll/win32/gdi32/objects/utils.c similarity index 100% rename from reactos/dll/win32/gdi32/objects/utils.c rename to dll/win32/gdi32/objects/utils.c diff --git a/reactos/dll/win32/gdiplus/brush.c b/dll/win32/gdiplus/brush.c similarity index 100% rename from reactos/dll/win32/gdiplus/brush.c rename to dll/win32/gdiplus/brush.c diff --git a/reactos/dll/win32/gdiplus/customlinecap.c b/dll/win32/gdiplus/customlinecap.c similarity index 100% rename from reactos/dll/win32/gdiplus/customlinecap.c rename to dll/win32/gdiplus/customlinecap.c diff --git a/reactos/dll/win32/gdiplus/font.c b/dll/win32/gdiplus/font.c similarity index 100% rename from reactos/dll/win32/gdiplus/font.c rename to dll/win32/gdiplus/font.c diff --git a/reactos/dll/win32/gdiplus/gdiplus.c b/dll/win32/gdiplus/gdiplus.c similarity index 100% rename from reactos/dll/win32/gdiplus/gdiplus.c rename to dll/win32/gdiplus/gdiplus.c diff --git a/reactos/dll/win32/gdiplus/gdiplus.rbuild b/dll/win32/gdiplus/gdiplus.rbuild similarity index 100% rename from reactos/dll/win32/gdiplus/gdiplus.rbuild rename to dll/win32/gdiplus/gdiplus.rbuild diff --git a/reactos/dll/win32/gdiplus/gdiplus.spec b/dll/win32/gdiplus/gdiplus.spec similarity index 100% rename from reactos/dll/win32/gdiplus/gdiplus.spec rename to dll/win32/gdiplus/gdiplus.spec diff --git a/reactos/dll/win32/gdiplus/gdiplus_private.h b/dll/win32/gdiplus/gdiplus_private.h similarity index 100% rename from reactos/dll/win32/gdiplus/gdiplus_private.h rename to dll/win32/gdiplus/gdiplus_private.h diff --git a/reactos/dll/win32/gdiplus/gdiplus_ros.diff b/dll/win32/gdiplus/gdiplus_ros.diff similarity index 100% rename from reactos/dll/win32/gdiplus/gdiplus_ros.diff rename to dll/win32/gdiplus/gdiplus_ros.diff diff --git a/reactos/dll/win32/gdiplus/graphics.c b/dll/win32/gdiplus/graphics.c similarity index 100% rename from reactos/dll/win32/gdiplus/graphics.c rename to dll/win32/gdiplus/graphics.c diff --git a/reactos/dll/win32/gdiplus/graphicspath.c b/dll/win32/gdiplus/graphicspath.c similarity index 100% rename from reactos/dll/win32/gdiplus/graphicspath.c rename to dll/win32/gdiplus/graphicspath.c diff --git a/reactos/dll/win32/gdiplus/image.c b/dll/win32/gdiplus/image.c similarity index 100% rename from reactos/dll/win32/gdiplus/image.c rename to dll/win32/gdiplus/image.c diff --git a/reactos/dll/win32/gdiplus/imageattributes.c b/dll/win32/gdiplus/imageattributes.c similarity index 100% rename from reactos/dll/win32/gdiplus/imageattributes.c rename to dll/win32/gdiplus/imageattributes.c diff --git a/reactos/dll/win32/gdiplus/matrix.c b/dll/win32/gdiplus/matrix.c similarity index 100% rename from reactos/dll/win32/gdiplus/matrix.c rename to dll/win32/gdiplus/matrix.c diff --git a/reactos/dll/win32/gdiplus/pathiterator.c b/dll/win32/gdiplus/pathiterator.c similarity index 100% rename from reactos/dll/win32/gdiplus/pathiterator.c rename to dll/win32/gdiplus/pathiterator.c diff --git a/reactos/dll/win32/gdiplus/pen.c b/dll/win32/gdiplus/pen.c similarity index 100% rename from reactos/dll/win32/gdiplus/pen.c rename to dll/win32/gdiplus/pen.c diff --git a/reactos/dll/win32/gdiplus/region.c b/dll/win32/gdiplus/region.c similarity index 100% rename from reactos/dll/win32/gdiplus/region.c rename to dll/win32/gdiplus/region.c diff --git a/reactos/dll/win32/gdiplus/stringformat.c b/dll/win32/gdiplus/stringformat.c similarity index 100% rename from reactos/dll/win32/gdiplus/stringformat.c rename to dll/win32/gdiplus/stringformat.c diff --git a/reactos/dll/win32/getuname/getuname.c b/dll/win32/getuname/getuname.c similarity index 100% rename from reactos/dll/win32/getuname/getuname.c rename to dll/win32/getuname/getuname.c diff --git a/reactos/dll/win32/getuname/getuname.rbuild b/dll/win32/getuname/getuname.rbuild similarity index 100% rename from reactos/dll/win32/getuname/getuname.rbuild rename to dll/win32/getuname/getuname.rbuild diff --git a/reactos/dll/win32/getuname/getuname.rc b/dll/win32/getuname/getuname.rc similarity index 100% rename from reactos/dll/win32/getuname/getuname.rc rename to dll/win32/getuname/getuname.rc diff --git a/reactos/dll/win32/getuname/getuname.spec b/dll/win32/getuname/getuname.spec similarity index 100% rename from reactos/dll/win32/getuname/getuname.spec rename to dll/win32/getuname/getuname.spec diff --git a/reactos/dll/win32/glu32/glu32.def b/dll/win32/glu32/glu32.def similarity index 100% rename from reactos/dll/win32/glu32/glu32.def rename to dll/win32/glu32/glu32.def diff --git a/reactos/dll/win32/glu32/glu32.rbuild b/dll/win32/glu32/glu32.rbuild similarity index 100% rename from reactos/dll/win32/glu32/glu32.rbuild rename to dll/win32/glu32/glu32.rbuild diff --git a/reactos/dll/win32/glu32/include/gluos.h b/dll/win32/glu32/include/gluos.h similarity index 100% rename from reactos/dll/win32/glu32/include/gluos.h rename to dll/win32/glu32/include/gluos.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/bezierEval.cc b/dll/win32/glu32/libnurbs/interface/bezierEval.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/bezierEval.cc rename to dll/win32/glu32/libnurbs/interface/bezierEval.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/bezierEval.h b/dll/win32/glu32/libnurbs/interface/bezierEval.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/bezierEval.h rename to dll/win32/glu32/libnurbs/interface/bezierEval.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/bezierPatch.cc b/dll/win32/glu32/libnurbs/interface/bezierPatch.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/bezierPatch.cc rename to dll/win32/glu32/libnurbs/interface/bezierPatch.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/bezierPatch.h b/dll/win32/glu32/libnurbs/interface/bezierPatch.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/bezierPatch.h rename to dll/win32/glu32/libnurbs/interface/bezierPatch.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/bezierPatchMesh.cc b/dll/win32/glu32/libnurbs/interface/bezierPatchMesh.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/bezierPatchMesh.cc rename to dll/win32/glu32/libnurbs/interface/bezierPatchMesh.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/bezierPatchMesh.h b/dll/win32/glu32/libnurbs/interface/bezierPatchMesh.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/bezierPatchMesh.h rename to dll/win32/glu32/libnurbs/interface/bezierPatchMesh.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/glcurveval.cc b/dll/win32/glu32/libnurbs/interface/glcurveval.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/glcurveval.cc rename to dll/win32/glu32/libnurbs/interface/glcurveval.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/glcurveval.h b/dll/win32/glu32/libnurbs/interface/glcurveval.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/glcurveval.h rename to dll/win32/glu32/libnurbs/interface/glcurveval.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/glimports.h b/dll/win32/glu32/libnurbs/interface/glimports.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/glimports.h rename to dll/win32/glu32/libnurbs/interface/glimports.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/glinterface.cc b/dll/win32/glu32/libnurbs/interface/glinterface.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/glinterface.cc rename to dll/win32/glu32/libnurbs/interface/glinterface.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/glrenderer.cc b/dll/win32/glu32/libnurbs/interface/glrenderer.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/glrenderer.cc rename to dll/win32/glu32/libnurbs/interface/glrenderer.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/glrenderer.h b/dll/win32/glu32/libnurbs/interface/glrenderer.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/glrenderer.h rename to dll/win32/glu32/libnurbs/interface/glrenderer.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/glsurfeval.cc b/dll/win32/glu32/libnurbs/interface/glsurfeval.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/glsurfeval.cc rename to dll/win32/glu32/libnurbs/interface/glsurfeval.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/glsurfeval.h b/dll/win32/glu32/libnurbs/interface/glsurfeval.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/glsurfeval.h rename to dll/win32/glu32/libnurbs/interface/glsurfeval.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/incurveeval.cc b/dll/win32/glu32/libnurbs/interface/incurveeval.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/incurveeval.cc rename to dll/win32/glu32/libnurbs/interface/incurveeval.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/insurfeval.cc b/dll/win32/glu32/libnurbs/interface/insurfeval.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/insurfeval.cc rename to dll/win32/glu32/libnurbs/interface/insurfeval.cc diff --git a/reactos/dll/win32/glu32/libnurbs/interface/mystdio.h b/dll/win32/glu32/libnurbs/interface/mystdio.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/mystdio.h rename to dll/win32/glu32/libnurbs/interface/mystdio.h diff --git a/reactos/dll/win32/glu32/libnurbs/interface/mystdlib.h b/dll/win32/glu32/libnurbs/interface/mystdlib.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/interface/mystdlib.h rename to dll/win32/glu32/libnurbs/interface/mystdlib.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/arc.cc b/dll/win32/glu32/libnurbs/internals/arc.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/arc.cc rename to dll/win32/glu32/libnurbs/internals/arc.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/arc.h b/dll/win32/glu32/libnurbs/internals/arc.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/arc.h rename to dll/win32/glu32/libnurbs/internals/arc.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/arcsorter.cc b/dll/win32/glu32/libnurbs/internals/arcsorter.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/arcsorter.cc rename to dll/win32/glu32/libnurbs/internals/arcsorter.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/arcsorter.h b/dll/win32/glu32/libnurbs/internals/arcsorter.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/arcsorter.h rename to dll/win32/glu32/libnurbs/internals/arcsorter.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/arctess.cc b/dll/win32/glu32/libnurbs/internals/arctess.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/arctess.cc rename to dll/win32/glu32/libnurbs/internals/arctess.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/arctess.h b/dll/win32/glu32/libnurbs/internals/arctess.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/arctess.h rename to dll/win32/glu32/libnurbs/internals/arctess.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/backend.cc b/dll/win32/glu32/libnurbs/internals/backend.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/backend.cc rename to dll/win32/glu32/libnurbs/internals/backend.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/backend.h b/dll/win32/glu32/libnurbs/internals/backend.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/backend.h rename to dll/win32/glu32/libnurbs/internals/backend.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/basiccrveval.cc b/dll/win32/glu32/libnurbs/internals/basiccrveval.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/basiccrveval.cc rename to dll/win32/glu32/libnurbs/internals/basiccrveval.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/basiccrveval.h b/dll/win32/glu32/libnurbs/internals/basiccrveval.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/basiccrveval.h rename to dll/win32/glu32/libnurbs/internals/basiccrveval.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/basicsurfeval.cc b/dll/win32/glu32/libnurbs/internals/basicsurfeval.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/basicsurfeval.cc rename to dll/win32/glu32/libnurbs/internals/basicsurfeval.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/basicsurfeval.h b/dll/win32/glu32/libnurbs/internals/basicsurfeval.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/basicsurfeval.h rename to dll/win32/glu32/libnurbs/internals/basicsurfeval.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/bezierarc.h b/dll/win32/glu32/libnurbs/internals/bezierarc.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/bezierarc.h rename to dll/win32/glu32/libnurbs/internals/bezierarc.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/bin.cc b/dll/win32/glu32/libnurbs/internals/bin.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/bin.cc rename to dll/win32/glu32/libnurbs/internals/bin.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/bin.h b/dll/win32/glu32/libnurbs/internals/bin.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/bin.h rename to dll/win32/glu32/libnurbs/internals/bin.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/bufpool.cc b/dll/win32/glu32/libnurbs/internals/bufpool.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/bufpool.cc rename to dll/win32/glu32/libnurbs/internals/bufpool.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/bufpool.h b/dll/win32/glu32/libnurbs/internals/bufpool.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/bufpool.h rename to dll/win32/glu32/libnurbs/internals/bufpool.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/cachingeval.cc b/dll/win32/glu32/libnurbs/internals/cachingeval.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/cachingeval.cc rename to dll/win32/glu32/libnurbs/internals/cachingeval.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/cachingeval.h b/dll/win32/glu32/libnurbs/internals/cachingeval.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/cachingeval.h rename to dll/win32/glu32/libnurbs/internals/cachingeval.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/ccw.cc b/dll/win32/glu32/libnurbs/internals/ccw.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/ccw.cc rename to dll/win32/glu32/libnurbs/internals/ccw.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/coveandtiler.cc b/dll/win32/glu32/libnurbs/internals/coveandtiler.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/coveandtiler.cc rename to dll/win32/glu32/libnurbs/internals/coveandtiler.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/coveandtiler.h b/dll/win32/glu32/libnurbs/internals/coveandtiler.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/coveandtiler.h rename to dll/win32/glu32/libnurbs/internals/coveandtiler.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/curve.cc b/dll/win32/glu32/libnurbs/internals/curve.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/curve.cc rename to dll/win32/glu32/libnurbs/internals/curve.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/curve.h b/dll/win32/glu32/libnurbs/internals/curve.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/curve.h rename to dll/win32/glu32/libnurbs/internals/curve.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/curvelist.cc b/dll/win32/glu32/libnurbs/internals/curvelist.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/curvelist.cc rename to dll/win32/glu32/libnurbs/internals/curvelist.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/curvelist.h b/dll/win32/glu32/libnurbs/internals/curvelist.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/curvelist.h rename to dll/win32/glu32/libnurbs/internals/curvelist.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/curvesub.cc b/dll/win32/glu32/libnurbs/internals/curvesub.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/curvesub.cc rename to dll/win32/glu32/libnurbs/internals/curvesub.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/dataTransform.cc b/dll/win32/glu32/libnurbs/internals/dataTransform.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/dataTransform.cc rename to dll/win32/glu32/libnurbs/internals/dataTransform.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/dataTransform.h b/dll/win32/glu32/libnurbs/internals/dataTransform.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/dataTransform.h rename to dll/win32/glu32/libnurbs/internals/dataTransform.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/defines.h b/dll/win32/glu32/libnurbs/internals/defines.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/defines.h rename to dll/win32/glu32/libnurbs/internals/defines.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/displaylist.cc b/dll/win32/glu32/libnurbs/internals/displaylist.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/displaylist.cc rename to dll/win32/glu32/libnurbs/internals/displaylist.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/displaylist.h b/dll/win32/glu32/libnurbs/internals/displaylist.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/displaylist.h rename to dll/win32/glu32/libnurbs/internals/displaylist.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/displaymode.h b/dll/win32/glu32/libnurbs/internals/displaymode.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/displaymode.h rename to dll/win32/glu32/libnurbs/internals/displaymode.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/flist.cc b/dll/win32/glu32/libnurbs/internals/flist.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/flist.cc rename to dll/win32/glu32/libnurbs/internals/flist.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/flist.h b/dll/win32/glu32/libnurbs/internals/flist.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/flist.h rename to dll/win32/glu32/libnurbs/internals/flist.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/flistsorter.cc b/dll/win32/glu32/libnurbs/internals/flistsorter.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/flistsorter.cc rename to dll/win32/glu32/libnurbs/internals/flistsorter.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/flistsorter.h b/dll/win32/glu32/libnurbs/internals/flistsorter.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/flistsorter.h rename to dll/win32/glu32/libnurbs/internals/flistsorter.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/gridline.h b/dll/win32/glu32/libnurbs/internals/gridline.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/gridline.h rename to dll/win32/glu32/libnurbs/internals/gridline.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/gridtrimvertex.h b/dll/win32/glu32/libnurbs/internals/gridtrimvertex.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/gridtrimvertex.h rename to dll/win32/glu32/libnurbs/internals/gridtrimvertex.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/gridvertex.h b/dll/win32/glu32/libnurbs/internals/gridvertex.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/gridvertex.h rename to dll/win32/glu32/libnurbs/internals/gridvertex.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/hull.cc b/dll/win32/glu32/libnurbs/internals/hull.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/hull.cc rename to dll/win32/glu32/libnurbs/internals/hull.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/hull.h b/dll/win32/glu32/libnurbs/internals/hull.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/hull.h rename to dll/win32/glu32/libnurbs/internals/hull.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/intersect.cc b/dll/win32/glu32/libnurbs/internals/intersect.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/intersect.cc rename to dll/win32/glu32/libnurbs/internals/intersect.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/jarcloc.h b/dll/win32/glu32/libnurbs/internals/jarcloc.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/jarcloc.h rename to dll/win32/glu32/libnurbs/internals/jarcloc.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/knotvector.cc b/dll/win32/glu32/libnurbs/internals/knotvector.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/knotvector.cc rename to dll/win32/glu32/libnurbs/internals/knotvector.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/knotvector.h b/dll/win32/glu32/libnurbs/internals/knotvector.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/knotvector.h rename to dll/win32/glu32/libnurbs/internals/knotvector.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mapdesc.cc b/dll/win32/glu32/libnurbs/internals/mapdesc.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mapdesc.cc rename to dll/win32/glu32/libnurbs/internals/mapdesc.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mapdesc.h b/dll/win32/glu32/libnurbs/internals/mapdesc.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mapdesc.h rename to dll/win32/glu32/libnurbs/internals/mapdesc.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mapdescv.cc b/dll/win32/glu32/libnurbs/internals/mapdescv.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mapdescv.cc rename to dll/win32/glu32/libnurbs/internals/mapdescv.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/maplist.cc b/dll/win32/glu32/libnurbs/internals/maplist.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/maplist.cc rename to dll/win32/glu32/libnurbs/internals/maplist.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/maplist.h b/dll/win32/glu32/libnurbs/internals/maplist.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/maplist.h rename to dll/win32/glu32/libnurbs/internals/maplist.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mesher.cc b/dll/win32/glu32/libnurbs/internals/mesher.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mesher.cc rename to dll/win32/glu32/libnurbs/internals/mesher.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mesher.h b/dll/win32/glu32/libnurbs/internals/mesher.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mesher.h rename to dll/win32/glu32/libnurbs/internals/mesher.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/monoTriangulationBackend.cc b/dll/win32/glu32/libnurbs/internals/monoTriangulationBackend.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/monoTriangulationBackend.cc rename to dll/win32/glu32/libnurbs/internals/monoTriangulationBackend.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/monotonizer.cc b/dll/win32/glu32/libnurbs/internals/monotonizer.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/monotonizer.cc rename to dll/win32/glu32/libnurbs/internals/monotonizer.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/monotonizer.h b/dll/win32/glu32/libnurbs/internals/monotonizer.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/monotonizer.h rename to dll/win32/glu32/libnurbs/internals/monotonizer.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/myassert.h b/dll/win32/glu32/libnurbs/internals/myassert.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/myassert.h rename to dll/win32/glu32/libnurbs/internals/myassert.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mycode.cc b/dll/win32/glu32/libnurbs/internals/mycode.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mycode.cc rename to dll/win32/glu32/libnurbs/internals/mycode.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mymath.h b/dll/win32/glu32/libnurbs/internals/mymath.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mymath.h rename to dll/win32/glu32/libnurbs/internals/mymath.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mysetjmp.h b/dll/win32/glu32/libnurbs/internals/mysetjmp.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mysetjmp.h rename to dll/win32/glu32/libnurbs/internals/mysetjmp.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/mystring.h b/dll/win32/glu32/libnurbs/internals/mystring.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/mystring.h rename to dll/win32/glu32/libnurbs/internals/mystring.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/nurbsconsts.h b/dll/win32/glu32/libnurbs/internals/nurbsconsts.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/nurbsconsts.h rename to dll/win32/glu32/libnurbs/internals/nurbsconsts.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/nurbsinterfac.cc b/dll/win32/glu32/libnurbs/internals/nurbsinterfac.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/nurbsinterfac.cc rename to dll/win32/glu32/libnurbs/internals/nurbsinterfac.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/nurbstess.cc b/dll/win32/glu32/libnurbs/internals/nurbstess.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/nurbstess.cc rename to dll/win32/glu32/libnurbs/internals/nurbstess.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/nurbstess.h b/dll/win32/glu32/libnurbs/internals/nurbstess.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/nurbstess.h rename to dll/win32/glu32/libnurbs/internals/nurbstess.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/patch.cc b/dll/win32/glu32/libnurbs/internals/patch.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/patch.cc rename to dll/win32/glu32/libnurbs/internals/patch.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/patch.h b/dll/win32/glu32/libnurbs/internals/patch.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/patch.h rename to dll/win32/glu32/libnurbs/internals/patch.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/patchlist.cc b/dll/win32/glu32/libnurbs/internals/patchlist.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/patchlist.cc rename to dll/win32/glu32/libnurbs/internals/patchlist.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/patchlist.h b/dll/win32/glu32/libnurbs/internals/patchlist.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/patchlist.h rename to dll/win32/glu32/libnurbs/internals/patchlist.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/pwlarc.h b/dll/win32/glu32/libnurbs/internals/pwlarc.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/pwlarc.h rename to dll/win32/glu32/libnurbs/internals/pwlarc.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/quilt.cc b/dll/win32/glu32/libnurbs/internals/quilt.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/quilt.cc rename to dll/win32/glu32/libnurbs/internals/quilt.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/quilt.h b/dll/win32/glu32/libnurbs/internals/quilt.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/quilt.h rename to dll/win32/glu32/libnurbs/internals/quilt.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/reader.cc b/dll/win32/glu32/libnurbs/internals/reader.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/reader.cc rename to dll/win32/glu32/libnurbs/internals/reader.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/reader.h b/dll/win32/glu32/libnurbs/internals/reader.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/reader.h rename to dll/win32/glu32/libnurbs/internals/reader.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/renderhints.cc b/dll/win32/glu32/libnurbs/internals/renderhints.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/renderhints.cc rename to dll/win32/glu32/libnurbs/internals/renderhints.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/renderhints.h b/dll/win32/glu32/libnurbs/internals/renderhints.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/renderhints.h rename to dll/win32/glu32/libnurbs/internals/renderhints.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/simplemath.h b/dll/win32/glu32/libnurbs/internals/simplemath.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/simplemath.h rename to dll/win32/glu32/libnurbs/internals/simplemath.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/slicer.cc b/dll/win32/glu32/libnurbs/internals/slicer.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/slicer.cc rename to dll/win32/glu32/libnurbs/internals/slicer.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/slicer.h b/dll/win32/glu32/libnurbs/internals/slicer.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/slicer.h rename to dll/win32/glu32/libnurbs/internals/slicer.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/sorter.cc b/dll/win32/glu32/libnurbs/internals/sorter.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/sorter.cc rename to dll/win32/glu32/libnurbs/internals/sorter.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/sorter.h b/dll/win32/glu32/libnurbs/internals/sorter.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/sorter.h rename to dll/win32/glu32/libnurbs/internals/sorter.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/splitarcs.cc b/dll/win32/glu32/libnurbs/internals/splitarcs.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/splitarcs.cc rename to dll/win32/glu32/libnurbs/internals/splitarcs.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/subdivider.cc b/dll/win32/glu32/libnurbs/internals/subdivider.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/subdivider.cc rename to dll/win32/glu32/libnurbs/internals/subdivider.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/subdivider.h b/dll/win32/glu32/libnurbs/internals/subdivider.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/subdivider.h rename to dll/win32/glu32/libnurbs/internals/subdivider.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/tobezier.cc b/dll/win32/glu32/libnurbs/internals/tobezier.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/tobezier.cc rename to dll/win32/glu32/libnurbs/internals/tobezier.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/trimline.cc b/dll/win32/glu32/libnurbs/internals/trimline.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/trimline.cc rename to dll/win32/glu32/libnurbs/internals/trimline.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/trimline.h b/dll/win32/glu32/libnurbs/internals/trimline.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/trimline.h rename to dll/win32/glu32/libnurbs/internals/trimline.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/trimregion.cc b/dll/win32/glu32/libnurbs/internals/trimregion.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/trimregion.cc rename to dll/win32/glu32/libnurbs/internals/trimregion.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/trimregion.h b/dll/win32/glu32/libnurbs/internals/trimregion.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/trimregion.h rename to dll/win32/glu32/libnurbs/internals/trimregion.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/trimvertex.h b/dll/win32/glu32/libnurbs/internals/trimvertex.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/trimvertex.h rename to dll/win32/glu32/libnurbs/internals/trimvertex.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/trimvertpool.cc b/dll/win32/glu32/libnurbs/internals/trimvertpool.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/trimvertpool.cc rename to dll/win32/glu32/libnurbs/internals/trimvertpool.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/trimvertpool.h b/dll/win32/glu32/libnurbs/internals/trimvertpool.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/trimvertpool.h rename to dll/win32/glu32/libnurbs/internals/trimvertpool.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/types.h b/dll/win32/glu32/libnurbs/internals/types.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/types.h rename to dll/win32/glu32/libnurbs/internals/types.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/uarray.cc b/dll/win32/glu32/libnurbs/internals/uarray.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/uarray.cc rename to dll/win32/glu32/libnurbs/internals/uarray.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/uarray.h b/dll/win32/glu32/libnurbs/internals/uarray.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/uarray.h rename to dll/win32/glu32/libnurbs/internals/uarray.h diff --git a/reactos/dll/win32/glu32/libnurbs/internals/varray.cc b/dll/win32/glu32/libnurbs/internals/varray.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/varray.cc rename to dll/win32/glu32/libnurbs/internals/varray.cc diff --git a/reactos/dll/win32/glu32/libnurbs/internals/varray.h b/dll/win32/glu32/libnurbs/internals/varray.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/internals/varray.h rename to dll/win32/glu32/libnurbs/internals/varray.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/definitions.h b/dll/win32/glu32/libnurbs/nurbtess/definitions.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/definitions.h rename to dll/win32/glu32/libnurbs/nurbtess/definitions.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/directedLine.cc b/dll/win32/glu32/libnurbs/nurbtess/directedLine.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/directedLine.cc rename to dll/win32/glu32/libnurbs/nurbtess/directedLine.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/directedLine.h b/dll/win32/glu32/libnurbs/nurbtess/directedLine.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/directedLine.h rename to dll/win32/glu32/libnurbs/nurbtess/directedLine.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/glimports.h b/dll/win32/glu32/libnurbs/nurbtess/glimports.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/glimports.h rename to dll/win32/glu32/libnurbs/nurbtess/glimports.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/gridWrap.cc b/dll/win32/glu32/libnurbs/nurbtess/gridWrap.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/gridWrap.cc rename to dll/win32/glu32/libnurbs/nurbtess/gridWrap.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/gridWrap.h b/dll/win32/glu32/libnurbs/nurbtess/gridWrap.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/gridWrap.h rename to dll/win32/glu32/libnurbs/nurbtess/gridWrap.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/monoChain.cc b/dll/win32/glu32/libnurbs/nurbtess/monoChain.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/monoChain.cc rename to dll/win32/glu32/libnurbs/nurbtess/monoChain.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/monoChain.h b/dll/win32/glu32/libnurbs/nurbtess/monoChain.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/monoChain.h rename to dll/win32/glu32/libnurbs/nurbtess/monoChain.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/monoPolyPart.cc b/dll/win32/glu32/libnurbs/nurbtess/monoPolyPart.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/monoPolyPart.cc rename to dll/win32/glu32/libnurbs/nurbtess/monoPolyPart.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/monoPolyPart.h b/dll/win32/glu32/libnurbs/nurbtess/monoPolyPart.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/monoPolyPart.h rename to dll/win32/glu32/libnurbs/nurbtess/monoPolyPart.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/monoTriangulation.cc b/dll/win32/glu32/libnurbs/nurbtess/monoTriangulation.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/monoTriangulation.cc rename to dll/win32/glu32/libnurbs/nurbtess/monoTriangulation.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/monoTriangulation.h b/dll/win32/glu32/libnurbs/nurbtess/monoTriangulation.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/monoTriangulation.h rename to dll/win32/glu32/libnurbs/nurbtess/monoTriangulation.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/mystdio.h b/dll/win32/glu32/libnurbs/nurbtess/mystdio.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/mystdio.h rename to dll/win32/glu32/libnurbs/nurbtess/mystdio.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/mystdlib.h b/dll/win32/glu32/libnurbs/nurbtess/mystdlib.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/mystdlib.h rename to dll/win32/glu32/libnurbs/nurbtess/mystdlib.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/partitionX.cc b/dll/win32/glu32/libnurbs/nurbtess/partitionX.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/partitionX.cc rename to dll/win32/glu32/libnurbs/nurbtess/partitionX.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/partitionX.h b/dll/win32/glu32/libnurbs/nurbtess/partitionX.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/partitionX.h rename to dll/win32/glu32/libnurbs/nurbtess/partitionX.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/partitionY.cc b/dll/win32/glu32/libnurbs/nurbtess/partitionY.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/partitionY.cc rename to dll/win32/glu32/libnurbs/nurbtess/partitionY.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/partitionY.h b/dll/win32/glu32/libnurbs/nurbtess/partitionY.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/partitionY.h rename to dll/win32/glu32/libnurbs/nurbtess/partitionY.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/polyDBG.cc b/dll/win32/glu32/libnurbs/nurbtess/polyDBG.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/polyDBG.cc rename to dll/win32/glu32/libnurbs/nurbtess/polyDBG.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/polyDBG.h b/dll/win32/glu32/libnurbs/nurbtess/polyDBG.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/polyDBG.h rename to dll/win32/glu32/libnurbs/nurbtess/polyDBG.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/polyUtil.cc b/dll/win32/glu32/libnurbs/nurbtess/polyUtil.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/polyUtil.cc rename to dll/win32/glu32/libnurbs/nurbtess/polyUtil.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/polyUtil.h b/dll/win32/glu32/libnurbs/nurbtess/polyUtil.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/polyUtil.h rename to dll/win32/glu32/libnurbs/nurbtess/polyUtil.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/primitiveStream.cc b/dll/win32/glu32/libnurbs/nurbtess/primitiveStream.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/primitiveStream.cc rename to dll/win32/glu32/libnurbs/nurbtess/primitiveStream.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/primitiveStream.h b/dll/win32/glu32/libnurbs/nurbtess/primitiveStream.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/primitiveStream.h rename to dll/win32/glu32/libnurbs/nurbtess/primitiveStream.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/quicksort.cc b/dll/win32/glu32/libnurbs/nurbtess/quicksort.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/quicksort.cc rename to dll/win32/glu32/libnurbs/nurbtess/quicksort.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/quicksort.h b/dll/win32/glu32/libnurbs/nurbtess/quicksort.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/quicksort.h rename to dll/win32/glu32/libnurbs/nurbtess/quicksort.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/rectBlock.cc b/dll/win32/glu32/libnurbs/nurbtess/rectBlock.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/rectBlock.cc rename to dll/win32/glu32/libnurbs/nurbtess/rectBlock.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/rectBlock.h b/dll/win32/glu32/libnurbs/nurbtess/rectBlock.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/rectBlock.h rename to dll/win32/glu32/libnurbs/nurbtess/rectBlock.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleComp.cc b/dll/win32/glu32/libnurbs/nurbtess/sampleComp.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleComp.cc rename to dll/win32/glu32/libnurbs/nurbtess/sampleComp.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleComp.h b/dll/win32/glu32/libnurbs/nurbtess/sampleComp.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleComp.h rename to dll/win32/glu32/libnurbs/nurbtess/sampleComp.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompBot.cc b/dll/win32/glu32/libnurbs/nurbtess/sampleCompBot.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompBot.cc rename to dll/win32/glu32/libnurbs/nurbtess/sampleCompBot.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompBot.h b/dll/win32/glu32/libnurbs/nurbtess/sampleCompBot.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompBot.h rename to dll/win32/glu32/libnurbs/nurbtess/sampleCompBot.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompRight.cc b/dll/win32/glu32/libnurbs/nurbtess/sampleCompRight.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompRight.cc rename to dll/win32/glu32/libnurbs/nurbtess/sampleCompRight.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompRight.h b/dll/win32/glu32/libnurbs/nurbtess/sampleCompRight.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompRight.h rename to dll/win32/glu32/libnurbs/nurbtess/sampleCompRight.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompTop.cc b/dll/win32/glu32/libnurbs/nurbtess/sampleCompTop.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompTop.cc rename to dll/win32/glu32/libnurbs/nurbtess/sampleCompTop.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompTop.h b/dll/win32/glu32/libnurbs/nurbtess/sampleCompTop.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleCompTop.h rename to dll/win32/glu32/libnurbs/nurbtess/sampleCompTop.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.cc b/dll/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.cc rename to dll/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.h b/dll/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.h rename to dll/win32/glu32/libnurbs/nurbtess/sampleMonoPoly.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampledLine.cc b/dll/win32/glu32/libnurbs/nurbtess/sampledLine.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampledLine.cc rename to dll/win32/glu32/libnurbs/nurbtess/sampledLine.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/sampledLine.h b/dll/win32/glu32/libnurbs/nurbtess/sampledLine.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/sampledLine.h rename to dll/win32/glu32/libnurbs/nurbtess/sampledLine.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/searchTree.cc b/dll/win32/glu32/libnurbs/nurbtess/searchTree.cc similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/searchTree.cc rename to dll/win32/glu32/libnurbs/nurbtess/searchTree.cc diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/searchTree.h b/dll/win32/glu32/libnurbs/nurbtess/searchTree.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/searchTree.h rename to dll/win32/glu32/libnurbs/nurbtess/searchTree.h diff --git a/reactos/dll/win32/glu32/libnurbs/nurbtess/zlassert.h b/dll/win32/glu32/libnurbs/nurbtess/zlassert.h similarity index 100% rename from reactos/dll/win32/glu32/libnurbs/nurbtess/zlassert.h rename to dll/win32/glu32/libnurbs/nurbtess/zlassert.h diff --git a/reactos/dll/win32/glu32/libtess/README b/dll/win32/glu32/libtess/README similarity index 100% rename from reactos/dll/win32/glu32/libtess/README rename to dll/win32/glu32/libtess/README diff --git a/reactos/dll/win32/glu32/libtess/alg-outline b/dll/win32/glu32/libtess/alg-outline similarity index 100% rename from reactos/dll/win32/glu32/libtess/alg-outline rename to dll/win32/glu32/libtess/alg-outline diff --git a/reactos/dll/win32/glu32/libtess/dict-list.h b/dll/win32/glu32/libtess/dict-list.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/dict-list.h rename to dll/win32/glu32/libtess/dict-list.h diff --git a/reactos/dll/win32/glu32/libtess/dict.c b/dll/win32/glu32/libtess/dict.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/dict.c rename to dll/win32/glu32/libtess/dict.c diff --git a/reactos/dll/win32/glu32/libtess/dict.h b/dll/win32/glu32/libtess/dict.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/dict.h rename to dll/win32/glu32/libtess/dict.h diff --git a/reactos/dll/win32/glu32/libtess/geom.c b/dll/win32/glu32/libtess/geom.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/geom.c rename to dll/win32/glu32/libtess/geom.c diff --git a/reactos/dll/win32/glu32/libtess/geom.h b/dll/win32/glu32/libtess/geom.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/geom.h rename to dll/win32/glu32/libtess/geom.h diff --git a/reactos/dll/win32/glu32/libtess/memalloc.c b/dll/win32/glu32/libtess/memalloc.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/memalloc.c rename to dll/win32/glu32/libtess/memalloc.c diff --git a/reactos/dll/win32/glu32/libtess/memalloc.h b/dll/win32/glu32/libtess/memalloc.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/memalloc.h rename to dll/win32/glu32/libtess/memalloc.h diff --git a/reactos/dll/win32/glu32/libtess/mesh.c b/dll/win32/glu32/libtess/mesh.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/mesh.c rename to dll/win32/glu32/libtess/mesh.c diff --git a/reactos/dll/win32/glu32/libtess/mesh.h b/dll/win32/glu32/libtess/mesh.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/mesh.h rename to dll/win32/glu32/libtess/mesh.h diff --git a/reactos/dll/win32/glu32/libtess/normal.c b/dll/win32/glu32/libtess/normal.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/normal.c rename to dll/win32/glu32/libtess/normal.c diff --git a/reactos/dll/win32/glu32/libtess/normal.h b/dll/win32/glu32/libtess/normal.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/normal.h rename to dll/win32/glu32/libtess/normal.h diff --git a/reactos/dll/win32/glu32/libtess/priorityq-heap.c b/dll/win32/glu32/libtess/priorityq-heap.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/priorityq-heap.c rename to dll/win32/glu32/libtess/priorityq-heap.c diff --git a/reactos/dll/win32/glu32/libtess/priorityq-heap.h b/dll/win32/glu32/libtess/priorityq-heap.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/priorityq-heap.h rename to dll/win32/glu32/libtess/priorityq-heap.h diff --git a/reactos/dll/win32/glu32/libtess/priorityq-sort.h b/dll/win32/glu32/libtess/priorityq-sort.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/priorityq-sort.h rename to dll/win32/glu32/libtess/priorityq-sort.h diff --git a/reactos/dll/win32/glu32/libtess/priorityq.c b/dll/win32/glu32/libtess/priorityq.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/priorityq.c rename to dll/win32/glu32/libtess/priorityq.c diff --git a/reactos/dll/win32/glu32/libtess/priorityq.h b/dll/win32/glu32/libtess/priorityq.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/priorityq.h rename to dll/win32/glu32/libtess/priorityq.h diff --git a/reactos/dll/win32/glu32/libtess/render.c b/dll/win32/glu32/libtess/render.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/render.c rename to dll/win32/glu32/libtess/render.c diff --git a/reactos/dll/win32/glu32/libtess/render.h b/dll/win32/glu32/libtess/render.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/render.h rename to dll/win32/glu32/libtess/render.h diff --git a/reactos/dll/win32/glu32/libtess/sweep.c b/dll/win32/glu32/libtess/sweep.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/sweep.c rename to dll/win32/glu32/libtess/sweep.c diff --git a/reactos/dll/win32/glu32/libtess/sweep.h b/dll/win32/glu32/libtess/sweep.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/sweep.h rename to dll/win32/glu32/libtess/sweep.h diff --git a/reactos/dll/win32/glu32/libtess/tess.c b/dll/win32/glu32/libtess/tess.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/tess.c rename to dll/win32/glu32/libtess/tess.c diff --git a/reactos/dll/win32/glu32/libtess/tess.h b/dll/win32/glu32/libtess/tess.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/tess.h rename to dll/win32/glu32/libtess/tess.h diff --git a/reactos/dll/win32/glu32/libtess/tessmono.c b/dll/win32/glu32/libtess/tessmono.c similarity index 100% rename from reactos/dll/win32/glu32/libtess/tessmono.c rename to dll/win32/glu32/libtess/tessmono.c diff --git a/reactos/dll/win32/glu32/libtess/tessmono.h b/dll/win32/glu32/libtess/tessmono.h similarity index 100% rename from reactos/dll/win32/glu32/libtess/tessmono.h rename to dll/win32/glu32/libtess/tessmono.h diff --git a/reactos/dll/win32/glu32/libutil/error.c b/dll/win32/glu32/libutil/error.c similarity index 100% rename from reactos/dll/win32/glu32/libutil/error.c rename to dll/win32/glu32/libutil/error.c diff --git a/reactos/dll/win32/glu32/libutil/glue.c b/dll/win32/glu32/libutil/glue.c similarity index 100% rename from reactos/dll/win32/glu32/libutil/glue.c rename to dll/win32/glu32/libutil/glue.c diff --git a/reactos/dll/win32/glu32/libutil/gluint.h b/dll/win32/glu32/libutil/gluint.h similarity index 100% rename from reactos/dll/win32/glu32/libutil/gluint.h rename to dll/win32/glu32/libutil/gluint.h diff --git a/reactos/dll/win32/glu32/libutil/mipmap.c b/dll/win32/glu32/libutil/mipmap.c similarity index 100% rename from reactos/dll/win32/glu32/libutil/mipmap.c rename to dll/win32/glu32/libutil/mipmap.c diff --git a/reactos/dll/win32/glu32/libutil/project.c b/dll/win32/glu32/libutil/project.c similarity index 100% rename from reactos/dll/win32/glu32/libutil/project.c rename to dll/win32/glu32/libutil/project.c diff --git a/reactos/dll/win32/glu32/libutil/quad.c b/dll/win32/glu32/libutil/quad.c similarity index 100% rename from reactos/dll/win32/glu32/libutil/quad.c rename to dll/win32/glu32/libutil/quad.c diff --git a/reactos/dll/win32/glu32/libutil/registry.c b/dll/win32/glu32/libutil/registry.c similarity index 100% rename from reactos/dll/win32/glu32/libutil/registry.c rename to dll/win32/glu32/libutil/registry.c diff --git a/reactos/dll/win32/hhctrl.ocx/Cs.rc b/dll/win32/hhctrl.ocx/Cs.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Cs.rc rename to dll/win32/hhctrl.ocx/Cs.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Da.rc b/dll/win32/hhctrl.ocx/Da.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Da.rc rename to dll/win32/hhctrl.ocx/Da.rc diff --git a/reactos/dll/win32/hhctrl.ocx/De.rc b/dll/win32/hhctrl.ocx/De.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/De.rc rename to dll/win32/hhctrl.ocx/De.rc diff --git a/reactos/dll/win32/hhctrl.ocx/El.rc b/dll/win32/hhctrl.ocx/El.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/El.rc rename to dll/win32/hhctrl.ocx/El.rc diff --git a/reactos/dll/win32/hhctrl.ocx/En.rc b/dll/win32/hhctrl.ocx/En.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/En.rc rename to dll/win32/hhctrl.ocx/En.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Fi.rc b/dll/win32/hhctrl.ocx/Fi.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Fi.rc rename to dll/win32/hhctrl.ocx/Fi.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Fr.rc b/dll/win32/hhctrl.ocx/Fr.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Fr.rc rename to dll/win32/hhctrl.ocx/Fr.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Hu.rc b/dll/win32/hhctrl.ocx/Hu.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Hu.rc rename to dll/win32/hhctrl.ocx/Hu.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Ko.rc b/dll/win32/hhctrl.ocx/Ko.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Ko.rc rename to dll/win32/hhctrl.ocx/Ko.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Nl.rc b/dll/win32/hhctrl.ocx/Nl.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Nl.rc rename to dll/win32/hhctrl.ocx/Nl.rc diff --git a/reactos/dll/win32/hhctrl.ocx/No.rc b/dll/win32/hhctrl.ocx/No.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/No.rc rename to dll/win32/hhctrl.ocx/No.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Pl.rc b/dll/win32/hhctrl.ocx/Pl.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Pl.rc rename to dll/win32/hhctrl.ocx/Pl.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Ru.rc b/dll/win32/hhctrl.ocx/Ru.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Ru.rc rename to dll/win32/hhctrl.ocx/Ru.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Si.rc b/dll/win32/hhctrl.ocx/Si.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Si.rc rename to dll/win32/hhctrl.ocx/Si.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Sv.rc b/dll/win32/hhctrl.ocx/Sv.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Sv.rc rename to dll/win32/hhctrl.ocx/Sv.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Tr.rc b/dll/win32/hhctrl.ocx/Tr.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Tr.rc rename to dll/win32/hhctrl.ocx/Tr.rc diff --git a/reactos/dll/win32/hhctrl.ocx/Zh.rc b/dll/win32/hhctrl.ocx/Zh.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/Zh.rc rename to dll/win32/hhctrl.ocx/Zh.rc diff --git a/reactos/dll/win32/hhctrl.ocx/chm.c b/dll/win32/hhctrl.ocx/chm.c similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/chm.c rename to dll/win32/hhctrl.ocx/chm.c diff --git a/reactos/dll/win32/hhctrl.ocx/content.c b/dll/win32/hhctrl.ocx/content.c similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/content.c rename to dll/win32/hhctrl.ocx/content.c diff --git a/reactos/dll/win32/hhctrl.ocx/help.c b/dll/win32/hhctrl.ocx/help.c similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/help.c rename to dll/win32/hhctrl.ocx/help.c diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.c b/dll/win32/hhctrl.ocx/hhctrl.c similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/hhctrl.c rename to dll/win32/hhctrl.ocx/hhctrl.c diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.h b/dll/win32/hhctrl.ocx/hhctrl.h similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/hhctrl.h rename to dll/win32/hhctrl.ocx/hhctrl.h diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.ocx.rbuild b/dll/win32/hhctrl.ocx/hhctrl.ocx.rbuild similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/hhctrl.ocx.rbuild rename to dll/win32/hhctrl.ocx/hhctrl.ocx.rbuild diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.ocx.spec b/dll/win32/hhctrl.ocx/hhctrl.ocx.spec similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/hhctrl.ocx.spec rename to dll/win32/hhctrl.ocx/hhctrl.ocx.spec diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.ocx_ros.diff b/dll/win32/hhctrl.ocx/hhctrl.ocx_ros.diff similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/hhctrl.ocx_ros.diff rename to dll/win32/hhctrl.ocx/hhctrl.ocx_ros.diff diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.rc b/dll/win32/hhctrl.ocx/hhctrl.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/hhctrl.rc rename to dll/win32/hhctrl.ocx/hhctrl.rc diff --git a/reactos/dll/win32/hhctrl.ocx/regsvr.c b/dll/win32/hhctrl.ocx/regsvr.c similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/regsvr.c rename to dll/win32/hhctrl.ocx/regsvr.c diff --git a/reactos/dll/win32/hhctrl.ocx/resource.h b/dll/win32/hhctrl.ocx/resource.h similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/resource.h rename to dll/win32/hhctrl.ocx/resource.h diff --git a/reactos/dll/win32/hhctrl.ocx/version.rc b/dll/win32/hhctrl.ocx/version.rc similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/version.rc rename to dll/win32/hhctrl.ocx/version.rc diff --git a/reactos/dll/win32/hhctrl.ocx/webbrowser.c b/dll/win32/hhctrl.ocx/webbrowser.c similarity index 100% rename from reactos/dll/win32/hhctrl.ocx/webbrowser.c rename to dll/win32/hhctrl.ocx/webbrowser.c diff --git a/reactos/dll/win32/hid/hid.c b/dll/win32/hid/hid.c similarity index 100% rename from reactos/dll/win32/hid/hid.c rename to dll/win32/hid/hid.c diff --git a/reactos/dll/win32/hid/hid.def b/dll/win32/hid/hid.def similarity index 100% rename from reactos/dll/win32/hid/hid.def rename to dll/win32/hid/hid.def diff --git a/reactos/dll/win32/hid/hid.rbuild b/dll/win32/hid/hid.rbuild similarity index 100% rename from reactos/dll/win32/hid/hid.rbuild rename to dll/win32/hid/hid.rbuild diff --git a/reactos/dll/win32/hid/hid.rc b/dll/win32/hid/hid.rc similarity index 100% rename from reactos/dll/win32/hid/hid.rc rename to dll/win32/hid/hid.rc diff --git a/reactos/dll/win32/hid/precomp.h b/dll/win32/hid/precomp.h similarity index 100% rename from reactos/dll/win32/hid/precomp.h rename to dll/win32/hid/precomp.h diff --git a/reactos/dll/win32/hid/stubs.c b/dll/win32/hid/stubs.c similarity index 100% rename from reactos/dll/win32/hid/stubs.c rename to dll/win32/hid/stubs.c diff --git a/reactos/dll/win32/hlink/browse_ctx.c b/dll/win32/hlink/browse_ctx.c similarity index 100% rename from reactos/dll/win32/hlink/browse_ctx.c rename to dll/win32/hlink/browse_ctx.c diff --git a/reactos/dll/win32/hlink/extserv.c b/dll/win32/hlink/extserv.c similarity index 100% rename from reactos/dll/win32/hlink/extserv.c rename to dll/win32/hlink/extserv.c diff --git a/reactos/dll/win32/hlink/hlink.rbuild b/dll/win32/hlink/hlink.rbuild similarity index 100% rename from reactos/dll/win32/hlink/hlink.rbuild rename to dll/win32/hlink/hlink.rbuild diff --git a/reactos/dll/win32/hlink/hlink.spec b/dll/win32/hlink/hlink.spec similarity index 100% rename from reactos/dll/win32/hlink/hlink.spec rename to dll/win32/hlink/hlink.spec diff --git a/reactos/dll/win32/hlink/hlink_main.c b/dll/win32/hlink/hlink_main.c similarity index 100% rename from reactos/dll/win32/hlink/hlink_main.c rename to dll/win32/hlink/hlink_main.c diff --git a/reactos/dll/win32/hlink/hlink_private.h b/dll/win32/hlink/hlink_private.h similarity index 100% rename from reactos/dll/win32/hlink/hlink_private.h rename to dll/win32/hlink/hlink_private.h diff --git a/reactos/dll/win32/hlink/link.c b/dll/win32/hlink/link.c similarity index 100% rename from reactos/dll/win32/hlink/link.c rename to dll/win32/hlink/link.c diff --git a/reactos/dll/win32/icmp/Makefile.in b/dll/win32/icmp/Makefile.in similarity index 100% rename from reactos/dll/win32/icmp/Makefile.in rename to dll/win32/icmp/Makefile.in diff --git a/reactos/dll/win32/icmp/icmp.dsp b/dll/win32/icmp/icmp.dsp similarity index 100% rename from reactos/dll/win32/icmp/icmp.dsp rename to dll/win32/icmp/icmp.dsp diff --git a/reactos/dll/win32/icmp/icmp.rbuild b/dll/win32/icmp/icmp.rbuild similarity index 100% rename from reactos/dll/win32/icmp/icmp.rbuild rename to dll/win32/icmp/icmp.rbuild diff --git a/reactos/dll/win32/icmp/icmp.rc b/dll/win32/icmp/icmp.rc similarity index 100% rename from reactos/dll/win32/icmp/icmp.rc rename to dll/win32/icmp/icmp.rc diff --git a/reactos/dll/win32/icmp/icmp.spec b/dll/win32/icmp/icmp.spec similarity index 100% rename from reactos/dll/win32/icmp/icmp.spec rename to dll/win32/icmp/icmp.spec diff --git a/reactos/dll/win32/icmp/icmp_main.c b/dll/win32/icmp/icmp_main.c similarity index 100% rename from reactos/dll/win32/icmp/icmp_main.c rename to dll/win32/icmp/icmp_main.c diff --git a/reactos/dll/win32/icmp/ip.h b/dll/win32/icmp/ip.h similarity index 100% rename from reactos/dll/win32/icmp/ip.h rename to dll/win32/icmp/ip.h diff --git a/reactos/dll/win32/icmp/ip_icmp.h b/dll/win32/icmp/ip_icmp.h similarity index 100% rename from reactos/dll/win32/icmp/ip_icmp.h rename to dll/win32/icmp/ip_icmp.h diff --git a/reactos/dll/win32/imagehlp/access.c b/dll/win32/imagehlp/access.c similarity index 100% rename from reactos/dll/win32/imagehlp/access.c rename to dll/win32/imagehlp/access.c diff --git a/reactos/dll/win32/imagehlp/imagehlp.rbuild b/dll/win32/imagehlp/imagehlp.rbuild similarity index 100% rename from reactos/dll/win32/imagehlp/imagehlp.rbuild rename to dll/win32/imagehlp/imagehlp.rbuild diff --git a/reactos/dll/win32/imagehlp/imagehlp.rc b/dll/win32/imagehlp/imagehlp.rc similarity index 100% rename from reactos/dll/win32/imagehlp/imagehlp.rc rename to dll/win32/imagehlp/imagehlp.rc diff --git a/reactos/dll/win32/imagehlp/imagehlp.spec b/dll/win32/imagehlp/imagehlp.spec similarity index 100% rename from reactos/dll/win32/imagehlp/imagehlp.spec rename to dll/win32/imagehlp/imagehlp.spec diff --git a/reactos/dll/win32/imagehlp/imagehlp_main.c b/dll/win32/imagehlp/imagehlp_main.c similarity index 100% rename from reactos/dll/win32/imagehlp/imagehlp_main.c rename to dll/win32/imagehlp/imagehlp_main.c diff --git a/reactos/dll/win32/imagehlp/integrity.c b/dll/win32/imagehlp/integrity.c similarity index 100% rename from reactos/dll/win32/imagehlp/integrity.c rename to dll/win32/imagehlp/integrity.c diff --git a/reactos/dll/win32/imagehlp/modify.c b/dll/win32/imagehlp/modify.c similarity index 100% rename from reactos/dll/win32/imagehlp/modify.c rename to dll/win32/imagehlp/modify.c diff --git a/reactos/dll/win32/imagehlp/precomp.h b/dll/win32/imagehlp/precomp.h similarity index 100% rename from reactos/dll/win32/imagehlp/precomp.h rename to dll/win32/imagehlp/precomp.h diff --git a/reactos/dll/win32/imm32/imm.c b/dll/win32/imm32/imm.c similarity index 100% rename from reactos/dll/win32/imm32/imm.c rename to dll/win32/imm32/imm.c diff --git a/reactos/dll/win32/imm32/imm.spec b/dll/win32/imm32/imm.spec similarity index 100% rename from reactos/dll/win32/imm32/imm.spec rename to dll/win32/imm32/imm.spec diff --git a/reactos/dll/win32/imm32/imm32.rbuild b/dll/win32/imm32/imm32.rbuild similarity index 100% rename from reactos/dll/win32/imm32/imm32.rbuild rename to dll/win32/imm32/imm32.rbuild diff --git a/reactos/dll/win32/imm32/imm32.spec b/dll/win32/imm32/imm32.spec similarity index 100% rename from reactos/dll/win32/imm32/imm32.spec rename to dll/win32/imm32/imm32.spec diff --git a/reactos/dll/win32/imm32/version.rc b/dll/win32/imm32/version.rc similarity index 100% rename from reactos/dll/win32/imm32/version.rc rename to dll/win32/imm32/version.rc diff --git a/reactos/dll/win32/inetcomm/inetcomm.rbuild b/dll/win32/inetcomm/inetcomm.rbuild similarity index 100% rename from reactos/dll/win32/inetcomm/inetcomm.rbuild rename to dll/win32/inetcomm/inetcomm.rbuild diff --git a/reactos/dll/win32/inetcomm/inetcomm.spec b/dll/win32/inetcomm/inetcomm.spec similarity index 100% rename from reactos/dll/win32/inetcomm/inetcomm.spec rename to dll/win32/inetcomm/inetcomm.spec diff --git a/reactos/dll/win32/inetcomm/inetcomm_main.c b/dll/win32/inetcomm/inetcomm_main.c similarity index 100% rename from reactos/dll/win32/inetcomm/inetcomm_main.c rename to dll/win32/inetcomm/inetcomm_main.c diff --git a/reactos/dll/win32/inetcomm/inetcomm_private.h b/dll/win32/inetcomm/inetcomm_private.h similarity index 100% rename from reactos/dll/win32/inetcomm/inetcomm_private.h rename to dll/win32/inetcomm/inetcomm_private.h diff --git a/reactos/dll/win32/inetcomm/internettransport.c b/dll/win32/inetcomm/internettransport.c similarity index 100% rename from reactos/dll/win32/inetcomm/internettransport.c rename to dll/win32/inetcomm/internettransport.c diff --git a/reactos/dll/win32/inetcomm/mimeole.c b/dll/win32/inetcomm/mimeole.c similarity index 100% rename from reactos/dll/win32/inetcomm/mimeole.c rename to dll/win32/inetcomm/mimeole.c diff --git a/reactos/dll/win32/inetcomm/regsvr.c b/dll/win32/inetcomm/regsvr.c similarity index 100% rename from reactos/dll/win32/inetcomm/regsvr.c rename to dll/win32/inetcomm/regsvr.c diff --git a/reactos/dll/win32/inetmib1/inetmib1.rbuild b/dll/win32/inetmib1/inetmib1.rbuild similarity index 100% rename from reactos/dll/win32/inetmib1/inetmib1.rbuild rename to dll/win32/inetmib1/inetmib1.rbuild diff --git a/reactos/dll/win32/inetmib1/inetmib1.spec b/dll/win32/inetmib1/inetmib1.spec similarity index 100% rename from reactos/dll/win32/inetmib1/inetmib1.spec rename to dll/win32/inetmib1/inetmib1.spec diff --git a/reactos/dll/win32/inetmib1/main.c b/dll/win32/inetmib1/main.c similarity index 100% rename from reactos/dll/win32/inetmib1/main.c rename to dll/win32/inetmib1/main.c diff --git a/reactos/dll/win32/iphlpapi/Makefile.in b/dll/win32/iphlpapi/Makefile.in similarity index 100% rename from reactos/dll/win32/iphlpapi/Makefile.in rename to dll/win32/iphlpapi/Makefile.in diff --git a/reactos/dll/win32/iphlpapi/dhcp.h b/dll/win32/iphlpapi/dhcp.h similarity index 100% rename from reactos/dll/win32/iphlpapi/dhcp.h rename to dll/win32/iphlpapi/dhcp.h diff --git a/reactos/dll/win32/iphlpapi/dhcp_reactos.c b/dll/win32/iphlpapi/dhcp_reactos.c similarity index 100% rename from reactos/dll/win32/iphlpapi/dhcp_reactos.c rename to dll/win32/iphlpapi/dhcp_reactos.c diff --git a/reactos/dll/win32/iphlpapi/ifenum.h b/dll/win32/iphlpapi/ifenum.h similarity index 100% rename from reactos/dll/win32/iphlpapi/ifenum.h rename to dll/win32/iphlpapi/ifenum.h diff --git a/reactos/dll/win32/iphlpapi/ifenum_reactos.c b/dll/win32/iphlpapi/ifenum_reactos.c similarity index 100% rename from reactos/dll/win32/iphlpapi/ifenum_reactos.c rename to dll/win32/iphlpapi/ifenum_reactos.c diff --git a/reactos/dll/win32/iphlpapi/iphlpapi.rbuild b/dll/win32/iphlpapi/iphlpapi.rbuild similarity index 100% rename from reactos/dll/win32/iphlpapi/iphlpapi.rbuild rename to dll/win32/iphlpapi/iphlpapi.rbuild diff --git a/reactos/dll/win32/iphlpapi/iphlpapi.rc b/dll/win32/iphlpapi/iphlpapi.rc similarity index 100% rename from reactos/dll/win32/iphlpapi/iphlpapi.rc rename to dll/win32/iphlpapi/iphlpapi.rc diff --git a/reactos/dll/win32/iphlpapi/iphlpapi.spec b/dll/win32/iphlpapi/iphlpapi.spec similarity index 100% rename from reactos/dll/win32/iphlpapi/iphlpapi.spec rename to dll/win32/iphlpapi/iphlpapi.spec diff --git a/reactos/dll/win32/iphlpapi/iphlpapi_main.c b/dll/win32/iphlpapi/iphlpapi_main.c similarity index 100% rename from reactos/dll/win32/iphlpapi/iphlpapi_main.c rename to dll/win32/iphlpapi/iphlpapi_main.c diff --git a/reactos/dll/win32/iphlpapi/iphlpapi_private.h b/dll/win32/iphlpapi/iphlpapi_private.h similarity index 100% rename from reactos/dll/win32/iphlpapi/iphlpapi_private.h rename to dll/win32/iphlpapi/iphlpapi_private.h diff --git a/reactos/dll/win32/iphlpapi/ipstats.h b/dll/win32/iphlpapi/ipstats.h similarity index 100% rename from reactos/dll/win32/iphlpapi/ipstats.h rename to dll/win32/iphlpapi/ipstats.h diff --git a/reactos/dll/win32/iphlpapi/ipstats_reactos.c b/dll/win32/iphlpapi/ipstats_reactos.c similarity index 100% rename from reactos/dll/win32/iphlpapi/ipstats_reactos.c rename to dll/win32/iphlpapi/ipstats_reactos.c diff --git a/reactos/dll/win32/iphlpapi/media.c b/dll/win32/iphlpapi/media.c similarity index 100% rename from reactos/dll/win32/iphlpapi/media.c rename to dll/win32/iphlpapi/media.c diff --git a/reactos/dll/win32/iphlpapi/merge-notes.txt b/dll/win32/iphlpapi/merge-notes.txt similarity index 100% rename from reactos/dll/win32/iphlpapi/merge-notes.txt rename to dll/win32/iphlpapi/merge-notes.txt diff --git a/reactos/dll/win32/iphlpapi/registry.c b/dll/win32/iphlpapi/registry.c similarity index 100% rename from reactos/dll/win32/iphlpapi/registry.c rename to dll/win32/iphlpapi/registry.c diff --git a/reactos/dll/win32/iphlpapi/resinfo.c b/dll/win32/iphlpapi/resinfo.c similarity index 100% rename from reactos/dll/win32/iphlpapi/resinfo.c rename to dll/win32/iphlpapi/resinfo.c diff --git a/reactos/dll/win32/iphlpapi/resinfo.h b/dll/win32/iphlpapi/resinfo.h similarity index 100% rename from reactos/dll/win32/iphlpapi/resinfo.h rename to dll/win32/iphlpapi/resinfo.h diff --git a/reactos/dll/win32/iphlpapi/resinfo_reactos.c b/dll/win32/iphlpapi/resinfo_reactos.c similarity index 100% rename from reactos/dll/win32/iphlpapi/resinfo_reactos.c rename to dll/win32/iphlpapi/resinfo_reactos.c diff --git a/reactos/dll/win32/iphlpapi/route.c b/dll/win32/iphlpapi/route.c similarity index 100% rename from reactos/dll/win32/iphlpapi/route.c rename to dll/win32/iphlpapi/route.c diff --git a/reactos/dll/win32/iphlpapi/route.h b/dll/win32/iphlpapi/route.h similarity index 100% rename from reactos/dll/win32/iphlpapi/route.h rename to dll/win32/iphlpapi/route.h diff --git a/reactos/dll/win32/iphlpapi/route_reactos.c b/dll/win32/iphlpapi/route_reactos.c similarity index 100% rename from reactos/dll/win32/iphlpapi/route_reactos.c rename to dll/win32/iphlpapi/route_reactos.c diff --git a/reactos/dll/win32/iprtprio/iprtprio.c b/dll/win32/iprtprio/iprtprio.c similarity index 100% rename from reactos/dll/win32/iprtprio/iprtprio.c rename to dll/win32/iprtprio/iprtprio.c diff --git a/reactos/dll/win32/iprtprio/iprtprio.def b/dll/win32/iprtprio/iprtprio.def similarity index 100% rename from reactos/dll/win32/iprtprio/iprtprio.def rename to dll/win32/iprtprio/iprtprio.def diff --git a/reactos/dll/win32/iprtprio/iprtprio.rc b/dll/win32/iprtprio/iprtprio.rc similarity index 100% rename from reactos/dll/win32/iprtprio/iprtprio.rc rename to dll/win32/iprtprio/iprtprio.rc diff --git a/reactos/dll/win32/jscript/array.c b/dll/win32/jscript/array.c similarity index 100% rename from reactos/dll/win32/jscript/array.c rename to dll/win32/jscript/array.c diff --git a/reactos/dll/win32/jscript/bool.c b/dll/win32/jscript/bool.c similarity index 100% rename from reactos/dll/win32/jscript/bool.c rename to dll/win32/jscript/bool.c diff --git a/reactos/dll/win32/jscript/dispex.c b/dll/win32/jscript/dispex.c similarity index 100% rename from reactos/dll/win32/jscript/dispex.c rename to dll/win32/jscript/dispex.c diff --git a/reactos/dll/win32/jscript/engine.c b/dll/win32/jscript/engine.c similarity index 100% rename from reactos/dll/win32/jscript/engine.c rename to dll/win32/jscript/engine.c diff --git a/reactos/dll/win32/jscript/engine.h b/dll/win32/jscript/engine.h similarity index 100% rename from reactos/dll/win32/jscript/engine.h rename to dll/win32/jscript/engine.h diff --git a/reactos/dll/win32/jscript/function.c b/dll/win32/jscript/function.c similarity index 100% rename from reactos/dll/win32/jscript/function.c rename to dll/win32/jscript/function.c diff --git a/reactos/dll/win32/jscript/global.c b/dll/win32/jscript/global.c similarity index 100% rename from reactos/dll/win32/jscript/global.c rename to dll/win32/jscript/global.c diff --git a/reactos/dll/win32/jscript/jscript.c b/dll/win32/jscript/jscript.c similarity index 100% rename from reactos/dll/win32/jscript/jscript.c rename to dll/win32/jscript/jscript.c diff --git a/reactos/dll/win32/jscript/jscript.h b/dll/win32/jscript/jscript.h similarity index 100% rename from reactos/dll/win32/jscript/jscript.h rename to dll/win32/jscript/jscript.h diff --git a/reactos/dll/win32/jscript/jscript.inf b/dll/win32/jscript/jscript.inf similarity index 100% rename from reactos/dll/win32/jscript/jscript.inf rename to dll/win32/jscript/jscript.inf diff --git a/reactos/dll/win32/jscript/jscript.rbuild b/dll/win32/jscript/jscript.rbuild similarity index 100% rename from reactos/dll/win32/jscript/jscript.rbuild rename to dll/win32/jscript/jscript.rbuild diff --git a/reactos/dll/win32/jscript/jscript.spec b/dll/win32/jscript/jscript.spec similarity index 100% rename from reactos/dll/win32/jscript/jscript.spec rename to dll/win32/jscript/jscript.spec diff --git a/reactos/dll/win32/jscript/jscript_main.c b/dll/win32/jscript/jscript_main.c similarity index 100% rename from reactos/dll/win32/jscript/jscript_main.c rename to dll/win32/jscript/jscript_main.c diff --git a/reactos/dll/win32/jscript/jsglobal.idl b/dll/win32/jscript/jsglobal.idl similarity index 100% rename from reactos/dll/win32/jscript/jsglobal.idl rename to dll/win32/jscript/jsglobal.idl diff --git a/reactos/dll/win32/jscript/jsglobal_dispid.h b/dll/win32/jscript/jsglobal_dispid.h similarity index 100% rename from reactos/dll/win32/jscript/jsglobal_dispid.h rename to dll/win32/jscript/jsglobal_dispid.h diff --git a/reactos/dll/win32/jscript/jsutils.c b/dll/win32/jscript/jsutils.c similarity index 100% rename from reactos/dll/win32/jscript/jsutils.c rename to dll/win32/jscript/jsutils.c diff --git a/reactos/dll/win32/jscript/lex.c b/dll/win32/jscript/lex.c similarity index 100% rename from reactos/dll/win32/jscript/lex.c rename to dll/win32/jscript/lex.c diff --git a/reactos/dll/win32/jscript/math.c b/dll/win32/jscript/math.c similarity index 100% rename from reactos/dll/win32/jscript/math.c rename to dll/win32/jscript/math.c diff --git a/reactos/dll/win32/jscript/number.c b/dll/win32/jscript/number.c similarity index 100% rename from reactos/dll/win32/jscript/number.c rename to dll/win32/jscript/number.c diff --git a/reactos/dll/win32/jscript/object.c b/dll/win32/jscript/object.c similarity index 100% rename from reactos/dll/win32/jscript/object.c rename to dll/win32/jscript/object.c diff --git a/reactos/dll/win32/jscript/parser.tab.c b/dll/win32/jscript/parser.tab.c similarity index 100% rename from reactos/dll/win32/jscript/parser.tab.c rename to dll/win32/jscript/parser.tab.c diff --git a/reactos/dll/win32/jscript/parser.tab.h b/dll/win32/jscript/parser.tab.h similarity index 100% rename from reactos/dll/win32/jscript/parser.tab.h rename to dll/win32/jscript/parser.tab.h diff --git a/reactos/dll/win32/jscript/parser.y b/dll/win32/jscript/parser.y similarity index 100% rename from reactos/dll/win32/jscript/parser.y rename to dll/win32/jscript/parser.y diff --git a/reactos/dll/win32/jscript/regexp.c b/dll/win32/jscript/regexp.c similarity index 100% rename from reactos/dll/win32/jscript/regexp.c rename to dll/win32/jscript/regexp.c diff --git a/reactos/dll/win32/jscript/rsrc.rc b/dll/win32/jscript/rsrc.rc similarity index 100% rename from reactos/dll/win32/jscript/rsrc.rc rename to dll/win32/jscript/rsrc.rc diff --git a/reactos/dll/win32/jscript/string.c b/dll/win32/jscript/string.c similarity index 100% rename from reactos/dll/win32/jscript/string.c rename to dll/win32/jscript/string.c diff --git a/reactos/dll/win32/kernel32/debug/debugger.c b/dll/win32/kernel32/debug/debugger.c similarity index 100% rename from reactos/dll/win32/kernel32/debug/debugger.c rename to dll/win32/kernel32/debug/debugger.c diff --git a/reactos/dll/win32/kernel32/debug/output.c b/dll/win32/kernel32/debug/output.c similarity index 100% rename from reactos/dll/win32/kernel32/debug/output.c rename to dll/win32/kernel32/debug/output.c diff --git a/reactos/dll/win32/kernel32/except/except.c b/dll/win32/kernel32/except/except.c similarity index 100% rename from reactos/dll/win32/kernel32/except/except.c rename to dll/win32/kernel32/except/except.c diff --git a/reactos/dll/win32/kernel32/file/backup.c b/dll/win32/kernel32/file/backup.c similarity index 100% rename from reactos/dll/win32/kernel32/file/backup.c rename to dll/win32/kernel32/file/backup.c diff --git a/reactos/dll/win32/kernel32/file/bintype.c b/dll/win32/kernel32/file/bintype.c similarity index 100% rename from reactos/dll/win32/kernel32/file/bintype.c rename to dll/win32/kernel32/file/bintype.c diff --git a/reactos/dll/win32/kernel32/file/cnotify.c b/dll/win32/kernel32/file/cnotify.c similarity index 100% rename from reactos/dll/win32/kernel32/file/cnotify.c rename to dll/win32/kernel32/file/cnotify.c diff --git a/reactos/dll/win32/kernel32/file/copy.c b/dll/win32/kernel32/file/copy.c similarity index 100% rename from reactos/dll/win32/kernel32/file/copy.c rename to dll/win32/kernel32/file/copy.c diff --git a/reactos/dll/win32/kernel32/file/create.c b/dll/win32/kernel32/file/create.c similarity index 100% rename from reactos/dll/win32/kernel32/file/create.c rename to dll/win32/kernel32/file/create.c diff --git a/reactos/dll/win32/kernel32/file/curdir.c b/dll/win32/kernel32/file/curdir.c similarity index 100% rename from reactos/dll/win32/kernel32/file/curdir.c rename to dll/win32/kernel32/file/curdir.c diff --git a/reactos/dll/win32/kernel32/file/delete.c b/dll/win32/kernel32/file/delete.c similarity index 100% rename from reactos/dll/win32/kernel32/file/delete.c rename to dll/win32/kernel32/file/delete.c diff --git a/reactos/dll/win32/kernel32/file/deviceio.c b/dll/win32/kernel32/file/deviceio.c similarity index 100% rename from reactos/dll/win32/kernel32/file/deviceio.c rename to dll/win32/kernel32/file/deviceio.c diff --git a/reactos/dll/win32/kernel32/file/dir.c b/dll/win32/kernel32/file/dir.c similarity index 100% rename from reactos/dll/win32/kernel32/file/dir.c rename to dll/win32/kernel32/file/dir.c diff --git a/reactos/dll/win32/kernel32/file/dosdev.c b/dll/win32/kernel32/file/dosdev.c similarity index 100% rename from reactos/dll/win32/kernel32/file/dosdev.c rename to dll/win32/kernel32/file/dosdev.c diff --git a/reactos/dll/win32/kernel32/file/file.c b/dll/win32/kernel32/file/file.c similarity index 100% rename from reactos/dll/win32/kernel32/file/file.c rename to dll/win32/kernel32/file/file.c diff --git a/reactos/dll/win32/kernel32/file/find.c b/dll/win32/kernel32/file/find.c similarity index 100% rename from reactos/dll/win32/kernel32/file/find.c rename to dll/win32/kernel32/file/find.c diff --git a/reactos/dll/win32/kernel32/file/hardlink.c b/dll/win32/kernel32/file/hardlink.c similarity index 100% rename from reactos/dll/win32/kernel32/file/hardlink.c rename to dll/win32/kernel32/file/hardlink.c diff --git a/reactos/dll/win32/kernel32/file/iocompl.c b/dll/win32/kernel32/file/iocompl.c similarity index 100% rename from reactos/dll/win32/kernel32/file/iocompl.c rename to dll/win32/kernel32/file/iocompl.c diff --git a/reactos/dll/win32/kernel32/file/lfile.c b/dll/win32/kernel32/file/lfile.c similarity index 100% rename from reactos/dll/win32/kernel32/file/lfile.c rename to dll/win32/kernel32/file/lfile.c diff --git a/reactos/dll/win32/kernel32/file/lock.c b/dll/win32/kernel32/file/lock.c similarity index 100% rename from reactos/dll/win32/kernel32/file/lock.c rename to dll/win32/kernel32/file/lock.c diff --git a/reactos/dll/win32/kernel32/file/mailslot.c b/dll/win32/kernel32/file/mailslot.c similarity index 100% rename from reactos/dll/win32/kernel32/file/mailslot.c rename to dll/win32/kernel32/file/mailslot.c diff --git a/reactos/dll/win32/kernel32/file/move.c b/dll/win32/kernel32/file/move.c similarity index 100% rename from reactos/dll/win32/kernel32/file/move.c rename to dll/win32/kernel32/file/move.c diff --git a/reactos/dll/win32/kernel32/file/npipe.c b/dll/win32/kernel32/file/npipe.c similarity index 100% rename from reactos/dll/win32/kernel32/file/npipe.c rename to dll/win32/kernel32/file/npipe.c diff --git a/reactos/dll/win32/kernel32/file/pipe.c b/dll/win32/kernel32/file/pipe.c similarity index 100% rename from reactos/dll/win32/kernel32/file/pipe.c rename to dll/win32/kernel32/file/pipe.c diff --git a/reactos/dll/win32/kernel32/file/rw.c b/dll/win32/kernel32/file/rw.c similarity index 100% rename from reactos/dll/win32/kernel32/file/rw.c rename to dll/win32/kernel32/file/rw.c diff --git a/reactos/dll/win32/kernel32/file/tape.c b/dll/win32/kernel32/file/tape.c similarity index 100% rename from reactos/dll/win32/kernel32/file/tape.c rename to dll/win32/kernel32/file/tape.c diff --git a/reactos/dll/win32/kernel32/file/volume.c b/dll/win32/kernel32/file/volume.c similarity index 100% rename from reactos/dll/win32/kernel32/file/volume.c rename to dll/win32/kernel32/file/volume.c diff --git a/reactos/dll/win32/kernel32/include/baseheap.h b/dll/win32/kernel32/include/baseheap.h similarity index 100% rename from reactos/dll/win32/kernel32/include/baseheap.h rename to dll/win32/kernel32/include/baseheap.h diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/dll/win32/kernel32/include/kernel32.h similarity index 100% rename from reactos/dll/win32/kernel32/include/kernel32.h rename to dll/win32/kernel32/include/kernel32.h diff --git a/reactos/dll/win32/kernel32/k32.h b/dll/win32/kernel32/k32.h similarity index 100% rename from reactos/dll/win32/kernel32/k32.h rename to dll/win32/kernel32/k32.h diff --git a/reactos/dll/win32/kernel32/kernel32.def b/dll/win32/kernel32/kernel32.def similarity index 100% rename from reactos/dll/win32/kernel32/kernel32.def rename to dll/win32/kernel32/kernel32.def diff --git a/reactos/dll/win32/kernel32/kernel32.rbuild b/dll/win32/kernel32/kernel32.rbuild similarity index 100% rename from reactos/dll/win32/kernel32/kernel32.rbuild rename to dll/win32/kernel32/kernel32.rbuild diff --git a/reactos/dll/win32/kernel32/kernel32.rc b/dll/win32/kernel32/kernel32.rc similarity index 100% rename from reactos/dll/win32/kernel32/kernel32.rc rename to dll/win32/kernel32/kernel32.rc diff --git a/reactos/dll/win32/kernel32/lang/bg-BG.mc b/dll/win32/kernel32/lang/bg-BG.mc similarity index 100% rename from reactos/dll/win32/kernel32/lang/bg-BG.mc rename to dll/win32/kernel32/lang/bg-BG.mc diff --git a/reactos/dll/win32/kernel32/lang/de-DE.mc b/dll/win32/kernel32/lang/de-DE.mc similarity index 100% rename from reactos/dll/win32/kernel32/lang/de-DE.mc rename to dll/win32/kernel32/lang/de-DE.mc diff --git a/reactos/dll/win32/kernel32/lang/pl-PL.mc b/dll/win32/kernel32/lang/pl-PL.mc similarity index 100% rename from reactos/dll/win32/kernel32/lang/pl-PL.mc rename to dll/win32/kernel32/lang/pl-PL.mc diff --git a/reactos/dll/win32/kernel32/lang/ru-RU.mc b/dll/win32/kernel32/lang/ru-RU.mc similarity index 100% rename from reactos/dll/win32/kernel32/lang/ru-RU.mc rename to dll/win32/kernel32/lang/ru-RU.mc diff --git a/reactos/dll/win32/kernel32/locale_rc.rc b/dll/win32/kernel32/locale_rc.rc similarity index 100% rename from reactos/dll/win32/kernel32/locale_rc.rc rename to dll/win32/kernel32/locale_rc.rc diff --git a/reactos/dll/win32/kernel32/mem/global.c b/dll/win32/kernel32/mem/global.c similarity index 100% rename from reactos/dll/win32/kernel32/mem/global.c rename to dll/win32/kernel32/mem/global.c diff --git a/reactos/dll/win32/kernel32/mem/heap.c b/dll/win32/kernel32/mem/heap.c similarity index 100% rename from reactos/dll/win32/kernel32/mem/heap.c rename to dll/win32/kernel32/mem/heap.c diff --git a/reactos/dll/win32/kernel32/mem/isbad.c b/dll/win32/kernel32/mem/isbad.c similarity index 100% rename from reactos/dll/win32/kernel32/mem/isbad.c rename to dll/win32/kernel32/mem/isbad.c diff --git a/reactos/dll/win32/kernel32/mem/local.c b/dll/win32/kernel32/mem/local.c similarity index 100% rename from reactos/dll/win32/kernel32/mem/local.c rename to dll/win32/kernel32/mem/local.c diff --git a/reactos/dll/win32/kernel32/mem/procmem.c b/dll/win32/kernel32/mem/procmem.c similarity index 100% rename from reactos/dll/win32/kernel32/mem/procmem.c rename to dll/win32/kernel32/mem/procmem.c diff --git a/reactos/dll/win32/kernel32/mem/resnotify.c b/dll/win32/kernel32/mem/resnotify.c similarity index 100% rename from reactos/dll/win32/kernel32/mem/resnotify.c rename to dll/win32/kernel32/mem/resnotify.c diff --git a/reactos/dll/win32/kernel32/mem/section.c b/dll/win32/kernel32/mem/section.c similarity index 100% rename from reactos/dll/win32/kernel32/mem/section.c rename to dll/win32/kernel32/mem/section.c diff --git a/reactos/dll/win32/kernel32/mem/virtual.c b/dll/win32/kernel32/mem/virtual.c similarity index 100% rename from reactos/dll/win32/kernel32/mem/virtual.c rename to dll/win32/kernel32/mem/virtual.c diff --git a/reactos/dll/win32/kernel32/misc/actctx.c b/dll/win32/kernel32/misc/actctx.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/actctx.c rename to dll/win32/kernel32/misc/actctx.c diff --git a/reactos/dll/win32/kernel32/misc/atom.c b/dll/win32/kernel32/misc/atom.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/atom.c rename to dll/win32/kernel32/misc/atom.c diff --git a/reactos/dll/win32/kernel32/misc/chartype.c b/dll/win32/kernel32/misc/chartype.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/chartype.c rename to dll/win32/kernel32/misc/chartype.c diff --git a/reactos/dll/win32/kernel32/misc/comm.c b/dll/win32/kernel32/misc/comm.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/comm.c rename to dll/win32/kernel32/misc/comm.c diff --git a/reactos/dll/win32/kernel32/misc/computername.c b/dll/win32/kernel32/misc/computername.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/computername.c rename to dll/win32/kernel32/misc/computername.c diff --git a/reactos/dll/win32/kernel32/misc/console.c b/dll/win32/kernel32/misc/console.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/console.c rename to dll/win32/kernel32/misc/console.c diff --git a/reactos/dll/win32/kernel32/misc/dllmain.c b/dll/win32/kernel32/misc/dllmain.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/dllmain.c rename to dll/win32/kernel32/misc/dllmain.c diff --git a/reactos/dll/win32/kernel32/misc/env.c b/dll/win32/kernel32/misc/env.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/env.c rename to dll/win32/kernel32/misc/env.c diff --git a/reactos/dll/win32/kernel32/misc/error.c b/dll/win32/kernel32/misc/error.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/error.c rename to dll/win32/kernel32/misc/error.c diff --git a/reactos/dll/win32/kernel32/misc/errormsg.c b/dll/win32/kernel32/misc/errormsg.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/errormsg.c rename to dll/win32/kernel32/misc/errormsg.c diff --git a/reactos/dll/win32/kernel32/misc/handle.c b/dll/win32/kernel32/misc/handle.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/handle.c rename to dll/win32/kernel32/misc/handle.c diff --git a/reactos/dll/win32/kernel32/misc/icustubs.cpp b/dll/win32/kernel32/misc/icustubs.cpp similarity index 100% rename from reactos/dll/win32/kernel32/misc/icustubs.cpp rename to dll/win32/kernel32/misc/icustubs.cpp diff --git a/reactos/dll/win32/kernel32/misc/lang.c b/dll/win32/kernel32/misc/lang.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/lang.c rename to dll/win32/kernel32/misc/lang.c diff --git a/reactos/dll/win32/kernel32/misc/lcformat.c b/dll/win32/kernel32/misc/lcformat.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/lcformat.c rename to dll/win32/kernel32/misc/lcformat.c diff --git a/reactos/dll/win32/kernel32/misc/lcformat_private.h b/dll/win32/kernel32/misc/lcformat_private.h similarity index 100% rename from reactos/dll/win32/kernel32/misc/lcformat_private.h rename to dll/win32/kernel32/misc/lcformat_private.h diff --git a/reactos/dll/win32/kernel32/misc/ldr.c b/dll/win32/kernel32/misc/ldr.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/ldr.c rename to dll/win32/kernel32/misc/ldr.c diff --git a/reactos/dll/win32/kernel32/misc/lzexpand_main.c b/dll/win32/kernel32/misc/lzexpand_main.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/lzexpand_main.c rename to dll/win32/kernel32/misc/lzexpand_main.c diff --git a/reactos/dll/win32/kernel32/misc/muldiv.c b/dll/win32/kernel32/misc/muldiv.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/muldiv.c rename to dll/win32/kernel32/misc/muldiv.c diff --git a/reactos/dll/win32/kernel32/misc/nls.c b/dll/win32/kernel32/misc/nls.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/nls.c rename to dll/win32/kernel32/misc/nls.c diff --git a/reactos/dll/win32/kernel32/misc/perfcnt.c b/dll/win32/kernel32/misc/perfcnt.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/perfcnt.c rename to dll/win32/kernel32/misc/perfcnt.c diff --git a/reactos/dll/win32/kernel32/misc/profile.c b/dll/win32/kernel32/misc/profile.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/profile.c rename to dll/win32/kernel32/misc/profile.c diff --git a/reactos/dll/win32/kernel32/misc/recovery.c b/dll/win32/kernel32/misc/recovery.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/recovery.c rename to dll/win32/kernel32/misc/recovery.c diff --git a/reactos/dll/win32/kernel32/misc/res.c b/dll/win32/kernel32/misc/res.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/res.c rename to dll/win32/kernel32/misc/res.c diff --git a/reactos/dll/win32/kernel32/misc/stubs.c b/dll/win32/kernel32/misc/stubs.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/stubs.c rename to dll/win32/kernel32/misc/stubs.c diff --git a/reactos/dll/win32/kernel32/misc/sysinfo.c b/dll/win32/kernel32/misc/sysinfo.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/sysinfo.c rename to dll/win32/kernel32/misc/sysinfo.c diff --git a/reactos/dll/win32/kernel32/misc/time.c b/dll/win32/kernel32/misc/time.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/time.c rename to dll/win32/kernel32/misc/time.c diff --git a/reactos/dll/win32/kernel32/misc/timerqueue.c b/dll/win32/kernel32/misc/timerqueue.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/timerqueue.c rename to dll/win32/kernel32/misc/timerqueue.c diff --git a/reactos/dll/win32/kernel32/misc/toolhelp.c b/dll/win32/kernel32/misc/toolhelp.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/toolhelp.c rename to dll/win32/kernel32/misc/toolhelp.c diff --git a/reactos/dll/win32/kernel32/misc/utils.c b/dll/win32/kernel32/misc/utils.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/utils.c rename to dll/win32/kernel32/misc/utils.c diff --git a/reactos/dll/win32/kernel32/misc/version.c b/dll/win32/kernel32/misc/version.c similarity index 100% rename from reactos/dll/win32/kernel32/misc/version.c rename to dll/win32/kernel32/misc/version.c diff --git a/reactos/dll/win32/kernel32/nls/afk.nls b/dll/win32/kernel32/nls/afk.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/afk.nls rename to dll/win32/kernel32/nls/afk.nls diff --git a/reactos/dll/win32/kernel32/nls/ara.nls b/dll/win32/kernel32/nls/ara.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ara.nls rename to dll/win32/kernel32/nls/ara.nls diff --git a/reactos/dll/win32/kernel32/nls/arb.nls b/dll/win32/kernel32/nls/arb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/arb.nls rename to dll/win32/kernel32/nls/arb.nls diff --git a/reactos/dll/win32/kernel32/nls/are.nls b/dll/win32/kernel32/nls/are.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/are.nls rename to dll/win32/kernel32/nls/are.nls diff --git a/reactos/dll/win32/kernel32/nls/arg.nls b/dll/win32/kernel32/nls/arg.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/arg.nls rename to dll/win32/kernel32/nls/arg.nls diff --git a/reactos/dll/win32/kernel32/nls/arh.nls b/dll/win32/kernel32/nls/arh.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/arh.nls rename to dll/win32/kernel32/nls/arh.nls diff --git a/reactos/dll/win32/kernel32/nls/ari.nls b/dll/win32/kernel32/nls/ari.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ari.nls rename to dll/win32/kernel32/nls/ari.nls diff --git a/reactos/dll/win32/kernel32/nls/arj.nls b/dll/win32/kernel32/nls/arj.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/arj.nls rename to dll/win32/kernel32/nls/arj.nls diff --git a/reactos/dll/win32/kernel32/nls/ark.nls b/dll/win32/kernel32/nls/ark.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ark.nls rename to dll/win32/kernel32/nls/ark.nls diff --git a/reactos/dll/win32/kernel32/nls/arl.nls b/dll/win32/kernel32/nls/arl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/arl.nls rename to dll/win32/kernel32/nls/arl.nls diff --git a/reactos/dll/win32/kernel32/nls/arm.nls b/dll/win32/kernel32/nls/arm.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/arm.nls rename to dll/win32/kernel32/nls/arm.nls diff --git a/reactos/dll/win32/kernel32/nls/aro.nls b/dll/win32/kernel32/nls/aro.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/aro.nls rename to dll/win32/kernel32/nls/aro.nls diff --git a/reactos/dll/win32/kernel32/nls/arq.nls b/dll/win32/kernel32/nls/arq.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/arq.nls rename to dll/win32/kernel32/nls/arq.nls diff --git a/reactos/dll/win32/kernel32/nls/ars.nls b/dll/win32/kernel32/nls/ars.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ars.nls rename to dll/win32/kernel32/nls/ars.nls diff --git a/reactos/dll/win32/kernel32/nls/art.nls b/dll/win32/kernel32/nls/art.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/art.nls rename to dll/win32/kernel32/nls/art.nls diff --git a/reactos/dll/win32/kernel32/nls/aru.nls b/dll/win32/kernel32/nls/aru.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/aru.nls rename to dll/win32/kernel32/nls/aru.nls diff --git a/reactos/dll/win32/kernel32/nls/ary.nls b/dll/win32/kernel32/nls/ary.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ary.nls rename to dll/win32/kernel32/nls/ary.nls diff --git a/reactos/dll/win32/kernel32/nls/aze.nls b/dll/win32/kernel32/nls/aze.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/aze.nls rename to dll/win32/kernel32/nls/aze.nls diff --git a/reactos/dll/win32/kernel32/nls/azl.nls b/dll/win32/kernel32/nls/azl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/azl.nls rename to dll/win32/kernel32/nls/azl.nls diff --git a/reactos/dll/win32/kernel32/nls/bel.nls b/dll/win32/kernel32/nls/bel.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/bel.nls rename to dll/win32/kernel32/nls/bel.nls diff --git a/reactos/dll/win32/kernel32/nls/bgr.nls b/dll/win32/kernel32/nls/bgr.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/bgr.nls rename to dll/win32/kernel32/nls/bgr.nls diff --git a/reactos/dll/win32/kernel32/nls/cat.nls b/dll/win32/kernel32/nls/cat.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/cat.nls rename to dll/win32/kernel32/nls/cat.nls diff --git a/reactos/dll/win32/kernel32/nls/chs.nls b/dll/win32/kernel32/nls/chs.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/chs.nls rename to dll/win32/kernel32/nls/chs.nls diff --git a/reactos/dll/win32/kernel32/nls/cht.nls b/dll/win32/kernel32/nls/cht.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/cht.nls rename to dll/win32/kernel32/nls/cht.nls diff --git a/reactos/dll/win32/kernel32/nls/csy.nls b/dll/win32/kernel32/nls/csy.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/csy.nls rename to dll/win32/kernel32/nls/csy.nls diff --git a/reactos/dll/win32/kernel32/nls/dan.nls b/dll/win32/kernel32/nls/dan.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/dan.nls rename to dll/win32/kernel32/nls/dan.nls diff --git a/reactos/dll/win32/kernel32/nls/dea.nls b/dll/win32/kernel32/nls/dea.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/dea.nls rename to dll/win32/kernel32/nls/dea.nls diff --git a/reactos/dll/win32/kernel32/nls/dec.nls b/dll/win32/kernel32/nls/dec.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/dec.nls rename to dll/win32/kernel32/nls/dec.nls diff --git a/reactos/dll/win32/kernel32/nls/del.nls b/dll/win32/kernel32/nls/del.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/del.nls rename to dll/win32/kernel32/nls/del.nls diff --git a/reactos/dll/win32/kernel32/nls/des.nls b/dll/win32/kernel32/nls/des.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/des.nls rename to dll/win32/kernel32/nls/des.nls diff --git a/reactos/dll/win32/kernel32/nls/deu.nls b/dll/win32/kernel32/nls/deu.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/deu.nls rename to dll/win32/kernel32/nls/deu.nls diff --git a/reactos/dll/win32/kernel32/nls/div.nls b/dll/win32/kernel32/nls/div.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/div.nls rename to dll/win32/kernel32/nls/div.nls diff --git a/reactos/dll/win32/kernel32/nls/ell.nls b/dll/win32/kernel32/nls/ell.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ell.nls rename to dll/win32/kernel32/nls/ell.nls diff --git a/reactos/dll/win32/kernel32/nls/ena.nls b/dll/win32/kernel32/nls/ena.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ena.nls rename to dll/win32/kernel32/nls/ena.nls diff --git a/reactos/dll/win32/kernel32/nls/enb.nls b/dll/win32/kernel32/nls/enb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/enb.nls rename to dll/win32/kernel32/nls/enb.nls diff --git a/reactos/dll/win32/kernel32/nls/enc.nls b/dll/win32/kernel32/nls/enc.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/enc.nls rename to dll/win32/kernel32/nls/enc.nls diff --git a/reactos/dll/win32/kernel32/nls/eng.nls b/dll/win32/kernel32/nls/eng.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/eng.nls rename to dll/win32/kernel32/nls/eng.nls diff --git a/reactos/dll/win32/kernel32/nls/eni.nls b/dll/win32/kernel32/nls/eni.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/eni.nls rename to dll/win32/kernel32/nls/eni.nls diff --git a/reactos/dll/win32/kernel32/nls/enj.nls b/dll/win32/kernel32/nls/enj.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/enj.nls rename to dll/win32/kernel32/nls/enj.nls diff --git a/reactos/dll/win32/kernel32/nls/enl.nls b/dll/win32/kernel32/nls/enl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/enl.nls rename to dll/win32/kernel32/nls/enl.nls diff --git a/reactos/dll/win32/kernel32/nls/enp.nls b/dll/win32/kernel32/nls/enp.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/enp.nls rename to dll/win32/kernel32/nls/enp.nls diff --git a/reactos/dll/win32/kernel32/nls/ens.nls b/dll/win32/kernel32/nls/ens.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ens.nls rename to dll/win32/kernel32/nls/ens.nls diff --git a/reactos/dll/win32/kernel32/nls/ent.nls b/dll/win32/kernel32/nls/ent.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ent.nls rename to dll/win32/kernel32/nls/ent.nls diff --git a/reactos/dll/win32/kernel32/nls/enu.nls b/dll/win32/kernel32/nls/enu.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/enu.nls rename to dll/win32/kernel32/nls/enu.nls diff --git a/reactos/dll/win32/kernel32/nls/enw.nls b/dll/win32/kernel32/nls/enw.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/enw.nls rename to dll/win32/kernel32/nls/enw.nls diff --git a/reactos/dll/win32/kernel32/nls/enz.nls b/dll/win32/kernel32/nls/enz.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/enz.nls rename to dll/win32/kernel32/nls/enz.nls diff --git a/reactos/dll/win32/kernel32/nls/esa.nls b/dll/win32/kernel32/nls/esa.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esa.nls rename to dll/win32/kernel32/nls/esa.nls diff --git a/reactos/dll/win32/kernel32/nls/esb.nls b/dll/win32/kernel32/nls/esb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esb.nls rename to dll/win32/kernel32/nls/esb.nls diff --git a/reactos/dll/win32/kernel32/nls/esc.nls b/dll/win32/kernel32/nls/esc.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esc.nls rename to dll/win32/kernel32/nls/esc.nls diff --git a/reactos/dll/win32/kernel32/nls/esd.nls b/dll/win32/kernel32/nls/esd.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esd.nls rename to dll/win32/kernel32/nls/esd.nls diff --git a/reactos/dll/win32/kernel32/nls/ese.nls b/dll/win32/kernel32/nls/ese.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ese.nls rename to dll/win32/kernel32/nls/ese.nls diff --git a/reactos/dll/win32/kernel32/nls/esf.nls b/dll/win32/kernel32/nls/esf.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esf.nls rename to dll/win32/kernel32/nls/esf.nls diff --git a/reactos/dll/win32/kernel32/nls/esg.nls b/dll/win32/kernel32/nls/esg.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esg.nls rename to dll/win32/kernel32/nls/esg.nls diff --git a/reactos/dll/win32/kernel32/nls/esh.nls b/dll/win32/kernel32/nls/esh.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esh.nls rename to dll/win32/kernel32/nls/esh.nls diff --git a/reactos/dll/win32/kernel32/nls/esi.nls b/dll/win32/kernel32/nls/esi.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esi.nls rename to dll/win32/kernel32/nls/esi.nls diff --git a/reactos/dll/win32/kernel32/nls/esl.nls b/dll/win32/kernel32/nls/esl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esl.nls rename to dll/win32/kernel32/nls/esl.nls diff --git a/reactos/dll/win32/kernel32/nls/esm.nls b/dll/win32/kernel32/nls/esm.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esm.nls rename to dll/win32/kernel32/nls/esm.nls diff --git a/reactos/dll/win32/kernel32/nls/esn.nls b/dll/win32/kernel32/nls/esn.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esn.nls rename to dll/win32/kernel32/nls/esn.nls diff --git a/reactos/dll/win32/kernel32/nls/eso.nls b/dll/win32/kernel32/nls/eso.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/eso.nls rename to dll/win32/kernel32/nls/eso.nls diff --git a/reactos/dll/win32/kernel32/nls/esp.nls b/dll/win32/kernel32/nls/esp.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esp.nls rename to dll/win32/kernel32/nls/esp.nls diff --git a/reactos/dll/win32/kernel32/nls/esr.nls b/dll/win32/kernel32/nls/esr.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esr.nls rename to dll/win32/kernel32/nls/esr.nls diff --git a/reactos/dll/win32/kernel32/nls/ess.nls b/dll/win32/kernel32/nls/ess.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ess.nls rename to dll/win32/kernel32/nls/ess.nls diff --git a/reactos/dll/win32/kernel32/nls/esu.nls b/dll/win32/kernel32/nls/esu.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esu.nls rename to dll/win32/kernel32/nls/esu.nls diff --git a/reactos/dll/win32/kernel32/nls/esv.nls b/dll/win32/kernel32/nls/esv.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esv.nls rename to dll/win32/kernel32/nls/esv.nls diff --git a/reactos/dll/win32/kernel32/nls/esy.nls b/dll/win32/kernel32/nls/esy.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esy.nls rename to dll/win32/kernel32/nls/esy.nls diff --git a/reactos/dll/win32/kernel32/nls/esz.nls b/dll/win32/kernel32/nls/esz.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/esz.nls rename to dll/win32/kernel32/nls/esz.nls diff --git a/reactos/dll/win32/kernel32/nls/eti.nls b/dll/win32/kernel32/nls/eti.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/eti.nls rename to dll/win32/kernel32/nls/eti.nls diff --git a/reactos/dll/win32/kernel32/nls/euq.nls b/dll/win32/kernel32/nls/euq.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/euq.nls rename to dll/win32/kernel32/nls/euq.nls diff --git a/reactos/dll/win32/kernel32/nls/far.nls b/dll/win32/kernel32/nls/far.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/far.nls rename to dll/win32/kernel32/nls/far.nls diff --git a/reactos/dll/win32/kernel32/nls/fin.nls b/dll/win32/kernel32/nls/fin.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/fin.nls rename to dll/win32/kernel32/nls/fin.nls diff --git a/reactos/dll/win32/kernel32/nls/fos.nls b/dll/win32/kernel32/nls/fos.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/fos.nls rename to dll/win32/kernel32/nls/fos.nls diff --git a/reactos/dll/win32/kernel32/nls/fra.nls b/dll/win32/kernel32/nls/fra.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/fra.nls rename to dll/win32/kernel32/nls/fra.nls diff --git a/reactos/dll/win32/kernel32/nls/frb.nls b/dll/win32/kernel32/nls/frb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/frb.nls rename to dll/win32/kernel32/nls/frb.nls diff --git a/reactos/dll/win32/kernel32/nls/frc.nls b/dll/win32/kernel32/nls/frc.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/frc.nls rename to dll/win32/kernel32/nls/frc.nls diff --git a/reactos/dll/win32/kernel32/nls/frl.nls b/dll/win32/kernel32/nls/frl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/frl.nls rename to dll/win32/kernel32/nls/frl.nls diff --git a/reactos/dll/win32/kernel32/nls/frm.nls b/dll/win32/kernel32/nls/frm.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/frm.nls rename to dll/win32/kernel32/nls/frm.nls diff --git a/reactos/dll/win32/kernel32/nls/frs.nls b/dll/win32/kernel32/nls/frs.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/frs.nls rename to dll/win32/kernel32/nls/frs.nls diff --git a/reactos/dll/win32/kernel32/nls/glc.nls b/dll/win32/kernel32/nls/glc.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/glc.nls rename to dll/win32/kernel32/nls/glc.nls diff --git a/reactos/dll/win32/kernel32/nls/guj.nls b/dll/win32/kernel32/nls/guj.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/guj.nls rename to dll/win32/kernel32/nls/guj.nls diff --git a/reactos/dll/win32/kernel32/nls/heb.nls b/dll/win32/kernel32/nls/heb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/heb.nls rename to dll/win32/kernel32/nls/heb.nls diff --git a/reactos/dll/win32/kernel32/nls/hin.nls b/dll/win32/kernel32/nls/hin.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/hin.nls rename to dll/win32/kernel32/nls/hin.nls diff --git a/reactos/dll/win32/kernel32/nls/hrv.nls b/dll/win32/kernel32/nls/hrv.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/hrv.nls rename to dll/win32/kernel32/nls/hrv.nls diff --git a/reactos/dll/win32/kernel32/nls/hun.nls b/dll/win32/kernel32/nls/hun.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/hun.nls rename to dll/win32/kernel32/nls/hun.nls diff --git a/reactos/dll/win32/kernel32/nls/hye.nls b/dll/win32/kernel32/nls/hye.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/hye.nls rename to dll/win32/kernel32/nls/hye.nls diff --git a/reactos/dll/win32/kernel32/nls/ind.nls b/dll/win32/kernel32/nls/ind.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ind.nls rename to dll/win32/kernel32/nls/ind.nls diff --git a/reactos/dll/win32/kernel32/nls/isl.nls b/dll/win32/kernel32/nls/isl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/isl.nls rename to dll/win32/kernel32/nls/isl.nls diff --git a/reactos/dll/win32/kernel32/nls/ita.nls b/dll/win32/kernel32/nls/ita.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ita.nls rename to dll/win32/kernel32/nls/ita.nls diff --git a/reactos/dll/win32/kernel32/nls/its.nls b/dll/win32/kernel32/nls/its.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/its.nls rename to dll/win32/kernel32/nls/its.nls diff --git a/reactos/dll/win32/kernel32/nls/jpn.nls b/dll/win32/kernel32/nls/jpn.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/jpn.nls rename to dll/win32/kernel32/nls/jpn.nls diff --git a/reactos/dll/win32/kernel32/nls/kan.nls b/dll/win32/kernel32/nls/kan.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/kan.nls rename to dll/win32/kernel32/nls/kan.nls diff --git a/reactos/dll/win32/kernel32/nls/kat.nls b/dll/win32/kernel32/nls/kat.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/kat.nls rename to dll/win32/kernel32/nls/kat.nls diff --git a/reactos/dll/win32/kernel32/nls/kkz.nls b/dll/win32/kernel32/nls/kkz.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/kkz.nls rename to dll/win32/kernel32/nls/kkz.nls diff --git a/reactos/dll/win32/kernel32/nls/knk.nls b/dll/win32/kernel32/nls/knk.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/knk.nls rename to dll/win32/kernel32/nls/knk.nls diff --git a/reactos/dll/win32/kernel32/nls/kor.nls b/dll/win32/kernel32/nls/kor.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/kor.nls rename to dll/win32/kernel32/nls/kor.nls diff --git a/reactos/dll/win32/kernel32/nls/kyr.nls b/dll/win32/kernel32/nls/kyr.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/kyr.nls rename to dll/win32/kernel32/nls/kyr.nls diff --git a/reactos/dll/win32/kernel32/nls/lth.nls b/dll/win32/kernel32/nls/lth.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/lth.nls rename to dll/win32/kernel32/nls/lth.nls diff --git a/reactos/dll/win32/kernel32/nls/lvi.nls b/dll/win32/kernel32/nls/lvi.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/lvi.nls rename to dll/win32/kernel32/nls/lvi.nls diff --git a/reactos/dll/win32/kernel32/nls/mar.nls b/dll/win32/kernel32/nls/mar.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/mar.nls rename to dll/win32/kernel32/nls/mar.nls diff --git a/reactos/dll/win32/kernel32/nls/mki.nls b/dll/win32/kernel32/nls/mki.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/mki.nls rename to dll/win32/kernel32/nls/mki.nls diff --git a/reactos/dll/win32/kernel32/nls/mon.nls b/dll/win32/kernel32/nls/mon.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/mon.nls rename to dll/win32/kernel32/nls/mon.nls diff --git a/reactos/dll/win32/kernel32/nls/msb.nls b/dll/win32/kernel32/nls/msb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/msb.nls rename to dll/win32/kernel32/nls/msb.nls diff --git a/reactos/dll/win32/kernel32/nls/msl.nls b/dll/win32/kernel32/nls/msl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/msl.nls rename to dll/win32/kernel32/nls/msl.nls diff --git a/reactos/dll/win32/kernel32/nls/nlb.nls b/dll/win32/kernel32/nls/nlb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/nlb.nls rename to dll/win32/kernel32/nls/nlb.nls diff --git a/reactos/dll/win32/kernel32/nls/nld.nls b/dll/win32/kernel32/nls/nld.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/nld.nls rename to dll/win32/kernel32/nls/nld.nls diff --git a/reactos/dll/win32/kernel32/nls/non.nls b/dll/win32/kernel32/nls/non.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/non.nls rename to dll/win32/kernel32/nls/non.nls diff --git a/reactos/dll/win32/kernel32/nls/nor.nls b/dll/win32/kernel32/nls/nor.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/nor.nls rename to dll/win32/kernel32/nls/nor.nls diff --git a/reactos/dll/win32/kernel32/nls/pan.nls b/dll/win32/kernel32/nls/pan.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/pan.nls rename to dll/win32/kernel32/nls/pan.nls diff --git a/reactos/dll/win32/kernel32/nls/plk.nls b/dll/win32/kernel32/nls/plk.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/plk.nls rename to dll/win32/kernel32/nls/plk.nls diff --git a/reactos/dll/win32/kernel32/nls/ptb.nls b/dll/win32/kernel32/nls/ptb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ptb.nls rename to dll/win32/kernel32/nls/ptb.nls diff --git a/reactos/dll/win32/kernel32/nls/ptg.nls b/dll/win32/kernel32/nls/ptg.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ptg.nls rename to dll/win32/kernel32/nls/ptg.nls diff --git a/reactos/dll/win32/kernel32/nls/rom.nls b/dll/win32/kernel32/nls/rom.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/rom.nls rename to dll/win32/kernel32/nls/rom.nls diff --git a/reactos/dll/win32/kernel32/nls/rus.nls b/dll/win32/kernel32/nls/rus.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/rus.nls rename to dll/win32/kernel32/nls/rus.nls diff --git a/reactos/dll/win32/kernel32/nls/san.nls b/dll/win32/kernel32/nls/san.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/san.nls rename to dll/win32/kernel32/nls/san.nls diff --git a/reactos/dll/win32/kernel32/nls/sky.nls b/dll/win32/kernel32/nls/sky.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/sky.nls rename to dll/win32/kernel32/nls/sky.nls diff --git a/reactos/dll/win32/kernel32/nls/slv.nls b/dll/win32/kernel32/nls/slv.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/slv.nls rename to dll/win32/kernel32/nls/slv.nls diff --git a/reactos/dll/win32/kernel32/nls/sqi.nls b/dll/win32/kernel32/nls/sqi.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/sqi.nls rename to dll/win32/kernel32/nls/sqi.nls diff --git a/reactos/dll/win32/kernel32/nls/srb.nls b/dll/win32/kernel32/nls/srb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/srb.nls rename to dll/win32/kernel32/nls/srb.nls diff --git a/reactos/dll/win32/kernel32/nls/srl.nls b/dll/win32/kernel32/nls/srl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/srl.nls rename to dll/win32/kernel32/nls/srl.nls diff --git a/reactos/dll/win32/kernel32/nls/sve.nls b/dll/win32/kernel32/nls/sve.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/sve.nls rename to dll/win32/kernel32/nls/sve.nls diff --git a/reactos/dll/win32/kernel32/nls/svf.nls b/dll/win32/kernel32/nls/svf.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/svf.nls rename to dll/win32/kernel32/nls/svf.nls diff --git a/reactos/dll/win32/kernel32/nls/swk.nls b/dll/win32/kernel32/nls/swk.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/swk.nls rename to dll/win32/kernel32/nls/swk.nls diff --git a/reactos/dll/win32/kernel32/nls/syr.nls b/dll/win32/kernel32/nls/syr.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/syr.nls rename to dll/win32/kernel32/nls/syr.nls diff --git a/reactos/dll/win32/kernel32/nls/tam.nls b/dll/win32/kernel32/nls/tam.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/tam.nls rename to dll/win32/kernel32/nls/tam.nls diff --git a/reactos/dll/win32/kernel32/nls/tel.nls b/dll/win32/kernel32/nls/tel.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/tel.nls rename to dll/win32/kernel32/nls/tel.nls diff --git a/reactos/dll/win32/kernel32/nls/tha.nls b/dll/win32/kernel32/nls/tha.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/tha.nls rename to dll/win32/kernel32/nls/tha.nls diff --git a/reactos/dll/win32/kernel32/nls/trk.nls b/dll/win32/kernel32/nls/trk.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/trk.nls rename to dll/win32/kernel32/nls/trk.nls diff --git a/reactos/dll/win32/kernel32/nls/ttt.nls b/dll/win32/kernel32/nls/ttt.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ttt.nls rename to dll/win32/kernel32/nls/ttt.nls diff --git a/reactos/dll/win32/kernel32/nls/ukr.nls b/dll/win32/kernel32/nls/ukr.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/ukr.nls rename to dll/win32/kernel32/nls/ukr.nls diff --git a/reactos/dll/win32/kernel32/nls/urd.nls b/dll/win32/kernel32/nls/urd.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/urd.nls rename to dll/win32/kernel32/nls/urd.nls diff --git a/reactos/dll/win32/kernel32/nls/uzb.nls b/dll/win32/kernel32/nls/uzb.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/uzb.nls rename to dll/win32/kernel32/nls/uzb.nls diff --git a/reactos/dll/win32/kernel32/nls/uzl.nls b/dll/win32/kernel32/nls/uzl.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/uzl.nls rename to dll/win32/kernel32/nls/uzl.nls diff --git a/reactos/dll/win32/kernel32/nls/vit.nls b/dll/win32/kernel32/nls/vit.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/vit.nls rename to dll/win32/kernel32/nls/vit.nls diff --git a/reactos/dll/win32/kernel32/nls/zhh.nls b/dll/win32/kernel32/nls/zhh.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/zhh.nls rename to dll/win32/kernel32/nls/zhh.nls diff --git a/reactos/dll/win32/kernel32/nls/zhi.nls b/dll/win32/kernel32/nls/zhi.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/zhi.nls rename to dll/win32/kernel32/nls/zhi.nls diff --git a/reactos/dll/win32/kernel32/nls/zhm.nls b/dll/win32/kernel32/nls/zhm.nls similarity index 100% rename from reactos/dll/win32/kernel32/nls/zhm.nls rename to dll/win32/kernel32/nls/zhm.nls diff --git a/reactos/dll/win32/kernel32/process/cmdline.c b/dll/win32/kernel32/process/cmdline.c similarity index 100% rename from reactos/dll/win32/kernel32/process/cmdline.c rename to dll/win32/kernel32/process/cmdline.c diff --git a/reactos/dll/win32/kernel32/process/job.c b/dll/win32/kernel32/process/job.c similarity index 100% rename from reactos/dll/win32/kernel32/process/job.c rename to dll/win32/kernel32/process/job.c diff --git a/reactos/dll/win32/kernel32/process/proc.c b/dll/win32/kernel32/process/proc.c similarity index 100% rename from reactos/dll/win32/kernel32/process/proc.c rename to dll/win32/kernel32/process/proc.c diff --git a/reactos/dll/win32/kernel32/process/procsup.c b/dll/win32/kernel32/process/procsup.c similarity index 100% rename from reactos/dll/win32/kernel32/process/procsup.c rename to dll/win32/kernel32/process/procsup.c diff --git a/reactos/dll/win32/kernel32/process/session.c b/dll/win32/kernel32/process/session.c similarity index 100% rename from reactos/dll/win32/kernel32/process/session.c rename to dll/win32/kernel32/process/session.c diff --git a/reactos/dll/win32/kernel32/string/lstring.c b/dll/win32/kernel32/string/lstring.c similarity index 100% rename from reactos/dll/win32/kernel32/string/lstring.c rename to dll/win32/kernel32/string/lstring.c diff --git a/reactos/dll/win32/kernel32/synch/condvar.c b/dll/win32/kernel32/synch/condvar.c similarity index 100% rename from reactos/dll/win32/kernel32/synch/condvar.c rename to dll/win32/kernel32/synch/condvar.c diff --git a/reactos/dll/win32/kernel32/synch/critical.c b/dll/win32/kernel32/synch/critical.c similarity index 100% rename from reactos/dll/win32/kernel32/synch/critical.c rename to dll/win32/kernel32/synch/critical.c diff --git a/reactos/dll/win32/kernel32/synch/event.c b/dll/win32/kernel32/synch/event.c similarity index 100% rename from reactos/dll/win32/kernel32/synch/event.c rename to dll/win32/kernel32/synch/event.c diff --git a/reactos/dll/win32/kernel32/synch/mutex.c b/dll/win32/kernel32/synch/mutex.c similarity index 100% rename from reactos/dll/win32/kernel32/synch/mutex.c rename to dll/win32/kernel32/synch/mutex.c diff --git a/reactos/dll/win32/kernel32/synch/sem.c b/dll/win32/kernel32/synch/sem.c similarity index 100% rename from reactos/dll/win32/kernel32/synch/sem.c rename to dll/win32/kernel32/synch/sem.c diff --git a/reactos/dll/win32/kernel32/synch/timer.c b/dll/win32/kernel32/synch/timer.c similarity index 100% rename from reactos/dll/win32/kernel32/synch/timer.c rename to dll/win32/kernel32/synch/timer.c diff --git a/reactos/dll/win32/kernel32/synch/wait.c b/dll/win32/kernel32/synch/wait.c similarity index 100% rename from reactos/dll/win32/kernel32/synch/wait.c rename to dll/win32/kernel32/synch/wait.c diff --git a/reactos/dll/win32/kernel32/thread/fiber.c b/dll/win32/kernel32/thread/fiber.c similarity index 100% rename from reactos/dll/win32/kernel32/thread/fiber.c rename to dll/win32/kernel32/thread/fiber.c diff --git a/reactos/dll/win32/kernel32/thread/fls.c b/dll/win32/kernel32/thread/fls.c similarity index 100% rename from reactos/dll/win32/kernel32/thread/fls.c rename to dll/win32/kernel32/thread/fls.c diff --git a/reactos/dll/win32/kernel32/thread/i386/fiber.S b/dll/win32/kernel32/thread/i386/fiber.S similarity index 100% rename from reactos/dll/win32/kernel32/thread/i386/fiber.S rename to dll/win32/kernel32/thread/i386/fiber.S diff --git a/reactos/dll/win32/kernel32/thread/i386/thread.S b/dll/win32/kernel32/thread/i386/thread.S similarity index 100% rename from reactos/dll/win32/kernel32/thread/i386/thread.S rename to dll/win32/kernel32/thread/i386/thread.S diff --git a/reactos/dll/win32/kernel32/thread/thread.c b/dll/win32/kernel32/thread/thread.c similarity index 100% rename from reactos/dll/win32/kernel32/thread/thread.c rename to dll/win32/kernel32/thread/thread.c diff --git a/reactos/dll/win32/kernel32/thread/tls.c b/dll/win32/kernel32/thread/tls.c similarity index 100% rename from reactos/dll/win32/kernel32/thread/tls.c rename to dll/win32/kernel32/thread/tls.c diff --git a/reactos/dll/win32/lpk/dllmain.c b/dll/win32/lpk/dllmain.c similarity index 100% rename from reactos/dll/win32/lpk/dllmain.c rename to dll/win32/lpk/dllmain.c diff --git a/reactos/dll/win32/lpk/lpk.rbuild b/dll/win32/lpk/lpk.rbuild similarity index 100% rename from reactos/dll/win32/lpk/lpk.rbuild rename to dll/win32/lpk/lpk.rbuild diff --git a/reactos/dll/win32/lpk/lpk.rc b/dll/win32/lpk/lpk.rc similarity index 100% rename from reactos/dll/win32/lpk/lpk.rc rename to dll/win32/lpk/lpk.rc diff --git a/reactos/dll/win32/lpk/lpk.spec b/dll/win32/lpk/lpk.spec similarity index 100% rename from reactos/dll/win32/lpk/lpk.spec rename to dll/win32/lpk/lpk.spec diff --git a/reactos/dll/win32/lpk/ros_lpk.h b/dll/win32/lpk/ros_lpk.h similarity index 100% rename from reactos/dll/win32/lpk/ros_lpk.h rename to dll/win32/lpk/ros_lpk.h diff --git a/reactos/dll/win32/lpk/stub.c b/dll/win32/lpk/stub.c similarity index 100% rename from reactos/dll/win32/lpk/stub.c rename to dll/win32/lpk/stub.c diff --git a/reactos/dll/win32/lsasrv/lsarpc.c b/dll/win32/lsasrv/lsarpc.c similarity index 100% rename from reactos/dll/win32/lsasrv/lsarpc.c rename to dll/win32/lsasrv/lsarpc.c diff --git a/reactos/dll/win32/lsasrv/lsasrv.c b/dll/win32/lsasrv/lsasrv.c similarity index 100% rename from reactos/dll/win32/lsasrv/lsasrv.c rename to dll/win32/lsasrv/lsasrv.c diff --git a/reactos/dll/win32/lsasrv/lsasrv.def b/dll/win32/lsasrv/lsasrv.def similarity index 100% rename from reactos/dll/win32/lsasrv/lsasrv.def rename to dll/win32/lsasrv/lsasrv.def diff --git a/reactos/dll/win32/lsasrv/lsasrv.rbuild b/dll/win32/lsasrv/lsasrv.rbuild similarity index 100% rename from reactos/dll/win32/lsasrv/lsasrv.rbuild rename to dll/win32/lsasrv/lsasrv.rbuild diff --git a/reactos/dll/win32/lsasrv/lsasrv.rc b/dll/win32/lsasrv/lsasrv.rc similarity index 100% rename from reactos/dll/win32/lsasrv/lsasrv.rc rename to dll/win32/lsasrv/lsasrv.rc diff --git a/reactos/dll/win32/lz32/lz32.rbuild b/dll/win32/lz32/lz32.rbuild similarity index 100% rename from reactos/dll/win32/lz32/lz32.rbuild rename to dll/win32/lz32/lz32.rbuild diff --git a/reactos/dll/win32/lz32/lz32.spec b/dll/win32/lz32/lz32.spec similarity index 100% rename from reactos/dll/win32/lz32/lz32.spec rename to dll/win32/lz32/lz32.spec diff --git a/reactos/dll/win32/lz32/lzexpand.spec b/dll/win32/lz32/lzexpand.spec similarity index 100% rename from reactos/dll/win32/lz32/lzexpand.spec rename to dll/win32/lz32/lzexpand.spec diff --git a/reactos/dll/win32/lz32/lzexpand16.c b/dll/win32/lz32/lzexpand16.c similarity index 100% rename from reactos/dll/win32/lz32/lzexpand16.c rename to dll/win32/lz32/lzexpand16.c diff --git a/reactos/dll/win32/lz32/version.rc b/dll/win32/lz32/version.rc similarity index 100% rename from reactos/dll/win32/lz32/version.rc rename to dll/win32/lz32/version.rc diff --git a/reactos/dll/win32/mapi32/imalloc.c b/dll/win32/mapi32/imalloc.c similarity index 100% rename from reactos/dll/win32/mapi32/imalloc.c rename to dll/win32/mapi32/imalloc.c diff --git a/reactos/dll/win32/mapi32/mapi32.rbuild b/dll/win32/mapi32/mapi32.rbuild similarity index 100% rename from reactos/dll/win32/mapi32/mapi32.rbuild rename to dll/win32/mapi32/mapi32.rbuild diff --git a/reactos/dll/win32/mapi32/mapi32.spec b/dll/win32/mapi32/mapi32.spec similarity index 100% rename from reactos/dll/win32/mapi32/mapi32.spec rename to dll/win32/mapi32/mapi32.spec diff --git a/reactos/dll/win32/mapi32/mapi32_main.c b/dll/win32/mapi32/mapi32_main.c similarity index 100% rename from reactos/dll/win32/mapi32/mapi32_main.c rename to dll/win32/mapi32/mapi32_main.c diff --git a/reactos/dll/win32/mapi32/prop.c b/dll/win32/mapi32/prop.c similarity index 100% rename from reactos/dll/win32/mapi32/prop.c rename to dll/win32/mapi32/prop.c diff --git a/reactos/dll/win32/mapi32/sendmail.c b/dll/win32/mapi32/sendmail.c similarity index 100% rename from reactos/dll/win32/mapi32/sendmail.c rename to dll/win32/mapi32/sendmail.c diff --git a/reactos/dll/win32/mapi32/util.c b/dll/win32/mapi32/util.c similarity index 100% rename from reactos/dll/win32/mapi32/util.c rename to dll/win32/mapi32/util.c diff --git a/reactos/dll/win32/mlang/mlang.c b/dll/win32/mlang/mlang.c similarity index 100% rename from reactos/dll/win32/mlang/mlang.c rename to dll/win32/mlang/mlang.c diff --git a/reactos/dll/win32/mlang/mlang.rbuild b/dll/win32/mlang/mlang.rbuild similarity index 100% rename from reactos/dll/win32/mlang/mlang.rbuild rename to dll/win32/mlang/mlang.rbuild diff --git a/reactos/dll/win32/mlang/mlang.spec b/dll/win32/mlang/mlang.spec similarity index 100% rename from reactos/dll/win32/mlang/mlang.spec rename to dll/win32/mlang/mlang.spec diff --git a/reactos/dll/win32/mlang/regsvr.c b/dll/win32/mlang/regsvr.c similarity index 100% rename from reactos/dll/win32/mlang/regsvr.c rename to dll/win32/mlang/regsvr.c diff --git a/reactos/dll/win32/mmdrv/TODO b/dll/win32/mmdrv/TODO similarity index 100% rename from reactos/dll/win32/mmdrv/TODO rename to dll/win32/mmdrv/TODO diff --git a/reactos/dll/win32/mmdrv/auxil.c b/dll/win32/mmdrv/auxil.c similarity index 100% rename from reactos/dll/win32/mmdrv/auxil.c rename to dll/win32/mmdrv/auxil.c diff --git a/reactos/dll/win32/mmdrv/common.c b/dll/win32/mmdrv/common.c similarity index 100% rename from reactos/dll/win32/mmdrv/common.c rename to dll/win32/mmdrv/common.c diff --git a/reactos/dll/win32/mmdrv/entry.c b/dll/win32/mmdrv/entry.c similarity index 100% rename from reactos/dll/win32/mmdrv/entry.c rename to dll/win32/mmdrv/entry.c diff --git a/reactos/dll/win32/mmdrv/kernel.c b/dll/win32/mmdrv/kernel.c similarity index 100% rename from reactos/dll/win32/mmdrv/kernel.c rename to dll/win32/mmdrv/kernel.c diff --git a/reactos/dll/win32/mmdrv/midi.c b/dll/win32/mmdrv/midi.c similarity index 100% rename from reactos/dll/win32/mmdrv/midi.c rename to dll/win32/mmdrv/midi.c diff --git a/reactos/dll/win32/mmdrv/mmddk.h b/dll/win32/mmdrv/mmddk.h similarity index 100% rename from reactos/dll/win32/mmdrv/mmddk.h rename to dll/win32/mmdrv/mmddk.h diff --git a/reactos/dll/win32/mmdrv/mmdef.h b/dll/win32/mmdrv/mmdef.h similarity index 100% rename from reactos/dll/win32/mmdrv/mmdef.h rename to dll/win32/mmdrv/mmdef.h diff --git a/reactos/dll/win32/mmdrv/mmdrv.h b/dll/win32/mmdrv/mmdrv.h similarity index 100% rename from reactos/dll/win32/mmdrv/mmdrv.h rename to dll/win32/mmdrv/mmdrv.h diff --git a/reactos/dll/win32/mmdrv/mmdrv.rbuild b/dll/win32/mmdrv/mmdrv.rbuild similarity index 100% rename from reactos/dll/win32/mmdrv/mmdrv.rbuild rename to dll/win32/mmdrv/mmdrv.rbuild diff --git a/reactos/dll/win32/mmdrv/mmdrv.spec b/dll/win32/mmdrv/mmdrv.spec similarity index 100% rename from reactos/dll/win32/mmdrv/mmdrv.spec rename to dll/win32/mmdrv/mmdrv.spec diff --git a/reactos/dll/win32/mmdrv/mme.c b/dll/win32/mmdrv/mme.c similarity index 100% rename from reactos/dll/win32/mmdrv/mme.c rename to dll/win32/mmdrv/mme.c diff --git a/reactos/dll/win32/mmdrv/mmioctl.h b/dll/win32/mmdrv/mmioctl.h similarity index 100% rename from reactos/dll/win32/mmdrv/mmioctl.h rename to dll/win32/mmdrv/mmioctl.h diff --git a/reactos/dll/win32/mmdrv/session.c b/dll/win32/mmdrv/session.c similarity index 100% rename from reactos/dll/win32/mmdrv/session.c rename to dll/win32/mmdrv/session.c diff --git a/reactos/dll/win32/mmdrv/utils.c b/dll/win32/mmdrv/utils.c similarity index 100% rename from reactos/dll/win32/mmdrv/utils.c rename to dll/win32/mmdrv/utils.c diff --git a/reactos/dll/win32/mmdrv/wave.c b/dll/win32/mmdrv/wave.c similarity index 100% rename from reactos/dll/win32/mmdrv/wave.c rename to dll/win32/mmdrv/wave.c diff --git a/reactos/dll/win32/mmdrv/wave.h b/dll/win32/mmdrv/wave.h similarity index 100% rename from reactos/dll/win32/mmdrv/wave.h rename to dll/win32/mmdrv/wave.h diff --git a/reactos/dll/win32/mmdrv/wave_io.c b/dll/win32/mmdrv/wave_io.c similarity index 100% rename from reactos/dll/win32/mmdrv/wave_io.c rename to dll/win32/mmdrv/wave_io.c diff --git a/reactos/dll/win32/modemui/lang/de-DE.rc b/dll/win32/modemui/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/modemui/lang/de-DE.rc rename to dll/win32/modemui/lang/de-DE.rc diff --git a/reactos/dll/win32/modemui/lang/en-US.rc b/dll/win32/modemui/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/modemui/lang/en-US.rc rename to dll/win32/modemui/lang/en-US.rc diff --git a/reactos/dll/win32/modemui/lang/es-ES.rc b/dll/win32/modemui/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/modemui/lang/es-ES.rc rename to dll/win32/modemui/lang/es-ES.rc diff --git a/reactos/dll/win32/modemui/lang/no-NO.rc b/dll/win32/modemui/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/modemui/lang/no-NO.rc rename to dll/win32/modemui/lang/no-NO.rc diff --git a/reactos/dll/win32/modemui/lang/pl-PL.rc b/dll/win32/modemui/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/modemui/lang/pl-PL.rc rename to dll/win32/modemui/lang/pl-PL.rc diff --git a/reactos/dll/win32/modemui/lang/ru-RU.rc b/dll/win32/modemui/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/modemui/lang/ru-RU.rc rename to dll/win32/modemui/lang/ru-RU.rc diff --git a/reactos/dll/win32/modemui/lang/uk-UA.rc b/dll/win32/modemui/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/modemui/lang/uk-UA.rc rename to dll/win32/modemui/lang/uk-UA.rc diff --git a/reactos/dll/win32/modemui/modemui.c b/dll/win32/modemui/modemui.c similarity index 100% rename from reactos/dll/win32/modemui/modemui.c rename to dll/win32/modemui/modemui.c diff --git a/reactos/dll/win32/modemui/modemui.rbuild b/dll/win32/modemui/modemui.rbuild similarity index 100% rename from reactos/dll/win32/modemui/modemui.rbuild rename to dll/win32/modemui/modemui.rbuild diff --git a/reactos/dll/win32/modemui/modemui.rc b/dll/win32/modemui/modemui.rc similarity index 100% rename from reactos/dll/win32/modemui/modemui.rc rename to dll/win32/modemui/modemui.rc diff --git a/reactos/dll/win32/modemui/modemui.spec b/dll/win32/modemui/modemui.spec similarity index 100% rename from reactos/dll/win32/modemui/modemui.spec rename to dll/win32/modemui/modemui.spec diff --git a/reactos/dll/win32/modemui/res/5100.ico b/dll/win32/modemui/res/5100.ico similarity index 100% rename from reactos/dll/win32/modemui/res/5100.ico rename to dll/win32/modemui/res/5100.ico diff --git a/reactos/dll/win32/modemui/res/700.ico b/dll/win32/modemui/res/700.ico similarity index 100% rename from reactos/dll/win32/modemui/res/700.ico rename to dll/win32/modemui/res/700.ico diff --git a/reactos/dll/win32/modemui/res/701.ico b/dll/win32/modemui/res/701.ico similarity index 100% rename from reactos/dll/win32/modemui/res/701.ico rename to dll/win32/modemui/res/701.ico diff --git a/reactos/dll/win32/modemui/res/702.ico b/dll/win32/modemui/res/702.ico similarity index 100% rename from reactos/dll/win32/modemui/res/702.ico rename to dll/win32/modemui/res/702.ico diff --git a/reactos/dll/win32/modemui/res/703.ico b/dll/win32/modemui/res/703.ico similarity index 100% rename from reactos/dll/win32/modemui/res/703.ico rename to dll/win32/modemui/res/703.ico diff --git a/reactos/dll/win32/modemui/resource.h b/dll/win32/modemui/resource.h similarity index 100% rename from reactos/dll/win32/modemui/resource.h rename to dll/win32/modemui/resource.h diff --git a/reactos/dll/win32/mpr/auth.c b/dll/win32/mpr/auth.c similarity index 100% rename from reactos/dll/win32/mpr/auth.c rename to dll/win32/mpr/auth.c diff --git a/reactos/dll/win32/mpr/mpr.rbuild b/dll/win32/mpr/mpr.rbuild similarity index 100% rename from reactos/dll/win32/mpr/mpr.rbuild rename to dll/win32/mpr/mpr.rbuild diff --git a/reactos/dll/win32/mpr/mpr.rc b/dll/win32/mpr/mpr.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr.rc rename to dll/win32/mpr/mpr.rc diff --git a/reactos/dll/win32/mpr/mpr.spec b/dll/win32/mpr/mpr.spec similarity index 100% rename from reactos/dll/win32/mpr/mpr.spec rename to dll/win32/mpr/mpr.spec diff --git a/reactos/dll/win32/mpr/mpr_Bg.rc b/dll/win32/mpr/mpr_Bg.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Bg.rc rename to dll/win32/mpr/mpr_Bg.rc diff --git a/reactos/dll/win32/mpr/mpr_Cs.rc b/dll/win32/mpr/mpr_Cs.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Cs.rc rename to dll/win32/mpr/mpr_Cs.rc diff --git a/reactos/dll/win32/mpr/mpr_Da.rc b/dll/win32/mpr/mpr_Da.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Da.rc rename to dll/win32/mpr/mpr_Da.rc diff --git a/reactos/dll/win32/mpr/mpr_De.rc b/dll/win32/mpr/mpr_De.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_De.rc rename to dll/win32/mpr/mpr_De.rc diff --git a/reactos/dll/win32/mpr/mpr_En.rc b/dll/win32/mpr/mpr_En.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_En.rc rename to dll/win32/mpr/mpr_En.rc diff --git a/reactos/dll/win32/mpr/mpr_Eo.rc b/dll/win32/mpr/mpr_Eo.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Eo.rc rename to dll/win32/mpr/mpr_Eo.rc diff --git a/reactos/dll/win32/mpr/mpr_Es.rc b/dll/win32/mpr/mpr_Es.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Es.rc rename to dll/win32/mpr/mpr_Es.rc diff --git a/reactos/dll/win32/mpr/mpr_Fr.rc b/dll/win32/mpr/mpr_Fr.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Fr.rc rename to dll/win32/mpr/mpr_Fr.rc diff --git a/reactos/dll/win32/mpr/mpr_Hu.rc b/dll/win32/mpr/mpr_Hu.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Hu.rc rename to dll/win32/mpr/mpr_Hu.rc diff --git a/reactos/dll/win32/mpr/mpr_It.rc b/dll/win32/mpr/mpr_It.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_It.rc rename to dll/win32/mpr/mpr_It.rc diff --git a/reactos/dll/win32/mpr/mpr_Ja.rc b/dll/win32/mpr/mpr_Ja.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Ja.rc rename to dll/win32/mpr/mpr_Ja.rc diff --git a/reactos/dll/win32/mpr/mpr_Ko.rc b/dll/win32/mpr/mpr_Ko.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Ko.rc rename to dll/win32/mpr/mpr_Ko.rc diff --git a/reactos/dll/win32/mpr/mpr_Nl.rc b/dll/win32/mpr/mpr_Nl.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Nl.rc rename to dll/win32/mpr/mpr_Nl.rc diff --git a/reactos/dll/win32/mpr/mpr_No.rc b/dll/win32/mpr/mpr_No.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_No.rc rename to dll/win32/mpr/mpr_No.rc diff --git a/reactos/dll/win32/mpr/mpr_Pl.rc b/dll/win32/mpr/mpr_Pl.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Pl.rc rename to dll/win32/mpr/mpr_Pl.rc diff --git a/reactos/dll/win32/mpr/mpr_Pt.rc b/dll/win32/mpr/mpr_Pt.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Pt.rc rename to dll/win32/mpr/mpr_Pt.rc diff --git a/reactos/dll/win32/mpr/mpr_Ro.rc b/dll/win32/mpr/mpr_Ro.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Ro.rc rename to dll/win32/mpr/mpr_Ro.rc diff --git a/reactos/dll/win32/mpr/mpr_Ru.rc b/dll/win32/mpr/mpr_Ru.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Ru.rc rename to dll/win32/mpr/mpr_Ru.rc diff --git a/reactos/dll/win32/mpr/mpr_Si.rc b/dll/win32/mpr/mpr_Si.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Si.rc rename to dll/win32/mpr/mpr_Si.rc diff --git a/reactos/dll/win32/mpr/mpr_Sv.rc b/dll/win32/mpr/mpr_Sv.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Sv.rc rename to dll/win32/mpr/mpr_Sv.rc diff --git a/reactos/dll/win32/mpr/mpr_Tr.rc b/dll/win32/mpr/mpr_Tr.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Tr.rc rename to dll/win32/mpr/mpr_Tr.rc diff --git a/reactos/dll/win32/mpr/mpr_Uk.rc b/dll/win32/mpr/mpr_Uk.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Uk.rc rename to dll/win32/mpr/mpr_Uk.rc diff --git a/reactos/dll/win32/mpr/mpr_Zh.rc b/dll/win32/mpr/mpr_Zh.rc similarity index 100% rename from reactos/dll/win32/mpr/mpr_Zh.rc rename to dll/win32/mpr/mpr_Zh.rc diff --git a/reactos/dll/win32/mpr/mpr_main.c b/dll/win32/mpr/mpr_main.c similarity index 100% rename from reactos/dll/win32/mpr/mpr_main.c rename to dll/win32/mpr/mpr_main.c diff --git a/reactos/dll/win32/mpr/mpr_ros.diff b/dll/win32/mpr/mpr_ros.diff similarity index 100% rename from reactos/dll/win32/mpr/mpr_ros.diff rename to dll/win32/mpr/mpr_ros.diff diff --git a/reactos/dll/win32/mpr/mprres.h b/dll/win32/mpr/mprres.h similarity index 100% rename from reactos/dll/win32/mpr/mprres.h rename to dll/win32/mpr/mprres.h diff --git a/reactos/dll/win32/mpr/multinet.c b/dll/win32/mpr/multinet.c similarity index 100% rename from reactos/dll/win32/mpr/multinet.c rename to dll/win32/mpr/multinet.c diff --git a/reactos/dll/win32/mpr/netspi.h b/dll/win32/mpr/netspi.h similarity index 100% rename from reactos/dll/win32/mpr/netspi.h rename to dll/win32/mpr/netspi.h diff --git a/reactos/dll/win32/mpr/nps.c b/dll/win32/mpr/nps.c similarity index 100% rename from reactos/dll/win32/mpr/nps.c rename to dll/win32/mpr/nps.c diff --git a/reactos/dll/win32/mpr/pwcache.c b/dll/win32/mpr/pwcache.c similarity index 100% rename from reactos/dll/win32/mpr/pwcache.c rename to dll/win32/mpr/pwcache.c diff --git a/reactos/dll/win32/mpr/version.rc b/dll/win32/mpr/version.rc similarity index 100% rename from reactos/dll/win32/mpr/version.rc rename to dll/win32/mpr/version.rc diff --git a/reactos/dll/win32/mpr/wnet.c b/dll/win32/mpr/wnet.c similarity index 100% rename from reactos/dll/win32/mpr/wnet.c rename to dll/win32/mpr/wnet.c diff --git a/reactos/dll/win32/mpr/wnetpriv.h b/dll/win32/mpr/wnetpriv.h similarity index 100% rename from reactos/dll/win32/mpr/wnetpriv.h rename to dll/win32/mpr/wnetpriv.h diff --git a/reactos/dll/win32/mprapi/mprapi.c b/dll/win32/mprapi/mprapi.c similarity index 100% rename from reactos/dll/win32/mprapi/mprapi.c rename to dll/win32/mprapi/mprapi.c diff --git a/reactos/dll/win32/mprapi/mprapi.rbuild b/dll/win32/mprapi/mprapi.rbuild similarity index 100% rename from reactos/dll/win32/mprapi/mprapi.rbuild rename to dll/win32/mprapi/mprapi.rbuild diff --git a/reactos/dll/win32/mprapi/mprapi.spec b/dll/win32/mprapi/mprapi.spec similarity index 100% rename from reactos/dll/win32/mprapi/mprapi.spec rename to dll/win32/mprapi/mprapi.spec diff --git a/reactos/dll/win32/msacm32/Makefile.in b/dll/win32/msacm32/Makefile.in similarity index 100% rename from reactos/dll/win32/msacm32/Makefile.in rename to dll/win32/msacm32/Makefile.in diff --git a/reactos/dll/win32/msacm32/driver.c b/dll/win32/msacm32/driver.c similarity index 100% rename from reactos/dll/win32/msacm32/driver.c rename to dll/win32/msacm32/driver.c diff --git a/reactos/dll/win32/msacm32/filter.c b/dll/win32/msacm32/filter.c similarity index 100% rename from reactos/dll/win32/msacm32/filter.c rename to dll/win32/msacm32/filter.c diff --git a/reactos/dll/win32/msacm32/format.c b/dll/win32/msacm32/format.c similarity index 100% rename from reactos/dll/win32/msacm32/format.c rename to dll/win32/msacm32/format.c diff --git a/reactos/dll/win32/msacm32/imaadp32/Makefile.in b/dll/win32/msacm32/imaadp32/Makefile.in similarity index 100% rename from reactos/dll/win32/msacm32/imaadp32/Makefile.in rename to dll/win32/msacm32/imaadp32/Makefile.in diff --git a/reactos/dll/win32/msacm32/imaadp32/imaadp32.acm.spec b/dll/win32/msacm32/imaadp32/imaadp32.acm.spec similarity index 100% rename from reactos/dll/win32/msacm32/imaadp32/imaadp32.acm.spec rename to dll/win32/msacm32/imaadp32/imaadp32.acm.spec diff --git a/reactos/dll/win32/msacm32/imaadp32/imaadp32.c b/dll/win32/msacm32/imaadp32/imaadp32.c similarity index 100% rename from reactos/dll/win32/msacm32/imaadp32/imaadp32.c rename to dll/win32/msacm32/imaadp32/imaadp32.c diff --git a/reactos/dll/win32/msacm32/internal.c b/dll/win32/msacm32/internal.c similarity index 100% rename from reactos/dll/win32/msacm32/internal.c rename to dll/win32/msacm32/internal.c diff --git a/reactos/dll/win32/msacm32/msacm.rc b/dll/win32/msacm32/msacm.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm.rc rename to dll/win32/msacm32/msacm.rc diff --git a/reactos/dll/win32/msacm32/msacm.spec b/dll/win32/msacm32/msacm.spec similarity index 100% rename from reactos/dll/win32/msacm32/msacm.spec rename to dll/win32/msacm32/msacm.spec diff --git a/reactos/dll/win32/msacm32/msacm.spec.def b/dll/win32/msacm32/msacm.spec.def similarity index 100% rename from reactos/dll/win32/msacm32/msacm.spec.def rename to dll/win32/msacm32/msacm.spec.def diff --git a/reactos/dll/win32/msacm32/msacm32.rbuild b/dll/win32/msacm32/msacm32.rbuild similarity index 100% rename from reactos/dll/win32/msacm32/msacm32.rbuild rename to dll/win32/msacm32/msacm32.rbuild diff --git a/reactos/dll/win32/msacm32/msacm32.spec b/dll/win32/msacm32/msacm32.spec similarity index 100% rename from reactos/dll/win32/msacm32/msacm32.spec rename to dll/win32/msacm32/msacm32.spec diff --git a/reactos/dll/win32/msacm32/msacm32_main.c b/dll/win32/msacm32/msacm32_main.c similarity index 100% rename from reactos/dll/win32/msacm32/msacm32_main.c rename to dll/win32/msacm32/msacm32_main.c diff --git a/reactos/dll/win32/msacm32/msacm_De.rc b/dll/win32/msacm32/msacm_De.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_De.rc rename to dll/win32/msacm32/msacm_De.rc diff --git a/reactos/dll/win32/msacm32/msacm_El.rc b/dll/win32/msacm32/msacm_El.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_El.rc rename to dll/win32/msacm32/msacm_El.rc diff --git a/reactos/dll/win32/msacm32/msacm_En.rc b/dll/win32/msacm32/msacm_En.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_En.rc rename to dll/win32/msacm32/msacm_En.rc diff --git a/reactos/dll/win32/msacm32/msacm_Es.rc b/dll/win32/msacm32/msacm_Es.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Es.rc rename to dll/win32/msacm32/msacm_Es.rc diff --git a/reactos/dll/win32/msacm32/msacm_Fr.rc b/dll/win32/msacm32/msacm_Fr.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Fr.rc rename to dll/win32/msacm32/msacm_Fr.rc diff --git a/reactos/dll/win32/msacm32/msacm_Hu.rc b/dll/win32/msacm32/msacm_Hu.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Hu.rc rename to dll/win32/msacm32/msacm_Hu.rc diff --git a/reactos/dll/win32/msacm32/msacm_It.rc b/dll/win32/msacm32/msacm_It.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_It.rc rename to dll/win32/msacm32/msacm_It.rc diff --git a/reactos/dll/win32/msacm32/msacm_Ja.rc b/dll/win32/msacm32/msacm_Ja.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Ja.rc rename to dll/win32/msacm32/msacm_Ja.rc diff --git a/reactos/dll/win32/msacm32/msacm_Nl.rc b/dll/win32/msacm32/msacm_Nl.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Nl.rc rename to dll/win32/msacm32/msacm_Nl.rc diff --git a/reactos/dll/win32/msacm32/msacm_No.rc b/dll/win32/msacm32/msacm_No.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_No.rc rename to dll/win32/msacm32/msacm_No.rc diff --git a/reactos/dll/win32/msacm32/msacm_Pl.rc b/dll/win32/msacm32/msacm_Pl.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Pl.rc rename to dll/win32/msacm32/msacm_Pl.rc diff --git a/reactos/dll/win32/msacm32/msacm_Pt.rc b/dll/win32/msacm32/msacm_Pt.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Pt.rc rename to dll/win32/msacm32/msacm_Pt.rc diff --git a/reactos/dll/win32/msacm32/msacm_Ru.rc b/dll/win32/msacm32/msacm_Ru.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Ru.rc rename to dll/win32/msacm32/msacm_Ru.rc diff --git a/reactos/dll/win32/msacm32/msacm_Sv.rc b/dll/win32/msacm32/msacm_Sv.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Sv.rc rename to dll/win32/msacm32/msacm_Sv.rc diff --git a/reactos/dll/win32/msacm32/msacm_Uk.rc b/dll/win32/msacm32/msacm_Uk.rc similarity index 100% rename from reactos/dll/win32/msacm32/msacm_Uk.rc rename to dll/win32/msacm32/msacm_Uk.rc diff --git a/reactos/dll/win32/msacm32/msacm_main.c b/dll/win32/msacm32/msacm_main.c similarity index 100% rename from reactos/dll/win32/msacm32/msacm_main.c rename to dll/win32/msacm32/msacm_main.c diff --git a/reactos/dll/win32/msacm32/msacm_ros.diff b/dll/win32/msacm32/msacm_ros.diff similarity index 100% rename from reactos/dll/win32/msacm32/msacm_ros.diff rename to dll/win32/msacm32/msacm_ros.diff diff --git a/reactos/dll/win32/msacm32/msadp32/Makefile.in b/dll/win32/msacm32/msadp32/Makefile.in similarity index 100% rename from reactos/dll/win32/msacm32/msadp32/Makefile.in rename to dll/win32/msacm32/msadp32/Makefile.in diff --git a/reactos/dll/win32/msacm32/msadp32/msadp32.acm.spec b/dll/win32/msacm32/msadp32/msadp32.acm.spec similarity index 100% rename from reactos/dll/win32/msacm32/msadp32/msadp32.acm.spec rename to dll/win32/msacm32/msadp32/msadp32.acm.spec diff --git a/reactos/dll/win32/msacm32/msadp32/msadp32.c b/dll/win32/msacm32/msadp32/msadp32.c similarity index 100% rename from reactos/dll/win32/msacm32/msadp32/msadp32.c rename to dll/win32/msacm32/msadp32/msadp32.c diff --git a/reactos/dll/win32/msacm32/pcmconverter.c b/dll/win32/msacm32/pcmconverter.c similarity index 100% rename from reactos/dll/win32/msacm32/pcmconverter.c rename to dll/win32/msacm32/pcmconverter.c diff --git a/reactos/dll/win32/msacm32/stream.c b/dll/win32/msacm32/stream.c similarity index 100% rename from reactos/dll/win32/msacm32/stream.c rename to dll/win32/msacm32/stream.c diff --git a/reactos/dll/win32/msacm32/wineacm.h b/dll/win32/msacm32/wineacm.h similarity index 100% rename from reactos/dll/win32/msacm32/wineacm.h rename to dll/win32/msacm32/wineacm.h diff --git a/reactos/dll/win32/msafd/include/debug.h b/dll/win32/msafd/include/debug.h similarity index 100% rename from reactos/dll/win32/msafd/include/debug.h rename to dll/win32/msafd/include/debug.h diff --git a/reactos/dll/win32/msafd/include/helpers.h b/dll/win32/msafd/include/helpers.h similarity index 100% rename from reactos/dll/win32/msafd/include/helpers.h rename to dll/win32/msafd/include/helpers.h diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/dll/win32/msafd/misc/dllmain.c similarity index 100% rename from reactos/dll/win32/msafd/misc/dllmain.c rename to dll/win32/msafd/misc/dllmain.c diff --git a/reactos/dll/win32/msafd/misc/event.c b/dll/win32/msafd/misc/event.c similarity index 100% rename from reactos/dll/win32/msafd/misc/event.c rename to dll/win32/msafd/misc/event.c diff --git a/reactos/dll/win32/msafd/misc/helpers.c b/dll/win32/msafd/misc/helpers.c similarity index 100% rename from reactos/dll/win32/msafd/misc/helpers.c rename to dll/win32/msafd/misc/helpers.c diff --git a/reactos/dll/win32/msafd/misc/sndrcv.c b/dll/win32/msafd/misc/sndrcv.c similarity index 100% rename from reactos/dll/win32/msafd/misc/sndrcv.c rename to dll/win32/msafd/misc/sndrcv.c diff --git a/reactos/dll/win32/msafd/misc/stubs.c b/dll/win32/msafd/misc/stubs.c similarity index 100% rename from reactos/dll/win32/msafd/misc/stubs.c rename to dll/win32/msafd/misc/stubs.c diff --git a/reactos/dll/win32/msafd/msafd.def b/dll/win32/msafd/msafd.def similarity index 100% rename from reactos/dll/win32/msafd/msafd.def rename to dll/win32/msafd/msafd.def diff --git a/reactos/dll/win32/msafd/msafd.h b/dll/win32/msafd/msafd.h similarity index 100% rename from reactos/dll/win32/msafd/msafd.h rename to dll/win32/msafd/msafd.h diff --git a/reactos/dll/win32/msafd/msafd.rbuild b/dll/win32/msafd/msafd.rbuild similarity index 100% rename from reactos/dll/win32/msafd/msafd.rbuild rename to dll/win32/msafd/msafd.rbuild diff --git a/reactos/dll/win32/msafd/msafd.rc b/dll/win32/msafd/msafd.rc similarity index 100% rename from reactos/dll/win32/msafd/msafd.rc rename to dll/win32/msafd/msafd.rc diff --git a/reactos/dll/win32/mscoree/corruntimehost.c b/dll/win32/mscoree/corruntimehost.c similarity index 100% rename from reactos/dll/win32/mscoree/corruntimehost.c rename to dll/win32/mscoree/corruntimehost.c diff --git a/reactos/dll/win32/mscoree/mscoree.rbuild b/dll/win32/mscoree/mscoree.rbuild similarity index 100% rename from reactos/dll/win32/mscoree/mscoree.rbuild rename to dll/win32/mscoree/mscoree.rbuild diff --git a/reactos/dll/win32/mscoree/mscoree.spec b/dll/win32/mscoree/mscoree.spec similarity index 100% rename from reactos/dll/win32/mscoree/mscoree.spec rename to dll/win32/mscoree/mscoree.spec diff --git a/reactos/dll/win32/mscoree/mscoree_main.c b/dll/win32/mscoree/mscoree_main.c similarity index 100% rename from reactos/dll/win32/mscoree/mscoree_main.c rename to dll/win32/mscoree/mscoree_main.c diff --git a/reactos/dll/win32/mscoree/mscoree_private.h b/dll/win32/mscoree/mscoree_private.h similarity index 100% rename from reactos/dll/win32/mscoree/mscoree_private.h rename to dll/win32/mscoree/mscoree_private.h diff --git a/reactos/dll/win32/mscoree/mscoree_ros.diff b/dll/win32/mscoree/mscoree_ros.diff similarity index 100% rename from reactos/dll/win32/mscoree/mscoree_ros.diff rename to dll/win32/mscoree/mscoree_ros.diff diff --git a/reactos/dll/win32/msgina/gui.c b/dll/win32/msgina/gui.c similarity index 100% rename from reactos/dll/win32/msgina/gui.c rename to dll/win32/msgina/gui.c diff --git a/reactos/dll/win32/msgina/lang/bg-BG.rc b/dll/win32/msgina/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/bg-BG.rc rename to dll/win32/msgina/lang/bg-BG.rc diff --git a/reactos/dll/win32/msgina/lang/cs-CZ.rc b/dll/win32/msgina/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/cs-CZ.rc rename to dll/win32/msgina/lang/cs-CZ.rc diff --git a/reactos/dll/win32/msgina/lang/de-DE.rc b/dll/win32/msgina/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/de-DE.rc rename to dll/win32/msgina/lang/de-DE.rc diff --git a/reactos/dll/win32/msgina/lang/en-US.rc b/dll/win32/msgina/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/en-US.rc rename to dll/win32/msgina/lang/en-US.rc diff --git a/reactos/dll/win32/msgina/lang/es-ES.rc b/dll/win32/msgina/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/es-ES.rc rename to dll/win32/msgina/lang/es-ES.rc diff --git a/reactos/dll/win32/msgina/lang/fr-FR.rc b/dll/win32/msgina/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/fr-FR.rc rename to dll/win32/msgina/lang/fr-FR.rc diff --git a/reactos/dll/win32/msgina/lang/id-ID.rc b/dll/win32/msgina/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/id-ID.rc rename to dll/win32/msgina/lang/id-ID.rc diff --git a/reactos/dll/win32/msgina/lang/it-IT.rc b/dll/win32/msgina/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/it-IT.rc rename to dll/win32/msgina/lang/it-IT.rc diff --git a/reactos/dll/win32/msgina/lang/no-NO.rc b/dll/win32/msgina/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/no-NO.rc rename to dll/win32/msgina/lang/no-NO.rc diff --git a/reactos/dll/win32/msgina/lang/pl-PL.rc b/dll/win32/msgina/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/pl-PL.rc rename to dll/win32/msgina/lang/pl-PL.rc diff --git a/reactos/dll/win32/msgina/lang/ru-RU.rc b/dll/win32/msgina/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/ru-RU.rc rename to dll/win32/msgina/lang/ru-RU.rc diff --git a/reactos/dll/win32/msgina/lang/sk-SK.rc b/dll/win32/msgina/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/sk-SK.rc rename to dll/win32/msgina/lang/sk-SK.rc diff --git a/reactos/dll/win32/msgina/lang/uk-UA.rc b/dll/win32/msgina/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/uk-UA.rc rename to dll/win32/msgina/lang/uk-UA.rc diff --git a/reactos/dll/win32/msgina/msgina.c b/dll/win32/msgina/msgina.c similarity index 100% rename from reactos/dll/win32/msgina/msgina.c rename to dll/win32/msgina/msgina.c diff --git a/reactos/dll/win32/msgina/msgina.h b/dll/win32/msgina/msgina.h similarity index 100% rename from reactos/dll/win32/msgina/msgina.h rename to dll/win32/msgina/msgina.h diff --git a/reactos/dll/win32/msgina/msgina.rbuild b/dll/win32/msgina/msgina.rbuild similarity index 100% rename from reactos/dll/win32/msgina/msgina.rbuild rename to dll/win32/msgina/msgina.rbuild diff --git a/reactos/dll/win32/msgina/msgina.rc b/dll/win32/msgina/msgina.rc similarity index 100% rename from reactos/dll/win32/msgina/msgina.rc rename to dll/win32/msgina/msgina.rc diff --git a/reactos/dll/win32/msgina/msgina.spec b/dll/win32/msgina/msgina.spec similarity index 100% rename from reactos/dll/win32/msgina/msgina.spec rename to dll/win32/msgina/msgina.spec diff --git a/reactos/dll/win32/msgina/resource.h b/dll/win32/msgina/resource.h similarity index 100% rename from reactos/dll/win32/msgina/resource.h rename to dll/win32/msgina/resource.h diff --git a/reactos/dll/win32/msgina/resources/ico_logoff.ico b/dll/win32/msgina/resources/ico_logoff.ico similarity index 100% rename from reactos/dll/win32/msgina/resources/ico_logoff.ico rename to dll/win32/msgina/resources/ico_logoff.ico diff --git a/reactos/dll/win32/msgina/resources/reactos.bmp b/dll/win32/msgina/resources/reactos.bmp similarity index 100% rename from reactos/dll/win32/msgina/resources/reactos.bmp rename to dll/win32/msgina/resources/reactos.bmp diff --git a/reactos/dll/win32/msgina/stubs.c b/dll/win32/msgina/stubs.c similarity index 100% rename from reactos/dll/win32/msgina/stubs.c rename to dll/win32/msgina/stubs.c diff --git a/reactos/dll/win32/msgina/tui.c b/dll/win32/msgina/tui.c similarity index 100% rename from reactos/dll/win32/msgina/tui.c rename to dll/win32/msgina/tui.c diff --git a/reactos/dll/win32/mshtml.tlb/mshtml.tlb.rbuild b/dll/win32/mshtml.tlb/mshtml.tlb.rbuild similarity index 100% rename from reactos/dll/win32/mshtml.tlb/mshtml.tlb.rbuild rename to dll/win32/mshtml.tlb/mshtml.tlb.rbuild diff --git a/reactos/dll/win32/mshtml.tlb/mshtml.tlb.spec b/dll/win32/mshtml.tlb/mshtml.tlb.spec similarity index 100% rename from reactos/dll/win32/mshtml.tlb/mshtml.tlb.spec rename to dll/win32/mshtml.tlb/mshtml.tlb.spec diff --git a/reactos/dll/win32/mshtml.tlb/mshtml_tlb.idl b/dll/win32/mshtml.tlb/mshtml_tlb.idl similarity index 100% rename from reactos/dll/win32/mshtml.tlb/mshtml_tlb.idl rename to dll/win32/mshtml.tlb/mshtml_tlb.idl diff --git a/reactos/dll/win32/mshtml.tlb/rsrc.rc b/dll/win32/mshtml.tlb/rsrc.rc similarity index 100% rename from reactos/dll/win32/mshtml.tlb/rsrc.rc rename to dll/win32/mshtml.tlb/rsrc.rc diff --git a/reactos/dll/win32/mshtml/Bg.rc b/dll/win32/mshtml/Bg.rc similarity index 100% rename from reactos/dll/win32/mshtml/Bg.rc rename to dll/win32/mshtml/Bg.rc diff --git a/reactos/dll/win32/mshtml/Da.rc b/dll/win32/mshtml/Da.rc similarity index 100% rename from reactos/dll/win32/mshtml/Da.rc rename to dll/win32/mshtml/Da.rc diff --git a/reactos/dll/win32/mshtml/De.rc b/dll/win32/mshtml/De.rc similarity index 100% rename from reactos/dll/win32/mshtml/De.rc rename to dll/win32/mshtml/De.rc diff --git a/reactos/dll/win32/mshtml/En.rc b/dll/win32/mshtml/En.rc similarity index 100% rename from reactos/dll/win32/mshtml/En.rc rename to dll/win32/mshtml/En.rc diff --git a/reactos/dll/win32/mshtml/Es.rc b/dll/win32/mshtml/Es.rc similarity index 100% rename from reactos/dll/win32/mshtml/Es.rc rename to dll/win32/mshtml/Es.rc diff --git a/reactos/dll/win32/mshtml/Fi.rc b/dll/win32/mshtml/Fi.rc similarity index 100% rename from reactos/dll/win32/mshtml/Fi.rc rename to dll/win32/mshtml/Fi.rc diff --git a/reactos/dll/win32/mshtml/Fr.rc b/dll/win32/mshtml/Fr.rc similarity index 100% rename from reactos/dll/win32/mshtml/Fr.rc rename to dll/win32/mshtml/Fr.rc diff --git a/reactos/dll/win32/mshtml/Hu.rc b/dll/win32/mshtml/Hu.rc similarity index 100% rename from reactos/dll/win32/mshtml/Hu.rc rename to dll/win32/mshtml/Hu.rc diff --git a/reactos/dll/win32/mshtml/Ko.rc b/dll/win32/mshtml/Ko.rc similarity index 100% rename from reactos/dll/win32/mshtml/Ko.rc rename to dll/win32/mshtml/Ko.rc diff --git a/reactos/dll/win32/mshtml/Nl.rc b/dll/win32/mshtml/Nl.rc similarity index 100% rename from reactos/dll/win32/mshtml/Nl.rc rename to dll/win32/mshtml/Nl.rc diff --git a/reactos/dll/win32/mshtml/No.rc b/dll/win32/mshtml/No.rc similarity index 100% rename from reactos/dll/win32/mshtml/No.rc rename to dll/win32/mshtml/No.rc diff --git a/reactos/dll/win32/mshtml/Pl.rc b/dll/win32/mshtml/Pl.rc similarity index 100% rename from reactos/dll/win32/mshtml/Pl.rc rename to dll/win32/mshtml/Pl.rc diff --git a/reactos/dll/win32/mshtml/Ru.rc b/dll/win32/mshtml/Ru.rc similarity index 100% rename from reactos/dll/win32/mshtml/Ru.rc rename to dll/win32/mshtml/Ru.rc diff --git a/reactos/dll/win32/mshtml/Si.rc b/dll/win32/mshtml/Si.rc similarity index 100% rename from reactos/dll/win32/mshtml/Si.rc rename to dll/win32/mshtml/Si.rc diff --git a/reactos/dll/win32/mshtml/Sv.rc b/dll/win32/mshtml/Sv.rc similarity index 100% rename from reactos/dll/win32/mshtml/Sv.rc rename to dll/win32/mshtml/Sv.rc diff --git a/reactos/dll/win32/mshtml/Tr.rc b/dll/win32/mshtml/Tr.rc similarity index 100% rename from reactos/dll/win32/mshtml/Tr.rc rename to dll/win32/mshtml/Tr.rc diff --git a/reactos/dll/win32/mshtml/Zh.rc b/dll/win32/mshtml/Zh.rc similarity index 100% rename from reactos/dll/win32/mshtml/Zh.rc rename to dll/win32/mshtml/Zh.rc diff --git a/reactos/dll/win32/mshtml/blank.htm b/dll/win32/mshtml/blank.htm similarity index 100% rename from reactos/dll/win32/mshtml/blank.htm rename to dll/win32/mshtml/blank.htm diff --git a/reactos/dll/win32/mshtml/conpoint.c b/dll/win32/mshtml/conpoint.c similarity index 100% rename from reactos/dll/win32/mshtml/conpoint.c rename to dll/win32/mshtml/conpoint.c diff --git a/reactos/dll/win32/mshtml/dispex.c b/dll/win32/mshtml/dispex.c similarity index 100% rename from reactos/dll/win32/mshtml/dispex.c rename to dll/win32/mshtml/dispex.c diff --git a/reactos/dll/win32/mshtml/editor.c b/dll/win32/mshtml/editor.c similarity index 100% rename from reactos/dll/win32/mshtml/editor.c rename to dll/win32/mshtml/editor.c diff --git a/reactos/dll/win32/mshtml/hlink.c b/dll/win32/mshtml/hlink.c similarity index 100% rename from reactos/dll/win32/mshtml/hlink.c rename to dll/win32/mshtml/hlink.c diff --git a/reactos/dll/win32/mshtml/htmlanchor.c b/dll/win32/mshtml/htmlanchor.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlanchor.c rename to dll/win32/mshtml/htmlanchor.c diff --git a/reactos/dll/win32/mshtml/htmlbody.c b/dll/win32/mshtml/htmlbody.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlbody.c rename to dll/win32/mshtml/htmlbody.c diff --git a/reactos/dll/win32/mshtml/htmlcomment.c b/dll/win32/mshtml/htmlcomment.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlcomment.c rename to dll/win32/mshtml/htmlcomment.c diff --git a/reactos/dll/win32/mshtml/htmldoc.c b/dll/win32/mshtml/htmldoc.c similarity index 100% rename from reactos/dll/win32/mshtml/htmldoc.c rename to dll/win32/mshtml/htmldoc.c diff --git a/reactos/dll/win32/mshtml/htmldoc3.c b/dll/win32/mshtml/htmldoc3.c similarity index 100% rename from reactos/dll/win32/mshtml/htmldoc3.c rename to dll/win32/mshtml/htmldoc3.c diff --git a/reactos/dll/win32/mshtml/htmldoc5.c b/dll/win32/mshtml/htmldoc5.c similarity index 100% rename from reactos/dll/win32/mshtml/htmldoc5.c rename to dll/win32/mshtml/htmldoc5.c diff --git a/reactos/dll/win32/mshtml/htmlelem.c b/dll/win32/mshtml/htmlelem.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlelem.c rename to dll/win32/mshtml/htmlelem.c diff --git a/reactos/dll/win32/mshtml/htmlelem2.c b/dll/win32/mshtml/htmlelem2.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlelem2.c rename to dll/win32/mshtml/htmlelem2.c diff --git a/reactos/dll/win32/mshtml/htmlevent.c b/dll/win32/mshtml/htmlevent.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlevent.c rename to dll/win32/mshtml/htmlevent.c diff --git a/reactos/dll/win32/mshtml/htmlgeneric.c b/dll/win32/mshtml/htmlgeneric.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlgeneric.c rename to dll/win32/mshtml/htmlgeneric.c diff --git a/reactos/dll/win32/mshtml/htmlimg.c b/dll/win32/mshtml/htmlimg.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlimg.c rename to dll/win32/mshtml/htmlimg.c diff --git a/reactos/dll/win32/mshtml/htmlinput.c b/dll/win32/mshtml/htmlinput.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlinput.c rename to dll/win32/mshtml/htmlinput.c diff --git a/reactos/dll/win32/mshtml/htmllocation.c b/dll/win32/mshtml/htmllocation.c similarity index 100% rename from reactos/dll/win32/mshtml/htmllocation.c rename to dll/win32/mshtml/htmllocation.c diff --git a/reactos/dll/win32/mshtml/htmlnode.c b/dll/win32/mshtml/htmlnode.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlnode.c rename to dll/win32/mshtml/htmlnode.c diff --git a/reactos/dll/win32/mshtml/htmloption.c b/dll/win32/mshtml/htmloption.c similarity index 100% rename from reactos/dll/win32/mshtml/htmloption.c rename to dll/win32/mshtml/htmloption.c diff --git a/reactos/dll/win32/mshtml/htmlscript.c b/dll/win32/mshtml/htmlscript.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlscript.c rename to dll/win32/mshtml/htmlscript.c diff --git a/reactos/dll/win32/mshtml/htmlselect.c b/dll/win32/mshtml/htmlselect.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlselect.c rename to dll/win32/mshtml/htmlselect.c diff --git a/reactos/dll/win32/mshtml/htmlstyle.c b/dll/win32/mshtml/htmlstyle.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlstyle.c rename to dll/win32/mshtml/htmlstyle.c diff --git a/reactos/dll/win32/mshtml/htmlstylesheet.c b/dll/win32/mshtml/htmlstylesheet.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlstylesheet.c rename to dll/win32/mshtml/htmlstylesheet.c diff --git a/reactos/dll/win32/mshtml/htmltable.c b/dll/win32/mshtml/htmltable.c similarity index 100% rename from reactos/dll/win32/mshtml/htmltable.c rename to dll/win32/mshtml/htmltable.c diff --git a/reactos/dll/win32/mshtml/htmltextarea.c b/dll/win32/mshtml/htmltextarea.c similarity index 100% rename from reactos/dll/win32/mshtml/htmltextarea.c rename to dll/win32/mshtml/htmltextarea.c diff --git a/reactos/dll/win32/mshtml/htmltextcont.c b/dll/win32/mshtml/htmltextcont.c similarity index 100% rename from reactos/dll/win32/mshtml/htmltextcont.c rename to dll/win32/mshtml/htmltextcont.c diff --git a/reactos/dll/win32/mshtml/htmltextnode.c b/dll/win32/mshtml/htmltextnode.c similarity index 100% rename from reactos/dll/win32/mshtml/htmltextnode.c rename to dll/win32/mshtml/htmltextnode.c diff --git a/reactos/dll/win32/mshtml/htmlwindow.c b/dll/win32/mshtml/htmlwindow.c similarity index 100% rename from reactos/dll/win32/mshtml/htmlwindow.c rename to dll/win32/mshtml/htmlwindow.c diff --git a/reactos/dll/win32/mshtml/install.c b/dll/win32/mshtml/install.c similarity index 100% rename from reactos/dll/win32/mshtml/install.c rename to dll/win32/mshtml/install.c diff --git a/reactos/dll/win32/mshtml/loadopts.c b/dll/win32/mshtml/loadopts.c similarity index 100% rename from reactos/dll/win32/mshtml/loadopts.c rename to dll/win32/mshtml/loadopts.c diff --git a/reactos/dll/win32/mshtml/main.c b/dll/win32/mshtml/main.c similarity index 100% rename from reactos/dll/win32/mshtml/main.c rename to dll/win32/mshtml/main.c diff --git a/reactos/dll/win32/mshtml/mshtml.inf b/dll/win32/mshtml/mshtml.inf similarity index 100% rename from reactos/dll/win32/mshtml/mshtml.inf rename to dll/win32/mshtml/mshtml.inf diff --git a/reactos/dll/win32/mshtml/mshtml.rbuild b/dll/win32/mshtml/mshtml.rbuild similarity index 100% rename from reactos/dll/win32/mshtml/mshtml.rbuild rename to dll/win32/mshtml/mshtml.rbuild diff --git a/reactos/dll/win32/mshtml/mshtml.spec b/dll/win32/mshtml/mshtml.spec similarity index 100% rename from reactos/dll/win32/mshtml/mshtml.spec rename to dll/win32/mshtml/mshtml.spec diff --git a/reactos/dll/win32/mshtml/mshtml_private.h b/dll/win32/mshtml/mshtml_private.h similarity index 100% rename from reactos/dll/win32/mshtml/mshtml_private.h rename to dll/win32/mshtml/mshtml_private.h diff --git a/reactos/dll/win32/mshtml/navigate.c b/dll/win32/mshtml/navigate.c similarity index 100% rename from reactos/dll/win32/mshtml/navigate.c rename to dll/win32/mshtml/navigate.c diff --git a/reactos/dll/win32/mshtml/nsembed.c b/dll/win32/mshtml/nsembed.c similarity index 100% rename from reactos/dll/win32/mshtml/nsembed.c rename to dll/win32/mshtml/nsembed.c diff --git a/reactos/dll/win32/mshtml/nsevents.c b/dll/win32/mshtml/nsevents.c similarity index 100% rename from reactos/dll/win32/mshtml/nsevents.c rename to dll/win32/mshtml/nsevents.c diff --git a/reactos/dll/win32/mshtml/nsiface.idl b/dll/win32/mshtml/nsiface.idl similarity index 100% rename from reactos/dll/win32/mshtml/nsiface.idl rename to dll/win32/mshtml/nsiface.idl diff --git a/reactos/dll/win32/mshtml/nsio.c b/dll/win32/mshtml/nsio.c similarity index 100% rename from reactos/dll/win32/mshtml/nsio.c rename to dll/win32/mshtml/nsio.c diff --git a/reactos/dll/win32/mshtml/nsservice.c b/dll/win32/mshtml/nsservice.c similarity index 100% rename from reactos/dll/win32/mshtml/nsservice.c rename to dll/win32/mshtml/nsservice.c diff --git a/reactos/dll/win32/mshtml/olecmd.c b/dll/win32/mshtml/olecmd.c similarity index 100% rename from reactos/dll/win32/mshtml/olecmd.c rename to dll/win32/mshtml/olecmd.c diff --git a/reactos/dll/win32/mshtml/oleobj.c b/dll/win32/mshtml/oleobj.c similarity index 100% rename from reactos/dll/win32/mshtml/oleobj.c rename to dll/win32/mshtml/oleobj.c diff --git a/reactos/dll/win32/mshtml/olewnd.c b/dll/win32/mshtml/olewnd.c similarity index 100% rename from reactos/dll/win32/mshtml/olewnd.c rename to dll/win32/mshtml/olewnd.c diff --git a/reactos/dll/win32/mshtml/omnavigator.c b/dll/win32/mshtml/omnavigator.c similarity index 100% rename from reactos/dll/win32/mshtml/omnavigator.c rename to dll/win32/mshtml/omnavigator.c diff --git a/reactos/dll/win32/mshtml/persist.c b/dll/win32/mshtml/persist.c similarity index 100% rename from reactos/dll/win32/mshtml/persist.c rename to dll/win32/mshtml/persist.c diff --git a/reactos/dll/win32/mshtml/protocol.c b/dll/win32/mshtml/protocol.c similarity index 100% rename from reactos/dll/win32/mshtml/protocol.c rename to dll/win32/mshtml/protocol.c diff --git a/reactos/dll/win32/mshtml/resource.h b/dll/win32/mshtml/resource.h similarity index 100% rename from reactos/dll/win32/mshtml/resource.h rename to dll/win32/mshtml/resource.h diff --git a/reactos/dll/win32/mshtml/rsrc.rc b/dll/win32/mshtml/rsrc.rc similarity index 100% rename from reactos/dll/win32/mshtml/rsrc.rc rename to dll/win32/mshtml/rsrc.rc diff --git a/reactos/dll/win32/mshtml/script.c b/dll/win32/mshtml/script.c similarity index 100% rename from reactos/dll/win32/mshtml/script.c rename to dll/win32/mshtml/script.c diff --git a/reactos/dll/win32/mshtml/selection.c b/dll/win32/mshtml/selection.c similarity index 100% rename from reactos/dll/win32/mshtml/selection.c rename to dll/win32/mshtml/selection.c diff --git a/reactos/dll/win32/mshtml/service.c b/dll/win32/mshtml/service.c similarity index 100% rename from reactos/dll/win32/mshtml/service.c rename to dll/win32/mshtml/service.c diff --git a/reactos/dll/win32/mshtml/task.c b/dll/win32/mshtml/task.c similarity index 100% rename from reactos/dll/win32/mshtml/task.c rename to dll/win32/mshtml/task.c diff --git a/reactos/dll/win32/mshtml/txtrange.c b/dll/win32/mshtml/txtrange.c similarity index 100% rename from reactos/dll/win32/mshtml/txtrange.c rename to dll/win32/mshtml/txtrange.c diff --git a/reactos/dll/win32/mshtml/view.c b/dll/win32/mshtml/view.c similarity index 100% rename from reactos/dll/win32/mshtml/view.c rename to dll/win32/mshtml/view.c diff --git a/reactos/dll/win32/msi/action.c b/dll/win32/msi/action.c similarity index 100% rename from reactos/dll/win32/msi/action.c rename to dll/win32/msi/action.c diff --git a/reactos/dll/win32/msi/alter.c b/dll/win32/msi/alter.c similarity index 100% rename from reactos/dll/win32/msi/alter.c rename to dll/win32/msi/alter.c diff --git a/reactos/dll/win32/msi/appsearch.c b/dll/win32/msi/appsearch.c similarity index 100% rename from reactos/dll/win32/msi/appsearch.c rename to dll/win32/msi/appsearch.c diff --git a/reactos/dll/win32/msi/automation.c b/dll/win32/msi/automation.c similarity index 100% rename from reactos/dll/win32/msi/automation.c rename to dll/win32/msi/automation.c diff --git a/reactos/dll/win32/msi/classes.c b/dll/win32/msi/classes.c similarity index 100% rename from reactos/dll/win32/msi/classes.c rename to dll/win32/msi/classes.c diff --git a/reactos/dll/win32/msi/cond.tab.c b/dll/win32/msi/cond.tab.c similarity index 100% rename from reactos/dll/win32/msi/cond.tab.c rename to dll/win32/msi/cond.tab.c diff --git a/reactos/dll/win32/msi/cond.tab.h b/dll/win32/msi/cond.tab.h similarity index 100% rename from reactos/dll/win32/msi/cond.tab.h rename to dll/win32/msi/cond.tab.h diff --git a/reactos/dll/win32/msi/cond.y b/dll/win32/msi/cond.y similarity index 100% rename from reactos/dll/win32/msi/cond.y rename to dll/win32/msi/cond.y diff --git a/reactos/dll/win32/msi/create.c b/dll/win32/msi/create.c similarity index 100% rename from reactos/dll/win32/msi/create.c rename to dll/win32/msi/create.c diff --git a/reactos/dll/win32/msi/custom.c b/dll/win32/msi/custom.c similarity index 100% rename from reactos/dll/win32/msi/custom.c rename to dll/win32/msi/custom.c diff --git a/reactos/dll/win32/msi/database.c b/dll/win32/msi/database.c similarity index 100% rename from reactos/dll/win32/msi/database.c rename to dll/win32/msi/database.c diff --git a/reactos/dll/win32/msi/delete.c b/dll/win32/msi/delete.c similarity index 100% rename from reactos/dll/win32/msi/delete.c rename to dll/win32/msi/delete.c diff --git a/reactos/dll/win32/msi/dialog.c b/dll/win32/msi/dialog.c similarity index 100% rename from reactos/dll/win32/msi/dialog.c rename to dll/win32/msi/dialog.c diff --git a/reactos/dll/win32/msi/distinct.c b/dll/win32/msi/distinct.c similarity index 100% rename from reactos/dll/win32/msi/distinct.c rename to dll/win32/msi/distinct.c diff --git a/reactos/dll/win32/msi/events.c b/dll/win32/msi/events.c similarity index 100% rename from reactos/dll/win32/msi/events.c rename to dll/win32/msi/events.c diff --git a/reactos/dll/win32/msi/files.c b/dll/win32/msi/files.c similarity index 100% rename from reactos/dll/win32/msi/files.c rename to dll/win32/msi/files.c diff --git a/reactos/dll/win32/msi/font.c b/dll/win32/msi/font.c similarity index 100% rename from reactos/dll/win32/msi/font.c rename to dll/win32/msi/font.c diff --git a/reactos/dll/win32/msi/format.c b/dll/win32/msi/format.c similarity index 100% rename from reactos/dll/win32/msi/format.c rename to dll/win32/msi/format.c diff --git a/reactos/dll/win32/msi/handle.c b/dll/win32/msi/handle.c similarity index 100% rename from reactos/dll/win32/msi/handle.c rename to dll/win32/msi/handle.c diff --git a/reactos/dll/win32/msi/helpers.c b/dll/win32/msi/helpers.c similarity index 100% rename from reactos/dll/win32/msi/helpers.c rename to dll/win32/msi/helpers.c diff --git a/reactos/dll/win32/msi/insert.c b/dll/win32/msi/insert.c similarity index 100% rename from reactos/dll/win32/msi/insert.c rename to dll/win32/msi/insert.c diff --git a/reactos/dll/win32/msi/instabsent.bmp b/dll/win32/msi/instabsent.bmp similarity index 100% rename from reactos/dll/win32/msi/instabsent.bmp rename to dll/win32/msi/instabsent.bmp diff --git a/reactos/dll/win32/msi/instadvert.bmp b/dll/win32/msi/instadvert.bmp similarity index 100% rename from reactos/dll/win32/msi/instadvert.bmp rename to dll/win32/msi/instadvert.bmp diff --git a/reactos/dll/win32/msi/install.c b/dll/win32/msi/install.c similarity index 100% rename from reactos/dll/win32/msi/install.c rename to dll/win32/msi/install.c diff --git a/reactos/dll/win32/msi/instlocal.bmp b/dll/win32/msi/instlocal.bmp similarity index 100% rename from reactos/dll/win32/msi/instlocal.bmp rename to dll/win32/msi/instlocal.bmp diff --git a/reactos/dll/win32/msi/join.c b/dll/win32/msi/join.c similarity index 100% rename from reactos/dll/win32/msi/join.c rename to dll/win32/msi/join.c diff --git a/reactos/dll/win32/msi/msi.c b/dll/win32/msi/msi.c similarity index 100% rename from reactos/dll/win32/msi/msi.c rename to dll/win32/msi/msi.c diff --git a/reactos/dll/win32/msi/msi.rbuild b/dll/win32/msi/msi.rbuild similarity index 100% rename from reactos/dll/win32/msi/msi.rbuild rename to dll/win32/msi/msi.rbuild diff --git a/reactos/dll/win32/msi/msi.rc b/dll/win32/msi/msi.rc similarity index 100% rename from reactos/dll/win32/msi/msi.rc rename to dll/win32/msi/msi.rc diff --git a/reactos/dll/win32/msi/msi.spec b/dll/win32/msi/msi.spec similarity index 100% rename from reactos/dll/win32/msi/msi.spec rename to dll/win32/msi/msi.spec diff --git a/reactos/dll/win32/msi/msi_Bg.rc b/dll/win32/msi/msi_Bg.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Bg.rc rename to dll/win32/msi/msi_Bg.rc diff --git a/reactos/dll/win32/msi/msi_Da.rc b/dll/win32/msi/msi_Da.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Da.rc rename to dll/win32/msi/msi_Da.rc diff --git a/reactos/dll/win32/msi/msi_De.rc b/dll/win32/msi/msi_De.rc similarity index 100% rename from reactos/dll/win32/msi/msi_De.rc rename to dll/win32/msi/msi_De.rc diff --git a/reactos/dll/win32/msi/msi_En.rc b/dll/win32/msi/msi_En.rc similarity index 100% rename from reactos/dll/win32/msi/msi_En.rc rename to dll/win32/msi/msi_En.rc diff --git a/reactos/dll/win32/msi/msi_Eo.rc b/dll/win32/msi/msi_Eo.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Eo.rc rename to dll/win32/msi/msi_Eo.rc diff --git a/reactos/dll/win32/msi/msi_Es.rc b/dll/win32/msi/msi_Es.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Es.rc rename to dll/win32/msi/msi_Es.rc diff --git a/reactos/dll/win32/msi/msi_Fi.rc b/dll/win32/msi/msi_Fi.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Fi.rc rename to dll/win32/msi/msi_Fi.rc diff --git a/reactos/dll/win32/msi/msi_Fr.rc b/dll/win32/msi/msi_Fr.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Fr.rc rename to dll/win32/msi/msi_Fr.rc diff --git a/reactos/dll/win32/msi/msi_Hu.rc b/dll/win32/msi/msi_Hu.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Hu.rc rename to dll/win32/msi/msi_Hu.rc diff --git a/reactos/dll/win32/msi/msi_It.rc b/dll/win32/msi/msi_It.rc similarity index 100% rename from reactos/dll/win32/msi/msi_It.rc rename to dll/win32/msi/msi_It.rc diff --git a/reactos/dll/win32/msi/msi_Ja.rc b/dll/win32/msi/msi_Ja.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Ja.rc rename to dll/win32/msi/msi_Ja.rc diff --git a/reactos/dll/win32/msi/msi_Ko.rc b/dll/win32/msi/msi_Ko.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Ko.rc rename to dll/win32/msi/msi_Ko.rc diff --git a/reactos/dll/win32/msi/msi_Nl.rc b/dll/win32/msi/msi_Nl.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Nl.rc rename to dll/win32/msi/msi_Nl.rc diff --git a/reactos/dll/win32/msi/msi_No.rc b/dll/win32/msi/msi_No.rc similarity index 100% rename from reactos/dll/win32/msi/msi_No.rc rename to dll/win32/msi/msi_No.rc diff --git a/reactos/dll/win32/msi/msi_Pl.rc b/dll/win32/msi/msi_Pl.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Pl.rc rename to dll/win32/msi/msi_Pl.rc diff --git a/reactos/dll/win32/msi/msi_Pt.rc b/dll/win32/msi/msi_Pt.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Pt.rc rename to dll/win32/msi/msi_Pt.rc diff --git a/reactos/dll/win32/msi/msi_Ru.rc b/dll/win32/msi/msi_Ru.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Ru.rc rename to dll/win32/msi/msi_Ru.rc diff --git a/reactos/dll/win32/msi/msi_Si.rc b/dll/win32/msi/msi_Si.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Si.rc rename to dll/win32/msi/msi_Si.rc diff --git a/reactos/dll/win32/msi/msi_Sv.rc b/dll/win32/msi/msi_Sv.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Sv.rc rename to dll/win32/msi/msi_Sv.rc diff --git a/reactos/dll/win32/msi/msi_Tr.rc b/dll/win32/msi/msi_Tr.rc similarity index 100% rename from reactos/dll/win32/msi/msi_Tr.rc rename to dll/win32/msi/msi_Tr.rc diff --git a/reactos/dll/win32/msi/msi_main.c b/dll/win32/msi/msi_main.c similarity index 100% rename from reactos/dll/win32/msi/msi_main.c rename to dll/win32/msi/msi_main.c diff --git a/reactos/dll/win32/msi/msi_ros.diff b/dll/win32/msi/msi_ros.diff similarity index 100% rename from reactos/dll/win32/msi/msi_ros.diff rename to dll/win32/msi/msi_ros.diff diff --git a/reactos/dll/win32/msi/msipriv.h b/dll/win32/msi/msipriv.h similarity index 100% rename from reactos/dll/win32/msi/msipriv.h rename to dll/win32/msi/msipriv.h diff --git a/reactos/dll/win32/msi/msiquery.c b/dll/win32/msi/msiquery.c similarity index 100% rename from reactos/dll/win32/msi/msiquery.c rename to dll/win32/msi/msiquery.c diff --git a/reactos/dll/win32/msi/msiserver.idl b/dll/win32/msi/msiserver.idl similarity index 100% rename from reactos/dll/win32/msi/msiserver.idl rename to dll/win32/msi/msiserver.idl diff --git a/reactos/dll/win32/msi/msiserver_dispids.h b/dll/win32/msi/msiserver_dispids.h similarity index 100% rename from reactos/dll/win32/msi/msiserver_dispids.h rename to dll/win32/msi/msiserver_dispids.h diff --git a/reactos/dll/win32/msi/package.c b/dll/win32/msi/package.c similarity index 100% rename from reactos/dll/win32/msi/package.c rename to dll/win32/msi/package.c diff --git a/reactos/dll/win32/msi/preview.c b/dll/win32/msi/preview.c similarity index 100% rename from reactos/dll/win32/msi/preview.c rename to dll/win32/msi/preview.c diff --git a/reactos/dll/win32/msi/query.h b/dll/win32/msi/query.h similarity index 100% rename from reactos/dll/win32/msi/query.h rename to dll/win32/msi/query.h diff --git a/reactos/dll/win32/msi/record.c b/dll/win32/msi/record.c similarity index 100% rename from reactos/dll/win32/msi/record.c rename to dll/win32/msi/record.c diff --git a/reactos/dll/win32/msi/registry.c b/dll/win32/msi/registry.c similarity index 100% rename from reactos/dll/win32/msi/registry.c rename to dll/win32/msi/registry.c diff --git a/reactos/dll/win32/msi/regsvr.c b/dll/win32/msi/regsvr.c similarity index 100% rename from reactos/dll/win32/msi/regsvr.c rename to dll/win32/msi/regsvr.c diff --git a/reactos/dll/win32/msi/script.c b/dll/win32/msi/script.c similarity index 100% rename from reactos/dll/win32/msi/script.c rename to dll/win32/msi/script.c diff --git a/reactos/dll/win32/msi/select.c b/dll/win32/msi/select.c similarity index 100% rename from reactos/dll/win32/msi/select.c rename to dll/win32/msi/select.c diff --git a/reactos/dll/win32/msi/source.c b/dll/win32/msi/source.c similarity index 100% rename from reactos/dll/win32/msi/source.c rename to dll/win32/msi/source.c diff --git a/reactos/dll/win32/msi/sql.tab.c b/dll/win32/msi/sql.tab.c similarity index 100% rename from reactos/dll/win32/msi/sql.tab.c rename to dll/win32/msi/sql.tab.c diff --git a/reactos/dll/win32/msi/sql.tab.h b/dll/win32/msi/sql.tab.h similarity index 100% rename from reactos/dll/win32/msi/sql.tab.h rename to dll/win32/msi/sql.tab.h diff --git a/reactos/dll/win32/msi/sql.y b/dll/win32/msi/sql.y similarity index 100% rename from reactos/dll/win32/msi/sql.y rename to dll/win32/msi/sql.y diff --git a/reactos/dll/win32/msi/storages.c b/dll/win32/msi/storages.c similarity index 100% rename from reactos/dll/win32/msi/storages.c rename to dll/win32/msi/storages.c diff --git a/reactos/dll/win32/msi/streams.c b/dll/win32/msi/streams.c similarity index 100% rename from reactos/dll/win32/msi/streams.c rename to dll/win32/msi/streams.c diff --git a/reactos/dll/win32/msi/string.c b/dll/win32/msi/string.c similarity index 100% rename from reactos/dll/win32/msi/string.c rename to dll/win32/msi/string.c diff --git a/reactos/dll/win32/msi/suminfo.c b/dll/win32/msi/suminfo.c similarity index 100% rename from reactos/dll/win32/msi/suminfo.c rename to dll/win32/msi/suminfo.c diff --git a/reactos/dll/win32/msi/table.c b/dll/win32/msi/table.c similarity index 100% rename from reactos/dll/win32/msi/table.c rename to dll/win32/msi/table.c diff --git a/reactos/dll/win32/msi/tokenize.c b/dll/win32/msi/tokenize.c similarity index 100% rename from reactos/dll/win32/msi/tokenize.c rename to dll/win32/msi/tokenize.c diff --git a/reactos/dll/win32/msi/update.c b/dll/win32/msi/update.c similarity index 100% rename from reactos/dll/win32/msi/update.c rename to dll/win32/msi/update.c diff --git a/reactos/dll/win32/msi/upgrade.c b/dll/win32/msi/upgrade.c similarity index 100% rename from reactos/dll/win32/msi/upgrade.c rename to dll/win32/msi/upgrade.c diff --git a/reactos/dll/win32/msi/version.rc b/dll/win32/msi/version.rc similarity index 100% rename from reactos/dll/win32/msi/version.rc rename to dll/win32/msi/version.rc diff --git a/reactos/dll/win32/msi/where.c b/dll/win32/msi/where.c similarity index 100% rename from reactos/dll/win32/msi/where.c rename to dll/win32/msi/where.c diff --git a/reactos/dll/win32/msimg32/msimg32.rbuild b/dll/win32/msimg32/msimg32.rbuild similarity index 100% rename from reactos/dll/win32/msimg32/msimg32.rbuild rename to dll/win32/msimg32/msimg32.rbuild diff --git a/reactos/dll/win32/msimg32/msimg32.spec b/dll/win32/msimg32/msimg32.spec similarity index 100% rename from reactos/dll/win32/msimg32/msimg32.spec rename to dll/win32/msimg32/msimg32.spec diff --git a/reactos/dll/win32/msimg32/msimg32_main.c b/dll/win32/msimg32/msimg32_main.c similarity index 100% rename from reactos/dll/win32/msimg32/msimg32_main.c rename to dll/win32/msimg32/msimg32_main.c diff --git a/reactos/dll/win32/mstask/factory.c b/dll/win32/mstask/factory.c similarity index 100% rename from reactos/dll/win32/mstask/factory.c rename to dll/win32/mstask/factory.c diff --git a/reactos/dll/win32/mstask/mstask.inf b/dll/win32/mstask/mstask.inf similarity index 100% rename from reactos/dll/win32/mstask/mstask.inf rename to dll/win32/mstask/mstask.inf diff --git a/reactos/dll/win32/mstask/mstask.rbuild b/dll/win32/mstask/mstask.rbuild similarity index 100% rename from reactos/dll/win32/mstask/mstask.rbuild rename to dll/win32/mstask/mstask.rbuild diff --git a/reactos/dll/win32/mstask/mstask.spec b/dll/win32/mstask/mstask.spec similarity index 100% rename from reactos/dll/win32/mstask/mstask.spec rename to dll/win32/mstask/mstask.spec diff --git a/reactos/dll/win32/mstask/mstask_local.idl b/dll/win32/mstask/mstask_local.idl similarity index 100% rename from reactos/dll/win32/mstask/mstask_local.idl rename to dll/win32/mstask/mstask_local.idl diff --git a/reactos/dll/win32/mstask/mstask_main.c b/dll/win32/mstask/mstask_main.c similarity index 100% rename from reactos/dll/win32/mstask/mstask_main.c rename to dll/win32/mstask/mstask_main.c diff --git a/reactos/dll/win32/mstask/mstask_private.h b/dll/win32/mstask/mstask_private.h similarity index 100% rename from reactos/dll/win32/mstask/mstask_private.h rename to dll/win32/mstask/mstask_private.h diff --git a/reactos/dll/win32/mstask/rsrc.rc b/dll/win32/mstask/rsrc.rc similarity index 100% rename from reactos/dll/win32/mstask/rsrc.rc rename to dll/win32/mstask/rsrc.rc diff --git a/reactos/dll/win32/mstask/task.c b/dll/win32/mstask/task.c similarity index 100% rename from reactos/dll/win32/mstask/task.c rename to dll/win32/mstask/task.c diff --git a/reactos/dll/win32/mstask/task_scheduler.c b/dll/win32/mstask/task_scheduler.c similarity index 100% rename from reactos/dll/win32/mstask/task_scheduler.c rename to dll/win32/mstask/task_scheduler.c diff --git a/reactos/dll/win32/mstask/task_trigger.c b/dll/win32/mstask/task_trigger.c similarity index 100% rename from reactos/dll/win32/mstask/task_trigger.c rename to dll/win32/mstask/task_trigger.c diff --git a/reactos/dll/win32/msvcrt/dllmain.c b/dll/win32/msvcrt/dllmain.c similarity index 100% rename from reactos/dll/win32/msvcrt/dllmain.c rename to dll/win32/msvcrt/dllmain.c diff --git a/reactos/dll/win32/msvcrt/msvcrt.def b/dll/win32/msvcrt/msvcrt.def similarity index 100% rename from reactos/dll/win32/msvcrt/msvcrt.def rename to dll/win32/msvcrt/msvcrt.def diff --git a/reactos/dll/win32/msvcrt/msvcrt.rbuild b/dll/win32/msvcrt/msvcrt.rbuild similarity index 100% rename from reactos/dll/win32/msvcrt/msvcrt.rbuild rename to dll/win32/msvcrt/msvcrt.rbuild diff --git a/reactos/dll/win32/msvcrt/msvcrt.rc b/dll/win32/msvcrt/msvcrt.rc similarity index 100% rename from reactos/dll/win32/msvcrt/msvcrt.rc rename to dll/win32/msvcrt/msvcrt.rc diff --git a/reactos/dll/win32/msvcrt/precomp.h b/dll/win32/msvcrt/precomp.h similarity index 100% rename from reactos/dll/win32/msvcrt/precomp.h rename to dll/win32/msvcrt/precomp.h diff --git a/reactos/dll/win32/msvcrt20/msvcrt20.c b/dll/win32/msvcrt20/msvcrt20.c similarity index 100% rename from reactos/dll/win32/msvcrt20/msvcrt20.c rename to dll/win32/msvcrt20/msvcrt20.c diff --git a/reactos/dll/win32/msvcrt20/msvcrt20.rbuild b/dll/win32/msvcrt20/msvcrt20.rbuild similarity index 100% rename from reactos/dll/win32/msvcrt20/msvcrt20.rbuild rename to dll/win32/msvcrt20/msvcrt20.rbuild diff --git a/reactos/dll/win32/msvcrt20/msvcrt20.spec b/dll/win32/msvcrt20/msvcrt20.spec similarity index 100% rename from reactos/dll/win32/msvcrt20/msvcrt20.spec rename to dll/win32/msvcrt20/msvcrt20.spec diff --git a/reactos/dll/win32/msvcrt40/msvcrt40.c b/dll/win32/msvcrt40/msvcrt40.c similarity index 100% rename from reactos/dll/win32/msvcrt40/msvcrt40.c rename to dll/win32/msvcrt40/msvcrt40.c diff --git a/reactos/dll/win32/msvcrt40/msvcrt40.rbuild b/dll/win32/msvcrt40/msvcrt40.rbuild similarity index 100% rename from reactos/dll/win32/msvcrt40/msvcrt40.rbuild rename to dll/win32/msvcrt40/msvcrt40.rbuild diff --git a/reactos/dll/win32/msvcrt40/msvcrt40.spec b/dll/win32/msvcrt40/msvcrt40.spec similarity index 100% rename from reactos/dll/win32/msvcrt40/msvcrt40.spec rename to dll/win32/msvcrt40/msvcrt40.spec diff --git a/reactos/dll/win32/msvfw32/drawdib.c b/dll/win32/msvfw32/drawdib.c similarity index 100% rename from reactos/dll/win32/msvfw32/drawdib.c rename to dll/win32/msvfw32/drawdib.c diff --git a/reactos/dll/win32/msvfw32/mciwnd.c b/dll/win32/msvfw32/mciwnd.c similarity index 100% rename from reactos/dll/win32/msvfw32/mciwnd.c rename to dll/win32/msvfw32/mciwnd.c diff --git a/reactos/dll/win32/msvfw32/msvfw32.rbuild b/dll/win32/msvfw32/msvfw32.rbuild similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32.rbuild rename to dll/win32/msvfw32/msvfw32.rbuild diff --git a/reactos/dll/win32/msvfw32/msvfw32.spec b/dll/win32/msvfw32/msvfw32.spec similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32.spec rename to dll/win32/msvfw32/msvfw32.spec diff --git a/reactos/dll/win32/msvfw32/msvfw32_Da.rc b/dll/win32/msvfw32/msvfw32_Da.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Da.rc rename to dll/win32/msvfw32/msvfw32_Da.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_De.rc b/dll/win32/msvfw32/msvfw32_De.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_De.rc rename to dll/win32/msvfw32/msvfw32_De.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_En.rc b/dll/win32/msvfw32/msvfw32_En.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_En.rc rename to dll/win32/msvfw32/msvfw32_En.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Es.rc b/dll/win32/msvfw32/msvfw32_Es.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Es.rc rename to dll/win32/msvfw32/msvfw32_Es.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Fr.rc b/dll/win32/msvfw32/msvfw32_Fr.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Fr.rc rename to dll/win32/msvfw32/msvfw32_Fr.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Hu.rc b/dll/win32/msvfw32/msvfw32_Hu.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Hu.rc rename to dll/win32/msvfw32/msvfw32_Hu.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Ko.rc b/dll/win32/msvfw32/msvfw32_Ko.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Ko.rc rename to dll/win32/msvfw32/msvfw32_Ko.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Nl.rc b/dll/win32/msvfw32/msvfw32_Nl.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Nl.rc rename to dll/win32/msvfw32/msvfw32_Nl.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_No.rc b/dll/win32/msvfw32/msvfw32_No.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_No.rc rename to dll/win32/msvfw32/msvfw32_No.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Pl.rc b/dll/win32/msvfw32/msvfw32_Pl.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Pl.rc rename to dll/win32/msvfw32/msvfw32_Pl.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Ru.rc b/dll/win32/msvfw32/msvfw32_Ru.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Ru.rc rename to dll/win32/msvfw32/msvfw32_Ru.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Si.rc b/dll/win32/msvfw32/msvfw32_Si.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Si.rc rename to dll/win32/msvfw32/msvfw32_Si.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Sv.rc b/dll/win32/msvfw32/msvfw32_Sv.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Sv.rc rename to dll/win32/msvfw32/msvfw32_Sv.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_Tr.rc b/dll/win32/msvfw32/msvfw32_Tr.rc similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_Tr.rc rename to dll/win32/msvfw32/msvfw32_Tr.rc diff --git a/reactos/dll/win32/msvfw32/msvfw32_ros.diff b/dll/win32/msvfw32/msvfw32_ros.diff similarity index 100% rename from reactos/dll/win32/msvfw32/msvfw32_ros.diff rename to dll/win32/msvfw32/msvfw32_ros.diff diff --git a/reactos/dll/win32/msvfw32/msvideo.spec b/dll/win32/msvfw32/msvideo.spec similarity index 100% rename from reactos/dll/win32/msvfw32/msvideo.spec rename to dll/win32/msvfw32/msvideo.spec diff --git a/reactos/dll/win32/msvfw32/msvideo16.c b/dll/win32/msvfw32/msvideo16.c similarity index 100% rename from reactos/dll/win32/msvfw32/msvideo16.c rename to dll/win32/msvfw32/msvideo16.c diff --git a/reactos/dll/win32/msvfw32/msvideo_main.c b/dll/win32/msvfw32/msvideo_main.c similarity index 100% rename from reactos/dll/win32/msvfw32/msvideo_main.c rename to dll/win32/msvfw32/msvideo_main.c diff --git a/reactos/dll/win32/msvfw32/msvideo_private.h b/dll/win32/msvfw32/msvideo_private.h similarity index 100% rename from reactos/dll/win32/msvfw32/msvideo_private.h rename to dll/win32/msvfw32/msvideo_private.h diff --git a/reactos/dll/win32/msvfw32/rsrc.rc b/dll/win32/msvfw32/rsrc.rc similarity index 100% rename from reactos/dll/win32/msvfw32/rsrc.rc rename to dll/win32/msvfw32/rsrc.rc diff --git a/reactos/dll/win32/msvfw32/vfw16.h b/dll/win32/msvfw32/vfw16.h similarity index 100% rename from reactos/dll/win32/msvfw32/vfw16.h rename to dll/win32/msvfw32/vfw16.h diff --git a/reactos/dll/win32/mswsock/extensions.c b/dll/win32/mswsock/extensions.c similarity index 100% rename from reactos/dll/win32/mswsock/extensions.c rename to dll/win32/mswsock/extensions.c diff --git a/reactos/dll/win32/mswsock/mswsock.def b/dll/win32/mswsock/mswsock.def similarity index 100% rename from reactos/dll/win32/mswsock/mswsock.def rename to dll/win32/mswsock/mswsock.def diff --git a/reactos/dll/win32/mswsock/mswsock.rbuild b/dll/win32/mswsock/mswsock.rbuild similarity index 100% rename from reactos/dll/win32/mswsock/mswsock.rbuild rename to dll/win32/mswsock/mswsock.rbuild diff --git a/reactos/dll/win32/mswsock/mswsock.rc b/dll/win32/mswsock/mswsock.rc similarity index 100% rename from reactos/dll/win32/mswsock/mswsock.rc rename to dll/win32/mswsock/mswsock.rc diff --git a/reactos/dll/win32/mswsock/stubs.c b/dll/win32/mswsock/stubs.c similarity index 100% rename from reactos/dll/win32/mswsock/stubs.c rename to dll/win32/mswsock/stubs.c diff --git a/reactos/dll/win32/msxml3/attribute.c b/dll/win32/msxml3/attribute.c similarity index 100% rename from reactos/dll/win32/msxml3/attribute.c rename to dll/win32/msxml3/attribute.c diff --git a/reactos/dll/win32/msxml3/bsc.c b/dll/win32/msxml3/bsc.c similarity index 100% rename from reactos/dll/win32/msxml3/bsc.c rename to dll/win32/msxml3/bsc.c diff --git a/reactos/dll/win32/msxml3/cdata.c b/dll/win32/msxml3/cdata.c similarity index 100% rename from reactos/dll/win32/msxml3/cdata.c rename to dll/win32/msxml3/cdata.c diff --git a/reactos/dll/win32/msxml3/comment.c b/dll/win32/msxml3/comment.c similarity index 100% rename from reactos/dll/win32/msxml3/comment.c rename to dll/win32/msxml3/comment.c diff --git a/reactos/dll/win32/msxml3/dispex.c b/dll/win32/msxml3/dispex.c similarity index 100% rename from reactos/dll/win32/msxml3/dispex.c rename to dll/win32/msxml3/dispex.c diff --git a/reactos/dll/win32/msxml3/docfrag.c b/dll/win32/msxml3/docfrag.c similarity index 100% rename from reactos/dll/win32/msxml3/docfrag.c rename to dll/win32/msxml3/docfrag.c diff --git a/reactos/dll/win32/msxml3/domdoc.c b/dll/win32/msxml3/domdoc.c similarity index 100% rename from reactos/dll/win32/msxml3/domdoc.c rename to dll/win32/msxml3/domdoc.c diff --git a/reactos/dll/win32/msxml3/domimpl.c b/dll/win32/msxml3/domimpl.c similarity index 100% rename from reactos/dll/win32/msxml3/domimpl.c rename to dll/win32/msxml3/domimpl.c diff --git a/reactos/dll/win32/msxml3/element.c b/dll/win32/msxml3/element.c similarity index 100% rename from reactos/dll/win32/msxml3/element.c rename to dll/win32/msxml3/element.c diff --git a/reactos/dll/win32/msxml3/entityref.c b/dll/win32/msxml3/entityref.c similarity index 100% rename from reactos/dll/win32/msxml3/entityref.c rename to dll/win32/msxml3/entityref.c diff --git a/reactos/dll/win32/msxml3/factory.c b/dll/win32/msxml3/factory.c similarity index 100% rename from reactos/dll/win32/msxml3/factory.c rename to dll/win32/msxml3/factory.c diff --git a/reactos/dll/win32/msxml3/main.c b/dll/win32/msxml3/main.c similarity index 100% rename from reactos/dll/win32/msxml3/main.c rename to dll/win32/msxml3/main.c diff --git a/reactos/dll/win32/msxml3/msxml3.rbuild b/dll/win32/msxml3/msxml3.rbuild similarity index 100% rename from reactos/dll/win32/msxml3/msxml3.rbuild rename to dll/win32/msxml3/msxml3.rbuild diff --git a/reactos/dll/win32/msxml3/msxml3.spec b/dll/win32/msxml3/msxml3.spec similarity index 100% rename from reactos/dll/win32/msxml3/msxml3.spec rename to dll/win32/msxml3/msxml3.spec diff --git a/reactos/dll/win32/msxml3/msxml3_v1.idl b/dll/win32/msxml3/msxml3_v1.idl similarity index 100% rename from reactos/dll/win32/msxml3/msxml3_v1.idl rename to dll/win32/msxml3/msxml3_v1.idl diff --git a/reactos/dll/win32/msxml3/msxml_private.h b/dll/win32/msxml3/msxml_private.h similarity index 100% rename from reactos/dll/win32/msxml3/msxml_private.h rename to dll/win32/msxml3/msxml_private.h diff --git a/reactos/dll/win32/msxml3/node.c b/dll/win32/msxml3/node.c similarity index 100% rename from reactos/dll/win32/msxml3/node.c rename to dll/win32/msxml3/node.c diff --git a/reactos/dll/win32/msxml3/nodelist.c b/dll/win32/msxml3/nodelist.c similarity index 100% rename from reactos/dll/win32/msxml3/nodelist.c rename to dll/win32/msxml3/nodelist.c diff --git a/reactos/dll/win32/msxml3/nodemap.c b/dll/win32/msxml3/nodemap.c similarity index 100% rename from reactos/dll/win32/msxml3/nodemap.c rename to dll/win32/msxml3/nodemap.c diff --git a/reactos/dll/win32/msxml3/parseerror.c b/dll/win32/msxml3/parseerror.c similarity index 100% rename from reactos/dll/win32/msxml3/parseerror.c rename to dll/win32/msxml3/parseerror.c diff --git a/reactos/dll/win32/msxml3/pi.c b/dll/win32/msxml3/pi.c similarity index 100% rename from reactos/dll/win32/msxml3/pi.c rename to dll/win32/msxml3/pi.c diff --git a/reactos/dll/win32/msxml3/queryresult.c b/dll/win32/msxml3/queryresult.c similarity index 100% rename from reactos/dll/win32/msxml3/queryresult.c rename to dll/win32/msxml3/queryresult.c diff --git a/reactos/dll/win32/msxml3/regsvr.c b/dll/win32/msxml3/regsvr.c similarity index 100% rename from reactos/dll/win32/msxml3/regsvr.c rename to dll/win32/msxml3/regsvr.c diff --git a/reactos/dll/win32/msxml3/saxreader.c b/dll/win32/msxml3/saxreader.c similarity index 100% rename from reactos/dll/win32/msxml3/saxreader.c rename to dll/win32/msxml3/saxreader.c diff --git a/reactos/dll/win32/msxml3/schema.c b/dll/win32/msxml3/schema.c similarity index 100% rename from reactos/dll/win32/msxml3/schema.c rename to dll/win32/msxml3/schema.c diff --git a/reactos/dll/win32/msxml3/text.c b/dll/win32/msxml3/text.c similarity index 100% rename from reactos/dll/win32/msxml3/text.c rename to dll/win32/msxml3/text.c diff --git a/reactos/dll/win32/msxml3/uuid.c b/dll/win32/msxml3/uuid.c similarity index 100% rename from reactos/dll/win32/msxml3/uuid.c rename to dll/win32/msxml3/uuid.c diff --git a/reactos/dll/win32/msxml3/version.rc b/dll/win32/msxml3/version.rc similarity index 100% rename from reactos/dll/win32/msxml3/version.rc rename to dll/win32/msxml3/version.rc diff --git a/reactos/dll/win32/msxml3/xmldoc.c b/dll/win32/msxml3/xmldoc.c similarity index 100% rename from reactos/dll/win32/msxml3/xmldoc.c rename to dll/win32/msxml3/xmldoc.c diff --git a/reactos/dll/win32/msxml3/xmlelem.c b/dll/win32/msxml3/xmlelem.c similarity index 100% rename from reactos/dll/win32/msxml3/xmlelem.c rename to dll/win32/msxml3/xmlelem.c diff --git a/reactos/dll/win32/nddeapi/nddeapi.c b/dll/win32/nddeapi/nddeapi.c similarity index 100% rename from reactos/dll/win32/nddeapi/nddeapi.c rename to dll/win32/nddeapi/nddeapi.c diff --git a/reactos/dll/win32/nddeapi/nddeapi.rbuild b/dll/win32/nddeapi/nddeapi.rbuild similarity index 100% rename from reactos/dll/win32/nddeapi/nddeapi.rbuild rename to dll/win32/nddeapi/nddeapi.rbuild diff --git a/reactos/dll/win32/nddeapi/nddeapi.spec b/dll/win32/nddeapi/nddeapi.spec similarity index 100% rename from reactos/dll/win32/nddeapi/nddeapi.spec rename to dll/win32/nddeapi/nddeapi.spec diff --git a/reactos/dll/win32/netapi32/access.c b/dll/win32/netapi32/access.c similarity index 100% rename from reactos/dll/win32/netapi32/access.c rename to dll/win32/netapi32/access.c diff --git a/reactos/dll/win32/netapi32/apibuf.c b/dll/win32/netapi32/apibuf.c similarity index 100% rename from reactos/dll/win32/netapi32/apibuf.c rename to dll/win32/netapi32/apibuf.c diff --git a/reactos/dll/win32/netapi32/browsr.c b/dll/win32/netapi32/browsr.c similarity index 100% rename from reactos/dll/win32/netapi32/browsr.c rename to dll/win32/netapi32/browsr.c diff --git a/reactos/dll/win32/netapi32/ds.c b/dll/win32/netapi32/ds.c similarity index 100% rename from reactos/dll/win32/netapi32/ds.c rename to dll/win32/netapi32/ds.c diff --git a/reactos/dll/win32/netapi32/local_group.c b/dll/win32/netapi32/local_group.c similarity index 100% rename from reactos/dll/win32/netapi32/local_group.c rename to dll/win32/netapi32/local_group.c diff --git a/reactos/dll/win32/netapi32/nbcmdqueue.c b/dll/win32/netapi32/nbcmdqueue.c similarity index 100% rename from reactos/dll/win32/netapi32/nbcmdqueue.c rename to dll/win32/netapi32/nbcmdqueue.c diff --git a/reactos/dll/win32/netapi32/nbcmdqueue.h b/dll/win32/netapi32/nbcmdqueue.h similarity index 100% rename from reactos/dll/win32/netapi32/nbcmdqueue.h rename to dll/win32/netapi32/nbcmdqueue.h diff --git a/reactos/dll/win32/netapi32/nbnamecache.c b/dll/win32/netapi32/nbnamecache.c similarity index 100% rename from reactos/dll/win32/netapi32/nbnamecache.c rename to dll/win32/netapi32/nbnamecache.c diff --git a/reactos/dll/win32/netapi32/nbnamecache.h b/dll/win32/netapi32/nbnamecache.h similarity index 100% rename from reactos/dll/win32/netapi32/nbnamecache.h rename to dll/win32/netapi32/nbnamecache.h diff --git a/reactos/dll/win32/netapi32/nbt.c b/dll/win32/netapi32/nbt.c similarity index 100% rename from reactos/dll/win32/netapi32/nbt.c rename to dll/win32/netapi32/nbt.c diff --git a/reactos/dll/win32/netapi32/netapi32.c b/dll/win32/netapi32/netapi32.c similarity index 100% rename from reactos/dll/win32/netapi32/netapi32.c rename to dll/win32/netapi32/netapi32.c diff --git a/reactos/dll/win32/netapi32/netapi32.rbuild b/dll/win32/netapi32/netapi32.rbuild similarity index 100% rename from reactos/dll/win32/netapi32/netapi32.rbuild rename to dll/win32/netapi32/netapi32.rbuild diff --git a/reactos/dll/win32/netapi32/netapi32.spec b/dll/win32/netapi32/netapi32.spec similarity index 100% rename from reactos/dll/win32/netapi32/netapi32.spec rename to dll/win32/netapi32/netapi32.spec diff --git a/reactos/dll/win32/netapi32/netbios.c b/dll/win32/netapi32/netbios.c similarity index 100% rename from reactos/dll/win32/netapi32/netbios.c rename to dll/win32/netapi32/netbios.c diff --git a/reactos/dll/win32/netapi32/netbios.h b/dll/win32/netapi32/netbios.h similarity index 100% rename from reactos/dll/win32/netapi32/netbios.h rename to dll/win32/netapi32/netbios.h diff --git a/reactos/dll/win32/netapi32/share.c b/dll/win32/netapi32/share.c similarity index 100% rename from reactos/dll/win32/netapi32/share.c rename to dll/win32/netapi32/share.c diff --git a/reactos/dll/win32/netapi32/wksta.c b/dll/win32/netapi32/wksta.c similarity index 100% rename from reactos/dll/win32/netapi32/wksta.c rename to dll/win32/netapi32/wksta.c diff --git a/reactos/dll/win32/netcfgx/classfactory.c b/dll/win32/netcfgx/classfactory.c similarity index 100% rename from reactos/dll/win32/netcfgx/classfactory.c rename to dll/win32/netcfgx/classfactory.c diff --git a/reactos/dll/win32/netcfgx/inetcfgcomp_iface.c b/dll/win32/netcfgx/inetcfgcomp_iface.c similarity index 100% rename from reactos/dll/win32/netcfgx/inetcfgcomp_iface.c rename to dll/win32/netcfgx/inetcfgcomp_iface.c diff --git a/reactos/dll/win32/netcfgx/lang/bg-BG.rc b/dll/win32/netcfgx/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/bg-BG.rc rename to dll/win32/netcfgx/lang/bg-BG.rc diff --git a/reactos/dll/win32/netcfgx/lang/cs-CZ.rc b/dll/win32/netcfgx/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/cs-CZ.rc rename to dll/win32/netcfgx/lang/cs-CZ.rc diff --git a/reactos/dll/win32/netcfgx/lang/da-DK.rc b/dll/win32/netcfgx/lang/da-DK.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/da-DK.rc rename to dll/win32/netcfgx/lang/da-DK.rc diff --git a/reactos/dll/win32/netcfgx/lang/de-DE.rc b/dll/win32/netcfgx/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/de-DE.rc rename to dll/win32/netcfgx/lang/de-DE.rc diff --git a/reactos/dll/win32/netcfgx/lang/el-GR.rc b/dll/win32/netcfgx/lang/el-GR.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/el-GR.rc rename to dll/win32/netcfgx/lang/el-GR.rc diff --git a/reactos/dll/win32/netcfgx/lang/en-US.rc b/dll/win32/netcfgx/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/en-US.rc rename to dll/win32/netcfgx/lang/en-US.rc diff --git a/reactos/dll/win32/netcfgx/lang/es-ES.rc b/dll/win32/netcfgx/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/es-ES.rc rename to dll/win32/netcfgx/lang/es-ES.rc diff --git a/reactos/dll/win32/netcfgx/lang/fr-FR.rc b/dll/win32/netcfgx/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/fr-FR.rc rename to dll/win32/netcfgx/lang/fr-FR.rc diff --git a/reactos/dll/win32/netcfgx/lang/hu-HU.rc b/dll/win32/netcfgx/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/hu-HU.rc rename to dll/win32/netcfgx/lang/hu-HU.rc diff --git a/reactos/dll/win32/netcfgx/lang/id-ID.rc b/dll/win32/netcfgx/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/id-ID.rc rename to dll/win32/netcfgx/lang/id-ID.rc diff --git a/reactos/dll/win32/netcfgx/lang/it-IT.rc b/dll/win32/netcfgx/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/it-IT.rc rename to dll/win32/netcfgx/lang/it-IT.rc diff --git a/reactos/dll/win32/netcfgx/lang/ja-JP.rc b/dll/win32/netcfgx/lang/ja-JP.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/ja-JP.rc rename to dll/win32/netcfgx/lang/ja-JP.rc diff --git a/reactos/dll/win32/netcfgx/lang/nl-NL.rc b/dll/win32/netcfgx/lang/nl-NL.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/nl-NL.rc rename to dll/win32/netcfgx/lang/nl-NL.rc diff --git a/reactos/dll/win32/netcfgx/lang/no-NO.rc b/dll/win32/netcfgx/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/no-NO.rc rename to dll/win32/netcfgx/lang/no-NO.rc diff --git a/reactos/dll/win32/netcfgx/lang/pl-PL.rc b/dll/win32/netcfgx/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/pl-PL.rc rename to dll/win32/netcfgx/lang/pl-PL.rc diff --git a/reactos/dll/win32/netcfgx/lang/ru-RU.rc b/dll/win32/netcfgx/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/ru-RU.rc rename to dll/win32/netcfgx/lang/ru-RU.rc diff --git a/reactos/dll/win32/netcfgx/lang/sk-SK.rc b/dll/win32/netcfgx/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/sk-SK.rc rename to dll/win32/netcfgx/lang/sk-SK.rc diff --git a/reactos/dll/win32/netcfgx/lang/sv-SE.rc b/dll/win32/netcfgx/lang/sv-SE.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/sv-SE.rc rename to dll/win32/netcfgx/lang/sv-SE.rc diff --git a/reactos/dll/win32/netcfgx/lang/uk-UA.rc b/dll/win32/netcfgx/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/uk-UA.rc rename to dll/win32/netcfgx/lang/uk-UA.rc diff --git a/reactos/dll/win32/netcfgx/lang/zh-CN.rc b/dll/win32/netcfgx/lang/zh-CN.rc similarity index 100% rename from reactos/dll/win32/netcfgx/lang/zh-CN.rc rename to dll/win32/netcfgx/lang/zh-CN.rc diff --git a/reactos/dll/win32/netcfgx/netcfg_iface.c b/dll/win32/netcfgx/netcfg_iface.c similarity index 100% rename from reactos/dll/win32/netcfgx/netcfg_iface.c rename to dll/win32/netcfgx/netcfg_iface.c diff --git a/reactos/dll/win32/netcfgx/netcfgx.c b/dll/win32/netcfgx/netcfgx.c similarity index 100% rename from reactos/dll/win32/netcfgx/netcfgx.c rename to dll/win32/netcfgx/netcfgx.c diff --git a/reactos/dll/win32/netcfgx/netcfgx.rbuild b/dll/win32/netcfgx/netcfgx.rbuild similarity index 100% rename from reactos/dll/win32/netcfgx/netcfgx.rbuild rename to dll/win32/netcfgx/netcfgx.rbuild diff --git a/reactos/dll/win32/netcfgx/netcfgx.rc b/dll/win32/netcfgx/netcfgx.rc similarity index 100% rename from reactos/dll/win32/netcfgx/netcfgx.rc rename to dll/win32/netcfgx/netcfgx.rc diff --git a/reactos/dll/win32/netcfgx/netcfgx.spec b/dll/win32/netcfgx/netcfgx.spec similarity index 100% rename from reactos/dll/win32/netcfgx/netcfgx.spec rename to dll/win32/netcfgx/netcfgx.spec diff --git a/reactos/dll/win32/netcfgx/precomp.h b/dll/win32/netcfgx/precomp.h similarity index 100% rename from reactos/dll/win32/netcfgx/precomp.h rename to dll/win32/netcfgx/precomp.h diff --git a/reactos/dll/win32/netcfgx/resource.h b/dll/win32/netcfgx/resource.h similarity index 100% rename from reactos/dll/win32/netcfgx/resource.h rename to dll/win32/netcfgx/resource.h diff --git a/reactos/dll/win32/netcfgx/tcpipconf_notify.c b/dll/win32/netcfgx/tcpipconf_notify.c similarity index 100% rename from reactos/dll/win32/netcfgx/tcpipconf_notify.c rename to dll/win32/netcfgx/tcpipconf_notify.c diff --git a/reactos/dll/win32/netid/lang/bg-BG.rc b/dll/win32/netid/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/netid/lang/bg-BG.rc rename to dll/win32/netid/lang/bg-BG.rc diff --git a/reactos/dll/win32/netid/lang/cs-CZ.rc b/dll/win32/netid/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/netid/lang/cs-CZ.rc rename to dll/win32/netid/lang/cs-CZ.rc diff --git a/reactos/dll/win32/netid/lang/de-DE.rc b/dll/win32/netid/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/netid/lang/de-DE.rc rename to dll/win32/netid/lang/de-DE.rc diff --git a/reactos/dll/win32/netid/lang/el-GR.rc b/dll/win32/netid/lang/el-GR.rc similarity index 100% rename from reactos/dll/win32/netid/lang/el-GR.rc rename to dll/win32/netid/lang/el-GR.rc diff --git a/reactos/dll/win32/netid/lang/en-US.rc b/dll/win32/netid/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/netid/lang/en-US.rc rename to dll/win32/netid/lang/en-US.rc diff --git a/reactos/dll/win32/netid/lang/es-ES.rc b/dll/win32/netid/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/netid/lang/es-ES.rc rename to dll/win32/netid/lang/es-ES.rc diff --git a/reactos/dll/win32/netid/lang/fr-FR.rc b/dll/win32/netid/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/netid/lang/fr-FR.rc rename to dll/win32/netid/lang/fr-FR.rc diff --git a/reactos/dll/win32/netid/lang/id-ID.rc b/dll/win32/netid/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/netid/lang/id-ID.rc rename to dll/win32/netid/lang/id-ID.rc diff --git a/reactos/dll/win32/netid/lang/it-IT.rc b/dll/win32/netid/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/netid/lang/it-IT.rc rename to dll/win32/netid/lang/it-IT.rc diff --git a/reactos/dll/win32/netid/lang/no-NO.rc b/dll/win32/netid/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/netid/lang/no-NO.rc rename to dll/win32/netid/lang/no-NO.rc diff --git a/reactos/dll/win32/netid/lang/pl-PL.rc b/dll/win32/netid/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/netid/lang/pl-PL.rc rename to dll/win32/netid/lang/pl-PL.rc diff --git a/reactos/dll/win32/netid/lang/ru-RU.rc b/dll/win32/netid/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/netid/lang/ru-RU.rc rename to dll/win32/netid/lang/ru-RU.rc diff --git a/reactos/dll/win32/netid/lang/sk-SK.rc b/dll/win32/netid/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/netid/lang/sk-SK.rc rename to dll/win32/netid/lang/sk-SK.rc diff --git a/reactos/dll/win32/netid/lang/uk-UA.rc b/dll/win32/netid/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/netid/lang/uk-UA.rc rename to dll/win32/netid/lang/uk-UA.rc diff --git a/reactos/dll/win32/netid/netid.c b/dll/win32/netid/netid.c similarity index 100% rename from reactos/dll/win32/netid/netid.c rename to dll/win32/netid/netid.c diff --git a/reactos/dll/win32/netid/netid.rbuild b/dll/win32/netid/netid.rbuild similarity index 100% rename from reactos/dll/win32/netid/netid.rbuild rename to dll/win32/netid/netid.rbuild diff --git a/reactos/dll/win32/netid/netid.rc b/dll/win32/netid/netid.rc similarity index 100% rename from reactos/dll/win32/netid/netid.rc rename to dll/win32/netid/netid.rc diff --git a/reactos/dll/win32/netid/netid.spec b/dll/win32/netid/netid.spec similarity index 100% rename from reactos/dll/win32/netid/netid.spec rename to dll/win32/netid/netid.spec diff --git a/reactos/dll/win32/netid/res/101.ico b/dll/win32/netid/res/101.ico similarity index 100% rename from reactos/dll/win32/netid/res/101.ico rename to dll/win32/netid/res/101.ico diff --git a/reactos/dll/win32/netid/res/102.ico b/dll/win32/netid/res/102.ico similarity index 100% rename from reactos/dll/win32/netid/res/102.ico rename to dll/win32/netid/res/102.ico diff --git a/reactos/dll/win32/netid/resource.h b/dll/win32/netid/resource.h similarity index 100% rename from reactos/dll/win32/netid/resource.h rename to dll/win32/netid/resource.h diff --git a/reactos/dll/win32/netid/rsrc.rc b/dll/win32/netid/rsrc.rc similarity index 100% rename from reactos/dll/win32/netid/rsrc.rc rename to dll/win32/netid/rsrc.rc diff --git a/reactos/dll/win32/netshell/classfactory.c b/dll/win32/netshell/classfactory.c similarity index 100% rename from reactos/dll/win32/netshell/classfactory.c rename to dll/win32/netshell/classfactory.c diff --git a/reactos/dll/win32/netshell/connectmanager.c b/dll/win32/netshell/connectmanager.c similarity index 100% rename from reactos/dll/win32/netshell/connectmanager.c rename to dll/win32/netshell/connectmanager.c diff --git a/reactos/dll/win32/netshell/enumlist.c b/dll/win32/netshell/enumlist.c similarity index 100% rename from reactos/dll/win32/netshell/enumlist.c rename to dll/win32/netshell/enumlist.c diff --git a/reactos/dll/win32/netshell/lanconnectui.c b/dll/win32/netshell/lanconnectui.c similarity index 100% rename from reactos/dll/win32/netshell/lanconnectui.c rename to dll/win32/netshell/lanconnectui.c diff --git a/reactos/dll/win32/netshell/lang/bg-BG.rc b/dll/win32/netshell/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/bg-BG.rc rename to dll/win32/netshell/lang/bg-BG.rc diff --git a/reactos/dll/win32/netshell/lang/cs-CZ.rc b/dll/win32/netshell/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/cs-CZ.rc rename to dll/win32/netshell/lang/cs-CZ.rc diff --git a/reactos/dll/win32/netshell/lang/da-DK.rc b/dll/win32/netshell/lang/da-DK.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/da-DK.rc rename to dll/win32/netshell/lang/da-DK.rc diff --git a/reactos/dll/win32/netshell/lang/de-DE.rc b/dll/win32/netshell/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/de-DE.rc rename to dll/win32/netshell/lang/de-DE.rc diff --git a/reactos/dll/win32/netshell/lang/el-GR.rc b/dll/win32/netshell/lang/el-GR.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/el-GR.rc rename to dll/win32/netshell/lang/el-GR.rc diff --git a/reactos/dll/win32/netshell/lang/en-US.rc b/dll/win32/netshell/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/en-US.rc rename to dll/win32/netshell/lang/en-US.rc diff --git a/reactos/dll/win32/netshell/lang/es-ES.rc b/dll/win32/netshell/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/es-ES.rc rename to dll/win32/netshell/lang/es-ES.rc diff --git a/reactos/dll/win32/netshell/lang/fr-FR.rc b/dll/win32/netshell/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/fr-FR.rc rename to dll/win32/netshell/lang/fr-FR.rc diff --git a/reactos/dll/win32/netshell/lang/hu-HU.rc b/dll/win32/netshell/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/hu-HU.rc rename to dll/win32/netshell/lang/hu-HU.rc diff --git a/reactos/dll/win32/netshell/lang/id-ID.rc b/dll/win32/netshell/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/id-ID.rc rename to dll/win32/netshell/lang/id-ID.rc diff --git a/reactos/dll/win32/netshell/lang/it-IT.rc b/dll/win32/netshell/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/it-IT.rc rename to dll/win32/netshell/lang/it-IT.rc diff --git a/reactos/dll/win32/netshell/lang/ja-JP.rc b/dll/win32/netshell/lang/ja-JP.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/ja-JP.rc rename to dll/win32/netshell/lang/ja-JP.rc diff --git a/reactos/dll/win32/netshell/lang/nl-NL.rc b/dll/win32/netshell/lang/nl-NL.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/nl-NL.rc rename to dll/win32/netshell/lang/nl-NL.rc diff --git a/reactos/dll/win32/netshell/lang/no-NO.rc b/dll/win32/netshell/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/no-NO.rc rename to dll/win32/netshell/lang/no-NO.rc diff --git a/reactos/dll/win32/netshell/lang/pl-PL.rc b/dll/win32/netshell/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/pl-PL.rc rename to dll/win32/netshell/lang/pl-PL.rc diff --git a/reactos/dll/win32/netshell/lang/ru-RU.rc b/dll/win32/netshell/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/ru-RU.rc rename to dll/win32/netshell/lang/ru-RU.rc diff --git a/reactos/dll/win32/netshell/lang/sk-SK.rc b/dll/win32/netshell/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/sk-SK.rc rename to dll/win32/netshell/lang/sk-SK.rc diff --git a/reactos/dll/win32/netshell/lang/sv-SE.rc b/dll/win32/netshell/lang/sv-SE.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/sv-SE.rc rename to dll/win32/netshell/lang/sv-SE.rc diff --git a/reactos/dll/win32/netshell/lang/uk-UA.rc b/dll/win32/netshell/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/uk-UA.rc rename to dll/win32/netshell/lang/uk-UA.rc diff --git a/reactos/dll/win32/netshell/lang/zh-CN.rc b/dll/win32/netshell/lang/zh-CN.rc similarity index 100% rename from reactos/dll/win32/netshell/lang/zh-CN.rc rename to dll/win32/netshell/lang/zh-CN.rc diff --git a/reactos/dll/win32/netshell/lanstatusui.c b/dll/win32/netshell/lanstatusui.c similarity index 100% rename from reactos/dll/win32/netshell/lanstatusui.c rename to dll/win32/netshell/lanstatusui.c diff --git a/reactos/dll/win32/netshell/netshell.c b/dll/win32/netshell/netshell.c similarity index 100% rename from reactos/dll/win32/netshell/netshell.c rename to dll/win32/netshell/netshell.c diff --git a/reactos/dll/win32/netshell/netshell.rbuild b/dll/win32/netshell/netshell.rbuild similarity index 100% rename from reactos/dll/win32/netshell/netshell.rbuild rename to dll/win32/netshell/netshell.rbuild diff --git a/reactos/dll/win32/netshell/netshell.rc b/dll/win32/netshell/netshell.rc similarity index 100% rename from reactos/dll/win32/netshell/netshell.rc rename to dll/win32/netshell/netshell.rc diff --git a/reactos/dll/win32/netshell/netshell.spec b/dll/win32/netshell/netshell.spec similarity index 100% rename from reactos/dll/win32/netshell/netshell.spec rename to dll/win32/netshell/netshell.spec diff --git a/reactos/dll/win32/netshell/precomp.h b/dll/win32/netshell/precomp.h similarity index 100% rename from reactos/dll/win32/netshell/precomp.h rename to dll/win32/netshell/precomp.h diff --git a/reactos/dll/win32/netshell/res/neterror.ico b/dll/win32/netshell/res/neterror.ico similarity index 100% rename from reactos/dll/win32/netshell/res/neterror.ico rename to dll/win32/netshell/res/neterror.ico diff --git a/reactos/dll/win32/netshell/res/netidle.ico b/dll/win32/netshell/res/netidle.ico similarity index 100% rename from reactos/dll/win32/netshell/res/netidle.ico rename to dll/win32/netshell/res/netidle.ico diff --git a/reactos/dll/win32/netshell/res/netoff.ico b/dll/win32/netshell/res/netoff.ico similarity index 100% rename from reactos/dll/win32/netshell/res/netoff.ico rename to dll/win32/netshell/res/netoff.ico diff --git a/reactos/dll/win32/netshell/res/netrec.ico b/dll/win32/netshell/res/netrec.ico similarity index 100% rename from reactos/dll/win32/netshell/res/netrec.ico rename to dll/win32/netshell/res/netrec.ico diff --git a/reactos/dll/win32/netshell/res/netshell.ico b/dll/win32/netshell/res/netshell.ico similarity index 100% rename from reactos/dll/win32/netshell/res/netshell.ico rename to dll/win32/netshell/res/netshell.ico diff --git a/reactos/dll/win32/netshell/res/nettrans.ico b/dll/win32/netshell/res/nettrans.ico similarity index 100% rename from reactos/dll/win32/netshell/res/nettrans.ico rename to dll/win32/netshell/res/nettrans.ico diff --git a/reactos/dll/win32/netshell/res/nettrrec.ico b/dll/win32/netshell/res/nettrrec.ico similarity index 100% rename from reactos/dll/win32/netshell/res/nettrrec.ico rename to dll/win32/netshell/res/nettrrec.ico diff --git a/reactos/dll/win32/netshell/resource.h b/dll/win32/netshell/resource.h similarity index 100% rename from reactos/dll/win32/netshell/resource.h rename to dll/win32/netshell/resource.h diff --git a/reactos/dll/win32/netshell/shfldr_netconnect.c b/dll/win32/netshell/shfldr_netconnect.c similarity index 100% rename from reactos/dll/win32/netshell/shfldr_netconnect.c rename to dll/win32/netshell/shfldr_netconnect.c diff --git a/reactos/dll/win32/newdev/lang/bg-BG.rc b/dll/win32/newdev/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/bg-BG.rc rename to dll/win32/newdev/lang/bg-BG.rc diff --git a/reactos/dll/win32/newdev/lang/cs-CZ.rc b/dll/win32/newdev/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/cs-CZ.rc rename to dll/win32/newdev/lang/cs-CZ.rc diff --git a/reactos/dll/win32/newdev/lang/de-DE.rc b/dll/win32/newdev/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/de-DE.rc rename to dll/win32/newdev/lang/de-DE.rc diff --git a/reactos/dll/win32/newdev/lang/el-GR.rc b/dll/win32/newdev/lang/el-GR.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/el-GR.rc rename to dll/win32/newdev/lang/el-GR.rc diff --git a/reactos/dll/win32/newdev/lang/en-US.rc b/dll/win32/newdev/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/en-US.rc rename to dll/win32/newdev/lang/en-US.rc diff --git a/reactos/dll/win32/newdev/lang/es-ES.rc b/dll/win32/newdev/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/es-ES.rc rename to dll/win32/newdev/lang/es-ES.rc diff --git a/reactos/dll/win32/newdev/lang/fr-FR.rc b/dll/win32/newdev/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/fr-FR.rc rename to dll/win32/newdev/lang/fr-FR.rc diff --git a/reactos/dll/win32/newdev/lang/hu-HU.rc b/dll/win32/newdev/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/hu-HU.rc rename to dll/win32/newdev/lang/hu-HU.rc diff --git a/reactos/dll/win32/newdev/lang/id-ID.rc b/dll/win32/newdev/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/id-ID.rc rename to dll/win32/newdev/lang/id-ID.rc diff --git a/reactos/dll/win32/newdev/lang/it-IT.rc b/dll/win32/newdev/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/it-IT.rc rename to dll/win32/newdev/lang/it-IT.rc diff --git a/reactos/dll/win32/newdev/lang/no-NO.rc b/dll/win32/newdev/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/no-NO.rc rename to dll/win32/newdev/lang/no-NO.rc diff --git a/reactos/dll/win32/newdev/lang/pl-PL.rc b/dll/win32/newdev/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/pl-PL.rc rename to dll/win32/newdev/lang/pl-PL.rc diff --git a/reactos/dll/win32/newdev/lang/ru-RU.rc b/dll/win32/newdev/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/ru-RU.rc rename to dll/win32/newdev/lang/ru-RU.rc diff --git a/reactos/dll/win32/newdev/lang/sk-SK.rc b/dll/win32/newdev/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/sk-SK.rc rename to dll/win32/newdev/lang/sk-SK.rc diff --git a/reactos/dll/win32/newdev/lang/th-TH.rc b/dll/win32/newdev/lang/th-TH.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/th-TH.rc rename to dll/win32/newdev/lang/th-TH.rc diff --git a/reactos/dll/win32/newdev/lang/uk-UA.rc b/dll/win32/newdev/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/uk-UA.rc rename to dll/win32/newdev/lang/uk-UA.rc diff --git a/reactos/dll/win32/newdev/newdev.c b/dll/win32/newdev/newdev.c similarity index 100% rename from reactos/dll/win32/newdev/newdev.c rename to dll/win32/newdev/newdev.c diff --git a/reactos/dll/win32/newdev/newdev.rbuild b/dll/win32/newdev/newdev.rbuild similarity index 100% rename from reactos/dll/win32/newdev/newdev.rbuild rename to dll/win32/newdev/newdev.rbuild diff --git a/reactos/dll/win32/newdev/newdev.rc b/dll/win32/newdev/newdev.rc similarity index 100% rename from reactos/dll/win32/newdev/newdev.rc rename to dll/win32/newdev/newdev.rc diff --git a/reactos/dll/win32/newdev/newdev.spec b/dll/win32/newdev/newdev.spec similarity index 100% rename from reactos/dll/win32/newdev/newdev.spec rename to dll/win32/newdev/newdev.spec diff --git a/reactos/dll/win32/newdev/newdev_private.h b/dll/win32/newdev/newdev_private.h similarity index 100% rename from reactos/dll/win32/newdev/newdev_private.h rename to dll/win32/newdev/newdev_private.h diff --git a/reactos/dll/win32/newdev/resource.h b/dll/win32/newdev/resource.h similarity index 100% rename from reactos/dll/win32/newdev/resource.h rename to dll/win32/newdev/resource.h diff --git a/reactos/dll/win32/newdev/resources/header.bmp b/dll/win32/newdev/resources/header.bmp similarity index 100% rename from reactos/dll/win32/newdev/resources/header.bmp rename to dll/win32/newdev/resources/header.bmp diff --git a/reactos/dll/win32/newdev/resources/watermark.bmp b/dll/win32/newdev/resources/watermark.bmp similarity index 100% rename from reactos/dll/win32/newdev/resources/watermark.bmp rename to dll/win32/newdev/resources/watermark.bmp diff --git a/reactos/dll/win32/newdev/rsrc.rc b/dll/win32/newdev/rsrc.rc similarity index 100% rename from reactos/dll/win32/newdev/rsrc.rc rename to dll/win32/newdev/rsrc.rc diff --git a/reactos/dll/win32/newdev/stubs.c b/dll/win32/newdev/stubs.c similarity index 100% rename from reactos/dll/win32/newdev/stubs.c rename to dll/win32/newdev/stubs.c diff --git a/reactos/dll/win32/newdev/wizard.c b/dll/win32/newdev/wizard.c similarity index 100% rename from reactos/dll/win32/newdev/wizard.c rename to dll/win32/newdev/wizard.c diff --git a/reactos/dll/win32/ntdsapi/ntdsapi.c b/dll/win32/ntdsapi/ntdsapi.c similarity index 100% rename from reactos/dll/win32/ntdsapi/ntdsapi.c rename to dll/win32/ntdsapi/ntdsapi.c diff --git a/reactos/dll/win32/ntdsapi/ntdsapi.rbuild b/dll/win32/ntdsapi/ntdsapi.rbuild similarity index 100% rename from reactos/dll/win32/ntdsapi/ntdsapi.rbuild rename to dll/win32/ntdsapi/ntdsapi.rbuild diff --git a/reactos/dll/win32/ntdsapi/ntdsapi.spec b/dll/win32/ntdsapi/ntdsapi.spec similarity index 100% rename from reactos/dll/win32/ntdsapi/ntdsapi.spec rename to dll/win32/ntdsapi/ntdsapi.spec diff --git a/reactos/dll/win32/ntmarta/ntmarta.c b/dll/win32/ntmarta/ntmarta.c similarity index 100% rename from reactos/dll/win32/ntmarta/ntmarta.c rename to dll/win32/ntmarta/ntmarta.c diff --git a/reactos/dll/win32/ntmarta/ntmarta.h b/dll/win32/ntmarta/ntmarta.h similarity index 100% rename from reactos/dll/win32/ntmarta/ntmarta.h rename to dll/win32/ntmarta/ntmarta.h diff --git a/reactos/dll/win32/ntmarta/ntmarta.rbuild b/dll/win32/ntmarta/ntmarta.rbuild similarity index 100% rename from reactos/dll/win32/ntmarta/ntmarta.rbuild rename to dll/win32/ntmarta/ntmarta.rbuild diff --git a/reactos/dll/win32/ntmarta/ntmarta.rc b/dll/win32/ntmarta/ntmarta.rc similarity index 100% rename from reactos/dll/win32/ntmarta/ntmarta.rc rename to dll/win32/ntmarta/ntmarta.rc diff --git a/reactos/dll/win32/ntmarta/ntmarta.spec b/dll/win32/ntmarta/ntmarta.spec similarity index 100% rename from reactos/dll/win32/ntmarta/ntmarta.spec rename to dll/win32/ntmarta/ntmarta.spec diff --git a/reactos/dll/win32/objsel/factory.c b/dll/win32/objsel/factory.c similarity index 100% rename from reactos/dll/win32/objsel/factory.c rename to dll/win32/objsel/factory.c diff --git a/reactos/dll/win32/objsel/objsel.c b/dll/win32/objsel/objsel.c similarity index 100% rename from reactos/dll/win32/objsel/objsel.c rename to dll/win32/objsel/objsel.c diff --git a/reactos/dll/win32/objsel/objsel.rbuild b/dll/win32/objsel/objsel.rbuild similarity index 100% rename from reactos/dll/win32/objsel/objsel.rbuild rename to dll/win32/objsel/objsel.rbuild diff --git a/reactos/dll/win32/objsel/objsel.rc b/dll/win32/objsel/objsel.rc similarity index 100% rename from reactos/dll/win32/objsel/objsel.rc rename to dll/win32/objsel/objsel.rc diff --git a/reactos/dll/win32/objsel/objsel.spec b/dll/win32/objsel/objsel.spec similarity index 100% rename from reactos/dll/win32/objsel/objsel.spec rename to dll/win32/objsel/objsel.spec diff --git a/reactos/dll/win32/objsel/objsel_private.h b/dll/win32/objsel/objsel_private.h similarity index 100% rename from reactos/dll/win32/objsel/objsel_private.h rename to dll/win32/objsel/objsel_private.h diff --git a/reactos/dll/win32/objsel/regsvr.c b/dll/win32/objsel/regsvr.c similarity index 100% rename from reactos/dll/win32/objsel/regsvr.c rename to dll/win32/objsel/regsvr.c diff --git a/reactos/dll/win32/odbc32/Makefile.in b/dll/win32/odbc32/Makefile.in similarity index 100% rename from reactos/dll/win32/odbc32/Makefile.in rename to dll/win32/odbc32/Makefile.in diff --git a/reactos/dll/win32/odbc32/README.txt b/dll/win32/odbc32/README.txt similarity index 100% rename from reactos/dll/win32/odbc32/README.txt rename to dll/win32/odbc32/README.txt diff --git a/reactos/dll/win32/odbc32/odbc32.rbuild b/dll/win32/odbc32/odbc32.rbuild similarity index 100% rename from reactos/dll/win32/odbc32/odbc32.rbuild rename to dll/win32/odbc32/odbc32.rbuild diff --git a/reactos/dll/win32/odbc32/odbc32.rc b/dll/win32/odbc32/odbc32.rc similarity index 100% rename from reactos/dll/win32/odbc32/odbc32.rc rename to dll/win32/odbc32/odbc32.rc diff --git a/reactos/dll/win32/odbc32/odbc32.spec b/dll/win32/odbc32/odbc32.spec similarity index 100% rename from reactos/dll/win32/odbc32/odbc32.spec rename to dll/win32/odbc32/odbc32.spec diff --git a/reactos/dll/win32/odbc32/proxyodbc.c b/dll/win32/odbc32/proxyodbc.c similarity index 100% rename from reactos/dll/win32/odbc32/proxyodbc.c rename to dll/win32/odbc32/proxyodbc.c diff --git a/reactos/dll/win32/odbc32/proxyodbc.h b/dll/win32/odbc32/proxyodbc.h similarity index 100% rename from reactos/dll/win32/odbc32/proxyodbc.h rename to dll/win32/odbc32/proxyodbc.h diff --git a/reactos/dll/win32/odbccp32/odbccp32.c b/dll/win32/odbccp32/odbccp32.c similarity index 100% rename from reactos/dll/win32/odbccp32/odbccp32.c rename to dll/win32/odbccp32/odbccp32.c diff --git a/reactos/dll/win32/odbccp32/odbccp32.rbuild b/dll/win32/odbccp32/odbccp32.rbuild similarity index 100% rename from reactos/dll/win32/odbccp32/odbccp32.rbuild rename to dll/win32/odbccp32/odbccp32.rbuild diff --git a/reactos/dll/win32/odbccp32/odbccp32.spec b/dll/win32/odbccp32/odbccp32.spec similarity index 100% rename from reactos/dll/win32/odbccp32/odbccp32.spec rename to dll/win32/odbccp32/odbccp32.spec diff --git a/reactos/dll/win32/ole32/antimoniker.c b/dll/win32/ole32/antimoniker.c similarity index 100% rename from reactos/dll/win32/ole32/antimoniker.c rename to dll/win32/ole32/antimoniker.c diff --git a/reactos/dll/win32/ole32/bindctx.c b/dll/win32/ole32/bindctx.c similarity index 100% rename from reactos/dll/win32/ole32/bindctx.c rename to dll/win32/ole32/bindctx.c diff --git a/reactos/dll/win32/ole32/classmoniker.c b/dll/win32/ole32/classmoniker.c similarity index 100% rename from reactos/dll/win32/ole32/classmoniker.c rename to dll/win32/ole32/classmoniker.c diff --git a/reactos/dll/win32/ole32/clipboard.c b/dll/win32/ole32/clipboard.c similarity index 100% rename from reactos/dll/win32/ole32/clipboard.c rename to dll/win32/ole32/clipboard.c diff --git a/reactos/dll/win32/ole32/compobj.c b/dll/win32/ole32/compobj.c similarity index 100% rename from reactos/dll/win32/ole32/compobj.c rename to dll/win32/ole32/compobj.c diff --git a/reactos/dll/win32/ole32/compobj.spec b/dll/win32/ole32/compobj.spec similarity index 100% rename from reactos/dll/win32/ole32/compobj.spec rename to dll/win32/ole32/compobj.spec diff --git a/reactos/dll/win32/ole32/compobj_private.h b/dll/win32/ole32/compobj_private.h similarity index 100% rename from reactos/dll/win32/ole32/compobj_private.h rename to dll/win32/ole32/compobj_private.h diff --git a/reactos/dll/win32/ole32/compositemoniker.c b/dll/win32/ole32/compositemoniker.c similarity index 100% rename from reactos/dll/win32/ole32/compositemoniker.c rename to dll/win32/ole32/compositemoniker.c diff --git a/reactos/dll/win32/ole32/datacache.c b/dll/win32/ole32/datacache.c similarity index 100% rename from reactos/dll/win32/ole32/datacache.c rename to dll/win32/ole32/datacache.c diff --git a/reactos/dll/win32/ole32/dcom.idl b/dll/win32/ole32/dcom.idl similarity index 100% rename from reactos/dll/win32/ole32/dcom.idl rename to dll/win32/ole32/dcom.idl diff --git a/reactos/dll/win32/ole32/defaulthandler.c b/dll/win32/ole32/defaulthandler.c similarity index 100% rename from reactos/dll/win32/ole32/defaulthandler.c rename to dll/win32/ole32/defaulthandler.c diff --git a/reactos/dll/win32/ole32/dictionary.c b/dll/win32/ole32/dictionary.c similarity index 100% rename from reactos/dll/win32/ole32/dictionary.c rename to dll/win32/ole32/dictionary.c diff --git a/reactos/dll/win32/ole32/dictionary.h b/dll/win32/ole32/dictionary.h similarity index 100% rename from reactos/dll/win32/ole32/dictionary.h rename to dll/win32/ole32/dictionary.h diff --git a/reactos/dll/win32/ole32/drag_copy.cur b/dll/win32/ole32/drag_copy.cur similarity index 100% rename from reactos/dll/win32/ole32/drag_copy.cur rename to dll/win32/ole32/drag_copy.cur diff --git a/reactos/dll/win32/ole32/drag_link.cur b/dll/win32/ole32/drag_link.cur similarity index 100% rename from reactos/dll/win32/ole32/drag_link.cur rename to dll/win32/ole32/drag_link.cur diff --git a/reactos/dll/win32/ole32/drag_move.cur b/dll/win32/ole32/drag_move.cur similarity index 100% rename from reactos/dll/win32/ole32/drag_move.cur rename to dll/win32/ole32/drag_move.cur diff --git a/reactos/dll/win32/ole32/enumx.c b/dll/win32/ole32/enumx.c similarity index 100% rename from reactos/dll/win32/ole32/enumx.c rename to dll/win32/ole32/enumx.c diff --git a/reactos/dll/win32/ole32/enumx.h b/dll/win32/ole32/enumx.h similarity index 100% rename from reactos/dll/win32/ole32/enumx.h rename to dll/win32/ole32/enumx.h diff --git a/reactos/dll/win32/ole32/errorinfo.c b/dll/win32/ole32/errorinfo.c similarity index 100% rename from reactos/dll/win32/ole32/errorinfo.c rename to dll/win32/ole32/errorinfo.c diff --git a/reactos/dll/win32/ole32/filemoniker.c b/dll/win32/ole32/filemoniker.c similarity index 100% rename from reactos/dll/win32/ole32/filemoniker.c rename to dll/win32/ole32/filemoniker.c diff --git a/reactos/dll/win32/ole32/ftmarshal.c b/dll/win32/ole32/ftmarshal.c similarity index 100% rename from reactos/dll/win32/ole32/ftmarshal.c rename to dll/win32/ole32/ftmarshal.c diff --git a/reactos/dll/win32/ole32/git.c b/dll/win32/ole32/git.c similarity index 100% rename from reactos/dll/win32/ole32/git.c rename to dll/win32/ole32/git.c diff --git a/reactos/dll/win32/ole32/hglobalstream.c b/dll/win32/ole32/hglobalstream.c similarity index 100% rename from reactos/dll/win32/ole32/hglobalstream.c rename to dll/win32/ole32/hglobalstream.c diff --git a/reactos/dll/win32/ole32/ifs.c b/dll/win32/ole32/ifs.c similarity index 100% rename from reactos/dll/win32/ole32/ifs.c rename to dll/win32/ole32/ifs.c diff --git a/reactos/dll/win32/ole32/ifs.h b/dll/win32/ole32/ifs.h similarity index 100% rename from reactos/dll/win32/ole32/ifs.h rename to dll/win32/ole32/ifs.h diff --git a/reactos/dll/win32/ole32/irot.idl b/dll/win32/ole32/irot.idl similarity index 100% rename from reactos/dll/win32/ole32/irot.idl rename to dll/win32/ole32/irot.idl diff --git a/reactos/dll/win32/ole32/itemmoniker.c b/dll/win32/ole32/itemmoniker.c similarity index 100% rename from reactos/dll/win32/ole32/itemmoniker.c rename to dll/win32/ole32/itemmoniker.c diff --git a/reactos/dll/win32/ole32/marshal.c b/dll/win32/ole32/marshal.c similarity index 100% rename from reactos/dll/win32/ole32/marshal.c rename to dll/win32/ole32/marshal.c diff --git a/reactos/dll/win32/ole32/memlockbytes.c b/dll/win32/ole32/memlockbytes.c similarity index 100% rename from reactos/dll/win32/ole32/memlockbytes.c rename to dll/win32/ole32/memlockbytes.c diff --git a/reactos/dll/win32/ole32/memlockbytes16.c b/dll/win32/ole32/memlockbytes16.c similarity index 100% rename from reactos/dll/win32/ole32/memlockbytes16.c rename to dll/win32/ole32/memlockbytes16.c diff --git a/reactos/dll/win32/ole32/moniker.c b/dll/win32/ole32/moniker.c similarity index 100% rename from reactos/dll/win32/ole32/moniker.c rename to dll/win32/ole32/moniker.c diff --git a/reactos/dll/win32/ole32/moniker.h b/dll/win32/ole32/moniker.h similarity index 100% rename from reactos/dll/win32/ole32/moniker.h rename to dll/win32/ole32/moniker.h diff --git a/reactos/dll/win32/ole32/nodrop.cur b/dll/win32/ole32/nodrop.cur similarity index 100% rename from reactos/dll/win32/ole32/nodrop.cur rename to dll/win32/ole32/nodrop.cur diff --git a/reactos/dll/win32/ole32/ole16.c b/dll/win32/ole32/ole16.c similarity index 100% rename from reactos/dll/win32/ole32/ole16.c rename to dll/win32/ole32/ole16.c diff --git a/reactos/dll/win32/ole32/ole2.c b/dll/win32/ole32/ole2.c similarity index 100% rename from reactos/dll/win32/ole32/ole2.c rename to dll/win32/ole32/ole2.c diff --git a/reactos/dll/win32/ole32/ole2.spec b/dll/win32/ole32/ole2.spec similarity index 100% rename from reactos/dll/win32/ole32/ole2.spec rename to dll/win32/ole32/ole2.spec diff --git a/reactos/dll/win32/ole32/ole2_16.c b/dll/win32/ole32/ole2_16.c similarity index 100% rename from reactos/dll/win32/ole32/ole2_16.c rename to dll/win32/ole32/ole2_16.c diff --git a/reactos/dll/win32/ole32/ole2conv.spec b/dll/win32/ole32/ole2conv.spec similarity index 100% rename from reactos/dll/win32/ole32/ole2conv.spec rename to dll/win32/ole32/ole2conv.spec diff --git a/reactos/dll/win32/ole32/ole2impl.c b/dll/win32/ole32/ole2impl.c similarity index 100% rename from reactos/dll/win32/ole32/ole2impl.c rename to dll/win32/ole32/ole2impl.c diff --git a/reactos/dll/win32/ole32/ole2nls.c b/dll/win32/ole32/ole2nls.c similarity index 100% rename from reactos/dll/win32/ole32/ole2nls.c rename to dll/win32/ole32/ole2nls.c diff --git a/reactos/dll/win32/ole32/ole2nls.spec b/dll/win32/ole32/ole2nls.spec similarity index 100% rename from reactos/dll/win32/ole32/ole2nls.spec rename to dll/win32/ole32/ole2nls.spec diff --git a/reactos/dll/win32/ole32/ole2prox.spec b/dll/win32/ole32/ole2prox.spec similarity index 100% rename from reactos/dll/win32/ole32/ole2prox.spec rename to dll/win32/ole32/ole2prox.spec diff --git a/reactos/dll/win32/ole32/ole2stubs.c b/dll/win32/ole32/ole2stubs.c similarity index 100% rename from reactos/dll/win32/ole32/ole2stubs.c rename to dll/win32/ole32/ole2stubs.c diff --git a/reactos/dll/win32/ole32/ole2thk.spec b/dll/win32/ole32/ole2thk.spec similarity index 100% rename from reactos/dll/win32/ole32/ole2thk.spec rename to dll/win32/ole32/ole2thk.spec diff --git a/reactos/dll/win32/ole32/ole32.rbuild b/dll/win32/ole32/ole32.rbuild similarity index 100% rename from reactos/dll/win32/ole32/ole32.rbuild rename to dll/win32/ole32/ole32.rbuild diff --git a/reactos/dll/win32/ole32/ole32.spec b/dll/win32/ole32/ole32.spec similarity index 100% rename from reactos/dll/win32/ole32/ole32.spec rename to dll/win32/ole32/ole32.spec diff --git a/reactos/dll/win32/ole32/ole32_main.c b/dll/win32/ole32/ole32_main.c similarity index 100% rename from reactos/dll/win32/ole32/ole32_main.c rename to dll/win32/ole32/ole32_main.c diff --git a/reactos/dll/win32/ole32/ole32_objidl.idl b/dll/win32/ole32/ole32_objidl.idl similarity index 100% rename from reactos/dll/win32/ole32/ole32_objidl.idl rename to dll/win32/ole32/ole32_objidl.idl diff --git a/reactos/dll/win32/ole32/ole32_oleidl.idl b/dll/win32/ole32/ole32_oleidl.idl similarity index 100% rename from reactos/dll/win32/ole32/ole32_oleidl.idl rename to dll/win32/ole32/ole32_oleidl.idl diff --git a/reactos/dll/win32/ole32/ole32_ros.diff b/dll/win32/ole32/ole32_ros.diff similarity index 100% rename from reactos/dll/win32/ole32/ole32_ros.diff rename to dll/win32/ole32/ole32_ros.diff diff --git a/reactos/dll/win32/ole32/ole32_unknwn.idl b/dll/win32/ole32/ole32_unknwn.idl similarity index 100% rename from reactos/dll/win32/ole32/ole32_unknwn.idl rename to dll/win32/ole32/ole32_unknwn.idl diff --git a/reactos/dll/win32/ole32/ole32res.rc b/dll/win32/ole32/ole32res.rc similarity index 100% rename from reactos/dll/win32/ole32/ole32res.rc rename to dll/win32/ole32/ole32res.rc diff --git a/reactos/dll/win32/ole32/oleobj.c b/dll/win32/ole32/oleobj.c similarity index 100% rename from reactos/dll/win32/ole32/oleobj.c rename to dll/win32/ole32/oleobj.c diff --git a/reactos/dll/win32/ole32/oleproxy.c b/dll/win32/ole32/oleproxy.c similarity index 100% rename from reactos/dll/win32/ole32/oleproxy.c rename to dll/win32/ole32/oleproxy.c diff --git a/reactos/dll/win32/ole32/olestd.h b/dll/win32/ole32/olestd.h similarity index 100% rename from reactos/dll/win32/ole32/olestd.h rename to dll/win32/ole32/olestd.h diff --git a/reactos/dll/win32/ole32/pointermoniker.c b/dll/win32/ole32/pointermoniker.c similarity index 100% rename from reactos/dll/win32/ole32/pointermoniker.c rename to dll/win32/ole32/pointermoniker.c diff --git a/reactos/dll/win32/ole32/regsvr.c b/dll/win32/ole32/regsvr.c similarity index 100% rename from reactos/dll/win32/ole32/regsvr.c rename to dll/win32/ole32/regsvr.c diff --git a/reactos/dll/win32/ole32/rpc.c b/dll/win32/ole32/rpc.c similarity index 100% rename from reactos/dll/win32/ole32/rpc.c rename to dll/win32/ole32/rpc.c diff --git a/reactos/dll/win32/ole32/stg_bigblockfile.c b/dll/win32/ole32/stg_bigblockfile.c similarity index 100% rename from reactos/dll/win32/ole32/stg_bigblockfile.c rename to dll/win32/ole32/stg_bigblockfile.c diff --git a/reactos/dll/win32/ole32/stg_prop.c b/dll/win32/ole32/stg_prop.c similarity index 100% rename from reactos/dll/win32/ole32/stg_prop.c rename to dll/win32/ole32/stg_prop.c diff --git a/reactos/dll/win32/ole32/stg_stream.c b/dll/win32/ole32/stg_stream.c similarity index 100% rename from reactos/dll/win32/ole32/stg_stream.c rename to dll/win32/ole32/stg_stream.c diff --git a/reactos/dll/win32/ole32/storage.c b/dll/win32/ole32/storage.c similarity index 100% rename from reactos/dll/win32/ole32/storage.c rename to dll/win32/ole32/storage.c diff --git a/reactos/dll/win32/ole32/storage.spec b/dll/win32/ole32/storage.spec similarity index 100% rename from reactos/dll/win32/ole32/storage.spec rename to dll/win32/ole32/storage.spec diff --git a/reactos/dll/win32/ole32/storage32.c b/dll/win32/ole32/storage32.c similarity index 100% rename from reactos/dll/win32/ole32/storage32.c rename to dll/win32/ole32/storage32.c diff --git a/reactos/dll/win32/ole32/storage32.h b/dll/win32/ole32/storage32.h similarity index 100% rename from reactos/dll/win32/ole32/storage32.h rename to dll/win32/ole32/storage32.h diff --git a/reactos/dll/win32/ole32/stubmanager.c b/dll/win32/ole32/stubmanager.c similarity index 100% rename from reactos/dll/win32/ole32/stubmanager.c rename to dll/win32/ole32/stubmanager.c diff --git a/reactos/dll/win32/ole32/usrmarshal.c b/dll/win32/ole32/usrmarshal.c similarity index 100% rename from reactos/dll/win32/ole32/usrmarshal.c rename to dll/win32/ole32/usrmarshal.c diff --git a/reactos/dll/win32/ole32/version.rc b/dll/win32/ole32/version.rc similarity index 100% rename from reactos/dll/win32/ole32/version.rc rename to dll/win32/ole32/version.rc diff --git a/reactos/dll/win32/ole32/version16.rc b/dll/win32/ole32/version16.rc similarity index 100% rename from reactos/dll/win32/ole32/version16.rc rename to dll/win32/ole32/version16.rc diff --git a/reactos/dll/win32/oleacc/main.c b/dll/win32/oleacc/main.c similarity index 100% rename from reactos/dll/win32/oleacc/main.c rename to dll/win32/oleacc/main.c diff --git a/reactos/dll/win32/oleacc/oleacc.rbuild b/dll/win32/oleacc/oleacc.rbuild similarity index 100% rename from reactos/dll/win32/oleacc/oleacc.rbuild rename to dll/win32/oleacc/oleacc.rbuild diff --git a/reactos/dll/win32/oleacc/oleacc.spec b/dll/win32/oleacc/oleacc.spec similarity index 100% rename from reactos/dll/win32/oleacc/oleacc.spec rename to dll/win32/oleacc/oleacc.spec diff --git a/reactos/dll/win32/oleaut32/connpt.c b/dll/win32/oleaut32/connpt.c similarity index 100% rename from reactos/dll/win32/oleaut32/connpt.c rename to dll/win32/oleaut32/connpt.c diff --git a/reactos/dll/win32/oleaut32/connpt.h b/dll/win32/oleaut32/connpt.h similarity index 100% rename from reactos/dll/win32/oleaut32/connpt.h rename to dll/win32/oleaut32/connpt.h diff --git a/reactos/dll/win32/oleaut32/dispatch.c b/dll/win32/oleaut32/dispatch.c similarity index 100% rename from reactos/dll/win32/oleaut32/dispatch.c rename to dll/win32/oleaut32/dispatch.c diff --git a/reactos/dll/win32/oleaut32/hash.c b/dll/win32/oleaut32/hash.c similarity index 100% rename from reactos/dll/win32/oleaut32/hash.c rename to dll/win32/oleaut32/hash.c diff --git a/reactos/dll/win32/oleaut32/ole2disp.c b/dll/win32/oleaut32/ole2disp.c similarity index 100% rename from reactos/dll/win32/oleaut32/ole2disp.c rename to dll/win32/oleaut32/ole2disp.c diff --git a/reactos/dll/win32/oleaut32/ole2disp.h b/dll/win32/oleaut32/ole2disp.h similarity index 100% rename from reactos/dll/win32/oleaut32/ole2disp.h rename to dll/win32/oleaut32/ole2disp.h diff --git a/reactos/dll/win32/oleaut32/ole2disp.spec b/dll/win32/oleaut32/ole2disp.spec similarity index 100% rename from reactos/dll/win32/oleaut32/ole2disp.spec rename to dll/win32/oleaut32/ole2disp.spec diff --git a/reactos/dll/win32/oleaut32/oleaut.c b/dll/win32/oleaut32/oleaut.c similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut.c rename to dll/win32/oleaut32/oleaut.c diff --git a/reactos/dll/win32/oleaut32/oleaut32.rbuild b/dll/win32/oleaut32/oleaut32.rbuild similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32.rbuild rename to dll/win32/oleaut32/oleaut32.rbuild diff --git a/reactos/dll/win32/oleaut32/oleaut32.rc b/dll/win32/oleaut32/oleaut32.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32.rc rename to dll/win32/oleaut32/oleaut32.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32.spec b/dll/win32/oleaut32/oleaut32.spec similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32.spec rename to dll/win32/oleaut32/oleaut32.spec diff --git a/reactos/dll/win32/oleaut32/oleaut32_Bg.rc b/dll/win32/oleaut32/oleaut32_Bg.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Bg.rc rename to dll/win32/oleaut32/oleaut32_Bg.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Cz.rc b/dll/win32/oleaut32/oleaut32_Cz.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Cz.rc rename to dll/win32/oleaut32/oleaut32_Cz.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Da.rc b/dll/win32/oleaut32/oleaut32_Da.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Da.rc rename to dll/win32/oleaut32/oleaut32_Da.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_De.rc b/dll/win32/oleaut32/oleaut32_De.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_De.rc rename to dll/win32/oleaut32/oleaut32_De.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_El.rc b/dll/win32/oleaut32/oleaut32_El.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_El.rc rename to dll/win32/oleaut32/oleaut32_El.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_En.rc b/dll/win32/oleaut32/oleaut32_En.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_En.rc rename to dll/win32/oleaut32/oleaut32_En.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Eo.rc b/dll/win32/oleaut32/oleaut32_Eo.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Eo.rc rename to dll/win32/oleaut32/oleaut32_Eo.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Es.rc b/dll/win32/oleaut32/oleaut32_Es.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Es.rc rename to dll/win32/oleaut32/oleaut32_Es.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Fr.rc b/dll/win32/oleaut32/oleaut32_Fr.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Fr.rc rename to dll/win32/oleaut32/oleaut32_Fr.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Hu.rc b/dll/win32/oleaut32/oleaut32_Hu.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Hu.rc rename to dll/win32/oleaut32/oleaut32_Hu.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_It.rc b/dll/win32/oleaut32/oleaut32_It.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_It.rc rename to dll/win32/oleaut32/oleaut32_It.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Ja.rc b/dll/win32/oleaut32/oleaut32_Ja.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Ja.rc rename to dll/win32/oleaut32/oleaut32_Ja.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Ko.rc b/dll/win32/oleaut32/oleaut32_Ko.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Ko.rc rename to dll/win32/oleaut32/oleaut32_Ko.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Nl.rc b/dll/win32/oleaut32/oleaut32_Nl.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Nl.rc rename to dll/win32/oleaut32/oleaut32_Nl.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_No.rc b/dll/win32/oleaut32/oleaut32_No.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_No.rc rename to dll/win32/oleaut32/oleaut32_No.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Pl.rc b/dll/win32/oleaut32/oleaut32_Pl.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Pl.rc rename to dll/win32/oleaut32/oleaut32_Pl.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Pt.rc b/dll/win32/oleaut32/oleaut32_Pt.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Pt.rc rename to dll/win32/oleaut32/oleaut32_Pt.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Ro.rc b/dll/win32/oleaut32/oleaut32_Ro.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Ro.rc rename to dll/win32/oleaut32/oleaut32_Ro.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Ru.rc b/dll/win32/oleaut32/oleaut32_Ru.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Ru.rc rename to dll/win32/oleaut32/oleaut32_Ru.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Si.rc b/dll/win32/oleaut32/oleaut32_Si.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Si.rc rename to dll/win32/oleaut32/oleaut32_Si.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Sv.rc b/dll/win32/oleaut32/oleaut32_Sv.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Sv.rc rename to dll/win32/oleaut32/oleaut32_Sv.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Th.rc b/dll/win32/oleaut32/oleaut32_Th.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Th.rc rename to dll/win32/oleaut32/oleaut32_Th.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Tr.rc b/dll/win32/oleaut32/oleaut32_Tr.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Tr.rc rename to dll/win32/oleaut32/oleaut32_Tr.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Uk.rc b/dll/win32/oleaut32/oleaut32_Uk.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Uk.rc rename to dll/win32/oleaut32/oleaut32_Uk.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_Zh.rc b/dll/win32/oleaut32/oleaut32_Zh.rc similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_Zh.rc rename to dll/win32/oleaut32/oleaut32_Zh.rc diff --git a/reactos/dll/win32/oleaut32/oleaut32_oaidl.idl b/dll/win32/oleaut32/oleaut32_oaidl.idl similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_oaidl.idl rename to dll/win32/oleaut32/oleaut32_oaidl.idl diff --git a/reactos/dll/win32/oleaut32/oleaut32_ocidl.idl b/dll/win32/oleaut32/oleaut32_ocidl.idl similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_ocidl.idl rename to dll/win32/oleaut32/oleaut32_ocidl.idl diff --git a/reactos/dll/win32/oleaut32/oleaut32_ros.diff b/dll/win32/oleaut32/oleaut32_ros.diff similarity index 100% rename from reactos/dll/win32/oleaut32/oleaut32_ros.diff rename to dll/win32/oleaut32/oleaut32_ros.diff diff --git a/reactos/dll/win32/oleaut32/olefont.c b/dll/win32/oleaut32/olefont.c similarity index 100% rename from reactos/dll/win32/oleaut32/olefont.c rename to dll/win32/oleaut32/olefont.c diff --git a/reactos/dll/win32/oleaut32/olepicture.c b/dll/win32/oleaut32/olepicture.c similarity index 100% rename from reactos/dll/win32/oleaut32/olepicture.c rename to dll/win32/oleaut32/olepicture.c diff --git a/reactos/dll/win32/oleaut32/recinfo.c b/dll/win32/oleaut32/recinfo.c similarity index 100% rename from reactos/dll/win32/oleaut32/recinfo.c rename to dll/win32/oleaut32/recinfo.c diff --git a/reactos/dll/win32/oleaut32/regsvr.c b/dll/win32/oleaut32/regsvr.c similarity index 100% rename from reactos/dll/win32/oleaut32/regsvr.c rename to dll/win32/oleaut32/regsvr.c diff --git a/reactos/dll/win32/oleaut32/resource.h b/dll/win32/oleaut32/resource.h similarity index 100% rename from reactos/dll/win32/oleaut32/resource.h rename to dll/win32/oleaut32/resource.h diff --git a/reactos/dll/win32/oleaut32/safearray.c b/dll/win32/oleaut32/safearray.c similarity index 100% rename from reactos/dll/win32/oleaut32/safearray.c rename to dll/win32/oleaut32/safearray.c diff --git a/reactos/dll/win32/oleaut32/stubs.c b/dll/win32/oleaut32/stubs.c similarity index 100% rename from reactos/dll/win32/oleaut32/stubs.c rename to dll/win32/oleaut32/stubs.c diff --git a/reactos/dll/win32/oleaut32/tmarshal.c b/dll/win32/oleaut32/tmarshal.c similarity index 100% rename from reactos/dll/win32/oleaut32/tmarshal.c rename to dll/win32/oleaut32/tmarshal.c diff --git a/reactos/dll/win32/oleaut32/typelib.c b/dll/win32/oleaut32/typelib.c similarity index 100% rename from reactos/dll/win32/oleaut32/typelib.c rename to dll/win32/oleaut32/typelib.c diff --git a/reactos/dll/win32/oleaut32/typelib.h b/dll/win32/oleaut32/typelib.h similarity index 100% rename from reactos/dll/win32/oleaut32/typelib.h rename to dll/win32/oleaut32/typelib.h diff --git a/reactos/dll/win32/oleaut32/typelib.spec b/dll/win32/oleaut32/typelib.spec similarity index 100% rename from reactos/dll/win32/oleaut32/typelib.spec rename to dll/win32/oleaut32/typelib.spec diff --git a/reactos/dll/win32/oleaut32/typelib16.c b/dll/win32/oleaut32/typelib16.c similarity index 100% rename from reactos/dll/win32/oleaut32/typelib16.c rename to dll/win32/oleaut32/typelib16.c diff --git a/reactos/dll/win32/oleaut32/typelib2.c b/dll/win32/oleaut32/typelib2.c similarity index 100% rename from reactos/dll/win32/oleaut32/typelib2.c rename to dll/win32/oleaut32/typelib2.c diff --git a/reactos/dll/win32/oleaut32/ungif.c b/dll/win32/oleaut32/ungif.c similarity index 100% rename from reactos/dll/win32/oleaut32/ungif.c rename to dll/win32/oleaut32/ungif.c diff --git a/reactos/dll/win32/oleaut32/ungif.h b/dll/win32/oleaut32/ungif.h similarity index 100% rename from reactos/dll/win32/oleaut32/ungif.h rename to dll/win32/oleaut32/ungif.h diff --git a/reactos/dll/win32/oleaut32/usrmarshal.c b/dll/win32/oleaut32/usrmarshal.c similarity index 100% rename from reactos/dll/win32/oleaut32/usrmarshal.c rename to dll/win32/oleaut32/usrmarshal.c diff --git a/reactos/dll/win32/oleaut32/varformat.c b/dll/win32/oleaut32/varformat.c similarity index 100% rename from reactos/dll/win32/oleaut32/varformat.c rename to dll/win32/oleaut32/varformat.c diff --git a/reactos/dll/win32/oleaut32/variant.c b/dll/win32/oleaut32/variant.c similarity index 100% rename from reactos/dll/win32/oleaut32/variant.c rename to dll/win32/oleaut32/variant.c diff --git a/reactos/dll/win32/oleaut32/variant.h b/dll/win32/oleaut32/variant.h similarity index 100% rename from reactos/dll/win32/oleaut32/variant.h rename to dll/win32/oleaut32/variant.h diff --git a/reactos/dll/win32/oleaut32/vartype.c b/dll/win32/oleaut32/vartype.c similarity index 100% rename from reactos/dll/win32/oleaut32/vartype.c rename to dll/win32/oleaut32/vartype.c diff --git a/reactos/dll/win32/oleaut32/version.rc b/dll/win32/oleaut32/version.rc similarity index 100% rename from reactos/dll/win32/oleaut32/version.rc rename to dll/win32/oleaut32/version.rc diff --git a/reactos/dll/win32/oledlg/insobjdlg.c b/dll/win32/oledlg/insobjdlg.c similarity index 100% rename from reactos/dll/win32/oledlg/insobjdlg.c rename to dll/win32/oledlg/insobjdlg.c diff --git a/reactos/dll/win32/oledlg/oledlg.rbuild b/dll/win32/oledlg/oledlg.rbuild similarity index 100% rename from reactos/dll/win32/oledlg/oledlg.rbuild rename to dll/win32/oledlg/oledlg.rbuild diff --git a/reactos/dll/win32/oledlg/oledlg.spec b/dll/win32/oledlg/oledlg.spec similarity index 100% rename from reactos/dll/win32/oledlg/oledlg.spec rename to dll/win32/oledlg/oledlg.spec diff --git a/reactos/dll/win32/oledlg/oledlg_Cs.rc b/dll/win32/oledlg/oledlg_Cs.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Cs.rc rename to dll/win32/oledlg/oledlg_Cs.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Da.rc b/dll/win32/oledlg/oledlg_Da.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Da.rc rename to dll/win32/oledlg/oledlg_Da.rc diff --git a/reactos/dll/win32/oledlg/oledlg_De.rc b/dll/win32/oledlg/oledlg_De.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_De.rc rename to dll/win32/oledlg/oledlg_De.rc diff --git a/reactos/dll/win32/oledlg/oledlg_En.rc b/dll/win32/oledlg/oledlg_En.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_En.rc rename to dll/win32/oledlg/oledlg_En.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Es.rc b/dll/win32/oledlg/oledlg_Es.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Es.rc rename to dll/win32/oledlg/oledlg_Es.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Fr.rc b/dll/win32/oledlg/oledlg_Fr.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Fr.rc rename to dll/win32/oledlg/oledlg_Fr.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Hu.rc b/dll/win32/oledlg/oledlg_Hu.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Hu.rc rename to dll/win32/oledlg/oledlg_Hu.rc diff --git a/reactos/dll/win32/oledlg/oledlg_It.rc b/dll/win32/oledlg/oledlg_It.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_It.rc rename to dll/win32/oledlg/oledlg_It.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Ja.rc b/dll/win32/oledlg/oledlg_Ja.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Ja.rc rename to dll/win32/oledlg/oledlg_Ja.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Ko.rc b/dll/win32/oledlg/oledlg_Ko.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Ko.rc rename to dll/win32/oledlg/oledlg_Ko.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Nl.rc b/dll/win32/oledlg/oledlg_Nl.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Nl.rc rename to dll/win32/oledlg/oledlg_Nl.rc diff --git a/reactos/dll/win32/oledlg/oledlg_No.rc b/dll/win32/oledlg/oledlg_No.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_No.rc rename to dll/win32/oledlg/oledlg_No.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Pl.rc b/dll/win32/oledlg/oledlg_Pl.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Pl.rc rename to dll/win32/oledlg/oledlg_Pl.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Pt.rc b/dll/win32/oledlg/oledlg_Pt.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Pt.rc rename to dll/win32/oledlg/oledlg_Pt.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Ru.rc b/dll/win32/oledlg/oledlg_Ru.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Ru.rc rename to dll/win32/oledlg/oledlg_Ru.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Si.rc b/dll/win32/oledlg/oledlg_Si.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Si.rc rename to dll/win32/oledlg/oledlg_Si.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Sv.rc b/dll/win32/oledlg/oledlg_Sv.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Sv.rc rename to dll/win32/oledlg/oledlg_Sv.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Tr.rc b/dll/win32/oledlg/oledlg_Tr.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Tr.rc rename to dll/win32/oledlg/oledlg_Tr.rc diff --git a/reactos/dll/win32/oledlg/oledlg_Uk.rc b/dll/win32/oledlg/oledlg_Uk.rc similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_Uk.rc rename to dll/win32/oledlg/oledlg_Uk.rc diff --git a/reactos/dll/win32/oledlg/oledlg_main.c b/dll/win32/oledlg/oledlg_main.c similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_main.c rename to dll/win32/oledlg/oledlg_main.c diff --git a/reactos/dll/win32/oledlg/oledlg_private.h b/dll/win32/oledlg/oledlg_private.h similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_private.h rename to dll/win32/oledlg/oledlg_private.h diff --git a/reactos/dll/win32/oledlg/oledlg_ros.diff b/dll/win32/oledlg/oledlg_ros.diff similarity index 100% rename from reactos/dll/win32/oledlg/oledlg_ros.diff rename to dll/win32/oledlg/oledlg_ros.diff diff --git a/reactos/dll/win32/oledlg/pastespl.c b/dll/win32/oledlg/pastespl.c similarity index 100% rename from reactos/dll/win32/oledlg/pastespl.c rename to dll/win32/oledlg/pastespl.c diff --git a/reactos/dll/win32/oledlg/resource.h b/dll/win32/oledlg/resource.h similarity index 100% rename from reactos/dll/win32/oledlg/resource.h rename to dll/win32/oledlg/resource.h diff --git a/reactos/dll/win32/oledlg/rsrc.rc b/dll/win32/oledlg/rsrc.rc similarity index 100% rename from reactos/dll/win32/oledlg/rsrc.rc rename to dll/win32/oledlg/rsrc.rc diff --git a/reactos/dll/win32/olepro32/README b/dll/win32/olepro32/README similarity index 100% rename from reactos/dll/win32/olepro32/README rename to dll/win32/olepro32/README diff --git a/reactos/dll/win32/olepro32/olepro32.rbuild b/dll/win32/olepro32/olepro32.rbuild similarity index 100% rename from reactos/dll/win32/olepro32/olepro32.rbuild rename to dll/win32/olepro32/olepro32.rbuild diff --git a/reactos/dll/win32/olepro32/olepro32.spec b/dll/win32/olepro32/olepro32.spec similarity index 100% rename from reactos/dll/win32/olepro32/olepro32.spec rename to dll/win32/olepro32/olepro32.spec diff --git a/reactos/dll/win32/olepro32/olepro32stubs.c b/dll/win32/olepro32/olepro32stubs.c similarity index 100% rename from reactos/dll/win32/olepro32/olepro32stubs.c rename to dll/win32/olepro32/olepro32stubs.c diff --git a/reactos/dll/win32/olepro32/version.rc b/dll/win32/olepro32/version.rc similarity index 100% rename from reactos/dll/win32/olepro32/version.rc rename to dll/win32/olepro32/version.rc diff --git a/reactos/dll/win32/opengl32/gl.c b/dll/win32/opengl32/gl.c similarity index 100% rename from reactos/dll/win32/opengl32/gl.c rename to dll/win32/opengl32/gl.c diff --git a/reactos/dll/win32/opengl32/glfuncs.h b/dll/win32/opengl32/glfuncs.h similarity index 100% rename from reactos/dll/win32/opengl32/glfuncs.h rename to dll/win32/opengl32/glfuncs.h diff --git a/reactos/dll/win32/opengl32/icdlist.h b/dll/win32/opengl32/icdlist.h similarity index 100% rename from reactos/dll/win32/opengl32/icdlist.h rename to dll/win32/opengl32/icdlist.h diff --git a/reactos/dll/win32/opengl32/icdtable.h b/dll/win32/opengl32/icdtable.h similarity index 100% rename from reactos/dll/win32/opengl32/icdtable.h rename to dll/win32/opengl32/icdtable.h diff --git a/reactos/dll/win32/opengl32/opengl32.c b/dll/win32/opengl32/opengl32.c similarity index 100% rename from reactos/dll/win32/opengl32/opengl32.c rename to dll/win32/opengl32/opengl32.c diff --git a/reactos/dll/win32/opengl32/opengl32.def b/dll/win32/opengl32/opengl32.def similarity index 100% rename from reactos/dll/win32/opengl32/opengl32.def rename to dll/win32/opengl32/opengl32.def diff --git a/reactos/dll/win32/opengl32/opengl32.dsp b/dll/win32/opengl32/opengl32.dsp similarity index 100% rename from reactos/dll/win32/opengl32/opengl32.dsp rename to dll/win32/opengl32/opengl32.dsp diff --git a/reactos/dll/win32/opengl32/opengl32.dsw b/dll/win32/opengl32/opengl32.dsw similarity index 100% rename from reactos/dll/win32/opengl32/opengl32.dsw rename to dll/win32/opengl32/opengl32.dsw diff --git a/reactos/dll/win32/opengl32/opengl32.h b/dll/win32/opengl32/opengl32.h similarity index 100% rename from reactos/dll/win32/opengl32/opengl32.h rename to dll/win32/opengl32/opengl32.h diff --git a/reactos/dll/win32/opengl32/opengl32.rbuild b/dll/win32/opengl32/opengl32.rbuild similarity index 100% rename from reactos/dll/win32/opengl32/opengl32.rbuild rename to dll/win32/opengl32/opengl32.rbuild diff --git a/reactos/dll/win32/opengl32/wgl.c b/dll/win32/opengl32/wgl.c similarity index 100% rename from reactos/dll/win32/opengl32/wgl.c rename to dll/win32/opengl32/wgl.c diff --git a/reactos/dll/win32/packet/Packet32.c b/dll/win32/packet/Packet32.c similarity index 100% rename from reactos/dll/win32/packet/Packet32.c rename to dll/win32/packet/Packet32.c diff --git a/reactos/dll/win32/packet/include/packet32.h b/dll/win32/packet/include/packet32.h similarity index 100% rename from reactos/dll/win32/packet/include/packet32.h rename to dll/win32/packet/include/packet32.h diff --git a/reactos/dll/win32/packet/packet.def b/dll/win32/packet/packet.def similarity index 100% rename from reactos/dll/win32/packet/packet.def rename to dll/win32/packet/packet.def diff --git a/reactos/dll/win32/packet/packet.rc b/dll/win32/packet/packet.rc similarity index 100% rename from reactos/dll/win32/packet/packet.rc rename to dll/win32/packet/packet.rc diff --git a/reactos/dll/win32/packet/resource.h b/dll/win32/packet/resource.h similarity index 100% rename from reactos/dll/win32/packet/resource.h rename to dll/win32/packet/resource.h diff --git a/reactos/dll/win32/packet/trace.c b/dll/win32/packet/trace.c similarity index 100% rename from reactos/dll/win32/packet/trace.c rename to dll/win32/packet/trace.c diff --git a/reactos/dll/win32/packet/trace.h b/dll/win32/packet/trace.h similarity index 100% rename from reactos/dll/win32/packet/trace.h rename to dll/win32/packet/trace.h diff --git a/reactos/dll/win32/pdh/pdh.rbuild b/dll/win32/pdh/pdh.rbuild similarity index 100% rename from reactos/dll/win32/pdh/pdh.rbuild rename to dll/win32/pdh/pdh.rbuild diff --git a/reactos/dll/win32/pdh/pdh.spec b/dll/win32/pdh/pdh.spec similarity index 100% rename from reactos/dll/win32/pdh/pdh.spec rename to dll/win32/pdh/pdh.spec diff --git a/reactos/dll/win32/pdh/pdh_main.c b/dll/win32/pdh/pdh_main.c similarity index 100% rename from reactos/dll/win32/pdh/pdh_main.c rename to dll/win32/pdh/pdh_main.c diff --git a/reactos/dll/win32/powrprof/powrprof.c b/dll/win32/powrprof/powrprof.c similarity index 100% rename from reactos/dll/win32/powrprof/powrprof.c rename to dll/win32/powrprof/powrprof.c diff --git a/reactos/dll/win32/powrprof/powrprof.rbuild b/dll/win32/powrprof/powrprof.rbuild similarity index 100% rename from reactos/dll/win32/powrprof/powrprof.rbuild rename to dll/win32/powrprof/powrprof.rbuild diff --git a/reactos/dll/win32/powrprof/powrprof.rc b/dll/win32/powrprof/powrprof.rc similarity index 100% rename from reactos/dll/win32/powrprof/powrprof.rc rename to dll/win32/powrprof/powrprof.rc diff --git a/reactos/dll/win32/powrprof/powrprof.spec b/dll/win32/powrprof/powrprof.spec similarity index 100% rename from reactos/dll/win32/powrprof/powrprof.spec rename to dll/win32/powrprof/powrprof.spec diff --git a/reactos/dll/win32/printui/printui.c b/dll/win32/printui/printui.c similarity index 100% rename from reactos/dll/win32/printui/printui.c rename to dll/win32/printui/printui.c diff --git a/reactos/dll/win32/printui/printui.rbuild b/dll/win32/printui/printui.rbuild similarity index 100% rename from reactos/dll/win32/printui/printui.rbuild rename to dll/win32/printui/printui.rbuild diff --git a/reactos/dll/win32/printui/printui.rc b/dll/win32/printui/printui.rc similarity index 100% rename from reactos/dll/win32/printui/printui.rc rename to dll/win32/printui/printui.rc diff --git a/reactos/dll/win32/printui/printui.spec b/dll/win32/printui/printui.spec similarity index 100% rename from reactos/dll/win32/printui/printui.spec rename to dll/win32/printui/printui.spec diff --git a/reactos/dll/win32/printui/printui_private.h b/dll/win32/printui/printui_private.h similarity index 100% rename from reactos/dll/win32/printui/printui_private.h rename to dll/win32/printui/printui_private.h diff --git a/reactos/dll/win32/psapi/internal.h b/dll/win32/psapi/internal.h similarity index 100% rename from reactos/dll/win32/psapi/internal.h rename to dll/win32/psapi/internal.h diff --git a/reactos/dll/win32/psapi/malloc.c b/dll/win32/psapi/malloc.c similarity index 100% rename from reactos/dll/win32/psapi/malloc.c rename to dll/win32/psapi/malloc.c diff --git a/reactos/dll/win32/psapi/precomp.h b/dll/win32/psapi/precomp.h similarity index 100% rename from reactos/dll/win32/psapi/precomp.h rename to dll/win32/psapi/precomp.h diff --git a/reactos/dll/win32/psapi/psapi.c b/dll/win32/psapi/psapi.c similarity index 100% rename from reactos/dll/win32/psapi/psapi.c rename to dll/win32/psapi/psapi.c diff --git a/reactos/dll/win32/psapi/psapi.def b/dll/win32/psapi/psapi.def similarity index 100% rename from reactos/dll/win32/psapi/psapi.def rename to dll/win32/psapi/psapi.def diff --git a/reactos/dll/win32/psapi/psapi.rbuild b/dll/win32/psapi/psapi.rbuild similarity index 100% rename from reactos/dll/win32/psapi/psapi.rbuild rename to dll/win32/psapi/psapi.rbuild diff --git a/reactos/dll/win32/psapi/psapi.rc b/dll/win32/psapi/psapi.rc similarity index 100% rename from reactos/dll/win32/psapi/psapi.rc rename to dll/win32/psapi/psapi.rc diff --git a/reactos/dll/win32/pstorec/pstorec.c b/dll/win32/pstorec/pstorec.c similarity index 100% rename from reactos/dll/win32/pstorec/pstorec.c rename to dll/win32/pstorec/pstorec.c diff --git a/reactos/dll/win32/pstorec/pstorec.rbuild b/dll/win32/pstorec/pstorec.rbuild similarity index 100% rename from reactos/dll/win32/pstorec/pstorec.rbuild rename to dll/win32/pstorec/pstorec.rbuild diff --git a/reactos/dll/win32/pstorec/pstorec.spec b/dll/win32/pstorec/pstorec.spec similarity index 100% rename from reactos/dll/win32/pstorec/pstorec.spec rename to dll/win32/pstorec/pstorec.spec diff --git a/reactos/dll/win32/pstorec/pstorec_ros.diff b/dll/win32/pstorec/pstorec_ros.diff similarity index 100% rename from reactos/dll/win32/pstorec/pstorec_ros.diff rename to dll/win32/pstorec/pstorec_ros.diff diff --git a/reactos/dll/win32/rasapi32/rasapi.c b/dll/win32/rasapi32/rasapi.c similarity index 100% rename from reactos/dll/win32/rasapi32/rasapi.c rename to dll/win32/rasapi32/rasapi.c diff --git a/reactos/dll/win32/rasapi32/rasapi16.spec b/dll/win32/rasapi32/rasapi16.spec similarity index 100% rename from reactos/dll/win32/rasapi32/rasapi16.spec rename to dll/win32/rasapi32/rasapi16.spec diff --git a/reactos/dll/win32/rasapi32/rasapi32.rbuild b/dll/win32/rasapi32/rasapi32.rbuild similarity index 100% rename from reactos/dll/win32/rasapi32/rasapi32.rbuild rename to dll/win32/rasapi32/rasapi32.rbuild diff --git a/reactos/dll/win32/rasapi32/rasapi32.spec b/dll/win32/rasapi32/rasapi32.spec similarity index 100% rename from reactos/dll/win32/rasapi32/rasapi32.spec rename to dll/win32/rasapi32/rasapi32.spec diff --git a/reactos/dll/win32/rasdlg/lang/de-DE.rc b/dll/win32/rasdlg/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/rasdlg/lang/de-DE.rc rename to dll/win32/rasdlg/lang/de-DE.rc diff --git a/reactos/dll/win32/rasdlg/lang/en-US.rc b/dll/win32/rasdlg/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/rasdlg/lang/en-US.rc rename to dll/win32/rasdlg/lang/en-US.rc diff --git a/reactos/dll/win32/rasdlg/lang/no-NO.rc b/dll/win32/rasdlg/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/rasdlg/lang/no-NO.rc rename to dll/win32/rasdlg/lang/no-NO.rc diff --git a/reactos/dll/win32/rasdlg/lang/pl-PL.rc b/dll/win32/rasdlg/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/rasdlg/lang/pl-PL.rc rename to dll/win32/rasdlg/lang/pl-PL.rc diff --git a/reactos/dll/win32/rasdlg/lang/ru-RU.rc b/dll/win32/rasdlg/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/rasdlg/lang/ru-RU.rc rename to dll/win32/rasdlg/lang/ru-RU.rc diff --git a/reactos/dll/win32/rasdlg/lang/uk-UA.rc b/dll/win32/rasdlg/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/rasdlg/lang/uk-UA.rc rename to dll/win32/rasdlg/lang/uk-UA.rc diff --git a/reactos/dll/win32/rasdlg/rasdlg.c b/dll/win32/rasdlg/rasdlg.c similarity index 100% rename from reactos/dll/win32/rasdlg/rasdlg.c rename to dll/win32/rasdlg/rasdlg.c diff --git a/reactos/dll/win32/rasdlg/rasdlg.rbuild b/dll/win32/rasdlg/rasdlg.rbuild similarity index 100% rename from reactos/dll/win32/rasdlg/rasdlg.rbuild rename to dll/win32/rasdlg/rasdlg.rbuild diff --git a/reactos/dll/win32/rasdlg/rasdlg.rc b/dll/win32/rasdlg/rasdlg.rc similarity index 100% rename from reactos/dll/win32/rasdlg/rasdlg.rc rename to dll/win32/rasdlg/rasdlg.rc diff --git a/reactos/dll/win32/rasdlg/rasdlg.spec b/dll/win32/rasdlg/rasdlg.spec similarity index 100% rename from reactos/dll/win32/rasdlg/rasdlg.spec rename to dll/win32/rasdlg/rasdlg.spec diff --git a/reactos/dll/win32/rasdlg/res/bitmaps/100.bmp b/dll/win32/rasdlg/res/bitmaps/100.bmp similarity index 100% rename from reactos/dll/win32/rasdlg/res/bitmaps/100.bmp rename to dll/win32/rasdlg/res/bitmaps/100.bmp diff --git a/reactos/dll/win32/rasdlg/res/bitmaps/101.bmp b/dll/win32/rasdlg/res/bitmaps/101.bmp similarity index 100% rename from reactos/dll/win32/rasdlg/res/bitmaps/101.bmp rename to dll/win32/rasdlg/res/bitmaps/101.bmp diff --git a/reactos/dll/win32/rasdlg/res/bitmaps/102.bmp b/dll/win32/rasdlg/res/bitmaps/102.bmp similarity index 100% rename from reactos/dll/win32/rasdlg/res/bitmaps/102.bmp rename to dll/win32/rasdlg/res/bitmaps/102.bmp diff --git a/reactos/dll/win32/rasdlg/res/bitmaps/1678.bmp b/dll/win32/rasdlg/res/bitmaps/1678.bmp similarity index 100% rename from reactos/dll/win32/rasdlg/res/bitmaps/1678.bmp rename to dll/win32/rasdlg/res/bitmaps/1678.bmp diff --git a/reactos/dll/win32/rasdlg/res/icons/134.ico b/dll/win32/rasdlg/res/icons/134.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/134.ico rename to dll/win32/rasdlg/res/icons/134.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/135.ico b/dll/win32/rasdlg/res/icons/135.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/135.ico rename to dll/win32/rasdlg/res/icons/135.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/144.ico b/dll/win32/rasdlg/res/icons/144.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/144.ico rename to dll/win32/rasdlg/res/icons/144.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/145.ico b/dll/win32/rasdlg/res/icons/145.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/145.ico rename to dll/win32/rasdlg/res/icons/145.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/15102.ico b/dll/win32/rasdlg/res/icons/15102.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/15102.ico rename to dll/win32/rasdlg/res/icons/15102.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/50.ico b/dll/win32/rasdlg/res/icons/50.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/50.ico rename to dll/win32/rasdlg/res/icons/50.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/51.ico b/dll/win32/rasdlg/res/icons/51.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/51.ico rename to dll/win32/rasdlg/res/icons/51.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/52.ico b/dll/win32/rasdlg/res/icons/52.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/52.ico rename to dll/win32/rasdlg/res/icons/52.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/53.ico b/dll/win32/rasdlg/res/icons/53.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/53.ico rename to dll/win32/rasdlg/res/icons/53.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/54.ico b/dll/win32/rasdlg/res/icons/54.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/54.ico rename to dll/win32/rasdlg/res/icons/54.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/55.ico b/dll/win32/rasdlg/res/icons/55.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/55.ico rename to dll/win32/rasdlg/res/icons/55.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/56.ico b/dll/win32/rasdlg/res/icons/56.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/56.ico rename to dll/win32/rasdlg/res/icons/56.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/562.ico b/dll/win32/rasdlg/res/icons/562.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/562.ico rename to dll/win32/rasdlg/res/icons/562.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/563.ico b/dll/win32/rasdlg/res/icons/563.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/563.ico rename to dll/win32/rasdlg/res/icons/563.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/57.ico b/dll/win32/rasdlg/res/icons/57.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/57.ico rename to dll/win32/rasdlg/res/icons/57.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/58.ico b/dll/win32/rasdlg/res/icons/58.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/58.ico rename to dll/win32/rasdlg/res/icons/58.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/59.ico b/dll/win32/rasdlg/res/icons/59.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/59.ico rename to dll/win32/rasdlg/res/icons/59.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/60.ico b/dll/win32/rasdlg/res/icons/60.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/60.ico rename to dll/win32/rasdlg/res/icons/60.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/61.ico b/dll/win32/rasdlg/res/icons/61.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/61.ico rename to dll/win32/rasdlg/res/icons/61.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/62.ico b/dll/win32/rasdlg/res/icons/62.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/62.ico rename to dll/win32/rasdlg/res/icons/62.ico diff --git a/reactos/dll/win32/rasdlg/res/icons/63.ico b/dll/win32/rasdlg/res/icons/63.ico similarity index 100% rename from reactos/dll/win32/rasdlg/res/icons/63.ico rename to dll/win32/rasdlg/res/icons/63.ico diff --git a/reactos/dll/win32/rasdlg/resource.h b/dll/win32/rasdlg/resource.h similarity index 100% rename from reactos/dll/win32/rasdlg/resource.h rename to dll/win32/rasdlg/resource.h diff --git a/reactos/dll/win32/rasman/rasman.c b/dll/win32/rasman/rasman.c similarity index 100% rename from reactos/dll/win32/rasman/rasman.c rename to dll/win32/rasman/rasman.c diff --git a/reactos/dll/win32/rasman/rasman.rbuild b/dll/win32/rasman/rasman.rbuild similarity index 100% rename from reactos/dll/win32/rasman/rasman.rbuild rename to dll/win32/rasman/rasman.rbuild diff --git a/reactos/dll/win32/rasman/rasman.rc b/dll/win32/rasman/rasman.rc similarity index 100% rename from reactos/dll/win32/rasman/rasman.rc rename to dll/win32/rasman/rasman.rc diff --git a/reactos/dll/win32/rasman/rasman.spec b/dll/win32/rasman/rasman.spec similarity index 100% rename from reactos/dll/win32/rasman/rasman.spec rename to dll/win32/rasman/rasman.spec diff --git a/reactos/dll/win32/riched20/caret.c b/dll/win32/riched20/caret.c similarity index 100% rename from reactos/dll/win32/riched20/caret.c rename to dll/win32/riched20/caret.c diff --git a/reactos/dll/win32/riched20/clipboard.c b/dll/win32/riched20/clipboard.c similarity index 100% rename from reactos/dll/win32/riched20/clipboard.c rename to dll/win32/riched20/clipboard.c diff --git a/reactos/dll/win32/riched20/context.c b/dll/win32/riched20/context.c similarity index 100% rename from reactos/dll/win32/riched20/context.c rename to dll/win32/riched20/context.c diff --git a/reactos/dll/win32/riched20/editor.c b/dll/win32/riched20/editor.c similarity index 100% rename from reactos/dll/win32/riched20/editor.c rename to dll/win32/riched20/editor.c diff --git a/reactos/dll/win32/riched20/editor.h b/dll/win32/riched20/editor.h similarity index 100% rename from reactos/dll/win32/riched20/editor.h rename to dll/win32/riched20/editor.h diff --git a/reactos/dll/win32/riched20/editstr.h b/dll/win32/riched20/editstr.h similarity index 100% rename from reactos/dll/win32/riched20/editstr.h rename to dll/win32/riched20/editstr.h diff --git a/reactos/dll/win32/riched20/list.c b/dll/win32/riched20/list.c similarity index 100% rename from reactos/dll/win32/riched20/list.c rename to dll/win32/riched20/list.c diff --git a/reactos/dll/win32/riched20/ocr_reverse.cur b/dll/win32/riched20/ocr_reverse.cur similarity index 100% rename from reactos/dll/win32/riched20/ocr_reverse.cur rename to dll/win32/riched20/ocr_reverse.cur diff --git a/reactos/dll/win32/riched20/paint.c b/dll/win32/riched20/paint.c similarity index 100% rename from reactos/dll/win32/riched20/paint.c rename to dll/win32/riched20/paint.c diff --git a/reactos/dll/win32/riched20/para.c b/dll/win32/riched20/para.c similarity index 100% rename from reactos/dll/win32/riched20/para.c rename to dll/win32/riched20/para.c diff --git a/reactos/dll/win32/riched20/reader.c b/dll/win32/riched20/reader.c similarity index 100% rename from reactos/dll/win32/riched20/reader.c rename to dll/win32/riched20/reader.c diff --git a/reactos/dll/win32/riched20/res.h b/dll/win32/riched20/res.h similarity index 100% rename from reactos/dll/win32/riched20/res.h rename to dll/win32/riched20/res.h diff --git a/reactos/dll/win32/riched20/riched20.rbuild b/dll/win32/riched20/riched20.rbuild similarity index 100% rename from reactos/dll/win32/riched20/riched20.rbuild rename to dll/win32/riched20/riched20.rbuild diff --git a/reactos/dll/win32/riched20/riched20.spec b/dll/win32/riched20/riched20.spec similarity index 100% rename from reactos/dll/win32/riched20/riched20.spec rename to dll/win32/riched20/riched20.spec diff --git a/reactos/dll/win32/riched20/richole.c b/dll/win32/riched20/richole.c similarity index 100% rename from reactos/dll/win32/riched20/richole.c rename to dll/win32/riched20/richole.c diff --git a/reactos/dll/win32/riched20/row.c b/dll/win32/riched20/row.c similarity index 100% rename from reactos/dll/win32/riched20/row.c rename to dll/win32/riched20/row.c diff --git a/reactos/dll/win32/riched20/rtf.h b/dll/win32/riched20/rtf.h similarity index 100% rename from reactos/dll/win32/riched20/rtf.h rename to dll/win32/riched20/rtf.h diff --git a/reactos/dll/win32/riched20/run.c b/dll/win32/riched20/run.c similarity index 100% rename from reactos/dll/win32/riched20/run.c rename to dll/win32/riched20/run.c diff --git a/reactos/dll/win32/riched20/string.c b/dll/win32/riched20/string.c similarity index 100% rename from reactos/dll/win32/riched20/string.c rename to dll/win32/riched20/string.c diff --git a/reactos/dll/win32/riched20/style.c b/dll/win32/riched20/style.c similarity index 100% rename from reactos/dll/win32/riched20/style.c rename to dll/win32/riched20/style.c diff --git a/reactos/dll/win32/riched20/table.c b/dll/win32/riched20/table.c similarity index 100% rename from reactos/dll/win32/riched20/table.c rename to dll/win32/riched20/table.c diff --git a/reactos/dll/win32/riched20/txtsrv.c b/dll/win32/riched20/txtsrv.c similarity index 100% rename from reactos/dll/win32/riched20/txtsrv.c rename to dll/win32/riched20/txtsrv.c diff --git a/reactos/dll/win32/riched20/undo.c b/dll/win32/riched20/undo.c similarity index 100% rename from reactos/dll/win32/riched20/undo.c rename to dll/win32/riched20/undo.c diff --git a/reactos/dll/win32/riched20/version.rc b/dll/win32/riched20/version.rc similarity index 100% rename from reactos/dll/win32/riched20/version.rc rename to dll/win32/riched20/version.rc diff --git a/reactos/dll/win32/riched20/wrap.c b/dll/win32/riched20/wrap.c similarity index 100% rename from reactos/dll/win32/riched20/wrap.c rename to dll/win32/riched20/wrap.c diff --git a/reactos/dll/win32/riched20/writer.c b/dll/win32/riched20/writer.c similarity index 100% rename from reactos/dll/win32/riched20/writer.c rename to dll/win32/riched20/writer.c diff --git a/reactos/dll/win32/riched32/riched32.rbuild b/dll/win32/riched32/riched32.rbuild similarity index 100% rename from reactos/dll/win32/riched32/riched32.rbuild rename to dll/win32/riched32/riched32.rbuild diff --git a/reactos/dll/win32/riched32/riched32.spec b/dll/win32/riched32/riched32.spec similarity index 100% rename from reactos/dll/win32/riched32/riched32.spec rename to dll/win32/riched32/riched32.spec diff --git a/reactos/dll/win32/riched32/richedit.c b/dll/win32/riched32/richedit.c similarity index 100% rename from reactos/dll/win32/riched32/richedit.c rename to dll/win32/riched32/richedit.c diff --git a/reactos/dll/win32/riched32/version.rc b/dll/win32/riched32/version.rc similarity index 100% rename from reactos/dll/win32/riched32/version.rc rename to dll/win32/riched32/version.rc diff --git a/reactos/dll/win32/rpcrt4/cproxy.c b/dll/win32/rpcrt4/cproxy.c similarity index 100% rename from reactos/dll/win32/rpcrt4/cproxy.c rename to dll/win32/rpcrt4/cproxy.c diff --git a/reactos/dll/win32/rpcrt4/cpsf.c b/dll/win32/rpcrt4/cpsf.c similarity index 100% rename from reactos/dll/win32/rpcrt4/cpsf.c rename to dll/win32/rpcrt4/cpsf.c diff --git a/reactos/dll/win32/rpcrt4/cpsf.h b/dll/win32/rpcrt4/cpsf.h similarity index 100% rename from reactos/dll/win32/rpcrt4/cpsf.h rename to dll/win32/rpcrt4/cpsf.h diff --git a/reactos/dll/win32/rpcrt4/cstub.c b/dll/win32/rpcrt4/cstub.c similarity index 100% rename from reactos/dll/win32/rpcrt4/cstub.c rename to dll/win32/rpcrt4/cstub.c diff --git a/reactos/dll/win32/rpcrt4/epm_towers.h b/dll/win32/rpcrt4/epm_towers.h similarity index 100% rename from reactos/dll/win32/rpcrt4/epm_towers.h rename to dll/win32/rpcrt4/epm_towers.h diff --git a/reactos/dll/win32/rpcrt4/ncastatus.h b/dll/win32/rpcrt4/ncastatus.h similarity index 100% rename from reactos/dll/win32/rpcrt4/ncastatus.h rename to dll/win32/rpcrt4/ncastatus.h diff --git a/reactos/dll/win32/rpcrt4/ndr_clientserver.c b/dll/win32/rpcrt4/ndr_clientserver.c similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_clientserver.c rename to dll/win32/rpcrt4/ndr_clientserver.c diff --git a/reactos/dll/win32/rpcrt4/ndr_contexthandle.c b/dll/win32/rpcrt4/ndr_contexthandle.c similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_contexthandle.c rename to dll/win32/rpcrt4/ndr_contexthandle.c diff --git a/reactos/dll/win32/rpcrt4/ndr_es.c b/dll/win32/rpcrt4/ndr_es.c similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_es.c rename to dll/win32/rpcrt4/ndr_es.c diff --git a/reactos/dll/win32/rpcrt4/ndr_fullpointer.c b/dll/win32/rpcrt4/ndr_fullpointer.c similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_fullpointer.c rename to dll/win32/rpcrt4/ndr_fullpointer.c diff --git a/reactos/dll/win32/rpcrt4/ndr_marshall.c b/dll/win32/rpcrt4/ndr_marshall.c similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_marshall.c rename to dll/win32/rpcrt4/ndr_marshall.c diff --git a/reactos/dll/win32/rpcrt4/ndr_misc.h b/dll/win32/rpcrt4/ndr_misc.h similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_misc.h rename to dll/win32/rpcrt4/ndr_misc.h diff --git a/reactos/dll/win32/rpcrt4/ndr_ole.c b/dll/win32/rpcrt4/ndr_ole.c similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_ole.c rename to dll/win32/rpcrt4/ndr_ole.c diff --git a/reactos/dll/win32/rpcrt4/ndr_stubless.c b/dll/win32/rpcrt4/ndr_stubless.c similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_stubless.c rename to dll/win32/rpcrt4/ndr_stubless.c diff --git a/reactos/dll/win32/rpcrt4/ndr_stubless.h b/dll/win32/rpcrt4/ndr_stubless.h similarity index 100% rename from reactos/dll/win32/rpcrt4/ndr_stubless.h rename to dll/win32/rpcrt4/ndr_stubless.h diff --git a/reactos/dll/win32/rpcrt4/rpc_assoc.c b/dll/win32/rpcrt4/rpc_assoc.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_assoc.c rename to dll/win32/rpcrt4/rpc_assoc.c diff --git a/reactos/dll/win32/rpcrt4/rpc_assoc.h b/dll/win32/rpcrt4/rpc_assoc.h similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_assoc.h rename to dll/win32/rpcrt4/rpc_assoc.h diff --git a/reactos/dll/win32/rpcrt4/rpc_async.c b/dll/win32/rpcrt4/rpc_async.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_async.c rename to dll/win32/rpcrt4/rpc_async.c diff --git a/reactos/dll/win32/rpcrt4/rpc_binding.c b/dll/win32/rpcrt4/rpc_binding.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_binding.c rename to dll/win32/rpcrt4/rpc_binding.c diff --git a/reactos/dll/win32/rpcrt4/rpc_binding.h b/dll/win32/rpcrt4/rpc_binding.h similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_binding.h rename to dll/win32/rpcrt4/rpc_binding.h diff --git a/reactos/dll/win32/rpcrt4/rpc_defs.h b/dll/win32/rpcrt4/rpc_defs.h similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_defs.h rename to dll/win32/rpcrt4/rpc_defs.h diff --git a/reactos/dll/win32/rpcrt4/rpc_epmap.c b/dll/win32/rpcrt4/rpc_epmap.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_epmap.c rename to dll/win32/rpcrt4/rpc_epmap.c diff --git a/reactos/dll/win32/rpcrt4/rpc_message.c b/dll/win32/rpcrt4/rpc_message.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_message.c rename to dll/win32/rpcrt4/rpc_message.c diff --git a/reactos/dll/win32/rpcrt4/rpc_message.h b/dll/win32/rpcrt4/rpc_message.h similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_message.h rename to dll/win32/rpcrt4/rpc_message.h diff --git a/reactos/dll/win32/rpcrt4/rpc_server.c b/dll/win32/rpcrt4/rpc_server.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_server.c rename to dll/win32/rpcrt4/rpc_server.c diff --git a/reactos/dll/win32/rpcrt4/rpc_server.h b/dll/win32/rpcrt4/rpc_server.h similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_server.h rename to dll/win32/rpcrt4/rpc_server.h diff --git a/reactos/dll/win32/rpcrt4/rpc_transport.c b/dll/win32/rpcrt4/rpc_transport.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpc_transport.c rename to dll/win32/rpcrt4/rpc_transport.c diff --git a/reactos/dll/win32/rpcrt4/rpcrt4.rbuild b/dll/win32/rpcrt4/rpcrt4.rbuild similarity index 100% rename from reactos/dll/win32/rpcrt4/rpcrt4.rbuild rename to dll/win32/rpcrt4/rpcrt4.rbuild diff --git a/reactos/dll/win32/rpcrt4/rpcrt4.rc b/dll/win32/rpcrt4/rpcrt4.rc similarity index 100% rename from reactos/dll/win32/rpcrt4/rpcrt4.rc rename to dll/win32/rpcrt4/rpcrt4.rc diff --git a/reactos/dll/win32/rpcrt4/rpcrt4.spec b/dll/win32/rpcrt4/rpcrt4.spec similarity index 100% rename from reactos/dll/win32/rpcrt4/rpcrt4.spec rename to dll/win32/rpcrt4/rpcrt4.spec diff --git a/reactos/dll/win32/rpcrt4/rpcrt4_main.c b/dll/win32/rpcrt4/rpcrt4_main.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpcrt4_main.c rename to dll/win32/rpcrt4/rpcrt4_main.c diff --git a/reactos/dll/win32/rpcrt4/rpcrt4_ros.diff b/dll/win32/rpcrt4/rpcrt4_ros.diff similarity index 100% rename from reactos/dll/win32/rpcrt4/rpcrt4_ros.diff rename to dll/win32/rpcrt4/rpcrt4_ros.diff diff --git a/reactos/dll/win32/rpcrt4/rpcss_np_client.c b/dll/win32/rpcrt4/rpcss_np_client.c similarity index 100% rename from reactos/dll/win32/rpcrt4/rpcss_np_client.c rename to dll/win32/rpcrt4/rpcss_np_client.c diff --git a/reactos/dll/win32/rpcrt4/rpcss_np_client.h b/dll/win32/rpcrt4/rpcss_np_client.h similarity index 100% rename from reactos/dll/win32/rpcrt4/rpcss_np_client.h rename to dll/win32/rpcrt4/rpcss_np_client.h diff --git a/reactos/dll/win32/rpcrt4/unix_func.c b/dll/win32/rpcrt4/unix_func.c similarity index 100% rename from reactos/dll/win32/rpcrt4/unix_func.c rename to dll/win32/rpcrt4/unix_func.c diff --git a/reactos/dll/win32/rpcrt4/unix_func.h b/dll/win32/rpcrt4/unix_func.h similarity index 100% rename from reactos/dll/win32/rpcrt4/unix_func.h rename to dll/win32/rpcrt4/unix_func.h diff --git a/reactos/dll/win32/rsabase/rsabase.rbuild b/dll/win32/rsabase/rsabase.rbuild similarity index 100% rename from reactos/dll/win32/rsabase/rsabase.rbuild rename to dll/win32/rsabase/rsabase.rbuild diff --git a/reactos/dll/win32/rsabase/rsabase.spec b/dll/win32/rsabase/rsabase.spec similarity index 100% rename from reactos/dll/win32/rsabase/rsabase.spec rename to dll/win32/rsabase/rsabase.spec diff --git a/reactos/dll/win32/rsabase/version.rc b/dll/win32/rsabase/version.rc similarity index 100% rename from reactos/dll/win32/rsabase/version.rc rename to dll/win32/rsabase/version.rc diff --git a/reactos/dll/win32/rsaenh/aes.c b/dll/win32/rsaenh/aes.c similarity index 100% rename from reactos/dll/win32/rsaenh/aes.c rename to dll/win32/rsaenh/aes.c diff --git a/reactos/dll/win32/rsaenh/des.c b/dll/win32/rsaenh/des.c similarity index 100% rename from reactos/dll/win32/rsaenh/des.c rename to dll/win32/rsaenh/des.c diff --git a/reactos/dll/win32/rsaenh/handle.c b/dll/win32/rsaenh/handle.c similarity index 100% rename from reactos/dll/win32/rsaenh/handle.c rename to dll/win32/rsaenh/handle.c diff --git a/reactos/dll/win32/rsaenh/handle.h b/dll/win32/rsaenh/handle.h similarity index 100% rename from reactos/dll/win32/rsaenh/handle.h rename to dll/win32/rsaenh/handle.h diff --git a/reactos/dll/win32/rsaenh/implglue.c b/dll/win32/rsaenh/implglue.c similarity index 100% rename from reactos/dll/win32/rsaenh/implglue.c rename to dll/win32/rsaenh/implglue.c diff --git a/reactos/dll/win32/rsaenh/implglue.h b/dll/win32/rsaenh/implglue.h similarity index 100% rename from reactos/dll/win32/rsaenh/implglue.h rename to dll/win32/rsaenh/implglue.h diff --git a/reactos/dll/win32/rsaenh/md2.c b/dll/win32/rsaenh/md2.c similarity index 100% rename from reactos/dll/win32/rsaenh/md2.c rename to dll/win32/rsaenh/md2.c diff --git a/reactos/dll/win32/rsaenh/mpi.c b/dll/win32/rsaenh/mpi.c similarity index 100% rename from reactos/dll/win32/rsaenh/mpi.c rename to dll/win32/rsaenh/mpi.c diff --git a/reactos/dll/win32/rsaenh/rc2.c b/dll/win32/rsaenh/rc2.c similarity index 100% rename from reactos/dll/win32/rsaenh/rc2.c rename to dll/win32/rsaenh/rc2.c diff --git a/reactos/dll/win32/rsaenh/rc4.c b/dll/win32/rsaenh/rc4.c similarity index 100% rename from reactos/dll/win32/rsaenh/rc4.c rename to dll/win32/rsaenh/rc4.c diff --git a/reactos/dll/win32/rsaenh/rsa.c b/dll/win32/rsaenh/rsa.c similarity index 100% rename from reactos/dll/win32/rsaenh/rsa.c rename to dll/win32/rsaenh/rsa.c diff --git a/reactos/dll/win32/rsaenh/rsaenh.c b/dll/win32/rsaenh/rsaenh.c similarity index 100% rename from reactos/dll/win32/rsaenh/rsaenh.c rename to dll/win32/rsaenh/rsaenh.c diff --git a/reactos/dll/win32/rsaenh/rsaenh.rbuild b/dll/win32/rsaenh/rsaenh.rbuild similarity index 100% rename from reactos/dll/win32/rsaenh/rsaenh.rbuild rename to dll/win32/rsaenh/rsaenh.rbuild diff --git a/reactos/dll/win32/rsaenh/rsaenh.spec b/dll/win32/rsaenh/rsaenh.spec similarity index 100% rename from reactos/dll/win32/rsaenh/rsaenh.spec rename to dll/win32/rsaenh/rsaenh.spec diff --git a/reactos/dll/win32/rsaenh/rsaenh_ros.diff b/dll/win32/rsaenh/rsaenh_ros.diff similarity index 100% rename from reactos/dll/win32/rsaenh/rsaenh_ros.diff rename to dll/win32/rsaenh/rsaenh_ros.diff diff --git a/reactos/dll/win32/rsaenh/tomcrypt.h b/dll/win32/rsaenh/tomcrypt.h similarity index 100% rename from reactos/dll/win32/rsaenh/tomcrypt.h rename to dll/win32/rsaenh/tomcrypt.h diff --git a/reactos/dll/win32/rsaenh/version.rc b/dll/win32/rsaenh/version.rc similarity index 100% rename from reactos/dll/win32/rsaenh/version.rc rename to dll/win32/rsaenh/version.rc diff --git a/reactos/dll/win32/samlib/debug.h b/dll/win32/samlib/debug.h similarity index 100% rename from reactos/dll/win32/samlib/debug.h rename to dll/win32/samlib/debug.h diff --git a/reactos/dll/win32/samlib/dllmain.c b/dll/win32/samlib/dllmain.c similarity index 100% rename from reactos/dll/win32/samlib/dllmain.c rename to dll/win32/samlib/dllmain.c diff --git a/reactos/dll/win32/samlib/samlib.c b/dll/win32/samlib/samlib.c similarity index 100% rename from reactos/dll/win32/samlib/samlib.c rename to dll/win32/samlib/samlib.c diff --git a/reactos/dll/win32/samlib/samlib.def b/dll/win32/samlib/samlib.def similarity index 100% rename from reactos/dll/win32/samlib/samlib.def rename to dll/win32/samlib/samlib.def diff --git a/reactos/dll/win32/samlib/samlib.rbuild b/dll/win32/samlib/samlib.rbuild similarity index 100% rename from reactos/dll/win32/samlib/samlib.rbuild rename to dll/win32/samlib/samlib.rbuild diff --git a/reactos/dll/win32/samlib/samlib.rc b/dll/win32/samlib/samlib.rc similarity index 100% rename from reactos/dll/win32/samlib/samlib.rc rename to dll/win32/samlib/samlib.rc diff --git a/reactos/dll/win32/samsrv/samsrv.c b/dll/win32/samsrv/samsrv.c similarity index 100% rename from reactos/dll/win32/samsrv/samsrv.c rename to dll/win32/samsrv/samsrv.c diff --git a/reactos/dll/win32/samsrv/samsrv.rbuild b/dll/win32/samsrv/samsrv.rbuild similarity index 100% rename from reactos/dll/win32/samsrv/samsrv.rbuild rename to dll/win32/samsrv/samsrv.rbuild diff --git a/reactos/dll/win32/samsrv/samsrv.rc b/dll/win32/samsrv/samsrv.rc similarity index 100% rename from reactos/dll/win32/samsrv/samsrv.rc rename to dll/win32/samsrv/samsrv.rc diff --git a/reactos/dll/win32/samsrv/samsrv.spec b/dll/win32/samsrv/samsrv.spec similarity index 100% rename from reactos/dll/win32/samsrv/samsrv.spec rename to dll/win32/samsrv/samsrv.spec diff --git a/reactos/dll/win32/schannel/lsamode.c b/dll/win32/schannel/lsamode.c similarity index 100% rename from reactos/dll/win32/schannel/lsamode.c rename to dll/win32/schannel/lsamode.c diff --git a/reactos/dll/win32/schannel/schannel.rbuild b/dll/win32/schannel/schannel.rbuild similarity index 100% rename from reactos/dll/win32/schannel/schannel.rbuild rename to dll/win32/schannel/schannel.rbuild diff --git a/reactos/dll/win32/schannel/schannel.spec b/dll/win32/schannel/schannel.spec similarity index 100% rename from reactos/dll/win32/schannel/schannel.spec rename to dll/win32/schannel/schannel.spec diff --git a/reactos/dll/win32/schannel/schannel_main.c b/dll/win32/schannel/schannel_main.c similarity index 100% rename from reactos/dll/win32/schannel/schannel_main.c rename to dll/win32/schannel/schannel_main.c diff --git a/reactos/dll/win32/schannel/usermode.c b/dll/win32/schannel/usermode.c similarity index 100% rename from reactos/dll/win32/schannel/usermode.c rename to dll/win32/schannel/usermode.c diff --git a/reactos/dll/win32/schannel/version.rc b/dll/win32/schannel/version.rc similarity index 100% rename from reactos/dll/win32/schannel/version.rc rename to dll/win32/schannel/version.rc diff --git a/reactos/dll/win32/secur32/dllmain.c b/dll/win32/secur32/dllmain.c similarity index 100% rename from reactos/dll/win32/secur32/dllmain.c rename to dll/win32/secur32/dllmain.c diff --git a/reactos/dll/win32/secur32/lsa.c b/dll/win32/secur32/lsa.c similarity index 100% rename from reactos/dll/win32/secur32/lsa.c rename to dll/win32/secur32/lsa.c diff --git a/reactos/dll/win32/secur32/precomp.h b/dll/win32/secur32/precomp.h similarity index 100% rename from reactos/dll/win32/secur32/precomp.h rename to dll/win32/secur32/precomp.h diff --git a/reactos/dll/win32/secur32/secext.c b/dll/win32/secur32/secext.c similarity index 100% rename from reactos/dll/win32/secur32/secext.c rename to dll/win32/secur32/secext.c diff --git a/reactos/dll/win32/secur32/secur32.def b/dll/win32/secur32/secur32.def similarity index 100% rename from reactos/dll/win32/secur32/secur32.def rename to dll/win32/secur32/secur32.def diff --git a/reactos/dll/win32/secur32/secur32.rbuild b/dll/win32/secur32/secur32.rbuild similarity index 100% rename from reactos/dll/win32/secur32/secur32.rbuild rename to dll/win32/secur32/secur32.rbuild diff --git a/reactos/dll/win32/secur32/secur32.rc b/dll/win32/secur32/secur32.rc similarity index 100% rename from reactos/dll/win32/secur32/secur32.rc rename to dll/win32/secur32/secur32.rc diff --git a/reactos/dll/win32/secur32/sspi.c b/dll/win32/secur32/sspi.c similarity index 100% rename from reactos/dll/win32/secur32/sspi.c rename to dll/win32/secur32/sspi.c diff --git a/reactos/dll/win32/security/security.def b/dll/win32/security/security.def similarity index 100% rename from reactos/dll/win32/security/security.def rename to dll/win32/security/security.def diff --git a/reactos/dll/win32/security/security.rbuild b/dll/win32/security/security.rbuild similarity index 100% rename from reactos/dll/win32/security/security.rbuild rename to dll/win32/security/security.rbuild diff --git a/reactos/dll/win32/security/security.rc b/dll/win32/security/security.rc similarity index 100% rename from reactos/dll/win32/security/security.rc rename to dll/win32/security/security.rc diff --git a/reactos/dll/win32/sensapi/sensapi.c b/dll/win32/sensapi/sensapi.c similarity index 100% rename from reactos/dll/win32/sensapi/sensapi.c rename to dll/win32/sensapi/sensapi.c diff --git a/reactos/dll/win32/sensapi/sensapi.rbuild b/dll/win32/sensapi/sensapi.rbuild similarity index 100% rename from reactos/dll/win32/sensapi/sensapi.rbuild rename to dll/win32/sensapi/sensapi.rbuild diff --git a/reactos/dll/win32/sensapi/sensapi.spec b/dll/win32/sensapi/sensapi.spec similarity index 100% rename from reactos/dll/win32/sensapi/sensapi.spec rename to dll/win32/sensapi/sensapi.spec diff --git a/reactos/dll/win32/serialui/lang/bg-BG.rc b/dll/win32/serialui/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/bg-BG.rc rename to dll/win32/serialui/lang/bg-BG.rc diff --git a/reactos/dll/win32/serialui/lang/cs-CZ.rc b/dll/win32/serialui/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/cs-CZ.rc rename to dll/win32/serialui/lang/cs-CZ.rc diff --git a/reactos/dll/win32/serialui/lang/de-DE.rc b/dll/win32/serialui/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/de-DE.rc rename to dll/win32/serialui/lang/de-DE.rc diff --git a/reactos/dll/win32/serialui/lang/en-US.rc b/dll/win32/serialui/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/en-US.rc rename to dll/win32/serialui/lang/en-US.rc diff --git a/reactos/dll/win32/serialui/lang/es-ES.rc b/dll/win32/serialui/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/es-ES.rc rename to dll/win32/serialui/lang/es-ES.rc diff --git a/reactos/dll/win32/serialui/lang/fr-FR.rc b/dll/win32/serialui/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/fr-FR.rc rename to dll/win32/serialui/lang/fr-FR.rc diff --git a/reactos/dll/win32/serialui/lang/id-ID.rc b/dll/win32/serialui/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/id-ID.rc rename to dll/win32/serialui/lang/id-ID.rc diff --git a/reactos/dll/win32/serialui/lang/it-IT.rc b/dll/win32/serialui/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/it-IT.rc rename to dll/win32/serialui/lang/it-IT.rc diff --git a/reactos/dll/win32/serialui/lang/no-NO.rc b/dll/win32/serialui/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/no-NO.rc rename to dll/win32/serialui/lang/no-NO.rc diff --git a/reactos/dll/win32/serialui/lang/pl-PL.rc b/dll/win32/serialui/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/pl-PL.rc rename to dll/win32/serialui/lang/pl-PL.rc diff --git a/reactos/dll/win32/serialui/lang/ru-RU.rc b/dll/win32/serialui/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/ru-RU.rc rename to dll/win32/serialui/lang/ru-RU.rc diff --git a/reactos/dll/win32/serialui/lang/uk-UA.rc b/dll/win32/serialui/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/serialui/lang/uk-UA.rc rename to dll/win32/serialui/lang/uk-UA.rc diff --git a/reactos/dll/win32/serialui/resource.h b/dll/win32/serialui/resource.h similarity index 100% rename from reactos/dll/win32/serialui/resource.h rename to dll/win32/serialui/resource.h diff --git a/reactos/dll/win32/serialui/serialui.c b/dll/win32/serialui/serialui.c similarity index 100% rename from reactos/dll/win32/serialui/serialui.c rename to dll/win32/serialui/serialui.c diff --git a/reactos/dll/win32/serialui/serialui.h b/dll/win32/serialui/serialui.h similarity index 100% rename from reactos/dll/win32/serialui/serialui.h rename to dll/win32/serialui/serialui.h diff --git a/reactos/dll/win32/serialui/serialui.rbuild b/dll/win32/serialui/serialui.rbuild similarity index 100% rename from reactos/dll/win32/serialui/serialui.rbuild rename to dll/win32/serialui/serialui.rbuild diff --git a/reactos/dll/win32/serialui/serialui.rc b/dll/win32/serialui/serialui.rc similarity index 100% rename from reactos/dll/win32/serialui/serialui.rc rename to dll/win32/serialui/serialui.rc diff --git a/reactos/dll/win32/serialui/serialui.spec b/dll/win32/serialui/serialui.spec similarity index 100% rename from reactos/dll/win32/serialui/serialui.spec rename to dll/win32/serialui/serialui.spec diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c similarity index 100% rename from reactos/dll/win32/setupapi/cfgmgr.c rename to dll/win32/setupapi/cfgmgr.c diff --git a/reactos/dll/win32/setupapi/devclass.c b/dll/win32/setupapi/devclass.c similarity index 100% rename from reactos/dll/win32/setupapi/devclass.c rename to dll/win32/setupapi/devclass.c diff --git a/reactos/dll/win32/setupapi/devinst.c b/dll/win32/setupapi/devinst.c similarity index 100% rename from reactos/dll/win32/setupapi/devinst.c rename to dll/win32/setupapi/devinst.c diff --git a/reactos/dll/win32/setupapi/dirid.c b/dll/win32/setupapi/dirid.c similarity index 100% rename from reactos/dll/win32/setupapi/dirid.c rename to dll/win32/setupapi/dirid.c diff --git a/reactos/dll/win32/setupapi/diskspace.c b/dll/win32/setupapi/diskspace.c similarity index 100% rename from reactos/dll/win32/setupapi/diskspace.c rename to dll/win32/setupapi/diskspace.c diff --git a/reactos/dll/win32/setupapi/driver.c b/dll/win32/setupapi/driver.c similarity index 100% rename from reactos/dll/win32/setupapi/driver.c rename to dll/win32/setupapi/driver.c diff --git a/reactos/dll/win32/setupapi/install.c b/dll/win32/setupapi/install.c similarity index 100% rename from reactos/dll/win32/setupapi/install.c rename to dll/win32/setupapi/install.c diff --git a/reactos/dll/win32/setupapi/interface.c b/dll/win32/setupapi/interface.c similarity index 100% rename from reactos/dll/win32/setupapi/interface.c rename to dll/win32/setupapi/interface.c diff --git a/reactos/dll/win32/setupapi/lang/bg-BG.rc b/dll/win32/setupapi/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/bg-BG.rc rename to dll/win32/setupapi/lang/bg-BG.rc diff --git a/reactos/dll/win32/setupapi/lang/cs-CZ.rc b/dll/win32/setupapi/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/cs-CZ.rc rename to dll/win32/setupapi/lang/cs-CZ.rc diff --git a/reactos/dll/win32/setupapi/lang/da-DK.rc b/dll/win32/setupapi/lang/da-DK.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/da-DK.rc rename to dll/win32/setupapi/lang/da-DK.rc diff --git a/reactos/dll/win32/setupapi/lang/de-DE.rc b/dll/win32/setupapi/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/de-DE.rc rename to dll/win32/setupapi/lang/de-DE.rc diff --git a/reactos/dll/win32/setupapi/lang/en-US.rc b/dll/win32/setupapi/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/en-US.rc rename to dll/win32/setupapi/lang/en-US.rc diff --git a/reactos/dll/win32/setupapi/lang/es-ES.rc b/dll/win32/setupapi/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/es-ES.rc rename to dll/win32/setupapi/lang/es-ES.rc diff --git a/reactos/dll/win32/setupapi/lang/fi-FI.rc b/dll/win32/setupapi/lang/fi-FI.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/fi-FI.rc rename to dll/win32/setupapi/lang/fi-FI.rc diff --git a/reactos/dll/win32/setupapi/lang/fr-FR.rc b/dll/win32/setupapi/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/fr-FR.rc rename to dll/win32/setupapi/lang/fr-FR.rc diff --git a/reactos/dll/win32/setupapi/lang/hu-HU.rc b/dll/win32/setupapi/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/hu-HU.rc rename to dll/win32/setupapi/lang/hu-HU.rc diff --git a/reactos/dll/win32/setupapi/lang/id-ID.rc b/dll/win32/setupapi/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/id-ID.rc rename to dll/win32/setupapi/lang/id-ID.rc diff --git a/reactos/dll/win32/setupapi/lang/it-IT.rc b/dll/win32/setupapi/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/it-IT.rc rename to dll/win32/setupapi/lang/it-IT.rc diff --git a/reactos/dll/win32/setupapi/lang/ja-JP.rc b/dll/win32/setupapi/lang/ja-JP.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/ja-JP.rc rename to dll/win32/setupapi/lang/ja-JP.rc diff --git a/reactos/dll/win32/setupapi/lang/ko-KR.rc b/dll/win32/setupapi/lang/ko-KR.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/ko-KR.rc rename to dll/win32/setupapi/lang/ko-KR.rc diff --git a/reactos/dll/win32/setupapi/lang/nl-NL.rc b/dll/win32/setupapi/lang/nl-NL.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/nl-NL.rc rename to dll/win32/setupapi/lang/nl-NL.rc diff --git a/reactos/dll/win32/setupapi/lang/no-NO.rc b/dll/win32/setupapi/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/no-NO.rc rename to dll/win32/setupapi/lang/no-NO.rc diff --git a/reactos/dll/win32/setupapi/lang/pl-PL.rc b/dll/win32/setupapi/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/pl-PL.rc rename to dll/win32/setupapi/lang/pl-PL.rc diff --git a/reactos/dll/win32/setupapi/lang/pt-BR.rc b/dll/win32/setupapi/lang/pt-BR.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/pt-BR.rc rename to dll/win32/setupapi/lang/pt-BR.rc diff --git a/reactos/dll/win32/setupapi/lang/ru-RU.rc b/dll/win32/setupapi/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/ru-RU.rc rename to dll/win32/setupapi/lang/ru-RU.rc diff --git a/reactos/dll/win32/setupapi/lang/sk-SK.rc b/dll/win32/setupapi/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/sk-SK.rc rename to dll/win32/setupapi/lang/sk-SK.rc diff --git a/reactos/dll/win32/setupapi/lang/sv-SE.rc b/dll/win32/setupapi/lang/sv-SE.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/sv-SE.rc rename to dll/win32/setupapi/lang/sv-SE.rc diff --git a/reactos/dll/win32/setupapi/lang/th-TH.rc b/dll/win32/setupapi/lang/th-TH.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/th-TH.rc rename to dll/win32/setupapi/lang/th-TH.rc diff --git a/reactos/dll/win32/setupapi/lang/tr-TR.rc b/dll/win32/setupapi/lang/tr-TR.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/tr-TR.rc rename to dll/win32/setupapi/lang/tr-TR.rc diff --git a/reactos/dll/win32/setupapi/lang/uk-UA.rc b/dll/win32/setupapi/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/uk-UA.rc rename to dll/win32/setupapi/lang/uk-UA.rc diff --git a/reactos/dll/win32/setupapi/misc.c b/dll/win32/setupapi/misc.c similarity index 100% rename from reactos/dll/win32/setupapi/misc.c rename to dll/win32/setupapi/misc.c diff --git a/reactos/dll/win32/setupapi/parser.c b/dll/win32/setupapi/parser.c similarity index 100% rename from reactos/dll/win32/setupapi/parser.c rename to dll/win32/setupapi/parser.c diff --git a/reactos/dll/win32/setupapi/query.c b/dll/win32/setupapi/query.c similarity index 100% rename from reactos/dll/win32/setupapi/query.c rename to dll/win32/setupapi/query.c diff --git a/reactos/dll/win32/setupapi/queue.c b/dll/win32/setupapi/queue.c similarity index 100% rename from reactos/dll/win32/setupapi/queue.c rename to dll/win32/setupapi/queue.c diff --git a/reactos/dll/win32/setupapi/res/1.ico b/dll/win32/setupapi/res/1.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/1.ico rename to dll/win32/setupapi/res/1.ico diff --git a/reactos/dll/win32/setupapi/res/10.ico b/dll/win32/setupapi/res/10.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/10.ico rename to dll/win32/setupapi/res/10.ico diff --git a/reactos/dll/win32/setupapi/res/105.ico b/dll/win32/setupapi/res/105.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/105.ico rename to dll/win32/setupapi/res/105.ico diff --git a/reactos/dll/win32/setupapi/res/11.ico b/dll/win32/setupapi/res/11.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/11.ico rename to dll/win32/setupapi/res/11.ico diff --git a/reactos/dll/win32/setupapi/res/159.ico b/dll/win32/setupapi/res/159.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/159.ico rename to dll/win32/setupapi/res/159.ico diff --git a/reactos/dll/win32/setupapi/res/161.ico b/dll/win32/setupapi/res/161.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/161.ico rename to dll/win32/setupapi/res/161.ico diff --git a/reactos/dll/win32/setupapi/res/18.ico b/dll/win32/setupapi/res/18.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/18.ico rename to dll/win32/setupapi/res/18.ico diff --git a/reactos/dll/win32/setupapi/res/19.ico b/dll/win32/setupapi/res/19.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/19.ico rename to dll/win32/setupapi/res/19.ico diff --git a/reactos/dll/win32/setupapi/res/2.ico b/dll/win32/setupapi/res/2.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/2.ico rename to dll/win32/setupapi/res/2.ico diff --git a/reactos/dll/win32/setupapi/res/20.ico b/dll/win32/setupapi/res/20.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/20.ico rename to dll/win32/setupapi/res/20.ico diff --git a/reactos/dll/win32/setupapi/res/21.ico b/dll/win32/setupapi/res/21.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/21.ico rename to dll/win32/setupapi/res/21.ico diff --git a/reactos/dll/win32/setupapi/res/22.ico b/dll/win32/setupapi/res/22.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/22.ico rename to dll/win32/setupapi/res/22.ico diff --git a/reactos/dll/win32/setupapi/res/23.ico b/dll/win32/setupapi/res/23.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/23.ico rename to dll/win32/setupapi/res/23.ico diff --git a/reactos/dll/win32/setupapi/res/24.ico b/dll/win32/setupapi/res/24.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/24.ico rename to dll/win32/setupapi/res/24.ico diff --git a/reactos/dll/win32/setupapi/res/25.ico b/dll/win32/setupapi/res/25.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/25.ico rename to dll/win32/setupapi/res/25.ico diff --git a/reactos/dll/win32/setupapi/res/26.ico b/dll/win32/setupapi/res/26.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/26.ico rename to dll/win32/setupapi/res/26.ico diff --git a/reactos/dll/win32/setupapi/res/27.ico b/dll/win32/setupapi/res/27.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/27.ico rename to dll/win32/setupapi/res/27.ico diff --git a/reactos/dll/win32/setupapi/res/28.ico b/dll/win32/setupapi/res/28.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/28.ico rename to dll/win32/setupapi/res/28.ico diff --git a/reactos/dll/win32/setupapi/res/3.ico b/dll/win32/setupapi/res/3.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/3.ico rename to dll/win32/setupapi/res/3.ico diff --git a/reactos/dll/win32/setupapi/res/4.ico b/dll/win32/setupapi/res/4.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/4.ico rename to dll/win32/setupapi/res/4.ico diff --git a/reactos/dll/win32/setupapi/res/40.ico b/dll/win32/setupapi/res/40.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/40.ico rename to dll/win32/setupapi/res/40.ico diff --git a/reactos/dll/win32/setupapi/res/41.ico b/dll/win32/setupapi/res/41.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/41.ico rename to dll/win32/setupapi/res/41.ico diff --git a/reactos/dll/win32/setupapi/res/42.ico b/dll/win32/setupapi/res/42.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/42.ico rename to dll/win32/setupapi/res/42.ico diff --git a/reactos/dll/win32/setupapi/res/43.ico b/dll/win32/setupapi/res/43.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/43.ico rename to dll/win32/setupapi/res/43.ico diff --git a/reactos/dll/win32/setupapi/res/5.ico b/dll/win32/setupapi/res/5.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/5.ico rename to dll/win32/setupapi/res/5.ico diff --git a/reactos/dll/win32/setupapi/res/50.ico b/dll/win32/setupapi/res/50.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/50.ico rename to dll/win32/setupapi/res/50.ico diff --git a/reactos/dll/win32/setupapi/res/500.ico b/dll/win32/setupapi/res/500.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/500.ico rename to dll/win32/setupapi/res/500.ico diff --git a/reactos/dll/win32/setupapi/res/501.ico b/dll/win32/setupapi/res/501.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/501.ico rename to dll/win32/setupapi/res/501.ico diff --git a/reactos/dll/win32/setupapi/res/502.ico b/dll/win32/setupapi/res/502.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/502.ico rename to dll/win32/setupapi/res/502.ico diff --git a/reactos/dll/win32/setupapi/res/51.ico b/dll/win32/setupapi/res/51.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/51.ico rename to dll/win32/setupapi/res/51.ico diff --git a/reactos/dll/win32/setupapi/res/52.ico b/dll/win32/setupapi/res/52.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/52.ico rename to dll/win32/setupapi/res/52.ico diff --git a/reactos/dll/win32/setupapi/res/53.ico b/dll/win32/setupapi/res/53.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/53.ico rename to dll/win32/setupapi/res/53.ico diff --git a/reactos/dll/win32/setupapi/res/54.ico b/dll/win32/setupapi/res/54.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/54.ico rename to dll/win32/setupapi/res/54.ico diff --git a/reactos/dll/win32/setupapi/res/6.ico b/dll/win32/setupapi/res/6.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/6.ico rename to dll/win32/setupapi/res/6.ico diff --git a/reactos/dll/win32/setupapi/res/7.ico b/dll/win32/setupapi/res/7.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/7.ico rename to dll/win32/setupapi/res/7.ico diff --git a/reactos/dll/win32/setupapi/res/8.ico b/dll/win32/setupapi/res/8.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/8.ico rename to dll/win32/setupapi/res/8.ico diff --git a/reactos/dll/win32/setupapi/res/9.ico b/dll/win32/setupapi/res/9.ico similarity index 100% rename from reactos/dll/win32/setupapi/res/9.ico rename to dll/win32/setupapi/res/9.ico diff --git a/reactos/dll/win32/setupapi/res/Icon_Licence/COPYING b/dll/win32/setupapi/res/Icon_Licence/COPYING similarity index 100% rename from reactos/dll/win32/setupapi/res/Icon_Licence/COPYING rename to dll/win32/setupapi/res/Icon_Licence/COPYING diff --git a/reactos/dll/win32/setupapi/res/Icon_Licence/Tango.txt b/dll/win32/setupapi/res/Icon_Licence/Tango.txt similarity index 100% rename from reactos/dll/win32/setupapi/res/Icon_Licence/Tango.txt rename to dll/win32/setupapi/res/Icon_Licence/Tango.txt diff --git a/reactos/dll/win32/setupapi/res/icons_res.rc b/dll/win32/setupapi/res/icons_res.rc similarity index 100% rename from reactos/dll/win32/setupapi/res/icons_res.rc rename to dll/win32/setupapi/res/icons_res.rc diff --git a/reactos/dll/win32/setupapi/resource.h b/dll/win32/setupapi/resource.h similarity index 100% rename from reactos/dll/win32/setupapi/resource.h rename to dll/win32/setupapi/resource.h diff --git a/reactos/dll/win32/setupapi/rpc.c b/dll/win32/setupapi/rpc.c similarity index 100% rename from reactos/dll/win32/setupapi/rpc.c rename to dll/win32/setupapi/rpc.c diff --git a/reactos/dll/win32/setupapi/rpc_private.h b/dll/win32/setupapi/rpc_private.h similarity index 100% rename from reactos/dll/win32/setupapi/rpc_private.h rename to dll/win32/setupapi/rpc_private.h diff --git a/reactos/dll/win32/setupapi/setupapi.rbuild b/dll/win32/setupapi/setupapi.rbuild similarity index 100% rename from reactos/dll/win32/setupapi/setupapi.rbuild rename to dll/win32/setupapi/setupapi.rbuild diff --git a/reactos/dll/win32/setupapi/setupapi.rc b/dll/win32/setupapi/setupapi.rc similarity index 100% rename from reactos/dll/win32/setupapi/setupapi.rc rename to dll/win32/setupapi/setupapi.rc diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/dll/win32/setupapi/setupapi.spec similarity index 100% rename from reactos/dll/win32/setupapi/setupapi.spec rename to dll/win32/setupapi/setupapi.spec diff --git a/reactos/dll/win32/setupapi/setupapi_private.h b/dll/win32/setupapi/setupapi_private.h similarity index 100% rename from reactos/dll/win32/setupapi/setupapi_private.h rename to dll/win32/setupapi/setupapi_private.h diff --git a/reactos/dll/win32/setupapi/setupcab.c b/dll/win32/setupapi/setupcab.c similarity index 100% rename from reactos/dll/win32/setupapi/setupcab.c rename to dll/win32/setupapi/setupcab.c diff --git a/reactos/dll/win32/setupapi/stringtable.c b/dll/win32/setupapi/stringtable.c similarity index 100% rename from reactos/dll/win32/setupapi/stringtable.c rename to dll/win32/setupapi/stringtable.c diff --git a/reactos/dll/win32/setupapi/stubs.c b/dll/win32/setupapi/stubs.c similarity index 100% rename from reactos/dll/win32/setupapi/stubs.c rename to dll/win32/setupapi/stubs.c diff --git a/reactos/dll/win32/sfc/precomp.h b/dll/win32/sfc/precomp.h similarity index 100% rename from reactos/dll/win32/sfc/precomp.h rename to dll/win32/sfc/precomp.h diff --git a/reactos/dll/win32/sfc/sfc.c b/dll/win32/sfc/sfc.c similarity index 100% rename from reactos/dll/win32/sfc/sfc.c rename to dll/win32/sfc/sfc.c diff --git a/reactos/dll/win32/sfc/sfc.rbuild b/dll/win32/sfc/sfc.rbuild similarity index 100% rename from reactos/dll/win32/sfc/sfc.rbuild rename to dll/win32/sfc/sfc.rbuild diff --git a/reactos/dll/win32/sfc/sfc.spec b/dll/win32/sfc/sfc.spec similarity index 100% rename from reactos/dll/win32/sfc/sfc.spec rename to dll/win32/sfc/sfc.spec diff --git a/reactos/dll/win32/sfc_os/precomp.h b/dll/win32/sfc_os/precomp.h similarity index 100% rename from reactos/dll/win32/sfc_os/precomp.h rename to dll/win32/sfc_os/precomp.h diff --git a/reactos/dll/win32/sfc_os/sfc_os.c b/dll/win32/sfc_os/sfc_os.c similarity index 100% rename from reactos/dll/win32/sfc_os/sfc_os.c rename to dll/win32/sfc_os/sfc_os.c diff --git a/reactos/dll/win32/sfc_os/sfc_os.rbuild b/dll/win32/sfc_os/sfc_os.rbuild similarity index 100% rename from reactos/dll/win32/sfc_os/sfc_os.rbuild rename to dll/win32/sfc_os/sfc_os.rbuild diff --git a/reactos/dll/win32/sfc_os/sfc_os.spec b/dll/win32/sfc_os/sfc_os.spec similarity index 100% rename from reactos/dll/win32/sfc_os/sfc_os.spec rename to dll/win32/sfc_os/sfc_os.spec diff --git a/reactos/dll/win32/shdocvw/Bg.rc b/dll/win32/shdocvw/Bg.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Bg.rc rename to dll/win32/shdocvw/Bg.rc diff --git a/reactos/dll/win32/shdocvw/Cs.rc b/dll/win32/shdocvw/Cs.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Cs.rc rename to dll/win32/shdocvw/Cs.rc diff --git a/reactos/dll/win32/shdocvw/De.rc b/dll/win32/shdocvw/De.rc similarity index 100% rename from reactos/dll/win32/shdocvw/De.rc rename to dll/win32/shdocvw/De.rc diff --git a/reactos/dll/win32/shdocvw/En.rc b/dll/win32/shdocvw/En.rc similarity index 100% rename from reactos/dll/win32/shdocvw/En.rc rename to dll/win32/shdocvw/En.rc diff --git a/reactos/dll/win32/shdocvw/Es.rc b/dll/win32/shdocvw/Es.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Es.rc rename to dll/win32/shdocvw/Es.rc diff --git a/reactos/dll/win32/shdocvw/Fi.rc b/dll/win32/shdocvw/Fi.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Fi.rc rename to dll/win32/shdocvw/Fi.rc diff --git a/reactos/dll/win32/shdocvw/Fr.rc b/dll/win32/shdocvw/Fr.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Fr.rc rename to dll/win32/shdocvw/Fr.rc diff --git a/reactos/dll/win32/shdocvw/Hu.rc b/dll/win32/shdocvw/Hu.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Hu.rc rename to dll/win32/shdocvw/Hu.rc diff --git a/reactos/dll/win32/shdocvw/Ja.rc b/dll/win32/shdocvw/Ja.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Ja.rc rename to dll/win32/shdocvw/Ja.rc diff --git a/reactos/dll/win32/shdocvw/Ko.rc b/dll/win32/shdocvw/Ko.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Ko.rc rename to dll/win32/shdocvw/Ko.rc diff --git a/reactos/dll/win32/shdocvw/Nl.rc b/dll/win32/shdocvw/Nl.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Nl.rc rename to dll/win32/shdocvw/Nl.rc diff --git a/reactos/dll/win32/shdocvw/No.rc b/dll/win32/shdocvw/No.rc similarity index 100% rename from reactos/dll/win32/shdocvw/No.rc rename to dll/win32/shdocvw/No.rc diff --git a/reactos/dll/win32/shdocvw/Pl.rc b/dll/win32/shdocvw/Pl.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Pl.rc rename to dll/win32/shdocvw/Pl.rc diff --git a/reactos/dll/win32/shdocvw/Pt.rc b/dll/win32/shdocvw/Pt.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Pt.rc rename to dll/win32/shdocvw/Pt.rc diff --git a/reactos/dll/win32/shdocvw/Ru.rc b/dll/win32/shdocvw/Ru.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Ru.rc rename to dll/win32/shdocvw/Ru.rc diff --git a/reactos/dll/win32/shdocvw/Sk.rc b/dll/win32/shdocvw/Sk.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Sk.rc rename to dll/win32/shdocvw/Sk.rc diff --git a/reactos/dll/win32/shdocvw/Sv.rc b/dll/win32/shdocvw/Sv.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Sv.rc rename to dll/win32/shdocvw/Sv.rc diff --git a/reactos/dll/win32/shdocvw/Uk.rc b/dll/win32/shdocvw/Uk.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Uk.rc rename to dll/win32/shdocvw/Uk.rc diff --git a/reactos/dll/win32/shdocvw/classinfo.c b/dll/win32/shdocvw/classinfo.c similarity index 100% rename from reactos/dll/win32/shdocvw/classinfo.c rename to dll/win32/shdocvw/classinfo.c diff --git a/reactos/dll/win32/shdocvw/client.c b/dll/win32/shdocvw/client.c similarity index 100% rename from reactos/dll/win32/shdocvw/client.c rename to dll/win32/shdocvw/client.c diff --git a/reactos/dll/win32/shdocvw/dochost.c b/dll/win32/shdocvw/dochost.c similarity index 100% rename from reactos/dll/win32/shdocvw/dochost.c rename to dll/win32/shdocvw/dochost.c diff --git a/reactos/dll/win32/shdocvw/events.c b/dll/win32/shdocvw/events.c similarity index 100% rename from reactos/dll/win32/shdocvw/events.c rename to dll/win32/shdocvw/events.c diff --git a/reactos/dll/win32/shdocvw/factory.c b/dll/win32/shdocvw/factory.c similarity index 100% rename from reactos/dll/win32/shdocvw/factory.c rename to dll/win32/shdocvw/factory.c diff --git a/reactos/dll/win32/shdocvw/frame.c b/dll/win32/shdocvw/frame.c similarity index 100% rename from reactos/dll/win32/shdocvw/frame.c rename to dll/win32/shdocvw/frame.c diff --git a/reactos/dll/win32/shdocvw/misc.c b/dll/win32/shdocvw/misc.c similarity index 100% rename from reactos/dll/win32/shdocvw/misc.c rename to dll/win32/shdocvw/misc.c diff --git a/reactos/dll/win32/shdocvw/oleobject.c b/dll/win32/shdocvw/oleobject.c similarity index 100% rename from reactos/dll/win32/shdocvw/oleobject.c rename to dll/win32/shdocvw/oleobject.c diff --git a/reactos/dll/win32/shdocvw/persist.c b/dll/win32/shdocvw/persist.c similarity index 100% rename from reactos/dll/win32/shdocvw/persist.c rename to dll/win32/shdocvw/persist.c diff --git a/reactos/dll/win32/shdocvw/regsvr.c b/dll/win32/shdocvw/regsvr.c similarity index 100% rename from reactos/dll/win32/shdocvw/regsvr.c rename to dll/win32/shdocvw/regsvr.c diff --git a/reactos/dll/win32/shdocvw/shdocvw.h b/dll/win32/shdocvw/shdocvw.h similarity index 100% rename from reactos/dll/win32/shdocvw/shdocvw.h rename to dll/win32/shdocvw/shdocvw.h diff --git a/reactos/dll/win32/shdocvw/shdocvw.rbuild b/dll/win32/shdocvw/shdocvw.rbuild similarity index 100% rename from reactos/dll/win32/shdocvw/shdocvw.rbuild rename to dll/win32/shdocvw/shdocvw.rbuild diff --git a/reactos/dll/win32/shdocvw/shdocvw.rc b/dll/win32/shdocvw/shdocvw.rc similarity index 100% rename from reactos/dll/win32/shdocvw/shdocvw.rc rename to dll/win32/shdocvw/shdocvw.rc diff --git a/reactos/dll/win32/shdocvw/shdocvw.spec b/dll/win32/shdocvw/shdocvw.spec similarity index 100% rename from reactos/dll/win32/shdocvw/shdocvw.spec rename to dll/win32/shdocvw/shdocvw.spec diff --git a/reactos/dll/win32/shdocvw/shdocvw_main.c b/dll/win32/shdocvw/shdocvw_main.c similarity index 100% rename from reactos/dll/win32/shdocvw/shdocvw_main.c rename to dll/win32/shdocvw/shdocvw_main.c diff --git a/reactos/dll/win32/shdocvw/shdocvw_ros.diff b/dll/win32/shdocvw/shdocvw_ros.diff similarity index 100% rename from reactos/dll/win32/shdocvw/shdocvw_ros.diff rename to dll/win32/shdocvw/shdocvw_ros.diff diff --git a/reactos/dll/win32/shdocvw/shlinstobj.c b/dll/win32/shdocvw/shlinstobj.c similarity index 100% rename from reactos/dll/win32/shdocvw/shlinstobj.c rename to dll/win32/shdocvw/shlinstobj.c diff --git a/reactos/dll/win32/shdocvw/version.rc b/dll/win32/shdocvw/version.rc similarity index 100% rename from reactos/dll/win32/shdocvw/version.rc rename to dll/win32/shdocvw/version.rc diff --git a/reactos/dll/win32/shdocvw/view.c b/dll/win32/shdocvw/view.c similarity index 100% rename from reactos/dll/win32/shdocvw/view.c rename to dll/win32/shdocvw/view.c diff --git a/reactos/dll/win32/shdocvw/webbrowser.c b/dll/win32/shdocvw/webbrowser.c similarity index 100% rename from reactos/dll/win32/shdocvw/webbrowser.c rename to dll/win32/shdocvw/webbrowser.c diff --git a/reactos/dll/win32/shell32/authors.c b/dll/win32/shell32/authors.c similarity index 100% rename from reactos/dll/win32/shell32/authors.c rename to dll/win32/shell32/authors.c diff --git a/reactos/dll/win32/shell32/autocomplete.c b/dll/win32/shell32/autocomplete.c similarity index 100% rename from reactos/dll/win32/shell32/autocomplete.c rename to dll/win32/shell32/autocomplete.c diff --git a/reactos/dll/win32/shell32/avi_res.rc b/dll/win32/shell32/avi_res.rc similarity index 100% rename from reactos/dll/win32/shell32/avi_res.rc rename to dll/win32/shell32/avi_res.rc diff --git a/reactos/dll/win32/shell32/bitmap_res.rc b/dll/win32/shell32/bitmap_res.rc similarity index 100% rename from reactos/dll/win32/shell32/bitmap_res.rc rename to dll/win32/shell32/bitmap_res.rc diff --git a/reactos/dll/win32/shell32/brsfolder.c b/dll/win32/shell32/brsfolder.c similarity index 100% rename from reactos/dll/win32/shell32/brsfolder.c rename to dll/win32/shell32/brsfolder.c diff --git a/reactos/dll/win32/shell32/changenotify.c b/dll/win32/shell32/changenotify.c similarity index 100% rename from reactos/dll/win32/shell32/changenotify.c rename to dll/win32/shell32/changenotify.c diff --git a/reactos/dll/win32/shell32/classes.c b/dll/win32/shell32/classes.c similarity index 100% rename from reactos/dll/win32/shell32/classes.c rename to dll/win32/shell32/classes.c diff --git a/reactos/dll/win32/shell32/clipboard.c b/dll/win32/shell32/clipboard.c similarity index 100% rename from reactos/dll/win32/shell32/clipboard.c rename to dll/win32/shell32/clipboard.c diff --git a/reactos/dll/win32/shell32/control.c b/dll/win32/shell32/control.c similarity index 100% rename from reactos/dll/win32/shell32/control.c rename to dll/win32/shell32/control.c diff --git a/reactos/dll/win32/shell32/cpanel.h b/dll/win32/shell32/cpanel.h similarity index 100% rename from reactos/dll/win32/shell32/cpanel.h rename to dll/win32/shell32/cpanel.h diff --git a/reactos/dll/win32/shell32/dataobject.c b/dll/win32/shell32/dataobject.c similarity index 100% rename from reactos/dll/win32/shell32/dataobject.c rename to dll/win32/shell32/dataobject.c diff --git a/reactos/dll/win32/shell32/dde.c b/dll/win32/shell32/dde.c similarity index 100% rename from reactos/dll/win32/shell32/dde.c rename to dll/win32/shell32/dde.c diff --git a/reactos/dll/win32/shell32/debughlp.c b/dll/win32/shell32/debughlp.c similarity index 100% rename from reactos/dll/win32/shell32/debughlp.c rename to dll/win32/shell32/debughlp.c diff --git a/reactos/dll/win32/shell32/debughlp.h b/dll/win32/shell32/debughlp.h similarity index 100% rename from reactos/dll/win32/shell32/debughlp.h rename to dll/win32/shell32/debughlp.h diff --git a/reactos/dll/win32/shell32/desktop.c b/dll/win32/shell32/desktop.c similarity index 100% rename from reactos/dll/win32/shell32/desktop.c rename to dll/win32/shell32/desktop.c diff --git a/reactos/dll/win32/shell32/dialogs.c b/dll/win32/shell32/dialogs.c similarity index 100% rename from reactos/dll/win32/shell32/dialogs.c rename to dll/win32/shell32/dialogs.c diff --git a/reactos/dll/win32/shell32/dragdrophelper.c b/dll/win32/shell32/dragdrophelper.c similarity index 100% rename from reactos/dll/win32/shell32/dragdrophelper.c rename to dll/win32/shell32/dragdrophelper.c diff --git a/reactos/dll/win32/shell32/drive.c b/dll/win32/shell32/drive.c similarity index 100% rename from reactos/dll/win32/shell32/drive.c rename to dll/win32/shell32/drive.c diff --git a/reactos/dll/win32/shell32/enumidlist.c b/dll/win32/shell32/enumidlist.c similarity index 100% rename from reactos/dll/win32/shell32/enumidlist.c rename to dll/win32/shell32/enumidlist.c diff --git a/reactos/dll/win32/shell32/enumidlist.h b/dll/win32/shell32/enumidlist.h similarity index 100% rename from reactos/dll/win32/shell32/enumidlist.h rename to dll/win32/shell32/enumidlist.h diff --git a/reactos/dll/win32/shell32/extracticon.c b/dll/win32/shell32/extracticon.c similarity index 100% rename from reactos/dll/win32/shell32/extracticon.c rename to dll/win32/shell32/extracticon.c diff --git a/reactos/dll/win32/shell32/folder_options.c b/dll/win32/shell32/folder_options.c similarity index 100% rename from reactos/dll/win32/shell32/folder_options.c rename to dll/win32/shell32/folder_options.c diff --git a/reactos/dll/win32/shell32/folders.c b/dll/win32/shell32/folders.c similarity index 100% rename from reactos/dll/win32/shell32/folders.c rename to dll/win32/shell32/folders.c diff --git a/reactos/dll/win32/shell32/fprop.c b/dll/win32/shell32/fprop.c similarity index 100% rename from reactos/dll/win32/shell32/fprop.c rename to dll/win32/shell32/fprop.c diff --git a/reactos/dll/win32/shell32/icon_res.rc b/dll/win32/shell32/icon_res.rc similarity index 100% rename from reactos/dll/win32/shell32/icon_res.rc rename to dll/win32/shell32/icon_res.rc diff --git a/reactos/dll/win32/shell32/iconcache.c b/dll/win32/shell32/iconcache.c similarity index 100% rename from reactos/dll/win32/shell32/iconcache.c rename to dll/win32/shell32/iconcache.c diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/dll/win32/shell32/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/bg-BG.rc rename to dll/win32/shell32/lang/bg-BG.rc diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/dll/win32/shell32/lang/ca-ES.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/ca-ES.rc rename to dll/win32/shell32/lang/ca-ES.rc diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/dll/win32/shell32/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/cs-CZ.rc rename to dll/win32/shell32/lang/cs-CZ.rc diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/dll/win32/shell32/lang/da-DK.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/da-DK.rc rename to dll/win32/shell32/lang/da-DK.rc diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/dll/win32/shell32/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/de-DE.rc rename to dll/win32/shell32/lang/de-DE.rc diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/dll/win32/shell32/lang/el-GR.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/el-GR.rc rename to dll/win32/shell32/lang/el-GR.rc diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/dll/win32/shell32/lang/en-GB.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/en-GB.rc rename to dll/win32/shell32/lang/en-GB.rc diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/dll/win32/shell32/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/en-US.rc rename to dll/win32/shell32/lang/en-US.rc diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/dll/win32/shell32/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/es-ES.rc rename to dll/win32/shell32/lang/es-ES.rc diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/dll/win32/shell32/lang/fi-FI.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/fi-FI.rc rename to dll/win32/shell32/lang/fi-FI.rc diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/dll/win32/shell32/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/fr-FR.rc rename to dll/win32/shell32/lang/fr-FR.rc diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/dll/win32/shell32/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/hu-HU.rc rename to dll/win32/shell32/lang/hu-HU.rc diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/dll/win32/shell32/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/it-IT.rc rename to dll/win32/shell32/lang/it-IT.rc diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/dll/win32/shell32/lang/ja-JP.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/ja-JP.rc rename to dll/win32/shell32/lang/ja-JP.rc diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/dll/win32/shell32/lang/ko-KR.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/ko-KR.rc rename to dll/win32/shell32/lang/ko-KR.rc diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/dll/win32/shell32/lang/nl-NL.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/nl-NL.rc rename to dll/win32/shell32/lang/nl-NL.rc diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/dll/win32/shell32/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/no-NO.rc rename to dll/win32/shell32/lang/no-NO.rc diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/dll/win32/shell32/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/pl-PL.rc rename to dll/win32/shell32/lang/pl-PL.rc diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/dll/win32/shell32/lang/pt-BR.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/pt-BR.rc rename to dll/win32/shell32/lang/pt-BR.rc diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/dll/win32/shell32/lang/pt-PT.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/pt-PT.rc rename to dll/win32/shell32/lang/pt-PT.rc diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/dll/win32/shell32/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/ru-RU.rc rename to dll/win32/shell32/lang/ru-RU.rc diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/dll/win32/shell32/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/sk-SK.rc rename to dll/win32/shell32/lang/sk-SK.rc diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/dll/win32/shell32/lang/sl-SI.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/sl-SI.rc rename to dll/win32/shell32/lang/sl-SI.rc diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/dll/win32/shell32/lang/sv-SE.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/sv-SE.rc rename to dll/win32/shell32/lang/sv-SE.rc diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/dll/win32/shell32/lang/tr-TR.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/tr-TR.rc rename to dll/win32/shell32/lang/tr-TR.rc diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/dll/win32/shell32/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/uk-UA.rc rename to dll/win32/shell32/lang/uk-UA.rc diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/dll/win32/shell32/lang/zh-CN.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/zh-CN.rc rename to dll/win32/shell32/lang/zh-CN.rc diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/dll/win32/shell32/lang/zh-TW.rc similarity index 100% rename from reactos/dll/win32/shell32/lang/zh-TW.rc rename to dll/win32/shell32/lang/zh-TW.rc diff --git a/reactos/dll/win32/shell32/pidl.c b/dll/win32/shell32/pidl.c similarity index 100% rename from reactos/dll/win32/shell32/pidl.c rename to dll/win32/shell32/pidl.c diff --git a/reactos/dll/win32/shell32/pidl.h b/dll/win32/shell32/pidl.h similarity index 100% rename from reactos/dll/win32/shell32/pidl.h rename to dll/win32/shell32/pidl.h diff --git a/reactos/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h similarity index 100% rename from reactos/dll/win32/shell32/precomp.h rename to dll/win32/shell32/precomp.h diff --git a/reactos/dll/win32/shell32/regsvr.c b/dll/win32/shell32/regsvr.c similarity index 100% rename from reactos/dll/win32/shell32/regsvr.c rename to dll/win32/shell32/regsvr.c diff --git a/reactos/dll/win32/shell32/res/avis/160+161+167+168.avi b/dll/win32/shell32/res/avis/160+161+167+168.avi similarity index 100% rename from reactos/dll/win32/shell32/res/avis/160+161+167+168.avi rename to dll/win32/shell32/res/avis/160+161+167+168.avi diff --git a/reactos/dll/win32/shell32/res/avis/162.avi b/dll/win32/shell32/res/avis/162.avi similarity index 100% rename from reactos/dll/win32/shell32/res/avis/162.avi rename to dll/win32/shell32/res/avis/162.avi diff --git a/reactos/dll/win32/shell32/res/avis/163.avi b/dll/win32/shell32/res/avis/163.avi similarity index 100% rename from reactos/dll/win32/shell32/res/avis/163.avi rename to dll/win32/shell32/res/avis/163.avi diff --git a/reactos/dll/win32/shell32/res/avis/164+169.avi b/dll/win32/shell32/res/avis/164+169.avi similarity index 100% rename from reactos/dll/win32/shell32/res/avis/164+169.avi rename to dll/win32/shell32/res/avis/164+169.avi diff --git a/reactos/dll/win32/shell32/res/avis/170.avi b/dll/win32/shell32/res/avis/170.avi similarity index 100% rename from reactos/dll/win32/shell32/res/avis/170.avi rename to dll/win32/shell32/res/avis/170.avi diff --git a/reactos/dll/win32/shell32/res/avis/Licence/COPYING b/dll/win32/shell32/res/avis/Licence/COPYING similarity index 100% rename from reactos/dll/win32/shell32/res/avis/Licence/COPYING rename to dll/win32/shell32/res/avis/Licence/COPYING diff --git a/reactos/dll/win32/shell32/res/avis/Licence/Tango.txt b/dll/win32/shell32/res/avis/Licence/Tango.txt similarity index 100% rename from reactos/dll/win32/shell32/res/avis/Licence/Tango.txt rename to dll/win32/shell32/res/avis/Licence/Tango.txt diff --git a/reactos/dll/win32/shell32/res/bitmaps/204.bmp b/dll/win32/shell32/res/bitmaps/204.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/204.bmp rename to dll/win32/shell32/res/bitmaps/204.bmp diff --git a/reactos/dll/win32/shell32/res/bitmaps/205.bmp b/dll/win32/shell32/res/bitmaps/205.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/205.bmp rename to dll/win32/shell32/res/bitmaps/205.bmp diff --git a/reactos/dll/win32/shell32/res/bitmaps/206.bmp b/dll/win32/shell32/res/bitmaps/206.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/206.bmp rename to dll/win32/shell32/res/bitmaps/206.bmp diff --git a/reactos/dll/win32/shell32/res/bitmaps/207.bmp b/dll/win32/shell32/res/bitmaps/207.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/207.bmp rename to dll/win32/shell32/res/bitmaps/207.bmp diff --git a/reactos/dll/win32/shell32/res/bitmaps/225.bmp b/dll/win32/shell32/res/bitmaps/225.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/225.bmp rename to dll/win32/shell32/res/bitmaps/225.bmp diff --git a/reactos/dll/win32/shell32/res/bitmaps/226.bmp b/dll/win32/shell32/res/bitmaps/226.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/226.bmp rename to dll/win32/shell32/res/bitmaps/226.bmp diff --git a/reactos/dll/win32/shell32/res/bitmaps/227.bmp b/dll/win32/shell32/res/bitmaps/227.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/227.bmp rename to dll/win32/shell32/res/bitmaps/227.bmp diff --git a/reactos/dll/win32/shell32/res/bitmaps/228.bmp b/dll/win32/shell32/res/bitmaps/228.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/228.bmp rename to dll/win32/shell32/res/bitmaps/228.bmp diff --git a/reactos/dll/win32/shell32/res/bitmaps/shell_about_logo_24bpp.bmp b/dll/win32/shell32/res/bitmaps/shell_about_logo_24bpp.bmp similarity index 100% rename from reactos/dll/win32/shell32/res/bitmaps/shell_about_logo_24bpp.bmp rename to dll/win32/shell32/res/bitmaps/shell_about_logo_24bpp.bmp diff --git a/reactos/dll/win32/shell32/res/icons/1.ico b/dll/win32/shell32/res/icons/1.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/1.ico rename to dll/win32/shell32/res/icons/1.ico diff --git a/reactos/dll/win32/shell32/res/icons/10.ico b/dll/win32/shell32/res/icons/10.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/10.ico rename to dll/win32/shell32/res/icons/10.ico diff --git a/reactos/dll/win32/shell32/res/icons/1001.ico b/dll/win32/shell32/res/icons/1001.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/1001.ico rename to dll/win32/shell32/res/icons/1001.ico diff --git a/reactos/dll/win32/shell32/res/icons/1004.ico b/dll/win32/shell32/res/icons/1004.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/1004.ico rename to dll/win32/shell32/res/icons/1004.ico diff --git a/reactos/dll/win32/shell32/res/icons/11.ico b/dll/win32/shell32/res/icons/11.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/11.ico rename to dll/win32/shell32/res/icons/11.ico diff --git a/reactos/dll/win32/shell32/res/icons/12.ico b/dll/win32/shell32/res/icons/12.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/12.ico rename to dll/win32/shell32/res/icons/12.ico diff --git a/reactos/dll/win32/shell32/res/icons/13.ico b/dll/win32/shell32/res/icons/13.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/13.ico rename to dll/win32/shell32/res/icons/13.ico diff --git a/reactos/dll/win32/shell32/res/icons/134.ico b/dll/win32/shell32/res/icons/134.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/134.ico rename to dll/win32/shell32/res/icons/134.ico diff --git a/reactos/dll/win32/shell32/res/icons/135.ico b/dll/win32/shell32/res/icons/135.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/135.ico rename to dll/win32/shell32/res/icons/135.ico diff --git a/reactos/dll/win32/shell32/res/icons/137.ico b/dll/win32/shell32/res/icons/137.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/137.ico rename to dll/win32/shell32/res/icons/137.ico diff --git a/reactos/dll/win32/shell32/res/icons/138.ico b/dll/win32/shell32/res/icons/138.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/138.ico rename to dll/win32/shell32/res/icons/138.ico diff --git a/reactos/dll/win32/shell32/res/icons/14.ico b/dll/win32/shell32/res/icons/14.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/14.ico rename to dll/win32/shell32/res/icons/14.ico diff --git a/reactos/dll/win32/shell32/res/icons/15.ico b/dll/win32/shell32/res/icons/15.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/15.ico rename to dll/win32/shell32/res/icons/15.ico diff --git a/reactos/dll/win32/shell32/res/icons/151.ico b/dll/win32/shell32/res/icons/151.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/151.ico rename to dll/win32/shell32/res/icons/151.ico diff --git a/reactos/dll/win32/shell32/res/icons/152.ico b/dll/win32/shell32/res/icons/152.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/152.ico rename to dll/win32/shell32/res/icons/152.ico diff --git a/reactos/dll/win32/shell32/res/icons/153.ico b/dll/win32/shell32/res/icons/153.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/153.ico rename to dll/win32/shell32/res/icons/153.ico diff --git a/reactos/dll/win32/shell32/res/icons/154.ico b/dll/win32/shell32/res/icons/154.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/154.ico rename to dll/win32/shell32/res/icons/154.ico diff --git a/reactos/dll/win32/shell32/res/icons/155.ico b/dll/win32/shell32/res/icons/155.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/155.ico rename to dll/win32/shell32/res/icons/155.ico diff --git a/reactos/dll/win32/shell32/res/icons/156.ico b/dll/win32/shell32/res/icons/156.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/156.ico rename to dll/win32/shell32/res/icons/156.ico diff --git a/reactos/dll/win32/shell32/res/icons/157.ico b/dll/win32/shell32/res/icons/157.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/157.ico rename to dll/win32/shell32/res/icons/157.ico diff --git a/reactos/dll/win32/shell32/res/icons/16.ico b/dll/win32/shell32/res/icons/16.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/16.ico rename to dll/win32/shell32/res/icons/16.ico diff --git a/reactos/dll/win32/shell32/res/icons/160.ico b/dll/win32/shell32/res/icons/160.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/160.ico rename to dll/win32/shell32/res/icons/160.ico diff --git a/reactos/dll/win32/shell32/res/icons/161.ico b/dll/win32/shell32/res/icons/161.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/161.ico rename to dll/win32/shell32/res/icons/161.ico diff --git a/reactos/dll/win32/shell32/res/icons/16710.ico b/dll/win32/shell32/res/icons/16710.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/16710.ico rename to dll/win32/shell32/res/icons/16710.ico diff --git a/reactos/dll/win32/shell32/res/icons/16715.ico b/dll/win32/shell32/res/icons/16715.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/16715.ico rename to dll/win32/shell32/res/icons/16715.ico diff --git a/reactos/dll/win32/shell32/res/icons/16717.ico b/dll/win32/shell32/res/icons/16717.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/16717.ico rename to dll/win32/shell32/res/icons/16717.ico diff --git a/reactos/dll/win32/shell32/res/icons/16718.ico b/dll/win32/shell32/res/icons/16718.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/16718.ico rename to dll/win32/shell32/res/icons/16718.ico diff --git a/reactos/dll/win32/shell32/res/icons/16721.ico b/dll/win32/shell32/res/icons/16721.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/16721.ico rename to dll/win32/shell32/res/icons/16721.ico diff --git a/reactos/dll/win32/shell32/res/icons/17.ico b/dll/win32/shell32/res/icons/17.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/17.ico rename to dll/win32/shell32/res/icons/17.ico diff --git a/reactos/dll/win32/shell32/res/icons/172.ico b/dll/win32/shell32/res/icons/172.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/172.ico rename to dll/win32/shell32/res/icons/172.ico diff --git a/reactos/dll/win32/shell32/res/icons/173.ico b/dll/win32/shell32/res/icons/173.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/173.ico rename to dll/win32/shell32/res/icons/173.ico diff --git a/reactos/dll/win32/shell32/res/icons/18.ico b/dll/win32/shell32/res/icons/18.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/18.ico rename to dll/win32/shell32/res/icons/18.ico diff --git a/reactos/dll/win32/shell32/res/icons/182.ico b/dll/win32/shell32/res/icons/182.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/182.ico rename to dll/win32/shell32/res/icons/182.ico diff --git a/reactos/dll/win32/shell32/res/icons/183.ico b/dll/win32/shell32/res/icons/183.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/183.ico rename to dll/win32/shell32/res/icons/183.ico diff --git a/reactos/dll/win32/shell32/res/icons/184.ico b/dll/win32/shell32/res/icons/184.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/184.ico rename to dll/win32/shell32/res/icons/184.ico diff --git a/reactos/dll/win32/shell32/res/icons/185.ico b/dll/win32/shell32/res/icons/185.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/185.ico rename to dll/win32/shell32/res/icons/185.ico diff --git a/reactos/dll/win32/shell32/res/icons/186.ico b/dll/win32/shell32/res/icons/186.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/186.ico rename to dll/win32/shell32/res/icons/186.ico diff --git a/reactos/dll/win32/shell32/res/icons/187.ico b/dll/win32/shell32/res/icons/187.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/187.ico rename to dll/win32/shell32/res/icons/187.ico diff --git a/reactos/dll/win32/shell32/res/icons/19.ico b/dll/win32/shell32/res/icons/19.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/19.ico rename to dll/win32/shell32/res/icons/19.ico diff --git a/reactos/dll/win32/shell32/res/icons/191.ico b/dll/win32/shell32/res/icons/191.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/191.ico rename to dll/win32/shell32/res/icons/191.ico diff --git a/reactos/dll/win32/shell32/res/icons/192.ico b/dll/win32/shell32/res/icons/192.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/192.ico rename to dll/win32/shell32/res/icons/192.ico diff --git a/reactos/dll/win32/shell32/res/icons/2.ico b/dll/win32/shell32/res/icons/2.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/2.ico rename to dll/win32/shell32/res/icons/2.ico diff --git a/reactos/dll/win32/shell32/res/icons/20.ico b/dll/win32/shell32/res/icons/20.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/20.ico rename to dll/win32/shell32/res/icons/20.ico diff --git a/reactos/dll/win32/shell32/res/icons/21.ico b/dll/win32/shell32/res/icons/21.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/21.ico rename to dll/win32/shell32/res/icons/21.ico diff --git a/reactos/dll/win32/shell32/res/icons/210.ico b/dll/win32/shell32/res/icons/210.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/210.ico rename to dll/win32/shell32/res/icons/210.ico diff --git a/reactos/dll/win32/shell32/res/icons/22.ico b/dll/win32/shell32/res/icons/22.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/22.ico rename to dll/win32/shell32/res/icons/22.ico diff --git a/reactos/dll/win32/shell32/res/icons/220.ico b/dll/win32/shell32/res/icons/220.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/220.ico rename to dll/win32/shell32/res/icons/220.ico diff --git a/reactos/dll/win32/shell32/res/icons/221.ico b/dll/win32/shell32/res/icons/221.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/221.ico rename to dll/win32/shell32/res/icons/221.ico diff --git a/reactos/dll/win32/shell32/res/icons/222.ico b/dll/win32/shell32/res/icons/222.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/222.ico rename to dll/win32/shell32/res/icons/222.ico diff --git a/reactos/dll/win32/shell32/res/icons/224.ico b/dll/win32/shell32/res/icons/224.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/224.ico rename to dll/win32/shell32/res/icons/224.ico diff --git a/reactos/dll/win32/shell32/res/icons/225.ico b/dll/win32/shell32/res/icons/225.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/225.ico rename to dll/win32/shell32/res/icons/225.ico diff --git a/reactos/dll/win32/shell32/res/icons/226.ico b/dll/win32/shell32/res/icons/226.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/226.ico rename to dll/win32/shell32/res/icons/226.ico diff --git a/reactos/dll/win32/shell32/res/icons/228.ico b/dll/win32/shell32/res/icons/228.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/228.ico rename to dll/win32/shell32/res/icons/228.ico diff --git a/reactos/dll/win32/shell32/res/icons/23.ico b/dll/win32/shell32/res/icons/23.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/23.ico rename to dll/win32/shell32/res/icons/23.ico diff --git a/reactos/dll/win32/shell32/res/icons/233.ico b/dll/win32/shell32/res/icons/233.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/233.ico rename to dll/win32/shell32/res/icons/233.ico diff --git a/reactos/dll/win32/shell32/res/icons/235.ico b/dll/win32/shell32/res/icons/235.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/235.ico rename to dll/win32/shell32/res/icons/235.ico diff --git a/reactos/dll/win32/shell32/res/icons/236.ico b/dll/win32/shell32/res/icons/236.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/236.ico rename to dll/win32/shell32/res/icons/236.ico diff --git a/reactos/dll/win32/shell32/res/icons/237.ico b/dll/win32/shell32/res/icons/237.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/237.ico rename to dll/win32/shell32/res/icons/237.ico diff --git a/reactos/dll/win32/shell32/res/icons/238.ico b/dll/win32/shell32/res/icons/238.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/238.ico rename to dll/win32/shell32/res/icons/238.ico diff --git a/reactos/dll/win32/shell32/res/icons/24.ico b/dll/win32/shell32/res/icons/24.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/24.ico rename to dll/win32/shell32/res/icons/24.ico diff --git a/reactos/dll/win32/shell32/res/icons/240.ico b/dll/win32/shell32/res/icons/240.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/240.ico rename to dll/win32/shell32/res/icons/240.ico diff --git a/reactos/dll/win32/shell32/res/icons/245.ico b/dll/win32/shell32/res/icons/245.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/245.ico rename to dll/win32/shell32/res/icons/245.ico diff --git a/reactos/dll/win32/shell32/res/icons/246.ico b/dll/win32/shell32/res/icons/246.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/246.ico rename to dll/win32/shell32/res/icons/246.ico diff --git a/reactos/dll/win32/shell32/res/icons/248.ico b/dll/win32/shell32/res/icons/248.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/248.ico rename to dll/win32/shell32/res/icons/248.ico diff --git a/reactos/dll/win32/shell32/res/icons/249.ico b/dll/win32/shell32/res/icons/249.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/249.ico rename to dll/win32/shell32/res/icons/249.ico diff --git a/reactos/dll/win32/shell32/res/icons/25.ico b/dll/win32/shell32/res/icons/25.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/25.ico rename to dll/win32/shell32/res/icons/25.ico diff --git a/reactos/dll/win32/shell32/res/icons/250.ico b/dll/win32/shell32/res/icons/250.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/250.ico rename to dll/win32/shell32/res/icons/250.ico diff --git a/reactos/dll/win32/shell32/res/icons/252.ico b/dll/win32/shell32/res/icons/252.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/252.ico rename to dll/win32/shell32/res/icons/252.ico diff --git a/reactos/dll/win32/shell32/res/icons/254.ico b/dll/win32/shell32/res/icons/254.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/254.ico rename to dll/win32/shell32/res/icons/254.ico diff --git a/reactos/dll/win32/shell32/res/icons/255.ico b/dll/win32/shell32/res/icons/255.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/255.ico rename to dll/win32/shell32/res/icons/255.ico diff --git a/reactos/dll/win32/shell32/res/icons/263.ico b/dll/win32/shell32/res/icons/263.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/263.ico rename to dll/win32/shell32/res/icons/263.ico diff --git a/reactos/dll/win32/shell32/res/icons/265.ico b/dll/win32/shell32/res/icons/265.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/265.ico rename to dll/win32/shell32/res/icons/265.ico diff --git a/reactos/dll/win32/shell32/res/icons/268.ico b/dll/win32/shell32/res/icons/268.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/268.ico rename to dll/win32/shell32/res/icons/268.ico diff --git a/reactos/dll/win32/shell32/res/icons/269.ico b/dll/win32/shell32/res/icons/269.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/269.ico rename to dll/win32/shell32/res/icons/269.ico diff --git a/reactos/dll/win32/shell32/res/icons/270.ico b/dll/win32/shell32/res/icons/270.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/270.ico rename to dll/win32/shell32/res/icons/270.ico diff --git a/reactos/dll/win32/shell32/res/icons/271.ico b/dll/win32/shell32/res/icons/271.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/271.ico rename to dll/win32/shell32/res/icons/271.ico diff --git a/reactos/dll/win32/shell32/res/icons/277.ico b/dll/win32/shell32/res/icons/277.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/277.ico rename to dll/win32/shell32/res/icons/277.ico diff --git a/reactos/dll/win32/shell32/res/icons/279.ico b/dll/win32/shell32/res/icons/279.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/279.ico rename to dll/win32/shell32/res/icons/279.ico diff --git a/reactos/dll/win32/shell32/res/icons/28.ico b/dll/win32/shell32/res/icons/28.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/28.ico rename to dll/win32/shell32/res/icons/28.ico diff --git a/reactos/dll/win32/shell32/res/icons/289.ico b/dll/win32/shell32/res/icons/289.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/289.ico rename to dll/win32/shell32/res/icons/289.ico diff --git a/reactos/dll/win32/shell32/res/icons/29.ico b/dll/win32/shell32/res/icons/29.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/29.ico rename to dll/win32/shell32/res/icons/29.ico diff --git a/reactos/dll/win32/shell32/res/icons/290.ico b/dll/win32/shell32/res/icons/290.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/290.ico rename to dll/win32/shell32/res/icons/290.ico diff --git a/reactos/dll/win32/shell32/res/icons/291.ico b/dll/win32/shell32/res/icons/291.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/291.ico rename to dll/win32/shell32/res/icons/291.ico diff --git a/reactos/dll/win32/shell32/res/icons/292.ico b/dll/win32/shell32/res/icons/292.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/292.ico rename to dll/win32/shell32/res/icons/292.ico diff --git a/reactos/dll/win32/shell32/res/icons/293.ico b/dll/win32/shell32/res/icons/293.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/293.ico rename to dll/win32/shell32/res/icons/293.ico diff --git a/reactos/dll/win32/shell32/res/icons/294.ico b/dll/win32/shell32/res/icons/294.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/294.ico rename to dll/win32/shell32/res/icons/294.ico diff --git a/reactos/dll/win32/shell32/res/icons/295.ico b/dll/win32/shell32/res/icons/295.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/295.ico rename to dll/win32/shell32/res/icons/295.ico diff --git a/reactos/dll/win32/shell32/res/icons/296.ico b/dll/win32/shell32/res/icons/296.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/296.ico rename to dll/win32/shell32/res/icons/296.ico diff --git a/reactos/dll/win32/shell32/res/icons/297.ico b/dll/win32/shell32/res/icons/297.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/297.ico rename to dll/win32/shell32/res/icons/297.ico diff --git a/reactos/dll/win32/shell32/res/icons/298.ico b/dll/win32/shell32/res/icons/298.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/298.ico rename to dll/win32/shell32/res/icons/298.ico diff --git a/reactos/dll/win32/shell32/res/icons/299.ico b/dll/win32/shell32/res/icons/299.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/299.ico rename to dll/win32/shell32/res/icons/299.ico diff --git a/reactos/dll/win32/shell32/res/icons/3.ico b/dll/win32/shell32/res/icons/3.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/3.ico rename to dll/win32/shell32/res/icons/3.ico diff --git a/reactos/dll/win32/shell32/res/icons/30.ico b/dll/win32/shell32/res/icons/30.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/30.ico rename to dll/win32/shell32/res/icons/30.ico diff --git a/reactos/dll/win32/shell32/res/icons/302.ico b/dll/win32/shell32/res/icons/302.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/302.ico rename to dll/win32/shell32/res/icons/302.ico diff --git a/reactos/dll/win32/shell32/res/icons/304.ico b/dll/win32/shell32/res/icons/304.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/304.ico rename to dll/win32/shell32/res/icons/304.ico diff --git a/reactos/dll/win32/shell32/res/icons/305.ico b/dll/win32/shell32/res/icons/305.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/305.ico rename to dll/win32/shell32/res/icons/305.ico diff --git a/reactos/dll/win32/shell32/res/icons/309.ico b/dll/win32/shell32/res/icons/309.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/309.ico rename to dll/win32/shell32/res/icons/309.ico diff --git a/reactos/dll/win32/shell32/res/icons/315.ico b/dll/win32/shell32/res/icons/315.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/315.ico rename to dll/win32/shell32/res/icons/315.ico diff --git a/reactos/dll/win32/shell32/res/icons/317.ico b/dll/win32/shell32/res/icons/317.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/317.ico rename to dll/win32/shell32/res/icons/317.ico diff --git a/reactos/dll/win32/shell32/res/icons/318.ico b/dll/win32/shell32/res/icons/318.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/318.ico rename to dll/win32/shell32/res/icons/318.ico diff --git a/reactos/dll/win32/shell32/res/icons/319.ico b/dll/win32/shell32/res/icons/319.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/319.ico rename to dll/win32/shell32/res/icons/319.ico diff --git a/reactos/dll/win32/shell32/res/icons/32.ico b/dll/win32/shell32/res/icons/32.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/32.ico rename to dll/win32/shell32/res/icons/32.ico diff --git a/reactos/dll/win32/shell32/res/icons/322.ico b/dll/win32/shell32/res/icons/322.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/322.ico rename to dll/win32/shell32/res/icons/322.ico diff --git a/reactos/dll/win32/shell32/res/icons/323.ico b/dll/win32/shell32/res/icons/323.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/323.ico rename to dll/win32/shell32/res/icons/323.ico diff --git a/reactos/dll/win32/shell32/res/icons/324.ico b/dll/win32/shell32/res/icons/324.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/324.ico rename to dll/win32/shell32/res/icons/324.ico diff --git a/reactos/dll/win32/shell32/res/icons/325.ico b/dll/win32/shell32/res/icons/325.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/325.ico rename to dll/win32/shell32/res/icons/325.ico diff --git a/reactos/dll/win32/shell32/res/icons/326.ico b/dll/win32/shell32/res/icons/326.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/326.ico rename to dll/win32/shell32/res/icons/326.ico diff --git a/reactos/dll/win32/shell32/res/icons/327.ico b/dll/win32/shell32/res/icons/327.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/327.ico rename to dll/win32/shell32/res/icons/327.ico diff --git a/reactos/dll/win32/shell32/res/icons/328.ico b/dll/win32/shell32/res/icons/328.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/328.ico rename to dll/win32/shell32/res/icons/328.ico diff --git a/reactos/dll/win32/shell32/res/icons/329.ico b/dll/win32/shell32/res/icons/329.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/329.ico rename to dll/win32/shell32/res/icons/329.ico diff --git a/reactos/dll/win32/shell32/res/icons/33.ico b/dll/win32/shell32/res/icons/33.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/33.ico rename to dll/win32/shell32/res/icons/33.ico diff --git a/reactos/dll/win32/shell32/res/icons/330.ico b/dll/win32/shell32/res/icons/330.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/330.ico rename to dll/win32/shell32/res/icons/330.ico diff --git a/reactos/dll/win32/shell32/res/icons/35.ico b/dll/win32/shell32/res/icons/35.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/35.ico rename to dll/win32/shell32/res/icons/35.ico diff --git a/reactos/dll/win32/shell32/res/icons/36.ico b/dll/win32/shell32/res/icons/36.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/36.ico rename to dll/win32/shell32/res/icons/36.ico diff --git a/reactos/dll/win32/shell32/res/icons/37.ico b/dll/win32/shell32/res/icons/37.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/37.ico rename to dll/win32/shell32/res/icons/37.ico diff --git a/reactos/dll/win32/shell32/res/icons/38.ico b/dll/win32/shell32/res/icons/38.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/38.ico rename to dll/win32/shell32/res/icons/38.ico diff --git a/reactos/dll/win32/shell32/res/icons/39.ico b/dll/win32/shell32/res/icons/39.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/39.ico rename to dll/win32/shell32/res/icons/39.ico diff --git a/reactos/dll/win32/shell32/res/icons/4.ico b/dll/win32/shell32/res/icons/4.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/4.ico rename to dll/win32/shell32/res/icons/4.ico diff --git a/reactos/dll/win32/shell32/res/icons/40.ico b/dll/win32/shell32/res/icons/40.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/40.ico rename to dll/win32/shell32/res/icons/40.ico diff --git a/reactos/dll/win32/shell32/res/icons/41.ico b/dll/win32/shell32/res/icons/41.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/41.ico rename to dll/win32/shell32/res/icons/41.ico diff --git a/reactos/dll/win32/shell32/res/icons/44.ico b/dll/win32/shell32/res/icons/44.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/44.ico rename to dll/win32/shell32/res/icons/44.ico diff --git a/reactos/dll/win32/shell32/res/icons/45.ico b/dll/win32/shell32/res/icons/45.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/45.ico rename to dll/win32/shell32/res/icons/45.ico diff --git a/reactos/dll/win32/shell32/res/icons/46.ico b/dll/win32/shell32/res/icons/46.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/46.ico rename to dll/win32/shell32/res/icons/46.ico diff --git a/reactos/dll/win32/shell32/res/icons/47.ico b/dll/win32/shell32/res/icons/47.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/47.ico rename to dll/win32/shell32/res/icons/47.ico diff --git a/reactos/dll/win32/shell32/res/icons/48.ico b/dll/win32/shell32/res/icons/48.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/48.ico rename to dll/win32/shell32/res/icons/48.ico diff --git a/reactos/dll/win32/shell32/res/icons/5.ico b/dll/win32/shell32/res/icons/5.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/5.ico rename to dll/win32/shell32/res/icons/5.ico diff --git a/reactos/dll/win32/shell32/res/icons/54.ico b/dll/win32/shell32/res/icons/54.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/54.ico rename to dll/win32/shell32/res/icons/54.ico diff --git a/reactos/dll/win32/shell32/res/icons/6.ico b/dll/win32/shell32/res/icons/6.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/6.ico rename to dll/win32/shell32/res/icons/6.ico diff --git a/reactos/dll/win32/shell32/res/icons/7.ico b/dll/win32/shell32/res/icons/7.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/7.ico rename to dll/win32/shell32/res/icons/7.ico diff --git a/reactos/dll/win32/shell32/res/icons/8.ico b/dll/win32/shell32/res/icons/8.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/8.ico rename to dll/win32/shell32/res/icons/8.ico diff --git a/reactos/dll/win32/shell32/res/icons/8240.ico b/dll/win32/shell32/res/icons/8240.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/8240.ico rename to dll/win32/shell32/res/icons/8240.ico diff --git a/reactos/dll/win32/shell32/res/icons/9.ico b/dll/win32/shell32/res/icons/9.ico similarity index 100% rename from reactos/dll/win32/shell32/res/icons/9.ico rename to dll/win32/shell32/res/icons/9.ico diff --git a/reactos/dll/win32/shell32/res/icons/Icon_Licence/COPYING b/dll/win32/shell32/res/icons/Icon_Licence/COPYING similarity index 100% rename from reactos/dll/win32/shell32/res/icons/Icon_Licence/COPYING rename to dll/win32/shell32/res/icons/Icon_Licence/COPYING diff --git a/reactos/dll/win32/shell32/res/icons/Icon_Licence/Tango.txt b/dll/win32/shell32/res/icons/Icon_Licence/Tango.txt similarity index 100% rename from reactos/dll/win32/shell32/res/icons/Icon_Licence/Tango.txt rename to dll/win32/shell32/res/icons/Icon_Licence/Tango.txt diff --git a/reactos/dll/win32/shell32/ros-systray.c b/dll/win32/shell32/ros-systray.c similarity index 100% rename from reactos/dll/win32/shell32/ros-systray.c rename to dll/win32/shell32/ros-systray.c diff --git a/reactos/dll/win32/shell32/she_ocmenu.c b/dll/win32/shell32/she_ocmenu.c similarity index 100% rename from reactos/dll/win32/shell32/she_ocmenu.c rename to dll/win32/shell32/she_ocmenu.c diff --git a/reactos/dll/win32/shell32/shell.c b/dll/win32/shell32/shell.c similarity index 100% rename from reactos/dll/win32/shell32/shell.c rename to dll/win32/shell32/shell.c diff --git a/reactos/dll/win32/shell32/shell.spec b/dll/win32/shell32/shell.spec similarity index 100% rename from reactos/dll/win32/shell32/shell.spec rename to dll/win32/shell32/shell.spec diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/dll/win32/shell32/shell32.rbuild similarity index 100% rename from reactos/dll/win32/shell32/shell32.rbuild rename to dll/win32/shell32/shell32.rbuild diff --git a/reactos/dll/win32/shell32/shell32.rc b/dll/win32/shell32/shell32.rc similarity index 100% rename from reactos/dll/win32/shell32/shell32.rc rename to dll/win32/shell32/shell32.rc diff --git a/reactos/dll/win32/shell32/shell32.spec b/dll/win32/shell32/shell32.spec similarity index 100% rename from reactos/dll/win32/shell32/shell32.spec rename to dll/win32/shell32/shell32.spec diff --git a/reactos/dll/win32/shell32/shell32_main.c b/dll/win32/shell32/shell32_main.c similarity index 100% rename from reactos/dll/win32/shell32/shell32_main.c rename to dll/win32/shell32/shell32_main.c diff --git a/reactos/dll/win32/shell32/shell32_main.h b/dll/win32/shell32/shell32_main.h similarity index 100% rename from reactos/dll/win32/shell32/shell32_main.h rename to dll/win32/shell32/shell32_main.h diff --git a/reactos/dll/win32/shell32/shellfolder.h b/dll/win32/shell32/shellfolder.h similarity index 100% rename from reactos/dll/win32/shell32/shellfolder.h rename to dll/win32/shell32/shellfolder.h diff --git a/reactos/dll/win32/shell32/shelllink.c b/dll/win32/shell32/shelllink.c similarity index 100% rename from reactos/dll/win32/shell32/shelllink.c rename to dll/win32/shell32/shelllink.c diff --git a/reactos/dll/win32/shell32/shellole.c b/dll/win32/shell32/shellole.c similarity index 100% rename from reactos/dll/win32/shell32/shellole.c rename to dll/win32/shell32/shellole.c diff --git a/reactos/dll/win32/shell32/shellord.c b/dll/win32/shell32/shellord.c similarity index 100% rename from reactos/dll/win32/shell32/shellord.c rename to dll/win32/shell32/shellord.c diff --git a/reactos/dll/win32/shell32/shellpath.c b/dll/win32/shell32/shellpath.c similarity index 100% rename from reactos/dll/win32/shell32/shellpath.c rename to dll/win32/shell32/shellpath.c diff --git a/reactos/dll/win32/shell32/shellreg.c b/dll/win32/shell32/shellreg.c similarity index 100% rename from reactos/dll/win32/shell32/shellreg.c rename to dll/win32/shell32/shellreg.c diff --git a/reactos/dll/win32/shell32/shellstring.c b/dll/win32/shell32/shellstring.c similarity index 100% rename from reactos/dll/win32/shell32/shellstring.c rename to dll/win32/shell32/shellstring.c diff --git a/reactos/dll/win32/shell32/shfldr.h b/dll/win32/shell32/shfldr.h similarity index 100% rename from reactos/dll/win32/shell32/shfldr.h rename to dll/win32/shell32/shfldr.h diff --git a/reactos/dll/win32/shell32/shfldr_admintools.c b/dll/win32/shell32/shfldr_admintools.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_admintools.c rename to dll/win32/shell32/shfldr_admintools.c diff --git a/reactos/dll/win32/shell32/shfldr_cpanel.c b/dll/win32/shell32/shfldr_cpanel.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_cpanel.c rename to dll/win32/shell32/shfldr_cpanel.c diff --git a/reactos/dll/win32/shell32/shfldr_desktop.c b/dll/win32/shell32/shfldr_desktop.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_desktop.c rename to dll/win32/shell32/shfldr_desktop.c diff --git a/reactos/dll/win32/shell32/shfldr_fonts.c b/dll/win32/shell32/shfldr_fonts.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_fonts.c rename to dll/win32/shell32/shfldr_fonts.c diff --git a/reactos/dll/win32/shell32/shfldr_fs.c b/dll/win32/shell32/shfldr_fs.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_fs.c rename to dll/win32/shell32/shfldr_fs.c diff --git a/reactos/dll/win32/shell32/shfldr_mycomp.c b/dll/win32/shell32/shfldr_mycomp.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_mycomp.c rename to dll/win32/shell32/shfldr_mycomp.c diff --git a/reactos/dll/win32/shell32/shfldr_mydocuments.c b/dll/win32/shell32/shfldr_mydocuments.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_mydocuments.c rename to dll/win32/shell32/shfldr_mydocuments.c diff --git a/reactos/dll/win32/shell32/shfldr_netplaces.c b/dll/win32/shell32/shfldr_netplaces.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_netplaces.c rename to dll/win32/shell32/shfldr_netplaces.c diff --git a/reactos/dll/win32/shell32/shfldr_printers.c b/dll/win32/shell32/shfldr_printers.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_printers.c rename to dll/win32/shell32/shfldr_printers.c diff --git a/reactos/dll/win32/shell32/shfldr_recyclebin.c b/dll/win32/shell32/shfldr_recyclebin.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_recyclebin.c rename to dll/win32/shell32/shfldr_recyclebin.c diff --git a/reactos/dll/win32/shell32/shfldr_unixfs.c b/dll/win32/shell32/shfldr_unixfs.c similarity index 100% rename from reactos/dll/win32/shell32/shfldr_unixfs.c rename to dll/win32/shell32/shfldr_unixfs.c diff --git a/reactos/dll/win32/shell32/shlexec.c b/dll/win32/shell32/shlexec.c similarity index 100% rename from reactos/dll/win32/shell32/shlexec.c rename to dll/win32/shell32/shlexec.c diff --git a/reactos/dll/win32/shell32/shlfileop.c b/dll/win32/shell32/shlfileop.c similarity index 100% rename from reactos/dll/win32/shell32/shlfileop.c rename to dll/win32/shell32/shlfileop.c diff --git a/reactos/dll/win32/shell32/shlfolder.c b/dll/win32/shell32/shlfolder.c similarity index 100% rename from reactos/dll/win32/shell32/shlfolder.c rename to dll/win32/shell32/shlfolder.c diff --git a/reactos/dll/win32/shell32/shlfsbind.c b/dll/win32/shell32/shlfsbind.c similarity index 100% rename from reactos/dll/win32/shell32/shlfsbind.c rename to dll/win32/shell32/shlfsbind.c diff --git a/reactos/dll/win32/shell32/shlmenu.c b/dll/win32/shell32/shlmenu.c similarity index 100% rename from reactos/dll/win32/shell32/shlmenu.c rename to dll/win32/shell32/shlmenu.c diff --git a/reactos/dll/win32/shell32/shlview.c b/dll/win32/shell32/shlview.c similarity index 100% rename from reactos/dll/win32/shell32/shlview.c rename to dll/win32/shell32/shlview.c diff --git a/reactos/dll/win32/shell32/shpolicy.c b/dll/win32/shell32/shpolicy.c similarity index 100% rename from reactos/dll/win32/shell32/shpolicy.c rename to dll/win32/shell32/shpolicy.c diff --git a/reactos/dll/win32/shell32/shresdef.h b/dll/win32/shell32/shresdef.h similarity index 100% rename from reactos/dll/win32/shell32/shresdef.h rename to dll/win32/shell32/shresdef.h diff --git a/reactos/dll/win32/shell32/shv_def_cmenu.c b/dll/win32/shell32/shv_def_cmenu.c similarity index 100% rename from reactos/dll/win32/shell32/shv_def_cmenu.c rename to dll/win32/shell32/shv_def_cmenu.c diff --git a/reactos/dll/win32/shell32/shv_item_new.c b/dll/win32/shell32/shv_item_new.c similarity index 100% rename from reactos/dll/win32/shell32/shv_item_new.c rename to dll/win32/shell32/shv_item_new.c diff --git a/reactos/dll/win32/shell32/startmenu.c b/dll/win32/shell32/startmenu.c similarity index 100% rename from reactos/dll/win32/shell32/startmenu.c rename to dll/win32/shell32/startmenu.c diff --git a/reactos/dll/win32/shell32/systray.c b/dll/win32/shell32/systray.c similarity index 100% rename from reactos/dll/win32/shell32/systray.c rename to dll/win32/shell32/systray.c diff --git a/reactos/dll/win32/shell32/undocshell.h b/dll/win32/shell32/undocshell.h similarity index 100% rename from reactos/dll/win32/shell32/undocshell.h rename to dll/win32/shell32/undocshell.h diff --git a/reactos/dll/win32/shell32/version.h b/dll/win32/shell32/version.h similarity index 100% rename from reactos/dll/win32/shell32/version.h rename to dll/win32/shell32/version.h diff --git a/reactos/dll/win32/shell32/version.rc b/dll/win32/shell32/version.rc similarity index 100% rename from reactos/dll/win32/shell32/version.rc rename to dll/win32/shell32/version.rc diff --git a/reactos/dll/win32/shell32/version16.rc b/dll/win32/shell32/version16.rc similarity index 100% rename from reactos/dll/win32/shell32/version16.rc rename to dll/win32/shell32/version16.rc diff --git a/reactos/dll/win32/shell32/xdg.h b/dll/win32/shell32/xdg.h similarity index 100% rename from reactos/dll/win32/shell32/xdg.h rename to dll/win32/shell32/xdg.h diff --git a/reactos/dll/win32/shfolder/shfolder.rbuild b/dll/win32/shfolder/shfolder.rbuild similarity index 100% rename from reactos/dll/win32/shfolder/shfolder.rbuild rename to dll/win32/shfolder/shfolder.rbuild diff --git a/reactos/dll/win32/shfolder/shfolder.spec b/dll/win32/shfolder/shfolder.spec similarity index 100% rename from reactos/dll/win32/shfolder/shfolder.spec rename to dll/win32/shfolder/shfolder.spec diff --git a/reactos/dll/win32/shfolder/version.rc b/dll/win32/shfolder/version.rc similarity index 100% rename from reactos/dll/win32/shfolder/version.rc rename to dll/win32/shfolder/version.rc diff --git a/reactos/dll/win32/shimgvw/lang/cs-CZ.rc b/dll/win32/shimgvw/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/shimgvw/lang/cs-CZ.rc rename to dll/win32/shimgvw/lang/cs-CZ.rc diff --git a/reactos/dll/win32/shimgvw/lang/de-DE.rc b/dll/win32/shimgvw/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/shimgvw/lang/de-DE.rc rename to dll/win32/shimgvw/lang/de-DE.rc diff --git a/reactos/dll/win32/shimgvw/lang/en-US.rc b/dll/win32/shimgvw/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/shimgvw/lang/en-US.rc rename to dll/win32/shimgvw/lang/en-US.rc diff --git a/reactos/dll/win32/shimgvw/lang/es-ES.rc b/dll/win32/shimgvw/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/shimgvw/lang/es-ES.rc rename to dll/win32/shimgvw/lang/es-ES.rc diff --git a/reactos/dll/win32/shimgvw/lang/lt-LT.rc b/dll/win32/shimgvw/lang/lt-LT.rc similarity index 100% rename from reactos/dll/win32/shimgvw/lang/lt-LT.rc rename to dll/win32/shimgvw/lang/lt-LT.rc diff --git a/reactos/dll/win32/shimgvw/lang/no-NO.rc b/dll/win32/shimgvw/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/shimgvw/lang/no-NO.rc rename to dll/win32/shimgvw/lang/no-NO.rc diff --git a/reactos/dll/win32/shimgvw/lang/ru-RU.rc b/dll/win32/shimgvw/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/shimgvw/lang/ru-RU.rc rename to dll/win32/shimgvw/lang/ru-RU.rc diff --git a/reactos/dll/win32/shimgvw/lang/sk-SK.rc b/dll/win32/shimgvw/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/shimgvw/lang/sk-SK.rc rename to dll/win32/shimgvw/lang/sk-SK.rc diff --git a/reactos/dll/win32/shimgvw/res/main.ico b/dll/win32/shimgvw/res/main.ico similarity index 100% rename from reactos/dll/win32/shimgvw/res/main.ico rename to dll/win32/shimgvw/res/main.ico diff --git a/reactos/dll/win32/shimgvw/res/next.bmp b/dll/win32/shimgvw/res/next.bmp similarity index 100% rename from reactos/dll/win32/shimgvw/res/next.bmp rename to dll/win32/shimgvw/res/next.bmp diff --git a/reactos/dll/win32/shimgvw/res/prev.bmp b/dll/win32/shimgvw/res/prev.bmp similarity index 100% rename from reactos/dll/win32/shimgvw/res/prev.bmp rename to dll/win32/shimgvw/res/prev.bmp diff --git a/reactos/dll/win32/shimgvw/res/print.bmp b/dll/win32/shimgvw/res/print.bmp similarity index 100% rename from reactos/dll/win32/shimgvw/res/print.bmp rename to dll/win32/shimgvw/res/print.bmp diff --git a/reactos/dll/win32/shimgvw/res/rot1.bmp b/dll/win32/shimgvw/res/rot1.bmp similarity index 100% rename from reactos/dll/win32/shimgvw/res/rot1.bmp rename to dll/win32/shimgvw/res/rot1.bmp diff --git a/reactos/dll/win32/shimgvw/res/rot2.bmp b/dll/win32/shimgvw/res/rot2.bmp similarity index 100% rename from reactos/dll/win32/shimgvw/res/rot2.bmp rename to dll/win32/shimgvw/res/rot2.bmp diff --git a/reactos/dll/win32/shimgvw/res/save.bmp b/dll/win32/shimgvw/res/save.bmp similarity index 100% rename from reactos/dll/win32/shimgvw/res/save.bmp rename to dll/win32/shimgvw/res/save.bmp diff --git a/reactos/dll/win32/shimgvw/res/zoomm.bmp b/dll/win32/shimgvw/res/zoomm.bmp similarity index 100% rename from reactos/dll/win32/shimgvw/res/zoomm.bmp rename to dll/win32/shimgvw/res/zoomm.bmp diff --git a/reactos/dll/win32/shimgvw/res/zoomp.bmp b/dll/win32/shimgvw/res/zoomp.bmp similarity index 100% rename from reactos/dll/win32/shimgvw/res/zoomp.bmp rename to dll/win32/shimgvw/res/zoomp.bmp diff --git a/reactos/dll/win32/shimgvw/resource.h b/dll/win32/shimgvw/resource.h similarity index 100% rename from reactos/dll/win32/shimgvw/resource.h rename to dll/win32/shimgvw/resource.h diff --git a/reactos/dll/win32/shimgvw/rsrc.rc b/dll/win32/shimgvw/rsrc.rc similarity index 100% rename from reactos/dll/win32/shimgvw/rsrc.rc rename to dll/win32/shimgvw/rsrc.rc diff --git a/reactos/dll/win32/shimgvw/shimgvw.c b/dll/win32/shimgvw/shimgvw.c similarity index 100% rename from reactos/dll/win32/shimgvw/shimgvw.c rename to dll/win32/shimgvw/shimgvw.c diff --git a/reactos/dll/win32/shimgvw/shimgvw.h b/dll/win32/shimgvw/shimgvw.h similarity index 100% rename from reactos/dll/win32/shimgvw/shimgvw.h rename to dll/win32/shimgvw/shimgvw.h diff --git a/reactos/dll/win32/shimgvw/shimgvw.rbuild b/dll/win32/shimgvw/shimgvw.rbuild similarity index 100% rename from reactos/dll/win32/shimgvw/shimgvw.rbuild rename to dll/win32/shimgvw/shimgvw.rbuild diff --git a/reactos/dll/win32/shimgvw/shimgvw.rc b/dll/win32/shimgvw/shimgvw.rc similarity index 100% rename from reactos/dll/win32/shimgvw/shimgvw.rc rename to dll/win32/shimgvw/shimgvw.rc diff --git a/reactos/dll/win32/shimgvw/shimgvw.spec b/dll/win32/shimgvw/shimgvw.spec similarity index 100% rename from reactos/dll/win32/shimgvw/shimgvw.spec rename to dll/win32/shimgvw/shimgvw.spec diff --git a/reactos/dll/win32/shlwapi/assoc.c b/dll/win32/shlwapi/assoc.c similarity index 100% rename from reactos/dll/win32/shlwapi/assoc.c rename to dll/win32/shlwapi/assoc.c diff --git a/reactos/dll/win32/shlwapi/clist.c b/dll/win32/shlwapi/clist.c similarity index 100% rename from reactos/dll/win32/shlwapi/clist.c rename to dll/win32/shlwapi/clist.c diff --git a/reactos/dll/win32/shlwapi/istream.c b/dll/win32/shlwapi/istream.c similarity index 100% rename from reactos/dll/win32/shlwapi/istream.c rename to dll/win32/shlwapi/istream.c diff --git a/reactos/dll/win32/shlwapi/msgbox.c b/dll/win32/shlwapi/msgbox.c similarity index 100% rename from reactos/dll/win32/shlwapi/msgbox.c rename to dll/win32/shlwapi/msgbox.c diff --git a/reactos/dll/win32/shlwapi/ordinal.c b/dll/win32/shlwapi/ordinal.c similarity index 100% rename from reactos/dll/win32/shlwapi/ordinal.c rename to dll/win32/shlwapi/ordinal.c diff --git a/reactos/dll/win32/shlwapi/path.c b/dll/win32/shlwapi/path.c similarity index 100% rename from reactos/dll/win32/shlwapi/path.c rename to dll/win32/shlwapi/path.c diff --git a/reactos/dll/win32/shlwapi/reg.c b/dll/win32/shlwapi/reg.c similarity index 100% rename from reactos/dll/win32/shlwapi/reg.c rename to dll/win32/shlwapi/reg.c diff --git a/reactos/dll/win32/shlwapi/regstream.c b/dll/win32/shlwapi/regstream.c similarity index 100% rename from reactos/dll/win32/shlwapi/regstream.c rename to dll/win32/shlwapi/regstream.c diff --git a/reactos/dll/win32/shlwapi/resource.h b/dll/win32/shlwapi/resource.h similarity index 100% rename from reactos/dll/win32/shlwapi/resource.h rename to dll/win32/shlwapi/resource.h diff --git a/reactos/dll/win32/shlwapi/shlwapi.rbuild b/dll/win32/shlwapi/shlwapi.rbuild similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi.rbuild rename to dll/win32/shlwapi/shlwapi.rbuild diff --git a/reactos/dll/win32/shlwapi/shlwapi.rc b/dll/win32/shlwapi/shlwapi.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi.rc rename to dll/win32/shlwapi/shlwapi.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi.spec b/dll/win32/shlwapi/shlwapi.spec similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi.spec rename to dll/win32/shlwapi/shlwapi.spec diff --git a/reactos/dll/win32/shlwapi/shlwapi_Da.rc b/dll/win32/shlwapi/shlwapi_Da.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Da.rc rename to dll/win32/shlwapi/shlwapi_Da.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_De.rc b/dll/win32/shlwapi/shlwapi_De.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_De.rc rename to dll/win32/shlwapi/shlwapi_De.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_En.rc b/dll/win32/shlwapi/shlwapi_En.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_En.rc rename to dll/win32/shlwapi/shlwapi_En.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Eo.rc b/dll/win32/shlwapi/shlwapi_Eo.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Eo.rc rename to dll/win32/shlwapi/shlwapi_Eo.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Es.rc b/dll/win32/shlwapi/shlwapi_Es.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Es.rc rename to dll/win32/shlwapi/shlwapi_Es.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Fi.rc b/dll/win32/shlwapi/shlwapi_Fi.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Fi.rc rename to dll/win32/shlwapi/shlwapi_Fi.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Fr.rc b/dll/win32/shlwapi/shlwapi_Fr.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Fr.rc rename to dll/win32/shlwapi/shlwapi_Fr.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Hu.rc b/dll/win32/shlwapi/shlwapi_Hu.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Hu.rc rename to dll/win32/shlwapi/shlwapi_Hu.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_It.rc b/dll/win32/shlwapi/shlwapi_It.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_It.rc rename to dll/win32/shlwapi/shlwapi_It.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Ja.rc b/dll/win32/shlwapi/shlwapi_Ja.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Ja.rc rename to dll/win32/shlwapi/shlwapi_Ja.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Ko.rc b/dll/win32/shlwapi/shlwapi_Ko.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Ko.rc rename to dll/win32/shlwapi/shlwapi_Ko.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Nl.rc b/dll/win32/shlwapi/shlwapi_Nl.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Nl.rc rename to dll/win32/shlwapi/shlwapi_Nl.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_No.rc b/dll/win32/shlwapi/shlwapi_No.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_No.rc rename to dll/win32/shlwapi/shlwapi_No.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Pl.rc b/dll/win32/shlwapi/shlwapi_Pl.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Pl.rc rename to dll/win32/shlwapi/shlwapi_Pl.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Pt.rc b/dll/win32/shlwapi/shlwapi_Pt.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Pt.rc rename to dll/win32/shlwapi/shlwapi_Pt.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Ro.rc b/dll/win32/shlwapi/shlwapi_Ro.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Ro.rc rename to dll/win32/shlwapi/shlwapi_Ro.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Ru.rc b/dll/win32/shlwapi/shlwapi_Ru.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Ru.rc rename to dll/win32/shlwapi/shlwapi_Ru.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Si.rc b/dll/win32/shlwapi/shlwapi_Si.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Si.rc rename to dll/win32/shlwapi/shlwapi_Si.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Sv.rc b/dll/win32/shlwapi/shlwapi_Sv.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Sv.rc rename to dll/win32/shlwapi/shlwapi_Sv.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Tr.rc b/dll/win32/shlwapi/shlwapi_Tr.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Tr.rc rename to dll/win32/shlwapi/shlwapi_Tr.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Uk.rc b/dll/win32/shlwapi/shlwapi_Uk.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Uk.rc rename to dll/win32/shlwapi/shlwapi_Uk.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_Zh.rc b/dll/win32/shlwapi/shlwapi_Zh.rc similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_Zh.rc rename to dll/win32/shlwapi/shlwapi_Zh.rc diff --git a/reactos/dll/win32/shlwapi/shlwapi_main.c b/dll/win32/shlwapi/shlwapi_main.c similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_main.c rename to dll/win32/shlwapi/shlwapi_main.c diff --git a/reactos/dll/win32/shlwapi/shlwapi_ros.diff b/dll/win32/shlwapi/shlwapi_ros.diff similarity index 100% rename from reactos/dll/win32/shlwapi/shlwapi_ros.diff rename to dll/win32/shlwapi/shlwapi_ros.diff diff --git a/reactos/dll/win32/shlwapi/stopwatch.c b/dll/win32/shlwapi/stopwatch.c similarity index 100% rename from reactos/dll/win32/shlwapi/stopwatch.c rename to dll/win32/shlwapi/stopwatch.c diff --git a/reactos/dll/win32/shlwapi/string.c b/dll/win32/shlwapi/string.c similarity index 100% rename from reactos/dll/win32/shlwapi/string.c rename to dll/win32/shlwapi/string.c diff --git a/reactos/dll/win32/shlwapi/thread.c b/dll/win32/shlwapi/thread.c similarity index 100% rename from reactos/dll/win32/shlwapi/thread.c rename to dll/win32/shlwapi/thread.c diff --git a/reactos/dll/win32/shlwapi/url.c b/dll/win32/shlwapi/url.c similarity index 100% rename from reactos/dll/win32/shlwapi/url.c rename to dll/win32/shlwapi/url.c diff --git a/reactos/dll/win32/shlwapi/version.rc b/dll/win32/shlwapi/version.rc similarity index 100% rename from reactos/dll/win32/shlwapi/version.rc rename to dll/win32/shlwapi/version.rc diff --git a/reactos/dll/win32/shlwapi/wsprintf.c b/dll/win32/shlwapi/wsprintf.c similarity index 100% rename from reactos/dll/win32/shlwapi/wsprintf.c rename to dll/win32/shlwapi/wsprintf.c diff --git a/reactos/dll/win32/smdll/dllmain.c b/dll/win32/smdll/dllmain.c similarity index 100% rename from reactos/dll/win32/smdll/dllmain.c rename to dll/win32/smdll/dllmain.c diff --git a/reactos/dll/win32/smdll/query.c b/dll/win32/smdll/query.c similarity index 100% rename from reactos/dll/win32/smdll/query.c rename to dll/win32/smdll/query.c diff --git a/reactos/dll/win32/smdll/readme.txt b/dll/win32/smdll/readme.txt similarity index 100% rename from reactos/dll/win32/smdll/readme.txt rename to dll/win32/smdll/readme.txt diff --git a/reactos/dll/win32/smdll/smdll.def b/dll/win32/smdll/smdll.def similarity index 100% rename from reactos/dll/win32/smdll/smdll.def rename to dll/win32/smdll/smdll.def diff --git a/reactos/dll/win32/smdll/smdll.rbuild b/dll/win32/smdll/smdll.rbuild similarity index 100% rename from reactos/dll/win32/smdll/smdll.rbuild rename to dll/win32/smdll/smdll.rbuild diff --git a/reactos/dll/win32/smdll/smdll.rc b/dll/win32/smdll/smdll.rc similarity index 100% rename from reactos/dll/win32/smdll/smdll.rc rename to dll/win32/smdll/smdll.rc diff --git a/reactos/dll/win32/snmpapi/debug.h b/dll/win32/snmpapi/debug.h similarity index 100% rename from reactos/dll/win32/snmpapi/debug.h rename to dll/win32/snmpapi/debug.h diff --git a/reactos/dll/win32/snmpapi/snmpapi.c b/dll/win32/snmpapi/snmpapi.c similarity index 100% rename from reactos/dll/win32/snmpapi/snmpapi.c rename to dll/win32/snmpapi/snmpapi.c diff --git a/reactos/dll/win32/snmpapi/snmpapi.rbuild b/dll/win32/snmpapi/snmpapi.rbuild similarity index 100% rename from reactos/dll/win32/snmpapi/snmpapi.rbuild rename to dll/win32/snmpapi/snmpapi.rbuild diff --git a/reactos/dll/win32/snmpapi/snmpapi.rc b/dll/win32/snmpapi/snmpapi.rc similarity index 100% rename from reactos/dll/win32/snmpapi/snmpapi.rc rename to dll/win32/snmpapi/snmpapi.rc diff --git a/reactos/dll/win32/snmpapi/snmpapi.spec b/dll/win32/snmpapi/snmpapi.spec similarity index 100% rename from reactos/dll/win32/snmpapi/snmpapi.spec rename to dll/win32/snmpapi/snmpapi.spec diff --git a/reactos/dll/win32/stdole2.tlb/rsrc.rc b/dll/win32/stdole2.tlb/rsrc.rc similarity index 100% rename from reactos/dll/win32/stdole2.tlb/rsrc.rc rename to dll/win32/stdole2.tlb/rsrc.rc diff --git a/reactos/dll/win32/stdole2.tlb/std_ole_v2.idl b/dll/win32/stdole2.tlb/std_ole_v2.idl similarity index 100% rename from reactos/dll/win32/stdole2.tlb/std_ole_v2.idl rename to dll/win32/stdole2.tlb/std_ole_v2.idl diff --git a/reactos/dll/win32/stdole2.tlb/stdole2.rbuild b/dll/win32/stdole2.tlb/stdole2.rbuild similarity index 100% rename from reactos/dll/win32/stdole2.tlb/stdole2.rbuild rename to dll/win32/stdole2.tlb/stdole2.rbuild diff --git a/reactos/dll/win32/stdole2.tlb/stdole2.tlb.spec b/dll/win32/stdole2.tlb/stdole2.tlb.spec similarity index 100% rename from reactos/dll/win32/stdole2.tlb/stdole2.tlb.spec rename to dll/win32/stdole2.tlb/stdole2.tlb.spec diff --git a/reactos/dll/win32/stdole32.tlb/rsrc.rc b/dll/win32/stdole32.tlb/rsrc.rc similarity index 100% rename from reactos/dll/win32/stdole32.tlb/rsrc.rc rename to dll/win32/stdole32.tlb/rsrc.rc diff --git a/reactos/dll/win32/stdole32.tlb/std_ole_v1.idl b/dll/win32/stdole32.tlb/std_ole_v1.idl similarity index 100% rename from reactos/dll/win32/stdole32.tlb/std_ole_v1.idl rename to dll/win32/stdole32.tlb/std_ole_v1.idl diff --git a/reactos/dll/win32/stdole32.tlb/stdole32.rbuild b/dll/win32/stdole32.tlb/stdole32.rbuild similarity index 100% rename from reactos/dll/win32/stdole32.tlb/stdole32.rbuild rename to dll/win32/stdole32.tlb/stdole32.rbuild diff --git a/reactos/dll/win32/stdole32.tlb/stdole32.tlb.spec b/dll/win32/stdole32.tlb/stdole32.tlb.spec similarity index 100% rename from reactos/dll/win32/stdole32.tlb/stdole32.tlb.spec rename to dll/win32/stdole32.tlb/stdole32.tlb.spec diff --git a/reactos/dll/win32/sxs/sxs.c b/dll/win32/sxs/sxs.c similarity index 100% rename from reactos/dll/win32/sxs/sxs.c rename to dll/win32/sxs/sxs.c diff --git a/reactos/dll/win32/sxs/sxs.rbuild b/dll/win32/sxs/sxs.rbuild similarity index 100% rename from reactos/dll/win32/sxs/sxs.rbuild rename to dll/win32/sxs/sxs.rbuild diff --git a/reactos/dll/win32/sxs/sxs.spec b/dll/win32/sxs/sxs.spec similarity index 100% rename from reactos/dll/win32/sxs/sxs.spec rename to dll/win32/sxs/sxs.spec diff --git a/reactos/dll/win32/syssetup/COPYING b/dll/win32/syssetup/COPYING similarity index 100% rename from reactos/dll/win32/syssetup/COPYING rename to dll/win32/syssetup/COPYING diff --git a/reactos/dll/win32/syssetup/classinst.c b/dll/win32/syssetup/classinst.c similarity index 100% rename from reactos/dll/win32/syssetup/classinst.c rename to dll/win32/syssetup/classinst.c diff --git a/reactos/dll/win32/syssetup/dllmain.c b/dll/win32/syssetup/dllmain.c similarity index 100% rename from reactos/dll/win32/syssetup/dllmain.c rename to dll/win32/syssetup/dllmain.c diff --git a/reactos/dll/win32/syssetup/globals.h b/dll/win32/syssetup/globals.h similarity index 100% rename from reactos/dll/win32/syssetup/globals.h rename to dll/win32/syssetup/globals.h diff --git a/reactos/dll/win32/syssetup/install.c b/dll/win32/syssetup/install.c similarity index 100% rename from reactos/dll/win32/syssetup/install.c rename to dll/win32/syssetup/install.c diff --git a/reactos/dll/win32/syssetup/lang/bg-BG.rc b/dll/win32/syssetup/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/bg-BG.rc rename to dll/win32/syssetup/lang/bg-BG.rc diff --git a/reactos/dll/win32/syssetup/lang/cs-CZ.rc b/dll/win32/syssetup/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/cs-CZ.rc rename to dll/win32/syssetup/lang/cs-CZ.rc diff --git a/reactos/dll/win32/syssetup/lang/de-DE.rc b/dll/win32/syssetup/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/de-DE.rc rename to dll/win32/syssetup/lang/de-DE.rc diff --git a/reactos/dll/win32/syssetup/lang/el-GR.rc b/dll/win32/syssetup/lang/el-GR.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/el-GR.rc rename to dll/win32/syssetup/lang/el-GR.rc diff --git a/reactos/dll/win32/syssetup/lang/en-US.rc b/dll/win32/syssetup/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/en-US.rc rename to dll/win32/syssetup/lang/en-US.rc diff --git a/reactos/dll/win32/syssetup/lang/es-ES.rc b/dll/win32/syssetup/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/es-ES.rc rename to dll/win32/syssetup/lang/es-ES.rc diff --git a/reactos/dll/win32/syssetup/lang/fr-FR.rc b/dll/win32/syssetup/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/fr-FR.rc rename to dll/win32/syssetup/lang/fr-FR.rc diff --git a/reactos/dll/win32/syssetup/lang/hu-HU.rc b/dll/win32/syssetup/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/hu-HU.rc rename to dll/win32/syssetup/lang/hu-HU.rc diff --git a/reactos/dll/win32/syssetup/lang/id-ID.rc b/dll/win32/syssetup/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/id-ID.rc rename to dll/win32/syssetup/lang/id-ID.rc diff --git a/reactos/dll/win32/syssetup/lang/it-IT.rc b/dll/win32/syssetup/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/it-IT.rc rename to dll/win32/syssetup/lang/it-IT.rc diff --git a/reactos/dll/win32/syssetup/lang/ja-JP.rc b/dll/win32/syssetup/lang/ja-JP.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/ja-JP.rc rename to dll/win32/syssetup/lang/ja-JP.rc diff --git a/reactos/dll/win32/syssetup/lang/nl-NL.rc b/dll/win32/syssetup/lang/nl-NL.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/nl-NL.rc rename to dll/win32/syssetup/lang/nl-NL.rc diff --git a/reactos/dll/win32/syssetup/lang/no-NO.rc b/dll/win32/syssetup/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/no-NO.rc rename to dll/win32/syssetup/lang/no-NO.rc diff --git a/reactos/dll/win32/syssetup/lang/pl-PL.rc b/dll/win32/syssetup/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/pl-PL.rc rename to dll/win32/syssetup/lang/pl-PL.rc diff --git a/reactos/dll/win32/syssetup/lang/ru-RU.rc b/dll/win32/syssetup/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/ru-RU.rc rename to dll/win32/syssetup/lang/ru-RU.rc diff --git a/reactos/dll/win32/syssetup/lang/sk-SK.rc b/dll/win32/syssetup/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/sk-SK.rc rename to dll/win32/syssetup/lang/sk-SK.rc diff --git a/reactos/dll/win32/syssetup/lang/uk-UA.rc b/dll/win32/syssetup/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/uk-UA.rc rename to dll/win32/syssetup/lang/uk-UA.rc diff --git a/reactos/dll/win32/syssetup/lang/zh-CN.rc b/dll/win32/syssetup/lang/zh-CN.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/zh-CN.rc rename to dll/win32/syssetup/lang/zh-CN.rc diff --git a/reactos/dll/win32/syssetup/logfile.c b/dll/win32/syssetup/logfile.c similarity index 100% rename from reactos/dll/win32/syssetup/logfile.c rename to dll/win32/syssetup/logfile.c diff --git a/reactos/dll/win32/syssetup/resource.h b/dll/win32/syssetup/resource.h similarity index 100% rename from reactos/dll/win32/syssetup/resource.h rename to dll/win32/syssetup/resource.h diff --git a/reactos/dll/win32/syssetup/resources/header.bmp b/dll/win32/syssetup/resources/header.bmp similarity index 100% rename from reactos/dll/win32/syssetup/resources/header.bmp rename to dll/win32/syssetup/resources/header.bmp diff --git a/reactos/dll/win32/syssetup/resources/watermark.bmp b/dll/win32/syssetup/resources/watermark.bmp similarity index 100% rename from reactos/dll/win32/syssetup/resources/watermark.bmp rename to dll/win32/syssetup/resources/watermark.bmp diff --git a/reactos/dll/win32/syssetup/syssetup.def b/dll/win32/syssetup/syssetup.def similarity index 100% rename from reactos/dll/win32/syssetup/syssetup.def rename to dll/win32/syssetup/syssetup.def diff --git a/reactos/dll/win32/syssetup/syssetup.rbuild b/dll/win32/syssetup/syssetup.rbuild similarity index 100% rename from reactos/dll/win32/syssetup/syssetup.rbuild rename to dll/win32/syssetup/syssetup.rbuild diff --git a/reactos/dll/win32/syssetup/syssetup.rc b/dll/win32/syssetup/syssetup.rc similarity index 100% rename from reactos/dll/win32/syssetup/syssetup.rc rename to dll/win32/syssetup/syssetup.rc diff --git a/reactos/dll/win32/syssetup/wizard.c b/dll/win32/syssetup/wizard.c similarity index 100% rename from reactos/dll/win32/syssetup/wizard.c rename to dll/win32/syssetup/wizard.c diff --git a/reactos/dll/win32/tapi32/assisted.c b/dll/win32/tapi32/assisted.c similarity index 100% rename from reactos/dll/win32/tapi32/assisted.c rename to dll/win32/tapi32/assisted.c diff --git a/reactos/dll/win32/tapi32/line.c b/dll/win32/tapi32/line.c similarity index 100% rename from reactos/dll/win32/tapi32/line.c rename to dll/win32/tapi32/line.c diff --git a/reactos/dll/win32/tapi32/phone.c b/dll/win32/tapi32/phone.c similarity index 100% rename from reactos/dll/win32/tapi32/phone.c rename to dll/win32/tapi32/phone.c diff --git a/reactos/dll/win32/tapi32/tapi32.rbuild b/dll/win32/tapi32/tapi32.rbuild similarity index 100% rename from reactos/dll/win32/tapi32/tapi32.rbuild rename to dll/win32/tapi32/tapi32.rbuild diff --git a/reactos/dll/win32/tapi32/tapi32.spec b/dll/win32/tapi32/tapi32.spec similarity index 100% rename from reactos/dll/win32/tapi32/tapi32.spec rename to dll/win32/tapi32/tapi32.spec diff --git a/reactos/dll/win32/tapiui/lang/de-DE.rc b/dll/win32/tapiui/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/tapiui/lang/de-DE.rc rename to dll/win32/tapiui/lang/de-DE.rc diff --git a/reactos/dll/win32/tapiui/lang/en-US.rc b/dll/win32/tapiui/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/tapiui/lang/en-US.rc rename to dll/win32/tapiui/lang/en-US.rc diff --git a/reactos/dll/win32/tapiui/lang/no-NO.rc b/dll/win32/tapiui/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/tapiui/lang/no-NO.rc rename to dll/win32/tapiui/lang/no-NO.rc diff --git a/reactos/dll/win32/tapiui/lang/pl-PL.rc b/dll/win32/tapiui/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/tapiui/lang/pl-PL.rc rename to dll/win32/tapiui/lang/pl-PL.rc diff --git a/reactos/dll/win32/tapiui/lang/ru-RU.rc b/dll/win32/tapiui/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/tapiui/lang/ru-RU.rc rename to dll/win32/tapiui/lang/ru-RU.rc diff --git a/reactos/dll/win32/tapiui/lang/uk-UA.rc b/dll/win32/tapiui/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/tapiui/lang/uk-UA.rc rename to dll/win32/tapiui/lang/uk-UA.rc diff --git a/reactos/dll/win32/tapiui/res/201.ico b/dll/win32/tapiui/res/201.ico similarity index 100% rename from reactos/dll/win32/tapiui/res/201.ico rename to dll/win32/tapiui/res/201.ico diff --git a/reactos/dll/win32/tapiui/res/202.ico b/dll/win32/tapiui/res/202.ico similarity index 100% rename from reactos/dll/win32/tapiui/res/202.ico rename to dll/win32/tapiui/res/202.ico diff --git a/reactos/dll/win32/tapiui/res/203.ico b/dll/win32/tapiui/res/203.ico similarity index 100% rename from reactos/dll/win32/tapiui/res/203.ico rename to dll/win32/tapiui/res/203.ico diff --git a/reactos/dll/win32/tapiui/res/301.bmp b/dll/win32/tapiui/res/301.bmp similarity index 100% rename from reactos/dll/win32/tapiui/res/301.bmp rename to dll/win32/tapiui/res/301.bmp diff --git a/reactos/dll/win32/tapiui/res/302.bmp b/dll/win32/tapiui/res/302.bmp similarity index 100% rename from reactos/dll/win32/tapiui/res/302.bmp rename to dll/win32/tapiui/res/302.bmp diff --git a/reactos/dll/win32/tapiui/res/504.ico b/dll/win32/tapiui/res/504.ico similarity index 100% rename from reactos/dll/win32/tapiui/res/504.ico rename to dll/win32/tapiui/res/504.ico diff --git a/reactos/dll/win32/tapiui/resource.h b/dll/win32/tapiui/resource.h similarity index 100% rename from reactos/dll/win32/tapiui/resource.h rename to dll/win32/tapiui/resource.h diff --git a/reactos/dll/win32/tapiui/tapiui.rbuild b/dll/win32/tapiui/tapiui.rbuild similarity index 100% rename from reactos/dll/win32/tapiui/tapiui.rbuild rename to dll/win32/tapiui/tapiui.rbuild diff --git a/reactos/dll/win32/tapiui/tapiui.rc b/dll/win32/tapiui/tapiui.rc similarity index 100% rename from reactos/dll/win32/tapiui/tapiui.rc rename to dll/win32/tapiui/tapiui.rc diff --git a/reactos/dll/win32/twain_32/Makefile.in b/dll/win32/twain_32/Makefile.in similarity index 100% rename from reactos/dll/win32/twain_32/Makefile.in rename to dll/win32/twain_32/Makefile.in diff --git a/reactos/dll/win32/twain_32/README b/dll/win32/twain_32/README similarity index 100% rename from reactos/dll/win32/twain_32/README rename to dll/win32/twain_32/README diff --git a/reactos/dll/win32/twain_32/TWAIN b/dll/win32/twain_32/TWAIN similarity index 100% rename from reactos/dll/win32/twain_32/TWAIN rename to dll/win32/twain_32/TWAIN diff --git a/reactos/dll/win32/twain_32/capability.c b/dll/win32/twain_32/capability.c similarity index 100% rename from reactos/dll/win32/twain_32/capability.c rename to dll/win32/twain_32/capability.c diff --git a/reactos/dll/win32/twain_32/ds_audio.c b/dll/win32/twain_32/ds_audio.c similarity index 100% rename from reactos/dll/win32/twain_32/ds_audio.c rename to dll/win32/twain_32/ds_audio.c diff --git a/reactos/dll/win32/twain_32/ds_ctrl.c b/dll/win32/twain_32/ds_ctrl.c similarity index 100% rename from reactos/dll/win32/twain_32/ds_ctrl.c rename to dll/win32/twain_32/ds_ctrl.c diff --git a/reactos/dll/win32/twain_32/ds_image.c b/dll/win32/twain_32/ds_image.c similarity index 100% rename from reactos/dll/win32/twain_32/ds_image.c rename to dll/win32/twain_32/ds_image.c diff --git a/reactos/dll/win32/twain_32/dsm_ctrl.c b/dll/win32/twain_32/dsm_ctrl.c similarity index 100% rename from reactos/dll/win32/twain_32/dsm_ctrl.c rename to dll/win32/twain_32/dsm_ctrl.c diff --git a/reactos/dll/win32/twain_32/twain.h b/dll/win32/twain_32/twain.h similarity index 100% rename from reactos/dll/win32/twain_32/twain.h rename to dll/win32/twain_32/twain.h diff --git a/reactos/dll/win32/twain_32/twain32_main.c b/dll/win32/twain_32/twain32_main.c similarity index 100% rename from reactos/dll/win32/twain_32/twain32_main.c rename to dll/win32/twain_32/twain32_main.c diff --git a/reactos/dll/win32/twain_32/twain_32.def b/dll/win32/twain_32/twain_32.def similarity index 100% rename from reactos/dll/win32/twain_32/twain_32.def rename to dll/win32/twain_32/twain_32.def diff --git a/reactos/dll/win32/twain_32/twain_32.rbuild b/dll/win32/twain_32/twain_32.rbuild similarity index 100% rename from reactos/dll/win32/twain_32/twain_32.rbuild rename to dll/win32/twain_32/twain_32.rbuild diff --git a/reactos/dll/win32/twain_32/twain_32.rc b/dll/win32/twain_32/twain_32.rc similarity index 100% rename from reactos/dll/win32/twain_32/twain_32.rc rename to dll/win32/twain_32/twain_32.rc diff --git a/reactos/dll/win32/twain_32/twain_i.h b/dll/win32/twain_32/twain_i.h similarity index 100% rename from reactos/dll/win32/twain_32/twain_i.h rename to dll/win32/twain_32/twain_i.h diff --git a/reactos/dll/win32/uext2/uext2.c b/dll/win32/uext2/uext2.c similarity index 100% rename from reactos/dll/win32/uext2/uext2.c rename to dll/win32/uext2/uext2.c diff --git a/reactos/dll/win32/uext2/uext2.def b/dll/win32/uext2/uext2.def similarity index 100% rename from reactos/dll/win32/uext2/uext2.def rename to dll/win32/uext2/uext2.def diff --git a/reactos/dll/win32/uext2/uext2.rbuild b/dll/win32/uext2/uext2.rbuild similarity index 100% rename from reactos/dll/win32/uext2/uext2.rbuild rename to dll/win32/uext2/uext2.rbuild diff --git a/reactos/dll/win32/uext2/uext2.rc b/dll/win32/uext2/uext2.rc similarity index 100% rename from reactos/dll/win32/uext2/uext2.rc rename to dll/win32/uext2/uext2.rc diff --git a/reactos/dll/win32/ufat/ufat.c b/dll/win32/ufat/ufat.c similarity index 100% rename from reactos/dll/win32/ufat/ufat.c rename to dll/win32/ufat/ufat.c diff --git a/reactos/dll/win32/ufat/ufat.def b/dll/win32/ufat/ufat.def similarity index 100% rename from reactos/dll/win32/ufat/ufat.def rename to dll/win32/ufat/ufat.def diff --git a/reactos/dll/win32/ufat/ufat.rbuild b/dll/win32/ufat/ufat.rbuild similarity index 100% rename from reactos/dll/win32/ufat/ufat.rbuild rename to dll/win32/ufat/ufat.rbuild diff --git a/reactos/dll/win32/ufat/ufat.rc b/dll/win32/ufat/ufat.rc similarity index 100% rename from reactos/dll/win32/ufat/ufat.rc rename to dll/win32/ufat/ufat.rc diff --git a/reactos/dll/win32/ufatx/ufatx.def b/dll/win32/ufatx/ufatx.def similarity index 100% rename from reactos/dll/win32/ufatx/ufatx.def rename to dll/win32/ufatx/ufatx.def diff --git a/reactos/dll/win32/ufatx/ufatx.rbuild b/dll/win32/ufatx/ufatx.rbuild similarity index 100% rename from reactos/dll/win32/ufatx/ufatx.rbuild rename to dll/win32/ufatx/ufatx.rbuild diff --git a/reactos/dll/win32/ufatx/ufatx.rc b/dll/win32/ufatx/ufatx.rc similarity index 100% rename from reactos/dll/win32/ufatx/ufatx.rc rename to dll/win32/ufatx/ufatx.rc diff --git a/reactos/dll/win32/untfs/untfs.c b/dll/win32/untfs/untfs.c similarity index 100% rename from reactos/dll/win32/untfs/untfs.c rename to dll/win32/untfs/untfs.c diff --git a/reactos/dll/win32/untfs/untfs.def b/dll/win32/untfs/untfs.def similarity index 100% rename from reactos/dll/win32/untfs/untfs.def rename to dll/win32/untfs/untfs.def diff --git a/reactos/dll/win32/untfs/untfs.rbuild b/dll/win32/untfs/untfs.rbuild similarity index 100% rename from reactos/dll/win32/untfs/untfs.rbuild rename to dll/win32/untfs/untfs.rbuild diff --git a/reactos/dll/win32/untfs/untfs.rc b/dll/win32/untfs/untfs.rc similarity index 100% rename from reactos/dll/win32/untfs/untfs.rc rename to dll/win32/untfs/untfs.rc diff --git a/reactos/dll/win32/urlmon/bindctx.c b/dll/win32/urlmon/bindctx.c similarity index 100% rename from reactos/dll/win32/urlmon/bindctx.c rename to dll/win32/urlmon/bindctx.c diff --git a/reactos/dll/win32/urlmon/binding.c b/dll/win32/urlmon/binding.c similarity index 100% rename from reactos/dll/win32/urlmon/binding.c rename to dll/win32/urlmon/binding.c diff --git a/reactos/dll/win32/urlmon/bindprot.c b/dll/win32/urlmon/bindprot.c similarity index 100% rename from reactos/dll/win32/urlmon/bindprot.c rename to dll/win32/urlmon/bindprot.c diff --git a/reactos/dll/win32/urlmon/download.c b/dll/win32/urlmon/download.c similarity index 100% rename from reactos/dll/win32/urlmon/download.c rename to dll/win32/urlmon/download.c diff --git a/reactos/dll/win32/urlmon/file.c b/dll/win32/urlmon/file.c similarity index 100% rename from reactos/dll/win32/urlmon/file.c rename to dll/win32/urlmon/file.c diff --git a/reactos/dll/win32/urlmon/format.c b/dll/win32/urlmon/format.c similarity index 100% rename from reactos/dll/win32/urlmon/format.c rename to dll/win32/urlmon/format.c diff --git a/reactos/dll/win32/urlmon/ftp.c b/dll/win32/urlmon/ftp.c similarity index 100% rename from reactos/dll/win32/urlmon/ftp.c rename to dll/win32/urlmon/ftp.c diff --git a/reactos/dll/win32/urlmon/http.c b/dll/win32/urlmon/http.c similarity index 100% rename from reactos/dll/win32/urlmon/http.c rename to dll/win32/urlmon/http.c diff --git a/reactos/dll/win32/urlmon/internet.c b/dll/win32/urlmon/internet.c similarity index 100% rename from reactos/dll/win32/urlmon/internet.c rename to dll/win32/urlmon/internet.c diff --git a/reactos/dll/win32/urlmon/mk.c b/dll/win32/urlmon/mk.c similarity index 100% rename from reactos/dll/win32/urlmon/mk.c rename to dll/win32/urlmon/mk.c diff --git a/reactos/dll/win32/urlmon/regsvr.c b/dll/win32/urlmon/regsvr.c similarity index 100% rename from reactos/dll/win32/urlmon/regsvr.c rename to dll/win32/urlmon/regsvr.c diff --git a/reactos/dll/win32/urlmon/rsrc.rc b/dll/win32/urlmon/rsrc.rc similarity index 100% rename from reactos/dll/win32/urlmon/rsrc.rc rename to dll/win32/urlmon/rsrc.rc diff --git a/reactos/dll/win32/urlmon/sec_mgr.c b/dll/win32/urlmon/sec_mgr.c similarity index 100% rename from reactos/dll/win32/urlmon/sec_mgr.c rename to dll/win32/urlmon/sec_mgr.c diff --git a/reactos/dll/win32/urlmon/session.c b/dll/win32/urlmon/session.c similarity index 100% rename from reactos/dll/win32/urlmon/session.c rename to dll/win32/urlmon/session.c diff --git a/reactos/dll/win32/urlmon/umon.c b/dll/win32/urlmon/umon.c similarity index 100% rename from reactos/dll/win32/urlmon/umon.c rename to dll/win32/urlmon/umon.c diff --git a/reactos/dll/win32/urlmon/umstream.c b/dll/win32/urlmon/umstream.c similarity index 100% rename from reactos/dll/win32/urlmon/umstream.c rename to dll/win32/urlmon/umstream.c diff --git a/reactos/dll/win32/urlmon/urlmon.inf b/dll/win32/urlmon/urlmon.inf similarity index 100% rename from reactos/dll/win32/urlmon/urlmon.inf rename to dll/win32/urlmon/urlmon.inf diff --git a/reactos/dll/win32/urlmon/urlmon.rbuild b/dll/win32/urlmon/urlmon.rbuild similarity index 100% rename from reactos/dll/win32/urlmon/urlmon.rbuild rename to dll/win32/urlmon/urlmon.rbuild diff --git a/reactos/dll/win32/urlmon/urlmon.spec b/dll/win32/urlmon/urlmon.spec similarity index 100% rename from reactos/dll/win32/urlmon/urlmon.spec rename to dll/win32/urlmon/urlmon.spec diff --git a/reactos/dll/win32/urlmon/urlmon_main.c b/dll/win32/urlmon/urlmon_main.c similarity index 100% rename from reactos/dll/win32/urlmon/urlmon_main.c rename to dll/win32/urlmon/urlmon_main.c diff --git a/reactos/dll/win32/urlmon/urlmon_main.h b/dll/win32/urlmon/urlmon_main.h similarity index 100% rename from reactos/dll/win32/urlmon/urlmon_main.h rename to dll/win32/urlmon/urlmon_main.h diff --git a/reactos/dll/win32/urlmon/version.rc b/dll/win32/urlmon/version.rc similarity index 100% rename from reactos/dll/win32/urlmon/version.rc rename to dll/win32/urlmon/version.rc diff --git a/reactos/dll/win32/user32/controls/button.c b/dll/win32/user32/controls/button.c similarity index 100% rename from reactos/dll/win32/user32/controls/button.c rename to dll/win32/user32/controls/button.c diff --git a/reactos/dll/win32/user32/controls/combo.c b/dll/win32/user32/controls/combo.c similarity index 100% rename from reactos/dll/win32/user32/controls/combo.c rename to dll/win32/user32/controls/combo.c diff --git a/reactos/dll/win32/user32/controls/edit.c b/dll/win32/user32/controls/edit.c similarity index 100% rename from reactos/dll/win32/user32/controls/edit.c rename to dll/win32/user32/controls/edit.c diff --git a/reactos/dll/win32/user32/controls/icontitle.c b/dll/win32/user32/controls/icontitle.c similarity index 100% rename from reactos/dll/win32/user32/controls/icontitle.c rename to dll/win32/user32/controls/icontitle.c diff --git a/reactos/dll/win32/user32/controls/listbox.c b/dll/win32/user32/controls/listbox.c similarity index 100% rename from reactos/dll/win32/user32/controls/listbox.c rename to dll/win32/user32/controls/listbox.c diff --git a/reactos/dll/win32/user32/controls/regcontrol.c b/dll/win32/user32/controls/regcontrol.c similarity index 100% rename from reactos/dll/win32/user32/controls/regcontrol.c rename to dll/win32/user32/controls/regcontrol.c diff --git a/reactos/dll/win32/user32/controls/scrollbar.c b/dll/win32/user32/controls/scrollbar.c similarity index 100% rename from reactos/dll/win32/user32/controls/scrollbar.c rename to dll/win32/user32/controls/scrollbar.c diff --git a/reactos/dll/win32/user32/controls/static.c b/dll/win32/user32/controls/static.c similarity index 100% rename from reactos/dll/win32/user32/controls/static.c rename to dll/win32/user32/controls/static.c diff --git a/reactos/dll/win32/user32/include/accel.h b/dll/win32/user32/include/accel.h similarity index 100% rename from reactos/dll/win32/user32/include/accel.h rename to dll/win32/user32/include/accel.h diff --git a/reactos/dll/win32/user32/include/controls.h b/dll/win32/user32/include/controls.h similarity index 100% rename from reactos/dll/win32/user32/include/controls.h rename to dll/win32/user32/include/controls.h diff --git a/reactos/dll/win32/user32/include/cursor.h b/dll/win32/user32/include/cursor.h similarity index 100% rename from reactos/dll/win32/user32/include/cursor.h rename to dll/win32/user32/include/cursor.h diff --git a/reactos/dll/win32/user32/include/dde_private.h b/dll/win32/user32/include/dde_private.h similarity index 100% rename from reactos/dll/win32/user32/include/dde_private.h rename to dll/win32/user32/include/dde_private.h diff --git a/reactos/dll/win32/user32/include/draw.h b/dll/win32/user32/include/draw.h similarity index 100% rename from reactos/dll/win32/user32/include/draw.h rename to dll/win32/user32/include/draw.h diff --git a/reactos/dll/win32/user32/include/menu.h b/dll/win32/user32/include/menu.h similarity index 100% rename from reactos/dll/win32/user32/include/menu.h rename to dll/win32/user32/include/menu.h diff --git a/reactos/dll/win32/user32/include/message.h b/dll/win32/user32/include/message.h similarity index 100% rename from reactos/dll/win32/user32/include/message.h rename to dll/win32/user32/include/message.h diff --git a/reactos/dll/win32/user32/include/regcontrol.h b/dll/win32/user32/include/regcontrol.h similarity index 100% rename from reactos/dll/win32/user32/include/regcontrol.h rename to dll/win32/user32/include/regcontrol.h diff --git a/reactos/dll/win32/user32/include/resource.h b/dll/win32/user32/include/resource.h similarity index 100% rename from reactos/dll/win32/user32/include/resource.h rename to dll/win32/user32/include/resource.h diff --git a/reactos/dll/win32/user32/include/scroll.h b/dll/win32/user32/include/scroll.h similarity index 100% rename from reactos/dll/win32/user32/include/scroll.h rename to dll/win32/user32/include/scroll.h diff --git a/reactos/dll/win32/user32/include/user32.h b/dll/win32/user32/include/user32.h similarity index 100% rename from reactos/dll/win32/user32/include/user32.h rename to dll/win32/user32/include/user32.h diff --git a/reactos/dll/win32/user32/include/user32p.h b/dll/win32/user32/include/user32p.h similarity index 100% rename from reactos/dll/win32/user32/include/user32p.h rename to dll/win32/user32/include/user32p.h diff --git a/reactos/dll/win32/user32/include/window.h b/dll/win32/user32/include/window.h similarity index 100% rename from reactos/dll/win32/user32/include/window.h rename to dll/win32/user32/include/window.h diff --git a/reactos/dll/win32/user32/include/winpos.h b/dll/win32/user32/include/winpos.h similarity index 100% rename from reactos/dll/win32/user32/include/winpos.h rename to dll/win32/user32/include/winpos.h diff --git a/reactos/dll/win32/user32/include/winsta.h b/dll/win32/user32/include/winsta.h similarity index 100% rename from reactos/dll/win32/user32/include/winsta.h rename to dll/win32/user32/include/winsta.h diff --git a/reactos/dll/win32/user32/lang/bg-BG.rc b/dll/win32/user32/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/user32/lang/bg-BG.rc rename to dll/win32/user32/lang/bg-BG.rc diff --git a/reactos/dll/win32/user32/lang/cs-CZ.rc b/dll/win32/user32/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/user32/lang/cs-CZ.rc rename to dll/win32/user32/lang/cs-CZ.rc diff --git a/reactos/dll/win32/user32/lang/da-DK.rc b/dll/win32/user32/lang/da-DK.rc similarity index 100% rename from reactos/dll/win32/user32/lang/da-DK.rc rename to dll/win32/user32/lang/da-DK.rc diff --git a/reactos/dll/win32/user32/lang/de-DE.rc b/dll/win32/user32/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/user32/lang/de-DE.rc rename to dll/win32/user32/lang/de-DE.rc diff --git a/reactos/dll/win32/user32/lang/el-GR.rc b/dll/win32/user32/lang/el-GR.rc similarity index 100% rename from reactos/dll/win32/user32/lang/el-GR.rc rename to dll/win32/user32/lang/el-GR.rc diff --git a/reactos/dll/win32/user32/lang/en-US.rc b/dll/win32/user32/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/user32/lang/en-US.rc rename to dll/win32/user32/lang/en-US.rc diff --git a/reactos/dll/win32/user32/lang/es-ES.rc b/dll/win32/user32/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/user32/lang/es-ES.rc rename to dll/win32/user32/lang/es-ES.rc diff --git a/reactos/dll/win32/user32/lang/fr-FR.rc b/dll/win32/user32/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/user32/lang/fr-FR.rc rename to dll/win32/user32/lang/fr-FR.rc diff --git a/reactos/dll/win32/user32/lang/hu-HU.rc b/dll/win32/user32/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/user32/lang/hu-HU.rc rename to dll/win32/user32/lang/hu-HU.rc diff --git a/reactos/dll/win32/user32/lang/id-ID.rc b/dll/win32/user32/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/user32/lang/id-ID.rc rename to dll/win32/user32/lang/id-ID.rc diff --git a/reactos/dll/win32/user32/lang/it-IT.rc b/dll/win32/user32/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/user32/lang/it-IT.rc rename to dll/win32/user32/lang/it-IT.rc diff --git a/reactos/dll/win32/user32/lang/ja-JP.rc b/dll/win32/user32/lang/ja-JP.rc similarity index 100% rename from reactos/dll/win32/user32/lang/ja-JP.rc rename to dll/win32/user32/lang/ja-JP.rc diff --git a/reactos/dll/win32/user32/lang/nl-NL.rc b/dll/win32/user32/lang/nl-NL.rc similarity index 100% rename from reactos/dll/win32/user32/lang/nl-NL.rc rename to dll/win32/user32/lang/nl-NL.rc diff --git a/reactos/dll/win32/user32/lang/no-NO.rc b/dll/win32/user32/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/user32/lang/no-NO.rc rename to dll/win32/user32/lang/no-NO.rc diff --git a/reactos/dll/win32/user32/lang/pl-PL.rc b/dll/win32/user32/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/user32/lang/pl-PL.rc rename to dll/win32/user32/lang/pl-PL.rc diff --git a/reactos/dll/win32/user32/lang/ru-RU.rc b/dll/win32/user32/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/user32/lang/ru-RU.rc rename to dll/win32/user32/lang/ru-RU.rc diff --git a/reactos/dll/win32/user32/lang/sk-SK.rc b/dll/win32/user32/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/user32/lang/sk-SK.rc rename to dll/win32/user32/lang/sk-SK.rc diff --git a/reactos/dll/win32/user32/lang/sv-SE.rc b/dll/win32/user32/lang/sv-SE.rc similarity index 100% rename from reactos/dll/win32/user32/lang/sv-SE.rc rename to dll/win32/user32/lang/sv-SE.rc diff --git a/reactos/dll/win32/user32/lang/uk-UA.rc b/dll/win32/user32/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/user32/lang/uk-UA.rc rename to dll/win32/user32/lang/uk-UA.rc diff --git a/reactos/dll/win32/user32/misc/dde.c b/dll/win32/user32/misc/dde.c similarity index 100% rename from reactos/dll/win32/user32/misc/dde.c rename to dll/win32/user32/misc/dde.c diff --git a/reactos/dll/win32/user32/misc/ddeclient.c b/dll/win32/user32/misc/ddeclient.c similarity index 100% rename from reactos/dll/win32/user32/misc/ddeclient.c rename to dll/win32/user32/misc/ddeclient.c diff --git a/reactos/dll/win32/user32/misc/ddeserver.c b/dll/win32/user32/misc/ddeserver.c similarity index 100% rename from reactos/dll/win32/user32/misc/ddeserver.c rename to dll/win32/user32/misc/ddeserver.c diff --git a/reactos/dll/win32/user32/misc/desktop.c b/dll/win32/user32/misc/desktop.c similarity index 100% rename from reactos/dll/win32/user32/misc/desktop.c rename to dll/win32/user32/misc/desktop.c diff --git a/reactos/dll/win32/user32/misc/display.c b/dll/win32/user32/misc/display.c similarity index 100% rename from reactos/dll/win32/user32/misc/display.c rename to dll/win32/user32/misc/display.c diff --git a/reactos/dll/win32/user32/misc/dllmain.c b/dll/win32/user32/misc/dllmain.c similarity index 100% rename from reactos/dll/win32/user32/misc/dllmain.c rename to dll/win32/user32/misc/dllmain.c diff --git a/reactos/dll/win32/user32/misc/exit.c b/dll/win32/user32/misc/exit.c similarity index 100% rename from reactos/dll/win32/user32/misc/exit.c rename to dll/win32/user32/misc/exit.c diff --git a/reactos/dll/win32/user32/misc/exticon.c b/dll/win32/user32/misc/exticon.c similarity index 100% rename from reactos/dll/win32/user32/misc/exticon.c rename to dll/win32/user32/misc/exticon.c diff --git a/reactos/dll/win32/user32/misc/misc.c b/dll/win32/user32/misc/misc.c similarity index 100% rename from reactos/dll/win32/user32/misc/misc.c rename to dll/win32/user32/misc/misc.c diff --git a/reactos/dll/win32/user32/misc/object.c b/dll/win32/user32/misc/object.c similarity index 100% rename from reactos/dll/win32/user32/misc/object.c rename to dll/win32/user32/misc/object.c diff --git a/reactos/dll/win32/user32/misc/resources.c b/dll/win32/user32/misc/resources.c similarity index 100% rename from reactos/dll/win32/user32/misc/resources.c rename to dll/win32/user32/misc/resources.c diff --git a/reactos/dll/win32/user32/misc/stubs.c b/dll/win32/user32/misc/stubs.c similarity index 100% rename from reactos/dll/win32/user32/misc/stubs.c rename to dll/win32/user32/misc/stubs.c diff --git a/reactos/dll/win32/user32/misc/timer.c b/dll/win32/user32/misc/timer.c similarity index 100% rename from reactos/dll/win32/user32/misc/timer.c rename to dll/win32/user32/misc/timer.c diff --git a/reactos/dll/win32/user32/misc/winhelp.c b/dll/win32/user32/misc/winhelp.c similarity index 100% rename from reactos/dll/win32/user32/misc/winhelp.c rename to dll/win32/user32/misc/winhelp.c diff --git a/reactos/dll/win32/user32/misc/winsta.c b/dll/win32/user32/misc/winsta.c similarity index 100% rename from reactos/dll/win32/user32/misc/winsta.c rename to dll/win32/user32/misc/winsta.c diff --git a/reactos/dll/win32/user32/misc/wsprintf.c b/dll/win32/user32/misc/wsprintf.c similarity index 100% rename from reactos/dll/win32/user32/misc/wsprintf.c rename to dll/win32/user32/misc/wsprintf.c diff --git a/reactos/dll/win32/user32/resources/obm_checkboxes.bmp b/dll/win32/user32/resources/obm_checkboxes.bmp similarity index 100% rename from reactos/dll/win32/user32/resources/obm_checkboxes.bmp rename to dll/win32/user32/resources/obm_checkboxes.bmp diff --git a/reactos/dll/win32/user32/resources/obm_close.bmp b/dll/win32/user32/resources/obm_close.bmp similarity index 100% rename from reactos/dll/win32/user32/resources/obm_close.bmp rename to dll/win32/user32/resources/obm_close.bmp diff --git a/reactos/dll/win32/user32/resources/obm_combo.bmp b/dll/win32/user32/resources/obm_combo.bmp similarity index 100% rename from reactos/dll/win32/user32/resources/obm_combo.bmp rename to dll/win32/user32/resources/obm_combo.bmp diff --git a/reactos/dll/win32/user32/resources/obm_mnarrow.bmp b/dll/win32/user32/resources/obm_mnarrow.bmp similarity index 100% rename from reactos/dll/win32/user32/resources/obm_mnarrow.bmp rename to dll/win32/user32/resources/obm_mnarrow.bmp diff --git a/reactos/dll/win32/user32/resources/ocr_appstarting.cur b/dll/win32/user32/resources/ocr_appstarting.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_appstarting.cur rename to dll/win32/user32/resources/ocr_appstarting.cur diff --git a/reactos/dll/win32/user32/resources/ocr_cdautostart.cur b/dll/win32/user32/resources/ocr_cdautostart.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_cdautostart.cur rename to dll/win32/user32/resources/ocr_cdautostart.cur diff --git a/reactos/dll/win32/user32/resources/ocr_cross.cur b/dll/win32/user32/resources/ocr_cross.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_cross.cur rename to dll/win32/user32/resources/ocr_cross.cur diff --git a/reactos/dll/win32/user32/resources/ocr_dragobject.cur b/dll/win32/user32/resources/ocr_dragobject.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_dragobject.cur rename to dll/win32/user32/resources/ocr_dragobject.cur diff --git a/reactos/dll/win32/user32/resources/ocr_hand.cur b/dll/win32/user32/resources/ocr_hand.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_hand.cur rename to dll/win32/user32/resources/ocr_hand.cur diff --git a/reactos/dll/win32/user32/resources/ocr_help.cur b/dll/win32/user32/resources/ocr_help.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_help.cur rename to dll/win32/user32/resources/ocr_help.cur diff --git a/reactos/dll/win32/user32/resources/ocr_ibeam.cur b/dll/win32/user32/resources/ocr_ibeam.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_ibeam.cur rename to dll/win32/user32/resources/ocr_ibeam.cur diff --git a/reactos/dll/win32/user32/resources/ocr_icon.cur b/dll/win32/user32/resources/ocr_icon.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_icon.cur rename to dll/win32/user32/resources/ocr_icon.cur diff --git a/reactos/dll/win32/user32/resources/ocr_no.cur b/dll/win32/user32/resources/ocr_no.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_no.cur rename to dll/win32/user32/resources/ocr_no.cur diff --git a/reactos/dll/win32/user32/resources/ocr_normal.cur b/dll/win32/user32/resources/ocr_normal.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_normal.cur rename to dll/win32/user32/resources/ocr_normal.cur diff --git a/reactos/dll/win32/user32/resources/ocr_pen.cur b/dll/win32/user32/resources/ocr_pen.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_pen.cur rename to dll/win32/user32/resources/ocr_pen.cur diff --git a/reactos/dll/win32/user32/resources/ocr_size.cur b/dll/win32/user32/resources/ocr_size.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_size.cur rename to dll/win32/user32/resources/ocr_size.cur diff --git a/reactos/dll/win32/user32/resources/ocr_sizeall.cur b/dll/win32/user32/resources/ocr_sizeall.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_sizeall.cur rename to dll/win32/user32/resources/ocr_sizeall.cur diff --git a/reactos/dll/win32/user32/resources/ocr_sizenesw.cur b/dll/win32/user32/resources/ocr_sizenesw.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_sizenesw.cur rename to dll/win32/user32/resources/ocr_sizenesw.cur diff --git a/reactos/dll/win32/user32/resources/ocr_sizens.cur b/dll/win32/user32/resources/ocr_sizens.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_sizens.cur rename to dll/win32/user32/resources/ocr_sizens.cur diff --git a/reactos/dll/win32/user32/resources/ocr_sizenwse.cur b/dll/win32/user32/resources/ocr_sizenwse.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_sizenwse.cur rename to dll/win32/user32/resources/ocr_sizenwse.cur diff --git a/reactos/dll/win32/user32/resources/ocr_sizewe.cur b/dll/win32/user32/resources/ocr_sizewe.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_sizewe.cur rename to dll/win32/user32/resources/ocr_sizewe.cur diff --git a/reactos/dll/win32/user32/resources/ocr_up.cur b/dll/win32/user32/resources/ocr_up.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_up.cur rename to dll/win32/user32/resources/ocr_up.cur diff --git a/reactos/dll/win32/user32/resources/ocr_wait.cur b/dll/win32/user32/resources/ocr_wait.cur similarity index 100% rename from reactos/dll/win32/user32/resources/ocr_wait.cur rename to dll/win32/user32/resources/ocr_wait.cur diff --git a/reactos/dll/win32/user32/resources/oic_bang.ico b/dll/win32/user32/resources/oic_bang.ico similarity index 100% rename from reactos/dll/win32/user32/resources/oic_bang.ico rename to dll/win32/user32/resources/oic_bang.ico diff --git a/reactos/dll/win32/user32/resources/oic_hand.ico b/dll/win32/user32/resources/oic_hand.ico similarity index 100% rename from reactos/dll/win32/user32/resources/oic_hand.ico rename to dll/win32/user32/resources/oic_hand.ico diff --git a/reactos/dll/win32/user32/resources/oic_note.ico b/dll/win32/user32/resources/oic_note.ico similarity index 100% rename from reactos/dll/win32/user32/resources/oic_note.ico rename to dll/win32/user32/resources/oic_note.ico diff --git a/reactos/dll/win32/user32/resources/oic_ques.ico b/dll/win32/user32/resources/oic_ques.ico similarity index 100% rename from reactos/dll/win32/user32/resources/oic_ques.ico rename to dll/win32/user32/resources/oic_ques.ico diff --git a/reactos/dll/win32/user32/resources/oic_reactos.ico b/dll/win32/user32/resources/oic_reactos.ico similarity index 100% rename from reactos/dll/win32/user32/resources/oic_reactos.ico rename to dll/win32/user32/resources/oic_reactos.ico diff --git a/reactos/dll/win32/user32/resources/oic_sample.ico b/dll/win32/user32/resources/oic_sample.ico similarity index 100% rename from reactos/dll/win32/user32/resources/oic_sample.ico rename to dll/win32/user32/resources/oic_sample.ico diff --git a/reactos/dll/win32/user32/user32.def b/dll/win32/user32/user32.def similarity index 100% rename from reactos/dll/win32/user32/user32.def rename to dll/win32/user32/user32.def diff --git a/reactos/dll/win32/user32/user32.rbuild b/dll/win32/user32/user32.rbuild similarity index 100% rename from reactos/dll/win32/user32/user32.rbuild rename to dll/win32/user32/user32.rbuild diff --git a/reactos/dll/win32/user32/user32.rc b/dll/win32/user32/user32.rc similarity index 100% rename from reactos/dll/win32/user32/user32.rc rename to dll/win32/user32/user32.rc diff --git a/reactos/dll/win32/user32/windows/accel.c b/dll/win32/user32/windows/accel.c similarity index 100% rename from reactos/dll/win32/user32/windows/accel.c rename to dll/win32/user32/windows/accel.c diff --git a/reactos/dll/win32/user32/windows/bitmap.c b/dll/win32/user32/windows/bitmap.c similarity index 100% rename from reactos/dll/win32/user32/windows/bitmap.c rename to dll/win32/user32/windows/bitmap.c diff --git a/reactos/dll/win32/user32/windows/caret.c b/dll/win32/user32/windows/caret.c similarity index 100% rename from reactos/dll/win32/user32/windows/caret.c rename to dll/win32/user32/windows/caret.c diff --git a/reactos/dll/win32/user32/windows/class.c b/dll/win32/user32/windows/class.c similarity index 100% rename from reactos/dll/win32/user32/windows/class.c rename to dll/win32/user32/windows/class.c diff --git a/reactos/dll/win32/user32/windows/clipboard.c b/dll/win32/user32/windows/clipboard.c similarity index 100% rename from reactos/dll/win32/user32/windows/clipboard.c rename to dll/win32/user32/windows/clipboard.c diff --git a/reactos/dll/win32/user32/windows/cursor.c b/dll/win32/user32/windows/cursor.c similarity index 100% rename from reactos/dll/win32/user32/windows/cursor.c rename to dll/win32/user32/windows/cursor.c diff --git a/reactos/dll/win32/user32/windows/dc.c b/dll/win32/user32/windows/dc.c similarity index 100% rename from reactos/dll/win32/user32/windows/dc.c rename to dll/win32/user32/windows/dc.c diff --git a/reactos/dll/win32/user32/windows/defwnd.c b/dll/win32/user32/windows/defwnd.c similarity index 100% rename from reactos/dll/win32/user32/windows/defwnd.c rename to dll/win32/user32/windows/defwnd.c diff --git a/reactos/dll/win32/user32/windows/dialog.c b/dll/win32/user32/windows/dialog.c similarity index 100% rename from reactos/dll/win32/user32/windows/dialog.c rename to dll/win32/user32/windows/dialog.c diff --git a/reactos/dll/win32/user32/windows/draw.c b/dll/win32/user32/windows/draw.c similarity index 100% rename from reactos/dll/win32/user32/windows/draw.c rename to dll/win32/user32/windows/draw.c diff --git a/reactos/dll/win32/user32/windows/font.c b/dll/win32/user32/windows/font.c similarity index 100% rename from reactos/dll/win32/user32/windows/font.c rename to dll/win32/user32/windows/font.c diff --git a/reactos/dll/win32/user32/windows/hook.c b/dll/win32/user32/windows/hook.c similarity index 100% rename from reactos/dll/win32/user32/windows/hook.c rename to dll/win32/user32/windows/hook.c diff --git a/reactos/dll/win32/user32/windows/icon.c b/dll/win32/user32/windows/icon.c similarity index 100% rename from reactos/dll/win32/user32/windows/icon.c rename to dll/win32/user32/windows/icon.c diff --git a/reactos/dll/win32/user32/windows/input.c b/dll/win32/user32/windows/input.c similarity index 100% rename from reactos/dll/win32/user32/windows/input.c rename to dll/win32/user32/windows/input.c diff --git a/reactos/dll/win32/user32/windows/mdi.c b/dll/win32/user32/windows/mdi.c similarity index 100% rename from reactos/dll/win32/user32/windows/mdi.c rename to dll/win32/user32/windows/mdi.c diff --git a/reactos/dll/win32/user32/windows/menu.c b/dll/win32/user32/windows/menu.c similarity index 100% rename from reactos/dll/win32/user32/windows/menu.c rename to dll/win32/user32/windows/menu.c diff --git a/reactos/dll/win32/user32/windows/message.c b/dll/win32/user32/windows/message.c similarity index 100% rename from reactos/dll/win32/user32/windows/message.c rename to dll/win32/user32/windows/message.c diff --git a/reactos/dll/win32/user32/windows/messagebox.c b/dll/win32/user32/windows/messagebox.c similarity index 100% rename from reactos/dll/win32/user32/windows/messagebox.c rename to dll/win32/user32/windows/messagebox.c diff --git a/reactos/dll/win32/user32/windows/nonclient.c b/dll/win32/user32/windows/nonclient.c similarity index 100% rename from reactos/dll/win32/user32/windows/nonclient.c rename to dll/win32/user32/windows/nonclient.c diff --git a/reactos/dll/win32/user32/windows/paint.c b/dll/win32/user32/windows/paint.c similarity index 100% rename from reactos/dll/win32/user32/windows/paint.c rename to dll/win32/user32/windows/paint.c diff --git a/reactos/dll/win32/user32/windows/prop.c b/dll/win32/user32/windows/prop.c similarity index 100% rename from reactos/dll/win32/user32/windows/prop.c rename to dll/win32/user32/windows/prop.c diff --git a/reactos/dll/win32/user32/windows/rect.c b/dll/win32/user32/windows/rect.c similarity index 100% rename from reactos/dll/win32/user32/windows/rect.c rename to dll/win32/user32/windows/rect.c diff --git a/reactos/dll/win32/user32/windows/spy.c b/dll/win32/user32/windows/spy.c similarity index 100% rename from reactos/dll/win32/user32/windows/spy.c rename to dll/win32/user32/windows/spy.c diff --git a/reactos/dll/win32/user32/windows/text.c b/dll/win32/user32/windows/text.c similarity index 100% rename from reactos/dll/win32/user32/windows/text.c rename to dll/win32/user32/windows/text.c diff --git a/reactos/dll/win32/user32/windows/window.c b/dll/win32/user32/windows/window.c similarity index 100% rename from reactos/dll/win32/user32/windows/window.c rename to dll/win32/user32/windows/window.c diff --git a/reactos/dll/win32/user32/windows/winpos.c b/dll/win32/user32/windows/winpos.c similarity index 100% rename from reactos/dll/win32/user32/windows/winpos.c rename to dll/win32/user32/windows/winpos.c diff --git a/reactos/dll/win32/userenv/desktop.c b/dll/win32/userenv/desktop.c similarity index 100% rename from reactos/dll/win32/userenv/desktop.c rename to dll/win32/userenv/desktop.c diff --git a/reactos/dll/win32/userenv/directory.c b/dll/win32/userenv/directory.c similarity index 100% rename from reactos/dll/win32/userenv/directory.c rename to dll/win32/userenv/directory.c diff --git a/reactos/dll/win32/userenv/environment.c b/dll/win32/userenv/environment.c similarity index 100% rename from reactos/dll/win32/userenv/environment.c rename to dll/win32/userenv/environment.c diff --git a/reactos/dll/win32/userenv/gpolicy.c b/dll/win32/userenv/gpolicy.c similarity index 100% rename from reactos/dll/win32/userenv/gpolicy.c rename to dll/win32/userenv/gpolicy.c diff --git a/reactos/dll/win32/userenv/internal.h b/dll/win32/userenv/internal.h similarity index 100% rename from reactos/dll/win32/userenv/internal.h rename to dll/win32/userenv/internal.h diff --git a/reactos/dll/win32/userenv/lang/bg-BG.rc b/dll/win32/userenv/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/bg-BG.rc rename to dll/win32/userenv/lang/bg-BG.rc diff --git a/reactos/dll/win32/userenv/lang/cs-CZ.rc b/dll/win32/userenv/lang/cs-CZ.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/cs-CZ.rc rename to dll/win32/userenv/lang/cs-CZ.rc diff --git a/reactos/dll/win32/userenv/lang/de-DE.rc b/dll/win32/userenv/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/de-DE.rc rename to dll/win32/userenv/lang/de-DE.rc diff --git a/reactos/dll/win32/userenv/lang/el-GR.rc b/dll/win32/userenv/lang/el-GR.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/el-GR.rc rename to dll/win32/userenv/lang/el-GR.rc diff --git a/reactos/dll/win32/userenv/lang/en-US.rc b/dll/win32/userenv/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/en-US.rc rename to dll/win32/userenv/lang/en-US.rc diff --git a/reactos/dll/win32/userenv/lang/es-ES.rc b/dll/win32/userenv/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/es-ES.rc rename to dll/win32/userenv/lang/es-ES.rc diff --git a/reactos/dll/win32/userenv/lang/fi-FI.rc b/dll/win32/userenv/lang/fi-FI.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/fi-FI.rc rename to dll/win32/userenv/lang/fi-FI.rc diff --git a/reactos/dll/win32/userenv/lang/fr-FR.rc b/dll/win32/userenv/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/fr-FR.rc rename to dll/win32/userenv/lang/fr-FR.rc diff --git a/reactos/dll/win32/userenv/lang/hu-HU.rc b/dll/win32/userenv/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/hu-HU.rc rename to dll/win32/userenv/lang/hu-HU.rc diff --git a/reactos/dll/win32/userenv/lang/id-ID.rc b/dll/win32/userenv/lang/id-ID.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/id-ID.rc rename to dll/win32/userenv/lang/id-ID.rc diff --git a/reactos/dll/win32/userenv/lang/it-IT.rc b/dll/win32/userenv/lang/it-IT.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/it-IT.rc rename to dll/win32/userenv/lang/it-IT.rc diff --git a/reactos/dll/win32/userenv/lang/ja-JP.rc b/dll/win32/userenv/lang/ja-JP.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/ja-JP.rc rename to dll/win32/userenv/lang/ja-JP.rc diff --git a/reactos/dll/win32/userenv/lang/nl-NL.rc b/dll/win32/userenv/lang/nl-NL.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/nl-NL.rc rename to dll/win32/userenv/lang/nl-NL.rc diff --git a/reactos/dll/win32/userenv/lang/no-NO.rc b/dll/win32/userenv/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/no-NO.rc rename to dll/win32/userenv/lang/no-NO.rc diff --git a/reactos/dll/win32/userenv/lang/pl-PL.rc b/dll/win32/userenv/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/pl-PL.rc rename to dll/win32/userenv/lang/pl-PL.rc diff --git a/reactos/dll/win32/userenv/lang/ru-RU.rc b/dll/win32/userenv/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/ru-RU.rc rename to dll/win32/userenv/lang/ru-RU.rc diff --git a/reactos/dll/win32/userenv/lang/sk-SK.rc b/dll/win32/userenv/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/sk-SK.rc rename to dll/win32/userenv/lang/sk-SK.rc diff --git a/reactos/dll/win32/userenv/lang/sv-SE.rc b/dll/win32/userenv/lang/sv-SE.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/sv-SE.rc rename to dll/win32/userenv/lang/sv-SE.rc diff --git a/reactos/dll/win32/userenv/lang/th-TH.rc b/dll/win32/userenv/lang/th-TH.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/th-TH.rc rename to dll/win32/userenv/lang/th-TH.rc diff --git a/reactos/dll/win32/userenv/lang/uk-UA.rc b/dll/win32/userenv/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/uk-UA.rc rename to dll/win32/userenv/lang/uk-UA.rc diff --git a/reactos/dll/win32/userenv/misc.c b/dll/win32/userenv/misc.c similarity index 100% rename from reactos/dll/win32/userenv/misc.c rename to dll/win32/userenv/misc.c diff --git a/reactos/dll/win32/userenv/precomp.h b/dll/win32/userenv/precomp.h similarity index 100% rename from reactos/dll/win32/userenv/precomp.h rename to dll/win32/userenv/precomp.h diff --git a/reactos/dll/win32/userenv/profile.c b/dll/win32/userenv/profile.c similarity index 100% rename from reactos/dll/win32/userenv/profile.c rename to dll/win32/userenv/profile.c diff --git a/reactos/dll/win32/userenv/registry.c b/dll/win32/userenv/registry.c similarity index 100% rename from reactos/dll/win32/userenv/registry.c rename to dll/win32/userenv/registry.c diff --git a/reactos/dll/win32/userenv/resources.h b/dll/win32/userenv/resources.h similarity index 100% rename from reactos/dll/win32/userenv/resources.h rename to dll/win32/userenv/resources.h diff --git a/reactos/dll/win32/userenv/setup.c b/dll/win32/userenv/setup.c similarity index 100% rename from reactos/dll/win32/userenv/setup.c rename to dll/win32/userenv/setup.c diff --git a/reactos/dll/win32/userenv/userenv.c b/dll/win32/userenv/userenv.c similarity index 100% rename from reactos/dll/win32/userenv/userenv.c rename to dll/win32/userenv/userenv.c diff --git a/reactos/dll/win32/userenv/userenv.def b/dll/win32/userenv/userenv.def similarity index 100% rename from reactos/dll/win32/userenv/userenv.def rename to dll/win32/userenv/userenv.def diff --git a/reactos/dll/win32/userenv/userenv.rbuild b/dll/win32/userenv/userenv.rbuild similarity index 100% rename from reactos/dll/win32/userenv/userenv.rbuild rename to dll/win32/userenv/userenv.rbuild diff --git a/reactos/dll/win32/userenv/userenv.rc b/dll/win32/userenv/userenv.rc similarity index 100% rename from reactos/dll/win32/userenv/userenv.rc rename to dll/win32/userenv/userenv.rc diff --git a/reactos/dll/win32/usp10/usp10.c b/dll/win32/usp10/usp10.c similarity index 100% rename from reactos/dll/win32/usp10/usp10.c rename to dll/win32/usp10/usp10.c diff --git a/reactos/dll/win32/usp10/usp10.rbuild b/dll/win32/usp10/usp10.rbuild similarity index 100% rename from reactos/dll/win32/usp10/usp10.rbuild rename to dll/win32/usp10/usp10.rbuild diff --git a/reactos/dll/win32/usp10/usp10.spec b/dll/win32/usp10/usp10.spec similarity index 100% rename from reactos/dll/win32/usp10/usp10.spec rename to dll/win32/usp10/usp10.spec diff --git a/reactos/dll/win32/usp10/usp10_ros.diff b/dll/win32/usp10/usp10_ros.diff similarity index 100% rename from reactos/dll/win32/usp10/usp10_ros.diff rename to dll/win32/usp10/usp10_ros.diff diff --git a/reactos/dll/win32/uxtheme/draw.c b/dll/win32/uxtheme/draw.c similarity index 100% rename from reactos/dll/win32/uxtheme/draw.c rename to dll/win32/uxtheme/draw.c diff --git a/reactos/dll/win32/uxtheme/main.c b/dll/win32/uxtheme/main.c similarity index 100% rename from reactos/dll/win32/uxtheme/main.c rename to dll/win32/uxtheme/main.c diff --git a/reactos/dll/win32/uxtheme/metric.c b/dll/win32/uxtheme/metric.c similarity index 100% rename from reactos/dll/win32/uxtheme/metric.c rename to dll/win32/uxtheme/metric.c diff --git a/reactos/dll/win32/uxtheme/msstyles.c b/dll/win32/uxtheme/msstyles.c similarity index 100% rename from reactos/dll/win32/uxtheme/msstyles.c rename to dll/win32/uxtheme/msstyles.c diff --git a/reactos/dll/win32/uxtheme/msstyles.h b/dll/win32/uxtheme/msstyles.h similarity index 100% rename from reactos/dll/win32/uxtheme/msstyles.h rename to dll/win32/uxtheme/msstyles.h diff --git a/reactos/dll/win32/uxtheme/property.c b/dll/win32/uxtheme/property.c similarity index 100% rename from reactos/dll/win32/uxtheme/property.c rename to dll/win32/uxtheme/property.c diff --git a/reactos/dll/win32/uxtheme/stylemap.c b/dll/win32/uxtheme/stylemap.c similarity index 100% rename from reactos/dll/win32/uxtheme/stylemap.c rename to dll/win32/uxtheme/stylemap.c diff --git a/reactos/dll/win32/uxtheme/system.c b/dll/win32/uxtheme/system.c similarity index 100% rename from reactos/dll/win32/uxtheme/system.c rename to dll/win32/uxtheme/system.c diff --git a/reactos/dll/win32/uxtheme/uxini.c b/dll/win32/uxtheme/uxini.c similarity index 100% rename from reactos/dll/win32/uxtheme/uxini.c rename to dll/win32/uxtheme/uxini.c diff --git a/reactos/dll/win32/uxtheme/uxtheme.rbuild b/dll/win32/uxtheme/uxtheme.rbuild similarity index 100% rename from reactos/dll/win32/uxtheme/uxtheme.rbuild rename to dll/win32/uxtheme/uxtheme.rbuild diff --git a/reactos/dll/win32/uxtheme/uxtheme.spec b/dll/win32/uxtheme/uxtheme.spec similarity index 100% rename from reactos/dll/win32/uxtheme/uxtheme.spec rename to dll/win32/uxtheme/uxtheme.spec diff --git a/reactos/dll/win32/uxtheme/uxthemedll.h b/dll/win32/uxtheme/uxthemedll.h similarity index 100% rename from reactos/dll/win32/uxtheme/uxthemedll.h rename to dll/win32/uxtheme/uxthemedll.h diff --git a/reactos/dll/win32/uxtheme/version.rc b/dll/win32/uxtheme/version.rc similarity index 100% rename from reactos/dll/win32/uxtheme/version.rc rename to dll/win32/uxtheme/version.rc diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.c b/dll/win32/vdmdbg/vdmdbg.c similarity index 100% rename from reactos/dll/win32/vdmdbg/vdmdbg.c rename to dll/win32/vdmdbg/vdmdbg.c diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.h b/dll/win32/vdmdbg/vdmdbg.h similarity index 100% rename from reactos/dll/win32/vdmdbg/vdmdbg.h rename to dll/win32/vdmdbg/vdmdbg.h diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.rbuild b/dll/win32/vdmdbg/vdmdbg.rbuild similarity index 100% rename from reactos/dll/win32/vdmdbg/vdmdbg.rbuild rename to dll/win32/vdmdbg/vdmdbg.rbuild diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.spec b/dll/win32/vdmdbg/vdmdbg.spec similarity index 100% rename from reactos/dll/win32/vdmdbg/vdmdbg.spec rename to dll/win32/vdmdbg/vdmdbg.spec diff --git a/reactos/dll/win32/version/info.c b/dll/win32/version/info.c similarity index 100% rename from reactos/dll/win32/version/info.c rename to dll/win32/version/info.c diff --git a/reactos/dll/win32/version/install.c b/dll/win32/version/install.c similarity index 100% rename from reactos/dll/win32/version/install.c rename to dll/win32/version/install.c diff --git a/reactos/dll/win32/version/resource.c b/dll/win32/version/resource.c similarity index 100% rename from reactos/dll/win32/version/resource.c rename to dll/win32/version/resource.c diff --git a/reactos/dll/win32/version/ver.spec b/dll/win32/version/ver.spec similarity index 100% rename from reactos/dll/win32/version/ver.spec rename to dll/win32/version/ver.spec diff --git a/reactos/dll/win32/version/ver16.c b/dll/win32/version/ver16.c similarity index 100% rename from reactos/dll/win32/version/ver16.c rename to dll/win32/version/ver16.c diff --git a/reactos/dll/win32/version/version.rbuild b/dll/win32/version/version.rbuild similarity index 100% rename from reactos/dll/win32/version/version.rbuild rename to dll/win32/version/version.rbuild diff --git a/reactos/dll/win32/version/version.rc b/dll/win32/version/version.rc similarity index 100% rename from reactos/dll/win32/version/version.rc rename to dll/win32/version/version.rc diff --git a/reactos/dll/win32/version/version.spec b/dll/win32/version/version.spec similarity index 100% rename from reactos/dll/win32/version/version.spec rename to dll/win32/version/version.spec diff --git a/reactos/dll/win32/version/version_ros.diff b/dll/win32/version/version_ros.diff similarity index 100% rename from reactos/dll/win32/version/version_ros.diff rename to dll/win32/version/version_ros.diff diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.c b/dll/win32/wdmaud.drv/wdmaud.c similarity index 100% rename from reactos/dll/win32/wdmaud.drv/wdmaud.c rename to dll/win32/wdmaud.drv/wdmaud.c diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild b/dll/win32/wdmaud.drv/wdmaud.rbuild similarity index 100% rename from reactos/dll/win32/wdmaud.drv/wdmaud.rbuild rename to dll/win32/wdmaud.drv/wdmaud.rbuild diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.rc b/dll/win32/wdmaud.drv/wdmaud.rc similarity index 100% rename from reactos/dll/win32/wdmaud.drv/wdmaud.rc rename to dll/win32/wdmaud.drv/wdmaud.rc diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.spec b/dll/win32/wdmaud.drv/wdmaud.spec similarity index 100% rename from reactos/dll/win32/wdmaud.drv/wdmaud.spec rename to dll/win32/wdmaud.drv/wdmaud.spec diff --git a/reactos/dll/win32/win32.rbuild b/dll/win32/win32.rbuild similarity index 100% rename from reactos/dll/win32/win32.rbuild rename to dll/win32/win32.rbuild diff --git a/reactos/dll/win32/winfax/precomp.h b/dll/win32/winfax/precomp.h similarity index 100% rename from reactos/dll/win32/winfax/precomp.h rename to dll/win32/winfax/precomp.h diff --git a/reactos/dll/win32/winfax/winfax.c b/dll/win32/winfax/winfax.c similarity index 100% rename from reactos/dll/win32/winfax/winfax.c rename to dll/win32/winfax/winfax.c diff --git a/reactos/dll/win32/winfax/winfax.def b/dll/win32/winfax/winfax.def similarity index 100% rename from reactos/dll/win32/winfax/winfax.def rename to dll/win32/winfax/winfax.def diff --git a/reactos/dll/win32/winfax/winfax.rbuild b/dll/win32/winfax/winfax.rbuild similarity index 100% rename from reactos/dll/win32/winfax/winfax.rbuild rename to dll/win32/winfax/winfax.rbuild diff --git a/reactos/dll/win32/winfax/winfax.rc b/dll/win32/winfax/winfax.rc similarity index 100% rename from reactos/dll/win32/winfax/winfax.rc rename to dll/win32/winfax/winfax.rc diff --git a/reactos/dll/win32/winhttp/handle.c b/dll/win32/winhttp/handle.c similarity index 100% rename from reactos/dll/win32/winhttp/handle.c rename to dll/win32/winhttp/handle.c diff --git a/reactos/dll/win32/winhttp/inet_ntop.c b/dll/win32/winhttp/inet_ntop.c similarity index 100% rename from reactos/dll/win32/winhttp/inet_ntop.c rename to dll/win32/winhttp/inet_ntop.c diff --git a/reactos/dll/win32/winhttp/main.c b/dll/win32/winhttp/main.c similarity index 100% rename from reactos/dll/win32/winhttp/main.c rename to dll/win32/winhttp/main.c diff --git a/reactos/dll/win32/winhttp/net.c b/dll/win32/winhttp/net.c similarity index 100% rename from reactos/dll/win32/winhttp/net.c rename to dll/win32/winhttp/net.c diff --git a/reactos/dll/win32/winhttp/request.c b/dll/win32/winhttp/request.c similarity index 100% rename from reactos/dll/win32/winhttp/request.c rename to dll/win32/winhttp/request.c diff --git a/reactos/dll/win32/winhttp/session.c b/dll/win32/winhttp/session.c similarity index 100% rename from reactos/dll/win32/winhttp/session.c rename to dll/win32/winhttp/session.c diff --git a/reactos/dll/win32/winhttp/winhttp.rbuild b/dll/win32/winhttp/winhttp.rbuild similarity index 100% rename from reactos/dll/win32/winhttp/winhttp.rbuild rename to dll/win32/winhttp/winhttp.rbuild diff --git a/reactos/dll/win32/winhttp/winhttp.spec b/dll/win32/winhttp/winhttp.spec similarity index 100% rename from reactos/dll/win32/winhttp/winhttp.spec rename to dll/win32/winhttp/winhttp.spec diff --git a/reactos/dll/win32/winhttp/winhttp_private.h b/dll/win32/winhttp/winhttp_private.h similarity index 100% rename from reactos/dll/win32/winhttp/winhttp_private.h rename to dll/win32/winhttp/winhttp_private.h diff --git a/reactos/dll/win32/winhttp/winhttp_ros.diff b/dll/win32/winhttp/winhttp_ros.diff similarity index 100% rename from reactos/dll/win32/winhttp/winhttp_ros.diff rename to dll/win32/winhttp/winhttp_ros.diff diff --git a/reactos/dll/win32/wininet/cookie.c b/dll/win32/wininet/cookie.c similarity index 100% rename from reactos/dll/win32/wininet/cookie.c rename to dll/win32/wininet/cookie.c diff --git a/reactos/dll/win32/wininet/dialogs.c b/dll/win32/wininet/dialogs.c similarity index 100% rename from reactos/dll/win32/wininet/dialogs.c rename to dll/win32/wininet/dialogs.c diff --git a/reactos/dll/win32/wininet/ftp.c b/dll/win32/wininet/ftp.c similarity index 100% rename from reactos/dll/win32/wininet/ftp.c rename to dll/win32/wininet/ftp.c diff --git a/reactos/dll/win32/wininet/gopher.c b/dll/win32/wininet/gopher.c similarity index 100% rename from reactos/dll/win32/wininet/gopher.c rename to dll/win32/wininet/gopher.c diff --git a/reactos/dll/win32/wininet/http.c b/dll/win32/wininet/http.c similarity index 100% rename from reactos/dll/win32/wininet/http.c rename to dll/win32/wininet/http.c diff --git a/reactos/dll/win32/wininet/inet_ntop.c b/dll/win32/wininet/inet_ntop.c similarity index 100% rename from reactos/dll/win32/wininet/inet_ntop.c rename to dll/win32/wininet/inet_ntop.c diff --git a/reactos/dll/win32/wininet/internet.c b/dll/win32/wininet/internet.c similarity index 100% rename from reactos/dll/win32/wininet/internet.c rename to dll/win32/wininet/internet.c diff --git a/reactos/dll/win32/wininet/internet.h b/dll/win32/wininet/internet.h similarity index 100% rename from reactos/dll/win32/wininet/internet.h rename to dll/win32/wininet/internet.h diff --git a/reactos/dll/win32/wininet/netconnection.c b/dll/win32/wininet/netconnection.c similarity index 100% rename from reactos/dll/win32/wininet/netconnection.c rename to dll/win32/wininet/netconnection.c diff --git a/reactos/dll/win32/wininet/resource.h b/dll/win32/wininet/resource.h similarity index 100% rename from reactos/dll/win32/wininet/resource.h rename to dll/win32/wininet/resource.h diff --git a/reactos/dll/win32/wininet/rsrc.rc b/dll/win32/wininet/rsrc.rc similarity index 100% rename from reactos/dll/win32/wininet/rsrc.rc rename to dll/win32/wininet/rsrc.rc diff --git a/reactos/dll/win32/wininet/urlcache.c b/dll/win32/wininet/urlcache.c similarity index 100% rename from reactos/dll/win32/wininet/urlcache.c rename to dll/win32/wininet/urlcache.c diff --git a/reactos/dll/win32/wininet/utility.c b/dll/win32/wininet/utility.c similarity index 100% rename from reactos/dll/win32/wininet/utility.c rename to dll/win32/wininet/utility.c diff --git a/reactos/dll/win32/wininet/version.rc b/dll/win32/wininet/version.rc similarity index 100% rename from reactos/dll/win32/wininet/version.rc rename to dll/win32/wininet/version.rc diff --git a/reactos/dll/win32/wininet/wininet.rbuild b/dll/win32/wininet/wininet.rbuild similarity index 100% rename from reactos/dll/win32/wininet/wininet.rbuild rename to dll/win32/wininet/wininet.rbuild diff --git a/reactos/dll/win32/wininet/wininet.spec b/dll/win32/wininet/wininet.spec similarity index 100% rename from reactos/dll/win32/wininet/wininet.spec rename to dll/win32/wininet/wininet.spec diff --git a/reactos/dll/win32/wininet/wininet_Bg.rc b/dll/win32/wininet/wininet_Bg.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Bg.rc rename to dll/win32/wininet/wininet_Bg.rc diff --git a/reactos/dll/win32/wininet/wininet_Cs.rc b/dll/win32/wininet/wininet_Cs.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Cs.rc rename to dll/win32/wininet/wininet_Cs.rc diff --git a/reactos/dll/win32/wininet/wininet_Da.rc b/dll/win32/wininet/wininet_Da.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Da.rc rename to dll/win32/wininet/wininet_Da.rc diff --git a/reactos/dll/win32/wininet/wininet_De.rc b/dll/win32/wininet/wininet_De.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_De.rc rename to dll/win32/wininet/wininet_De.rc diff --git a/reactos/dll/win32/wininet/wininet_En.rc b/dll/win32/wininet/wininet_En.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_En.rc rename to dll/win32/wininet/wininet_En.rc diff --git a/reactos/dll/win32/wininet/wininet_Eo.rc b/dll/win32/wininet/wininet_Eo.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Eo.rc rename to dll/win32/wininet/wininet_Eo.rc diff --git a/reactos/dll/win32/wininet/wininet_Es.rc b/dll/win32/wininet/wininet_Es.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Es.rc rename to dll/win32/wininet/wininet_Es.rc diff --git a/reactos/dll/win32/wininet/wininet_Fi.rc b/dll/win32/wininet/wininet_Fi.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Fi.rc rename to dll/win32/wininet/wininet_Fi.rc diff --git a/reactos/dll/win32/wininet/wininet_Fr.rc b/dll/win32/wininet/wininet_Fr.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Fr.rc rename to dll/win32/wininet/wininet_Fr.rc diff --git a/reactos/dll/win32/wininet/wininet_Hu.rc b/dll/win32/wininet/wininet_Hu.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Hu.rc rename to dll/win32/wininet/wininet_Hu.rc diff --git a/reactos/dll/win32/wininet/wininet_It.rc b/dll/win32/wininet/wininet_It.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_It.rc rename to dll/win32/wininet/wininet_It.rc diff --git a/reactos/dll/win32/wininet/wininet_Ja.rc b/dll/win32/wininet/wininet_Ja.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Ja.rc rename to dll/win32/wininet/wininet_Ja.rc diff --git a/reactos/dll/win32/wininet/wininet_Ko.rc b/dll/win32/wininet/wininet_Ko.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Ko.rc rename to dll/win32/wininet/wininet_Ko.rc diff --git a/reactos/dll/win32/wininet/wininet_Nl.rc b/dll/win32/wininet/wininet_Nl.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Nl.rc rename to dll/win32/wininet/wininet_Nl.rc diff --git a/reactos/dll/win32/wininet/wininet_No.rc b/dll/win32/wininet/wininet_No.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_No.rc rename to dll/win32/wininet/wininet_No.rc diff --git a/reactos/dll/win32/wininet/wininet_Pl.rc b/dll/win32/wininet/wininet_Pl.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Pl.rc rename to dll/win32/wininet/wininet_Pl.rc diff --git a/reactos/dll/win32/wininet/wininet_Pt.rc b/dll/win32/wininet/wininet_Pt.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Pt.rc rename to dll/win32/wininet/wininet_Pt.rc diff --git a/reactos/dll/win32/wininet/wininet_Ro.rc b/dll/win32/wininet/wininet_Ro.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Ro.rc rename to dll/win32/wininet/wininet_Ro.rc diff --git a/reactos/dll/win32/wininet/wininet_Ru.rc b/dll/win32/wininet/wininet_Ru.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Ru.rc rename to dll/win32/wininet/wininet_Ru.rc diff --git a/reactos/dll/win32/wininet/wininet_Si.rc b/dll/win32/wininet/wininet_Si.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Si.rc rename to dll/win32/wininet/wininet_Si.rc diff --git a/reactos/dll/win32/wininet/wininet_Sv.rc b/dll/win32/wininet/wininet_Sv.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Sv.rc rename to dll/win32/wininet/wininet_Sv.rc diff --git a/reactos/dll/win32/wininet/wininet_Tr.rc b/dll/win32/wininet/wininet_Tr.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Tr.rc rename to dll/win32/wininet/wininet_Tr.rc diff --git a/reactos/dll/win32/wininet/wininet_Uk.rc b/dll/win32/wininet/wininet_Uk.rc similarity index 100% rename from reactos/dll/win32/wininet/wininet_Uk.rc rename to dll/win32/wininet/wininet_Uk.rc diff --git a/reactos/dll/win32/wininet/wininet_main.c b/dll/win32/wininet/wininet_main.c similarity index 100% rename from reactos/dll/win32/wininet/wininet_main.c rename to dll/win32/wininet/wininet_main.c diff --git a/reactos/dll/win32/wininet/wininet_ros.diff b/dll/win32/wininet/wininet_ros.diff similarity index 100% rename from reactos/dll/win32/wininet/wininet_ros.diff rename to dll/win32/wininet/wininet_ros.diff diff --git a/reactos/dll/win32/winmm/driver.c b/dll/win32/winmm/driver.c similarity index 100% rename from reactos/dll/win32/winmm/driver.c rename to dll/win32/winmm/driver.c diff --git a/reactos/dll/win32/winmm/joystick.c b/dll/win32/winmm/joystick.c similarity index 100% rename from reactos/dll/win32/winmm/joystick.c rename to dll/win32/winmm/joystick.c diff --git a/reactos/dll/win32/winmm/lolvldrv.c b/dll/win32/winmm/lolvldrv.c similarity index 100% rename from reactos/dll/win32/winmm/lolvldrv.c rename to dll/win32/winmm/lolvldrv.c diff --git a/reactos/dll/win32/winmm/mci.c b/dll/win32/winmm/mci.c similarity index 100% rename from reactos/dll/win32/winmm/mci.c rename to dll/win32/winmm/mci.c diff --git a/reactos/dll/win32/winmm/message16.c b/dll/win32/winmm/message16.c similarity index 100% rename from reactos/dll/win32/winmm/message16.c rename to dll/win32/winmm/message16.c diff --git a/reactos/dll/win32/winmm/midimap/midimap.c b/dll/win32/winmm/midimap/midimap.c similarity index 100% rename from reactos/dll/win32/winmm/midimap/midimap.c rename to dll/win32/winmm/midimap/midimap.c diff --git a/reactos/dll/win32/winmm/midimap/midimap.drv.spec b/dll/win32/winmm/midimap/midimap.drv.spec similarity index 100% rename from reactos/dll/win32/winmm/midimap/midimap.drv.spec rename to dll/win32/winmm/midimap/midimap.drv.spec diff --git a/reactos/dll/win32/winmm/midimap/midimap.rbuild b/dll/win32/winmm/midimap/midimap.rbuild similarity index 100% rename from reactos/dll/win32/winmm/midimap/midimap.rbuild rename to dll/win32/winmm/midimap/midimap.rbuild diff --git a/reactos/dll/win32/winmm/midimap/midimap.rc b/dll/win32/winmm/midimap/midimap.rc similarity index 100% rename from reactos/dll/win32/winmm/midimap/midimap.rc rename to dll/win32/winmm/midimap/midimap.rc diff --git a/reactos/dll/win32/winmm/midimap/midimap.spec b/dll/win32/winmm/midimap/midimap.spec similarity index 100% rename from reactos/dll/win32/winmm/midimap/midimap.spec rename to dll/win32/winmm/midimap/midimap.spec diff --git a/reactos/dll/win32/winmm/mmio.c b/dll/win32/winmm/mmio.c similarity index 100% rename from reactos/dll/win32/winmm/mmio.c rename to dll/win32/winmm/mmio.c diff --git a/reactos/dll/win32/winmm/mmsystem.c b/dll/win32/winmm/mmsystem.c similarity index 100% rename from reactos/dll/win32/winmm/mmsystem.c rename to dll/win32/winmm/mmsystem.c diff --git a/reactos/dll/win32/winmm/mmsystem.spec b/dll/win32/winmm/mmsystem.spec similarity index 100% rename from reactos/dll/win32/winmm/mmsystem.spec rename to dll/win32/winmm/mmsystem.spec diff --git a/reactos/dll/win32/winmm/playsound.c b/dll/win32/winmm/playsound.c similarity index 100% rename from reactos/dll/win32/winmm/playsound.c rename to dll/win32/winmm/playsound.c diff --git a/reactos/dll/win32/winmm/registry.c b/dll/win32/winmm/registry.c similarity index 100% rename from reactos/dll/win32/winmm/registry.c rename to dll/win32/winmm/registry.c diff --git a/reactos/dll/win32/winmm/sound.spec b/dll/win32/winmm/sound.spec similarity index 100% rename from reactos/dll/win32/winmm/sound.spec rename to dll/win32/winmm/sound.spec diff --git a/reactos/dll/win32/winmm/sound16.c b/dll/win32/winmm/sound16.c similarity index 100% rename from reactos/dll/win32/winmm/sound16.c rename to dll/win32/winmm/sound16.c diff --git a/reactos/dll/win32/winmm/time.c b/dll/win32/winmm/time.c similarity index 100% rename from reactos/dll/win32/winmm/time.c rename to dll/win32/winmm/time.c diff --git a/reactos/dll/win32/winmm/wavemap/msacm.drv.spec b/dll/win32/winmm/wavemap/msacm.drv.spec similarity index 100% rename from reactos/dll/win32/winmm/wavemap/msacm.drv.spec rename to dll/win32/winmm/wavemap/msacm.drv.spec diff --git a/reactos/dll/win32/winmm/wavemap/msacm.spec b/dll/win32/winmm/wavemap/msacm.spec similarity index 100% rename from reactos/dll/win32/winmm/wavemap/msacm.spec rename to dll/win32/winmm/wavemap/msacm.spec diff --git a/reactos/dll/win32/winmm/wavemap/wavemap.c b/dll/win32/winmm/wavemap/wavemap.c similarity index 100% rename from reactos/dll/win32/winmm/wavemap/wavemap.c rename to dll/win32/winmm/wavemap/wavemap.c diff --git a/reactos/dll/win32/winmm/wavemap/wavemap.rbuild b/dll/win32/winmm/wavemap/wavemap.rbuild similarity index 100% rename from reactos/dll/win32/winmm/wavemap/wavemap.rbuild rename to dll/win32/winmm/wavemap/wavemap.rbuild diff --git a/reactos/dll/win32/winmm/wavemap/wavemap.rc b/dll/win32/winmm/wavemap/wavemap.rc similarity index 100% rename from reactos/dll/win32/winmm/wavemap/wavemap.rc rename to dll/win32/winmm/wavemap/wavemap.rc diff --git a/reactos/dll/win32/winmm/winemm.h b/dll/win32/winmm/winemm.h similarity index 100% rename from reactos/dll/win32/winmm/winemm.h rename to dll/win32/winmm/winemm.h diff --git a/reactos/dll/win32/winmm/winemm16.h b/dll/win32/winmm/winemm16.h similarity index 100% rename from reactos/dll/win32/winmm/winemm16.h rename to dll/win32/winmm/winemm16.h diff --git a/reactos/dll/win32/winmm/winmm.c b/dll/win32/winmm/winmm.c similarity index 100% rename from reactos/dll/win32/winmm/winmm.c rename to dll/win32/winmm/winmm.c diff --git a/reactos/dll/win32/winmm/winmm.rbuild b/dll/win32/winmm/winmm.rbuild similarity index 100% rename from reactos/dll/win32/winmm/winmm.rbuild rename to dll/win32/winmm/winmm.rbuild diff --git a/reactos/dll/win32/winmm/winmm.spec b/dll/win32/winmm/winmm.spec similarity index 100% rename from reactos/dll/win32/winmm/winmm.spec rename to dll/win32/winmm/winmm.spec diff --git a/reactos/dll/win32/winmm/winmm_Br.rc b/dll/win32/winmm/winmm_Br.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Br.rc rename to dll/win32/winmm/winmm_Br.rc diff --git a/reactos/dll/win32/winmm/winmm_Cs.rc b/dll/win32/winmm/winmm_Cs.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Cs.rc rename to dll/win32/winmm/winmm_Cs.rc diff --git a/reactos/dll/win32/winmm/winmm_De.rc b/dll/win32/winmm/winmm_De.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_De.rc rename to dll/win32/winmm/winmm_De.rc diff --git a/reactos/dll/win32/winmm/winmm_En.rc b/dll/win32/winmm/winmm_En.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_En.rc rename to dll/win32/winmm/winmm_En.rc diff --git a/reactos/dll/win32/winmm/winmm_Es.rc b/dll/win32/winmm/winmm_Es.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Es.rc rename to dll/win32/winmm/winmm_Es.rc diff --git a/reactos/dll/win32/winmm/winmm_Fr.rc b/dll/win32/winmm/winmm_Fr.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Fr.rc rename to dll/win32/winmm/winmm_Fr.rc diff --git a/reactos/dll/win32/winmm/winmm_Hu.rc b/dll/win32/winmm/winmm_Hu.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Hu.rc rename to dll/win32/winmm/winmm_Hu.rc diff --git a/reactos/dll/win32/winmm/winmm_Id.rc b/dll/win32/winmm/winmm_Id.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Id.rc rename to dll/win32/winmm/winmm_Id.rc diff --git a/reactos/dll/win32/winmm/winmm_It.rc b/dll/win32/winmm/winmm_It.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_It.rc rename to dll/win32/winmm/winmm_It.rc diff --git a/reactos/dll/win32/winmm/winmm_Ja.rc b/dll/win32/winmm/winmm_Ja.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Ja.rc rename to dll/win32/winmm/winmm_Ja.rc diff --git a/reactos/dll/win32/winmm/winmm_Nl.rc b/dll/win32/winmm/winmm_Nl.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Nl.rc rename to dll/win32/winmm/winmm_Nl.rc diff --git a/reactos/dll/win32/winmm/winmm_No.rc b/dll/win32/winmm/winmm_No.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_No.rc rename to dll/win32/winmm/winmm_No.rc diff --git a/reactos/dll/win32/winmm/winmm_Pl.rc b/dll/win32/winmm/winmm_Pl.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Pl.rc rename to dll/win32/winmm/winmm_Pl.rc diff --git a/reactos/dll/win32/winmm/winmm_Pt.rc b/dll/win32/winmm/winmm_Pt.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Pt.rc rename to dll/win32/winmm/winmm_Pt.rc diff --git a/reactos/dll/win32/winmm/winmm_Ru.rc b/dll/win32/winmm/winmm_Ru.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Ru.rc rename to dll/win32/winmm/winmm_Ru.rc diff --git a/reactos/dll/win32/winmm/winmm_Si.rc b/dll/win32/winmm/winmm_Si.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Si.rc rename to dll/win32/winmm/winmm_Si.rc diff --git a/reactos/dll/win32/winmm/winmm_Sk.rc b/dll/win32/winmm/winmm_Sk.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Sk.rc rename to dll/win32/winmm/winmm_Sk.rc diff --git a/reactos/dll/win32/winmm/winmm_Uk.rc b/dll/win32/winmm/winmm_Uk.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_Uk.rc rename to dll/win32/winmm/winmm_Uk.rc diff --git a/reactos/dll/win32/winmm/winmm_res.rc b/dll/win32/winmm/winmm_res.rc similarity index 100% rename from reactos/dll/win32/winmm/winmm_res.rc rename to dll/win32/winmm/winmm_res.rc diff --git a/reactos/dll/win32/winscard/precomp.h b/dll/win32/winscard/precomp.h similarity index 100% rename from reactos/dll/win32/winscard/precomp.h rename to dll/win32/winscard/precomp.h diff --git a/reactos/dll/win32/winscard/winscard.c b/dll/win32/winscard/winscard.c similarity index 100% rename from reactos/dll/win32/winscard/winscard.c rename to dll/win32/winscard/winscard.c diff --git a/reactos/dll/win32/winscard/winscard.def b/dll/win32/winscard/winscard.def similarity index 100% rename from reactos/dll/win32/winscard/winscard.def rename to dll/win32/winscard/winscard.def diff --git a/reactos/dll/win32/winscard/winscard.rc b/dll/win32/winscard/winscard.rc similarity index 100% rename from reactos/dll/win32/winscard/winscard.rc rename to dll/win32/winscard/winscard.rc diff --git a/reactos/dll/win32/winspool/info.c b/dll/win32/winspool/info.c similarity index 100% rename from reactos/dll/win32/winspool/info.c rename to dll/win32/winspool/info.c diff --git a/reactos/dll/win32/winspool/stubs.c b/dll/win32/winspool/stubs.c similarity index 100% rename from reactos/dll/win32/winspool/stubs.c rename to dll/win32/winspool/stubs.c diff --git a/reactos/dll/win32/winspool/winspool.def b/dll/win32/winspool/winspool.def similarity index 100% rename from reactos/dll/win32/winspool/winspool.def rename to dll/win32/winspool/winspool.def diff --git a/reactos/dll/win32/winspool/winspool.rbuild b/dll/win32/winspool/winspool.rbuild similarity index 100% rename from reactos/dll/win32/winspool/winspool.rbuild rename to dll/win32/winspool/winspool.rbuild diff --git a/reactos/dll/win32/winspool/winspool.rc b/dll/win32/winspool/winspool.rc similarity index 100% rename from reactos/dll/win32/winspool/winspool.rc rename to dll/win32/winspool/winspool.rc diff --git a/reactos/dll/win32/winsta/main.c b/dll/win32/winsta/main.c similarity index 100% rename from reactos/dll/win32/winsta/main.c rename to dll/win32/winsta/main.c diff --git a/reactos/dll/win32/winsta/misc.c b/dll/win32/winsta/misc.c similarity index 100% rename from reactos/dll/win32/winsta/misc.c rename to dll/win32/winsta/misc.c diff --git a/reactos/dll/win32/winsta/server.c b/dll/win32/winsta/server.c similarity index 100% rename from reactos/dll/win32/winsta/server.c rename to dll/win32/winsta/server.c diff --git a/reactos/dll/win32/winsta/winsta.def b/dll/win32/winsta/winsta.def similarity index 100% rename from reactos/dll/win32/winsta/winsta.def rename to dll/win32/winsta/winsta.def diff --git a/reactos/dll/win32/winsta/winsta.h b/dll/win32/winsta/winsta.h similarity index 100% rename from reactos/dll/win32/winsta/winsta.h rename to dll/win32/winsta/winsta.h diff --git a/reactos/dll/win32/winsta/winsta.rbuild b/dll/win32/winsta/winsta.rbuild similarity index 100% rename from reactos/dll/win32/winsta/winsta.rbuild rename to dll/win32/winsta/winsta.rbuild diff --git a/reactos/dll/win32/winsta/winsta.rc b/dll/win32/winsta/winsta.rc similarity index 100% rename from reactos/dll/win32/winsta/winsta.rc rename to dll/win32/winsta/winsta.rc diff --git a/reactos/dll/win32/winsta/ws.c b/dll/win32/winsta/ws.c similarity index 100% rename from reactos/dll/win32/winsta/ws.c rename to dll/win32/winsta/ws.c diff --git a/reactos/dll/win32/wintrust/asn.c b/dll/win32/wintrust/asn.c similarity index 100% rename from reactos/dll/win32/wintrust/asn.c rename to dll/win32/wintrust/asn.c diff --git a/reactos/dll/win32/wintrust/crypt.c b/dll/win32/wintrust/crypt.c similarity index 100% rename from reactos/dll/win32/wintrust/crypt.c rename to dll/win32/wintrust/crypt.c diff --git a/reactos/dll/win32/wintrust/register.c b/dll/win32/wintrust/register.c similarity index 100% rename from reactos/dll/win32/wintrust/register.c rename to dll/win32/wintrust/register.c diff --git a/reactos/dll/win32/wintrust/softpub.c b/dll/win32/wintrust/softpub.c similarity index 100% rename from reactos/dll/win32/wintrust/softpub.c rename to dll/win32/wintrust/softpub.c diff --git a/reactos/dll/win32/wintrust/version.rc b/dll/win32/wintrust/version.rc similarity index 100% rename from reactos/dll/win32/wintrust/version.rc rename to dll/win32/wintrust/version.rc diff --git a/reactos/dll/win32/wintrust/wintrust.rbuild b/dll/win32/wintrust/wintrust.rbuild similarity index 100% rename from reactos/dll/win32/wintrust/wintrust.rbuild rename to dll/win32/wintrust/wintrust.rbuild diff --git a/reactos/dll/win32/wintrust/wintrust.spec b/dll/win32/wintrust/wintrust.spec similarity index 100% rename from reactos/dll/win32/wintrust/wintrust.spec rename to dll/win32/wintrust/wintrust.spec diff --git a/reactos/dll/win32/wintrust/wintrust_main.c b/dll/win32/wintrust/wintrust_main.c similarity index 100% rename from reactos/dll/win32/wintrust/wintrust_main.c rename to dll/win32/wintrust/wintrust_main.c diff --git a/reactos/dll/win32/wintrust/wintrust_priv.h b/dll/win32/wintrust/wintrust_priv.h similarity index 100% rename from reactos/dll/win32/wintrust/wintrust_priv.h rename to dll/win32/wintrust/wintrust_priv.h diff --git a/reactos/dll/win32/wintrust/wintrust_ros.diff b/dll/win32/wintrust/wintrust_ros.diff similarity index 100% rename from reactos/dll/win32/wintrust/wintrust_ros.diff rename to dll/win32/wintrust/wintrust_ros.diff diff --git a/reactos/dll/win32/wldap32/add.c b/dll/win32/wldap32/add.c similarity index 100% rename from reactos/dll/win32/wldap32/add.c rename to dll/win32/wldap32/add.c diff --git a/reactos/dll/win32/wldap32/ber.c b/dll/win32/wldap32/ber.c similarity index 100% rename from reactos/dll/win32/wldap32/ber.c rename to dll/win32/wldap32/ber.c diff --git a/reactos/dll/win32/wldap32/bind.c b/dll/win32/wldap32/bind.c similarity index 100% rename from reactos/dll/win32/wldap32/bind.c rename to dll/win32/wldap32/bind.c diff --git a/reactos/dll/win32/wldap32/compare.c b/dll/win32/wldap32/compare.c similarity index 100% rename from reactos/dll/win32/wldap32/compare.c rename to dll/win32/wldap32/compare.c diff --git a/reactos/dll/win32/wldap32/control.c b/dll/win32/wldap32/control.c similarity index 100% rename from reactos/dll/win32/wldap32/control.c rename to dll/win32/wldap32/control.c diff --git a/reactos/dll/win32/wldap32/delete.c b/dll/win32/wldap32/delete.c similarity index 100% rename from reactos/dll/win32/wldap32/delete.c rename to dll/win32/wldap32/delete.c diff --git a/reactos/dll/win32/wldap32/dn.c b/dll/win32/wldap32/dn.c similarity index 100% rename from reactos/dll/win32/wldap32/dn.c rename to dll/win32/wldap32/dn.c diff --git a/reactos/dll/win32/wldap32/error.c b/dll/win32/wldap32/error.c similarity index 100% rename from reactos/dll/win32/wldap32/error.c rename to dll/win32/wldap32/error.c diff --git a/reactos/dll/win32/wldap32/extended.c b/dll/win32/wldap32/extended.c similarity index 100% rename from reactos/dll/win32/wldap32/extended.c rename to dll/win32/wldap32/extended.c diff --git a/reactos/dll/win32/wldap32/init.c b/dll/win32/wldap32/init.c similarity index 100% rename from reactos/dll/win32/wldap32/init.c rename to dll/win32/wldap32/init.c diff --git a/reactos/dll/win32/wldap32/main.c b/dll/win32/wldap32/main.c similarity index 100% rename from reactos/dll/win32/wldap32/main.c rename to dll/win32/wldap32/main.c diff --git a/reactos/dll/win32/wldap32/misc.c b/dll/win32/wldap32/misc.c similarity index 100% rename from reactos/dll/win32/wldap32/misc.c rename to dll/win32/wldap32/misc.c diff --git a/reactos/dll/win32/wldap32/modify.c b/dll/win32/wldap32/modify.c similarity index 100% rename from reactos/dll/win32/wldap32/modify.c rename to dll/win32/wldap32/modify.c diff --git a/reactos/dll/win32/wldap32/modrdn.c b/dll/win32/wldap32/modrdn.c similarity index 100% rename from reactos/dll/win32/wldap32/modrdn.c rename to dll/win32/wldap32/modrdn.c diff --git a/reactos/dll/win32/wldap32/option.c b/dll/win32/wldap32/option.c similarity index 100% rename from reactos/dll/win32/wldap32/option.c rename to dll/win32/wldap32/option.c diff --git a/reactos/dll/win32/wldap32/page.c b/dll/win32/wldap32/page.c similarity index 100% rename from reactos/dll/win32/wldap32/page.c rename to dll/win32/wldap32/page.c diff --git a/reactos/dll/win32/wldap32/parse.c b/dll/win32/wldap32/parse.c similarity index 100% rename from reactos/dll/win32/wldap32/parse.c rename to dll/win32/wldap32/parse.c diff --git a/reactos/dll/win32/wldap32/rename.c b/dll/win32/wldap32/rename.c similarity index 100% rename from reactos/dll/win32/wldap32/rename.c rename to dll/win32/wldap32/rename.c diff --git a/reactos/dll/win32/wldap32/search.c b/dll/win32/wldap32/search.c similarity index 100% rename from reactos/dll/win32/wldap32/search.c rename to dll/win32/wldap32/search.c diff --git a/reactos/dll/win32/wldap32/value.c b/dll/win32/wldap32/value.c similarity index 100% rename from reactos/dll/win32/wldap32/value.c rename to dll/win32/wldap32/value.c diff --git a/reactos/dll/win32/wldap32/winldap_private.h b/dll/win32/wldap32/winldap_private.h similarity index 100% rename from reactos/dll/win32/wldap32/winldap_private.h rename to dll/win32/wldap32/winldap_private.h diff --git a/reactos/dll/win32/wldap32/wldap32.h b/dll/win32/wldap32/wldap32.h similarity index 100% rename from reactos/dll/win32/wldap32/wldap32.h rename to dll/win32/wldap32/wldap32.h diff --git a/reactos/dll/win32/wldap32/wldap32.rbuild b/dll/win32/wldap32/wldap32.rbuild similarity index 100% rename from reactos/dll/win32/wldap32/wldap32.rbuild rename to dll/win32/wldap32/wldap32.rbuild diff --git a/reactos/dll/win32/wldap32/wldap32.rc b/dll/win32/wldap32/wldap32.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32.rc rename to dll/win32/wldap32/wldap32.rc diff --git a/reactos/dll/win32/wldap32/wldap32.spec b/dll/win32/wldap32/wldap32.spec similarity index 100% rename from reactos/dll/win32/wldap32/wldap32.spec rename to dll/win32/wldap32/wldap32.spec diff --git a/reactos/dll/win32/wldap32/wldap32_Da.rc b/dll/win32/wldap32/wldap32_Da.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Da.rc rename to dll/win32/wldap32/wldap32_Da.rc diff --git a/reactos/dll/win32/wldap32/wldap32_De.rc b/dll/win32/wldap32/wldap32_De.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_De.rc rename to dll/win32/wldap32/wldap32_De.rc diff --git a/reactos/dll/win32/wldap32/wldap32_En.rc b/dll/win32/wldap32/wldap32_En.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_En.rc rename to dll/win32/wldap32/wldap32_En.rc diff --git a/reactos/dll/win32/wldap32/wldap32_Es.rc b/dll/win32/wldap32/wldap32_Es.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Es.rc rename to dll/win32/wldap32/wldap32_Es.rc diff --git a/reactos/dll/win32/wldap32/wldap32_Fr.rc b/dll/win32/wldap32/wldap32_Fr.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Fr.rc rename to dll/win32/wldap32/wldap32_Fr.rc diff --git a/reactos/dll/win32/wldap32/wldap32_Ko.rc b/dll/win32/wldap32/wldap32_Ko.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Ko.rc rename to dll/win32/wldap32/wldap32_Ko.rc diff --git a/reactos/dll/win32/wldap32/wldap32_Nl.rc b/dll/win32/wldap32/wldap32_Nl.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Nl.rc rename to dll/win32/wldap32/wldap32_Nl.rc diff --git a/reactos/dll/win32/wldap32/wldap32_No.rc b/dll/win32/wldap32/wldap32_No.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_No.rc rename to dll/win32/wldap32/wldap32_No.rc diff --git a/reactos/dll/win32/wldap32/wldap32_Pl.rc b/dll/win32/wldap32/wldap32_Pl.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Pl.rc rename to dll/win32/wldap32/wldap32_Pl.rc diff --git a/reactos/dll/win32/wldap32/wldap32_Ru.rc b/dll/win32/wldap32/wldap32_Ru.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Ru.rc rename to dll/win32/wldap32/wldap32_Ru.rc diff --git a/reactos/dll/win32/wldap32/wldap32_Sv.rc b/dll/win32/wldap32/wldap32_Sv.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Sv.rc rename to dll/win32/wldap32/wldap32_Sv.rc diff --git a/reactos/dll/win32/wldap32/wldap32_Tr.rc b/dll/win32/wldap32/wldap32_Tr.rc similarity index 100% rename from reactos/dll/win32/wldap32/wldap32_Tr.rc rename to dll/win32/wldap32/wldap32_Tr.rc diff --git a/reactos/dll/win32/ws2_32/include/catalog.h b/dll/win32/ws2_32/include/catalog.h similarity index 100% rename from reactos/dll/win32/ws2_32/include/catalog.h rename to dll/win32/ws2_32/include/catalog.h diff --git a/reactos/dll/win32/ws2_32/include/debug.h b/dll/win32/ws2_32/include/debug.h similarity index 100% rename from reactos/dll/win32/ws2_32/include/debug.h rename to dll/win32/ws2_32/include/debug.h diff --git a/reactos/dll/win32/ws2_32/include/handle.h b/dll/win32/ws2_32/include/handle.h similarity index 100% rename from reactos/dll/win32/ws2_32/include/handle.h rename to dll/win32/ws2_32/include/handle.h diff --git a/reactos/dll/win32/ws2_32/include/upcall.h b/dll/win32/ws2_32/include/upcall.h similarity index 100% rename from reactos/dll/win32/ws2_32/include/upcall.h rename to dll/win32/ws2_32/include/upcall.h diff --git a/reactos/dll/win32/ws2_32/include/ws2_32.h b/dll/win32/ws2_32/include/ws2_32.h similarity index 100% rename from reactos/dll/win32/ws2_32/include/ws2_32.h rename to dll/win32/ws2_32/include/ws2_32.h diff --git a/reactos/dll/win32/ws2_32/misc/async.c b/dll/win32/ws2_32/misc/async.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/async.c rename to dll/win32/ws2_32/misc/async.c diff --git a/reactos/dll/win32/ws2_32/misc/bsd.c b/dll/win32/ws2_32/misc/bsd.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/bsd.c rename to dll/win32/ws2_32/misc/bsd.c diff --git a/reactos/dll/win32/ws2_32/misc/catalog.c b/dll/win32/ws2_32/misc/catalog.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/catalog.c rename to dll/win32/ws2_32/misc/catalog.c diff --git a/reactos/dll/win32/ws2_32/misc/dllmain.c b/dll/win32/ws2_32/misc/dllmain.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/dllmain.c rename to dll/win32/ws2_32/misc/dllmain.c diff --git a/reactos/dll/win32/ws2_32/misc/event.c b/dll/win32/ws2_32/misc/event.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/event.c rename to dll/win32/ws2_32/misc/event.c diff --git a/reactos/dll/win32/ws2_32/misc/handle.c b/dll/win32/ws2_32/misc/handle.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/handle.c rename to dll/win32/ws2_32/misc/handle.c diff --git a/reactos/dll/win32/ws2_32/misc/ns.c b/dll/win32/ws2_32/misc/ns.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/ns.c rename to dll/win32/ws2_32/misc/ns.c diff --git a/reactos/dll/win32/ws2_32/misc/sndrcv.c b/dll/win32/ws2_32/misc/sndrcv.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/sndrcv.c rename to dll/win32/ws2_32/misc/sndrcv.c diff --git a/reactos/dll/win32/ws2_32/misc/stubs.c b/dll/win32/ws2_32/misc/stubs.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/stubs.c rename to dll/win32/ws2_32/misc/stubs.c diff --git a/reactos/dll/win32/ws2_32/misc/upcall.c b/dll/win32/ws2_32/misc/upcall.c similarity index 100% rename from reactos/dll/win32/ws2_32/misc/upcall.c rename to dll/win32/ws2_32/misc/upcall.c diff --git a/reactos/dll/win32/ws2_32/tests/setup.c b/dll/win32/ws2_32/tests/setup.c similarity index 100% rename from reactos/dll/win32/ws2_32/tests/setup.c rename to dll/win32/ws2_32/tests/setup.c diff --git a/reactos/dll/win32/ws2_32/tests/stubs.tst b/dll/win32/ws2_32/tests/stubs.tst similarity index 100% rename from reactos/dll/win32/ws2_32/tests/stubs.tst rename to dll/win32/ws2_32/tests/stubs.tst diff --git a/reactos/dll/win32/ws2_32/tests/tests/WinsockEvent.c b/dll/win32/ws2_32/tests/tests/WinsockEvent.c similarity index 100% rename from reactos/dll/win32/ws2_32/tests/tests/WinsockEvent.c rename to dll/win32/ws2_32/tests/tests/WinsockEvent.c diff --git a/reactos/dll/win32/ws2_32/ws2_32.def b/dll/win32/ws2_32/ws2_32.def similarity index 100% rename from reactos/dll/win32/ws2_32/ws2_32.def rename to dll/win32/ws2_32/ws2_32.def diff --git a/reactos/dll/win32/ws2_32/ws2_32.rbuild b/dll/win32/ws2_32/ws2_32.rbuild similarity index 100% rename from reactos/dll/win32/ws2_32/ws2_32.rbuild rename to dll/win32/ws2_32/ws2_32.rbuild diff --git a/reactos/dll/win32/ws2_32/ws2_32.rc b/dll/win32/ws2_32/ws2_32.rc similarity index 100% rename from reactos/dll/win32/ws2_32/ws2_32.rc rename to dll/win32/ws2_32/ws2_32.rc diff --git a/reactos/dll/win32/ws2help/debug.h b/dll/win32/ws2help/debug.h similarity index 100% rename from reactos/dll/win32/ws2help/debug.h rename to dll/win32/ws2help/debug.h diff --git a/reactos/dll/win32/ws2help/ws2help.c b/dll/win32/ws2help/ws2help.c similarity index 100% rename from reactos/dll/win32/ws2help/ws2help.c rename to dll/win32/ws2help/ws2help.c diff --git a/reactos/dll/win32/ws2help/ws2help.def b/dll/win32/ws2help/ws2help.def similarity index 100% rename from reactos/dll/win32/ws2help/ws2help.def rename to dll/win32/ws2help/ws2help.def diff --git a/reactos/dll/win32/ws2help/ws2help.h b/dll/win32/ws2help/ws2help.h similarity index 100% rename from reactos/dll/win32/ws2help/ws2help.h rename to dll/win32/ws2help/ws2help.h diff --git a/reactos/dll/win32/ws2help/ws2help.rbuild b/dll/win32/ws2help/ws2help.rbuild similarity index 100% rename from reactos/dll/win32/ws2help/ws2help.rbuild rename to dll/win32/ws2help/ws2help.rbuild diff --git a/reactos/dll/win32/ws2help/ws2help.rc b/dll/win32/ws2help/ws2help.rc similarity index 100% rename from reactos/dll/win32/ws2help/ws2help.rc rename to dll/win32/ws2help/ws2help.rc diff --git a/reactos/dll/win32/wshirda/debug.h b/dll/win32/wshirda/debug.h similarity index 100% rename from reactos/dll/win32/wshirda/debug.h rename to dll/win32/wshirda/debug.h diff --git a/reactos/dll/win32/wshirda/wshirda.c b/dll/win32/wshirda/wshirda.c similarity index 100% rename from reactos/dll/win32/wshirda/wshirda.c rename to dll/win32/wshirda/wshirda.c diff --git a/reactos/dll/win32/wshirda/wshirda.def b/dll/win32/wshirda/wshirda.def similarity index 100% rename from reactos/dll/win32/wshirda/wshirda.def rename to dll/win32/wshirda/wshirda.def diff --git a/reactos/dll/win32/wshirda/wshirda.h b/dll/win32/wshirda/wshirda.h similarity index 100% rename from reactos/dll/win32/wshirda/wshirda.h rename to dll/win32/wshirda/wshirda.h diff --git a/reactos/dll/win32/wshirda/wshirda.rbuild b/dll/win32/wshirda/wshirda.rbuild similarity index 100% rename from reactos/dll/win32/wshirda/wshirda.rbuild rename to dll/win32/wshirda/wshirda.rbuild diff --git a/reactos/dll/win32/wshirda/wshirda.rc b/dll/win32/wshirda/wshirda.rc similarity index 100% rename from reactos/dll/win32/wshirda/wshirda.rc rename to dll/win32/wshirda/wshirda.rc diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.c b/dll/win32/wshtcpip/wshtcpip.c similarity index 100% rename from reactos/dll/win32/wshtcpip/wshtcpip.c rename to dll/win32/wshtcpip/wshtcpip.c diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.h b/dll/win32/wshtcpip/wshtcpip.h similarity index 100% rename from reactos/dll/win32/wshtcpip/wshtcpip.h rename to dll/win32/wshtcpip/wshtcpip.h diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild b/dll/win32/wshtcpip/wshtcpip.rbuild similarity index 100% rename from reactos/dll/win32/wshtcpip/wshtcpip.rbuild rename to dll/win32/wshtcpip/wshtcpip.rbuild diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rc b/dll/win32/wshtcpip/wshtcpip.rc similarity index 100% rename from reactos/dll/win32/wshtcpip/wshtcpip.rc rename to dll/win32/wshtcpip/wshtcpip.rc diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.spec b/dll/win32/wshtcpip/wshtcpip.spec similarity index 100% rename from reactos/dll/win32/wshtcpip/wshtcpip.spec rename to dll/win32/wshtcpip/wshtcpip.spec diff --git a/reactos/dll/win32/wshtcpip/wshtcpip_specs b/dll/win32/wshtcpip/wshtcpip_specs similarity index 100% rename from reactos/dll/win32/wshtcpip/wshtcpip_specs rename to dll/win32/wshtcpip/wshtcpip_specs diff --git a/reactos/dll/win32/wsock32/stubs.c b/dll/win32/wsock32/stubs.c similarity index 100% rename from reactos/dll/win32/wsock32/stubs.c rename to dll/win32/wsock32/stubs.c diff --git a/reactos/dll/win32/wsock32/wsock32.def b/dll/win32/wsock32/wsock32.def similarity index 100% rename from reactos/dll/win32/wsock32/wsock32.def rename to dll/win32/wsock32/wsock32.def diff --git a/reactos/dll/win32/wsock32/wsock32.rbuild b/dll/win32/wsock32/wsock32.rbuild similarity index 100% rename from reactos/dll/win32/wsock32/wsock32.rbuild rename to dll/win32/wsock32/wsock32.rbuild diff --git a/reactos/dll/win32/wsock32/wsock32.rc b/dll/win32/wsock32/wsock32.rc similarity index 100% rename from reactos/dll/win32/wsock32/wsock32.rc rename to dll/win32/wsock32/wsock32.rc diff --git a/reactos/dll/win32/wtsapi32/wtsapi32.c b/dll/win32/wtsapi32/wtsapi32.c similarity index 100% rename from reactos/dll/win32/wtsapi32/wtsapi32.c rename to dll/win32/wtsapi32/wtsapi32.c diff --git a/reactos/dll/win32/wtsapi32/wtsapi32.rbuild b/dll/win32/wtsapi32/wtsapi32.rbuild similarity index 100% rename from reactos/dll/win32/wtsapi32/wtsapi32.rbuild rename to dll/win32/wtsapi32/wtsapi32.rbuild diff --git a/reactos/dll/win32/wtsapi32/wtsapi32.spec b/dll/win32/wtsapi32/wtsapi32.spec similarity index 100% rename from reactos/dll/win32/wtsapi32/wtsapi32.spec rename to dll/win32/wtsapi32/wtsapi32.spec diff --git a/reactos/drivers/Doxyfile b/drivers/Doxyfile similarity index 100% rename from reactos/drivers/Doxyfile rename to drivers/Doxyfile diff --git a/reactos/drivers/base/beep/beep.c b/drivers/base/beep/beep.c similarity index 100% rename from reactos/drivers/base/beep/beep.c rename to drivers/base/beep/beep.c diff --git a/reactos/drivers/base/beep/beep.rbuild b/drivers/base/beep/beep.rbuild similarity index 100% rename from reactos/drivers/base/beep/beep.rbuild rename to drivers/base/beep/beep.rbuild diff --git a/reactos/drivers/base/beep/beep.rc b/drivers/base/beep/beep.rc similarity index 100% rename from reactos/drivers/base/beep/beep.rc rename to drivers/base/beep/beep.rc diff --git a/reactos/drivers/base/bootvid/arm/bootdata.c b/drivers/base/bootvid/arm/bootdata.c similarity index 100% rename from reactos/drivers/base/bootvid/arm/bootdata.c rename to drivers/base/bootvid/arm/bootdata.c diff --git a/reactos/drivers/base/bootvid/arm/bootvid.c b/drivers/base/bootvid/arm/bootvid.c similarity index 100% rename from reactos/drivers/base/bootvid/arm/bootvid.c rename to drivers/base/bootvid/arm/bootvid.c diff --git a/reactos/drivers/base/bootvid/bootvid.rbuild b/drivers/base/bootvid/bootvid.rbuild similarity index 100% rename from reactos/drivers/base/bootvid/bootvid.rbuild rename to drivers/base/bootvid/bootvid.rbuild diff --git a/reactos/drivers/base/bootvid/bootvid.rc b/drivers/base/bootvid/bootvid.rc similarity index 100% rename from reactos/drivers/base/bootvid/bootvid.rc rename to drivers/base/bootvid/bootvid.rc diff --git a/reactos/drivers/base/bootvid/bootvid.spec b/drivers/base/bootvid/bootvid.spec similarity index 100% rename from reactos/drivers/base/bootvid/bootvid.spec rename to drivers/base/bootvid/bootvid.spec diff --git a/reactos/drivers/base/bootvid/i386/bootdata.c b/drivers/base/bootvid/i386/bootdata.c similarity index 100% rename from reactos/drivers/base/bootvid/i386/bootdata.c rename to drivers/base/bootvid/i386/bootdata.c diff --git a/reactos/drivers/base/bootvid/i386/bootvid.c b/drivers/base/bootvid/i386/bootvid.c similarity index 100% rename from reactos/drivers/base/bootvid/i386/bootvid.c rename to drivers/base/bootvid/i386/bootvid.c diff --git a/reactos/drivers/base/bootvid/i386/vga.c b/drivers/base/bootvid/i386/vga.c similarity index 100% rename from reactos/drivers/base/bootvid/i386/vga.c rename to drivers/base/bootvid/i386/vga.c diff --git a/reactos/drivers/base/bootvid/precomp.h b/drivers/base/bootvid/precomp.h similarity index 100% rename from reactos/drivers/base/bootvid/precomp.h rename to drivers/base/bootvid/precomp.h diff --git a/reactos/drivers/base/directory.rbuild b/drivers/base/directory.rbuild similarity index 100% rename from reactos/drivers/base/directory.rbuild rename to drivers/base/directory.rbuild diff --git a/reactos/drivers/base/kdcom/arm/kdbg.c b/drivers/base/kdcom/arm/kdbg.c similarity index 100% rename from reactos/drivers/base/kdcom/arm/kdbg.c rename to drivers/base/kdcom/arm/kdbg.c diff --git a/reactos/drivers/base/kdcom/i386/kdbg.c b/drivers/base/kdcom/i386/kdbg.c similarity index 100% rename from reactos/drivers/base/kdcom/i386/kdbg.c rename to drivers/base/kdcom/i386/kdbg.c diff --git a/reactos/drivers/base/kdcom/kdcom.rbuild b/drivers/base/kdcom/kdcom.rbuild similarity index 100% rename from reactos/drivers/base/kdcom/kdcom.rbuild rename to drivers/base/kdcom/kdcom.rbuild diff --git a/reactos/drivers/base/kdcom/kdcom.rc b/drivers/base/kdcom/kdcom.rc similarity index 100% rename from reactos/drivers/base/kdcom/kdcom.rc rename to drivers/base/kdcom/kdcom.rc diff --git a/reactos/drivers/base/kdcom/kdcom.spec b/drivers/base/kdcom/kdcom.spec similarity index 100% rename from reactos/drivers/base/kdcom/kdcom.spec rename to drivers/base/kdcom/kdcom.spec diff --git a/reactos/drivers/base/null/null.c b/drivers/base/null/null.c similarity index 100% rename from reactos/drivers/base/null/null.c rename to drivers/base/null/null.c diff --git a/reactos/drivers/base/null/null.rbuild b/drivers/base/null/null.rbuild similarity index 100% rename from reactos/drivers/base/null/null.rbuild rename to drivers/base/null/null.rbuild diff --git a/reactos/drivers/base/null/null.rc b/drivers/base/null/null.rc similarity index 100% rename from reactos/drivers/base/null/null.rc rename to drivers/base/null/null.rc diff --git a/reactos/drivers/bus/acpi/acpi.rbuild b/drivers/bus/acpi/acpi.rbuild similarity index 100% rename from reactos/drivers/bus/acpi/acpi.rbuild rename to drivers/bus/acpi/acpi.rbuild diff --git a/reactos/drivers/bus/acpi/acpi.rc b/drivers/bus/acpi/acpi.rc similarity index 100% rename from reactos/drivers/bus/acpi/acpi.rc rename to drivers/bus/acpi/acpi.rc diff --git a/reactos/drivers/bus/acpi/changed.txt b/drivers/bus/acpi/changed.txt similarity index 100% rename from reactos/drivers/bus/acpi/changed.txt rename to drivers/bus/acpi/changed.txt diff --git a/reactos/drivers/bus/acpi/dispatcher/dsfield.c b/drivers/bus/acpi/dispatcher/dsfield.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dsfield.c rename to drivers/bus/acpi/dispatcher/dsfield.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dsmethod.c b/drivers/bus/acpi/dispatcher/dsmethod.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dsmethod.c rename to drivers/bus/acpi/dispatcher/dsmethod.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dsmthdat.c b/drivers/bus/acpi/dispatcher/dsmthdat.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dsmthdat.c rename to drivers/bus/acpi/dispatcher/dsmthdat.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dsobject.c b/drivers/bus/acpi/dispatcher/dsobject.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dsobject.c rename to drivers/bus/acpi/dispatcher/dsobject.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dsopcode.c b/drivers/bus/acpi/dispatcher/dsopcode.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dsopcode.c rename to drivers/bus/acpi/dispatcher/dsopcode.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dsutils.c b/drivers/bus/acpi/dispatcher/dsutils.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dsutils.c rename to drivers/bus/acpi/dispatcher/dsutils.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dswexec.c b/drivers/bus/acpi/dispatcher/dswexec.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dswexec.c rename to drivers/bus/acpi/dispatcher/dswexec.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dswload.c b/drivers/bus/acpi/dispatcher/dswload.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dswload.c rename to drivers/bus/acpi/dispatcher/dswload.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dswscope.c b/drivers/bus/acpi/dispatcher/dswscope.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dswscope.c rename to drivers/bus/acpi/dispatcher/dswscope.c diff --git a/reactos/drivers/bus/acpi/dispatcher/dswstate.c b/drivers/bus/acpi/dispatcher/dswstate.c similarity index 100% rename from reactos/drivers/bus/acpi/dispatcher/dswstate.c rename to drivers/bus/acpi/dispatcher/dswstate.c diff --git a/reactos/drivers/bus/acpi/events/evevent.c b/drivers/bus/acpi/events/evevent.c similarity index 100% rename from reactos/drivers/bus/acpi/events/evevent.c rename to drivers/bus/acpi/events/evevent.c diff --git a/reactos/drivers/bus/acpi/events/evmisc.c b/drivers/bus/acpi/events/evmisc.c similarity index 100% rename from reactos/drivers/bus/acpi/events/evmisc.c rename to drivers/bus/acpi/events/evmisc.c diff --git a/reactos/drivers/bus/acpi/events/evregion.c b/drivers/bus/acpi/events/evregion.c similarity index 100% rename from reactos/drivers/bus/acpi/events/evregion.c rename to drivers/bus/acpi/events/evregion.c diff --git a/reactos/drivers/bus/acpi/events/evrgnini.c b/drivers/bus/acpi/events/evrgnini.c similarity index 100% rename from reactos/drivers/bus/acpi/events/evrgnini.c rename to drivers/bus/acpi/events/evrgnini.c diff --git a/reactos/drivers/bus/acpi/events/evsci.c b/drivers/bus/acpi/events/evsci.c similarity index 100% rename from reactos/drivers/bus/acpi/events/evsci.c rename to drivers/bus/acpi/events/evsci.c diff --git a/reactos/drivers/bus/acpi/events/evxface.c b/drivers/bus/acpi/events/evxface.c similarity index 100% rename from reactos/drivers/bus/acpi/events/evxface.c rename to drivers/bus/acpi/events/evxface.c diff --git a/reactos/drivers/bus/acpi/events/evxfevnt.c b/drivers/bus/acpi/events/evxfevnt.c similarity index 100% rename from reactos/drivers/bus/acpi/events/evxfevnt.c rename to drivers/bus/acpi/events/evxfevnt.c diff --git a/reactos/drivers/bus/acpi/events/evxfregn.c b/drivers/bus/acpi/events/evxfregn.c similarity index 100% rename from reactos/drivers/bus/acpi/events/evxfregn.c rename to drivers/bus/acpi/events/evxfregn.c diff --git a/reactos/drivers/bus/acpi/executer/amconfig.c b/drivers/bus/acpi/executer/amconfig.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amconfig.c rename to drivers/bus/acpi/executer/amconfig.c diff --git a/reactos/drivers/bus/acpi/executer/amconvrt.c b/drivers/bus/acpi/executer/amconvrt.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amconvrt.c rename to drivers/bus/acpi/executer/amconvrt.c diff --git a/reactos/drivers/bus/acpi/executer/amcreate.c b/drivers/bus/acpi/executer/amcreate.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amcreate.c rename to drivers/bus/acpi/executer/amcreate.c diff --git a/reactos/drivers/bus/acpi/executer/amdump.c b/drivers/bus/acpi/executer/amdump.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amdump.c rename to drivers/bus/acpi/executer/amdump.c diff --git a/reactos/drivers/bus/acpi/executer/amdyadic.c b/drivers/bus/acpi/executer/amdyadic.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amdyadic.c rename to drivers/bus/acpi/executer/amdyadic.c diff --git a/reactos/drivers/bus/acpi/executer/amfield.c b/drivers/bus/acpi/executer/amfield.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amfield.c rename to drivers/bus/acpi/executer/amfield.c diff --git a/reactos/drivers/bus/acpi/executer/amfldio.c b/drivers/bus/acpi/executer/amfldio.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amfldio.c rename to drivers/bus/acpi/executer/amfldio.c diff --git a/reactos/drivers/bus/acpi/executer/ammisc.c b/drivers/bus/acpi/executer/ammisc.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/ammisc.c rename to drivers/bus/acpi/executer/ammisc.c diff --git a/reactos/drivers/bus/acpi/executer/ammonad.c b/drivers/bus/acpi/executer/ammonad.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/ammonad.c rename to drivers/bus/acpi/executer/ammonad.c diff --git a/reactos/drivers/bus/acpi/executer/ammutex.c b/drivers/bus/acpi/executer/ammutex.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/ammutex.c rename to drivers/bus/acpi/executer/ammutex.c diff --git a/reactos/drivers/bus/acpi/executer/amnames.c b/drivers/bus/acpi/executer/amnames.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amnames.c rename to drivers/bus/acpi/executer/amnames.c diff --git a/reactos/drivers/bus/acpi/executer/amprep.c b/drivers/bus/acpi/executer/amprep.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amprep.c rename to drivers/bus/acpi/executer/amprep.c diff --git a/reactos/drivers/bus/acpi/executer/amregion.c b/drivers/bus/acpi/executer/amregion.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amregion.c rename to drivers/bus/acpi/executer/amregion.c diff --git a/reactos/drivers/bus/acpi/executer/amresnte.c b/drivers/bus/acpi/executer/amresnte.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amresnte.c rename to drivers/bus/acpi/executer/amresnte.c diff --git a/reactos/drivers/bus/acpi/executer/amresolv.c b/drivers/bus/acpi/executer/amresolv.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amresolv.c rename to drivers/bus/acpi/executer/amresolv.c diff --git a/reactos/drivers/bus/acpi/executer/amresop.c b/drivers/bus/acpi/executer/amresop.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amresop.c rename to drivers/bus/acpi/executer/amresop.c diff --git a/reactos/drivers/bus/acpi/executer/amstore.c b/drivers/bus/acpi/executer/amstore.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amstore.c rename to drivers/bus/acpi/executer/amstore.c diff --git a/reactos/drivers/bus/acpi/executer/amstoren.c b/drivers/bus/acpi/executer/amstoren.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amstoren.c rename to drivers/bus/acpi/executer/amstoren.c diff --git a/reactos/drivers/bus/acpi/executer/amstorob.c b/drivers/bus/acpi/executer/amstorob.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amstorob.c rename to drivers/bus/acpi/executer/amstorob.c diff --git a/reactos/drivers/bus/acpi/executer/amsystem.c b/drivers/bus/acpi/executer/amsystem.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amsystem.c rename to drivers/bus/acpi/executer/amsystem.c diff --git a/reactos/drivers/bus/acpi/executer/amutils.c b/drivers/bus/acpi/executer/amutils.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amutils.c rename to drivers/bus/acpi/executer/amutils.c diff --git a/reactos/drivers/bus/acpi/executer/amxface.c b/drivers/bus/acpi/executer/amxface.c similarity index 100% rename from reactos/drivers/bus/acpi/executer/amxface.c rename to drivers/bus/acpi/executer/amxface.c diff --git a/reactos/drivers/bus/acpi/hardware/hwacpi.c b/drivers/bus/acpi/hardware/hwacpi.c similarity index 100% rename from reactos/drivers/bus/acpi/hardware/hwacpi.c rename to drivers/bus/acpi/hardware/hwacpi.c diff --git a/reactos/drivers/bus/acpi/hardware/hwgpe.c b/drivers/bus/acpi/hardware/hwgpe.c similarity index 100% rename from reactos/drivers/bus/acpi/hardware/hwgpe.c rename to drivers/bus/acpi/hardware/hwgpe.c diff --git a/reactos/drivers/bus/acpi/hardware/hwregs.c b/drivers/bus/acpi/hardware/hwregs.c similarity index 100% rename from reactos/drivers/bus/acpi/hardware/hwregs.c rename to drivers/bus/acpi/hardware/hwregs.c diff --git a/reactos/drivers/bus/acpi/hardware/hwsleep.c b/drivers/bus/acpi/hardware/hwsleep.c similarity index 100% rename from reactos/drivers/bus/acpi/hardware/hwsleep.c rename to drivers/bus/acpi/hardware/hwsleep.c diff --git a/reactos/drivers/bus/acpi/hardware/hwtimer.c b/drivers/bus/acpi/hardware/hwtimer.c similarity index 100% rename from reactos/drivers/bus/acpi/hardware/hwtimer.c rename to drivers/bus/acpi/hardware/hwtimer.c diff --git a/reactos/drivers/bus/acpi/include/accommon.h b/drivers/bus/acpi/include/accommon.h similarity index 100% rename from reactos/drivers/bus/acpi/include/accommon.h rename to drivers/bus/acpi/include/accommon.h diff --git a/reactos/drivers/bus/acpi/include/acconfig.h b/drivers/bus/acpi/include/acconfig.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acconfig.h rename to drivers/bus/acpi/include/acconfig.h diff --git a/reactos/drivers/bus/acpi/include/acdebug.h b/drivers/bus/acpi/include/acdebug.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acdebug.h rename to drivers/bus/acpi/include/acdebug.h diff --git a/reactos/drivers/bus/acpi/include/acdispat.h b/drivers/bus/acpi/include/acdispat.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acdispat.h rename to drivers/bus/acpi/include/acdispat.h diff --git a/reactos/drivers/bus/acpi/include/acevents.h b/drivers/bus/acpi/include/acevents.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acevents.h rename to drivers/bus/acpi/include/acevents.h diff --git a/reactos/drivers/bus/acpi/include/acexcep.h b/drivers/bus/acpi/include/acexcep.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acexcep.h rename to drivers/bus/acpi/include/acexcep.h diff --git a/reactos/drivers/bus/acpi/include/acglobal.h b/drivers/bus/acpi/include/acglobal.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acglobal.h rename to drivers/bus/acpi/include/acglobal.h diff --git a/reactos/drivers/bus/acpi/include/achware.h b/drivers/bus/acpi/include/achware.h similarity index 100% rename from reactos/drivers/bus/acpi/include/achware.h rename to drivers/bus/acpi/include/achware.h diff --git a/reactos/drivers/bus/acpi/include/acinterp.h b/drivers/bus/acpi/include/acinterp.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acinterp.h rename to drivers/bus/acpi/include/acinterp.h diff --git a/reactos/drivers/bus/acpi/include/aclocal.h b/drivers/bus/acpi/include/aclocal.h similarity index 100% rename from reactos/drivers/bus/acpi/include/aclocal.h rename to drivers/bus/acpi/include/aclocal.h diff --git a/reactos/drivers/bus/acpi/include/acmacros.h b/drivers/bus/acpi/include/acmacros.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acmacros.h rename to drivers/bus/acpi/include/acmacros.h diff --git a/reactos/drivers/bus/acpi/include/acnamesp.h b/drivers/bus/acpi/include/acnamesp.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acnamesp.h rename to drivers/bus/acpi/include/acnamesp.h diff --git a/reactos/drivers/bus/acpi/include/acobject.h b/drivers/bus/acpi/include/acobject.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acobject.h rename to drivers/bus/acpi/include/acobject.h diff --git a/reactos/drivers/bus/acpi/include/acoutput.h b/drivers/bus/acpi/include/acoutput.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acoutput.h rename to drivers/bus/acpi/include/acoutput.h diff --git a/reactos/drivers/bus/acpi/include/acparser.h b/drivers/bus/acpi/include/acparser.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acparser.h rename to drivers/bus/acpi/include/acparser.h diff --git a/reactos/drivers/bus/acpi/include/acpi.h b/drivers/bus/acpi/include/acpi.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acpi.h rename to drivers/bus/acpi/include/acpi.h diff --git a/reactos/drivers/bus/acpi/include/acpiosxf.h b/drivers/bus/acpi/include/acpiosxf.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acpiosxf.h rename to drivers/bus/acpi/include/acpiosxf.h diff --git a/reactos/drivers/bus/acpi/include/acpixf.h b/drivers/bus/acpi/include/acpixf.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acpixf.h rename to drivers/bus/acpi/include/acpixf.h diff --git a/reactos/drivers/bus/acpi/include/acresrc.h b/drivers/bus/acpi/include/acresrc.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acresrc.h rename to drivers/bus/acpi/include/acresrc.h diff --git a/reactos/drivers/bus/acpi/include/acstruct.h b/drivers/bus/acpi/include/acstruct.h similarity index 100% rename from reactos/drivers/bus/acpi/include/acstruct.h rename to drivers/bus/acpi/include/acstruct.h diff --git a/reactos/drivers/bus/acpi/include/actables.h b/drivers/bus/acpi/include/actables.h similarity index 100% rename from reactos/drivers/bus/acpi/include/actables.h rename to drivers/bus/acpi/include/actables.h diff --git a/reactos/drivers/bus/acpi/include/actbl.h b/drivers/bus/acpi/include/actbl.h similarity index 100% rename from reactos/drivers/bus/acpi/include/actbl.h rename to drivers/bus/acpi/include/actbl.h diff --git a/reactos/drivers/bus/acpi/include/actbl1.h b/drivers/bus/acpi/include/actbl1.h similarity index 100% rename from reactos/drivers/bus/acpi/include/actbl1.h rename to drivers/bus/acpi/include/actbl1.h diff --git a/reactos/drivers/bus/acpi/include/actbl2.h b/drivers/bus/acpi/include/actbl2.h similarity index 100% rename from reactos/drivers/bus/acpi/include/actbl2.h rename to drivers/bus/acpi/include/actbl2.h diff --git a/reactos/drivers/bus/acpi/include/actbl71.h b/drivers/bus/acpi/include/actbl71.h similarity index 100% rename from reactos/drivers/bus/acpi/include/actbl71.h rename to drivers/bus/acpi/include/actbl71.h diff --git a/reactos/drivers/bus/acpi/include/actypes.h b/drivers/bus/acpi/include/actypes.h similarity index 100% rename from reactos/drivers/bus/acpi/include/actypes.h rename to drivers/bus/acpi/include/actypes.h diff --git a/reactos/drivers/bus/acpi/include/amlcode.h b/drivers/bus/acpi/include/amlcode.h similarity index 100% rename from reactos/drivers/bus/acpi/include/amlcode.h rename to drivers/bus/acpi/include/amlcode.h diff --git a/reactos/drivers/bus/acpi/include/platform/acenv.h b/drivers/bus/acpi/include/platform/acenv.h similarity index 100% rename from reactos/drivers/bus/acpi/include/platform/acenv.h rename to drivers/bus/acpi/include/platform/acenv.h diff --git a/reactos/drivers/bus/acpi/include/platform/acgcc.h b/drivers/bus/acpi/include/platform/acgcc.h similarity index 100% rename from reactos/drivers/bus/acpi/include/platform/acgcc.h rename to drivers/bus/acpi/include/platform/acgcc.h diff --git a/reactos/drivers/bus/acpi/include/platform/aclinux.h b/drivers/bus/acpi/include/platform/aclinux.h similarity index 100% rename from reactos/drivers/bus/acpi/include/platform/aclinux.h rename to drivers/bus/acpi/include/platform/aclinux.h diff --git a/reactos/drivers/bus/acpi/include/platform/acwin.h b/drivers/bus/acpi/include/platform/acwin.h similarity index 100% rename from reactos/drivers/bus/acpi/include/platform/acwin.h rename to drivers/bus/acpi/include/platform/acwin.h diff --git a/reactos/drivers/bus/acpi/include/platform/types.h b/drivers/bus/acpi/include/platform/types.h similarity index 100% rename from reactos/drivers/bus/acpi/include/platform/types.h rename to drivers/bus/acpi/include/platform/types.h diff --git a/reactos/drivers/bus/acpi/namespace/nsaccess.c b/drivers/bus/acpi/namespace/nsaccess.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsaccess.c rename to drivers/bus/acpi/namespace/nsaccess.c diff --git a/reactos/drivers/bus/acpi/namespace/nsalloc.c b/drivers/bus/acpi/namespace/nsalloc.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsalloc.c rename to drivers/bus/acpi/namespace/nsalloc.c diff --git a/reactos/drivers/bus/acpi/namespace/nseval.c b/drivers/bus/acpi/namespace/nseval.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nseval.c rename to drivers/bus/acpi/namespace/nseval.c diff --git a/reactos/drivers/bus/acpi/namespace/nsinit.c b/drivers/bus/acpi/namespace/nsinit.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsinit.c rename to drivers/bus/acpi/namespace/nsinit.c diff --git a/reactos/drivers/bus/acpi/namespace/nsload.c b/drivers/bus/acpi/namespace/nsload.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsload.c rename to drivers/bus/acpi/namespace/nsload.c diff --git a/reactos/drivers/bus/acpi/namespace/nsnames.c b/drivers/bus/acpi/namespace/nsnames.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsnames.c rename to drivers/bus/acpi/namespace/nsnames.c diff --git a/reactos/drivers/bus/acpi/namespace/nsobject.c b/drivers/bus/acpi/namespace/nsobject.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsobject.c rename to drivers/bus/acpi/namespace/nsobject.c diff --git a/reactos/drivers/bus/acpi/namespace/nssearch.c b/drivers/bus/acpi/namespace/nssearch.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nssearch.c rename to drivers/bus/acpi/namespace/nssearch.c diff --git a/reactos/drivers/bus/acpi/namespace/nsutils.c b/drivers/bus/acpi/namespace/nsutils.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsutils.c rename to drivers/bus/acpi/namespace/nsutils.c diff --git a/reactos/drivers/bus/acpi/namespace/nswalk.c b/drivers/bus/acpi/namespace/nswalk.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nswalk.c rename to drivers/bus/acpi/namespace/nswalk.c diff --git a/reactos/drivers/bus/acpi/namespace/nsxfname.c b/drivers/bus/acpi/namespace/nsxfname.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsxfname.c rename to drivers/bus/acpi/namespace/nsxfname.c diff --git a/reactos/drivers/bus/acpi/namespace/nsxfobj.c b/drivers/bus/acpi/namespace/nsxfobj.c similarity index 100% rename from reactos/drivers/bus/acpi/namespace/nsxfobj.c rename to drivers/bus/acpi/namespace/nsxfobj.c diff --git a/reactos/drivers/bus/acpi/ospm/acpienum.c b/drivers/bus/acpi/ospm/acpienum.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/acpienum.c rename to drivers/bus/acpi/ospm/acpienum.c diff --git a/reactos/drivers/bus/acpi/ospm/acpisys.c b/drivers/bus/acpi/ospm/acpisys.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/acpisys.c rename to drivers/bus/acpi/ospm/acpisys.c diff --git a/reactos/drivers/bus/acpi/ospm/bn.c b/drivers/bus/acpi/ospm/bn.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/bn.c rename to drivers/bus/acpi/ospm/bn.c diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bm.c b/drivers/bus/acpi/ospm/busmgr/bm.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/busmgr/bm.c rename to drivers/bus/acpi/ospm/busmgr/bm.c diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmnotify.c b/drivers/bus/acpi/ospm/busmgr/bmnotify.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/busmgr/bmnotify.c rename to drivers/bus/acpi/ospm/busmgr/bmnotify.c diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmpm.c b/drivers/bus/acpi/ospm/busmgr/bmpm.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/busmgr/bmpm.c rename to drivers/bus/acpi/ospm/busmgr/bmpm.c diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmpower.c b/drivers/bus/acpi/ospm/busmgr/bmpower.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/busmgr/bmpower.c rename to drivers/bus/acpi/ospm/busmgr/bmpower.c diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmrequest.c b/drivers/bus/acpi/ospm/busmgr/bmrequest.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/busmgr/bmrequest.c rename to drivers/bus/acpi/ospm/busmgr/bmrequest.c diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmsearch.c b/drivers/bus/acpi/ospm/busmgr/bmsearch.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/busmgr/bmsearch.c rename to drivers/bus/acpi/ospm/busmgr/bmsearch.c diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmutils.c b/drivers/bus/acpi/ospm/busmgr/bmutils.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/busmgr/bmutils.c rename to drivers/bus/acpi/ospm/busmgr/bmutils.c diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmxface.c b/drivers/bus/acpi/ospm/busmgr/bmxface.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/busmgr/bmxface.c rename to drivers/bus/acpi/ospm/busmgr/bmxface.c diff --git a/reactos/drivers/bus/acpi/ospm/fdo.c b/drivers/bus/acpi/ospm/fdo.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/fdo.c rename to drivers/bus/acpi/ospm/fdo.c diff --git a/reactos/drivers/bus/acpi/ospm/include/acpisys.h b/drivers/bus/acpi/ospm/include/acpisys.h similarity index 100% rename from reactos/drivers/bus/acpi/ospm/include/acpisys.h rename to drivers/bus/acpi/ospm/include/acpisys.h diff --git a/reactos/drivers/bus/acpi/ospm/include/bm.h b/drivers/bus/acpi/ospm/include/bm.h similarity index 100% rename from reactos/drivers/bus/acpi/ospm/include/bm.h rename to drivers/bus/acpi/ospm/include/bm.h diff --git a/reactos/drivers/bus/acpi/ospm/include/bmpower.h b/drivers/bus/acpi/ospm/include/bmpower.h similarity index 100% rename from reactos/drivers/bus/acpi/ospm/include/bmpower.h rename to drivers/bus/acpi/ospm/include/bmpower.h diff --git a/reactos/drivers/bus/acpi/ospm/include/bn.h b/drivers/bus/acpi/ospm/include/bn.h similarity index 100% rename from reactos/drivers/bus/acpi/ospm/include/bn.h rename to drivers/bus/acpi/ospm/include/bn.h diff --git a/reactos/drivers/bus/acpi/ospm/osl.c b/drivers/bus/acpi/ospm/osl.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/osl.c rename to drivers/bus/acpi/ospm/osl.c diff --git a/reactos/drivers/bus/acpi/ospm/pdo.c b/drivers/bus/acpi/ospm/pdo.c similarity index 100% rename from reactos/drivers/bus/acpi/ospm/pdo.c rename to drivers/bus/acpi/ospm/pdo.c diff --git a/reactos/drivers/bus/acpi/parser/psargs.c b/drivers/bus/acpi/parser/psargs.c similarity index 100% rename from reactos/drivers/bus/acpi/parser/psargs.c rename to drivers/bus/acpi/parser/psargs.c diff --git a/reactos/drivers/bus/acpi/parser/psopcode.c b/drivers/bus/acpi/parser/psopcode.c similarity index 100% rename from reactos/drivers/bus/acpi/parser/psopcode.c rename to drivers/bus/acpi/parser/psopcode.c diff --git a/reactos/drivers/bus/acpi/parser/psparse.c b/drivers/bus/acpi/parser/psparse.c similarity index 100% rename from reactos/drivers/bus/acpi/parser/psparse.c rename to drivers/bus/acpi/parser/psparse.c diff --git a/reactos/drivers/bus/acpi/parser/psscope.c b/drivers/bus/acpi/parser/psscope.c similarity index 100% rename from reactos/drivers/bus/acpi/parser/psscope.c rename to drivers/bus/acpi/parser/psscope.c diff --git a/reactos/drivers/bus/acpi/parser/pstree.c b/drivers/bus/acpi/parser/pstree.c similarity index 100% rename from reactos/drivers/bus/acpi/parser/pstree.c rename to drivers/bus/acpi/parser/pstree.c diff --git a/reactos/drivers/bus/acpi/parser/psutils.c b/drivers/bus/acpi/parser/psutils.c similarity index 100% rename from reactos/drivers/bus/acpi/parser/psutils.c rename to drivers/bus/acpi/parser/psutils.c diff --git a/reactos/drivers/bus/acpi/parser/pswalk.c b/drivers/bus/acpi/parser/pswalk.c similarity index 100% rename from reactos/drivers/bus/acpi/parser/pswalk.c rename to drivers/bus/acpi/parser/pswalk.c diff --git a/reactos/drivers/bus/acpi/parser/psxface.c b/drivers/bus/acpi/parser/psxface.c similarity index 100% rename from reactos/drivers/bus/acpi/parser/psxface.c rename to drivers/bus/acpi/parser/psxface.c diff --git a/reactos/drivers/bus/acpi/resource/rsaddr.c b/drivers/bus/acpi/resource/rsaddr.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rsaddr.c rename to drivers/bus/acpi/resource/rsaddr.c diff --git a/reactos/drivers/bus/acpi/resource/rscalc.c b/drivers/bus/acpi/resource/rscalc.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rscalc.c rename to drivers/bus/acpi/resource/rscalc.c diff --git a/reactos/drivers/bus/acpi/resource/rscreate.c b/drivers/bus/acpi/resource/rscreate.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rscreate.c rename to drivers/bus/acpi/resource/rscreate.c diff --git a/reactos/drivers/bus/acpi/resource/rsdump.c b/drivers/bus/acpi/resource/rsdump.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rsdump.c rename to drivers/bus/acpi/resource/rsdump.c diff --git a/reactos/drivers/bus/acpi/resource/rsio.c b/drivers/bus/acpi/resource/rsio.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rsio.c rename to drivers/bus/acpi/resource/rsio.c diff --git a/reactos/drivers/bus/acpi/resource/rsirq.c b/drivers/bus/acpi/resource/rsirq.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rsirq.c rename to drivers/bus/acpi/resource/rsirq.c diff --git a/reactos/drivers/bus/acpi/resource/rslist.c b/drivers/bus/acpi/resource/rslist.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rslist.c rename to drivers/bus/acpi/resource/rslist.c diff --git a/reactos/drivers/bus/acpi/resource/rsmemory.c b/drivers/bus/acpi/resource/rsmemory.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rsmemory.c rename to drivers/bus/acpi/resource/rsmemory.c diff --git a/reactos/drivers/bus/acpi/resource/rsmisc.c b/drivers/bus/acpi/resource/rsmisc.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rsmisc.c rename to drivers/bus/acpi/resource/rsmisc.c diff --git a/reactos/drivers/bus/acpi/resource/rsutils.c b/drivers/bus/acpi/resource/rsutils.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rsutils.c rename to drivers/bus/acpi/resource/rsutils.c diff --git a/reactos/drivers/bus/acpi/resource/rsxface.c b/drivers/bus/acpi/resource/rsxface.c similarity index 100% rename from reactos/drivers/bus/acpi/resource/rsxface.c rename to drivers/bus/acpi/resource/rsxface.c diff --git a/reactos/drivers/bus/acpi/tables/tbconvrt.c b/drivers/bus/acpi/tables/tbconvrt.c similarity index 100% rename from reactos/drivers/bus/acpi/tables/tbconvrt.c rename to drivers/bus/acpi/tables/tbconvrt.c diff --git a/reactos/drivers/bus/acpi/tables/tbget.c b/drivers/bus/acpi/tables/tbget.c similarity index 100% rename from reactos/drivers/bus/acpi/tables/tbget.c rename to drivers/bus/acpi/tables/tbget.c diff --git a/reactos/drivers/bus/acpi/tables/tbinstal.c b/drivers/bus/acpi/tables/tbinstal.c similarity index 100% rename from reactos/drivers/bus/acpi/tables/tbinstal.c rename to drivers/bus/acpi/tables/tbinstal.c diff --git a/reactos/drivers/bus/acpi/tables/tbutils.c b/drivers/bus/acpi/tables/tbutils.c similarity index 100% rename from reactos/drivers/bus/acpi/tables/tbutils.c rename to drivers/bus/acpi/tables/tbutils.c diff --git a/reactos/drivers/bus/acpi/tables/tbxface.c b/drivers/bus/acpi/tables/tbxface.c similarity index 100% rename from reactos/drivers/bus/acpi/tables/tbxface.c rename to drivers/bus/acpi/tables/tbxface.c diff --git a/reactos/drivers/bus/acpi/tables/tbxfroot.c b/drivers/bus/acpi/tables/tbxfroot.c similarity index 100% rename from reactos/drivers/bus/acpi/tables/tbxfroot.c rename to drivers/bus/acpi/tables/tbxfroot.c diff --git a/reactos/drivers/bus/acpi/utils/cmalloc.c b/drivers/bus/acpi/utils/cmalloc.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmalloc.c rename to drivers/bus/acpi/utils/cmalloc.c diff --git a/reactos/drivers/bus/acpi/utils/cmclib.c b/drivers/bus/acpi/utils/cmclib.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmclib.c rename to drivers/bus/acpi/utils/cmclib.c diff --git a/reactos/drivers/bus/acpi/utils/cmcopy.c b/drivers/bus/acpi/utils/cmcopy.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmcopy.c rename to drivers/bus/acpi/utils/cmcopy.c diff --git a/reactos/drivers/bus/acpi/utils/cmdebug.c b/drivers/bus/acpi/utils/cmdebug.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmdebug.c rename to drivers/bus/acpi/utils/cmdebug.c diff --git a/reactos/drivers/bus/acpi/utils/cmdelete.c b/drivers/bus/acpi/utils/cmdelete.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmdelete.c rename to drivers/bus/acpi/utils/cmdelete.c diff --git a/reactos/drivers/bus/acpi/utils/cmeval.c b/drivers/bus/acpi/utils/cmeval.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmeval.c rename to drivers/bus/acpi/utils/cmeval.c diff --git a/reactos/drivers/bus/acpi/utils/cmglobal.c b/drivers/bus/acpi/utils/cmglobal.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmglobal.c rename to drivers/bus/acpi/utils/cmglobal.c diff --git a/reactos/drivers/bus/acpi/utils/cminit.c b/drivers/bus/acpi/utils/cminit.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cminit.c rename to drivers/bus/acpi/utils/cminit.c diff --git a/reactos/drivers/bus/acpi/utils/cmobject.c b/drivers/bus/acpi/utils/cmobject.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmobject.c rename to drivers/bus/acpi/utils/cmobject.c diff --git a/reactos/drivers/bus/acpi/utils/cmutils.c b/drivers/bus/acpi/utils/cmutils.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmutils.c rename to drivers/bus/acpi/utils/cmutils.c diff --git a/reactos/drivers/bus/acpi/utils/cmxface.c b/drivers/bus/acpi/utils/cmxface.c similarity index 100% rename from reactos/drivers/bus/acpi/utils/cmxface.c rename to drivers/bus/acpi/utils/cmxface.c diff --git a/reactos/drivers/bus/directory.rbuild b/drivers/bus/directory.rbuild similarity index 100% rename from reactos/drivers/bus/directory.rbuild rename to drivers/bus/directory.rbuild diff --git a/reactos/drivers/bus/isapnp/isapnp.c b/drivers/bus/isapnp/isapnp.c similarity index 100% rename from reactos/drivers/bus/isapnp/isapnp.c rename to drivers/bus/isapnp/isapnp.c diff --git a/reactos/drivers/bus/isapnp/isapnp.h b/drivers/bus/isapnp/isapnp.h similarity index 100% rename from reactos/drivers/bus/isapnp/isapnp.h rename to drivers/bus/isapnp/isapnp.h diff --git a/reactos/drivers/bus/isapnp/isapnp.rbuild b/drivers/bus/isapnp/isapnp.rbuild similarity index 100% rename from reactos/drivers/bus/isapnp/isapnp.rbuild rename to drivers/bus/isapnp/isapnp.rbuild diff --git a/reactos/drivers/bus/isapnp/isapnp.rc b/drivers/bus/isapnp/isapnp.rc similarity index 100% rename from reactos/drivers/bus/isapnp/isapnp.rc rename to drivers/bus/isapnp/isapnp.rc diff --git a/reactos/drivers/bus/pci/fdo.c b/drivers/bus/pci/fdo.c similarity index 100% rename from reactos/drivers/bus/pci/fdo.c rename to drivers/bus/pci/fdo.c diff --git a/reactos/drivers/bus/pci/pci.c b/drivers/bus/pci/pci.c similarity index 100% rename from reactos/drivers/bus/pci/pci.c rename to drivers/bus/pci/pci.c diff --git a/reactos/drivers/bus/pci/pci.h b/drivers/bus/pci/pci.h similarity index 100% rename from reactos/drivers/bus/pci/pci.h rename to drivers/bus/pci/pci.h diff --git a/reactos/drivers/bus/pci/pci.rbuild b/drivers/bus/pci/pci.rbuild similarity index 100% rename from reactos/drivers/bus/pci/pci.rbuild rename to drivers/bus/pci/pci.rbuild diff --git a/reactos/drivers/bus/pci/pci.rc b/drivers/bus/pci/pci.rc similarity index 100% rename from reactos/drivers/bus/pci/pci.rc rename to drivers/bus/pci/pci.rc diff --git a/reactos/drivers/bus/pci/pcidef.h b/drivers/bus/pci/pcidef.h similarity index 100% rename from reactos/drivers/bus/pci/pcidef.h rename to drivers/bus/pci/pcidef.h diff --git a/reactos/drivers/bus/pci/pdo.c b/drivers/bus/pci/pdo.c similarity index 100% rename from reactos/drivers/bus/pci/pdo.c rename to drivers/bus/pci/pdo.c diff --git a/reactos/drivers/directx/directory.rbuild b/drivers/directx/directory.rbuild similarity index 100% rename from reactos/drivers/directx/directory.rbuild rename to drivers/directx/directory.rbuild diff --git a/reactos/drivers/directx/dxapi/dxapi.rbuild b/drivers/directx/dxapi/dxapi.rbuild similarity index 100% rename from reactos/drivers/directx/dxapi/dxapi.rbuild rename to drivers/directx/dxapi/dxapi.rbuild diff --git a/reactos/drivers/directx/dxapi/dxapi.rc b/drivers/directx/dxapi/dxapi.rc similarity index 100% rename from reactos/drivers/directx/dxapi/dxapi.rc rename to drivers/directx/dxapi/dxapi.rc diff --git a/reactos/drivers/directx/dxapi/dxapi.spec b/drivers/directx/dxapi/dxapi.spec similarity index 100% rename from reactos/drivers/directx/dxapi/dxapi.spec rename to drivers/directx/dxapi/dxapi.spec diff --git a/reactos/drivers/directx/dxapi/dxapi_driver.h b/drivers/directx/dxapi/dxapi_driver.h similarity index 100% rename from reactos/drivers/directx/dxapi/dxapi_driver.h rename to drivers/directx/dxapi/dxapi_driver.h diff --git a/reactos/drivers/directx/dxapi/main.c b/drivers/directx/dxapi/main.c similarity index 100% rename from reactos/drivers/directx/dxapi/main.c rename to drivers/directx/dxapi/main.c diff --git a/reactos/drivers/directx/dxg/ddhmg.c b/drivers/directx/dxg/ddhmg.c similarity index 100% rename from reactos/drivers/directx/dxg/ddhmg.c rename to drivers/directx/dxg/ddhmg.c diff --git a/reactos/drivers/directx/dxg/dxg.rbuild b/drivers/directx/dxg/dxg.rbuild similarity index 100% rename from reactos/drivers/directx/dxg/dxg.rbuild rename to drivers/directx/dxg/dxg.rbuild diff --git a/reactos/drivers/directx/dxg/dxg.rc b/drivers/directx/dxg/dxg.rc similarity index 100% rename from reactos/drivers/directx/dxg/dxg.rc rename to drivers/directx/dxg/dxg.rc diff --git a/reactos/drivers/directx/dxg/dxg.spec b/drivers/directx/dxg/dxg.spec similarity index 100% rename from reactos/drivers/directx/dxg/dxg.spec rename to drivers/directx/dxg/dxg.spec diff --git a/reactos/drivers/directx/dxg/dxg_driver.h b/drivers/directx/dxg/dxg_driver.h similarity index 100% rename from reactos/drivers/directx/dxg/dxg_driver.h rename to drivers/directx/dxg/dxg_driver.h diff --git a/reactos/drivers/directx/dxg/dxg_int.h b/drivers/directx/dxg/dxg_int.h similarity index 100% rename from reactos/drivers/directx/dxg/dxg_int.h rename to drivers/directx/dxg/dxg_int.h diff --git a/reactos/drivers/directx/dxg/eng.c b/drivers/directx/dxg/eng.c similarity index 100% rename from reactos/drivers/directx/dxg/eng.c rename to drivers/directx/dxg/eng.c diff --git a/reactos/drivers/directx/dxg/historic.c b/drivers/directx/dxg/historic.c similarity index 100% rename from reactos/drivers/directx/dxg/historic.c rename to drivers/directx/dxg/historic.c diff --git a/reactos/drivers/directx/dxg/main.c b/drivers/directx/dxg/main.c similarity index 100% rename from reactos/drivers/directx/dxg/main.c rename to drivers/directx/dxg/main.c diff --git a/reactos/drivers/directx/dxg/tags.h b/drivers/directx/dxg/tags.h similarity index 100% rename from reactos/drivers/directx/dxg/tags.h rename to drivers/directx/dxg/tags.h diff --git a/reactos/drivers/directx/dxgthk/dxgthk.rbuild b/drivers/directx/dxgthk/dxgthk.rbuild similarity index 100% rename from reactos/drivers/directx/dxgthk/dxgthk.rbuild rename to drivers/directx/dxgthk/dxgthk.rbuild diff --git a/reactos/drivers/directx/dxgthk/dxgthk.rc b/drivers/directx/dxgthk/dxgthk.rc similarity index 100% rename from reactos/drivers/directx/dxgthk/dxgthk.rc rename to drivers/directx/dxgthk/dxgthk.rc diff --git a/reactos/drivers/directx/dxgthk/dxgthk.spec b/drivers/directx/dxgthk/dxgthk.spec similarity index 100% rename from reactos/drivers/directx/dxgthk/dxgthk.spec rename to drivers/directx/dxgthk/dxgthk.spec diff --git a/reactos/drivers/directx/dxgthk/main.c b/drivers/directx/dxgthk/main.c similarity index 100% rename from reactos/drivers/directx/dxgthk/main.c rename to drivers/directx/dxgthk/main.c diff --git a/reactos/drivers/drivers.rbuild b/drivers/drivers.rbuild similarity index 100% rename from reactos/drivers/drivers.rbuild rename to drivers/drivers.rbuild diff --git a/reactos/drivers/filesystems/cdfs/cdfs.c b/drivers/filesystems/cdfs/cdfs.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/cdfs.c rename to drivers/filesystems/cdfs/cdfs.c diff --git a/reactos/drivers/filesystems/cdfs/cdfs.h b/drivers/filesystems/cdfs/cdfs.h similarity index 100% rename from reactos/drivers/filesystems/cdfs/cdfs.h rename to drivers/filesystems/cdfs/cdfs.h diff --git a/reactos/drivers/filesystems/cdfs/cdfs.rbuild b/drivers/filesystems/cdfs/cdfs.rbuild similarity index 100% rename from reactos/drivers/filesystems/cdfs/cdfs.rbuild rename to drivers/filesystems/cdfs/cdfs.rbuild diff --git a/reactos/drivers/filesystems/cdfs/cdfs.rc b/drivers/filesystems/cdfs/cdfs.rc similarity index 100% rename from reactos/drivers/filesystems/cdfs/cdfs.rc rename to drivers/filesystems/cdfs/cdfs.rc diff --git a/reactos/drivers/filesystems/cdfs/cleanup.c b/drivers/filesystems/cdfs/cleanup.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/cleanup.c rename to drivers/filesystems/cdfs/cleanup.c diff --git a/reactos/drivers/filesystems/cdfs/close.c b/drivers/filesystems/cdfs/close.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/close.c rename to drivers/filesystems/cdfs/close.c diff --git a/reactos/drivers/filesystems/cdfs/common.c b/drivers/filesystems/cdfs/common.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/common.c rename to drivers/filesystems/cdfs/common.c diff --git a/reactos/drivers/filesystems/cdfs/create.c b/drivers/filesystems/cdfs/create.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/create.c rename to drivers/filesystems/cdfs/create.c diff --git a/reactos/drivers/filesystems/cdfs/dirctl.c b/drivers/filesystems/cdfs/dirctl.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/dirctl.c rename to drivers/filesystems/cdfs/dirctl.c diff --git a/reactos/drivers/filesystems/cdfs/fcb.c b/drivers/filesystems/cdfs/fcb.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/fcb.c rename to drivers/filesystems/cdfs/fcb.c diff --git a/reactos/drivers/filesystems/cdfs/finfo.c b/drivers/filesystems/cdfs/finfo.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/finfo.c rename to drivers/filesystems/cdfs/finfo.c diff --git a/reactos/drivers/filesystems/cdfs/fsctl.c b/drivers/filesystems/cdfs/fsctl.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/fsctl.c rename to drivers/filesystems/cdfs/fsctl.c diff --git a/reactos/drivers/filesystems/cdfs/misc.c b/drivers/filesystems/cdfs/misc.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/misc.c rename to drivers/filesystems/cdfs/misc.c diff --git a/reactos/drivers/filesystems/cdfs/rw.c b/drivers/filesystems/cdfs/rw.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/rw.c rename to drivers/filesystems/cdfs/rw.c diff --git a/reactos/drivers/filesystems/cdfs/volinfo.c b/drivers/filesystems/cdfs/volinfo.c similarity index 100% rename from reactos/drivers/filesystems/cdfs/volinfo.c rename to drivers/filesystems/cdfs/volinfo.c diff --git a/reactos/drivers/filesystems/directory.rbuild b/drivers/filesystems/directory.rbuild similarity index 100% rename from reactos/drivers/filesystems/directory.rbuild rename to drivers/filesystems/directory.rbuild diff --git a/reactos/drivers/filesystems/ext2/ext2.rbuild b/drivers/filesystems/ext2/ext2.rbuild similarity index 100% rename from reactos/drivers/filesystems/ext2/ext2.rbuild rename to drivers/filesystems/ext2/ext2.rbuild diff --git a/reactos/drivers/filesystems/ext2/ext2fs.rc b/drivers/filesystems/ext2/ext2fs.rc similarity index 100% rename from reactos/drivers/filesystems/ext2/ext2fs.rc rename to drivers/filesystems/ext2/ext2fs.rc diff --git a/reactos/drivers/filesystems/ext2/inc/errmsg.h b/drivers/filesystems/ext2/inc/errmsg.h similarity index 100% rename from reactos/drivers/filesystems/ext2/inc/errmsg.h rename to drivers/filesystems/ext2/inc/errmsg.h diff --git a/reactos/drivers/filesystems/ext2/inc/ext2_fs.h b/drivers/filesystems/ext2/inc/ext2_fs.h similarity index 100% rename from reactos/drivers/filesystems/ext2/inc/ext2_fs.h rename to drivers/filesystems/ext2/inc/ext2_fs.h diff --git a/reactos/drivers/filesystems/ext2/inc/ext2fsd.h b/drivers/filesystems/ext2/inc/ext2fsd.h similarity index 100% rename from reactos/drivers/filesystems/ext2/inc/ext2fsd.h rename to drivers/filesystems/ext2/inc/ext2fsd.h diff --git a/reactos/drivers/filesystems/ext2/inc/ext2metadata.h b/drivers/filesystems/ext2/inc/ext2metadata.h similarity index 100% rename from reactos/drivers/filesystems/ext2/inc/ext2metadata.h rename to drivers/filesystems/ext2/inc/ext2metadata.h diff --git a/reactos/drivers/filesystems/ext2/inc/protos.h b/drivers/filesystems/ext2/inc/protos.h similarity index 100% rename from reactos/drivers/filesystems/ext2/inc/protos.h rename to drivers/filesystems/ext2/inc/protos.h diff --git a/reactos/drivers/filesystems/ext2/inc/resource.h b/drivers/filesystems/ext2/inc/resource.h similarity index 100% rename from reactos/drivers/filesystems/ext2/inc/resource.h rename to drivers/filesystems/ext2/inc/resource.h diff --git a/reactos/drivers/filesystems/ext2/inc/struct.h b/drivers/filesystems/ext2/inc/struct.h similarity index 100% rename from reactos/drivers/filesystems/ext2/inc/struct.h rename to drivers/filesystems/ext2/inc/struct.h diff --git a/reactos/drivers/filesystems/ext2/src/DiskIO.c b/drivers/filesystems/ext2/src/DiskIO.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/DiskIO.c rename to drivers/filesystems/ext2/src/DiskIO.c diff --git a/reactos/drivers/filesystems/ext2/src/cleanup.c b/drivers/filesystems/ext2/src/cleanup.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/cleanup.c rename to drivers/filesystems/ext2/src/cleanup.c diff --git a/reactos/drivers/filesystems/ext2/src/close.c b/drivers/filesystems/ext2/src/close.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/close.c rename to drivers/filesystems/ext2/src/close.c diff --git a/reactos/drivers/filesystems/ext2/src/create.c b/drivers/filesystems/ext2/src/create.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/create.c rename to drivers/filesystems/ext2/src/create.c diff --git a/reactos/drivers/filesystems/ext2/src/devcntrl.c b/drivers/filesystems/ext2/src/devcntrl.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/devcntrl.c rename to drivers/filesystems/ext2/src/devcntrl.c diff --git a/reactos/drivers/filesystems/ext2/src/dircntrl.c b/drivers/filesystems/ext2/src/dircntrl.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/dircntrl.c rename to drivers/filesystems/ext2/src/dircntrl.c diff --git a/reactos/drivers/filesystems/ext2/src/ext2.rc b/drivers/filesystems/ext2/src/ext2.rc similarity index 100% rename from reactos/drivers/filesystems/ext2/src/ext2.rc rename to drivers/filesystems/ext2/src/ext2.rc diff --git a/reactos/drivers/filesystems/ext2/src/ext2init.c b/drivers/filesystems/ext2/src/ext2init.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/ext2init.c rename to drivers/filesystems/ext2/src/ext2init.c diff --git a/reactos/drivers/filesystems/ext2/src/fastio.c b/drivers/filesystems/ext2/src/fastio.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/fastio.c rename to drivers/filesystems/ext2/src/fastio.c diff --git a/reactos/drivers/filesystems/ext2/src/fileinfo.c b/drivers/filesystems/ext2/src/fileinfo.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/fileinfo.c rename to drivers/filesystems/ext2/src/fileinfo.c diff --git a/reactos/drivers/filesystems/ext2/src/flush.c b/drivers/filesystems/ext2/src/flush.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/flush.c rename to drivers/filesystems/ext2/src/flush.c diff --git a/reactos/drivers/filesystems/ext2/src/fsctrl.c b/drivers/filesystems/ext2/src/fsctrl.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/fsctrl.c rename to drivers/filesystems/ext2/src/fsctrl.c diff --git a/reactos/drivers/filesystems/ext2/src/io.c b/drivers/filesystems/ext2/src/io.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/io.c rename to drivers/filesystems/ext2/src/io.c diff --git a/reactos/drivers/filesystems/ext2/src/metadata.c b/drivers/filesystems/ext2/src/metadata.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/metadata.c rename to drivers/filesystems/ext2/src/metadata.c diff --git a/reactos/drivers/filesystems/ext2/src/misc.c b/drivers/filesystems/ext2/src/misc.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/misc.c rename to drivers/filesystems/ext2/src/misc.c diff --git a/reactos/drivers/filesystems/ext2/src/read.c b/drivers/filesystems/ext2/src/read.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/read.c rename to drivers/filesystems/ext2/src/read.c diff --git a/reactos/drivers/filesystems/ext2/src/shutdown.c b/drivers/filesystems/ext2/src/shutdown.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/shutdown.c rename to drivers/filesystems/ext2/src/shutdown.c diff --git a/reactos/drivers/filesystems/ext2/src/volinfo.c b/drivers/filesystems/ext2/src/volinfo.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/volinfo.c rename to drivers/filesystems/ext2/src/volinfo.c diff --git a/reactos/drivers/filesystems/ext2/src/write.c b/drivers/filesystems/ext2/src/write.c similarity index 100% rename from reactos/drivers/filesystems/ext2/src/write.c rename to drivers/filesystems/ext2/src/write.c diff --git a/reactos/drivers/filesystems/fastfat/blockdev.c b/drivers/filesystems/fastfat/blockdev.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/blockdev.c rename to drivers/filesystems/fastfat/blockdev.c diff --git a/reactos/drivers/filesystems/fastfat/cleanup.c b/drivers/filesystems/fastfat/cleanup.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/cleanup.c rename to drivers/filesystems/fastfat/cleanup.c diff --git a/reactos/drivers/filesystems/fastfat/close.c b/drivers/filesystems/fastfat/close.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/close.c rename to drivers/filesystems/fastfat/close.c diff --git a/reactos/drivers/filesystems/fastfat/create.c b/drivers/filesystems/fastfat/create.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/create.c rename to drivers/filesystems/fastfat/create.c diff --git a/reactos/drivers/filesystems/fastfat/dir.c b/drivers/filesystems/fastfat/dir.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/dir.c rename to drivers/filesystems/fastfat/dir.c diff --git a/reactos/drivers/filesystems/fastfat/direntry.c b/drivers/filesystems/fastfat/direntry.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/direntry.c rename to drivers/filesystems/fastfat/direntry.c diff --git a/reactos/drivers/filesystems/fastfat/dirwr.c b/drivers/filesystems/fastfat/dirwr.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/dirwr.c rename to drivers/filesystems/fastfat/dirwr.c diff --git a/reactos/drivers/filesystems/fastfat/ea.c b/drivers/filesystems/fastfat/ea.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/ea.c rename to drivers/filesystems/fastfat/ea.c diff --git a/reactos/drivers/filesystems/fastfat/fastio.c b/drivers/filesystems/fastfat/fastio.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/fastio.c rename to drivers/filesystems/fastfat/fastio.c diff --git a/reactos/drivers/filesystems/fastfat/fat.c b/drivers/filesystems/fastfat/fat.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/fat.c rename to drivers/filesystems/fastfat/fat.c diff --git a/reactos/drivers/filesystems/fastfat/fcb.c b/drivers/filesystems/fastfat/fcb.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/fcb.c rename to drivers/filesystems/fastfat/fcb.c diff --git a/reactos/drivers/filesystems/fastfat/finfo.c b/drivers/filesystems/fastfat/finfo.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/finfo.c rename to drivers/filesystems/fastfat/finfo.c diff --git a/reactos/drivers/filesystems/fastfat/flush.c b/drivers/filesystems/fastfat/flush.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/flush.c rename to drivers/filesystems/fastfat/flush.c diff --git a/reactos/drivers/filesystems/fastfat/fsctl.c b/drivers/filesystems/fastfat/fsctl.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/fsctl.c rename to drivers/filesystems/fastfat/fsctl.c diff --git a/reactos/drivers/filesystems/fastfat/iface.c b/drivers/filesystems/fastfat/iface.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/iface.c rename to drivers/filesystems/fastfat/iface.c diff --git a/reactos/drivers/filesystems/fastfat/misc.c b/drivers/filesystems/fastfat/misc.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/misc.c rename to drivers/filesystems/fastfat/misc.c diff --git a/reactos/drivers/filesystems/fastfat/rw.c b/drivers/filesystems/fastfat/rw.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/rw.c rename to drivers/filesystems/fastfat/rw.c diff --git a/reactos/drivers/filesystems/fastfat/shutdown.c b/drivers/filesystems/fastfat/shutdown.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/shutdown.c rename to drivers/filesystems/fastfat/shutdown.c diff --git a/reactos/drivers/filesystems/fastfat/string.c b/drivers/filesystems/fastfat/string.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/string.c rename to drivers/filesystems/fastfat/string.c diff --git a/reactos/drivers/filesystems/fastfat/vfat.h b/drivers/filesystems/fastfat/vfat.h similarity index 100% rename from reactos/drivers/filesystems/fastfat/vfat.h rename to drivers/filesystems/fastfat/vfat.h diff --git a/reactos/drivers/filesystems/fastfat/vfat005.1st b/drivers/filesystems/fastfat/vfat005.1st similarity index 100% rename from reactos/drivers/filesystems/fastfat/vfat005.1st rename to drivers/filesystems/fastfat/vfat005.1st diff --git a/reactos/drivers/filesystems/fastfat/vfat_fr.txt b/drivers/filesystems/fastfat/vfat_fr.txt similarity index 100% rename from reactos/drivers/filesystems/fastfat/vfat_fr.txt rename to drivers/filesystems/fastfat/vfat_fr.txt diff --git a/reactos/drivers/filesystems/fastfat/vfatfs.rbuild b/drivers/filesystems/fastfat/vfatfs.rbuild similarity index 100% rename from reactos/drivers/filesystems/fastfat/vfatfs.rbuild rename to drivers/filesystems/fastfat/vfatfs.rbuild diff --git a/reactos/drivers/filesystems/fastfat/vfatfs.rc b/drivers/filesystems/fastfat/vfatfs.rc similarity index 100% rename from reactos/drivers/filesystems/fastfat/vfatfs.rc rename to drivers/filesystems/fastfat/vfatfs.rc diff --git a/reactos/drivers/filesystems/fastfat/volume.c b/drivers/filesystems/fastfat/volume.c similarity index 100% rename from reactos/drivers/filesystems/fastfat/volume.c rename to drivers/filesystems/fastfat/volume.c diff --git a/reactos/drivers/filesystems/fs_rec/blockdev.c b/drivers/filesystems/fs_rec/blockdev.c similarity index 100% rename from reactos/drivers/filesystems/fs_rec/blockdev.c rename to drivers/filesystems/fs_rec/blockdev.c diff --git a/reactos/drivers/filesystems/fs_rec/cdfs.c b/drivers/filesystems/fs_rec/cdfs.c similarity index 100% rename from reactos/drivers/filesystems/fs_rec/cdfs.c rename to drivers/filesystems/fs_rec/cdfs.c diff --git a/reactos/drivers/filesystems/fs_rec/ext2.c b/drivers/filesystems/fs_rec/ext2.c similarity index 100% rename from reactos/drivers/filesystems/fs_rec/ext2.c rename to drivers/filesystems/fs_rec/ext2.c diff --git a/reactos/drivers/filesystems/fs_rec/fat.c b/drivers/filesystems/fs_rec/fat.c similarity index 100% rename from reactos/drivers/filesystems/fs_rec/fat.c rename to drivers/filesystems/fs_rec/fat.c diff --git a/reactos/drivers/filesystems/fs_rec/fs_rec.c b/drivers/filesystems/fs_rec/fs_rec.c similarity index 100% rename from reactos/drivers/filesystems/fs_rec/fs_rec.c rename to drivers/filesystems/fs_rec/fs_rec.c diff --git a/reactos/drivers/filesystems/fs_rec/fs_rec.h b/drivers/filesystems/fs_rec/fs_rec.h similarity index 100% rename from reactos/drivers/filesystems/fs_rec/fs_rec.h rename to drivers/filesystems/fs_rec/fs_rec.h diff --git a/reactos/drivers/filesystems/fs_rec/fs_rec.rbuild b/drivers/filesystems/fs_rec/fs_rec.rbuild similarity index 100% rename from reactos/drivers/filesystems/fs_rec/fs_rec.rbuild rename to drivers/filesystems/fs_rec/fs_rec.rbuild diff --git a/reactos/drivers/filesystems/fs_rec/fs_rec.rc b/drivers/filesystems/fs_rec/fs_rec.rc similarity index 100% rename from reactos/drivers/filesystems/fs_rec/fs_rec.rc rename to drivers/filesystems/fs_rec/fs_rec.rc diff --git a/reactos/drivers/filesystems/fs_rec/ntfs.c b/drivers/filesystems/fs_rec/ntfs.c similarity index 100% rename from reactos/drivers/filesystems/fs_rec/ntfs.c rename to drivers/filesystems/fs_rec/ntfs.c diff --git a/reactos/drivers/filesystems/fs_rec/udfs.c b/drivers/filesystems/fs_rec/udfs.c similarity index 100% rename from reactos/drivers/filesystems/fs_rec/udfs.c rename to drivers/filesystems/fs_rec/udfs.c diff --git a/reactos/drivers/filesystems/msfs/create.c b/drivers/filesystems/msfs/create.c similarity index 100% rename from reactos/drivers/filesystems/msfs/create.c rename to drivers/filesystems/msfs/create.c diff --git a/reactos/drivers/filesystems/msfs/finfo.c b/drivers/filesystems/msfs/finfo.c similarity index 100% rename from reactos/drivers/filesystems/msfs/finfo.c rename to drivers/filesystems/msfs/finfo.c diff --git a/reactos/drivers/filesystems/msfs/fsctrl.c b/drivers/filesystems/msfs/fsctrl.c similarity index 100% rename from reactos/drivers/filesystems/msfs/fsctrl.c rename to drivers/filesystems/msfs/fsctrl.c diff --git a/reactos/drivers/filesystems/msfs/msfs.c b/drivers/filesystems/msfs/msfs.c similarity index 100% rename from reactos/drivers/filesystems/msfs/msfs.c rename to drivers/filesystems/msfs/msfs.c diff --git a/reactos/drivers/filesystems/msfs/msfs.h b/drivers/filesystems/msfs/msfs.h similarity index 100% rename from reactos/drivers/filesystems/msfs/msfs.h rename to drivers/filesystems/msfs/msfs.h diff --git a/reactos/drivers/filesystems/msfs/msfs.rbuild b/drivers/filesystems/msfs/msfs.rbuild similarity index 100% rename from reactos/drivers/filesystems/msfs/msfs.rbuild rename to drivers/filesystems/msfs/msfs.rbuild diff --git a/reactos/drivers/filesystems/msfs/msfs.rc b/drivers/filesystems/msfs/msfs.rc similarity index 100% rename from reactos/drivers/filesystems/msfs/msfs.rc rename to drivers/filesystems/msfs/msfs.rc diff --git a/reactos/drivers/filesystems/msfs/rw.c b/drivers/filesystems/msfs/rw.c similarity index 100% rename from reactos/drivers/filesystems/msfs/rw.c rename to drivers/filesystems/msfs/rw.c diff --git a/reactos/drivers/filesystems/mup/create.c b/drivers/filesystems/mup/create.c similarity index 100% rename from reactos/drivers/filesystems/mup/create.c rename to drivers/filesystems/mup/create.c diff --git a/reactos/drivers/filesystems/mup/mup.c b/drivers/filesystems/mup/mup.c similarity index 100% rename from reactos/drivers/filesystems/mup/mup.c rename to drivers/filesystems/mup/mup.c diff --git a/reactos/drivers/filesystems/mup/mup.h b/drivers/filesystems/mup/mup.h similarity index 100% rename from reactos/drivers/filesystems/mup/mup.h rename to drivers/filesystems/mup/mup.h diff --git a/reactos/drivers/filesystems/mup/mup.rbuild b/drivers/filesystems/mup/mup.rbuild similarity index 100% rename from reactos/drivers/filesystems/mup/mup.rbuild rename to drivers/filesystems/mup/mup.rbuild diff --git a/reactos/drivers/filesystems/mup/mup.rc b/drivers/filesystems/mup/mup.rc similarity index 100% rename from reactos/drivers/filesystems/mup/mup.rc rename to drivers/filesystems/mup/mup.rc diff --git a/reactos/drivers/filesystems/npfs/create.c b/drivers/filesystems/npfs/create.c similarity index 100% rename from reactos/drivers/filesystems/npfs/create.c rename to drivers/filesystems/npfs/create.c diff --git a/reactos/drivers/filesystems/npfs/finfo.c b/drivers/filesystems/npfs/finfo.c similarity index 100% rename from reactos/drivers/filesystems/npfs/finfo.c rename to drivers/filesystems/npfs/finfo.c diff --git a/reactos/drivers/filesystems/npfs/fsctrl.c b/drivers/filesystems/npfs/fsctrl.c similarity index 100% rename from reactos/drivers/filesystems/npfs/fsctrl.c rename to drivers/filesystems/npfs/fsctrl.c diff --git a/reactos/drivers/filesystems/npfs/npfs.c b/drivers/filesystems/npfs/npfs.c similarity index 100% rename from reactos/drivers/filesystems/npfs/npfs.c rename to drivers/filesystems/npfs/npfs.c diff --git a/reactos/drivers/filesystems/npfs/npfs.h b/drivers/filesystems/npfs/npfs.h similarity index 100% rename from reactos/drivers/filesystems/npfs/npfs.h rename to drivers/filesystems/npfs/npfs.h diff --git a/reactos/drivers/filesystems/npfs/npfs.rbuild b/drivers/filesystems/npfs/npfs.rbuild similarity index 100% rename from reactos/drivers/filesystems/npfs/npfs.rbuild rename to drivers/filesystems/npfs/npfs.rbuild diff --git a/reactos/drivers/filesystems/npfs/npfs.rc b/drivers/filesystems/npfs/npfs.rc similarity index 100% rename from reactos/drivers/filesystems/npfs/npfs.rc rename to drivers/filesystems/npfs/npfs.rc diff --git a/reactos/drivers/filesystems/npfs/rw.c b/drivers/filesystems/npfs/rw.c similarity index 100% rename from reactos/drivers/filesystems/npfs/rw.c rename to drivers/filesystems/npfs/rw.c diff --git a/reactos/drivers/filesystems/npfs/volume.c b/drivers/filesystems/npfs/volume.c similarity index 100% rename from reactos/drivers/filesystems/npfs/volume.c rename to drivers/filesystems/npfs/volume.c diff --git a/reactos/drivers/filesystems/npfs_new/create.c b/drivers/filesystems/npfs_new/create.c similarity index 100% rename from reactos/drivers/filesystems/npfs_new/create.c rename to drivers/filesystems/npfs_new/create.c diff --git a/reactos/drivers/filesystems/npfs_new/finfo.c b/drivers/filesystems/npfs_new/finfo.c similarity index 100% rename from reactos/drivers/filesystems/npfs_new/finfo.c rename to drivers/filesystems/npfs_new/finfo.c diff --git a/reactos/drivers/filesystems/npfs_new/fsctrl.c b/drivers/filesystems/npfs_new/fsctrl.c similarity index 100% rename from reactos/drivers/filesystems/npfs_new/fsctrl.c rename to drivers/filesystems/npfs_new/fsctrl.c diff --git a/reactos/drivers/filesystems/npfs_new/npfs.c b/drivers/filesystems/npfs_new/npfs.c similarity index 100% rename from reactos/drivers/filesystems/npfs_new/npfs.c rename to drivers/filesystems/npfs_new/npfs.c diff --git a/reactos/drivers/filesystems/npfs_new/npfs.h b/drivers/filesystems/npfs_new/npfs.h similarity index 100% rename from reactos/drivers/filesystems/npfs_new/npfs.h rename to drivers/filesystems/npfs_new/npfs.h diff --git a/reactos/drivers/filesystems/npfs_new/npfs.rbuild b/drivers/filesystems/npfs_new/npfs.rbuild similarity index 100% rename from reactos/drivers/filesystems/npfs_new/npfs.rbuild rename to drivers/filesystems/npfs_new/npfs.rbuild diff --git a/reactos/drivers/filesystems/npfs_new/npfs.rc b/drivers/filesystems/npfs_new/npfs.rc similarity index 100% rename from reactos/drivers/filesystems/npfs_new/npfs.rc rename to drivers/filesystems/npfs_new/npfs.rc diff --git a/reactos/drivers/filesystems/npfs_new/rw.c b/drivers/filesystems/npfs_new/rw.c similarity index 100% rename from reactos/drivers/filesystems/npfs_new/rw.c rename to drivers/filesystems/npfs_new/rw.c diff --git a/reactos/drivers/filesystems/npfs_new/volume.c b/drivers/filesystems/npfs_new/volume.c similarity index 100% rename from reactos/drivers/filesystems/npfs_new/volume.c rename to drivers/filesystems/npfs_new/volume.c diff --git a/reactos/drivers/filesystems/ntfs/attrib.c b/drivers/filesystems/ntfs/attrib.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/attrib.c rename to drivers/filesystems/ntfs/attrib.c diff --git a/reactos/drivers/filesystems/ntfs/blockdev.c b/drivers/filesystems/ntfs/blockdev.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/blockdev.c rename to drivers/filesystems/ntfs/blockdev.c diff --git a/reactos/drivers/filesystems/ntfs/close.c b/drivers/filesystems/ntfs/close.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/close.c rename to drivers/filesystems/ntfs/close.c diff --git a/reactos/drivers/filesystems/ntfs/create.c b/drivers/filesystems/ntfs/create.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/create.c rename to drivers/filesystems/ntfs/create.c diff --git a/reactos/drivers/filesystems/ntfs/dirctl.c b/drivers/filesystems/ntfs/dirctl.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/dirctl.c rename to drivers/filesystems/ntfs/dirctl.c diff --git a/reactos/drivers/filesystems/ntfs/dispatch.c b/drivers/filesystems/ntfs/dispatch.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/dispatch.c rename to drivers/filesystems/ntfs/dispatch.c diff --git a/reactos/drivers/filesystems/ntfs/fastio.c b/drivers/filesystems/ntfs/fastio.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/fastio.c rename to drivers/filesystems/ntfs/fastio.c diff --git a/reactos/drivers/filesystems/ntfs/fcb.c b/drivers/filesystems/ntfs/fcb.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/fcb.c rename to drivers/filesystems/ntfs/fcb.c diff --git a/reactos/drivers/filesystems/ntfs/finfo.c b/drivers/filesystems/ntfs/finfo.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/finfo.c rename to drivers/filesystems/ntfs/finfo.c diff --git a/reactos/drivers/filesystems/ntfs/fsctl.c b/drivers/filesystems/ntfs/fsctl.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/fsctl.c rename to drivers/filesystems/ntfs/fsctl.c diff --git a/reactos/drivers/filesystems/ntfs/mft.c b/drivers/filesystems/ntfs/mft.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/mft.c rename to drivers/filesystems/ntfs/mft.c diff --git a/reactos/drivers/filesystems/ntfs/misc.c b/drivers/filesystems/ntfs/misc.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/misc.c rename to drivers/filesystems/ntfs/misc.c diff --git a/reactos/drivers/filesystems/ntfs/notes.txt b/drivers/filesystems/ntfs/notes.txt similarity index 100% rename from reactos/drivers/filesystems/ntfs/notes.txt rename to drivers/filesystems/ntfs/notes.txt diff --git a/reactos/drivers/filesystems/ntfs/ntfs.c b/drivers/filesystems/ntfs/ntfs.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/ntfs.c rename to drivers/filesystems/ntfs/ntfs.c diff --git a/reactos/drivers/filesystems/ntfs/ntfs.h b/drivers/filesystems/ntfs/ntfs.h similarity index 100% rename from reactos/drivers/filesystems/ntfs/ntfs.h rename to drivers/filesystems/ntfs/ntfs.h diff --git a/reactos/drivers/filesystems/ntfs/ntfs.rbuild b/drivers/filesystems/ntfs/ntfs.rbuild similarity index 100% rename from reactos/drivers/filesystems/ntfs/ntfs.rbuild rename to drivers/filesystems/ntfs/ntfs.rbuild diff --git a/reactos/drivers/filesystems/ntfs/ntfs.rc b/drivers/filesystems/ntfs/ntfs.rc similarity index 100% rename from reactos/drivers/filesystems/ntfs/ntfs.rc rename to drivers/filesystems/ntfs/ntfs.rc diff --git a/reactos/drivers/filesystems/ntfs/rw.c b/drivers/filesystems/ntfs/rw.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/rw.c rename to drivers/filesystems/ntfs/rw.c diff --git a/reactos/drivers/filesystems/ntfs/volinfo.c b/drivers/filesystems/ntfs/volinfo.c similarity index 100% rename from reactos/drivers/filesystems/ntfs/volinfo.c rename to drivers/filesystems/ntfs/volinfo.c diff --git a/reactos/drivers/input/directory.rbuild b/drivers/input/directory.rbuild similarity index 100% rename from reactos/drivers/input/directory.rbuild rename to drivers/input/directory.rbuild diff --git a/reactos/drivers/input/i8042prt/README.txt b/drivers/input/i8042prt/README.txt similarity index 100% rename from reactos/drivers/input/i8042prt/README.txt rename to drivers/input/i8042prt/README.txt diff --git a/reactos/drivers/input/i8042prt/createclose.c b/drivers/input/i8042prt/createclose.c similarity index 100% rename from reactos/drivers/input/i8042prt/createclose.c rename to drivers/input/i8042prt/createclose.c diff --git a/reactos/drivers/input/i8042prt/i8042prt.c b/drivers/input/i8042prt/i8042prt.c similarity index 100% rename from reactos/drivers/input/i8042prt/i8042prt.c rename to drivers/input/i8042prt/i8042prt.c diff --git a/reactos/drivers/input/i8042prt/i8042prt.h b/drivers/input/i8042prt/i8042prt.h similarity index 100% rename from reactos/drivers/input/i8042prt/i8042prt.h rename to drivers/input/i8042prt/i8042prt.h diff --git a/reactos/drivers/input/i8042prt/i8042prt.rbuild b/drivers/input/i8042prt/i8042prt.rbuild similarity index 100% rename from reactos/drivers/input/i8042prt/i8042prt.rbuild rename to drivers/input/i8042prt/i8042prt.rbuild diff --git a/reactos/drivers/input/i8042prt/i8042prt.rc b/drivers/input/i8042prt/i8042prt.rc similarity index 100% rename from reactos/drivers/input/i8042prt/i8042prt.rc rename to drivers/input/i8042prt/i8042prt.rc diff --git a/reactos/drivers/input/i8042prt/keyboard.c b/drivers/input/i8042prt/keyboard.c similarity index 100% rename from reactos/drivers/input/i8042prt/keyboard.c rename to drivers/input/i8042prt/keyboard.c diff --git a/reactos/drivers/input/i8042prt/misc.c b/drivers/input/i8042prt/misc.c similarity index 100% rename from reactos/drivers/input/i8042prt/misc.c rename to drivers/input/i8042prt/misc.c diff --git a/reactos/drivers/input/i8042prt/mouse.c b/drivers/input/i8042prt/mouse.c similarity index 100% rename from reactos/drivers/input/i8042prt/mouse.c rename to drivers/input/i8042prt/mouse.c diff --git a/reactos/drivers/input/i8042prt/pnp.c b/drivers/input/i8042prt/pnp.c similarity index 100% rename from reactos/drivers/input/i8042prt/pnp.c rename to drivers/input/i8042prt/pnp.c diff --git a/reactos/drivers/input/i8042prt/ps2pp.c b/drivers/input/i8042prt/ps2pp.c similarity index 100% rename from reactos/drivers/input/i8042prt/ps2pp.c rename to drivers/input/i8042prt/ps2pp.c diff --git a/reactos/drivers/input/i8042prt/readwrite.c b/drivers/input/i8042prt/readwrite.c similarity index 100% rename from reactos/drivers/input/i8042prt/readwrite.c rename to drivers/input/i8042prt/readwrite.c diff --git a/reactos/drivers/input/i8042prt/registry.c b/drivers/input/i8042prt/registry.c similarity index 100% rename from reactos/drivers/input/i8042prt/registry.c rename to drivers/input/i8042prt/registry.c diff --git a/reactos/drivers/input/i8042prt/setup.c b/drivers/input/i8042prt/setup.c similarity index 100% rename from reactos/drivers/input/i8042prt/setup.c rename to drivers/input/i8042prt/setup.c diff --git a/reactos/drivers/input/kbdclass/kbdclass.c b/drivers/input/kbdclass/kbdclass.c similarity index 100% rename from reactos/drivers/input/kbdclass/kbdclass.c rename to drivers/input/kbdclass/kbdclass.c diff --git a/reactos/drivers/input/kbdclass/kbdclass.h b/drivers/input/kbdclass/kbdclass.h similarity index 100% rename from reactos/drivers/input/kbdclass/kbdclass.h rename to drivers/input/kbdclass/kbdclass.h diff --git a/reactos/drivers/input/kbdclass/kbdclass.rbuild b/drivers/input/kbdclass/kbdclass.rbuild similarity index 100% rename from reactos/drivers/input/kbdclass/kbdclass.rbuild rename to drivers/input/kbdclass/kbdclass.rbuild diff --git a/reactos/drivers/input/kbdclass/kbdclass.rc b/drivers/input/kbdclass/kbdclass.rc similarity index 100% rename from reactos/drivers/input/kbdclass/kbdclass.rc rename to drivers/input/kbdclass/kbdclass.rc diff --git a/reactos/drivers/input/kbdclass/misc.c b/drivers/input/kbdclass/misc.c similarity index 100% rename from reactos/drivers/input/kbdclass/misc.c rename to drivers/input/kbdclass/misc.c diff --git a/reactos/drivers/input/mouclass/misc.c b/drivers/input/mouclass/misc.c similarity index 100% rename from reactos/drivers/input/mouclass/misc.c rename to drivers/input/mouclass/misc.c diff --git a/reactos/drivers/input/mouclass/mouclass.c b/drivers/input/mouclass/mouclass.c similarity index 100% rename from reactos/drivers/input/mouclass/mouclass.c rename to drivers/input/mouclass/mouclass.c diff --git a/reactos/drivers/input/mouclass/mouclass.h b/drivers/input/mouclass/mouclass.h similarity index 100% rename from reactos/drivers/input/mouclass/mouclass.h rename to drivers/input/mouclass/mouclass.h diff --git a/reactos/drivers/input/mouclass/mouclass.rbuild b/drivers/input/mouclass/mouclass.rbuild similarity index 100% rename from reactos/drivers/input/mouclass/mouclass.rbuild rename to drivers/input/mouclass/mouclass.rbuild diff --git a/reactos/drivers/input/mouclass/mouclass.rc b/drivers/input/mouclass/mouclass.rc similarity index 100% rename from reactos/drivers/input/mouclass/mouclass.rc rename to drivers/input/mouclass/mouclass.rc diff --git a/reactos/drivers/input/sermouse/createclose.c b/drivers/input/sermouse/createclose.c similarity index 100% rename from reactos/drivers/input/sermouse/createclose.c rename to drivers/input/sermouse/createclose.c diff --git a/reactos/drivers/input/sermouse/detect.c b/drivers/input/sermouse/detect.c similarity index 100% rename from reactos/drivers/input/sermouse/detect.c rename to drivers/input/sermouse/detect.c diff --git a/reactos/drivers/input/sermouse/fdo.c b/drivers/input/sermouse/fdo.c similarity index 100% rename from reactos/drivers/input/sermouse/fdo.c rename to drivers/input/sermouse/fdo.c diff --git a/reactos/drivers/input/sermouse/internaldevctl.c b/drivers/input/sermouse/internaldevctl.c similarity index 100% rename from reactos/drivers/input/sermouse/internaldevctl.c rename to drivers/input/sermouse/internaldevctl.c diff --git a/reactos/drivers/input/sermouse/misc.c b/drivers/input/sermouse/misc.c similarity index 100% rename from reactos/drivers/input/sermouse/misc.c rename to drivers/input/sermouse/misc.c diff --git a/reactos/drivers/input/sermouse/readmouse.c b/drivers/input/sermouse/readmouse.c similarity index 100% rename from reactos/drivers/input/sermouse/readmouse.c rename to drivers/input/sermouse/readmouse.c diff --git a/reactos/drivers/input/sermouse/sermouse.c b/drivers/input/sermouse/sermouse.c similarity index 100% rename from reactos/drivers/input/sermouse/sermouse.c rename to drivers/input/sermouse/sermouse.c diff --git a/reactos/drivers/input/sermouse/sermouse.h b/drivers/input/sermouse/sermouse.h similarity index 100% rename from reactos/drivers/input/sermouse/sermouse.h rename to drivers/input/sermouse/sermouse.h diff --git a/reactos/drivers/input/sermouse/sermouse.rbuild b/drivers/input/sermouse/sermouse.rbuild similarity index 100% rename from reactos/drivers/input/sermouse/sermouse.rbuild rename to drivers/input/sermouse/sermouse.rbuild diff --git a/reactos/drivers/input/sermouse/sermouse.rc b/drivers/input/sermouse/sermouse.rc similarity index 100% rename from reactos/drivers/input/sermouse/sermouse.rc rename to drivers/input/sermouse/sermouse.rc diff --git a/reactos/drivers/input/sermouse/sermouse.txt b/drivers/input/sermouse/sermouse.txt similarity index 100% rename from reactos/drivers/input/sermouse/sermouse.txt rename to drivers/input/sermouse/sermouse.txt diff --git a/reactos/drivers/ksfilter/directory.rbuild b/drivers/ksfilter/directory.rbuild similarity index 100% rename from reactos/drivers/ksfilter/directory.rbuild rename to drivers/ksfilter/directory.rbuild diff --git a/reactos/drivers/ksfilter/ks/allocators.c b/drivers/ksfilter/ks/allocators.c similarity index 100% rename from reactos/drivers/ksfilter/ks/allocators.c rename to drivers/ksfilter/ks/allocators.c diff --git a/reactos/drivers/ksfilter/ks/clocks.c b/drivers/ksfilter/ks/clocks.c similarity index 100% rename from reactos/drivers/ksfilter/ks/clocks.c rename to drivers/ksfilter/ks/clocks.c diff --git a/reactos/drivers/ksfilter/ks/connectivity.c b/drivers/ksfilter/ks/connectivity.c similarity index 100% rename from reactos/drivers/ksfilter/ks/connectivity.c rename to drivers/ksfilter/ks/connectivity.c diff --git a/reactos/drivers/ksfilter/ks/events.c b/drivers/ksfilter/ks/events.c similarity index 100% rename from reactos/drivers/ksfilter/ks/events.c rename to drivers/ksfilter/ks/events.c diff --git a/reactos/drivers/ksfilter/ks/irp.c b/drivers/ksfilter/ks/irp.c similarity index 100% rename from reactos/drivers/ksfilter/ks/irp.c rename to drivers/ksfilter/ks/irp.c diff --git a/reactos/drivers/ksfilter/ks/kcom.c b/drivers/ksfilter/ks/kcom.c similarity index 100% rename from reactos/drivers/ksfilter/ks/kcom.c rename to drivers/ksfilter/ks/kcom.c diff --git a/reactos/drivers/ksfilter/ks/ks.rbuild b/drivers/ksfilter/ks/ks.rbuild similarity index 100% rename from reactos/drivers/ksfilter/ks/ks.rbuild rename to drivers/ksfilter/ks/ks.rbuild diff --git a/reactos/drivers/ksfilter/ks/ks.rc b/drivers/ksfilter/ks/ks.rc similarity index 100% rename from reactos/drivers/ksfilter/ks/ks.rc rename to drivers/ksfilter/ks/ks.rc diff --git a/reactos/drivers/ksfilter/ks/ks.spec b/drivers/ksfilter/ks/ks.spec similarity index 100% rename from reactos/drivers/ksfilter/ks/ks.spec rename to drivers/ksfilter/ks/ks.spec diff --git a/reactos/drivers/ksfilter/ks/methods.c b/drivers/ksfilter/ks/methods.c similarity index 100% rename from reactos/drivers/ksfilter/ks/methods.c rename to drivers/ksfilter/ks/methods.c diff --git a/reactos/drivers/ksfilter/ks/misc.c b/drivers/ksfilter/ks/misc.c similarity index 100% rename from reactos/drivers/ksfilter/ks/misc.c rename to drivers/ksfilter/ks/misc.c diff --git a/reactos/drivers/ksfilter/ks/properties.c b/drivers/ksfilter/ks/properties.c similarity index 100% rename from reactos/drivers/ksfilter/ks/properties.c rename to drivers/ksfilter/ks/properties.c diff --git a/reactos/drivers/ksfilter/ks/topology.c b/drivers/ksfilter/ks/topology.c similarity index 100% rename from reactos/drivers/ksfilter/ks/topology.c rename to drivers/ksfilter/ks/topology.c diff --git a/reactos/drivers/ksfilter/ks/worker.c b/drivers/ksfilter/ks/worker.c similarity index 100% rename from reactos/drivers/ksfilter/ks/worker.c rename to drivers/ksfilter/ks/worker.c diff --git a/reactos/drivers/multimedia/README b/drivers/multimedia/README similarity index 100% rename from reactos/drivers/multimedia/README rename to drivers/multimedia/README diff --git a/reactos/drivers/multimedia/audio/directory.rbuild b/drivers/multimedia/audio/directory.rbuild similarity index 100% rename from reactos/drivers/multimedia/audio/directory.rbuild rename to drivers/multimedia/audio/directory.rbuild diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/mpu401.c b/drivers/multimedia/audio/mpu401_nt4/mpu401.c similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/mpu401.c rename to drivers/multimedia/audio/mpu401_nt4/mpu401.c diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/mpu401.h b/drivers/multimedia/audio/mpu401_nt4/mpu401.h similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/mpu401.h rename to drivers/multimedia/audio/mpu401_nt4/mpu401.h diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/mpu401.rbuild b/drivers/multimedia/audio/mpu401_nt4/mpu401.rbuild similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/mpu401.rbuild rename to drivers/multimedia/audio/mpu401_nt4/mpu401.rbuild diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/mpu401.rc b/drivers/multimedia/audio/mpu401_nt4/mpu401.rc similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/mpu401.rc rename to drivers/multimedia/audio/mpu401_nt4/mpu401.rc diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/portio.c b/drivers/multimedia/audio/mpu401_nt4/portio.c similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/portio.c rename to drivers/multimedia/audio/mpu401_nt4/portio.c diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/readme.txt b/drivers/multimedia/audio/mpu401_nt4/readme.txt similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/readme.txt rename to drivers/multimedia/audio/mpu401_nt4/readme.txt diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/sbdebug.h b/drivers/multimedia/audio/mpu401_nt4/sbdebug.h similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/sbdebug.h rename to drivers/multimedia/audio/mpu401_nt4/sbdebug.h diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/settings.c b/drivers/multimedia/audio/mpu401_nt4/settings.c similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/settings.c rename to drivers/multimedia/audio/mpu401_nt4/settings.c diff --git a/reactos/drivers/multimedia/audio/mpu401_nt4/test.c b/drivers/multimedia/audio/mpu401_nt4/test.c similarity index 100% rename from reactos/drivers/multimedia/audio/mpu401_nt4/test.c rename to drivers/multimedia/audio/mpu401_nt4/test.c diff --git a/reactos/drivers/multimedia/audio/sb16_nt4/control.c b/drivers/multimedia/audio/sb16_nt4/control.c similarity index 100% rename from reactos/drivers/multimedia/audio/sb16_nt4/control.c rename to drivers/multimedia/audio/sb16_nt4/control.c diff --git a/reactos/drivers/multimedia/audio/sb16_nt4/interrupt.c b/drivers/multimedia/audio/sb16_nt4/interrupt.c similarity index 100% rename from reactos/drivers/multimedia/audio/sb16_nt4/interrupt.c rename to drivers/multimedia/audio/sb16_nt4/interrupt.c diff --git a/reactos/drivers/multimedia/audio/sb16_nt4/main.c b/drivers/multimedia/audio/sb16_nt4/main.c similarity index 100% rename from reactos/drivers/multimedia/audio/sb16_nt4/main.c rename to drivers/multimedia/audio/sb16_nt4/main.c diff --git a/reactos/drivers/multimedia/audio/sb16_nt4/sb16_nt4.rbuild b/drivers/multimedia/audio/sb16_nt4/sb16_nt4.rbuild similarity index 100% rename from reactos/drivers/multimedia/audio/sb16_nt4/sb16_nt4.rbuild rename to drivers/multimedia/audio/sb16_nt4/sb16_nt4.rbuild diff --git a/reactos/drivers/multimedia/audio/sb16_nt4/sndblst.h b/drivers/multimedia/audio/sb16_nt4/sndblst.h similarity index 100% rename from reactos/drivers/multimedia/audio/sb16_nt4/sndblst.h rename to drivers/multimedia/audio/sb16_nt4/sndblst.h diff --git a/reactos/drivers/multimedia/audio/sndblst/card.c b/drivers/multimedia/audio/sndblst/card.c similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/card.c rename to drivers/multimedia/audio/sndblst/card.c diff --git a/reactos/drivers/multimedia/audio/sndblst/dma.c b/drivers/multimedia/audio/sndblst/dma.c similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/dma.c rename to drivers/multimedia/audio/sndblst/dma.c diff --git a/reactos/drivers/multimedia/audio/sndblst/irq.c b/drivers/multimedia/audio/sndblst/irq.c similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/irq.c rename to drivers/multimedia/audio/sndblst/irq.c diff --git a/reactos/drivers/multimedia/audio/sndblst/portio.c b/drivers/multimedia/audio/sndblst/portio.c similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/portio.c rename to drivers/multimedia/audio/sndblst/portio.c diff --git a/reactos/drivers/multimedia/audio/sndblst/sbdebug.h b/drivers/multimedia/audio/sndblst/sbdebug.h similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/sbdebug.h rename to drivers/multimedia/audio/sndblst/sbdebug.h diff --git a/reactos/drivers/multimedia/audio/sndblst/settings.c b/drivers/multimedia/audio/sndblst/settings.c similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/settings.c rename to drivers/multimedia/audio/sndblst/settings.c diff --git a/reactos/drivers/multimedia/audio/sndblst/sndblst.c b/drivers/multimedia/audio/sndblst/sndblst.c similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/sndblst.c rename to drivers/multimedia/audio/sndblst/sndblst.c diff --git a/reactos/drivers/multimedia/audio/sndblst/sndblst.h b/drivers/multimedia/audio/sndblst/sndblst.h similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/sndblst.h rename to drivers/multimedia/audio/sndblst/sndblst.h diff --git a/reactos/drivers/multimedia/audio/sndblst/sndblst.rbuild b/drivers/multimedia/audio/sndblst/sndblst.rbuild similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/sndblst.rbuild rename to drivers/multimedia/audio/sndblst/sndblst.rbuild diff --git a/reactos/drivers/multimedia/audio/sndblst/sndblst.rc b/drivers/multimedia/audio/sndblst/sndblst.rc similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/sndblst.rc rename to drivers/multimedia/audio/sndblst/sndblst.rc diff --git a/reactos/drivers/multimedia/audio/sndblst/test.c b/drivers/multimedia/audio/sndblst/test.c similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/test.c rename to drivers/multimedia/audio/sndblst/test.c diff --git a/reactos/drivers/multimedia/audio/sndblst/test/sb.c b/drivers/multimedia/audio/sndblst/test/sb.c similarity index 100% rename from reactos/drivers/multimedia/audio/sndblst/test/sb.c rename to drivers/multimedia/audio/sndblst/test/sb.c diff --git a/reactos/drivers/multimedia/audio/sound/dsp.c b/drivers/multimedia/audio/sound/dsp.c similarity index 100% rename from reactos/drivers/multimedia/audio/sound/dsp.c rename to drivers/multimedia/audio/sound/dsp.c diff --git a/reactos/drivers/multimedia/audio/sound/dsp.h b/drivers/multimedia/audio/sound/dsp.h similarity index 100% rename from reactos/drivers/multimedia/audio/sound/dsp.h rename to drivers/multimedia/audio/sound/dsp.h diff --git a/reactos/drivers/multimedia/audio/sound/in.h b/drivers/multimedia/audio/sound/in.h similarity index 100% rename from reactos/drivers/multimedia/audio/sound/in.h rename to drivers/multimedia/audio/sound/in.h diff --git a/reactos/drivers/multimedia/audio/sound/include/devices.h b/drivers/multimedia/audio/sound/include/devices.h similarity index 100% rename from reactos/drivers/multimedia/audio/sound/include/devices.h rename to drivers/multimedia/audio/sound/include/devices.h diff --git a/reactos/drivers/multimedia/audio/sound/mixer.c b/drivers/multimedia/audio/sound/mixer.c similarity index 100% rename from reactos/drivers/multimedia/audio/sound/mixer.c rename to drivers/multimedia/audio/sound/mixer.c diff --git a/reactos/drivers/multimedia/audio/sound/mixer.h b/drivers/multimedia/audio/sound/mixer.h similarity index 100% rename from reactos/drivers/multimedia/audio/sound/mixer.h rename to drivers/multimedia/audio/sound/mixer.h diff --git a/reactos/drivers/multimedia/audio/sound/sb16.c b/drivers/multimedia/audio/sound/sb16.c similarity index 100% rename from reactos/drivers/multimedia/audio/sound/sb16.c rename to drivers/multimedia/audio/sound/sb16.c diff --git a/reactos/drivers/multimedia/audio/sound/sb16.h b/drivers/multimedia/audio/sound/sb16.h similarity index 100% rename from reactos/drivers/multimedia/audio/sound/sb16.h rename to drivers/multimedia/audio/sound/sb16.h diff --git a/reactos/drivers/multimedia/audio/sound/sb16.rc b/drivers/multimedia/audio/sound/sb16.rc similarity index 100% rename from reactos/drivers/multimedia/audio/sound/sb16.rc rename to drivers/multimedia/audio/sound/sb16.rc diff --git a/reactos/drivers/multimedia/audio/sound/sb_waveout.c b/drivers/multimedia/audio/sound/sb_waveout.c similarity index 100% rename from reactos/drivers/multimedia/audio/sound/sb_waveout.c rename to drivers/multimedia/audio/sound/sb_waveout.c diff --git a/reactos/drivers/multimedia/audio/sound/sound.c b/drivers/multimedia/audio/sound/sound.c similarity index 100% rename from reactos/drivers/multimedia/audio/sound/sound.c rename to drivers/multimedia/audio/sound/sound.c diff --git a/reactos/drivers/multimedia/audio/sound/sound.rbuild b/drivers/multimedia/audio/sound/sound.rbuild similarity index 100% rename from reactos/drivers/multimedia/audio/sound/sound.rbuild rename to drivers/multimedia/audio/sound/sound.rbuild diff --git a/reactos/drivers/multimedia/audio/sound/wave.c b/drivers/multimedia/audio/sound/wave.c similarity index 100% rename from reactos/drivers/multimedia/audio/sound/wave.c rename to drivers/multimedia/audio/sound/wave.c diff --git a/reactos/drivers/multimedia/audio/sound/wave.h b/drivers/multimedia/audio/sound/wave.h similarity index 100% rename from reactos/drivers/multimedia/audio/sound/wave.h rename to drivers/multimedia/audio/sound/wave.h diff --git a/reactos/drivers/multimedia/directory.rbuild b/drivers/multimedia/directory.rbuild similarity index 100% rename from reactos/drivers/multimedia/directory.rbuild rename to drivers/multimedia/directory.rbuild diff --git a/reactos/drivers/network/acd/acd/main.c b/drivers/network/acd/acd/main.c similarity index 100% rename from reactos/drivers/network/acd/acd/main.c rename to drivers/network/acd/acd/main.c diff --git a/reactos/drivers/network/acd/include/acdapi.h b/drivers/network/acd/include/acdapi.h similarity index 100% rename from reactos/drivers/network/acd/include/acdapi.h rename to drivers/network/acd/include/acdapi.h diff --git a/reactos/drivers/network/acd/rasacd.rbuild b/drivers/network/acd/rasacd.rbuild similarity index 100% rename from reactos/drivers/network/acd/rasacd.rbuild rename to drivers/network/acd/rasacd.rbuild diff --git a/reactos/drivers/network/acd/rasacd.rc b/drivers/network/acd/rasacd.rc similarity index 100% rename from reactos/drivers/network/acd/rasacd.rc rename to drivers/network/acd/rasacd.rc diff --git a/reactos/drivers/network/afd/afd.rbuild b/drivers/network/afd/afd.rbuild similarity index 100% rename from reactos/drivers/network/afd/afd.rbuild rename to drivers/network/afd/afd.rbuild diff --git a/reactos/drivers/network/afd/afd.rc b/drivers/network/afd/afd.rc similarity index 100% rename from reactos/drivers/network/afd/afd.rc rename to drivers/network/afd/afd.rc diff --git a/reactos/drivers/network/afd/afd/bind.c b/drivers/network/afd/afd/bind.c similarity index 100% rename from reactos/drivers/network/afd/afd/bind.c rename to drivers/network/afd/afd/bind.c diff --git a/reactos/drivers/network/afd/afd/connect.c b/drivers/network/afd/afd/connect.c similarity index 100% rename from reactos/drivers/network/afd/afd/connect.c rename to drivers/network/afd/afd/connect.c diff --git a/reactos/drivers/network/afd/afd/context.c b/drivers/network/afd/afd/context.c similarity index 100% rename from reactos/drivers/network/afd/afd/context.c rename to drivers/network/afd/afd/context.c diff --git a/reactos/drivers/network/afd/afd/event.c b/drivers/network/afd/afd/event.c similarity index 100% rename from reactos/drivers/network/afd/afd/event.c rename to drivers/network/afd/afd/event.c diff --git a/reactos/drivers/network/afd/afd/info.c b/drivers/network/afd/afd/info.c similarity index 100% rename from reactos/drivers/network/afd/afd/info.c rename to drivers/network/afd/afd/info.c diff --git a/reactos/drivers/network/afd/afd/listen.c b/drivers/network/afd/afd/listen.c similarity index 100% rename from reactos/drivers/network/afd/afd/listen.c rename to drivers/network/afd/afd/listen.c diff --git a/reactos/drivers/network/afd/afd/lock.c b/drivers/network/afd/afd/lock.c similarity index 100% rename from reactos/drivers/network/afd/afd/lock.c rename to drivers/network/afd/afd/lock.c diff --git a/reactos/drivers/network/afd/afd/main.c b/drivers/network/afd/afd/main.c similarity index 100% rename from reactos/drivers/network/afd/afd/main.c rename to drivers/network/afd/afd/main.c diff --git a/reactos/drivers/network/afd/afd/read.c b/drivers/network/afd/afd/read.c similarity index 100% rename from reactos/drivers/network/afd/afd/read.c rename to drivers/network/afd/afd/read.c diff --git a/reactos/drivers/network/afd/afd/select.c b/drivers/network/afd/afd/select.c similarity index 100% rename from reactos/drivers/network/afd/afd/select.c rename to drivers/network/afd/afd/select.c diff --git a/reactos/drivers/network/afd/afd/tdi.c b/drivers/network/afd/afd/tdi.c similarity index 100% rename from reactos/drivers/network/afd/afd/tdi.c rename to drivers/network/afd/afd/tdi.c diff --git a/reactos/drivers/network/afd/afd/tdiconn.c b/drivers/network/afd/afd/tdiconn.c similarity index 100% rename from reactos/drivers/network/afd/afd/tdiconn.c rename to drivers/network/afd/afd/tdiconn.c diff --git a/reactos/drivers/network/afd/afd/write.c b/drivers/network/afd/afd/write.c similarity index 100% rename from reactos/drivers/network/afd/afd/write.c rename to drivers/network/afd/afd/write.c diff --git a/reactos/drivers/network/afd/doc/simple_select.txt b/drivers/network/afd/doc/simple_select.txt similarity index 100% rename from reactos/drivers/network/afd/doc/simple_select.txt rename to drivers/network/afd/doc/simple_select.txt diff --git a/reactos/drivers/network/afd/include/afd.h b/drivers/network/afd/include/afd.h similarity index 100% rename from reactos/drivers/network/afd/include/afd.h rename to drivers/network/afd/include/afd.h diff --git a/reactos/drivers/network/afd/include/debug.h b/drivers/network/afd/include/debug.h similarity index 100% rename from reactos/drivers/network/afd/include/debug.h rename to drivers/network/afd/include/debug.h diff --git a/reactos/drivers/network/afd/include/tdi_proto.h b/drivers/network/afd/include/tdi_proto.h similarity index 100% rename from reactos/drivers/network/afd/include/tdi_proto.h rename to drivers/network/afd/include/tdi_proto.h diff --git a/reactos/drivers/network/afd/include/tdiconn.h b/drivers/network/afd/include/tdiconn.h similarity index 100% rename from reactos/drivers/network/afd/include/tdiconn.h rename to drivers/network/afd/include/tdiconn.h diff --git a/reactos/drivers/network/dd/directory.rbuild b/drivers/network/dd/directory.rbuild similarity index 100% rename from reactos/drivers/network/dd/directory.rbuild rename to drivers/network/dd/directory.rbuild diff --git a/reactos/drivers/network/dd/ne2000/include/8390.h b/drivers/network/dd/ne2000/include/8390.h similarity index 100% rename from reactos/drivers/network/dd/ne2000/include/8390.h rename to drivers/network/dd/ne2000/include/8390.h diff --git a/reactos/drivers/network/dd/ne2000/include/debug.h b/drivers/network/dd/ne2000/include/debug.h similarity index 100% rename from reactos/drivers/network/dd/ne2000/include/debug.h rename to drivers/network/dd/ne2000/include/debug.h diff --git a/reactos/drivers/network/dd/ne2000/include/ne2000.h b/drivers/network/dd/ne2000/include/ne2000.h similarity index 100% rename from reactos/drivers/network/dd/ne2000/include/ne2000.h rename to drivers/network/dd/ne2000/include/ne2000.h diff --git a/reactos/drivers/network/dd/ne2000/ne2000.rbuild b/drivers/network/dd/ne2000/ne2000.rbuild similarity index 100% rename from reactos/drivers/network/dd/ne2000/ne2000.rbuild rename to drivers/network/dd/ne2000/ne2000.rbuild diff --git a/reactos/drivers/network/dd/ne2000/ne2000.rc b/drivers/network/dd/ne2000/ne2000.rc similarity index 100% rename from reactos/drivers/network/dd/ne2000/ne2000.rc rename to drivers/network/dd/ne2000/ne2000.rc diff --git a/reactos/drivers/network/dd/ne2000/ne2000/8390.c b/drivers/network/dd/ne2000/ne2000/8390.c similarity index 100% rename from reactos/drivers/network/dd/ne2000/ne2000/8390.c rename to drivers/network/dd/ne2000/ne2000/8390.c diff --git a/reactos/drivers/network/dd/ne2000/ne2000/main.c b/drivers/network/dd/ne2000/ne2000/main.c similarity index 100% rename from reactos/drivers/network/dd/ne2000/ne2000/main.c rename to drivers/network/dd/ne2000/ne2000/main.c diff --git a/reactos/drivers/network/dd/pcnet/pci.h b/drivers/network/dd/pcnet/pci.h similarity index 100% rename from reactos/drivers/network/dd/pcnet/pci.h rename to drivers/network/dd/pcnet/pci.h diff --git a/reactos/drivers/network/dd/pcnet/pcnet.c b/drivers/network/dd/pcnet/pcnet.c similarity index 100% rename from reactos/drivers/network/dd/pcnet/pcnet.c rename to drivers/network/dd/pcnet/pcnet.c diff --git a/reactos/drivers/network/dd/pcnet/pcnet.h b/drivers/network/dd/pcnet/pcnet.h similarity index 100% rename from reactos/drivers/network/dd/pcnet/pcnet.h rename to drivers/network/dd/pcnet/pcnet.h diff --git a/reactos/drivers/network/dd/pcnet/pcnet.rbuild b/drivers/network/dd/pcnet/pcnet.rbuild similarity index 100% rename from reactos/drivers/network/dd/pcnet/pcnet.rbuild rename to drivers/network/dd/pcnet/pcnet.rbuild diff --git a/reactos/drivers/network/dd/pcnet/pcnet.rc b/drivers/network/dd/pcnet/pcnet.rc similarity index 100% rename from reactos/drivers/network/dd/pcnet/pcnet.rc rename to drivers/network/dd/pcnet/pcnet.rc diff --git a/reactos/drivers/network/dd/pcnet/pcnethw.h b/drivers/network/dd/pcnet/pcnethw.h similarity index 100% rename from reactos/drivers/network/dd/pcnet/pcnethw.h rename to drivers/network/dd/pcnet/pcnethw.h diff --git a/reactos/drivers/network/dd/pcnet/requests.c b/drivers/network/dd/pcnet/requests.c similarity index 100% rename from reactos/drivers/network/dd/pcnet/requests.c rename to drivers/network/dd/pcnet/requests.c diff --git a/reactos/drivers/network/directory.rbuild b/drivers/network/directory.rbuild similarity index 100% rename from reactos/drivers/network/directory.rbuild rename to drivers/network/directory.rbuild diff --git a/reactos/drivers/network/lan/include/debug.h b/drivers/network/lan/include/debug.h similarity index 100% rename from reactos/drivers/network/lan/include/debug.h rename to drivers/network/lan/include/debug.h diff --git a/reactos/drivers/network/lan/include/lan.h b/drivers/network/lan/include/lan.h similarity index 100% rename from reactos/drivers/network/lan/include/lan.h rename to drivers/network/lan/include/lan.h diff --git a/reactos/drivers/network/lan/include/memtrack.h b/drivers/network/lan/include/memtrack.h similarity index 100% rename from reactos/drivers/network/lan/include/memtrack.h rename to drivers/network/lan/include/memtrack.h diff --git a/reactos/drivers/network/lan/include/net_lan.h b/drivers/network/lan/include/net_lan.h similarity index 100% rename from reactos/drivers/network/lan/include/net_lan.h rename to drivers/network/lan/include/net_lan.h diff --git a/reactos/drivers/network/lan/include/net_wh.h b/drivers/network/lan/include/net_wh.h similarity index 100% rename from reactos/drivers/network/lan/include/net_wh.h rename to drivers/network/lan/include/net_wh.h diff --git a/reactos/drivers/network/lan/include/precomp.h b/drivers/network/lan/include/precomp.h similarity index 100% rename from reactos/drivers/network/lan/include/precomp.h rename to drivers/network/lan/include/precomp.h diff --git a/reactos/drivers/network/lan/lan.rc b/drivers/network/lan/lan.rc similarity index 100% rename from reactos/drivers/network/lan/lan.rc rename to drivers/network/lan/lan.rc diff --git a/reactos/drivers/network/lan/lan/lan.c b/drivers/network/lan/lan/lan.c similarity index 100% rename from reactos/drivers/network/lan/lan/lan.c rename to drivers/network/lan/lan/lan.c diff --git a/reactos/drivers/network/lan/lan/routines.c b/drivers/network/lan/lan/routines.c similarity index 100% rename from reactos/drivers/network/lan/lan/routines.c rename to drivers/network/lan/lan/routines.c diff --git a/reactos/drivers/network/ndis/DIRS b/drivers/network/ndis/DIRS similarity index 100% rename from reactos/drivers/network/ndis/DIRS rename to drivers/network/ndis/DIRS diff --git a/reactos/drivers/network/ndis/include/buffer.h b/drivers/network/ndis/include/buffer.h similarity index 100% rename from reactos/drivers/network/ndis/include/buffer.h rename to drivers/network/ndis/include/buffer.h diff --git a/reactos/drivers/network/ndis/include/debug.h b/drivers/network/ndis/include/debug.h similarity index 100% rename from reactos/drivers/network/ndis/include/debug.h rename to drivers/network/ndis/include/debug.h diff --git a/reactos/drivers/network/ndis/include/efilter.h b/drivers/network/ndis/include/efilter.h similarity index 100% rename from reactos/drivers/network/ndis/include/efilter.h rename to drivers/network/ndis/include/efilter.h diff --git a/reactos/drivers/network/ndis/include/miniport.h b/drivers/network/ndis/include/miniport.h similarity index 100% rename from reactos/drivers/network/ndis/include/miniport.h rename to drivers/network/ndis/include/miniport.h diff --git a/reactos/drivers/network/ndis/include/ndissys.h b/drivers/network/ndis/include/ndissys.h similarity index 100% rename from reactos/drivers/network/ndis/include/ndissys.h rename to drivers/network/ndis/include/ndissys.h diff --git a/reactos/drivers/network/ndis/include/protocol.h b/drivers/network/ndis/include/protocol.h similarity index 100% rename from reactos/drivers/network/ndis/include/protocol.h rename to drivers/network/ndis/include/protocol.h diff --git a/reactos/drivers/network/ndis/ndis.def b/drivers/network/ndis/ndis.def similarity index 100% rename from reactos/drivers/network/ndis/ndis.def rename to drivers/network/ndis/ndis.def diff --git a/reactos/drivers/network/ndis/ndis.rbuild b/drivers/network/ndis/ndis.rbuild similarity index 100% rename from reactos/drivers/network/ndis/ndis.rbuild rename to drivers/network/ndis/ndis.rbuild diff --git a/reactos/drivers/network/ndis/ndis.rc b/drivers/network/ndis/ndis.rc similarity index 100% rename from reactos/drivers/network/ndis/ndis.rc rename to drivers/network/ndis/ndis.rc diff --git a/reactos/drivers/network/ndis/ndis/40gone.c b/drivers/network/ndis/ndis/40gone.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/40gone.c rename to drivers/network/ndis/ndis/40gone.c diff --git a/reactos/drivers/network/ndis/ndis/50gone.c b/drivers/network/ndis/ndis/50gone.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/50gone.c rename to drivers/network/ndis/ndis/50gone.c diff --git a/reactos/drivers/network/ndis/ndis/SOURCES b/drivers/network/ndis/ndis/SOURCES similarity index 100% rename from reactos/drivers/network/ndis/ndis/SOURCES rename to drivers/network/ndis/ndis/SOURCES diff --git a/reactos/drivers/network/ndis/ndis/buffer.c b/drivers/network/ndis/ndis/buffer.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/buffer.c rename to drivers/network/ndis/ndis/buffer.c diff --git a/reactos/drivers/network/ndis/ndis/cl.c b/drivers/network/ndis/ndis/cl.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/cl.c rename to drivers/network/ndis/ndis/cl.c diff --git a/reactos/drivers/network/ndis/ndis/cm.c b/drivers/network/ndis/ndis/cm.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/cm.c rename to drivers/network/ndis/ndis/cm.c diff --git a/reactos/drivers/network/ndis/ndis/co.c b/drivers/network/ndis/ndis/co.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/co.c rename to drivers/network/ndis/ndis/co.c diff --git a/reactos/drivers/network/ndis/ndis/config.c b/drivers/network/ndis/ndis/config.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/config.c rename to drivers/network/ndis/ndis/config.c diff --git a/reactos/drivers/network/ndis/ndis/control.c b/drivers/network/ndis/ndis/control.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/control.c rename to drivers/network/ndis/ndis/control.c diff --git a/reactos/drivers/network/ndis/ndis/efilter.c b/drivers/network/ndis/ndis/efilter.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/efilter.c rename to drivers/network/ndis/ndis/efilter.c diff --git a/reactos/drivers/network/ndis/ndis/hardware.c b/drivers/network/ndis/ndis/hardware.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/hardware.c rename to drivers/network/ndis/ndis/hardware.c diff --git a/reactos/drivers/network/ndis/ndis/io.c b/drivers/network/ndis/ndis/io.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/io.c rename to drivers/network/ndis/ndis/io.c diff --git a/reactos/drivers/network/ndis/ndis/main.c b/drivers/network/ndis/ndis/main.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/main.c rename to drivers/network/ndis/ndis/main.c diff --git a/reactos/drivers/network/ndis/ndis/memory.c b/drivers/network/ndis/ndis/memory.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/memory.c rename to drivers/network/ndis/ndis/memory.c diff --git a/reactos/drivers/network/ndis/ndis/miniport.c b/drivers/network/ndis/ndis/miniport.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/miniport.c rename to drivers/network/ndis/ndis/miniport.c diff --git a/reactos/drivers/network/ndis/ndis/object.c b/drivers/network/ndis/ndis/object.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/object.c rename to drivers/network/ndis/ndis/object.c diff --git a/reactos/drivers/network/ndis/ndis/protocol.c b/drivers/network/ndis/ndis/protocol.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/protocol.c rename to drivers/network/ndis/ndis/protocol.c diff --git a/reactos/drivers/network/ndis/ndis/string.c b/drivers/network/ndis/ndis/string.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/string.c rename to drivers/network/ndis/ndis/string.c diff --git a/reactos/drivers/network/ndis/ndis/stubs.c b/drivers/network/ndis/ndis/stubs.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/stubs.c rename to drivers/network/ndis/ndis/stubs.c diff --git a/reactos/drivers/network/ndis/ndis/time.c b/drivers/network/ndis/ndis/time.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/time.c rename to drivers/network/ndis/ndis/time.c diff --git a/reactos/drivers/network/ndis/ndis/workitem.c b/drivers/network/ndis/ndis/workitem.c similarity index 100% rename from reactos/drivers/network/ndis/ndis/workitem.c rename to drivers/network/ndis/ndis/workitem.c diff --git a/reactos/drivers/network/ndis/readme.txt b/drivers/network/ndis/readme.txt similarity index 100% rename from reactos/drivers/network/ndis/readme.txt rename to drivers/network/ndis/readme.txt diff --git a/reactos/drivers/network/tcpip/DIRS b/drivers/network/tcpip/DIRS similarity index 100% rename from reactos/drivers/network/tcpip/DIRS rename to drivers/network/tcpip/DIRS diff --git a/reactos/drivers/network/tcpip/datalink/SOURCES b/drivers/network/tcpip/datalink/SOURCES similarity index 100% rename from reactos/drivers/network/tcpip/datalink/SOURCES rename to drivers/network/tcpip/datalink/SOURCES diff --git a/reactos/drivers/network/tcpip/datalink/lan.c b/drivers/network/tcpip/datalink/lan.c similarity index 100% rename from reactos/drivers/network/tcpip/datalink/lan.c rename to drivers/network/tcpip/datalink/lan.c diff --git a/reactos/drivers/network/tcpip/include/address.h b/drivers/network/tcpip/include/address.h similarity index 100% rename from reactos/drivers/network/tcpip/include/address.h rename to drivers/network/tcpip/include/address.h diff --git a/reactos/drivers/network/tcpip/include/arp.h b/drivers/network/tcpip/include/arp.h similarity index 100% rename from reactos/drivers/network/tcpip/include/arp.h rename to drivers/network/tcpip/include/arp.h diff --git a/reactos/drivers/network/tcpip/include/bug.h b/drivers/network/tcpip/include/bug.h similarity index 100% rename from reactos/drivers/network/tcpip/include/bug.h rename to drivers/network/tcpip/include/bug.h diff --git a/reactos/drivers/network/tcpip/include/checksum.h b/drivers/network/tcpip/include/checksum.h similarity index 100% rename from reactos/drivers/network/tcpip/include/checksum.h rename to drivers/network/tcpip/include/checksum.h diff --git a/reactos/drivers/network/tcpip/include/datagram.h b/drivers/network/tcpip/include/datagram.h similarity index 100% rename from reactos/drivers/network/tcpip/include/datagram.h rename to drivers/network/tcpip/include/datagram.h diff --git a/reactos/drivers/network/tcpip/include/debug.h b/drivers/network/tcpip/include/debug.h similarity index 100% rename from reactos/drivers/network/tcpip/include/debug.h rename to drivers/network/tcpip/include/debug.h diff --git a/reactos/drivers/network/tcpip/include/dispatch.h b/drivers/network/tcpip/include/dispatch.h similarity index 100% rename from reactos/drivers/network/tcpip/include/dispatch.h rename to drivers/network/tcpip/include/dispatch.h diff --git a/reactos/drivers/network/tcpip/include/fileobjs.h b/drivers/network/tcpip/include/fileobjs.h similarity index 100% rename from reactos/drivers/network/tcpip/include/fileobjs.h rename to drivers/network/tcpip/include/fileobjs.h diff --git a/reactos/drivers/network/tcpip/include/icmp.h b/drivers/network/tcpip/include/icmp.h similarity index 100% rename from reactos/drivers/network/tcpip/include/icmp.h rename to drivers/network/tcpip/include/icmp.h diff --git a/reactos/drivers/network/tcpip/include/info.h b/drivers/network/tcpip/include/info.h similarity index 100% rename from reactos/drivers/network/tcpip/include/info.h rename to drivers/network/tcpip/include/info.h diff --git a/reactos/drivers/network/tcpip/include/interface.h b/drivers/network/tcpip/include/interface.h similarity index 100% rename from reactos/drivers/network/tcpip/include/interface.h rename to drivers/network/tcpip/include/interface.h diff --git a/reactos/drivers/network/tcpip/include/ip.h b/drivers/network/tcpip/include/ip.h similarity index 100% rename from reactos/drivers/network/tcpip/include/ip.h rename to drivers/network/tcpip/include/ip.h diff --git a/reactos/drivers/network/tcpip/include/irp.h b/drivers/network/tcpip/include/irp.h similarity index 100% rename from reactos/drivers/network/tcpip/include/irp.h rename to drivers/network/tcpip/include/irp.h diff --git a/reactos/drivers/network/tcpip/include/lan.h b/drivers/network/tcpip/include/lan.h similarity index 100% rename from reactos/drivers/network/tcpip/include/lan.h rename to drivers/network/tcpip/include/lan.h diff --git a/reactos/drivers/network/tcpip/include/linux.h b/drivers/network/tcpip/include/linux.h similarity index 100% rename from reactos/drivers/network/tcpip/include/linux.h rename to drivers/network/tcpip/include/linux.h diff --git a/reactos/drivers/network/tcpip/include/lock.h b/drivers/network/tcpip/include/lock.h similarity index 100% rename from reactos/drivers/network/tcpip/include/lock.h rename to drivers/network/tcpip/include/lock.h diff --git a/reactos/drivers/network/tcpip/include/loopback.h b/drivers/network/tcpip/include/loopback.h similarity index 100% rename from reactos/drivers/network/tcpip/include/loopback.h rename to drivers/network/tcpip/include/loopback.h diff --git a/reactos/drivers/network/tcpip/include/memtrack.h b/drivers/network/tcpip/include/memtrack.h similarity index 100% rename from reactos/drivers/network/tcpip/include/memtrack.h rename to drivers/network/tcpip/include/memtrack.h diff --git a/reactos/drivers/network/tcpip/include/neighbor.h b/drivers/network/tcpip/include/neighbor.h similarity index 100% rename from reactos/drivers/network/tcpip/include/neighbor.h rename to drivers/network/tcpip/include/neighbor.h diff --git a/reactos/drivers/network/tcpip/include/pool.h b/drivers/network/tcpip/include/pool.h similarity index 100% rename from reactos/drivers/network/tcpip/include/pool.h rename to drivers/network/tcpip/include/pool.h diff --git a/reactos/drivers/network/tcpip/include/ports.h b/drivers/network/tcpip/include/ports.h similarity index 100% rename from reactos/drivers/network/tcpip/include/ports.h rename to drivers/network/tcpip/include/ports.h diff --git a/reactos/drivers/network/tcpip/include/precomp.h b/drivers/network/tcpip/include/precomp.h similarity index 100% rename from reactos/drivers/network/tcpip/include/precomp.h rename to drivers/network/tcpip/include/precomp.h diff --git a/reactos/drivers/network/tcpip/include/rawip.h b/drivers/network/tcpip/include/rawip.h similarity index 100% rename from reactos/drivers/network/tcpip/include/rawip.h rename to drivers/network/tcpip/include/rawip.h diff --git a/reactos/drivers/network/tcpip/include/receive.h b/drivers/network/tcpip/include/receive.h similarity index 100% rename from reactos/drivers/network/tcpip/include/receive.h rename to drivers/network/tcpip/include/receive.h diff --git a/reactos/drivers/network/tcpip/include/route.h b/drivers/network/tcpip/include/route.h similarity index 100% rename from reactos/drivers/network/tcpip/include/route.h rename to drivers/network/tcpip/include/route.h diff --git a/reactos/drivers/network/tcpip/include/router.h b/drivers/network/tcpip/include/router.h similarity index 100% rename from reactos/drivers/network/tcpip/include/router.h rename to drivers/network/tcpip/include/router.h diff --git a/reactos/drivers/network/tcpip/include/routines.h b/drivers/network/tcpip/include/routines.h similarity index 100% rename from reactos/drivers/network/tcpip/include/routines.h rename to drivers/network/tcpip/include/routines.h diff --git a/reactos/drivers/network/tcpip/include/tcp.h b/drivers/network/tcpip/include/tcp.h similarity index 100% rename from reactos/drivers/network/tcpip/include/tcp.h rename to drivers/network/tcpip/include/tcp.h diff --git a/reactos/drivers/network/tcpip/include/tcpcore.h b/drivers/network/tcpip/include/tcpcore.h similarity index 100% rename from reactos/drivers/network/tcpip/include/tcpcore.h rename to drivers/network/tcpip/include/tcpcore.h diff --git a/reactos/drivers/network/tcpip/include/tcpdef.h b/drivers/network/tcpip/include/tcpdef.h similarity index 100% rename from reactos/drivers/network/tcpip/include/tcpdef.h rename to drivers/network/tcpip/include/tcpdef.h diff --git a/reactos/drivers/network/tcpip/include/tcpip.h b/drivers/network/tcpip/include/tcpip.h similarity index 100% rename from reactos/drivers/network/tcpip/include/tcpip.h rename to drivers/network/tcpip/include/tcpip.h diff --git a/reactos/drivers/network/tcpip/include/ticonsts.h b/drivers/network/tcpip/include/ticonsts.h similarity index 100% rename from reactos/drivers/network/tcpip/include/ticonsts.h rename to drivers/network/tcpip/include/ticonsts.h diff --git a/reactos/drivers/network/tcpip/include/tilists.h b/drivers/network/tcpip/include/tilists.h similarity index 100% rename from reactos/drivers/network/tcpip/include/tilists.h rename to drivers/network/tcpip/include/tilists.h diff --git a/reactos/drivers/network/tcpip/include/titypes.h b/drivers/network/tcpip/include/titypes.h similarity index 100% rename from reactos/drivers/network/tcpip/include/titypes.h rename to drivers/network/tcpip/include/titypes.h diff --git a/reactos/drivers/network/tcpip/include/transmit.h b/drivers/network/tcpip/include/transmit.h similarity index 100% rename from reactos/drivers/network/tcpip/include/transmit.h rename to drivers/network/tcpip/include/transmit.h diff --git a/reactos/drivers/network/tcpip/include/udp.h b/drivers/network/tcpip/include/udp.h similarity index 100% rename from reactos/drivers/network/tcpip/include/udp.h rename to drivers/network/tcpip/include/udp.h diff --git a/reactos/drivers/network/tcpip/include/wait.h b/drivers/network/tcpip/include/wait.h similarity index 100% rename from reactos/drivers/network/tcpip/include/wait.h rename to drivers/network/tcpip/include/wait.h diff --git a/reactos/drivers/network/tcpip/notes.txt b/drivers/network/tcpip/notes.txt similarity index 100% rename from reactos/drivers/network/tcpip/notes.txt rename to drivers/network/tcpip/notes.txt diff --git a/reactos/drivers/network/tcpip/readme.txt b/drivers/network/tcpip/readme.txt similarity index 100% rename from reactos/drivers/network/tcpip/readme.txt rename to drivers/network/tcpip/readme.txt diff --git a/reactos/drivers/network/tcpip/recmutex/recmutex.c b/drivers/network/tcpip/recmutex/recmutex.c similarity index 100% rename from reactos/drivers/network/tcpip/recmutex/recmutex.c rename to drivers/network/tcpip/recmutex/recmutex.c diff --git a/reactos/drivers/network/tcpip/recmutex/recmutex.h b/drivers/network/tcpip/recmutex/recmutex.h similarity index 100% rename from reactos/drivers/network/tcpip/recmutex/recmutex.h rename to drivers/network/tcpip/recmutex/recmutex.h diff --git a/reactos/drivers/network/tcpip/tcpip.rbuild b/drivers/network/tcpip/tcpip.rbuild similarity index 100% rename from reactos/drivers/network/tcpip/tcpip.rbuild rename to drivers/network/tcpip/tcpip.rbuild diff --git a/reactos/drivers/network/tcpip/tcpip.rc b/drivers/network/tcpip/tcpip.rc similarity index 100% rename from reactos/drivers/network/tcpip/tcpip.rc rename to drivers/network/tcpip/tcpip.rc diff --git a/reactos/drivers/network/tcpip/tcpip.spec b/drivers/network/tcpip/tcpip.spec similarity index 100% rename from reactos/drivers/network/tcpip/tcpip.spec rename to drivers/network/tcpip/tcpip.spec diff --git a/reactos/drivers/network/tcpip/tcpip/SOURCES b/drivers/network/tcpip/tcpip/SOURCES similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/SOURCES rename to drivers/network/tcpip/tcpip/SOURCES diff --git a/reactos/drivers/network/tcpip/tcpip/buffer.c b/drivers/network/tcpip/tcpip/buffer.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/buffer.c rename to drivers/network/tcpip/tcpip/buffer.c diff --git a/reactos/drivers/network/tcpip/tcpip/bug.c b/drivers/network/tcpip/tcpip/bug.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/bug.c rename to drivers/network/tcpip/tcpip/bug.c diff --git a/reactos/drivers/network/tcpip/tcpip/dispatch.c b/drivers/network/tcpip/tcpip/dispatch.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/dispatch.c rename to drivers/network/tcpip/tcpip/dispatch.c diff --git a/reactos/drivers/network/tcpip/tcpip/fileobjs.c b/drivers/network/tcpip/tcpip/fileobjs.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/fileobjs.c rename to drivers/network/tcpip/tcpip/fileobjs.c diff --git a/reactos/drivers/network/tcpip/tcpip/iinfo.c b/drivers/network/tcpip/tcpip/iinfo.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/iinfo.c rename to drivers/network/tcpip/tcpip/iinfo.c diff --git a/reactos/drivers/network/tcpip/tcpip/info.c b/drivers/network/tcpip/tcpip/info.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/info.c rename to drivers/network/tcpip/tcpip/info.c diff --git a/reactos/drivers/network/tcpip/tcpip/irp.c b/drivers/network/tcpip/tcpip/irp.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/irp.c rename to drivers/network/tcpip/tcpip/irp.c diff --git a/reactos/drivers/network/tcpip/tcpip/lock.c b/drivers/network/tcpip/tcpip/lock.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/lock.c rename to drivers/network/tcpip/tcpip/lock.c diff --git a/reactos/drivers/network/tcpip/tcpip/main.c b/drivers/network/tcpip/tcpip/main.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/main.c rename to drivers/network/tcpip/tcpip/main.c diff --git a/reactos/drivers/network/tcpip/tcpip/mockbuffer.c b/drivers/network/tcpip/tcpip/mockbuffer.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/mockbuffer.c rename to drivers/network/tcpip/tcpip/mockbuffer.c diff --git a/reactos/drivers/network/tcpip/tcpip/mockbug.c b/drivers/network/tcpip/tcpip/mockbug.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/mockbug.c rename to drivers/network/tcpip/tcpip/mockbug.c diff --git a/reactos/drivers/network/tcpip/tcpip/mocklock.c b/drivers/network/tcpip/tcpip/mocklock.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/mocklock.c rename to drivers/network/tcpip/tcpip/mocklock.c diff --git a/reactos/drivers/network/tcpip/tcpip/mockpool.c b/drivers/network/tcpip/tcpip/mockpool.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/mockpool.c rename to drivers/network/tcpip/tcpip/mockpool.c diff --git a/reactos/drivers/network/tcpip/tcpip/mockwait.c b/drivers/network/tcpip/tcpip/mockwait.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/mockwait.c rename to drivers/network/tcpip/tcpip/mockwait.c diff --git a/reactos/drivers/network/tcpip/tcpip/ninfo.c b/drivers/network/tcpip/tcpip/ninfo.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/ninfo.c rename to drivers/network/tcpip/tcpip/ninfo.c diff --git a/reactos/drivers/network/tcpip/tcpip/pool.c b/drivers/network/tcpip/tcpip/pool.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/pool.c rename to drivers/network/tcpip/tcpip/pool.c diff --git a/reactos/drivers/network/tcpip/tcpip/proto.c b/drivers/network/tcpip/tcpip/proto.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/proto.c rename to drivers/network/tcpip/tcpip/proto.c diff --git a/reactos/drivers/network/tcpip/tcpip/resource.rc b/drivers/network/tcpip/tcpip/resource.rc similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/resource.rc rename to drivers/network/tcpip/tcpip/resource.rc diff --git a/reactos/drivers/network/tcpip/tcpip/tcpip.def b/drivers/network/tcpip/tcpip/tcpip.def similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/tcpip.def rename to drivers/network/tcpip/tcpip/tcpip.def diff --git a/reactos/drivers/network/tcpip/tcpip/tinfo.c b/drivers/network/tcpip/tcpip/tinfo.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/tinfo.c rename to drivers/network/tcpip/tcpip/tinfo.c diff --git a/reactos/drivers/network/tcpip/tcpip/wait.c b/drivers/network/tcpip/tcpip/wait.c similarity index 100% rename from reactos/drivers/network/tcpip/tcpip/wait.c rename to drivers/network/tcpip/tcpip/wait.c diff --git a/reactos/drivers/network/tcpip/tests/setup.c b/drivers/network/tcpip/tests/setup.c similarity index 100% rename from reactos/drivers/network/tcpip/tests/setup.c rename to drivers/network/tcpip/tests/setup.c diff --git a/reactos/drivers/network/tcpip/tests/stubs.tst b/drivers/network/tcpip/tests/stubs.tst similarity index 100% rename from reactos/drivers/network/tcpip/tests/stubs.tst rename to drivers/network/tcpip/tests/stubs.tst diff --git a/reactos/drivers/network/tcpip/tests/tests/ipreceive.c b/drivers/network/tcpip/tests/tests/ipreceive.c similarity index 100% rename from reactos/drivers/network/tcpip/tests/tests/ipreceive.c rename to drivers/network/tcpip/tests/tests/ipreceive.c diff --git a/reactos/drivers/network/tcpip/tests/tests/tigetprotocolnumber.c b/drivers/network/tcpip/tests/tests/tigetprotocolnumber.c similarity index 100% rename from reactos/drivers/network/tcpip/tests/tests/tigetprotocolnumber.c rename to drivers/network/tcpip/tests/tests/tigetprotocolnumber.c diff --git a/reactos/drivers/network/tdi/cte/string.c b/drivers/network/tdi/cte/string.c similarity index 100% rename from reactos/drivers/network/tdi/cte/string.c rename to drivers/network/tdi/cte/string.c diff --git a/reactos/drivers/network/tdi/cte/stubs.c b/drivers/network/tdi/cte/stubs.c similarity index 100% rename from reactos/drivers/network/tdi/cte/stubs.c rename to drivers/network/tdi/cte/stubs.c diff --git a/reactos/drivers/network/tdi/misc/main.c b/drivers/network/tdi/misc/main.c similarity index 100% rename from reactos/drivers/network/tdi/misc/main.c rename to drivers/network/tdi/misc/main.c diff --git a/reactos/drivers/network/tdi/misc/tdi.def b/drivers/network/tdi/misc/tdi.def similarity index 100% rename from reactos/drivers/network/tdi/misc/tdi.def rename to drivers/network/tdi/misc/tdi.def diff --git a/reactos/drivers/network/tdi/misc/tdi.rc b/drivers/network/tdi/misc/tdi.rc similarity index 100% rename from reactos/drivers/network/tdi/misc/tdi.rc rename to drivers/network/tdi/misc/tdi.rc diff --git a/reactos/drivers/network/tdi/tdi.rbuild b/drivers/network/tdi/tdi.rbuild similarity index 100% rename from reactos/drivers/network/tdi/tdi.rbuild rename to drivers/network/tdi/tdi.rbuild diff --git a/reactos/drivers/network/tdi/tdi/dereg.c b/drivers/network/tdi/tdi/dereg.c similarity index 100% rename from reactos/drivers/network/tdi/tdi/dereg.c rename to drivers/network/tdi/tdi/dereg.c diff --git a/reactos/drivers/network/tdi/tdi/handler.c b/drivers/network/tdi/tdi/handler.c similarity index 100% rename from reactos/drivers/network/tdi/tdi/handler.c rename to drivers/network/tdi/tdi/handler.c diff --git a/reactos/drivers/network/tdi/tdi/obsolete.c b/drivers/network/tdi/tdi/obsolete.c similarity index 100% rename from reactos/drivers/network/tdi/tdi/obsolete.c rename to drivers/network/tdi/tdi/obsolete.c diff --git a/reactos/drivers/network/tdi/tdi/stubs.c b/drivers/network/tdi/tdi/stubs.c similarity index 100% rename from reactos/drivers/network/tdi/tdi/stubs.c rename to drivers/network/tdi/tdi/stubs.c diff --git a/reactos/drivers/parallel/directory.rbuild b/drivers/parallel/directory.rbuild similarity index 100% rename from reactos/drivers/parallel/directory.rbuild rename to drivers/parallel/directory.rbuild diff --git a/reactos/drivers/parallel/parallel/parallel.c b/drivers/parallel/parallel/parallel.c similarity index 100% rename from reactos/drivers/parallel/parallel/parallel.c rename to drivers/parallel/parallel/parallel.c diff --git a/reactos/drivers/parallel/parallel/parallel.h b/drivers/parallel/parallel/parallel.h similarity index 100% rename from reactos/drivers/parallel/parallel/parallel.h rename to drivers/parallel/parallel/parallel.h diff --git a/reactos/drivers/parallel/parallel/parallel.rbuild b/drivers/parallel/parallel/parallel.rbuild similarity index 100% rename from reactos/drivers/parallel/parallel/parallel.rbuild rename to drivers/parallel/parallel/parallel.rbuild diff --git a/reactos/drivers/parallel/parallel/parallel.rc b/drivers/parallel/parallel/parallel.rc similarity index 100% rename from reactos/drivers/parallel/parallel/parallel.rc rename to drivers/parallel/parallel/parallel.rc diff --git a/reactos/drivers/serial/directory.rbuild b/drivers/serial/directory.rbuild similarity index 100% rename from reactos/drivers/serial/directory.rbuild rename to drivers/serial/directory.rbuild diff --git a/reactos/drivers/serial/serenum/detect.c b/drivers/serial/serenum/detect.c similarity index 100% rename from reactos/drivers/serial/serenum/detect.c rename to drivers/serial/serenum/detect.c diff --git a/reactos/drivers/serial/serenum/fdo.c b/drivers/serial/serenum/fdo.c similarity index 100% rename from reactos/drivers/serial/serenum/fdo.c rename to drivers/serial/serenum/fdo.c diff --git a/reactos/drivers/serial/serenum/misc.c b/drivers/serial/serenum/misc.c similarity index 100% rename from reactos/drivers/serial/serenum/misc.c rename to drivers/serial/serenum/misc.c diff --git a/reactos/drivers/serial/serenum/pdo.c b/drivers/serial/serenum/pdo.c similarity index 100% rename from reactos/drivers/serial/serenum/pdo.c rename to drivers/serial/serenum/pdo.c diff --git a/reactos/drivers/serial/serenum/serenum.c b/drivers/serial/serenum/serenum.c similarity index 100% rename from reactos/drivers/serial/serenum/serenum.c rename to drivers/serial/serenum/serenum.c diff --git a/reactos/drivers/serial/serenum/serenum.h b/drivers/serial/serenum/serenum.h similarity index 100% rename from reactos/drivers/serial/serenum/serenum.h rename to drivers/serial/serenum/serenum.h diff --git a/reactos/drivers/serial/serenum/serenum.rbuild b/drivers/serial/serenum/serenum.rbuild similarity index 100% rename from reactos/drivers/serial/serenum/serenum.rbuild rename to drivers/serial/serenum/serenum.rbuild diff --git a/reactos/drivers/serial/serenum/serenum.rc b/drivers/serial/serenum/serenum.rc similarity index 100% rename from reactos/drivers/serial/serenum/serenum.rc rename to drivers/serial/serenum/serenum.rc diff --git a/reactos/drivers/serial/serial/circularbuffer.c b/drivers/serial/serial/circularbuffer.c similarity index 100% rename from reactos/drivers/serial/serial/circularbuffer.c rename to drivers/serial/serial/circularbuffer.c diff --git a/reactos/drivers/serial/serial/cleanup.c b/drivers/serial/serial/cleanup.c similarity index 100% rename from reactos/drivers/serial/serial/cleanup.c rename to drivers/serial/serial/cleanup.c diff --git a/reactos/drivers/serial/serial/close.c b/drivers/serial/serial/close.c similarity index 100% rename from reactos/drivers/serial/serial/close.c rename to drivers/serial/serial/close.c diff --git a/reactos/drivers/serial/serial/create.c b/drivers/serial/serial/create.c similarity index 100% rename from reactos/drivers/serial/serial/create.c rename to drivers/serial/serial/create.c diff --git a/reactos/drivers/serial/serial/devctrl.c b/drivers/serial/serial/devctrl.c similarity index 100% rename from reactos/drivers/serial/serial/devctrl.c rename to drivers/serial/serial/devctrl.c diff --git a/reactos/drivers/serial/serial/info.c b/drivers/serial/serial/info.c similarity index 100% rename from reactos/drivers/serial/serial/info.c rename to drivers/serial/serial/info.c diff --git a/reactos/drivers/serial/serial/legacy.c b/drivers/serial/serial/legacy.c similarity index 100% rename from reactos/drivers/serial/serial/legacy.c rename to drivers/serial/serial/legacy.c diff --git a/reactos/drivers/serial/serial/misc.c b/drivers/serial/serial/misc.c similarity index 100% rename from reactos/drivers/serial/serial/misc.c rename to drivers/serial/serial/misc.c diff --git a/reactos/drivers/serial/serial/pnp.c b/drivers/serial/serial/pnp.c similarity index 100% rename from reactos/drivers/serial/serial/pnp.c rename to drivers/serial/serial/pnp.c diff --git a/reactos/drivers/serial/serial/power.c b/drivers/serial/serial/power.c similarity index 100% rename from reactos/drivers/serial/serial/power.c rename to drivers/serial/serial/power.c diff --git a/reactos/drivers/serial/serial/rw.c b/drivers/serial/serial/rw.c similarity index 100% rename from reactos/drivers/serial/serial/rw.c rename to drivers/serial/serial/rw.c diff --git a/reactos/drivers/serial/serial/serial.c b/drivers/serial/serial/serial.c similarity index 100% rename from reactos/drivers/serial/serial/serial.c rename to drivers/serial/serial/serial.c diff --git a/reactos/drivers/serial/serial/serial.h b/drivers/serial/serial/serial.h similarity index 100% rename from reactos/drivers/serial/serial/serial.h rename to drivers/serial/serial/serial.h diff --git a/reactos/drivers/serial/serial/serial.rbuild b/drivers/serial/serial/serial.rbuild similarity index 100% rename from reactos/drivers/serial/serial/serial.rbuild rename to drivers/serial/serial/serial.rbuild diff --git a/reactos/drivers/serial/serial/serial.rc b/drivers/serial/serial/serial.rc similarity index 100% rename from reactos/drivers/serial/serial/serial.rc rename to drivers/serial/serial/serial.rc diff --git a/reactos/drivers/setup/blue/blue.c b/drivers/setup/blue/blue.c similarity index 100% rename from reactos/drivers/setup/blue/blue.c rename to drivers/setup/blue/blue.c diff --git a/reactos/drivers/setup/blue/blue.h b/drivers/setup/blue/blue.h similarity index 100% rename from reactos/drivers/setup/blue/blue.h rename to drivers/setup/blue/blue.h diff --git a/reactos/drivers/setup/blue/blue.rbuild b/drivers/setup/blue/blue.rbuild similarity index 100% rename from reactos/drivers/setup/blue/blue.rbuild rename to drivers/setup/blue/blue.rbuild diff --git a/reactos/drivers/setup/blue/blue.rc b/drivers/setup/blue/blue.rc similarity index 100% rename from reactos/drivers/setup/blue/blue.rc rename to drivers/setup/blue/blue.rc diff --git a/reactos/drivers/setup/blue/font.c b/drivers/setup/blue/font.c similarity index 100% rename from reactos/drivers/setup/blue/font.c rename to drivers/setup/blue/font.c diff --git a/reactos/drivers/setup/directory.rbuild b/drivers/setup/directory.rbuild similarity index 100% rename from reactos/drivers/setup/directory.rbuild rename to drivers/setup/directory.rbuild diff --git a/reactos/drivers/storage/class/cdrom/cdrom.c b/drivers/storage/class/cdrom/cdrom.c similarity index 100% rename from reactos/drivers/storage/class/cdrom/cdrom.c rename to drivers/storage/class/cdrom/cdrom.c diff --git a/reactos/drivers/storage/class/cdrom/cdrom.rbuild b/drivers/storage/class/cdrom/cdrom.rbuild similarity index 100% rename from reactos/drivers/storage/class/cdrom/cdrom.rbuild rename to drivers/storage/class/cdrom/cdrom.rbuild diff --git a/reactos/drivers/storage/class/cdrom/cdrom.rc b/drivers/storage/class/cdrom/cdrom.rc similarity index 100% rename from reactos/drivers/storage/class/cdrom/cdrom.rc rename to drivers/storage/class/cdrom/cdrom.rc diff --git a/reactos/drivers/storage/class/cdrom/findscsi.c b/drivers/storage/class/cdrom/findscsi.c similarity index 100% rename from reactos/drivers/storage/class/cdrom/findscsi.c rename to drivers/storage/class/cdrom/findscsi.c diff --git a/reactos/drivers/storage/class/cdrom/license.txt b/drivers/storage/class/cdrom/license.txt similarity index 100% rename from reactos/drivers/storage/class/cdrom/license.txt rename to drivers/storage/class/cdrom/license.txt diff --git a/reactos/drivers/storage/class/class2/class2.c b/drivers/storage/class/class2/class2.c similarity index 100% rename from reactos/drivers/storage/class/class2/class2.c rename to drivers/storage/class/class2/class2.c diff --git a/reactos/drivers/storage/class/class2/class2.rbuild b/drivers/storage/class/class2/class2.rbuild similarity index 100% rename from reactos/drivers/storage/class/class2/class2.rbuild rename to drivers/storage/class/class2/class2.rbuild diff --git a/reactos/drivers/storage/class/class2/class2.rc b/drivers/storage/class/class2/class2.rc similarity index 100% rename from reactos/drivers/storage/class/class2/class2.rc rename to drivers/storage/class/class2/class2.rc diff --git a/reactos/drivers/storage/class/class2/class2.spec b/drivers/storage/class/class2/class2.spec similarity index 100% rename from reactos/drivers/storage/class/class2/class2.spec rename to drivers/storage/class/class2/class2.spec diff --git a/reactos/drivers/storage/class/class2/license.txt b/drivers/storage/class/class2/license.txt similarity index 100% rename from reactos/drivers/storage/class/class2/license.txt rename to drivers/storage/class/class2/license.txt diff --git a/reactos/drivers/storage/class/directory.rbuild b/drivers/storage/class/directory.rbuild similarity index 100% rename from reactos/drivers/storage/class/directory.rbuild rename to drivers/storage/class/directory.rbuild diff --git a/reactos/drivers/storage/class/disk/disk.c b/drivers/storage/class/disk/disk.c similarity index 100% rename from reactos/drivers/storage/class/disk/disk.c rename to drivers/storage/class/disk/disk.c diff --git a/reactos/drivers/storage/class/disk/disk.rbuild b/drivers/storage/class/disk/disk.rbuild similarity index 100% rename from reactos/drivers/storage/class/disk/disk.rbuild rename to drivers/storage/class/disk/disk.rbuild diff --git a/reactos/drivers/storage/class/disk/disk.rc b/drivers/storage/class/disk/disk.rc similarity index 100% rename from reactos/drivers/storage/class/disk/disk.rc rename to drivers/storage/class/disk/disk.rc diff --git a/reactos/drivers/storage/class/disk/license.txt b/drivers/storage/class/disk/license.txt similarity index 100% rename from reactos/drivers/storage/class/disk/license.txt rename to drivers/storage/class/disk/license.txt diff --git a/reactos/drivers/storage/class/include/class2.h b/drivers/storage/class/include/class2.h similarity index 100% rename from reactos/drivers/storage/class/include/class2.h rename to drivers/storage/class/include/class2.h diff --git a/reactos/drivers/storage/class/ramdisk/ramdisk.c b/drivers/storage/class/ramdisk/ramdisk.c similarity index 100% rename from reactos/drivers/storage/class/ramdisk/ramdisk.c rename to drivers/storage/class/ramdisk/ramdisk.c diff --git a/reactos/drivers/storage/class/ramdisk/ramdisk.rbuild b/drivers/storage/class/ramdisk/ramdisk.rbuild similarity index 100% rename from reactos/drivers/storage/class/ramdisk/ramdisk.rbuild rename to drivers/storage/class/ramdisk/ramdisk.rbuild diff --git a/reactos/drivers/storage/class/ramdisk/ramdisk.rc b/drivers/storage/class/ramdisk/ramdisk.rc similarity index 100% rename from reactos/drivers/storage/class/ramdisk/ramdisk.rc rename to drivers/storage/class/ramdisk/ramdisk.rc diff --git a/reactos/drivers/storage/directory.rbuild b/drivers/storage/directory.rbuild similarity index 100% rename from reactos/drivers/storage/directory.rbuild rename to drivers/storage/directory.rbuild diff --git a/reactos/drivers/storage/floppy/SOURCES b/drivers/storage/floppy/SOURCES similarity index 100% rename from reactos/drivers/storage/floppy/SOURCES rename to drivers/storage/floppy/SOURCES diff --git a/reactos/drivers/storage/floppy/csqrtns.c b/drivers/storage/floppy/csqrtns.c similarity index 100% rename from reactos/drivers/storage/floppy/csqrtns.c rename to drivers/storage/floppy/csqrtns.c diff --git a/reactos/drivers/storage/floppy/csqrtns.h b/drivers/storage/floppy/csqrtns.h similarity index 100% rename from reactos/drivers/storage/floppy/csqrtns.h rename to drivers/storage/floppy/csqrtns.h diff --git a/reactos/drivers/storage/floppy/floppy.c b/drivers/storage/floppy/floppy.c similarity index 100% rename from reactos/drivers/storage/floppy/floppy.c rename to drivers/storage/floppy/floppy.c diff --git a/reactos/drivers/storage/floppy/floppy.h b/drivers/storage/floppy/floppy.h similarity index 100% rename from reactos/drivers/storage/floppy/floppy.h rename to drivers/storage/floppy/floppy.h diff --git a/reactos/drivers/storage/floppy/floppy.rbuild b/drivers/storage/floppy/floppy.rbuild similarity index 100% rename from reactos/drivers/storage/floppy/floppy.rbuild rename to drivers/storage/floppy/floppy.rbuild diff --git a/reactos/drivers/storage/floppy/floppy.rc b/drivers/storage/floppy/floppy.rc similarity index 100% rename from reactos/drivers/storage/floppy/floppy.rc rename to drivers/storage/floppy/floppy.rc diff --git a/reactos/drivers/storage/floppy/hardware.c b/drivers/storage/floppy/hardware.c similarity index 100% rename from reactos/drivers/storage/floppy/hardware.c rename to drivers/storage/floppy/hardware.c diff --git a/reactos/drivers/storage/floppy/hardware.h b/drivers/storage/floppy/hardware.h similarity index 100% rename from reactos/drivers/storage/floppy/hardware.h rename to drivers/storage/floppy/hardware.h diff --git a/reactos/drivers/storage/floppy/ioctl.c b/drivers/storage/floppy/ioctl.c similarity index 100% rename from reactos/drivers/storage/floppy/ioctl.c rename to drivers/storage/floppy/ioctl.c diff --git a/reactos/drivers/storage/floppy/ioctl.h b/drivers/storage/floppy/ioctl.h similarity index 100% rename from reactos/drivers/storage/floppy/ioctl.h rename to drivers/storage/floppy/ioctl.h diff --git a/reactos/drivers/storage/floppy/readwrite.c b/drivers/storage/floppy/readwrite.c similarity index 100% rename from reactos/drivers/storage/floppy/readwrite.c rename to drivers/storage/floppy/readwrite.c diff --git a/reactos/drivers/storage/floppy/readwrite.h b/drivers/storage/floppy/readwrite.h similarity index 100% rename from reactos/drivers/storage/floppy/readwrite.h rename to drivers/storage/floppy/readwrite.h diff --git a/reactos/drivers/storage/ide/atapi/atapi.c b/drivers/storage/ide/atapi/atapi.c similarity index 100% rename from reactos/drivers/storage/ide/atapi/atapi.c rename to drivers/storage/ide/atapi/atapi.c diff --git a/reactos/drivers/storage/ide/atapi/atapi.h b/drivers/storage/ide/atapi/atapi.h similarity index 100% rename from reactos/drivers/storage/ide/atapi/atapi.h rename to drivers/storage/ide/atapi/atapi.h diff --git a/reactos/drivers/storage/ide/atapi/atapi.rbuild b/drivers/storage/ide/atapi/atapi.rbuild similarity index 100% rename from reactos/drivers/storage/ide/atapi/atapi.rbuild rename to drivers/storage/ide/atapi/atapi.rbuild diff --git a/reactos/drivers/storage/ide/atapi/atapi.rc b/drivers/storage/ide/atapi/atapi.rc similarity index 100% rename from reactos/drivers/storage/ide/atapi/atapi.rc rename to drivers/storage/ide/atapi/atapi.rc diff --git a/reactos/drivers/storage/ide/atapi/license.txt b/drivers/storage/ide/atapi/license.txt similarity index 100% rename from reactos/drivers/storage/ide/atapi/license.txt rename to drivers/storage/ide/atapi/license.txt diff --git a/reactos/drivers/storage/ide/directory.rbuild b/drivers/storage/ide/directory.rbuild similarity index 100% rename from reactos/drivers/storage/ide/directory.rbuild rename to drivers/storage/ide/directory.rbuild diff --git a/reactos/drivers/storage/ide/pciide/pciide.c b/drivers/storage/ide/pciide/pciide.c similarity index 100% rename from reactos/drivers/storage/ide/pciide/pciide.c rename to drivers/storage/ide/pciide/pciide.c diff --git a/reactos/drivers/storage/ide/pciide/pciide.h b/drivers/storage/ide/pciide/pciide.h similarity index 100% rename from reactos/drivers/storage/ide/pciide/pciide.h rename to drivers/storage/ide/pciide/pciide.h diff --git a/reactos/drivers/storage/ide/pciide/pciide.rbuild b/drivers/storage/ide/pciide/pciide.rbuild similarity index 100% rename from reactos/drivers/storage/ide/pciide/pciide.rbuild rename to drivers/storage/ide/pciide/pciide.rbuild diff --git a/reactos/drivers/storage/ide/pciide/pciide.rc b/drivers/storage/ide/pciide/pciide.rc similarity index 100% rename from reactos/drivers/storage/ide/pciide/pciide.rc rename to drivers/storage/ide/pciide/pciide.rc diff --git a/reactos/drivers/storage/ide/pciidex/fdo.c b/drivers/storage/ide/pciidex/fdo.c similarity index 100% rename from reactos/drivers/storage/ide/pciidex/fdo.c rename to drivers/storage/ide/pciidex/fdo.c diff --git a/reactos/drivers/storage/ide/pciidex/miniport.c b/drivers/storage/ide/pciidex/miniport.c similarity index 100% rename from reactos/drivers/storage/ide/pciidex/miniport.c rename to drivers/storage/ide/pciidex/miniport.c diff --git a/reactos/drivers/storage/ide/pciidex/misc.c b/drivers/storage/ide/pciidex/misc.c similarity index 100% rename from reactos/drivers/storage/ide/pciidex/misc.c rename to drivers/storage/ide/pciidex/misc.c diff --git a/reactos/drivers/storage/ide/pciidex/pciidex.c b/drivers/storage/ide/pciidex/pciidex.c similarity index 100% rename from reactos/drivers/storage/ide/pciidex/pciidex.c rename to drivers/storage/ide/pciidex/pciidex.c diff --git a/reactos/drivers/storage/ide/pciidex/pciidex.h b/drivers/storage/ide/pciidex/pciidex.h similarity index 100% rename from reactos/drivers/storage/ide/pciidex/pciidex.h rename to drivers/storage/ide/pciidex/pciidex.h diff --git a/reactos/drivers/storage/ide/pciidex/pciidex.rbuild b/drivers/storage/ide/pciidex/pciidex.rbuild similarity index 100% rename from reactos/drivers/storage/ide/pciidex/pciidex.rbuild rename to drivers/storage/ide/pciidex/pciidex.rbuild diff --git a/reactos/drivers/storage/ide/pciidex/pciidex.rc b/drivers/storage/ide/pciidex/pciidex.rc similarity index 100% rename from reactos/drivers/storage/ide/pciidex/pciidex.rc rename to drivers/storage/ide/pciidex/pciidex.rc diff --git a/reactos/drivers/storage/ide/pciidex/pciidex.spec b/drivers/storage/ide/pciidex/pciidex.spec similarity index 100% rename from reactos/drivers/storage/ide/pciidex/pciidex.spec rename to drivers/storage/ide/pciidex/pciidex.spec diff --git a/reactos/drivers/storage/ide/pciidex/pdo.c b/drivers/storage/ide/pciidex/pdo.c similarity index 100% rename from reactos/drivers/storage/ide/pciidex/pdo.c rename to drivers/storage/ide/pciidex/pdo.c diff --git a/reactos/drivers/storage/ide/uniata/atapi.h b/drivers/storage/ide/uniata/atapi.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/atapi.h rename to drivers/storage/ide/uniata/atapi.h diff --git a/reactos/drivers/storage/ide/uniata/badblock.h b/drivers/storage/ide/uniata/badblock.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/badblock.h rename to drivers/storage/ide/uniata/badblock.h diff --git a/reactos/drivers/storage/ide/uniata/bm_devs.h b/drivers/storage/ide/uniata/bm_devs.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/bm_devs.h rename to drivers/storage/ide/uniata/bm_devs.h diff --git a/reactos/drivers/storage/ide/uniata/bsmaster.h b/drivers/storage/ide/uniata/bsmaster.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/bsmaster.h rename to drivers/storage/ide/uniata/bsmaster.h diff --git a/reactos/drivers/storage/ide/uniata/config.h b/drivers/storage/ide/uniata/config.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/config.h rename to drivers/storage/ide/uniata/config.h diff --git a/reactos/drivers/storage/ide/uniata/id_ata.cpp b/drivers/storage/ide/uniata/id_ata.cpp similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_ata.cpp rename to drivers/storage/ide/uniata/id_ata.cpp diff --git a/reactos/drivers/storage/ide/uniata/id_badblock.cpp b/drivers/storage/ide/uniata/id_badblock.cpp similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_badblock.cpp rename to drivers/storage/ide/uniata/id_badblock.cpp diff --git a/reactos/drivers/storage/ide/uniata/id_dma.cpp b/drivers/storage/ide/uniata/id_dma.cpp similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_dma.cpp rename to drivers/storage/ide/uniata/id_dma.cpp diff --git a/reactos/drivers/storage/ide/uniata/id_init.cpp b/drivers/storage/ide/uniata/id_init.cpp similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_init.cpp rename to drivers/storage/ide/uniata/id_init.cpp diff --git a/reactos/drivers/storage/ide/uniata/id_probe.cpp b/drivers/storage/ide/uniata/id_probe.cpp similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_probe.cpp rename to drivers/storage/ide/uniata/id_probe.cpp diff --git a/reactos/drivers/storage/ide/uniata/id_queue.cpp b/drivers/storage/ide/uniata/id_queue.cpp similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_queue.cpp rename to drivers/storage/ide/uniata/id_queue.cpp diff --git a/reactos/drivers/storage/ide/uniata/id_queue.h b/drivers/storage/ide/uniata/id_queue.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_queue.h rename to drivers/storage/ide/uniata/id_queue.h diff --git a/reactos/drivers/storage/ide/uniata/id_sata.cpp b/drivers/storage/ide/uniata/id_sata.cpp similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_sata.cpp rename to drivers/storage/ide/uniata/id_sata.cpp diff --git a/reactos/drivers/storage/ide/uniata/id_sata.h b/drivers/storage/ide/uniata/id_sata.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/id_sata.h rename to drivers/storage/ide/uniata/id_sata.h diff --git a/reactos/drivers/storage/ide/uniata/idedma.def b/drivers/storage/ide/uniata/idedma.def similarity index 100% rename from reactos/drivers/storage/ide/uniata/idedma.def rename to drivers/storage/ide/uniata/idedma.def diff --git a/reactos/drivers/storage/ide/uniata/idedma.rc b/drivers/storage/ide/uniata/idedma.rc similarity index 100% rename from reactos/drivers/storage/ide/uniata/idedma.rc rename to drivers/storage/ide/uniata/idedma.rc diff --git a/reactos/drivers/storage/ide/uniata/inc/CrNtDecl.h b/drivers/storage/ide/uniata/inc/CrNtDecl.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/inc/CrNtDecl.h rename to drivers/storage/ide/uniata/inc/CrNtDecl.h diff --git a/reactos/drivers/storage/ide/uniata/inc/CrNtStubs.h b/drivers/storage/ide/uniata/inc/CrNtStubs.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/inc/CrNtStubs.h rename to drivers/storage/ide/uniata/inc/CrNtStubs.h diff --git a/reactos/drivers/storage/ide/uniata/inc/CrossNt.h b/drivers/storage/ide/uniata/inc/CrossNt.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/inc/CrossNt.h rename to drivers/storage/ide/uniata/inc/CrossNt.h diff --git a/reactos/drivers/storage/ide/uniata/inc/PostDbgMesg.h b/drivers/storage/ide/uniata/inc/PostDbgMesg.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/inc/PostDbgMesg.h rename to drivers/storage/ide/uniata/inc/PostDbgMesg.h diff --git a/reactos/drivers/storage/ide/uniata/inc/misc.h b/drivers/storage/ide/uniata/inc/misc.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/inc/misc.h rename to drivers/storage/ide/uniata/inc/misc.h diff --git a/reactos/drivers/storage/ide/uniata/inc/rwlock.h b/drivers/storage/ide/uniata/inc/rwlock.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/inc/rwlock.h rename to drivers/storage/ide/uniata/inc/rwlock.h diff --git a/reactos/drivers/storage/ide/uniata/ntddk_ex.h b/drivers/storage/ide/uniata/ntddk_ex.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/ntddk_ex.h rename to drivers/storage/ide/uniata/ntddk_ex.h diff --git a/reactos/drivers/storage/ide/uniata/ntddscsi.h b/drivers/storage/ide/uniata/ntddscsi.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/ntddscsi.h rename to drivers/storage/ide/uniata/ntddscsi.h diff --git a/reactos/drivers/storage/ide/uniata/ros_glue/ros_glue.cpp b/drivers/storage/ide/uniata/ros_glue/ros_glue.cpp similarity index 100% rename from reactos/drivers/storage/ide/uniata/ros_glue/ros_glue.cpp rename to drivers/storage/ide/uniata/ros_glue/ros_glue.cpp diff --git a/reactos/drivers/storage/ide/uniata/ros_glue/ros_glue_asm.s b/drivers/storage/ide/uniata/ros_glue/ros_glue_asm.s similarity index 100% rename from reactos/drivers/storage/ide/uniata/ros_glue/ros_glue_asm.s rename to drivers/storage/ide/uniata/ros_glue/ros_glue_asm.s diff --git a/reactos/drivers/storage/ide/uniata/scsi.h b/drivers/storage/ide/uniata/scsi.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/scsi.h rename to drivers/storage/ide/uniata/scsi.h diff --git a/reactos/drivers/storage/ide/uniata/srb.h b/drivers/storage/ide/uniata/srb.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/srb.h rename to drivers/storage/ide/uniata/srb.h diff --git a/reactos/drivers/storage/ide/uniata/stdafx.h b/drivers/storage/ide/uniata/stdafx.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/stdafx.h rename to drivers/storage/ide/uniata/stdafx.h diff --git a/reactos/drivers/storage/ide/uniata/tools.h b/drivers/storage/ide/uniata/tools.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/tools.h rename to drivers/storage/ide/uniata/tools.h diff --git a/reactos/drivers/storage/ide/uniata/uata_ctl.h b/drivers/storage/ide/uniata/uata_ctl.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/uata_ctl.h rename to drivers/storage/ide/uniata/uata_ctl.h diff --git a/reactos/drivers/storage/ide/uniata/uniata.rbuild b/drivers/storage/ide/uniata/uniata.rbuild similarity index 100% rename from reactos/drivers/storage/ide/uniata/uniata.rbuild rename to drivers/storage/ide/uniata/uniata.rbuild diff --git a/reactos/drivers/storage/ide/uniata/uniata_ver.h b/drivers/storage/ide/uniata/uniata_ver.h similarity index 100% rename from reactos/drivers/storage/ide/uniata/uniata_ver.h rename to drivers/storage/ide/uniata/uniata_ver.h diff --git a/reactos/drivers/storage/port/buslogic/BT958.bmf b/drivers/storage/port/buslogic/BT958.bmf similarity index 100% rename from reactos/drivers/storage/port/buslogic/BT958.bmf rename to drivers/storage/port/buslogic/BT958.bmf diff --git a/reactos/drivers/storage/port/buslogic/BT958.mof b/drivers/storage/port/buslogic/BT958.mof similarity index 100% rename from reactos/drivers/storage/port/buslogic/BT958.mof rename to drivers/storage/port/buslogic/BT958.mof diff --git a/reactos/drivers/storage/port/buslogic/BT958dt.h b/drivers/storage/port/buslogic/BT958dt.h similarity index 100% rename from reactos/drivers/storage/port/buslogic/BT958dt.h rename to drivers/storage/port/buslogic/BT958dt.h diff --git a/reactos/drivers/storage/port/buslogic/BusLogic958.c b/drivers/storage/port/buslogic/BusLogic958.c similarity index 100% rename from reactos/drivers/storage/port/buslogic/BusLogic958.c rename to drivers/storage/port/buslogic/BusLogic958.c diff --git a/reactos/drivers/storage/port/buslogic/BusLogic958.h b/drivers/storage/port/buslogic/BusLogic958.h similarity index 100% rename from reactos/drivers/storage/port/buslogic/BusLogic958.h rename to drivers/storage/port/buslogic/BusLogic958.h diff --git a/reactos/drivers/storage/port/buslogic/BusLogic958.rc b/drivers/storage/port/buslogic/BusLogic958.rc similarity index 100% rename from reactos/drivers/storage/port/buslogic/BusLogic958.rc rename to drivers/storage/port/buslogic/BusLogic958.rc diff --git a/reactos/drivers/storage/port/buslogic/Log.c b/drivers/storage/port/buslogic/Log.c similarity index 100% rename from reactos/drivers/storage/port/buslogic/Log.c rename to drivers/storage/port/buslogic/Log.c diff --git a/reactos/drivers/storage/port/buslogic/Log.h b/drivers/storage/port/buslogic/Log.h similarity index 100% rename from reactos/drivers/storage/port/buslogic/Log.h rename to drivers/storage/port/buslogic/Log.h diff --git a/reactos/drivers/storage/port/buslogic/README.ReactOS b/drivers/storage/port/buslogic/README.ReactOS similarity index 100% rename from reactos/drivers/storage/port/buslogic/README.ReactOS rename to drivers/storage/port/buslogic/README.ReactOS diff --git a/reactos/drivers/storage/port/buslogic/buslogic.rbuild b/drivers/storage/port/buslogic/buslogic.rbuild similarity index 100% rename from reactos/drivers/storage/port/buslogic/buslogic.rbuild rename to drivers/storage/port/buslogic/buslogic.rbuild diff --git a/reactos/drivers/storage/port/buslogic/makefile.inc b/drivers/storage/port/buslogic/makefile.inc similarity index 100% rename from reactos/drivers/storage/port/buslogic/makefile.inc rename to drivers/storage/port/buslogic/makefile.inc diff --git a/reactos/drivers/storage/port/buslogic/makefile.original b/drivers/storage/port/buslogic/makefile.original similarity index 100% rename from reactos/drivers/storage/port/buslogic/makefile.original rename to drivers/storage/port/buslogic/makefile.original diff --git a/reactos/drivers/storage/port/buslogic/resource.h b/drivers/storage/port/buslogic/resource.h similarity index 100% rename from reactos/drivers/storage/port/buslogic/resource.h rename to drivers/storage/port/buslogic/resource.h diff --git a/reactos/drivers/storage/port/buslogic/sources b/drivers/storage/port/buslogic/sources similarity index 100% rename from reactos/drivers/storage/port/buslogic/sources rename to drivers/storage/port/buslogic/sources diff --git a/reactos/drivers/storage/port/buslogic/wmi.c b/drivers/storage/port/buslogic/wmi.c similarity index 100% rename from reactos/drivers/storage/port/buslogic/wmi.c rename to drivers/storage/port/buslogic/wmi.c diff --git a/reactos/drivers/storage/port/directory.rbuild b/drivers/storage/port/directory.rbuild similarity index 100% rename from reactos/drivers/storage/port/directory.rbuild rename to drivers/storage/port/directory.rbuild diff --git a/reactos/drivers/storage/port/diskdump/diskdump.c b/drivers/storage/port/diskdump/diskdump.c similarity index 100% rename from reactos/drivers/storage/port/diskdump/diskdump.c rename to drivers/storage/port/diskdump/diskdump.c diff --git a/reactos/drivers/storage/port/diskdump/diskdump.rbuild b/drivers/storage/port/diskdump/diskdump.rbuild similarity index 100% rename from reactos/drivers/storage/port/diskdump/diskdump.rbuild rename to drivers/storage/port/diskdump/diskdump.rbuild diff --git a/reactos/drivers/storage/port/diskdump/diskdump.rc b/drivers/storage/port/diskdump/diskdump.rc similarity index 100% rename from reactos/drivers/storage/port/diskdump/diskdump.rc rename to drivers/storage/port/diskdump/diskdump.rc diff --git a/reactos/drivers/storage/port/diskdump/diskdump.spec b/drivers/storage/port/diskdump/diskdump.spec similarity index 100% rename from reactos/drivers/storage/port/diskdump/diskdump.spec rename to drivers/storage/port/diskdump/diskdump.spec diff --git a/reactos/drivers/storage/port/diskdump/diskdump_helper.S b/drivers/storage/port/diskdump/diskdump_helper.S similarity index 100% rename from reactos/drivers/storage/port/diskdump/diskdump_helper.S rename to drivers/storage/port/diskdump/diskdump_helper.S diff --git a/reactos/drivers/storage/scsiport/scsiport.c b/drivers/storage/scsiport/scsiport.c similarity index 100% rename from reactos/drivers/storage/scsiport/scsiport.c rename to drivers/storage/scsiport/scsiport.c diff --git a/reactos/drivers/storage/scsiport/scsiport.rbuild b/drivers/storage/scsiport/scsiport.rbuild similarity index 100% rename from reactos/drivers/storage/scsiport/scsiport.rbuild rename to drivers/storage/scsiport/scsiport.rbuild diff --git a/reactos/drivers/storage/scsiport/scsiport.rc b/drivers/storage/scsiport/scsiport.rc similarity index 100% rename from reactos/drivers/storage/scsiport/scsiport.rc rename to drivers/storage/scsiport/scsiport.rc diff --git a/reactos/drivers/storage/scsiport/scsiport.spec b/drivers/storage/scsiport/scsiport.spec similarity index 100% rename from reactos/drivers/storage/scsiport/scsiport.spec rename to drivers/storage/scsiport/scsiport.spec diff --git a/reactos/drivers/storage/scsiport/scsiport_int.h b/drivers/storage/scsiport/scsiport_int.h similarity index 100% rename from reactos/drivers/storage/scsiport/scsiport_int.h rename to drivers/storage/scsiport/scsiport_int.h diff --git a/reactos/drivers/usb/directory.rbuild b/drivers/usb/directory.rbuild similarity index 100% rename from reactos/drivers/usb/directory.rbuild rename to drivers/usb/directory.rbuild diff --git a/reactos/drivers/usb/nt4compat/directory.rbuild b/drivers/usb/nt4compat/directory.rbuild similarity index 100% rename from reactos/drivers/usb/nt4compat/directory.rbuild rename to drivers/usb/nt4compat/directory.rbuild diff --git a/reactos/drivers/usb/nt4compat/usbdriver/bulkonly.c b/drivers/usb/nt4compat/usbdriver/bulkonly.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/bulkonly.c rename to drivers/usb/nt4compat/usbdriver/bulkonly.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/cbi.c b/drivers/usb/nt4compat/usbdriver/cbi.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/cbi.c rename to drivers/usb/nt4compat/usbdriver/cbi.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c b/drivers/usb/nt4compat/usbdriver/compdrv.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/compdrv.c rename to drivers/usb/nt4compat/usbdriver/compdrv.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/debug.h b/drivers/usb/nt4compat/usbdriver/debug.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/debug.h rename to drivers/usb/nt4compat/usbdriver/debug.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c b/drivers/usb/nt4compat/usbdriver/devmgr.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/devmgr.c rename to drivers/usb/nt4compat/usbdriver/devmgr.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h b/drivers/usb/nt4compat/usbdriver/devmgr.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/devmgr.h rename to drivers/usb/nt4compat/usbdriver/devmgr.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/dmgrdisp.c b/drivers/usb/nt4compat/usbdriver/dmgrdisp.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/dmgrdisp.c rename to drivers/usb/nt4compat/usbdriver/dmgrdisp.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/ehci.c b/drivers/usb/nt4compat/usbdriver/ehci.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/ehci.c rename to drivers/usb/nt4compat/usbdriver/ehci.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/ehci.h b/drivers/usb/nt4compat/usbdriver/ehci.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/ehci.h rename to drivers/usb/nt4compat/usbdriver/ehci.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/etd.c b/drivers/usb/nt4compat/usbdriver/etd.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/etd.c rename to drivers/usb/nt4compat/usbdriver/etd.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/events.h b/drivers/usb/nt4compat/usbdriver/events.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/events.h rename to drivers/usb/nt4compat/usbdriver/events.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c b/drivers/usb/nt4compat/usbdriver/gendrv.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/gendrv.c rename to drivers/usb/nt4compat/usbdriver/gendrv.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/gendrv.h b/drivers/usb/nt4compat/usbdriver/gendrv.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/gendrv.h rename to drivers/usb/nt4compat/usbdriver/gendrv.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/hcd.h b/drivers/usb/nt4compat/usbdriver/hcd.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/hcd.h rename to drivers/usb/nt4compat/usbdriver/hcd.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/hub.c b/drivers/usb/nt4compat/usbdriver/hub.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/hub.c rename to drivers/usb/nt4compat/usbdriver/hub.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/hub.h b/drivers/usb/nt4compat/usbdriver/hub.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/hub.h rename to drivers/usb/nt4compat/usbdriver/hub.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/irplist.h b/drivers/usb/nt4compat/usbdriver/irplist.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/irplist.h rename to drivers/usb/nt4compat/usbdriver/irplist.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/mouse.c b/drivers/usb/nt4compat/usbdriver/mouse.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/mouse.c rename to drivers/usb/nt4compat/usbdriver/mouse.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/mouse.h b/drivers/usb/nt4compat/usbdriver/mouse.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/mouse.h rename to drivers/usb/nt4compat/usbdriver/mouse.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/ohci.c b/drivers/usb/nt4compat/usbdriver/ohci.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/ohci.c rename to drivers/usb/nt4compat/usbdriver/ohci.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/ohci.h b/drivers/usb/nt4compat/usbdriver/ohci.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/ohci.h rename to drivers/usb/nt4compat/usbdriver/ohci.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/roothub.c b/drivers/usb/nt4compat/usbdriver/roothub.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/roothub.c rename to drivers/usb/nt4compat/usbdriver/roothub.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/td.c b/drivers/usb/nt4compat/usbdriver/td.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/td.c rename to drivers/usb/nt4compat/usbdriver/td.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/td.h b/drivers/usb/nt4compat/usbdriver/td.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/td.h rename to drivers/usb/nt4compat/usbdriver/td.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/uhci.c b/drivers/usb/nt4compat/usbdriver/uhci.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/uhci.c rename to drivers/usb/nt4compat/usbdriver/uhci.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/uhciver.h b/drivers/usb/nt4compat/usbdriver/uhciver.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/uhciver.h rename to drivers/usb/nt4compat/usbdriver/uhciver.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/umss.c b/drivers/usb/nt4compat/usbdriver/umss.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/umss.c rename to drivers/usb/nt4compat/usbdriver/umss.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/umss.h b/drivers/usb/nt4compat/usbdriver/umss.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/umss.h rename to drivers/usb/nt4compat/usbdriver/umss.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/usb.c b/drivers/usb/nt4compat/usbdriver/usb.c similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/usb.c rename to drivers/usb/nt4compat/usbdriver/usb.c diff --git a/reactos/drivers/usb/nt4compat/usbdriver/usb.h b/drivers/usb/nt4compat/usbdriver/usb.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/usb.h rename to drivers/usb/nt4compat/usbdriver/usb.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/usbdriver.h b/drivers/usb/nt4compat/usbdriver/usbdriver.h similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/usbdriver.h rename to drivers/usb/nt4compat/usbdriver/usbdriver.h diff --git a/reactos/drivers/usb/nt4compat/usbdriver/usbdriver.rbuild b/drivers/usb/nt4compat/usbdriver/usbdriver.rbuild similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/usbdriver.rbuild rename to drivers/usb/nt4compat/usbdriver/usbdriver.rbuild diff --git a/reactos/drivers/usb/nt4compat/usbdriver/usbdriver.rc b/drivers/usb/nt4compat/usbdriver/usbdriver.rc similarity index 100% rename from reactos/drivers/usb/nt4compat/usbdriver/usbdriver.rc rename to drivers/usb/nt4compat/usbdriver/usbdriver.rc diff --git a/reactos/drivers/usb/usbd/test.c b/drivers/usb/usbd/test.c similarity index 100% rename from reactos/drivers/usb/usbd/test.c rename to drivers/usb/usbd/test.c diff --git a/reactos/drivers/usb/usbd/usbd.c b/drivers/usb/usbd/usbd.c similarity index 100% rename from reactos/drivers/usb/usbd/usbd.c rename to drivers/usb/usbd/usbd.c diff --git a/reactos/drivers/usb/usbd/usbd.rbuild b/drivers/usb/usbd/usbd.rbuild similarity index 100% rename from reactos/drivers/usb/usbd/usbd.rbuild rename to drivers/usb/usbd/usbd.rbuild diff --git a/reactos/drivers/usb/usbd/usbd.rc b/drivers/usb/usbd/usbd.rc similarity index 100% rename from reactos/drivers/usb/usbd/usbd.rc rename to drivers/usb/usbd/usbd.rc diff --git a/reactos/drivers/usb/usbd/usbd.spec b/drivers/usb/usbd/usbd.spec similarity index 100% rename from reactos/drivers/usb/usbd/usbd.spec rename to drivers/usb/usbd/usbd.spec diff --git a/reactos/drivers/usb/usbhub/createclose.c b/drivers/usb/usbhub/createclose.c similarity index 100% rename from reactos/drivers/usb/usbhub/createclose.c rename to drivers/usb/usbhub/createclose.c diff --git a/reactos/drivers/usb/usbhub/fdo.c b/drivers/usb/usbhub/fdo.c similarity index 100% rename from reactos/drivers/usb/usbhub/fdo.c rename to drivers/usb/usbhub/fdo.c diff --git a/reactos/drivers/usb/usbhub/misc.c b/drivers/usb/usbhub/misc.c similarity index 100% rename from reactos/drivers/usb/usbhub/misc.c rename to drivers/usb/usbhub/misc.c diff --git a/reactos/drivers/usb/usbhub/pdo.c b/drivers/usb/usbhub/pdo.c similarity index 100% rename from reactos/drivers/usb/usbhub/pdo.c rename to drivers/usb/usbhub/pdo.c diff --git a/reactos/drivers/usb/usbhub/usbhub.c b/drivers/usb/usbhub/usbhub.c similarity index 100% rename from reactos/drivers/usb/usbhub/usbhub.c rename to drivers/usb/usbhub/usbhub.c diff --git a/reactos/drivers/usb/usbhub/usbhub.h b/drivers/usb/usbhub/usbhub.h similarity index 100% rename from reactos/drivers/usb/usbhub/usbhub.h rename to drivers/usb/usbhub/usbhub.h diff --git a/reactos/drivers/usb/usbhub/usbhub.rbuild b/drivers/usb/usbhub/usbhub.rbuild similarity index 100% rename from reactos/drivers/usb/usbhub/usbhub.rbuild rename to drivers/usb/usbhub/usbhub.rbuild diff --git a/reactos/drivers/usb/usbhub/usbhub.rc b/drivers/usb/usbhub/usbhub.rc similarity index 100% rename from reactos/drivers/usb/usbhub/usbhub.rc rename to drivers/usb/usbhub/usbhub.rc diff --git a/reactos/drivers/usb/usbstor/usbstor.c b/drivers/usb/usbstor/usbstor.c similarity index 100% rename from reactos/drivers/usb/usbstor/usbstor.c rename to drivers/usb/usbstor/usbstor.c diff --git a/reactos/drivers/usb/usbstor/usbstor.h b/drivers/usb/usbstor/usbstor.h similarity index 100% rename from reactos/drivers/usb/usbstor/usbstor.h rename to drivers/usb/usbstor/usbstor.h diff --git a/reactos/drivers/usb/usbstor/usbstor.rbuild b/drivers/usb/usbstor/usbstor.rbuild similarity index 100% rename from reactos/drivers/usb/usbstor/usbstor.rbuild rename to drivers/usb/usbstor/usbstor.rbuild diff --git a/reactos/drivers/usb/usbstor/usbstor.rc b/drivers/usb/usbstor/usbstor.rc similarity index 100% rename from reactos/drivers/usb/usbstor/usbstor.rc rename to drivers/usb/usbstor/usbstor.rc diff --git a/reactos/drivers/video/directory.rbuild b/drivers/video/directory.rbuild similarity index 100% rename from reactos/drivers/video/directory.rbuild rename to drivers/video/directory.rbuild diff --git a/reactos/drivers/video/displays/directory.rbuild b/drivers/video/displays/directory.rbuild similarity index 100% rename from reactos/drivers/video/displays/directory.rbuild rename to drivers/video/displays/directory.rbuild diff --git a/reactos/drivers/video/displays/framebuf/dd.c b/drivers/video/displays/framebuf/dd.c similarity index 100% rename from reactos/drivers/video/displays/framebuf/dd.c rename to drivers/video/displays/framebuf/dd.c diff --git a/reactos/drivers/video/displays/framebuf/ddenable.c b/drivers/video/displays/framebuf/ddenable.c similarity index 100% rename from reactos/drivers/video/displays/framebuf/ddenable.c rename to drivers/video/displays/framebuf/ddenable.c diff --git a/reactos/drivers/video/displays/framebuf/enable.c b/drivers/video/displays/framebuf/enable.c similarity index 100% rename from reactos/drivers/video/displays/framebuf/enable.c rename to drivers/video/displays/framebuf/enable.c diff --git a/reactos/drivers/video/displays/framebuf/framebuf.h b/drivers/video/displays/framebuf/framebuf.h similarity index 100% rename from reactos/drivers/video/displays/framebuf/framebuf.h rename to drivers/video/displays/framebuf/framebuf.h diff --git a/reactos/drivers/video/displays/framebuf/framebuf.rbuild b/drivers/video/displays/framebuf/framebuf.rbuild similarity index 100% rename from reactos/drivers/video/displays/framebuf/framebuf.rbuild rename to drivers/video/displays/framebuf/framebuf.rbuild diff --git a/reactos/drivers/video/displays/framebuf/framebuf.rc b/drivers/video/displays/framebuf/framebuf.rc similarity index 100% rename from reactos/drivers/video/displays/framebuf/framebuf.rc rename to drivers/video/displays/framebuf/framebuf.rc diff --git a/reactos/drivers/video/displays/framebuf/framebuf.spec b/drivers/video/displays/framebuf/framebuf.spec similarity index 100% rename from reactos/drivers/video/displays/framebuf/framebuf.spec rename to drivers/video/displays/framebuf/framebuf.spec diff --git a/reactos/drivers/video/displays/framebuf/palette.c b/drivers/video/displays/framebuf/palette.c similarity index 100% rename from reactos/drivers/video/displays/framebuf/palette.c rename to drivers/video/displays/framebuf/palette.c diff --git a/reactos/drivers/video/displays/framebuf/pointer.c b/drivers/video/displays/framebuf/pointer.c similarity index 100% rename from reactos/drivers/video/displays/framebuf/pointer.c rename to drivers/video/displays/framebuf/pointer.c diff --git a/reactos/drivers/video/displays/framebuf/screen.c b/drivers/video/displays/framebuf/screen.c similarity index 100% rename from reactos/drivers/video/displays/framebuf/screen.c rename to drivers/video/displays/framebuf/screen.c diff --git a/reactos/drivers/video/displays/framebuf/surface.c b/drivers/video/displays/framebuf/surface.c similarity index 100% rename from reactos/drivers/video/displays/framebuf/surface.c rename to drivers/video/displays/framebuf/surface.c diff --git a/reactos/drivers/video/displays/framebufacc/dd.c b/drivers/video/displays/framebufacc/dd.c similarity index 100% rename from reactos/drivers/video/displays/framebufacc/dd.c rename to drivers/video/displays/framebufacc/dd.c diff --git a/reactos/drivers/video/displays/framebufacc/ddenable.c b/drivers/video/displays/framebufacc/ddenable.c similarity index 100% rename from reactos/drivers/video/displays/framebufacc/ddenable.c rename to drivers/video/displays/framebufacc/ddenable.c diff --git a/reactos/drivers/video/displays/framebufacc/enable.c b/drivers/video/displays/framebufacc/enable.c similarity index 100% rename from reactos/drivers/video/displays/framebufacc/enable.c rename to drivers/video/displays/framebufacc/enable.c diff --git a/reactos/drivers/video/displays/framebufacc/framebufacc.h b/drivers/video/displays/framebufacc/framebufacc.h similarity index 100% rename from reactos/drivers/video/displays/framebufacc/framebufacc.h rename to drivers/video/displays/framebufacc/framebufacc.h diff --git a/reactos/drivers/video/displays/framebufacc/framebufacc.rbuild b/drivers/video/displays/framebufacc/framebufacc.rbuild similarity index 100% rename from reactos/drivers/video/displays/framebufacc/framebufacc.rbuild rename to drivers/video/displays/framebufacc/framebufacc.rbuild diff --git a/reactos/drivers/video/displays/framebufacc/framebufacc.rc b/drivers/video/displays/framebufacc/framebufacc.rc similarity index 100% rename from reactos/drivers/video/displays/framebufacc/framebufacc.rc rename to drivers/video/displays/framebufacc/framebufacc.rc diff --git a/reactos/drivers/video/displays/framebufacc/framebufacc.spec b/drivers/video/displays/framebufacc/framebufacc.spec similarity index 100% rename from reactos/drivers/video/displays/framebufacc/framebufacc.spec rename to drivers/video/displays/framebufacc/framebufacc.spec diff --git a/reactos/drivers/video/displays/framebufacc/palette.c b/drivers/video/displays/framebufacc/palette.c similarity index 100% rename from reactos/drivers/video/displays/framebufacc/palette.c rename to drivers/video/displays/framebufacc/palette.c diff --git a/reactos/drivers/video/displays/framebufacc/pointer.c b/drivers/video/displays/framebufacc/pointer.c similarity index 100% rename from reactos/drivers/video/displays/framebufacc/pointer.c rename to drivers/video/displays/framebufacc/pointer.c diff --git a/reactos/drivers/video/displays/framebufacc/screen.c b/drivers/video/displays/framebufacc/screen.c similarity index 100% rename from reactos/drivers/video/displays/framebufacc/screen.c rename to drivers/video/displays/framebufacc/screen.c diff --git a/reactos/drivers/video/displays/framebufacc/surface.c b/drivers/video/displays/framebufacc/surface.c similarity index 100% rename from reactos/drivers/video/displays/framebufacc/surface.c rename to drivers/video/displays/framebufacc/surface.c diff --git a/reactos/drivers/video/displays/vga/main/enable.c b/drivers/video/displays/vga/main/enable.c similarity index 100% rename from reactos/drivers/video/displays/vga/main/enable.c rename to drivers/video/displays/vga/main/enable.c diff --git a/reactos/drivers/video/displays/vga/objects/bitblt.c b/drivers/video/displays/vga/objects/bitblt.c similarity index 100% rename from reactos/drivers/video/displays/vga/objects/bitblt.c rename to drivers/video/displays/vga/objects/bitblt.c diff --git a/reactos/drivers/video/displays/vga/objects/bitblt.h b/drivers/video/displays/vga/objects/bitblt.h similarity index 100% rename from reactos/drivers/video/displays/vga/objects/bitblt.h rename to drivers/video/displays/vga/objects/bitblt.h diff --git a/reactos/drivers/video/displays/vga/objects/brush.h b/drivers/video/displays/vga/objects/brush.h similarity index 100% rename from reactos/drivers/video/displays/vga/objects/brush.h rename to drivers/video/displays/vga/objects/brush.h diff --git a/reactos/drivers/video/displays/vga/objects/copybits.c b/drivers/video/displays/vga/objects/copybits.c similarity index 100% rename from reactos/drivers/video/displays/vga/objects/copybits.c rename to drivers/video/displays/vga/objects/copybits.c diff --git a/reactos/drivers/video/displays/vga/objects/lineto.c b/drivers/video/displays/vga/objects/lineto.c similarity index 100% rename from reactos/drivers/video/displays/vga/objects/lineto.c rename to drivers/video/displays/vga/objects/lineto.c diff --git a/reactos/drivers/video/displays/vga/objects/offscreen.c b/drivers/video/displays/vga/objects/offscreen.c similarity index 100% rename from reactos/drivers/video/displays/vga/objects/offscreen.c rename to drivers/video/displays/vga/objects/offscreen.c diff --git a/reactos/drivers/video/displays/vga/objects/paint.c b/drivers/video/displays/vga/objects/paint.c similarity index 100% rename from reactos/drivers/video/displays/vga/objects/paint.c rename to drivers/video/displays/vga/objects/paint.c diff --git a/reactos/drivers/video/displays/vga/objects/pointer.c b/drivers/video/displays/vga/objects/pointer.c similarity index 100% rename from reactos/drivers/video/displays/vga/objects/pointer.c rename to drivers/video/displays/vga/objects/pointer.c diff --git a/reactos/drivers/video/displays/vga/objects/screen.c b/drivers/video/displays/vga/objects/screen.c similarity index 100% rename from reactos/drivers/video/displays/vga/objects/screen.c rename to drivers/video/displays/vga/objects/screen.c diff --git a/reactos/drivers/video/displays/vga/objects/transblt.c b/drivers/video/displays/vga/objects/transblt.c similarity index 100% rename from reactos/drivers/video/displays/vga/objects/transblt.c rename to drivers/video/displays/vga/objects/transblt.c diff --git a/reactos/drivers/video/displays/vga/vgaddi.h b/drivers/video/displays/vga/vgaddi.h similarity index 100% rename from reactos/drivers/video/displays/vga/vgaddi.h rename to drivers/video/displays/vga/vgaddi.h diff --git a/reactos/drivers/video/displays/vga/vgaddi.rbuild b/drivers/video/displays/vga/vgaddi.rbuild similarity index 100% rename from reactos/drivers/video/displays/vga/vgaddi.rbuild rename to drivers/video/displays/vga/vgaddi.rbuild diff --git a/reactos/drivers/video/displays/vga/vgaddi.rc b/drivers/video/displays/vga/vgaddi.rc similarity index 100% rename from reactos/drivers/video/displays/vga/vgaddi.rc rename to drivers/video/displays/vga/vgaddi.rc diff --git a/reactos/drivers/video/displays/vga/vgaddi.spec b/drivers/video/displays/vga/vgaddi.spec similarity index 100% rename from reactos/drivers/video/displays/vga/vgaddi.spec rename to drivers/video/displays/vga/vgaddi.spec diff --git a/reactos/drivers/video/displays/vga/vgavideo/vgavideo.c b/drivers/video/displays/vga/vgavideo/vgavideo.c similarity index 100% rename from reactos/drivers/video/displays/vga/vgavideo/vgavideo.c rename to drivers/video/displays/vga/vgavideo/vgavideo.c diff --git a/reactos/drivers/video/displays/vga/vgavideo/vgavideo.h b/drivers/video/displays/vga/vgavideo/vgavideo.h similarity index 100% rename from reactos/drivers/video/displays/vga/vgavideo/vgavideo.h rename to drivers/video/displays/vga/vgavideo/vgavideo.h diff --git a/reactos/drivers/video/miniport/directory.rbuild b/drivers/video/miniport/directory.rbuild similarity index 100% rename from reactos/drivers/video/miniport/directory.rbuild rename to drivers/video/miniport/directory.rbuild diff --git a/reactos/drivers/video/miniport/vbe/edid.c b/drivers/video/miniport/vbe/edid.c similarity index 100% rename from reactos/drivers/video/miniport/vbe/edid.c rename to drivers/video/miniport/vbe/edid.c diff --git a/reactos/drivers/video/miniport/vbe/vbemp.c b/drivers/video/miniport/vbe/vbemp.c similarity index 100% rename from reactos/drivers/video/miniport/vbe/vbemp.c rename to drivers/video/miniport/vbe/vbemp.c diff --git a/reactos/drivers/video/miniport/vbe/vbemp.h b/drivers/video/miniport/vbe/vbemp.h similarity index 100% rename from reactos/drivers/video/miniport/vbe/vbemp.h rename to drivers/video/miniport/vbe/vbemp.h diff --git a/reactos/drivers/video/miniport/vbe/vbemp.rbuild b/drivers/video/miniport/vbe/vbemp.rbuild similarity index 100% rename from reactos/drivers/video/miniport/vbe/vbemp.rbuild rename to drivers/video/miniport/vbe/vbemp.rbuild diff --git a/reactos/drivers/video/miniport/vbe/vbemp.rc b/drivers/video/miniport/vbe/vbemp.rc similarity index 100% rename from reactos/drivers/video/miniport/vbe/vbemp.rc rename to drivers/video/miniport/vbe/vbemp.rc diff --git a/reactos/drivers/video/miniport/vga/initvga.c b/drivers/video/miniport/vga/initvga.c similarity index 100% rename from reactos/drivers/video/miniport/vga/initvga.c rename to drivers/video/miniport/vga/initvga.c diff --git a/reactos/drivers/video/miniport/vga/vgamp.c b/drivers/video/miniport/vga/vgamp.c similarity index 100% rename from reactos/drivers/video/miniport/vga/vgamp.c rename to drivers/video/miniport/vga/vgamp.c diff --git a/reactos/drivers/video/miniport/vga/vgamp.h b/drivers/video/miniport/vga/vgamp.h similarity index 100% rename from reactos/drivers/video/miniport/vga/vgamp.h rename to drivers/video/miniport/vga/vgamp.h diff --git a/reactos/drivers/video/miniport/vga/vgamp.rbuild b/drivers/video/miniport/vga/vgamp.rbuild similarity index 100% rename from reactos/drivers/video/miniport/vga/vgamp.rbuild rename to drivers/video/miniport/vga/vgamp.rbuild diff --git a/reactos/drivers/video/miniport/vga/vgamp.rc b/drivers/video/miniport/vga/vgamp.rc similarity index 100% rename from reactos/drivers/video/miniport/vga/vgamp.rc rename to drivers/video/miniport/vga/vgamp.rc diff --git a/reactos/drivers/video/miniport/vga/vgavideo.h b/drivers/video/miniport/vga/vgavideo.h similarity index 100% rename from reactos/drivers/video/miniport/vga/vgavideo.h rename to drivers/video/miniport/vga/vgavideo.h diff --git a/reactos/drivers/video/miniport/xboxvmp/xboxvmp.c b/drivers/video/miniport/xboxvmp/xboxvmp.c similarity index 100% rename from reactos/drivers/video/miniport/xboxvmp/xboxvmp.c rename to drivers/video/miniport/xboxvmp/xboxvmp.c diff --git a/reactos/drivers/video/miniport/xboxvmp/xboxvmp.h b/drivers/video/miniport/xboxvmp/xboxvmp.h similarity index 100% rename from reactos/drivers/video/miniport/xboxvmp/xboxvmp.h rename to drivers/video/miniport/xboxvmp/xboxvmp.h diff --git a/reactos/drivers/video/miniport/xboxvmp/xboxvmp.rbuild b/drivers/video/miniport/xboxvmp/xboxvmp.rbuild similarity index 100% rename from reactos/drivers/video/miniport/xboxvmp/xboxvmp.rbuild rename to drivers/video/miniport/xboxvmp/xboxvmp.rbuild diff --git a/reactos/drivers/video/miniport/xboxvmp/xboxvmp.rc b/drivers/video/miniport/xboxvmp/xboxvmp.rc similarity index 100% rename from reactos/drivers/video/miniport/xboxvmp/xboxvmp.rc rename to drivers/video/miniport/xboxvmp/xboxvmp.rc diff --git a/reactos/drivers/video/videoprt/agp.c b/drivers/video/videoprt/agp.c similarity index 100% rename from reactos/drivers/video/videoprt/agp.c rename to drivers/video/videoprt/agp.c diff --git a/reactos/drivers/video/videoprt/ddc.c b/drivers/video/videoprt/ddc.c similarity index 100% rename from reactos/drivers/video/videoprt/ddc.c rename to drivers/video/videoprt/ddc.c diff --git a/reactos/drivers/video/videoprt/dispatch.c b/drivers/video/videoprt/dispatch.c similarity index 100% rename from reactos/drivers/video/videoprt/dispatch.c rename to drivers/video/videoprt/dispatch.c diff --git a/reactos/drivers/video/videoprt/dma.c b/drivers/video/videoprt/dma.c similarity index 100% rename from reactos/drivers/video/videoprt/dma.c rename to drivers/video/videoprt/dma.c diff --git a/reactos/drivers/video/videoprt/event.c b/drivers/video/videoprt/event.c similarity index 100% rename from reactos/drivers/video/videoprt/event.c rename to drivers/video/videoprt/event.c diff --git a/reactos/drivers/video/videoprt/funclist.c b/drivers/video/videoprt/funclist.c similarity index 100% rename from reactos/drivers/video/videoprt/funclist.c rename to drivers/video/videoprt/funclist.c diff --git a/reactos/drivers/video/videoprt/int10.c b/drivers/video/videoprt/int10.c similarity index 100% rename from reactos/drivers/video/videoprt/int10.c rename to drivers/video/videoprt/int10.c diff --git a/reactos/drivers/video/videoprt/interrupt.c b/drivers/video/videoprt/interrupt.c similarity index 100% rename from reactos/drivers/video/videoprt/interrupt.c rename to drivers/video/videoprt/interrupt.c diff --git a/reactos/drivers/video/videoprt/resource.c b/drivers/video/videoprt/resource.c similarity index 100% rename from reactos/drivers/video/videoprt/resource.c rename to drivers/video/videoprt/resource.c diff --git a/reactos/drivers/video/videoprt/services.c b/drivers/video/videoprt/services.c similarity index 100% rename from reactos/drivers/video/videoprt/services.c rename to drivers/video/videoprt/services.c diff --git a/reactos/drivers/video/videoprt/spinlock.c b/drivers/video/videoprt/spinlock.c similarity index 100% rename from reactos/drivers/video/videoprt/spinlock.c rename to drivers/video/videoprt/spinlock.c diff --git a/reactos/drivers/video/videoprt/timer.c b/drivers/video/videoprt/timer.c similarity index 100% rename from reactos/drivers/video/videoprt/timer.c rename to drivers/video/videoprt/timer.c diff --git a/reactos/drivers/video/videoprt/videoprt.c b/drivers/video/videoprt/videoprt.c similarity index 100% rename from reactos/drivers/video/videoprt/videoprt.c rename to drivers/video/videoprt/videoprt.c diff --git a/reactos/drivers/video/videoprt/videoprt.h b/drivers/video/videoprt/videoprt.h similarity index 100% rename from reactos/drivers/video/videoprt/videoprt.h rename to drivers/video/videoprt/videoprt.h diff --git a/reactos/drivers/video/videoprt/videoprt.rbuild b/drivers/video/videoprt/videoprt.rbuild similarity index 100% rename from reactos/drivers/video/videoprt/videoprt.rbuild rename to drivers/video/videoprt/videoprt.rbuild diff --git a/reactos/drivers/video/videoprt/videoprt.rc b/drivers/video/videoprt/videoprt.rc similarity index 100% rename from reactos/drivers/video/videoprt/videoprt.rc rename to drivers/video/videoprt/videoprt.rc diff --git a/reactos/drivers/video/videoprt/videoprt.spec b/drivers/video/videoprt/videoprt.spec similarity index 100% rename from reactos/drivers/video/videoprt/videoprt.spec rename to drivers/video/videoprt/videoprt.spec diff --git a/reactos/drivers/wdm/audio/backpln/directory.rbuild b/drivers/wdm/audio/backpln/directory.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/backpln/directory.rbuild rename to drivers/wdm/audio/backpln/directory.rbuild diff --git a/reactos/drivers/wdm/audio/backpln/portcls/Miniport.cpp b/drivers/wdm/audio/backpln/portcls/Miniport.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/Miniport.cpp rename to drivers/wdm/audio/backpln/portcls/Miniport.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/MiniportDMus.cpp b/drivers/wdm/audio/backpln/portcls/MiniportDMus.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/MiniportDMus.cpp rename to drivers/wdm/audio/backpln/portcls/MiniportDMus.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/MiniportMidi.cpp b/drivers/wdm/audio/backpln/portcls/MiniportMidi.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/MiniportMidi.cpp rename to drivers/wdm/audio/backpln/portcls/MiniportMidi.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/MiniportTopology.cpp b/drivers/wdm/audio/backpln/portcls/MiniportTopology.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/MiniportTopology.cpp rename to drivers/wdm/audio/backpln/portcls/MiniportTopology.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/MiniportWaveCyclic.cpp b/drivers/wdm/audio/backpln/portcls/MiniportWaveCyclic.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/MiniportWaveCyclic.cpp rename to drivers/wdm/audio/backpln/portcls/MiniportWaveCyclic.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/MiniportWavePci.cpp b/drivers/wdm/audio/backpln/portcls/MiniportWavePci.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/MiniportWavePci.cpp rename to drivers/wdm/audio/backpln/portcls/MiniportWavePci.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/Port.cpp b/drivers/wdm/audio/backpln/portcls/Port.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/Port.cpp rename to drivers/wdm/audio/backpln/portcls/Port.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/PortDMus.cpp b/drivers/wdm/audio/backpln/portcls/PortDMus.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/PortDMus.cpp rename to drivers/wdm/audio/backpln/portcls/PortDMus.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/PortMidi.cpp b/drivers/wdm/audio/backpln/portcls/PortMidi.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/PortMidi.cpp rename to drivers/wdm/audio/backpln/portcls/PortMidi.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/PortTopology.cpp b/drivers/wdm/audio/backpln/portcls/PortTopology.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/PortTopology.cpp rename to drivers/wdm/audio/backpln/portcls/PortTopology.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/PortWaveCyclic.cpp b/drivers/wdm/audio/backpln/portcls/PortWaveCyclic.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/PortWaveCyclic.cpp rename to drivers/wdm/audio/backpln/portcls/PortWaveCyclic.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/PortWavePci.cpp b/drivers/wdm/audio/backpln/portcls/PortWavePci.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/PortWavePci.cpp rename to drivers/wdm/audio/backpln/portcls/PortWavePci.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/ResourceList.c b/drivers/wdm/audio/backpln/portcls/ResourceList.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/ResourceList.c rename to drivers/wdm/audio/backpln/portcls/ResourceList.c diff --git a/reactos/drivers/wdm/audio/backpln/portcls/adapter.c b/drivers/wdm/audio/backpln/portcls/adapter.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/adapter.c rename to drivers/wdm/audio/backpln/portcls/adapter.c diff --git a/reactos/drivers/wdm/audio/backpln/portcls/dll.c b/drivers/wdm/audio/backpln/portcls/dll.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/dll.c rename to drivers/wdm/audio/backpln/portcls/dll.c diff --git a/reactos/drivers/wdm/audio/backpln/portcls/drm.c b/drivers/wdm/audio/backpln/portcls/drm.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/drm.c rename to drivers/wdm/audio/backpln/portcls/drm.c diff --git a/reactos/drivers/wdm/audio/backpln/portcls/irp.c b/drivers/wdm/audio/backpln/portcls/irp.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/irp.c rename to drivers/wdm/audio/backpln/portcls/irp.c diff --git a/reactos/drivers/wdm/audio/backpln/portcls/miniport_factory.cpp b/drivers/wdm/audio/backpln/portcls/miniport_factory.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/miniport_factory.cpp rename to drivers/wdm/audio/backpln/portcls/miniport_factory.cpp diff --git a/reactos/drivers/wdm/audio/backpln/portcls/port.h b/drivers/wdm/audio/backpln/portcls/port.h similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/port.h rename to drivers/wdm/audio/backpln/portcls/port.h diff --git a/reactos/drivers/wdm/audio/backpln/portcls/port_factory.c b/drivers/wdm/audio/backpln/portcls/port_factory.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/port_factory.c rename to drivers/wdm/audio/backpln/portcls/port_factory.c diff --git a/reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild b/drivers/wdm/audio/backpln/portcls/portcls.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/portcls.rbuild rename to drivers/wdm/audio/backpln/portcls/portcls.rbuild diff --git a/reactos/drivers/multimedia/portcls.NEW/portcls.rc b/drivers/wdm/audio/backpln/portcls/portcls.rc similarity index 100% rename from reactos/drivers/multimedia/portcls.NEW/portcls.rc rename to drivers/wdm/audio/backpln/portcls/portcls.rc diff --git a/reactos/drivers/wdm/audio/backpln/portcls/portcls.spec b/drivers/wdm/audio/backpln/portcls/portcls.spec similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/portcls.spec rename to drivers/wdm/audio/backpln/portcls/portcls.spec diff --git a/reactos/drivers/wdm/audio/backpln/portcls/private.h b/drivers/wdm/audio/backpln/portcls/private.h similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/private.h rename to drivers/wdm/audio/backpln/portcls/private.h diff --git a/reactos/drivers/wdm/audio/backpln/portcls/stubs.c b/drivers/wdm/audio/backpln/portcls/stubs.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/stubs.c rename to drivers/wdm/audio/backpln/portcls/stubs.c diff --git a/reactos/drivers/wdm/audio/backpln/portcls/undoc.c b/drivers/wdm/audio/backpln/portcls/undoc.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/portcls/undoc.c rename to drivers/wdm/audio/backpln/portcls/undoc.c diff --git a/reactos/drivers/wdm/audio/backpln/stdunk/stdunk.c b/drivers/wdm/audio/backpln/stdunk/stdunk.c similarity index 100% rename from reactos/drivers/wdm/audio/backpln/stdunk/stdunk.c rename to drivers/wdm/audio/backpln/stdunk/stdunk.c diff --git a/reactos/drivers/wdm/audio/backpln/stdunk/stdunk.cpp b/drivers/wdm/audio/backpln/stdunk/stdunk.cpp similarity index 100% rename from reactos/drivers/wdm/audio/backpln/stdunk/stdunk.cpp rename to drivers/wdm/audio/backpln/stdunk/stdunk.cpp diff --git a/reactos/drivers/wdm/audio/directory.rbuild b/drivers/wdm/audio/directory.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/directory.rbuild rename to drivers/wdm/audio/directory.rbuild diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/CHANGELOG.txt b/drivers/wdm/audio/drivers/CMIDriver/CHANGELOG.txt similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/CHANGELOG.txt rename to drivers/wdm/audio/drivers/CMIDriver/CHANGELOG.txt diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/CM8738-x32-WaveRT.inf b/drivers/wdm/audio/drivers/CMIDriver/CM8738-x32-WaveRT.inf similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/CM8738-x32-WaveRT.inf rename to drivers/wdm/audio/drivers/CMIDriver/CM8738-x32-WaveRT.inf diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/CM8738-x32.inf b/drivers/wdm/audio/drivers/CMIDriver/CM8738-x32.inf similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/CM8738-x32.inf rename to drivers/wdm/audio/drivers/CMIDriver/CM8738-x32.inf diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/CM8738-x64-WaveRT.inf b/drivers/wdm/audio/drivers/CMIDriver/CM8738-x64-WaveRT.inf similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/CM8738-x64-WaveRT.inf rename to drivers/wdm/audio/drivers/CMIDriver/CM8738-x64-WaveRT.inf diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/CM8738-x64.inf b/drivers/wdm/audio/drivers/CMIDriver/CM8738-x64.inf similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/CM8738-x64.inf rename to drivers/wdm/audio/drivers/CMIDriver/CM8738-x64.inf diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/HowToBuild.txt b/drivers/wdm/audio/drivers/CMIDriver/HowToBuild.txt similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/HowToBuild.txt rename to drivers/wdm/audio/drivers/CMIDriver/HowToBuild.txt diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.cpp b/drivers/wdm/audio/drivers/CMIDriver/adapter.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.cpp rename to drivers/wdm/audio/drivers/CMIDriver/adapter.cpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.hpp b/drivers/wdm/audio/drivers/CMIDriver/adapter.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/adapter.hpp rename to drivers/wdm/audio/drivers/CMIDriver/adapter.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/build-all.bat b/drivers/wdm/audio/drivers/CMIDriver/build-all.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/build-all.bat rename to drivers/wdm/audio/drivers/CMIDriver/build-all.bat diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/build-release-x64-WaveRT.bat b/drivers/wdm/audio/drivers/CMIDriver/build-release-x64-WaveRT.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/build-release-x64-WaveRT.bat rename to drivers/wdm/audio/drivers/CMIDriver/build-release-x64-WaveRT.bat diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/build-release-x64.bat b/drivers/wdm/audio/drivers/CMIDriver/build-release-x64.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/build-release-x64.bat rename to drivers/wdm/audio/drivers/CMIDriver/build-release-x64.bat diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/build-release-x86-WaveRT.bat b/drivers/wdm/audio/drivers/CMIDriver/build-release-x86-WaveRT.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/build-release-x86-WaveRT.bat rename to drivers/wdm/audio/drivers/CMIDriver/build-release-x86-WaveRT.bat diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/build-release-x86.bat b/drivers/wdm/audio/drivers/CMIDriver/build-release-x86.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/build-release-x86.bat rename to drivers/wdm/audio/drivers/CMIDriver/build-release-x86.bat diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/main.cpp b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/main.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/main.cpp rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/main.cpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/main.h b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/main.h similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/main.h rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/main.h diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/makefile b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/makefile similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/makefile rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/makefile diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/resource.h b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/resource.h similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/resource.h rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/resource.h diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/sources b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/sources similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/sources rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/sources diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.aps b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.aps similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.aps rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.aps diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico-license.txt b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico-license.txt similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico-license.txt rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.ico-license.txt diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.rc b/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.rc similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.rc rename to drivers/wdm/audio/drivers/CMIDriver/cmicontrol/window.rc diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmipci.rc b/drivers/wdm/audio/drivers/CMIDriver/cmipci.rc similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmipci.rc rename to drivers/wdm/audio/drivers/CMIDriver/cmipci.rc diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cmireg.hpp b/drivers/wdm/audio/drivers/CMIDriver/cmireg.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cmireg.hpp rename to drivers/wdm/audio/drivers/CMIDriver/cmireg.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/common.cpp b/drivers/wdm/audio/drivers/CMIDriver/common.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/common.cpp rename to drivers/wdm/audio/drivers/CMIDriver/common.cpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/common.hpp b/drivers/wdm/audio/drivers/CMIDriver/common.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/common.hpp rename to drivers/wdm/audio/drivers/CMIDriver/common.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.cpp b/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.cpp rename to drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.cpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.def b/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.def similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.def rename to drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.def diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.rc b/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.rc similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.rc rename to drivers/wdm/audio/drivers/CMIDriver/cpl/cmicpl.rc diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/makefile b/drivers/wdm/audio/drivers/CMIDriver/cpl/makefile similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/makefile rename to drivers/wdm/audio/drivers/CMIDriver/cpl/makefile diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/resource.h b/drivers/wdm/audio/drivers/CMIDriver/cpl/resource.h similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/resource.h rename to drivers/wdm/audio/drivers/CMIDriver/cpl/resource.h diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/sources b/drivers/wdm/audio/drivers/CMIDriver/cpl/sources similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/cpl/sources rename to drivers/wdm/audio/drivers/CMIDriver/cpl/sources diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/debug.hpp b/drivers/wdm/audio/drivers/CMIDriver/debug.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/debug.hpp rename to drivers/wdm/audio/drivers/CMIDriver/debug.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/distclean.bat b/drivers/wdm/audio/drivers/CMIDriver/distclean.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/distclean.bat rename to drivers/wdm/audio/drivers/CMIDriver/distclean.bat diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/envars.bat b/drivers/wdm/audio/drivers/CMIDriver/envars.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/envars.bat rename to drivers/wdm/audio/drivers/CMIDriver/envars.bat diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/installer/main.cpp b/drivers/wdm/audio/drivers/CMIDriver/installer/main.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/installer/main.cpp rename to drivers/wdm/audio/drivers/CMIDriver/installer/main.cpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/installer/main.h b/drivers/wdm/audio/drivers/CMIDriver/installer/main.h similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/installer/main.h rename to drivers/wdm/audio/drivers/CMIDriver/installer/main.h diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/installer/makefile b/drivers/wdm/audio/drivers/CMIDriver/installer/makefile similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/installer/makefile rename to drivers/wdm/audio/drivers/CMIDriver/installer/makefile diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/installer/resource.h b/drivers/wdm/audio/drivers/CMIDriver/installer/resource.h similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/installer/resource.h rename to drivers/wdm/audio/drivers/CMIDriver/installer/resource.h diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/installer/sources b/drivers/wdm/audio/drivers/CMIDriver/installer/sources similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/installer/sources rename to drivers/wdm/audio/drivers/CMIDriver/installer/sources diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/installer/window.rc b/drivers/wdm/audio/drivers/CMIDriver/installer/window.rc similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/installer/window.rc rename to drivers/wdm/audio/drivers/CMIDriver/installer/window.rc diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/interfaces.hpp b/drivers/wdm/audio/drivers/CMIDriver/interfaces.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/interfaces.hpp rename to drivers/wdm/audio/drivers/CMIDriver/interfaces.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/make.bat b/drivers/wdm/audio/drivers/CMIDriver/make.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/make.bat rename to drivers/wdm/audio/drivers/CMIDriver/make.bat diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/makefile b/drivers/wdm/audio/drivers/CMIDriver/makefile similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/makefile rename to drivers/wdm/audio/drivers/CMIDriver/makefile diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.cpp b/drivers/wdm/audio/drivers/CMIDriver/mintopo.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.cpp rename to drivers/wdm/audio/drivers/CMIDriver/mintopo.cpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.hpp b/drivers/wdm/audio/drivers/CMIDriver/mintopo.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/mintopo.hpp rename to drivers/wdm/audio/drivers/CMIDriver/mintopo.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/mintopotables.hpp b/drivers/wdm/audio/drivers/CMIDriver/mintopotables.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/mintopotables.hpp rename to drivers/wdm/audio/drivers/CMIDriver/mintopotables.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.cpp b/drivers/wdm/audio/drivers/CMIDriver/minwave.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.cpp rename to drivers/wdm/audio/drivers/CMIDriver/minwave.cpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.hpp b/drivers/wdm/audio/drivers/CMIDriver/minwave.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/minwave.hpp rename to drivers/wdm/audio/drivers/CMIDriver/minwave.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/minwavetables.hpp b/drivers/wdm/audio/drivers/CMIDriver/minwavetables.hpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/minwavetables.hpp rename to drivers/wdm/audio/drivers/CMIDriver/minwavetables.hpp diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/property.h b/drivers/wdm/audio/drivers/CMIDriver/property.h similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/property.h rename to drivers/wdm/audio/drivers/CMIDriver/property.h diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/sources b/drivers/wdm/audio/drivers/CMIDriver/sources similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/sources rename to drivers/wdm/audio/drivers/CMIDriver/sources diff --git a/reactos/drivers/wdm/audio/drivers/CMIDriver/update.bat b/drivers/wdm/audio/drivers/CMIDriver/update.bat similarity index 100% rename from reactos/drivers/wdm/audio/drivers/CMIDriver/update.bat rename to drivers/wdm/audio/drivers/CMIDriver/update.bat diff --git a/reactos/drivers/wdm/audio/drivers/directory.rbuild b/drivers/wdm/audio/drivers/directory.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/drivers/directory.rbuild rename to drivers/wdm/audio/drivers/directory.rbuild diff --git a/reactos/drivers/wdm/audio/drivers/mpu401/adapter.cpp b/drivers/wdm/audio/drivers/mpu401/adapter.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/mpu401/adapter.cpp rename to drivers/wdm/audio/drivers/mpu401/adapter.cpp diff --git a/reactos/drivers/wdm/audio/drivers/mpu401/mpu401.rbuild b/drivers/wdm/audio/drivers/mpu401/mpu401.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/drivers/mpu401/mpu401.rbuild rename to drivers/wdm/audio/drivers/mpu401/mpu401.rbuild diff --git a/reactos/drivers/wdm/audio/drivers/mpu401/mpu401.rc b/drivers/wdm/audio/drivers/mpu401/mpu401.rc similarity index 100% rename from reactos/drivers/wdm/audio/drivers/mpu401/mpu401.rc rename to drivers/wdm/audio/drivers/mpu401/mpu401.rc diff --git a/reactos/drivers/wdm/audio/drivers/sb16/adapter.cpp b/drivers/wdm/audio/drivers/sb16/adapter.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/sb16/adapter.cpp rename to drivers/wdm/audio/drivers/sb16/adapter.cpp diff --git a/reactos/drivers/wdm/audio/drivers/sb16/main.cpp b/drivers/wdm/audio/drivers/sb16/main.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/sb16/main.cpp rename to drivers/wdm/audio/drivers/sb16/main.cpp diff --git a/reactos/drivers/wdm/audio/drivers/sb16/sb16.h b/drivers/wdm/audio/drivers/sb16/sb16.h similarity index 100% rename from reactos/drivers/wdm/audio/drivers/sb16/sb16.h rename to drivers/wdm/audio/drivers/sb16/sb16.h diff --git a/reactos/drivers/wdm/audio/drivers/sb16/sb16.rbuild b/drivers/wdm/audio/drivers/sb16/sb16.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/drivers/sb16/sb16.rbuild rename to drivers/wdm/audio/drivers/sb16/sb16.rbuild diff --git a/reactos/drivers/wdm/audio/drivers/sb16/stdunk.cpp b/drivers/wdm/audio/drivers/sb16/stdunk.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drivers/sb16/stdunk.cpp rename to drivers/wdm/audio/drivers/sb16/stdunk.cpp diff --git a/reactos/drivers/wdm/audio/drm/directory.rbuild b/drivers/wdm/audio/drm/directory.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/drm/directory.rbuild rename to drivers/wdm/audio/drm/directory.rbuild diff --git a/reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild b/drivers/wdm/audio/drm/drmk/drmk.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/drm/drmk/drmk.rbuild rename to drivers/wdm/audio/drm/drmk/drmk.rbuild diff --git a/reactos/drivers/wdm/audio/drm/drmk/drmk.rc b/drivers/wdm/audio/drm/drmk/drmk.rc similarity index 100% rename from reactos/drivers/wdm/audio/drm/drmk/drmk.rc rename to drivers/wdm/audio/drm/drmk/drmk.rc diff --git a/reactos/drivers/wdm/audio/drm/drmk/drmk.spec b/drivers/wdm/audio/drm/drmk/drmk.spec similarity index 100% rename from reactos/drivers/wdm/audio/drm/drmk/drmk.spec rename to drivers/wdm/audio/drm/drmk/drmk.spec diff --git a/reactos/drivers/wdm/audio/drm/drmk/stubs.cpp b/drivers/wdm/audio/drm/drmk/stubs.cpp similarity index 100% rename from reactos/drivers/wdm/audio/drm/drmk/stubs.cpp rename to drivers/wdm/audio/drm/drmk/stubs.cpp diff --git a/reactos/drivers/wdm/audio/legacy/directory.rbuild b/drivers/wdm/audio/legacy/directory.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/legacy/directory.rbuild rename to drivers/wdm/audio/legacy/directory.rbuild diff --git a/reactos/drivers/wdm/audio/legacy/wdmaud/entry.c b/drivers/wdm/audio/legacy/wdmaud/entry.c similarity index 100% rename from reactos/drivers/wdm/audio/legacy/wdmaud/entry.c rename to drivers/wdm/audio/legacy/wdmaud/entry.c diff --git a/reactos/drivers/wdm/audio/legacy/wdmaud/wdmaud.rbuild b/drivers/wdm/audio/legacy/wdmaud/wdmaud.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/legacy/wdmaud/wdmaud.rbuild rename to drivers/wdm/audio/legacy/wdmaud/wdmaud.rbuild diff --git a/reactos/drivers/wdm/audio/sysaudio/main.c b/drivers/wdm/audio/sysaudio/main.c similarity index 100% rename from reactos/drivers/wdm/audio/sysaudio/main.c rename to drivers/wdm/audio/sysaudio/main.c diff --git a/reactos/drivers/wdm/audio/sysaudio/sysaudio.rbuild b/drivers/wdm/audio/sysaudio/sysaudio.rbuild similarity index 100% rename from reactos/drivers/wdm/audio/sysaudio/sysaudio.rbuild rename to drivers/wdm/audio/sysaudio/sysaudio.rbuild diff --git a/reactos/drivers/wdm/audio/sysaudio/sysaudio.rc b/drivers/wdm/audio/sysaudio/sysaudio.rc similarity index 100% rename from reactos/drivers/wdm/audio/sysaudio/sysaudio.rc rename to drivers/wdm/audio/sysaudio/sysaudio.rc diff --git a/reactos/drivers/wdm/wdm.rbuild b/drivers/wdm/wdm.rbuild similarity index 100% rename from reactos/drivers/wdm/wdm.rbuild rename to drivers/wdm/wdm.rbuild diff --git a/reactos/drivers/wmi/wmilib.c b/drivers/wmi/wmilib.c similarity index 100% rename from reactos/drivers/wmi/wmilib.c rename to drivers/wmi/wmilib.c diff --git a/reactos/drivers/wmi/wmilib.rbuild b/drivers/wmi/wmilib.rbuild similarity index 100% rename from reactos/drivers/wmi/wmilib.rbuild rename to drivers/wmi/wmilib.rbuild diff --git a/reactos/drivers/wmi/wmilib.rc b/drivers/wmi/wmilib.rc similarity index 100% rename from reactos/drivers/wmi/wmilib.rc rename to drivers/wmi/wmilib.rc diff --git a/reactos/drivers/wmi/wmilib.spec b/drivers/wmi/wmilib.spec similarity index 100% rename from reactos/drivers/wmi/wmilib.spec rename to drivers/wmi/wmilib.spec diff --git a/reactos/hal/hal.rbuild b/hal/hal.rbuild similarity index 100% rename from reactos/hal/hal.rbuild rename to hal/hal.rbuild diff --git a/reactos/hal/hal/hal.c b/hal/hal/hal.c similarity index 100% rename from reactos/hal/hal/hal.c rename to hal/hal/hal.c diff --git a/reactos/hal/hal/hal.rbuild b/hal/hal/hal.rbuild similarity index 100% rename from reactos/hal/hal/hal.rbuild rename to hal/hal/hal.rbuild diff --git a/reactos/hal/hal/hal.rc b/hal/hal/hal.rc similarity index 100% rename from reactos/hal/hal/hal.rc rename to hal/hal/hal.rc diff --git a/reactos/hal/hal/hal.spec b/hal/hal/hal.spec similarity index 100% rename from reactos/hal/hal/hal.spec rename to hal/hal/hal.spec diff --git a/reactos/hal/halarm/directory.rbuild b/hal/halarm/directory.rbuild similarity index 100% rename from reactos/hal/halarm/directory.rbuild rename to hal/halarm/directory.rbuild diff --git a/reactos/hal/halarm/generic/generic.rbuild b/hal/halarm/generic/generic.rbuild similarity index 100% rename from reactos/hal/halarm/generic/generic.rbuild rename to hal/halarm/generic/generic.rbuild diff --git a/reactos/hal/halarm/generic/hal.c b/hal/halarm/generic/hal.c similarity index 100% rename from reactos/hal/halarm/generic/hal.c rename to hal/halarm/generic/hal.c diff --git a/reactos/hal/halarm/include/hal.h b/hal/halarm/include/hal.h similarity index 100% rename from reactos/hal/halarm/include/hal.h rename to hal/halarm/include/hal.h diff --git a/reactos/hal/halarm/include/halp.h b/hal/halarm/include/halp.h similarity index 100% rename from reactos/hal/halarm/include/halp.h rename to hal/halarm/include/halp.h diff --git a/reactos/hal/halarm/up/halinit_up.c b/hal/halarm/up/halinit_up.c similarity index 100% rename from reactos/hal/halarm/up/halinit_up.c rename to hal/halarm/up/halinit_up.c diff --git a/reactos/hal/halarm/up/halup.rbuild b/hal/halarm/up/halup.rbuild similarity index 100% rename from reactos/hal/halarm/up/halup.rbuild rename to hal/halarm/up/halup.rbuild diff --git a/reactos/hal/halarm/up/halup.rc b/hal/halarm/up/halup.rc similarity index 100% rename from reactos/hal/halarm/up/halup.rc rename to hal/halarm/up/halup.rc diff --git a/reactos/hal/halppc/directory.rbuild b/hal/halppc/directory.rbuild similarity index 100% rename from reactos/hal/halppc/directory.rbuild rename to hal/halppc/directory.rbuild diff --git a/reactos/hal/halppc/generic/beep.c b/hal/halppc/generic/beep.c similarity index 100% rename from reactos/hal/halppc/generic/beep.c rename to hal/halppc/generic/beep.c diff --git a/reactos/hal/halppc/generic/bus.c b/hal/halppc/generic/bus.c similarity index 100% rename from reactos/hal/halppc/generic/bus.c rename to hal/halppc/generic/bus.c diff --git a/reactos/hal/halppc/generic/cmos.c b/hal/halppc/generic/cmos.c similarity index 100% rename from reactos/hal/halppc/generic/cmos.c rename to hal/halppc/generic/cmos.c diff --git a/reactos/hal/halppc/generic/display.c b/hal/halppc/generic/display.c similarity index 100% rename from reactos/hal/halppc/generic/display.c rename to hal/halppc/generic/display.c diff --git a/reactos/hal/halppc/generic/dma.c b/hal/halppc/generic/dma.c similarity index 100% rename from reactos/hal/halppc/generic/dma.c rename to hal/halppc/generic/dma.c diff --git a/reactos/hal/halppc/generic/drive.c b/hal/halppc/generic/drive.c similarity index 100% rename from reactos/hal/halppc/generic/drive.c rename to hal/halppc/generic/drive.c diff --git a/reactos/hal/halppc/generic/enum.c b/hal/halppc/generic/enum.c similarity index 100% rename from reactos/hal/halppc/generic/enum.c rename to hal/halppc/generic/enum.c diff --git a/reactos/hal/halppc/generic/fmutex.c b/hal/halppc/generic/fmutex.c similarity index 100% rename from reactos/hal/halppc/generic/fmutex.c rename to hal/halppc/generic/fmutex.c diff --git a/reactos/hal/halppc/generic/font.c b/hal/halppc/generic/font.c similarity index 100% rename from reactos/hal/halppc/generic/font.c rename to hal/halppc/generic/font.c diff --git a/reactos/hal/halppc/generic/generic.rbuild b/hal/halppc/generic/generic.rbuild similarity index 100% rename from reactos/hal/halppc/generic/generic.rbuild rename to hal/halppc/generic/generic.rbuild diff --git a/reactos/hal/halppc/generic/halinit.c b/hal/halppc/generic/halinit.c similarity index 100% rename from reactos/hal/halppc/generic/halinit.c rename to hal/halppc/generic/halinit.c diff --git a/reactos/hal/halppc/generic/irql.c b/hal/halppc/generic/irql.c similarity index 100% rename from reactos/hal/halppc/generic/irql.c rename to hal/halppc/generic/irql.c diff --git a/reactos/hal/halppc/generic/isa.c b/hal/halppc/generic/isa.c similarity index 100% rename from reactos/hal/halppc/generic/isa.c rename to hal/halppc/generic/isa.c diff --git a/reactos/hal/halppc/generic/misc.c b/hal/halppc/generic/misc.c similarity index 100% rename from reactos/hal/halppc/generic/misc.c rename to hal/halppc/generic/misc.c diff --git a/reactos/hal/halppc/generic/pci.c b/hal/halppc/generic/pci.c similarity index 100% rename from reactos/hal/halppc/generic/pci.c rename to hal/halppc/generic/pci.c diff --git a/reactos/hal/halppc/generic/portio.c b/hal/halppc/generic/portio.c similarity index 100% rename from reactos/hal/halppc/generic/portio.c rename to hal/halppc/generic/portio.c diff --git a/reactos/hal/halppc/generic/processor.c b/hal/halppc/generic/processor.c similarity index 100% rename from reactos/hal/halppc/generic/processor.c rename to hal/halppc/generic/processor.c diff --git a/reactos/hal/halppc/generic/profil.c b/hal/halppc/generic/profil.c similarity index 100% rename from reactos/hal/halppc/generic/profil.c rename to hal/halppc/generic/profil.c diff --git a/reactos/hal/halppc/generic/reboot.c b/hal/halppc/generic/reboot.c similarity index 100% rename from reactos/hal/halppc/generic/reboot.c rename to hal/halppc/generic/reboot.c diff --git a/reactos/hal/halppc/generic/spinlock.c b/hal/halppc/generic/spinlock.c similarity index 100% rename from reactos/hal/halppc/generic/spinlock.c rename to hal/halppc/generic/spinlock.c diff --git a/reactos/hal/halppc/generic/sysinfo.c b/hal/halppc/generic/sysinfo.c similarity index 100% rename from reactos/hal/halppc/generic/sysinfo.c rename to hal/halppc/generic/sysinfo.c diff --git a/reactos/hal/halppc/generic/timer.c b/hal/halppc/generic/timer.c similarity index 100% rename from reactos/hal/halppc/generic/timer.c rename to hal/halppc/generic/timer.c diff --git a/reactos/hal/halppc/include/apic.h b/hal/halppc/include/apic.h similarity index 100% rename from reactos/hal/halppc/include/apic.h rename to hal/halppc/include/apic.h diff --git a/reactos/hal/halppc/include/bus.h b/hal/halppc/include/bus.h similarity index 100% rename from reactos/hal/halppc/include/bus.h rename to hal/halppc/include/bus.h diff --git a/reactos/hal/halppc/include/hal.h b/hal/halppc/include/hal.h similarity index 100% rename from reactos/hal/halppc/include/hal.h rename to hal/halppc/include/hal.h diff --git a/reactos/hal/halppc/include/haldma.h b/hal/halppc/include/haldma.h similarity index 100% rename from reactos/hal/halppc/include/haldma.h rename to hal/halppc/include/haldma.h diff --git a/reactos/hal/halppc/include/halirq.h b/hal/halppc/include/halirq.h similarity index 100% rename from reactos/hal/halppc/include/halirq.h rename to hal/halppc/include/halirq.h diff --git a/reactos/hal/halppc/include/halp.h b/hal/halppc/include/halp.h similarity index 100% rename from reactos/hal/halppc/include/halp.h rename to hal/halppc/include/halp.h diff --git a/reactos/hal/halppc/include/ioapic.h b/hal/halppc/include/ioapic.h similarity index 100% rename from reactos/hal/halppc/include/ioapic.h rename to hal/halppc/include/ioapic.h diff --git a/reactos/hal/halppc/include/mps.h b/hal/halppc/include/mps.h similarity index 100% rename from reactos/hal/halppc/include/mps.h rename to hal/halppc/include/mps.h diff --git a/reactos/hal/halppc/up/halinit_up.c b/hal/halppc/up/halinit_up.c similarity index 100% rename from reactos/hal/halppc/up/halinit_up.c rename to hal/halppc/up/halinit_up.c diff --git a/reactos/hal/halppc/up/halup.rbuild b/hal/halppc/up/halup.rbuild similarity index 100% rename from reactos/hal/halppc/up/halup.rbuild rename to hal/halppc/up/halup.rbuild diff --git a/reactos/hal/halppc/up/halup.rc b/hal/halppc/up/halup.rc similarity index 100% rename from reactos/hal/halppc/up/halup.rc rename to hal/halppc/up/halup.rc diff --git a/reactos/hal/halx86/generic/beep.c b/hal/halx86/generic/beep.c similarity index 100% rename from reactos/hal/halx86/generic/beep.c rename to hal/halx86/generic/beep.c diff --git a/reactos/hal/halx86/generic/bios.c b/hal/halx86/generic/bios.c similarity index 100% rename from reactos/hal/halx86/generic/bios.c rename to hal/halx86/generic/bios.c diff --git a/reactos/hal/halx86/generic/bus.c b/hal/halx86/generic/bus.c similarity index 100% rename from reactos/hal/halx86/generic/bus.c rename to hal/halx86/generic/bus.c diff --git a/reactos/hal/halx86/generic/cmos.c b/hal/halx86/generic/cmos.c similarity index 100% rename from reactos/hal/halx86/generic/cmos.c rename to hal/halx86/generic/cmos.c diff --git a/reactos/hal/halx86/generic/display.c b/hal/halx86/generic/display.c similarity index 100% rename from reactos/hal/halx86/generic/display.c rename to hal/halx86/generic/display.c diff --git a/reactos/hal/halx86/generic/dma.c b/hal/halx86/generic/dma.c similarity index 100% rename from reactos/hal/halx86/generic/dma.c rename to hal/halx86/generic/dma.c diff --git a/reactos/hal/halx86/generic/drive.c b/hal/halx86/generic/drive.c similarity index 100% rename from reactos/hal/halx86/generic/drive.c rename to hal/halx86/generic/drive.c diff --git a/reactos/hal/halx86/generic/generic.rbuild b/hal/halx86/generic/generic.rbuild similarity index 100% rename from reactos/hal/halx86/generic/generic.rbuild rename to hal/halx86/generic/generic.rbuild diff --git a/reactos/hal/halx86/generic/halinit.c b/hal/halx86/generic/halinit.c similarity index 100% rename from reactos/hal/halx86/generic/halinit.c rename to hal/halx86/generic/halinit.c diff --git a/reactos/hal/halx86/generic/irq.S b/hal/halx86/generic/irq.S similarity index 100% rename from reactos/hal/halx86/generic/irq.S rename to hal/halx86/generic/irq.S diff --git a/reactos/hal/halx86/generic/misc.c b/hal/halx86/generic/misc.c similarity index 100% rename from reactos/hal/halx86/generic/misc.c rename to hal/halx86/generic/misc.c diff --git a/reactos/hal/halx86/generic/pci.c b/hal/halx86/generic/pci.c similarity index 100% rename from reactos/hal/halx86/generic/pci.c rename to hal/halx86/generic/pci.c diff --git a/reactos/hal/halx86/generic/portio.c b/hal/halx86/generic/portio.c similarity index 100% rename from reactos/hal/halx86/generic/portio.c rename to hal/halx86/generic/portio.c diff --git a/reactos/hal/halx86/generic/processor.c b/hal/halx86/generic/processor.c similarity index 100% rename from reactos/hal/halx86/generic/processor.c rename to hal/halx86/generic/processor.c diff --git a/reactos/hal/halx86/generic/profil.c b/hal/halx86/generic/profil.c similarity index 100% rename from reactos/hal/halx86/generic/profil.c rename to hal/halx86/generic/profil.c diff --git a/reactos/hal/halx86/generic/reboot.c b/hal/halx86/generic/reboot.c similarity index 100% rename from reactos/hal/halx86/generic/reboot.c rename to hal/halx86/generic/reboot.c diff --git a/reactos/hal/halx86/generic/spinlock.c b/hal/halx86/generic/spinlock.c similarity index 100% rename from reactos/hal/halx86/generic/spinlock.c rename to hal/halx86/generic/spinlock.c diff --git a/reactos/hal/halx86/generic/sysinfo.c b/hal/halx86/generic/sysinfo.c similarity index 100% rename from reactos/hal/halx86/generic/sysinfo.c rename to hal/halx86/generic/sysinfo.c diff --git a/reactos/hal/halx86/generic/systimer.S b/hal/halx86/generic/systimer.S similarity index 100% rename from reactos/hal/halx86/generic/systimer.S rename to hal/halx86/generic/systimer.S diff --git a/reactos/hal/halx86/generic/timer.c b/hal/halx86/generic/timer.c similarity index 100% rename from reactos/hal/halx86/generic/timer.c rename to hal/halx86/generic/timer.c diff --git a/reactos/hal/halx86/generic/v86.s b/hal/halx86/generic/v86.s similarity index 100% rename from reactos/hal/halx86/generic/v86.s rename to hal/halx86/generic/v86.s diff --git a/reactos/hal/halx86/hal_generic.rbuild b/hal/halx86/hal_generic.rbuild similarity index 100% rename from reactos/hal/halx86/hal_generic.rbuild rename to hal/halx86/hal_generic.rbuild diff --git a/reactos/hal/halx86/hal_generic_pc.rbuild b/hal/halx86/hal_generic_pc.rbuild similarity index 100% rename from reactos/hal/halx86/hal_generic_pc.rbuild rename to hal/halx86/hal_generic_pc.rbuild diff --git a/reactos/hal/halx86/hal_generic_up.rbuild b/hal/halx86/hal_generic_up.rbuild similarity index 100% rename from reactos/hal/halx86/hal_generic_up.rbuild rename to hal/halx86/hal_generic_up.rbuild diff --git a/reactos/hal/halx86/halmp.rbuild b/hal/halx86/halmp.rbuild similarity index 100% rename from reactos/hal/halx86/halmp.rbuild rename to hal/halx86/halmp.rbuild diff --git a/reactos/hal/halx86/halup.rbuild b/hal/halx86/halup.rbuild similarity index 100% rename from reactos/hal/halx86/halup.rbuild rename to hal/halx86/halup.rbuild diff --git a/reactos/hal/halx86/halxbox.rbuild b/hal/halx86/halxbox.rbuild similarity index 100% rename from reactos/hal/halx86/halxbox.rbuild rename to hal/halx86/halxbox.rbuild diff --git a/reactos/hal/halx86/include/apic.h b/hal/halx86/include/apic.h similarity index 100% rename from reactos/hal/halx86/include/apic.h rename to hal/halx86/include/apic.h diff --git a/reactos/hal/halx86/include/bus.h b/hal/halx86/include/bus.h similarity index 100% rename from reactos/hal/halx86/include/bus.h rename to hal/halx86/include/bus.h diff --git a/reactos/hal/halx86/include/hal.h b/hal/halx86/include/hal.h similarity index 100% rename from reactos/hal/halx86/include/hal.h rename to hal/halx86/include/hal.h diff --git a/reactos/hal/halx86/include/haldma.h b/hal/halx86/include/haldma.h similarity index 100% rename from reactos/hal/halx86/include/haldma.h rename to hal/halx86/include/haldma.h diff --git a/reactos/hal/halx86/include/halirq.h b/hal/halx86/include/halirq.h similarity index 100% rename from reactos/hal/halx86/include/halirq.h rename to hal/halx86/include/halirq.h diff --git a/reactos/hal/halx86/include/halp.h b/hal/halx86/include/halp.h similarity index 100% rename from reactos/hal/halx86/include/halp.h rename to hal/halx86/include/halp.h diff --git a/reactos/hal/halx86/include/ioapic.h b/hal/halx86/include/ioapic.h similarity index 100% rename from reactos/hal/halx86/include/ioapic.h rename to hal/halx86/include/ioapic.h diff --git a/reactos/hal/halx86/include/mps.h b/hal/halx86/include/mps.h similarity index 100% rename from reactos/hal/halx86/include/mps.h rename to hal/halx86/include/mps.h diff --git a/reactos/hal/halx86/mp/apic.c b/hal/halx86/mp/apic.c similarity index 100% rename from reactos/hal/halx86/mp/apic.c rename to hal/halx86/mp/apic.c diff --git a/reactos/hal/halx86/mp/halinit_mp.c b/hal/halx86/mp/halinit_mp.c similarity index 100% rename from reactos/hal/halx86/mp/halinit_mp.c rename to hal/halx86/mp/halinit_mp.c diff --git a/reactos/hal/halx86/mp/halmp.rc b/hal/halx86/mp/halmp.rc similarity index 100% rename from reactos/hal/halx86/mp/halmp.rc rename to hal/halx86/mp/halmp.rc diff --git a/reactos/hal/halx86/mp/ioapic.c b/hal/halx86/mp/ioapic.c similarity index 100% rename from reactos/hal/halx86/mp/ioapic.c rename to hal/halx86/mp/ioapic.c diff --git a/reactos/hal/halx86/mp/ipi_mp.c b/hal/halx86/mp/ipi_mp.c similarity index 100% rename from reactos/hal/halx86/mp/ipi_mp.c rename to hal/halx86/mp/ipi_mp.c diff --git a/reactos/hal/halx86/mp/mpconfig.c b/hal/halx86/mp/mpconfig.c similarity index 100% rename from reactos/hal/halx86/mp/mpconfig.c rename to hal/halx86/mp/mpconfig.c diff --git a/reactos/hal/halx86/mp/mps.S b/hal/halx86/mp/mps.S similarity index 100% rename from reactos/hal/halx86/mp/mps.S rename to hal/halx86/mp/mps.S diff --git a/reactos/hal/halx86/mp/mpsboot.asm b/hal/halx86/mp/mpsboot.asm similarity index 100% rename from reactos/hal/halx86/mp/mpsboot.asm rename to hal/halx86/mp/mpsboot.asm diff --git a/reactos/hal/halx86/mp/mpsirql.c b/hal/halx86/mp/mpsirql.c similarity index 100% rename from reactos/hal/halx86/mp/mpsirql.c rename to hal/halx86/mp/mpsirql.c diff --git a/reactos/hal/halx86/mp/processor_mp.c b/hal/halx86/mp/processor_mp.c similarity index 100% rename from reactos/hal/halx86/mp/processor_mp.c rename to hal/halx86/mp/processor_mp.c diff --git a/reactos/hal/halx86/mp/spinlock.c b/hal/halx86/mp/spinlock.c similarity index 100% rename from reactos/hal/halx86/mp/spinlock.c rename to hal/halx86/mp/spinlock.c diff --git a/reactos/hal/halx86/up/halinit_up.c b/hal/halx86/up/halinit_up.c similarity index 100% rename from reactos/hal/halx86/up/halinit_up.c rename to hal/halx86/up/halinit_up.c diff --git a/reactos/hal/halx86/up/halup.rc b/hal/halx86/up/halup.rc similarity index 100% rename from reactos/hal/halx86/up/halup.rc rename to hal/halx86/up/halup.rc diff --git a/reactos/hal/halx86/xbox/halinit_xbox.c b/hal/halx86/xbox/halinit_xbox.c similarity index 100% rename from reactos/hal/halx86/xbox/halinit_xbox.c rename to hal/halx86/xbox/halinit_xbox.c diff --git a/reactos/hal/halx86/xbox/halxbox.h b/hal/halx86/xbox/halxbox.h similarity index 100% rename from reactos/hal/halx86/xbox/halxbox.h rename to hal/halx86/xbox/halxbox.h diff --git a/reactos/hal/halx86/xbox/halxbox.rc b/hal/halx86/xbox/halxbox.rc similarity index 100% rename from reactos/hal/halx86/xbox/halxbox.rc rename to hal/halx86/xbox/halxbox.rc diff --git a/reactos/hal/halx86/xbox/part_xbox.c b/hal/halx86/xbox/part_xbox.c similarity index 100% rename from reactos/hal/halx86/xbox/part_xbox.c rename to hal/halx86/xbox/part_xbox.c diff --git a/reactos/include/GL/gl.h b/include/GL/gl.h similarity index 100% rename from reactos/include/GL/gl.h rename to include/GL/gl.h diff --git a/reactos/include/GL/glext.h b/include/GL/glext.h similarity index 100% rename from reactos/include/GL/glext.h rename to include/GL/glext.h diff --git a/reactos/include/GL/glu.h b/include/GL/glu.h similarity index 100% rename from reactos/include/GL/glu.h rename to include/GL/glu.h diff --git a/reactos/include/crt/_mingw.h b/include/crt/_mingw.h similarity index 100% rename from reactos/include/crt/_mingw.h rename to include/crt/_mingw.h diff --git a/reactos/include/crt/assert.h b/include/crt/assert.h similarity index 100% rename from reactos/include/crt/assert.h rename to include/crt/assert.h diff --git a/reactos/include/crt/complex.h b/include/crt/complex.h similarity index 100% rename from reactos/include/crt/complex.h rename to include/crt/complex.h diff --git a/reactos/include/crt/conio.h b/include/crt/conio.h similarity index 100% rename from reactos/include/crt/conio.h rename to include/crt/conio.h diff --git a/reactos/include/crt/ctype.h b/include/crt/ctype.h similarity index 100% rename from reactos/include/crt/ctype.h rename to include/crt/ctype.h diff --git a/reactos/include/crt/direct.h b/include/crt/direct.h similarity index 100% rename from reactos/include/crt/direct.h rename to include/crt/direct.h diff --git a/reactos/include/crt/dirent.h b/include/crt/dirent.h similarity index 100% rename from reactos/include/crt/dirent.h rename to include/crt/dirent.h diff --git a/reactos/include/crt/dos.h b/include/crt/dos.h similarity index 100% rename from reactos/include/crt/dos.h rename to include/crt/dos.h diff --git a/reactos/include/crt/errno.h b/include/crt/errno.h similarity index 100% rename from reactos/include/crt/errno.h rename to include/crt/errno.h diff --git a/reactos/include/crt/excpt.h b/include/crt/excpt.h similarity index 100% rename from reactos/include/crt/excpt.h rename to include/crt/excpt.h diff --git a/reactos/include/crt/fcntl.h b/include/crt/fcntl.h similarity index 100% rename from reactos/include/crt/fcntl.h rename to include/crt/fcntl.h diff --git a/reactos/include/crt/fenv.h b/include/crt/fenv.h similarity index 100% rename from reactos/include/crt/fenv.h rename to include/crt/fenv.h diff --git a/reactos/include/crt/float.h b/include/crt/float.h similarity index 100% rename from reactos/include/crt/float.h rename to include/crt/float.h diff --git a/reactos/include/crt/getopt.h b/include/crt/getopt.h similarity index 100% rename from reactos/include/crt/getopt.h rename to include/crt/getopt.h diff --git a/reactos/include/crt/inttypes.h b/include/crt/inttypes.h similarity index 100% rename from reactos/include/crt/inttypes.h rename to include/crt/inttypes.h diff --git a/reactos/include/crt/io.h b/include/crt/io.h similarity index 100% rename from reactos/include/crt/io.h rename to include/crt/io.h diff --git a/reactos/include/crt/libgen.h b/include/crt/libgen.h similarity index 100% rename from reactos/include/crt/libgen.h rename to include/crt/libgen.h diff --git a/reactos/include/crt/limits.h b/include/crt/limits.h similarity index 100% rename from reactos/include/crt/limits.h rename to include/crt/limits.h diff --git a/reactos/include/crt/locale.h b/include/crt/locale.h similarity index 100% rename from reactos/include/crt/locale.h rename to include/crt/locale.h diff --git a/reactos/include/crt/malloc.h b/include/crt/malloc.h similarity index 100% rename from reactos/include/crt/malloc.h rename to include/crt/malloc.h diff --git a/reactos/include/crt/math.h b/include/crt/math.h similarity index 100% rename from reactos/include/crt/math.h rename to include/crt/math.h diff --git a/reactos/include/crt/mbctype.h b/include/crt/mbctype.h similarity index 100% rename from reactos/include/crt/mbctype.h rename to include/crt/mbctype.h diff --git a/reactos/include/crt/mbstring.h b/include/crt/mbstring.h similarity index 100% rename from reactos/include/crt/mbstring.h rename to include/crt/mbstring.h diff --git a/reactos/include/crt/mem.h b/include/crt/mem.h similarity index 100% rename from reactos/include/crt/mem.h rename to include/crt/mem.h diff --git a/reactos/include/crt/memory.h b/include/crt/memory.h similarity index 100% rename from reactos/include/crt/memory.h rename to include/crt/memory.h diff --git a/reactos/include/crt/mingw32/float.h b/include/crt/mingw32/float.h similarity index 100% rename from reactos/include/crt/mingw32/float.h rename to include/crt/mingw32/float.h diff --git a/reactos/include/crt/mingw32/stdarg.h b/include/crt/mingw32/stdarg.h similarity index 100% rename from reactos/include/crt/mingw32/stdarg.h rename to include/crt/mingw32/stdarg.h diff --git a/reactos/include/crt/mingw32/stdbool.h b/include/crt/mingw32/stdbool.h similarity index 100% rename from reactos/include/crt/mingw32/stdbool.h rename to include/crt/mingw32/stdbool.h diff --git a/reactos/include/crt/mingw32/stddef.h b/include/crt/mingw32/stddef.h similarity index 100% rename from reactos/include/crt/mingw32/stddef.h rename to include/crt/mingw32/stddef.h diff --git a/reactos/include/crt/process.h b/include/crt/process.h similarity index 100% rename from reactos/include/crt/process.h rename to include/crt/process.h diff --git a/reactos/include/crt/search.h b/include/crt/search.h similarity index 100% rename from reactos/include/crt/search.h rename to include/crt/search.h diff --git a/reactos/include/crt/setjmp.h b/include/crt/setjmp.h similarity index 100% rename from reactos/include/crt/setjmp.h rename to include/crt/setjmp.h diff --git a/reactos/include/crt/share.h b/include/crt/share.h similarity index 100% rename from reactos/include/crt/share.h rename to include/crt/share.h diff --git a/reactos/include/crt/signal.h b/include/crt/signal.h similarity index 100% rename from reactos/include/crt/signal.h rename to include/crt/signal.h diff --git a/reactos/include/crt/stdint.h b/include/crt/stdint.h similarity index 100% rename from reactos/include/crt/stdint.h rename to include/crt/stdint.h diff --git a/reactos/include/crt/stdio.h b/include/crt/stdio.h similarity index 100% rename from reactos/include/crt/stdio.h rename to include/crt/stdio.h diff --git a/reactos/include/crt/stdlib.h b/include/crt/stdlib.h similarity index 100% rename from reactos/include/crt/stdlib.h rename to include/crt/stdlib.h diff --git a/reactos/include/crt/string.h b/include/crt/string.h similarity index 100% rename from reactos/include/crt/string.h rename to include/crt/string.h diff --git a/reactos/include/crt/strings.h b/include/crt/strings.h similarity index 100% rename from reactos/include/crt/strings.h rename to include/crt/strings.h diff --git a/reactos/include/crt/sys/fcntl.h b/include/crt/sys/fcntl.h similarity index 100% rename from reactos/include/crt/sys/fcntl.h rename to include/crt/sys/fcntl.h diff --git a/reactos/include/crt/sys/file.h b/include/crt/sys/file.h similarity index 100% rename from reactos/include/crt/sys/file.h rename to include/crt/sys/file.h diff --git a/reactos/include/crt/sys/locking.h b/include/crt/sys/locking.h similarity index 100% rename from reactos/include/crt/sys/locking.h rename to include/crt/sys/locking.h diff --git a/reactos/include/crt/sys/param.h b/include/crt/sys/param.h similarity index 100% rename from reactos/include/crt/sys/param.h rename to include/crt/sys/param.h diff --git a/reactos/include/crt/sys/stat.h b/include/crt/sys/stat.h similarity index 100% rename from reactos/include/crt/sys/stat.h rename to include/crt/sys/stat.h diff --git a/reactos/include/crt/sys/time.h b/include/crt/sys/time.h similarity index 100% rename from reactos/include/crt/sys/time.h rename to include/crt/sys/time.h diff --git a/reactos/include/crt/sys/timeb.h b/include/crt/sys/timeb.h similarity index 100% rename from reactos/include/crt/sys/timeb.h rename to include/crt/sys/timeb.h diff --git a/reactos/include/crt/sys/types.h b/include/crt/sys/types.h similarity index 100% rename from reactos/include/crt/sys/types.h rename to include/crt/sys/types.h diff --git a/reactos/include/crt/sys/unistd.h b/include/crt/sys/unistd.h similarity index 100% rename from reactos/include/crt/sys/unistd.h rename to include/crt/sys/unistd.h diff --git a/reactos/include/crt/sys/utime.h b/include/crt/sys/utime.h similarity index 100% rename from reactos/include/crt/sys/utime.h rename to include/crt/sys/utime.h diff --git a/reactos/include/crt/time.h b/include/crt/time.h similarity index 100% rename from reactos/include/crt/time.h rename to include/crt/time.h diff --git a/reactos/include/crt/unistd.h b/include/crt/unistd.h similarity index 100% rename from reactos/include/crt/unistd.h rename to include/crt/unistd.h diff --git a/reactos/include/crt/utime.h b/include/crt/utime.h similarity index 100% rename from reactos/include/crt/utime.h rename to include/crt/utime.h diff --git a/reactos/include/crt/wchar.h b/include/crt/wchar.h similarity index 100% rename from reactos/include/crt/wchar.h rename to include/crt/wchar.h diff --git a/reactos/include/crt/wctype.h b/include/crt/wctype.h similarity index 100% rename from reactos/include/crt/wctype.h rename to include/crt/wctype.h diff --git a/reactos/include/ddk/afilter.h b/include/ddk/afilter.h similarity index 100% rename from reactos/include/ddk/afilter.h rename to include/ddk/afilter.h diff --git a/reactos/include/ddk/amtvuids.h b/include/ddk/amtvuids.h similarity index 100% rename from reactos/include/ddk/amtvuids.h rename to include/ddk/amtvuids.h diff --git a/reactos/include/ddk/atm.h b/include/ddk/atm.h similarity index 100% rename from reactos/include/ddk/atm.h rename to include/ddk/atm.h diff --git a/reactos/include/ddk/atsmedia.h b/include/ddk/atsmedia.h similarity index 100% rename from reactos/include/ddk/atsmedia.h rename to include/ddk/atsmedia.h diff --git a/reactos/include/ddk/batclass.h b/include/ddk/batclass.h similarity index 100% rename from reactos/include/ddk/batclass.h rename to include/ddk/batclass.h diff --git a/reactos/include/ddk/cfg.h b/include/ddk/cfg.h similarity index 100% rename from reactos/include/ddk/cfg.h rename to include/ddk/cfg.h diff --git a/reactos/include/ddk/cfgmgr32.h b/include/ddk/cfgmgr32.h similarity index 100% rename from reactos/include/ddk/cfgmgr32.h rename to include/ddk/cfgmgr32.h diff --git a/reactos/include/ddk/compstui.h b/include/ddk/compstui.h similarity index 100% rename from reactos/include/ddk/compstui.h rename to include/ddk/compstui.h diff --git a/reactos/include/ddk/csq.h b/include/ddk/csq.h similarity index 100% rename from reactos/include/ddk/csq.h rename to include/ddk/csq.h diff --git a/reactos/include/ddk/d3dhal.h b/include/ddk/d3dhal.h similarity index 100% rename from reactos/include/ddk/d3dhal.h rename to include/ddk/d3dhal.h diff --git a/reactos/include/ddk/d3dhalex.h b/include/ddk/d3dhalex.h similarity index 100% rename from reactos/include/ddk/d3dhalex.h rename to include/ddk/d3dhalex.h diff --git a/reactos/include/ddk/d3dnthal.h b/include/ddk/d3dnthal.h similarity index 100% rename from reactos/include/ddk/d3dnthal.h rename to include/ddk/d3dnthal.h diff --git a/reactos/include/ddk/d4drvif.h b/include/ddk/d4drvif.h similarity index 100% rename from reactos/include/ddk/d4drvif.h rename to include/ddk/d4drvif.h diff --git a/reactos/include/ddk/d4iface.h b/include/ddk/d4iface.h similarity index 100% rename from reactos/include/ddk/d4iface.h rename to include/ddk/d4iface.h diff --git a/reactos/include/ddk/dciddi.h b/include/ddk/dciddi.h similarity index 100% rename from reactos/include/ddk/dciddi.h rename to include/ddk/dciddi.h diff --git a/reactos/include/ddk/dderror.h b/include/ddk/dderror.h similarity index 100% rename from reactos/include/ddk/dderror.h rename to include/ddk/dderror.h diff --git a/reactos/include/ddk/ddkernel.h b/include/ddk/ddkernel.h similarity index 100% rename from reactos/include/ddk/ddkernel.h rename to include/ddk/ddkernel.h diff --git a/reactos/include/ddk/ddkmapi.h b/include/ddk/ddkmapi.h similarity index 100% rename from reactos/include/ddk/ddkmapi.h rename to include/ddk/ddkmapi.h diff --git a/reactos/include/ddk/ddrawi.h b/include/ddk/ddrawi.h similarity index 100% rename from reactos/include/ddk/ddrawi.h rename to include/ddk/ddrawi.h diff --git a/reactos/include/ddk/ddrawint.h b/include/ddk/ddrawint.h similarity index 100% rename from reactos/include/ddk/ddrawint.h rename to include/ddk/ddrawint.h diff --git a/reactos/include/ddk/diskguid.h b/include/ddk/diskguid.h similarity index 100% rename from reactos/include/ddk/diskguid.h rename to include/ddk/diskguid.h diff --git a/reactos/include/ddk/dmemmgr.h b/include/ddk/dmemmgr.h similarity index 100% rename from reactos/include/ddk/dmemmgr.h rename to include/ddk/dmemmgr.h diff --git a/reactos/include/ddk/drivinit.h b/include/ddk/drivinit.h similarity index 100% rename from reactos/include/ddk/drivinit.h rename to include/ddk/drivinit.h diff --git a/reactos/include/ddk/drmk.h b/include/ddk/drmk.h similarity index 100% rename from reactos/include/ddk/drmk.h rename to include/ddk/drmk.h diff --git a/reactos/include/ddk/dvp.h b/include/ddk/dvp.h similarity index 100% rename from reactos/include/ddk/dvp.h rename to include/ddk/dvp.h diff --git a/reactos/include/ddk/dxapi.h b/include/ddk/dxapi.h similarity index 100% rename from reactos/include/ddk/dxapi.h rename to include/ddk/dxapi.h diff --git a/reactos/include/ddk/fltsafe.h b/include/ddk/fltsafe.h similarity index 100% rename from reactos/include/ddk/fltsafe.h rename to include/ddk/fltsafe.h diff --git a/reactos/include/ddk/hidclass.h b/include/ddk/hidclass.h similarity index 100% rename from reactos/include/ddk/hidclass.h rename to include/ddk/hidclass.h diff --git a/reactos/include/ddk/hidpi.h b/include/ddk/hidpi.h similarity index 100% rename from reactos/include/ddk/hidpi.h rename to include/ddk/hidpi.h diff --git a/reactos/include/ddk/hidusage.h b/include/ddk/hidusage.h similarity index 100% rename from reactos/include/ddk/hidusage.h rename to include/ddk/hidusage.h diff --git a/reactos/include/ddk/ide.h b/include/ddk/ide.h similarity index 100% rename from reactos/include/ddk/ide.h rename to include/ddk/ide.h diff --git a/reactos/include/ddk/ieverp.h b/include/ddk/ieverp.h similarity index 100% rename from reactos/include/ddk/ieverp.h rename to include/ddk/ieverp.h diff --git a/reactos/include/ddk/imm.h b/include/ddk/imm.h similarity index 100% rename from reactos/include/ddk/imm.h rename to include/ddk/imm.h diff --git a/reactos/include/ddk/ioaccess.h b/include/ddk/ioaccess.h similarity index 100% rename from reactos/include/ddk/ioaccess.h rename to include/ddk/ioaccess.h diff --git a/reactos/include/ddk/isguids.h b/include/ddk/isguids.h similarity index 100% rename from reactos/include/ddk/isguids.h rename to include/ddk/isguids.h diff --git a/reactos/include/ddk/kbdmou.h b/include/ddk/kbdmou.h similarity index 100% rename from reactos/include/ddk/kbdmou.h rename to include/ddk/kbdmou.h diff --git a/reactos/include/ddk/kcom.h b/include/ddk/kcom.h similarity index 100% rename from reactos/include/ddk/kcom.h rename to include/ddk/kcom.h diff --git a/reactos/include/ddk/ksdebug.h b/include/ddk/ksdebug.h similarity index 100% rename from reactos/include/ddk/ksdebug.h rename to include/ddk/ksdebug.h diff --git a/reactos/include/ddk/ksuuids.h b/include/ddk/ksuuids.h similarity index 100% rename from reactos/include/ddk/ksuuids.h rename to include/ddk/ksuuids.h diff --git a/reactos/include/ddk/lmon.h b/include/ddk/lmon.h similarity index 100% rename from reactos/include/ddk/lmon.h rename to include/ddk/lmon.h diff --git a/reactos/include/ddk/mcd.h b/include/ddk/mcd.h similarity index 100% rename from reactos/include/ddk/mcd.h rename to include/ddk/mcd.h diff --git a/reactos/include/ddk/miniport.h b/include/ddk/miniport.h similarity index 100% rename from reactos/include/ddk/miniport.h rename to include/ddk/miniport.h diff --git a/reactos/include/ddk/minitape.h b/include/ddk/minitape.h similarity index 100% rename from reactos/include/ddk/minitape.h rename to include/ddk/minitape.h diff --git a/reactos/include/ddk/mountdev.h b/include/ddk/mountdev.h similarity index 100% rename from reactos/include/ddk/mountdev.h rename to include/ddk/mountdev.h diff --git a/reactos/include/ddk/mountmgr.h b/include/ddk/mountmgr.h similarity index 100% rename from reactos/include/ddk/mountmgr.h rename to include/ddk/mountmgr.h diff --git a/reactos/include/ddk/ndis.h b/include/ddk/ndis.h similarity index 100% rename from reactos/include/ddk/ndis.h rename to include/ddk/ndis.h diff --git a/reactos/include/ddk/ndisguid.h b/include/ddk/ndisguid.h similarity index 100% rename from reactos/include/ddk/ndisguid.h rename to include/ddk/ndisguid.h diff --git a/reactos/include/ddk/ndistapi.h b/include/ddk/ndistapi.h similarity index 100% rename from reactos/include/ddk/ndistapi.h rename to include/ddk/ndistapi.h diff --git a/reactos/include/ddk/ndiswan.h b/include/ddk/ndiswan.h similarity index 100% rename from reactos/include/ddk/ndiswan.h rename to include/ddk/ndiswan.h diff --git a/reactos/include/ddk/netevent.h b/include/ddk/netevent.h similarity index 100% rename from reactos/include/ddk/netevent.h rename to include/ddk/netevent.h diff --git a/reactos/include/ddk/netpnp.h b/include/ddk/netpnp.h similarity index 100% rename from reactos/include/ddk/netpnp.h rename to include/ddk/netpnp.h diff --git a/reactos/include/ddk/nettypes.h b/include/ddk/nettypes.h similarity index 100% rename from reactos/include/ddk/nettypes.h rename to include/ddk/nettypes.h diff --git a/reactos/include/ddk/newdev.h b/include/ddk/newdev.h similarity index 100% rename from reactos/include/ddk/newdev.h rename to include/ddk/newdev.h diff --git a/reactos/include/ddk/ntagp.h b/include/ddk/ntagp.h similarity index 100% rename from reactos/include/ddk/ntagp.h rename to include/ddk/ntagp.h diff --git a/reactos/include/ddk/ntdd1394.h b/include/ddk/ntdd1394.h similarity index 100% rename from reactos/include/ddk/ntdd1394.h rename to include/ddk/ntdd1394.h diff --git a/reactos/include/ddk/ntdd1934.h b/include/ddk/ntdd1934.h similarity index 100% rename from reactos/include/ddk/ntdd1934.h rename to include/ddk/ntdd1934.h diff --git a/reactos/include/ddk/ntdd8042.h b/include/ddk/ntdd8042.h similarity index 100% rename from reactos/include/ddk/ntdd8042.h rename to include/ddk/ntdd8042.h diff --git a/reactos/include/ddk/ntddbeep.h b/include/ddk/ntddbeep.h similarity index 100% rename from reactos/include/ddk/ntddbeep.h rename to include/ddk/ntddbeep.h diff --git a/reactos/include/ddk/ntddcdrm.h b/include/ddk/ntddcdrm.h similarity index 100% rename from reactos/include/ddk/ntddcdrm.h rename to include/ddk/ntddcdrm.h diff --git a/reactos/include/ddk/ntddcdvd.h b/include/ddk/ntddcdvd.h similarity index 100% rename from reactos/include/ddk/ntddcdvd.h rename to include/ddk/ntddcdvd.h diff --git a/reactos/include/ddk/ntddchgr.h b/include/ddk/ntddchgr.h similarity index 100% rename from reactos/include/ddk/ntddchgr.h rename to include/ddk/ntddchgr.h diff --git a/reactos/include/ddk/ntdddisk.h b/include/ddk/ntdddisk.h similarity index 100% rename from reactos/include/ddk/ntdddisk.h rename to include/ddk/ntdddisk.h diff --git a/reactos/include/ddk/ntddft.h b/include/ddk/ntddft.h similarity index 100% rename from reactos/include/ddk/ntddft.h rename to include/ddk/ntddft.h diff --git a/reactos/include/ddk/ntddk.h b/include/ddk/ntddk.h similarity index 100% rename from reactos/include/ddk/ntddk.h rename to include/ddk/ntddk.h diff --git a/reactos/include/ddk/ntddkbd.h b/include/ddk/ntddkbd.h similarity index 100% rename from reactos/include/ddk/ntddkbd.h rename to include/ddk/ntddkbd.h diff --git a/reactos/include/ddk/ntddmou.h b/include/ddk/ntddmou.h similarity index 100% rename from reactos/include/ddk/ntddmou.h rename to include/ddk/ntddmou.h diff --git a/reactos/include/ddk/ntddndis.h b/include/ddk/ntddndis.h similarity index 100% rename from reactos/include/ddk/ntddndis.h rename to include/ddk/ntddndis.h diff --git a/reactos/include/ddk/ntddpar.h b/include/ddk/ntddpar.h similarity index 100% rename from reactos/include/ddk/ntddpar.h rename to include/ddk/ntddpar.h diff --git a/reactos/include/ddk/ntddpcm.h b/include/ddk/ntddpcm.h similarity index 100% rename from reactos/include/ddk/ntddpcm.h rename to include/ddk/ntddpcm.h diff --git a/reactos/include/ddk/ntddscsi.h b/include/ddk/ntddscsi.h similarity index 100% rename from reactos/include/ddk/ntddscsi.h rename to include/ddk/ntddscsi.h diff --git a/reactos/include/ddk/ntddser.h b/include/ddk/ntddser.h similarity index 100% rename from reactos/include/ddk/ntddser.h rename to include/ddk/ntddser.h diff --git a/reactos/include/ddk/ntddstor.h b/include/ddk/ntddstor.h similarity index 100% rename from reactos/include/ddk/ntddstor.h rename to include/ddk/ntddstor.h diff --git a/reactos/include/ddk/ntddtape.h b/include/ddk/ntddtape.h similarity index 100% rename from reactos/include/ddk/ntddtape.h rename to include/ddk/ntddtape.h diff --git a/reactos/include/ddk/ntddtdi.h b/include/ddk/ntddtdi.h similarity index 100% rename from reactos/include/ddk/ntddtdi.h rename to include/ddk/ntddtdi.h diff --git a/reactos/include/ddk/ntddvdeo.h b/include/ddk/ntddvdeo.h similarity index 100% rename from reactos/include/ddk/ntddvdeo.h rename to include/ddk/ntddvdeo.h diff --git a/reactos/include/ddk/ntddvol.h b/include/ddk/ntddvol.h similarity index 100% rename from reactos/include/ddk/ntddvol.h rename to include/ddk/ntddvol.h diff --git a/reactos/include/ddk/ntifs.h b/include/ddk/ntifs.h similarity index 100% rename from reactos/include/ddk/ntifs.h rename to include/ddk/ntifs.h diff --git a/reactos/include/ddk/ntnls.h b/include/ddk/ntnls.h similarity index 100% rename from reactos/include/ddk/ntnls.h rename to include/ddk/ntnls.h diff --git a/reactos/include/ddk/ntpoapi.h b/include/ddk/ntpoapi.h similarity index 100% rename from reactos/include/ddk/ntpoapi.h rename to include/ddk/ntpoapi.h diff --git a/reactos/include/ddk/ntstatus.h b/include/ddk/ntstatus.h similarity index 100% rename from reactos/include/ddk/ntstatus.h rename to include/ddk/ntstatus.h diff --git a/reactos/include/ddk/ntstrsafe.h b/include/ddk/ntstrsafe.h similarity index 100% rename from reactos/include/ddk/ntstrsafe.h rename to include/ddk/ntstrsafe.h diff --git a/reactos/include/ddk/objerror.h b/include/ddk/objerror.h similarity index 100% rename from reactos/include/ddk/objerror.h rename to include/ddk/objerror.h diff --git a/reactos/include/ddk/oprghdlr.h b/include/ddk/oprghdlr.h similarity index 100% rename from reactos/include/ddk/oprghdlr.h rename to include/ddk/oprghdlr.h diff --git a/reactos/include/ddk/parallel.h b/include/ddk/parallel.h similarity index 100% rename from reactos/include/ddk/parallel.h rename to include/ddk/parallel.h diff --git a/reactos/include/ddk/pfhook.h b/include/ddk/pfhook.h similarity index 100% rename from reactos/include/ddk/pfhook.h rename to include/ddk/pfhook.h diff --git a/reactos/include/ddk/poclass.h b/include/ddk/poclass.h similarity index 100% rename from reactos/include/ddk/poclass.h rename to include/ddk/poclass.h diff --git a/reactos/include/ddk/polarity.h b/include/ddk/polarity.h similarity index 100% rename from reactos/include/ddk/polarity.h rename to include/ddk/polarity.h diff --git a/reactos/include/ddk/portcls.h b/include/ddk/portcls.h similarity index 100% rename from reactos/include/ddk/portcls.h rename to include/ddk/portcls.h diff --git a/reactos/include/ddk/prntfont.h b/include/ddk/prntfont.h similarity index 100% rename from reactos/include/ddk/prntfont.h rename to include/ddk/prntfont.h diff --git a/reactos/include/ddk/punknown.h b/include/ddk/punknown.h similarity index 100% rename from reactos/include/ddk/punknown.h rename to include/ddk/punknown.h diff --git a/reactos/include/ddk/scsi.h b/include/ddk/scsi.h similarity index 100% rename from reactos/include/ddk/scsi.h rename to include/ddk/scsi.h diff --git a/reactos/include/ddk/scsiscan.h b/include/ddk/scsiscan.h similarity index 100% rename from reactos/include/ddk/scsiscan.h rename to include/ddk/scsiscan.h diff --git a/reactos/include/ddk/scsiwmi.h b/include/ddk/scsiwmi.h similarity index 100% rename from reactos/include/ddk/scsiwmi.h rename to include/ddk/scsiwmi.h diff --git a/reactos/include/ddk/smbus.h b/include/ddk/smbus.h similarity index 100% rename from reactos/include/ddk/smbus.h rename to include/ddk/smbus.h diff --git a/reactos/include/ddk/srb.h b/include/ddk/srb.h similarity index 100% rename from reactos/include/ddk/srb.h rename to include/ddk/srb.h diff --git a/reactos/include/ddk/stdunk.h b/include/ddk/stdunk.h similarity index 100% rename from reactos/include/ddk/stdunk.h rename to include/ddk/stdunk.h diff --git a/reactos/include/ddk/stierr.h b/include/ddk/stierr.h similarity index 100% rename from reactos/include/ddk/stierr.h rename to include/ddk/stierr.h diff --git a/reactos/include/ddk/stireg.h b/include/ddk/stireg.h similarity index 100% rename from reactos/include/ddk/stireg.h rename to include/ddk/stireg.h diff --git a/reactos/include/ddk/storport.h b/include/ddk/storport.h similarity index 100% rename from reactos/include/ddk/storport.h rename to include/ddk/storport.h diff --git a/reactos/include/ddk/tdi.h b/include/ddk/tdi.h similarity index 100% rename from reactos/include/ddk/tdi.h rename to include/ddk/tdi.h diff --git a/reactos/include/ddk/tdiinfo.h b/include/ddk/tdiinfo.h similarity index 100% rename from reactos/include/ddk/tdiinfo.h rename to include/ddk/tdiinfo.h diff --git a/reactos/include/ddk/tdikrnl.h b/include/ddk/tdikrnl.h similarity index 100% rename from reactos/include/ddk/tdikrnl.h rename to include/ddk/tdikrnl.h diff --git a/reactos/include/ddk/tdistat.h b/include/ddk/tdistat.h similarity index 100% rename from reactos/include/ddk/tdistat.h rename to include/ddk/tdistat.h diff --git a/reactos/include/ddk/tvout.h b/include/ddk/tvout.h similarity index 100% rename from reactos/include/ddk/tvout.h rename to include/ddk/tvout.h diff --git a/reactos/include/ddk/unknown.h b/include/ddk/unknown.h similarity index 100% rename from reactos/include/ddk/unknown.h rename to include/ddk/unknown.h diff --git a/reactos/include/ddk/upssvc.h b/include/ddk/upssvc.h similarity index 100% rename from reactos/include/ddk/upssvc.h rename to include/ddk/upssvc.h diff --git a/reactos/include/ddk/usb.h b/include/ddk/usb.h similarity index 100% rename from reactos/include/ddk/usb.h rename to include/ddk/usb.h diff --git a/reactos/include/ddk/usb100.h b/include/ddk/usb100.h similarity index 100% rename from reactos/include/ddk/usb100.h rename to include/ddk/usb100.h diff --git a/reactos/include/ddk/usb200.h b/include/ddk/usb200.h similarity index 100% rename from reactos/include/ddk/usb200.h rename to include/ddk/usb200.h diff --git a/reactos/include/ddk/usbcamdi.h b/include/ddk/usbcamdi.h similarity index 100% rename from reactos/include/ddk/usbcamdi.h rename to include/ddk/usbcamdi.h diff --git a/reactos/include/ddk/usbdi.h b/include/ddk/usbdi.h similarity index 100% rename from reactos/include/ddk/usbdi.h rename to include/ddk/usbdi.h diff --git a/reactos/include/ddk/usbioctl.h b/include/ddk/usbioctl.h similarity index 100% rename from reactos/include/ddk/usbioctl.h rename to include/ddk/usbioctl.h diff --git a/reactos/include/ddk/usbiodef.h b/include/ddk/usbiodef.h similarity index 100% rename from reactos/include/ddk/usbiodef.h rename to include/ddk/usbiodef.h diff --git a/reactos/include/ddk/usbkern.h b/include/ddk/usbkern.h similarity index 100% rename from reactos/include/ddk/usbkern.h rename to include/ddk/usbkern.h diff --git a/reactos/include/ddk/usbprint.h b/include/ddk/usbprint.h similarity index 100% rename from reactos/include/ddk/usbprint.h rename to include/ddk/usbprint.h diff --git a/reactos/include/ddk/usbscan.h b/include/ddk/usbscan.h similarity index 100% rename from reactos/include/ddk/usbscan.h rename to include/ddk/usbscan.h diff --git a/reactos/include/ddk/usbuser.h b/include/ddk/usbuser.h similarity index 100% rename from reactos/include/ddk/usbuser.h rename to include/ddk/usbuser.h diff --git a/reactos/include/ddk/video.h b/include/ddk/video.h similarity index 100% rename from reactos/include/ddk/video.h rename to include/ddk/video.h diff --git a/reactos/include/ddk/videoagp.h b/include/ddk/videoagp.h similarity index 100% rename from reactos/include/ddk/videoagp.h rename to include/ddk/videoagp.h diff --git a/reactos/include/ddk/warning.h b/include/ddk/warning.h similarity index 100% rename from reactos/include/ddk/warning.h rename to include/ddk/warning.h diff --git a/reactos/include/ddk/wdm.h b/include/ddk/wdm.h similarity index 100% rename from reactos/include/ddk/wdm.h rename to include/ddk/wdm.h diff --git a/reactos/include/ddk/wdmguid.h b/include/ddk/wdmguid.h similarity index 100% rename from reactos/include/ddk/wdmguid.h rename to include/ddk/wdmguid.h diff --git a/reactos/include/ddk/win2k.h b/include/ddk/win2k.h similarity index 100% rename from reactos/include/ddk/win2k.h rename to include/ddk/win2k.h diff --git a/reactos/include/ddk/winddi.h b/include/ddk/winddi.h similarity index 100% rename from reactos/include/ddk/winddi.h rename to include/ddk/winddi.h diff --git a/reactos/include/ddk/winddk.h b/include/ddk/winddk.h similarity index 100% rename from reactos/include/ddk/winddk.h rename to include/ddk/winddk.h diff --git a/reactos/include/ddk/winnt4.h b/include/ddk/winnt4.h similarity index 100% rename from reactos/include/ddk/winnt4.h rename to include/ddk/winnt4.h diff --git a/reactos/include/ddk/winxp.h b/include/ddk/winxp.h similarity index 100% rename from reactos/include/ddk/winxp.h rename to include/ddk/winxp.h diff --git a/reactos/include/ddk/ws2san.h b/include/ddk/ws2san.h similarity index 100% rename from reactos/include/ddk/ws2san.h rename to include/ddk/ws2san.h diff --git a/reactos/include/ddk/xfilter.h b/include/ddk/xfilter.h similarity index 100% rename from reactos/include/ddk/xfilter.h rename to include/ddk/xfilter.h diff --git a/reactos/include/ddk/xmldsodid.h b/include/ddk/xmldsodid.h similarity index 100% rename from reactos/include/ddk/xmldsodid.h rename to include/ddk/xmldsodid.h diff --git a/reactos/include/directory.rbuild b/include/directory.rbuild similarity index 100% rename from reactos/include/directory.rbuild rename to include/directory.rbuild diff --git a/reactos/include/dxsdk/Iwstdec.h b/include/dxsdk/Iwstdec.h similarity index 100% rename from reactos/include/dxsdk/Iwstdec.h rename to include/dxsdk/Iwstdec.h diff --git a/reactos/include/dxsdk/activecf.h b/include/dxsdk/activecf.h similarity index 100% rename from reactos/include/dxsdk/activecf.h rename to include/dxsdk/activecf.h diff --git a/reactos/include/dxsdk/amaudio.h b/include/dxsdk/amaudio.h similarity index 100% rename from reactos/include/dxsdk/amaudio.h rename to include/dxsdk/amaudio.h diff --git a/reactos/include/dxsdk/amparse.h b/include/dxsdk/amparse.h similarity index 100% rename from reactos/include/dxsdk/amparse.h rename to include/dxsdk/amparse.h diff --git a/reactos/include/dxsdk/amstream.idl b/include/dxsdk/amstream.idl similarity index 100% rename from reactos/include/dxsdk/amstream.idl rename to include/dxsdk/amstream.idl diff --git a/reactos/include/dxsdk/amva.h b/include/dxsdk/amva.h similarity index 100% rename from reactos/include/dxsdk/amva.h rename to include/dxsdk/amva.h diff --git a/reactos/include/dxsdk/amvideo.h b/include/dxsdk/amvideo.h similarity index 100% rename from reactos/include/dxsdk/amvideo.h rename to include/dxsdk/amvideo.h diff --git a/reactos/include/dxsdk/atsmedia.h b/include/dxsdk/atsmedia.h similarity index 100% rename from reactos/include/dxsdk/atsmedia.h rename to include/dxsdk/atsmedia.h diff --git a/reactos/include/dxsdk/audevcod.h b/include/dxsdk/audevcod.h similarity index 100% rename from reactos/include/dxsdk/audevcod.h rename to include/dxsdk/audevcod.h diff --git a/reactos/include/dxsdk/austream.idl b/include/dxsdk/austream.idl similarity index 100% rename from reactos/include/dxsdk/austream.idl rename to include/dxsdk/austream.idl diff --git a/reactos/include/dxsdk/aviriff.h b/include/dxsdk/aviriff.h similarity index 100% rename from reactos/include/dxsdk/aviriff.h rename to include/dxsdk/aviriff.h diff --git a/reactos/include/dxsdk/axcore.idl b/include/dxsdk/axcore.idl similarity index 100% rename from reactos/include/dxsdk/axcore.idl rename to include/dxsdk/axcore.idl diff --git a/reactos/include/dxsdk/axextend.idl b/include/dxsdk/axextend.idl similarity index 100% rename from reactos/include/dxsdk/axextend.idl rename to include/dxsdk/axextend.idl diff --git a/reactos/include/dxsdk/bdatypes.h b/include/dxsdk/bdatypes.h similarity index 100% rename from reactos/include/dxsdk/bdatypes.h rename to include/dxsdk/bdatypes.h diff --git a/reactos/include/dxsdk/comlite.h b/include/dxsdk/comlite.h similarity index 100% rename from reactos/include/dxsdk/comlite.h rename to include/dxsdk/comlite.h diff --git a/reactos/include/dxsdk/d3d8caps.h b/include/dxsdk/d3d8caps.h similarity index 100% rename from reactos/include/dxsdk/d3d8caps.h rename to include/dxsdk/d3d8caps.h diff --git a/reactos/include/dxsdk/d3d9caps.h b/include/dxsdk/d3d9caps.h similarity index 100% rename from reactos/include/dxsdk/d3d9caps.h rename to include/dxsdk/d3d9caps.h diff --git a/reactos/include/dxsdk/d3dcaps.h b/include/dxsdk/d3dcaps.h similarity index 100% rename from reactos/include/dxsdk/d3dcaps.h rename to include/dxsdk/d3dcaps.h diff --git a/reactos/include/dxsdk/d3drmwin.h b/include/dxsdk/d3drmwin.h similarity index 100% rename from reactos/include/dxsdk/d3drmwin.h rename to include/dxsdk/d3drmwin.h diff --git a/reactos/include/dxsdk/d3dvec.inl b/include/dxsdk/d3dvec.inl similarity index 100% rename from reactos/include/dxsdk/d3dvec.inl rename to include/dxsdk/d3dvec.inl diff --git a/reactos/include/dxsdk/d3dx9.h b/include/dxsdk/d3dx9.h similarity index 100% rename from reactos/include/dxsdk/d3dx9.h rename to include/dxsdk/d3dx9.h diff --git a/reactos/include/dxsdk/d3dx9shape.h b/include/dxsdk/d3dx9shape.h similarity index 100% rename from reactos/include/dxsdk/d3dx9shape.h rename to include/dxsdk/d3dx9shape.h diff --git a/reactos/include/dxsdk/d3dx9xof.h b/include/dxsdk/d3dx9xof.h similarity index 100% rename from reactos/include/dxsdk/d3dx9xof.h rename to include/dxsdk/d3dx9xof.h diff --git a/reactos/include/dxsdk/ddraw.h b/include/dxsdk/ddraw.h similarity index 100% rename from reactos/include/dxsdk/ddraw.h rename to include/dxsdk/ddraw.h diff --git a/reactos/include/dxsdk/ddrawex.h b/include/dxsdk/ddrawex.h similarity index 100% rename from reactos/include/dxsdk/ddrawex.h rename to include/dxsdk/ddrawex.h diff --git a/reactos/include/dxsdk/ddstream.idl b/include/dxsdk/ddstream.idl similarity index 100% rename from reactos/include/dxsdk/ddstream.idl rename to include/dxsdk/ddstream.idl diff --git a/reactos/include/dxsdk/devenum.idl b/include/dxsdk/devenum.idl similarity index 100% rename from reactos/include/dxsdk/devenum.idl rename to include/dxsdk/devenum.idl diff --git a/reactos/include/dxsdk/dls1.h b/include/dxsdk/dls1.h similarity index 100% rename from reactos/include/dxsdk/dls1.h rename to include/dxsdk/dls1.h diff --git a/reactos/include/dxsdk/dls2.h b/include/dxsdk/dls2.h similarity index 100% rename from reactos/include/dxsdk/dls2.h rename to include/dxsdk/dls2.h diff --git a/reactos/include/dxsdk/dmdls.h b/include/dxsdk/dmdls.h similarity index 100% rename from reactos/include/dxsdk/dmdls.h rename to include/dxsdk/dmdls.h diff --git a/reactos/include/dxsdk/dmksctrl.h b/include/dxsdk/dmksctrl.h similarity index 100% rename from reactos/include/dxsdk/dmksctrl.h rename to include/dxsdk/dmksctrl.h diff --git a/reactos/include/dxsdk/dmo.h b/include/dxsdk/dmo.h similarity index 100% rename from reactos/include/dxsdk/dmo.h rename to include/dxsdk/dmo.h diff --git a/reactos/include/dxsdk/dmodshow.idl b/include/dxsdk/dmodshow.idl similarity index 100% rename from reactos/include/dxsdk/dmodshow.idl rename to include/dxsdk/dmodshow.idl diff --git a/reactos/include/dxsdk/dmoreg.h b/include/dxsdk/dmoreg.h similarity index 100% rename from reactos/include/dxsdk/dmoreg.h rename to include/dxsdk/dmoreg.h diff --git a/reactos/include/dxsdk/dmort.h b/include/dxsdk/dmort.h similarity index 100% rename from reactos/include/dxsdk/dmort.h rename to include/dxsdk/dmort.h diff --git a/reactos/include/dxsdk/dmusbuff.h b/include/dxsdk/dmusbuff.h similarity index 100% rename from reactos/include/dxsdk/dmusbuff.h rename to include/dxsdk/dmusbuff.h diff --git a/reactos/include/dxsdk/dmusics.h b/include/dxsdk/dmusics.h similarity index 100% rename from reactos/include/dxsdk/dmusics.h rename to include/dxsdk/dmusics.h diff --git a/reactos/include/dxsdk/dsconf.h b/include/dxsdk/dsconf.h similarity index 100% rename from reactos/include/dxsdk/dsconf.h rename to include/dxsdk/dsconf.h diff --git a/reactos/include/dxsdk/dsetup.h b/include/dxsdk/dsetup.h similarity index 100% rename from reactos/include/dxsdk/dsetup.h rename to include/dxsdk/dsetup.h diff --git a/reactos/include/dxsdk/dshow.h b/include/dxsdk/dshow.h similarity index 100% rename from reactos/include/dxsdk/dshow.h rename to include/dxsdk/dshow.h diff --git a/reactos/include/dxsdk/dshowasf.idl b/include/dxsdk/dshowasf.idl similarity index 100% rename from reactos/include/dxsdk/dshowasf.idl rename to include/dxsdk/dshowasf.idl diff --git a/reactos/include/dxsdk/dv.h b/include/dxsdk/dv.h similarity index 100% rename from reactos/include/dxsdk/dv.h rename to include/dxsdk/dv.h diff --git a/reactos/include/dxsdk/dx7todx8.h b/include/dxsdk/dx7todx8.h similarity index 100% rename from reactos/include/dxsdk/dx7todx8.h rename to include/dxsdk/dx7todx8.h diff --git a/reactos/include/dxsdk/dxdiag.h b/include/dxsdk/dxdiag.h similarity index 100% rename from reactos/include/dxsdk/dxdiag.h rename to include/dxsdk/dxdiag.h diff --git a/reactos/include/dxsdk/dxerr8.h b/include/dxsdk/dxerr8.h similarity index 100% rename from reactos/include/dxsdk/dxerr8.h rename to include/dxsdk/dxerr8.h diff --git a/reactos/include/dxsdk/dxerr9.h b/include/dxsdk/dxerr9.h similarity index 100% rename from reactos/include/dxsdk/dxerr9.h rename to include/dxsdk/dxerr9.h diff --git a/reactos/include/dxsdk/dxfile.h b/include/dxsdk/dxfile.h similarity index 100% rename from reactos/include/dxsdk/dxfile.h rename to include/dxsdk/dxfile.h diff --git a/reactos/include/dxsdk/dxsdk.rbuild b/include/dxsdk/dxsdk.rbuild similarity index 100% rename from reactos/include/dxsdk/dxsdk.rbuild rename to include/dxsdk/dxsdk.rbuild diff --git a/reactos/include/dxsdk/dxsdkver.h b/include/dxsdk/dxsdkver.h similarity index 100% rename from reactos/include/dxsdk/dxsdkver.h rename to include/dxsdk/dxsdkver.h diff --git a/reactos/include/dxsdk/dyngraph.idl b/include/dxsdk/dyngraph.idl similarity index 100% rename from reactos/include/dxsdk/dyngraph.idl rename to include/dxsdk/dyngraph.idl diff --git a/reactos/include/dxsdk/errors.h b/include/dxsdk/errors.h similarity index 100% rename from reactos/include/dxsdk/errors.h rename to include/dxsdk/errors.h diff --git a/reactos/include/dxsdk/evcode.h b/include/dxsdk/evcode.h similarity index 100% rename from reactos/include/dxsdk/evcode.h rename to include/dxsdk/evcode.h diff --git a/reactos/include/dxsdk/il21dec.h b/include/dxsdk/il21dec.h similarity index 100% rename from reactos/include/dxsdk/il21dec.h rename to include/dxsdk/il21dec.h diff --git a/reactos/include/dxsdk/ksguid.h b/include/dxsdk/ksguid.h similarity index 100% rename from reactos/include/dxsdk/ksguid.h rename to include/dxsdk/ksguid.h diff --git a/reactos/include/dxsdk/ksuuids.h b/include/dxsdk/ksuuids.h similarity index 100% rename from reactos/include/dxsdk/ksuuids.h rename to include/dxsdk/ksuuids.h diff --git a/reactos/include/dxsdk/mediaerr.h b/include/dxsdk/mediaerr.h similarity index 100% rename from reactos/include/dxsdk/mediaerr.h rename to include/dxsdk/mediaerr.h diff --git a/reactos/include/dxsdk/mediaobj.idl b/include/dxsdk/mediaobj.idl similarity index 100% rename from reactos/include/dxsdk/mediaobj.idl rename to include/dxsdk/mediaobj.idl diff --git a/reactos/include/dxsdk/medparam.idl b/include/dxsdk/medparam.idl similarity index 100% rename from reactos/include/dxsdk/medparam.idl rename to include/dxsdk/medparam.idl diff --git a/reactos/include/dxsdk/mixerocx.idl b/include/dxsdk/mixerocx.idl similarity index 100% rename from reactos/include/dxsdk/mixerocx.idl rename to include/dxsdk/mixerocx.idl diff --git a/reactos/include/dxsdk/mmstream.idl b/include/dxsdk/mmstream.idl similarity index 100% rename from reactos/include/dxsdk/mmstream.idl rename to include/dxsdk/mmstream.idl diff --git a/reactos/include/dxsdk/mpconfig.h b/include/dxsdk/mpconfig.h similarity index 100% rename from reactos/include/dxsdk/mpconfig.h rename to include/dxsdk/mpconfig.h diff --git a/reactos/include/dxsdk/mpeg2bits.h b/include/dxsdk/mpeg2bits.h similarity index 100% rename from reactos/include/dxsdk/mpeg2bits.h rename to include/dxsdk/mpeg2bits.h diff --git a/reactos/include/dxsdk/mpeg2error.h b/include/dxsdk/mpeg2error.h similarity index 100% rename from reactos/include/dxsdk/mpeg2error.h rename to include/dxsdk/mpeg2error.h diff --git a/reactos/include/dxsdk/mpegtype.h b/include/dxsdk/mpegtype.h similarity index 100% rename from reactos/include/dxsdk/mpegtype.h rename to include/dxsdk/mpegtype.h diff --git a/reactos/include/dxsdk/pixplugin.h b/include/dxsdk/pixplugin.h similarity index 100% rename from reactos/include/dxsdk/pixplugin.h rename to include/dxsdk/pixplugin.h diff --git a/reactos/include/dxsdk/qedit.idl b/include/dxsdk/qedit.idl similarity index 100% rename from reactos/include/dxsdk/qedit.idl rename to include/dxsdk/qedit.idl diff --git a/reactos/include/dxsdk/regbag.idl b/include/dxsdk/regbag.idl similarity index 100% rename from reactos/include/dxsdk/regbag.idl rename to include/dxsdk/regbag.idl diff --git a/reactos/include/dxsdk/rmxfguid.h b/include/dxsdk/rmxfguid.h similarity index 100% rename from reactos/include/dxsdk/rmxfguid.h rename to include/dxsdk/rmxfguid.h diff --git a/reactos/include/dxsdk/strmif.idl b/include/dxsdk/strmif.idl similarity index 100% rename from reactos/include/dxsdk/strmif.idl rename to include/dxsdk/strmif.idl diff --git a/reactos/include/dxsdk/tvratings.idl b/include/dxsdk/tvratings.idl similarity index 100% rename from reactos/include/dxsdk/tvratings.idl rename to include/dxsdk/tvratings.idl diff --git a/reactos/include/dxsdk/uuids.h b/include/dxsdk/uuids.h similarity index 100% rename from reactos/include/dxsdk/uuids.h rename to include/dxsdk/uuids.h diff --git a/reactos/include/dxsdk/vidcap.idl b/include/dxsdk/vidcap.idl similarity index 100% rename from reactos/include/dxsdk/vidcap.idl rename to include/dxsdk/vidcap.idl diff --git a/reactos/include/dxsdk/videoacc.idl b/include/dxsdk/videoacc.idl similarity index 100% rename from reactos/include/dxsdk/videoacc.idl rename to include/dxsdk/videoacc.idl diff --git a/reactos/include/dxsdk/vmrender.idl b/include/dxsdk/vmrender.idl similarity index 100% rename from reactos/include/dxsdk/vmrender.idl rename to include/dxsdk/vmrender.idl diff --git a/reactos/include/dxsdk/vpconfig.h b/include/dxsdk/vpconfig.h similarity index 100% rename from reactos/include/dxsdk/vpconfig.h rename to include/dxsdk/vpconfig.h diff --git a/reactos/include/dxsdk/vpnotify.h b/include/dxsdk/vpnotify.h similarity index 100% rename from reactos/include/dxsdk/vpnotify.h rename to include/dxsdk/vpnotify.h diff --git a/reactos/include/dxsdk/vptype.h b/include/dxsdk/vptype.h similarity index 100% rename from reactos/include/dxsdk/vptype.h rename to include/dxsdk/vptype.h diff --git a/reactos/include/host/nls.h b/include/host/nls.h similarity index 100% rename from reactos/include/host/nls.h rename to include/host/nls.h diff --git a/reactos/include/host/poppack.h b/include/host/poppack.h similarity index 100% rename from reactos/include/host/poppack.h rename to include/host/poppack.h diff --git a/reactos/include/host/pshpack1.h b/include/host/pshpack1.h similarity index 100% rename from reactos/include/host/pshpack1.h rename to include/host/pshpack1.h diff --git a/reactos/include/host/pshpack2.h b/include/host/pshpack2.h similarity index 100% rename from reactos/include/host/pshpack2.h rename to include/host/pshpack2.h diff --git a/reactos/include/host/pshpack4.h b/include/host/pshpack4.h similarity index 100% rename from reactos/include/host/pshpack4.h rename to include/host/pshpack4.h diff --git a/reactos/include/host/pshpack8.h b/include/host/pshpack8.h similarity index 100% rename from reactos/include/host/pshpack8.h rename to include/host/pshpack8.h diff --git a/reactos/include/host/pshpck16.h b/include/host/pshpck16.h similarity index 100% rename from reactos/include/host/pshpck16.h rename to include/host/pshpck16.h diff --git a/reactos/include/host/typedefs.h b/include/host/typedefs.h similarity index 100% rename from reactos/include/host/typedefs.h rename to include/host/typedefs.h diff --git a/reactos/include/host/wcsfuncs.h b/include/host/wcsfuncs.h similarity index 100% rename from reactos/include/host/wcsfuncs.h rename to include/host/wcsfuncs.h diff --git a/reactos/include/ndk/arch/ketypes.h b/include/ndk/arch/ketypes.h similarity index 100% rename from reactos/include/ndk/arch/ketypes.h rename to include/ndk/arch/ketypes.h diff --git a/reactos/include/ndk/arch/mmtypes.h b/include/ndk/arch/mmtypes.h similarity index 100% rename from reactos/include/ndk/arch/mmtypes.h rename to include/ndk/arch/mmtypes.h diff --git a/reactos/include/ndk/arm/ketypes.h b/include/ndk/arm/ketypes.h similarity index 100% rename from reactos/include/ndk/arm/ketypes.h rename to include/ndk/arm/ketypes.h diff --git a/reactos/include/ndk/arm/mmtypes.h b/include/ndk/arm/mmtypes.h similarity index 100% rename from reactos/include/ndk/arm/mmtypes.h rename to include/ndk/arm/mmtypes.h diff --git a/reactos/include/ndk/asm.h b/include/ndk/asm.h similarity index 100% rename from reactos/include/ndk/asm.h rename to include/ndk/asm.h diff --git a/reactos/include/ndk/cctypes.h b/include/ndk/cctypes.h similarity index 100% rename from reactos/include/ndk/cctypes.h rename to include/ndk/cctypes.h diff --git a/reactos/include/ndk/cmfuncs.h b/include/ndk/cmfuncs.h similarity index 100% rename from reactos/include/ndk/cmfuncs.h rename to include/ndk/cmfuncs.h diff --git a/reactos/include/ndk/cmtypes.h b/include/ndk/cmtypes.h similarity index 100% rename from reactos/include/ndk/cmtypes.h rename to include/ndk/cmtypes.h diff --git a/reactos/include/ndk/dbgkfuncs.h b/include/ndk/dbgkfuncs.h similarity index 100% rename from reactos/include/ndk/dbgkfuncs.h rename to include/ndk/dbgkfuncs.h diff --git a/reactos/include/ndk/dbgktypes.h b/include/ndk/dbgktypes.h similarity index 100% rename from reactos/include/ndk/dbgktypes.h rename to include/ndk/dbgktypes.h diff --git a/reactos/include/ndk/exfuncs.h b/include/ndk/exfuncs.h similarity index 100% rename from reactos/include/ndk/exfuncs.h rename to include/ndk/exfuncs.h diff --git a/reactos/include/ndk/extypes.h b/include/ndk/extypes.h similarity index 100% rename from reactos/include/ndk/extypes.h rename to include/ndk/extypes.h diff --git a/reactos/include/ndk/halfuncs.h b/include/ndk/halfuncs.h similarity index 100% rename from reactos/include/ndk/halfuncs.h rename to include/ndk/halfuncs.h diff --git a/reactos/include/ndk/haltypes.h b/include/ndk/haltypes.h similarity index 100% rename from reactos/include/ndk/haltypes.h rename to include/ndk/haltypes.h diff --git a/reactos/include/ndk/i386/ketypes.h b/include/ndk/i386/ketypes.h similarity index 100% rename from reactos/include/ndk/i386/ketypes.h rename to include/ndk/i386/ketypes.h diff --git a/reactos/include/ndk/i386/mmtypes.h b/include/ndk/i386/mmtypes.h similarity index 100% rename from reactos/include/ndk/i386/mmtypes.h rename to include/ndk/i386/mmtypes.h diff --git a/reactos/include/ndk/ifssupp.h b/include/ndk/ifssupp.h similarity index 100% rename from reactos/include/ndk/ifssupp.h rename to include/ndk/ifssupp.h diff --git a/reactos/include/ndk/inbvfuncs.h b/include/ndk/inbvfuncs.h similarity index 100% rename from reactos/include/ndk/inbvfuncs.h rename to include/ndk/inbvfuncs.h diff --git a/reactos/include/ndk/inbvtypes.h b/include/ndk/inbvtypes.h similarity index 100% rename from reactos/include/ndk/inbvtypes.h rename to include/ndk/inbvtypes.h diff --git a/reactos/include/ndk/iofuncs.h b/include/ndk/iofuncs.h similarity index 100% rename from reactos/include/ndk/iofuncs.h rename to include/ndk/iofuncs.h diff --git a/reactos/include/ndk/iotypes.h b/include/ndk/iotypes.h similarity index 100% rename from reactos/include/ndk/iotypes.h rename to include/ndk/iotypes.h diff --git a/reactos/include/ndk/kdfuncs.h b/include/ndk/kdfuncs.h similarity index 100% rename from reactos/include/ndk/kdfuncs.h rename to include/ndk/kdfuncs.h diff --git a/reactos/include/ndk/kdtypes.h b/include/ndk/kdtypes.h similarity index 100% rename from reactos/include/ndk/kdtypes.h rename to include/ndk/kdtypes.h diff --git a/reactos/include/ndk/kefuncs.h b/include/ndk/kefuncs.h similarity index 100% rename from reactos/include/ndk/kefuncs.h rename to include/ndk/kefuncs.h diff --git a/reactos/include/ndk/ketypes.h b/include/ndk/ketypes.h similarity index 100% rename from reactos/include/ndk/ketypes.h rename to include/ndk/ketypes.h diff --git a/reactos/include/ndk/ldrfuncs.h b/include/ndk/ldrfuncs.h similarity index 100% rename from reactos/include/ndk/ldrfuncs.h rename to include/ndk/ldrfuncs.h diff --git a/reactos/include/ndk/ldrtypes.h b/include/ndk/ldrtypes.h similarity index 100% rename from reactos/include/ndk/ldrtypes.h rename to include/ndk/ldrtypes.h diff --git a/reactos/include/ndk/lpcfuncs.h b/include/ndk/lpcfuncs.h similarity index 100% rename from reactos/include/ndk/lpcfuncs.h rename to include/ndk/lpcfuncs.h diff --git a/reactos/include/ndk/lpctypes.h b/include/ndk/lpctypes.h similarity index 100% rename from reactos/include/ndk/lpctypes.h rename to include/ndk/lpctypes.h diff --git a/reactos/include/ndk/mmfuncs.h b/include/ndk/mmfuncs.h similarity index 100% rename from reactos/include/ndk/mmfuncs.h rename to include/ndk/mmfuncs.h diff --git a/reactos/include/ndk/mmtypes.h b/include/ndk/mmtypes.h similarity index 100% rename from reactos/include/ndk/mmtypes.h rename to include/ndk/mmtypes.h diff --git a/reactos/include/ndk/ntndk.h b/include/ndk/ntndk.h similarity index 100% rename from reactos/include/ndk/ntndk.h rename to include/ndk/ntndk.h diff --git a/reactos/include/ndk/obfuncs.h b/include/ndk/obfuncs.h similarity index 100% rename from reactos/include/ndk/obfuncs.h rename to include/ndk/obfuncs.h diff --git a/reactos/include/ndk/obtypes.h b/include/ndk/obtypes.h similarity index 100% rename from reactos/include/ndk/obtypes.h rename to include/ndk/obtypes.h diff --git a/reactos/include/ndk/pofuncs.h b/include/ndk/pofuncs.h similarity index 100% rename from reactos/include/ndk/pofuncs.h rename to include/ndk/pofuncs.h diff --git a/reactos/include/ndk/potypes.h b/include/ndk/potypes.h similarity index 100% rename from reactos/include/ndk/potypes.h rename to include/ndk/potypes.h diff --git a/reactos/include/ndk/powerpc/ketypes.h b/include/ndk/powerpc/ketypes.h similarity index 100% rename from reactos/include/ndk/powerpc/ketypes.h rename to include/ndk/powerpc/ketypes.h diff --git a/reactos/include/ndk/powerpc/mmtypes.h b/include/ndk/powerpc/mmtypes.h similarity index 100% rename from reactos/include/ndk/powerpc/mmtypes.h rename to include/ndk/powerpc/mmtypes.h diff --git a/reactos/include/ndk/psfuncs.h b/include/ndk/psfuncs.h similarity index 100% rename from reactos/include/ndk/psfuncs.h rename to include/ndk/psfuncs.h diff --git a/reactos/include/ndk/pstypes.h b/include/ndk/pstypes.h similarity index 100% rename from reactos/include/ndk/pstypes.h rename to include/ndk/pstypes.h diff --git a/reactos/include/ndk/readme.txt b/include/ndk/readme.txt similarity index 100% rename from reactos/include/ndk/readme.txt rename to include/ndk/readme.txt diff --git a/reactos/include/ndk/rtlfuncs.h b/include/ndk/rtlfuncs.h similarity index 100% rename from reactos/include/ndk/rtlfuncs.h rename to include/ndk/rtlfuncs.h diff --git a/reactos/include/ndk/rtltypes.h b/include/ndk/rtltypes.h similarity index 100% rename from reactos/include/ndk/rtltypes.h rename to include/ndk/rtltypes.h diff --git a/reactos/include/ndk/sefuncs.h b/include/ndk/sefuncs.h similarity index 100% rename from reactos/include/ndk/sefuncs.h rename to include/ndk/sefuncs.h diff --git a/reactos/include/ndk/setypes.h b/include/ndk/setypes.h similarity index 100% rename from reactos/include/ndk/setypes.h rename to include/ndk/setypes.h diff --git a/reactos/include/ndk/umfuncs.h b/include/ndk/umfuncs.h similarity index 100% rename from reactos/include/ndk/umfuncs.h rename to include/ndk/umfuncs.h diff --git a/reactos/include/ndk/umtypes.h b/include/ndk/umtypes.h similarity index 100% rename from reactos/include/ndk/umtypes.h rename to include/ndk/umtypes.h diff --git a/reactos/include/psdk/README.w32api b/include/psdk/README.w32api similarity index 100% rename from reactos/include/psdk/README.w32api rename to include/psdk/README.w32api diff --git a/reactos/include/psdk/accctrl.h b/include/psdk/accctrl.h similarity index 100% rename from reactos/include/psdk/accctrl.h rename to include/psdk/accctrl.h diff --git a/reactos/include/psdk/aclapi.h b/include/psdk/aclapi.h similarity index 100% rename from reactos/include/psdk/aclapi.h rename to include/psdk/aclapi.h diff --git a/reactos/include/psdk/aclui.h b/include/psdk/aclui.h similarity index 100% rename from reactos/include/psdk/aclui.h rename to include/psdk/aclui.h diff --git a/reactos/include/psdk/activaut.idl b/include/psdk/activaut.idl similarity index 100% rename from reactos/include/psdk/activaut.idl rename to include/psdk/activaut.idl diff --git a/reactos/include/psdk/activdbg.idl b/include/psdk/activdbg.idl similarity index 100% rename from reactos/include/psdk/activdbg.idl rename to include/psdk/activdbg.idl diff --git a/reactos/include/psdk/activscp.idl b/include/psdk/activscp.idl similarity index 100% rename from reactos/include/psdk/activscp.idl rename to include/psdk/activscp.idl diff --git a/reactos/include/psdk/adshlp.h b/include/psdk/adshlp.h similarity index 100% rename from reactos/include/psdk/adshlp.h rename to include/psdk/adshlp.h diff --git a/reactos/include/psdk/advpub.h b/include/psdk/advpub.h similarity index 100% rename from reactos/include/psdk/advpub.h rename to include/psdk/advpub.h diff --git a/reactos/include/psdk/af_irda.h b/include/psdk/af_irda.h similarity index 100% rename from reactos/include/psdk/af_irda.h rename to include/psdk/af_irda.h diff --git a/reactos/include/psdk/afxres.h b/include/psdk/afxres.h similarity index 100% rename from reactos/include/psdk/afxres.h rename to include/psdk/afxres.h diff --git a/reactos/include/psdk/appmgmt.h b/include/psdk/appmgmt.h similarity index 100% rename from reactos/include/psdk/appmgmt.h rename to include/psdk/appmgmt.h diff --git a/reactos/include/psdk/authz.h b/include/psdk/authz.h similarity index 100% rename from reactos/include/psdk/authz.h rename to include/psdk/authz.h diff --git a/reactos/include/psdk/basetsd.h b/include/psdk/basetsd.h similarity index 100% rename from reactos/include/psdk/basetsd.h rename to include/psdk/basetsd.h diff --git a/reactos/include/psdk/basetyps.h b/include/psdk/basetyps.h similarity index 100% rename from reactos/include/psdk/basetyps.h rename to include/psdk/basetyps.h diff --git a/reactos/include/psdk/bcrypt.h b/include/psdk/bcrypt.h similarity index 100% rename from reactos/include/psdk/bcrypt.h rename to include/psdk/bcrypt.h diff --git a/reactos/include/psdk/cderr.h b/include/psdk/cderr.h similarity index 100% rename from reactos/include/psdk/cderr.h rename to include/psdk/cderr.h diff --git a/reactos/include/psdk/cguid.h b/include/psdk/cguid.h similarity index 100% rename from reactos/include/psdk/cguid.h rename to include/psdk/cguid.h diff --git a/reactos/include/psdk/clusapi.h b/include/psdk/clusapi.h similarity index 100% rename from reactos/include/psdk/clusapi.h rename to include/psdk/clusapi.h diff --git a/reactos/include/psdk/comcat.idl b/include/psdk/comcat.idl similarity index 100% rename from reactos/include/psdk/comcat.idl rename to include/psdk/comcat.idl diff --git a/reactos/include/psdk/commctrl.h b/include/psdk/commctrl.h similarity index 100% rename from reactos/include/psdk/commctrl.h rename to include/psdk/commctrl.h diff --git a/reactos/include/psdk/commdlg.h b/include/psdk/commdlg.h similarity index 100% rename from reactos/include/psdk/commdlg.h rename to include/psdk/commdlg.h diff --git a/reactos/include/psdk/common.ver b/include/psdk/common.ver similarity index 100% rename from reactos/include/psdk/common.ver rename to include/psdk/common.ver diff --git a/reactos/include/psdk/control.idl b/include/psdk/control.idl similarity index 100% rename from reactos/include/psdk/control.idl rename to include/psdk/control.idl diff --git a/reactos/include/psdk/cor.h b/include/psdk/cor.h similarity index 100% rename from reactos/include/psdk/cor.h rename to include/psdk/cor.h diff --git a/reactos/include/psdk/corerror.h b/include/psdk/corerror.h similarity index 100% rename from reactos/include/psdk/corerror.h rename to include/psdk/corerror.h diff --git a/reactos/include/psdk/corhdr.h b/include/psdk/corhdr.h similarity index 100% rename from reactos/include/psdk/corhdr.h rename to include/psdk/corhdr.h diff --git a/reactos/include/psdk/cpl.h b/include/psdk/cpl.h similarity index 100% rename from reactos/include/psdk/cpl.h rename to include/psdk/cpl.h diff --git a/reactos/include/psdk/cplext.h b/include/psdk/cplext.h similarity index 100% rename from reactos/include/psdk/cplext.h rename to include/psdk/cplext.h diff --git a/reactos/include/psdk/cryptuiapi.h b/include/psdk/cryptuiapi.h similarity index 100% rename from reactos/include/psdk/cryptuiapi.h rename to include/psdk/cryptuiapi.h diff --git a/reactos/include/psdk/custcntl.h b/include/psdk/custcntl.h similarity index 100% rename from reactos/include/psdk/custcntl.h rename to include/psdk/custcntl.h diff --git a/reactos/include/psdk/cvconst.h b/include/psdk/cvconst.h similarity index 100% rename from reactos/include/psdk/cvconst.h rename to include/psdk/cvconst.h diff --git a/reactos/include/psdk/d3d.h b/include/psdk/d3d.h similarity index 100% rename from reactos/include/psdk/d3d.h rename to include/psdk/d3d.h diff --git a/reactos/include/psdk/d3d8.h b/include/psdk/d3d8.h similarity index 100% rename from reactos/include/psdk/d3d8.h rename to include/psdk/d3d8.h diff --git a/reactos/include/psdk/d3d8types.h b/include/psdk/d3d8types.h similarity index 100% rename from reactos/include/psdk/d3d8types.h rename to include/psdk/d3d8types.h diff --git a/reactos/include/psdk/d3d9.h b/include/psdk/d3d9.h similarity index 100% rename from reactos/include/psdk/d3d9.h rename to include/psdk/d3d9.h diff --git a/reactos/include/psdk/d3d9types.h b/include/psdk/d3d9types.h similarity index 100% rename from reactos/include/psdk/d3d9types.h rename to include/psdk/d3d9types.h diff --git a/reactos/include/psdk/d3drm.h b/include/psdk/d3drm.h similarity index 100% rename from reactos/include/psdk/d3drm.h rename to include/psdk/d3drm.h diff --git a/reactos/include/psdk/d3drmdef.h b/include/psdk/d3drmdef.h similarity index 100% rename from reactos/include/psdk/d3drmdef.h rename to include/psdk/d3drmdef.h diff --git a/reactos/include/psdk/d3dtypes.h b/include/psdk/d3dtypes.h similarity index 100% rename from reactos/include/psdk/d3dtypes.h rename to include/psdk/d3dtypes.h diff --git a/reactos/include/psdk/d3dx8core.h b/include/psdk/d3dx8core.h similarity index 100% rename from reactos/include/psdk/d3dx8core.h rename to include/psdk/d3dx8core.h diff --git a/reactos/include/psdk/dbghelp.h b/include/psdk/dbghelp.h similarity index 100% rename from reactos/include/psdk/dbghelp.h rename to include/psdk/dbghelp.h diff --git a/reactos/include/psdk/dbinit.idl b/include/psdk/dbinit.idl similarity index 100% rename from reactos/include/psdk/dbinit.idl rename to include/psdk/dbinit.idl diff --git a/reactos/include/psdk/dbprop.idl b/include/psdk/dbprop.idl similarity index 100% rename from reactos/include/psdk/dbprop.idl rename to include/psdk/dbprop.idl diff --git a/reactos/include/psdk/dbs.idl b/include/psdk/dbs.idl similarity index 100% rename from reactos/include/psdk/dbs.idl rename to include/psdk/dbs.idl diff --git a/reactos/include/psdk/dbt.h b/include/psdk/dbt.h similarity index 100% rename from reactos/include/psdk/dbt.h rename to include/psdk/dbt.h diff --git a/reactos/include/psdk/dciddi.h b/include/psdk/dciddi.h similarity index 100% rename from reactos/include/psdk/dciddi.h rename to include/psdk/dciddi.h diff --git a/reactos/include/psdk/dciman.h b/include/psdk/dciman.h similarity index 100% rename from reactos/include/psdk/dciman.h rename to include/psdk/dciman.h diff --git a/reactos/include/psdk/dde.h b/include/psdk/dde.h similarity index 100% rename from reactos/include/psdk/dde.h rename to include/psdk/dde.h diff --git a/reactos/include/psdk/ddeml.h b/include/psdk/ddeml.h similarity index 100% rename from reactos/include/psdk/ddeml.h rename to include/psdk/ddeml.h diff --git a/reactos/include/psdk/ddrawgdi.h b/include/psdk/ddrawgdi.h similarity index 100% rename from reactos/include/psdk/ddrawgdi.h rename to include/psdk/ddrawgdi.h diff --git a/reactos/include/psdk/devenum.idl b/include/psdk/devenum.idl similarity index 100% rename from reactos/include/psdk/devenum.idl rename to include/psdk/devenum.idl diff --git a/reactos/include/psdk/devguid.h b/include/psdk/devguid.h similarity index 100% rename from reactos/include/psdk/devguid.h rename to include/psdk/devguid.h diff --git a/reactos/include/psdk/dhcpcapi.h b/include/psdk/dhcpcapi.h similarity index 100% rename from reactos/include/psdk/dhcpcapi.h rename to include/psdk/dhcpcapi.h diff --git a/reactos/include/psdk/dhcpcsdk.h b/include/psdk/dhcpcsdk.h similarity index 100% rename from reactos/include/psdk/dhcpcsdk.h rename to include/psdk/dhcpcsdk.h diff --git a/reactos/include/psdk/digitalv.h b/include/psdk/digitalv.h similarity index 100% rename from reactos/include/psdk/digitalv.h rename to include/psdk/digitalv.h diff --git a/reactos/include/psdk/dimm.idl b/include/psdk/dimm.idl similarity index 100% rename from reactos/include/psdk/dimm.idl rename to include/psdk/dimm.idl diff --git a/reactos/include/psdk/dinput.h b/include/psdk/dinput.h similarity index 100% rename from reactos/include/psdk/dinput.h rename to include/psdk/dinput.h diff --git a/reactos/include/psdk/dispex.idl b/include/psdk/dispex.idl similarity index 100% rename from reactos/include/psdk/dispex.idl rename to include/psdk/dispex.idl diff --git a/reactos/include/psdk/dlgs.h b/include/psdk/dlgs.h similarity index 100% rename from reactos/include/psdk/dlgs.h rename to include/psdk/dlgs.h diff --git a/reactos/include/psdk/docobj.idl b/include/psdk/docobj.idl similarity index 100% rename from reactos/include/psdk/docobj.idl rename to include/psdk/docobj.idl diff --git a/reactos/include/psdk/downloadmgr.idl b/include/psdk/downloadmgr.idl similarity index 100% rename from reactos/include/psdk/downloadmgr.idl rename to include/psdk/downloadmgr.idl diff --git a/reactos/include/psdk/dplay.h b/include/psdk/dplay.h similarity index 100% rename from reactos/include/psdk/dplay.h rename to include/psdk/dplay.h diff --git a/reactos/include/psdk/dplobby.h b/include/psdk/dplobby.h similarity index 100% rename from reactos/include/psdk/dplobby.h rename to include/psdk/dplobby.h diff --git a/reactos/include/psdk/dsdriver.h b/include/psdk/dsdriver.h similarity index 100% rename from reactos/include/psdk/dsdriver.h rename to include/psdk/dsdriver.h diff --git a/reactos/include/psdk/dsgetdc.h b/include/psdk/dsgetdc.h similarity index 100% rename from reactos/include/psdk/dsgetdc.h rename to include/psdk/dsgetdc.h diff --git a/reactos/include/psdk/dsound.h b/include/psdk/dsound.h similarity index 100% rename from reactos/include/psdk/dsound.h rename to include/psdk/dsound.h diff --git a/reactos/include/psdk/dsrole.h b/include/psdk/dsrole.h similarity index 100% rename from reactos/include/psdk/dsrole.h rename to include/psdk/dsrole.h diff --git a/reactos/include/psdk/dvdevcod.h b/include/psdk/dvdevcod.h similarity index 100% rename from reactos/include/psdk/dvdevcod.h rename to include/psdk/dvdevcod.h diff --git a/reactos/include/psdk/dvdmedia.h b/include/psdk/dvdmedia.h similarity index 100% rename from reactos/include/psdk/dvdmedia.h rename to include/psdk/dvdmedia.h diff --git a/reactos/include/psdk/dyngraph.idl b/include/psdk/dyngraph.idl similarity index 100% rename from reactos/include/psdk/dyngraph.idl rename to include/psdk/dyngraph.idl diff --git a/reactos/include/psdk/edevdefs.h b/include/psdk/edevdefs.h similarity index 100% rename from reactos/include/psdk/edevdefs.h rename to include/psdk/edevdefs.h diff --git a/reactos/include/psdk/errorrep.h b/include/psdk/errorrep.h similarity index 100% rename from reactos/include/psdk/errorrep.h rename to include/psdk/errorrep.h diff --git a/reactos/include/psdk/evntrace.h b/include/psdk/evntrace.h similarity index 100% rename from reactos/include/psdk/evntrace.h rename to include/psdk/evntrace.h diff --git a/reactos/include/psdk/exdisp.idl b/include/psdk/exdisp.idl similarity index 100% rename from reactos/include/psdk/exdisp.idl rename to include/psdk/exdisp.idl diff --git a/reactos/include/psdk/exdispid.h b/include/psdk/exdispid.h similarity index 100% rename from reactos/include/psdk/exdispid.h rename to include/psdk/exdispid.h diff --git a/reactos/include/psdk/fci.h b/include/psdk/fci.h similarity index 100% rename from reactos/include/psdk/fci.h rename to include/psdk/fci.h diff --git a/reactos/include/psdk/fdi.h b/include/psdk/fdi.h similarity index 100% rename from reactos/include/psdk/fdi.h rename to include/psdk/fdi.h diff --git a/reactos/include/psdk/fusion.idl b/include/psdk/fusion.idl similarity index 100% rename from reactos/include/psdk/fusion.idl rename to include/psdk/fusion.idl diff --git a/reactos/include/psdk/gdiplus.h b/include/psdk/gdiplus.h similarity index 100% rename from reactos/include/psdk/gdiplus.h rename to include/psdk/gdiplus.h diff --git a/reactos/include/psdk/gdiplusbase.h b/include/psdk/gdiplusbase.h similarity index 100% rename from reactos/include/psdk/gdiplusbase.h rename to include/psdk/gdiplusbase.h diff --git a/reactos/include/psdk/gdiplusbrush.h b/include/psdk/gdiplusbrush.h similarity index 100% rename from reactos/include/psdk/gdiplusbrush.h rename to include/psdk/gdiplusbrush.h diff --git a/reactos/include/psdk/gdipluscolor.h b/include/psdk/gdipluscolor.h similarity index 100% rename from reactos/include/psdk/gdipluscolor.h rename to include/psdk/gdipluscolor.h diff --git a/reactos/include/psdk/gdipluscolormatrix.h b/include/psdk/gdipluscolormatrix.h similarity index 100% rename from reactos/include/psdk/gdipluscolormatrix.h rename to include/psdk/gdipluscolormatrix.h diff --git a/reactos/include/psdk/gdipluseffects.h b/include/psdk/gdipluseffects.h similarity index 100% rename from reactos/include/psdk/gdipluseffects.h rename to include/psdk/gdipluseffects.h diff --git a/reactos/include/psdk/gdiplusenums.h b/include/psdk/gdiplusenums.h similarity index 100% rename from reactos/include/psdk/gdiplusenums.h rename to include/psdk/gdiplusenums.h diff --git a/reactos/include/psdk/gdiplusflat.h b/include/psdk/gdiplusflat.h similarity index 100% rename from reactos/include/psdk/gdiplusflat.h rename to include/psdk/gdiplusflat.h diff --git a/reactos/include/psdk/gdiplusgpstubs.h b/include/psdk/gdiplusgpstubs.h similarity index 100% rename from reactos/include/psdk/gdiplusgpstubs.h rename to include/psdk/gdiplusgpstubs.h diff --git a/reactos/include/psdk/gdiplusgraphics.h b/include/psdk/gdiplusgraphics.h similarity index 100% rename from reactos/include/psdk/gdiplusgraphics.h rename to include/psdk/gdiplusgraphics.h diff --git a/reactos/include/psdk/gdiplusheaders.h b/include/psdk/gdiplusheaders.h similarity index 100% rename from reactos/include/psdk/gdiplusheaders.h rename to include/psdk/gdiplusheaders.h diff --git a/reactos/include/psdk/gdiplusimageattributes.h b/include/psdk/gdiplusimageattributes.h similarity index 100% rename from reactos/include/psdk/gdiplusimageattributes.h rename to include/psdk/gdiplusimageattributes.h diff --git a/reactos/include/psdk/gdiplusimaging.h b/include/psdk/gdiplusimaging.h similarity index 100% rename from reactos/include/psdk/gdiplusimaging.h rename to include/psdk/gdiplusimaging.h diff --git a/reactos/include/psdk/gdiplusinit.h b/include/psdk/gdiplusinit.h similarity index 100% rename from reactos/include/psdk/gdiplusinit.h rename to include/psdk/gdiplusinit.h diff --git a/reactos/include/psdk/gdipluslinecaps.h b/include/psdk/gdipluslinecaps.h similarity index 100% rename from reactos/include/psdk/gdipluslinecaps.h rename to include/psdk/gdipluslinecaps.h diff --git a/reactos/include/psdk/gdiplusmatrix.h b/include/psdk/gdiplusmatrix.h similarity index 100% rename from reactos/include/psdk/gdiplusmatrix.h rename to include/psdk/gdiplusmatrix.h diff --git a/reactos/include/psdk/gdiplusmem.h b/include/psdk/gdiplusmem.h similarity index 100% rename from reactos/include/psdk/gdiplusmem.h rename to include/psdk/gdiplusmem.h diff --git a/reactos/include/psdk/gdiplusmetafile.h b/include/psdk/gdiplusmetafile.h similarity index 100% rename from reactos/include/psdk/gdiplusmetafile.h rename to include/psdk/gdiplusmetafile.h diff --git a/reactos/include/psdk/gdiplusmetaheader.h b/include/psdk/gdiplusmetaheader.h similarity index 100% rename from reactos/include/psdk/gdiplusmetaheader.h rename to include/psdk/gdiplusmetaheader.h diff --git a/reactos/include/psdk/gdipluspath.h b/include/psdk/gdipluspath.h similarity index 100% rename from reactos/include/psdk/gdipluspath.h rename to include/psdk/gdipluspath.h diff --git a/reactos/include/psdk/gdipluspen.h b/include/psdk/gdipluspen.h similarity index 100% rename from reactos/include/psdk/gdipluspen.h rename to include/psdk/gdipluspen.h diff --git a/reactos/include/psdk/gdipluspixelformats.h b/include/psdk/gdipluspixelformats.h similarity index 100% rename from reactos/include/psdk/gdipluspixelformats.h rename to include/psdk/gdipluspixelformats.h diff --git a/reactos/include/psdk/gdiplusstringformat.h b/include/psdk/gdiplusstringformat.h similarity index 100% rename from reactos/include/psdk/gdiplusstringformat.h rename to include/psdk/gdiplusstringformat.h diff --git a/reactos/include/psdk/gdiplustypes.h b/include/psdk/gdiplustypes.h similarity index 100% rename from reactos/include/psdk/gdiplustypes.h rename to include/psdk/gdiplustypes.h diff --git a/reactos/include/psdk/guiddef.h b/include/psdk/guiddef.h similarity index 100% rename from reactos/include/psdk/guiddef.h rename to include/psdk/guiddef.h diff --git a/reactos/include/psdk/hlguids.h b/include/psdk/hlguids.h similarity index 100% rename from reactos/include/psdk/hlguids.h rename to include/psdk/hlguids.h diff --git a/reactos/include/psdk/hlink.idl b/include/psdk/hlink.idl similarity index 100% rename from reactos/include/psdk/hlink.idl rename to include/psdk/hlink.idl diff --git a/reactos/include/psdk/htiframe.idl b/include/psdk/htiframe.idl similarity index 100% rename from reactos/include/psdk/htiframe.idl rename to include/psdk/htiframe.idl diff --git a/reactos/include/psdk/htmlhelp.h b/include/psdk/htmlhelp.h similarity index 100% rename from reactos/include/psdk/htmlhelp.h rename to include/psdk/htmlhelp.h diff --git a/reactos/include/psdk/httpext.h b/include/psdk/httpext.h similarity index 100% rename from reactos/include/psdk/httpext.h rename to include/psdk/httpext.h diff --git a/reactos/include/psdk/i_cryptasn1tls.h b/include/psdk/i_cryptasn1tls.h similarity index 100% rename from reactos/include/psdk/i_cryptasn1tls.h rename to include/psdk/i_cryptasn1tls.h diff --git a/reactos/include/psdk/iads.idl b/include/psdk/iads.idl similarity index 100% rename from reactos/include/psdk/iads.idl rename to include/psdk/iads.idl diff --git a/reactos/include/psdk/icm.h b/include/psdk/icm.h similarity index 100% rename from reactos/include/psdk/icm.h rename to include/psdk/icm.h diff --git a/reactos/include/psdk/icmpapi.h b/include/psdk/icmpapi.h similarity index 100% rename from reactos/include/psdk/icmpapi.h rename to include/psdk/icmpapi.h diff --git a/reactos/include/psdk/idispids.h b/include/psdk/idispids.h similarity index 100% rename from reactos/include/psdk/idispids.h rename to include/psdk/idispids.h diff --git a/reactos/include/psdk/idndl.h b/include/psdk/idndl.h similarity index 100% rename from reactos/include/psdk/idndl.h rename to include/psdk/idndl.h diff --git a/reactos/include/psdk/imagehlp.h b/include/psdk/imagehlp.h similarity index 100% rename from reactos/include/psdk/imagehlp.h rename to include/psdk/imagehlp.h diff --git a/reactos/include/psdk/imm.h b/include/psdk/imm.h similarity index 100% rename from reactos/include/psdk/imm.h rename to include/psdk/imm.h diff --git a/reactos/include/psdk/imnact.idl b/include/psdk/imnact.idl similarity index 100% rename from reactos/include/psdk/imnact.idl rename to include/psdk/imnact.idl diff --git a/reactos/include/psdk/imnxport.idl b/include/psdk/imnxport.idl similarity index 100% rename from reactos/include/psdk/imnxport.idl rename to include/psdk/imnxport.idl diff --git a/reactos/include/psdk/in6addr.h b/include/psdk/in6addr.h similarity index 100% rename from reactos/include/psdk/in6addr.h rename to include/psdk/in6addr.h diff --git a/reactos/include/psdk/inaddr.h b/include/psdk/inaddr.h similarity index 100% rename from reactos/include/psdk/inaddr.h rename to include/psdk/inaddr.h diff --git a/reactos/include/psdk/indexsrv.idl b/include/psdk/indexsrv.idl similarity index 100% rename from reactos/include/psdk/indexsrv.idl rename to include/psdk/indexsrv.idl diff --git a/reactos/include/psdk/initguid.h b/include/psdk/initguid.h similarity index 100% rename from reactos/include/psdk/initguid.h rename to include/psdk/initguid.h diff --git a/reactos/include/psdk/intrin.h b/include/psdk/intrin.h similarity index 100% rename from reactos/include/psdk/intrin.h rename to include/psdk/intrin.h diff --git a/reactos/include/psdk/intrin_arm.h b/include/psdk/intrin_arm.h similarity index 100% rename from reactos/include/psdk/intrin_arm.h rename to include/psdk/intrin_arm.h diff --git a/reactos/include/psdk/intrin_ppc.h b/include/psdk/intrin_ppc.h similarity index 100% rename from reactos/include/psdk/intrin_ppc.h rename to include/psdk/intrin_ppc.h diff --git a/reactos/include/psdk/intrin_x86.h b/include/psdk/intrin_x86.h similarity index 100% rename from reactos/include/psdk/intrin_x86.h rename to include/psdk/intrin_x86.h diff --git a/reactos/include/psdk/intrin_x86_64.h b/include/psdk/intrin_x86_64.h similarity index 100% rename from reactos/include/psdk/intrin_x86_64.h rename to include/psdk/intrin_x86_64.h diff --git a/reactos/include/psdk/intshcut.h b/include/psdk/intshcut.h similarity index 100% rename from reactos/include/psdk/intshcut.h rename to include/psdk/intshcut.h diff --git a/reactos/include/psdk/ipexport.h b/include/psdk/ipexport.h similarity index 100% rename from reactos/include/psdk/ipexport.h rename to include/psdk/ipexport.h diff --git a/reactos/include/psdk/iphlpapi.h b/include/psdk/iphlpapi.h similarity index 100% rename from reactos/include/psdk/iphlpapi.h rename to include/psdk/iphlpapi.h diff --git a/reactos/include/psdk/ipifcons.h b/include/psdk/ipifcons.h similarity index 100% rename from reactos/include/psdk/ipifcons.h rename to include/psdk/ipifcons.h diff --git a/reactos/include/psdk/iprtrmib.h b/include/psdk/iprtrmib.h similarity index 100% rename from reactos/include/psdk/iprtrmib.h rename to include/psdk/iprtrmib.h diff --git a/reactos/include/psdk/iptypes.h b/include/psdk/iptypes.h similarity index 100% rename from reactos/include/psdk/iptypes.h rename to include/psdk/iptypes.h diff --git a/reactos/include/psdk/isguids.h b/include/psdk/isguids.h similarity index 100% rename from reactos/include/psdk/isguids.h rename to include/psdk/isguids.h diff --git a/reactos/include/psdk/ks.h b/include/psdk/ks.h similarity index 100% rename from reactos/include/psdk/ks.h rename to include/psdk/ks.h diff --git a/reactos/include/psdk/ksmedia.h b/include/psdk/ksmedia.h similarity index 100% rename from reactos/include/psdk/ksmedia.h rename to include/psdk/ksmedia.h diff --git a/reactos/include/psdk/largeint.h b/include/psdk/largeint.h similarity index 100% rename from reactos/include/psdk/largeint.h rename to include/psdk/largeint.h diff --git a/reactos/include/psdk/lm.h b/include/psdk/lm.h similarity index 100% rename from reactos/include/psdk/lm.h rename to include/psdk/lm.h diff --git a/reactos/include/psdk/lmaccess.h b/include/psdk/lmaccess.h similarity index 100% rename from reactos/include/psdk/lmaccess.h rename to include/psdk/lmaccess.h diff --git a/reactos/include/psdk/lmalert.h b/include/psdk/lmalert.h similarity index 100% rename from reactos/include/psdk/lmalert.h rename to include/psdk/lmalert.h diff --git a/reactos/include/psdk/lmapibuf.h b/include/psdk/lmapibuf.h similarity index 100% rename from reactos/include/psdk/lmapibuf.h rename to include/psdk/lmapibuf.h diff --git a/reactos/include/psdk/lmat.h b/include/psdk/lmat.h similarity index 100% rename from reactos/include/psdk/lmat.h rename to include/psdk/lmat.h diff --git a/reactos/include/psdk/lmaudit.h b/include/psdk/lmaudit.h similarity index 100% rename from reactos/include/psdk/lmaudit.h rename to include/psdk/lmaudit.h diff --git a/reactos/include/psdk/lmchdev.h b/include/psdk/lmchdev.h similarity index 100% rename from reactos/include/psdk/lmchdev.h rename to include/psdk/lmchdev.h diff --git a/reactos/include/psdk/lmconfig.h b/include/psdk/lmconfig.h similarity index 100% rename from reactos/include/psdk/lmconfig.h rename to include/psdk/lmconfig.h diff --git a/reactos/include/psdk/lmcons.h b/include/psdk/lmcons.h similarity index 100% rename from reactos/include/psdk/lmcons.h rename to include/psdk/lmcons.h diff --git a/reactos/include/psdk/lmerr.h b/include/psdk/lmerr.h similarity index 100% rename from reactos/include/psdk/lmerr.h rename to include/psdk/lmerr.h diff --git a/reactos/include/psdk/lmerrlog.h b/include/psdk/lmerrlog.h similarity index 100% rename from reactos/include/psdk/lmerrlog.h rename to include/psdk/lmerrlog.h diff --git a/reactos/include/psdk/lmjoin.h b/include/psdk/lmjoin.h similarity index 100% rename from reactos/include/psdk/lmjoin.h rename to include/psdk/lmjoin.h diff --git a/reactos/include/psdk/lmmsg.h b/include/psdk/lmmsg.h similarity index 100% rename from reactos/include/psdk/lmmsg.h rename to include/psdk/lmmsg.h diff --git a/reactos/include/psdk/lmremutl.h b/include/psdk/lmremutl.h similarity index 100% rename from reactos/include/psdk/lmremutl.h rename to include/psdk/lmremutl.h diff --git a/reactos/include/psdk/lmrepl.h b/include/psdk/lmrepl.h similarity index 100% rename from reactos/include/psdk/lmrepl.h rename to include/psdk/lmrepl.h diff --git a/reactos/include/psdk/lmserver.h b/include/psdk/lmserver.h similarity index 100% rename from reactos/include/psdk/lmserver.h rename to include/psdk/lmserver.h diff --git a/reactos/include/psdk/lmshare.h b/include/psdk/lmshare.h similarity index 100% rename from reactos/include/psdk/lmshare.h rename to include/psdk/lmshare.h diff --git a/reactos/include/psdk/lmsname.h b/include/psdk/lmsname.h similarity index 100% rename from reactos/include/psdk/lmsname.h rename to include/psdk/lmsname.h diff --git a/reactos/include/psdk/lmstats.h b/include/psdk/lmstats.h similarity index 100% rename from reactos/include/psdk/lmstats.h rename to include/psdk/lmstats.h diff --git a/reactos/include/psdk/lmsvc.h b/include/psdk/lmsvc.h similarity index 100% rename from reactos/include/psdk/lmsvc.h rename to include/psdk/lmsvc.h diff --git a/reactos/include/psdk/lmuse.h b/include/psdk/lmuse.h similarity index 100% rename from reactos/include/psdk/lmuse.h rename to include/psdk/lmuse.h diff --git a/reactos/include/psdk/lmuseflg.h b/include/psdk/lmuseflg.h similarity index 100% rename from reactos/include/psdk/lmuseflg.h rename to include/psdk/lmuseflg.h diff --git a/reactos/include/psdk/lmwksta.h b/include/psdk/lmwksta.h similarity index 100% rename from reactos/include/psdk/lmwksta.h rename to include/psdk/lmwksta.h diff --git a/reactos/include/psdk/lzexpand.h b/include/psdk/lzexpand.h similarity index 100% rename from reactos/include/psdk/lzexpand.h rename to include/psdk/lzexpand.h diff --git a/reactos/include/psdk/mapi.h b/include/psdk/mapi.h similarity index 100% rename from reactos/include/psdk/mapi.h rename to include/psdk/mapi.h diff --git a/reactos/include/psdk/mapicode.h b/include/psdk/mapicode.h similarity index 100% rename from reactos/include/psdk/mapicode.h rename to include/psdk/mapicode.h diff --git a/reactos/include/psdk/mapidefs.h b/include/psdk/mapidefs.h similarity index 100% rename from reactos/include/psdk/mapidefs.h rename to include/psdk/mapidefs.h diff --git a/reactos/include/psdk/mapiform.h b/include/psdk/mapiform.h similarity index 100% rename from reactos/include/psdk/mapiform.h rename to include/psdk/mapiform.h diff --git a/reactos/include/psdk/mapiguid.h b/include/psdk/mapiguid.h similarity index 100% rename from reactos/include/psdk/mapiguid.h rename to include/psdk/mapiguid.h diff --git a/reactos/include/psdk/mapitags.h b/include/psdk/mapitags.h similarity index 100% rename from reactos/include/psdk/mapitags.h rename to include/psdk/mapitags.h diff --git a/reactos/include/psdk/mapiutil.h b/include/psdk/mapiutil.h similarity index 100% rename from reactos/include/psdk/mapiutil.h rename to include/psdk/mapiutil.h diff --git a/reactos/include/psdk/mapival.h b/include/psdk/mapival.h similarity index 100% rename from reactos/include/psdk/mapival.h rename to include/psdk/mapival.h diff --git a/reactos/include/psdk/mapix.h b/include/psdk/mapix.h similarity index 100% rename from reactos/include/psdk/mapix.h rename to include/psdk/mapix.h diff --git a/reactos/include/psdk/mciavi.h b/include/psdk/mciavi.h similarity index 100% rename from reactos/include/psdk/mciavi.h rename to include/psdk/mciavi.h diff --git a/reactos/include/psdk/mcx.h b/include/psdk/mcx.h similarity index 100% rename from reactos/include/psdk/mcx.h rename to include/psdk/mcx.h diff --git a/reactos/include/psdk/mgmtapi.h b/include/psdk/mgmtapi.h similarity index 100% rename from reactos/include/psdk/mgmtapi.h rename to include/psdk/mgmtapi.h diff --git a/reactos/include/psdk/midles.h b/include/psdk/midles.h similarity index 100% rename from reactos/include/psdk/midles.h rename to include/psdk/midles.h diff --git a/reactos/include/psdk/mimeinfo.idl b/include/psdk/mimeinfo.idl similarity index 100% rename from reactos/include/psdk/mimeinfo.idl rename to include/psdk/mimeinfo.idl diff --git a/reactos/include/psdk/mimeole.idl b/include/psdk/mimeole.idl similarity index 100% rename from reactos/include/psdk/mimeole.idl rename to include/psdk/mimeole.idl diff --git a/reactos/include/psdk/mlang.idl b/include/psdk/mlang.idl similarity index 100% rename from reactos/include/psdk/mlang.idl rename to include/psdk/mlang.idl diff --git a/reactos/include/psdk/mmddk.h b/include/psdk/mmddk.h similarity index 100% rename from reactos/include/psdk/mmddk.h rename to include/psdk/mmddk.h diff --git a/reactos/include/psdk/mmreg.h b/include/psdk/mmreg.h similarity index 100% rename from reactos/include/psdk/mmreg.h rename to include/psdk/mmreg.h diff --git a/reactos/include/psdk/mmsystem.h b/include/psdk/mmsystem.h similarity index 100% rename from reactos/include/psdk/mmsystem.h rename to include/psdk/mmsystem.h diff --git a/reactos/include/psdk/mprapi.h b/include/psdk/mprapi.h similarity index 100% rename from reactos/include/psdk/mprapi.h rename to include/psdk/mprapi.h diff --git a/reactos/include/psdk/msacm.h b/include/psdk/msacm.h similarity index 100% rename from reactos/include/psdk/msacm.h rename to include/psdk/msacm.h diff --git a/reactos/include/psdk/mscat.h b/include/psdk/mscat.h similarity index 100% rename from reactos/include/psdk/mscat.h rename to include/psdk/mscat.h diff --git a/reactos/include/psdk/mscoree.idl b/include/psdk/mscoree.idl similarity index 100% rename from reactos/include/psdk/mscoree.idl rename to include/psdk/mscoree.idl diff --git a/reactos/include/psdk/mshtmcid.h b/include/psdk/mshtmcid.h similarity index 100% rename from reactos/include/psdk/mshtmcid.h rename to include/psdk/mshtmcid.h diff --git a/reactos/include/psdk/mshtmdid.h b/include/psdk/mshtmdid.h similarity index 100% rename from reactos/include/psdk/mshtmdid.h rename to include/psdk/mshtmdid.h diff --git a/reactos/include/psdk/mshtmhst.idl b/include/psdk/mshtmhst.idl similarity index 100% rename from reactos/include/psdk/mshtmhst.idl rename to include/psdk/mshtmhst.idl diff --git a/reactos/include/psdk/mshtml.idl b/include/psdk/mshtml.idl similarity index 100% rename from reactos/include/psdk/mshtml.idl rename to include/psdk/mshtml.idl diff --git a/reactos/include/psdk/msi.h b/include/psdk/msi.h similarity index 100% rename from reactos/include/psdk/msi.h rename to include/psdk/msi.h diff --git a/reactos/include/psdk/msidefs.h b/include/psdk/msidefs.h similarity index 100% rename from reactos/include/psdk/msidefs.h rename to include/psdk/msidefs.h diff --git a/reactos/include/psdk/msiquery.h b/include/psdk/msiquery.h similarity index 100% rename from reactos/include/psdk/msiquery.h rename to include/psdk/msiquery.h diff --git a/reactos/include/psdk/mssip.h b/include/psdk/mssip.h similarity index 100% rename from reactos/include/psdk/mssip.h rename to include/psdk/mssip.h diff --git a/reactos/include/psdk/mstask.idl b/include/psdk/mstask.idl similarity index 100% rename from reactos/include/psdk/mstask.idl rename to include/psdk/mstask.idl diff --git a/reactos/include/psdk/mswsock.h b/include/psdk/mswsock.h similarity index 100% rename from reactos/include/psdk/mswsock.h rename to include/psdk/mswsock.h diff --git a/reactos/include/psdk/msxml.idl b/include/psdk/msxml.idl similarity index 100% rename from reactos/include/psdk/msxml.idl rename to include/psdk/msxml.idl diff --git a/reactos/include/psdk/msxml2.idl b/include/psdk/msxml2.idl similarity index 100% rename from reactos/include/psdk/msxml2.idl rename to include/psdk/msxml2.idl diff --git a/reactos/include/psdk/msxml2did.h b/include/psdk/msxml2did.h similarity index 100% rename from reactos/include/psdk/msxml2did.h rename to include/psdk/msxml2did.h diff --git a/reactos/include/psdk/msxmldid.h b/include/psdk/msxmldid.h similarity index 100% rename from reactos/include/psdk/msxmldid.h rename to include/psdk/msxmldid.h diff --git a/reactos/include/psdk/multimon.h b/include/psdk/multimon.h similarity index 100% rename from reactos/include/psdk/multimon.h rename to include/psdk/multimon.h diff --git a/reactos/include/psdk/nb30.h b/include/psdk/nb30.h similarity index 100% rename from reactos/include/psdk/nb30.h rename to include/psdk/nb30.h diff --git a/reactos/include/psdk/nddeapi.h b/include/psdk/nddeapi.h similarity index 100% rename from reactos/include/psdk/nddeapi.h rename to include/psdk/nddeapi.h diff --git a/reactos/include/psdk/ndrtypes.h b/include/psdk/ndrtypes.h similarity index 100% rename from reactos/include/psdk/ndrtypes.h rename to include/psdk/ndrtypes.h diff --git a/reactos/include/psdk/netcfgn.h b/include/psdk/netcfgn.h similarity index 100% rename from reactos/include/psdk/netcfgn.h rename to include/psdk/netcfgn.h diff --git a/reactos/include/psdk/netcfgx.h b/include/psdk/netcfgx.h similarity index 100% rename from reactos/include/psdk/netcfgx.h rename to include/psdk/netcfgx.h diff --git a/reactos/include/psdk/netcon.h b/include/psdk/netcon.h similarity index 100% rename from reactos/include/psdk/netcon.h rename to include/psdk/netcon.h diff --git a/reactos/include/psdk/newdev.h b/include/psdk/newdev.h similarity index 100% rename from reactos/include/psdk/newdev.h rename to include/psdk/newdev.h diff --git a/reactos/include/psdk/npapi.h b/include/psdk/npapi.h similarity index 100% rename from reactos/include/psdk/npapi.h rename to include/psdk/npapi.h diff --git a/reactos/include/psdk/nspapi.h b/include/psdk/nspapi.h similarity index 100% rename from reactos/include/psdk/nspapi.h rename to include/psdk/nspapi.h diff --git a/reactos/include/psdk/ntdef.h b/include/psdk/ntdef.h similarity index 100% rename from reactos/include/psdk/ntdef.h rename to include/psdk/ntdef.h diff --git a/reactos/include/psdk/ntdll.h b/include/psdk/ntdll.h similarity index 100% rename from reactos/include/psdk/ntdll.h rename to include/psdk/ntdll.h diff --git a/reactos/include/psdk/ntdsapi.h b/include/psdk/ntdsapi.h similarity index 100% rename from reactos/include/psdk/ntdsapi.h rename to include/psdk/ntdsapi.h diff --git a/reactos/include/psdk/ntgdi.h b/include/psdk/ntgdi.h similarity index 100% rename from reactos/include/psdk/ntgdi.h rename to include/psdk/ntgdi.h diff --git a/reactos/include/psdk/ntldap.h b/include/psdk/ntldap.h similarity index 100% rename from reactos/include/psdk/ntldap.h rename to include/psdk/ntldap.h diff --git a/reactos/include/psdk/ntquery.h b/include/psdk/ntquery.h similarity index 100% rename from reactos/include/psdk/ntquery.h rename to include/psdk/ntquery.h diff --git a/reactos/include/psdk/ntsecapi.h b/include/psdk/ntsecapi.h similarity index 100% rename from reactos/include/psdk/ntsecapi.h rename to include/psdk/ntsecapi.h diff --git a/reactos/include/psdk/ntsecpkg.h b/include/psdk/ntsecpkg.h similarity index 100% rename from reactos/include/psdk/ntsecpkg.h rename to include/psdk/ntsecpkg.h diff --git a/reactos/include/psdk/ntstatus.h b/include/psdk/ntstatus.h similarity index 100% rename from reactos/include/psdk/ntstatus.h rename to include/psdk/ntstatus.h diff --git a/reactos/include/psdk/ntverp.h b/include/psdk/ntverp.h similarity index 100% rename from reactos/include/psdk/ntverp.h rename to include/psdk/ntverp.h diff --git a/reactos/include/psdk/oaidl.idl b/include/psdk/oaidl.idl similarity index 100% rename from reactos/include/psdk/oaidl.idl rename to include/psdk/oaidl.idl diff --git a/reactos/include/psdk/objbase.h b/include/psdk/objbase.h similarity index 100% rename from reactos/include/psdk/objbase.h rename to include/psdk/objbase.h diff --git a/reactos/include/psdk/objfwd.h b/include/psdk/objfwd.h similarity index 100% rename from reactos/include/psdk/objfwd.h rename to include/psdk/objfwd.h diff --git a/reactos/include/psdk/objidl.idl b/include/psdk/objidl.idl similarity index 100% rename from reactos/include/psdk/objidl.idl rename to include/psdk/objidl.idl diff --git a/reactos/include/psdk/objsafe.idl b/include/psdk/objsafe.idl similarity index 100% rename from reactos/include/psdk/objsafe.idl rename to include/psdk/objsafe.idl diff --git a/reactos/include/psdk/objsel.h b/include/psdk/objsel.h similarity index 100% rename from reactos/include/psdk/objsel.h rename to include/psdk/objsel.h diff --git a/reactos/include/psdk/ocidl.idl b/include/psdk/ocidl.idl similarity index 100% rename from reactos/include/psdk/ocidl.idl rename to include/psdk/ocidl.idl diff --git a/reactos/include/psdk/ocmm.idl b/include/psdk/ocmm.idl similarity index 100% rename from reactos/include/psdk/ocmm.idl rename to include/psdk/ocmm.idl diff --git a/reactos/include/psdk/odbcinst.h b/include/psdk/odbcinst.h similarity index 100% rename from reactos/include/psdk/odbcinst.h rename to include/psdk/odbcinst.h diff --git a/reactos/include/psdk/ole.h b/include/psdk/ole.h similarity index 100% rename from reactos/include/psdk/ole.h rename to include/psdk/ole.h diff --git a/reactos/include/psdk/ole2.h b/include/psdk/ole2.h similarity index 100% rename from reactos/include/psdk/ole2.h rename to include/psdk/ole2.h diff --git a/reactos/include/psdk/ole2ver.h b/include/psdk/ole2ver.h similarity index 100% rename from reactos/include/psdk/ole2ver.h rename to include/psdk/ole2ver.h diff --git a/reactos/include/psdk/oleacc.h b/include/psdk/oleacc.h similarity index 100% rename from reactos/include/psdk/oleacc.h rename to include/psdk/oleacc.h diff --git a/reactos/include/psdk/oleacc.idl b/include/psdk/oleacc.idl similarity index 100% rename from reactos/include/psdk/oleacc.idl rename to include/psdk/oleacc.idl diff --git a/reactos/include/psdk/oleauto.h b/include/psdk/oleauto.h similarity index 100% rename from reactos/include/psdk/oleauto.h rename to include/psdk/oleauto.h diff --git a/reactos/include/psdk/olectl.h b/include/psdk/olectl.h similarity index 100% rename from reactos/include/psdk/olectl.h rename to include/psdk/olectl.h diff --git a/reactos/include/psdk/olectlid.h b/include/psdk/olectlid.h similarity index 100% rename from reactos/include/psdk/olectlid.h rename to include/psdk/olectlid.h diff --git a/reactos/include/psdk/oledb.idl b/include/psdk/oledb.idl similarity index 100% rename from reactos/include/psdk/oledb.idl rename to include/psdk/oledb.idl diff --git a/reactos/include/psdk/oledlg.h b/include/psdk/oledlg.h similarity index 100% rename from reactos/include/psdk/oledlg.h rename to include/psdk/oledlg.h diff --git a/reactos/include/psdk/oleidl.idl b/include/psdk/oleidl.idl similarity index 100% rename from reactos/include/psdk/oleidl.idl rename to include/psdk/oleidl.idl diff --git a/reactos/include/psdk/optary.idl b/include/psdk/optary.idl similarity index 100% rename from reactos/include/psdk/optary.idl rename to include/psdk/optary.idl diff --git a/reactos/include/psdk/pbt.h b/include/psdk/pbt.h similarity index 100% rename from reactos/include/psdk/pbt.h rename to include/psdk/pbt.h diff --git a/reactos/include/psdk/pdh.h b/include/psdk/pdh.h similarity index 100% rename from reactos/include/psdk/pdh.h rename to include/psdk/pdh.h diff --git a/reactos/include/psdk/pdhmsg.h b/include/psdk/pdhmsg.h similarity index 100% rename from reactos/include/psdk/pdhmsg.h rename to include/psdk/pdhmsg.h diff --git a/reactos/include/psdk/poppack.h b/include/psdk/poppack.h similarity index 100% rename from reactos/include/psdk/poppack.h rename to include/psdk/poppack.h diff --git a/reactos/include/psdk/powrprof.h b/include/psdk/powrprof.h similarity index 100% rename from reactos/include/psdk/powrprof.h rename to include/psdk/powrprof.h diff --git a/reactos/include/psdk/propidl.idl b/include/psdk/propidl.idl similarity index 100% rename from reactos/include/psdk/propidl.idl rename to include/psdk/propidl.idl diff --git a/reactos/include/psdk/propvarutil.h b/include/psdk/propvarutil.h similarity index 100% rename from reactos/include/psdk/propvarutil.h rename to include/psdk/propvarutil.h diff --git a/reactos/include/psdk/prsht.h b/include/psdk/prsht.h similarity index 100% rename from reactos/include/psdk/prsht.h rename to include/psdk/prsht.h diff --git a/reactos/include/psdk/psapi.h b/include/psdk/psapi.h similarity index 100% rename from reactos/include/psdk/psapi.h rename to include/psdk/psapi.h diff --git a/reactos/include/psdk/psdk.rbuild b/include/psdk/psdk.rbuild similarity index 100% rename from reactos/include/psdk/psdk.rbuild rename to include/psdk/psdk.rbuild diff --git a/reactos/include/psdk/pshpack1.h b/include/psdk/pshpack1.h similarity index 100% rename from reactos/include/psdk/pshpack1.h rename to include/psdk/pshpack1.h diff --git a/reactos/include/psdk/pshpack2.h b/include/psdk/pshpack2.h similarity index 100% rename from reactos/include/psdk/pshpack2.h rename to include/psdk/pshpack2.h diff --git a/reactos/include/psdk/pshpack4.h b/include/psdk/pshpack4.h similarity index 100% rename from reactos/include/psdk/pshpack4.h rename to include/psdk/pshpack4.h diff --git a/reactos/include/psdk/pshpack8.h b/include/psdk/pshpack8.h similarity index 100% rename from reactos/include/psdk/pshpack8.h rename to include/psdk/pshpack8.h diff --git a/reactos/include/psdk/pshpck16.h b/include/psdk/pshpck16.h similarity index 100% rename from reactos/include/psdk/pshpck16.h rename to include/psdk/pshpck16.h diff --git a/reactos/include/psdk/pstore.idl b/include/psdk/pstore.idl similarity index 100% rename from reactos/include/psdk/pstore.idl rename to include/psdk/pstore.idl diff --git a/reactos/include/psdk/qos.h b/include/psdk/qos.h similarity index 100% rename from reactos/include/psdk/qos.h rename to include/psdk/qos.h diff --git a/reactos/include/psdk/rapi.h b/include/psdk/rapi.h similarity index 100% rename from reactos/include/psdk/rapi.h rename to include/psdk/rapi.h diff --git a/reactos/include/psdk/ras.h b/include/psdk/ras.h similarity index 100% rename from reactos/include/psdk/ras.h rename to include/psdk/ras.h diff --git a/reactos/include/psdk/rasdlg.h b/include/psdk/rasdlg.h similarity index 100% rename from reactos/include/psdk/rasdlg.h rename to include/psdk/rasdlg.h diff --git a/reactos/include/psdk/raseapif.h b/include/psdk/raseapif.h similarity index 100% rename from reactos/include/psdk/raseapif.h rename to include/psdk/raseapif.h diff --git a/reactos/include/psdk/raserror.h b/include/psdk/raserror.h similarity index 100% rename from reactos/include/psdk/raserror.h rename to include/psdk/raserror.h diff --git a/reactos/include/psdk/rassapi.h b/include/psdk/rassapi.h similarity index 100% rename from reactos/include/psdk/rassapi.h rename to include/psdk/rassapi.h diff --git a/reactos/include/psdk/rasshost.h b/include/psdk/rasshost.h similarity index 100% rename from reactos/include/psdk/rasshost.h rename to include/psdk/rasshost.h diff --git a/reactos/include/psdk/reason.h b/include/psdk/reason.h similarity index 100% rename from reactos/include/psdk/reason.h rename to include/psdk/reason.h diff --git a/reactos/include/psdk/regstr.h b/include/psdk/regstr.h similarity index 100% rename from reactos/include/psdk/regstr.h rename to include/psdk/regstr.h diff --git a/reactos/include/psdk/richedit.h b/include/psdk/richedit.h similarity index 100% rename from reactos/include/psdk/richedit.h rename to include/psdk/richedit.h diff --git a/reactos/include/psdk/richole.idl b/include/psdk/richole.idl similarity index 100% rename from reactos/include/psdk/richole.idl rename to include/psdk/richole.idl diff --git a/reactos/include/psdk/rpc.h b/include/psdk/rpc.h similarity index 100% rename from reactos/include/psdk/rpc.h rename to include/psdk/rpc.h diff --git a/reactos/include/psdk/rpcasync.h b/include/psdk/rpcasync.h similarity index 100% rename from reactos/include/psdk/rpcasync.h rename to include/psdk/rpcasync.h diff --git a/reactos/include/psdk/rpcdce.h b/include/psdk/rpcdce.h similarity index 100% rename from reactos/include/psdk/rpcdce.h rename to include/psdk/rpcdce.h diff --git a/reactos/include/psdk/rpcdce2.h b/include/psdk/rpcdce2.h similarity index 100% rename from reactos/include/psdk/rpcdce2.h rename to include/psdk/rpcdce2.h diff --git a/reactos/include/psdk/rpcdcep.h b/include/psdk/rpcdcep.h similarity index 100% rename from reactos/include/psdk/rpcdcep.h rename to include/psdk/rpcdcep.h diff --git a/reactos/include/psdk/rpcndr.h b/include/psdk/rpcndr.h similarity index 100% rename from reactos/include/psdk/rpcndr.h rename to include/psdk/rpcndr.h diff --git a/reactos/include/psdk/rpcnsi.h b/include/psdk/rpcnsi.h similarity index 100% rename from reactos/include/psdk/rpcnsi.h rename to include/psdk/rpcnsi.h diff --git a/reactos/include/psdk/rpcnsip.h b/include/psdk/rpcnsip.h similarity index 100% rename from reactos/include/psdk/rpcnsip.h rename to include/psdk/rpcnsip.h diff --git a/reactos/include/psdk/rpcnterr.h b/include/psdk/rpcnterr.h similarity index 100% rename from reactos/include/psdk/rpcnterr.h rename to include/psdk/rpcnterr.h diff --git a/reactos/include/psdk/rpcproxy.h b/include/psdk/rpcproxy.h similarity index 100% rename from reactos/include/psdk/rpcproxy.h rename to include/psdk/rpcproxy.h diff --git a/reactos/include/psdk/schannel.h b/include/psdk/schannel.h similarity index 100% rename from reactos/include/psdk/schannel.h rename to include/psdk/schannel.h diff --git a/reactos/include/psdk/schemadef.h b/include/psdk/schemadef.h similarity index 100% rename from reactos/include/psdk/schemadef.h rename to include/psdk/schemadef.h diff --git a/reactos/include/psdk/schnlsp.h b/include/psdk/schnlsp.h similarity index 100% rename from reactos/include/psdk/schnlsp.h rename to include/psdk/schnlsp.h diff --git a/reactos/include/psdk/scrnsave.h b/include/psdk/scrnsave.h similarity index 100% rename from reactos/include/psdk/scrnsave.h rename to include/psdk/scrnsave.h diff --git a/reactos/include/psdk/sddl.h b/include/psdk/sddl.h similarity index 100% rename from reactos/include/psdk/sddl.h rename to include/psdk/sddl.h diff --git a/reactos/include/psdk/sdkddkver.h b/include/psdk/sdkddkver.h similarity index 100% rename from reactos/include/psdk/sdkddkver.h rename to include/psdk/sdkddkver.h diff --git a/reactos/include/psdk/secext.h b/include/psdk/secext.h similarity index 100% rename from reactos/include/psdk/secext.h rename to include/psdk/secext.h diff --git a/reactos/include/psdk/security.h b/include/psdk/security.h similarity index 100% rename from reactos/include/psdk/security.h rename to include/psdk/security.h diff --git a/reactos/include/psdk/sensapi.h b/include/psdk/sensapi.h similarity index 100% rename from reactos/include/psdk/sensapi.h rename to include/psdk/sensapi.h diff --git a/reactos/include/psdk/sensevts.idl b/include/psdk/sensevts.idl similarity index 100% rename from reactos/include/psdk/sensevts.idl rename to include/psdk/sensevts.idl diff --git a/reactos/include/psdk/servprov.idl b/include/psdk/servprov.idl similarity index 100% rename from reactos/include/psdk/servprov.idl rename to include/psdk/servprov.idl diff --git a/reactos/include/psdk/setupapi.h b/include/psdk/setupapi.h similarity index 100% rename from reactos/include/psdk/setupapi.h rename to include/psdk/setupapi.h diff --git a/reactos/include/psdk/sfc.h b/include/psdk/sfc.h similarity index 100% rename from reactos/include/psdk/sfc.h rename to include/psdk/sfc.h diff --git a/reactos/include/psdk/shellapi.h b/include/psdk/shellapi.h similarity index 100% rename from reactos/include/psdk/shellapi.h rename to include/psdk/shellapi.h diff --git a/reactos/include/psdk/shldisp.idl b/include/psdk/shldisp.idl similarity index 100% rename from reactos/include/psdk/shldisp.idl rename to include/psdk/shldisp.idl diff --git a/reactos/include/psdk/shlguid.h b/include/psdk/shlguid.h similarity index 100% rename from reactos/include/psdk/shlguid.h rename to include/psdk/shlguid.h diff --git a/reactos/include/psdk/shlobj.h b/include/psdk/shlobj.h similarity index 100% rename from reactos/include/psdk/shlobj.h rename to include/psdk/shlobj.h diff --git a/reactos/include/psdk/shlwapi.h b/include/psdk/shlwapi.h similarity index 100% rename from reactos/include/psdk/shlwapi.h rename to include/psdk/shlwapi.h diff --git a/reactos/include/psdk/shobjidl.idl b/include/psdk/shobjidl.idl similarity index 100% rename from reactos/include/psdk/shobjidl.idl rename to include/psdk/shobjidl.idl diff --git a/reactos/include/psdk/shtypes.idl b/include/psdk/shtypes.idl similarity index 100% rename from reactos/include/psdk/shtypes.idl rename to include/psdk/shtypes.idl diff --git a/reactos/include/psdk/snmp.h b/include/psdk/snmp.h similarity index 100% rename from reactos/include/psdk/snmp.h rename to include/psdk/snmp.h diff --git a/reactos/include/psdk/softpub.h b/include/psdk/softpub.h similarity index 100% rename from reactos/include/psdk/softpub.h rename to include/psdk/softpub.h diff --git a/reactos/include/psdk/sql.h b/include/psdk/sql.h similarity index 100% rename from reactos/include/psdk/sql.h rename to include/psdk/sql.h diff --git a/reactos/include/psdk/sqlext.h b/include/psdk/sqlext.h similarity index 100% rename from reactos/include/psdk/sqlext.h rename to include/psdk/sqlext.h diff --git a/reactos/include/psdk/sqltypes.h b/include/psdk/sqltypes.h similarity index 100% rename from reactos/include/psdk/sqltypes.h rename to include/psdk/sqltypes.h diff --git a/reactos/include/psdk/sqlucode.h b/include/psdk/sqlucode.h similarity index 100% rename from reactos/include/psdk/sqlucode.h rename to include/psdk/sqlucode.h diff --git a/reactos/include/psdk/srrestoreptapi.h b/include/psdk/srrestoreptapi.h similarity index 100% rename from reactos/include/psdk/srrestoreptapi.h rename to include/psdk/srrestoreptapi.h diff --git a/reactos/include/psdk/sspi.h b/include/psdk/sspi.h similarity index 100% rename from reactos/include/psdk/sspi.h rename to include/psdk/sspi.h diff --git a/reactos/include/psdk/stdole2.idl b/include/psdk/stdole2.idl similarity index 100% rename from reactos/include/psdk/stdole2.idl rename to include/psdk/stdole2.idl diff --git a/reactos/include/psdk/strmif.idl b/include/psdk/strmif.idl similarity index 100% rename from reactos/include/psdk/strmif.idl rename to include/psdk/strmif.idl diff --git a/reactos/include/psdk/subauth.h b/include/psdk/subauth.h similarity index 100% rename from reactos/include/psdk/subauth.h rename to include/psdk/subauth.h diff --git a/reactos/include/psdk/svcguid.h b/include/psdk/svcguid.h similarity index 100% rename from reactos/include/psdk/svcguid.h rename to include/psdk/svcguid.h diff --git a/reactos/include/psdk/svrapi.h b/include/psdk/svrapi.h similarity index 100% rename from reactos/include/psdk/svrapi.h rename to include/psdk/svrapi.h diff --git a/reactos/include/psdk/tapi.h b/include/psdk/tapi.h similarity index 100% rename from reactos/include/psdk/tapi.h rename to include/psdk/tapi.h diff --git a/reactos/include/psdk/tchar.h b/include/psdk/tchar.h similarity index 100% rename from reactos/include/psdk/tchar.h rename to include/psdk/tchar.h diff --git a/reactos/include/psdk/tcpioctl.h b/include/psdk/tcpioctl.h similarity index 100% rename from reactos/include/psdk/tcpioctl.h rename to include/psdk/tcpioctl.h diff --git a/reactos/include/psdk/textserv.h b/include/psdk/textserv.h similarity index 100% rename from reactos/include/psdk/textserv.h rename to include/psdk/textserv.h diff --git a/reactos/include/psdk/tlhelp32.h b/include/psdk/tlhelp32.h similarity index 100% rename from reactos/include/psdk/tlhelp32.h rename to include/psdk/tlhelp32.h diff --git a/reactos/include/psdk/tmschema.h b/include/psdk/tmschema.h similarity index 100% rename from reactos/include/psdk/tmschema.h rename to include/psdk/tmschema.h diff --git a/reactos/include/psdk/tom.idl b/include/psdk/tom.idl similarity index 100% rename from reactos/include/psdk/tom.idl rename to include/psdk/tom.idl diff --git a/reactos/include/psdk/unknwn.idl b/include/psdk/unknwn.idl similarity index 100% rename from reactos/include/psdk/unknwn.idl rename to include/psdk/unknwn.idl diff --git a/reactos/include/psdk/urlhist.idl b/include/psdk/urlhist.idl similarity index 100% rename from reactos/include/psdk/urlhist.idl rename to include/psdk/urlhist.idl diff --git a/reactos/include/psdk/urlmon.idl b/include/psdk/urlmon.idl similarity index 100% rename from reactos/include/psdk/urlmon.idl rename to include/psdk/urlmon.idl diff --git a/reactos/include/psdk/userenv.h b/include/psdk/userenv.h similarity index 100% rename from reactos/include/psdk/userenv.h rename to include/psdk/userenv.h diff --git a/reactos/include/psdk/usp10.h b/include/psdk/usp10.h similarity index 100% rename from reactos/include/psdk/usp10.h rename to include/psdk/usp10.h diff --git a/reactos/include/psdk/uxtheme.h b/include/psdk/uxtheme.h similarity index 100% rename from reactos/include/psdk/uxtheme.h rename to include/psdk/uxtheme.h diff --git a/reactos/include/psdk/vfw.h b/include/psdk/vfw.h similarity index 100% rename from reactos/include/psdk/vfw.h rename to include/psdk/vfw.h diff --git a/reactos/include/psdk/vfwmsgs.h b/include/psdk/vfwmsgs.h similarity index 100% rename from reactos/include/psdk/vfwmsgs.h rename to include/psdk/vfwmsgs.h diff --git a/reactos/include/psdk/w32api.h b/include/psdk/w32api.h similarity index 100% rename from reactos/include/psdk/w32api.h rename to include/psdk/w32api.h diff --git a/reactos/include/psdk/wdbgexts.h b/include/psdk/wdbgexts.h similarity index 100% rename from reactos/include/psdk/wdbgexts.h rename to include/psdk/wdbgexts.h diff --git a/reactos/include/psdk/winable.h b/include/psdk/winable.h similarity index 100% rename from reactos/include/psdk/winable.h rename to include/psdk/winable.h diff --git a/reactos/include/psdk/winbase.h b/include/psdk/winbase.h similarity index 100% rename from reactos/include/psdk/winbase.h rename to include/psdk/winbase.h diff --git a/reactos/include/psdk/winber.h b/include/psdk/winber.h similarity index 100% rename from reactos/include/psdk/winber.h rename to include/psdk/winber.h diff --git a/reactos/include/psdk/wincon.h b/include/psdk/wincon.h similarity index 100% rename from reactos/include/psdk/wincon.h rename to include/psdk/wincon.h diff --git a/reactos/include/psdk/wincred.h b/include/psdk/wincred.h similarity index 100% rename from reactos/include/psdk/wincred.h rename to include/psdk/wincred.h diff --git a/reactos/include/psdk/wincrypt.h b/include/psdk/wincrypt.h similarity index 100% rename from reactos/include/psdk/wincrypt.h rename to include/psdk/wincrypt.h diff --git a/reactos/include/psdk/windef.h b/include/psdk/windef.h similarity index 100% rename from reactos/include/psdk/windef.h rename to include/psdk/windef.h diff --git a/reactos/include/psdk/windns.h b/include/psdk/windns.h similarity index 100% rename from reactos/include/psdk/windns.h rename to include/psdk/windns.h diff --git a/reactos/include/psdk/windows.h b/include/psdk/windows.h similarity index 100% rename from reactos/include/psdk/windows.h rename to include/psdk/windows.h diff --git a/reactos/include/psdk/windowsx.h b/include/psdk/windowsx.h similarity index 100% rename from reactos/include/psdk/windowsx.h rename to include/psdk/windowsx.h diff --git a/reactos/include/psdk/winefs.h b/include/psdk/winefs.h similarity index 100% rename from reactos/include/psdk/winefs.h rename to include/psdk/winefs.h diff --git a/reactos/include/psdk/winerror.h b/include/psdk/winerror.h similarity index 100% rename from reactos/include/psdk/winerror.h rename to include/psdk/winerror.h diff --git a/reactos/include/psdk/winfax.h b/include/psdk/winfax.h similarity index 100% rename from reactos/include/psdk/winfax.h rename to include/psdk/winfax.h diff --git a/reactos/include/psdk/wingdi.h b/include/psdk/wingdi.h similarity index 100% rename from reactos/include/psdk/wingdi.h rename to include/psdk/wingdi.h diff --git a/reactos/include/psdk/winhttp.h b/include/psdk/winhttp.h similarity index 100% rename from reactos/include/psdk/winhttp.h rename to include/psdk/winhttp.h diff --git a/reactos/include/psdk/wininet.h b/include/psdk/wininet.h similarity index 100% rename from reactos/include/psdk/wininet.h rename to include/psdk/wininet.h diff --git a/reactos/include/psdk/winineti.h b/include/psdk/winineti.h similarity index 100% rename from reactos/include/psdk/winineti.h rename to include/psdk/winineti.h diff --git a/reactos/include/psdk/winioctl.h b/include/psdk/winioctl.h similarity index 100% rename from reactos/include/psdk/winioctl.h rename to include/psdk/winioctl.h diff --git a/reactos/include/psdk/winldap.h b/include/psdk/winldap.h similarity index 100% rename from reactos/include/psdk/winldap.h rename to include/psdk/winldap.h diff --git a/reactos/include/psdk/winnetwk.h b/include/psdk/winnetwk.h similarity index 100% rename from reactos/include/psdk/winnetwk.h rename to include/psdk/winnetwk.h diff --git a/reactos/include/psdk/winnls.h b/include/psdk/winnls.h similarity index 100% rename from reactos/include/psdk/winnls.h rename to include/psdk/winnls.h diff --git a/reactos/include/psdk/winnls32.h b/include/psdk/winnls32.h similarity index 100% rename from reactos/include/psdk/winnls32.h rename to include/psdk/winnls32.h diff --git a/reactos/include/psdk/winnt.h b/include/psdk/winnt.h similarity index 100% rename from reactos/include/psdk/winnt.h rename to include/psdk/winnt.h diff --git a/reactos/include/psdk/winperf.h b/include/psdk/winperf.h similarity index 100% rename from reactos/include/psdk/winperf.h rename to include/psdk/winperf.h diff --git a/reactos/include/psdk/winreg.h b/include/psdk/winreg.h similarity index 100% rename from reactos/include/psdk/winreg.h rename to include/psdk/winreg.h diff --git a/reactos/include/psdk/winres.h b/include/psdk/winres.h similarity index 100% rename from reactos/include/psdk/winres.h rename to include/psdk/winres.h diff --git a/reactos/include/psdk/winresrc.h b/include/psdk/winresrc.h similarity index 100% rename from reactos/include/psdk/winresrc.h rename to include/psdk/winresrc.h diff --git a/reactos/include/psdk/winscard.h b/include/psdk/winscard.h similarity index 100% rename from reactos/include/psdk/winscard.h rename to include/psdk/winscard.h diff --git a/reactos/include/psdk/winsmcrd.h b/include/psdk/winsmcrd.h similarity index 100% rename from reactos/include/psdk/winsmcrd.h rename to include/psdk/winsmcrd.h diff --git a/reactos/include/psdk/winsnmp.h b/include/psdk/winsnmp.h similarity index 100% rename from reactos/include/psdk/winsnmp.h rename to include/psdk/winsnmp.h diff --git a/reactos/include/psdk/winsock.h b/include/psdk/winsock.h similarity index 100% rename from reactos/include/psdk/winsock.h rename to include/psdk/winsock.h diff --git a/reactos/include/psdk/winsock2.h b/include/psdk/winsock2.h similarity index 100% rename from reactos/include/psdk/winsock2.h rename to include/psdk/winsock2.h diff --git a/reactos/include/psdk/winspool.h b/include/psdk/winspool.h similarity index 100% rename from reactos/include/psdk/winspool.h rename to include/psdk/winspool.h diff --git a/reactos/include/psdk/winsvc.h b/include/psdk/winsvc.h similarity index 100% rename from reactos/include/psdk/winsvc.h rename to include/psdk/winsvc.h diff --git a/reactos/include/psdk/winternl.h b/include/psdk/winternl.h similarity index 100% rename from reactos/include/psdk/winternl.h rename to include/psdk/winternl.h diff --git a/reactos/include/psdk/wintrust.h b/include/psdk/wintrust.h similarity index 100% rename from reactos/include/psdk/wintrust.h rename to include/psdk/wintrust.h diff --git a/reactos/include/psdk/winuser.h b/include/psdk/winuser.h similarity index 100% rename from reactos/include/psdk/winuser.h rename to include/psdk/winuser.h diff --git a/reactos/include/psdk/winver.h b/include/psdk/winver.h similarity index 100% rename from reactos/include/psdk/winver.h rename to include/psdk/winver.h diff --git a/reactos/include/psdk/winwlx.h b/include/psdk/winwlx.h similarity index 100% rename from reactos/include/psdk/winwlx.h rename to include/psdk/winwlx.h diff --git a/reactos/include/psdk/wmistr.h b/include/psdk/wmistr.h similarity index 100% rename from reactos/include/psdk/wmistr.h rename to include/psdk/wmistr.h diff --git a/reactos/include/psdk/ws2spi.h b/include/psdk/ws2spi.h similarity index 100% rename from reactos/include/psdk/ws2spi.h rename to include/psdk/ws2spi.h diff --git a/reactos/include/psdk/ws2tcpip.h b/include/psdk/ws2tcpip.h similarity index 100% rename from reactos/include/psdk/ws2tcpip.h rename to include/psdk/ws2tcpip.h diff --git a/reactos/include/psdk/wsahelp.h b/include/psdk/wsahelp.h similarity index 100% rename from reactos/include/psdk/wsahelp.h rename to include/psdk/wsahelp.h diff --git a/reactos/include/psdk/wsipx.h b/include/psdk/wsipx.h similarity index 100% rename from reactos/include/psdk/wsipx.h rename to include/psdk/wsipx.h diff --git a/reactos/include/psdk/wsnetbs.h b/include/psdk/wsnetbs.h similarity index 100% rename from reactos/include/psdk/wsnetbs.h rename to include/psdk/wsnetbs.h diff --git a/reactos/include/psdk/wtsapi32.h b/include/psdk/wtsapi32.h similarity index 100% rename from reactos/include/psdk/wtsapi32.h rename to include/psdk/wtsapi32.h diff --git a/reactos/include/psdk/wtypes.idl b/include/psdk/wtypes.idl similarity index 100% rename from reactos/include/psdk/wtypes.idl rename to include/psdk/wtypes.idl diff --git a/reactos/include/psdk/xcmc.h b/include/psdk/xcmc.h similarity index 100% rename from reactos/include/psdk/xcmc.h rename to include/psdk/xcmc.h diff --git a/reactos/include/psdk/xmldom.idl b/include/psdk/xmldom.idl similarity index 100% rename from reactos/include/psdk/xmldom.idl rename to include/psdk/xmldom.idl diff --git a/reactos/include/psdk/xmldomdid.h b/include/psdk/xmldomdid.h similarity index 100% rename from reactos/include/psdk/xmldomdid.h rename to include/psdk/xmldomdid.h diff --git a/reactos/include/psdk/xmldso.idl b/include/psdk/xmldso.idl similarity index 100% rename from reactos/include/psdk/xmldso.idl rename to include/psdk/xmldso.idl diff --git a/reactos/include/psdk/xmldsodid.h b/include/psdk/xmldsodid.h similarity index 100% rename from reactos/include/psdk/xmldsodid.h rename to include/psdk/xmldsodid.h diff --git a/reactos/include/psdk/xprtdefs.h b/include/psdk/xprtdefs.h similarity index 100% rename from reactos/include/psdk/xprtdefs.h rename to include/psdk/xprtdefs.h diff --git a/reactos/include/psdk/zmouse.h b/include/psdk/zmouse.h similarity index 100% rename from reactos/include/psdk/zmouse.h rename to include/psdk/zmouse.h diff --git a/reactos/include/reactos/arc/arc.h b/include/reactos/arc/arc.h similarity index 100% rename from reactos/include/reactos/arc/arc.h rename to include/reactos/arc/arc.h diff --git a/reactos/include/reactos/arc/setupblk.h b/include/reactos/arc/setupblk.h similarity index 100% rename from reactos/include/reactos/arc/setupblk.h rename to include/reactos/arc/setupblk.h diff --git a/reactos/include/reactos/arm/armddk.h b/include/reactos/arm/armddk.h similarity index 100% rename from reactos/include/reactos/arm/armddk.h rename to include/reactos/arm/armddk.h diff --git a/reactos/include/reactos/arm/peripherals/pl011.h b/include/reactos/arm/peripherals/pl011.h similarity index 100% rename from reactos/include/reactos/arm/peripherals/pl011.h rename to include/reactos/arm/peripherals/pl011.h diff --git a/reactos/include/reactos/arm/peripherals/pl190.h b/include/reactos/arm/peripherals/pl190.h similarity index 100% rename from reactos/include/reactos/arm/peripherals/pl190.h rename to include/reactos/arm/peripherals/pl190.h diff --git a/reactos/include/reactos/arm/peripherals/sp804.h b/include/reactos/arm/peripherals/sp804.h similarity index 100% rename from reactos/include/reactos/arm/peripherals/sp804.h rename to include/reactos/arm/peripherals/sp804.h diff --git a/reactos/include/reactos/ccros.h b/include/reactos/ccros.h similarity index 100% rename from reactos/include/reactos/ccros.h rename to include/reactos/ccros.h diff --git a/reactos/include/reactos/chew/chew.h b/include/reactos/chew/chew.h similarity index 100% rename from reactos/include/reactos/chew/chew.h rename to include/reactos/chew/chew.h diff --git a/reactos/include/reactos/config.h b/include/reactos/config.h similarity index 100% rename from reactos/include/reactos/config.h rename to include/reactos/config.h diff --git a/reactos/include/reactos/debug.h b/include/reactos/debug.h similarity index 100% rename from reactos/include/reactos/debug.h rename to include/reactos/debug.h diff --git a/reactos/include/reactos/dll/desk/deskcplx.h b/include/reactos/dll/desk/deskcplx.h similarity index 100% rename from reactos/include/reactos/dll/desk/deskcplx.h rename to include/reactos/dll/desk/deskcplx.h diff --git a/reactos/include/reactos/dll/devmgr/devmgr.h b/include/reactos/dll/devmgr/devmgr.h similarity index 100% rename from reactos/include/reactos/dll/devmgr/devmgr.h rename to include/reactos/dll/devmgr/devmgr.h diff --git a/reactos/include/reactos/dll/directx/d3d8thk.h b/include/reactos/dll/directx/d3d8thk.h similarity index 100% rename from reactos/include/reactos/dll/directx/d3d8thk.h rename to include/reactos/dll/directx/d3d8thk.h diff --git a/reactos/include/reactos/drivers/afd/shared.h b/include/reactos/drivers/afd/shared.h similarity index 100% rename from reactos/include/reactos/drivers/afd/shared.h rename to include/reactos/drivers/afd/shared.h diff --git a/reactos/include/reactos/drivers/blue/ntddblue.h b/include/reactos/drivers/blue/ntddblue.h similarity index 100% rename from reactos/include/reactos/drivers/blue/ntddblue.h rename to include/reactos/drivers/blue/ntddblue.h diff --git a/reactos/include/reactos/drivers/bootvid/bootvid.h b/include/reactos/drivers/bootvid/bootvid.h similarity index 100% rename from reactos/include/reactos/drivers/bootvid/bootvid.h rename to include/reactos/drivers/bootvid/bootvid.h diff --git a/reactos/include/reactos/drivers/directx/directxint.h b/include/reactos/drivers/directx/directxint.h similarity index 100% rename from reactos/include/reactos/drivers/directx/directxint.h rename to include/reactos/drivers/directx/directxint.h diff --git a/reactos/include/reactos/drivers/directx/dxeng.h b/include/reactos/drivers/directx/dxeng.h similarity index 100% rename from reactos/include/reactos/drivers/directx/dxeng.h rename to include/reactos/drivers/directx/dxeng.h diff --git a/reactos/include/reactos/drivers/directx/dxg.h b/include/reactos/drivers/directx/dxg.h similarity index 100% rename from reactos/include/reactos/drivers/directx/dxg.h rename to include/reactos/drivers/directx/dxg.h diff --git a/reactos/include/reactos/drivers/diskdump/diskdump.h b/include/reactos/drivers/diskdump/diskdump.h similarity index 100% rename from reactos/include/reactos/drivers/diskdump/diskdump.h rename to include/reactos/drivers/diskdump/diskdump.h diff --git a/reactos/include/reactos/drivers/ntddrdsk.h b/include/reactos/drivers/ntddrdsk.h similarity index 100% rename from reactos/include/reactos/drivers/ntddrdsk.h rename to include/reactos/drivers/ntddrdsk.h diff --git a/reactos/include/reactos/elf/common.h b/include/reactos/elf/common.h similarity index 100% rename from reactos/include/reactos/elf/common.h rename to include/reactos/elf/common.h diff --git a/reactos/include/reactos/elf/elf-i386.h b/include/reactos/elf/elf-i386.h similarity index 100% rename from reactos/include/reactos/elf/elf-i386.h rename to include/reactos/elf/elf-i386.h diff --git a/reactos/include/reactos/elf/elf-powerpc.h b/include/reactos/elf/elf-powerpc.h similarity index 100% rename from reactos/include/reactos/elf/elf-powerpc.h rename to include/reactos/elf/elf-powerpc.h diff --git a/reactos/include/reactos/elf/elf.h b/include/reactos/elf/elf.h similarity index 100% rename from reactos/include/reactos/elf/elf.h rename to include/reactos/elf/elf.h diff --git a/reactos/include/reactos/elf/elf32.h b/include/reactos/elf/elf32.h similarity index 100% rename from reactos/include/reactos/elf/elf32.h rename to include/reactos/elf/elf32.h diff --git a/reactos/include/reactos/elf/elf64.h b/include/reactos/elf/elf64.h similarity index 100% rename from reactos/include/reactos/elf/elf64.h rename to include/reactos/elf/elf64.h diff --git a/reactos/include/reactos/elf/generic.h b/include/reactos/elf/generic.h similarity index 100% rename from reactos/include/reactos/elf/generic.h rename to include/reactos/elf/generic.h diff --git a/reactos/include/reactos/elf/machine.h b/include/reactos/elf/machine.h similarity index 100% rename from reactos/include/reactos/elf/machine.h rename to include/reactos/elf/machine.h diff --git a/reactos/include/reactos/elf/reactos.h b/include/reactos/elf/reactos.h similarity index 100% rename from reactos/include/reactos/elf/reactos.h rename to include/reactos/elf/reactos.h diff --git a/reactos/include/reactos/exeformat.h b/include/reactos/exeformat.h similarity index 100% rename from reactos/include/reactos/exeformat.h rename to include/reactos/exeformat.h diff --git a/reactos/include/reactos/helper.h b/include/reactos/helper.h similarity index 100% rename from reactos/include/reactos/helper.h rename to include/reactos/helper.h diff --git a/reactos/include/reactos/idl/eventlogrpc.acf b/include/reactos/idl/eventlogrpc.acf similarity index 100% rename from reactos/include/reactos/idl/eventlogrpc.acf rename to include/reactos/idl/eventlogrpc.acf diff --git a/reactos/include/reactos/idl/eventlogrpc.idl b/include/reactos/idl/eventlogrpc.idl similarity index 100% rename from reactos/include/reactos/idl/eventlogrpc.idl rename to include/reactos/idl/eventlogrpc.idl diff --git a/reactos/include/reactos/idl/idl.rbuild b/include/reactos/idl/idl.rbuild similarity index 100% rename from reactos/include/reactos/idl/idl.rbuild rename to include/reactos/idl/idl.rbuild diff --git a/reactos/include/reactos/idl/lsa.acf b/include/reactos/idl/lsa.acf similarity index 100% rename from reactos/include/reactos/idl/lsa.acf rename to include/reactos/idl/lsa.acf diff --git a/reactos/include/reactos/idl/lsa.idl b/include/reactos/idl/lsa.idl similarity index 100% rename from reactos/include/reactos/idl/lsa.idl rename to include/reactos/idl/lsa.idl diff --git a/reactos/include/reactos/idl/ms-dtyp.idl b/include/reactos/idl/ms-dtyp.idl similarity index 100% rename from reactos/include/reactos/idl/ms-dtyp.idl rename to include/reactos/idl/ms-dtyp.idl diff --git a/reactos/include/reactos/idl/pnp.acf b/include/reactos/idl/pnp.acf similarity index 100% rename from reactos/include/reactos/idl/pnp.acf rename to include/reactos/idl/pnp.acf diff --git a/reactos/include/reactos/idl/pnp.idl b/include/reactos/idl/pnp.idl similarity index 100% rename from reactos/include/reactos/idl/pnp.idl rename to include/reactos/idl/pnp.idl diff --git a/reactos/include/reactos/idl/svcctl.acf b/include/reactos/idl/svcctl.acf similarity index 100% rename from reactos/include/reactos/idl/svcctl.acf rename to include/reactos/idl/svcctl.acf diff --git a/reactos/include/reactos/idl/svcctl.idl b/include/reactos/idl/svcctl.idl similarity index 100% rename from reactos/include/reactos/idl/svcctl.idl rename to include/reactos/idl/svcctl.idl diff --git a/reactos/include/reactos/kddll.h b/include/reactos/kddll.h similarity index 100% rename from reactos/include/reactos/kddll.h rename to include/reactos/kddll.h diff --git a/reactos/include/reactos/libs/audiosrv/audiosrv.h b/include/reactos/libs/audiosrv/audiosrv.h similarity index 100% rename from reactos/include/reactos/libs/audiosrv/audiosrv.h rename to include/reactos/libs/audiosrv/audiosrv.h diff --git a/reactos/include/reactos/libs/dhcp/rosdhcp_public.h b/include/reactos/libs/dhcp/rosdhcp_public.h similarity index 100% rename from reactos/include/reactos/libs/dhcp/rosdhcp_public.h rename to include/reactos/libs/dhcp/rosdhcp_public.h diff --git a/reactos/include/reactos/libs/epsapi/epsapi.h b/include/reactos/libs/epsapi/epsapi.h similarity index 100% rename from reactos/include/reactos/libs/epsapi/epsapi.h rename to include/reactos/libs/epsapi/epsapi.h diff --git a/reactos/include/reactos/libs/expat/expat.h b/include/reactos/libs/expat/expat.h similarity index 100% rename from reactos/include/reactos/libs/expat/expat.h rename to include/reactos/libs/expat/expat.h diff --git a/reactos/include/reactos/libs/expat/expat_external.h b/include/reactos/libs/expat/expat_external.h similarity index 100% rename from reactos/include/reactos/libs/expat/expat_external.h rename to include/reactos/libs/expat/expat_external.h diff --git a/reactos/include/reactos/libs/fmifs/fmifs.h b/include/reactos/libs/fmifs/fmifs.h similarity index 100% rename from reactos/include/reactos/libs/fmifs/fmifs.h rename to include/reactos/libs/fmifs/fmifs.h diff --git a/reactos/include/reactos/libs/fslib/ext2lib.h b/include/reactos/libs/fslib/ext2lib.h similarity index 100% rename from reactos/include/reactos/libs/fslib/ext2lib.h rename to include/reactos/libs/fslib/ext2lib.h diff --git a/reactos/include/reactos/libs/fslib/vfatlib.h b/include/reactos/libs/fslib/vfatlib.h similarity index 100% rename from reactos/include/reactos/libs/fslib/vfatlib.h rename to include/reactos/libs/fslib/vfatlib.h diff --git a/reactos/include/reactos/libs/fslib/vfatxlib.h b/include/reactos/libs/fslib/vfatxlib.h similarity index 100% rename from reactos/include/reactos/libs/fslib/vfatxlib.h rename to include/reactos/libs/fslib/vfatxlib.h diff --git a/reactos/include/reactos/libs/libxml/DOCBparser.h b/include/reactos/libs/libxml/DOCBparser.h similarity index 100% rename from reactos/include/reactos/libs/libxml/DOCBparser.h rename to include/reactos/libs/libxml/DOCBparser.h diff --git a/reactos/include/reactos/libs/libxml/HTMLparser.h b/include/reactos/libs/libxml/HTMLparser.h similarity index 100% rename from reactos/include/reactos/libs/libxml/HTMLparser.h rename to include/reactos/libs/libxml/HTMLparser.h diff --git a/reactos/include/reactos/libs/libxml/HTMLtree.h b/include/reactos/libs/libxml/HTMLtree.h similarity index 100% rename from reactos/include/reactos/libs/libxml/HTMLtree.h rename to include/reactos/libs/libxml/HTMLtree.h diff --git a/reactos/include/reactos/libs/libxml/Makefile.am b/include/reactos/libs/libxml/Makefile.am similarity index 100% rename from reactos/include/reactos/libs/libxml/Makefile.am rename to include/reactos/libs/libxml/Makefile.am diff --git a/reactos/include/reactos/libs/libxml/Makefile.in b/include/reactos/libs/libxml/Makefile.in similarity index 100% rename from reactos/include/reactos/libs/libxml/Makefile.in rename to include/reactos/libs/libxml/Makefile.in diff --git a/reactos/include/reactos/libs/libxml/SAX.h b/include/reactos/libs/libxml/SAX.h similarity index 100% rename from reactos/include/reactos/libs/libxml/SAX.h rename to include/reactos/libs/libxml/SAX.h diff --git a/reactos/include/reactos/libs/libxml/SAX2.h b/include/reactos/libs/libxml/SAX2.h similarity index 100% rename from reactos/include/reactos/libs/libxml/SAX2.h rename to include/reactos/libs/libxml/SAX2.h diff --git a/reactos/include/reactos/libs/libxml/c14n.h b/include/reactos/libs/libxml/c14n.h similarity index 100% rename from reactos/include/reactos/libs/libxml/c14n.h rename to include/reactos/libs/libxml/c14n.h diff --git a/reactos/include/reactos/libs/libxml/catalog.h b/include/reactos/libs/libxml/catalog.h similarity index 100% rename from reactos/include/reactos/libs/libxml/catalog.h rename to include/reactos/libs/libxml/catalog.h diff --git a/reactos/include/reactos/libs/libxml/chvalid.h b/include/reactos/libs/libxml/chvalid.h similarity index 100% rename from reactos/include/reactos/libs/libxml/chvalid.h rename to include/reactos/libs/libxml/chvalid.h diff --git a/reactos/include/reactos/libs/libxml/debugXML.h b/include/reactos/libs/libxml/debugXML.h similarity index 100% rename from reactos/include/reactos/libs/libxml/debugXML.h rename to include/reactos/libs/libxml/debugXML.h diff --git a/reactos/include/reactos/libs/libxml/dict.h b/include/reactos/libs/libxml/dict.h similarity index 100% rename from reactos/include/reactos/libs/libxml/dict.h rename to include/reactos/libs/libxml/dict.h diff --git a/reactos/include/reactos/libs/libxml/encoding.h b/include/reactos/libs/libxml/encoding.h similarity index 100% rename from reactos/include/reactos/libs/libxml/encoding.h rename to include/reactos/libs/libxml/encoding.h diff --git a/reactos/include/reactos/libs/libxml/entities.h b/include/reactos/libs/libxml/entities.h similarity index 100% rename from reactos/include/reactos/libs/libxml/entities.h rename to include/reactos/libs/libxml/entities.h diff --git a/reactos/include/reactos/libs/libxml/globals.h b/include/reactos/libs/libxml/globals.h similarity index 100% rename from reactos/include/reactos/libs/libxml/globals.h rename to include/reactos/libs/libxml/globals.h diff --git a/reactos/include/reactos/libs/libxml/hash.h b/include/reactos/libs/libxml/hash.h similarity index 100% rename from reactos/include/reactos/libs/libxml/hash.h rename to include/reactos/libs/libxml/hash.h diff --git a/reactos/include/reactos/libs/libxml/list.h b/include/reactos/libs/libxml/list.h similarity index 100% rename from reactos/include/reactos/libs/libxml/list.h rename to include/reactos/libs/libxml/list.h diff --git a/reactos/include/reactos/libs/libxml/nanoftp.h b/include/reactos/libs/libxml/nanoftp.h similarity index 100% rename from reactos/include/reactos/libs/libxml/nanoftp.h rename to include/reactos/libs/libxml/nanoftp.h diff --git a/reactos/include/reactos/libs/libxml/nanohttp.h b/include/reactos/libs/libxml/nanohttp.h similarity index 100% rename from reactos/include/reactos/libs/libxml/nanohttp.h rename to include/reactos/libs/libxml/nanohttp.h diff --git a/reactos/include/reactos/libs/libxml/parser.h b/include/reactos/libs/libxml/parser.h similarity index 100% rename from reactos/include/reactos/libs/libxml/parser.h rename to include/reactos/libs/libxml/parser.h diff --git a/reactos/include/reactos/libs/libxml/parserInternals.h b/include/reactos/libs/libxml/parserInternals.h similarity index 100% rename from reactos/include/reactos/libs/libxml/parserInternals.h rename to include/reactos/libs/libxml/parserInternals.h diff --git a/reactos/include/reactos/libs/libxml/pattern.h b/include/reactos/libs/libxml/pattern.h similarity index 100% rename from reactos/include/reactos/libs/libxml/pattern.h rename to include/reactos/libs/libxml/pattern.h diff --git a/reactos/include/reactos/libs/libxml/relaxng.h b/include/reactos/libs/libxml/relaxng.h similarity index 100% rename from reactos/include/reactos/libs/libxml/relaxng.h rename to include/reactos/libs/libxml/relaxng.h diff --git a/reactos/include/reactos/libs/libxml/schemasInternals.h b/include/reactos/libs/libxml/schemasInternals.h similarity index 100% rename from reactos/include/reactos/libs/libxml/schemasInternals.h rename to include/reactos/libs/libxml/schemasInternals.h diff --git a/reactos/include/reactos/libs/libxml/schematron.h b/include/reactos/libs/libxml/schematron.h similarity index 100% rename from reactos/include/reactos/libs/libxml/schematron.h rename to include/reactos/libs/libxml/schematron.h diff --git a/reactos/include/reactos/libs/libxml/threads.h b/include/reactos/libs/libxml/threads.h similarity index 100% rename from reactos/include/reactos/libs/libxml/threads.h rename to include/reactos/libs/libxml/threads.h diff --git a/reactos/include/reactos/libs/libxml/tree.h b/include/reactos/libs/libxml/tree.h similarity index 100% rename from reactos/include/reactos/libs/libxml/tree.h rename to include/reactos/libs/libxml/tree.h diff --git a/reactos/include/reactos/libs/libxml/uri.h b/include/reactos/libs/libxml/uri.h similarity index 100% rename from reactos/include/reactos/libs/libxml/uri.h rename to include/reactos/libs/libxml/uri.h diff --git a/reactos/include/reactos/libs/libxml/valid.h b/include/reactos/libs/libxml/valid.h similarity index 100% rename from reactos/include/reactos/libs/libxml/valid.h rename to include/reactos/libs/libxml/valid.h diff --git a/reactos/include/reactos/libs/libxml/xinclude.h b/include/reactos/libs/libxml/xinclude.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xinclude.h rename to include/reactos/libs/libxml/xinclude.h diff --git a/reactos/include/reactos/libs/libxml/xlink.h b/include/reactos/libs/libxml/xlink.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xlink.h rename to include/reactos/libs/libxml/xlink.h diff --git a/reactos/include/reactos/libs/libxml/xmlIO.h b/include/reactos/libs/libxml/xmlIO.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlIO.h rename to include/reactos/libs/libxml/xmlIO.h diff --git a/reactos/include/reactos/libs/libxml/xmlautomata.h b/include/reactos/libs/libxml/xmlautomata.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlautomata.h rename to include/reactos/libs/libxml/xmlautomata.h diff --git a/reactos/include/reactos/libs/libxml/xmlerror.h b/include/reactos/libs/libxml/xmlerror.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlerror.h rename to include/reactos/libs/libxml/xmlerror.h diff --git a/reactos/include/reactos/libs/libxml/xmlexports.h b/include/reactos/libs/libxml/xmlexports.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlexports.h rename to include/reactos/libs/libxml/xmlexports.h diff --git a/reactos/include/reactos/libs/libxml/xmlmemory.h b/include/reactos/libs/libxml/xmlmemory.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlmemory.h rename to include/reactos/libs/libxml/xmlmemory.h diff --git a/reactos/include/reactos/libs/libxml/xmlmodule.h b/include/reactos/libs/libxml/xmlmodule.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlmodule.h rename to include/reactos/libs/libxml/xmlmodule.h diff --git a/reactos/include/reactos/libs/libxml/xmlreader.h b/include/reactos/libs/libxml/xmlreader.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlreader.h rename to include/reactos/libs/libxml/xmlreader.h diff --git a/reactos/include/reactos/libs/libxml/xmlregexp.h b/include/reactos/libs/libxml/xmlregexp.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlregexp.h rename to include/reactos/libs/libxml/xmlregexp.h diff --git a/reactos/include/reactos/libs/libxml/xmlsave.h b/include/reactos/libs/libxml/xmlsave.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlsave.h rename to include/reactos/libs/libxml/xmlsave.h diff --git a/reactos/include/reactos/libs/libxml/xmlschemas.h b/include/reactos/libs/libxml/xmlschemas.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlschemas.h rename to include/reactos/libs/libxml/xmlschemas.h diff --git a/reactos/include/reactos/libs/libxml/xmlschemastypes.h b/include/reactos/libs/libxml/xmlschemastypes.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlschemastypes.h rename to include/reactos/libs/libxml/xmlschemastypes.h diff --git a/reactos/include/reactos/libs/libxml/xmlstring.h b/include/reactos/libs/libxml/xmlstring.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlstring.h rename to include/reactos/libs/libxml/xmlstring.h diff --git a/reactos/include/reactos/libs/libxml/xmlunicode.h b/include/reactos/libs/libxml/xmlunicode.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlunicode.h rename to include/reactos/libs/libxml/xmlunicode.h diff --git a/reactos/include/reactos/libs/libxml/xmlversion.h b/include/reactos/libs/libxml/xmlversion.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlversion.h rename to include/reactos/libs/libxml/xmlversion.h diff --git a/reactos/include/reactos/libs/libxml/xmlversion.h.in b/include/reactos/libs/libxml/xmlversion.h.in similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlversion.h.in rename to include/reactos/libs/libxml/xmlversion.h.in diff --git a/reactos/include/reactos/libs/libxml/xmlwriter.h b/include/reactos/libs/libxml/xmlwriter.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xmlwriter.h rename to include/reactos/libs/libxml/xmlwriter.h diff --git a/reactos/include/reactos/libs/libxml/xpath.h b/include/reactos/libs/libxml/xpath.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xpath.h rename to include/reactos/libs/libxml/xpath.h diff --git a/reactos/include/reactos/libs/libxml/xpathInternals.h b/include/reactos/libs/libxml/xpathInternals.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xpathInternals.h rename to include/reactos/libs/libxml/xpathInternals.h diff --git a/reactos/include/reactos/libs/libxml/xpointer.h b/include/reactos/libs/libxml/xpointer.h similarity index 100% rename from reactos/include/reactos/libs/libxml/xpointer.h rename to include/reactos/libs/libxml/xpointer.h diff --git a/reactos/include/reactos/libs/ppcmmu/mmu.h b/include/reactos/libs/ppcmmu/mmu.h similarity index 100% rename from reactos/include/reactos/libs/ppcmmu/mmu.h rename to include/reactos/libs/ppcmmu/mmu.h diff --git a/reactos/include/reactos/libs/ppcmmu/mmuutil.h b/include/reactos/libs/ppcmmu/mmuutil.h similarity index 100% rename from reactos/include/reactos/libs/ppcmmu/mmuutil.h rename to include/reactos/libs/ppcmmu/mmuutil.h diff --git a/reactos/include/reactos/libs/pseh/excpt.h b/include/reactos/libs/pseh/excpt.h similarity index 100% rename from reactos/include/reactos/libs/pseh/excpt.h rename to include/reactos/libs/pseh/excpt.h diff --git a/reactos/include/reactos/libs/pseh/framebased.h b/include/reactos/libs/pseh/framebased.h similarity index 100% rename from reactos/include/reactos/libs/pseh/framebased.h rename to include/reactos/libs/pseh/framebased.h diff --git a/reactos/include/reactos/libs/pseh/framebased/internal.h b/include/reactos/libs/pseh/framebased/internal.h similarity index 100% rename from reactos/include/reactos/libs/pseh/framebased/internal.h rename to include/reactos/libs/pseh/framebased/internal.h diff --git a/reactos/include/reactos/libs/pseh/pseh.h b/include/reactos/libs/pseh/pseh.h similarity index 100% rename from reactos/include/reactos/libs/pseh/pseh.h rename to include/reactos/libs/pseh/pseh.h diff --git a/reactos/include/reactos/libs/samlib/samlib.h b/include/reactos/libs/samlib/samlib.h similarity index 100% rename from reactos/include/reactos/libs/samlib/samlib.h rename to include/reactos/libs/samlib/samlib.h diff --git a/reactos/include/reactos/libs/syssetup/syssetup.h b/include/reactos/libs/syssetup/syssetup.h similarity index 100% rename from reactos/include/reactos/libs/syssetup/syssetup.h rename to include/reactos/libs/syssetup/syssetup.h diff --git a/reactos/include/reactos/libs/umpnpmgr/sysguid.h b/include/reactos/libs/umpnpmgr/sysguid.h similarity index 100% rename from reactos/include/reactos/libs/umpnpmgr/sysguid.h rename to include/reactos/libs/umpnpmgr/sysguid.h diff --git a/reactos/include/reactos/mc/bugcodes.mc b/include/reactos/mc/bugcodes.mc similarity index 100% rename from reactos/include/reactos/mc/bugcodes.mc rename to include/reactos/mc/bugcodes.mc diff --git a/reactos/include/reactos/mc/errcodes.mc b/include/reactos/mc/errcodes.mc similarity index 100% rename from reactos/include/reactos/mc/errcodes.mc rename to include/reactos/mc/errcodes.mc diff --git a/reactos/include/reactos/mc/mc.rbuild b/include/reactos/mc/mc.rbuild similarity index 100% rename from reactos/include/reactos/mc/mc.rbuild rename to include/reactos/mc/mc.rbuild diff --git a/reactos/include/reactos/mc/ntstatus.mc b/include/reactos/mc/ntstatus.mc similarity index 100% rename from reactos/include/reactos/mc/ntstatus.mc rename to include/reactos/mc/ntstatus.mc diff --git a/reactos/include/reactos/msvctarget.h b/include/reactos/msvctarget.h similarity index 100% rename from reactos/include/reactos/msvctarget.h rename to include/reactos/msvctarget.h diff --git a/reactos/include/reactos/probe.h b/include/reactos/probe.h similarity index 100% rename from reactos/include/reactos/probe.h rename to include/reactos/probe.h diff --git a/reactos/include/reactos/reactos.rbuild b/include/reactos/reactos.rbuild similarity index 100% rename from reactos/include/reactos/reactos.rbuild rename to include/reactos/reactos.rbuild diff --git a/reactos/include/reactos/reactx.h b/include/reactos/reactx.h similarity index 100% rename from reactos/include/reactos/reactx.h rename to include/reactos/reactx.h diff --git a/reactos/include/reactos/rosldr.h b/include/reactos/rosldr.h similarity index 100% rename from reactos/include/reactos/rosldr.h rename to include/reactos/rosldr.h diff --git a/reactos/include/reactos/rossym.h b/include/reactos/rossym.h similarity index 100% rename from reactos/include/reactos/rossym.h rename to include/reactos/rossym.h diff --git a/reactos/include/reactos/services/services.h b/include/reactos/services/services.h similarity index 100% rename from reactos/include/reactos/services/services.h rename to include/reactos/services/services.h diff --git a/reactos/include/reactos/subsys/csr/server.h b/include/reactos/subsys/csr/server.h similarity index 100% rename from reactos/include/reactos/subsys/csr/server.h rename to include/reactos/subsys/csr/server.h diff --git a/reactos/include/reactos/subsys/csrss/csrss.h b/include/reactos/subsys/csrss/csrss.h similarity index 100% rename from reactos/include/reactos/subsys/csrss/csrss.h rename to include/reactos/subsys/csrss/csrss.h diff --git a/reactos/include/reactos/subsys/lsass/lsasrv.h b/include/reactos/subsys/lsass/lsasrv.h similarity index 100% rename from reactos/include/reactos/subsys/lsass/lsasrv.h rename to include/reactos/subsys/lsass/lsasrv.h diff --git a/reactos/include/reactos/subsys/lsass/lsass.h b/include/reactos/subsys/lsass/lsass.h similarity index 100% rename from reactos/include/reactos/subsys/lsass/lsass.h rename to include/reactos/subsys/lsass/lsass.h diff --git a/reactos/include/reactos/subsys/sm/api.h b/include/reactos/subsys/sm/api.h similarity index 100% rename from reactos/include/reactos/subsys/sm/api.h rename to include/reactos/subsys/sm/api.h diff --git a/reactos/include/reactos/subsys/sm/helper.h b/include/reactos/subsys/sm/helper.h similarity index 100% rename from reactos/include/reactos/subsys/sm/helper.h rename to include/reactos/subsys/sm/helper.h diff --git a/reactos/include/reactos/subsys/sm/ns.h b/include/reactos/subsys/sm/ns.h similarity index 100% rename from reactos/include/reactos/subsys/sm/ns.h rename to include/reactos/subsys/sm/ns.h diff --git a/reactos/include/reactos/subsys/win/base.h b/include/reactos/subsys/win/base.h similarity index 100% rename from reactos/include/reactos/subsys/win/base.h rename to include/reactos/subsys/win/base.h diff --git a/reactos/include/reactos/subsys/win/windows.h b/include/reactos/subsys/win/windows.h similarity index 100% rename from reactos/include/reactos/subsys/win/windows.h rename to include/reactos/subsys/win/windows.h diff --git a/reactos/include/reactos/version.h b/include/reactos/version.h similarity index 100% rename from reactos/include/reactos/version.h rename to include/reactos/version.h diff --git a/reactos/include/reactos/version.rc b/include/reactos/version.rc similarity index 100% rename from reactos/include/reactos/version.rc rename to include/reactos/version.rc diff --git a/reactos/include/reactos/win32k/callback.h b/include/reactos/win32k/callback.h similarity index 100% rename from reactos/include/reactos/win32k/callback.h rename to include/reactos/win32k/callback.h diff --git a/reactos/include/reactos/win32k/ntgdibad.h b/include/reactos/win32k/ntgdibad.h similarity index 100% rename from reactos/include/reactos/win32k/ntgdibad.h rename to include/reactos/win32k/ntgdibad.h diff --git a/reactos/include/reactos/win32k/ntgdihdl.h b/include/reactos/win32k/ntgdihdl.h similarity index 100% rename from reactos/include/reactos/win32k/ntgdihdl.h rename to include/reactos/win32k/ntgdihdl.h diff --git a/reactos/include/reactos/win32k/ntgdityp.h b/include/reactos/win32k/ntgdityp.h similarity index 100% rename from reactos/include/reactos/win32k/ntgdityp.h rename to include/reactos/win32k/ntgdityp.h diff --git a/reactos/include/reactos/win32k/ntuser.h b/include/reactos/win32k/ntuser.h similarity index 100% rename from reactos/include/reactos/win32k/ntuser.h rename to include/reactos/win32k/ntuser.h diff --git a/reactos/include/reactos/win32k/ntusrtyp.h b/include/reactos/win32k/ntusrtyp.h similarity index 100% rename from reactos/include/reactos/win32k/ntusrtyp.h rename to include/reactos/win32k/ntusrtyp.h diff --git a/reactos/include/reactos/windbgkd.h b/include/reactos/windbgkd.h similarity index 100% rename from reactos/include/reactos/windbgkd.h rename to include/reactos/windbgkd.h diff --git a/reactos/include/reactos/wine/cfgmgr32.h b/include/reactos/wine/cfgmgr32.h similarity index 100% rename from reactos/include/reactos/wine/cfgmgr32.h rename to include/reactos/wine/cfgmgr32.h diff --git a/reactos/include/reactos/wine/config.h b/include/reactos/wine/config.h similarity index 100% rename from reactos/include/reactos/wine/config.h rename to include/reactos/wine/config.h diff --git a/reactos/include/reactos/wine/debug.h b/include/reactos/wine/debug.h similarity index 100% rename from reactos/include/reactos/wine/debug.h rename to include/reactos/wine/debug.h diff --git a/reactos/include/reactos/wine/dlgs.h b/include/reactos/wine/dlgs.h similarity index 100% rename from reactos/include/reactos/wine/dlgs.h rename to include/reactos/wine/dlgs.h diff --git a/reactos/include/reactos/wine/exception.h b/include/reactos/wine/exception.h similarity index 100% rename from reactos/include/reactos/wine/exception.h rename to include/reactos/wine/exception.h diff --git a/reactos/include/reactos/wine/guiddef.h b/include/reactos/wine/guiddef.h similarity index 100% rename from reactos/include/reactos/wine/guiddef.h rename to include/reactos/wine/guiddef.h diff --git a/reactos/include/reactos/wine/irot.idl b/include/reactos/wine/irot.idl similarity index 100% rename from reactos/include/reactos/wine/irot.idl rename to include/reactos/wine/irot.idl diff --git a/reactos/include/reactos/wine/itss.idl b/include/reactos/wine/itss.idl similarity index 100% rename from reactos/include/reactos/wine/itss.idl rename to include/reactos/wine/itss.idl diff --git a/reactos/include/reactos/wine/library.h b/include/reactos/wine/library.h similarity index 100% rename from reactos/include/reactos/wine/library.h rename to include/reactos/wine/library.h diff --git a/reactos/include/reactos/wine/list.h b/include/reactos/wine/list.h similarity index 100% rename from reactos/include/reactos/wine/list.h rename to include/reactos/wine/list.h diff --git a/reactos/include/reactos/wine/lmbrowsr.h b/include/reactos/wine/lmbrowsr.h similarity index 100% rename from reactos/include/reactos/wine/lmbrowsr.h rename to include/reactos/wine/lmbrowsr.h diff --git a/reactos/include/reactos/wine/mmddk.h b/include/reactos/wine/mmddk.h similarity index 100% rename from reactos/include/reactos/wine/mmddk.h rename to include/reactos/wine/mmddk.h diff --git a/reactos/include/reactos/wine/mmreg.h b/include/reactos/wine/mmreg.h similarity index 100% rename from reactos/include/reactos/wine/mmreg.h rename to include/reactos/wine/mmreg.h diff --git a/reactos/include/reactos/wine/mmsystem.h b/include/reactos/wine/mmsystem.h similarity index 100% rename from reactos/include/reactos/wine/mmsystem.h rename to include/reactos/wine/mmsystem.h diff --git a/reactos/include/reactos/wine/msacm.h b/include/reactos/wine/msacm.h similarity index 100% rename from reactos/include/reactos/wine/msacm.h rename to include/reactos/wine/msacm.h diff --git a/reactos/include/reactos/wine/msacmdlg.h b/include/reactos/wine/msacmdlg.h similarity index 100% rename from reactos/include/reactos/wine/msacmdlg.h rename to include/reactos/wine/msacmdlg.h diff --git a/reactos/include/reactos/wine/msacmdrv.h b/include/reactos/wine/msacmdrv.h similarity index 100% rename from reactos/include/reactos/wine/msacmdrv.h rename to include/reactos/wine/msacmdrv.h diff --git a/reactos/include/reactos/wine/mscvpdb.h b/include/reactos/wine/mscvpdb.h similarity index 100% rename from reactos/include/reactos/wine/mscvpdb.h rename to include/reactos/wine/mscvpdb.h diff --git a/reactos/include/reactos/wine/msvcrt/fcntl.h b/include/reactos/wine/msvcrt/fcntl.h similarity index 100% rename from reactos/include/reactos/wine/msvcrt/fcntl.h rename to include/reactos/wine/msvcrt/fcntl.h diff --git a/reactos/include/reactos/wine/port.h b/include/reactos/wine/port.h similarity index 100% rename from reactos/include/reactos/wine/port.h rename to include/reactos/wine/port.h diff --git a/reactos/include/reactos/wine/prsht.h b/include/reactos/wine/prsht.h similarity index 100% rename from reactos/include/reactos/wine/prsht.h rename to include/reactos/wine/prsht.h diff --git a/reactos/include/reactos/wine/regex.h b/include/reactos/wine/regex.h similarity index 100% rename from reactos/include/reactos/wine/regex.h rename to include/reactos/wine/regex.h diff --git a/reactos/include/reactos/wine/rpcfc.h b/include/reactos/wine/rpcfc.h similarity index 100% rename from reactos/include/reactos/wine/rpcfc.h rename to include/reactos/wine/rpcfc.h diff --git a/reactos/include/reactos/wine/rpcss_shared.h b/include/reactos/wine/rpcss_shared.h similarity index 100% rename from reactos/include/reactos/wine/rpcss_shared.h rename to include/reactos/wine/rpcss_shared.h diff --git a/reactos/include/reactos/wine/test.h b/include/reactos/wine/test.h similarity index 100% rename from reactos/include/reactos/wine/test.h rename to include/reactos/wine/test.h diff --git a/reactos/include/reactos/wine/unicode.h b/include/reactos/wine/unicode.h similarity index 100% rename from reactos/include/reactos/wine/unicode.h rename to include/reactos/wine/unicode.h diff --git a/reactos/include/reactos/wine/winbase.h b/include/reactos/wine/winbase.h similarity index 100% rename from reactos/include/reactos/wine/winbase.h rename to include/reactos/wine/winbase.h diff --git a/reactos/include/reactos/wine/winbase16.h b/include/reactos/wine/winbase16.h similarity index 100% rename from reactos/include/reactos/wine/winbase16.h rename to include/reactos/wine/winbase16.h diff --git a/reactos/include/reactos/wine/windef.h b/include/reactos/wine/windef.h similarity index 100% rename from reactos/include/reactos/wine/windef.h rename to include/reactos/wine/windef.h diff --git a/reactos/include/reactos/wine/windef16.h b/include/reactos/wine/windef16.h similarity index 100% rename from reactos/include/reactos/wine/windef16.h rename to include/reactos/wine/windef16.h diff --git a/reactos/include/reactos/wine/wine_common_ver.rc b/include/reactos/wine/wine_common_ver.rc similarity index 100% rename from reactos/include/reactos/wine/wine_common_ver.rc rename to include/reactos/wine/wine_common_ver.rc diff --git a/reactos/include/reactos/wine/wined3d_caps.h b/include/reactos/wine/wined3d_caps.h similarity index 100% rename from reactos/include/reactos/wine/wined3d_caps.h rename to include/reactos/wine/wined3d_caps.h diff --git a/reactos/include/reactos/wine/wined3d_gl.h b/include/reactos/wine/wined3d_gl.h similarity index 100% rename from reactos/include/reactos/wine/wined3d_gl.h rename to include/reactos/wine/wined3d_gl.h diff --git a/reactos/include/reactos/wine/wined3d_interface.h b/include/reactos/wine/wined3d_interface.h similarity index 100% rename from reactos/include/reactos/wine/wined3d_interface.h rename to include/reactos/wine/wined3d_interface.h diff --git a/reactos/include/reactos/wine/wined3d_types.h b/include/reactos/wine/wined3d_types.h similarity index 100% rename from reactos/include/reactos/wine/wined3d_types.h rename to include/reactos/wine/wined3d_types.h diff --git a/reactos/include/reactos/wine/wineheaders.rbuild b/include/reactos/wine/wineheaders.rbuild similarity index 100% rename from reactos/include/reactos/wine/wineheaders.rbuild rename to include/reactos/wine/wineheaders.rbuild diff --git a/reactos/include/reactos/wine/wingdi16.h b/include/reactos/wine/wingdi16.h similarity index 100% rename from reactos/include/reactos/wine/wingdi16.h rename to include/reactos/wine/wingdi16.h diff --git a/reactos/include/reactos/wine/winnetwk.h b/include/reactos/wine/winnetwk.h similarity index 100% rename from reactos/include/reactos/wine/winnetwk.h rename to include/reactos/wine/winnetwk.h diff --git a/reactos/include/reactos/wine/winnt.h b/include/reactos/wine/winnt.h similarity index 100% rename from reactos/include/reactos/wine/winnt.h rename to include/reactos/wine/winnt.h diff --git a/reactos/include/reactos/wine/winsock16.h b/include/reactos/wine/winsock16.h similarity index 100% rename from reactos/include/reactos/wine/winsock16.h rename to include/reactos/wine/winsock16.h diff --git a/reactos/include/reactos/wine/winuser.h b/include/reactos/wine/winuser.h similarity index 100% rename from reactos/include/reactos/wine/winuser.h rename to include/reactos/wine/winuser.h diff --git a/reactos/include/reactos/wine/winuser16.h b/include/reactos/wine/winuser16.h similarity index 100% rename from reactos/include/reactos/wine/winuser16.h rename to include/reactos/wine/winuser16.h diff --git a/reactos/include/reactos/wine/wownt32.h b/include/reactos/wine/wownt32.h similarity index 100% rename from reactos/include/reactos/wine/wownt32.h rename to include/reactos/wine/wownt32.h diff --git a/reactos/include/reactos/wine/wpp.h b/include/reactos/wine/wpp.h similarity index 100% rename from reactos/include/reactos/wine/wpp.h rename to include/reactos/wine/wpp.h diff --git a/reactos/include/reactos/winlogon.h b/include/reactos/winlogon.h similarity index 100% rename from reactos/include/reactos/winlogon.h rename to include/reactos/winlogon.h diff --git a/irc/ArchBlackmann/ArchBlackmann.cpp b/irc/ArchBlackmann/ArchBlackmann.cpp deleted file mode 100644 index 1d71f748847..00000000000 --- a/irc/ArchBlackmann/ArchBlackmann.cpp +++ /dev/null @@ -1,608 +0,0 @@ -// irc_test.cpp - -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include - -#include "File.h" -#include "ssprintf.h" -#include "trim.h" - -#include "IRCClient.h" -#include "config.h" - -using std::string; -using std::vector; - -//vector tech, module, dev, stru, period, status, type, func, irql, curse, cursecop; - -class List -{ -public: - string name; - bool macro; - std::vector list; - string tag; - int last; - List() { last = -1; } - List ( const char* _name, bool _macro ) : name(_name), macro(_macro) - { - tag = ssprintf("%%%s%%",_name); - last = -1; - } -}; - -vector lists; -vector ops; - -void ImportList ( const char* listname, bool macro ) -{ - lists.push_back ( List ( listname, macro ) ); - List& list = lists.back(); - File f ( ssprintf("%s.txt",listname).c_str(), "r" ); - string line; - while ( f.next_line ( line, true ) ) - list.list.push_back ( line ); -} - -const char* ListRand ( List& list ) -{ - vector& l = list.list; - if ( !l.size() ) - { - static string nothing; - nothing = ssprintf ( "", list.name.c_str() ); - return nothing.c_str(); - } - else if ( l.size() == 1 ) - return l[0].c_str(); - int sel = list.last; - while ( sel == list.last ) - sel = rand()%l.size(); - list.last = sel; - return l[sel].c_str(); -} - -const char* ListRand ( int i ) -{ - return ListRand ( lists[i] ); -} - -int GetListIndex ( const char* listname ) -{ - for ( int i = 0; i < lists.size(); i++ ) - { - if ( !stricmp ( lists[i].name.c_str(), listname ) ) - return i; - } - return -1; -} - -List& GetList ( const char* listname ) -{ - return lists[GetListIndex(listname)]; -} - -const char* ListRand ( const char* list ) -{ - int i = GetListIndex ( list ); - if ( i < 0 ) - return NULL; - return ListRand(i); -} - -string TaggedReply ( const char* listname ) -{ - string t = ListRand(listname); - string out; - const char* p = t.c_str(); - while ( *p ) - { - if ( *p == '%' ) - { - bool found = false; - for ( int i = 0; i < lists.size() && !found; i++ ) - { - if ( lists[i].macro && !strnicmp ( p, lists[i].tag.c_str(), lists[i].tag.size() ) ) - { - out += ListRand(i); - p += lists[i].tag.size(); - found = true; - } - } - if ( !found ) - out += *p++; - } - const char* p2 = strchr ( p, '%' ); - if ( !p2 ) - p2 = p + strlen(p); - if ( p2 > p ) - { - out += string ( p, p2-p ); - p = p2; - } - } - return out; -} - -string gobble ( string& s, const char* delim ) -{ - const char* p = s.c_str(); - p += strspn ( p, delim ); - const char* p2 = strpbrk ( p, delim ); - if ( !p2 ) p2 = p + strlen(p); - string out ( p, p2-p ); - p2 += strspn ( p2, delim ); - s = string ( p2 ); - return out; -} - -bool isop ( const string& who ) -{ - for ( int i = 0; i < ops.size(); i++ ) - { - if ( ops[i] == who ) - return true; - } - return false; -} - - -// do custom stuff with the IRCClient from your subclass via the provided callbacks... -class MyIRCClient : public IRCClient -{ - File flog; - clock_t brake_silence; - - // wait another 30 mins to brake the silence - #define NOIDLE brake_silence = clock () + 30 * CLK_TCK * 60 - - void CheckIdle ( void ) - { - while (true) // _inRun - { - while (clock() < brake_silence) - Sleep(10000); - - string out = TaggedReply("idle"); - - if ( !strnicmp ( out.c_str(), "/me ", 4 ) ) - Action ( CHANNEL, &out[4] ); - else - PrivMsg ( CHANNEL, out ); - - NOIDLE; - } - } - - static void THREADAPI CallMe ( MyIRCClient* irc ) - { - irc->CheckIdle(); - } - -public: - - MyIRCClient() - { - NOIDLE; - ThreadPool::Instance().Launch ( (ThreadPoolFunc*)MyIRCClient::CallMe, this ); - flog.open ( "arch.log", "r+" ); - } - // see IRCClient.h for documentation on these callbacks... - bool OnConnected() - { - return true; - } - bool OnJoin ( const string& user, const string& channel ) - { - //printf ( "user '%s' joined channel '%s'\n", user.c_str(), channel.c_str() ); - return true; - } - bool OnPart ( const std::string& user, const std::string& channel ) - { - std::vector::iterator it = ops.begin(); - for ( ; it != ops.end(); it++ ) - { - if ( *it == user ) - { - printf ( "remove '%s' to ops list\n", user.c_str() ); - ops.erase ( it ); - } - } - return true; - } - bool OnNick ( const std::string& oldNick, const std::string& newNick ) - { - for ( int i = 0; i < ops.size(); i++ ) - { - if ( ops[i] == oldNick ) - { - printf ( "op '%s' changed nick to '%s'\n", oldNick.c_str(), newNick.c_str() ); - ops[i] = newNick; - return true; - } - } - return true; - } - bool OnEndChannelUsers ( const string& channel ) - { - return true; - } - bool OnPrivMsg ( const string& from, const string& text ) - { - //flog.flush(); - printf ( "<%s> %s\n", from.c_str(), text.c_str() ); - flog.printf ( "<%s> %s\n", from.c_str(), text.c_str() ); - - if ( !isop(from) ) - return PrivMsg ( from, "hey, your tongue doesn't belong there!" ); - - else if ( strnicmp ( text.c_str(), "!say ", 5 ) ) - return PrivMsg ( from, "Talk to me on normal Chanel" ); - - string say = trim(&text[5]); - - if ( !strnicmp ( say.c_str(), "/me ", 4 ) ) - return Action ( CHANNEL, trim(&say[4]) ); - else - return PrivMsg ( CHANNEL, trim(say) ); - } - bool OnChannelMsg ( const string& channel, const string& from, const string& text ) - { - fflush ( flog ); - printf ( "%s <%s> %s\n", channel.c_str(), from.c_str(), text.c_str() ); - flog.printf ( "%s <%s> %s\n", channel.c_str(), from.c_str(), text.c_str() ); - NOIDLE; // add 30 mins till idle - - bool found_name = false; - string text2 ( text ); - strlwr ( &text2[0] ); - - if ( !strnicmp ( text.c_str(), BOTNAME, strlen(BOTNAME) ) ) - found_name = true; - - string s ( text ); - - if ( found_name ) - gobble ( s, " \t" ); // remove bot name - - // command - if ( s[0] == '!' ) - { - bool from_op = isop(from); - string cmd = gobble ( s, " \t" ); - - // from all - if ( false && cmd == "!svn" && from == "TechBot" ) // || cmd == "!help" && !TechBotOnline - { - PrivMsg ( channel, "For my help try !what." ); - } - - // from normel user - else if ( !from_op ) - { - if ( cmd == "!grovel" ) - { - string out = ssprintf(TaggedReply("nogrovel").c_str(),from.c_str()); - if ( !strnicmp ( out.c_str(), "/me ", 4 ) ) - return Action ( channel, &out[4] ); - else - return PrivMsg ( channel, out ); - } - - else if ( cmd == "!what" ) - { - return PrivMsg ( channel, ssprintf("For you, %s, I only support the \"!grovel\" command.", from.c_str()).c_str() ); - } - - else if ( cmd == "!grovel" || cmd == "!kiss" || cmd == "!hug" - || cmd == "!give" || cmd == "!what" || cmd == "!add" || cmd == "!remove" ) - { - PrivMsg ( channel, ssprintf("%s: I only take commands from ops",from.c_str()) ); - } - } - - // from op - else if ( cmd == "!grovel" ) - { - string out = ssprintf(TaggedReply("grovel").c_str(),from.c_str()); - if ( !strnicmp ( out.c_str(), "/me ", 4 ) ) - return Action ( channel, &out[4] ); - else - return PrivMsg ( channel, out ); - } - else if ( cmd == "!kiss" ) - { - if ( s.size() ) - return Action ( channel, ssprintf("kisses %s",s.c_str()) ); - else - return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) ); - } - else if ( cmd == "!hug" ) - { - if ( s.size() ) - return Action ( channel, ssprintf("hugs %s",s.c_str()) ); - else - return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) ); - } - else if ( cmd == "!give" ) - { - string who = gobble(s," \t"); - if ( who.size() && s.size() ) - return Action ( channel, ssprintf("gives %s a %s",who.c_str(),s.c_str()) ); - else - return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) ); - } - else if ( cmd == "!what" ) - { - PrivMsg ( channel, "For ops I support the following commands:" ); - PrivMsg ( channel, "!grovel" ); - PrivMsg ( channel, "!kiss" ); - PrivMsg ( channel, "!hug" ); - PrivMsg ( channel, "!give" ); - PrivMsg ( channel, "!say (the input is a private message)" ); - PrivMsg ( channel, "!add" ); - PrivMsg ( channel, "!remove" ); - PrivMsg ( channel, " - for more info see wiki" ); - } - else if ( cmd == "!add" ) - { - string listname = gobble ( s, " \t" ); - int i = GetListIndex ( listname.c_str() ); - if ( i == -1 ) - return PrivMsg ( channel, ssprintf("%s: I don't have a list named '%s'",from.c_str(),listname.c_str()) ); - List& list = lists[i]; - if ( s[0] == '\"' || s[0] == '\'' ) - { - char delim = s[0]; - const char* p = &s[1]; - const char* p2 = strchr ( p, delim ); - if ( !p2 ) - return PrivMsg ( channel, ssprintf("%s: Couldn't add, unmatched quotes",from.c_str()) ); - s = string ( p, p2-p ); - } - for ( i = 0; i < list.list.size(); i++ ) - { - if ( list.list[i] == s ) - return PrivMsg ( channel, ssprintf("%s: entry already exists in list '%s'",from.c_str(),listname.c_str()) ); - } - if ( !stricmp ( listname.c_str(), "curse" ) ) - strlwr ( &s[0] ); - list.list.push_back ( s ); - { - File f ( ssprintf("%s.txt",list.name.c_str()), "w" ); - for ( i = 0; i < list.list.size(); i++ ) - f.printf ( "%s\n", list.list[i].c_str() ); - } - return PrivMsg ( channel, ssprintf("%s: entry added to list '%s'",from.c_str(),listname.c_str()) ); - } - else if ( cmd == "!remove" ) - { - string listname = gobble ( s, " \t" ); - int i = GetListIndex ( listname.c_str() ); - if ( i == -1 ) - return PrivMsg ( channel, ssprintf("%s: I don't have a list named '%s'",from.c_str(),listname.c_str()) ); - List& list = lists[i]; - if ( s[0] == '\"' || s[0] == '\'' ) - { - char delim = s[0]; - const char* p = &s[1]; - const char* p2 = strchr ( p, delim ); - if ( !p2 ) - return PrivMsg ( channel, ssprintf("%s: Couldn't add, unmatched quotes",from.c_str()) ); - s = string ( p, p2-p ); - } - std::vector::iterator it = list.list.begin(); - for ( ; it != list.list.end(); it++ ) - { - if ( *it == s ) - { - list.list.erase ( it ); - { - File f ( ssprintf("%s.txt",list.name.c_str()), "w" ); - it = list.list.begin(); - for ( ; it < list.list.end(); it++ ) - f.printf ( "%s\n", it->c_str() ); - } - return PrivMsg ( channel, ssprintf("%s: entry removed from list '%s'",from.c_str(),listname.c_str()) ); - } - } - return PrivMsg ( channel, ssprintf("%s: entry doesn't exist in list '%s'",from.c_str(),listname.c_str()) ); - } - else - { - if (found_name) - return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) ); - } - - } // if (command) - - bool found_curse = false; - static vector& curse = GetList("curse").list; - text2 = " " + text2 + " "; - - for ( int i = 0; i < curse.size() && !found_curse; i++ ) - { - if ( strstr ( text2.c_str(), curse[i].c_str() ) ) - found_curse = true; - } - if ( found_curse ) - { - static List& cursecop = GetList("cursecop"); - return PrivMsg ( channel, ssprintf("%s: %s", from.c_str(), ListRand(cursecop)) ); - } - - string botname (BOTNAME); - strlwr ( &botname[0] ); - //botname = " " + botname + " "; - - if ( strstr(text2.c_str(), botname.c_str()) || strstr(text2.c_str(), " arch ") || found_name ) - { - string out = ssprintf("%s: %s", from.c_str(), TaggedReply("tech").c_str()); - flog.printf ( "TECH-REPLY: %s\n", out.c_str() ); - if ( !strnicmp ( out.c_str(), "/me ", 4 ) ) - return Action ( channel, &out[4] ); - else - return PrivMsg ( channel, out ); - } - return true; - - } // On Chanel Message - - bool OnChannelMode ( const string& channel, const string& mode ) - { - //printf ( "OnChannelMode(%s,%s)\n", channel.c_str(), mode.c_str() ); - return true; - } - bool OnUserModeInChannel ( const string& src, const string& channel, const string& mode, const string& target ) - { - printf ( "OnUserModeInChannel(%s,%s,%s,%s)\n", src.c_str(), channel.c_str(), mode.c_str(), target.c_str() ); - const char* p = mode.c_str(); - if ( !p ) - return true; - while ( *p ) - { - switch ( *p++ ) - { - case '+': - while ( *p != 0 && *p != ' ' ) - { - if ( *p == 'o' ) - { - printf ( "adding '%s' to ops list\n", target.c_str() ); - ops.push_back ( target ); - } - break; - } - break; - case '-': - while ( *p != 0 && *p != ' ' ) - { - if ( *p == 'o' ) - { - std::vector::iterator it = ops.begin(); - for ( ; it != ops.end(); it++ ) - { - if ( *it == target ) - { - printf ( "remove '%s' to ops list\n", target.c_str() ); - ops.erase ( it ); - } - } - break; - } - } - } - } - return true; - } - bool OnMode ( const string& user, const string& mode ) - { - //printf ( "OnMode(%s,%s)\n", user.c_str(), mode.c_str() ); - return true; - } - bool OnChannelUsers ( const string& channel, const vector& users ) - { - //printf ( "[%s has %i users]: ", channel.c_str(), users.size() ); - for ( int i = 0; i < users.size(); i++ ) - { - if ( users[i][0] == '@' ) - ops.push_back ( &users[i][1] ); - /*if ( i ) - printf ( ", " ); - printf ( "%s", users[i].c_str() );*/ - } - //printf ( "\n" ); - return true; - } - bool OnKick ( void ) - { - Join(CHANNEL); - return true; - } - bool OnBanned ( const std::string& channel ) - { - Sleep(10000); - return Join(CHANNEL); - } -}; - -int main ( int argc, char** argv ) -{ - srand ( time(NULL) ); - - ImportList ( "dev", true ); - ImportList ( "func", true ); - ImportList ( "dev", true ); - ImportList ( "func", true ); - ImportList ( "irql", true ); - ImportList ( "module", true ); - ImportList ( "period", true ); - ImportList ( "status", true ); - ImportList ( "stru", true ); - ImportList ( "type", true ); - - ImportList ( "tech", false ); - ImportList ( "curse", false ); - ImportList ( "cursecop", false ); - ImportList ( "grovel", false ); - ImportList ( "nogrovel", false ); - ImportList ( "idle", false ); - -#ifdef _DEBUG - printf ( "initializing IRCClient debugging\n" ); - IRCClient::SetDebug ( true ); -#endif//_DEBUG - - while (true) - { - printf ( "calling suStartup()\n" ); - suStartup(); - printf ( "creating IRCClient object\n" ); - MyIRCClient irc; - printf ( "connecting to freenode\n" ); - - if ( !irc.Connect ( SERVER ) ) // irc.freenode.net - { - printf ( "couldn't connect to server\n" ); - Sleep(10000); - continue; - } - printf ( "sending user command\n" ); - if ( !irc.User ( BOTNAME, "reactos.com", SERVER, "ArchBlackmann" ) ) - { - printf ( "USER command failed, retying ...\n" ); - Sleep(10000); - continue; - } - printf ( "sending nick\n" ); - if ( !irc.Nick ( BOTNAME ) ) - { - printf ( "NICK command failed, retying ...\n" ); - Sleep(10000); - continue; - } - printf ( "setting mode\n" ); - if ( !irc.Mode ( MODE ) ) - { - printf ( "MODE command failed, retying ...\n" ); - Sleep(10000); - continue; - } - printf ( "joining channel\n" ); - if ( !irc.Join ( CHANNEL ) ) - { - printf ( "JOIN command failed, retying ...\n" ); - Sleep(10000); - continue; - } - - printf ( "entering irc client processor\n" ); - irc.Run ( false ); // do the processing in this thread... - } - - return 0; -} diff --git a/irc/ArchBlackmann/ArchBlackmann.dsp b/irc/ArchBlackmann/ArchBlackmann.dsp deleted file mode 100644 index 03768e37c32..00000000000 --- a/irc/ArchBlackmann/ArchBlackmann.dsp +++ /dev/null @@ -1,216 +0,0 @@ -# Microsoft Developer Studio Project File - Name="ArchBlackmann" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=ArchBlackmann - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ArchBlackmann.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ArchBlackmann.mak" CFG="ArchBlackmann - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ArchBlackmann - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "ArchBlackmann - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ArchBlackmann - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "ArchBlackmann - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "ArchBlackmann - Win32 Release" -# Name "ArchBlackmann - Win32 Debug" -# Begin Source File - -SOURCE=.\ArchBlackmann.cpp -# End Source File -# Begin Source File - -SOURCE=.\auto_ptr.h -# End Source File -# Begin Source File - -SOURCE=.\auto_vector.h -# End Source File -# Begin Source File - -SOURCE=.\base64.cpp -# End Source File -# Begin Source File - -SOURCE=.\base64.h -# End Source File -# Begin Source File - -SOURCE=.\chomp.cpp -# End Source File -# Begin Source File - -SOURCE=.\chomp.h -# End Source File -# Begin Source File - -SOURCE=.\config.h -# End Source File -# Begin Source File - -SOURCE=.\cram_md5.cpp -# End Source File -# Begin Source File - -SOURCE=.\cram_md5.h -# End Source File -# Begin Source File - -SOURCE=.\File.cpp -# End Source File -# Begin Source File - -SOURCE=.\File.h -# End Source File -# Begin Source File - -SOURCE=.\IRCClient.cpp -# End Source File -# Begin Source File - -SOURCE=.\IRCClient.h -# End Source File -# Begin Source File - -SOURCE=.\MD5.cpp -# End Source File -# Begin Source File - -SOURCE=.\MD5.h -# End Source File -# Begin Source File - -SOURCE=.\panic.cpp -# End Source File -# Begin Source File - -SOURCE=.\panic.h -# End Source File -# Begin Source File - -SOURCE=.\QueueT.h -# End Source File -# Begin Source File - -SOURCE=.\Reli.h -# End Source File -# Begin Source File - -SOURCE=.\ReliMT.cpp -# End Source File -# Begin Source File - -SOURCE=.\ReliMT.h -# End Source File -# Begin Source File - -SOURCE=.\SockUtils.cpp -# End Source File -# Begin Source File - -SOURCE=.\SockUtils.h -# End Source File -# Begin Source File - -SOURCE=.\SplitJoin.cpp -# End Source File -# Begin Source File - -SOURCE=.\SplitJoin.h -# End Source File -# Begin Source File - -SOURCE=.\ssprintf.cpp -# End Source File -# Begin Source File - -SOURCE=.\ssprintf.h -# End Source File -# Begin Source File - -SOURCE=.\ThreadPool.cpp -# End Source File -# Begin Source File - -SOURCE=.\ThreadPool.h -# End Source File -# Begin Source File - -SOURCE=.\trim.cpp -# End Source File -# Begin Source File - -SOURCE=.\trim.h -# End Source File -# Begin Source File - -SOURCE=.\verify.h -# End Source File -# End Target -# End Project diff --git a/irc/ArchBlackmann/ArchBlackmann.dsw b/irc/ArchBlackmann/ArchBlackmann.dsw deleted file mode 100644 index d8c4784be0e..00000000000 --- a/irc/ArchBlackmann/ArchBlackmann.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "ArchBlackmann"=.\ArchBlackmann.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/irc/ArchBlackmann/File.cpp b/irc/ArchBlackmann/File.cpp deleted file mode 100644 index a9fc94ed158..00000000000 --- a/irc/ArchBlackmann/File.cpp +++ /dev/null @@ -1,265 +0,0 @@ -// File.cpp -// (C) 2002-2004 Royce Mitchell III -// Dually licensed under BSD & LGPL - -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include "File.h" - -#ifndef nelem -#define nelem(x) ( sizeof(x) / sizeof(x[0]) ) -#endif//nelem - -typedef File::filesize_t filesize_t; -typedef File::fileoff_t fileoff_t; - - -fileoff_t File::seek ( fileoff_t offset ) -{ -#ifdef WIN32 - if ( _f->_flag & _IOWRT ) // is there pending output? - fflush ( _f ); - - // reset "buffered input" variables - _f->_cnt = 0; - _f->_ptr = _f->_base; - - // make sure we're going forward - if ( _f->_flag & _IORW ) - _f->_flag &= ~(_IOREAD|_IOWRT); - - return _lseeki64 ( _fileno(_f), offset, SEEK_SET ); -#else//UNIX - return lseek64 ( fileno(_f), offset, SEEK_SET ); -#endif -} - -std::string File::getline ( bool strip_crlf /*= false*/ ) -{ - std::string s = ""; - char buf[256]; - for ( ;; ) - { - *buf = 0; - fgets ( buf, nelem(buf)-1, _f ); - if ( !*buf ) - break; - s += buf; - if ( strchr ( "\r\n", buf[strlen(buf)-1] ) ) - break; - } - if ( strip_crlf && s.size() ) - { - char* p = strpbrk ( &s[0], "\r\n" ); - if ( p ) - { - *p = '\0'; - s.resize ( p-&s[0] ); - } - } - return s; -} - -std::wstring File::wgetline ( bool strip_crlf /*= false*/ ) -{ - std::wstring s = L""; - wchar_t buf[256]; - for ( ;; ) - { - *buf = 0; - fgetws ( buf, nelem(buf)-1, _f ); - if ( !*buf ) - break; - s += buf; - if ( wcschr ( L"\r\n", buf[wcslen(buf)-1] ) ) - break; - } - if ( strip_crlf && s.size() ) - { - wchar_t* p = wcspbrk ( &s[0], L"\r\n" ); - if ( p ) - { - *p = L'\0'; - s.resize ( (p-&s[0])/sizeof(wchar_t) ); - } - } - return s; -} - -// this function searches for the next end-of-line and puts all data it -// finds until then in the 'line' parameter. -// -// call continuously until the function returns false ( no more data ) -bool File::next_line ( std::string& line, bool strip_crlf ) -{ - line = getline(strip_crlf); - // indicate that we're done *if*: - // 1) there's no more data, *and* - // 2) we're at the end of the file - return line.size()>0 || !eof(); -} - -bool File::next_line ( std::wstring& line, bool strip_crlf ) -{ - line = wgetline ( strip_crlf ); - return line.size()>0 || !eof(); -} - -/* -example usage: - -bool mycallback ( const std::string& line, int line_number, long lparam ) -{ - std::cout << line << std::endl; - return true; // continue enumeration -} - -File f ( "file.txt", "rb" ); // open file for binary read-only ( i.e. "rb" ) -f.enum_lines ( mycallback, 0, true ); -*/ - -/*bool File::enum_lines ( bool (*callback)(const std::string& line, int line_number, long lparam), long lparam, bool strip_crlf ) -{ - int line_number = 0; - for ( ;; ) - { - std::string s = getline(strip_crlf); - line_number++; - if ( !s.size() ) - { - if ( eof() ) - return true; - else - continue; - } - if ( !(*callback) ( s, line_number, lparam ) ) - return false; - } -}*/ - -filesize_t File::length() const -{ -#ifdef WIN32 - return _filelengthi64 ( _fileno(_f) ); -#elif defined(UNIX) - struct stat64 file_stat; - verify(fstat64(fileno(_f), &file_stat) == 0); - return file_stat.st_size; -#endif -} - -void File::close() -{ - if ( _f ) - { - fclose(_f); - _f = 0; - } -} - -void File::printf ( const char* fmt, ... ) -{ - va_list arg; - int done; - - va_start(arg, fmt); - assert(_f); - done = vfprintf ( _f, fmt, arg ); - va_end(arg); -} - -/*static*/ bool File::LoadIntoString ( std::string& s, const std::string& filename ) -{ - File in ( filename, "rb" ); - if ( !in.isopened() ) - return false; - filesize_t flen = in.length(); - size_t len = size_t(flen); - if ( len != flen ) - return false; // file too big... - s.resize ( len + 1 ); - if ( !in.read ( &s[0], len ) ) - return false; - s[len] = '\0'; - s.resize ( len ); - return true; -} - -/*static*/ bool File::LoadIntoString ( std::string& s, const std::wstring& filename ) -{ - File in ( filename, L"rb" ); - if ( !in.isopened() ) - return false; - filesize_t flen = in.length(); - size_t len = size_t(flen); - if ( len != flen ) - return false; // file too big... - s.resize ( len + 1 ); - if ( !in.read ( &s[0], len ) ) - return false; - s[len] = '\0'; - s.resize ( len ); - return true; -} - -/*static*/ bool File::SaveFromString ( const std::string& filename, const std::string& s, bool binary ) -{ - File out ( filename, binary ? "wb" : "w" ); - if ( !out.isopened() ) - return false; - out.write ( s.c_str(), s.size() ); - return true; -} - -/*static*/ bool File::SaveFromString ( const std::wstring& filename, const std::string& s, bool binary ) -{ - File out ( filename, binary ? L"wb" : L"w" ); - if ( !out.isopened() ) - return false; - out.write ( s.c_str(), s.size() ); - return true; -} - -/*static*/ bool File::SaveFromBuffer ( const std::string& filename, const char* buf, size_t buflen, bool binary ) -{ - File out ( filename, binary ? "wb" : "w" ); - if ( !out.isopened() ) - return false; - out.write ( buf, buflen ); - return true; -} - -/*static*/ bool File::SaveFromBuffer ( const std::wstring& filename, const char* buf, size_t buflen, bool binary ) -{ - File out ( filename, binary ? L"wb" : L"w" ); - if ( !out.isopened() ) - return false; - out.write ( buf, buflen ); - return true; -} - -/*static*/ std::string File::TempFileName ( const std::string& prefix ) -{ -#ifdef WIN32 - std::string s ( _tempnam ( ".", prefix.c_str() ) ); - return s; -#else - // FIXME - return string(""); -#endif -} - -/*static*/ std::wstring File::TempFileName ( const std::wstring& prefix ) -{ -#ifdef WIN32 - std::wstring s ( _wtempnam ( L".", prefix.c_str() ) ); - return s; -#else - // FIXME - return std::wstring(L""); -#endif -} diff --git a/irc/ArchBlackmann/File.h b/irc/ArchBlackmann/File.h deleted file mode 100644 index a5baea62515..00000000000 --- a/irc/ArchBlackmann/File.h +++ /dev/null @@ -1,173 +0,0 @@ -// File.h -// (C) 2002-2004 Royce Mitchell III -// Dually licensed under BSD & LGPL - -#ifndef FILE_H -#define FILE_H - -#ifdef WIN32 -# include // fgetc -# include -#elif defined(UNIX) -# include -# include -#endif -#include -#include - -class File -{ -public: -#ifdef WIN32 - typedef __int64 fileoff_t; - typedef unsigned __int64 filesize_t; -#else//_MSC_VER - typedef __off64_t fileoff_t; - typedef __size64_t filesize_t; -#endif//_MSC_VER - - File() : _f(0) - { - } - - File ( const std::string& filename, const char* mode ) : _f(0) - { - open ( filename, mode ); - } - - File ( const std::wstring& filename, const wchar_t* mode ) : _f(0) - { - open ( filename, mode ); - } - - File ( const char* filename, const char* mode ) : _f(0) - { - open ( filename, mode ); - } - - File ( const wchar_t* filename, const wchar_t* mode ) : _f(0) - { - open ( filename, mode ); - } - - ~File() - { - close(); - } - - bool open ( const std::string& filename, const char* mode ) - { - assert ( !_f ); - return ( _f = fopen ( filename.c_str(), mode ) ) != 0; - } - - bool open ( const std::wstring& filename, const wchar_t* mode ) - { - assert ( !_f ); - return ( _f = _wfopen ( filename.c_str(), mode ) ) != 0; - } - - bool open ( const char* filename, const char* mode ) - { - assert ( !_f ); - return ( _f = fopen ( filename, mode ) ) != 0; - } - - bool open ( const wchar_t* filename, const wchar_t* mode ) - { - assert ( !_f ); - return ( _f = _wfopen ( filename, mode ) ) != 0; - } - - fileoff_t seek ( fileoff_t offset ); - - int get() - { - return fgetc ( _f ); - } - - bool put ( int c ) - { - return fputc ( c, _f ) != EOF; - } - - std::string getline ( bool strip_crlf = false ); - std::wstring wgetline ( bool strip_crlf = false ); - - // this function searches for the next end-of-line and puts all data it - // finds until then in the 'line' parameter. - // - // call continuously until the function returns false ( no more data ) - bool next_line ( std::string& line, bool strip_crlf ); - bool next_line ( std::wstring& line, bool strip_crlf ); - - bool read ( void* data, unsigned len ) - { - return len == fread ( data, 1, len, _f ); - } - - bool write ( const void* data, unsigned len ) - { - return len == fwrite ( data, 1, len, _f ); - } - - bool write ( const std::string& data ) - { - return data.length() == fwrite ( data.c_str(), 1, data.length(), _f ); - } - - bool write ( const std::wstring& data ) - { - return data.length() == fwrite ( data.c_str(), sizeof(data[0]), data.length(), _f ); - } - - filesize_t length() const; - - void close(); - - bool isopened() const - { - return _f != 0; - } - - bool is_open() const - { - return _f != 0; - } - - bool eof() const - { - return feof(_f) ? true : false; - } - - FILE* operator * () - { - return _f; - } - - operator FILE*() - { - return _f; - } - - void printf ( const char* fmt, ... ); - void printf ( const wchar_t* fmt, ... ); - - static bool LoadIntoString ( std::string& s, const std::string& filename ); - static bool LoadIntoString ( std::string& s, const std::wstring& filename ); - static bool SaveFromString ( const std::string& filename, const std::string& s, bool binary ); - static bool SaveFromString ( const std::wstring& filename, const std::string& s, bool binary ); - static bool SaveFromBuffer ( const std::string& filename, const char* buf, size_t buflen, bool binary ); - static bool SaveFromBuffer ( const std::wstring& filename, const char* buf, size_t buflen, bool binary ); - - static std::string TempFileName ( const std::string& prefix ); - static std::wstring TempFileName ( const std::wstring& prefix ); - -private: - File(const File&) {} - const File& operator = ( const File& ) { return *this; } - - FILE * _f; -}; - -#endif//FILE_H diff --git a/irc/ArchBlackmann/IRCClient.cpp b/irc/ArchBlackmann/IRCClient.cpp deleted file mode 100644 index 5910358365a..00000000000 --- a/irc/ArchBlackmann/IRCClient.cpp +++ /dev/null @@ -1,418 +0,0 @@ -// IRCClient.cpp -// This file is (C) 2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include - -#include "IRCClient.h" -#include "MD5.h" -#include "cram_md5.h" -#include "trim.h" -#include "chomp.h" -#include "SplitJoin.h" -#include "base64.h" -#include "config.h" - -using std::string; -using std::stringstream; -using std::vector; - -bool IRCClient::_debug = true; - -// see rfc1459 for IRC-Protocoll Reference - -IRCClient::IRCClient() - : _timeout(10*60*1000), _inRun(false) -{ -} - -bool IRCClient::Connect ( const string& server, short port ) -{ - string buf; - Close(); - Attach ( suTcpSocket() ); - if ( !suConnect ( *this, server.c_str(), port ) ) - return false; - return true; -} - -bool -IRCClient::User ( const string& user, const string& mode, - const string& network, const string& realname ) -{ - string buf; - buf = "USER " + user + " \"" + mode + "\" \"" + network + "\" :" + realname + "\n"; - return Send ( buf ); -} - -bool -IRCClient::Nick ( const string& nick ) -{ - _nick = nick; - Send ( "NICK " + _nick + "\n" ); - PrivMsg ("NickServ", "IDENTIFY " + (string)PASS); - return true; -} - -bool -IRCClient::Mode ( const string& mode ) -{ - return Send ( "MODE " + _nick + " " + mode + "\n" ); -} - -bool -IRCClient::Names ( const string& channel ) -{ - return Send ( "NAMES " + channel + "\n" ); -} - -bool -IRCClient::Mode ( const string& channel, const string& mode, const string& target ) -{ - return Send ( "MODE " + channel + " " + mode + " " + target + "\n" ); -} - -bool -IRCClient::Join ( const string& channel ) -{ - return Send("JOIN " + channel + "\n"); -} - -bool -IRCClient::PrivMsg ( const string& to, const string& text ) -{ - return Send ( "PRIVMSG " + to + " :" + text + '\n' ); -} - -bool -IRCClient::Action ( const string& to, const string& text ) -{ - return Send ( "PRIVMSG " + to + " :" + (char)1 + "ACTION " + text + (char)1 + '\n' ); -} - -bool -IRCClient::Part ( const string& channel, const string& text ) -{ - return Send ( "PART " + channel + " :" + text + "\n" ); -} - -bool -IRCClient::Quit ( const string& text ) -{ - return Send( "QUIT :" + text + "\n"); -} - -bool IRCClient::_Recv ( string& buf ) -{ - bool b = (recvUntil ( buf, '\n', _timeout ) > 0); - if ( b && _debug ) - { - printf ( ">> %s", buf.c_str() ); - if ( buf[buf.length()-1] != '\n' ) - printf ( "\n" ); - } - return b; -} - -bool IRCClient::Send ( const string& buf ) -{ - if ( _debug ) - { - printf ( "<< %s", buf.c_str() ); - if ( buf[buf.length()-1] != '\n' ) - printf ( "\n" ); - } - return ( buf.length() == (size_t)send ( *this, buf.c_str(), buf.length(), 0 ) ); -} - -bool IRCClient::OnPing( const string& text ) -{ - return Send( "PONG " + text + "\n" ); -} - - -int THREADAPI IRCClient::Callback ( IRCClient* irc ) -{ - return irc->Run ( false ); -} - -int IRCClient::Run ( bool launch_thread ) -{ - if ( (SOCKET)*this == INVALID_SOCKET ) - return 0; - if ( _inRun ) return 1; - if ( launch_thread ) - { - ThreadPool::Instance().Launch ( (ThreadPoolFunc*)IRCClient::Callback, this ); - return 1; - } - _inRun = true; - if ( _debug ) printf ( "IRCClient::Run() - waiting for responses\n" ); - string buf; - while ( _Recv(buf) ) - { - if ( !strnicmp ( buf.c_str(), "NOTICE ", 7 ) ) - { - //printf ( "recv'd NOTICE msg...\n" ); - // TODO... - //OnAuth ( - } - else if ( !strnicmp ( buf.c_str(), "PING ", 5 ) ) - { - const char* p = &buf[5]; // point to first char after "PING " - while ( *p == ':' ) // then read past the colons - p++; - const char* p2 = strpbrk ( p, "\r\n" ); // find the end of line - string text ( p, p2-p ); // and set the text - OnPing( text ); - } - else if ( buf[0] == ':' ) - { - const char* p = &buf[1]; // skip first colon... - const char* p2 = strpbrk ( p, " !" ); - if ( !p2 ) - { - printf ( "!!!:OnRecv failure 0: ", buf.c_str() ); - continue; - } - string src ( p, p2-p ); - if ( !src.length() ) - { - printf ( "!!!:OnRecv failure 0.5: %s", buf.c_str() ); - continue; - } - p = p2 + 1; - if ( *p2 == '!' ) - { - p2 = strchr ( p, ' ' ); - if ( !p2 ) - { - printf ( "!!!:OnRecv failure 1: %s", buf.c_str() ); - continue; - } - //string srchost ( p, p2-p ); - p = p2 + 1; - } - p2 = strchr ( p, ' ' ); - if ( !p2 ) - { - printf ( "!!!:OnRecv failure 2: %s", buf.c_str() ); - continue; - } - string cmd ( p, p2-p ); - p = p2 + 1; - p2 = strpbrk ( p, " :" ); - if ( !p2 ) - { - printf ( "!!!:OnRecv failure 3: %s", buf.c_str() ); - continue; - } - string tgt ( p, p2-p ); - p = p2 + 1; - p += strspn ( p, " " ); - if ( *p == '=' ) - { - p++; - p += strspn ( p, " " ); - } - if ( *p == ':' ) - p++; - p2 = strpbrk ( p, "\r\n" ); - if ( !p2 ) - { - printf ( "!!!:OnRecv failure 4: %s", buf.c_str() ); - continue; - } - string text ( p, p2-p ); - strlwr ( &cmd[0] ); - if ( cmd == "privmsg" ) - { - if ( !tgt.length() ) - { - printf ( "!!!:OnRecv failure 5 (PRIVMSG w/o target): %s", buf.c_str() ); - continue; - } - if ( *p == 1 ) - { - p++; - p2 = strchr ( p, ' ' ); - if ( !p2 ) p2 = p + strlen(p); - cmd = string ( p, p2-p ); - strlwr ( &cmd[0] ); - p = p2 + 1; - p2 = strchr ( p, 1 ); - if ( !p2 ) - { - printf ( "!!!:OnRecv failure 6 (no terminating \x01 for initial \x01 found: %s", buf.c_str() ); - continue; - } - text = string ( p, p2-p ); - if ( cmd == "action" ) - { - if ( tgt[0] == '#' ) - OnChannelAction ( tgt, src, text ); - else - OnPrivAction ( src, text ); - } - else - { - printf ( "!!!:OnRecv failure 7 (unrecognized \x01 command '%s': %s", cmd.c_str(), buf.c_str() ); - continue; - } - } - else - { - if ( tgt[0] == '#' ) - OnChannelMsg ( tgt, src, text ); - else - OnPrivMsg ( src, text ); - } - } - else if ( cmd == "mode" ) - { - // two diff. kinds of mode notifications... - //printf ( "[MODE] src='%s' cmd='%s' tgt='%s' text='%s'", src.c_str(), cmd.c_str(), tgt.c_str(), text.c_str() ); - //OnMode ( - // self mode change: - // [MODE] src=Nick cmd=mode tgt=Nick text=+i - // channel mode change: - // [MODE] src=Nick cmd=mode tgt=#Channel text=+o Nick - if ( tgt[0] == '#' ) - { - p = text.c_str(); - p2 = strchr ( p, ' ' ); - if ( p2 && *p2 ) - { - string mode ( p, p2-p ); - p = p2 + 1; - p += strspn ( p, " " ); - OnUserModeInChannel ( src, tgt, mode, trim(p) ); - } - else - OnChannelMode ( tgt, text ); - } - else - OnMode ( tgt, text ); - } - else if ( cmd == "join" ) - { - mychannel = text; - OnJoin ( src, text ); - } - else if ( cmd == "part" ) - { - OnPart ( src, text ); - } - else if ( cmd == "nick" ) - { - OnNick ( src, text ); - } - else if ( cmd == "kick" ) - { - OnKick (); - } - else if ( isdigit(cmd[0]) ) - { - int i = atoi(cmd.c_str()); - switch ( i ) - { - - case 1: // "Welcome!" - i.e. it's okay to issue commands now... - OnConnected(); - break; - - case 353: // user list for channel.... - { - p = text.c_str(); - p2 = strpbrk ( p, " :" ); - if ( !p2 ) continue; - string channel ( p, p2-p ); - p = strchr ( p2, ':' ); - if ( !p ) continue; - p++; - vector users; - while ( *p ) - { - p2 = strchr ( p, ' ' ); - if ( !p2 ) - p2 = p + strlen(p); - users.push_back ( string ( p, p2-p ) ); - p = p2+1; - p += strspn ( p, " " ); - } - OnChannelUsers ( channel, users ); - } - break; - - case 366: // END of user list for channel - { - p = text.c_str(); - p2 = strpbrk ( p, " :" ); - if ( !p2 ) continue; - string channel ( p, p2-p ); - OnEndChannelUsers ( channel ); - } - break; - - case 474: // You are banned - { - p = text.c_str(); - p2 = strpbrk ( p, " :" ); - if ( !p2 ) continue; - string channel ( p, p2-p ); - OnBanned ( channel ); - } - break; - - case 433: // Nick in Use - { - string nick = _nick; - Nick (nick + "_"); - - PrivMsg ("NickServ", "GHOST " + nick + " " + PASS); - - // HACK HACK HACK - Mode ( "+i" ); - Join ( CHANNEL ); // this is because IRC client does not review if his commands were sucessfull - - Sleep ( 1000 ); - Nick ( nick ); - } - break; - - case 2: //MOTD - case 376: //MOTD - case 372: - break; - - default: - if ( _debug ) printf ( "unknown command %i: %s", i, buf.c_str() ); - break; - } - } - else - { - if ( strstr ( buf.c_str(), "ACTION" ) ) - { - printf ( "ACTION: " ); - for ( int i = 0; i < buf.size(); i++ ) - printf ( "%c(%xh)", buf[i], (unsigned)(unsigned char)buf[i] ); - } - else if ( _debug ) printf ( "unrecognized ':' response: %s", buf.c_str() ); - } - } - else - { - if ( _debug ) printf ( "unrecognized irc msg: %s", buf.c_str() ); - } - //OnRecv ( buf ); - } - if ( _debug ) printf ( "IRCClient::Run() - exiting\n" ); - _inRun = false; - return 0; -} diff --git a/irc/ArchBlackmann/IRCClient.h b/irc/ArchBlackmann/IRCClient.h deleted file mode 100644 index 57fa2105e50..00000000000 --- a/irc/ArchBlackmann/IRCClient.h +++ /dev/null @@ -1,148 +0,0 @@ -// IRCClient.h -// This file is (C) 2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#ifndef IRCCLIENT_H -#define IRCCLIENT_H - -#include -#include -#include "SockUtils.h" -#include "ThreadPool.h" - -class IRCClient : public suBufferedRecvSocket -{ - -public: - IRCClient(); - - std::string mychannel; - static bool GetDebug() { return _debug; } - static bool SetDebug ( bool debug ) { bool old = _debug; _debug = debug; return old; } - - // connect to server ( record greeting for apop if it exists ) - bool Connect ( const std::string& server, short port = 6667 ); - - bool Running() { return _inRun; } - - ////////////////////////// IRC Client Protocol commands /////////////////////// - - // first thing you must call... mode can be "" - // network can be same as name of server used in Connect() above - bool User ( const std::string& user, const std::string& mode, - const std::string& network, const std::string& realname ); - - // change nick... - bool Nick ( const std::string& nick ); - - // change mode for self... - bool Mode ( const std::string& mode ); - - // set someone's mode in channel ( like oping someone ) - bool Mode ( const std::string& channel, const std::string& mode, const std::string& target ); - - // request a list of names of clients in a channel - bool Names ( const std::string& channel ); - - // join a channel... - bool Join ( const std::string& channel ); - - // send message to someone or some channel - bool PrivMsg ( const std::string& to, const std::string& text ); - - // send /me to someone or some channel - bool Action ( const std::string& to, const std::string& text ); - - // leave a channel - bool Part ( const std::string& channel, const std::string& text ); - - // log off - bool Quit ( const std::string& text ); - - ////////////////////// callback functions //////////////////////////// - - // OnConnected: you just successfully logged into irc server - virtual bool OnConnected() = 0; - - virtual bool OnNick ( const std::string& oldNick, const std::string& newNick ) { return true; } - - // OnJoin: someone just successfully joined a channel you are in ( also sent when you successfully join a channel ) - virtual bool OnJoin ( const std::string& user, const std::string& channel ) { return true; } - - // OnPart: someone just left a channel you are in - virtual bool OnPart ( const std::string& user, const std::string& channel ) { return true; } - - // OnPrivMsg: you just received a private message from a user - virtual bool OnPrivMsg ( const std::string& from, const std::string& text ) { return true; } - - virtual bool OnPrivAction ( const std::string& from, const std::string& text ) { return true; } - - // OnChannelMsg: you just received a chat line in a channel - virtual bool OnChannelMsg ( const std::string& channel, const std::string& from, - const std::string& text ) { return true; } - - // OnChannelAction: you just received a "/me" line in a channel - virtual bool OnChannelAction ( const std::string& channel, const std::string& from, - const std::string& text ) { return true; } - - // OnChannelMode: notification of a change of a channel's mode - virtual bool OnChannelMode ( const std::string& channel, const std::string& mode ) - { return true; } - - // OnUserModeInChannel: notification of a mode change of a user with respect to a channel. - // f.ex.: this will be called when someone is oped in a channel. - virtual bool OnUserModeInChannel ( const std::string& src, const std::string& channel, - const std::string& mode, const std::string& target ) { return true; } - - // OnMode: you will receive this when you change your own mode, at least... - virtual bool OnMode ( const std::string& user, const std::string& mode ) { return true; } - - // notification of what users are in a channel ( you may get multiple of these... ) - virtual bool OnChannelUsers ( const std::string& channel, const std::vector& users ) - { return true; } - - // OnKick: if the client has been kicked - virtual bool OnKick ( void ) { return true; } - - // OnKick: if the client has been kicked - virtual bool OnBanned ( const std::string& channel ) { return true; } - - // notification that you have received the entire list of users for a channel - virtual bool OnEndChannelUsers ( const std::string& channel ) { return true; } - - // OnPing - default implementation replies to PING with a valid PONG. required on some systems to - // log in. Most systems require a response in order to stay connected, used to verify a client hasn't - // dropped. - virtual bool OnPing ( const std::string& text ); - - ////////////////////// other functions //////////////////////////// - - // this is for sending data to irc server. it's public in case you need to send some - // command not supported by this base class... - bool Send ( const std::string& buf ); - - // if launch_thread is true, this function will spawn a thread that will process - // incoming packets until the socket dies. - // otherwise ( launch_thread is false ) this function will do that processing - // in *this* thread, and not return until the socket dies. - int Run ( bool launch_thread ); - - ////////////////////// private stuff //////////////////////////// -private: - bool _Recv ( std::string& buf ); - - static int THREADAPI Callback ( IRCClient* irc ); - - static bool _debug; - std::string _nick; - int _timeout; - std::string _apop_challenge; - - volatile bool _inRun; - - // disable copy semantics - IRCClient ( const IRCClient& ); - IRCClient& operator = ( const IRCClient& ); -}; - -#endif//IRCCLIENT_H diff --git a/irc/ArchBlackmann/MD5.cpp b/irc/ArchBlackmann/MD5.cpp deleted file mode 100644 index 43200cfa1a1..00000000000 --- a/irc/ArchBlackmann/MD5.cpp +++ /dev/null @@ -1,418 +0,0 @@ -// MD5.CPP - RSA Data Security, Inc., MD5 message-digest algorithm - -/* -Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. -*/ - -//#include -#include -#include -#include -#include "MD5.h" - -using std::string; -using std::vector; - -// Constants for MD5Transform routine. -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static void MD5Transform ( UINT4 [4], const uchar [64] ); -static void Encode ( unsigned char *, UINT4 *, unsigned int ); -static void Decode ( UINT4 *, const uchar *, unsigned int ); - -static unsigned char PADDING[64] = -{ - 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 -}; - -// F, G, H and I are basic MD5 functions. -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -// ROTATE_LEFT rotates x left n bits. -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. -// Rotation is separate from addition to prevent recomputation. -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -// MD5 initialization. Begins an MD5 operation, writing a new context. -void MD5Init ( - MD5_CTX *context ) // context -{ - context->count[0] = context->count[1] = 0; - // Load magic initialization constants. - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -// MD5 block update operation. Continues an MD5 message-digest -// operation, processing another message block, and updating the -// context. -void MD5Update ( - MD5_CTX *context, // context - const char *input_, // input block - unsigned int inputLen ) // length of input block -{ - unsigned int i, index, partLen; - const uchar* input = (const uchar*)input_; - - // Compute number of bytes mod 64 - index = (unsigned int)((context->count[0] >> 3) & 0x3F); - - // Update number of bits - if ((context->count[0] += ((UINT4)inputLen << 3)) - < ((UINT4)inputLen << 3)) - context->count[1]++; - context->count[1] += ((UINT4)inputLen >> 29); - - partLen = 64 - index; - - // Transform as many times as possible. - if (inputLen >= partLen) - { - memcpy - ((POINTER)&context->buffer[index], (POINTER)input, partLen); - MD5Transform (context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD5Transform (context->state, &input[i]); - - index = 0; - } - else - i = 0; - - // Buffer remaining input - memcpy - ((POINTER)&context->buffer[index], (POINTER)&input[i], - inputLen-i); -} - -// MD5 finalization. Ends an MD5 message-digest operation, writing the -// the message digest and zeroizing the context. -void MD5Final ( - unsigned char digest[16], // message digest - MD5_CTX *context ) // context -{ - uchar bits[8]; - unsigned int index, padLen; - - // Save number of bits - Encode (bits, context->count, 8); - - // Pad out to 56 mod 64. - index = (unsigned int)((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - MD5Update (context, (const char*)PADDING, padLen); - - // Append length (before padding) - MD5Update (context, (const char*)bits, 8); - - // Store state in digest - Encode (digest, context->state, 16); - - // Zeroize sensitive information. - memset ((POINTER)context, 0, sizeof (*context)); -} - -// MD5 basic transformation. Transforms state based on block. -static void MD5Transform ( - UINT4 state[4], - const uchar block[64] ) -{ - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - Decode (x, block, 64); - - // Round 1 - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); // 1 - FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); // 2 - FF (c, d, a, b, x[ 2], S13, 0x242070db); // 3 - FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); // 4 - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); // 5 - FF (d, a, b, c, x[ 5], S12, 0x4787c62a); // 6 - FF (c, d, a, b, x[ 6], S13, 0xa8304613); // 7 - FF (b, c, d, a, x[ 7], S14, 0xfd469501); // 8 - FF (a, b, c, d, x[ 8], S11, 0x698098d8); // 9 - FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); // 10 - FF (c, d, a, b, x[10], S13, 0xffff5bb1); // 11 - FF (b, c, d, a, x[11], S14, 0x895cd7be); // 12 - FF (a, b, c, d, x[12], S11, 0x6b901122); // 13 - FF (d, a, b, c, x[13], S12, 0xfd987193); // 14 - FF (c, d, a, b, x[14], S13, 0xa679438e); // 15 - FF (b, c, d, a, x[15], S14, 0x49b40821); // 16 - - // Round 2 - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); // 17 - GG (d, a, b, c, x[ 6], S22, 0xc040b340); // 18 - GG (c, d, a, b, x[11], S23, 0x265e5a51); // 19 - GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); // 20 - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); // 21 - GG (d, a, b, c, x[10], S22, 0x2441453); // 22 - GG (c, d, a, b, x[15], S23, 0xd8a1e681); // 23 - GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); // 24 - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); // 25 - GG (d, a, b, c, x[14], S22, 0xc33707d6); // 26 - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); // 27 - GG (b, c, d, a, x[ 8], S24, 0x455a14ed); // 28 - GG (a, b, c, d, x[13], S21, 0xa9e3e905); // 29 - GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); // 30 - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); // 31 - GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); // 32 - - // Round 3 - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); // 33 - HH (d, a, b, c, x[ 8], S32, 0x8771f681); // 34 - HH (c, d, a, b, x[11], S33, 0x6d9d6122); // 35 - HH (b, c, d, a, x[14], S34, 0xfde5380c); // 36 - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); // 37 - HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); // 38 - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); // 39 - HH (b, c, d, a, x[10], S34, 0xbebfbc70); // 40 - HH (a, b, c, d, x[13], S31, 0x289b7ec6); // 41 - HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); // 42 - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); // 43 - HH (b, c, d, a, x[ 6], S34, 0x4881d05); // 44 - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); // 45 - HH (d, a, b, c, x[12], S32, 0xe6db99e5); // 46 - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); // 47 - HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); // 48 - - // Round 4 - II (a, b, c, d, x[ 0], S41, 0xf4292244); // 49 - II (d, a, b, c, x[ 7], S42, 0x432aff97); // 50 - II (c, d, a, b, x[14], S43, 0xab9423a7); // 51 - II (b, c, d, a, x[ 5], S44, 0xfc93a039); // 52 - II (a, b, c, d, x[12], S41, 0x655b59c3); // 53 - II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); // 54 - II (c, d, a, b, x[10], S43, 0xffeff47d); // 55 - II (b, c, d, a, x[ 1], S44, 0x85845dd1); // 56 - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); // 57 - II (d, a, b, c, x[15], S42, 0xfe2ce6e0); // 58 - II (c, d, a, b, x[ 6], S43, 0xa3014314); // 59 - II (b, c, d, a, x[13], S44, 0x4e0811a1); // 60 - II (a, b, c, d, x[ 4], S41, 0xf7537e82); // 61 - II (d, a, b, c, x[11], S42, 0xbd3af235); // 62 - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); // 63 - II (b, c, d, a, x[ 9], S44, 0xeb86d391); // 64 - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - // Zeroize sensitive information. - memset ((POINTER)x, 0, sizeof (x)); -} - -// Encodes input (UINT4) into output (unsigned char). Assumes len is -// a multiple of 4. -static void Encode ( - unsigned char *output, - UINT4 *input, - unsigned int len ) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (unsigned char)(input[i] & 0xff); - output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); - output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); - output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); - } -} - -// Decodes input (unsigned char) into output (UINT4). Assumes len is -// a multiple of 4. -static void Decode ( - UINT4 *output, - const uchar *input, - unsigned int len ) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | - (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); -} - -void digest2ascii ( char *ascii, const unsigned char *digest ) -{ - int i; - static char* table = "0123456789abcdef"; - for ( i = 0; i < 16; i++ ) - { - *ascii++ = table[(*digest)>>4]; - *ascii++ = table[(*digest++)%16]; - } - *ascii++ = 0; -} - -void ascii2digest ( unsigned char *digest, const char *ascii ) -{ - int i; -#define CONV(c) (unsigned char)( (toupper(c)>='A') ? (toupper(c)+10-'A') : ((c)-'0') ) -#define MAKECHAR(a,b) ((CONV(a)%16)<<4)|(CONV(b)%16) - for ( i = 0; i < 16; i++ ) - { - *digest++ = MAKECHAR(ascii[0],ascii[1]); - ascii += 2; - } -} - -#ifdef __cplusplus -MD5::MD5() -{ - Init(); -} - -void MD5::Init() -{ - MD5Init(&_ctx); -} - -void MD5::Update ( const string& s ) -{ - MD5Update ( &_ctx, s.c_str(), s.size() ); -} - -string MD5::Final ( char* digest ) -{ - vector v; - v.resize(16); - MD5Final ( &v[0], &_ctx ); - if ( digest ) - memmove ( digest, &v[0], 16 ); - string s; - static char* tohex = "0123456789abcdef"; - for ( int i = 0; i < 16; i++ ) - { - uchar c = v[i]; - s += tohex[ (c>>4) & 0xF ]; - s += tohex[ c & 0xF ]; - } - return s; -} - -string MD5Hex ( const string& s ) -{ - MD5 md5; - md5.Update ( s ); - return md5.Final(); -} - -string MD5Bin ( const string& s ) -{ - MD5 md5; - md5.Update ( s ); - char digest[16]; - md5.Final ( digest ); - return string ( digest, 16 ); -} - -string HMAC_MD5 ( const string& key, const string& text, char* out_bin ) -{ - MD5 md5; - char k_ipad[65]; // inner padding - key XORd with ipad - char k_opad[65]; // outer padding - key XORd with opad - string tmp; - char digest[16]; - int i; - // if key is longer than 64 bytes reset it to key=MD5(key) - if ( key.length() > 64 ) - { - md5.Init(); - md5.Update ( key ); - md5.Final ( digest ); - tmp = string ( digest, 16 ); - } - else - tmp = key; - - // start out by storing key in pads - memset ( k_ipad, 0, sizeof(k_ipad) ); - memset ( k_opad, 0, sizeof(k_opad) ); - memcpy ( k_ipad, tmp.c_str(), tmp.length() ); - memcpy ( k_opad, tmp.c_str(), tmp.length() ); - - // XOR key with ipad and opad values - for ( i=0; i<64; i++ ) - { - k_ipad[i] ^= 0x36; - k_opad[i] ^= 0x5c; - } - - // "inner" MD5 - md5.Init(); - md5.Update(k_ipad); - md5.Update(text); - md5.Final ( digest ); - - // "outer" MD5 - md5.Init(); - md5.Update(k_opad); - md5.Update(string(digest,16)); - return md5.Final(out_bin); -} -#endif//__cplusplus diff --git a/irc/ArchBlackmann/MD5.h b/irc/ArchBlackmann/MD5.h deleted file mode 100644 index f4bd3c19d9a..00000000000 --- a/irc/ArchBlackmann/MD5.h +++ /dev/null @@ -1,95 +0,0 @@ -// MD5.H - header file for MD5.CPP - -/* -Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. -*/ - -#ifndef __MD5_H -#define __MD5_H - -#ifdef __cplusplus -#include -#endif//__cplusplus - -#ifndef uchar -#define uchar unsigned char -#endif//uchar - -#ifndef ushort -#define ushort unsigned short -#endif//ushort - -#ifndef ulong -#define ulong unsigned long -#endif//ulong - -#ifdef __cplusplus -extern "C" { -#endif//__cplusplus - -typedef uchar *POINTER; // POINTER defines a generic pointer type -typedef ushort UINT2; // UINT2 defines a two byte word -typedef ulong UINT4; // UINT4 defines a four byte word - -// MD5 context. -typedef struct -{ - UINT4 state[4]; // state (ABCD) - UINT4 count[2]; // number of bits, modulo 2^64 (lsb first) - unsigned char buffer[64]; // input buffer -} MD5_CTX; - -void MD5Init ( MD5_CTX * ); -void MD5Update ( MD5_CTX *, const char *, unsigned int ); -void MD5Final ( uchar [16], MD5_CTX * ); - -void digest2ascii ( char *ascii, const uchar *digest ); -void ascii2digest ( uchar *digest, const char *ascii ); - -#ifdef __cplusplus - -} // extern "C" - -class MD5 -{ -public: - MD5(); - void Init(); - void Update ( const std::string& s ); - std::string Final ( char* digest = 0 ); - -private: - MD5_CTX _ctx; -}; - -std::string MD5Hex ( const std::string& s ); - -std::string MD5Bin ( const std::string& s ); - -std::string HMAC_MD5 ( - const std::string& key, - const std::string& text, - char* out_bin = NULL ); - -#endif//__cplusplus - -#endif//__MD5_H diff --git a/irc/ArchBlackmann/QueueT.h b/irc/ArchBlackmann/QueueT.h deleted file mode 100644 index 3d15bcbf741..00000000000 --- a/irc/ArchBlackmann/QueueT.h +++ /dev/null @@ -1,315 +0,0 @@ -/* -** Author: Samuel R. Blackburn -** Internet: wfc@pobox.com -** -** You can use it any way you like as long as you don't try to sell it. -** -** Any attempt to sell WFC in source code form must have the permission -** of the original author. You can produce commercial executables with -** WFC but you can't sell WFC. -** -** Copyright, 2000, Samuel R. Blackburn -** -** NOTE: I modified the info block below so it hopefully wouldn't conflict -** with the original file. Royce Mitchell III -*/ - -#ifndef QUEUET_CLASS_HEADER -#define QUEUET_CLASS_HEADER - -#include "ReliMT.h" - -#ifdef WIN32 -#include // off_t -#define HEAPCREATE(size) m_Heap = ::HeapCreate ( HEAP_NO_SERIALIZE, size, 0 ) -#define HEAPALLOC(size) ::HeapAlloc ( m_Heap, HEAP_NO_SERIALIZE, size ) -#define HEAPREALLOC(p,size) ::HeapReAlloc( m_Heap, HEAP_NO_SERIALIZE, p, size ) -#define HEAPFREE(p) ::HeapFree ( m_Heap, HEAP_NO_SERIALIZE, p ) -#define HEAPDESTROY() ::HeapDestroy ( m_Heap ); m_Heap = 0; -#else -#define HEAPCREATE(size) -#define HEAPALLOC(size) malloc(size) -#define HEAPREALLOC(p,size) realloc(p,size); -#define HEAPFREE(p) free(p) -#define HEAPDESTROY() -#endif - -template -class CQueueT : public Uncopyable -{ -protected: - - // What we want to protect - - Mutex m_AddMutex; - Mutex m_GetMutex; - - T* m_Items; - - off_t m_AddIndex; - off_t m_GetIndex; - size_t m_Size; - -#ifdef WIN32 - HANDLE m_Heap; -#endif//WIN32 - inline void m_GrowBy ( size_t number_of_new_items ); - -public: - - inline CQueueT ( size_t initial_size = 1024 ); - inline ~CQueueT(); - - inline bool Add( const T& new_item ); - inline void Empty() { m_AddIndex = 0; m_GetIndex = 0; }; - inline bool Get( T& item ); - inline size_t GetLength() const; - inline size_t GetMaximumLength() const { return( m_Size ); }; - inline bool AddArray ( const T* new_items, int item_count ); - inline int GetArray ( T* items, const int maxget, const T& tEnd ); - inline bool Contains ( const T& t ); -}; - -template -inline CQueueT::CQueueT ( size_t initial_size ) -{ - m_AddIndex = 0; - m_GetIndex = 0; - m_Items = NULL; - - if ( initial_size == 0 ) - initial_size = 1; - - /* - ** 1999-11-05 - ** We create our own heap because all of the pointers used are allocated - ** and freed be us. We don't have to worry about a non-serialized thread - ** accessing something we allocated. Because of this, we can perform our - ** memory allocations in a heap dedicated to queueing. This means when we - ** have to allocate more memory, we don't have to wait for all other threads - ** to pause while we allocate from the shared heap (like the C Runtime heap) - */ - - HEAPCREATE( ( ( ( 2 * initial_size * sizeof(T) ) < 65536 ) ? 65536 : (2 * initial_size * sizeof(T) ) ) ); - - m_Items = (T*)HEAPALLOC ( initial_size * sizeof(T) ); - - m_Size = ( m_Items == NULL ) ? 0 : initial_size; -} - -template -inline CQueueT::~CQueueT() -{ - m_AddIndex = 0; - m_GetIndex = 0; - m_Size = 0; - - if ( m_Items != NULL ) - { - HEAPFREE(m_Items); - m_Items = NULL; - } - - HEAPDESTROY(); -} - -template -inline bool CQueueT::Add ( const T& item ) -{ - // Block other threads from entering Add(); - Mutex::Lock addlock ( m_AddMutex ); - - // Add the item - - m_Items[ m_AddIndex ] = item; - - // 1999-12-08 - // Many many thanks go to Lou Franco (lfranco@spheresoft.com) - // for finding an bug here. It rare but recreatable situations, - // m_AddIndex could be in an invalid state. - - // Make sure m_AddIndex is never invalid - - off_t new_add_index = ( ( m_AddIndex + 1 ) >= (off_t)m_Size ) ? 0 : m_AddIndex + 1; - - if ( new_add_index == m_GetIndex ) - { - // The queue is full. We need to grow. - // Stop anyone from getting from the queue - Mutex::Lock getlock ( m_GetMutex ); - - m_AddIndex = new_add_index; - - // One last double-check. - - if ( m_AddIndex == m_GetIndex ) - { - m_GrowBy ( m_Size ); - } - - } - else - { - m_AddIndex = new_add_index; - } - - return true; -} - -template -inline bool CQueueT::Get( T& item ) -{ - // Prevent other threads from entering Get() - Mutex::Lock getlock ( m_GetMutex ); - - if ( m_GetIndex == m_AddIndex ) - { - // Let's check to see if our queue has grown too big - // If it has, then shrink it - - if ( m_Size > 1024 ) - { - // Yup, we're too big for our britches - Mutex::TryLock addlock ( m_AddMutex ); - if ( addlock ) - { - // Now, no one can add to the queue - - if ( m_GetIndex == m_AddIndex ) // is queue empty? - { - // See if we can just shrink it... - T* return_value = (T*)HEAPREALLOC(m_Items,1024 * sizeof(T)); - - if ( return_value != NULL ) - { - m_Items = (T*) return_value; - } - else - { - // Looks like we'll have to do it the hard way - HEAPFREE ( m_Items ); - m_Items = (T*) HEAPALLOC ( 1024 * sizeof(T) ); - } - - m_Size = ( m_Items == NULL ) ? 0 : 1024; - m_AddIndex = 0; - m_GetIndex = 0; - } - else - { - // m_GetIndex != m_AddIndex, this means that someone added - // to the queue between the time we checked m_Size for being - // too big and the time we entered the add critical section. - // If this happened then we are too busy to shrink - } - } - } - return false; - } - - item = m_Items[ m_GetIndex ]; - - // Make sure m_GetIndex is never invalid - - m_GetIndex = ( ( m_GetIndex + 1 ) >= (off_t)m_Size ) ? 0 : m_GetIndex + 1; - - return true; -} - -template -inline int CQueueT::GetArray ( T* items, const int maxget, const T& tEnd ) -{ - // TODO - oooh baby does this need to be optimized - // Prevent other threads from entering Get() - Mutex::Lock getlock ( m_GetMutex ); //::EnterCriticalSection( &m_GetCriticalSection ); - - int iResult = 0; - for ( int i = 0; i < maxget; i++ ) - { - if ( !Get(items[i]) ) - break; - iResult++; - if ( items[i] == tEnd ) - break; - } - // Let other threads call Get() now - //::LeaveCriticalSection( &m_GetCriticalSection ); - return iResult; -} - -template -inline size_t CQueueT::GetLength() const -{ - // This is a very expensive process! - // No one can call Add() or Get() while we're computing this - - size_t number_of_items_in_the_queue = 0; - - Mutex::Lock addlock ( m_AddMutex ); - Mutex::Lock getlock ( m_GetMutex ); - - number_of_items_in_the_queue = ( m_AddIndex >= m_GetIndex ) ? - ( m_AddIndex - m_GetIndex ) : - ( ( m_AddIndex + m_Size ) - m_GetIndex ); - - return number_of_items_in_the_queue; -} - -template -inline void CQueueT::m_GrowBy ( size_t number_of_new_items ) -{ - // Prevent other threads from calling Get(). - // We don't need to enter the AddCriticalSection because - // m_GrowBy() is only called from Add(); - - T* new_array = NULL; - T* pointer_to_free = NULL; - - size_t new_size = m_Size + number_of_new_items; - - { // Prevent other threads from getting - Mutex::Lock getlock ( m_GetMutex ); - - // 2000-05-16 - // Thanks go to Royce Mitchell III (royce3@aim-controls.com) for finding - // a HUGE bug here. I was using HeapReAlloc as a short cut but my logic - // was flawed. In certain circumstances, queue items were being dropped. - - new_array = (T*)HEAPALLOC ( new_size * sizeof(T) ); - - // Now copy all of the old items from the old queue to the new one. - - // Get the entries from the get-index to the end of the array - memcpy ( new_array, &m_Items[m_GetIndex], ( m_Size - m_GetIndex ) * sizeof(T) ); - - // Get the entries from the beginning of the array to the add-index - memcpy ( &new_array[m_Size-m_GetIndex], m_Items, m_AddIndex * sizeof(T) ); - - m_AddIndex = (off_t)m_Size; - m_GetIndex = 0; - m_Size = new_size; - pointer_to_free = m_Items; - m_Items = new_array; - } // Mutex::Lock - HEAPFREE ( pointer_to_free ); -} - -template -inline bool CQueueT::Contains ( const T& t ) -{ - Mutex::Lock addlock ( m_AddMutex ); - Mutex::Lock getlock ( m_GetMutex ); - - for ( int i = m_GetIndex; i != m_AddIndex; i++ ) - { - if ( i == m_Size ) - i = 0; - if ( m_Items[i] == t ) - return true; - } - return m_Items[m_AddIndex] == t; -} - -typedef CQueueT CCharQueue; - -#endif // QUEUE_CLASS_HEADER diff --git a/irc/ArchBlackmann/Reli.h b/irc/ArchBlackmann/Reli.h deleted file mode 100644 index ebc35d3a4a8..00000000000 --- a/irc/ArchBlackmann/Reli.h +++ /dev/null @@ -1,143 +0,0 @@ -// Reli.h -// lots of code here is (c) Bartosz Milewski, 1996, www.relisoft.com -// The rest is (C) 2002-2004 Royce Mitchell III -// and released under the LGPL & BSD licenses - -#ifndef __RELI_H -#define __RELI_H - -//////////////////////////////////////////////////////////////////////////////// -// Assert - -#undef Assert -#ifdef NDEBUG - #define Assert(exp) ((void)0) -#else - void _wassert (char* szExpr, char* szFile, int line); - #define Assert(exp) (void)( (exp) || (_wassert(#exp, __FILE__, __LINE__), 0) ) -#endif /* NDEBUG */ - -//////////////////////////////////////////////////////////////////////////////// -// Swap - -template -void Swap(T a,T b) -{ - T t = a; - a = b; - b = t; -} - -//////////////////////////////////////////////////////////////////////////////// -// Uncopyable - base class disabling copy ctors -class Uncopyable -{ -public: - Uncopyable(){} // need a default ctor -private: - Uncopyable ( const Uncopyable& ); - const Uncopyable& operator = ( const Uncopyable& ); -}; - -//////////////////////////////////////////////////////////////////////////////// -// SPtr - Smart Pointer's must be passed by reference or const reference - -template -class SPtr : public Uncopyable -{ -public: - virtual ~SPtr () { Destroy(); } - T * operator->() { return _p; } - T const * operator->() const { return _p; } - operator T&() { Assert(_p); return *_p; } - operator const T&() const { Assert(_p); return *_p; } - void Acquire ( SPtr& t ) { Destroy(); Swap(_p,t._p); } - void Destroy() { if ( _p ) { delete _p; _p = 0; } } -protected: - SPtr (): _p (0) {} - explicit SPtr (T* p): _p (p) {} - T * _p; -private: - operator T* () { return _p; } -}; - -#define DECLARE_SPTR(cls,init,init2) \ -class S##cls : public SPtr \ -{ \ -public: \ - S##cls ( cls* p ) : SPtr(p) {} \ - explicit S##cls init : SPtr (new cls init2) {} \ -}; -/* Example Usage of DECLARE_SPTR: -class MyClass -{ -public: // can be protected - MyClass ( int i ) - { - ... - } - ... -}; DECLARE_SPTR(MyClass,(int i),(i)) -SMyClass ptr(i); -*/ -#define DECLARE_SPTRV(cls) typedef SPtr S##cls; -/* Example Usage of DECLARE_SPTRV: -class MyAbstractClass -{ -public: // can be protected - MyAbstractClass ( int i ) - { - ... - } - void MyPureVirtFunc() = 0; - ... -}; DECLARE_SPTRV(MyAbstractClass) -SMyAbstractClass ptr ( new MySubClass(i) ); -*/ - -#define DECLARE_PTR(cls,init,init2) \ - class Ptr : public SPtr \ - { \ - Ptr(cls* p) : SPtr ( p ) \ - { \ - } \ - Ptr init : SPtr ( new cls init2 ) {} \ - }; -/* Example Usage of DECLARE_PTR: -class MyClass -{ - DECLARE_PTR(MyClass,(int i),(i)) -public: // can be protected - MyClass ( int i ) - { - ... - } - void MyPureVirtFunc() = 0; - ... -}; -MyClass::Ptr ptr ( i ); -*/ - -#define DECLARE_PTRV(cls) \ - class Ptr : public SPtr \ - { \ - Ptr(cls* p) : SPtr ( p ) \ - { \ - } \ - }; -/* Example Usage of DECLARE_PTRV: -class MyAbstractClass -{ - DECLARE_PTRV(MyAbstractClass) -public: // can be protected - MyAbstractClass ( int i ) - { - ... - } - void MyPureVirtFunc() = 0; - ... -}; -MyAbstractClass::Ptr ptr ( new MySubClass(i) ); -*/ - -#endif//__RELI_H diff --git a/irc/ArchBlackmann/ReliMT.cpp b/irc/ArchBlackmann/ReliMT.cpp deleted file mode 100644 index 2c50dc40f1c..00000000000 --- a/irc/ArchBlackmann/ReliMT.cpp +++ /dev/null @@ -1,331 +0,0 @@ -// ReliMT.cpp -// lots of code here is (c) Bartosz Milewski, 1996, www.relisoft.com -// The rest is (C) 2002-2004 Royce Mitchell III -// and released under the LGPL & BSD licenses - -#include -#include -#ifdef WIN32 -# define WIN32_LEAN_AND_MEAN -# include -# define snprintf _snprintf -#elif defined(UNIX) -# include -# include -#else -# error unrecognized target -#endif//WIN32|UNIX -#include "verify.h" -#include "ReliMT.h" - -//////////////////////////////////////////////////////////////////////////////// -// Assert - -void _wassert ( char* szExpr, char* szFile, int line ) -{ - fprintf ( stderr, "Assertion Failure: \"%s\" in file %s, line %d", szExpr, szFile, line ); - exit (-1); -} - - -//////////////////////////////////////////////////////////////////////////////// -// Thread - -Thread::Thread ( long (THREADAPI * pFun) (void* arg), void* pArg ) -{ -#ifdef WIN32 - verify ( _handle = CreateThread ( - 0, // Security attributes - 0, // Stack size - (DWORD (WINAPI*)(void*))pFun, - pArg, - 0, // don't create suspended. - &_tid )); -#elif defined(UNIX) - // set up the thread attribute: right now, we do nothing with it. - pthread_attr_t attr; - pthread_attr_init(&attr); - - // this will make the threads created by this process really concurrent - verify ( !pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM) ); - - // create the new OS thread object - verify ( !pthread_create ( &_threadId, &attr, (void* (*) (void*))pFun, pArg ) ); - - verify ( !pthread_attr_destroy(&attr) ); -#else -# error unrecognized target -#endif//WIN32|UNIX -} - -Thread::~Thread() -{ -#ifdef WIN32 - verify ( CloseHandle ( _handle ) ); -#elif defined(UNIX) - verify ( !pthread_cancel ( _threadId ) ); -#else -# error unrecognized target -#endif//WIN32|UNIX -} - -/*void Thread::Resume() -{ -#ifdef WIN32 - ResumeThread (_handle); -#elif defined(UNIX) -# error how to resume thread in unix? -#else -# error unrecognized target -#endif//WIN32|UNIX -}*/ - -void Thread::WaitForDeath() -{ -#ifdef WIN32 - DWORD dw = WaitForSingleObject ( _handle, 2000 ); - ASSERT ( dw != WAIT_FAILED ); -#elif defined(UNIX) - verify ( !pthread_join ( _threadId, (void**)NULL ) ); -#else -# error unrecognized target -#endif//WIN32|UNIX -} - - -//////////////////////////////////////////////////////////////////////////////// -// ActiveObject - -// The constructor of the derived class -// should call -// _thread.Resume(); -// at the end of construction - -ActiveObject::ActiveObject() : _isDying (0), _thread (0) -{ -} - -ActiveObject::~ActiveObject() -{ - ASSERT ( !_thread ); // call Kill() from subclass's dtor - // Kill() - // You can't call a virtual function from a dtor, EVEN INDIRECTLY - // so, you must call Kill() in the subclass's dtor -} - -// FlushThread must reset all the events on which the thread might be waiting. -void ActiveObject::Kill() -{ - if ( _thread ) - { - _isDying++; - FlushThread(); - // Let's make sure it's gone - _thread->WaitForDeath(); - delete _thread; - _thread = 0; - } -} - -void ActiveObject::Start() -{ - ASSERT ( !_thread ); - _thread = new Thread ( ThreadEntry, this ); -} - -long THREADAPI ActiveObject::ThreadEntry ( void* pArg ) -{ - ActiveObject * pActive = (ActiveObject*)pArg; - pActive->InitThread(); - pActive->Run(); - pActive->Kill(); - return 0; -} - - -/////////////////////////////////////////////////////////////////////////////// -// Mutex - -Mutex::Mutex() -{ -#ifdef WIN32 - verify ( _h = CreateMutex ( NULL, FALSE, NULL ) ); -#elif defined(UNIX) - pthread_mutexattr_t attrib; - verify ( !pthread_mutexattr_init( &attrib ) ); - // allow recursive locks - verify ( !pthread_mutexattr_settype( &attrib, PTHREAD_MUTEX_RECURSIVE ) ); - verify ( !pthread_mutex_init ( &_mutex, &attrib ) ); -#else -# error unrecognized target -#endif -} - -Mutex::~Mutex() -{ -#ifdef WIN32 - verify ( CloseHandle ( _h ) ); -#elif defined(UNIX) - verify ( !pthread_mutex_destroy(&_mutex) ); -#else -# error unrecognized target -#endif -} - -void Mutex::Acquire() -{ -#ifdef WIN32 - DWORD dw = WaitForSingleObject ( _h, INFINITE ); - ASSERT ( dw == WAIT_OBJECT_0 || dw == WAIT_ABANDONED ); -#elif defined(UNIX) - verify ( !pthread_mutex_lock(&_mutex) ); -#else -# error unrecognized target -#endif -} - -bool Mutex::TryAcquire() -{ -#ifdef WIN32 - DWORD dw = WaitForSingleObject ( _h, 1 ); - ASSERT ( dw == WAIT_OBJECT_0 || dw == WAIT_TIMEOUT || dw == WAIT_ABANDONED ); - return (dw != WAIT_TIMEOUT); -#elif defined(UNIX) - int err = pthread_mutex_trylock(&_mutex); - ASSERT ( err == EBUSY || err == 0 ); - return (err == 0); -#else -# error unrecognized target -#endif -} - -void Mutex::Release() -{ -#ifdef WIN32 - verify ( ReleaseMutex ( _h ) ); -#elif defined(UNIX) - verify ( !pthread_mutex_unlock(&_mutex) ); - // we could allow EPERM return value too, but we are forcing user into RIIA -#else -# error unrecognized target -#endif -} - -Mutex::Lock::Lock ( Mutex& m ) : _m(m) -{ - _m.Acquire(); -} - -Mutex::Lock::~Lock() -{ - _m.Release(); -} - -Mutex::TryLock::TryLock ( Mutex& m ) : _m(m) -{ - _bLocked = _m.TryAcquire(); -} - -Mutex::TryLock::~TryLock() -{ - if ( _bLocked ) - _m.Release(); -} - -/////////////////////////////////////////////////////////////////////////////// -// Event - -Event::Event() -{ -#ifdef WIN32 - // start in non-signaled state (red light) - // auto reset after every Wait - verify ( _handle = CreateEvent ( 0, FALSE, FALSE, 0 ) ); -#elif defined(UNIX) - //verify ( !pthread_cond_init ( &_cond, NULL /* default attributes */) ); - sem_init(); - //verify(sem_init()); -#else -# error unrecognized target -#endif -} - -Event::~Event() -{ -#ifdef WIN32 - verify ( CloseHandle ( _handle ) ); -#elif defined(UNIX) - //verify ( !pthread_cond_destroy ( &_cond ) ); - sem_destroy(); -#else -# error unrecognized target -#endif -} - -void Event::Release() // put into signaled state -{ -#ifdef WIN32 - verify ( SetEvent ( _handle ) ); -#elif defined(UNIX) - //verify ( !pthread_cond_signal ( &_cond ) ); - verify(!sem_V()); -#else -# error unrecognized target -#endif -} - -void Event::Wait() -{ -#ifdef WIN32 - // Wait until event is in signaled (green) state - DWORD dw = WaitForSingleObject ( _handle, INFINITE ); - ASSERT ( dw == WAIT_OBJECT_0 || dw == WAIT_ABANDONED ); -#elif defined(UNIX) - // According to docs: The pthread_cond_wait() and pthread_cond_timedwait() - // functions are used to block on a condition variable. They are called - // with mutex locked by the calling thread or undefined behaviour will - // result. - //Mutex::Lock lock ( _mutex ); - //verify ( !pthread_cond_wait ( &_cond, _mutex ) ); - verify(!sem_P()); -#else -# error unrecognized target -#endif -} - -#ifdef UNIX -void Event::sem_init() -{ - sem_id = semget(IPC_PRIVATE, 1, 0666 | IPC_CREAT); - ASSERT(sem_id != -1); -} - -int Event::sem_P() -{ - struct sembuf sb; - sb.sem_num = 0; - sb.sem_op = -1; - sb.sem_flg = 0; - return semop(sem_id, &sb, 1); -} - -int Event::sem_V() -{ - struct sembuf sb; - sb.sem_num = 0; - sb.sem_op = 1; - sb.sem_flg = 0; - return semop(sem_id, &sb, 1); -} - -void Event::sem_destroy() -{ -#ifdef MACOSX - semun mactmp; - mactmp.val = 0; - semctl(sem_id, 0, IPC_RMID, mactmp); -#else - semctl(sem_id, 0, IPC_RMID, 0); -#endif -} -#endif - diff --git a/irc/ArchBlackmann/ReliMT.h b/irc/ArchBlackmann/ReliMT.h deleted file mode 100644 index 17fb12169a6..00000000000 --- a/irc/ArchBlackmann/ReliMT.h +++ /dev/null @@ -1,229 +0,0 @@ -// ReliMT.h -// lots of code here is (c) Bartosz Milewski, 1996, www.relisoft.com -// The rest is (C) 2003-2004 Royce Mitchell III -// and released under the LGPL & BSD licenses - - -#ifndef __RELIMT_H -#define __RELIMT_H - -#include "Reli.h" - -#ifdef WIN32 -# ifndef _WINDOWS_ -# define WIN32_LEAN_AND_MEAN -# include -# endif -# define THREADAPI WINAPI -#elif defined(UNIX) -# include -# include -# include "string.h" -# include //Semaphore -# include //Semaphore -# include //Semaphore -# define THREADAPI -#else -# error unrecognized target -#endif - - -//////////////////////////////////////////////////////////////////////////////// -// Thread - -class Thread : public Uncopyable -{ -public: - Thread ( long (THREADAPI * pFun) (void* arg), void* pArg ); - ~Thread(); - //void Resume(); - void WaitForDeath(); - - // platform-specific stuff: -private: -#ifdef WIN32 - HANDLE _handle; - DWORD _tid; // thread id -#elif defined(UNIX) - pthread_t _threadId; // id of the thread -#else -# error unrecognized target -#endif - //DECLARE_PTR(Thread,(long (THREADAPI * pFun) (void* arg), void* pArg),(pFun,pArg)); -}; //DECLARE_SPTR(Thread,(long (THREADAPI * pFun) (void* arg), void* pArg),(pFun,pArg)); - -//////////////////////////////////////////////////////////////////////////////// -// ActiveObject - -class ActiveObject : public Uncopyable -{ -public: - ActiveObject(); - virtual ~ActiveObject(); - void Kill(); - void Start(); - -protected: - virtual void InitThread() = 0; - virtual void Run() = 0; - virtual void FlushThread() = 0; - - int _isDying; - - static long THREADAPI ThreadEntry ( void *pArg ); - Thread *_thread; - - //DECLARE_PTRV(ActiveObject); -}; //DECLARE_SPTRV(ActiveObject); - -// Last thing in the constructor of a class derived from -// ActiveObject you must call -// Start(); -// Inside the loop the Run method you must keep checking _isDying -// if (_isDying) -// return; -// FlushThread must reset all the events on which the thread might be waiting. -// Example: -#if 0 -// MyAsyncOutputter - class that outputs strings to a file asynchronously -class MyAsyncOutputter : public ActiveObject -{ -public: - MyAsyncOutputter ( const string& filename ) : _filename(filename), _currentBuf(0) - { - Start(); // start thread - } - void InitThread() - { - _f.open ( _filename, "wb" ); - } - void Output ( const string& s ) - { - { - // acquire lock long enough to add the string to the active buffer - Mutex::Lock lock ( _mutex ); - _buf[_currentBuf].push_back ( s ); - } - _event.Release(); // don't need the lock fire the event - } - void Run() - { - while ( !_isDying ) - { - // wait for signal from Output() or FlushThread() - _event.Wait(); - { - // acquire lock long enough to switch active buffers - Mutex::Lock lock ( _mutex ); - _currentBuf = 1-_currentBuf; - ASSERT ( !_buf[_currentBuf].size() ); - } - // get a reference to the old buffer - vector& buf = _buf[1-_currentBuf]; - // write each string out to file and then empty the buffer - for ( int i = 0; i < buf.size(); i++ ) - _f.write ( buf[i].c_str(), buf[i].size() ); - buf.resize(0); - } - } - void FlushThread() - { - // _isDying is already set: signal thread so it can see that too - _event.Release(); - } -private: - string _filename; - File _f; - int _currentBuf; - vector _buf[2]; - Event _event; - Mutex _mutex; -}; -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Mutex - -class Mutex : public Uncopyable -{ -public: - Mutex(); - ~Mutex(); -private: - void Acquire(); - bool TryAcquire(); - void Release(); -public: - // sub-class used to lock the Mutex - class Lock : public Uncopyable - { - public: - Lock ( Mutex& m ); - ~Lock(); - - private: - // private data - Mutex& _m; - }; - friend class Mutex::Lock; - - - // sub-class used to attempt to lock the mutex. Use operator bool() - // to test if the lock was successful - class TryLock : public Uncopyable - { - public: - TryLock ( Mutex& m ); - ~TryLock(); - operator bool () { return _bLocked; } - - private: - // private data - bool _bLocked; - Mutex& _m; - }; - friend class Mutex::TryLock; - -private: - // platform-specific stuff: -#ifdef WIN32 - HANDLE _h; -#elif defined(UNIX) - pthread_mutex_t _mutex; -public: operator pthread_mutex_t* () { return &_mutex; } -#else -# error unrecognized target -#endif -}; - -//////////////////////////////////////////////////////////////////////////////// -// Event - -class Event : public Uncopyable -{ -public: - Event(); - ~Event(); - void Release(); // put into signaled state - void Wait(); - -private: -#ifdef WIN32 - HANDLE _handle; -#elif defined(UNIX) - //Sem util functions - void sem_init(); - int sem_P(); - int sem_V(); - void sem_destroy(); - - int sem_id; - //pthread_cond_t _cond; - //Mutex _mutex; -#else -# error unrecognized target -#endif - //DECLARE_PTR(Event,(),()); -}; //DECLARE_SPTR(Event,(),()); - -#endif//__RELIWIN32_H diff --git a/irc/ArchBlackmann/SockUtils.cpp b/irc/ArchBlackmann/SockUtils.cpp deleted file mode 100644 index 3398b8d88c1..00000000000 --- a/irc/ArchBlackmann/SockUtils.cpp +++ /dev/null @@ -1,504 +0,0 @@ -// SockUtils.cpp - Some basic socket utility functions. -// (C) 2002-2004 Royce Mitchell III -// This file is under the BSD & LGPL licenses - -#include -#include "SockUtils.h" -#ifdef WIN32 -# ifndef SD_SEND // defined in winsock2.h, but not winsock.h -# define SD_SEND 1 -# endif -# define snprintf _snprintf -# ifdef _MSC_VER -# pragma comment ( lib, "ws2_32.lib" ) -# endif//_MSC_VER -#elif defined(UNIX) -# include -# include "string.h" // memset -# include // hostent -# include //inet_addr -# include -# define SD_SEND SHUT_WR //bah thou shalt name thy defines the same -#else -# error unrecognized target -#endif -//// Constants ///////////////////////////////////////////////////////// -const int kBufferSize = 1024; -// creates broadcast address -SockAddrIn::SockAddrIn() -{ - memset ( this, 0, sizeof(sockaddr_in) ); - sin_family = AF_INET; -} -SockAddrIn::SockAddrIn ( const char* szAddr, u_short iPort ) -{ - memset ( this, 0, sizeof(sockaddr_in) ); - sin_family = AF_INET; - sin_addr.s_addr = suLookupAddress(szAddr); - sin_port = htons(iPort); -} -SockAddrIn::SockAddrIn ( in_addr_t iAddr, u_short iPort ) -{ - memset ( this, 0, sizeof(sockaddr_in) ); - sin_family = AF_INET; - sin_addr.s_addr = iAddr; - sin_port = htons(iPort); -} -bool suStartup() -{ -#ifdef WIN32 - WSADATA wsaData; - if ( WSAStartup ( MAKEWORD(2,0), &wsaData ) ) - return false; - if ( wsaData.wVersion != MAKEWORD(2,0) ) - { - WSACleanup(); - return false; - } - return true; -#elif defined(UNIX) - // nothing special required here - return true; -#else -# error unrecognized target -#endif -} -//// suTcpSocket //////////////////////////////////////////////// -// Creates a TCP socket. -SOCKET suTcpSocket() -{ - SOCKET so = socket ( AF_INET, SOCK_STREAM, 0 ); -#if defined(_DEBUG) && defined(WIN32) - if ( so == INVALID_SOCKET && WSANOTINITIALISED == WSAGetLastError() ) - MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION ); -#endif - return so; -} -//// suUdpSocket //////////////////////////////////////////////// -// Creates a UDP socket. Compensates for new "functionality" introduced -// in Win2K with regards to select() calls -// MS Transport Provider IOCTL to control -// reporting PORT_UNREACHABLE messages -// on UDP sockets via recv/WSARecv/etc. -// Path TRUE in input buffer to enable (default if supported), -// FALSE to disable. -#ifndef SIO_UDP_CONNRESET -#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12) -#endif//SIO_UDP_CONNRESET -SOCKET suUdpSocket() -{ - SOCKET so = socket ( AF_INET, SOCK_DGRAM, 0 ); -#if defined(_DEBUG) && defined(WIN32) - if ( so == INVALID_SOCKET && WSANOTINITIALISED == WSAGetLastError() ) - MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION ); -#endif -#ifdef WIN32 - // for Windows 2000, disable new behavior... - // see: http://www-pc.uni-regensburg.de/systemsw/W2KPRO/UPDATE/POSTSP1/Q263823.htm - // this code is innocuous on other win32 platforms - DWORD dwBytesReturned = 0; - BOOL bNewBehavior = FALSE; - // disable new Win2K behavior using - // IOCTL: SIO_UDP_CONNRESET - // we don't care about return value :) - WSAIoctl(so, SIO_UDP_CONNRESET, - &bNewBehavior, sizeof(bNewBehavior), - NULL, 0, &dwBytesReturned, - NULL, NULL); -#endif - return so; -} -//// suShutdownConnection //////////////////////////////////////////////// -// Gracefully shuts the connection sd down. Returns true if it was able -// to shut it down nicely, false if we had to "slam" it shut. -// (either way, the socket does get closed) -bool suShutdownConnection(SOCKET sd) -{ - if ( sd == INVALID_SOCKET ) - return true; - // Disallow any further data sends. This will tell the other side - // that we want to go away now. If we skip this step, we don't - // shut the connection down nicely. - if (shutdown(sd, SD_SEND) == SOCKET_ERROR) - { - closesocket(sd); - return false; - } - // Receive any extra data still sitting on the socket. After all - // data is received, this call will block until the remote host - // acknowledges the TCP control packet sent by the shutdown above. - // Then we'll get a 0 back from recv, signalling that the remote - // host has closed its side of the connection. - char acReadBuffer[kBufferSize]; - for ( ;; ) - { - int nNewBytes = recv(sd, acReadBuffer, kBufferSize, 0); - if (nNewBytes == SOCKET_ERROR) - { - closesocket(sd); - return false; - } - else if (nNewBytes != 0) - { - // FYI, received (nNewBytes) unexpected bytes during shutdown. - } - else - { - // Okay, we're done! - break; - } - } - // Close the socket. - if (closesocket(sd) == SOCKET_ERROR) - { - return false; - } - return true; -} -//// suLookupAddress //////////////////////////////////////////////// -// Basically converts a name address to an ip address -in_addr_t suLookupAddress ( const char* pcHost ) -{ - in_addr_t nRemoteAddr = inet_addr(pcHost); - if ( nRemoteAddr == INADDR_NONE ) - { - // pcHost isn't a dotted IP, so resolve it through DNS - hostent* pHE = gethostbyname(pcHost); - if ( pHE == 0 ) - { -#if defined(_DEBUG) && defined(WIN32) - if ( WSANOTINITIALISED == WSAGetLastError() ) - MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION ); -#endif - return INADDR_NONE; - } - nRemoteAddr = *((in_addr_t*)pHE->h_addr_list[0]); - } - return nRemoteAddr; -} -bool suConnect ( SOCKET so, in_addr_t iAddress, u_short iPort ) -{ - SockAddrIn sinRemote ( iAddress, iPort ); - if ( SOCKET_ERROR == connect(so,sinRemote,sizeof(sinRemote)) ) - { -#if defined(_DEBUG) && defined(WIN32) - if ( WSANOTINITIALISED == WSAGetLastError() ) - MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION ); -#endif - return false; - } - return true; -} -bool suConnect ( SOCKET so, const char* szAddress, u_short iPort ) -{ - return suConnect ( so, suLookupAddress(szAddress), iPort ); -} -//// suEstablishConnection //////////////////////////////////////////////// -// creates a socket of the specified type, connects to the ip address/port -// requested, and returns the SOCKET created -SOCKET suEstablishConnection ( in_addr_t iAddress, u_short iPort, int type ) -{ - // Create a socket - if ( type != SOCK_STREAM && type != SOCK_DGRAM ) - return INVALID_SOCKET; - SOCKET so = socket(AF_INET, type, 0); - if ( so == INVALID_SOCKET ) - return so; - if ( !suConnect(so, iAddress, iPort) ) - { - closesocket(so); - return INVALID_SOCKET; - } - return so; -} -//// suEstablishConnection //////////////////////////////////////////////// -// creates a socket of the specified type, connects to the address/port -// requested, and returns the SOCKET created -SOCKET suEstablishConnection ( const char* szAddress, u_short iPort, int type ) -{ - return suEstablishConnection ( suLookupAddress ( szAddress ), iPort, type ); -} -//// suBroadcast //////////////////////////////////////////////// -// takes a previously created broadcast-enabled UDP socket, and broadcasts -// a message on the local network -bool suBroadcast ( SOCKET so, u_short port, const char* buf, int len /* = -1 */ ) -{ - if ( len == -1 ) - len = (int)strlen(buf); -#if 1 - SockAddrIn to ( INADDR_BROADCAST, port ); -#else // some strange MS OS's don't broadcast to localhost... - SockAddrIn to ( "127.0.0.1", port ); - if ( SOCKET_ERROR == sendto ( so, buf, len, 0, to, sizeof(to) ) ) - return false; - to.sin_addr.s_addr = INADDR_BROADCAST; -#endif - if ( SOCKET_ERROR == sendto ( so, buf, len, 0, to, sizeof(to) ) ) - return false; - return true; -} -//// suRecv //////////////////////////////////////////////// -// retrieves data sent to our TCP socket. If no data, waits for -// a period of timeout ms. -// returns bytes received -// -1 == SOCKET_ERROR -// -2 == timed out waiting for data -int suRecv ( SOCKET so, char* buf, int buflen, int timeout ) -{ - struct timeval to; - fd_set rread; - int res; - FD_ZERO(&rread); // clear the fd_set - FD_SET(so,&rread); // indicate which socket(s) we want to check - memset((char *)&to,0,sizeof(to)); // clear the timeval struct - to.tv_sec = timeout; // timeout select after (timeout) seconds - // select returns > 0 if there is an event on the socket - res = select((int)so+1, &rread, (fd_set *)0, (fd_set *)0, &to ); - if (res < 0) - return -1; // socket error - // there was an event on the socket - if ( (res>0) && (FD_ISSET(so,&rread)) ) - return recv ( so, buf, buflen, 0 ); - return -2; -} -//// suRecvFrom //////////////////////////////////////////////// -// retrieves data sent to our UDP socket. If no data, waits for -// a period of timeout ms. -// returns bytes received -// returns bytes received -// -1 == SOCKET_ERROR -// -2 == timed out waiting for data -int suRecvFrom ( SOCKET so, char* buf, int buflen, int timeout, sockaddr_in* from, socklen_t* fromlen ) -{ - struct timeval to; - fd_set rread; - int res; - FD_ZERO(&rread); // clear the fd_set - FD_SET(so,&rread); // indicate which socket(s) we want to check - memset((char *)&to,0,sizeof(to)); // clear the timeval struct - to.tv_sec = timeout; // timeout select after (timeout) seconds - // select returns > 0 if there is an event on the socket - res = select((int)so+1, &rread, (fd_set *)0, (fd_set *)0, &to ); - if (res < 0) - return -1; // socket error - // there was an event on the socket - if ( (res>0) && (FD_ISSET(so,&rread)) ) - return recvfrom ( so, buf, buflen, 0, (sockaddr*)from, fromlen ); - return -2; // timeout -} -//// suBind //////////////////////////////////////////////// -// binds a UDP socket to an interface & port to receive -// data on that port -bool suBind ( SOCKET so, in_addr_t iInterfaceAddress, u_short iListenPort, bool bReuseAddr /* = false */ ) -{ - SockAddrIn sinInterface ( iInterfaceAddress, iListenPort ); - if ( bReuseAddr ) - { - int optval = -1; // true - if ( SOCKET_ERROR == setsockopt ( so, SOL_SOCKET, SO_REUSEADDR, (const char*)&optval, sizeof(optval) ) ) - { -#if defined(_DEBUG) && defined(WIN32) - if ( WSANOTINITIALISED == WSAGetLastError() ) - MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION ); -#endif - return false; - } - } - if ( SOCKET_ERROR == bind(so, sinInterface, sizeof(sinInterface)) ) - { - int err = SUERRNO; - if ( err != EADDRINUSE ) - return false; -#if defined(_DEBUG) && defined(WIN32) - if ( WSANOTINITIALISED == WSAGetLastError() ) - MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION ); -#endif - } - return true; -} -//// suBind //////////////////////////////////////////////// -// binds a UDP socket to an interface & port to receive -// data on that port -bool suBind ( SOCKET so, const char* szInterfaceAddress, u_short iListenPort, bool bReuseAddr /* = false */ ) -{ - in_addr_t iInterfaceAddr = inet_addr(szInterfaceAddress); - if ( iInterfaceAddr == INADDR_NONE ) - return false; - return suBind ( so, iInterfaceAddr, iListenPort, bReuseAddr ); -} -//// suEnableBroadcast //////////////////////////////////////////////// -// in order to send broadcast messages on a UDP socket, this function -// must be called first -bool suEnableBroadcast ( SOCKET so, bool bEnable /* = true */ ) -{ - int optval = bEnable ? -1 : 0; - if ( SOCKET_ERROR == setsockopt ( so, SOL_SOCKET, SO_BROADCAST, (const char*)&optval, sizeof(optval) ) ) - return false; - return true; -} -//// suErrDesc //////////////////////////////////////////////// -// returns text description of error code -const char* suErrDesc ( int err ) -{ - static char errbuf[256]; -#ifdef WIN32 - switch ( err ) - { -#define X(E) case E: return #E; - X(WSAEINTR) X(WSAEBADF) - X(WSAEACCES) X(WSAEFAULT) - X(WSAEINVAL) X(WSAEMFILE) - X(WSAEWOULDBLOCK) X(WSAEINPROGRESS) - X(WSAEALREADY) X(WSAENOTSOCK) - X(WSAEDESTADDRREQ) X(WSAEMSGSIZE) - X(WSAEPROTOTYPE) X(WSAENOPROTOOPT) - X(WSAEPROTONOSUPPORT) X(WSAESOCKTNOSUPPORT) - X(WSAEOPNOTSUPP) X(WSAEPFNOSUPPORT) - X(WSAEAFNOSUPPORT) X(WSAEADDRINUSE) - X(WSAEADDRNOTAVAIL) X(WSAENETDOWN) - X(WSAENETUNREACH) X(WSAENETRESET) - X(WSAECONNABORTED) X(WSAECONNRESET) - X(WSAENOBUFS) X(WSAEISCONN) - X(WSAENOTCONN) X(WSAESHUTDOWN) - X(WSAETOOMANYREFS) X(WSAETIMEDOUT) - X(WSAECONNREFUSED) X(WSAELOOP) - X(WSAENAMETOOLONG) X(WSAEHOSTDOWN) - X(WSAEHOSTUNREACH) X(WSAENOTEMPTY) - X(WSAEPROCLIM) X(WSAEUSERS) - X(WSAEDQUOT) X(WSAESTALE) - X(WSAEREMOTE) X(WSASYSNOTREADY) - X(WSAVERNOTSUPPORTED) X(WSANOTINITIALISED) - X(WSAEDISCON) X(WSAENOMORE) - X(WSAECANCELLED) X(WSAEINVALIDPROCTABLE) - X(WSAEINVALIDPROVIDER) X(WSAEPROVIDERFAILEDINIT) - X(WSASYSCALLFAILURE) X(WSASERVICE_NOT_FOUND) - X(WSATYPE_NOT_FOUND) X(WSA_E_NO_MORE) - X(WSA_E_CANCELLED) X(WSAEREFUSED) -#undef X - } - snprintf ( errbuf, sizeof(errbuf), "Unknown socket error (%lu)", err ); - errbuf[sizeof(errbuf)-1] = '\0'; - return errbuf; -#elif defined(UNIX) - perror(errbuf); - return errbuf; -#else -# error unrecognized target -#endif -} -#if defined(UNICODE) || defined(_UNICODE) -in_addr_t suLookupAddress ( const wchar_t* pcHost ) -{ - int len = wcslen(pcHost); - char* p = new char[len+1]; - wcstombs ( p, pcHost, len ); - p[len] = 0; - in_addr_t rc = suLookupAddress ( p ); - delete[] p; - return rc; -} -bool suBroadcast ( SOCKET so, u_short port, const wchar_t* buf, int len /* = -1 */ ) -{ - char* p = new char[len+1]; - wcstombs ( p, buf, len ); - p[len] = 0; - bool rc = suBroadcast ( so, port, p, len ); - delete[] p; - return rc; -} -int suRecv ( SOCKET so, wchar_t* buf, int buflen, int timeout ) -{ - char* p = new char[buflen+1]; - int rc = suRecv ( so, p, buflen, timeout ); - p[buflen] = 0; - mbstowcs ( buf, p, buflen ); - delete[] p; - return rc; -} -int suRecvFrom ( SOCKET so, wchar_t* buf, int buflen, int timeout, sockaddr_in* from, int* fromlen ) -{ - char* p = new char[buflen+1]; - int rc = suRecvFrom ( so, p, buflen, timeout, from, fromlen ); - p[buflen] = 0; - mbs2wcs ( buf, p, buflen ); - delete[] p; - return rc; -} -bool suBind ( SOCKET so, const wchar_t* szInterfaceAddress, u_short iListenPort, bool bReuseAddr /* = false */ ) -{ - int len = wcslen(szInterfaceAddress); - char* p = new char[len+1]; - wcstombs ( p, szInterfaceAddress, len ); - p[len] = 0; - bool rc = suBind ( so, p, iListenPort, bReuseAddr ); - delete[] p; - return rc; -} -#endif//UNICODE - -suBufferedRecvSocket::suBufferedRecvSocket ( SOCKET so ) - : suSocket ( so ), _off(0), _len(0) -{ -} - -int suBufferedRecvSocket::recvUntil ( std::string& buf, char until, int timeout ) -{ - if ( !_len ) - _off = 0; - else if ( _off > (sizeof(_buf)>>1) ) - { - memmove ( _buf, &_buf[_off], _len ); - _off = 0; - } - char* poff = &_buf[_off]; - for ( ;; ) - { - char* p = (char*)memchr ( poff, until, _len ); - if ( p /*&& p < &poff[_len]*/ ) - { - int ret_len = p-poff+1; - buf.resize ( ret_len ); - memmove ( &buf[0], poff, ret_len ); - _off += ret_len; - _len -= ret_len; - return ret_len; - } - int rc = suRecv ( *this, &poff[_len], sizeof(_buf)-_len-_off, timeout ); - if ( rc < 0 ) - { - if ( _len ) - { - rc = _len; - buf.resize ( rc ); - memmove ( &buf[0], &_buf[_off], rc ); - _len = 0; - } - return rc; - } - _len += rc; - } -} - -void suBufferedRecvSocket::recvPending() -{ - if ( !_len ) - _off = 0; - else if ( _off > (sizeof(_buf)>>1) ) - { - memmove ( _buf, &_buf[_off], _len ); - _off = 0; - } - char* poff = &_buf[_off]; - while ( sizeof(_buf)-_len-_off ) - { - int rc = suRecv ( *this, &poff[_len], sizeof(_buf)-_len-_off, 1 ); - if ( rc <= 0 ) - break; - _len += rc; - } -} - -bool suBufferedRecvSocket::recvInStr ( char c ) -{ - return NULL != memchr ( &_buf[_off], c, _len ); -} diff --git a/irc/ArchBlackmann/SockUtils.h b/irc/ArchBlackmann/SockUtils.h deleted file mode 100644 index 60853f05964..00000000000 --- a/irc/ArchBlackmann/SockUtils.h +++ /dev/null @@ -1,132 +0,0 @@ -// SockUtils.h - Declarations for the Winsock utility functions module. -// (C) 2002-2004 Royce Mitchell III -// This file is under the BSD & LGPL licenses - -#ifndef __SOCKUTILS_H -#define __SOCKUTILS_H - -#include -#ifdef WIN32 -# include -# define in_addr_t u_long -# define SUERRNO WSAGetLastError() -# define EADDRINUSE WSAEADDRINUSE -# define ENOTSOCK WSAENOTSOCK -# define socklen_t int -#elif defined(UNIX) -# include -# include -# include -# include -# include -# define closesocket(so) close(so) -# define SOCKET int -# define INVALID_SOCKET -1 -# define SOCKET_ERROR -1 -# define SUERRNO errno -# ifdef MACOSX -# define socklen_t int //Stupid mac -# endif -#else -# error unrecognized target -#endif - -#include - -extern bool suStartup(); -extern SOCKET suTcpSocket(); -extern SOCKET suUdpSocket(); -extern bool suShutdownConnection(SOCKET sd); -extern in_addr_t suLookupAddress ( const char* pcHost ); -extern bool suConnect ( SOCKET so, in_addr_t iAddress, u_short iPort ); -extern bool suConnect ( SOCKET so, const char* szAddress, u_short iPort ); -extern SOCKET suEstablishConnection ( in_addr_t iAddress, u_short iPort, int type ); -extern SOCKET suEstablishConnection ( const char* szAddress, u_short iPort, int type ); -extern bool suBroadcast ( SOCKET so, u_short port, const char* buf, int len = -1 ); -extern int suRecv ( SOCKET so, char* buf, int buflen, int timeout ); -extern int suRecvFrom ( SOCKET so, char* buf, int buflen, int timeout, sockaddr_in* from, socklen_t* fromlen ); -extern bool suBind ( SOCKET so, in_addr_t iInterfaceAddress, u_short iListenPort, bool bReuseAddr = false ); -extern bool suBind ( SOCKET so, const char* szInterfaceAddress, u_short iListenPort, bool bReuseAddr = false ); -extern bool suEnableBroadcast ( SOCKET so, bool bEnable = true ); -extern const char* suErrDesc ( int err ); - -#if defined(UNICODE) || defined(_UNICODE) -extern in_addr_t suLookupAddress ( const wchar_t* pcHost ); -extern bool suBroadcast ( SOCKET so, u_short port, const wchar_t* buf, int len = -1 ); -extern int suRecv ( SOCKET so, wchar_t* buf, int buflen, int timeout ); -extern int suRecvFrom ( SOCKET so, wchar_t* buf, int buflen, int timeout, sockaddr_in* from, int* fromlen ); -extern bool suBind ( SOCKET so, const wchar_t* szInterfaceAddress, u_short iListenPort, bool bReuseAddr = false ); -#endif//UNICODE - -class suSocket -{ - SOCKET _so; -public: - suSocket ( SOCKET so = INVALID_SOCKET ) : _so(so) - { - } - const suSocket& operator = ( SOCKET so ) - { - assert ( _so == INVALID_SOCKET ); // must Detach() or Close() existing socket first - _so = so; - return *this; - } - virtual ~suSocket() - { - Close(); - } - void Close() - { - if ( _so != INVALID_SOCKET ) - { - //suShutdownConnection ( _so ); // TODO - only valid on TCP sockets - closesocket ( _so ); - _so = INVALID_SOCKET; - } - } - operator SOCKET() const - { - return _so; - } - SOCKET Attach ( SOCKET so ) - { - SOCKET old = Detach(); - _so = so; - return old; - } - SOCKET Detach() - { - SOCKET so = _so; - _so = INVALID_SOCKET; - return so; - } - -private: - // disable copy semantics - suSocket ( const suSocket& ); - const suSocket& operator = ( const suSocket& ); -}; - -class suBufferedRecvSocket : public suSocket -{ - char _buf[2048]; - int _off; - int _len; -public: - suBufferedRecvSocket ( SOCKET so = INVALID_SOCKET ); - int recvUntil ( std::string& buf, char until, int timeout ); - void recvPending(); - bool recvInStr ( char c ); -}; - -class SockAddrIn : public sockaddr_in -{ -public: - SockAddrIn(); // creates broadcast address - SockAddrIn ( const char* szAddr, u_short iPort ); - SockAddrIn ( in_addr_t iAddr, u_short iPort ); - operator sockaddr* () { return (sockaddr*)this; } - operator sockaddr_in* () { return (sockaddr_in*)this; } -}; - -#endif//__SOCKUTILS_H diff --git a/irc/ArchBlackmann/SplitJoin.cpp b/irc/ArchBlackmann/SplitJoin.cpp deleted file mode 100644 index f7dd8a4c9d7..00000000000 --- a/irc/ArchBlackmann/SplitJoin.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// SplitJoin.cpp -// -// This code is copyright 2003-2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) // MSVC6 can't handle too-long template names -#endif//_MSC_VER - -//#include - -#include "SplitJoin.h" - -#include - -using std::string; -using std::vector; -//using std::stringstream; - -static const char* quotes = "\"\'"; - -bool Split ( vector& vec, const char* csv, char sep, bool merge ) -{ - string scsv ( csv ); - char* col = &scsv[0]; - vec.resize ( 0 ); - for ( ;; ) - { - char* p = col; - while ( isspace(*p) && *p != sep ) - p++; - char quote = 0; - if ( strchr ( quotes, *p ) ) - quote = *p++; - while ( *p && (*p != sep || quote) ) - { - if ( *p++ == quote ) - break; - } - - while ( isspace(*p) && *p != sep ) - p++; - - if ( *p && *p != sep ) - return false; - - string scol ( col, p-col ); - - //quote = scol[0]; - if ( quote ) - { - if ( scol[scol.size()-1] == quote ) - scol = string ( &scol[1], scol.size()-2 ); - } - - if ( scol.length() || !merge ) - vec.push_back ( scol ); - - if ( !*p ) - break; - - col = p + 1; - } - return true; -} - -bool Join ( string& csv, vector& vec, char sep ) -{ - csv.resize(0); - for ( int i = 0; i < vec.size(); i++ ) - { - if ( i ) - csv += sep; - string& s = vec[i]; - if ( strchr ( s.c_str(), sep ) ) - { - if ( strchr ( s.c_str(), '\"' ) ) - { - if ( strchr ( s.c_str(), '\'' ) ) - return false; // the sep, " and ' are all in the string, can't build valid output - csv += '\''; - csv += s; - csv += '\''; - } - else - { - csv += '\"'; - csv += s; - csv += '\"'; - } - } - else - csv += s; - } - return true; -} diff --git a/irc/ArchBlackmann/SplitJoin.h b/irc/ArchBlackmann/SplitJoin.h deleted file mode 100644 index 8f1311457f7..00000000000 --- a/irc/ArchBlackmann/SplitJoin.h +++ /dev/null @@ -1,32 +0,0 @@ -// SplitJoin.h -// -// This code is copyright 2003-2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#ifndef SPLITJOIN_H -#define SPLITJOIN_H - -#include -#include - -bool Split ( - std::vector& vec, - const char* csv, - char sep=',', - bool merge=false ); - -bool Join ( - std::string& csv, - std::vector& vec, - char sep=',' ); - -inline bool Split ( - std::vector& vec, - const std::string& csv, - char sep=',', - bool merge=false ) -{ - return Split ( vec, csv.c_str(), sep, merge ); -} - -#endif//SPLIT_H diff --git a/irc/ArchBlackmann/ThreadPool.cpp b/irc/ArchBlackmann/ThreadPool.cpp deleted file mode 100644 index c545cd7b91b..00000000000 --- a/irc/ArchBlackmann/ThreadPool.cpp +++ /dev/null @@ -1,240 +0,0 @@ -// ThreadPool.cpp -// This file is (C) 2003-2004 Royce Mitchell III -// and released under the LGPL & BSD licenses - -#include -using std::vector; -#include "ThreadPool.h" -#include "QueueT.h" -#include "auto_vector.h" -#include "verify.h" -#include "ReliMT.h" - -class PoolableThread : public ActiveObject -{ -public: - PoolableThread ( ThreadPoolImpl& ); - ~PoolableThread() - { - Kill(); - } - void InitThread(); - void Run(); - void FlushThread(); - - ThreadPoolImpl& _pool; -}; - -class ThreadPoolLaunchData -{ -public: - ThreadPoolFunc* pFun; - void* pArg; -}; - -template -class AtomicCounter : public Uncopyable -{ - Mutex _m; - T _t; -public: - AtomicCounter ( T init = 0 ) : _t(init) - { - } - AtomicCounter ( const AtomicCounter& t ) - { - //Mutex::Lock l ( _m ); // don't need to lock since this is a ctor - Mutex::Lock l2 ( t._m ); - _t = t._t; - } - const AtomicCounter& operator = ( const AtomicCounter& t ) - { - Mutex::Lock l ( _m ); - Mutex::Lock l2 ( t._m ); - _t = t._t; - return *this; - } - T operator ++ () - { - Mutex::Lock l ( _m ); - T t = _t++; - return t; - } - const AtomicCounter& operator ++ ( int ) - { - Mutex::Lock l ( _m ); - ++_t; - return *this; - } - T operator -- () - { - Mutex::Lock l ( _m ); - T t = _t--; - return t; - } - const AtomicCounter& operator -- ( int ) - { - Mutex::Lock l ( _m ); - --_t; - return *this; - } - const AtomicCounter& operator += ( T t ) - { - Mutex::Lock l ( _m ); - return _t += t; - return *this; - } - const AtomicCounter& operator -= ( T t ) - { - Mutex::Lock l ( _m ); - return _t -= t; - return *this; - } - operator const T& () const - { - //Mutex::Lock l ( _m ); - return _t; - } - T operator !() const - { - //Mutex::Lock l ( _m ); - return !_t; - } -}; - -class ThreadPoolImpl : public Uncopyable -{ -public: - ThreadPoolImpl() : _isDying(false), _idleThreads(0) - { - } - - ~ThreadPoolImpl() - { - } - - void Shutdown() - { - _isDying = true; - while ( _idleThreads ) - { - _threadWaitEvent.Release(); - _threadStartEvent.Wait(); // let thread actually get a grip - } - } - - void Launch ( ThreadPoolFunc* pFun, void* pArg ) - { - // this mutex is necessary to make sure we never have a conflict - // between checking !_idleThreads and the call to _threadStartEvent.Wait() - // basically if 2 threads call Launch() simultaneously, and there is only - // 1 idle thread, it's possible that a new thread won't be created to - // satisfy the 2nd request until an existing thread finishes. - Mutex::Lock launchlock ( _launchMutex ); - - ASSERT ( pFun ); - ThreadPoolLaunchData* data; - { - Mutex::Lock lock ( _vectorMutex ); - if ( !_spareData.size() ) - _spareData.push_back ( new ThreadPoolLaunchData() ); - data = _spareData.pop_back().release(); - if ( !_idleThreads ) - _threads.push_back ( new PoolableThread(*this) ); - } - - data->pFun = pFun; - data->pArg = pArg; - verify ( _pendingData.Add ( data ) ); - _threadWaitEvent.Release(); // tell a thread to do it's thing... - _threadStartEvent.Wait(); // wait on a thread to pick up the request - } - - // functions for threads to call... - ThreadPoolLaunchData* GetPendingData() - { - ThreadPoolLaunchData* data = NULL; - ++_idleThreads; - _threadWaitEvent.Wait(); // waits until there's a request - --_idleThreads; - _threadStartEvent.Release(); // tell requester we got it - if ( _isDying ) - return NULL; - _pendingData.Get ( data ); - ASSERT ( data ); - return data; - } - - void RecycleData ( ThreadPoolLaunchData* data ) - { - Mutex::Lock lock ( _vectorMutex ); - _spareData.push_back ( data ); - } - - bool _isDying; - Mutex _vectorMutex, _launchMutex; - auto_vector _threads; - auto_vector _spareData; - CQueueT _pendingData; - Event _threadWaitEvent, _threadStartEvent; - AtomicCounter _idleThreads; -}; - -/////////////////////////////////////////////////////////////////////////////// -// ThreadPool - -/*static*/ ThreadPool& ThreadPool::Instance() -{ - static ThreadPool tp; - return tp; -} - -ThreadPool::ThreadPool() : _pimpl ( new ThreadPoolImpl ) -{ -}; - -ThreadPool::~ThreadPool() -{ - _pimpl->Shutdown(); - delete _pimpl; - _pimpl = 0; -} - -void ThreadPool::Launch ( ThreadPoolFunc* pFun, void* pArg ) -{ - _pimpl->Launch ( pFun, pArg ); -} - -int ThreadPool::IdleThreads() -{ - return _pimpl->_idleThreads; -} - -/////////////////////////////////////////////////////////////////////////////// -// PoolableThread - -PoolableThread::PoolableThread ( ThreadPoolImpl& pool ) : _pool(pool) -{ - Start(); -} - -void PoolableThread::InitThread() -{ -} - -void PoolableThread::Run() -{ - ThreadPoolLaunchData* data; - while ( !_isDying ) - { - data = _pool.GetPendingData(); // enter wait state if none... - if ( !data ) // NULL data means kill thread - break; - (*data->pFun) ( data->pArg ); // call the function - _pool.RecycleData ( data ); - } -} - -void PoolableThread::FlushThread() -{ -} diff --git a/irc/ArchBlackmann/ThreadPool.h b/irc/ArchBlackmann/ThreadPool.h deleted file mode 100644 index 84e36f3993c..00000000000 --- a/irc/ArchBlackmann/ThreadPool.h +++ /dev/null @@ -1,28 +0,0 @@ -// ThreadPool.h -// This file is (C) 2003-2004 Royce Mitchell III -// and released under the LGPL & BSD licenses - -#ifndef THREADPOOL_H -#define THREADPOOL_H - -#include "ReliMT.h" - -typedef void THREADAPI ThreadPoolFunc ( void* ); - -class ThreadPoolImpl; - -class ThreadPool : public Uncopyable -{ -public: - static ThreadPool& Instance(); - ~ThreadPool(); - - void Launch ( ThreadPoolFunc* pFun, void* pArg ); - int IdleThreads(); - -private: - ThreadPool(); - ThreadPoolImpl *_pimpl; -}; - -#endif// THREADPOOL_H diff --git a/irc/ArchBlackmann/auto_ptr.h b/irc/ArchBlackmann/auto_ptr.h deleted file mode 100644 index 861501eb8e7..00000000000 --- a/irc/ArchBlackmann/auto_ptr.h +++ /dev/null @@ -1,87 +0,0 @@ -// auto_ptr.h -// This file is (C) 2002-2003 Royce Mitchell III -// and released under the LGPL & BSD licenses - -#ifndef AUTO_PTR_H -#define AUTO_PTR_H - -template -class auto_ptr -{ -public: - typedef T element_type; - - explicit auto_ptr(T *p = 0) : _p(p) - { - } - - auto_ptr(auto_ptr& rhs) : _p(rhs.release()) - { - } - - auto_ptr& operator=(auto_ptr& rhs) - { - if ( &rhs != this ) - { - dispose(); - _p = rhs.release(); - } - return *this; - } - - auto_ptr& set ( auto_ptr& rhs ) - { - if ( &rhs != this ) - { - dispose(); - _p = rhs.release(); - } - return *this; - } - - ~auto_ptr() - { - dispose(); - } - - void dispose() - { - if ( _p ) - { - delete _p; - _p = 0; - } - } - - T& operator[] ( int i ) - { - return _p[i]; - } - - T& operator*() const - { - return *_p; - } - - T* operator->() const - { - return _p; - } - - T* get() const - { - return _p; - } - - T* release() - { - T* p = _p; - _p = 0; - return p; - } - -private: - T* _p; -}; - -#endif//AUTO_PTR_H diff --git a/irc/ArchBlackmann/auto_vector.h b/irc/ArchBlackmann/auto_vector.h deleted file mode 100644 index 730c6302af8..00000000000 --- a/irc/ArchBlackmann/auto_vector.h +++ /dev/null @@ -1,141 +0,0 @@ -// auto_vector.h -// This file is (C) 2002-2004 Royce Mitchell III -// and released under the LGPL & BSD licenses - -#ifndef AUTO_VECTOR_H -#define AUTO_VECTOR_H - -#include -#include "verify.h" -#include "auto_ptr.h" - -template -class auto_vector -{ -public: - explicit auto_vector ( size_t capacity = 0 ) - : _arr(0), _capacity(0), _end(0) - { - if ( capacity != 0 ) - _arr = new auto_ptr[capacity]; - _capacity = capacity; - } - - ~auto_vector() - { - delete []_arr; - } - - size_t size() const - { - return _end; - } - - const auto_ptr& operator [] ( size_t i ) const - { - ASSERT ( i < _end ); - return _arr[i]; - } - - auto_ptr& operator [] ( size_t i ) - { - ASSERT ( i < _end ); - return _arr[i]; - } - - void assign ( size_t i, auto_ptr& p ) - { - ASSERT ( i < _end ); - _arr[i] = p; - } - - void assign_direct ( size_t i, T * p ) - { - ASSERT ( i < _end ); - reserve ( i + 1 ); - _arr[i].reset ( p ); - } - - void push_back ( auto_ptr& p ) - { - reserve ( _end + 1 ); - _arr[_end++] = p; - } - - auto_ptr& back() - { - ASSERT ( _end != 0 ); - return _arr[_end-1]; - } - - void push_back ( T * p ) - { - reserve ( _end + 1 ); - auto_ptr tmp(p); - _arr[_end++] = tmp; - //GCC is pedantic, this is an error. - //_arr[_end++] = auto_ptr(p); - } - - auto_ptr pop_back() - { - ASSERT ( _end != 0 ); - if ( !_end ) - { - auto_ptr tmp((T*)0); - return tmp; - //GCC, this is an error. - //return auto_ptr(NULL); - } - return _arr[--_end]; - } - - void resize ( size_t newSize ) - { - ASSERT ( newSize >= 0 ); - reserve ( newSize ); // make sure we have at least this much room - _end = newSize; - } - - void reserve ( size_t reqCapacity ) - { - if ( reqCapacity <= _capacity ) - return; - size_t newCapacity = 2 * _capacity; - if ( reqCapacity > newCapacity ) - newCapacity = reqCapacity; - // allocate new array - auto_ptr * arrNew = new auto_ptr [newCapacity]; - // transfer all entries - for ( size_t i = 0; i < _capacity; ++i ) - arrNew[i] = _arr[i]; - _capacity = newCapacity; - // free old memory - delete[] _arr; - // substitute new array for old array - _arr = arrNew; - } - - void remove ( size_t off ) - { - size_t last = _end-1; - if ( off == last ) - resize ( last ); - else if ( off < last ) - { - auto_ptr tmp ( pop_back().release() ); - _arr[off] = tmp; - } - } - - //typedef const_auto_iterator const_iterator; - //const_iterator begin () const { return _arr; } - //const_iterator end () const { return _arr + _end; } - -private: - auto_ptr *_arr; - size_t _capacity; - size_t _end; -}; - -#endif//AUTO_VECTOR_H diff --git a/irc/ArchBlackmann/base64.cpp b/irc/ArchBlackmann/base64.cpp deleted file mode 100644 index 6fdc8528698..00000000000 --- a/irc/ArchBlackmann/base64.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// base64.cpp - -#include "base64.h" - -using std::string; - -static const char* alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -string base64_encode ( const string& sInput ) -{ - unsigned char x=0, topbit=0; - int v=0; - string sOutput; - do - { - if ( topbit < 6 ) - { - x++; - v <<= 8; - if ( x <= sInput.length() ) v += sInput[x-1]; - topbit += 8; - } - topbit -= 6; - if ( x > sInput.length() && !v ) - break; - sOutput += alfabet[(v >> topbit) & 63]; - v &= (1 << topbit) - 1; - } while ( x < sInput.length() || v ); - int eq = (8 - (sOutput.length() % 4)) % 4; - while ( eq-- ) - sOutput += '='; - return sOutput; -} - -string base64_decode ( const string& sInput ) -{ - unsigned char x=0, topbit=0; - int v=0, inlen = sInput.length(); - string sOutput; - while ( inlen && sInput[inlen-1] == '=' ) - inlen--; - do - { - while ( topbit < 8 ) - { - x++; - v <<= 6; - if ( x <= inlen ) v += (strchr(alfabet, sInput[x-1]) - alfabet); - topbit += 6; - } - topbit -= 8; - if ( x > inlen && !v ) - break; - sOutput += (char)((v >> topbit) & 255); - v &= ((1 << topbit) - 1); - } while ( x <= inlen || v ); - return sOutput; -} diff --git a/irc/ArchBlackmann/base64.h b/irc/ArchBlackmann/base64.h deleted file mode 100644 index e307b7aeaca..00000000000 --- a/irc/ArchBlackmann/base64.h +++ /dev/null @@ -1,12 +0,0 @@ -// base64.h - -#ifndef BASE64_H -#define BASE64_H - -#include - -std::string base64_encode ( const std::string& s ); - -std::string base64_decode ( const std::string& s ); - -#endif//BASE64_H diff --git a/irc/ArchBlackmann/chomp.cpp b/irc/ArchBlackmann/chomp.cpp deleted file mode 100644 index 5a3a2080018..00000000000 --- a/irc/ArchBlackmann/chomp.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// chomp.cpp -// This file is (C) 2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#include "chomp.h" - -std::string chomp ( const std::string& s ) -{ - const char* p = &s[0]; - const char* p2 = &s[0] + s.size(); - while ( p2 > p && strchr("\r\n", p2[-1]) ) - p2--; - return std::string ( p, p2-p ); -} - diff --git a/irc/ArchBlackmann/chomp.h b/irc/ArchBlackmann/chomp.h deleted file mode 100644 index 80bd8dce071..00000000000 --- a/irc/ArchBlackmann/chomp.h +++ /dev/null @@ -1,13 +0,0 @@ -// chomp.h -// This file is (C) 2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#ifndef CHOMP_H -#define CHOMP_H - -#include - -std::string chomp ( const std::string& s ); - -#endif//TRIM_H - diff --git a/irc/ArchBlackmann/config.h b/irc/ArchBlackmann/config.h deleted file mode 100644 index fab1e9c841c..00000000000 --- a/irc/ArchBlackmann/config.h +++ /dev/null @@ -1,7 +0,0 @@ - - -#define SERVER "irc.freenode.net" -#define BOTNAME "ArchBlackmann" -#define CHANNEL "#ReactOS" -#define MODE "+i" -#define PASS "ilovebunnies" diff --git a/irc/ArchBlackmann/cram_md5.cpp b/irc/ArchBlackmann/cram_md5.cpp deleted file mode 100644 index d4c37cf49aa..00000000000 --- a/irc/ArchBlackmann/cram_md5.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// cram_md5.cpp -// This file is (C) 2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#include "MD5.h" -#include "cram_md5.h" -#include "base64.h" - -using std::string; - -string cram_md5 ( const string& username, const string& password, const string& greeting ) -{ - string challenge = base64_decode ( greeting ); - - string hmac = HMAC_MD5 ( password, challenge ); - //printf ( "(cram_md5): hmac = %s\n", hmac.c_str() ); - string raw_response = username; - raw_response += " "; - raw_response += hmac; - //printf ( "(cram_md5): raw_response = %s\n", raw_response.c_str() ); - - return base64_encode ( raw_response ); -} diff --git a/irc/ArchBlackmann/cram_md5.h b/irc/ArchBlackmann/cram_md5.h deleted file mode 100644 index c0741b8efde..00000000000 --- a/irc/ArchBlackmann/cram_md5.h +++ /dev/null @@ -1,15 +0,0 @@ -// cram_md5.h -// This file is (C) 2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#ifndef CRAM_MD5_H -#define CRAM_MD5_H - -#include - -std::string cram_md5 ( - const std::string& username, - const std::string& password, - const std::string& greeting ); - -#endif//CRAM_MD5_H diff --git a/irc/ArchBlackmann/curse.txt b/irc/ArchBlackmann/curse.txt deleted file mode 100644 index ddec893b813..00000000000 --- a/irc/ArchBlackmann/curse.txt +++ /dev/null @@ -1 +0,0 @@ -semprini \ No newline at end of file diff --git a/irc/ArchBlackmann/cursecop.txt b/irc/ArchBlackmann/cursecop.txt deleted file mode 100644 index 6144752de03..00000000000 --- a/irc/ArchBlackmann/cursecop.txt +++ /dev/null @@ -1,10 +0,0 @@ -You should have your mouth washed out with soap! -This is a clean channel... please watch your language -Please try to keep it clean -Hey, there's children present ( I'm not even a year old yet! ) -Could you find a less-offensive way to express yourself, please? -Such language :( -Those aren't nice words to use -Oh, my poor innocent ears :( -Help! My mind is being corrupted! -filthy mouths are not appreciated here diff --git a/irc/ArchBlackmann/dev.txt b/irc/ArchBlackmann/dev.txt deleted file mode 100644 index 5415e0a3e6c..00000000000 --- a/irc/ArchBlackmann/dev.txt +++ /dev/null @@ -1,15 +0,0 @@ -Royce3 -kjk_hyperion -tamlin -GvG -filip2307 -hardon -w3seek -arty -sedwards -Exception -blight_ -jimtabor -mtempel -Gge -Alex_Ionescu diff --git a/irc/ArchBlackmann/func.txt b/irc/ArchBlackmann/func.txt deleted file mode 100644 index 7173404eac1..00000000000 --- a/irc/ArchBlackmann/func.txt +++ /dev/null @@ -1,580 +0,0 @@ -CcCanIWrite -CcCopyRead -CcCopyWrite -CcDeferWrite -CcFastCopyRead -CcFastCopyWrite -CcFlushCache -CcGetDirtyPages -CcGetFileObjectFromBcb -CcGetFileObjectFromSectionPtrs -CcGetFlushedValidData -CcGetLsnForFileObject -CcInitializeCacheMap -CcIsThereDirtyData -CcMapData -CcMdlRead -CcMdlReadComplete -CcMdlWriteAbort -CcMdlWriteComplete -CcPinMappedData -CcPinRead -CcPrepareMdlWrite -CcPreparePinWrite -CcPurgeCacheSection -CcRemapBcb -CcRepinBcb -CcScheduleReadAhead -CcSetAdditionalCacheAttributes -CcSetBcbOwnerPointer -CcSetDirtyPageThreshold -CcSetDirtyPinnedData -CcSetFileSizes -CcSetLogHandleForFile -CcSetReadAheadGranularity -CcUninitializeCacheMap -CcUnpinData -CcUnpinDataForThread -CcUnpinRepinnedBcb -CcWaitForCurrentLazyWriterActivity -CcZeroData -DbgLoadImageSymbols -DbgQueryDebugFilterState -DbgSetDebugFilterState -EVENT_TYPE -ExAcquireResourceExclusive -ExAcquireResourceExclusiveLite -ExAcquireResourceSharedLite -ExAcquireSharedStarveExclusive -ExAcquireSharedWaitForExclusive -ExAllocateFromZone -ExAllocatePool -ExAllocatePoolWithQuota -ExAllocatePoolWithQuotaTag -ExAllocatePoolWithTag -ExConvertExclusiveToSharedLite -ExCreateCallback -ExDeleteNPagedLookasideList -ExDeletePagedLookasideList -ExDeleteResource -ExDeleteResourceLite -ExDisableResourceBoostLite -ExEnumHandleTable -ExExtendZone -ExFreePool -ExGetCurrentProcessorCounts -ExGetCurrentProcessorCpuUsage -ExGetExclusiveWaiterCount -ExGetPreviousMode -ExGetSharedWaiterCount -ExInitializeNPagedLookasideList -ExInitializePagedLookasideList -ExInitializeResource -ExInitializeResourceLite -ExInitializeZone -ExInterlockedAddLargeInteger -ExInterlockedAddUlong -ExInterlockedDecrementLong -ExInterlockedExchangeUlong -ExInterlockedExtendZone -ExInterlockedIncrementLong -ExInterlockedInsertHeadList -ExInterlockedInsertTailList -ExInterlockedPopEntryList -ExInterlockedPushEntryList -ExInterlockedRemoveHeadList -ExIsProcessorFeaturePresent -ExIsResourceAcquiredExclusiveLite -ExIsResourceAcquiredSharedLite -ExLocalTimeToSystemTime -ExNotifyCallback -ExPostSystemEvent -ExQueryPoolBlockSize -ExQueueWorkItem -ExRaiseAccessViolation -ExRaiseDatatypeMisalignment -ExRaiseException -ExRaiseHardError -ExRaiseStatus -ExRegisterCallback -ExReinitializeResourceLite -ExReleaseResource -ExReleaseResourceForThread -ExReleaseResourceForThreadLite -ExRosDumpPagedPoolByTag -ExRosQueryPoolTag -ExSetResourceOwnerPointer -ExSetTimerResolution -ExSystemExceptionFilter -ExSystemTimeToLocalTime -ExTryToAcquireResourceExclusiveLite -ExUnregisterCallback -ExUuidCreate -ExVerifySuite -FsRtlAcquireFileExclusive -FsRtlAddMcbEntry -FsRtlAddToTunnelCache -FsRtlAllocateFileLock -FsRtlAllocatePool -FsRtlAllocatePoolWithQuota -FsRtlAllocatePoolWithQuotaTag -FsRtlAllocatePoolWithTag -FsRtlAllocateResource -FsRtlAreNamesEqual -FsRtlBalanceReads -FsRtlCheckLockForReadAccess -FsRtlCheckLockForWriteAccess -FsRtlCopyRead -FsRtlCopyWrite -FsRtlFastCheckLockForRead -FsRtlFastCheckLockForWrite -FsRtlFastUnlockAll -FsRtlFastUnlockAllByKey -FsRtlFastUnlockSingle -FsRtlFindInTunnelCache -FsRtlFreeFileLock -FsRtlGetFileSize -FsRtlGetNextFileLock -FsRtlGetNextMcbEntry -FsRtlIncrementCcFastReadNoWait -FsRtlIncrementCcFastReadNotPossible -FsRtlIncrementCcFastReadResourceMiss -FsRtlIncrementCcFastReadWait -FsRtlInitializeFileLock -FsRtlInitializeMcb -FsRtlInitializeTunnelCache -FsRtlInsertPerFileObjectContext -FsRtlInsertPerStreamContext -FsRtlIsDbcsInExpression -FsRtlIsFatDbcsLegal -FsRtlIsHpfsDbcsLegal -FsRtlIsNameInExpression -FsRtlLookupLastLargeMcbEntryAndIndex -FsRtlLookupLastMcbEntry -FsRtlLookupMcbEntry -FsRtlLookupPerFileObjectContext -FsRtlLookupPerStreamContextInternal -FsRtlMdlRead -FsRtlMdlReadComplete -FsRtlMdlReadCompleteDev -FsRtlMdlReadDev -FsRtlMdlWriteComplete -FsRtlMdlWriteCompleteDev -FsRtlNotifyChangeDirectory -FsRtlNotifyCleanup -FsRtlNotifyFilterChangeDirectory -FsRtlNotifyFilterReportChange -FsRtlNotifyFullChangeDirectory -FsRtlNotifyFullReportChange -FsRtlNotifyReportChange -FsRtlNotifyUninitializeSync -FsRtlNumberOfRunsInMcb -FsRtlPostPagingFileStackOverflow -FsRtlPostStackOverflow -FsRtlPrepareMdlWrite -FsRtlPrepareMdlWriteDev -FsRtlPrivateLock -FsRtlProcessFileLock -FsRtlRegisterFileSystemFilterCallbacks -FsRtlReleaseFile -FsRtlRemoveMcbEntry -FsRtlRemovePerFileObjectContext -FsRtlRemovePerStreamContext -FsRtlResetLargeMcb -FsRtlSyncVolumes -FsRtlTeardownPerStreamContexts -FsRtlTruncateMcb -FsRtlUninitializeFileLock -FsRtlUninitializeMcb -HalAdjustResourceList -HalAllocateCommonBuffer -HalAssignSlotResources -HalCalibratePerformanceCounter -HalFlushCommonBuffer -HalFreeCommonBuffer -HalGetAdapter -HalGetBusData -HalGetBusDataByOffset -HalGetDmaAlignmentRequirement -HalMakeBeep -HalQueryDisplayParameters -HalQueryRealTimeClock -HalReadDmaCounter -HalRequestIpi -HalSetBusData -HalSetBusDataByOffset -HalSetDisplayParameters -HalSetRealTimeClock -HalStartNextProcessor -IoAcquireCancelSpinLock -IoAcquireRemoveLockEx -IoAcquireVpbSpinLock -IoAllocateAdapterChannel -IoAllocateController -IoAllocateDriverObjectExtension -IoAllocateErrorLogEntry -IoAllocateIrp -IoAllocateMdl -IoAllocateWorkItem -IoAssignResources -IoAttachDevice -IoAttachDeviceByPointer -IoAttachDeviceToDeviceStack -IoAttachDeviceToDeviceStackSafe -IoBuildAsynchronousFsdRequest -IoBuildDeviceIoControlRequest -IoBuildPartialMdl -IoBuildSynchronousFsdRequest -IoCallDriver -IoCancelFileOpen -IoCancelIrp -IoCheckQuerySetFileInformation -IoCheckQuerySetVolumeInformation -IoCheckQuotaBufferValidity -IoCheckShareAccess -IoCompleteRequest -IoConnectInterrupt -IoCreateController -IoCreateDevice -IoCreateDisk -IoCreateDriver -IoCreateFile -IoCreateFileSpecifyDeviceObjectHint -IoCreateNotificationEvent -IoCreateStreamFileObject -IoCreateStreamFileObjectEx -IoCreateStreamFileObjectLite -IoCreateSymbolicLink -IoCreateSynchronizationEvent -IoCreateUnprotectedSymbolicLink -IoDeleteController -IoDeleteDevice -IoDeleteDriver -IoDeleteSymbolicLink -IoDetachDevice -IoDisconnectInterrupt -IoEnqueueIrp -IoEnumerateDeviceObjectList -IoFlushAdapterBuffers -IoForwardIrpSynchronously -IoFreeAdapterChannel -IoFreeController -IoFreeErrorLogEntry -IoFreeIrp -IoFreeMapRegisters -IoFreeMdl -IoFreeWorkItem -IoGetAttachedDevice -IoGetAttachedDeviceReference -IoGetBaseFileSystemDeviceObject -IoGetBootDiskInformation -IoGetConfigurationInformation -IoGetCurrentProcess -IoGetDeviceAttachmentBaseRef -IoGetDeviceInterfaceAlias -IoGetDeviceInterfaces -IoGetDeviceObjectPointer -IoGetDeviceProperty -IoGetDeviceToVerify -IoGetDiskDeviceObject -IoGetDriverObjectExtension -IoGetFileObjectGenericMapping -IoGetInitialStack -IoGetLowerDeviceObject -IoGetRelatedDeviceObject -IoGetRequestorProcess -IoGetRequestorProcessId -IoGetRequestorSessionId -IoGetStackLimits -IoGetTopLevelIrp -IoInitializeIrp -IoInitializeRemoveLockEx -IoInitializeTimer -IoInvalidateDeviceRelations -IoInvalidateDeviceState -IoIsFileOriginRemote -IoIsOperationSynchronous -IoIsSystemThread -IoIsValidNameGraftingBuffer -IoMakeAssociatedIrp -IoMapTransfer -IoOpenDeviceInstanceKey -IoOpenDeviceInterfaceRegistryKey -IoOpenDeviceRegistryKey -IoPageRead -IoPnPDeliverServicePowerNotification -IoQueryDeviceDescription -IoQueryDeviceEnumInfo -IoQueryFileDosDeviceName -IoQueryFileInformation -IoQueryVolumeInformation -IoQueueThreadIrp -IoQueueWorkItem -IoRaiseHardError -IoRaiseInformationalHardError -IoReadDiskSignature -IoReadPartitionTableEx -IoRegisterBootDriverReinitialization -IoRegisterDeviceInterface -IoRegisterDriverReinitialization -IoRegisterFileSystem -IoRegisterFsRegistrationChange -IoRegisterLastChanceShutdownNotification -IoRegisterPlugPlayNotification -IoRegisterShutdownNotification -IoReleaseCancelSpinLock -IoReleaseRemoveLockAndWaitEx -IoReleaseRemoveLockEx -IoReleaseVpbSpinLock -IoRemoveShareAccess -IoReportDetectedDevice -IoReportHalResourceUsage -IoReportResourceForDetection -IoReportResourceUsage -IoReportTargetDeviceChange -IoReportTargetDeviceChangeAsynchronous -IoRequestDeviceEject -IoReuseIrp -IoSetCompletionRoutineEx -IoSetDeviceInterfaceState -IoSetDeviceToVerify -IoSetFileOrigin -IoSetHardErrorOrVerifyDevice -IoSetInformation -IoSetIoCompletion -IoSetPartitionInformationEx -IoSetShareAccess -IoSetStartIoAttributes -IoSetSystemPartition -IoSetThreadHardErrorMode -IoSetTopLevelIrp -IoStartNextPacket -IoStartNextPacketByKey -IoStartPacket -IoStartTimer -IoStopTimer -IoSynchronousInvalidateDeviceRelations -IoSynchronousPageWrite -IoUnregisterFileSystem -IoUnregisterFsRegistrationChange -IoUnregisterPlugPlayNotification -IoUnregisterShutdownNotification -IoUpdateShareAccess -IoValidateDeviceIoControlAccess -IoVerifyPartitionTable -IoVerifyVolume -IoVolumeDeviceToDosName -IoWMIAllocateInstanceIds -IoWMIDeviceObjectToInstanceName -IoWMIExecuteMethod -IoWMIHandleToInstanceName -IoWMIOpenBlock -IoWMIQueryAllData -IoWMIQueryAllDataMultiple -IoWMIQuerySingleInstance -IoWMIQuerySingleInstanceMultiple -IoWMIRegistrationControl -IoWMISetNotificationCallback -IoWMISetSingleInstance -IoWMISetSingleItem -IoWMISuggestInstanceName -IoWMIWriteEvent -IoWriteErrorLogEntry -IoWritePartitionTableEx -KPRIORITY -KdPortGetByte -KdPortPollByte -KdPortPutByte -Ke386QueryIoAccessMap -Ke386SetIoAccessMap -KeAcquireInterruptSpinLock -KeAreApcsDisabled -KeCapturePersistentThreadState -KeDeregisterBugCheckReasonCallback -KeFindConfigurationEntry -KeFindConfigurationNextEntry -KeFlushEntireTb -KeFlushQueuedDpcs -KeGetRecommendedSharedDataAlignment -KeIsExecutingDpc -KeQueryActiveProcessors -KeQueryPerformanceCounter -KeQueryPriorityThread -KeQueryRuntimeThread -KeQuerySystemTime -KeQueryTickCount -KeQueryTimeIncrement -KeRaiseIrql -KeRaiseIrqlToDpcLevel -KeRaiseUserException -KeReadStateEvent -KeRegisterBugCheckCallback -KeRegisterBugCheckReasonCallback -KeReleaseInterruptSpinLock -KeReleaseMutant -KeReleaseMutex -KeReleaseSemaphore -KeReleaseSpinLock -KeReleaseSpinLockFromDpcLevel -KeReleaseSpinLockFromDpcLevel -KeRemoveByKeyDeviceQueue -KeRemoveByKeyDeviceQueueIfBusy -KeRemoveDeviceQueue -KeRemoveEntryDeviceQueue -KeRemoveSystemServiceTable -KeRestoreFloatingPointState -KeRevertToUserAffinityThread -KeRosDumpStackFrames -KeRosGetStackFrames -KeRosPrintAddress -KeSaveFloatingPointState -KeSetDmaIoCoherency -KeSetEvent -KeSetEventBoostPriority -KeSetIdealProcessorThread -KeSetKernelStackSwapEnable -KeSetProfileIrql -KeSetSystemAffinityThread -KeSetTimeIncrement -KeTerminateThread -KeUserModeCallback -KeWaitForMutexObject -KeWaitForSingleObject -KiCoprocessorError -KiUnexpectedInterrupt -LONG -LdrFindResourceDirectory_U -MmAddPhysicalMemory -MmAddVerifierThunks -MmAdjustWorkingSetSize -MmAdvanceMdl -MmAllocateContiguousMemory -MmAllocateContiguousMemorySpecifyCache -MmAllocateMappingAddress -MmAllocateNonCachedMemory -MmBuildMdlForNonPagedPool -MmCanFileBeTruncated -MmCreateMdl -MmCreateSection -MmDbgTranslatePhysicalAddress -MmDisableModifiedWriteOfSection -MmFlushImageSection -MmForceSectionClosed -MmFreeContiguousMemory -MmFreeMappingAddress -MmFreeNonCachedMemory -MmGetPhysicalAddress -MmGetPhysicalMemoryRanges -MmGetSystemRoutineAddress -MmGetVirtualForPhysical -MmGrowKernelStack -MmIsAddressValid -MmIsDriverVerifying -MmIsNonPagedSystemAddressValid -MmIsRecursiveIoFault -MmIsThisAnNtAsSystem -MmIsVerifierEnabled -MmLockPagableDataSection -MmLockPagableImageSection -MmLockPagableSectionByHandle -MmMapIoSpace -MmMapLockedPages -MmMapLockedPagesWithReservedMapping -MmMapMemoryDumpMdl -MmMapUserAddressesToPage -MmMapVideoDisplay -MmMapViewInSessionSpace -MmMapViewInSystemSpace -MmMapViewOfSection -MmMarkPhysicalMemoryAsBad -MmMarkPhysicalMemoryAsGood -MmPageEntireDriver -MmPrefetchPages -MmProbeAndLockPages -MmProbeAndLockProcessPages -MmProbeAndLockSelectedPages -MmProtectMdlSystemAddress -MmQuerySystemSize -MmRemovePhysicalMemory -MmResetDriverPaging -MmSecureVirtualMemory -MmSetAddressRangeModified -MmSetBankedSection -MmSizeOfMdl -MmTrimAllSystemPagableMemory -MmUnlockPagableImageSection -MmUnlockPages -MmUnmapIoSpace -MmUnmapLockedPages -MmUnmapReservedMapping -MmUnmapVideoDisplay -MmUnmapViewInSessionSpace -MmUnmapViewInSystemSpace -MmUnmapViewOfSection -MmUnsecureVirtualMemory -OUT -ObCreateObject -PEJOB -PEPROCESS -PKBUGCHECK_CALLBACK_RECORD -PKDEVICE_QUEUE_ENTRY -PKIRQL -PULONG -PVOID -PW32_THREAD_CALLBACK -PoCallDriver -PoRegisterDeviceForIdleDetection -PoRegisterSystemState -PoRequestPowerIrp -PoSetDeviceBusy -PoSetPowerState -PoSetSystemState -PoStartNextPowerIrp -PoUnregisterSystemState -ProbeForRead -ProbeForWrite -PsAssignImpersonationToken -PsCreateSystemProcess -PsCreateSystemThread -PsGetCurrentProcessId -PsGetCurrentThreadId -PsImpersonateClient -PsReferenceImpersonationToken -PsReferencePrimaryToken -PsRevertThreadToSelf -PsRevertToSelf -PsTerminateSystemThread -READ_PORT_BUFFER_UCHAR -READ_PORT_BUFFER_ULONG -READ_PORT_BUFFER_USHORT -READ_PORT_UCHAR -READ_PORT_ULONG -READ_PORT_USHORT -SeAssignSecurityEx -SeAuditHardLinkCreation -SeAuditingFileEvents -SeAuditingFileEventsWithContext -SeAuditingFileOrGlobalEvents -SeAuditingHardLinkEvents -SeAuditingHardLinkEventsWithContext -SeCaptureSecurityDescriptor -SeCaptureSubjectContext -SeCloseObjectAuditAlarm -SeCreateAccessState -SeCreateClientSecurityFromSubjectContext -SeFilterToken -SeImpersonateClientEx -SePrivilegeObjectAuditAlarm -SeQueryInformationToken -SeQuerySessionIdToken -SeReleaseSecurityDescriptor -SeSetSecurityDescriptorInfoEx -SeTokenIsAdmin -SeTokenIsRestricted -SeTokenIsWriteRestricted -WRITE_PORT_BUFFER_UCHAR -WRITE_PORT_BUFFER_ULONG -WRITE_PORT_BUFFER_USHORT -WRITE_PORT_UCHAR -WRITE_PORT_ULONG -WRITE_PORT_USHORT diff --git a/irc/ArchBlackmann/grovel.txt b/irc/ArchBlackmann/grovel.txt deleted file mode 100644 index 21137b50e13..00000000000 --- a/irc/ArchBlackmann/grovel.txt +++ /dev/null @@ -1,10 +0,0 @@ -/me bows humbly and begs %s's forgiveness -%s is soo cool... I hope to be like him some day -/me hides in a corner and hopes %s doesn't beat him with the whipping noodle again -/me prostrates at %s's feet and begs his majesty's forgiveness -%s: please don't hurt me! -I'm not worthy... I'm not worthy... -/me sings %s's praises to the world! -/me thinks %s is smarter than %dev% -%s: oh please may I defrag your sock drawer? -/me gives %s a cookie, hoping it will make up for breaking %func% the other day... diff --git a/irc/ArchBlackmann/idle.txt b/irc/ArchBlackmann/idle.txt deleted file mode 100644 index d3bf9c4dec5..00000000000 --- a/irc/ArchBlackmann/idle.txt +++ /dev/null @@ -1 +0,0 @@ -/me is bored diff --git a/irc/ArchBlackmann/irql.txt b/irc/ArchBlackmann/irql.txt deleted file mode 100644 index f585ced2ad1..00000000000 --- a/irc/ArchBlackmann/irql.txt +++ /dev/null @@ -1,9 +0,0 @@ -PASSIVE_LEVEL -APC_LEVEL -DISPATCH_LEVEL -PROFILE_LEVEL -CLOCK1_LEVEL -IPI_LEVEL -POWER_LEVEL -HIGH_LEVEL -SYNCH_LEVEL \ No newline at end of file diff --git a/irc/ArchBlackmann/makefile b/irc/ArchBlackmann/makefile deleted file mode 100644 index 0fac5b953f0..00000000000 --- a/irc/ArchBlackmann/makefile +++ /dev/null @@ -1,38 +0,0 @@ -TARGET := ArchBlackmann.exe - -.PHONY: all - -all: $(TARGET) - -CPP=mingw32-g++ -CFLAGS := -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -LFLAGS := -LIBS := -lstdc++ -lws2_32 - -SRCS := ArchBlackmann.cpp \ - base64.cpp \ - chomp.cpp \ - cram_md5.cpp \ - File.cpp \ - IRCClient.cpp \ - MD5.cpp \ - panic.cpp \ - ReliMT.cpp \ - SockUtils.cpp \ - SplitJoin.cpp \ - ssprintf.cpp \ - ThreadPool.cpp \ - trim.cpp - -OBJS := $(SRCS:.cpp=.o) - -$(TARGET): $(OBJS) - $(CPP) $(LFLAGS) -o $@ $(OBJS) $(LIBS) - -.cpp.o: $< - $(CPP) $(CFLAGS) -c $< -o $@ - -.PHONY: clean -clean: - -@del $(TARGET) - -@del $(OBJS) diff --git a/irc/ArchBlackmann/module.txt b/irc/ArchBlackmann/module.txt deleted file mode 100644 index b9956a73854..00000000000 --- a/irc/ArchBlackmann/module.txt +++ /dev/null @@ -1,13 +0,0 @@ -the kernel -ntoskrnl -win32k -msafd -ws2_32 -user32 -shell32 -the cache manager -tdi -the scheduler -the thread queue -the message queue -atapi \ No newline at end of file diff --git a/irc/ArchBlackmann/nogrovel.txt b/irc/ArchBlackmann/nogrovel.txt deleted file mode 100644 index bbeecf0d275..00000000000 --- a/irc/ArchBlackmann/nogrovel.txt +++ /dev/null @@ -1,5 +0,0 @@ -/me slaps %s with a large trout -recycle(%s) -Did I hear something? Musta been a %s-fly... Where's that fly-swatter? -%s: go away son, you bother me.... -/me beats %s with the whipping noodle diff --git a/irc/ArchBlackmann/panic.cpp b/irc/ArchBlackmann/panic.cpp deleted file mode 100644 index 3ad0604b311..00000000000 --- a/irc/ArchBlackmann/panic.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// panic.cpp -// This file is (C) 2003-2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#include -#include -#include -#ifdef WIN32 -#include -#include -#endif//WIN32 -#include "panic.h" - -void panic ( const char* format, ... ) -{ - va_list arg; - int done; - - va_start(arg, format); -#if defined(WIN32) && !defined(_CONSOLE) - char buf[4096]; - _vsnprintf ( buf, sizeof(buf)-1, format, arg ); - MessageBox ( NULL, buf, "Panic!", MB_OK|MB_ICONEXCLAMATION ); -#else - done = vprintf(format, arg); - printf ( "\n" ); -#endif - va_end(arg); -#if defined(WIN32) && defined(_CONSOLE) - printf ( "Press any key to exit\n" ); - (void)getch(); -#endif//WIN32 && _CONSOLE - exit ( -1 ); -} diff --git a/irc/ArchBlackmann/panic.h b/irc/ArchBlackmann/panic.h deleted file mode 100644 index e15cafab27f..00000000000 --- a/irc/ArchBlackmann/panic.h +++ /dev/null @@ -1,18 +0,0 @@ -// panic.h -// This file is (C) 2003-2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#ifndef PANIC_H -#define PANIC_H - -void panic ( const char* format, ... ); - -#define suAssert(expr) if ( !(expr) ) panic ( "%s(%lu): SOCKET ERROR %s\nExpression: %s\n", __FILE__, __LINE__, suErrDesc(SUERRNO), #expr ) - -#if defined(DEBUG) || defined(_DEBUG) -# define suVerify(expr) suAssert(expr) -#else -# define suVerify(expr) expr -#endif - -#endif//PANIC_H diff --git a/irc/ArchBlackmann/period.txt b/irc/ArchBlackmann/period.txt deleted file mode 100644 index 380a6fefe38..00000000000 --- a/irc/ArchBlackmann/period.txt +++ /dev/null @@ -1,11 +0,0 @@ -minute -hour -day -week -fortnight -month -year -decade -century -millenium -eon \ No newline at end of file diff --git a/irc/ArchBlackmann/readme.txt b/irc/ArchBlackmann/readme.txt deleted file mode 100644 index 89f9da7369e..00000000000 --- a/irc/ArchBlackmann/readme.txt +++ /dev/null @@ -1,44 +0,0 @@ -This doc can be also found on the wiki. - -ArchBlackman is a IRC-Chat bot of the #reactos irc channel. He has been coded by Royce3 and DrFred (mbosma) currently runs him. - - -If some one use a swear word he'll tell him not to do so and you can also ask him something technical about reactos. :) - -Besides this he also knows some commands. The systax for giving him commands "ArchBlackmann: !grovel". (don't forget to address him) - - - !grovel - This is the only command that non ops can do (No Parameter) - - !kiss - - !hug - - !give - - !say - You can tell him to say something on the channel via PrivateMessage - - -ArchBlackmann know what he should say from some text files. They can be found on the svn-dir. But can also edit them online if you are op using: - - - !add - - !remove - -List that are used directly to create responses are: - - - tech - here are the sentences ArchBlackmann says when he finds his name - - curse - this are the curses he looks for - - cursecop - this the responces to them - - grovel - this is said when an op does the grovel command - - nogrovel - this when someone else does it - -The remaining lists are not used directly, but by the other lists. - -They are: - - - dev - - func - - irql - - module - - period - - status - - stru - - type - -And they are used like this: - /me thinks %s is smarter than %dev% \ No newline at end of file diff --git a/irc/ArchBlackmann/ssprintf.cpp b/irc/ArchBlackmann/ssprintf.cpp deleted file mode 100644 index 9f55d12f637..00000000000 --- a/irc/ArchBlackmann/ssprintf.cpp +++ /dev/null @@ -1,998 +0,0 @@ -// ssprintf.cpp - -#include -#include -#include -#include -#include "ssprintf.h" - -#ifdef _MSC_VER -#define alloca _alloca -#endif//_MSC_VER - -typedef __int64 LONGLONG; -typedef unsigned __int64 ULONGLONG; - -typedef struct { - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int sign:1; -} ieee_float_t; - -typedef struct { - unsigned int mantissal:32; - unsigned int mantissah:20; - unsigned int exponent:11; - unsigned int sign:1; -} ieee_double_t; - -typedef struct { - unsigned int mantissal:32; - unsigned int mantissah:32; - unsigned int exponent:15; - unsigned int sign:1; - unsigned int empty:16; -} ieee_long_double_t; - -std::string ssprintf ( const char* fmt, ... ) -{ - va_list arg; - va_start(arg, fmt); - std::string f = ssvprintf ( fmt, arg ); - va_end(arg); - return f; -} - -#define ZEROPAD 1 /* pad with zero */ -#define SIGN 2 /* unsigned/signed long */ -#define PLUS 4 /* show plus */ -#define SPACE 8 /* space if plus */ -#define LEFT 16 /* left justified */ -#define SPECIAL 32 /* 0x */ -#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ -#define ZEROTRUNC 128 /* truncate zero 's */ - - -static int skip_atoi(const char **s) -{ - int i=0; - - while (isdigit(**s)) - i = i*10 + *((*s)++) - '0'; - return i; -} - - -static int do_div(LONGLONG *n,int base) -{ - int __res = ((ULONGLONG) *n) % (unsigned) base; - *n = ((ULONGLONG) *n) / (unsigned) base; - return __res; -} - - -static bool number(std::string& f, LONGLONG num, int base, int size, int precision ,int type) -{ - char c,sign,tmp[66]; - const char *digits="0123456789abcdefghijklmnopqrstuvwxyz"; - int i; - - if (type & LARGE) - digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - if (type & LEFT) - type &= ~ZEROPAD; - if (base < 2 || base > 36) - return 0; - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if (num < 0) { - sign = '-'; - num = -num; - size--; - } else if (type & PLUS) { - sign = '+'; - size--; - } else if (type & SPACE) { - sign = ' '; - size--; - } - } - if (type & SPECIAL) { - if (base == 16) - size -= 2; - else if (base == 8) - size--; - } - i = 0; - if (num == 0) - tmp[i++]='0'; - else while (num != 0) - tmp[i++] = digits[do_div(&num,base)]; - if (i > precision) - precision = i; - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - f += ' '; - if (sign) - f += sign; - if (type & SPECIAL) - { - if (base==8) - f += '0'; - else if (base==16) - { - f += '0'; - f += digits[33]; - } - } - if (!(type & LEFT)) - { - while (size-- > 0) - f += c; - } - while (i < precision--) - { - f += '0'; - } - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += ' '; - } - return true; -} - - -static bool numberf(std::string& f, double __n, char exp_sign, int size, int precision, int type) -{ - double exponent = 0.0; - double e; - long ie; - - //int x; - char *buf, *tmp; - int i = 0; - int j = 0; - //int k = 0; - - double frac, intr; - double p; - char sign; - char c; - char ro = 0; - int result; - - union - { - double* __n; - ieee_double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == 'g' || exp_sign == 'G' || exp_sign == 'e' || exp_sign == 'E' ) { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff); - exponent = ie/3.321928; - } - - if ( exp_sign == 'g' || exp_sign == 'G' ) { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - } - - if ( exp_sign == 'e' || exp_sign == 'E' ) { - frac = modf(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = numberf(f,__n/pow(10.0L,e),'f',size-4, precision, type); - if (result < 0) - return false; - f += exp_sign; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = number(f,ie, 10,2, 2,type ); - if (result < 0) - return false; - return true; - } - - if ( exp_sign == 'f' ) { - buf = (char*)alloca(4096); - if (type & LEFT) { - type &= ~ZEROPAD; - } - - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if (__n < 0) { - sign = '-'; - __n = fabs(__n); - size--; - } else if (type & PLUS) { - sign = '+'; - size--; - } else if (type & SPACE) { - sign = ' '; - size--; - } - } - - frac = modf(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - - if ( precision > 0 ) { - //frac = modfl(__n,&intr); - i = precision-1; - while ( i >= 0 ) { - frac*=10.0L; - frac = modf(frac, &p); - buf[i] = (int)p + '0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) { - ro = 1; - } - - if ( precision >= 1 || type & SPECIAL) { - buf[i++] = '.'; - size--; - } - } - - if ( intr == 0.0 ) { - buf[i++] = '0'; - size--; - } - else { - while ( intr > 0.0 ) { - p = intr; - intr/=10.0L; - modf(intr, &intr); - - p -= 10.0*intr; - - buf[i++] = (int)p + '0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1) { - if ( buf[j] >= '0' && buf[j] <= '8' ) { - buf[j]++; - ro = 0; - } - else if ( buf[j] == '9' ) { - buf[j] = '0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = '1'; - - buf[i] = 0; - - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += ' '; - } - if (sign) - { - f += sign; - } - - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - f += ' '; - } - if (type & SPECIAL) { - } - - if (!(type & LEFT)) - while (size-- > 0) - { - f += c; - } - - tmp = buf; - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) - { - j = 0; - while ( j < i && ( *tmp == '0' || *tmp == '.' )) - { - tmp++; - i--; - } - } -// else -// while (i < precision--) -// putc('0', f); - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += ' '; - } - } - return true; -} - - -static bool numberfl(std::string& f, long double __n, char exp_sign, int size, int precision, int type) -{ - long double exponent = 0.0; - long double e; - long ie; - - //int x; - char *buf, *tmp; - int i = 0; - int j = 0; - //int k = 0; - - long double frac, intr; - long double p; - char sign; - char c; - char ro = 0; - - int result; - - union - { - long double* __n; - ieee_long_double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == 'g' || exp_sign == 'G' || exp_sign == 'e' || exp_sign == 'E' ) { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3fff); - exponent = ie/3.321928; - } - - if ( exp_sign == 'g' || exp_sign == 'G' ) { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - } - - if ( exp_sign == 'e' || exp_sign == 'E' ) { - frac = modfl(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = numberf(f,__n/powl(10.0L,e),'f',size-4, precision, type); - if (result < 0) - return false; - f += exp_sign; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = number(f,ie, 10,2, 2,type ); - if (result < 0) - return false; - return true; - } - - if ( exp_sign == 'f' ) - { - - buf = (char*)alloca(4096); - if (type & LEFT) - { - type &= ~ZEROPAD; - } - - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) - { - if (__n < 0) - { - sign = '-'; - __n = fabs(__n); - size--; - } else if (type & PLUS) - { - sign = '+'; - size--; - } else if (type & SPACE) - { - sign = ' '; - size--; - } - } - - frac = modfl(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - if ( precision > 0 ) - { - //frac = modfl(__n,&intr); - - i = precision-1; - while ( i >= 0 ) - { - frac*=10.0L; - frac = modfl((long double)frac, &p); - buf[i] = (int)p + '0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) - { - ro = 1; - } - - if ( precision >= 1 || type & SPECIAL) - { - buf[i++] = '.'; - size--; - } - } - - if ( intr == 0.0 ) - { - buf[i++] = '0'; - size--; - } - else - { - while ( intr > 0.0 ) - { - p=intr; - intr/=10.0L; - modfl(intr, &intr); - - p -= 10.0L*intr; - - buf[i++] = (int)p + '0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1) { - if ( buf[j] >= '0' && buf[j] <= '8' ) - { - buf[j]++; - ro = 0; - } - else if ( buf[j] == '9' ) - { - buf[j] = '0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = '1'; - - buf[i] = 0; - - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += ' '; - } - if (sign) - { - f += sign; - } - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += ' '; - } - if (type & SPECIAL) { - } - - if (!(type & LEFT)) - while (size-- > 0) - { - f += c; - } - tmp = buf; - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) - { - j = 0; - while ( j < i && ( *tmp == '0' || *tmp == '.' )) - { - tmp++; - i--; - } - } -// else -// while (i < precision--) -// putc( '0', f); - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += ' '; - } - } - return true; -} - -static int stringa(std::string& f, const char* s, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (s == NULL) - { - s = ""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && s[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - f += ' '; - done++; - } - for (i = 0; i < len; ++i) - { - f += *s++; - done++; - } - while (len < field_width--) - { - f += ' '; - done++; - } - return done; -} - -static int stringw(std::string& f, const wchar_t* sw, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (sw == NULL) - { - sw = L""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && sw[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - f += ' '; - done++; - } - for (i = 0; i < len; ++i) - { -#define MY_MB_CUR_MAX 1 - char mb[MY_MB_CUR_MAX]; - int mbcount, j; - mbcount = wctomb(mb, *sw++); - if (mbcount <= 0) - { - break; - } - for (j = 0; j < mbcount; j++) - { - f += mb[j]; - done++; - } - } - while (len < field_width--) - { - f += ' '; - done++; - } - return done; -} - -#define _isnanl _isnan -#define _finitel _finite - -std::string ssvprintf ( const char *fmt, va_list args ) -{ - ULONGLONG num; - int base; - long double _ldouble; - double _double; - const char *s; - const wchar_t* sw; - int result; - std::string f; - - int flags; /* flags to number() */ - - int field_width; /* width of output field */ - int precision; /* min. # of digits for integers; max - number of chars for from string */ - int qualifier = 0; /* 'h', 'l', 'L' or 'I64' for integer fields */ - - for (; *fmt ; ++fmt) - { - if (*fmt != '%') - { - f += *fmt; - continue; - } - - /* process flags */ - flags = 0; - repeat: - ++fmt; /* this also skips first '%' */ - switch (*fmt) { - case '-': flags |= LEFT; goto repeat; - case '+': flags |= PLUS; goto repeat; - case ' ': flags |= SPACE; goto repeat; - case '#': flags |= SPECIAL; goto repeat; - case '0': flags |= ZEROPAD; goto repeat; - } - - /* get field width */ - field_width = -1; - if (isdigit(*fmt)) - field_width = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - field_width = va_arg(args, int); - if (field_width < 0) { - field_width = -field_width; - flags |= LEFT; - } - } - - /* get the precision */ - precision = -1; - if (*fmt == '.') { - ++fmt; - if (isdigit(*fmt)) - precision = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - precision = va_arg(args, int); - } - if (precision < 0) - precision = 0; - } - - /* get the conversion qualifier */ - qualifier = 0; - // %Z can be just stand alone or as size_t qualifier - if ( *fmt == 'Z' ) { - qualifier = *fmt; - switch ( *(fmt+1)) { - case 'o': - case 'b': - case 'X': - case 'x': - case 'd': - case 'i': - case 'u': - ++fmt; - break; - default: - break; - } - } else if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'w') { - qualifier = *fmt; - ++fmt; - } else if (*fmt == 'I' && *(fmt+1) == '6' && *(fmt+2) == '4') { - qualifier = *fmt; - fmt += 3; - } - - // go fine with ll instead of L - if ( *fmt == 'l' ) { - ++fmt; - qualifier = 'L'; - } - - /* default base */ - base = 10; - - switch (*fmt) { - case 'c': - if (!(flags & LEFT)) - while (--field_width > 0) - { - f += ' '; - } - if (qualifier == 'l' || qualifier == 'w') - { - f += (char)(unsigned char)(wchar_t) va_arg(args,int); - } - else - { - f += (char)(unsigned char) va_arg(args,int); - } - while (--field_width > 0) - { - f += ' '; - } - continue; - - case 'C': - if (!(flags & LEFT)) - while (--field_width > 0) - { - f += ' '; - } - if (qualifier == 'h') - { - f += (char)(unsigned char) va_arg(args,int); - } - else - { - f += (char)(unsigned char)(wchar_t) va_arg(args,int); - } - while (--field_width > 0) - { - f += ' '; - } - continue; - - case 's': - if (qualifier == 'l' || qualifier == 'w') { - /* print unicode string */ - sw = (const wchar_t*)va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } else { - /* print ascii string */ - s = va_arg(args, char *); - result = stringa(f, s, -1, field_width, precision, flags); - } - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - case 'S': - if (qualifier == 'h') { - /* print ascii string */ - s = va_arg(args, char *); - result = stringa(f, s, -1, field_width, precision, flags); - } else { - /* print unicode string */ - sw = (const wchar_t*)va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - /*case 'Z': - if (qualifier == 'w') { - // print counted unicode string - PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING); - if ((pus == NULL) || (pus->Buffer == NULL)) { - sw = NULL; - len = -1; - } else { - sw = pus->Buffer; - len = pus->Length / sizeof(WCHAR); - } - result = stringw(f, sw, len, field_width, precision, flags); - } else { - // print counted ascii string - PANSI_STRING pas = va_arg(args, PANSI_STRING); - if ((pas == NULL) || (pas->Buffer == NULL)) { - s = NULL; - len = -1; - } else { - s = pas->Buffer; - len = pas->Length; - } - result = stringa(f, s, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - continue;*/ - - case 'e': - case 'E': - case 'f': - case 'g': - case 'G': - if (qualifier == 'l' || qualifier == 'L' ) { - _ldouble = va_arg(args, long double); - - if ( _isnanl(_ldouble) ) - { - f += "Nan"; - } - else if ( !_finitel(_ldouble) ) - { - if ( _ldouble < 0 ) - f += "-Inf"; - else - f += "+Inf"; - } else { - if ( precision == -1 ) - precision = 6; - result = numberfl(f,_ldouble,*fmt,field_width,precision,flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - } else { - _double = (double)va_arg(args, double); - - if ( _isnan(_double) ) - { - f += "Nan"; - } - else if ( !_finite(_double) ) - { - if ( _double < 0 ) - f += "-Inf"; - else - f += "+Inf"; - } - else - { - if ( precision == -1 ) - precision = 6; - result = numberf(f,_double,*fmt,field_width,precision,flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - } - continue; - - case 'p': - if (field_width == -1) { - field_width = 2*sizeof(void *); - flags |= ZEROPAD; - } - result = number(f, - (unsigned long) va_arg(args, void *), 16, - field_width, precision, flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - case 'n': - if (qualifier == 'l') { - long * ip = va_arg(args, long *); - *ip = 0; - } else { - int * ip = va_arg(args, int *); - *ip = 0; - } - continue; - - /* integer number formats - set up the flags and "break" */ - case 'o': - base = 8; - break; - - case 'b': - base = 2; - break; - - case 'X': - flags |= LARGE; - case 'x': - base = 16; - break; - - case 'd': - case 'i': - flags |= SIGN; - case 'u': - break; - - default: - if (*fmt != '%') - { - f += '%'; - } - if (*fmt) - { - f += *fmt; - } - else - --fmt; - continue; - } - - if (qualifier == 'I') - num = va_arg(args, ULONGLONG); - else if (qualifier == 'l') { - if (flags & SIGN) - num = va_arg(args, long); - else - num = va_arg(args, unsigned long); - } - else if (qualifier == 'h') { - if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - } - else if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - result = number(f, num, base, field_width, precision, flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - //putc('\0',f); - return f; -} diff --git a/irc/ArchBlackmann/ssprintf.h b/irc/ArchBlackmann/ssprintf.h deleted file mode 100644 index aa04411a1e5..00000000000 --- a/irc/ArchBlackmann/ssprintf.h +++ /dev/null @@ -1,12 +0,0 @@ -// ssprintf.h - -#ifndef SSPRINTF_H -#define SSPRINTF_H - -#include -#include - -std::string ssprintf ( const char* fmt, ... ); -std::string ssvprintf ( const char* fmt, va_list args ); - -#endif//SSPRINTF_H diff --git a/irc/ArchBlackmann/status.txt b/irc/ArchBlackmann/status.txt deleted file mode 100644 index a883e41ad36..00000000000 --- a/irc/ArchBlackmann/status.txt +++ /dev/null @@ -1,654 +0,0 @@ -RPC_NT_ALREADY_LISTENING -RPC_NT_ALREADY_REGISTERED -RPC_NT_CALL_FAILED -RPC_NT_CALL_FAILED_DNE -RPC_NT_CANT_CREATE_ENDPOINT -RPC_NT_INVALID_BINDING -RPC_NT_INVALID_ENDPOINT_FORMAT -RPC_NT_INVALID_NETWORK_OPTIONS -RPC_NT_INVALID_NET_ADDR -RPC_NT_INVALID_RPC_PROTSEQ -RPC_NT_INVALID_STRING_BINDING -RPC_NT_INVALID_STRING_UUID -RPC_NT_INVALID_TIMEOUT -RPC_NT_NOT_LISTENING -RPC_NT_NO_BINDINGS -RPC_NT_NO_CALL_ACTIVE -RPC_NT_NO_ENDPOINT_FOUND -RPC_NT_NO_PROTSEQS -RPC_NT_NO_PROTSEQS_REGISTERED -RPC_NT_OBJECT_NOT_FOUND -RPC_NT_OUT_OF_RESOURCES -RPC_NT_PROTOCOL_ERROR -RPC_NT_PROTSEQ_NOT_SUPPORTED -RPC_NT_SERVER_TOO_BUSY -RPC_NT_SERVER_UNAVAILABLE -RPC_NT_SS_IN_NULL_CONTEXT -RPC_NT_TYPE_ALREADY_REGISTERED -RPC_NT_UNKNOWN_IF -RPC_NT_UNKNOWN_MGR_TYPE -RPC_NT_WRONG_KIND_OF_BINDING -STATUS_ABANDONED -STATUS_ABANDONED_WAIT_0 -STATUS_ABANDONED_WAIT_63 -STATUS_ABIOS_INVALID_COMMAND -STATUS_ABIOS_INVALID_LID -STATUS_ABIOS_INVALID_SELECTOR -STATUS_ABIOS_LID_ALREADY_OWNED -STATUS_ABIOS_LID_NOT_EXIST -STATUS_ABIOS_NOT_LID_OWNER -STATUS_ABIOS_NOT_PRESENT -STATUS_ABIOS_SELECTOR_NOT_AVAILABLE -STATUS_ACCESS_DENIED -STATUS_ACCESS_VIOLATION -STATUS_ACCOUNT_DISABLED -STATUS_ACCOUNT_EXPIRED -STATUS_ACCOUNT_LOCKED_OUT -STATUS_ACCOUNT_RESTRICTION -STATUS_ADAPTER_HARDWARE_ERROR -STATUS_ADDRESS_ALREADY_ASSOCIATED -STATUS_ADDRESS_ALREADY_EXISTS -STATUS_ADDRESS_CLOSED -STATUS_ADDRESS_NOT_ASSOCIATED -STATUS_AGENTS_EXHAUSTED -STATUS_ALERTED -STATUS_ALIAS_EXISTS -STATUS_ALLOCATE_BUCKET -STATUS_ALLOTTED_SPACE_EXCEEDED -STATUS_ALREADY_COMMITTED -STATUS_ALREADY_DISCONNECTED -STATUS_ALREADY_WIN32 -STATUS_APP_INIT_FAILURE -STATUS_ARBITRATION_UNHANDLED -STATUS_ARRAY_BOUNDS_EXCEEDED -STATUS_AUDIT_FAILED -STATUS_BACKUP_CONTROLLER -STATUS_BAD_COMPRESSION_BUFFER -STATUS_BAD_CURRENT_DIRECTORY -STATUS_BAD_DESCRIPTOR_FORMAT -STATUS_BAD_DEVICE_TYPE -STATUS_BAD_DLL_ENTRYPOINT -STATUS_BAD_FUNCTION_TABLE -STATUS_BAD_IMPERSONATION_LEVEL -STATUS_BAD_INHERITANCE_ACL -STATUS_BAD_INITIAL_PC -STATUS_BAD_INITIAL_STACK -STATUS_BAD_LOGON_SESSION_STATE -STATUS_BAD_MASTER_BOOT_RECORD -STATUS_BAD_NETWORK_NAME -STATUS_BAD_NETWORK_PATH -STATUS_BAD_REMOTE_ADAPTER -STATUS_BAD_SERVICE_ENTRYPOINT -STATUS_BAD_STACK -STATUS_BAD_TOKEN_TYPE -STATUS_BAD_VALIDATION_CLASS -STATUS_BAD_WORKING_SET_LIMIT -STATUS_BEGINNING_OF_MEDIA -STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT -STATUS_BREAKPOINT -STATUS_BUFFER_OVERFLOW -STATUS_BUFFER_TOO_SMALL -STATUS_BUS_RESET -STATUS_CANCELLED -STATUS_CANNOT_DELETE -STATUS_CANNOT_IMPERSONATE -STATUS_CANNOT_LOAD_REGISTRY_FILE -STATUS_CANT_ACCESS_DOMAIN_INFO -STATUS_CANT_DISABLE_MANDATORY -STATUS_CANT_OPEN_ANONYMOUS -STATUS_CANT_TERMINATE_SELF -STATUS_CANT_WAIT -STATUS_CARDBUS_NOT_SUPPORTED -STATUS_CHECKING_FILE_SYSTEM -STATUS_CHILD_MUST_BE_VOLATILE -STATUS_CLIENT_SERVER_PARAMETERS_INVALID -STATUS_COMMITMENT_LIMIT -STATUS_CONFLICTING_ADDRESSES -STATUS_CONNECTION_ABORTED -STATUS_CONNECTION_ACTIVE -STATUS_CONNECTION_COUNT_LIMIT -STATUS_CONNECTION_DISCONNECTED -STATUS_CONNECTION_INVALID -STATUS_CONNECTION_IN_USE -STATUS_CONNECTION_REFUSED -STATUS_CONNECTION_RESET -STATUS_CONTROL_C_EXIT -STATUS_CONVERT_TO_LARGE -STATUS_COULD_NOT_INTERPRET -STATUS_CRC_ERROR -STATUS_CTL_FILE_NOT_SUPPORTED -STATUS_DATATYPE_MISALIGNMENT -STATUS_DATA_ERROR -STATUS_DATA_LATE_ERROR -STATUS_DATA_NOT_ACCEPTED -STATUS_DATA_OVERRUN -STATUS_DEBUG_ATTACH_FAILED -STATUS_DELETE_PENDING -STATUS_DEVICE_ALREADY_ATTACHED -STATUS_DEVICE_BUSY -STATUS_DEVICE_CONFIGURATION_ERROR -STATUS_DEVICE_DATA_ERROR -STATUS_DEVICE_DOES_NOT_EXIST -STATUS_DEVICE_NOT_CONNECTED -STATUS_DEVICE_NOT_PARTITIONED -STATUS_DEVICE_NOT_READY -STATUS_DEVICE_OFF_LINE -STATUS_DEVICE_PAPER_EMPTY -STATUS_DEVICE_POWERED_OFF -STATUS_DEVICE_POWER_FAILURE -STATUS_DEVICE_PROTOCOL_ERROR -STATUS_DFS_EXIT_PATH_FOUND -STATUS_DFS_UNAVAILABLE -STATUS_DIRECTORY_NOT_EMPTY -STATUS_DISK_CORRUPT_ERROR -STATUS_DISK_FULL -STATUS_DISK_OPERATION_FAILED -STATUS_DISK_RECALIBRATE_FAILED -STATUS_DISK_RESET_FAILED -STATUS_DLL_INIT_FAILED -STATUS_DLL_INIT_FAILED_LOGOFF -STATUS_DLL_NOT_FOUND -STATUS_DOMAIN_CONTROLLER_NOT_FOUND -STATUS_DOMAIN_CTRLR_CONFIG_ERROR -STATUS_DOMAIN_EXISTS -STATUS_DOMAIN_LIMIT_EXCEEDED -STATUS_DOMAIN_TRUST_INCONSISTENT -STATUS_DRIVER_CANCEL_TIMEOUT -STATUS_DRIVER_ENTRYPOINT_NOT_FOUND -STATUS_DRIVER_INTERNAL_ERROR -STATUS_DRIVER_ORDINAL_NOT_FOUND -STATUS_DRIVER_UNABLE_TO_LOAD -STATUS_DUPLICATE_NAME -STATUS_DUPLICATE_OBJECTID -STATUS_EAS_NOT_SUPPORTED -STATUS_EA_CORRUPT_ERROR -STATUS_EA_LIST_INCONSISTENT -STATUS_EA_TOO_LARGE -STATUS_END_OF_FILE -STATUS_END_OF_MEDIA -STATUS_ENTRYPOINT_NOT_FOUND -STATUS_EOM_OVERFLOW -STATUS_EVALUATION_EXPIRATION -STATUS_EVENTLOG_CANT_START -STATUS_EVENTLOG_FILE_CHANGED -STATUS_EVENTLOG_FILE_CORRUPT -STATUS_EVENT_DONE -STATUS_EVENT_PENDING -STATUS_EXTRANEOUS_INFORMATION -STATUS_FAIL_CHECK -STATUS_FATAL_APP_EXIT -STATUS_FILEMARK_DETECTED -STATUS_FILES_OPEN -STATUS_FILE_CLOSED -STATUS_FILE_CORRUPT_ERROR -STATUS_FILE_DELETED -STATUS_FILE_FORCED_CLOSED -STATUS_FILE_INVALID -STATUS_FILE_IS_A_DIRECTORY -STATUS_FILE_IS_OFFLINE -STATUS_FILE_LOCK_CONFLICT -STATUS_FILE_RENAMED -STATUS_FLOAT_DENORMAL_OPERAND -STATUS_FLOAT_DIVIDE_BY_ZERO -STATUS_FLOAT_INEXACT_RESULT -STATUS_FLOAT_INVALID_OPERATION -STATUS_FLOAT_OVERFLOW -STATUS_FLOAT_STACK_CHECK -STATUS_FLOAT_UNDERFLOW -STATUS_FLOPPY_BAD_REGISTERS -STATUS_FLOPPY_ID_MARK_NOT_FOUND -STATUS_FLOPPY_UNKNOWN_ERROR -STATUS_FLOPPY_VOLUME -STATUS_FLOPPY_WRONG_CYLINDER -STATUS_FOUND_OUT_OF_SCOPE -STATUS_FREE_VM_NOT_AT_BASE -STATUS_FS_DRIVER_REQUIRED -STATUS_FT_MISSING_MEMBER -STATUS_FT_ORPHANING -STATUS_FT_READ_RECOVERING_FROM_BACKUP -STATUS_FT_WRITE_RECOVERY -STATUS_FULLSCREEN_MODE -STATUS_GENERIC_NOT_MAPPED -STATUS_GRACEFUL_DISCONNECT -STATUS_GROUP_EXISTS -STATUS_GUARD_PAGE_VIOLATION -STATUS_GUIDS_EXHAUSTED -STATUS_GUID_SUBSTITUTION_MADE -STATUS_HANDLES_CLOSED -STATUS_HANDLE_NOT_CLOSABLE -STATUS_HOST_UNREACHABLE -STATUS_ILLEGAL_CHARACTER -STATUS_ILLEGAL_DLL_RELOCATION -STATUS_ILLEGAL_FLOAT_CONTEXT -STATUS_ILLEGAL_FUNCTION -STATUS_ILLEGAL_INSTRUCTION -STATUS_ILL_FORMED_PASSWORD -STATUS_ILL_FORMED_SERVICE_ENTRY -STATUS_IMAGE_ALREADY_LOADED -STATUS_IMAGE_CHECKSUM_MISMATCH -STATUS_IMAGE_MACHINE_TYPE_MISMATCH -STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE -STATUS_IMAGE_MP_UP_MISMATCH -STATUS_IMAGE_NOT_AT_BASE -STATUS_INCOMPATIBLE_FILE_MAP -STATUS_INFO_LENGTH_MISMATCH -STATUS_INSTANCE_NOT_AVAILABLE -STATUS_INSTRUCTION_MISALIGNMENT -STATUS_INSUFFICIENT_LOGON_INFO -STATUS_INSUFFICIENT_RESOURCES -STATUS_INSUFF_SERVER_RESOURCES -STATUS_INTEGER_DIVIDE_BY_ZERO -STATUS_INTEGER_OVERFLOW -STATUS_INTERNAL_DB_CORRUPTION -STATUS_INTERNAL_DB_ERROR -STATUS_INTERNAL_ERROR -STATUS_INVALID_ACCOUNT_NAME -STATUS_INVALID_ACL -STATUS_INVALID_ADDRESS -STATUS_INVALID_ADDRESS_COMPONENT -STATUS_INVALID_ADDRESS_WILDCARD -STATUS_INVALID_BLOCK_LENGTH -STATUS_INVALID_BUFFER_SIZE -STATUS_INVALID_CID -STATUS_INVALID_COMPUTER_NAME -STATUS_INVALID_CONNECTION -STATUS_INVALID_DEVICE_REQUEST -STATUS_INVALID_DEVICE_STATE -STATUS_INVALID_DISPOSITION -STATUS_INVALID_DOMAIN_ROLE -STATUS_INVALID_DOMAIN_STATE -STATUS_INVALID_EA_FLAG -STATUS_INVALID_EA_NAME -STATUS_INVALID_FILE_FOR_SECTION -STATUS_INVALID_GROUP_ATTRIBUTES -STATUS_INVALID_HANDLE -STATUS_INVALID_HW_PROFILE -STATUS_INVALID_ID_AUTHORITY -STATUS_INVALID_IMAGE_FORMAT -STATUS_INVALID_IMAGE_LE_FORMAT -STATUS_INVALID_IMAGE_NE_FORMAT -STATUS_INVALID_IMAGE_NOT_MZ -STATUS_INVALID_IMAGE_PROTECT -STATUS_INVALID_IMAGE_WIN_16 -STATUS_INVALID_INFO_CLASS -STATUS_INVALID_LDT_DESCRIPTOR -STATUS_INVALID_LDT_OFFSET -STATUS_INVALID_LDT_SIZE -STATUS_INVALID_LEVEL -STATUS_INVALID_LOCK_SEQUENCE -STATUS_INVALID_LOGON_HOURS -STATUS_INVALID_LOGON_TYPE -STATUS_INVALID_MEMBER -STATUS_INVALID_NETWORK_RESPONSE -STATUS_INVALID_OPLOCK_PROTOCOL -STATUS_INVALID_OWNER -STATUS_INVALID_PAGE_PROTECTION -STATUS_INVALID_PARAMETER -STATUS_INVALID_PARAMETER_1 -STATUS_INVALID_PARAMETER_10 -STATUS_INVALID_PARAMETER_11 -STATUS_INVALID_PARAMETER_12 -STATUS_INVALID_PARAMETER_2 -STATUS_INVALID_PARAMETER_3 -STATUS_INVALID_PARAMETER_4 -STATUS_INVALID_PARAMETER_5 -STATUS_INVALID_PARAMETER_6 -STATUS_INVALID_PARAMETER_7 -STATUS_INVALID_PARAMETER_8 -STATUS_INVALID_PARAMETER_9 -STATUS_INVALID_PARAMETER_MIX -STATUS_INVALID_PIPE_STATE -STATUS_INVALID_PLUGPLAY_DEVICE_PATH -STATUS_INVALID_PORT_ATTRIBUTES -STATUS_INVALID_PORT_HANDLE -STATUS_INVALID_PRIMARY_GROUP -STATUS_INVALID_QUOTA_LOWER -STATUS_INVALID_READ_MODE -STATUS_INVALID_SECURITY_DESCR -STATUS_INVALID_SERVER_STATE -STATUS_INVALID_SID -STATUS_INVALID_SUB_AUTHORITY -STATUS_INVALID_SYSTEM_SERVICE -STATUS_INVALID_UNWIND_TARGET -STATUS_INVALID_USER_BUFFER -STATUS_INVALID_VARIANT -STATUS_INVALID_VIEW_SIZE -STATUS_INVALID_VLM_OPERATION -STATUS_INVALID_VOLUME_LABEL -STATUS_INVALID_WORKSTATION -STATUS_IN_PAGE_ERROR -STATUS_IO_DEVICE_ERROR -STATUS_IO_PRIVILEGE_FAILED -STATUS_IO_REPARSE_DATA_INVALID -STATUS_IO_REPARSE_TAG_INVALID -STATUS_IO_REPARSE_TAG_MISMATCH -STATUS_IO_REPARSE_TAG_NOT_HANDLED -STATUS_IO_TIMEOUT -STATUS_IP_ADDRESS_CONFLICT1 -STATUS_IP_ADDRESS_CONFLICT2 -STATUS_KERNEL_APC -STATUS_KEY_DELETED -STATUS_KEY_HAS_CHILDREN -STATUS_LAST_ADMIN -STATUS_LICENSE_QUOTA_EXCEEDED -STATUS_LICENSE_VIOLATION -STATUS_LINK_FAILED -STATUS_LINK_TIMEOUT -STATUS_LM_CROSS_ENCRYPTION_REQUIRED -STATUS_LOCAL_DISCONNECT -STATUS_LOCAL_USER_SESSION_KEY -STATUS_LOCK_NOT_GRANTED -STATUS_LOGIN_TIME_RESTRICTION -STATUS_LOGIN_WKSTA_RESTRICTION -STATUS_LOGON_FAILURE -STATUS_LOGON_NOT_GRANTED -STATUS_LOGON_SERVER_CONFLICT -STATUS_LOGON_SESSION_COLLISION -STATUS_LOGON_SESSION_EXISTS -STATUS_LOGON_TYPE_NOT_GRANTED -STATUS_LOG_FILE_FULL -STATUS_LOG_HARD_ERROR -STATUS_LONGJUMP -STATUS_LOST_WRITEBEHIND_DATA -STATUS_LPC_REPLY_LOST -STATUS_LUIDS_EXHAUSTED -STATUS_MAPPED_ALIGNMENT -STATUS_MAPPED_FILE_SIZE_ZERO -STATUS_MARSHALL_OVERFLOW -STATUS_MEDIA_CHANGED -STATUS_MEDIA_CHECK -STATUS_MEDIA_WRITE_PROTECTED -STATUS_MEMBERS_PRIMARY_GROUP -STATUS_MEMBER_IN_ALIAS -STATUS_MEMBER_IN_GROUP -STATUS_MEMBER_NOT_IN_ALIAS -STATUS_MEMBER_NOT_IN_GROUP -STATUS_MEMORY_NOT_ALLOCATED -STATUS_MESSAGE_NOT_FOUND -STATUS_MISSING_SYSTEMFILE -STATUS_MORE_ENTRIES -STATUS_MORE_PROCESSING_REQUIRED -STATUS_MUTANT_LIMIT_EXCEEDED -STATUS_MUTANT_NOT_OWNED -STATUS_NAME_TOO_LONG -STATUS_NETLOGON_NOT_STARTED -STATUS_NETWORK_ACCESS_DENIED -STATUS_NETWORK_BUSY -STATUS_NETWORK_CREDENTIAL_CONFLICT -STATUS_NETWORK_NAME_DELETED -STATUS_NETWORK_UNREACHABLE -STATUS_NET_WRITE_FAULT -STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT -STATUS_NOLOGON_SERVER_TRUST_ACCOUNT -STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT -STATUS_NONCONTINUABLE_EXCEPTION -STATUS_NONEXISTENT_EA_ENTRY -STATUS_NONEXISTENT_SECTOR -STATUS_NONE_MAPPED -STATUS_NOTIFY_CLEANUP -STATUS_NOTIFY_ENUM_DIR -STATUS_NOT_ALL_ASSIGNED -STATUS_NOT_A_DIRECTORY -STATUS_NOT_A_REPARSE_POINT -STATUS_NOT_CLIENT_SESSION -STATUS_NOT_COMMITTED -STATUS_NOT_FOUND -STATUS_NOT_IMPLEMENTED -STATUS_NOT_LOCKED -STATUS_NOT_LOGON_PROCESS -STATUS_NOT_MAPPED_DATA -STATUS_NOT_MAPPED_VIEW -STATUS_NOT_REGISTRY_FILE -STATUS_NOT_SAME_DEVICE -STATUS_NOT_SERVER_SESSION -STATUS_NOT_SUPPORTED -STATUS_NOT_TINY_STREAM -STATUS_NO_BROWSER_SERVERS_FOUND -STATUS_NO_CALLBACK_ACTIVE -STATUS_NO_DATA_DETECTED -STATUS_NO_EAS_ON_FILE -STATUS_NO_EVENT_PAIR -STATUS_NO_GUID_TRANSLATION -STATUS_NO_IMPERSONATION_TOKEN -STATUS_NO_INHERITANCE -STATUS_NO_LDT -STATUS_NO_LOGON_SERVERS -STATUS_NO_LOG_SPACE -STATUS_NO_MATCH -STATUS_NO_MEDIA -STATUS_NO_MEDIA_IN_DEVICE -STATUS_NO_MEMORY -STATUS_NO_MORE_EAS -STATUS_NO_MORE_ENTRIES -STATUS_NO_MORE_FILES -STATUS_NO_MORE_MATCHES -STATUS_NO_PAGEFILE -STATUS_NO_QUOTAS_NO_ACCOUNT -STATUS_NO_SECURITY_ON_OBJECT -STATUS_NO_SPOOL_SPACE -STATUS_NO_SUCH_ALIAS -STATUS_NO_SUCH_DEVICE -STATUS_NO_SUCH_DOMAIN -STATUS_NO_SUCH_FILE -STATUS_NO_SUCH_GROUP -STATUS_NO_SUCH_LOGON_SESSION -STATUS_NO_SUCH_MEMBER -STATUS_NO_SUCH_PACKAGE -STATUS_NO_SUCH_PRIVILEGE -STATUS_NO_SUCH_USER -STATUS_NO_TOKEN -STATUS_NO_TRUST_LSA_SECRET -STATUS_NO_TRUST_SAM_ACCOUNT -STATUS_NO_USER_SESSION_KEY -STATUS_NO_YIELD_PERFORMED -STATUS_NT_CROSS_ENCRYPTION_REQUIRED -STATUS_NULL_LM_PASSWORD -STATUS_OBJECTID_EXISTS -STATUS_OBJECT_EXISTS -STATUS_OBJECT_NAME_COLLISION -STATUS_OBJECT_NAME_EXISTS -STATUS_OBJECT_NAME_INVALID -STATUS_OBJECT_NAME_NOT_FOUND -STATUS_OBJECT_PATH_INVALID -STATUS_OBJECT_PATH_NOT_FOUND -STATUS_OBJECT_PATH_SYNTAX_BAD -STATUS_OBJECT_TYPE_MISMATCH -STATUS_OPEN_FAILED -STATUS_OPLOCK_BREAK_IN_PROCESS -STATUS_OPLOCK_NOT_GRANTED -STATUS_ORDINAL_NOT_FOUND -STATUS_PAGEFILE_CREATE_FAILED -STATUS_PAGEFILE_QUOTA -STATUS_PAGEFILE_QUOTA_EXCEEDED -STATUS_PARITY_ERROR -STATUS_PARTIAL_COPY -STATUS_PARTITION_FAILURE -STATUS_PASSWORD_EXPIRED -STATUS_PASSWORD_MUST_CHANGE -STATUS_PASSWORD_RESTRICTION -STATUS_PATH_NOT_COVERED -STATUS_PENDING -STATUS_PIPE_BROKEN -STATUS_PIPE_BUSY -STATUS_PIPE_CLOSING -STATUS_PIPE_CONNECTED -STATUS_PIPE_DISCONNECTED -STATUS_PIPE_EMPTY -STATUS_PIPE_LISTENING -STATUS_PIPE_NOT_AVAILABLE -STATUS_PLUGPLAY_NO_DEVICE -STATUS_PORT_ALREADY_SET -STATUS_PORT_CONNECTION_REFUSED -STATUS_PORT_DISCONNECTED -STATUS_PORT_MESSAGE_TOO_LONG -STATUS_PORT_UNREACHABLE -STATUS_POSSIBLE_DEADLOCK -STATUS_PREDEFINED_HANDLE -STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED -STATUS_PRINT_CANCELLED -STATUS_PRINT_QUEUE_FULL -STATUS_PRIVILEGED_INSTRUCTION -STATUS_PRIVILEGE_NOT_HELD -STATUS_PROCEDURE_NOT_FOUND -STATUS_PROCESS_IN_JOB -STATUS_PROCESS_IS_TERMINATING -STATUS_PROCESS_NOT_IN_JOB -STATUS_PROFILING_AT_LIMIT -STATUS_PROFILING_NOT_STARTED -STATUS_PROFILING_NOT_STOPPED -STATUS_PROPSET_NOT_FOUND -STATUS_PROTOCOL_UNREACHABLE -STATUS_PWD_HISTORY_CONFLICT -STATUS_PWD_TOO_RECENT -STATUS_PWD_TOO_SHORT -STATUS_QUOTA_EXCEEDED -STATUS_QUOTA_LIST_INCONSISTENT -STATUS_RANGE_LIST_CONFLICT -STATUS_RANGE_NOT_FOUND -STATUS_RANGE_NOT_LOCKED -STATUS_RECEIVE_EXPEDITED -STATUS_RECEIVE_PARTIAL -STATUS_RECEIVE_PARTIAL_EXPEDITED -STATUS_RECOVERY_FAILURE -STATUS_REDIRECTOR_HAS_OPEN_HANDLES -STATUS_REDIRECTOR_NOT_STARTED -STATUS_REDIRECTOR_PAUSED -STATUS_REDIRECTOR_STARTED -STATUS_REGISTRY_CORRUPT -STATUS_REGISTRY_IO_FAILED -STATUS_REGISTRY_QUOTA_LIMIT -STATUS_REGISTRY_RECOVERED -STATUS_REMOTE_DISCONNECT -STATUS_REMOTE_NOT_LISTENING -STATUS_REMOTE_RESOURCES -STATUS_REMOTE_SESSION_LIMIT -STATUS_REPARSE -STATUS_REPLY_MESSAGE_MISMATCH -STATUS_REQUEST_ABORTED -STATUS_REQUEST_NOT_ACCEPTED -STATUS_RESOURCE_DATA_NOT_FOUND -STATUS_RESOURCE_LANG_NOT_FOUND -STATUS_RESOURCE_NAME_NOT_FOUND -STATUS_RESOURCE_NOT_OWNED -STATUS_RESOURCE_TYPE_NOT_FOUND -STATUS_RETRY -STATUS_REVISION_MISMATCH -STATUS_RXACT_COMMITTED -STATUS_RXACT_COMMIT_FAILURE -STATUS_RXACT_COMMIT_NECESSARY -STATUS_RXACT_INVALID_STATE -STATUS_RXACT_STATE_CREATED -STATUS_SAM_INIT_FAILURE -STATUS_SECRET_TOO_LONG -STATUS_SECTION_NOT_EXTENDED -STATUS_SECTION_NOT_IMAGE -STATUS_SECTION_PROTECTION -STATUS_SECTION_TOO_BIG -STATUS_SEGMENT_NOTIFICATION -STATUS_SEMAPHORE_LIMIT_EXCEEDED -STATUS_SERIAL_COUNTER_TIMEOUT -STATUS_SERIAL_MORE_WRITES -STATUS_SERIAL_NO_DEVICE_INITED -STATUS_SERVER_DISABLED -STATUS_SERVER_HAS_OPEN_HANDLES -STATUS_SERVER_NOT_DISABLED -STATUS_SERVICE_NOTIFICATION -STATUS_SETMARK_DETECTED -STATUS_SHARED_IRQ_BUSY -STATUS_SHARING_PAUSED -STATUS_SHARING_VIOLATION -STATUS_SINGLE_STEP -STATUS_SOME_NOT_MAPPED -STATUS_SPECIAL_ACCOUNT -STATUS_SPECIAL_GROUP -STATUS_SPECIAL_USER -STATUS_STACK_OVERFLOW -STATUS_STACK_OVERFLOW_READ -STATUS_SUCCESS -STATUS_SUSPEND_COUNT_EXCEEDED -STATUS_SYNCHRONIZATION_REQUIRED -STATUS_SYSTEM_PROCESS_TERMINATED -STATUS_THREAD_IS_TERMINATING -STATUS_THREAD_NOT_IN_PROCESS -STATUS_THREAD_WAS_SUSPENDED -STATUS_TIMEOUT -STATUS_TIMER_NOT_CANCELED -STATUS_TIMER_RESOLUTION_NOT_SET -STATUS_TIMER_RESUME_IGNORED -STATUS_TIME_DIFFERENCE_AT_DC -STATUS_TOKEN_ALREADY_IN_USE -STATUS_TOO_LATE -STATUS_TOO_MANY_ADDRESSES -STATUS_TOO_MANY_COMMANDS -STATUS_TOO_MANY_CONTEXT_IDS -STATUS_TOO_MANY_GUIDS_REQUESTED -STATUS_TOO_MANY_LINKS -STATUS_TOO_MANY_LUIDS_REQUESTED -STATUS_TOO_MANY_NAMES -STATUS_TOO_MANY_NODES -STATUS_TOO_MANY_OPENED_FILES -STATUS_TOO_MANY_PAGING_FILES -STATUS_TOO_MANY_SECRETS -STATUS_TOO_MANY_SESSIONS -STATUS_TOO_MANY_SIDS -STATUS_TOO_MANY_THREADS -STATUS_TRANSACTION_ABORTED -STATUS_TRANSACTION_INVALID_ID -STATUS_TRANSACTION_INVALID_TYPE -STATUS_TRANSACTION_NO_MATCH -STATUS_TRANSACTION_NO_RELEASE -STATUS_TRANSACTION_RESPONDED -STATUS_TRANSACTION_TIMED_OUT -STATUS_TRUSTED_DOMAIN_FAILURE -STATUS_TRUSTED_RELATIONSHIP_FAILURE -STATUS_TRUST_FAILURE -STATUS_UNABLE_TO_DECOMMIT_VM -STATUS_UNABLE_TO_DELETE_SECTION -STATUS_UNABLE_TO_FREE_VM -STATUS_UNABLE_TO_LOCK_MEDIA -STATUS_UNABLE_TO_UNLOAD_MEDIA -STATUS_UNDEFINED_CHARACTER -STATUS_UNEXPECTED_IO_ERROR -STATUS_UNEXPECTED_MM_CREATE_ERR -STATUS_UNEXPECTED_MM_EXTEND_ERR -STATUS_UNEXPECTED_MM_MAP_ERROR -STATUS_UNEXPECTED_NETWORK_ERROR -STATUS_UNHANDLED_EXCEPTION -STATUS_UNKNOWN_REVISION -STATUS_UNMAPPABLE_CHARACTER -STATUS_UNRECOGNIZED_MEDIA -STATUS_UNRECOGNIZED_VOLUME -STATUS_UNSUCCESSFUL -STATUS_UNSUPPORTED_COMPRESSION -STATUS_UNWIND -STATUS_USER_APC -STATUS_USER_EXISTS -STATUS_USER_MAPPED_FILE -STATUS_USER_SESSION_DELETED -STATUS_VALIDATE_CONTINUE -STATUS_VARIABLE_NOT_FOUND -STATUS_VDM_HARD_ERROR -STATUS_VERIFY_REQUIRED -STATUS_VIRTUAL_CIRCUIT_CLOSED -STATUS_VOLUME_DISMOUNTED -STATUS_VOLUME_MOUNTED -STATUS_WAIT_0 -STATUS_WAIT_63 -STATUS_WAKE_SYSTEM_DEBUGGER -STATUS_WAS_LOCKED -STATUS_WAS_UNLOCKED -STATUS_WORKING_SET_LIMIT_RANGE -STATUS_WORKING_SET_QUOTA -STATUS_WRONG_PASSWORD -STATUS_WRONG_PASSWORD_CORE -STATUS_WRONG_VOLUME -STATUS_WX86_BREAKPOINT -STATUS_WX86_CONTINUE -STATUS_WX86_CREATEWX86TIB -STATUS_WX86_EXCEPTION_CHAIN -STATUS_WX86_EXCEPTION_CONTINUE -STATUS_WX86_EXCEPTION_LASTCHANCE -STATUS_WX86_FLOAT_STACK_CHECK -STATUS_WX86_INTERNAL_ERROR -STATUS_WX86_SINGLE_STEP -STATUS_WX86_UNSIMULATE \ No newline at end of file diff --git a/irc/ArchBlackmann/stru.txt b/irc/ArchBlackmann/stru.txt deleted file mode 100644 index e3a9ccd728d..00000000000 --- a/irc/ArchBlackmann/stru.txt +++ /dev/null @@ -1,7 +0,0 @@ -FAST_MUTEX -KPCR -PEB -TEB -SPINLOCK -APC -DPC diff --git a/irc/ArchBlackmann/tech.txt b/irc/ArchBlackmann/tech.txt deleted file mode 100644 index b95f426dcc9..00000000000 --- a/irc/ArchBlackmann/tech.txt +++ /dev/null @@ -1,73 +0,0 @@ -What do you think I am, your personal tech support? -You *know* a %stru% is non-re-entrant, right? -The answer to that is so simple, I'm not going to waste my time telling you. -Well, of course... if you're not below DISPATCH_LEVEL, ros is gonna explode on ya when you try to do that ( duh! ). -I don't think that functionality has been implemented, yet. -What do you mean it crashed? It can't crash there! -Wow. That's a new one. -Ask %dev%, I bet he knows.. he knows everything... -When's the last time you rebuilt? -Have you tried a make clean? -Is it plugged in? -Well it works on *my* system :P -Well don't do that, and you won't have that problem. -Didn't we already fix that? -Well... I don't know.. I just have that code disabled in my tree. -Try surrounding it with parenthesis. -Don't you know going around dereferncing null pointers all day can be hazardous to your health? -Well, duh! -There's a bit in cr3 for problems like that. -Just add a field to the %stru% to keep track of it! -Don't worry about it... the garbage collector in %module% will clean it up for you. -Did I do that? -Didn't %dev% fix that already? -Yes, I think I've seen that bug before... no... that was another program. -I could tell you, but then I'd have to unlink() you. -Well if you'd get some sleep, maybe you'd figure it out... not all of us can keep the hours %dev% can... -You did what? Uh oh... that can't be good. -Well... I could tell you, but the answer's pretty complicated. Why don't you wait to read about it in the book I'm writing. -Yeah, that's happened to me, before, too. All you have to do is wrap it in an SEH block and forget about it. -Just put a NULL dereference in there and commit it. It helps get bugs fixed fast! (Not that I would know) -ASSERT is your friend! -I dunno.. but I bet %dev% could find it for you. -I hereby declare that code is perfect. Your problem must be elsewhere. -I wrote that code... it must be perfect. -$#@!$ One of these days I'm gonna throw %module% out the window!!! Sorry, what were you saying? -maybe I broke it in my last commit. Maybe I did it on purpose... -Have you tried debugging it? I got a can of Raid... -Just delete it, it can't be that important ( You should see all the useless cruft I got rid of in %module% ) -Try queueing a work item... -My %stru% fell in love with some %stru% in %module%, and %module% has been hell since... -Maybe the PEB is getting corrupted. Try allocating a new PEB and overwriting the old one. That's what I did last time I had a bug like that. -Hmm.. that seems to have been introduced by my last commit... I bet CVS mixed up the bits during the commit. -It can't possibly be my fault, so I don't care. -I'm not experiencing that problem, perhaps it's all in your mind. -Well... like a good friend of mine said... "Don't Panic!" -It just shows you how far ReactOS has come along! A %period% ago a bug like that wouldn't have even been possible! -Just surround the code with an #if 0/#endif block, it solves all my problems! -You know.. if %dev% would just finish %module% for us, we wouldn't be having this problem. -I say we move on to the next function, since we can't seem to figure this one out. -Well, sure, that would have been my first guess, too.... TEN YEARS AGO :p -yup, that sounds like a problem. -If I wanted to talk about VB, I'd go bug Alex... -ask %dev% -Thank you for that amazingly keen insight, Commander Obvious. -Sorry, can't help you right now, trying to track down this bug %dev% caused in %module% -I dont know about that, but I just fixed a problem in %module% for %dev% -How should I know? I'm still trying to figure out this main() thing... ooh! wanna see what I did in %module%? -lol! -*wink* -;) -42 -It's gonna take me over %period% to fix all %dev%'s bugs in %module% :( -How could %func% return %status%!? It bet %dev% broke it! I didn't touch it... honest! no.. really! (me hides) -It's fine if you get %status% there ... just ignore the destruction, and call %func% instead. -%dev% said %status% isn't really an error in this context because we expect %module% to be toast by now -heh, I'm still trying to figure out why %func% is returning %status% when I call it from %module%... -%dev% said it's okay to ignore that as long as you're below %irql% -erm, what do you mean? -damn, I do that all the time -if you want a reply that sounds right, I'd say that %func% support for that is vital to the future of %module% -Sounds like you're having a problem with %func%. I hate that thing... don't talk to me about it. -Just return %status% and forget about it. Someone else will fix it, later. -Blah blah blah... sheesh... can't you figure out *anything*? \ No newline at end of file diff --git a/irc/ArchBlackmann/trim.cpp b/irc/ArchBlackmann/trim.cpp deleted file mode 100644 index c721f25dded..00000000000 --- a/irc/ArchBlackmann/trim.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// trim.cpp -// This file is (C) 2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#include "trim.h" - -std::string trim ( const std::string& s ) -{ - const char* p = &s[0]; - const char* p2 = p + s.size(); - while ( *p == ' ' ) - p++; - while ( p2 > p && p2[-1] == ' ' ) - p2--; - return std::string ( p, p2-p ); -} - diff --git a/irc/ArchBlackmann/trim.h b/irc/ArchBlackmann/trim.h deleted file mode 100644 index 4f2ba721f4b..00000000000 --- a/irc/ArchBlackmann/trim.h +++ /dev/null @@ -1,13 +0,0 @@ -// trim.h -// This file is (C) 2004 Royce Mitchell III -// and released under the BSD & LGPL licenses - -#ifndef TRIM_H -#define TRIM_H - -#include - -std::string trim ( const std::string& s ); - -#endif//TRIM_H - diff --git a/irc/ArchBlackmann/type.txt b/irc/ArchBlackmann/type.txt deleted file mode 100644 index 2e10f9f9882..00000000000 --- a/irc/ArchBlackmann/type.txt +++ /dev/null @@ -1,1000 +0,0 @@ -ACCESS_MASK -ACCESS_STATE -APC_LEVEL -ARBITER_ACTION -ARBITER_ACTION -ARBITER_CONFLICT_INFO -ARBITER_FLAG_BOOT_CONFIG -ARBITER_INTERFACE -ARBITER_LIST_ENTRY -ARBITER_PARAMETERS -ARBITER_PARTIAL -ARBITER_REQUEST_SOURCE -ARBITER_RESULT -AT_EXTENDABLE_FILE -AT_RESERVED -AT_ROUND_TO_PAGE -BOOTDISK_INFORMATION -BOOTDISK_INFORMATION_EX -BUS_INTERFACE_STANDARD -BUS_QUERY_ID_TYPE -BaseAddresses[PCI_TYPE0_ADDRESSES] -BaseAddresses[PCI_TYPE1_ADDRESSES] -CLIENT_ID -CLOCK1_LEVEL -CLOCK2_LEVEL -CM_EISA_FUNCTION_INFORMATION -CM_EISA_FUNCTION_INFORMATION.FunctionFlags -CM_EISA_SLOT_INFORMATION -CM_EISA_SLOT_INFORMATION.ReturnCode -CM_FLOPPY_DEVICE_DATA -CM_FULL_RESOURCE_DESCRIPTOR -CM_INT13_DRIVE_PARAMETER -CM_KEYBOARD_DEVICE_DATA -CM_MCA_POS_DATA -CM_PARTIAL_RESOURCE_DESCRIPTOR -CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags -CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition -CM_PARTIAL_RESOURCE_DESCRIPTOR.Type -CM_PARTIAL_RESOURCE_LIST -CM_POWER_DATA -CM_RESOURCE_DMA_16 -CM_RESOURCE_DMA_32 -CM_RESOURCE_DMA_8 -CM_RESOURCE_DMA_8_AND_16 -CM_RESOURCE_DMA_BUS_MASTER -CM_RESOURCE_DMA_TYPE_A -CM_RESOURCE_DMA_TYPE_B -CM_RESOURCE_DMA_TYPE_F -CM_RESOURCE_INTERRUPT_LATCHED -CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE -CM_RESOURCE_LIST -CM_RESOURCE_MEMORY_24 -CM_RESOURCE_MEMORY_CACHEABLE -CM_RESOURCE_MEMORY_COMBINEDWRITE -CM_RESOURCE_MEMORY_PREFETCHABLE -CM_RESOURCE_MEMORY_READ_ONLY -CM_RESOURCE_MEMORY_READ_WRITE -CM_RESOURCE_MEMORY_WRITE_ONLY -CM_RESOURCE_PORT_10_BIT_DECODE -CM_RESOURCE_PORT_12_BIT_DECODE -CM_RESOURCE_PORT_16_BIT_DECODE -CM_RESOURCE_PORT_IO -CM_RESOURCE_PORT_MEMORY -CM_RESOURCE_PORT_PASSIVE_DECODE -CM_RESOURCE_PORT_POSITIVE_DECODE -CM_RESOURCE_PORT_WINDOW_DECODE -CM_SCSI_DEVICE_DATA -CM_SERIAL_DEVICE_DATA -CM_SHARE_DISPOSITION -CONFIGURATION_INFORMATION -CONFIGURATION_TYPE -CONFIGURATION_TYPE -CONTAINING_RECORD -CONTROLLER_OBJECT -CREATE_DISK -CREATE_DISK_GPT -CREATE_DISK_MBR -CREATE_FILE_TYPE -CREATE_FILE_TYPE -DBG_STATUS_BUGCHECK_FIRST -DBG_STATUS_BUGCHECK_SECOND -DBG_STATUS_CONTROL_C -DBG_STATUS_DEBUG_CONTROL -DBG_STATUS_FATAL -DBG_STATUS_SYSRQ -DBG_STATUS_WORKER -DEVICE_CAPABILITIES -DEVICE_DESCRIPTION -DEVICE_DESCRIPTION.Version -DEVICE_DESCRIPTION_VERSION -DEVICE_DESCRIPTION_VERSION1 -DEVICE_DESCRIPTION_VERSION2 -DEVICE_INTERFACE_CHANGE_NOTIFICATION -DEVICE_OBJECT -DEVICE_OBJECT.AlignmentRequirement -DEVICE_OBJECT.Characteristics -DEVICE_OBJECT.DeviceType -DEVICE_OBJECT.Flags -DEVICE_POWER_STATE -DEVICE_REGISTRY_PROPERTY -DEVICE_REGISTRY_PROPERTY -DEVICE_RELATIONS -DEVICE_RELATION_TYPE -DEVICE_RELATION_TYPE -DEVICE_TEXT_TYPE -DEVICE_TYPE -DEVICE_USAGE_NOTIFICATION_TYPE -DIRECTORY_ALL_ACCESS -DIRECTORY_CREATE_OBJECT -DIRECTORY_CREATE_SUBDIRECTORY -DIRECTORY_QUERY -DIRECTORY_TRAVERSE -DISK_SIGNATURE -DISPATCHER_HEADER -DISPATCH_LEVEL -DMA_ADAPTER -DMA_CONFIGURATION_BYTE0 -DMA_CONFIGURATION_BYTE1 -DMA_OPERATIONS -DMA_SPEED -DMA_WIDTH -DO_BUFFERED_IO -DO_BUS_ENUMERATED_DEVICE -DO_DEVICE_HAS_NAME -DO_DEVICE_INITIALIZING -DO_DIRECT_IO -DO_EXCLUSIVE -DO_LONG_TERM_REQUESTS -DO_LOW_PRIORITY_FILESYSTEM -DO_MAP_IO_BUFFER -DO_NEVER_LAST_DEVICE -DO_POWER_INRUSH -DO_POWER_PAGABLE -DO_SHUTDOWN_REGISTERED -DO_SYSTEM_BOOT_PARTITION -DO_VERIFY_VOLUME -DRIVER_EXTENSION -DRIVER_OBJECT -DRIVER_VERIFIER_FORCE_IRQL_CHECKING -DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES -DRIVER_VERIFIER_IO_CHECKING -DRIVER_VERIFIER_SPECIAL_POOLING -DRIVER_VERIFIER_THUNK_PAIRS -DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS -DRIVE_LAYOUT_INFORMATION_GPT -DRIVE_LAYOUT_INFORMATION_MBR -DUPLICATE_CLOSE_SOURCE -DUPLICATE_SAME_ACCESS -DUPLICATE_SAME_ATTRIBUTES -EFLAG_SELECT -EFLAG_SIGN -EFLAG_ZERO -EISA_DMA_CONFIGURATION -EISA_EMPTY_SLOT -EISA_FREE_FORM_DATA -EISA_FUNCTION_ENABLED -EISA_HAS_DMA_ENTRY -EISA_HAS_INFORMATION -EISA_HAS_IRQ_ENTRY -EISA_HAS_MEMORY_ENTRY -EISA_HAS_PORT_INIT_ENTRY -EISA_HAS_PORT_RANGE -EISA_HAS_TYPE_ENTRY -EISA_INVALID_BIOS_CALL -EISA_INVALID_CONFIGURATION -EISA_INVALID_FUNCTION -EISA_INVALID_SLOT -EISA_IRQ_CONFIGURATION -EISA_IRQ_DESCRIPTOR -EISA_MEMORY_CONFIGURATION -EISA_MEMORY_TYPE -EISA_PORT_CONFIGURATION -EISA_PORT_DESCRIPTOR -ERESOURCE_THREAD -ES_CONTINUOUS -ES_DISPLAY_REQUIRED -ES_SYSTEM_REQUIRED -ES_USER_PRESENT -EVENT_INCREMENT -EVENT_TYPE -EVENT_TYPE -EXECUTION_STATE -EX_POOL_PRIORITY -EX_POOL_PRIORITY -FAST_IO_DISPATCH -FAST_MUTEX -FIELD_OFFSET -FILE_128_BYTE_ALIGNMENT -FILE_256_BYTE_ALIGNMENT -FILE_32_BYTE_ALIGNMENT -FILE_512_BYTE_ALIGNMENT -FILE_64_BYTE_ALIGNMENT -FILE_ADD_FILE -FILE_ADD_SUBDIRECTORY -FILE_ALIGNMENT_INFORMATION -FILE_ALL_ACCESS -FILE_ANY_ACCESS -FILE_APPEND_DATA -FILE_ATTRIBUTE_ARCHIVE -FILE_ATTRIBUTE_COMPRESSED -FILE_ATTRIBUTE_DEVICE -FILE_ATTRIBUTE_DIRECTORY -FILE_ATTRIBUTE_ENCRYPTED -FILE_ATTRIBUTE_HIDDEN -FILE_ATTRIBUTE_NORMAL -FILE_ATTRIBUTE_NOT_CONTENT_INDEXED -FILE_ATTRIBUTE_OFFLINE -FILE_ATTRIBUTE_READONLY -FILE_ATTRIBUTE_REPARSE_POINT -FILE_ATTRIBUTE_SPARSE_FILE -FILE_ATTRIBUTE_SYSTEM -FILE_ATTRIBUTE_TAG_INFORMATION -FILE_ATTRIBUTE_TEMPORARY -FILE_ATTRIBUTE_VALID_FLAGS -FILE_ATTRIBUTE_VALID_SET_FLAGS -FILE_AUTOGENERATED_DEVICE_NAME -FILE_BASIC_INFORMATION -FILE_BYTE_ALIGNMENT -FILE_COMPLETE_IF_OPLOCKED -FILE_COPY_STRUCTURED_STORAGE -FILE_CREATE -FILE_CREATED -FILE_CREATE_PIPE_INSTANCE -FILE_CREATE_TREE_CONNECTION -FILE_DELETE_CHILD -FILE_DELETE_ON_CLOSE -FILE_DEVICE_8042_PORT -FILE_DEVICE_ACPI -FILE_DEVICE_BATTERY -FILE_DEVICE_BEEP -FILE_DEVICE_BUS_EXTENDER -FILE_DEVICE_CD_ROM -FILE_DEVICE_CD_ROM_FILE_SYSTEM -FILE_DEVICE_CHANGER -FILE_DEVICE_CONTROLLER -FILE_DEVICE_DATALINK -FILE_DEVICE_DFS -FILE_DEVICE_DFS_FILE_SYSTEM -FILE_DEVICE_DFS_VOLUME -FILE_DEVICE_DISK -FILE_DEVICE_DISK_FILE_SYSTEM -FILE_DEVICE_DVD -FILE_DEVICE_FILE_SYSTEM -FILE_DEVICE_FIPS -FILE_DEVICE_FULLSCREEN_VIDEO -FILE_DEVICE_INPORT_PORT -FILE_DEVICE_IS_MOUNTED -FILE_DEVICE_KEYBOARD -FILE_DEVICE_KS -FILE_DEVICE_KSEC -FILE_DEVICE_MAILSLOT -FILE_DEVICE_MASS_STORAGE -FILE_DEVICE_MIDI_IN -FILE_DEVICE_MIDI_OUT -FILE_DEVICE_MODEM -FILE_DEVICE_MOUSE -FILE_DEVICE_MULTI_UNC_PROVIDER -FILE_DEVICE_NAMED_PIPE -FILE_DEVICE_NETWORK -FILE_DEVICE_NETWORK_BROWSER -FILE_DEVICE_NETWORK_FILE_SYSTEM -FILE_DEVICE_NETWORK_REDIRECTOR -FILE_DEVICE_NULL -FILE_DEVICE_PARALLEL_PORT -FILE_DEVICE_PHYSICAL_NETCARD -FILE_DEVICE_PRINTER -FILE_DEVICE_SCANNER -FILE_DEVICE_SCREEN -FILE_DEVICE_SECURE_OPEN -FILE_DEVICE_SERENUM -FILE_DEVICE_SERIAL_MOUSE_PORT -FILE_DEVICE_SERIAL_PORT -FILE_DEVICE_SMARTCARD -FILE_DEVICE_SMB -FILE_DEVICE_SOUND -FILE_DEVICE_STREAMS -FILE_DEVICE_TAPE -FILE_DEVICE_TAPE_FILE_SYSTEM -FILE_DEVICE_TERMSRV -FILE_DEVICE_TRANSPORT -FILE_DEVICE_UNKNOWN -FILE_DEVICE_VDM -FILE_DEVICE_VIDEO -FILE_DEVICE_VIRTUAL_DISK -FILE_DEVICE_WAVE_IN -FILE_DEVICE_WAVE_OUT -FILE_DIRECTORY_FILE -FILE_DISPOSITION_INFORMATION -FILE_DOES_NOT_EXIST -FILE_END_OF_FILE_INFORMATION -FILE_EXECUTE -FILE_EXISTS -FILE_FLOPPY_DISKETTE -FILE_FS_DEVICE_INFORMATION -FILE_FULL_EA_INFORMATION -FILE_GENERIC_EXECUTE -FILE_GENERIC_READ -FILE_GENERIC_WRITE -FILE_INFORMATION_CLASS -FILE_INFORMATION_CLASS -FILE_LIST_DIRECTORY -FILE_LONG_ALIGNMENT -FILE_MAXIMUM_DISPOSITION -FILE_NAME_INFORMATION -FILE_NETWORK_OPEN_INFORMATION -FILE_NON_DIRECTORY_FILE -FILE_NO_COMPRESSION -FILE_NO_EA_KNOWLEDGE -FILE_NO_INTERMEDIATE_BUFFERING -FILE_OBJECT.Flags -FILE_OBJECT -FILE_OCTA_ALIGNMENT -FILE_OPEN -FILE_OPENED -FILE_OPEN_BY_FILE_ID -FILE_OPEN_FOR_BACKUP_INTENT -FILE_OPEN_FOR_FREE_SPACE_QUERY -FILE_OPEN_FOR_RECOVERY -FILE_OPEN_IF -FILE_OPEN_NO_RECALL -FILE_OPEN_REPARSE_POINT -FILE_OVERWRITE -FILE_OVERWRITE_IF -FILE_OVERWRITTEN -FILE_POSITION_INFORMATION -FILE_QUAD_ALIGNMENT -FILE_RANDOM_ACCESS -FILE_READ_ACCESS -FILE_READ_ATTRIBUTES -FILE_READ_DATA -FILE_READ_EA -FILE_READ_ONLY_DEVICE -FILE_REMOTE_DEVICE -FILE_REMOVABLE_MEDIA -FILE_RESERVE_OPFILTER -FILE_SEQUENTIAL_ONLY -FILE_SHARE_DELETE -FILE_SHARE_READ -FILE_SHARE_VALID_FLAGS -FILE_SHARE_WRITE -FILE_SPECIAL_ACCESS -FILE_STANDARD_INFORMATION -FILE_STRUCTURED_STORAGE -FILE_SUPERSEDE -FILE_SUPERSEDED -FILE_SYNCHRONOUS_IO_ALERT -FILE_SYNCHRONOUS_IO_NONALERT -FILE_TRAVERSE -FILE_USE_FILE_POINTER_POSITION -FILE_VALID_DATA_LENGTH_INFORMATION -FILE_VALID_MAILSLOT_OPTION_FLAGS -FILE_VALID_OPTION_FLAGS -FILE_VALID_PIPE_OPTION_FLAGS -FILE_VALID_SET_FLAGS -FILE_VIRTUAL_VOLUME -FILE_WORD_ALIGNMENT -FILE_WRITE_ACCESS -FILE_WRITE_ATTRIBUTES -FILE_WRITE_DATA -FILE_WRITE_EA -FILE_WRITE_ONCE_MEDIA -FILE_WRITE_THROUGH -FILE_WRITE_TO_END_OF_FILE -FO_ALERTABLE_IO -FO_CACHE_SUPPORTED -FO_CLEANUP_COMPLETE -FO_DELETE_ON_CLOSE -FO_DIRECT_DEVICE_OPEN -FO_FILE_FAST_IO_READ -FO_FILE_MODIFIED -FO_FILE_OBJECT_HAS_EXTENSION -FO_FILE_OPEN -FO_FILE_OPEN_CANCELLED -FO_FILE_SIZE_CHANGED -FO_GENERATE_AUDIT_ON_CLOSE -FO_HANDLE_CREATED -FO_MAILSLOT -FO_NAMED_PIPE -FO_NO_INTERMEDIATE_BUFFERING -FO_OPENED_CASE_SENSITIVE -FO_RANDOM_ACCESS -FO_REMOTE_ORIGIN -FO_SEQUENTIAL_ONLY -FO_STREAM_FILE -FO_SYNCHRONOUS_IO -FO_TEMPORARY_FILE -FO_VOLUME_OPEN -FO_WRITE_THROUGH -FS_INFORMATION_CLASS -GENERAL_LOOKASIDE -GENERAL_LOOKASIDE_S -HASH_STRING_ALGORITHM_DEFAULT -HASH_STRING_ALGORITHM_INVALID -HASH_STRING_ALGORITHM_X65599 -HIGH_LEVEL -HIGH_PRIORITY -HWPROFILE_CHANGE_NOTIFICATION -IMAGE_ADDRESSING_MODE_32BIT -IMAGE_INFO -INITIAL_PRIVILEGE_COUNT -INITIAL_PRIVILEGE_SET -INTERFACE_TYPE -INTERFACE_TYPE -INTERLOCKED_RESULT -IO_ALLOCATION_ACTION -IO_ALLOCATION_ACTION -IO_CD_ROM_INCREMENT -IO_COMPLETION_CONTEXT -IO_CSQ -IO_CSQ_IRP_CONTEXT -IO_DISK_INCREMENT -IO_ERROR_LOG_PACKET -IO_KEYBOARD_INCREMENT -IO_MAILSLOT_INCREMENT -IO_MOUSE_INCREMENT -IO_NAMED_PIPE_INCREMENT -IO_NETWORK_INCREMENT -IO_NOTIFICATION_EVENT_CATEGORY -IO_NOTIFICATION_EVENT_CATEGORY -IO_NO_INCREMENT -IO_PARALLEL_INCREMENT -IO_REMOVE_LOCK -IO_REMOVE_LOCK_COMMON_BLOCK -IO_REMOVE_LOCK_DBG_BLOCK -IO_RESOURCE_ALTERNATIVE -IO_RESOURCE_DEFAULT -IO_RESOURCE_DESCRIPTOR -IO_RESOURCE_DESCRIPTOR -IO_RESOURCE_DESCRIPTOR.Option -IO_RESOURCE_LIST -IO_RESOURCE_PREFERRED -IO_RESOURCE_REQUIREMENTS_LIST -IO_SECURITY_CONTEXT -IO_SERIAL_INCREMENT -IO_SOUND_INCREMENT -IO_STACK_LOCATION -IO_STACK_LOCATION.Control -IO_STATUS_BLOCK -IO_VIDEO_INCREMENT -IPI_LEVEL -IRP_MJ_CLEANUP -IRP_MJ_CLOSE -IRP_MJ_CREATE -IRP_MJ_CREATE_MAILSLOT -IRP_MJ_CREATE_NAMED_PIPE -IRP_MJ_DEVICE_CHANGE -IRP_MJ_DEVICE_CONTROL -IRP_MJ_DIRECTORY_CONTROL -IRP_MJ_FILE_SYSTEM_CONTROL -IRP_MJ_FLUSH_BUFFERS -IRP_MJ_INTERNAL_DEVICE_CONTROL -IRP_MJ_LOCK_CONTROL -IRP_MJ_MAXIMUM_FUNCTION -IRP_MJ_PNP -IRP_MJ_PNP_POWER -IRP_MJ_POWER -IRP_MJ_QUERY_EA -IRP_MJ_QUERY_INFORMATION -IRP_MJ_QUERY_QUOTA -IRP_MJ_QUERY_SECURITY -IRP_MJ_QUERY_VOLUME_INFORMATION -IRP_MJ_READ -IRP_MJ_SCSI -IRP_MJ_SET_EA -IRP_MJ_SET_INFORMATION -IRP_MJ_SET_QUOTA -IRP_MJ_SET_SECURITY -IRP_MJ_SET_VOLUME_INFORMATION -IRP_MJ_SHUTDOWN -IRP_MJ_SYSTEM_CONTROL -IRP_MJ_WRITE -IRP_MN_CANCEL_REMOVE_DEVICE -IRP_MN_CANCEL_STOP_DEVICE -IRP_MN_CHANGE_SINGLE_INSTANCE -IRP_MN_CHANGE_SINGLE_ITEM -IRP_MN_COMPLETE -IRP_MN_COMPLETE_MDL -IRP_MN_COMPLETE_MDL_DPC -IRP_MN_COMPRESSED -IRP_MN_DEVICE_USAGE_NOTIFICATION -IRP_MN_DISABLE_COLLECTION -IRP_MN_DISABLE_EVENTS -IRP_MN_DPC -IRP_MN_EJECT -IRP_MN_ENABLE_COLLECTION -IRP_MN_ENABLE_EVENTS -IRP_MN_EXECUTE_METHOD -IRP_MN_FILTER_RESOURCE_REQUIREMENTS -IRP_MN_KERNEL_CALL -IRP_MN_LOAD_FILE_SYSTEM -IRP_MN_LOCK -IRP_MN_MDL -IRP_MN_MDL_DPC -IRP_MN_MOUNT_VOLUME -IRP_MN_NORMAL -IRP_MN_NOTIFY_CHANGE_DIRECTORY -IRP_MN_POWER_SEQUENCE -IRP_MN_QUERY_ALL_DATA -IRP_MN_QUERY_BUS_INFORMATION -IRP_MN_QUERY_CAPABILITIES -IRP_MN_QUERY_DEVICE_RELATIONS -IRP_MN_QUERY_DEVICE_TEXT -IRP_MN_QUERY_DIRECTORY -IRP_MN_QUERY_ID -IRP_MN_QUERY_INTERFACE -IRP_MN_QUERY_LEGACY_BUS_INFORMATION -IRP_MN_QUERY_PNP_DEVICE_STATE -IRP_MN_QUERY_POWER -IRP_MN_QUERY_REMOVE_DEVICE -IRP_MN_QUERY_RESOURCES -IRP_MN_QUERY_RESOURCE_REQUIREMENTS -IRP_MN_QUERY_SINGLE_INSTANCE -IRP_MN_QUERY_STOP_DEVICE -IRP_MN_READ_CONFIG -IRP_MN_REGINFO -IRP_MN_REGINFO_EX -IRP_MN_REMOVE_DEVICE -IRP_MN_SCSI_CLASS -IRP_MN_SET_LOCK -IRP_MN_SET_POWER -IRP_MN_START_DEVICE -IRP_MN_STOP_DEVICE -IRP_MN_SURPRISE_REMOVAL -IRP_MN_TRACK_LINK -IRP_MN_UNLOCK_ALL -IRP_MN_UNLOCK_ALL_BY_KEY -IRP_MN_UNLOCK_SINGLE -IRP_MN_USER_FS_REQUEST -IRP_MN_VERIFY_VOLUME -IRP_MN_WAIT_WAKE -IRP_MN_WRITE_CONFIG -KBUGCHECK_BUFFER_DUMP_STATE -KBUGCHECK_CALLBACK_RECORD -KDEVICE_QUEUE -KDEVICE_QUEUE_ENTRY -KDPC_DATA -KDPC_IMPORTANCE -KDPC_IMPORTANCE -KD_DEBUGGER_ENABLED -KD_DEBUGGER_NOT_PRESENT -KEYBOARD_ALT_KEY_DOWN -KEYBOARD_CAPS_LOCK_ON -KEYBOARD_CTRL_KEY_DOWN -KEYBOARD_INSERT_ON -KEYBOARD_LEFT_SHIFT_DOWN -KEYBOARD_NUM_LOCK_ON -KEYBOARD_RIGHT_SHIFT_DOWN -KEYBOARD_SCROLL_LOCK_ON -KEY_BASIC_INFORMATION -KEY_FULL_INFORMATION -KEY_INFORMATION_CLASS -KEY_INFORMATION_CLASS -KEY_NODE_INFORMATION -KEY_VALUE_BASIC_INFORMATION -KEY_VALUE_ENTRY -KEY_VALUE_FULL_INFORMATION -KEY_VALUE_INFORMATION_CLASS -KEY_VALUE_INFORMATION_CLASS -KEY_VALUE_PARTIAL_INFORMATION -KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 -KEY_VALUE_Xxx.Type -KFLOATING_SAVE -KINTERRUPT_MODE -KINTERRUPT_MODE -KI_USER_SHARED_DATA -KLOCK_QUEUE_HANDLE -KPCR_TIB -KPROCESSOR_MODE -KPROFILE_SOURCE -KSPIN_LOCK_QUEUE -KSPIN_LOCK_QUEUE_NUMBER -KWAIT_BLOCK -KWAIT_REASON -KWAIT_REASON -LARGE_INTEGER -LOCK_OPERATION -LOCK_OPERATION -LOCK_QUEUE_OWNER -LOCK_QUEUE_WAIT -LOW_LEVEL -LOW_PRIORITY -LOW_REALTIME_PRIORITY -MAXIMUM_PRIORITY -MAXIMUM_PROCESSORS -MAXIMUM_VOLUME_LABEL_LENGTH -MAXIMUM_WAIT_OBJECTS -MDL_ALLOCATED_FIXED_SIZE -MDL_ALLOCATED_MUST_SUCCEED -MDL_FREE_EXTRA_PTES -MDL_IO_PAGE_READ -MDL_IO_SPACE -MDL_MAPPED_TO_SYSTEM_VA -MDL_MAPPING_CAN_FAIL -MDL_MAPPING_FLAGS -MDL_NETWORK_HEADER -MDL_PAGES_LOCKED -MDL_PARENT_MAPPED_SYSTEM_VA -MDL_PARTIAL -MDL_PARTIAL_HAS_BEEN_MAPPED -MDL_SOURCE_IS_NONPAGED_POOL -MDL_SOURCE_IS_NONPAGED_POOL -MDL_WRITE_OPERATION -MEMORY_CACHING_TYPE -MEMORY_CACHING_TYPE -MEMORY_CACHING_TYPE_ORIG -METHOD_BUFFERED -METHOD_IN_DIRECT -METHOD_NEITHER -METHOD_OUT_DIRECT -MMFLUSH_TYPE -MMFLUSH_TYPE -MM_HIGHEST_USER_ADDRESS -MM_LOWEST_SYSTEM_ADDRESS -MM_LOWEST_USER_ADDRESS -MM_PAGE_PRIORITY -MM_PAGE_PRIORITY -MM_SYSTEM_RANGE_START -MM_SYSTEM_SIZE -MM_USER_PROBE_ADDRESS -MajorFunction[IRP_MJ_MAXIMUM_FUNCTION -NPAGED_LOOKASIDE_LIST -OBJECT_HANDLE_INFORMATION -OBJECT_NAME_INFORMATION -OWNER_ENTRY -PACCESS_MASK -PACCESS_STATE -PAGED_LOOKASIDE_LIST -PAGE_SHIFT -PAGE_SIZE -PALLOCATE_FUNCTION -PANSI_STRING -PARBITER_CONFLICT_INFO -PARTITION_INFORMATION_MBR -PARTITION_STYLE -PASSIVE_LEVEL -PCALLBACK_FUNCTION -PCALLBACK_OBJECT -PCI_BRIDGE_TYPE -PCI_CARDBUS_BRIDGE_TYPE -PCI_COMMON_CONFIG -PCI_COMMON_CONFIG.Command -PCI_COMMON_CONFIG.HeaderType -PCI_COMMON_CONFIG.Status -PCI_DEVICE_TYPE -PCI_ENABLE_BUS_MASTER -PCI_ENABLE_FAST_BACK_TO_BACK -PCI_ENABLE_IO_SPACE -PCI_ENABLE_MEMORY_SPACE -PCI_ENABLE_PARITY -PCI_ENABLE_SERR -PCI_ENABLE_SPECIAL_CYCLES -PCI_ENABLE_VGA_COMPATIBLE_PALETTE -PCI_ENABLE_WAIT_CYCLE -PCI_ENABLE_WRITE_AND_INVALIDATE -PCI_MULTIFUNCTION -PCI_SLOT_NUMBER -PCI_STATUS_66MHZ_CAPABLE -PCI_STATUS_CAPABILITIES_LIST -PCI_STATUS_DATA_PARITY_DETECTED -PCI_STATUS_DETECTED_PARITY_ERROR -PCI_STATUS_DEVSEL -PCI_STATUS_FAST_BACK_TO_BACK -PCI_STATUS_RECEIVED_MASTER_ABORT -PCI_STATUS_RECEIVED_TARGET_ABORT -PCI_STATUS_SIGNALED_SYSTEM_ERROR -PCI_STATUS_SIGNALED_TARGET_ABORT -PCI_STATUS_UDF_SUPPORTED -PCI_TYPE0_ADDRESSES -PCI_TYPE1_ADDRESSES -PCI_TYPE2_ADDRESSES -PCLIENT_ID -PCM_PARTIAL_RESOURCE_DESCRIPTOR -PCM_PARTIAL_RESOURCE_LIST -PCM_RESOURCE_LIST -PCONFIGURATION_TYPE -PCONTROLLER_OBJECT -PCREATE_DISK -PCREATE_PROCESS_NOTIFY_ROUTINE -PCREATE_THREAD_NOTIFY_ROUTINE -PCR_MAJOR_VERSION -PCR_MINOR_VERSION -PCUNICODE_STRING -PDCAP_D0_SUPPORTED -PDCAP_D1_SUPPORTED -PDCAP_D2_SUPPORTED -PDCAP_D3_SUPPORTED -PDCAP_WAKE_FROM_D0_SUPPORTED -PDCAP_WAKE_FROM_D1_SUPPORTED -PDCAP_WAKE_FROM_D2_SUPPORTED -PDCAP_WAKE_FROM_D3_SUPPORTED -PDCAP_WARM_EJECT_SUPPORTED -PDEVICE_CHANGE_COMPLETE_CALLBACK -PDEVICE_DESCRIPTION -PDEVICE_OBJECT -PDISK_SIGNATURE -PDMA_ADAPTER -PDRIVER_CANCEL -PDRIVER_CONTROL -PDRIVER_LIST_CONTROL -PDRIVER_NOTIFICATION_CALLBACK_ROUTINE -PDRIVER_OBJECT -PDRIVER_REINITIALIZE -PD_Capabilities -PD_D1Latency -PD_D2Latency -PD_D3Latency -PD_MostRecentPowerState -PD_PowerStateMapping[PowerSystemMaximum] -PD_Size -PEX_CALLBACK_FUNCTION -PFAST_MUTEX -PFILE_BASIC_INFORMATION -PFILE_NETWORK_OPEN_INFORMATION -PFILE_OBJECT -PFILE_STANDARD_INFORMATION -PFREE_FUNCTION -PGENERIC_MAPPING -PHYSICAL_ADDRESS -PHYSICAL_MEMORY_RANGE -PIMAGE_INFO -PINTERFACE_TYPE -PIO_APC_ROUTINE -PIO_COMPLETION_ROUTINE -PIO_CSQ -PIO_CSQ_ACQUIRE_LOCK -PIO_CSQ_COMPLETE_CANCELED_IRP -PIO_CSQ_INSERT_IRP -PIO_CSQ_IRP_CONTEXT -PIO_CSQ_PEEK_NEXT_IRP -PIO_CSQ_RELEASE_LOCK -PIO_CSQ_REMOVE_IRP -PIO_QUERY_DEVICE_ROUTINE -PIO_REMOVE_LOCK -PIO_RESOURCE_DESCRIPTOR -PIO_RESOURCE_REQUIREMENTS_LIST -PIO_STACK_LOCATION -PIO_STATUS_BLOCK -PIO_TIMER_ROUTINE -PIO_WORKITEM -PIO_WORKITEM_ROUTINE -PKBUGCHECK_CALLBACK_RECORD -PKBUGCHECK_CALLBACK_ROUTINE -PKDEFERRED_ROUTINE -PKDEVICE_QUEUE -PKDEVICE_QUEUE_ENTRY -PKEY_VALUE_FULL_INFORMATION -PKFLOATING_SAVE -PKKERNEL_ROUTINE -PKLOCK_QUEUE_HANDLE -PKNORMAL_ROUTINE -PKRUNDOWN_ROUTINE -PKSERVICE_ROUTINE -PKSPIN_LOCK -PKSTART_ROUTINE -PKSYNCHRONIZE_ROUTINE -PKWAIT_BLOCK -PLARGE_INTEGER -PLIST_ENTRY -PLOAD_IMAGE_NOTIFY_ROUTINE -PLUGPLAY_NOTIFICATION_HEADER -PLUGPLAY_REGKEY_CURRENT_HWPROFILE -PLUGPLAY_REGKEY_DEVICE -PLUGPLAY_REGKEY_DRIVER -PNPAGED_LOOKASIDE_LIST -PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES -PNP_BUS_INFORMATION -PNP_DEVICE_DISABLED -PNP_DEVICE_DONT_DISPLAY_IN_UI -PNP_DEVICE_FAILED -PNP_DEVICE_NOT_DISABLEABLE -PNP_DEVICE_REMOVED -PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED -PNP_DEVICE_STATE -POBJECT_ATTRIBUTES -POBJECT_HANDLE_INFORMATION -POBJECT_TYPE -POINTER_ALIGNMENT -POOL_TAGGING -POOL_TYPE -POOL_TYPE -POWER_LEVEL -POWER_SEQUENCE -POWER_STATE -POWER_STATE -POWER_STATE_TYPE -POWER_STATE_TYPE -PPAGED_LOOKASIDE_LIST -PPFN_NUMBER -PPHYSICAL_ADDRESS -PPRIVILEGE_SET -PP_LOOKASIDE_LIST -PREQUEST_POWER_COMPLETE -PRIVILEGE_SET.Control -PRIVILEGE_SET_ALL_NECESSARY -PRKDEVICE_QUEUE_ENTRY -PROFILE_LEVEL -PROTECTED_POOL -PRTL_BITMAP -PRTL_BITMAP_RUN -PRTL_CONFLICT_RANGE_CALLBACK -PRTL_OSVERSIONINFOEXW -PRTL_QUERY_REGISTRY_TABLE -PRTL_RANGE -PRTL_RANGE_LIST -PRTL_RANGE_LIST_ITERATOR -PSCATTER_GATHER_LIST -PSECTION_OBJECT -PSECTION_OBJECT_POINTERS -PSECURITY_DESCRIPTOR -PSECURITY_SUBJECT_CONTEXT -PSHARE_ACCESS -PSINGLE_LIST_ENTRY -PSIZE_T -PSLIST_ENTRY -PSLIST_HEADER -PSYSCTL_IRP_DISPOSITION -PTIMER_APC_ROUTINE -PTIME_FIELDS -PTIME_UPDATE_NOTIFY_ROUTINE -PULONG_PTR -PUNICODE_STRING -PWMILIB_CONTEXT -Privilege[INITIAL_PRIVILEGE_COUNT] -REG_BINARY -REG_DWORD -REG_DWORD_BIG_ENDIAN -REG_DWORD_LITTLE_ENDIAN -REG_EXPAND_SZ -REG_FULL_RESOURCE_DESCRIPTOR -REG_LINK -REG_MULTI_SZ -REG_NONE -REG_QWORD -REG_QWORD_LITTLE_ENDIAN -REG_RESOURCE_LIST -REG_RESOURCE_REQUIREMENTS_LIST -REG_SZ -RESOURCE_HASH_TABLE_SIZE -RESOURCE_TRANSLATION_DIRECTION -RESOURCE_TRANSLATION_DIRECTION -RESTRICTED_POINTER -RESULT_NEGATIVE -RESULT_POSITIVE -RESULT_ZERO -RTL_BITMAP -RTL_BITMAP_RUN -RTL_OSVERSIONINFOEXW -RTL_OSVERSIONINFOW -RTL_QUERY_REGISTRY_DELETE -RTL_QUERY_REGISTRY_DIRECT -RTL_QUERY_REGISTRY_NOEXPAND -RTL_QUERY_REGISTRY_NOVALUE -RTL_QUERY_REGISTRY_REQUIRED -RTL_QUERY_REGISTRY_SUBKEY -RTL_QUERY_REGISTRY_TABLE -RTL_QUERY_REGISTRY_TABLE.Flags -RTL_QUERY_REGISTRY_TOPKEY -RTL_RANGE -RTL_RANGE_CONFLICT -RTL_RANGE_LIST -RTL_RANGE_LIST_ADD_IF_CONFLICT -RTL_RANGE_LIST_ADD_SHARED -RTL_RANGE_LIST_ITERATOR -RTL_RANGE_LIST_MERGE_IF_CONFLICT -RTL_RANGE_LIST_NULL_CONFLICT_OK -RTL_RANGE_LIST_SHARED_OK -RTL_RANGE_SHARED -RTL_REGISTRY_ABSOLUTE -RTL_REGISTRY_CONTROL -RTL_REGISTRY_DEVICEMAP -RTL_REGISTRY_HANDLE -RTL_REGISTRY_OPTIONAL -RTL_REGISTRY_SERVICES -RTL_REGISTRY_USER -RTL_REGISTRY_WINDOWS_NT -Range[PCI_TYPE2_ADDRESSES -SCATTER_GATHER_ELEMENT -SCATTER_GATHER_LIST -SECTION_INHERIT -SECTION_OBJECT_POINTERS -SECURITY_INFORMATION -SECURITY_OPERATION_CODE -SECURITY_SUBJECT_CONTEXT -SEC_NO_CHANGE -SEMAPHORE_INCREMENT -SHARE_ACCESS -SIZE_T -SL_ALLOW_RAW_MOUNT -SL_CASE_SENSITIVE -SL_EXCLUSIVE_LOCK -SL_FAIL_IMMEDIATELY -SL_FORCE_ACCESS_CHECK -SL_FT_SEQUENTIAL_WRITE -SL_INDEX_SPECIFIED -SL_INVOKE_ON_CANCEL -SL_INVOKE_ON_ERROR -SL_INVOKE_ON_SUCCESS -SL_KEY_SPECIFIED -SL_OPEN_PAGING_FILE -SL_OPEN_TARGET_DIRECTORY -SL_OVERRIDE_VERIFY_VOLUME -SL_PENDING_RETURNED -SL_RESTART_SCAN -SL_RETURN_SINGLE_ENTRY -SL_WATCH_TREE -SL_WRITE_THROUGH -SSDT_ENTRY -SUITE_TYPE -SUITE_TYPE -SYMBOLIC_LINK_ALL_ACCESS -SYMBOLIC_LINK_QUERY -SYNCH_LEVEL -TARGET_DEVICE_CUSTOM_NOTIFICATION -TARGET_DEVICE_REMOVAL_NOTIFICATION -TIMER_TYPE -TIMER_TYPE -TIME_FIELDS -TRACE_INFORMATION_CLASS -TRACE_INFORMATION_CLASS -TRANSLATOR_INTERFACE -ULONG_PTR -VER_AND -VER_BUILDNUMBER -VER_CONDITION_MASK -VER_EQUAL -VER_GREATER -VER_GREATER_EQUAL -VER_LESS -VER_LESS_EQUAL -VER_MAJORVERSION -VER_MINORVERSION -VER_NUM_BITS_PER_CONDITION_MASK -VER_OR -VER_PLATFORMID -VER_PRODUCT_TYPE -VER_SERVICEPACKMAJOR -VER_SERVICEPACKMINOR -VER_SUITENAME -VPB_LOCKED -VPB_MOUNTED -VPB_PERSISTENT -VPB_RAW_MOUNT -VPB_REMOVE_PENDING -VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH -WAIT_CONTEXT_BLOCK -WAIT_TYPE -WMI_NOTIFICATION_CALLBACK -WORK_QUEUE_ITEM -WORK_QUEUE_TYPE -WORK_QUEUE_TYPE -DEVICE_DESCRIPTION -DEVICE_OBJECT -DEVICE_OBJECT -DEVOBJ_EXTENSION -DMA_ADAPTER -DRIVER_CONTROL -DRIVER_OBJECT -DRIVER_OBJECT -EPROCESS -FILE_OBJECT -FILE_OBJECT -FirstEntry -GENERAL_LOOKASIDE -IO_CSQ -IO_CSQ -IO_STACK_LOCATION -IO_STATUS_BLOCK -IRP -IRP -IrpSp -IrpSp -KAPC -KDPC -KDPC -KPCR -KPCR -KPRCB -KPRCB -KSPIN_LOCK_QUEUE -KTHREAD -KTSS -KTSS -KWAIT_BLOCK -ListEntry -MDL -MDL -NT_TIB -NextIrpSp -PCI_HEADER_TYPE_0 -PCI_HEADER_TYPE_1 -PCI_HEADER_TYPE_2 -SCATTER_GATHER_LIST -SCSI_REQUEST_BLOCK -SECTION_OBJECT -SET_PARTITION_INFORMATION_EX -X86_ -va_list -TIMER_TYPE -ULONG -VOID diff --git a/irc/ArchBlackmann/verify.h b/irc/ArchBlackmann/verify.h deleted file mode 100644 index 5d491cfef41..00000000000 --- a/irc/ArchBlackmann/verify.h +++ /dev/null @@ -1,37 +0,0 @@ -// verify.h -// This code is (C) 2003-2004 Royce Mitchell III -// and released under the LGPL & BSD licenses - -#ifndef VERIFY_H -#define VERIFY_H - -//#include - -#ifdef ASSERT -#undef ASSERT -#endif//ASSERT - -#include "panic.h" - -#if defined(DEBUG) || defined(_DEBUG) -inline void AssertHandler ( bool b, const char* str ) -{ - if ( !b ) - panic ( str ); -} -# define ASSERT(x) AssertHandler((x) ? true : false, #x ) -#else -# define ASSERT(x) -#endif - -#ifdef verify -#undef verify -#endif//verify - -#if defined(DEBUG) || defined(_DEBUG) -# define verify(x) ASSERT(x) -#else -# define verify(x) x -#endif - -#endif//VERIFY_H diff --git a/irc/TechBot/CHMLibrary/AssemblyInfo.cs b/irc/TechBot/CHMLibrary/AssemblyInfo.cs deleted file mode 100644 index dbacda112e8..00000000000 --- a/irc/TechBot/CHMLibrary/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("1.0.*")] - -// The following attributes specify the key for the sign of your assembly. See the -// .NET Framework documentation for more information about signing. -// This is not required, if you don't want signing let these attributes like they're. -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/BinaryReaderHelp.cs b/irc/TechBot/CHMLibrary/CHMDecoding/BinaryReaderHelp.cs deleted file mode 100644 index 64c9668eb30..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/BinaryReaderHelp.cs +++ /dev/null @@ -1,274 +0,0 @@ -using System; -using System.Collections; -using System.IO; -using System.Text; -using System.Globalization; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class BinaryReaderHelp implements static helper methods for extracting binary data - /// from a binary reader object. - /// - internal class BinaryReaderHelp - { - /// - /// Internal helper method to extract null-terminated strings from a binary reader - /// - /// reference to the binary reader - /// offset in the stream - /// true if the offset value should be used - /// encoder used for text encoding - /// An extracted string value - internal static string ExtractString(ref BinaryReader binReader, int offset, bool noOffset, Encoding encoder) - { - string strReturn = ""; - - if(encoder == null) - encoder = Encoding.ASCII; - - ArrayList nameBytes = new ArrayList(); - byte curByte; - - if(!noOffset) - binReader.BaseStream.Seek(offset, SeekOrigin.Begin); - - if(binReader.BaseStream.Position >= binReader.BaseStream.Length) - return ""; - - curByte = binReader.ReadByte(); - while( (curByte != (byte)0) && (binReader.BaseStream.Position < binReader.BaseStream.Length) ) - { - nameBytes.Add( curByte ); - curByte = binReader.ReadByte(); - } - - byte[] name = (byte[]) (nameBytes.ToArray(System.Type.GetType("System.Byte"))); - strReturn = encoder.GetString(name,0,name.Length); - - return strReturn; - } - - /// - /// Internal helper method to extract a string with a specific length from the binary reader - /// - /// reference to the binary reader - /// length of the string (number of bytes) - /// offset in the stream - /// true if the offset value should be used - /// encoder used for text encoding - /// An extracted string value - internal static string ExtractString(ref BinaryReader binReader, int length, int offset, bool noOffset, Encoding encoder) - { - string strReturn = ""; - - if(length == 0) - return ""; - - if(encoder == null) - encoder = Encoding.ASCII; - - ArrayList nameBytes = new ArrayList(); - byte curByte; - - if(!noOffset) - binReader.BaseStream.Seek(offset, SeekOrigin.Begin); - - if(binReader.BaseStream.Position >= binReader.BaseStream.Length) - return ""; - - curByte = binReader.ReadByte(); - while( (curByte != (byte)0) && (nameBytes.Count < length) && (binReader.BaseStream.Position < binReader.BaseStream.Length) ) - { - nameBytes.Add( curByte ); - - if(nameBytes.Count < length) - curByte = binReader.ReadByte(); - } - - byte[] name = (byte[]) (nameBytes.ToArray(System.Type.GetType("System.Byte"))); - strReturn = encoder.GetString(name,0,name.Length); - - return strReturn; - } - - /// - /// Internal helper method to extract a string with a specific length from the binary reader - /// - /// reference to the binary reader - /// reference to a bool vairable which will receive true if the - /// string terminator \0 was found. false indicates that the end of the stream was reached. - /// offset in the stream - /// true if the offset value should be used - /// encoder used for text encoding - /// An extracted string value - internal static string ExtractString(ref BinaryReader binReader, ref bool bFoundTerminator, int offset, bool noOffset, Encoding encoder) - { - string strReturn = ""; - - ArrayList nameBytes = new ArrayList(); - byte curByte; - - if(encoder == null) - encoder = Encoding.ASCII; - - if(!noOffset) - binReader.BaseStream.Seek(offset, SeekOrigin.Begin); - - if(binReader.BaseStream.Position >= binReader.BaseStream.Length) - return ""; - - curByte = binReader.ReadByte(); - while( (curByte != (byte)0) && (binReader.BaseStream.Position < binReader.BaseStream.Length) ) - { - nameBytes.Add( curByte ); - curByte = binReader.ReadByte(); - - if( curByte == (byte)0 ) - { - bFoundTerminator = true; - } - } - - byte[] name = (byte[]) (nameBytes.ToArray(System.Type.GetType("System.Byte"))); - strReturn = encoder.GetString(name,0,name.Length); - - return strReturn; - } - - /// - /// Internal helper method to extract a null-terminated UTF-16/UCS-2 strings from a binary reader - /// - /// reference to the binary reader - /// offset in the stream - /// true if the offset value should be used - /// encoder used for text encoding - /// An extracted string value - internal static string ExtractUTF16String(ref BinaryReader binReader, int offset, bool noOffset, Encoding encoder) - { - string strReturn = ""; - - ArrayList nameBytes = new ArrayList(); - byte curByte; - int lastByte=-1; - - if(!noOffset) - binReader.BaseStream.Seek(offset, SeekOrigin.Begin); - - if(binReader.BaseStream.Position >= binReader.BaseStream.Length) - return ""; - - if(encoder == null) - encoder = Encoding.Unicode; - - curByte = binReader.ReadByte(); - int nCnt = 0; - while( ((curByte != (byte)0) || (lastByte != 0) ) && (binReader.BaseStream.Position < binReader.BaseStream.Length) ) - { - nameBytes.Add( curByte ); - - if(nCnt%2 == 0) - lastByte = (int)curByte; - - curByte = binReader.ReadByte(); - - nCnt++; - } - - byte[] name = (byte[]) (nameBytes.ToArray(System.Type.GetType("System.Byte"))); - strReturn = Encoding.Unicode.GetString(name,0,name.Length); - - // apply text encoding - name = Encoding.Default.GetBytes(strReturn); - strReturn = encoder.GetString(name,0,name.Length); - - return strReturn; - } - - /// - /// Internal helper for reading ENCINT encoded integer values - /// - /// reference to the reader - /// a long value - internal static long ReadENCINT(ref BinaryReader binReader) - { - long nRet = 0; - byte buffer = 0; - int shift = 0; - - if(binReader.BaseStream.Position >= binReader.BaseStream.Length) - return nRet; - - do - { - buffer = binReader.ReadByte(); - nRet |= ((long)((buffer & (byte)0x7F))) << shift; - shift += 7; - - }while ( (buffer & (byte)0x80) != 0); - - return nRet; - } - - /// - /// Reads an s/r encoded value from the byte array and decodes it into an integer - /// - /// a byte array containing all bits (contains only 0 or 1 elements) - /// scale param for encoding - /// root param for encoding - /// current index in the wclBits array - /// Returns an decoded integer value. - internal static int ReadSRItem(byte[] wclBits, int s, int r, ref int nBitIndex) - { - int nRet = 0; - int q = r; - - int nPref1Cnt = 0; - - while( wclBits[nBitIndex++] == 1) - { - nPref1Cnt++; - } - - if(nPref1Cnt == 0) - { - int nMask = 0; - - for(int nbits=0; nbits - /// The class CHMBtree implements methods/properties to decode the binary help index. - /// This class automatically creates an index arraylist for the current CHMFile instance. - /// It does not store the index internally ! - /// - /// The binary index can be found in the storage file $WWKeywordLinks/BTree - internal sealed class CHMBtree : IDisposable - { - /// - /// Constant specifying the size of the string blocks - /// - private const int BLOCK_SIZE = 2048; - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal member storing flags - /// - private int _flags = 0; - /// - /// Internal member storing the data format - /// - private byte[] _dataFormat = new byte[16]; - /// - /// Internal member storing the index of the last listing block - /// - private int _indexOfLastListingBlock = 0; - /// - /// Internal member storing the index of the root block - /// - private int _indexOfRootBlock = 0; - /// - /// Internal member storing the number of blocks - /// - private int _numberOfBlocks = 0; - /// - /// Internal member storing the tree depth. - /// (1 if no index blocks, 2 one level of index blocks, ...) - /// - private int _treeDepth = 0; - /// - /// Internal member storing the number of keywords in the file - /// - private int _numberOfKeywords = 0; - /// - /// Internal member storing the codepage - /// - private int _codePage = 0; - /// - /// true if the index is from a CHI or CHM file, else CHW - /// - private bool _isCHI_CHM = true; - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - /// - /// Internal flag specifying if we have to read listing or index blocks - /// - private bool _readListingBlocks = true; - /// - /// Internal member storing an indexlist of the current file. - /// - private ArrayList _indexList = new ArrayList(); - - /// - /// Constructor of the class - /// - /// binary file data of the $WWKeywordLinks/BTree file - /// associated chm file - public CHMBtree(byte[] binaryFileData, CHMFile associatedFile) - { - if( associatedFile == null) - { - throw new ArgumentException("CHMBtree.ctor() - Associated CHMFile must not be null !", "associatedFile"); - } - - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - DecodeData(); - - // clear internal binary data after extraction - _binaryFileData = null; - } - - /// - /// Decodes the binary file data and fills the internal properties - /// - /// true if succeeded - private bool DecodeData() - { - bool bRet = true; - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - int nCurOffset = 0; - int nTemp = 0; - - // decode header - binReader.ReadChars(2); // 2chars signature (not important) - - _flags = (int)binReader.ReadInt16(); // WORD flags - - binReader.ReadInt16(); // size of blocks (always 2048) - - _dataFormat = binReader.ReadBytes(16); - - binReader.ReadInt32(); // unknown DWORD - - _indexOfLastListingBlock = binReader.ReadInt32(); - _indexOfRootBlock = binReader.ReadInt32(); - - binReader.ReadInt32(); // unknown DWORD - - _numberOfBlocks = binReader.ReadInt32(); - _treeDepth = binReader.ReadInt16(); - _numberOfKeywords = binReader.ReadInt32(); - _codePage = binReader.ReadInt32(); - - binReader.ReadInt32(); // lcid DWORD - - nTemp = binReader.ReadInt32(); - _isCHI_CHM = (nTemp==1); - - binReader.ReadInt32(); // unknown DWORD - binReader.ReadInt32(); // unknown DWORD - binReader.ReadInt32(); // unknown DWORD - binReader.ReadInt32(); // unknown DWORD - - // end of header decode - - while( (memStream.Position < memStream.Length) && (bRet) ) - { - nCurOffset = (int)memStream.Position; - byte [] dataBlock = binReader.ReadBytes(BLOCK_SIZE); - bRet &= DecodeBlock(dataBlock, ref nCurOffset, _treeDepth-1); - } - - return bRet; - } - - /// - /// Decodes a block of url-string data - /// - /// block of data - /// current file offset - /// number of index blocks - /// true if succeeded - private bool DecodeBlock( byte[] dataBlock, ref int nOffset, int indexBlocks ) - { - bool bRet = true; - int nblockOffset = nOffset; - - MemoryStream memStream = new MemoryStream(dataBlock); - BinaryReader binReader = new BinaryReader(memStream); - - int freeSpace = binReader.ReadInt16(); // length of freespace - int nrOfEntries = binReader.ReadInt16(); // number of entries - - bool bListingEndReached = false; - - //while( (memStream.Position < (memStream.Length-freeSpace)) && (bRet) ) - //{ - int nIndexOfPrevBlock = -1; - int nIndexOfNextBlock = -1; - int nIndexOfChildBlock = 0; - - if(_readListingBlocks) - { - nIndexOfPrevBlock = binReader.ReadInt32(); // -1 if this is the header - nIndexOfNextBlock = binReader.ReadInt32(); // -1 if this is the last block - } - else - { - nIndexOfChildBlock = binReader.ReadInt32(); - } - - for(int nE = 0; nE < nrOfEntries; nE++) - { - if(_readListingBlocks) - { - bListingEndReached = (nIndexOfNextBlock==-1); - - string keyWord = BinaryReaderHelp.ExtractUTF16String(ref binReader, 0, true, _associatedFile.TextEncoding); - - bool isSeeAlsoKeyword = (binReader.ReadInt16()!=0); - - int indent = binReader.ReadInt16(); // indent of entry - int nCharIndex = binReader.ReadInt32(); - - binReader.ReadInt32(); - - int numberOfPairs = binReader.ReadInt32(); - - int[] nTopics = new int[numberOfPairs]; - string[] seeAlso = new string[numberOfPairs]; - - for(int i=0; i < numberOfPairs; i++) - { - if(isSeeAlsoKeyword) - { - seeAlso[i] = BinaryReaderHelp.ExtractUTF16String(ref binReader, 0, true, _associatedFile.TextEncoding); - } - else - { - nTopics[i] = binReader.ReadInt32(); - } - } - - binReader.ReadInt32(); // unknown - - int nIndexOfThisEntry = binReader.ReadInt32(); - - IndexItem newItem = new IndexItem(_associatedFile, keyWord, isSeeAlsoKeyword, indent, nCharIndex, nIndexOfThisEntry, seeAlso, nTopics); - _indexList.Add(newItem); - } - else - { - string keyWord = BinaryReaderHelp.ExtractUTF16String(ref binReader, 0, true, _associatedFile.TextEncoding); - - bool isSeeAlsoKeyword = (binReader.ReadInt16()!=0); - - int indent = binReader.ReadInt16(); // indent of entry - int nCharIndex = binReader.ReadInt32(); - - binReader.ReadInt32(); - - int numberOfPairs = binReader.ReadInt32(); - - int[] nTopics = new int[numberOfPairs]; - string[] seeAlso = new string[numberOfPairs]; - - for(int i=0; i < numberOfPairs; i++) - { - if(isSeeAlsoKeyword) - { - seeAlso[i] = BinaryReaderHelp.ExtractUTF16String(ref binReader, 0, true, _associatedFile.TextEncoding); - } - else - { - nTopics[i] = binReader.ReadInt32(); - } - } - - int nIndexChild = binReader.ReadInt32(); - int nIndexOfThisEntry=-1; - - IndexItem newItem = new IndexItem(_associatedFile, keyWord, isSeeAlsoKeyword, indent, nCharIndex, nIndexOfThisEntry, seeAlso, nTopics); - _indexList.Add(newItem); - - } - } - //} - - binReader.ReadBytes(freeSpace); - - - if( bListingEndReached ) - _readListingBlocks = false; - - return bRet; - } - - /// - /// Gets the internal generated index list - /// - internal ArrayList IndexList - { - get { return _indexList; } - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - } - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/CHMFile.cs b/irc/TechBot/CHMLibrary/CHMDecoding/CHMFile.cs deleted file mode 100644 index a39ffc4d684..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/CHMFile.cs +++ /dev/null @@ -1,2061 +0,0 @@ -using System; -using System.Diagnostics; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Text; -using System.Runtime.InteropServices; -using System.Globalization; -// using HtmlHelp.Storage; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// Internal enumeration for specifying the type of the html-help file - /// - internal enum HtmlHelpFileType - { - /// - /// CHM - compiled contents file - /// - /// A file with this extension must always exist. If the file would be too long, some parts - /// can be splitted into the filestypes below. - CHM = 0, - /// - /// CHI - compiled system file - /// - CHI = 1, - /// - /// CHQ - compiled fulltext search file - /// - CHQ = 2, - /// - /// CHW - compiled index file - /// - CHW = 3 - - } - - /// - /// The class CHMFile implemts methods and properties for handling a single chmfile. - /// - public sealed class CHMFile : IDisposable - { - /// - /// Internal member storing a reference to the hosting HtmlHelpSystem instance - /// - private HtmlHelpSystem _systemInstance = null; - /// - /// Internal flag specifying if only system data has been loaded - /// - private bool _onlySystem = false; - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal arraylist containing the table of contents - /// - private ArrayList _toc = new ArrayList(); - /// - /// Internal arraylist containing items of the toc which are merge-Links - /// - private ArrayList _mergeLinks = new ArrayList(); - /// - /// Internal member storing the read information types - /// - private ArrayList _informationTypes = new ArrayList(); - /// - /// Internal member storing the read categories - /// - private ArrayList _categories = new ArrayList(); - /// - /// Internal arraylist containing the index (klinks) - /// - private ArrayList _indexKLinks = new ArrayList(); - /// - /// Internal arraylist containing the index (alinks) - /// - private ArrayList _indexALinks = new ArrayList(); - /// - /// Internal member storing the full filename - /// - private string _chmFileName = ""; - /// - /// Internal member storing the full filename of the chi-file (includes all system files) - /// The file name is zero-length if there is no chi-file - /// - private string _chiFileName = ""; - /// - /// Internal member storing the full filename of the chw-file (includes the help index) - /// The file name is zero-length if there is no chw-file - /// - private string _chwFileName = ""; - /// - /// Internal member storing the full filename of the chq-file (includes the fulltext contents) - /// The file name is zero-length if there is no chq-file - /// - private string _chqFileName = ""; - /// - /// Internal member storing the decoded information from the internal #SYSTEM file - /// - private CHMSystem _systemFile = null; - /// - /// Internal member storing the decoded information from the internal #IDXHDR file - /// - private CHMIdxhdr _idxhdrFile = null; - /// - /// Internal member storing the decoded information from the internal #STRINGS file - /// - private CHMStrings _stringsFile = null; - /// - /// Internal member storing the decoded information from the internal #URLSTR file - /// - private CHMUrlstr _urlstrFile = null; - /// - /// Internal member storing the decoded information from the internal #URLTBL file - /// - private CHMUrltable _urltblFile = null; - /// - /// Internal member storing the decoded information from the internal #TOPICS file - /// - private CHMTopics _topicsFile = null; - /// - /// Internal member storing the decoded information from the internal #TOCIDX file - /// - private CHMTocidx _tocidxFile = null; - /// - /// Internal member storing the decoded information from the internal binary index file (KLinks). - /// - private CHMBtree _kLinks = null; - /// - /// Internal member storing the decoded information from the internal binary index file (ALinks). - /// - private CHMBtree _aLinks = null; - /// - /// Internal member storing the fulltext searcher for this file - /// - private FullTextEngine _ftSearcher = null; - /// - /// Internal member storing the default encoder - /// - private Encoding _textEncoding = Encoding.GetEncoding(1252); // standard windows-1252 encoder - /// - /// Internal memebr storing the chm file info - /// - private ChmFileInfo _chmFileInfo = null; - /// - /// Internal flag specifying if the dump must be written (if enabled) - /// - private bool _mustWriteDump = false; - /// - /// Internal flag specifying if data was read using the dump - /// - private bool _dumpRead = false; - /// - /// Internal member for specifying the number of dump-reading trys. - /// If dump-reading fails, this is used that it will not be opened a second time - /// (in CHM-Systems with CHM, CHI, etc. files) - /// - private int _dumpReadTrys = 0; - /// - /// Internal member storing the dumping info instance - /// - private DumpingInfo _dmpInfo = null; - - private CHMStream.CHMStream _currentWrapper; - private CHMStream.CHMStream _baseStream=null; - public CHMStream.CHMStream BaseStream - { - get - { - if (_baseStream==null) - _baseStream=new CHMStream.CHMStream(this.ChmFilePath); - return _baseStream; - } - } - - /// - /// Creates a new instance of the class - /// - /// a reference to the hosting HtmlHelpSystem instance - /// chm file to read - public CHMFile(HtmlHelpSystem systemInstance, string chmFile) : this(systemInstance, chmFile, false, null) - { - } - - /// - /// Creates a new instance of the class - /// - /// a reference to the hosting HtmlHelpSystem instance - /// chm file to read - /// A dumping info class - public CHMFile(HtmlHelpSystem systemInstance, string chmFile, DumpingInfo dmpInfo) : this(systemInstance, chmFile, false, dmpInfo) - { - } - - /// - /// Creates a new instance of the class - /// - /// a reference to the hosting HtmlHelpSystem instance - /// chm file to read - /// true if only system data should be extracted (no index or toc) - internal CHMFile(HtmlHelpSystem systemInstance, string chmFile, bool onlySystemData) : this(systemInstance, chmFile, onlySystemData, null) - { - } - - /// - /// Creates a new instance of the class - /// - /// a reference to the hosting HtmlHelpSystem instance - /// chm file to read - /// true if only system data should be extracted (no index or toc) - /// A dumping info class - internal CHMFile(HtmlHelpSystem systemInstance, string chmFile, bool onlySystemData, DumpingInfo dmpInfo) - { - _systemInstance = systemInstance; - _dumpReadTrys=0; - - _dmpInfo = dmpInfo; - if(dmpInfo != null) - { - dmpInfo.ChmFile = this; - } - - if( ! chmFile.ToLower().EndsWith(".chm") ) - { - throw new ArgumentException("HtmlHelp file must have the extension .chm !", "chmFile"); - } - - _chmFileName = chmFile; - _chiFileName = ""; - - // Read the IStorage file system - if( File.Exists(chmFile) ) - { - _onlySystem = onlySystemData; - - DateTime dtStartHH = DateTime.Now; - - string sCHIName = _chmFileName.Substring(0, _chmFileName.Length-3) + "chi"; - string sCHQName = _chmFileName.Substring(0, _chmFileName.Length-3) + "chq"; - string sCHWName = _chmFileName.Substring(0, _chmFileName.Length-3) + "chw"; - - // If there is a CHI file present (this file includes the internal system files for the current chm file) - if( File.Exists(sCHIName) ) - { - _chiFileName = sCHIName; - - ReadFile(_chiFileName, HtmlHelpFileType.CHI); - } - - // If there is a CHW file present (this file includes the internal binary index of the help) - if(( File.Exists(sCHWName) ) && (!_onlySystem) ) - { - _chwFileName = sCHWName; - - ReadFile(_chwFileName, HtmlHelpFileType.CHW); - } - - // If there is a CHQ file present (this file includes the fulltext-search data) - if(( File.Exists(sCHQName) ) && (!_onlySystem) ) - { - _chqFileName = sCHQName; - - ReadFile(_chqFileName, HtmlHelpFileType.CHQ); - } - - ReadFile(chmFile, HtmlHelpFileType.CHM); - - if(_mustWriteDump) - { - _mustWriteDump = !SaveDump(dmpInfo); - - } - - // check the default-topic setting - if(_systemFile.DefaultTopic.Length > 0) - { - CHMStream.CHMStream iw=null; - iw = new CHMStream.CHMStream(chmFile); - _currentWrapper=iw; - - // tryo to open the topic file - MemoryStream fileObject = iw.OpenStream( _systemFile.DefaultTopic); - if( fileObject != null) - { - // if succeed, the topic default topic is OK - fileObject.Close(); - } - else - { - // set the first topic of the toc-tree as default topic - if(_toc.Count > 0) - { - _systemFile.SetDefaultTopic( ((TOCItem) _toc[0]).Local ); - } - } - _currentWrapper=null; - } - else - { - // set the first topic of the toc-tree as default topic - if(_toc.Count > 0) - { - _systemFile.SetDefaultTopic( ((TOCItem) _toc[0]).Local ); - } - } - - _chmFileInfo = new ChmFileInfo(this); - } - else - { - throw new ArgumentException("File '" + chmFile + "' not found !", "chmFile"); - } - } - - /// - /// Read a IStorage file - /// - /// filename - /// type of file - private void ReadFile(string fname, HtmlHelpFileType type) - { - CHMStream.CHMStream iw=null; - iw=new CHMStream.CHMStream(); - iw.OpenCHM(fname); - _currentWrapper=iw; - MemoryStream fileObject=null; - - // ITStorageWrapper iw = null; - - // Open the internal chm system files and parse their content - // FileObject fileObject = null; - // iw = new ITStorageWrapper(fname, false); - - if( (type != HtmlHelpFileType.CHQ) && (type != HtmlHelpFileType.CHW) ) - { - fileObject = iw.OpenStream("#SYSTEM"); - if ((fileObject != null) && (fileObject.Length>0)) - _systemFile = new CHMSystem(fileObject.ToArray(), this); - - fileObject = iw.OpenStream("#IDXHDR"); - if ((fileObject != null) && (fileObject.Length>0)) - _idxhdrFile = new CHMIdxhdr(fileObject.ToArray(), this); - - // try to read Dump - if((!_dumpRead)&&(CheckDump(_dmpInfo))&&(_dumpReadTrys==0)) - { - _dumpReadTrys++; - _dumpRead = LoadDump(_dmpInfo); - } - - if( (!_dumpRead)||(!_dmpInfo.DumpStrings) ) - { - fileObject = iw.OpenStream( "#STRINGS"); - if ((fileObject != null) && (fileObject.Length>0)) - _stringsFile = new CHMStrings(fileObject.ToArray(), this); - } - - if( (!_dumpRead)||(!_dmpInfo.DumpUrlStr) ) - { - fileObject = iw.OpenStream( "#URLSTR"); - if ((fileObject != null) && (fileObject.Length>0)) - _urlstrFile = new CHMUrlstr(fileObject.ToArray(), this); - } - - if( (!_dumpRead)||(!_dmpInfo.DumpUrlTbl) ) - { - fileObject = iw.OpenStream( "#URLTBL"); - if ((fileObject != null) && (fileObject.Length>0)) - _urltblFile = new CHMUrltable(fileObject.ToArray(), this); - } - - if( (!_dumpRead)||(!_dmpInfo.DumpTopics) ) - { - fileObject = iw.OpenStream( "#TOPICS"); - if ((fileObject != null) && (fileObject.Length>0)) - _topicsFile = new CHMTopics(fileObject.ToArray(), this); - } - - if(!_onlySystem) - { - if( (!_dumpRead)||(!_dmpInfo.DumpBinaryTOC) ) - { - fileObject = iw.OpenStream( "#TOCIDX"); - if( (fileObject != null) && (fileObject.Length>0) && (_systemFile.BinaryTOC) ) - { - _tocidxFile = new CHMTocidx(fileObject.ToArray(), this); - _toc = _tocidxFile.TOC; - } - } - } - - if( (_systemFile != null) && (!_onlySystem) ) - { - if(!_systemFile.BinaryTOC) - { - if( (!_dumpRead)||(!_dmpInfo.DumpTextTOC) ) - { - CHMStream.chmUnitInfo HHCInfo=iw.GetFileInfoByExtension(".hhc"); - if (HHCInfo!=null) - { - fileObject = iw.OpenStream(HHCInfo); - if ((fileObject != null) && (fileObject.Length>0)) - { - ASCIIEncoding ascii=new ASCIIEncoding(); - string fileString =ascii.GetString(fileObject.ToArray(),0,(int)fileObject.Length); - - _toc = HHCParser.ParseHHC(fileString, this); - } - - if(HHCParser.HasMergeLinks) - _mergeLinks = HHCParser.MergeItems; - } - } - } - } - } - - if( type != HtmlHelpFileType.CHQ ) // no index information in CHQ files (only fulltext search) - { - if( (_systemFile != null) && (!_onlySystem) ) - { - if( ! _systemFile.BinaryIndex ) - { - if( (!_dumpRead)||(!_dmpInfo.DumpTextIndex) ) - { - fileObject = iw.OpenStream( _systemFile.IndexFile); - if ((fileObject != null) && (fileObject.Length>0)) - { - - string fileString = this.TextEncoding.GetString(fileObject.ToArray(),0,(int)fileObject.Length); - // string fileString = fileObject.ReadFromFile(this.TextEncoding); - fileObject.Close(); - - _indexKLinks = HHKParser.ParseHHK(fileString, this); - _indexKLinks.Sort(); - } - } - } - else - { - if( (!_dumpRead)||(!_dmpInfo.DumpBinaryIndex) ) - { - fileObject=iw.OpenStream(@"$WWKeywordLinks\BTree"); - if ((fileObject != null) && (fileObject.Length>0)) - { - _kLinks = new CHMBtree(fileObject.ToArray(), this); - _indexKLinks = _kLinks.IndexList; - } - - fileObject =iw.OpenStream(@"$WWAssociativeLinks\BTree"); - if ((fileObject != null) && (fileObject.Length>0)) - { - _aLinks = new CHMBtree(fileObject.ToArray(), this); - _indexALinks = _aLinks.IndexList; - _indexALinks.Sort(); - } - } - } - } - } - - if( (type != HtmlHelpFileType.CHI) && (type != HtmlHelpFileType.CHW) ) - { - if( (_systemFile != null) && (!_onlySystem) ) - { - if( _systemFile.FullTextSearch) - { - if( (!_dumpRead)||(!_dmpInfo.DumpFullText) ) - { - fileObject = iw.OpenStream("$FIftiMain"); - if(( fileObject != null) && (fileObject .Length>0)) - _ftSearcher = new FullTextEngine(fileObject .ToArray(), this); - } - } - } - } - _currentWrapper=null; - } - - /// - /// Enumerates the files in the chm storage and gets all files matching a given extension. - /// - /// extension to return - /// Returns an arraylist of filenames or null if nothing found - /// On large CHMs, enumerations are very slow. Only use it if necessary ! - internal ArrayList EnumFilesByExtension(string extension) - { - ArrayList arrRet = new ArrayList(); - - CHMStream.CHMStream iw = null; - if(_currentWrapper == null) - iw = new CHMStream.CHMStream(_chmFileName); - else - iw = _currentWrapper; - - arrRet=iw.GetFileListByExtenstion(extension); - - if(arrRet.Count > 0) - return arrRet; - - return null; - } - - /// - /// Searches an TOC entry using the local - /// - /// local to search - /// Returns the TOC item - internal TOCItem GetTOCItemByLocal(string local) - { - return GetTOCItemByLocal(this.TOC, local); - } - - /// - /// Recursively searches an TOC entry using its local - /// - /// toc level list - /// local to search - /// Returns the TOC item - private TOCItem GetTOCItemByLocal(ArrayList arrTOC, string local) - { - TOCItem ret = null; - foreach(TOCItem curItem in arrTOC) - { - string scL = curItem.Local.ToLower(); - string sL = local.ToLower(); - - while(scL[0]=='/') // delete prefixing '/' - scL = scL.Substring(1); - - while(sL[0]=='/') // delete prefixing '/' - sL = sL.Substring(1); - - if(scL == sL) - return curItem; - - if(curItem.Children.Count > 0) - { - ret = GetTOCItemByLocal(curItem.Children, local); - if(ret != null) - return ret; - } - } - - return ret; - } - - /// - /// Removes a TOCItem from the toc - /// - /// item to remove - /// Returns true if removed - internal bool RemoveTOCItem(TOCItem rem) - { - if(rem == null) - return false; - - return RemoveTOCItem(this.TOC, rem); - } - - /// - /// Recursively searches a TOCItem and removes it if found - /// - /// toc level list - /// item to remove - /// Returns true if removed - private bool RemoveTOCItem(ArrayList arrTOC, TOCItem rem) - { - for(int i=0; i 0) - { - bool bRem = RemoveTOCItem(curItem.Children, rem); - if(bRem) - return true; - } - } - - return false; - } - - /// - /// Returns true if the HtmlHelpSystem instance contains 1 or more information types - /// - public bool HasInformationTypes - { - get { return (_informationTypes.Count>0); } - } - - /// - /// Returns true if the HtmlHelpSystem instance contains 1 or more categories - /// - public bool HasCategories - { - get { return (_categories.Count>0); } - } - - /// - /// Gets an ArrayList of InformationType items - /// - public ArrayList InformationTypes - { - get { return _informationTypes; } - } - - /// - /// Gets an ArrayList of Category items - /// - public ArrayList Categories - { - get { return _categories; } - } - - /// - /// Gets the information type specified by its name - /// - /// name of the information type to receive - /// Returns the Instance for the name or null if not found - public InformationType GetInformationType(string name) - { - if(HasInformationTypes) - { - for(int i=0; i<_informationTypes.Count;i++) - { - InformationType iT = _informationTypes[i] as InformationType; - - if(iT.Name == name) - return iT; - } - } - - return null; - } - - /// - /// Gets the category specifiyd by its name - /// - /// name of the category - /// Returns the Instance for the name or null if not found - public Category GetCategory(string name) - { - if(HasCategories) - { - for(int i=0; i<_categories.Count;i++) - { - Category cat = _categories[i] as Category; - - if(cat.Name == name) - return cat; - } - } - - return null; - } - - #region Dumping methods - - /// - /// Checks if a dump for this file exists and if it can be read - /// - /// dumping info class - /// true if it can be read - private bool CheckDump(DumpingInfo dmpInfo) - { - if(_dumpReadTrys<=0) - _mustWriteDump = false; - - if(_onlySystem) - return false; - - if( dmpInfo != null ) - { - if(_dumpReadTrys > 0) - return _mustWriteDump; - - _mustWriteDump = !dmpInfo.DumpExists; - return !_mustWriteDump; - } - - return false; - } - - /// - /// Saves the the toc and index into a data dump - /// - /// dumping info - /// true if succeed - private bool SaveDump(DumpingInfo dmpInfo) - { - if(dmpInfo == null) - return false; - - bool bRet = false; - - - BinaryWriter writer = dmpInfo.Writer; - - int nCnt = 0; - try - { - Debug.WriteLine("writing dump-file header"); - FileInfo fi = new FileInfo(_chmFileName); - string ftime = fi.LastWriteTime.ToString("dd.MM.yyyy HH:mm:ss.ffffff"); - - writer.Write("HtmlHelpSystem dump file 1.0"); - writer.Write(ftime); - writer.Write(_textEncoding.CodePage); - - // strings dumping - if(dmpInfo.DumpStrings) - { - writer.Write(true); // data should be in dump - - if(_stringsFile==null) - { - writer.Write(false); // data not supported by the chm - } - else - { - Debug.WriteLine("writing #STRINGS"); - writer.Write(true); // data supported and following - _stringsFile.Dump(ref writer); - } - } - else - { - writer.Write(false); // data is not in dump - } - - // urlstr dumping - if(dmpInfo.DumpUrlStr) - { - writer.Write(true); - - if(_urlstrFile==null) - { - writer.Write(false); - } - else - { - Debug.WriteLine("writing #URLSTR"); - writer.Write(true); - _urlstrFile.Dump(ref writer); - } - } - else - { - writer.Write(false); - } - - // urltbl dumping - if(dmpInfo.DumpUrlTbl) - { - writer.Write(true); - - if(_urltblFile==null) - { - writer.Write(false); - } - else - { - Debug.WriteLine("writing #URLTBL"); - writer.Write(true); - _urltblFile.Dump(ref writer); - } - } - else - { - writer.Write(false); - } - - // topics dumping - if(dmpInfo.DumpTopics) - { - writer.Write(true); - - if(_topicsFile==null) - { - writer.Write(false); - } - else - { - Debug.WriteLine("writing #TOPICS"); - writer.Write(true); - _topicsFile.Dump(ref writer); - } - } - else - { - writer.Write(false); - } - - // ftsearch dumping - if(dmpInfo.DumpFullText) - { - writer.Write(true); - - if(_ftSearcher==null) - { - writer.Write(false); - } - else - { - Debug.WriteLine("writing $FIftiMain"); - writer.Write(true); - _ftSearcher.Dump(ref writer); - } - } - else - { - writer.Write(false); - } - - // TOC dumping - bool bWriteTOC = false; - - if( (_systemFile.BinaryTOC) && (dmpInfo.DumpBinaryTOC) ) - { - Debug.WriteLine("writing binary TOC"); - bWriteTOC = true; - } - - if( (!_systemFile.BinaryTOC) && (dmpInfo.DumpTextTOC) ) - { - Debug.WriteLine("writing text-based TOC"); - bWriteTOC = true; - } - - writer.Write(bWriteTOC); - - if(bWriteTOC) - { - // write table of contents - writer.Write( _toc.Count ); - - for(nCnt=0; nCnt < _toc.Count; nCnt++) - { - TOCItem curItem = ((TOCItem)(_toc[nCnt])); - curItem.Dump( ref writer ); - } - } - - // Index dumping - bool bWriteIdx = false; - - if( (_systemFile.BinaryIndex) && (dmpInfo.DumpBinaryIndex) ) - { - Debug.WriteLine("writing binary index"); - bWriteIdx = true; - } - - if( (!_systemFile.BinaryIndex) && (dmpInfo.DumpTextIndex) ) - { - Debug.WriteLine("writing text-based index"); - bWriteIdx = true; - } - - writer.Write(bWriteIdx); - - if(bWriteIdx) - { - // write index - writer.Write( _indexALinks.Count ); - for(nCnt=0; nCnt < _indexALinks.Count; nCnt++) - { - IndexItem curItem = ((IndexItem)(_indexALinks[nCnt])); - curItem.Dump( ref writer ); - } - - writer.Write( _indexKLinks.Count ); - for(nCnt=0; nCnt < _indexKLinks.Count; nCnt++) - { - IndexItem curItem = ((IndexItem)(_indexKLinks[nCnt])); - curItem.Dump( ref writer ); - } - } - - // Information types dumping - writer.Write( _informationTypes.Count ); - - Debug.WriteLine("writing " + _informationTypes.Count.ToString() + " information types"); - - for(nCnt=0; nCnt<_informationTypes.Count;nCnt++) - { - InformationType curType = _informationTypes[nCnt] as InformationType; - - curType.Dump(ref writer); - } - - // Categories dumping - writer.Write( _categories.Count ); - - Debug.WriteLine("writing " + _categories.Count.ToString() + " categories"); - - for(nCnt=0; nCnt<_categories.Count; nCnt++) - { - Category curCat = _categories[nCnt] as Category; - - curCat.Dump( ref writer); - } - - bRet=true; - } - finally - { - dmpInfo.SaveData(); - } - - return bRet; - } - - /// - /// Parses a HHC file which is located in the current CHM. - /// - /// hhc file to parse - /// an arraylist with toc items - public ArrayList ParseHHC(string hhcFile) - { - ArrayList arrRet = new ArrayList(); - - CHMStream.CHMStream iw=null; - iw=new CHMStream.CHMStream(); - iw.OpenCHM(_chmFileName); - MemoryStream fileObject=null; - - fileObject = iw.OpenStream(hhcFile); - if( fileObject != null) - { - ASCIIEncoding ascii=new ASCIIEncoding(); - string fileString =ascii.GetString(fileObject.ToArray(),0,(int)fileObject.Length); - fileObject.Close(); - - arrRet = HHCParser.ParseHHC(fileString, this); - - if(HHCParser.HasMergeLinks) - { - foreach(TOCItem curItem in HHCParser.MergeItems) - { - _mergeLinks.Add(curItem); - } - } - } - - return arrRet; - } - - /// - /// Loads the toc and index from a data dump - /// - /// dumping info - /// true if succeed - private bool LoadDump(DumpingInfo dmpInfo) - { - if(dmpInfo == null) - return false; - - bool bRet = false; - - try - { - BinaryReader reader = dmpInfo.Reader; - - if(reader == null) - { - Debug.WriteLine("No reader returned !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; - } - - int nCnt = 0; - - Debug.WriteLine("reading dump-file header"); - FileInfo fi = new FileInfo(_chmFileName); - string ftime = fi.LastWriteTime.ToString("dd.MM.yyyy HH:mm:ss.ffffff"); - - string header = reader.ReadString(); - - if( header != "HtmlHelpSystem dump file 1.0") - { - Debug.WriteLine("Unsupported dump-file format !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; - } - - string ftimecheck = reader.ReadString(); - - reader.ReadInt32(); // codepage, we'll use the same as for the chm file which is already set. - -// if(ftimecheck != ftime) -// { -// Debug.WriteLine("Dump is out of date (CHM file changed during last dump creation) !"); -// dmpInfo.SaveData(); // closes the dump -// _mustWriteDump = true; -// return false; // force reload -// } - - - bool bFlag=false; // true if data should be in dump - bool bFlagSupp=false; // false if data is not supported by the chm - - bFlag = reader.ReadBoolean(); - - if(bFlag) - { - bFlagSupp = reader.ReadBoolean(); - - if(!dmpInfo.DumpStrings) - { - Debug.WriteLine("Dumped #STRINGS found but not expected !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if(bFlagSupp) - { - Debug.WriteLine("reading #STRINGS"); - _stringsFile = new CHMStrings(); - _stringsFile.SetCHMFile(this); - _stringsFile.ReadDump(ref reader); - } - } - else - { - if(dmpInfo.DumpStrings) - { - Debug.WriteLine("Dumped #STRINGS expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - } - - bFlag = reader.ReadBoolean(); - - if(bFlag) - { - bFlagSupp = reader.ReadBoolean(); - - if(!dmpInfo.DumpUrlStr) - { - Debug.WriteLine("Dumped #URLSTR found but not expected !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if(bFlagSupp) - { - Debug.WriteLine("reading #URLSTR"); - _urlstrFile = new CHMUrlstr(); - _urlstrFile.SetCHMFile(this); - _urlstrFile.ReadDump(ref reader); - } - } - else - { - if(dmpInfo.DumpUrlStr) - { - Debug.WriteLine("Dumped #URLSTR expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - } - - bFlag = reader.ReadBoolean(); - - if(bFlag) - { - bFlagSupp = reader.ReadBoolean(); - - if(!dmpInfo.DumpUrlTbl) - { - Debug.WriteLine("Dumped #URLTBL found but not expected !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if(bFlagSupp) - { - Debug.WriteLine("reading #URLTBL"); - _urltblFile = new CHMUrltable(); - _urltblFile.SetCHMFile(this); - _urltblFile.ReadDump(ref reader); - } - } - else - { - if(dmpInfo.DumpUrlTbl) - { - Debug.WriteLine("Dumped #URLTBL expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - } - - bFlag = reader.ReadBoolean(); - - if(bFlag) - { - bFlagSupp = reader.ReadBoolean(); - - if(!dmpInfo.DumpTopics) - { - Debug.WriteLine("Dumped #TOPICS found but not expected !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if(bFlagSupp) - { - Debug.WriteLine("reading #TOPICS"); - _topicsFile = new CHMTopics(); - _topicsFile.SetCHMFile(this); - _topicsFile.ReadDump(ref reader); - } - } - else - { - if(dmpInfo.DumpTopics) - { - Debug.WriteLine("Dumped #TOPICS expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - } - - bFlag = reader.ReadBoolean(); - - if(bFlag) - { - bFlagSupp = reader.ReadBoolean(); - - if(!dmpInfo.DumpFullText) - { - Debug.WriteLine("Dumped $FIftiMain found but not expected !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if(bFlagSupp) - { - Debug.WriteLine("reading $FIftiMain"); - _ftSearcher = new FullTextEngine(); - _ftSearcher.SetCHMFile(this); - _ftSearcher.ReadDump(ref reader); - } - } - else - { - if(dmpInfo.DumpFullText) - { - Debug.WriteLine("Dumped $FIftiMain expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - } - - // read table of contents - _toc.Clear(); - bFlag = reader.ReadBoolean(); - - if(bFlag) - { - if((_systemFile.BinaryTOC)&&(!dmpInfo.DumpBinaryTOC)) - { - Debug.WriteLine("Binary TOC expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if((!_systemFile.BinaryTOC)&&(!dmpInfo.DumpTextTOC)) - { - Debug.WriteLine("Text-based TOC expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if(_systemFile.BinaryTOC) - Debug.WriteLine("reading binary TOC"); - else - Debug.WriteLine("reading text-based TOC"); - - int nTocCnt = reader.ReadInt32(); - - for(nCnt=0; nCnt < nTocCnt; nCnt++) - { - TOCItem item = new TOCItem(); - item.AssociatedFile = this; - item.ChmFile = _chmFileName; - item.ReadDump(ref reader); - if(item.MergeLink.Length > 0) - _mergeLinks.Add(item); - - _toc.Add(item); - } - } - else - { - if((_systemFile.BinaryTOC)&&(dmpInfo.DumpBinaryTOC)) - { - Debug.WriteLine("Binary TOC expected but no TOC dump !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if((!_systemFile.BinaryTOC)&&(dmpInfo.DumpTextTOC)) - { - Debug.WriteLine("Text-based TOC expected but no TOC dump !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - } - - // read index - _indexALinks.Clear(); - _indexKLinks.Clear(); - - bFlag = reader.ReadBoolean(); - - if(bFlag) - { - if((_systemFile.BinaryIndex)&&(!dmpInfo.DumpBinaryIndex)) - { - Debug.WriteLine("Binary index expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if((!_systemFile.BinaryIndex)&&(!dmpInfo.DumpTextIndex)) - { - Debug.WriteLine("Binary index expected but not found !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if(_systemFile.BinaryIndex) - Debug.WriteLine("reading binary index"); - else - Debug.WriteLine("reading text-based index"); - - int nIndxaCnt = reader.ReadInt32(); - - for(nCnt=0; nCnt < nIndxaCnt; nCnt++) - { - IndexItem item = new IndexItem(); - item.ChmFile = this; - item.ReadDump(ref reader); - _indexALinks.Add(item); - } - - - int nIndxkCnt = reader.ReadInt32(); - - for(nCnt=0; nCnt < nIndxkCnt; nCnt++) - { - IndexItem item = new IndexItem(); - item.ChmFile = this; - item.ReadDump(ref reader); - _indexKLinks.Add(item); - } - } - else - { - if((_systemFile.BinaryIndex)&&(dmpInfo.DumpBinaryIndex)) - { - Debug.WriteLine("Binary index expected but no index in dump !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - - if((!_systemFile.BinaryIndex)&&(dmpInfo.DumpTextIndex)) - { - Debug.WriteLine("Text-based index expected but no index dump !"); - dmpInfo.SaveData(); // closes the dump - _mustWriteDump = true; - return false; // force reload - } - } - - // read information types from dump - int nITCnt = reader.ReadInt32(); - - Debug.WriteLine("Reading " + nITCnt.ToString() + " information types from dump !"); - - for(nCnt=0; nCnt - /// Gets the current storage wrapper. - /// - /// This property will return not null, if there are currently file read actions running ! - internal CHMStream.CHMStream CurrentStorageWrapper - { - get { return _currentWrapper;} - } - /// - /// Gets/sets the hosting HtmlHelpSystem instance - /// - internal HtmlHelpSystem SystemInstance - { - get { return _systemInstance; } - set { _systemInstance = value; } - } - /// - /// Gets an arraylist of TOC items which contains merg-links to other CHMs - /// - internal ArrayList MergLinks - { - get { return _mergeLinks; } - } - - /// - /// Gets the internal system file instance - /// - internal CHMSystem SystemFile - { - get { return _systemFile; } - } - - /// - /// Gets the internal idxhdr file instance - /// - internal CHMIdxhdr IdxHdrFile - { - get { return _idxhdrFile; } - } - - /// - /// Gets the internal strings file instance - /// - internal CHMStrings StringsFile - { - get { return _stringsFile; } - } - - /// - /// Gets the internal urlstr file instance - /// - internal CHMUrlstr UrlstrFile - { - get { return _urlstrFile; } - } - - /// - /// Gets the internal urltbl file instance - /// - internal CHMUrltable UrltblFile - { - get { return _urltblFile; } - } - - /// - /// Gets the internal topics file instance - /// - internal CHMTopics TopicsFile - { - get { return _topicsFile; } - } - - /// - /// Gets the internal tocidx file instance - /// - internal CHMTocidx TocidxFile - { - get { return _tocidxFile; } - } - - /// - /// Gets the internal btree file instance for alinks - /// - internal CHMBtree ALinksFile - { - get { return _aLinks; } - } - - /// - /// Gets the internal btree file instance for klinks - /// - internal CHMBtree KLinksFile - { - get { return _kLinks; } - } - - /// - /// Gets/Sets the text encoding - /// - internal Encoding TextEncoding - { - get { return _textEncoding; } - set { _textEncoding = value; } - } - - #endregion - - #region Properties from the #SYSTEM file - /// - /// Gets the file version of the chm file. - /// 2 for Compatibility=1.0, 3 for Compatibility=1.1 - /// - internal int FileVersion - { - get - { - if(_systemFile==null) - return 0; - - return _systemFile.FileVersion; - } - } - - /// - /// Gets the contents file name - /// - internal string ContentsFile - { - get - { - if(_systemFile==null) - return String.Empty; - - return _systemFile.ContentsFile; - } - } - - /// - /// Gets the index file name - /// - internal string IndexFile - { - get - { - if(_systemFile==null) - return String.Empty; - - return _systemFile.IndexFile; - } - } - - /// - /// Gets the default help topic - /// - internal string DefaultTopic - { - get - { - if(_systemFile==null) - return String.Empty; - - return _systemFile.DefaultTopic; - } - } - - /// - /// Gets the title of the help window - /// - internal string HelpWindowTitle - { - get - { - if(_systemFile==null) - return String.Empty; - - return _systemFile.Title; - } - } - - /// - /// Gets the flag if DBCS is in use - /// - internal bool DBCS - { - get - { - if(_systemFile==null) - return false; - - return _systemFile.DBCS; - } - } - - /// - /// Gets the flag if full-text-search is available - /// - internal bool FullTextSearch - { - get - { - if(_systemFile==null) - return false; - - return _systemFile.FullTextSearch; - } - } - - /// - /// Gets the flag if the file has ALinks - /// - internal bool HasALinks - { - get - { - if(_systemFile==null) - return false; - - return _systemFile.HasALinks; - } - } - - /// - /// Gets the flag if the file has KLinks - /// - internal bool HasKLinks - { - get - { - if(_systemFile==null) - return false; - - return _systemFile.HasKLinks; - } - } - - /// - /// Gets the default window name - /// - internal string DefaultWindow - { - get - { - if(_systemFile==null) - return String.Empty; - - return _systemFile.DefaultWindow; - } - } - - /// - /// Gets the file name of the compile file - /// - internal string CompileFile - { - get - { - if(_systemFile==null) - return String.Empty; - - return _systemFile.CompileFile; - } - } - - /// - /// Gets the flag if the chm has a binary index file - /// - internal bool BinaryIndex - { - get - { - if(_systemFile==null) - return false; - - return _systemFile.BinaryIndex; - } - } - - /// - /// Gets the flag if the chm has a binary index file - /// - internal string CompilerVersion - { - get - { - if(_systemFile==null) - return String.Empty; - - return _systemFile.CompilerVersion; - } - } - - /// - /// Gets the flag if the chm has a binary toc file - /// - internal bool BinaryTOC - { - get - { - if(_systemFile==null) - return false; - - return _systemFile.BinaryTOC; - } - } - - /// - /// Gets the font face of the read font property. - /// Empty string for default font. - /// - internal string FontFace - { - get - { - if(_systemFile==null) - return ""; - - return _systemFile.FontFace; - } - } - - /// - /// Gets the font size of the read font property. - /// 0 for default font size - /// - internal double FontSize - { - get - { - if(_systemFile==null) - return 0; - - return _systemFile.FontSize; - } - } - - /// - /// Gets the character set of the read font property - /// 1 for default - /// - internal int CharacterSet - { - get - { - if(_systemFile==null) - return 1; - - return _systemFile.CharacterSet; - } - } - - /// - /// Gets the codepage depending on the read font property - /// - internal int CodePage - { - get - { - if(_systemFile==null) - return CultureInfo.CurrentCulture.TextInfo.ANSICodePage; - - return _systemFile.CodePage; - } - } - - /// - /// Gets the assiciated culture info - /// - internal CultureInfo Culture - { - get - { - if(_systemFile==null) - return CultureInfo.CurrentCulture; - - return _systemFile.Culture; - } - } - - #endregion - - #region Properties from the #IDXHDR file - /// - /// Gets the number of topic nodes including the contents and index files - /// - internal int NumberOfTopicNodes - { - get - { - if(_idxhdrFile==null) - return 0; - - return _idxhdrFile.NumberOfTopicNodes; - } - } - - /// - /// Gets the ImageList string specyfied in the #IDXHDR file. - /// - /// This property uses the #STRINGS file to extract the string at a given offset. - internal string ImageList - { - get - { - if( (_stringsFile == null) || (_idxhdrFile == null) ) - return ""; - - return _stringsFile[ _idxhdrFile.ImageListOffset ]; - } - } - - /// - /// True if the value of the ImageType param of the - /// "text/site properties" object of the sitemap contents is "Folder". - /// - /// If this is set to true, the help will display folders instead of books - internal bool ImageTypeFolder - { - get - { - if(_idxhdrFile==null) - return false; - - return _idxhdrFile.ImageTypeFolder; - } - } - - /// - /// Gets the background setting - /// - internal int Background - { - get - { - if(_idxhdrFile==null) - return 0; - - return _idxhdrFile.Background; - } - } - - /// - /// Gets the foreground setting - /// - internal int Foreground - { - get - { - if(_idxhdrFile==null) - return 0; - - return _idxhdrFile.Foreground; - } - } - - /// - /// Gets the Font string specyfied in the #IDXHDR file. - /// - /// This property uses the #STRINGS file to extract the string at a given offset. - internal string FontName - { - get - { - if( (_stringsFile == null) || (_idxhdrFile == null) ) - return ""; - - return _stringsFile[ _idxhdrFile.FontOffset ]; - } - } - - /// - /// Gets the FrameName string specyfied in the #IDXHDR file. - /// - /// This property uses the #STRINGS file to extract the string at a given offset. - internal string FrameName - { - get - { - if( (_stringsFile == null) || (_idxhdrFile == null) ) - return ""; - - return _stringsFile[ _idxhdrFile.FrameNameOffset ]; - } - } - - /// - /// Gets the WindowName string specyfied in the #IDXHDR file. - /// - /// This property uses the #STRINGS file to extract the string at a given offset. - internal string WindowName - { - get - { - if( (_stringsFile == null) || (_idxhdrFile == null) ) - return ""; - - return _stringsFile[ _idxhdrFile.WindowNameOffset ]; - } - } - - /// - /// Gets a string array containing the merged file names - /// - internal string[] MergedFiles - { - get - { - if( (_stringsFile == null) || (_idxhdrFile == null) ) - return new string[0]; - - string[] saRet = new string[ _idxhdrFile.MergedFileOffsets.Count ]; - - for(int i=0; i < _idxhdrFile.MergedFileOffsets.Count; i++) - { - saRet[i] = _stringsFile[ (int)_idxhdrFile.MergedFileOffsets[i] ]; - } - - return saRet; - } - } - #endregion - - /// - /// Gets the file info associated with this instance - /// - public ChmFileInfo FileInfo - { - get { return _chmFileInfo; } - } - - /// - /// Gets the internal toc read from the text-based hhc file - /// - public ArrayList TOC - { - get { return _toc; } - } - - /// - /// Gets the internal index read from the chm file. - /// - public ArrayList IndexKLinks - { - get { return _indexKLinks; } - } - - /// - /// Gets the internal index read from the chm file. - /// - public ArrayList IndexALinks - { - get { return _indexALinks; } - } - - /// - /// Gets the full-text search engine for this file - /// - internal FullTextEngine FullTextSearchEngine - { - get { return _ftSearcher; } - } - - /// - /// Gets the full pathname of the file - /// - public string ChmFilePath - { - get { return _chmFileName; } - } - - /// - /// Gets the full pathname of the chi-file - /// The file name is zero-length if there is no chi-file - /// - public string ChiFilePath - { - get { return _chiFileName; } - } - - /// - /// Gets the full pathname of the chw-file - /// The file name is zero-length if there is no chw-file - /// - public string ChwFilePath - { - get { return _chwFileName; } - } - - /// - /// Gets the full pathname of the chq-file - /// The file name is zero-length if there is no chq-file - /// - public string ChqFilePath - { - get { return _chqFileName; } - } - - /// - /// Forms an URL for the web browser - /// - /// local resource - /// a url for the web-browser - internal string FormURL(string local) - { - if( (local.ToLower().IndexOf("http://") >= 0) || - (local.ToLower().IndexOf("https://") >= 0) || - (local.ToLower().IndexOf("mailto:") >= 0) || - (local.ToLower().IndexOf("ftp://") >= 0) || - (local.ToLower().IndexOf("ms-its:") >= 0)) - return local; - - return HtmlHelpSystem.UrlPrefix + _chmFileName + "::/" + local; - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _toc.Clear(); - _indexKLinks.Clear(); - _indexALinks.Clear(); - - if(_systemFile!=null) - _systemFile.Dispose(); - - if(_idxhdrFile != null) - _idxhdrFile.Dispose(); - - if(_stringsFile != null) - _stringsFile.Dispose(); - - if(_urlstrFile != null) - _urlstrFile.Dispose(); - - if(_urltblFile != null) - _urltblFile.Dispose(); - - if(_topicsFile != null) - _topicsFile.Dispose(); - - if(_tocidxFile != null) - _tocidxFile.Dispose(); - - if(_kLinks != null) - _kLinks.Dispose(); - - if(_aLinks != null) - _aLinks.Dispose(); - - if(_ftSearcher != null) - _ftSearcher.Dispose(); - - if(_chmFileInfo != null) - _chmFileInfo = null; - } - } - disposed = true; - } - - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/CHMIdxhdr.cs b/irc/TechBot/CHMLibrary/CHMDecoding/CHMIdxhdr.cs deleted file mode 100644 index 7ac64ac3ea7..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/CHMIdxhdr.cs +++ /dev/null @@ -1,286 +0,0 @@ -using System; -using System.Collections; -using System.IO; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class CHMIdxhdr implements t properties which have been read from the #IDXHDR file. - /// - internal sealed class CHMIdxhdr : IDisposable - { - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal member storing the number of topic nodes including the contents and index files - /// - private int _numberOfTopicNodes = 0; - /// - /// Internal member storing the offset in the #STRINGS file of the ImageList param of the "text/site properties" object of the sitemap contents - /// - private int _imageListOffset = 0; - /// - /// True if the value of the ImageType param of the "text/site properties" object of the sitemap contents is "Folder". - /// - private bool _imageTypeFolder = false; - /// - /// Internal member storing the background value - /// - private int _background = 0; - /// - /// Internal member storing the foreground value - /// - private int _foreground = 0; - /// - /// Internal member storing the offset in the #STRINGS file of the Font param of the "text/site properties" object of the sitemap contents - /// - private int _fontOffset = 0; - /// - /// Internal member storing the offset in the #STRINGS file of the FrameName param of the "text/site properties" object of the sitemap contents - /// - private int _frameNameOffset = 0; - /// - /// Internal member storing the offset in the #STRINGS file of the WindowName param of the "text/site properties" object of the sitemap contents - /// - private int _windowNameOffset = 0; - /// - /// Internal member storing the number of merged files - /// - private int _numberOfMergedFiles = 0; - /// - /// Internal member storing the offset in the #STRINGS file of the merged file names - /// - private ArrayList _mergedFileOffsets = new ArrayList(); - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor of the class - /// - /// binary file data of the #IDXHDR file - /// associated CHMFile instance - public CHMIdxhdr(byte[] binaryFileData, CHMFile associatedFile) - { - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - DecodeData(); - } - - /// - /// Decodes the binary file data and fills the internal properties - /// - /// true if succeeded - private bool DecodeData() - { - bool bRet = true; - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - int nTemp = 0; - - // 4 character T#SM - binReader.ReadBytes(4); - // unknown timestamp DWORD - nTemp = binReader.ReadInt32(); - - // unknown 1 - nTemp = binReader.ReadInt32(); - - // number of topic nodes including the contents & index files - _numberOfTopicNodes = binReader.ReadInt32(); - - // unknown DWORD - nTemp = binReader.ReadInt32(); - - // offset in the strings file - _imageListOffset = binReader.ReadInt32(); - if( _imageListOffset == 0) - _imageListOffset = -1; // 0/-1 = none - - // unknown DWORD - nTemp = binReader.ReadInt32(); - - // 1 if the value of the ImageType param of the "text/site properties" object of the sitemap contents is "Folder". - nTemp = binReader.ReadInt32(); - _imageTypeFolder = (nTemp == 1); - - // offset in the strings file - _background = binReader.ReadInt32(); - // offset in the strings file - _foreground = binReader.ReadInt32(); - - // offset in the strings file - _fontOffset = binReader.ReadInt32(); - - // window styles DWORD - nTemp = binReader.ReadInt32(); - // window styles DWORD - nTemp = binReader.ReadInt32(); - - // unknown DWORD - nTemp = binReader.ReadInt32(); - - // offset in the strings file - _frameNameOffset = binReader.ReadInt32(); - if( _frameNameOffset == 0) - _frameNameOffset = -1; // 0/-1 = none - // offset in the strings file - _windowNameOffset = binReader.ReadInt32(); - if( _windowNameOffset == 0) - _windowNameOffset = -1; // 0/-1 = none - - // informations types DWORD - nTemp = binReader.ReadInt32(); - - // unknown DWORD - nTemp = binReader.ReadInt32(); - - // number of merged files in the merged file list DWORD - _numberOfMergedFiles = binReader.ReadInt32(); - - nTemp = binReader.ReadInt32(); - - for(int i = 0; i < _numberOfMergedFiles; i++) - { - // DWORD offset value of merged file - nTemp = binReader.ReadInt32(); - - if(nTemp > 0) - _mergedFileOffsets.Add(nTemp); - } - - return bRet; - } - - /// - /// Gets the number of topic nodes including the contents and index files - /// - public int NumberOfTopicNodes - { - get { return _numberOfTopicNodes; } - } - - /// - /// Gets the offset in the #STRINGS file of the ImageList - /// param of the "text/site properties" object of the sitemap contents - /// - public int ImageListOffset - { - get { return _imageListOffset; } - } - - /// - /// True if the value of the ImageType param of the - /// "text/site properties" object of the sitemap contents is "Folder". - /// - /// If this is set to true, the help will display folders instead of books - public bool ImageTypeFolder - { - get { return _imageTypeFolder; } - } - - /// - /// Gets the background setting - /// - public int Background - { - get { return _background; } - } - - /// - /// Gets the foreground setting - /// - public int Foreground - { - get { return _foreground; } - } - - /// - /// Gets the offset in the #STRINGS file of the Font - /// param of the "text/site properties" object of the sitemap contents - /// - public int WindowNameOffset - { - get { return _fontOffset; } - } - - /// - /// Gets the offset in the #STRINGS file of the FrameName - /// param of the "text/site properties" object of the sitemap contents - /// - public int FrameNameOffset - { - get { return _frameNameOffset; } - } - - /// - /// Gets the offset in the #STRINGS file of the WindowName - /// param of the "text/site properties" object of the sitemap contents - /// - public int FontOffset - { - get { return _windowNameOffset; } - } - - /// - /// Gets an array list of offset numbers in the #STRINGS file of the - /// merged file names. - /// - public ArrayList MergedFileOffsets - { - get { return _mergedFileOffsets; } - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - _mergedFileOffsets = null; - } - - - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/CHMStrings.cs b/irc/TechBot/CHMLibrary/CHMDecoding/CHMStrings.cs deleted file mode 100644 index 5942d4e8cfe..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/CHMStrings.cs +++ /dev/null @@ -1,256 +0,0 @@ -using System; -using System.IO; -using System.Collections; -using System.Collections.Specialized; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class CHMStrings implements a string collection read from the #STRINGS file - /// - internal sealed class CHMStrings : IDisposable - { - /// - /// Constant specifying the size of the string blocks - /// - private const int STRING_BLOCK_SIZE = 4096; - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal member storing the string dictionary - /// - private Hashtable _stringDictionary = new Hashtable(); - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor of the class - /// - /// binary file data of the #STRINGS file - /// associated chm file - public CHMStrings(byte[] binaryFileData, CHMFile associatedFile) - { - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - DecodeData(); - } - - - /// - /// Standard constructor - /// - internal CHMStrings() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( _stringDictionary.Count ); - - if (_stringDictionary.Count != 0) - { - IDictionaryEnumerator iDictionaryEnumerator = _stringDictionary.GetEnumerator(); - while (iDictionaryEnumerator.MoveNext()) - { - DictionaryEntry dictionaryEntry = (DictionaryEntry)iDictionaryEnumerator.Current; - writer.Write( Int32.Parse(dictionaryEntry.Key.ToString()) ); - writer.Write( dictionaryEntry.Value.ToString() ); - } - } - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - int nCnt = reader.ReadInt32(); - - for(int i=0; i - /// Sets the associated CHMFile instance - /// - /// instance to set - internal void SetCHMFile(CHMFile associatedFile) - { - _associatedFile = associatedFile; - } - #endregion - - /// - /// Decodes the binary file data and fills the internal properties - /// - /// true if succeeded - private bool DecodeData() - { - bool bRet = true; - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - //binReader.ReadByte(); // file starts with a NULL character for 0-based offset indexing - - int nStringOffset = 0; - int nSubsetOffset = 0; - - while( (memStream.Position < memStream.Length) && (bRet) ) - { - nStringOffset = (int)memStream.Position; - byte [] stringBlock = binReader.ReadBytes(STRING_BLOCK_SIZE); - bRet &= DecodeBlock(stringBlock, ref nStringOffset, ref nSubsetOffset); - } - - return bRet; - } - - /// - /// Decodes a string block - /// - /// byte array which represents the string block - /// current string offset number - /// reference to a subset variable - /// true if succeeded - /// If a string crosses the end of a block then it will be cut off - /// without a NT and repeated in full, with a NT, at the start of the next block. - /// For eg "To customize the appearance of a contents file" might become - /// "To customize the (block ending)To customize the appearance of a contents file" - /// when there are 17 bytes left at the end of the block. - private bool DecodeBlock( byte[] stringBlock, ref int nStringOffset, ref int nSubsetOffset) - { - bool bRet = true; - - MemoryStream memStream = new MemoryStream(stringBlock); - BinaryReader binReader = new BinaryReader(memStream); - - while( (memStream.Position < memStream.Length) && (bRet) ) - { - bool bFoundTerminator = false; - - int nCurOffset = nStringOffset + (int)memStream.Position; - - string sTemp = BinaryReaderHelp.ExtractString(ref binReader, ref bFoundTerminator, 0, true, _associatedFile.TextEncoding); - - if(nSubsetOffset != 0) - { - _stringDictionary[nSubsetOffset.ToString()] = sTemp.ToString(); - } - else - { - _stringDictionary[nCurOffset.ToString()] = sTemp.ToString(); - } - - if( bFoundTerminator ) - { - nSubsetOffset = 0; - } - else - { - nSubsetOffset = nCurOffset; - } - } - - return bRet; - } - - /// - /// Indexer which returns the string at a given offset - /// - public string this[int offset] - { - get - { - if(offset == -1) - return String.Empty; - - string sTemp = (string)_stringDictionary[ offset.ToString() ]; - - if(sTemp == null) - return String.Empty; - - return sTemp; - } - } - - /// - /// Indexer which returns the string at a given offset - /// - public string this[string offset] - { - get - { - if(offset == "-1") - return String.Empty; - - string sTemp = (string)_stringDictionary[ offset ]; - - if(sTemp == null) - return String.Empty; - - return sTemp; - } - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - _stringDictionary = null; - } - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/CHMSystem.cs b/irc/TechBot/CHMLibrary/CHMDecoding/CHMSystem.cs deleted file mode 100644 index 042e243f5e1..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/CHMSystem.cs +++ /dev/null @@ -1,821 +0,0 @@ -using System; -using System.Collections; -using System.Diagnostics; -using System.IO; -using System.Text; -using System.Globalization; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class CHMSystem reads the #SYSTEM file of the chm and stores its settings - /// - internal sealed class CHMSystem : IDisposable - { - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal member storing the file version - /// - private int _fileVersion = 0; - /// - /// Internal member storing the contents file path - /// - private string _contentsFile = ""; - /// - /// Internal member storing the index file path - /// - private string _indexFile = ""; - /// - /// Internal member storing the default help topic - /// - private string _defaultTopic = ""; - /// - /// Internal member storing the help-window title - /// - private string _title = ""; - /// - /// Internal flag if dbcs is on - /// - private bool _dbcs = false; - /// - /// Internal flag if fulltext search is enabled - /// - private bool _fullTextSearch = false; - /// - /// Internal flag if KLinks are in the file - /// - private bool _hasKLinks = false; - /// - /// Internal flag if ALinks are in the file - /// - private bool _hasALinks = false; - /// - /// Internal member storing the name of the default window - /// - private string _defaultWindow = ""; - /// - /// Internal member storing the filename of the compiled file - /// - private string _compileFile = ""; - /// - /// Internal flag storing the offset value of the binary index - /// - private uint _binaryIndexURLTableID = 0; - /// - /// Inernal member storing the compiler version this file was compiled - /// - private string _compilerVersion = ""; - /// - /// Internal flag storing the offset value of the binary TOC - /// - private uint _binaryTOCURLTableID = 0; - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - /// - /// Internal member storing the default fontface, size, charset - /// - private string _defaultFont = ""; - /// - /// Internal member storing the culture info of the file - /// - private CultureInfo _culture; - - /// - /// Constructor of the class - /// - /// binary file data of the #SYSTEM file - /// associated chm file - public CHMSystem(byte[] binaryFileData, CHMFile associatedFile) - { - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - DecodeData(); - - if(_culture == null) - { - // Set the text encoder of the chm file to the read charset/codepage - _associatedFile.TextEncoding = Encoding.GetEncoding( this.CodePage ); - } - } - - /// - /// Decodes the binary file data and fills the internal properties - /// - /// true if succeeded - private bool DecodeData() - { - bool bRet = true; - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - // First entry = DWORD for version number - _fileVersion = (int) binReader.ReadInt32(); - - while( (memStream.Position < memStream.Length) && (bRet) ) - { - bRet &= DecodeEntry(ref binReader); - } - - return bRet; - } - - /// - /// Decodes an #system file entry - /// - /// binary reader reference - /// true if succeeded - private bool DecodeEntry(ref BinaryReader binReader) - { - bool bRet = true; - - int code = (int) binReader.ReadInt16(); // entry code, WORD - int length = (int) binReader.ReadInt16(); // length of entry - - switch(code) - { - case 0: - { - _contentsFile = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding); - };break; - case 1: - { - _indexFile = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding); - };break; - case 2: - { - _defaultTopic = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding); - };break; - case 3: - { - _title = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding); - };break; - case 4: - { - int nTemp = 0; - nTemp = binReader.ReadInt32(); // read DWORD LCID - _culture = new CultureInfo(nTemp); - - if(_culture != null) - _associatedFile.TextEncoding = Encoding.GetEncoding(_culture.TextInfo.ANSICodePage); - - nTemp = binReader.ReadInt32(); // read DWORD DBCS - _dbcs = (nTemp == 1); - - nTemp = binReader.ReadInt32(); // read DWORD Fulltext search - _fullTextSearch = (nTemp == 1); - - nTemp = binReader.ReadInt32(); // read DWORD has klinks - _hasKLinks = (nTemp != 0); - - nTemp = binReader.ReadInt32(); // read DWORD has alinks - _hasALinks = (nTemp != 0); - - // read the rest of code 4 (not important for us) - byte[] temp = new byte[length-(5*4)]; - temp = binReader.ReadBytes(length-(5*4)); - };break; - case 5: - { - _defaultWindow = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding); - };break; - case 6: - { - _compileFile = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding); - };break; - case 7: - { - if(_fileVersion > 2) - { - _binaryIndexURLTableID = (uint) binReader.ReadInt32(); - } - else - { - byte[] read = binReader.ReadBytes(length); - int i=read.Length; - } - };break; - case 8: - { - // abbreviation (not interresting for us) - byte[] read = binReader.ReadBytes(length); - int i=read.Length; - };break; - case 9: - { - _compilerVersion = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding); - };break; - case 10: - { - // timestamp of the file (not interresting for us) - byte[] read = binReader.ReadBytes(length); - int i=read.Length; - };break; - case 11: - { - if(_fileVersion > 2) - { - _binaryTOCURLTableID = (uint) binReader.ReadInt32(); - } - else - { - byte[] read = binReader.ReadBytes(length); - int i=read.Length; - } - };break; - case 12: - { - // number of information bytes - byte[] read = binReader.ReadBytes(length); - int i=read.Length; - };break; - case 13: - { - // copy of file #idxhdr - byte[] read = binReader.ReadBytes(length); - int i=read.Length; - };break; - case 14: - { - // custom tabs for HH viewer - byte[] read = binReader.ReadBytes(length); - int i=read.Length; - };break; - case 15: - { - // a checksum - byte[] read = binReader.ReadBytes(length); - int i=read.Length; - };break; - case 16: - { - // Default Font=string,number,number - // The string is the name of the font, the first number is the - // point size & the last number is the character set used by the font. - // For acceptable values see *_CHARSET defines in wingdi.h from the - // Windows SDK or the same file in MinGW or Wine. - // Most of the time you will only want to use 0, which is the value for ANSI, - // which is the subset of ASCII used by Windows. - _defaultFont = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding); - - };break; - default: - { - byte[] temp = new byte[length]; - temp = binReader.ReadBytes(length); - //bRet = false; - int i=temp.Length; - };break; - } - - return bRet; - } - - /// - /// Reads all HHC files and checks which one has the global object tag. - /// This hhc file will be returned as master hhc - /// - /// list of topics containing the extension hhc - /// true if the arraylist contains topic items - /// the filename of the found master toc - private string GetMasterHHC(ArrayList hhcTopics, bool TopicItemArrayList) - { - string sRet = ""; - - if( (hhcTopics!=null) && (hhcTopics.Count > 0) ) - { - if( TopicItemArrayList ) - { - if(hhcTopics.Count == 1) - { - sRet = ((TopicEntry)hhcTopics[0]).Locale; - } - else - { - foreach(TopicEntry curEntry in hhcTopics) - { - CHMStream.CHMStream iw=null; - MemoryStream fileObject=null; - - if( _associatedFile.CurrentStorageWrapper == null) - { - iw=new CHMStream.CHMStream(); - iw.OpenCHM(_associatedFile.ChmFilePath); - } - else - { - iw = _associatedFile.CurrentStorageWrapper; - } - - fileObject = iw.OpenStream(curEntry.Locale); - if( fileObject != null) - { - string fileString =_associatedFile.TextEncoding.GetString(fileObject.ToArray(),0,(int)fileObject.Length); - fileObject.Close(); - - if( HHCParser.HasGlobalObjectTag(fileString, _associatedFile) ) - { - sRet = curEntry.Locale; - break; - } - } - } - } - } - else - { - if(hhcTopics.Count == 1) - { - sRet = ((string)hhcTopics[0]); - } - else - { - foreach(string curEntry in hhcTopics) - { - CHMStream.CHMStream iw=null; - MemoryStream fileObject=null; - - if( _associatedFile.CurrentStorageWrapper == null) - { - iw=new CHMStream.CHMStream(); - iw.OpenCHM(_associatedFile.ChmFilePath); - } - else - { - iw = _associatedFile.CurrentStorageWrapper; - } - - fileObject = iw.OpenStream(curEntry); - if( fileObject != null) - { - string fileString =_associatedFile.TextEncoding.GetString(fileObject.ToArray(),0,(int)fileObject.Length); - fileObject.Close(); - - if( HHCParser.HasGlobalObjectTag(fileString, _associatedFile) ) - { - sRet = curEntry; - break; - } - } - } - } - } - } - - return sRet; - } - - /// - /// Gets the file version of the chm file. - /// 2 for Compatibility=1.0, 3 for Compatibility=1.1 - /// - public int FileVersion - { - get { return _fileVersion; } - } - - /// - /// Gets the contents file name - /// - public string ContentsFile - { - get - { - if( BinaryTOC ) // if the file contains a binary TOC - { - // make sure the CHMFile instance exists and has loaded the file #URLTBL - if( (_associatedFile != null) && (_associatedFile.UrltblFile != null ) ) - { - // Get an url-table entry by its unique id - UrlTableEntry entry = _associatedFile.UrltblFile.GetByUniqueID( this.BinaryTOCURLTableID ); - if(entry != null) - { - // entry found, return the url ( = filename ) - return entry.URL; - } - } - } - else - { - if(_contentsFile.Length <= 0) - { - string sCheck = "Table of Contents.hhc"; // default HHP contents filename - - if( (_associatedFile != null) && (_associatedFile.TopicsFile != null ) ) - { - TopicEntry te = _associatedFile.TopicsFile.GetByLocale( sCheck ); - - if( te == null) - { - sCheck = "toc.hhc"; // default HHP contents filename - - te = _associatedFile.TopicsFile.GetByLocale( sCheck ); - - if( te == null) - { - sCheck = CompileFile + ".hhc"; - - te = _associatedFile.TopicsFile.GetByLocale( sCheck ); - - if( te == null) - { - ArrayList arrExt = _associatedFile.TopicsFile.GetByExtension("hhc"); - - if( arrExt == null ) - { - arrExt = _associatedFile.EnumFilesByExtension("hhc"); - - if( arrExt == null ) - { - Debug.WriteLine("CHMSystem.ContentsFile - Failed, contents file not found !"); - } - else - { - if(arrExt.Count > 1) - { - sCheck = GetMasterHHC(arrExt, false); - _contentsFile = sCheck; - } - else - { - _contentsFile = ((string)arrExt[0]); - sCheck = _contentsFile; - } - } - } - else - { - if(arrExt.Count > 1) - { - sCheck = GetMasterHHC(arrExt, true); - _contentsFile = sCheck; - } - else - { - _contentsFile = ((TopicEntry)arrExt[0]).Locale; - sCheck = _contentsFile; - } - } - } - else - { - _contentsFile = sCheck; - } - } - else - { - _contentsFile = sCheck; - } - } - else - { - _contentsFile = sCheck; - } - } - - return sCheck; - } - } - - return _contentsFile; - } - } - - /// - /// Gets the index file name - /// - public string IndexFile - { - get - { - if( BinaryIndex ) // if the file contains a binary index - { - // make sure the CHMFile instance exists and has loaded the file #URLTBL - if( (_associatedFile != null) && (_associatedFile.UrltblFile != null ) ) - { - // Get an url-table entry by its unique id - UrlTableEntry entry = _associatedFile.UrltblFile.GetByUniqueID( this.BinaryIndexURLTableID ); - if(entry != null) - { - // entry found, return the url ( = filename ) - return entry.URL; - } - } - } - else - { - if(_indexFile.Length <= 0) - { - string sCheck = "Index.hhk"; // default HHP index filename - - if( (_associatedFile != null) && (_associatedFile.TopicsFile != null ) ) - { - TopicEntry te = _associatedFile.TopicsFile.GetByLocale( sCheck ); - - if( te == null) - { - sCheck = CompileFile + ".hhk"; - - te = _associatedFile.TopicsFile.GetByLocale( sCheck ); - - if( te == null) - { - ArrayList arrExt = _associatedFile.TopicsFile.GetByExtension("hhk"); - - if( arrExt == null ) - { - Debug.WriteLine("CHMSystem.IndexFile - Failed, index file not found !"); - } - else - { - _indexFile = ((TopicEntry)arrExt[0]).Locale; - sCheck = _indexFile; - } - } - else - { - _indexFile = sCheck; - } - } - else - { - _indexFile = sCheck; - } - } - - return sCheck; - } - } - return _indexFile; - } - } - - /// - /// Sets the default topic of this file - /// - /// new local value of the topic - internal void SetDefaultTopic(string local) - { - _defaultTopic = local; - } - - /// - /// Gets the default help topic - /// - public string DefaultTopic - { - get { return _defaultTopic; } - } - - /// - /// Gets the title of the help window - /// - public string Title - { - get { return _title; } - } - - /// - /// Gets the flag if DBCS is in use - /// - public bool DBCS - { - get { return _dbcs; } - } - - /// - /// Gets the flag if full-text-search is available - /// - public bool FullTextSearch - { - get { return _fullTextSearch; } - } - - /// - /// Gets the flag if the file has ALinks - /// - public bool HasALinks - { - get { return _hasALinks; } - } - - /// - /// Gets the flag if the file has KLinks - /// - public bool HasKLinks - { - get { return _hasKLinks; } - } - - /// - /// Gets the default window name - /// - public string DefaultWindow - { - get { return _defaultWindow; } - } - - /// - /// Gets the file name of the compile file - /// - public string CompileFile - { - get { return _compileFile; } - } - - /// - /// Gets the id of the binary index in the url table - /// - public uint BinaryIndexURLTableID - { - get { return _binaryIndexURLTableID; } - } - - /// - /// Gets the flag if the chm has a binary index file - /// - public bool BinaryIndex - { - get { return (_binaryIndexURLTableID>0); } - } - - /// - /// Gets the flag if the chm has a binary index file - /// - public string CompilerVersion - { - get { return _compilerVersion; } - } - - /// - /// Gets the id of the binary toc in the url table - /// - public uint BinaryTOCURLTableID - { - get { return _binaryTOCURLTableID; } - } - - /// - /// Gets the flag if the chm has a binary toc file - /// - public bool BinaryTOC - { - get { return (_binaryTOCURLTableID>0); } - } - - /// - /// Gets the font face of the read font property. - /// Empty string for default font. - /// - public string FontFace - { - get - { - if( _defaultFont.Length > 0) - { - string [] fontSplit = _defaultFont.Split( new char[]{','}); - if(fontSplit.Length > 0) - return fontSplit[0].Trim(); - } - - return ""; - } - } - - /// - /// Gets the font size of the read font property. - /// 0 for default font size - /// - public double FontSize - { - get - { - if( _defaultFont.Length > 0) - { - string [] fontSplit = _defaultFont.Split( new char[]{','}); - if(fontSplit.Length > 1) - return double.Parse(fontSplit[1].Trim()); - } - - return 0.0; - } - } - - /// - /// Gets the character set of the read font property - /// 1 for default - /// - public int CharacterSet - { - get - { - if( _defaultFont.Length > 0) - { - string [] fontSplit = _defaultFont.Split( new char[]{','}); - if(fontSplit.Length > 2) - return Int32.Parse(fontSplit[2].Trim()); - } - - return 0; - } - } - - /// - /// Gets the codepage depending on the read font property - /// - public int CodePage - { - get - { - // if we've read a LCID from the system file - // ignore the font-property settings and return - // the codepage generated from the culture info - if(_culture != null) - { - return _culture.TextInfo.ANSICodePage; - } - - int nRet = 1252; // default codepage windows-1252 - - int nCSet = CharacterSet; - - switch(nCSet) - { - case 0x00: nRet = 1252;break; // ANSI_CHARSET - case 0xCC: nRet = 1251;break; // RUSSIAN_CHARSET - case 0xEE: nRet = 1250;break; // EE_CHARSET - case 0xA1: nRet = 1253;break; // GREEK_CHARSET - case 0xA2: nRet = 1254;break; // TURKISH_CHARSET - case 0xBA: nRet = 1257;break; // BALTIC_CHARSET - case 0xB1: nRet = 1255;break; // HEBREW_CHARSET - case 0xB2: nRet = 1256;break; // ARABIC_CHARSET - case 0x80: nRet = 932;break; // SHIFTJIS_CHARSET - case 0x81: nRet = 949;break; // HANGEUL_CHARSET - case 0x86: nRet = 936;break; // GB2313_CHARSET - case 0x88: nRet = 950;break; // CHINESEBIG5_CHARSET - } - - return nRet; - } - } - - /// - /// Gets the assiciated culture info - /// - public CultureInfo Culture - { - get { return _culture; } - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - } - - - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/CHMTocidx.cs b/irc/TechBot/CHMLibrary/CHMDecoding/CHMTocidx.cs deleted file mode 100644 index d6ca1aa02c1..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/CHMTocidx.cs +++ /dev/null @@ -1,288 +0,0 @@ -using System; -using System.IO; -using System.Collections; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class CHMTocidx implements functions to decode the #TOCIDX internal file. - /// - internal sealed class CHMTocidx : IDisposable - { - /// - /// Constant specifying the size of the data blocks - /// - private const int BLOCK_SIZE = 0x1000; - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal memebr storing the offset to the 20/28 byte structs - /// - private int _offset2028 = 0; - /// - /// Internal member storing the offset to the 16 byte structs - /// - private int _offset16structs = 0; - /// - /// Internal member storing the number of 16 byte structs - /// - private int _numberOf16structs = 0; - /// - /// Internal member storing the offset to the topic list - /// - private int _offsetOftopics = 0; - /// - /// Internal member storing the toc - /// - private ArrayList _toc = new ArrayList(); - /// - /// Internal member for offset seeking - /// - private Hashtable _offsetTable = new Hashtable(); - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor of the class - /// - /// binary file data of the #TOCIDX file - /// associated chm file - public CHMTocidx(byte[] binaryFileData, CHMFile associatedFile) - { - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - DecodeData(); - - // clear internal binary data after extraction - _binaryFileData = null; - } - - /// - /// Decodes the binary file data and fills the internal properties - /// - /// true if succeeded - private bool DecodeData() - { - _toc = new ArrayList(); - _offsetTable = new Hashtable(); - - bool bRet = true; - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - int nCurOffset = 0; - - _offset2028 = binReader.ReadInt32(); - _offset16structs = binReader.ReadInt32(); - _numberOf16structs = binReader.ReadInt32(); - _offsetOftopics = binReader.ReadInt32(); - - binReader.BaseStream.Seek( _offset2028, SeekOrigin.Begin ); - - if( RecursivelyBuildTree(ref binReader, _offset2028, _toc, null) ) - { - binReader.BaseStream.Seek( _offset16structs, SeekOrigin.Begin ); - nCurOffset = (int)binReader.BaseStream.Position; - - for(int i=0; i < _numberOf16structs; i++) - { - int tocOffset = binReader.ReadInt32(); - int sqNr = binReader.ReadInt32(); - int topOffset = binReader.ReadInt32(); - int hhctopicIdx = binReader.ReadInt32(); - - nCurOffset = (int)binReader.BaseStream.Position; - - int topicIdx = -1; - // if the topic offset is within the range of the stream - // and is >= the offset of the first topic dword - if((topOffset < (binReader.BaseStream.Length - 4)) && (topOffset >= _offsetOftopics)) - { - // read the index of the topic for this item - binReader.BaseStream.Seek( topOffset, SeekOrigin.Begin); - topicIdx = binReader.ReadInt32(); - binReader.BaseStream.Seek( nCurOffset, SeekOrigin.Begin); - - - TOCItem item = (TOCItem)_offsetTable[tocOffset.ToString()]; - if( item != null) - { - if(( topicIdx < _associatedFile.TopicsFile.TopicTable.Count)&&(topicIdx>=0)) - { - TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile.TopicTable[topicIdx]); - if( (te != null) && (item.TopicOffset < 0) ) - { - item.TopicOffset = te.EntryOffset; - } - - } - } - } - } - } - - return bRet; - } - - /// - /// Recursively reads the binary toc tree from the file - /// - /// reference to binary reader - /// offset of the first node in the current level - /// arraylist of TOCItems for the current level - /// parent item for the item - /// Returns true if succeeded - private bool RecursivelyBuildTree(ref BinaryReader binReader, int NodeOffset, ArrayList level, TOCItem parentItem) - { - bool bRet = true; - int nextOffset=0; - - int nReadOffset = (int)binReader.BaseStream.Position; - - binReader.BaseStream.Seek(NodeOffset, SeekOrigin.Begin); - - do - { - int nCurOffset = (int)binReader.BaseStream.Position; - - int unkn1 = binReader.ReadInt16(); // unknown - int unkn2 = binReader.ReadInt16(); // unknown - - int flag = binReader.ReadInt32(); - - int nFolderAdd = 0; - - if((_associatedFile != null) && (_associatedFile.ImageTypeFolder)) - { - // get the value which should be added, to display folders instead of books - if(HtmlHelpSystem.UseHH2TreePics) - nFolderAdd = 8; - else - nFolderAdd = 4; - } - - int nFolderImgIdx = (HtmlHelpSystem.UseHH2TreePics ? (TOCItem.STD_FOLDER_HH2+nFolderAdd) : (TOCItem.STD_FOLDER_HH1+nFolderAdd)); - int nFileImgIdx = (HtmlHelpSystem.UseHH2TreePics ? TOCItem.STD_FILE_HH2 : TOCItem.STD_FILE_HH1); - - int stdImage = ((flag & 0x4)!=0) ? nFolderImgIdx : nFileImgIdx; - - int stringOffset = binReader.ReadInt32(); - - int ParentOffset = binReader.ReadInt32(); - nextOffset = binReader.ReadInt32(); - - int firstChildOffset = 0; - int unkn3=0; - - if( (flag&0x4)!=0 ) - { - firstChildOffset = binReader.ReadInt32(); - unkn3 = binReader.ReadInt32(); // unknown - } - - TOCItem newItem = new TOCItem(); - newItem.ImageIndex = stdImage; - newItem.Offset = nCurOffset; - newItem.OffsetNext = nextOffset; - newItem.AssociatedFile = _associatedFile; - newItem.TocMode = DataMode.Binary; - newItem.Parent = parentItem; - - if( (flag&0x08) == 0) - { - // toc item doesn't have a local value (=> stringOffset = offset of strings file) - newItem.Name = _associatedFile.StringsFile[stringOffset]; - } - else - { - // this item has a topic entry (=> stringOffset = index of topic entry) - if((stringOffset < _associatedFile.TopicsFile.TopicTable.Count) && (stringOffset >= 0)) - { - TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile.TopicTable[stringOffset]); - if(te != null) - { - newItem.TopicOffset = te.EntryOffset; - } - } - } - - _offsetTable[nCurOffset.ToString()] = newItem; - - // if this item has children (firstChildOffset > 0) - if( firstChildOffset > 0) - { - bRet &= RecursivelyBuildTree(ref binReader, firstChildOffset, newItem.Children, newItem); - } - - level.Add( newItem ); - - if(nCurOffset != nextOffset) - binReader.BaseStream.Seek(nextOffset, SeekOrigin.Begin); - - }while(nextOffset != 0); - - binReader.BaseStream.Seek(nReadOffset, SeekOrigin.Begin); - - return bRet; - } - - /// - /// Gets the internal read toc - /// - internal ArrayList TOC - { - get { return _toc; } - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - _toc = null; - _offsetTable = null; - } - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/CHMTopics.cs b/irc/TechBot/CHMLibrary/CHMDecoding/CHMTopics.cs deleted file mode 100644 index ce1451b53ef..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/CHMTopics.cs +++ /dev/null @@ -1,235 +0,0 @@ -using System; -using System.IO; -using System.Collections; -using System.Collections.Specialized; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class CHMTopics implements functionality to decode the #TOPICS internal file - /// - internal sealed class CHMTopics : IDisposable - { - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - /// - /// Internal member storing the topic list - /// - private ArrayList _topicTable = new ArrayList(); - - /// - /// Constructor of the class - /// - /// binary file data of the #TOPICS file - /// associated chm file - public CHMTopics(byte[] binaryFileData, CHMFile associatedFile) - { - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - DecodeData(); - - // clear internal binary data after extraction - _binaryFileData = null; - } - - - /// - /// Standard constructor - /// - internal CHMTopics() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( _topicTable.Count ); - foreach(TopicEntry curItem in _topicTable) - { - curItem.Dump(ref writer); - } - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - int i=0; - int nCnt = reader.ReadInt32(); - - for(i=0; i - /// Sets the associated CHMFile instance - /// - /// instance to set - internal void SetCHMFile(CHMFile associatedFile) - { - _associatedFile = associatedFile; - - foreach(TopicEntry curEntry in _topicTable) - { - curEntry.SetCHMFile(associatedFile); - } - } - #endregion - - /// - /// Decodes the binary file data and fills the internal properties - /// - /// true if succeeded - private bool DecodeData() - { - bool bRet = true; - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - int nCurOffset = 0; - - while( (memStream.Position < memStream.Length) && (bRet) ) - { - int entryOffset = nCurOffset; - int tocIdx = binReader.ReadInt32(); - int titleOffset = binReader.ReadInt32(); - int urltablOffset = binReader.ReadInt32(); - int visibilityMode = binReader.ReadInt16(); - int unknownMode = binReader.ReadInt16(); - - TopicEntry newEntry = new TopicEntry(entryOffset, tocIdx, titleOffset, urltablOffset, visibilityMode, unknownMode, _associatedFile); - _topicTable.Add( newEntry ); - - nCurOffset = (int)memStream.Position; - } - - return bRet; - } - - /// - /// Gets the arraylist containing all topic entries. - /// - public ArrayList TopicTable - { - get - { - return _topicTable; - } - } - - /// - /// Gets the topic entry of a given offset - /// - public TopicEntry this[int offset] - { - get - { - foreach(TopicEntry curEntry in _topicTable) - if(curEntry.EntryOffset == offset) - return curEntry; - - return null; - } - } - - /// - /// Searches a topic by the locale name - /// - /// locale name to search - /// The topicentry instance if found, otherwise null - public TopicEntry GetByLocale(string locale) - { - foreach(TopicEntry curEntry in TopicTable) - { - if(curEntry.Locale.ToLower() == locale.ToLower()) - return curEntry; - } - - return null; - } - - /// - /// Searches the topics for all files with a given file extension - /// - /// extension to search - /// An arraylist of TopicEntry instances or null if no topic was found - public ArrayList GetByExtension(string fileExtension) - { - ArrayList arrRet = new ArrayList(); - - foreach(TopicEntry curEntry in TopicTable) - { - if(curEntry.Locale.ToLower().EndsWith(fileExtension.ToLower())) - arrRet.Add(curEntry); - } - - if(arrRet.Count > 0) - return arrRet; - - return null; - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - _topicTable=null; - } - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/CHMUrlstr.cs b/irc/TechBot/CHMLibrary/CHMDecoding/CHMUrlstr.cs deleted file mode 100644 index b87eebab58e..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/CHMUrlstr.cs +++ /dev/null @@ -1,308 +0,0 @@ -using System; -using System.IO; -using System.Collections; -using System.Collections.Specialized; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class CHMUrlstr implements a string collection storing the URL strings of the help file - /// - internal sealed class CHMUrlstr : IDisposable - { - /// - /// Constant specifying the size of the string blocks - /// - private const int BLOCK_SIZE = 0x1000; - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal member storing the url dictionary - /// - private Hashtable _urlDictionary = new Hashtable(); - /// - /// Internal member storing the framename dictionary - /// - private Hashtable _framenameDictionary = new Hashtable(); - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor of the class - /// - /// binary file data of the #URLSTR file - /// associated chm file - public CHMUrlstr(byte[] binaryFileData, CHMFile associatedFile) - { - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - DecodeData(); - - // clear internal binary data after extraction - _binaryFileData = null; - } - - /// - /// Standard constructor - /// - internal CHMUrlstr() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( _urlDictionary.Count ); - - if (_urlDictionary.Count != 0) - { - IDictionaryEnumerator iDictionaryEnumerator = _urlDictionary.GetEnumerator(); - while (iDictionaryEnumerator.MoveNext()) - { - DictionaryEntry dictionaryEntry = (DictionaryEntry)iDictionaryEnumerator.Current; - writer.Write( Int32.Parse(dictionaryEntry.Key.ToString()) ); - writer.Write( dictionaryEntry.Value.ToString() ); - } - } - - writer.Write( _framenameDictionary.Count ); - - if (_framenameDictionary.Count != 0) - { - IDictionaryEnumerator iDictionaryEnumerator = _framenameDictionary.GetEnumerator(); - while (iDictionaryEnumerator.MoveNext()) - { - DictionaryEntry dictionaryEntry = (DictionaryEntry)iDictionaryEnumerator.Current; - writer.Write( Int32.Parse(dictionaryEntry.Key.ToString()) ); - writer.Write( dictionaryEntry.Value.ToString() ); - } - } - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - int i=0; - int nCnt = reader.ReadInt32(); - - for(i=0; i - /// Sets the associated CHMFile instance - /// - /// instance to set - internal void SetCHMFile(CHMFile associatedFile) - { - _associatedFile = associatedFile; - } - #endregion - - /// - /// Decodes the binary file data and fills the internal properties - /// - /// true if succeeded - private bool DecodeData() - { - bool bRet = true; - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - int nCurOffset = 0; - - while( (memStream.Position < memStream.Length) && (bRet) ) - { - nCurOffset = (int)memStream.Position; - byte [] dataBlock = binReader.ReadBytes(BLOCK_SIZE); - bRet &= DecodeBlock(dataBlock, ref nCurOffset); - } - - return bRet; - } - - /// - /// Decodes a block of url-string data - /// - /// block of data - /// current file offset - /// true if succeeded - private bool DecodeBlock( byte[] dataBlock, ref int nOffset ) - { - bool bRet = true; - int blockOffset = nOffset; - - MemoryStream memStream = new MemoryStream(dataBlock); - BinaryReader binReader = new BinaryReader(memStream); - - if(nOffset==0) - binReader.ReadByte(); // first block starts with an unknown byte - - while( (memStream.Position < (memStream.Length-8)) && (bRet) ) - { - int entryOffset = blockOffset + (int)memStream.Position; - - int urlOffset = binReader.ReadInt32(); - int frameOffset = binReader.ReadInt32(); - - - // There is one way to tell where the end of the URL/FrameName - // pairs occurs: Repeat the following: read 2 DWORDs and if both - // are less than the current offset then this is the start of the Local - // strings else skip two NT strings. - // if(( (urlOffset < (entryOffset+8)) && (frameOffset < (entryOffset+8)) )) - // { - // //TODO: add correct string reading if an offset has been found - // /* - // int curOffset = (int)memStream.Position; - // - // memStream.Seek( (long)(blockOffset-urlOffset), SeekOrigin.Begin); - // string sTemp = CHMReader.ExtractString(ref binReader, 0, true); - // - // memStream.Seek( (long)(blockOffset-frameOffset), SeekOrigin.Begin); - // sTemp = CHMReader.ExtractString(ref binReader, 0, true); - // - // memStream.Seek((long)curOffset, SeekOrigin.Begin); - // */ - // - // - // int curOffs = (int)memStream.Position; - // BinaryReaderHelp.ExtractString(ref binReader, 0, true, _associatedFile.TextEncoding); - // nOffset += (int)memStream.Position - curOffs; - // - // curOffs = (int)memStream.Position; - // BinaryReaderHelp.ExtractString(ref binReader, 0, true, _associatedFile.TextEncoding); - // nOffset += (int)memStream.Position - curOffs; - // } - // else - { - bool bFoundTerminator = false; - - string sTemp = BinaryReaderHelp.ExtractString(ref binReader, ref bFoundTerminator, 0, true, _associatedFile.TextEncoding); - - if(sTemp == "") - { - //nOffset = nOffset + 1 + (int)memStream.Length - (int)memStream.Position; - memStream.Seek(memStream.Length-1, SeekOrigin.Begin); - } - else - { - _urlDictionary[entryOffset.ToString()] = sTemp.ToString(); - _framenameDictionary[ entryOffset.ToString() ] = sTemp.ToString() ; - } - } - } - - return bRet; - } - - /// - /// Gets the url at a given offset - /// - /// offset of url - /// the url at the given offset - public string GetURLatOffset(int offset) - { - if(offset == -1) - return String.Empty; - - string sTemp = (string)_urlDictionary[ offset.ToString() ]; - - if(sTemp == null) - return String.Empty; - - return sTemp; - } - - /// - /// Gets the framename at a given offset - /// - /// offset of the framename - /// the frame name at the given offset - public string GetFrameNameatOffset(int offset) - { - if(offset == -1) - return String.Empty; - - string sTemp = (string)_framenameDictionary[ offset.ToString() ]; - - if(sTemp == null) - return String.Empty; - - return sTemp; - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - _urlDictionary = null; - _framenameDictionary = null; - } - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/CHMUrltable.cs b/irc/TechBot/CHMLibrary/CHMDecoding/CHMUrltable.cs deleted file mode 100644 index 79f718b84ce..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/CHMUrltable.cs +++ /dev/null @@ -1,245 +0,0 @@ -using System; -using System.IO; -using System.Collections; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class CHMUrltable implements methods to decode the #URLTBL internal file. - /// - internal sealed class CHMUrltable : IDisposable - { - /// - /// Constant specifying the size of the data blocks - /// - private const int BLOCK_SIZE = 0x1000; - /// - /// Constant specifying the number of records per block - /// - private const int RECORDS_PER_BLOCK = 341; - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal member storing the url table - /// - private ArrayList _urlTable = new ArrayList(); - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor of the class - /// - /// binary file data of the #URLTBL file - /// associated chm file - public CHMUrltable(byte[] binaryFileData, CHMFile associatedFile) - { - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - DecodeData(); - - // clear internal binary data after extraction - _binaryFileData = null; - } - - /// - /// Standard constructor - /// - internal CHMUrltable() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( _urlTable.Count ); - foreach(UrlTableEntry curItem in _urlTable) - { - curItem.Dump(ref writer); - } - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - int i=0; - int nCnt = reader.ReadInt32(); - - for(i=0; i - /// Sets the associated CHMFile instance - /// - /// instance to set - internal void SetCHMFile(CHMFile associatedFile) - { - _associatedFile = associatedFile; - - foreach(UrlTableEntry curEntry in _urlTable) - { - curEntry.SetCHMFile(associatedFile); - } - } - #endregion - - /// - /// Decodes the binary file data and fills the internal properties - /// - /// true if succeeded - private bool DecodeData() - { - bool bRet = true; - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - int nCurOffset = 0; - - while( (memStream.Position < memStream.Length) && (bRet) ) - { - nCurOffset = (int)memStream.Position; - byte [] dataBlock = binReader.ReadBytes(BLOCK_SIZE); - bRet &= DecodeBlock(dataBlock, ref nCurOffset); - } - - return bRet; - } - - /// - /// Decodes a block of url-string data - /// - /// block of data - /// current file offset - /// true if succeeded - private bool DecodeBlock( byte[] dataBlock, ref int nOffset ) - { - bool bRet = true; - int blockOffset = nOffset; - - MemoryStream memStream = new MemoryStream(dataBlock); - BinaryReader binReader = new BinaryReader(memStream); - - for(int i=0; i < RECORDS_PER_BLOCK; i++) - { - int recordOffset = blockOffset + (int)memStream.Position; - - uint nuniqueID = (uint) binReader.ReadInt32(); // unknown dword - int ntopicsIdx = binReader.ReadInt32(); - int urlstrOffset = binReader.ReadInt32(); - - UrlTableEntry newEntry = new UrlTableEntry(nuniqueID, recordOffset, ntopicsIdx, urlstrOffset, _associatedFile); - _urlTable.Add(newEntry); - - if( memStream.Position >= memStream.Length) - break; - } - - if(dataBlock.Length == BLOCK_SIZE) - binReader.ReadInt32(); - - return bRet; - } - - /// - /// Gets the arraylist containing all urltable entries. - /// - public ArrayList UrlTable - { - get - { - return _urlTable; - } - } - - /// - /// Gets the urltable entry of a given offset - /// - public UrlTableEntry this[int offset] - { - get - { - foreach(UrlTableEntry curEntry in _urlTable) - if(curEntry.EntryOffset == offset) - return curEntry; - - return null; - } - } - - /// - /// Gets the urltable entry of a given uniqueID - /// - public UrlTableEntry GetByUniqueID(uint uniqueID) - { - foreach(UrlTableEntry curEntry in UrlTable) - { - if(curEntry.UniqueID == uniqueID) - return curEntry; - } - - return null; - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - _urlTable = null; - } - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/DumpingInfo.cs b/irc/TechBot/CHMLibrary/CHMDecoding/DumpingInfo.cs deleted file mode 100644 index f42fb98ee11..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/DumpingInfo.cs +++ /dev/null @@ -1,395 +0,0 @@ -using System; -using System.IO; -using System.Text; -using System.Diagnostics; -using System.Collections.Specialized; - -using ICSharpCode.SharpZipLib; -using ICSharpCode.SharpZipLib.Zip; -using ICSharpCode.SharpZipLib.Zip.Compression; -using ICSharpCode.SharpZipLib.Zip.Compression.Streams; - -using HtmlHelp; -// using HtmlHelp.Storage; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// Enumeration for specifying the dumping compression - /// - public enum DumpCompression - { - /// - /// None - no data compression will be used. - /// Fastest but most memory intensive - /// - None = 0, - /// - /// Minimum - a minimum data compression will be used. - /// Fast but not much data reduction - /// - Minimum = 1, - /// - /// Medium - a medium data compression will be used. - /// Slower but medium data reduction - /// - Medium = 2, - /// - /// Maximum - a maximum data compression will be used. - /// Slowest but maximum data reduction - /// - Maximum = 3 - } - - /// - /// Flags which specify which data should be dumped - /// - [FlagsAttribute()] - public enum DumpingFlags - { - /// - /// DumpTextTOC - if this flag is set, text-based TOCs (sitemap format) will be dumped - /// - DumpTextTOC = 1, - /// - /// DumpBinaryTOC - if this flag is set, binary TOCs will be dumped - /// - DumpBinaryTOC = 2, - /// - /// DumpTextIndex - if this flag is set, the text-based index (sitemap format) will be dumped - /// - DumpTextIndex = 4, - /// - /// DumpBinaryIndex - if this flag is set, the binary index will be dumped - /// - DumpBinaryIndex = 8, - /// - /// DumpStrings - if this flag is set, the internal #STRINGS file will be dumped - /// - DumpStrings = 16, - /// - /// DumpUrlStr - if this flag is set, the internal #URLSTR file will be dumped - /// - DumpUrlStr = 32, - /// - /// DumpUrlTbl - if this flag is set, the internal #URLTBL file will be dumped - /// - DumpUrlTbl = 64, - /// - /// DumpTopics - if this flag is set, the internal #TOPICS file will be dumped - /// - DumpTopics = 128, - /// - /// DumpFullText - if this flag is set, the internal $FIftiMain file will be dumped - /// - DumpFullText = 256 - } - - /// - /// The class DumpingInfo implements information properties for the CHMFile class - /// if and how data dumping should be used. - /// - public sealed class DumpingInfo - { - public bool m_bAllowSaveDump=true; - - private readonly static BitVector32.Section DumpFlags = BitVector32.CreateSection(512); - - private const string _dumpHeader = "HtmlHelpSystem dump file 1.0"; - - private string _outputDir = ""; // emtpy string means, same directory as chm file - private DumpCompression _compressionLevel = DumpCompression.Maximum; - private CHMFile _chmFile = null; - - private DeflaterOutputStream _outputStream = null; - private InflaterInputStream _inputStream = null; - - private BinaryWriter _writer = null; - private BinaryReader _reader = null; - - private BitVector32 _flags; - - /// - /// Constructor of the class - /// - /// Combine flag values to specify which data should be dumped. - /// output directory. emtpy string means, - /// same directory as chm file (only if destination = ExternalFile) - /// compression which should be used - public DumpingInfo(DumpingFlags flags, string outputDir, DumpCompression compressionLevel) - { - _flags = new BitVector32(0); - int i = _flags[DumpFlags]; - _flags[DumpFlags] = i | (int)flags; - - _outputDir = outputDir; - _compressionLevel = compressionLevel; - } - - /// - /// Gets the flag if text-based TOCs will be written to the dumping file - /// - public bool DumpTextTOC - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpTextTOC) != 0); } - } - - /// - /// Gets the flag if binary TOCs will be written to the dumping file - /// - public bool DumpBinaryTOC - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpBinaryTOC) != 0); } - } - - /// - /// Gets the flag if the text-based index will be written to the dumping file - /// - public bool DumpTextIndex - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpTextIndex) != 0); } - } - - /// - /// Gets the flag if the binary index will be written to the dumping file - /// - public bool DumpBinaryIndex - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpBinaryIndex) != 0); } - } - - /// - /// Gets the flag if the #STRINGS file will be written to the dumping file - /// - public bool DumpStrings - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpStrings) != 0); } - } - - /// - /// Gets the flag if the #URLSTR file will be written to the dumping file - /// - public bool DumpUrlStr - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpUrlStr) != 0); } - } - - /// - /// Gets the flag if the #URLTBL file will be written to the dumping file - /// - public bool DumpUrlTbl - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpUrlTbl) != 0); } - } - - /// - /// Gets the flag if the #TOPICS file will be written to the dumping file - /// - public bool DumpTopics - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpTopics) != 0); } - } - - /// - /// Gets the flag if the $FIftiMain file will be written to the dumping file - /// - public bool DumpFullText - { - get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpFullText) != 0); } - } - - /// - /// Gets the dump output directory. - /// - /// emtpy string means, same directory as chm file - /// If Destination is set to DumpingOutput.InternalFile this property will be ignored - public string OutputDir - { - get { return _outputDir; } - } - - /// - /// The compression level used. - /// - public DumpCompression CompressionLevel - { - get { return _compressionLevel; } - } - - /// - /// Gets/Sets the CHMFile instance associated with this object - /// - internal CHMFile ChmFile - { - get { return _chmFile; } - set { _chmFile = value; } - } - - /// - /// Translates the compression level to the deflater constants - /// - private int CompLvl - { - get - { - switch(CompressionLevel) - { - case DumpCompression.None: return Deflater.NO_COMPRESSION; - case DumpCompression.Minimum: return Deflater.BEST_SPEED; - case DumpCompression.Medium: return Deflater.DEFAULT_COMPRESSION; - case DumpCompression.Maximum: return Deflater.BEST_COMPRESSION; - } - - return Deflater.BEST_COMPRESSION; - } - } - - /// - /// Checks if a dump exists - /// - internal bool DumpExists - { - get - { - if(_flags[DumpFlags] == 0) - return false; - - // we have a reader or writer to the dump so it must exist - if( (_reader != null) || (_writer != null) ) - return true; - - string sDmpFile = _chmFile.ChmFilePath; - sDmpFile=sDmpFile.ToLower().Replace(".chm",".CHB"); - - return File.Exists(sDmpFile); - } - } - - /// - /// Gets a binary writer instance which allows you to write to the dump - /// - internal BinaryWriter Writer - { - get - { - if (m_bAllowSaveDump==false) - return null; - - if(_flags[DumpFlags] == 0) - throw new InvalidOperationException("Nothing to dump. No flags have been set !"); - - if(_reader != null) - throw new InvalidOperationException("Can't write and read at the same time !"); - - if(_chmFile == null) - throw new InvalidOperationException("Only usable with an associated CHMFile instance !"); - - if(_writer==null) - { - string sDmpFile = _chmFile.ChmFilePath; - sDmpFile=sDmpFile.ToLower().Replace(".chm",".CHB"); - StreamWriter stream = new StreamWriter(sDmpFile, false, _chmFile.TextEncoding); - - // write header info uncompressed - BinaryWriter _hwriter = new BinaryWriter(stream.BaseStream); - _hwriter.Write(_dumpHeader); - _hwriter.Write((int)CompressionLevel); - - if(_compressionLevel == DumpCompression.None) - { - _writer = new BinaryWriter(stream.BaseStream); - } - else - { - _outputStream = new DeflaterOutputStream(stream.BaseStream, new Deflater(CompLvl)); - - _writer = new BinaryWriter(_outputStream); - } - } - - return _writer; - - } - } - - /// - /// Gets a binary reader which allows you to read from the dump - /// - internal BinaryReader Reader - { - get - { - if(_writer != null) - throw new InvalidOperationException("Can't write and read at the same time !"); - - if(_chmFile == null) - throw new InvalidOperationException("Only usable with an associated CHMFile instance !"); - - if(_reader==null) - { - string sDmpFile = _chmFile.ChmFilePath; - sDmpFile=sDmpFile.ToLower().Replace(".chm",".CHB"); - StreamReader stream = new StreamReader(sDmpFile, _chmFile.TextEncoding); - - BinaryReader _hReader = new BinaryReader(stream.BaseStream); - string sH = _hReader.ReadString(); - - if(sH != _dumpHeader) - { - _hReader.Close(); - Debug.WriteLine("Unexpected dump-file header !"); - throw new FormatException("DumpingInfo.Reader - Unexpected dump-file header !"); - } - - _compressionLevel = (DumpCompression)_hReader.ReadInt32(); -// if(_compressionLevel != (DumpCompression)_hReader.ReadInt32()) -// { -// _hReader.Close(); -// return null; -// } - - if(_compressionLevel == DumpCompression.None) - { - _reader = new BinaryReader(stream.BaseStream); - } - else - { - _inputStream = new InflaterInputStream(stream.BaseStream, new Inflater()); - - _reader = new BinaryReader(_inputStream); - } - } - - return _reader; - } - } - - /// - /// Saves data and closes the dump - /// - /// true if succeed - internal bool SaveData() - { - if (m_bAllowSaveDump==false) - return true; - - if(_writer != null) - { - if(_writer!=null) - _writer.Close(); - _outputStream = null; - _writer = null; - } - - if(_reader != null) - { - if(_reader!=null) - _reader.Close(); - _inputStream = null; - _reader = null; - } - - return true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/FullTextEngine.cs b/irc/TechBot/CHMLibrary/CHMDecoding/FullTextEngine.cs deleted file mode 100644 index fc1d634d924..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/FullTextEngine.cs +++ /dev/null @@ -1,1131 +0,0 @@ -using System; -using System.Data; -using System.Diagnostics; -using System.Text; -using System.Text.RegularExpressions; -using System.IO; -using System.Collections; -using System.Globalization; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class FullTextSearcher implements a fulltext searcher for a single chm file ! - /// - internal sealed class FullTextEngine : IDisposable - { - #region Internal helper classes - /// - /// Internal class for decoding the header - /// - private sealed class FTHeader - { - /// - /// Internal member storing the number of indexed files - /// - private int _numberOfIndexFiles = 0; - /// - /// Internal member storing the offset of the root node - /// - private int _rootOffset = 0; - /// - /// Internal member storing the index-page count - /// - private int _pageCount = 0; - /// - /// Internal member storing the depth of the tree - /// - private int _depth = 0; - /// - /// Internal member storing the scale param for document index en-/decoding - /// - private byte _scaleDocIdx = 0; - /// - /// Internal member storing the scale param for code-count en-/decoding - /// - private byte _scaleCodeCnt = 0; - /// - /// Internal member storing the scale param for location codes en-/decoding - /// - private byte _scaleLocCodes = 0; - /// - /// Internal member storing the root param for document index en-/decoding - /// - private byte _rootDocIdx = 0; - /// - /// Internal member storing the root param for code-count en-/decoding - /// - private byte _rootCodeCnt = 0; - /// - /// Internal member storing the root param for location codes en-/decoding - /// - private byte _rootLocCodes = 0; - /// - /// Internal member storing the size of the nodes in bytes - /// - private int _nodeSize = 0; - /// - /// Internal member storing the length of the longest word - /// - private int _lengthOfLongestWord = 0; - /// - /// Internal member storing the total number of words - /// - private int _totalNumberOfWords = 0; - /// - /// Internal member storing the total number of unique words - /// - private int _numberOfUniqueWords = 0; - /// - /// Internal member storing the codepage identifier - /// - private int _codePage = 1252; - /// - /// Internal member storing the language code id - /// - private int _lcid = 1033; - /// - /// Internal member storing the text encoder - /// - private Encoding _textEncoder = Encoding.Default; - - /// - /// Constructor of the header - /// - /// binary data from which the header will be extracted - public FTHeader(byte[] binaryData) - { - DecodeHeader(binaryData); - } - - /// - /// Internal constructor for reading from dump - /// - internal FTHeader() - { - } - - /// - /// Decodes the binary header information and fills the members - /// - /// binary data from which the header will be extracted - private void DecodeHeader(byte[] binaryData) - { - MemoryStream memStream = new MemoryStream(binaryData); - BinaryReader binReader = new BinaryReader(memStream); - - binReader.ReadBytes(4); // 4 unknown bytes - - _numberOfIndexFiles = binReader.ReadInt32(); // number of indexed files - - binReader.ReadInt32(); // unknown - binReader.ReadInt32(); // unknown - - _pageCount = binReader.ReadInt32(); // page-count - _rootOffset = binReader.ReadInt32(); // file offset of the root node - _depth = binReader.ReadInt16(); // depth of the tree - - binReader.ReadInt32(); // unknown - - _scaleDocIdx = binReader.ReadByte(); - _rootDocIdx = binReader.ReadByte(); - _scaleCodeCnt = binReader.ReadByte(); - _rootCodeCnt = binReader.ReadByte(); - _scaleLocCodes = binReader.ReadByte(); - _rootLocCodes = binReader.ReadByte(); - - if( (_scaleDocIdx != 2) || ( _scaleCodeCnt != 2 ) || ( _scaleLocCodes != 2 ) ) - { - Debug.WriteLine("Unsupported scale for s/r encoding !"); - throw new InvalidOperationException("Unsupported scale for s/r encoding !"); - } - - binReader.ReadBytes(10); // unknown - - _nodeSize = binReader.ReadInt32(); - - binReader.ReadInt32(); // unknown - binReader.ReadInt32(); // not important - binReader.ReadInt32(); // not important - - _lengthOfLongestWord = binReader.ReadInt32(); - _totalNumberOfWords = binReader.ReadInt32(); - _numberOfUniqueWords = binReader.ReadInt32(); - - binReader.ReadInt32(); // not important - binReader.ReadInt32(); // not important - binReader.ReadInt32(); // not important - binReader.ReadInt32(); // not important - binReader.ReadInt32(); // not important - binReader.ReadInt32(); // not important - - binReader.ReadBytes(24); // not important - - _codePage = binReader.ReadInt32(); - _lcid = binReader.ReadInt32(); - - CultureInfo ci = new CultureInfo(_lcid); - _textEncoder = Encoding.GetEncoding( ci.TextInfo.ANSICodePage ); - - // rest of header is not important for us - } - - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( _numberOfIndexFiles ); - writer.Write( _rootOffset ); - writer.Write( _pageCount ); - writer.Write( _depth ); - writer.Write( _scaleDocIdx ); - writer.Write( _rootDocIdx ); - writer.Write( _scaleCodeCnt ); - writer.Write( _rootCodeCnt ); - writer.Write( _scaleLocCodes ); - writer.Write( _rootLocCodes ); - writer.Write( _nodeSize ); - writer.Write( _lengthOfLongestWord ); - writer.Write( _totalNumberOfWords ); - writer.Write( _numberOfUniqueWords ); - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - _numberOfIndexFiles = reader.ReadInt32(); - _rootOffset = reader.ReadInt32(); - _pageCount = reader.ReadInt32(); - _depth = reader.ReadInt32(); - - _scaleDocIdx = reader.ReadByte(); - _rootDocIdx = reader.ReadByte(); - _scaleCodeCnt = reader.ReadByte(); - _rootCodeCnt = reader.ReadByte(); - _scaleLocCodes = reader.ReadByte(); - _rootLocCodes = reader.ReadByte(); - - _nodeSize = reader.ReadInt32(); - _lengthOfLongestWord = reader.ReadInt32(); - _totalNumberOfWords = reader.ReadInt32(); - _numberOfUniqueWords = reader.ReadInt32(); - } - - /// - /// Gets the number of indexed files - /// - public int IndexedFileCount - { - get { return _numberOfIndexFiles; } - } - - /// - /// Gets the file offset of the root node - /// - public int RootOffset - { - get { return _rootOffset; } - } - - /// - /// Gets the page count - /// - public int PageCount - { - get { return _pageCount; } - } - - /// - /// Gets the index depth - /// - public int Depth - { - get { return _depth; } - } - - /// - /// Gets the scale param for document index en-/decoding - /// - /// The scale and root method of integer encoding needs two parameters, - /// which I'll call s (scale) and r (root size). - /// The integer is encoded as two parts, p (prefix) and q (actual bits). - /// p determines how many bits are stored, as well as implicitly determining - /// the high-order bit of the integer. - public byte ScaleDocumentIndex - { - get { return _scaleDocIdx; } - } - - /// - /// Gets the root param for the document index en-/decoding - /// - /// The scale and root method of integer encoding needs two parameters, - /// which I'll call s (scale) and r (root size). - /// The integer is encoded as two parts, p (prefix) and q (actual bits). - /// p determines how many bits are stored, as well as implicitly determining - /// the high-order bit of the integer. - public byte RootDocumentIndex - { - get { return _rootDocIdx; } - } - - /// - /// Gets the scale param for the code-count en-/decoding - /// - /// The scale and root method of integer encoding needs two parameters, - /// which I'll call s (scale) and r (root size). - /// The integer is encoded as two parts, p (prefix) and q (actual bits). - /// p determines how many bits are stored, as well as implicitly determining - /// the high-order bit of the integer. - public byte ScaleCodeCount - { - get { return _scaleCodeCnt; } - } - - /// - /// Gets the root param for the code-count en-/decoding - /// - /// The scale and root method of integer encoding needs two parameters, - /// which I'll call s (scale) and r (root size). - /// The integer is encoded as two parts, p (prefix) and q (actual bits). - /// p determines how many bits are stored, as well as implicitly determining - /// the high-order bit of the integer. - public byte RootCodeCount - { - get { return _rootCodeCnt; } - } - - /// - /// Gets the scale param for the location codes en-/decoding - /// - /// The scale and root method of integer encoding needs two parameters, - /// which I'll call s (scale) and r (root size). - /// The integer is encoded as two parts, p (prefix) and q (actual bits). - /// p determines how many bits are stored, as well as implicitly determining - /// the high-order bit of the integer. - public byte ScaleLocationCodes - { - get { return _scaleLocCodes; } - } - - /// - /// Gets the root param for the location codes en-/decoding - /// - /// The scale and root method of integer encoding needs two parameters, - /// which I'll call s (scale) and r (root size). - /// The integer is encoded as two parts, p (prefix) and q (actual bits). - /// p determines how many bits are stored, as well as implicitly determining - /// the high-order bit of the integer. - public byte RootLocationCodes - { - get { return _rootLocCodes; } - } - - /// - /// Gets the size in bytes of each index/leaf node - /// - public int NodeSize - { - get { return _nodeSize; } - } - - /// - /// Gets the length of the longest word in the index - /// - private int LengthOfLongestWord - { - get { return _lengthOfLongestWord; } - } - - /// - /// Gets the total number of words indexed (including duplicates) - /// - public int TotalWordCount - { - get { return _totalNumberOfWords; } - } - - /// - /// Gets the total number of unique words indexed (excluding duplicates) - /// - public int UniqueWordCount - { - get { return _numberOfUniqueWords; } - } - - /// - /// Gets the codepage identifier - /// - public int CodePage - { - get { return _codePage; } - } - - /// - /// Gets the language code id - /// - public int LCID - { - get { return _lcid; } - } - - public Encoding TextEncoder - { - get - { - return _textEncoder; - } - } - } - - - /// - /// Internal class for easier hit recording and rate-calculation - /// - private sealed class HitHelper : IComparable - { - /// - /// Internal member storing the associated document index - /// - private int _documentIndex = 0; - /// - /// Internal member storing the title - /// - private string _title = ""; - /// - /// Internal member storing the locale - /// - private string _locale = ""; - /// - /// Internal member storing the location - /// - private string _location = ""; - /// - /// Internal member storing the url - /// - private string _url = ""; - /// - /// Internal member storing the rating - /// - private double _rating = 0; - /// - /// Internal member used for rating calculation - /// - private Hashtable _partialRating = new Hashtable(); - - /// - /// Constructor of the class - /// - /// document index - /// title - /// locale parameter - /// location - /// url of document - /// rating - public HitHelper(int documentIndex, string title, string locale, string location, string url, double rating) - { - _documentIndex = documentIndex; - _title = title; - _locale = locale; - _location = location; - _url = url; - _rating = rating; - } - - /// - /// Updates the rating for a found word - /// - /// word found - public void UpdateRating(string word) - { - if( _partialRating[word] == null) - { - _partialRating[word] = 100.0; - } - else - { - _partialRating[word] = ((double)_partialRating[word])*1.01; - } - - _rating = 0.0; - - foreach(double val in _partialRating.Values) - { - _rating += val; - } - } - - /// - /// Implements the CompareTo method of the IComparable interface. - /// Allows an easy sort by the document rating - /// - /// object to compare - /// 0 ... equal, -1 ... this instance is less than obj, 1 ... this instance is greater than obj - public int CompareTo(object obj) - { - if( obj is HitHelper ) - { - HitHelper hObj = (HitHelper)obj; - - return this.Rating.CompareTo( hObj.Rating ); - } - - return -1; - } - - /// - /// Gets the internal hashtable used for counting word hits of the document - /// - internal Hashtable PartialRating - { - get { return _partialRating; } - } - - /// - /// Gets the document index of the hit helper instance - /// - public int DocumentIndex - { - get { return _documentIndex; } - } - - /// - /// Gets the title - /// - public string Title - { - get { return _title; } - } - - /// - /// Gets the locale - /// - public string Locale - { - get { return _locale; } - } - - /// - /// Gets the location - /// - public string Location - { - get { return _location; } - } - - /// - /// Gets the url - /// - public string URL - { - get { return _url; } - } - - /// - /// Gets the rating - /// - public double Rating - { - get { return _rating; } - } - - } - - #endregion - - /// - /// Regular expression getting the text between to quotes - /// - private string RE_Quotes = @"\""(?.*?)\"""; - /// - /// Internal flag specifying if the object is going to be disposed - /// - private bool disposed = false; - /// - /// Internal member storing the binary file data - /// - private byte[] _binaryFileData = null; - /// - /// Internal datatable storing the search hits - /// - private DataTable _hits =null; - /// - /// Internal arraylist for hit management - /// - private ArrayList _hitsHelper = new ArrayList(); - /// - /// Internal member storing the header of the file - /// - private FTHeader _header = null; - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor of the class - /// - /// binary file data of the $FIftiMain file - /// associated chm file - public FullTextEngine(byte[] binaryFileData, CHMFile associatedFile) - { - _binaryFileData = binaryFileData; - _associatedFile = associatedFile; - - if(_associatedFile.SystemFile.FullTextSearch) - { - _header = new FTHeader(_binaryFileData); // reading header - } - } - - /// - /// Standard constructor - /// - internal FullTextEngine() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - _header.Dump(ref writer); - writer.Write( _binaryFileData.Length ); - writer.Write(_binaryFileData); - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - _header = new FTHeader(); - _header.ReadDump(ref reader); - - int nCnt = reader.ReadInt32(); - _binaryFileData = reader.ReadBytes(nCnt); - } - - /// - /// Sets the associated CHMFile instance - /// - /// instance to set - internal void SetCHMFile(CHMFile associatedFile) - { - _associatedFile = associatedFile; - } - #endregion - - /// - /// Gets a flag if full-text searching is available for this chm file. - /// - public bool CanSearch - { - get { return (_associatedFile.SystemFile.FullTextSearch && (_header != null) ); } - } - - /// - /// Performs a fulltext search of a single file. - /// - /// word(s) or phrase to search - /// true if partial word should be matched also - /// ( if this is true a search of 'support' will match 'supports', otherwise not ) - /// true if only search in titles - /// Hits are available through the Hists property. - public bool Search(string search, bool partialMatches, bool titleOnly) - { - return Search(search, -1, partialMatches, titleOnly); - } - - /// - /// Performs a fulltext search of a single file. - /// - /// word(s) or phrase to search - /// max hits. If this number is reached, the search will be interrupted - /// true if partial word should be matched also - /// ( if this is true a search of 'support' will match 'supports', otherwise not ) - /// true if only search in titles - /// Hits are available through the Hists property. - public bool Search(string search, int MaxHits, bool partialMatches, bool titleOnly) - { - if(CanSearch) - { - string searchString = search; - - // Check if this is a quoted string - bool IsQuoted = (search.IndexOf("\"")>-1); - - if(IsQuoted) - searchString = search.Replace("\"",""); // remove the quotes during search - - bool bRet = true; - - _hitsHelper = null; - _hitsHelper = new ArrayList(); - - _hits = null; - CreateHitsTable(); - - string[] words = searchString.Split(new char[] {' '}); - - for(int i=0; i= MaxHits) - break; - } - - if(bRet && IsQuoted) - { - FinalizeQuoted(search); - } - - if(bRet) - { - _hitsHelper.Sort(); - - int nhCount = MaxHits; - - if( MaxHits < 0) - { - nhCount = _hitsHelper.Count; - } - - if( nhCount > _hitsHelper.Count ) - nhCount = _hitsHelper.Count; - - // create hits datatable - for(int i=nhCount; i > 0; i--) - { - HitHelper curHlp = (HitHelper)(_hitsHelper[i-1]); - - DataRow newRow = _hits.NewRow(); - - newRow["Rating"] = curHlp.Rating; - newRow["Title"] = curHlp.Title; - newRow["Locale"] = curHlp.Locale; - newRow["Location"] = curHlp.Location; - newRow["URL"] = curHlp.URL; - - _hits.Rows.Add( newRow ); - } - } - return bRet; - } - - return false; - } - - /// - /// Gets rid of all search hits which doesn't match the quoted phrase - /// - /// full search string entered by the user - /// Phrase search is not possible using the internal full-text index. We're just filtering all - /// documents which don't contain all words of the phrase. - private void FinalizeQuoted(string search) - { - Regex quoteRE = new Regex(RE_Quotes, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - int innerTextIdx = quoteRE.GroupNumberFromName("innerText"); - int nIndex = 0; - - // get all phrases - while( quoteRE.IsMatch(search, nIndex) ) - { - Match m = quoteRE.Match(search, nIndex); - - string phrase = m.Groups["innerText"].Value; - - string[] wordsInPhrase = phrase.Split( new char[] {' '} ); - int nCnt = _hitsHelper.Count; - - for(int i=0; i < _hitsHelper.Count; i++) - { - if( ! CheckHit( ((HitHelper)(_hitsHelper[i])), wordsInPhrase) ) - _hitsHelper.RemoveAt(i--); - } - - nIndex = m.Index+m.Length; - } - } - - /// - /// Eliminates all search hits where not all of the words have been found - /// - /// hithelper instance to check - /// word list - private bool CheckHit(HitHelper hit, string[] wordsInPhrase) - { - - for(int i=0; i - /// Performs a search for a single word in the index - /// - /// word to search - /// maximal hits to return - /// true if partial word should be matched also - /// ( if this is true a search of 'support' will match 'supports', otherwise not ) - /// true if only search in titles - /// Returns true if succeeded - private bool SearchSingleWord(string word,int MaxHits, bool partialMatches, bool titleOnly) - { - string wordLower = word.ToLower(); - - MemoryStream memStream = new MemoryStream(_binaryFileData); - BinaryReader binReader = new BinaryReader(memStream); - - // seek to root node - binReader.BaseStream.Seek( _header.RootOffset, SeekOrigin.Begin ); - - if( _header.Depth > 2 ) - { - // unsupported index depth - Debug.WriteLine("FullTextSearcher.SearchSingleWord() - Failed with message: Unsupported index depth !"); - Debug.WriteLine("File: " + _associatedFile.ChmFilePath); - Debug.WriteLine(" "); - return false; - } - - if( _header.Depth > 1 ) - { - // seek to the right leaf node ( if depth == 1, we are at the leaf node) - int freeSpace = binReader.ReadInt16(); - - for(int i=0; i < _header.PageCount; ++i) - { - // exstract index entries - int nWLength = (int)binReader.ReadByte(); - int nCPosition = (int)binReader.ReadByte(); - - string sName = BinaryReaderHelp.ExtractString(ref binReader, nWLength-1, 0, true, _header.TextEncoder); - - int nLeafOffset = binReader.ReadInt32(); - binReader.ReadInt16(); // unknown - - if( sName.CompareTo(wordLower) >= 0) - { - // store current position - long curPos = binReader.BaseStream.Position; - - // seek to leaf offset - binReader.BaseStream.Seek( nLeafOffset, SeekOrigin.Begin ); - - // read leafnode - ReadLeafNode(ref binReader, word, MaxHits, partialMatches, titleOnly); - - // return to current position and continue reading index nodes - binReader.BaseStream.Seek( curPos, SeekOrigin.Begin ); - } - } - } - - return true; - } - - /// - /// Reads a leaf node and extracts documents which holds the searched word - /// - /// reference to the reader - /// word to search - /// maximal hits to return - /// true if partial word should be matched also - /// ( if this is true a search of 'support' will match 'supports', otherwise not ) - /// true if only search in titles - private void ReadLeafNode(ref BinaryReader binReader, string word, int MaxHits, bool partialMatches, bool titleOnly) - { - int nNextPageOffset = binReader.ReadInt32(); - binReader.ReadInt16(); // unknown - int lfreeSpace = binReader.ReadInt16(); - string curFullWord = ""; - bool bFound = false; - string wordLower = word.ToLower(); - - for(;;) - { - if(binReader.BaseStream.Position >= binReader.BaseStream.Length) - break; - - int nWLength = (int)binReader.ReadByte(); - - if(nWLength == 0) - break; - - int nCPosition = (int)binReader.ReadByte(); - - string sName = BinaryReaderHelp.ExtractString(ref binReader, nWLength-1, 0, true, _header.TextEncoder); - - int Context = (int)binReader.ReadByte(); // 0...body tag, 1...title tag, others unknown - - long nrOfWCL = BinaryReaderHelp.ReadENCINT(ref binReader); - int wclOffset = binReader.ReadInt32(); - - binReader.ReadInt16(); // unknown - - long bytesOfWCL = BinaryReaderHelp.ReadENCINT(ref binReader); - - if( nCPosition > 0) - { - curFullWord = CombineStrings(curFullWord, sName, nCPosition); - } - else - { - curFullWord = sName; - } - - bFound = false; - if(partialMatches) - bFound = ( curFullWord.IndexOf(wordLower) >= 0 ); - else - bFound = (curFullWord == wordLower); - - if( bFound ) - { - if( (titleOnly && (Context==1)) || (!titleOnly) ) - { - // store actual offset - long curPos = binReader.BaseStream.Position; - - // found the word, begin with WCL encoding - binReader.BaseStream.Seek(wclOffset, SeekOrigin.Begin ); - - byte[] wclBytes = binReader.ReadBytes((int)bytesOfWCL); - - DecodeWCL(wclBytes, MaxHits, word); - - // back and continue reading leafnodes - binReader.BaseStream.Seek(curPos, SeekOrigin.Begin ); - } - } - } - } - - /// - /// Decodes the s/r encoded WordCodeList (=wcl) and creates hit entries - /// - /// wcl encoded byte array - /// maximal hits - /// the word to find - private void DecodeWCL(byte[] wclBytes,int MaxHits, string word) - { - byte[] wclBits = new byte[ wclBytes.Length*8 ]; - - int nBitIdx=0; - - for(int i=0; i (byte)0 ? (byte)1 : (byte)0; - nBitIdx++; - } - } - - nBitIdx = 0; - - int nDocIdx = 0; // delta encoded - - while(nBitIdx < wclBits.Length) - { - nDocIdx += BinaryReaderHelp.ReadSRItem(wclBits, _header.ScaleDocumentIndex, _header.RootDocumentIndex, ref nBitIdx); - int nCodeCnt = BinaryReaderHelp.ReadSRItem(wclBits, _header.ScaleCodeCount, _header.RootCodeCount, ref nBitIdx); - - int nWordLocation = 0; // delta encoded - - for(int locidx=0; locidx MaxHits) - return; - - hitObj = new HitHelper(nDocIdx, ((TopicEntry)(_associatedFile.TopicsFile.TopicTable[nDocIdx])).Title, - ((TopicEntry)(_associatedFile.TopicsFile.TopicTable[nDocIdx])).Locale, _associatedFile.CompileFile, - ((TopicEntry)(_associatedFile.TopicsFile.TopicTable[nDocIdx])).URL, 0.0); - - for(int k=0;k - /// Combines a "master" word with a partial word. - /// - /// the master word - /// the partial word - /// position to place the parial word - /// returns a combined string - private string CombineStrings(string word, string partial, int partialPosition) - { - string sCombined = word; - int i=0; - - for(i=0; i (sCombined.Length-1) ) - { - sCombined += partial[i]; - } - else - { - StringBuilder sb = new StringBuilder(sCombined); - - sb.Replace( sCombined[partialPosition+i], partial[i], partialPosition+i, 1); - sCombined = sb.ToString(); - } - } - - if(! ((i+partialPosition) > (sCombined.Length-1)) ) - { - sCombined = sCombined.Substring(0, partialPosition+partial.Length); - } - - return sCombined; - } - - /// - /// Gets the HitHelper instance for a specific document index - /// - /// document index - /// The reference of the hithelper instance for this document index, otherwise null - private HitHelper DocumentHit(int index) - { - foreach(HitHelper curObj in _hitsHelper) - { - if( curObj.DocumentIndex == index) - return curObj; - } - - return null; - } - - /// - /// Creates a DataTable for storing the hits - /// - private void CreateHitsTable() - { - _hits = new DataTable("FT_Search_Hits"); - - DataColumn ftColumn; - - ftColumn = new DataColumn(); - ftColumn.DataType = System.Type.GetType("System.Double"); - ftColumn.ColumnName = "Rating"; - ftColumn.ReadOnly = false; - ftColumn.Unique = false; - - _hits.Columns.Add(ftColumn); - - ftColumn = new DataColumn(); - ftColumn.DataType = System.Type.GetType("System.String"); - ftColumn.ColumnName = "Title"; - ftColumn.ReadOnly = false; - ftColumn.Unique = false; - - _hits.Columns.Add(ftColumn); - - ftColumn = new DataColumn(); - ftColumn.DataType = System.Type.GetType("System.String"); - ftColumn.ColumnName = "Locale"; - ftColumn.ReadOnly = false; - ftColumn.Unique = false; - - _hits.Columns.Add(ftColumn); - - ftColumn = new DataColumn(); - ftColumn.DataType = System.Type.GetType("System.String"); - ftColumn.ColumnName = "Location"; - ftColumn.ReadOnly = false; - ftColumn.Unique = false; - - _hits.Columns.Add(ftColumn); - - ftColumn = new DataColumn(); - ftColumn.DataType = System.Type.GetType("System.String"); - ftColumn.ColumnName = "URL"; - ftColumn.ReadOnly = false; - ftColumn.Unique = false; - - _hits.Columns.Add(ftColumn); - } - - /// - /// Gets an datatable containing the hits of the last search - /// - public DataTable Hits - { - get { return _hits; } - } - - /// - /// Implement IDisposable. - /// - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - _binaryFileData = null; - } - } - disposed = true; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/HHCParser.cs b/irc/TechBot/CHMLibrary/CHMDecoding/HHCParser.cs deleted file mode 100644 index 73482712291..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/HHCParser.cs +++ /dev/null @@ -1,593 +0,0 @@ -using System; -using System.Collections; -using System.Text; -using System.Text.RegularExpressions; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class HHCParser implements a parser for HHC contents files. - /// - internal sealed class HHCParser - { - /// - /// regular expressions for replacing the sitemap boundary tags - /// - private static string RE_ULOpening = @"\"; // will be replaced by a '(' for nested parsing - private static string RE_ULClosing = @"\"; // will be replaced by a ')' for nested parsing - - /// - /// Matching ul-tags - /// - private static string RE_ULBoundaries = @"\(?.*)\"; - /// - /// Matching the nested tree structure. - /// - private static string RE_NestedBoundaries = @"\( (?> [^()]+ | \( (?) | \) (?<-DEPTH>) )* (?(DEPTH)(?!)) \)"; - /// - /// Matching object-tags - /// - private static string RE_ObjectBoundaries = @"\.*?)\"; - /// - /// Matching param tags - /// - private static string RE_ParamBoundaries = @"\.*?)\>"; - /// - /// Extracting tag attributes - /// - private const string RE_QuoteAttributes = @"( |\t)*(?[\-a-zA-Z0-9]*)( |\t)*=( |\t)*(?[\""\'])?(?.*?(?(attributeTD)\k|([\s>]|.$)))"; - - /// - /// private regular expressionobjects - /// - private static Regex ulRE; - private static Regex NestedRE; - private static Regex ObjectRE; - private static Regex ParamRE; - private static Regex AttributesRE; - - /// - /// Internal member storing the list of TOCItems which are holding merge links - /// - private static ArrayList _mergeItems = null; - - /// - /// Internal member storing the last read regular topic item. - /// This is used to handle "Merge" entries and add them as child to this instance. - /// - private static TOCItem _lastTopicItem = null; - - /// - /// Parses a HHC file and returns an ArrayList with the table of contents (TOC) tree - /// - /// string content of the hhc file - /// CHMFile instance - /// Returns an ArrayList with the table of contents (TOC) tree - public static ArrayList ParseHHC(string hhcFile, CHMFile chmFile) - { - _lastTopicItem = null; - _mergeItems = null; // clear merged item list - ArrayList tocList = new ArrayList(); - - ulRE = new Regex(RE_ULBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - NestedRE = new Regex(RE_NestedBoundaries, RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - ObjectRE = new Regex(RE_ObjectBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - ParamRE = new Regex(RE_ParamBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - AttributesRE = new Regex(RE_QuoteAttributes, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - - int innerTextIdx = ulRE.GroupNumberFromName("innerText"); - - if( ulRE.IsMatch(hhcFile, 0) ) - { - Match m = ulRE.Match(hhcFile, 0); - - int nFirstUL = 0; - - nFirstUL = hhcFile.ToLower().IndexOf("
    "); - - if(nFirstUL == -1) - nFirstUL = hhcFile.ToLower().IndexOf(""); - - if( ObjectRE.IsMatch(hhcFile, 0) ) // first object block contains information types and categories - { - Match mO = ObjectRE.Match(hhcFile, 0); - int iOTxt = ObjectRE.GroupNumberFromName("innerText"); - - string globalText = mO.Groups[iOTxt].Value; - - if( mO.Groups[iOTxt].Index <= nFirstUL) - ParseGlobalSettings( globalText, chmFile ); - } - - // parse toc tree - string innerText = m.Groups["innerText"].Value; - - innerText = innerText.Replace("(", "("); - innerText = innerText.Replace(")", ")"); - innerText = Regex.Replace(innerText, RE_ULOpening, "(", RegexOptions.IgnoreCase); - innerText = Regex.Replace(innerText, RE_ULClosing, ")", RegexOptions.IgnoreCase); - - ParseTree( innerText, null, tocList, chmFile ); - - } - - return tocList; - } - - /// - /// Checks if the hhc file contains a global object tag. - /// - /// string content of the hhc file - /// chm file - /// true if the hhc content contains a global object tag - public static bool HasGlobalObjectTag(string hhcFile, CHMFile chmFile) - { - bool bRet = false; - - ulRE = new Regex(RE_ULBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - ObjectRE = new Regex(RE_ObjectBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - - int innerTextIdx = ulRE.GroupNumberFromName("innerText"); - - if( ulRE.IsMatch(hhcFile, 0) ) - { - Match m = ulRE.Match(hhcFile, 0); - - int nFirstUL = 0; - - nFirstUL = hhcFile.ToLower().IndexOf("
      "); - - if(nFirstUL == -1) - nFirstUL = hhcFile.ToLower().IndexOf(""); - - if( ObjectRE.IsMatch(hhcFile, 0) ) // first object block contains information types and categories - { - Match mO = ObjectRE.Match(hhcFile, 0); - int iOTxt = ObjectRE.GroupNumberFromName("innerText"); - - string globalText = mO.Groups[iOTxt].Value; - - if( mO.Groups[iOTxt].Index <= nFirstUL) - bRet = true; - } - } - - return bRet; - } - - /// - /// Gets true if the previously done parsing found merge-links - /// - public static bool HasMergeLinks - { - get - { - if(_mergeItems==null) - return false; - - return _mergeItems.Count > 0; - } - } - - /// - /// Gets all TOCItem references which are holding merge-links - /// - public static ArrayList MergeItems - { - get { return _mergeItems; } - } - - /// - /// Recursively parses a sitemap tree - /// - /// content text - /// Parent for all read items - /// arraylist which receives the extracted nodes - /// CHMFile instance - private static void ParseTree( string text, TOCItem parent, ArrayList arrNodes, CHMFile chmFile ) - { - string strPreItems="", strPostItems=""; - string innerText = ""; - - int nIndex = 0; - - while( NestedRE.IsMatch(text, nIndex) ) - { - Match m = NestedRE.Match(text, nIndex); - - innerText = m.Value.Substring( 1, m.Length-2); - - strPreItems = text.Substring(nIndex,m.Index-nIndex); - - ParseItems(strPreItems, parent, arrNodes, chmFile); - - if((arrNodes.Count>0) && (innerText.Length > 0) ) - { - TOCItem p = ((TOCItem)(arrNodes[arrNodes.Count-1])); - ParseTree( innerText, p, p.Children, chmFile ); - } - - nIndex = m.Index+m.Length; - } - - if( nIndex == 0) - { - strPostItems = text.Substring(nIndex, text.Length-nIndex); - ParseItems(strPostItems, parent, arrNodes, chmFile); - } - else if( nIndex < text.Length-1) - { - strPostItems = text.Substring(nIndex, text.Length-nIndex); - ParseTree(strPostItems, parent, arrNodes, chmFile); - } - } - - /// - /// Parses tree nodes from the text - /// - /// text containing the items - /// Parent for all read items - /// arraylist where the nodes should be added - /// CHMFile instance - private static void ParseItems( string itemstext, TOCItem parent, ArrayList arrNodes, CHMFile chmFile) - { - int innerTextIdx = ObjectRE.GroupNumberFromName("innerText"); - int innerPTextIdx = ParamRE.GroupNumberFromName("innerText"); - - // get group-name indexes - int nameIndex = AttributesRE.GroupNumberFromName("attributeName"); - int valueIndex = AttributesRE.GroupNumberFromName("attributeValue"); - int tdIndex = AttributesRE.GroupNumberFromName("attributeTD"); - - int nObjStartIndex = 0; - - while( ObjectRE.IsMatch(itemstext, nObjStartIndex) ) - { - Match m = ObjectRE.Match(itemstext, nObjStartIndex); - - string innerText = m.Groups[innerTextIdx].Value; - - TOCItem tocItem = new TOCItem(); - tocItem.TocMode = DataMode.TextBased; - tocItem.AssociatedFile = chmFile; - tocItem.Parent = parent; - - // read parameters - int nParamIndex = 0; - - while( ParamRE.IsMatch(innerText, nParamIndex) ) - { - Match mP = ParamRE.Match(innerText, nParamIndex); - - string innerP = mP.Groups[innerPTextIdx].Value; - - string paramName = ""; - string paramValue = ""; - - int nAttrIdx = 0; - - while( AttributesRE.IsMatch( innerP, nAttrIdx ) ) - { - Match mA = AttributesRE.Match(innerP, nAttrIdx); - - string attributeName = mA.Groups[nameIndex].Value; - string attributeValue = mA.Groups[valueIndex].Value; - string attributeTD = mA.Groups[tdIndex].Value; - - if(attributeTD.Length > 0) - { - // delete the trailing textqualifier - if( attributeValue.Length > 0) - { - int ltqi = attributeValue.LastIndexOf( attributeTD ); - - if(ltqi >= 0) - { - attributeValue = attributeValue.Substring(0,ltqi); - } - } - } - - if( attributeName.ToLower() == "name") - { - paramName = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values - } - - if( attributeName.ToLower() == "value") - { - paramValue = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values - // delete trailing / - while((paramValue.Length>0)&&(paramValue[paramValue.Length-1] == '/')) - paramValue = paramValue.Substring(0,paramValue.Length-1); - - } - - nAttrIdx = mA.Index+mA.Length; - } - - tocItem.Params[paramName] = paramValue; - switch(paramName.ToLower()) - { - case "name": - { - tocItem.Name = paramValue; - };break; - case "local": - { - tocItem.Local = paramValue.Replace("../", "").Replace("./", ""); - };break; - case "imagenumber": - { - tocItem.ImageIndex = Int32.Parse(paramValue); - tocItem.ImageIndex-=1; - - int nFolderAdd = 0; - - if((chmFile != null) && (chmFile.ImageTypeFolder)) - { - // get the value which should be added, to display folders instead of books - if(HtmlHelpSystem.UseHH2TreePics) - nFolderAdd = 8; - else - nFolderAdd = 4; - } - - if(tocItem.ImageIndex%2 != 0) - { - if(tocItem.ImageIndex==1) - tocItem.ImageIndex=0; - } - if(HtmlHelpSystem.UseHH2TreePics) - if( tocItem.ImageIndex == 0) - tocItem.ImageIndex = TOCItem.STD_FOLDER_HH2+nFolderAdd; - };break; - case "merge": // this item contains topics or a full TOC from a merged CHM - { - tocItem.MergeLink = paramValue; - - // "register" this item as merge-link - if(_mergeItems==null) - _mergeItems=new ArrayList(); - - _mergeItems.Add(tocItem); - - };break; - case "type": // information type assignment for item - { - tocItem.InfoTypeStrings.Add( paramValue ); - };break; - } - - nParamIndex = mP.Index+mP.Length; - } - - tocItem.ChmFile = chmFile.ChmFilePath; - - if(tocItem.MergeLink.Length > 0) - { - if(_lastTopicItem != null) - { - tocItem.Parent = _lastTopicItem; - _lastTopicItem.Children.Add(tocItem); - } - else - arrNodes.Add( tocItem ); - } - else - { - _lastTopicItem = tocItem; - arrNodes.Add( tocItem ); - } - - nObjStartIndex = m.Index+m.Length; - } - } - - /// - /// Parses the very first <OBJECT> tag in the sitemap file and extracts - /// information types and categories. - /// - /// text of the object tag - /// CHMFile instance - private static void ParseGlobalSettings(string sText, CHMFile chmFile) - { - int innerPTextIdx = ParamRE.GroupNumberFromName("innerText"); - - // get group-name indexes - int nameIndex = AttributesRE.GroupNumberFromName("attributeName"); - int valueIndex = AttributesRE.GroupNumberFromName("attributeValue"); - int tdIndex = AttributesRE.GroupNumberFromName("attributeTD"); - - // read parameters - int nParamIndex = 0; - - // 0... unknown - // 1... inclusinve info type name - // 2... exclusive info type name - // 3... hidden info type name - // 4... category name - // 5... incl infotype name for category - // 6... excl infotype name for category - // 7... hidden infotype name for category - int prevItem = 0; - - string sName = ""; - string sDescription = ""; - string curCategory = ""; - - while( ParamRE.IsMatch(sText, nParamIndex) ) - { - Match mP = ParamRE.Match(sText, nParamIndex); - - string innerP = mP.Groups[innerPTextIdx].Value; - - string paramName = ""; - string paramValue = ""; - - int nAttrIdx = 0; - - while( AttributesRE.IsMatch( innerP, nAttrIdx ) ) - { - Match mA = AttributesRE.Match(innerP, nAttrIdx); - - string attributeName = mA.Groups[nameIndex].Value; - string attributeValue = mA.Groups[valueIndex].Value; - string attributeTD = mA.Groups[tdIndex].Value; - - if(attributeTD.Length > 0) - { - // delete the trailing textqualifier - if( attributeValue.Length > 0) - { - int ltqi = attributeValue.LastIndexOf( attributeTD ); - - if(ltqi >= 0) - { - attributeValue = attributeValue.Substring(0,ltqi); - } - } - } - - if( attributeName.ToLower() == "name") - { - paramName = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values - } - - if( attributeName.ToLower() == "value") - { - paramValue = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values - // delete trailing / - while((paramValue.Length>0)&&(paramValue[paramValue.Length-1] == '/')) - paramValue = paramValue.Substring(0,paramValue.Length-1); - - } - - nAttrIdx = mA.Index+mA.Length; - } - - switch(paramName.ToLower()) - { - case "savetype": // inclusive information type name - { - prevItem = 1; - sName = paramValue; - };break; - case "savetypedesc": // description of information type - { - InformationTypeMode mode = InformationTypeMode.Inclusive; - sDescription = paramValue; - - if( prevItem == 1) - mode = InformationTypeMode.Inclusive; - if( prevItem == 2) - mode = InformationTypeMode.Exclusive; - if( prevItem == 3) - mode = InformationTypeMode.Hidden; - - if( chmFile.GetInformationType( sName ) == null) - { - // check if the HtmlHelpSystem already holds such an information type - if( chmFile.SystemInstance.GetInformationType( sName ) == null) - { - // info type not found yet - - InformationType newType = new InformationType(sName, sDescription, mode); - chmFile.InformationTypes.Add(newType); - } - else - { - InformationType sysType = chmFile.SystemInstance.GetInformationType( sName ); - chmFile.InformationTypes.Add( sysType ); - } - } - - prevItem = 0; - };break; - case "saveexclusive": // exclusive information type name - { - prevItem = 2; - sName = paramValue; - };break; - case "savehidden": // hidden information type name - { - prevItem = 3; - sName = paramValue; - };break; - case "category": // category name - { - prevItem = 4; - sName = paramValue; - curCategory = sName; - };break; - case "categorydesc": // category description - { - sDescription = paramValue; - - if( chmFile.GetCategory( sName ) == null) - { - // check if the HtmlHelpSystem already holds such a category - if( chmFile.SystemInstance.GetCategory( sName ) == null) - { - // add category - Category newCat = new Category(sName, sDescription); - chmFile.Categories.Add(newCat); - } - else - { - Category sysCat = chmFile.SystemInstance.GetCategory( sName ); - chmFile.Categories.Add( sysCat ); - } - } - - prevItem = 0; - };break; - case "type": // inclusive information type which is member of the previously read category - { - prevItem = 5; - sName = paramValue; - };break; - case "typedesc": // description of type for category - { - sDescription = paramValue; - Category cat = chmFile.GetCategory( curCategory ); - - if( cat != null) - { - // category found - InformationType infoType = chmFile.GetInformationType( sName ); - - if( infoType != null) - { - if( !cat.ContainsInformationType(infoType)) - { - infoType.SetCategoryFlag(true); - cat.AddInformationType(infoType); - } - } - } - - prevItem = 0; - };break; - case "typeexclusive": // exclusive information type which is member of the previously read category - { - prevItem = 6; - sName = paramValue; - };break; - case "typehidden": // hidden information type which is member of the previously read category - { - prevItem = 7; - sName = paramValue; - };break; - default: - { - prevItem = 0; - sName = ""; - sDescription = ""; - };break; - } - - nParamIndex = mP.Index+mP.Length; - } - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/HHCParser2.cs b/irc/TechBot/CHMLibrary/CHMDecoding/HHCParser2.cs deleted file mode 100644 index bdb988a8665..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/HHCParser2.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System; -using System.Collections; -using System.Text; -using System.Text.RegularExpressions; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class HHCParser implements a parser for HHC contents files. - /// - // internal sealed class HHCParser : IHHCParser - public class HHCParser2 - { - static private string m_text1=""; - static private string m_text2=""; - static private int m_CurrentPos=0; - - /// - /// Parses a HHC file and returns an ArrayList with the table of contents (TOC) tree - /// - /// string content of the hhc file - /// CHMFile instance - /// Returns an ArrayList with the table of contents (TOC) tree - public static ArrayList ParseHHC(string hhcFile, CHMFile chmFile) - { - DateTime StartTime=DateTime.Now; - - ArrayList tocList = new ArrayList(); - - m_text2=hhcFile; - m_text1=hhcFile.ToLower(); - - int idx=m_text1.IndexOf("
        "); - if (idx==-1) - return null; - m_CurrentPos=idx+4; - - ParamRE = new Regex(RE_ParamBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - AttributesRE = new Regex(RE_QuoteAttributes, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - - ParseTree(tocList,chmFile); - - DateTime EndTime=DateTime.Now; - TimeSpan Diff=EndTime-StartTime; - string x=Diff.ToString(); - - return tocList; - } - - /// - /// Recursively parses a sitemap tree - /// - /// content text - /// arraylist which receives the extracted nodes - /// CHMFile instance - static private void ParseTree( ArrayList arrNodes, CHMFile chmFile ) - { - bool bProcessing=true; - do - { - bProcessing=false; - - // Indent - int idxa=m_text1.IndexOf("
          ",m_CurrentPos); - int idxb=m_text1.IndexOf("
        • ",m_CurrentPos); - int idxc=m_text1.IndexOf("
        ",m_CurrentPos); - - if ((idxa-1)) - { - bProcessing=true; - m_CurrentPos=idxa+4; - if (arrNodes.Count<1) - { - ParseTree(arrNodes,chmFile); - } - else - { - ParseTree(((TOCItem)(arrNodes[arrNodes.Count-1])).Children,chmFile); - } - continue; - } - - // new item - if ((idxb-1)) - { - - bProcessing=true; - m_CurrentPos=idxb+4; - - int idx2=m_text1.IndexOf("",idx2+7); - if (idx3!=-1) - { - string text=m_text2.Substring(idx2,idx3-idx2); - - m_CurrentPos=idx3+9; - - // Parse items in text. - TOCItem tocItem=ParseItems(text, chmFile); - if (tocItem!=null) - { - arrNodes.Add(tocItem); - } - } - } - } - - // Undent - if ((idxc-1)) - { - m_CurrentPos=idxc+5; - bProcessing=true; - return; - } - } - while (bProcessing); - } - - - private static string RE_ParamBoundaries = @"\.*?)\>"; - private const string RE_QuoteAttributes = @"( |\t)*(?[\-a-zA-Z0-9]*)( |\t)*=( |\t)*(?[\""\'])?(?.*?(?(attributeTD)\k|([\s>]|.$)))"; - private static Regex ParamRE; - private static Regex AttributesRE; - - /// - /// Parses tree nodes from the text - /// - /// text containing the items - /// arraylist where the nodes should be added - /// CHMFile instance - private static TOCItem ParseItems( string itemstext, CHMFile chmFile) - { - int innerPTextIdx = ParamRE.GroupNumberFromName("innerText"); - - // get group-name indexes - int nameIndex = AttributesRE.GroupNumberFromName("attributeName"); - int valueIndex = AttributesRE.GroupNumberFromName("attributeValue"); - int tdIndex = AttributesRE.GroupNumberFromName("attributeTD"); - - TOCItem tocItem = new TOCItem(); - - // read parameters - int nParamIndex = 0; - - while( ParamRE.IsMatch(itemstext, nParamIndex) ) - { - Match mP = ParamRE.Match(itemstext, nParamIndex); - - string innerP = mP.Groups[innerPTextIdx].Value; - - string paramName = ""; - string paramValue = ""; - - int nAttrIdx = 0; - - while( AttributesRE.IsMatch( innerP, nAttrIdx ) ) - { - Match mA = AttributesRE.Match(innerP, nAttrIdx); - - string attributeName = mA.Groups[nameIndex].Value; - string attributeValue = mA.Groups[valueIndex].Value; - string attributeTD = mA.Groups[tdIndex].Value; - - if(attributeTD.Length > 0) - { - // delete the trailing textqualifier - if( attributeValue.Length > 0) - { - int ltqi = attributeValue.LastIndexOf( attributeTD ); - - if(ltqi >= 0) - { - attributeValue = attributeValue.Substring(0,ltqi); - } - } - } - - if( attributeName.ToLower() == "name") - { - paramName = attributeValue; - } - - if( attributeName.ToLower() == "value") - { - paramValue = attributeValue; - } - - nAttrIdx = mA.Index+mA.Length; - } - - tocItem.Params[paramName] = paramValue; - switch(paramName.ToLower()) - { - case "name": - { - tocItem.Name = paramValue; - };break; - case "local": - { - tocItem.Local = paramValue; - };break; - case "imagenumber": - { - tocItem.ImageIndex = Int32.Parse(paramValue); - - if( tocItem.ImageIndex == 2) - tocItem.ImageIndex = TOCItem.STD_FOLDER_HH1; - };break; - } - - nParamIndex = mP.Index+mP.Length; - } - - tocItem.ChmFile = chmFile.ChmFilePath; - return tocItem; - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/HHKParser.cs b/irc/TechBot/CHMLibrary/CHMDecoding/HHKParser.cs deleted file mode 100644 index 63f1c136799..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/HHKParser.cs +++ /dev/null @@ -1,550 +0,0 @@ -using System; -using System.IO; -using System.Collections; -using System.Text; -using System.Text.RegularExpressions; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class HHKParser implements a parser for HHK contents files. - /// - internal sealed class HHKParser - { - /// - /// regular expressions for replacing the sitemap boundary tags - /// - private static string RE_ULOpening = @"\"; // will be replaced by a '(' for nested parsing - private static string RE_ULClosing = @"\"; // will be replaced by a ')' for nested parsing - - /// - /// Matching ul-tags - /// - private static string RE_ULBoundaries = @"\(?.*)\"; - /// - /// Matching the nested tree structure. - /// - private static string RE_NestedBoundaries = @"\( (?> [^()]+ | \( (?) | \) (?<-DEPTH>) )* (?(DEPTH)(?!)) \)"; - /// - /// Matching object-tags - /// - private static string RE_ObjectBoundaries = @"\.*?)\"; - /// - /// Matching param tags - /// - private static string RE_ParamBoundaries = @"\.*?)\>"; - /// - /// Extracting tag attributes - /// - private const string RE_QuoteAttributes = @"( |\t)*(?[\-a-zA-Z0-9]*)( |\t)*=( |\t)*(?[\""\'])?(?.*?(?(attributeTD)\k|([\s>]|.$)))"; - - /// - /// private regular expressionobjects - /// - private static Regex ulRE; - private static Regex NestedRE; - private static Regex ObjectRE; - private static Regex ParamRE; - private static Regex AttributesRE; - - /// - /// Parses a HHK file and returns an ArrayList with the index tree - /// - /// string content of the hhk file - /// CHMFile instance - /// Returns an ArrayList with the index tree - public static ArrayList ParseHHK(string hhkFile, CHMFile chmFile) - { - ArrayList indexList = new ArrayList(); - - ulRE = new Regex(RE_ULBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - NestedRE = new Regex(RE_NestedBoundaries, RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - ObjectRE = new Regex(RE_ObjectBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - ParamRE = new Regex(RE_ParamBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - AttributesRE = new Regex(RE_QuoteAttributes, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline); - - int innerTextIdx = ulRE.GroupNumberFromName("innerText"); - - if( ulRE.IsMatch(hhkFile, 0) ) - { - Match m = ulRE.Match(hhkFile, 0); - - if( ObjectRE.IsMatch(hhkFile, 0) ) // first object block contains information types and categories - { - Match mO = ObjectRE.Match(hhkFile, 0); - int iOTxt = ObjectRE.GroupNumberFromName("innerText"); - - string globalText = mO.Groups[iOTxt].Value; - - ParseGlobalSettings( globalText, chmFile ); - } - - string innerText = m.Groups["innerText"].Value; - - innerText = innerText.Replace("(", "("); - innerText = innerText.Replace(")", ")"); - innerText = Regex.Replace(innerText, RE_ULOpening, "(", RegexOptions.IgnoreCase); - innerText = Regex.Replace(innerText, RE_ULClosing, ")", RegexOptions.IgnoreCase); - - ParseTree( innerText, null, indexList, chmFile ); - } - - return indexList; - } - - /// - /// Recursively parses a sitemap tree - /// - /// content text - /// Parent for all read items - /// arraylist which receives the extracted nodes - /// CHMFile instance - private static void ParseTree( string text, IndexItem parent, ArrayList arrNodes, CHMFile chmFile ) - { - string strPreItems="", strPostItems=""; - string innerText = ""; - - int nIndex = 0; - - while( NestedRE.IsMatch(text, nIndex) ) - { - Match m = NestedRE.Match(text, nIndex); - - innerText = m.Value.Substring( 1, m.Length-2); - - strPreItems = text.Substring(nIndex,m.Index-nIndex); - - ParseItems(strPreItems, parent, arrNodes, chmFile); - - if((arrNodes.Count>0) && (innerText.Length > 0) ) - { - IndexItem p = ((IndexItem)(arrNodes[arrNodes.Count-1])); - ParseTree( innerText, p, arrNodes, chmFile ); - } - - nIndex = m.Index+m.Length; - } - - if( nIndex == 0) - { - strPostItems = text.Substring(nIndex, text.Length-nIndex); - ParseItems(strPostItems, parent, arrNodes, chmFile); - } - else if( nIndex < text.Length-1) - { - strPostItems = text.Substring(nIndex, text.Length-nIndex); - ParseTree(strPostItems, parent, arrNodes, chmFile); - } - } - - - /// - /// Parses nodes from the text - /// - /// text containing the items - /// parent index item - /// arraylist where the nodes should be added - /// CHMFile instance - private static void ParseItems( string itemstext, IndexItem parentItem, ArrayList arrNodes, CHMFile chmFile) - { - int innerTextIdx = ObjectRE.GroupNumberFromName("innerText"); - int innerPTextIdx = ParamRE.GroupNumberFromName("innerText"); - - // get group-name indexes - int nameIndex = AttributesRE.GroupNumberFromName("attributeName"); - int valueIndex = AttributesRE.GroupNumberFromName("attributeValue"); - int tdIndex = AttributesRE.GroupNumberFromName("attributeTD"); - - int nObjStartIndex = 0; - int nLastObjStartIndex = 0; - string sKeyword = ""; - - while( ObjectRE.IsMatch(itemstext, nObjStartIndex) ) - { - Match m = ObjectRE.Match(itemstext, nObjStartIndex); - - string innerText = m.Groups[innerTextIdx].Value; - - IndexItem idxItem = new IndexItem(); - - // read parameters - int nParamIndex = 0; - int nNameCnt = 0; - - string paramTitle = ""; - string paramLocal = ""; - bool bAdded = false; - - while( ParamRE.IsMatch(innerText, nParamIndex) ) - { - Match mP = ParamRE.Match(innerText, nParamIndex); - - string innerP = mP.Groups[innerPTextIdx].Value; - - string paramName = ""; - string paramValue = ""; - - int nAttrIdx = 0; - //sKeyword = ""; - - while( AttributesRE.IsMatch( innerP, nAttrIdx ) ) - { - Match mA = AttributesRE.Match(innerP, nAttrIdx); - - string attributeName = mA.Groups[nameIndex].Value; - string attributeValue = mA.Groups[valueIndex].Value; - string attributeTD = mA.Groups[tdIndex].Value; - - if(attributeTD.Length > 0) - { - // delete the trailing textqualifier - if( attributeValue.Length > 0) - { - int ltqi = attributeValue.LastIndexOf( attributeTD ); - - if(ltqi >= 0) - { - attributeValue = attributeValue.Substring(0,ltqi); - } - } - } - - if( attributeName.ToLower() == "name") - { - paramName = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values - nNameCnt++; - } - - if( attributeName.ToLower() == "value") - { - paramValue = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values - // delete trailing / - while((paramValue.Length>0)&&(paramValue[paramValue.Length-1] == '/')) - paramValue = paramValue.Substring(0,paramValue.Length-1); - } - - nAttrIdx = mA.Index+mA.Length; - } - - if( nNameCnt == 1) // first "Name" param = keyword - { - sKeyword = ""; - - if(parentItem != null) - sKeyword = parentItem.KeyWordPath + ","; - - string sOldKW = sKeyword; - - sKeyword += paramValue; - - IndexItem idxFind = FindByKeyword(arrNodes, sKeyword); - - if(idxFind != null) - { - idxItem = idxFind; - } - else - { - if( sKeyword.Split(new char[] {','}).Length > 1 ) - { - idxItem.CharIndex = sKeyword.Length - paramValue.Length; - } - else - { - sKeyword = paramValue; - sOldKW = sKeyword; - idxItem.CharIndex = 0; - } - - idxItem.KeyWordPath = sKeyword; - idxItem.Indent = sKeyword.Split(new char[] {','}).Length - 1; - idxItem.IsSeeAlso = false; - - sKeyword = sOldKW; - } - } - else - { - - if( (nNameCnt > 2) && (paramName.ToLower()=="name") ) - { - bAdded = true; - IndexTopic idxTopic = new IndexTopic(paramTitle, paramLocal, chmFile.CompileFile, chmFile.ChmFilePath); - - idxItem.Topics.Add( idxTopic ); - - paramTitle = ""; - paramLocal = ""; - } - - switch(paramName.ToLower()) - { - case "name": - //case "keyword": - { - paramTitle = paramValue; - };break; - case "local": - { - paramLocal = paramValue.Replace("../", "").Replace("./", ""); - };break; - case "type": // information type assignment for item - { - idxItem.InfoTypeStrings.Add( paramValue ); - };break; - case "see also": - { - idxItem.AddSeeAlso(paramValue); - idxItem.IsSeeAlso = true; - bAdded = true; - };break; - } - } - - nParamIndex = mP.Index+mP.Length; - } - - if(!bAdded) - { - bAdded=false; - IndexTopic idxTopic = new IndexTopic(paramTitle, paramLocal, chmFile.CompileFile, chmFile.ChmFilePath); - - idxItem.Topics.Add( idxTopic ); - - paramTitle = ""; - paramLocal = ""; - } - - idxItem.ChmFile = chmFile; - arrNodes.Add( idxItem ); - - nLastObjStartIndex = nObjStartIndex; - nObjStartIndex = m.Index+m.Length; - } - } - - /// - /// Searches an index-keyword in the index list - /// - /// index list to search - /// keyword to find - /// Returns an IndexItem instance if found, otherwise null. - private static IndexItem FindByKeyword(ArrayList indexList, string Keyword) - { - foreach(IndexItem curItem in indexList) - { - if( curItem.KeyWordPath == Keyword) - return curItem; - } - - return null; - } - - /// - /// Parses the very first <OBJECT> tag in the sitemap file and extracts - /// information types and categories. - /// - /// text of the object tag - /// CHMFile instance - private static void ParseGlobalSettings(string sText, CHMFile chmFile) - { - int innerPTextIdx = ParamRE.GroupNumberFromName("innerText"); - - // get group-name indexes - int nameIndex = AttributesRE.GroupNumberFromName("attributeName"); - int valueIndex = AttributesRE.GroupNumberFromName("attributeValue"); - int tdIndex = AttributesRE.GroupNumberFromName("attributeTD"); - - // read parameters - int nParamIndex = 0; - - // 0... unknown - // 1... inclusinve info type name - // 2... exclusive info type name - // 3... hidden info type name - // 4... category name - // 5... incl infotype name for category - // 6... excl infotype name for category - // 7... hidden infotype name for category - int prevItem = 0; - - string sName = ""; - string sDescription = ""; - string curCategory = ""; - - while( ParamRE.IsMatch(sText, nParamIndex) ) - { - Match mP = ParamRE.Match(sText, nParamIndex); - - string innerP = mP.Groups[innerPTextIdx].Value; - - string paramName = ""; - string paramValue = ""; - - int nAttrIdx = 0; - - while( AttributesRE.IsMatch( innerP, nAttrIdx ) ) - { - Match mA = AttributesRE.Match(innerP, nAttrIdx); - - string attributeName = mA.Groups[nameIndex].Value; - string attributeValue = mA.Groups[valueIndex].Value; - string attributeTD = mA.Groups[tdIndex].Value; - - if(attributeTD.Length > 0) - { - // delete the trailing textqualifier - if( attributeValue.Length > 0) - { - int ltqi = attributeValue.LastIndexOf( attributeTD ); - - if(ltqi >= 0) - { - attributeValue = attributeValue.Substring(0,ltqi); - } - } - } - - if( attributeName.ToLower() == "name") - { - paramName = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values - } - - if( attributeName.ToLower() == "value") - { - paramValue = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values - // delete trailing / - while((paramValue.Length>0)&&(paramValue[paramValue.Length-1] == '/')) - paramValue = paramValue.Substring(0,paramValue.Length-1); - - } - - nAttrIdx = mA.Index+mA.Length; - } - - switch(paramName.ToLower()) - { - case "savetype": // inclusive information type name - { - prevItem = 1; - sName = paramValue; - };break; - case "savetypedesc": // description of information type - { - InformationTypeMode mode = InformationTypeMode.Inclusive; - sDescription = paramValue; - - if( prevItem == 1) - mode = InformationTypeMode.Inclusive; - if( prevItem == 2) - mode = InformationTypeMode.Exclusive; - if( prevItem == 3) - mode = InformationTypeMode.Hidden; - - if( chmFile.GetInformationType( sName ) == null) - { - // check if the HtmlHelpSystem already holds such an information type - if( chmFile.SystemInstance.GetInformationType( sName ) == null) - { - // info type not found yet - - InformationType newType = new InformationType(sName, sDescription, mode); - chmFile.InformationTypes.Add(newType); - } - else - { - InformationType sysType = chmFile.SystemInstance.GetInformationType( sName ); - chmFile.InformationTypes.Add( sysType ); - } - } - - prevItem = 0; - };break; - case "saveexclusive": // exclusive information type name - { - prevItem = 2; - sName = paramValue; - };break; - case "savehidden": // hidden information type name - { - prevItem = 3; - sName = paramValue; - };break; - case "category": // category name - { - prevItem = 4; - sName = paramValue; - curCategory = sName; - };break; - case "categorydesc": // category description - { - sDescription = paramValue; - - if( chmFile.GetCategory( sName ) == null) - { - // check if the HtmlHelpSystem already holds such a category - if( chmFile.SystemInstance.GetCategory( sName ) == null) - { - // add category - Category newCat = new Category(sName, sDescription); - chmFile.Categories.Add(newCat); - } - else - { - Category sysCat = chmFile.SystemInstance.GetCategory( sName ); - chmFile.Categories.Add( sysCat ); - } - } - - prevItem = 0; - };break; - case "type": // inclusive information type which is member of the previously read category - { - prevItem = 5; - sName = paramValue; - };break; - case "typedesc": // description of type for category - { - sDescription = paramValue; - Category cat = chmFile.GetCategory( curCategory ); - - if( cat != null) - { - // category found - InformationType infoType = chmFile.GetInformationType( sName ); - - if( infoType != null) - { - if( !cat.ContainsInformationType(infoType)) - { - infoType.SetCategoryFlag(true); - cat.AddInformationType(infoType); - } - } - } - - prevItem = 0; - };break; - case "typeexclusive": // exclusive information type which is member of the previously read category - { - prevItem = 6; - sName = paramValue; - };break; - case "typehidden": // hidden information type which is member of the previously read category - { - prevItem = 7; - sName = paramValue; - };break; - default: - { - prevItem = 0; - sName = ""; - sDescription = ""; - };break; - } - - nParamIndex = mP.Index+mP.Length; - } - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/TopicEntry.cs b/irc/TechBot/CHMLibrary/CHMDecoding/TopicEntry.cs deleted file mode 100644 index 16bde7d9d0d..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/TopicEntry.cs +++ /dev/null @@ -1,245 +0,0 @@ -using System; -using System.IO; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class TopicEntry stores the data for one topic entry - /// - internal sealed class TopicEntry - { - /// - /// Internal member storing the offset of this topic entry - /// - private int _entryOffset = 0; - /// - /// Internal member storing the index of the binary toc - /// - private int _tocidxOffset = 0; - /// - /// Internal member storing the string offset of the title - /// - private int _titleOffset = 0; - /// - /// Internal member storuing the urltable offset - /// - private int _urltableOffset = 0; - /// - /// Internal member storing the visibility mode - /// - private int _visibilityMode = 0; - /// - /// Internal member storing an unknown mode - /// - private int _unknownMode = 0; - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor of the class - /// - /// offset of this entry - /// offset in the binary toc index - /// offset of the title (in the #STRINGS file) - /// offset in the urltable containing the urlstr offset for the url - /// visibility mode 2 indicates not in contents, 6 indicates that it is in the contents, 0/4 something else (unknown) - /// 0, 2, 4, 8, 10, 12, 16, 32 (unknown) - public TopicEntry(int entryOffset, int tocidxOffset, int titleOffset, int urltableOffset, int visibilityMode, int unknownMode) :this(entryOffset, tocidxOffset, titleOffset, urltableOffset, visibilityMode, unknownMode, null) - { - - } - - /// - /// Constructor of the class - /// - /// offset of this entry - /// offset in the binary toc index - /// offset of the title (in the #STRINGS file) - /// offset in the urltable containing the urlstr offset for the url - /// visibility mode 2 indicates not in contents, 6 indicates that it is in the contents, 0/4 something else (unknown) - /// 0, 2, 4, 8, 10, 12, 16, 32 (unknown) - /// associated chmfile object - internal TopicEntry(int entryOffset, int tocidxOffset, int titleOffset, int urltableOffset, int visibilityMode, int unknownMode, CHMFile associatedFile) - { - _entryOffset = entryOffset; - _tocidxOffset = tocidxOffset; - _titleOffset = titleOffset; - _urltableOffset = urltableOffset; - _visibilityMode = visibilityMode; - _unknownMode = unknownMode; - _associatedFile = associatedFile; - } - - /// - /// Standard constructor - /// - internal TopicEntry() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( _entryOffset ); - writer.Write( _tocidxOffset ); - writer.Write( _titleOffset ); - writer.Write( _urltableOffset ); - writer.Write( _visibilityMode ); - writer.Write( _unknownMode ); - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - _entryOffset = reader.ReadInt32(); - _tocidxOffset = reader.ReadInt32(); - _titleOffset = reader.ReadInt32(); - _urltableOffset = reader.ReadInt32(); - _visibilityMode = reader.ReadInt32(); - _unknownMode = reader.ReadInt32(); - } - - /// - /// Sets the associated CHMFile instance - /// - /// instance to set - internal void SetCHMFile(CHMFile associatedFile) - { - _associatedFile = associatedFile; - } - #endregion - - /// - /// Gets the associated chm file - /// - internal CHMFile ChmFile - { - get { return _associatedFile; } - } - - /// - /// Gets the offset of this entry - /// - internal int EntryOffset - { - get { return _entryOffset; } - } - - /// - /// Gets the tocidx offset - /// - internal int TOCIdxOffset - { - get { return _tocidxOffset; } - } - - /// - /// Gets the title offset of the #STRINGS file - /// - internal int TitleOffset - { - get { return _titleOffset; } - } - - /// - /// Gets the urltable offset - /// - internal int UrlTableOffset - { - get { return _urltableOffset; } - } - - /// - /// Gets the title of the topic entry - /// - public string Title - { - get - { - if( _associatedFile == null) - return String.Empty; - - if( _associatedFile.StringsFile == null) - return String.Empty; - - string sTemp = (string)_associatedFile.StringsFile[ _titleOffset ]; - - if(sTemp == null) - return String.Empty; - - return sTemp; - } - } - - /// - /// Gets the url of the topic - /// - public string Locale - { - get - { - if( _associatedFile == null) - return String.Empty; - - if( _associatedFile.UrltblFile == null) - return String.Empty; - - UrlTableEntry utEntry = (UrlTableEntry)_associatedFile.UrltblFile[ _urltableOffset ]; - - if(utEntry == null) - return String.Empty; - - if(utEntry.URL == "") - return String.Empty; - - return utEntry.URL; - } - } - - /// - /// Gets the URL of this topic - /// - public string URL - { - get - { - if(Locale.Length <= 0) - return "about:blank"; - - if( (Locale.ToLower().IndexOf("http://") >= 0) || - (Locale.ToLower().IndexOf("https://") >= 0) || - (Locale.ToLower().IndexOf("mailto:") >= 0) || - (Locale.ToLower().IndexOf("ftp://") >= 0) || - (Locale.ToLower().IndexOf("ms-its:") >= 0)) - return Locale; - - return HtmlHelpSystem.UrlPrefix + _associatedFile.ChmFilePath + "::/" + Locale; - } - } - - /// - /// Gets the visibility mode - /// - public int VisibilityMode - { - get { return _visibilityMode; } - } - - /// - /// Gets the unknown mode - /// - public int UknownMode - { - get { return _unknownMode; } - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/UrlTableEntry.cs b/irc/TechBot/CHMLibrary/CHMDecoding/UrlTableEntry.cs deleted file mode 100644 index 53391ce2f05..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/UrlTableEntry.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System; -using System.IO; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// The class UrlTableEntry stores data for an URL-Table entry - /// - internal sealed class UrlTableEntry - { - /// - /// Internal member storing the offset of this entry - /// - private int _entryOffset = 0; - /// - /// Internal member storing a unique id - /// - private uint _uniqueID = 0; - /// - /// Internal member storing the topics index - /// - private int _topicsIndex = 0; - /// - /// Internal member storing the offset in the urlstr table - /// - private int _urlStrOffset = 0; - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor of the class - /// - /// unique id - /// offset of the entry - /// topic index - /// urlstr offset for filename - public UrlTableEntry(uint uniqueID, int entryOffset, int topicIndex, int urlstrOffset) : this(uniqueID, entryOffset, topicIndex, urlstrOffset, null) - { - } - - /// - /// Constructor of the class - /// - /// unique id - /// offset of the entry - /// topic index - /// urlstr offset for filename - /// associated chm file - internal UrlTableEntry(uint uniqueID, int entryOffset, int topicIndex, int urlstrOffset, CHMFile associatedFile) - { - _uniqueID = uniqueID; - _entryOffset = entryOffset; - _topicsIndex = topicIndex; - _urlStrOffset = urlstrOffset; - _associatedFile = associatedFile; - } - - /// - /// Standard constructor - /// - internal UrlTableEntry() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( _urlStrOffset ); - writer.Write( _entryOffset ); - writer.Write( _topicsIndex ); - writer.Write( _urlStrOffset ); - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - _urlStrOffset = reader.ReadInt32(); - _entryOffset = reader.ReadInt32(); - _topicsIndex = reader.ReadInt32(); - _urlStrOffset = reader.ReadInt32(); - } - - /// - /// Sets the associated CHMFile instance - /// - /// instance to set - internal void SetCHMFile(CHMFile associatedFile) - { - _associatedFile = associatedFile; - } - #endregion - - /// - /// Gets the unique id of the entry - /// - internal uint UniqueID - { - get {return _uniqueID; } - } - - /// - /// Gets the offset of the entry - /// - internal int EntryOffset - { - get {return _entryOffset; } - } - - /// - /// Gets the topics index - /// - internal int TopicIndex - { - get {return _topicsIndex; } - } - - /// - /// Gets the urlstr offset - /// - internal int UrlstrOffset - { - get { return _urlStrOffset; } - } - - /// - /// Gets the url of the entry - /// - public string URL - { - get - { - if(_associatedFile == null) - return String.Empty; - - if(_associatedFile.UrlstrFile == null) - return String.Empty; - - string sTemp = (string)_associatedFile.UrlstrFile.GetURLatOffset( _urlStrOffset ); - - if( sTemp == null) - return String.Empty; - - return sTemp; - } - } - - /// - /// Gets the associated topic for this url entry - /// - internal TopicEntry Topic - { - get - { - if(_associatedFile == null) - return null; - - if(_associatedFile.TopicsFile == null) - return null; - - TopicEntry tentry = _associatedFile.TopicsFile[ _topicsIndex*16 ]; - - return tentry; - } - } - } -} diff --git a/irc/TechBot/CHMLibrary/CHMDecoding/enumerations.cs b/irc/TechBot/CHMLibrary/CHMDecoding/enumerations.cs deleted file mode 100644 index 0e2d314ecd6..00000000000 --- a/irc/TechBot/CHMLibrary/CHMDecoding/enumerations.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; - -namespace HtmlHelp.ChmDecoding -{ - /// - /// Enumeration for specifying the extraction mode of an toc or index item. - /// - public enum DataMode - { - /// - /// TextBased - this item comes from a text-based sitemap file - /// - TextBased = 0, - /// - /// Binary - this item was extracted out of a binary stream - /// - Binary = 1 - } -} diff --git a/irc/TechBot/CHMLibrary/CHMLibrary.cmbx b/irc/TechBot/CHMLibrary/CHMLibrary.cmbx deleted file mode 100644 index 7209cbb462c..00000000000 --- a/irc/TechBot/CHMLibrary/CHMLibrary.cmbx +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/CHMLibrary/CHMLibrary.csproj b/irc/TechBot/CHMLibrary/CHMLibrary.csproj deleted file mode 100644 index 3ab019a4eca..00000000000 --- a/irc/TechBot/CHMLibrary/CHMLibrary.csproj +++ /dev/null @@ -1,85 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {72E5CCA1-6318-4D62-964D-CB23A5C743B5} - Library - Properties - CHMLibrary - CHMLibrary - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {E32307F1-623A-4E62-826F-56CDD4B23A54} - Compression - - - \ No newline at end of file diff --git a/irc/TechBot/CHMLibrary/CHMLibrary.prjx b/irc/TechBot/CHMLibrary/CHMLibrary.prjx deleted file mode 100644 index 3a888b43106..00000000000 --- a/irc/TechBot/CHMLibrary/CHMLibrary.prjx +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/CHMLibrary/Category.cs b/irc/TechBot/CHMLibrary/Category.cs deleted file mode 100644 index d1ae4e74d44..00000000000 --- a/irc/TechBot/CHMLibrary/Category.cs +++ /dev/null @@ -1,201 +0,0 @@ -using System; -using System.Collections; -using System.IO; - -using HtmlHelp.ChmDecoding; - -namespace HtmlHelp -{ - /// - /// The class Category implements methods/properties for handling an information category - /// - /// Note: Information types and categories allow users to filter help contents. - /// They are only supported if using sitemap TOC and/or sitemap Index. - public class Category - { - private string _name = ""; - private string _description = ""; - private ArrayList _infoTypes = null; - private int _referenceCount = 1; - - /// - /// Standard constructor - /// - public Category() : this("","") - { - } - - /// - /// Standard constructor - /// - /// name of the category - /// description - public Category(string name, string description) : this(name, description, new ArrayList()) - { - } - /// - /// Standard constructor - /// - /// name of the category - /// description - /// Arraylist of InformationType instances which applies to this category - public Category(string name, string description, ArrayList linkedInformationTypes) - { - _name = name; - _description = description; - _infoTypes = linkedInformationTypes; - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( _name ); - writer.Write( _description ); - - writer.Write( _infoTypes.Count ); - - for(int i=0; i<_infoTypes.Count;i++) - { - InformationType curType = _infoTypes[i] as InformationType; - writer.Write( curType.Name ); - } - - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - /// current CHMFile instance which reads from dump - internal void ReadDump(ref BinaryReader reader, CHMFile chmFile) - { - _name = reader.ReadString(); - _description = reader.ReadString(); - - int nCnt = reader.ReadInt32(); - - for(int i=0; i - /// Merges the lineked information types from cat into this instance - /// - /// category instance - internal void MergeInfoTypes(Category cat) - { - if(cat!=null) - { - if(cat.InformationTypes.Count > 0) - { - for(int i=0;i - /// Gets/Sets the reference count of this information type instance - /// - internal int ReferenceCount - { - get { return _referenceCount; } - set { _referenceCount = value; } - } - - /// - /// Gets/Sets the name of the information type - /// - public string Name - { - get { return _name; } - set { _name = value; } - } - - /// - /// Gets/Sets the description of the information type - /// - public string Description - { - get { return _description; } - set { _name = value; } - } - - /// - /// Gets an ArrayList with the linked Information types - /// - public ArrayList InformationTypes - { - get { return _infoTypes; } - } - - /// - /// Adds a new information type to the category - /// - /// - public void AddInformationType(InformationType type) - { - _infoTypes.Add(type); - } - - /// - /// Removes an information type from the category - /// - /// - public void RemoveInformationType(InformationType type) - { - _infoTypes.Remove(type); - } - - /// - /// Checks if the category contains an information type - /// - /// information type instance to check - /// Return true if the information type is part of this category - public bool ContainsInformationType(InformationType type) - { - return _infoTypes.Contains(type); - } - - /// - /// Checks if the category contains an information type - /// - /// name of the information type - /// Return true if the information type is part of this category - public bool ContainsInformationType(string name) - { - for(int i=0;i<_infoTypes.Count;i++) - { - InformationType curType = _infoTypes[i] as InformationType; - - if(curType.Name == name) - return true; - } - - return false; - } - } -} diff --git a/irc/TechBot/CHMLibrary/ChmFileInfo.cs b/irc/TechBot/CHMLibrary/ChmFileInfo.cs deleted file mode 100644 index 15f6a1e266f..00000000000 --- a/irc/TechBot/CHMLibrary/ChmFileInfo.cs +++ /dev/null @@ -1,478 +0,0 @@ -using System; -using System.Collections; -using System.Text; -using System.IO; -using System.Globalization; -using System.Diagnostics; -using System.ComponentModel; - -using HtmlHelp.ChmDecoding; -// using HtmlHelp.Storage; - -namespace HtmlHelp -{ - /// - /// The class ChmFileInfo only extracts system information from a CHM file. - /// It doesn't build the index and table of contents. - /// - public class ChmFileInfo - { - /// - /// Internal member storing the full filename - /// - private string _chmFileName = ""; - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - - /// - /// Constructor for extrating the file information of the provided file. - /// The constructor opens the chm-file and reads its system data. - /// - /// full file name which information should be extracted - public ChmFileInfo(string chmFile) - { - if(!File.Exists(chmFile)) - throw new ArgumentException("Chm file must exist on disk !", "chmFileName"); - - if( ! chmFile.ToLower().EndsWith(".chm") ) - throw new ArgumentException("HtmlHelp file must have the extension .chm !", "chmFile"); - - _chmFileName = chmFile; - _associatedFile = new CHMFile(null, chmFile, true); // only load system data of chm - } - - /// - /// Internal constructor used in the class CHMFile. - /// - /// associated chm file - internal ChmFileInfo(CHMFile associatedFile) - { - _associatedFile = associatedFile; - - if( _associatedFile == null) - throw new ArgumentException("Associated CHMFile instance must not be null !", "associatedFile"); - } - - #region default info properties - /// - /// Gets the full filename of the chm file - /// - public string ChmFileName - { - get - { - return _associatedFile.ChmFilePath; - } - } - - /// - /// Gets a FileInfo instance for the chm file. - /// - public FileInfo FileInfo - { - get { return new FileInfo(_associatedFile.ChmFilePath); } - } - #endregion - - #region #SYSTEM properties - /// - /// Gets the file version of the chm file. - /// 2 for Compatibility=1.0, 3 for Compatibility=1.1 - /// - public int FileVersion - { - get - { - if(_associatedFile != null) - return _associatedFile.FileVersion; - - return 0; - } - } - - /// - /// Gets the contents file name - /// - - public string ContentsFile - { - get - { - if(_associatedFile != null) - return _associatedFile.ContentsFile; - - return ""; - } - } - - /// - /// Gets the index file name - /// - - public string IndexFile - { - get - { - if(_associatedFile != null) - return _associatedFile.IndexFile; - - return ""; - } - } - - /// - /// Gets the default help topic - /// - - public string DefaultTopic - { - get - { - if(_associatedFile != null) - return _associatedFile.DefaultTopic; - - return ""; - } - } - - /// - /// Gets the title of the help window - /// - - public string HelpWindowTitle - { - get - { - if(_associatedFile != null) - return _associatedFile.HelpWindowTitle; - - return ""; - } - } - - /// - /// Gets the flag if DBCS is in use - /// - - public bool DBCS - { - get - { - if(_associatedFile != null) - return _associatedFile.DBCS; - - return false; - } - } - - /// - /// Gets the flag if full-text-search is available - /// - - public bool FullTextSearch - { - get - { - if(_associatedFile != null) - return _associatedFile.FullTextSearch; - - return false; - } - } - - /// - /// Gets the flag if the file has ALinks - /// - - public bool HasALinks - { - get - { - if(_associatedFile != null) - return _associatedFile.HasALinks; - - return false; - } - } - - /// - /// Gets the flag if the file has KLinks - /// - - public bool HasKLinks - { - get - { - if(_associatedFile != null) - return _associatedFile.HasKLinks; - - return false; - } - } - - /// - /// Gets the default window name - /// - - public string DefaultWindow - { - get - { - if(_associatedFile != null) - return _associatedFile.DefaultWindow; - - return ""; - } - } - - /// - /// Gets the file name of the compile file - /// - - public string CompileFile - { - get - { - if(_associatedFile != null) - return _associatedFile.CompileFile; - - return ""; - } - } - - /// - /// Gets the flag if the chm has a binary index file - /// - - public bool BinaryIndex - { - get - { - if(_associatedFile != null) - return _associatedFile.BinaryIndex; - - return false; - } - } - - /// - /// Gets the flag if the chm has a binary index file - /// - - public string CompilerVersion - { - get - { - if(_associatedFile != null) - return _associatedFile.CompilerVersion; - - return ""; - } - } - - /// - /// Gets the flag if the chm has a binary toc file - /// - - public bool BinaryTOC - { - get - { - if(_associatedFile != null) - return _associatedFile.BinaryTOC; - - return false; - } - } - - /// - /// Gets the font face of the read font property. - /// Empty string for default font. - /// - - public string FontFace - { - get - { - if(_associatedFile != null) - return _associatedFile.FontFace; - - return ""; - } - } - - /// - /// Gets the font size of the read font property. - /// 0 for default font size - /// - - public double FontSize - { - get - { - if(_associatedFile != null) - return _associatedFile.FontSize; - - return 0.0; - } - } - - /// - /// Gets the character set of the read font property - /// 1 for default - /// - - public int CharacterSet - { - get - { - if(_associatedFile != null) - return _associatedFile.CharacterSet; - - return 1; - } - } - - /// - /// Gets the codepage depending on the read font property - /// - - public int CodePage - { - get - { - if(_associatedFile != null) - return _associatedFile.CodePage; - - return 0; - } - } - - /// - /// Gets the assiciated culture info - /// - public CultureInfo Culture - { - get - { - if(_associatedFile != null) - return _associatedFile.Culture; - - return CultureInfo.CurrentCulture; - } - } - #endregion - - #region #IDXHDR properties - /// - /// Gets the number of topic nodes including the contents and index files - /// - - public int NumberOfTopicNodes - { - get - { - if(_associatedFile != null) - return _associatedFile.NumberOfTopicNodes; - - return 0; - } - } - - /// - /// Gets the ImageList string specyfied in the #IDXHDR file. - /// - /// This property uses the #STRINGS file to extract the string at a given offset. - - public string ImageList - { - get - { - if(_associatedFile != null) - return _associatedFile.ImageList; - - return ""; - } - } - - /// - /// Gets the background setting - /// - - public int Background - { - get - { - if(_associatedFile != null) - return _associatedFile.Background; - - return 0; - } - } - - /// - /// Gets the foreground setting - /// - - public int Foreground - { - get - { - if(_associatedFile != null) - return _associatedFile.Foreground; - - return 0; - } - } - - /// - /// Gets the FrameName string specyfied in the #IDXHDR file. - /// - /// This property uses the #STRINGS file to extract the string at a given offset. - - public string FrameName - { - get - { - if(_associatedFile != null) - return _associatedFile.FrameName; - - return ""; - } - } - - /// - /// Gets the WindowName string specyfied in the #IDXHDR file. - /// - /// This property uses the #STRINGS file to extract the string at a given offset. - - public string WindowName - { - get - { - if(_associatedFile != null) - return _associatedFile.WindowName; - - return ""; - } - } - - /// - /// Gets a string array containing the merged file names - /// - public string[] MergedFiles - { - get - { - if(_associatedFile != null) - return _associatedFile.MergedFiles; - - return new string[0]; - } - } - - #endregion - } -} diff --git a/irc/TechBot/CHMLibrary/Default.build b/irc/TechBot/CHMLibrary/Default.build deleted file mode 100644 index 6363074a8db..00000000000 --- a/irc/TechBot/CHMLibrary/Default.build +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/irc/TechBot/CHMLibrary/HtmlHelpSystem.cs b/irc/TechBot/CHMLibrary/HtmlHelpSystem.cs deleted file mode 100644 index 966cd3d7205..00000000000 --- a/irc/TechBot/CHMLibrary/HtmlHelpSystem.cs +++ /dev/null @@ -1,894 +0,0 @@ -using System; -using System.IO; -using System.Collections; -using System.Data; - -using HtmlHelp.ChmDecoding; - -namespace HtmlHelp -{ - /// - /// The class HtmlHelpSystem implements the main object for reading chm files - /// - public sealed class HtmlHelpSystem - { - /// - /// Private shared instance of current HtmlHelpSystem class - /// - private static HtmlHelpSystem _current=null; - /// - /// Internal member storing the attached files - /// - private ArrayList _chmFiles = new ArrayList(); - /// - /// Internal member storing a merged table of contents - /// - private TableOfContents _toc = new TableOfContents(); - /// - /// Internal member storing a merged index - /// - private Index _index = new Index(); - /// - /// URL prefix for specifying a chm destination - /// - private static string _urlPrefix = "ms-its:"; - /// - /// Internal flag specifying if the system should use the tree-images list - /// from HtmlHelp2. If false the standard CHM-Viewer pics will be used. - /// - private static bool _useHH2TreePics = false; - /// - /// Internal member storing the read information types - /// - private ArrayList _informationTypes = new ArrayList(); - /// - /// Internal member storing the read categories - /// - private ArrayList _categories = new ArrayList(); - - /// - /// Gets/Sets the url prefix for specifying a chm destination - /// - public static string UrlPrefix - { - get { return _urlPrefix; } - set { _urlPrefix = value; } - } - - public CHMStream.CHMStream BaseStream - { - get - { - CHMFile chm=(CHMFile)_chmFiles[0]; - return chm.BaseStream; - } - } - - /// - /// Gets/Sets the flag specifying if the system should use the tree-images list - /// from HtmlHelp2. If false the standard CHM-Viewer pics will be used. - /// - public static bool UseHH2TreePics - { - get { return _useHH2TreePics; } - set { _useHH2TreePics = value; } - } - - /// - /// Gets the current HtmlHelpSystem instance - /// - public static HtmlHelpSystem Current - { - get - { - return _current; - } - } - - /// - /// Standard constructor - /// - public HtmlHelpSystem() : this("") - { - } - - /// - /// Constructor of the reader class - /// - /// chm file to attach with the reader - public HtmlHelpSystem(string chmFile) - { - _current = this; - OpenFile(chmFile); - } - - - /// - /// Opens a chm file and creates - /// - /// full file path of the chm file to open - /// If you call this method, all existing merged files will be cleared. - public void OpenFile(string chmFile) - { - OpenFile(chmFile, null); - } - - /// - /// Opens a chm file and creates - /// - /// full file path of the chm file to open - /// dumping info - /// If you call this method, all existing merged files will be cleared. - public void OpenFile(string chmFile, DumpingInfo dmpInfo) - { - if( File.Exists(chmFile ) ) - { - _chmFiles.Clear(); - _toc.Clear(); - _index.Clear(); - _informationTypes.Clear(); - _categories.Clear(); - - CHMFile newFile = new CHMFile(this, chmFile, dmpInfo); - - _toc = new TableOfContents( newFile.TOC ); - _index = new Index( newFile.IndexKLinks, newFile.IndexALinks ); - - _chmFiles.Add(newFile); - // add all infotypes and categories of the read file to this system instance - MergeFileInfoTypesCategories(newFile); - - // check if the file has a merged files list - if( newFile.MergedFiles.Length > 0 ) - { - // extract the path of the chm file (usually merged files are in the same path) - FileInfo fi = new FileInfo(chmFile); - string sPath = fi.DirectoryName; - - for(int i=0; i 0) - { - if(sFile[1] != ':') // no full path setting - { - sFile = Path.Combine(sPath, sFile); - } - - MergeFile(sFile, dmpInfo, true); - } - } - - // if (newFile.MergLinks.Count>0) - // RecalculateMergeLinks(newFile); - - RemoveMergeLinks(); // clear all merge-links which have no target ! - } - } - } - - /// - /// Merges a chm file to the current help contents - /// - /// full file path of the chm file to merge - public void MergeFile(string chmFile) - { - MergeFile(chmFile, null); - } - - /// - /// Merges a chm file to the current help contents - /// - /// full file path of the chm file to merge - /// dumping info - public void MergeFile(string chmFile, DumpingInfo dmpInfo) - { - MergeFile(chmFile, dmpInfo, false); - } - - /// - /// Merges a chm file to the current help contents - /// - /// full file path of the chm file to merge - /// dumping info - /// true if the merge is done because a merged file list - /// was found in the previously loaded CHM. - internal void MergeFile(string chmFile, DumpingInfo dmpInfo, bool mergedFileList) - { - if( File.Exists(chmFile ) ) - { - if( _chmFiles.Count == 1) - { - // if we open the first file, we directly point into the toc and index of this file. - // So that we don't merge the new toc's indexe's into the first file, we have to - // clone the internal arraylists first to a new instance of the toc/index holder classes. - ArrayList atoc = _toc.TOC; - ArrayList alinks = _index.ALinks; - ArrayList klinks = _index.KLinks; - - _toc = new TableOfContents(); - _index = new Index(); - - _toc.MergeToC( atoc ); - _index.MergeIndex( alinks, IndexType.AssiciativeLinks ); - _index.MergeIndex( klinks, IndexType.KeywordLinks ); - } - - CHMFile newFile = new CHMFile(this, chmFile, dmpInfo); - - if(mergedFileList) // if we've called this method due to a merged file list merge - { - RecalculateMergeLinks(newFile); - - _toc.MergeToC( newFile.TOC, _chmFiles ); - _index.MergeIndex( newFile.IndexALinks, IndexType.AssiciativeLinks ); - _index.MergeIndex( newFile.IndexKLinks, IndexType.KeywordLinks ); - - _chmFiles.Add(newFile); - - // add all infotypes and categories of the read file to this system instance - MergeFileInfoTypesCategories(newFile); - } - else - { - _toc.MergeToC( newFile.TOC, _chmFiles ); - _index.MergeIndex( newFile.IndexALinks, IndexType.AssiciativeLinks ); - _index.MergeIndex( newFile.IndexKLinks, IndexType.KeywordLinks ); - - _chmFiles.Add(newFile); - - // add all infotypes and categories of the read file to this system instance - MergeFileInfoTypesCategories(newFile); - - // check if the file has a merged files list - if( newFile.MergedFiles.Length > 0 ) - { - // extract the path of the chm file (usually merged files are in the same path) - FileInfo fi = new FileInfo(chmFile); - string sPath = fi.DirectoryName; - - for(int i=0; i 0) - { - if(sFile[1] != ':') // no full path setting - { - sFile = Path.Combine(sPath, sFile); - } - - MergeFile(sFile, dmpInfo, true); - } - } - - RemoveMergeLinks(); // clear all merge-links which have no target ! - } - } - } - } - - /// - /// Checks all Merg-links read till now. Checks if the merg-link points to the - /// file currentFile. If yes the link will be replaced by the contents of the - /// merged file. - /// - /// Current CHMFile instance - internal void RecalculateMergeLinks(CHMFile currentFile) - { - foreach(CHMFile curFile in _chmFiles) - { - if( curFile.MergLinks.Count > 0) - { - for(int i=0; i 3) // merge info contains path name - { - sFName = sSplit[0] + ":" + sSplit[1]; - sTarget = sSplit[3]; - } - else if( sSplit.Length == 3)// merge info contains only file name - { - FileInfo fi = new FileInfo(currentFile.ChmFilePath); - string sPath = fi.DirectoryName; - - string sFile = sSplit[0]; - - if(sFile.Length > 0) - { - if(sFile[1] != ':') // no full path setting - { - sFile = Path.Combine(sPath, sFile); - } - } - - sFName = sFile; - sTarget = sSplit[2]; - } - - ArrayList arrToc = null; - if( (sFName.Length>0) && (sTarget.Length>0) ) - { - // if this link points into the current file - if( sFName.ToLower() == currentFile.ChmFilePath.ToLower() ) - { - if(sTarget.ToLower().IndexOf(".hhc") >= 0) - { - string sfCheck = sTarget; - - // remove prefixing ./ - while( (sfCheck[0]=='.') || (sfCheck[0]=='/') ) - { - sfCheck = sfCheck.Substring(1); - } - - if( currentFile.ContentsFile.ToLower() != sfCheck ) - { - arrToc = currentFile.ParseHHC( sTarget ); - - if( arrToc.Count > 0) - { - } - } - else - { - arrToc = currentFile.TOC; - } - - // target points to a complete TOC - int nCnt = 0; - - foreach(TOCItem chkItem in arrToc) - { - if(nCnt == 0) - { - curItem.AssociatedFile = currentFile; - curItem.Children = chkItem.Children; - curItem.ChmFile = currentFile.ChmFilePath; - curItem.ImageIndex = chkItem.ImageIndex; - curItem.Local = chkItem.Local; - curItem.MergeLink = chkItem.MergeLink; - curItem.Name = chkItem.Name; - curItem.TocMode = chkItem.TocMode; - curItem.TopicOffset = chkItem.TopicOffset; - - MarkChildrenAdded(chkItem.Children, curFile.MergLinks); - } - else - { - ArrayList checkList = null; - - if(curItem.Parent != null) - checkList = curItem.Parent.Children; - else - checkList = curFile.TOC; - - int nIdx = checkList.IndexOf(curItem); - if((nIdx+nCnt)>checkList.Count) - checkList.Add(chkItem); - else - checkList.Insert(nIdx+nCnt, chkItem); - - curFile.MergLinks.Add(chkItem); - MarkChildrenAdded(chkItem.Children, curFile.MergLinks); - } - - nCnt++; - } - } - else - { - - // target points to a single topic - TOCItem chkItem = currentFile.GetTOCItemByLocal(sTarget); - if(chkItem != null) - { - curItem.AssociatedFile = currentFile; - curItem.Children = chkItem.Children; - curItem.ChmFile = currentFile.ChmFilePath; - curItem.ImageIndex = chkItem.ImageIndex; - curItem.Local = chkItem.Local; - curItem.MergeLink = chkItem.MergeLink; - curItem.Name = chkItem.Name; - curItem.TocMode = chkItem.TocMode; - curItem.TopicOffset = chkItem.TopicOffset; - - curFile.MergLinks.Add(chkItem); - MarkChildrenAdded(chkItem.Children, curFile.MergLinks); - } - } - } - } - } - } - } - } - - /// - /// Adds sub-items of an TOC-entry to the merg-linked list. - /// This will mark this item as "added" during the extra merge run - /// of the HtmlHelpSystem class. - /// - /// TOCItem list - /// Arraylist which holds the merged-items - internal void MarkChildrenAdded(ArrayList tocs, ArrayList merged) - { - foreach(TOCItem curItem in tocs) - { - if(!merged.Contains(curItem)) - { - merged.Add(curItem); - - MarkChildrenAdded(curItem.Children, merged); - } - } - } - - /// - /// Removes merge-links from the toc of files which were not loaded - /// - internal void RemoveMergeLinks() - { - foreach(CHMFile curFile in _chmFiles) - { - if( curFile.MergLinks.Count > 0) - { - while(curFile.MergLinks.Count > 0) - { - TOCItem curItem = curFile.MergLinks[0] as TOCItem; - if(curItem.MergeLink.Length > 0) - curFile.RemoveTOCItem(curItem); - - curFile.MergLinks.RemoveAt(0); - } - } - } - } - - /// - /// Merges the information types and categories read by the CHMFile instance - /// into the system instance - /// - /// file instance - private void MergeFileInfoTypesCategories(CHMFile chmFile) - { - if(chmFile.HasInformationTypes) - { - for(int i=0; i - /// Removes the information types and categories read by the CHMFile instance - /// - /// file instance - private void RemoveFileInfoTypesCategories(CHMFile chmFile) - { - if(chmFile.HasInformationTypes) - { - for(int i=0; i - /// Removes a chm file from the internal file collection - /// - /// full file path of the chm file to remove - public void RemoveFile(string chmFile) - { - int nIdx = -1; - CHMFile removeInstance=null; - - foreach(CHMFile curFile in _chmFiles) - { - nIdx++; - - if( curFile.ChmFilePath.ToLower() == chmFile.ToLower() ) - { - removeInstance = curFile; - break; - } - } - - if(nIdx >= 0) - { - _toc.Clear(); // forces a rebuild of the merged toc - _index.Clear(); // force a rebuild of the merged index - - RemoveFileInfoTypesCategories(removeInstance); - _chmFiles.RemoveAt(nIdx); - } - } - - /// - /// Closes all files and destroys TOC/index - /// - public void CloseAllFiles() - { - for(int i=0; i < _chmFiles.Count; i++) - { - CHMFile curFile = _chmFiles[i] as CHMFile; - - _chmFiles.RemoveAt(i); - curFile.Dispose(); - i--; - } - - _chmFiles.Clear(); - _toc.Clear(); - _index.Clear(); - _informationTypes.Clear(); - _categories.Clear(); - } - - /// - /// Gets an array of loaded chm files. - /// - public CHMFile[] FileList - { - get - { - CHMFile[] ret = new CHMFile[ _chmFiles.Count ]; - for(int i=0;i<_chmFiles.Count;i++) - ret[i] = (CHMFile)_chmFiles[i]; - - return ret; - } - } - - /// - /// Returns true if the HtmlHelpSystem instance contains 1 or more information types - /// - public bool HasInformationTypes - { - get { return (_informationTypes.Count>0); } - } - - /// - /// Returns true if the HtmlHelpSystem instance contains 1 or more categories - /// - public bool HasCategories - { - get { return (_categories.Count>0); } - } - - /// - /// Gets an ArrayList of InformationType items - /// - public ArrayList InformationTypes - { - get { return _informationTypes; } - } - - /// - /// Gets an ArrayList of Category items - /// - public ArrayList Categories - { - get { return _categories; } - } - - /// - /// Gets the information type specified by its name - /// - /// name of the information type to receive - /// Returns the Instance for the name or null if not found - public InformationType GetInformationType(string name) - { - if(HasInformationTypes) - { - for(int i=0; i<_informationTypes.Count;i++) - { - InformationType iT = _informationTypes[i] as InformationType; - - if(iT.Name == name) - return iT; - } - } - - return null; - } - - /// - /// Gets the category specifiyd by its name - /// - /// name of the category - /// Returns the Instance for the name or null if not found - public Category GetCategory(string name) - { - if(HasCategories) - { - for(int i=0; i<_categories.Count;i++) - { - Category cat = _categories[i] as Category; - - if(cat.Name == name) - return cat; - } - } - - return null; - } - - /// - /// Gets the default topic - /// - public string DefaultTopic - { - get - { - if( _chmFiles.Count > 0 ) - { - foreach(CHMFile curFile in _chmFiles) - { - if( curFile.DefaultTopic.Length > 0) - { - return curFile.FormURL( curFile.DefaultTopic ); - } - } - } - - return "about:blank"; - } - } - - /// - /// Gets a merged table of contents of all opened chm files - /// - public TableOfContents TableOfContents - { - get - { - if( _chmFiles.Count > 0 ) - { - if( _toc.Count() <= 0) - { - // merge toc of files - foreach(CHMFile curFile in _chmFiles) - { - _toc.MergeToC( curFile.TOC ); - } - } - } - - return _toc; - } - } - - /// - /// Gets a merged index of all opened chm files - /// - public Index Index - { - get - { - if( _chmFiles.Count > 0 ) - { - if( (_index.Count(IndexType.KeywordLinks)+_index.Count(IndexType.AssiciativeLinks)) <= 0) - { - // merge index files - foreach(CHMFile curFile in _chmFiles) - { - _index.MergeIndex( curFile.IndexKLinks, IndexType.KeywordLinks); - _index.MergeIndex( curFile.IndexALinks, IndexType.AssiciativeLinks); - } - } - } - - return _index; - } - } - - /// - /// Gets a flag if the current instance offers a table of contents - /// - public bool HasTableOfContents - { - get - { - return (TableOfContents.Count() > 0); - } - } - - /// - /// Gets a flag if the current instance offers an index - /// - public bool HasIndex - { - get - { - return (HasALinks || HasKLinks); - } - } - - /// - /// Gets a flag if the index holds klinks - /// - public bool HasKLinks - { - get - { - return (_index.Count(IndexType.KeywordLinks) > 0); - } - } - - /// - /// Gets a flag if the index holds alinks - /// - public bool HasALinks - { - get - { - return (_index.Count(IndexType.AssiciativeLinks) > 0); - } - } - - /// - /// Gets a flag if the current instance supports fulltext searching - /// - public bool FullTextSearch - { - get - { - bool bRet = false; - - foreach(CHMFile curFile in _chmFiles) - { - bRet |= curFile.FullTextSearch; - } - - return bRet; - } - } - - /// - /// Performs a full-text search over the chm files - /// - /// words to search - /// true if partial word should be matched also - /// ( if this is true a search of 'support' will match 'supports', otherwise not ) - /// true if titles only - /// A DataTable containing the search hits - public DataTable PerformSearch(string words, bool partialMatches, bool titleOnly) - { - return PerformSearch(words, -1, partialMatches, titleOnly); - } - - /// - /// Performs a full-text search over the chm files - /// - /// words to search - /// maximal number of hits to return - /// true if partial word should be matched also - /// ( if this is true a search of 'support' will match 'supports', otherwise not ) - /// true if titles only - /// A DataTable containing the search hits - public DataTable PerformSearch(string words, int MaxResults, bool partialMatches, bool titleOnly) - { - if( ! FullTextSearch ) - return null; - - DataTable dtResult = null; - - int nCnt = 0; - - foreach(CHMFile curFile in _chmFiles) - { - if(nCnt == 0) - { - if(curFile.FullTextSearchEngine.CanSearch) - { - if(curFile.FullTextSearchEngine.Search(words, MaxResults, partialMatches, titleOnly)) - { - dtResult = curFile.FullTextSearchEngine.Hits; - dtResult.DefaultView.Sort = "Rating DESC"; - } - } - } - else - { - if(curFile.FullTextSearchEngine.CanSearch) - { - if(curFile.FullTextSearchEngine.Search(words, MaxResults, partialMatches, titleOnly)) - { - DataTable table = curFile.FullTextSearchEngine.Hits; - - // append rows from 2nd file - foreach(DataRow curRow in table.Rows) - { - dtResult.ImportRow( curRow ); - } - - dtResult.DefaultView.Sort = "Rating DESC"; - - // adjust max hits - if(MaxResults >= 0) - { - if(dtResult.DefaultView.Count > MaxResults) - { - for(int i=MaxResults-1; i 0) { - output.Append (GetChars (bytes, e)); - bytes.SetLength (0); - } - output.Append ((char) Int32.Parse (s.Substring (i + 2, 4), hexa)); - i += 5; - } else { - bytes.WriteByte ((byte) Int32.Parse (s.Substring (i + 1, 2), hexa)); - i += 2; - } - continue; - } - - if (bytes.Length > 0) { - output.Append (GetChars (bytes, e)); - bytes.SetLength (0); - } - - if (s [i] == '+') { - output.Append (' '); - } else { - output.Append (s [i]); - } - } - - if (bytes.Length > 0) { - output.Append (GetChars (bytes, e)); - } - - bytes = null; - return output.ToString (); - } - - public static string UrlDecode (byte [] bytes, Encoding e) - { - if (bytes == null) - return null; - - return UrlDecode (bytes, 0, bytes.Length, e); - } - - private static int GetInt (byte b) - { - char c = Char.ToUpper ((char) b); - if (c >= '0' && c <= '9') - return c - '0'; - - if (c < 'A' || c > 'F') - return 0; - - return (c - 'A' + 10); - } - - private static char GetChar (byte [] bytes, int offset, int length) - { - int value = 0; - int end = length + offset; - for (int i = offset; i < end; i++) - value = (value << 4) + GetInt (bytes [offset]); - - return (char) value; - } - - public static string UrlDecode (byte [] bytes, int offset, int count, Encoding e) - { - if (bytes == null || count == 0) - return null; - - if (bytes == null) - throw new ArgumentNullException ("bytes"); - - if (offset < 0 || offset > bytes.Length) - throw new ArgumentOutOfRangeException ("offset"); - - if (count < 0 || offset + count > bytes.Length) - throw new ArgumentOutOfRangeException ("count"); - - StringBuilder output = new StringBuilder (); - MemoryStream acc = new MemoryStream (); - - int end = count + offset; - for (int i = offset; i < end; i++) { - if (bytes [i] == '%' && i + 2 < count) { - if (bytes [i + 1] == (byte) 'u' && i + 5 < end) { - if (acc.Length > 0) { - output.Append (GetChars (acc, e)); - acc.SetLength (0); - } - output.Append (GetChar (bytes, offset + 2, 4)); - i += 5; - } else { - acc.WriteByte ((byte) GetChar (bytes, offset + 1, 2)); - i += 2; - } - continue; - } - - if (acc.Length > 0) { - output.Append (GetChars (acc, e)); - acc.SetLength (0); - } - - if (bytes [i] == '+') { - output.Append (' '); - } else { - output.Append ((char) bytes [i]); - } - } - - if (acc.Length > 0) { - output.Append (GetChars (acc, e)); - } - - acc = null; - return output.ToString (); - } - - public static byte [] UrlDecodeToBytes (byte [] bytes) - { - if (bytes == null) - return null; - - return UrlDecodeToBytes (bytes, 0, bytes.Length); - } - - public static byte [] UrlDecodeToBytes (string str) - { - return UrlDecodeToBytes (str, Encoding.UTF8); - } - - public static byte [] UrlDecodeToBytes (string str, Encoding e) - { - if (str == null) - return null; - - if (e == null) - throw new ArgumentNullException ("e"); - - return UrlDecodeToBytes (e.GetBytes (str)); - } - - public static byte [] UrlDecodeToBytes (byte [] bytes, int offset, int count) - { - if (bytes == null) - return null; - - int len = bytes.Length; - if (offset < 0 || offset >= len) - throw new ArgumentOutOfRangeException("offset"); - - if (count < 0 || offset > len - count) - throw new ArgumentOutOfRangeException("count"); - - MemoryStream result = new MemoryStream (); - int end = offset + count; - for (int i = offset; i < end; i++){ - char c = (char) bytes [i]; - if (c == '+') - c = ' '; - else if (c == '%' && i < end - 2) { - c = GetChar (bytes, i, 2); - i += 2; - } - result.WriteByte ((byte) c); - } - - return result.ToArray (); - } - - public static string UrlEncode(string str) - { - return UrlEncode(str, Encoding.UTF8); - } - - public static string UrlEncode (string s, Encoding Enc) - { - if (s == null) - return null; - - if (s == "") - return ""; - - byte [] bytes = Enc.GetBytes (s); - byte [] b =UrlEncodeToBytes (bytes, 0, bytes.Length); - return Encoding.ASCII.GetString (b,0,b.Length); - } - - public static string UrlEncode (byte [] bytes) - { - if (bytes == null) - return null; - - if (bytes.Length == 0) - return ""; - - byte []b=UrlEncodeToBytes(bytes, 0, bytes.Length); - return Encoding.ASCII.GetString (b,0,b.Length); - } - - public static string UrlEncode (byte [] bytes, int offset, int count) - { - if (bytes == null) - return null; - - if (bytes.Length == 0) - return ""; - - byte []b=UrlEncodeToBytes(bytes, offset, count); - return Encoding.ASCII.GetString (b,0,b.Length); - } - - public static byte [] UrlEncodeToBytes (string str) - { - return UrlEncodeToBytes (str, Encoding.UTF8); - } - - public static byte [] UrlEncodeToBytes (string str, Encoding e) - { - if (str == null) - return null; - - if (str == "") - return new byte [0]; - - byte [] bytes = e.GetBytes (str); - return UrlEncodeToBytes (bytes, 0, bytes.Length); - } - - public static byte [] UrlEncodeToBytes (byte [] bytes) - { - if (bytes == null) - return null; - - if (bytes.Length == 0) - return new byte [0]; - - return UrlEncodeToBytes (bytes, 0, bytes.Length); - } - - static char [] hexChars = "0123456789abcdef".ToCharArray (); - - public static byte [] UrlEncodeToBytes (byte [] bytes, int offset, int count) - { - if (bytes == null) - return null; - - int len = bytes.Length; - if (len == 0) - return new byte [0]; - - if (offset < 0 || offset >= len) - throw new ArgumentOutOfRangeException("offset"); - - if (count < 0 || count > len - offset) - throw new ArgumentOutOfRangeException("count"); - - MemoryStream result = new MemoryStream (); - int end = offset + count; - for (int i = offset; i < end; i++) { - char c = (char) bytes [i]; - if ((c == ' ') || (c < '0' && c != '-' && c != '.') || - (c < 'A' && c > '9') || - (c > 'Z' && c < 'a' && c != '_') || - (c > 'z')) { - result.WriteByte ((byte) '%'); - int idx = ((int) c) >> 4; - result.WriteByte ((byte) hexChars [idx]); - idx = ((int) c) & 0x0F; - result.WriteByte ((byte) hexChars [idx]); - } else { - result.WriteByte ((byte) c); - } - } - - return result.ToArray (); - } - - public static string UrlEncodeUnicode (string str) - { - if (str == null) - return null; - - StringBuilder result = new StringBuilder (); - int end = str.Length; - for (int i = 0; i < end; i++) { - int idx; - char c = str [i]; - if (c > 255) { - result.Append ("%u"); - idx = ((int) c) >> 24; - result.Append (hexChars [idx]); - idx = (((int) c) >> 16) & 0x0F; - result.Append (hexChars [idx]); - idx = (((int) c) >> 8) & 0x0F; - result.Append (hexChars [idx]); - idx = ((int) c) & 0x0F; - result.Append (hexChars [idx]); - continue; - } - - if ((c == ' ') || (c < '0' && c != '-' && c != '.') || - (c < 'A' && c > '9') || - (c > 'Z' && c < 'a' && c != '_') || - (c > 'z')) { - result.Append ('%'); - idx = ((int) c) >> 4; - result.Append (hexChars [idx]); - idx = ((int) c) & 0x0F; - result.Append (hexChars [idx]); - continue; - } - - result.Append (c); - } - - return result.ToString (); - } - - public static byte [] UrlEncodeUnicodeToBytes (string str) - { - if (str == null) - return null; - - if (str == "") - return new byte [0]; - - return Encoding.ASCII.GetBytes (UrlEncodeUnicode (str)); - } - - /// - /// Decodes an HTML-encoded string and returns the decoded string. - /// - /// The HTML string to decode. - /// The decoded text. - public static string HtmlDecode (string s) - { - if (s == null) - throw new ArgumentNullException ("s"); - - if (s.IndexOf ('&') == -1) - return s; - - bool insideEntity = false; // used to indicate that we are in a potential entity - string entity = String.Empty; - StringBuilder output = new StringBuilder (); - int len = s.Length; - - for (int i = 0; i < len; i++) { - char c = s [i]; - switch (c) { - case '&' : - output.Append (entity); - entity = "&"; - insideEntity = true; - break; - case ';' : - if (!insideEntity) { - output.Append (c); - break; - } - - entity += c; - int length = entity.Length; - if (length >= 2 && entity[1] == '#' && entity[2] != ';') - entity = ((char) Int32.Parse (entity.Substring (2, entity.Length - 3))).ToString(); - else if (length > 1 && Entities.ContainsKey (entity.Substring (1, entity.Length - 2))) - entity = Entities [entity.Substring (1, entity.Length - 2)].ToString (); - - output.Append (entity); - entity = String.Empty; - insideEntity = false; - break; - default : - if (insideEntity) - entity += c; - else - output.Append (c); - break; - } - } - output.Append (entity); - return output.ToString (); - } - - /// - /// Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. - /// - /// The HTML string to decode - /// The TextWriter output stream containing the decoded string. - public static void HtmlDecode(string s, TextWriter output) - { - if (s != null) - output.Write (HtmlDecode (s)); - } - - /// - /// HTML-encodes a string and returns the encoded string. - /// - /// The text string to encode. - /// The HTML-encoded text. - public static string HtmlEncode (string s) - { - if (s == null) - return null; - - StringBuilder output = new StringBuilder (); - - foreach (char c in s) - switch (c) { - case '&' : - output.Append ("&"); - break; - case '>' : - output.Append (">"); - break; - case '<' : - output.Append ("<"); - break; - case '"' : - output.Append ("""); - break; - default: - if ((int) c > 128) { - output.Append ("&#"); - output.Append (((int) c).ToString ()); - output.Append (";"); - } - else - output.Append (c); - break; - } - return output.ToString (); - } - - /// - /// HTML-encodes a string and sends the resulting output to a TextWriter output stream. - /// - /// The string to encode. - /// The TextWriter output stream containing the encoded string. - public static void HtmlEncode(string s, TextWriter output) - { - if (s != null) - output.Write (HtmlEncode (s)); - } - -#if NET_1_1 - public string UrlPathEncode (string s) - { - if (s == null) - return null; - - int idx = s.IndexOf ("?"); - string s2 = null; - if (idx != -1) { - s2 = s.Substring (0, idx-1); - s2 = UrlEncode (s2) + s.Substring (idx); - } else { - s2 = UrlEncode (s); - } - - return s2; - } -#endif - #endregion // Methods - } -} diff --git a/irc/TechBot/CHMLibrary/Index.cs b/irc/TechBot/CHMLibrary/Index.cs deleted file mode 100644 index 76f73013f0d..00000000000 --- a/irc/TechBot/CHMLibrary/Index.cs +++ /dev/null @@ -1,322 +0,0 @@ -using System; -using System.Diagnostics; -using System.Collections; -using HtmlHelp.ChmDecoding; - -namespace HtmlHelp -{ - /// - /// Enumeration for specifying the index type - /// - public enum IndexType - { - /// - /// Keyword links should be used - /// - KeywordLinks = 0, - /// - /// Associative links should be used - /// - AssiciativeLinks = 1 - } - - /// - /// The class Index holds the (keyword links) KLinks and (associative links) ALinks of the htmlhelp - /// system. It implements methods for easy index-based searching. - /// - public class Index - { - private ArrayList _kLinks = new ArrayList(); - private ArrayList _aLinks = new ArrayList(); - - /// - /// Standard constructor - /// - public Index() - { - } - - /// - /// Constructor of the class - /// - /// arraylist with keyword links - /// arraylist with associative links - public Index(ArrayList kLinks, ArrayList aLinks) - { - _kLinks= kLinks; - _aLinks = aLinks; - } - - /// - /// Clears the current toc - /// - public void Clear() - { - if(_aLinks != null) - _aLinks.Clear(); - if(_kLinks != null) - _kLinks.Clear(); - } - - /// - /// Gets the number of index items for a specific type - /// - /// type of index - /// Returns the number of index items for a specific type - public int Count(IndexType typeOfIndex) - { - ArrayList _index = null; - - switch( typeOfIndex ) - { - case IndexType.AssiciativeLinks: _index = _aLinks; break; - case IndexType.KeywordLinks: _index = _kLinks; break; - } - - if(_index != null) - return _index.Count; - - return 0; - } - - /// - /// Gets the internal index list of keyword links - /// - public ArrayList KLinks - { - get - { - if(_kLinks==null) - _kLinks = new ArrayList(); - - return _kLinks; - } - } - - /// - /// Gets the internal index list of associative links - /// - public ArrayList ALinks - { - get - { - if(_aLinks==null) - _aLinks = new ArrayList(); - - return _aLinks; - } - } - - /// - /// Merges the the index list arrIndex into the current one - /// - /// indexlist which should be merged with the current one - /// type of index to merge - public void MergeIndex( ArrayList arrIndex, IndexType typeOfIndex ) - { - ArrayList _index = null; - - switch(typeOfIndex) - { - case IndexType.AssiciativeLinks: _index = _aLinks;break; - case IndexType.KeywordLinks: _index = _kLinks;break; - } - - foreach(IndexItem curItem in arrIndex) - { - //IndexItem searchItem = ContainsIndex(_index, curItem.KeyWordPath); - int insertIndex=0; - IndexItem searchItem = BinSearch(0, _index.Count-1, _index, curItem.KeyWordPath, false, false, ref insertIndex); - - if(searchItem != null) - { - // extend the keywords topics - foreach(IndexTopic curEntry in curItem.Topics) - { - searchItem.Topics.Add( curEntry ); - } - } - else - { - // add the item to the global collection - //_index.Add( curItem ); - - if(insertIndex > _index.Count) - _index.Add(curItem); - else - _index.Insert(insertIndex, curItem); - } - } - } - - /// - /// Searches an index entry using recursive binary search algo (divide and conquer). - /// - /// start index for searching - /// end index for searching - /// arraylist containing sorted IndexItem entries - /// keyword path to search - /// true if the keywordPath will only contain the keyword not the complete path - /// True if case should be ignored - /// out reference. will receive the index where the item with the - /// keywordPath should be inserted if not found (receives -1 if the item was found) - /// Returns an IndexItem instance if found, otherwise null - /// (use insertIndex for inserting the new item in a sorted order) - private IndexItem BinSearch(int nStart, int nEnd, ArrayList arrIndex, string keywordPath, - bool searchKeyword, bool caseInsensitive, ref int insertIndex) - { - if( arrIndex.Count <= 0 ) - { - insertIndex=0; - return null; - } - - if(caseInsensitive) - keywordPath = keywordPath.ToLower(); - - if( (nEnd - nStart) > 1) - { - int nCheck = nStart + (nEnd-nStart)/2; - - IndexItem iC = arrIndex[nCheck] as IndexItem; - - string sCompare = iC.KeyWordPath; - - if(searchKeyword) - sCompare = iC.KeyWord; - - if(caseInsensitive) - sCompare = sCompare.ToLower(); - - if( sCompare == keywordPath ) - { - insertIndex=-1; - return iC; - } - - if( keywordPath.CompareTo(sCompare) < 0 ) - { - return BinSearch(nStart, nCheck-1, arrIndex, keywordPath, searchKeyword, caseInsensitive, ref insertIndex); - } - - if( keywordPath.CompareTo(sCompare) > 0 ) - { - return BinSearch(nCheck+1, nEnd, arrIndex, keywordPath, searchKeyword, caseInsensitive, ref insertIndex); - } - } - else if(nEnd-nStart == 1) - { - IndexItem i1 = arrIndex[nStart] as IndexItem; - IndexItem i2 = arrIndex[nEnd] as IndexItem; - - string sCompare1 = i1.KeyWordPath; - - if(searchKeyword) - sCompare1 = i1.KeyWord; - - if(caseInsensitive) - sCompare1 = sCompare1.ToLower(); - - string sCompare2 = i2.KeyWordPath; - - if(searchKeyword) - sCompare2 = i2.KeyWord; - - if(caseInsensitive) - sCompare2 = sCompare2.ToLower(); - - if( sCompare1 == keywordPath) - { - insertIndex = -1; - return i1; - } - - if( sCompare2 == keywordPath) - { - insertIndex = -1; - return i2; - } - - if( sCompare1.CompareTo(keywordPath) > 0) - { - insertIndex = nStart; - return null; - } - else if( sCompare2.CompareTo(keywordPath) > 0) - { - insertIndex = nEnd; - return null; - } - else - { - insertIndex = nEnd+1; - } - } - - IndexItem itm = arrIndex[nEnd] as IndexItem; - - string sCompareI = itm.KeyWordPath; - - if(searchKeyword) - sCompareI = itm.KeyWord; - - if(caseInsensitive) - sCompareI = sCompareI.ToLower(); - - if( sCompareI.CompareTo(keywordPath) > 0) - { - insertIndex = nStart; - return null; - } - else if( sCompareI.CompareTo(keywordPath) < 0) - { - insertIndex = nEnd+1; - return null; - } - else - { - insertIndex = -1; - return arrIndex[nEnd] as IndexItem; - } - } - - /// - /// Checks if a keyword exists in a index collection - /// - /// index to search (arraylist of IndexItems) - /// keywordpath to search - /// Returns the found IndexItem, otherwise null - private IndexItem ContainsIndex(ArrayList arrIndex, string keywordPath) - { - foreach(IndexItem curItem in arrIndex) - { - if(curItem.KeyWordPath == keywordPath) - return curItem; - } - - return null; - } - - /// - /// Searches the alinks- or klinks-index for a specific keyword/associative - /// - /// keyword/associative to search - /// type of index to search - /// Returns an ArrayList which contains IndexTopic items or null if nothing was found - public IndexItem SearchIndex(string search, IndexType typeOfIndex) - { - ArrayList _index = null; - - switch( typeOfIndex ) - { - case IndexType.AssiciativeLinks: _index = _aLinks;break; - case IndexType.KeywordLinks: _index = _kLinks;break; - } - - int insertIdx=0; - IndexItem foundItem = BinSearch(0, _index.Count, _index, search, true, true, ref insertIdx); - - return foundItem; - } - } -} diff --git a/irc/TechBot/CHMLibrary/IndexItem.cs b/irc/TechBot/CHMLibrary/IndexItem.cs deleted file mode 100644 index a21415880cd..00000000000 --- a/irc/TechBot/CHMLibrary/IndexItem.cs +++ /dev/null @@ -1,396 +0,0 @@ -using System; -using System.IO; -using System.Text; -using System.Collections; - -using HtmlHelp.ChmDecoding; - -namespace HtmlHelp -{ - /// - /// The class IndexItem implements an help-index item - /// - public sealed class IndexItem : IComparable - { - /// - /// Internal member storing the keyword - /// - private string _keyWord = ""; - /// - /// Internal member storing all associated information type strings - /// - private ArrayList _infoTypeStrings = new ArrayList(); - /// - /// Internal member storing the flag if this is a see-also keyword - /// - private bool _isSeeAlso = false; - /// - /// Internal member storing the indent of the keyword - /// - private int _indent = 0; - /// - /// Internal member storing the last index of the keyword in the seperated list - /// - private int _charIndex = 0; - /// - /// Internal member storing the entry index - /// - private int _entryIndex = 0; - /// - /// Internal member storing an array of see-also values - /// - private string[] _seeAlso = new string[0]; - /// - /// Internal member storing an array of topic offsets - /// - private int[] _nTopics = new int[0]; - /// - /// Internal member storing the topics - /// - private ArrayList _Topics = null; - /// - /// Associated CHMFile instance - /// - private CHMFile _chmFile = null; - /// - /// Internal flag specifying the chm file path - /// - private string _chmFileName = ""; - - /// - /// Constructor of the class - /// - /// associated CHMFile instance - /// keyword - /// true if it is a see-also keyword - /// indent of the entry - /// char index of the last keyword in the separated list - /// index of the entry - /// string array with see-also values - /// integer array with topic offsets - internal IndexItem(CHMFile chmFile, string keyWord, bool isSeeAlso, int indent, int charIndex, int entryIndex, string[] seeAlsoValues, int[] topicOffsets) - { - _chmFile = chmFile; - _chmFileName = _chmFile.ChmFilePath; - _keyWord = keyWord; - _isSeeAlso = isSeeAlso; - _indent = indent; - _charIndex = charIndex; - _entryIndex = entryIndex; - _seeAlso = seeAlsoValues; - _nTopics = topicOffsets; - } - - /// - /// Standard constructor - /// - public IndexItem() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - /// true if the chm filename should be written - internal void Dump(ref BinaryWriter writer, bool writeFileName) - { - int i=0; - - writer.Write(_keyWord); - writer.Write(_isSeeAlso); - writer.Write(_indent); - - if(writeFileName) - writer.Write(_chmFileName); - - writer.Write(_infoTypeStrings.Count); - - for(i=0; i<_infoTypeStrings.Count; i++) - writer.Write( (_infoTypeStrings[i]).ToString() ); - - writer.Write(_seeAlso.Length); - - for(i=0; i<_seeAlso.Length; i++) - { - if(_seeAlso[i] == null) - writer.Write(""); - else - writer.Write( _seeAlso[i] ); - } - - writer.Write(Topics.Count); - - for(i=0; i - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - Dump(ref writer, false); - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - /// filelist from helpsystem - internal bool ReadDump(ref BinaryReader reader, ArrayList filesList) - { - int i=0; - _keyWord = reader.ReadString(); - _isSeeAlso = reader.ReadBoolean(); - _indent = reader.ReadInt32(); - _chmFileName = reader.ReadString(); - - foreach(CHMFile curFile in filesList) - { - if(curFile.ChmFilePath == _chmFileName) - { - _chmFile = curFile; - break; - } - } - - if(_chmFile==null) - return false; - - int nCnt = reader.ReadInt32(); - - for(i=0; i - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - int i=0; - _keyWord = reader.ReadString(); - _isSeeAlso = reader.ReadBoolean(); - _indent = reader.ReadInt32(); - - int nCnt = reader.ReadInt32(); - - for(i=0; i - /// Implements the compareto method which allows sorting. - /// - /// object to compare to - /// See IComparable.CompareTo() - public int CompareTo(object obj) - { - if( obj.GetType() == this.GetType() ) - { - IndexItem cmp = (IndexItem)obj; - - return this.KeyWordPath.CompareTo( cmp.KeyWordPath ); - } - - return 0; - } - - /// - /// Gets/Sets the associated CHMFile instance - /// - internal CHMFile ChmFile - { - get { return _chmFile; } - set { _chmFile = value; } - } - - /// - /// Gets the ArrayList which holds all information types/categories this item is associated - /// - internal ArrayList InfoTypeStrings - { - get { return _infoTypeStrings; } - } - - /// - /// Adds a see-also string to the index item and marks it as see also item - /// - /// see also string to add - internal void AddSeeAlso(string seeAlsoString) - { - string[] seeAlso = new string[ _seeAlso.Length +1 ]; - for(int i=0; i<_seeAlso.Length; i++) - seeAlso[i] = _seeAlso[i]; - - seeAlso[_seeAlso.Length] = seeAlsoString; - _seeAlso = seeAlso; - _isSeeAlso = true; - } - - /// - /// Gets/Sets the full keyword-path of this item ( ", " separated list) - /// - public string KeyWordPath - { - get { return _keyWord; } - set { _keyWord = value; } - } - - /// - /// Gets the keyword of this item - /// - public string KeyWord - { - get - { - return _keyWord.Substring(_charIndex, _keyWord.Length-_charIndex); - } - } - - /// - /// Gets the keyword of this item with prefixing indent spaces - /// - public string IndentKeyWord - { - get - { - string sKW = this.KeyWord; - StringBuilder sb = new StringBuilder("",this.Indent*3 + sKW.Length); - for(int i=0; i - /// Gets/Sets the see-also flag of this item - /// - public bool IsSeeAlso - { - get { return _isSeeAlso; } - set { _isSeeAlso = value; } - } - - /// - /// Gets/Sets the listbox indent for this item - /// - public int Indent - { - get { return _indent; } - set { _indent = value; } - } - - /// - /// Gets/Sets the character index of an indent keyword - /// - public int CharIndex - { - get { return _charIndex; } - set { _charIndex = value; } - } - - /// - /// Gets the see-also values of this item - /// - public string[] SeeAlso - { - get { return _seeAlso; } - } - - /// - /// Gets an array with the associated topics - /// - public ArrayList Topics - { - get - { - if( _Topics == null ) - { - if(IsSeeAlso) - { - _Topics = new ArrayList(); - } - else - { - if( (_chmFile != null) && (_chmFile.TopicsFile != null) ) - { - _Topics = new ArrayList(); - - for(int i=0; i<_nTopics.Length; i++) - { - IndexTopic newTopic = IndexTopic.FromTopicEntry((TopicEntry)_chmFile.TopicsFile.TopicTable[ _nTopics[i] ]); - newTopic.AssociatedFile = _chmFile; - _Topics.Add( newTopic ); - } - } - else - { - _Topics = new ArrayList(); - } - } - } - - return _Topics; - } - } - } -} diff --git a/irc/TechBot/CHMLibrary/IndexTopic.cs b/irc/TechBot/CHMLibrary/IndexTopic.cs deleted file mode 100644 index 07c8f66d022..00000000000 --- a/irc/TechBot/CHMLibrary/IndexTopic.cs +++ /dev/null @@ -1,216 +0,0 @@ -using System; -using System.IO; - -using HtmlHelp.ChmDecoding; - -namespace HtmlHelp -{ - /// - /// The class IndexTopic implements an entry for the IndexItem topics list. - /// - public sealed class IndexTopic - { - private DataMode _topicMode = DataMode.TextBased; - private string _title=""; - private string _local=""; - private string _compileFile = ""; - private string _chmPath = ""; - private int _topicOffset = -1; - private CHMFile _associatedFile = null; - - /// - /// Creates a new instance of the class based on an existing TopicEntry - /// - /// - internal static IndexTopic FromTopicEntry(TopicEntry entry) - { - return new IndexTopic(entry.EntryOffset, entry.ChmFile); - //return new IndexTopic( entry.Title, entry.Locale, entry.ChmFile.CompileFile, entry.ChmFile.ChmFilePath); - } - - /// - /// Creates a new instance of the class (binary extraction mode) - /// - /// offset of the topic entry - /// associated CHMFile instance - internal IndexTopic(int topicOffset, CHMFile associatedFile) - { - _topicMode = DataMode.Binary; - _topicOffset = topicOffset; - _associatedFile = associatedFile; - } - - /// - /// Constructor of the class - /// - /// topic title - /// topic local (content filename) - /// name of the chm file (location of topic) - /// path of the chm file - public IndexTopic(string Title, string local, string compilefile, string chmpath) - { - _topicMode = DataMode.TextBased; - _title = Title; - _local = local; - _compileFile = compilefile; - _chmPath = chmpath; - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write((int)_topicMode); - - if(_topicMode==DataMode.TextBased) - { - writer.Write(_title); - writer.Write(_local); - } - else - { - writer.Write(_topicOffset); - } - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - _topicMode = (DataMode)reader.ReadInt32(); - - if(_topicMode==DataMode.TextBased) - { - _title = reader.ReadString(); - _local = reader.ReadString(); - } - else - { - _topicOffset = reader.ReadInt32(); - } - } - #endregion - - /// - /// Internally used to set the chm-finos when reading from dump store - /// - /// - /// - internal void SetChmInfo(string compilefile, string chmpath) - { - _compileFile = compilefile; - _chmPath = chmpath; - } - - /// - /// Gets/Sets the associated CHMFile instance - /// - internal CHMFile AssociatedFile - { - get { return _associatedFile; } - set { _associatedFile = value; } - } - - /// - /// Gets the topic title - /// - public string Title - { - get - { - if((_topicMode == DataMode.Binary )&&(_associatedFile!=null)) - { - if( _topicOffset >= 0) - { - TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]); - if(te != null) - { - return te.Title; - } - } - } - - return _title; - } - } - - /// - /// Gets the local (content filename) - /// - public string Local - { - get - { - if((_topicMode == DataMode.Binary )&&(_associatedFile!=null)) - { - if( _topicOffset >= 0) - { - TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]); - if(te != null) - { - return te.Locale; - } - } - } - - return _local; - } - } - - /// - /// Gets the compile file (location) - /// - public string CompileFile - { - get - { - if(_associatedFile != null) - return _associatedFile.CompileFile; - - return _compileFile; - } - } - - /// - /// Gets the chm file path - /// - public string ChmFilePath - { - get - { - if(_associatedFile != null) - return _associatedFile.ChmFilePath; - - return _chmPath; - } - } - - /// - /// Gets the url - /// - public string URL - { - get - { - string sL = Local; - - if(sL.Length<=0) - return "";//"about:blank"; - - if( (sL.ToLower().IndexOf("http://") >= 0) || - (sL.ToLower().IndexOf("https://") >= 0) || - (sL.ToLower().IndexOf("mailto:") >= 0) || - (sL.ToLower().IndexOf("ftp://") >= 0) || - (sL.ToLower().IndexOf("ms-its:") >= 0)) - return sL; - - return HtmlHelpSystem.UrlPrefix + ChmFilePath + "::/" + sL; - } - } - } -} diff --git a/irc/TechBot/CHMLibrary/InformationType.cs b/irc/TechBot/CHMLibrary/InformationType.cs deleted file mode 100644 index 7f23e5c4abc..00000000000 --- a/irc/TechBot/CHMLibrary/InformationType.cs +++ /dev/null @@ -1,146 +0,0 @@ -using System; -using System.IO; - -namespace HtmlHelp -{ - /// - /// Enumeration for specifying the mode of the information type - /// - public enum InformationTypeMode - { - /// - /// Inclusive information type. The user will be allowed to select from one or more information types. - /// - Inclusive = 0, - /// - /// Exclusive information type. The user will be allowed to choose only one information type within each category - /// - Exclusive = 1, - /// - /// Hidden information type. The user cannot see this information types (only for API calls). - /// - Hidden = 2 - } - - /// - /// The class InformationType implements a methods/properties for an information type. - /// - /// Note: Information types and categories allow users to filter help contents. - /// They are only supported if using sitemap TOC and/or sitemap Index. - public class InformationType - { - private string _name = ""; - private string _description = ""; - private InformationTypeMode _typeMode = InformationTypeMode.Inclusive; - private bool _isInCategory = false; - private int _referenceCount = 1; - - /// - /// Standard constructor - /// - /// the mode is set to InformationTypeMode.Inclusive by default - public InformationType() : this("","") - { - } - - /// - /// Standard constructor - /// - /// name of the information type - /// description - /// the mode is set to InformationTypeMode.Inclusive by default - public InformationType(string name, string description) : this(name, description, InformationTypeMode.Inclusive) - { - } - - /// - /// Standard constructor - /// - /// name of the information type - /// description - /// mode of the information type - public InformationType(string name, string description, InformationTypeMode mode) - { - _name = name; - _description = description; - _typeMode = mode; - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - writer.Write( (int)_typeMode ); - writer.Write( _name ); - writer.Write( _description ); - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - _typeMode = (InformationTypeMode)reader.ReadInt32(); - _name = reader.ReadString(); - _description = reader.ReadString(); - } - #endregion - - /// - /// Sets the flag if this information type is nested in at least one category - /// - /// true or false - internal void SetCategoryFlag(bool newValue) - { - _isInCategory = newValue; - } - - /// - /// Gets/Sets the reference count of this information type instance - /// - internal int ReferenceCount - { - get { return _referenceCount; } - set { _referenceCount = value; } - } - - /// - /// Gets true if this information type is nested in at least one category - /// - public bool IsInCategory - { - get { return _isInCategory; } - } - - /// - /// Gets/Sets the name of the information type - /// - public string Name - { - get { return _name; } - set { _name = value; } - } - - /// - /// Gets/Sets the description of the information type - /// - public string Description - { - get { return _description; } - set { _name = value; } - } - - /// - /// Gets/Sets the mode of the information type - /// - public InformationTypeMode Mode - { - get { return _typeMode; } - set { _typeMode = value; } - } - } -} diff --git a/irc/TechBot/CHMLibrary/Storage/CHMStream.cs b/irc/TechBot/CHMLibrary/Storage/CHMStream.cs deleted file mode 100644 index 8eab65942a4..00000000000 --- a/irc/TechBot/CHMLibrary/Storage/CHMStream.cs +++ /dev/null @@ -1,2842 +0,0 @@ -using System; -using System.Diagnostics; -using System.Text; -using System.Data; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Specialized; -using System.IO; -using System.Runtime.InteropServices; - -namespace CHMStream -{ - /// - /// Summary description for CHMFile. - /// - /// - public class CHMStream : IDisposable - { - public MemoryStream OpenStream(chmUnitInfo Info) - { - if (Info==null) - return null; - - MemoryStream st=new MemoryStream(); - this.ExtractFile(Info,st); - return st; - } - - public MemoryStream OpenStream(string FileName) - { - chmUnitInfo info=this.GetFileInfo(FileName); - if (info==null) - return null; - return OpenStream(info); - } - - private string m_CHMFileName; - public string CHMFileName - { - get - { - return m_CHMFileName; - } - } - - public CHMStream() - { - } - - public CHMStream(string CHMFileName) - { - OpenCHM(CHMFileName); - } - - public void OpenCHM(string CHMFileName) - { - m_CHMFileName=CHMFileName; - FileInfo fi=new FileInfo(m_CHMFileName); - Dir=fi.DirectoryName; - m_CHMName=fi.Name; - fi=null; - chm_open(m_CHMFileName); - } - - private bool m_bCHMLoaded=false; - public bool CHMLoaded - { - get - { - return m_bCHMLoaded; - } - } - - private string m_CHMName=""; - public string CHMName - { - get - { - return m_CHMName; - } - } - - private string Dir=""; - private string m_FileFind=""; - private string m_FileFindLastPart=""; - private chmUnitInfo m_FileInfo=null; - private int m_FileCount=0; - public void FindFile(chmUnitInfo Info, ref CHMStream.CHM_ENUMERATOR Status) - { - string LocalFile=Info.path; - LocalFile=LocalFile.Replace("/",@"\"); - if (!LocalFile.StartsWith(@"\")) - LocalFile=@"\"+LocalFile; - LocalFile=LocalFile.ToLower(); - - if (m_FileFind.Length<=LocalFile.Length) - { - if (LocalFile.IndexOf(m_FileFind)==LocalFile.Length-m_FileFind.Length) - { - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_SUCCESS; - m_FileInfo=Info; - return; - } - } - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE; - } - - public void FileCount(chmUnitInfo Info, ref CHMStream.CHM_ENUMERATOR Status) - { - m_FileCount++; - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE; - } - - private ArrayList m_FileList=null; - private string m_strByExt=""; - public void FileList(chmUnitInfo Info, ref CHMStream.CHM_ENUMERATOR Status) - { - m_FileList.Add(Info.path); - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE; - } - - public void FileListByExtension(chmUnitInfo Info, ref CHMStream.CHM_ENUMERATOR Status) - { - FileInfo fi=new FileInfo(Info.path); - if (fi.Extension.ToLower()==m_strByExt.ToLower()) - m_FileList.Add(Info.path); - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE; - } - - public void FindFileIndex(chmUnitInfo Info, ref CHMStream.CHM_ENUMERATOR Status) - { - if (m_FileCount==m_FileFindIndex) - { - m_FileInfo=Info; - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_SUCCESS; - } - else - { - m_FileCount++; - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE; - } - } - - public int GetFileCount() - { - if (!m_bCHMLoaded) - return 0; - - m_FileCount=0; - this.CHMFileFoundEvent+=new CHMStream.CHMFileFound(FileCount); - this.chm_enumerate(CHM_ENUMERATE.CHM_ENUMERATE_ALL); - this.CHMFileFoundEvent-=new CHMStream.CHMFileFound(FileCount); - return m_FileCount; - } - - public ArrayList GetFileList() - { - if (!m_bCHMLoaded) - return null; - - m_FileList=null; - m_FileList=new ArrayList(1000); - this.CHMFileFoundEvent+=new CHMStream.CHMFileFound(FileList); - this.chm_enumerate(CHM_ENUMERATE.CHM_ENUMERATE_ALL); - this.CHMFileFoundEvent-=new CHMStream.CHMFileFound(FileList); - return m_FileList; - } - - public ArrayList GetFileListByExtenstion(string Ext) - { - if (!m_bCHMLoaded) - return null; - - m_FileList=null; - m_FileList=new ArrayList(1000); - m_strByExt=Ext; - this.CHMFileFoundEvent+=new CHMStream.CHMFileFound(FileListByExtension); - this.chm_enumerate(CHM_ENUMERATE.CHM_ENUMERATE_ALL); - this.CHMFileFoundEvent-=new CHMStream.CHMFileFound(FileListByExtension); - return m_FileList; - } - - public chmUnitInfo GetFileInfo(string FileName) - { - if (!m_bCHMLoaded) - return null; - - m_FileFind=FileName.ToLower().Replace("/",@"\"); - - // Remove all leading '..\' - do - { - if (m_FileFind.StartsWith(@"..\")) - m_FileFind=m_FileFind.Substring(3); - else - break; - } - while(true); - - if (!m_FileFind.StartsWith(@"\")) - m_FileFind=@"\"+m_FileFind; - - string []parts=m_FileFind.Split('\\'); - m_FileFindLastPart=@"\"+parts[parts.GetUpperBound(0)]; - - this.CHMFileFoundEvent+=new CHMStream.CHMFileFound(FindFile); - m_FileInfo=null; - this.chm_enumerate(CHM_ENUMERATE.CHM_ENUMERATE_ALL); - this.CHMFileFoundEvent-=new CHMStream.CHMFileFound(FindFile); - return m_FileInfo; - } - - private int m_FileFindIndex=0; - public chmUnitInfo GetFileInfo(int FileIndex) - { - if (!m_bCHMLoaded) - return null; - - m_FileFindIndex=FileIndex; - - this.CHMFileFoundEvent+=new CHMStream.CHMFileFound(FindFileIndex); - m_FileCount=0; - m_FileInfo=null; - this.chm_enumerate(CHM_ENUMERATE.CHM_ENUMERATE_ALL); - this.CHMFileFoundEvent-=new CHMStream.CHMFileFound(FindFileIndex); - return m_FileInfo; - } - - public chmUnitInfo GetFileInfoByExtension(string Ext) - { - this.CHMFileFoundEvent+=new CHMStream.CHMFileFound(FindFileByExtension); - m_FileInfo=null; - m_FileFind=Ext.ToLower(); - this.chm_enumerate(CHMStream.CHM_ENUMERATE.CHM_ENUMERATE_ALL); - this.CHMFileFoundEvent-=new CHMStream.CHMFileFound(FindFileByExtension); - return m_FileInfo; - } - - public bool ExtractFile(string FileName, System.IO.Stream st) - { - if (!m_bCHMLoaded) - return false; - - chmUnitInfo Info=GetFileInfo(FileName); - return ExtractFile(Info,st); - } - - public bool ExtractFile(chmUnitInfo Info, System.IO.Stream st) - { - if (!m_bCHMLoaded) - return false; - - if (Info==null) - return false; - else - { - chm_retrieve_object(Info,st,0,Info.length); - } - return true; - } - - public string ExtractTextFile(string FileName) - { - if (!m_bCHMLoaded) - return "CHM File not loaded"; - - chmUnitInfo Info=GetFileInfo(FileName); - return ExtractTextFile(Info); - } - - public string ExtractTextFile(chmUnitInfo Info) - { - if (!m_bCHMLoaded) - return "CHM File not loaded"; - - if (Info==null) - return ""; - - if (Info.path.Length>=2) - { - if (Info.path.Substring(0,2).CompareTo("/#")==0) - return ""; - if (Info.path.Substring(0,2).CompareTo("/$")==0) - return ""; - } - - MemoryStream st=new MemoryStream((int)Info.length); - this.chm_retrieve_object(Info,st,0,Info.length); - - if (st.Length==0) - return ""; - - string Text=""; - - ASCIIEncoding ascii=new ASCIIEncoding(); - Text=ascii.GetString(st.ToArray(),0,50); - - // UTF Decoding - if (Text.IndexOf("UTF-8")!=-1) - { - UTF8Encoding utf8 = new UTF8Encoding(); - Text=utf8.GetString(st.ToArray(),0,(int)st.Length); - } - else - Text=ascii.GetString(st.ToArray(),0,(int)st.Length); - - return Text; - } - - public void FindFileByExtension(chmUnitInfo Info, ref CHMStream.CHM_ENUMERATOR Status) - { - if ((Info.path.StartsWith("::")) || (Info.path.StartsWith("#")) ||(Info.path.StartsWith("$"))) - { - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE; - return; - } - - FileInfo Fi=new FileInfo(Info.path); - if (Fi.Extension.ToLower()==m_FileFind) - { - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_SUCCESS; - m_FileInfo=Info; - } - else - Status=CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE; - } - - public bool GetCHMParts(string Url, ref string CHMFileName, ref string FileName, ref string Anchor) - { - Regex ParseURLRegEx= new Regex( @"ms-its:(?'CHMFile'.*)::(?'Topic'.*)", RegexOptions.IgnoreCase| RegexOptions.Singleline | RegexOptions.ExplicitCapture| RegexOptions.IgnorePatternWhitespace| RegexOptions.Compiled); - - // Parse URL - Get CHM Filename & Page Name - // Format 'ms-its:file name.chm::/topic.htm' - if (ParseURLRegEx.IsMatch(Url)) - { - Match m=ParseURLRegEx.Match(Url); - CHMFileName=m.Groups["CHMFile"].Value; - string Topic=m.Groups["Topic"].Value; - int idx=Topic.IndexOf("#"); - if (idx>-1) - { - FileName=Topic.Substring(0,idx); - Anchor=Topic.Substring(idx+1); - } - else - FileName=Topic; - return true; - } - return false; - } - - private string m_TempDir=""; - string ReplaceFileName(Match m) - { - string strReplace = m.ToString(); - - // Process string. - if (m.Groups["FileName"]==null) - return strReplace; - - string FileName=m.Groups["FileName"].Value; - string FileName2=FileName.Replace("/",@"\"); - int idx=FileName2.IndexOf("::"); - if (idx!=-1) - FileName2=FileName2.Substring(idx+2); - string []parts=FileName2.Split('\\'); - string NewName=@"file://"+m_TempDir+parts[parts.GetUpperBound(0)]; - - strReplace=strReplace.Replace(FileName,NewName); - return strReplace; - } - - public ArrayList GetFileList(ref string Text, string TempDir) - { - if (!m_bCHMLoaded) - return null; - - m_TempDir=TempDir; - - ArrayList FilesList=new ArrayList(); - - // Parse HTML for CCS, ima, etc - string regexContent=@"[\x2f a-zA-Z0-9\x5C\x2E\x28\x29\x23\x24\x25\x26\x27\x22\x21\x3F\x3E\x3D\x3C\x3B\x3A\x5B\x5D\x5E\x5F\x7D\x7C\x7B\x7E\x40\x2D\x2C\x2B\x2A]*\s*"; - string regexFileName=@"\s*=\s*[""|'](?'FileName'[^""^']*)[""|']\s*"; - - Regex ScriptRegex = new Regex(@"]*>.*", - RegexOptions.IgnoreCase - | RegexOptions.Multiline - | RegexOptions.Singleline - | RegexOptions.IgnorePatternWhitespace - | RegexOptions.Compiled); - - Regex XMLRegex = new Regex(@"<\?xml.*\?>", - RegexOptions.IgnoreCase - | RegexOptions.Multiline - | RegexOptions.Singleline - | RegexOptions.IgnorePatternWhitespace - | RegexOptions.Compiled); - - Regex XMLRegex2 = new Regex(@"]*>.*", - RegexOptions.IgnoreCase - | RegexOptions.Multiline - | RegexOptions.Singleline - | RegexOptions.IgnorePatternWhitespace - | RegexOptions.Compiled); - - Regex SRCRegex = new Regex( - @"src"+regexFileName, - RegexOptions.IgnoreCase - | RegexOptions.Multiline - | RegexOptions.Singleline - | RegexOptions.IgnorePatternWhitespace - | RegexOptions.Compiled); - - Regex StyleSheetRegex = new Regex( - @" 0; i--) - { - UInt32 curBlockIdx = (UInt32)(block-i); - - /* check if we most recently decompressed the previous block */ - if ((ulong)lzx_last_block != curBlockIdx) - { - if ((curBlockIdx % reset_blkcount)==0) - { - lzx_state.LZXreset(); - } - - _chm_get_cmpblock_bounds(st,curBlockIdx, ref cmpStart, ref cmpLen); - st.BaseStream.Seek((long)cmpStart,SeekOrigin.Begin); - if (lzx_state.LZXdecompress(st,OutBuffer, ref cmpLen, ref reset_table.block_len) != lzw.DECR_OK) - return (Int64)0; - } - lzx_last_block = (int)(curBlockIdx); - } - } - else - { - if ((block % reset_blkcount)==0) - { - lzx_state.LZXreset(); - } - } - - // decompress the block we actually want - if (_chm_get_cmpblock_bounds(st, block, ref cmpStart, ref cmpLen)==0) - return 0; - - st.BaseStream.Seek((long)cmpStart,SeekOrigin.Begin); - - if (lzx_state.LZXdecompress(st, OutBuffer, ref cmpLen,ref reset_table.block_len) != lzw.DECR_OK) - return (Int64)0; - - lzx_last_block = (int)block; - - // XXX: modify LZX routines to return the length of the data they - // * decompressed and return that instead, for an extra sanity check. - return reset_table.block_len; - } - - // grab a region from a compressed block - private ulong _chm_decompress_region(Stream buf, ulong start, ulong len) - { - ulong nBlock, nOffset; - ulong nLen; - ulong gotLen; - // byte [] ubuffer=null; - - if (len <= 0) - return (Int64)0; - - // figure out what we need to read - nBlock = start / reset_table.block_len; - nOffset = start % reset_table.block_len; - nLen = len; - if (nLen > (reset_table.block_len - nOffset)) - nLen = reset_table.block_len - nOffset; - - // data request not satisfied, so... start up the decompressor machine - if (lzx_state==null) - { - int window_size = ffs(this.window_size) - 1; - lzx_last_block = -1; - - lzx_state=new lzw(); - lzx_state.LZXinit(window_size); - } - - // decompress some data - MemoryStream ms=new MemoryStream((int)reset_table.block_len+6144); - gotLen = _chm_decompress_block(nBlock, ms); - if (gotLen < nLen) - nLen = gotLen; - - // memcpy(buf, ubuffer+nOffset, (unsigned int)nLen); - ms.Position=(long)nOffset; - for(ulong i=0;i= (ulong)ui.length) - return (Int64)0; - - // clip length - if (addr + (ulong)len > (ulong)ui.length) - len = (ulong)ui.length - (ulong)addr; - - // if the file is uncompressed, it's simple - if (ui.space == CHMStream.CHM_COMPRESSION.CHM_UNCOMPRESSED) - { - // read data - long FilePos=st.BaseStream.Position; - st.BaseStream.Seek((long)((long)data_offset + (long)ui.start + (long)addr),SeekOrigin.Begin); - // byte [] buffer=st.ReadBytes((int)len); - buf.Write(st.ReadBytes((int)len),0,(int) len); - st.BaseStream.Seek(FilePos,SeekOrigin.Begin); - return (ulong)len; - } - - // else if the file is compressed, it's a little trickier - else // ui->space == CHM_COMPRESSED - { - if (lzx_state!=null) - { - lzx_state.LZXteardown(); - lzx_state=null; - } - ulong swath=0, total=0; - do - { - if (!compression_enabled) - return total; - - // swill another mouthful - swath = _chm_decompress_region(buf, ui.start + addr, len); - - // if we didn't get any... - if (swath == 0) - { - Trace.Assert((total!=ui.length),"De-compress failed","Length Required = "+ui.length.ToString()+" Length returned = "+total.ToString()); - return total; - } - - // update stats - total += swath; - len -= swath; - addr += swath; - } while (len != 0); - lzx_state=null; - - Trace.Assert((len!=ui.length),"De-compress failed","Length Required = "+ui.length.ToString()+" Length returned = "+len.ToString()); - return len; - } - } - #endregion - - #region Enumerate functions - // Enumerate the objects in the .chm archive - // Use delegate to handle callback - - public delegate void CHMFileFound(chmUnitInfo Info, ref CHMStream.CHM_ENUMERATOR Status); - public event CHMFileFound CHMFileFoundEvent; - - public void OnFileFound(chmUnitInfo Info, ref CHMStream.CHM_ENUMERATOR Status) - { - if (CHMFileFoundEvent!=null) - CHMFileFoundEvent(Info,ref Status); - } - private int chm_enumerate(CHM_ENUMERATE what) - { - Int32 curPage; - - // buffer to hold whatever page we're looking at - chmPmglHeader header; - uint end=0; - uint cur=0; - - // the current ui - chmUnitInfo ui= new chmUnitInfo(); - CHMStream.CHM_ENUMERATE flag=CHMStream.CHM_ENUMERATE.None; - - // starting page - curPage = index_head; - - // until we have either returned or given up - while (curPage != -1) - { - st.BaseStream.Seek((long)((long)dir_offset + (long)(curPage*block_len)),SeekOrigin.Begin); - - // figure out start and end for this page - cur = (uint)st.BaseStream.Position; - - header=new chmPmglHeader(); - if (header.Read_pmgl_header(st)==0) - return 0; - - end = (uint)(st.BaseStream.Position + block_len - (header.free_space)- chmPmglHeader._CHM_PMGL_LEN); - - // loop over this page - while (st.BaseStream.Position < end) - { - if (header._chm_parse_PMGL_entry(st,ref ui)==0) - return 0; - - // check for DIRS - if (ui.length == 0 && ((what & CHM_ENUMERATE.CHM_ENUMERATE_DIRS)==0)) - continue; - - // check for FILES - if (ui.length != 0 && ((what & CHM_ENUMERATE.CHM_ENUMERATE_FILES)==0)) - continue; - - // check for NORMAL vs. META - if (ui.path[0] == '/') - { - // check for NORMAL vs. SPECIAL - if (ui.path.Length>2) - { - if (ui.path[1] == '#' || ui.path[1] == '$') - flag = CHMStream.CHM_ENUMERATE.CHM_ENUMERATE_SPECIAL; - else - flag = CHMStream.CHM_ENUMERATE.CHM_ENUMERATE_NORMAL; - } - else - flag = CHMStream.CHM_ENUMERATE.CHM_ENUMERATE_META; - if ((what & flag)==0) - continue; - } - - // call the enumerator - { - CHMStream.CHM_ENUMERATOR status = CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE; - OnFileFound(ui,ref status); - - switch (status) - { - case CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_FAILURE: - return 0; - - case CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_CONTINUE: - break; - - case CHMStream.CHM_ENUMERATOR.CHM_ENUMERATOR_SUCCESS: - return 1; - - default: - break; - } - } - } - - // advance to next page - curPage = header.block_next; - } - - return 1; - } - #endregion - - #region IDisposable Members - - private bool disposed=false; - public void Dispose() - { - Dispose(true); - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SupressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Dispose(bool disposing) executes in two distinct scenarios. - /// If disposing equals true, the method has been called directly - /// or indirectly by a user's code. Managed and unmanaged resources - /// can be disposed. - /// If disposing equals false, the method has been called by the - /// runtime from inside the finalizer and you should not reference - /// other objects. Only unmanaged resources can be disposed. - /// - /// disposing flag - private void Dispose(bool disposing) - { - // Check to see if Dispose has already been called. - if(!this.disposed) - { - // If disposing equals true, dispose all managed - // and unmanaged resources. - if(disposing) - { - // Dispose managed resources. - } - } - disposed = true; - } - - #endregion - } - - #region Structures used by CHM Storage - public class BaseStructure - { - public bool CheckSig(string Sig1, char[] Sig2) - { - int i=0; - foreach(char ch in Sig1.ToCharArray()) - { - if (ch!=Sig2[i]) - return false; - i++; - } - return true; - } - - // skip a compressed dword - public void skip_cword(BinaryReader st) - { - byte b=0; - while ((b=st.ReadByte())>= 0x80); - } - - // skip the data from a PMGL entry - public void _chm_skip_PMGL_entry_data(BinaryReader st) - { - skip_cword(st); - skip_cword(st); - skip_cword(st); - } - - // parse a compressed dword - public UInt64 _chm_parse_cword(BinaryReader st) - { - UInt64 accum = 0; - byte temp=0; - while ((temp=st.ReadByte()) >= 0x80) - { - accum <<= 7; - accum += (ulong)(temp & 0x7f); - } - - return (accum << 7) + temp; - } - - // parse a utf-8 string into an ASCII char buffer - public int _chm_parse_UTF8(BinaryReader st, UInt64 count, ref string path) - { - UTF8Encoding utf8=new UTF8Encoding(); - path=utf8.GetString(st.ReadBytes((int)count),0,(int)count); - return 1; - } - } - - public class chmUnitInfo - { - public UInt64 start=0; - public UInt64 length=0; - public CHMStream.CHM_COMPRESSION space=CHMStream.CHM_COMPRESSION.CHM_UNCOMPRESSED; - public string path=""; - } - - // structure of ITSF headers - public class chmItsfHeader : BaseStructure - { - public const int _CHM_ITSF_V2_LEN=0x58; - public const int _CHM_ITSF_V3_LEN=0x60; - - public char[] signature=null; // 0 (ITSF) - public Int32 version=0; // 4 - public Int32 header_len=0; // 8 - public Int32 unknown_000c=0; // c - public UInt32 last_modified=0; // 10 - public UInt32 lang_id=0; // 14 - public Guid dir_uuid; // 18 - public Guid stream_uuid; // 28 - public UInt64 unknown_offset=0; // 38 - public UInt64 unknown_len=0; // 40 - public UInt64 dir_offset=0; // 48 - public UInt64 dir_len=0; // 50 - public UInt64 data_offset=0; // 58 (Not present before V3) - - public int Read_itsf_header(BinaryReader st) - { - signature=st.ReadChars(4); - if (CheckSig("ITSF",signature)==false) - return 0; - - version=st.ReadInt32(); - header_len=st.ReadInt32(); - unknown_000c=st.ReadInt32(); - last_modified=st.ReadUInt32(); - lang_id=st.ReadUInt32(); - dir_uuid=new Guid(st.ReadBytes(16)); - stream_uuid=new Guid(st.ReadBytes(16)); - unknown_offset=st.ReadUInt64(); - unknown_len=st.ReadUInt64(); - dir_offset=st.ReadUInt64(); - dir_len=st.ReadUInt64(); - - if (version==2) - { - if (header_len != chmItsfHeader._CHM_ITSF_V2_LEN) - return 0; - } - else if (version==3) - { - if (header_len != chmItsfHeader._CHM_ITSF_V3_LEN) - return 0; - } - else return 0; - - if (version==3) - data_offset=st.ReadUInt64(); - else - data_offset = dir_offset + dir_len; - - return 1; - } - } - - // structure of ITSP headers - public class chmItspHeader : BaseStructure - { - const int CHM_ITSP_V1_LEN=0x54; - - public char[] signature=null; // 0 (ITSP) - public Int32 version=0; - public Int32 header_len=0; - public Int32 unknown_000c=0; - public UInt32 block_len=0; - public Int32 blockidx_intvl=0; - public Int32 index_depth=0; - public Int32 index_root=0; - public Int32 index_head=0; - public Int32 unknown_0024=0; - public Int32 num_blocks=0; - public Int32 unknown_002c=0; - public UInt32 lang_id=0; - public Guid system_uuid; - public Guid unknown_0044; - - public int Read_itsp_header(BinaryReader st) - { - signature=st.ReadChars(4); // 0 (ITSP) - if (CheckSig("ITSP",signature)==false) - return 0; - - version=st.ReadInt32(); - header_len=st.ReadInt32(); - - if (header_len!=CHM_ITSP_V1_LEN) - return 0; - - unknown_000c=st.ReadInt32(); - block_len=st.ReadUInt32(); - blockidx_intvl=st.ReadInt32(); - index_depth=st.ReadInt32(); - index_root=st.ReadInt32(); - index_head=st.ReadInt32(); - unknown_0024=st.ReadInt32(); - num_blocks=st.ReadInt32(); - unknown_002c=st.ReadInt32(); - lang_id=st.ReadUInt32(); - system_uuid=new Guid(st.ReadBytes(16)); - unknown_0044=new Guid(st.ReadBytes(16)); - - return 1; - } - } - - public class chmPmglHeader : BaseStructure - { - public const int _CHM_PMGL_LEN=0x14; - public char[] signature=null; // 0 (PMGL) - public UInt32 free_space=0; // 4 - public UInt32 unknown_0008=0; // 8 - public Int32 block_prev=0; // c - public Int32 block_next=0; // 10 - - public int Read_pmgl_header(BinaryReader st) - { - signature=st.ReadChars(4); - if (CheckSig("PMGL",signature)==false) - return 0; - - free_space=st.ReadUInt32(); - unknown_0008=st.ReadUInt32(); - block_prev=st.ReadInt32(); - block_next=st.ReadInt32(); - return 1; - } - - // parse a PMGL entry into a chmUnitInfo struct; return 1 on success. - public int _chm_parse_PMGL_entry(BinaryReader st, ref chmUnitInfo ui) - { - UInt64 strLen; - - // parse str len - strLen = _chm_parse_cword(st); - - // parse path - if (_chm_parse_UTF8(st, strLen, ref ui.path)==0) - return 0; - - // parse info - ui.space = (CHMStream.CHM_COMPRESSION)_chm_parse_cword(st); - ui.start = _chm_parse_cword(st); - ui.length = _chm_parse_cword(st); - return 1; - } - - public chmUnitInfo FindObject(BinaryReader st, UInt32 block_len, string objPath) - { - UInt32 end = (UInt32)st.BaseStream.Position+ block_len - free_space - _CHM_PMGL_LEN; - - // now, scan progressively - chmUnitInfo FoundObject=new chmUnitInfo(); - - while (st.BaseStream.Position < end) - { - _chm_parse_PMGL_entry(st,ref FoundObject); - if (FoundObject.path.ToLower().CompareTo(objPath.ToLower())==0) - return FoundObject; - } - FoundObject=null; - - return null; - } - } - - public class chmPmgiHeader : BaseStructure - { - public const int _CHM_PMGI_LEN=0x8; - - public char[] signature=null; // 0 (PMGL) - public UInt32 free_space=0; // 4 - - public int Read_pmgi_header(BinaryReader st) - { - signature=st.ReadChars(4); - - if ((signature[0]!='P') || (signature[1]!='M') || (signature[2]!='G') || (signature[3]!='I')) - return 0; - - free_space=st.ReadUInt32(); - return 1; - } - - public Int32 _chm_find_in_PMGI(BinaryReader st, UInt32 block_len, string objPath) - { - int page=-1; - UInt64 strLen; - string buffer=""; - uint end = (uint)st.BaseStream.Position + block_len - free_space - _CHM_PMGI_LEN; - - // now, scan progressively - while (st.BaseStream.Position < end) - { - // grab the name - strLen = _chm_parse_cword(st); - buffer=""; - if (_chm_parse_UTF8(st, strLen, ref buffer)==0) - return -1; - - // check if it is the right name - if (buffer.ToLower().CompareTo(objPath.ToLower())>0) - return page; - - // load next value for path - page = (int)_chm_parse_cword(st); - } - return page; - } - } - - public class chmLzxcResetTable:BaseStructure - { - public UInt32 version=0; - public UInt32 block_count=0; - public UInt32 unknown=0; - public UInt32 table_offset=0; - public UInt64 uncompressed_len=0; - public UInt64 compressed_len=0; - public UInt64 block_len=0; - - public int Read_lzxc_reset_table(BinaryReader st) - { - version=st.ReadUInt32(); - block_count=st.ReadUInt32(); - unknown=st.ReadUInt32(); - table_offset=st.ReadUInt32(); - uncompressed_len=st.ReadUInt64(); - compressed_len=st.ReadUInt64(); - block_len=st.ReadUInt64(); - - // check structure - if (version != 2) - return 0; - else - return 1; - } - } - - // structure of LZXC control data block - public class chmLzxcControlData:BaseStructure - { - public const int _CHM_LZXC_MIN_LEN=0x18; - public const int _CHM_LZXC_V2_LEN=0x1c; - - public UInt32 size=0; // 0 - public char[] signature=null; // 4 (LZXC) - public UInt32 version=0; // 8 - public UInt32 resetInterval=0; // c - public UInt32 windowSize=0; // 10 - public UInt32 windowsPerReset=0; // 14 - public UInt32 unknown_18=0; // 18 - - public int Read_lzxc_control_data(BinaryReader st) - { - size=st.ReadUInt32(); - signature=st.ReadChars(4); - - if (CheckSig("LZXC",signature)==false) - return 0; - - version=st.ReadUInt32(); - resetInterval=st.ReadUInt32(); - windowSize=st.ReadUInt32(); - windowsPerReset=st.ReadUInt32(); - - if (size>=_CHM_LZXC_V2_LEN) - unknown_18=st.ReadUInt32(); - else - unknown_18 = 0; - - if (version == 2) - { - resetInterval *= 0x8000; - windowSize *= 0x8000; - } - if (windowSize == 0 || resetInterval == 0) - return 0; - - // for now, only support resetInterval a multiple of windowSize/2 - if (windowSize == 1) - return 0; - if ((resetInterval % (windowSize/2)) != 0) - return 0; - - return 1; - } - } - #endregion - - #region LZW Decoder - - internal class lzx_bits - { - public UInt32 bb=0; - public int bl=0; - } - - internal class lzw - { - public lzw() - { - } - - /* $Id: lzx.c,v 1.5 2002/10/09 01:16:33 jedwin Exp $ */ - /*************************************************************************** - * lzx.c - LZX decompression routines * - * ------------------- * - * * - * maintainer: Jed Wing * - * source: modified lzx.c from cabextract v0.5 * - * notes: This file was taken from cabextract v0.5, which was, * - * itself, a modified version of the lzx decompression code * - * from unlzx. * - * * - * platforms: In its current incarnation, this file has been tested on * - * two different Linux platforms (one, redhat-based, with a * - * 2.1.2 glibc and gcc 2.95.x, and the other, Debian, with * - * 2.2.4 glibc and both gcc 2.95.4 and gcc 3.0.2). Both were * - * Intel x86 compatible machines. * - ***************************************************************************/ - - /*************************************************************************** - * * - * 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. Note that an exemption to this * - * license has been granted by Stuart Caie for the purposes of * - * distribution with CHMFile. This does not, to the best of my * - * knowledge, constitute a change in the license of this (the LZX) code * - * in general. * - * * - ***************************************************************************/ - - /* some constants defined by the LZX specification */ - private const int LZX_MIN_MATCH = 2; - private const int LZX_MAX_MATCH = 257; - private const int LZX_NUM_CHARS = 256; - private const int LZX_BLOCKTYPE_INVALID = 0; /* also blocktypes 4-7 invalid */ - private const int LZX_BLOCKTYPE_VERBATIM = 1; - private const int LZX_BLOCKTYPE_ALIGNED = 2; - private const int LZX_BLOCKTYPE_UNCOMPRESSED = 3; - private const int LZX_PRETREE_NUM_ELEMENTS = 20; - private const int LZX_ALIGNED_NUM_ELEMENTS = 8; /* aligned offset tree #elements */ - private const int LZX_NUM_PRIMARY_LENGTHS = 7; /* this one missing from spec! */ - private const int LZX_NUM_SECONDARY_LENGTHS = 249; /* length tree #elements */ - - /* LZX huffman defines: tweak tablebits as desired */ - private const int LZX_PRETREE_MAXSYMBOLS = LZX_PRETREE_NUM_ELEMENTS; - private const int LZX_PRETREE_TABLEBITS = 6; - private const int LZX_MAINTREE_MAXSYMBOLS = LZX_NUM_CHARS + 50*8; - private const int LZX_MAINTREE_TABLEBITS = 12; - private const int LZX_LENGTH_MAXSYMBOLS = LZX_NUM_SECONDARY_LENGTHS+1; - private const int LZX_LENGTH_TABLEBITS = 12; - private const int LZX_ALIGNED_MAXSYMBOLS = LZX_ALIGNED_NUM_ELEMENTS; - private const int LZX_ALIGNED_TABLEBITS = 7; - private const int LZX_LENTABLE_SAFETY = 64; /* we allow length table decoding overruns */ - - public const int DECR_OK = 0; - public const int DECR_DATAFORMAT = 1; - public const int DECR_ILLEGALDATA = 2; - public const int DECR_NOMEMORY = 3; - - private byte[] window; /* the actual decoding window */ - private ulong window_size; /* window size (32Kb through 2Mb) */ - private ulong actual_size; /* window size when it was first allocated */ - private ulong window_posn; /* current offset within the window */ - private ulong R0, R1, R2; /* for the LRU offset system */ - private UInt32 main_elements; /* number of main tree elements */ - private int header_read; /* have we started decoding at all yet? */ - private UInt32 block_type; /* type of this block */ - private ulong block_length; /* uncompressed length of this block */ - private ulong block_remaining; /* uncompressed bytes still left to decode */ - private ulong frames_read; /* the number of CFDATA blocks processed */ - private long intel_filesize; /* magic header value used for transform */ - private long intel_curpos; /* current offset in transform space */ - private int intel_started; /* have we seen any translatable data yet? */ - - - private uint [] PRETREE_table = new uint[(1<<(6)) + (((20))<<1)]; - private byte [] PRETREE_len = new byte [((20)) + (64)]; - - private uint [] MAINTREE_table= new uint[(1<<(12)) + (((256) + 50*8)<<1)]; - private byte [] MAINTREE_len = new byte [((256) + 50*8) + (64)]; - - private uint [] LENGTH_table= new uint[(1<<(12)) + (((249)+1)<<1)]; - private byte [] LENGTH_len = new byte [((249)+1) + (64)]; - - private uint [] ALIGNED_table= new uint[(1<<(7)) + (((8))<<1)]; - private byte [] ALIGNED_len = new byte [((8)) + (64)]; - private System.IO.BinaryReader BitSource=null; - private System.IO.Stream OutputStream=null; - - /* LZX decruncher */ - - /* Microsoft's LZX document and their implementation of the - * com.ms.util.cab Java package do not concur. - * - * In the LZX document, there is a table showing the correlation between - * window size and the number of position slots. It states that the 1MB - * window = 40 slots and the 2MB window = 42 slots. In the implementation, - * 1MB = 42 slots, 2MB = 50 slots. The actual calculation is 'find the - * first slot whose position base is equal to or more than the required - * window size'. This would explain why other tables in the document refer - * to 50 slots rather than 42. - * - * The constant NUM_PRIMARY_LENGTHS used in the decompression pseudocode - * is not defined in the specification. - * - * The LZX document does not state the uncompressed block has an - * uncompressed length field. Where does this length field come from, so - * we can know how large the block is? The implementation has it as the 24 - * bits following after the 3 blocktype bits, before the alignment - * padding. - * - * The LZX document states that aligned offset blocks have their aligned - * offset huffman tree AFTER the main and length trees. The implementation - * suggests that the aligned offset tree is BEFORE the main and length - * trees. - * - * The LZX document decoding algorithm states that, in an aligned offset - * block, if an extra_bits value is 1, 2 or 3, then that number of bits - * should be read and the result added to the match offset. This is - * correct for 1 and 2, but not 3, where just a huffman symbol (using the - * aligned tree) should be read. - * - * Regarding the E8 preprocessing, the LZX document states 'No translation - * may be performed on the last 6 bytes of the input block'. This is - * correct. However, the pseudocode provided checks for the *E8 leader* - * up to the last 6 bytes. If the leader appears between -10 and -7 bytes - * from the end, this would cause the next four bytes to be modified, at - * least one of which would be in the last 6 bytes, which is not allowed - * according to the spec. - * - * The specification states that the huffman trees must always contain at - * least one element. However, many CAB files contain blocks where the - * length tree is completely empty (because there are no matches), and - * this is expected to succeed. - */ - - /* LZX uses what it calls 'position slots' to represent match offsets. - * What this means is that a small 'position slot' number and a small - * offset from that slot are encoded instead of one large offset for - * every match. - * - position_base is an index to the position slot bases - * - extra_bits states how many bits of offset-from-base data is needed. - */ - private byte [] extra_bits = { - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, - 15, 15, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17 - }; - - private ulong [] position_base = { - 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, - 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576, 32768, 49152, - 65536, 98304, 131072, 196608, 262144, 393216, 524288, 655360, 786432, 917504, 1048576, 1179648, 1310720, 1441792, 1572864, 1703936, - 1835008, 1966080, 2097152 - }; - - private UInt32 ReadUInt16() - { - UInt32 rc=0; - UInt32 Byte1=0; - UInt32 Byte2=0; - try - { - Byte1=BitSource.ReadByte(); - Byte2=BitSource.ReadByte(); - } - catch(Exception) - { - } - rc=(Byte2<<8)+Byte1; - return rc; - } - - public bool LZXinit(int WindowSize) - { - ulong wndsize = (ulong)(1 << WindowSize); - int i, posn_slots; - - /* LZX supports window sizes of 2^15 (32Kb) through 2^21 (2Mb) */ - /* if a previously allocated window is big enough, keep it */ - if (WindowSize< 15 || WindowSize> 21) return false; - - /* allocate state and associated window */ - window = new byte[wndsize]; - if (window==null) - { - return false; - } - - actual_size = wndsize; - window_size = wndsize; - - /* calculate required position slots */ - if (WindowSize == 20) posn_slots = 42; - else if (WindowSize== 21) posn_slots = 50; - else posn_slots = WindowSize << 1; - - /** alternatively **/ - /* posn_slots=i=0; while (i < wndsize) i += 1 << extra_bits[posn_slots++]; */ - - /* initialize other state */ - R0 = R1 = R2 = 1; - main_elements = (uint)(LZX_NUM_CHARS + (posn_slots << 3)); - header_read = 0; - frames_read = 0; - block_remaining = 0; - block_type = LZX_BLOCKTYPE_INVALID; - intel_curpos = 0; - intel_started = 0; - window_posn = 0; - - /* initialise tables to 0 (because deltas will be applied to them) */ - for (i = 0; i < LZX_MAINTREE_MAXSYMBOLS; i++) MAINTREE_len[i] = 0; - for (i = 0; i < LZX_LENGTH_MAXSYMBOLS; i++) LENGTH_len[i] = 0; - - return true; - } - - public void LZXteardown() - { - window=null; - } - - public int LZXreset() - { - R0 = R1 = R2 = 1; - header_read = 0; - frames_read = 0; - block_remaining = 0; - block_type = LZX_BLOCKTYPE_INVALID; - intel_curpos = 0; - intel_started = 0; - window_posn = 0; - - for (int i = 0; i < LZX_MAINTREE_MAXSYMBOLS + LZX_LENTABLE_SAFETY; i++) MAINTREE_len[i] = 0; - for (int i = 0; i < LZX_LENGTH_MAXSYMBOLS + LZX_LENTABLE_SAFETY; i++) LENGTH_len[i] = 0; - - return DECR_OK; - } - - - /* Bitstream reading macros: - * - * INIT_BITSTREAM should be used first to set up the system - * READ_BITS(var,n) takes N bits from the buffer and puts them in var - * - * ENSURE_BITS(n) ensures there are at least N bits in the bit buffer - * PEEK_BITS(n) extracts (without removing) N bits from the bit buffer - * REMOVE_BITS(n) removes N bits from the bit buffer - * - * These bit access routines work by using the area beyond the MSB and the - * LSB as a free source of zeroes. This avoids having to mask any bits. - * So we have to know the bit width of the bitbuffer variable. This is - * sizeof(ulong) * 8, also defined as ULONG_BITS - */ - - /* number of bits in ulong. Note: This must be at multiple of 16, and at - * least 32 for the bitbuffer code to work (ie, it must be able to ensure - * up to 17 bits - that's adding 16 bits when there's one bit left, or - * adding 32 bits when there are no bits left. The code should work fine - * for machines where ulong >= 32 bits. - */ - private int ULONG_BITS() - { - int rc=(System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.UInt32))<<3); - return rc; - } - - /* make_decode_table(nsyms, nbits, length[], table[]) - * - * This function was coded by David Tritscher. It builds a fast huffman - * decoding table out of just a canonical huffman code lengths table. - * - * nsyms = total number of symbols in this huffman tree. - * nbits = any symbols with a code length of nbits or less can be decoded - * in one lookup of the table. - * length = A table to get code lengths from [0 to syms-1] - * table = The table to fill up with decoded symbols and pointers. - * - * Returns 0 for OK or 1 for error - */ - - private int make_decode_table(ulong nsyms, byte nbits, ref byte [] length, ref UInt32[] table) - { - ulong sym; - ulong leaf; - byte bit_num = 1; - ulong fill; - ulong pos = 0; /* the current position in the decode table */ - ulong table_mask = (ulong)(1 << nbits); - ulong bit_mask = table_mask >> 1; /* don't do 0 length codes */ - ulong next_symbol = bit_mask; /* base of allocation for long codes */ - - /* fill entries for codes short enough for a direct mapping */ - while (bit_num <= nbits) - { - for (sym = 0; sym < nsyms; sym++) - { - if (length[sym] == bit_num) - { - leaf = pos; - - if((pos += bit_mask) > table_mask) return 1; /* table overrun */ - - /* fill all possible lookups of this symbol with the symbol itself */ - fill = bit_mask; - while (fill-- > 0) table[leaf++] = (uint)sym; - } - } - bit_mask >>= 1; - bit_num++; - } - - /* if there are any codes longer than nbits */ - if (pos != table_mask) - { - /* clear the remainder of the table */ - for (sym = pos; sym < table_mask; sym++) table[sym] = 0; - - /* give ourselves room for codes to grow by up to 16 more bits */ - pos <<= 16; - table_mask <<= 16; - bit_mask = 1 << 15; - - while (bit_num <= 16) - { - for (sym = 0; sym < nsyms; sym++) - { - if (length[sym] == bit_num) - { - leaf = pos >> 16; - for (fill = 0; fill < (ulong)(bit_num - nbits); fill++) - { - /* if this path hasn't been taken yet, 'allocate' two entries */ - if (table[leaf] == 0) - { - table[(next_symbol << 1)] = 0; - table[(next_symbol << 1) + 1] = 0; - table[leaf] = (uint)next_symbol++; - } - /* follow the path and select either left or right for next bit */ - leaf = table[leaf] << 1; - if (((pos >> (byte)(15-fill)) & 1)==1) - leaf++; - } - table[leaf] = (uint)sym; - - if ((pos += bit_mask) > table_mask) - return 1; /* table overflow */ - } - } - bit_mask >>= 1; - bit_num++; - } - } - - /* full table? */ - if (pos == table_mask) - return 0; - - /* either erroneous table, or all elements are 0 - let's find out. */ - for (sym = 0; sym < nsyms; sym++) if (length[(uint)sym]!=0) - return 1; - - return 0; - } - - private int lzx_read_lens(byte []lens, ulong first, ulong last, ref lzx_bits lb) - { - ulong i,j, x,y; - int z; - - UInt32 bitbuf = lb.bb; - int bitsleft = lb.bl; - - UInt32 [] hufftbl=null; - - for (x = 0; x < 20; x++) - { - do - { - while (bitsleft < (4)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - y = (bitbuf >> (ULONG_BITS()- (4))); - bitbuf <<= 4; - bitsleft -= 4; - } - while (false); - PRETREE_len[x] = (byte)y; - } - if (make_decode_table( 20, 6, ref PRETREE_len, ref PRETREE_table)!=0) - return 2; - - for (x = first; x < last; ) - { - do - { - while (bitsleft < 16) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - hufftbl = PRETREE_table; - if ((i = hufftbl[((ulong)bitbuf >> (ULONG_BITS()- 6))]) >= 20) - { - j = (ulong)(1 << (byte)(ULONG_BITS()- ((6)))); - do - { - j >>= 1; - i <<= 1; - if ((bitbuf & j)!=0) - i|=1; - else - i|=0; - - if (j==0) - { - return (2); - } - } - while ((i = hufftbl[i]) >= 20); - } - z = (int)i; - j = PRETREE_len[z]; - bitbuf <<= (byte)j; - bitsleft -= (int)j; - } - while (false); - - if (z == 17) - { - do - { - while (bitsleft < (4)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - y = (bitbuf >> (ULONG_BITS()- (4))); - bitbuf <<= 4; - bitsleft -= 4; - } - while(false); - y += 4; - - while ((y--)!=0) - lens[x++] = 0; - } - else if (z == 18) - { - do - { - while (bitsleft < (5)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - (y) = (bitbuf >> (ULONG_BITS()- (5))); - bitbuf <<= 5; - bitsleft -= 5; - } - while (false); - - y += 20; - - while ((y--)!=0) - lens[x++] = 0; - } - else if (z == 19) - { - do - { - while (bitsleft < (1)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - y = (bitbuf >> (ULONG_BITS()- (1))); - bitbuf <<= 1; - bitsleft -= 1; - } - while(false); - y += 4; - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - hufftbl = (PRETREE_table); - if ((i = hufftbl[(bitbuf >> (ULONG_BITS()- 6))]) >= 20) - { - j = (ulong)1 << (byte)(ULONG_BITS()- 6); - do - { - j >>= 1; - i <<= 1; - if ((bitbuf & j)==0) - i|=0; - else - i|=1; - if (j==0) - { - return (2); - } - } - while ((i = hufftbl[i]) >= 20); - } - z = (int)i; - j = PRETREE_len[z]; - - bitbuf <<= (byte)j; - bitsleft -= (int)j; - } - while(false); - z = lens[x] - z; - if (z < 0) - z += 17; - - while ((y--)!=0) - lens[x++] = (byte)z; - } - else - { - z = lens[x] - z; - if (z < 0) - z += 17; - lens[x++] = (byte)z; - } - } - lb.bb = bitbuf; - lb.bl = bitsleft; - return 0; - } - - public int LZXdecompress(System.IO.BinaryReader inpos, System.IO.Stream outpos, ref ulong inlen, ref ulong outlen) - { - BitSource=inpos; - OutputStream=outpos; - - long endinp = BitSource.BaseStream.Position+(long)inlen; - ulong runsrc, rundest; - UInt32 [] hufftbl; /* used in READ_HUFFSYM macro as chosen decoding table */ - - UInt32 bitbuf; - int bitsleft; - ulong match_offset, i,j,k; /* ijk used in READ_HUFFSYM macro */ - lzx_bits lb; /* used in READ_LENGTHS macro */ - lb=new lzx_bits(); - - int togo = (int)outlen, this_run, main_element, aligned_bits; - int match_length, length_footer, extra, verbatim_bits; - - bitsleft = 0; - bitbuf = 0; - - /* read header if necessary */ - if (header_read==0) - { - i = j = 0; - do - { - while (bitsleft < (1)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - k = (bitbuf >> (ULONG_BITS()- (1))); - bitbuf <<= 1; - bitsleft -= 1; - } - while(false); - - if (k!=0) - { - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() -16 - bitsleft); - bitsleft += 16; - } - i = (bitbuf >> (ULONG_BITS()- (16))); - bitbuf <<= 16; - bitsleft -= 1; - } - while(false); - - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - j = (bitbuf >> (ULONG_BITS()- (16))); - bitbuf <<= 16; - bitsleft -= 16; - } - while(false); - } - intel_filesize = (long)((i << 16) | j); - header_read = 1; - } - - /* main decoding loop */ - while (togo > 0) - { - if (block_remaining == 0) - { - if (block_type == (3)) - { - if ((block_length & 1)!=0) - BitSource.ReadByte(); - bitsleft = 0; - bitbuf = 0; - } - - do - { - while (bitsleft < (3)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - (block_type) = (uint)(bitbuf >> (ULONG_BITS()- (3))); - bitbuf <<= 3; - bitsleft -= 3; - } - while (false); - - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - (i) = (bitbuf >> (ULONG_BITS()- (16))); - bitbuf <<= 16; - bitsleft -= 16; - } - while (false); - - do - { - while (bitsleft < (8)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - (j) = (bitbuf >> (ULONG_BITS()- (8))); - bitbuf <<= 8; - bitsleft -= 8; - } - while (false); - block_remaining = block_length = (i << 8) | j; - - switch (block_type) - { - case (LZX_BLOCKTYPE_ALIGNED): - for (i = 0; i < 8; i++) - { - do - { - while (bitsleft < (3)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - (j) = (bitbuf >> (ULONG_BITS()- (3))); - bitbuf <<= 3; - bitsleft -= 3; - } - while (false); - (ALIGNED_len)[i] = (byte)j; - } - if (make_decode_table( 8, 7, ref ALIGNED_len, ref ALIGNED_table)!=0) - { - return (2); - } - - do - { - lb.bb = bitbuf; - lb.bl = bitsleft; - if (lzx_read_lens(MAINTREE_len,0,256,ref lb)!=0) - { - return (2); - } - bitbuf = lb.bb; - bitsleft = lb.bl; - } - while (false); - do - { - lb.bb = bitbuf; - lb.bl = bitsleft; - if (lzx_read_lens(MAINTREE_len,256,main_elements,ref lb)!=0) - { - return (2); - } - bitbuf = lb.bb; - bitsleft = lb.bl; - } - while (false); - - if (make_decode_table( (256 + 50*8), 12, ref MAINTREE_len, ref MAINTREE_table)!=0) - { - return (2); - } - if (MAINTREE_len[0xE8] != 0) intel_started = 1; - - do - { - lb.bb = bitbuf; - lb.bl = bitsleft; - if (lzx_read_lens(LENGTH_len,0,249,ref lb)!=0) - { - return (2); - } - bitbuf = lb.bb; - bitsleft = lb.bl; - } - while (false); - if (make_decode_table( (249+1), 12, ref LENGTH_len, ref LENGTH_table)!=0) - { - return (2); - } - break; - - case (LZX_BLOCKTYPE_VERBATIM): - do - { - lb.bb = bitbuf; - lb.bl = bitsleft; - if (lzx_read_lens(MAINTREE_len,0,256,ref lb)!=0) - { - return (2); - } - bitbuf = lb.bb; - bitsleft = lb.bl; - } - while (false); - do - { - lb.bb = bitbuf; - lb.bl = bitsleft; - if (lzx_read_lens(MAINTREE_len,256,main_elements,ref lb)!=0) - { - return (2); - } - bitbuf = lb.bb; - bitsleft = lb.bl; - } - while (false); - - if (make_decode_table( (256 + 50*8), 12, ref MAINTREE_len, ref MAINTREE_table)!=0) - { - return (2); - } - if (MAINTREE_len[0xE8] != 0) intel_started = 1; - - do - { - lb.bb = bitbuf; - lb.bl = bitsleft; - if (lzx_read_lens(LENGTH_len,0,249,ref lb)!=0) - { - return (2); - } - bitbuf = lb.bb; - bitsleft = lb.bl; - } - while (false); - if (make_decode_table( (249+1), 12, ref LENGTH_len, ref LENGTH_table)!=0) - { - return (2); - } - break; - - case (LZX_BLOCKTYPE_UNCOMPRESSED): - intel_started = 1; - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - bitsleft); - bitsleft += 16; - } - if (bitsleft > 16) - { - BitSource.BaseStream.Seek(-2,System.IO.SeekOrigin.Current); - } - R0 = (ulong)(BitSource.ReadByte()+(BitSource.ReadByte()<<8)+(BitSource.ReadByte()<<16)+(BitSource.ReadByte()<<24)); - R1 = (ulong)(BitSource.ReadByte()+(BitSource.ReadByte()<<8)+(BitSource.ReadByte()<<16)+(BitSource.ReadByte()<<24)); - R2 = (ulong)(BitSource.ReadByte()+(BitSource.ReadByte()<<8)+(BitSource.ReadByte()<<16)+(BitSource.ReadByte()<<24)); - break; - - default: - return (DECR_ILLEGALDATA); - } - } - - /* buffer exhaustion check */ - if (BitSource.BaseStream.Position > (long) endinp) - { - /* it's possible to have a file where the next run is less than - * 16 bits in size. In this case, the READ_HUFFSYM() macro used - * in building the tables will exhaust the buffer, so we should - * allow for this, but not allow those accidentally read bits to - * be used (so we check that there are at least 16 bits - * remaining - in this boundary case they aren't really part of - * the compressed data) - */ - if (BitSource.BaseStream.Position> (long)(endinp+2) || bitsleft < 16) - return DECR_ILLEGALDATA; - } - - while ((this_run = (int)block_remaining) > 0 && togo > 0) - { - if (this_run > togo) - this_run = togo; - - togo -= this_run; - block_remaining -= (ulong)this_run; - - /* apply 2^x-1 mask */ - window_posn &= window_size - 1; - - /* runs can't straddle the window wraparound */ - if ((window_posn + (ulong)this_run) > window_size) - return DECR_DATAFORMAT; - - switch (block_type) - { - case LZX_BLOCKTYPE_VERBATIM: - while (this_run > 0) - { - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - hufftbl = MAINTREE_table; - if ((i = hufftbl[(bitbuf >> (ULONG_BITS()- 12))]) >= 256 + 50*8) - { - j = (ulong)(1 << (ULONG_BITS()- 12)); - do - { - j >>= 1; - i <<= 1; - if ((bitbuf & j)!=0) - i|=1; - else - i|=0; - if (j==0) - { - return (2); - } - } - while ((i = hufftbl[i]) >= (((256) + 50*8))); - } - j = MAINTREE_len[main_element = (int)i]; - bitbuf <<= (byte)j; - bitsleft -= (byte)j; - } - while (false); - - if (main_element < (256)) - { - window[window_posn++] = (byte)main_element; - this_run--; - } - else - { - main_element -= (256); - - match_length = main_element & (7); - if (match_length == (7)) - { - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - hufftbl = (LENGTH_table); - if ((i = hufftbl[(bitbuf >> (ULONG_BITS()- 12))]) >= (((249)+1))) - { - j = (ulong)(1 << (ULONG_BITS()- ((12)))); - do - { - j >>= 1; - i <<= 1; - if ((bitbuf & j)!=0) - i|=1; - else - i|=0; - if (j==0) - { - return (2); - } - } - while ((i = hufftbl[i]) >= (((249)+1))); - } - j = LENGTH_len[(length_footer) = (int)i]; - bitbuf <<= (byte)j; - bitsleft -= (byte)j; - } - while (false); - - match_length += length_footer; - } - match_length += (2); - - match_offset = (ulong)(main_element >> 3); - - if (match_offset > 2) - { - if (match_offset != 3) - { - extra = extra_bits[match_offset]; - do - { - while (bitsleft < (extra)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - verbatim_bits = (int)(bitbuf >> (ULONG_BITS()- (extra))); - bitbuf <<= extra; - bitsleft -= extra; - } - while (false); - match_offset = position_base[match_offset] - 2 + (ulong)verbatim_bits; - } - else - { - match_offset = 1; - } - - R2 = R1; R1 = R0; R0 = match_offset; - } - else if (match_offset == 0) - { - match_offset = R0; - } - else if (match_offset == 1) - { - match_offset = R1; - R1 = R0; R0 = match_offset; - } - else - { - match_offset = R2; - R2 = R0; R0 = match_offset; - } - - rundest = window_posn; - // rundest= window+window_posn - runsrc = rundest - match_offset; - window_posn += (ulong)match_length; - this_run -= match_length; - - // runsrc < window - while ((runsrc<0) && (match_length-- > 0)) - { - window[rundest++]=window[runsrc+window_size]; - // *rundest++ = *(runsrc + window_size); - runsrc++; - } - - while (match_length-- > 0) - { - window[rundest++]=window[runsrc++]; - // *rundest++ = *runsrc++; - } - } - } - break; - - case LZX_BLOCKTYPE_ALIGNED: - while (this_run > 0) - { - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - hufftbl = MAINTREE_table; - if ((i = hufftbl[(bitbuf >> (ULONG_BITS()- 12))]) >= (((256) + 50*8))) - { - j = (ulong)1 << (ULONG_BITS()- ((12))); - do - { - j >>= 1; - i <<= 1; - if ((bitbuf & j)!=0) - i|=1; - else - i|=0; - if (j==0) - { - return (2); - } - } - while ((i = hufftbl[i]) >= (((256) + 50*8))); - } - j = MAINTREE_len[(main_element) = (int)i]; - bitbuf <<= (int)j; - bitsleft -= (int)j; - } - while (false); - - if (main_element < (256)) - { - window[window_posn++] = (byte)main_element; - this_run--; - } - else - { - main_element -= (256); - match_length = main_element & (7); - if (match_length == (7)) - { - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - hufftbl = LENGTH_table; - if ((i = hufftbl[(bitbuf >> (ULONG_BITS()- 12))]) >= (((249)+1))) - { - j = (ulong) 1 << (ULONG_BITS()- ((12))); - do - { - j >>= 1; - i <<= 1; - if ((bitbuf & j)!=0) - i|=1; - else - i|=0; - - if (j==0) - { - return (2); - } - } - while ((i = hufftbl[i]) >= (((249)+1))); - } - j = LENGTH_len[length_footer = (int)i]; - bitbuf <<= (int)j; - bitsleft -= (int)j; - } - while (false); - match_length += length_footer; - } - match_length += (2); - - match_offset = (ulong)(main_element >> 3); - - if (match_offset > 2) - { - extra = extra_bits[match_offset]; - match_offset = position_base[match_offset] - 2; - if (extra > 3) - { - extra -= 3; - do - { - while (bitsleft < (extra)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - verbatim_bits = (int)(bitbuf >> (ULONG_BITS()- (extra))); - bitbuf <<= extra; - bitsleft -= extra; - } - while (false); - match_offset += (ulong)(verbatim_bits << 3); - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - hufftbl = (ALIGNED_table); - if ((i = hufftbl[(bitbuf >> (ULONG_BITS()- 7))]) >= 8) - { - j = (ulong)1 << (ULONG_BITS()- ((7))); - do - { - j >>= 1; - i <<= 1; - if ((bitbuf & j)!=0) - i|=1; - else - i|=0; - if (j==0) - { - return (2); - } - } - while ((i = hufftbl[i]) >= (((8)))); - } - - j = (ALIGNED_len)[(aligned_bits) = (int)i]; - bitbuf <<= (int)j; - bitsleft -= (int)j; - } - while (false); - match_offset += (ulong)aligned_bits; - } - else if (extra == 3) - { - do - { - while (bitsleft < (16)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - hufftbl = (ALIGNED_table); - if ((i = hufftbl[(bitbuf >> (ULONG_BITS()- 7))]) >= 8) - { - j = (ulong)1 << (ULONG_BITS()- ((7))); - do - { - j >>= 1; - i <<= 1; - if ((bitbuf & j)!=0) - i|=1; - else - i|=0; - if (j!=0) - { - return (2); - } - } - while ((i = hufftbl[i]) >= 8); - } - j = (ALIGNED_len)[(aligned_bits) = (int)i]; - bitbuf <<= (int)j; - bitsleft -= (int)j; - } - while (false); - match_offset += (ulong)aligned_bits; - } - else if (extra > 0) - { - do - { - while (bitsleft < (extra)) - { - bitbuf |= (UInt32)ReadUInt16() << (ULONG_BITS() - 16 - bitsleft); - bitsleft += 16; - } - (verbatim_bits) = (int)(bitbuf >> (int)(ULONG_BITS()- (extra))); - bitbuf <<= extra; - bitsleft -= extra; - } - while (false); - match_offset += (ulong)verbatim_bits; - } - else - { - match_offset = 1; - } - - R2 = R1; R1 = R0; R0 = match_offset; - } - else if (match_offset == 0) - { - match_offset = R0; - } - else if (match_offset == 1) - { - match_offset = R1; - R1 = R0; R0 = match_offset; - } - else - { - match_offset = R2; - R2 = R0; R0 = match_offset; - } - - rundest = window_posn; - runsrc = rundest - match_offset; - window_posn += (ulong)match_length; - this_run -= match_length; - - while ((runsrc<0) && (match_length-- > 0)) - { - // *rundest++ = *(runsrc + window_size); runsrc++; - window[rundest++]=window[runsrc + window_size]; - runsrc++; - } - - while (match_length-- > 0) - { - // *rundest++ = *runsrc++; - window[rundest++]=window[runsrc++]; - } - } - } - break; - - case LZX_BLOCKTYPE_UNCOMPRESSED: - if ((BitSource.BaseStream.Position + (long)this_run) > (long)endinp) - return (2); - - // memcpy(window + window_posn, inposCount, this_run); - for(i=0; i<(ulong)this_run;i++) - { - window[window_posn+i]=BitSource.ReadByte(); - } - window_posn += (ulong)this_run; - break; - - default: - return DECR_ILLEGALDATA; /* might as well */ - } - - } - } - - if (togo != 0) return DECR_ILLEGALDATA; - - // memcpy(outpos, window + ((!window_posn) ? window_size : window_posn) - outlen, (size_t) outlen); - ulong start=0; - if (window_posn==0) - start=(ulong)window_size; - else - start=(ulong)window_posn; - - start-=(ulong)outlen; - - long Pos=OutputStream.Position; - for(i=0;i<(ulong)outlen;i++) - { - OutputStream.WriteByte(window[start+i]); - } - OutputStream.Seek(Pos,System.IO.SeekOrigin.Begin); - - /* intel E8 decoding */ - if ((frames_read++ < 32768) && intel_filesize != 0) - { - if (outlen <= 6 || (intel_started==0)) - { - intel_curpos += (long)outlen; - } - else - { - // UBYTE *data = outpos; - long dataend = OutputStream.Position + (int)outlen - 10; - long curpos = intel_curpos; - long filesize = intel_filesize; - long abs_off, rel_off; - - intel_curpos = (long)curpos + (long)outlen; - - while (OutputStream.Position < dataend) - { - if (OutputStream.ReadByte() != 0xE8) - { - curpos++; - continue; - } - - abs_off = (long)(OutputStream.ReadByte() | (OutputStream.ReadByte() <<8) | (OutputStream.ReadByte() <<16) | (OutputStream.ReadByte() <<24)); - if (abs_off < filesize) - { - if (abs_off >= 0) - rel_off = (long)(abs_off - curpos); - else - rel_off = (long)abs_off + filesize; - OutputStream.WriteByte((byte)(rel_off & 0x000000ff)); - OutputStream.WriteByte((byte)((rel_off & 0x0000ff00)>>8)); - OutputStream.WriteByte((byte)((rel_off & 0x00ff0000)>>16)); - OutputStream.WriteByte((byte)((rel_off & 0xff000000)>>24)); - } - curpos += 5; - } - } - } - - return DECR_OK; - } - } - #endregion -} diff --git a/irc/TechBot/CHMLibrary/TOCItem.cs b/irc/TechBot/CHMLibrary/TOCItem.cs deleted file mode 100644 index 8f6b7f97909..00000000000 --- a/irc/TechBot/CHMLibrary/TOCItem.cs +++ /dev/null @@ -1,494 +0,0 @@ -using System; -using System.IO; -using System.Collections; -using System.Windows.Forms; - -using HtmlHelp.ChmDecoding; - -namespace HtmlHelp -{ - /// - /// The class TOCItem implements a toc-entry item - /// - public sealed class TOCItem - { - /// - /// Constant for standard folder (closed) image index (HH2 image list) - /// - public const int STD_FOLDER_HH2 = 4; - /// - /// Constant for standard folder (opened) image index (HH2 image list) - /// - public const int STD_FOLDER_OPEN_HH2 = 6; - /// - /// Constant for standard file image index (HH2 image list) - /// - public const int STD_FILE_HH2 = 16; - - /// - /// Constant for standard folder (closed) image index (HH1 image list) - /// - public const int STD_FOLDER_HH1 = 0; - /// - /// Constant for standard folder (opened) image index (HH1 image list) - /// - public const int STD_FOLDER_OPEN_HH1 = 1; - /// - /// Constant for standard file image index (HH1 image list) - /// - public const int STD_FILE_HH1 = 10; - - /// - /// Internal flag specifying the data extraction mode used for this item - /// - private DataMode _tocMode = DataMode.TextBased; - /// - /// Internal member storing the offset (only used in binary tocs) - /// - private int _offset = 0; - /// - /// Internal member storing the offset of the next item(only used in binary tocs) - /// - private int _offsetNext = 0; - /// - /// Internal member storing a merge link. - /// If the target file is in the merged files list of the CHM, - /// this item will be replaced with the target TOC or Topic, if not it will - /// be removed from TOC. - /// - private string _mergeLink = ""; - /// - /// Internal member storing the toc name - /// - private string _name = ""; - /// - /// Internal member storing the toc loca (content file) - /// - private string _local = ""; - /// - /// Internal member storing all associated information type strings - /// - private ArrayList _infoTypeStrings = new ArrayList(); - /// - /// Internal member storing the associated chm file - /// - private string _chmFile = ""; - /// - /// Internal member storing the image index - /// - private int _imageIndex = -1; - /// - /// Internal member storing the offset of the associated topic entry (for binary tocs) - /// - private int _topicOffset = -1; - /// - /// Internal member storing the toc children - /// - private ArrayList _children = new ArrayList(); - /// - /// Internal member storing the parameter collection - /// - private Hashtable _otherParams = new Hashtable(); - /// - /// Internal member storing the associated chmfile object - /// - private CHMFile _associatedFile = null; - /// - /// Parent item - /// - private TOCItem _parent=null; - - /// - /// Holds a pointer to the next item in the TOC - /// - public TOCItem Next=null; - - /// - /// Holds a pointer to the previous item in the TOC - /// - public TOCItem Prev=null; - - /// - /// Holds a pointer to the TreeNode where this TOC Item is used - /// - public System.Windows.Forms.TreeNode treeNode=null; - - /// - /// Constructor of the class used during text-based data extraction - /// - /// name of the item - /// local content file - /// image index - /// associated chm file - public TOCItem(string name, string local, int ImageIndex, string chmFile) - { - _tocMode = DataMode.TextBased; - _name = name; - _local = local; - _imageIndex = ImageIndex; - _chmFile = chmFile; - } - - /// - /// Constructor of the class used during binary data extraction - /// - /// offset of the associated topic entry - /// image index to use - /// associated chm file - public TOCItem(int topicOffset, int ImageIndex, CHMFile associatedFile) - { - _tocMode = DataMode.Binary; - _associatedFile = associatedFile; - _chmFile = associatedFile.ChmFilePath; - _topicOffset = topicOffset; - _imageIndex = ImageIndex; - } - - /// - /// Standard constructor - /// - public TOCItem() - { - } - - #region Data dumping - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - /// true if the chmfile name should be written - internal void Dump(ref BinaryWriter writer, bool writeFilename) - { - writer.Write((int)_tocMode); - writer.Write(_topicOffset); - writer.Write(_name); - - if((_tocMode == DataMode.TextBased)||(_topicOffset<0)) - { - writer.Write(_local); - } - - writer.Write(_imageIndex); - - writer.Write(_mergeLink); - - if(writeFilename) - writer.Write(_chmFile); - - writer.Write(_infoTypeStrings.Count); - - for(int i=0; i<_infoTypeStrings.Count; i++) - writer.Write( (_infoTypeStrings[i]).ToString() ); - - writer.Write(_children.Count); - - for(int i=0; i<_children.Count; i++) - { - TOCItem child = ((TOCItem)(_children[i])); - child.Dump(ref writer, writeFilename); - } - } - - /// - /// Dump the class data to a binary writer - /// - /// writer to write the data - internal void Dump(ref BinaryWriter writer) - { - Dump(ref writer, false); - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - /// true if the chmfile name should be read - internal void ReadDump(ref BinaryReader reader, bool readFilename) - { - int i=0; - _tocMode = (DataMode)reader.ReadInt32(); - _topicOffset = reader.ReadInt32(); - _name = reader.ReadString(); - - if((_tocMode == DataMode.TextBased)||(_topicOffset<0)) - { - _local = reader.ReadString(); - } - - _imageIndex = reader.ReadInt32(); - - _mergeLink = reader.ReadString(); - - if(readFilename) - _chmFile = reader.ReadString(); - - int nCnt = reader.ReadInt32(); - - for(i=0; i 0) - _associatedFile.MergLinks.Add(child); - } - } - - /// - /// Reads the object data from a dump store - /// - /// reader to read the data - internal void ReadDump(ref BinaryReader reader) - { - ReadDump(ref reader, false); - } - #endregion - - /// - /// Gets/Sets the data extraction mode with which this item was created. - /// - internal DataMode TocMode - { - get { return _tocMode; } - set { _tocMode = value; } - } - - /// - /// Gets/Sets the offset of the associated topic entry - /// - internal int TopicOffset - { - get { return _topicOffset; } - set { _topicOffset = value; } - } - - /// - /// Gets/Sets the associated CHMFile instance - /// - internal CHMFile AssociatedFile - { - get { return _associatedFile; } - set - { - _associatedFile = value; - } - } - - /// - /// Gets/Sets the offset of the item. - /// - /// Only used in binary tocs - internal int Offset - { - get { return _offset; } - set { _offset = value; } - } - - /// - /// Gets/Sets the offset of the next item. - /// - /// Only used in binary tocs - internal int OffsetNext - { - get { return _offsetNext; } - set { _offsetNext = value; } - } - - /// - /// Gets the ArrayList which holds all information types/categories this item is associated - /// - internal ArrayList InfoTypeStrings - { - get { return _infoTypeStrings; } - } - - /// - /// Gets/Sets the parent of this item - /// - public TOCItem Parent - { - get { return _parent; } - set { _parent = value; } - } - - /// - /// Gets/Sets the mergelink for this item. - /// You should not set the mergedlink by your own ! - /// This is only for loading merged CHMs. - /// - public string MergeLink - { - get { return _mergeLink; } - set { _mergeLink = value; } - } - - /// - /// Gets/Sets the name of the item - /// - public string Name - { - get - { - if(_mergeLink.Length > 0) - return ""; - - if(_name.Length <= 0) - { - if((_tocMode == DataMode.Binary )&&(_associatedFile!=null)) - { - if( _topicOffset >= 0) - { - TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]); - if(te != null) - { - return te.Title; - } - } - } - } - - return _name; - } - set - { - _name = value; - } - } - - /// - /// Gets/Sets the local of the item - /// - public string Local - { - get - { - if(_mergeLink.Length > 0) - return ""; - - if(_local.Length <= 0) - { - if((_tocMode == DataMode.Binary )&&(_associatedFile!=null)) - { - if( _topicOffset >= 0) - { - TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]); - if(te != null) - { - return te.Locale; - } - } - } - } - - return _local; - } - set { _local = value; } - } - - /// - /// Gets/Sets the chm file - /// - public string ChmFile - { - get - { - if(_associatedFile!=null) - return _associatedFile.ChmFilePath; - - return _chmFile; - } - set { _chmFile = value; } - } - - /// - /// Gets the url for the webbrowser for this file - /// - public string Url - { - get - { - string sL = Local; - - if( (sL.ToLower().IndexOf("http://") >= 0) || - (sL.ToLower().IndexOf("https://") >= 0) || - (sL.ToLower().IndexOf("mailto:") >= 0) || - (sL.ToLower().IndexOf("ftp://") >= 0) || - (sL.ToLower().IndexOf("ms-its:") >= 0)) - return sL; - - return HtmlHelpSystem.UrlPrefix + ChmFile + "::/" + sL; - } - } - - /// - /// Gets/Sets the image index of the item - /// - /// Set this to -1 for a default icon - public int ImageIndex - { - get - { - if( _imageIndex == -1) - { - int nFolderAdd = 0; - - if((_associatedFile != null) && (_associatedFile.ImageTypeFolder)) - { - // get the value which should be added, to display folders instead of books - if(HtmlHelpSystem.UseHH2TreePics) - nFolderAdd = 8; - else - nFolderAdd = 4; - } - - - if( _children.Count > 0) - return (HtmlHelpSystem.UseHH2TreePics ? (STD_FOLDER_HH2+nFolderAdd) : (STD_FOLDER_HH1+nFolderAdd)); - - return (HtmlHelpSystem.UseHH2TreePics ? STD_FILE_HH2 : STD_FILE_HH1); - } - return _imageIndex; - } - set { _imageIndex = value; } - } - - /// - /// Gets/Sets the children of this item. - /// - /// Each entry in the ArrayList is of type TOCItem - public ArrayList Children - { - get { return _children; } - set { _children = value; } - } - - /// - /// Gets the internal hashtable storing all params - /// - public Hashtable Params - { - get { return _otherParams; } - } - } -} diff --git a/irc/TechBot/CHMLibrary/TableOfContents.cs b/irc/TechBot/CHMLibrary/TableOfContents.cs deleted file mode 100644 index 68dfb050a6a..00000000000 --- a/irc/TechBot/CHMLibrary/TableOfContents.cs +++ /dev/null @@ -1,198 +0,0 @@ -using System; -using System.Diagnostics; -using System.Collections; -using HtmlHelp.ChmDecoding; - -namespace HtmlHelp -{ - /// - /// The class TableOfContents holds the TOC of the htmlhelp system class. - /// - public class TableOfContents - { - private ArrayList _toc = new ArrayList(); - - /// - /// Standard constructor - /// - public TableOfContents() - { - } - - /// - /// Constructor of the class - /// - /// - public TableOfContents(ArrayList toc) - { - _toc = toc; - } - - /// - /// Gets the internal stored table of contents - /// - public ArrayList TOC - { - get { return _toc; } - } - - /// - /// Clears the current toc - /// - public void Clear() - { - if(_toc!=null) - _toc.Clear(); - } - - /// - /// Gets the number of topics in the toc - /// - /// Returns the number of topics in the toc - public int Count() - { - if(_toc!=null) - return _toc.Count; - else - return 0; - } - - /// - /// Merges the arrToC list to the one in this instance - /// - /// the toc list which should be merged with the current one - internal void MergeToC( ArrayList arrToC ) - { - if(_toc==null) - _toc = new ArrayList(); - - MergeToC(_toc, arrToC, null); - } - - /// - /// Merges the arrToC list to the one in this instance (called if merged files - /// were found in a CHM) - /// - /// the toc list which should be merged with the current one - /// An arraylist of CHMFile instances. - internal void MergeToC( ArrayList arrToC, ArrayList openFiles ) - { - if(_toc==null) - _toc = new ArrayList(); - MergeToC(_toc, arrToC, openFiles); - } - - /// - /// Internal method for recursive toc merging - /// - /// level of global toc - /// level of local toc - /// An arraylist of CHMFile instances. - private void MergeToC( ArrayList globalLevel, ArrayList localLevel, ArrayList openFiles ) - { - foreach( TOCItem curItem in localLevel) - { - // if it is a part of the merged-links, we have to do nothing, - // because the method HtmlHelpSystem.RecalculateMergeLinks() has already - // placed this item at its correct position. - if(!IsMergedItem(curItem.Name, curItem.Local, openFiles)) - { - TOCItem globalItem = ContainsToC(globalLevel, curItem.Name); - if(globalItem == null) - { - // the global toc doesn't have a topic with this name - // so we need to add the complete toc node to the global toc - - globalLevel.Add( curItem ); - } - else - { - // the global toc contains the current topic - // advance to the next level - - if( (globalItem.Local.Length <= 0) && (curItem.Local.Length > 0) ) - { - // set the associated url - globalItem.Local = curItem.Local; - globalItem.ChmFile = curItem.ChmFile; - } - - MergeToC(globalItem.Children, curItem.Children); - } - } - } - } - - /// - /// Checks if the item is part of the merged-links - /// - /// name of the topic - /// local of the topic - /// An arraylist of CHMFile instances. - /// Returns true if this item is part of the merged-links - private bool IsMergedItem(string name, string local, ArrayList openFiles) - { - if(openFiles==null) - return false; - - foreach(CHMFile curFile in openFiles) - { - foreach(TOCItem curItem in curFile.MergLinks) - if( (curItem.Name == name) && (curItem.Local == local) ) - return true; - } - return false; - } - - /// - /// Checks if a topicname exists in a SINGLE toc level - /// - /// toc list - /// topic to search - /// Returns the topic item if found, otherwise null - private TOCItem ContainsToC(ArrayList arrToC, string Topic) - { - foreach(TOCItem curItem in arrToC) - { - if(curItem.Name == Topic) - return curItem; - } - - return null; - } - - /// - /// Searches the table of contents for a special topic - /// - /// topic to search - /// Returns an instance of TOCItem if found, otherwise null - public TOCItem SearchTopic(string topic) - { - return SearchTopic(topic, _toc); - } - - /// - /// Internal recursive tree search - /// - /// topic to search - /// tree level list to look in - /// Returns an instance of TOCItem if found, otherwise null - private TOCItem SearchTopic(string topic, ArrayList searchIn) - { - foreach(TOCItem curItem in searchIn) - { - if(curItem.Name.ToLower() == topic.ToLower() ) - return curItem; - - if(curItem.Children.Count>0) - { - TOCItem nf = SearchTopic(topic, curItem.Children); - if(nf != null) - return nf; - } - } - - return null; - } - } -} diff --git a/irc/TechBot/Compression/AssemblyInfo.cs b/irc/TechBot/Compression/AssemblyInfo.cs deleted file mode 100644 index dbacda112e8..00000000000 --- a/irc/TechBot/Compression/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("1.0.*")] - -// The following attributes specify the key for the sign of your assembly. See the -// .NET Framework documentation for more information about signing. -// This is not required, if you don't want signing let these attributes like they're. -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] diff --git a/irc/TechBot/Compression/Checksums/Adler32.cs b/irc/TechBot/Compression/Checksums/Adler32.cs deleted file mode 100644 index 220dcbafa0c..00000000000 --- a/irc/TechBot/Compression/Checksums/Adler32.cs +++ /dev/null @@ -1,200 +0,0 @@ -// Adler32.cs - Computes Adler32 data checksum of a data stream -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Checksums -{ - - /// - /// Computes Adler32 checksum for a stream of data. An Adler32 - /// checksum is not as reliable as a CRC32 checksum, but a lot faster to - /// compute. - /// - /// The specification for Adler32 may be found in RFC 1950. - /// ZLIB Compressed Data Format Specification version 3.3) - /// - /// - /// From that document: - /// - /// "ADLER32 (Adler-32 checksum) - /// This contains a checksum value of the uncompressed data - /// (excluding any dictionary data) computed according to Adler-32 - /// algorithm. This algorithm is a 32-bit extension and improvement - /// of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 - /// standard. - /// - /// Adler-32 is composed of two sums accumulated per byte: s1 is - /// the sum of all bytes, s2 is the sum of all s1 values. Both sums - /// are done modulo 65521. s1 is initialized to 1, s2 to zero. The - /// Adler-32 checksum is stored as s2*65536 + s1 in most- - /// significant-byte first (network) order." - /// - /// "8.2. The Adler-32 algorithm - /// - /// The Adler-32 algorithm is much faster than the CRC32 algorithm yet - /// still provides an extremely low probability of undetected errors. - /// - /// The modulo on unsigned long accumulators can be delayed for 5552 - /// bytes, so the modulo operation time is negligible. If the bytes - /// are a, b, c, the second sum is 3a + 2b + c + 3, and so is position - /// and order sensitive, unlike the first sum, which is just a - /// checksum. That 65521 is prime is important to avoid a possible - /// large class of two-byte errors that leave the check unchanged. - /// (The Fletcher checksum uses 255, which is not prime and which also - /// makes the Fletcher check insensitive to single byte changes 0 - - /// 255.) - /// - /// The sum s1 is initialized to 1 instead of zero to make the length - /// of the sequence part of s2, so that the length does not have to be - /// checked separately. (Any sequence of zeroes has a Fletcher - /// checksum of zero.)" - /// - /// - /// - public sealed class Adler32 : IChecksum - { - /// - /// largest prime smaller than 65536 - /// - readonly static uint BASE = 65521; - - uint checksum; - - /// - /// Returns the Adler32 data checksum computed so far. - /// - public long Value { - get { - return checksum; - } - } - - /// - /// Creates a new instance of the Adler32 class. - /// The checksum starts off with a value of 1. - /// - public Adler32() - { - Reset(); - } - - /// - /// Resets the Adler32 checksum to the initial value. - /// - public void Reset() - { - checksum = 1; //Initialize to 1 - } - - /// - /// Updates the checksum with the byte b. - /// - /// - /// the data value to add. The high byte of the int is ignored. - /// - public void Update(int bval) - { - //We could make a length 1 byte array and call update again, but I - //would rather not have that overhead - uint s1 = checksum & 0xFFFF; - uint s2 = checksum >> 16; - - s1 = (s1 + ((uint)bval & 0xFF)) % BASE; - s2 = (s1 + s2) % BASE; - - checksum = (s2 << 16) + s1; - } - - /// - /// Updates the checksum with the bytes taken from the array. - /// - /// - /// buffer an array of bytes - /// - public void Update(byte[] buffer) - { - Update(buffer, 0, buffer.Length); - } - - /// - /// Updates the checksum with the bytes taken from the array. - /// - /// - /// an array of bytes - /// - /// - /// the start of the data used for this update - /// - /// - /// the number of bytes to use for this update - /// - public void Update(byte[] buf, int off, int len) - { - if (buf == null) { - throw new ArgumentNullException("buf"); - } - - if (off < 0 || len < 0 || off + len > buf.Length) { - throw new ArgumentOutOfRangeException(); - } - - //(By Per Bothner) - uint s1 = checksum & 0xFFFF; - uint s2 = checksum >> 16; - - while (len > 0) { - // We can defer the modulo operation: - // s1 maximally grows from 65521 to 65521 + 255 * 3800 - // s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31 - int n = 3800; - if (n > len) { - n = len; - } - len -= n; - while (--n >= 0) { - s1 = s1 + (uint)(buf[off++] & 0xFF); - s2 = s2 + s1; - } - s1 %= BASE; - s2 %= BASE; - } - - checksum = (s2 << 16) | s1; - } - } -} diff --git a/irc/TechBot/Compression/Checksums/CRC32.cs b/irc/TechBot/Compression/Checksums/CRC32.cs deleted file mode 100644 index a78ad4c29f6..00000000000 --- a/irc/TechBot/Compression/Checksums/CRC32.cs +++ /dev/null @@ -1,211 +0,0 @@ -// CRC32.cs - Computes CRC32 data checksum of a data stream -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Checksums -{ - - /// - /// Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: - /// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. - /// - /// Polynomials over GF(2) are represented in binary, one bit per coefficient, - /// with the lowest powers in the most significant bit. Then adding polynomials - /// is just exclusive-or, and multiplying a polynomial by x is a right shift by - /// one. If we call the above polynomial p, and represent a byte as the - /// polynomial q, also with the lowest power in the most significant bit (so the - /// byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, - /// where a mod b means the remainder after dividing a by b. - /// - /// This calculation is done using the shift-register method of multiplying and - /// taking the remainder. The register is initialized to zero, and for each - /// incoming bit, x^32 is added mod p to the register if the bit is a one (where - /// x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by - /// x (which is shifting right by one and adding x^32 mod p if the bit shifted - /// out is a one). We start with the highest power (least significant bit) of - /// q and repeat for all eight bits of q. - /// - /// The table is simply the CRC of all possible eight bit values. This is all - /// the information needed to generate CRC's on data a byte at a time for all - /// combinations of CRC register values and incoming bytes. - /// - public sealed class Crc32 : IChecksum - { - readonly static uint CrcSeed = 0xFFFFFFFF; - - readonly static uint[] CrcTable = new uint[] { - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, - 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, - 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, - 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, - 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, - 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, - 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, - 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, - 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, - 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, - 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, - 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, - 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, - 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, - 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, - 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, - 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, - 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, - 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, - 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, - 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, - 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, - 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, - 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, - 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, - 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, - 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, - 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, - 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, - 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, - 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, - 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, - 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, - 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, - 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, - 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, - 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, - 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, - 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, - 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, - 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, - 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, - 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, - 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, - 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, - 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, - 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, - 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, - 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, - 0x2D02EF8D - }; - - internal static uint ComputeCrc32(uint oldCrc, byte bval) - { - return (uint)(Crc32.CrcTable[(oldCrc ^ bval) & 0xFF] ^ (oldCrc >> 8)); - } - - /// - /// The crc data checksum so far. - /// - uint crc = 0; - - /// - /// Returns the CRC32 data checksum computed so far. - /// - public long Value { - get { - return (long)crc; - } - set { - crc = (uint)value; - } - } - - /// - /// Resets the CRC32 data checksum as if no update was ever called. - /// - public void Reset() - { - crc = 0; - } - - /// - /// Updates the checksum with the int bval. - /// - /// - /// the byte is taken as the lower 8 bits of bval - /// - public void Update(int bval) - { - crc ^= CrcSeed; - crc = CrcTable[(crc ^ bval) & 0xFF] ^ (crc >> 8); - crc ^= CrcSeed; - } - - /// - /// Updates the checksum with the bytes taken from the array. - /// - /// - /// buffer an array of bytes - /// - public void Update(byte[] buffer) - { - Update(buffer, 0, buffer.Length); - } - - /// - /// Adds the byte array to the data checksum. - /// - /// - /// the buffer which contains the data - /// - /// - /// the offset in the buffer where the data starts - /// - /// - /// the length of the data - /// - public void Update(byte[] buf, int off, int len) - { - if (buf == null) { - throw new ArgumentNullException("buf"); - } - - if (off < 0 || len < 0 || off + len > buf.Length) { - throw new ArgumentOutOfRangeException(); - } - - crc ^= CrcSeed; - - while (--len >= 0) { - crc = CrcTable[(crc ^ buf[off++]) & 0xFF] ^ (crc >> 8); - } - - crc ^= CrcSeed; - } - } -} diff --git a/irc/TechBot/Compression/Checksums/IChecksum.cs b/irc/TechBot/Compression/Checksums/IChecksum.cs deleted file mode 100644 index 98385b316ac..00000000000 --- a/irc/TechBot/Compression/Checksums/IChecksum.cs +++ /dev/null @@ -1,93 +0,0 @@ -// IChecksum.cs - Interface to compute a data checksum -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -namespace ICSharpCode.SharpZipLib.Checksums -{ - - /// - /// Interface to compute a data checksum used by checked input/output streams. - /// A data checksum can be updated by one byte or with a byte array. After each - /// update the value of the current checksum can be returned by calling - /// getValue. The complete checksum object can also be reset - /// so it can be used again with new data. - /// - public interface IChecksum - { - /// - /// Returns the data checksum computed so far. - /// - long Value - { - get; - } - - /// - /// Resets the data checksum as if no update was ever called. - /// - void Reset(); - - /// - /// Adds one byte to the data checksum. - /// - /// - /// the data value to add. The high byte of the int is ignored. - /// - void Update(int bval); - - /// - /// Updates the data checksum with the bytes taken from the array. - /// - /// - /// buffer an array of bytes - /// - void Update(byte[] buffer); - - /// - /// Adds the byte array to the data checksum. - /// - /// - /// the buffer which contains the data - /// - /// - /// the offset in the buffer where the data starts - /// - /// - /// the length of the data - /// - void Update(byte[] buf, int off, int len); - } -} diff --git a/irc/TechBot/Compression/Checksums/StrangeCRC.cs b/irc/TechBot/Compression/Checksums/StrangeCRC.cs deleted file mode 100644 index a2dc10fcf12..00000000000 --- a/irc/TechBot/Compression/Checksums/StrangeCRC.cs +++ /dev/null @@ -1,159 +0,0 @@ -// StrangeCRC.cs - computes a crc used in the bziplib ... I don't think that -// this is the 'standard' crc, please correct me, if I'm wrong -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Checksums -{ - - public class StrangeCRC : IChecksum - { - readonly static uint[] crc32Table = { - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, - 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, - 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, - 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, - 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, - 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, - 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, - 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, - 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, - 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, - 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, - 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, - 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, - 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, - 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, - 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, - 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, - 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, - 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, - 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, - 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, - 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, - 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, - 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, - 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, - 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, - 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, - 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, - 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, - 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, - 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, - 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, - 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, - 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, - 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, - 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, - 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, - 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, - 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, - 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, - 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, - 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, - 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, - 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, - 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, - 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, - 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, - 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, - 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, - 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, - 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, - 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 - }; - int globalCrc; - - public StrangeCRC() - { - Reset(); - } - - public void Reset() - { - globalCrc = -1; - } - - public long Value { - get { - return ~globalCrc; - } - } - - public void Update(int inCh) - { - int temp = (globalCrc >> 24) ^ inCh; - if (temp < 0) { - temp = 256 + temp; - } - globalCrc = (int)((globalCrc << 8) ^ crc32Table[temp]); - } - - public void Update(byte[] buf) - { - Update(buf, 0, buf.Length); - } - - public void Update(byte[] buf, int off, int len) - { - if (buf == null) { - throw new ArgumentNullException("buf"); - } - - if (off < 0 || len < 0 || off + len > buf.Length) { - throw new ArgumentOutOfRangeException(); - } - - for (int i = 0; i < len; ++i) { - Update(buf[off++]); - } - } - } -} diff --git a/irc/TechBot/Compression/Compression.cmbx b/irc/TechBot/Compression/Compression.cmbx deleted file mode 100644 index 28d8e0cd398..00000000000 --- a/irc/TechBot/Compression/Compression.cmbx +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/Compression/Compression.csproj b/irc/TechBot/Compression/Compression.csproj deleted file mode 100644 index 8e6fb7ef92e..00000000000 --- a/irc/TechBot/Compression/Compression.csproj +++ /dev/null @@ -1,65 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {E32307F1-623A-4E62-826F-56CDD4B23A54} - Library - Properties - Compression - Compression - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/Compression/Compression.prjx b/irc/TechBot/Compression/Compression.prjx deleted file mode 100644 index 95316d15b26..00000000000 --- a/irc/TechBot/Compression/Compression.prjx +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/Compression/Default.build b/irc/TechBot/Compression/Default.build deleted file mode 100644 index 5a229e272d6..00000000000 --- a/irc/TechBot/Compression/Default.build +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/irc/TechBot/Compression/Deflater.cs b/irc/TechBot/Compression/Deflater.cs deleted file mode 100644 index bb8d4cc3ca8..00000000000 --- a/irc/TechBot/Compression/Deflater.cs +++ /dev/null @@ -1,542 +0,0 @@ -// Deflater.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - /// - /// This is the Deflater class. The deflater class compresses input - /// with the deflate algorithm described in RFC 1951. It has several - /// compression levels and three different strategies described below. - /// - /// This class is not thread safe. This is inherent in the API, due - /// to the split of deflate and setInput. - /// - /// author of the original java version : Jochen Hoenicke - /// - public class Deflater - { - /// - /// The best and slowest compression level. This tries to find very - /// long and distant string repetitions. - /// - public static int BEST_COMPRESSION = 9; - - /// - /// The worst but fastest compression level. - /// - public static int BEST_SPEED = 1; - - /// - /// The default compression level. - /// - public static int DEFAULT_COMPRESSION = -1; - - /// - /// This level won't compress at all but output uncompressed blocks. - /// - public static int NO_COMPRESSION = 0; - - /// - /// The compression method. This is the only method supported so far. - /// There is no need to use this constant at all. - /// - public static int DEFLATED = 8; - - /* - * The Deflater can do the following state transitions: - * - * (1) -> INIT_STATE ----> INIT_FINISHING_STATE ---. - * / | (2) (5) | - * / v (5) | - * (3)| SETDICT_STATE ---> SETDICT_FINISHING_STATE |(3) - * \ | (3) | ,-------' - * | | | (3) / - * v v (5) v v - * (1) -> BUSY_STATE ----> FINISHING_STATE - * | (6) - * v - * FINISHED_STATE - * \_____________________________________/ - * | (7) - * v - * CLOSED_STATE - * - * (1) If we should produce a header we start in INIT_STATE, otherwise - * we start in BUSY_STATE. - * (2) A dictionary may be set only when we are in INIT_STATE, then - * we change the state as indicated. - * (3) Whether a dictionary is set or not, on the first call of deflate - * we change to BUSY_STATE. - * (4) -- intentionally left blank -- :) - * (5) FINISHING_STATE is entered, when flush() is called to indicate that - * there is no more INPUT. There are also states indicating, that - * the header wasn't written yet. - * (6) FINISHED_STATE is entered, when everything has been flushed to the - * internal pending output buffer. - * (7) At any time (7) - * - */ - - private static int IS_SETDICT = 0x01; - private static int IS_FLUSHING = 0x04; - private static int IS_FINISHING = 0x08; - - private static int INIT_STATE = 0x00; - private static int SETDICT_STATE = 0x01; - // private static int INIT_FINISHING_STATE = 0x08; - // private static int SETDICT_FINISHING_STATE = 0x09; - private static int BUSY_STATE = 0x10; - private static int FLUSHING_STATE = 0x14; - private static int FINISHING_STATE = 0x1c; - private static int FINISHED_STATE = 0x1e; - private static int CLOSED_STATE = 0x7f; - - /// - /// Compression level. - /// - private int level; - - /// - /// should we include a header. - /// - private bool noHeader; - - // /// - // /// Compression strategy. - // /// - // private int strategy; - - /// - /// The current state. - /// - private int state; - - /// - /// The total bytes of output written. - /// - private int totalOut; - - /// - /// The pending output. - /// - private DeflaterPending pending; - - /// - /// The deflater engine. - /// - private DeflaterEngine engine; - - /// - /// Creates a new deflater with default compression level. - /// - public Deflater() : this(DEFAULT_COMPRESSION, false) - { - - } - - /// - /// Creates a new deflater with given compression level. - /// - /// - /// the compression level, a value between NO_COMPRESSION - /// and BEST_COMPRESSION, or DEFAULT_COMPRESSION. - /// - /// if lvl is out of range. - public Deflater(int lvl) : this(lvl, false) - { - - } - - /// - /// Creates a new deflater with given compression level. - /// - /// - /// the compression level, a value between NO_COMPRESSION - /// and BEST_COMPRESSION. - /// - /// - /// true, if we should suppress the deflate header at the - /// beginning and the adler checksum at the end of the output. This is - /// useful for the GZIP format. - /// - /// if lvl is out of range. - public Deflater(int lvl, bool nowrap) - { - if (lvl == DEFAULT_COMPRESSION) { - lvl = 6; - } else if (lvl < NO_COMPRESSION || lvl > BEST_COMPRESSION) { - throw new ArgumentOutOfRangeException("lvl"); - } - - pending = new DeflaterPending(); - engine = new DeflaterEngine(pending); - this.noHeader = nowrap; - SetStrategy(DeflateStrategy.Default); - SetLevel(lvl); - Reset(); - } - - - /// - /// Resets the deflater. The deflater acts afterwards as if it was - /// just created with the same compression level and strategy as it - /// had before. - /// - public void Reset() - { - state = (noHeader ? BUSY_STATE : INIT_STATE); - totalOut = 0; - pending.Reset(); - engine.Reset(); - } - - /// - /// Gets the current adler checksum of the data that was processed so far. - /// - public int Adler { - get { - return engine.Adler; - } - } - - /// - /// Gets the number of input bytes processed so far. - /// - public int TotalIn { - get { - return engine.TotalIn; - } - } - - /// - /// Gets the number of output bytes so far. - /// - public int TotalOut { - get { - return totalOut; - } - } - - /// - /// Flushes the current input block. Further calls to deflate() will - /// produce enough output to inflate everything in the current input - /// block. This is not part of Sun's JDK so I have made it package - /// private. It is used by DeflaterOutputStream to implement - /// flush(). - /// - public void Flush() - { - state |= IS_FLUSHING; - } - - /// - /// Finishes the deflater with the current input block. It is an error - /// to give more input after this method was called. This method must - /// be called to force all bytes to be flushed. - /// - public void Finish() - { - state |= IS_FLUSHING | IS_FINISHING; - } - - /// - /// Returns true if the stream was finished and no more output bytes - /// are available. - /// - public bool IsFinished { - get { - return state == FINISHED_STATE && pending.IsFlushed; - } - } - - /// - /// Returns true, if the input buffer is empty. - /// You should then call setInput(). - /// NOTE: This method can also return true when the stream - /// was finished. - /// - public bool IsNeedingInput { - get { - return engine.NeedsInput(); - } - } - - /// - /// Sets the data which should be compressed next. This should be only - /// called when needsInput indicates that more input is needed. - /// If you call setInput when needsInput() returns false, the - /// previous input that is still pending will be thrown away. - /// The given byte array should not be changed, before needsInput() returns - /// true again. - /// This call is equivalent to setInput(input, 0, input.length). - /// - /// - /// the buffer containing the input data. - /// - /// - /// if the buffer was finished() or ended(). - /// - public void SetInput(byte[] input) - { - SetInput(input, 0, input.Length); - } - - /// - /// Sets the data which should be compressed next. This should be - /// only called when needsInput indicates that more input is needed. - /// The given byte array should not be changed, before needsInput() returns - /// true again. - /// - /// - /// the buffer containing the input data. - /// - /// - /// the start of the data. - /// - /// - /// the length of the data. - /// - /// - /// if the buffer was finished() or ended() or if previous input is still pending. - /// - public void SetInput(byte[] input, int off, int len) - { - if ((state & IS_FINISHING) != 0) { - throw new InvalidOperationException("finish()/end() already called"); - } - engine.SetInput(input, off, len); - } - - /// - /// Sets the compression level. There is no guarantee of the exact - /// position of the change, but if you call this when needsInput is - /// true the change of compression level will occur somewhere near - /// before the end of the so far given input. - /// - /// - /// the new compression level. - /// - public void SetLevel(int lvl) - { - if (lvl == DEFAULT_COMPRESSION) { - lvl = 6; - } else if (lvl < NO_COMPRESSION || lvl > BEST_COMPRESSION) { - throw new ArgumentOutOfRangeException("lvl"); - } - - if (level != lvl) { - level = lvl; - engine.SetLevel(lvl); - } - } - - /// - /// Sets the compression strategy. Strategy is one of - /// DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED. For the exact - /// position where the strategy is changed, the same as for - /// setLevel() applies. - /// - /// - /// the new compression strategy. - /// - public void SetStrategy(DeflateStrategy stgy) - { - engine.Strategy = stgy; - } - - /// - /// Deflates the current input block to the given array. It returns - /// the number of bytes compressed, or 0 if either - /// needsInput() or finished() returns true or length is zero. - /// - /// - /// the buffer where to write the compressed data. - /// - public int Deflate(byte[] output) - { - return Deflate(output, 0, output.Length); - } - - /// - /// Deflates the current input block to the given array. It returns - /// the number of bytes compressed, or 0 if either - /// needsInput() or finished() returns true or length is zero. - /// - /// - /// the buffer where to write the compressed data. - /// - /// - /// the offset into the output array. - /// - /// - /// the maximum number of bytes that may be written. - /// - /// - /// if end() was called. - /// - /// - /// if offset and/or length don't match the array length. - /// - public int Deflate(byte[] output, int offset, int length) - { - int origLength = length; - - if (state == CLOSED_STATE) { - throw new InvalidOperationException("Deflater closed"); - } - - if (state < BUSY_STATE) { - /* output header */ - int header = (DEFLATED + - ((DeflaterConstants.MAX_WBITS - 8) << 4)) << 8; - int level_flags = (level - 1) >> 1; - if (level_flags < 0 || level_flags > 3) { - level_flags = 3; - } - header |= level_flags << 6; - if ((state & IS_SETDICT) != 0) { - /* Dictionary was set */ - header |= DeflaterConstants.PRESET_DICT; - } - header += 31 - (header % 31); - - - pending.WriteShortMSB(header); - if ((state & IS_SETDICT) != 0) { - int chksum = engine.Adler; - engine.ResetAdler(); - pending.WriteShortMSB(chksum >> 16); - pending.WriteShortMSB(chksum & 0xffff); - } - - state = BUSY_STATE | (state & (IS_FLUSHING | IS_FINISHING)); - } - - for (;;) { - int count = pending.Flush(output, offset, length); - offset += count; - totalOut += count; - length -= count; - - if (length == 0 || state == FINISHED_STATE) { - break; - } - - if (!engine.Deflate((state & IS_FLUSHING) != 0, (state & IS_FINISHING) != 0)) { - if (state == BUSY_STATE) { - /* We need more input now */ - return origLength - length; - } else if (state == FLUSHING_STATE) { - if (level != NO_COMPRESSION) { - /* We have to supply some lookahead. 8 bit lookahead - * are needed by the zlib inflater, and we must fill - * the next byte, so that all bits are flushed. - */ - int neededbits = 8 + ((-pending.BitCount) & 7); - while (neededbits > 0) { - /* write a static tree block consisting solely of - * an EOF: - */ - pending.WriteBits(2, 10); - neededbits -= 10; - } - } - state = BUSY_STATE; - } else if (state == FINISHING_STATE) { - pending.AlignToByte(); - /* We have completed the stream */ - if (!noHeader) { - int adler = engine.Adler; - pending.WriteShortMSB(adler >> 16); - pending.WriteShortMSB(adler & 0xffff); - } - state = FINISHED_STATE; - } - } - } - return origLength - length; - } - - /// - /// Sets the dictionary which should be used in the deflate process. - /// This call is equivalent to setDictionary(dict, 0, dict.Length). - /// - /// - /// the dictionary. - /// - /// - /// if setInput () or deflate () were already called or another dictionary was already set. - /// - public void SetDictionary(byte[] dict) - { - SetDictionary(dict, 0, dict.Length); - } - - /// - /// Sets the dictionary which should be used in the deflate process. - /// The dictionary should be a byte array containing strings that are - /// likely to occur in the data which should be compressed. The - /// dictionary is not stored in the compressed output, only a - /// checksum. To decompress the output you need to supply the same - /// dictionary again. - /// - /// - /// the dictionary. - /// - /// - /// an offset into the dictionary. - /// - /// - /// the length of the dictionary. - /// - /// - /// if setInput () or deflate () were already called or another dictionary was already set. - /// - public void SetDictionary(byte[] dict, int offset, int length) - { - if (state != INIT_STATE) { - throw new InvalidOperationException(); - } - - state = SETDICT_STATE; - engine.SetDictionary(dict, offset, length); - } - } -} diff --git a/irc/TechBot/Compression/DeflaterConstants.cs b/irc/TechBot/Compression/DeflaterConstants.cs deleted file mode 100644 index 8e2be6e21ca..00000000000 --- a/irc/TechBot/Compression/DeflaterConstants.cs +++ /dev/null @@ -1,85 +0,0 @@ -// DeflaterConstants.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - /// - /// This class contains constants used for the deflater. - /// - public class DeflaterConstants - { - public const bool DEBUGGING = false; - - public const int STORED_BLOCK = 0; - public const int STATIC_TREES = 1; - public const int DYN_TREES = 2; - public const int PRESET_DICT = 0x20; - - public const int DEFAULT_MEM_LEVEL = 8; - - public const int MAX_MATCH = 258; - public const int MIN_MATCH = 3; - - public const int MAX_WBITS = 15; - public const int WSIZE = 1 << MAX_WBITS; - public const int WMASK = WSIZE - 1; - - public const int HASH_BITS = DEFAULT_MEM_LEVEL + 7; - public const int HASH_SIZE = 1 << HASH_BITS; - public const int HASH_MASK = HASH_SIZE - 1; - public const int HASH_SHIFT = (HASH_BITS + MIN_MATCH - 1) / MIN_MATCH; - - public const int MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1; - public const int MAX_DIST = WSIZE - MIN_LOOKAHEAD; - - public const int PENDING_BUF_SIZE = 1 << (DEFAULT_MEM_LEVEL + 8); - public static int MAX_BLOCK_SIZE = Math.Min(65535, PENDING_BUF_SIZE-5); - - public const int DEFLATE_STORED = 0; - public const int DEFLATE_FAST = 1; - public const int DEFLATE_SLOW = 2; - - public static int[] GOOD_LENGTH = { 0, 4, 4, 4, 4, 8, 8, 8, 32, 32 }; - public static int[] MAX_LAZY = { 0, 4, 5, 6, 4,16, 16, 32, 128, 258 }; - public static int[] NICE_LENGTH = { 0, 8,16,32,16,32,128,128, 258, 258 }; - public static int[] MAX_CHAIN = { 0, 4, 8,32,16,32,128,256,1024,4096 }; - public static int[] COMPR_FUNC = { 0, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; - } -} diff --git a/irc/TechBot/Compression/DeflaterEngine.cs b/irc/TechBot/Compression/DeflaterEngine.cs deleted file mode 100644 index c543f850980..00000000000 --- a/irc/TechBot/Compression/DeflaterEngine.cs +++ /dev/null @@ -1,653 +0,0 @@ -// DeflaterEngine.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -using ICSharpCode.SharpZipLib.Checksums; - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - public enum DeflateStrategy - { - // The default strategy. - Default = 0, - - // This strategy will only allow longer string repetitions. It is - // useful for random data with a small character set. - Filtered = 1, - - // This strategy will not look for string repetitions at all. It - // only encodes with Huffman trees (which means, that more common - // characters get a smaller encoding. - HuffmanOnly = 2 - } - - public class DeflaterEngine : DeflaterConstants - { - static int TOO_FAR = 4096; - - int ins_h; - // private byte[] buffer; - short[] head; - short[] prev; - - int matchStart, matchLen; - bool prevAvailable; - int blockStart; - int strstart, lookahead; - byte[] window; - - DeflateStrategy strategy; - int max_chain, max_lazy, niceLength, goodLength; - - /// - /// The current compression function. - /// - int comprFunc; - - /// - /// The input data for compression. - /// - byte[] inputBuf; - - /// - /// The total bytes of input read. - /// - int totalIn; - - /// - /// The offset into inputBuf, where input data starts. - /// - int inputOff; - - /// - /// The end offset of the input data. - /// - int inputEnd; - - DeflaterPending pending; - DeflaterHuffman huffman; - - /// - /// The adler checksum - /// - Adler32 adler; - - public DeflaterEngine(DeflaterPending pending) - { - this.pending = pending; - huffman = new DeflaterHuffman(pending); - adler = new Adler32(); - - window = new byte[2 * WSIZE]; - head = new short[HASH_SIZE]; - prev = new short[WSIZE]; - - /* We start at index 1, to avoid a implementation deficiency, that - * we cannot build a repeat pattern at index 0. - */ - blockStart = strstart = 1; - } - - public void Reset() - { - huffman.Reset(); - adler.Reset(); - blockStart = strstart = 1; - lookahead = 0; - totalIn = 0; - prevAvailable = false; - matchLen = MIN_MATCH - 1; - - for (int i = 0; i < HASH_SIZE; i++) { - head[i] = 0; - } - - for (int i = 0; i < WSIZE; i++) { - prev[i] = 0; - } - } - - public void ResetAdler() - { - adler.Reset(); - } - - public int Adler { - get { - return (int)adler.Value; - } - } - - public int TotalIn { - get { - return totalIn; - } - } - - public DeflateStrategy Strategy { - get { - return strategy; - } - set { - strategy = value; - } - } - - public void SetLevel(int lvl) - { - goodLength = DeflaterConstants.GOOD_LENGTH[lvl]; - max_lazy = DeflaterConstants.MAX_LAZY[lvl]; - niceLength = DeflaterConstants.NICE_LENGTH[lvl]; - max_chain = DeflaterConstants.MAX_CHAIN[lvl]; - - if (DeflaterConstants.COMPR_FUNC[lvl] != comprFunc) { - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("Change from "+comprFunc +" to " - // + DeflaterConstants.COMPR_FUNC[lvl]); - // } - switch (comprFunc) { - case DEFLATE_STORED: - if (strstart > blockStart) { - huffman.FlushStoredBlock(window, blockStart, - strstart - blockStart, false); - blockStart = strstart; - } - UpdateHash(); - break; - case DEFLATE_FAST: - if (strstart > blockStart) { - huffman.FlushBlock(window, blockStart, strstart - blockStart, - false); - blockStart = strstart; - } - break; - case DEFLATE_SLOW: - if (prevAvailable) { - huffman.TallyLit(window[strstart-1] & 0xff); - } - if (strstart > blockStart) { - huffman.FlushBlock(window, blockStart, strstart - blockStart, false); - blockStart = strstart; - } - prevAvailable = false; - matchLen = MIN_MATCH - 1; - break; - } - comprFunc = COMPR_FUNC[lvl]; - } - } - - void UpdateHash() - { - // if (DEBUGGING) { - // //Console.WriteLine("updateHash: "+strstart); - // } - ins_h = (window[strstart] << HASH_SHIFT) ^ window[strstart + 1]; - } - - int InsertString() - { - short match; - int hash = ((ins_h << HASH_SHIFT) ^ window[strstart + (MIN_MATCH -1)]) & HASH_MASK; - - // if (DEBUGGING) { - // if (hash != (((window[strstart] << (2*HASH_SHIFT)) ^ - // (window[strstart + 1] << HASH_SHIFT) ^ - // (window[strstart + 2])) & HASH_MASK)) { - // throw new Exception("hash inconsistent: "+hash+"/" - // +window[strstart]+"," - // +window[strstart+1]+"," - // +window[strstart+2]+","+HASH_SHIFT); - // } - // } - - prev[strstart & WMASK] = match = head[hash]; - head[hash] = (short)strstart; - ins_h = hash; - return match & 0xffff; - } - - void SlideWindow() - { - Array.Copy(window, WSIZE, window, 0, WSIZE); - matchStart -= WSIZE; - strstart -= WSIZE; - blockStart -= WSIZE; - - /* Slide the hash table (could be avoided with 32 bit values - * at the expense of memory usage). - */ - for (int i = 0; i < HASH_SIZE; ++i) { - int m = head[i] & 0xffff; - head[i] = (short)(m >= WSIZE ? (m - WSIZE) : 0); - } - - /* Slide the prev table. */ - for (int i = 0; i < WSIZE; i++) { - int m = prev[i] & 0xffff; - prev[i] = (short)(m >= WSIZE ? (m - WSIZE) : 0); - } - } - - public void FillWindow() - { - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (strstart >= WSIZE + MAX_DIST) { - SlideWindow(); - } - - /* If there is not enough lookahead, but still some input left, - * read in the input - */ - while (lookahead < DeflaterConstants.MIN_LOOKAHEAD && inputOff < inputEnd) { - int more = 2 * WSIZE - lookahead - strstart; - - if (more > inputEnd - inputOff) { - more = inputEnd - inputOff; - } - - System.Array.Copy(inputBuf, inputOff, window, strstart + lookahead, more); - adler.Update(inputBuf, inputOff, more); - - inputOff += more; - totalIn += more; - lookahead += more; - } - - if (lookahead >= MIN_MATCH) { - UpdateHash(); - } - } - - bool FindLongestMatch(int curMatch) - { - int chainLength = this.max_chain; - int niceLength = this.niceLength; - short[] prev = this.prev; - int scan = this.strstart; - int match; - int best_end = this.strstart + matchLen; - int best_len = Math.Max(matchLen, MIN_MATCH - 1); - - int limit = Math.Max(strstart - MAX_DIST, 0); - - int strend = strstart + MAX_MATCH - 1; - byte scan_end1 = window[best_end - 1]; - byte scan_end = window[best_end]; - - /* Do not waste too much time if we already have a good match: */ - if (best_len >= this.goodLength) { - chainLength >>= 2; - } - - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if (niceLength > lookahead) { - niceLength = lookahead; - } - - if (DeflaterConstants.DEBUGGING && strstart > 2 * WSIZE - MIN_LOOKAHEAD) { - throw new InvalidOperationException("need lookahead"); - } - - do { - if (DeflaterConstants.DEBUGGING && curMatch >= strstart) { - throw new InvalidOperationException("future match"); - } - if (window[curMatch + best_len] != scan_end || - window[curMatch + best_len - 1] != scan_end1 || - window[curMatch] != window[scan] || - window[curMatch + 1] != window[scan + 1]) { - continue; - } - - match = curMatch + 2; - scan += 2; - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - while (window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && scan < strend) ; - - if (scan > best_end) { - // if (DeflaterConstants.DEBUGGING && ins_h == 0) - // System.err.println("Found match: "+curMatch+"-"+(scan-strstart)); - matchStart = curMatch; - best_end = scan; - best_len = scan - strstart; - - if (best_len >= niceLength) { - break; - } - - scan_end1 = window[best_end - 1]; - scan_end = window[best_end]; - } - scan = strstart; - } while ((curMatch = (prev[curMatch & WMASK] & 0xffff)) > limit && --chainLength != 0); - - matchLen = Math.Min(best_len, lookahead); - return matchLen >= MIN_MATCH; - } - - public void SetDictionary(byte[] buffer, int offset, int length) - { - if (DeflaterConstants.DEBUGGING && strstart != 1) { - throw new InvalidOperationException("strstart not 1"); - } - adler.Update(buffer, offset, length); - if (length < MIN_MATCH) { - return; - } - if (length > MAX_DIST) { - offset += length - MAX_DIST; - length = MAX_DIST; - } - - System.Array.Copy(buffer, offset, window, strstart, length); - - UpdateHash(); - --length; - while (--length > 0) { - InsertString(); - strstart++; - } - strstart += 2; - blockStart = strstart; - } - - bool DeflateStored(bool flush, bool finish) - { - if (!flush && lookahead == 0) { - return false; - } - - strstart += lookahead; - lookahead = 0; - - int storedLen = strstart - blockStart; - - if ((storedLen >= DeflaterConstants.MAX_BLOCK_SIZE) || /* Block is full */ - (blockStart < WSIZE && storedLen >= MAX_DIST) || /* Block may move out of window */ - flush) { - bool lastBlock = finish; - if (storedLen > DeflaterConstants.MAX_BLOCK_SIZE) { - storedLen = DeflaterConstants.MAX_BLOCK_SIZE; - lastBlock = false; - } - - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("storedBlock["+storedLen+","+lastBlock+"]"); - // } - - huffman.FlushStoredBlock(window, blockStart, storedLen, lastBlock); - blockStart += storedLen; - return !lastBlock; - } - return true; - } - - private bool DeflateFast(bool flush, bool finish) - { - if (lookahead < MIN_LOOKAHEAD && !flush) { - return false; - } - - while (lookahead >= MIN_LOOKAHEAD || flush) { - if (lookahead == 0) { - /* We are flushing everything */ - huffman.FlushBlock(window, blockStart, strstart - blockStart, finish); - blockStart = strstart; - return false; - } - - if (strstart > 2 * WSIZE - MIN_LOOKAHEAD) { - /* slide window, as findLongestMatch need this. - * This should only happen when flushing and the window - * is almost full. - */ - SlideWindow(); - } - - int hashHead; - if (lookahead >= MIN_MATCH && - (hashHead = InsertString()) != 0 && - strategy != DeflateStrategy.HuffmanOnly && - strstart - hashHead <= MAX_DIST && - FindLongestMatch(hashHead)) { - /* longestMatch sets matchStart and matchLen */ - // if (DeflaterConstants.DEBUGGING) { - // for (int i = 0 ; i < matchLen; i++) { - // if (window[strstart+i] != window[matchStart + i]) { - // throw new Exception(); - // } - // } - // } - - // -jr- Hak hak hak this stops problems with fast/low compression and index out of range - if (huffman.TallyDist(strstart - matchStart, matchLen)) { - bool lastBlock = finish && lookahead == 0; - huffman.FlushBlock(window, blockStart, strstart - blockStart, lastBlock); - blockStart = strstart; - } - - lookahead -= matchLen; - if (matchLen <= max_lazy && lookahead >= MIN_MATCH) { - while (--matchLen > 0) { - ++strstart; - InsertString(); - } - ++strstart; - } else { - strstart += matchLen; - if (lookahead >= MIN_MATCH - 1) { - UpdateHash(); - } - } - matchLen = MIN_MATCH - 1; - continue; - } else { - /* No match found */ - huffman.TallyLit(window[strstart] & 0xff); - ++strstart; - --lookahead; - } - - if (huffman.IsFull()) { - bool lastBlock = finish && lookahead == 0; - huffman.FlushBlock(window, blockStart, strstart - blockStart, lastBlock); - blockStart = strstart; - return !lastBlock; - } - } - return true; - } - - bool DeflateSlow(bool flush, bool finish) - { - if (lookahead < MIN_LOOKAHEAD && !flush) { - return false; - } - - while (lookahead >= MIN_LOOKAHEAD || flush) { - if (lookahead == 0) { - if (prevAvailable) { - huffman.TallyLit(window[strstart-1] & 0xff); - } - prevAvailable = false; - - /* We are flushing everything */ - if (DeflaterConstants.DEBUGGING && !flush) { - throw new Exception("Not flushing, but no lookahead"); - } - huffman.FlushBlock(window, blockStart, strstart - blockStart, - finish); - blockStart = strstart; - return false; - } - - if (strstart >= 2 * WSIZE - MIN_LOOKAHEAD) { - /* slide window, as findLongestMatch need this. - * This should only happen when flushing and the window - * is almost full. - */ - SlideWindow(); - } - - int prevMatch = matchStart; - int prevLen = matchLen; - if (lookahead >= MIN_MATCH) { - int hashHead = InsertString(); - if (strategy != DeflateStrategy.HuffmanOnly && hashHead != 0 && strstart - hashHead <= MAX_DIST && FindLongestMatch(hashHead)) { - /* longestMatch sets matchStart and matchLen */ - - /* Discard match if too small and too far away */ - if (matchLen <= 5 && (strategy == DeflateStrategy.Filtered || (matchLen == MIN_MATCH && strstart - matchStart > TOO_FAR))) { - matchLen = MIN_MATCH - 1; - } - } - } - - /* previous match was better */ - if (prevLen >= MIN_MATCH && matchLen <= prevLen) { - // if (DeflaterConstants.DEBUGGING) { - // for (int i = 0 ; i < matchLen; i++) { - // if (window[strstart-1+i] != window[prevMatch + i]) - // throw new Exception(); - // } - // } - huffman.TallyDist(strstart - 1 - prevMatch, prevLen); - prevLen -= 2; - do { - strstart++; - lookahead--; - if (lookahead >= MIN_MATCH) { - InsertString(); - } - } while (--prevLen > 0); - strstart ++; - lookahead--; - prevAvailable = false; - matchLen = MIN_MATCH - 1; - } else { - if (prevAvailable) { - huffman.TallyLit(window[strstart-1] & 0xff); - } - prevAvailable = true; - strstart++; - lookahead--; - } - - if (huffman.IsFull()) { - int len = strstart - blockStart; - if (prevAvailable) { - len--; - } - bool lastBlock = (finish && lookahead == 0 && !prevAvailable); - huffman.FlushBlock(window, blockStart, len, lastBlock); - blockStart += len; - return !lastBlock; - } - } - return true; - } - - public bool Deflate(bool flush, bool finish) - { - bool progress; - do { - FillWindow(); - bool canFlush = flush && inputOff == inputEnd; - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("window: ["+blockStart+","+strstart+"," - // +lookahead+"], "+comprFunc+","+canFlush); - // } - switch (comprFunc) { - case DEFLATE_STORED: - progress = DeflateStored(canFlush, finish); - break; - case DEFLATE_FAST: - progress = DeflateFast(canFlush, finish); - break; - case DEFLATE_SLOW: - progress = DeflateSlow(canFlush, finish); - break; - default: - throw new InvalidOperationException("unknown comprFunc"); - } - } while (pending.IsFlushed && progress); /* repeat while we have no pending output and progress was made */ - return progress; - } - - public void SetInput(byte[] buf, int off, int len) - { - if (inputOff < inputEnd) { - throw new InvalidOperationException("Old input was not completely processed"); - } - - int end = off + len; - - /* We want to throw an ArrayIndexOutOfBoundsException early. The - * check is very tricky: it also handles integer wrap around. - */ - if (0 > off || off > end || end > buf.Length) { - throw new ArgumentOutOfRangeException(); - } - - inputBuf = buf; - inputOff = off; - inputEnd = end; - } - - public bool NeedsInput() - { - return inputEnd == inputOff; - } - } -} diff --git a/irc/TechBot/Compression/DeflaterHuffman.cs b/irc/TechBot/Compression/DeflaterHuffman.cs deleted file mode 100644 index 338d09ed242..00000000000 --- a/irc/TechBot/Compression/DeflaterHuffman.cs +++ /dev/null @@ -1,780 +0,0 @@ -// DeflaterHuffman.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - /// - /// This is the DeflaterHuffman class. - /// - /// This class is not thread safe. This is inherent in the API, due - /// to the split of deflate and setInput. - /// - /// author of the original java version : Jochen Hoenicke - /// - public class DeflaterHuffman - { - private static int BUFSIZE = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 6); - private static int LITERAL_NUM = 286; - private static int DIST_NUM = 30; - private static int BITLEN_NUM = 19; - private static int REP_3_6 = 16; - private static int REP_3_10 = 17; - private static int REP_11_138 = 18; - private static int EOF_SYMBOL = 256; - private static int[] BL_ORDER = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; - - private static byte[] bit4Reverse = { - 0, - 8, - 4, - 12, - 2, - 10, - 6, - 14, - 1, - 9, - 5, - 13, - 3, - 11, - 7, - 15 - }; - - public class Tree - { - public short[] freqs; - public byte[] length; - public int minNumCodes, numCodes; - - short[] codes; - int[] bl_counts; - int maxLength; - DeflaterHuffman dh; - - public Tree(DeflaterHuffman dh, int elems, int minCodes, int maxLength) - { - this.dh = dh; - this.minNumCodes = minCodes; - this.maxLength = maxLength; - freqs = new short[elems]; - bl_counts = new int[maxLength]; - } - - public void Reset() - { - for (int i = 0; i < freqs.Length; i++) { - freqs[i] = 0; - } - codes = null; - length = null; - } - - public void WriteSymbol(int code) - { - // if (DeflaterConstants.DEBUGGING) { - // freqs[code]--; - // // Console.Write("writeSymbol("+freqs.length+","+code+"): "); - // } - dh.pending.WriteBits(codes[code] & 0xffff, length[code]); - } - - public void CheckEmpty() - { - bool empty = true; - for (int i = 0; i < freqs.Length; i++) { - if (freqs[i] != 0) { - //Console.WriteLine("freqs["+i+"] == "+freqs[i]); - empty = false; - } - } - if (!empty) { - throw new Exception(); - } - //Console.WriteLine("checkEmpty suceeded!"); - } - - public void SetStaticCodes(short[] stCodes, byte[] stLength) - { - codes = stCodes; - length = stLength; - } - - public void BuildCodes() - { - int numSymbols = freqs.Length; - int[] nextCode = new int[maxLength]; - int code = 0; - codes = new short[freqs.Length]; - - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("buildCodes: "+freqs.Length); - // } - - for (int bits = 0; bits < maxLength; bits++) { - nextCode[bits] = code; - code += bl_counts[bits] << (15 - bits); - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("bits: "+(bits+1)+" count: "+bl_counts[bits] - // +" nextCode: "+code); // HACK : Integer.toHexString( - // } - } - if (DeflaterConstants.DEBUGGING && code != 65536) { - throw new Exception("Inconsistent bl_counts!"); - } - - for (int i=0; i < numCodes; i++) { - int bits = length[i]; - if (bits > 0) { - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("codes["+i+"] = rev(" + nextCode[bits-1]+")," // HACK : Integer.toHexString( - // +bits); - // } - codes[i] = BitReverse(nextCode[bits-1]); - nextCode[bits-1] += 1 << (16 - bits); - } - } - } - - void BuildLength(int[] childs) - { - this.length = new byte [freqs.Length]; - int numNodes = childs.Length / 2; - int numLeafs = (numNodes + 1) / 2; - int overflow = 0; - - for (int i = 0; i < maxLength; i++) { - bl_counts[i] = 0; - } - - /* First calculate optimal bit lengths */ - int[] lengths = new int[numNodes]; - lengths[numNodes-1] = 0; - - for (int i = numNodes - 1; i >= 0; i--) { - if (childs[2*i+1] != -1) { - int bitLength = lengths[i] + 1; - if (bitLength > maxLength) { - bitLength = maxLength; - overflow++; - } - lengths[childs[2*i]] = lengths[childs[2*i+1]] = bitLength; - } else { - /* A leaf node */ - int bitLength = lengths[i]; - bl_counts[bitLength - 1]++; - this.length[childs[2*i]] = (byte) lengths[i]; - } - } - - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("Tree "+freqs.Length+" lengths:"); - // for (int i=0; i < numLeafs; i++) { - // //Console.WriteLine("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]] - // + " len: "+length[childs[2*i]]); - // } - // } - - if (overflow == 0) { - return; - } - - int incrBitLen = maxLength - 1; - do { - /* Find the first bit length which could increase: */ - while (bl_counts[--incrBitLen] == 0) - ; - - /* Move this node one down and remove a corresponding - * amount of overflow nodes. - */ - do { - bl_counts[incrBitLen]--; - bl_counts[++incrBitLen]++; - overflow -= 1 << (maxLength - 1 - incrBitLen); - } while (overflow > 0 && incrBitLen < maxLength - 1); - } while (overflow > 0); - - /* We may have overshot above. Move some nodes from maxLength to - * maxLength-1 in that case. - */ - bl_counts[maxLength-1] += overflow; - bl_counts[maxLength-2] -= overflow; - - /* Now recompute all bit lengths, scanning in increasing - * frequency. It is simpler to reconstruct all lengths instead of - * fixing only the wrong ones. This idea is taken from 'ar' - * written by Haruhiko Okumura. - * - * The nodes were inserted with decreasing frequency into the childs - * array. - */ - int nodePtr = 2 * numLeafs; - for (int bits = maxLength; bits != 0; bits--) { - int n = bl_counts[bits-1]; - while (n > 0) { - int childPtr = 2*childs[nodePtr++]; - if (childs[childPtr + 1] == -1) { - /* We found another leaf */ - length[childs[childPtr]] = (byte) bits; - n--; - } - } - } - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("*** After overflow elimination. ***"); - // for (int i=0; i < numLeafs; i++) { - // //Console.WriteLine("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]] - // + " len: "+length[childs[2*i]]); - // } - // } - } - - public void BuildTree() - { - int numSymbols = freqs.Length; - - /* heap is a priority queue, sorted by frequency, least frequent - * nodes first. The heap is a binary tree, with the property, that - * the parent node is smaller than both child nodes. This assures - * that the smallest node is the first parent. - * - * The binary tree is encoded in an array: 0 is root node and - * the nodes 2*n+1, 2*n+2 are the child nodes of node n. - */ - int[] heap = new int[numSymbols]; - int heapLen = 0; - int maxCode = 0; - for (int n = 0; n < numSymbols; n++) { - int freq = freqs[n]; - if (freq != 0) { - /* Insert n into heap */ - int pos = heapLen++; - int ppos; - while (pos > 0 && freqs[heap[ppos = (pos - 1) / 2]] > freq) { - heap[pos] = heap[ppos]; - pos = ppos; - } - heap[pos] = n; - - maxCode = n; - } - } - - /* We could encode a single literal with 0 bits but then we - * don't see the literals. Therefore we force at least two - * literals to avoid this case. We don't care about order in - * this case, both literals get a 1 bit code. - */ - while (heapLen < 2) { - int node = maxCode < 2 ? ++maxCode : 0; - heap[heapLen++] = node; - } - - numCodes = Math.Max(maxCode + 1, minNumCodes); - - int numLeafs = heapLen; - int[] childs = new int[4*heapLen - 2]; - int[] values = new int[2*heapLen - 1]; - int numNodes = numLeafs; - for (int i = 0; i < heapLen; i++) { - int node = heap[i]; - childs[2*i] = node; - childs[2*i+1] = -1; - values[i] = freqs[node] << 8; - heap[i] = i; - } - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - do { - int first = heap[0]; - int last = heap[--heapLen]; - - /* Propagate the hole to the leafs of the heap */ - int ppos = 0; - int path = 1; - - while (path < heapLen) { - if (path + 1 < heapLen && values[heap[path]] > values[heap[path+1]]) { - path++; - } - - heap[ppos] = heap[path]; - ppos = path; - path = path * 2 + 1; - } - - /* Now propagate the last element down along path. Normally - * it shouldn't go too deep. - */ - int lastVal = values[last]; - while ((path = ppos) > 0 && values[heap[ppos = (path - 1)/2]] > lastVal) { - heap[path] = heap[ppos]; - } - heap[path] = last; - - - int second = heap[0]; - - /* Create a new node father of first and second */ - last = numNodes++; - childs[2*last] = first; - childs[2*last+1] = second; - int mindepth = Math.Min(values[first] & 0xff, values[second] & 0xff); - values[last] = lastVal = values[first] + values[second] - mindepth + 1; - - /* Again, propagate the hole to the leafs */ - ppos = 0; - path = 1; - - while (path < heapLen) { - if (path + 1 < heapLen && values[heap[path]] > values[heap[path+1]]) { - path++; - } - - heap[ppos] = heap[path]; - ppos = path; - path = ppos * 2 + 1; - } - - /* Now propagate the new element down along path */ - while ((path = ppos) > 0 && values[heap[ppos = (path - 1)/2]] > lastVal) { - heap[path] = heap[ppos]; - } - heap[path] = last; - } while (heapLen > 1); - - if (heap[0] != childs.Length / 2 - 1) { - throw new Exception("Weird!"); - } - BuildLength(childs); - } - - public int GetEncodedLength() - { - int len = 0; - for (int i = 0; i < freqs.Length; i++) { - len += freqs[i] * length[i]; - } - return len; - } - - public void CalcBLFreq(Tree blTree) - { - int max_count; /* max repeat count */ - int min_count; /* min repeat count */ - int count; /* repeat count of the current code */ - int curlen = -1; /* length of current code */ - - int i = 0; - while (i < numCodes) { - count = 1; - int nextlen = length[i]; - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } else { - max_count = 6; - min_count = 3; - if (curlen != nextlen) { - blTree.freqs[nextlen]++; - count = 0; - } - } - curlen = nextlen; - i++; - - while (i < numCodes && curlen == length[i]) { - i++; - if (++count >= max_count) { - break; - } - } - - if (count < min_count) { - blTree.freqs[curlen] += (short)count; - } else if (curlen != 0) { - blTree.freqs[REP_3_6]++; - } else if (count <= 10) { - blTree.freqs[REP_3_10]++; - } else { - blTree.freqs[REP_11_138]++; - } - } - } - - public void WriteTree(Tree blTree) - { - int max_count; /* max repeat count */ - int min_count; /* min repeat count */ - int count; /* repeat count of the current code */ - int curlen = -1; /* length of current code */ - - int i = 0; - while (i < numCodes) { - count = 1; - int nextlen = length[i]; - if (nextlen == 0) { - max_count = 138; - min_count = 3; - } else { - max_count = 6; - min_count = 3; - if (curlen != nextlen) { - blTree.WriteSymbol(nextlen); - count = 0; - } - } - curlen = nextlen; - i++; - - while (i < numCodes && curlen == length[i]) { - i++; - if (++count >= max_count) { - break; - } - } - - if (count < min_count) { - while (count-- > 0) { - blTree.WriteSymbol(curlen); - } - } else if (curlen != 0) { - blTree.WriteSymbol(REP_3_6); - dh.pending.WriteBits(count - 3, 2); - } else if (count <= 10) { - blTree.WriteSymbol(REP_3_10); - dh.pending.WriteBits(count - 3, 3); - } else { - blTree.WriteSymbol(REP_11_138); - dh.pending.WriteBits(count - 11, 7); - } - } - } - } - - public DeflaterPending pending; - private Tree literalTree, distTree, blTree; - - private short[] d_buf; - private byte[] l_buf; - private int last_lit; - private int extra_bits; - - private static short[] staticLCodes; - private static byte[] staticLLength; - private static short[] staticDCodes; - private static byte[] staticDLength; - - /// - /// Reverse the bits of a 16 bit value. - /// - public static short BitReverse(int value) - { - return (short) (bit4Reverse[value & 0xF] << 12 | - bit4Reverse[(value >> 4) & 0xF] << 8 | - bit4Reverse[(value >> 8) & 0xF] << 4 | - bit4Reverse[value >> 12]); - } - - - static DeflaterHuffman() - { - /* See RFC 1951 3.2.6 */ - /* Literal codes */ - staticLCodes = new short[LITERAL_NUM]; - staticLLength = new byte[LITERAL_NUM]; - int i = 0; - while (i < 144) { - staticLCodes[i] = BitReverse((0x030 + i) << 8); - staticLLength[i++] = 8; - } - while (i < 256) { - staticLCodes[i] = BitReverse((0x190 - 144 + i) << 7); - staticLLength[i++] = 9; - } - while (i < 280) { - staticLCodes[i] = BitReverse((0x000 - 256 + i) << 9); - staticLLength[i++] = 7; - } - while (i < LITERAL_NUM) { - staticLCodes[i] = BitReverse((0x0c0 - 280 + i) << 8); - staticLLength[i++] = 8; - } - - /* Distant codes */ - staticDCodes = new short[DIST_NUM]; - staticDLength = new byte[DIST_NUM]; - for (i = 0; i < DIST_NUM; i++) { - staticDCodes[i] = BitReverse(i << 11); - staticDLength[i] = 5; - } - } - - public DeflaterHuffman(DeflaterPending pending) - { - this.pending = pending; - - literalTree = new Tree(this, LITERAL_NUM, 257, 15); - distTree = new Tree(this, DIST_NUM, 1, 15); - blTree = new Tree(this, BITLEN_NUM, 4, 7); - - d_buf = new short[BUFSIZE]; - l_buf = new byte [BUFSIZE]; - } - - public void Reset() - { - last_lit = 0; - extra_bits = 0; - literalTree.Reset(); - distTree.Reset(); - blTree.Reset(); - } - - int Lcode(int len) - { - if (len == 255) { - return 285; - } - - int code = 257; - while (len >= 8) { - code += 4; - len >>= 1; - } - return code + len; - } - - int Dcode(int distance) - { - int code = 0; - while (distance >= 4) { - code += 2; - distance >>= 1; - } - return code + distance; - } - - public void SendAllTrees(int blTreeCodes) - { - blTree.BuildCodes(); - literalTree.BuildCodes(); - distTree.BuildCodes(); - pending.WriteBits(literalTree.numCodes - 257, 5); - pending.WriteBits(distTree.numCodes - 1, 5); - pending.WriteBits(blTreeCodes - 4, 4); - for (int rank = 0; rank < blTreeCodes; rank++) { - pending.WriteBits(blTree.length[BL_ORDER[rank]], 3); - } - literalTree.WriteTree(blTree); - distTree.WriteTree(blTree); - // if (DeflaterConstants.DEBUGGING) { - // blTree.CheckEmpty(); - // } - } - - public void CompressBlock() - { - for (int i = 0; i < last_lit; i++) { - int litlen = l_buf[i] & 0xff; - int dist = d_buf[i]; - if (dist-- != 0) { - // if (DeflaterConstants.DEBUGGING) { - // Console.Write("["+(dist+1)+","+(litlen+3)+"]: "); - // } - - int lc = Lcode(litlen); - literalTree.WriteSymbol(lc); - - int bits = (lc - 261) / 4; - if (bits > 0 && bits <= 5) { - pending.WriteBits(litlen & ((1 << bits) - 1), bits); - } - - int dc = Dcode(dist); - distTree.WriteSymbol(dc); - - bits = dc / 2 - 1; - if (bits > 0) { - pending.WriteBits(dist & ((1 << bits) - 1), bits); - } - } else { - // if (DeflaterConstants.DEBUGGING) { - // if (litlen > 32 && litlen < 127) { - // Console.Write("("+(char)litlen+"): "); - // } else { - // Console.Write("{"+litlen+"}: "); - // } - // } - literalTree.WriteSymbol(litlen); - } - } - // if (DeflaterConstants.DEBUGGING) { - // Console.Write("EOF: "); - // } - literalTree.WriteSymbol(EOF_SYMBOL); - // if (DeflaterConstants.DEBUGGING) { - // literalTree.CheckEmpty(); - // distTree.CheckEmpty(); - // } - } - - public void FlushStoredBlock(byte[] stored, int storedOffset, int storedLength, bool lastBlock) - { - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("Flushing stored block "+ storedLength); - // } - pending.WriteBits((DeflaterConstants.STORED_BLOCK << 1) + (lastBlock ? 1 : 0), 3); - pending.AlignToByte(); - pending.WriteShort(storedLength); - pending.WriteShort(~storedLength); - pending.WriteBlock(stored, storedOffset, storedLength); - Reset(); - } - - public void FlushBlock(byte[] stored, int storedOffset, int storedLength, bool lastBlock) - { - literalTree.freqs[EOF_SYMBOL]++; - - /* Build trees */ - literalTree.BuildTree(); - distTree.BuildTree(); - - /* Calculate bitlen frequency */ - literalTree.CalcBLFreq(blTree); - distTree.CalcBLFreq(blTree); - - /* Build bitlen tree */ - blTree.BuildTree(); - - int blTreeCodes = 4; - for (int i = 18; i > blTreeCodes; i--) { - if (blTree.length[BL_ORDER[i]] > 0) { - blTreeCodes = i+1; - } - } - int opt_len = 14 + blTreeCodes * 3 + blTree.GetEncodedLength() + - literalTree.GetEncodedLength() + distTree.GetEncodedLength() + - extra_bits; - - int static_len = extra_bits; - for (int i = 0; i < LITERAL_NUM; i++) { - static_len += literalTree.freqs[i] * staticLLength[i]; - } - for (int i = 0; i < DIST_NUM; i++) { - static_len += distTree.freqs[i] * staticDLength[i]; - } - if (opt_len >= static_len) { - /* Force static trees */ - opt_len = static_len; - } - - if (storedOffset >= 0 && storedLength+4 < opt_len >> 3) { - /* Store Block */ - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("Storing, since " + storedLength + " < " + opt_len - // + " <= " + static_len); - // } - FlushStoredBlock(stored, storedOffset, storedLength, lastBlock); - } else if (opt_len == static_len) { - /* Encode with static tree */ - pending.WriteBits((DeflaterConstants.STATIC_TREES << 1) + (lastBlock ? 1 : 0), 3); - literalTree.SetStaticCodes(staticLCodes, staticLLength); - distTree.SetStaticCodes(staticDCodes, staticDLength); - CompressBlock(); - Reset(); - } else { - /* Encode with dynamic tree */ - pending.WriteBits((DeflaterConstants.DYN_TREES << 1) + (lastBlock ? 1 : 0), 3); - SendAllTrees(blTreeCodes); - CompressBlock(); - Reset(); - } - } - - public bool IsFull() - { -// return last_lit + 16 >= BUFSIZE; // HACK: This was == 'last_lit == BUFSIZE', but errors occured with DeflateFast - return last_lit >= BUFSIZE; // -jr- This is the correct form! - } - - public bool TallyLit(int lit) - { - // if (DeflaterConstants.DEBUGGING) { - // if (lit > 32 && lit < 127) { - // //Console.WriteLine("("+(char)lit+")"); - // } else { - // //Console.WriteLine("{"+lit+"}"); - // } - // } - d_buf[last_lit] = 0; - l_buf[last_lit++] = (byte)lit; - literalTree.freqs[lit]++; - return IsFull(); - } - - public bool TallyDist(int dist, int len) - { - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("["+dist+","+len+"]"); - // } - - d_buf[last_lit] = (short)dist; - l_buf[last_lit++] = (byte)(len - 3); - - int lc = Lcode(len - 3); - literalTree.freqs[lc]++; - if (lc >= 265 && lc < 285) { - extra_bits += (lc - 261) / 4; - } - - int dc = Dcode(dist - 1); - distTree.freqs[dc]++; - if (dc >= 4) { - extra_bits += dc / 2 - 1; - } - return IsFull(); - } - } -} diff --git a/irc/TechBot/Compression/DeflaterPending.cs b/irc/TechBot/Compression/DeflaterPending.cs deleted file mode 100644 index 8144ff35e61..00000000000 --- a/irc/TechBot/Compression/DeflaterPending.cs +++ /dev/null @@ -1,52 +0,0 @@ -// DeflaterPending.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - /// - /// This class stores the pending output of the Deflater. - /// - /// author of the original java version : Jochen Hoenicke - /// - public class DeflaterPending : PendingBuffer - { - public DeflaterPending() : base(DeflaterConstants.PENDING_BUF_SIZE) - { - } - } -} diff --git a/irc/TechBot/Compression/Inflater.cs b/irc/TechBot/Compression/Inflater.cs deleted file mode 100644 index b915c8ffe7d..00000000000 --- a/irc/TechBot/Compression/Inflater.cs +++ /dev/null @@ -1,782 +0,0 @@ -// Inflater.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -using ICSharpCode.SharpZipLib.Checksums; -using ICSharpCode.SharpZipLib.Zip.Compression.Streams; - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - /// - /// Inflater is used to decompress data that has been compressed according - /// to the "deflate" standard described in rfc1950. - /// - /// The usage is as following. First you have to set some input with - /// setInput(), then inflate() it. If inflate doesn't - /// inflate any bytes there may be three reasons: - ///
          - ///
        • needsInput() returns true because the input buffer is empty. - /// You have to provide more input with setInput(). - /// NOTE: needsInput() also returns true when, the stream is finished. - ///
        • - ///
        • needsDictionary() returns true, you have to provide a preset - /// dictionary with setDictionary().
        • - ///
        • finished() returns true, the inflater has finished.
        • - ///
        - /// Once the first output byte is produced, a dictionary will not be - /// needed at a later stage. - /// - /// author of the original java version : John Leuner, Jochen Hoenicke - ///
        - public class Inflater - { - /// - /// Copy lengths for literal codes 257..285 - /// - private static int[] CPLENS = { - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 - }; - - /// - /// Extra bits for literal codes 257..285 - /// - private static int[] CPLEXT = { - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 - }; - - /// - /// Copy offsets for distance codes 0..29 - /// - private static int[] CPDIST = { - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577 - }; - - /// - /// Extra bits for distance codes - /// - private static int[] CPDEXT = { - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 13, 13 - }; - - /// - /// This are the state in which the inflater can be. - /// - private const int DECODE_HEADER = 0; - private const int DECODE_DICT = 1; - private const int DECODE_BLOCKS = 2; - private const int DECODE_STORED_LEN1 = 3; - private const int DECODE_STORED_LEN2 = 4; - private const int DECODE_STORED = 5; - private const int DECODE_DYN_HEADER = 6; - private const int DECODE_HUFFMAN = 7; - private const int DECODE_HUFFMAN_LENBITS = 8; - private const int DECODE_HUFFMAN_DIST = 9; - private const int DECODE_HUFFMAN_DISTBITS = 10; - private const int DECODE_CHKSUM = 11; - private const int FINISHED = 12; - - /// - /// This variable contains the current state. - /// - private int mode; - - /// - /// The adler checksum of the dictionary or of the decompressed - /// stream, as it is written in the header resp. footer of the - /// compressed stream. - /// Only valid if mode is DECODE_DICT or DECODE_CHKSUM. - /// - private int readAdler; - - /// - /// The number of bits needed to complete the current state. This - /// is valid, if mode is DECODE_DICT, DECODE_CHKSUM, - /// DECODE_HUFFMAN_LENBITS or DECODE_HUFFMAN_DISTBITS. - /// - private int neededBits; - private int repLength, repDist; - private int uncomprLen; - - /// - /// True, if the last block flag was set in the last block of the - /// inflated stream. This means that the stream ends after the - /// current block. - /// - private bool isLastBlock; - - /// - /// The total number of inflated bytes. - /// - private int totalOut; - - /// - /// The total number of bytes set with setInput(). This is not the - /// value returned by getTotalIn(), since this also includes the - /// unprocessed input. - /// - private int totalIn; - - /// - /// This variable stores the nowrap flag that was given to the constructor. - /// True means, that the inflated stream doesn't contain a header nor the - /// checksum in the footer. - /// - private bool nowrap; - - private StreamManipulator input; - private OutputWindow outputWindow; - private InflaterDynHeader dynHeader; - private InflaterHuffmanTree litlenTree, distTree; - private Adler32 adler; - - /// - /// Creates a new inflater. - /// - public Inflater() : this(false) - { - } - - /// - /// Creates a new inflater. - /// - /// - /// true if no header and checksum field appears in the - /// stream. This is used for GZIPed input. For compatibility with - /// Sun JDK you should provide one byte of input more than needed in - /// this case. - /// - public Inflater(bool nowrap) - { - this.nowrap = nowrap; - this.adler = new Adler32(); - input = new StreamManipulator(); - outputWindow = new OutputWindow(); - mode = nowrap ? DECODE_BLOCKS : DECODE_HEADER; - } - - /// - /// Resets the inflater so that a new stream can be decompressed. All - /// pending input and output will be discarded. - /// - public void Reset() - { - mode = nowrap ? DECODE_BLOCKS : DECODE_HEADER; - totalIn = totalOut = 0; - input.Reset(); - outputWindow.Reset(); - dynHeader = null; - litlenTree = null; - distTree = null; - isLastBlock = false; - adler.Reset(); - } - - /// - /// Decodes the deflate header. - /// - /// - /// false if more input is needed. - /// - /// - /// if header is invalid. - /// - private bool DecodeHeader() - { - int header = input.PeekBits(16); - if (header < 0) { - return false; - } - input.DropBits(16); - /* The header is written in "wrong" byte order */ - header = ((header << 8) | (header >> 8)) & 0xffff; - if (header % 31 != 0) { - throw new FormatException("Header checksum illegal"); - } - - if ((header & 0x0f00) != (Deflater.DEFLATED << 8)) { - throw new FormatException("Compression Method unknown"); - } - - /* Maximum size of the backwards window in bits. - * We currently ignore this, but we could use it to make the - * inflater window more space efficient. On the other hand the - * full window (15 bits) is needed most times, anyway. - int max_wbits = ((header & 0x7000) >> 12) + 8; - */ - - if ((header & 0x0020) == 0) { // Dictionary flag? - mode = DECODE_BLOCKS; - } else { - mode = DECODE_DICT; - neededBits = 32; - } - return true; - } - - /// - /// Decodes the dictionary checksum after the deflate header. - /// - /// - /// false if more input is needed. - /// - private bool DecodeDict() - { - while (neededBits > 0) { - int dictByte = input.PeekBits(8); - if (dictByte < 0) { - return false; - } - input.DropBits(8); - readAdler = (readAdler << 8) | dictByte; - neededBits -= 8; - } - return false; - } - - /// - /// Decodes the huffman encoded symbols in the input stream. - /// - /// - /// false if more input is needed, true if output window is - /// full or the current block ends. - /// - /// - /// if deflated stream is invalid. - /// - private bool DecodeHuffman() - { - int free = outputWindow.GetFreeSpace(); - while (free >= 258) { - int symbol; - switch (mode) { - case DECODE_HUFFMAN: - /* This is the inner loop so it is optimized a bit */ - while (((symbol = litlenTree.GetSymbol(input)) & ~0xff) == 0) { - outputWindow.Write(symbol); - if (--free < 258) { - return true; - } - } - if (symbol < 257) { - if (symbol < 0) { - return false; - } else { - /* symbol == 256: end of block */ - distTree = null; - litlenTree = null; - mode = DECODE_BLOCKS; - return true; - } - } - - try { - repLength = CPLENS[symbol - 257]; - neededBits = CPLEXT[symbol - 257]; - } catch (Exception) { - throw new FormatException("Illegal rep length code"); - } - goto case DECODE_HUFFMAN_LENBITS;/* fall through */ - case DECODE_HUFFMAN_LENBITS: - if (neededBits > 0) { - mode = DECODE_HUFFMAN_LENBITS; - int i = input.PeekBits(neededBits); - if (i < 0) { - return false; - } - input.DropBits(neededBits); - repLength += i; - } - mode = DECODE_HUFFMAN_DIST; - goto case DECODE_HUFFMAN_DIST;/* fall through */ - case DECODE_HUFFMAN_DIST: - symbol = distTree.GetSymbol(input); - if (symbol < 0) { - return false; - } - try { - repDist = CPDIST[symbol]; - neededBits = CPDEXT[symbol]; - } catch (Exception) { - throw new FormatException("Illegal rep dist code"); - } - - goto case DECODE_HUFFMAN_DISTBITS;/* fall through */ - case DECODE_HUFFMAN_DISTBITS: - if (neededBits > 0) { - mode = DECODE_HUFFMAN_DISTBITS; - int i = input.PeekBits(neededBits); - if (i < 0) { - return false; - } - input.DropBits(neededBits); - repDist += i; - } - outputWindow.Repeat(repLength, repDist); - free -= repLength; - mode = DECODE_HUFFMAN; - break; - default: - throw new FormatException(); - } - } - return true; - } - - /// - /// Decodes the adler checksum after the deflate stream. - /// - /// - /// false if more input is needed. - /// - /// - /// DataFormatException, if checksum doesn't match. - /// - private bool DecodeChksum() - { - while (neededBits > 0) { - int chkByte = input.PeekBits(8); - if (chkByte < 0) { - return false; - } - input.DropBits(8); - readAdler = (readAdler << 8) | chkByte; - neededBits -= 8; - } - if ((int) adler.Value != readAdler) { - throw new FormatException("Adler chksum doesn't match: " + (int)adler.Value + " vs. " + readAdler); - } - mode = FINISHED; - return false; - } - - /// - /// Decodes the deflated stream. - /// - /// - /// false if more input is needed, or if finished. - /// - /// - /// DataFormatException, if deflated stream is invalid. - /// - private bool Decode() - { - switch (mode) { - case DECODE_HEADER: - return DecodeHeader(); - case DECODE_DICT: - return DecodeDict(); - case DECODE_CHKSUM: - return DecodeChksum(); - - case DECODE_BLOCKS: - if (isLastBlock) { - if (nowrap) { - mode = FINISHED; - return false; - } else { - input.SkipToByteBoundary(); - neededBits = 32; - mode = DECODE_CHKSUM; - return true; - } - } - - int type = input.PeekBits(3); - if (type < 0) { - return false; - } - input.DropBits(3); - - if ((type & 1) != 0) { - isLastBlock = true; - } - switch (type >> 1){ - case DeflaterConstants.STORED_BLOCK: - input.SkipToByteBoundary(); - mode = DECODE_STORED_LEN1; - break; - case DeflaterConstants.STATIC_TREES: - litlenTree = InflaterHuffmanTree.defLitLenTree; - distTree = InflaterHuffmanTree.defDistTree; - mode = DECODE_HUFFMAN; - break; - case DeflaterConstants.DYN_TREES: - dynHeader = new InflaterDynHeader(); - mode = DECODE_DYN_HEADER; - break; - default: - throw new FormatException("Unknown block type "+type); - } - return true; - - case DECODE_STORED_LEN1: - { - if ((uncomprLen = input.PeekBits(16)) < 0) { - return false; - } - input.DropBits(16); - mode = DECODE_STORED_LEN2; - } - goto case DECODE_STORED_LEN2; /* fall through */ - case DECODE_STORED_LEN2: - { - int nlen = input.PeekBits(16); - if (nlen < 0) { - return false; - } - input.DropBits(16); - if (nlen != (uncomprLen ^ 0xffff)) { - throw new FormatException("broken uncompressed block"); - } - mode = DECODE_STORED; - } - goto case DECODE_STORED;/* fall through */ - case DECODE_STORED: - { - int more = outputWindow.CopyStored(input, uncomprLen); - uncomprLen -= more; - if (uncomprLen == 0) { - mode = DECODE_BLOCKS; - return true; - } - return !input.IsNeedingInput; - } - - case DECODE_DYN_HEADER: - if (!dynHeader.Decode(input)) { - return false; - } - - litlenTree = dynHeader.BuildLitLenTree(); - distTree = dynHeader.BuildDistTree(); - mode = DECODE_HUFFMAN; - goto case DECODE_HUFFMAN; /* fall through */ - case DECODE_HUFFMAN: - case DECODE_HUFFMAN_LENBITS: - case DECODE_HUFFMAN_DIST: - case DECODE_HUFFMAN_DISTBITS: - return DecodeHuffman(); - case FINISHED: - return false; - default: - throw new FormatException(); - } - } - - /// - /// Sets the preset dictionary. This should only be called, if - /// needsDictionary() returns true and it should set the same - /// dictionary, that was used for deflating. The getAdler() - /// function returns the checksum of the dictionary needed. - /// - /// - /// the dictionary. - /// - /// - /// if no dictionary is needed. - /// - /// - /// if the dictionary checksum is wrong. - /// - public void SetDictionary(byte[] buffer) - { - SetDictionary(buffer, 0, buffer.Length); - } - - /// - /// Sets the preset dictionary. This should only be called, if - /// needsDictionary() returns true and it should set the same - /// dictionary, that was used for deflating. The getAdler() - /// function returns the checksum of the dictionary needed. - /// - /// - /// the dictionary. - /// - /// - /// the offset into buffer where the dictionary starts. - /// - /// - /// the length of the dictionary. - /// - /// - /// if no dictionary is needed. - /// - /// - /// if the dictionary checksum is wrong. - /// - /// - /// if the off and/or len are wrong. - /// - public void SetDictionary(byte[] buffer, int off, int len) - { - if (!IsNeedingDictionary) { - throw new InvalidOperationException(); - } - - adler.Update(buffer, off, len); - if ((int)adler.Value != readAdler) { - throw new ArgumentException("Wrong adler checksum"); - } - adler.Reset(); - outputWindow.CopyDict(buffer, off, len); - mode = DECODE_BLOCKS; - } - - /// - /// Sets the input. This should only be called, if needsInput() - /// returns true. - /// - /// - /// the input. - /// - /// - /// if no input is needed. - /// - public void SetInput(byte[] buf) - { - SetInput(buf, 0, buf.Length); - } - - /// - /// Sets the input. This should only be called, if needsInput() - /// returns true. - /// - /// - /// the input. - /// - /// - /// the offset into buffer where the input starts. - /// - /// - /// the length of the input. - /// - /// - /// if no input is needed. - /// - /// - /// if the off and/or len are wrong. - /// - public void SetInput(byte[] buf, int off, int len) - { - input.SetInput(buf, off, len); - totalIn += len; - } - - /// - /// Inflates the compressed stream to the output buffer. If this - /// returns 0, you should check, whether needsDictionary(), - /// needsInput() or finished() returns true, to determine why no - /// further output is produced. - /// - /// - /// the output buffer. - /// - /// - /// the number of bytes written to the buffer, 0 if no further - /// output can be produced. - /// - /// - /// if buf has length 0. - /// - /// - /// if deflated stream is invalid. - /// - public int Inflate(byte[] buf) - { - return Inflate(buf, 0, buf.Length); - } - - /// - /// Inflates the compressed stream to the output buffer. If this - /// returns 0, you should check, whether needsDictionary(), - /// needsInput() or finished() returns true, to determine why no - /// further output is produced. - /// - /// - /// the output buffer. - /// - /// - /// the offset into buffer where the output should start. - /// - /// - /// the maximum length of the output. - /// - /// - /// the number of bytes written to the buffer, 0 if no further output can be produced. - /// - /// - /// if len is <= 0. - /// - /// - /// if the off and/or len are wrong. - /// - /// - /// if deflated stream is invalid. - /// - public int Inflate(byte[] buf, int off, int len) - { - if (len < 0) { - throw new ArgumentOutOfRangeException("len < 0"); - } - // Special case: len may be zero - if (len == 0) { - if (IsFinished == false) {// -jr- 08-Nov-2003 INFLATE_BUG fix.. - Decode(); - } - return 0; - } - /* // Check for correct buff, off, len triple - if (off < 0 || off + len >= buf.Length) { - throw new ArgumentException("off/len outside buf bounds"); - }*/ - int count = 0; - int more; - do { - if (mode != DECODE_CHKSUM) { - /* Don't give away any output, if we are waiting for the - * checksum in the input stream. - * - * With this trick we have always: - * needsInput() and not finished() - * implies more output can be produced. - */ - more = outputWindow.CopyOutput(buf, off, len); - adler.Update(buf, off, more); - off += more; - count += more; - totalOut += more; - len -= more; - if (len == 0) { - return count; - } - } - } while (Decode() || (outputWindow.GetAvailable() > 0 && mode != DECODE_CHKSUM)); - return count; - } - - /// - /// Returns true, if the input buffer is empty. - /// You should then call setInput(). - /// NOTE: This method also returns true when the stream is finished. - /// - public bool IsNeedingInput { - get { - return input.IsNeedingInput; - } - } - - /// - /// Returns true, if a preset dictionary is needed to inflate the input. - /// - public bool IsNeedingDictionary { - get { - return mode == DECODE_DICT && neededBits == 0; - } - } - - /// - /// Returns true, if the inflater has finished. This means, that no - /// input is needed and no output can be produced. - /// - public bool IsFinished { - get { - return mode == FINISHED && outputWindow.GetAvailable() == 0; - } - } - - /// - /// Gets the adler checksum. This is either the checksum of all - /// uncompressed bytes returned by inflate(), or if needsDictionary() - /// returns true (and thus no output was yet produced) this is the - /// adler checksum of the expected dictionary. - /// - /// - /// the adler checksum. - /// - public int Adler { - get { - return IsNeedingDictionary ? readAdler : (int) adler.Value; - } - } - - /// - /// Gets the total number of output bytes returned by inflate(). - /// - /// - /// the total number of output bytes. - /// - public int TotalOut { - get { - return totalOut; - } - } - - /// - /// Gets the total number of processed compressed input bytes. - /// - /// - /// the total number of bytes of processed input bytes. - /// - public int TotalIn { - get { - return totalIn - RemainingInput; - } - } - - /// - /// Gets the number of unprocessed input. Useful, if the end of the - /// stream is reached and you want to further process the bytes after - /// the deflate stream. - /// - /// - /// the number of bytes of the input which were not processed. - /// - public int RemainingInput { - get { - return input.AvailableBytes; - } - } - } -} diff --git a/irc/TechBot/Compression/InflaterDynHeader.cs b/irc/TechBot/Compression/InflaterDynHeader.cs deleted file mode 100644 index 653c7847cea..00000000000 --- a/irc/TechBot/Compression/InflaterDynHeader.cs +++ /dev/null @@ -1,207 +0,0 @@ -// InflaterDynHeader.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -using ICSharpCode.SharpZipLib.Zip.Compression.Streams; - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - class InflaterDynHeader - { - const int LNUM = 0; - const int DNUM = 1; - const int BLNUM = 2; - const int BLLENS = 3; - const int LENS = 4; - const int REPS = 5; - - static readonly int[] repMin = { 3, 3, 11 }; - static readonly int[] repBits = { 2, 3, 7 }; - - byte[] blLens; - byte[] litdistLens; - - InflaterHuffmanTree blTree; - - int mode; - int lnum, dnum, blnum, num; - int repSymbol; - byte lastLen; - int ptr; - - static readonly int[] BL_ORDER = - { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; - - public InflaterDynHeader() - { - } - - public bool Decode(StreamManipulator input) - { - decode_loop: - for (;;) { - switch (mode) { - case LNUM: - lnum = input.PeekBits(5); - if (lnum < 0) { - return false; - } - lnum += 257; - input.DropBits(5); - // System.err.println("LNUM: "+lnum); - mode = DNUM; - goto case DNUM; // fall through - case DNUM: - dnum = input.PeekBits(5); - if (dnum < 0) { - return false; - } - dnum++; - input.DropBits(5); - // System.err.println("DNUM: "+dnum); - num = lnum+dnum; - litdistLens = new byte[num]; - mode = BLNUM; - goto case BLNUM; // fall through - case BLNUM: - blnum = input.PeekBits(4); - if (blnum < 0) { - return false; - } - blnum += 4; - input.DropBits(4); - blLens = new byte[19]; - ptr = 0; - // System.err.println("BLNUM: "+blnum); - mode = BLLENS; - goto case BLLENS; // fall through - case BLLENS: - while (ptr < blnum) { - int len = input.PeekBits(3); - if (len < 0) { - return false; - } - input.DropBits(3); - // System.err.println("blLens["+BL_ORDER[ptr]+"]: "+len); - blLens[BL_ORDER[ptr]] = (byte) len; - ptr++; - } - blTree = new InflaterHuffmanTree(blLens); - blLens = null; - ptr = 0; - mode = LENS; - goto case LENS; // fall through - case LENS: - { - int symbol; - while (((symbol = blTree.GetSymbol(input)) & ~15) == 0) { - /* Normal case: symbol in [0..15] */ - - // System.err.println("litdistLens["+ptr+"]: "+symbol); - litdistLens[ptr++] = lastLen = (byte)symbol; - - if (ptr == num) { - /* Finished */ - return true; - } - } - - /* need more input ? */ - if (symbol < 0) { - return false; - } - - /* otherwise repeat code */ - if (symbol >= 17) { - /* repeat zero */ - // System.err.println("repeating zero"); - lastLen = 0; - } else { - if (ptr == 0) { - throw new Exception(); - } - } - repSymbol = symbol-16; - } - mode = REPS; - goto case REPS; // fall through - case REPS: - { - int bits = repBits[repSymbol]; - int count = input.PeekBits(bits); - if (count < 0) { - return false; - } - input.DropBits(bits); - count += repMin[repSymbol]; - // System.err.println("litdistLens repeated: "+count); - - if (ptr + count > num) { - throw new Exception(); - } - while (count-- > 0) { - litdistLens[ptr++] = lastLen; - } - - if (ptr == num) { - /* Finished */ - return true; - } - } - mode = LENS; - goto decode_loop; - } - } - } - - public InflaterHuffmanTree BuildLitLenTree() - { - byte[] litlenLens = new byte[lnum]; - Array.Copy(litdistLens, 0, litlenLens, 0, lnum); - return new InflaterHuffmanTree(litlenLens); - } - - public InflaterHuffmanTree BuildDistTree() - { - byte[] distLens = new byte[dnum]; - Array.Copy(litdistLens, lnum, distLens, 0, dnum); - return new InflaterHuffmanTree(distLens); - } - } -} diff --git a/irc/TechBot/Compression/InflaterHuffmanTree.cs b/irc/TechBot/Compression/InflaterHuffmanTree.cs deleted file mode 100644 index 02beb60a34c..00000000000 --- a/irc/TechBot/Compression/InflaterHuffmanTree.cs +++ /dev/null @@ -1,213 +0,0 @@ -// InflaterHuffmanTree.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -using ICSharpCode.SharpZipLib.Zip.Compression.Streams; - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - public class InflaterHuffmanTree - { - private static int MAX_BITLEN = 15; - private short[] tree; - - public static InflaterHuffmanTree defLitLenTree, defDistTree; - - static InflaterHuffmanTree() - { - try { - byte[] codeLengths = new byte[288]; - int i = 0; - while (i < 144) { - codeLengths[i++] = 8; - } - while (i < 256) { - codeLengths[i++] = 9; - } - while (i < 280) { - codeLengths[i++] = 7; - } - while (i < 288) { - codeLengths[i++] = 8; - } - defLitLenTree = new InflaterHuffmanTree(codeLengths); - - codeLengths = new byte[32]; - i = 0; - while (i < 32) { - codeLengths[i++] = 5; - } - defDistTree = new InflaterHuffmanTree(codeLengths); - } catch (Exception) { - throw new ApplicationException("InflaterHuffmanTree: static tree length illegal"); - } - } - - /// - /// Constructs a Huffman tree from the array of code lengths. - /// - /// - /// the array of code lengths - /// - public InflaterHuffmanTree(byte[] codeLengths) - { - BuildTree(codeLengths); - } - - private void BuildTree(byte[] codeLengths) - { - int[] blCount = new int[MAX_BITLEN + 1]; - int[] nextCode = new int[MAX_BITLEN + 1]; - - for (int i = 0; i < codeLengths.Length; i++) { - int bits = codeLengths[i]; - if (bits > 0) { - blCount[bits]++; - } - } - - int code = 0; - int treeSize = 512; - for (int bits = 1; bits <= MAX_BITLEN; bits++) { - nextCode[bits] = code; - code += blCount[bits] << (16 - bits); - if (bits >= 10) { - /* We need an extra table for bit lengths >= 10. */ - int start = nextCode[bits] & 0x1ff80; - int end = code & 0x1ff80; - treeSize += (end - start) >> (16 - bits); - } - } -/* -jr comment this out! doesnt work for dynamic trees and pkzip 2.04g - if (code != 65536) - { - throw new Exception("Code lengths don't add up properly."); - } -*/ - /* Now create and fill the extra tables from longest to shortest - * bit len. This way the sub trees will be aligned. - */ - tree = new short[treeSize]; - int treePtr = 512; - for (int bits = MAX_BITLEN; bits >= 10; bits--) { - int end = code & 0x1ff80; - code -= blCount[bits] << (16 - bits); - int start = code & 0x1ff80; - for (int i = start; i < end; i += 1 << 7) { - tree[DeflaterHuffman.BitReverse(i)] = (short) ((-treePtr << 4) | bits); - treePtr += 1 << (bits-9); - } - } - - for (int i = 0; i < codeLengths.Length; i++) { - int bits = codeLengths[i]; - if (bits == 0) { - continue; - } - code = nextCode[bits]; - int revcode = DeflaterHuffman.BitReverse(code); - if (bits <= 9) { - do { - tree[revcode] = (short) ((i << 4) | bits); - revcode += 1 << bits; - } while (revcode < 512); - } else { - int subTree = tree[revcode & 511]; - int treeLen = 1 << (subTree & 15); - subTree = -(subTree >> 4); - do { - tree[subTree | (revcode >> 9)] = (short) ((i << 4) | bits); - revcode += 1 << bits; - } while (revcode < treeLen); - } - nextCode[bits] = code + (1 << (16 - bits)); - } - - } - - /// - /// Reads the next symbol from input. The symbol is encoded using the - /// huffman tree. - /// - /// - /// input the input source. - /// - /// - /// the next symbol, or -1 if not enough input is available. - /// - public int GetSymbol(StreamManipulator input) - { - int lookahead, symbol; - if ((lookahead = input.PeekBits(9)) >= 0) { - if ((symbol = tree[lookahead]) >= 0) { - input.DropBits(symbol & 15); - return symbol >> 4; - } - int subtree = -(symbol >> 4); - int bitlen = symbol & 15; - if ((lookahead = input.PeekBits(bitlen)) >= 0) { - symbol = tree[subtree | (lookahead >> 9)]; - input.DropBits(symbol & 15); - return symbol >> 4; - } else { - int bits = input.AvailableBits; - lookahead = input.PeekBits(bits); - symbol = tree[subtree | (lookahead >> 9)]; - if ((symbol & 15) <= bits) { - input.DropBits(symbol & 15); - return symbol >> 4; - } else { - return -1; - } - } - } else { - int bits = input.AvailableBits; - lookahead = input.PeekBits(bits); - symbol = tree[lookahead]; - if (symbol >= 0 && (symbol & 15) <= bits) { - input.DropBits(symbol & 15); - return symbol >> 4; - } else { - return -1; - } - } - } - } -} - diff --git a/irc/TechBot/Compression/PendingBuffer.cs b/irc/TechBot/Compression/PendingBuffer.cs deleted file mode 100644 index e0bc96b9192..00000000000 --- a/irc/TechBot/Compression/PendingBuffer.cs +++ /dev/null @@ -1,210 +0,0 @@ -// PendingBuffer.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Zip.Compression -{ - - /// - /// This class is general purpose class for writing data to a buffer. - /// - /// It allows you to write bits as well as bytes - /// Based on DeflaterPending.java - /// - /// author of the original java version : Jochen Hoenicke - /// - public class PendingBuffer - { - protected byte[] buf; - int start; - int end; - - uint bits; - int bitCount; - - public PendingBuffer() : this( 4096 ) - { - - } - - public PendingBuffer(int bufsize) - { - buf = new byte[bufsize]; - } - - public void Reset() - { - start = end = bitCount = 0; - } - - public void WriteByte(int b) - { - if (DeflaterConstants.DEBUGGING && start != 0) { - throw new Exception(); - } - buf[end++] = (byte) b; - } - - public void WriteShort(int s) - { - if (DeflaterConstants.DEBUGGING && start != 0) { - throw new Exception(); - } - buf[end++] = (byte) s; - buf[end++] = (byte) (s >> 8); - } - - public void WriteInt(int s) - { - if (DeflaterConstants.DEBUGGING && start != 0) { - throw new Exception(); - } - buf[end++] = (byte) s; - buf[end++] = (byte) (s >> 8); - buf[end++] = (byte) (s >> 16); - buf[end++] = (byte) (s >> 24); - } - - public void WriteBlock(byte[] block, int offset, int len) - { - if (DeflaterConstants.DEBUGGING && start != 0) { - throw new Exception(); - } - System.Array.Copy(block, offset, buf, end, len); - end += len; - } - - public int BitCount { - get { - return bitCount; - } - } - - public void AlignToByte() - { - if (DeflaterConstants.DEBUGGING && start != 0) { - throw new Exception(); - } - if (bitCount > 0) { - buf[end++] = (byte) bits; - if (bitCount > 8) { - buf[end++] = (byte) (bits >> 8); - } - } - bits = 0; - bitCount = 0; - } - - public void WriteBits(int b, int count) - { - if (DeflaterConstants.DEBUGGING && start != 0) { - throw new Exception(); - } - // if (DeflaterConstants.DEBUGGING) { - // //Console.WriteLine("writeBits("+b+","+count+")"); - // } - bits |= (uint)(b << bitCount); - bitCount += count; - if (bitCount >= 16) { - buf[end++] = (byte) bits; - buf[end++] = (byte) (bits >> 8); - bits >>= 16; - bitCount -= 16; - } - } - - public void WriteShortMSB(int s) - { - if (DeflaterConstants.DEBUGGING && start != 0) { - throw new Exception(); - } - buf[end++] = (byte) (s >> 8); - buf[end++] = (byte) s; - } - - public bool IsFlushed { - get { - return end == 0; - } - } - - /// - /// Flushes the pending buffer into the given output array. If the - /// output array is to small, only a partial flush is done. - /// - /// - /// the output array; - /// - /// - /// the offset into output array; - /// - /// - /// length the maximum number of bytes to store; - /// - /// - /// IndexOutOfBoundsException if offset or length are invalid. - /// - public int Flush(byte[] output, int offset, int length) - { - if (bitCount >= 8) { - buf[end++] = (byte) bits; - bits >>= 8; - bitCount -= 8; - } - if (length > end - start) { - length = end - start; - System.Array.Copy(buf, start, output, offset, length); - start = 0; - end = 0; - } else { - System.Array.Copy(buf, start, output, offset, length); - start += length; - } - return length; - } - - public byte[] ToByteArray() - { - byte[] ret = new byte[end - start]; - System.Array.Copy(buf, start, ret, 0, ret.Length); - start = 0; - end = 0; - return ret; - } - } -} diff --git a/irc/TechBot/Compression/Streams/DeflaterOutputStream.cs b/irc/TechBot/Compression/Streams/DeflaterOutputStream.cs deleted file mode 100644 index dd8c658e843..00000000000 --- a/irc/TechBot/Compression/Streams/DeflaterOutputStream.cs +++ /dev/null @@ -1,379 +0,0 @@ -// DeflaterOutputStream.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; -using System.IO; -using ICSharpCode.SharpZipLib.Checksums; -using ICSharpCode.SharpZipLib.Zip.Compression; - -namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams -{ - - /// - /// This is a special FilterOutputStream deflating the bytes that are - /// written through it. It uses the Deflater for deflating. - /// - /// authors of the original java version : Tom Tromey, Jochen Hoenicke - /// - public class DeflaterOutputStream : Stream - { - /// - /// This buffer is used temporarily to retrieve the bytes from the - /// deflater and write them to the underlying output stream. - /// - protected byte[] buf; - - /// - /// The deflater which is used to deflate the stream. - /// - protected Deflater def; - - /// - /// base stream the deflater depends on. - /// - protected Stream baseOutputStream; - - /// - /// I needed to implement the abstract member. - /// - public override bool CanRead { - get { - return baseOutputStream.CanRead; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override bool CanSeek { - get { - return false; -// return baseOutputStream.CanSeek; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override bool CanWrite { - get { - return baseOutputStream.CanWrite; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override long Length { - get { - return baseOutputStream.Length; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override long Position { - get { - return baseOutputStream.Position; - } - set { - baseOutputStream.Position = value; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotSupportedException("Seek not supported"); // -jr- 01-Dec-2003 -// return baseOutputStream.Seek(offset, origin); - } - - /// - /// I needed to implement the abstract member. - /// - public override void SetLength(long val) - { - baseOutputStream.SetLength(val); - } - - /// - /// I needed to implement the abstract member. - /// - public override int ReadByte() - { - return baseOutputStream.ReadByte(); - } - - /// - /// I needed to implement the abstract member. - /// - public override int Read(byte[] b, int off, int len) - { - return baseOutputStream.Read(b, off, len); - } - // -jr- 01-Dec-2003 - public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) - { - throw new NotSupportedException("Asynch read not currently supported"); - } - - // -jr- 01-Dec-2003 - public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) - { - throw new NotSupportedException("Asynch write not currently supported"); - } - - /// - /// Deflates everything in the def's input buffers. This will call - /// def.deflate() until all bytes from the input buffers - /// are processed. - /// - protected void Deflate() - { - while (!def.IsNeedingInput) { - int len = def.Deflate(buf, 0, buf.Length); - - // System.err.println("DOS deflated " + len + " baseOutputStream of " + buf.length); - if (len <= 0) { - break; - } - baseOutputStream.Write(buf, 0, len); - } - - if (!def.IsNeedingInput) { - throw new ApplicationException("Can't deflate all input?"); - } - } - - /// - /// Creates a new DeflaterOutputStream with a default Deflater and default buffer size. - /// - /// - /// the output stream where deflated output should be written. - /// - public DeflaterOutputStream(Stream baseOutputStream) : this(baseOutputStream, new Deflater(), 512) - { - } - - /// - /// Creates a new DeflaterOutputStream with the given Deflater and - /// default buffer size. - /// - /// - /// the output stream where deflated output should be written. - /// - /// - /// the underlying deflater. - /// - public DeflaterOutputStream(Stream baseOutputStream, Deflater defl) :this(baseOutputStream, defl, 512) - { - } - - /// - /// Creates a new DeflaterOutputStream with the given Deflater and - /// buffer size. - /// - /// - /// the output stream where deflated output should be written. - /// - /// - /// the underlying deflater. - /// - /// - /// the buffer size. - /// - /// - /// if bufsize isn't positive. - /// - public DeflaterOutputStream(Stream baseOutputStream, Deflater defl, int bufsize) - { - this.baseOutputStream = baseOutputStream; - if (bufsize <= 0) { - throw new InvalidOperationException("bufsize <= 0"); - } - buf = new byte[bufsize]; - def = defl; - } - - /// - /// Flushes the stream by calling flush() on the deflater and then - /// on the underlying stream. This ensures that all bytes are - /// flushed. - /// - public override void Flush() - { - def.Flush(); - Deflate(); - baseOutputStream.Flush(); - } - - /// - /// Finishes the stream by calling finish() on the deflater. - /// - public virtual void Finish() - { - def.Finish(); - while (!def.IsFinished) { - int len = def.Deflate(buf, 0, buf.Length); - if (len <= 0) { - break; - } - - // kidnthrain encryption alteration - if (this.Password != null) { - // plain data has been deflated. Now encrypt result - this.EncryptBlock(buf, 0, len); - } - - baseOutputStream.Write(buf, 0, len); - } - if (!def.IsFinished) { - throw new ApplicationException("Can't deflate all input?"); - } - baseOutputStream.Flush(); - } - - /// - /// Calls finish () and closes the stream. - /// - public override void Close() - { - Finish(); - baseOutputStream.Close(); - } - - /// - /// Writes a single byte to the compressed output stream. - /// - /// - /// the byte value. - /// - public override void WriteByte(byte bval) - { - byte[] b = new byte[1]; - b[0] = (byte) bval; - Write(b, 0, 1); - } - - /// - /// Writes a len bytes from an array to the compressed stream. - /// - /// - /// the byte array. - /// - /// - /// the offset into the byte array where to start. - /// - /// - /// the number of bytes to write. - /// - public override void Write(byte[] buf, int off, int len) - { - // System.err.println("DOS with off " + off + " and len " + len); - def.SetInput(buf, off, len); - Deflate(); - } - - #region Encryption - string password = null; - uint[] keys = null; - - public string Password { - get { - return password; - } - set { - password = value; - } - } - - - //The beauty of xor-ing bits is that - //plain ^ key = enc - //and enc ^ key = plain - //accordingly, this is the exact same as the decrypt byte - //function in InflaterInputStream - protected byte EncryptByte() - { - uint temp = ((keys[2] & 0xFFFF) | 2); - return (byte)((temp * (temp ^ 1)) >> 8); - } - - - /// - /// Takes a buffer of data and uses the keys - /// that have been previously initialized from a - /// password and then updated via a random encryption header - /// to encrypt that data - /// - protected void EncryptBlock(byte[] buf, int off, int len) - { - for (int i = off; i < off + len; ++i) { - byte oldbyte = buf[i]; - buf[i] ^= EncryptByte(); - UpdateKeys(oldbyte); - } - } - - /// - /// Initializes our encryption keys using a given password - /// - protected void InitializePassword(string password) { - keys = new uint[] { - 0x12345678, - 0x23456789, - 0x34567890 - }; - - for (int i = 0; i < password.Length; ++i) { - UpdateKeys((byte)password[i]); - } - } - - protected void UpdateKeys(byte ch) - { - keys[0] = Crc32.ComputeCrc32(keys[0], ch); - keys[1] = keys[1] + (byte)keys[0]; - keys[1] = keys[1] * 134775813 + 1; - keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24)); - } - #endregion - } -} diff --git a/irc/TechBot/Compression/Streams/InflaterInputStream.cs b/irc/TechBot/Compression/Streams/InflaterInputStream.cs deleted file mode 100644 index 9317e5e185d..00000000000 --- a/irc/TechBot/Compression/Streams/InflaterInputStream.cs +++ /dev/null @@ -1,386 +0,0 @@ -// InflaterInputStream.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; -using System.IO; - -using ICSharpCode.SharpZipLib.Zip.Compression; -using ICSharpCode.SharpZipLib.Checksums; - -namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams -{ - - /// - /// This filter stream is used to decompress data compressed baseInputStream the "deflate" - /// format. The "deflate" format is described baseInputStream RFC 1951. - /// - /// This stream may form the basis for other decompression filters, such - /// as the GzipInputStream. - /// - /// author of the original java version : John Leuner - /// - public class InflaterInputStream : Stream - { - //Variables - - /// - /// Decompressor for this filter - /// - protected Inflater inf; - - /// - /// Byte array used as a buffer - /// - protected byte[] buf; - - /// - /// Size of buffer - /// - protected int len; - - //We just use this if we are decoding one byte at a time with the read() call - private byte[] onebytebuffer = new byte[1]; - - /// - /// base stream the inflater depends on. - /// - protected Stream baseInputStream; - - protected long csize; - - /// - /// I needed to implement the abstract member. - /// - public override bool CanRead { - get { - return baseInputStream.CanRead; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override bool CanSeek { - get { - return false; - // return baseInputStream.CanSeek; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override bool CanWrite { - get { - return baseInputStream.CanWrite; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override long Length { - get { - return len; - } - } - - /// - /// I needed to implement the abstract member. - /// - public override long Position { - get { - return baseInputStream.Position; - } - set { - baseInputStream.Position = value; - } - } - - /// - /// Flushes the baseInputStream - /// - public override void Flush() - { - baseInputStream.Flush(); - } - - /// - /// I needed to implement the abstract member. - /// - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotSupportedException("Seek not supported"); // -jr- 01-Dec-2003 - } - - /// - /// I needed to implement the abstract member. - /// - public override void SetLength(long val) - { - baseInputStream.SetLength(val); - } - - /// - /// I needed to implement the abstract member. - /// - public override void Write(byte[] array, int offset, int count) - { - baseInputStream.Write(array, offset, count); - } - - /// - /// I needed to implement the abstract member. - /// - public override void WriteByte(byte val) - { - baseInputStream.WriteByte(val); - } - - // -jr- 01-Dec-2003 This may be flawed for some base streams? Depends on implementation of BeginWrite - public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) - { - throw new NotSupportedException("Asynch write not currently supported"); - } - - //Constructors - - /// - /// Create an InflaterInputStream with the default decompresseor - /// and a default buffer size. - /// - /// - /// the InputStream to read bytes from - /// - public InflaterInputStream(Stream baseInputStream) : this(baseInputStream, new Inflater(), 4096) - { - - } - - /// - /// Create an InflaterInputStream with the specified decompresseor - /// and a default buffer size. - /// - /// - /// the InputStream to read bytes from - /// - /// - /// the decompressor used to decompress data read from baseInputStream - /// - public InflaterInputStream(Stream baseInputStream, Inflater inf) : this(baseInputStream, inf, 4096) - { - } - - /// - /// Create an InflaterInputStream with the specified decompresseor - /// and a specified buffer size. - /// - /// - /// the InputStream to read bytes from - /// - /// - /// the decompressor used to decompress data read from baseInputStream - /// - /// - /// size of the buffer to use - /// - public InflaterInputStream(Stream baseInputStream, Inflater inf, int size) - { - this.baseInputStream = baseInputStream; - this.inf = inf; - try { - this.len = (int)baseInputStream.Length; - } catch (Exception) { - // the stream may not support .Length - this.len = 0; - } - - if (size <= 0) { - throw new ArgumentOutOfRangeException("size <= 0"); - } - - buf = new byte[size]; //Create the buffer - } - - //Methods - - /// - /// Returns 0 once the end of the stream (EOF) has been reached. - /// Otherwise returns 1. - /// - public virtual int Available { - get { - return inf.IsFinished ? 0 : 1; - } - } - - /// - /// Closes the input stream - /// - public override void Close() - { - baseInputStream.Close(); - } - - /// - /// Fills the buffer with more data to decompress. - /// - protected void Fill() - { - len = baseInputStream.Read(buf, 0, buf.Length); - // decrypting crypted data - if (cryptbuffer != null) { - DecryptBlock(buf, 0, System.Math.Min((int)(csize - inf.TotalIn), buf.Length)); - } - - if (len <= 0) { - throw new ApplicationException("Deflated stream ends early."); - } - inf.SetInput(buf, 0, len); - } - - /// - /// Reads one byte of decompressed data. - /// - /// The byte is baseInputStream the lower 8 bits of the int. - /// - public override int ReadByte() - { - int nread = Read(onebytebuffer, 0, 1); //read one byte - if (nread > 0) { - return onebytebuffer[0] & 0xff; - } - return -1; // ok - } - - /// - /// Decompresses data into the byte array - /// - /// - /// the array to read and decompress data into - /// - /// - /// the offset indicating where the data should be placed - /// - /// - /// the number of bytes to decompress - /// - public override int Read(byte[] b, int off, int len) - { - for (;;) { - int count; - try { - count = inf.Inflate(b, off, len); - } catch (Exception e) { - throw new ZipException(e.ToString()); - } - - if (count > 0) { - return count; - } - - if (inf.IsNeedingDictionary) { - throw new ZipException("Need a dictionary"); - } else if (inf.IsFinished) { - return 0; - } else if (inf.IsNeedingInput) { - Fill(); - } else { - throw new InvalidOperationException("Don't know what to do"); - } - } - } - - /// - /// Skip specified number of bytes of uncompressed data - /// - /// - /// number of bytes to skip - /// - public long Skip(long n) - { - if (n < 0) { - throw new ArgumentOutOfRangeException("n"); - } - int len = 2048; - if (n < len) { - len = (int) n; - } - byte[] tmp = new byte[len]; - return (long)baseInputStream.Read(tmp, 0, tmp.Length); - } - - #region Encryption stuff - protected byte[] cryptbuffer = null; - - uint[] keys = null; - protected byte DecryptByte() - { - uint temp = ((keys[2] & 0xFFFF) | 2); - return (byte)((temp * (temp ^ 1)) >> 8); - } - - protected void DecryptBlock(byte[] buf, int off, int len) - { - for (int i = off; i < off + len; ++i) { - buf[i] ^= DecryptByte(); - UpdateKeys(buf[i]); - } - } - - protected void InitializePassword(string password) - { - keys = new uint[] { - 0x12345678, - 0x23456789, - 0x34567890 - }; - for (int i = 0; i < password.Length; ++i) { - UpdateKeys((byte)password[i]); - } - } - - protected void UpdateKeys(byte ch) - { - keys[0] = Crc32.ComputeCrc32(keys[0], ch); - keys[1] = keys[1] + (byte)keys[0]; - keys[1] = keys[1] * 134775813 + 1; - keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24)); - } - #endregion - } -} diff --git a/irc/TechBot/Compression/Streams/OutputWindow.cs b/irc/TechBot/Compression/Streams/OutputWindow.cs deleted file mode 100644 index 426c1f752d3..00000000000 --- a/irc/TechBot/Compression/Streams/OutputWindow.cs +++ /dev/null @@ -1,176 +0,0 @@ -// OutputWindow.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams -{ - - /// - /// Contains the output from the Inflation process. - /// We need to have a window so that we can refer backwards into the output stream - /// to repeat stuff. - /// - /// author of the original java version : John Leuner - /// - public class OutputWindow - { - private static int WINDOW_SIZE = 1 << 15; - private static int WINDOW_MASK = WINDOW_SIZE - 1; - - private byte[] window = new byte[WINDOW_SIZE]; //The window is 2^15 bytes - private int windowEnd = 0; - private int windowFilled = 0; - - public void Write(int abyte) - { - if (windowFilled++ == WINDOW_SIZE) { - throw new InvalidOperationException("Window full"); - } - window[windowEnd++] = (byte) abyte; - windowEnd &= WINDOW_MASK; - } - - - private void SlowRepeat(int repStart, int len, int dist) - { - while (len-- > 0) { - window[windowEnd++] = window[repStart++]; - windowEnd &= WINDOW_MASK; - repStart &= WINDOW_MASK; - } - } - - public void Repeat(int len, int dist) - { - if ((windowFilled += len) > WINDOW_SIZE) { - throw new InvalidOperationException("Window full"); - } - - int rep_start = (windowEnd - dist) & WINDOW_MASK; - int border = WINDOW_SIZE - len; - if (rep_start <= border && windowEnd < border) { - if (len <= dist) { - System.Array.Copy(window, rep_start, window, windowEnd, len); - windowEnd += len; - } else { - /* We have to copy manually, since the repeat pattern overlaps. - */ - while (len-- > 0) { - window[windowEnd++] = window[rep_start++]; - } - } - } else { - SlowRepeat(rep_start, len, dist); - } - } - - public int CopyStored(StreamManipulator input, int len) - { - len = Math.Min(Math.Min(len, WINDOW_SIZE - windowFilled), input.AvailableBytes); - int copied; - - int tailLen = WINDOW_SIZE - windowEnd; - if (len > tailLen) { - copied = input.CopyBytes(window, windowEnd, tailLen); - if (copied == tailLen) { - copied += input.CopyBytes(window, 0, len - tailLen); - } - } else { - copied = input.CopyBytes(window, windowEnd, len); - } - - windowEnd = (windowEnd + copied) & WINDOW_MASK; - windowFilled += copied; - return copied; - } - - public void CopyDict(byte[] dict, int offset, int len) - { - if (windowFilled > 0) { - throw new InvalidOperationException(); - } - - if (len > WINDOW_SIZE) { - offset += len - WINDOW_SIZE; - len = WINDOW_SIZE; - } - System.Array.Copy(dict, offset, window, 0, len); - windowEnd = len & WINDOW_MASK; - } - - public int GetFreeSpace() - { - return WINDOW_SIZE - windowFilled; - } - - public int GetAvailable() - { - return windowFilled; - } - - public int CopyOutput(byte[] output, int offset, int len) - { - int copy_end = windowEnd; - if (len > windowFilled) { - len = windowFilled; - } else { - copy_end = (windowEnd - windowFilled + len) & WINDOW_MASK; - } - - int copied = len; - int tailLen = len - copy_end; - - if (tailLen > 0) { - System.Array.Copy(window, WINDOW_SIZE - tailLen, output, offset, tailLen); - offset += tailLen; - len = copy_end; - } - System.Array.Copy(window, copy_end - len, output, offset, len); - windowFilled -= copied; - if (windowFilled < 0) { - throw new InvalidOperationException(); - } - return copied; - } - - public void Reset() - { - windowFilled = windowEnd = 0; - } - } -} diff --git a/irc/TechBot/Compression/Streams/StreamManipulator.cs b/irc/TechBot/Compression/Streams/StreamManipulator.cs deleted file mode 100644 index 35f98cc4f76..00000000000 --- a/irc/TechBot/Compression/Streams/StreamManipulator.cs +++ /dev/null @@ -1,245 +0,0 @@ -// StreamManipulator.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams -{ - - /// - /// This class allows us to retrieve a specified amount of bits from - /// the input buffer, as well as copy big byte blocks. - /// - /// It uses an int buffer to store up to 31 bits for direct - /// manipulation. This guarantees that we can get at least 16 bits, - /// but we only need at most 15, so this is all safe. - /// - /// There are some optimizations in this class, for example, you must - /// never peek more then 8 bits more than needed, and you must first - /// peek bits before you may drop them. This is not a general purpose - /// class but optimized for the behaviour of the Inflater. - /// - /// authors of the original java version : John Leuner, Jochen Hoenicke - /// - public class StreamManipulator - { - private byte[] window; - private int window_start = 0; - private int window_end = 0; - - private uint buffer = 0; - private int bits_in_buffer = 0; - - /// - /// Get the next n bits but don't increase input pointer. n must be - /// less or equal 16 and if you if this call succeeds, you must drop - /// at least n-8 bits in the next call. - /// - /// - /// the value of the bits, or -1 if not enough bits available. */ - /// - public int PeekBits(int n) - { - if (bits_in_buffer < n) { - if (window_start == window_end) { - return -1; // ok - } - buffer |= (uint)((window[window_start++] & 0xff | - (window[window_start++] & 0xff) << 8) << bits_in_buffer); - bits_in_buffer += 16; - } - return (int)(buffer & ((1 << n) - 1)); - } - - /// - /// Drops the next n bits from the input. You should have called peekBits - /// with a bigger or equal n before, to make sure that enough bits are in - /// the bit buffer. - /// - public void DropBits(int n) - { - buffer >>= n; - bits_in_buffer -= n; - } - - /// - /// Gets the next n bits and increases input pointer. This is equivalent - /// to peekBits followed by dropBits, except for correct error handling. - /// - /// - /// the value of the bits, or -1 if not enough bits available. - /// - public int GetBits(int n) - { - int bits = PeekBits(n); - if (bits >= 0) { - DropBits(n); - } - return bits; - } - - /// - /// Gets the number of bits available in the bit buffer. This must be - /// only called when a previous peekBits() returned -1. - /// - /// - /// the number of bits available. - /// - public int AvailableBits { - get { - return bits_in_buffer; - } - } - - /// - /// Gets the number of bytes available. - /// - /// - /// the number of bytes available. - /// - public int AvailableBytes { - get { - return window_end - window_start + (bits_in_buffer >> 3); - } - } - - /// - /// Skips to the next byte boundary. - /// - public void SkipToByteBoundary() - { - buffer >>= (bits_in_buffer & 7); - bits_in_buffer &= ~7; - } - - public bool IsNeedingInput { - get { - return window_start == window_end; - } - } - - /// - /// Copies length bytes from input buffer to output buffer starting - /// at output[offset]. You have to make sure, that the buffer is - /// byte aligned. If not enough bytes are available, copies fewer - /// bytes. - /// - /// - /// the buffer. - /// - /// - /// the offset in the buffer. - /// - /// - /// the length to copy, 0 is allowed. - /// - /// - /// the number of bytes copied, 0 if no byte is available. - /// - public int CopyBytes(byte[] output, int offset, int length) - { - if (length < 0) { - throw new ArgumentOutOfRangeException("length negative"); - } - if ((bits_in_buffer & 7) != 0) { - /* bits_in_buffer may only be 0 or 8 */ - throw new InvalidOperationException("Bit buffer is not aligned!"); - } - - int count = 0; - while (bits_in_buffer > 0 && length > 0) { - output[offset++] = (byte) buffer; - buffer >>= 8; - bits_in_buffer -= 8; - length--; - count++; - } - if (length == 0) { - return count; - } - - int avail = window_end - window_start; - if (length > avail) { - length = avail; - } - System.Array.Copy(window, window_start, output, offset, length); - window_start += length; - - if (((window_start - window_end) & 1) != 0) { - /* We always want an even number of bytes in input, see peekBits */ - buffer = (uint)(window[window_start++] & 0xff); - bits_in_buffer = 8; - } - return count + length; - } - - public StreamManipulator() - { - } - - public void Reset() - { - buffer = (uint)(window_start = window_end = bits_in_buffer = 0); - } - - public void SetInput(byte[] buf, int off, int len) - { - if (window_start < window_end) { - throw new InvalidOperationException("Old input was not completely processed"); - } - - int end = off + len; - - /* We want to throw an ArrayIndexOutOfBoundsException early. The - * check is very tricky: it also handles integer wrap around. - */ - if (0 > off || off > end || end > buf.Length) { - throw new ArgumentOutOfRangeException(); - } - - if ((len & 1) != 0) { - /* We always want an even number of bytes in input, see peekBits */ - buffer |= (uint)((buf[off++] & 0xff) << bits_in_buffer); - bits_in_buffer += 8; - } - - window = buf; - window_start = off; - window_end = end; - } - } -} diff --git a/irc/TechBot/Compression/ZipException.cs b/irc/TechBot/Compression/ZipException.cs deleted file mode 100644 index b342592569a..00000000000 --- a/irc/TechBot/Compression/ZipException.cs +++ /dev/null @@ -1,62 +0,0 @@ -// ZipException.cs -// Copyright (C) 2001 Mike Krueger -// -// This file was translated from java, it was part of the GNU Classpath -// Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. -// -// 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. -// -// Linking this library statically or dynamically with other modules is -// making a combined work based on this library. Thus, the terms and -// conditions of the GNU General Public License cover the whole -// combination. -// -// As a special exception, the copyright holders of this library give you -// permission to link this library with independent modules to produce an -// executable, regardless of the license terms of these independent -// modules, and to copy and distribute the resulting executable under -// terms of your choice, provided that you also meet, for each linked -// independent module, the terms and conditions of the license of that -// module. An independent module is a module which is not derived from -// or based on this library. If you modify this library, you may extend -// this exception to your version of the library, but you are not -// obligated to do so. If you do not wish to do so, delete this -// exception statement from your version. - -using System; - -namespace ICSharpCode.SharpZipLib -{ - - /// - /// Is thrown during the creation or input of a zip file. - /// - public class ZipException : Exception - { - /// - /// Initializes a new instance of the ZipException class with default properties. - /// - public ZipException() - { - } - - /// - /// Initializes a new instance of the ZipException class with a specified error message. - /// - public ZipException(string msg) : base(msg) - { - } - } -} diff --git a/irc/TechBot/Resources/hresult.xml b/irc/TechBot/Resources/hresult.xml deleted file mode 100644 index 68e5bdc55e2..00000000000 --- a/irc/TechBot/Resources/hresult.xml +++ /dev/null @@ -1,1088 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/irc/TechBot/Resources/ntstatus.xml b/irc/TechBot/Resources/ntstatus.xml deleted file mode 100644 index 2e99a3bd13d..00000000000 --- a/irc/TechBot/Resources/ntstatus.xml +++ /dev/null @@ -1,1111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/irc/TechBot/Resources/winerror.xml b/irc/TechBot/Resources/winerror.xml deleted file mode 100644 index 237ced972bb..00000000000 --- a/irc/TechBot/Resources/winerror.xml +++ /dev/null @@ -1,1839 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/irc/TechBot/Resources/wm.xml b/irc/TechBot/Resources/wm.xml deleted file mode 100644 index 86994eae728..00000000000 --- a/irc/TechBot/Resources/wm.xml +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs b/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs deleted file mode 100644 index d6563d6867f..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - public abstract class BugCommand : Command - { -// private string m_BugID = null; - - public BugCommand() - { - } - - public string BugID - { - get { return Parameters; } - set { Parameters = value; } - } - - public override void ExecuteCommand() - { - if (string.IsNullOrEmpty(BugID)) - { - Say("Please provide a valid bug number."); - } - else - { - try - { - Say(BugUrl, Int32.Parse(BugID)); - } - catch (Exception) - { - Say("{0} is not a valid bug number.", BugID); - } - } - } - - protected abstract string BugUrl { get; } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs b/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs deleted file mode 100644 index bb1980b032e..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs +++ /dev/null @@ -1,180 +0,0 @@ -using System; -using System.Xml; -using System.Collections; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("error", Help = "!error ")] - public class ErrorCommand : Command - { - private NtStatusCommand ntStatus; - private WinErrorCommand winerror; - private HResultCommand hresult; - - public ErrorCommand() - { - this.ntStatus = new NtStatusCommand(); - this.winerror = new WinErrorCommand(); - this.hresult = new HResultCommand(); - } - - private static int GetSeverity(long error) - { - return (int)((error >> 30) & 0x3); - } - - private static bool IsCustomer(long error) - { - return (error & 0x20000000) != 0; - } - - private static bool IsReserved(long error) - { - return (error & 0x10000000) != 0; - } - - private static int GetFacility(long error) - { - return (int)((error >> 16) & 0xFFF); - } - - private static short GetCode(long error) - { - return (short)((error >> 0) & 0xFFFF); - } - - private static string FormatSeverity(long error) - { - int severity = GetSeverity(error); - switch (severity) - { - case 0: return "SUCCESS"; - case 1: return "INFORMATIONAL"; - case 2: return "WARNING"; - case 3: return "ERROR"; - } - return null; - } - - private static string FormatFacility(long error) - { - int facility = GetFacility(error); - return facility.ToString(); - } - - private static string FormatCode(long error) - { - int code = GetCode(error); - return code.ToString(); - } - - public override void ExecuteCommand() - { - if (Parameters.Equals(String.Empty)) - { - Say("Please provide an Error Code."); - return; - } - - string errorText = Parameters; - - retry: - NumberParser np = new NumberParser(); - long error = np.Parse(errorText); - if (np.Error) - { - Say("{0} is not a valid Error Code.", Parameters); - return; - } - - ArrayList descriptions = new ArrayList(); - - // Error is out of bounds - if ((ulong)error > uint.MaxValue) - { - // Do nothing - } - // Error is outside of the range [0, 65535]: it cannot be a plain Win32 error code - else if ((ulong)error > ushort.MaxValue) - { - // Customer bit is set: custom error code - if (IsCustomer(error)) - { - string description = String.Format("[custom, severity {0}, facility {1}, code {2}]", - FormatSeverity(error), - FormatFacility(error), - FormatCode(error)); - descriptions.Add(description); - } - // Reserved bit is set: HRESULT_FROM_NT(ntstatus) - else if (IsReserved(error)) - { - int status = (int)(error & 0xCFFFFFFF); - string description = ntStatus.GetNtstatusDescription(status); - - if (description == null) - description = status.ToString("X"); - - description = String.Format("HRESULT_FROM_NT({0})", description); - descriptions.Add(description); - } - // Win32 facility: HRESULT_FROM_WIN32(winerror) - else if (GetFacility(error) == 7) - { - // Must be an error code - if (GetSeverity(error) == 2) - { - short err = GetCode(error); - string description = winerror.GetWinerrorDescription(err); - - if (description == null) - description = err.ToString("D"); - - description = String.Format("HRESULT_FROM_WIN32({0})", description); - descriptions.Add(description); - } - } - } - - string winerrorDescription = winerror.GetWinerrorDescription(error); - string ntstatusDescription = ntStatus.GetNtstatusDescription(error); - string hresultDescription = hresult.GetHresultDescription(error); - - if (winerrorDescription != null) - descriptions.Add(winerrorDescription); - if (ntstatusDescription != null) - descriptions.Add(ntstatusDescription); - if (hresultDescription != null) - descriptions.Add(hresultDescription); - - if (descriptions.Count == 0) - { - // Last chance heuristics: attempt to parse a 8-digit decimal as hexadecimal - if (errorText.Length == 8) - { - errorText = "0x" + errorText; - goto retry; - } - - Say("I don't know about Error Code {0}.", - Parameters); - } - else if (descriptions.Count == 1) - { - string description = (string)descriptions[0]; - Say("{0} is {1}.", - Parameters, - description); - } - else - { - Say("{0} could be:", Parameters); - - foreach (string description in descriptions) - Say("\t{0}", description); - } - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/HResultCommand.cs b/irc/TechBot/TechBot.Commands.Common/HResultCommand.cs deleted file mode 100644 index fd42239ba43..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/HResultCommand.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Xml; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("hresult", Help = "!hresult ")] - public class HResultCommand : XmlLookupCommand - { - public HResultCommand() - { - } - - public override string XmlFile - { - get { return Settings.Default.HResultXml; } - } - - public override void ExecuteCommand() - { - if (string.IsNullOrEmpty(Text)) - { - Say("Please provide a valid HRESULT value."); - } - else - { - NumberParser np = new NumberParser(); - long hresult = np.Parse(Text); - if (np.Error) - { - Say("{0} is not a valid HRESULT value.", Text); - return; - } - - string description = GetHresultDescription(hresult); - if (description != null) - { - Say("{0} is {1}.", - Text, - description); - } - else - { - Say("I don't know about HRESULT {0}.", Text); - } - } - } - - public string GetHresultDescription(long hresult) - { - XmlElement root = base.m_XmlDocument.DocumentElement; - XmlNode node = root.SelectSingleNode(String.Format("Hresult[@value='{0}']", - hresult.ToString("X8"))); - if (node != null) - { - XmlAttribute text = node.Attributes["text"]; - if (text == null) - throw new Exception("Node has no text attribute."); - return text.Value; - } - else - return null; - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/NtStatusCommand.cs b/irc/TechBot/TechBot.Commands.Common/NtStatusCommand.cs deleted file mode 100644 index 96120e48bf3..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/NtStatusCommand.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Xml; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("ntstatus", Help = "!ntstatus ")] - public class NtStatusCommand : XmlLookupCommand - { - public NtStatusCommand() - { - } - - public override string XmlFile - { - get { return Settings.Default.NtStatusXml; } - } - - public override void ExecuteCommand() - { - if (string.IsNullOrEmpty(Text)) - { - Say("Please provide a valid NTSTATUS value."); - } - else - { - NumberParser np = new NumberParser(); - long ntstatus = np.Parse(Text); - if (np.Error) - { - Say("{0} is not a valid NTSTATUS value.", Text); - return; - } - - string description = GetNtstatusDescription(ntstatus); - if (description != null) - { - Say("{0} is {1}.", - Text, - description); - } - else - { - Say("I don't know about NTSTATUS {0}.", Text); - } - } - } - - public string GetNtstatusDescription(long ntstatus) - { - XmlElement root = base.m_XmlDocument.DocumentElement; - XmlNode node = root.SelectSingleNode(String.Format("Ntstatus[@value='{0}']", - ntstatus.ToString("X8"))); - if (node != null) - { - XmlAttribute text = node.Attributes["text"]; - if (text == null) - throw new Exception("Node has no text attribute."); - return text.Value; - } - else - return null; - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/Properties/AssemblyInfo.cs b/irc/TechBot/TechBot.Commands.Common/Properties/AssemblyInfo.cs deleted file mode 100644 index 72c565a8582..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TechBot.Commands.Common")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Sand")] -[assembly: AssemblyProduct("TechBot.Commands.Common")] -[assembly: AssemblyCopyright("Copyright © Sand 2008")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("5d39d6f8-37fb-423b-ba88-1d5d8e5a1317")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/irc/TechBot/TechBot.Commands.Common/ReactOSBugUrl.cs b/irc/TechBot/TechBot.Commands.Common/ReactOSBugUrl.cs deleted file mode 100644 index 3d94d6ba839..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/ReactOSBugUrl.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("rosbug", Help = "!rosbug ", Description = "Will give you a link to the reqested ReactOS bug")] - class ReactOSBugUrl : BugCommand - { - public ReactOSBugUrl() - { - } - - protected override string BugUrl - { - get { return "http://www.reactos.org/bugzilla/show_bug.cgi?id={0}"; } - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/SambaBugUrl.cs b/irc/TechBot/TechBot.Commands.Common/SambaBugUrl.cs deleted file mode 100644 index 6c3767720de..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/SambaBugUrl.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("sambabug", Help = "!sambabug ", Description = "Will give you a link to the reqested Samba bug")] - class SambaBugUrl : BugCommand - { - public SambaBugUrl() - { - } - - protected override string BugUrl - { - get { return "https://bugzilla.samba.org/show_bug.cgi?id={0}"; } - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs b/irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs deleted file mode 100644 index d05b1de36c9..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.1433 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace TechBot.Commands.Common { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\Ros\\current\\irc\\TechBot\\Resources\\ntstatus.xml")] - public string NtStatusXml { - get { - return ((string)(this["NtStatusXml"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\Ros\\current\\irc\\TechBot\\Resources\\winerror.xml")] - public string WinErrorXml { - get { - return ((string)(this["WinErrorXml"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\Ros\\current\\irc\\TechBot\\Resources\\hresult.xml")] - public string HResultXml { - get { - return ((string)(this["HResultXml"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\Ros\\current\\irc\\TechBot\\Resources\\wm.xml")] - public string WMXml { - get { - return ((string)(this["WMXml"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("svn://svn.reactos.org/reactos/trunk")] - public string SVNRoot { - get { - return ((string)(this["SVNRoot"])); - } - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/Settings.cs b/irc/TechBot/TechBot.Commands.Common/Settings.cs deleted file mode 100644 index 45a94a87392..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/Settings.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace TechBot.Commands.Common { - - - // This class allows you to handle specific events on the settings class: - // The SettingChanging event is raised before a setting's value is changed. - // The PropertyChanged event is raised after a setting's value is changed. - // The SettingsLoaded event is raised after the setting values are loaded. - // The SettingsSaving event is raised before the setting values are saved. - internal sealed partial class Settings { - - public Settings() { - // // To add event handlers for saving and changing settings, uncomment the lines below: - // - // this.SettingChanging += this.SettingChangingEventHandler; - // - // this.SettingsSaving += this.SettingsSavingEventHandler; - // - } - - private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { - // Add code to handle the SettingChangingEvent event here. - } - - private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { - // Add code to handle the SettingsSaving event here. - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/Settings.settings b/irc/TechBot/TechBot.Commands.Common/Settings.settings deleted file mode 100644 index 4ee296b8e5a..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/Settings.settings +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - C:\Ros\current\irc\TechBot\Resources\ntstatus.xml - - - C:\Ros\current\irc\TechBot\Resources\winerror.xml - - - C:\Ros\current\irc\TechBot\Resources\hresult.xml - - - C:\Ros\current\irc\TechBot\Resources\wm.xml - - - svn://svn.reactos.org/reactos/trunk - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Commands.Common/SvnCommand.cs b/irc/TechBot/TechBot.Commands.Common/SvnCommand.cs deleted file mode 100644 index 9604761132a..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/SvnCommand.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("svn", Help = "!svn" , Description="Where the ROS SVN repository is located")] - public class SvnCommand : Command - { - private string m_SvnRoot; - - public SvnCommand() - { - m_SvnRoot = Settings.Default.SVNRoot; - } - - public override void ExecuteCommand() - { - Say("svn co {0}", m_SvnRoot); - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj b/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj deleted file mode 100644 index 589f42a206a..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj +++ /dev/null @@ -1,75 +0,0 @@ - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {041B5F06-BF97-4981-B024-3A7B6DD9F6AE} - Library - Properties - TechBot.Commands.Common - TechBot.Commands.Common - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - Settings.settings - True - True - - - - - - - - - {1114F34D-F388-4F38-AE27-C0EE1B10B777} - TechBot.Library - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Commands.Common/WMCommand.cs b/irc/TechBot/TechBot.Commands.Common/WMCommand.cs deleted file mode 100644 index 2b79f4ed7ef..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/WMCommand.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Xml; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("wm" , Help = "!wm or !wm ")] - public class WMCommand : XmlCommand - { - public WMCommand() - { - } - - public override string XmlFile - { - get { return Settings.Default.WMXml; } - } - - [CommandParameter("wm", "The windows message to check" , DefaultParameter = true)] - public string WMText - { - get { return Parameters; } - set { Parameters = value; } - } - - public override void ExecuteCommand() - { - if (string.IsNullOrEmpty(WMText)) - { - Say("Please provide a valid window message value or name."); - - } - else - { - NumberParser np = new NumberParser(); - long wm = np.Parse(WMText); - string output; - if (np.Error) - { - // Assume "!wm " form. - output = GetWmNumber(WMText); - } - else - { - output = GetWmDescription(wm); - } - - if (output != null) - { - Say("{0} is {1}.", - WMText, - output); - } - else - { - Say("I don't know about window message {0}.", WMText); - } - } - } - - private string GetWmDescription(long wm) - { - XmlElement root = base.m_XmlDocument.DocumentElement; - XmlNode node = root.SelectSingleNode(String.Format("WindowMessage[@value='{0}']", - wm)); - if (node != null) - { - XmlAttribute text = node.Attributes["text"]; - if (text == null) - throw new Exception("Node has no text attribute."); - return text.Value; - } - else - return null; - } - - private string GetWmNumber(string wmName) - { - XmlElement root = base.m_XmlDocument.DocumentElement; - XmlNode node = root.SelectSingleNode(String.Format("WindowMessage[@text='{0}']", - wmName)); - if (node != null) - { - XmlAttribute value = node.Attributes["value"]; - if (value == null) - throw new Exception("Node has no value attribute."); - return value.Value; - } - else - return null; - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/WineBugUrl.cs b/irc/TechBot/TechBot.Commands.Common/WineBugUrl.cs deleted file mode 100644 index e87a0c30b3e..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/WineBugUrl.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("winebug", Help = "!winebug " , Description="Will give you a link to the reqested Wine bug")] - class WineBugUrl : BugCommand - { - public WineBugUrl() - { - } - - protected override string BugUrl - { - get { return "http://bugs.winehq.org/show_bug.cgi?id={0}"; } - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/WinerrorCommand.cs b/irc/TechBot/TechBot.Commands.Common/WinerrorCommand.cs deleted file mode 100644 index 950f37bd61b..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/WinerrorCommand.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Xml; - -using TechBot.Library; - -namespace TechBot.Commands.Common -{ - [Command("winerror", Help = "!winerror ")] - public class WinErrorCommand : XmlLookupCommand - { - public WinErrorCommand() - { - } - - public override string XmlFile - { - get { return Settings.Default.WinErrorXml; } - } - - public override void ExecuteCommand() - { - if (string.IsNullOrEmpty(Text)) - { - Say("Please provide a valid System Error Code value."); - } - else - { - NumberParser np = new NumberParser(); - long winerror = np.Parse(Text); - if (np.Error) - { - Say("{0} is not a valid System Error Code value.", Text); - return; - } - - string description = GetWinerrorDescription(winerror); - if (description != null) - { - Say("{0} is {1}.", - Text, - description); - } - else - { - Say("I don't know about System Error Code {0}.", Text); - } - } - } - - public string GetWinerrorDescription(long winerror) - { - XmlElement root = base.m_XmlDocument.DocumentElement; - XmlNode node = root.SelectSingleNode(String.Format("Winerror[@value='{0}']", - winerror.ToString())); - if (node != null) - { - XmlAttribute text = node.Attributes["text"]; - if (text == null) - throw new Exception("Node has no text attribute."); - return text.Value; - } - else - return null; - } - } -} diff --git a/irc/TechBot/TechBot.Commands.Common/app.config b/irc/TechBot/TechBot.Commands.Common/app.config deleted file mode 100644 index 479a2cdc49d..00000000000 --- a/irc/TechBot/TechBot.Commands.Common/app.config +++ /dev/null @@ -1,27 +0,0 @@ - - - - -
        - - - - - - C:\Ros\current\irc\TechBot\Resources\ntstatus.xml - - - C:\Ros\current\irc\TechBot\Resources\winerror.xml - - - C:\Ros\current\irc\TechBot\Resources\hresult.xml - - - C:\Ros\current\irc\TechBot\Resources\wm.xml - - - svn://svn.reactos.org/reactos/trunk - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs b/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs deleted file mode 100644 index a165f6aa68d..00000000000 --- a/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs +++ /dev/null @@ -1,309 +0,0 @@ -using System; -using System.IO; -using System.Data; -using System.Text.RegularExpressions; - -using HtmlHelp; -using HtmlHelp.ChmDecoding; - -using TechBot.Library; - -namespace TechBot.Commands.MSDN -{ - [Command("api", Help = "!api ")] - public class ApiCommand : Command - { - private bool IsVerbose = false; - - private HtmlHelpSystem chm; - - public ApiCommand() - { - LoadCHM(); - } - - [CommandParameter("api", "The API name")] - public string API - { - get { return Parameters; } - set { Parameters = value; } - } - - private void WriteIfVerbose(string message) - { - if (IsVerbose) - Say(message); - } - - private void LoadCHM() - { - string CHMFilename = Path.Combine(Settings.Default.ChmPath, Settings.Default.MainChm); - chm = new HtmlHelpSystem(); - chm.OpenFile(CHMFilename, null); - - Console.WriteLine(String.Format("Loaded main CHM: {0}", - Path.GetFileName(CHMFilename))); - foreach (string filename in Directory.GetFiles(Settings.Default.ChmPath)) - { - if (!Path.GetExtension(filename).ToLower().Equals(".chm")) - continue; - if (Path.GetFileName(filename).ToLower().Equals(Settings.Default.MainChm)) - continue; - - Console.WriteLine(String.Format("Loading CHM: {0}", - Path.GetFileName(filename))); - try - { - chm.MergeFile(filename); - } - catch (Exception ex) - { - Console.WriteLine(String.Format("Could not load CHM: {0}. Exception {1}", - Path.GetFileName(filename), - ex)); - } - } - Console.WriteLine(String.Format("Loaded {0} CHMs", - chm.FileList.Length)); - } - - public override void ExecuteCommand() - { - if (Name.Trim().Equals(String.Empty)) - { - Say("Please give me a keyword."); - } - else - { - Search(Name); - } - } - - private bool SearchIndex( - string keyword) - { - if (chm.HasIndex) - { - IndexItem item = chm.Index.SearchIndex(keyword, - IndexType.KeywordLinks); - if (item != null && item.Topics.Count > 0) - { - WriteIfVerbose(String.Format("Keyword {0} found in index", - item.KeyWord)); - IndexTopic indexTopic = item.Topics[0] as IndexTopic; - return DisplayResult( keyword, - indexTopic); - } - else - { - WriteIfVerbose(String.Format("Keyword {0} not found in index", - keyword)); - return false; - } - } - else - return false; - } - - private void SearchFullText(string keyword) - { - string sort = "Rating ASC"; - WriteIfVerbose(String.Format("Searching fulltext database for {0}", - keyword)); - - bool partialMatches = false; - bool titlesOnly = true; - int maxResults = 100; - DataTable results = chm.PerformSearch(keyword, - maxResults, - partialMatches, - titlesOnly); - WriteIfVerbose(String.Format("results.Rows.Count = {0}", - results != null ? - results.Rows.Count.ToString() : "(none)")); - if (results != null && results.Rows.Count > 0) - { - results.DefaultView.Sort = sort; - if (!DisplayResult(keyword, - results)) - { - Say("No result"); - } - } - else - { - Say("No result"); - } - } - - private void Search(string keyword) - { - if (!SearchIndex(keyword)) - SearchFullText(keyword); - } - - private bool DisplayResult(string keyword, - IndexTopic indexTopic) - { - keyword = keyword.Trim().ToLower(); - string url = indexTopic.URL; - WriteIfVerbose(String.Format("URL from index search {0}", - url)); - string prototype = ExtractPrototype(url); - if (prototype == null || prototype.Trim().Equals(String.Empty)) - return false; - string formattedPrototype = FormatPrototype(prototype); - Say(formattedPrototype); - return true; - } - - private bool DisplayResult(string keyword, - DataTable results) - { - keyword = keyword.Trim().ToLower(); - for (int i = 0; i < results.DefaultView.Count; i++) - { - DataRowView row = results.DefaultView[i]; - string title = row["Title"].ToString(); - WriteIfVerbose(String.Format("Examining {0}", title)); - if (title.Trim().ToLower().Equals(keyword)) - { - string location = row["Location"].ToString(); - string rating = row["Rating"].ToString(); - string url = row["Url"].ToString(); - string prototype = ExtractPrototype(url); - if (prototype == null || prototype.Trim().Equals(String.Empty)) - continue; - string formattedPrototype = FormatPrototype(prototype); - Say(formattedPrototype); - return true; - } - } - return false; - } - - private void DisplayNoResult(MessageContext context, - string keyword) - { - TechBot.ServiceOutput.WriteLine(context, - String.Format("I don't know about keyword {0}", - keyword)); - } - - private string ReplaceComments(string s) - { - return Regex.Replace(s, "//(.+)\r\n", ""); - } - - private string ReplaceLineEndings(string s) - { - return Regex.Replace(s, "(\r\n)+", " "); - } - - private string ReplaceSpaces(string s) - { - return Regex.Replace(s, @" +", " "); - } - - private string ReplaceSpacesBeforeLeftParenthesis(string s) - { - return Regex.Replace(s, @"\( ", @"("); - } - - private string ReplaceSpacesBeforeRightParenthesis(string s) - { - return Regex.Replace(s, @" \)", @")"); - } - - private string ReplaceSemicolon(string s) - { - return Regex.Replace(s, @";", @""); - } - - private string FormatPrototype(string prototype) - { - string s = ReplaceComments(prototype); - s = ReplaceLineEndings(s); - s = ReplaceSpaces(s); - s = ReplaceSpacesBeforeLeftParenthesis(s); - s = ReplaceSpacesBeforeRightParenthesis(s); - s = ReplaceSemicolon(s); - return s; - } - - private string ExtractPrototype(string url) - { - string page = GetPage(url); - Match match = Regex.Match(page, - "
        (.+)
        ", - RegexOptions.Multiline | - RegexOptions.Singleline); - if (match.Groups.Count > 1) - { - string prototype = match.Groups[1].ToString(); - return StripHtml(StripAfterSlashPre(prototype)); - } - - return ""; - } - - private string StripAfterSlashPre(string html) - { - int index = html.IndexOf(""); - if (index != -1) - { - return html.Substring(0, index); - } - else - return html; - } - - private string StripHtml(string html) - { - return Regex.Replace(html, @"<(.|\n)*?>", String.Empty); - } - - private string GetPage(string url) - { - string CHMFileName = ""; - string topicName = ""; - string anchor = ""; - CHMStream.CHMStream baseStream; - if (!chm.BaseStream.GetCHMParts(url, ref CHMFileName, ref topicName, ref anchor)) - { - baseStream = chm.BaseStream; - CHMFileName = baseStream.CHMFileName; - topicName = url; - anchor = ""; - } - else - { - baseStream = GetBaseStreamFromCHMFileName(CHMFileName); - } - - if ((topicName == "") || (CHMFileName == "") || (baseStream == null)) - { - return ""; - } - - return baseStream.ExtractTextFile(topicName); - } - - private CHMStream.CHMStream GetBaseStreamFromCHMFileName(string CHMFileName) - { - foreach (CHMFile file in chm.FileList) - { - WriteIfVerbose(String.Format("Compare: {0} <> {1}", - file.ChmFilePath, - CHMFileName)); - if (file.ChmFilePath.ToLower().Equals(CHMFileName.ToLower())) - { - return file.BaseStream; - } - } - WriteIfVerbose(String.Format("Could not find loaded CHM file in list: {0}", - CHMFileName)); - return null; - } - } -} diff --git a/irc/TechBot/TechBot.Commands.MSDN/Properties/AssemblyInfo.cs b/irc/TechBot/TechBot.Commands.MSDN/Properties/AssemblyInfo.cs deleted file mode 100644 index 44bdf804a8b..00000000000 --- a/irc/TechBot/TechBot.Commands.MSDN/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TechBot.Commands.MSDN")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Sand")] -[assembly: AssemblyProduct("TechBot.Commands.MSDN")] -[assembly: AssemblyCopyright("Copyright © Sand 2008")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("8a6332ce-82e3-4fbd-a799-8f4b8d025955")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/irc/TechBot/TechBot.Commands.MSDN/Settings.Designer.cs b/irc/TechBot/TechBot.Commands.MSDN/Settings.Designer.cs deleted file mode 100644 index 634aeefe0c7..00000000000 --- a/irc/TechBot/TechBot.Commands.MSDN/Settings.Designer.cs +++ /dev/null @@ -1,50 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.1433 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace TechBot.Commands.MSDN { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\IRC\\TechBot\\CHM")] - public string ChmPath { - get { - return ((string)(this["ChmPath"])); - } - set { - this["ChmPath"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("kmarch.chm")] - public string MainChm { - get { - return ((string)(this["MainChm"])); - } - set { - this["MainChm"] = value; - } - } - } -} diff --git a/irc/TechBot/TechBot.Commands.MSDN/Settings.settings b/irc/TechBot/TechBot.Commands.MSDN/Settings.settings deleted file mode 100644 index d13c49f8e2a..00000000000 --- a/irc/TechBot/TechBot.Commands.MSDN/Settings.settings +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - C:\IRC\TechBot\CHM - - - kmarch.chm - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Commands.MSDN/TechBot.Commands.MSDN.csproj b/irc/TechBot/TechBot.Commands.MSDN/TechBot.Commands.MSDN.csproj deleted file mode 100644 index 636ac87d58f..00000000000 --- a/irc/TechBot/TechBot.Commands.MSDN/TechBot.Commands.MSDN.csproj +++ /dev/null @@ -1,69 +0,0 @@ - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {ADBF1ED6-A586-4707-BD59-4CD53448D0FE} - Library - Properties - TechBot.Commands.MSDN - TechBot.Commands.MSDN - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - True - True - Settings.settings - - - - - {72E5CCA1-6318-4D62-964D-CB23A5C743B5} - CHMLibrary - - - {1114F34D-F388-4F38-AE27-C0EE1B10B777} - TechBot.Library - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Commands.MSDN/TechBot.Commands.MSDN.csproj.user b/irc/TechBot/TechBot.Commands.MSDN/TechBot.Commands.MSDN.csproj.user deleted file mode 100644 index a1d742b1c46..00000000000 --- a/irc/TechBot/TechBot.Commands.MSDN/TechBot.Commands.MSDN.csproj.user +++ /dev/null @@ -1,5 +0,0 @@ - - - ProjectFiles - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Commands.MSDN/app.config b/irc/TechBot/TechBot.Commands.MSDN/app.config deleted file mode 100644 index 83f087c3399..00000000000 --- a/irc/TechBot/TechBot.Commands.MSDN/app.config +++ /dev/null @@ -1,18 +0,0 @@ - - - - -
        - - - - - - C:\IRC\TechBot\CHM - - - kmarch.chm - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Console/App.config b/irc/TechBot/TechBot.Console/App.config deleted file mode 100644 index dfa480f3d3c..00000000000 --- a/irc/TechBot/TechBot.Console/App.config +++ /dev/null @@ -1,27 +0,0 @@ - - - - -
        - - - - - - irc.eu.freenode.net - - - rbuildbottest2 - - - RBuildBot2 - - - qwerty - - - 6667 - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Console/AssemblyInfo.cs b/irc/TechBot/TechBot.Console/AssemblyInfo.cs deleted file mode 100644 index dbacda112e8..00000000000 --- a/irc/TechBot/TechBot.Console/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("1.0.*")] - -// The following attributes specify the key for the sign of your assembly. See the -// .NET Framework documentation for more information about signing. -// This is not required, if you don't want signing let these attributes like they're. -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] diff --git a/irc/TechBot/TechBot.Console/ConsoleTechBotService.cs b/irc/TechBot/TechBot.Console/ConsoleTechBotService.cs deleted file mode 100644 index d3543131aa7..00000000000 --- a/irc/TechBot/TechBot.Console/ConsoleTechBotService.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -using TechBot.Library; - -namespace TechBot.Console -{ - public class ConsoleServiceOutput : IServiceOutput - { - public void WriteLine(MessageContext context, - string message) - { - System.Console.WriteLine(message); - } - } - - public class ConsoleTechBotService : TechBotService - { - public ConsoleTechBotService() - : base(new ConsoleServiceOutput()) - { - System.Console.WriteLine("TechBot running console service..."); - } - - public override void Run() - { - //Call the base class - base.Run(); - - while (true) - { - InjectMessage(System.Console.ReadLine()); - } - } - } -} diff --git a/irc/TechBot/TechBot.Console/Default.build b/irc/TechBot/TechBot.Console/Default.build deleted file mode 100644 index 706547f170b..00000000000 --- a/irc/TechBot/TechBot.Console/Default.build +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/irc/TechBot/TechBot.Console/Main.cs b/irc/TechBot/TechBot.Console/Main.cs deleted file mode 100644 index eec2855e95b..00000000000 --- a/irc/TechBot/TechBot.Console/Main.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Configuration; -using TechBot.Library; - -namespace TechBot.Console -{ - class MainClass - { - public static void Main(string[] args) - { - TechBotService m_TechBot = null; - - if (args.Length > 0 && args[0].ToLower().Equals("irc")) - { - m_TechBot = new IrcTechBotService(Settings.Default.IRCServerHostName, - Settings.Default.IRCServerHostPort, - Settings.Default.IRCChannelNames, - Settings.Default.IRCBotName, - Settings.Default.IRCBotPassword); - } - else - { - m_TechBot = new ConsoleTechBotService(); - } - - m_TechBot.Run(); - } - } -} \ No newline at end of file diff --git a/irc/TechBot/TechBot.Console/Properties/.gitignore b/irc/TechBot/TechBot.Console/Properties/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/irc/TechBot/TechBot.Console/Settings.Designer.cs b/irc/TechBot/TechBot.Console/Settings.Designer.cs deleted file mode 100644 index 4f05450c12f..00000000000 --- a/irc/TechBot/TechBot.Console/Settings.Designer.cs +++ /dev/null @@ -1,86 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.1433 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace TechBot.Console { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("irc.eu.freenode.net")] - public string IRCServerHostName { - get { - return ((string)(this["IRCServerHostName"])); - } - set { - this["IRCServerHostName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("rbuildbottest2")] - public string IRCChannelNames { - get { - return ((string)(this["IRCChannelNames"])); - } - set { - this["IRCChannelNames"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("RBuildBot2")] - public string IRCBotName { - get { - return ((string)(this["IRCBotName"])); - } - set { - this["IRCBotName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("qwerty")] - public string IRCBotPassword { - get { - return ((string)(this["IRCBotPassword"])); - } - set { - this["IRCBotPassword"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("6667")] - public int IRCServerHostPort { - get { - return ((int)(this["IRCServerHostPort"])); - } - set { - this["IRCServerHostPort"] = value; - } - } - } -} diff --git a/irc/TechBot/TechBot.Console/Settings.settings b/irc/TechBot/TechBot.Console/Settings.settings deleted file mode 100644 index ba8340928b0..00000000000 --- a/irc/TechBot/TechBot.Console/Settings.settings +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - irc.eu.freenode.net - - - rbuildbottest2 - - - RBuildBot2 - - - qwerty - - - 6667 - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Console/TechBot.Console.cmbx b/irc/TechBot/TechBot.Console/TechBot.Console.cmbx deleted file mode 100644 index 0e37e7626b7..00000000000 --- a/irc/TechBot/TechBot.Console/TechBot.Console.cmbx +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Console/TechBot.Console.csproj b/irc/TechBot/TechBot.Console/TechBot.Console.csproj deleted file mode 100644 index a7be83244f4..00000000000 --- a/irc/TechBot/TechBot.Console/TechBot.Console.csproj +++ /dev/null @@ -1,80 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {44258BA2-FFCB-4463-9CED-6DE5CC5CEBD4} - Exe - Properties - TechBot.Console - TechBot.Console - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - True - True - Settings.settings - - - - - - - - {041B5F06-BF97-4981-B024-3A7B6DD9F6AE} - TechBot.Commands.Common - - - {D676FEDE-62DD-4B4D-94C6-308598E827F9} - TechBot.Commands.RBuild - - - {D2A57931-DF04-4BC3-BD11-75DF4F3B0A88} - TechBot.IRCLibrary - - - {1114F34D-F388-4F38-AE27-C0EE1B10B777} - TechBot.Library - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Console/TechBot.Console.prjx b/irc/TechBot/TechBot.Console/TechBot.Console.prjx deleted file mode 100644 index 6a08d66c7be..00000000000 --- a/irc/TechBot/TechBot.Console/TechBot.Console.prjx +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.IRCLibrary/AssemblyInfo.cs b/irc/TechBot/TechBot.IRCLibrary/AssemblyInfo.cs deleted file mode 100644 index dbacda112e8..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("1.0.*")] - -// The following attributes specify the key for the sign of your assembly. See the -// .NET Framework documentation for more information about signing. -// This is not required, if you don't want signing let these attributes like they're. -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] diff --git a/irc/TechBot/TechBot.IRCLibrary/Default.build b/irc/TechBot/TechBot.IRCLibrary/Default.build deleted file mode 100644 index 1c468dd5fd0..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/Default.build +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/irc/TechBot/TechBot.IRCLibrary/IRC.cs b/irc/TechBot/TechBot.IRCLibrary/IRC.cs deleted file mode 100644 index ca85f08fd7b..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/IRC.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; - -namespace TechBot.IRCLibrary -{ - /// - /// IRC constants and helper methods. - /// - public class IRC - { - #region IRC commands - - public const string JOIN = "JOIN"; - public const string NICK = "NICK"; - public const string PART = "PART"; - public const string PING = "PING"; - public const string PONG = "PONG"; - public const string PRIVMSG = "PRIVMSG"; - public const string USER = "USER"; - public const string PASS = "PASS"; - public const string GHOST = "NICKSERV GHOST"; - public const string NOTICE = "NOTICE"; - - public const string RPL_NAMREPLY = "353"; - public const string RPL_ENDOFNAMES = "366"; - public const string ERR_NICKNAMEINUSE = "433"; - - #endregion - - } -} diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcChannel.cs b/irc/TechBot/TechBot.IRCLibrary/IrcChannel.cs deleted file mode 100644 index 0c16e59b0bd..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/IrcChannel.cs +++ /dev/null @@ -1,137 +0,0 @@ -/* - Channels names are strings (beginning with a '&' or '#' character) of - length up to 200 characters. Apart from the the requirement that the - first character being either '&' or '#'; the only restriction on a - channel name is that it may not contain any spaces (' '), a control G - (^G or ASCII 7), or a comma (',' which is used as a list item - separator by the protocol). - */ -using System; -using System.Collections; - -namespace TechBot.IRCLibrary -{ - /// - /// IRC channel type. - /// - public enum IrcChannelType - { - Public, - Private, - Secret - } - - - - /// - /// IRC channel. - /// - public class IrcChannel - { - #region Private fields - - private IrcClient owner; - private string name; - private IrcChannelType type = IrcChannelType.Public; - private ArrayList users = new ArrayList(); - - #endregion - - #region Public properties - - /// - /// Owner of this channel. - /// - public IrcClient Owner - { - get - { - return owner; - } - } - - /// - /// Name of channel (no leading #). - /// - public string Name - { - get - { - return name; - } - } - - /// - /// Type of channel. - /// - public IrcChannelType Type - { - get - { - return type; - } - } - - /// - /// Users in this channel. - /// - public ArrayList Users - { - get - { - return users; - } - } - - #endregion - - /// - /// Constructor. - /// - /// Owner of this channel. - /// Name of channel. - public IrcChannel(IrcClient owner, string name) - { - if (owner == null) - { - throw new ArgumentNullException("owner", "Owner cannot be null."); - } - if (name == null) - { - throw new ArgumentNullException("name", "Name cannot be null."); - } - this.owner = owner; - this.name = name; - } - - /// - /// Locate a user. - /// - /// Nickname of user (no decorations). - /// User or null if not found. - public IrcUser LocateUser(string nickname) - { - foreach (IrcUser user in Users) - { - /* FIXME: There are special cases for nickname comparison */ - if (nickname.ToLower().Equals(user.Nickname.ToLower())) - { - return user; - } - } - return null; - } - - /// - /// Talk to the channel. - /// - /// Text to send to the channel. - public void Talk(string text) - { - owner.SendMessage(new IrcMessage(IRC.PRIVMSG, - String.Format("#{0} :{1}", - name, - text))); - } - } -} diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs deleted file mode 100644 index 361071507ce..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs +++ /dev/null @@ -1,794 +0,0 @@ -using System; -using System.IO; -using System.Text; -using System.Collections; -using System.Net.Sockets; - -namespace TechBot.IRCLibrary -{ - /// - /// Delegate that delivers an IRC message. - /// - public delegate void MessageReceivedHandler(IrcMessage message); - - /// - /// Delegate that notifies if the user database for a channel has changed. - /// - public delegate void ChannelUserDatabaseChangedHandler(IrcChannel channel); - - public delegate void OnConnectHandler (); - public delegate void OnDisconnectHandler(); - public delegate void OnConnectionLostHandler(); - - /// - /// An IRC client. - /// - public class IrcClient - { - /// - /// Monitor when an IRC command is received. - /// - private class IrcCommandEventRegistration - { - /// - /// IRC command to monitor. - /// - private string command; - public string Command - { - get - { - return command; - } - } - - /// - /// Handler to call when command is received. - /// - private MessageReceivedHandler handler; - public MessageReceivedHandler Handler - { - get - { - return handler; - } - } - - /// - /// Constructor. - /// - /// IRC command to monitor. - /// Handler to call when command is received. - public IrcCommandEventRegistration(string command, - MessageReceivedHandler handler) - { - this.command = command; - this.handler = handler; - } - } - - - - /// - /// A buffer to store lines of text. - /// - private class LineBuffer - { - /// - /// Full lines of text in buffer. - /// - private ArrayList strings; - - /// - /// Part of the last line of text in buffer. - /// - private string left = ""; - - /// - /// Standard constructor. - /// - public LineBuffer() - { - strings = new ArrayList(); - } - - /// - /// Return true if there is a complete line in the buffer or false if there is not. - /// - public bool DataAvailable - { - get - { - return (strings.Count > 0); - } - } - - /// - /// Return next complete line in buffer or null if none exists. - /// - /// Next complete line in buffer or null if none exists. - public string Read() - { - if (DataAvailable) - { - string line = strings[0] as string; - strings.RemoveAt(0); - return line; - } - else - { - return null; - } - } - - /// - /// Write a string to buffer splitting it into lines. - /// - /// - public void Write(string data) - { - data = left + data; - left = ""; - string[] sa = data.Split(new char[] { '\n' }); - if (sa.Length <= 0) - { - left = data; - return; - } - else - { - left = ""; - } - for (int i = 0; i < sa.Length; i++) - { - if (i < sa.Length - 1) - { - /* This is a complete line. Remove any \r characters at the end of the line. */ - string line = sa[i].TrimEnd(new char[] { '\r', '\n'}); - /* Silently ignore empty lines */ - if (!line.Equals(String.Empty)) - { - strings.Add(line); - } - } - else - { - /* This may be a partial line. */ - left = sa[i]; - } - } - } - } - - - /// - /// State for asynchronous reads. - /// - private class StateObject - { - /// - /// Network stream where data is read from. - /// - public NetworkStream Stream; - - /// - /// Buffer where data is put. - /// - public byte[] Buffer; - - /// - /// Constructor. - /// - /// Network stream where data is read from. - /// Buffer where data is put. - public StateObject(NetworkStream stream, byte[] buffer) - { - this.Stream = stream; - this.Buffer = buffer; - } - } - - - #region Private fields - private bool firstPingReceived = false; - private bool awaitingGhostDeath = false; - private System.Text.Encoding encoding = System.Text.Encoding.UTF8; - private TcpClient tcpClient; - private NetworkStream networkStream; - private bool connected = false; - private LineBuffer messageStream; - private ArrayList ircCommandEventRegistrations = new ArrayList(); - private ArrayList channels = new ArrayList(); - private string reqNickname; - private string curNickname; - private string password; - #endregion - - #region Public events - - public event MessageReceivedHandler MessageReceived; - - public event ChannelUserDatabaseChangedHandler ChannelUserDatabaseChanged; - - public event OnConnectHandler OnConnect; - public event OnConnectionLostHandler OnConnectionLost; - public event OnDisconnectHandler OnDisconnect; - - #endregion - - #region Public properties - - /// - /// Encoding used. - /// - public System.Text.Encoding Encoding - { - get - { - return encoding; - } - set - { - encoding = value; - } - } - - /// - /// List of joined channels. - /// - public ArrayList Channels - { - get - { - return channels; - } - } - - /// - /// Nickname for the bot. - /// - public string Nickname - { - get - { - return curNickname; - } - } - #endregion - - #region Private methods - - /// - /// Signal MessageReceived event. - /// - /// Message that was received. - private void OnMessageReceived(IrcMessage message) - { - foreach (IrcCommandEventRegistration icre in ircCommandEventRegistrations) - { - if (message.Command.ToLower().Equals(icre.Command.ToLower())) - { - icre.Handler(message); - } - } - if (MessageReceived != null) - { - MessageReceived(message); - } - } - - /// - /// Signal ChannelUserDatabaseChanged event. - /// - /// Message that was received. - private void OnChannelUserDatabaseChanged(IrcChannel channel) - { - if (ChannelUserDatabaseChanged != null) - { - ChannelUserDatabaseChanged(channel); - } - } - - /// - /// Start an asynchronous read. - /// - private void Receive() - { - if ((networkStream != null) && (networkStream.CanRead)) - { - byte[] buffer = new byte[1024]; - networkStream.BeginRead(buffer, 0, buffer.Length, - new AsyncCallback(ReadComplete), - new StateObject(networkStream, buffer)); - } - else - { - throw new Exception("Socket is closed."); - } - } - - /// - /// Asynchronous read has completed. - /// - /// IAsyncResult object. - private void ReadComplete(IAsyncResult ar) - { - try - { - StateObject stateObject = (StateObject)ar.AsyncState; - if (stateObject.Stream.CanRead) - { - int bytesReceived = stateObject.Stream.EndRead(ar); - if (bytesReceived > 0) - { - messageStream.Write(Encoding.GetString(stateObject.Buffer, 0, bytesReceived)); - while (messageStream.DataAvailable) - { - OnMessageReceived(new IrcMessage(messageStream.Read())); - } - } - } - - Receive(); - } - catch (SocketException) - { - if (OnConnectionLost != null) - OnConnectionLost(); - } - catch (IOException) - { - if (OnConnectionLost != null) - OnConnectionLost(); - } - catch (Exception) - { - if (OnConnectionLost != null) - OnConnectionLost(); - } - } - - /// - /// Locate channel. - /// - /// Channel name. - /// Channel or null if none was found. - private IrcChannel LocateChannel(string name) - { - foreach (IrcChannel channel in Channels) - { - if (name.ToLower().Equals(channel.Name.ToLower())) - { - return channel; - } - } - return null; - } - - /// - /// Send a PONG message when a PING message is received. - /// - /// Received IRC message. - private void PingMessageReceived(IrcMessage message) - { - SendMessage(new IrcMessage(IRC.PONG, message.Parameters)); - firstPingReceived = true; - } - - /// - /// Send a PONG message when a PING message is received. - /// - /// Received IRC message. - private void NoticeMessageReceived(IrcMessage message) - { - if (awaitingGhostDeath) - { - string str = string.Format("{0} has been ghosted", reqNickname); - if (message.Parameters.Contains(str)) - { - ChangeNick(reqNickname); - SubmitPassword(password); - awaitingGhostDeath = false; - } - } - } - - /// - /// Process RPL_NAMREPLY message. - /// - /// Received IRC message. - private void RPL_NAMREPLYMessageReceived(IrcMessage message) - { - try - { - // :Oslo2.NO.EU.undernet.org 353 E101 = #E101 :E101 KongFu_uK @Exception - /* "( "=" / "*" / "@" ) - :[ "@" / "+" ] *( " " [ "@" / "+" ] ) - - "@" is used for secret channels, "*" for private - channels, and "=" for others (public channels). */ - if (message.Parameters == null) - { - System.Diagnostics.Debug.WriteLine(String.Format("Message has no parameters.")); - return; - } - string[] parameters = message.Parameters.Split(new char[] { ' '}); - if (parameters.Length < 5) - { - System.Diagnostics.Debug.WriteLine(String.Format("{0} is two few parameters.", parameters.Length)); - return; - } - IrcChannelType type; - switch (parameters[1]) - { - case "=": - type = IrcChannelType.Public; - break; - case "*": - type = IrcChannelType.Private; - break; - case "@": - type = IrcChannelType.Secret; - break; - default: - type = IrcChannelType.Public; - break; - } - IrcChannel channel = LocateChannel(parameters[2].Substring(1)); - if (channel == null) - { - System.Diagnostics.Debug.WriteLine(String.Format("Channel not found '{0}'.", - parameters[2].Substring(1))); - return; - } - string nickname = parameters[3]; - if (nickname[0] != ':') - { - System.Diagnostics.Debug.WriteLine(String.Format("String should start with : and not {0}.", nickname[0])); - return; - } - /* Skip : */ - IrcUser user = channel.LocateUser(nickname.Substring(1)); - if (user == null) - { - user = new IrcUser(this, - nickname.Substring(1)); - channel.Users.Add(user); - } - for (int i = 4; i < parameters.Length; i++) - { - nickname = parameters[i]; - user = channel.LocateUser(nickname); - if (user == null) - { - user = new IrcUser(this, - nickname); - channel.Users.Add(user); - } - } - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine(String.Format("Ex. {0}", ex)); - } - } - - /// - /// Process RPL_ENDOFNAMES message. - /// - /// Received IRC message. - private void RPL_ENDOFNAMESMessageReceived(IrcMessage message) - { - try - { - /* :End of NAMES list */ - if (message.Parameters == null) - { - System.Diagnostics.Debug.WriteLine(String.Format("Message has no parameters.")); - return; - } - - string[] parameters = message.Parameters.Split(new char[] { ' ' }); - IrcChannel channel = LocateChannel(parameters[1].Substring(1)); - if (channel == null) - { - System.Diagnostics.Debug.WriteLine(String.Format("Channel not found '{0}'.", - parameters[0].Substring(1))); - return; - } - - OnChannelUserDatabaseChanged(channel); - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine(String.Format("Ex. {0}", ex)); - } - } - - /// - /// Process ERR_NICKNAMEINUSE message. - /// - /// Received IRC message. - private void ERR_NICKNAMEINUSEMessageReceived(IrcMessage message) - { - try - { - if (message.Parameters == null) - { - System.Diagnostics.Debug.WriteLine(String.Format("Message has no parameters.")); - return; - } - - /* Connect with a different name */ - string[] parameters = message.Parameters.Split(new char[] { ' ' }); - string nickname = parameters[1]; - ChangeNick(nickname + "__"); - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine(String.Format("Ex. {0}", ex)); - } - } - - #endregion - - /// - /// Connect to the specified IRC server on the specified port. - /// - /// Address of IRC server. - /// Port of IRC server. - public void Connect(string server, int port) - { - if (connected) - { - throw new AlreadyConnectedException(); - } - else - { - messageStream = new LineBuffer(); - tcpClient = new TcpClient(); - tcpClient.Connect(server, port); - tcpClient.NoDelay = true; - tcpClient.LingerState = new LingerOption(false, 0); - networkStream = tcpClient.GetStream(); - connected = networkStream.CanRead && networkStream.CanWrite; - if (!connected) - { - throw new Exception("Cannot read and write from socket."); - } - /* Install PING message handler */ - MonitorCommand(IRC.PING, new MessageReceivedHandler(PingMessageReceived)); - /* Install NOTICE message handler */ - MonitorCommand(IRC.NOTICE, new MessageReceivedHandler(NoticeMessageReceived)); - /* Install RPL_NAMREPLY message handler */ - MonitorCommand(IRC.RPL_NAMREPLY, new MessageReceivedHandler(RPL_NAMREPLYMessageReceived)); - /* Install RPL_ENDOFNAMES message handler */ - MonitorCommand(IRC.RPL_ENDOFNAMES, new MessageReceivedHandler(RPL_ENDOFNAMESMessageReceived)); - /* Install ERR_NICKNAMEINUSE message handler */ - MonitorCommand(IRC.ERR_NICKNAMEINUSE, new MessageReceivedHandler(ERR_NICKNAMEINUSEMessageReceived)); - /* Start receiving data */ - Receive(); - } - } - - /// - /// Disconnect from IRC server. - /// - public void Diconnect() - { - if (!connected) - { - throw new NotConnectedException(); - } - else - { - connected = false; - tcpClient.Close(); - tcpClient = null; - - if (OnDisconnect != null) - OnDisconnect(); - } - } - - /// - /// Send an IRC message. - /// - /// The message to be sent. - public void SendMessage(IrcMessage message) - { - try - { - if (!connected) - { - throw new NotConnectedException(); - } - - /* Serialize sending messages */ - lock (typeof(IrcClient)) - { - NetworkStream networkStream = tcpClient.GetStream(); - byte[] bytes = Encoding.GetBytes(message.Line); - networkStream.Write(bytes, 0, bytes.Length); - networkStream.Flush(); - } - } - catch (SocketException) - { - if (OnConnectionLost != null) - OnConnectionLost(); - } - catch (IOException) - { - if (OnConnectionLost != null) - OnConnectionLost(); - } - catch (Exception) - { - if (OnConnectionLost != null) - OnConnectionLost(); - } - } - - /// - /// Monitor when a message with an IRC command is received. - /// - /// IRC command to monitor. - /// Handler to call when command is received. - public void MonitorCommand(string command, MessageReceivedHandler handler) - { - if (command == null) - { - throw new ArgumentNullException("command", "Command cannot be null."); - } - if (handler == null) - { - throw new ArgumentNullException("handler", "Handler cannot be null."); - } - ircCommandEventRegistrations.Add(new IrcCommandEventRegistration(command, handler)); - } - - /// - /// Talk to the channel. - /// - /// Nickname of user to talk to. - /// Text to send to the channel. - public void TalkTo(string nickname, string text) - { - } - - /// - /// Change nickname. - /// - /// New nickname. - public void ChangeNick(string nickname) - { - if (nickname == null) - throw new ArgumentNullException("nickname", "Nickname cannot be null."); - - Console.WriteLine("Changing nick to {0}\n", nickname); - curNickname = nickname; - - /* NICK [ ] */ - SendMessage(new IrcMessage(IRC.NICK, nickname)); - } - - /// - /// Ghost nickname. - /// - /// Nickname. - public void GhostNick(string nickname, - string password) - { - if (nickname == null) - throw new ArgumentNullException("nickname", "Nickname cannot be null."); - - if (password == null) - throw new ArgumentNullException("password", "Password cannot be null."); - - awaitingGhostDeath = true; - - /* GHOST */ - SendMessage(new IrcMessage(IRC.GHOST, nickname + " " + password)); - } - - /// - /// Submit password to identify user. - /// - /// Password of registered nick. - private void SubmitPassword(string password) - { - if (password == null) - throw new ArgumentNullException("password", "Password cannot be null."); - - this.password = password; - - /* PASS */ - SendMessage(new IrcMessage(IRC.PASS, password)); - } - - /// - /// Register. - /// - /// New nickname. - /// Password. Can be null. - /// Real name. Can be null. - public void Register(string nickname, - string password, - string realname) - { - if (nickname == null) - throw new ArgumentNullException("nickname", "Nickname cannot be null."); - reqNickname = nickname; - firstPingReceived = false; - if (password != null) - { - SubmitPassword(password); - } - ChangeNick(nickname); - /* OLD: USER */ - /* NEW: USER */ - SendMessage(new IrcMessage(IRC.USER, String.Format("{0} 0 * :{1}", - nickname, realname != null ? realname : "Anonymous"))); - - /* Wait for PING for up til 10 seconds */ - int timer = 0; - while (!firstPingReceived && timer < 200) - { - System.Threading.Thread.Sleep(50); - timer++; - } - } - - /// - /// Join an IRC channel. - /// - /// Name of channel (without leading #). - /// New channel. - public IrcChannel JoinChannel(string name) - { - IrcChannel channel = new IrcChannel(this, name); - channels.Add(channel); - /* JOIN ( *( "," ) [ *( "," ) ] ) / "0" */ - SendMessage(new IrcMessage(IRC.JOIN, String.Format("#{0}", name))); - return channel; - } - - /// - /// Part an IRC channel. - /// - /// IRC channel. If null, the user parts from all channels. - /// Part message. Can be null. - public void PartChannel(IrcChannel channel, string message) - { - /* PART *( "," ) [ ] */ - if (channel != null) - { - SendMessage(new IrcMessage(IRC.PART, String.Format("#{0}{1}", - channel.Name, message != null ? String.Format(" :{0}", message) : ""))); - channels.Remove(channel); - } - else - { - string channelList = null; - foreach (IrcChannel myChannel in Channels) - { - if (channelList == null) - { - channelList = ""; - } - else - { - channelList += ","; - } - channelList += myChannel.Name; - } - if (channelList != null) - { - SendMessage(new IrcMessage(IRC.PART, String.Format("#{0}{1}", - channelList, message != null ? String.Format(" :{0}", message) : ""))); - Channels.Clear(); - } - } - } - } -} diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcException.cs b/irc/TechBot/TechBot.IRCLibrary/IrcException.cs deleted file mode 100644 index a96b688ad82..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/IrcException.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; - -namespace TechBot.IRCLibrary -{ - /// - /// Base class for all IRC exceptions. - /// - public class IrcException : Exception - { - public IrcException() : base() - { - } - - public IrcException(string message) : base(message) - { - } - - public IrcException(string message, Exception innerException) : base(message, innerException) - { - } - } - - /// - /// Thrown when there is no connection to an IRC server. - /// - public class NotConnectedException : IrcException - { - } - - /// - /// Thrown when there is an attempt to connect to an IRC server and there is already a connection. - /// - public class AlreadyConnectedException : IrcException - { - } - - /// - /// Thrown when there is attempted to parse a malformed or invalid IRC message. - /// - public class MalformedMessageException : IrcException - { - public MalformedMessageException(string message) : base(message) - { - } - - public MalformedMessageException(string message, Exception innerException) : base(message, innerException) - { - } - } -} diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs b/irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs deleted file mode 100644 index f74ea806be4..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs +++ /dev/null @@ -1,503 +0,0 @@ -using System; - -namespace TechBot.IRCLibrary -{ - /* - ::= [':' ] - ::= | [ '!' ] [ '@' ] - ::= { } | - ::= ' ' { ' ' } - ::= [ ':' | ] - - ::= - ::= - - ::= CR LF - - NOTES: - - 1) is consists only of SPACE character(s) (0x20). - Specially notice that TABULATION, and all other control - characters are considered NON-WHITE-SPACE. - - 2) After extracting the parameter list, all parameters are equal, - whether matched by or . is just - a syntactic trick to allow SPACE within parameter. - - 3) The fact that CR and LF cannot appear in parameter strings is - just artifact of the message framing. This might change later. - - 4) The NUL character is not special in message framing, and - basically could end up inside a parameter, but as it would - cause extra complexities in normal C string handling. Therefore - NUL is not allowed within messages. - - 5) The last parameter may be an empty string. - - 6) Use of the extended prefix (['!' ] ['@' ]) must - not be used in server to server communications and is only - intended for server to client messages in order to provide - clients with more useful information about who a message is - from without the need for additional queries. - */ - /* - NOTICE AUTH :*** Looking up your hostname - NOTICE AUTH :*** Checking Ident - NOTICE AUTH :*** Found your hostname - NOTICE AUTH :*** No ident response - */ - - /// - /// IRC message. - /// - public class IrcMessage - { - #region Private fields - private string line; - private string prefix; - private string prefixServername; - private string prefixNickname; - private string prefixUser; - private string prefixHost; - private string command; - private string parameters; - #endregion - - /// - /// Line of text that is to be parsed as an IRC message. - /// - public string Line - { - get - { - return line; - } - } - - /// - /// Does the message have a prefix? - /// - public bool HasPrefix - { - get - { - return prefix != null; - } - } - - /// - /// Prefix or null if none exists. - /// - public string Prefix - { - get - { - return prefix; - } - } - - /// - /// Servername part of prefix or null if no prefix or servername exists. - /// - public string PrefixServername - { - get - { - return prefixServername; - } - } - - /// - /// Nickname part of prefix or null if no prefix or nick exists. - /// - public string PrefixNickname - { - get - { - return prefixNickname; - } - } - - /// - /// User part of (extended) prefix or null if no (extended) prefix exists. - /// - public string PrefixUser - { - get - { - return prefixUser; - } - } - - /// - /// Host part of (extended) prefix or null if no (extended) prefix exists. - /// - public string PrefixHost - { - get - { - return prefixHost; - } - } - - /// - /// Command part of message. - /// - public string Command - { - get - { - return command; - } - } - - /// - /// Is command numeric? - /// - public bool IsCommandNumeric - { - get - { - if (command == null || command.Length != 3) - { - return false; - } - try - { - Int32.Parse(command); - return true; - } - catch (Exception) - { - return false; - } - } - } - - /// - /// Command part of message as text. - /// - public string CommandText - { - get - { - return command; - } - } - - /// - /// Command part of message as a number. - /// - /// Thrown if IsCommandNumeric returns false. - public int CommandNumber - { - get - { - if (IsCommandNumeric) - { - return Int32.Parse(command); - } - else - { - throw new InvalidOperationException(); - } - } - } - - /// - /// Parameters part of message. - /// - public string Parameters - { - get - { - return parameters; - } - } - - /// - /// Constructor. - /// - /// Line of text that is to be parsed as an IRC message. - public IrcMessage(string line) - { - /* - * ::= [':' ] - * ::= | [ '!' ] [ '@' ] - * :Oslo1.NO.EU.undernet.org 461 MYNICK USER :Not enough parameters - */ - try - { - this.line = line; - int i = 0; - - #region Prefix - if (line[i].Equals(':')) - { - i++; - prefix = ""; - /* This message has a prefix */ - string s = ""; - while (i < line.Length && line[i] != ' ' && line[i] != '!' && line[i] != '@') - { - s += line[i++]; - } - if (IsValidIrcNickname(s)) - { - prefixNickname = s; - prefix += prefixNickname; - if (line[i] == '!') - { - /* This message has an extended prefix */ - i++; - s = ""; - while (i < line.Length && line[i] != ' ' && line[i] != '@') - { - s += line[i]; - i++; - } - prefixUser = s; - prefix += "!" + prefixUser; - } - if (line[i] == '@') - { - /* This message has a host prefix */ - s = ""; - do - { - s += line[++i]; - } - while (i < line.Length && line[i] != ' '); - prefixHost = s; - prefix += "@" + prefixHost; - } - } - else /* Assume it is a servername */ - { - prefixServername = s; - prefix += prefixServername; - } - - /* Skip spaces */ - while (i < line.Length && line[i] == ' ') - { - i++; - } - } - else - { - prefix = null; - } - #endregion - - #region Command - if (Char.IsDigit(line[i])) - { - if (!Char.IsDigit(line, i + 1) || !Char.IsDigit(line, i + 2)) - { - throw new Exception(); - } - command = String.Format("{0}{1}{2}", line[i++], line[i++], line[i++]); - } - else - { - command = ""; - while (i < line.Length && Char.IsLetter(line[i])) - { - command += line[i]; - i++; - } - } - #endregion - - #region Parameters - while (true) - { - /* Skip spaces */ - while (i < line.Length && line[i] == ' ') - { - i++; - } - if (i < line.Length && line[i].Equals(':')) - { - i++; - - /* Trailing */ - while (i < line.Length && line[i] != ' ' && line[i] != '\r' && line[i] != '\n' && line[i] != 0) - { - if (parameters == null) - { - parameters = ""; - } - parameters += line[i]; - i++; - } - } - else - { - /* Middle */ - while (i < line.Length && line[i] != '\r' && line[i] != '\n' && line[i] != 0) - { - if (parameters == null) - { - parameters = ""; - } - parameters += line[i]; - i++; - } - } - if (i >= line.Length) - { - break; - } - } - #endregion - } - catch (Exception ex) - { - throw new MalformedMessageException("The message is malformed.", ex); - } - } - - /// - /// Constructor. - /// - /// - /// - /// - /// - /// - /// - public IrcMessage(string prefixServername, - string prefixNickname, - string prefixUser, - string prefixHost, - string command, - string parameters) - { - throw new NotImplementedException(); - } - - /// - /// Constructor. - /// - /// IRC command. - /// IRC command parameters. May be null if there are no parameters. - public IrcMessage(string command, - string parameters) - { - if (command == null || !IsValidIrcCommand(command)) - { - throw new ArgumentException("Command is not a valid IRC command.", "command"); - } - /* An IRC message must not be longer than 512 characters (including terminating CRLF) */ - int parametersLength = (parameters != null) ? 1 + parameters.Length : 0; - if (command.Length + parametersLength > 510) - { - throw new MalformedMessageException("IRC message cannot be longer than 512 characters."); - } - this.command = command; - this.parameters = parameters; - if (parameters != null) - { - this.line = String.Format("{0} {1}\r\n", command, parameters); - } - else - { - this.line = String.Format("{0}\r\n", command); - } - } - - /// - /// Returns wether a string of text is a valid IRC command. - /// - /// The IRC command. - /// True, if command is a valid IRC command, false if not. - private static bool IsValidIrcCommand(string command) - { - foreach (char c in command) - { - if (!Char.IsLetter(c) && !Char.IsWhiteSpace(c)) - { - return false; - } - } - return true; - } - - private const string IrcSpecial = @"-[]\`^{}"; - private const string IrcSpecialNonSpecs = @"_|"; - - /// - /// Returns wether a character is an IRC special character. - /// - /// Character to test. - /// True if the character is an IRC special character, false if not. - private static bool IsSpecial(char c) - { - foreach (char validCharacter in IrcSpecial) - { - if (c.Equals(validCharacter)) - { - return true; - } - } - foreach (char validCharacter in IrcSpecialNonSpecs) - { - if (c.Equals(validCharacter)) - { - return true; - } - } - return false; - } - - /// - /// Returns wether a string of text is a valid IRC nickname. - /// - /// The IRC nickname. - /// True, if nickname is a valid IRC nickname, false if not. - private static bool IsValidIrcNickname(string nickname) - { - /* - * ::= { | | } - * ::= 'a' ... 'z' | 'A' ... 'Z' - * ::= '0' ... '9' - * ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}' - */ - /* An IRC nicknmame must be 1 - 9 characters in length. We don't care so much if it is larger */ - if ((nickname.Length < 1) || (nickname.Length > 30)) - { - return false; - } - /* First character must be a letter. */ - if (!Char.IsLetter(nickname[0])) - { - return false; - } - /* Check the other valid characters for validity. */ - foreach (char c in nickname) - { - if (!Char.IsLetter(c) && !Char.IsDigit(c) && !IsSpecial(c)) - { - return false; - } - } - return true; - } - - /// - /// Write contents to a string. - /// - /// Contents as a string. - public override string ToString() - { - return String.Format("Line({0})Prefix({1})Command({2})Parameters({3})", - line, prefix != null ? prefix : "(null)", - command != null ? command : "(null)", - parameters != null ? parameters : "(null)"); - } - } -} diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcUser.cs b/irc/TechBot/TechBot.IRCLibrary/IrcUser.cs deleted file mode 100644 index 30f0a94db40..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/IrcUser.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; - -namespace TechBot.IRCLibrary -{ - /// - /// IRC user. - /// - public class IrcUser - { - #region Private fields - - private IrcClient owner; - private string nickname; - private string decoratedNickname; - - #endregion - - #region Public properties - - /// - /// Owner of this channel. - /// - public IrcClient Owner - { - get - { - return owner; - } - } - - /// - /// Nickname of user. - /// - public string Nickname - { - get - { - return nickname; - } - } - - /// - /// Decorated nickname of user. - /// - public string DecoratedNickname - { - get - { - return decoratedNickname; - } - } - - /// - /// Wether user is channel operator. - /// - public bool Operator - { - get - { - return decoratedNickname.StartsWith("@"); - } - } - - /// - /// Wether user has voice. - /// - public bool Voice - { - get - { - return decoratedNickname.StartsWith("+"); - } - } - - #endregion - - /// - /// Constructor. - /// - /// Owner of this channel. - /// Nickname (possibly decorated) of user. - public IrcUser(IrcClient owner, - string nickname) - { - if (owner == null) - { - throw new ArgumentNullException("owner", "Owner cannot be null."); - } - this.owner = owner; - this.decoratedNickname = nickname.Trim(); - this.nickname = StripDecoration(decoratedNickname); - } - - /// - /// Talk to the user. - /// - /// Text to send to the user. - public void Talk(string text) - { - if (text == null) - { - throw new ArgumentNullException("text", "Text cannot be null."); - } - - owner.SendMessage(new IrcMessage(IRC.PRIVMSG, - String.Format("{0} :{1}", - nickname, - text))); - } - - /// - /// Strip docoration of nickname. - /// - /// Possible decorated nickname. - /// Undecorated nickname. - public static string StripDecoration(string decoratedNickname) - { - if (decoratedNickname.StartsWith("@")) - { - return decoratedNickname.Substring(1); - } - else if (decoratedNickname.StartsWith("+")) - { - return decoratedNickname.Substring(1); - } - else - { - return decoratedNickname; - } - } - } -} diff --git a/irc/TechBot/TechBot.IRCLibrary/Properties/.gitignore b/irc/TechBot/TechBot.IRCLibrary/Properties/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.cmbx b/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.cmbx deleted file mode 100644 index 67b1e6077d5..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.cmbx +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.csproj b/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.csproj deleted file mode 100644 index 02647ee5cde..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.csproj +++ /dev/null @@ -1,59 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {D2A57931-DF04-4BC3-BD11-75DF4F3B0A88} - Library - Properties - TechBot.IRCLibrary - TechBot.IRCLibrary - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.prjx b/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.prjx deleted file mode 100644 index 457a420241d..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/TechBot.IRCLibrary.prjx +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.IRCLibrary/app.config b/irc/TechBot/TechBot.IRCLibrary/app.config deleted file mode 100644 index b4e2a174a9f..00000000000 --- a/irc/TechBot/TechBot.IRCLibrary/app.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - -
        - - - - - - ! - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Library/Attributes/CommandAttribute.cs b/irc/TechBot/TechBot.Library/Attributes/CommandAttribute.cs deleted file mode 100644 index a16ee780d7c..00000000000 --- a/irc/TechBot/TechBot.Library/Attributes/CommandAttribute.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace TechBot.Library -{ - public class CommandAttribute : Attribute - { - private string m_Name = null; - private string m_Help = "No help for this command is available"; - private string m_Desc = "No description for this command is available"; - - public CommandAttribute(string name) - { - m_Name = name; - } - - public string Name - { - get { return m_Name; } - } - - public string Help - { - get { return m_Help; } - set { m_Help = value; } - } - - public string Description - { - get { return m_Desc; } - set { m_Desc = value; } - } - } -} diff --git a/irc/TechBot/TechBot.Library/Attributes/CommandParameterAliasAttribute.cs b/irc/TechBot/TechBot.Library/Attributes/CommandParameterAliasAttribute.cs deleted file mode 100644 index 05dc10da4bd..00000000000 --- a/irc/TechBot/TechBot.Library/Attributes/CommandParameterAliasAttribute.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; - -namespace TechBot.Library -{ - /// - /// This class implements an alias attribute to work in conjunction - /// with the CommandLineSwitchAttribute - /// attribute. If the CommandLineSwitchAttribute exists, then this attribute - /// defines an alias for it. - /// - [AttributeUsage( AttributeTargets.Property )] - public class CommandParameterAliasAttribute : Attribute - { - #region Private Variables - protected string m_Alias = ""; - #endregion - - #region Public Properties - public string Alias - { - get { return m_Alias; } - } - - #endregion - - #region Constructors - public CommandParameterAliasAttribute(string alias) - { - m_Alias = alias; - } - #endregion - } - -} diff --git a/irc/TechBot/TechBot.Library/Attributes/CommandParameterAttribute.cs b/irc/TechBot/TechBot.Library/Attributes/CommandParameterAttribute.cs deleted file mode 100644 index f996c73dc6c..00000000000 --- a/irc/TechBot/TechBot.Library/Attributes/CommandParameterAttribute.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; - -namespace TechBot.Library -{ - /// Implements a basic command-line switch by taking the - /// switching name and the associated description. - /// Only currently is implemented for properties, so all - /// auto-switching variables should have a get/set method supplied. - [AttributeUsage( AttributeTargets.Property )] - public class CommandParameterAttribute : Attribute - { - #region Private Variables - private string m_name = ""; - private string m_description = ""; - private bool m_Required = true; - private bool m_Default = false; - #endregion - - #region Public Properties - /// Accessor for retrieving the switch-name for an associated - /// property. - public string Name { get { return m_name; } } - - /// Accessor for retrieving the description for a switch of - /// an associated property. - public string Description { get { return m_description; } } - - public bool Required { get { return m_Required; } } - - public bool DefaultParameter - { - get { return m_Default; } - set { m_Default = value; } - } - - #endregion - - #region Constructors - - /// - /// Attribute constructor. - /// - public CommandParameterAttribute(string name, string description) - { - m_name = name; - m_description = description; - } - #endregion - } -} diff --git a/irc/TechBot/TechBot.Library/Collections/CommandBuilderCollection.cs b/irc/TechBot/TechBot.Library/Collections/CommandBuilderCollection.cs deleted file mode 100644 index 6cb4a814ca1..00000000000 --- a/irc/TechBot/TechBot.Library/Collections/CommandBuilderCollection.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace TechBot.Library -{ - public class CommandBuilderCollection : List - { - public CommandBuilder Find(string name) - { - foreach (CommandBuilder command in this) - { - if (command.Name == name) - return command; - } - - return null; - } - } -} diff --git a/irc/TechBot/TechBot.Library/Commands/Base/Command.cs b/irc/TechBot/TechBot.Library/Commands/Base/Command.cs deleted file mode 100644 index 040d870d833..00000000000 --- a/irc/TechBot/TechBot.Library/Commands/Base/Command.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Text.RegularExpressions; - -namespace TechBot.Library -{ - public abstract class Command - { - protected TechBotService m_TechBotService = null; - protected MessageContext m_Context = null; - protected string m_Params = null; - - public TechBotService TechBot - { - get { return m_TechBotService; } - set { m_TechBotService = value; } - } - - public MessageContext Context - { - get { return m_Context; } - set { m_Context = value; } - } - - public virtual bool AnswerInPublic - { - get { return true; } - } - - public string Name - { - get - { - CommandAttribute commandAttribute = (CommandAttribute) - Attribute.GetCustomAttribute(GetType(), typeof(CommandAttribute)); - - return commandAttribute.Name; - } - } - - public string Parameters - { - get { return m_Params; } - set { m_Params = value; } - } - - protected virtual void Say() - { - TechBot.ServiceOutput.WriteLine(Context, string.Empty); - } - - protected virtual void Say(string message) - { - TechBot.ServiceOutput.WriteLine(Context, message); - } - - protected virtual void Say(string format , params object[] args) - { - TechBot.ServiceOutput.WriteLine(Context, String.Format(format, args)); - } - - public void Run() - { - if (Context is ChannelMessageContext) - { - if (AnswerInPublic) - { - ExecuteCommand(); - } - else - { - Say("Sorry, I only respond '{0}' in private , PM me!", Name); - } - } - else - { - ExecuteCommand(); - } - } - - public abstract void ExecuteCommand(); - - public virtual void Initialize() - { - } - - public virtual void DeInitialize() - { - } - } -} diff --git a/irc/TechBot/TechBot.Library/Commands/Base/XmlCommand.cs b/irc/TechBot/TechBot.Library/Commands/Base/XmlCommand.cs deleted file mode 100644 index 673e796eb50..00000000000 --- a/irc/TechBot/TechBot.Library/Commands/Base/XmlCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Xml; -using System.Collections.Generic; -using System.Text; - -namespace TechBot.Library -{ - public abstract class XmlCommand : Command - { - protected XmlDocument m_XmlDocument; - - public XmlCommand() - { - m_XmlDocument = new XmlDocument(); - m_XmlDocument.Load(XmlFile); - } - - public abstract string XmlFile { get; } - - public XmlDocument XmlDocument - { - get { return m_XmlDocument; } - } - } -} \ No newline at end of file diff --git a/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs b/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs deleted file mode 100644 index 20c8bfcfbcc..00000000000 --- a/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace TechBot.Library -{ - public abstract class XmlLookupCommand : XmlCommand - { - public virtual string Text - { - get { return Parameters; } - set { Parameters = value; } - } - } -} diff --git a/irc/TechBot/TechBot.Library/Commands/HelpCommand.cs b/irc/TechBot/TechBot.Library/Commands/HelpCommand.cs deleted file mode 100644 index 7c7fb34cddf..00000000000 --- a/irc/TechBot/TechBot.Library/Commands/HelpCommand.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Reflection; -using System.Collections; - -namespace TechBot.Library -{ - [Command("help", Help = "!help or !help -name:[CommandName]", Description = "Shows this help , type 'help -name:[CommandName]'")] - public class HelpCommand : Command - { - public HelpCommand() - { - } - - public override bool AnswerInPublic - { - get { return false; } - } - - [CommandParameter("Name", "The command name to show help")] - public string CommandName - { - get { return Parameters; } - set { Parameters = value; } - } - - public override void ExecuteCommand() - { - if (string.IsNullOrEmpty(CommandName)) - { - Say("I support the following commands:"); - - foreach (CommandBuilder command in TechBot.Commands) - { - Say("{0}{1} - {2}", - Settings.Default.CommandPrefix, - command.Name, - command.Description); - } - } - else - { - CommandBuilder cmdBuilder = TechBot.Commands.Find(CommandName); - - if (cmdBuilder == null) - { - Say("Command '{0}' is not recognized. Type '!help' to show all available commands", CommandName); - } - else - { - Say("Command '{0}' help:", CommandName); - Say(); - Say(cmdBuilder.Description); - Say(); - Say(cmdBuilder.Help); - Say(); - Say("Parameters :"); - Say(); - - PropertyInfo[] propertyInfoArray = cmdBuilder.Type.GetProperties(BindingFlags.Public | BindingFlags.Instance); - foreach (PropertyInfo propertyInfo in propertyInfoArray) - { - CommandParameterAttribute[] commandAttributes = (CommandParameterAttribute[]) - Attribute.GetCustomAttributes(propertyInfo, typeof(CommandParameterAttribute)); - - foreach (CommandParameterAttribute parameter in commandAttributes) - { - Say("\t-{0}: [{1}]", - parameter.Name, - parameter.Description); - } - } - - Say(); - } - } - } - } -} diff --git a/irc/TechBot/TechBot.Library/Factory/CommandBuilder.cs b/irc/TechBot/TechBot.Library/Factory/CommandBuilder.cs deleted file mode 100644 index 6a459670a4c..00000000000 --- a/irc/TechBot/TechBot.Library/Factory/CommandBuilder.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Reflection; -using System.Collections.Generic; -using System.Text; - -namespace TechBot.Library -{ - public class CommandBuilder - { - private Type m_CommandType; - private string m_CommandName; - private string m_CommandHelp; - private string m_CommandDesc; - - public CommandBuilder(Type commandType) - { - m_CommandType = commandType; - - CommandAttribute commandAttribute = (CommandAttribute) - Attribute.GetCustomAttribute(commandType, typeof(CommandAttribute)); - - m_CommandName = commandAttribute.Name; - m_CommandHelp = commandAttribute.Help; - m_CommandDesc = commandAttribute.Description; - } - - public string Name - { - get { return m_CommandName; } - } - - public string Help - { - get { return m_CommandHelp; } - } - - public string Description - { - get { return m_CommandDesc; } - } - - public Type Type - { - get { return m_CommandType; } - } - - public Command CreateCommand() - { - return (Command)Type.Assembly.CreateInstance(Type.FullName, true); - } - } -} diff --git a/irc/TechBot/TechBot.Library/Factory/CommandFactory.cs b/irc/TechBot/TechBot.Library/Factory/CommandFactory.cs deleted file mode 100644 index 100bd2bdcf4..00000000000 --- a/irc/TechBot/TechBot.Library/Factory/CommandFactory.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Reflection; - -namespace TechBot.Library -{ - public class CommandFactory - { - private static CommandBuilderCollection m_Commands = new CommandBuilderCollection(); - - private CommandFactory() - { - } - - public static void LoadPlugins() - { - //get the file names of the dll files in the current directory. - foreach (string fileName in Directory.GetFiles(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "*.dll")) - { - LoadPluginsFromDLLFile(fileName); - } - } - - private static void LoadPluginsFromDLLFile(string sFile) - { - Assembly assPlugin = Assembly.LoadFile(sFile); - - Console.WriteLine("Loading plugins from : {0}", assPlugin.Location); - - if (assPlugin != null) - { - foreach (Type pluginType in assPlugin.GetTypes()) - { - if (pluginType.IsSubclassOf(typeof(Command))) - { - if (pluginType.IsAbstract == false) - { - CommandBuilder cmdBuilder = new CommandBuilder(pluginType); - - Console.WriteLine("{0}:{1}", - cmdBuilder.Name, - cmdBuilder.Description); - - //Add it to the list. - Commands.Add(new CommandBuilder(pluginType)); - } - } - } - } - } - - public static CommandBuilderCollection Commands - { - get { return m_Commands; } - } - } -} diff --git a/irc/TechBot/TechBot.Library/MessageContext.cs b/irc/TechBot/TechBot.Library/MessageContext.cs deleted file mode 100644 index 1d9677c8462..00000000000 --- a/irc/TechBot/TechBot.Library/MessageContext.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using TechBot.IRCLibrary; - -namespace TechBot.Library -{ - public abstract class MessageContext - { - } - - public class ChannelMessageContext : MessageContext - { - private IrcChannel m_IrcChannel; - - public IrcChannel Channel - { - get { return m_IrcChannel; } - } - - public ChannelMessageContext(IrcChannel channel) - { - m_IrcChannel = channel; - } - } - - public class UserMessageContext : MessageContext - { - private IrcUser m_IrcUser; - - public IrcUser User - { - get { return m_IrcUser; } - } - - public UserMessageContext(IrcUser user) - { - m_IrcUser = user; - } - } -} diff --git a/irc/TechBot/TechBot.Library/NumberParser.cs b/irc/TechBot/TechBot.Library/NumberParser.cs deleted file mode 100644 index 232ed0be1f2..00000000000 --- a/irc/TechBot/TechBot.Library/NumberParser.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Globalization; - -namespace TechBot.Library -{ - public class NumberParser - { - public bool Error = false; - - private const string SpecialHexCharacters = "ABCDEF"; - - private static bool IsSpecialHexCharacter(char ch) - { - foreach (char specialChar in SpecialHexCharacters) - { - if (ch.ToString().ToUpper() == specialChar.ToString()) - return true; - } - return false; - } - - private static bool HasSpecialHexCharacters(string s) - { - foreach (char ch in s) - { - if (IsSpecialHexCharacter(ch)) - return true; - } - return false; - } - - public long Parse(string s) - { - try - { - Error = false; - bool useHex = false; - if (s.StartsWith("0x", StringComparison.InvariantCultureIgnoreCase)) - { - s = s.Substring(2); - useHex = true; - } - if (HasSpecialHexCharacters(s)) - useHex = true; - if (useHex) - return Int64.Parse(s, - NumberStyles.HexNumber); - else - return Int64.Parse(s); - } - catch (FormatException) - { - Error = true; - } - catch (OverflowException) - { - Error = true; - } - return -1; - } - } -} diff --git a/irc/TechBot/TechBot.Library/Properties/.gitignore b/irc/TechBot/TechBot.Library/Properties/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/irc/TechBot/TechBot.Library/Properties/AssemblyInfo.cs b/irc/TechBot/TechBot.Library/Properties/AssemblyInfo.cs deleted file mode 100644 index af4e2756b62..00000000000 --- a/irc/TechBot/TechBot.Library/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("1.0.*")] - -// The following attributes specify the key for the sign of your assembly. See the -// .NET Framework documentation for more information about signing. -// This is not required, if you don't want signing let these attributes like they're. -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] diff --git a/irc/TechBot/TechBot.Library/ServiceOutput.cs b/irc/TechBot/TechBot.Library/ServiceOutput.cs deleted file mode 100644 index d73a93e62ea..00000000000 --- a/irc/TechBot/TechBot.Library/ServiceOutput.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace TechBot.Library -{ - public interface IServiceOutput - { - void WriteLine(MessageContext context, string message); - } -} diff --git a/irc/TechBot/TechBot.Library/Settings.Designer.cs b/irc/TechBot/TechBot.Library/Settings.Designer.cs deleted file mode 100644 index 1a4445e28b2..00000000000 --- a/irc/TechBot/TechBot.Library/Settings.Designer.cs +++ /dev/null @@ -1,80 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.1433 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace TechBot.Library { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\Ros\\current\\irc\\TechBot\\Resources\\ntstatus.xml")] - public string NtStatusXml { - get { - return ((string)(this["NtStatusXml"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\Ros\\current\\irc\\TechBot\\Resources\\winerror.xml")] - public string WinErrorXml { - get { - return ((string)(this["WinErrorXml"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\Ros\\current\\irc\\TechBot\\Resources\\hresult.xml")] - public string HResultXml { - get { - return ((string)(this["HResultXml"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("C:\\Ros\\current\\irc\\TechBot\\Resources\\wm.xml")] - public string WMXml { - get { - return ((string)(this["WMXml"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("svn://svn.reactos.org/reactos/trunk")] - public string SVNRoot { - get { - return ((string)(this["SVNRoot"])); - } - } - - [global::System.Configuration.ApplicationScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("!")] - public string CommandPrefix { - get { - return ((string)(this["CommandPrefix"])); - } - } - } -} diff --git a/irc/TechBot/TechBot.Library/Settings.cs b/irc/TechBot/TechBot.Library/Settings.cs deleted file mode 100644 index e1543b0e887..00000000000 --- a/irc/TechBot/TechBot.Library/Settings.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace TechBot.Library { - - - // This class allows you to handle specific events on the settings class: - // The SettingChanging event is raised before a setting's value is changed. - // The PropertyChanged event is raised after a setting's value is changed. - // The SettingsLoaded event is raised after the setting values are loaded. - // The SettingsSaving event is raised before the setting values are saved. - internal sealed partial class Settings { - - public Settings() { - // // To add event handlers for saving and changing settings, uncomment the lines below: - // - // this.SettingChanging += this.SettingChangingEventHandler; - // - // this.SettingsSaving += this.SettingsSavingEventHandler; - // - } - - private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { - // Add code to handle the SettingChangingEvent event here. - } - - private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { - // Add code to handle the SettingsSaving event here. - } - } -} diff --git a/irc/TechBot/TechBot.Library/Settings.settings b/irc/TechBot/TechBot.Library/Settings.settings deleted file mode 100644 index 2673cc50cb1..00000000000 --- a/irc/TechBot/TechBot.Library/Settings.settings +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - C:\Ros\current\irc\TechBot\Resources\ntstatus.xml - - - C:\Ros\current\irc\TechBot\Resources\winerror.xml - - - C:\Ros\current\irc\TechBot\Resources\hresult.xml - - - C:\Ros\current\irc\TechBot\Resources\wm.xml - - - svn://svn.reactos.org/reactos/trunk - - - ! - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Library/TechBot.Library.csproj b/irc/TechBot/TechBot.Library/TechBot.Library.csproj deleted file mode 100644 index 59505743bf2..00000000000 --- a/irc/TechBot/TechBot.Library/TechBot.Library.csproj +++ /dev/null @@ -1,83 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {1114F34D-F388-4F38-AE27-C0EE1B10B777} - Library - Properties - TechBot.Library - TechBot.Library - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - True - True - Settings.settings - - - - - - - - - - - - {D2A57931-DF04-4BC3-BD11-75DF4F3B0A88} - TechBot.IRCLibrary - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.Library/TechBotIrcService.cs b/irc/TechBot/TechBot.Library/TechBotIrcService.cs deleted file mode 100644 index 2a51374d330..00000000000 --- a/irc/TechBot/TechBot.Library/TechBotIrcService.cs +++ /dev/null @@ -1,312 +0,0 @@ -using System; -using System.Text; -using System.Collections; -using System.Threading; - -using TechBot.IRCLibrary; - -namespace TechBot.Library -{ - public class IrcServiceOutput : IServiceOutput - { - public void WriteLine(MessageContext context, - string message) - { - if (context is ChannelMessageContext) - { - Thread.Sleep (500); - ChannelMessageContext channelContext = context as ChannelMessageContext; - channelContext.Channel.Talk(message); - } - else if (context is UserMessageContext) - { - UserMessageContext userContext = context as UserMessageContext; - userContext.User.Talk(message); - } - else - { - throw new InvalidOperationException(String.Format("Unhandled message context '{0}'", - context.GetType())); - } - } - } - - public class IrcTechBotService : TechBotService - { - private int port; - private string hostname; - private string channelnames; - private string botname; - private string password; - private IrcClient m_IrcClient; - private ArrayList channels = new ArrayList(); - private bool isStopped = false; - - public IrcTechBotService(string hostname, - int port, - string channelnames, - string botname, - string password) - : base (new IrcServiceOutput()) - { - this.hostname = hostname; - this.port = port; - this.channelnames = channelnames; - this.botname = botname; - if (password == null || password.Trim() == "") - this.password = null; - else - this.password = password; - } - - public override void Run() - { - //Call the base class - base.Run(); - - m_IrcClient = new IrcClient(); - m_IrcClient.Encoding = Encoding.GetEncoding("iso-8859-1"); - m_IrcClient.OnConnect += new OnConnectHandler(m_IrcClient_OnConnect); - m_IrcClient.OnConnectionLost += new OnConnectionLostHandler(m_IrcClient_OnConnectionLost); - m_IrcClient.OnDisconnect += new OnDisconnectHandler(m_IrcClient_OnDisconnect); - m_IrcClient.MessageReceived += new MessageReceivedHandler(client_MessageReceived); - m_IrcClient.ChannelUserDatabaseChanged += new ChannelUserDatabaseChangedHandler(client_ChannelUserDatabaseChanged); - - Connect(); - } - - void m_IrcClient_OnConnect() - { - Console.WriteLine("Connected..."); - } - - private void Connect() - { - Console.WriteLine("Connecting to {0} port {1}", - hostname, - port); - m_IrcClient.Connect(hostname, port); - - m_IrcClient.Register(botname, password, null); - Console.WriteLine("Registered as {0}...", m_IrcClient.Nickname); - - /* Did we get the nick we wanted? */ - if (m_IrcClient.Nickname != botname) - { - /* there must have been an existing one, kill it */ - m_IrcClient.GhostNick(botname, password);; - } - - JoinChannels(); - - while (!isStopped) - { - Thread.Sleep(1000); - } - - PartChannels(); - m_IrcClient.Diconnect(); - } - - void m_IrcClient_OnDisconnect() - { - Console.WriteLine("Disconnected..."); - } - - void m_IrcClient_OnConnectionLost() - { - //Dispose old connection - Disconnect(); - - //Sleep for 1 minute - Thread.Sleep(1000 * 60); - - //Try to reconnect - Connect(); - } - - private void Disconnect() - { - try - { - m_IrcClient.Diconnect(); - } - catch (Exception) - { - // - } - } - - public void Stop() - { - isStopped = true; - } - - private void JoinChannels() - { - foreach (string channelname in channelnames.Split(new char[] { ';' })) - { - IrcChannel channel = m_IrcClient.JoinChannel(channelname); - channels.Add(channel); - System.Console.WriteLine(String.Format("Joined channel #{0}...", - channel.Name)); - } - } - - private void PartChannels() - { - foreach (IrcChannel channel in channels) - { - m_IrcClient.PartChannel(channel, "Caught in the bitstream..."); - System.Console.WriteLine(String.Format("Parted channel #{0}...", - channel.Name)); - } - } - - private string GetMessageSource(MessageContext context) - { - if (context is ChannelMessageContext) - { - ChannelMessageContext channelContext = context as ChannelMessageContext; - return String.Format("#{0}", - channelContext.Channel.Name); - } - else if (context is UserMessageContext) - { - UserMessageContext userContext = context as UserMessageContext; - return userContext.User.Nickname; - } - else - { - throw new InvalidOperationException(String.Format("Unhandled message context '{0}'", - context.GetType())); - } - } - - private void ExtractMessage(string parameters, - out string message) - { - int startIndex = parameters.IndexOf(':'); - if (startIndex != -1) - { - message = parameters.Substring(startIndex + 1); - } - else - { - message = parameters; - } - } - - private bool GetChannelName(IrcMessage message, - out string channelName) - { - if (message.Parameters == null || !message.Parameters.StartsWith("#")) - { - channelName = null; - return false; - } - - int index = message.Parameters.IndexOf(' '); - if (index == -1) - index = message.Parameters.Length; - else - index = index - 1; - channelName = message.Parameters.Substring(1, index); - return true; - } - - private bool GetTargetNickname(IrcMessage message, - out string nickname) - { - if (message.Parameters == null) - { - nickname = null; - return false; - } - - int index = message.Parameters.IndexOf(' '); - if (index == -1) - index = message.Parameters.Length; - nickname = message.Parameters.Substring(0, index); - Console.WriteLine("nickname: " + nickname); - return true; - } - - private bool ShouldAcceptMessage(IrcMessage message, - out MessageContext context) - { - if (message.Command.ToUpper().Equals("PRIVMSG")) - { - string channelName; - string nickname; - if (GetChannelName(message, - out channelName)) - { - foreach (IrcChannel channel in channels) - { - if (String.Compare(channel.Name, channelName, true) == 0) - { - context = new ChannelMessageContext(channel); - return true; - } - } - } - else if (GetTargetNickname(message, - out nickname)) - { - IrcUser targetUser = new IrcUser(m_IrcClient, - nickname); - if (String.Compare(targetUser.Nickname, botname, true) == 0) - { - IrcUser sourceUser = new IrcUser(m_IrcClient, - message.PrefixNickname); - context = new UserMessageContext(sourceUser); - return true; - } - } - } - context = null; - return false; - } - - private void client_MessageReceived(IrcMessage message) - { - try - { - if (message.Command != null && - message.Parameters != null) - { - string injectMessage; - ExtractMessage(message.Parameters, - out injectMessage); - MessageContext context; - if (ShouldAcceptMessage(message, - out context)) - { - Console.WriteLine(String.Format("Injecting: {0} from {1}", - injectMessage, - GetMessageSource(context))); - InjectMessage(context, - injectMessage); - } - else - { - Console.WriteLine("Received: " + message.Line); - } - } - else - { - Console.WriteLine("Received: " + message.Line); - } - } - catch (Exception ex) - { - Console.WriteLine(String.Format("Exception: {0}", ex)); - } - } - - private void client_ChannelUserDatabaseChanged(IrcChannel channel) - { - } - } -} diff --git a/irc/TechBot/TechBot.Library/TechBotService.cs b/irc/TechBot/TechBot.Library/TechBotService.cs deleted file mode 100644 index 025ff46d8ed..00000000000 --- a/irc/TechBot/TechBot.Library/TechBotService.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Data; -using System.Threading; - -using TechBot.IRCLibrary; - -namespace TechBot.Library -{ - public abstract class TechBotService - { - protected IServiceOutput m_ServiceOutput; - - public TechBotService(IServiceOutput serviceOutput) - { - m_ServiceOutput = serviceOutput; - } - - public virtual void Run() - { - CommandFactory.LoadPlugins(); - } - - public IServiceOutput ServiceOutput - { - get { return m_ServiceOutput; } - } - - public CommandBuilderCollection Commands - { - get { return CommandFactory.Commands; } - } - - public void InjectMessage(MessageContext context, string message) - { - ParseCommandMessage(context, - message); - } - - private bool IsCommandMessage(string message) - { - return message.StartsWith(Settings.Default.CommandPrefix); - } - - public void InjectMessage(string message) - { - ParseCommandMessage(null, message); - } - - public void ParseCommandMessage(MessageContext context, - string message) - { - if (!IsCommandMessage(message)) - return; - - message = message.Substring(1).Trim(); - int index = message.IndexOf(' '); - string commandName; - string commandParams = ""; - if (index != -1) - { - commandName = message.Substring(0, index).Trim(); - commandParams = message.Substring(index).Trim(); - } - else - commandName = message.Trim(); - - foreach (CommandBuilder command in Commands) - { - if (command.Name == commandName) - { - //Create a new instance of the required command type - Command cmd = command.CreateCommand(); - - cmd.TechBot = this; - cmd.Context = context; - cmd.Parameters = commandParams; - - try - { - cmd.Initialize(); - cmd.Run(); - cmd.DeInitialize(); - } - catch (Exception e) - { - ServiceOutput.WriteLine(context, string.Format("Uops! Just crashed with exception '{0}' at {1}", - e.Message, - e.Source)); - - ServiceOutput.WriteLine(context, e.StackTrace); - } - - return; - } - } - } - } -} diff --git a/irc/TechBot/TechBot.Library/app.config b/irc/TechBot/TechBot.Library/app.config deleted file mode 100644 index cc2cba5b4ee..00000000000 --- a/irc/TechBot/TechBot.Library/app.config +++ /dev/null @@ -1,30 +0,0 @@ - - - - -
        - - - - - - C:\Ros\current\irc\TechBot\Resources\ntstatus.xml - - - C:\Ros\current\irc\TechBot\Resources\winerror.xml - - - C:\Ros\current\irc\TechBot\Resources\hresult.xml - - - C:\Ros\current\irc\TechBot\Resources\wm.xml - - - svn://svn.reactos.org/reactos/trunk - - - ! - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot.sln b/irc/TechBot/TechBot.sln deleted file mode 100644 index 3c794500893..00000000000 --- a/irc/TechBot/TechBot.sln +++ /dev/null @@ -1,62 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot", "TechBot\TechBot.csproj", "{106F437D-424B-4758-A69C-862D08D26F3D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compression", "Compression\Compression.csproj", "{E32307F1-623A-4E62-826F-56CDD4B23A54}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CHMLibrary", "CHMLibrary\CHMLibrary.csproj", "{72E5CCA1-6318-4D62-964D-CB23A5C743B5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot.Console", "TechBot.Console\TechBot.Console.csproj", "{44258BA2-FFCB-4463-9CED-6DE5CC5CEBD4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot.IRCLibrary", "TechBot.IRCLibrary\TechBot.IRCLibrary.csproj", "{D2A57931-DF04-4BC3-BD11-75DF4F3B0A88}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot.Library", "TechBot.Library\TechBot.Library.csproj", "{1114F34D-F388-4F38-AE27-C0EE1B10B777}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot.Commands.Common", "TechBot.Commands.Common\TechBot.Commands.Common.csproj", "{041B5F06-BF97-4981-B024-3A7B6DD9F6AE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot.Commands.MSDN", "TechBot.Commands.MSDN\TechBot.Commands.MSDN.csproj", "{ADBF1ED6-A586-4707-BD59-4CD53448D0FE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {106F437D-424B-4758-A69C-862D08D26F3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {106F437D-424B-4758-A69C-862D08D26F3D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {106F437D-424B-4758-A69C-862D08D26F3D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {106F437D-424B-4758-A69C-862D08D26F3D}.Release|Any CPU.Build.0 = Release|Any CPU - {E32307F1-623A-4E62-826F-56CDD4B23A54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E32307F1-623A-4E62-826F-56CDD4B23A54}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E32307F1-623A-4E62-826F-56CDD4B23A54}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E32307F1-623A-4E62-826F-56CDD4B23A54}.Release|Any CPU.Build.0 = Release|Any CPU - {72E5CCA1-6318-4D62-964D-CB23A5C743B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72E5CCA1-6318-4D62-964D-CB23A5C743B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72E5CCA1-6318-4D62-964D-CB23A5C743B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72E5CCA1-6318-4D62-964D-CB23A5C743B5}.Release|Any CPU.Build.0 = Release|Any CPU - {44258BA2-FFCB-4463-9CED-6DE5CC5CEBD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44258BA2-FFCB-4463-9CED-6DE5CC5CEBD4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44258BA2-FFCB-4463-9CED-6DE5CC5CEBD4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44258BA2-FFCB-4463-9CED-6DE5CC5CEBD4}.Release|Any CPU.Build.0 = Release|Any CPU - {D2A57931-DF04-4BC3-BD11-75DF4F3B0A88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D2A57931-DF04-4BC3-BD11-75DF4F3B0A88}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D2A57931-DF04-4BC3-BD11-75DF4F3B0A88}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D2A57931-DF04-4BC3-BD11-75DF4F3B0A88}.Release|Any CPU.Build.0 = Release|Any CPU - {1114F34D-F388-4F38-AE27-C0EE1B10B777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1114F34D-F388-4F38-AE27-C0EE1B10B777}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1114F34D-F388-4F38-AE27-C0EE1B10B777}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1114F34D-F388-4F38-AE27-C0EE1B10B777}.Release|Any CPU.Build.0 = Release|Any CPU - {041B5F06-BF97-4981-B024-3A7B6DD9F6AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {041B5F06-BF97-4981-B024-3A7B6DD9F6AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {041B5F06-BF97-4981-B024-3A7B6DD9F6AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {041B5F06-BF97-4981-B024-3A7B6DD9F6AE}.Release|Any CPU.Build.0 = Release|Any CPU - {ADBF1ED6-A586-4707-BD59-4CD53448D0FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADBF1ED6-A586-4707-BD59-4CD53448D0FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADBF1ED6-A586-4707-BD59-4CD53448D0FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADBF1ED6-A586-4707-BD59-4CD53448D0FE}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/irc/TechBot/TechBot/App.config b/irc/TechBot/TechBot/App.config deleted file mode 100644 index 652f7444d66..00000000000 --- a/irc/TechBot/TechBot/App.config +++ /dev/null @@ -1,44 +0,0 @@ - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - irc.eu.freenode.net - - - rbuildbottest - - - RBuildBot - - - qwerty - - - 6667 - - - - diff --git a/irc/TechBot/TechBot/AssemblyInfo.cs b/irc/TechBot/TechBot/AssemblyInfo.cs deleted file mode 100644 index dbacda112e8..00000000000 --- a/irc/TechBot/TechBot/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("1.0.*")] - -// The following attributes specify the key for the sign of your assembly. See the -// .NET Framework documentation for more information about signing. -// This is not required, if you don't want signing let these attributes like they're. -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] diff --git a/irc/TechBot/TechBot/Default.build b/irc/TechBot/TechBot/Default.build deleted file mode 100644 index 8d0f4bb4de7..00000000000 --- a/irc/TechBot/TechBot/Default.build +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/irc/TechBot/TechBot/ProjectInstaller.cs b/irc/TechBot/TechBot/ProjectInstaller.cs deleted file mode 100644 index 0dc2b152a6e..00000000000 --- a/irc/TechBot/TechBot/ProjectInstaller.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.ComponentModel; -using System.ServiceProcess; -using System.Configuration.Install; -using System.Collections.Generic; -using System.Text; - -namespace TechBot -{ - [RunInstaller(true)] - public class ProjectInstaller : Installer - { - public ProjectInstaller() - { - ServiceProcessInstaller spi = null; - ServiceInstaller si = null; - - spi = new ServiceProcessInstaller(); - spi.Account = ServiceAccount.LocalSystem; - - si = new ServiceInstaller(); - si.ServiceName = "TechBot"; - si.StartType = ServiceStartMode.Automatic; - - Installers.AddRange(new Installer[] { spi, si }); - } - } -} diff --git a/irc/TechBot/TechBot/Properties/.gitignore b/irc/TechBot/TechBot/Properties/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/irc/TechBot/TechBot/ServiceThread.cs b/irc/TechBot/TechBot/ServiceThread.cs deleted file mode 100644 index 411d0f94f98..00000000000 --- a/irc/TechBot/TechBot/ServiceThread.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Configuration; -using System.Diagnostics; -using TechBot.Library; - -namespace TechBot -{ - public class ServiceThread - { - private EventLog m_EventLog; - - public ServiceThread(EventLog eventLog) - { - m_EventLog = eventLog; - } - - public void Run() - { - System.Console.WriteLine("TechBot irc service..."); - - IrcTechBotService ircService = new IrcTechBotService( - Settings.Default.IRCServerHostName, - Settings.Default.IRCServerHostPort, - Settings.Default.IRCChannelNames, - Settings.Default.IRCBotName, - Settings.Default.IRCBotPassword); - - ircService.Run(); - } - - public void Start() - { - try - { - Run(); - } - catch (Exception ex) - { - m_EventLog.WriteEntry(String.Format("Ex. {0}", ex)); - } - } - } -} diff --git a/irc/TechBot/TechBot/Settings.Designer.cs b/irc/TechBot/TechBot/Settings.Designer.cs deleted file mode 100644 index 87ae5985bc2..00000000000 --- a/irc/TechBot/TechBot/Settings.Designer.cs +++ /dev/null @@ -1,86 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.1433 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace TechBot { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("irc.eu.freenode.net")] - public string IRCServerHostName { - get { - return ((string)(this["IRCServerHostName"])); - } - set { - this["IRCServerHostName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("rbuildbottest")] - public string IRCChannelNames { - get { - return ((string)(this["IRCChannelNames"])); - } - set { - this["IRCChannelNames"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("RBuildBot")] - public string IRCBotName { - get { - return ((string)(this["IRCBotName"])); - } - set { - this["IRCBotName"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("qwerty")] - public string IRCBotPassword { - get { - return ((string)(this["IRCBotPassword"])); - } - set { - this["IRCBotPassword"] = value; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("6667")] - public int IRCServerHostPort { - get { - return ((int)(this["IRCServerHostPort"])); - } - set { - this["IRCServerHostPort"] = value; - } - } - } -} diff --git a/irc/TechBot/TechBot/Settings.settings b/irc/TechBot/TechBot/Settings.settings deleted file mode 100644 index cd1160b7e7f..00000000000 --- a/irc/TechBot/TechBot/Settings.settings +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - irc.eu.freenode.net - - - rbuildbottest - - - RBuildBot - - - qwerty - - - 6667 - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot/TechBot.csproj b/irc/TechBot/TechBot/TechBot.csproj deleted file mode 100644 index b5b42911efa..00000000000 --- a/irc/TechBot/TechBot/TechBot.csproj +++ /dev/null @@ -1,82 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {106F437D-424B-4758-A69C-862D08D26F3D} - Exe - Properties - TechBot - TechBot - TechBot.TechBotService - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - - Component - - - - Settings.settings - True - True - - - Component - - - - - - - - - - - - {D2A57931-DF04-4BC3-BD11-75DF4F3B0A88} - TechBot.IRCLibrary - - - {1114F34D-F388-4F38-AE27-C0EE1B10B777} - TechBot.Library - - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot/TechBot.prjx b/irc/TechBot/TechBot/TechBot.prjx deleted file mode 100644 index 7af6ca126aa..00000000000 --- a/irc/TechBot/TechBot/TechBot.prjx +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/irc/TechBot/TechBot/TechBotService.cs b/irc/TechBot/TechBot/TechBotService.cs deleted file mode 100644 index 61c1e0f5cd1..00000000000 --- a/irc/TechBot/TechBot/TechBotService.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Threading; -using System.Collections; -using System.ComponentModel; -using System.Data; -using System.Diagnostics; -using System.ServiceProcess; -using System.Configuration.Install; - -namespace TechBot -{ - public class TechBotService : ServiceBase - { - private Thread thread; - private ServiceThread threadWorker; - - public TechBotService() - { - InitializeComponents(); - } - - private void InitializeComponents() - { - this.ServiceName = "TechBot"; - } - - /// - /// This method starts the service. - /// - public static void Main() - { - System.ServiceProcess.ServiceBase.Run(new System.ServiceProcess.ServiceBase[] { - new TechBotService() // To run more than one service you have to add them here - }); - } - - /// - /// Clean up any resources being used. - /// - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - } - - /// - /// Start this service. - /// - protected override void OnStart(string[] args) - { - try - { - threadWorker = new ServiceThread(EventLog); - thread = new Thread(new ThreadStart(threadWorker.Start)); - thread.Start(); - EventLog.WriteEntry(String.Format("TechBot service is running.")); - } - catch (Exception ex) - { - EventLog.WriteEntry(String.Format("Ex. {0}", ex)); - } - } - - /// - /// Stop this service. - /// - protected override void OnStop() - { - try - { - thread.Abort(); - thread.Join(); - thread = null; - threadWorker = null; - EventLog.WriteEntry(String.Format("TechBot service is stopped.")); - } - catch (Exception ex) - { - EventLog.WriteEntry(String.Format("Ex. {0}", ex)); - } - } - } -} diff --git a/reactos/lib/3rdparty/3rdparty.rbuild b/lib/3rdparty/3rdparty.rbuild similarity index 100% rename from reactos/lib/3rdparty/3rdparty.rbuild rename to lib/3rdparty/3rdparty.rbuild diff --git a/reactos/lib/3rdparty/adns/COPYING b/lib/3rdparty/adns/COPYING similarity index 100% rename from reactos/lib/3rdparty/adns/COPYING rename to lib/3rdparty/adns/COPYING diff --git a/reactos/lib/3rdparty/adns/GPL-vs-LGPL b/lib/3rdparty/adns/GPL-vs-LGPL similarity index 100% rename from reactos/lib/3rdparty/adns/GPL-vs-LGPL rename to lib/3rdparty/adns/GPL-vs-LGPL diff --git a/reactos/lib/3rdparty/adns/INSTALL b/lib/3rdparty/adns/INSTALL similarity index 100% rename from reactos/lib/3rdparty/adns/INSTALL rename to lib/3rdparty/adns/INSTALL diff --git a/reactos/lib/3rdparty/adns/Makefile.in b/lib/3rdparty/adns/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/adns/Makefile.in rename to lib/3rdparty/adns/Makefile.in diff --git a/reactos/lib/3rdparty/adns/README b/lib/3rdparty/adns/README similarity index 100% rename from reactos/lib/3rdparty/adns/README rename to lib/3rdparty/adns/README diff --git a/reactos/lib/3rdparty/adns/README.html b/lib/3rdparty/adns/README.html similarity index 100% rename from reactos/lib/3rdparty/adns/README.html rename to lib/3rdparty/adns/README.html diff --git a/reactos/lib/3rdparty/adns/TODO b/lib/3rdparty/adns/TODO similarity index 100% rename from reactos/lib/3rdparty/adns/TODO rename to lib/3rdparty/adns/TODO diff --git a/reactos/lib/3rdparty/adns/acconfig.h b/lib/3rdparty/adns/acconfig.h similarity index 100% rename from reactos/lib/3rdparty/adns/acconfig.h rename to lib/3rdparty/adns/acconfig.h diff --git a/reactos/lib/3rdparty/adns/aclocal.m4 b/lib/3rdparty/adns/aclocal.m4 similarity index 100% rename from reactos/lib/3rdparty/adns/aclocal.m4 rename to lib/3rdparty/adns/aclocal.m4 diff --git a/reactos/lib/3rdparty/adns/adns.rbuild b/lib/3rdparty/adns/adns.rbuild similarity index 100% rename from reactos/lib/3rdparty/adns/adns.rbuild rename to lib/3rdparty/adns/adns.rbuild diff --git a/reactos/lib/3rdparty/adns/adns_win32/README.TXT b/lib/3rdparty/adns/adns_win32/README.TXT similarity index 100% rename from reactos/lib/3rdparty/adns/adns_win32/README.TXT rename to lib/3rdparty/adns/adns_win32/README.TXT diff --git a/reactos/lib/3rdparty/adns/adns_win32/adns_unix_calls.c b/lib/3rdparty/adns/adns_win32/adns_unix_calls.c similarity index 100% rename from reactos/lib/3rdparty/adns/adns_win32/adns_unix_calls.c rename to lib/3rdparty/adns/adns_win32/adns_unix_calls.c diff --git a/reactos/lib/3rdparty/adns/adns_win32/adns_win32.h b/lib/3rdparty/adns/adns_win32/adns_win32.h similarity index 100% rename from reactos/lib/3rdparty/adns/adns_win32/adns_win32.h rename to lib/3rdparty/adns/adns_win32/adns_win32.h diff --git a/reactos/lib/3rdparty/adns/adns_win32/getopt.c b/lib/3rdparty/adns/adns_win32/getopt.c similarity index 100% rename from reactos/lib/3rdparty/adns/adns_win32/getopt.c rename to lib/3rdparty/adns/adns_win32/getopt.c diff --git a/reactos/lib/3rdparty/adns/adns_win32/getopt.h b/lib/3rdparty/adns/adns_win32/getopt.h similarity index 100% rename from reactos/lib/3rdparty/adns/adns_win32/getopt.h rename to lib/3rdparty/adns/adns_win32/getopt.h diff --git a/reactos/lib/3rdparty/adns/adns_win32/timercmp.h b/lib/3rdparty/adns/adns_win32/timercmp.h similarity index 100% rename from reactos/lib/3rdparty/adns/adns_win32/timercmp.h rename to lib/3rdparty/adns/adns_win32/timercmp.h diff --git a/reactos/lib/3rdparty/adns/changelog b/lib/3rdparty/adns/changelog similarity index 100% rename from reactos/lib/3rdparty/adns/changelog rename to lib/3rdparty/adns/changelog diff --git a/reactos/lib/3rdparty/adns/client/Makefile.in b/lib/3rdparty/adns/client/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/adns/client/Makefile.in rename to lib/3rdparty/adns/client/Makefile.in diff --git a/reactos/lib/3rdparty/adns/client/adh-main.c b/lib/3rdparty/adns/client/adh-main.c similarity index 100% rename from reactos/lib/3rdparty/adns/client/adh-main.c rename to lib/3rdparty/adns/client/adh-main.c diff --git a/reactos/lib/3rdparty/adns/client/adh-opts.c b/lib/3rdparty/adns/client/adh-opts.c similarity index 100% rename from reactos/lib/3rdparty/adns/client/adh-opts.c rename to lib/3rdparty/adns/client/adh-opts.c diff --git a/reactos/lib/3rdparty/adns/client/adh-query.c b/lib/3rdparty/adns/client/adh-query.c similarity index 100% rename from reactos/lib/3rdparty/adns/client/adh-query.c rename to lib/3rdparty/adns/client/adh-query.c diff --git a/reactos/lib/3rdparty/adns/client/adnshost.h b/lib/3rdparty/adns/client/adnshost.h similarity index 100% rename from reactos/lib/3rdparty/adns/client/adnshost.h rename to lib/3rdparty/adns/client/adnshost.h diff --git a/reactos/lib/3rdparty/adns/client/adnslogres.c b/lib/3rdparty/adns/client/adnslogres.c similarity index 100% rename from reactos/lib/3rdparty/adns/client/adnslogres.c rename to lib/3rdparty/adns/client/adnslogres.c diff --git a/reactos/lib/3rdparty/adns/client/adnsresfilter.c b/lib/3rdparty/adns/client/adnsresfilter.c similarity index 100% rename from reactos/lib/3rdparty/adns/client/adnsresfilter.c rename to lib/3rdparty/adns/client/adnsresfilter.c diff --git a/reactos/lib/3rdparty/adns/client/adnstest.c b/lib/3rdparty/adns/client/adnstest.c similarity index 100% rename from reactos/lib/3rdparty/adns/client/adnstest.c rename to lib/3rdparty/adns/client/adnstest.c diff --git a/reactos/lib/3rdparty/adns/client/client.h b/lib/3rdparty/adns/client/client.h similarity index 100% rename from reactos/lib/3rdparty/adns/client/client.h rename to lib/3rdparty/adns/client/client.h diff --git a/reactos/lib/3rdparty/adns/client/fanftest.c b/lib/3rdparty/adns/client/fanftest.c similarity index 100% rename from reactos/lib/3rdparty/adns/client/fanftest.c rename to lib/3rdparty/adns/client/fanftest.c diff --git a/reactos/lib/3rdparty/adns/configure.in b/lib/3rdparty/adns/configure.in similarity index 100% rename from reactos/lib/3rdparty/adns/configure.in rename to lib/3rdparty/adns/configure.in diff --git a/reactos/lib/3rdparty/adns/dynamic/Makefile.in b/lib/3rdparty/adns/dynamic/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/adns/dynamic/Makefile.in rename to lib/3rdparty/adns/dynamic/Makefile.in diff --git a/reactos/lib/3rdparty/adns/install-sh b/lib/3rdparty/adns/install-sh similarity index 100% rename from reactos/lib/3rdparty/adns/install-sh rename to lib/3rdparty/adns/install-sh diff --git a/reactos/lib/3rdparty/adns/settings.make.in b/lib/3rdparty/adns/settings.make.in similarity index 100% rename from reactos/lib/3rdparty/adns/settings.make.in rename to lib/3rdparty/adns/settings.make.in diff --git a/reactos/lib/3rdparty/adns/src/Makefile.in b/lib/3rdparty/adns/src/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/adns/src/Makefile.in rename to lib/3rdparty/adns/src/Makefile.in diff --git a/reactos/lib/3rdparty/adns/src/adns.h b/lib/3rdparty/adns/src/adns.h similarity index 100% rename from reactos/lib/3rdparty/adns/src/adns.h rename to lib/3rdparty/adns/src/adns.h diff --git a/reactos/lib/3rdparty/adns/src/adns.make b/lib/3rdparty/adns/src/adns.make similarity index 100% rename from reactos/lib/3rdparty/adns/src/adns.make rename to lib/3rdparty/adns/src/adns.make diff --git a/reactos/lib/3rdparty/adns/src/check.c b/lib/3rdparty/adns/src/check.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/check.c rename to lib/3rdparty/adns/src/check.c diff --git a/reactos/lib/3rdparty/adns/src/config.h b/lib/3rdparty/adns/src/config.h similarity index 100% rename from reactos/lib/3rdparty/adns/src/config.h rename to lib/3rdparty/adns/src/config.h diff --git a/reactos/lib/3rdparty/adns/src/config.h.in b/lib/3rdparty/adns/src/config.h.in similarity index 100% rename from reactos/lib/3rdparty/adns/src/config.h.in rename to lib/3rdparty/adns/src/config.h.in diff --git a/reactos/lib/3rdparty/adns/src/dlist.h b/lib/3rdparty/adns/src/dlist.h similarity index 100% rename from reactos/lib/3rdparty/adns/src/dlist.h rename to lib/3rdparty/adns/src/dlist.h diff --git a/reactos/lib/3rdparty/adns/src/event.c b/lib/3rdparty/adns/src/event.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/event.c rename to lib/3rdparty/adns/src/event.c diff --git a/reactos/lib/3rdparty/adns/src/general.c b/lib/3rdparty/adns/src/general.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/general.c rename to lib/3rdparty/adns/src/general.c diff --git a/reactos/lib/3rdparty/adns/src/internal.h b/lib/3rdparty/adns/src/internal.h similarity index 100% rename from reactos/lib/3rdparty/adns/src/internal.h rename to lib/3rdparty/adns/src/internal.h diff --git a/reactos/lib/3rdparty/adns/src/parse.c b/lib/3rdparty/adns/src/parse.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/parse.c rename to lib/3rdparty/adns/src/parse.c diff --git a/reactos/lib/3rdparty/adns/src/poll.c b/lib/3rdparty/adns/src/poll.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/poll.c rename to lib/3rdparty/adns/src/poll.c diff --git a/reactos/lib/3rdparty/adns/src/query.c b/lib/3rdparty/adns/src/query.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/query.c rename to lib/3rdparty/adns/src/query.c diff --git a/reactos/lib/3rdparty/adns/src/reply.c b/lib/3rdparty/adns/src/reply.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/reply.c rename to lib/3rdparty/adns/src/reply.c diff --git a/reactos/lib/3rdparty/adns/src/setup.c b/lib/3rdparty/adns/src/setup.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/setup.c rename to lib/3rdparty/adns/src/setup.c diff --git a/reactos/lib/3rdparty/adns/src/transmit.c b/lib/3rdparty/adns/src/transmit.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/transmit.c rename to lib/3rdparty/adns/src/transmit.c diff --git a/reactos/lib/3rdparty/adns/src/tvarith.h b/lib/3rdparty/adns/src/tvarith.h similarity index 100% rename from reactos/lib/3rdparty/adns/src/tvarith.h rename to lib/3rdparty/adns/src/tvarith.h diff --git a/reactos/lib/3rdparty/adns/src/types.c b/lib/3rdparty/adns/src/types.c similarity index 100% rename from reactos/lib/3rdparty/adns/src/types.c rename to lib/3rdparty/adns/src/types.c diff --git a/reactos/lib/3rdparty/bzip2/CHANGES b/lib/3rdparty/bzip2/CHANGES similarity index 100% rename from reactos/lib/3rdparty/bzip2/CHANGES rename to lib/3rdparty/bzip2/CHANGES diff --git a/reactos/lib/3rdparty/bzip2/LICENSE b/lib/3rdparty/bzip2/LICENSE similarity index 100% rename from reactos/lib/3rdparty/bzip2/LICENSE rename to lib/3rdparty/bzip2/LICENSE diff --git a/reactos/lib/3rdparty/bzip2/Makefile-libbz2_so b/lib/3rdparty/bzip2/Makefile-libbz2_so similarity index 100% rename from reactos/lib/3rdparty/bzip2/Makefile-libbz2_so rename to lib/3rdparty/bzip2/Makefile-libbz2_so diff --git a/reactos/lib/3rdparty/bzip2/README b/lib/3rdparty/bzip2/README similarity index 100% rename from reactos/lib/3rdparty/bzip2/README rename to lib/3rdparty/bzip2/README diff --git a/reactos/lib/3rdparty/bzip2/README.COMPILATION.PROBLEMS b/lib/3rdparty/bzip2/README.COMPILATION.PROBLEMS similarity index 100% rename from reactos/lib/3rdparty/bzip2/README.COMPILATION.PROBLEMS rename to lib/3rdparty/bzip2/README.COMPILATION.PROBLEMS diff --git a/reactos/lib/3rdparty/bzip2/README.reactos b/lib/3rdparty/bzip2/README.reactos similarity index 100% rename from reactos/lib/3rdparty/bzip2/README.reactos rename to lib/3rdparty/bzip2/README.reactos diff --git a/reactos/lib/3rdparty/bzip2/Y2K_INFO b/lib/3rdparty/bzip2/Y2K_INFO similarity index 100% rename from reactos/lib/3rdparty/bzip2/Y2K_INFO rename to lib/3rdparty/bzip2/Y2K_INFO diff --git a/reactos/lib/3rdparty/bzip2/blocksort.c b/lib/3rdparty/bzip2/blocksort.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/blocksort.c rename to lib/3rdparty/bzip2/blocksort.c diff --git a/reactos/lib/3rdparty/bzip2/bzip2.1 b/lib/3rdparty/bzip2/bzip2.1 similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzip2.1 rename to lib/3rdparty/bzip2/bzip2.1 diff --git a/reactos/lib/3rdparty/bzip2/bzip2.1.preformatted b/lib/3rdparty/bzip2/bzip2.1.preformatted similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzip2.1.preformatted rename to lib/3rdparty/bzip2/bzip2.1.preformatted diff --git a/reactos/lib/3rdparty/bzip2/bzip2.c b/lib/3rdparty/bzip2/bzip2.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzip2.c rename to lib/3rdparty/bzip2/bzip2.c diff --git a/reactos/lib/3rdparty/bzip2/bzip2.rbuild b/lib/3rdparty/bzip2/bzip2.rbuild similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzip2.rbuild rename to lib/3rdparty/bzip2/bzip2.rbuild diff --git a/reactos/lib/3rdparty/bzip2/bzip2.txt b/lib/3rdparty/bzip2/bzip2.txt similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzip2.txt rename to lib/3rdparty/bzip2/bzip2.txt diff --git a/reactos/lib/3rdparty/bzip2/bzip2recover.c b/lib/3rdparty/bzip2/bzip2recover.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzip2recover.c rename to lib/3rdparty/bzip2/bzip2recover.c diff --git a/reactos/lib/3rdparty/bzip2/bzlib.c b/lib/3rdparty/bzip2/bzlib.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzlib.c rename to lib/3rdparty/bzip2/bzlib.c diff --git a/reactos/lib/3rdparty/bzip2/bzlib.h b/lib/3rdparty/bzip2/bzlib.h similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzlib.h rename to lib/3rdparty/bzip2/bzlib.h diff --git a/reactos/lib/3rdparty/bzip2/bzlib_private.h b/lib/3rdparty/bzip2/bzlib_private.h similarity index 100% rename from reactos/lib/3rdparty/bzip2/bzlib_private.h rename to lib/3rdparty/bzip2/bzlib_private.h diff --git a/reactos/lib/3rdparty/bzip2/compress.c b/lib/3rdparty/bzip2/compress.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/compress.c rename to lib/3rdparty/bzip2/compress.c diff --git a/reactos/lib/3rdparty/bzip2/crctable.c b/lib/3rdparty/bzip2/crctable.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/crctable.c rename to lib/3rdparty/bzip2/crctable.c diff --git a/reactos/lib/3rdparty/bzip2/decompress.c b/lib/3rdparty/bzip2/decompress.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/decompress.c rename to lib/3rdparty/bzip2/decompress.c diff --git a/reactos/lib/3rdparty/bzip2/dllmain.c b/lib/3rdparty/bzip2/dllmain.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/dllmain.c rename to lib/3rdparty/bzip2/dllmain.c diff --git a/reactos/lib/3rdparty/bzip2/dlltest.c b/lib/3rdparty/bzip2/dlltest.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/dlltest.c rename to lib/3rdparty/bzip2/dlltest.c diff --git a/reactos/lib/3rdparty/bzip2/dlltest.dsp b/lib/3rdparty/bzip2/dlltest.dsp similarity index 100% rename from reactos/lib/3rdparty/bzip2/dlltest.dsp rename to lib/3rdparty/bzip2/dlltest.dsp diff --git a/reactos/lib/3rdparty/bzip2/huffman.c b/lib/3rdparty/bzip2/huffman.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/huffman.c rename to lib/3rdparty/bzip2/huffman.c diff --git a/reactos/lib/3rdparty/bzip2/libbz2.def b/lib/3rdparty/bzip2/libbz2.def similarity index 100% rename from reactos/lib/3rdparty/bzip2/libbz2.def rename to lib/3rdparty/bzip2/libbz2.def diff --git a/reactos/lib/3rdparty/bzip2/libbz2.dsp b/lib/3rdparty/bzip2/libbz2.dsp similarity index 100% rename from reactos/lib/3rdparty/bzip2/libbz2.dsp rename to lib/3rdparty/bzip2/libbz2.dsp diff --git a/reactos/lib/3rdparty/bzip2/makefile.msc b/lib/3rdparty/bzip2/makefile.msc similarity index 100% rename from reactos/lib/3rdparty/bzip2/makefile.msc rename to lib/3rdparty/bzip2/makefile.msc diff --git a/reactos/lib/3rdparty/bzip2/manual.ps b/lib/3rdparty/bzip2/manual.ps similarity index 100% rename from reactos/lib/3rdparty/bzip2/manual.ps rename to lib/3rdparty/bzip2/manual.ps diff --git a/reactos/lib/3rdparty/bzip2/manual.texi b/lib/3rdparty/bzip2/manual.texi similarity index 100% rename from reactos/lib/3rdparty/bzip2/manual.texi rename to lib/3rdparty/bzip2/manual.texi diff --git a/reactos/lib/3rdparty/bzip2/manual_1.html b/lib/3rdparty/bzip2/manual_1.html similarity index 100% rename from reactos/lib/3rdparty/bzip2/manual_1.html rename to lib/3rdparty/bzip2/manual_1.html diff --git a/reactos/lib/3rdparty/bzip2/manual_2.html b/lib/3rdparty/bzip2/manual_2.html similarity index 100% rename from reactos/lib/3rdparty/bzip2/manual_2.html rename to lib/3rdparty/bzip2/manual_2.html diff --git a/reactos/lib/3rdparty/bzip2/manual_3.html b/lib/3rdparty/bzip2/manual_3.html similarity index 100% rename from reactos/lib/3rdparty/bzip2/manual_3.html rename to lib/3rdparty/bzip2/manual_3.html diff --git a/reactos/lib/3rdparty/bzip2/manual_4.html b/lib/3rdparty/bzip2/manual_4.html similarity index 100% rename from reactos/lib/3rdparty/bzip2/manual_4.html rename to lib/3rdparty/bzip2/manual_4.html diff --git a/reactos/lib/3rdparty/bzip2/manual_toc.html b/lib/3rdparty/bzip2/manual_toc.html similarity index 100% rename from reactos/lib/3rdparty/bzip2/manual_toc.html rename to lib/3rdparty/bzip2/manual_toc.html diff --git a/reactos/lib/3rdparty/bzip2/randtable.c b/lib/3rdparty/bzip2/randtable.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/randtable.c rename to lib/3rdparty/bzip2/randtable.c diff --git a/reactos/lib/3rdparty/bzip2/sample1.ref b/lib/3rdparty/bzip2/sample1.ref similarity index 100% rename from reactos/lib/3rdparty/bzip2/sample1.ref rename to lib/3rdparty/bzip2/sample1.ref diff --git a/reactos/lib/3rdparty/bzip2/sample2.ref b/lib/3rdparty/bzip2/sample2.ref similarity index 100% rename from reactos/lib/3rdparty/bzip2/sample2.ref rename to lib/3rdparty/bzip2/sample2.ref diff --git a/reactos/lib/3rdparty/bzip2/sample3.ref b/lib/3rdparty/bzip2/sample3.ref similarity index 100% rename from reactos/lib/3rdparty/bzip2/sample3.ref rename to lib/3rdparty/bzip2/sample3.ref diff --git a/reactos/lib/3rdparty/bzip2/spewG.c b/lib/3rdparty/bzip2/spewG.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/spewG.c rename to lib/3rdparty/bzip2/spewG.c diff --git a/reactos/lib/3rdparty/bzip2/unbzip2.def b/lib/3rdparty/bzip2/unbzip2.def similarity index 100% rename from reactos/lib/3rdparty/bzip2/unbzip2.def rename to lib/3rdparty/bzip2/unbzip2.def diff --git a/reactos/lib/3rdparty/bzip2/unzcrash.c b/lib/3rdparty/bzip2/unzcrash.c similarity index 100% rename from reactos/lib/3rdparty/bzip2/unzcrash.c rename to lib/3rdparty/bzip2/unzcrash.c diff --git a/reactos/lib/3rdparty/bzip2/words0 b/lib/3rdparty/bzip2/words0 similarity index 100% rename from reactos/lib/3rdparty/bzip2/words0 rename to lib/3rdparty/bzip2/words0 diff --git a/reactos/lib/3rdparty/bzip2/words1 b/lib/3rdparty/bzip2/words1 similarity index 100% rename from reactos/lib/3rdparty/bzip2/words1 rename to lib/3rdparty/bzip2/words1 diff --git a/reactos/lib/3rdparty/bzip2/words2 b/lib/3rdparty/bzip2/words2 similarity index 100% rename from reactos/lib/3rdparty/bzip2/words2 rename to lib/3rdparty/bzip2/words2 diff --git a/reactos/lib/3rdparty/bzip2/words3 b/lib/3rdparty/bzip2/words3 similarity index 100% rename from reactos/lib/3rdparty/bzip2/words3 rename to lib/3rdparty/bzip2/words3 diff --git a/reactos/lib/3rdparty/expat/COPYING b/lib/3rdparty/expat/COPYING similarity index 100% rename from reactos/lib/3rdparty/expat/COPYING rename to lib/3rdparty/expat/COPYING diff --git a/reactos/lib/3rdparty/expat/Makefile.in b/lib/3rdparty/expat/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/expat/Makefile.in rename to lib/3rdparty/expat/Makefile.in diff --git a/reactos/lib/3rdparty/expat/README b/lib/3rdparty/expat/README similarity index 100% rename from reactos/lib/3rdparty/expat/README rename to lib/3rdparty/expat/README diff --git a/reactos/lib/3rdparty/expat/expat.dsw b/lib/3rdparty/expat/expat.dsw similarity index 100% rename from reactos/lib/3rdparty/expat/expat.dsw rename to lib/3rdparty/expat/expat.dsw diff --git a/reactos/lib/3rdparty/expat/expat.rbuild b/lib/3rdparty/expat/expat.rbuild similarity index 100% rename from reactos/lib/3rdparty/expat/expat.rbuild rename to lib/3rdparty/expat/expat.rbuild diff --git a/reactos/lib/3rdparty/expat/expat.spec b/lib/3rdparty/expat/expat.spec similarity index 100% rename from reactos/lib/3rdparty/expat/expat.spec rename to lib/3rdparty/expat/expat.spec diff --git a/reactos/lib/3rdparty/expat/lib/Makefile.MPW b/lib/3rdparty/expat/lib/Makefile.MPW similarity index 100% rename from reactos/lib/3rdparty/expat/lib/Makefile.MPW rename to lib/3rdparty/expat/lib/Makefile.MPW diff --git a/reactos/lib/3rdparty/expat/lib/ascii.h b/lib/3rdparty/expat/lib/ascii.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/ascii.h rename to lib/3rdparty/expat/lib/ascii.h diff --git a/reactos/lib/3rdparty/expat/lib/asciitab.h b/lib/3rdparty/expat/lib/asciitab.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/asciitab.h rename to lib/3rdparty/expat/lib/asciitab.h diff --git a/reactos/lib/3rdparty/expat/lib/expat.dsp b/lib/3rdparty/expat/lib/expat.dsp similarity index 100% rename from reactos/lib/3rdparty/expat/lib/expat.dsp rename to lib/3rdparty/expat/lib/expat.dsp diff --git a/reactos/lib/3rdparty/expat/lib/expat_config.h b/lib/3rdparty/expat/lib/expat_config.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/expat_config.h rename to lib/3rdparty/expat/lib/expat_config.h diff --git a/reactos/lib/3rdparty/expat/lib/expat_static.dsp b/lib/3rdparty/expat/lib/expat_static.dsp similarity index 100% rename from reactos/lib/3rdparty/expat/lib/expat_static.dsp rename to lib/3rdparty/expat/lib/expat_static.dsp diff --git a/reactos/lib/3rdparty/expat/lib/expatw.dsp b/lib/3rdparty/expat/lib/expatw.dsp similarity index 100% rename from reactos/lib/3rdparty/expat/lib/expatw.dsp rename to lib/3rdparty/expat/lib/expatw.dsp diff --git a/reactos/lib/3rdparty/expat/lib/expatw_static.dsp b/lib/3rdparty/expat/lib/expatw_static.dsp similarity index 100% rename from reactos/lib/3rdparty/expat/lib/expatw_static.dsp rename to lib/3rdparty/expat/lib/expatw_static.dsp diff --git a/reactos/lib/3rdparty/expat/lib/iasciitab.h b/lib/3rdparty/expat/lib/iasciitab.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/iasciitab.h rename to lib/3rdparty/expat/lib/iasciitab.h diff --git a/reactos/lib/3rdparty/expat/lib/internal.h b/lib/3rdparty/expat/lib/internal.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/internal.h rename to lib/3rdparty/expat/lib/internal.h diff --git a/reactos/lib/3rdparty/expat/lib/latin1tab.h b/lib/3rdparty/expat/lib/latin1tab.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/latin1tab.h rename to lib/3rdparty/expat/lib/latin1tab.h diff --git a/reactos/lib/3rdparty/expat/lib/libexpat.def b/lib/3rdparty/expat/lib/libexpat.def similarity index 100% rename from reactos/lib/3rdparty/expat/lib/libexpat.def rename to lib/3rdparty/expat/lib/libexpat.def diff --git a/reactos/lib/3rdparty/expat/lib/libexpatw.def b/lib/3rdparty/expat/lib/libexpatw.def similarity index 100% rename from reactos/lib/3rdparty/expat/lib/libexpatw.def rename to lib/3rdparty/expat/lib/libexpatw.def diff --git a/reactos/lib/3rdparty/expat/lib/macconfig.h b/lib/3rdparty/expat/lib/macconfig.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/macconfig.h rename to lib/3rdparty/expat/lib/macconfig.h diff --git a/reactos/lib/3rdparty/expat/lib/nametab.h b/lib/3rdparty/expat/lib/nametab.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/nametab.h rename to lib/3rdparty/expat/lib/nametab.h diff --git a/reactos/lib/3rdparty/expat/lib/utf8tab.h b/lib/3rdparty/expat/lib/utf8tab.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/utf8tab.h rename to lib/3rdparty/expat/lib/utf8tab.h diff --git a/reactos/lib/3rdparty/expat/lib/winconfig.h b/lib/3rdparty/expat/lib/winconfig.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/winconfig.h rename to lib/3rdparty/expat/lib/winconfig.h diff --git a/reactos/lib/3rdparty/expat/lib/xmlparse.c b/lib/3rdparty/expat/lib/xmlparse.c similarity index 100% rename from reactos/lib/3rdparty/expat/lib/xmlparse.c rename to lib/3rdparty/expat/lib/xmlparse.c diff --git a/reactos/lib/3rdparty/expat/lib/xmlrole.c b/lib/3rdparty/expat/lib/xmlrole.c similarity index 100% rename from reactos/lib/3rdparty/expat/lib/xmlrole.c rename to lib/3rdparty/expat/lib/xmlrole.c diff --git a/reactos/lib/3rdparty/expat/lib/xmlrole.h b/lib/3rdparty/expat/lib/xmlrole.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/xmlrole.h rename to lib/3rdparty/expat/lib/xmlrole.h diff --git a/reactos/lib/3rdparty/expat/lib/xmltok.c b/lib/3rdparty/expat/lib/xmltok.c similarity index 100% rename from reactos/lib/3rdparty/expat/lib/xmltok.c rename to lib/3rdparty/expat/lib/xmltok.c diff --git a/reactos/lib/3rdparty/expat/lib/xmltok.h b/lib/3rdparty/expat/lib/xmltok.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/xmltok.h rename to lib/3rdparty/expat/lib/xmltok.h diff --git a/reactos/lib/3rdparty/expat/lib/xmltok_impl.c b/lib/3rdparty/expat/lib/xmltok_impl.c similarity index 100% rename from reactos/lib/3rdparty/expat/lib/xmltok_impl.c rename to lib/3rdparty/expat/lib/xmltok_impl.c diff --git a/reactos/lib/3rdparty/expat/lib/xmltok_impl.h b/lib/3rdparty/expat/lib/xmltok_impl.h similarity index 100% rename from reactos/lib/3rdparty/expat/lib/xmltok_impl.h rename to lib/3rdparty/expat/lib/xmltok_impl.h diff --git a/reactos/lib/3rdparty/expat/lib/xmltok_ns.c b/lib/3rdparty/expat/lib/xmltok_ns.c similarity index 100% rename from reactos/lib/3rdparty/expat/lib/xmltok_ns.c rename to lib/3rdparty/expat/lib/xmltok_ns.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/as_is/os390/unpax-icu.sh b/lib/3rdparty/icu4ros/icu/as_is/os390/unpax-icu.sh similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/as_is/os390/unpax-icu.sh rename to lib/3rdparty/icu4ros/icu/as_is/os390/unpax-icu.sh diff --git a/reactos/lib/3rdparty/icu4ros/icu/as_is/os400/convertConfigure.sed b/lib/3rdparty/icu4ros/icu/as_is/os400/convertConfigure.sed similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/as_is/os400/convertConfigure.sed rename to lib/3rdparty/icu4ros/icu/as_is/os400/convertConfigure.sed diff --git a/reactos/lib/3rdparty/icu4ros/icu/as_is/os400/unpax-icu.sh b/lib/3rdparty/icu4ros/icu/as_is/os400/unpax-icu.sh similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/as_is/os400/unpax-icu.sh rename to lib/3rdparty/icu4ros/icu/as_is/os400/unpax-icu.sh diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/.cvsignore b/lib/3rdparty/icu4ros/icu/debian/.cvsignore similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/.cvsignore rename to lib/3rdparty/icu4ros/icu/debian/.cvsignore diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/README.Debian.libicu-dev b/lib/3rdparty/icu4ros/icu/debian/README.Debian.libicu-dev similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/README.Debian.libicu-dev rename to lib/3rdparty/icu4ros/icu/debian/README.Debian.libicu-dev diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/changelog b/lib/3rdparty/icu4ros/icu/debian/changelog similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/changelog rename to lib/3rdparty/icu4ros/icu/debian/changelog diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/control b/lib/3rdparty/icu4ros/icu/debian/control similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/control rename to lib/3rdparty/icu4ros/icu/debian/control diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/copyright b/lib/3rdparty/icu4ros/icu/debian/copyright similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/copyright rename to lib/3rdparty/icu4ros/icu/debian/copyright diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/icu-doc.doc-base b/lib/3rdparty/icu4ros/icu/debian/icu-doc.doc-base similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/icu-doc.doc-base rename to lib/3rdparty/icu4ros/icu/debian/icu-doc.doc-base diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/icu-doc.install b/lib/3rdparty/icu4ros/icu/debian/icu-doc.install similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/icu-doc.install rename to lib/3rdparty/icu4ros/icu/debian/icu-doc.install diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/icu.conffiles.in b/lib/3rdparty/icu4ros/icu/debian/icu.conffiles.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/icu.conffiles.in rename to lib/3rdparty/icu4ros/icu/debian/icu.conffiles.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/icu.postinst.in b/lib/3rdparty/icu4ros/icu/debian/icu.postinst.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/icu.postinst.in rename to lib/3rdparty/icu4ros/icu/debian/icu.postinst.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/icu.prerm.in b/lib/3rdparty/icu4ros/icu/debian/icu.prerm.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/icu.prerm.in rename to lib/3rdparty/icu4ros/icu/debian/icu.prerm.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/libicu.postinst b/lib/3rdparty/icu4ros/icu/debian/libicu.postinst similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/libicu.postinst rename to lib/3rdparty/icu4ros/icu/debian/libicu.postinst diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/libicu.prerm.in b/lib/3rdparty/icu4ros/icu/debian/libicu.prerm.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/libicu.prerm.in rename to lib/3rdparty/icu4ros/icu/debian/libicu.prerm.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/postinst.in b/lib/3rdparty/icu4ros/icu/debian/postinst.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/postinst.in rename to lib/3rdparty/icu4ros/icu/debian/postinst.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/prerm.in b/lib/3rdparty/icu4ros/icu/debian/prerm.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/prerm.in rename to lib/3rdparty/icu4ros/icu/debian/prerm.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/rules b/lib/3rdparty/icu4ros/icu/debian/rules similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/rules rename to lib/3rdparty/icu4ros/icu/debian/rules diff --git a/reactos/lib/3rdparty/icu4ros/icu/debian/watch.not-yet b/lib/3rdparty/icu4ros/icu/debian/watch.not-yet similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/debian/watch.not-yet rename to lib/3rdparty/icu4ros/icu/debian/watch.not-yet diff --git a/reactos/lib/3rdparty/icu4ros/icu/license.html b/lib/3rdparty/icu4ros/icu/license.html similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/license.html rename to lib/3rdparty/icu4ros/icu/license.html diff --git a/reactos/lib/3rdparty/icu4ros/icu/packaging/PACKAGES b/lib/3rdparty/icu4ros/icu/packaging/PACKAGES similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/packaging/PACKAGES rename to lib/3rdparty/icu4ros/icu/packaging/PACKAGES diff --git a/reactos/lib/3rdparty/icu4ros/icu/packaging/README b/lib/3rdparty/icu4ros/icu/packaging/README similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/packaging/README rename to lib/3rdparty/icu4ros/icu/packaging/README diff --git a/reactos/lib/3rdparty/icu4ros/icu/packaging/debian/README b/lib/3rdparty/icu4ros/icu/packaging/debian/README similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/packaging/debian/README rename to lib/3rdparty/icu4ros/icu/packaging/debian/README diff --git a/reactos/lib/3rdparty/icu4ros/icu/packaging/rpm/icu.spec b/lib/3rdparty/icu4ros/icu/packaging/rpm/icu.spec similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/packaging/rpm/icu.spec rename to lib/3rdparty/icu4ros/icu/packaging/rpm/icu.spec diff --git a/reactos/lib/3rdparty/icu4ros/icu/readme.html b/lib/3rdparty/icu4ros/icu/readme.html similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/readme.html rename to lib/3rdparty/icu4ros/icu/readme.html diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/Doxyfile.in b/lib/3rdparty/icu4ros/icu/source/Doxyfile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/Doxyfile.in rename to lib/3rdparty/icu4ros/icu/source/Doxyfile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/Makefile.in b/lib/3rdparty/icu4ros/icu/source/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/aclocal.m4 b/lib/3rdparty/icu4ros/icu/source/aclocal.m4 similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/aclocal.m4 rename to lib/3rdparty/icu4ros/icu/source/aclocal.m4 diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/allinone/allinone.sln b/lib/3rdparty/icu4ros/icu/source/allinone/allinone.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/allinone/allinone.sln rename to lib/3rdparty/icu4ros/icu/source/allinone/allinone.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/Makefile.in b/lib/3rdparty/icu4ros/icu/source/common/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/common/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/bmpset.cpp b/lib/3rdparty/icu4ros/icu/source/common/bmpset.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/bmpset.cpp rename to lib/3rdparty/icu4ros/icu/source/common/bmpset.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/bmpset.h b/lib/3rdparty/icu4ros/icu/source/common/bmpset.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/bmpset.h rename to lib/3rdparty/icu4ros/icu/source/common/bmpset.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/brkeng.cpp b/lib/3rdparty/icu4ros/icu/source/common/brkeng.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/brkeng.cpp rename to lib/3rdparty/icu4ros/icu/source/common/brkeng.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/brkeng.h b/lib/3rdparty/icu4ros/icu/source/common/brkeng.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/brkeng.h rename to lib/3rdparty/icu4ros/icu/source/common/brkeng.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/brkiter.cpp b/lib/3rdparty/icu4ros/icu/source/common/brkiter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/brkiter.cpp rename to lib/3rdparty/icu4ros/icu/source/common/brkiter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/caniter.cpp b/lib/3rdparty/icu4ros/icu/source/common/caniter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/caniter.cpp rename to lib/3rdparty/icu4ros/icu/source/common/caniter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/chariter.cpp b/lib/3rdparty/icu4ros/icu/source/common/chariter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/chariter.cpp rename to lib/3rdparty/icu4ros/icu/source/common/chariter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/charstr.h b/lib/3rdparty/icu4ros/icu/source/common/charstr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/charstr.h rename to lib/3rdparty/icu4ros/icu/source/common/charstr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/cmemory.c b/lib/3rdparty/icu4ros/icu/source/common/cmemory.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/cmemory.c rename to lib/3rdparty/icu4ros/icu/source/common/cmemory.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/cmemory.h b/lib/3rdparty/icu4ros/icu/source/common/cmemory.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/cmemory.h rename to lib/3rdparty/icu4ros/icu/source/common/cmemory.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/common.rc b/lib/3rdparty/icu4ros/icu/source/common/common.rc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/common.rc rename to lib/3rdparty/icu4ros/icu/source/common/common.rc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/common.vcproj b/lib/3rdparty/icu4ros/icu/source/common/common.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/common.vcproj rename to lib/3rdparty/icu4ros/icu/source/common/common.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/cpputils.h b/lib/3rdparty/icu4ros/icu/source/common/cpputils.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/cpputils.h rename to lib/3rdparty/icu4ros/icu/source/common/cpputils.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/cstring.c b/lib/3rdparty/icu4ros/icu/source/common/cstring.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/cstring.c rename to lib/3rdparty/icu4ros/icu/source/common/cstring.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/cstring.h b/lib/3rdparty/icu4ros/icu/source/common/cstring.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/cstring.h rename to lib/3rdparty/icu4ros/icu/source/common/cstring.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/cwchar.c b/lib/3rdparty/icu4ros/icu/source/common/cwchar.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/cwchar.c rename to lib/3rdparty/icu4ros/icu/source/common/cwchar.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/cwchar.h b/lib/3rdparty/icu4ros/icu/source/common/cwchar.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/cwchar.h rename to lib/3rdparty/icu4ros/icu/source/common/cwchar.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/dictbe.cpp b/lib/3rdparty/icu4ros/icu/source/common/dictbe.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/dictbe.cpp rename to lib/3rdparty/icu4ros/icu/source/common/dictbe.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/dictbe.h b/lib/3rdparty/icu4ros/icu/source/common/dictbe.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/dictbe.h rename to lib/3rdparty/icu4ros/icu/source/common/dictbe.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/hash.h b/lib/3rdparty/icu4ros/icu/source/common/hash.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/hash.h rename to lib/3rdparty/icu4ros/icu/source/common/hash.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/icucfg.h.in b/lib/3rdparty/icu4ros/icu/source/common/icucfg.h.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/icucfg.h.in rename to lib/3rdparty/icu4ros/icu/source/common/icucfg.h.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/localsvc.h b/lib/3rdparty/icu4ros/icu/source/common/localsvc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/localsvc.h rename to lib/3rdparty/icu4ros/icu/source/common/localsvc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/locbased.cpp b/lib/3rdparty/icu4ros/icu/source/common/locbased.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/locbased.cpp rename to lib/3rdparty/icu4ros/icu/source/common/locbased.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/locbased.h b/lib/3rdparty/icu4ros/icu/source/common/locbased.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/locbased.h rename to lib/3rdparty/icu4ros/icu/source/common/locbased.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/locid.cpp b/lib/3rdparty/icu4ros/icu/source/common/locid.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/locid.cpp rename to lib/3rdparty/icu4ros/icu/source/common/locid.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/locmap.c b/lib/3rdparty/icu4ros/icu/source/common/locmap.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/locmap.c rename to lib/3rdparty/icu4ros/icu/source/common/locmap.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/locmap.h b/lib/3rdparty/icu4ros/icu/source/common/locmap.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/locmap.h rename to lib/3rdparty/icu4ros/icu/source/common/locmap.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/locutil.cpp b/lib/3rdparty/icu4ros/icu/source/common/locutil.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/locutil.cpp rename to lib/3rdparty/icu4ros/icu/source/common/locutil.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/locutil.h b/lib/3rdparty/icu4ros/icu/source/common/locutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/locutil.h rename to lib/3rdparty/icu4ros/icu/source/common/locutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/msvcres.h b/lib/3rdparty/icu4ros/icu/source/common/msvcres.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/msvcres.h rename to lib/3rdparty/icu4ros/icu/source/common/msvcres.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/mutex.h b/lib/3rdparty/icu4ros/icu/source/common/mutex.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/mutex.h rename to lib/3rdparty/icu4ros/icu/source/common/mutex.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/normlzr.cpp b/lib/3rdparty/icu4ros/icu/source/common/normlzr.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/normlzr.cpp rename to lib/3rdparty/icu4ros/icu/source/common/normlzr.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/parsepos.cpp b/lib/3rdparty/icu4ros/icu/source/common/parsepos.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/parsepos.cpp rename to lib/3rdparty/icu4ros/icu/source/common/parsepos.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/propname.cpp b/lib/3rdparty/icu4ros/icu/source/common/propname.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/propname.cpp rename to lib/3rdparty/icu4ros/icu/source/common/propname.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/propname.h b/lib/3rdparty/icu4ros/icu/source/common/propname.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/propname.h rename to lib/3rdparty/icu4ros/icu/source/common/propname.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/punycode.c b/lib/3rdparty/icu4ros/icu/source/common/punycode.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/punycode.c rename to lib/3rdparty/icu4ros/icu/source/common/punycode.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/punycode.h b/lib/3rdparty/icu4ros/icu/source/common/punycode.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/punycode.h rename to lib/3rdparty/icu4ros/icu/source/common/punycode.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/putil.c b/lib/3rdparty/icu4ros/icu/source/common/putil.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/putil.c rename to lib/3rdparty/icu4ros/icu/source/common/putil.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/putilimp.h b/lib/3rdparty/icu4ros/icu/source/common/putilimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/putilimp.h rename to lib/3rdparty/icu4ros/icu/source/common/putilimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbi.cpp b/lib/3rdparty/icu4ros/icu/source/common/rbbi.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbi.cpp rename to lib/3rdparty/icu4ros/icu/source/common/rbbi.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbicst.pl b/lib/3rdparty/icu4ros/icu/source/common/rbbicst.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbicst.pl rename to lib/3rdparty/icu4ros/icu/source/common/rbbicst.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbidata.cpp b/lib/3rdparty/icu4ros/icu/source/common/rbbidata.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbidata.cpp rename to lib/3rdparty/icu4ros/icu/source/common/rbbidata.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbidata.h b/lib/3rdparty/icu4ros/icu/source/common/rbbidata.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbidata.h rename to lib/3rdparty/icu4ros/icu/source/common/rbbidata.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbinode.cpp b/lib/3rdparty/icu4ros/icu/source/common/rbbinode.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbinode.cpp rename to lib/3rdparty/icu4ros/icu/source/common/rbbinode.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbinode.h b/lib/3rdparty/icu4ros/icu/source/common/rbbinode.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbinode.h rename to lib/3rdparty/icu4ros/icu/source/common/rbbinode.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbirb.cpp b/lib/3rdparty/icu4ros/icu/source/common/rbbirb.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbirb.cpp rename to lib/3rdparty/icu4ros/icu/source/common/rbbirb.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbirb.h b/lib/3rdparty/icu4ros/icu/source/common/rbbirb.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbirb.h rename to lib/3rdparty/icu4ros/icu/source/common/rbbirb.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbirpt.h b/lib/3rdparty/icu4ros/icu/source/common/rbbirpt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbirpt.h rename to lib/3rdparty/icu4ros/icu/source/common/rbbirpt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbirpt.txt b/lib/3rdparty/icu4ros/icu/source/common/rbbirpt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbirpt.txt rename to lib/3rdparty/icu4ros/icu/source/common/rbbirpt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbiscan.cpp b/lib/3rdparty/icu4ros/icu/source/common/rbbiscan.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbiscan.cpp rename to lib/3rdparty/icu4ros/icu/source/common/rbbiscan.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbiscan.h b/lib/3rdparty/icu4ros/icu/source/common/rbbiscan.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbiscan.h rename to lib/3rdparty/icu4ros/icu/source/common/rbbiscan.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbisetb.cpp b/lib/3rdparty/icu4ros/icu/source/common/rbbisetb.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbisetb.cpp rename to lib/3rdparty/icu4ros/icu/source/common/rbbisetb.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbisetb.h b/lib/3rdparty/icu4ros/icu/source/common/rbbisetb.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbisetb.h rename to lib/3rdparty/icu4ros/icu/source/common/rbbisetb.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbistbl.cpp b/lib/3rdparty/icu4ros/icu/source/common/rbbistbl.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbistbl.cpp rename to lib/3rdparty/icu4ros/icu/source/common/rbbistbl.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbitblb.cpp b/lib/3rdparty/icu4ros/icu/source/common/rbbitblb.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbitblb.cpp rename to lib/3rdparty/icu4ros/icu/source/common/rbbitblb.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/rbbitblb.h b/lib/3rdparty/icu4ros/icu/source/common/rbbitblb.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/rbbitblb.h rename to lib/3rdparty/icu4ros/icu/source/common/rbbitblb.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/resbund.cpp b/lib/3rdparty/icu4ros/icu/source/common/resbund.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/resbund.cpp rename to lib/3rdparty/icu4ros/icu/source/common/resbund.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/resbund_cnv.cpp b/lib/3rdparty/icu4ros/icu/source/common/resbund_cnv.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/resbund_cnv.cpp rename to lib/3rdparty/icu4ros/icu/source/common/resbund_cnv.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ruleiter.cpp b/lib/3rdparty/icu4ros/icu/source/common/ruleiter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ruleiter.cpp rename to lib/3rdparty/icu4ros/icu/source/common/ruleiter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ruleiter.h b/lib/3rdparty/icu4ros/icu/source/common/ruleiter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ruleiter.h rename to lib/3rdparty/icu4ros/icu/source/common/ruleiter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/schriter.cpp b/lib/3rdparty/icu4ros/icu/source/common/schriter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/schriter.cpp rename to lib/3rdparty/icu4ros/icu/source/common/schriter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/serv.cpp b/lib/3rdparty/icu4ros/icu/source/common/serv.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/serv.cpp rename to lib/3rdparty/icu4ros/icu/source/common/serv.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/serv.h b/lib/3rdparty/icu4ros/icu/source/common/serv.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/serv.h rename to lib/3rdparty/icu4ros/icu/source/common/serv.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/servlk.cpp b/lib/3rdparty/icu4ros/icu/source/common/servlk.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/servlk.cpp rename to lib/3rdparty/icu4ros/icu/source/common/servlk.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/servlkf.cpp b/lib/3rdparty/icu4ros/icu/source/common/servlkf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/servlkf.cpp rename to lib/3rdparty/icu4ros/icu/source/common/servlkf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/servloc.h b/lib/3rdparty/icu4ros/icu/source/common/servloc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/servloc.h rename to lib/3rdparty/icu4ros/icu/source/common/servloc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/servls.cpp b/lib/3rdparty/icu4ros/icu/source/common/servls.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/servls.cpp rename to lib/3rdparty/icu4ros/icu/source/common/servls.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/servnotf.cpp b/lib/3rdparty/icu4ros/icu/source/common/servnotf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/servnotf.cpp rename to lib/3rdparty/icu4ros/icu/source/common/servnotf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/servnotf.h b/lib/3rdparty/icu4ros/icu/source/common/servnotf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/servnotf.h rename to lib/3rdparty/icu4ros/icu/source/common/servnotf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/servrbf.cpp b/lib/3rdparty/icu4ros/icu/source/common/servrbf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/servrbf.cpp rename to lib/3rdparty/icu4ros/icu/source/common/servrbf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/servslkf.cpp b/lib/3rdparty/icu4ros/icu/source/common/servslkf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/servslkf.cpp rename to lib/3rdparty/icu4ros/icu/source/common/servslkf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/sprpimpl.h b/lib/3rdparty/icu4ros/icu/source/common/sprpimpl.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/sprpimpl.h rename to lib/3rdparty/icu4ros/icu/source/common/sprpimpl.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/triedict.cpp b/lib/3rdparty/icu4ros/icu/source/common/triedict.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/triedict.cpp rename to lib/3rdparty/icu4ros/icu/source/common/triedict.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/triedict.h b/lib/3rdparty/icu4ros/icu/source/common/triedict.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/triedict.h rename to lib/3rdparty/icu4ros/icu/source/common/triedict.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uarrsort.c b/lib/3rdparty/icu4ros/icu/source/common/uarrsort.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uarrsort.c rename to lib/3rdparty/icu4ros/icu/source/common/uarrsort.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uarrsort.h b/lib/3rdparty/icu4ros/icu/source/common/uarrsort.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uarrsort.h rename to lib/3rdparty/icu4ros/icu/source/common/uarrsort.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uassert.h b/lib/3rdparty/icu4ros/icu/source/common/uassert.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uassert.h rename to lib/3rdparty/icu4ros/icu/source/common/uassert.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubidi.c b/lib/3rdparty/icu4ros/icu/source/common/ubidi.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubidi.c rename to lib/3rdparty/icu4ros/icu/source/common/ubidi.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubidi_props.c b/lib/3rdparty/icu4ros/icu/source/common/ubidi_props.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubidi_props.c rename to lib/3rdparty/icu4ros/icu/source/common/ubidi_props.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubidi_props.h b/lib/3rdparty/icu4ros/icu/source/common/ubidi_props.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubidi_props.h rename to lib/3rdparty/icu4ros/icu/source/common/ubidi_props.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubidi_props_data.c b/lib/3rdparty/icu4ros/icu/source/common/ubidi_props_data.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubidi_props_data.c rename to lib/3rdparty/icu4ros/icu/source/common/ubidi_props_data.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubidiimp.h b/lib/3rdparty/icu4ros/icu/source/common/ubidiimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubidiimp.h rename to lib/3rdparty/icu4ros/icu/source/common/ubidiimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubidiln.c b/lib/3rdparty/icu4ros/icu/source/common/ubidiln.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubidiln.c rename to lib/3rdparty/icu4ros/icu/source/common/ubidiln.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubidiwrt.c b/lib/3rdparty/icu4ros/icu/source/common/ubidiwrt.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubidiwrt.c rename to lib/3rdparty/icu4ros/icu/source/common/ubidiwrt.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubrk.cpp b/lib/3rdparty/icu4ros/icu/source/common/ubrk.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubrk.cpp rename to lib/3rdparty/icu4ros/icu/source/common/ubrk.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ubrkimpl.h b/lib/3rdparty/icu4ros/icu/source/common/ubrkimpl.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ubrkimpl.h rename to lib/3rdparty/icu4ros/icu/source/common/ubrkimpl.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucase.c b/lib/3rdparty/icu4ros/icu/source/common/ucase.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucase.c rename to lib/3rdparty/icu4ros/icu/source/common/ucase.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucase.h b/lib/3rdparty/icu4ros/icu/source/common/ucase.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucase.h rename to lib/3rdparty/icu4ros/icu/source/common/ucase.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucase_props_data.c b/lib/3rdparty/icu4ros/icu/source/common/ucase_props_data.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucase_props_data.c rename to lib/3rdparty/icu4ros/icu/source/common/ucase_props_data.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucasemap.c b/lib/3rdparty/icu4ros/icu/source/common/ucasemap.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucasemap.c rename to lib/3rdparty/icu4ros/icu/source/common/ucasemap.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucat.c b/lib/3rdparty/icu4ros/icu/source/common/ucat.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucat.c rename to lib/3rdparty/icu4ros/icu/source/common/ucat.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uchar.c b/lib/3rdparty/icu4ros/icu/source/common/uchar.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uchar.c rename to lib/3rdparty/icu4ros/icu/source/common/uchar.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uchar_props_data.c b/lib/3rdparty/icu4ros/icu/source/common/uchar_props_data.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uchar_props_data.c rename to lib/3rdparty/icu4ros/icu/source/common/uchar_props_data.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uchriter.cpp b/lib/3rdparty/icu4ros/icu/source/common/uchriter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uchriter.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uchriter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucln.h b/lib/3rdparty/icu4ros/icu/source/common/ucln.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucln.h rename to lib/3rdparty/icu4ros/icu/source/common/ucln.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucln_cmn.c b/lib/3rdparty/icu4ros/icu/source/common/ucln_cmn.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucln_cmn.c rename to lib/3rdparty/icu4ros/icu/source/common/ucln_cmn.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucln_cmn.h b/lib/3rdparty/icu4ros/icu/source/common/ucln_cmn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucln_cmn.h rename to lib/3rdparty/icu4ros/icu/source/common/ucln_cmn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucmndata.c b/lib/3rdparty/icu4ros/icu/source/common/ucmndata.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucmndata.c rename to lib/3rdparty/icu4ros/icu/source/common/ucmndata.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucmndata.h b/lib/3rdparty/icu4ros/icu/source/common/ucmndata.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucmndata.h rename to lib/3rdparty/icu4ros/icu/source/common/ucmndata.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv2022.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv2022.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv2022.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv2022.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_bld.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_bld.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_bld.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_bld.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_bld.h b/lib/3rdparty/icu4ros/icu/source/common/ucnv_bld.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_bld.h rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_bld.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_cb.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_cb.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_cb.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_cb.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_cnv.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_cnv.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_cnv.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_cnv.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_cnv.h b/lib/3rdparty/icu4ros/icu/source/common/ucnv_cnv.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_cnv.h rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_cnv.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_err.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_err.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_err.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_err.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_ext.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_ext.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_ext.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_ext.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_ext.h b/lib/3rdparty/icu4ros/icu/source/common/ucnv_ext.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_ext.h rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_ext.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_imp.h b/lib/3rdparty/icu4ros/icu/source/common/ucnv_imp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_imp.h rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_imp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_io.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_io.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_io.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_io.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_io.h b/lib/3rdparty/icu4ros/icu/source/common/ucnv_io.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_io.h rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_io.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_lmb.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_lmb.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_lmb.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_lmb.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_set.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_set.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_set.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_set.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_u16.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_u16.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_u16.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_u16.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_u32.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_u32.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_u32.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_u32.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_u7.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_u7.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_u7.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_u7.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_u8.c b/lib/3rdparty/icu4ros/icu/source/common/ucnv_u8.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnv_u8.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnv_u8.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvbocu.c b/lib/3rdparty/icu4ros/icu/source/common/ucnvbocu.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvbocu.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnvbocu.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvdisp.c b/lib/3rdparty/icu4ros/icu/source/common/ucnvdisp.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvdisp.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnvdisp.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvhz.c b/lib/3rdparty/icu4ros/icu/source/common/ucnvhz.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvhz.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnvhz.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvisci.c b/lib/3rdparty/icu4ros/icu/source/common/ucnvisci.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvisci.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnvisci.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvlat1.c b/lib/3rdparty/icu4ros/icu/source/common/ucnvlat1.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvlat1.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnvlat1.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvmbcs.c b/lib/3rdparty/icu4ros/icu/source/common/ucnvmbcs.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvmbcs.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnvmbcs.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvmbcs.h b/lib/3rdparty/icu4ros/icu/source/common/ucnvmbcs.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvmbcs.h rename to lib/3rdparty/icu4ros/icu/source/common/ucnvmbcs.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvscsu.c b/lib/3rdparty/icu4ros/icu/source/common/ucnvscsu.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucnvscsu.c rename to lib/3rdparty/icu4ros/icu/source/common/ucnvscsu.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucol_swp.c b/lib/3rdparty/icu4ros/icu/source/common/ucol_swp.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucol_swp.c rename to lib/3rdparty/icu4ros/icu/source/common/ucol_swp.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ucol_swp.h b/lib/3rdparty/icu4ros/icu/source/common/ucol_swp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ucol_swp.h rename to lib/3rdparty/icu4ros/icu/source/common/ucol_swp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/udata.c b/lib/3rdparty/icu4ros/icu/source/common/udata.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/udata.c rename to lib/3rdparty/icu4ros/icu/source/common/udata.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/udatamem.c b/lib/3rdparty/icu4ros/icu/source/common/udatamem.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/udatamem.c rename to lib/3rdparty/icu4ros/icu/source/common/udatamem.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/udatamem.h b/lib/3rdparty/icu4ros/icu/source/common/udatamem.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/udatamem.h rename to lib/3rdparty/icu4ros/icu/source/common/udatamem.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/udataswp.c b/lib/3rdparty/icu4ros/icu/source/common/udataswp.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/udataswp.c rename to lib/3rdparty/icu4ros/icu/source/common/udataswp.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/udataswp.h b/lib/3rdparty/icu4ros/icu/source/common/udataswp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/udataswp.h rename to lib/3rdparty/icu4ros/icu/source/common/udataswp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uenum.c b/lib/3rdparty/icu4ros/icu/source/common/uenum.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uenum.c rename to lib/3rdparty/icu4ros/icu/source/common/uenum.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uenumimp.h b/lib/3rdparty/icu4ros/icu/source/common/uenumimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uenumimp.h rename to lib/3rdparty/icu4ros/icu/source/common/uenumimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uhash.c b/lib/3rdparty/icu4ros/icu/source/common/uhash.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uhash.c rename to lib/3rdparty/icu4ros/icu/source/common/uhash.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uhash.h b/lib/3rdparty/icu4ros/icu/source/common/uhash.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uhash.h rename to lib/3rdparty/icu4ros/icu/source/common/uhash.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uhash_us.cpp b/lib/3rdparty/icu4ros/icu/source/common/uhash_us.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uhash_us.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uhash_us.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uidna.cpp b/lib/3rdparty/icu4ros/icu/source/common/uidna.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uidna.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uidna.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uinit.c b/lib/3rdparty/icu4ros/icu/source/common/uinit.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uinit.c rename to lib/3rdparty/icu4ros/icu/source/common/uinit.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uinvchar.c b/lib/3rdparty/icu4ros/icu/source/common/uinvchar.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uinvchar.c rename to lib/3rdparty/icu4ros/icu/source/common/uinvchar.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uinvchar.h b/lib/3rdparty/icu4ros/icu/source/common/uinvchar.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uinvchar.h rename to lib/3rdparty/icu4ros/icu/source/common/uinvchar.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uiter.cpp b/lib/3rdparty/icu4ros/icu/source/common/uiter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uiter.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uiter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uloc.c b/lib/3rdparty/icu4ros/icu/source/common/uloc.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uloc.c rename to lib/3rdparty/icu4ros/icu/source/common/uloc.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ulocimp.h b/lib/3rdparty/icu4ros/icu/source/common/ulocimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ulocimp.h rename to lib/3rdparty/icu4ros/icu/source/common/ulocimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/umapfile.c b/lib/3rdparty/icu4ros/icu/source/common/umapfile.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/umapfile.c rename to lib/3rdparty/icu4ros/icu/source/common/umapfile.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/umapfile.h b/lib/3rdparty/icu4ros/icu/source/common/umapfile.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/umapfile.h rename to lib/3rdparty/icu4ros/icu/source/common/umapfile.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/umath.c b/lib/3rdparty/icu4ros/icu/source/common/umath.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/umath.c rename to lib/3rdparty/icu4ros/icu/source/common/umath.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/umutex.c b/lib/3rdparty/icu4ros/icu/source/common/umutex.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/umutex.c rename to lib/3rdparty/icu4ros/icu/source/common/umutex.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/umutex.h b/lib/3rdparty/icu4ros/icu/source/common/umutex.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/umutex.h rename to lib/3rdparty/icu4ros/icu/source/common/umutex.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unames.c b/lib/3rdparty/icu4ros/icu/source/common/unames.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unames.c rename to lib/3rdparty/icu4ros/icu/source/common/unames.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/brkiter.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/brkiter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/brkiter.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/brkiter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/caniter.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/caniter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/caniter.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/caniter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/chariter.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/chariter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/chariter.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/chariter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/dbbi.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/dbbi.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/dbbi.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/dbbi.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/docmain.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/docmain.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/docmain.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/docmain.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/locid.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/locid.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/locid.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/locid.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/normlzr.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/normlzr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/normlzr.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/normlzr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/parseerr.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/parseerr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/parseerr.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/parseerr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/parsepos.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/parsepos.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/parsepos.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/parsepos.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/platform.h.in b/lib/3rdparty/icu4ros/icu/source/common/unicode/platform.h.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/platform.h.in rename to lib/3rdparty/icu4ros/icu/source/common/unicode/platform.h.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ppalmos.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ppalmos.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ppalmos.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ppalmos.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/putil.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/putil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/putil.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/putil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/pwin32.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/pwin32.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/pwin32.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/pwin32.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/rbbi.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/rbbi.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/rbbi.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/rbbi.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/rep.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/rep.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/rep.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/rep.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/resbund.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/resbund.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/resbund.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/resbund.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/schriter.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/schriter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/schriter.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/schriter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/strenum.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/strenum.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/strenum.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/strenum.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/symtable.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/symtable.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/symtable.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/symtable.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ubidi.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ubidi.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ubidi.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ubidi.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ubrk.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ubrk.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ubrk.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ubrk.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucasemap.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ucasemap.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucasemap.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ucasemap.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucat.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ucat.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucat.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ucat.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uchar.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uchar.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uchar.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uchar.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uchriter.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uchriter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uchriter.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uchriter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uclean.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uclean.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uclean.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uclean.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv_cb.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv_cb.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv_cb.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv_cb.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv_err.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv_err.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv_err.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ucnv_err.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uconfig.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uconfig.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uconfig.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uconfig.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/udata.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/udata.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/udata.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/udata.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/udeprctd.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/udeprctd.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/udeprctd.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/udeprctd.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/udraft.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/udraft.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/udraft.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/udraft.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uenum.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uenum.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uenum.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uenum.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uidna.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uidna.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uidna.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uidna.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uintrnal.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uintrnal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uintrnal.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uintrnal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uiter.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uiter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uiter.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uiter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uloc.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uloc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uloc.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uloc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/umachine.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/umachine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/umachine.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/umachine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/umisc.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/umisc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/umisc.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/umisc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unifilt.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/unifilt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unifilt.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/unifilt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unifunct.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/unifunct.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unifunct.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/unifunct.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unimatch.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/unimatch.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unimatch.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/unimatch.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uniset.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uniset.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uniset.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uniset.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unistr.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/unistr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unistr.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/unistr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unorm.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/unorm.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/unorm.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/unorm.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uobject.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uobject.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uobject.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uobject.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uobslete.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uobslete.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uobslete.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uobslete.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/urename.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/urename.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/urename.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/urename.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/urep.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/urep.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/urep.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/urep.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ures.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ures.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ures.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ures.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uscript.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uscript.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uscript.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uscript.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uset.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uset.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uset.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uset.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/usetiter.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/usetiter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/usetiter.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/usetiter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ushape.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ushape.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ushape.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ushape.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/usprep.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/usprep.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/usprep.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/usprep.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ustring.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/ustring.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/ustring.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/ustring.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/usystem.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/usystem.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/usystem.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/usystem.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utext.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/utext.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utext.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/utext.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/utf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/utf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf16.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/utf16.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf16.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/utf16.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf32.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/utf32.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf32.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/utf32.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf8.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/utf8.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf8.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/utf8.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf_old.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/utf_old.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utf_old.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/utf_old.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utrace.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/utrace.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utrace.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/utrace.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utypes.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/utypes.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/utypes.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/utypes.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uversion.h b/lib/3rdparty/icu4ros/icu/source/common/unicode/uversion.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unicode/uversion.h rename to lib/3rdparty/icu4ros/icu/source/common/unicode/uversion.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unifilt.cpp b/lib/3rdparty/icu4ros/icu/source/common/unifilt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unifilt.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unifilt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unifunct.cpp b/lib/3rdparty/icu4ros/icu/source/common/unifunct.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unifunct.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unifunct.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uniset.cpp b/lib/3rdparty/icu4ros/icu/source/common/uniset.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uniset.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uniset.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uniset_props.cpp b/lib/3rdparty/icu4ros/icu/source/common/uniset_props.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uniset_props.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uniset_props.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unisetspan.cpp b/lib/3rdparty/icu4ros/icu/source/common/unisetspan.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unisetspan.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unisetspan.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unisetspan.h b/lib/3rdparty/icu4ros/icu/source/common/unisetspan.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unisetspan.h rename to lib/3rdparty/icu4ros/icu/source/common/unisetspan.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unistr.cpp b/lib/3rdparty/icu4ros/icu/source/common/unistr.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unistr.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unistr.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unistr_case.cpp b/lib/3rdparty/icu4ros/icu/source/common/unistr_case.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unistr_case.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unistr_case.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unistr_cnv.cpp b/lib/3rdparty/icu4ros/icu/source/common/unistr_cnv.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unistr_cnv.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unistr_cnv.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unistr_props.cpp b/lib/3rdparty/icu4ros/icu/source/common/unistr_props.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unistr_props.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unistr_props.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unorm.cpp b/lib/3rdparty/icu4ros/icu/source/common/unorm.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unorm.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unorm.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unorm_it.c b/lib/3rdparty/icu4ros/icu/source/common/unorm_it.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unorm_it.c rename to lib/3rdparty/icu4ros/icu/source/common/unorm_it.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unorm_it.h b/lib/3rdparty/icu4ros/icu/source/common/unorm_it.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unorm_it.h rename to lib/3rdparty/icu4ros/icu/source/common/unorm_it.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unorm_props_data.c b/lib/3rdparty/icu4ros/icu/source/common/unorm_props_data.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unorm_props_data.c rename to lib/3rdparty/icu4ros/icu/source/common/unorm_props_data.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unormcmp.cpp b/lib/3rdparty/icu4ros/icu/source/common/unormcmp.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unormcmp.cpp rename to lib/3rdparty/icu4ros/icu/source/common/unormcmp.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/unormimp.h b/lib/3rdparty/icu4ros/icu/source/common/unormimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/unormimp.h rename to lib/3rdparty/icu4ros/icu/source/common/unormimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uobject.cpp b/lib/3rdparty/icu4ros/icu/source/common/uobject.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uobject.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uobject.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uprops.c b/lib/3rdparty/icu4ros/icu/source/common/uprops.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uprops.c rename to lib/3rdparty/icu4ros/icu/source/common/uprops.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uprops.h b/lib/3rdparty/icu4ros/icu/source/common/uprops.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uprops.h rename to lib/3rdparty/icu4ros/icu/source/common/uprops.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ures_cnv.c b/lib/3rdparty/icu4ros/icu/source/common/ures_cnv.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ures_cnv.c rename to lib/3rdparty/icu4ros/icu/source/common/ures_cnv.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uresbund.c b/lib/3rdparty/icu4ros/icu/source/common/uresbund.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uresbund.c rename to lib/3rdparty/icu4ros/icu/source/common/uresbund.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uresdata.c b/lib/3rdparty/icu4ros/icu/source/common/uresdata.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uresdata.c rename to lib/3rdparty/icu4ros/icu/source/common/uresdata.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uresdata.h b/lib/3rdparty/icu4ros/icu/source/common/uresdata.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uresdata.h rename to lib/3rdparty/icu4ros/icu/source/common/uresdata.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uresimp.h b/lib/3rdparty/icu4ros/icu/source/common/uresimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uresimp.h rename to lib/3rdparty/icu4ros/icu/source/common/uresimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/usc_impl.c b/lib/3rdparty/icu4ros/icu/source/common/usc_impl.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/usc_impl.c rename to lib/3rdparty/icu4ros/icu/source/common/usc_impl.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/usc_impl.h b/lib/3rdparty/icu4ros/icu/source/common/usc_impl.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/usc_impl.h rename to lib/3rdparty/icu4ros/icu/source/common/usc_impl.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uscript.c b/lib/3rdparty/icu4ros/icu/source/common/uscript.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uscript.c rename to lib/3rdparty/icu4ros/icu/source/common/uscript.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uset.cpp b/lib/3rdparty/icu4ros/icu/source/common/uset.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uset.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uset.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uset_imp.h b/lib/3rdparty/icu4ros/icu/source/common/uset_imp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uset_imp.h rename to lib/3rdparty/icu4ros/icu/source/common/uset_imp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uset_props.cpp b/lib/3rdparty/icu4ros/icu/source/common/uset_props.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uset_props.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uset_props.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/usetiter.cpp b/lib/3rdparty/icu4ros/icu/source/common/usetiter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/usetiter.cpp rename to lib/3rdparty/icu4ros/icu/source/common/usetiter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ushape.c b/lib/3rdparty/icu4ros/icu/source/common/ushape.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ushape.c rename to lib/3rdparty/icu4ros/icu/source/common/ushape.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/usprep.cpp b/lib/3rdparty/icu4ros/icu/source/common/usprep.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/usprep.cpp rename to lib/3rdparty/icu4ros/icu/source/common/usprep.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustack.cpp b/lib/3rdparty/icu4ros/icu/source/common/ustack.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustack.cpp rename to lib/3rdparty/icu4ros/icu/source/common/ustack.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustr_cnv.c b/lib/3rdparty/icu4ros/icu/source/common/ustr_cnv.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustr_cnv.c rename to lib/3rdparty/icu4ros/icu/source/common/ustr_cnv.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustr_cnv.h b/lib/3rdparty/icu4ros/icu/source/common/ustr_cnv.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustr_cnv.h rename to lib/3rdparty/icu4ros/icu/source/common/ustr_cnv.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustr_imp.h b/lib/3rdparty/icu4ros/icu/source/common/ustr_imp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustr_imp.h rename to lib/3rdparty/icu4ros/icu/source/common/ustr_imp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustr_wcs.c b/lib/3rdparty/icu4ros/icu/source/common/ustr_wcs.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustr_wcs.c rename to lib/3rdparty/icu4ros/icu/source/common/ustr_wcs.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustrcase.c b/lib/3rdparty/icu4ros/icu/source/common/ustrcase.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustrcase.c rename to lib/3rdparty/icu4ros/icu/source/common/ustrcase.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustrenum.cpp b/lib/3rdparty/icu4ros/icu/source/common/ustrenum.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustrenum.cpp rename to lib/3rdparty/icu4ros/icu/source/common/ustrenum.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustrenum.h b/lib/3rdparty/icu4ros/icu/source/common/ustrenum.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustrenum.h rename to lib/3rdparty/icu4ros/icu/source/common/ustrenum.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustrfmt.c b/lib/3rdparty/icu4ros/icu/source/common/ustrfmt.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustrfmt.c rename to lib/3rdparty/icu4ros/icu/source/common/ustrfmt.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustrfmt.h b/lib/3rdparty/icu4ros/icu/source/common/ustrfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustrfmt.h rename to lib/3rdparty/icu4ros/icu/source/common/ustrfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustring.c b/lib/3rdparty/icu4ros/icu/source/common/ustring.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustring.c rename to lib/3rdparty/icu4ros/icu/source/common/ustring.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/ustrtrns.c b/lib/3rdparty/icu4ros/icu/source/common/ustrtrns.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/ustrtrns.c rename to lib/3rdparty/icu4ros/icu/source/common/ustrtrns.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/utext.cpp b/lib/3rdparty/icu4ros/icu/source/common/utext.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/utext.cpp rename to lib/3rdparty/icu4ros/icu/source/common/utext.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/utf_impl.c b/lib/3rdparty/icu4ros/icu/source/common/utf_impl.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/utf_impl.c rename to lib/3rdparty/icu4ros/icu/source/common/utf_impl.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/util.cpp b/lib/3rdparty/icu4ros/icu/source/common/util.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/util.cpp rename to lib/3rdparty/icu4ros/icu/source/common/util.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/util.h b/lib/3rdparty/icu4ros/icu/source/common/util.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/util.h rename to lib/3rdparty/icu4ros/icu/source/common/util.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/util_props.cpp b/lib/3rdparty/icu4ros/icu/source/common/util_props.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/util_props.cpp rename to lib/3rdparty/icu4ros/icu/source/common/util_props.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/utrace.c b/lib/3rdparty/icu4ros/icu/source/common/utrace.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/utrace.c rename to lib/3rdparty/icu4ros/icu/source/common/utrace.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/utracimp.h b/lib/3rdparty/icu4ros/icu/source/common/utracimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/utracimp.h rename to lib/3rdparty/icu4ros/icu/source/common/utracimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/utrie.c b/lib/3rdparty/icu4ros/icu/source/common/utrie.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/utrie.c rename to lib/3rdparty/icu4ros/icu/source/common/utrie.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/utrie.h b/lib/3rdparty/icu4ros/icu/source/common/utrie.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/utrie.h rename to lib/3rdparty/icu4ros/icu/source/common/utrie.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/utypes.c b/lib/3rdparty/icu4ros/icu/source/common/utypes.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/utypes.c rename to lib/3rdparty/icu4ros/icu/source/common/utypes.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uvector.cpp b/lib/3rdparty/icu4ros/icu/source/common/uvector.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uvector.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uvector.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uvector.h b/lib/3rdparty/icu4ros/icu/source/common/uvector.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uvector.h rename to lib/3rdparty/icu4ros/icu/source/common/uvector.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uvectr32.cpp b/lib/3rdparty/icu4ros/icu/source/common/uvectr32.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uvectr32.cpp rename to lib/3rdparty/icu4ros/icu/source/common/uvectr32.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/uvectr32.h b/lib/3rdparty/icu4ros/icu/source/common/uvectr32.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/uvectr32.h rename to lib/3rdparty/icu4ros/icu/source/common/uvectr32.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/wintz.c b/lib/3rdparty/icu4ros/icu/source/common/wintz.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/wintz.c rename to lib/3rdparty/icu4ros/icu/source/common/wintz.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/common/wintz.h b/lib/3rdparty/icu4ros/icu/source/common/wintz.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/common/wintz.h rename to lib/3rdparty/icu4ros/icu/source/common/wintz.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config.guess b/lib/3rdparty/icu4ros/icu/source/config.guess similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config.guess rename to lib/3rdparty/icu4ros/icu/source/config.guess diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config.sub b/lib/3rdparty/icu4ros/icu/source/config.sub similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config.sub rename to lib/3rdparty/icu4ros/icu/source/config.sub diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/Makefile.inc.in b/lib/3rdparty/icu4ros/icu/source/config/Makefile.inc.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/Makefile.inc.in rename to lib/3rdparty/icu4ros/icu/source/config/Makefile.inc.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/icu-config-bottom b/lib/3rdparty/icu4ros/icu/source/config/icu-config-bottom similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/icu-config-bottom rename to lib/3rdparty/icu4ros/icu/source/config/icu-config-bottom diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/icu-config-top b/lib/3rdparty/icu4ros/icu/source/config/icu-config-top similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/icu-config-top rename to lib/3rdparty/icu4ros/icu/source/config/icu-config-top diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/icu-config.1.in b/lib/3rdparty/icu4ros/icu/source/config/icu-config.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/icu-config.1.in rename to lib/3rdparty/icu4ros/icu/source/config/icu-config.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/make2sh.sed b/lib/3rdparty/icu4ros/icu/source/config/make2sh.sed similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/make2sh.sed rename to lib/3rdparty/icu4ros/icu/source/config/make2sh.sed diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-aix-gcc b/lib/3rdparty/icu4ros/icu/source/config/mh-aix-gcc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-aix-gcc rename to lib/3rdparty/icu4ros/icu/source/config/mh-aix-gcc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-aix-va b/lib/3rdparty/icu4ros/icu/source/config/mh-aix-va similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-aix-va rename to lib/3rdparty/icu4ros/icu/source/config/mh-aix-va diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-cc b/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-cc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-cc rename to lib/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-cc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-gcc b/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-gcc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-gcc rename to lib/3rdparty/icu4ros/icu/source/config/mh-alpha-linux-gcc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-osf b/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-osf similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-alpha-osf rename to lib/3rdparty/icu4ros/icu/source/config/mh-alpha-osf diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-beos b/lib/3rdparty/icu4ros/icu/source/config/mh-beos similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-beos rename to lib/3rdparty/icu4ros/icu/source/config/mh-beos diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-bsd-gcc b/lib/3rdparty/icu4ros/icu/source/config/mh-bsd-gcc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-bsd-gcc rename to lib/3rdparty/icu4ros/icu/source/config/mh-bsd-gcc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-cygwin b/lib/3rdparty/icu4ros/icu/source/config/mh-cygwin similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-cygwin rename to lib/3rdparty/icu4ros/icu/source/config/mh-cygwin diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-cygwin-msvc b/lib/3rdparty/icu4ros/icu/source/config/mh-cygwin-msvc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-cygwin-msvc rename to lib/3rdparty/icu4ros/icu/source/config/mh-cygwin-msvc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-darwin b/lib/3rdparty/icu4ros/icu/source/config/mh-darwin similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-darwin rename to lib/3rdparty/icu4ros/icu/source/config/mh-darwin diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-hpux-acc b/lib/3rdparty/icu4ros/icu/source/config/mh-hpux-acc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-hpux-acc rename to lib/3rdparty/icu4ros/icu/source/config/mh-hpux-acc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-hpux-gcc b/lib/3rdparty/icu4ros/icu/source/config/mh-hpux-gcc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-hpux-gcc rename to lib/3rdparty/icu4ros/icu/source/config/mh-hpux-gcc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-irix b/lib/3rdparty/icu4ros/icu/source/config/mh-irix similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-irix rename to lib/3rdparty/icu4ros/icu/source/config/mh-irix diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-linux b/lib/3rdparty/icu4ros/icu/source/config/mh-linux similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-linux rename to lib/3rdparty/icu4ros/icu/source/config/mh-linux diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-linux-va b/lib/3rdparty/icu4ros/icu/source/config/mh-linux-va similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-linux-va rename to lib/3rdparty/icu4ros/icu/source/config/mh-linux-va diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-mingw b/lib/3rdparty/icu4ros/icu/source/config/mh-mingw similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-mingw rename to lib/3rdparty/icu4ros/icu/source/config/mh-mingw diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-mpras b/lib/3rdparty/icu4ros/icu/source/config/mh-mpras similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-mpras rename to lib/3rdparty/icu4ros/icu/source/config/mh-mpras diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-os390 b/lib/3rdparty/icu4ros/icu/source/config/mh-os390 similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-os390 rename to lib/3rdparty/icu4ros/icu/source/config/mh-os390 diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-os400 b/lib/3rdparty/icu4ros/icu/source/config/mh-os400 similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-os400 rename to lib/3rdparty/icu4ros/icu/source/config/mh-os400 diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-qnx b/lib/3rdparty/icu4ros/icu/source/config/mh-qnx similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-qnx rename to lib/3rdparty/icu4ros/icu/source/config/mh-qnx diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-solaris b/lib/3rdparty/icu4ros/icu/source/config/mh-solaris similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-solaris rename to lib/3rdparty/icu4ros/icu/source/config/mh-solaris diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-solaris-gcc b/lib/3rdparty/icu4ros/icu/source/config/mh-solaris-gcc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-solaris-gcc rename to lib/3rdparty/icu4ros/icu/source/config/mh-solaris-gcc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/mh-unknown b/lib/3rdparty/icu4ros/icu/source/config/mh-unknown similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/mh-unknown rename to lib/3rdparty/icu4ros/icu/source/config/mh-unknown diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/config/test-icu-config.sh b/lib/3rdparty/icu4ros/icu/source/config/test-icu-config.sh similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/config/test-icu-config.sh rename to lib/3rdparty/icu4ros/icu/source/config/test-icu-config.sh diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/configure b/lib/3rdparty/icu4ros/icu/source/configure similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/configure rename to lib/3rdparty/icu4ros/icu/source/configure diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/configure.in b/lib/3rdparty/icu4ros/icu/source/configure.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/configure.in rename to lib/3rdparty/icu4ros/icu/source/configure.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/Makefile.in b/lib/3rdparty/icu4ros/icu/source/data/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/data/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/brkfiles.mk b/lib/3rdparty/icu4ros/icu/source/data/brkitr/brkfiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/brkfiles.mk rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/brkfiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/char.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/char.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/char.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/char.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/en.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/en.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/en.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/en.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/en_US.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/en_US.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/en_US.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/en_US.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/en_US_POSIX.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/en_US_POSIX.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/en_US_POSIX.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/en_US_POSIX.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/ja.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/ja.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/ja.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/ja.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/line.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/line.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/line.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/line.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/root.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/root.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/sent.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/sent.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/sent.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/sent.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/thaidict.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/thaidict.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/thaidict.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/thaidict.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/title.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/title.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/title.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/title.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/word.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/word.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/word.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/word.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/word_POSIX.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/word_POSIX.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/word_POSIX.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/word_POSIX.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/word_ja.txt b/lib/3rdparty/icu4ros/icu/source/data/brkitr/word_ja.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/brkitr/word_ja.txt rename to lib/3rdparty/icu4ros/icu/source/data/brkitr/word_ja.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/build.xml b/lib/3rdparty/icu4ros/icu/source/data/build.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/build.xml rename to lib/3rdparty/icu4ros/icu/source/data/build.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/cldr-icu-readme.txt b/lib/3rdparty/icu4ros/icu/source/data/cldr-icu-readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/cldr-icu-readme.txt rename to lib/3rdparty/icu4ros/icu/source/data/cldr-icu-readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_AE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_AE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_AE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_AE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_BH.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_BH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_BH.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_BH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_DZ.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_DZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_DZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_DZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_EG.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_EG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_EG.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_EG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_IQ.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_IQ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_IQ.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_IQ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_JO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_JO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_JO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_JO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_KW.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_KW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_KW.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_KW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_LB.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_LB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_LB.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_LB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_LY.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_LY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_LY.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_LY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_MA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_MA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_MA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_MA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_OM.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_OM.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_OM.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_OM.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_QA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_QA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_QA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_QA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_SA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SD.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SD.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SD.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_SD.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SY.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_SY.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_SY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_TN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_TN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_TN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_TN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_YE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ar_YE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ar_YE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ar_YE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/as.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/as.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/as.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/as.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/as_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/as_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/as_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/as_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/be.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/be.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/be.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/be.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/be_BY.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/be_BY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/be_BY.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/be_BY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/bg.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/bg.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/bg.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/bg.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/bg_BG.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/bg_BG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/bg_BG.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/bg_BG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/bn.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/bn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/bn.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/bn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ca.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ca.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ca.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ca.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ca_ES.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ca_ES.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ca_ES.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ca_ES.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/colfiles.mk b/lib/3rdparty/icu4ros/icu/source/data/coll/colfiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/colfiles.mk rename to lib/3rdparty/icu4ros/icu/source/data/coll/colfiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/cs.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/cs.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/cs.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/cs.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/cs_CZ.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/cs_CZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/cs_CZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/cs_CZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/cy.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/cy.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/cy.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/cy.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/da.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/da.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/da.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/da.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/da_DK.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/da_DK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/da_DK.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/da_DK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/de.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/de.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/de_.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/de_.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_AT.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/de_AT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_AT.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/de_AT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/de_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/de_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_CH.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/de_CH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_CH.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/de_CH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_DE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/de_DE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_DE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/de_DE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_LU.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/de_LU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de_LU.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/de_LU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de__PHONEBOOK.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/de__PHONEBOOK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/de__PHONEBOOK.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/de__PHONEBOOK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/el.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/el.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/el.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/el.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/el_GR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/el_GR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/el_GR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/el_GR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_AU.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_AU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_AU.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_AU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_BW.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_BW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_BW.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_BW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_CA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_CA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_CA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_CA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_GB.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_GB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_GB.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_GB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_HK.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_HK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_HK.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_HK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_IE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_IE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_IE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_IE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_MT.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_MT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_MT.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_MT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_NZ.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_NZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_NZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_NZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_PH.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_PH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_PH.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_PH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_SG.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_SG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_SG.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_SG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_US.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_US.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_US.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_US.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_US_POSIX.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_US_POSIX.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_US_POSIX.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_US_POSIX.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_VI.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_VI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_VI.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_VI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_ZA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_ZA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_ZA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_ZA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_ZW.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/en_ZW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/en_ZW.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/en_ZW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/eo.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/eo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/eo.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/eo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_AR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_AR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_AR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_AR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_BO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_BO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_BO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_BO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_CL.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_CL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_CL.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_CL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_CO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_CO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_CO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_CO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_CR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_CR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_CR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_CR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_DO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_DO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_DO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_DO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_EC.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_EC.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_EC.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_EC.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_ES.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_ES.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_ES.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_ES.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_GT.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_GT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_GT.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_GT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_HN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_HN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_HN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_HN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_MX.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_MX.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_MX.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_MX.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_NI.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_NI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_NI.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_NI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_PA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_PA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_PA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_PA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_PE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_PE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_PE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_PE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_PR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_PR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_PR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_PR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_PY.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_PY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_PY.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_PY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_SV.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_SV.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_SV.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_SV.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_US.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_US.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_US.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_US.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_UY.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_UY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_UY.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_UY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_VE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es_VE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es_VE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es_VE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es__TRADITIONAL.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/es__TRADITIONAL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/es__TRADITIONAL.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/es__TRADITIONAL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/et.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/et.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/et.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/et.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/et_EE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/et_EE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/et_EE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/et_EE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fa.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fa.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fa.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fa.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fa_AF.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fa_AF.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fa_AF.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fa_AF.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fa_IR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fa_IR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fa_IR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fa_IR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fi.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fi.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fi_FI.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fi_FI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fi_FI.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fi_FI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fo.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fo.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fo_FO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fo_FO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fo_FO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fo_FO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fr_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fr_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_CA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fr_CA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_CA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fr_CA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_CH.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fr_CH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_CH.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fr_CH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_FR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fr_FR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_FR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fr_FR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_LU.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/fr_LU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/fr_LU.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/fr_LU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ga.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ga.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ga.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ga.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ga_IE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ga_IE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ga_IE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ga_IE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/gu.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/gu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/gu.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/gu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/gu_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/gu_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/gu_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/gu_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/haw.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/haw.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/haw.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/haw.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/he.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/he.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/he.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/he.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/he_IL.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/he_IL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/he_IL.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/he_IL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hi.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/hi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hi.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/hi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hi_.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/hi_.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hi_.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/hi_.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hi_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/hi_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hi_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/hi_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hi__DIRECT.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/hi__DIRECT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hi__DIRECT.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/hi__DIRECT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hr.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/hr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hr.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/hr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hr_HR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/hr_HR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hr_HR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/hr_HR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hu.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/hu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hu.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/hu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hu_HU.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/hu_HU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/hu_HU.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/hu_HU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/id.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/id.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/id.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/id.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/id_ID.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/id_ID.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/id_ID.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/id_ID.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/in.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/in.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/in.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/in.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/in_ID.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/in_ID.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/in_ID.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/in_ID.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/is.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/is.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/is.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/is.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/is_IS.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/is_IS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/is_IS.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/is_IS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/it.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/it.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/it.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/it.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/it_CH.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/it_CH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/it_CH.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/it_CH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/it_IT.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/it_IT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/it_IT.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/it_IT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/iw.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/iw.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/iw.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/iw.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/iw_IL.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/iw_IL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/iw_IL.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/iw_IL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ja.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ja.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ja.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ja.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ja_JP.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ja_JP.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ja_JP.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ja_JP.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kk.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/kk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kk.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/kk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kk_KZ.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/kk_KZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kk_KZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/kk_KZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kl.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/kl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kl.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/kl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kl_GL.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/kl_GL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kl_GL.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/kl_GL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/km.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/km.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/km.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/km.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kn.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/kn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kn.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/kn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kn_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/kn_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kn_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/kn_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ko.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ko.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ko.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ko.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ko_KR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ko_KR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ko_KR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ko_KR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kok.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/kok.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/kok.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/kok.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/lt.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/lt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/lt.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/lt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/lt_LT.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/lt_LT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/lt_LT.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/lt_LT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/lv.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/lv.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/lv.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/lv.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/lv_LV.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/lv_LV.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/lv_LV.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/lv_LV.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mk.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/mk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mk.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/mk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mk_MK.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/mk_MK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mk_MK.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/mk_MK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ml.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ml.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ml.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ml.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mr.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/mr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mr.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/mr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mr_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/mr_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mr_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/mr_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ms.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ms.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ms.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ms.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ms_BN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ms_BN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ms_BN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ms_BN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ms_MY.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ms_MY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ms_MY.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ms_MY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mt.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/mt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mt.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/mt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mt_MT.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/mt_MT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/mt_MT.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/mt_MT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nb.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/nb.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nb.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/nb.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nb_NO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/nb_NO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nb_NO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/nb_NO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nl.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/nl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nl.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/nl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nl_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/nl_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nl_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/nl_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nl_NL.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/nl_NL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nl_NL.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/nl_NL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nn.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/nn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nn.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/nn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nn_NO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/nn_NO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/nn_NO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/nn_NO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/no.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/no.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/no.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/no.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/no_NO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/no_NO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/no_NO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/no_NO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/om.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/om.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/om.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/om.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/om_ET.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/om_ET.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/om_ET.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/om_ET.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/om_KE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/om_KE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/om_KE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/om_KE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/or.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/or.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/or.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/or.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pa.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/pa.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pa.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/pa.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pa_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/pa_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pa_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/pa_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pl.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/pl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pl.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/pl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pl_PL.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/pl_PL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pl_PL.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/pl_PL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ps.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ps.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ps.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ps.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ps_AF.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ps_AF.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ps_AF.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ps_AF.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pt.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/pt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pt.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/pt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pt_BR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/pt_BR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pt_BR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/pt_BR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pt_PT.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/pt_PT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/pt_PT.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/pt_PT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ro.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ro.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ro.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ro.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ro_RO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ro_RO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ro_RO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ro_RO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/root.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/root.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ru.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ru.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ru.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ru.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ru_RU.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ru_RU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ru_RU.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ru_RU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ru_UA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ru_UA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ru_UA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ru_UA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sh.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sh.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sh.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sh.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sh_BA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sh_BA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sh_BA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sh_BA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sh_YU.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sh_YU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sh_YU.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sh_YU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sk.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sk.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sk_SK.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sk_SK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sk_SK.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sk_SK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sl.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sl.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sl_SI.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sl_SI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sl_SI.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sl_SI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sq.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sq.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sq.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sq.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sq_AL.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sq_AL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sq_AL.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sq_AL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_BA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_BA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_BA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_BA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_BA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_BA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_BA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_BA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_ME.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_ME.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_ME.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_ME.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_RS.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_RS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_RS.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_Cyrl_RS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_BA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_BA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_BA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_BA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_ME.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_ME.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_ME.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_ME.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_RS.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_RS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_RS.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_Latn_RS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_ME.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_ME.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_ME.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_ME.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_RS.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sr_RS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sr_RS.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sr_RS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sv.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sv.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sv.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sv.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sv_FI.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sv_FI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sv_FI.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sv_FI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sv_SE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/sv_SE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/sv_SE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/sv_SE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ta.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ta.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ta.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ta.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ta_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/ta_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/ta_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/ta_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/te.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/te.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/te.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/te.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/te_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/te_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/te_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/te_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/th.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/th.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/th.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/th.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/th_TH.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/th_TH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/th_TH.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/th_TH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/tr.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/tr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/tr.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/tr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/tr_TR.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/tr_TR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/tr_TR.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/tr_TR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/uk.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/uk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/uk.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/uk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/uk_UA.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/uk_UA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/uk_UA.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/uk_UA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/vi.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/vi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/vi.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/vi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/vi_VN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/vi_VN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/vi_VN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/vi_VN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_CN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_CN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_CN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_CN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_HK.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_HK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_HK.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_HK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_CN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_CN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_CN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_CN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_SG.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_SG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_SG.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hans_SG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_HK.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_HK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_HK.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_HK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_MO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_MO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_MO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_MO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_TW.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_TW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_TW.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_Hant_TW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_MO.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_MO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_MO.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_MO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_SG.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_SG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_SG.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_SG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_TW.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_TW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_TW.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_TW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_TW_STROKE.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh_TW_STROKE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh_TW_STROKE.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh_TW_STROKE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh__PINYIN.txt b/lib/3rdparty/icu4ros/icu/source/data/coll/zh__PINYIN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/coll/zh__PINYIN.txt rename to lib/3rdparty/icu4ros/icu/source/data/coll/zh__PINYIN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/icu-config.xml b/lib/3rdparty/icu4ros/icu/source/data/icu-config.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/icu-config.xml rename to lib/3rdparty/icu4ros/icu/source/data/icu-config.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/icupkg.inc.in b/lib/3rdparty/icu4ros/icu/source/data/icupkg.inc.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/icupkg.inc.in rename to lib/3rdparty/icu4ros/icu/source/data/icupkg.inc.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/af.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/af.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/af.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/af.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/af_NA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/af_NA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/af_NA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/af_NA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/af_ZA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/af_ZA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/af_ZA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/af_ZA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/am.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/am.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/am.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/am.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/am_ET.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/am_ET.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/am_ET.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/am_ET.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_AE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_AE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_AE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_AE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_BH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_BH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_BH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_BH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_DZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_DZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_DZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_DZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_EG.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_EG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_EG.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_EG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_IQ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_IQ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_IQ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_IQ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_JO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_JO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_JO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_JO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_KW.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_KW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_KW.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_KW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_LB.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_LB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_LB.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_LB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_LY.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_LY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_LY.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_LY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_MA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_MA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_MA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_MA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_OM.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_OM.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_OM.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_OM.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_QA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_QA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_QA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_QA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_SA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SD.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SD.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SD.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_SD.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SY.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_SY.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_SY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_TN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_TN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_TN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_TN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_YE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ar_YE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ar_YE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ar_YE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/as.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/as.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/as.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/as.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/as_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/as_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/as_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/as_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/az.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/az.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_AZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/az_AZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_AZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/az_AZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl_AZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl_AZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl_AZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/az_Cyrl_AZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_Latn.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/az_Latn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_Latn.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/az_Latn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_Latn_AZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/az_Latn_AZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/az_Latn_AZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/az_Latn_AZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/be.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/be.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/be.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/be.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/be_BY.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/be_BY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/be_BY.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/be_BY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bg.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/bg.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bg.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/bg.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bg_BG.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/bg_BG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bg_BG.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/bg_BG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bn.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/bn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bn.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/bn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bn_BD.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/bn_BD.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bn_BD.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/bn_BD.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bn_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/bn_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/bn_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/bn_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ca.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ca.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ca.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ca.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ca_ES.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ca_ES.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ca_ES.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ca_ES.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/cs.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/cs.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/cs.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/cs.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/cs_CZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/cs_CZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/cs_CZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/cs_CZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/cy.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/cy.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/cy.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/cy.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/cy_GB.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/cy_GB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/cy_GB.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/cy_GB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/da.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/da.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/da.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/da.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/da_DK.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/da_DK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/da_DK.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/da_DK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/de.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/de.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_AT.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/de_AT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_AT.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/de_AT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/de_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/de_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_CH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/de_CH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_CH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/de_CH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_DE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/de_DE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_DE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/de_DE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_LI.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/de_LI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_LI.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/de_LI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_LU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/de_LU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/de_LU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/de_LU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/el.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/el.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/el.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/el.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/el_CY.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/el_CY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/el_CY.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/el_CY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/el_GR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/el_GR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/el_GR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/el_GR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_AU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_AU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_AU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_AU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_BW.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_BW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_BW.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_BW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_BZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_BZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_BZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_BZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_CA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_CA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_CA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_CA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_GB.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_GB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_GB.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_GB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_HK.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_HK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_HK.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_HK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_IE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_IE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_IE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_IE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_JM.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_JM.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_JM.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_JM.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_MH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_MH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_MH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_MH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_MT.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_MT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_MT.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_MT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_NA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_NA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_NA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_NA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_NZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_NZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_NZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_NZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_PH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_PH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_PH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_PH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_PK.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_PK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_PK.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_PK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_RH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_RH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_RH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_RH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_SG.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_SG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_SG.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_SG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_TT.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_TT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_TT.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_TT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_US.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_US.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_US.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_US.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_US_POSIX.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_US_POSIX.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_US_POSIX.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_US_POSIX.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_VI.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_VI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_VI.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_VI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_ZA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_ZA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_ZA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_ZA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_ZW.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/en_ZW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/en_ZW.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/en_ZW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/eo.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/eo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/eo.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/eo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_AR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_AR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_AR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_AR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_BO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_BO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_BO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_BO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_CL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_CL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_CL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_CL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_CO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_CO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_CO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_CO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_CR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_CR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_CR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_CR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_DO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_DO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_DO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_DO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_EC.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_EC.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_EC.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_EC.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_ES.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_ES.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_ES.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_ES.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_GT.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_GT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_GT.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_GT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_HN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_HN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_HN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_HN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_MX.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_MX.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_MX.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_MX.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_NI.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_NI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_NI.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_NI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_PA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_PA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_PA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_PA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_PE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_PE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_PE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_PE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_PR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_PR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_PR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_PR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_PY.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_PY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_PY.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_PY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_SV.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_SV.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_SV.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_SV.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_US.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_US.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_US.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_US.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_UY.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_UY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_UY.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_UY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_VE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/es_VE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/es_VE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/es_VE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/et.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/et.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/et.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/et.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/et_EE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/et_EE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/et_EE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/et_EE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/eu.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/eu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/eu.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/eu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/eu_ES.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/eu_ES.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/eu_ES.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/eu_ES.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fa.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fa.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fa.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fa.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fa_AF.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fa_AF.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fa_AF.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fa_AF.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fa_IR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fa_IR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fa_IR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fa_IR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fi.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fi.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fi_FI.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fi_FI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fi_FI.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fi_FI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fo.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fo.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fo_FO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fo_FO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fo_FO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fo_FO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fr_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fr_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_CA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fr_CA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_CA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fr_CA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_CH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fr_CH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_CH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fr_CH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_FR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fr_FR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_FR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fr_FR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_LU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fr_LU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_LU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fr_LU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_MC.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/fr_MC.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/fr_MC.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/fr_MC.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ga.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ga.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ga.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ga.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ga_IE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ga_IE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ga_IE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ga_IE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gl.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/gl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gl.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/gl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gl_ES.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/gl_ES.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gl_ES.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/gl_ES.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gu.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/gu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gu.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/gu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gu_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/gu_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gu_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/gu_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gv.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/gv.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gv.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/gv.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gv_GB.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/gv_GB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/gv_GB.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/gv_GB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/haw.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/haw.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/haw.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/haw.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/haw_US.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/haw_US.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/haw_US.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/haw_US.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/he.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/he.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/he.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/he.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/he_IL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/he_IL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/he_IL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/he_IL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hi.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hi.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hi_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hi_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hi_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hi_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hr.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hr.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hr_HR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hr_HR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hr_HR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hr_HR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hu.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hu.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hu_HU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hu_HU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hu_HU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hu_HU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hy.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hy.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hy.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hy.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hy_AM.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hy_AM.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hy_AM.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hy_AM.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hy_AM_REVISED.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/hy_AM_REVISED.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/hy_AM_REVISED.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/hy_AM_REVISED.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/id.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/id.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/id.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/id.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/id_ID.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/id_ID.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/id_ID.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/id_ID.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/in.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/in.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/in.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/in.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/in_ID.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/in_ID.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/in_ID.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/in_ID.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/is.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/is.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/is.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/is.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/is_IS.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/is_IS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/is_IS.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/is_IS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/it.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/it.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/it.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/it.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/it_CH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/it_CH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/it_CH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/it_CH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/it_IT.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/it_IT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/it_IT.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/it_IT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/iw.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/iw.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/iw.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/iw.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/iw_IL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/iw_IL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/iw_IL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/iw_IL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ja.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ja.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ja.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ja.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ja_JP.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ja_JP.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ja_JP.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ja_JP.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ja_JP_TRADITIONAL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ja_JP_TRADITIONAL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ja_JP_TRADITIONAL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ja_JP_TRADITIONAL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ka.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ka.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ka.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ka.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ka_GE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ka_GE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ka_GE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ka_GE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kk.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kk.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kk_KZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kk_KZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kk_KZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kk_KZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kl.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kl.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kl_GL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kl_GL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kl_GL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kl_GL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/km.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/km.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/km.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/km.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/km_KH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/km_KH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/km_KH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/km_KH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kn.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kn.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kn_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kn_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kn_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kn_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ko.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ko.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ko.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ko.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ko_KR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ko_KR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ko_KR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ko_KR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kok.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kok.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kok.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kok.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kok_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kok_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kok_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kok_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kw.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kw.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kw.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kw.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kw_GB.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/kw_GB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/kw_GB.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/kw_GB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/lt.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/lt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/lt.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/lt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/lt_LT.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/lt_LT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/lt_LT.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/lt_LT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/lv.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/lv.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/lv.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/lv.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/lv_LV.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/lv_LV.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/lv_LV.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/lv_LV.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mk.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/mk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mk.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/mk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mk_MK.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/mk_MK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mk_MK.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/mk_MK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ml.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ml.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ml.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ml.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ml_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ml_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ml_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ml_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mr.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/mr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mr.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/mr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mr_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/mr_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mr_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/mr_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ms.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ms.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ms.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ms.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ms_BN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ms_BN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ms_BN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ms_BN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ms_MY.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ms_MY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ms_MY.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ms_MY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mt.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/mt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mt.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/mt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mt_MT.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/mt_MT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/mt_MT.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/mt_MT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nb.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/nb.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nb.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/nb.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nb_NO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/nb_NO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nb_NO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/nb_NO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nl.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/nl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nl.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/nl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nl_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/nl_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nl_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/nl_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nl_NL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/nl_NL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nl_NL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/nl_NL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nn.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/nn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nn.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/nn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nn_NO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/nn_NO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/nn_NO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/nn_NO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/no.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/no.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/no.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/no.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/no_NO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/no_NO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/no_NO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/no_NO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/no_NO_NY.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/no_NO_NY.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/no_NO_NY.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/no_NO_NY.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/om.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/om.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/om.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/om.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/om_ET.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/om_ET.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/om_ET.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/om_ET.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/om_KE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/om_KE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/om_KE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/om_KE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/or.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/or.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/or.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/or.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/or_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/or_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/or_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/or_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pa.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pa.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pa.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pa.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pa_Guru.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pa_Guru.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pa_Guru.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pa_Guru.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pa_Guru_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pa_Guru_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pa_Guru_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pa_Guru_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pa_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pa_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pa_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pa_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pl.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pl.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pl_PL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pl_PL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pl_PL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pl_PL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ps.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ps.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ps.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ps.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ps_AF.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ps_AF.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ps_AF.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ps_AF.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pt.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pt.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pt_BR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pt_BR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pt_BR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pt_BR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pt_PT.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/pt_PT.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/pt_PT.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/pt_PT.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/resfiles.mk b/lib/3rdparty/icu4ros/icu/source/data/locales/resfiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/resfiles.mk rename to lib/3rdparty/icu4ros/icu/source/data/locales/resfiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ro.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ro.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ro.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ro.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ro_RO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ro_RO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ro_RO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ro_RO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/root.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/root.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ru.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ru.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ru.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ru.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ru_RU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ru_RU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ru_RU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ru_RU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ru_UA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ru_UA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ru_UA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ru_UA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sh.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sh.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sh.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sh.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sh_BA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sh_BA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sh_BA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sh_BA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sh_CS.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sh_CS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sh_CS.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sh_CS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sh_YU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sh_YU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sh_YU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sh_YU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sk.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sk.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sk_SK.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sk_SK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sk_SK.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sk_SK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sl.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sl.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sl_SI.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sl_SI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sl_SI.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sl_SI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/so.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/so.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so_DJ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/so_DJ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so_DJ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/so_DJ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so_ET.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/so_ET.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so_ET.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/so_ET.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so_KE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/so_KE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so_KE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/so_KE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so_SO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/so_SO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/so_SO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/so_SO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sq.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sq.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sq.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sq.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sq_AL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sq_AL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sq_AL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sq_AL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_BA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_BA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_BA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_BA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_CS.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_CS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_CS.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_CS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_BA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_BA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_BA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_BA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_CS.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_CS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_CS.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_CS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_ME.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_ME.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_ME.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_ME.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_RS.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_RS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_RS.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_RS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_YU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_YU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_YU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Cyrl_YU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_BA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_BA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_BA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_BA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_CS.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_CS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_CS.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_CS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_ME.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_ME.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_ME.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_ME.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_RS.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_RS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_RS.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_RS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_YU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_YU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_YU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_Latn_YU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_ME.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_ME.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_ME.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_ME.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_RS.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_RS.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_RS.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_RS.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_YU.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sr_YU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sr_YU.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sr_YU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sv.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sv.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sv.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sv.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sv_FI.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sv_FI.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sv_FI.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sv_FI.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sv_SE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sv_SE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sv_SE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sv_SE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sw.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sw.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sw.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sw.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sw_KE.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sw_KE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sw_KE.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sw_KE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sw_TZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/sw_TZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/sw_TZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/sw_TZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ta.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ta.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ta.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ta.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ta_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ta_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ta_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ta_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/te.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/te.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/te.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/te.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/te_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/te_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/te_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/te_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/th.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/th.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/th.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/th.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/th_TH.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/th_TH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/th_TH.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/th_TH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/th_TH_TRADITIONAL.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/th_TH_TRADITIONAL.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/th_TH_TRADITIONAL.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/th_TH_TRADITIONAL.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ti.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ti.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ti.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ti.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ti_ER.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ti_ER.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ti_ER.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ti_ER.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ti_ET.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ti_ET.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ti_ET.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ti_ET.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/tr.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/tr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/tr.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/tr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/tr_TR.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/tr_TR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/tr_TR.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/tr_TR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uk.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uk.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uk_UA.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uk_UA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uk_UA.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uk_UA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ur.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ur.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ur.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ur.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ur_IN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ur_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ur_IN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ur_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ur_PK.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/ur_PK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/ur_PK.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/ur_PK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_AF.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz_AF.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_AF.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz_AF.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Arab.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Arab.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Arab.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz_Arab.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Arab_AF.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Arab_AF.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Arab_AF.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz_Arab_AF.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl_UZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl_UZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl_UZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz_Cyrl_UZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Latn.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Latn.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Latn.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz_Latn.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Latn_UZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Latn_UZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_Latn_UZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz_Latn_UZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_UZ.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/uz_UZ.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/uz_UZ.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/uz_UZ.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/vi.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/vi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/vi.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/vi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/vi_VN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/vi_VN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/vi_VN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/vi_VN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_CN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_CN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_CN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_CN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_HK.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_HK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_HK.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_HK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_CN.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_CN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_CN.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_CN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_SG.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_SG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_SG.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hans_SG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_HK.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_HK.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_HK.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_HK.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_MO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_MO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_MO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_MO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_TW.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_TW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_TW.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_Hant_TW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_MO.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_MO.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_MO.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_MO.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_SG.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_SG.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_SG.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_SG.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_TW.txt b/lib/3rdparty/icu4ros/icu/source/data/locales/zh_TW.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/locales/zh_TW.txt rename to lib/3rdparty/icu4ros/icu/source/data/locales/zh_TW.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/makedata.mak b/lib/3rdparty/icu4ros/icu/source/data/makedata.mak similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/makedata.mak rename to lib/3rdparty/icu4ros/icu/source/data/makedata.mak diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/makedata.vcproj b/lib/3rdparty/icu4ros/icu/source/data/makedata.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/makedata.vcproj rename to lib/3rdparty/icu4ros/icu/source/data/makedata.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/cns-11643-1992.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/cns-11643-1992.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/cns-11643-1992.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/cns-11643-1992.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/convrtrs.txt b/lib/3rdparty/icu4ros/icu/source/data/mappings/convrtrs.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/convrtrs.txt rename to lib/3rdparty/icu4ros/icu/source/data/mappings/convrtrs.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ebcdic-xml-us.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ebcdic-xml-us.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ebcdic-xml-us.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ebcdic-xml-us.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/gb18030.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/gb18030.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/gb18030.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/gb18030.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1006_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1006_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1006_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1006_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1025_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1025_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1025_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1025_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1026_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1026_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1026_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1026_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1047_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1047_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1047_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1047_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1051_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1051_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1051_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1051_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1089_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1089_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1089_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1089_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1097_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1097_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1097_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1097_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1098_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1098_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1098_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1098_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1112_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1112_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1112_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1112_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1122_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1122_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1122_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1122_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1123_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1123_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1123_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1123_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1124_P100-1996.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1124_P100-1996.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1124_P100-1996.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1124_P100-1996.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1125_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1125_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1125_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1125_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1129_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1129_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1129_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1129_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1130_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1130_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1130_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1130_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1131_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1131_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1131_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1131_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1132_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1132_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1132_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1132_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1133_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1133_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1133_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1133_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1137_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1137_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1137_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1137_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1140_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1140_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1140_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1140_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1141_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1141_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1141_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1141_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1142_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1142_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1142_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1142_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1143_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1143_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1143_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1143_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1144_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1144_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1144_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1144_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1145_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1145_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1145_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1145_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1146_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1146_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1146_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1146_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1147_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1147_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1147_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1147_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1148_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1148_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1148_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1148_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1149_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1149_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1149_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1149_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1153_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1153_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1153_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1153_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1154_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1154_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1154_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1154_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1155_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1155_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1155_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1155_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1156_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1156_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1156_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1156_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1157_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1157_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1157_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1157_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1158_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1158_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1158_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1158_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1160_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1160_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1160_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1160_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1162_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1162_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1162_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1162_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1164_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1164_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1164_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1164_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1168_P100-2002.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1168_P100-2002.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1168_P100-2002.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1168_P100-2002.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1250_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1250_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1250_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1250_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1251_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1251_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1251_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1251_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1252_P100-2000.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1252_P100-2000.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1252_P100-2000.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1252_P100-2000.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1253_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1253_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1253_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1253_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1254_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1254_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1254_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1254_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1255_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1255_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1255_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1255_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1256_P110-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1256_P110-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1256_P110-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1256_P110-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1257_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1257_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1257_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1257_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1258_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1258_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1258_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1258_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-12712_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-12712_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-12712_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-12712_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1276_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1276_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1276_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1276_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P110-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P110-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P110-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P110-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P11B-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P11B-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P11B-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1363_P11B-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1364_P110-2007.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1364_P110-2007.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1364_P110-2007.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1364_P110-2007.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1371_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1371_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1371_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1371_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1373_P100-2002.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1373_P100-2002.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1373_P100-2002.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1373_P100-2002.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1375_P100-2007.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1375_P100-2007.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1375_P100-2007.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1375_P100-2007.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1383_P110-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1383_P110-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1383_P110-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1383_P110-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1386_P100-2001.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1386_P100-2001.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1386_P100-2001.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1386_P100-2001.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1388_P103-2001.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1388_P103-2001.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1388_P103-2001.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1388_P103-2001.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1390_P110-2003.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1390_P110-2003.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1390_P110-2003.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1390_P110-2003.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1399_P110-2003.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1399_P110-2003.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1399_P110-2003.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-1399_P110-2003.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-16684_P110-2003.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-16684_P110-2003.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-16684_P110-2003.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-16684_P110-2003.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-16804_X110-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-16804_X110-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-16804_X110-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-16804_X110-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-273_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-273_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-273_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-273_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-277_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-277_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-277_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-277_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-278_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-278_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-278_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-278_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-280_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-280_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-280_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-280_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-284_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-284_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-284_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-284_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-285_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-285_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-285_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-285_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-290_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-290_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-290_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-290_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-297_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-297_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-297_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-297_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P120-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P120-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P120-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P120-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P12A_P12A-2004_U2.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P12A_P12A-2004_U2.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P12A_P12A-2004_U2.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-33722_P12A_P12A-2004_U2.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-37_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-37_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-37_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-37_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-420_X120-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-420_X120-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-420_X120-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-420_X120-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-424_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-424_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-424_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-424_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-437_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-437_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-437_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-437_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4517_P100-2005.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4517_P100-2005.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4517_P100-2005.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4517_P100-2005.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4899_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4899_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4899_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4899_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4909_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4909_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4909_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4909_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4971_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4971_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4971_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-4971_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-500_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-500_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-500_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-500_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5012_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5012_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5012_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5012_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5123_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5123_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5123_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5123_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5346_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5346_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5346_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5346_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5347_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5347_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5347_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5347_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5348_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5348_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5348_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5348_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5349_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5349_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5349_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5349_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5350_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5350_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5350_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5350_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5351_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5351_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5351_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5351_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5352_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5352_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5352_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5352_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5353_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5353_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5353_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5353_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5354_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5354_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5354_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5354_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5471_P100-2006.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5471_P100-2006.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5471_P100-2006.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5471_P100-2006.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5478_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5478_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5478_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-5478_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-720_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-720_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-720_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-720_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-737_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-737_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-737_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-737_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-775_P100-1996.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-775_P100-1996.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-775_P100-1996.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-775_P100-1996.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-803_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-803_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-803_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-803_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-813_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-813_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-813_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-813_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-838_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-838_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-838_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-838_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-8482_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-8482_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-8482_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-8482_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-850_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-850_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-850_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-850_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-851_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-851_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-851_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-851_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-852_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-852_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-852_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-852_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-855_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-855_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-855_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-855_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-856_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-856_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-856_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-856_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-857_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-857_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-857_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-857_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-858_P100-1997.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-858_P100-1997.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-858_P100-1997.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-858_P100-1997.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-860_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-860_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-860_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-860_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-861_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-861_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-861_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-861_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-862_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-862_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-862_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-862_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-863_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-863_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-863_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-863_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-864_X110-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-864_X110-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-864_X110-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-864_X110-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-865_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-865_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-865_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-865_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-866_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-866_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-866_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-866_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-867_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-867_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-867_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-867_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-868_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-868_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-868_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-868_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-869_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-869_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-869_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-869_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-870_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-870_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-870_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-870_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-871_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-871_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-871_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-871_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-874_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-874_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-874_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-874_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-875_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-875_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-875_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-875_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-878_P100-1996.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-878_P100-1996.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-878_P100-1996.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-878_P100-1996.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-897_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-897_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-897_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-897_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9005_X110-2007.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9005_X110-2007.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9005_X110-2007.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9005_X110-2007.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-901_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-901_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-901_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-901_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-902_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-902_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-902_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-902_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9067_X100-2005.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9067_X100-2005.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9067_X100-2005.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9067_X100-2005.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-912_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-912_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-912_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-912_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-913_P100-2000.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-913_P100-2000.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-913_P100-2000.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-913_P100-2000.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-914_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-914_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-914_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-914_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-915_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-915_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-915_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-915_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-916_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-916_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-916_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-916_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-918_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-918_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-918_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-918_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-920_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-920_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-920_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-920_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-921_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-921_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-921_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-921_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-922_P100-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-922_P100-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-922_P100-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-922_P100-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-923_P100-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-923_P100-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-923_P100-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-923_P100-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-930_P120-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-930_P120-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-930_P120-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-930_P120-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-933_P110-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-933_P110-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-933_P110-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-933_P110-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-935_P110-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-935_P110-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-935_P110-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-935_P110-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-937_P110-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-937_P110-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-937_P110-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-937_P110-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-939_P120-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-939_P120-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-939_P120-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-939_P120-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-942_P12A-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-942_P12A-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-942_P12A-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-942_P12A-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P130-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P130-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P130-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P130-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P15A-2003.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P15A-2003.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P15A-2003.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-943_P15A-2003.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9447_P100-2002.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9447_P100-2002.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9447_P100-2002.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9447_P100-2002.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9448_X100-2005.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9448_X100-2005.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9448_X100-2005.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9448_X100-2005.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9449_P100-2002.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9449_P100-2002.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9449_P100-2002.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-9449_P100-2002.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P110-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P110-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P110-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P110-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P11A-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P11A-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P11A-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-949_P11A-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-950_P110-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-950_P110-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-950_P110-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-950_P110-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-954_P101-2007.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-954_P101-2007.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-954_P101-2007.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-954_P101-2007.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-964_P110-1999.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-964_P110-1999.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-964_P110-1999.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-964_P110-1999.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-970_P110_P110-2006_U2.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-970_P110_P110-2006_U2.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-970_P110_P110-2006_U2.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-970_P110_P110-2006_U2.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-971_P100-1995.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-971_P100-1995.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-971_P100-1995.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ibm-971_P100-1995.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/icu-internal-25546.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/icu-internal-25546.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/icu-internal-25546.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/icu-internal-25546.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_10-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_10-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_10-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_10-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_11-2001.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_11-2001.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_11-2001.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_11-2001.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_14-1998.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_14-1998.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_14-1998.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/iso-8859_14-1998.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-ir-165.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-ir-165.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/iso-ir-165.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/iso-ir-165.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/jisx-208.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/jisx-208.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/jisx-208.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/jisx-208.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/jisx-212.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/jisx-212.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/jisx-212.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/jisx-212.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/lmb-excp.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/lmb-excp.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/lmb-excp.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/lmb-excp.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-0_2-10.2.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-0_2-10.2.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-0_2-10.2.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/macos-0_2-10.2.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-29-10.2.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-29-10.2.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-29-10.2.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/macos-29-10.2.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-35-10.2.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-35-10.2.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-35-10.2.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/macos-35-10.2.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-6_2-10.4.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-6_2-10.4.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-6_2-10.4.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/macos-6_2-10.4.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-7_3-10.2.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-7_3-10.2.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/macos-7_3-10.2.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/macos-7_3-10.2.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmcore.mk b/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmcore.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmcore.mk rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ucmcore.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmebcdic.mk b/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmebcdic.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmebcdic.mk rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ucmebcdic.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmfiles.mk b/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmfiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/ucmfiles.mk rename to lib/3rdparty/icu4ros/icu/source/data/mappings/ucmfiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-874-2000.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-874-2000.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-874-2000.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/windows-874-2000.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-936-2000.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-936-2000.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-936-2000.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/windows-936-2000.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-949-2000.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-949-2000.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-949-2000.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/windows-949-2000.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-950-2000.ucm b/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-950-2000.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/mappings/windows-950-2000.ucm rename to lib/3rdparty/icu4ros/icu/source/data/mappings/windows-950-2000.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/misc/NamePrepProfile.txt b/lib/3rdparty/icu4ros/icu/source/data/misc/NamePrepProfile.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/misc/NamePrepProfile.txt rename to lib/3rdparty/icu4ros/icu/source/data/misc/NamePrepProfile.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/misc/icudata.rc b/lib/3rdparty/icu4ros/icu/source/data/misc/icudata.rc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/misc/icudata.rc rename to lib/3rdparty/icu4ros/icu/source/data/misc/icudata.rc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/misc/metazoneInfo.txt b/lib/3rdparty/icu4ros/icu/source/data/misc/metazoneInfo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/misc/metazoneInfo.txt rename to lib/3rdparty/icu4ros/icu/source/data/misc/metazoneInfo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/misc/miscfiles.mk b/lib/3rdparty/icu4ros/icu/source/data/misc/miscfiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/misc/miscfiles.mk rename to lib/3rdparty/icu4ros/icu/source/data/misc/miscfiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/misc/supplementalData.txt b/lib/3rdparty/icu4ros/icu/source/data/misc/supplementalData.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/misc/supplementalData.txt rename to lib/3rdparty/icu4ros/icu/source/data/misc/supplementalData.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/misc/zoneinfo.txt b/lib/3rdparty/icu4ros/icu/source/data/misc/zoneinfo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/misc/zoneinfo.txt rename to lib/3rdparty/icu4ros/icu/source/data/misc/zoneinfo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/da.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/da.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/da.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/da.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/de.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/de.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/de.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/de.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/el.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/el.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/el.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/el.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/en.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/en.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/en.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/en.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/en_GB.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/en_GB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/en_GB.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/en_GB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/eo.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/eo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/eo.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/eo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/es.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/es.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/es.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/es.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fa.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/fa.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fa.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/fa.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fa_AF.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/fa_AF.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fa_AF.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/fa_AF.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/fr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr_BE.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr_BE.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr_BE.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/fr_BE.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr_CH.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr_CH.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/fr_CH.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/fr_CH.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/ga.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/ga.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/ga.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/ga.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/he.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/he.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/he.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/he.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/it.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/it.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/it.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/it.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/ja.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/ja.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/ja.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/ja.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/mt.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/mt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/mt.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/mt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/nl.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/nl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/nl.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/nl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/pl.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/pl.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/pl.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/pl.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/pt.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/pt.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/pt.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/pt.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/rbnffiles.mk b/lib/3rdparty/icu4ros/icu/source/data/rbnf/rbnffiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/rbnffiles.mk rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/rbnffiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/root.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/root.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/ru.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/ru.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/ru.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/ru.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/sv.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/sv.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/sv.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/sv.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/th.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/th.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/th.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/th.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/uk.txt b/lib/3rdparty/icu4ros/icu/source/data/rbnf/uk.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/rbnf/uk.txt rename to lib/3rdparty/icu4ros/icu/source/data/rbnf/uk.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Any_Accents.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Any_Accents.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Any_Accents.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Any_Accents.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Any_Publishing.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Any_Publishing.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Any_Publishing.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Any_Publishing.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Arabic_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Arabic_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Arabic_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Arabic_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Bengali_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Cyrillic_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Cyrillic_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Cyrillic_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Cyrillic_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Devanagari_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Fullwidth_Halfwidth.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Fullwidth_Halfwidth.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Fullwidth_Halfwidth.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Fullwidth_Halfwidth.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Georgian_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Georgian_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Georgian_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Georgian_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin_UNGEGN.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin_UNGEGN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin_UNGEGN.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Greek_Latin_UNGEGN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gujarati_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Gurmukhi_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Han_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Han_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Han_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Han_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Han_Spacedhan.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Han_Spacedhan.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Han_Spacedhan.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Han_Spacedhan.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Hangul_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Hangul_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Hangul_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Hangul_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Hebrew_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Hebrew_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Hebrew_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Hebrew_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Katakana.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Katakana.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Katakana.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Katakana.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Hiragana_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/InterIndic_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Jamo_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Jamo_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Jamo_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Jamo_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Kannada_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Armenian.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Armenian.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Armenian.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Armenian.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_ConjoiningJamo.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_ConjoiningJamo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_ConjoiningJamo.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_ConjoiningJamo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Hangul.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Hangul.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Hangul.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Hangul.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Jamo.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Jamo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Jamo.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Jamo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Katakana.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Katakana.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Katakana.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Katakana.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_NumericPinyin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_NumericPinyin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_NumericPinyin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_NumericPinyin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Thai.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Thai.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Thai.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Latin_Thai.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Malayalam_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Oriya_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Pinyin_NumericPinyin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Pinyin_NumericPinyin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Pinyin_NumericPinyin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Pinyin_NumericPinyin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Simplified_Traditional.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Simplified_Traditional.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Simplified_Traditional.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Simplified_Traditional.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Syriac_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Syriac_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Syriac_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Syriac_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Telugu.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Telugu.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Telugu.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Tamil_Telugu.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Bengali.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Bengali.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Bengali.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Bengali.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Devanagari.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Devanagari.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Devanagari.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Devanagari.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gujarati.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gujarati.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gujarati.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gujarati.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gurmukhi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gurmukhi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gurmukhi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Gurmukhi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_InterIndic.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_InterIndic.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_InterIndic.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_InterIndic.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Kannada.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Kannada.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Kannada.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Kannada.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Malayalam.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Malayalam.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Malayalam.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Malayalam.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Oriya.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Oriya.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Oriya.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Oriya.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Tamil.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Tamil.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Tamil.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Telugu_Tamil.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Thaana_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Thaana_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Thaana_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Thaana_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/ThaiLogical_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/ThaiLogical_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/ThaiLogical_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/ThaiLogical_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_Latin.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_Latin.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_Latin.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Thai_Latin.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiLogical.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiLogical.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiLogical.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiLogical.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiSemi.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiSemi.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiSemi.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/Thai_ThaiSemi.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/el.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/el.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/el.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/el.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/en.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/en.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/en.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/en.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/root.txt b/lib/3rdparty/icu4ros/icu/source/data/translit/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/root.txt rename to lib/3rdparty/icu4ros/icu/source/data/translit/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/translit/trnsfiles.mk b/lib/3rdparty/icu4ros/icu/source/data/translit/trnsfiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/translit/trnsfiles.mk rename to lib/3rdparty/icu4ros/icu/source/data/translit/trnsfiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/BidiMirroring.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/BidiMirroring.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/BidiMirroring.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/BidiMirroring.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/Blocks.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/Blocks.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/Blocks.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/Blocks.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/CaseFolding.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/CaseFolding.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/CaseFolding.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/CaseFolding.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedAge.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedAge.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedAge.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedAge.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedBidiClass.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedBidiClass.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedBidiClass.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedBidiClass.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedCoreProperties.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedCoreProperties.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedCoreProperties.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedCoreProperties.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningGroup.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningGroup.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningGroup.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningGroup.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningType.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningType.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningType.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedJoiningType.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedNormalizationProps.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedNormalizationProps.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedNormalizationProps.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedNormalizationProps.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedNumericValues.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedNumericValues.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedNumericValues.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/DerivedNumericValues.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/EastAsianWidth.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/EastAsianWidth.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/EastAsianWidth.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/EastAsianWidth.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/FractionalUCA.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/FractionalUCA.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/FractionalUCA.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/FractionalUCA.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/GraphemeBreakProperty.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/GraphemeBreakProperty.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/GraphemeBreakProperty.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/GraphemeBreakProperty.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/LineBreak.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/LineBreak.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/LineBreak.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/LineBreak.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/NormalizationCorrections.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/NormalizationCorrections.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/NormalizationCorrections.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/NormalizationCorrections.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/NormalizationTest.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/NormalizationTest.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/NormalizationTest.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/NormalizationTest.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/PropList.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/PropList.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/PropList.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/PropList.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/PropertyAliases.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/PropertyAliases.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/PropertyAliases.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/PropertyAliases.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/PropertyValueAliases.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/PropertyValueAliases.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/PropertyValueAliases.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/PropertyValueAliases.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/Scripts.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/Scripts.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/Scripts.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/Scripts.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/SentenceBreakProperty.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/SentenceBreakProperty.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/SentenceBreakProperty.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/SentenceBreakProperty.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/SpecialCasing.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/SpecialCasing.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/SpecialCasing.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/SpecialCasing.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/UCARules.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/UCARules.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/UCARules.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/UCARules.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/UnicodeData.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/UnicodeData.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/UnicodeData.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/UnicodeData.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/WordBreakProperty.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/WordBreakProperty.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/WordBreakProperty.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/WordBreakProperty.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/changes.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/changes.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/changes.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/changes.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/ucdterms.txt b/lib/3rdparty/icu4ros/icu/source/data/unidata/ucdterms.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/unidata/ucdterms.txt rename to lib/3rdparty/icu4ros/icu/source/data/unidata/ucdterms.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US_POSIX.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US_POSIX.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US_POSIX.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/en_US_POSIX.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/ja.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/ja.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/ja.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/ja.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/root.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/root.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/root.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/brkitr/root.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ar.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ar.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ar.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ar.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/as.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/as.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/as.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/as.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/be.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/be.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/be.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/be.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/bg.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/bg.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/bg.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/bg.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/bn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/bn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/bn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/bn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ca.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ca.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ca.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ca.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/cs.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/cs.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/cs.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/cs.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/cy.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/cy.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/cy.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/cy.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/da.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/da.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/da.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/da.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/de.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/de.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/de.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/de.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/dz.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/dz.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/dz.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/dz.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/el.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/el.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/el.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/el.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/en.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/en.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/en.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/en.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/en_BE.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/en_BE.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/en_BE.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/en_BE.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/eo.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/eo.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/eo.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/eo.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/es.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/es.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/es.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/es.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/et.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/et.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/et.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/et.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fa.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fa.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fa.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/fa.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fa_AF.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fa_AF.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fa_AF.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/fa_AF.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fi.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fi.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fi.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/fi.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fo.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fo.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fo.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/fo.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/fr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/fr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/gu.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/gu.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/gu.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/gu.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/haw.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/haw.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/haw.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/haw.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/he.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/he.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/he.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/he.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hi.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hi.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hi.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/hi.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/hr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hu.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hu.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/hu.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/hu.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/is.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/is.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/is.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/is.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/it.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/it.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/it.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/it.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ja.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ja.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ja.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ja.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kk.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kk.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kk.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/kk.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/kl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/km.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/km.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/km.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/km.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/kn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ko.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ko.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ko.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ko.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kok.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kok.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/kok.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/kok.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/lt.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/lt.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/lt.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/lt.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/lv.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/lv.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/lv.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/lv.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mk.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mk.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mk.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/mk.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ml.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ml.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ml.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ml.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/mr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mt.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mt.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/mt.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/mt.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/nb.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/nb.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/nb.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/nb.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/nn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/nn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/nn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/nn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/om.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/om.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/om.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/om.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/or.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/or.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/or.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/or.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/pa.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/pa.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/pa.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/pa.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/pl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/pl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/pl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/pl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ps.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ps.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ps.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ps.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ro.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ro.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ro.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ro.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/root.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/root.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/root.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/root.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ru.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ru.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ru.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ru.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sk.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sk.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sk.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/sk.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/sl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sq.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sq.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sq.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/sq.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/sr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sr_Latn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sr_Latn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sr_Latn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/sr_Latn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sv.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sv.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/sv.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/sv.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ta.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ta.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/ta.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/ta.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/te.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/te.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/te.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/te.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/th.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/th.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/th.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/th.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/tr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/tr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/tr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/tr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/uk.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/uk.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/uk.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/uk.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/vi.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/vi.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/vi.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/vi.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_HK.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_HK.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_HK.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_HK.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_Hant.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_Hant.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_Hant.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_Hant.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_MO.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_MO.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_MO.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_MO.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW_STROKE.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW_STROKE.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW_STROKE.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/collation/zh_TW_STROKE.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/aa.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/aa.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/aa.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/aa.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/af.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/af.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/af.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/af.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/am.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/am.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/am.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/am.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ar.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ar.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ar.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ar.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/as.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/as.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/as.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/as.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/az.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/az.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/az.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/az.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_AZ.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_AZ.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_AZ.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/az_AZ.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_Cyrl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_Cyrl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_Cyrl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/az_Cyrl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_Latn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_Latn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/az_Latn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/az_Latn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/be.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/be.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/be.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/be.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/bg.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/bg.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/bg.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/bg.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/bn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/bn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/bn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/bn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ca.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ca.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ca.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ca.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/cs.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/cs.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/cs.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/cs.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/cy.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/cy.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/cy.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/cy.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/da.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/da.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/da.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/da.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/de.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/de.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/de.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/de.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/el.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/el.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/el.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/el.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/en.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/en.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/en.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/en.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/en_US_POSIX.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/en_US_POSIX.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/en_US_POSIX.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/en_US_POSIX.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/eo.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/eo.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/eo.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/eo.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/es.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/es.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/es.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/es.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/et.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/et.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/et.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/et.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/eu.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/eu.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/eu.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/eu.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/fa.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/fa.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/fa.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/fa.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/fi.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/fi.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/fi.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/fi.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/fo.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/fo.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/fo.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/fo.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/fr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/fr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/fr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/fr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ga.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ga.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ga.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ga.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/gl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/gl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/gl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/gl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/gu.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/gu.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/gu.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/gu.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/gv.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/gv.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/gv.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/gv.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/haw.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/haw.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/haw.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/haw.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/he.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/he.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/he.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/he.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/hi.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/hi.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/hi.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/hi.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/hr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/hr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/hr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/hr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/hu.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/hu.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/hu.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/hu.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/hy.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/hy.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/hy.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/hy.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/id.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/id.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/id.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/id.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ii.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ii.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ii.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ii.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/is.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/is.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/is.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/is.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/it.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/it.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/it.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/it.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/iw.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/iw.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/iw.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/iw.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ja.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ja.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ja.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ja.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ka.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ka.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ka.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ka.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kk.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/kk.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kk.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/kk.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/kl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/kl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/km.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/km.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/km.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/km.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/kn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/kn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ko.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ko.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ko.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ko.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kok.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/kok.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kok.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/kok.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kw.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/kw.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/kw.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/kw.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/lt.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/lt.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/lt.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/lt.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/lv.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/lv.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/lv.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/lv.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/mk.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/mk.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/mk.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/mk.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ml.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ml.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ml.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ml.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/mr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/mr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/mr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/mr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ms.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ms.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ms.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ms.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/mt.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/mt.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/mt.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/mt.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/my.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/my.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/my.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/my.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/nb.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/nb.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/nb.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/nb.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/nl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/nl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/nl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/nl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/nn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/nn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/nn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/nn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/no.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/no.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/no.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/no.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/nr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/nr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/nr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/nr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/om.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/om.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/om.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/om.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/or.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/or.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/or.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/or.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/pa.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/pa.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/pa.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/pa.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/pa_Guru.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/pa_Guru.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/pa_Guru.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/pa_Guru.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/pl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/pl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/pl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/pl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ps.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ps.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ps.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ps.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/pt.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/pt.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/pt.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/pt.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ro.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ro.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ro.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ro.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/root.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/root.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/root.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/root.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ru.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ru.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ru.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ru.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sh.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sh.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sh.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sh.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sk.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sk.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sk.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sk.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/so.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/so.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/so.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/so.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sq.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sq.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sq.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sq.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr_Cyrl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr_Cyrl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr_Cyrl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sr_Cyrl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr_Latn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr_Latn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sr_Latn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sr_Latn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sv.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sv.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sv.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sv.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sw.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/sw.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/sw.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/sw.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ta.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ta.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ta.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ta.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/te.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/te.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/te.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/te.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/th.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/th.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/th.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/th.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ti.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ti.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ti.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ti.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/tl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/tl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/tl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/tl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/to.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/to.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/to.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/to.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/tr.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/tr.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/tr.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/tr.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uk.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/uk.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uk.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/uk.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ur.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ur.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ur.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ur.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ur_IN.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/ur_IN.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/ur_IN.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/ur_IN.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/uz.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Arab.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Arab.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Arab.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Arab.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Cyrl.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Cyrl.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Cyrl.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Cyrl.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Latn.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Latn.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Latn.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_Latn.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_UZ.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_UZ.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_UZ.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/uz_UZ.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/vi.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/vi.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/vi.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/vi.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/zh.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hans.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hans.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hans.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hans.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hant.xml b/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hant.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hant.xml rename to lib/3rdparty/icu4ros/icu/source/data/xml/main/zh_Hant.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/Makefile.in b/lib/3rdparty/icu4ros/icu/source/extra/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/extra/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/Makefile.in b/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/extra/scrptrun/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/readme.html b/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/readme.html similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/readme.html rename to lib/3rdparty/icu4ros/icu/source/extra/scrptrun/readme.html diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.cpp b/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.cpp rename to lib/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.h b/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.h rename to lib/3rdparty/icu4ros/icu/source/extra/scrptrun/scrptrun.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.cpp b/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.cpp rename to lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsp b/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsp rename to lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsw b/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsw similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsw rename to lib/3rdparty/icu4ros/icu/source/extra/scrptrun/srtest.dsw diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/Makefile.in b/lib/3rdparty/icu4ros/icu/source/extra/uconv/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/README b/lib/3rdparty/icu4ros/icu/source/extra/uconv/README similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/README rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/README diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/makedata.mak b/lib/3rdparty/icu4ros/icu/source/extra/uconv/makedata.mak similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/makedata.mak rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/makedata.mak diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/pkgdata.inc.in b/lib/3rdparty/icu4ros/icu/source/extra/uconv/pkgdata.inc.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/pkgdata.inc.in rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/pkgdata.inc.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/resfiles.mk b/lib/3rdparty/icu4ros/icu/source/extra/uconv/resfiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/resfiles.mk rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/resfiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/resources/fr.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/resources/fr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/resources/fr.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/resources/fr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/resources/root.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/resources/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/resources/root.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/resources/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-2.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-2.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-2.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-2.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-3.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-3.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-3.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/ISO-8859-3.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/danish-ISO-8859-1.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/danish-ISO-8859-1.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/danish-ISO-8859-1.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/danish-ISO-8859-1.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/eucJP.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/eucJP.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/eucJP.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/eucJP.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/hangul-eucKR.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/hangul-eucKR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/hangul-eucKR.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/hangul-eucKR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/hania-eucKR.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/hania-eucKR.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/hania-eucKR.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/hania-eucKR.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/iso8859-1.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/iso8859-1.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/iso8859-1.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/iso8859-1.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/koi8r.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/koi8r.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/koi8r.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/koi8r.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/armenian.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/armenian.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/armenian.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/armenian.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/banviet.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/banviet.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/banviet.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/banviet.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/croat.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/croat.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/croat.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/croat.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/danish.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/danish.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/danish.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/danish.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/greek.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/greek.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/greek.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/greek.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hangul.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hangul.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hangul.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hangul.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hania.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hania.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hania.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/hania.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/jap.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/jap.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/jap.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/jap.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/korean.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/korean.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/korean.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/korean.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/linji.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/linji.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/linji.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/linji.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/many.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/many.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/many.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/many.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/maopoem.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/maopoem.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/maopoem.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/maopoem.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/russian.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/russian.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/russian.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/russian.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/simplechinese.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/simplechinese.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/simplechinese.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/simplechinese.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/turkish.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/turkish.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/turkish.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/turkish.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt b/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.1.in b/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.1.in rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.cpp b/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.cpp rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.vcproj b/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.vcproj rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/uconv.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/unicode/uwmsg.h b/lib/3rdparty/icu4ros/icu/source/extra/uconv/unicode/uwmsg.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/unicode/uwmsg.h rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/unicode/uwmsg.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/uwmsg.c b/lib/3rdparty/icu4ros/icu/source/extra/uconv/uwmsg.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/extra/uconv/uwmsg.c rename to lib/3rdparty/icu4ros/icu/source/extra/uconv/uwmsg.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/Makefile.in b/lib/3rdparty/icu4ros/icu/source/i18n/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/i18n/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/anytrans.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/anytrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/anytrans.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/anytrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/anytrans.h b/lib/3rdparty/icu4ros/icu/source/i18n/anytrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/anytrans.h rename to lib/3rdparty/icu4ros/icu/source/i18n/anytrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/astro.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/astro.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/astro.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/astro.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/astro.h b/lib/3rdparty/icu4ros/icu/source/i18n/astro.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/astro.h rename to lib/3rdparty/icu4ros/icu/source/i18n/astro.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/basictz.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/basictz.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/basictz.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/basictz.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/bocsu.c b/lib/3rdparty/icu4ros/icu/source/i18n/bocsu.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/bocsu.c rename to lib/3rdparty/icu4ros/icu/source/i18n/bocsu.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/bocsu.h b/lib/3rdparty/icu4ros/icu/source/i18n/bocsu.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/bocsu.h rename to lib/3rdparty/icu4ros/icu/source/i18n/bocsu.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/buddhcal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/buddhcal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/buddhcal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/buddhcal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/buddhcal.h b/lib/3rdparty/icu4ros/icu/source/i18n/buddhcal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/buddhcal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/buddhcal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/calendar.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/calendar.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/calendar.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/calendar.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/casetrn.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/casetrn.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/casetrn.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/casetrn.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/casetrn.h b/lib/3rdparty/icu4ros/icu/source/i18n/casetrn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/casetrn.h rename to lib/3rdparty/icu4ros/icu/source/i18n/casetrn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/chnsecal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/chnsecal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/chnsecal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/chnsecal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/chnsecal.h b/lib/3rdparty/icu4ros/icu/source/i18n/chnsecal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/chnsecal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/chnsecal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/choicfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/choicfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/choicfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/choicfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/coleitr.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/coleitr.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/coleitr.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/coleitr.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/coll.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/coll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/coll.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/coll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/cpdtrans.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/cpdtrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/cpdtrans.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/cpdtrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/cpdtrans.h b/lib/3rdparty/icu4ros/icu/source/i18n/cpdtrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/cpdtrans.h rename to lib/3rdparty/icu4ros/icu/source/i18n/cpdtrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csdetect.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/csdetect.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csdetect.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/csdetect.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csdetect.h b/lib/3rdparty/icu4ros/icu/source/i18n/csdetect.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csdetect.h rename to lib/3rdparty/icu4ros/icu/source/i18n/csdetect.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csmatch.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/csmatch.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csmatch.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/csmatch.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csmatch.h b/lib/3rdparty/icu4ros/icu/source/i18n/csmatch.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csmatch.h rename to lib/3rdparty/icu4ros/icu/source/i18n/csmatch.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csr2022.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/csr2022.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csr2022.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/csr2022.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csr2022.h b/lib/3rdparty/icu4ros/icu/source/i18n/csr2022.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csr2022.h rename to lib/3rdparty/icu4ros/icu/source/i18n/csr2022.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrecog.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/csrecog.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrecog.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/csrecog.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrecog.h b/lib/3rdparty/icu4ros/icu/source/i18n/csrecog.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrecog.h rename to lib/3rdparty/icu4ros/icu/source/i18n/csrecog.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrmbcs.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/csrmbcs.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrmbcs.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/csrmbcs.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrmbcs.h b/lib/3rdparty/icu4ros/icu/source/i18n/csrmbcs.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrmbcs.h rename to lib/3rdparty/icu4ros/icu/source/i18n/csrmbcs.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrsbcs.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/csrsbcs.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrsbcs.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/csrsbcs.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrsbcs.h b/lib/3rdparty/icu4ros/icu/source/i18n/csrsbcs.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrsbcs.h rename to lib/3rdparty/icu4ros/icu/source/i18n/csrsbcs.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrucode.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/csrucode.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrucode.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/csrucode.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrucode.h b/lib/3rdparty/icu4ros/icu/source/i18n/csrucode.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrucode.h rename to lib/3rdparty/icu4ros/icu/source/i18n/csrucode.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrutf8.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/csrutf8.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrutf8.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/csrutf8.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrutf8.h b/lib/3rdparty/icu4ros/icu/source/i18n/csrutf8.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/csrutf8.h rename to lib/3rdparty/icu4ros/icu/source/i18n/csrutf8.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/curramt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/curramt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/curramt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/curramt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/currfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/currfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/currfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/currfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/currfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/currfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/currfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/currfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/currunit.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/currunit.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/currunit.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/currunit.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/datefmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/datefmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/datefmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/datefmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/dcfmtsym.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/dcfmtsym.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/dcfmtsym.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/dcfmtsym.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/decimfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/decimfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/decimfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/decimfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/digitlst.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/digitlst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/digitlst.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/digitlst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/digitlst.h b/lib/3rdparty/icu4ros/icu/source/i18n/digitlst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/digitlst.h rename to lib/3rdparty/icu4ros/icu/source/i18n/digitlst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/dtfmtsym.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/dtfmtsym.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/dtfmtsym.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/dtfmtsym.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/dtptngen.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/dtptngen.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/dtptngen.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/dtptngen.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/dtptngen_impl.h b/lib/3rdparty/icu4ros/icu/source/i18n/dtptngen_impl.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/dtptngen_impl.h rename to lib/3rdparty/icu4ros/icu/source/i18n/dtptngen_impl.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/dtrule.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/dtrule.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/dtrule.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/dtrule.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/esctrn.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/esctrn.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/esctrn.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/esctrn.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/esctrn.h b/lib/3rdparty/icu4ros/icu/source/i18n/esctrn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/esctrn.h rename to lib/3rdparty/icu4ros/icu/source/i18n/esctrn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/fmtable.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/fmtable.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/fmtable.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/fmtable.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/fmtable_cnv.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/fmtable_cnv.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/fmtable_cnv.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/fmtable_cnv.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/format.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/format.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/format.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/format.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/funcrepl.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/funcrepl.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/funcrepl.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/funcrepl.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/funcrepl.h b/lib/3rdparty/icu4ros/icu/source/i18n/funcrepl.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/funcrepl.h rename to lib/3rdparty/icu4ros/icu/source/i18n/funcrepl.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/gregocal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/gregocal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/gregocal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/gregocal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/gregoimp.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/gregoimp.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/gregoimp.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/gregoimp.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/gregoimp.h b/lib/3rdparty/icu4ros/icu/source/i18n/gregoimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/gregoimp.h rename to lib/3rdparty/icu4ros/icu/source/i18n/gregoimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/hebrwcal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/hebrwcal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/hebrwcal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/hebrwcal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/hebrwcal.h b/lib/3rdparty/icu4ros/icu/source/i18n/hebrwcal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/hebrwcal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/hebrwcal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/i18n.rc b/lib/3rdparty/icu4ros/icu/source/i18n/i18n.rc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/i18n.rc rename to lib/3rdparty/icu4ros/icu/source/i18n/i18n.rc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/i18n.vcproj b/lib/3rdparty/icu4ros/icu/source/i18n/i18n.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/i18n.vcproj rename to lib/3rdparty/icu4ros/icu/source/i18n/i18n.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/indiancal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/indiancal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/indiancal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/indiancal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/indiancal.h b/lib/3rdparty/icu4ros/icu/source/i18n/indiancal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/indiancal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/indiancal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/inputext.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/inputext.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/inputext.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/inputext.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/inputext.h b/lib/3rdparty/icu4ros/icu/source/i18n/inputext.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/inputext.h rename to lib/3rdparty/icu4ros/icu/source/i18n/inputext.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/islamcal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/islamcal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/islamcal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/islamcal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/islamcal.h b/lib/3rdparty/icu4ros/icu/source/i18n/islamcal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/islamcal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/islamcal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/japancal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/japancal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/japancal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/japancal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/japancal.h b/lib/3rdparty/icu4ros/icu/source/i18n/japancal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/japancal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/japancal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/measfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/measfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/measfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/measfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/measure.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/measure.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/measure.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/measure.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/msgfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/msgfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/msgfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/msgfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/name2uni.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/name2uni.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/name2uni.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/name2uni.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/name2uni.h b/lib/3rdparty/icu4ros/icu/source/i18n/name2uni.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/name2uni.h rename to lib/3rdparty/icu4ros/icu/source/i18n/name2uni.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrlist.h b/lib/3rdparty/icu4ros/icu/source/i18n/nfrlist.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrlist.h rename to lib/3rdparty/icu4ros/icu/source/i18n/nfrlist.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrs.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/nfrs.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrs.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/nfrs.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrs.h b/lib/3rdparty/icu4ros/icu/source/i18n/nfrs.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrs.h rename to lib/3rdparty/icu4ros/icu/source/i18n/nfrs.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrule.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/nfrule.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrule.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/nfrule.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrule.h b/lib/3rdparty/icu4ros/icu/source/i18n/nfrule.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfrule.h rename to lib/3rdparty/icu4ros/icu/source/i18n/nfrule.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfsubs.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/nfsubs.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfsubs.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/nfsubs.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfsubs.h b/lib/3rdparty/icu4ros/icu/source/i18n/nfsubs.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nfsubs.h rename to lib/3rdparty/icu4ros/icu/source/i18n/nfsubs.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nortrans.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/nortrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nortrans.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/nortrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nortrans.h b/lib/3rdparty/icu4ros/icu/source/i18n/nortrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nortrans.h rename to lib/3rdparty/icu4ros/icu/source/i18n/nortrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nultrans.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/nultrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nultrans.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/nultrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/nultrans.h b/lib/3rdparty/icu4ros/icu/source/i18n/nultrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/nultrans.h rename to lib/3rdparty/icu4ros/icu/source/i18n/nultrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/numfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/numfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/numfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/numfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/olsontz.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/olsontz.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/olsontz.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/olsontz.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/olsontz.h b/lib/3rdparty/icu4ros/icu/source/i18n/olsontz.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/olsontz.h rename to lib/3rdparty/icu4ros/icu/source/i18n/olsontz.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/persncal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/persncal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/persncal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/persncal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/persncal.h b/lib/3rdparty/icu4ros/icu/source/i18n/persncal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/persncal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/persncal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/quant.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/quant.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/quant.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/quant.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/quant.h b/lib/3rdparty/icu4ros/icu/source/i18n/quant.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/quant.h rename to lib/3rdparty/icu4ros/icu/source/i18n/quant.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbnf.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/rbnf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbnf.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/rbnf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/rbt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt.h b/lib/3rdparty/icu4ros/icu/source/i18n/rbt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_data.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/rbt_data.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_data.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt_data.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_data.h b/lib/3rdparty/icu4ros/icu/source/i18n/rbt_data.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_data.h rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt_data.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_pars.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/rbt_pars.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_pars.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt_pars.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_pars.h b/lib/3rdparty/icu4ros/icu/source/i18n/rbt_pars.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_pars.h rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt_pars.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_rule.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/rbt_rule.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_rule.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt_rule.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_rule.h b/lib/3rdparty/icu4ros/icu/source/i18n/rbt_rule.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_rule.h rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt_rule.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_set.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/rbt_set.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_set.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt_set.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_set.h b/lib/3rdparty/icu4ros/icu/source/i18n/rbt_set.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbt_set.h rename to lib/3rdparty/icu4ros/icu/source/i18n/rbt_set.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbtz.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/rbtz.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rbtz.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/rbtz.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcmp.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/regexcmp.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcmp.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/regexcmp.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcmp.h b/lib/3rdparty/icu4ros/icu/source/i18n/regexcmp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcmp.h rename to lib/3rdparty/icu4ros/icu/source/i18n/regexcmp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.h b/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.h rename to lib/3rdparty/icu4ros/icu/source/i18n/regexcst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.pl b/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.pl rename to lib/3rdparty/icu4ros/icu/source/i18n/regexcst.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.txt b/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexcst.txt rename to lib/3rdparty/icu4ros/icu/source/i18n/regexcst.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/regeximp.h b/lib/3rdparty/icu4ros/icu/source/i18n/regeximp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/regeximp.h rename to lib/3rdparty/icu4ros/icu/source/i18n/regeximp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexst.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/regexst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexst.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/regexst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexst.h b/lib/3rdparty/icu4ros/icu/source/i18n/regexst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/regexst.h rename to lib/3rdparty/icu4ros/icu/source/i18n/regexst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/reldtfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/reldtfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/reldtfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/reldtfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/reldtfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/reldtfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/reldtfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/reldtfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/rematch.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/rematch.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/rematch.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/rematch.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/remtrans.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/remtrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/remtrans.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/remtrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/remtrans.h b/lib/3rdparty/icu4ros/icu/source/i18n/remtrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/remtrans.h rename to lib/3rdparty/icu4ros/icu/source/i18n/remtrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/repattrn.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/repattrn.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/repattrn.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/repattrn.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/search.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/search.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/search.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/search.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/simpletz.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/simpletz.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/simpletz.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/simpletz.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/smpdtfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/smpdtfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/smpdtfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/smpdtfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/sortkey.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/sortkey.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/sortkey.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/sortkey.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/strmatch.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/strmatch.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/strmatch.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/strmatch.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/strmatch.h b/lib/3rdparty/icu4ros/icu/source/i18n/strmatch.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/strmatch.h rename to lib/3rdparty/icu4ros/icu/source/i18n/strmatch.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/strrepl.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/strrepl.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/strrepl.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/strrepl.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/strrepl.h b/lib/3rdparty/icu4ros/icu/source/i18n/strrepl.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/strrepl.h rename to lib/3rdparty/icu4ros/icu/source/i18n/strrepl.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/stsearch.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/stsearch.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/stsearch.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/stsearch.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/taiwncal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/taiwncal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/taiwncal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/taiwncal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/taiwncal.h b/lib/3rdparty/icu4ros/icu/source/i18n/taiwncal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/taiwncal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/taiwncal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/tblcoll.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/tblcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/tblcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/tblcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/timezone.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/timezone.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/timezone.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/timezone.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/titletrn.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/titletrn.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/titletrn.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/titletrn.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/titletrn.h b/lib/3rdparty/icu4ros/icu/source/i18n/titletrn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/titletrn.h rename to lib/3rdparty/icu4ros/icu/source/i18n/titletrn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/tolowtrn.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/tolowtrn.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/tolowtrn.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/tolowtrn.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/tolowtrn.h b/lib/3rdparty/icu4ros/icu/source/i18n/tolowtrn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/tolowtrn.h rename to lib/3rdparty/icu4ros/icu/source/i18n/tolowtrn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/toupptrn.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/toupptrn.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/toupptrn.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/toupptrn.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/toupptrn.h b/lib/3rdparty/icu4ros/icu/source/i18n/toupptrn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/toupptrn.h rename to lib/3rdparty/icu4ros/icu/source/i18n/toupptrn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/translit.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/translit.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/translit.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/translit.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/transreg.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/transreg.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/transreg.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/transreg.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/transreg.h b/lib/3rdparty/icu4ros/icu/source/i18n/transreg.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/transreg.h rename to lib/3rdparty/icu4ros/icu/source/i18n/transreg.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/tridpars.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/tridpars.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/tridpars.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/tridpars.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/tridpars.h b/lib/3rdparty/icu4ros/icu/source/i18n/tridpars.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/tridpars.h rename to lib/3rdparty/icu4ros/icu/source/i18n/tridpars.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/tzrule.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/tzrule.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/tzrule.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/tzrule.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/tztrans.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/tztrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/tztrans.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/tztrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucal.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucal.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucln_in.c b/lib/3rdparty/icu4ros/icu/source/i18n/ucln_in.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucln_in.c rename to lib/3rdparty/icu4ros/icu/source/i18n/ucln_in.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucln_in.h b/lib/3rdparty/icu4ros/icu/source/i18n/ucln_in.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucln_in.h rename to lib/3rdparty/icu4ros/icu/source/i18n/ucln_in.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucol.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_bld.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_bld.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_bld.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_bld.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_bld.h b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_bld.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_bld.h rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_bld.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.h b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_cnt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_elm.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_elm.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_elm.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_elm.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_elm.h b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_elm.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_elm.h rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_elm.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_imp.h b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_imp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_imp.h rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_imp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_res.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_res.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_res.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_res.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_sit.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_sit.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_sit.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_sit.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_tok.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_tok.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_tok.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_tok.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_tok.h b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_tok.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_tok.h rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_tok.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.c b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.c rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.h b/lib/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/ucol_wgt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucoleitr.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucoleitr.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucoleitr.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucoleitr.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucsdet.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucsdet.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucsdet.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucsdet.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucurr.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/ucurr.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucurr.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/ucurr.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucurrimp.h b/lib/3rdparty/icu4ros/icu/source/i18n/ucurrimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ucurrimp.h rename to lib/3rdparty/icu4ros/icu/source/i18n/ucurrimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/udat.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/udat.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/udat.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/udat.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/udatpg.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/udatpg.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/udatpg.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/udatpg.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/ulocdata.c b/lib/3rdparty/icu4ros/icu/source/i18n/ulocdata.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/ulocdata.c rename to lib/3rdparty/icu4ros/icu/source/i18n/ulocdata.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/umsg.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/umsg.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/umsg.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/umsg.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/umsg_imp.h b/lib/3rdparty/icu4ros/icu/source/i18n/umsg_imp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/umsg_imp.h rename to lib/3rdparty/icu4ros/icu/source/i18n/umsg_imp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unesctrn.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/unesctrn.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unesctrn.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/unesctrn.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unesctrn.h b/lib/3rdparty/icu4ros/icu/source/i18n/unesctrn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unesctrn.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unesctrn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/uni2name.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/uni2name.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/uni2name.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/uni2name.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/uni2name.h b/lib/3rdparty/icu4ros/icu/source/i18n/uni2name.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/uni2name.h rename to lib/3rdparty/icu4ros/icu/source/i18n/uni2name.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/basictz.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/basictz.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/basictz.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/basictz.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/calendar.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/calendar.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/calendar.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/calendar.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/choicfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/choicfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/choicfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/choicfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/coleitr.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/coleitr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/coleitr.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/coleitr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/coll.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/coll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/coll.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/coll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/curramt.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/curramt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/curramt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/curramt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/currunit.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/currunit.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/currunit.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/currunit.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/datefmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/datefmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/datefmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/datefmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dcfmtsym.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dcfmtsym.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dcfmtsym.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/dcfmtsym.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/decimfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/decimfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/decimfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/decimfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtfmtsym.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtfmtsym.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtfmtsym.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtfmtsym.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtptngen.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtptngen.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtptngen.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtptngen.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtrule.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtrule.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtrule.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/dtrule.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/fieldpos.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/fieldpos.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/fieldpos.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/fieldpos.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/fmtable.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/fmtable.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/fmtable.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/fmtable.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/format.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/format.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/format.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/format.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/gregocal.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/gregocal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/gregocal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/gregocal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/measfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measunit.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measunit.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measunit.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/measunit.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measure.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measure.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/measure.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/measure.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/msgfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/msgfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/msgfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/msgfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/numfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/numfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/numfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/numfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/rbnf.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/rbnf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/rbnf.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/rbnf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/rbtz.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/rbtz.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/rbtz.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/rbtz.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/regex.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/regex.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/regex.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/regex.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/search.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/search.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/search.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/search.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/simpletz.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/simpletz.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/simpletz.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/simpletz.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/smpdtfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/smpdtfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/smpdtfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/smpdtfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/sortkey.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/sortkey.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/sortkey.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/sortkey.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/stsearch.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/stsearch.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/stsearch.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/stsearch.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tblcoll.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tblcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tblcoll.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/tblcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/timezone.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/timezone.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/timezone.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/timezone.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/translit.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/translit.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/translit.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/translit.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tzrule.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tzrule.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tzrule.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/tzrule.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tztrans.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tztrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/tztrans.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/tztrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucal.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucal.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucol.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucol.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucol.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucol.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucoleitr.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucoleitr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucoleitr.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucoleitr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucsdet.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucsdet.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucsdet.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucsdet.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucurr.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucurr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucurr.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/ucurr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/udat.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/udat.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/udat.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/udat.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/udatpg.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/udatpg.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/udatpg.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/udatpg.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ulocdata.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ulocdata.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/ulocdata.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/ulocdata.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/umsg.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/umsg.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/umsg.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/umsg.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/unirepl.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/unirepl.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/unirepl.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/unirepl.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/unum.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/unum.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/unum.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/unum.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/uregex.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/uregex.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/uregex.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/uregex.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/usearch.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/usearch.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/usearch.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/usearch.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/utmscale.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/utmscale.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/utmscale.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/utmscale.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/utrans.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/utrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/utrans.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/utrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/vtzone.h b/lib/3rdparty/icu4ros/icu/source/i18n/unicode/vtzone.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unicode/vtzone.h rename to lib/3rdparty/icu4ros/icu/source/i18n/unicode/vtzone.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/unum.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/unum.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/unum.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/unum.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/uregex.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/uregex.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/uregex.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/uregex.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/uregexc.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/uregexc.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/uregexc.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/uregexc.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/usearch.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/usearch.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/usearch.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/usearch.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/usrchimp.h b/lib/3rdparty/icu4ros/icu/source/i18n/usrchimp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/usrchimp.h rename to lib/3rdparty/icu4ros/icu/source/i18n/usrchimp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/utmscale.c b/lib/3rdparty/icu4ros/icu/source/i18n/utmscale.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/utmscale.c rename to lib/3rdparty/icu4ros/icu/source/i18n/utmscale.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/utrans.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/utrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/utrans.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/utrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/vtzone.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/vtzone.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/vtzone.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/vtzone.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/windtfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/windtfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/windtfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/windtfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/windtfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/windtfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/windtfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/windtfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/winnmfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/winnmfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/winnmfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/winnmfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/winnmfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/winnmfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/winnmfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/winnmfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/zonemeta.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/zonemeta.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/zonemeta.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/zonemeta.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/zonemeta.h b/lib/3rdparty/icu4ros/icu/source/i18n/zonemeta.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/zonemeta.h rename to lib/3rdparty/icu4ros/icu/source/i18n/zonemeta.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/zstrfmt.cpp b/lib/3rdparty/icu4ros/icu/source/i18n/zstrfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/zstrfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/i18n/zstrfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/i18n/zstrfmt.h b/lib/3rdparty/icu4ros/icu/source/i18n/zstrfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/i18n/zstrfmt.h rename to lib/3rdparty/icu4ros/icu/source/i18n/zstrfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/icudefs.mk.in b/lib/3rdparty/icu4ros/icu/source/icudefs.mk.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/icudefs.mk.in rename to lib/3rdparty/icu4ros/icu/source/icudefs.mk.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/install-sh b/lib/3rdparty/icu4ros/icu/source/install-sh similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/install-sh rename to lib/3rdparty/icu4ros/icu/source/install-sh diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/Makefile.in b/lib/3rdparty/icu4ros/icu/source/io/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/io/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/io.rc b/lib/3rdparty/icu4ros/icu/source/io/io.rc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/io.rc rename to lib/3rdparty/icu4ros/icu/source/io/io.rc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/io.vcproj b/lib/3rdparty/icu4ros/icu/source/io/io.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/io.vcproj rename to lib/3rdparty/icu4ros/icu/source/io/io.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/locbund.c b/lib/3rdparty/icu4ros/icu/source/io/locbund.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/locbund.c rename to lib/3rdparty/icu4ros/icu/source/io/locbund.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/locbund.h b/lib/3rdparty/icu4ros/icu/source/io/locbund.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/locbund.h rename to lib/3rdparty/icu4ros/icu/source/io/locbund.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/sprintf.c b/lib/3rdparty/icu4ros/icu/source/io/sprintf.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/sprintf.c rename to lib/3rdparty/icu4ros/icu/source/io/sprintf.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/sscanf.c b/lib/3rdparty/icu4ros/icu/source/io/sscanf.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/sscanf.c rename to lib/3rdparty/icu4ros/icu/source/io/sscanf.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/ucln_io.c b/lib/3rdparty/icu4ros/icu/source/io/ucln_io.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/ucln_io.c rename to lib/3rdparty/icu4ros/icu/source/io/ucln_io.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/ucln_io.h b/lib/3rdparty/icu4ros/icu/source/io/ucln_io.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/ucln_io.h rename to lib/3rdparty/icu4ros/icu/source/io/ucln_io.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/ufile.c b/lib/3rdparty/icu4ros/icu/source/io/ufile.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/ufile.c rename to lib/3rdparty/icu4ros/icu/source/io/ufile.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/ufile.h b/lib/3rdparty/icu4ros/icu/source/io/ufile.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/ufile.h rename to lib/3rdparty/icu4ros/icu/source/io/ufile.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/ufmt_cmn.c b/lib/3rdparty/icu4ros/icu/source/io/ufmt_cmn.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/ufmt_cmn.c rename to lib/3rdparty/icu4ros/icu/source/io/ufmt_cmn.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/ufmt_cmn.h b/lib/3rdparty/icu4ros/icu/source/io/ufmt_cmn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/ufmt_cmn.h rename to lib/3rdparty/icu4ros/icu/source/io/ufmt_cmn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/unicode/ustdio.h b/lib/3rdparty/icu4ros/icu/source/io/unicode/ustdio.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/unicode/ustdio.h rename to lib/3rdparty/icu4ros/icu/source/io/unicode/ustdio.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/unicode/ustream.h b/lib/3rdparty/icu4ros/icu/source/io/unicode/ustream.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/unicode/ustream.h rename to lib/3rdparty/icu4ros/icu/source/io/unicode/ustream.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/uprintf.c b/lib/3rdparty/icu4ros/icu/source/io/uprintf.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/uprintf.c rename to lib/3rdparty/icu4ros/icu/source/io/uprintf.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/uprintf.h b/lib/3rdparty/icu4ros/icu/source/io/uprintf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/uprintf.h rename to lib/3rdparty/icu4ros/icu/source/io/uprintf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/uprntf_p.c b/lib/3rdparty/icu4ros/icu/source/io/uprntf_p.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/uprntf_p.c rename to lib/3rdparty/icu4ros/icu/source/io/uprntf_p.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/uscanf.c b/lib/3rdparty/icu4ros/icu/source/io/uscanf.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/uscanf.c rename to lib/3rdparty/icu4ros/icu/source/io/uscanf.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/uscanf.h b/lib/3rdparty/icu4ros/icu/source/io/uscanf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/uscanf.h rename to lib/3rdparty/icu4ros/icu/source/io/uscanf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/uscanf_p.c b/lib/3rdparty/icu4ros/icu/source/io/uscanf_p.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/uscanf_p.c rename to lib/3rdparty/icu4ros/icu/source/io/uscanf_p.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/ustdio.c b/lib/3rdparty/icu4ros/icu/source/io/ustdio.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/ustdio.c rename to lib/3rdparty/icu4ros/icu/source/io/ustdio.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/io/ustream.cpp b/lib/3rdparty/icu4ros/icu/source/io/ustream.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/io/ustream.cpp rename to lib/3rdparty/icu4ros/icu/source/io/ustream.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/AlternateSubstSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/AnchorTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/AnchorTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/AnchorTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/AnchorTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/AnchorTables.h b/lib/3rdparty/icu4ros/icu/source/layout/AnchorTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/AnchorTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/AnchorTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/ArabicLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ArabicShaping.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ArabicShaping.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ArabicShaping.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ArabicShaping.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ArabicShaping.h b/lib/3rdparty/icu4ros/icu/source/layout/ArabicShaping.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ArabicShaping.h rename to lib/3rdparty/icu4ros/icu/source/layout/ArabicShaping.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/AttachmentPosnSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/AttachmentPosnSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/AttachmentPosnSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/AttachmentPosnSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/CanonData.cpp b/lib/3rdparty/icu4ros/icu/source/layout/CanonData.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/CanonData.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/CanonData.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/CanonShaping.cpp b/lib/3rdparty/icu4ros/icu/source/layout/CanonShaping.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/CanonShaping.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/CanonShaping.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/CanonShaping.h b/lib/3rdparty/icu4ros/icu/source/layout/CanonShaping.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/CanonShaping.h rename to lib/3rdparty/icu4ros/icu/source/layout/CanonShaping.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/CharSubstitutionFilter.h b/lib/3rdparty/icu4ros/icu/source/layout/CharSubstitutionFilter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/CharSubstitutionFilter.h rename to lib/3rdparty/icu4ros/icu/source/layout/CharSubstitutionFilter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.h b/lib/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/ClassDefinitionTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphInsertion.h b/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphInsertion.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphInsertion.h rename to lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphInsertion.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.h b/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.h rename to lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstProc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstitution.h b/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstitution.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstitution.h rename to lib/3rdparty/icu4ros/icu/source/layout/ContextualGlyphSubstitution.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/ContextualSubstSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/CoverageTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/CoverageTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/CoverageTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/CoverageTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/CoverageTables.h b/lib/3rdparty/icu4ros/icu/source/layout/CoverageTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/CoverageTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/CoverageTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/CursiveAttachmentSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/DefaultCharMapper.h b/lib/3rdparty/icu4ros/icu/source/layout/DefaultCharMapper.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/DefaultCharMapper.h rename to lib/3rdparty/icu4ros/icu/source/layout/DefaultCharMapper.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/DeviceTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/DeviceTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/DeviceTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/DeviceTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/DeviceTables.h b/lib/3rdparty/icu4ros/icu/source/layout/DeviceTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/DeviceTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/DeviceTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/ExtensionSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/Features.cpp b/lib/3rdparty/icu4ros/icu/source/layout/Features.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/Features.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/Features.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/Features.h b/lib/3rdparty/icu4ros/icu/source/layout/Features.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/Features.h rename to lib/3rdparty/icu4ros/icu/source/layout/Features.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.h b/lib/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.h rename to lib/3rdparty/icu4ros/icu/source/layout/GDEFMarkFilter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/GXLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.h b/lib/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphDefinitionTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphIterator.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GlyphIterator.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphIterator.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphIterator.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphIterator.h b/lib/3rdparty/icu4ros/icu/source/layout/GlyphIterator.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphIterator.h rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphIterator.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.h b/lib/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphLookupTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.h b/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.h rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphPositionAdjustments.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.h b/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphPositioningTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.h b/lib/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.h rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphPosnLookupProc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.h b/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.h rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstLookupProc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.h b/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/GlyphSubstitutionTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/HanLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/HangulLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/HindiFeatureTags.h b/lib/3rdparty/icu4ros/icu/source/layout/HindiFeatureTags.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/HindiFeatureTags.h rename to lib/3rdparty/icu4ros/icu/source/layout/HindiFeatureTags.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicClassTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/IndicClassTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicClassTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/IndicClassTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/IndicLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangement.h b/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangement.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangement.h rename to lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangement.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/IndicRearrangementProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicReordering.cpp b/lib/3rdparty/icu4ros/icu/source/layout/IndicReordering.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicReordering.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/IndicReordering.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicReordering.h b/lib/3rdparty/icu4ros/icu/source/layout/IndicReordering.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/IndicReordering.h rename to lib/3rdparty/icu4ros/icu/source/layout/IndicReordering.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/KernTable.cpp b/lib/3rdparty/icu4ros/icu/source/layout/KernTable.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/KernTable.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/KernTable.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/KernTable.h b/lib/3rdparty/icu4ros/icu/source/layout/KernTable.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/KernTable.h rename to lib/3rdparty/icu4ros/icu/source/layout/KernTable.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/KhmerLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/KhmerReordering.cpp b/lib/3rdparty/icu4ros/icu/source/layout/KhmerReordering.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/KhmerReordering.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/KhmerReordering.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/KhmerReordering.h b/lib/3rdparty/icu4ros/icu/source/layout/KhmerReordering.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/KhmerReordering.h rename to lib/3rdparty/icu4ros/icu/source/layout/KhmerReordering.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LEFontInstance.cpp b/lib/3rdparty/icu4ros/icu/source/layout/LEFontInstance.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LEFontInstance.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/LEFontInstance.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LEFontInstance.h b/lib/3rdparty/icu4ros/icu/source/layout/LEFontInstance.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LEFontInstance.h rename to lib/3rdparty/icu4ros/icu/source/layout/LEFontInstance.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphFilter.h b/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphFilter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphFilter.h rename to lib/3rdparty/icu4ros/icu/source/layout/LEGlyphFilter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.cpp b/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.h b/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.h rename to lib/3rdparty/icu4ros/icu/source/layout/LEGlyphStorage.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LEInsertionList.cpp b/lib/3rdparty/icu4ros/icu/source/layout/LEInsertionList.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LEInsertionList.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/LEInsertionList.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LEInsertionList.h b/lib/3rdparty/icu4ros/icu/source/layout/LEInsertionList.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LEInsertionList.h rename to lib/3rdparty/icu4ros/icu/source/layout/LEInsertionList.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LELanguages.h b/lib/3rdparty/icu4ros/icu/source/layout/LELanguages.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LELanguages.h rename to lib/3rdparty/icu4ros/icu/source/layout/LELanguages.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LEScripts.h b/lib/3rdparty/icu4ros/icu/source/layout/LEScripts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LEScripts.h rename to lib/3rdparty/icu4ros/icu/source/layout/LEScripts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LESwaps.h b/lib/3rdparty/icu4ros/icu/source/layout/LESwaps.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LESwaps.h rename to lib/3rdparty/icu4ros/icu/source/layout/LESwaps.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LETypes.h b/lib/3rdparty/icu4ros/icu/source/layout/LETypes.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LETypes.h rename to lib/3rdparty/icu4ros/icu/source/layout/LETypes.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/LayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/LayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/LayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/LayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LayoutTables.h b/lib/3rdparty/icu4ros/icu/source/layout/LayoutTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LayoutTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/LayoutTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.cpp b/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.h b/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.h rename to lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstProc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstitution.h b/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstitution.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstitution.h rename to lib/3rdparty/icu4ros/icu/source/layout/LigatureSubstitution.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LookupProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/LookupProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LookupProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/LookupProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LookupProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/LookupProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LookupProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/LookupProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LookupTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/LookupTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LookupTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/LookupTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/LookupTables.h b/lib/3rdparty/icu4ros/icu/source/layout/LookupTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/LookupTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/LookupTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/Lookups.cpp b/lib/3rdparty/icu4ros/icu/source/layout/Lookups.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/Lookups.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/Lookups.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/Lookups.h b/lib/3rdparty/icu4ros/icu/source/layout/Lookups.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/Lookups.h rename to lib/3rdparty/icu4ros/icu/source/layout/Lookups.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MPreFixups.cpp b/lib/3rdparty/icu4ros/icu/source/layout/MPreFixups.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MPreFixups.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/MPreFixups.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MPreFixups.h b/lib/3rdparty/icu4ros/icu/source/layout/MPreFixups.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MPreFixups.h rename to lib/3rdparty/icu4ros/icu/source/layout/MPreFixups.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/Makefile.in b/lib/3rdparty/icu4ros/icu/source/layout/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/layout/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkArrays.cpp b/lib/3rdparty/icu4ros/icu/source/layout/MarkArrays.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkArrays.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/MarkArrays.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkArrays.h b/lib/3rdparty/icu4ros/icu/source/layout/MarkArrays.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkArrays.h rename to lib/3rdparty/icu4ros/icu/source/layout/MarkArrays.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/MarkToBasePosnSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/MarkToLigaturePosnSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/MarkToMarkPosnSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MirroredCharData.cpp b/lib/3rdparty/icu4ros/icu/source/layout/MirroredCharData.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MirroredCharData.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/MirroredCharData.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MorphStateTables.h b/lib/3rdparty/icu4ros/icu/source/layout/MorphStateTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MorphStateTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/MorphStateTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MorphTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/MorphTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MorphTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/MorphTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MorphTables.h b/lib/3rdparty/icu4ros/icu/source/layout/MorphTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MorphTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/MorphTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/MultipleSubstSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubst.h b/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubst.h rename to lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.cpp b/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.h b/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.h rename to lib/3rdparty/icu4ros/icu/source/layout/NonContextualGlyphSubstProc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/OpenTypeLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeTables.h b/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/OpenTypeTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.cpp b/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.h b/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.h rename to lib/3rdparty/icu4ros/icu/source/layout/OpenTypeUtilities.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/PairPositioningSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.h b/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.h rename to lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguage.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.h b/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.h rename to lib/3rdparty/icu4ros/icu/source/layout/ScriptAndLanguageTags.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/SegmentArrayProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/SegmentSingleProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ShapingTypeData.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ShapingTypeData.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ShapingTypeData.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ShapingTypeData.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/SimpleArrayProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/SinglePositioningSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.h b/lib/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.h rename to lib/3rdparty/icu4ros/icu/source/layout/SingleSubstitutionSubtables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/SingleTableProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/StateTableProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/StateTables.h b/lib/3rdparty/icu4ros/icu/source/layout/StateTables.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/StateTables.h rename to lib/3rdparty/icu4ros/icu/source/layout/StateTables.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.cpp b/lib/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.h b/lib/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.h rename to lib/3rdparty/icu4ros/icu/source/layout/SubstitutionLookups.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/SubtableProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/ThaiLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiShaping.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ThaiShaping.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiShaping.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ThaiShaping.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiShaping.h b/lib/3rdparty/icu4ros/icu/source/layout/ThaiShaping.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiShaping.h rename to lib/3rdparty/icu4ros/icu/source/layout/ThaiShaping.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiStateTables.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ThaiStateTables.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ThaiStateTables.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ThaiStateTables.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.h b/lib/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.h rename to lib/3rdparty/icu4ros/icu/source/layout/TibetanLayoutEngine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/TibetanReordering.cpp b/lib/3rdparty/icu4ros/icu/source/layout/TibetanReordering.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/TibetanReordering.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/TibetanReordering.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/TibetanReordering.h b/lib/3rdparty/icu4ros/icu/source/layout/TibetanReordering.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/TibetanReordering.h rename to lib/3rdparty/icu4ros/icu/source/layout/TibetanReordering.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.cpp b/lib/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.h b/lib/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.h rename to lib/3rdparty/icu4ros/icu/source/layout/TrimmedArrayProcessor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ValueRecords.cpp b/lib/3rdparty/icu4ros/icu/source/layout/ValueRecords.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ValueRecords.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/ValueRecords.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/ValueRecords.h b/lib/3rdparty/icu4ros/icu/source/layout/ValueRecords.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/ValueRecords.h rename to lib/3rdparty/icu4ros/icu/source/layout/ValueRecords.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/layout.rc b/lib/3rdparty/icu4ros/icu/source/layout/layout.rc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/layout.rc rename to lib/3rdparty/icu4ros/icu/source/layout/layout.rc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/layout.vcproj b/lib/3rdparty/icu4ros/icu/source/layout/layout.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/layout.vcproj rename to lib/3rdparty/icu4ros/icu/source/layout/layout.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/loengine.cpp b/lib/3rdparty/icu4ros/icu/source/layout/loengine.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/loengine.cpp rename to lib/3rdparty/icu4ros/icu/source/layout/loengine.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layout/loengine.h b/lib/3rdparty/icu4ros/icu/source/layout/loengine.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layout/loengine.h rename to lib/3rdparty/icu4ros/icu/source/layout/loengine.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.cpp b/lib/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.cpp rename to lib/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.h b/lib/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.h rename to lib/3rdparty/icu4ros/icu/source/layoutex/LXUtilities.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/Makefile.in b/lib/3rdparty/icu4ros/icu/source/layoutex/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/layoutex/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/ParagraphLayout.cpp b/lib/3rdparty/icu4ros/icu/source/layoutex/ParagraphLayout.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/ParagraphLayout.cpp rename to lib/3rdparty/icu4ros/icu/source/layoutex/ParagraphLayout.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/RunArrays.cpp b/lib/3rdparty/icu4ros/icu/source/layoutex/RunArrays.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/RunArrays.cpp rename to lib/3rdparty/icu4ros/icu/source/layoutex/RunArrays.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layout/ParagraphLayout.h b/lib/3rdparty/icu4ros/icu/source/layoutex/layout/ParagraphLayout.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layout/ParagraphLayout.h rename to lib/3rdparty/icu4ros/icu/source/layoutex/layout/ParagraphLayout.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layout/RunArrays.h b/lib/3rdparty/icu4ros/icu/source/layoutex/layout/RunArrays.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layout/RunArrays.h rename to lib/3rdparty/icu4ros/icu/source/layoutex/layout/RunArrays.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layout/playout.h b/lib/3rdparty/icu4ros/icu/source/layoutex/layout/playout.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layout/playout.h rename to lib/3rdparty/icu4ros/icu/source/layoutex/layout/playout.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layout/plruns.h b/lib/3rdparty/icu4ros/icu/source/layoutex/layout/plruns.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layout/plruns.h rename to lib/3rdparty/icu4ros/icu/source/layoutex/layout/plruns.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layoutex.rc b/lib/3rdparty/icu4ros/icu/source/layoutex/layoutex.rc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layoutex.rc rename to lib/3rdparty/icu4ros/icu/source/layoutex/layoutex.rc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layoutex.vcproj b/lib/3rdparty/icu4ros/icu/source/layoutex/layoutex.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/layoutex.vcproj rename to lib/3rdparty/icu4ros/icu/source/layoutex/layoutex.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/playout.cpp b/lib/3rdparty/icu4ros/icu/source/layoutex/playout.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/playout.cpp rename to lib/3rdparty/icu4ros/icu/source/layoutex/playout.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/layoutex/plruns.cpp b/lib/3rdparty/icu4ros/icu/source/layoutex/plruns.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/layoutex/plruns.cpp rename to lib/3rdparty/icu4ros/icu/source/layoutex/plruns.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/mkinstalldirs b/lib/3rdparty/icu4ros/icu/source/mkinstalldirs similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/mkinstalldirs rename to lib/3rdparty/icu4ros/icu/source/mkinstalldirs diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/runConfigureICU b/lib/3rdparty/icu4ros/icu/source/runConfigureICU similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/runConfigureICU rename to lib/3rdparty/icu4ros/icu/source/runConfigureICU diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/Makefile.in b/lib/3rdparty/icu4ros/icu/source/samples/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/samples/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/all/all.sln b/lib/3rdparty/icu4ros/icu/source/samples/all/all.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/all/all.sln rename to lib/3rdparty/icu4ros/icu/source/samples/all/all.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/break/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/break/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/break/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/break/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/break/break.cpp b/lib/3rdparty/icu4ros/icu/source/samples/break/break.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/break/break.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/break/break.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/break/break.sln b/lib/3rdparty/icu4ros/icu/source/samples/break/break.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/break/break.sln rename to lib/3rdparty/icu4ros/icu/source/samples/break/break.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/break/break.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/break/break.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/break/break.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/break/break.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/break/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/break/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/break/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/break/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/break/ubreak.c b/lib/3rdparty/icu4ros/icu/source/samples/break/ubreak.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/break/ubreak.c rename to lib/3rdparty/icu4ros/icu/source/samples/break/ubreak.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/Makefile.in b/lib/3rdparty/icu4ros/icu/source/samples/cal/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/samples/cal/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.c b/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.c rename to lib/3rdparty/icu4ros/icu/source/samples/cal/cal.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.sln b/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.sln rename to lib/3rdparty/icu4ros/icu/source/samples/cal/cal.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/cal.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/cal/cal.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/cal/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/cal/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/uprint.c b/lib/3rdparty/icu4ros/icu/source/samples/cal/uprint.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/uprint.c rename to lib/3rdparty/icu4ros/icu/source/samples/cal/uprint.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/uprint.h b/lib/3rdparty/icu4ros/icu/source/samples/cal/uprint.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/cal/uprint.h rename to lib/3rdparty/icu4ros/icu/source/samples/cal/uprint.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/case/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/case/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/case/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/case/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/case/case.cpp b/lib/3rdparty/icu4ros/icu/source/samples/case/case.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/case/case.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/case/case.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/case/case.sln b/lib/3rdparty/icu4ros/icu/source/samples/case/case.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/case/case.sln rename to lib/3rdparty/icu4ros/icu/source/samples/case/case.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/case/case.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/case/case.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/case/case.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/case/case.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/case/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/case/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/case/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/case/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/case/ucase.c b/lib/3rdparty/icu4ros/icu/source/samples/case/ucase.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/case/ucase.c rename to lib/3rdparty/icu4ros/icu/source/samples/case/ucase.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/citer/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/citer/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/citer/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/citer/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/citer/citer.cpp b/lib/3rdparty/icu4ros/icu/source/samples/citer/citer.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/citer/citer.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/citer/citer.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/citer/citer.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/citer/citer.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/citer/citer.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/citer/citer.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/citer/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/citer/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/citer/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/citer/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/coll/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/coll/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.cpp b/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/coll/coll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.sln b/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.sln rename to lib/3rdparty/icu4ros/icu/source/samples/coll/coll.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/coll.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/coll/coll.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/coll/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/coll/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/coll/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/csdet/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/csdet/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/csdet/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/csdet/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/csdet/csdet.c b/lib/3rdparty/icu4ros/icu/source/samples/csdet/csdet.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/csdet/csdet.c rename to lib/3rdparty/icu4ros/icu/source/samples/csdet/csdet.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/csdet/csdet.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/csdet/csdet.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/csdet/csdet.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/csdet/csdet.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/date/Makefile.in b/lib/3rdparty/icu4ros/icu/source/samples/date/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/date/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/samples/date/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/date/date.c b/lib/3rdparty/icu4ros/icu/source/samples/date/date.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/date/date.c rename to lib/3rdparty/icu4ros/icu/source/samples/date/date.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/date/date.sln b/lib/3rdparty/icu4ros/icu/source/samples/date/date.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/date/date.sln rename to lib/3rdparty/icu4ros/icu/source/samples/date/date.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/date/date.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/date/date.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/date/date.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/date/date.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/date/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/date/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/date/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/date/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/date/uprint.c b/lib/3rdparty/icu4ros/icu/source/samples/date/uprint.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/date/uprint.c rename to lib/3rdparty/icu4ros/icu/source/samples/date/uprint.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/date/uprint.h b/lib/3rdparty/icu4ros/icu/source/samples/date/uprint.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/date/uprint.h rename to lib/3rdparty/icu4ros/icu/source/samples/date/uprint.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datecal/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/datecal/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datecal/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/datecal/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datecal/cal.cpp b/lib/3rdparty/icu4ros/icu/source/samples/datecal/cal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datecal/cal.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/datecal/cal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datecal/ccal.c b/lib/3rdparty/icu4ros/icu/source/samples/datecal/ccal.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datecal/ccal.c rename to lib/3rdparty/icu4ros/icu/source/samples/datecal/ccal.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/README.TXT b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/README.TXT similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/README.TXT rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/README.TXT diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_0.cpp b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_0.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_0.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_0.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_1.cpp b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_1.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_1.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_1.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_2.cpp b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_2.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_2.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_2.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_3.cpp b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_3.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_3.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/answers/main_3.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.sln b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.sln rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/datefmt.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/main.cpp b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/main.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/main.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/main.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/util.cpp b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/util.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/util.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/util.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/util.h b/lib/3rdparty/icu4ros/icu/source/samples/datefmt/util.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/datefmt/util.h rename to lib/3rdparty/icu4ros/icu/source/samples/datefmt/util.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/defs.mk b/lib/3rdparty/icu4ros/icu/source/samples/defs.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/defs.mk rename to lib/3rdparty/icu4ros/icu/source/samples/defs.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.GDI b/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.GDI similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.GDI rename to lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.GDI diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.Gnome b/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.Gnome similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.Gnome rename to lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.Gnome diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/FontMap.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/FontTableCache.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontInstance.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GDIFontMap.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GDIGUISupport.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GUISupport.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/GUISupport.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GUISupport.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GUISupport.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontInstance.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeFontMap.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/GnomeGUISupport.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/LayoutSample.rc b/lib/3rdparty/icu4ros/icu/source/samples/layout/LayoutSample.rc similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/LayoutSample.rc rename to lib/3rdparty/icu4ros/icu/source/samples/layout/LayoutSample.rc diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/Makefile.in b/lib/3rdparty/icu4ros/icu/source/samples/layout/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/samples/layout/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/RenderingSurface.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/RenderingSurface.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/RenderingSurface.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/RenderingSurface.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/Sample.txt b/lib/3rdparty/icu4ros/icu/source/samples/layout/Sample.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/Sample.txt rename to lib/3rdparty/icu4ros/icu/source/samples/layout/Sample.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/ScriptCompositeFontInstance.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/Surface.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/Surface.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/Surface.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/Surface.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/Surface.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/Surface.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/Surface.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/Surface.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/UnicodeReader.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/arraymem.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/arraymem.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/arraymem.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/arraymem.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/cgnomelayout.c b/lib/3rdparty/icu4ros/icu/source/samples/layout/cgnomelayout.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/cgnomelayout.c rename to lib/3rdparty/icu4ros/icu/source/samples/layout/cgnomelayout.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/clayout.c b/lib/3rdparty/icu4ros/icu/source/samples/layout/clayout.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/clayout.c rename to lib/3rdparty/icu4ros/icu/source/samples/layout/clayout.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/cmaps.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/cmaps.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/cmaps.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/cmaps.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/cmaps.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/cmaps.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/cmaps.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/cmaps.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/gdiglue.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/gnomeglue.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomelayout.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomelayout.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gnomelayout.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/gnomelayout.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gsupport.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/gsupport.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/gsupport.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/gsupport.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/layout.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.sln b/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.sln rename to lib/3rdparty/icu4ros/icu/source/samples/layout/layout.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/layout.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/layout/layout.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/paragraph.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/paragraph.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/paragraph.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/paragraph.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/paragraph.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/paragraph.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/paragraph.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/paragraph.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/pflow.c b/lib/3rdparty/icu4ros/icu/source/samples/layout/pflow.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/pflow.c rename to lib/3rdparty/icu4ros/icu/source/samples/layout/pflow.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/pflow.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/pflow.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/pflow.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/pflow.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/readme.html b/lib/3rdparty/icu4ros/icu/source/samples/layout/readme.html similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/readme.html rename to lib/3rdparty/icu4ros/icu/source/samples/layout/readme.html diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/resource.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/resource.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/resource.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/resource.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/rsurface.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/rsurface.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/rsurface.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/rsurface.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/rsurface.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/rsurface.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/rsurface.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/rsurface.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/sfnt.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/sfnt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/sfnt.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/sfnt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/ucreader.cpp b/lib/3rdparty/icu4ros/icu/source/samples/layout/ucreader.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/ucreader.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/layout/ucreader.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/ucreader.h b/lib/3rdparty/icu4ros/icu/source/samples/layout/ucreader.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/layout/ucreader.h rename to lib/3rdparty/icu4ros/icu/source/samples/layout/ucreader.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/legacy/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/legacy/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/README b/lib/3rdparty/icu4ros/icu/source/samples/legacy/README similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/README rename to lib/3rdparty/icu4ros/icu/source/samples/legacy/README diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.cpp b/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.sln b/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.sln rename to lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/legacy/legacy.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/newcol.cpp b/lib/3rdparty/icu4ros/icu/source/samples/legacy/newcol.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/newcol.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/legacy/newcol.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/oldcol.cpp b/lib/3rdparty/icu4ros/icu/source/samples/legacy/oldcol.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/legacy/oldcol.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/legacy/oldcol.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/README.TXT b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/README.TXT similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/README.TXT rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/README.TXT diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_0.cpp b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_0.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_0.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_0.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_1.cpp b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_1.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_1.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_1.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_2.cpp b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_2.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_2.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_2.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_3.cpp b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_3.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_3.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/answers/main_3.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/main.cpp b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/main.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/main.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/main.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.sln b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.sln rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/msgfmt.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/util.cpp b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/util.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/util.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/util.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/util.h b/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/util.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/msgfmt/util.h rename to lib/3rdparty/icu4ros/icu/source/samples/msgfmt/util.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/numfmt/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/numfmt/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/capi.c b/lib/3rdparty/icu4ros/icu/source/samples/numfmt/capi.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/capi.c rename to lib/3rdparty/icu4ros/icu/source/samples/numfmt/capi.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/main.cpp b/lib/3rdparty/icu4ros/icu/source/samples/numfmt/main.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/main.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/numfmt/main.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.sln b/lib/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.sln rename to lib/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/numfmt/numfmt.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/numfmt/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/numfmt/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/util.cpp b/lib/3rdparty/icu4ros/icu/source/samples/numfmt/util.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/util.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/numfmt/util.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/util.h b/lib/3rdparty/icu4ros/icu/source/samples/numfmt/util.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/numfmt/util.h rename to lib/3rdparty/icu4ros/icu/source/samples/numfmt/util.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/props/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/props/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/props/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/props/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/props/props.cpp b/lib/3rdparty/icu4ros/icu/source/samples/props/props.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/props/props.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/props/props.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/props/props.sln b/lib/3rdparty/icu4ros/icu/source/samples/props/props.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/props/props.sln rename to lib/3rdparty/icu4ros/icu/source/samples/props/props.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/props/props.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/props/props.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/props/props.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/props/props.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/props/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/props/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/props/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/props/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/rules.mk b/lib/3rdparty/icu4ros/icu/source/samples/rules.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/rules.mk rename to lib/3rdparty/icu4ros/icu/source/samples/rules.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/strsrch/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/strsrch/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/strsrch/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/strsrch/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.cpp b/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.sln b/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.sln rename to lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/strsrch/strsrch.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/translit/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/translit/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/README.TXT b/lib/3rdparty/icu4ros/icu/source/samples/translit/README.TXT similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/README.TXT rename to lib/3rdparty/icu4ros/icu/source/samples/translit/README.TXT diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_1.cpp b/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_1.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_1.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_1.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_2.cpp b/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_2.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_2.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_2.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_3.cpp b/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_3.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_3.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_3.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_4.cpp b/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_4.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_4.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/translit/answers/main_4.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.cpp b/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.h b/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.h rename to lib/3rdparty/icu4ros/icu/source/samples/translit/answers/unaccent.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/main.cpp b/lib/3rdparty/icu4ros/icu/source/samples/translit/main.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/main.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/translit/main.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/translit.sln b/lib/3rdparty/icu4ros/icu/source/samples/translit/translit.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/translit.sln rename to lib/3rdparty/icu4ros/icu/source/samples/translit/translit.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/translit.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/translit/translit.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/translit.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/translit/translit.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/unaccent.cpp b/lib/3rdparty/icu4ros/icu/source/samples/translit/unaccent.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/unaccent.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/translit/unaccent.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/unaccent.h b/lib/3rdparty/icu4ros/icu/source/samples/translit/unaccent.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/unaccent.h rename to lib/3rdparty/icu4ros/icu/source/samples/translit/unaccent.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/util.cpp b/lib/3rdparty/icu4ros/icu/source/samples/translit/util.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/util.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/translit/util.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/util.h b/lib/3rdparty/icu4ros/icu/source/samples/translit/util.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/translit/util.h rename to lib/3rdparty/icu4ros/icu/source/samples/translit/util.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/uciter8/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/uciter8/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/uciter8/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/uciter8/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.c b/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.c rename to lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.sln b/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.sln rename to lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/uciter8/uciter8.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.c b/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.c rename to lib/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.h b/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.h rename to lib/3rdparty/icu4ros/icu/source/samples/uciter8/uit_len8.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/convsamp.cpp b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/convsamp.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/convsamp.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/convsamp.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data01.txt b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data01.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data01.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/data01.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data02.bin b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data02.bin similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data02.bin rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/data02.bin diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data06.txt b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data06.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/data06.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/data06.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.c b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.c rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.h b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.h rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/flagcb.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.sln b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.sln rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/ucnv/ucnv.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/udata/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/udata/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/reader.c b/lib/3rdparty/icu4ros/icu/source/samples/udata/reader.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/reader.c rename to lib/3rdparty/icu4ros/icu/source/samples/udata/reader.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/reader.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/udata/reader.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/reader.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/udata/reader.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/udata/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/udata/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/udata.sln b/lib/3rdparty/icu4ros/icu/source/samples/udata/udata.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/udata.sln rename to lib/3rdparty/icu4ros/icu/source/samples/udata/udata.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/writer.c b/lib/3rdparty/icu4ros/icu/source/samples/udata/writer.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/writer.c rename to lib/3rdparty/icu4ros/icu/source/samples/udata/writer.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/writer.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/udata/writer.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/udata/writer.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/udata/writer.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/fortunedefs.mk b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/fortunedefs.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/fortunedefs.mk rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/fortunedefs.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/es.txt b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/es.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/es.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/es.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/fortune_resources.mak b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/fortune_resources.mak similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/fortune_resources.mak rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/fortune_resources.mak diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/res-file-list.txt b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/res-file-list.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/res-file-list.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/res-file-list.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/root.txt b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/root.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/resources/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.c b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.c rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.sln b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.sln rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/ufortune/ufortune.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/ugrep/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/ugrep/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/ugrep/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ugrep/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.cpp b/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.sln b/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.sln rename to lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/ugrep/ugrep.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/uresb/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/en.txt b/lib/3rdparty/icu4ros/icu/source/samples/uresb/en.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/en.txt rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/en.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/uresb/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/resources.mak b/lib/3rdparty/icu4ros/icu/source/samples/uresb/resources.mak similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/resources.mak rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/resources.mak diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/resources.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/uresb/resources.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/resources.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/resources.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/root.txt b/lib/3rdparty/icu4ros/icu/source/samples/uresb/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/root.txt rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/sr.txt b/lib/3rdparty/icu4ros/icu/source/samples/uresb/sr.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/sr.txt rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/sr.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.c b/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.c rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.sln b/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.sln rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/uresb/uresb.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/Makefile b/lib/3rdparty/icu4ros/icu/source/samples/ustring/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/Makefile rename to lib/3rdparty/icu4ros/icu/source/samples/ustring/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/readme.txt b/lib/3rdparty/icu4ros/icu/source/samples/ustring/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/readme.txt rename to lib/3rdparty/icu4ros/icu/source/samples/ustring/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.cpp b/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.cpp rename to lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.sln b/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.sln rename to lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.vcproj b/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.vcproj rename to lib/3rdparty/icu4ros/icu/source/samples/ustring/ustring.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/stubdata/Makefile.in b/lib/3rdparty/icu4ros/icu/source/stubdata/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/stubdata/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/stubdata/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/stubdata/stubdata.c b/lib/3rdparty/icu4ros/icu/source/stubdata/stubdata.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/stubdata/stubdata.c rename to lib/3rdparty/icu4ros/icu/source/stubdata/stubdata.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/stubdata/stubdata.vcproj b/lib/3rdparty/icu4ros/icu/source/stubdata/stubdata.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/stubdata/stubdata.vcproj rename to lib/3rdparty/icu4ros/icu/source/stubdata/stubdata.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/cintltst/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/bocu1tst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/bocu1tst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/bocu1tst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/bocu1tst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/callcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/calldata.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/calldata.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/calldata.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/calldata.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/calltest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/calltest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/calltest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/calltest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/capitst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/capitst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/capitst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/capitst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/capitst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/capitst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/capitst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/capitst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiapts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbididat.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbididat.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbididat.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cbididat.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cbiditst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbkittst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbkittst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cbkittst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cbkittst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ccaltst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ccapitst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ccolltst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cconvtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cconvtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cconvtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cconvtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cctest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cctest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cctest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cctest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ccurrtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cdattst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cdetst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtdptst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cdtrgtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cestst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cestst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cestst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cestst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cestst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cestst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cestst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cestst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cfintst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cformtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cfrtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cg7coll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/chashtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/chashtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/chashtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/chashtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.vcproj b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cintltst.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/citertst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/citertst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/citertst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/citertst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/citertst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/citertst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/citertst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/citertst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cjaptst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cldrtest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cldrtest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cldrtest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cldrtest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cloctst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsccoll.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsccoll.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsccoll.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsccoll.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cmsgtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cnmdptst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cnormtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cnumtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/colutil.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/colutil.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/colutil.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/colutil.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cposxtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cposxtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cposxtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cposxtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/crestst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/crestst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/crestst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/crestst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/crestst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/crestst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/crestst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/crestst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/creststn.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/creststn.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/creststn.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/creststn.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/creststn.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/creststn.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/creststn.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/creststn.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cstrcase.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cstrcase.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cstrcase.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cstrcase.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cstrtest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cstrtest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cstrtest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cstrtest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cturtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdapi.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cucdtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/currtest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/currtest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/currtest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/currtest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/custrtrn.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/custrtrn.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/custrtrn.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/custrtrn.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/custrtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/custrtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/custrtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/custrtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cutiltst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/cutiltst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/cutiltst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/cutiltst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/encoll.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/encoll.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/encoll.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/encoll.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/encoll.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/encoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/encoll.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/encoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/eurocreg.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/eurocreg.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/eurocreg.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/eurocreg.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/hpmufn.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/hpmufn.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/hpmufn.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/hpmufn.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/idnatest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/idnatest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/idnatest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/idnatest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/nccbtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvfbts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ncnvtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/nfsprep.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.h b/lib/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.h rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/nucnvtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/putiltst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/putiltst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/putiltst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/putiltst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/reapits.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/reapits.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/reapits.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/reapits.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/sorttest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/sorttest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/sorttest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/sorttest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/spreptst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/spreptst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/spreptst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/spreptst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/sprpdata.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/sprpdata.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/sprpdata.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/sprpdata.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/stdnmtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/stdnmtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/stdnmtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/stdnmtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/tracetst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/tracetst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/tracetst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/tracetst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/trietest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/trietest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/trietest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/trietest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ucsdetst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/ucsdetst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/ucsdetst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/ucsdetst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/udatatst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/udatatst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/udatatst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/udatatst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/udatpg_test.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/udatpg_test.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/udatpg_test.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/udatpg_test.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/uenumtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/uenumtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/uenumtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/uenumtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/usettest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/usettest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/usettest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/usettest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/usrchdat.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/usrchdat.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/usrchdat.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/usrchdat.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/usrchtst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/usrchtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/usrchtst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/usrchtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utexttst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/utexttst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utexttst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/utexttst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utf16tst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/utf16tst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utf16tst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/utf16tst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utf8tst.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/utf8tst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utf8tst.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/utf8tst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utmstest.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/utmstest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utmstest.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/utmstest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utransts.c b/lib/3rdparty/icu4ros/icu/source/test/cintltst/utransts.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/cintltst/utransts.c rename to lib/3rdparty/icu4ros/icu/source/test/cintltst/utransts.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/compat/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/compat/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/compat/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/compat/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/compat/readme.txt b/lib/3rdparty/icu4ros/icu/source/test/compat/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/compat/readme.txt rename to lib/3rdparty/icu4ros/icu/source/test/compat/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/compat/tzdate.c b/lib/3rdparty/icu4ros/icu/source/test/compat/tzdate.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/compat/tzdate.c rename to lib/3rdparty/icu4ros/icu/source/test/compat/tzdate.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/compat/tzone.pl b/lib/3rdparty/icu4ros/icu/source/test/compat/tzone.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/compat/tzone.pl rename to lib/3rdparty/icu4ros/icu/source/test/compat/tzone.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/hdrtst/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/hdrtst/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/hdrtst/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/hdrtst/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/hdrtst/cxxfiles.txt b/lib/3rdparty/icu4ros/icu/source/test/hdrtst/cxxfiles.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/hdrtst/cxxfiles.txt rename to lib/3rdparty/icu4ros/icu/source/test/hdrtst/cxxfiles.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/hdrtst/dfiles.txt b/lib/3rdparty/icu4ros/icu/source/test/hdrtst/dfiles.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/hdrtst/dfiles.txt rename to lib/3rdparty/icu4ros/icu/source/test/hdrtst/dfiles.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/hdrtst/pfiles.txt b/lib/3rdparty/icu4ros/icu/source/test/hdrtst/pfiles.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/hdrtst/pfiles.txt rename to lib/3rdparty/icu4ros/icu/source/test/hdrtst/pfiles.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/intltest/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/intltest/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/aliastst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/aliastst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/aliastst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/aliastst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/aliastst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/aliastst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/aliastst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/aliastst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/allcoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/allcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/allcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/allcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/allcoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/allcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/allcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/allcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/apicoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/apicoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/apicoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/apicoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/apicoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/apicoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/apicoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/apicoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/astrotst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/astrotst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/astrotst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/astrotst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/astrotst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/astrotst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/astrotst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/astrotst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/calcasts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/calcasts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/calcasts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/calcasts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/calcasts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/calcasts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/calcasts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/calcasts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/callimts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/callimts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/callimts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/callimts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/callimts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/callimts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/callimts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/callimts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/calregts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/calregts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/calregts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/calregts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/calregts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/calregts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/calregts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/calregts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/caltest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/caltest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/caltest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/caltest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/caltest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/caltest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/caltest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/caltest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/caltztst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/caltztst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/caltztst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/caltztst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/caltztst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/caltztst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/caltztst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/caltztst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/canittst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/canittst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/canittst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/canittst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/canittst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/canittst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/canittst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/canittst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/citrtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/citrtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/citrtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/citrtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/citrtest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/citrtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/citrtest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/citrtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/cntabcol.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/convtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/convtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/convtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/convtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/convtest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/convtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/convtest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/convtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/cpdtrtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/csdetest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/csdetest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/csdetest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/csdetest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/csdetest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/csdetest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/csdetest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/csdetest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/currcoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/currcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/currcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/currcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/currcoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/currcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/currcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/currcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcal.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dadrcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dadrfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dcfmapts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/decoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/decoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/decoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/decoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/decoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/decoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/decoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/decoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmapts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmrgts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmtrtts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtfmttst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/dtptngts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/encoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/encoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/encoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/encoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/encoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/encoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/encoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/encoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/escoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/escoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/escoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/escoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/escoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/escoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/escoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/escoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ficoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/ficoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ficoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ficoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ficoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/ficoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ficoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ficoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/fldset.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/fldset.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/fldset.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/fldset.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/fldset.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/fldset.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/fldset.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/fldset.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/frcoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/frcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/frcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/frcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/frcoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/frcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/frcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/frcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/g7coll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/g7coll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/g7coll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/g7coll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/g7coll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/g7coll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/g7coll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/g7coll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/icusvtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/idnaconf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaref.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaref.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaref.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/idnaref.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaref.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaref.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/idnaref.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/idnaref.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/incaltst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/incaltst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/incaltst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/incaltst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/incaltst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/incaltst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/incaltst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/incaltst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.vcproj b/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/intltest/intltest.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itercoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/itercoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itercoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itercoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itercoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/itercoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itercoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itercoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itformat.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/itformat.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itformat.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itformat.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itformat.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/itformat.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itformat.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itformat.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itmajor.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/itmajor.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itmajor.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itmajor.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itmajor.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/itmajor.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itmajor.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itmajor.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itrbbi.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itrbnfrt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ittrans.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/ittrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ittrans.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ittrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ittrans.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/ittrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ittrans.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ittrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itutil.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/itutil.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itutil.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itutil.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itutil.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/itutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/itutil.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/itutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/jacoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/jacoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/jacoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/jacoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/jacoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/jacoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/jacoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/jacoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/jamotest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/jamotest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/jamotest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/jamotest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/jamotest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/jamotest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/jamotest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/jamotest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/lcukocol.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/loctest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/loctest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/loctest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/loctest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/loctest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/loctest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/loctest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/loctest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/miscdtfm.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/mnkytst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/msfmrgts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmapts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/nmfmtrt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/normconf.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/normconf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/normconf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/normconf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/normconf.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/normconf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/normconf.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/normconf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nptrans.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/nptrans.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nptrans.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/nptrans.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nptrans.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/nptrans.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/nptrans.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/nptrans.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/numfmtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/numrgts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/numrgts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/numrgts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/numrgts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/numrgts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/numrgts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/numrgts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/numrgts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/pptest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/pptest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/pptest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/pptest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/pptest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/pptest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/pptest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/pptest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/punyref.c b/lib/3rdparty/icu4ros/icu/source/test/intltest/punyref.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/punyref.c rename to lib/3rdparty/icu4ros/icu/source/test/intltest/punyref.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/punyref.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/punyref.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/punyref.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/punyref.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/rbbiapts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/rbbitst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/regcoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/regcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/regcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/regcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/regcoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/regcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/regcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/regcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/regextst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/regextst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/regextst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/regextst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/regextst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/regextst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/regextst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/regextst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/reptest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/reptest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/reptest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/reptest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/reptest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/reptest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/reptest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/reptest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/restest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/restest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/restest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/restest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/restest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/restest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/restest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/restest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/restsnew.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/restsnew.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/restsnew.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/restsnew.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/restsnew.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/restsnew.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/restsnew.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/restsnew.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/rndmcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/sdtfmtts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/sfwdchit.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/srchtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/srchtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/srchtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/srchtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/srchtest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/srchtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/srchtest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/srchtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/strcase.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/strcase.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/strcase.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/strcase.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/strtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/strtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/strtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/strtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/strtest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/strtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/strtest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/strtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/svccoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/svccoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/svccoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/svccoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/svccoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/svccoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/svccoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/svccoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tchcfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testidn.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/testidn.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testidn.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/testidn.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testidna.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/testidna.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testidna.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/testidna.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testidna.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/testidna.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testidna.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/testidna.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testutil.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/testutil.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testutil.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/testutil.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testutil.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/testutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/testutil.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/testutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/textfile.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/textfile.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/textfile.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/textfile.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/textfile.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/textfile.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/textfile.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/textfile.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tfsmalls.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/thcoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/thcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/thcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/thcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/thcoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/thcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/thcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/thcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tmsgfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tokiter.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tokiter.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tokiter.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tokiter.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tokiter.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tokiter.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tokiter.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tokiter.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transapi.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/transapi.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transapi.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/transapi.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transapi.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/transapi.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transapi.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/transapi.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transrt.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/transrt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transrt.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/transrt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transrt.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/transrt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transrt.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/transrt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transtst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/transtst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transtst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/transtst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transtst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/transtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/transtst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/transtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/trcoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/trcoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/trcoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/trcoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/trcoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/trcoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/trcoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/trcoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/trnserr.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/trnserr.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/trnserr.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/trnserr.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/trnserr.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/trnserr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/trnserr.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/trnserr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tscoll.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tscoll.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tscoll.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tscoll.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tscoll.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tscoll.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tscoll.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tscoll.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdate.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdate.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdate.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsdate.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdate.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdate.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdate.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsdate.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsdcfmsy.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsdtfmsy.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsmthred.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsnmfmt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsputil.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsputil.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsputil.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsputil.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsputil.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tsputil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tsputil.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tsputil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tstnorm.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnrapi.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnrapi.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tstnrapi.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tstnrapi.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzbdtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzfmttst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzoffloc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzregts.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzregts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzregts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzregts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzregts.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzregts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzregts.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzregts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tzrulets.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tztest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/tztest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tztest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tztest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tztest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/tztest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/tztest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/tztest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ucaconf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ucdtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/uobjtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/usettest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/usettest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/usettest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/usettest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/usettest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/usettest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/usettest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/usettest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/ustrtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/utxttest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/utxttest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/utxttest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/utxttest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/utxttest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/utxttest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/utxttest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/utxttest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/uvectest.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/uvectest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/uvectest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/uvectest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/uvectest.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/uvectest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/uvectest.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/uvectest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/v32test.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/v32test.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/v32test.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/v32test.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/v32test.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/v32test.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/v32test.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/v32test.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/wbnf.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/wbnf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/wbnf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/wbnf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/wbnf.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/wbnf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/wbnf.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/wbnf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/windttst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/windttst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/windttst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/windttst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/windttst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/windttst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/windttst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/windttst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/winnmtst.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/winutil.cpp b/lib/3rdparty/icu4ros/icu/source/test/intltest/winutil.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/winutil.cpp rename to lib/3rdparty/icu4ros/icu/source/test/intltest/winutil.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/winutil.h b/lib/3rdparty/icu4ros/icu/source/test/intltest/winutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/intltest/winutil.h rename to lib/3rdparty/icu4ros/icu/source/test/intltest/winutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/iotest/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/iotest/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/filetst.c b/lib/3rdparty/icu4ros/icu/source/test/iotest/filetst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/filetst.c rename to lib/3rdparty/icu4ros/icu/source/test/iotest/filetst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.cpp b/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.h b/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.h rename to lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.vcproj b/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/iotest/iotest.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/stream.cpp b/lib/3rdparty/icu4ros/icu/source/test/iotest/stream.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/stream.cpp rename to lib/3rdparty/icu4ros/icu/source/test/iotest/stream.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/strtst.c b/lib/3rdparty/icu4ros/icu/source/test/iotest/strtst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/strtst.c rename to lib/3rdparty/icu4ros/icu/source/test/iotest/strtst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/trnstst.c b/lib/3rdparty/icu4ros/icu/source/test/iotest/trnstst.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/iotest/trnstst.c rename to lib/3rdparty/icu4ros/icu/source/test/iotest/trnstst.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/FontObject.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/FontObject.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/FontObject.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/FontObject.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/FontObject.h b/lib/3rdparty/icu4ros/icu/source/test/letest/FontObject.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/FontObject.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/FontObject.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.h b/lib/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/FontTableCache.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/letest/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/letest/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.h b/lib/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/PortableFontInstance.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.h b/lib/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/SimpleFontInstance.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cfonts.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/cfonts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cfonts.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/cfonts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cfonts.h b/lib/3rdparty/icu4ros/icu/source/test/letest/cfonts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cfonts.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/cfonts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.c b/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.c rename to lib/3rdparty/icu4ros/icu/source/test/letest/cletest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.sln b/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.sln rename to lib/3rdparty/icu4ros/icu/source/test/letest/cletest.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.vcproj b/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cletest.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/letest/cletest.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cmaps.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/cmaps.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cmaps.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/cmaps.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cmaps.h b/lib/3rdparty/icu4ros/icu/source/test/letest/cmaps.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/cmaps.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/cmaps.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/gendata.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.sln b/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.sln rename to lib/3rdparty/icu4ros/icu/source/test/letest/gendata.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.vcproj b/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/letest/gendata.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.xml b/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/gendata.xml rename to lib/3rdparty/icu4ros/icu/source/test/letest/gendata.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letest.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/letest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/letest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letest.h b/lib/3rdparty/icu4ros/icu/source/test/letest/letest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letest.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/letest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letest.sln b/lib/3rdparty/icu4ros/icu/source/test/letest/letest.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letest.sln rename to lib/3rdparty/icu4ros/icu/source/test/letest/letest.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letest.vcproj b/lib/3rdparty/icu4ros/icu/source/test/letest/letest.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letest.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/letest/letest.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letsutil.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/letsutil.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letsutil.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/letsutil.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letsutil.h b/lib/3rdparty/icu4ros/icu/source/test/letest/letsutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/letsutil.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/letsutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/readme.html b/lib/3rdparty/icu4ros/icu/source/test/letest/readme.html similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/readme.html rename to lib/3rdparty/icu4ros/icu/source/test/letest/readme.html diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/sfnt.h b/lib/3rdparty/icu4ros/icu/source/test/letest/sfnt.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/sfnt.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/sfnt.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/testdata.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/testdata.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/testdata.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/testdata.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/xmlreader.cpp b/lib/3rdparty/icu4ros/icu/source/test/letest/xmlreader.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/xmlreader.cpp rename to lib/3rdparty/icu4ros/icu/source/test/letest/xmlreader.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/letest/xmlreader.h b/lib/3rdparty/icu4ros/icu/source/test/letest/xmlreader.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/letest/xmlreader.h rename to lib/3rdparty/icu4ros/icu/source/test/letest/xmlreader.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf_r.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf_r.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf_r.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/charperf/CharPerf_r.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/charperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.h b/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.h rename to lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/charperf/charperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/CollPerf.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/CollPerf.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/CollPerf.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/collperf/CollPerf.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/collperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/collperf/collperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/ConvPerf_r.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/ConvPerf_r.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/ConvPerf_r.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/convperf/ConvPerf_r.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/convperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.h b/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.h rename to lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_ansi.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_ansi.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_ansi.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_ansi.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_iml.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_iml.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_iml.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/convperf/convperf_iml.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/data.h b/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/data.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/convperf/data.h rename to lib/3rdparty/icu4ros/icu/source/test/perf/convperf/data.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/normperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf_r.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf_r.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf_r.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/normperf/NormPerf_r.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.h b/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.h rename to lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/normperf/normperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perf.sln b/lib/3rdparty/icu4ros/icu/source/test/perf/perf.sln similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perf.sln rename to lib/3rdparty/icu4ros/icu/source/test/perf/perf.sln diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Dataset.pm b/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Dataset.pm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Dataset.pm rename to lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Dataset.pm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Format.pm b/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Format.pm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Format.pm rename to lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Format.pm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Output.pm b/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Output.pm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Output.pm rename to lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/Output.pm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/PerfFramework.pm b/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/PerfFramework.pm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/PerfFramework.pm rename to lib/3rdparty/icu4ros/icu/source/test/perf/perldriver/PerfFramework.pm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf_r.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf_r.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf_r.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/UBrkPerf_r.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.dsp b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.dsp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.dsp rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.dsp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.h b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.h rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf20.dsp b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf20.dsp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf20.dsp rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperf20.dsp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.dsp b/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.dsp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.dsp rename to lib/3rdparty/icu4ros/icu/source/test/perf/ubrkperf/ubrkperfold.dsp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/bitset.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/bitset.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/bitset.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/bitset.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.bat b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.bat similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.bat rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.bat diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.sh b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.sh similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.sh rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/contperf.sh diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.bat b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.bat similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.bat rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.bat diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.sh b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.sh similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.sh rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span16perf.sh diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.bat b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.bat similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.bat rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.bat diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.sh b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.sh similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.sh rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/span8perf.sh diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/trieset.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/trieset.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/trieset.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/trieset.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/unicont.h b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/unicont.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/unicont.h rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/draft/unicont.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/unisetperf/unisetperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/UsetPerf.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/UsetPerf.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/UsetPerf.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/UsetPerf.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.h b/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.h rename to lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/bitset.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/usetperf/usetperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf_r.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf_r.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf_r.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/StringPerf_r.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.h b/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.h rename to lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/ustrperf/stringperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/UtfPerf.pl b/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/UtfPerf.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/UtfPerf.pl rename to lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/UtfPerf.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.cpp b/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.cpp rename to lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.vcproj b/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.vcproj rename to lib/3rdparty/icu4ros/icu/source/test/perf/utfperf/utfperf.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_SHIFTED_STUB.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_SHIFTED_STUB.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_SHIFTED_STUB.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/CollationTest_SHIFTED_STUB.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/DataDrivenCollationTest.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/DataDrivenCollationTest.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/DataDrivenCollationTest.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/DataDrivenCollationTest.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/GraphemeBreakTest.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/GraphemeBreakTest.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/GraphemeBreakTest.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/GraphemeBreakTest.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/GraphemeClusterBreakTest.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/GraphemeClusterBreakTest.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/GraphemeClusterBreakTest.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/GraphemeClusterBreakTest.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/testdata/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/testdata/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/NormalizationTest-3.2.0.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/NormalizationTest-3.2.0.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/NormalizationTest-3.2.0.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/NormalizationTest-3.2.0.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/NumberFormatTestCases.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/NumberFormatTestCases.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/NumberFormatTestCases.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/NumberFormatTestCases.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/SentenceBreakTest.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/SentenceBreakTest.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/SentenceBreakTest.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/SentenceBreakTest.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/TestFont1.otf b/lib/3rdparty/icu4ros/icu/source/test/testdata/TestFont1.otf similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/TestFont1.otf rename to lib/3rdparty/icu4ros/icu/source/test/testdata/TestFont1.otf diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/WordBreakTest.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/WordBreakTest.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/WordBreakTest.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/WordBreakTest.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/calendar.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/calendar.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/calendar.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/calendar.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/casing.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/casing.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/casing.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/casing.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/conversion.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/conversion.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/conversion.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/conversion.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/csdetest.xml b/lib/3rdparty/icu4ros/icu/source/test/testdata/csdetest.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/csdetest.xml rename to lib/3rdparty/icu4ros/icu/source/test/testdata/csdetest.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/default.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/default.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/default.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/default.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/format.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/format.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/format.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/format.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/ibm9027.ucm b/lib/3rdparty/icu4ros/icu/source/test/testdata/ibm9027.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/ibm9027.ucm rename to lib/3rdparty/icu4ros/icu/source/test/testdata/ibm9027.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/icu26_testtypes.res b/lib/3rdparty/icu4ros/icu/source/test/testdata/icu26_testtypes.res similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/icu26_testtypes.res rename to lib/3rdparty/icu4ros/icu/source/test/testdata/icu26_testtypes.res diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/icu26e_testtypes.res b/lib/3rdparty/icu4ros/icu/source/test/testdata/icu26e_testtypes.res similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/icu26e_testtypes.res rename to lib/3rdparty/icu4ros/icu/source/test/testdata/icu26e_testtypes.res diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/icuio.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/icuio.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/icuio.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/icuio.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/idna_conf.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/idna_conf.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/idna_conf.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/idna_conf.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/idna_rules.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/idna_rules.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/idna_rules.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/idna_rules.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/importtest.bin b/lib/3rdparty/icu4ros/icu/source/test/testdata/importtest.bin similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/importtest.bin rename to lib/3rdparty/icu4ros/icu/source/test/testdata/importtest.bin diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/iscii.bin b/lib/3rdparty/icu4ros/icu/source/test/testdata/iscii.bin similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/iscii.bin rename to lib/3rdparty/icu4ros/icu/source/test/testdata/iscii.bin diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/letest.xml b/lib/3rdparty/icu4ros/icu/source/test/testdata/letest.xml similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/letest.xml rename to lib/3rdparty/icu4ros/icu/source/test/testdata/letest.xml diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/mc.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/mc.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/mc.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/mc.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cis_prep.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cis_prep.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cis_prep.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cis_prep.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_ci.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_ci.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_ci.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_ci.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_cs.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_cs.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_cs.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_cs_prep_cs.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_p.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_p.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_p.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_p.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_s.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_s.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_s.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/nfs4_mixed_prep_s.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/pkgdata.inc.in b/lib/3rdparty/icu4ros/icu/source/test/testdata/pkgdata.inc.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/pkgdata.inc.in rename to lib/3rdparty/icu4ros/icu/source/test/testdata/pkgdata.inc.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/ra.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/ra.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/ra.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/ra.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/ra.xlf b/lib/3rdparty/icu4ros/icu/source/test/testdata/ra.xlf similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/ra.xlf rename to lib/3rdparty/icu4ros/icu/source/test/testdata/ra.xlf diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/rbbitst.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/rbbitst.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/rbbitst.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/rbbitst.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/re_tests.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/re_tests.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/re_tests.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/re_tests.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/readme.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/readme.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/regextst.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/regextst.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/regextst.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/regextst.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/riwords.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/riwords.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/riwords.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/riwords.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/root.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/root.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/root.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/root.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/sh.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/sh.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/sh.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/sh.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/sh_YU.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/sh_YU.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/sh_YU.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/sh_YU.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/structLocale.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/structLocale.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/structLocale.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/structLocale.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/te.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/te.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/te.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/te.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/te_IN.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/te_IN.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/te_IN.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/te_IN.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/te_IN_REVISED.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/te_IN_REVISED.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/te_IN_REVISED.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/te_IN_REVISED.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/test1.ucm b/lib/3rdparty/icu4ros/icu/source/test/testdata/test1.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/test1.ucm rename to lib/3rdparty/icu4ros/icu/source/test/testdata/test1.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/test3.ucm b/lib/3rdparty/icu4ros/icu/source/test/testdata/test3.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/test3.ucm rename to lib/3rdparty/icu4ros/icu/source/test/testdata/test3.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/test4.ucm b/lib/3rdparty/icu4ros/icu/source/test/testdata/test4.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/test4.ucm rename to lib/3rdparty/icu4ros/icu/source/test/testdata/test4.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/test4x.ucm b/lib/3rdparty/icu4ros/icu/source/test/testdata/test4x.ucm similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/test4x.ucm rename to lib/3rdparty/icu4ros/icu/source/test/testdata/test4x.ucm diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/testaliases.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/testaliases.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/testaliases.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/testaliases.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/testdata.mak b/lib/3rdparty/icu4ros/icu/source/test/testdata/testdata.mak similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/testdata.mak rename to lib/3rdparty/icu4ros/icu/source/test/testdata/testdata.mak diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/testempty.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/testempty.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/testempty.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/testempty.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/testtypes.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/testtypes.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/testtypes.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/testtypes.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/translit_rules.txt b/lib/3rdparty/icu4ros/icu/source/test/testdata/translit_rules.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/translit_rules.txt rename to lib/3rdparty/icu4ros/icu/source/test/testdata/translit_rules.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/tstfiles.mk b/lib/3rdparty/icu4ros/icu/source/test/testdata/tstfiles.mk similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/tstfiles.mk rename to lib/3rdparty/icu4ros/icu/source/test/testdata/tstfiles.mk diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/uni-text.bin b/lib/3rdparty/icu4ros/icu/source/test/testdata/uni-text.bin similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testdata/uni-text.bin rename to lib/3rdparty/icu4ros/icu/source/test/testdata/uni-text.bin diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testmap/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/testmap/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testmap/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/testmap/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testmap/testmap.c b/lib/3rdparty/icu4ros/icu/source/test/testmap/testmap.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testmap/testmap.c rename to lib/3rdparty/icu4ros/icu/source/test/testmap/testmap.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/testmap/testmap.dsp b/lib/3rdparty/icu4ros/icu/source/test/testmap/testmap.dsp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/testmap/testmap.dsp rename to lib/3rdparty/icu4ros/icu/source/test/testmap/testmap.dsp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/thaitest/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/thaitest/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/thaitest/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/thaitest/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/thaitest/space.txt b/lib/3rdparty/icu4ros/icu/source/test/thaitest/space.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/thaitest/space.txt rename to lib/3rdparty/icu4ros/icu/source/test/thaitest/space.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.cpp b/lib/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.dsp b/lib/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.dsp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.dsp rename to lib/3rdparty/icu4ros/icu/source/test/thaitest/thaitest.dsp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/Makefile.in b/lib/3rdparty/icu4ros/icu/source/test/threadtest/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/test/threadtest/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/converttest.cpp b/lib/3rdparty/icu4ros/icu/source/test/threadtest/converttest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/converttest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/threadtest/converttest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/stringtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/threadtest/stringtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/stringtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/threadtest/stringtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.cpp b/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.cpp rename to lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsp b/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsp rename to lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsw b/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsw similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsw rename to lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.dsw diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.h b/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.h rename to lib/3rdparty/icu4ros/icu/source/test/threadtest/threadtest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyscan.pl b/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyscan.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyscan.pl rename to lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyscan.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpysearch.pl b/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpysearch.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpysearch.pl rename to lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpysearch.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyskip.txt b/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyskip.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyskip.txt rename to lib/3rdparty/icu4ros/icu/source/tools/cpysearch/cpyskip.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/readme.txt b/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/cpysearch/readme.txt rename to lib/3rdparty/icu4ros/icu/source/tools/cpysearch/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/ctest.c b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/ctest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/ctest.c rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/ctest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/ctestfw.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/ctestfw.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/ctestfw.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/ctestfw.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/datamap.cpp b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/datamap.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/datamap.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/datamap.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/dbgutil.cpp b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/dbgutil.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/dbgutil.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/dbgutil.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/testdata.cpp b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/testdata.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/testdata.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/testdata.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/tstdtmod.cpp b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/tstdtmod.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/tstdtmod.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/tstdtmod.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/udbgutil.cpp b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/udbgutil.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/udbgutil.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/udbgutil.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/ctest.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/ctest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/ctest.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/ctest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/datamap.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/datamap.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/datamap.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/datamap.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/dbgutil.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/dbgutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/dbgutil.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/dbgutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testdata.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testdata.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testdata.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testdata.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testlog.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testlog.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testlog.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testlog.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testtype.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testtype.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testtype.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/testtype.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/tstdtmod.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/tstdtmod.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/tstdtmod.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/tstdtmod.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/udbgutil.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/udbgutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/udbgutil.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/udbgutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/uperf.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/uperf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/uperf.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/uperf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/utimer.h b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/utimer.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/utimer.h rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/unicode/utimer.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/uperf.cpp b/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/uperf.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/ctestfw/uperf.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/ctestfw/uperf.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/dumpce/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/dumpce/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/dumpce/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/dumpce/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.cpp b/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsp b/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsp rename to lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsw b/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsw similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsw rename to lib/3rdparty/icu4ros/icu/source/tools/dumpce/dumpce.dsw diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/genbidi/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/genbidi/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.c b/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.c rename to lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.h b/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.h rename to lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genbidi/genbidi.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/store.c b/lib/3rdparty/icu4ros/icu/source/tools/genbidi/store.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbidi/store.c rename to lib/3rdparty/icu4ros/icu/source/tools/genbidi/store.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbrk/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/genbrk/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbrk/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/genbrk/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.1.in b/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.1.in rename to lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.cpp b/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genbrk/genbrk.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/gencase/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/gencase/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.c b/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.c rename to lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.h b/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.h rename to lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/gencase/gencase.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/store.c b/lib/3rdparty/icu4ros/icu/source/tools/gencase/store.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencase/store.c rename to lib/3rdparty/icu4ros/icu/source/tools/gencase/store.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genccode/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/genccode/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genccode/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/genccode/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.8.in b/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.8.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.8.in rename to lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.8.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.c b/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.c rename to lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genccode/genccode.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencmn/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/gencmn/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencmn/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/gencmn/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.8.in b/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.8.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.8.in rename to lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.8.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.c b/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.c rename to lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/gencmn/gencmn.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencnval/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/gencnval/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencnval/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/gencnval/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.1.in b/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.1.in rename to lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.c b/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.c rename to lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/gencnval/gencnval.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genctd/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/genctd/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genctd/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/genctd/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.1.in b/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.1.in rename to lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.cpp b/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genctd/genctd.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gendraft/exclude.txt b/lib/3rdparty/icu4ros/icu/source/tools/gendraft/exclude.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gendraft/exclude.txt rename to lib/3rdparty/icu4ros/icu/source/tools/gendraft/exclude.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gendraft/genheaders.pl b/lib/3rdparty/icu4ros/icu/source/tools/gendraft/genheaders.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gendraft/genheaders.pl rename to lib/3rdparty/icu4ros/icu/source/tools/gendraft/genheaders.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gennames/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/gennames/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gennames/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/gennames/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gennames/gennames.c b/lib/3rdparty/icu4ros/icu/source/tools/gennames/gennames.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gennames/gennames.c rename to lib/3rdparty/icu4ros/icu/source/tools/gennames/gennames.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gennames/gennames.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/gennames/gennames.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gennames/gennames.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/gennames/gennames.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/gennorm/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/gennorm/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.c b/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.c rename to lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.h b/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.h rename to lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/gennorm/gennorm.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/store.c b/lib/3rdparty/icu4ros/icu/source/tools/gennorm/store.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gennorm/store.c rename to lib/3rdparty/icu4ros/icu/source/tools/gennorm/store.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/genpname/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/genpname/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyAliases.txt b/lib/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyAliases.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyAliases.txt rename to lib/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyAliases.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyValueAliases.txt b/lib/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyValueAliases.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyValueAliases.txt rename to lib/3rdparty/icu4ros/icu/source/tools/genpname/SyntheticPropertyValueAliases.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/data.h b/lib/3rdparty/icu4ros/icu/source/tools/genpname/data.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/data.h rename to lib/3rdparty/icu4ros/icu/source/tools/genpname/data.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/genpname.cpp b/lib/3rdparty/icu4ros/icu/source/tools/genpname/genpname.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/genpname.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/genpname/genpname.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/genpname.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genpname/genpname.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/genpname.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genpname/genpname.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/gensvpa.pl b/lib/3rdparty/icu4ros/icu/source/tools/genpname/gensvpa.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/gensvpa.pl rename to lib/3rdparty/icu4ros/icu/source/tools/genpname/gensvpa.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/preparse.pl b/lib/3rdparty/icu4ros/icu/source/tools/genpname/preparse.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genpname/preparse.pl rename to lib/3rdparty/icu4ros/icu/source/tools/genpname/preparse.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/genprops/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.c b/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.c rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.h b/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.h rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/genprops.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdmerge.c b/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdmerge.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdmerge.c rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdmerge.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.c b/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.c rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.pl b/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.pl rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/misc/ucdstrip.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/props2.c b/lib/3rdparty/icu4ros/icu/source/tools/genprops/props2.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/props2.c rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/props2.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/store.c b/lib/3rdparty/icu4ros/icu/source/tools/genprops/store.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genprops/store.c rename to lib/3rdparty/icu4ros/icu/source/tools/genprops/store.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/genrb/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.1.in b/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.1.in rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/derb.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/errmsg.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/gendtjar.pl b/lib/3rdparty/icu4ros/icu/source/tools/genrb/gendtjar.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/gendtjar.pl rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/gendtjar.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.1.in b/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.1.in rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/genrb.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/parse.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/parse.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/parse.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/parse.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/parse.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/parse.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/parse.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/parse.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.cpp b/lib/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/prscmnts.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/rbutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/read.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/read.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/read.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/read.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/read.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/read.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/read.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/read.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/reslist.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/reslist.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/reslist.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/reslist.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/reslist.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/reslist.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/reslist.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/reslist.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/rle.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/rle.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/rle.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/rle.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/rle.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/rle.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/rle.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/rle.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/ustr.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/ustr.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/ustr.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/ustr.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/ustr.h b/lib/3rdparty/icu4ros/icu/source/tools/genrb/ustr.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/ustr.h rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/ustr.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/wrtjava.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/wrtjava.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/wrtjava.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/wrtjava.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/wrtxml.c b/lib/3rdparty/icu4ros/icu/source/tools/genrb/wrtxml.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genrb/wrtxml.c rename to lib/3rdparty/icu4ros/icu/source/tools/genrb/wrtxml.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genren/Makefile b/lib/3rdparty/icu4ros/icu/source/tools/genren/Makefile similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genren/Makefile rename to lib/3rdparty/icu4ros/icu/source/tools/genren/Makefile diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genren/README b/lib/3rdparty/icu4ros/icu/source/tools/genren/README similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genren/README rename to lib/3rdparty/icu4ros/icu/source/tools/genren/README diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genren/genren.pl b/lib/3rdparty/icu4ros/icu/source/tools/genren/genren.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genren/genren.pl rename to lib/3rdparty/icu4ros/icu/source/tools/genren/genren.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/gensprep/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/gensprep/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/filterRFC3454.pl b/lib/3rdparty/icu4ros/icu/source/tools/gensprep/filterRFC3454.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/filterRFC3454.pl rename to lib/3rdparty/icu4ros/icu/source/tools/gensprep/filterRFC3454.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.8.in b/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.8.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.8.in rename to lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.8.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.c b/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.c rename to lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.h b/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.h rename to lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/gensprep/gensprep.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/store.c b/lib/3rdparty/icu4ros/icu/source/tools/gensprep/store.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gensprep/store.c rename to lib/3rdparty/icu4ros/icu/source/tools/gensprep/store.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/gentest/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/gentest/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/genres32.c b/lib/3rdparty/icu4ros/icu/source/tools/gentest/genres32.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/genres32.c rename to lib/3rdparty/icu4ros/icu/source/tools/gentest/genres32.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.c b/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.c rename to lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.h b/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.h rename to lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/gentest/gentest.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/genuca/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/genuca/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.8.in b/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.8.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.8.in rename to lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.8.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.cpp b/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.h b/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.h rename to lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/genuca/genuca.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/icupkg/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/icupkg/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/icupkg/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/icupkg/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.8.in b/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.8.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.8.in rename to lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.8.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.cpp b/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/icupkg/icupkg.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/icuswap/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/icuswap/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/icuswap/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/icuswap/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.cpp b/lib/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/icuswap/icuswap.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/gencnvex.c b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/gencnvex.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/gencnvex.c rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/gencnvex.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.c b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.c rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.h b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.h rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/genmbcs.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.1.in b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.1.in rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.c b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.c rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.h b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.h rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/makeconv.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/ucnvstat.c b/lib/3rdparty/icu4ros/icu/source/tools/makeconv/ucnvstat.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/makeconv/ucnvstat.c rename to lib/3rdparty/icu4ros/icu/source/tools/makeconv/ucnvstat.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/memcheck/ICUMemCheck.pl b/lib/3rdparty/icu4ros/icu/source/tools/memcheck/ICUMemCheck.pl similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/memcheck/ICUMemCheck.pl rename to lib/3rdparty/icu4ros/icu/source/tools/memcheck/ICUMemCheck.pl diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/cmnmode.c b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/cmnmode.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/cmnmode.c rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/cmnmode.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/dllmode.c b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/dllmode.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/dllmode.c rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/dllmode.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/filemode.c b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/filemode.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/filemode.c rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/filemode.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/make.c b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/make.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/make.c rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/make.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/makefile.h b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/makefile.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/makefile.h rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/makefile.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.1.in b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.1.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.1.in rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.1.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.c b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.c rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgdata.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.c b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.c rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.h b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.h rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/pkgtypes.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/sttcmode.c b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/sttcmode.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/sttcmode.c rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/sttcmode.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/winmode.c b/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/winmode.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/pkgdata/winmode.c rename to lib/3rdparty/icu4ros/icu/source/tools/pkgdata/winmode.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/filestrm.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/package.cpp b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/package.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/package.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/package.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/package.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/package.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/package.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/package.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/pkg_imp.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/pkg_imp.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/pkg_imp.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/pkg_imp.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/pkgitems.cpp b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/pkgitems.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/pkgitems.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/pkgitems.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/propsvec.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.cpp b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/swapimpl.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/toolutil.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucbuf.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucm.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucmstate.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucmstate.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucmstate.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/ucmstate.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/unewdata.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/uoptions.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/uparse.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.c b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.c rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/writesrc.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.cpp b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.h b/lib/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.h rename to lib/3rdparty/icu4ros/icu/source/tools/toolutil/xmlparser.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/Makefile.in b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/Makefile.in rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/Makefile.in diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/asctime.c b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/asctime.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/asctime.c rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/asctime.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/ialloc.c b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/ialloc.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/ialloc.c rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/ialloc.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.cpp b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.vcproj b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.vcproj similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.vcproj rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzdump.vcproj diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzones b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzones similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzones rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/icuzones diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/localtime.c b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/localtime.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/localtime.c rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/localtime.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/private.h b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/private.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/private.h rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/private.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/readme.txt b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/readme.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/readme.txt rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/readme.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/scheck.c b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/scheck.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/scheck.c rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/scheck.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz.alias b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz.alias similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz.alias rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz.alias diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.cpp b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.cpp rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.cpp diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.h b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.h rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/tz2icu.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tzfile.h b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tzfile.h similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tzfile.h rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/tzfile.h diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tzselect.ksh b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tzselect.ksh similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/tzselect.ksh rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/tzselect.ksh diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/zdump.c b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/zdump.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/zdump.c rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/zdump.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/zic.c b/lib/3rdparty/icu4ros/icu/source/tools/tzcode/zic.c similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/source/tools/tzcode/zic.c rename to lib/3rdparty/icu4ros/icu/source/tools/tzcode/zic.c diff --git a/reactos/lib/3rdparty/icu4ros/icu/unicode-license.txt b/lib/3rdparty/icu4ros/icu/unicode-license.txt similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu/unicode-license.txt rename to lib/3rdparty/icu4ros/icu/unicode-license.txt diff --git a/reactos/lib/3rdparty/icu4ros/icu4ros.rbuild b/lib/3rdparty/icu4ros/icu4ros.rbuild similarity index 100% rename from reactos/lib/3rdparty/icu4ros/icu4ros.rbuild rename to lib/3rdparty/icu4ros/icu4ros.rbuild diff --git a/reactos/lib/3rdparty/icu4ros/stubs.cpp b/lib/3rdparty/icu4ros/stubs.cpp similarity index 100% rename from reactos/lib/3rdparty/icu4ros/stubs.cpp rename to lib/3rdparty/icu4ros/stubs.cpp diff --git a/reactos/lib/3rdparty/libwine/config.c b/lib/3rdparty/libwine/config.c similarity index 100% rename from reactos/lib/3rdparty/libwine/config.c rename to lib/3rdparty/libwine/config.c diff --git a/reactos/lib/3rdparty/libwine/debug.c b/lib/3rdparty/libwine/debug.c similarity index 100% rename from reactos/lib/3rdparty/libwine/debug.c rename to lib/3rdparty/libwine/debug.c diff --git a/reactos/lib/3rdparty/libwine/debug_ros.c b/lib/3rdparty/libwine/debug_ros.c similarity index 100% rename from reactos/lib/3rdparty/libwine/debug_ros.c rename to lib/3rdparty/libwine/debug_ros.c diff --git a/reactos/lib/3rdparty/libwine/libwine.rbuild b/lib/3rdparty/libwine/libwine.rbuild similarity index 100% rename from reactos/lib/3rdparty/libwine/libwine.rbuild rename to lib/3rdparty/libwine/libwine.rbuild diff --git a/reactos/lib/3rdparty/libwine/string.c b/lib/3rdparty/libwine/string.c similarity index 100% rename from reactos/lib/3rdparty/libwine/string.c rename to lib/3rdparty/libwine/string.c diff --git a/reactos/lib/3rdparty/libxml2/AUTHORS b/lib/3rdparty/libxml2/AUTHORS similarity index 100% rename from reactos/lib/3rdparty/libxml2/AUTHORS rename to lib/3rdparty/libxml2/AUTHORS diff --git a/reactos/lib/3rdparty/libxml2/COPYING b/lib/3rdparty/libxml2/COPYING similarity index 100% rename from reactos/lib/3rdparty/libxml2/COPYING rename to lib/3rdparty/libxml2/COPYING diff --git a/reactos/lib/3rdparty/libxml2/ChangeLog b/lib/3rdparty/libxml2/ChangeLog similarity index 100% rename from reactos/lib/3rdparty/libxml2/ChangeLog rename to lib/3rdparty/libxml2/ChangeLog diff --git a/reactos/lib/3rdparty/libxml2/Copyright b/lib/3rdparty/libxml2/Copyright similarity index 100% rename from reactos/lib/3rdparty/libxml2/Copyright rename to lib/3rdparty/libxml2/Copyright diff --git a/reactos/lib/3rdparty/libxml2/DOCBparser.c b/lib/3rdparty/libxml2/DOCBparser.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/DOCBparser.c rename to lib/3rdparty/libxml2/DOCBparser.c diff --git a/reactos/lib/3rdparty/libxml2/HTMLparser.c b/lib/3rdparty/libxml2/HTMLparser.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/HTMLparser.c rename to lib/3rdparty/libxml2/HTMLparser.c diff --git a/reactos/lib/3rdparty/libxml2/HTMLtree.c b/lib/3rdparty/libxml2/HTMLtree.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/HTMLtree.c rename to lib/3rdparty/libxml2/HTMLtree.c diff --git a/reactos/lib/3rdparty/libxml2/INSTALL b/lib/3rdparty/libxml2/INSTALL similarity index 100% rename from reactos/lib/3rdparty/libxml2/INSTALL rename to lib/3rdparty/libxml2/INSTALL diff --git a/reactos/lib/3rdparty/libxml2/Makefile.am b/lib/3rdparty/libxml2/Makefile.am similarity index 100% rename from reactos/lib/3rdparty/libxml2/Makefile.am rename to lib/3rdparty/libxml2/Makefile.am diff --git a/reactos/lib/3rdparty/libxml2/Makefile.in b/lib/3rdparty/libxml2/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/Makefile.in rename to lib/3rdparty/libxml2/Makefile.in diff --git a/reactos/lib/3rdparty/libxml2/Makefile.tests b/lib/3rdparty/libxml2/Makefile.tests similarity index 100% rename from reactos/lib/3rdparty/libxml2/Makefile.tests rename to lib/3rdparty/libxml2/Makefile.tests diff --git a/reactos/lib/3rdparty/libxml2/NEWS b/lib/3rdparty/libxml2/NEWS similarity index 100% rename from reactos/lib/3rdparty/libxml2/NEWS rename to lib/3rdparty/libxml2/NEWS diff --git a/reactos/lib/3rdparty/libxml2/README b/lib/3rdparty/libxml2/README similarity index 100% rename from reactos/lib/3rdparty/libxml2/README rename to lib/3rdparty/libxml2/README diff --git a/reactos/lib/3rdparty/libxml2/README.tests b/lib/3rdparty/libxml2/README.tests similarity index 100% rename from reactos/lib/3rdparty/libxml2/README.tests rename to lib/3rdparty/libxml2/README.tests diff --git a/reactos/lib/3rdparty/libxml2/SAX.c b/lib/3rdparty/libxml2/SAX.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/SAX.c rename to lib/3rdparty/libxml2/SAX.c diff --git a/reactos/lib/3rdparty/libxml2/SAX2.c b/lib/3rdparty/libxml2/SAX2.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/SAX2.c rename to lib/3rdparty/libxml2/SAX2.c diff --git a/reactos/lib/3rdparty/libxml2/TODO b/lib/3rdparty/libxml2/TODO similarity index 100% rename from reactos/lib/3rdparty/libxml2/TODO rename to lib/3rdparty/libxml2/TODO diff --git a/reactos/lib/3rdparty/libxml2/TODO_SCHEMAS b/lib/3rdparty/libxml2/TODO_SCHEMAS similarity index 100% rename from reactos/lib/3rdparty/libxml2/TODO_SCHEMAS rename to lib/3rdparty/libxml2/TODO_SCHEMAS diff --git a/reactos/lib/3rdparty/libxml2/acconfig.h b/lib/3rdparty/libxml2/acconfig.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/acconfig.h rename to lib/3rdparty/libxml2/acconfig.h diff --git a/reactos/lib/3rdparty/libxml2/acinclude.m4 b/lib/3rdparty/libxml2/acinclude.m4 similarity index 100% rename from reactos/lib/3rdparty/libxml2/acinclude.m4 rename to lib/3rdparty/libxml2/acinclude.m4 diff --git a/reactos/lib/3rdparty/libxml2/aclocal.m4 b/lib/3rdparty/libxml2/aclocal.m4 similarity index 100% rename from reactos/lib/3rdparty/libxml2/aclocal.m4 rename to lib/3rdparty/libxml2/aclocal.m4 diff --git a/reactos/lib/3rdparty/libxml2/c14n.c b/lib/3rdparty/libxml2/c14n.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/c14n.c rename to lib/3rdparty/libxml2/c14n.c diff --git a/reactos/lib/3rdparty/libxml2/catalog.c b/lib/3rdparty/libxml2/catalog.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/catalog.c rename to lib/3rdparty/libxml2/catalog.c diff --git a/reactos/lib/3rdparty/libxml2/check-relaxng-test-suite.py b/lib/3rdparty/libxml2/check-relaxng-test-suite.py similarity index 100% rename from reactos/lib/3rdparty/libxml2/check-relaxng-test-suite.py rename to lib/3rdparty/libxml2/check-relaxng-test-suite.py diff --git a/reactos/lib/3rdparty/libxml2/check-relaxng-test-suite2.py b/lib/3rdparty/libxml2/check-relaxng-test-suite2.py similarity index 100% rename from reactos/lib/3rdparty/libxml2/check-relaxng-test-suite2.py rename to lib/3rdparty/libxml2/check-relaxng-test-suite2.py diff --git a/reactos/lib/3rdparty/libxml2/check-xinclude-test-suite.py b/lib/3rdparty/libxml2/check-xinclude-test-suite.py similarity index 100% rename from reactos/lib/3rdparty/libxml2/check-xinclude-test-suite.py rename to lib/3rdparty/libxml2/check-xinclude-test-suite.py diff --git a/reactos/lib/3rdparty/libxml2/check-xml-test-suite.py b/lib/3rdparty/libxml2/check-xml-test-suite.py similarity index 100% rename from reactos/lib/3rdparty/libxml2/check-xml-test-suite.py rename to lib/3rdparty/libxml2/check-xml-test-suite.py diff --git a/reactos/lib/3rdparty/libxml2/check-xsddata-test-suite.py b/lib/3rdparty/libxml2/check-xsddata-test-suite.py similarity index 100% rename from reactos/lib/3rdparty/libxml2/check-xsddata-test-suite.py rename to lib/3rdparty/libxml2/check-xsddata-test-suite.py diff --git a/reactos/lib/3rdparty/libxml2/chvalid.c b/lib/3rdparty/libxml2/chvalid.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/chvalid.c rename to lib/3rdparty/libxml2/chvalid.c diff --git a/reactos/lib/3rdparty/libxml2/config.guess b/lib/3rdparty/libxml2/config.guess similarity index 100% rename from reactos/lib/3rdparty/libxml2/config.guess rename to lib/3rdparty/libxml2/config.guess diff --git a/reactos/lib/3rdparty/libxml2/config.h b/lib/3rdparty/libxml2/config.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/config.h rename to lib/3rdparty/libxml2/config.h diff --git a/reactos/lib/3rdparty/libxml2/config.h.in b/lib/3rdparty/libxml2/config.h.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/config.h.in rename to lib/3rdparty/libxml2/config.h.in diff --git a/reactos/lib/3rdparty/libxml2/config.sub b/lib/3rdparty/libxml2/config.sub similarity index 100% rename from reactos/lib/3rdparty/libxml2/config.sub rename to lib/3rdparty/libxml2/config.sub diff --git a/reactos/lib/3rdparty/libxml2/configure b/lib/3rdparty/libxml2/configure similarity index 100% rename from reactos/lib/3rdparty/libxml2/configure rename to lib/3rdparty/libxml2/configure diff --git a/reactos/lib/3rdparty/libxml2/configure.in b/lib/3rdparty/libxml2/configure.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/configure.in rename to lib/3rdparty/libxml2/configure.in diff --git a/reactos/lib/3rdparty/libxml2/dbgen.pl b/lib/3rdparty/libxml2/dbgen.pl similarity index 100% rename from reactos/lib/3rdparty/libxml2/dbgen.pl rename to lib/3rdparty/libxml2/dbgen.pl diff --git a/reactos/lib/3rdparty/libxml2/dbgenattr.pl b/lib/3rdparty/libxml2/dbgenattr.pl similarity index 100% rename from reactos/lib/3rdparty/libxml2/dbgenattr.pl rename to lib/3rdparty/libxml2/dbgenattr.pl diff --git a/reactos/lib/3rdparty/libxml2/debugXML.c b/lib/3rdparty/libxml2/debugXML.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/debugXML.c rename to lib/3rdparty/libxml2/debugXML.c diff --git a/reactos/lib/3rdparty/libxml2/depcomp b/lib/3rdparty/libxml2/depcomp similarity index 100% rename from reactos/lib/3rdparty/libxml2/depcomp rename to lib/3rdparty/libxml2/depcomp diff --git a/reactos/lib/3rdparty/libxml2/dict.c b/lib/3rdparty/libxml2/dict.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/dict.c rename to lib/3rdparty/libxml2/dict.c diff --git a/reactos/lib/3rdparty/libxml2/elfgcchack.h b/lib/3rdparty/libxml2/elfgcchack.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/elfgcchack.h rename to lib/3rdparty/libxml2/elfgcchack.h diff --git a/reactos/lib/3rdparty/libxml2/encoding.c b/lib/3rdparty/libxml2/encoding.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/encoding.c rename to lib/3rdparty/libxml2/encoding.c diff --git a/reactos/lib/3rdparty/libxml2/entities.c b/lib/3rdparty/libxml2/entities.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/entities.c rename to lib/3rdparty/libxml2/entities.c diff --git a/reactos/lib/3rdparty/libxml2/error.c b/lib/3rdparty/libxml2/error.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/error.c rename to lib/3rdparty/libxml2/error.c diff --git a/reactos/lib/3rdparty/libxml2/genUnicode.py b/lib/3rdparty/libxml2/genUnicode.py similarity index 100% rename from reactos/lib/3rdparty/libxml2/genUnicode.py rename to lib/3rdparty/libxml2/genUnicode.py diff --git a/reactos/lib/3rdparty/libxml2/gentest.py b/lib/3rdparty/libxml2/gentest.py similarity index 100% rename from reactos/lib/3rdparty/libxml2/gentest.py rename to lib/3rdparty/libxml2/gentest.py diff --git a/reactos/lib/3rdparty/libxml2/globals.c b/lib/3rdparty/libxml2/globals.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/globals.c rename to lib/3rdparty/libxml2/globals.c diff --git a/reactos/lib/3rdparty/libxml2/hash.c b/lib/3rdparty/libxml2/hash.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/hash.c rename to lib/3rdparty/libxml2/hash.c diff --git a/reactos/lib/3rdparty/libxml2/include/Makefile.am b/lib/3rdparty/libxml2/include/Makefile.am similarity index 100% rename from reactos/lib/3rdparty/libxml2/include/Makefile.am rename to lib/3rdparty/libxml2/include/Makefile.am diff --git a/reactos/lib/3rdparty/libxml2/include/Makefile.in b/lib/3rdparty/libxml2/include/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/include/Makefile.in rename to lib/3rdparty/libxml2/include/Makefile.in diff --git a/reactos/lib/3rdparty/libxml2/include/win32config.h b/lib/3rdparty/libxml2/include/win32config.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/include/win32config.h rename to lib/3rdparty/libxml2/include/win32config.h diff --git a/reactos/lib/3rdparty/libxml2/include/wsockcompat.h b/lib/3rdparty/libxml2/include/wsockcompat.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/include/wsockcompat.h rename to lib/3rdparty/libxml2/include/wsockcompat.h diff --git a/reactos/lib/3rdparty/libxml2/install-sh b/lib/3rdparty/libxml2/install-sh similarity index 100% rename from reactos/lib/3rdparty/libxml2/install-sh rename to lib/3rdparty/libxml2/install-sh diff --git a/reactos/lib/3rdparty/libxml2/legacy.c b/lib/3rdparty/libxml2/legacy.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/legacy.c rename to lib/3rdparty/libxml2/legacy.c diff --git a/reactos/lib/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in b/lib/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in rename to lib/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in diff --git a/reactos/lib/3rdparty/libxml2/libxml-2.0.pc.in b/lib/3rdparty/libxml2/libxml-2.0.pc.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/libxml-2.0.pc.in rename to lib/3rdparty/libxml2/libxml-2.0.pc.in diff --git a/reactos/lib/3rdparty/libxml2/libxml.3 b/lib/3rdparty/libxml2/libxml.3 similarity index 100% rename from reactos/lib/3rdparty/libxml2/libxml.3 rename to lib/3rdparty/libxml2/libxml.3 diff --git a/reactos/lib/3rdparty/libxml2/libxml.h b/lib/3rdparty/libxml2/libxml.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/libxml.h rename to lib/3rdparty/libxml2/libxml.h diff --git a/reactos/lib/3rdparty/libxml2/libxml.m4 b/lib/3rdparty/libxml2/libxml.m4 similarity index 100% rename from reactos/lib/3rdparty/libxml2/libxml.m4 rename to lib/3rdparty/libxml2/libxml.m4 diff --git a/reactos/lib/3rdparty/libxml2/libxml.spec.in b/lib/3rdparty/libxml2/libxml.spec.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/libxml.spec.in rename to lib/3rdparty/libxml2/libxml.spec.in diff --git a/reactos/lib/3rdparty/libxml2/libxml2.rbuild b/lib/3rdparty/libxml2/libxml2.rbuild similarity index 100% rename from reactos/lib/3rdparty/libxml2/libxml2.rbuild rename to lib/3rdparty/libxml2/libxml2.rbuild diff --git a/reactos/lib/3rdparty/libxml2/libxml2.spec b/lib/3rdparty/libxml2/libxml2.spec similarity index 100% rename from reactos/lib/3rdparty/libxml2/libxml2.spec rename to lib/3rdparty/libxml2/libxml2.spec diff --git a/reactos/lib/3rdparty/libxml2/list.c b/lib/3rdparty/libxml2/list.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/list.c rename to lib/3rdparty/libxml2/list.c diff --git a/reactos/lib/3rdparty/libxml2/ltmain.sh b/lib/3rdparty/libxml2/ltmain.sh similarity index 100% rename from reactos/lib/3rdparty/libxml2/ltmain.sh rename to lib/3rdparty/libxml2/ltmain.sh diff --git a/reactos/lib/3rdparty/libxml2/missing b/lib/3rdparty/libxml2/missing similarity index 100% rename from reactos/lib/3rdparty/libxml2/missing rename to lib/3rdparty/libxml2/missing diff --git a/reactos/lib/3rdparty/libxml2/mkinstalldirs b/lib/3rdparty/libxml2/mkinstalldirs similarity index 100% rename from reactos/lib/3rdparty/libxml2/mkinstalldirs rename to lib/3rdparty/libxml2/mkinstalldirs diff --git a/reactos/lib/3rdparty/libxml2/nanoftp.c b/lib/3rdparty/libxml2/nanoftp.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/nanoftp.c rename to lib/3rdparty/libxml2/nanoftp.c diff --git a/reactos/lib/3rdparty/libxml2/nanohttp.c b/lib/3rdparty/libxml2/nanohttp.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/nanohttp.c rename to lib/3rdparty/libxml2/nanohttp.c diff --git a/reactos/lib/3rdparty/libxml2/parser.c b/lib/3rdparty/libxml2/parser.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/parser.c rename to lib/3rdparty/libxml2/parser.c diff --git a/reactos/lib/3rdparty/libxml2/parserInternals.c b/lib/3rdparty/libxml2/parserInternals.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/parserInternals.c rename to lib/3rdparty/libxml2/parserInternals.c diff --git a/reactos/lib/3rdparty/libxml2/pattern.c b/lib/3rdparty/libxml2/pattern.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/pattern.c rename to lib/3rdparty/libxml2/pattern.c diff --git a/reactos/lib/3rdparty/libxml2/regressions.py b/lib/3rdparty/libxml2/regressions.py similarity index 100% rename from reactos/lib/3rdparty/libxml2/regressions.py rename to lib/3rdparty/libxml2/regressions.py diff --git a/reactos/lib/3rdparty/libxml2/regressions.xml b/lib/3rdparty/libxml2/regressions.xml similarity index 100% rename from reactos/lib/3rdparty/libxml2/regressions.xml rename to lib/3rdparty/libxml2/regressions.xml diff --git a/reactos/lib/3rdparty/libxml2/relaxng.c b/lib/3rdparty/libxml2/relaxng.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/relaxng.c rename to lib/3rdparty/libxml2/relaxng.c diff --git a/reactos/lib/3rdparty/libxml2/runsuite.c b/lib/3rdparty/libxml2/runsuite.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/runsuite.c rename to lib/3rdparty/libxml2/runsuite.c diff --git a/reactos/lib/3rdparty/libxml2/runtest.c b/lib/3rdparty/libxml2/runtest.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/runtest.c rename to lib/3rdparty/libxml2/runtest.c diff --git a/reactos/lib/3rdparty/libxml2/runxmlconf.c b/lib/3rdparty/libxml2/runxmlconf.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/runxmlconf.c rename to lib/3rdparty/libxml2/runxmlconf.c diff --git a/reactos/lib/3rdparty/libxml2/schematron.c b/lib/3rdparty/libxml2/schematron.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/schematron.c rename to lib/3rdparty/libxml2/schematron.c diff --git a/reactos/lib/3rdparty/libxml2/testAutomata.c b/lib/3rdparty/libxml2/testAutomata.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testAutomata.c rename to lib/3rdparty/libxml2/testAutomata.c diff --git a/reactos/lib/3rdparty/libxml2/testC14N.c b/lib/3rdparty/libxml2/testC14N.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testC14N.c rename to lib/3rdparty/libxml2/testC14N.c diff --git a/reactos/lib/3rdparty/libxml2/testHTML.c b/lib/3rdparty/libxml2/testHTML.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testHTML.c rename to lib/3rdparty/libxml2/testHTML.c diff --git a/reactos/lib/3rdparty/libxml2/testModule.c b/lib/3rdparty/libxml2/testModule.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testModule.c rename to lib/3rdparty/libxml2/testModule.c diff --git a/reactos/lib/3rdparty/libxml2/testReader.c b/lib/3rdparty/libxml2/testReader.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testReader.c rename to lib/3rdparty/libxml2/testReader.c diff --git a/reactos/lib/3rdparty/libxml2/testRegexp.c b/lib/3rdparty/libxml2/testRegexp.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testRegexp.c rename to lib/3rdparty/libxml2/testRegexp.c diff --git a/reactos/lib/3rdparty/libxml2/testRelax.c b/lib/3rdparty/libxml2/testRelax.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testRelax.c rename to lib/3rdparty/libxml2/testRelax.c diff --git a/reactos/lib/3rdparty/libxml2/testSAX.c b/lib/3rdparty/libxml2/testSAX.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testSAX.c rename to lib/3rdparty/libxml2/testSAX.c diff --git a/reactos/lib/3rdparty/libxml2/testSchemas.c b/lib/3rdparty/libxml2/testSchemas.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testSchemas.c rename to lib/3rdparty/libxml2/testSchemas.c diff --git a/reactos/lib/3rdparty/libxml2/testThreads.c b/lib/3rdparty/libxml2/testThreads.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testThreads.c rename to lib/3rdparty/libxml2/testThreads.c diff --git a/reactos/lib/3rdparty/libxml2/testThreadsWin32.c b/lib/3rdparty/libxml2/testThreadsWin32.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testThreadsWin32.c rename to lib/3rdparty/libxml2/testThreadsWin32.c diff --git a/reactos/lib/3rdparty/libxml2/testURI.c b/lib/3rdparty/libxml2/testURI.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testURI.c rename to lib/3rdparty/libxml2/testURI.c diff --git a/reactos/lib/3rdparty/libxml2/testXPath.c b/lib/3rdparty/libxml2/testXPath.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testXPath.c rename to lib/3rdparty/libxml2/testXPath.c diff --git a/reactos/lib/3rdparty/libxml2/testapi.c b/lib/3rdparty/libxml2/testapi.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testapi.c rename to lib/3rdparty/libxml2/testapi.c diff --git a/reactos/lib/3rdparty/libxml2/testchar.c b/lib/3rdparty/libxml2/testchar.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testchar.c rename to lib/3rdparty/libxml2/testchar.c diff --git a/reactos/lib/3rdparty/libxml2/testdict.c b/lib/3rdparty/libxml2/testdict.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testdict.c rename to lib/3rdparty/libxml2/testdict.c diff --git a/reactos/lib/3rdparty/libxml2/testdso.c b/lib/3rdparty/libxml2/testdso.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testdso.c rename to lib/3rdparty/libxml2/testdso.c diff --git a/reactos/lib/3rdparty/libxml2/testrecurse.c b/lib/3rdparty/libxml2/testrecurse.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/testrecurse.c rename to lib/3rdparty/libxml2/testrecurse.c diff --git a/reactos/lib/3rdparty/libxml2/threads.c b/lib/3rdparty/libxml2/threads.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/threads.c rename to lib/3rdparty/libxml2/threads.c diff --git a/reactos/lib/3rdparty/libxml2/tree.c b/lib/3rdparty/libxml2/tree.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/tree.c rename to lib/3rdparty/libxml2/tree.c diff --git a/reactos/lib/3rdparty/libxml2/trio.c b/lib/3rdparty/libxml2/trio.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/trio.c rename to lib/3rdparty/libxml2/trio.c diff --git a/reactos/lib/3rdparty/libxml2/trio.h b/lib/3rdparty/libxml2/trio.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/trio.h rename to lib/3rdparty/libxml2/trio.h diff --git a/reactos/lib/3rdparty/libxml2/triodef.h b/lib/3rdparty/libxml2/triodef.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/triodef.h rename to lib/3rdparty/libxml2/triodef.h diff --git a/reactos/lib/3rdparty/libxml2/trionan.c b/lib/3rdparty/libxml2/trionan.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/trionan.c rename to lib/3rdparty/libxml2/trionan.c diff --git a/reactos/lib/3rdparty/libxml2/trionan.h b/lib/3rdparty/libxml2/trionan.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/trionan.h rename to lib/3rdparty/libxml2/trionan.h diff --git a/reactos/lib/3rdparty/libxml2/triop.h b/lib/3rdparty/libxml2/triop.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/triop.h rename to lib/3rdparty/libxml2/triop.h diff --git a/reactos/lib/3rdparty/libxml2/triostr.c b/lib/3rdparty/libxml2/triostr.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/triostr.c rename to lib/3rdparty/libxml2/triostr.c diff --git a/reactos/lib/3rdparty/libxml2/triostr.h b/lib/3rdparty/libxml2/triostr.h similarity index 100% rename from reactos/lib/3rdparty/libxml2/triostr.h rename to lib/3rdparty/libxml2/triostr.h diff --git a/reactos/lib/3rdparty/libxml2/uri.c b/lib/3rdparty/libxml2/uri.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/uri.c rename to lib/3rdparty/libxml2/uri.c diff --git a/reactos/lib/3rdparty/libxml2/valid.c b/lib/3rdparty/libxml2/valid.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/valid.c rename to lib/3rdparty/libxml2/valid.c diff --git a/reactos/lib/3rdparty/libxml2/xinclude.c b/lib/3rdparty/libxml2/xinclude.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xinclude.c rename to lib/3rdparty/libxml2/xinclude.c diff --git a/reactos/lib/3rdparty/libxml2/xlink.c b/lib/3rdparty/libxml2/xlink.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xlink.c rename to lib/3rdparty/libxml2/xlink.c diff --git a/reactos/lib/3rdparty/libxml2/xml2-config.1 b/lib/3rdparty/libxml2/xml2-config.1 similarity index 100% rename from reactos/lib/3rdparty/libxml2/xml2-config.1 rename to lib/3rdparty/libxml2/xml2-config.1 diff --git a/reactos/lib/3rdparty/libxml2/xml2-config.in b/lib/3rdparty/libxml2/xml2-config.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/xml2-config.in rename to lib/3rdparty/libxml2/xml2-config.in diff --git a/reactos/lib/3rdparty/libxml2/xml2Conf.sh.in b/lib/3rdparty/libxml2/xml2Conf.sh.in similarity index 100% rename from reactos/lib/3rdparty/libxml2/xml2Conf.sh.in rename to lib/3rdparty/libxml2/xml2Conf.sh.in diff --git a/reactos/lib/3rdparty/libxml2/xmlIO.c b/lib/3rdparty/libxml2/xmlIO.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlIO.c rename to lib/3rdparty/libxml2/xmlIO.c diff --git a/reactos/lib/3rdparty/libxml2/xmlcatalog.c b/lib/3rdparty/libxml2/xmlcatalog.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlcatalog.c rename to lib/3rdparty/libxml2/xmlcatalog.c diff --git a/reactos/lib/3rdparty/libxml2/xmllint.c b/lib/3rdparty/libxml2/xmllint.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmllint.c rename to lib/3rdparty/libxml2/xmllint.c diff --git a/reactos/lib/3rdparty/libxml2/xmlmemory.c b/lib/3rdparty/libxml2/xmlmemory.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlmemory.c rename to lib/3rdparty/libxml2/xmlmemory.c diff --git a/reactos/lib/3rdparty/libxml2/xmlmodule.c b/lib/3rdparty/libxml2/xmlmodule.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlmodule.c rename to lib/3rdparty/libxml2/xmlmodule.c diff --git a/reactos/lib/3rdparty/libxml2/xmlreader.c b/lib/3rdparty/libxml2/xmlreader.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlreader.c rename to lib/3rdparty/libxml2/xmlreader.c diff --git a/reactos/lib/3rdparty/libxml2/xmlregexp.c b/lib/3rdparty/libxml2/xmlregexp.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlregexp.c rename to lib/3rdparty/libxml2/xmlregexp.c diff --git a/reactos/lib/3rdparty/libxml2/xmlsave.c b/lib/3rdparty/libxml2/xmlsave.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlsave.c rename to lib/3rdparty/libxml2/xmlsave.c diff --git a/reactos/lib/3rdparty/libxml2/xmlschemas.c b/lib/3rdparty/libxml2/xmlschemas.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlschemas.c rename to lib/3rdparty/libxml2/xmlschemas.c diff --git a/reactos/lib/3rdparty/libxml2/xmlschemastypes.c b/lib/3rdparty/libxml2/xmlschemastypes.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlschemastypes.c rename to lib/3rdparty/libxml2/xmlschemastypes.c diff --git a/reactos/lib/3rdparty/libxml2/xmlstring.c b/lib/3rdparty/libxml2/xmlstring.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlstring.c rename to lib/3rdparty/libxml2/xmlstring.c diff --git a/reactos/lib/3rdparty/libxml2/xmlunicode.c b/lib/3rdparty/libxml2/xmlunicode.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlunicode.c rename to lib/3rdparty/libxml2/xmlunicode.c diff --git a/reactos/lib/3rdparty/libxml2/xmlwriter.c b/lib/3rdparty/libxml2/xmlwriter.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xmlwriter.c rename to lib/3rdparty/libxml2/xmlwriter.c diff --git a/reactos/lib/3rdparty/libxml2/xpath.c b/lib/3rdparty/libxml2/xpath.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xpath.c rename to lib/3rdparty/libxml2/xpath.c diff --git a/reactos/lib/3rdparty/libxml2/xpointer.c b/lib/3rdparty/libxml2/xpointer.c similarity index 100% rename from reactos/lib/3rdparty/libxml2/xpointer.c rename to lib/3rdparty/libxml2/xpointer.c diff --git a/reactos/lib/3rdparty/mingw/CRTfmode.c b/lib/3rdparty/mingw/CRTfmode.c similarity index 100% rename from reactos/lib/3rdparty/mingw/CRTfmode.c rename to lib/3rdparty/mingw/CRTfmode.c diff --git a/reactos/lib/3rdparty/mingw/CRTglob.c b/lib/3rdparty/mingw/CRTglob.c similarity index 100% rename from reactos/lib/3rdparty/mingw/CRTglob.c rename to lib/3rdparty/mingw/CRTglob.c diff --git a/reactos/lib/3rdparty/mingw/CRTinit.c b/lib/3rdparty/mingw/CRTinit.c similarity index 100% rename from reactos/lib/3rdparty/mingw/CRTinit.c rename to lib/3rdparty/mingw/CRTinit.c diff --git a/reactos/lib/3rdparty/mingw/_wgetopt.c b/lib/3rdparty/mingw/_wgetopt.c similarity index 100% rename from reactos/lib/3rdparty/mingw/_wgetopt.c rename to lib/3rdparty/mingw/_wgetopt.c diff --git a/reactos/lib/3rdparty/mingw/binmode.c b/lib/3rdparty/mingw/binmode.c similarity index 100% rename from reactos/lib/3rdparty/mingw/binmode.c rename to lib/3rdparty/mingw/binmode.c diff --git a/reactos/lib/3rdparty/mingw/cpu_features.c b/lib/3rdparty/mingw/cpu_features.c similarity index 100% rename from reactos/lib/3rdparty/mingw/cpu_features.c rename to lib/3rdparty/mingw/cpu_features.c diff --git a/reactos/lib/3rdparty/mingw/cpu_features.h b/lib/3rdparty/mingw/cpu_features.h similarity index 100% rename from reactos/lib/3rdparty/mingw/cpu_features.h rename to lib/3rdparty/mingw/cpu_features.h diff --git a/reactos/lib/3rdparty/mingw/crt1.c b/lib/3rdparty/mingw/crt1.c similarity index 100% rename from reactos/lib/3rdparty/mingw/crt1.c rename to lib/3rdparty/mingw/crt1.c diff --git a/reactos/lib/3rdparty/mingw/dllcrt1.c b/lib/3rdparty/mingw/dllcrt1.c similarity index 100% rename from reactos/lib/3rdparty/mingw/dllcrt1.c rename to lib/3rdparty/mingw/dllcrt1.c diff --git a/reactos/lib/3rdparty/mingw/gccmain.c b/lib/3rdparty/mingw/gccmain.c similarity index 100% rename from reactos/lib/3rdparty/mingw/gccmain.c rename to lib/3rdparty/mingw/gccmain.c diff --git a/reactos/lib/3rdparty/mingw/getopt.c b/lib/3rdparty/mingw/getopt.c similarity index 100% rename from reactos/lib/3rdparty/mingw/getopt.c rename to lib/3rdparty/mingw/getopt.c diff --git a/reactos/lib/3rdparty/mingw/init.c b/lib/3rdparty/mingw/init.c similarity index 100% rename from reactos/lib/3rdparty/mingw/init.c rename to lib/3rdparty/mingw/init.c diff --git a/reactos/lib/3rdparty/mingw/isascii.c b/lib/3rdparty/mingw/isascii.c similarity index 100% rename from reactos/lib/3rdparty/mingw/isascii.c rename to lib/3rdparty/mingw/isascii.c diff --git a/reactos/lib/3rdparty/mingw/iscsym.c b/lib/3rdparty/mingw/iscsym.c similarity index 100% rename from reactos/lib/3rdparty/mingw/iscsym.c rename to lib/3rdparty/mingw/iscsym.c diff --git a/reactos/lib/3rdparty/mingw/iscsymf.c b/lib/3rdparty/mingw/iscsymf.c similarity index 100% rename from reactos/lib/3rdparty/mingw/iscsymf.c rename to lib/3rdparty/mingw/iscsymf.c diff --git a/reactos/lib/3rdparty/mingw/main.c b/lib/3rdparty/mingw/main.c similarity index 100% rename from reactos/lib/3rdparty/mingw/main.c rename to lib/3rdparty/mingw/main.c diff --git a/reactos/lib/3rdparty/mingw/mingw.rbuild b/lib/3rdparty/mingw/mingw.rbuild similarity index 100% rename from reactos/lib/3rdparty/mingw/mingw.rbuild rename to lib/3rdparty/mingw/mingw.rbuild diff --git a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def b/lib/3rdparty/mingw/moldname-msvcrt.def similarity index 100% rename from reactos/lib/3rdparty/mingw/moldname-msvcrt.def rename to lib/3rdparty/mingw/moldname-msvcrt.def diff --git a/reactos/lib/3rdparty/mingw/pseudo-reloc.c b/lib/3rdparty/mingw/pseudo-reloc.c similarity index 100% rename from reactos/lib/3rdparty/mingw/pseudo-reloc.c rename to lib/3rdparty/mingw/pseudo-reloc.c diff --git a/reactos/lib/3rdparty/mingw/strcasecmp.c b/lib/3rdparty/mingw/strcasecmp.c similarity index 100% rename from reactos/lib/3rdparty/mingw/strcasecmp.c rename to lib/3rdparty/mingw/strcasecmp.c diff --git a/reactos/lib/3rdparty/mingw/strncasecmp.c b/lib/3rdparty/mingw/strncasecmp.c similarity index 100% rename from reactos/lib/3rdparty/mingw/strncasecmp.c rename to lib/3rdparty/mingw/strncasecmp.c diff --git a/reactos/lib/3rdparty/mingw/tgetopt.h b/lib/3rdparty/mingw/tgetopt.h similarity index 100% rename from reactos/lib/3rdparty/mingw/tgetopt.h rename to lib/3rdparty/mingw/tgetopt.h diff --git a/reactos/lib/3rdparty/mingw/toascii.c b/lib/3rdparty/mingw/toascii.c similarity index 100% rename from reactos/lib/3rdparty/mingw/toascii.c rename to lib/3rdparty/mingw/toascii.c diff --git a/reactos/lib/3rdparty/mingw/wbinmode.c b/lib/3rdparty/mingw/wbinmode.c similarity index 100% rename from reactos/lib/3rdparty/mingw/wbinmode.c rename to lib/3rdparty/mingw/wbinmode.c diff --git a/reactos/lib/3rdparty/mingw/wcrt1.c b/lib/3rdparty/mingw/wcrt1.c similarity index 100% rename from reactos/lib/3rdparty/mingw/wcrt1.c rename to lib/3rdparty/mingw/wcrt1.c diff --git a/reactos/lib/3rdparty/mingw/wcscmpi.c b/lib/3rdparty/mingw/wcscmpi.c similarity index 100% rename from reactos/lib/3rdparty/mingw/wcscmpi.c rename to lib/3rdparty/mingw/wcscmpi.c diff --git a/reactos/lib/3rdparty/mingw/winit.c b/lib/3rdparty/mingw/winit.c similarity index 100% rename from reactos/lib/3rdparty/mingw/winit.c rename to lib/3rdparty/mingw/winit.c diff --git a/reactos/lib/3rdparty/mingw/wmain.c b/lib/3rdparty/mingw/wmain.c similarity index 100% rename from reactos/lib/3rdparty/mingw/wmain.c rename to lib/3rdparty/mingw/wmain.c diff --git a/reactos/lib/3rdparty/zlib/ChangeLog b/lib/3rdparty/zlib/ChangeLog similarity index 100% rename from reactos/lib/3rdparty/zlib/ChangeLog rename to lib/3rdparty/zlib/ChangeLog diff --git a/reactos/lib/3rdparty/zlib/FAQ b/lib/3rdparty/zlib/FAQ similarity index 100% rename from reactos/lib/3rdparty/zlib/FAQ rename to lib/3rdparty/zlib/FAQ diff --git a/reactos/lib/3rdparty/zlib/INDEX b/lib/3rdparty/zlib/INDEX similarity index 100% rename from reactos/lib/3rdparty/zlib/INDEX rename to lib/3rdparty/zlib/INDEX diff --git a/reactos/lib/3rdparty/zlib/Makefile.host b/lib/3rdparty/zlib/Makefile.host similarity index 100% rename from reactos/lib/3rdparty/zlib/Makefile.host rename to lib/3rdparty/zlib/Makefile.host diff --git a/reactos/lib/3rdparty/zlib/Makefile.in b/lib/3rdparty/zlib/Makefile.in similarity index 100% rename from reactos/lib/3rdparty/zlib/Makefile.in rename to lib/3rdparty/zlib/Makefile.in diff --git a/reactos/lib/3rdparty/zlib/README b/lib/3rdparty/zlib/README similarity index 100% rename from reactos/lib/3rdparty/zlib/README rename to lib/3rdparty/zlib/README diff --git a/reactos/lib/3rdparty/zlib/adler32.c b/lib/3rdparty/zlib/adler32.c similarity index 100% rename from reactos/lib/3rdparty/zlib/adler32.c rename to lib/3rdparty/zlib/adler32.c diff --git a/reactos/lib/3rdparty/zlib/algorithm.txt b/lib/3rdparty/zlib/algorithm.txt similarity index 100% rename from reactos/lib/3rdparty/zlib/algorithm.txt rename to lib/3rdparty/zlib/algorithm.txt diff --git a/reactos/lib/3rdparty/zlib/compress.c b/lib/3rdparty/zlib/compress.c similarity index 100% rename from reactos/lib/3rdparty/zlib/compress.c rename to lib/3rdparty/zlib/compress.c diff --git a/reactos/lib/3rdparty/zlib/configure b/lib/3rdparty/zlib/configure similarity index 100% rename from reactos/lib/3rdparty/zlib/configure rename to lib/3rdparty/zlib/configure diff --git a/reactos/lib/3rdparty/zlib/crc32.c b/lib/3rdparty/zlib/crc32.c similarity index 100% rename from reactos/lib/3rdparty/zlib/crc32.c rename to lib/3rdparty/zlib/crc32.c diff --git a/reactos/lib/3rdparty/zlib/crc32.h b/lib/3rdparty/zlib/crc32.h similarity index 100% rename from reactos/lib/3rdparty/zlib/crc32.h rename to lib/3rdparty/zlib/crc32.h diff --git a/reactos/lib/3rdparty/zlib/deflate.c b/lib/3rdparty/zlib/deflate.c similarity index 100% rename from reactos/lib/3rdparty/zlib/deflate.c rename to lib/3rdparty/zlib/deflate.c diff --git a/reactos/lib/3rdparty/zlib/deflate.h b/lib/3rdparty/zlib/deflate.h similarity index 100% rename from reactos/lib/3rdparty/zlib/deflate.h rename to lib/3rdparty/zlib/deflate.h diff --git a/reactos/lib/3rdparty/zlib/example.c b/lib/3rdparty/zlib/example.c similarity index 100% rename from reactos/lib/3rdparty/zlib/example.c rename to lib/3rdparty/zlib/example.c diff --git a/reactos/lib/3rdparty/zlib/gzio.c b/lib/3rdparty/zlib/gzio.c similarity index 100% rename from reactos/lib/3rdparty/zlib/gzio.c rename to lib/3rdparty/zlib/gzio.c diff --git a/reactos/lib/3rdparty/zlib/infback.c b/lib/3rdparty/zlib/infback.c similarity index 100% rename from reactos/lib/3rdparty/zlib/infback.c rename to lib/3rdparty/zlib/infback.c diff --git a/reactos/lib/3rdparty/zlib/inffast.c b/lib/3rdparty/zlib/inffast.c similarity index 100% rename from reactos/lib/3rdparty/zlib/inffast.c rename to lib/3rdparty/zlib/inffast.c diff --git a/reactos/lib/3rdparty/zlib/inffast.h b/lib/3rdparty/zlib/inffast.h similarity index 100% rename from reactos/lib/3rdparty/zlib/inffast.h rename to lib/3rdparty/zlib/inffast.h diff --git a/reactos/lib/3rdparty/zlib/inffixed.h b/lib/3rdparty/zlib/inffixed.h similarity index 100% rename from reactos/lib/3rdparty/zlib/inffixed.h rename to lib/3rdparty/zlib/inffixed.h diff --git a/reactos/lib/3rdparty/zlib/inflate.c b/lib/3rdparty/zlib/inflate.c similarity index 100% rename from reactos/lib/3rdparty/zlib/inflate.c rename to lib/3rdparty/zlib/inflate.c diff --git a/reactos/lib/3rdparty/zlib/inflate.h b/lib/3rdparty/zlib/inflate.h similarity index 100% rename from reactos/lib/3rdparty/zlib/inflate.h rename to lib/3rdparty/zlib/inflate.h diff --git a/reactos/lib/3rdparty/zlib/inftrees.c b/lib/3rdparty/zlib/inftrees.c similarity index 100% rename from reactos/lib/3rdparty/zlib/inftrees.c rename to lib/3rdparty/zlib/inftrees.c diff --git a/reactos/lib/3rdparty/zlib/inftrees.h b/lib/3rdparty/zlib/inftrees.h similarity index 100% rename from reactos/lib/3rdparty/zlib/inftrees.h rename to lib/3rdparty/zlib/inftrees.h diff --git a/reactos/lib/3rdparty/zlib/minigzip.c b/lib/3rdparty/zlib/minigzip.c similarity index 100% rename from reactos/lib/3rdparty/zlib/minigzip.c rename to lib/3rdparty/zlib/minigzip.c diff --git a/reactos/lib/3rdparty/zlib/trees.c b/lib/3rdparty/zlib/trees.c similarity index 100% rename from reactos/lib/3rdparty/zlib/trees.c rename to lib/3rdparty/zlib/trees.c diff --git a/reactos/lib/3rdparty/zlib/trees.h b/lib/3rdparty/zlib/trees.h similarity index 100% rename from reactos/lib/3rdparty/zlib/trees.h rename to lib/3rdparty/zlib/trees.h diff --git a/reactos/lib/3rdparty/zlib/uncompr.c b/lib/3rdparty/zlib/uncompr.c similarity index 100% rename from reactos/lib/3rdparty/zlib/uncompr.c rename to lib/3rdparty/zlib/uncompr.c diff --git a/reactos/lib/3rdparty/zlib/zconf.h b/lib/3rdparty/zlib/zconf.h similarity index 100% rename from reactos/lib/3rdparty/zlib/zconf.h rename to lib/3rdparty/zlib/zconf.h diff --git a/reactos/lib/3rdparty/zlib/zconf.in.h b/lib/3rdparty/zlib/zconf.in.h similarity index 100% rename from reactos/lib/3rdparty/zlib/zconf.in.h rename to lib/3rdparty/zlib/zconf.in.h diff --git a/reactos/lib/3rdparty/zlib/zlib.h b/lib/3rdparty/zlib/zlib.h similarity index 100% rename from reactos/lib/3rdparty/zlib/zlib.h rename to lib/3rdparty/zlib/zlib.h diff --git a/reactos/lib/3rdparty/zlib/zlib.rbuild b/lib/3rdparty/zlib/zlib.rbuild similarity index 100% rename from reactos/lib/3rdparty/zlib/zlib.rbuild rename to lib/3rdparty/zlib/zlib.rbuild diff --git a/reactos/lib/3rdparty/zlib/zutil.c b/lib/3rdparty/zlib/zutil.c similarity index 100% rename from reactos/lib/3rdparty/zlib/zutil.c rename to lib/3rdparty/zlib/zutil.c diff --git a/reactos/lib/3rdparty/zlib/zutil.h b/lib/3rdparty/zlib/zutil.h similarity index 100% rename from reactos/lib/3rdparty/zlib/zutil.h rename to lib/3rdparty/zlib/zutil.h diff --git a/reactos/lib/cmlib/cmdata.h b/lib/cmlib/cmdata.h similarity index 100% rename from reactos/lib/cmlib/cmdata.h rename to lib/cmlib/cmdata.h diff --git a/reactos/lib/cmlib/cminit.c b/lib/cmlib/cminit.c similarity index 100% rename from reactos/lib/cmlib/cminit.c rename to lib/cmlib/cminit.c diff --git a/reactos/lib/cmlib/cmlib.h b/lib/cmlib/cmlib.h similarity index 100% rename from reactos/lib/cmlib/cmlib.h rename to lib/cmlib/cmlib.h diff --git a/reactos/lib/cmlib/cmlib.rbuild b/lib/cmlib/cmlib.rbuild similarity index 100% rename from reactos/lib/cmlib/cmlib.rbuild rename to lib/cmlib/cmlib.rbuild diff --git a/reactos/lib/cmlib/hivebin.c b/lib/cmlib/hivebin.c similarity index 100% rename from reactos/lib/cmlib/hivebin.c rename to lib/cmlib/hivebin.c diff --git a/reactos/lib/cmlib/hivecell.c b/lib/cmlib/hivecell.c similarity index 100% rename from reactos/lib/cmlib/hivecell.c rename to lib/cmlib/hivecell.c diff --git a/reactos/lib/cmlib/hivedata.h b/lib/cmlib/hivedata.h similarity index 100% rename from reactos/lib/cmlib/hivedata.h rename to lib/cmlib/hivedata.h diff --git a/reactos/lib/cmlib/hiveinit.c b/lib/cmlib/hiveinit.c similarity index 100% rename from reactos/lib/cmlib/hiveinit.c rename to lib/cmlib/hiveinit.c diff --git a/reactos/lib/cmlib/hivesum.c b/lib/cmlib/hivesum.c similarity index 100% rename from reactos/lib/cmlib/hivesum.c rename to lib/cmlib/hivesum.c diff --git a/reactos/lib/cmlib/hivewrt.c b/lib/cmlib/hivewrt.c similarity index 100% rename from reactos/lib/cmlib/hivewrt.c rename to lib/cmlib/hivewrt.c diff --git a/reactos/lib/debugsup/debugsup-ntos.spec b/lib/debugsup/debugsup-ntos.spec similarity index 100% rename from reactos/lib/debugsup/debugsup-ntos.spec rename to lib/debugsup/debugsup-ntos.spec diff --git a/reactos/lib/debugsup/debugsup.rbuild b/lib/debugsup/debugsup.rbuild similarity index 100% rename from reactos/lib/debugsup/debugsup.rbuild rename to lib/debugsup/debugsup.rbuild diff --git a/reactos/lib/drivers/chew/chew.rbuild b/lib/drivers/chew/chew.rbuild similarity index 100% rename from reactos/lib/drivers/chew/chew.rbuild rename to lib/drivers/chew/chew.rbuild diff --git a/reactos/lib/drivers/chew/workqueue.c b/lib/drivers/chew/workqueue.c similarity index 100% rename from reactos/lib/drivers/chew/workqueue.c rename to lib/drivers/chew/workqueue.c diff --git a/reactos/lib/drivers/csq/SOURCES b/lib/drivers/csq/SOURCES similarity index 100% rename from reactos/lib/drivers/csq/SOURCES rename to lib/drivers/csq/SOURCES diff --git a/reactos/lib/drivers/csq/csq.c b/lib/drivers/csq/csq.c similarity index 100% rename from reactos/lib/drivers/csq/csq.c rename to lib/drivers/csq/csq.c diff --git a/reactos/lib/drivers/csq/csq.def b/lib/drivers/csq/csq.def similarity index 100% rename from reactos/lib/drivers/csq/csq.def rename to lib/drivers/csq/csq.def diff --git a/reactos/lib/drivers/csq/csq.h b/lib/drivers/csq/csq.h similarity index 100% rename from reactos/lib/drivers/csq/csq.h rename to lib/drivers/csq/csq.h diff --git a/reactos/lib/drivers/csq/csq.rbuild b/lib/drivers/csq/csq.rbuild similarity index 100% rename from reactos/lib/drivers/csq/csq.rbuild rename to lib/drivers/csq/csq.rbuild diff --git a/reactos/lib/drivers/directory.rbuild b/lib/drivers/directory.rbuild similarity index 100% rename from reactos/lib/drivers/directory.rbuild rename to lib/drivers/directory.rbuild diff --git a/reactos/lib/drivers/ip/ip.rbuild b/lib/drivers/ip/ip.rbuild similarity index 100% rename from reactos/lib/drivers/ip/ip.rbuild rename to lib/drivers/ip/ip.rbuild diff --git a/reactos/lib/drivers/ip/network/address.c b/lib/drivers/ip/network/address.c similarity index 100% rename from reactos/lib/drivers/ip/network/address.c rename to lib/drivers/ip/network/address.c diff --git a/reactos/lib/drivers/ip/network/arp.c b/lib/drivers/ip/network/arp.c similarity index 100% rename from reactos/lib/drivers/ip/network/arp.c rename to lib/drivers/ip/network/arp.c diff --git a/reactos/lib/drivers/ip/network/checksum.c b/lib/drivers/ip/network/checksum.c similarity index 100% rename from reactos/lib/drivers/ip/network/checksum.c rename to lib/drivers/ip/network/checksum.c diff --git a/reactos/lib/drivers/ip/network/i386/checksum.S b/lib/drivers/ip/network/i386/checksum.S similarity index 100% rename from reactos/lib/drivers/ip/network/i386/checksum.S rename to lib/drivers/ip/network/i386/checksum.S diff --git a/reactos/lib/drivers/ip/network/icmp.c b/lib/drivers/ip/network/icmp.c similarity index 100% rename from reactos/lib/drivers/ip/network/icmp.c rename to lib/drivers/ip/network/icmp.c diff --git a/reactos/lib/drivers/ip/network/interface.c b/lib/drivers/ip/network/interface.c similarity index 100% rename from reactos/lib/drivers/ip/network/interface.c rename to lib/drivers/ip/network/interface.c diff --git a/reactos/lib/drivers/ip/network/ip.c b/lib/drivers/ip/network/ip.c similarity index 100% rename from reactos/lib/drivers/ip/network/ip.c rename to lib/drivers/ip/network/ip.c diff --git a/reactos/lib/drivers/ip/network/loopback.c b/lib/drivers/ip/network/loopback.c similarity index 100% rename from reactos/lib/drivers/ip/network/loopback.c rename to lib/drivers/ip/network/loopback.c diff --git a/reactos/lib/drivers/ip/network/memtrack.c b/lib/drivers/ip/network/memtrack.c similarity index 100% rename from reactos/lib/drivers/ip/network/memtrack.c rename to lib/drivers/ip/network/memtrack.c diff --git a/reactos/lib/drivers/ip/network/neighbor.c b/lib/drivers/ip/network/neighbor.c similarity index 100% rename from reactos/lib/drivers/ip/network/neighbor.c rename to lib/drivers/ip/network/neighbor.c diff --git a/reactos/lib/drivers/ip/network/ports.c b/lib/drivers/ip/network/ports.c similarity index 100% rename from reactos/lib/drivers/ip/network/ports.c rename to lib/drivers/ip/network/ports.c diff --git a/reactos/lib/drivers/ip/network/receive.c b/lib/drivers/ip/network/receive.c similarity index 100% rename from reactos/lib/drivers/ip/network/receive.c rename to lib/drivers/ip/network/receive.c diff --git a/reactos/lib/drivers/ip/network/router.c b/lib/drivers/ip/network/router.c similarity index 100% rename from reactos/lib/drivers/ip/network/router.c rename to lib/drivers/ip/network/router.c diff --git a/reactos/lib/drivers/ip/network/routines.c b/lib/drivers/ip/network/routines.c similarity index 100% rename from reactos/lib/drivers/ip/network/routines.c rename to lib/drivers/ip/network/routines.c diff --git a/reactos/lib/drivers/ip/network/transmit.c b/lib/drivers/ip/network/transmit.c similarity index 100% rename from reactos/lib/drivers/ip/network/transmit.c rename to lib/drivers/ip/network/transmit.c diff --git a/reactos/lib/drivers/ip/transport/datagram/datagram.c b/lib/drivers/ip/transport/datagram/datagram.c similarity index 100% rename from reactos/lib/drivers/ip/transport/datagram/datagram.c rename to lib/drivers/ip/transport/datagram/datagram.c diff --git a/reactos/lib/drivers/ip/transport/rawip/rawip.c b/lib/drivers/ip/transport/rawip/rawip.c similarity index 100% rename from reactos/lib/drivers/ip/transport/rawip/rawip.c rename to lib/drivers/ip/transport/rawip/rawip.c diff --git a/reactos/lib/drivers/ip/transport/tcp/accept.c b/lib/drivers/ip/transport/tcp/accept.c similarity index 100% rename from reactos/lib/drivers/ip/transport/tcp/accept.c rename to lib/drivers/ip/transport/tcp/accept.c diff --git a/reactos/lib/drivers/ip/transport/tcp/event.c b/lib/drivers/ip/transport/tcp/event.c similarity index 100% rename from reactos/lib/drivers/ip/transport/tcp/event.c rename to lib/drivers/ip/transport/tcp/event.c diff --git a/reactos/lib/drivers/ip/transport/tcp/if.c b/lib/drivers/ip/transport/tcp/if.c similarity index 100% rename from reactos/lib/drivers/ip/transport/tcp/if.c rename to lib/drivers/ip/transport/tcp/if.c diff --git a/reactos/lib/drivers/ip/transport/tcp/tcp.c b/lib/drivers/ip/transport/tcp/tcp.c similarity index 100% rename from reactos/lib/drivers/ip/transport/tcp/tcp.c rename to lib/drivers/ip/transport/tcp/tcp.c diff --git a/reactos/lib/drivers/ip/transport/udp/udp.c b/lib/drivers/ip/transport/udp/udp.c similarity index 100% rename from reactos/lib/drivers/ip/transport/udp/udp.c rename to lib/drivers/ip/transport/udp/udp.c diff --git a/reactos/lib/drivers/oskittcp/README b/lib/drivers/oskittcp/README similarity index 100% rename from reactos/lib/drivers/oskittcp/README rename to lib/drivers/oskittcp/README diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/dev/include/vm/vm.h b/lib/drivers/oskittcp/include/freebsd/dev/include/vm/vm.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/dev/include/vm/vm.h rename to lib/drivers/oskittcp/include/freebsd/dev/include/vm/vm.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/dev/include/vm/vm_param.h b/lib/drivers/oskittcp/include/freebsd/dev/include/vm/vm_param.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/dev/include/vm/vm_param.h rename to lib/drivers/oskittcp/include/freebsd/dev/include/vm/vm_param.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/net/include/arpa/inet.h b/lib/drivers/oskittcp/include/freebsd/net/include/arpa/inet.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/net/include/arpa/inet.h rename to lib/drivers/oskittcp/include/freebsd/net/include/arpa/inet.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/net/include/imp.h b/lib/drivers/oskittcp/include/freebsd/net/include/imp.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/net/include/imp.h rename to lib/drivers/oskittcp/include/freebsd/net/include/imp.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/cpufunc.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/cpufunc.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/cpufunc.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/cpufunc.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/endian.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/endian.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/endian.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/endian.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ipl.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ipl.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ipl.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/ipl.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/limits.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/limits.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/limits.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/limits.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/param.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/param.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/param.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/param.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/proc.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/proc.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/proc.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/proc.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/signal.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/signal.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/signal.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/signal.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/spl.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/spl.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/spl.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/spl.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/stdarg.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/stdarg.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/stdarg.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/stdarg.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/trap.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/trap.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/trap.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/trap.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/types.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/types.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/types.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/types.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/vmparam.h b/lib/drivers/oskittcp/include/freebsd/src/sys/machine/vmparam.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/vmparam.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/machine/vmparam.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/if.h b/lib/drivers/oskittcp/include/freebsd/src/sys/net/if.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/if.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/net/if.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/if_arp.h b/lib/drivers/oskittcp/include/freebsd/src/sys/net/if_arp.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/if_arp.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/net/if_arp.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/netisr.h b/lib/drivers/oskittcp/include/freebsd/src/sys/net/netisr.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/netisr.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/net/netisr.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/radix.h b/lib/drivers/oskittcp/include/freebsd/src/sys/net/radix.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/radix.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/net/radix.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/raw_cb.h b/lib/drivers/oskittcp/include/freebsd/src/sys/net/raw_cb.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/raw_cb.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/net/raw_cb.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/route.h b/lib/drivers/oskittcp/include/freebsd/src/sys/net/route.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/net/route.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/net/route.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/if_ether.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/if_ether.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/if_ether.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/if_ether.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/igmp_var.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/igmp_var.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/igmp_var.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/igmp_var.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_pcb.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_pcb.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_pcb.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_pcb.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_systm.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_systm.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_systm.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_systm.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_var.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_var.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_var.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/in_var.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_fw.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_fw.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_fw.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_fw.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_icmp.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_icmp.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_icmp.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_icmp.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_var.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_var.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_var.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/ip_var.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_debug.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_debug.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_debug.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_debug.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_fsm.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_fsm.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_fsm.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_fsm.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_seq.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_seq.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_seq.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_seq.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_timer.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_timer.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_timer.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_timer.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_var.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_var.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_var.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcp_var.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcpip.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcpip.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcpip.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/tcpip.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/udp.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/udp.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/udp.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/udp.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/udp_var.h b/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/udp_var.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/netinet/udp_var.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/netinet/udp_var.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/buf.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/buf.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/buf.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/buf.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/callout.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/callout.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/callout.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/callout.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/cdefs.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/cdefs.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/cdefs.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/cdefs.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/domain.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/domain.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/domain.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/domain.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/errno.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/errno.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/errno.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/errno.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/fcntl.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/fcntl.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/fcntl.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/fcntl.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/file.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/file.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/file.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/file.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/filedesc.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/filedesc.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/filedesc.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/filedesc.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/filio.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/filio.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/filio.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/filio.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ioccom.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ioccom.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ioccom.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/ioccom.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ioctl.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ioctl.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ioctl.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/ioctl.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/kernel.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/kernel.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/kernel.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/kernel.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/libkern.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/libkern.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/libkern.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/libkern.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/malloc.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/malloc.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/malloc.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/malloc.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/mbuf.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/mbuf.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/mbuf.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/mbuf.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/param.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/param.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/param.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/param.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/proc.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/proc.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/proc.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/proc.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/protosw.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/protosw.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/protosw.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/protosw.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/queue.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/queue.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/queue.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/queue.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/resource.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/resource.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/resource.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/resource.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/resourcevar.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/resourcevar.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/resourcevar.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/resourcevar.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/rtprio.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/rtprio.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/rtprio.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/rtprio.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/select.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/select.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/select.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/select.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/signal.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/signal.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/signal.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/signal.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/signalvar.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/signalvar.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/signalvar.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/signalvar.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/socket.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/socket.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/socket.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/socket.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/socketvar.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/socketvar.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/socketvar.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/socketvar.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/sockio.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/sockio.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/sockio.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/sockio.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/stat.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/stat.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/stat.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/stat.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/sysctl.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/sysctl.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/sysctl.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/sysctl.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/syslimits.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/syslimits.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/syslimits.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/syslimits.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/syslog.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/syslog.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/syslog.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/syslog.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/systm.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/systm.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/systm.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/systm.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/time.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/time.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/time.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/time.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ttycom.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ttycom.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ttycom.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/ttycom.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/types.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/types.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/types.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/types.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ucred.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ucred.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/ucred.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/ucred.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/uio.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/uio.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/uio.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/uio.h diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/unistd.h b/lib/drivers/oskittcp/include/freebsd/src/sys/sys/unistd.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/unistd.h rename to lib/drivers/oskittcp/include/freebsd/src/sys/sys/unistd.h diff --git a/reactos/lib/drivers/oskittcp/include/memtrack.h b/lib/drivers/oskittcp/include/memtrack.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/memtrack.h rename to lib/drivers/oskittcp/include/memtrack.h diff --git a/reactos/lib/drivers/oskittcp/include/oskitdebug.h b/lib/drivers/oskittcp/include/oskitdebug.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/oskitdebug.h rename to lib/drivers/oskittcp/include/oskitdebug.h diff --git a/reactos/lib/drivers/oskittcp/include/oskiterrno.h b/lib/drivers/oskittcp/include/oskiterrno.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/oskiterrno.h rename to lib/drivers/oskittcp/include/oskiterrno.h diff --git a/reactos/lib/drivers/oskittcp/include/oskitfreebsd.h b/lib/drivers/oskittcp/include/oskitfreebsd.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/oskitfreebsd.h rename to lib/drivers/oskittcp/include/oskitfreebsd.h diff --git a/reactos/lib/drivers/oskittcp/include/oskittcp.h b/lib/drivers/oskittcp/include/oskittcp.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/oskittcp.h rename to lib/drivers/oskittcp/include/oskittcp.h diff --git a/reactos/lib/drivers/oskittcp/include/oskittypes.h b/lib/drivers/oskittcp/include/oskittypes.h similarity index 100% rename from reactos/lib/drivers/oskittcp/include/oskittypes.h rename to lib/drivers/oskittcp/include/oskittypes.h diff --git a/reactos/lib/drivers/oskittcp/notes.txt b/lib/drivers/oskittcp/notes.txt similarity index 100% rename from reactos/lib/drivers/oskittcp/notes.txt rename to lib/drivers/oskittcp/notes.txt diff --git a/reactos/lib/drivers/oskittcp/oskittcp.rbuild b/lib/drivers/oskittcp/oskittcp.rbuild similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp.rbuild rename to lib/drivers/oskittcp/oskittcp.rbuild diff --git a/reactos/lib/drivers/oskittcp/oskittcp/defaults.c b/lib/drivers/oskittcp/oskittcp/defaults.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/defaults.c rename to lib/drivers/oskittcp/oskittcp/defaults.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/in.c b/lib/drivers/oskittcp/oskittcp/in.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/in.c rename to lib/drivers/oskittcp/oskittcp/in.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/in_cksum.c b/lib/drivers/oskittcp/oskittcp/in_cksum.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/in_cksum.c rename to lib/drivers/oskittcp/oskittcp/in_cksum.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/in_pcb.c b/lib/drivers/oskittcp/oskittcp/in_pcb.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/in_pcb.c rename to lib/drivers/oskittcp/oskittcp/in_pcb.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/in_proto.c b/lib/drivers/oskittcp/oskittcp/in_proto.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/in_proto.c rename to lib/drivers/oskittcp/oskittcp/in_proto.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/in_rmx.c b/lib/drivers/oskittcp/oskittcp/in_rmx.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/in_rmx.c rename to lib/drivers/oskittcp/oskittcp/in_rmx.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/inet_ntoa.c b/lib/drivers/oskittcp/oskittcp/inet_ntoa.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/inet_ntoa.c rename to lib/drivers/oskittcp/oskittcp/inet_ntoa.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/interface.c b/lib/drivers/oskittcp/oskittcp/interface.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/interface.c rename to lib/drivers/oskittcp/oskittcp/interface.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/ip_input.c b/lib/drivers/oskittcp/oskittcp/ip_input.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/ip_input.c rename to lib/drivers/oskittcp/oskittcp/ip_input.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/ip_output.c b/lib/drivers/oskittcp/oskittcp/ip_output.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/ip_output.c rename to lib/drivers/oskittcp/oskittcp/ip_output.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/kern_clock.c b/lib/drivers/oskittcp/oskittcp/kern_clock.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/kern_clock.c rename to lib/drivers/oskittcp/oskittcp/kern_clock.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/kern_subr.c b/lib/drivers/oskittcp/oskittcp/kern_subr.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/kern_subr.c rename to lib/drivers/oskittcp/oskittcp/kern_subr.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/param.c b/lib/drivers/oskittcp/oskittcp/param.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/param.c rename to lib/drivers/oskittcp/oskittcp/param.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/radix.c b/lib/drivers/oskittcp/oskittcp/radix.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/radix.c rename to lib/drivers/oskittcp/oskittcp/radix.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/random.c b/lib/drivers/oskittcp/oskittcp/random.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/random.c rename to lib/drivers/oskittcp/oskittcp/random.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/raw_cb.c b/lib/drivers/oskittcp/oskittcp/raw_cb.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/raw_cb.c rename to lib/drivers/oskittcp/oskittcp/raw_cb.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/raw_ip.c b/lib/drivers/oskittcp/oskittcp/raw_ip.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/raw_ip.c rename to lib/drivers/oskittcp/oskittcp/raw_ip.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/raw_usrreq.c b/lib/drivers/oskittcp/oskittcp/raw_usrreq.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/raw_usrreq.c rename to lib/drivers/oskittcp/oskittcp/raw_usrreq.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/route.c b/lib/drivers/oskittcp/oskittcp/route.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/route.c rename to lib/drivers/oskittcp/oskittcp/route.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/rtsock.c b/lib/drivers/oskittcp/oskittcp/rtsock.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/rtsock.c rename to lib/drivers/oskittcp/oskittcp/rtsock.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/scanc.c b/lib/drivers/oskittcp/oskittcp/scanc.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/scanc.c rename to lib/drivers/oskittcp/oskittcp/scanc.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/sleep.c b/lib/drivers/oskittcp/oskittcp/sleep.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/sleep.c rename to lib/drivers/oskittcp/oskittcp/sleep.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/tcp_debug.c b/lib/drivers/oskittcp/oskittcp/tcp_debug.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/tcp_debug.c rename to lib/drivers/oskittcp/oskittcp/tcp_debug.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/tcp_input.c b/lib/drivers/oskittcp/oskittcp/tcp_input.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/tcp_input.c rename to lib/drivers/oskittcp/oskittcp/tcp_input.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/tcp_output.c b/lib/drivers/oskittcp/oskittcp/tcp_output.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/tcp_output.c rename to lib/drivers/oskittcp/oskittcp/tcp_output.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/tcp_subr.c b/lib/drivers/oskittcp/oskittcp/tcp_subr.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/tcp_subr.c rename to lib/drivers/oskittcp/oskittcp/tcp_subr.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/tcp_timer.c b/lib/drivers/oskittcp/oskittcp/tcp_timer.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/tcp_timer.c rename to lib/drivers/oskittcp/oskittcp/tcp_timer.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/tcp_usrreq.c b/lib/drivers/oskittcp/oskittcp/tcp_usrreq.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/tcp_usrreq.c rename to lib/drivers/oskittcp/oskittcp/tcp_usrreq.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/uipc_domain.c b/lib/drivers/oskittcp/oskittcp/uipc_domain.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/uipc_domain.c rename to lib/drivers/oskittcp/oskittcp/uipc_domain.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/uipc_mbuf.c b/lib/drivers/oskittcp/oskittcp/uipc_mbuf.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/uipc_mbuf.c rename to lib/drivers/oskittcp/oskittcp/uipc_mbuf.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/uipc_socket.c b/lib/drivers/oskittcp/oskittcp/uipc_socket.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/uipc_socket.c rename to lib/drivers/oskittcp/oskittcp/uipc_socket.c diff --git a/reactos/lib/drivers/oskittcp/oskittcp/uipc_socket2.c b/lib/drivers/oskittcp/oskittcp/uipc_socket2.c similarity index 100% rename from reactos/lib/drivers/oskittcp/oskittcp/uipc_socket2.c rename to lib/drivers/oskittcp/oskittcp/uipc_socket2.c diff --git a/reactos/lib/epsapi/enum/drivers.c b/lib/epsapi/enum/drivers.c similarity index 100% rename from reactos/lib/epsapi/enum/drivers.c rename to lib/epsapi/enum/drivers.c diff --git a/reactos/lib/epsapi/enum/modules.c b/lib/epsapi/enum/modules.c similarity index 100% rename from reactos/lib/epsapi/enum/modules.c rename to lib/epsapi/enum/modules.c diff --git a/reactos/lib/epsapi/enum/processes.c b/lib/epsapi/enum/processes.c similarity index 100% rename from reactos/lib/epsapi/enum/processes.c rename to lib/epsapi/enum/processes.c diff --git a/reactos/lib/epsapi/epsapi.rbuild b/lib/epsapi/epsapi.rbuild similarity index 100% rename from reactos/lib/epsapi/epsapi.rbuild rename to lib/epsapi/epsapi.rbuild diff --git a/reactos/lib/fslib/directory.rbuild b/lib/fslib/directory.rbuild similarity index 100% rename from reactos/lib/fslib/directory.rbuild rename to lib/fslib/directory.rbuild diff --git a/reactos/lib/fslib/ext2lib/Badblock.c b/lib/fslib/ext2lib/Badblock.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Badblock.c rename to lib/fslib/ext2lib/Badblock.c diff --git a/reactos/lib/fslib/ext2lib/Bitmap.c b/lib/fslib/ext2lib/Bitmap.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Bitmap.c rename to lib/fslib/ext2lib/Bitmap.c diff --git a/reactos/lib/fslib/ext2lib/Bitmap.h b/lib/fslib/ext2lib/Bitmap.h similarity index 100% rename from reactos/lib/fslib/ext2lib/Bitmap.h rename to lib/fslib/ext2lib/Bitmap.h diff --git a/reactos/lib/fslib/ext2lib/Disk.c b/lib/fslib/ext2lib/Disk.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Disk.c rename to lib/fslib/ext2lib/Disk.c diff --git a/reactos/lib/fslib/ext2lib/Disk.h b/lib/fslib/ext2lib/Disk.h similarity index 100% rename from reactos/lib/fslib/ext2lib/Disk.h rename to lib/fslib/ext2lib/Disk.h diff --git a/reactos/lib/fslib/ext2lib/Group.c b/lib/fslib/ext2lib/Group.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Group.c rename to lib/fslib/ext2lib/Group.c diff --git a/reactos/lib/fslib/ext2lib/Inode.c b/lib/fslib/ext2lib/Inode.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Inode.c rename to lib/fslib/ext2lib/Inode.c diff --git a/reactos/lib/fslib/ext2lib/Memory.c b/lib/fslib/ext2lib/Memory.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Memory.c rename to lib/fslib/ext2lib/Memory.c diff --git a/reactos/lib/fslib/ext2lib/Mke2fs.c b/lib/fslib/ext2lib/Mke2fs.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Mke2fs.c rename to lib/fslib/ext2lib/Mke2fs.c diff --git a/reactos/lib/fslib/ext2lib/Mke2fs.h b/lib/fslib/ext2lib/Mke2fs.h similarity index 100% rename from reactos/lib/fslib/ext2lib/Mke2fs.h rename to lib/fslib/ext2lib/Mke2fs.h diff --git a/reactos/lib/fslib/ext2lib/Super.c b/lib/fslib/ext2lib/Super.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Super.c rename to lib/fslib/ext2lib/Super.c diff --git a/reactos/lib/fslib/ext2lib/Uuid.c b/lib/fslib/ext2lib/Uuid.c similarity index 100% rename from reactos/lib/fslib/ext2lib/Uuid.c rename to lib/fslib/ext2lib/Uuid.c diff --git a/reactos/lib/fslib/ext2lib/ext2_fs.h b/lib/fslib/ext2lib/ext2_fs.h similarity index 100% rename from reactos/lib/fslib/ext2lib/ext2_fs.h rename to lib/fslib/ext2lib/ext2_fs.h diff --git a/reactos/lib/fslib/ext2lib/ext2lib.rbuild b/lib/fslib/ext2lib/ext2lib.rbuild similarity index 100% rename from reactos/lib/fslib/ext2lib/ext2lib.rbuild rename to lib/fslib/ext2lib/ext2lib.rbuild diff --git a/reactos/lib/fslib/ext2lib/types.h b/lib/fslib/ext2lib/types.h similarity index 100% rename from reactos/lib/fslib/ext2lib/types.h rename to lib/fslib/ext2lib/types.h diff --git a/reactos/lib/fslib/ntfslib/ntfslib.c b/lib/fslib/ntfslib/ntfslib.c similarity index 100% rename from reactos/lib/fslib/ntfslib/ntfslib.c rename to lib/fslib/ntfslib/ntfslib.c diff --git a/reactos/lib/fslib/ntfslib/ntfslib.h b/lib/fslib/ntfslib/ntfslib.h similarity index 100% rename from reactos/lib/fslib/ntfslib/ntfslib.h rename to lib/fslib/ntfslib/ntfslib.h diff --git a/reactos/lib/fslib/ntfslib/ntfslib.rbuild b/lib/fslib/ntfslib/ntfslib.rbuild similarity index 100% rename from reactos/lib/fslib/ntfslib/ntfslib.rbuild rename to lib/fslib/ntfslib/ntfslib.rbuild diff --git a/reactos/lib/fslib/vfatlib/check/boot.c b/lib/fslib/vfatlib/check/boot.c similarity index 100% rename from reactos/lib/fslib/vfatlib/check/boot.c rename to lib/fslib/vfatlib/check/boot.c diff --git a/reactos/lib/fslib/vfatlib/check/boot.h b/lib/fslib/vfatlib/check/boot.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/boot.h rename to lib/fslib/vfatlib/check/boot.h diff --git a/reactos/lib/fslib/vfatlib/check/byteorder.h b/lib/fslib/vfatlib/check/byteorder.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/byteorder.h rename to lib/fslib/vfatlib/check/byteorder.h diff --git a/reactos/lib/fslib/vfatlib/check/byteswap.h b/lib/fslib/vfatlib/check/byteswap.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/byteswap.h rename to lib/fslib/vfatlib/check/byteswap.h diff --git a/reactos/lib/fslib/vfatlib/check/byteswap1.h b/lib/fslib/vfatlib/check/byteswap1.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/byteswap1.h rename to lib/fslib/vfatlib/check/byteswap1.h diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/lib/fslib/vfatlib/check/check.c similarity index 100% rename from reactos/lib/fslib/vfatlib/check/check.c rename to lib/fslib/vfatlib/check/check.c diff --git a/reactos/lib/fslib/vfatlib/check/check.h b/lib/fslib/vfatlib/check/check.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/check.h rename to lib/fslib/vfatlib/check/check.h diff --git a/reactos/lib/fslib/vfatlib/check/common.c b/lib/fslib/vfatlib/check/common.c similarity index 100% rename from reactos/lib/fslib/vfatlib/check/common.c rename to lib/fslib/vfatlib/check/common.c diff --git a/reactos/lib/fslib/vfatlib/check/common.h b/lib/fslib/vfatlib/check/common.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/common.h rename to lib/fslib/vfatlib/check/common.h diff --git a/reactos/lib/fslib/vfatlib/check/compiler.h b/lib/fslib/vfatlib/check/compiler.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/compiler.h rename to lib/fslib/vfatlib/check/compiler.h diff --git a/reactos/lib/fslib/vfatlib/check/dosfsck.h b/lib/fslib/vfatlib/check/dosfsck.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/dosfsck.h rename to lib/fslib/vfatlib/check/dosfsck.h diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/lib/fslib/vfatlib/check/fat.c similarity index 100% rename from reactos/lib/fslib/vfatlib/check/fat.c rename to lib/fslib/vfatlib/check/fat.c diff --git a/reactos/lib/fslib/vfatlib/check/fat.h b/lib/fslib/vfatlib/check/fat.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/fat.h rename to lib/fslib/vfatlib/check/fat.h diff --git a/reactos/lib/fslib/vfatlib/check/file.c b/lib/fslib/vfatlib/check/file.c similarity index 100% rename from reactos/lib/fslib/vfatlib/check/file.c rename to lib/fslib/vfatlib/check/file.c diff --git a/reactos/lib/fslib/vfatlib/check/file.h b/lib/fslib/vfatlib/check/file.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/file.h rename to lib/fslib/vfatlib/check/file.h diff --git a/reactos/lib/fslib/vfatlib/check/io.c b/lib/fslib/vfatlib/check/io.c similarity index 100% rename from reactos/lib/fslib/vfatlib/check/io.c rename to lib/fslib/vfatlib/check/io.c diff --git a/reactos/lib/fslib/vfatlib/check/io.h b/lib/fslib/vfatlib/check/io.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/io.h rename to lib/fslib/vfatlib/check/io.h diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/lib/fslib/vfatlib/check/lfn.c similarity index 100% rename from reactos/lib/fslib/vfatlib/check/lfn.c rename to lib/fslib/vfatlib/check/lfn.c diff --git a/reactos/lib/fslib/vfatlib/check/lfn.h b/lib/fslib/vfatlib/check/lfn.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/lfn.h rename to lib/fslib/vfatlib/check/lfn.h diff --git a/reactos/lib/fslib/vfatlib/check/msdos_fs.h b/lib/fslib/vfatlib/check/msdos_fs.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/msdos_fs.h rename to lib/fslib/vfatlib/check/msdos_fs.h diff --git a/reactos/lib/fslib/vfatlib/check/swab.h b/lib/fslib/vfatlib/check/swab.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/swab.h rename to lib/fslib/vfatlib/check/swab.h diff --git a/reactos/lib/fslib/vfatlib/check/version.h b/lib/fslib/vfatlib/check/version.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/version.h rename to lib/fslib/vfatlib/check/version.h diff --git a/reactos/lib/fslib/vfatlib/check/vfat.h b/lib/fslib/vfatlib/check/vfat.h similarity index 100% rename from reactos/lib/fslib/vfatlib/check/vfat.h rename to lib/fslib/vfatlib/check/vfat.h diff --git a/reactos/lib/fslib/vfatlib/fat12.c b/lib/fslib/vfatlib/fat12.c similarity index 100% rename from reactos/lib/fslib/vfatlib/fat12.c rename to lib/fslib/vfatlib/fat12.c diff --git a/reactos/lib/fslib/vfatlib/fat16.c b/lib/fslib/vfatlib/fat16.c similarity index 100% rename from reactos/lib/fslib/vfatlib/fat16.c rename to lib/fslib/vfatlib/fat16.c diff --git a/reactos/lib/fslib/vfatlib/fat32.c b/lib/fslib/vfatlib/fat32.c similarity index 100% rename from reactos/lib/fslib/vfatlib/fat32.c rename to lib/fslib/vfatlib/fat32.c diff --git a/reactos/lib/fslib/vfatlib/vfatlib.c b/lib/fslib/vfatlib/vfatlib.c similarity index 100% rename from reactos/lib/fslib/vfatlib/vfatlib.c rename to lib/fslib/vfatlib/vfatlib.c diff --git a/reactos/lib/fslib/vfatlib/vfatlib.h b/lib/fslib/vfatlib/vfatlib.h similarity index 100% rename from reactos/lib/fslib/vfatlib/vfatlib.h rename to lib/fslib/vfatlib/vfatlib.h diff --git a/reactos/lib/fslib/vfatlib/vfatlib.rbuild b/lib/fslib/vfatlib/vfatlib.rbuild similarity index 100% rename from reactos/lib/fslib/vfatlib/vfatlib.rbuild rename to lib/fslib/vfatlib/vfatlib.rbuild diff --git a/reactos/lib/fslib/vfatxlib/fatx.c b/lib/fslib/vfatxlib/fatx.c similarity index 100% rename from reactos/lib/fslib/vfatxlib/fatx.c rename to lib/fslib/vfatxlib/fatx.c diff --git a/reactos/lib/fslib/vfatxlib/vfatxlib.c b/lib/fslib/vfatxlib/vfatxlib.c similarity index 100% rename from reactos/lib/fslib/vfatxlib/vfatxlib.c rename to lib/fslib/vfatxlib/vfatxlib.c diff --git a/reactos/lib/fslib/vfatxlib/vfatxlib.h b/lib/fslib/vfatxlib/vfatxlib.h similarity index 100% rename from reactos/lib/fslib/vfatxlib/vfatxlib.h rename to lib/fslib/vfatxlib/vfatxlib.h diff --git a/reactos/lib/fslib/vfatxlib/vfatxlib.rbuild b/lib/fslib/vfatxlib/vfatxlib.rbuild similarity index 100% rename from reactos/lib/fslib/vfatxlib/vfatxlib.rbuild rename to lib/fslib/vfatxlib/vfatxlib.rbuild diff --git a/reactos/lib/host/directory.rbuild b/lib/host/directory.rbuild similarity index 100% rename from reactos/lib/host/directory.rbuild rename to lib/host/directory.rbuild diff --git a/reactos/lib/host/wcsfuncs/wcsfuncs.c b/lib/host/wcsfuncs/wcsfuncs.c similarity index 100% rename from reactos/lib/host/wcsfuncs/wcsfuncs.c rename to lib/host/wcsfuncs/wcsfuncs.c diff --git a/reactos/lib/host/wcsfuncs/wcsfuncs.rbuild b/lib/host/wcsfuncs/wcsfuncs.rbuild similarity index 100% rename from reactos/lib/host/wcsfuncs/wcsfuncs.rbuild rename to lib/host/wcsfuncs/wcsfuncs.rbuild diff --git a/reactos/lib/inflib/README.txt b/lib/inflib/README.txt similarity index 100% rename from reactos/lib/inflib/README.txt rename to lib/inflib/README.txt diff --git a/reactos/lib/inflib/builddep.h b/lib/inflib/builddep.h similarity index 100% rename from reactos/lib/inflib/builddep.h rename to lib/inflib/builddep.h diff --git a/reactos/lib/inflib/infcommon.h b/lib/inflib/infcommon.h similarity index 100% rename from reactos/lib/inflib/infcommon.h rename to lib/inflib/infcommon.h diff --git a/reactos/lib/inflib/infcore.c b/lib/inflib/infcore.c similarity index 100% rename from reactos/lib/inflib/infcore.c rename to lib/inflib/infcore.c diff --git a/reactos/lib/inflib/infget.c b/lib/inflib/infget.c similarity index 100% rename from reactos/lib/inflib/infget.c rename to lib/inflib/infget.c diff --git a/reactos/lib/inflib/infhost.h b/lib/inflib/infhost.h similarity index 100% rename from reactos/lib/inflib/infhost.h rename to lib/inflib/infhost.h diff --git a/reactos/lib/inflib/infhostgen.c b/lib/inflib/infhostgen.c similarity index 100% rename from reactos/lib/inflib/infhostgen.c rename to lib/inflib/infhostgen.c diff --git a/reactos/lib/inflib/infhostget.c b/lib/inflib/infhostget.c similarity index 100% rename from reactos/lib/inflib/infhostget.c rename to lib/inflib/infhostget.c diff --git a/reactos/lib/inflib/infhostput.c b/lib/inflib/infhostput.c similarity index 100% rename from reactos/lib/inflib/infhostput.c rename to lib/inflib/infhostput.c diff --git a/reactos/lib/inflib/inflib.h b/lib/inflib/inflib.h similarity index 100% rename from reactos/lib/inflib/inflib.h rename to lib/inflib/inflib.h diff --git a/reactos/lib/inflib/inflib.mak b/lib/inflib/inflib.mak similarity index 100% rename from reactos/lib/inflib/inflib.mak rename to lib/inflib/inflib.mak diff --git a/reactos/lib/inflib/inflib.rbuild b/lib/inflib/inflib.rbuild similarity index 100% rename from reactos/lib/inflib/inflib.rbuild rename to lib/inflib/inflib.rbuild diff --git a/reactos/lib/inflib/infpriv.h b/lib/inflib/infpriv.h similarity index 100% rename from reactos/lib/inflib/infpriv.h rename to lib/inflib/infpriv.h diff --git a/reactos/lib/inflib/infput.c b/lib/inflib/infput.c similarity index 100% rename from reactos/lib/inflib/infput.c rename to lib/inflib/infput.c diff --git a/reactos/lib/inflib/infros.h b/lib/inflib/infros.h similarity index 100% rename from reactos/lib/inflib/infros.h rename to lib/inflib/infros.h diff --git a/reactos/lib/inflib/infrosgen.c b/lib/inflib/infrosgen.c similarity index 100% rename from reactos/lib/inflib/infrosgen.c rename to lib/inflib/infrosgen.c diff --git a/reactos/lib/inflib/infrosget.c b/lib/inflib/infrosget.c similarity index 100% rename from reactos/lib/inflib/infrosget.c rename to lib/inflib/infrosget.c diff --git a/reactos/lib/inflib/infrosput.c b/lib/inflib/infrosput.c similarity index 100% rename from reactos/lib/inflib/infrosput.c rename to lib/inflib/infrosput.c diff --git a/reactos/lib/lib.mak b/lib/lib.mak similarity index 100% rename from reactos/lib/lib.mak rename to lib/lib.mak diff --git a/reactos/lib/lib.rbuild b/lib/lib.rbuild similarity index 100% rename from reactos/lib/lib.rbuild rename to lib/lib.rbuild diff --git a/reactos/lib/nls/idna/idna.cpp b/lib/nls/idna/idna.cpp similarity index 100% rename from reactos/lib/nls/idna/idna.cpp rename to lib/nls/idna/idna.cpp diff --git a/reactos/lib/nls/idna/idna.rbuild b/lib/nls/idna/idna.rbuild similarity index 100% rename from reactos/lib/nls/idna/idna.rbuild rename to lib/nls/idna/idna.rbuild diff --git a/reactos/lib/nls/idna/nameprep.cpp b/lib/nls/idna/nameprep.cpp similarity index 100% rename from reactos/lib/nls/idna/nameprep.cpp rename to lib/nls/idna/nameprep.cpp diff --git a/reactos/lib/nls/nls.rbuild b/lib/nls/nls.rbuild similarity index 100% rename from reactos/lib/nls/nls.rbuild rename to lib/nls/nls.rbuild diff --git a/reactos/lib/nls/normalize/normalize.cpp b/lib/nls/normalize/normalize.cpp similarity index 100% rename from reactos/lib/nls/normalize/normalize.cpp rename to lib/nls/normalize/normalize.cpp diff --git a/reactos/lib/nls/normalize/normalize.rbuild b/lib/nls/normalize/normalize.rbuild similarity index 100% rename from reactos/lib/nls/normalize/normalize.rbuild rename to lib/nls/normalize/normalize.rbuild diff --git a/reactos/lib/nls/scripts/scripts.cpp b/lib/nls/scripts/scripts.cpp similarity index 100% rename from reactos/lib/nls/scripts/scripts.cpp rename to lib/nls/scripts/scripts.cpp diff --git a/reactos/lib/nls/scripts/scripts.h b/lib/nls/scripts/scripts.h similarity index 100% rename from reactos/lib/nls/scripts/scripts.h rename to lib/nls/scripts/scripts.h diff --git a/reactos/lib/nls/scripts/scripts.rbuild b/lib/nls/scripts/scripts.rbuild similarity index 100% rename from reactos/lib/nls/scripts/scripts.rbuild rename to lib/nls/scripts/scripts.rbuild diff --git a/reactos/lib/ntdllsys/ntdllsys.rbuild b/lib/ntdllsys/ntdllsys.rbuild similarity index 100% rename from reactos/lib/ntdllsys/ntdllsys.rbuild rename to lib/ntdllsys/ntdllsys.rbuild diff --git a/reactos/lib/ppcmmu/devint.s b/lib/ppcmmu/devint.s similarity index 100% rename from reactos/lib/ppcmmu/devint.s rename to lib/ppcmmu/devint.s diff --git a/reactos/lib/ppcmmu/dummy.c b/lib/ppcmmu/dummy.c similarity index 100% rename from reactos/lib/ppcmmu/dummy.c rename to lib/ppcmmu/dummy.c diff --git a/reactos/lib/ppcmmu/gdblib.c b/lib/ppcmmu/gdblib.c similarity index 100% rename from reactos/lib/ppcmmu/gdblib.c rename to lib/ppcmmu/gdblib.c diff --git a/reactos/lib/ppcmmu/ldscript b/lib/ppcmmu/ldscript similarity index 100% rename from reactos/lib/ppcmmu/ldscript rename to lib/ppcmmu/ldscript diff --git a/reactos/lib/ppcmmu/mmuobject.c b/lib/ppcmmu/mmuobject.c similarity index 100% rename from reactos/lib/ppcmmu/mmuobject.c rename to lib/ppcmmu/mmuobject.c diff --git a/reactos/lib/ppcmmu/mmuobject.h b/lib/ppcmmu/mmuobject.h similarity index 100% rename from reactos/lib/ppcmmu/mmuobject.h rename to lib/ppcmmu/mmuobject.h diff --git a/reactos/lib/ppcmmu/mmutest.c b/lib/ppcmmu/mmutest.c similarity index 100% rename from reactos/lib/ppcmmu/mmutest.c rename to lib/ppcmmu/mmutest.c diff --git a/reactos/lib/ppcmmu/mmuutil.c b/lib/ppcmmu/mmuutil.c similarity index 100% rename from reactos/lib/ppcmmu/mmuutil.c rename to lib/ppcmmu/mmuutil.c diff --git a/reactos/lib/ppcmmu/ppcmmu.mak b/lib/ppcmmu/ppcmmu.mak similarity index 100% rename from reactos/lib/ppcmmu/ppcmmu.mak rename to lib/ppcmmu/ppcmmu.mak diff --git a/reactos/lib/ppcmmu/ppcmmu.rbuild b/lib/ppcmmu/ppcmmu.rbuild similarity index 100% rename from reactos/lib/ppcmmu/ppcmmu.rbuild rename to lib/ppcmmu/ppcmmu.rbuild diff --git a/reactos/lib/pseh/framebased.c b/lib/pseh/framebased.c similarity index 100% rename from reactos/lib/pseh/framebased.c rename to lib/pseh/framebased.c diff --git a/reactos/lib/pseh/i386/framebased.S b/lib/pseh/i386/framebased.S similarity index 100% rename from reactos/lib/pseh/i386/framebased.S rename to lib/pseh/i386/framebased.S diff --git a/reactos/lib/pseh/powerpc/framebased.S b/lib/pseh/powerpc/framebased.S similarity index 100% rename from reactos/lib/pseh/powerpc/framebased.S rename to lib/pseh/powerpc/framebased.S diff --git a/reactos/lib/pseh/pseh.rbuild b/lib/pseh/pseh.rbuild similarity index 100% rename from reactos/lib/pseh/pseh.rbuild rename to lib/pseh/pseh.rbuild diff --git a/reactos/lib/recyclebin/guid.c b/lib/recyclebin/guid.c similarity index 100% rename from reactos/lib/recyclebin/guid.c rename to lib/recyclebin/guid.c diff --git a/reactos/lib/recyclebin/readme.txt b/lib/recyclebin/readme.txt similarity index 100% rename from reactos/lib/recyclebin/readme.txt rename to lib/recyclebin/readme.txt diff --git a/reactos/lib/recyclebin/recyclebin.c b/lib/recyclebin/recyclebin.c similarity index 100% rename from reactos/lib/recyclebin/recyclebin.c rename to lib/recyclebin/recyclebin.c diff --git a/reactos/lib/recyclebin/recyclebin.h b/lib/recyclebin/recyclebin.h similarity index 100% rename from reactos/lib/recyclebin/recyclebin.h rename to lib/recyclebin/recyclebin.h diff --git a/reactos/lib/recyclebin/recyclebin.rbuild b/lib/recyclebin/recyclebin.rbuild similarity index 100% rename from reactos/lib/recyclebin/recyclebin.rbuild rename to lib/recyclebin/recyclebin.rbuild diff --git a/reactos/lib/recyclebin/recyclebin_generic.c b/lib/recyclebin/recyclebin_generic.c similarity index 100% rename from reactos/lib/recyclebin/recyclebin_generic.c rename to lib/recyclebin/recyclebin_generic.c diff --git a/reactos/lib/recyclebin/recyclebin_generic_enumerator.c b/lib/recyclebin/recyclebin_generic_enumerator.c similarity index 100% rename from reactos/lib/recyclebin/recyclebin_generic_enumerator.c rename to lib/recyclebin/recyclebin_generic_enumerator.c diff --git a/reactos/lib/recyclebin/recyclebin_private.h b/lib/recyclebin/recyclebin_private.h similarity index 100% rename from reactos/lib/recyclebin/recyclebin_private.h rename to lib/recyclebin/recyclebin_private.h diff --git a/reactos/lib/recyclebin/recyclebin_v5.c b/lib/recyclebin/recyclebin_v5.c similarity index 100% rename from reactos/lib/recyclebin/recyclebin_v5.c rename to lib/recyclebin/recyclebin_v5.c diff --git a/reactos/lib/recyclebin/recyclebin_v5.h b/lib/recyclebin/recyclebin_v5.h similarity index 100% rename from reactos/lib/recyclebin/recyclebin_v5.h rename to lib/recyclebin/recyclebin_v5.h diff --git a/reactos/lib/recyclebin/recyclebin_v5_enumerator.c b/lib/recyclebin/recyclebin_v5_enumerator.c similarity index 100% rename from reactos/lib/recyclebin/recyclebin_v5_enumerator.c rename to lib/recyclebin/recyclebin_v5_enumerator.c diff --git a/reactos/lib/rossym/delete.c b/lib/rossym/delete.c similarity index 100% rename from reactos/lib/rossym/delete.c rename to lib/rossym/delete.c diff --git a/reactos/lib/rossym/find.c b/lib/rossym/find.c similarity index 100% rename from reactos/lib/rossym/find.c rename to lib/rossym/find.c diff --git a/reactos/lib/rossym/fromfile.c b/lib/rossym/fromfile.c similarity index 100% rename from reactos/lib/rossym/fromfile.c rename to lib/rossym/fromfile.c diff --git a/reactos/lib/rossym/frommem.c b/lib/rossym/frommem.c similarity index 100% rename from reactos/lib/rossym/frommem.c rename to lib/rossym/frommem.c diff --git a/reactos/lib/rossym/fromraw.c b/lib/rossym/fromraw.c similarity index 100% rename from reactos/lib/rossym/fromraw.c rename to lib/rossym/fromraw.c diff --git a/reactos/lib/rossym/getraw.c b/lib/rossym/getraw.c similarity index 100% rename from reactos/lib/rossym/getraw.c rename to lib/rossym/getraw.c diff --git a/reactos/lib/rossym/init.c b/lib/rossym/init.c similarity index 100% rename from reactos/lib/rossym/init.c rename to lib/rossym/init.c diff --git a/reactos/lib/rossym/initkm.c b/lib/rossym/initkm.c similarity index 100% rename from reactos/lib/rossym/initkm.c rename to lib/rossym/initkm.c diff --git a/reactos/lib/rossym/initum.c b/lib/rossym/initum.c similarity index 100% rename from reactos/lib/rossym/initum.c rename to lib/rossym/initum.c diff --git a/reactos/lib/rossym/rossym.rbuild b/lib/rossym/rossym.rbuild similarity index 100% rename from reactos/lib/rossym/rossym.rbuild rename to lib/rossym/rossym.rbuild diff --git a/reactos/lib/rossym/rossympriv.h b/lib/rossym/rossympriv.h similarity index 100% rename from reactos/lib/rossym/rossympriv.h rename to lib/rossym/rossympriv.h diff --git a/reactos/lib/rossym/zwfile.c b/lib/rossym/zwfile.c similarity index 100% rename from reactos/lib/rossym/zwfile.c rename to lib/rossym/zwfile.c diff --git a/reactos/lib/rtl/access.c b/lib/rtl/access.c similarity index 100% rename from reactos/lib/rtl/access.c rename to lib/rtl/access.c diff --git a/reactos/lib/rtl/acl.c b/lib/rtl/acl.c similarity index 100% rename from reactos/lib/rtl/acl.c rename to lib/rtl/acl.c diff --git a/reactos/lib/rtl/actctx.c b/lib/rtl/actctx.c similarity index 100% rename from reactos/lib/rtl/actctx.c rename to lib/rtl/actctx.c diff --git a/reactos/lib/rtl/arm/debug_asm.S b/lib/rtl/arm/debug_asm.S similarity index 100% rename from reactos/lib/rtl/arm/debug_asm.S rename to lib/rtl/arm/debug_asm.S diff --git a/reactos/lib/rtl/atom.c b/lib/rtl/atom.c similarity index 100% rename from reactos/lib/rtl/atom.c rename to lib/rtl/atom.c diff --git a/reactos/lib/rtl/austin/avl.c b/lib/rtl/austin/avl.c similarity index 100% rename from reactos/lib/rtl/austin/avl.c rename to lib/rtl/austin/avl.c diff --git a/reactos/lib/rtl/austin/avl.h b/lib/rtl/austin/avl.h similarity index 100% rename from reactos/lib/rtl/austin/avl.h rename to lib/rtl/austin/avl.h diff --git a/reactos/lib/rtl/austin/macros.h b/lib/rtl/austin/macros.h similarity index 100% rename from reactos/lib/rtl/austin/macros.h rename to lib/rtl/austin/macros.h diff --git a/reactos/lib/rtl/austin/tree.c b/lib/rtl/austin/tree.c similarity index 100% rename from reactos/lib/rtl/austin/tree.c rename to lib/rtl/austin/tree.c diff --git a/reactos/lib/rtl/austin/tree.h b/lib/rtl/austin/tree.h similarity index 100% rename from reactos/lib/rtl/austin/tree.h rename to lib/rtl/austin/tree.h diff --git a/reactos/lib/rtl/austin/udict.h b/lib/rtl/austin/udict.h similarity index 100% rename from reactos/lib/rtl/austin/udict.h rename to lib/rtl/austin/udict.h diff --git a/reactos/lib/rtl/bitmap.c b/lib/rtl/bitmap.c similarity index 100% rename from reactos/lib/rtl/bitmap.c rename to lib/rtl/bitmap.c diff --git a/reactos/lib/rtl/bootdata.c b/lib/rtl/bootdata.c similarity index 100% rename from reactos/lib/rtl/bootdata.c rename to lib/rtl/bootdata.c diff --git a/reactos/lib/rtl/compress.c b/lib/rtl/compress.c similarity index 100% rename from reactos/lib/rtl/compress.c rename to lib/rtl/compress.c diff --git a/reactos/lib/rtl/condvar.c b/lib/rtl/condvar.c similarity index 100% rename from reactos/lib/rtl/condvar.c rename to lib/rtl/condvar.c diff --git a/reactos/lib/rtl/crc32.c b/lib/rtl/crc32.c similarity index 100% rename from reactos/lib/rtl/crc32.c rename to lib/rtl/crc32.c diff --git a/reactos/lib/rtl/critical.c b/lib/rtl/critical.c similarity index 100% rename from reactos/lib/rtl/critical.c rename to lib/rtl/critical.c diff --git a/reactos/lib/rtl/dbgbuffer.c b/lib/rtl/dbgbuffer.c similarity index 100% rename from reactos/lib/rtl/dbgbuffer.c rename to lib/rtl/dbgbuffer.c diff --git a/reactos/lib/rtl/debug.c b/lib/rtl/debug.c similarity index 100% rename from reactos/lib/rtl/debug.c rename to lib/rtl/debug.c diff --git a/reactos/lib/rtl/dos8dot3.c b/lib/rtl/dos8dot3.c similarity index 100% rename from reactos/lib/rtl/dos8dot3.c rename to lib/rtl/dos8dot3.c diff --git a/reactos/lib/rtl/encode.c b/lib/rtl/encode.c similarity index 100% rename from reactos/lib/rtl/encode.c rename to lib/rtl/encode.c diff --git a/reactos/lib/rtl/env.c b/lib/rtl/env.c similarity index 100% rename from reactos/lib/rtl/env.c rename to lib/rtl/env.c diff --git a/reactos/lib/rtl/error.c b/lib/rtl/error.c similarity index 100% rename from reactos/lib/rtl/error.c rename to lib/rtl/error.c diff --git a/reactos/lib/rtl/exception.c b/lib/rtl/exception.c similarity index 100% rename from reactos/lib/rtl/exception.c rename to lib/rtl/exception.c diff --git a/reactos/lib/rtl/generictable.c b/lib/rtl/generictable.c similarity index 100% rename from reactos/lib/rtl/generictable.c rename to lib/rtl/generictable.c diff --git a/reactos/lib/rtl/handle.c b/lib/rtl/handle.c similarity index 100% rename from reactos/lib/rtl/handle.c rename to lib/rtl/handle.c diff --git a/reactos/lib/rtl/heap.c b/lib/rtl/heap.c similarity index 100% rename from reactos/lib/rtl/heap.c rename to lib/rtl/heap.c diff --git a/reactos/lib/rtl/i386/debug_asm.S b/lib/rtl/i386/debug_asm.S similarity index 100% rename from reactos/lib/rtl/i386/debug_asm.S rename to lib/rtl/i386/debug_asm.S diff --git a/reactos/lib/rtl/i386/except.c b/lib/rtl/i386/except.c similarity index 100% rename from reactos/lib/rtl/i386/except.c rename to lib/rtl/i386/except.c diff --git a/reactos/lib/rtl/i386/except_asm.s b/lib/rtl/i386/except_asm.s similarity index 100% rename from reactos/lib/rtl/i386/except_asm.s rename to lib/rtl/i386/except_asm.s diff --git a/reactos/lib/rtl/i386/random_asm.S b/lib/rtl/i386/random_asm.S similarity index 100% rename from reactos/lib/rtl/i386/random_asm.S rename to lib/rtl/i386/random_asm.S diff --git a/reactos/lib/rtl/i386/res_asm.s b/lib/rtl/i386/res_asm.s similarity index 100% rename from reactos/lib/rtl/i386/res_asm.s rename to lib/rtl/i386/res_asm.s diff --git a/reactos/lib/rtl/i386/rtlmem.s b/lib/rtl/i386/rtlmem.s similarity index 100% rename from reactos/lib/rtl/i386/rtlmem.s rename to lib/rtl/i386/rtlmem.s diff --git a/reactos/lib/rtl/i386/rtlswap.S b/lib/rtl/i386/rtlswap.S similarity index 100% rename from reactos/lib/rtl/i386/rtlswap.S rename to lib/rtl/i386/rtlswap.S diff --git a/reactos/lib/rtl/i386/thread.c b/lib/rtl/i386/thread.c similarity index 100% rename from reactos/lib/rtl/i386/thread.c rename to lib/rtl/i386/thread.c diff --git a/reactos/lib/rtl/image.c b/lib/rtl/image.c similarity index 100% rename from reactos/lib/rtl/image.c rename to lib/rtl/image.c diff --git a/reactos/lib/rtl/interlck.c b/lib/rtl/interlck.c similarity index 100% rename from reactos/lib/rtl/interlck.c rename to lib/rtl/interlck.c diff --git a/reactos/lib/rtl/largeint.c b/lib/rtl/largeint.c similarity index 100% rename from reactos/lib/rtl/largeint.c rename to lib/rtl/largeint.c diff --git a/reactos/lib/rtl/luid.c b/lib/rtl/luid.c similarity index 100% rename from reactos/lib/rtl/luid.c rename to lib/rtl/luid.c diff --git a/reactos/lib/rtl/mem.c b/lib/rtl/mem.c similarity index 100% rename from reactos/lib/rtl/mem.c rename to lib/rtl/mem.c diff --git a/reactos/lib/rtl/memgen.c b/lib/rtl/memgen.c similarity index 100% rename from reactos/lib/rtl/memgen.c rename to lib/rtl/memgen.c diff --git a/reactos/lib/rtl/message.c b/lib/rtl/message.c similarity index 100% rename from reactos/lib/rtl/message.c rename to lib/rtl/message.c diff --git a/reactos/lib/rtl/network.c b/lib/rtl/network.c similarity index 100% rename from reactos/lib/rtl/network.c rename to lib/rtl/network.c diff --git a/reactos/lib/rtl/nls.c b/lib/rtl/nls.c similarity index 100% rename from reactos/lib/rtl/nls.c rename to lib/rtl/nls.c diff --git a/reactos/lib/rtl/path.c b/lib/rtl/path.c similarity index 100% rename from reactos/lib/rtl/path.c rename to lib/rtl/path.c diff --git a/reactos/lib/rtl/powerpc/debug.c b/lib/rtl/powerpc/debug.c similarity index 100% rename from reactos/lib/rtl/powerpc/debug.c rename to lib/rtl/powerpc/debug.c diff --git a/reactos/lib/rtl/powerpc/except.c b/lib/rtl/powerpc/except.c similarity index 100% rename from reactos/lib/rtl/powerpc/except.c rename to lib/rtl/powerpc/except.c diff --git a/reactos/lib/rtl/powerpc/interlocked.c b/lib/rtl/powerpc/interlocked.c similarity index 100% rename from reactos/lib/rtl/powerpc/interlocked.c rename to lib/rtl/powerpc/interlocked.c diff --git a/reactos/lib/rtl/powerpc/rtlmem.s b/lib/rtl/powerpc/rtlmem.s similarity index 100% rename from reactos/lib/rtl/powerpc/rtlmem.s rename to lib/rtl/powerpc/rtlmem.s diff --git a/reactos/lib/rtl/powerpc/rtlswap.s b/lib/rtl/powerpc/rtlswap.s similarity index 100% rename from reactos/lib/rtl/powerpc/rtlswap.s rename to lib/rtl/powerpc/rtlswap.s diff --git a/reactos/lib/rtl/powerpc/thread.c b/lib/rtl/powerpc/thread.c similarity index 100% rename from reactos/lib/rtl/powerpc/thread.c rename to lib/rtl/powerpc/thread.c diff --git a/reactos/lib/rtl/ppb.c b/lib/rtl/ppb.c similarity index 100% rename from reactos/lib/rtl/ppb.c rename to lib/rtl/ppb.c diff --git a/reactos/lib/rtl/process.c b/lib/rtl/process.c similarity index 100% rename from reactos/lib/rtl/process.c rename to lib/rtl/process.c diff --git a/reactos/lib/rtl/propvar.c b/lib/rtl/propvar.c similarity index 100% rename from reactos/lib/rtl/propvar.c rename to lib/rtl/propvar.c diff --git a/reactos/lib/rtl/qsort.c b/lib/rtl/qsort.c similarity index 100% rename from reactos/lib/rtl/qsort.c rename to lib/rtl/qsort.c diff --git a/reactos/lib/rtl/random.c b/lib/rtl/random.c similarity index 100% rename from reactos/lib/rtl/random.c rename to lib/rtl/random.c diff --git a/reactos/lib/rtl/rangelist.c b/lib/rtl/rangelist.c similarity index 100% rename from reactos/lib/rtl/rangelist.c rename to lib/rtl/rangelist.c diff --git a/reactos/lib/rtl/readme.txt b/lib/rtl/readme.txt similarity index 100% rename from reactos/lib/rtl/readme.txt rename to lib/rtl/readme.txt diff --git a/reactos/lib/rtl/registry.c b/lib/rtl/registry.c similarity index 100% rename from reactos/lib/rtl/registry.c rename to lib/rtl/registry.c diff --git a/reactos/lib/rtl/res.c b/lib/rtl/res.c similarity index 100% rename from reactos/lib/rtl/res.c rename to lib/rtl/res.c diff --git a/reactos/lib/rtl/resource.c b/lib/rtl/resource.c similarity index 100% rename from reactos/lib/rtl/resource.c rename to lib/rtl/resource.c diff --git a/reactos/lib/rtl/rtl-common.rbuild b/lib/rtl/rtl-common.rbuild similarity index 100% rename from reactos/lib/rtl/rtl-common.rbuild rename to lib/rtl/rtl-common.rbuild diff --git a/reactos/lib/rtl/rtl.h b/lib/rtl/rtl.h similarity index 100% rename from reactos/lib/rtl/rtl.h rename to lib/rtl/rtl.h diff --git a/reactos/lib/rtl/rtl.rbuild b/lib/rtl/rtl.rbuild similarity index 100% rename from reactos/lib/rtl/rtl.rbuild rename to lib/rtl/rtl.rbuild diff --git a/reactos/lib/rtl/rtlp.h b/lib/rtl/rtlp.h similarity index 100% rename from reactos/lib/rtl/rtlp.h rename to lib/rtl/rtlp.h diff --git a/reactos/lib/rtl/sd.c b/lib/rtl/sd.c similarity index 100% rename from reactos/lib/rtl/sd.c rename to lib/rtl/sd.c diff --git a/reactos/lib/rtl/security.c b/lib/rtl/security.c similarity index 100% rename from reactos/lib/rtl/security.c rename to lib/rtl/security.c diff --git a/reactos/lib/rtl/sid.c b/lib/rtl/sid.c similarity index 100% rename from reactos/lib/rtl/sid.c rename to lib/rtl/sid.c diff --git a/reactos/lib/rtl/slist.c b/lib/rtl/slist.c similarity index 100% rename from reactos/lib/rtl/slist.c rename to lib/rtl/slist.c diff --git a/reactos/lib/rtl/splaytree.c b/lib/rtl/splaytree.c similarity index 100% rename from reactos/lib/rtl/splaytree.c rename to lib/rtl/splaytree.c diff --git a/reactos/lib/rtl/sprintf.c b/lib/rtl/sprintf.c similarity index 100% rename from reactos/lib/rtl/sprintf.c rename to lib/rtl/sprintf.c diff --git a/reactos/lib/rtl/srw.c b/lib/rtl/srw.c similarity index 100% rename from reactos/lib/rtl/srw.c rename to lib/rtl/srw.c diff --git a/reactos/lib/rtl/swprintf.c b/lib/rtl/swprintf.c similarity index 100% rename from reactos/lib/rtl/swprintf.c rename to lib/rtl/swprintf.c diff --git a/reactos/lib/rtl/thread.c b/lib/rtl/thread.c similarity index 100% rename from reactos/lib/rtl/thread.c rename to lib/rtl/thread.c diff --git a/reactos/lib/rtl/time.c b/lib/rtl/time.c similarity index 100% rename from reactos/lib/rtl/time.c rename to lib/rtl/time.c diff --git a/reactos/lib/rtl/timerqueue.c b/lib/rtl/timerqueue.c similarity index 100% rename from reactos/lib/rtl/timerqueue.c rename to lib/rtl/timerqueue.c diff --git a/reactos/lib/rtl/timezone.c b/lib/rtl/timezone.c similarity index 100% rename from reactos/lib/rtl/timezone.c rename to lib/rtl/timezone.c diff --git a/reactos/lib/rtl/unicode.c b/lib/rtl/unicode.c similarity index 100% rename from reactos/lib/rtl/unicode.c rename to lib/rtl/unicode.c diff --git a/reactos/lib/rtl/unicodeprefix.c b/lib/rtl/unicodeprefix.c similarity index 100% rename from reactos/lib/rtl/unicodeprefix.c rename to lib/rtl/unicodeprefix.c diff --git a/reactos/lib/rtl/vectoreh.c b/lib/rtl/vectoreh.c similarity index 100% rename from reactos/lib/rtl/vectoreh.c rename to lib/rtl/vectoreh.c diff --git a/reactos/lib/rtl/version.c b/lib/rtl/version.c similarity index 100% rename from reactos/lib/rtl/version.c rename to lib/rtl/version.c diff --git a/reactos/lib/rtl/wait.c b/lib/rtl/wait.c similarity index 100% rename from reactos/lib/rtl/wait.c rename to lib/rtl/wait.c diff --git a/reactos/lib/rtl/workitem.c b/lib/rtl/workitem.c similarity index 100% rename from reactos/lib/rtl/workitem.c rename to lib/rtl/workitem.c diff --git a/reactos/lib/sdk/crt/README.txt b/lib/sdk/crt/README.txt similarity index 100% rename from reactos/lib/sdk/crt/README.txt rename to lib/sdk/crt/README.txt diff --git a/reactos/lib/sdk/crt/conio/cgets.c b/lib/sdk/crt/conio/cgets.c similarity index 100% rename from reactos/lib/sdk/crt/conio/cgets.c rename to lib/sdk/crt/conio/cgets.c diff --git a/reactos/lib/sdk/crt/conio/cprintf.c b/lib/sdk/crt/conio/cprintf.c similarity index 100% rename from reactos/lib/sdk/crt/conio/cprintf.c rename to lib/sdk/crt/conio/cprintf.c diff --git a/reactos/lib/sdk/crt/conio/cputs.c b/lib/sdk/crt/conio/cputs.c similarity index 100% rename from reactos/lib/sdk/crt/conio/cputs.c rename to lib/sdk/crt/conio/cputs.c diff --git a/reactos/lib/sdk/crt/conio/getch.c b/lib/sdk/crt/conio/getch.c similarity index 100% rename from reactos/lib/sdk/crt/conio/getch.c rename to lib/sdk/crt/conio/getch.c diff --git a/reactos/lib/sdk/crt/conio/getche.c b/lib/sdk/crt/conio/getche.c similarity index 100% rename from reactos/lib/sdk/crt/conio/getche.c rename to lib/sdk/crt/conio/getche.c diff --git a/reactos/lib/sdk/crt/conio/kbhit.c b/lib/sdk/crt/conio/kbhit.c similarity index 100% rename from reactos/lib/sdk/crt/conio/kbhit.c rename to lib/sdk/crt/conio/kbhit.c diff --git a/reactos/lib/sdk/crt/conio/putch.c b/lib/sdk/crt/conio/putch.c similarity index 100% rename from reactos/lib/sdk/crt/conio/putch.c rename to lib/sdk/crt/conio/putch.c diff --git a/reactos/lib/sdk/crt/conio/ungetch.c b/lib/sdk/crt/conio/ungetch.c similarity index 100% rename from reactos/lib/sdk/crt/conio/ungetch.c rename to lib/sdk/crt/conio/ungetch.c diff --git a/reactos/lib/sdk/crt/crt.rbuild b/lib/sdk/crt/crt.rbuild similarity index 100% rename from reactos/lib/sdk/crt/crt.rbuild rename to lib/sdk/crt/crt.rbuild diff --git a/reactos/lib/sdk/crt/direct/chdir.c b/lib/sdk/crt/direct/chdir.c similarity index 100% rename from reactos/lib/sdk/crt/direct/chdir.c rename to lib/sdk/crt/direct/chdir.c diff --git a/reactos/lib/sdk/crt/direct/chdrive.c b/lib/sdk/crt/direct/chdrive.c similarity index 100% rename from reactos/lib/sdk/crt/direct/chdrive.c rename to lib/sdk/crt/direct/chdrive.c diff --git a/reactos/lib/sdk/crt/direct/getcwd.c b/lib/sdk/crt/direct/getcwd.c similarity index 100% rename from reactos/lib/sdk/crt/direct/getcwd.c rename to lib/sdk/crt/direct/getcwd.c diff --git a/reactos/lib/sdk/crt/direct/getdcwd.c b/lib/sdk/crt/direct/getdcwd.c similarity index 100% rename from reactos/lib/sdk/crt/direct/getdcwd.c rename to lib/sdk/crt/direct/getdcwd.c diff --git a/reactos/lib/sdk/crt/direct/getdfree.c b/lib/sdk/crt/direct/getdfree.c similarity index 100% rename from reactos/lib/sdk/crt/direct/getdfree.c rename to lib/sdk/crt/direct/getdfree.c diff --git a/reactos/lib/sdk/crt/direct/getdrive.c b/lib/sdk/crt/direct/getdrive.c similarity index 100% rename from reactos/lib/sdk/crt/direct/getdrive.c rename to lib/sdk/crt/direct/getdrive.c diff --git a/reactos/lib/sdk/crt/direct/mkdir.c b/lib/sdk/crt/direct/mkdir.c similarity index 100% rename from reactos/lib/sdk/crt/direct/mkdir.c rename to lib/sdk/crt/direct/mkdir.c diff --git a/reactos/lib/sdk/crt/direct/rmdir.c b/lib/sdk/crt/direct/rmdir.c similarity index 100% rename from reactos/lib/sdk/crt/direct/rmdir.c rename to lib/sdk/crt/direct/rmdir.c diff --git a/reactos/lib/sdk/crt/direct/wchdir.c b/lib/sdk/crt/direct/wchdir.c similarity index 100% rename from reactos/lib/sdk/crt/direct/wchdir.c rename to lib/sdk/crt/direct/wchdir.c diff --git a/reactos/lib/sdk/crt/direct/wgetcwd.c b/lib/sdk/crt/direct/wgetcwd.c similarity index 100% rename from reactos/lib/sdk/crt/direct/wgetcwd.c rename to lib/sdk/crt/direct/wgetcwd.c diff --git a/reactos/lib/sdk/crt/direct/wgetdcwd.c b/lib/sdk/crt/direct/wgetdcwd.c similarity index 100% rename from reactos/lib/sdk/crt/direct/wgetdcwd.c rename to lib/sdk/crt/direct/wgetdcwd.c diff --git a/reactos/lib/sdk/crt/direct/wmkdir.c b/lib/sdk/crt/direct/wmkdir.c similarity index 100% rename from reactos/lib/sdk/crt/direct/wmkdir.c rename to lib/sdk/crt/direct/wmkdir.c diff --git a/reactos/lib/sdk/crt/direct/wrmdir.c b/lib/sdk/crt/direct/wrmdir.c similarity index 100% rename from reactos/lib/sdk/crt/direct/wrmdir.c rename to lib/sdk/crt/direct/wrmdir.c diff --git a/reactos/lib/sdk/crt/except/abnorter.c b/lib/sdk/crt/except/abnorter.c similarity index 100% rename from reactos/lib/sdk/crt/except/abnorter.c rename to lib/sdk/crt/except/abnorter.c diff --git a/reactos/lib/sdk/crt/except/checkesp.c b/lib/sdk/crt/except/checkesp.c similarity index 100% rename from reactos/lib/sdk/crt/except/checkesp.c rename to lib/sdk/crt/except/checkesp.c diff --git a/reactos/lib/sdk/crt/except/cpp.c b/lib/sdk/crt/except/cpp.c similarity index 100% rename from reactos/lib/sdk/crt/except/cpp.c rename to lib/sdk/crt/except/cpp.c diff --git a/reactos/lib/sdk/crt/except/cppexcept.c b/lib/sdk/crt/except/cppexcept.c similarity index 100% rename from reactos/lib/sdk/crt/except/cppexcept.c rename to lib/sdk/crt/except/cppexcept.c diff --git a/reactos/lib/sdk/crt/except/i386/chkstk_asm.s b/lib/sdk/crt/except/i386/chkstk_asm.s similarity index 100% rename from reactos/lib/sdk/crt/except/i386/chkstk_asm.s rename to lib/sdk/crt/except/i386/chkstk_asm.s diff --git a/reactos/lib/sdk/crt/except/i386/prolog.s b/lib/sdk/crt/except/i386/prolog.s similarity index 100% rename from reactos/lib/sdk/crt/except/i386/prolog.s rename to lib/sdk/crt/except/i386/prolog.s diff --git a/reactos/lib/sdk/crt/except/i386/seh.s b/lib/sdk/crt/except/i386/seh.s similarity index 100% rename from reactos/lib/sdk/crt/except/i386/seh.s rename to lib/sdk/crt/except/i386/seh.s diff --git a/reactos/lib/sdk/crt/except/i386/unwind.c b/lib/sdk/crt/except/i386/unwind.c similarity index 100% rename from reactos/lib/sdk/crt/except/i386/unwind.c rename to lib/sdk/crt/except/i386/unwind.c diff --git a/reactos/lib/sdk/crt/except/matherr.c b/lib/sdk/crt/except/matherr.c similarity index 100% rename from reactos/lib/sdk/crt/except/matherr.c rename to lib/sdk/crt/except/matherr.c diff --git a/reactos/lib/sdk/crt/except/powerpc/chkstk_asm.s b/lib/sdk/crt/except/powerpc/chkstk_asm.s similarity index 100% rename from reactos/lib/sdk/crt/except/powerpc/chkstk_asm.s rename to lib/sdk/crt/except/powerpc/chkstk_asm.s diff --git a/reactos/lib/sdk/crt/except/powerpc/seh.s b/lib/sdk/crt/except/powerpc/seh.s similarity index 100% rename from reactos/lib/sdk/crt/except/powerpc/seh.s rename to lib/sdk/crt/except/powerpc/seh.s diff --git a/reactos/lib/sdk/crt/except/xcptfil.c b/lib/sdk/crt/except/xcptfil.c similarity index 100% rename from reactos/lib/sdk/crt/except/xcptfil.c rename to lib/sdk/crt/except/xcptfil.c diff --git a/reactos/lib/sdk/crt/float/chgsign.c b/lib/sdk/crt/float/chgsign.c similarity index 100% rename from reactos/lib/sdk/crt/float/chgsign.c rename to lib/sdk/crt/float/chgsign.c diff --git a/reactos/lib/sdk/crt/float/copysign.c b/lib/sdk/crt/float/copysign.c similarity index 100% rename from reactos/lib/sdk/crt/float/copysign.c rename to lib/sdk/crt/float/copysign.c diff --git a/reactos/lib/sdk/crt/float/fpclass.c b/lib/sdk/crt/float/fpclass.c similarity index 100% rename from reactos/lib/sdk/crt/float/fpclass.c rename to lib/sdk/crt/float/fpclass.c diff --git a/reactos/lib/sdk/crt/float/fpecode.c b/lib/sdk/crt/float/fpecode.c similarity index 100% rename from reactos/lib/sdk/crt/float/fpecode.c rename to lib/sdk/crt/float/fpecode.c diff --git a/reactos/lib/sdk/crt/float/fpreset.c b/lib/sdk/crt/float/fpreset.c similarity index 100% rename from reactos/lib/sdk/crt/float/fpreset.c rename to lib/sdk/crt/float/fpreset.c diff --git a/reactos/lib/sdk/crt/float/i386/clearfp.c b/lib/sdk/crt/float/i386/clearfp.c similarity index 100% rename from reactos/lib/sdk/crt/float/i386/clearfp.c rename to lib/sdk/crt/float/i386/clearfp.c diff --git a/reactos/lib/sdk/crt/float/i386/cntrlfp.c b/lib/sdk/crt/float/i386/cntrlfp.c similarity index 100% rename from reactos/lib/sdk/crt/float/i386/cntrlfp.c rename to lib/sdk/crt/float/i386/cntrlfp.c diff --git a/reactos/lib/sdk/crt/float/i386/logb.c b/lib/sdk/crt/float/i386/logb.c similarity index 100% rename from reactos/lib/sdk/crt/float/i386/logb.c rename to lib/sdk/crt/float/i386/logb.c diff --git a/reactos/lib/sdk/crt/float/i386/statfp.c b/lib/sdk/crt/float/i386/statfp.c similarity index 100% rename from reactos/lib/sdk/crt/float/i386/statfp.c rename to lib/sdk/crt/float/i386/statfp.c diff --git a/reactos/lib/sdk/crt/float/isnan.c b/lib/sdk/crt/float/isnan.c similarity index 100% rename from reactos/lib/sdk/crt/float/isnan.c rename to lib/sdk/crt/float/isnan.c diff --git a/reactos/lib/sdk/crt/float/nafter.c b/lib/sdk/crt/float/nafter.c similarity index 100% rename from reactos/lib/sdk/crt/float/nafter.c rename to lib/sdk/crt/float/nafter.c diff --git a/reactos/lib/sdk/crt/float/scalb.c b/lib/sdk/crt/float/scalb.c similarity index 100% rename from reactos/lib/sdk/crt/float/scalb.c rename to lib/sdk/crt/float/scalb.c diff --git a/reactos/lib/sdk/crt/include/float.h b/lib/sdk/crt/include/float.h similarity index 100% rename from reactos/lib/sdk/crt/include/float.h rename to lib/sdk/crt/include/float.h diff --git a/reactos/lib/sdk/crt/include/internal/atexit.h b/lib/sdk/crt/include/internal/atexit.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/atexit.h rename to lib/sdk/crt/include/internal/atexit.h diff --git a/reactos/lib/sdk/crt/include/internal/console.h b/lib/sdk/crt/include/internal/console.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/console.h rename to lib/sdk/crt/include/internal/console.h diff --git a/reactos/lib/sdk/crt/include/internal/file.h b/lib/sdk/crt/include/internal/file.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/file.h rename to lib/sdk/crt/include/internal/file.h diff --git a/reactos/lib/sdk/crt/include/internal/ieee.h b/lib/sdk/crt/include/internal/ieee.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/ieee.h rename to lib/sdk/crt/include/internal/ieee.h diff --git a/reactos/lib/sdk/crt/include/internal/math.h b/lib/sdk/crt/include/internal/math.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/math.h rename to lib/sdk/crt/include/internal/math.h diff --git a/reactos/lib/sdk/crt/include/internal/mbstring.h b/lib/sdk/crt/include/internal/mbstring.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/mbstring.h rename to lib/sdk/crt/include/internal/mbstring.h diff --git a/reactos/lib/sdk/crt/include/internal/mtdll.h b/lib/sdk/crt/include/internal/mtdll.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/mtdll.h rename to lib/sdk/crt/include/internal/mtdll.h diff --git a/reactos/lib/sdk/crt/include/internal/printf.h b/lib/sdk/crt/include/internal/printf.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/printf.h rename to lib/sdk/crt/include/internal/printf.h diff --git a/reactos/lib/sdk/crt/include/internal/rterror.h b/lib/sdk/crt/include/internal/rterror.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/rterror.h rename to lib/sdk/crt/include/internal/rterror.h diff --git a/reactos/lib/sdk/crt/include/internal/tls.h b/lib/sdk/crt/include/internal/tls.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/tls.h rename to lib/sdk/crt/include/internal/tls.h diff --git a/reactos/lib/sdk/crt/include/internal/wine/cppexcept.h b/lib/sdk/crt/include/internal/wine/cppexcept.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/wine/cppexcept.h rename to lib/sdk/crt/include/internal/wine/cppexcept.h diff --git a/reactos/lib/sdk/crt/include/internal/wine/eh.h b/lib/sdk/crt/include/internal/wine/eh.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/wine/eh.h rename to lib/sdk/crt/include/internal/wine/eh.h diff --git a/reactos/lib/sdk/crt/include/internal/wine/msvcrt.h b/lib/sdk/crt/include/internal/wine/msvcrt.h similarity index 100% rename from reactos/lib/sdk/crt/include/internal/wine/msvcrt.h rename to lib/sdk/crt/include/internal/wine/msvcrt.h diff --git a/reactos/lib/sdk/crt/libcntpr.rbuild b/lib/sdk/crt/libcntpr.rbuild similarity index 100% rename from reactos/lib/sdk/crt/libcntpr.rbuild rename to lib/sdk/crt/libcntpr.rbuild diff --git a/reactos/lib/sdk/crt/locale/locale.c b/lib/sdk/crt/locale/locale.c similarity index 100% rename from reactos/lib/sdk/crt/locale/locale.c rename to lib/sdk/crt/locale/locale.c diff --git a/reactos/lib/sdk/crt/math/abs.c b/lib/sdk/crt/math/abs.c similarity index 100% rename from reactos/lib/sdk/crt/math/abs.c rename to lib/sdk/crt/math/abs.c diff --git a/reactos/lib/sdk/crt/math/acos.c b/lib/sdk/crt/math/acos.c similarity index 100% rename from reactos/lib/sdk/crt/math/acos.c rename to lib/sdk/crt/math/acos.c diff --git a/reactos/lib/sdk/crt/math/adjust.c b/lib/sdk/crt/math/adjust.c similarity index 100% rename from reactos/lib/sdk/crt/math/adjust.c rename to lib/sdk/crt/math/adjust.c diff --git a/reactos/lib/sdk/crt/math/asin.c b/lib/sdk/crt/math/asin.c similarity index 100% rename from reactos/lib/sdk/crt/math/asin.c rename to lib/sdk/crt/math/asin.c diff --git a/reactos/lib/sdk/crt/math/cabs.c b/lib/sdk/crt/math/cabs.c similarity index 100% rename from reactos/lib/sdk/crt/math/cabs.c rename to lib/sdk/crt/math/cabs.c diff --git a/reactos/lib/sdk/crt/math/cosh.c b/lib/sdk/crt/math/cosh.c similarity index 100% rename from reactos/lib/sdk/crt/math/cosh.c rename to lib/sdk/crt/math/cosh.c diff --git a/reactos/lib/sdk/crt/math/div.c b/lib/sdk/crt/math/div.c similarity index 100% rename from reactos/lib/sdk/crt/math/div.c rename to lib/sdk/crt/math/div.c diff --git a/reactos/lib/sdk/crt/math/fdivbug.c b/lib/sdk/crt/math/fdivbug.c similarity index 100% rename from reactos/lib/sdk/crt/math/fdivbug.c rename to lib/sdk/crt/math/fdivbug.c diff --git a/reactos/lib/sdk/crt/math/frexp.c b/lib/sdk/crt/math/frexp.c similarity index 100% rename from reactos/lib/sdk/crt/math/frexp.c rename to lib/sdk/crt/math/frexp.c diff --git a/reactos/lib/sdk/crt/math/huge_val.c b/lib/sdk/crt/math/huge_val.c similarity index 100% rename from reactos/lib/sdk/crt/math/huge_val.c rename to lib/sdk/crt/math/huge_val.c diff --git a/reactos/lib/sdk/crt/math/hypot.c b/lib/sdk/crt/math/hypot.c similarity index 100% rename from reactos/lib/sdk/crt/math/hypot.c rename to lib/sdk/crt/math/hypot.c diff --git a/reactos/lib/sdk/crt/math/i386/alldiv_asm.s b/lib/sdk/crt/math/i386/alldiv_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/alldiv_asm.s rename to lib/sdk/crt/math/i386/alldiv_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/alldvrm_asm.s b/lib/sdk/crt/math/i386/alldvrm_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/alldvrm_asm.s rename to lib/sdk/crt/math/i386/alldvrm_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/allmul_asm.s b/lib/sdk/crt/math/i386/allmul_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/allmul_asm.s rename to lib/sdk/crt/math/i386/allmul_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/allrem_asm.s b/lib/sdk/crt/math/i386/allrem_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/allrem_asm.s rename to lib/sdk/crt/math/i386/allrem_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/allshl_asm.s b/lib/sdk/crt/math/i386/allshl_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/allshl_asm.s rename to lib/sdk/crt/math/i386/allshl_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/allshr_asm.s b/lib/sdk/crt/math/i386/allshr_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/allshr_asm.s rename to lib/sdk/crt/math/i386/allshr_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/atan2.c b/lib/sdk/crt/math/i386/atan2.c similarity index 100% rename from reactos/lib/sdk/crt/math/i386/atan2.c rename to lib/sdk/crt/math/i386/atan2.c diff --git a/reactos/lib/sdk/crt/math/i386/atan_asm.s b/lib/sdk/crt/math/i386/atan_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/atan_asm.s rename to lib/sdk/crt/math/i386/atan_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/aulldiv_asm.s b/lib/sdk/crt/math/i386/aulldiv_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/aulldiv_asm.s rename to lib/sdk/crt/math/i386/aulldiv_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/aulldvrm_asm.s b/lib/sdk/crt/math/i386/aulldvrm_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/aulldvrm_asm.s rename to lib/sdk/crt/math/i386/aulldvrm_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/aullrem_asm.s b/lib/sdk/crt/math/i386/aullrem_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/aullrem_asm.s rename to lib/sdk/crt/math/i386/aullrem_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/aullshr_asm.s b/lib/sdk/crt/math/i386/aullshr_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/aullshr_asm.s rename to lib/sdk/crt/math/i386/aullshr_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/ceil_asm.s b/lib/sdk/crt/math/i386/ceil_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/ceil_asm.s rename to lib/sdk/crt/math/i386/ceil_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/ci.c b/lib/sdk/crt/math/i386/ci.c similarity index 100% rename from reactos/lib/sdk/crt/math/i386/ci.c rename to lib/sdk/crt/math/i386/ci.c diff --git a/reactos/lib/sdk/crt/math/i386/cos_asm.s b/lib/sdk/crt/math/i386/cos_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/cos_asm.s rename to lib/sdk/crt/math/i386/cos_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/exp.c b/lib/sdk/crt/math/i386/exp.c similarity index 100% rename from reactos/lib/sdk/crt/math/i386/exp.c rename to lib/sdk/crt/math/i386/exp.c diff --git a/reactos/lib/sdk/crt/math/i386/fabs_asm.s b/lib/sdk/crt/math/i386/fabs_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/fabs_asm.s rename to lib/sdk/crt/math/i386/fabs_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/floor_asm.s b/lib/sdk/crt/math/i386/floor_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/floor_asm.s rename to lib/sdk/crt/math/i386/floor_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/fmod.c b/lib/sdk/crt/math/i386/fmod.c similarity index 100% rename from reactos/lib/sdk/crt/math/i386/fmod.c rename to lib/sdk/crt/math/i386/fmod.c diff --git a/reactos/lib/sdk/crt/math/i386/ftol_asm.s b/lib/sdk/crt/math/i386/ftol_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/ftol_asm.s rename to lib/sdk/crt/math/i386/ftol_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/ldexp.c b/lib/sdk/crt/math/i386/ldexp.c similarity index 100% rename from reactos/lib/sdk/crt/math/i386/ldexp.c rename to lib/sdk/crt/math/i386/ldexp.c diff --git a/reactos/lib/sdk/crt/math/i386/log10_asm.s b/lib/sdk/crt/math/i386/log10_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/log10_asm.s rename to lib/sdk/crt/math/i386/log10_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/log_asm.s b/lib/sdk/crt/math/i386/log_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/log_asm.s rename to lib/sdk/crt/math/i386/log_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/pow_asm.s b/lib/sdk/crt/math/i386/pow_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/pow_asm.s rename to lib/sdk/crt/math/i386/pow_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/sin_asm.s b/lib/sdk/crt/math/i386/sin_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/sin_asm.s rename to lib/sdk/crt/math/i386/sin_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/sqrt_asm.s b/lib/sdk/crt/math/i386/sqrt_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/sqrt_asm.s rename to lib/sdk/crt/math/i386/sqrt_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/tan_asm.s b/lib/sdk/crt/math/i386/tan_asm.s similarity index 100% rename from reactos/lib/sdk/crt/math/i386/tan_asm.s rename to lib/sdk/crt/math/i386/tan_asm.s diff --git a/reactos/lib/sdk/crt/math/j0_y0.c b/lib/sdk/crt/math/j0_y0.c similarity index 100% rename from reactos/lib/sdk/crt/math/j0_y0.c rename to lib/sdk/crt/math/j0_y0.c diff --git a/reactos/lib/sdk/crt/math/j1_y1.c b/lib/sdk/crt/math/j1_y1.c similarity index 100% rename from reactos/lib/sdk/crt/math/j1_y1.c rename to lib/sdk/crt/math/j1_y1.c diff --git a/reactos/lib/sdk/crt/math/jn_yn.c b/lib/sdk/crt/math/jn_yn.c similarity index 100% rename from reactos/lib/sdk/crt/math/jn_yn.c rename to lib/sdk/crt/math/jn_yn.c diff --git a/reactos/lib/sdk/crt/math/labs.c b/lib/sdk/crt/math/labs.c similarity index 100% rename from reactos/lib/sdk/crt/math/labs.c rename to lib/sdk/crt/math/labs.c diff --git a/reactos/lib/sdk/crt/math/ldiv.c b/lib/sdk/crt/math/ldiv.c similarity index 100% rename from reactos/lib/sdk/crt/math/ldiv.c rename to lib/sdk/crt/math/ldiv.c diff --git a/reactos/lib/sdk/crt/math/modf.c b/lib/sdk/crt/math/modf.c similarity index 100% rename from reactos/lib/sdk/crt/math/modf.c rename to lib/sdk/crt/math/modf.c diff --git a/reactos/lib/sdk/crt/math/pow_asm.c b/lib/sdk/crt/math/pow_asm.c similarity index 100% rename from reactos/lib/sdk/crt/math/pow_asm.c rename to lib/sdk/crt/math/pow_asm.c diff --git a/reactos/lib/sdk/crt/math/rand.c b/lib/sdk/crt/math/rand.c similarity index 100% rename from reactos/lib/sdk/crt/math/rand.c rename to lib/sdk/crt/math/rand.c diff --git a/reactos/lib/sdk/crt/math/rand_nt.c b/lib/sdk/crt/math/rand_nt.c similarity index 100% rename from reactos/lib/sdk/crt/math/rand_nt.c rename to lib/sdk/crt/math/rand_nt.c diff --git a/reactos/lib/sdk/crt/math/s_modf.c b/lib/sdk/crt/math/s_modf.c similarity index 100% rename from reactos/lib/sdk/crt/math/s_modf.c rename to lib/sdk/crt/math/s_modf.c diff --git a/reactos/lib/sdk/crt/math/sinh.c b/lib/sdk/crt/math/sinh.c similarity index 100% rename from reactos/lib/sdk/crt/math/sinh.c rename to lib/sdk/crt/math/sinh.c diff --git a/reactos/lib/sdk/crt/math/stubs.c b/lib/sdk/crt/math/stubs.c similarity index 100% rename from reactos/lib/sdk/crt/math/stubs.c rename to lib/sdk/crt/math/stubs.c diff --git a/reactos/lib/sdk/crt/math/tanh.c b/lib/sdk/crt/math/tanh.c similarity index 100% rename from reactos/lib/sdk/crt/math/tanh.c rename to lib/sdk/crt/math/tanh.c diff --git a/reactos/lib/sdk/crt/mbstring/hanzen.c b/lib/sdk/crt/mbstring/hanzen.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/hanzen.c rename to lib/sdk/crt/mbstring/hanzen.c diff --git a/reactos/lib/sdk/crt/mbstring/ischira.c b/lib/sdk/crt/mbstring/ischira.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ischira.c rename to lib/sdk/crt/mbstring/ischira.c diff --git a/reactos/lib/sdk/crt/mbstring/iskana.c b/lib/sdk/crt/mbstring/iskana.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/iskana.c rename to lib/sdk/crt/mbstring/iskana.c diff --git a/reactos/lib/sdk/crt/mbstring/iskmoji.c b/lib/sdk/crt/mbstring/iskmoji.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/iskmoji.c rename to lib/sdk/crt/mbstring/iskmoji.c diff --git a/reactos/lib/sdk/crt/mbstring/iskpun.c b/lib/sdk/crt/mbstring/iskpun.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/iskpun.c rename to lib/sdk/crt/mbstring/iskpun.c diff --git a/reactos/lib/sdk/crt/mbstring/islead.c b/lib/sdk/crt/mbstring/islead.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/islead.c rename to lib/sdk/crt/mbstring/islead.c diff --git a/reactos/lib/sdk/crt/mbstring/islwr.c b/lib/sdk/crt/mbstring/islwr.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/islwr.c rename to lib/sdk/crt/mbstring/islwr.c diff --git a/reactos/lib/sdk/crt/mbstring/ismbal.c b/lib/sdk/crt/mbstring/ismbal.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismbal.c rename to lib/sdk/crt/mbstring/ismbal.c diff --git a/reactos/lib/sdk/crt/mbstring/ismbaln.c b/lib/sdk/crt/mbstring/ismbaln.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismbaln.c rename to lib/sdk/crt/mbstring/ismbaln.c diff --git a/reactos/lib/sdk/crt/mbstring/ismbc.c b/lib/sdk/crt/mbstring/ismbc.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismbc.c rename to lib/sdk/crt/mbstring/ismbc.c diff --git a/reactos/lib/sdk/crt/mbstring/ismbgra.c b/lib/sdk/crt/mbstring/ismbgra.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismbgra.c rename to lib/sdk/crt/mbstring/ismbgra.c diff --git a/reactos/lib/sdk/crt/mbstring/ismbkaln.c b/lib/sdk/crt/mbstring/ismbkaln.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismbkaln.c rename to lib/sdk/crt/mbstring/ismbkaln.c diff --git a/reactos/lib/sdk/crt/mbstring/ismblead.c b/lib/sdk/crt/mbstring/ismblead.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismblead.c rename to lib/sdk/crt/mbstring/ismblead.c diff --git a/reactos/lib/sdk/crt/mbstring/ismbpri.c b/lib/sdk/crt/mbstring/ismbpri.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismbpri.c rename to lib/sdk/crt/mbstring/ismbpri.c diff --git a/reactos/lib/sdk/crt/mbstring/ismbpun.c b/lib/sdk/crt/mbstring/ismbpun.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismbpun.c rename to lib/sdk/crt/mbstring/ismbpun.c diff --git a/reactos/lib/sdk/crt/mbstring/ismbtrl.c b/lib/sdk/crt/mbstring/ismbtrl.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/ismbtrl.c rename to lib/sdk/crt/mbstring/ismbtrl.c diff --git a/reactos/lib/sdk/crt/mbstring/isuppr.c b/lib/sdk/crt/mbstring/isuppr.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/isuppr.c rename to lib/sdk/crt/mbstring/isuppr.c diff --git a/reactos/lib/sdk/crt/mbstring/jistojms.c b/lib/sdk/crt/mbstring/jistojms.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/jistojms.c rename to lib/sdk/crt/mbstring/jistojms.c diff --git a/reactos/lib/sdk/crt/mbstring/jmstojis.c b/lib/sdk/crt/mbstring/jmstojis.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/jmstojis.c rename to lib/sdk/crt/mbstring/jmstojis.c diff --git a/reactos/lib/sdk/crt/mbstring/mbbtype.c b/lib/sdk/crt/mbstring/mbbtype.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbbtype.c rename to lib/sdk/crt/mbstring/mbbtype.c diff --git a/reactos/lib/sdk/crt/mbstring/mbccpy.c b/lib/sdk/crt/mbstring/mbccpy.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbccpy.c rename to lib/sdk/crt/mbstring/mbccpy.c diff --git a/reactos/lib/sdk/crt/mbstring/mbclen.c b/lib/sdk/crt/mbstring/mbclen.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbclen.c rename to lib/sdk/crt/mbstring/mbclen.c diff --git a/reactos/lib/sdk/crt/mbstring/mbscat.c b/lib/sdk/crt/mbstring/mbscat.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbscat.c rename to lib/sdk/crt/mbstring/mbscat.c diff --git a/reactos/lib/sdk/crt/mbstring/mbschr.c b/lib/sdk/crt/mbstring/mbschr.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbschr.c rename to lib/sdk/crt/mbstring/mbschr.c diff --git a/reactos/lib/sdk/crt/mbstring/mbscmp.c b/lib/sdk/crt/mbstring/mbscmp.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbscmp.c rename to lib/sdk/crt/mbstring/mbscmp.c diff --git a/reactos/lib/sdk/crt/mbstring/mbscoll.c b/lib/sdk/crt/mbstring/mbscoll.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbscoll.c rename to lib/sdk/crt/mbstring/mbscoll.c diff --git a/reactos/lib/sdk/crt/mbstring/mbscpy.c b/lib/sdk/crt/mbstring/mbscpy.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbscpy.c rename to lib/sdk/crt/mbstring/mbscpy.c diff --git a/reactos/lib/sdk/crt/mbstring/mbscspn.c b/lib/sdk/crt/mbstring/mbscspn.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbscspn.c rename to lib/sdk/crt/mbstring/mbscspn.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsdec.c b/lib/sdk/crt/mbstring/mbsdec.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsdec.c rename to lib/sdk/crt/mbstring/mbsdec.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsdup.c b/lib/sdk/crt/mbstring/mbsdup.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsdup.c rename to lib/sdk/crt/mbstring/mbsdup.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsicmp.c b/lib/sdk/crt/mbstring/mbsicmp.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsicmp.c rename to lib/sdk/crt/mbstring/mbsicmp.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsicoll.c b/lib/sdk/crt/mbstring/mbsicoll.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsicoll.c rename to lib/sdk/crt/mbstring/mbsicoll.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsinc.c b/lib/sdk/crt/mbstring/mbsinc.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsinc.c rename to lib/sdk/crt/mbstring/mbsinc.c diff --git a/reactos/lib/sdk/crt/mbstring/mbslen.c b/lib/sdk/crt/mbstring/mbslen.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbslen.c rename to lib/sdk/crt/mbstring/mbslen.c diff --git a/reactos/lib/sdk/crt/mbstring/mbslwr.c b/lib/sdk/crt/mbstring/mbslwr.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbslwr.c rename to lib/sdk/crt/mbstring/mbslwr.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsncat.c b/lib/sdk/crt/mbstring/mbsncat.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsncat.c rename to lib/sdk/crt/mbstring/mbsncat.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsnccnt.c b/lib/sdk/crt/mbstring/mbsnccnt.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsnccnt.c rename to lib/sdk/crt/mbstring/mbsnccnt.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsncmp.c b/lib/sdk/crt/mbstring/mbsncmp.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsncmp.c rename to lib/sdk/crt/mbstring/mbsncmp.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsncoll.c b/lib/sdk/crt/mbstring/mbsncoll.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsncoll.c rename to lib/sdk/crt/mbstring/mbsncoll.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsncpy.c b/lib/sdk/crt/mbstring/mbsncpy.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsncpy.c rename to lib/sdk/crt/mbstring/mbsncpy.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsnextc.c b/lib/sdk/crt/mbstring/mbsnextc.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsnextc.c rename to lib/sdk/crt/mbstring/mbsnextc.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsnicmp.c b/lib/sdk/crt/mbstring/mbsnicmp.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsnicmp.c rename to lib/sdk/crt/mbstring/mbsnicmp.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsnicoll.c b/lib/sdk/crt/mbstring/mbsnicoll.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsnicoll.c rename to lib/sdk/crt/mbstring/mbsnicoll.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsninc.c b/lib/sdk/crt/mbstring/mbsninc.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsninc.c rename to lib/sdk/crt/mbstring/mbsninc.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsnset.c b/lib/sdk/crt/mbstring/mbsnset.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsnset.c rename to lib/sdk/crt/mbstring/mbsnset.c diff --git a/reactos/lib/sdk/crt/mbstring/mbspbrk.c b/lib/sdk/crt/mbstring/mbspbrk.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbspbrk.c rename to lib/sdk/crt/mbstring/mbspbrk.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsrchr.c b/lib/sdk/crt/mbstring/mbsrchr.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsrchr.c rename to lib/sdk/crt/mbstring/mbsrchr.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsrev.c b/lib/sdk/crt/mbstring/mbsrev.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsrev.c rename to lib/sdk/crt/mbstring/mbsrev.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsset.c b/lib/sdk/crt/mbstring/mbsset.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsset.c rename to lib/sdk/crt/mbstring/mbsset.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsspn.c b/lib/sdk/crt/mbstring/mbsspn.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsspn.c rename to lib/sdk/crt/mbstring/mbsspn.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsspnp.c b/lib/sdk/crt/mbstring/mbsspnp.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsspnp.c rename to lib/sdk/crt/mbstring/mbsspnp.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsstr.c b/lib/sdk/crt/mbstring/mbsstr.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsstr.c rename to lib/sdk/crt/mbstring/mbsstr.c diff --git a/reactos/lib/sdk/crt/mbstring/mbstok.c b/lib/sdk/crt/mbstring/mbstok.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbstok.c rename to lib/sdk/crt/mbstring/mbstok.c diff --git a/reactos/lib/sdk/crt/mbstring/mbstrlen.c b/lib/sdk/crt/mbstring/mbstrlen.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbstrlen.c rename to lib/sdk/crt/mbstring/mbstrlen.c diff --git a/reactos/lib/sdk/crt/mbstring/mbsupr.c b/lib/sdk/crt/mbstring/mbsupr.c similarity index 100% rename from reactos/lib/sdk/crt/mbstring/mbsupr.c rename to lib/sdk/crt/mbstring/mbsupr.c diff --git a/reactos/lib/sdk/crt/mem/i386/memchr_asm.s b/lib/sdk/crt/mem/i386/memchr_asm.s similarity index 100% rename from reactos/lib/sdk/crt/mem/i386/memchr_asm.s rename to lib/sdk/crt/mem/i386/memchr_asm.s diff --git a/reactos/lib/sdk/crt/mem/i386/memcpy_asm.s b/lib/sdk/crt/mem/i386/memcpy_asm.s similarity index 100% rename from reactos/lib/sdk/crt/mem/i386/memcpy_asm.s rename to lib/sdk/crt/mem/i386/memcpy_asm.s diff --git a/reactos/lib/sdk/crt/mem/i386/memmove_asm.s b/lib/sdk/crt/mem/i386/memmove_asm.s similarity index 100% rename from reactos/lib/sdk/crt/mem/i386/memmove_asm.s rename to lib/sdk/crt/mem/i386/memmove_asm.s diff --git a/reactos/lib/sdk/crt/mem/i386/memset_asm.s b/lib/sdk/crt/mem/i386/memset_asm.s similarity index 100% rename from reactos/lib/sdk/crt/mem/i386/memset_asm.s rename to lib/sdk/crt/mem/i386/memset_asm.s diff --git a/reactos/lib/sdk/crt/mem/memccpy.c b/lib/sdk/crt/mem/memccpy.c similarity index 100% rename from reactos/lib/sdk/crt/mem/memccpy.c rename to lib/sdk/crt/mem/memccpy.c diff --git a/reactos/lib/sdk/crt/mem/memchr.c b/lib/sdk/crt/mem/memchr.c similarity index 100% rename from reactos/lib/sdk/crt/mem/memchr.c rename to lib/sdk/crt/mem/memchr.c diff --git a/reactos/lib/sdk/crt/mem/memcmp.c b/lib/sdk/crt/mem/memcmp.c similarity index 100% rename from reactos/lib/sdk/crt/mem/memcmp.c rename to lib/sdk/crt/mem/memcmp.c diff --git a/reactos/lib/sdk/crt/mem/memcpy.c b/lib/sdk/crt/mem/memcpy.c similarity index 100% rename from reactos/lib/sdk/crt/mem/memcpy.c rename to lib/sdk/crt/mem/memcpy.c diff --git a/reactos/lib/sdk/crt/mem/memicmp.c b/lib/sdk/crt/mem/memicmp.c similarity index 100% rename from reactos/lib/sdk/crt/mem/memicmp.c rename to lib/sdk/crt/mem/memicmp.c diff --git a/reactos/lib/sdk/crt/mem/memmove.c b/lib/sdk/crt/mem/memmove.c similarity index 100% rename from reactos/lib/sdk/crt/mem/memmove.c rename to lib/sdk/crt/mem/memmove.c diff --git a/reactos/lib/sdk/crt/mem/memset.c b/lib/sdk/crt/mem/memset.c similarity index 100% rename from reactos/lib/sdk/crt/mem/memset.c rename to lib/sdk/crt/mem/memset.c diff --git a/reactos/lib/sdk/crt/misc/amsg.c b/lib/sdk/crt/misc/amsg.c similarity index 100% rename from reactos/lib/sdk/crt/misc/amsg.c rename to lib/sdk/crt/misc/amsg.c diff --git a/reactos/lib/sdk/crt/misc/assert.c b/lib/sdk/crt/misc/assert.c similarity index 100% rename from reactos/lib/sdk/crt/misc/assert.c rename to lib/sdk/crt/misc/assert.c diff --git a/reactos/lib/sdk/crt/misc/crtmain.c b/lib/sdk/crt/misc/crtmain.c similarity index 100% rename from reactos/lib/sdk/crt/misc/crtmain.c rename to lib/sdk/crt/misc/crtmain.c diff --git a/reactos/lib/sdk/crt/misc/environ.c b/lib/sdk/crt/misc/environ.c similarity index 100% rename from reactos/lib/sdk/crt/misc/environ.c rename to lib/sdk/crt/misc/environ.c diff --git a/reactos/lib/sdk/crt/misc/getargs.c b/lib/sdk/crt/misc/getargs.c similarity index 100% rename from reactos/lib/sdk/crt/misc/getargs.c rename to lib/sdk/crt/misc/getargs.c diff --git a/reactos/lib/sdk/crt/misc/initterm.c b/lib/sdk/crt/misc/initterm.c similarity index 100% rename from reactos/lib/sdk/crt/misc/initterm.c rename to lib/sdk/crt/misc/initterm.c diff --git a/reactos/lib/sdk/crt/misc/lock.c b/lib/sdk/crt/misc/lock.c similarity index 100% rename from reactos/lib/sdk/crt/misc/lock.c rename to lib/sdk/crt/misc/lock.c diff --git a/reactos/lib/sdk/crt/misc/purecall.c b/lib/sdk/crt/misc/purecall.c similarity index 100% rename from reactos/lib/sdk/crt/misc/purecall.c rename to lib/sdk/crt/misc/purecall.c diff --git a/reactos/lib/sdk/crt/misc/stubs.c b/lib/sdk/crt/misc/stubs.c similarity index 100% rename from reactos/lib/sdk/crt/misc/stubs.c rename to lib/sdk/crt/misc/stubs.c diff --git a/reactos/lib/sdk/crt/misc/tls.c b/lib/sdk/crt/misc/tls.c similarity index 100% rename from reactos/lib/sdk/crt/misc/tls.c rename to lib/sdk/crt/misc/tls.c diff --git a/reactos/lib/sdk/crt/precomp.h b/lib/sdk/crt/precomp.h similarity index 100% rename from reactos/lib/sdk/crt/precomp.h rename to lib/sdk/crt/precomp.h diff --git a/reactos/lib/sdk/crt/process/_cwait.c b/lib/sdk/crt/process/_cwait.c similarity index 100% rename from reactos/lib/sdk/crt/process/_cwait.c rename to lib/sdk/crt/process/_cwait.c diff --git a/reactos/lib/sdk/crt/process/_system.c b/lib/sdk/crt/process/_system.c similarity index 100% rename from reactos/lib/sdk/crt/process/_system.c rename to lib/sdk/crt/process/_system.c diff --git a/reactos/lib/sdk/crt/process/dll.c b/lib/sdk/crt/process/dll.c similarity index 100% rename from reactos/lib/sdk/crt/process/dll.c rename to lib/sdk/crt/process/dll.c diff --git a/reactos/lib/sdk/crt/process/process.c b/lib/sdk/crt/process/process.c similarity index 100% rename from reactos/lib/sdk/crt/process/process.c rename to lib/sdk/crt/process/process.c diff --git a/reactos/lib/sdk/crt/process/procid.c b/lib/sdk/crt/process/procid.c similarity index 100% rename from reactos/lib/sdk/crt/process/procid.c rename to lib/sdk/crt/process/procid.c diff --git a/reactos/lib/sdk/crt/process/thread.c b/lib/sdk/crt/process/thread.c similarity index 100% rename from reactos/lib/sdk/crt/process/thread.c rename to lib/sdk/crt/process/thread.c diff --git a/reactos/lib/sdk/crt/process/threadid.c b/lib/sdk/crt/process/threadid.c similarity index 100% rename from reactos/lib/sdk/crt/process/threadid.c rename to lib/sdk/crt/process/threadid.c diff --git a/reactos/lib/sdk/crt/process/threadx.c b/lib/sdk/crt/process/threadx.c similarity index 100% rename from reactos/lib/sdk/crt/process/threadx.c rename to lib/sdk/crt/process/threadx.c diff --git a/reactos/lib/sdk/crt/process/wprocess.c b/lib/sdk/crt/process/wprocess.c similarity index 100% rename from reactos/lib/sdk/crt/process/wprocess.c rename to lib/sdk/crt/process/wprocess.c diff --git a/reactos/lib/sdk/crt/search/bsearch.c b/lib/sdk/crt/search/bsearch.c similarity index 100% rename from reactos/lib/sdk/crt/search/bsearch.c rename to lib/sdk/crt/search/bsearch.c diff --git a/reactos/lib/sdk/crt/search/lfind.c b/lib/sdk/crt/search/lfind.c similarity index 100% rename from reactos/lib/sdk/crt/search/lfind.c rename to lib/sdk/crt/search/lfind.c diff --git a/reactos/lib/sdk/crt/search/lsearch.c b/lib/sdk/crt/search/lsearch.c similarity index 100% rename from reactos/lib/sdk/crt/search/lsearch.c rename to lib/sdk/crt/search/lsearch.c diff --git a/reactos/lib/sdk/crt/setjmp/i386/setjmp.s b/lib/sdk/crt/setjmp/i386/setjmp.s similarity index 100% rename from reactos/lib/sdk/crt/setjmp/i386/setjmp.s rename to lib/sdk/crt/setjmp/i386/setjmp.s diff --git a/reactos/lib/sdk/crt/signal/signal.c b/lib/sdk/crt/signal/signal.c similarity index 100% rename from reactos/lib/sdk/crt/signal/signal.c rename to lib/sdk/crt/signal/signal.c diff --git a/reactos/lib/sdk/crt/signal/xcptinfo.c b/lib/sdk/crt/signal/xcptinfo.c similarity index 100% rename from reactos/lib/sdk/crt/signal/xcptinfo.c rename to lib/sdk/crt/signal/xcptinfo.c diff --git a/reactos/lib/sdk/crt/stdio/access.c b/lib/sdk/crt/stdio/access.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/access.c rename to lib/sdk/crt/stdio/access.c diff --git a/reactos/lib/sdk/crt/stdio/file.c b/lib/sdk/crt/stdio/file.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/file.c rename to lib/sdk/crt/stdio/file.c diff --git a/reactos/lib/sdk/crt/stdio/find.c b/lib/sdk/crt/stdio/find.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/find.c rename to lib/sdk/crt/stdio/find.c diff --git a/reactos/lib/sdk/crt/stdio/fmode.c b/lib/sdk/crt/stdio/fmode.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/fmode.c rename to lib/sdk/crt/stdio/fmode.c diff --git a/reactos/lib/sdk/crt/stdio/lnx_sprintf.c b/lib/sdk/crt/stdio/lnx_sprintf.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/lnx_sprintf.c rename to lib/sdk/crt/stdio/lnx_sprintf.c diff --git a/reactos/lib/sdk/crt/stdio/perror.c b/lib/sdk/crt/stdio/perror.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/perror.c rename to lib/sdk/crt/stdio/perror.c diff --git a/reactos/lib/sdk/crt/stdio/popen.c b/lib/sdk/crt/stdio/popen.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/popen.c rename to lib/sdk/crt/stdio/popen.c diff --git a/reactos/lib/sdk/crt/stdio/waccess.c b/lib/sdk/crt/stdio/waccess.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/waccess.c rename to lib/sdk/crt/stdio/waccess.c diff --git a/reactos/lib/sdk/crt/stdio/wfind.c b/lib/sdk/crt/stdio/wfind.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/wfind.c rename to lib/sdk/crt/stdio/wfind.c diff --git a/reactos/lib/sdk/crt/stdio/wpopen.c b/lib/sdk/crt/stdio/wpopen.c similarity index 100% rename from reactos/lib/sdk/crt/stdio/wpopen.c rename to lib/sdk/crt/stdio/wpopen.c diff --git a/reactos/lib/sdk/crt/stdlib/_exit.c b/lib/sdk/crt/stdlib/_exit.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/_exit.c rename to lib/sdk/crt/stdlib/_exit.c diff --git a/reactos/lib/sdk/crt/stdlib/abort.c b/lib/sdk/crt/stdlib/abort.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/abort.c rename to lib/sdk/crt/stdlib/abort.c diff --git a/reactos/lib/sdk/crt/stdlib/atexit.c b/lib/sdk/crt/stdlib/atexit.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/atexit.c rename to lib/sdk/crt/stdlib/atexit.c diff --git a/reactos/lib/sdk/crt/stdlib/atold.c b/lib/sdk/crt/stdlib/atold.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/atold.c rename to lib/sdk/crt/stdlib/atold.c diff --git a/reactos/lib/sdk/crt/stdlib/doserrmap.h b/lib/sdk/crt/stdlib/doserrmap.h similarity index 100% rename from reactos/lib/sdk/crt/stdlib/doserrmap.h rename to lib/sdk/crt/stdlib/doserrmap.h diff --git a/reactos/lib/sdk/crt/stdlib/ecvt.c b/lib/sdk/crt/stdlib/ecvt.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/ecvt.c rename to lib/sdk/crt/stdlib/ecvt.c diff --git a/reactos/lib/sdk/crt/stdlib/ecvtbuf.c b/lib/sdk/crt/stdlib/ecvtbuf.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/ecvtbuf.c rename to lib/sdk/crt/stdlib/ecvtbuf.c diff --git a/reactos/lib/sdk/crt/stdlib/errno.c b/lib/sdk/crt/stdlib/errno.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/errno.c rename to lib/sdk/crt/stdlib/errno.c diff --git a/reactos/lib/sdk/crt/stdlib/fcvt.c b/lib/sdk/crt/stdlib/fcvt.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/fcvt.c rename to lib/sdk/crt/stdlib/fcvt.c diff --git a/reactos/lib/sdk/crt/stdlib/fcvtbuf.c b/lib/sdk/crt/stdlib/fcvtbuf.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/fcvtbuf.c rename to lib/sdk/crt/stdlib/fcvtbuf.c diff --git a/reactos/lib/sdk/crt/stdlib/fullpath.c b/lib/sdk/crt/stdlib/fullpath.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/fullpath.c rename to lib/sdk/crt/stdlib/fullpath.c diff --git a/reactos/lib/sdk/crt/stdlib/gcvt.c b/lib/sdk/crt/stdlib/gcvt.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/gcvt.c rename to lib/sdk/crt/stdlib/gcvt.c diff --git a/reactos/lib/sdk/crt/stdlib/getenv.c b/lib/sdk/crt/stdlib/getenv.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/getenv.c rename to lib/sdk/crt/stdlib/getenv.c diff --git a/reactos/lib/sdk/crt/stdlib/makepath.c b/lib/sdk/crt/stdlib/makepath.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/makepath.c rename to lib/sdk/crt/stdlib/makepath.c diff --git a/reactos/lib/sdk/crt/stdlib/malloc.c b/lib/sdk/crt/stdlib/malloc.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/malloc.c rename to lib/sdk/crt/stdlib/malloc.c diff --git a/reactos/lib/sdk/crt/stdlib/mbstowcs.c b/lib/sdk/crt/stdlib/mbstowcs.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/mbstowcs.c rename to lib/sdk/crt/stdlib/mbstowcs.c diff --git a/reactos/lib/sdk/crt/stdlib/mbtowc.c b/lib/sdk/crt/stdlib/mbtowc.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/mbtowc.c rename to lib/sdk/crt/stdlib/mbtowc.c diff --git a/reactos/lib/sdk/crt/stdlib/obsol.c b/lib/sdk/crt/stdlib/obsol.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/obsol.c rename to lib/sdk/crt/stdlib/obsol.c diff --git a/reactos/lib/sdk/crt/stdlib/putenv.c b/lib/sdk/crt/stdlib/putenv.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/putenv.c rename to lib/sdk/crt/stdlib/putenv.c diff --git a/reactos/lib/sdk/crt/stdlib/qsort.c b/lib/sdk/crt/stdlib/qsort.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/qsort.c rename to lib/sdk/crt/stdlib/qsort.c diff --git a/reactos/lib/sdk/crt/stdlib/rot.c b/lib/sdk/crt/stdlib/rot.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/rot.c rename to lib/sdk/crt/stdlib/rot.c diff --git a/reactos/lib/sdk/crt/stdlib/senv.c b/lib/sdk/crt/stdlib/senv.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/senv.c rename to lib/sdk/crt/stdlib/senv.c diff --git a/reactos/lib/sdk/crt/stdlib/swab.c b/lib/sdk/crt/stdlib/swab.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/swab.c rename to lib/sdk/crt/stdlib/swab.c diff --git a/reactos/lib/sdk/crt/stdlib/wfulpath.c b/lib/sdk/crt/stdlib/wfulpath.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/wfulpath.c rename to lib/sdk/crt/stdlib/wfulpath.c diff --git a/reactos/lib/sdk/crt/stdlib/wmakpath.c b/lib/sdk/crt/stdlib/wmakpath.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/wmakpath.c rename to lib/sdk/crt/stdlib/wmakpath.c diff --git a/reactos/lib/sdk/crt/stdlib/wputenv.c b/lib/sdk/crt/stdlib/wputenv.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/wputenv.c rename to lib/sdk/crt/stdlib/wputenv.c diff --git a/reactos/lib/sdk/crt/stdlib/wsenv.c b/lib/sdk/crt/stdlib/wsenv.c similarity index 100% rename from reactos/lib/sdk/crt/stdlib/wsenv.c rename to lib/sdk/crt/stdlib/wsenv.c diff --git a/reactos/lib/sdk/crt/string/atof.c b/lib/sdk/crt/string/atof.c similarity index 100% rename from reactos/lib/sdk/crt/string/atof.c rename to lib/sdk/crt/string/atof.c diff --git a/reactos/lib/sdk/crt/string/atoi.c b/lib/sdk/crt/string/atoi.c similarity index 100% rename from reactos/lib/sdk/crt/string/atoi.c rename to lib/sdk/crt/string/atoi.c diff --git a/reactos/lib/sdk/crt/string/atoi64.c b/lib/sdk/crt/string/atoi64.c similarity index 100% rename from reactos/lib/sdk/crt/string/atoi64.c rename to lib/sdk/crt/string/atoi64.c diff --git a/reactos/lib/sdk/crt/string/atol.c b/lib/sdk/crt/string/atol.c similarity index 100% rename from reactos/lib/sdk/crt/string/atol.c rename to lib/sdk/crt/string/atol.c diff --git a/reactos/lib/sdk/crt/string/ctype.c b/lib/sdk/crt/string/ctype.c similarity index 100% rename from reactos/lib/sdk/crt/string/ctype.c rename to lib/sdk/crt/string/ctype.c diff --git a/reactos/lib/sdk/crt/string/i386/strcat_asm.s b/lib/sdk/crt/string/i386/strcat_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strcat_asm.s rename to lib/sdk/crt/string/i386/strcat_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strchr_asm.s b/lib/sdk/crt/string/i386/strchr_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strchr_asm.s rename to lib/sdk/crt/string/i386/strchr_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strcmp_asm.s b/lib/sdk/crt/string/i386/strcmp_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strcmp_asm.s rename to lib/sdk/crt/string/i386/strcmp_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strcpy_asm.s b/lib/sdk/crt/string/i386/strcpy_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strcpy_asm.s rename to lib/sdk/crt/string/i386/strcpy_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strlen_asm.s b/lib/sdk/crt/string/i386/strlen_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strlen_asm.s rename to lib/sdk/crt/string/i386/strlen_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strncat_asm.s b/lib/sdk/crt/string/i386/strncat_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strncat_asm.s rename to lib/sdk/crt/string/i386/strncat_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strncmp_asm.s b/lib/sdk/crt/string/i386/strncmp_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strncmp_asm.s rename to lib/sdk/crt/string/i386/strncmp_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strncpy_asm.s b/lib/sdk/crt/string/i386/strncpy_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strncpy_asm.s rename to lib/sdk/crt/string/i386/strncpy_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strnlen_asm.s b/lib/sdk/crt/string/i386/strnlen_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strnlen_asm.s rename to lib/sdk/crt/string/i386/strnlen_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/strrchr_asm.s b/lib/sdk/crt/string/i386/strrchr_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/strrchr_asm.s rename to lib/sdk/crt/string/i386/strrchr_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/tchar.h b/lib/sdk/crt/string/i386/tchar.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tchar.h rename to lib/sdk/crt/string/i386/tchar.h diff --git a/reactos/lib/sdk/crt/string/i386/tcscat.h b/lib/sdk/crt/string/i386/tcscat.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcscat.h rename to lib/sdk/crt/string/i386/tcscat.h diff --git a/reactos/lib/sdk/crt/string/i386/tcschr.h b/lib/sdk/crt/string/i386/tcschr.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcschr.h rename to lib/sdk/crt/string/i386/tcschr.h diff --git a/reactos/lib/sdk/crt/string/i386/tcscmp.h b/lib/sdk/crt/string/i386/tcscmp.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcscmp.h rename to lib/sdk/crt/string/i386/tcscmp.h diff --git a/reactos/lib/sdk/crt/string/i386/tcscpy.h b/lib/sdk/crt/string/i386/tcscpy.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcscpy.h rename to lib/sdk/crt/string/i386/tcscpy.h diff --git a/reactos/lib/sdk/crt/string/i386/tcslen.h b/lib/sdk/crt/string/i386/tcslen.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcslen.h rename to lib/sdk/crt/string/i386/tcslen.h diff --git a/reactos/lib/sdk/crt/string/i386/tcsncat.h b/lib/sdk/crt/string/i386/tcsncat.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcsncat.h rename to lib/sdk/crt/string/i386/tcsncat.h diff --git a/reactos/lib/sdk/crt/string/i386/tcsncmp.h b/lib/sdk/crt/string/i386/tcsncmp.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcsncmp.h rename to lib/sdk/crt/string/i386/tcsncmp.h diff --git a/reactos/lib/sdk/crt/string/i386/tcsncpy.h b/lib/sdk/crt/string/i386/tcsncpy.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcsncpy.h rename to lib/sdk/crt/string/i386/tcsncpy.h diff --git a/reactos/lib/sdk/crt/string/i386/tcsnlen.h b/lib/sdk/crt/string/i386/tcsnlen.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcsnlen.h rename to lib/sdk/crt/string/i386/tcsnlen.h diff --git a/reactos/lib/sdk/crt/string/i386/tcsrchr.h b/lib/sdk/crt/string/i386/tcsrchr.h similarity index 100% rename from reactos/lib/sdk/crt/string/i386/tcsrchr.h rename to lib/sdk/crt/string/i386/tcsrchr.h diff --git a/reactos/lib/sdk/crt/string/i386/wcscat_asm.s b/lib/sdk/crt/string/i386/wcscat_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcscat_asm.s rename to lib/sdk/crt/string/i386/wcscat_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcschr_asm.s b/lib/sdk/crt/string/i386/wcschr_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcschr_asm.s rename to lib/sdk/crt/string/i386/wcschr_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcscmp_asm.s b/lib/sdk/crt/string/i386/wcscmp_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcscmp_asm.s rename to lib/sdk/crt/string/i386/wcscmp_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcscpy_asm.s b/lib/sdk/crt/string/i386/wcscpy_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcscpy_asm.s rename to lib/sdk/crt/string/i386/wcscpy_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcslen_asm.s b/lib/sdk/crt/string/i386/wcslen_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcslen_asm.s rename to lib/sdk/crt/string/i386/wcslen_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcsncat_asm.s b/lib/sdk/crt/string/i386/wcsncat_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcsncat_asm.s rename to lib/sdk/crt/string/i386/wcsncat_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcsncmp_asm.s b/lib/sdk/crt/string/i386/wcsncmp_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcsncmp_asm.s rename to lib/sdk/crt/string/i386/wcsncmp_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcsncpy_asm.s b/lib/sdk/crt/string/i386/wcsncpy_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcsncpy_asm.s rename to lib/sdk/crt/string/i386/wcsncpy_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcsnlen_asm.s b/lib/sdk/crt/string/i386/wcsnlen_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcsnlen_asm.s rename to lib/sdk/crt/string/i386/wcsnlen_asm.s diff --git a/reactos/lib/sdk/crt/string/i386/wcsrchr_asm.s b/lib/sdk/crt/string/i386/wcsrchr_asm.s similarity index 100% rename from reactos/lib/sdk/crt/string/i386/wcsrchr_asm.s rename to lib/sdk/crt/string/i386/wcsrchr_asm.s diff --git a/reactos/lib/sdk/crt/string/itoa.c b/lib/sdk/crt/string/itoa.c similarity index 100% rename from reactos/lib/sdk/crt/string/itoa.c rename to lib/sdk/crt/string/itoa.c diff --git a/reactos/lib/sdk/crt/string/itow.c b/lib/sdk/crt/string/itow.c similarity index 100% rename from reactos/lib/sdk/crt/string/itow.c rename to lib/sdk/crt/string/itow.c diff --git a/reactos/lib/sdk/crt/string/lasttok.c b/lib/sdk/crt/string/lasttok.c similarity index 100% rename from reactos/lib/sdk/crt/string/lasttok.c rename to lib/sdk/crt/string/lasttok.c diff --git a/reactos/lib/sdk/crt/string/mbstowcs_nt.c b/lib/sdk/crt/string/mbstowcs_nt.c similarity index 100% rename from reactos/lib/sdk/crt/string/mbstowcs_nt.c rename to lib/sdk/crt/string/mbstowcs_nt.c diff --git a/reactos/lib/sdk/crt/string/scanf.c b/lib/sdk/crt/string/scanf.c similarity index 100% rename from reactos/lib/sdk/crt/string/scanf.c rename to lib/sdk/crt/string/scanf.c diff --git a/reactos/lib/sdk/crt/string/scanf.h b/lib/sdk/crt/string/scanf.h similarity index 100% rename from reactos/lib/sdk/crt/string/scanf.h rename to lib/sdk/crt/string/scanf.h diff --git a/reactos/lib/sdk/crt/string/splitp.c b/lib/sdk/crt/string/splitp.c similarity index 100% rename from reactos/lib/sdk/crt/string/splitp.c rename to lib/sdk/crt/string/splitp.c diff --git a/reactos/lib/sdk/crt/string/strcat.c b/lib/sdk/crt/string/strcat.c similarity index 100% rename from reactos/lib/sdk/crt/string/strcat.c rename to lib/sdk/crt/string/strcat.c diff --git a/reactos/lib/sdk/crt/string/strchr.c b/lib/sdk/crt/string/strchr.c similarity index 100% rename from reactos/lib/sdk/crt/string/strchr.c rename to lib/sdk/crt/string/strchr.c diff --git a/reactos/lib/sdk/crt/string/strcmp.c b/lib/sdk/crt/string/strcmp.c similarity index 100% rename from reactos/lib/sdk/crt/string/strcmp.c rename to lib/sdk/crt/string/strcmp.c diff --git a/reactos/lib/sdk/crt/string/strcoll.c b/lib/sdk/crt/string/strcoll.c similarity index 100% rename from reactos/lib/sdk/crt/string/strcoll.c rename to lib/sdk/crt/string/strcoll.c diff --git a/reactos/lib/sdk/crt/string/strcpy.c b/lib/sdk/crt/string/strcpy.c similarity index 100% rename from reactos/lib/sdk/crt/string/strcpy.c rename to lib/sdk/crt/string/strcpy.c diff --git a/reactos/lib/sdk/crt/string/strcspn.c b/lib/sdk/crt/string/strcspn.c similarity index 100% rename from reactos/lib/sdk/crt/string/strcspn.c rename to lib/sdk/crt/string/strcspn.c diff --git a/reactos/lib/sdk/crt/string/strdup.c b/lib/sdk/crt/string/strdup.c similarity index 100% rename from reactos/lib/sdk/crt/string/strdup.c rename to lib/sdk/crt/string/strdup.c diff --git a/reactos/lib/sdk/crt/string/strerror.c b/lib/sdk/crt/string/strerror.c similarity index 100% rename from reactos/lib/sdk/crt/string/strerror.c rename to lib/sdk/crt/string/strerror.c diff --git a/reactos/lib/sdk/crt/string/stricmp.c b/lib/sdk/crt/string/stricmp.c similarity index 100% rename from reactos/lib/sdk/crt/string/stricmp.c rename to lib/sdk/crt/string/stricmp.c diff --git a/reactos/lib/sdk/crt/string/strlen.c b/lib/sdk/crt/string/strlen.c similarity index 100% rename from reactos/lib/sdk/crt/string/strlen.c rename to lib/sdk/crt/string/strlen.c diff --git a/reactos/lib/sdk/crt/string/strlwr.c b/lib/sdk/crt/string/strlwr.c similarity index 100% rename from reactos/lib/sdk/crt/string/strlwr.c rename to lib/sdk/crt/string/strlwr.c diff --git a/reactos/lib/sdk/crt/string/strncat.c b/lib/sdk/crt/string/strncat.c similarity index 100% rename from reactos/lib/sdk/crt/string/strncat.c rename to lib/sdk/crt/string/strncat.c diff --git a/reactos/lib/sdk/crt/string/strncmp.c b/lib/sdk/crt/string/strncmp.c similarity index 100% rename from reactos/lib/sdk/crt/string/strncmp.c rename to lib/sdk/crt/string/strncmp.c diff --git a/reactos/lib/sdk/crt/string/strncoll.c b/lib/sdk/crt/string/strncoll.c similarity index 100% rename from reactos/lib/sdk/crt/string/strncoll.c rename to lib/sdk/crt/string/strncoll.c diff --git a/reactos/lib/sdk/crt/string/strncpy.c b/lib/sdk/crt/string/strncpy.c similarity index 100% rename from reactos/lib/sdk/crt/string/strncpy.c rename to lib/sdk/crt/string/strncpy.c diff --git a/reactos/lib/sdk/crt/string/strnicmp.c b/lib/sdk/crt/string/strnicmp.c similarity index 100% rename from reactos/lib/sdk/crt/string/strnicmp.c rename to lib/sdk/crt/string/strnicmp.c diff --git a/reactos/lib/sdk/crt/string/strnlen.c b/lib/sdk/crt/string/strnlen.c similarity index 100% rename from reactos/lib/sdk/crt/string/strnlen.c rename to lib/sdk/crt/string/strnlen.c diff --git a/reactos/lib/sdk/crt/string/strpbrk.c b/lib/sdk/crt/string/strpbrk.c similarity index 100% rename from reactos/lib/sdk/crt/string/strpbrk.c rename to lib/sdk/crt/string/strpbrk.c diff --git a/reactos/lib/sdk/crt/string/strrchr.c b/lib/sdk/crt/string/strrchr.c similarity index 100% rename from reactos/lib/sdk/crt/string/strrchr.c rename to lib/sdk/crt/string/strrchr.c diff --git a/reactos/lib/sdk/crt/string/strrev.c b/lib/sdk/crt/string/strrev.c similarity index 100% rename from reactos/lib/sdk/crt/string/strrev.c rename to lib/sdk/crt/string/strrev.c diff --git a/reactos/lib/sdk/crt/string/strset.c b/lib/sdk/crt/string/strset.c similarity index 100% rename from reactos/lib/sdk/crt/string/strset.c rename to lib/sdk/crt/string/strset.c diff --git a/reactos/lib/sdk/crt/string/strspn.c b/lib/sdk/crt/string/strspn.c similarity index 100% rename from reactos/lib/sdk/crt/string/strspn.c rename to lib/sdk/crt/string/strspn.c diff --git a/reactos/lib/sdk/crt/string/strstr.c b/lib/sdk/crt/string/strstr.c similarity index 100% rename from reactos/lib/sdk/crt/string/strstr.c rename to lib/sdk/crt/string/strstr.c diff --git a/reactos/lib/sdk/crt/string/strtod.c b/lib/sdk/crt/string/strtod.c similarity index 100% rename from reactos/lib/sdk/crt/string/strtod.c rename to lib/sdk/crt/string/strtod.c diff --git a/reactos/lib/sdk/crt/string/strtok.c b/lib/sdk/crt/string/strtok.c similarity index 100% rename from reactos/lib/sdk/crt/string/strtok.c rename to lib/sdk/crt/string/strtok.c diff --git a/reactos/lib/sdk/crt/string/strtol.c b/lib/sdk/crt/string/strtol.c similarity index 100% rename from reactos/lib/sdk/crt/string/strtol.c rename to lib/sdk/crt/string/strtol.c diff --git a/reactos/lib/sdk/crt/string/strtold.c b/lib/sdk/crt/string/strtold.c similarity index 100% rename from reactos/lib/sdk/crt/string/strtold.c rename to lib/sdk/crt/string/strtold.c diff --git a/reactos/lib/sdk/crt/string/strtoul.c b/lib/sdk/crt/string/strtoul.c similarity index 100% rename from reactos/lib/sdk/crt/string/strtoul.c rename to lib/sdk/crt/string/strtoul.c diff --git a/reactos/lib/sdk/crt/string/strtoull.c b/lib/sdk/crt/string/strtoull.c similarity index 100% rename from reactos/lib/sdk/crt/string/strtoull.c rename to lib/sdk/crt/string/strtoull.c diff --git a/reactos/lib/sdk/crt/string/strupr.c b/lib/sdk/crt/string/strupr.c similarity index 100% rename from reactos/lib/sdk/crt/string/strupr.c rename to lib/sdk/crt/string/strupr.c diff --git a/reactos/lib/sdk/crt/string/strxfrm.c b/lib/sdk/crt/string/strxfrm.c similarity index 100% rename from reactos/lib/sdk/crt/string/strxfrm.c rename to lib/sdk/crt/string/strxfrm.c diff --git a/reactos/lib/sdk/crt/string/strxspn.h b/lib/sdk/crt/string/strxspn.h similarity index 100% rename from reactos/lib/sdk/crt/string/strxspn.h rename to lib/sdk/crt/string/strxspn.h diff --git a/reactos/lib/sdk/crt/string/tcscat.h b/lib/sdk/crt/string/tcscat.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcscat.h rename to lib/sdk/crt/string/tcscat.h diff --git a/reactos/lib/sdk/crt/string/tcschr.h b/lib/sdk/crt/string/tcschr.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcschr.h rename to lib/sdk/crt/string/tcschr.h diff --git a/reactos/lib/sdk/crt/string/tcscmp.h b/lib/sdk/crt/string/tcscmp.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcscmp.h rename to lib/sdk/crt/string/tcscmp.h diff --git a/reactos/lib/sdk/crt/string/tcscpy.h b/lib/sdk/crt/string/tcscpy.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcscpy.h rename to lib/sdk/crt/string/tcscpy.h diff --git a/reactos/lib/sdk/crt/string/tcslen.h b/lib/sdk/crt/string/tcslen.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcslen.h rename to lib/sdk/crt/string/tcslen.h diff --git a/reactos/lib/sdk/crt/string/tcsncat.h b/lib/sdk/crt/string/tcsncat.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcsncat.h rename to lib/sdk/crt/string/tcsncat.h diff --git a/reactos/lib/sdk/crt/string/tcsncmp.h b/lib/sdk/crt/string/tcsncmp.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcsncmp.h rename to lib/sdk/crt/string/tcsncmp.h diff --git a/reactos/lib/sdk/crt/string/tcsncpy.h b/lib/sdk/crt/string/tcsncpy.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcsncpy.h rename to lib/sdk/crt/string/tcsncpy.h diff --git a/reactos/lib/sdk/crt/string/tcsnlen.h b/lib/sdk/crt/string/tcsnlen.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcsnlen.h rename to lib/sdk/crt/string/tcsnlen.h diff --git a/reactos/lib/sdk/crt/string/tcsrchr.h b/lib/sdk/crt/string/tcsrchr.h similarity index 100% rename from reactos/lib/sdk/crt/string/tcsrchr.h rename to lib/sdk/crt/string/tcsrchr.h diff --git a/reactos/lib/sdk/crt/string/wcs.c b/lib/sdk/crt/string/wcs.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcs.c rename to lib/sdk/crt/string/wcs.c diff --git a/reactos/lib/sdk/crt/string/wcscat.c b/lib/sdk/crt/string/wcscat.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcscat.c rename to lib/sdk/crt/string/wcscat.c diff --git a/reactos/lib/sdk/crt/string/wcschr.c b/lib/sdk/crt/string/wcschr.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcschr.c rename to lib/sdk/crt/string/wcschr.c diff --git a/reactos/lib/sdk/crt/string/wcscmp.c b/lib/sdk/crt/string/wcscmp.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcscmp.c rename to lib/sdk/crt/string/wcscmp.c diff --git a/reactos/lib/sdk/crt/string/wcscpy.c b/lib/sdk/crt/string/wcscpy.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcscpy.c rename to lib/sdk/crt/string/wcscpy.c diff --git a/reactos/lib/sdk/crt/string/wcslen.c b/lib/sdk/crt/string/wcslen.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcslen.c rename to lib/sdk/crt/string/wcslen.c diff --git a/reactos/lib/sdk/crt/string/wcsncat.c b/lib/sdk/crt/string/wcsncat.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcsncat.c rename to lib/sdk/crt/string/wcsncat.c diff --git a/reactos/lib/sdk/crt/string/wcsncmp.c b/lib/sdk/crt/string/wcsncmp.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcsncmp.c rename to lib/sdk/crt/string/wcsncmp.c diff --git a/reactos/lib/sdk/crt/string/wcsncpy.c b/lib/sdk/crt/string/wcsncpy.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcsncpy.c rename to lib/sdk/crt/string/wcsncpy.c diff --git a/reactos/lib/sdk/crt/string/wcsnlen.c b/lib/sdk/crt/string/wcsnlen.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcsnlen.c rename to lib/sdk/crt/string/wcsnlen.c diff --git a/reactos/lib/sdk/crt/string/wcsrchr.c b/lib/sdk/crt/string/wcsrchr.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcsrchr.c rename to lib/sdk/crt/string/wcsrchr.c diff --git a/reactos/lib/sdk/crt/string/wcstod.c b/lib/sdk/crt/string/wcstod.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcstod.c rename to lib/sdk/crt/string/wcstod.c diff --git a/reactos/lib/sdk/crt/string/wcstol.c b/lib/sdk/crt/string/wcstol.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcstol.c rename to lib/sdk/crt/string/wcstol.c diff --git a/reactos/lib/sdk/crt/string/wcstombs_nt.c b/lib/sdk/crt/string/wcstombs_nt.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcstombs_nt.c rename to lib/sdk/crt/string/wcstombs_nt.c diff --git a/reactos/lib/sdk/crt/string/wcstoul.c b/lib/sdk/crt/string/wcstoul.c similarity index 100% rename from reactos/lib/sdk/crt/string/wcstoul.c rename to lib/sdk/crt/string/wcstoul.c diff --git a/reactos/lib/sdk/crt/string/witoa.c b/lib/sdk/crt/string/witoa.c similarity index 100% rename from reactos/lib/sdk/crt/string/witoa.c rename to lib/sdk/crt/string/witoa.c diff --git a/reactos/lib/sdk/crt/string/witow.c b/lib/sdk/crt/string/witow.c similarity index 100% rename from reactos/lib/sdk/crt/string/witow.c rename to lib/sdk/crt/string/witow.c diff --git a/reactos/lib/sdk/crt/string/wsplitp.c b/lib/sdk/crt/string/wsplitp.c similarity index 100% rename from reactos/lib/sdk/crt/string/wsplitp.c rename to lib/sdk/crt/string/wsplitp.c diff --git a/reactos/lib/sdk/crt/string/wtoi.c b/lib/sdk/crt/string/wtoi.c similarity index 100% rename from reactos/lib/sdk/crt/string/wtoi.c rename to lib/sdk/crt/string/wtoi.c diff --git a/reactos/lib/sdk/crt/string/wtoi64.c b/lib/sdk/crt/string/wtoi64.c similarity index 100% rename from reactos/lib/sdk/crt/string/wtoi64.c rename to lib/sdk/crt/string/wtoi64.c diff --git a/reactos/lib/sdk/crt/string/wtol.c b/lib/sdk/crt/string/wtol.c similarity index 100% rename from reactos/lib/sdk/crt/string/wtol.c rename to lib/sdk/crt/string/wtol.c diff --git a/reactos/lib/sdk/crt/sys_stat/systime.c b/lib/sdk/crt/sys_stat/systime.c similarity index 100% rename from reactos/lib/sdk/crt/sys_stat/systime.c rename to lib/sdk/crt/sys_stat/systime.c diff --git a/reactos/lib/sdk/crt/time/clock.c b/lib/sdk/crt/time/clock.c similarity index 100% rename from reactos/lib/sdk/crt/time/clock.c rename to lib/sdk/crt/time/clock.c diff --git a/reactos/lib/sdk/crt/time/ctime.c b/lib/sdk/crt/time/ctime.c similarity index 100% rename from reactos/lib/sdk/crt/time/ctime.c rename to lib/sdk/crt/time/ctime.c diff --git a/reactos/lib/sdk/crt/time/difftime.c b/lib/sdk/crt/time/difftime.c similarity index 100% rename from reactos/lib/sdk/crt/time/difftime.c rename to lib/sdk/crt/time/difftime.c diff --git a/reactos/lib/sdk/crt/time/ftime.c b/lib/sdk/crt/time/ftime.c similarity index 100% rename from reactos/lib/sdk/crt/time/ftime.c rename to lib/sdk/crt/time/ftime.c diff --git a/reactos/lib/sdk/crt/time/posixrul.h b/lib/sdk/crt/time/posixrul.h similarity index 100% rename from reactos/lib/sdk/crt/time/posixrul.h rename to lib/sdk/crt/time/posixrul.h diff --git a/reactos/lib/sdk/crt/time/strdate.c b/lib/sdk/crt/time/strdate.c similarity index 100% rename from reactos/lib/sdk/crt/time/strdate.c rename to lib/sdk/crt/time/strdate.c diff --git a/reactos/lib/sdk/crt/time/strftime.c b/lib/sdk/crt/time/strftime.c similarity index 100% rename from reactos/lib/sdk/crt/time/strftime.c rename to lib/sdk/crt/time/strftime.c diff --git a/reactos/lib/sdk/crt/time/strtime.c b/lib/sdk/crt/time/strtime.c similarity index 100% rename from reactos/lib/sdk/crt/time/strtime.c rename to lib/sdk/crt/time/strtime.c diff --git a/reactos/lib/sdk/crt/time/time.c b/lib/sdk/crt/time/time.c similarity index 100% rename from reactos/lib/sdk/crt/time/time.c rename to lib/sdk/crt/time/time.c diff --git a/reactos/lib/sdk/crt/time/tz_vars.c b/lib/sdk/crt/time/tz_vars.c similarity index 100% rename from reactos/lib/sdk/crt/time/tz_vars.c rename to lib/sdk/crt/time/tz_vars.c diff --git a/reactos/lib/sdk/crt/time/tzfile.h b/lib/sdk/crt/time/tzfile.h similarity index 100% rename from reactos/lib/sdk/crt/time/tzfile.h rename to lib/sdk/crt/time/tzfile.h diff --git a/reactos/lib/sdk/crt/time/wctime.c b/lib/sdk/crt/time/wctime.c similarity index 100% rename from reactos/lib/sdk/crt/time/wctime.c rename to lib/sdk/crt/time/wctime.c diff --git a/reactos/lib/sdk/crt/time/wstrdate.c b/lib/sdk/crt/time/wstrdate.c similarity index 100% rename from reactos/lib/sdk/crt/time/wstrdate.c rename to lib/sdk/crt/time/wstrdate.c diff --git a/reactos/lib/sdk/crt/time/wstrtime.c b/lib/sdk/crt/time/wstrtime.c similarity index 100% rename from reactos/lib/sdk/crt/time/wstrtime.c rename to lib/sdk/crt/time/wstrtime.c diff --git a/reactos/lib/sdk/crt/wine/heap.c b/lib/sdk/crt/wine/heap.c similarity index 100% rename from reactos/lib/sdk/crt/wine/heap.c rename to lib/sdk/crt/wine/heap.c diff --git a/reactos/lib/sdk/crt/wine/undname.c b/lib/sdk/crt/wine/undname.c similarity index 100% rename from reactos/lib/sdk/crt/wine/undname.c rename to lib/sdk/crt/wine/undname.c diff --git a/reactos/lib/sdk/crt/wstring/wcscoll.c b/lib/sdk/crt/wstring/wcscoll.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcscoll.c rename to lib/sdk/crt/wstring/wcscoll.c diff --git a/reactos/lib/sdk/crt/wstring/wcscspn.c b/lib/sdk/crt/wstring/wcscspn.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcscspn.c rename to lib/sdk/crt/wstring/wcscspn.c diff --git a/reactos/lib/sdk/crt/wstring/wcsicmp.c b/lib/sdk/crt/wstring/wcsicmp.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcsicmp.c rename to lib/sdk/crt/wstring/wcsicmp.c diff --git a/reactos/lib/sdk/crt/wstring/wcslwr.c b/lib/sdk/crt/wstring/wcslwr.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcslwr.c rename to lib/sdk/crt/wstring/wcslwr.c diff --git a/reactos/lib/sdk/crt/wstring/wcsnicmp.c b/lib/sdk/crt/wstring/wcsnicmp.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcsnicmp.c rename to lib/sdk/crt/wstring/wcsnicmp.c diff --git a/reactos/lib/sdk/crt/wstring/wcsspn.c b/lib/sdk/crt/wstring/wcsspn.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcsspn.c rename to lib/sdk/crt/wstring/wcsspn.c diff --git a/reactos/lib/sdk/crt/wstring/wcsstr.c b/lib/sdk/crt/wstring/wcsstr.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcsstr.c rename to lib/sdk/crt/wstring/wcsstr.c diff --git a/reactos/lib/sdk/crt/wstring/wcstok.c b/lib/sdk/crt/wstring/wcstok.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcstok.c rename to lib/sdk/crt/wstring/wcstok.c diff --git a/reactos/lib/sdk/crt/wstring/wcsupr.c b/lib/sdk/crt/wstring/wcsupr.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcsupr.c rename to lib/sdk/crt/wstring/wcsupr.c diff --git a/reactos/lib/sdk/crt/wstring/wcsxfrm.c b/lib/sdk/crt/wstring/wcsxfrm.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wcsxfrm.c rename to lib/sdk/crt/wstring/wcsxfrm.c diff --git a/reactos/lib/sdk/crt/wstring/wlasttok.c b/lib/sdk/crt/wstring/wlasttok.c similarity index 100% rename from reactos/lib/sdk/crt/wstring/wlasttok.c rename to lib/sdk/crt/wstring/wlasttok.c diff --git a/reactos/lib/sdk/dxguid/dxguid-mingw.c b/lib/sdk/dxguid/dxguid-mingw.c similarity index 100% rename from reactos/lib/sdk/dxguid/dxguid-mingw.c rename to lib/sdk/dxguid/dxguid-mingw.c diff --git a/reactos/lib/sdk/dxguid/dxguid.rbuild b/lib/sdk/dxguid/dxguid.rbuild similarity index 100% rename from reactos/lib/sdk/dxguid/dxguid.rbuild rename to lib/sdk/dxguid/dxguid.rbuild diff --git a/reactos/lib/sdk/nt/entry_point.c b/lib/sdk/nt/entry_point.c similarity index 100% rename from reactos/lib/sdk/nt/entry_point.c rename to lib/sdk/nt/entry_point.c diff --git a/reactos/lib/sdk/nt/nt.rbuild b/lib/sdk/nt/nt.rbuild similarity index 100% rename from reactos/lib/sdk/nt/nt.rbuild rename to lib/sdk/nt/nt.rbuild diff --git a/reactos/lib/sdk/nt/readme.txt b/lib/sdk/nt/readme.txt similarity index 100% rename from reactos/lib/sdk/nt/readme.txt rename to lib/sdk/nt/readme.txt diff --git a/reactos/lib/sdk/scrnsave/scrnsave.c b/lib/sdk/scrnsave/scrnsave.c similarity index 100% rename from reactos/lib/sdk/scrnsave/scrnsave.c rename to lib/sdk/scrnsave/scrnsave.c diff --git a/reactos/lib/sdk/scrnsave/scrnsave.rbuild b/lib/sdk/scrnsave/scrnsave.rbuild similarity index 100% rename from reactos/lib/sdk/scrnsave/scrnsave.rbuild rename to lib/sdk/scrnsave/scrnsave.rbuild diff --git a/reactos/lib/sdk/sdk.rbuild b/lib/sdk/sdk.rbuild similarity index 100% rename from reactos/lib/sdk/sdk.rbuild rename to lib/sdk/sdk.rbuild diff --git a/reactos/lib/sdk/strmiids/strmiids.c b/lib/sdk/strmiids/strmiids.c similarity index 100% rename from reactos/lib/sdk/strmiids/strmiids.c rename to lib/sdk/strmiids/strmiids.c diff --git a/reactos/lib/sdk/strmiids/strmiids.rbuild b/lib/sdk/strmiids/strmiids.rbuild similarity index 100% rename from reactos/lib/sdk/strmiids/strmiids.rbuild rename to lib/sdk/strmiids/strmiids.rbuild diff --git a/reactos/lib/sdk/uuid/uuid.c b/lib/sdk/uuid/uuid.c similarity index 100% rename from reactos/lib/sdk/uuid/uuid.c rename to lib/sdk/uuid/uuid.c diff --git a/reactos/lib/sdk/uuid/uuid.rbuild b/lib/sdk/uuid/uuid.rbuild similarity index 100% rename from reactos/lib/sdk/uuid/uuid.rbuild rename to lib/sdk/uuid/uuid.rbuild diff --git a/reactos/lib/sdk/wdmguid/wdmguid.c b/lib/sdk/wdmguid/wdmguid.c similarity index 100% rename from reactos/lib/sdk/wdmguid/wdmguid.c rename to lib/sdk/wdmguid/wdmguid.c diff --git a/reactos/lib/sdk/wdmguid/wdmguid.rbuild b/lib/sdk/wdmguid/wdmguid.rbuild similarity index 100% rename from reactos/lib/sdk/wdmguid/wdmguid.rbuild rename to lib/sdk/wdmguid/wdmguid.rbuild diff --git a/reactos/lib/smlib/compses.c b/lib/smlib/compses.c similarity index 100% rename from reactos/lib/smlib/compses.c rename to lib/smlib/compses.c diff --git a/reactos/lib/smlib/connect.c b/lib/smlib/connect.c similarity index 100% rename from reactos/lib/smlib/connect.c rename to lib/smlib/connect.c diff --git a/reactos/lib/smlib/execpgm.c b/lib/smlib/execpgm.c similarity index 100% rename from reactos/lib/smlib/execpgm.c rename to lib/smlib/execpgm.c diff --git a/reactos/lib/smlib/lookupss.c b/lib/smlib/lookupss.c similarity index 100% rename from reactos/lib/smlib/lookupss.c rename to lib/smlib/lookupss.c diff --git a/reactos/lib/smlib/precomp.h b/lib/smlib/precomp.h similarity index 100% rename from reactos/lib/smlib/precomp.h rename to lib/smlib/precomp.h diff --git a/reactos/lib/smlib/smlib.rbuild b/lib/smlib/smlib.rbuild similarity index 100% rename from reactos/lib/smlib/smlib.rbuild rename to lib/smlib/smlib.rbuild diff --git a/reactos/lib/win32ksys/win32ksys.rbuild b/lib/win32ksys/win32ksys.rbuild similarity index 100% rename from reactos/lib/win32ksys/win32ksys.rbuild rename to lib/win32ksys/win32ksys.rbuild diff --git a/reactos/media/doc/3rd Party Files.txt b/media/doc/3rd Party Files.txt similarity index 100% rename from reactos/media/doc/3rd Party Files.txt rename to media/doc/3rd Party Files.txt diff --git a/reactos/media/doc/DIRS b/media/doc/DIRS similarity index 100% rename from reactos/media/doc/DIRS rename to media/doc/DIRS diff --git a/reactos/media/doc/DdCreateDirectDrawObject.txt b/media/doc/DdCreateDirectDrawObject.txt similarity index 100% rename from reactos/media/doc/DdCreateDirectDrawObject.txt rename to media/doc/DdCreateDirectDrawObject.txt diff --git a/reactos/media/doc/DdDeleteDirectDrawObject.txt b/media/doc/DdDeleteDirectDrawObject.txt similarity index 100% rename from reactos/media/doc/DdDeleteDirectDrawObject.txt rename to media/doc/DdDeleteDirectDrawObject.txt diff --git a/reactos/media/doc/HACKING b/media/doc/HACKING similarity index 100% rename from reactos/media/doc/HACKING rename to media/doc/HACKING diff --git a/reactos/media/doc/INDEX b/media/doc/INDEX similarity index 100% rename from reactos/media/doc/INDEX rename to media/doc/INDEX diff --git a/reactos/media/doc/INTERNALS b/media/doc/INTERNALS similarity index 100% rename from reactos/media/doc/INTERNALS rename to media/doc/INTERNALS diff --git a/reactos/media/doc/LPC.txt b/media/doc/LPC.txt similarity index 100% rename from reactos/media/doc/LPC.txt rename to media/doc/LPC.txt diff --git a/reactos/media/doc/README.WINE b/media/doc/README.WINE similarity index 100% rename from reactos/media/doc/README.WINE rename to media/doc/README.WINE diff --git a/reactos/media/doc/apc b/media/doc/apc similarity index 100% rename from reactos/media/doc/apc rename to media/doc/apc diff --git a/reactos/media/doc/books.txt b/media/doc/books.txt similarity index 100% rename from reactos/media/doc/books.txt rename to media/doc/books.txt diff --git a/reactos/media/doc/irp cancel boilerplate.c b/media/doc/irp cancel boilerplate.c similarity index 100% rename from reactos/media/doc/irp cancel boilerplate.c rename to media/doc/irp cancel boilerplate.c diff --git a/reactos/media/doc/locks.txt b/media/doc/locks.txt similarity index 100% rename from reactos/media/doc/locks.txt rename to media/doc/locks.txt diff --git a/reactos/media/doc/memcpy_optimize.txt b/media/doc/memcpy_optimize.txt similarity index 100% rename from reactos/media/doc/memcpy_optimize.txt rename to media/doc/memcpy_optimize.txt diff --git a/reactos/media/doc/news1 b/media/doc/news1 similarity index 100% rename from reactos/media/doc/news1 rename to media/doc/news1 diff --git a/reactos/media/doc/news2 b/media/doc/news2 similarity index 100% rename from reactos/media/doc/news2 rename to media/doc/news2 diff --git a/reactos/media/doc/notes b/media/doc/notes similarity index 100% rename from reactos/media/doc/notes rename to media/doc/notes diff --git a/reactos/media/doc/todo b/media/doc/todo similarity index 100% rename from reactos/media/doc/todo rename to media/doc/todo diff --git a/reactos/media/doc/win32k_refs.txt b/media/doc/win32k_refs.txt similarity index 100% rename from reactos/media/doc/win32k_refs.txt rename to media/doc/win32k_refs.txt diff --git a/reactos/media/doc/winsta and desktops.txt b/media/doc/winsta and desktops.txt similarity index 100% rename from reactos/media/doc/winsta and desktops.txt rename to media/doc/winsta and desktops.txt diff --git a/reactos/media/drivers/drivers.rbuild b/media/drivers/drivers.rbuild similarity index 100% rename from reactos/media/drivers/drivers.rbuild rename to media/drivers/drivers.rbuild diff --git a/reactos/media/drivers/etc/KDBinit b/media/drivers/etc/KDBinit similarity index 100% rename from reactos/media/drivers/etc/KDBinit rename to media/drivers/etc/KDBinit diff --git a/reactos/media/drivers/etc/etc.rbuild b/media/drivers/etc/etc.rbuild similarity index 100% rename from reactos/media/drivers/etc/etc.rbuild rename to media/drivers/etc/etc.rbuild diff --git a/reactos/media/drivers/etc/services b/media/drivers/etc/services similarity index 100% rename from reactos/media/drivers/etc/services rename to media/drivers/etc/services diff --git a/reactos/media/fonts/DejaVuSans-Bold.ttf b/media/fonts/DejaVuSans-Bold.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSans-Bold.ttf rename to media/fonts/DejaVuSans-Bold.ttf diff --git a/reactos/media/fonts/DejaVuSans-BoldOblique.ttf b/media/fonts/DejaVuSans-BoldOblique.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSans-BoldOblique.ttf rename to media/fonts/DejaVuSans-BoldOblique.ttf diff --git a/reactos/media/fonts/DejaVuSans-Oblique.ttf b/media/fonts/DejaVuSans-Oblique.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSans-Oblique.ttf rename to media/fonts/DejaVuSans-Oblique.ttf diff --git a/reactos/media/fonts/DejaVuSans.ttf b/media/fonts/DejaVuSans.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSans.ttf rename to media/fonts/DejaVuSans.ttf diff --git a/reactos/media/fonts/DejaVuSansMono-Bold.ttf b/media/fonts/DejaVuSansMono-Bold.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSansMono-Bold.ttf rename to media/fonts/DejaVuSansMono-Bold.ttf diff --git a/reactos/media/fonts/DejaVuSansMono-BoldOblique.ttf b/media/fonts/DejaVuSansMono-BoldOblique.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSansMono-BoldOblique.ttf rename to media/fonts/DejaVuSansMono-BoldOblique.ttf diff --git a/reactos/media/fonts/DejaVuSansMono-Oblique.ttf b/media/fonts/DejaVuSansMono-Oblique.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSansMono-Oblique.ttf rename to media/fonts/DejaVuSansMono-Oblique.ttf diff --git a/reactos/media/fonts/DejaVuSansMono.ttf b/media/fonts/DejaVuSansMono.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSansMono.ttf rename to media/fonts/DejaVuSansMono.ttf diff --git a/reactos/media/fonts/DejaVuSerif-Bold.ttf b/media/fonts/DejaVuSerif-Bold.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSerif-Bold.ttf rename to media/fonts/DejaVuSerif-Bold.ttf diff --git a/reactos/media/fonts/DejaVuSerif-BoldItalic.ttf b/media/fonts/DejaVuSerif-BoldItalic.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSerif-BoldItalic.ttf rename to media/fonts/DejaVuSerif-BoldItalic.ttf diff --git a/reactos/media/fonts/DejaVuSerif-Italic.ttf b/media/fonts/DejaVuSerif-Italic.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSerif-Italic.ttf rename to media/fonts/DejaVuSerif-Italic.ttf diff --git a/reactos/media/fonts/DejaVuSerif.ttf b/media/fonts/DejaVuSerif.ttf similarity index 100% rename from reactos/media/fonts/DejaVuSerif.ttf rename to media/fonts/DejaVuSerif.ttf diff --git a/reactos/media/fonts/FreeMono.ttf b/media/fonts/FreeMono.ttf similarity index 100% rename from reactos/media/fonts/FreeMono.ttf rename to media/fonts/FreeMono.ttf diff --git a/reactos/media/fonts/FreeMonoBold.ttf b/media/fonts/FreeMonoBold.ttf similarity index 100% rename from reactos/media/fonts/FreeMonoBold.ttf rename to media/fonts/FreeMonoBold.ttf diff --git a/reactos/media/fonts/FreeMonoBoldOblique.ttf b/media/fonts/FreeMonoBoldOblique.ttf similarity index 100% rename from reactos/media/fonts/FreeMonoBoldOblique.ttf rename to media/fonts/FreeMonoBoldOblique.ttf diff --git a/reactos/media/fonts/FreeMonoOblique.ttf b/media/fonts/FreeMonoOblique.ttf similarity index 100% rename from reactos/media/fonts/FreeMonoOblique.ttf rename to media/fonts/FreeMonoOblique.ttf diff --git a/reactos/media/fonts/LiberationMono-Bold.ttf b/media/fonts/LiberationMono-Bold.ttf similarity index 100% rename from reactos/media/fonts/LiberationMono-Bold.ttf rename to media/fonts/LiberationMono-Bold.ttf diff --git a/reactos/media/fonts/LiberationMono-BoldItalic.ttf b/media/fonts/LiberationMono-BoldItalic.ttf similarity index 100% rename from reactos/media/fonts/LiberationMono-BoldItalic.ttf rename to media/fonts/LiberationMono-BoldItalic.ttf diff --git a/reactos/media/fonts/LiberationMono-Italic.ttf b/media/fonts/LiberationMono-Italic.ttf similarity index 100% rename from reactos/media/fonts/LiberationMono-Italic.ttf rename to media/fonts/LiberationMono-Italic.ttf diff --git a/reactos/media/fonts/LiberationMono-Regular.ttf b/media/fonts/LiberationMono-Regular.ttf similarity index 100% rename from reactos/media/fonts/LiberationMono-Regular.ttf rename to media/fonts/LiberationMono-Regular.ttf diff --git a/reactos/media/fonts/LiberationSans-Bold.ttf b/media/fonts/LiberationSans-Bold.ttf similarity index 100% rename from reactos/media/fonts/LiberationSans-Bold.ttf rename to media/fonts/LiberationSans-Bold.ttf diff --git a/reactos/media/fonts/LiberationSans-BoldItalic.ttf b/media/fonts/LiberationSans-BoldItalic.ttf similarity index 100% rename from reactos/media/fonts/LiberationSans-BoldItalic.ttf rename to media/fonts/LiberationSans-BoldItalic.ttf diff --git a/reactos/media/fonts/LiberationSans-Italic.ttf b/media/fonts/LiberationSans-Italic.ttf similarity index 100% rename from reactos/media/fonts/LiberationSans-Italic.ttf rename to media/fonts/LiberationSans-Italic.ttf diff --git a/reactos/media/fonts/LiberationSans-Regular.ttf b/media/fonts/LiberationSans-Regular.ttf similarity index 100% rename from reactos/media/fonts/LiberationSans-Regular.ttf rename to media/fonts/LiberationSans-Regular.ttf diff --git a/reactos/media/fonts/LiberationSerif-Bold.ttf b/media/fonts/LiberationSerif-Bold.ttf similarity index 100% rename from reactos/media/fonts/LiberationSerif-Bold.ttf rename to media/fonts/LiberationSerif-Bold.ttf diff --git a/reactos/media/fonts/LiberationSerif-BoldItalic.ttf b/media/fonts/LiberationSerif-BoldItalic.ttf similarity index 100% rename from reactos/media/fonts/LiberationSerif-BoldItalic.ttf rename to media/fonts/LiberationSerif-BoldItalic.ttf diff --git a/reactos/media/fonts/LiberationSerif-Italic.ttf b/media/fonts/LiberationSerif-Italic.ttf similarity index 100% rename from reactos/media/fonts/LiberationSerif-Italic.ttf rename to media/fonts/LiberationSerif-Italic.ttf diff --git a/reactos/media/fonts/LiberationSerif-Regular.ttf b/media/fonts/LiberationSerif-Regular.ttf similarity index 100% rename from reactos/media/fonts/LiberationSerif-Regular.ttf rename to media/fonts/LiberationSerif-Regular.ttf diff --git a/reactos/media/fonts/Marlett.ttf b/media/fonts/Marlett.ttf similarity index 100% rename from reactos/media/fonts/Marlett.ttf rename to media/fonts/Marlett.ttf diff --git a/reactos/media/fonts/doc/DejaVu_AUTHORS.txt b/media/fonts/doc/DejaVu_AUTHORS.txt similarity index 100% rename from reactos/media/fonts/doc/DejaVu_AUTHORS.txt rename to media/fonts/doc/DejaVu_AUTHORS.txt diff --git a/reactos/media/fonts/doc/DejaVu_BUGS.txt b/media/fonts/doc/DejaVu_BUGS.txt similarity index 100% rename from reactos/media/fonts/doc/DejaVu_BUGS.txt rename to media/fonts/doc/DejaVu_BUGS.txt diff --git a/reactos/media/fonts/doc/DejaVu_LICENSE.txt b/media/fonts/doc/DejaVu_LICENSE.txt similarity index 100% rename from reactos/media/fonts/doc/DejaVu_LICENSE.txt rename to media/fonts/doc/DejaVu_LICENSE.txt diff --git a/reactos/media/fonts/doc/DejaVu_NEWS.txt b/media/fonts/doc/DejaVu_NEWS.txt similarity index 100% rename from reactos/media/fonts/doc/DejaVu_NEWS.txt rename to media/fonts/doc/DejaVu_NEWS.txt diff --git a/reactos/media/fonts/doc/DejaVu_README.txt b/media/fonts/doc/DejaVu_README.txt similarity index 100% rename from reactos/media/fonts/doc/DejaVu_README.txt rename to media/fonts/doc/DejaVu_README.txt diff --git a/reactos/media/fonts/doc/DejaVu_langcover.txt b/media/fonts/doc/DejaVu_langcover.txt similarity index 100% rename from reactos/media/fonts/doc/DejaVu_langcover.txt rename to media/fonts/doc/DejaVu_langcover.txt diff --git a/reactos/media/fonts/doc/DejaVu_status.txt b/media/fonts/doc/DejaVu_status.txt similarity index 100% rename from reactos/media/fonts/doc/DejaVu_status.txt rename to media/fonts/doc/DejaVu_status.txt diff --git a/reactos/media/fonts/doc/DejaVu_unicover.txt b/media/fonts/doc/DejaVu_unicover.txt similarity index 100% rename from reactos/media/fonts/doc/DejaVu_unicover.txt rename to media/fonts/doc/DejaVu_unicover.txt diff --git a/reactos/media/fonts/doc/FreeFont_readme.txt b/media/fonts/doc/FreeFont_readme.txt similarity index 100% rename from reactos/media/fonts/doc/FreeFont_readme.txt rename to media/fonts/doc/FreeFont_readme.txt diff --git a/reactos/media/fonts/doc/LICENSE_DejaVu.txt b/media/fonts/doc/LICENSE_DejaVu.txt similarity index 100% rename from reactos/media/fonts/doc/LICENSE_DejaVu.txt rename to media/fonts/doc/LICENSE_DejaVu.txt diff --git a/reactos/media/fonts/fonts.rbuild b/media/fonts/fonts.rbuild similarity index 100% rename from reactos/media/fonts/fonts.rbuild rename to media/fonts/fonts.rbuild diff --git a/reactos/media/fonts/tahoma.ttf b/media/fonts/tahoma.ttf similarity index 100% rename from reactos/media/fonts/tahoma.ttf rename to media/fonts/tahoma.ttf diff --git a/reactos/media/fonts/tahomabd.ttf b/media/fonts/tahomabd.ttf similarity index 100% rename from reactos/media/fonts/tahomabd.ttf rename to media/fonts/tahomabd.ttf diff --git a/reactos/media/inf/NET_NIC.inf b/media/inf/NET_NIC.inf similarity index 100% rename from reactos/media/inf/NET_NIC.inf rename to media/inf/NET_NIC.inf diff --git a/reactos/media/inf/acpi.inf b/media/inf/acpi.inf similarity index 100% rename from reactos/media/inf/acpi.inf rename to media/inf/acpi.inf diff --git a/reactos/media/inf/cdrom.inf b/media/inf/cdrom.inf similarity index 100% rename from reactos/media/inf/cdrom.inf rename to media/inf/cdrom.inf diff --git a/reactos/media/inf/cpu.inf b/media/inf/cpu.inf similarity index 100% rename from reactos/media/inf/cpu.inf rename to media/inf/cpu.inf diff --git a/reactos/media/inf/display.inf b/media/inf/display.inf similarity index 100% rename from reactos/media/inf/display.inf rename to media/inf/display.inf diff --git a/reactos/media/inf/fdc.inf b/media/inf/fdc.inf similarity index 100% rename from reactos/media/inf/fdc.inf rename to media/inf/fdc.inf diff --git a/reactos/media/inf/font.inf b/media/inf/font.inf similarity index 100% rename from reactos/media/inf/font.inf rename to media/inf/font.inf diff --git a/reactos/media/inf/hdc.inf b/media/inf/hdc.inf similarity index 100% rename from reactos/media/inf/hdc.inf rename to media/inf/hdc.inf diff --git a/reactos/media/inf/inf.rbuild b/media/inf/inf.rbuild similarity index 100% rename from reactos/media/inf/inf.rbuild rename to media/inf/inf.rbuild diff --git a/reactos/media/inf/intl.inf b/media/inf/intl.inf similarity index 100% rename from reactos/media/inf/intl.inf rename to media/inf/intl.inf diff --git a/reactos/media/inf/keyboard.inf b/media/inf/keyboard.inf similarity index 100% rename from reactos/media/inf/keyboard.inf rename to media/inf/keyboard.inf diff --git a/reactos/media/inf/layout.inf b/media/inf/layout.inf similarity index 100% rename from reactos/media/inf/layout.inf rename to media/inf/layout.inf diff --git a/reactos/media/inf/machine.inf b/media/inf/machine.inf similarity index 100% rename from reactos/media/inf/machine.inf rename to media/inf/machine.inf diff --git a/reactos/media/inf/msmouse.inf b/media/inf/msmouse.inf similarity index 100% rename from reactos/media/inf/msmouse.inf rename to media/inf/msmouse.inf diff --git a/reactos/media/inf/netamd.inf b/media/inf/netamd.inf similarity index 100% rename from reactos/media/inf/netamd.inf rename to media/inf/netamd.inf diff --git a/reactos/media/inf/netisa.inf b/media/inf/netisa.inf similarity index 100% rename from reactos/media/inf/netisa.inf rename to media/inf/netisa.inf diff --git a/reactos/media/inf/netrtpnt.inf b/media/inf/netrtpnt.inf similarity index 100% rename from reactos/media/inf/netrtpnt.inf rename to media/inf/netrtpnt.inf diff --git a/reactos/media/inf/nettcpip.inf b/media/inf/nettcpip.inf similarity index 100% rename from reactos/media/inf/nettcpip.inf rename to media/inf/nettcpip.inf diff --git a/reactos/media/inf/ports.inf b/media/inf/ports.inf similarity index 100% rename from reactos/media/inf/ports.inf rename to media/inf/ports.inf diff --git a/reactos/media/inf/scsi.inf b/media/inf/scsi.inf similarity index 100% rename from reactos/media/inf/scsi.inf rename to media/inf/scsi.inf diff --git a/reactos/media/inf/syssetup.inf.tpl b/media/inf/syssetup.inf.tpl similarity index 100% rename from reactos/media/inf/syssetup.inf.tpl rename to media/inf/syssetup.inf.tpl diff --git a/reactos/media/inf/usb.inf b/media/inf/usb.inf similarity index 100% rename from reactos/media/inf/usb.inf rename to media/inf/usb.inf diff --git a/reactos/media/inf/usbport.inf b/media/inf/usbport.inf similarity index 100% rename from reactos/media/inf/usbport.inf rename to media/inf/usbport.inf diff --git a/reactos/media/inf/usbstor.inf b/media/inf/usbstor.inf similarity index 100% rename from reactos/media/inf/usbstor.inf rename to media/inf/usbstor.inf diff --git a/reactos/media/inf/xboxdisp.inf b/media/inf/xboxdisp.inf similarity index 100% rename from reactos/media/inf/xboxdisp.inf rename to media/inf/xboxdisp.inf diff --git a/reactos/media/media.rbuild b/media/media.rbuild similarity index 100% rename from reactos/media/media.rbuild rename to media/media.rbuild diff --git a/reactos/media/nls/c_037.nls b/media/nls/c_037.nls similarity index 100% rename from reactos/media/nls/c_037.nls rename to media/nls/c_037.nls diff --git a/reactos/media/nls/c_10000.nls b/media/nls/c_10000.nls similarity index 100% rename from reactos/media/nls/c_10000.nls rename to media/nls/c_10000.nls diff --git a/reactos/media/nls/c_10006.nls b/media/nls/c_10006.nls similarity index 100% rename from reactos/media/nls/c_10006.nls rename to media/nls/c_10006.nls diff --git a/reactos/media/nls/c_10007.nls b/media/nls/c_10007.nls similarity index 100% rename from reactos/media/nls/c_10007.nls rename to media/nls/c_10007.nls diff --git a/reactos/media/nls/c_10029.nls b/media/nls/c_10029.nls similarity index 100% rename from reactos/media/nls/c_10029.nls rename to media/nls/c_10029.nls diff --git a/reactos/media/nls/c_1006.nls b/media/nls/c_1006.nls similarity index 100% rename from reactos/media/nls/c_1006.nls rename to media/nls/c_1006.nls diff --git a/reactos/media/nls/c_10079.nls b/media/nls/c_10079.nls similarity index 100% rename from reactos/media/nls/c_10079.nls rename to media/nls/c_10079.nls diff --git a/reactos/media/nls/c_10081.nls b/media/nls/c_10081.nls similarity index 100% rename from reactos/media/nls/c_10081.nls rename to media/nls/c_10081.nls diff --git a/reactos/media/nls/c_1026.nls b/media/nls/c_1026.nls similarity index 100% rename from reactos/media/nls/c_1026.nls rename to media/nls/c_1026.nls diff --git a/reactos/media/nls/c_1250.nls b/media/nls/c_1250.nls similarity index 100% rename from reactos/media/nls/c_1250.nls rename to media/nls/c_1250.nls diff --git a/reactos/media/nls/c_1251.nls b/media/nls/c_1251.nls similarity index 100% rename from reactos/media/nls/c_1251.nls rename to media/nls/c_1251.nls diff --git a/reactos/media/nls/c_1252.nls b/media/nls/c_1252.nls similarity index 100% rename from reactos/media/nls/c_1252.nls rename to media/nls/c_1252.nls diff --git a/reactos/media/nls/c_1253.nls b/media/nls/c_1253.nls similarity index 100% rename from reactos/media/nls/c_1253.nls rename to media/nls/c_1253.nls diff --git a/reactos/media/nls/c_1254.nls b/media/nls/c_1254.nls similarity index 100% rename from reactos/media/nls/c_1254.nls rename to media/nls/c_1254.nls diff --git a/reactos/media/nls/c_1255.nls b/media/nls/c_1255.nls similarity index 100% rename from reactos/media/nls/c_1255.nls rename to media/nls/c_1255.nls diff --git a/reactos/media/nls/c_1256.nls b/media/nls/c_1256.nls similarity index 100% rename from reactos/media/nls/c_1256.nls rename to media/nls/c_1256.nls diff --git a/reactos/media/nls/c_1257.nls b/media/nls/c_1257.nls similarity index 100% rename from reactos/media/nls/c_1257.nls rename to media/nls/c_1257.nls diff --git a/reactos/media/nls/c_1258.nls b/media/nls/c_1258.nls similarity index 100% rename from reactos/media/nls/c_1258.nls rename to media/nls/c_1258.nls diff --git a/reactos/media/nls/c_20866.nls b/media/nls/c_20866.nls similarity index 100% rename from reactos/media/nls/c_20866.nls rename to media/nls/c_20866.nls diff --git a/reactos/media/nls/c_28591.nls b/media/nls/c_28591.nls similarity index 100% rename from reactos/media/nls/c_28591.nls rename to media/nls/c_28591.nls diff --git a/reactos/media/nls/c_28592.nls b/media/nls/c_28592.nls similarity index 100% rename from reactos/media/nls/c_28592.nls rename to media/nls/c_28592.nls diff --git a/reactos/media/nls/c_28593.nls b/media/nls/c_28593.nls similarity index 100% rename from reactos/media/nls/c_28593.nls rename to media/nls/c_28593.nls diff --git a/reactos/media/nls/c_28594.nls b/media/nls/c_28594.nls similarity index 100% rename from reactos/media/nls/c_28594.nls rename to media/nls/c_28594.nls diff --git a/reactos/media/nls/c_28595.nls b/media/nls/c_28595.nls similarity index 100% rename from reactos/media/nls/c_28595.nls rename to media/nls/c_28595.nls diff --git a/reactos/media/nls/c_28596.nls b/media/nls/c_28596.nls similarity index 100% rename from reactos/media/nls/c_28596.nls rename to media/nls/c_28596.nls diff --git a/reactos/media/nls/c_28597.nls b/media/nls/c_28597.nls similarity index 100% rename from reactos/media/nls/c_28597.nls rename to media/nls/c_28597.nls diff --git a/reactos/media/nls/c_28598.nls b/media/nls/c_28598.nls similarity index 100% rename from reactos/media/nls/c_28598.nls rename to media/nls/c_28598.nls diff --git a/reactos/media/nls/c_28599.nls b/media/nls/c_28599.nls similarity index 100% rename from reactos/media/nls/c_28599.nls rename to media/nls/c_28599.nls diff --git a/reactos/media/nls/c_424.nls b/media/nls/c_424.nls similarity index 100% rename from reactos/media/nls/c_424.nls rename to media/nls/c_424.nls diff --git a/reactos/media/nls/c_437.nls b/media/nls/c_437.nls similarity index 100% rename from reactos/media/nls/c_437.nls rename to media/nls/c_437.nls diff --git a/reactos/media/nls/c_500.nls b/media/nls/c_500.nls similarity index 100% rename from reactos/media/nls/c_500.nls rename to media/nls/c_500.nls diff --git a/reactos/media/nls/c_737.nls b/media/nls/c_737.nls similarity index 100% rename from reactos/media/nls/c_737.nls rename to media/nls/c_737.nls diff --git a/reactos/media/nls/c_775.nls b/media/nls/c_775.nls similarity index 100% rename from reactos/media/nls/c_775.nls rename to media/nls/c_775.nls diff --git a/reactos/media/nls/c_850.nls b/media/nls/c_850.nls similarity index 100% rename from reactos/media/nls/c_850.nls rename to media/nls/c_850.nls diff --git a/reactos/media/nls/c_852.nls b/media/nls/c_852.nls similarity index 100% rename from reactos/media/nls/c_852.nls rename to media/nls/c_852.nls diff --git a/reactos/media/nls/c_855.nls b/media/nls/c_855.nls similarity index 100% rename from reactos/media/nls/c_855.nls rename to media/nls/c_855.nls diff --git a/reactos/media/nls/c_856.nls b/media/nls/c_856.nls similarity index 100% rename from reactos/media/nls/c_856.nls rename to media/nls/c_856.nls diff --git a/reactos/media/nls/c_857.nls b/media/nls/c_857.nls similarity index 100% rename from reactos/media/nls/c_857.nls rename to media/nls/c_857.nls diff --git a/reactos/media/nls/c_860.nls b/media/nls/c_860.nls similarity index 100% rename from reactos/media/nls/c_860.nls rename to media/nls/c_860.nls diff --git a/reactos/media/nls/c_861.nls b/media/nls/c_861.nls similarity index 100% rename from reactos/media/nls/c_861.nls rename to media/nls/c_861.nls diff --git a/reactos/media/nls/c_862.nls b/media/nls/c_862.nls similarity index 100% rename from reactos/media/nls/c_862.nls rename to media/nls/c_862.nls diff --git a/reactos/media/nls/c_863.nls b/media/nls/c_863.nls similarity index 100% rename from reactos/media/nls/c_863.nls rename to media/nls/c_863.nls diff --git a/reactos/media/nls/c_864.nls b/media/nls/c_864.nls similarity index 100% rename from reactos/media/nls/c_864.nls rename to media/nls/c_864.nls diff --git a/reactos/media/nls/c_865.nls b/media/nls/c_865.nls similarity index 100% rename from reactos/media/nls/c_865.nls rename to media/nls/c_865.nls diff --git a/reactos/media/nls/c_866.nls b/media/nls/c_866.nls similarity index 100% rename from reactos/media/nls/c_866.nls rename to media/nls/c_866.nls diff --git a/reactos/media/nls/c_869.nls b/media/nls/c_869.nls similarity index 100% rename from reactos/media/nls/c_869.nls rename to media/nls/c_869.nls diff --git a/reactos/media/nls/c_874.nls b/media/nls/c_874.nls similarity index 100% rename from reactos/media/nls/c_874.nls rename to media/nls/c_874.nls diff --git a/reactos/media/nls/c_875.nls b/media/nls/c_875.nls similarity index 100% rename from reactos/media/nls/c_875.nls rename to media/nls/c_875.nls diff --git a/reactos/media/nls/c_878.nls b/media/nls/c_878.nls similarity index 100% rename from reactos/media/nls/c_878.nls rename to media/nls/c_878.nls diff --git a/reactos/media/nls/c_932.nls b/media/nls/c_932.nls similarity index 100% rename from reactos/media/nls/c_932.nls rename to media/nls/c_932.nls diff --git a/reactos/media/nls/c_936.nls b/media/nls/c_936.nls similarity index 100% rename from reactos/media/nls/c_936.nls rename to media/nls/c_936.nls diff --git a/reactos/media/nls/c_949.nls b/media/nls/c_949.nls similarity index 100% rename from reactos/media/nls/c_949.nls rename to media/nls/c_949.nls diff --git a/reactos/media/nls/c_950.nls b/media/nls/c_950.nls similarity index 100% rename from reactos/media/nls/c_950.nls rename to media/nls/c_950.nls diff --git a/reactos/media/nls/l_intl.nls b/media/nls/l_intl.nls similarity index 100% rename from reactos/media/nls/l_intl.nls rename to media/nls/l_intl.nls diff --git a/reactos/media/nls/nls.rbuild b/media/nls/nls.rbuild similarity index 100% rename from reactos/media/nls/nls.rbuild rename to media/nls/nls.rbuild diff --git a/reactos/media/sounds/error.mp3 b/media/sounds/error.mp3 similarity index 100% rename from reactos/media/sounds/error.mp3 rename to media/sounds/error.mp3 diff --git a/reactos/media/sounds/notice.mp3 b/media/sounds/notice.mp3 similarity index 100% rename from reactos/media/sounds/notice.mp3 rename to media/sounds/notice.mp3 diff --git a/reactos/media/vgafonts/437-8x8.bin b/media/vgafonts/437-8x8.bin similarity index 100% rename from reactos/media/vgafonts/437-8x8.bin rename to media/vgafonts/437-8x8.bin diff --git a/reactos/media/vgafonts/737-8x8.bin b/media/vgafonts/737-8x8.bin similarity index 100% rename from reactos/media/vgafonts/737-8x8.bin rename to media/vgafonts/737-8x8.bin diff --git a/reactos/media/vgafonts/775-8x8.bin b/media/vgafonts/775-8x8.bin similarity index 100% rename from reactos/media/vgafonts/775-8x8.bin rename to media/vgafonts/775-8x8.bin diff --git a/reactos/media/vgafonts/850-8x8.bin b/media/vgafonts/850-8x8.bin similarity index 100% rename from reactos/media/vgafonts/850-8x8.bin rename to media/vgafonts/850-8x8.bin diff --git a/reactos/media/vgafonts/852-8x8.bin b/media/vgafonts/852-8x8.bin similarity index 100% rename from reactos/media/vgafonts/852-8x8.bin rename to media/vgafonts/852-8x8.bin diff --git a/reactos/media/vgafonts/865-8x8.bin b/media/vgafonts/865-8x8.bin similarity index 100% rename from reactos/media/vgafonts/865-8x8.bin rename to media/vgafonts/865-8x8.bin diff --git a/reactos/media/vgafonts/866-8x8.bin b/media/vgafonts/866-8x8.bin similarity index 100% rename from reactos/media/vgafonts/866-8x8.bin rename to media/vgafonts/866-8x8.bin diff --git a/reactos/media/vgafonts/vgafonts.rbuild b/media/vgafonts/vgafonts.rbuild similarity index 100% rename from reactos/media/vgafonts/vgafonts.rbuild rename to media/vgafonts/vgafonts.rbuild diff --git a/reactos/media/wallpapers/wallpapers.txt b/media/wallpapers/wallpapers.txt similarity index 100% rename from reactos/media/wallpapers/wallpapers.txt rename to media/wallpapers/wallpapers.txt diff --git a/reactos/modules/directory.rbuild b/modules/directory.rbuild similarity index 100% rename from reactos/modules/directory.rbuild rename to modules/directory.rbuild diff --git a/reactos/modules/empty.rbuild b/modules/empty.rbuild similarity index 100% rename from reactos/modules/empty.rbuild rename to modules/empty.rbuild diff --git a/reactos/ntoskrnl/Doxyfile b/ntoskrnl/Doxyfile similarity index 100% rename from reactos/ntoskrnl/Doxyfile rename to ntoskrnl/Doxyfile diff --git a/reactos/ntoskrnl/KrnlFun.c b/ntoskrnl/KrnlFun.c similarity index 100% rename from reactos/ntoskrnl/KrnlFun.c rename to ntoskrnl/KrnlFun.c diff --git a/reactos/ntoskrnl/cc/cacheman.c b/ntoskrnl/cc/cacheman.c similarity index 100% rename from reactos/ntoskrnl/cc/cacheman.c rename to ntoskrnl/cc/cacheman.c diff --git a/reactos/ntoskrnl/cc/copy.c b/ntoskrnl/cc/copy.c similarity index 100% rename from reactos/ntoskrnl/cc/copy.c rename to ntoskrnl/cc/copy.c diff --git a/reactos/ntoskrnl/cc/fs.c b/ntoskrnl/cc/fs.c similarity index 100% rename from reactos/ntoskrnl/cc/fs.c rename to ntoskrnl/cc/fs.c diff --git a/reactos/ntoskrnl/cc/mdl.c b/ntoskrnl/cc/mdl.c similarity index 100% rename from reactos/ntoskrnl/cc/mdl.c rename to ntoskrnl/cc/mdl.c diff --git a/reactos/ntoskrnl/cc/pin.c b/ntoskrnl/cc/pin.c similarity index 100% rename from reactos/ntoskrnl/cc/pin.c rename to ntoskrnl/cc/pin.c diff --git a/reactos/ntoskrnl/cc/view.c b/ntoskrnl/cc/view.c similarity index 100% rename from reactos/ntoskrnl/cc/view.c rename to ntoskrnl/cc/view.c diff --git a/reactos/ntoskrnl/config/arm/cmhardwr.c b/ntoskrnl/config/arm/cmhardwr.c similarity index 100% rename from reactos/ntoskrnl/config/arm/cmhardwr.c rename to ntoskrnl/config/arm/cmhardwr.c diff --git a/reactos/ntoskrnl/config/cmalloc.c b/ntoskrnl/config/cmalloc.c similarity index 100% rename from reactos/ntoskrnl/config/cmalloc.c rename to ntoskrnl/config/cmalloc.c diff --git a/reactos/ntoskrnl/config/cmapi.c b/ntoskrnl/config/cmapi.c similarity index 100% rename from reactos/ntoskrnl/config/cmapi.c rename to ntoskrnl/config/cmapi.c diff --git a/reactos/ntoskrnl/config/cmboot.c b/ntoskrnl/config/cmboot.c similarity index 100% rename from reactos/ntoskrnl/config/cmboot.c rename to ntoskrnl/config/cmboot.c diff --git a/reactos/ntoskrnl/config/cmcheck.c b/ntoskrnl/config/cmcheck.c similarity index 100% rename from reactos/ntoskrnl/config/cmcheck.c rename to ntoskrnl/config/cmcheck.c diff --git a/reactos/ntoskrnl/config/cmconfig.c b/ntoskrnl/config/cmconfig.c similarity index 100% rename from reactos/ntoskrnl/config/cmconfig.c rename to ntoskrnl/config/cmconfig.c diff --git a/reactos/ntoskrnl/config/cmcontrl.c b/ntoskrnl/config/cmcontrl.c similarity index 100% rename from reactos/ntoskrnl/config/cmcontrl.c rename to ntoskrnl/config/cmcontrl.c diff --git a/reactos/ntoskrnl/config/cmdata.c b/ntoskrnl/config/cmdata.c similarity index 100% rename from reactos/ntoskrnl/config/cmdata.c rename to ntoskrnl/config/cmdata.c diff --git a/reactos/ntoskrnl/config/cmdelay.c b/ntoskrnl/config/cmdelay.c similarity index 100% rename from reactos/ntoskrnl/config/cmdelay.c rename to ntoskrnl/config/cmdelay.c diff --git a/reactos/ntoskrnl/config/cmhook.c b/ntoskrnl/config/cmhook.c similarity index 100% rename from reactos/ntoskrnl/config/cmhook.c rename to ntoskrnl/config/cmhook.c diff --git a/reactos/ntoskrnl/config/cmindex.c b/ntoskrnl/config/cmindex.c similarity index 100% rename from reactos/ntoskrnl/config/cmindex.c rename to ntoskrnl/config/cmindex.c diff --git a/reactos/ntoskrnl/config/cminit.c b/ntoskrnl/config/cminit.c similarity index 100% rename from reactos/ntoskrnl/config/cminit.c rename to ntoskrnl/config/cminit.c diff --git a/reactos/ntoskrnl/config/cmkcbncb.c b/ntoskrnl/config/cmkcbncb.c similarity index 100% rename from reactos/ntoskrnl/config/cmkcbncb.c rename to ntoskrnl/config/cmkcbncb.c diff --git a/reactos/ntoskrnl/config/cmkeydel.c b/ntoskrnl/config/cmkeydel.c similarity index 100% rename from reactos/ntoskrnl/config/cmkeydel.c rename to ntoskrnl/config/cmkeydel.c diff --git a/reactos/ntoskrnl/config/cmlazy.c b/ntoskrnl/config/cmlazy.c similarity index 100% rename from reactos/ntoskrnl/config/cmlazy.c rename to ntoskrnl/config/cmlazy.c diff --git a/reactos/ntoskrnl/config/cmmapvw.c b/ntoskrnl/config/cmmapvw.c similarity index 100% rename from reactos/ntoskrnl/config/cmmapvw.c rename to ntoskrnl/config/cmmapvw.c diff --git a/reactos/ntoskrnl/config/cmname.c b/ntoskrnl/config/cmname.c similarity index 100% rename from reactos/ntoskrnl/config/cmname.c rename to ntoskrnl/config/cmname.c diff --git a/reactos/ntoskrnl/config/cmparse.c b/ntoskrnl/config/cmparse.c similarity index 100% rename from reactos/ntoskrnl/config/cmparse.c rename to ntoskrnl/config/cmparse.c diff --git a/reactos/ntoskrnl/config/cmse.c b/ntoskrnl/config/cmse.c similarity index 100% rename from reactos/ntoskrnl/config/cmse.c rename to ntoskrnl/config/cmse.c diff --git a/reactos/ntoskrnl/config/cmsecach.c b/ntoskrnl/config/cmsecach.c similarity index 100% rename from reactos/ntoskrnl/config/cmsecach.c rename to ntoskrnl/config/cmsecach.c diff --git a/reactos/ntoskrnl/config/cmsysini.c b/ntoskrnl/config/cmsysini.c similarity index 100% rename from reactos/ntoskrnl/config/cmsysini.c rename to ntoskrnl/config/cmsysini.c diff --git a/reactos/ntoskrnl/config/cmvalche.c b/ntoskrnl/config/cmvalche.c similarity index 100% rename from reactos/ntoskrnl/config/cmvalche.c rename to ntoskrnl/config/cmvalche.c diff --git a/reactos/ntoskrnl/config/cmvalue.c b/ntoskrnl/config/cmvalue.c similarity index 100% rename from reactos/ntoskrnl/config/cmvalue.c rename to ntoskrnl/config/cmvalue.c diff --git a/reactos/ntoskrnl/config/cmwraprs.c b/ntoskrnl/config/cmwraprs.c similarity index 100% rename from reactos/ntoskrnl/config/cmwraprs.c rename to ntoskrnl/config/cmwraprs.c diff --git a/reactos/ntoskrnl/config/i386/cmhardwr.c b/ntoskrnl/config/i386/cmhardwr.c similarity index 100% rename from reactos/ntoskrnl/config/i386/cmhardwr.c rename to ntoskrnl/config/i386/cmhardwr.c diff --git a/reactos/ntoskrnl/config/ntapi.c b/ntoskrnl/config/ntapi.c similarity index 100% rename from reactos/ntoskrnl/config/ntapi.c rename to ntoskrnl/config/ntapi.c diff --git a/reactos/ntoskrnl/config/powerpc/cmhardwr.c b/ntoskrnl/config/powerpc/cmhardwr.c similarity index 100% rename from reactos/ntoskrnl/config/powerpc/cmhardwr.c rename to ntoskrnl/config/powerpc/cmhardwr.c diff --git a/reactos/ntoskrnl/dbgk/dbgkobj.c b/ntoskrnl/dbgk/dbgkobj.c similarity index 100% rename from reactos/ntoskrnl/dbgk/dbgkobj.c rename to ntoskrnl/dbgk/dbgkobj.c diff --git a/reactos/ntoskrnl/dbgk/dbgkutil.c b/ntoskrnl/dbgk/dbgkutil.c similarity index 100% rename from reactos/ntoskrnl/dbgk/dbgkutil.c rename to ntoskrnl/dbgk/dbgkutil.c diff --git a/reactos/ntoskrnl/ex/atom.c b/ntoskrnl/ex/atom.c similarity index 100% rename from reactos/ntoskrnl/ex/atom.c rename to ntoskrnl/ex/atom.c diff --git a/reactos/ntoskrnl/ex/callback.c b/ntoskrnl/ex/callback.c similarity index 100% rename from reactos/ntoskrnl/ex/callback.c rename to ntoskrnl/ex/callback.c diff --git a/reactos/ntoskrnl/ex/dbgctrl.c b/ntoskrnl/ex/dbgctrl.c similarity index 100% rename from reactos/ntoskrnl/ex/dbgctrl.c rename to ntoskrnl/ex/dbgctrl.c diff --git a/reactos/ntoskrnl/ex/efi.c b/ntoskrnl/ex/efi.c similarity index 100% rename from reactos/ntoskrnl/ex/efi.c rename to ntoskrnl/ex/efi.c diff --git a/reactos/ntoskrnl/ex/event.c b/ntoskrnl/ex/event.c similarity index 100% rename from reactos/ntoskrnl/ex/event.c rename to ntoskrnl/ex/event.c diff --git a/reactos/ntoskrnl/ex/evtpair.c b/ntoskrnl/ex/evtpair.c similarity index 100% rename from reactos/ntoskrnl/ex/evtpair.c rename to ntoskrnl/ex/evtpair.c diff --git a/reactos/ntoskrnl/ex/exintrin.c b/ntoskrnl/ex/exintrin.c similarity index 100% rename from reactos/ntoskrnl/ex/exintrin.c rename to ntoskrnl/ex/exintrin.c diff --git a/reactos/ntoskrnl/ex/fastinterlck.c b/ntoskrnl/ex/fastinterlck.c similarity index 100% rename from reactos/ntoskrnl/ex/fastinterlck.c rename to ntoskrnl/ex/fastinterlck.c diff --git a/reactos/ntoskrnl/ex/fmutex.c b/ntoskrnl/ex/fmutex.c similarity index 100% rename from reactos/ntoskrnl/ex/fmutex.c rename to ntoskrnl/ex/fmutex.c diff --git a/reactos/ntoskrnl/ex/handle.c b/ntoskrnl/ex/handle.c similarity index 100% rename from reactos/ntoskrnl/ex/handle.c rename to ntoskrnl/ex/handle.c diff --git a/reactos/ntoskrnl/ex/harderr.c b/ntoskrnl/ex/harderr.c similarity index 100% rename from reactos/ntoskrnl/ex/harderr.c rename to ntoskrnl/ex/harderr.c diff --git a/reactos/ntoskrnl/ex/hdlsterm.c b/ntoskrnl/ex/hdlsterm.c similarity index 100% rename from reactos/ntoskrnl/ex/hdlsterm.c rename to ntoskrnl/ex/hdlsterm.c diff --git a/reactos/ntoskrnl/ex/i386/fastinterlck_asm.S b/ntoskrnl/ex/i386/fastinterlck_asm.S similarity index 100% rename from reactos/ntoskrnl/ex/i386/fastinterlck_asm.S rename to ntoskrnl/ex/i386/fastinterlck_asm.S diff --git a/reactos/ntoskrnl/ex/i386/interlck_asm.S b/ntoskrnl/ex/i386/interlck_asm.S similarity index 100% rename from reactos/ntoskrnl/ex/i386/interlck_asm.S rename to ntoskrnl/ex/i386/interlck_asm.S diff --git a/reactos/ntoskrnl/ex/i386/ioport.S b/ntoskrnl/ex/i386/ioport.S similarity index 100% rename from reactos/ntoskrnl/ex/i386/ioport.S rename to ntoskrnl/ex/i386/ioport.S diff --git a/reactos/ntoskrnl/ex/init.c b/ntoskrnl/ex/init.c similarity index 100% rename from reactos/ntoskrnl/ex/init.c rename to ntoskrnl/ex/init.c diff --git a/reactos/ntoskrnl/ex/keyedevt.c b/ntoskrnl/ex/keyedevt.c similarity index 100% rename from reactos/ntoskrnl/ex/keyedevt.c rename to ntoskrnl/ex/keyedevt.c diff --git a/reactos/ntoskrnl/ex/locale.c b/ntoskrnl/ex/locale.c similarity index 100% rename from reactos/ntoskrnl/ex/locale.c rename to ntoskrnl/ex/locale.c diff --git a/reactos/ntoskrnl/ex/lookas.c b/ntoskrnl/ex/lookas.c similarity index 100% rename from reactos/ntoskrnl/ex/lookas.c rename to ntoskrnl/ex/lookas.c diff --git a/reactos/ntoskrnl/ex/mutant.c b/ntoskrnl/ex/mutant.c similarity index 100% rename from reactos/ntoskrnl/ex/mutant.c rename to ntoskrnl/ex/mutant.c diff --git a/reactos/ntoskrnl/ex/powerpc/ioport.s b/ntoskrnl/ex/powerpc/ioport.s similarity index 100% rename from reactos/ntoskrnl/ex/powerpc/ioport.s rename to ntoskrnl/ex/powerpc/ioport.s diff --git a/reactos/ntoskrnl/ex/profile.c b/ntoskrnl/ex/profile.c similarity index 100% rename from reactos/ntoskrnl/ex/profile.c rename to ntoskrnl/ex/profile.c diff --git a/reactos/ntoskrnl/ex/pushlock.c b/ntoskrnl/ex/pushlock.c similarity index 100% rename from reactos/ntoskrnl/ex/pushlock.c rename to ntoskrnl/ex/pushlock.c diff --git a/reactos/ntoskrnl/ex/resource.c b/ntoskrnl/ex/resource.c similarity index 100% rename from reactos/ntoskrnl/ex/resource.c rename to ntoskrnl/ex/resource.c diff --git a/reactos/ntoskrnl/ex/rundown.c b/ntoskrnl/ex/rundown.c similarity index 100% rename from reactos/ntoskrnl/ex/rundown.c rename to ntoskrnl/ex/rundown.c diff --git a/reactos/ntoskrnl/ex/sem.c b/ntoskrnl/ex/sem.c similarity index 100% rename from reactos/ntoskrnl/ex/sem.c rename to ntoskrnl/ex/sem.c diff --git a/reactos/ntoskrnl/ex/shutdown.c b/ntoskrnl/ex/shutdown.c similarity index 100% rename from reactos/ntoskrnl/ex/shutdown.c rename to ntoskrnl/ex/shutdown.c diff --git a/reactos/ntoskrnl/ex/sysinfo.c b/ntoskrnl/ex/sysinfo.c similarity index 100% rename from reactos/ntoskrnl/ex/sysinfo.c rename to ntoskrnl/ex/sysinfo.c diff --git a/reactos/ntoskrnl/ex/time.c b/ntoskrnl/ex/time.c similarity index 100% rename from reactos/ntoskrnl/ex/time.c rename to ntoskrnl/ex/time.c diff --git a/reactos/ntoskrnl/ex/timer.c b/ntoskrnl/ex/timer.c similarity index 100% rename from reactos/ntoskrnl/ex/timer.c rename to ntoskrnl/ex/timer.c diff --git a/reactos/ntoskrnl/ex/uuid.c b/ntoskrnl/ex/uuid.c similarity index 100% rename from reactos/ntoskrnl/ex/uuid.c rename to ntoskrnl/ex/uuid.c diff --git a/reactos/ntoskrnl/ex/win32k.c b/ntoskrnl/ex/win32k.c similarity index 100% rename from reactos/ntoskrnl/ex/win32k.c rename to ntoskrnl/ex/win32k.c diff --git a/reactos/ntoskrnl/ex/work.c b/ntoskrnl/ex/work.c similarity index 100% rename from reactos/ntoskrnl/ex/work.c rename to ntoskrnl/ex/work.c diff --git a/reactos/ntoskrnl/ex/xipdisp.c b/ntoskrnl/ex/xipdisp.c similarity index 100% rename from reactos/ntoskrnl/ex/xipdisp.c rename to ntoskrnl/ex/xipdisp.c diff --git a/reactos/ntoskrnl/ex/zone.c b/ntoskrnl/ex/zone.c similarity index 100% rename from reactos/ntoskrnl/ex/zone.c rename to ntoskrnl/ex/zone.c diff --git a/reactos/ntoskrnl/fsrtl/dbcsname.c b/ntoskrnl/fsrtl/dbcsname.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/dbcsname.c rename to ntoskrnl/fsrtl/dbcsname.c diff --git a/reactos/ntoskrnl/fsrtl/fastio.c b/ntoskrnl/fsrtl/fastio.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/fastio.c rename to ntoskrnl/fsrtl/fastio.c diff --git a/reactos/ntoskrnl/fsrtl/faulttol.c b/ntoskrnl/fsrtl/faulttol.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/faulttol.c rename to ntoskrnl/fsrtl/faulttol.c diff --git a/reactos/ntoskrnl/fsrtl/filelock.c b/ntoskrnl/fsrtl/filelock.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/filelock.c rename to ntoskrnl/fsrtl/filelock.c diff --git a/reactos/ntoskrnl/fsrtl/filter.c b/ntoskrnl/fsrtl/filter.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/filter.c rename to ntoskrnl/fsrtl/filter.c diff --git a/reactos/ntoskrnl/fsrtl/filtrctx.c b/ntoskrnl/fsrtl/filtrctx.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/filtrctx.c rename to ntoskrnl/fsrtl/filtrctx.c diff --git a/reactos/ntoskrnl/fsrtl/fsfilter.c b/ntoskrnl/fsrtl/fsfilter.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/fsfilter.c rename to ntoskrnl/fsrtl/fsfilter.c diff --git a/reactos/ntoskrnl/fsrtl/fsrtlpc.c b/ntoskrnl/fsrtl/fsrtlpc.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/fsrtlpc.c rename to ntoskrnl/fsrtl/fsrtlpc.c diff --git a/reactos/ntoskrnl/fsrtl/largemcb.c b/ntoskrnl/fsrtl/largemcb.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/largemcb.c rename to ntoskrnl/fsrtl/largemcb.c diff --git a/reactos/ntoskrnl/fsrtl/name.c b/ntoskrnl/fsrtl/name.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/name.c rename to ntoskrnl/fsrtl/name.c diff --git a/reactos/ntoskrnl/fsrtl/notify.c b/ntoskrnl/fsrtl/notify.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/notify.c rename to ntoskrnl/fsrtl/notify.c diff --git a/reactos/ntoskrnl/fsrtl/oplock.c b/ntoskrnl/fsrtl/oplock.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/oplock.c rename to ntoskrnl/fsrtl/oplock.c diff --git a/reactos/ntoskrnl/fsrtl/pnp.c b/ntoskrnl/fsrtl/pnp.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/pnp.c rename to ntoskrnl/fsrtl/pnp.c diff --git a/reactos/ntoskrnl/fsrtl/stackovf.c b/ntoskrnl/fsrtl/stackovf.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/stackovf.c rename to ntoskrnl/fsrtl/stackovf.c diff --git a/reactos/ntoskrnl/fsrtl/tunnel.c b/ntoskrnl/fsrtl/tunnel.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/tunnel.c rename to ntoskrnl/fsrtl/tunnel.c diff --git a/reactos/ntoskrnl/fsrtl/unc.c b/ntoskrnl/fsrtl/unc.c similarity index 100% rename from reactos/ntoskrnl/fsrtl/unc.c rename to ntoskrnl/fsrtl/unc.c diff --git a/reactos/ntoskrnl/fstub/disksup.c b/ntoskrnl/fstub/disksup.c similarity index 100% rename from reactos/ntoskrnl/fstub/disksup.c rename to ntoskrnl/fstub/disksup.c diff --git a/reactos/ntoskrnl/fstub/fstubex.c b/ntoskrnl/fstub/fstubex.c similarity index 100% rename from reactos/ntoskrnl/fstub/fstubex.c rename to ntoskrnl/fstub/fstubex.c diff --git a/reactos/ntoskrnl/fstub/halstub.c b/ntoskrnl/fstub/halstub.c similarity index 100% rename from reactos/ntoskrnl/fstub/halstub.c rename to ntoskrnl/fstub/halstub.c diff --git a/reactos/ntoskrnl/inbv/inbv.c b/ntoskrnl/inbv/inbv.c similarity index 100% rename from reactos/ntoskrnl/inbv/inbv.c rename to ntoskrnl/inbv/inbv.c diff --git a/reactos/ntoskrnl/inbv/logo/1.bmp b/ntoskrnl/inbv/logo/1.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/1.bmp rename to ntoskrnl/inbv/logo/1.bmp diff --git a/reactos/ntoskrnl/inbv/logo/13.bmp b/ntoskrnl/inbv/logo/13.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/13.bmp rename to ntoskrnl/inbv/logo/13.bmp diff --git a/reactos/ntoskrnl/inbv/logo/14.bmp b/ntoskrnl/inbv/logo/14.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/14.bmp rename to ntoskrnl/inbv/logo/14.bmp diff --git a/reactos/ntoskrnl/inbv/logo/15.bmp b/ntoskrnl/inbv/logo/15.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/15.bmp rename to ntoskrnl/inbv/logo/15.bmp diff --git a/reactos/ntoskrnl/inbv/logo/16.bmp b/ntoskrnl/inbv/logo/16.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/16.bmp rename to ntoskrnl/inbv/logo/16.bmp diff --git a/reactos/ntoskrnl/inbv/logo/17.bmp b/ntoskrnl/inbv/logo/17.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/17.bmp rename to ntoskrnl/inbv/logo/17.bmp diff --git a/reactos/ntoskrnl/inbv/logo/2.bmp b/ntoskrnl/inbv/logo/2.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/2.bmp rename to ntoskrnl/inbv/logo/2.bmp diff --git a/reactos/ntoskrnl/inbv/logo/3.bmp b/ntoskrnl/inbv/logo/3.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/3.bmp rename to ntoskrnl/inbv/logo/3.bmp diff --git a/reactos/ntoskrnl/inbv/logo/4.bmp b/ntoskrnl/inbv/logo/4.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/4.bmp rename to ntoskrnl/inbv/logo/4.bmp diff --git a/reactos/ntoskrnl/inbv/logo/5.bmp b/ntoskrnl/inbv/logo/5.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/5.bmp rename to ntoskrnl/inbv/logo/5.bmp diff --git a/reactos/ntoskrnl/inbv/logo/6.bmp b/ntoskrnl/inbv/logo/6.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/6.bmp rename to ntoskrnl/inbv/logo/6.bmp diff --git a/reactos/ntoskrnl/inbv/logo/7.bmp b/ntoskrnl/inbv/logo/7.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/7.bmp rename to ntoskrnl/inbv/logo/7.bmp diff --git a/reactos/ntoskrnl/inbv/logo/8.bmp b/ntoskrnl/inbv/logo/8.bmp similarity index 100% rename from reactos/ntoskrnl/inbv/logo/8.bmp rename to ntoskrnl/inbv/logo/8.bmp diff --git a/reactos/ntoskrnl/include/config.h b/ntoskrnl/include/config.h similarity index 100% rename from reactos/ntoskrnl/include/config.h rename to ntoskrnl/include/config.h diff --git a/reactos/ntoskrnl/include/internal/arch/intrin_i.h b/ntoskrnl/include/internal/arch/intrin_i.h similarity index 100% rename from reactos/ntoskrnl/include/internal/arch/intrin_i.h rename to ntoskrnl/include/internal/arch/intrin_i.h diff --git a/reactos/ntoskrnl/include/internal/arch/ke.h b/ntoskrnl/include/internal/arch/ke.h similarity index 100% rename from reactos/ntoskrnl/include/internal/arch/ke.h rename to ntoskrnl/include/internal/arch/ke.h diff --git a/reactos/ntoskrnl/include/internal/arch/mm.h b/ntoskrnl/include/internal/arch/mm.h similarity index 100% rename from reactos/ntoskrnl/include/internal/arch/mm.h rename to ntoskrnl/include/internal/arch/mm.h diff --git a/reactos/ntoskrnl/include/internal/arm/asmmacro.S b/ntoskrnl/include/internal/arm/asmmacro.S similarity index 100% rename from reactos/ntoskrnl/include/internal/arm/asmmacro.S rename to ntoskrnl/include/internal/arm/asmmacro.S diff --git a/reactos/ntoskrnl/include/internal/arm/intrin_i.h b/ntoskrnl/include/internal/arm/intrin_i.h similarity index 100% rename from reactos/ntoskrnl/include/internal/arm/intrin_i.h rename to ntoskrnl/include/internal/arm/intrin_i.h diff --git a/reactos/ntoskrnl/include/internal/arm/ke.h b/ntoskrnl/include/internal/arm/ke.h similarity index 100% rename from reactos/ntoskrnl/include/internal/arm/ke.h rename to ntoskrnl/include/internal/arm/ke.h diff --git a/reactos/ntoskrnl/include/internal/arm/ksarm.h b/ntoskrnl/include/internal/arm/ksarm.h similarity index 100% rename from reactos/ntoskrnl/include/internal/arm/ksarm.h rename to ntoskrnl/include/internal/arm/ksarm.h diff --git a/reactos/ntoskrnl/include/internal/arm/kxarm.h b/ntoskrnl/include/internal/arm/kxarm.h similarity index 100% rename from reactos/ntoskrnl/include/internal/arm/kxarm.h rename to ntoskrnl/include/internal/arm/kxarm.h diff --git a/reactos/ntoskrnl/include/internal/arm/mm.h b/ntoskrnl/include/internal/arm/mm.h similarity index 100% rename from reactos/ntoskrnl/include/internal/arm/mm.h rename to ntoskrnl/include/internal/arm/mm.h diff --git a/reactos/ntoskrnl/include/internal/cc.h b/ntoskrnl/include/internal/cc.h similarity index 100% rename from reactos/ntoskrnl/include/internal/cc.h rename to ntoskrnl/include/internal/cc.h diff --git a/reactos/ntoskrnl/include/internal/cm.h b/ntoskrnl/include/internal/cm.h similarity index 100% rename from reactos/ntoskrnl/include/internal/cm.h rename to ntoskrnl/include/internal/cm.h diff --git a/reactos/ntoskrnl/include/internal/cm_x.h b/ntoskrnl/include/internal/cm_x.h similarity index 100% rename from reactos/ntoskrnl/include/internal/cm_x.h rename to ntoskrnl/include/internal/cm_x.h diff --git a/reactos/ntoskrnl/include/internal/dbgk.h b/ntoskrnl/include/internal/dbgk.h similarity index 100% rename from reactos/ntoskrnl/include/internal/dbgk.h rename to ntoskrnl/include/internal/dbgk.h diff --git a/reactos/ntoskrnl/include/internal/ex.h b/ntoskrnl/include/internal/ex.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ex.h rename to ntoskrnl/include/internal/ex.h diff --git a/reactos/ntoskrnl/include/internal/fsrtl.h b/ntoskrnl/include/internal/fsrtl.h similarity index 100% rename from reactos/ntoskrnl/include/internal/fsrtl.h rename to ntoskrnl/include/internal/fsrtl.h diff --git a/reactos/ntoskrnl/include/internal/hal.h b/ntoskrnl/include/internal/hal.h similarity index 100% rename from reactos/ntoskrnl/include/internal/hal.h rename to ntoskrnl/include/internal/hal.h diff --git a/reactos/ntoskrnl/include/internal/i386/asmmacro.S b/ntoskrnl/include/internal/i386/asmmacro.S similarity index 100% rename from reactos/ntoskrnl/include/internal/i386/asmmacro.S rename to ntoskrnl/include/internal/i386/asmmacro.S diff --git a/reactos/ntoskrnl/include/internal/i386/intrin_i.h b/ntoskrnl/include/internal/i386/intrin_i.h similarity index 100% rename from reactos/ntoskrnl/include/internal/i386/intrin_i.h rename to ntoskrnl/include/internal/i386/intrin_i.h diff --git a/reactos/ntoskrnl/include/internal/i386/ke.h b/ntoskrnl/include/internal/i386/ke.h similarity index 100% rename from reactos/ntoskrnl/include/internal/i386/ke.h rename to ntoskrnl/include/internal/i386/ke.h diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/ntoskrnl/include/internal/i386/mm.h similarity index 100% rename from reactos/ntoskrnl/include/internal/i386/mm.h rename to ntoskrnl/include/internal/i386/mm.h diff --git a/reactos/ntoskrnl/include/internal/i386/v86m.h b/ntoskrnl/include/internal/i386/v86m.h similarity index 100% rename from reactos/ntoskrnl/include/internal/i386/v86m.h rename to ntoskrnl/include/internal/i386/v86m.h diff --git a/reactos/ntoskrnl/include/internal/inbv.h b/ntoskrnl/include/internal/inbv.h similarity index 100% rename from reactos/ntoskrnl/include/internal/inbv.h rename to ntoskrnl/include/internal/inbv.h diff --git a/reactos/ntoskrnl/include/internal/io.h b/ntoskrnl/include/internal/io.h similarity index 100% rename from reactos/ntoskrnl/include/internal/io.h rename to ntoskrnl/include/internal/io.h diff --git a/reactos/ntoskrnl/include/internal/io_i.h b/ntoskrnl/include/internal/io_i.h similarity index 100% rename from reactos/ntoskrnl/include/internal/io_i.h rename to ntoskrnl/include/internal/io_i.h diff --git a/reactos/ntoskrnl/include/internal/io_x.h b/ntoskrnl/include/internal/io_x.h similarity index 100% rename from reactos/ntoskrnl/include/internal/io_x.h rename to ntoskrnl/include/internal/io_x.h diff --git a/reactos/ntoskrnl/include/internal/kbd.h b/ntoskrnl/include/internal/kbd.h similarity index 100% rename from reactos/ntoskrnl/include/internal/kbd.h rename to ntoskrnl/include/internal/kbd.h diff --git a/reactos/ntoskrnl/include/internal/kd.h b/ntoskrnl/include/internal/kd.h similarity index 100% rename from reactos/ntoskrnl/include/internal/kd.h rename to ntoskrnl/include/internal/kd.h diff --git a/reactos/ntoskrnl/include/internal/kd64.h b/ntoskrnl/include/internal/kd64.h similarity index 100% rename from reactos/ntoskrnl/include/internal/kd64.h rename to ntoskrnl/include/internal/kd64.h diff --git a/reactos/ntoskrnl/include/internal/ke.h b/ntoskrnl/include/internal/ke.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ke.h rename to ntoskrnl/include/internal/ke.h diff --git a/reactos/ntoskrnl/include/internal/ke_x.h b/ntoskrnl/include/internal/ke_x.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ke_x.h rename to ntoskrnl/include/internal/ke_x.h diff --git a/reactos/ntoskrnl/include/internal/ldr.h b/ntoskrnl/include/internal/ldr.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ldr.h rename to ntoskrnl/include/internal/ldr.h diff --git a/reactos/ntoskrnl/include/internal/lpc.h b/ntoskrnl/include/internal/lpc.h similarity index 100% rename from reactos/ntoskrnl/include/internal/lpc.h rename to ntoskrnl/include/internal/lpc.h diff --git a/reactos/ntoskrnl/include/internal/lpc_x.h b/ntoskrnl/include/internal/lpc_x.h similarity index 100% rename from reactos/ntoskrnl/include/internal/lpc_x.h rename to ntoskrnl/include/internal/lpc_x.h diff --git a/reactos/ntoskrnl/include/internal/mm.h b/ntoskrnl/include/internal/mm.h similarity index 100% rename from reactos/ntoskrnl/include/internal/mm.h rename to ntoskrnl/include/internal/mm.h diff --git a/reactos/ntoskrnl/include/internal/ntoskrnl.h b/ntoskrnl/include/internal/ntoskrnl.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ntoskrnl.h rename to ntoskrnl/include/internal/ntoskrnl.h diff --git a/reactos/ntoskrnl/include/internal/ob.h b/ntoskrnl/include/internal/ob.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ob.h rename to ntoskrnl/include/internal/ob.h diff --git a/reactos/ntoskrnl/include/internal/ob_x.h b/ntoskrnl/include/internal/ob_x.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ob_x.h rename to ntoskrnl/include/internal/ob_x.h diff --git a/reactos/ntoskrnl/include/internal/pci.h b/ntoskrnl/include/internal/pci.h similarity index 100% rename from reactos/ntoskrnl/include/internal/pci.h rename to ntoskrnl/include/internal/pci.h diff --git a/reactos/ntoskrnl/include/internal/po.h b/ntoskrnl/include/internal/po.h similarity index 100% rename from reactos/ntoskrnl/include/internal/po.h rename to ntoskrnl/include/internal/po.h diff --git a/reactos/ntoskrnl/include/internal/powerpc/intrin_i.h b/ntoskrnl/include/internal/powerpc/intrin_i.h similarity index 100% rename from reactos/ntoskrnl/include/internal/powerpc/intrin_i.h rename to ntoskrnl/include/internal/powerpc/intrin_i.h diff --git a/reactos/ntoskrnl/include/internal/powerpc/ke.h b/ntoskrnl/include/internal/powerpc/ke.h similarity index 100% rename from reactos/ntoskrnl/include/internal/powerpc/ke.h rename to ntoskrnl/include/internal/powerpc/ke.h diff --git a/reactos/ntoskrnl/include/internal/ps.h b/ntoskrnl/include/internal/ps.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ps.h rename to ntoskrnl/include/internal/ps.h diff --git a/reactos/ntoskrnl/include/internal/ps_i.h b/ntoskrnl/include/internal/ps_i.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ps_i.h rename to ntoskrnl/include/internal/ps_i.h diff --git a/reactos/ntoskrnl/include/internal/ps_x.h b/ntoskrnl/include/internal/ps_x.h similarity index 100% rename from reactos/ntoskrnl/include/internal/ps_x.h rename to ntoskrnl/include/internal/ps_x.h diff --git a/reactos/ntoskrnl/include/internal/rtl.h b/ntoskrnl/include/internal/rtl.h similarity index 100% rename from reactos/ntoskrnl/include/internal/rtl.h rename to ntoskrnl/include/internal/rtl.h diff --git a/reactos/ntoskrnl/include/internal/se.h b/ntoskrnl/include/internal/se.h similarity index 100% rename from reactos/ntoskrnl/include/internal/se.h rename to ntoskrnl/include/internal/se.h diff --git a/reactos/ntoskrnl/include/internal/tag.h b/ntoskrnl/include/internal/tag.h similarity index 100% rename from reactos/ntoskrnl/include/internal/tag.h rename to ntoskrnl/include/internal/tag.h diff --git a/reactos/ntoskrnl/include/internal/test.h b/ntoskrnl/include/internal/test.h similarity index 100% rename from reactos/ntoskrnl/include/internal/test.h rename to ntoskrnl/include/internal/test.h diff --git a/reactos/ntoskrnl/include/internal/vdm.h b/ntoskrnl/include/internal/vdm.h similarity index 100% rename from reactos/ntoskrnl/include/internal/vdm.h rename to ntoskrnl/include/internal/vdm.h diff --git a/reactos/ntoskrnl/include/ntoskrnl.h b/ntoskrnl/include/ntoskrnl.h similarity index 100% rename from reactos/ntoskrnl/include/ntoskrnl.h rename to ntoskrnl/include/ntoskrnl.h diff --git a/reactos/ntoskrnl/io/iomgr/adapter.c b/ntoskrnl/io/iomgr/adapter.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/adapter.c rename to ntoskrnl/io/iomgr/adapter.c diff --git a/reactos/ntoskrnl/io/iomgr/arcname.c b/ntoskrnl/io/iomgr/arcname.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/arcname.c rename to ntoskrnl/io/iomgr/arcname.c diff --git a/reactos/ntoskrnl/io/iomgr/bootlog.c b/ntoskrnl/io/iomgr/bootlog.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/bootlog.c rename to ntoskrnl/io/iomgr/bootlog.c diff --git a/reactos/ntoskrnl/io/iomgr/controller.c b/ntoskrnl/io/iomgr/controller.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/controller.c rename to ntoskrnl/io/iomgr/controller.c diff --git a/reactos/ntoskrnl/io/iomgr/device.c b/ntoskrnl/io/iomgr/device.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/device.c rename to ntoskrnl/io/iomgr/device.c diff --git a/reactos/ntoskrnl/io/iomgr/deviface.c b/ntoskrnl/io/iomgr/deviface.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/deviface.c rename to ntoskrnl/io/iomgr/deviface.c diff --git a/reactos/ntoskrnl/io/iomgr/driver.c b/ntoskrnl/io/iomgr/driver.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/driver.c rename to ntoskrnl/io/iomgr/driver.c diff --git a/reactos/ntoskrnl/io/iomgr/drvrlist.c b/ntoskrnl/io/iomgr/drvrlist.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/drvrlist.c rename to ntoskrnl/io/iomgr/drvrlist.c diff --git a/reactos/ntoskrnl/io/iomgr/error.c b/ntoskrnl/io/iomgr/error.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/error.c rename to ntoskrnl/io/iomgr/error.c diff --git a/reactos/ntoskrnl/io/iomgr/file.c b/ntoskrnl/io/iomgr/file.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/file.c rename to ntoskrnl/io/iomgr/file.c diff --git a/reactos/ntoskrnl/io/iomgr/iocomp.c b/ntoskrnl/io/iomgr/iocomp.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/iocomp.c rename to ntoskrnl/io/iomgr/iocomp.c diff --git a/reactos/ntoskrnl/io/iomgr/ioevent.c b/ntoskrnl/io/iomgr/ioevent.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/ioevent.c rename to ntoskrnl/io/iomgr/ioevent.c diff --git a/reactos/ntoskrnl/io/iomgr/iofunc.c b/ntoskrnl/io/iomgr/iofunc.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/iofunc.c rename to ntoskrnl/io/iomgr/iofunc.c diff --git a/reactos/ntoskrnl/io/iomgr/iomdl.c b/ntoskrnl/io/iomgr/iomdl.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/iomdl.c rename to ntoskrnl/io/iomgr/iomdl.c diff --git a/reactos/ntoskrnl/io/iomgr/iomgr.c b/ntoskrnl/io/iomgr/iomgr.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/iomgr.c rename to ntoskrnl/io/iomgr/iomgr.c diff --git a/reactos/ntoskrnl/io/iomgr/iorsrce.c b/ntoskrnl/io/iomgr/iorsrce.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/iorsrce.c rename to ntoskrnl/io/iomgr/iorsrce.c diff --git a/reactos/ntoskrnl/io/iomgr/iotimer.c b/ntoskrnl/io/iomgr/iotimer.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/iotimer.c rename to ntoskrnl/io/iomgr/iotimer.c diff --git a/reactos/ntoskrnl/io/iomgr/iowork.c b/ntoskrnl/io/iomgr/iowork.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/iowork.c rename to ntoskrnl/io/iomgr/iowork.c diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/ntoskrnl/io/iomgr/irp.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/irp.c rename to ntoskrnl/io/iomgr/irp.c diff --git a/reactos/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/irq.c rename to ntoskrnl/io/iomgr/irq.c diff --git a/reactos/ntoskrnl/io/iomgr/ramdisk.c b/ntoskrnl/io/iomgr/ramdisk.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/ramdisk.c rename to ntoskrnl/io/iomgr/ramdisk.c diff --git a/reactos/ntoskrnl/io/iomgr/rawfs.c b/ntoskrnl/io/iomgr/rawfs.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/rawfs.c rename to ntoskrnl/io/iomgr/rawfs.c diff --git a/reactos/ntoskrnl/io/iomgr/remlock.c b/ntoskrnl/io/iomgr/remlock.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/remlock.c rename to ntoskrnl/io/iomgr/remlock.c diff --git a/reactos/ntoskrnl/io/iomgr/symlink.c b/ntoskrnl/io/iomgr/symlink.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/symlink.c rename to ntoskrnl/io/iomgr/symlink.c diff --git a/reactos/ntoskrnl/io/iomgr/util.c b/ntoskrnl/io/iomgr/util.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/util.c rename to ntoskrnl/io/iomgr/util.c diff --git a/reactos/ntoskrnl/io/iomgr/volume.c b/ntoskrnl/io/iomgr/volume.c similarity index 100% rename from reactos/ntoskrnl/io/iomgr/volume.c rename to ntoskrnl/io/iomgr/volume.c diff --git a/reactos/ntoskrnl/io/pnpmgr/plugplay.c b/ntoskrnl/io/pnpmgr/plugplay.c similarity index 100% rename from reactos/ntoskrnl/io/pnpmgr/plugplay.c rename to ntoskrnl/io/pnpmgr/plugplay.c diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpdma.c b/ntoskrnl/io/pnpmgr/pnpdma.c similarity index 100% rename from reactos/ntoskrnl/io/pnpmgr/pnpdma.c rename to ntoskrnl/io/pnpmgr/pnpdma.c diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c b/ntoskrnl/io/pnpmgr/pnpmgr.c similarity index 100% rename from reactos/ntoskrnl/io/pnpmgr/pnpmgr.c rename to ntoskrnl/io/pnpmgr/pnpmgr.c diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c b/ntoskrnl/io/pnpmgr/pnpnotify.c similarity index 100% rename from reactos/ntoskrnl/io/pnpmgr/pnpnotify.c rename to ntoskrnl/io/pnpmgr/pnpnotify.c diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpreport.c b/ntoskrnl/io/pnpmgr/pnpreport.c similarity index 100% rename from reactos/ntoskrnl/io/pnpmgr/pnpreport.c rename to ntoskrnl/io/pnpmgr/pnpreport.c diff --git a/reactos/ntoskrnl/io/pnpmgr/pnproot.c b/ntoskrnl/io/pnpmgr/pnproot.c similarity index 100% rename from reactos/ntoskrnl/io/pnpmgr/pnproot.c rename to ntoskrnl/io/pnpmgr/pnproot.c diff --git a/reactos/ntoskrnl/kd/i386/kdmemsup.c b/ntoskrnl/kd/i386/kdmemsup.c similarity index 100% rename from reactos/ntoskrnl/kd/i386/kdmemsup.c rename to ntoskrnl/kd/i386/kdmemsup.c diff --git a/reactos/ntoskrnl/kd/kdinit.c b/ntoskrnl/kd/kdinit.c similarity index 100% rename from reactos/ntoskrnl/kd/kdinit.c rename to ntoskrnl/kd/kdinit.c diff --git a/reactos/ntoskrnl/kd/kdio.c b/ntoskrnl/kd/kdio.c similarity index 100% rename from reactos/ntoskrnl/kd/kdio.c rename to ntoskrnl/kd/kdio.c diff --git a/reactos/ntoskrnl/kd/kdmain.c b/ntoskrnl/kd/kdmain.c similarity index 100% rename from reactos/ntoskrnl/kd/kdmain.c rename to ntoskrnl/kd/kdmain.c diff --git a/reactos/ntoskrnl/kd/wrappers/bochs.c b/ntoskrnl/kd/wrappers/bochs.c similarity index 100% rename from reactos/ntoskrnl/kd/wrappers/bochs.c rename to ntoskrnl/kd/wrappers/bochs.c diff --git a/reactos/ntoskrnl/kd/wrappers/gdbstub.c b/ntoskrnl/kd/wrappers/gdbstub.c similarity index 100% rename from reactos/ntoskrnl/kd/wrappers/gdbstub.c rename to ntoskrnl/kd/wrappers/gdbstub.c diff --git a/reactos/ntoskrnl/kd/wrappers/gdbstub_powerpc.c b/ntoskrnl/kd/wrappers/gdbstub_powerpc.c similarity index 100% rename from reactos/ntoskrnl/kd/wrappers/gdbstub_powerpc.c rename to ntoskrnl/kd/wrappers/gdbstub_powerpc.c diff --git a/reactos/ntoskrnl/kd/wrappers/kdbg.c b/ntoskrnl/kd/wrappers/kdbg.c similarity index 100% rename from reactos/ntoskrnl/kd/wrappers/kdbg.c rename to ntoskrnl/kd/wrappers/kdbg.c diff --git a/reactos/ntoskrnl/kd64/kdapi.c b/ntoskrnl/kd64/kdapi.c similarity index 100% rename from reactos/ntoskrnl/kd64/kdapi.c rename to ntoskrnl/kd64/kdapi.c diff --git a/reactos/ntoskrnl/kd64/kdbreak.c b/ntoskrnl/kd64/kdbreak.c similarity index 100% rename from reactos/ntoskrnl/kd64/kdbreak.c rename to ntoskrnl/kd64/kdbreak.c diff --git a/reactos/ntoskrnl/kd64/kddata.c b/ntoskrnl/kd64/kddata.c similarity index 100% rename from reactos/ntoskrnl/kd64/kddata.c rename to ntoskrnl/kd64/kddata.c diff --git a/reactos/ntoskrnl/kd64/kdinit.c b/ntoskrnl/kd64/kdinit.c similarity index 100% rename from reactos/ntoskrnl/kd64/kdinit.c rename to ntoskrnl/kd64/kdinit.c diff --git a/reactos/ntoskrnl/kd64/kdlock.c b/ntoskrnl/kd64/kdlock.c similarity index 100% rename from reactos/ntoskrnl/kd64/kdlock.c rename to ntoskrnl/kd64/kdlock.c diff --git a/reactos/ntoskrnl/kd64/kdprint.c b/ntoskrnl/kd64/kdprint.c similarity index 100% rename from reactos/ntoskrnl/kd64/kdprint.c rename to ntoskrnl/kd64/kdprint.c diff --git a/reactos/ntoskrnl/kd64/kdtrap.c b/ntoskrnl/kd64/kdtrap.c similarity index 100% rename from reactos/ntoskrnl/kd64/kdtrap.c rename to ntoskrnl/kd64/kdtrap.c diff --git a/reactos/ntoskrnl/kdbg/i386/dis-asm.h b/ntoskrnl/kdbg/i386/dis-asm.h similarity index 100% rename from reactos/ntoskrnl/kdbg/i386/dis-asm.h rename to ntoskrnl/kdbg/i386/dis-asm.h diff --git a/reactos/ntoskrnl/kdbg/i386/i386-dis.c b/ntoskrnl/kdbg/i386/i386-dis.c similarity index 100% rename from reactos/ntoskrnl/kdbg/i386/i386-dis.c rename to ntoskrnl/kdbg/i386/i386-dis.c diff --git a/reactos/ntoskrnl/kdbg/i386/kdb_help.S b/ntoskrnl/kdbg/i386/kdb_help.S similarity index 100% rename from reactos/ntoskrnl/kdbg/i386/kdb_help.S rename to ntoskrnl/kdbg/i386/kdb_help.S diff --git a/reactos/ntoskrnl/kdbg/i386/longjmp.S b/ntoskrnl/kdbg/i386/longjmp.S similarity index 100% rename from reactos/ntoskrnl/kdbg/i386/longjmp.S rename to ntoskrnl/kdbg/i386/longjmp.S diff --git a/reactos/ntoskrnl/kdbg/i386/setjmp.S b/ntoskrnl/kdbg/i386/setjmp.S similarity index 100% rename from reactos/ntoskrnl/kdbg/i386/setjmp.S rename to ntoskrnl/kdbg/i386/setjmp.S diff --git a/reactos/ntoskrnl/kdbg/kdb.c b/ntoskrnl/kdbg/kdb.c similarity index 100% rename from reactos/ntoskrnl/kdbg/kdb.c rename to ntoskrnl/kdbg/kdb.c diff --git a/reactos/ntoskrnl/kdbg/kdb.h b/ntoskrnl/kdbg/kdb.h similarity index 100% rename from reactos/ntoskrnl/kdbg/kdb.h rename to ntoskrnl/kdbg/kdb.h diff --git a/reactos/ntoskrnl/kdbg/kdb_cli.c b/ntoskrnl/kdbg/kdb_cli.c similarity index 100% rename from reactos/ntoskrnl/kdbg/kdb_cli.c rename to ntoskrnl/kdbg/kdb_cli.c diff --git a/reactos/ntoskrnl/kdbg/kdb_expr.c b/ntoskrnl/kdbg/kdb_expr.c similarity index 100% rename from reactos/ntoskrnl/kdbg/kdb_expr.c rename to ntoskrnl/kdbg/kdb_expr.c diff --git a/reactos/ntoskrnl/kdbg/kdb_keyboard.c b/ntoskrnl/kdbg/kdb_keyboard.c similarity index 100% rename from reactos/ntoskrnl/kdbg/kdb_keyboard.c rename to ntoskrnl/kdbg/kdb_keyboard.c diff --git a/reactos/ntoskrnl/kdbg/kdb_serial.c b/ntoskrnl/kdbg/kdb_serial.c similarity index 100% rename from reactos/ntoskrnl/kdbg/kdb_serial.c rename to ntoskrnl/kdbg/kdb_serial.c diff --git a/reactos/ntoskrnl/kdbg/kdb_symbols.c b/ntoskrnl/kdbg/kdb_symbols.c similarity index 100% rename from reactos/ntoskrnl/kdbg/kdb_symbols.c rename to ntoskrnl/kdbg/kdb_symbols.c diff --git a/reactos/ntoskrnl/ke/apc.c b/ntoskrnl/ke/apc.c similarity index 100% rename from reactos/ntoskrnl/ke/apc.c rename to ntoskrnl/ke/apc.c diff --git a/reactos/ntoskrnl/ke/arm/boot.s b/ntoskrnl/ke/arm/boot.s similarity index 100% rename from reactos/ntoskrnl/ke/arm/boot.s rename to ntoskrnl/ke/arm/boot.s diff --git a/reactos/ntoskrnl/ke/arm/cpu.c b/ntoskrnl/ke/arm/cpu.c similarity index 100% rename from reactos/ntoskrnl/ke/arm/cpu.c rename to ntoskrnl/ke/arm/cpu.c diff --git a/reactos/ntoskrnl/ke/arm/ctxswtch.s b/ntoskrnl/ke/arm/ctxswtch.s similarity index 100% rename from reactos/ntoskrnl/ke/arm/ctxswtch.s rename to ntoskrnl/ke/arm/ctxswtch.s diff --git a/reactos/ntoskrnl/ke/arm/exp.c b/ntoskrnl/ke/arm/exp.c similarity index 100% rename from reactos/ntoskrnl/ke/arm/exp.c rename to ntoskrnl/ke/arm/exp.c diff --git a/reactos/ntoskrnl/ke/arm/ke_i.h b/ntoskrnl/ke/arm/ke_i.h similarity index 100% rename from reactos/ntoskrnl/ke/arm/ke_i.h rename to ntoskrnl/ke/arm/ke_i.h diff --git a/reactos/ntoskrnl/ke/arm/kiinit.c b/ntoskrnl/ke/arm/kiinit.c similarity index 100% rename from reactos/ntoskrnl/ke/arm/kiinit.c rename to ntoskrnl/ke/arm/kiinit.c diff --git a/reactos/ntoskrnl/ke/arm/stubs_asm.s b/ntoskrnl/ke/arm/stubs_asm.s similarity index 100% rename from reactos/ntoskrnl/ke/arm/stubs_asm.s rename to ntoskrnl/ke/arm/stubs_asm.s diff --git a/reactos/ntoskrnl/ke/arm/thrdini.c b/ntoskrnl/ke/arm/thrdini.c similarity index 100% rename from reactos/ntoskrnl/ke/arm/thrdini.c rename to ntoskrnl/ke/arm/thrdini.c diff --git a/reactos/ntoskrnl/ke/arm/time.c b/ntoskrnl/ke/arm/time.c similarity index 100% rename from reactos/ntoskrnl/ke/arm/time.c rename to ntoskrnl/ke/arm/time.c diff --git a/reactos/ntoskrnl/ke/arm/trap.s b/ntoskrnl/ke/arm/trap.s similarity index 100% rename from reactos/ntoskrnl/ke/arm/trap.s rename to ntoskrnl/ke/arm/trap.s diff --git a/reactos/ntoskrnl/ke/arm/trapc.c b/ntoskrnl/ke/arm/trapc.c similarity index 100% rename from reactos/ntoskrnl/ke/arm/trapc.c rename to ntoskrnl/ke/arm/trapc.c diff --git a/reactos/ntoskrnl/ke/arm/usercall.c b/ntoskrnl/ke/arm/usercall.c similarity index 100% rename from reactos/ntoskrnl/ke/arm/usercall.c rename to ntoskrnl/ke/arm/usercall.c diff --git a/reactos/ntoskrnl/ke/balmgr.c b/ntoskrnl/ke/balmgr.c similarity index 100% rename from reactos/ntoskrnl/ke/balmgr.c rename to ntoskrnl/ke/balmgr.c diff --git a/reactos/ntoskrnl/ke/bug.c b/ntoskrnl/ke/bug.c similarity index 100% rename from reactos/ntoskrnl/ke/bug.c rename to ntoskrnl/ke/bug.c diff --git a/reactos/ntoskrnl/ke/clock.c b/ntoskrnl/ke/clock.c similarity index 100% rename from reactos/ntoskrnl/ke/clock.c rename to ntoskrnl/ke/clock.c diff --git a/reactos/ntoskrnl/ke/config.c b/ntoskrnl/ke/config.c similarity index 100% rename from reactos/ntoskrnl/ke/config.c rename to ntoskrnl/ke/config.c diff --git a/reactos/ntoskrnl/ke/devqueue.c b/ntoskrnl/ke/devqueue.c similarity index 100% rename from reactos/ntoskrnl/ke/devqueue.c rename to ntoskrnl/ke/devqueue.c diff --git a/reactos/ntoskrnl/ke/dpc.c b/ntoskrnl/ke/dpc.c similarity index 100% rename from reactos/ntoskrnl/ke/dpc.c rename to ntoskrnl/ke/dpc.c diff --git a/reactos/ntoskrnl/ke/eventobj.c b/ntoskrnl/ke/eventobj.c similarity index 100% rename from reactos/ntoskrnl/ke/eventobj.c rename to ntoskrnl/ke/eventobj.c diff --git a/reactos/ntoskrnl/ke/except.c b/ntoskrnl/ke/except.c similarity index 100% rename from reactos/ntoskrnl/ke/except.c rename to ntoskrnl/ke/except.c diff --git a/reactos/ntoskrnl/ke/freeldr.c b/ntoskrnl/ke/freeldr.c similarity index 100% rename from reactos/ntoskrnl/ke/freeldr.c rename to ntoskrnl/ke/freeldr.c diff --git a/reactos/ntoskrnl/ke/gate.c b/ntoskrnl/ke/gate.c similarity index 100% rename from reactos/ntoskrnl/ke/gate.c rename to ntoskrnl/ke/gate.c diff --git a/reactos/ntoskrnl/ke/gmutex.c b/ntoskrnl/ke/gmutex.c similarity index 100% rename from reactos/ntoskrnl/ke/gmutex.c rename to ntoskrnl/ke/gmutex.c diff --git a/reactos/ntoskrnl/ke/i386/abios.c b/ntoskrnl/ke/i386/abios.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/abios.c rename to ntoskrnl/ke/i386/abios.c diff --git a/reactos/ntoskrnl/ke/i386/boot.S b/ntoskrnl/ke/i386/boot.S similarity index 100% rename from reactos/ntoskrnl/ke/i386/boot.S rename to ntoskrnl/ke/i386/boot.S diff --git a/reactos/ntoskrnl/ke/i386/cpu.c b/ntoskrnl/ke/i386/cpu.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/cpu.c rename to ntoskrnl/ke/i386/cpu.c diff --git a/reactos/ntoskrnl/ke/i386/ctxswitch.S b/ntoskrnl/ke/i386/ctxswitch.S similarity index 100% rename from reactos/ntoskrnl/ke/i386/ctxswitch.S rename to ntoskrnl/ke/i386/ctxswitch.S diff --git a/reactos/ntoskrnl/ke/i386/exp.c b/ntoskrnl/ke/i386/exp.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/exp.c rename to ntoskrnl/ke/i386/exp.c diff --git a/reactos/ntoskrnl/ke/i386/irqobj.c b/ntoskrnl/ke/i386/irqobj.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/irqobj.c rename to ntoskrnl/ke/i386/irqobj.c diff --git a/reactos/ntoskrnl/ke/i386/kiinit.c b/ntoskrnl/ke/i386/kiinit.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/kiinit.c rename to ntoskrnl/ke/i386/kiinit.c diff --git a/reactos/ntoskrnl/ke/i386/ldt.c b/ntoskrnl/ke/i386/ldt.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/ldt.c rename to ntoskrnl/ke/i386/ldt.c diff --git a/reactos/ntoskrnl/ke/i386/mtrr.c b/ntoskrnl/ke/i386/mtrr.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/mtrr.c rename to ntoskrnl/ke/i386/mtrr.c diff --git a/reactos/ntoskrnl/ke/i386/patpge.c b/ntoskrnl/ke/i386/patpge.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/patpge.c rename to ntoskrnl/ke/i386/patpge.c diff --git a/reactos/ntoskrnl/ke/i386/systimer.S b/ntoskrnl/ke/i386/systimer.S similarity index 100% rename from reactos/ntoskrnl/ke/i386/systimer.S rename to ntoskrnl/ke/i386/systimer.S diff --git a/reactos/ntoskrnl/ke/i386/thrdini.c b/ntoskrnl/ke/i386/thrdini.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/thrdini.c rename to ntoskrnl/ke/i386/thrdini.c diff --git a/reactos/ntoskrnl/ke/i386/trap.s b/ntoskrnl/ke/i386/trap.s similarity index 100% rename from reactos/ntoskrnl/ke/i386/trap.s rename to ntoskrnl/ke/i386/trap.s diff --git a/reactos/ntoskrnl/ke/i386/usercall.c b/ntoskrnl/ke/i386/usercall.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/usercall.c rename to ntoskrnl/ke/i386/usercall.c diff --git a/reactos/ntoskrnl/ke/i386/usercall_asm.S b/ntoskrnl/ke/i386/usercall_asm.S similarity index 100% rename from reactos/ntoskrnl/ke/i386/usercall_asm.S rename to ntoskrnl/ke/i386/usercall_asm.S diff --git a/reactos/ntoskrnl/ke/i386/v86m_sup.S b/ntoskrnl/ke/i386/v86m_sup.S similarity index 100% rename from reactos/ntoskrnl/ke/i386/v86m_sup.S rename to ntoskrnl/ke/i386/v86m_sup.S diff --git a/reactos/ntoskrnl/ke/i386/v86vdm.c b/ntoskrnl/ke/i386/v86vdm.c similarity index 100% rename from reactos/ntoskrnl/ke/i386/v86vdm.c rename to ntoskrnl/ke/i386/v86vdm.c diff --git a/reactos/ntoskrnl/ke/ipi.c b/ntoskrnl/ke/ipi.c similarity index 100% rename from reactos/ntoskrnl/ke/ipi.c rename to ntoskrnl/ke/ipi.c diff --git a/reactos/ntoskrnl/ke/krnlinit.c b/ntoskrnl/ke/krnlinit.c similarity index 100% rename from reactos/ntoskrnl/ke/krnlinit.c rename to ntoskrnl/ke/krnlinit.c diff --git a/reactos/ntoskrnl/ke/mutex.c b/ntoskrnl/ke/mutex.c similarity index 100% rename from reactos/ntoskrnl/ke/mutex.c rename to ntoskrnl/ke/mutex.c diff --git a/reactos/ntoskrnl/ke/powerpc/cpu.c b/ntoskrnl/ke/powerpc/cpu.c similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/cpu.c rename to ntoskrnl/ke/powerpc/cpu.c diff --git a/reactos/ntoskrnl/ke/powerpc/ctxhelp.S b/ntoskrnl/ke/powerpc/ctxhelp.S similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/ctxhelp.S rename to ntoskrnl/ke/powerpc/ctxhelp.S diff --git a/reactos/ntoskrnl/ke/powerpc/ctxswitch.c b/ntoskrnl/ke/powerpc/ctxswitch.c similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/ctxswitch.c rename to ntoskrnl/ke/powerpc/ctxswitch.c diff --git a/reactos/ntoskrnl/ke/powerpc/exp.c b/ntoskrnl/ke/powerpc/exp.c similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/exp.c rename to ntoskrnl/ke/powerpc/exp.c diff --git a/reactos/ntoskrnl/ke/powerpc/kiinit.c b/ntoskrnl/ke/powerpc/kiinit.c similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/kiinit.c rename to ntoskrnl/ke/powerpc/kiinit.c diff --git a/reactos/ntoskrnl/ke/powerpc/main_asm.S b/ntoskrnl/ke/powerpc/main_asm.S similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/main_asm.S rename to ntoskrnl/ke/powerpc/main_asm.S diff --git a/reactos/ntoskrnl/ke/powerpc/ppc_irq.c b/ntoskrnl/ke/powerpc/ppc_irq.c similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/ppc_irq.c rename to ntoskrnl/ke/powerpc/ppc_irq.c diff --git a/reactos/ntoskrnl/ke/powerpc/stubs.c b/ntoskrnl/ke/powerpc/stubs.c similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/stubs.c rename to ntoskrnl/ke/powerpc/stubs.c diff --git a/reactos/ntoskrnl/ke/powerpc/systimer.c b/ntoskrnl/ke/powerpc/systimer.c similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/systimer.c rename to ntoskrnl/ke/powerpc/systimer.c diff --git a/reactos/ntoskrnl/ke/powerpc/thrdini.c b/ntoskrnl/ke/powerpc/thrdini.c similarity index 100% rename from reactos/ntoskrnl/ke/powerpc/thrdini.c rename to ntoskrnl/ke/powerpc/thrdini.c diff --git a/reactos/ntoskrnl/ke/procobj.c b/ntoskrnl/ke/procobj.c similarity index 100% rename from reactos/ntoskrnl/ke/procobj.c rename to ntoskrnl/ke/procobj.c diff --git a/reactos/ntoskrnl/ke/profobj.c b/ntoskrnl/ke/profobj.c similarity index 100% rename from reactos/ntoskrnl/ke/profobj.c rename to ntoskrnl/ke/profobj.c diff --git a/reactos/ntoskrnl/ke/queue.c b/ntoskrnl/ke/queue.c similarity index 100% rename from reactos/ntoskrnl/ke/queue.c rename to ntoskrnl/ke/queue.c diff --git a/reactos/ntoskrnl/ke/semphobj.c b/ntoskrnl/ke/semphobj.c similarity index 100% rename from reactos/ntoskrnl/ke/semphobj.c rename to ntoskrnl/ke/semphobj.c diff --git a/reactos/ntoskrnl/ke/spinlock.c b/ntoskrnl/ke/spinlock.c similarity index 100% rename from reactos/ntoskrnl/ke/spinlock.c rename to ntoskrnl/ke/spinlock.c diff --git a/reactos/ntoskrnl/ke/thrdobj.c b/ntoskrnl/ke/thrdobj.c similarity index 100% rename from reactos/ntoskrnl/ke/thrdobj.c rename to ntoskrnl/ke/thrdobj.c diff --git a/reactos/ntoskrnl/ke/thrdschd.c b/ntoskrnl/ke/thrdschd.c similarity index 100% rename from reactos/ntoskrnl/ke/thrdschd.c rename to ntoskrnl/ke/thrdschd.c diff --git a/reactos/ntoskrnl/ke/timerobj.c b/ntoskrnl/ke/timerobj.c similarity index 100% rename from reactos/ntoskrnl/ke/timerobj.c rename to ntoskrnl/ke/timerobj.c diff --git a/reactos/ntoskrnl/ke/wait.c b/ntoskrnl/ke/wait.c similarity index 100% rename from reactos/ntoskrnl/ke/wait.c rename to ntoskrnl/ke/wait.c diff --git a/reactos/ntoskrnl/lpc/close.c b/ntoskrnl/lpc/close.c similarity index 100% rename from reactos/ntoskrnl/lpc/close.c rename to ntoskrnl/lpc/close.c diff --git a/reactos/ntoskrnl/lpc/complete.c b/ntoskrnl/lpc/complete.c similarity index 100% rename from reactos/ntoskrnl/lpc/complete.c rename to ntoskrnl/lpc/complete.c diff --git a/reactos/ntoskrnl/lpc/connect.c b/ntoskrnl/lpc/connect.c similarity index 100% rename from reactos/ntoskrnl/lpc/connect.c rename to ntoskrnl/lpc/connect.c diff --git a/reactos/ntoskrnl/lpc/create.c b/ntoskrnl/lpc/create.c similarity index 100% rename from reactos/ntoskrnl/lpc/create.c rename to ntoskrnl/lpc/create.c diff --git a/reactos/ntoskrnl/lpc/listen.c b/ntoskrnl/lpc/listen.c similarity index 100% rename from reactos/ntoskrnl/lpc/listen.c rename to ntoskrnl/lpc/listen.c diff --git a/reactos/ntoskrnl/lpc/port.c b/ntoskrnl/lpc/port.c similarity index 100% rename from reactos/ntoskrnl/lpc/port.c rename to ntoskrnl/lpc/port.c diff --git a/reactos/ntoskrnl/lpc/reply.c b/ntoskrnl/lpc/reply.c similarity index 100% rename from reactos/ntoskrnl/lpc/reply.c rename to ntoskrnl/lpc/reply.c diff --git a/reactos/ntoskrnl/lpc/send.c b/ntoskrnl/lpc/send.c similarity index 100% rename from reactos/ntoskrnl/lpc/send.c rename to ntoskrnl/lpc/send.c diff --git a/reactos/ntoskrnl/mm/anonmem.c b/ntoskrnl/mm/anonmem.c similarity index 100% rename from reactos/ntoskrnl/mm/anonmem.c rename to ntoskrnl/mm/anonmem.c diff --git a/reactos/ntoskrnl/mm/arm/stubs.c b/ntoskrnl/mm/arm/stubs.c similarity index 100% rename from reactos/ntoskrnl/mm/arm/stubs.c rename to ntoskrnl/mm/arm/stubs.c diff --git a/reactos/ntoskrnl/mm/balance.c b/ntoskrnl/mm/balance.c similarity index 100% rename from reactos/ntoskrnl/mm/balance.c rename to ntoskrnl/mm/balance.c diff --git a/reactos/ntoskrnl/mm/cont.c b/ntoskrnl/mm/cont.c similarity index 100% rename from reactos/ntoskrnl/mm/cont.c rename to ntoskrnl/mm/cont.c diff --git a/reactos/ntoskrnl/mm/drvlck.c b/ntoskrnl/mm/drvlck.c similarity index 100% rename from reactos/ntoskrnl/mm/drvlck.c rename to ntoskrnl/mm/drvlck.c diff --git a/reactos/ntoskrnl/mm/elf.inc.h b/ntoskrnl/mm/elf.inc.h similarity index 100% rename from reactos/ntoskrnl/mm/elf.inc.h rename to ntoskrnl/mm/elf.inc.h diff --git a/reactos/ntoskrnl/mm/elf32.c b/ntoskrnl/mm/elf32.c similarity index 100% rename from reactos/ntoskrnl/mm/elf32.c rename to ntoskrnl/mm/elf32.c diff --git a/reactos/ntoskrnl/mm/elf64.c b/ntoskrnl/mm/elf64.c similarity index 100% rename from reactos/ntoskrnl/mm/elf64.c rename to ntoskrnl/mm/elf64.c diff --git a/reactos/ntoskrnl/mm/freelist.c b/ntoskrnl/mm/freelist.c similarity index 100% rename from reactos/ntoskrnl/mm/freelist.c rename to ntoskrnl/mm/freelist.c diff --git a/reactos/ntoskrnl/mm/i386/page.c b/ntoskrnl/mm/i386/page.c similarity index 100% rename from reactos/ntoskrnl/mm/i386/page.c rename to ntoskrnl/mm/i386/page.c diff --git a/reactos/ntoskrnl/mm/i386/pagepae.c b/ntoskrnl/mm/i386/pagepae.c similarity index 100% rename from reactos/ntoskrnl/mm/i386/pagepae.c rename to ntoskrnl/mm/i386/pagepae.c diff --git a/reactos/ntoskrnl/mm/iospace.c b/ntoskrnl/mm/iospace.c similarity index 100% rename from reactos/ntoskrnl/mm/iospace.c rename to ntoskrnl/mm/iospace.c diff --git a/reactos/ntoskrnl/mm/kmap.c b/ntoskrnl/mm/kmap.c similarity index 100% rename from reactos/ntoskrnl/mm/kmap.c rename to ntoskrnl/mm/kmap.c diff --git a/reactos/ntoskrnl/mm/marea.c b/ntoskrnl/mm/marea.c similarity index 100% rename from reactos/ntoskrnl/mm/marea.c rename to ntoskrnl/mm/marea.c diff --git a/reactos/ntoskrnl/mm/mdlsup.c b/ntoskrnl/mm/mdlsup.c similarity index 100% rename from reactos/ntoskrnl/mm/mdlsup.c rename to ntoskrnl/mm/mdlsup.c diff --git a/reactos/ntoskrnl/mm/mm.c b/ntoskrnl/mm/mm.c similarity index 100% rename from reactos/ntoskrnl/mm/mm.c rename to ntoskrnl/mm/mm.c diff --git a/reactos/ntoskrnl/mm/mminit.c b/ntoskrnl/mm/mminit.c similarity index 100% rename from reactos/ntoskrnl/mm/mminit.c rename to ntoskrnl/mm/mminit.c diff --git a/reactos/ntoskrnl/mm/mpw.c b/ntoskrnl/mm/mpw.c similarity index 100% rename from reactos/ntoskrnl/mm/mpw.c rename to ntoskrnl/mm/mpw.c diff --git a/reactos/ntoskrnl/mm/ncache.c b/ntoskrnl/mm/ncache.c similarity index 100% rename from reactos/ntoskrnl/mm/ncache.c rename to ntoskrnl/mm/ncache.c diff --git a/reactos/ntoskrnl/mm/npool.c b/ntoskrnl/mm/npool.c similarity index 100% rename from reactos/ntoskrnl/mm/npool.c rename to ntoskrnl/mm/npool.c diff --git a/reactos/ntoskrnl/mm/pagefile.c b/ntoskrnl/mm/pagefile.c similarity index 100% rename from reactos/ntoskrnl/mm/pagefile.c rename to ntoskrnl/mm/pagefile.c diff --git a/reactos/ntoskrnl/mm/pageop.c b/ntoskrnl/mm/pageop.c similarity index 100% rename from reactos/ntoskrnl/mm/pageop.c rename to ntoskrnl/mm/pageop.c diff --git a/reactos/ntoskrnl/mm/pe.c b/ntoskrnl/mm/pe.c similarity index 100% rename from reactos/ntoskrnl/mm/pe.c rename to ntoskrnl/mm/pe.c diff --git a/reactos/ntoskrnl/mm/physical.c b/ntoskrnl/mm/physical.c similarity index 100% rename from reactos/ntoskrnl/mm/physical.c rename to ntoskrnl/mm/physical.c diff --git a/reactos/ntoskrnl/mm/pool.c b/ntoskrnl/mm/pool.c similarity index 100% rename from reactos/ntoskrnl/mm/pool.c rename to ntoskrnl/mm/pool.c diff --git a/reactos/ntoskrnl/mm/powerpc/page.c b/ntoskrnl/mm/powerpc/page.c similarity index 100% rename from reactos/ntoskrnl/mm/powerpc/page.c rename to ntoskrnl/mm/powerpc/page.c diff --git a/reactos/ntoskrnl/mm/powerpc/pfault.c b/ntoskrnl/mm/powerpc/pfault.c similarity index 100% rename from reactos/ntoskrnl/mm/powerpc/pfault.c rename to ntoskrnl/mm/powerpc/pfault.c diff --git a/reactos/ntoskrnl/mm/ppool.c b/ntoskrnl/mm/ppool.c similarity index 100% rename from reactos/ntoskrnl/mm/ppool.c rename to ntoskrnl/mm/ppool.c diff --git a/reactos/ntoskrnl/mm/procsup.c b/ntoskrnl/mm/procsup.c similarity index 100% rename from reactos/ntoskrnl/mm/procsup.c rename to ntoskrnl/mm/procsup.c diff --git a/reactos/ntoskrnl/mm/region.c b/ntoskrnl/mm/region.c similarity index 100% rename from reactos/ntoskrnl/mm/region.c rename to ntoskrnl/mm/region.c diff --git a/reactos/ntoskrnl/mm/rmap.c b/ntoskrnl/mm/rmap.c similarity index 100% rename from reactos/ntoskrnl/mm/rmap.c rename to ntoskrnl/mm/rmap.c diff --git a/reactos/ntoskrnl/mm/rpoolmgr.h b/ntoskrnl/mm/rpoolmgr.h similarity index 100% rename from reactos/ntoskrnl/mm/rpoolmgr.h rename to ntoskrnl/mm/rpoolmgr.h diff --git a/reactos/ntoskrnl/mm/section.c b/ntoskrnl/mm/section.c similarity index 100% rename from reactos/ntoskrnl/mm/section.c rename to ntoskrnl/mm/section.c diff --git a/reactos/ntoskrnl/mm/sysldr.c b/ntoskrnl/mm/sysldr.c similarity index 100% rename from reactos/ntoskrnl/mm/sysldr.c rename to ntoskrnl/mm/sysldr.c diff --git a/reactos/ntoskrnl/mm/verifier.c b/ntoskrnl/mm/verifier.c similarity index 100% rename from reactos/ntoskrnl/mm/verifier.c rename to ntoskrnl/mm/verifier.c diff --git a/reactos/ntoskrnl/mm/virtual.c b/ntoskrnl/mm/virtual.c similarity index 100% rename from reactos/ntoskrnl/mm/virtual.c rename to ntoskrnl/mm/virtual.c diff --git a/reactos/ntoskrnl/mm/wset.c b/ntoskrnl/mm/wset.c similarity index 100% rename from reactos/ntoskrnl/mm/wset.c rename to ntoskrnl/mm/wset.c diff --git a/reactos/ntoskrnl/ntkrnlmp.rbuild b/ntoskrnl/ntkrnlmp.rbuild similarity index 100% rename from reactos/ntoskrnl/ntkrnlmp.rbuild rename to ntoskrnl/ntkrnlmp.rbuild diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/ntoskrnl/ntoskrnl-generic.rbuild similarity index 100% rename from reactos/ntoskrnl/ntoskrnl-generic.rbuild rename to ntoskrnl/ntoskrnl-generic.rbuild diff --git a/reactos/ntoskrnl/ntoskrnl.rbuild b/ntoskrnl/ntoskrnl.rbuild similarity index 100% rename from reactos/ntoskrnl/ntoskrnl.rbuild rename to ntoskrnl/ntoskrnl.rbuild diff --git a/reactos/ntoskrnl/ntoskrnl.rc b/ntoskrnl/ntoskrnl.rc similarity index 100% rename from reactos/ntoskrnl/ntoskrnl.rc rename to ntoskrnl/ntoskrnl.rc diff --git a/reactos/ntoskrnl/ntoskrnl.spec b/ntoskrnl/ntoskrnl.spec similarity index 100% rename from reactos/ntoskrnl/ntoskrnl.spec rename to ntoskrnl/ntoskrnl.spec diff --git a/reactos/ntoskrnl/ntoskrnl_arm.lnk b/ntoskrnl/ntoskrnl_arm.lnk similarity index 100% rename from reactos/ntoskrnl/ntoskrnl_arm.lnk rename to ntoskrnl/ntoskrnl_arm.lnk diff --git a/reactos/ntoskrnl/ntoskrnl_i386.lnk b/ntoskrnl/ntoskrnl_i386.lnk similarity index 100% rename from reactos/ntoskrnl/ntoskrnl_i386.lnk rename to ntoskrnl/ntoskrnl_i386.lnk diff --git a/reactos/ntoskrnl/ntoskrnl_powerpc.lnk b/ntoskrnl/ntoskrnl_powerpc.lnk similarity index 100% rename from reactos/ntoskrnl/ntoskrnl_powerpc.lnk rename to ntoskrnl/ntoskrnl_powerpc.lnk diff --git a/reactos/ntoskrnl/ob/obdir.c b/ntoskrnl/ob/obdir.c similarity index 100% rename from reactos/ntoskrnl/ob/obdir.c rename to ntoskrnl/ob/obdir.c diff --git a/reactos/ntoskrnl/ob/obhandle.c b/ntoskrnl/ob/obhandle.c similarity index 100% rename from reactos/ntoskrnl/ob/obhandle.c rename to ntoskrnl/ob/obhandle.c diff --git a/reactos/ntoskrnl/ob/obinit.c b/ntoskrnl/ob/obinit.c similarity index 100% rename from reactos/ntoskrnl/ob/obinit.c rename to ntoskrnl/ob/obinit.c diff --git a/reactos/ntoskrnl/ob/oblife.c b/ntoskrnl/ob/oblife.c similarity index 100% rename from reactos/ntoskrnl/ob/oblife.c rename to ntoskrnl/ob/oblife.c diff --git a/reactos/ntoskrnl/ob/oblink.c b/ntoskrnl/ob/oblink.c similarity index 100% rename from reactos/ntoskrnl/ob/oblink.c rename to ntoskrnl/ob/oblink.c diff --git a/reactos/ntoskrnl/ob/obname.c b/ntoskrnl/ob/obname.c similarity index 100% rename from reactos/ntoskrnl/ob/obname.c rename to ntoskrnl/ob/obname.c diff --git a/reactos/ntoskrnl/ob/obref.c b/ntoskrnl/ob/obref.c similarity index 100% rename from reactos/ntoskrnl/ob/obref.c rename to ntoskrnl/ob/obref.c diff --git a/reactos/ntoskrnl/ob/obsdcach.c b/ntoskrnl/ob/obsdcach.c similarity index 100% rename from reactos/ntoskrnl/ob/obsdcach.c rename to ntoskrnl/ob/obsdcach.c diff --git a/reactos/ntoskrnl/ob/obsecure.c b/ntoskrnl/ob/obsecure.c similarity index 100% rename from reactos/ntoskrnl/ob/obsecure.c rename to ntoskrnl/ob/obsecure.c diff --git a/reactos/ntoskrnl/ob/obwait.c b/ntoskrnl/ob/obwait.c similarity index 100% rename from reactos/ntoskrnl/ob/obwait.c rename to ntoskrnl/ob/obwait.c diff --git a/reactos/ntoskrnl/po/events.c b/ntoskrnl/po/events.c similarity index 100% rename from reactos/ntoskrnl/po/events.c rename to ntoskrnl/po/events.c diff --git a/reactos/ntoskrnl/po/power.c b/ntoskrnl/po/power.c similarity index 100% rename from reactos/ntoskrnl/po/power.c rename to ntoskrnl/po/power.c diff --git a/reactos/ntoskrnl/ps/arm/psctx.c b/ntoskrnl/ps/arm/psctx.c similarity index 100% rename from reactos/ntoskrnl/ps/arm/psctx.c rename to ntoskrnl/ps/arm/psctx.c diff --git a/reactos/ntoskrnl/ps/debug.c b/ntoskrnl/ps/debug.c similarity index 100% rename from reactos/ntoskrnl/ps/debug.c rename to ntoskrnl/ps/debug.c diff --git a/reactos/ntoskrnl/ps/i386/psctx.c b/ntoskrnl/ps/i386/psctx.c similarity index 100% rename from reactos/ntoskrnl/ps/i386/psctx.c rename to ntoskrnl/ps/i386/psctx.c diff --git a/reactos/ntoskrnl/ps/job.c b/ntoskrnl/ps/job.c similarity index 100% rename from reactos/ntoskrnl/ps/job.c rename to ntoskrnl/ps/job.c diff --git a/reactos/ntoskrnl/ps/kill.c b/ntoskrnl/ps/kill.c similarity index 100% rename from reactos/ntoskrnl/ps/kill.c rename to ntoskrnl/ps/kill.c diff --git a/reactos/ntoskrnl/ps/process.c b/ntoskrnl/ps/process.c similarity index 100% rename from reactos/ntoskrnl/ps/process.c rename to ntoskrnl/ps/process.c diff --git a/reactos/ntoskrnl/ps/psmgr.c b/ntoskrnl/ps/psmgr.c similarity index 100% rename from reactos/ntoskrnl/ps/psmgr.c rename to ntoskrnl/ps/psmgr.c diff --git a/reactos/ntoskrnl/ps/psnotify.c b/ntoskrnl/ps/psnotify.c similarity index 100% rename from reactos/ntoskrnl/ps/psnotify.c rename to ntoskrnl/ps/psnotify.c diff --git a/reactos/ntoskrnl/ps/query.c b/ntoskrnl/ps/query.c similarity index 100% rename from reactos/ntoskrnl/ps/query.c rename to ntoskrnl/ps/query.c diff --git a/reactos/ntoskrnl/ps/quota.c b/ntoskrnl/ps/quota.c similarity index 100% rename from reactos/ntoskrnl/ps/quota.c rename to ntoskrnl/ps/quota.c diff --git a/reactos/ntoskrnl/ps/security.c b/ntoskrnl/ps/security.c similarity index 100% rename from reactos/ntoskrnl/ps/security.c rename to ntoskrnl/ps/security.c diff --git a/reactos/ntoskrnl/ps/state.c b/ntoskrnl/ps/state.c similarity index 100% rename from reactos/ntoskrnl/ps/state.c rename to ntoskrnl/ps/state.c diff --git a/reactos/ntoskrnl/ps/thread.c b/ntoskrnl/ps/thread.c similarity index 100% rename from reactos/ntoskrnl/ps/thread.c rename to ntoskrnl/ps/thread.c diff --git a/reactos/ntoskrnl/ps/win32.c b/ntoskrnl/ps/win32.c similarity index 100% rename from reactos/ntoskrnl/ps/win32.c rename to ntoskrnl/ps/win32.c diff --git a/reactos/ntoskrnl/rtl/arm/rtlexcpt.c b/ntoskrnl/rtl/arm/rtlexcpt.c similarity index 100% rename from reactos/ntoskrnl/rtl/arm/rtlexcpt.c rename to ntoskrnl/rtl/arm/rtlexcpt.c diff --git a/reactos/ntoskrnl/rtl/i386/stack.S b/ntoskrnl/rtl/i386/stack.S similarity index 100% rename from reactos/ntoskrnl/rtl/i386/stack.S rename to ntoskrnl/rtl/i386/stack.S diff --git a/reactos/ntoskrnl/rtl/libsupp.c b/ntoskrnl/rtl/libsupp.c similarity index 100% rename from reactos/ntoskrnl/rtl/libsupp.c rename to ntoskrnl/rtl/libsupp.c diff --git a/reactos/ntoskrnl/rtl/misc.c b/ntoskrnl/rtl/misc.c similarity index 100% rename from reactos/ntoskrnl/rtl/misc.c rename to ntoskrnl/rtl/misc.c diff --git a/reactos/ntoskrnl/se/access.c b/ntoskrnl/se/access.c similarity index 100% rename from reactos/ntoskrnl/se/access.c rename to ntoskrnl/se/access.c diff --git a/reactos/ntoskrnl/se/acl.c b/ntoskrnl/se/acl.c similarity index 100% rename from reactos/ntoskrnl/se/acl.c rename to ntoskrnl/se/acl.c diff --git a/reactos/ntoskrnl/se/audit.c b/ntoskrnl/se/audit.c similarity index 100% rename from reactos/ntoskrnl/se/audit.c rename to ntoskrnl/se/audit.c diff --git a/reactos/ntoskrnl/se/lsa.c b/ntoskrnl/se/lsa.c similarity index 100% rename from reactos/ntoskrnl/se/lsa.c rename to ntoskrnl/se/lsa.c diff --git a/reactos/ntoskrnl/se/priv.c b/ntoskrnl/se/priv.c similarity index 100% rename from reactos/ntoskrnl/se/priv.c rename to ntoskrnl/se/priv.c diff --git a/reactos/ntoskrnl/se/sd.c b/ntoskrnl/se/sd.c similarity index 100% rename from reactos/ntoskrnl/se/sd.c rename to ntoskrnl/se/sd.c diff --git a/reactos/ntoskrnl/se/semgr.c b/ntoskrnl/se/semgr.c similarity index 100% rename from reactos/ntoskrnl/se/semgr.c rename to ntoskrnl/se/semgr.c diff --git a/reactos/ntoskrnl/se/sid.c b/ntoskrnl/se/sid.c similarity index 100% rename from reactos/ntoskrnl/se/sid.c rename to ntoskrnl/se/sid.c diff --git a/reactos/ntoskrnl/se/token.c b/ntoskrnl/se/token.c similarity index 100% rename from reactos/ntoskrnl/se/token.c rename to ntoskrnl/se/token.c diff --git a/reactos/ntoskrnl/sysfuncs.lst b/ntoskrnl/sysfuncs.lst similarity index 100% rename from reactos/ntoskrnl/sysfuncs.lst rename to ntoskrnl/sysfuncs.lst diff --git a/reactos/ntoskrnl/tests/TestDebug.c b/ntoskrnl/tests/TestDebug.c similarity index 100% rename from reactos/ntoskrnl/tests/TestDebug.c rename to ntoskrnl/tests/TestDebug.c diff --git a/reactos/ntoskrnl/tests/TestTimer.c b/ntoskrnl/tests/TestTimer.c similarity index 100% rename from reactos/ntoskrnl/tests/TestTimer.c rename to ntoskrnl/tests/TestTimer.c diff --git a/reactos/ntoskrnl/tests/fsrtl.c b/ntoskrnl/tests/fsrtl.c similarity index 100% rename from reactos/ntoskrnl/tests/fsrtl.c rename to ntoskrnl/tests/fsrtl.c diff --git a/reactos/ntoskrnl/tests/setup.c b/ntoskrnl/tests/setup.c similarity index 100% rename from reactos/ntoskrnl/tests/setup.c rename to ntoskrnl/tests/setup.c diff --git a/reactos/ntoskrnl/tests/stubs.tst b/ntoskrnl/tests/stubs.tst similarity index 100% rename from reactos/ntoskrnl/tests/stubs.tst rename to ntoskrnl/tests/stubs.tst diff --git a/reactos/ntoskrnl/tests/symtest.c b/ntoskrnl/tests/symtest.c similarity index 100% rename from reactos/ntoskrnl/tests/symtest.c rename to ntoskrnl/tests/symtest.c diff --git a/reactos/ntoskrnl/tests/tests/VirtualMemory.c b/ntoskrnl/tests/tests/VirtualMemory.c similarity index 100% rename from reactos/ntoskrnl/tests/tests/VirtualMemory.c rename to ntoskrnl/tests/tests/VirtualMemory.c diff --git a/reactos/ntoskrnl/vdm/vdmexec.c b/ntoskrnl/vdm/vdmexec.c similarity index 100% rename from reactos/ntoskrnl/vdm/vdmexec.c rename to ntoskrnl/vdm/vdmexec.c diff --git a/reactos/ntoskrnl/vdm/vdmmain.c b/ntoskrnl/vdm/vdmmain.c similarity index 100% rename from reactos/ntoskrnl/vdm/vdmmain.c rename to ntoskrnl/vdm/vdmmain.c diff --git a/reactos/ntoskrnl/wmi/wmi.c b/ntoskrnl/wmi/wmi.c similarity index 100% rename from reactos/ntoskrnl/wmi/wmi.c rename to ntoskrnl/wmi/wmi.c diff --git a/reactos/proxy.mak b/proxy.mak similarity index 100% rename from reactos/proxy.mak rename to proxy.mak diff --git a/reactos/base/applications/cacls/lang/.gitignore b/reactos/base/applications/cacls/lang/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/applications/calc/lang/.gitignore b/reactos/base/applications/calc/lang/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/applications/cmdutils/.gitignore b/reactos/base/applications/cmdutils/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/applications/tsclient/.gitignore b/reactos/base/applications/tsclient/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/applications/tsclient/mstsc/.gitignore b/reactos/base/applications/tsclient/mstsc/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/applications/tsclient/mstscax/.gitignore b/reactos/base/applications/tsclient/mstscax/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/applications/tsclient/porting-tools/.gitignore b/reactos/base/applications/tsclient/porting-tools/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/setup/.gitignore b/reactos/base/setup/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/shell/.gitignore b/reactos/base/shell/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/base/system/.gitignore b/reactos/base/system/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/dll/3rdparty/.gitignore b/reactos/dll/3rdparty/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/dll/win32/.gitignore b/reactos/dll/win32/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/dll/win32/browseui/.gitignore b/reactos/dll/win32/browseui/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/dll/win32/netshell/lang/.gitignore b/reactos/dll/win32/netshell/lang/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/dll/win32/odbccp32/.gitignore b/reactos/dll/win32/odbccp32/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/dll/win32/powrprof/.gitignore b/reactos/dll/win32/powrprof/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/ksfilter/swenum/.gitignore b/reactos/drivers/ksfilter/swenum/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/multimedia/portcls.NEW/adapter.c b/reactos/drivers/multimedia/portcls.NEW/adapter.c deleted file mode 100644 index 5a96bd0629d..00000000000 --- a/reactos/drivers/multimedia/portcls.NEW/adapter.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - ReactOS Kernel Streaming - Port Class API: Adapter initialization - - Author: Andrew Greenwood - -*/ - -#include - - -NTSTATUS -PcStartIo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - /* Internal function */ - return STATUS_UNSUCCESSFUL; -} - -NTSTATUS -PcUnload( - IN PDRIVER_OBJECT DriverObject) -{ - /* Internal function */ - return STATUS_UNSUCCESSFUL; -} - - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcInitializeAdapterDriver( - IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPathName, - IN PDRIVER_ADD_DEVICE AddDevice) -{ - /* - This is effectively a common DriverEntry function for PortCls drivers. - So it has similar responsibilities to a normal driver. - - First 2 parameters are from DriverEntry. - Installs the supplied AddDevice routine in the driver object?s driver extension and installs the PortCls driver?s IRP handlers in the driver object itself. - */ - - DriverObject->DriverExtension->AddDevice = AddDevice; - - /* - TODO: (* = implement here, otherwise KS default) - IRP_MJ_CLOSE - * IRP_MJ_CREATE - IRP_MJ_DEVICE_CONTROL - IRP_MJ_FLUSH_BUFFERS - * IRP_MJ_PNP - * IRP_MJ_POWER - IRP_MJ_QUERY_SECURITY - IRP_MJ_READ - IRP_MJ_SET_SECURITY - * IRP_MJ_SYSTEM_CONTROL - IRP_MJ_WRITE - */ - - UNIMPLEMENTED; - - return STATUS_SUCCESS; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcAddAdapterDevice( - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PCPFNSTARTDEVICE StartDevice, - IN ULONG MaxObjects, - IN ULONG DeviceExtensionSize) -{ - /* - Note - after this has been called, we can - handle IRP_MN_START_DEVICE by calling StartDevice - */ - - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} diff --git a/reactos/drivers/multimedia/portcls.NEW/dll.c b/reactos/drivers/multimedia/portcls.NEW/dll.c deleted file mode 100644 index 5d602533081..00000000000 --- a/reactos/drivers/multimedia/portcls.NEW/dll.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - ReactOS Kernel Streaming - Port Class / Library Init and Cleanup - - Author: Andrew Greenwood - - Notes: - - -*/ - -#include - -/* - * @implemented - */ -ULONG STDCALL -DllInitialize(ULONG Unknown) -{ - return 0; -} - -/* - * @implemented - */ -ULONG STDCALL -DllUnload(VOID) -{ - return 0; -} diff --git a/reactos/drivers/multimedia/portcls.NEW/drm.c b/reactos/drivers/multimedia/portcls.NEW/drm.c deleted file mode 100644 index 3aae56dd4d0..00000000000 --- a/reactos/drivers/multimedia/portcls.NEW/drm.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - ReactOS Kernel Streaming - Port Class / Digital Rights Management - - Author: Andrew Greenwood - - Notes: - These are convenience functions for accessing DRM facilities, as - documented here: - http://www.osronline.com/ddkx/stream/aud-prop_9f77.htm -*/ - -#include -#include - -PORTCLASSAPI NTSTATUS NTAPI -PcAddContentHandlers( - IN ULONG ContentId, - IN PVOID *paHandlers, - IN ULONG NumHandlers) -{ - return DrmAddContentHandlers(ContentId, paHandlers, NumHandlers); -} - -PORTCLASSAPI NTSTATUS NTAPI -PcCreateContentMixed( - IN PULONG paContentId, - IN ULONG cContentId, - OUT PULONG pMixedContentId) -{ - return DrmCreateContentMixed(paContentId, cContentId, pMixedContentId); -} - -PORTCLASSAPI NTSTATUS NTAPI -PcDestroyContent( - IN ULONG ContentId) -{ - return DrmDestroyContent(ContentId); -} - -PORTCLASSAPI NTSTATUS NTAPI -PcForwardContentToDeviceObject( - IN ULONG ContentId, - IN PVOID Reserved, - IN PCDRMFORWARD DrmForward) -{ - return DrmForwardContentToDeviceObject(ContentId, Reserved, DrmForward); -} - -PORTCLASSAPI NTSTATUS NTAPI -PcForwardContentToFileObject( - IN ULONG ContentId, - IN PFILE_OBJECT FileObject) -{ - return DrmForwardContentToFileObject(ContentId, FileObject); -} - -PORTCLASSAPI NTSTATUS NTAPI -PcForwardContentToInterface( - IN ULONG ContentId, - IN PUNKNOWN pUnknown, - IN ULONG NumMethods) -{ - return DrmForwardContentToInterface(ContentId, pUnknown, NumMethods); -} - -PORTCLASSAPI NTSTATUS NTAPI -PcGetContentRights( - IN ULONG ContentId, - OUT PDRMRIGHTS DrmRights) -{ - return DrmGetContentRights(ContentId, DrmRights); -} diff --git a/reactos/drivers/multimedia/portcls.NEW/portcls.c b/reactos/drivers/multimedia/portcls.NEW/portcls.c deleted file mode 100644 index 68fc51fe9cb..00000000000 --- a/reactos/drivers/multimedia/portcls.NEW/portcls.c +++ /dev/null @@ -1,489 +0,0 @@ -/* - * PROJECT: ReactOS Sound System - * LICENSE: GPL - See COPYING in the top level directory - * FILE: drivers/multimedia/portcls/portcls.c - * PURPOSE: Audio Port Class Functions - * PROGRAMMERS: - * - */ - -#include "portcls.h" - - -#define NDEBUG -#include - - -NTSTATUS STDCALL -DriverEntry(PDRIVER_OBJECT DriverObject, - PUNICODE_STRING RegistryPath) -{ - return STATUS_SUCCESS; -} - -/* - * @implemented - */ -ULONG STDCALL -DllInitialize(ULONG Unknown) -{ - return 0; -} - -/* - * @implemented - */ -ULONG STDCALL -DllUnload(VOID) -{ - return 0; -} - - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcAddAdapterDevice( - ULONG DriverObject, - ULONG PhysicalDeviceObject, - ULONG StartDevice, - ULONG MaxObjects, - ULONG DeviceExtensionSize -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcAddContentHandlers( - ULONG ContentId, - ULONG paHandlers, - ULONG NumHandlers -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcCompleteIrp( - ULONG DeviceObject, - ULONG Irp, - ULONG Status -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcCompletePendingPropertyRequest( - ULONG PropertyRequest, - ULONG NtStatus -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcCreateContentMixed( - ULONG paContentId, - ULONG cContentId, - ULONG pMixedContentId -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcDestroyContent( - ULONG ContentId -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcDispatchIrp( - ULONG DeviceObject, - ULONG Irp -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcForwardContentToDeviceObject( - ULONG ContentId, - ULONG Reserved, - ULONG DrmForward -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcForwardContentToFileObject( - ULONG ContentId, - ULONG FileObject -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcForwardContentToInterface( - ULONG ContentId, - ULONG Unknown, - ULONG NumMethods -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcForwardIrpSynchronous( - ULONG DeviceObject, - ULONG Irp -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcGetContentRights( - ULONG ContentId, - ULONG DrmRights -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcGetDeviceProperty( - ULONG DeviceObject, - ULONG DeviceProperty, - ULONG BufferLength, - ULONG PropertyBuffer, - ULONG ResultLength -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @implemented - */ -ULONGLONG STDCALL -PcGetTimeInterval( - ULONGLONG Timei -) -{ - LARGE_INTEGER CurrentTime; - - KeQuerySystemTime( &CurrentTime); - - return (Timei - CurrentTime.QuadPart); -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcInitializeAdapterDriver( - ULONG DriverObject, - ULONG RegistryPathName, - ULONG AddDevice -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcNewDmaChannel( - ULONG OutDmaChannel, - ULONG Unknown, - ULONG PoolType, - ULONG DeviceDescription, - ULONG DeviceObject -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcNewInterruptSync( - ULONG OutInterruptSync, - ULONG Unknown, - ULONG ResourceList, - ULONG ResourceIndex, - ULONG Mode -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcNewMiniport( - ULONG OutMiniport, - ULONG ClassId -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcNewPort( - ULONG OutPort, - ULONG ClassId -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcNewRegistryKey( - ULONG OutRegistryKey, - ULONG Unknown, - ULONG RegistryKeyType, - ULONG DesiredAccess, - ULONG DeviceObject, - ULONG SubDevice, - ULONG ObjectAttributes, - ULONG CreateOptions, - ULONG Disposition -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcNewResourceList( - ULONG OutResourceList, - ULONG Unknown, - ULONG PoolType, - ULONG TranslatedResources, - ULONG UntranslatedResources -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcNewResourceSublist( - ULONG OutResourceList, - ULONG Unknown, - ULONG PoolType, - ULONG ParentList, - ULONG MaximumEntries -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcNewServiceGroup( - ULONG OutServiceGroup, - ULONG Unknown -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcRegisterAdapterPowerManagement( - ULONG Unknown, - ULONG pvContext -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcRegisterIoTimeout( - ULONG pDeviceObject, - ULONG pTimerRoutine, - ULONG pContext -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcRegisterPhysicalConnection( - ULONG DeviceObject, - ULONG FromUnknown, - ULONG FromPin, - ULONG ToUnknown, - ULONG ToPin -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcRegisterPhysicalConnectionFromExternal( - ULONG DeviceObject, - ULONG FromString, - ULONG FromPin, - ULONG ToUnknown, - ULONG ToPin -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcRegisterPhysicalConnectionToExternal( - ULONG DeviceObject, - ULONG FromUnknown, - ULONG FromPin, - ULONG ToString, - ULONG ToPin -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcRegisterSubdevice( - ULONG DeviceObject, - ULONG SubdevName, - ULONG Unknown -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcRequestNewPowerState( - ULONG pDeviceObject, - ULONG RequestedNewState -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -NTSTATUS STDCALL -PcUnregisterIoTimeout( - ULONG pDeviceObject, - ULONG pTimerRoutine, - ULONG pContext -) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - diff --git a/reactos/drivers/multimedia/portcls.NEW/portcls.def b/reactos/drivers/multimedia/portcls.NEW/portcls.def deleted file mode 100644 index 4ad6a010c50..00000000000 --- a/reactos/drivers/multimedia/portcls.NEW/portcls.def +++ /dev/null @@ -1,55 +0,0 @@ -; -; Exports definition file for portcls.sys -; -EXPORTS -DllInitialize@4 -DllUnload@0 - -; Adapters (adapter.c) -PcAddAdapterDevice@20 -PcInitializeAdapterDriver@12 - -; Factories -PcNewDmaChannel@20 -PcNewInterruptSync@20 -PcNewMiniport@8 -PcNewPort@8 -PcNewRegistryKey@36 -PcNewResourceList@20 -PcNewResourceSublist@20 -PcNewServiceGroup@8 - -; Digital Rights Management (drm.c) -PcAddContentHandlers@12 -PcCreateContentMixed@12 -PcDestroyContent@4 -PcForwardContentToDeviceObject@12 -PcForwardContentToFileObject@8 -PcForwardContentToInterface@12 -PcGetContentRights@8 - -; IRP Helpers -PcCompleteIrp@12 -PcDispatchIrp@8 -PcForwardIrpSynchronous@8 - -; Misc -PcGetTimeInterval@8 -PcRegisterSubdevice@12 - -; Physical Connections -PcRegisterPhysicalConnection@20 -PcRegisterPhysicalConnectionFromExternal@20 -PcRegisterPhysicalConnectionToExternal@20 - -; Power Management -PcRegisterAdapterPowerManagement@8 -PcRequestNewPowerState@8 - -; Properties -PcCompletePendingPropertyRequest@8 -PcGetDeviceProperty@20 - -; Timeouts -PcRegisterIoTimeout@12 -PcUnregisterIoTimeout@12 diff --git a/reactos/drivers/multimedia/portcls.NEW/portcls.h b/reactos/drivers/multimedia/portcls.NEW/portcls.h deleted file mode 100644 index 4dc027db331..00000000000 --- a/reactos/drivers/multimedia/portcls.NEW/portcls.h +++ /dev/null @@ -1,253 +0,0 @@ -/* - - Move to w32api when it is ready. - - */ -#ifndef _PORTCLS_H -#define _PORTCLS_H -#if __GNUC__ >=3 -#pragma GCC system_header -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* This header is total bull**** */ - -#include - -#define PORTCLASSAPI extern - -PORTCLASSAPI NTSTATUS STDCALL -PcAddAdapterDevice( - ULONG DriverObject, - ULONG PhysicalDeviceObject, - ULONG StartDevice, - ULONG MaxObjects, - ULONG DeviceExtensionSize -); - -PORTCLASSAPI NTSTATUS STDCALL -PcAddContentHandlers( - ULONG ContentId, - ULONG paHandlers, - ULONG NumHandlers -); - -PORTCLASSAPI NTSTATUS STDCALL -PcCompleteIrp( - ULONG DeviceObject, - ULONG Irp, - ULONG Status -); - -PORTCLASSAPI NTSTATUS STDCALL -PcCompletePendingPropertyRequest( - ULONG PropertyRequest, - ULONG NtStatus -); - -PORTCLASSAPI NTSTATUS STDCALL -PcCreateContentMixed( - ULONG paContentId, - ULONG cContentId, - ULONG pMixedContentId -); - -PORTCLASSAPI NTSTATUS STDCALL -PcDestroyContent( - ULONG ContentId -); - -PORTCLASSAPI NTSTATUS STDCALL -PcDispatchIrp( - ULONG DeviceObject, - ULONG Irp -); - -PORTCLASSAPI NTSTATUS STDCALL -PcForwardContentToDeviceObject( - ULONG ContentId, - ULONG Reserved, - ULONG DrmForward -); - -PORTCLASSAPI NTSTATUS STDCALL -PcForwardContentToFileObject( - ULONG ContentId, - ULONG FileObject -); - -PORTCLASSAPI NTSTATUS STDCALL -PcForwardContentToInterface( - ULONG ContentId, - ULONG Unknown, - ULONG NumMethods -); - -PORTCLASSAPI NTSTATUS STDCALL -PcForwardIrpSynchronous( - ULONG DeviceObject, - ULONG Irp -); - -PORTCLASSAPI NTSTATUS STDCALL -PcGetContentRights( - ULONG ContentId, - ULONG DrmRights -); - -PORTCLASSAPI NTSTATUS STDCALL -PcGetDeviceProperty( - ULONG DeviceObject, - ULONG DeviceProperty, - ULONG BufferLength, - ULONG PropertyBuffer, - ULONG ResultLength -); - -PORTCLASSAPI ULONGLONG STDCALL -PcGetTimeInterval( - ULONGLONG Timei -); - -PORTCLASSAPI NTSTATUS STDCALL -PcInitializeAdapterDriver( - ULONG DriverObject, - ULONG RegistryPathName, - ULONG AddDevice -); - -PORTCLASSAPI NTSTATUS STDCALL -PcNewDmaChannel( - ULONG OutDmaChannel, - ULONG Unknown, - ULONG PoolType, - ULONG DeviceDescription, - ULONG DeviceObject -); - -PORTCLASSAPI NTSTATUS STDCALL -PcNewInterruptSync( - ULONG OutInterruptSync, - ULONG Unknown, - ULONG ResourceList, - ULONG ResourceIndex, - ULONG Mode -); - -PORTCLASSAPI NTSTATUS STDCALL -PcNewMiniport( - ULONG OutMiniport, - ULONG ClassId -); - -PORTCLASSAPI NTSTATUS STDCALL -PcNewPort( - ULONG OutPort, - ULONG ClassId -); - -PORTCLASSAPI NTSTATUS STDCALL -PcNewRegistryKey( - ULONG OutRegistryKey, - ULONG Unknown, - ULONG RegistryKeyType, - ULONG DesiredAccess, - ULONG DeviceObject, - ULONG SubDevice, - ULONG ObjectAttributes, - ULONG CreateOptions, - ULONG Disposition -); - -PORTCLASSAPI NTSTATUS STDCALL -PcNewResourceList( - ULONG OutResourceList, - ULONG Unknown, - ULONG PoolType, - ULONG TranslatedResources, - ULONG UntranslatedResources -); - -PORTCLASSAPI NTSTATUS STDCALL -PcNewResourceSublist( - ULONG OutResourceList, - ULONG Unknown, - ULONG PoolType, - ULONG ParentList, - ULONG MaximumEntries -); - -PORTCLASSAPI NTSTATUS STDCALL -PcNewServiceGroup( - ULONG OutServiceGroup, - ULONG Unknown -); - -PORTCLASSAPI NTSTATUS STDCALL -PcRegisterAdapterPowerManagement( - ULONG Unknown, - ULONG pvContext -); - -PORTCLASSAPI NTSTATUS STDCALL -PcRegisterIoTimeout( - ULONG pDeviceObject, - ULONG pTimerRoutine, - ULONG pContext -); - -PORTCLASSAPI NTSTATUS STDCALL -PcRegisterPhysicalConnection( - ULONG DeviceObject, - ULONG FromUnknown, - ULONG FromPin, - ULONG ToUnknown, - ULONG ToPin -); - -PORTCLASSAPI NTSTATUS STDCALL -PcRegisterPhysicalConnectionFromExternal( - ULONG DeviceObject, - ULONG FromString, - ULONG FromPin, - ULONG ToUnknown, - ULONG ToPin -); - -PORTCLASSAPI NTSTATUS STDCALL -PcRegisterPhysicalConnectionToExternal( - ULONG DeviceObject, - ULONG FromUnknown, - ULONG FromPin, - ULONG ToString, - ULONG ToPin -); - -PORTCLASSAPI NTSTATUS STDCALL -PcRegisterSubdevice( - ULONG DeviceObject, - ULONG SubdevName, - ULONG Unknown -); - -PORTCLASSAPI NTSTATUS STDCALL -PcRequestNewPowerState( - ULONG pDeviceObject, - ULONG RequestedNewState -); - -PORTCLASSAPI NTSTATUS STDCALL -PcUnregisterIoTimeout( - ULONG pDeviceObject, - ULONG pTimerRoutine, - ULONG pContext -); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/reactos/drivers/multimedia/portcls.NEW/portcls.rbuild b/reactos/drivers/multimedia/portcls.NEW/portcls.rbuild deleted file mode 100644 index 950265286c1..00000000000 --- a/reactos/drivers/multimedia/portcls.NEW/portcls.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - - - ../include - ntoskrnl - drmk - dll.c - adapter.c - drm.c - stubs.c - portcls.rc - diff --git a/reactos/drivers/multimedia/portcls.NEW/stubs.c b/reactos/drivers/multimedia/portcls.NEW/stubs.c deleted file mode 100644 index 36d59b75631..00000000000 --- a/reactos/drivers/multimedia/portcls.NEW/stubs.c +++ /dev/null @@ -1,338 +0,0 @@ -/* - Port Class API - Stubbed functions -*/ - -#include - -/* - Factory Stubs -*/ - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcNewDmaChannel( - OUT PDMACHANNEL* OutDmaChannel, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN POOL_TYPE PoolType, - IN PDEVICE_DESCRIPTION DeviceDescription, - IN PDEVICE_OBJECT DeviceObject) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcNewInterruptSync( - OUT PINTERRUPTSYNC* OUtInterruptSync, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN PRESOURCELIST ResourceList, - IN ULONG ResourceIndex, - IN INTERRUPTSYNCMODE Mode) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcNewMiniport( - OUT PMINIPORT* OutMiniport, - IN REFCLSID ClassId) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcNewPort( - OUT PPORT* OutPort, - IN REFCLSID ClassId) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcNewRegistryKey( - OUT PREGISTRYKEY* OutRegistryKey, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN ULONG RegistryKeyType, - IN ACCESS_MASK DesiredAccess, - IN PVOID DeviceObject OPTIONAL, - IN PVOID SubDevice OPTIONAL, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - OUT PULONG Disposition OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcNewResourceList( - OUT PRESOURCELIST* OutResourceList, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN POOL_TYPE PoolType, - IN PCM_RESOURCE_LIST TranslatedResources, - IN PCM_RESOURCE_LIST UntranslatedResources) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcNewResourceSublist( - OUT PRESOURCELIST* OutResourceList, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN POOL_TYPE PoolType, - IN PRESOURCELIST ParentList, - IN ULONG MaximumEntries) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcNewServiceGroup( - OUT PSERVICEGROUP* OutServiceGroup, - IN PUNKNOWN OuterUnknown OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - - -/* =============================================================== - IRP Handling -*/ - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcDispatchIrp( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcCompleteIrp( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN NTSTATUS Status) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcForwardIrpSynchronous( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - - -/* =============================================================== - Power Management -*/ - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcRegisterAdapterPowerManagement( - IN PUNKNOWN pUnknown, - IN PVOID pvContext1) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcRequestNewPowerState( - IN PDEVICE_OBJECT pDeviceObject, - IN DEVICE_POWER_STATE RequestedNewState) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - - -/* =============================================================== - Properties -*/ - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcGetDeviceProperty( - IN PVOID DeviceObject, - IN DEVICE_REGISTRY_PROPERTY DeviceProperty, - IN ULONG BufferLength, - OUT PVOID PropertyBuffer, - OUT PULONG ResultLength) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcCompletePendingPropertyRequest( - IN PPCPROPERTY_REQUEST PropertyRequest, - IN NTSTATUS NtStatus) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - - -/* =============================================================== - I/O Timeouts -*/ - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcRegisterIoTimeout( - IN PDEVICE_OBJECT pDeviceObject, - IN PIO_TIMER_ROUTINE pTimerRoutine, - IN PVOID pContext) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcUnregisterIoTimeout( - IN PDEVICE_OBJECT pDeviceObject, - IN PIO_TIMER_ROUTINE pTimerRoutine, - IN PVOID pContext) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - - -/* =============================================================== - Physical Connections -*/ - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcRegisterPhysicalConnection( - IN PDEVICE_OBJECT DeviceObject, - IN PUNKNOWN FromUnknown, - IN ULONG FromPin, - IN PUNKNOWN ToUnknown, - IN ULONG ToPin) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcRegisterPhysicalConnectionFromExternal( - IN PDEVICE_OBJECT DeviceObject, - IN PUNICODE_STRING FromString, - IN ULONG FromPin, - IN PUNKNOWN ToUnknown, - IN ULONG ToPin) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcRegisterPhysicalConnectionToExternal( - IN PDEVICE_OBJECT DeviceObject, - IN PUNKNOWN FromUnknown, - IN ULONG FromPin, - IN PUNICODE_STRING ToString, - IN ULONG ToPin) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - - -/* =============================================================== - Misc -*/ - -/* - * @unimplemented - */ -PORTCLASSAPI ULONGLONG NTAPI -PcGetTimeInterval( - IN ULONGLONG Since) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - * @unimplemented - */ -PORTCLASSAPI NTSTATUS NTAPI -PcRegisterSubdevice( - IN PDEVICE_OBJECT DeviceObject, - IN PWCHAR Name, - IN PUNKNOWN Unknown) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} diff --git a/reactos/drivers/multimedia/x/allocators.c b/reactos/drivers/multimedia/x/allocators.c deleted file mode 100644 index 4fc778b75dc..00000000000 --- a/reactos/drivers/multimedia/x/allocators.c +++ /dev/null @@ -1,70 +0,0 @@ -/* =============================================================== - Allocator Functions -*/ - -#include - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsCreateAllocator( - IN HANDLE ConnectionHandle, - IN PKSALLOCATOR_FRAMING AllocatorFraming, - OUT PHANDLE AllocatorHandle) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsCreateDefaultAllocator( - IN PIRP Irp) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsValidateAllocatorCreateRequest( - IN PIRP Irp, - OUT PKSALLOCATOR_FRAMING* AllocatorFraming) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsCreateDefaultAllocatorEx( - IN PIRP Irp, - IN PVOID InitializeContext OPTIONAL, - IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL, - IN PFNKSDEFAULTFREE DefaultFree OPTIONAL, - IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL, - IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsValidateAllocatorFramingEx( - IN PKSALLOCATOR_FRAMING_EX Framing, - IN ULONG BufferSize, - IN const KSALLOCATOR_FRAMING_EX* PinFraming) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} diff --git a/reactos/drivers/multimedia/x/clocks.c b/reactos/drivers/multimedia/x/clocks.c deleted file mode 100644 index a075bbff966..00000000000 --- a/reactos/drivers/multimedia/x/clocks.c +++ /dev/null @@ -1,124 +0,0 @@ -/* =============================================================== - Clock Functions -*/ - -#include - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsCreateClock( - IN HANDLE ConnectionHandle, - IN PKSCLOCK_CREATE ClockCreate, - OUT PHANDLE ClockHandle) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsCreateDefaultClock( - IN PIRP Irp, - IN PKSDEFAULTCLOCK DefaultClock) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAllocateDefaultClock( - OUT PKSDEFAULTCLOCK* DefaultClock) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAllocateDefaultClockEx( - OUT PKSDEFAULTCLOCK* DefaultClock, - IN PVOID Context OPTIONAL, - IN PFNKSSETTIMER SetTimer OPTIONAL, - IN PFNKSCANCELTIMER CancelTimer OPTIONAL, - IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL, - IN const KSRESOLUTION* Resolution OPTIONAL, - IN ULONG Flags) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsFreeDefaultClock( - IN PKSDEFAULTCLOCK DefaultClock) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsValidateClockCreateRequest( - IN PIRP Irp, - OUT PKSCLOCK_CREATE* ClockCreate) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI KSSTATE NTAPI -KsGetDefaultClockState( - IN PKSDEFAULTCLOCK DefaultClock) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsSetDefaultClockState( - IN PKSDEFAULTCLOCK DefaultClock, - IN KSSTATE State) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI LONGLONG NTAPI -KsGetDefaultClockTime( - IN PKSDEFAULTCLOCK DefaultClock) -{ - UNIMPLEMENTED; - return 0; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsSetDefaultClockTime( - IN PKSDEFAULTCLOCK DefaultClock, - IN LONGLONG Time) -{ - UNIMPLEMENTED; -} diff --git a/reactos/drivers/multimedia/x/connectivity.c b/reactos/drivers/multimedia/x/connectivity.c deleted file mode 100644 index 23defde4f8f..00000000000 --- a/reactos/drivers/multimedia/x/connectivity.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - KsCreatePin - KsValidateConnectRequest - KsPinPropertyHandler - KsPinDataIntersection - KsHandleSizedListQuery -*/ - -#include - -KSDDKAPI NTSTATUS NTAPI -KsCreatePin( - IN HANDLE FilterHandle, - IN PKSPIN_CONNECT Connect, - IN ACCESS_MASK DesiredAccess, - OUT PHANDLE ConnectionHandle) -{ - return STATUS_SUCCESS; -} - -KSDDKAPI NTSTATUS NTAPI -KsValidateConnectRequest( - IN PIRP Irp, - IN ULONG DescriptorsCount, - IN KSPIN_DESCRIPTOR* Descriptor, - OUT PKSPIN_CONNECT* Connect) -{ - return STATUS_SUCCESS; -} - -KSDDKAPI NTSTATUS NTAPI -KsPinPropertyHandler( - IN PIRP Irp, - IN PKSPROPERTY Property, - IN OUT PVOID Data, - IN ULONG DescriptorsCount, - IN const KSPIN_DESCRIPTOR* Descriptor) -{ - return STATUS_SUCCESS; -} - -KSDDKAPI NTSTATUS NTAPI -KsPinDataIntersection( - IN PIRP Irp, - IN PKSPIN Pin, - OUT PVOID Data, - IN ULONG DescriptorsCount, - IN const KSPIN_DESCRIPTOR* Descriptor, - IN PFNKSINTERSECTHANDLER IntersectHandler) -{ - return STATUS_SUCCESS; -} - -/* Does this belong here? */ - -KSDDKAPI NTSTATUS NTAPI -KsHandleSizedListQuery( - IN PIRP Irp, - IN ULONG DataItemsCount, - IN ULONG DataItemSize, - IN const VOID* DataItems) -{ - return STATUS_SUCCESS; -} diff --git a/reactos/drivers/multimedia/x/events.c b/reactos/drivers/multimedia/x/events.c deleted file mode 100644 index 814d65e8c7a..00000000000 --- a/reactos/drivers/multimedia/x/events.c +++ /dev/null @@ -1,100 +0,0 @@ -#include - -/* =============================================================== - Event Functions -*/ - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsGenerateEvent( - IN PKSEVENT_ENTRY EntryEvent) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsEnableEventWithAllocator( - IN PIRP Irp, - IN ULONG EventSetsCount, - IN PKSEVENT_SET EventSet, - IN OUT PLIST_ENTRY EventsList OPTIONAL, - IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, - IN PVOID EventsLock OPTIONAL, - IN PFNKSALLOCATOR Allocator OPTIONAL, - IN ULONG EventItemSize OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsGenerateDataEvent( - IN PKSEVENT_ENTRY EventEntry, - IN ULONG DataSize, - IN PVOID Data) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsEnableEvent( - IN PIRP Irp, - IN ULONG EventSetsCount, - IN KSEVENT_SET* EventSet, - IN OUT PLIST_ENTRY EventsList OPTIONAL, - IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL, - IN PVOID EventsLock OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsDiscardEvent( - IN PKSEVENT_ENTRY EventEntry) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsDisableEvent( - IN PIRP Irp, - IN OUT PLIST_ENTRY EventsList, - IN KSEVENTS_LOCKTYPE EventsFlags, - IN PVOID EventsLock) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsFreeEventList( - IN PFILE_OBJECT FileObject, - IN OUT PLIST_ENTRY EventsList, - IN KSEVENTS_LOCKTYPE EVentsFlags, - IN PVOID EventsLock) -{ - UNIMPLEMENTED; -} diff --git a/reactos/drivers/multimedia/x/irp.c b/reactos/drivers/multimedia/x/irp.c deleted file mode 100644 index 8924ee6db3e..00000000000 --- a/reactos/drivers/multimedia/x/irp.c +++ /dev/null @@ -1,479 +0,0 @@ -/* - ReactOS Kernel Streaming - IRP Helpers -*/ - -#include - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAcquireResetValue( - IN PIRP Irp, - OUT KSRESET* ResetValue) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsAddIrpToCancelableQueue( - IN OUT PLIST_ENTRY QueueHead, - IN PKSPIN_LOCK SpinLock, - IN PIRP Irp, - IN KSLIST_ENTRY_LOCATION ListLocation, - IN PDRIVER_CANCEL DriverCancel OPTIONAL) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAddObjectCreateItemToDeviceHeader( - IN KSDEVICE_HEADER Header, - IN PDRIVER_DISPATCH Create, - IN PVOID Context, - IN PWCHAR ObjectClass, - IN PSECURITY_DESCRIPTOR SecurityDescriptor) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAddObjectCreateItemToObjectHeader( - IN KSOBJECT_HEADER Header, - IN PDRIVER_DISPATCH Create, - IN PVOID Context, - IN PWCHAR ObjectClass, - IN PSECURITY_DESCRIPTOR SecurityDescriptor) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAllocateDeviceHeader( - OUT PVOID Header, - IN ULONG ItemsCount, - IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAllocateExtraData( - IN PIRP Irp, - IN ULONG ExtraSize, - OUT PVOID* ExtraBuffer) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAllocateObjectCreateItem( - IN KSDEVICE_HEADER Header, - IN PKSOBJECT_CREATE_ITEM CreateItem, - IN BOOL AllocateEntry, - IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsAllocateObjectHeader( - OUT PVOID Header, - IN ULONG ItemsCount, - IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL, - IN PIRP Irp, - IN KSDISPATCH_TABLE* Table) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsCancelIo( - IN OUT PLIST_ENTRY QueueHead, - IN PKSPIN_LOCK SpinLock) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsCancelRoutine( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsDefaultDeviceIoCompletion( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI BOOLEAN NTAPI -KsDispatchFastIoDeviceControlFailure( - IN PFILE_OBJECT FileObject, - IN BOOLEAN Wait, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength, - IN ULONG IoControlCode, - OUT PIO_STATUS_BLOCK IoStatus, - IN PDEVICE_OBJECT DeviceObject) /* always return false */ -{ - return FALSE; -} - -/* - @unimplemented -*/ -KSDDKAPI BOOLEAN NTAPI -KsDispatchFastReadFailure( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN PDEVICE_OBJECT DeviceObject) /* always return false */ -{ - return FALSE; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsDispatchInvalidDeviceRequest( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsDispatchIrp( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsDispatchSpecificMethod( - IN PIRP Irp, - IN PFNKSHANDLER Handler) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsDispatchSpecificProperty( - IN PIRP Irp, - IN PFNKSHANDLER Handler) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsForwardAndCatchIrp( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PFILE_OBJECT FileObject, - IN KSSTACK_USE StackUse) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsForwardIrp( - IN PIRP Irp, - IN PFILE_OBJECT FileObject, - IN BOOLEAN ReuseStackLocation) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsFreeDeviceHeader( - IN PVOID Header) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsFreeObjectHeader( - IN PVOID Header) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsGetChildCreateParameter( - IN PIRP Irp, - OUT PVOID* CreateParameter) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsMoveIrpsOnCancelableQueue( - IN OUT PLIST_ENTRY SourceList, - IN PKSPIN_LOCK SourceLock, - IN OUT PLIST_ENTRY DestinationList, - IN PKSPIN_LOCK DestinationLock OPTIONAL, - IN KSLIST_ENTRY_LOCATION ListLocation, - IN PFNKSIRPLISTCALLBACK ListCallback, - IN PVOID Context) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsProbeStreamIrp( - IN PIRP Irp, - IN ULONG ProbeFlags, - IN ULONG HeaderSize) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsQueryInformationFile( - IN PFILE_OBJECT FileObject, - OUT PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI ACCESS_MASK NTAPI -KsQueryObjectAccessMask( - IN KSOBJECT_HEADER Header) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI -KsQueryObjectCreateItem( - IN KSOBJECT_HEADER Header) -{ - UNIMPLEMENTED; -/* return STATUS_UNSUCCESSFUL; */ - return NULL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsReadFile( - IN PFILE_OBJECT FileObject, - IN PKEVENT Event OPTIONAL, - IN PVOID PortContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN ULONG Key OPTIONAL, - IN KPROCESSOR_MODE RequestorMode) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsReleaseIrpOnCancelableQueue( - IN PIRP Irp, - IN PDRIVER_CANCEL DriverCancel OPTIONAL) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI PIRP NTAPI -KsRemoveIrpFromCancelableQueue( - IN OUT PLIST_ENTRY QueueHead, - IN PKSPIN_LOCK SpinLock, - IN KSLIST_ENTRY_LOCATION ListLocation, - IN KSIRP_REMOVAL_OPERATION RemovalOperation) -{ - UNIMPLEMENTED; - return NULL; - /*return STATUS_UNSUCCESSFUL; */ -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsRemoveSpecificIrpFromCancelableQueue( - IN PIRP Irp) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsSetInformationFile( - IN PFILE_OBJECT FileObject, - IN PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsSetMajorFunctionHandler( - IN PDRIVER_OBJECT DriverObject, - IN ULONG MajorFunction) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsStreamIo( - IN PFILE_OBJECT FileObject, - IN PKEVENT Event OPTIONAL, - IN PVOID PortContext OPTIONAL, - IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL, - IN PVOID CompletionContext OPTIONAL, - IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN OUT PVOID StreamHeaders, - IN ULONG Length, - IN ULONG Flags, - IN KPROCESSOR_MODE RequestorMode) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI - KsWriteFile( - IN PFILE_OBJECT FileObject, - IN PKEVENT Event OPTIONAL, - IN PVOID PortContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID Buffer, - IN ULONG Length, - IN ULONG Key OPTIONAL, - IN KPROCESSOR_MODE RequestorMode) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} diff --git a/reactos/drivers/multimedia/x/ks.def b/reactos/drivers/multimedia/x/ks.def deleted file mode 100644 index f146fc5f53f..00000000000 --- a/reactos/drivers/multimedia/x/ks.def +++ /dev/null @@ -1,111 +0,0 @@ -; -; Exports definition file for ks.sys -; - -EXPORTS -KsCreateAllocator@12 -KsCreateDefaultAllocator@4 -KsValidateAllocatorCreateRequest@8 -KsCreateDefaultAllocatorEx@24 -KsValidateAllocatorFramingEx@12 - -KsCreateClock@12 -KsCreateDefaultClock@8 -KsAllocateDefaultClock@4 -KsAllocateDefaultClockEx@28 -KsFreeDefaultClock@4 -KsValidateClockCreateRequest@8 -KsGetDefaultClockState@4 -KsSetDefaultClockState@8 -KsGetDefaultClockTime@4 -KsSetDefaultClockTime@12 - -KsMethodHandler@12 -KsMethodHandlerWithAllocator@20 -KsFastMethodHandler@32 - -KsPropertyHandler@12 -KsPropertyHandlerWithAllocator@20 -KsUnserializeObjectPropertiesFromRegistry@12 -KsFastPropertyHandler@32 - -KsGenerateEvent@4 -KsEnableEventWithAllocator@32 -KsGenerateDataEvent@12 -KsEnableEvent@24 -KsDiscardEvent@4 -KsDisableEvent@16 -KsFreeEventList@16 - -KsValidateTopologyNodeCreateRequest@12 -KsCreateTopologyNode@16 -KsTopologyPropertyHandler@16 - -KsCreatePin@16 -KsValidateConnectRequest@16 -KsPinPropertyHandler@20 -KsPinDataIntersection@24 - -KsHandleSizedListQuery@16 - -KsAcquireResetValue@8 -KsAddIrpToCancelableQueue@20 -KsAddObjectCreateItemToDeviceHeader@20 -KsAddObjectCreateItemToObjectHeader@20 -KsAllocateDeviceHeader@12 -KsAllocateExtraData@12 -KsAllocateObjectCreateItem@16 -KsAllocateObjectHeader@20 -KsCancelIo@8 -KsCancelRoutine@8 -KsDefaultDeviceIoCompletion@8 -KsDispatchFastIoDeviceControlFailure@36 -KsDispatchFastReadFailure@32 -; KsDispatchFastWriteFailure@32 -KsDispatchInvalidDeviceRequest@8 -KsDispatchIrp@8 -KsDispatchSpecificMethod@8 -KsDispatchSpecificProperty@8 -KsForwardAndCatchIrp@16 -KsForwardIrp@12 -KsFreeDeviceHeader@4 -KsFreeObjectHeader@4 -KsGetChildCreateParameter@8 -KsMoveIrpsOnCancelableQueue@28 -KsProbeStreamIrp@12 -KsQueryInformationFile@16 -KsQueryObjectAccessMask@4 -KsQueryObjectCreateItem@4 -KsReadFile@32 -KsReleaseIrpOnCancelableQueue@8 -KsRemoveIrpFromCancelableQueue@16 -KsRemoveSpecificIrpFromCancelableQueue@4 -KsSetInformationFile@16 -KsSetMajorFunctionHandler@8 -KsStreamIo@44 -KsWriteFile@32 - -KsRegisterWorker@8 -KsUnregisterWorker@4 -KsRegisterCountedWorker@12 -KsDecrementCountedWorker@4 -KsIncrementCountedWorker@4 -KsQueueWorkItem@8 - -KsCacheMedium@12 -KsDefaultDispatchPnp@8 -KsSetDevicePnpAndBaseObject@12 -KsDefaultDispatchPower@8 -KsSetPowerDispatch@12 -KsReferenceBusObject@4 -KsDereferenceBusObject@4 -KsFreeObjectCreateItem@8 -KsFreeObjectCreateItemsByContext@8 -KsLoadResource@24 -; KsNullDriverUnload@4 -KsPinDataIntersectionEx@32 -KsQueryDevicePnpObject@4 -KsRecalculateStackDepth@8 -KsSetTargetDeviceObject@8 -KsSetTargetState@8 -KsSynchronousIoControlDevice@32 diff --git a/reactos/drivers/multimedia/x/ks.rbuild b/reactos/drivers/multimedia/x/ks.rbuild deleted file mode 100644 index cf7675c08be..00000000000 --- a/reactos/drivers/multimedia/x/ks.rbuild +++ /dev/null @@ -1,20 +0,0 @@ - - . - .. - ../include - - ntoskrnl - - - ks.rc - allocators.c - clocks.c - connectivity.c - events.c - irp.c - methods.c - misc.c - properties.c - topology.c - worker.c - diff --git a/reactos/drivers/multimedia/x/ks.rc b/reactos/drivers/multimedia/x/ks.rc deleted file mode 100644 index 197b8208366..00000000000 --- a/reactos/drivers/multimedia/x/ks.rc +++ /dev/null @@ -1,5 +0,0 @@ -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Kernel Streaming API\0" -#define REACTOS_STR_INTERNAL_NAME "ks\0" -#define REACTOS_STR_ORIGINAL_FILENAME "ks.sys\0" -#include diff --git a/reactos/drivers/multimedia/x/methods.c b/reactos/drivers/multimedia/x/methods.c deleted file mode 100644 index f766c1b41dd..00000000000 --- a/reactos/drivers/multimedia/x/methods.c +++ /dev/null @@ -1,51 +0,0 @@ -/* =============================================================== - Method Functions -*/ - -#include - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsMethodHandler( - IN PIRP Irp, - IN ULONG MethodSetsCount, - IN PKSMETHOD_SET MethodSet) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsMethodHandlerWithAllocator( - IN PIRP Irp, - IN ULONG MethodSetsCount, - IN PKSMETHOD_SET MethodSet, - IN PFNKSALLOCATOR Allocator OPTIONAL, - IN ULONG MethodItemSize OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI BOOLEAN NTAPI -KsFastMethodHandler( - IN PFILE_OBJECT FileObject, - IN PKSMETHOD UNALIGNED Method, - IN ULONG MethodLength, - IN OUT PVOID UNALIGNED Data, - IN ULONG DataLength, - OUT PIO_STATUS_BLOCK IoStatus, - IN ULONG MethodSetsCount, - IN const KSMETHOD_SET* MethodSet) -{ - UNIMPLEMENTED; - return FALSE; -} diff --git a/reactos/drivers/multimedia/x/misc.c b/reactos/drivers/multimedia/x/misc.c deleted file mode 100644 index 7e5303ec6e3..00000000000 --- a/reactos/drivers/multimedia/x/misc.c +++ /dev/null @@ -1,218 +0,0 @@ -#include - -/* =============================================================== - Misc. Helper Functions -*/ - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsCacheMedium( - IN PUNICODE_STRING SymbolicLink, - IN PKSPIN_MEDIUM Medium, - IN DWORD PinDirection) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsDefaultDispatchPnp( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsSetDevicePnpAndBaseObject( - IN KSDEVICE_HEADER Header, - IN PDEVICE_OBJECT PnpDeviceObject, - IN PDEVICE_OBJECT BaseDevice) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsDefaultDispatchPower( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsSetPowerDispatch( - IN KSOBJECT_HEADER Header, - IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL, - IN PVOID PowerContext OPTIONAL) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsReferenceBusObject( - IN KSDEVICE_HEADER Header) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsDereferenceBusObject( - IN KSDEVICE_HEADER Header) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsFreeObjectCreateItem( - IN KSDEVICE_HEADER Header, - IN PUNICODE_STRING CreateItem) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsFreeObjectCreateItemsByContext( - IN KSDEVICE_HEADER Header, - IN PVOID Context) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsLoadResource( - IN PVOID ImageBase, - IN POOL_TYPE PoolType, - IN ULONG_PTR ResourceName, - IN ULONG ResourceType, - OUT PVOID* Resource, - OUT PULONG ResourceSize) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -VOID -KsNullDriverUnload( - IN PDRIVER_OBJECT DriverObject) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsPinDataIntersectionEx( - IN PIRP Irp, - IN PKSP_PIN Pin, - OUT PVOID Data, - IN ULONG DescriptorsCount, - IN const KSPIN_DESCRIPTOR* Descriptor, - IN ULONG DescriptorSize, - IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL, - IN PVOID HandlerContext OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI PDEVICE_OBJECT NTAPI -KsQueryDevicePnpObject( - IN KSDEVICE_HEADER Header) -{ - UNIMPLEMENTED; - return NULL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsRecalculateStackDepth( - IN KSDEVICE_HEADER Header, - IN BOOLEAN ReuseStackLocation) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsSetTargetDeviceObject( - IN KSOBJECT_HEADER Header, - IN PDEVICE_OBJECT TargetDevice OPTIONAL) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsSetTargetState( - IN KSOBJECT_HEADER Header, - IN KSTARGET_STATE TargetState) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsSynchronousIoControlDevice( - IN PFILE_OBJECT FileObject, - IN KPROCESSOR_MODE RequestorMode, - IN DWORD IoControl, - IN PVOID InBuffer, - IN ULONG InSize, - OUT PVOID OutBuffer, - IN ULONG OUtSize, - OUT PULONG BytesReturned) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - diff --git a/reactos/drivers/multimedia/x/properties.c b/reactos/drivers/multimedia/x/properties.c deleted file mode 100644 index 84a223784e6..00000000000 --- a/reactos/drivers/multimedia/x/properties.c +++ /dev/null @@ -1,64 +0,0 @@ -#include - -/* =============================================================== - Property Functions -*/ - -/* - @unimplemented -*/ -KSDDKAPI BOOLEAN NTAPI -KsFastPropertyHandler( - IN PFILE_OBJECT FileObject, - IN PKSPROPERTY UNALIGNED Property, - IN ULONG PropertyLength, - IN OUT PVOID UNALIGNED Data, - IN ULONG DataLength, - OUT PIO_STATUS_BLOCK IoStatus, - IN ULONG PropertySetsCount, - IN const KSPROPERTY_SET* PropertySet) -{ - UNIMPLEMENTED; - return FALSE; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsPropertyHandler( - IN PIRP Irp, - IN ULONG PropertySetsCount, - IN const KSPROPERTY_SET* PropertySet) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsPropertyHandlerWithAllocator( - IN PIRP Irp, - IN ULONG PropertySetsCount, - IN PKSPROPERTY_SET PropertySet, - IN PFNKSALLOCATOR Allocator OPTIONAL, - IN ULONG PropertyItemSize OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsUnserializeObjectPropertiesFromRegistry( - IN PFILE_OBJECT FileObject, - IN HANDLE ParentKey OPTIONAL, - IN PUNICODE_STRING RegistryPath OPTIONAL) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} diff --git a/reactos/drivers/multimedia/x/topology.c b/reactos/drivers/multimedia/x/topology.c deleted file mode 100644 index df5049444ab..00000000000 --- a/reactos/drivers/multimedia/x/topology.c +++ /dev/null @@ -1,46 +0,0 @@ -#include - -/* =============================================================== - Topology Functions -*/ - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsCreateTopologyNode( - IN HANDLE ParentHandle, - IN PKSNODE_CREATE NodeCreate, - IN ACCESS_MASK DesiredAccess, - OUT PHANDLE NodeHandle) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsValidateTopologyNodeCreateRequest( - IN PIRP Irp, - IN PKSTOPOLOGY Topology, - OUT PKSNODE_CREATE* NodeCreate) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsTopologyPropertyHandler( - IN PIRP Irp, - IN PKSPROPERTY Property, - IN OUT PVOID Data, - IN const KSTOPOLOGY* Topology) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} diff --git a/reactos/drivers/multimedia/x/worker.c b/reactos/drivers/multimedia/x/worker.c deleted file mode 100644 index f47e9a2780d..00000000000 --- a/reactos/drivers/multimedia/x/worker.c +++ /dev/null @@ -1,74 +0,0 @@ -/* =============================================================== - Worker Management Functions -*/ - -#include - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsRegisterWorker( - IN WORK_QUEUE_TYPE WorkQueueType, - OUT PKSWORKER* Worker) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI VOID NTAPI -KsUnregisterWorker( - IN PKSWORKER Worker) -{ - UNIMPLEMENTED; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsRegisterCountedWorker( - IN WORK_QUEUE_TYPE WorkQueueType, - IN PWORK_QUEUE_ITEM CountedWorkItem, - OUT PKSWORKER* Worker) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -/* - @unimplemented -*/ -KSDDKAPI ULONG NTAPI -KsDecrementCountedWorker( - IN PKSWORKER Worker) -{ - UNIMPLEMENTED; - return 0; -} - -/* - @unimplemented -*/ -KSDDKAPI ULONG NTAPI -KsIncrementCountedWorker( - IN PKSWORKER Worker) -{ - UNIMPLEMENTED; - return 0; -} - -/* - @unimplemented -*/ -KSDDKAPI NTSTATUS NTAPI -KsQueueWorkItem( - IN PKSWORKER Worker, - IN PWORK_QUEUE_ITEM WorkItem) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} diff --git a/reactos/drivers/parallel/parclass/.gitignore b/reactos/drivers/parallel/parclass/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/parallel/parport/.gitignore b/reactos/drivers/parallel/parport/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/storage/classpnp/.gitignore b/reactos/drivers/storage/classpnp/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/storage/fdc/fdc/.gitignore b/reactos/drivers/storage/fdc/fdc/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/storage/fdc/flpydisk/.gitignore b/reactos/drivers/storage/fdc/flpydisk/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/wdm/audio/backpln/adapters/dmusic/.gitignore b/reactos/drivers/wdm/audio/backpln/adapters/dmusic/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/wdm/audio/backpln/portcls/portcls.rc b/reactos/drivers/wdm/audio/backpln/portcls/portcls.rc deleted file mode 100644 index 03edd6d1341..00000000000 --- a/reactos/drivers/wdm/audio/backpln/portcls/portcls.rc +++ /dev/null @@ -1,5 +0,0 @@ -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "PORTCLS Port Class Driver API\0" -#define REACTOS_STR_INTERNAL_NAME "portcls\0" -#define REACTOS_STR_ORIGINAL_FILENAME "portcls.sys\0" -#include diff --git a/reactos/drivers/wdm/audio/filters/kmixer/.gitignore b/reactos/drivers/wdm/audio/filters/kmixer/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/wdm/audio/filters/splitter/.gitignore b/reactos/drivers/wdm/audio/filters/splitter/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/wdm/audio/filters/swmidi/.gitignore b/reactos/drivers/wdm/audio/filters/swmidi/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/drivers/wdm/audio/sysaudio/.gitignore b/reactos/drivers/wdm/audio/sysaudio/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/include/dxsdk/DShowIDL/.gitignore b/reactos/include/dxsdk/DShowIDL/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/include/reactos/chew/chew/.gitignore b/reactos/include/reactos/chew/chew/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/include/reactos/drivers/drivers/.gitignore b/reactos/include/reactos/drivers/drivers/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/include/reactos/elf/elf/.gitignore b/reactos/include/reactos/elf/elf/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/lib/3rdparty/.gitignore b/reactos/lib/3rdparty/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/subsystems/.gitignore b/reactos/subsystems/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/subsystems/win32/.gitignore b/reactos/subsystems/win32/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/reactos/tools/bin2c.c b/reactos/tools/bin2c.c deleted file mode 100644 index c5dd0744866..00000000000 --- a/reactos/tools/bin2c.c +++ /dev/null @@ -1,48 +0,0 @@ -#include - -FILE *in; -FILE *out; - -int main(int argc, char *argv[]) -{ - unsigned char ch; - int cnt = 0; - - if (argc < 4) - { - printf("usage: bin2c infile.bin outfile.h array_name\n"); - return -1; - } - - if ((in = fopen(argv[1], "rb")) == NULL) - { - printf("Couldn't open data file.\n"); - return -1; - } - if ((out = fopen(argv[2], "wb")) == NULL) - { - printf("Couldn't open output file.\n"); - return -1; - } - - fprintf(out, "unsigned char %s[] = {\n", argv[3]); - - ch = fgetc(in); - while (!feof(in)) - { - if (cnt != 0) - fprintf(out, ", "); - if (!(cnt % 16)) - fprintf(out, "\n"); - fprintf(out, "0x%02x", (int)ch); - cnt++; - ch = fgetc(in); - } - - fprintf(out, "\n};\n"); - - fclose(in); - fclose(out); - - return 0; -} diff --git a/reactos/tools/bin2c.mak b/reactos/tools/bin2c.mak deleted file mode 100644 index 28b3545c1d6..00000000000 --- a/reactos/tools/bin2c.mak +++ /dev/null @@ -1,36 +0,0 @@ -BIN2C_BASE = $(TOOLS_BASE) -BIN2C_BASE_ = $(BIN2C_BASE)$(SEP) - -BIN2C_INT = $(INTERMEDIATE_)$(BIN2C_BASE) -BIN2C_INT_ = $(BIN2C_INT)$(SEP) -BIN2C_OUT = $(OUTPUT_)$(BIN2C_BASE) -BIN2C_OUT_ = $(BIN2C_OUT)$(SEP) - -BIN2C_TARGET = \ - $(BIN2C_OUT_)bin2c$(EXEPOSTFIX) - -BIN2C_SOURCES = \ - $(BIN2C_BASE_)bin2c.c - -BIN2C_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(BIN2C_SOURCES:.c=.o)) - -BIN2C_HOST_CFLAGS = $(TOOLS_CFLAGS) - -BIN2C_HOST_LFLAGS = $(TOOLS_LFLAGS) - -.PHONY: bin2c -bin2c: $(BIN2C_TARGET) - -$(BIN2C_TARGET): $(BIN2C_OBJECTS) | $(BIN2C_OUT) - $(ECHO_LD) - ${host_gcc} $(BIN2C_OBJECTS) $(BIN2C_HOST_LFLAGS) -o $@ - -$(BIN2C_INT_)bin2c.o: $(BIN2C_BASE_)bin2c.c | $(BIN2C_INT) - $(ECHO_CC) - ${host_gcc} $(BIN2C_HOST_CFLAGS) -c $< -o $@ - -.PHONY: bin2c_clean -bin2c_clean: - -@$(rm) $(BIN2C_TARGET) $(BIN2C_OBJECTS) 2>$(NUL) -clean: bin2c_clean diff --git a/reactos/tools/buildno/buildno.cpp b/reactos/tools/buildno/buildno.cpp deleted file mode 100644 index 075d0d6a300..00000000000 --- a/reactos/tools/buildno/buildno.cpp +++ /dev/null @@ -1,412 +0,0 @@ -/* - * buildno - Generate the build number for ReactOS - * - * Copyright (c) 1999,2000 Emanuele Aliberti - * Copyright (c) 2006 Christoph von Wittich - * Copyright (c) 2008 Hervé Poussineau - * - * The build number is the day on which the build took - * place, as YYYYMMDD - * - * The build number is stored in the output file as a set of macros - * - * REVISIONS - * --------- - * 2008-01-12 (hpoussin) - * Add -t option to change the build tag - * 2006-09-09 (cwittich) - * Read binary entries files from SVN 1.4.x - * 2000-01-22 (ea) - * Fixed bugs: tm_year is (current_year - 1900), - * tm_month is 0-11 not 1-12 and code ignored TZ. - * 2000-12-10 (ea) - * Added -p option to make it simply print the - * version number, but skip buildno.h generation. - */ -#include -#include -#include -#include -#include "version.h" -#include "xml.h" - -#define FALSE 0 -#define TRUE 1 - -static const char * argv0 = ""; -static char * filename = NULL; -static char * build_tag = NULL; - -int count_wide_string( const wchar_t *str ) -{ - int i; - for( i = 0; str[i]; i++ ) - ; - return i; -} - -char * -GetRev(void) -{ - static char Unknown[] = "UNKNOWN"; - static char Revision[10]; /* 999999999 revisions should be enough for everyone... */ - - /* SVN 1.4.x-1.5.x */ - FILE *fp = NULL; - char ch; - size_t count = 0, chars = 0; - fp = fopen(".svn/entries", "r"); - if (fp != NULL) - { - ch=fgetc(fp); - if (ch == 56 || ch == 57) /* some kind of header? */ - { - while((ch=fgetc(fp)) != EOF) - { - if (ch == 10) - count++; /* seems to used as a seperator */ - if (count > 3) - break; - if ((count == 3) && (chars < sizeof(Revision))) - { - if (chars != 0) - Revision[chars - 1] = ch; - chars++; - } - } - fclose(fp); - return Revision; - } - } - - try - { - XMLElement *head; - - try - { - head = XMLLoadFile(".svn/entries"); - } - catch(XMLFileNotFoundException) - { - head = XMLLoadFile("_svn/entries"); - } - XMLElement *entries = head->subElements[0]; - for (size_t i = 0; i < entries->subElements.size(); i++) - { - XMLElement *entry = entries->subElements[i]; - if ("entry" == entry->name) - { - bool GotName = false; - bool GotKind = false; - bool GotRevision = false; - for (size_t j = 0; j < entry->attributes.size(); j++) - { - XMLAttribute *Attribute = entry->attributes[j]; - if ("name" == Attribute->name && "" == Attribute->value) - { - GotName = true; - } - if ("kind" == Attribute->name && "dir" == Attribute->value) - { - GotKind = true; - } - if ("revision" == Attribute->name) - { - if (sizeof(Revision) <= Attribute->value.length() + 1) - { - strcpy(Revision, "revtoobig"); - } - else - { - strcpy(Revision, Attribute->value.c_str()); - } - GotRevision = true; - } - if (GotName && GotKind && GotRevision) - { - delete head; - return Revision; - } - } - } - } - - delete head; - } - catch(...) - { - ; - } - - return Unknown; -} - -void -write_h (int build, char *buildstr) -{ - FILE *h = NULL; - char* s; - char* s1; - unsigned int length; - int dllversion = KERNEL_VERSION_MAJOR + 42; - - s1 = s = (char *) malloc(256 * 1024); - - s = s + sprintf (s, "/* Do not edit - Machine generated */\n"); - - s = s + sprintf (s, "#ifndef _INC_REACTOS_BUILDNO\n" ); - s = s + sprintf (s, "#define _INC_REACTOS_BUILDNO\n" ); - - s = s + sprintf (s, "#define KERNEL_VERSION_BUILD\t%d\n", build); - s = s + sprintf (s, "#define KERNEL_VERSION_BUILD_HEX\t0x%x\n", atoi(GetRev())); - s = s + sprintf (s, "#define KERNEL_VERSION_BUILD_STR\t\"%s\"\n", buildstr); - s = s + sprintf (s, "#define KERNEL_VERSION_BUILD_RC\t\"%s\\0\"\n", buildstr); - s = s + sprintf (s, "#define KERNEL_RELEASE_RC\t\"%d.%d", - KERNEL_VERSION_MAJOR, KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL); - } - s = s + sprintf (s, "%s\\0\"\n", build_tag); - s = s + sprintf (s, "#define KERNEL_RELEASE_STR\t\"%d.%d", - KERNEL_VERSION_MAJOR, - KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL); - } - s = s + sprintf (s, "%s\"\n", build_tag); - s = s + sprintf (s, "#define KERNEL_VERSION_RC\t\"%d.%d", - KERNEL_VERSION_MAJOR, - KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL); - } - s = s + sprintf (s, "%s\\0\"\n", build_tag); - s = s + sprintf (s, "#define KERNEL_VERSION_STR\t\"%d.%d", - KERNEL_VERSION_MAJOR, - KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL); - } - s = s + sprintf (s, "%s\"\n", build_tag); - s = s + sprintf (s, "#define REACTOS_DLL_VERSION_MAJOR\t%d\n", dllversion); - s = s + sprintf (s, "#define REACTOS_DLL_RELEASE_RC\t\"%d.%d", - dllversion, KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL); - } - s = s + sprintf (s, "%s\\0\"\n", build_tag); - s = s + sprintf (s, "#define REACTOS_DLL_RELEASE_STR\t\"%d.%d", - dllversion, - KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL); - } - s = s + sprintf (s, "%s\"\n", build_tag); - s = s + sprintf (s, "#define REACTOS_DLL_VERSION_RC\t\"%d.%d", - dllversion, - KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL); - } - s = s + sprintf (s, "%s\\0\"\n", build_tag); - s = s + sprintf (s, "#define REACTOS_DLL_VERSION_STR\t\"%d.%d", - dllversion, - KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL); - } - s = s + sprintf (s, "%s\"\n", build_tag); - s = s + sprintf (s, "#endif\n/* EOF */\n"); - - h = fopen (filename, "rb"); - if (h != NULL) - { - fseek(h, 0, SEEK_END); - length = ftell(h); - if (length == strlen(s1)) - { - char* orig; - - orig = (char *) malloc(length); - fseek(h, 0, SEEK_SET); - fread(orig, 1, length, h); - if (memcmp(s1, orig, length) == 0) - { - fclose(h); - free(s1); - return; - } - } - fclose(h); - } - - h = fopen (filename, "wb"); - if (!h) - { - fprintf (stderr, - "%s: can not create file \"%s\"!\n", - argv0, - filename); - free(s1); - return; - } - fwrite(s1, 1, strlen(s1), h); - fclose (h); -} - -void -usage (void) -{ - fprintf ( - stderr, - "Usage: %s [-{p|q}] [-t tag] path-to-header\n\n" - " -p print version number and exit\n" - " -q run in quiet mode\n" - " -t specify a build tag\n", - argv0); - exit (EXIT_SUCCESS); -} - - -int -main (int argc, char * argv []) -{ - int i, length; - int print_only = FALSE; - int quiet = FALSE; - - int build = 0; - char buildstr[64]; - - time_t t1 = 0; - struct tm * t1_tm = NULL; - - argv0 = argv[0]; - - /* Check arguments */ - for (i = 1; i < argc; i++) - { - if (*argv[i] == '-') - { - switch (argv[i][1]) - { - case 'p': - print_only = TRUE; - break; - case 'q': - quiet = TRUE; - break; - case 't': - if (i + 1 != argc) - { - build_tag = argv[++i]; - break; - } - /* fall through */ - default: - usage(); - return EXIT_SUCCESS; - } - } - else if (!filename) - filename = argv[i]; - else - { - usage(); - return EXIT_SUCCESS; - } - } - if (!filename) - { - usage(); - return EXIT_SUCCESS; - } - - /* Set TZ information. */ - tzset (); - /* We are building TODAY! */ - if (! quiet) - { - printf ( "\nReactOS Build Number Generator\n\n"); - } - - time (& t1); /* current build time */ - t1_tm = gmtime (& t1); - - t1_tm->tm_year += 1900; - if (! quiet) - { - printf ( - "Current date: %4d-%02d-%02d\n\n", - t1_tm->tm_year, - (t1_tm->tm_mon + 1), - t1_tm->tm_mday); - } - - /* Compute build number. */ - build = t1_tm->tm_year * 10000 + (t1_tm->tm_mon + 1) * 100 + t1_tm->tm_mday; - - if (!build_tag) - { - /* Create default build tag */ - length = count_wide_string(KERNEL_VERSION_BUILD_TYPE); - build_tag = (char *)malloc(length+2); - if (length > 0) - { - build_tag[0] = '-'; - for (i = 0; KERNEL_VERSION_BUILD_TYPE[i]; i++) - { - build_tag[i + 1] = KERNEL_VERSION_BUILD_TYPE[i]; - } - build_tag[i+1] = 0; - } - else - build_tag[0] = 0; - } - else if (*build_tag) - { - /* Prepend '-' */ - length = strlen(build_tag); - char *new_build_tag = (char *)malloc(length + 2); - strcpy(new_build_tag, "-"); - strcat(new_build_tag, build_tag); - build_tag = new_build_tag; - } - - sprintf(buildstr, "%d-r%s", build, GetRev()); - - if (! quiet) - { - printf ( - "ROS Version : %d.%d", - KERNEL_VERSION_MAJOR, - KERNEL_VERSION_MINOR); - if (0 != KERNEL_VERSION_PATCH_LEVEL) - { - printf(".%d", KERNEL_VERSION_PATCH_LEVEL); - } - printf("%s (Build %s)\n\n", build_tag, buildstr); - } - /* (Over)write the include file, unless the user switched on -p. */ - if (! print_only) - { - write_h (build, buildstr); - } - else - { - printf ("%s: no code generated", argv [0]); - } - - return EXIT_SUCCESS; -} - -/* EOF */ diff --git a/reactos/tools/buildno/buildno.mak b/reactos/tools/buildno/buildno.mak deleted file mode 100644 index d1c027d3e9f..00000000000 --- a/reactos/tools/buildno/buildno.mak +++ /dev/null @@ -1,57 +0,0 @@ -BUILDNO_BASE = $(TOOLS_BASE_)buildno -BUILDNO_BASE_ = $(BUILDNO_BASE)$(SEP) -BUILDNO_INT = $(INTERMEDIATE_)$(BUILDNO_BASE) -BUILDNO_INT_ = $(BUILDNO_INT)$(SEP) -BUILDNO_OUT = $(OUTPUT_)$(BUILDNO_BASE) -BUILDNO_OUT_ = $(BUILDNO_OUT)$(SEP) - -$(BUILDNO_INT): | $(TOOLS_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(BUILDNO_OUT): | $(TOOLS_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - -BUILDNO_TARGET = \ - $(BUILDNO_OUT_)buildno$(EXEPOSTFIX) - -BUILDNO_SOURCES = $(addprefix $(BUILDNO_BASE_), \ - buildno.cpp \ - ) - -BUILDNO_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(BUILDNO_SOURCES:.cpp=.o)) - -BUILDNO_HOST_CXXFLAGS = -I$(TOOLS_BASE) -Iinclude/reactos $(TOOLS_CPPFLAGS) - -BUILDNO_HOST_LFLAGS = $(TOOLS_LFLAGS) - -BUILDNO_VERSION = include$(SEP)reactos$(SEP)version.h - -.PHONY: buildno -buildno: $(BUILDNO_TARGET) - -$(BUILDNO_TARGET): $(BUILDNO_OBJECTS) $(XML_SSPRINTF_OBJECTS) | $(BUILDNO_OUT) - $(ECHO_LD) - ${host_gpp} $^ $(BUILDNO_HOST_LFLAGS) -o $@ - -$(BUILDNO_INT_)buildno.o: $(BUILDNO_BASE_)buildno.cpp $(BUILDNO_VERSION) | $(BUILDNO_INT) - $(ECHO_CC) - ${host_gpp} $(BUILDNO_HOST_CXXFLAGS) -c $< -o $@ - -.PHONY: buildno_clean -buildno_clean: - -@$(rm) $(BUILDNO_TARGET) $(BUILDNO_OBJECTS) 2>$(NUL) -clean: buildno_clean - -# Uncomment the following line if you want to automatically -# update build number after SVN update -#.PHONY: $(BUILDNO_TARGET) - -$(BUILDNO_H): $(BUILDNO_TARGET) - ${mkdir} $(INTERMEDIATE_)include$(SEP)reactos 2>$(NUL) - $(ECHO_BUILDNO) - $(Q)$(BUILDNO_TARGET) $(BUILDNO_QUIET) $(BUILDNO_H) diff --git a/reactos/tools/buildno/pch.h b/reactos/tools/buildno/pch.h deleted file mode 100644 index 16177f82a27..00000000000 --- a/reactos/tools/buildno/pch.h +++ /dev/null @@ -1,47 +0,0 @@ -// pre-compiled header stuff - -#ifndef PCH_H -#define PCH_H - -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) // identifier was truncated to '255' characters in the debug information -#endif//_MSC_VER - -#include -#include -#include -#include - -#include -#ifndef RBUILD -#include -#include -#endif - -#ifdef _MSC_VER -#define MAX_PATH _MAX_PATH -#endif - -#ifndef WIN32 -#include -#include - -inline char * strlwr(char *x) -{ - char *y=x; - - while (*y) { - *y=tolower(*y); - y++; - } - return x; -} - -#define _finite __finite -#define _isnan __isnan -#define stricmp strcasecmp -#define MAX_PATH PATH_MAX -#define _MAX_PATH PATH_MAX -#endif - -#endif//PCH_H diff --git a/reactos/tools/cabman/cabinet.cxx b/reactos/tools/cabman/cabinet.cxx deleted file mode 100755 index c09eea97f17..00000000000 --- a/reactos/tools/cabman/cabinet.cxx +++ /dev/null @@ -1,3741 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/cabinet.cpp - * PURPOSE: Cabinet routines - * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) - * Colin Finck - * NOTES: Define CAB_READ_ONLY for read only version - * REVISIONS: - * CSH 21/03-2001 Created - * CSH 15/08-2003 Made it portable - * CF 04/05-2007 Made it compatible with 64-bit operating systems - * TODO: - * - Checksum of datablocks should be calculated - * - EXTRACT.EXE complains if a disk is created manually - * - Folders that are created manually and span disks will result in a damaged cabinet - */ -#include -#include -#include -#if !defined(WIN32) -# include -#endif -#if defined(__FreeBSD__) || defined(__APPLE__) -# include -#endif // __FreeBSD__ -#include "cabinet.h" -#include "raw.h" -#include "mszip.h" - -#if defined(WIN32) -#define GetSizeOfFile(handle) _GetSizeOfFile(handle) -static LONG _GetSizeOfFile(FILEHANDLE handle) -{ - ULONG size = GetFileSize(handle, NULL); - if (size == INVALID_FILE_SIZE) - return -1; - - return size; -} -#define ReadFileData(handle, buffer, size, bytesread) _ReadFileData(handle, buffer, size, bytesread) -static bool _ReadFileData(FILEHANDLE handle, void* buffer, ULONG size, PULONG bytesread) -{ - return ReadFile(handle, buffer, size, (LPDWORD)bytesread, NULL) != 0; -} -#else -#define GetSizeOfFile(handle) _GetSizeOfFile(handle) -static LONG _GetSizeOfFile(FILEHANDLE handle) -{ - LONG size; - fseek(handle, 0, SEEK_END); - size = ftell(handle); - fseek(handle, 0, SEEK_SET); - return size; -} -#define ReadFileData(handle, buffer, size, bytesread) _ReadFileData(handle, buffer, size, bytesread) -static bool _ReadFileData(FILEHANDLE handle, void* buffer, ULONG size, PULONG bytesread) -{ - *bytesread = fread(buffer, 1, size, handle); - return *bytesread == size; -} -#endif - -#ifndef CAB_READ_ONLY - -#if 0 -#ifdef DBG - -void DumpBuffer(void* Buffer, ULONG Size) -{ - FILEHANDLE FileHandle; - ULONG BytesWritten; - - /* Create file, overwrite if it already exists */ - FileHandle = CreateFile("dump.bin", // Create this file - GENERIC_WRITE, // Open for writing - 0, // No sharing - NULL, // No security - CREATE_ALWAYS, // Create or overwrite - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (FileHandle == INVALID_HANDLE_VALUE) - { - DPRINT(MID_TRACE, ("ERROR OPENING '%u'.\n", (UINT)GetLastError())); - return; - } - - if (!WriteFile(FileHandle, Buffer, Size, &BytesWritten, NULL)) - { - DPRINT(MID_TRACE, ("ERROR WRITING '%u'.\n", (UINT)GetLastError())); - } - - CloseFile(FileHandle); -} - -#endif /* DBG */ -#endif - -/* CCFDATAStorage */ - -CCFDATAStorage::CCFDATAStorage() -/* - * FUNCTION: Default constructor - */ -{ - FileCreated = false; -} - - -CCFDATAStorage::~CCFDATAStorage() -/* - * FUNCTION: Default destructor - */ -{ - ASSERT(!FileCreated); -} - - -ULONG CCFDATAStorage::Create(const char* FileName) -/* - * FUNCTION: Creates the file - * ARGUMENTS: - * FileName = Pointer to name of file - * RETURNS: - * Status of operation - */ -{ - ASSERT(!FileCreated); - -#if defined(WIN32) - if (GetTempPath(MAX_PATH, FullName) == 0) - return CAB_STATUS_CANNOT_CREATE; - - strcat(FullName, FileName); - - /* Create file, overwrite if it already exists */ - FileHandle = CreateFile(FullName, // Create this file - GENERIC_READ | GENERIC_WRITE, // Open for reading/writing - 0, // No sharing - NULL, // No security - CREATE_ALWAYS, // Create or overwrite - FILE_FLAG_SEQUENTIAL_SCAN | // Optimize for sequential scans - FILE_FLAG_DELETE_ON_CLOSE | // Delete file when closed - FILE_ATTRIBUTE_TEMPORARY, // Temporary file - NULL); // No attribute template - if (FileHandle == INVALID_HANDLE_VALUE) - { - DPRINT(MID_TRACE, ("ERROR '%u'.\n", (UINT)GetLastError())); - return CAB_STATUS_CANNOT_CREATE; - } -#else /* !WIN32 */ - /*if (tmpnam(FullName) == NULL)*/ - if ((FileHandle = tmpfile()) == NULL) - return CAB_STATUS_CANNOT_CREATE; - /* - FileHandle = fopen(FullName, "w+b"); - if (FileHandle == NULL) { - DPRINT(MID_TRACE, ("ERROR '%i'.\n", errno)); - return CAB_STATUS_CANNOT_CREATE; - } - */ -#endif - - FileCreated = true; - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCFDATAStorage::Destroy() -/* - * FUNCTION: Destroys the file - * RETURNS: - * Status of operation - */ -{ - ASSERT(FileCreated); - - CloseFile(FileHandle); - - FileCreated = false; - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCFDATAStorage::Truncate() -/* - * FUNCTION: Truncate the scratch file to zero bytes - * RETURNS: - * Status of operation - */ -{ -#if defined(WIN32) - if( SetFilePointer(FileHandle, 0, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER ) - return CAB_STATUS_FAILURE; - if (!SetEndOfFile(FileHandle)) - return CAB_STATUS_FAILURE; -#else /* !WIN32 */ - fclose(FileHandle); - FileHandle = tmpfile(); - if (FileHandle == NULL) - { - DPRINT(MID_TRACE, ("ERROR '%i'.\n", errno)); - return CAB_STATUS_FAILURE; - } -#endif - return CAB_STATUS_SUCCESS; -} - - -ULONG CCFDATAStorage::Position() -/* - * FUNCTION: Returns current position in file - * RETURNS: - * Current position - */ -{ -#if defined(WIN32) - return SetFilePointer(FileHandle, 0, NULL, FILE_CURRENT); -#else - return (ULONG)ftell(FileHandle); -#endif -} - - -ULONG CCFDATAStorage::Seek(LONG Position) -/* - * FUNCTION: Seeks to an absolute position - * ARGUMENTS: - * Position = Absolute position to seek to - * RETURNS: - * Status of operation - */ -{ -#if defined(WIN32) - if( SetFilePointer(FileHandle, - Position, - NULL, - FILE_BEGIN) == INVALID_SET_FILE_POINTER ) - return CAB_STATUS_FAILURE; - else - return CAB_STATUS_SUCCESS; -#else - if (fseek(FileHandle, (off_t)Position, SEEK_SET) != 0) - return CAB_STATUS_FAILURE; - else - return CAB_STATUS_SUCCESS; -#endif -} - - -ULONG CCFDATAStorage::ReadBlock(PCFDATA Data, void* Buffer, PULONG BytesRead) -/* - * FUNCTION: Reads a CFDATA block from the file - * ARGUMENTS: - * Data = Pointer to CFDATA block for the buffer - * Buffer = Pointer to buffer to store data read - * BytesWritten = Pointer to buffer to write number of bytes read - * RETURNS: - * Status of operation - */ -{ -#if defined(WIN32) - if (!ReadFile(FileHandle, Buffer, Data->CompSize, (LPDWORD)BytesRead, NULL)) - return CAB_STATUS_CANNOT_READ; -#else - - *BytesRead = fread(Buffer, 1, Data->CompSize, FileHandle); - if (*BytesRead != Data->CompSize) - return CAB_STATUS_CANNOT_READ; -#endif - return CAB_STATUS_SUCCESS; -} - - -ULONG CCFDATAStorage::WriteBlock(PCFDATA Data, void* Buffer, PULONG BytesWritten) -/* - * FUNCTION: Writes a CFDATA block to the file - * ARGUMENTS: - * Data = Pointer to CFDATA block for the buffer - * Buffer = Pointer to buffer with data to write - * BytesWritten = Pointer to buffer to write number of bytes written - * RETURNS: - * Status of operation - */ -{ -#if defined(WIN32) - if (!WriteFile(FileHandle, Buffer, Data->CompSize, (LPDWORD)BytesWritten, NULL)) - return CAB_STATUS_CANNOT_WRITE; -#else - *BytesWritten = fwrite(Buffer, 1, Data->CompSize, FileHandle); - if (*BytesWritten != Data->CompSize) - return CAB_STATUS_CANNOT_WRITE; -#endif - return CAB_STATUS_SUCCESS; -} - -#endif /* CAB_READ_ONLY */ - - -/* CCabinet */ - -CCabinet::CCabinet() -/* - * FUNCTION: Default constructor - */ -{ - *CabinetName = '\0'; - *CabinetPrev = '\0'; - *DiskPrev = '\0'; - *CabinetNext = '\0'; - *DiskNext = '\0'; - *DestPath = '\0'; - *CabinetReservedFile = '\0'; - - FileOpen = false; - CabinetReservedFileBuffer = NULL; - CabinetReservedFileSize = 0; - - FolderListHead = NULL; - FolderListTail = NULL; - FileListHead = NULL; - FileListTail = NULL; - CriteriaListHead = NULL; - CriteriaListTail = NULL; - - Codec = NULL; - CodecId = -1; - CodecSelected = false; - - OutputBuffer = NULL; - InputBuffer = NULL; - MaxDiskSize = 0; - BlockIsSplit = false; - ScratchFile = NULL; - - FolderUncompSize = 0; - BytesLeftInBlock = 0; - ReuseBlock = false; - CurrentDataNode = NULL; -} - - -CCabinet::~CCabinet() -/* - * FUNCTION: Default destructor - */ -{ - if (CabinetReservedFileBuffer != NULL) - { - FreeMemory(CabinetReservedFileBuffer); - CabinetReservedFileBuffer = NULL; - CabinetReservedFileSize = 0; - } - - if (CodecSelected) - delete Codec; -} - -bool CCabinet::IsSeparator(char Char) -/* - * FUNCTION: Determines if a character is a separator - * ARGUMENTS: - * Char = Character to check - * RETURNS: - * Whether it is a separator - */ -{ - if ((Char == '\\') || (Char == '/')) - return true; - else - return false; -} - -char* CCabinet::ConvertPath(char* Path, bool Allocate) -/* - * FUNCTION: Replaces \ or / with the one used by the host environment - * ARGUMENTS: - * Path = Pointer to string with pathname - * Allocate = Specifies whether to allocate memory for the new - * string or to change the existing buffer - * RETURNS: - * Pointer to new path - */ -{ - char *newpath; - int i; - - if (Allocate) - newpath = strdup(Path); - else - newpath = Path; - - i = 0; - while (Path[i] != 0) - { -#if defined(WIN32) - if (Path[i] == '/') - newpath[i] = '\\'; - else -#else - if (Path[i] == '\\') - newpath[i] = '/'; - else -#endif - newpath[i] = Path[i]; - - i++; - } - newpath[i] = 0; - - return(newpath); -} - - -char* CCabinet::GetFileName(char* Path) -/* - * FUNCTION: Returns a pointer to file name - * ARGUMENTS: - * Path = Pointer to string with pathname - * RETURNS: - * Pointer to filename - */ -{ - ULONG i, j; - - j = i = (Path[0] ? (Path[1] == ':' ? 2 : 0) : 0); - - while (Path [i++]) - if (IsSeparator(Path [i - 1])) - j = i; - - return Path + j; -} - - -void CCabinet::RemoveFileName(char* Path) -/* - * FUNCTION: Removes a file name from a path - * ARGUMENTS: - * Path = Pointer to string with path - */ -{ - char* FileName; - ULONG i; - - i = (Path [0] ? (Path[1] == ':' ? 2 : 0) : 0); - FileName = GetFileName(Path + i); - - if ((FileName != (Path + i)) && (IsSeparator(FileName [-1]))) - FileName--; - if ((FileName == (Path + i)) && (IsSeparator(FileName [0]))) - FileName++; - FileName[0] = 0; -} - - -bool CCabinet::NormalizePath(char* Path, - ULONG Length) -/* - * FUNCTION: Normalizes a path - * ARGUMENTS: - * Path = Pointer to string with pathname - * Length = Number of bytes in Path - * RETURNS: - * true if there was enough room in Path, or false - */ -{ - ULONG n; - bool OK = true; - - if ((n = (ULONG)strlen(Path)) && - (!IsSeparator(Path[n - 1])) && - (OK = ((n + 1) < Length))) - { - Path[n] = DIR_SEPARATOR_CHAR; - Path[n + 1] = 0; - } - return OK; -} - - -char* CCabinet::GetCabinetName() -/* - * FUNCTION: Returns pointer to cabinet file name - * RETURNS: - * Pointer to string with name of cabinet - */ -{ - return CabinetName; -} - - -void CCabinet::SetCabinetName(char* FileName) -/* - * FUNCTION: Sets cabinet file name - * ARGUMENTS: - * FileName = Pointer to string with name of cabinet - */ -{ - strcpy(CabinetName, FileName); -} - - -void CCabinet::SetDestinationPath(char* DestinationPath) -/* - * FUNCTION: Sets destination path - * ARGUMENTS: - * DestinationPath = Pointer to string with name of destination path - */ -{ - strcpy(DestPath, DestinationPath); - ConvertPath(DestPath, false); - if (strlen(DestPath) > 0) - NormalizePath(DestPath, MAX_PATH); -} - -ULONG CCabinet::AddSearchCriteria(char* SearchCriteria) -/* - * FUNCTION: Adds a criteria to the search criteria list - * ARGUMENTS: - * SearchCriteria = String with the search criteria to add - * RETURNS: - * Status of operation - */ -{ - PSEARCH_CRITERIA Criteria; - - // Add the criteria to the list of search criteria - Criteria = (PSEARCH_CRITERIA)AllocateMemory(sizeof(SEARCH_CRITERIA)); - if(!Criteria) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - Criteria->Prev = CriteriaListTail; - Criteria->Next = NULL; - - if(CriteriaListTail) - CriteriaListTail->Next = Criteria; - else - CriteriaListHead = Criteria; - - CriteriaListTail = Criteria; - - // Set the actual criteria string - Criteria->Search = (char*)AllocateMemory(strlen(SearchCriteria) + 1); - if (!Criteria->Search) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - strcpy(Criteria->Search, SearchCriteria); - - return CAB_STATUS_SUCCESS; -} - -void CCabinet::DestroySearchCriteria() -/* - * FUNCTION: Destroys the list with the search criteria - */ -{ - PSEARCH_CRITERIA Criteria; - PSEARCH_CRITERIA NextCriteria; - - Criteria = CriteriaListHead; - - while(Criteria) - { - NextCriteria = Criteria->Next; - - FreeMemory(Criteria->Search); - FreeMemory(Criteria); - - Criteria = NextCriteria; - } - - CriteriaListHead = NULL; - CriteriaListTail = NULL; -} - -bool CCabinet::HasSearchCriteria() -/* - * FUNCTION: Returns whether we have search criteria - * RETURNS: - * Whether we have search criteria or not. - */ -{ - return (CriteriaListHead != NULL); -} - -bool CCabinet::SetCompressionCodec(char* CodecName) -/* - * FUNCTION: Selects the codec to use for compression - * ARGUMENTS: - * CodecName = Pointer to a string with the name of the codec - */ -{ - if( !strcasecmp(CodecName, "raw") ) - SelectCodec(CAB_CODEC_RAW); - else if( !strcasecmp(CodecName, "mszip") ) - SelectCodec(CAB_CODEC_MSZIP); - else - { - printf("Invalid codec specified!\n"); - return false; - } - - return true; -} - -char* CCabinet::GetDestinationPath() -/* - * FUNCTION: Returns destination path - * RETURNS: - * Pointer to string with name of destination path - */ -{ - return DestPath; -} - - -bool CCabinet::SetCabinetReservedFile(char* FileName) -/* - * FUNCTION: Sets cabinet reserved file - * ARGUMENTS: - * FileName = Pointer to string with name of cabinet reserved file - */ -{ - FILEHANDLE FileHandle; - ULONG BytesRead; - -#if defined(WIN32) - FileHandle = CreateFile(ConvertPath(FileName, true), // Open this file - GENERIC_READ, // Open for reading - FILE_SHARE_READ, // Share for reading - NULL, // No security - OPEN_EXISTING, // Existing file only - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (FileHandle == INVALID_HANDLE_VALUE) - { - DPRINT(MID_TRACE, ("Cannot open cabinet reserved file.\n")); - return false; - } -#else /* !WIN32 */ - FileHandle = fopen(ConvertPath(FileName, true), "rb"); - if (FileHandle == NULL) - { - DPRINT(MID_TRACE, ("Cannot open cabinet reserved file.\n")); - return false; - } -#endif - - CabinetReservedFileSize = GetSizeOfFile(FileHandle); - if (CabinetReservedFileSize == (ULONG)-1) - { - DPRINT(MIN_TRACE, ("Cannot read from cabinet reserved file.\n")); - return false; - } - - if (CabinetReservedFileSize == 0) - { - CloseFile(FileHandle); - return false; - } - - CabinetReservedFileBuffer = AllocateMemory(CabinetReservedFileSize); - if (!CabinetReservedFileBuffer) - { - CloseFile(FileHandle); - return false; - } - - if (!ReadFileData(FileHandle, CabinetReservedFileBuffer, CabinetReservedFileSize, &BytesRead)) - { - CloseFile(FileHandle); - return false; - } - - CloseFile(FileHandle); - - strcpy(CabinetReservedFile, FileName); - - return true; -} - - -char* CCabinet::GetCabinetReservedFile() -/* - * FUNCTION: Returns cabionet reserved file - * RETURNS: - * Pointer to string with name of cabinet reserved file - */ -{ - return CabinetReservedFile; -} - - -ULONG CCabinet::GetCurrentDiskNumber() -/* - * FUNCTION: Returns current disk number - * RETURNS: - * Current disk number - */ -{ - return CurrentDiskNumber; -} - - -ULONG CCabinet::Open() -/* - * FUNCTION: Opens a cabinet file - * RETURNS: - * Status of operation - */ -{ - PCFFOLDER_NODE FolderNode; - ULONG Status; - ULONG Index; - - if (!FileOpen) - { - ULONG BytesRead; - ULONG Size; - - OutputBuffer = AllocateMemory(CAB_BLOCKSIZE + 12); // This should be enough - if (!OutputBuffer) - return CAB_STATUS_NOMEMORY; - -#if defined(WIN32) - FileHandle = CreateFile(CabinetName, // Open this file - GENERIC_READ, // Open for reading - FILE_SHARE_READ, // Share for reading - NULL, // No security - OPEN_EXISTING, // Existing file only - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - - if (FileHandle == INVALID_HANDLE_VALUE) - { - DPRINT(MID_TRACE, ("Cannot open file.\n")); - return CAB_STATUS_CANNOT_OPEN; - } -#else /* !WIN32 */ - FileHandle = fopen(CabinetName, "rb"); - if (FileHandle == NULL) - { - DPRINT(MID_TRACE, ("Cannot open file.\n")); - return CAB_STATUS_CANNOT_OPEN; - } -#endif - - FileOpen = true; - - /* Load CAB header */ - if ((Status = ReadBlock(&CABHeader, sizeof(CFHEADER), &BytesRead)) - != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - - /* Check header */ - if ((BytesRead != sizeof(CFHEADER)) || - (CABHeader.Signature != CAB_SIGNATURE ) || - (CABHeader.Version != CAB_VERSION ) || - (CABHeader.FolderCount == 0 ) || - (CABHeader.FileCount == 0 ) || - (CABHeader.FileTableOffset < sizeof(CFHEADER))) - { - CloseCabinet(); - DPRINT(MID_TRACE, ("File has invalid header.\n")); - return CAB_STATUS_INVALID_CAB; - } - - Size = 0; - - /* Read/skip any reserved bytes */ - if (CABHeader.Flags & CAB_FLAG_RESERVE) - { - if ((Status = ReadBlock(&Size, sizeof(ULONG), &BytesRead)) - != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - CabinetReserved = Size & 0xFFFF; - FolderReserved = (Size >> 16) & 0xFF; - DataReserved = (Size >> 24) & 0xFF; - -#if defined(WIN32) - if (SetFilePointer(FileHandle, CabinetReserved, NULL, FILE_CURRENT) == INVALID_SET_FILE_POINTER) - { - DPRINT(MIN_TRACE, ("SetFilePointer() failed, error code is %u.\n", (UINT)GetLastError())); - return CAB_STATUS_FAILURE; - } -#else - if (fseek(FileHandle, (off_t)CabinetReserved, SEEK_CUR) != 0) - { - DPRINT(MIN_TRACE, ("fseek() failed.\n")); - return CAB_STATUS_FAILURE; - } -#endif - } - - if ((CABHeader.Flags & CAB_FLAG_HASPREV) > 0) - { - /* Read name of previous cabinet */ - Status = ReadString(CabinetPrev, 256); - if (Status != CAB_STATUS_SUCCESS) - return Status; - /* Read label of previous disk */ - Status = ReadString(DiskPrev, 256); - if (Status != CAB_STATUS_SUCCESS) - return Status; - } - else - { - strcpy(CabinetPrev, ""); - strcpy(DiskPrev, ""); - } - - if ((CABHeader.Flags & CAB_FLAG_HASNEXT) > 0) - { - /* Read name of next cabinet */ - Status = ReadString(CabinetNext, 256); - if (Status != CAB_STATUS_SUCCESS) - return Status; - /* Read label of next disk */ - Status = ReadString(DiskNext, 256); - if (Status != CAB_STATUS_SUCCESS) - return Status; - } - else - { - strcpy(CabinetNext, ""); - strcpy(DiskNext, ""); - } - - /* Read all folders */ - for (Index = 0; Index < CABHeader.FolderCount; Index++) - { - FolderNode = NewFolderNode(); - if (!FolderNode) - { - DPRINT(MIN_TRACE, ("Insufficient resources.\n")); - return CAB_STATUS_NOMEMORY; - } - - if (Index == 0) - FolderNode->UncompOffset = FolderUncompSize; - - FolderNode->Index = Index; - - if ((Status = ReadBlock(&FolderNode->Folder, - sizeof(CFFOLDER), &BytesRead)) != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - } - - /* Read file entries */ - Status = ReadFileTable(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("ReadFileTable() failed (%u).\n", (UINT)Status)); - return Status; - } - - /* Read data blocks for all folders */ - FolderNode = FolderListHead; - while (FolderNode != NULL) - { - Status = ReadDataBlocks(FolderNode); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("ReadDataBlocks() failed (%u).\n", (UINT)Status)); - return Status; - } - FolderNode = FolderNode->Next; - } - } - return CAB_STATUS_SUCCESS; -} - - -void CCabinet::Close() -/* - * FUNCTION: Closes the cabinet file - */ -{ - if (FileOpen) - { - CloseFile(FileHandle); - FileOpen = false; - } -} - - -ULONG CCabinet::FindFirst(PCAB_SEARCH Search) -/* - * FUNCTION: Finds the first file in the cabinet that matches a search criteria - * ARGUMENTS: - * Search = Pointer to search structure - * RETURNS: - * Status of operation - */ -{ - RestartSearch = false; - Search->Next = FileListHead; - return FindNext(Search); -} - - -ULONG CCabinet::FindNext(PCAB_SEARCH Search) -/* - * FUNCTION: Finds next file in the cabinet that matches a search criteria - * ARGUMENTS: - * Search = Pointer to search structure - * RETURNS: - * Status of operation - */ -{ - bool bFound = false; - PSEARCH_CRITERIA Criteria; - ULONG Status; - - if (RestartSearch) - { - Search->Next = FileListHead; - - /* Skip split files already extracted */ - while ((Search->Next) && - (Search->Next->File.FileControlID > CAB_FILE_MAX_FOLDER) && - (Search->Next->File.FileOffset <= LastFileOffset)) - { - DPRINT(MAX_TRACE, ("Skipping file (%s) FileOffset (0x%X) LastFileOffset (0x%X).\n", - Search->Next->FileName, (UINT)Search->Next->File.FileOffset, (UINT)LastFileOffset)); - Search->Next = Search->Next->Next; - } - - RestartSearch = false; - } - - /* Check each search criteria against each file */ - while(Search->Next) - { - // Some features (like displaying cabinets) don't require search criteria, so we can just break here. - // If a feature requires it, handle this in the ParseCmdline() function in "main.cxx". - if(!CriteriaListHead) - break; - - Criteria = CriteriaListHead; - - while(Criteria) - { - if(MatchFileNamePattern(Search->Next->FileName, Criteria->Search)) - { - bFound = true; - break; - } - - Criteria = Criteria->Next; - } - - if(bFound) - break; - - Search->Next = Search->Next->Next; - } - - if (!Search->Next) - { - if (strlen(DiskNext) > 0) - { - CloseCabinet(); - - SetCabinetName(CabinetNext); - - OnDiskChange(CabinetNext, DiskNext); - - Status = Open(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - - Search->Next = FileListHead; - if (!Search->Next) - return CAB_STATUS_NOFILE; - } - else - return CAB_STATUS_NOFILE; - } - - Search->File = &Search->Next->File; - Search->FileName = Search->Next->FileName; - Search->Next = Search->Next->Next; - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::ExtractFile(char* FileName) -/* - * FUNCTION: Extracts a file from the cabinet - * ARGUMENTS: - * FileName = Pointer to buffer with name of file - * RETURNS - * Status of operation - */ -{ - ULONG Size; - ULONG Offset; - ULONG BytesRead; - ULONG BytesToRead; - ULONG BytesWritten; - ULONG BytesSkipped; - ULONG BytesToWrite; - ULONG TotalBytesRead; - ULONG CurrentOffset; - PUCHAR Buffer; - PUCHAR CurrentBuffer; - FILEHANDLE DestFile; - PCFFILE_NODE File; - CFDATA CFData; - ULONG Status; - bool Skip; -#if defined(WIN32) - FILETIME FileTime; -#endif - CHAR DestName[MAX_PATH]; - CHAR TempName[MAX_PATH]; - - Status = LocateFile(FileName, &File); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MID_TRACE, ("Cannot locate file (%u).\n", (UINT)Status)); - return Status; - } - - LastFileOffset = File->File.FileOffset; - - switch (CurrentFolderNode->Folder.CompressionType & CAB_COMP_MASK) - { - case CAB_COMP_NONE: - SelectCodec(CAB_CODEC_RAW); - break; - - case CAB_COMP_MSZIP: - SelectCodec(CAB_CODEC_MSZIP); - break; - - default: - return CAB_STATUS_UNSUPPCOMP; - } - - DPRINT(MAX_TRACE, ("Extracting file at uncompressed offset (0x%X) Size (%u bytes) AO (0x%X) UO (0x%X).\n", - (UINT)File->File.FileOffset, - (UINT)File->File.FileSize, - (UINT)File->DataBlock->AbsoluteOffset, - (UINT)File->DataBlock->UncompOffset)); - - strcpy(DestName, DestPath); - strcat(DestName, FileName); - - /* Create destination file, fail if it already exists */ -#if defined(WIN32) - DestFile = CreateFile(DestName, // Create this file - GENERIC_WRITE, // Open for writing - 0, // No sharing - NULL, // No security - CREATE_NEW, // New file only - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (DestFile == INVALID_HANDLE_VALUE) - { - /* If file exists, ask to overwrite file */ - if (((Status = GetLastError()) == ERROR_FILE_EXISTS) && - (OnOverwrite(&File->File, FileName))) - { - /* Create destination file, overwrite if it already exists */ - DestFile = CreateFile(DestName, // Create this file - GENERIC_WRITE, // Open for writing - 0, // No sharing - NULL, // No security - TRUNCATE_EXISTING, // Truncate the file - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (DestFile == INVALID_HANDLE_VALUE) - return CAB_STATUS_CANNOT_CREATE; - } - else - { - if (Status == ERROR_FILE_EXISTS) - return CAB_STATUS_FILE_EXISTS; - else - return CAB_STATUS_CANNOT_CREATE; - } - } -#else /* !WIN32 */ - DestFile = fopen(DestName, "rb"); - if (DestFile != NULL) - { - fclose(DestFile); - /* If file exists, ask to overwrite file */ - if (OnOverwrite(&File->File, FileName)) - { - DestFile = fopen(DestName, "w+b"); - if (DestFile == NULL) - return CAB_STATUS_CANNOT_CREATE; - } - else - return CAB_STATUS_FILE_EXISTS; - } - else - { - DestFile = fopen(DestName, "w+b"); - if (DestFile == NULL) - return CAB_STATUS_CANNOT_CREATE; - } -#endif -#if defined(WIN32) - if (!DosDateTimeToFileTime(File->File.FileDate, File->File.FileTime, &FileTime)) - { - CloseFile(DestFile); - DPRINT(MIN_TRACE, ("DosDateTimeToFileTime() failed (%u).\n", (UINT)GetLastError())); - return CAB_STATUS_CANNOT_WRITE; - } - - SetFileTime(DestFile, NULL, &FileTime, NULL); -#else - //DPRINT(MIN_TRACE, ("FIXME: DosDateTimeToFileTime\n")); -#endif - SetAttributesOnFile(DestName, File->File.Attributes); - - Buffer = (PUCHAR)AllocateMemory(CAB_BLOCKSIZE + 12); // This should be enough - if (!Buffer) - { - CloseFile(DestFile); - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - /* Call OnExtract event handler */ - OnExtract(&File->File, FileName); - - /* Search to start of file */ -#if defined(WIN32) - Offset = SetFilePointer(FileHandle, - File->DataBlock->AbsoluteOffset, - NULL, - FILE_BEGIN); - if (Offset == INVALID_SET_FILE_POINTER) - { - DPRINT(MIN_TRACE, ("SetFilePointer() failed, error code is %u.\n", (UINT)GetLastError())); - return CAB_STATUS_INVALID_CAB; - } -#else - if (fseek(FileHandle, (off_t)File->DataBlock->AbsoluteOffset, SEEK_SET) != 0) - { - DPRINT(MIN_TRACE, ("fseek() failed.\n")); - return CAB_STATUS_FAILURE; - } - Offset = ftell(FileHandle); -#endif - - Size = File->File.FileSize; - Offset = File->File.FileOffset; - CurrentOffset = File->DataBlock->UncompOffset; - - Skip = true; - - ReuseBlock = (CurrentDataNode == File->DataBlock); - if (Size > 0) - { - do - { - DPRINT(MAX_TRACE, ("CO (0x%X) ReuseBlock (%u) Offset (0x%X) Size (%d) BytesLeftInBlock (%d)\n", - (UINT)File->DataBlock->UncompOffset, (UINT)ReuseBlock, (UINT)Offset, (UINT)Size, - (UINT)BytesLeftInBlock)); - - if (/*(CurrentDataNode != File->DataBlock) &&*/ (!ReuseBlock) || (BytesLeftInBlock <= 0)) - { - DPRINT(MAX_TRACE, ("Filling buffer. ReuseBlock (%u)\n", (UINT)ReuseBlock)); - - CurrentBuffer = Buffer; - TotalBytesRead = 0; - do - { - DPRINT(MAX_TRACE, ("Size (%u bytes).\n", (UINT)Size)); - - if (((Status = ReadBlock(&CFData, sizeof(CFDATA), &BytesRead)) != - CAB_STATUS_SUCCESS) || (BytesRead != sizeof(CFDATA))) - { - CloseFile(DestFile); - FreeMemory(Buffer); - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - - DPRINT(MAX_TRACE, ("Data block: Checksum (0x%X) CompSize (%u bytes) UncompSize (%u bytes)\n", - (UINT)CFData.Checksum, - CFData.CompSize, - CFData.UncompSize)); - - ASSERT(CFData.CompSize <= CAB_BLOCKSIZE + 12); - - BytesToRead = CFData.CompSize; - - DPRINT(MAX_TRACE, ("Read: (0x%lX,0x%lX).\n", - (unsigned long)CurrentBuffer, (unsigned long)Buffer)); - - if (((Status = ReadBlock(CurrentBuffer, BytesToRead, &BytesRead)) != - CAB_STATUS_SUCCESS) || (BytesToRead != BytesRead)) - { - CloseFile(DestFile); - FreeMemory(Buffer); - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - - /* FIXME: Does not work with files generated by makecab.exe */ -/* - if (CFData.Checksum != 0) - { - ULONG Checksum = ComputeChecksum(CurrentBuffer, BytesRead, 0); - if (Checksum != CFData.Checksum) - { - CloseFile(DestFile); - FreeMemory(Buffer); - DPRINT(MIN_TRACE, ("Bad checksum (is 0x%X, should be 0x%X).\n", - Checksum, CFData.Checksum)); - return CAB_STATUS_INVALID_CAB; - } - } -*/ - TotalBytesRead += BytesRead; - - CurrentBuffer += BytesRead; - - if (CFData.UncompSize == 0) - { - if (strlen(DiskNext) == 0) - return CAB_STATUS_NOFILE; - - /* CloseCabinet() will destroy all file entries so in case - FileName refers to the FileName field of a CFFOLDER_NODE - structure, we have to save a copy of the filename */ - strcpy(TempName, FileName); - - CloseCabinet(); - - SetCabinetName(CabinetNext); - - OnDiskChange(CabinetNext, DiskNext); - - Status = Open(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - - /* The first data block of the file will not be - found as it is located in the previous file */ - Status = LocateFile(TempName, &File); - if (Status == CAB_STATUS_NOFILE) - { - DPRINT(MID_TRACE, ("Cannot locate file (%u).\n", (UINT)Status)); - return Status; - } - - /* The file is continued in the first data block in the folder */ - File->DataBlock = CurrentFolderNode->DataListHead; - - /* Search to start of file */ -#if defined(WIN32) - if( SetFilePointer(FileHandle, - File->DataBlock->AbsoluteOffset, - NULL, - FILE_BEGIN) == INVALID_SET_FILE_POINTER ) - { - DPRINT(MIN_TRACE, ("SetFilePointer() failed, error code is %u.\n", (UINT)GetLastError())); - return CAB_STATUS_INVALID_CAB; - } -#else - if (fseek(FileHandle, (off_t)File->DataBlock->AbsoluteOffset, SEEK_SET) != 0) - { - DPRINT(MIN_TRACE, ("fseek() failed.\n")); - return CAB_STATUS_INVALID_CAB; - } -#endif - - DPRINT(MAX_TRACE, ("Continuing extraction of file at uncompressed offset (0x%X) Size (%u bytes) AO (0x%X) UO (0x%X).\n", - (UINT)File->File.FileOffset, - (UINT)File->File.FileSize, - (UINT)File->DataBlock->AbsoluteOffset, - (UINT)File->DataBlock->UncompOffset)); - - CurrentDataNode = File->DataBlock; - ReuseBlock = true; - - RestartSearch = true; - } - } while (CFData.UncompSize == 0); - - DPRINT(MAX_TRACE, ("TotalBytesRead (%u).\n", (UINT)TotalBytesRead)); - - Status = Codec->Uncompress(OutputBuffer, Buffer, TotalBytesRead, &BytesToWrite); - if (Status != CS_SUCCESS) - { - CloseFile(DestFile); - FreeMemory(Buffer); - DPRINT(MID_TRACE, ("Cannot uncompress block.\n")); - if (Status == CS_NOMEMORY) - return CAB_STATUS_NOMEMORY; - return CAB_STATUS_INVALID_CAB; - } - - if (BytesToWrite != CFData.UncompSize) - { - DPRINT(MID_TRACE, ("BytesToWrite (%u) != CFData.UncompSize (%d)\n", - (UINT)BytesToWrite, CFData.UncompSize)); - return CAB_STATUS_INVALID_CAB; - } - - BytesLeftInBlock = BytesToWrite; - } - else - { - DPRINT(MAX_TRACE, ("Using same buffer. ReuseBlock (%u)\n", (UINT)ReuseBlock)); - - BytesToWrite = BytesLeftInBlock; - - DPRINT(MAX_TRACE, ("Seeking to absolute offset 0x%X.\n", - (UINT)(CurrentDataNode->AbsoluteOffset + sizeof(CFDATA) + CurrentDataNode->Data.CompSize))); - - if (((Status = ReadBlock(&CFData, sizeof(CFDATA), &BytesRead)) != - CAB_STATUS_SUCCESS) || (BytesRead != sizeof(CFDATA))) - { - CloseFile(DestFile); - FreeMemory(Buffer); - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - - DPRINT(MAX_TRACE, ("CFData.CompSize 0x%X CFData.UncompSize 0x%X.\n", - CFData.CompSize, CFData.UncompSize)); - - /* Go to next data block */ -#if defined(WIN32) - if( SetFilePointer(FileHandle, - CurrentDataNode->AbsoluteOffset + sizeof(CFDATA) + - CurrentDataNode->Data.CompSize, - NULL, - FILE_BEGIN) == INVALID_SET_FILE_POINTER ) - { - DPRINT(MIN_TRACE, ("SetFilePointer() failed, error code is %u.\n", (UINT)GetLastError())); - return CAB_STATUS_INVALID_CAB; - } -#else - if (fseek(FileHandle, (off_t)CurrentDataNode->AbsoluteOffset + sizeof(CFDATA) + - CurrentDataNode->Data.CompSize, SEEK_SET) != 0) - { - DPRINT(MIN_TRACE, ("fseek() failed.\n")); - return CAB_STATUS_INVALID_CAB; - } -#endif - - ReuseBlock = false; - } - - if (Skip) - BytesSkipped = (Offset - CurrentOffset); - else - BytesSkipped = 0; - - BytesToWrite -= BytesSkipped; - - if (Size < BytesToWrite) - BytesToWrite = Size; - - DPRINT(MAX_TRACE, ("Offset (0x%X) CurrentOffset (0x%X) ToWrite (%u) Skipped (%u)(%u) Size (%u).\n", - (UINT)Offset, - (UINT)CurrentOffset, - (UINT)BytesToWrite, - (UINT)BytesSkipped, (UINT)Skip, - (UINT)Size)); - -#if defined(WIN32) - if (!WriteFile(DestFile, (void*)((PUCHAR)OutputBuffer + BytesSkipped), - BytesToWrite, (LPDWORD)&BytesWritten, NULL) || - (BytesToWrite != BytesWritten)) - { - DPRINT(MIN_TRACE, ("Status 0x%X.\n", (UINT)GetLastError())); -#else - BytesWritten = BytesToWrite; - if (fwrite((void*)((PUCHAR)OutputBuffer + BytesSkipped), - BytesToWrite, 1, DestFile) < 1) - { -#endif - CloseFile(DestFile); - FreeMemory(Buffer); - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } - Size -= BytesToWrite; - - CurrentOffset += BytesToWrite; - - /* Don't skip any more bytes */ - Skip = false; - } while (Size > 0); - } - - CloseFile(DestFile); - - FreeMemory(Buffer); - - return CAB_STATUS_SUCCESS; -} - -bool CCabinet::IsCodecSelected() -/* - * FUNCTION: Returns the value of CodecSelected - * RETURNS: - * Whether a codec is selected - */ -{ - return CodecSelected; -} - -void CCabinet::SelectCodec(LONG Id) -/* - * FUNCTION: Selects codec engine to use - * ARGUMENTS: - * Id = Codec identifier - */ -{ - if (CodecSelected) - { - if (Id == CodecId) - return; - - CodecSelected = false; - delete Codec; - } - - switch (Id) - { - case CAB_CODEC_RAW: - Codec = new CRawCodec(); - break; - - case CAB_CODEC_MSZIP: - Codec = new CMSZipCodec(); - break; - - default: - return; - } - - CodecId = Id; - CodecSelected = true; -} - - -#ifndef CAB_READ_ONLY - -/* CAB write methods */ - -ULONG CCabinet::NewCabinet() -/* - * FUNCTION: Creates a new cabinet - * RETURNS: - * Status of operation - */ -{ - ULONG Status; - - CurrentDiskNumber = 0; - - OutputBuffer = AllocateMemory(CAB_BLOCKSIZE + 12); // This should be enough - InputBuffer = AllocateMemory(CAB_BLOCKSIZE + 12); // This should be enough - if ((!OutputBuffer) || (!InputBuffer)) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - CurrentIBuffer = InputBuffer; - CurrentIBufferSize = 0; - - CABHeader.Signature = CAB_SIGNATURE; - CABHeader.Reserved1 = 0; // Not used - CABHeader.CabinetSize = 0; // Not yet known - CABHeader.Reserved2 = 0; // Not used - CABHeader.Reserved3 = 0; // Not used - CABHeader.Version = CAB_VERSION; - CABHeader.FolderCount = 0; // Not yet known - CABHeader.FileCount = 0; // Not yet known - CABHeader.Flags = 0; // Not yet known - // FIXME: Should be random - CABHeader.SetID = 0x534F; - CABHeader.CabinetNumber = 0; - - - TotalFolderSize = 0; - TotalFileSize = 0; - - DiskSize = sizeof(CFHEADER); - - InitCabinetHeader(); - - // NextFolderNumber is 0-based - NextFolderNumber = 0; - - CurrentFolderNode = NULL; - Status = NewFolder(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - - CurrentFolderNode->Folder.DataOffset = DiskSize - TotalHeaderSize; - - ScratchFile = new CCFDATAStorage; - if (!ScratchFile) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - Status = ScratchFile->Create("~CAB.tmp"); - - CreateNewFolder = false; - - CreateNewDisk = false; - - PrevCabinetNumber = 0; - - return Status; -} - - -ULONG CCabinet::NewDisk() -/* - * FUNCTION: Forces a new disk to be created - * RETURNS: - * Status of operation - */ -{ - // NextFolderNumber is 0-based - NextFolderNumber = 1; - - CreateNewDisk = false; - - DiskSize = sizeof(CFHEADER) + TotalFolderSize + TotalFileSize; - - InitCabinetHeader(); - - CurrentFolderNode->TotalFolderSize = 0; - - CurrentFolderNode->Folder.DataBlockCount = 0; - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::NewFolder() -/* - * FUNCTION: Forces a new folder to be created - * RETURNS: - * Status of operation - */ -{ - DPRINT(MAX_TRACE, ("Creating new folder.\n")); - - CurrentFolderNode = NewFolderNode(); - if (!CurrentFolderNode) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - switch (CodecId) { - case CAB_CODEC_RAW: - CurrentFolderNode->Folder.CompressionType = CAB_COMP_NONE; - break; - - case CAB_CODEC_MSZIP: - CurrentFolderNode->Folder.CompressionType = CAB_COMP_MSZIP; - break; - - default: - return CAB_STATUS_UNSUPPCOMP; - } - - /* FIXME: This won't work if no files are added to the new folder */ - - DiskSize += sizeof(CFFOLDER); - - TotalFolderSize += sizeof(CFFOLDER); - - NextFolderNumber++; - - CABHeader.FolderCount++; - - LastBlockStart = 0; - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::WriteFileToScratchStorage(PCFFILE_NODE FileNode) -/* - * FUNCTION: Writes a file to the scratch file - * ARGUMENTS: - * FileNode = Pointer to file node - * RETURNS: - * Status of operation - */ -{ - ULONG BytesToRead; - ULONG BytesRead; - ULONG Status; - ULONG Size; - - if (!ContinueFile) - { - /* Try to open file */ -#if defined(WIN32) - SourceFile = CreateFile( - FileNode->FileName, // Open this file - GENERIC_READ, // Open for reading - FILE_SHARE_READ, // Share for reading - NULL, // No security - OPEN_EXISTING, // File must exist - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (SourceFile == INVALID_HANDLE_VALUE) - { - DPRINT(MID_TRACE, ("File not found (%s).\n", FileNode->FileName)); - return CAB_STATUS_NOFILE; - } -#else /* !WIN32 */ - SourceFile = fopen(FileNode->FileName, "rb"); - if (SourceFile == NULL) - { - DPRINT(MID_TRACE, ("Cannot open cabinet reserved file.\n")); - return CAB_STATUS_NOFILE; - } -#endif - - if (CreateNewFolder) - { - /* There is always a new folder after - a split file is completely stored */ - Status = NewFolder(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - CreateNewFolder = false; - } - - /* Call OnAdd event handler */ - OnAdd(&FileNode->File, FileNode->FileName); - - TotalBytesLeft = FileNode->File.FileSize; - - FileNode->File.FileOffset = CurrentFolderNode->UncompOffset; - CurrentFolderNode->UncompOffset += TotalBytesLeft; - FileNode->File.FileControlID = (USHORT)(NextFolderNumber - 1); - CurrentFolderNode->Commit = true; - PrevCabinetNumber = CurrentDiskNumber; - - Size = sizeof(CFFILE) + (ULONG)strlen(GetFileName(FileNode->FileName)) + 1; - CABHeader.FileTableOffset += Size; - TotalFileSize += Size; - DiskSize += Size; - } - - FileNode->Commit = true; - - if (TotalBytesLeft > 0) - { - do - { - if (TotalBytesLeft > (ULONG)CAB_BLOCKSIZE - CurrentIBufferSize) - BytesToRead = CAB_BLOCKSIZE - CurrentIBufferSize; - else - BytesToRead = TotalBytesLeft; - - if (!ReadFileData(SourceFile, CurrentIBuffer, BytesToRead, &BytesRead) || (BytesToRead != BytesRead)) - { - DPRINT(MIN_TRACE, ("Cannot read from file. BytesToRead (%u) BytesRead (%u) CurrentIBufferSize (%u).\n", - (UINT)BytesToRead, (UINT)BytesRead, (UINT)CurrentIBufferSize)); - return CAB_STATUS_INVALID_CAB; - } - - CurrentIBuffer = (unsigned char*)CurrentIBuffer + BytesRead; - CurrentIBufferSize += (USHORT)BytesRead; - - if (CurrentIBufferSize == CAB_BLOCKSIZE) - { - Status = WriteDataBlock(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - } - TotalBytesLeft -= BytesRead; - } while ((TotalBytesLeft > 0) && (!CreateNewDisk)); - } - - if (TotalBytesLeft == 0) - { - CloseFile(SourceFile); - FileNode->Delete = true; - - if (FileNode->File.FileControlID > CAB_FILE_MAX_FOLDER) - { - FileNode->File.FileControlID = CAB_FILE_CONTINUED; - CurrentFolderNode->Delete = true; - - if ((CurrentIBufferSize > 0) || (CurrentOBufferSize > 0)) - { - Status = WriteDataBlock(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - } - - CreateNewFolder = true; - } - } - else - { - if (FileNode->File.FileControlID <= CAB_FILE_MAX_FOLDER) - FileNode->File.FileControlID = CAB_FILE_SPLIT; - else - FileNode->File.FileControlID = CAB_FILE_PREV_NEXT; - } - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::WriteDisk(ULONG MoreDisks) -/* - * FUNCTION: Forces the current disk to be written - * ARGUMENTS: - * MoreDisks = true if there is one or more disks after this disk - * RETURNS: - * Status of operation - */ -{ - PCFFILE_NODE FileNode; - ULONG Status; - - ContinueFile = false; - FileNode = FileListHead; - while (FileNode != NULL) - { - Status = WriteFileToScratchStorage(FileNode); - if (Status != CAB_STATUS_SUCCESS) - return Status; - - if (CreateNewDisk) - { - /* A data block could span more than two - disks if MaxDiskSize is very small */ - while (CreateNewDisk) - { - DPRINT(MAX_TRACE, ("Creating new disk.\n")); - CommitDisk(true); - CloseDisk(); - NewDisk(); - - ContinueFile = true; - CreateNewDisk = false; - - DPRINT(MAX_TRACE, ("First on new disk. CurrentIBufferSize (%u) CurrentOBufferSize (%u).\n", - (UINT)CurrentIBufferSize, (UINT)CurrentOBufferSize)); - - if ((CurrentIBufferSize > 0) || (CurrentOBufferSize > 0)) - { - Status = WriteDataBlock(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - } - } - } - else - { - ContinueFile = false; - FileNode = FileNode->Next; - } - } - - if ((CurrentIBufferSize > 0) || (CurrentOBufferSize > 0)) - { - /* A data block could span more than two - disks if MaxDiskSize is very small */ - - ASSERT(CreateNewDisk == false); - - do - { - if (CreateNewDisk) - { - DPRINT(MID_TRACE, ("Creating new disk 2.\n")); - CommitDisk(true); - CloseDisk(); - NewDisk(); - CreateNewDisk = false; - - ASSERT(FileNode == FileListHead); - } - - if ((CurrentIBufferSize > 0) || (CurrentOBufferSize > 0)) - { - Status = WriteDataBlock(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - } - } while (CreateNewDisk); - } - CommitDisk(MoreDisks); - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::CommitDisk(ULONG MoreDisks) -/* - * FUNCTION: Commits the current disk - * ARGUMENTS: - * MoreDisks = true if there is one or more disks after this disk - * RETURNS: - * Status of operation - */ -{ - PCFFOLDER_NODE FolderNode; - ULONG Status; - - OnCabinetName(CurrentDiskNumber, CabinetName); - - /* Create file, fail if it already exists */ -#if defined(WIN32) - FileHandle = CreateFile(CabinetName, // Create this file - GENERIC_WRITE, // Open for writing - 0, // No sharing - NULL, // No security - CREATE_NEW, // New file only - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (FileHandle == INVALID_HANDLE_VALUE) - { - ULONG Status; - /* If file exists, ask to overwrite file */ - if (((Status = GetLastError()) == ERROR_FILE_EXISTS) && - (OnOverwrite(NULL, CabinetName))) - { - - /* Create cabinet file, overwrite if it already exists */ - FileHandle = CreateFile(CabinetName, // Create this file - GENERIC_WRITE, // Open for writing - 0, // No sharing - NULL, // No security - TRUNCATE_EXISTING, // Truncate the file - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (FileHandle == INVALID_HANDLE_VALUE) - return CAB_STATUS_CANNOT_CREATE; - } - else - { - if (Status == ERROR_FILE_EXISTS) - return CAB_STATUS_FILE_EXISTS; - else - return CAB_STATUS_CANNOT_CREATE; - } - } -#else /* !WIN32 */ - FileHandle = fopen(CabinetName, "rb"); - if (FileHandle != NULL) - { - fclose(FileHandle); - /* If file exists, ask to overwrite file */ - if (OnOverwrite(NULL, CabinetName)) - { - FileHandle = fopen(CabinetName, "w+b"); - if (FileHandle == NULL) - return CAB_STATUS_CANNOT_CREATE; - } - else - return CAB_STATUS_FILE_EXISTS; - - } - else - { - FileHandle = fopen(CabinetName, "w+b"); - if (FileHandle == NULL) - return CAB_STATUS_CANNOT_CREATE; - } -#endif - - WriteCabinetHeader(MoreDisks != 0); - - Status = WriteFolderEntries(); - if (Status != CAB_STATUS_SUCCESS) - return Status; - - /* Write file entries */ - WriteFileEntries(); - - /* Write data blocks */ - FolderNode = FolderListHead; - while (FolderNode != NULL) - { - if (FolderNode->Commit) - { - Status = CommitDataBlocks(FolderNode); - if (Status != CAB_STATUS_SUCCESS) - return Status; - /* Remove data blocks for folder */ - DestroyDataNodes(FolderNode); - } - FolderNode = FolderNode->Next; - } - - CloseFile(FileHandle); - - ScratchFile->Truncate(); - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::CloseDisk() -/* - * FUNCTION: Closes the current disk - * RETURNS: - * Status of operation - */ -{ - DestroyDeletedFileNodes(); - - /* Destroy folder nodes that are completely stored */ - DestroyDeletedFolderNodes(); - - CurrentDiskNumber++; - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::CloseCabinet() -/* - * FUNCTION: Closes the current cabinet - * RETURNS: - * Status of operation - */ -{ - ULONG Status; - - DestroyFileNodes(); - - DestroyFolderNodes(); - - if (InputBuffer) - { - FreeMemory(InputBuffer); - InputBuffer = NULL; - } - - if (OutputBuffer) - { - FreeMemory(OutputBuffer); - OutputBuffer = NULL; - } - - Close(); - - if (ScratchFile) - { - Status = ScratchFile->Destroy(); - delete ScratchFile; - return Status; - } - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::AddFile(char* FileName) -/* - * FUNCTION: Adds a file to the current disk - * ARGUMENTS: - * FileName = Pointer to string with file name (full path) - * RETURNS: - * Status of operation - */ -{ - FILEHANDLE SrcFile; - PCFFILE_NODE FileNode; - char* NewFileName; - - NewFileName = (char*)AllocateMemory(strlen(FileName) + 1); - if (!NewFileName) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - strcpy(NewFileName, FileName); - ConvertPath(NewFileName, false); - - /* Try to open file */ -#if defined(WIN32) - SrcFile = CreateFile( - NewFileName, // Open this file - GENERIC_READ, // Open for reading - FILE_SHARE_READ, // Share for reading - NULL, // No security - OPEN_EXISTING, // File must exist - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (SrcFile == INVALID_HANDLE_VALUE) - { - DPRINT(MID_TRACE, ("File not found (%s).\n", NewFileName)); - FreeMemory(NewFileName); - return CAB_STATUS_CANNOT_OPEN; - } -#else /* !WIN32 */ - SrcFile = fopen(NewFileName, "rb"); - if (SrcFile == NULL) - { - DPRINT(MID_TRACE, ("File not found (%s).\n", NewFileName)); - FreeMemory(NewFileName); - return CAB_STATUS_CANNOT_OPEN; - } -#endif - - FileNode = NewFileNode(); - if (!FileNode) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - FreeMemory(NewFileName); - return CAB_STATUS_NOMEMORY; - } - - FileNode->FolderNode = CurrentFolderNode; - FileNode->FileName = NewFileName; - - /* FIXME: Check for and handle large files (>= 2GB) */ - FileNode->File.FileSize = GetSizeOfFile(SrcFile); - if (FileNode->File.FileSize == (ULONG)-1) - { - DPRINT(MIN_TRACE, ("Cannot read from file.\n")); - FreeMemory(NewFileName); - return CAB_STATUS_CANNOT_READ; - } - - GetFileTimes(SrcFile, FileNode); - - GetAttributesOnFile(FileNode); - - CloseFile(SrcFile); - - return CAB_STATUS_SUCCESS; -} - -bool CCabinet::CreateSimpleCabinet() -/* - * FUNCTION: Create a simple cabinet based on the files in the criteria list - */ -{ - bool bRet = false; - char* pszFile; - char szFilePath[MAX_PATH]; - char szFile[MAX_PATH]; - PSEARCH_CRITERIA Criteria; - ULONG Status; - -#if defined(WIN32) - HANDLE hFind; - WIN32_FIND_DATA FindFileData; -#else - DIR* dirp; - struct dirent* dp; - struct stat stbuf; -#endif - - // Initialize a new cabinet - Status = NewCabinet(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot create cabinet (%u).\n", (UINT)Status)); - goto cleanup; - } - - // Add each file in the criteria list - Criteria = CriteriaListHead; - - while(Criteria) - { - // Store the file path with a trailing slash in szFilePath - ConvertPath(Criteria->Search, false); - pszFile = strrchr(Criteria->Search, DIR_SEPARATOR_CHAR); - - if(pszFile) - { - // Set the pointer to the start of the file name, not the slash - pszFile++; - - strncpy(szFilePath, Criteria->Search, pszFile - Criteria->Search); - szFilePath[pszFile - Criteria->Search] = 0; - } - else - { - pszFile = Criteria->Search; - -#if defined(WIN32) - szFilePath[0] = 0; -#else - // needed for opendir() - strcpy(szFilePath, "./"); -#endif - } - -#if defined(WIN32) - // Windows: Use the easy FindFirstFile/FindNextFile API for getting all files and checking them against the pattern - hFind = FindFirstFile(Criteria->Search, &FindFileData); - - // Don't stop if a search criteria is not found - if(hFind == INVALID_HANDLE_VALUE && GetLastError() != ERROR_FILE_NOT_FOUND) - { - DPRINT(MIN_TRACE, ("FindFirstFile failed, Criteria: %s, error code is %u\n", Criteria->Search, (UINT)GetLastError())); - goto cleanup; - } - - do - { - if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - { - strcpy(szFile, szFilePath); - strcat(szFile, FindFileData.cFileName); - - Status = AddFile(szFile); - - if(Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot add file to cabinet (%u).\n", (UINT)Status)); - goto cleanup; - } - } - } - while(FindNextFile(hFind, &FindFileData)); - - FindClose(hFind); -#else - // Unix: Use opendir/readdir to loop through all entries, stat to check if it's a file and MatchFileNamePattern to match the file against the pattern - dirp = opendir(szFilePath); - - if(dirp) - { - while( (dp = readdir(dirp)) ) - { - strcpy(szFile, szFilePath); - strcat(szFile, dp->d_name); - - if(stat(szFile, &stbuf) == 0) - { - if(stbuf.st_mode != S_IFDIR) - { - if(MatchFileNamePattern(dp->d_name, pszFile)) - { - Status = AddFile(szFile); - - if(Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot add file to cabinet (%u).\n", (UINT)Status)); - goto cleanup; - } - } - } - } - else - { - DPRINT(MIN_TRACE, ("stat failed, error code is %i\n", errno)); - goto cleanup; - } - } - - closedir(dirp); - } -#endif - - Criteria = Criteria->Next; - } - - Status = WriteDisk(false); - if (Status == CAB_STATUS_SUCCESS) - Status = CloseDisk(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot write disk (%u).\n", (UINT)Status)); - goto cleanup; - } - - CloseCabinet(); - bRet = true; - -cleanup: - DestroySearchCriteria(); - return bRet; -} - -void CCabinet::SetMaxDiskSize(ULONG Size) -/* - * FUNCTION: Sets the maximum size of the current disk - * ARGUMENTS: - * Size = Maximum size of current disk (0 means no maximum size) - */ -{ - MaxDiskSize = Size; -} - -#endif /* CAB_READ_ONLY */ - - -/* Default event handlers */ - -bool CCabinet::OnOverwrite(PCFFILE File, - char* FileName) -/* - * FUNCTION: Called when extracting a file and it already exists - * ARGUMENTS: - * File = Pointer to CFFILE for file being extracted - * FileName = Pointer to buffer with name of file (full path) - * RETURNS - * true if the file should be overwritten, false if not - */ -{ - return false; -} - - -void CCabinet::OnExtract(PCFFILE File, - char* FileName) -/* - * FUNCTION: Called just before extracting a file - * ARGUMENTS: - * File = Pointer to CFFILE for file being extracted - * FileName = Pointer to buffer with name of file (full path) - */ -{ -} - - -void CCabinet::OnDiskChange(char* CabinetName, - char* DiskLabel) -/* - * FUNCTION: Called when a new disk is to be processed - * ARGUMENTS: - * CabinetName = Pointer to buffer with name of cabinet - * DiskLabel = Pointer to buffer with label of disk - */ -{ -} - - -#ifndef CAB_READ_ONLY - -void CCabinet::OnAdd(PCFFILE File, - char* FileName) -/* - * FUNCTION: Called just before adding a file to a cabinet - * ARGUMENTS: - * File = Pointer to CFFILE for file being added - * FileName = Pointer to buffer with name of file (full path) - */ -{ -} - - -bool CCabinet::OnDiskLabel(ULONG Number, char* Label) -/* - * FUNCTION: Called when a disk needs a label - * ARGUMENTS: - * Number = Cabinet number that needs a label - * Label = Pointer to buffer to place label of disk - * RETURNS: - * true if a disk label was returned, false if not - */ -{ - return false; -} - - -bool CCabinet::OnCabinetName(ULONG Number, char* Name) -/* - * FUNCTION: Called when a cabinet needs a name - * ARGUMENTS: - * Number = Disk number that needs a name - * Name = Pointer to buffer to place name of cabinet - * RETURNS: - * true if a cabinet name was returned, false if not - */ -{ - return false; -} - -#endif /* CAB_READ_ONLY */ - -PCFFOLDER_NODE CCabinet::LocateFolderNode(ULONG Index) -/* - * FUNCTION: Locates a folder node - * ARGUMENTS: - * Index = Folder index - * RETURNS: - * Pointer to folder node or NULL if the folder node was not found - */ -{ - PCFFOLDER_NODE Node; - - switch (Index) - { - case CAB_FILE_SPLIT: - return FolderListTail; - - case CAB_FILE_CONTINUED: - case CAB_FILE_PREV_NEXT: - return FolderListHead; - } - - Node = FolderListHead; - while (Node != NULL) - { - if (Node->Index == Index) - return Node; - Node = Node->Next; - } - return NULL; -} - - -ULONG CCabinet::GetAbsoluteOffset(PCFFILE_NODE File) -/* - * FUNCTION: Returns the absolute offset of a file - * ARGUMENTS: - * File = Pointer to CFFILE_NODE structure for file - * RETURNS: - * Status of operation - */ -{ - PCFDATA_NODE Node; - - DPRINT(MAX_TRACE, ("FileName '%s' FileOffset (0x%X) FileSize (%u).\n", - File->FileName, - (UINT)File->File.FileOffset, - (UINT)File->File.FileSize)); - - Node = CurrentFolderNode->DataListHead; - while (Node != NULL) - { - DPRINT(MAX_TRACE, ("GetAbsoluteOffset(): Comparing (0x%X, 0x%X) (%u).\n", - (UINT)Node->UncompOffset, - (UINT)(Node->UncompOffset + Node->Data.UncompSize), - (UINT)Node->Data.UncompSize)); - - /* Node->Data.UncompSize will be 0 if the block is split - (ie. it is the last block in this cabinet) */ - if ((Node->Data.UncompSize == 0) || - ((File->File.FileOffset >= Node->UncompOffset) && - (File->File.FileOffset < Node->UncompOffset + - Node->Data.UncompSize))) - { - File->DataBlock = Node; - return CAB_STATUS_SUCCESS; - } - - Node = Node->Next; - } - return CAB_STATUS_INVALID_CAB; -} - - -ULONG CCabinet::LocateFile(char* FileName, - PCFFILE_NODE *File) -/* - * FUNCTION: Locates a file in the cabinet - * ARGUMENTS: - * FileName = Pointer to string with name of file to locate - * File = Address of pointer to CFFILE_NODE structure to fill - * RETURNS: - * Status of operation - * NOTES: - * Current folder is set to the folder of the file - */ -{ - PCFFILE_NODE Node; - ULONG Status; - - DPRINT(MAX_TRACE, ("FileName '%s'\n", FileName)); - - Node = FileListHead; - while (Node != NULL) - { - if (strcasecmp(FileName, Node->FileName) == 0) - { - CurrentFolderNode = LocateFolderNode(Node->File.FileControlID); - if (!CurrentFolderNode) - { - DPRINT(MID_TRACE, ("Folder with index number (%u) not found.\n", - Node->File.FileControlID)); - return CAB_STATUS_INVALID_CAB; - } - - if (Node->DataBlock == NULL) - Status = GetAbsoluteOffset(Node); - else - Status = CAB_STATUS_SUCCESS; - - *File = Node; - return Status; - } - Node = Node->Next; - } - return CAB_STATUS_NOFILE; -} - - -ULONG CCabinet::ReadString(char* String, LONG MaxLength) -/* - * FUNCTION: Reads a NULL-terminated string from the cabinet - * ARGUMENTS: - * String = Pointer to buffer to place string - * MaxLength = Maximum length of string - * RETURNS: - * Status of operation - */ -{ - ULONG BytesRead; - ULONG Status; - LONG Size; - bool Found; - - Found = false; - - Status = ReadBlock(String, MaxLength, &BytesRead); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - - // Find the terminating NULL character - for (Size = 0; Size < MaxLength; Size++) - { - if (String[Size] == '\0') - { - Found = true; - break; - } - } - - if (!Found) - { - DPRINT(MIN_TRACE, ("Filename in the cabinet file is too long.\n")); - return CAB_STATUS_INVALID_CAB; - } - - // Compute the offset of the next CFFILE. - // We have to subtract from the current offset here, because we read MaxLength characters above and most-probably the file name isn't MaxLength characters long. - // + 1 to skip the terminating NULL character as well. - Size = -(MaxLength - Size) + 1; - -#if defined(WIN32) - if( SetFilePointer(FileHandle, - (LONG)Size, - NULL, - FILE_CURRENT) == INVALID_SET_FILE_POINTER ) - { - DPRINT(MIN_TRACE, ("SetFilePointer() failed, error code is %u.\n", (UINT)GetLastError())); - return CAB_STATUS_INVALID_CAB; - } -#else - if (fseek(FileHandle, (off_t)Size, SEEK_CUR) != 0) - { - DPRINT(MIN_TRACE, ("fseek() failed.\n")); - return CAB_STATUS_INVALID_CAB; - } -#endif - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::ReadFileTable() -/* - * FUNCTION: Reads the file table from the cabinet file - * RETURNS: - * Status of operation - */ -{ - ULONG i; - ULONG Status; - ULONG BytesRead; - PCFFILE_NODE File; - - DPRINT(MAX_TRACE, ("Reading file table at absolute offset (0x%X).\n", - (UINT)CABHeader.FileTableOffset)); - - /* Seek to file table */ -#if defined(WIN32) - if( SetFilePointer(FileHandle, - CABHeader.FileTableOffset, - NULL, - FILE_BEGIN) == INVALID_SET_FILE_POINTER ) - { - DPRINT(MIN_TRACE, ("SetFilePointer() failed, error code is %u.\n", (UINT)GetLastError())); - return CAB_STATUS_INVALID_CAB; - } -#else - if (fseek(FileHandle, (off_t)CABHeader.FileTableOffset, SEEK_SET) != 0) - { - DPRINT(MIN_TRACE, ("fseek() failed.\n")); - return CAB_STATUS_INVALID_CAB; - } -#endif - - for (i = 0; i < CABHeader.FileCount; i++) - { - File = NewFileNode(); - if (!File) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - if ((Status = ReadBlock(&File->File, sizeof(CFFILE), - &BytesRead)) != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - - File->FileName = (char*)AllocateMemory(MAX_PATH); - if (!File->FileName) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - /* Read file name */ - Status = ReadString(File->FileName, MAX_PATH); - if (Status != CAB_STATUS_SUCCESS) - return Status; - - DPRINT(MAX_TRACE, ("Found file '%s' at uncompressed offset (0x%X). Size (%u bytes) ControlId (0x%X).\n", - File->FileName, - (UINT)File->File.FileOffset, - (UINT)File->File.FileSize, - File->File.FileControlID)); - - } - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::ReadDataBlocks(PCFFOLDER_NODE FolderNode) -/* - * FUNCTION: Reads all CFDATA blocks for a folder from the cabinet file - * ARGUMENTS: - * FolderNode = Pointer to CFFOLDER_NODE structure for folder - * RETURNS: - * Status of operation - */ -{ - ULONG AbsoluteOffset; - ULONG UncompOffset; - PCFDATA_NODE Node; - ULONG BytesRead; - ULONG Status; - ULONG i; - - DPRINT(MAX_TRACE, ("Reading data blocks for folder (%u) at absolute offset (0x%X).\n", - (UINT)FolderNode->Index, (UINT)FolderNode->Folder.DataOffset)); - - AbsoluteOffset = FolderNode->Folder.DataOffset; - UncompOffset = FolderNode->UncompOffset; - - for (i = 0; i < FolderNode->Folder.DataBlockCount; i++) - { - Node = NewDataNode(FolderNode); - if (!Node) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - /* Seek to data block */ -#if defined(WIN32) - if( SetFilePointer(FileHandle, - AbsoluteOffset, - NULL, - FILE_BEGIN) == INVALID_SET_FILE_POINTER ) - { - DPRINT(MIN_TRACE, ("SetFilePointer() failed, error code is %u.\n", (UINT)GetLastError())); - return CAB_STATUS_INVALID_CAB; - } -#else - if (fseek(FileHandle, (off_t)AbsoluteOffset, SEEK_SET) != 0) - { - DPRINT(MIN_TRACE, ("fseek() failed.\n")); - return CAB_STATUS_INVALID_CAB; - } -#endif - - if ((Status = ReadBlock(&Node->Data, sizeof(CFDATA), - &BytesRead)) != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot read from file (%u).\n", (UINT)Status)); - return CAB_STATUS_INVALID_CAB; - } - - DPRINT(MAX_TRACE, ("AbsOffset (0x%X) UncompOffset (0x%X) Checksum (0x%X) CompSize (%u) UncompSize (%u).\n", - (UINT)AbsoluteOffset, - (UINT)UncompOffset, - (UINT)Node->Data.Checksum, - Node->Data.CompSize, - Node->Data.UncompSize)); - - Node->AbsoluteOffset = AbsoluteOffset; - Node->UncompOffset = UncompOffset; - - AbsoluteOffset += sizeof(CFDATA) + Node->Data.CompSize; - UncompOffset += Node->Data.UncompSize; - } - - FolderUncompSize = UncompOffset; - - return CAB_STATUS_SUCCESS; -} - - -PCFFOLDER_NODE CCabinet::NewFolderNode() -/* - * FUNCTION: Creates a new folder node - * RETURNS: - * Pointer to node if there was enough free memory available, otherwise NULL - */ -{ - PCFFOLDER_NODE Node; - - Node = (PCFFOLDER_NODE)AllocateMemory(sizeof(CFFOLDER_NODE)); - if (!Node) - return NULL; - - memset(Node, 0, sizeof(CFFOLDER_NODE)); - - Node->Folder.CompressionType = CAB_COMP_NONE; - - Node->Prev = FolderListTail; - - if (FolderListTail != NULL) - FolderListTail->Next = Node; - else - FolderListHead = Node; - - FolderListTail = Node; - - return Node; -} - - -PCFFILE_NODE CCabinet::NewFileNode() -/* - * FUNCTION: Creates a new file node - * ARGUMENTS: - * FolderNode = Pointer to folder node to bind file to - * RETURNS: - * Pointer to node if there was enough free memory available, otherwise NULL - */ -{ - PCFFILE_NODE Node; - - Node = (PCFFILE_NODE)AllocateMemory(sizeof(CFFILE_NODE)); - if (!Node) - return NULL; - - memset(Node, 0, sizeof(CFFILE_NODE)); - - Node->Prev = FileListTail; - - if (FileListTail != NULL) - FileListTail->Next = Node; - else - FileListHead = Node; - - FileListTail = Node; - - return Node; -} - - -PCFDATA_NODE CCabinet::NewDataNode(PCFFOLDER_NODE FolderNode) -/* - * FUNCTION: Creates a new data block node - * ARGUMENTS: - * FolderNode = Pointer to folder node to bind data block to - * RETURNS: - * Pointer to node if there was enough free memory available, otherwise NULL - */ -{ - PCFDATA_NODE Node; - - Node = (PCFDATA_NODE)AllocateMemory(sizeof(CFDATA_NODE)); - if (!Node) - return NULL; - - memset(Node, 0, sizeof(CFDATA_NODE)); - - Node->Prev = FolderNode->DataListTail; - - if (FolderNode->DataListTail != NULL) - FolderNode->DataListTail->Next = Node; - else - FolderNode->DataListHead = Node; - - FolderNode->DataListTail = Node; - - return Node; -} - - -void CCabinet::DestroyDataNodes(PCFFOLDER_NODE FolderNode) -/* - * FUNCTION: Destroys data block nodes bound to a folder node - * ARGUMENTS: - * FolderNode = Pointer to folder node - */ -{ - PCFDATA_NODE PrevNode; - PCFDATA_NODE NextNode; - - NextNode = FolderNode->DataListHead; - while (NextNode != NULL) - { - PrevNode = NextNode->Next; - FreeMemory(NextNode); - NextNode = PrevNode; - } - FolderNode->DataListHead = NULL; - FolderNode->DataListTail = NULL; -} - - -void CCabinet::DestroyFileNodes() -/* - * FUNCTION: Destroys file nodes - */ -{ - PCFFILE_NODE PrevNode; - PCFFILE_NODE NextNode; - - NextNode = FileListHead; - while (NextNode != NULL) - { - PrevNode = NextNode->Next; - if (NextNode->FileName) - FreeMemory(NextNode->FileName); - FreeMemory(NextNode); - NextNode = PrevNode; - } - FileListHead = NULL; - FileListTail = NULL; -} - - -void CCabinet::DestroyDeletedFileNodes() -/* - * FUNCTION: Destroys file nodes that are marked for deletion - */ -{ - PCFFILE_NODE CurNode; - PCFFILE_NODE NextNode; - - CurNode = FileListHead; - while (CurNode != NULL) - { - NextNode = CurNode->Next; - - if (CurNode->Delete) - { - if (CurNode->Prev != NULL) - CurNode->Prev->Next = CurNode->Next; - else - { - FileListHead = CurNode->Next; - if (FileListHead) - FileListHead->Prev = NULL; - } - - if (CurNode->Next != NULL) - CurNode->Next->Prev = CurNode->Prev; - else - { - FileListTail = CurNode->Prev; - if (FileListTail) - FileListTail->Next = NULL; - } - - DPRINT(MAX_TRACE, ("Deleting file: '%s'\n", CurNode->FileName)); - - TotalFileSize -= (sizeof(CFFILE) + (ULONG)strlen(GetFileName(CurNode->FileName)) + 1); - - if (CurNode->FileName) - FreeMemory(CurNode->FileName); - FreeMemory(CurNode); - } - CurNode = NextNode; - } -} - - -void CCabinet::DestroyFolderNodes() -/* - * FUNCTION: Destroys folder nodes - */ -{ - PCFFOLDER_NODE PrevNode; - PCFFOLDER_NODE NextNode; - - NextNode = FolderListHead; - while (NextNode != NULL) - { - PrevNode = NextNode->Next; - DestroyDataNodes(NextNode); - FreeMemory(NextNode); - NextNode = PrevNode; - } - FolderListHead = NULL; - FolderListTail = NULL; -} - - -void CCabinet::DestroyDeletedFolderNodes() -/* - * FUNCTION: Destroys folder nodes that are marked for deletion - */ -{ - PCFFOLDER_NODE CurNode; - PCFFOLDER_NODE NextNode; - - CurNode = FolderListHead; - while (CurNode != NULL) - { - NextNode = CurNode->Next; - - if (CurNode->Delete) - { - if (CurNode->Prev != NULL) - CurNode->Prev->Next = CurNode->Next; - else - { - FolderListHead = CurNode->Next; - if (FolderListHead) - FolderListHead->Prev = NULL; - } - - if (CurNode->Next != NULL) - CurNode->Next->Prev = CurNode->Prev; - else - { - FolderListTail = CurNode->Prev; - if (FolderListTail) - FolderListTail->Next = NULL; - } - - DestroyDataNodes(CurNode); - FreeMemory(CurNode); - - TotalFolderSize -= sizeof(CFFOLDER); - } - CurNode = NextNode; - } -} - - -ULONG CCabinet::ComputeChecksum(void* Buffer, - ULONG Size, - ULONG Seed) -/* - * FUNCTION: Computes checksum for data block - * ARGUMENTS: - * Buffer = Pointer to data buffer - * Size = Length of data buffer - * Seed = Previously computed checksum - * RETURNS: - * Checksum of buffer - */ -{ - int UlongCount; // Number of ULONGs in block - ULONG Checksum; // Checksum accumulator - unsigned char* pb; - ULONG ul; - - /* FIXME: Doesn't seem to be correct. EXTRACT.EXE - won't accept checksums computed by this routine */ - - DPRINT(MIN_TRACE, ("Checksumming buffer (0x%p) Size (%u)\n", Buffer, (UINT)Size)); - - UlongCount = Size / 4; // Number of ULONGs - Checksum = Seed; // Init checksum - pb = (unsigned char*)Buffer; // Start at front of data block - - /* Checksum integral multiple of ULONGs */ - while (UlongCount-- > 0) - { - /* NOTE: Build ULONG in big/little-endian independent manner */ - ul = *pb++; // Get low-order byte - ul |= (((ULONG)(*pb++)) << 8); // Add 2nd byte - ul |= (((ULONG)(*pb++)) << 16); // Add 3nd byte - ul |= (((ULONG)(*pb++)) << 24); // Add 4th byte - - Checksum ^= ul; // Update checksum - } - - /* Checksum remainder bytes */ - ul = 0; - switch (Size % 4) - { - case 3: - ul |= (((ULONG)(*pb++)) << 16); // Add 3rd byte - case 2: - ul |= (((ULONG)(*pb++)) << 8); // Add 2nd byte - case 1: - ul |= *pb++; // Get low-order byte - default: - break; - } - Checksum ^= ul; // Update checksum - - /* Return computed checksum */ - return Checksum; -} - - -ULONG CCabinet::ReadBlock(void* Buffer, - ULONG Size, - PULONG BytesRead) -/* - * FUNCTION: Read a block of data from file - * ARGUMENTS: - * Buffer = Pointer to data buffer - * Size = Length of data buffer - * BytesRead = Pointer to ULONG that on return will contain - * number of bytes read - * RETURNS: - * Status of operation - */ -{ - if (!ReadFileData(FileHandle, Buffer, Size, BytesRead)) - return CAB_STATUS_INVALID_CAB; - return CAB_STATUS_SUCCESS; -} - -bool CCabinet::MatchFileNamePattern(char* FileName, char* Pattern) -/* - * FUNCTION: Matches a wildcard character pattern against a file - * ARGUMENTS: - * FileName = The file name to check - * Pattern = The pattern - * RETURNS: - * Whether the pattern matches the file - * - * COPYRIGHT: - * This function is based on Busybox code, Copyright (C) 1998 by Erik Andersen, released under GPL2 or any later version. - * Adapted from code written by Ingo Wilken. - * Original location: http://www.busybox.net/cgi-bin/viewcvs.cgi/trunk/busybox/utility.c?rev=5&view=markup - */ -{ - char* retryPattern = NULL; - char* retryFileName = NULL; - char ch; - - while (*FileName || *Pattern) - { - ch = *Pattern++; - - switch (ch) - { - case '*': - retryPattern = Pattern; - retryFileName = FileName; - break; - - case '?': - if (*FileName++ == '\0') - return false; - - break; - - default: - if (*FileName == ch) - { - if (*FileName) - FileName++; - break; - } - - if (*FileName) - { - Pattern = retryPattern; - FileName = ++retryFileName; - break; - } - - return false; - } - - if (!Pattern) - return false; - } - - return true; -} - -#ifndef CAB_READ_ONLY - -ULONG CCabinet::InitCabinetHeader() -/* - * FUNCTION: Initializes cabinet header and optional fields - * RETURNS: - * Status of operation - */ -{ - ULONG TotalSize; - ULONG Size; - - CABHeader.FileTableOffset = 0; // Not known yet - CABHeader.FolderCount = 0; // Not known yet - CABHeader.FileCount = 0; // Not known yet - CABHeader.Flags = 0; // Not known yet - - CABHeader.CabinetNumber = (USHORT)CurrentDiskNumber; - - if ((CurrentDiskNumber > 0) && (OnCabinetName(PrevCabinetNumber, CabinetPrev))) - { - CABHeader.Flags |= CAB_FLAG_HASPREV; - if (!OnDiskLabel(PrevCabinetNumber, DiskPrev)) - strcpy(CabinetPrev, ""); - } - - if (OnCabinetName(CurrentDiskNumber + 1, CabinetNext)) - { - CABHeader.Flags |= CAB_FLAG_HASNEXT; - if (!OnDiskLabel(CurrentDiskNumber + 1, DiskNext)) - strcpy(DiskNext, ""); - } - - TotalSize = 0; - - if ((CABHeader.Flags & CAB_FLAG_HASPREV) > 0) - { - - DPRINT(MAX_TRACE, ("CabinetPrev '%s'.\n", CabinetPrev)); - - /* Calculate size of name of previous cabinet */ - TotalSize += (ULONG)strlen(CabinetPrev) + 1; - - /* Calculate size of label of previous disk */ - TotalSize += (ULONG)strlen(DiskPrev) + 1; - } - - if ((CABHeader.Flags & CAB_FLAG_HASNEXT) > 0) - { - - DPRINT(MAX_TRACE, ("CabinetNext '%s'.\n", CabinetNext)); - - /* Calculate size of name of next cabinet */ - Size = (ULONG)strlen(CabinetNext) + 1; - TotalSize += Size; - NextFieldsSize = Size; - - /* Calculate size of label of next disk */ - Size = (ULONG)strlen(DiskNext) + 1; - TotalSize += Size; - NextFieldsSize += Size; - } - else - NextFieldsSize = 0; - - /* Add cabinet reserved area size if present */ - if (CabinetReservedFileSize > 0) - { - CABHeader.Flags |= CAB_FLAG_RESERVE; - TotalSize += CabinetReservedFileSize; - TotalSize += sizeof(ULONG); /* For CabinetResSize, FolderResSize, and FileResSize fields */ - } - - DiskSize += TotalSize; - - TotalHeaderSize = sizeof(CFHEADER) + TotalSize; - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::WriteCabinetHeader(bool MoreDisks) -/* - * FUNCTION: Writes the cabinet header and optional fields - * ARGUMENTS: - * MoreDisks = true if next cabinet name should be included - * RETURNS: - * Status of operation - */ -{ - PCFFOLDER_NODE FolderNode; - PCFFILE_NODE FileNode; - ULONG BytesWritten; - ULONG Size; - - if (MoreDisks) - { - CABHeader.Flags |= CAB_FLAG_HASNEXT; - Size = TotalHeaderSize; - } - else - { - CABHeader.Flags &= ~CAB_FLAG_HASNEXT; - DiskSize -= NextFieldsSize; - Size = TotalHeaderSize - NextFieldsSize; - } - - /* Set absolute folder offsets */ - BytesWritten = Size + TotalFolderSize + TotalFileSize; - CABHeader.FolderCount = 0; - FolderNode = FolderListHead; - while (FolderNode != NULL) - { - FolderNode->Folder.DataOffset = BytesWritten; - - BytesWritten += FolderNode->TotalFolderSize; - - CABHeader.FolderCount++; - - FolderNode = FolderNode->Next; - } - - /* Set absolute offset of file table */ - CABHeader.FileTableOffset = Size + TotalFolderSize; - - /* Count number of files to be committed */ - CABHeader.FileCount = 0; - FileNode = FileListHead; - while (FileNode != NULL) - { - if (FileNode->Commit) - CABHeader.FileCount++; - FileNode = FileNode->Next; - } - - CABHeader.CabinetSize = DiskSize; - - /* Write header */ -#if defined(WIN32) - if (!WriteFile(FileHandle, &CABHeader, sizeof(CFHEADER), (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = sizeof(CFHEADER); - if (fwrite(&CABHeader, sizeof(CFHEADER), 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - - /* Write per-cabinet reserved area if present */ - if (CABHeader.Flags & CAB_FLAG_RESERVE) - { - ULONG ReservedSize; - - ReservedSize = CabinetReservedFileSize & 0xffff; - ReservedSize |= (0 << 16); /* Folder reserved area size */ - ReservedSize |= (0 << 24); /* Folder reserved area size */ -#if defined(WIN32) - if (!WriteFile(FileHandle, &ReservedSize, sizeof(ULONG), (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = sizeof(ULONG); - if (fwrite(&ReservedSize, sizeof(ULONG), 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - -#if defined(WIN32) - if (!WriteFile(FileHandle, CabinetReservedFileBuffer, CabinetReservedFileSize, (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = CabinetReservedFileSize; - if (fwrite(CabinetReservedFileBuffer, CabinetReservedFileSize, 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - } - - if ((CABHeader.Flags & CAB_FLAG_HASPREV) > 0) - { - DPRINT(MAX_TRACE, ("CabinetPrev '%s'.\n", CabinetPrev)); - - /* Write name of previous cabinet */ - Size = (ULONG)strlen(CabinetPrev) + 1; -#if defined(WIN32) - if (!WriteFile(FileHandle, CabinetPrev, Size, (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = Size; - if (fwrite(CabinetPrev, Size, 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - - DPRINT(MAX_TRACE, ("DiskPrev '%s'.\n", DiskPrev)); - - /* Write label of previous disk */ - Size = (ULONG)strlen(DiskPrev) + 1; -#if defined(WIN32) - if (!WriteFile(FileHandle, DiskPrev, Size, (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = Size; - if (fwrite(DiskPrev, Size, 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - } - - if ((CABHeader.Flags & CAB_FLAG_HASNEXT) > 0) - { - DPRINT(MAX_TRACE, ("CabinetNext '%s'.\n", CabinetNext)); - - /* Write name of next cabinet */ - Size = (ULONG)strlen(CabinetNext) + 1; -#if defined(WIN32) - if (!WriteFile(FileHandle, CabinetNext, Size, (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = Size; - if (fwrite(CabinetNext, Size, 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - - DPRINT(MAX_TRACE, ("DiskNext '%s'.\n", DiskNext)); - - /* Write label of next disk */ - Size = (ULONG)strlen(DiskNext) + 1; -#if defined(WIN32) - if (!WriteFile(FileHandle, DiskNext, Size, (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = Size; - if (fwrite(DiskNext, Size, 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - } - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::WriteFolderEntries() -/* - * FUNCTION: Writes folder entries - * RETURNS: - * Status of operation - */ -{ - PCFFOLDER_NODE FolderNode; - ULONG BytesWritten; - - DPRINT(MAX_TRACE, ("Writing folder table.\n")); - - FolderNode = FolderListHead; - while (FolderNode != NULL) - { - if (FolderNode->Commit) - { - DPRINT(MAX_TRACE, ("Writing folder entry. CompressionType (0x%X) DataBlockCount (%d) DataOffset (0x%X).\n", - FolderNode->Folder.CompressionType, FolderNode->Folder.DataBlockCount, (UINT)FolderNode->Folder.DataOffset)); - -#if defined(WIN32) - if (!WriteFile(FileHandle, - &FolderNode->Folder, - sizeof(CFFOLDER), - (LPDWORD)&BytesWritten, - NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = sizeof(CFFOLDER); - if (fwrite(&FolderNode->Folder, sizeof(CFFOLDER), 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - } - FolderNode = FolderNode->Next; - } - - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::WriteFileEntries() -/* - * FUNCTION: Writes file entries for all files - * RETURNS: - * Status of operation - */ -{ - PCFFILE_NODE File; - ULONG BytesWritten; - bool SetCont = false; - - DPRINT(MAX_TRACE, ("Writing file table.\n")); - - File = FileListHead; - while (File != NULL) - { - if (File->Commit) - { - /* Remove any continued files that ends in this disk */ - if (File->File.FileControlID == CAB_FILE_CONTINUED) - File->Delete = true; - - /* The file could end in the last (split) block and should therefore - appear in the next disk too */ - - if ((File->File.FileOffset + File->File.FileSize >= LastBlockStart) && - (File->File.FileControlID <= CAB_FILE_MAX_FOLDER) && (BlockIsSplit)) - { - File->File.FileControlID = CAB_FILE_SPLIT; - File->Delete = false; - SetCont = true; - } - - DPRINT(MAX_TRACE, ("Writing file entry. FileControlID (0x%X) FileOffset (0x%X) FileSize (%u) FileName (%s).\n", - File->File.FileControlID, (UINT)File->File.FileOffset, (UINT)File->File.FileSize, File->FileName)); - -#if defined(WIN32) - if (!WriteFile(FileHandle, - &File->File, - sizeof(CFFILE), - (LPDWORD)&BytesWritten, - NULL)) - return CAB_STATUS_CANNOT_WRITE; -#else - BytesWritten = sizeof(CFFILE); - if (fwrite(&File->File, sizeof(CFFILE), 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - -#if defined(WIN32) - if (!WriteFile(FileHandle, - GetFileName(File->FileName), - (DWORD)strlen(GetFileName(File->FileName)) + 1, - (LPDWORD)&BytesWritten, - NULL)) - return CAB_STATUS_CANNOT_WRITE; -#else - BytesWritten = strlen(GetFileName(File->FileName)) + 1; - if (fwrite(GetFileName(File->FileName), strlen(GetFileName(File->FileName)) + 1, 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - - if (SetCont) - { - File->File.FileControlID = CAB_FILE_CONTINUED; - SetCont = false; - } - } - - File = File->Next; - } - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::CommitDataBlocks(PCFFOLDER_NODE FolderNode) -/* - * FUNCTION: Writes data blocks to the cabinet - * ARGUMENTS: - * FolderNode = Pointer to folder node containing the data blocks - * RETURNS: - * Status of operation - */ -{ - PCFDATA_NODE DataNode; - ULONG BytesWritten; - ULONG BytesRead; - ULONG Status; - - DataNode = FolderNode->DataListHead; - if (DataNode != NULL) - Status = ScratchFile->Seek(DataNode->ScratchFilePosition); - - while (DataNode != NULL) - { - DPRINT(MAX_TRACE, ("Reading block at (0x%X) CompSize (%u) UncompSize (%u).\n", - (UINT)DataNode->ScratchFilePosition, - DataNode->Data.CompSize, - DataNode->Data.UncompSize)); - - /* InputBuffer is free for us to use here, so we use it and avoid a - memory allocation. OutputBuffer can't be used here because it may - still contain valid data (if a data block spans two or more disks) */ - Status = ScratchFile->ReadBlock(&DataNode->Data, InputBuffer, &BytesRead); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot read from scratch file (%u).\n", (UINT)Status)); - return Status; - } - -#if defined(WIN32) - if (!WriteFile(FileHandle, &DataNode->Data, - sizeof(CFDATA), (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = sizeof(CFDATA); - if (fwrite(&DataNode->Data, sizeof(CFDATA), 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - -#if defined(WIN32) - if (!WriteFile(FileHandle, InputBuffer, - DataNode->Data.CompSize, (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#else - BytesWritten = DataNode->Data.CompSize; - if (fwrite(InputBuffer, DataNode->Data.CompSize, 1, FileHandle) < 1) - { - DPRINT(MIN_TRACE, ("Cannot write to file.\n")); - return CAB_STATUS_CANNOT_WRITE; - } -#endif - - DataNode = DataNode->Next; - } - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::WriteDataBlock() -/* - * FUNCTION: Writes the current data block to the scratch file - * RETURNS: - * Status of operation - */ -{ - ULONG Status; - ULONG BytesWritten; - PCFDATA_NODE DataNode; - - if (!BlockIsSplit) - { - Status = Codec->Compress(OutputBuffer, - InputBuffer, - CurrentIBufferSize, - &TotalCompSize); - - DPRINT(MAX_TRACE, ("Block compressed. CurrentIBufferSize (%u) TotalCompSize(%u).\n", - (UINT)CurrentIBufferSize, (UINT)TotalCompSize)); - - CurrentOBuffer = OutputBuffer; - CurrentOBufferSize = TotalCompSize; - } - - DataNode = NewDataNode(CurrentFolderNode); - if (!DataNode) - { - DPRINT(MIN_TRACE, ("Insufficient memory.\n")); - return CAB_STATUS_NOMEMORY; - } - - DiskSize += sizeof(CFDATA); - - if (MaxDiskSize > 0) - /* Disk size is limited */ - BlockIsSplit = (DiskSize + CurrentOBufferSize > MaxDiskSize); - else - BlockIsSplit = false; - - if (BlockIsSplit) - { - DataNode->Data.CompSize = (USHORT)(MaxDiskSize - DiskSize); - DataNode->Data.UncompSize = 0; - CreateNewDisk = true; - } - else - { - DataNode->Data.CompSize = (USHORT)CurrentOBufferSize; - DataNode->Data.UncompSize = (USHORT)CurrentIBufferSize; - } - - DataNode->Data.Checksum = 0; - DataNode->ScratchFilePosition = ScratchFile->Position(); - - // FIXME: MAKECAB.EXE does not like this checksum algorithm - //DataNode->Data.Checksum = ComputeChecksum(CurrentOBuffer, DataNode->Data.CompSize, 0); - - DPRINT(MAX_TRACE, ("Writing block. Checksum (0x%X) CompSize (%u) UncompSize (%u).\n", - (UINT)DataNode->Data.Checksum, - DataNode->Data.CompSize, - DataNode->Data.UncompSize)); - - Status = ScratchFile->WriteBlock(&DataNode->Data, - CurrentOBuffer, &BytesWritten); - if (Status != CAB_STATUS_SUCCESS) - return Status; - - DiskSize += BytesWritten; - - CurrentFolderNode->TotalFolderSize += (BytesWritten + sizeof(CFDATA)); - CurrentFolderNode->Folder.DataBlockCount++; - - CurrentOBuffer = (unsigned char*)CurrentOBuffer + DataNode->Data.CompSize; - CurrentOBufferSize -= DataNode->Data.CompSize; - - LastBlockStart += DataNode->Data.UncompSize; - - if (!BlockIsSplit) - { - CurrentIBufferSize = 0; - CurrentIBuffer = InputBuffer; - } - - return CAB_STATUS_SUCCESS; -} - -#if !defined(WIN32) - -void CCabinet::ConvertDateAndTime(time_t* Time, - PUSHORT DosDate, - PUSHORT DosTime) -/* - * FUNCTION: Returns file times of a file - * ARGUMENTS: - * FileHandle = File handle of file to get file times from - * File = Pointer to CFFILE node for file - * RETURNS: - * Status of operation - */ -{ - struct tm *timedef; - - timedef = localtime(Time); - - DPRINT(MAX_TRACE, ("day: %d, mon: %d, year:%d, hour: %d, min: %d, sec: %d\n", - timedef->tm_mday, timedef->tm_mon, timedef->tm_year, - timedef->tm_sec, timedef->tm_min, timedef->tm_hour)); - - *DosDate = ((timedef->tm_mday + 1) << 0) - | ((timedef->tm_mon + 1) << 5) - | (((timedef->tm_year + 1900) - 1980) << 9); - - *DosTime = (timedef->tm_sec << 0) - | (timedef->tm_min << 5) - | (timedef->tm_hour << 11); -} - -#endif // !WIN32 - - -ULONG CCabinet::GetFileTimes(FILEHANDLE FileHandle, PCFFILE_NODE File) -/* - * FUNCTION: Returns file times of a file - * ARGUMENTS: - * FileHandle = File handle of file to get file times from - * File = Pointer to CFFILE node for file - * RETURNS: - * Status of operation - */ -{ -#if defined(WIN32) - FILETIME FileTime; - - if (GetFileTime(FileHandle, NULL, NULL, &FileTime)) - FileTimeToDosDateTime(&FileTime, - &File->File.FileDate, - &File->File.FileTime); -#else - struct stat stbuf; - char buf[MAX_PATH]; - - // Check for an absolute path - if (IsSeparator(File->FileName[0])) - strcpy(buf, File->FileName); - else - { - getcwd(buf, sizeof(buf)); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, File->FileName); - } - - if (stat(buf, &stbuf) == -1) - return CAB_STATUS_CANNOT_READ; - - ConvertDateAndTime(&stbuf.st_mtime, &File->File.FileDate, &File->File.FileTime); -#endif - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::GetAttributesOnFile(PCFFILE_NODE File) -/* - * FUNCTION: Returns attributes on a file - * ARGUMENTS: - * File = Pointer to CFFILE node for file - * RETURNS: - * Status of operation - */ -{ -#if defined(WIN32) - LONG Attributes; - - Attributes = GetFileAttributes(File->FileName); - if (Attributes == -1) - return CAB_STATUS_CANNOT_READ; - - // 0x37 = READONLY | HIDDEN | SYSTEM | DIRECTORY | ARCHIVE - // The IDs for these attributes are the same in the CAB file and under Windows - // If the file has any other attributes, strip them off by the logical AND. - File->File.Attributes = (USHORT)(Attributes & 0x37); -#else - struct stat stbuf; - char buf[MAX_PATH]; - - // Check for an absolute path - if (IsSeparator(File->FileName[0])) - strcpy(buf, File->FileName); - else - { - getcwd(buf, sizeof(buf)); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, File->FileName); - } - - if (stat(buf, &stbuf) == -1) - return CAB_STATUS_CANNOT_READ; - -#if 0 - File->File.Attributes |= CAB_ATTRIB_READONLY; - File->File.Attributes |= CAB_ATTRIB_HIDDEN; - File->File.Attributes |= CAB_ATTRIB_SYSTEM; -#endif - - if (stbuf.st_mode & S_IFDIR) - File->File.Attributes |= CAB_ATTRIB_DIRECTORY; - - File->File.Attributes |= CAB_ATTRIB_ARCHIVE; - -#endif - return CAB_STATUS_SUCCESS; -} - - -ULONG CCabinet::SetAttributesOnFile(char* FileName, USHORT FileAttributes) -/* - * FUNCTION: Sets attributes on a file - * ARGUMENTS: - * FileName = File name with path - * FileAttributes = Attributes of that file - * RETURNS: - * Status of operation - */ -{ -#if defined(WIN32) - // 0x37 = READONLY | HIDDEN | SYSTEM | DIRECTORY | ARCHIVE - // The IDs for these attributes are the same in the CAB file and under Windows - // If the file has any other attributes, strip them off by the logical AND. - SetFileAttributes(FileName, (DWORD)(FileAttributes & 0x37)); - - return CAB_STATUS_SUCCESS; -#else - //DPRINT(MIN_TRACE, ("FIXME: SetAttributesOnFile() is unimplemented\n")); - return CAB_STATUS_SUCCESS; -#endif -} - -#endif /* CAB_READ_ONLY */ - -/* EOF */ diff --git a/reactos/tools/cabman/cabinet.h b/reactos/tools/cabman/cabinet.h deleted file mode 100755 index 69b7dcc4617..00000000000 --- a/reactos/tools/cabman/cabinet.h +++ /dev/null @@ -1,503 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/cabinet.h - * PURPOSE: Cabinet definitions - */ -#ifndef __CABINET_H -#define __CABINET_H - -#if defined(WIN32) -#include -#else -#include -#include -#include -#include -#include -#include -#ifndef MAX_PATH -#define MAX_PATH 260 -#endif -#endif - -#include -#include -#include - -#if defined(WIN32) -#define DIR_SEPARATOR_CHAR '\\' -#define DIR_SEPARATOR_STRING "\\" - -#define strcasecmp _strcmpi -#define strdup _strdup - -#define AllocateMemory(size) HeapAlloc(GetProcessHeap(), 0, size) -#define FreeMemory(buffer) HeapFree(GetProcessHeap(), 0, buffer) -#define FILEHANDLE HANDLE -#define CloseFile(handle) CloseHandle(handle) -#else -#define DIR_SEPARATOR_CHAR '/' -#define DIR_SEPARATOR_STRING "/" - -#define AllocateMemory(size) malloc(size) -#define FreeMemory(buffer) free(buffer) -#define CloseFile(handle) fclose(handle) -#define FILEHANDLE FILE* -#endif - -/* Debugging */ - -#define DBG - -#define NORMAL_MASK 0x000000FF -#define SPECIAL_MASK 0xFFFFFF00 -#define MIN_TRACE 0x00000001 -#define MID_TRACE 0x00000002 -#define MAX_TRACE 0x00000003 - -#define DEBUG_MEMORY 0x00000100 - -#ifdef DBG - -extern ULONG DebugTraceLevel; - -#undef DPRINT -#define DPRINT(_t_, _x_) \ - if (((DebugTraceLevel & NORMAL_MASK) >= _t_) || \ - ((DebugTraceLevel & _t_) > NORMAL_MASK)) { \ - printf("(%s:%d)(%s) ", __FILE__, __LINE__, __FUNCTION__); \ - printf _x_ ; \ - } - -#undef ASSERT -#define ASSERT(_b_) { \ - if (!(_b_)) { \ - printf("(%s:%d)(%s) ASSERTION: ", __FILE__, __LINE__, __FUNCTION__); \ - printf(#_b_); \ - exit(0); \ - } \ -} - -#else /* DBG */ - -#undef DPRINT -#define DPRINT(_t_, _x_) - -#undef ASSERT -#define ASSERT(_x_) - -#endif /* DBG */ - - -/* Cabinet constants */ - -#define CAB_SIGNATURE 0x4643534D // "MSCF" -#define CAB_VERSION 0x0103 -#define CAB_BLOCKSIZE 32768 - -#define CAB_COMP_MASK 0x00FF -#define CAB_COMP_NONE 0x0000 -#define CAB_COMP_MSZIP 0x0001 -#define CAB_COMP_QUANTUM 0x0002 -#define CAB_COMP_LZX 0x0003 - -#define CAB_FLAG_HASPREV 0x0001 -#define CAB_FLAG_HASNEXT 0x0002 -#define CAB_FLAG_RESERVE 0x0004 - -#define CAB_ATTRIB_READONLY 0x0001 -#define CAB_ATTRIB_HIDDEN 0x0002 -#define CAB_ATTRIB_SYSTEM 0x0004 -#define CAB_ATTRIB_VOLUME 0x0008 -#define CAB_ATTRIB_DIRECTORY 0x0010 -#define CAB_ATTRIB_ARCHIVE 0x0020 -#define CAB_ATTRIB_EXECUTE 0x0040 -#define CAB_ATTRIB_UTF_NAME 0x0080 - -#define CAB_FILE_MAX_FOLDER 0xFFFC -#define CAB_FILE_CONTINUED 0xFFFD -#define CAB_FILE_SPLIT 0xFFFE -#define CAB_FILE_PREV_NEXT 0xFFFF - - -/* Cabinet structures */ - -typedef struct _CFHEADER -{ - ULONG Signature; // File signature 'MSCF' (CAB_SIGNATURE) - ULONG Reserved1; // Reserved field - ULONG CabinetSize; // Cabinet file size - ULONG Reserved2; // Reserved field - ULONG FileTableOffset; // Offset of first CFFILE - ULONG Reserved3; // Reserved field - USHORT Version; // Cabinet version (CAB_VERSION) - USHORT FolderCount; // Number of folders - USHORT FileCount; // Number of files - USHORT Flags; // Cabinet flags (CAB_FLAG_*) - USHORT SetID; // Cabinet set id - USHORT CabinetNumber; // Zero-based cabinet number -/* Optional fields (depends on Flags) - USHORT CabinetResSize // Per-cabinet reserved area size - char FolderResSize // Per-folder reserved area size - char FileResSize // Per-file reserved area size - char CabinetReserved[] // Per-cabinet reserved area - char CabinetPrev[] // Name of previous cabinet file - char DiskPrev[] // Name of previous disk - char CabinetNext[] // Name of next cabinet file - char DiskNext[] // Name of next disk - */ -} CFHEADER, *PCFHEADER; - - -typedef struct _CFFOLDER -{ - ULONG DataOffset; // Absolute offset of first CFDATA block in this folder - USHORT DataBlockCount; // Number of CFDATA blocks in this folder in this cabinet - USHORT CompressionType; // Type of compression used for all CFDATA blocks in this folder -/* Optional fields (depends on Flags) - char FolderReserved[] // Per-folder reserved area - */ -} CFFOLDER, *PCFFOLDER; - - -typedef struct _CFFILE -{ - ULONG FileSize; // Uncompressed file size in bytes - ULONG FileOffset; // Uncompressed offset of file in the folder - USHORT FileControlID; // File control ID (CAB_FILE_*) - USHORT FileDate; // File date stamp, as used by DOS - USHORT FileTime; // File time stamp, as used by DOS - USHORT Attributes; // File attributes (CAB_ATTRIB_*) - /* After this is the NULL terminated filename */ -} CFFILE, *PCFFILE; - - -typedef struct _CFDATA -{ - ULONG Checksum; // Checksum of CFDATA entry - USHORT CompSize; // Number of compressed bytes in this block - USHORT UncompSize; // Number of uncompressed bytes in this block -/* Optional fields (depends on Flags) - char DataReserved[] // Per-datablock reserved area - */ -} CFDATA, *PCFDATA; - -typedef struct _CFDATA_NODE -{ - struct _CFDATA_NODE *Next; - struct _CFDATA_NODE *Prev; - ULONG ScratchFilePosition; // Absolute offset in scratch file - ULONG AbsoluteOffset; // Absolute offset in cabinet - ULONG UncompOffset; // Uncompressed offset in folder - CFDATA Data; -} CFDATA_NODE, *PCFDATA_NODE; - -typedef struct _CFFOLDER_NODE -{ - struct _CFFOLDER_NODE *Next; - struct _CFFOLDER_NODE *Prev; - ULONG UncompOffset; // File size accumulator - ULONG AbsoluteOffset; - ULONG TotalFolderSize; // Total size of folder in current disk - PCFDATA_NODE DataListHead; - PCFDATA_NODE DataListTail; - ULONG Index; - bool Commit; // true if the folder should be committed - bool Delete; // true if marked for deletion - CFFOLDER Folder; -} CFFOLDER_NODE, *PCFFOLDER_NODE; - -typedef struct _CFFILE_NODE -{ - struct _CFFILE_NODE *Next; - struct _CFFILE_NODE *Prev; - CFFILE File; - char* FileName; - PCFDATA_NODE DataBlock; // First data block of file. NULL if not known - bool Commit; // true if the file data should be committed - bool Delete; // true if marked for deletion - PCFFOLDER_NODE FolderNode; // Folder this file belong to -} CFFILE_NODE, *PCFFILE_NODE; - -typedef struct _SEARCH_CRITERIA -{ - struct _SEARCH_CRITERIA *Next; // Pointer to next search criteria - struct _SEARCH_CRITERIA *Prev; // Pointer to previous search criteria - char* Search; // The actual search criteria -} SEARCH_CRITERIA, *PSEARCH_CRITERIA; - -typedef struct _CAB_SEARCH -{ - PCFFILE_NODE Next; // Pointer to next node - PCFFILE File; // Pointer to current CFFILE - char* FileName; // Current filename -} CAB_SEARCH, *PCAB_SEARCH; - - -/* Constants */ - -/* Status codes */ -#define CAB_STATUS_SUCCESS 0x00000000 -#define CAB_STATUS_FAILURE 0x00000001 -#define CAB_STATUS_NOMEMORY 0x00000002 -#define CAB_STATUS_CANNOT_OPEN 0x00000003 -#define CAB_STATUS_CANNOT_CREATE 0x00000004 -#define CAB_STATUS_CANNOT_READ 0x00000005 -#define CAB_STATUS_CANNOT_WRITE 0x00000006 -#define CAB_STATUS_FILE_EXISTS 0x00000007 -#define CAB_STATUS_INVALID_CAB 0x00000008 -#define CAB_STATUS_NOFILE 0x00000009 -#define CAB_STATUS_UNSUPPCOMP 0x0000000A - - - -/* Codecs */ - -class CCABCodec { -public: - /* Default constructor */ - CCABCodec() {}; - /* Default destructor */ - virtual ~CCABCodec() {}; - /* Compresses a data block */ - virtual ULONG Compress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength) = 0; - /* Uncompresses a data block */ - virtual ULONG Uncompress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength) = 0; -}; - - -/* Codec status codes */ -#define CS_SUCCESS 0x0000 /* All data consumed */ -#define CS_NOMEMORY 0x0001 /* Not enough free memory */ -#define CS_BADSTREAM 0x0002 /* Bad data stream */ - - -/* Codec indentifiers */ -#define CAB_CODEC_RAW 0x00 -#define CAB_CODEC_LZX 0x01 -#define CAB_CODEC_MSZIP 0x02 - - - -/* Classes */ - -#ifndef CAB_READ_ONLY - -class CCFDATAStorage { -public: - /* Default constructor */ - CCFDATAStorage(); - /* Default destructor */ - virtual ~CCFDATAStorage(); - ULONG Create(const char* FileName); - ULONG Destroy(); - ULONG Truncate(); - ULONG Position(); - ULONG Seek(LONG Position); - ULONG ReadBlock(PCFDATA Data, void* Buffer, PULONG BytesRead); - ULONG WriteBlock(PCFDATA Data, void* Buffer, PULONG BytesWritten); -private: - char FullName[MAX_PATH]; - bool FileCreated; - FILEHANDLE FileHandle; -}; - -#endif /* CAB_READ_ONLY */ - -class CCabinet { -public: - /* Default constructor */ - CCabinet(); - /* Default destructor */ - virtual ~CCabinet(); - /* Determines if a character is a separator */ - bool IsSeparator(char Char); - /* Replaces \ or / with the one used be the host environment */ - char* ConvertPath(char* Path, bool Allocate); - /* Returns a pointer to the filename part of a fully qualified filename */ - char* GetFileName(char* Path); - /* Removes a filename from a fully qualified filename */ - void RemoveFileName(char* Path); - /* Normalizes a path */ - bool NormalizePath(char* Path, ULONG Length); - /* Returns name of cabinet file */ - char* GetCabinetName(); - /* Sets the name of the cabinet file */ - void SetCabinetName(char* FileName); - /* Sets destination path for extracted files */ - void SetDestinationPath(char* DestinationPath); - /* Sets cabinet reserved file */ - bool SetCabinetReservedFile(char* FileName); - /* Returns cabinet reserved file */ - char* GetCabinetReservedFile(); - /* Returns destination path */ - char* GetDestinationPath(); - /* Returns zero-based current disk number */ - ULONG GetCurrentDiskNumber(); - /* Opens the current cabinet file */ - ULONG Open(); - /* Closes the current open cabinet file */ - void Close(); - /* Locates the first file in the current cabinet file that matches a search criteria */ - ULONG FindFirst(PCAB_SEARCH Search); - /* Locates the next file in the current cabinet file */ - ULONG FindNext(PCAB_SEARCH Search); - /* Extracts a file from the current cabinet file */ - ULONG ExtractFile(char* FileName); - /* Select codec engine to use */ - void SelectCodec(LONG Id); - /* Returns whether a codec engine is selected */ - bool IsCodecSelected(); - /* Adds a search criteria for adding files to a simple cabinet, displaying files in a cabinet or extracting them */ - ULONG AddSearchCriteria(char* SearchCriteria); - /* Destroys the search criteria list */ - void DestroySearchCriteria(); - /* Returns whether we have search criteria */ - bool HasSearchCriteria(); - -#ifndef CAB_READ_ONLY - /* Creates a simple cabinet based on the search criteria data */ - bool CreateSimpleCabinet(); - /* Sets the codec to use for compression (based on a string value) */ - bool SetCompressionCodec(char* CodecName); - /* Creates a new cabinet file */ - ULONG NewCabinet(); - /* Forces a new disk to be created */ - ULONG NewDisk(); - /* Forces a new folder to be created */ - ULONG NewFolder(); - /* Writes a file to scratch storage */ - ULONG WriteFileToScratchStorage(PCFFILE_NODE FileNode); - /* Forces the current disk to be written */ - ULONG WriteDisk(ULONG MoreDisks); - /* Commits the current disk */ - ULONG CommitDisk(ULONG MoreDisks); - /* Closes the current disk */ - ULONG CloseDisk(); - /* Closes the current cabinet */ - ULONG CloseCabinet(); - /* Adds a file to the current disk */ - ULONG AddFile(char* FileName); - /* Sets the maximum size of the current disk */ - void SetMaxDiskSize(ULONG Size); -#endif /* CAB_READ_ONLY */ - - /* Default event handlers */ - - /* Handler called when a file is about to be overridden */ - virtual bool OnOverwrite(PCFFILE Entry, char* FileName); - /* Handler called when a file is about to be extracted */ - virtual void OnExtract(PCFFILE Entry, char* FileName); - /* Handler called when a new disk is to be processed */ - virtual void OnDiskChange(char* CabinetName, char* DiskLabel); -#ifndef CAB_READ_ONLY - /* Handler called when a file is about to be added */ - virtual void OnAdd(PCFFILE Entry, char* FileName); - /* Handler called when a cabinet need a name */ - virtual bool OnCabinetName(ULONG Number, char* Name); - /* Handler called when a disk needs a label */ - virtual bool OnDiskLabel(ULONG Number, char* Label); -#endif /* CAB_READ_ONLY */ -private: - PCFFOLDER_NODE LocateFolderNode(ULONG Index); - ULONG GetAbsoluteOffset(PCFFILE_NODE File); - ULONG LocateFile(char* FileName, PCFFILE_NODE *File); - ULONG ReadString(char* String, LONG MaxLength); - ULONG ReadFileTable(); - ULONG ReadDataBlocks(PCFFOLDER_NODE FolderNode); - PCFFOLDER_NODE NewFolderNode(); - PCFFILE_NODE NewFileNode(); - PCFDATA_NODE NewDataNode(PCFFOLDER_NODE FolderNode); - void DestroyDataNodes(PCFFOLDER_NODE FolderNode); - void DestroyFileNodes(); - void DestroyDeletedFileNodes(); - void DestroyFolderNodes(); - void DestroyDeletedFolderNodes(); - ULONG ComputeChecksum(void* Buffer, ULONG Size, ULONG Seed); - ULONG ReadBlock(void* Buffer, ULONG Size, PULONG BytesRead); - bool MatchFileNamePattern(char* FileName, char* Pattern); -#ifndef CAB_READ_ONLY - ULONG InitCabinetHeader(); - ULONG WriteCabinetHeader(bool MoreDisks); - ULONG WriteFolderEntries(); - ULONG WriteFileEntries(); - ULONG CommitDataBlocks(PCFFOLDER_NODE FolderNode); - ULONG WriteDataBlock(); - ULONG GetAttributesOnFile(PCFFILE_NODE File); - ULONG SetAttributesOnFile(char* FileName, USHORT FileAttributes); - ULONG GetFileTimes(FILEHANDLE FileHandle, PCFFILE_NODE File); -#if !defined(WIN32) - void ConvertDateAndTime(time_t* Time, PUSHORT DosDate, PUSHORT DosTime); -#endif -#endif /* CAB_READ_ONLY */ - ULONG CurrentDiskNumber; // Zero based disk number - char CabinetName[256]; // Filename of current cabinet - char CabinetPrev[256]; // Filename of previous cabinet - char DiskPrev[256]; // Label of cabinet in file CabinetPrev - char CabinetNext[256]; // Filename of next cabinet - char DiskNext[256]; // Label of cabinet in file CabinetNext - ULONG TotalHeaderSize; // Size of header and optional fields - ULONG NextFieldsSize; // Size of next cabinet name and next disk label - ULONG TotalFolderSize; // Size of all folder entries - ULONG TotalFileSize; // Size of all file entries - ULONG FolderUncompSize; // Uncompressed size of folder - ULONG BytesLeftInBlock; // Number of bytes left in current block - bool ReuseBlock; - char DestPath[MAX_PATH]; - char CabinetReservedFile[MAX_PATH]; - void* CabinetReservedFileBuffer; - ULONG CabinetReservedFileSize; - FILEHANDLE FileHandle; - bool FileOpen; - CFHEADER CABHeader; - ULONG CabinetReserved; - ULONG FolderReserved; - ULONG DataReserved; - PCFFOLDER_NODE FolderListHead; - PCFFOLDER_NODE FolderListTail; - PCFFOLDER_NODE CurrentFolderNode; - PCFDATA_NODE CurrentDataNode; - PCFFILE_NODE FileListHead; - PCFFILE_NODE FileListTail; - PSEARCH_CRITERIA CriteriaListHead; - PSEARCH_CRITERIA CriteriaListTail; - CCABCodec *Codec; - LONG CodecId; - bool CodecSelected; - void* InputBuffer; - void* CurrentIBuffer; // Current offset in input buffer - ULONG CurrentIBufferSize; // Bytes left in input buffer - void* OutputBuffer; - ULONG TotalCompSize; // Total size of current CFDATA block - void* CurrentOBuffer; // Current offset in output buffer - ULONG CurrentOBufferSize; // Bytes left in output buffer - ULONG BytesLeftInCabinet; - bool RestartSearch; - ULONG LastFileOffset; // Uncompressed offset of last extracted file -#ifndef CAB_READ_ONLY - ULONG LastBlockStart; // Uncompressed offset of last block in folder - ULONG MaxDiskSize; - ULONG DiskSize; - ULONG PrevCabinetNumber; // Previous cabinet number (where split file starts) - bool CreateNewDisk; - bool CreateNewFolder; - - CCFDATAStorage *ScratchFile; - FILEHANDLE SourceFile; - bool ContinueFile; - ULONG TotalBytesLeft; - bool BlockIsSplit; // true if current data block is split - ULONG NextFolderNumber; // Zero based folder number -#endif /* CAB_READ_ONLY */ -}; - -#endif /* __CABINET_H */ - -/* EOF */ diff --git a/reactos/tools/cabman/cabman.h b/reactos/tools/cabman/cabman.h deleted file mode 100755 index ed7be30a8bb..00000000000 --- a/reactos/tools/cabman/cabman.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/cabman.h - * PURPOSE: Cabinet manager header - */ -#ifndef __CABMAN_H -#define __CABMAN_H - -#include "cabinet.h" -#include "dfp.h" - -/* Cabinet manager modes */ -#define CM_MODE_CREATE 0 -#define CM_MODE_DISPLAY 1 -#define CM_MODE_EXTRACT 2 -#define CM_MODE_CREATE_SIMPLE 3 - -/* Classes */ - -class CCABManager : public CDFParser { -public: - CCABManager(); - virtual ~CCABManager(); - bool ParseCmdline(int argc, char* argv[]); - bool Run(); -private: - void Usage(); - bool CreateCabinet(); - bool DisplayCabinet(); - bool ExtractFromCabinet(); - /* Event handlers */ - virtual bool OnOverwrite(PCFFILE File, char* FileName); - virtual void OnExtract(PCFFILE File, char* FileName); - virtual void OnDiskChange(char* CabinetName, char* DiskLabel); - virtual void OnAdd(PCFFILE Entry, char* FileName); - /* Configuration */ - bool ProcessAll; - ULONG Mode; - bool PromptOnOverwrite; - char FileName[MAX_PATH]; -}; - -#endif /* __CABMAN_H */ - -/* EOF */ diff --git a/reactos/tools/cabman/cabman.rbuild b/reactos/tools/cabman/cabman.rbuild deleted file mode 100644 index 79f34335d0f..00000000000 --- a/reactos/tools/cabman/cabman.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - - - include - . - zlibhost - cabinet.cxx - dfp.cxx - main.cxx - mszip.cxx - raw.cxx - diff --git a/reactos/tools/cabman/dff.txt b/reactos/tools/cabman/dff.txt deleted file mode 100755 index a400e0a652e..00000000000 --- a/reactos/tools/cabman/dff.txt +++ /dev/null @@ -1,55 +0,0 @@ -Directive File Format for ReactOS Cabinet Manager -------------------------------------------------- - -Directives begin with a period ("."), and are followed by a command -name, and possibly blank delimited arguments. Commands and variable names are -case insensitive. - -Syntax Description -------------------------------------------------------------------------------- -; Anything on a line after this is a comment - [destination] [options] File copy command (options: optional) -.Define variable=[value] Define variable to be equal to value (*) -.Delete variable Delete a variable definition (*) -.New Disk|Cabinet|Folder Start a new disk, cabinet or folder (* -- new disk will work) -.Set variable=[value] Set variable to be equal to value (*) -%variable% Substitute value of variable (*) - Blank lines are ignored -------------------------------------------------------------------------------- - - -Standard variable Description -------------------------------------------------------------------------------- -Cabinet=ON|OFF Turns cabinet mode on or off (* -- currently always on) -CabinetFileCountThreshold=count Threshold count of files per cabinet (*) -CabinetNamen=filename Cabinet file name for cabinet number n -CabinetNameTemplate=template Cabinet file name template - * is replaced by cabinet number -Compress=ON|OFF Turns compression on or off (* -- currently always on) -CompressionType=NONE|MSZIP Compression engine to use (* -- currently always mszip) -DiskLabeln=label Printed disk label name for disk n -DiskLabelTemplate=template Printed disk label name template - * is replaced by disk number -FolderFileCountThreshold=count Threshold count of files per folder (*) -FolderSizeThreshold=size Threshold folder size for current folder (*) -MaxDiskFileCount=count Maximum count of files per disk (*) -MaxDiskSize[n]=size Maximum disk size (for disk n) -ReservePerCabinetSize=size Amount of space to reserve in each cabinet (*) -ReservePerDataBlockSize=size Amount of space to reserve in each data block (*) -ReservePerFolderSize=size Amount of space to reserve in each folder (*) -SourceDir=path Default path for source files (*) -------------------------------------------------------------------------------- -(*) = not implemented - - -MaxDiskSize ------------ -0 means disk size is unlimited. Standard sizes available are: - - 2.88M - 1.44M - 1.25M - 1.2M - 720K - 360K - CDROM diff --git a/reactos/tools/cabman/dfp.cxx b/reactos/tools/cabman/dfp.cxx deleted file mode 100755 index c40756d3284..00000000000 --- a/reactos/tools/cabman/dfp.cxx +++ /dev/null @@ -1,1395 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/dfp.cpp - * PURPOSE: Directive file parser - * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) - * Colin Finck - * NOTES: The directive file format is similar to the - * directive file format used by Microsoft's MAKECAB - * REVISIONS: - * CSH 21/03-2001 Created - * CSH 15/08-2003 Made it portable - * CF 04/05-2007 Made it compatible with 64-bit operating systems - */ -#include -#include -#include "cabinet.h" -#include "dfp.h" - - -#if defined(WIN32) -#define GetSizeOfFile(handle) _GetSizeOfFile(handle) -static LONG _GetSizeOfFile(FILEHANDLE handle) -{ - ULONG size = GetFileSize(handle, NULL); - if (size == INVALID_FILE_SIZE) - return -1; - - return size; -} -#define ReadFileData(handle, buffer, size, bytesread) _ReadFileData(handle, buffer, size, bytesread) -static BOOL _ReadFileData(FILEHANDLE handle, void* buffer, ULONG size, PULONG bytesread) -{ - return ReadFile(handle, buffer, size, (LPDWORD)bytesread, NULL); -} -#else -#define GetSizeOfFile(handle) _GetSizeOfFile(handle) -static LONG _GetSizeOfFile(FILEHANDLE handle) -{ - LONG size; - fseek(handle, 0, SEEK_END); - size = ftell(handle); - fseek(handle, 0, SEEK_SET); - return size; -} -#define ReadFileData(handle, buffer, size, bytesread) _ReadFileData(handle, buffer, size, bytesread) -static bool _ReadFileData(FILEHANDLE handle, void* buffer, ULONG size, PULONG bytesread) -{ - *bytesread = fread(buffer, 1, size, handle); - return *bytesread == size; -} -#endif - -/* CDFParser */ - -CDFParser::CDFParser() -/* - * FUNCTION: Default constructor - */ -{ - InfFileOnly = false; - DontGenerateInf = false; - - FileBuffer = NULL; - FileLoaded = false; - CurrentOffset = 0; - CurrentLine = 0; - CabinetCreated = false; - DiskCreated = false; - FolderCreated = false; - CabinetName = NULL; - DiskLabel = NULL; - MaxDiskSize = NULL; - - MaxDiskSizeAllSet = false; - CabinetNameTemplateSet = false; - DiskLabelTemplateSet = false; - InfFileNameSet = false; - - InfModeEnabled = false; - InfFileHandle = NULL; - - strcpy(FileRelativePath, ""); -} - -CDFParser::~CDFParser() -/* - * FUNCTION: Default destructor - */ -{ - PCABINET_NAME CNPrev; - PCABINET_NAME CNNext; - PDISK_NUMBER DNPrev; - PDISK_NUMBER DNNext; - - if (FileBuffer) - FreeMemory(FileBuffer); - CNNext = CabinetName; - while (CNNext != NULL) - { - CNPrev = CNNext->Next; - FreeMemory(CNNext); - CNNext = CNPrev; - } - CNNext = DiskLabel; - while (CNNext != NULL) - { - CNPrev = CNNext->Next; - FreeMemory(CNNext); - CNNext = CNPrev; - } - DNNext = MaxDiskSize; - while (DNNext != NULL) - { - DNPrev = DNNext->Next; - FreeMemory(DNNext); - DNNext = DNPrev; - } - - if (InfFileHandle != NULL) - CloseFile(InfFileHandle); -} - -void CDFParser::WriteInfLine(char* InfLine) -{ - char buf[MAX_PATH]; - char eolbuf[2]; - char* destpath; -#if defined(WIN32) - ULONG BytesWritten; -#endif - - if (DontGenerateInf) - return; - - if (InfFileHandle == NULL) - { - if (!InfFileNameSet) - /* FIXME: Use cabinet name with extension .inf */ - return; - - destpath = GetDestinationPath(); - if (strlen(destpath) > 0) - { - strcpy(buf, destpath); - strcat(buf, InfFileName); - } - else - strcpy(buf, InfFileName); - - /* Create .inf file, overwrite if it already exists */ -#if defined(WIN32) - InfFileHandle = CreateFile(buf, // Create this file - GENERIC_WRITE, // Open for writing - 0, // No sharing - NULL, // No security - CREATE_ALWAYS, // Create or overwrite - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (InfFileHandle == INVALID_HANDLE_VALUE) - { - DPRINT(MID_TRACE, ("Error creating '%u'.\n", (UINT)GetLastError())); - return; - } -#else /* !WIN32 */ - InfFileHandle = fopen(buf, "wb"); - if (InfFileHandle == NULL) - { - DPRINT(MID_TRACE, ("Error creating '%i'.\n", errno)); - return; - } -#endif - } - -#if defined(WIN32) - if (!WriteFile(InfFileHandle, InfLine, (DWORD)strlen(InfLine), (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MID_TRACE, ("ERROR WRITING '%u'.\n", (UINT)GetLastError())); - return; - } -#else - if (fwrite(InfLine, strlen(InfLine), 1, InfFileHandle) < 1) - return; -#endif - - eolbuf[0] = 0x0d; - eolbuf[1] = 0x0a; - -#if defined(WIN32) - if (!WriteFile(InfFileHandle, eolbuf, sizeof(eolbuf), (LPDWORD)&BytesWritten, NULL)) - { - DPRINT(MID_TRACE, ("ERROR WRITING '%u'.\n", (UINT)GetLastError())); - return; - } -#else - if (fwrite(eolbuf, 1, sizeof(eolbuf), InfFileHandle) < 1) - return; -#endif -} - - -ULONG CDFParser::Load(char* FileName) -/* - * FUNCTION: Loads a directive file into memory - * ARGUMENTS: - * FileName = Pointer to name of directive file - * RETURNS: - * Status of operation - */ -{ - ULONG BytesRead; - LONG FileSize; - - if (FileLoaded) - return CAB_STATUS_SUCCESS; - - /* Create cabinet file, overwrite if it already exists */ -#if defined(WIN32) - FileHandle = CreateFile(FileName, // Create this file - GENERIC_READ, // Open for reading - 0, // No sharing - NULL, // No security - OPEN_EXISTING, // Open the file - FILE_ATTRIBUTE_NORMAL, // Normal file - NULL); // No attribute template - if (FileHandle == INVALID_HANDLE_VALUE) - return CAB_STATUS_CANNOT_OPEN; -#else /* !WIN32 */ - FileHandle = fopen(FileName, "rb"); - if (FileHandle == NULL) - return CAB_STATUS_CANNOT_OPEN; -#endif - - FileSize = GetSizeOfFile(FileHandle); - if (FileSize == -1) - { - CloseFile(FileHandle); - return CAB_STATUS_CANNOT_OPEN; - } - - FileBufferSize = (ULONG)FileSize; - - FileBuffer = (char*)AllocateMemory(FileBufferSize); - if (!FileBuffer) - { - CloseFile(FileHandle); - return CAB_STATUS_NOMEMORY; - } - - if (!ReadFileData(FileHandle, FileBuffer, FileBufferSize, &BytesRead)) - { - CloseFile(FileHandle); - FreeMemory(FileBuffer); - FileBuffer = NULL; - return CAB_STATUS_CANNOT_READ; - } - - CloseFile(FileHandle); - - FileLoaded = true; - - DPRINT(MAX_TRACE, ("File (%u bytes)\n", (UINT)FileBufferSize)); - - return CAB_STATUS_SUCCESS; -} - - -ULONG CDFParser::Parse() -/* - * FUNCTION: Parses a loaded directive file - * RETURNS: - * Status of operation - */ -{ - bool Command; - ULONG Status; - - if (!FileLoaded) - return CAB_STATUS_NOFILE; - - while (ReadLine()) - { - Command = false; - - if (InfModeEnabled) - { - bool WriteLine = true; - while (CurrentToken != TokenEnd) - { - switch (CurrentToken) - { - case TokenIdentifier: - if (Command) - { - /* Command */ - Status = PerformCommand(); - if (Status == CAB_STATUS_FAILURE) - WriteLine = true; - else - if (!InfModeEnabled) - WriteLine = false; - - CurrentToken = TokenEnd; - continue; - } - else - { - WriteLine = true; - CurrentToken = TokenEnd; - continue; - } - break; - - case TokenSpace: - break; - - case TokenPeriod: - Command = true; - break; - - default: - WriteLine = true; - CurrentToken = TokenEnd; - continue; - } - NextToken(); - } - if (WriteLine) - WriteInfLine(Line); - } - else - { - while (CurrentToken != TokenEnd) - { - switch (CurrentToken) - { - case TokenInteger: - sprintf(CurrentString, "%u", (UINT)CurrentInteger); - case TokenIdentifier: - case TokenString: - if (Command) - { - /* Command */ - Status = PerformCommand(); - - if (Status == CAB_STATUS_FAILURE) - { - printf("Directive file contains errors at line %u.\n", (UINT)CurrentLine); - DPRINT(MID_TRACE, ("Error while executing command.\n")); - } - - if (Status != CAB_STATUS_SUCCESS) - return Status; - } - else - { - /* File copy */ - Status = PerformFileCopy(); - - if (Status != CAB_STATUS_SUCCESS) - { - printf("Directive file contains errors at line %u.\n", (UINT)CurrentLine); - DPRINT(MID_TRACE, ("Error while copying file.\n")); - } - - if (Status != CAB_STATUS_SUCCESS) - return Status; - } - break; - - case TokenSpace: - break; - - case TokenSemi: - CurrentToken = TokenEnd; - continue; - - case TokenPeriod: - Command = true; - break; - - default: - printf("Directive file contains errors at line %u.\n", (UINT)CurrentLine); - DPRINT(MID_TRACE, ("Token is (%u).\n", (UINT)CurrentToken)); - return CAB_STATUS_SUCCESS; - } - NextToken(); - } - } - } - - if (!InfFileOnly) - { - printf("\nWriting cabinet. This may take a while...\n\n"); - - if (DiskCreated) - { - Status = WriteDisk(false); - if (Status == CAB_STATUS_SUCCESS) - Status = CloseDisk(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot write disk (%u).\n", (UINT)Status)); - return Status; - } - } - - if (CabinetCreated) - { - Status = CloseCabinet(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot close cabinet (%u).\n", (UINT)Status)); - return Status; - } - } - - printf("\nDone.\n"); - } - - return CAB_STATUS_SUCCESS; -} - - -void CDFParser::SetFileRelativePath(char* Path) -/* - * FUNCTION: Sets path where files in the .dff is assumed relative to - * ARGUMENTS: - * Path = Pointer to string with path - */ -{ - strcpy(FileRelativePath, Path); - ConvertPath(FileRelativePath, false); - if (strlen(FileRelativePath) > 0) - NormalizePath(FileRelativePath, MAX_PATH); -} - - -bool CDFParser::OnDiskLabel(ULONG Number, char* Label) -/* - * FUNCTION: Called when a disk needs a label - * ARGUMENTS: - * Number = Cabinet number that needs a label - * Label = Pointer to buffer to place label of disk - * RETURNS: - * true if a disk label was returned, false if not - */ -{ - char Buffer[20]; - ULONG i; - int j; - char ch; - - Number += 1; - - DPRINT(MID_TRACE, ("Giving disk (%u) a label...\n", (UINT)Number)); - - if (GetDiskName(&DiskLabel, Number, Label)) - return true; - - if (DiskLabelTemplateSet) - { - j = 0; - strcpy(Label, ""); - for (i = 0; i < strlen(DiskLabelTemplate); i++) - { - ch = DiskLabelTemplate[i]; - if (ch == '*') - { - sprintf(Buffer, "%u", (UINT)Number); - strcat(Label, Buffer); - j += (LONG)strlen(Buffer); - } - else - { - Label[j] = ch; - j++; - } - Label[j] = '\0'; - } - - DPRINT(MID_TRACE, ("Giving disk (%s) as a label...\n", Label)); - - return true; - } - else - return false; -} - - -bool CDFParser::OnCabinetName(ULONG Number, char* Name) -/* - * FUNCTION: Called when a cabinet needs a name - * ARGUMENTS: - * Number = Disk number that needs a name - * Name = Pointer to buffer to place name of cabinet - * RETURNS: - * true if a cabinet name was returned, false if not - */ -{ - char Buffer[MAX_PATH]; - ULONG i; - int j; - char ch; - - Number += 1; - - DPRINT(MID_TRACE, ("Giving cabinet (%u) a name...\n", (UINT)Number)); - - if (GetDiskName(&CabinetName, Number, Buffer)) - { - strcpy(Name, GetDestinationPath()); - strcat(Name, Buffer); - return true; - } - - if (CabinetNameTemplateSet) - { - strcpy(Name, GetDestinationPath()); - j = (LONG)strlen(Name); - for (i = 0; i < strlen(CabinetNameTemplate); i++) - { - ch = CabinetNameTemplate[i]; - if (ch == '*') - { - sprintf(Buffer, "%u", (UINT)Number); - strcat(Name, Buffer); - j += (LONG)strlen(Buffer); - } - else - { - Name[j] = ch; - j++; - } - Name[j] = '\0'; - } - - DPRINT(MID_TRACE, ("Giving cabinet (%s) as a name...\n", Name)); - return true; - } - else - return false; -} - - -bool CDFParser::SetDiskName(PCABINET_NAME *List, ULONG Number, char* String) -/* - * FUNCTION: Sets an entry in a list - * ARGUMENTS: - * List = Address of pointer to list - * Number = Disk number - * String = Pointer to string - * RETURNS: - * false if there was not enough free memory available - */ -{ - PCABINET_NAME CN; - - CN = *List; - while (CN != NULL) - { - if (CN->DiskNumber == Number) - { - strcpy(CN->Name, String); - return true; - } - CN = CN->Next; - } - - CN = (PCABINET_NAME)AllocateMemory(sizeof(CABINET_NAME)); - if (!CN) - return false; - - CN->DiskNumber = Number; - strcpy(CN->Name, String); - - CN->Next = *List; - *List = CN; - - return true; -} - - -bool CDFParser::GetDiskName(PCABINET_NAME *List, ULONG Number, char* String) -/* - * FUNCTION: Returns an entry in a list - * ARGUMENTS: - * List = Address of pointer to list - * Number = Disk number - * String = Address of buffer to copy string to - * RETURNS: - * false if there was not enough free memory available - */ -{ - PCABINET_NAME CN; - - CN = *List; - while (CN != NULL) - { - if (CN->DiskNumber == Number) - { - strcpy(String, CN->Name); - return true; - } - CN = CN->Next; - } - - return false; -} - - -bool CDFParser::SetDiskNumber(PDISK_NUMBER *List, ULONG Number, ULONG Value) -/* - * FUNCTION: Sets an entry in a list - * ARGUMENTS: - * List = Address of pointer to list - * Number = Disk number - * Value = Value to set - * RETURNS: - * false if there was not enough free memory available - */ -{ - PDISK_NUMBER DN; - - DN = *List; - while (DN != NULL) - { - if (DN->DiskNumber == Number) - { - DN->Number = Value; - return true; - } - DN = DN->Next; - } - - DN = (PDISK_NUMBER)AllocateMemory(sizeof(DISK_NUMBER)); - if (!DN) - return false; - - DN->DiskNumber = Number; - DN->Number = Value; - - DN->Next = *List; - *List = DN; - - return true; -} - - -bool CDFParser::GetDiskNumber(PDISK_NUMBER *List, ULONG Number, PULONG Value) -/* - * FUNCTION: Returns an entry in a list - * ARGUMENTS: - * List = Address of pointer to list - * Number = Disk number - * Value = Address of buffer to place value - * RETURNS: - * true if the entry was found - */ -{ - PDISK_NUMBER DN; - - DN = *List; - while (DN != NULL) - { - if (DN->DiskNumber == Number) - { - *Value = DN->Number; - return true; - } - DN = DN->Next; - } - - return false; -} - - -bool CDFParser::DoDiskLabel(ULONG Number, char* Label) -/* - * FUNCTION: Sets the label of a disk - * ARGUMENTS: - * Number = Disk number - * Label = Pointer to label of disk - * RETURNS: - * false if there was not enough free memory available - */ -{ - DPRINT(MID_TRACE, ("Setting label of disk (%u) to '%s'\n", (UINT)Number, Label)); - - return SetDiskName(&DiskLabel, Number, Label); -} - - -void CDFParser::DoDiskLabelTemplate(char* Template) -/* - * FUNCTION: Sets a disk label template to use - * ARGUMENTS: - * Template = Pointer to disk label template - */ -{ - DPRINT(MID_TRACE, ("Setting disk label template to '%s'\n", Template)); - - strcpy(DiskLabelTemplate, Template); - DiskLabelTemplateSet = true; -} - - -bool CDFParser::DoCabinetName(ULONG Number, char* Name) -/* - * FUNCTION: Sets the name of a cabinet - * ARGUMENTS: - * Number = Disk number - * Name = Pointer to name of cabinet - * RETURNS: - * false if there was not enough free memory available - */ -{ - DPRINT(MID_TRACE, ("Setting name of cabinet (%u) to '%s'\n", (UINT)Number, Name)); - - return SetDiskName(&CabinetName, Number, Name); -} - - -void CDFParser::DoCabinetNameTemplate(char* Template) -/* - * FUNCTION: Sets a cabinet name template to use - * ARGUMENTS: - * Template = Pointer to cabinet name template - */ -{ - DPRINT(MID_TRACE, ("Setting cabinet name template to '%s'\n", Template)); - - strcpy(CabinetNameTemplate, Template); - CabinetNameTemplateSet = true; -} - - -ULONG CDFParser::DoMaxDiskSize(bool NumberValid, ULONG Number) -/* - * FUNCTION: Sets the maximum disk size - * ARGUMENTS: - * NumberValid = true if disk number is valid - * Number = Disk number - * RETURNS: - * Status of operation - * NOTES: - * Standard sizes are 2.88M, 1.44M, 1.25M, 1.2M, 720K, 360K, and CDROM - */ -{ - ULONG A, B, Value; - - if (IsNextToken(TokenInteger, true)) - { - A = CurrentInteger; - - if (IsNextToken(TokenPeriod, false)) - { - if (!IsNextToken(TokenInteger, false)) - return CAB_STATUS_FAILURE; - - B = CurrentInteger; - - } - else - B = 0; - - if (CurrentToken == TokenIdentifier) - { - switch (CurrentString[0]) - { - case 'K': - if (B != 0) - return CAB_STATUS_FAILURE; - - if (A == 720) - /* 720K disk */ - Value = 730112; - else if (A == 360) - /* 360K disk */ - Value = 362496; - else - return CAB_STATUS_FAILURE; - break; - - case 'M': - if (A == 1) - { - if (B == 44) - /* 1.44M disk */ - Value = 1457664; - else if (B == 25) - /* 1.25M disk */ - Value = 1300000; // FIXME: Value? - else if (B == 2) - /* 1.2M disk */ - Value = 1213952; - else - return CAB_STATUS_FAILURE; - } - else if (A == 2) - { - if (B == 88) - /* 2.88M disk */ - Value = 2915328; - else - return CAB_STATUS_FAILURE; - } - else - return CAB_STATUS_FAILURE; - break; - - default: - DPRINT(MID_TRACE, ("Bad suffix (%c)\n", CurrentString[0])); - return CAB_STATUS_FAILURE; - } - } - else - Value = A; - } - else - { - if ((CurrentToken != TokenString) && - (strcasecmp(CurrentString, "CDROM") != 0)) - return CAB_STATUS_FAILURE; - /* CDROM */ - Value = 640*1024*1024; // FIXME: Correct size for CDROM? - } - - if (NumberValid) - return (SetDiskNumber(&MaxDiskSize, Number, Value)? - CAB_STATUS_SUCCESS : CAB_STATUS_FAILURE); - - MaxDiskSizeAll = Value; - MaxDiskSizeAllSet = true; - - SetMaxDiskSize(Value); - - return CAB_STATUS_SUCCESS; -} - - -void CDFParser::DoInfFileName(char* FileName) -/* - * FUNCTION: Sets filename of the generated .inf file - * ARGUMENTS: - * FileName = Pointer to .inf filename - */ -{ - DPRINT(MID_TRACE, ("Setting .inf filename to '%s'\n", FileName)); - - strcpy(InfFileName, FileName); - InfFileNameSet = true; -} - -ULONG CDFParser::SetupNewDisk() -/* - * FUNCTION: Sets up parameters for a new disk - * RETURNS: - * Status of operation - */ -{ - ULONG Value; - - if (!GetDiskNumber(&MaxDiskSize, GetCurrentDiskNumber(), &Value)) - { - if (MaxDiskSizeAllSet) - Value = MaxDiskSizeAll; - else - Value = 0; - } - SetMaxDiskSize(Value); - - return CAB_STATUS_SUCCESS; -} - - -ULONG CDFParser::PerformSetCommand() -/* - * FUNCTION: Performs a set variable command - * RETURNS: - * Status of operation - */ -{ - SETTYPE SetType; - bool NumberValid = false; - ULONG Number = 0; - - if (!IsNextToken(TokenIdentifier, true)) - return CAB_STATUS_FAILURE; - - if (strcasecmp(CurrentString, "DiskLabel") == 0) - SetType = stDiskLabel; - else if (strcasecmp(CurrentString, "DiskLabelTemplate") == 0) - SetType = stDiskLabelTemplate; - else if (strcasecmp(CurrentString, "CabinetName") == 0) - SetType = stCabinetName; - else if (strcasecmp(CurrentString, "CabinetNameTemplate") == 0) - SetType = stCabinetNameTemplate; - else if (strcasecmp(CurrentString, "MaxDiskSize") == 0) - SetType = stMaxDiskSize; - else if (strcasecmp(CurrentString, "InfFileName") == 0) - SetType = stInfFileName; - else - return CAB_STATUS_FAILURE; - - if ((SetType == stDiskLabel) || (SetType == stCabinetName)) - { - if (!IsNextToken(TokenInteger, false)) - return CAB_STATUS_FAILURE; - Number = CurrentInteger; - - if (!IsNextToken(TokenEqual, true)) - return CAB_STATUS_FAILURE; - } - else if (SetType == stMaxDiskSize) - { - if (IsNextToken(TokenInteger, false)) - { - NumberValid = true; - Number = CurrentInteger; - } - else - { - NumberValid = false; - while (CurrentToken == TokenSpace) - NextToken(); - if (CurrentToken != TokenEqual) - return CAB_STATUS_FAILURE; - } - } - else if (!IsNextToken(TokenEqual, true)) - return CAB_STATUS_FAILURE; - - if (SetType != stMaxDiskSize) - { - if (!IsNextToken(TokenString, true)) - return CAB_STATUS_FAILURE; - } - - switch (SetType) - { - case stDiskLabel: - if (!DoDiskLabel(Number, CurrentString)) - DPRINT(MIN_TRACE, ("Not enough available free memory.\n")); - return CAB_STATUS_SUCCESS; - - case stCabinetName: - if (!DoCabinetName(Number, CurrentString)) - DPRINT(MIN_TRACE, ("Not enough available free memory.\n")); - return CAB_STATUS_SUCCESS; - - case stDiskLabelTemplate: - DoDiskLabelTemplate(CurrentString); - return CAB_STATUS_SUCCESS; - - case stCabinetNameTemplate: - DoCabinetNameTemplate(CurrentString); - return CAB_STATUS_SUCCESS; - - case stMaxDiskSize: - return DoMaxDiskSize(NumberValid, Number); - - case stInfFileName: - DoInfFileName(CurrentString); - return CAB_STATUS_SUCCESS; - - default: - return CAB_STATUS_FAILURE; - } -} - - -ULONG CDFParser::PerformNewCommand() -/* - * FUNCTION: Performs a new disk|cabinet|folder command - * RETURNS: - * Status of operation - */ -{ - NEWTYPE NewType; - ULONG Status; - - if (!IsNextToken(TokenIdentifier, true)) - return CAB_STATUS_FAILURE; - - if (strcasecmp(CurrentString, "Disk") == 0) - NewType = ntDisk; - else if (strcasecmp(CurrentString, "Cabinet") == 0) - NewType = ntCabinet; - else if (strcasecmp(CurrentString, "Folder") == 0) - NewType = ntFolder; - else - return CAB_STATUS_FAILURE; - - switch (NewType) - { - case ntDisk: - if (DiskCreated) - { - Status = WriteDisk(true); - if (Status == CAB_STATUS_SUCCESS) - Status = CloseDisk(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot write disk (%u).\n", (UINT)Status)); - return CAB_STATUS_SUCCESS; - } - DiskCreated = false; - } - - Status = NewDisk(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot create disk (%u).\n", (UINT)Status)); - return CAB_STATUS_SUCCESS; - } - DiskCreated = true; - SetupNewDisk(); - return CAB_STATUS_SUCCESS; - - case ntCabinet: - if (DiskCreated) - { - Status = WriteDisk(true); - if (Status == CAB_STATUS_SUCCESS) - Status = CloseDisk(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot write disk (%u).\n", (UINT)Status)); - return CAB_STATUS_SUCCESS; - } - DiskCreated = false; - } - - Status = NewCabinet(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot create cabinet (%u).\n", (UINT)Status)); - return CAB_STATUS_SUCCESS; - } - DiskCreated = true; - SetupNewDisk(); - return CAB_STATUS_SUCCESS; - - case ntFolder: - Status = NewFolder(); - ASSERT(Status == CAB_STATUS_SUCCESS); - return CAB_STATUS_SUCCESS; - - default: - return CAB_STATUS_FAILURE; - } -} - - -ULONG CDFParser::PerformInfBeginCommand() -/* - * FUNCTION: Begins inf mode - * RETURNS: - * Status of operation - */ -{ - InfModeEnabled = true; - return CAB_STATUS_SUCCESS; -} - - -ULONG CDFParser::PerformInfEndCommand() -/* - * FUNCTION: Begins inf mode - * RETURNS: - * Status of operation - */ -{ - InfModeEnabled = false; - return CAB_STATUS_SUCCESS; -} - - -ULONG CDFParser::PerformCommand() -/* - * FUNCTION: Performs a command - * RETURNS: - * Status of operation - */ -{ - if (strcasecmp(CurrentString, "Set") == 0) - return PerformSetCommand(); - if (strcasecmp(CurrentString, "New") == 0) - return PerformNewCommand(); - if (strcasecmp(CurrentString, "InfBegin") == 0) - return PerformInfBeginCommand(); - if (strcasecmp(CurrentString, "InfEnd") == 0) - return PerformInfEndCommand(); - - return CAB_STATUS_FAILURE; -} - - -ULONG CDFParser::PerformFileCopy() -/* - * FUNCTION: Performs a file copy - * RETURNS: - * Status of operation - */ -{ - ULONG Status; - ULONG i, j; - char ch; - char SrcName[MAX_PATH]; - char DstName[MAX_PATH]; - char InfLine[MAX_PATH]; - char Options[128]; - char BaseFilename[MAX_PATH]; - - *SrcName = '\0'; - *DstName = '\0'; - *Options = '\0'; - - // source file - i = CurrentChar; - while ((i < LineLength) && - ((ch = Line[i]) != ' ') && - (ch != 0x09) && - (ch != ';')) - { - CurrentString[i] = ch; - i++; - } - CurrentString[i] = '\0'; - CurrentToken = TokenString; - CurrentChar = i + 1; - strcpy(BaseFilename, CurrentString); - strcat(SrcName, BaseFilename); - - // destination - SkipSpaces(); - - if (CurrentToken != TokenEnd) - { - j = (ULONG)strlen(CurrentString); i = 0; - while ((CurrentChar + i < LineLength) && - ((ch = Line[CurrentChar + i]) != ' ') && - (ch != 0x09) && - (ch != ';')) - { - CurrentString[j + i] = ch; - i++; - } - CurrentString[j + i] = '\0'; - CurrentToken = TokenString; - CurrentChar += i + 1; - strcpy(DstName, CurrentString); - } - - // options (it may be empty) - SkipSpaces (); - - if (CurrentToken != TokenEnd) - { - j = (ULONG)strlen(CurrentString); i = 0; - while ((CurrentChar + i < LineLength) && - ((ch = Line[CurrentChar + i]) != ' ') && - (ch != 0x09) && - (ch != ';')) - { - CurrentString[j + i] = ch; - i++; - } - CurrentString[j + i] = '\0'; - CurrentToken = TokenString; - CurrentChar += i + 1; - strcpy(Options, CurrentString); - } - - if (!CabinetCreated) - { - DPRINT(MID_TRACE, ("Creating cabinet.\n")); - - Status = NewCabinet(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot create cabinet (%u).\n", (UINT)Status)); - printf("Cannot create cabinet.\n"); - return CAB_STATUS_FAILURE; - } - CabinetCreated = true; - - DPRINT(MID_TRACE, ("Creating disk.\n")); - - Status = NewDisk(); - if (Status != CAB_STATUS_SUCCESS) - { - DPRINT(MIN_TRACE, ("Cannot create disk (%u).\n", (UINT)Status)); - printf("Cannot create disk.\n"); - return CAB_STATUS_FAILURE; - } - DiskCreated = true; - SetupNewDisk(); - } - - DPRINT(MID_TRACE, ("Adding file: '%s' destination: '%s'.\n", SrcName, DstName)); - - Status = AddFile(SrcName); - if (Status == CAB_STATUS_CANNOT_OPEN) - { - strcpy(SrcName, FileRelativePath); - strcat(SrcName, BaseFilename); - Status = AddFile(SrcName); - } - switch (Status) - { - case CAB_STATUS_SUCCESS: - sprintf(InfLine, "%s=%s", GetFileName(SrcName), DstName); - WriteInfLine(InfLine); - break; - - case CAB_STATUS_CANNOT_OPEN: - if (strstr(Options,"optional")) - { - Status = CAB_STATUS_SUCCESS; - printf("Optional file does not exist: %s.\n", SrcName); - } - else - printf("File does not exist: %s.\n", SrcName); - - break; - - case CAB_STATUS_NOMEMORY: - printf("Insufficient memory to add file: %s.\n", SrcName); - break; - - default: - printf("Cannot add file: %s (%u).\n", SrcName, (UINT)Status); - break; - } - return Status; -} - - -void CDFParser::SkipSpaces() -/* - * FUNCTION: Skips any spaces in the current line - */ -{ - NextToken(); - while (CurrentToken == TokenSpace) - NextToken(); -} - - -bool CDFParser::IsNextToken(DFP_TOKEN Token, bool NoSpaces) -/* - * FUNCTION: Checks if next token equals Token - * ARGUMENTS: - * Token = Token to compare with - * SkipSp = true if spaces should be skipped - * RETURNS: - * false if next token is diffrent from Token - */ -{ - if (NoSpaces) - SkipSpaces(); - else - NextToken(); - return (CurrentToken == Token); -} - - -bool CDFParser::ReadLine() -/* - * FUNCTION: Reads the next line into the line buffer - * RETURNS: - * true if there is a new line, false if not - */ -{ - ULONG i, j; - char ch; - - if (CurrentOffset >= FileBufferSize) - return false; - - i = 0; - while (((j = CurrentOffset + i) < FileBufferSize) && (i < 127) && - ((ch = FileBuffer[j]) != 0x0D && (ch = FileBuffer[j]) != 0x0A)) - { - Line[i] = ch; - i++; - } - - Line[i] = '\0'; - LineLength = i; - - if ((FileBuffer[CurrentOffset + i] == 0x0D) && (FileBuffer[CurrentOffset + i + 1] == 0x0A)) - CurrentOffset++; - - CurrentOffset += i + 1; - - CurrentChar = 0; - - CurrentLine++; - - NextToken(); - - return true; -} - - -void CDFParser::NextToken() -/* - * FUNCTION: Reads the next token from the current line - */ -{ - ULONG i; - char ch = ' '; - - if (CurrentChar >= LineLength) - { - CurrentToken = TokenEnd; - return; - } - - switch (Line[CurrentChar]) - { - case ' ': - case 0x09: - CurrentToken = TokenSpace; - break; - - case ';': - CurrentToken = TokenSemi; - break; - - case '=': - CurrentToken = TokenEqual; - break; - - case '.': - CurrentToken = TokenPeriod; - break; - - case '\\': - CurrentToken = TokenBackslash; - break; - - case '"': - i = 0; - while ((CurrentChar + i + 1 < LineLength) && - ((ch = Line[CurrentChar + i + 1]) != '"')) - { - CurrentString[i] = ch; - i++; - } - CurrentString[i] = '\0'; - CurrentToken = TokenString; - CurrentChar += i + 2; - return; - - default: - i = 0; - while ((CurrentChar + i < LineLength) && - ((ch = Line[CurrentChar + i]) >= '0') && (ch <= '9')) - { - CurrentString[i] = ch; - i++; - } - if (i > 0) - { - CurrentString[i] = '\0'; - CurrentInteger = atoi(CurrentString); - CurrentToken = TokenInteger; - CurrentChar += i; - return; - } - i = 0; - while (((CurrentChar + i < LineLength) && - (((ch = Line[CurrentChar + i]) >= 'a') && (ch <= 'z'))) || - ((ch >= 'A') && (ch <= 'Z')) || (ch == '_')) - { - CurrentString[i] = ch; - i++; - } - if (i > 0) - { - CurrentString[i] = '\0'; - CurrentToken = TokenIdentifier; - CurrentChar += i; - return; - } - CurrentToken = TokenEnd; - } - CurrentChar++; -} - -/* EOF */ diff --git a/reactos/tools/cabman/dfp.h b/reactos/tools/cabman/dfp.h deleted file mode 100755 index 4c94fd34f1e..00000000000 --- a/reactos/tools/cabman/dfp.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/dfp.h - * PURPOSE: Directive file parser header - */ -#ifndef __DFP_H -#define __DFP_H - -#include "cabinet.h" - -typedef struct _CABINET_NAME { - struct _CABINET_NAME *Next; - ULONG DiskNumber; - char Name[128]; -} CABINET_NAME, *PCABINET_NAME; - -typedef struct _DISK_NUMBER { - struct _DISK_NUMBER *Next; - ULONG DiskNumber; - ULONG Number; -} DISK_NUMBER, *PDISK_NUMBER; - -typedef enum { - TokenUnknown, - TokenInteger, - TokenIdentifier, - TokenString, - TokenSpace, - TokenSemi, - TokenEqual, - TokenPeriod, - TokenBackslash, - TokenEnd, -} DFP_TOKEN; - - -typedef enum { - stCabinetName, - stCabinetNameTemplate, - stDiskLabel, - stDiskLabelTemplate, - stMaxDiskSize, - stInfFileName -} SETTYPE; - - -typedef enum { - ntDisk, - ntCabinet, - ntFolder, -} NEWTYPE; - - -/* Classes */ - -class CDFParser : public CCabinet { -public: - CDFParser(); - virtual ~CDFParser(); - ULONG Load(char* FileName); - ULONG Parse(); - void SetFileRelativePath(char* Path); - bool InfFileOnly; - bool DontGenerateInf; - char FileRelativePath[300]; -private: - /* Event handlers */ - virtual bool OnDiskLabel(ULONG Number, char* Label); - virtual bool OnCabinetName(ULONG Number, char* Name); - - void WriteInfLine(char* InfLine); - bool SetDiskName(PCABINET_NAME *List, ULONG Number, char* String); - bool GetDiskName(PCABINET_NAME *List, ULONG Number, char* String); - bool SetDiskNumber(PDISK_NUMBER *List, ULONG Number, ULONG Value); - bool GetDiskNumber(PDISK_NUMBER *List, ULONG Number, PULONG Value); - bool DoDiskLabel(ULONG Number, char* Label); - void DoDiskLabelTemplate(char* Template); - bool DoCabinetName(ULONG Number, char* Name); - void DoCabinetNameTemplate(char* Template); - void DoInfFileName(char* InfFileName); - ULONG DoMaxDiskSize(bool NumberValid, ULONG Number); - ULONG SetupNewDisk(); - ULONG PerformSetCommand(); - ULONG PerformNewCommand(); - ULONG PerformInfBeginCommand(); - ULONG PerformInfEndCommand(); - ULONG PerformCommand(); - ULONG PerformFileCopy(); - void SkipSpaces(); - bool IsNextToken(DFP_TOKEN Token, bool NoSpaces); - bool ReadLine(); - void NextToken(); - /* Parsing */ - bool FileLoaded; - FILEHANDLE FileHandle; - char* FileBuffer; - ULONG FileBufferSize; - ULONG CurrentOffset; - char Line[128]; - ULONG LineLength; - ULONG CurrentLine; - ULONG CurrentChar; - /* Token */ - DFP_TOKEN CurrentToken; - ULONG CurrentInteger; - char CurrentString[256]; - - /* State */ - bool CabinetCreated; - bool DiskCreated; - bool FolderCreated; - /* Standard directive variable */ - bool Cabinet; - ULONG CabinetFileCountThreshold; - PCABINET_NAME CabinetName; - bool CabinetNameTemplateSet; - char CabinetNameTemplate[128]; - bool InfFileNameSet; - char InfFileName[256]; - bool Compress; - ULONG CompressionType; - PCABINET_NAME DiskLabel; - bool DiskLabelTemplateSet; - char DiskLabelTemplate[128]; - ULONG FolderFileCountThreshold; - ULONG FolderSizeThreshold; - ULONG MaxCabinetSize; - ULONG MaxDiskFileCount; - PDISK_NUMBER MaxDiskSize; - bool MaxDiskSizeAllSet; - ULONG MaxDiskSizeAll; - ULONG ReservePerCabinetSize; - ULONG ReservePerDataBlockSize; - ULONG ReservePerFolderSize; - char SourceDir[256]; - FILEHANDLE InfFileHandle; - bool InfModeEnabled; -}; - -#endif /* __DFP_H */ - -/* EOF */ diff --git a/reactos/tools/cabman/main.cxx b/reactos/tools/cabman/main.cxx deleted file mode 100755 index 14759045a3e..00000000000 --- a/reactos/tools/cabman/main.cxx +++ /dev/null @@ -1,652 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/main.cpp - * PURPOSE: Main program - * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) - * Colin Finck - * REVISIONS: - * CSH 21/03-2001 Created - * CSH 15/08-2003 Made it portable - * CF 04/05-2007 Made it compatible with 64-bit operating systems - */ -#include -#include -#include -#include -#include "cabman.h" - - -#ifdef DBG - -ULONG DebugTraceLevel = MIN_TRACE; -//ULONG DebugTraceLevel = MID_TRACE; -//ULONG DebugTraceLevel = MAX_TRACE; - -#endif /* DBG */ - - -char* Pad(char* Str, char PadChar, ULONG Length) -/* - * FUNCTION: Pads a string with a character to make a given length - * ARGUMENTS: - * Str = Pointer to string to pad - * PadChar = Character to pad with - * Length = Disired length of string - * RETURNS: - * Pointer to string - * NOTES: - * Str must be at least Length + 1 bytes - */ -{ - ULONG Len; - - Len = (ULONG)strlen(Str); - - if (Len < Length) - { - memcpy(&Str[Length - Len], Str, Len + 1); - memset(Str, PadChar, Length - Len); - } - return Str; -} - - -char* Date2Str(char* Str, USHORT Date) -/* - * FUNCTION: Converts a DOS style date to a string - * ARGUMENTS: - * Str = Pointer to destination string - * Date = DOS style date - * RETURNS: - * Pointer to string - */ -{ - ULONG dw; - - /* Month */ - Str[0] = (char)('0' + ((Date & 0x01E0) >> 5) / 10); - Str[1] = (char)('0' + ((Date & 0x01E0) >> 5) % 10); - Str[2] = '-'; - /* Day */ - Str[3] = (char)('0' + (Date & 0x001F) / 10); - Str[4] = (char)('0' + (Date & 0x001F) % 10); - Str[5] = '-'; - /* Year */ - dw = 1980 + ((Date & 0xFE00) >> 9); - Str[6] = (char)('0' + dw / 1000); dw %= 1000; - Str[7] = (char)('0' + dw / 100); dw %= 100; - Str[8] = (char)('0' + dw / 10); dw %= 10; - Str[9] = (char)('0' + dw % 10); - Str[10] = '\0'; - return Str; -} - - -char* Time2Str(char* Str, USHORT Time) -/* - * FUNCTION: Converts a DOS style time to a string - * ARGUMENTS: - * Str = Pointer to destination string - * Time = DOS style time - * RETURNS: - * Pointer to string - */ -{ - bool PM; - ULONG Hour; - ULONG dw; - - Hour = ((Time & 0xF800) >> 11); - PM = (Hour >= 12); - Hour %= 12; - if (Hour == 0) - Hour = 12; - - if (Hour >= 10) - Str[0] = (char)('0' + Hour / 10); - else Str[0] = ' '; - Str[1] = (char)('0' + Hour % 10); - Str[2] = ':'; - /* Minute */ - Str[3] = (char)('0' + ((Time & 0x07E0) >> 5) / 10); - Str[4] = (char)('0' + ((Time & 0x07E0) >> 5) % 10); - Str[5] = ':'; - /* Second */ - dw = 2 * (Time & 0x001F); - Str[6] = (char)('0' + dw / 10); - Str[7] = (char)('0' + dw % 10); - - Str[8] = PM? 'p' : 'a'; - Str[9] = '\0'; - return Str; -} - - -char* Attr2Str(char* Str, USHORT Attr) -/* - * FUNCTION: Converts attributes to a string - * ARGUMENTS: - * Str = Pointer to destination string - * Attr = Attributes - * RETURNS: - * Pointer to string - */ -{ - /* Archive */ - if (Attr & CAB_ATTRIB_ARCHIVE) - Str[0] = 'A'; - else - Str[0] = '-'; - - /* Hidden */ - if (Attr & CAB_ATTRIB_HIDDEN) - Str[1] = 'H'; - else - Str[1] = '-'; - - /* Read only */ - if (Attr & CAB_ATTRIB_READONLY) - Str[2] = 'R'; - else - Str[2] = '-'; - - /* System */ - if (Attr & CAB_ATTRIB_SYSTEM) - Str[3] = 'S'; - else - Str[3] = '-'; - - Str[4] = '\0'; - return Str; -} - - -/* CCABManager */ - -CCABManager::CCABManager() -/* - * FUNCTION: Default constructor - */ -{ - ProcessAll = false; - InfFileOnly = false; - Mode = CM_MODE_DISPLAY; - FileName[0] = 0; -} - - -CCABManager::~CCABManager() -/* - * FUNCTION: Default destructor - */ -{ -} - - -void CCABManager::Usage() -/* - * FUNCTION: Display usage information on screen - */ -{ - printf("ReactOS Cabinet Manager\n\n"); - printf("CABMAN [-D | -E] [-A] [-L dir] cabinet [filename ...]\n"); - printf("CABMAN [-M mode] -C dirfile [-I] [-RC file] [-P dir]\n"); - printf("CABMAN [-M mode] -S cabinet filename [...]\n"); - printf(" cabinet Cabinet file.\n"); - printf(" filename Name of the file to add to or extract from the cabinet.\n"); - printf(" Wild cards and multiple filenames\n"); - printf(" (separated by blanks) may be used.\n\n"); - - printf(" dirfile Name of the directive file to use.\n"); - - printf(" -A Process ALL cabinets. Follows cabinet chain\n"); - printf(" starting in first cabinet mentioned.\n"); - printf(" -C Create cabinet.\n"); - printf(" -D Display cabinet directory.\n"); - printf(" -E Extract files from cabinet.\n"); - printf(" -I Don't create the cabinet, only the .inf file.\n"); - printf(" -L dir Location to place extracted or generated files\n"); - printf(" (default is current directory).\n"); - printf(" -M mode Specify the compression method to use:\n"); - printf(" raw - No compression\n"); - printf(" mszip - MsZip compression (default)\n"); - printf(" -N Don't create the .inf file, only the cabinet.\n"); - printf(" -RC Specify file to put in cabinet reserved area\n"); - printf(" (size must be less than 64KB).\n"); - printf(" -S Create simple cabinet.\n"); - printf(" -P dir Files in the .dff are relative to this directory\n"); -} - -bool CCABManager::ParseCmdline(int argc, char* argv[]) -/* - * FUNCTION: Parse command line arguments - * ARGUMENTS: - * argc = Number of arguments on command line - * argv = Pointer to list of command line arguments - * RETURNS: - * true if command line arguments was successfully parsed, false if not - */ -{ - int i; - bool ShowUsage; - bool FoundCabinet = false; - - ShowUsage = (argc < 2); - - for (i = 1; i < argc; i++) - { - if (argv[i][0] == '-') - { - switch (argv[i][1]) - { - case 'a': - case 'A': - ProcessAll = true; - break; - - case 'c': - case 'C': - Mode = CM_MODE_CREATE; - break; - - case 'd': - case 'D': - Mode = CM_MODE_DISPLAY; - break; - - case 'e': - case 'E': - Mode = CM_MODE_EXTRACT; - break; - - case 'i': - case 'I': - InfFileOnly = true; - break; - - case 'l': - case 'L': - if (argv[i][2] == 0) - { - i++; - SetDestinationPath(&argv[i][0]); - } - else - SetDestinationPath(&argv[i][2]); - - break; - - case 'm': - case 'M': - // Set the compression codec (only affects compression, not decompression) - if(argv[i][2] == 0) - { - i++; - - if( !SetCompressionCodec(&argv[i][0]) ) - return false; - } - else - { - if( !SetCompressionCodec(&argv[i][2]) ) - return false; - } - - break; - - case 'n': - case 'N': - DontGenerateInf = true; - break; - - case 'R': - switch (argv[i][2]) - { - case 'C': /* File to put in cabinet reserved area */ - if (argv[i][3] == 0) - { - i++; - if (!SetCabinetReservedFile(&argv[i][0])) - { - printf("Cannot open cabinet reserved area file.\n"); - return false; - } - } - else - { - if (!SetCabinetReservedFile(&argv[i][3])) - { - printf("Cannot open cabinet reserved area file.\n"); - return false; - } - } - break; - - default: - printf("Bad parameter %s.\n", argv[i]); - return false; - } - break; - - case 's': - case 'S': - Mode = CM_MODE_CREATE_SIMPLE; - break; - - case 'P': - if (argv[i][2] == 0) - { - i++; - SetFileRelativePath(&argv[i][0]); - } - else - SetFileRelativePath(&argv[i][2]); - - break; - - default: - printf("Bad parameter %s.\n", argv[i]); - return false; - } - } - else - { - if(Mode == CM_MODE_CREATE) - { - if(FileName[0]) - { - printf("You may only specify one directive file!\n"); - return false; - } - else - { - // For creating cabinets, this argument is the path to the directive file - strcpy(FileName, argv[i]); - } - } - else if(FoundCabinet) - { - // For creating simple cabinets, displaying or extracting them, add the argument as a search criteria - AddSearchCriteria(argv[i]); - } - else - { - SetCabinetName(argv[i]); - FoundCabinet = true; - } - } - } - - if (ShowUsage) - { - Usage(); - return false; - } - - // Select MsZip by default for creating cabinets - if( (Mode == CM_MODE_CREATE || Mode == CM_MODE_CREATE_SIMPLE) && !IsCodecSelected() ) - SelectCodec(CAB_CODEC_MSZIP); - - // Search criteria (= the filename argument) is necessary for creating a simple cabinet - if( Mode == CM_MODE_CREATE_SIMPLE && !HasSearchCriteria()) - { - printf("You have to enter input file names!\n"); - return false; - } - - return true; -} - - -bool CCABManager::CreateCabinet() -/* - * FUNCTION: Create cabinet - */ -{ - ULONG Status; - - Status = Load(FileName); - if (Status != CAB_STATUS_SUCCESS) - { - printf("Specified directive file could not be found: %s.\n", FileName); - return false; - } - - Status = Parse(); - - return (Status == CAB_STATUS_SUCCESS ? true : false); -} - -bool CCABManager::DisplayCabinet() -/* - * FUNCTION: Display cabinet contents - */ -{ - CAB_SEARCH Search; - char Str[20]; - ULONG FileCount = 0; - ULONG ByteCount = 0; - - if (Open() == CAB_STATUS_SUCCESS) - { - printf("Cabinet %s\n\n", GetCabinetName()); - - if (FindFirst(&Search) == CAB_STATUS_SUCCESS) - { - do - { - if (Search.File->FileControlID != CAB_FILE_CONTINUED) - { - printf("%s ", Date2Str(Str, Search.File->FileDate)); - printf("%s ", Time2Str(Str, Search.File->FileTime)); - printf("%s ", Attr2Str(Str, Search.File->Attributes)); - sprintf(Str, "%u", (UINT)Search.File->FileSize); - printf("%s ", Pad(Str, ' ', 13)); - printf("%s\n", Search.FileName); - - FileCount++; - ByteCount += Search.File->FileSize; - } - } while (FindNext(&Search) == CAB_STATUS_SUCCESS); - } - - DestroySearchCriteria(); - - if (FileCount > 0) { - if (FileCount == 1) - printf(" 1 file "); - else - { - sprintf(Str, "%u", (UINT)FileCount); - printf(" %s files ", Pad(Str, ' ', 12)); - } - - if (ByteCount == 1) - printf(" 1 byte\n"); - else - { - sprintf(Str, "%u", (UINT)ByteCount); - printf("%s bytes\n", Pad(Str, ' ', 12)); - } - } - else - { - /* There should be at least one file in a cabinet */ - printf("No files in cabinet."); - } - return true; - } - else - printf("Cannot open file: %s\n", GetCabinetName()); - - return false; -} - - -bool CCABManager::ExtractFromCabinet() -/* - * FUNCTION: Extract file(s) from cabinet - */ -{ - bool bRet = true; - CAB_SEARCH Search; - ULONG Status; - - if (Open() == CAB_STATUS_SUCCESS) - { - printf("Cabinet %s\n\n", GetCabinetName()); - - if (FindFirst(&Search) == CAB_STATUS_SUCCESS) - { - do - { - switch (Status = ExtractFile(Search.FileName)) - { - case CAB_STATUS_SUCCESS: - break; - - case CAB_STATUS_INVALID_CAB: - printf("Cabinet contains errors.\n"); - bRet = false; - break; - - case CAB_STATUS_UNSUPPCOMP: - printf("Cabinet uses unsupported compression type.\n"); - bRet = false; - break; - - case CAB_STATUS_CANNOT_WRITE: - printf("You've run out of free space on the destination volume or the volume is damaged.\n"); - bRet = false; - break; - - default: - printf("Unspecified error code (%u).\n", (UINT)Status); - bRet = false; - break; - } - - if(!bRet) - break; - } while (FindNext(&Search) == CAB_STATUS_SUCCESS); - - DestroySearchCriteria(); - } - - return bRet; - } - else - printf("Cannot open file: %s.\n", GetCabinetName()); - - return false; -} - - -bool CCABManager::Run() -/* - * FUNCTION: Process cabinet - */ -{ - printf("ReactOS Cabinet Manager\n\n"); - - switch (Mode) - { - case CM_MODE_CREATE: - return CreateCabinet(); - - case CM_MODE_DISPLAY: - return DisplayCabinet(); - - case CM_MODE_EXTRACT: - return ExtractFromCabinet(); - - case CM_MODE_CREATE_SIMPLE: - return CreateSimpleCabinet(); - - default: - break; - } - return false; -} - - -/* Event handlers */ - -bool CCABManager::OnOverwrite(PCFFILE File, - char* FileName) -/* - * FUNCTION: Called when extracting a file and it already exists - * ARGUMENTS: - * File = Pointer to CFFILE for file being extracted - * Filename = Pointer to buffer with name of file (full path) - * RETURNS - * true if the file should be overwritten, false if not - */ -{ - if (Mode == CM_MODE_CREATE) - return true; - - /* Always overwrite */ - return true; -} - - -void CCABManager::OnExtract(PCFFILE File, - char* FileName) -/* - * FUNCTION: Called just before extracting a file - * ARGUMENTS: - * File = Pointer to CFFILE for file being extracted - * FileName = Pointer to buffer with name of file (full path) - */ -{ - printf("Extracting %s\n", GetFileName(FileName)); -} - - - -void CCABManager::OnDiskChange(char* CabinetName, - char* DiskLabel) -/* - * FUNCTION: Called when a new disk is to be processed - * ARGUMENTS: - * CabinetName = Pointer to buffer with name of cabinet - * DiskLabel = Pointer to buffer with label of disk - */ -{ - printf("\nChanging to cabinet %s - %s\n\n", CabinetName, DiskLabel); -} - - -void CCABManager::OnAdd(PCFFILE File, - char* FileName) -/* - * FUNCTION: Called just before adding a file to a cabinet - * ARGUMENTS: - * File = Pointer to CFFILE for file being added - * FileName = Pointer to buffer with name of file (full path) - */ -{ - printf("Adding %s\n", GetFileName(FileName)); -} - - -int main(int argc, char * argv[]) -/* - * FUNCTION: Main entry point - * ARGUMENTS: - * argc = Number of arguments on command line - * argv = Pointer to list of command line arguments - */ -{ - CCABManager CABMgr; - bool status = false; - - if (CABMgr.ParseCmdline(argc, argv)) - status = CABMgr.Run(); - - return (status ? 0 : 1); -} - -/* EOF */ diff --git a/reactos/tools/cabman/makefile.win32 b/reactos/tools/cabman/makefile.win32 deleted file mode 100755 index fca4c8e2645..00000000000 --- a/reactos/tools/cabman/makefile.win32 +++ /dev/null @@ -1,29 +0,0 @@ -# $Id$ - -PATH_TO_TOP = ../.. - -TARGET_TYPE = program - -TARGET_APPTYPE = console - -TARGET_NAME = cabman -#TARGET_NAME = test - -TARGET_CPPAPP = yes - -TARGET_OBJECTS = cabinet.o mszip.o raw.o main.o dfp.o - -TARGET_SDKLIBS = zlib.a - -TARGET_CFLAGS = -I$(PATH_TO_TOP)/lib/zlib -Werror -Wall - -TARGET_CPPFLAGS = $(TARGET_CFLAGS) - -TARGET_GCCLIBS = stdc++ - -TARGET_NORC = yes - -include $(PATH_TO_TOP)/rules.mak - -include $(TOOLS_PATH)/helper.mk - diff --git a/reactos/tools/cabman/mszip.cxx b/reactos/tools/cabman/mszip.cxx deleted file mode 100755 index 45e87f1c06a..00000000000 --- a/reactos/tools/cabman/mszip.cxx +++ /dev/null @@ -1,182 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/mszip.cpp - * PURPOSE: CAB codec for MSZIP compressed data - * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) - * Colin Finck - * NOTES: The ZLIB does the real work. Get the full version - * from http://www.cdrom.com/pub/infozip/zlib/ - * REVISIONS: - * CSH 21/03-2001 Created - * CSH 15/08-2003 Made it portable - * CF 04/05-2007 Made it compatible with 64-bit operating systems - */ -#include -#include "mszip.h" - - -/* Memory functions */ - -voidpf MSZipAlloc(voidpf opaque, uInt items, uInt size) -{ - DPRINT(DEBUG_MEMORY, ("items = (%d) size = (%d)\n", items, size)); - return AllocateMemory(items * size); -} - -void MSZipFree (voidpf opaque, voidpf address) -{ - DPRINT(DEBUG_MEMORY, ("\n")); - FreeMemory(address); -} - - -/* CMSZipCodec */ - -CMSZipCodec::CMSZipCodec() -/* - * FUNCTION: Default constructor - */ -{ - ZStream.zalloc = MSZipAlloc; - ZStream.zfree = MSZipFree; - ZStream.opaque = (voidpf)0; -} - - -CMSZipCodec::~CMSZipCodec() -/* - * FUNCTION: Default destructor - */ -{ -} - - -ULONG CMSZipCodec::Compress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength) -/* - * FUNCTION: Compresses data in a buffer - * ARGUMENTS: - * OutputBuffer = Pointer to buffer to place compressed data - * InputBuffer = Pointer to buffer with data to be compressed - * InputLength = Length of input buffer - * OutputLength = Address of buffer to place size of compressed data - */ -{ - PUSHORT Magic; - - DPRINT(MAX_TRACE, ("InputLength (%u).\n", (UINT)InputLength)); - - Magic = (PUSHORT)OutputBuffer; - *Magic = MSZIP_MAGIC; - - ZStream.next_in = (unsigned char*)InputBuffer; - ZStream.avail_in = InputLength; - ZStream.next_out = (unsigned char*)((unsigned long)OutputBuffer + 2); - ZStream.avail_out = CAB_BLOCKSIZE + 12; - - /* WindowBits is passed < 0 to tell that there is no zlib header */ - Status = deflateInit2(&ZStream, - Z_BEST_COMPRESSION, - Z_DEFLATED, - -MAX_WBITS, - 8, /* memLevel */ - Z_DEFAULT_STRATEGY); - if (Status != Z_OK) - { - DPRINT(MIN_TRACE, ("deflateInit() returned (%d).\n", Status)); - return CS_NOMEMORY; - } - - Status = deflate(&ZStream, Z_FINISH); - if ((Status != Z_OK) && (Status != Z_STREAM_END)) - { - DPRINT(MIN_TRACE, ("deflate() returned (%d) (%s).\n", Status, ZStream.msg)); - if (Status == Z_MEM_ERROR) - return CS_NOMEMORY; - return CS_BADSTREAM; - } - - *OutputLength = ZStream.total_out + 2; - - Status = deflateEnd(&ZStream); - if (Status != Z_OK) - { - DPRINT(MIN_TRACE, ("deflateEnd() returned (%d).\n", Status)); - return CS_BADSTREAM; - } - - return CS_SUCCESS; -} - - -ULONG CMSZipCodec::Uncompress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength) -/* - * FUNCTION: Uncompresses data in a buffer - * ARGUMENTS: - * OutputBuffer = Pointer to buffer to place uncompressed data - * InputBuffer = Pointer to buffer with data to be uncompressed - * InputLength = Length of input buffer - * OutputLength = Address of buffer to place size of uncompressed data - */ -{ - USHORT Magic; - - DPRINT(MAX_TRACE, ("InputLength (%u).\n", (UINT)InputLength)); - - Magic = *((PUSHORT)InputBuffer); - - if (Magic != MSZIP_MAGIC) - { - DPRINT(MID_TRACE, ("Bad MSZIP block header magic (0x%X)\n", Magic)); - return CS_BADSTREAM; - } - - ZStream.next_in = (unsigned char*)((unsigned long)InputBuffer + 2); - ZStream.avail_in = InputLength - 2; - ZStream.next_out = (unsigned char*)OutputBuffer; - ZStream.avail_out = CAB_BLOCKSIZE + 12; - - /* WindowBits is passed < 0 to tell that there is no zlib header. - * Note that in this case inflate *requires* an extra "dummy" byte - * after the compressed stream in order to complete decompression and - * return Z_STREAM_END. - */ - Status = inflateInit2(&ZStream, -MAX_WBITS); - if (Status != Z_OK) - { - DPRINT(MIN_TRACE, ("inflateInit2() returned (%d).\n", Status)); - return CS_BADSTREAM; - } - - while ((ZStream.total_out < CAB_BLOCKSIZE + 12) && - (ZStream.total_in < InputLength - 2)) - { - Status = inflate(&ZStream, Z_NO_FLUSH); - if (Status == Z_STREAM_END) break; - if (Status != Z_OK) - { - DPRINT(MIN_TRACE, ("inflate() returned (%d) (%s).\n", Status, ZStream.msg)); - if (Status == Z_MEM_ERROR) - return CS_NOMEMORY; - return CS_BADSTREAM; - } - } - - *OutputLength = ZStream.total_out; - - Status = inflateEnd(&ZStream); - if (Status != Z_OK) - { - DPRINT(MIN_TRACE, ("inflateEnd() returned (%d).\n", Status)); - return CS_BADSTREAM; - } - return CS_SUCCESS; -} - -/* EOF */ diff --git a/reactos/tools/cabman/mszip.h b/reactos/tools/cabman/mszip.h deleted file mode 100755 index ebe83fccae7..00000000000 --- a/reactos/tools/cabman/mszip.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/mszip.h - * PURPOSE: CAB codec for MSZIP compressed data - */ -#ifndef __MSZIP_H -#define __MSZIP_H - -#include "cabinet.h" -#include - -#define MSZIP_MAGIC 0x4B43 - - -/* Classes */ - -class CMSZipCodec : public CCABCodec { -public: - /* Default constructor */ - CMSZipCodec(); - /* Default destructor */ - virtual ~CMSZipCodec(); - /* Compresses a data block */ - virtual ULONG Compress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength); - /* Uncompresses a data block */ - virtual ULONG Uncompress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength); -private: - int Status; - z_stream ZStream; /* Zlib stream */ -}; - -#endif /* __MSZIP_H */ - -/* EOF */ diff --git a/reactos/tools/cabman/raw.cxx b/reactos/tools/cabman/raw.cxx deleted file mode 100755 index bf4b0fe9871..00000000000 --- a/reactos/tools/cabman/raw.cxx +++ /dev/null @@ -1,70 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/raw.cpp - * PURPOSE: CAB codec for uncompressed "raw" data - * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) - * Colin Finck - * REVISIONS: - * CSH 21/03-2001 Created - * CSH 15/08-2003 Made it portable - * CF 04/05-2007 Made it compatible with 64-bit operating systems - */ -#include "raw.h" - - -/* CRawCodec */ - -CRawCodec::CRawCodec() -/* - * FUNCTION: Default constructor - */ -{ -} - - -CRawCodec::~CRawCodec() -/* - * FUNCTION: Default destructor - */ -{ -} - - -ULONG CRawCodec::Compress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength) -/* - * FUNCTION: Compresses data in a buffer - * ARGUMENTS: - * OutputBuffer = Pointer to buffer to place compressed data - * InputBuffer = Pointer to buffer with data to be compressed - * InputLength = Length of input buffer - * OutputLength = Address of buffer to place size of compressed data - */ -{ - memcpy(OutputBuffer, InputBuffer, InputLength); - *OutputLength = InputLength; - return CS_SUCCESS; -} - -ULONG CRawCodec::Uncompress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength) -/* - * FUNCTION: Uncompresses data in a buffer - * ARGUMENTS: - * OutputBuffer = Pointer to buffer to place uncompressed data - * InputBuffer = Pointer to buffer with data to be uncompressed - * InputLength = Length of input buffer - * OutputLength = Address of buffer to place size of uncompressed data - */ -{ - memcpy(OutputBuffer, InputBuffer, InputLength); - *OutputLength = InputLength; - return CS_SUCCESS; -} - -/* EOF */ diff --git a/reactos/tools/cabman/raw.h b/reactos/tools/cabman/raw.h deleted file mode 100755 index 635712f3a9d..00000000000 --- a/reactos/tools/cabman/raw.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS cabinet manager - * FILE: tools/cabman/raw.h - * PURPOSE: CAB codec for uncompressed data - */ -#ifndef __RAW_H -#define __RAW_H - -#include "cabinet.h" - - -/* Classes */ - -class CRawCodec : public CCABCodec { -public: - /* Default constructor */ - CRawCodec(); - /* Default destructor */ - virtual ~CRawCodec(); - /* Compresses a data block */ - virtual ULONG Compress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength); - /* Uncompresses a data block */ - virtual ULONG Uncompress(void* OutputBuffer, - void* InputBuffer, - ULONG InputLength, - PULONG OutputLength); -}; - -#endif /* __RAW_H */ - -/* EOF */ diff --git a/reactos/tools/cdmake/cdmake.c b/reactos/tools/cdmake/cdmake.c deleted file mode 100644 index b36c25ae47a..00000000000 --- a/reactos/tools/cdmake/cdmake.c +++ /dev/null @@ -1,1680 +0,0 @@ -/* - * CD-ROM Maker - * by Philip J. Erdelsky - * pje@acm.org - * http://www.alumni.caltech.edu/~pje/ - * - * ElTorito-Support - * by Eric Kohl - * ekohl@rz-online.de - * - * Linux port - * by Casper S. Hornstrup - * chorns@users.sourceforge.net - * - * Joliet support - * by Filip Navara - * xnavara@volny.cz - * Limitations: - * - No Joliet file name validations - * - Very bad ISO file name generation - * - * - * convert long filename to iso9660 file name by Magnus Olsen - * magnus@greatlord.com - * - * $Id$ - */ - -/* According to his website, this file was released into the public domain by Phillip J. Erdelsky */ - -#include -#include -#include -#include -#include -#include -#ifdef WIN32 -# include -# include -#else -# if defined(__FreeBSD__) || defined(__APPLE__) -# include -# else -# include -# endif // __FreeBSD__ -# include -# include -# include -# include -#endif // WIN32 -#include -#include -#include -#ifndef WIN32 -#ifndef MAX_PATH -#define MAX_PATH 260 -#endif -#define DIR_SEPARATOR_CHAR '/' -#define DIR_SEPARATOR_STRING "/" -#else -#define DIR_SEPARATOR_CHAR '\\' -#define DIR_SEPARATOR_STRING "\\" -#endif - -typedef unsigned char BYTE; -typedef unsigned short WORD; -typedef unsigned long DWORD; -typedef int BOOL; - -const BOOL TRUE = 1; -const BOOL FALSE = 0; - -// file system parameters - -#define MAX_LEVEL 8 -#define MAX_NAME_LENGTH 64 -#define MAX_CDNAME_LENGTH 8 -#define MAX_EXTENSION_LENGTH 10 -#define MAX_CDEXTENSION_LENGTH 3 -#define SECTOR_SIZE 2048 -#define BUFFER_SIZE (8 * SECTOR_SIZE) - -const BYTE HIDDEN_FLAG = 1; -const BYTE DIRECTORY_FLAG = 2; - - -struct cd_image -{ - FILE *file; - DWORD sector; // sector to receive next byte - int offset; // offset of next byte in sector - int count; // number of bytes in buffer - char filespecs[128]; - BYTE *buffer; -}; - -typedef struct date_and_time -{ - BYTE second; - BYTE minute; - BYTE hour; - BYTE day; - BYTE month; - WORD year; -} DATE_AND_TIME, *PDATE_AND_TIME; - -typedef struct directory_record -{ - struct directory_record *next_in_directory; - struct directory_record *next_in_path_table; /* directory record only */ - struct directory_record *next_in_memory; - struct directory_record *first_record; /* directory record only */ - struct directory_record *parent; - BYTE flags; - char name[MAX_NAME_LENGTH+1]; - char name_on_cd[MAX_CDNAME_LENGTH+1]; - char extension[MAX_EXTENSION_LENGTH+1]; - char extension_on_cd[MAX_CDEXTENSION_LENGTH+1]; - char *joliet_name; - DATE_AND_TIME date_and_time; - DWORD sector; - DWORD size; - DWORD joliet_sector; - DWORD joliet_size; - unsigned level; /* directory record only */ - WORD path_table_index; /* directory record only */ -} DIR_RECORD, *PDIR_RECORD; - - -typedef enum directory_record_type -{ - DOT_RECORD, - DOT_DOT_RECORD, - SUBDIRECTORY_RECORD, - FILE_RECORD -} DIR_RECORD_TYPE, *PDIR_RECORD_TYPE; - - -PDIR_RECORD sort_linked_list(PDIR_RECORD, - unsigned, int (*)(PDIR_RECORD, PDIR_RECORD)); - - -static char DIRECTORY_TIMESTAMP[] = "~Y$'KOR$.3K&"; - -static jmp_buf error; -static struct cd_image cd; - -char volume_label[32]; -DIR_RECORD root; -char source[512]; -char *end_source; -enum {QUIET, NORMAL, VERBOSE} verbosity; -BOOL show_progress; -DWORD size_limit; -BOOL accept_punctuation_marks; - -DWORD total_sectors; -DWORD path_table_size; -DWORD little_endian_path_table_sector; -DWORD big_endian_path_table_sector; -DWORD number_of_files; -DWORD bytes_in_files; -DWORD unused_bytes_at_ends_of_files; -DWORD number_of_directories; -DWORD bytes_in_directories; - -char bootimage[512]; -BOOL eltorito; -DWORD boot_catalog_sector; -DWORD boot_image_sector; -WORD boot_image_size; // counted in 512 byte sectors - -BOOL joliet; -DWORD joliet_path_table_size; -DWORD joliet_little_endian_path_table_sector; -DWORD joliet_big_endian_path_table_sector; - -/*----------------------------------------------------------------------------- -This function edits a 32-bit unsigned number into a comma-delimited form, such -as 4,294,967,295 for the largest possible number, and returns a pointer to a -static buffer containing the result. It suppresses leading zeros and commas, -but optionally pads the result with blanks at the left so the result is always -exactly 13 characters long (excluding the terminating zero). - -CAUTION: A statement containing more than one call on this function, such as -printf("%s, %s", edit_with_commas(a), edit_with_commas(b)), will produce -incorrect results because all calls use the same static bufffer. ------------------------------------------------------------------------------*/ - -static char *edit_with_commas(DWORD x, BOOL pad) -{ - static char s[14]; - unsigned i = 13; - do - { - if (i % 4 == 2) s[--i] = ','; - s[--i] = (char)(x % 10 + '0'); - } while ((x/=10) != 0); - if (pad) - { - while (i > 0) s[--i] = ' '; - } - return s + i; -} - -/*----------------------------------------------------------------------------- -This function releases all allocated memory blocks. ------------------------------------------------------------------------------*/ - -static void release_memory(void) -{ - while (root.next_in_memory != NULL) - { - struct directory_record *next = - root.next_in_memory->next_in_memory; - if (joliet) - free (root.joliet_name); - free (root.next_in_memory); - root.next_in_memory = next; - } - if (cd.buffer != NULL) - { - free (cd.buffer); - cd.buffer = NULL; - } -} - -/*----------------------------------------------------------------------------- -This function edits and displays an error message and then jumps back to the -error exit point in main(). ------------------------------------------------------------------------------*/ - -void error_exit ( const char* fmt, ... ) -{ - va_list arg; - - va_start(arg, fmt); - vprintf(fmt, arg); - va_end(arg); - printf("\n"); - if (cd.file != NULL) - fclose(cd.file); - release_memory(); - exit(1); -} - -/*----------------------------------------------------------------------------- -This function, which is called only on the second pass, and only when the -buffer is not empty, flushes the buffer to the CD-ROM image. ------------------------------------------------------------------------------*/ - -static void flush_buffer(void) -{ - if (fwrite(cd.buffer, cd.count, 1, cd.file) < 1) - error_exit("File write error"); - cd.count = 0; - if (show_progress) - { - printf("\r%s ", - edit_with_commas((total_sectors - cd.sector) * SECTOR_SIZE, TRUE)); - } -} - -/*----------------------------------------------------------------------------- -This function writes a single byte to the CD-ROM image. On the first pass (in -which cd.handle < 0), it does not actually write anything but merely updates -the file pointer as though the byte had been written. ------------------------------------------------------------------------------*/ - -static void write_byte(BYTE x) -{ - if (cd.file != NULL) - { - cd.buffer[cd.count] = x; - if (++cd.count == BUFFER_SIZE) - flush_buffer(); - } - if (++cd.offset == SECTOR_SIZE) - { - cd.sector++; - cd.offset = 0; - } -} - -/*----------------------------------------------------------------------------- -These functions write a word or double word to the CD-ROM image with the -specified endianity. ------------------------------------------------------------------------------*/ - -static void write_little_endian_word(WORD x) -{ - write_byte((BYTE)x); - write_byte((BYTE)(x >> 8)); -} - -static void write_big_endian_word(WORD x) -{ - write_byte((BYTE)(x >> 8)); - write_byte((BYTE)x); -} - -static void write_both_endian_word(WORD x) -{ - write_little_endian_word(x); - write_big_endian_word(x); -} - -static void write_little_endian_dword(DWORD x) -{ - write_byte((BYTE)x); - write_byte((BYTE)(x >> 8)); - write_byte((BYTE)(x >> 16)); - write_byte((BYTE)(x >> 24)); -} - -static void write_big_endian_dword(DWORD x) -{ - write_byte((BYTE)(x >> 24)); - write_byte((BYTE)(x >> 16)); - write_byte((BYTE)(x >> 8)); - write_byte((BYTE)x); -} - -static void write_both_endian_dword(DWORD x) -{ - write_little_endian_dword(x); - write_big_endian_dword(x); -} - -/*----------------------------------------------------------------------------- -This function writes enough zeros to fill out the end of a sector, and leaves -the file pointer at the beginning of the next sector. If the file pointer is -already at the beginning of a sector, it writes nothing. ------------------------------------------------------------------------------*/ - -static void fill_sector(void) -{ - while (cd.offset != 0) - write_byte(0); -} - -/*----------------------------------------------------------------------------- -This function writes a string to the CD-ROM image. The terminating \0 is not -written. ------------------------------------------------------------------------------*/ - -static void write_string(char *s) -{ - while (*s != 0) - write_byte(*s++); -} - -/*----------------------------------------------------------------------------- -This function writes a ansi string as a big endian unicode string to the CD-ROM -image. The terminating \0 is not written. ------------------------------------------------------------------------------*/ - -static void write_string_as_big_endian_unicode(char *s) -{ - while (*s != 0) - { - write_byte(0); - write_byte(*s++); - } -} - -/*----------------------------------------------------------------------------- -This function writes a block of identical bytes to the CD-ROM image. ------------------------------------------------------------------------------*/ - -static void write_block(unsigned count, BYTE value) -{ - while (count != 0) - { - write_byte(value); - count--; - } -} - -/*----------------------------------------------------------------------------- -This function writes a block of identical bige endian words to the CD-ROM image. ------------------------------------------------------------------------------*/ - -static void write_word_block(unsigned count, WORD value) -{ - while (count != 0) - { - write_big_endian_word(value); - count--; - } -} - -/*----------------------------------------------------------------------------- -This function writes a directory record to the CD_ROM image. ------------------------------------------------------------------------------*/ - -static void -write_directory_record(PDIR_RECORD d, - DIR_RECORD_TYPE DirType, - BOOL joliet) -{ - unsigned identifier_size; - unsigned record_size; - - if (joliet) - { - if (DirType == DOT_RECORD || DirType == DOT_DOT_RECORD) - identifier_size = 1; - else - identifier_size = strlen(d->joliet_name) * 2; - } - else - { - switch (DirType) - { - case DOT_RECORD: - case DOT_DOT_RECORD: - identifier_size = 1; - break; - case SUBDIRECTORY_RECORD: - /*printf ( "Subdir: %s\n", d->name_on_cd );*/ - identifier_size = strlen(d->name_on_cd); - break; - case FILE_RECORD: - /*printf ( "File: %s.%s -> %s.%s\n", d->name, d->extension, d->name_on_cd, d->extension_on_cd );*/ - identifier_size = strlen(d->name_on_cd) + 2; - if (d->extension_on_cd[0] != 0) - identifier_size += 1 + strlen(d->extension_on_cd); - break; - default: - identifier_size = 1; - break; - } - } - record_size = 33 + identifier_size; - if ((identifier_size & 1) == 0) - record_size++; - if (cd.offset + record_size > SECTOR_SIZE) - fill_sector(); - write_byte((BYTE)record_size); - write_byte(0); // number of sectors in extended attribute record - if (joliet) - { - write_both_endian_dword(d->joliet_sector); - write_both_endian_dword(d->joliet_size); - } - else - { - write_both_endian_dword(d->sector); - write_both_endian_dword(d->size); - } - write_byte((BYTE)(d->date_and_time.year - 1900)); - write_byte(d->date_and_time.month); - write_byte(d->date_and_time.day); - write_byte(d->date_and_time.hour); - write_byte(d->date_and_time.minute); - write_byte(d->date_and_time.second); - write_byte(0); // GMT offset - write_byte(d->flags); - write_byte(0); // file unit size for an interleaved file - write_byte(0); // interleave gap size for an interleaved file - write_both_endian_word((WORD) 1); // volume sequence number - write_byte((BYTE)identifier_size); - switch (DirType) - { - case DOT_RECORD: - write_byte(0); - break; - case DOT_DOT_RECORD: - write_byte(1); - break; - case SUBDIRECTORY_RECORD: - if (joliet) - write_string_as_big_endian_unicode(d->joliet_name); - else - write_string(d->name_on_cd); - break; - case FILE_RECORD: - if (joliet) - { - write_string_as_big_endian_unicode(d->joliet_name); - } - else - { - write_string(d->name_on_cd); - if (d->extension_on_cd[0] != 0) - { - write_byte('.'); - write_string(d->extension_on_cd); - } - write_string(";1"); - } - break; - } - if ((identifier_size & 1) == 0) - write_byte(0); -} - -/*----------------------------------------------------------------------------- -This function converts the date and time words from an ffblk structure and -puts them into a date_and_time structure. ------------------------------------------------------------------------------*/ - -static void convert_date_and_time(PDATE_AND_TIME dt, time_t *time) -{ - struct tm *timedef; - - timedef = localtime(time); - - dt->second = timedef->tm_sec; - dt->minute = timedef->tm_min; - dt->hour = timedef->tm_hour; - dt->day = timedef->tm_mday; - dt->month = timedef->tm_mon + 1; - dt->year = timedef->tm_year + 1900; -} - -/*----------------------------------------------------------------------------- -This function checks the specified character, if necessary, and -generates an error if it is a punctuation mark other than an underscore. -It also converts small letters to capital letters and returns the -result. ------------------------------------------------------------------------------*/ - -static int check_for_punctuation(int c, const char *name) -{ - c = toupper(c & 0xFF); - if (!accept_punctuation_marks && !isalnum(c) && c != '_') - error_exit("Punctuation mark in %s", name); - return c; -} - -#if WIN32 -#define strcasecmp stricmp -#endif//WIN32 - -/*----------------------------------------------------------------------------- -This function checks to see if there's a cdname conflict. ------------------------------------------------------------------------------*/ - -int cdname_exists ( PDIR_RECORD d ) -{ - PDIR_RECORD p = d->parent->first_record; - while ( p ) - { - if ( p != d - && !strcasecmp ( p->name_on_cd, d->name_on_cd ) - && !strcasecmp ( p->extension_on_cd, d->extension_on_cd ) ) - return 1; - p = p->next_in_directory; - } - return 0; -} - -void parse_filename_into_dirrecord ( const char* filename, PDIR_RECORD d, BOOL dir ) -{ - const char *s = filename; - char *t = d->name_on_cd; - char *n = d->name; - int joliet_length; - int filename_counter; - filename_counter = 1; - while (*s != 0) - { - if (*s == '.') - { - s++; - break; - } - - if ( (t-d->name_on_cd) < sizeof(d->name_on_cd)-1 ) - *t++ = check_for_punctuation(*s, filename); - else if (!joliet) - error_exit ("'%s' is not ISO-9660, aborting...", filename ); - if ( (n-d->name) < sizeof(d->name)-1 ) - *n++ = *s; - else if (!joliet) - error_exit ( "'%s' is not ISO-9660, aborting...", filename ); - s++; - } - if (strlen(s) > MAX_EXTENSION_LENGTH) - { - error_exit ( "'%s' has too long extension for cdmake, aborting...", filename ); - } - *t = 0; - strcpy(d->extension, s); - t = d->extension_on_cd; - while ( *s != 0 ) - { - if ( (t-d->extension_on_cd) < (sizeof(d->extension_on_cd)-1) ) - *t++ = check_for_punctuation(*s, filename); - else if (!joliet) - error_exit ( "'%s' is not ISO-9660, aborting...", filename ); - s++; - } - *t = 0; - *n = 0; - - if ( dir ) - { - if (d->extension[0] != 0) - { - if (!joliet) - error_exit("Directory with extension %s", filename); - } - d->flags = DIRECTORY_FLAG; - } else - d->flags = 0; - - - filename_counter = 1; - while ( cdname_exists ( d ) ) - { - - // the file name must be least 8 char long - if (strlen(d->name_on_cd)<8) - error_exit ( "'%s' is a duplicate file name, aborting...", filename ); - - if ((d->name_on_cd[8] == '.') && (strlen(d->name_on_cd) < 13)) - error_exit ( "'%s' is a duplicate file name, aborting...", filename ); - - // max 255 times for equal short filename - if (filename_counter>255) error_exit ( "'%s' is a duplicate file name, aborting...", filename ); - d->name_on_cd[8] = '~'; - memset(&d->name_on_cd[9],0,5); - sprintf(&d->name_on_cd[9],"%d",filename_counter); - filename_counter++; - - } - - if ( joliet ) - { - joliet_length = strlen(filename); - if (joliet_length > 64) - error_exit ( "'%s' is not Joliet, aborting...", filename ); - d->joliet_name = malloc(joliet_length + 1); - strcpy(d->joliet_name, filename); - } -} - -/*----------------------------------------------------------------------------- -This function creates a new directory record with the information from the -specified ffblk. It links it into the beginning of the directory list -for the specified parent and returns a pointer to the new record. ------------------------------------------------------------------------------*/ - -#if WIN32 - -/* Win32 version */ -PDIR_RECORD -new_directory_record (struct _finddata_t *f, - PDIR_RECORD parent) -{ - PDIR_RECORD d; - - d = malloc(sizeof(DIR_RECORD)); - if (d == NULL) - error_exit("Insufficient memory"); - memset ( d, 0, sizeof(DIR_RECORD) ); - d->next_in_memory = root.next_in_memory; - root.next_in_memory = d; - - /* I need the parent set before calling parse_filename_into_dirrecord(), - because that functions checks for duplicate file names*/ - d->parent = parent; - parse_filename_into_dirrecord ( f->name, d, f->attrib & _A_SUBDIR ); - - convert_date_and_time(&d->date_and_time, &f->time_write); - d->flags |= f->attrib & _A_HIDDEN ? HIDDEN_FLAG : 0; - d->size = d->joliet_size = f->size; - d->next_in_directory = parent->first_record; - parent->first_record = d; - return d; -} - -#else - -/* Linux version */ -PDIR_RECORD -new_directory_record (struct dirent *entry, - struct stat *stbuf, - PDIR_RECORD parent) -{ - PDIR_RECORD d; - /* - char *s; - char *t; - char *n; - */ - - d = malloc(sizeof(DIR_RECORD)); - if (d == NULL) - error_exit("Insufficient memory"); - memset ( d, 0, sizeof(DIR_RECORD) ); - d->next_in_memory = root.next_in_memory; - root.next_in_memory = d; - - /* I need the parent set before calling parse_filename_into_dirrecord(), - because that functions checks for duplicate file names*/ - d->parent = parent; -#ifdef HAVE_D_TYPE - parse_filename_into_dirrecord ( entry->d_name, d, entry->d_type == DT_DIR ); -#else - parse_filename_into_dirrecord ( entry->d_name, d, S_ISDIR(stbuf->st_mode) ); -#endif - - convert_date_and_time(&d->date_and_time, &stbuf->st_mtime); - d->flags |= entry->d_name[0] == '.' ? HIDDEN_FLAG : 0; - d->size = d->joliet_size = stbuf->st_size; - d->next_in_directory = parent->first_record; - parent->first_record = d; - return d; -} - -#endif - -/*----------------------------------------------------------------------------- -This function compares two directory records according to the ISO9660 rules -for directory sorting and returns a negative value if p is before q, or a -positive value if p is after q. ------------------------------------------------------------------------------*/ - -static int compare_directory_order(PDIR_RECORD p, PDIR_RECORD q) -{ - int n = strcmp(p->name_on_cd, q->name_on_cd); - if (n == 0) - n = strcmp(p->extension_on_cd, q->extension_on_cd); - return n; -} - -/*----------------------------------------------------------------------------- -This function compares two directory records (which must represent -directories) according to the ISO9660 rules for path table sorting and returns -a negative value if p is before q, or a positive vlaue if p is after q. ------------------------------------------------------------------------------*/ - -static int compare_path_table_order(PDIR_RECORD p, PDIR_RECORD q) -{ - int n = p->level - q->level; - if (p == q) - return 0; - if (n == 0) - { - n = compare_path_table_order(p->parent, q->parent); - if (n == 0) - n = compare_directory_order(p, q); - } - return n; -} - -/*----------------------------------------------------------------------------- -This function appends the specified string to the buffer source[]. ------------------------------------------------------------------------------*/ - -static void append_string_to_source(char *s) -{ - while (*s != 0) - *end_source++ = *s++; -} - -/*----------------------------------------------------------------------------- -This function scans all files from the current source[] (which must end in \, -and represents a directory already in the database as d), -and puts the appropriate directory records into the database in memory, with -the specified root. It calls itself recursively to scan all subdirectories. ------------------------------------------------------------------------------*/ - -#ifdef WIN32 - -static void -make_directory_records (PDIR_RECORD d) -{ - PDIR_RECORD new_d; - struct _finddata_t f; - char *old_end_source; - int findhandle; - - d->first_record = NULL; - strcpy(end_source, "*.*"); - - findhandle =_findfirst(source, &f); - if (findhandle != 0) - { - do - { - if ((f.attrib & (_A_HIDDEN | _A_SUBDIR)) == 0 && f.name[0] != '.') - { - if (strcmp(f.name, DIRECTORY_TIMESTAMP) == 0) - { - convert_date_and_time(&d->date_and_time, &f.time_write); - } - else - { - if (verbosity == VERBOSE) - { - old_end_source = end_source; - strcpy(end_source, f.name); - printf("%d: file %s\n", d->level, source); - end_source = old_end_source; - } - (void) new_directory_record(&f, d); - } - } - } - while (_findnext(findhandle, &f) == 0); - - _findclose(findhandle); - } - - strcpy(end_source, "*.*"); - findhandle= _findfirst(source, &f); - if (findhandle) - { - do - { - if (f.attrib & _A_SUBDIR && f.name[0] != '.') - { - old_end_source = end_source; - append_string_to_source(f.name); - *end_source++ = DIR_SEPARATOR_CHAR; - if (verbosity == VERBOSE) - { - *end_source = 0; - printf("%d: directory %s\n", d->level + 1, source); - } - if (d->level < MAX_LEVEL) - { - new_d = new_directory_record(&f, d); - new_d->next_in_path_table = root.next_in_path_table; - root.next_in_path_table = new_d; - new_d->level = d->level + 1; - make_directory_records(new_d); - } - else - { - error_exit("Directory is nested too deep"); - } - end_source = old_end_source; - } - } - while (_findnext(findhandle, &f) == 0); - - _findclose(findhandle); - } - - // sort directory - d->first_record = sort_linked_list(d->first_record, 0, compare_directory_order); -} - -#else - -/* Linux version */ -static void -make_directory_records (PDIR_RECORD d) -{ - PDIR_RECORD new_d; - DIR *dirp; - struct dirent *entry; - char *old_end_source; - struct stat stbuf; - char buf[MAX_PATH]; - - d->first_record = NULL; - -#ifdef HAVE_D_TYPE - dirp = opendir(source); - if (dirp != NULL) - { - while ((entry = readdir (dirp)) != NULL) - { - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) - continue; // skip self and parent - - if (entry->d_type == DT_REG) // normal file - { - // Check for an absolute path - if (source[0] == DIR_SEPARATOR_CHAR) - { - strcpy(buf, source); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, entry->d_name); - } - else - { - getcwd(buf, sizeof(buf)); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, source); - strcat(buf, entry->d_name); - } - - if (stat(buf, &stbuf) == -1) - { - error_exit("Can't access '%s' (%s)\n", buf, strerror(errno)); - return; - } - - if (strcmp(entry->d_name, DIRECTORY_TIMESTAMP) == 0) - { - convert_date_and_time(&d->date_and_time, &stbuf.st_ctime); - } - else - { - if (verbosity == VERBOSE) - { - printf("%d: file %s\n", d->level, buf); - } - (void) new_directory_record(entry, &stbuf, d); - } - } - } - closedir(dirp); - } - else - { - error_exit("Can't open %s\n", source); - return; - } - - dirp = opendir(source); - if (dirp != NULL) - { - while ((entry = readdir (dirp)) != NULL) - { - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) - continue; // skip self and parent - - if (entry->d_type == DT_DIR) // directory - { - old_end_source = end_source; - append_string_to_source(entry->d_name); - *end_source++ = DIR_SEPARATOR_CHAR; - *end_source = 0; - if (verbosity == VERBOSE) - { - printf("%d: directory %s\n", d->level + 1, source); - } - if (d->level < MAX_LEVEL) - { - // Check for an absolute path - if (source[0] == DIR_SEPARATOR_CHAR) - { - strcpy(buf, source); - } - else - { - getcwd(buf, sizeof(buf)); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, source); - } - - if (stat(buf, &stbuf) == -1) - { - error_exit("Can't access '%s' (%s)\n", buf, strerror(errno)); - return; - } - new_d = new_directory_record(entry, &stbuf, d); - new_d->next_in_path_table = root.next_in_path_table; - root.next_in_path_table = new_d; - new_d->level = d->level + 1; - make_directory_records(new_d); - } - else - { - error_exit("Directory is nested too deep"); - } - end_source = old_end_source; - *end_source = 0; - } - } - closedir(dirp); - } - else - { - error_exit("Can't open %s\n", source); - return; - } - -#else - - dirp = opendir(source); - if (dirp != NULL) - { - while ((entry = readdir (dirp)) != NULL) - { - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) - continue; // skip self and parent - - // Check for an absolute path - if (source[0] == DIR_SEPARATOR_CHAR) - { - strcpy(buf, source); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, entry->d_name); - } - else - { - getcwd(buf, sizeof(buf)); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, source); - strcat(buf, entry->d_name); - } - - if (stat(buf, &stbuf) == -1) - { - error_exit("Can't access '%s' (%s)\n", buf, strerror(errno)); - return; - } - - if (S_ISDIR(stbuf.st_mode)) - { - old_end_source = end_source; - append_string_to_source(entry->d_name); - *end_source++ = DIR_SEPARATOR_CHAR; - *end_source = 0; - if (verbosity == VERBOSE) - { - printf("%d: directory %s\n", d->level + 1, source); - } - - if (d->level < MAX_LEVEL) - { - new_d = new_directory_record(entry, &stbuf, d); - new_d->next_in_path_table = root.next_in_path_table; - root.next_in_path_table = new_d; - new_d->level = d->level + 1; - make_directory_records(new_d); - } - else - { - error_exit("Directory is nested too deep"); - } - - end_source = old_end_source; - *end_source = 0; - } - else if (S_ISREG(stbuf.st_mode)) - { - if (strcmp(entry->d_name, DIRECTORY_TIMESTAMP) == 0) - { - convert_date_and_time(&d->date_and_time, &stbuf.st_ctime); - } - else - { - if (verbosity == VERBOSE) - { - printf("%d: file %s\n", d->level, buf); - } - (void) new_directory_record(entry, &stbuf, d); - } - } - } - closedir (dirp); - } - else - { - error_exit("Can't open %s\n", source); - return; - } - -#endif - - // sort directory - d->first_record = sort_linked_list(d->first_record, 0, compare_directory_order); -} - -#endif - -/*----------------------------------------------------------------------------- -This function loads the file specifications for the file or directory -corresponding to the specified directory record into the source[] buffer. It -is recursive. ------------------------------------------------------------------------------*/ - -static void get_file_specifications(PDIR_RECORD d) -{ - if (d != &root) - { - get_file_specifications(d->parent); - if (d->joliet_name == NULL) - append_string_to_source(d->name); - else - append_string_to_source(d->joliet_name); - - if (((d->flags & DIRECTORY_FLAG) == 0 || joliet) && d->extension[0] != 0) - { - if (d->joliet_name == NULL) - { - *end_source++ = '.'; - append_string_to_source(d->extension); - } - } - if (d->flags & DIRECTORY_FLAG) - *end_source++ = DIR_SEPARATOR_CHAR; - } -} - -static void pass(void) -{ - PDIR_RECORD d; - PDIR_RECORD q; - unsigned int i; - char *t; - unsigned int index; - unsigned int name_length; - DWORD size; - DWORD number_of_sectors; - char *old_end_source; - int n; - FILE *file; - - // first 16 sectors are zeros - - write_block(16 * SECTOR_SIZE, 0); - - // Primary Volume Descriptor - - write_string("\1CD001\1"); - write_byte(0); - write_block(32, ' '); // system identifier - - t = volume_label; - for (i = 0; i < 32; i++) - write_byte( (BYTE)( (*t != 0) ? toupper(*t++) : ' ' ) ); - - write_block(8, 0); - write_both_endian_dword(total_sectors); - write_block(32, 0); - write_both_endian_word((WORD) 1); // volume set size - write_both_endian_word((WORD) 1); // volume sequence number - write_both_endian_word((WORD) 2048); // sector size - write_both_endian_dword(path_table_size); - write_little_endian_dword(little_endian_path_table_sector); - write_little_endian_dword((DWORD) 0); // second little endian path table - write_big_endian_dword(big_endian_path_table_sector); - write_big_endian_dword((DWORD) 0); // second big endian path table - write_directory_record(&root, DOT_RECORD, FALSE); - write_block(128, ' '); // volume set identifier - write_block(128, ' '); // publisher identifier - write_block(128, ' '); // data preparer identifier - write_block(128, ' '); // application identifier - write_block(37, ' '); // copyright file identifier - write_block(37, ' '); // abstract file identifier - write_block(37, ' '); // bibliographic file identifier - write_string("0000000000000000"); // volume creation - write_byte(0); - write_string("0000000000000000"); // most recent modification - write_byte(0); - write_string("0000000000000000"); // volume expires - write_byte(0); - write_string("0000000000000000"); // volume is effective - write_byte(0); - write_byte(1); - write_byte(0); - fill_sector(); - - - // Boot Volume Descriptor - - if (eltorito == TRUE) - { - write_byte(0); - write_string("CD001\1"); - write_string("EL TORITO SPECIFICATION"); // identifier - write_block(9, 0); // padding - write_block(32, 0); // unused - write_little_endian_dword(boot_catalog_sector); // pointer to boot catalog - fill_sector(); - } - - // Supplementary Volume Descriptor - - if (joliet) - { - write_string("\2CD001\1"); - write_byte(0); - - write_word_block(16, L' '); // system identifier - - t = volume_label; - for (i = 0; i < 16; i++) - write_big_endian_word( (BYTE)( (*t != 0) ? *t++ : ' ' ) ); - - write_block(8, 0); - write_both_endian_dword(total_sectors); - write_string("%/E"); - write_block(29, 0); - write_both_endian_word((WORD) 1); // volume set size - write_both_endian_word((WORD) 1); // volume sequence number - write_both_endian_word((WORD) 2048); // sector size - write_both_endian_dword(joliet_path_table_size); - write_little_endian_dword(joliet_little_endian_path_table_sector); - write_little_endian_dword((DWORD) 0); // second little endian path table - write_big_endian_dword(joliet_big_endian_path_table_sector); - write_big_endian_dword((DWORD) 0); // second big endian path table - write_directory_record(&root, DOT_RECORD, TRUE); - write_word_block(64, ' '); // volume set identifier - write_word_block(64, ' '); // publisher identifier - write_word_block(64, ' '); // data preparer identifier - write_word_block(64, ' '); // application identifier - write_block(37, ' '); // copyright file identifier - write_block(37, ' '); // abstract file identifier - write_block(37, ' '); // bibliographic file identifier - write_string("0000000000000000"); // volume creation - write_byte(0); - write_string("0000000000000000"); // most recent modification - write_byte(0); - write_string("0000000000000000"); // volume expires - write_byte(0); - write_string("0000000000000000"); // volume is effective - write_byte(0); - write_byte(1); - write_byte(0); - fill_sector(); - } - - - // Volume Descriptor Set Terminator - write_string("\377CD001\1"); - fill_sector(); - - // Boot Catalog - if (eltorito == TRUE) - { - boot_catalog_sector = cd.sector; - - // Validation entry - write_byte(1); - write_byte(0); // x86 boot code - write_little_endian_word(0); // reserved - write_string("ReactOS Foundation"); - write_block(6, 0); // padding - write_little_endian_word(0x62E); // checksum - write_little_endian_word(0xAA55); // signature - - // default entry - write_byte(0x88); // bootable - write_byte(0); // no emulation - write_big_endian_word(0); // load segment = default (0x07c0) - write_byte(0); // partition type - write_byte(0); // unused - write_little_endian_word(boot_image_size); // sector count - write_little_endian_dword(boot_image_sector); // sector - - fill_sector(); - } - - // Boot Image - if (eltorito == TRUE) - { - boot_image_sector = cd.sector; - - file = fopen(bootimage, "rb"); - if (file == NULL) - error_exit("Can't open %s\n", bootimage); - fseek(file, 0, SEEK_END); - size = ftell(file); - fseek(file, 0, SEEK_SET); - if (size == 0 || (size % 2048)) - error_exit("Invalid boot image size (%lu bytes)\n", size); - boot_image_size = size / 512; - while (size > 0) - { - n = BUFFER_SIZE - cd.count; - if ((DWORD) n > size) - n = size; - if (fread (cd.buffer + cd.count, n, 1, file) < 1) - { - fclose(file); - error_exit("Read error in file %s\n", bootimage); - } - cd.count += n; - if (cd.count == BUFFER_SIZE) - flush_buffer(); - cd.sector += n / SECTOR_SIZE; - cd.offset += n % SECTOR_SIZE; - size -= n; - } - fclose(file); -// fill_sector(); - } - - // Little Endian Path Table - little_endian_path_table_sector = cd.sector; - write_byte(1); - write_byte(0); // number of sectors in extended attribute record - write_little_endian_dword(root.sector); - write_little_endian_word((WORD) 1); - write_byte(0); - write_byte(0); - - index = 1; - root.path_table_index = 1; - for (d = root.next_in_path_table; d != NULL; d = d->next_in_path_table) - { - name_length = strlen(d->name_on_cd); - write_byte((BYTE)name_length); - write_byte(0); // number of sectors in extended attribute record - write_little_endian_dword(d->sector); - write_little_endian_word(d->parent->path_table_index); - write_string(d->name_on_cd); - if (name_length & 1) - write_byte(0); - d->path_table_index = ++index; - } - - path_table_size = (cd.sector - little_endian_path_table_sector) * - SECTOR_SIZE + cd.offset; - fill_sector(); - - // Big Endian Path Table - - big_endian_path_table_sector = cd.sector; - write_byte(1); - write_byte(0); // number of sectors in extended attribute record - write_big_endian_dword(root.sector); - write_big_endian_word((WORD) 1); - write_byte(0); - write_byte(0); - - for (d = root.next_in_path_table; d != NULL; d = d->next_in_path_table) - { - name_length = strlen(d->name_on_cd); - write_byte((BYTE)name_length); - write_byte(0); // number of sectors in extended attribute record - write_big_endian_dword(d->sector); - write_big_endian_word(d->parent->path_table_index); - write_string(d->name_on_cd); - if (name_length & 1) - write_byte(0); - } - fill_sector(); - - if (joliet) - { - // Little Endian Path Table - - joliet_little_endian_path_table_sector = cd.sector; - write_byte(1); - write_byte(0); // number of sectors in extended attribute record - write_little_endian_dword(root.joliet_sector); - write_little_endian_word((WORD) 1); - write_byte(0); - write_byte(0); - - for (d = root.next_in_path_table; d != NULL; d = d->next_in_path_table) - { - name_length = strlen(d->joliet_name) * 2; - write_byte((BYTE)name_length); - write_byte(0); // number of sectors in extended attribute record - write_little_endian_dword(d->joliet_sector); - write_little_endian_word(d->parent->path_table_index); - write_string_as_big_endian_unicode(d->joliet_name); - } - - joliet_path_table_size = (cd.sector - joliet_little_endian_path_table_sector) * - SECTOR_SIZE + cd.offset; - fill_sector(); - - // Big Endian Path Table - - joliet_big_endian_path_table_sector = cd.sector; - write_byte(1); - write_byte(0); // number of sectors in extended attribute record - write_big_endian_dword(root.joliet_sector); - write_big_endian_word((WORD) 1); - write_byte(0); - write_byte(0); - - for (d = root.next_in_path_table; d != NULL; d = d->next_in_path_table) - { - name_length = strlen(d->joliet_name) * 2; - write_byte((BYTE)name_length); - write_byte(0); // number of sectors in extended attribute record - write_big_endian_dword(d->joliet_sector); - write_big_endian_word(d->parent->path_table_index); - write_string_as_big_endian_unicode(d->joliet_name); - } - fill_sector(); - } - - // directories and files - for (d = &root; d != NULL; d = d->next_in_path_table) - { - // write directory - d->sector = cd.sector; - write_directory_record(d, DOT_RECORD, FALSE); - write_directory_record(d == &root ? d : d->parent, DOT_DOT_RECORD, FALSE); - for (q = d->first_record; q != NULL; q = q->next_in_directory) - { - write_directory_record(q, - q->flags & DIRECTORY_FLAG ? SUBDIRECTORY_RECORD : FILE_RECORD, - FALSE); - } - fill_sector(); - d->size = (cd.sector - d->sector) * SECTOR_SIZE; - - // write directory for joliet - if (joliet) - { - d->joliet_sector = cd.sector; - write_directory_record(d, DOT_RECORD, TRUE); - write_directory_record(d == &root ? d : d->parent, DOT_DOT_RECORD, TRUE); - for (q = d->first_record; q != NULL; q = q->next_in_directory) - { - write_directory_record(q, - q->flags & DIRECTORY_FLAG ? SUBDIRECTORY_RECORD : FILE_RECORD, - TRUE); - } - fill_sector(); - d->joliet_size = (cd.sector - d->joliet_sector) * SECTOR_SIZE; - bytes_in_directories += d->joliet_size; - } - - number_of_directories++; - bytes_in_directories += d->size; - - // write file data - for (q = d->first_record; q != NULL; q = q->next_in_directory) - { - if ((q->flags & DIRECTORY_FLAG) == 0) - { - q->sector = q->joliet_sector = cd.sector; - size = q->size; - if (cd.file == NULL) - { - number_of_sectors = (size + SECTOR_SIZE - 1) / SECTOR_SIZE; - cd.sector += number_of_sectors; - number_of_files++; - bytes_in_files += size; - unused_bytes_at_ends_of_files += - number_of_sectors * SECTOR_SIZE - size; - } - else - { - old_end_source = end_source; - get_file_specifications(q); - *end_source = 0; - if (verbosity == VERBOSE) - printf("Writing %s\n", source); - file = fopen(source, "rb"); - if (file == NULL) - error_exit("Can't open %s\n", source); - fseek(file, 0, SEEK_SET); - while (size > 0) - { - n = BUFFER_SIZE - cd.count; - if ((DWORD) n > size) - n = size; - if (fread (cd.buffer + cd.count, n, 1, file) < 1) - { - fclose(file); - error_exit("Read error in file %s\n", source); - } - cd.count += n; - if (cd.count == BUFFER_SIZE) - flush_buffer(); - cd.sector += n / SECTOR_SIZE; - cd.offset += n % SECTOR_SIZE; - size -= n; - } - fclose(file); - end_source = old_end_source; - fill_sector(); - } - } - } - } - - total_sectors = (DWORD)cd.sector; -} - -static char HELP[] = - "CDMAKE [-q] [-v] [-p] [-s N] [-m] [-b bootimage] [-j] source volume image\n" - "\n" - " source specifications of base directory containing all files to\n" - " be written to CD-ROM image\n" - " volume volume label\n" - " image image file or device\n" - " -q quiet mode - display nothing but error messages\n" - " -v verbose mode - display file information as files are\n" - " scanned and written - overrides -p option\n" - " -p show progress while writing\n" - " -s N abort operation before beginning write if image will be\n" - " larger than N megabytes (i.e. 1024*1024*N bytes)\n" - " -m accept punctuation marks other than underscores in\n" - " names and extensions\n" - " -b bootimage create bootable ElTorito CD-ROM using 'no emulation' mode\n" - " -j generate Joliet filename records\n"; - -/*----------------------------------------------------------------------------- -Program execution starts here. ------------------------------------------------------------------------------*/ - -int main(int argc, char **argv) -{ - BOOL q_option = FALSE; - BOOL v_option = FALSE; - int i; - char *t; - - if (argc < 2) - { - puts(HELP); - return 1; - } - - if (setjmp(error)) - return 1; - - // initialize root directory - - cd.buffer = malloc (BUFFER_SIZE); - if (cd.buffer == NULL) - error_exit("Insufficient memory"); - - memset(&root, 0, sizeof(root)); - root.level = 1; - root.flags = DIRECTORY_FLAG; - - // initialize CD-ROM write buffer - - cd.file = NULL; - cd.filespecs[0] = 0; - - // initialize parameters - - verbosity = NORMAL; - size_limit = 0; - show_progress = FALSE; - accept_punctuation_marks = FALSE; - source[0] = 0; - volume_label[0] = 0; - - eltorito = FALSE; - - // scan command line arguments - - for (i = 1; i < argc; i++) - { - if (memcmp(argv[i], "-s", 2) == 0) - { - t = argv[i] + 2; - if (*t == 0) - { - if (++i < argc) - t = argv[i]; - else - error_exit("Missing size limit parameter"); - } - while (isdigit(*t)) - size_limit = size_limit * 10 + *t++ - '0'; - if (size_limit < 1 || size_limit > 800) - error_exit("Invalid size limit"); - size_limit <<= 9; // convert megabyte to sector count - } - else if (strcmp(argv[i], "-q") == 0) - q_option = TRUE; - else if (strcmp(argv[i], "-v") == 0) - v_option = TRUE; - else if (strcmp(argv[i], "-p") == 0) - show_progress = TRUE; - else if (strcmp(argv[i], "-m") == 0) - accept_punctuation_marks = TRUE; - else if (strcmp(argv[i], "-j") == 0) - joliet = TRUE; - else if (strcmp(argv[i], "-b") == 0) - { - strcpy(bootimage, argv[++i]); - eltorito = TRUE; - } - else if (i + 2 < argc) - { - strcpy(source, argv[i++]); - strncpy(volume_label, argv[i++], sizeof(volume_label) - 1); - strcpy(cd.filespecs, argv[i]); - } - else - error_exit("Missing command line argument"); - } - if (v_option) - { - show_progress = FALSE; - verbosity = VERBOSE; - } - else if (q_option) - { - verbosity = QUIET; - show_progress = FALSE; - } - if (source[0] == 0) - error_exit("Missing source directory"); - if (volume_label[0] == 0) - error_exit("Missing volume label"); - if (cd.filespecs[0] == 0) - error_exit("Missing image file specifications"); - - - // set source[] and end_source to source directory, with a terminating directory separator - - end_source = source + strlen(source); - if (end_source[-1] == ':') - *end_source++ = '.'; - if (end_source[-1] != DIR_SEPARATOR_CHAR) - *end_source++ = DIR_SEPARATOR_CHAR; - - // scan all files and create directory structure in memory - - make_directory_records(&root); - - // sort path table entries - - root.next_in_path_table = sort_linked_list(root.next_in_path_table, 1, - compare_path_table_order); - - // initialize CD-ROM write buffer - - cd.file = NULL; - cd.sector = 0; - cd.offset = 0; - cd.count = 0; - - // make non-writing pass over directory structure to obtain the proper - // sector numbers and offsets and to determine the size of the image - - number_of_files = bytes_in_files = number_of_directories = - bytes_in_directories = unused_bytes_at_ends_of_files =0; - pass(); - - if (verbosity >= NORMAL) - { - printf("%s bytes ", edit_with_commas(bytes_in_files, TRUE)); - printf("in %s files\n", edit_with_commas(number_of_files, FALSE)); - printf("%s unused bytes at ends of files\n", - edit_with_commas(unused_bytes_at_ends_of_files, TRUE)); - printf("%s bytes ", edit_with_commas(bytes_in_directories, TRUE)); - printf("in %s directories\n", - edit_with_commas(number_of_directories, FALSE)); - printf("%s other bytes\n", edit_with_commas(root.sector * SECTOR_SIZE, TRUE)); - puts("-------------"); - printf("%s total bytes\n", - edit_with_commas(total_sectors * SECTOR_SIZE, TRUE)); - puts("============="); - } - - if (size_limit != 0 && total_sectors > size_limit) - error_exit("Size limit exceeded"); - - // re-initialize CD-ROM write buffer - - cd.file = fopen(cd.filespecs, "w+b"); - if (cd.file == NULL) - error_exit("Can't open image file %s", cd.filespecs); - cd.sector = 0; - cd.offset = 0; - cd.count = 0; - - - // make writing pass over directory structure - - pass(); - - if (cd.count > 0) - flush_buffer(); - if (show_progress) - printf("\r \n"); - if (fclose(cd.file) != 0) - { - cd.file = NULL; - error_exit("File write error in image file %s", cd.filespecs); - } - - if (verbosity >= NORMAL) - puts("CD-ROM image made successfully"); - - release_memory(); - return 0; -} - - -/* EOF */ diff --git a/reactos/tools/cdmake/cdmake.rbuild b/reactos/tools/cdmake/cdmake.rbuild deleted file mode 100644 index 49fb45312ff..00000000000 --- a/reactos/tools/cdmake/cdmake.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - - cdmake.c - llmosrt.c - diff --git a/reactos/tools/cdmake/llmosrt.c b/reactos/tools/cdmake/llmosrt.c deleted file mode 100644 index ef2e1794b79..00000000000 --- a/reactos/tools/cdmake/llmosrt.c +++ /dev/null @@ -1,106 +0,0 @@ -/* $Id$ */ -/* A Linked-List Memory Sort - by Philip J. Erdelsky - pje@acm.org - http://www.alumni.caltech.edu/~pje/ -*/ - -/* According to his website, this file was released into the public domain by Phillip J. Erdelsky */ - - -#include - -void *sort_linked_list(void *p, unsigned index, int (*compare)(void *, void *)) -{ - unsigned base; - unsigned long block_size; - - struct record - { - struct record *next[1]; - /* other members not directly accessed by this function */ - }; - - struct tape - { - struct record *first, *last; - unsigned long count; - } tape[4]; - - /* Distribute the records alternately to tape[0] and tape[1]. */ - - tape[0].count = tape[1].count = 0L; - tape[0].first = NULL; - base = 0; - while (p != NULL) - { - struct record *next = ((struct record *)p)->next[index]; - ((struct record *)p)->next[index] = tape[base].first; - tape[base].first = ((struct record *)p); - tape[base].count++; - p = next; - base ^= 1; - } - - /* If the list is empty or contains only a single record, then */ - /* tape[1].count == 0L and this part is vacuous. */ - - for (base = 0, block_size = 1L; tape[base+1].count != 0L; - base ^= 2, block_size <<= 1) - { - int dest; - struct tape *tape0, *tape1; - tape0 = tape + base; - tape1 = tape + base + 1; - dest = base ^ 2; - tape[dest].count = tape[dest+1].count = 0; - for (; tape0->count != 0; dest ^= 1) - { - unsigned long n0, n1; - struct tape *output_tape = tape + dest; - n0 = n1 = block_size; - while (1) - { - struct record *chosen_record; - struct tape *chosen_tape; - if (n0 == 0 || tape0->count == 0) - { - if (n1 == 0 || tape1->count == 0) - break; - chosen_tape = tape1; - n1--; - } - else if (n1 == 0 || tape1->count == 0) - { - chosen_tape = tape0; - n0--; - } - else if ((*compare)(tape0->first, tape1->first) > 0) - { - chosen_tape = tape1; - n1--; - } - else - { - chosen_tape = tape0; - n0--; - } - chosen_tape->count--; - chosen_record = chosen_tape->first; - chosen_tape->first = chosen_record->next[index]; - if (output_tape->count == 0) - output_tape->first = chosen_record; - else - output_tape->last->next[index] = chosen_record; - output_tape->last = chosen_record; - output_tape->count++; - } - } - } - - if (tape[base].count > 1L) - tape[base].last->next[index] = NULL; - return tape[base].first; -} - -/* EOF */ diff --git a/reactos/tools/cdmake/readme.txt b/reactos/tools/cdmake/readme.txt deleted file mode 100644 index fd0301b30f8..00000000000 --- a/reactos/tools/cdmake/readme.txt +++ /dev/null @@ -1,94 +0,0 @@ - CD-ROM Maker - Philip J. Erdelsky - -The CDMAKE utility converts files from DOS/Windows format to ISO9660 -(CD-ROM) format. - -First, gather all the files to be converted and put them into a single -base directory and its subdirectories, arranged just the way you want -them on the CD-ROM. Remember that ISO9660 allows subdirectories to be -nested only eight levels deep. Therefore, if the base directory is -C:\CDROM, - - C:\CDROM\D2\D3\D4\D5\D6\D7\D8\FOO.TXT is permitted, but - - C:\CDROM\D2\D3\D4\D5\D6\D7\D8\D9\FOO.TXT is forbidden. - -Also, ISO9660 does not allow directories to have extensions, although -DOS does. - -Finally, the characters in file and directory names and file extensions -must be letters, digits or underscores. Other punctuation marks -permitted by DOS/Windows are forbidden by ISO9660. You can use the -c -option to override this restriction, but the resulting CD-ROM may not be -readable on systems other than DOS/Windows. - -Files in the base directory will be written to the root directory of the -CD-ROM image. All subdirectories of the base directory will appear as -subdirectories of the root directory of the CD-ROM image. Their -contents, and the contents of their subdirectories, down to the eighth -level, will be faithfully copied to the CD-ROM image. - -System files will not be written to the CD-ROM image. Hidden files will -be written to the CD-ROM image, and will retain their hidden attributes. -Read-only files will be written, and will remain read-only on the -CD-ROM, but this does not distinguish them in any way, because on a -CD-ROM all files are read-only. The archive attribute will be lost. - -File and directory date and time stamps will be preserved in the CD-ROM -image. - -The utility is called up by a command line of the following form: - - CDMAKE [-q] [-v] [-p] [-s N] [-m] [-b bootimage] source volume image - - source specifications of base directory containing all files to - be written to CD-ROM image - - volume volume label - - image image file or device - - -q quiet mode - display nothing but error messages - - -v verbose mode - display file information as files are - scanned and written - overrides -p option - - -p show progress while writing - - -s N abort operation before beginning write if image will be - larger than N megabytes (i.e. 1024*1024*N bytes) - - -m accept punctuation marks other than underscores in - names and extensions - - -b bootimage create bootable ElTorito CD-ROM using 'no emulation' mode - - -The utility makes three passes over the source files: - - (1) The scanning pass, in which the names and extensions are - checked for validity, and the names, extensions, sizes, dates, - times and attributes are recorded internally. The files are not - actually read during this pass. - - (2) The layout pass, in which the sizes and positions of - directories, files and other items in the CD-ROM image are - determined. - - (3) The writing pass, in which the files are actually read and the - CD-ROM image is actually written to the specified file or - device. The image is always written sequentially. - -If neither the -q nor the -v option is used, CDMAKE will display the -volume label, size, number of files and directories and the total bytes -in each at the end of the layout pass. - -If the -p option is used, and is not overridden by the -v option, then -during the writing pass, CDMAKE will display the number of bytes still -to be written to the CD-ROM image, updating it frequently. The number -will decrease as the operation progresses, and will reach zero when the -operation is complete. - -The operation of CDMAKE can be aborted by typing Ctrl-C when the utility -is displaying text of any kind. diff --git a/reactos/tools/create_nls/Readme b/reactos/tools/create_nls/Readme deleted file mode 100644 index e72804b6b74..00000000000 --- a/reactos/tools/create_nls/Readme +++ /dev/null @@ -1,23 +0,0 @@ -Create_nls - .nls file creation tool ------------------------------------- - -Create_nls is a tool to create binary .nls files from codepage mapping -files provided by Unicode Inc. Due to the confusing license these files -are not part of the ReactOS source tree. - - -You can easily download the files from 'http://www.unicode.org/public' or -'ftp://ftp.unicode.org/pub'. Download the directory structure of the web/ftp -site into the unicode.org subdirectory and create_nls will build the .nls -files. - -Makefile targets: - 'make': builds create_nls tool. - 'make clean': deletes all executable and object files - 'make nls': generates binary .nls files. - 'make clean_nls': deletes binary .nls files. - -Since the binary .nls files are part of the ReactOS source tree it is not -necessary to build these files yourself. Therefore create_nls is not -integrated with the main makefile. You will have to build and run it -separately. diff --git a/reactos/tools/create_nls/create_nls.c b/reactos/tools/create_nls/create_nls.c deleted file mode 100644 index 4e21ce31b0f..00000000000 --- a/reactos/tools/create_nls/create_nls.c +++ /dev/null @@ -1,969 +0,0 @@ -/* - * Tool for creating NT-like NLS files for Unicode <-> Codepage conversions. - * Tool for creating NT-like l_intl.nls file for case mapping of unicode - * characters. - * Copyright 2000 Timoshkov Dmitry - * Copyright 2001 Matei Alexandru - * - * Sources of information: - * Andrew Kozin's YAW project http://www.chat.ru/~stanson/yaw_en.html - * Ove Kõven's investigations http://www.ping.uio.no/~ovehk/nls - */ -#include -#include -#include -#include -#include -#include - -static const WCHAR * const uprtable[256]; -static const WCHAR * const lwrtable[256]; - -#define NLSDIR "../../media/nls" -#define LIBDIR "unicode.org/" - -typedef struct { - WORD wSize; /* in words 0x000D */ - WORD CodePage; - WORD MaxCharSize; /* 1 or 2 */ - BYTE DefaultChar[MAX_DEFAULTCHAR]; - WCHAR UnicodeDefaultChar; - WCHAR unknown1; - WCHAR unknown2; - BYTE LeadByte[MAX_LEADBYTES]; -} __attribute__((packed)) NLS_FILE_HEADER; - -/* -Support for translation from the multiple unicode chars -to the single code page char. - -002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;; -00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; -2010;HYPHEN;Pd;0;ON;;;;;N;;;;; -2011;NON-BREAKING HYPHEN;Pd;0;ON; 2010;;;;N;;;;; -2013;EN DASH;Pd;0;ON;;;;;N;;;;; -2014;EM DASH;Pd;0;ON;;;;;N;;;;; -2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; -*/ - -/* HYPHEN-MINUS aliases */ -static WCHAR hyphen_aliases[] = {0x00AD,0x2010,0x2011,0x2013,0x2014,0x2015,0}; - -static struct { - WCHAR cp_char; - WCHAR *alias; /* must be 0 terminated */ -} u2cp_alias[] = { -/* HYPHEN-MINUS aliases */ -{0x002D, hyphen_aliases} -}; - -static void patch_aliases(void *u2cp, CPINFOEXA *cpi) -{ - int i, j; - WCHAR *wc, *alias; - BYTE *c; - - if(cpi->MaxCharSize == 2) { - wc = (WCHAR *)u2cp; - for(i = 0; i < 65536; i++) { - for(j = 0; j < sizeof(u2cp_alias)/sizeof(u2cp_alias[0]); j++) { - alias = u2cp_alias[j].alias; - while(*alias) { - if(*alias == i && wc[i] == *(WCHAR *)cpi->DefaultChar) { - wc[i] = u2cp_alias[j].cp_char; - } - alias++; - } - } - } - } - else { - c = (BYTE *)u2cp; - for(i = 0; i < 65536; i++) { - for(j = 0; j < sizeof(u2cp_alias)/sizeof(u2cp_alias[0]); j++) { - alias = u2cp_alias[j].alias; - while(*alias) { - if(*alias == i && c[i] == cpi->DefaultChar[0] && u2cp_alias[j].cp_char < 256) { - c[i] = (BYTE)u2cp_alias[j].cp_char; - } - alias++; - } - } - } - } -} - -static BOOL write_unicode2cp_table(FILE *out, CPINFOEXA *cpi, WCHAR *table) -{ - void *u2cp; - WCHAR *wc; - CHAR *c; - int i; - BOOL ret = TRUE; - - u2cp = malloc(cpi->MaxCharSize * 65536); - if(!u2cp) { - printf("Not enough memory for Unicode to Codepage table\n"); - return FALSE; - } - - if(cpi->MaxCharSize == 2) { - wc = (WCHAR *)u2cp; - for(i = 0; i < 65536; i++) - wc[i] = *(WCHAR *)cpi->DefaultChar; - - for(i = 0; i < 65536; i++) - if (table[i] != '?') - wc[table[i]] = (WCHAR)i; - } - else { - c = (CHAR *)u2cp; - for(i = 0; i < 65536; i++) - c[i] = cpi->DefaultChar[0]; - - for(i = 0; i < 256; i++) - if (table[i] != '?') - c[table[i]] = (CHAR)i; - } - - patch_aliases(u2cp, cpi); - - if(fwrite(u2cp, 1, cpi->MaxCharSize * 65536, out) != cpi->MaxCharSize * 65536) - ret = FALSE; - - free(u2cp); - - return ret; -} - -static BOOL write_lb_ranges(FILE *out, CPINFOEXA *cpi, WCHAR *table) -{ - WCHAR sub_table[256]; - WORD offset, offsets[256]; - int i, j, range; - - memset(offsets, 0, sizeof(offsets)); - - offset = 0; - - for(i = 0; i < MAX_LEADBYTES; i += 2) { - for(range = cpi->LeadByte[i]; range != 0 && range <= cpi->LeadByte[i + 1]; range++) { - offset += 256; - offsets[range] = offset; - } - } - - if(fwrite(offsets, 1, sizeof(offsets), out) != sizeof(offsets)) - return FALSE; - - for(i = 0; i < MAX_LEADBYTES; i += 2) { - for(range = cpi->LeadByte[i]; range != 0 && range <= cpi->LeadByte[i + 1]; range++) { - /*printf("Writing sub table for LeadByte %02X\n", range);*/ - for(j = MAKEWORD(0, range); j <= MAKEWORD(0xFF, range); j++) { - sub_table[j - MAKEWORD(0, range)] = table[j]; - } - - if(fwrite(sub_table, 1, sizeof(sub_table), out) != sizeof(sub_table)) - return FALSE; - } - } - - return TRUE; -} - -static BOOL create_nls_file(char *name, CPINFOEXA *cpi, WCHAR *table, WCHAR *oemtable) -{ - FILE *out; - NLS_FILE_HEADER nls; - WORD wValue, number_of_lb_ranges, number_of_lb_subtables, i; - - printf("Creating NLS table \"%s\"\n", name); - - if(!(out = fopen(name, "wb"))) { - printf("Could not create file \"%s\"\n", name); - return FALSE; - } - - memset(&nls, 0, sizeof(nls)); - - nls.wSize = sizeof(nls) / sizeof(WORD); - nls.CodePage = cpi->CodePage; - nls.MaxCharSize = cpi->MaxCharSize; - memcpy(nls.DefaultChar, cpi->DefaultChar, MAX_DEFAULTCHAR); - nls.UnicodeDefaultChar = cpi->UnicodeDefaultChar; - nls.unknown1 = '?'; - nls.unknown2 = '?'; - memcpy(nls.LeadByte, cpi->LeadByte, MAX_LEADBYTES); - - if(fwrite(&nls, 1, sizeof(nls), out) != sizeof(nls)) { - fclose(out); - printf("Could not write to file \"%s\"\n", name); - return FALSE; - } - - number_of_lb_ranges = 0; - number_of_lb_subtables = 0; - - for(i = 0; i < MAX_LEADBYTES; i += 2) { - if(cpi->LeadByte[i] != 0 && cpi->LeadByte[i + 1] > cpi->LeadByte[i]) { - number_of_lb_ranges++; - number_of_lb_subtables += cpi->LeadByte[i + 1] - cpi->LeadByte[i] + 1; - } - } - - /*printf("Number of LeadByte ranges %d\n", number_of_lb_ranges);*/ - /*printf("Number of LeadByte subtables %d\n", number_of_lb_subtables);*/ - - /* Calculate offset to Unicode to CP table in words: - * 1. (256 * sizeof(WORD)) primary CP to Unicode table + - * 2. (WORD) optional OEM glyph table size in words + - * 3. OEM glyph table size in words * sizeof(WORD) + - * 4. (WORD) Number of DBCS LeadByte ranges + - * 5. if (Number of DBCS LeadByte ranges != 0) 256 * sizeof(WORD) offsets of lead byte sub tables - * 6. (Number of DBCS LeadByte sub tables * 256 * sizeof(WORD)) LeadByte sub tables + - * 7. (WORD) Unknown flag - */ - - wValue = (256 * sizeof(WORD) + /* 1 */ - sizeof(WORD) + /* 2 */ - ((oemtable !=NULL) ? (256 * sizeof(WORD)) : 0) + /* 3 */ - sizeof(WORD) + /* 4 */ - ((number_of_lb_subtables != 0) ? 256 * sizeof(WORD) : 0) + /* 5 */ - number_of_lb_subtables * 256 * sizeof(WORD) + /* 6 */ - sizeof(WORD) /* 7 */ - ) / sizeof(WORD); - - /* offset of Unicode to CP table in words */ - fwrite(&wValue, 1, sizeof(wValue), out); - - /* primary CP to Unicode table */ - if(fwrite(table, 1, 256 * sizeof(WCHAR), out) != 256 * sizeof(WCHAR)) { - fclose(out); - printf("Could not write to file \"%s\"\n", name); - return FALSE; - } - - /* optional OEM glyph table size in words */ - wValue = (oemtable != NULL) ? (256 * sizeof(WORD)) : 0; - fwrite(&wValue, 1, sizeof(wValue), out); - - /* optional OEM to Unicode table */ - if (oemtable) { - if(fwrite(oemtable, 1, 256 * sizeof(WCHAR), out) != 256 * sizeof(WCHAR)) { - fclose(out); - printf("Could not write to file \"%s\"\n", name); - return FALSE; - } - } - - /* Number of DBCS LeadByte ranges */ - fwrite(&number_of_lb_ranges, 1, sizeof(number_of_lb_ranges), out); - - /* offsets of lead byte sub tables and lead byte sub tables */ - if(number_of_lb_ranges > 0) { - if(!write_lb_ranges(out, cpi, table)) { - fclose(out); - printf("Could not write to file \"%s\"\n", name); - return FALSE; - } - } - - /* Unknown flag */ - wValue = 0; - fwrite(&wValue, 1, sizeof(wValue), out); - - if(!write_unicode2cp_table(out, cpi, table)) { - fclose(out); - printf("Could not write to file \"%s\"\n", name); - return FALSE; - } - - fclose(out); - return TRUE; -} - -/* correct the codepage information such as default chars */ -static void patch_codepage_info(CPINFOEXA *cpi) -{ - /* currently nothing */ -} - -static WCHAR *Load_CP2Unicode_Table(char *table_name, UINT cp, CPINFOEXA *cpi) -{ - char buf[256]; - char *p; - DWORD n, value; - FILE *file; - WCHAR *table; - int lb_ranges, lb_range_started, line; - - printf("Loading translation table \"%s\"\n", table_name); - - /* Init to default values */ - memset(cpi, 0, sizeof(CPINFOEXA)); - cpi->CodePage = cp; - *(WCHAR *)cpi->DefaultChar = '?'; - cpi->MaxCharSize = 1; - cpi->UnicodeDefaultChar = '?'; - - patch_codepage_info(cpi); - - table = (WCHAR *)malloc(sizeof(WCHAR) * 65536); - if(!table) { - printf("Not enough memory for Codepage to Unicode table\n"); - return NULL; - } - - for(n = 0; n < 256; n++) - table[n] = (WCHAR)n; - - for(n = 256; n < 65536; n++) - table[n] = cpi->UnicodeDefaultChar; - - file = fopen(table_name, "r"); - if(file == NULL) { - free(table); - return NULL; - } - - line = 0; - lb_ranges = 0; - lb_range_started = 0; - - while(fgets(buf, sizeof(buf), file)) { - line++; - p = buf; - while(isspace(*p)) p++; - - if(!*p || p[0] == '#') - continue; - - n = strtol(p, &p, 0); - if(n > 0xFFFF) { - printf("Line %d: Entry 0x%06lX: File \"%s\" corrupted\n", line, n, table_name); - continue; - } - - if(n > 0xFF && cpi->MaxCharSize != 2) { - /*printf("Line %d: Entry 0x%04lX: Switching to DBCS\n", line, n);*/ - cpi->MaxCharSize = 2; - } - - while(isspace(*p)) p++; - - if(!*p || p[0] == '#') { - /*printf("Line %d: Entry 0x%02lX has no Unicode value\n", line, n);*/ - } - else { - value = strtol(p, &p, 0); - if(value > 0xFFFF) { - printf("Line %d: Entry 0x%06lX unicode value: File \"%s\" corrupted\n", line, n, table_name); - } - table[n] = (WCHAR)value; - } - - /* wait for comment */ - while(*p && *p != '#') p++; - - if(*p == '#' && strstr(p, "DBCS LEAD BYTE")) { - /*printf("Line %d, entry 0x%02lX DBCS LEAD BYTE\n", line, n);*/ - if(n > 0xFF) { - printf("Line %d: Entry 0x%04lX: Error: DBCS lead byte overflowed\n", line, n); - continue; - } - - table[n] = (WCHAR)0; - - if(lb_range_started) { - cpi->LeadByte[(lb_ranges - 1) * 2 + 1] = (BYTE)n; - } - else { - /*printf("Line %d: Starting new DBCS lead byte range, entry 0x%02lX\n", line, n);*/ - if(lb_ranges < MAX_LEADBYTES/2) { - lb_ranges++; - lb_range_started = 1; - cpi->LeadByte[(lb_ranges - 1) * 2] = (BYTE)n; - } - else - printf("Line %d: Error: could not start new lead byte range\n", line); - } - } - else { - if(lb_range_started) - lb_range_started = 0; - } - } - - fclose(file); - - return table; -} - -static WCHAR *Load_OEM2Unicode_Table(char *table_name, WCHAR *def_table, UINT cp, CPINFOEXA *cpi) -{ - char buf[256]; - char *p; - DWORD n, value; - FILE *file; - WCHAR *table; - int line; - - printf("Loading oem glyph table \"%s\"\n", table_name); - - table = (WCHAR *)malloc(sizeof(WCHAR) * 65536); - if(!table) { - printf("Not enough memory for Codepage to Unicode table\n"); - return NULL; - } - - memcpy(table, def_table, 65536 * sizeof(WCHAR)); - - file = fopen(table_name, "r"); - if(file == NULL) { - free(table); - return NULL; - } - - while(fgets(buf, sizeof(buf), file)) { - line++; - p = buf; - while(isspace(*p)) p++; - - if(!*p || p[0] == '#') - continue; - - value = strtol(p, &p, 16); - if(value > 0xFFFF) { - printf("Line %d: Entry 0x%06lX: File \"%s\" corrupted\n", line, value, table_name); - continue; - } - - while(isspace(*p)) p++; - - if(!*p || p[0] == '#') { - /*printf("Line %d: Entry 0x%02lX has no Unicode value\n", line, n);*/ - continue; - } - else { - n = strtol(p, &p, 16); - if(n > 0xFFFF) { - printf("Line %d: Entry 0x%06lX unicode value: File \"%s\" corrupted\n", line, value, table_name); - continue; - } - } - - if (cpi->CodePage == 864) { - while(isspace(*p)) p++; - - if(!*p || p[0] == '#' || p[0] == '-') { - /*printf("Line %d: Entry 0x%02lX has no Unicode value\n", line, n);*/ - continue; - } - else { - n = strtol(p, &p, 16); - if(n > 0xFFFF) { - printf("Line %d: Entry 0x%06lX oem value: File \"%s\" corrupted\n", line, value, table_name); - } - continue; - } - } - - table[n] = (WCHAR)value; - } - - fclose(file); - - return table; -} - -int write_nls_files() -{ - WCHAR *table; - WCHAR *oemtable; - char nls_filename[256]; - CPINFOEXA cpi; - int i; - struct code_page { - UINT cp; - BOOL oem; - char *table_filename; - char *comment; - } pages[] = { - {37, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT", "IBM EBCDIC US Canada"}, - {424, FALSE, LIBDIR"MAPPINGS/VENDORS/MISC/CP424.TXT", "IBM EBCDIC Hebrew"}, - {437, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP437.TXT", "OEM United States"}, - {500, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/EBCDIC/CP500.TXT", "IBM EBCDIC International"}, - /*{708, FALSE, "", "Arabic ASMO"},*/ - /*{720, FALSE, "", "Arabic Transparent ASMO"},*/ - {737, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP737.TXT", "OEM Greek 437G"}, - {775, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP775.TXT", "OEM Baltic"}, - {850, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP850.TXT", "OEM Multilingual Latin 1"}, - {852, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP852.TXT", "OEM Slovak Latin 2"}, - {855, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP855.TXT", "OEM Cyrillic" }, - {856, TRUE, LIBDIR"MAPPINGS/VENDORS/MISC/CP856.TXT", "Hebrew PC"}, - {857, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP857.TXT", "OEM Turkish"}, - {860, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP860.TXT", "OEM Portuguese"}, - {861, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP861.TXT", "OEM Icelandic"}, - {862, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP862.TXT", "OEM Hebrew"}, - {863, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP863.TXT", "OEM Canadian French"}, - {864, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP864.TXT", "OEM Arabic"}, - {865, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP865.TXT", "OEM Nordic"}, - {866, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP866.TXT", "OEM Russian"}, - {869, TRUE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP869.TXT", "OEM Greek"}, - /*{870, FALSE, "", "IBM EBCDIC Multilingual/ROECE (Latin 2)"},*/ - {874, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP874.TXT", "ANSI/OEM Thai"}, - {875, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/EBCDIC/CP875.TXT", "IBM EBCDIC Greek"}, - {878, FALSE, LIBDIR"MAPPINGS/VENDORS/MISC/KOI8-R.TXT", "Russian KOI8"}, - {932, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT", "ANSI/OEM Japanese Shift-JIS"}, - {936, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT", "ANSI/OEM Simplified Chinese GBK"}, - {949, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT", "ANSI/OEM Korean Unified Hangul"}, - {950, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT", "ANSI/OEM Traditional Chinese Big5"}, - {1006, FALSE, LIBDIR"MAPPINGS/VENDORS/MISC/CP1006.TXT", "IBM Arabic"}, - {1026, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/EBCDIC/CP1026.TXT", "IBM EBCDIC Latin 5 Turkish"}, - {1250, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT", "ANSI Eastern Europe"}, - {1251, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT", "ANSI Cyrillic"}, - {1252, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT", "ANSI Latin 1"}, - {1253, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT", "ANSI Greek"}, - {1254, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT", "ANSI Turkish"}, - {1255, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT", "ANSI Hebrew"}, - {1256, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT", "ANSI Arabic"}, - {1257, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT", "ANSI Baltic"}, - {1258, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT", "ANSI/OEM Viet Nam"}, - {10000, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/ROMAN.TXT", "Mac Roman"}, - {10006, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/GREEK.TXT", "Mac Greek"}, - {10007, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/CYRILLIC.TXT", "Mac Cyrillic"}, - {10029, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/LATIN2.TXT", "Mac Latin 2"}, - {10079, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/ICELAND.TXT", "Mac Icelandic"}, - {10081, FALSE, LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/TURKISH.TXT", "Mac Turkish"}, - /*{20000, FALSE, "", "CNS Taiwan"},*/ - /*{20001, FALSE, "", "TCA Taiwan"},*/ - /*{20002, FALSE, "", "Eten Taiwan"},*/ - /*{20003, FALSE, "", "IBM5550 Taiwan"},*/ - /*{20004, FALSE, "", "TeleText Taiwan"},*/ - /*{20005, FALSE, "", "Wang Taiwan"},*/ - /*{20105, FALSE, "", "IA5 IRV International Alphabet No.5"},*/ - /*{20106, FALSE, "", "IA5 German"},*/ - /*{20107, FALSE, "", "IA5 Swedish"},*/ - /*{20108, FALSE, "", "IA5 Norwegian"},*/ - /*{20127, FALSE, "", "US ASCII"}, */ - /*{20261, FALSE, "", "T.61"},*/ - /*{20269, FALSE, "", "ISO 6937 NonSpacing Accent"},*/ - /*{20273, FALSE, "", "IBM EBCDIC Germany"},*/ - /*{20277, FALSE, "", "IBM EBCDIC Denmark/Norway"},*/ - /*{20278, FALSE, "", "IBM EBCDIC Finland/Sweden"},*/ - /*{20280, FALSE, "", "IBM EBCDIC Italy"},*/ - /*{20284, FALSE, "", "IBM EBCDIC Latin America/Spain"},*/ - /*{20285, FALSE, "", "IBM EBCDIC United Kingdom"},*/ - /*{20290, FALSE, "", "IBM EBCDIC Japanese Katakana Extended"},*/ - /*{20297, FALSE, "", "IBM EBCDIC France"},*/ - /*{20420, FALSE, "", "IBM EBCDIC Arabic"},*/ - /*{20423, FALSE, "IBM869.TXT", "IBM EBCDIC Greek"},*/ - /*{20424, FALSE, "", "IBM EBCDIC Hebrew"},*/ - /*{20833, FALSE, "", "IBM EBCDIC Korean Extended"},*/ - /*{20838, FALSE, "", "IBM EBCDIC Thai"},*/ - {20871, FALSE, "ReactOS/IBMCP861.TXT", "IBM EBCDIC Icelandic"}, - /*{20880, FALSE, "", "IBM EBCDIC Cyrillic (Russian)"},*/ - {20866, FALSE, LIBDIR"MAPPINGS/VENDORS/MISC/KOI8-R.TXT", "Russian KOI8"}, - /*{20905, FALSE, "", "IBM EBCDIC Turkish"},*/ - /*{21025, FALSE, "", "IBM EBCDIC Cyrillic (Serbian, Bulgarian)"},*/ - /*{21027, FALSE, "", "Ext Alpha Lowercase"},*/ - {28591, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-1.TXT", "ISO 8859-1 Latin 1"}, - {28592, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-2.TXT", "ISO 8859-2 Eastern Europe"}, - {28593, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-3.TXT", "ISO 8859-3 Turkish"}, - {28594, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-4.TXT", "ISO 8859-4 Baltic"}, - {28595, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-5.TXT", "ISO 8859-5 Cyrillic"}, - {28596, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-6.TXT", "ISO 8859-6 Arabic"}, - {28597, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-7.TXT", "ISO 8859-7 Greek"}, - {28598, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-8.TXT", "ISO 8859-8 Hebrew"}, - {28599, FALSE, LIBDIR"MAPPINGS/ISO8859/8859-9.TXT", "ISO 8859-9 Latin 5"} - }; - - for(i = 0; i < sizeof(pages)/sizeof(pages[0]); i++) { - table = Load_CP2Unicode_Table(pages[i].table_filename, pages[i].cp, &cpi); - if(!table) { - printf("Could not load \"%s\" (%s)\n", pages[i].table_filename, pages[i].comment); - continue; - } - - if (pages[i].oem) { - oemtable = Load_OEM2Unicode_Table(LIBDIR"MAPPINGS/VENDORS/MISC/IBMGRAPH.TXT", table, pages[i].cp, &cpi); - if(!oemtable) { - printf("Could not load \"%s\" (%s)\n", LIBDIR"MAPPINGS/VENDORS/MISC/IBMGRAPH.TXT", "IBM OEM glyph table"); - continue; - } - } - - sprintf(nls_filename, "%s/c_%03d.nls", NLSDIR, cpi.CodePage); - if(!create_nls_file(nls_filename, &cpi, table, pages[i].oem ? oemtable : NULL)) { - printf("Could not write \"%s\" (%s)\n", nls_filename, pages[i].comment); - } - - if (pages[i].oem) - free(oemtable); - - free(table); - } - - return 0; -} - - - -static WORD *to_upper_org = NULL, *to_lower_org = NULL; - -#if 0 -static WORD diffs[256]; -static int number_of_diffs; -#endif - -static WORD number_of_subtables_with_diffs; -/* pointers to subtables with 16 elements in each to the main table */ -static WORD *subtables_with_diffs[4096]; - -static WORD number_of_subtables_with_offsets; -/* subtables with 16 elements */ -static WORD subtables_with_offsets[4096 * 16]; - -static void test_packed_table(WCHAR *table) -{ - WCHAR test_str[] = L"This is an English text. \x0CF\x0EE-\x0F0\x0F3\x0F1\x0F1\x0EA\x0E8 \x0FF \x0EF\x0E8\x0F1\x0E0\x0F2\x0FC \x0F3\x0EC\x0E5\x0FE \x0ED\x0E5\x0EC\x0ED\x0EE\x0E6\x0EA\x0EE. 1234567890"; - //WORD diff, off; - //WORD *sub_table; - DWORD i, len; - - len = lstrlenW(test_str); - - for(i = 0; i < len + 1; i++) { - /*off = table[HIBYTE(test_str[i])]; - - sub_table = table + off; - off = sub_table[LOBYTE(test_str[i]) >> 4]; - - sub_table = table + off; - off = LOBYTE(test_str[i]) & 0x0F; - - diff = sub_table[off]; - - test_str[i] += diff;*/ - test_str[i] += table[table[table[HIBYTE(test_str[i])] + (LOBYTE(test_str[i]) >> 4)] + (LOBYTE(test_str[i]) & 0x0F)]; - } -/* - { - FILE *file; - static int n = 0; - char name[20]; - - sprintf(name, "text%02d.dat", n++); - file = fopen(name, "wb"); - fwrite(test_str, len * sizeof(WCHAR), 1, file); - fclose(file); - }*/ -} - -static BOOL CreateCaseDiff(char *table_name) -{ - char buf[256]; - char *p; - WORD code, case_mapping; - FILE *file; - int line; - - to_upper_org = (WORD *)calloc(65536, sizeof(WORD)); - if(!to_upper_org) { - printf("Not enough memory for to upper table\n"); - return FALSE; - } - - to_lower_org = (WORD *)calloc(65536, sizeof(WORD)); - if(!to_lower_org) { - printf("Not enough memory for to lower table\n"); - return FALSE; - } - - file = fopen(table_name, "r"); - if(file == NULL) { - printf("Could not open file \"%s\"\n", table_name); - return FALSE; - } - - line = 0; - - while(fgets(buf, sizeof(buf), file)) { - line++; - p = buf; - while(*p && isspace(*p)) p++; - - if(!*p) - continue; - - /* 0. Code value */ - code = (WORD)strtol(p, &p, 16); - - //if(code != 0x9A0 && code != 0xBA0) - //continue; - - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 1. Character name */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 2. General Category */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 3. Canonical Combining Classes */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 4. Bidirectional Category */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 5. Character Decomposition Mapping */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 6. Decimal digit value */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 7. Digit value */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 8. Numeric value */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 9. Mirrored */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 10. Unicode 1.0 Name */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 11. 10646 comment field */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - - /* 12. Uppercase Mapping */ - while(*p && isspace(*p)) p++; - if(!*p) continue; - if(*p != ';') { - case_mapping = (WORD)strtol(p, &p, 16); - to_upper_org[code] = case_mapping - code; - while(*p && *p != ';') p++; - } - else - p++; - - /* 13. Lowercase Mapping */ - while(*p && isspace(*p)) p++; - if(!*p) continue; - if(*p != ';') { - case_mapping = (WORD)strtol(p, &p, 16); - to_lower_org[code] = case_mapping - code; - while(*p && *p != ';') p++; - } - else - p++; - - /* 14. Titlecase Mapping */ - while(*p && *p != ';') p++; - if(!*p) - continue; - p++; - } - - fclose(file); - - return TRUE; -} - -#if 0 -static int find_diff(WORD diff) -{ - int i; - - for(i = 0; i < number_of_diffs; i++) { - if(diffs[i] == diff) - return i; - } - - return -1; -} -#endif - -static WORD find_subtable_with_diffs(WORD *table, WORD *subtable) -{ - WORD index; - - for(index = 0; index < number_of_subtables_with_diffs; index++) { - if(memcmp(subtables_with_diffs[index], subtable, 16 * sizeof(WORD)) == 0) { - return index; - } - } - - if(number_of_subtables_with_diffs >= 4096) { - printf("Could not add new subtable with diffs, storage is full\n"); - return 0; - } - - subtables_with_diffs[number_of_subtables_with_diffs] = subtable; - number_of_subtables_with_diffs++; - - return index; -} - -static WORD find_subtable_with_offsets(WORD *subtable) -{ - WORD index; - - for(index = 0; index < number_of_subtables_with_offsets; index++) { - if(memcmp(&subtables_with_offsets[index * 16], subtable, 16 * sizeof(WORD)) == 0) { - return index; - } - } - - if(number_of_subtables_with_offsets >= 4096) { - printf("Could not add new subtable with offsets, storage is full\n"); - return 0; - } - - memcpy(&subtables_with_offsets[number_of_subtables_with_offsets * 16], subtable, 16 * sizeof(WORD)); - number_of_subtables_with_offsets++; - - return index; -} - -static WORD *pack_table(WORD *table, WORD *packed_size_in_words) -{ - WORD high, low4, index; - WORD main_index[256]; - WORD temp_subtable[16]; - WORD *packed_table; - WORD *subtable_src, *subtable_dst; - - memset(subtables_with_diffs, 0, sizeof(subtables_with_diffs)); - number_of_subtables_with_diffs = 0; - - memset(subtables_with_offsets, 0, sizeof(subtables_with_offsets)); - number_of_subtables_with_offsets = 0; - - for(high = 0; high < 256; high++) { - for(low4 = 0; low4 < 256; low4 += 16) { - index = find_subtable_with_diffs(table, &table[MAKEWORD(low4, high)]); - - temp_subtable[low4 >> 4] = index; - } - - index = find_subtable_with_offsets(temp_subtable); - main_index[high] = index; - } - - *packed_size_in_words = 0x100 + number_of_subtables_with_offsets * 16 + number_of_subtables_with_diffs * 16; - packed_table = calloc(*packed_size_in_words, sizeof(WORD)); - - /* fill main index according to the subtables_with_offsets */ - for(high = 0; high < 256; high++) { - packed_table[high] = 0x100 + main_index[high] * 16; - } - - //memcpy(sub_table, subtables_with_offsets, number_of_subtables_with_offsets * 16); - - /* fill subtable index according to the subtables_with_diffs */ - for(index = 0; index < number_of_subtables_with_offsets; index++) { - subtable_dst = packed_table + 0x100 + index * 16; - subtable_src = &subtables_with_offsets[index * 16]; - - for(low4 = 0; low4 < 16; low4++) { - subtable_dst[low4] = 0x100 + number_of_subtables_with_offsets * 16 + subtable_src[low4] * 16; - } - } - - - for(index = 0; index < number_of_subtables_with_diffs; index++) { - subtable_dst = packed_table + 0x100 + number_of_subtables_with_offsets * 16 + index * 16; - memcpy(subtable_dst, subtables_with_diffs[index], 16 * sizeof(WORD)); - - } - - - test_packed_table(packed_table); - - return packed_table; -} - -int write_casemap_file(void) -{ - WORD packed_size_in_words, offset_to_next_table_in_words; - WORD *packed_table, value; - FILE *file; - - if(!CreateCaseDiff(LIBDIR"UnicodeData.txt")) - return -1; - - file = fopen(NLSDIR"/l_intl.nls", "wb"); - - /* write version number */ - value = 1; - fwrite(&value, 1, sizeof(WORD), file); - - /* pack upper case table */ - packed_table = pack_table(to_upper_org, &packed_size_in_words); - offset_to_next_table_in_words = packed_size_in_words + 1; - fwrite(&offset_to_next_table_in_words, 1, sizeof(WORD), file); - /* write packed upper case table */ - fwrite(packed_table, sizeof(WORD), packed_size_in_words, file); - free(packed_table); - - /* pack lower case table */ - packed_table = pack_table(to_lower_org, &packed_size_in_words); - offset_to_next_table_in_words = packed_size_in_words + 1; - fwrite(&offset_to_next_table_in_words, 1, sizeof(WORD), file); - /* write packed lower case table */ - fwrite(packed_table, sizeof(WORD), packed_size_in_words, file); - free(packed_table); - - fclose(file); - - free(to_upper_org); - free(to_lower_org); - - return 0; -} - -int main() -{ - write_nls_files(); - write_casemap_file(); - - return 0; -} diff --git a/reactos/tools/create_nls/unicode.org/ReactOS/ReadMe b/reactos/tools/create_nls/unicode.org/ReactOS/ReadMe deleted file mode 100644 index 27d34546efc..00000000000 --- a/reactos/tools/create_nls/unicode.org/ReactOS/ReadMe +++ /dev/null @@ -1,7 +0,0 @@ -To applay these patch - -copy MAPPINGS/VENDORS/MICSFT/PC/CP861.TXT -to here and rename it to ibmcp861.txt -and applay the patch ibm861.patch to ibmcp861.txt - - diff --git a/reactos/tools/create_nls/unicode.org/ReactOS/ibmcp861.diff b/reactos/tools/create_nls/unicode.org/ReactOS/ibmcp861.diff deleted file mode 100644 index 099b3e47a19..00000000000 --- a/reactos/tools/create_nls/unicode.org/ReactOS/ibmcp861.diff +++ /dev/null @@ -1,23 +0,0 @@ ---- cp861.txt 2001-02-27 00:00:00.000000000 +0100 -+++ ibmcp861.txt 2005-11-12 19:27:38.578125000 +0100 -@@ -41,9 +41,9 @@ - 0x17 0x0017 #END OF TRANSMISSION BLOCK - 0x18 0x0018 #CANCEL - 0x19 0x0019 #END OF MEDIUM --0x1a 0x001a #SUBSTITUTE -+0x1a 0x001c #FILE SEPARATOR - 0x1b 0x001b #ESCAPE --0x1c 0x001c #FILE SEPARATOR -+0x1c 0x007f #DELETE - 0x1d 0x001d #GROUP SEPARATOR - 0x1e 0x001e #RECORD SEPARATOR - 0x1f 0x001f #UNIT SEPARATOR -@@ -245,7 +245,7 @@ - 0xe3 0x03c0 #GREEK SMALL LETTER PI - 0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA - 0xe5 0x03c3 #GREEK SMALL LETTER SIGMA --0xe6 0x00b5 #MICRO SIGN -+0xe6 0x03bc #GREEK SMALL LETTER MU - 0xe7 0x03c4 #GREEK SMALL LETTER TAU - 0xe8 0x03a6 #GREEK CAPITAL LETTER PHI - 0xe9 0x0398 #GREEK CAPITAL LETTER THETA diff --git a/reactos/tools/dumpstab.c b/reactos/tools/dumpstab.c deleted file mode 100644 index 66733e51117..00000000000 --- a/reactos/tools/dumpstab.c +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Usage: dumpstab input-file - * - * There are two sources of information: the .stab/.stabstr - * sections of the executable and the COFF symbol table. Most - * of the information is in the .stab/.stabstr sections. - * However, most of our asm files don't contain .stab directives, - * so routines implemented in assembler won't show up in the - * .stab section. They are present in the COFF symbol table. - * So, we mostly use the .stab/.stabstr sections, but we augment - * the info there with info from the COFF symbol table when - * possible. - * - * This is a tool and is compiled using the host compiler, - * i.e. on Linux gcc and not mingw-gcc (cross-compiler). - * Therefore we can't include SDK headers and we have to - * duplicate some definitions here. - * Also note that the internal functions are "old C-style", - * returning an int, where a return of 0 means success and - * non-zero is failure. - */ - -#include -#include -#include -#include - -#include "rsym.h" - -const char* -stab_type_name ( int stab_type ) -{ - static char buf[32]; - switch ( stab_type ) - { -#define X(n) case n: return #n; - X(N_GYSM) - X(N_FNAME) - X(N_FUN) - X(N_STSYM) - X(N_LCSYM) - X(N_MAIN) - X(N_PC) - X(N_NSYMS) - X(N_NOMAP) - X(N_RSYM) - X(N_M2C) - X(N_SLINE) - X(N_DSLINE) - X(N_BSLINE) - //X(N_BROWS) - X(N_DEFD) - X(N_EHDECL) - //X(N_MOD2) - X(N_CATCH) - X(N_SSYM) - X(N_SO) - X(N_LSYM) - X(N_BINCL) - X(N_SOL) - X(N_PSYM) - X(N_EINCL) - X(N_ENTRY) - X(N_LBRAC) - X(N_EXCL) - X(N_SCOPE) - X(N_RBRAC) - X(N_BCOMM) - X(N_ECOMM) - X(N_ECOML) - X(N_LENG) - } - sprintf ( buf, "%lu", stab_type ); - return buf; -} - -static int -GetStabInfo(void *FileData, PIMAGE_FILE_HEADER PEFileHeader, - PIMAGE_SECTION_HEADER PESectionHeaders, - ULONG *StabSymbolsLength, void **StabSymbolsBase, - ULONG *StabStringsLength, void **StabStringsBase) -{ - ULONG Idx; - - /* Load .stab and .stabstr sections if available */ - *StabSymbolsBase = NULL; - *StabSymbolsLength = 0; - *StabStringsBase = NULL; - *StabStringsLength = 0; - - for (Idx = 0; Idx < PEFileHeader->NumberOfSections; Idx++) - { - /* printf("section: '%.08s'\n", PESectionHeaders[Idx].Name); */ - if ((strncmp((char*)PESectionHeaders[Idx].Name, ".stab", 5) == 0) - && (PESectionHeaders[Idx].Name[5] == 0)) - { - /* printf(".stab section found. Size %d\n", - PESectionHeaders[Idx].SizeOfRawData); */ - - *StabSymbolsLength = PESectionHeaders[Idx].SizeOfRawData; - *StabSymbolsBase = (void *)((char *) FileData + PESectionHeaders[Idx].PointerToRawData); - } - - if (strncmp((char*)PESectionHeaders[Idx].Name, ".stabstr", 8) == 0) - { - /* printf(".stabstr section found. Size %d\n", - PESectionHeaders[Idx].SizeOfRawData); */ - - *StabStringsLength = PESectionHeaders[Idx].SizeOfRawData; - *StabStringsBase = (void *)((char *) FileData + PESectionHeaders[Idx].PointerToRawData); - } - } - - return 0; -} - -static void -IterateStabs(ULONG StabSymbolsLength, void *StabSymbolsBase, - ULONG StabStringsLength, void *StabStringsBase, - ULONG_PTR ImageBase, PIMAGE_FILE_HEADER PEFileHeader, - PIMAGE_SECTION_HEADER PESectionHeaders) -{ - PSTAB_ENTRY e; - ULONG Count, i; - - e = StabSymbolsBase; - Count = StabSymbolsLength / sizeof(STAB_ENTRY); - if (Count == 0) /* No symbol info */ - return; - - printf ( "type,other,desc,value,str\n" ); - for (i = 0; i < Count; i++) - { - printf ( "%s,%lu(0x%x),%lu(0x%x),%lu(0x%x),%s\n", - stab_type_name(e[i].n_type), - e[i].n_other, - e[i].n_other, - e[i].n_desc, - e[i].n_desc, - e[i].n_value, - e[i].n_value, - (char *) StabStringsBase + e[i].n_strx ); - } -} - -int main(int argc, char* argv[]) -{ - PIMAGE_DOS_HEADER PEDosHeader; - PIMAGE_FILE_HEADER PEFileHeader; - PIMAGE_OPTIONAL_HEADER PEOptHeader; - PIMAGE_SECTION_HEADER PESectionHeaders; - ULONG ImageBase; - void *StabBase; - ULONG StabsLength; - void *StabStringBase; - ULONG StabStringsLength; - char* path1; - size_t FileSize; - void *FileData; - - if (2 != argc) - { - fprintf(stderr, "Usage: dumpstabs \n"); - exit(1); - } - - path1 = convert_path(argv[1]); - - FileData = load_file ( path1, &FileSize ); - if ( !FileData ) - { - fprintf ( stderr, "An error occured loading '%s'\n", path1 ); - exit(1); - } - - /* Check if MZ header exists */ - PEDosHeader = (PIMAGE_DOS_HEADER) FileData; - if (PEDosHeader->e_magic != IMAGE_DOS_MAGIC || PEDosHeader->e_lfanew == 0L) - { - perror("Input file is not a PE image.\n"); - free(FileData); - exit(1); - } - - /* Locate PE file header */ - /* sizeof(ULONG) = sizeof(MAGIC) */ - PEFileHeader = (PIMAGE_FILE_HEADER)((char *) FileData + PEDosHeader->e_lfanew + sizeof(ULONG)); - - /* Locate optional header */ - assert(sizeof(ULONG) == 4); - PEOptHeader = (PIMAGE_OPTIONAL_HEADER)(PEFileHeader + 1); - ImageBase = PEOptHeader->ImageBase; - - /* Locate PE section headers */ - PESectionHeaders = (PIMAGE_SECTION_HEADER)((char *) PEOptHeader + PEFileHeader->SizeOfOptionalHeader); - - if (GetStabInfo(FileData, PEFileHeader, PESectionHeaders, &StabsLength, &StabBase, - &StabStringsLength, &StabStringBase)) - { - free(FileData); - exit(1); - } - - IterateStabs( StabsLength, StabBase, StabStringsLength, StabStringBase, - ImageBase, PEFileHeader, PESectionHeaders); - - free(FileData); - - return 0; -} diff --git a/reactos/tools/gendib/gendib.c b/reactos/tools/gendib/gendib.c deleted file mode 100644 index 488b634385d..00000000000 --- a/reactos/tools/gendib/gendib.c +++ /dev/null @@ -1,1037 +0,0 @@ -/* - * Copyright 2005 Ge van Geldorp (gvg@reactos.com). - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -/* - * This is a code generator. It outputs C code which can be compiled using the - * standard build tools. It is used to generate code for the DIB Blt routines. - * There are a lot of possible Blt routines (256 rop codes, for 6 different - * bit depths). It is possible to use a generic Blt routine which handles all - * rop codes and all depths. The drawback is that it will be relatively slow. - * The other extreme is to write (generate) a separate Blt routine for each - * rop code/depth combination. This will result in a extremely large amount - * of code. So, we opt for something in between: named rops get their own - * routine, unnamed rops are handled by a generic routine. - * Basically, what happens is that generic code which looks like: - * - * for (...) - * { - * if (CondA) - * { - * doSomethingA; - * } - * for (...) - * { - * if (CondB) - * { - * doSomethingB; - * } - * else - * { - * doSomethingElseB; - * } - * } - * } - * - * is specialized for named rops to look like: - * - * if (condC) - * { - * if (condD) - * { - * for (...) - * { - * for (...) - * { - * pumpSomeBytes; - * } - * } - * } - * else - * { - * for (...) - * { - * for (...) - * { - * pumpSomeBytesSlightlyDifferentE; - * } - * } - * } - * } - * - * i.e. we make the inner loops as tight as possible. - * Another optimization is to try to load/store 32 alligned bits at a time from - * video memory. Accessing video memory from the CPU is slooooooow, so let's - * try to do this as little as possible, even if that means we have to do some - * extra operations using main memory. - */ - -#include -#include -#include -#include - -#define NDEBUG - -#define USES_DEST(RopCode) ((((RopCode) & 0xaa) >> 1) != ((RopCode) & 0x55)) -#define USES_SOURCE(RopCode) ((((RopCode) & 0xcc) >> 2) != ((RopCode) & 0x33)) -#define USES_PATTERN(RopCode) ((((RopCode) & 0xf0) >> 4) != ((RopCode) & 0x0f)) - -#ifdef NDEBUG -#define MARK(Out) -#else -#define MARK(Out) Output((Out), "/* Generated by %s line %d*/\n", \ - __FUNCTION__, __LINE__); -#endif - -#define ROPCODE_BLACKNESS 0x00 -#define ROPCODE_NOTSRCERASE 0x11 -#define ROPCODE_NOTSRCCOPY 0x33 -#define ROPCODE_SRCERASE 0x44 -#define ROPCODE_DSTINVERT 0x55 -#define ROPCODE_PATINVERT 0x5a -#define ROPCODE_SRCINVERT 0x66 -#define ROPCODE_SRCAND 0x88 -#define ROPCODE_NOOP 0xaa -#define ROPCODE_MERGEPAINT 0xbb -#define ROPCODE_MERGECOPY 0xc0 -#define ROPCODE_SRCCOPY 0xcc -#define ROPCODE_SRCPAINT 0xee -#define ROPCODE_PATCOPY 0xf0 -#define ROPCODE_PATPAINT 0xfb -#define ROPCODE_WHITENESS 0xff - -#define ROPCODE_GENERIC 256 /* Special case */ - -typedef struct _ROPINFO - { - unsigned RopCode; - const char *Name; - const char *Operation; - int UsesDest; - int UsesSource; - int UsesPattern; - } -ROPINFO, *PROPINFO; - -#define FLAG_PATTERNSURFACE 0x01 -#define FLAG_TRIVIALXLATE 0x02 -#define FLAG_BOTTOMUP 0x04 -#define FLAG_FORCENOUSESSOURCE 0x08 -#define FLAG_FORCERAWSOURCEAVAIL 0x10 - -static PROPINFO -FindRopInfo(unsigned RopCode) -{ - static ROPINFO KnownCodes[] = - { - { ROPCODE_BLACKNESS, "BLACKNESS", "0", 0, 0, 0 }, - { ROPCODE_NOTSRCERASE, "NOTSRCERASE","~(D | S)", 1, 1, 0 }, - { ROPCODE_NOTSRCCOPY, "NOTSRCCOPY", "~S", 0, 1, 0 }, - { ROPCODE_SRCERASE, "SRCERASE", "(~D) & S", 1, 1, 0 }, - { ROPCODE_DSTINVERT, "DSTINVERT", "~D", 1, 0, 0 }, - { ROPCODE_PATINVERT, "PATINVERT", "D ^ P", 1, 0, 1 }, - { ROPCODE_SRCINVERT, "SRCINVERT", "D ^ S", 1, 1, 0 }, - { ROPCODE_SRCAND, "SRCAND", "D & S", 1, 1, 0 }, - { ROPCODE_NOOP, "NOOP", "D", 1, 0, 0 }, - { ROPCODE_MERGEPAINT, "MERGEPAINT", "D & (~S)", 1, 1, 0 }, - { ROPCODE_MERGECOPY, "MERGECOPY", "S & P", 0, 1, 1 }, - { ROPCODE_SRCCOPY, "SRCCOPY", "S", 0, 1, 0 }, - { ROPCODE_SRCPAINT, "SRCPAINT", "D | S", 1, 1, 0 }, - { ROPCODE_PATCOPY, "PATCOPY", "P", 0, 0, 1 }, - { ROPCODE_PATPAINT, "PATPAINT", "D | (~S) | P", 1, 1, 1 }, - { ROPCODE_WHITENESS, "WHITENESS", "0xffffffff", 0, 0, 0 }, - { ROPCODE_GENERIC, NULL, NULL, 1, 1, 1 } - }; - unsigned Index; - - for (Index = 0; Index < sizeof(KnownCodes) / sizeof(KnownCodes[0]); Index++) - { - if (RopCode == KnownCodes[Index].RopCode) - { - return KnownCodes + Index; - } - } - - return NULL; -} - -static void -Output(FILE *Out, const char *Fmt, ...) -{ - static unsigned Indent = 0; - static int AtBOL = 1; - unsigned n; - va_list Args; - - if (NULL != strchr(Fmt, '{') && 0 != Indent) - { - Indent += 2; - } - else if (NULL != strchr(Fmt, '}')) - { - Indent -= 2; - } - if (AtBOL) - { - for (n = 0; n < Indent; n++) - { - putc(' ', Out); - } - AtBOL = 0; - } - - va_start(Args, Fmt); - vfprintf(Out, Fmt, Args); - va_end(Args); - - if (NULL != strchr(Fmt, '{')) - { - Indent += 2; - } - else if (NULL != strchr(Fmt, '}') && 0 != Indent) - { - Indent -= 2; - } - AtBOL = '\n' == Fmt[strlen(Fmt) - 1]; -} - -static void -PrintRoutineName(FILE *Out, unsigned Bpp, PROPINFO RopInfo) -{ - if (NULL != RopInfo && ROPCODE_GENERIC != RopInfo->RopCode) - { - Output(Out, "DIB_%uBPP_BitBlt_%s", Bpp, RopInfo->Name); - } - else - { - Output(Out, "DIB_%uBPP_BitBlt_Generic", Bpp); - } -} - -static void -CreateShiftTables(FILE *Out) -{ - Output(Out, "\n"); - Output(Out, "static unsigned Shift1Bpp[] =\n"); - Output(Out, "{\n"); - Output(Out, "0,\n"); - Output(Out, "24, 25, 26, 27, 28, 29, 30, 31, 16, 17, 18, 19, 20, 21, 22, 23,\n"); - Output(Out, "8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7\n"); - Output(Out, "};\n"); - Output(Out, "static unsigned Shift4Bpp[] =\n"); - Output(Out, "{\n"); - Output(Out, "0,\n"); - Output(Out, "24, 28, 16, 20, 8, 12, 0, 4\n"); - Output(Out, "};\n"); - Output(Out, "static unsigned Shift8Bpp[] =\n"); - Output(Out, "{\n"); - Output(Out, "0,\n"); - Output(Out, "24, 16, 8, 0\n"); - Output(Out, "};\n"); - Output(Out, "static unsigned Shift16Bpp[] =\n"); - Output(Out, "{\n"); - Output(Out, "0,\n"); - Output(Out, "16, 0\n"); - Output(Out, "};\n"); -} - -static void -CreateOperation(FILE *Out, unsigned Bpp, PROPINFO RopInfo, unsigned SourceBpp, - unsigned Bits) -{ - const char *Cast; - const char *Dest; - const char *Template; - - MARK(Out); - if (32 == Bits) - { - Cast = ""; - Dest = "*DestPtr"; - } - else if (16 == Bpp) - { - Cast = "(USHORT) "; - Dest = "*((PUSHORT) DestPtr)"; - } - else - { - Cast = "(UCHAR) "; - Dest = "*((PUCHAR) DestPtr)"; - } - Output(Out, "%s = ", Dest); - if (ROPCODE_GENERIC == RopInfo->RopCode) - { - Output(Out, "%sDIB_DoRop(BltInfo->Rop4, %s, Source, Pattern)", - Cast, Dest); - } - else - { - Template = RopInfo->Operation; - while ('\0' != *Template) - { - switch(*Template) - { - case 'S': - Output(Out, "%sSource", Cast); - break; - case 'P': - Output(Out, "%sPattern", Cast); - break; - case 'D': - Output(Out, "%s", Dest); - break; - default: - Output(Out, "%c", *Template); - break; - } - Template++; - } - } -} - -static void -CreateBase(FILE *Out, int Source, int Flags, unsigned Bpp) -{ - const char *What = (Source ? "Source" : "Dest"); - - MARK(Out); - Output(Out, "%sBase = (char *) BltInfo->%sSurface->pvScan0 +\n", What, What); - if (0 == (Flags & FLAG_BOTTOMUP)) - { - if (Source) - { - Output(Out, " BltInfo->SourcePoint.y *\n"); - } - else - { - Output(Out, " BltInfo->DestRect.top *\n"); - } - } - else - { - if (Source) - { - Output(Out, " (BltInfo->SourcePoint.y +\n"); - Output(Out, " BltInfo->DestRect.bottom -\n"); - Output(Out, " BltInfo->DestRect.top - 1) *\n"); - } - else - { - Output(Out, " (BltInfo->DestRect.bottom - 1) *\n"); - } - } - Output(Out, " %sBltInfo->%sSurface->lDelta +\n", - Source ? " " : "", What); - if (Source) - { - Output(Out, " %sBltInfo->SourcePoint.x", - 16 < Bpp ? "" : "(("); - } - else - { - Output(Out, " BltInfo->DestRect.left"); - } - if (Bpp < 8) - { - Output(Out, " / %u", 8 / Bpp); - } - else if (8 < Bpp) - { - Output(Out, " * %u", Bpp / 8); - } - if (Source && Bpp <= 16) - { - Output(Out, ") & ~ 0x3)"); - } - Output(Out, ";\n", Bpp / 8); - if (Source && Bpp <= 16) - { - Output(Out, "BaseSourcePixels = %u - (BltInfo->SourcePoint.x & 0x%x);\n", - 32 / Bpp, 32 / Bpp - 1); - } -} - -static void -CreateGetSource(FILE *Out, unsigned Bpp, PROPINFO RopInfo, int Flags, - unsigned SourceBpp, unsigned Shift) -{ - const char *AssignOp; - const char *Before; - char After[8]; - - MARK(Out); - if (0 == Shift) - { - AssignOp = "="; - Before = ""; - After[0] = '\0'; - } - else - { - AssignOp = "|="; - Before = "("; - sprintf(After, ") << %u", Shift); - } - - if (ROPCODE_SRCCOPY != RopInfo->RopCode || - 0 == (Flags & FLAG_TRIVIALXLATE) || Bpp != SourceBpp) - { - if (0 == (Flags & FLAG_FORCERAWSOURCEAVAIL) && SourceBpp <= 16) - { - Output(Out, "if (0 == SourcePixels)\n"); - Output(Out, "{\n"); - Output(Out, "RawSource = *SourcePtr++;\n"); - Output(Out, "SourcePixels = %u;\n", 32 / SourceBpp); - Output(Out, "}\n"); - } - Output(Out, "Source %s (%s", AssignOp, Before); - if (0 == (Flags & FLAG_TRIVIALXLATE)) - { - Output(Out, "XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, %s", - 16 < SourceBpp ? "" : "("); - } - if (32 == SourceBpp) - { - Output(Out, "*SourcePtr++"); - } - else if (24 == SourceBpp) - { - Output(Out, "*(PUSHORT) SourcePtr + (*((PBYTE) SourcePtr + 2) << 16)"); - } - else - { - Output(Out, "RawSource >> Shift%uBpp[SourcePixels]", SourceBpp); - } - if (0 == (Flags & FLAG_TRIVIALXLATE)) - { - if (16 < SourceBpp) - { - Output(Out, ")"); - } - else - { - Output(Out, ") & 0x%x)", (1 << SourceBpp) - 1); - } - } - if (32 == Bpp) - { - Output(Out, ")%s;\n", After); - } - else - { - Output(Out, " & 0x%x)%s;\n", (1 << Bpp) - 1, After); - } - if (SourceBpp <= 16) - { - Output(Out, "SourcePixels--;\n"); - } - else if (24 == SourceBpp) - { - Output(Out, "SourcePtr = (PULONG)((char *) SourcePtr + 3);\n"); - } - } -} - -static void -CreateCounts(FILE *Out, unsigned Bpp) -{ - MARK(Out); - if (32 != Bpp) - { - if (8 < Bpp) - { - Output(Out, "LeftCount = ((ULONG_PTR) DestBase >> 1) & 0x01;\n"); - } - else - { - Output(Out, "LeftCount = (ULONG_PTR) DestBase & 0x03;\n"); - Output(Out, "if (BltInfo->DestRect.right - BltInfo->DestRect.left < " - "LeftCount)\n"); - Output(Out, "{\n"); - Output(Out, "LeftCount = BltInfo->DestRect.right - " - "BltInfo->DestRect.left;\n"); - Output(Out, "}\n"); - } - Output(Out, "CenterCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -\n"); - Output(Out, " LeftCount) / %u;\n", 32 / Bpp); - Output(Out, "RightCount = (BltInfo->DestRect.right - BltInfo->DestRect.left -\n"); - Output(Out, " LeftCount - %u * CenterCount);\n", 32 / Bpp); - } - else - { - Output(Out, "CenterCount = BltInfo->DestRect.right - BltInfo->DestRect.left;\n"); - } -} - -static void -CreateSetSinglePixel(FILE *Out, unsigned Bpp, PROPINFO RopInfo, int Flags, - unsigned SourceBpp) -{ - if (RopInfo->UsesSource && 0 == (Flags & FLAG_FORCENOUSESSOURCE)) - { - CreateGetSource(Out, Bpp, RopInfo, Flags, SourceBpp, 0); - MARK(Out); - } - if (RopInfo->UsesPattern && 0 != (Flags & FLAG_PATTERNSURFACE)) - { - Output(Out, "Pattern = DIB_GetSource(BltInfo->PatternSurface, PatternX, PatternY, BltInfo->XlatePatternToDest);\n"); - Output(Out, "if (BltInfo->PatternSurface->sizlBitmap.cx <= ++PatternX)\n"); - Output(Out, "{\n"); - Output(Out, "PatternX -= BltInfo->PatternSurface->sizlBitmap.cx;\n"); - Output(Out, "}\n"); - } - if ((RopInfo->UsesSource && 0 == (Flags & FLAG_FORCENOUSESSOURCE) && - Bpp != SourceBpp) || - (RopInfo->UsesPattern && 0 != (Flags & FLAG_PATTERNSURFACE))) - { - Output(Out, "\n"); - } - CreateOperation(Out, Bpp, RopInfo, SourceBpp, 16); - Output(Out, ";\n"); - MARK(Out); - Output(Out, "\n"); - Output(Out, "DestPtr = (PULONG)((char *) DestPtr + %u);\n", Bpp / 8); -} - -static void -CreateBitCase(FILE *Out, unsigned Bpp, PROPINFO RopInfo, int Flags, - unsigned SourceBpp) -{ - unsigned Partial; - - MARK(Out); - if (RopInfo->UsesSource) - { - if (0 == (Flags & FLAG_FORCENOUSESSOURCE)) - { - CreateBase(Out, 1, Flags, SourceBpp); - } - CreateBase(Out, 0, Flags, Bpp); - CreateCounts(Out, Bpp); - MARK(Out); - } - if (RopInfo->UsesPattern && 0 != (Flags & FLAG_PATTERNSURFACE)) - { - if (0 == (Flags & FLAG_BOTTOMUP)) - { - Output(Out, "PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %%\n"); - Output(Out, " BltInfo->PatternSurface->sizlBitmap.cy;\n"); - } - else - { - Output(Out, "PatternY = (BltInfo->DestRect.bottom - 1 +\n"); - Output(Out, " BltInfo->BrushOrigin.y) %%\n"); - Output(Out, " BltInfo->PatternSurface->sizlBitmap.cy;\n"); - } - } - if (ROPCODE_SRCCOPY == RopInfo->RopCode && - 0 != (Flags & FLAG_TRIVIALXLATE) && Bpp == SourceBpp) - { - Output(Out, "CenterCount = 2 * (BltInfo->DestRect.right -\n"); - Output(Out, " BltInfo->DestRect.left);\n"); - } - if (RopInfo->UsesPattern && 0 != (Flags & FLAG_PATTERNSURFACE)) - { - Output(Out, "BasePatternX = (BltInfo->DestRect.left + BltInfo->BrushOrigin.x) %%\n"); - Output(Out, " BltInfo->PatternSurface->sizlBitmap.cx;\n"); - } - - Output(Out, "for (LineIndex = 0; LineIndex < LineCount; LineIndex++)\n"); - Output(Out, "{\n"); - if (ROPCODE_SRCCOPY != RopInfo->RopCode || - 0 == (Flags & FLAG_TRIVIALXLATE) || Bpp != SourceBpp) - { - if (RopInfo->UsesSource && 0 == (Flags & FLAG_FORCENOUSESSOURCE)) - { - Output(Out, "SourcePtr = (PULONG) SourceBase;\n"); - if (SourceBpp <= 16) - { - Output(Out, "RawSource = *SourcePtr++;\n"); - Output(Out, "SourcePixels = BaseSourcePixels;\n"); - } - } - Output(Out, "DestPtr = (PULONG) DestBase;\n"); - } - - if (RopInfo->UsesPattern && 0 != (Flags & FLAG_PATTERNSURFACE)) - { - Output(Out, "PatternX = BasePatternX;\n"); - } - - if (ROPCODE_SRCCOPY == RopInfo->RopCode && - 0 != (Flags & FLAG_TRIVIALXLATE) && Bpp == SourceBpp) - { - Output(Out, "RtlMoveMemory(DestBase, SourceBase, CenterCount);\n"); - Output(Out, "\n"); - } - else - { - Output(Out, "\n"); - if (32 != Bpp) - { - if (16 == Bpp) - { - Output(Out, "if (0 != LeftCount)\n"); - } - else - { - Output(Out, "for (i = 0; i < LeftCount; i++)\n"); - } - Output(Out, "{\n"); - CreateSetSinglePixel(Out, Bpp, RopInfo, - (16 == Bpp ? Flags | FLAG_FORCERAWSOURCEAVAIL : - Flags), SourceBpp); - MARK(Out); - Output(Out, "}\n"); - Output(Out, "\n"); - } - Output(Out, "for (i = 0; i < CenterCount; i++)\n"); - Output(Out, "{\n"); - if (RopInfo->UsesSource && 0 == (Flags & FLAG_FORCENOUSESSOURCE)) - { - for (Partial = 0; Partial < 32 / Bpp; Partial++) - { - CreateGetSource(Out, Bpp, RopInfo, Flags, SourceBpp, - Partial * Bpp); - MARK(Out); - } - Output(Out, "\n"); - } - if (RopInfo->UsesPattern && 0 != (Flags & FLAG_PATTERNSURFACE)) - { - for (Partial = 0; Partial < 32 / Bpp; Partial++) - { - if (0 == Partial) - { - Output(Out, "Pattern = DIB_GetSource(BltInfo->PatternSurface, PatternX, PatternY, BltInfo->XlatePatternToDest);\n"); - } - else - { - Output(Out, "Pattern |= DIB_GetSource(BltInfo->PatternSurface, PatternX, PatternY, BltInfo->XlatePatternToDest) << %u;\n", Partial * Bpp); - } - Output(Out, "if (BltInfo->PatternSurface->sizlBitmap.cx <= ++PatternX)\n"); - Output(Out, "{\n"); - Output(Out, "PatternX -= BltInfo->PatternSurface->sizlBitmap.cx;\n"); - Output(Out, "}\n"); - } - Output(Out, "\n"); - } - CreateOperation(Out, Bpp, RopInfo, SourceBpp, 32); - Output(Out, ";\n"); - MARK(Out); - Output(Out, "\n"); - Output(Out, "DestPtr++;\n"); - Output(Out, "}\n"); - Output(Out, "\n"); - if (32 != Bpp) - { - if (16 == Bpp) - { - Output(Out, "if (0 != RightCount)\n"); - } - else - { - Output(Out, "for (i = 0; i < RightCount; i++)\n"); - } - Output(Out, "{\n"); - CreateSetSinglePixel(Out, Bpp, RopInfo, Flags, SourceBpp); - MARK(Out); - Output(Out, "}\n"); - Output(Out, "\n"); - } - if (RopInfo->UsesPattern && 0 != (Flags & FLAG_PATTERNSURFACE)) - { - if (0 == (Flags & FLAG_BOTTOMUP)) - { - Output(Out, "if (BltInfo->PatternSurface->sizlBitmap.cy <= ++PatternY)\n"); - Output(Out, "{\n"); - Output(Out, "PatternY -= BltInfo->PatternSurface->sizlBitmap.cy;\n"); - Output(Out, "}\n"); - } - else - { - Output(Out, "if (0 == PatternY--)\n"); - Output(Out, "{\n"); - Output(Out, "PatternY = BltInfo->PatternSurface->sizlBitmap.cy - 1;\n"); - Output(Out, "}\n"); - } - } - } - if (RopInfo->UsesSource && 0 == (Flags & FLAG_FORCENOUSESSOURCE)) - { - Output(Out, "SourceBase %c= BltInfo->SourceSurface->lDelta;\n", - 0 == (Flags & FLAG_BOTTOMUP) ? '+' : '-'); - } - Output(Out, "DestBase %c= BltInfo->DestSurface->lDelta;\n", - 0 == (Flags & FLAG_BOTTOMUP) ? '+' : '-'); - Output(Out, "}\n"); -} - -static void -CreateActionBlock(FILE *Out, unsigned Bpp, PROPINFO RopInfo, - int Flags) -{ - static unsigned SourceBpp[ ] = - { 1, 4, 8, 16, 24, 32 }; - unsigned BppIndex; - - MARK(Out); - if (RopInfo->UsesSource) - { - if (ROPCODE_GENERIC == RopInfo->RopCode) - { - Output(Out, "if (UsesSource)\n"); - Output(Out, "{\n"); - } - Output(Out, "switch (BltInfo->SourceSurface->iBitmapFormat)\n"); - Output(Out, "{\n"); - for (BppIndex = 0; - BppIndex < sizeof(SourceBpp) / sizeof(unsigned); - BppIndex++) - { - Output(Out, "case BMF_%uBPP:\n", SourceBpp[BppIndex]); - Output(Out, "{\n"); - if (Bpp == SourceBpp[BppIndex]) - { - Output(Out, "if (NULL == BltInfo->XlateSourceToDest ||\n"); - Output(Out, " 0 != (BltInfo->XlateSourceToDest->flXlate & XO_TRIVIAL))\n"); - Output(Out, "{\n"); - Output(Out, "if (BltInfo->DestRect.top < BltInfo->SourcePoint.y)\n"); - Output(Out, "{\n"); - CreateBitCase(Out, Bpp, RopInfo, - Flags | FLAG_TRIVIALXLATE, - SourceBpp[BppIndex]); - MARK(Out); - Output(Out, "}\n"); - Output(Out, "else\n"); - Output(Out, "{\n"); - CreateBitCase(Out, Bpp, RopInfo, - Flags | FLAG_BOTTOMUP | FLAG_TRIVIALXLATE, - SourceBpp[BppIndex]); - MARK(Out); - Output(Out, "}\n"); - Output(Out, "}\n"); - Output(Out, "else\n"); - Output(Out, "{\n"); - Output(Out, "if (BltInfo->DestRect.top < BltInfo->SourcePoint.y)\n"); - Output(Out, "{\n"); - CreateBitCase(Out, Bpp, RopInfo, Flags, SourceBpp[BppIndex]); - MARK(Out); - Output(Out, "}\n"); - Output(Out, "else\n"); - Output(Out, "{\n"); - CreateBitCase(Out, Bpp, RopInfo, - Flags | FLAG_BOTTOMUP, - SourceBpp[BppIndex]); - MARK(Out); - Output(Out, "}\n"); - Output(Out, "}\n"); - } - else - { - CreateBitCase(Out, Bpp, RopInfo, Flags, - SourceBpp[BppIndex]); - MARK(Out); - } - Output(Out, "break;\n"); - Output(Out, "}\n"); - } - Output(Out, "}\n"); - if (ROPCODE_GENERIC == RopInfo->RopCode) - { - Output(Out, "}\n"); - Output(Out, "else\n"); - Output(Out, "{\n"); - CreateBitCase(Out, Bpp, RopInfo, Flags | FLAG_FORCENOUSESSOURCE, 0); - MARK(Out); - Output(Out, "}\n"); - } - } - else - { - CreateBitCase(Out, Bpp, RopInfo, Flags, 0); - } -} - -static void -CreatePrimitive(FILE *Out, unsigned Bpp, PROPINFO RopInfo) -{ - int First; - unsigned Partial; - - MARK(Out); - Output(Out, "\n"); - Output(Out, "static void\n"); - PrintRoutineName(Out, Bpp, RopInfo); - Output(Out, "(PBLTINFO BltInfo)\n"); - Output(Out, "{\n"); - if (ROPCODE_BLACKNESS == RopInfo->RopCode) - { - Output(Out, "DIB_%uBPP_ColorFill(BltInfo->DestSurface, " - "&BltInfo->DestRect, 0x0);\n", Bpp); - } - else if (ROPCODE_WHITENESS == RopInfo->RopCode) - { - Output(Out, "DIB_%uBPP_ColorFill(BltInfo->DestSurface, " - "&BltInfo->DestRect, ~0);\n", Bpp); - } - else if (ROPCODE_NOOP == RopInfo->RopCode) - { - Output(Out, "return;\n"); - } - else - { - Output(Out, "ULONG LineIndex, LineCount;\n"); - Output(Out, "ULONG i;\n"); - if (RopInfo->UsesPattern) - { - Output(Out, "ULONG PatternX =0, PatternY = 0, BasePatternX = 0;\n"); - } - First = 1; - if (RopInfo->UsesSource) - { - Output(Out, "ULONG Source = 0"); - First = 0; - } - if (RopInfo->UsesPattern) - { - Output(Out, "%s Pattern = 0", First ? "ULONG" : ","); - First = 0; - } - if (! First) - { - Output(Out, ";\n"); - } - Output(Out, "char *DestBase;\n"); - Output(Out, "PULONG DestPtr;\n"); - if (RopInfo->UsesSource) - { - Output(Out, "char *SourceBase;\n"); - Output(Out, "PULONG SourcePtr;\n"); - Output(Out, "ULONG RawSource;\n"); - Output(Out, "unsigned SourcePixels, BaseSourcePixels;\n"); - } - if (32 == Bpp) - { - Output(Out, "ULONG CenterCount;\n"); - } - else - { - Output(Out, "ULONG LeftCount, CenterCount, RightCount;\n"); - } - if (ROPCODE_GENERIC == RopInfo->RopCode) - { - Output(Out, "BOOLEAN UsesDest, UsesSource, UsesPattern;\n"); - Output(Out, "\n"); - Output(Out, "UsesDest = ROP4_USES_DEST(BltInfo->Rop4);\n"); - Output(Out, "UsesSource = ROP4_USES_SOURCE(BltInfo->Rop4);\n"); - Output(Out, "UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);\n"); - } - Output(Out, "\n"); - if (! RopInfo->UsesSource) - { - CreateBase(Out, 0, 0, Bpp); - CreateCounts(Out, Bpp); - MARK(Out); - } - Output(Out, "LineCount = BltInfo->DestRect.bottom - BltInfo->DestRect.top;\n"); - - Output(Out, "\n"); - if (RopInfo->UsesPattern) - { - if (ROPCODE_GENERIC == RopInfo->RopCode) - { - Output(Out, "if (UsesPattern && NULL != BltInfo->PatternSurface)\n"); - } - else - { - Output(Out, "if (NULL != BltInfo->PatternSurface)\n"); - } - Output(Out, "{\n"); - CreateActionBlock(Out, Bpp, RopInfo, FLAG_PATTERNSURFACE); - MARK(Out); - Output(Out, "}\n"); - Output(Out, "else\n"); - Output(Out, "{\n"); - if (ROPCODE_GENERIC == RopInfo->RopCode) - { - Output(Out, "if (UsesPattern)\n"); - Output(Out, "{\n"); - } - for (Partial = 0; Partial < 32 / Bpp; Partial++) - { - if (0 == Partial) - { - Output(Out, "Pattern = BltInfo->Brush->iSolidColor"); - } - else - { - Output(Out, " (BltInfo->Brush->iSolidColor << %d)", - Partial * Bpp); - } - if (32 / Bpp <= Partial + 1) - { - Output(Out, ";\n"); - } - else - { - Output(Out, " |\n"); - } - } - if (ROPCODE_PATINVERT == RopInfo->RopCode || - ROPCODE_MERGECOPY == RopInfo->RopCode) - { - Output(Out, "if (0 == Pattern)\n"); - Output(Out, "{\n"); - if (ROPCODE_MERGECOPY == RopInfo->RopCode) - { - Output(Out, "DIB_%uBPP_ColorFill(BltInfo->DestSurface, " - "&BltInfo->DestRect, 0x0);\n", Bpp); - } - Output(Out, "return;\n"); - Output(Out, "}\n"); - } - else if (ROPCODE_PATPAINT == RopInfo->RopCode) - { - Output(Out, "if ((~0) == Pattern)\n"); - Output(Out, "{\n"); - Output(Out, "DIB_%uBPP_ColorFill(BltInfo->DestSurface, " - "&BltInfo->DestRect, ~0);\n", Bpp); - Output(Out, "return;\n"); - Output(Out, "}\n"); - } - if (ROPCODE_GENERIC == RopInfo->RopCode) - { - Output(Out, "}\n"); - } - CreateActionBlock(Out, Bpp, RopInfo, 0); - MARK(Out); - Output(Out, "}\n"); - } - else - { - CreateActionBlock(Out, Bpp, RopInfo, 0); - MARK(Out); - } - } - Output(Out, "}\n"); -} - -static void -CreateTable(FILE *Out, unsigned Bpp) -{ - unsigned RopCode; - - MARK(Out); - Output(Out, "\n"); - Output(Out, "static void (*PrimitivesTable[256])(PBLTINFO) =\n"); - Output(Out, "{\n"); - for (RopCode = 0; RopCode < 256; RopCode++) - { - PrintRoutineName(Out, Bpp, FindRopInfo(RopCode)); - if (RopCode < 255) - { - Output(Out, ","); - } - Output(Out, "\n"); - } - Output(Out, "};\n"); -} - -static void -CreateBitBlt(FILE *Out, unsigned Bpp) -{ - MARK(Out); - Output(Out, "\n"); - Output(Out, "BOOLEAN\n"); - Output(Out, "DIB_%uBPP_BitBlt(PBLTINFO BltInfo)\n", Bpp); - Output(Out, "{\n"); - Output(Out, "PrimitivesTable[BltInfo->Rop4 & 0xff](BltInfo);\n"); - Output(Out, "\n"); - Output(Out, "return TRUE;\n"); - Output(Out, "}\n"); -} - -static void -Generate(char *OutputDir, unsigned Bpp) -{ - FILE *Out; - unsigned RopCode; - PROPINFO RopInfo; - char *FileName; - - FileName = malloc(strlen(OutputDir) + 12); - if (NULL == FileName) - { - fprintf(stderr, "Out of memory\n"); - exit(1); - } - strcpy(FileName, OutputDir); - if ('/' != FileName[strlen(FileName) - 1]) - { - strcat(FileName, "/"); - } - sprintf(FileName + strlen(FileName), "dib%ugen.c", Bpp); - - Out = fopen(FileName, "w"); - free(FileName); - if (NULL == Out) - { - perror("Error opening output file"); - exit(1); - } - - MARK(Out); - Output(Out, "/* This is a generated file. Please do not edit */\n"); - Output(Out, "\n"); - Output(Out, "#include \n"); - CreateShiftTables(Out); - - RopInfo = FindRopInfo(ROPCODE_GENERIC); - CreatePrimitive(Out, Bpp, RopInfo); - for (RopCode = 0; RopCode < 256; RopCode++) - { - RopInfo = FindRopInfo(RopCode); - if (NULL != RopInfo) - { - CreatePrimitive(Out, Bpp, RopInfo); - } - } - CreateTable(Out, Bpp); - CreateBitBlt(Out, Bpp); - - fclose(Out); -} - -int -main(int argc, char *argv[]) -{ - unsigned Index; - static unsigned DestBpp[] = - { 8, 16, 32 }; - - if (argc < 2) - return 0; - - for (Index = 0; Index < sizeof(DestBpp) / sizeof(DestBpp[0]); Index++) - { - Generate(argv[1], DestBpp[Index]); - } - - return 0; -} diff --git a/reactos/tools/gendib/gendib.mak b/reactos/tools/gendib/gendib.mak deleted file mode 100644 index 98de71cb27a..00000000000 --- a/reactos/tools/gendib/gendib.mak +++ /dev/null @@ -1,57 +0,0 @@ -GENDIB_BASE = $(TOOLS_BASE_)gendib -GENDIB_BASE_ = $(GENDIB_BASE)$(SEP) -GENDIB_INT = $(INTERMEDIATE_)$(GENDIB_BASE) -GENDIB_INT_ = $(GENDIB_INT)$(SEP) -GENDIB_OUT = $(OUTPUT_)$(GENDIB_BASE) -GENDIB_OUT_ = $(GENDIB_OUT)$(SEP) - -$(GENDIB_INT): | $(TOOLS_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(GENDIB_OUT): | $(TOOLS_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - -GENDIB_TARGET = \ - $(GENDIB_OUT_)gendib$(EXEPOSTFIX) - -GENDIB_SOURCES = \ - $(GENDIB_BASE_)gendib.c - -GENDIB_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(GENDIB_SOURCES:.c=.o)) - -GENDIB_HOST_CFLAGS = $(TOOLS_CFLAGS) - -GENDIB_HOST_LFLAGS = $(TOOLS_LFLAGS) - -$(GENDIB_TARGET): $(GENDIB_OBJECTS) | $(GENDIB_OUT) - $(ECHO_LD) - ${host_gcc} $(GENDIB_OBJECTS) $(GENDIB_HOST_LFLAGS) -o $@ - -$(GENDIB_INT_)gendib.o: $(GENDIB_BASE_)gendib.c | $(GENDIB_INT) - $(ECHO_CC) - ${host_gcc} $(GENDIB_HOST_CFLAGS) -c $< -o $@ - -.PHONY: gendib -gendib: $(GENDIB_TARGET) - -.PHONY: gendib_clean -gendib_clean: - -@$(rm) $(GENDIB_TARGET) $(GENDIB_OBJECTS) 2>$(NUL) -clean: gendib_clean - -GENDIB_DIB_DIR = $(INTERMEDIATE_)subsystems$(SEP)win32$(SEP)win32k$(SEP)dib - -GENDIB_DIB_FILES = \ - $(GENDIB_DIB_DIR)$(SEP)dib32gen.c \ - $(GENDIB_DIB_DIR)$(SEP)dib16gen.c \ - $(GENDIB_DIB_DIR)$(SEP)dib8gen.c - -$(GENDIB_DIB_FILES): $(GENDIB_TARGET) - ${mkdir} $(GENDIB_DIB_DIR) 2>$(NUL) - $(ECHO_GENDIB) - $(Q)$(GENDIB_TARGET) $(GENDIB_DIB_DIR) diff --git a/reactos/tools/mkconfig.c b/reactos/tools/mkconfig.c deleted file mode 100644 index 244de45667a..00000000000 --- a/reactos/tools/mkconfig.c +++ /dev/null @@ -1,136 +0,0 @@ -#include -#include -#include - -#ifndef max -#define max(a, b) ((a) > (b) ? (a) : (b)) -#endif - -int -write_if_change(char* outbuf, char* filename) -{ - FILE* out; - unsigned int end; - char* cmpbuf; - unsigned int stat; - - out = fopen(filename, "rb"); - if (out == NULL) - { - out = fopen(filename, "wb"); - if (out == NULL) - { - fprintf(stderr, "Unable to create output file\n"); - return(1); - } - fputs(outbuf, out); - fclose(out); - return(0); - } - - fseek(out, 0, SEEK_END); - end = ftell(out); - cmpbuf = malloc(end); - if (cmpbuf == NULL) - { - fprintf(stderr, "Out of memory\n"); - fclose(out); - return(1); - } - - fseek(out, 0, SEEK_SET); - stat = fread(cmpbuf, 1, end, out); - if (stat != end) - { - fprintf(stderr, "Failed to read data\n"); - fclose(out); - return(1); - } - if (end == strlen(outbuf) && memcmp(cmpbuf, outbuf, end) == 0) - { - fclose(out); - return(0); - } - - fclose(out); - out = fopen(filename, "wb"); - if (out == NULL) - { - fprintf(stderr, "Unable to create output file\n"); - return(1); - } - - stat = fwrite(outbuf, 1, strlen(outbuf), out); - if (strlen(outbuf) != stat) - { - fprintf(stderr, "Unable to write output file\n"); - fclose(out); - return(1); - } - fclose(out); - return(0); -} - -int -main(int argc, char* argv[]) -{ - int include_tests; - unsigned int i; - char* outbuf; - char* s; - char config[512]; - - if (argc == 1) - { - fprintf(stderr, "Not enough arguments\n"); - return(1); - } - - outbuf = malloc(256 * 1024); - if (outbuf == NULL) - { - fprintf(stderr, "Out of memory 1\n"); - return(1); - } - - s = outbuf; - s = s + sprintf(s, "/* Automatically generated, "); - s = s + sprintf(s, "Edit the Makefile to change configuration */\n"); - s = s + sprintf(s, "#ifndef __INCLUDE_CONFIG_H\n"); - s = s + sprintf(s, "#define __INCLUDE_CONFIG_H\n"); - strcpy(config, ""); - include_tests = 0; - for (i = 2; i < argc; i++) - { - if (strcmp(argv[i], "REGTESTS") == 0) - { - include_tests = 1; - } - else - { - s = s + sprintf(s, "#ifndef %s\n", argv[i]); - s = s + sprintf(s, "#define %s\n", argv[i]); - s = s + sprintf(s, "#endif /* %s */\n", argv[i]); - } - strcat(config, argv[i]); - if (i != (argc - 1)) - { - strcat(config, " "); - } - } - if (include_tests) - { - s = s + sprintf(s, "#ifndef __ASM__\n"); - s = s + sprintf(s, "extern void PrepareTests();\n"); - s = s + sprintf(s, "#define PREPARE_TESTS PrepareTests();\n"); - s = s + sprintf(s, "#endif /* __ASM__ */\n"); - } - else - { - s = s + sprintf(s, "#define PREPARE_TESTS\n"); - } - s = s + sprintf(s, "#define CONFIG \"%s\"\n", config); - s = s + sprintf(s, "#endif /* __INCLUDE_CONFIG_H */\n"); - - return(write_if_change(outbuf, argv[1])); -} diff --git a/reactos/tools/mkhive/binhive.c b/reactos/tools/mkhive/binhive.c deleted file mode 100644 index e5dcbc5d20e..00000000000 --- a/reactos/tools/mkhive/binhive.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/binhive.c - * PURPOSE: Binary hive export code - * PROGRAMMER: Hervé Poussineau - */ - -/* INCLUDES *****************************************************************/ - -#include - -#include "mkhive.h" - -BOOL -ExportBinaryHive( - IN PCSTR FileName, - IN PCMHIVE Hive) -{ - FILE *File; - BOOL ret; - - printf (" Creating binary hive: %s\n", FileName); - - /* Create new hive file */ - File = fopen (FileName, "w+b"); - if (File == NULL) - { - printf(" Error creating/opening file\n"); - return FALSE; - } - - fseek (File, 0, SEEK_SET); - - Hive->FileHandles[HFILE_TYPE_PRIMARY] = (HANDLE)File; - ret = HvWriteHive(&Hive->Hive); - fclose (File); - return ret; -} - -/* EOF */ diff --git a/reactos/tools/mkhive/binhive.h b/reactos/tools/mkhive/binhive.h deleted file mode 100644 index 6ca62299dc2..00000000000 --- a/reactos/tools/mkhive/binhive.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/binhive.h - * PURPOSE: Binary hive export code - * PROGRAMMER: Hervé Poussineau - */ - -#ifndef __BINHIVE_H__ -#define __BINHIVE_H__ - -BOOL -ExportBinaryHive( - IN PCSTR FileName, - IN PCMHIVE Hive); - -#endif /* __BINHIVE_H__ */ - -/* EOF */ diff --git a/reactos/tools/mkhive/cmi.c b/reactos/tools/mkhive/cmi.c deleted file mode 100644 index b95f60c5c15..00000000000 --- a/reactos/tools/mkhive/cmi.c +++ /dev/null @@ -1,820 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/cmi.c - * PURPOSE: Registry file manipulation routines - * PROGRAMMER: Hervé Poussineau - */ - -#define NDEBUG -#include "mkhive.h" - -static PVOID -NTAPI -CmpAllocate( - IN SIZE_T Size, - IN BOOLEAN Paged, - IN ULONG Tag) -{ - return (PVOID) malloc((size_t)Size); -} - -static VOID -NTAPI -CmpFree( - IN PVOID Ptr, - IN ULONG Quota) -{ - free(Ptr); -} - -static BOOLEAN -NTAPI -CmpFileRead( - IN PHHIVE RegistryHive, - IN ULONG FileType, - IN PULONG FileOffset, - OUT PVOID Buffer, - IN SIZE_T BufferLength) -{ - DPRINT1("CmpFileRead() unimplemented\n"); - return FALSE; -} - -static BOOLEAN -NTAPI -CmpFileWrite( - IN PHHIVE RegistryHive, - IN ULONG FileType, - IN PULONG FileOffset, - IN PVOID Buffer, - IN SIZE_T BufferLength) -{ - PCMHIVE CmHive = (PCMHIVE)RegistryHive; - FILE *File = CmHive->FileHandles[HFILE_TYPE_PRIMARY]; - if (0 != fseek (File, *FileOffset, SEEK_SET)) - return FALSE; - return BufferLength == fwrite (Buffer, 1, BufferLength, File); -} - -static BOOLEAN -NTAPI -CmpFileSetSize( - IN PHHIVE RegistryHive, - IN ULONG FileType, - IN ULONG FileSize, - IN ULONG OldFileSize) -{ - DPRINT1("CmpFileSetSize() unimplemented\n"); - return FALSE; -} - -static BOOLEAN -NTAPI -CmpFileFlush( - IN PHHIVE RegistryHive, - IN ULONG FileType, - PLARGE_INTEGER FileOffset, - ULONG Length) -{ - PCMHIVE CmHive = (PCMHIVE)RegistryHive; - FILE *File = CmHive->FileHandles[HFILE_TYPE_PRIMARY]; - return 0 == fflush (File); -} - -NTSTATUS -CmiInitializeTempHive( - IN OUT PCMHIVE Hive) -{ - NTSTATUS Status; - - RtlZeroMemory ( - Hive, - sizeof(CMHIVE)); - - DPRINT("Hive 0x%p\n", Hive); - - Status = HvInitialize(&Hive->Hive, - HINIT_CREATE, - 0, - 0, - 0, - CmpAllocate, - CmpFree, - CmpFileSetSize, - CmpFileWrite, - CmpFileRead, - CmpFileFlush, - 1, - NULL); - if (!NT_SUCCESS(Status)) - { - return Status; - } - - if (!CmCreateRootNode (&Hive->Hive, L"")) - { - HvFree (&Hive->Hive); - return STATUS_INSUFFICIENT_RESOURCES; - } - - Hive->Flags = HIVE_NO_FILE; - - /* Add the new hive to the hive list */ - InsertTailList ( - &CmiHiveListHead, - &Hive->HiveList); - - VERIFY_REGISTRY_HIVE (Hive); - - return STATUS_SUCCESS; -} - -static NTSTATUS -CmiAddKeyToHashTable( - IN PCMHIVE RegistryHive, - IN OUT PCM_KEY_FAST_INDEX HashCell, - IN HCELL_INDEX HashCellIndex, - IN PCM_KEY_NODE NewKeyCell, - IN HCELL_INDEX NKBOffset) -{ - ULONG i; - ULONG HashKey = 0; - - if (NewKeyCell->Flags & KEY_COMP_NAME) - { - RtlCopyMemory( - &HashKey, - NewKeyCell->Name, - min(NewKeyCell->NameLength, sizeof(ULONG))); - } - - for (i = 0; i < HashCell->Count; i++) - { - if (HashCell->List[i].HashKey > HashKey) - break; - } - - if (i < HashCell->Count) - { - RtlMoveMemory(HashCell->List + i + 1, - HashCell->List + i, - (HashCell->Count - i) * - sizeof(HashCell->List[0])); - } - - HashCell->List[i].Cell = NKBOffset; - HashCell->List[i].HashKey = HashKey; - HashCell->Count++; - HvMarkCellDirty(&RegistryHive->Hive, HashCellIndex, FALSE); - return STATUS_SUCCESS; -} - -static NTSTATUS -CmiAllocateHashTableCell ( - IN PCMHIVE RegistryHive, - OUT PCM_KEY_FAST_INDEX *HashBlock, - OUT HCELL_INDEX *HBOffset, - IN USHORT SubKeyCount, - IN HSTORAGE_TYPE Storage) -{ - PCM_KEY_FAST_INDEX NewHashBlock; - ULONG NewHashSize; - NTSTATUS Status; - - Status = STATUS_SUCCESS; - *HashBlock = NULL; - NewHashSize = FIELD_OFFSET(CM_KEY_FAST_INDEX, List) + - (SubKeyCount * sizeof(CM_INDEX)); - *HBOffset = HvAllocateCell(&RegistryHive->Hive, NewHashSize, Storage, HCELL_NIL); - - if (*HBOffset == HCELL_NIL) - { - Status = STATUS_INSUFFICIENT_RESOURCES; - } - else - { - NewHashBlock = (PCM_KEY_FAST_INDEX)HvGetCell (&RegistryHive->Hive, *HBOffset); - NewHashBlock->Signature = CM_KEY_FAST_LEAF; - NewHashBlock->Count = 0; - *HashBlock = NewHashBlock; - } - - return Status; -} - -NTSTATUS -CmiAddSubKey( - IN PCMHIVE RegistryHive, - IN PCM_KEY_NODE ParentKeyCell, - IN HCELL_INDEX ParentKeyCellOffset, - IN PCUNICODE_STRING SubKeyName, - IN ULONG CreateOptions, - OUT PCM_KEY_NODE *pSubKeyCell, - OUT HCELL_INDEX *pBlockOffset) -{ - PCM_KEY_FAST_INDEX HashBlock; - HCELL_INDEX NKBOffset; - PCM_KEY_NODE NewKeyCell; - ULONG NewBlockSize; - NTSTATUS Status; - USHORT NameLength; - PWSTR NamePtr; - BOOLEAN Packable; - HSTORAGE_TYPE Storage; - ULONG i; - - DPRINT("CmiAddSubKey(%p '%wZ')\n", RegistryHive, SubKeyName); - - VERIFY_KEY_CELL(ParentKeyCell); - - /* Skip leading backslash */ - if (SubKeyName->Buffer[0] == L'\\') - { - NamePtr = &SubKeyName->Buffer[1]; - NameLength = SubKeyName->Length - sizeof(WCHAR); - } - else - { - NamePtr = SubKeyName->Buffer; - NameLength = SubKeyName->Length; - } - - /* Check whether key name can be packed */ - Packable = TRUE; - for (i = 0; i < NameLength / sizeof(WCHAR); i++) - { - if (NamePtr[i] & 0xFF00) - { - Packable = FALSE; - break; - } - } - - /* Adjust name size */ - if (Packable) - { - NameLength = NameLength / sizeof(WCHAR); - } - - Status = STATUS_SUCCESS; - - Storage = (CreateOptions & REG_OPTION_VOLATILE) ? Volatile : Stable; - NewBlockSize = FIELD_OFFSET(CM_KEY_NODE, Name) + NameLength; - NKBOffset = HvAllocateCell(&RegistryHive->Hive, NewBlockSize, Storage, HCELL_NIL); - if (NKBOffset == HCELL_NIL) - { - Status = STATUS_INSUFFICIENT_RESOURCES; - } - else - { - NewKeyCell = (PCM_KEY_NODE)HvGetCell (&RegistryHive->Hive, NKBOffset); - NewKeyCell->Signature = CM_KEY_NODE_SIGNATURE; - if (CreateOptions & REG_OPTION_VOLATILE) - { - NewKeyCell->Flags = KEY_IS_VOLATILE; - } - else - { - NewKeyCell->Flags = 0; - } - KeQuerySystemTime(&NewKeyCell->LastWriteTime); - NewKeyCell->Parent = HCELL_NIL; - NewKeyCell->SubKeyCounts[Stable] = 0; - NewKeyCell->SubKeyCounts[Volatile] = 0; - NewKeyCell->SubKeyLists[Stable] = HCELL_NIL; - NewKeyCell->SubKeyLists[Volatile] = HCELL_NIL; - NewKeyCell->ValueList.Count = 0; - NewKeyCell->ValueList.List = HCELL_NIL; - NewKeyCell->Security = HCELL_NIL; - NewKeyCell->Class = HCELL_NIL; - - /* Pack the key name */ - NewKeyCell->NameLength = NameLength; - if (Packable) - { - NewKeyCell->Flags |= KEY_COMP_NAME; - for (i = 0; i < NameLength; i++) - { - ((PCHAR)NewKeyCell->Name)[i] = (CHAR)(NamePtr[i] & 0x00FF); - } - } - else - { - RtlCopyMemory( - NewKeyCell->Name, - NamePtr, - NameLength); - } - - VERIFY_KEY_CELL(NewKeyCell); - } - - if (!NT_SUCCESS(Status)) - { - return Status; - } - - if (ParentKeyCell->SubKeyLists[Storage] == HCELL_NIL) - { - Status = CmiAllocateHashTableCell ( - RegistryHive, - &HashBlock, - &ParentKeyCell->SubKeyLists[Storage], - REG_INIT_HASH_TABLE_SIZE, - Storage); - if (!NT_SUCCESS(Status)) - { - return(Status); - } - } - else - { - HashBlock = (PCM_KEY_FAST_INDEX)HvGetCell ( - &RegistryHive->Hive, - ParentKeyCell->SubKeyLists[Storage]); - ASSERT(HashBlock->Signature == CM_KEY_FAST_LEAF); - - if (HashBlock->Count == - ((HvGetCellSize(&RegistryHive->Hive, HashBlock) - FIELD_OFFSET(CM_KEY_FAST_INDEX, List)) / sizeof(CM_INDEX))) - { - PCM_KEY_FAST_INDEX NewHashBlock; - HCELL_INDEX HTOffset; - - /* Reallocate the hash table cell */ - Status = CmiAllocateHashTableCell ( - RegistryHive, - &NewHashBlock, - &HTOffset, - HashBlock->Count + - REG_EXTEND_HASH_TABLE_SIZE, - Storage); - if (!NT_SUCCESS(Status)) - { - return Status; - } - RtlCopyMemory( - &NewHashBlock->List[0], - &HashBlock->List[0], - sizeof(NewHashBlock->List[0]) * HashBlock->Count); - NewHashBlock->Count = HashBlock->Count; - HvFreeCell (&RegistryHive->Hive, ParentKeyCell->SubKeyLists[Storage]); - ParentKeyCell->SubKeyLists[Storage] = HTOffset; - HashBlock = NewHashBlock; - } - } - - Status = CmiAddKeyToHashTable( - RegistryHive, - HashBlock, - ParentKeyCell->SubKeyLists[Storage], - NewKeyCell, - NKBOffset); - if (NT_SUCCESS(Status)) - { - ParentKeyCell->SubKeyCounts[Storage]++; - *pSubKeyCell = NewKeyCell; - *pBlockOffset = NKBOffset; - } - - KeQuerySystemTime(&ParentKeyCell->LastWriteTime); - HvMarkCellDirty(&RegistryHive->Hive, ParentKeyCellOffset, FALSE); - - return Status; -} - -static BOOLEAN -CmiCompareHash( - IN PCUNICODE_STRING KeyName, - IN PCHAR HashString) -{ - CHAR Buffer[4]; - - Buffer[0] = (KeyName->Length >= 2) ? (CHAR)KeyName->Buffer[0] : 0; - Buffer[1] = (KeyName->Length >= 4) ? (CHAR)KeyName->Buffer[1] : 0; - Buffer[2] = (KeyName->Length >= 6) ? (CHAR)KeyName->Buffer[2] : 0; - Buffer[3] = (KeyName->Length >= 8) ? (CHAR)KeyName->Buffer[3] : 0; - - return (strncmp(Buffer, HashString, 4) == 0); -} - - -BOOLEAN -CmiCompareHashI( - IN PCUNICODE_STRING KeyName, - IN PCHAR HashString) -{ - CHAR Buffer[4]; - - Buffer[0] = (KeyName->Length >= 2) ? (CHAR)KeyName->Buffer[0] : 0; - Buffer[1] = (KeyName->Length >= 4) ? (CHAR)KeyName->Buffer[1] : 0; - Buffer[2] = (KeyName->Length >= 6) ? (CHAR)KeyName->Buffer[2] : 0; - Buffer[3] = (KeyName->Length >= 8) ? (CHAR)KeyName->Buffer[3] : 0; - - return (strncasecmp(Buffer, HashString, 4) == 0); -} - -static BOOLEAN -CmiCompareKeyNames( - IN PCUNICODE_STRING KeyName, - IN PCM_KEY_NODE KeyCell) -{ - PWCHAR UnicodeName; - USHORT i; - - if (KeyCell->Flags & KEY_COMP_NAME) - { - if (KeyName->Length != KeyCell->NameLength * sizeof(WCHAR)) - return FALSE; - - for (i = 0; i < KeyCell->NameLength; i++) - { - if (KeyName->Buffer[i] != ((PCHAR)KeyCell->Name)[i]) - return FALSE; - } - } - else - { - if (KeyName->Length != KeyCell->NameLength) - return FALSE; - - UnicodeName = (PWCHAR)KeyCell->Name; - for (i = 0; i < KeyCell->NameLength / sizeof(WCHAR); i++) - { - if (KeyName->Buffer[i] != UnicodeName[i]) - return FALSE; - } - } - - return TRUE; -} - -static BOOLEAN -CmiCompareKeyNamesI( - IN PCUNICODE_STRING KeyName, - IN PCM_KEY_NODE KeyCell) -{ - PWCHAR UnicodeName; - USHORT i; - - DPRINT("Flags: %hx\n", KeyCell->Flags); - - if (KeyCell->Flags & KEY_COMP_NAME) - { - if (KeyName->Length != KeyCell->NameLength * sizeof(WCHAR)) - return FALSE; - - /* FIXME: use _strnicmp */ - for (i = 0; i < KeyCell->NameLength; i++) - { - if (RtlUpcaseUnicodeChar(KeyName->Buffer[i]) != - RtlUpcaseUnicodeChar(((PCHAR)KeyCell->Name)[i])) - return FALSE; - } - } - else - { - if (KeyName->Length != KeyCell->NameLength) - return FALSE; - - UnicodeName = (PWCHAR)KeyCell->Name; - /* FIXME: use _strnicmp */ - for (i = 0; i < KeyCell->NameLength / sizeof(WCHAR); i++) - { - if (RtlUpcaseUnicodeChar(KeyName->Buffer[i]) != - RtlUpcaseUnicodeChar(UnicodeName[i])) - return FALSE; - } - } - - return TRUE; -} - -NTSTATUS -CmiScanForSubKey( - IN PCMHIVE RegistryHive, - IN PCM_KEY_NODE KeyCell, - IN PCUNICODE_STRING SubKeyName, - IN ULONG Attributes, - OUT PCM_KEY_NODE *pSubKeyCell, - OUT HCELL_INDEX *pBlockOffset) -{ - PCM_KEY_FAST_INDEX HashBlock; - PCM_KEY_NODE CurSubKeyCell; - ULONG Storage; - ULONG i; - - VERIFY_KEY_CELL(KeyCell); - - DPRINT("CmiScanForSubKey('%wZ')\n", SubKeyName); - - ASSERT(RegistryHive); - - *pSubKeyCell = NULL; - - for (Storage = Stable; Storage < HTYPE_COUNT; Storage++) - { - if (KeyCell->SubKeyLists[Storage] == HCELL_NIL) - { - /* The key does not have any subkeys */ - continue; - } - - /* Get hash table */ - HashBlock = (PCM_KEY_FAST_INDEX)HvGetCell (&RegistryHive->Hive, KeyCell->SubKeyLists[Storage]); - if (!HashBlock || HashBlock->Signature != CM_KEY_FAST_LEAF) - return STATUS_UNSUCCESSFUL; - - for (i = 0; i < KeyCell->SubKeyCounts[Storage]; i++) - { - if (Attributes & OBJ_CASE_INSENSITIVE) - { - if ((HashBlock->List[i].HashKey == 0 - || CmiCompareHashI(SubKeyName, (PCHAR)&HashBlock->List[i].HashKey))) - { - CurSubKeyCell = (PCM_KEY_NODE)HvGetCell ( - &RegistryHive->Hive, - HashBlock->List[i].Cell); - - if (CmiCompareKeyNamesI(SubKeyName, CurSubKeyCell)) - { - *pSubKeyCell = CurSubKeyCell; - *pBlockOffset = HashBlock->List[i].Cell; - return STATUS_SUCCESS; - } - } - } - else - { - if ((HashBlock->List[i].HashKey == 0 - || CmiCompareHash(SubKeyName, (PCHAR)&HashBlock->List[i].HashKey))) - { - CurSubKeyCell = (PCM_KEY_NODE)HvGetCell ( - &RegistryHive->Hive, - HashBlock->List[i].Cell); - - if (CmiCompareKeyNames(SubKeyName, CurSubKeyCell)) - { - *pSubKeyCell = CurSubKeyCell; - *pBlockOffset = HashBlock->List[i].Cell; - return STATUS_SUCCESS; - } - } - } - } - } - - return STATUS_OBJECT_NAME_NOT_FOUND; -} - -static USHORT -CmiGetPackedNameLength( - IN PCUNICODE_STRING Name, - OUT PBOOLEAN pPackable) -{ - USHORT i; - - *pPackable = TRUE; - - for (i = 0; i < Name->Length / sizeof(WCHAR); i++) - { - if (Name->Buffer[i] & 0xFF00) - { - *pPackable = FALSE; - return Name->Length; - } - } - - return (Name->Length / sizeof(WCHAR)); -} - -static NTSTATUS -CmiAllocateValueCell( - IN PCMHIVE RegistryHive, - OUT PCM_KEY_VALUE *ValueCell, - OUT HCELL_INDEX *VBOffset, - IN PCUNICODE_STRING ValueName, - IN HSTORAGE_TYPE Storage) -{ - PCM_KEY_VALUE NewValueCell; - BOOLEAN Packable; - USHORT NameLength, i; - NTSTATUS Status; - - Status = STATUS_SUCCESS; - - NameLength = CmiGetPackedNameLength(ValueName, &Packable); - - DPRINT("ValueName->Length %lu NameLength %lu\n", ValueName->Length, NameLength); - - *VBOffset = HvAllocateCell(&RegistryHive->Hive, sizeof(CM_KEY_VALUE) + NameLength, Storage, HCELL_NIL); - if (*VBOffset == HCELL_NIL) - { - Status = STATUS_INSUFFICIENT_RESOURCES; - } - else - { - NewValueCell = (PCM_KEY_VALUE)HvGetCell (&RegistryHive->Hive, *VBOffset); - NewValueCell->Signature = CM_KEY_VALUE_SIGNATURE; - NewValueCell->NameLength = (USHORT)NameLength; - if (Packable) - { - /* Pack the value name */ - for (i = 0; i < NameLength; i++) - ((PCHAR)NewValueCell->Name)[i] = (CHAR)ValueName->Buffer[i]; - NewValueCell->Flags |= VALUE_COMP_NAME; - } - else - { - /* Copy the value name */ - RtlCopyMemory( - NewValueCell->Name, - ValueName->Buffer, - NameLength); - NewValueCell->Flags = 0; - } - NewValueCell->Type = 0; - NewValueCell->DataLength = 0; - NewValueCell->Data = HCELL_NIL; - *ValueCell = NewValueCell; - } - - return Status; -} - -NTSTATUS -CmiAddValueKey( - IN PCMHIVE RegistryHive, - IN PCM_KEY_NODE KeyCell, - IN HCELL_INDEX KeyCellOffset, - IN PCUNICODE_STRING ValueName, - OUT PCM_KEY_VALUE *pValueCell, - OUT HCELL_INDEX *pValueCellOffset) -{ - PVALUE_LIST_CELL ValueListCell; - PCM_KEY_VALUE NewValueCell; - HCELL_INDEX ValueListCellOffset; - HCELL_INDEX NewValueCellOffset; - ULONG CellSize; - HSTORAGE_TYPE Storage; - NTSTATUS Status; - - Storage = (KeyCell->Flags & KEY_IS_VOLATILE) ? Volatile : Stable; - if (KeyCell->ValueList.List == HCELL_NIL) - { - /* Allocate some room for the value list */ - CellSize = sizeof(VALUE_LIST_CELL) + (3 * sizeof(HCELL_INDEX)); - ValueListCellOffset = HvAllocateCell(&RegistryHive->Hive, CellSize, Storage, HCELL_NIL); - if (ValueListCellOffset == HCELL_NIL) - return STATUS_INSUFFICIENT_RESOURCES; - - ValueListCell = (PVALUE_LIST_CELL)HvGetCell(&RegistryHive->Hive, ValueListCellOffset); - if (!ValueListCell) - return STATUS_UNSUCCESSFUL; - KeyCell->ValueList.List = ValueListCellOffset; - HvMarkCellDirty(&RegistryHive->Hive, KeyCellOffset, FALSE); - } - else - { - ValueListCell = (PVALUE_LIST_CELL)HvGetCell(&RegistryHive->Hive, KeyCell->ValueList.List); - if (!ValueListCell) - return STATUS_UNSUCCESSFUL; - CellSize = ABS_VALUE(HvGetCellSize(&RegistryHive->Hive, ValueListCell)); - - if (KeyCell->ValueList.Count >= CellSize / sizeof(HCELL_INDEX)) - { - CellSize *= 2; - ValueListCellOffset = HvReallocateCell(&RegistryHive->Hive, KeyCell->ValueList.List, CellSize); - if (ValueListCellOffset == HCELL_NIL) - return STATUS_INSUFFICIENT_RESOURCES; - - ValueListCell = (PVALUE_LIST_CELL)HvGetCell(&RegistryHive->Hive, ValueListCellOffset); - if (!ValueListCell) - return STATUS_UNSUCCESSFUL; - KeyCell->ValueList.List = ValueListCellOffset; - HvMarkCellDirty(&RegistryHive->Hive, KeyCellOffset, FALSE); - } - } - - Status = CmiAllocateValueCell( - RegistryHive, - &NewValueCell, - &NewValueCellOffset, - ValueName, - Storage); - if (!NT_SUCCESS(Status)) - return Status; - - ValueListCell->ValueOffset[KeyCell->ValueList.Count] = NewValueCellOffset; - KeyCell->ValueList.Count++; - - HvMarkCellDirty(&RegistryHive->Hive, KeyCellOffset, FALSE); - HvMarkCellDirty(&RegistryHive->Hive, KeyCell->ValueList.List, FALSE); - HvMarkCellDirty(&RegistryHive->Hive, NewValueCellOffset, FALSE); - - *pValueCell = NewValueCell; - *pValueCellOffset = NewValueCellOffset; - - return STATUS_SUCCESS; -} - -static BOOLEAN -CmiComparePackedNames( - IN PCUNICODE_STRING Name, - IN PUCHAR NameBuffer, - IN USHORT NameBufferSize, - IN BOOLEAN NamePacked) -{ - PWCHAR UNameBuffer; - ULONG i; - - if (NamePacked == TRUE) - { - if (Name->Length != NameBufferSize * sizeof(WCHAR)) - return FALSE; - - for (i = 0; i < Name->Length / sizeof(WCHAR); i++) - { - if (RtlUpcaseUnicodeChar(Name->Buffer[i]) != RtlUpcaseUnicodeChar((WCHAR)NameBuffer[i])) - return FALSE; - } - } - else - { - if (Name->Length != NameBufferSize) - return FALSE; - - UNameBuffer = (PWCHAR)NameBuffer; - - for (i = 0; i < Name->Length / sizeof(WCHAR); i++) - { - if (RtlUpcaseUnicodeChar(Name->Buffer[i]) != RtlUpcaseUnicodeChar(UNameBuffer[i])) - return FALSE; - } - } - - return TRUE; -} - -NTSTATUS -CmiScanForValueKey( - IN PCMHIVE RegistryHive, - IN PCM_KEY_NODE KeyCell, - IN PCUNICODE_STRING ValueName, - OUT PCM_KEY_VALUE *pValueCell, - OUT HCELL_INDEX *pValueCellOffset) -{ - PVALUE_LIST_CELL ValueListCell; - PCM_KEY_VALUE CurValueCell; - ULONG i; - - *pValueCell = NULL; - *pValueCellOffset = HCELL_NIL; - - /* The key does not have any values */ - if (KeyCell->ValueList.List == HCELL_NIL) - { - return STATUS_OBJECT_NAME_NOT_FOUND; - } - - ValueListCell = (PVALUE_LIST_CELL)HvGetCell(&RegistryHive->Hive, KeyCell->ValueList.List); - - VERIFY_VALUE_LIST_CELL(ValueListCell); - - for (i = 0; i < KeyCell->ValueList.Count; i++) - { - CurValueCell = (PCM_KEY_VALUE)HvGetCell( - &RegistryHive->Hive, - ValueListCell->ValueOffset[i]); - - if (CmiComparePackedNames( - ValueName, - (PUCHAR)CurValueCell->Name, - CurValueCell->NameLength, - (BOOLEAN)((CurValueCell->Flags & VALUE_COMP_NAME) ? TRUE : FALSE))) - { - *pValueCell = CurValueCell; - *pValueCellOffset = ValueListCell->ValueOffset[i]; - return STATUS_SUCCESS; - } - } - - return STATUS_OBJECT_NAME_NOT_FOUND; -} diff --git a/reactos/tools/mkhive/cmi.h b/reactos/tools/mkhive/cmi.h deleted file mode 100644 index 4a8f5e06095..00000000000 --- a/reactos/tools/mkhive/cmi.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/cmi.h - * PURPOSE: Registry file manipulation routines - * PROGRAMMER: Hervé Poussineau - */ - -#define VERIFY_KEY_CELL(key) -#define VERIFY_VALUE_LIST_CELL(cell) - -NTSTATUS -CmiInitializeTempHive( - IN OUT PCMHIVE Hive); - -NTSTATUS -CmiAddSubKey( - IN PCMHIVE RegistryHive, - IN PCM_KEY_NODE ParentKeyCell, - IN HCELL_INDEX ParentKeyCellOffset, - IN PCUNICODE_STRING SubKeyName, - IN ULONG CreateOptions, - OUT PCM_KEY_NODE *pSubKeyCell, - OUT HCELL_INDEX *pBlockOffset); - -NTSTATUS -CmiScanForSubKey( - IN PCMHIVE RegistryHive, - IN PCM_KEY_NODE KeyCell, - IN PCUNICODE_STRING SubKeyName, - IN ULONG Attributes, - OUT PCM_KEY_NODE *pSubKeyCell, - OUT HCELL_INDEX *pBlockOffset); - -NTSTATUS -CmiAddValueKey( - IN PCMHIVE RegistryHive, - IN PCM_KEY_NODE KeyCell, - IN HCELL_INDEX KeyCellOffset, - IN PCUNICODE_STRING ValueName, - OUT PCM_KEY_VALUE *pValueCell, - OUT HCELL_INDEX *pValueCellOffset); - -NTSTATUS -CmiScanForValueKey( - IN PCMHIVE RegistryHive, - IN PCM_KEY_NODE KeyCell, - IN PCUNICODE_STRING ValueName, - OUT PCM_KEY_VALUE *pValueCell, - OUT HCELL_INDEX *pValueCellOffset); diff --git a/reactos/tools/mkhive/mkhive.c b/reactos/tools/mkhive/mkhive.c deleted file mode 100644 index 1134140a292..00000000000 --- a/reactos/tools/mkhive/mkhive.c +++ /dev/null @@ -1,182 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2003, 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/mkhive.c - * PURPOSE: Hive maker - * PROGRAMMER: Eric Kohl - * Hervé Poussineau - */ - -#include -#include -#include - -#include "mkhive.h" - -#ifdef _MSC_VER -#include -#define PATH_MAX _MAX_PATH -#endif//_MSC_VER - -#ifndef _WIN32 -#ifndef PATH_MAX -#define PATH_MAX 260 -#endif -#define DIR_SEPARATOR_CHAR '/' -#define DIR_SEPARATOR_STRING "/" -#else -#define DIR_SEPARATOR_CHAR '\\' -#define DIR_SEPARATOR_STRING "\\" -#endif - - -void usage (void) -{ - printf ("Usage: mkhive [addinf]\n\n"); - printf (" srcdir - inf files are read from this directory\n"); - printf (" dstdir - binary hive files are created in this directory\n"); - printf (" addinf - additional inf files with full path\n"); -} - -void convert_path(char *dst, char *src) -{ - int i; - - i = 0; - while (src[i] != 0) - { -#ifdef _WIN32 - if (src[i] == '/') - { - dst[i] = '\\'; - } -#else - if (src[i] == '\\') - { - dst[i] = '/'; - } -#endif - else - { - dst[i] = src[i]; - } - - i++; - } - dst[i] = 0; -} - -int main (int argc, char *argv[]) -{ - char FileName[PATH_MAX]; - int Param; - - printf ("Binary hive maker: %s\n", argv[3]); - - if (argc < 4) - { - usage (); - return 1; - } - - RegInitializeRegistry (); - - convert_path (FileName, argv[1]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "hivesys_"); - strcat (FileName, argv[3]); - strcat (FileName, ".inf"); - ImportRegistryFile (FileName); - - convert_path (FileName, argv[1]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "hivecls_"); - strcat (FileName, argv[3]); - strcat (FileName, ".inf"); - ImportRegistryFile (FileName); - - convert_path (FileName, argv[1]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "hivesft_"); - strcat (FileName, argv[3]); - strcat (FileName, ".inf"); - ImportRegistryFile (FileName); - - convert_path (FileName, argv[1]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "hivedef_"); - strcat (FileName, argv[3]); - strcat (FileName, ".inf"); - ImportRegistryFile (FileName); - - for (Param = 4; Param < argc; Param++) - { - convert_path (FileName, argv[Param]); - ImportRegistryFile (FileName); - } - - convert_path (FileName, argv[2]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "default"); - if (!ExportBinaryHive (FileName, &DefaultHive)) - { - return 1; - } - - convert_path (FileName, argv[2]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "sam"); - if (!ExportBinaryHive (FileName, &SamHive)) - { - return 1; - } - - convert_path (FileName, argv[2]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "security"); - if (!ExportBinaryHive (FileName, &SecurityHive)) - { - return 1; - } - - convert_path (FileName, argv[2]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "software"); - if (!ExportBinaryHive (FileName, &SoftwareHive)) - { - return 1; - } - - convert_path (FileName, argv[2]); - strcat (FileName, DIR_SEPARATOR_STRING); - strcat (FileName, "system"); - if (!ExportBinaryHive (FileName, &SystemHive)) - { - return 1; - } - - //RegShutdownRegistry (); - - printf (" Done.\n"); - - return 0; -} - -/* EOF */ diff --git a/reactos/tools/mkhive/mkhive.h b/reactos/tools/mkhive/mkhive.h deleted file mode 100644 index 237bfa4ba49..00000000000 --- a/reactos/tools/mkhive/mkhive.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2003, 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/mkhive.h - * PURPOSE: Hive maker - * PROGRAMMER: Eric Kohl - * Hervé Poussineau - */ - -#ifndef __MKHIVE_H__ -#define __MKHIVE_H__ - -#include -#include - -#include - -#define USE_HOST_WCSFUNCS -#include - -// Definitions copied from -// We only want to include host headers, so we define them manually -#define STATUS_SUCCESS ((NTSTATUS)0x00000000) -#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001) -#define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002) -#define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000D) -#define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017) -#define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009A) -#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034) -#define STATUS_INVALID_PARAMETER_2 ((NTSTATUS)0xC00000F0) -#define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005) - -NTSTATUS NTAPI -RtlAnsiStringToUnicodeString( - IN OUT PUNICODE_STRING UniDest, - IN PANSI_STRING AnsiSource, - IN BOOLEAN AllocateDestinationString); -VOID NTAPI -RtlInitAnsiString( - IN OUT PANSI_STRING DestinationString, - IN PCSTR SourceString); -VOID NTAPI -RtlInitUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCWSTR SourceString); -WCHAR NTAPI -RtlUpcaseUnicodeChar( - IN WCHAR Source); - -#define CMLIB_HOST -#include -#include -#include "reginf.h" -#include "cmi.h" -#include "registry.h" -#include "binhive.h" - -#define HIVE_NO_FILE 2 -#define VERIFY_REGISTRY_HIVE(hive) -extern LIST_ENTRY CmiHiveListHead; -#define ABS_VALUE(V) (((V) < 0) ? -(V) : (V)) - -#ifndef max -#define max(a, b) (((a) > (b)) ? (a) : (b)) -#endif - -#ifndef min -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#endif - -#ifdef _WIN32 -#define strncasecmp _strnicmp -#define strcasecmp _stricmp -#else -#include -#endif//_WIN32 - -#ifdef _MSC_VER -#define GCC_PACKED -#define inline -#else//_MSC_VER -#define GCC_PACKED __attribute__((packed)) -#endif//_MSC_VER - -#endif /* __MKHIVE_H__ */ - -/* EOF */ diff --git a/reactos/tools/mkhive/mkhive.rbuild b/reactos/tools/mkhive/mkhive.rbuild deleted file mode 100644 index 0eed6bfa1f4..00000000000 --- a/reactos/tools/mkhive/mkhive.rbuild +++ /dev/null @@ -1,21 +0,0 @@ - - - - include - include/reactos - . - . - . - . - - -fshort-wchar - inflibhost - cmlibhost - host_wcsfuncs - binhive.c - cmi.c - mkhive.c - reginf.c - registry.c - rtl.c - diff --git a/reactos/tools/mkhive/reginf.c b/reactos/tools/mkhive/reginf.c deleted file mode 100644 index 02078397cde..00000000000 --- a/reactos/tools/mkhive/reginf.c +++ /dev/null @@ -1,493 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2003, 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/reginf.h - * PURPOSE: Inf file import code - * PROGRAMMER: Eric Kohl - * Hervé Poussineau - */ - -/* INCLUDES *****************************************************************/ - -#include -#include -#include - -#define NDEBUG -#include "mkhive.h" - -#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_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) - - -/* FUNCTIONS ****************************************************************/ - -static BOOL -GetRootKey (PCHAR Name) -{ - if (!strcasecmp (Name, "HKCR")) - { - strcpy (Name, "\\Registry\\Machine\\SOFTWARE\\Classes\\"); - return TRUE; - } - - if (!strcasecmp (Name, "HKCU")) - { - strcpy (Name, "\\Registry\\User\\.DEFAULT\\"); - return TRUE; - } - - if (!strcasecmp (Name, "HKLM")) - { - strcpy (Name, "\\Registry\\Machine\\"); - return TRUE; - } - - if (!strcasecmp (Name, "HKU")) - { - strcpy (Name, "\\Registry\\User\\"); - return TRUE; - } - -#if 0 - if (!strcasecmp (Name, "HKR")) - return FALSE; -#endif - - return FALSE; -} - - -/*********************************************************************** - * AppendMultiSzValue - * - * Append a multisz string to a multisz registry value. - */ -static VOID -AppendMultiSzValue ( - IN HKEY KeyHandle, - IN PCHAR ValueName, - IN PCHAR Strings, - IN SIZE_T StringSize) -{ - SIZE_T Size; - ULONG Type; - size_t Total; - PCHAR Buffer; - PCHAR p; - size_t len; - LONG Error; - - Error = RegQueryValueExA ( - KeyHandle, - ValueName, - NULL, - &Type, - NULL, - &Size); - if ((Error != ERROR_SUCCESS) || - (Type != REG_MULTI_SZ)) - return; - - Buffer = malloc (Size + StringSize); - if (Buffer == NULL) - return; - - Error = RegQueryValueExA ( - KeyHandle, - ValueName, - NULL, - NULL, - (PUCHAR)Buffer, - &Size); - if (Error != ERROR_SUCCESS) - goto done; - - /* compare each string against all the existing ones */ - Total = Size; - while (*Strings != 0) - { - len = strlen (Strings) + 1; - - for (p = Buffer; *p != 0; p += strlen (p) + 1) - if (!strcasecmp (p, Strings)) - break; - - if (*p == 0) /* not found, need to append it */ - { - memcpy (p, Strings, len); - p[len] = 0; - Total += len; - } - Strings += len; - } - - if (Total != Size) - { - DPRINT ("setting value %s to %s\n", ValueName, Buffer); - RegSetValueExA ( - KeyHandle, - ValueName, - 0, - REG_MULTI_SZ, - (PCHAR)Buffer, - (ULONG)Total); - } - -done: - free (Buffer); -} - - -/*********************************************************************** - * do_reg_operation - * - * Perform an add/delete registry operation depending on the flags. - */ -static BOOL -do_reg_operation( - IN HKEY KeyHandle, - IN PCHAR ValueName, - IN PINFCONTEXT Context, - IN ULONG Flags) -{ - CHAR EmptyStr = (CHAR)0; - ULONG Type; - ULONG Size; - LONG Error; - - if (Flags & FLG_ADDREG_DELVAL) /* deletion */ - { - if (ValueName) - { - RegDeleteValueA (KeyHandle, ValueName); - } - else - { - RegDeleteKeyA (KeyHandle, NULL); - } - - return TRUE; - } - - if (Flags & FLG_ADDREG_KEYONLY) - return TRUE; - - if (Flags & (FLG_ADDREG_NOCLOBBER | FLG_ADDREG_OVERWRITEONLY)) - { - Error = RegQueryValueExA ( - KeyHandle, - ValueName, - NULL, - NULL, - NULL, - NULL); - if ((Error == ERROR_SUCCESS) && - (Flags & FLG_ADDREG_NOCLOBBER)) - return TRUE; - - if ((Error != ERROR_SUCCESS) && - (Flags & FLG_ADDREG_OVERWRITEONLY)) - return TRUE; - } - - switch (Flags & FLG_ADDREG_TYPE_MASK) - { - case FLG_ADDREG_TYPE_SZ: - Type = REG_SZ; - break; - - case FLG_ADDREG_TYPE_MULTI_SZ: - Type = REG_MULTI_SZ; - break; - - case FLG_ADDREG_TYPE_EXPAND_SZ: - Type = REG_EXPAND_SZ; - break; - - case FLG_ADDREG_TYPE_BINARY: - Type = REG_BINARY; - break; - - case FLG_ADDREG_TYPE_DWORD: - Type = REG_DWORD; - break; - - case FLG_ADDREG_TYPE_NONE: - Type = REG_NONE; - break; - - default: - Type = Flags >> 16; - break; - } - - if (!(Flags & FLG_ADDREG_BINVALUETYPE) || - (Type == REG_DWORD && InfHostGetFieldCount (Context) == 5)) - { - PCHAR Str = NULL; - - if (Type == REG_MULTI_SZ) - { - if (InfHostGetMultiSzField (Context, 5, NULL, 0, &Size) != 0) - Size = 0; - - if (Size) - { - Str = malloc (Size); - if (Str == NULL) - return FALSE; - - InfHostGetMultiSzField (Context, 5, Str, (ULONG)Size, NULL); - } - - if (Flags & FLG_ADDREG_APPEND) - { - if (Str == NULL) - return TRUE; - - AppendMultiSzValue ( - KeyHandle, - ValueName, - Str, - Size); - - free (Str); - return TRUE; - } - /* else fall through to normal string handling */ - } - else - { - if (InfHostGetStringField (Context, 5, NULL, 0, &Size) != 0) - Size = 0; - - if (Size) - { - Str = malloc (Size); - if (Str == NULL) - return FALSE; - - InfHostGetStringField (Context, 5, Str, (ULONG)Size, NULL); - } - } - - if (Type == REG_DWORD) - { - ULONG dw = Str ? strtoul (Str, NULL, 0) : 0; - - DPRINT("setting dword %s to %lx\n", ValueName, dw); - - RegSetValueExA ( - KeyHandle, - ValueName, - 0, - Type, - (const PUCHAR)&dw, - sizeof(ULONG)); - } - else - { - DPRINT("setting value %s to %s\n", ValueName, Str); - - if (Str) - { - RegSetValueExA ( - KeyHandle, - ValueName, - 0, - Type, - (PVOID)Str, - (ULONG)Size); - } - else - { - RegSetValueExA ( - KeyHandle, - ValueName, - 0, - Type, - (PVOID)&EmptyStr, - (ULONG)sizeof(CHAR)); - } - } - free (Str); - } - else /* get the binary data */ - { - PCHAR Data = NULL; - - if (InfHostGetBinaryField (Context, 5, NULL, 0, &Size) != 0) - Size = 0; - - if (Size) - { - Data = malloc (Size); - if (Data == NULL) - return FALSE; - - DPRINT("setting binary data %s len %lu\n", ValueName, Size); - InfHostGetBinaryField (Context, 5, Data, (ULONG)Size, NULL); - } - - RegSetValueExA ( - KeyHandle, - ValueName, - 0, - Type, - (PVOID)Data, - (ULONG)Size); - - free (Data); - } - - return TRUE; -} - -/*********************************************************************** - * registry_callback - * - * Called once for each AddReg and DelReg entry in a given section. - */ -static BOOL -registry_callback (HINF hInf, PCHAR Section, BOOL Delete) -{ - CHAR Buffer[MAX_INF_STRING_LENGTH]; - PCHAR ValuePtr; - ULONG Flags; - size_t Length; - - PINFCONTEXT Context = NULL; - HKEY KeyHandle; - BOOL Ok; - - - Ok = InfHostFindFirstLine (hInf, Section, NULL, &Context) == 0; - if (!Ok) - return TRUE; /* Don't fail if the section isn't present */ - - for (;Ok; Ok = (InfHostFindNextLine (Context, Context) == 0)) - { - /* get root */ - if (InfHostGetStringField (Context, 1, Buffer, MAX_INF_STRING_LENGTH, NULL) != 0) - continue; - if (!GetRootKey (Buffer)) - continue; - - /* get key */ - Length = strlen (Buffer); - if (InfHostGetStringField (Context, 2, Buffer + Length, MAX_INF_STRING_LENGTH - (ULONG)Length, NULL) != 0) - *Buffer = 0; - - DPRINT("KeyName: <%s>\n", Buffer); - - if (Delete) - { - Flags = FLG_ADDREG_DELVAL; - } - else - { - /* get flags */ - if (InfHostGetIntField (Context, 4, (PLONG)&Flags) != 0) - Flags = 0; - } - - DPRINT("Flags: %lx\n", Flags); - - if (Delete || (Flags & FLG_ADDREG_OVERWRITEONLY)) - { - if (RegOpenKeyA (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS) - { - DPRINT("RegOpenKey(%s) failed\n", Buffer); - continue; /* ignore if it doesn't exist */ - } - } - else - { - if (RegCreateKeyA (NULL, Buffer, &KeyHandle) != ERROR_SUCCESS) - { - DPRINT("RegCreateKey(%s) failed\n", Buffer); - continue; - } - } - - /* get value name */ - if (InfHostGetStringField (Context, 3, Buffer, MAX_INF_STRING_LENGTH, NULL) == 0) - { - ValuePtr = Buffer; - } - else - { - ValuePtr = NULL; - } - - /* and now do it */ - if (!do_reg_operation (KeyHandle, ValuePtr, Context, Flags)) - { - return FALSE; - } - } - - InfHostFreeContext(Context); - - return TRUE; -} - - -BOOL -ImportRegistryFile(PCHAR FileName) -{ - HINF hInf; - ULONG ErrorLine; - - /* Load inf file from install media. */ - if (InfHostOpenFile(&hInf, FileName, &ErrorLine) != 0) - { - DPRINT1 ("InfHostOpenFile(%s) failed\n", FileName); - return FALSE; - } - - if (!registry_callback (hInf, "DelReg", TRUE)) - { - DPRINT1 ("registry_callback() for DelReg failed\n"); - } - - if (!registry_callback (hInf, "AddReg", FALSE)) - { - DPRINT1 ("registry_callback() for AddReg failed\n"); - } - - InfHostCloseFile (hInf); - - return TRUE; -} - -/* EOF */ diff --git a/reactos/tools/mkhive/reginf.h b/reactos/tools/mkhive/reginf.h deleted file mode 100644 index 04e8b0bebbf..00000000000 --- a/reactos/tools/mkhive/reginf.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/reginf.h - * PURPOSE: Inf file import code - * PROGRAMMER: Hervé Poussineau - */ - -#ifndef __REGINF_H__ -#define __REGINF_H__ - -BOOL -ImportRegistryFile(PCHAR Filename); - -#endif /* __REGINF_H__ */ - -/* EOF */ diff --git a/reactos/tools/mkhive/registry.c b/reactos/tools/mkhive/registry.c deleted file mode 100644 index 1a70bdf7931..00000000000 --- a/reactos/tools/mkhive/registry.c +++ /dev/null @@ -1,685 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2006 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. - */ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/registry.c - * PURPOSE: Registry code - * PROGRAMMER: Hervé Poussineau - */ - -/* - * TODO: - * - Implement RegDeleteKey() - * - Implement RegEnumValue() - * - Implement RegQueryValueExA() - */ - -#include -#include -#include - -#define NDEBUG -#include "mkhive.h" - -#define REG_DATA_SIZE_MASK 0x7FFFFFFF -#define REG_DATA_IN_OFFSET 0x80000000 - -static CMHIVE RootHive; -static MEMKEY RootKey; -CMHIVE DefaultHive; /* \Registry\User\.DEFAULT */ -CMHIVE SamHive; /* \Registry\Machine\SAM */ -CMHIVE SecurityHive; /* \Registry\Machine\SECURITY */ -CMHIVE SoftwareHive; /* \Registry\Machine\SOFTWARE */ -CMHIVE SystemHive; /* \Registry\Machine\SYSTEM */ - -static MEMKEY -CreateInMemoryStructure( - IN PCMHIVE RegistryHive, - IN HCELL_INDEX KeyCellOffset, - IN PCUNICODE_STRING KeyName) -{ - MEMKEY Key; - - Key = (MEMKEY) malloc (sizeof(KEY)); - if (!Key) - return NULL; - - InitializeListHead (&Key->SubKeyList); - InitializeListHead (&Key->ValueList); - InitializeListHead (&Key->KeyList); - - Key->SubKeyCount = 0; - Key->ValueCount = 0; - - Key->NameSize = KeyName->Length; - /* FIXME: It's not enough to allocate this way, because later - this memory gets overwritten with bigger names */ - Key->Name = malloc (Key->NameSize); - if (!Key->Name) - return NULL; - memcpy(Key->Name, KeyName->Buffer, KeyName->Length); - - Key->DataType = 0; - Key->DataSize = 0; - Key->Data = NULL; - - Key->RegistryHive = RegistryHive; - Key->KeyCellOffset = KeyCellOffset; - Key->KeyCell = (PCM_KEY_NODE)HvGetCell (&RegistryHive->Hive, Key->KeyCellOffset); - if (!Key->KeyCell) - { - free(Key); - return NULL; - } - Key->LinkedKey = NULL; - return Key; -} - -static LONG -RegpOpenOrCreateKey( - IN HKEY hParentKey, - IN PCWSTR KeyName, - IN BOOL AllowCreation, - OUT PHKEY Key) -{ - PWSTR LocalKeyName; - PWSTR End; - UNICODE_STRING KeyString; - NTSTATUS Status; - MEMKEY ParentKey; - MEMKEY CurrentKey; - PLIST_ENTRY Ptr; - PCM_KEY_NODE SubKeyCell; - HCELL_INDEX BlockOffset; - - DPRINT("RegpCreateOpenKey('%S')\n", KeyName); - - if (*KeyName == L'\\') - { - KeyName++; - ParentKey = RootKey; - } - else if (hParentKey == NULL) - { - ParentKey = RootKey; - } - else - { - ParentKey = HKEY_TO_MEMKEY(RootKey); - } - - LocalKeyName = (PWSTR)KeyName; - for (;;) - { - End = (PWSTR) utf16_wcschr(LocalKeyName, '\\'); - if (End) - { - KeyString.Buffer = LocalKeyName; - KeyString.Length = KeyString.MaximumLength = - (USHORT)((ULONG_PTR)End - (ULONG_PTR)LocalKeyName); - } - else - RtlInitUnicodeString(&KeyString, LocalKeyName); - - /* Redirect from 'CurrentControlSet' to 'ControlSet001' */ - if (!utf16_wcsncmp(LocalKeyName, L"CurrentControlSet", 17) && - ParentKey->NameSize == 12 && - !memcmp(ParentKey->Name, L"SYSTEM", 12)) - RtlInitUnicodeString(&KeyString, L"ControlSet001"); - - /* Check subkey in memory structure */ - Ptr = ParentKey->SubKeyList.Flink; - while (Ptr != &ParentKey->SubKeyList) - { - CurrentKey = CONTAINING_RECORD(Ptr, KEY, KeyList); - if (CurrentKey->NameSize == KeyString.Length - && memcmp(CurrentKey->Name, KeyString.Buffer, KeyString.Length) == 0) - { - goto nextsubkey; - } - - Ptr = Ptr->Flink; - } - - Status = CmiScanForSubKey( - ParentKey->RegistryHive, - ParentKey->KeyCell, - &KeyString, - OBJ_CASE_INSENSITIVE, - &SubKeyCell, - &BlockOffset); - if (AllowCreation && Status == STATUS_OBJECT_NAME_NOT_FOUND) - { - Status = CmiAddSubKey( - ParentKey->RegistryHive, - ParentKey->KeyCell, - ParentKey->KeyCellOffset, - &KeyString, - 0, - &SubKeyCell, - &BlockOffset); - } - if (!NT_SUCCESS(Status)) - return ERROR_UNSUCCESSFUL; - - /* Now, SubKeyCell/BlockOffset are valid */ - CurrentKey = CreateInMemoryStructure( - ParentKey->RegistryHive, - BlockOffset, - &KeyString); - if (!CurrentKey) - return ERROR_OUTOFMEMORY; - - /* Add CurrentKey in ParentKey */ - InsertTailList(&ParentKey->SubKeyList, &CurrentKey->KeyList); - ParentKey->SubKeyCount++; - -nextsubkey: - ParentKey = CurrentKey; - if (End) - LocalKeyName = End + 1; - else - break; - } - - *Key = MEMKEY_TO_HKEY(ParentKey); - - return ERROR_SUCCESS; -} - -LONG WINAPI -RegCreateKeyW( - IN HKEY hKey, - IN LPCWSTR lpSubKey, - OUT PHKEY phkResult) -{ - return RegpOpenOrCreateKey(hKey, lpSubKey, TRUE, phkResult); -} - -static PWSTR -MultiByteToWideChar( - IN PCSTR MultiByteString) -{ - ANSI_STRING Source; - UNICODE_STRING Destination; - NTSTATUS Status; - - RtlInitAnsiString(&Source, MultiByteString); - Status = RtlAnsiStringToUnicodeString(&Destination, &Source, TRUE); - if (!NT_SUCCESS(Status)) - return NULL; - return Destination.Buffer; -} - -LONG WINAPI -RegCreateKeyA( - IN HKEY hKey, - IN LPCSTR lpSubKey, - OUT PHKEY phkResult) -{ - PWSTR lpSubKeyW; - LONG rc; - - lpSubKeyW = MultiByteToWideChar(lpSubKey); - if (!lpSubKeyW) - return ERROR_OUTOFMEMORY; - - rc = RegCreateKeyW(hKey, lpSubKeyW, phkResult); - free(lpSubKeyW); - return rc; -} - -LONG WINAPI -RegDeleteKeyA(HKEY Key, - LPCSTR Name) -{ - if (Name != NULL && strchr(Name, '\\') != NULL) - return(ERROR_INVALID_PARAMETER); - - DPRINT1("FIXME!\n"); - - return(ERROR_SUCCESS); -} - -LONG WINAPI -RegOpenKeyW( - IN HKEY hKey, - IN LPCWSTR lpSubKey, - OUT PHKEY phkResult) -{ - return RegpOpenOrCreateKey(hKey, lpSubKey, FALSE, phkResult); -} - -LONG WINAPI -RegOpenKeyA( - IN HKEY hKey, - IN LPCSTR lpSubKey, - OUT PHKEY phkResult) -{ - PWSTR lpSubKeyW; - LONG rc; - - lpSubKeyW = MultiByteToWideChar(lpSubKey); - if (!lpSubKeyW) - return ERROR_OUTOFMEMORY; - - rc = RegOpenKeyW(hKey, lpSubKeyW, phkResult); - free(lpSubKeyW); - return rc; -} - -static LONG -RegpOpenOrCreateValue( - IN HKEY hKey, - IN LPCWSTR ValueName, - IN BOOL AllowCreation, - OUT PCM_KEY_VALUE *ValueCell, - OUT PHCELL_INDEX ValueCellOffset) -{ - MEMKEY ParentKey; - UNICODE_STRING ValueString; - NTSTATUS Status; - - ParentKey = HKEY_TO_MEMKEY(hKey); - RtlInitUnicodeString(&ValueString, ValueName); - - Status = CmiScanForValueKey( - ParentKey->RegistryHive, - ParentKey->KeyCell, - &ValueString, - ValueCell, - ValueCellOffset); - if (AllowCreation && Status == STATUS_OBJECT_NAME_NOT_FOUND) - { - Status = CmiAddValueKey( - ParentKey->RegistryHive, - ParentKey->KeyCell, - ParentKey->KeyCellOffset, - &ValueString, - ValueCell, - ValueCellOffset); - } - if (!NT_SUCCESS(Status)) - return ERROR_UNSUCCESSFUL; - return ERROR_SUCCESS; -} - -LONG WINAPI -RegSetValueExW( - IN HKEY hKey, - IN LPCWSTR lpValueName OPTIONAL, - IN ULONG Reserved, - IN ULONG dwType, - IN const UCHAR* lpData, - IN USHORT cbData) -{ - MEMKEY Key, DestKey; - PHKEY phKey; - PCM_KEY_VALUE ValueCell; - HCELL_INDEX ValueCellOffset; - PVOID DataCell; - LONG DataCellSize; - NTSTATUS Status; - - if (dwType == REG_LINK) - { - /* Special handling of registry links */ - if (cbData != sizeof(PVOID)) - return STATUS_INVALID_PARAMETER; - phKey = (PHKEY)lpData; - Key = HKEY_TO_MEMKEY(hKey); - DestKey = HKEY_TO_MEMKEY(*phKey); - - /* Create the link in memory */ - Key->DataType = REG_LINK; - Key->LinkedKey = DestKey; - - /* Create the link in registry hive (if applicable) */ - if (Key->RegistryHive != DestKey->RegistryHive) - return STATUS_SUCCESS; - DPRINT1("Save link to registry\n"); - return STATUS_NOT_IMPLEMENTED; - } - - if ((cbData & REG_DATA_SIZE_MASK) != cbData) - return STATUS_UNSUCCESSFUL; - - Key = HKEY_TO_MEMKEY(hKey); - - Status = RegpOpenOrCreateValue(hKey, lpValueName, TRUE, &ValueCell, &ValueCellOffset); - if (!NT_SUCCESS(Status)) - return ERROR_UNSUCCESSFUL; - - /* Get size of the allocated cellule (if any) */ - if (!(ValueCell->DataLength & REG_DATA_IN_OFFSET) && - (ValueCell->DataLength & REG_DATA_SIZE_MASK) != 0) - { - DataCell = HvGetCell(&Key->RegistryHive->Hive, ValueCell->Data); - if (!DataCell) - return ERROR_UNSUCCESSFUL; - DataCellSize = -HvGetCellSize(&Key->RegistryHive->Hive, DataCell); - } - else - { - DataCell = NULL; - DataCellSize = 0; - } - - if (cbData <= sizeof(HCELL_INDEX)) - { - /* If data size <= sizeof(HCELL_INDEX) then store data in the data offset */ - DPRINT("ValueCell->DataLength %lu\n", ValueCell->DataLength); - if (DataCell) - HvFreeCell(&Key->RegistryHive->Hive, ValueCell->Data); - - RtlCopyMemory(&ValueCell->Data, lpData, cbData); - ValueCell->DataLength = (ULONG)(cbData | REG_DATA_IN_OFFSET); - ValueCell->Type = dwType; - HvMarkCellDirty(&Key->RegistryHive->Hive, ValueCellOffset, FALSE); - } - else - { - if (cbData > (SIZE_T)DataCellSize) - { - /* New data size is larger than the current, destroy current - * data block and allocate a new one. */ - HCELL_INDEX NewOffset; - - DPRINT("ValueCell->DataLength %lu\n", ValueCell->DataLength); - - NewOffset = HvAllocateCell(&Key->RegistryHive->Hive, cbData, Stable, HCELL_NIL); - if (NewOffset == HCELL_NIL) - { - DPRINT("HvAllocateCell() failed with status 0x%08lx\n", Status); - return ERROR_UNSUCCESSFUL; - } - - if (DataCell) - HvFreeCell(&Key->RegistryHive->Hive, ValueCell->Data); - - ValueCell->Data = NewOffset; - DataCell = (PVOID)HvGetCell(&Key->RegistryHive->Hive, NewOffset); - } - - /* Copy new contents to cellule */ - RtlCopyMemory(DataCell, lpData, cbData); - ValueCell->DataLength = (ULONG)(cbData & REG_DATA_SIZE_MASK); - ValueCell->Type = dwType; - HvMarkCellDirty(&Key->RegistryHive->Hive, ValueCell->Data, FALSE); - HvMarkCellDirty(&Key->RegistryHive->Hive, ValueCellOffset, FALSE); - } - - HvMarkCellDirty(&Key->RegistryHive->Hive, Key->KeyCellOffset, FALSE); - - DPRINT("Return status 0x%08lx\n", Status); - return Status; -} - -LONG WINAPI -RegSetValueExA( - IN HKEY hKey, - IN LPCSTR lpValueName OPTIONAL, - IN ULONG Reserved, - IN ULONG dwType, - IN const UCHAR* lpData, - IN ULONG cbData) -{ - LPWSTR lpValueNameW = NULL; - const UCHAR* lpDataW; - USHORT cbDataW; - LONG rc = ERROR_SUCCESS; - - DPRINT("RegSetValueA(%s)\n", lpValueName); - if (lpValueName) - { - lpValueNameW = MultiByteToWideChar(lpValueName); - if (!lpValueNameW) - return ERROR_OUTOFMEMORY; - } - - if ((dwType == REG_SZ || dwType == REG_EXPAND_SZ || dwType == REG_MULTI_SZ) - && cbData != 0) - { - ANSI_STRING AnsiString; - UNICODE_STRING Data; - - if (lpData[cbData - 1] != '\0') - cbData++; - RtlInitAnsiString(&AnsiString, NULL); - AnsiString.Buffer = (PSTR)lpData; - AnsiString.Length = (USHORT)cbData - 1; - AnsiString.MaximumLength = (USHORT)cbData; - RtlAnsiStringToUnicodeString (&Data, &AnsiString, TRUE); - lpDataW = (const UCHAR*)Data.Buffer; - cbDataW = Data.MaximumLength; - } - else - { - lpDataW = lpData; - cbDataW = (USHORT)cbData; - } - - if (rc == ERROR_SUCCESS) - rc = RegSetValueExW(hKey, lpValueNameW, 0, dwType, lpDataW, cbDataW); - if (lpValueNameW) - free(lpValueNameW); - if (lpData != lpDataW) - free((PVOID)lpDataW); - return rc; -} - -LONG WINAPI -RegQueryValueExW( - IN HKEY hKey, - IN LPCWSTR lpValueName, - IN PULONG lpReserved, - OUT PULONG lpType, - OUT PUCHAR lpData, - OUT PSIZE_T lpcbData) -{ - //ParentKey = HKEY_TO_MEMKEY(RootKey); - PCM_KEY_VALUE ValueCell; - HCELL_INDEX ValueCellOffset; - LONG rc; - - rc = RegpOpenOrCreateValue( - hKey, - lpValueName, - FALSE, - &ValueCell, - &ValueCellOffset); - if (rc != ERROR_SUCCESS) - return rc; - - DPRINT1("RegQueryValueExW(%S) not implemented\n", lpValueName); - /* ValueCell and ValueCellOffset are valid */ - - return ERROR_UNSUCCESSFUL; -} - -LONG WINAPI -RegQueryValueExA( - IN HKEY hKey, - IN LPCSTR lpValueName, - IN PULONG lpReserved, - OUT PULONG lpType, - OUT PUCHAR lpData, - OUT PSIZE_T lpcbData) -{ - LPWSTR lpValueNameW = NULL; - LONG rc; - - if (lpValueName) - { - lpValueNameW = MultiByteToWideChar(lpValueName); - if (!lpValueNameW) - return ERROR_OUTOFMEMORY; - } - - rc = RegQueryValueExW(hKey, lpValueNameW, lpReserved, lpType, lpData, lpcbData); - if (lpValueNameW) - free(lpValueNameW); - return ERROR_UNSUCCESSFUL; -} - -LONG WINAPI -RegDeleteValueW( - IN HKEY hKey, - IN LPCWSTR lpValueName OPTIONAL) -{ - DPRINT1("RegDeleteValueW() unimplemented\n"); - return ERROR_UNSUCCESSFUL; -} - -LONG WINAPI -RegDeleteValueA( - IN HKEY hKey, - IN LPCSTR lpValueName OPTIONAL) -{ - LPWSTR lpValueNameW; - LONG rc; - - if (lpValueName) - { - lpValueNameW = MultiByteToWideChar(lpValueName); - if (!lpValueNameW) - return ERROR_OUTOFMEMORY; - rc = RegDeleteValueW(hKey, lpValueNameW); - free(lpValueNameW); - } - else - rc = RegDeleteValueW(hKey, NULL); - return rc; -} - -static BOOL -ConnectRegistry( - IN HKEY RootKey, - IN PCMHIVE HiveToConnect, - IN LPCWSTR Path) -{ - NTSTATUS Status; - MEMKEY NewKey; - LONG rc; - - Status = CmiInitializeTempHive(HiveToConnect); - if (!NT_SUCCESS(Status)) - { - DPRINT1("CmiInitializeTempHive() failed with status 0x%08lx\n", Status); - return FALSE; - } - - /* Create key */ - rc = RegCreateKeyW( - RootKey, - Path, - (PHKEY)&NewKey); - if (rc != ERROR_SUCCESS) - return FALSE; - - NewKey->RegistryHive = HiveToConnect; - NewKey->KeyCellOffset = HiveToConnect->Hive.BaseBlock->RootCell; - NewKey->KeyCell = (PCM_KEY_NODE)HvGetCell (&HiveToConnect->Hive, NewKey->KeyCellOffset); - return TRUE; -} - -static BOOL -MyExportBinaryHive (PCHAR FileName, - PCMHIVE RootHive) -{ - FILE *File; - BOOL ret; - - /* Create new hive file */ - File = fopen (FileName, "w+b"); - if (File == NULL) - { - printf(" Error creating/opening file\n"); - return FALSE; - } - - fseek (File, 0, SEEK_SET); - - RootHive->FileHandles[HFILE_TYPE_PRIMARY] = (HANDLE)File; - ret = HvWriteHive(&RootHive->Hive); - fclose (File); - return ret; -} - -LIST_ENTRY CmiHiveListHead; - -VOID -RegInitializeRegistry(VOID) -{ - UNICODE_STRING RootKeyName = RTL_CONSTANT_STRING(L"\\"); - NTSTATUS Status; - HKEY ControlSetKey; - - InitializeListHead(&CmiHiveListHead); - - Status = CmiInitializeTempHive(&RootHive); - if (!NT_SUCCESS(Status)) - { - DPRINT1("CmiInitializeTempHive() failed with status 0x%08lx\n", Status); - return; - } - - RootKey = CreateInMemoryStructure( - &RootHive, - RootHive.Hive.BaseBlock->RootCell, - &RootKeyName); - - /* Create DEFAULT key */ - ConnectRegistry( - NULL, - &DefaultHive, - L"Registry\\User\\.DEFAULT"); - - /* Create SAM key */ - ConnectRegistry( - NULL, - &SamHive, - L"Registry\\Machine\\SAM"); - - /* Create SECURITY key */ - ConnectRegistry( - NULL, - &SecurityHive, - L"Registry\\Machine\\SECURITY"); - - /* Create SOFTWARE key */ - ConnectRegistry( - NULL, - &SoftwareHive, - L"Registry\\Machine\\SOFTWARE"); - - /* Create SYSTEM key */ - ConnectRegistry( - NULL, - &SystemHive, - L"Registry\\Machine\\SYSTEM"); - - /* Create 'ControlSet001' key */ - RegCreateKeyW( - NULL, - L"Registry\\Machine\\SYSTEM\\ControlSet001", - &ControlSetKey); -} - -/* EOF */ diff --git a/reactos/tools/mkhive/registry.h b/reactos/tools/mkhive/registry.h deleted file mode 100644 index a810602a81f..00000000000 --- a/reactos/tools/mkhive/registry.h +++ /dev/null @@ -1,130 +0,0 @@ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/registry.h - * PURPOSE: Registry code - */ - -#ifndef __REGISTRY_H__ -#define __REGISTRY_H__ - -typedef struct _REG_VALUE -{ - LIST_ENTRY ValueList; - - /* value name */ - ULONG NameSize; - PCHAR Name; - - /* value data */ - ULONG DataType; - ULONG DataSize; - PCHAR Data; -} VALUE, *PVALUE; - -typedef struct _REG_KEY -{ - LIST_ENTRY KeyList; - LIST_ENTRY SubKeyList; - LIST_ENTRY ValueList; - - ULONG SubKeyCount; - ULONG ValueCount; - - ULONG NameSize; - PWCHAR Name; - - /* default data */ - ULONG DataType; - ULONG DataSize; - PCHAR Data; - - /* Information on hard disk structure */ - HCELL_INDEX KeyCellOffset; - PCM_KEY_NODE KeyCell; - PCMHIVE RegistryHive; - - /* Used when linking to another key */ - struct _REG_KEY* LinkedKey; -} KEY, *FRLDRHKEY, **PFRLDRHKEY, *MEMKEY, **PMEMKEY; - -#define HKEY_TO_MEMKEY(hKey) ((MEMKEY)(hKey)) -#define MEMKEY_TO_HKEY(memKey) ((HKEY)(memKey)) - -extern CMHIVE DefaultHive; /* \Registry\User\.DEFAULT */ -extern CMHIVE SamHive; /* \Registry\Machine\SAM */ -extern CMHIVE SecurityHive; /* \Registry\Machine\SECURITY */ -extern CMHIVE SoftwareHive; /* \Registry\Machine\SOFTWARE */ -extern CMHIVE SystemHive; /* \Registry\Machine\SYSTEM */ - -#define ERROR_SUCCESS 0L -#define ERROR_UNSUCCESSFUL 1L -#define ERROR_OUTOFMEMORY 14L -#define ERROR_INVALID_PARAMETER 87L -#define ERROR_MORE_DATA 234L -#define ERROR_NO_MORE_ITEMS 259L - -#define REG_NONE 0 -#define REG_SZ 1 -#define REG_EXPAND_SZ 2 -#define REG_BINARY 3 -#define REG_DWORD 4 -#define REG_DWORD_BIG_ENDIAN 5 -#define REG_DWORD_LITTLE_ENDIAN 4 -#define REG_LINK 6 -#define REG_MULTI_SZ 7 -#define REG_RESOURCE_LIST 8 -#define REG_FULL_RESOURCE_DESCRIPTOR 9 -#define REG_RESOURCE_REQUIREMENTS_LIST 10 - -LONG WINAPI -RegCreateKeyA( - IN HKEY hKey, - IN LPCSTR lpSubKey, - OUT PHKEY phkResult); - -LONG WINAPI -RegOpenKeyA( - IN HKEY hKey, - IN LPCSTR lpSubKey, - OUT PHKEY phkResult); - -LONG WINAPI -RegQueryValueExA(HKEY Key, - LPCSTR ValueName, - PULONG Reserved, - PULONG Type, - PUCHAR Data, - PSIZE_T DataSize); - -LONG WINAPI -RegSetValueExA( - IN HKEY hKey, - IN LPCSTR lpValueName OPTIONAL, - ULONG Reserved, - IN ULONG dwType, - IN const UCHAR* lpData, - IN ULONG cbData); - -LONG WINAPI -RegDeleteValueA(HKEY Key, - LPCSTR ValueName); - -LONG WINAPI -RegDeleteKeyA(HKEY Key, - LPCSTR Name); - -USHORT -RegGetSubKeyCount (HKEY Key); - -ULONG -RegGetValueCount (HKEY Key); - -VOID -RegInitializeRegistry(VOID); - -#endif /* __REGISTRY_H__ */ - -/* EOF */ - - - diff --git a/reactos/tools/mkhive/rtl.c b/reactos/tools/mkhive/rtl.c deleted file mode 100644 index eec2fc3872e..00000000000 --- a/reactos/tools/mkhive/rtl.c +++ /dev/null @@ -1,181 +0,0 @@ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS hive maker - * FILE: tools/mkhive/rtl.c - * PURPOSE: Runtime Library - */ - -#include -#include - -#include "mkhive.h" -#include - -/* - * @implemented - * - * NOTES - * If source is NULL the length of source is assumed to be 0. - */ -VOID NTAPI -RtlInitAnsiString( - IN OUT PANSI_STRING DestinationString, - IN PCSTR SourceString) -{ - SIZE_T DestSize; - - if(SourceString) - { - DestSize = strlen(SourceString); - DestinationString->Length = (USHORT)DestSize; - DestinationString->MaximumLength = (USHORT)DestSize + sizeof(CHAR); - } - else - { - DestinationString->Length = 0; - DestinationString->MaximumLength = 0; - } - - DestinationString->Buffer = (PCHAR)SourceString; -} - -/* - * @implemented - * - * NOTES - * If source is NULL the length of source is assumed to be 0. - */ -VOID NTAPI -RtlInitUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCWSTR SourceString) -{ - SIZE_T DestSize; - - if(SourceString) - { - DestSize = utf16_wcslen(SourceString) * sizeof(WCHAR); - DestinationString->Length = (USHORT)DestSize; - DestinationString->MaximumLength = (USHORT)DestSize + sizeof(WCHAR); - } - else - { - DestinationString->Length = 0; - DestinationString->MaximumLength = 0; - } - - DestinationString->Buffer = (PWCHAR)SourceString; -} - -NTSTATUS NTAPI -RtlAnsiStringToUnicodeString( - IN OUT PUNICODE_STRING UniDest, - IN PANSI_STRING AnsiSource, - IN BOOLEAN AllocateDestinationString) -{ - ULONG Length; - PUCHAR WideString; - USHORT i; - - Length = AnsiSource->Length * sizeof(WCHAR); - if (Length > MAXUSHORT) return STATUS_INVALID_PARAMETER_2; - UniDest->Length = (USHORT)Length; - - if (AllocateDestinationString) - { - UniDest->MaximumLength = (USHORT)Length + sizeof(WCHAR); - UniDest->Buffer = (PWSTR) malloc(UniDest->MaximumLength); - if (!UniDest->Buffer) - return STATUS_NO_MEMORY; - } - else if (UniDest->Length >= UniDest->MaximumLength) - { - return STATUS_BUFFER_OVERFLOW; - } - - WideString = (PUCHAR)UniDest->Buffer; - for (i = 0; i <= AnsiSource->Length; i++) - { - WideString[2 * i + 0] = AnsiSource->Buffer[i]; - WideString[2 * i + 1] = 0; - } - return STATUS_SUCCESS; -} - -WCHAR NTAPI -RtlUpcaseUnicodeChar( - IN WCHAR Source) -{ - USHORT Offset; - - if (Source < 'a') - return Source; - - if (Source <= 'z') - return (Source - ('a' - 'A')); - - Offset = 0; - - return Source + (SHORT)Offset; -} - -VOID NTAPI -KeQuerySystemTime( - OUT PLARGE_INTEGER CurrentTime) -{ - CurrentTime->QuadPart = 0; -} - -PVOID NTAPI -ExAllocatePool( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes) -{ - return (PVOID) malloc(NumberOfBytes); -} - -VOID NTAPI -ExFreePool( - IN PVOID p) -{ - free(p); -} - -ULONG -__cdecl -DbgPrint( - IN CHAR *Format, - IN ...) -{ - va_list ap; - va_start(ap, Format); - vprintf(Format, ap); - va_end(ap); - - return 0; -} - -VOID -NTAPI -RtlAssert(PVOID FailedAssertion, - PVOID FileName, - ULONG LineNumber, - PCHAR Message) -{ - if (NULL != Message) - { - DbgPrint("Assertion \'%s\' failed at %s line %d: %s\n", - (PCHAR)FailedAssertion, - (PCHAR)FileName, - LineNumber, - Message); - } - else - { - DbgPrint("Assertion \'%s\' failed at %s line %d\n", - (PCHAR)FailedAssertion, - (PCHAR)FileName, - LineNumber); - } - - //DbgBreakPoint(); -} diff --git a/reactos/tools/ms2ps/ms2ps.cpp b/reactos/tools/ms2ps/ms2ps.cpp deleted file mode 100644 index 638190ab278..00000000000 --- a/reactos/tools/ms2ps/ms2ps.cpp +++ /dev/null @@ -1,431 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2004 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. - */ -/* $Id$ - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS seh conversion tool - * FILE: tools/ms2ps/ms2ps.cpp - * PURPOSE: Conversion tool from msvc to pseh style seh - * PROGRAMMER: Art Yerkes - */ - -#include -#include -#include -#include -#include -#include -#include - -#define MAYBE(x) - -using std::string; -using std::cin; -using std::cout; -using std::cerr; -using std::endl; -using std::istream; - -typedef std::list sl_t; -typedef sl_t::iterator sl_it; - -string TRY_TOKEN = "__try"; -string EXCEPT_TOKEN = "__except"; -string FINALLY_TOKEN = "__finally"; -char *c_operators[] = { - "{", - "}", - "(", - ")", - NULL -}; - -int isident( int c ) { - return (c != '{') && (c != '}') && (c != '(') && (c != ')') && - (c != '\'') && (c != '\"') && !isspace(c); -} - -bool areinclass( string str, int (*isclass)(int) ) { - int i; - - for( i = 0; i < (int)str.size(); i++ ) - if( !isclass( str[i] ) ) return false; - - return true; -} - -bool areident( string s ) { return areinclass( s, isident ); } - -bool isop( string tok ) { - int i; - for( i = 0; c_operators[i] && tok != c_operators[i]; i++ ); - if( c_operators[i] ) return true; else return false; -} - -enum fstate { EMPTY, INT, FRAC, EXP }; - -string generic_match( string tok, string la, - bool (*mf)( string ) ) { - if( tok.size() < 1 ) return ""; - if( mf(tok) && !mf(la) ) return tok; else return ""; -} - -string match_operator( string tok, string la ) { - return generic_match( tok, la, isop ); -} - -string match_ident( string tok, string la ) { - return generic_match( tok, la, areident ); -} - -string match_quoted_const( string tok, string la, char q ) { - if( ((tok.size() && tok[0] == q) || - ((tok.size() > 2) && tok[0] == 'L' && tok[1] == q)) && - (tok.rfind(q) == (tok.size() - 1)) ) { - if( (tok.rfind("\\") != (tok.size() - 2)) || - (tok.size() > 3 && tok.rfind("\\\\") == (tok.size() - 3)) ) - return tok; - else return ""; - } - else return ""; -} - -sl_t snarf_tokens( string line ) { - int i; - sl_t out; - string curtok, la, op, ident, qconst; - - line += " "; - - for( i = 0; i < (int)line.size() - 1; i++ ) { - /*cout << "Char [" << line[i] << "] and [" << line[i+1] << "]" - << endl; */ - - if( (!curtok.size() || - (curtok[0] != '\'' && curtok[0] != '\"')) && - (curtok.size() <= 2 || - curtok[0] != 'L' || - (curtok[1] != '\'' && curtok[1] != '\"')) && - isspace(line[i]) ) { - if( curtok.size() ) out.push_back( curtok ); - curtok = ""; - continue; - } - - curtok.push_back( line[i] ); - - la = curtok + line[i+1]; - - op = match_operator( curtok, la ); - - if( op != "" ) { - out.push_back( op MAYBE(+ "O") ); - curtok = ""; - continue; - } - - if( la != "L\"" && la != "L\'" ) { - ident = match_ident( curtok, la ); - - if( ident != "" ) { - out.push_back( ident MAYBE(+ "I") ); - curtok = ""; - continue; - } - } - - qconst = match_quoted_const( curtok, la, '\'' ); - - if( qconst != "" ) { - out.push_back( qconst MAYBE(+ "q") ); - curtok = ""; - continue; - } - - qconst = match_quoted_const( curtok, la, '\"' ); - - if( qconst != "" ) { - out.push_back( qconst MAYBE(+ "Q") ); - curtok = ""; - continue; - } - } - - return out; -} - -istream &getline_no_comments( istream &is, string &line ) { - string buf; - int ch; - int seen_slash = false; - - while( (ch = is.get()) != -1 ) { - if( seen_slash ) { - if( ch == '/' ) { - do { - ch = is.get(); - } while( ch != -1 && ch != '\n' && ch != '\r' ); - break; - } else if( ch == '*' ) { - ch = is.get(); /* Skip one char */ - do { - while( ch != '*' ) - ch = is.get(); - ch = is.get(); - } while( ch != '/' ); - buf += ' '; - } else { - buf += '/'; buf += (char)ch; - } - seen_slash = false; - } else { - if( ch == '/' ) seen_slash = true; - else if( ch == '\r' || ch == '\n' ) break; - else buf += (char)ch; - } - } - - line = buf; - - return is; -} - -bool expand_input( sl_t &tok ) { - string line; - sl_t new_tokens; - bool out = false; - - out = getline_no_comments( cin, line ); - while( line.size() && isspace( line[0] ) ) - line = line.substr( 1 ); - if( line[0] == '#' ) { - tok.push_back( line ); - while( line[line.size()-1] == '\\' ) { - getline_no_comments( cin, line ); - tok.push_back( line ); - tok.push_back( "\n" ); - } - tok.push_back( "\n" ); - } else { - new_tokens = snarf_tokens( line ); - tok.splice( tok.end(), new_tokens ); - tok.push_back( "\n" ); - } - - return out; -} - -sl_it -complete_block( sl_it i, - sl_it end, - string start_ch, string end_ch) { - int bc = 1; - - for( i++; i != end && bc; i++ ) { - if( *i == start_ch ) bc++; - if( *i == end_ch ) bc--; - } - - return i; -} - -string makename( string intro ) { - static int i = 0; - char buf[100]; - - sprintf( buf, "%s%d", intro.c_str(), i++ ); - - return buf; -} - -void append_block( sl_t &t, sl_it b, sl_it e ) { - while( b != e ) { - t.push_back( *b ); - b++; - } -} - -void error( sl_t &container, sl_it it, string l ) { - int line = 0; - for( sl_it i = container.begin(); i != it; i++ ) - if( (*i)[0] == '#' ) { - sscanf( i->substr(1).c_str(), "%d", &line ); - cerr << "*standard-input*:" << line << ": " << l; - } -} - -/* Goal: match and transform one __try { a } __except [ (foo) ] { b } - * [ __finally { c } ] - * - * into - * - * _SEH_FINALLY(name1) { c } - * _SEH_FILTER(name2) { return (foo | EXCEPTION_EXECUTE_HANDLER); } - * _SEH_TRY_FILTER_FINALLY(name1,name2) { - * a - * } _SEH_HANDLE { - * b - * } _SEH_END; - */ - -void handle_try( sl_t &container, sl_it try_kw, sl_it end ) { - string temp; - sl_t pseh_clause, temp_tok; - string finally_name, filter_name; - sl_it try_block, try_block_end, except_kw, paren, end_paren, - except_block, except_block_end, todelete, - finally_kw, finally_block, finally_block_end, clause_end; - - try_block = try_kw; - try_block++; - try_block_end = complete_block( try_block, end, "{", "}" ); - - if( try_block_end == end ) - error( container, try_block, "unclosed try block"); - - except_kw = try_block_end; - - if( *except_kw == FINALLY_TOKEN ) { - finally_kw = except_kw; - except_kw = end; - paren = end; - end_paren = end; - except_block = end; - except_block_end = end; - } else if( *except_kw == EXCEPT_TOKEN ) { - paren = except_kw; - paren++; - if( *paren == "(" ) { - end_paren = complete_block( paren, end, "(", ")" ); - except_block = end_paren; - } else { - except_block = paren; - paren = end; - end_paren = end; - } - except_block_end = complete_block( except_block, end, "{", "}" ); - finally_kw = except_block_end; - } else { - except_kw = paren = end_paren = except_block = except_block_end = - finally_kw = finally_block = finally_block_end = end; - } - - if( finally_kw != end && *finally_kw != FINALLY_TOKEN ) { - finally_kw = end; - finally_block = end; - finally_block_end = end; - } else { - finally_block = finally_kw; - finally_block++; - finally_block_end = complete_block( finally_block, end, "{", "}" ); - } - - if( finally_block_end != end ) clause_end = finally_block_end; - else if( except_block_end != end ) clause_end = except_block_end; - else clause_end = try_block_end; - - /* Skip one so that we can do != on clause_end */ - - /* Now for the output phase -- we've collected the whole seh clause - * and it lies between try_kw and clause_end */ - - finally_name = makename("_Finally"); - filter_name = makename("_Filter"); - - pseh_clause.push_back( "_SEH_FINALLY" ); - pseh_clause.push_back( "(" ); - pseh_clause.push_back( finally_name ); - pseh_clause.push_back( ")" ); - if( finally_kw != end ) - append_block( pseh_clause, finally_block, finally_block_end ); - else { - pseh_clause.push_back( "{" ); - pseh_clause.push_back( "}" ); - } - - pseh_clause.push_back( "_SEH_FILTER" ); - pseh_clause.push_back( "(" ); - pseh_clause.push_back( filter_name ); - pseh_clause.push_back( ")" ); - pseh_clause.push_back( "{" ); - pseh_clause.push_back( "return" ); - if( paren != end ) - append_block( pseh_clause, paren, end_paren ); - else - pseh_clause.push_back( "EXCEPTION_EXECUTE_HANDLER" ); - pseh_clause.push_back( ";" ); - pseh_clause.push_back( "}" ); - - pseh_clause.push_back( "_SEH_TRY_FILTER_FINALLY" ); - pseh_clause.push_back( "(" ); - pseh_clause.push_back( filter_name ); - pseh_clause.push_back( "," ); - pseh_clause.push_back( finally_name ); - pseh_clause.push_back( ")" ); - append_block( pseh_clause, try_block, try_block_end ); - pseh_clause.push_back( "_SEH_HANDLE" ); - pseh_clause.push_back( "{" ); - if( except_block != end ) - append_block( pseh_clause, except_block, except_block_end ); - pseh_clause.push_back( "}" ); - pseh_clause.push_back( "_SEH_END" ); - pseh_clause.push_back( ";" ); - - container.splice( try_kw, pseh_clause ); - while( try_kw != clause_end ) { - todelete = try_kw; - try_kw++; - container.erase( todelete ); - } -} - -void print_tokens( sl_it begin, sl_it end ) { - for( sl_it i = begin; i != end; i++ ) - if( *i == "\n" ) cout << *i; - else cout << /*"[" <<*/ *i << /*"]" <<*/ " "; -} - -int main( int argc, char **argv ) { - sl_t tok; - sl_it try_found; - int i; - - for( i = 1; i < argc; i++ ) { - if( string(argv[i]) == "-try" && i < argc - 1 ) { - i++; - TRY_TOKEN = argv[i]; - } else if( string(argv[i]) == "-except" && i < argc - 1 ) { - i++; - EXCEPT_TOKEN = argv[i]; - } else if( string(argv[i]) == "-finally" && i < argc - 1 ) { - i++; - FINALLY_TOKEN = argv[i]; - } - } - - /* XXX Uses much memory for large files */ - while( expand_input(tok) ); - - while( (try_found = find( tok.begin(), tok.end(), TRY_TOKEN )) != - tok.end() ) { - handle_try( tok, try_found, tok.end() ); - } - - tok.push_front("#include \n"); - print_tokens( tok.begin(), tok.end() ); -} diff --git a/reactos/tools/nci/nci.mak b/reactos/tools/nci/nci.mak deleted file mode 100644 index fb08ebe79d4..00000000000 --- a/reactos/tools/nci/nci.mak +++ /dev/null @@ -1,87 +0,0 @@ -NCI_BASE = $(TOOLS_BASE_)nci -NCI_BASE_ = $(NCI_BASE)$(SEP) -NCI_INT = $(INTERMEDIATE_)$(NCI_BASE) -NCI_INT_ = $(NCI_INT)$(SEP) -NCI_OUT = $(OUTPUT_)$(NCI_BASE) -NCI_OUT_ = $(NCI_OUT)$(SEP) - -$(NCI_INT): | $(TOOLS_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(NCI_OUT): | $(TOOLS_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - -NCI_TARGET = \ - $(NCI_OUT_)nci$(EXEPOSTFIX) - -NCI_SOURCES = \ - $(NCI_BASE_)ncitool.c - -NCI_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(NCI_SOURCES:.c=.o)) - -NCI_HOST_CFLAGS = -Iinclude $(TOOLS_CFLAGS) - -NCI_HOST_LFLAGS = $(TOOLS_LFLAGS) - -$(NCI_TARGET): $(NCI_OBJECTS) | $(NCI_OUT) - $(ECHO_LD) - ${host_gcc} $(NCI_OBJECTS) $(NCI_HOST_LFLAGS) -o $@ - -$(NCI_INT_)ncitool.o: $(NCI_BASE_)ncitool.c | $(NCI_INT) - $(ECHO_CC) - ${host_gcc} $(NCI_HOST_CFLAGS) -c $< -o $@ - -.PHONY: nci -nci: $(NCI_TARGET) - -.PHONY: nci_clean -nci_clean: - -@$(rm) $(NCI_TARGET) $(NCI_OBJECTS) 2>$(NUL) -clean: nci_clean - -# WIN32K.SYS -WIN32K_SVC_DB = subsystems$(SEP)win32$(SEP)win32k$(SEP)w32ksvc.db -WIN32K_SERVICE_TABLE = $(INTERMEDIATE_)subsystems$(SEP)win32$(SEP)win32k$(SEP)include$(SEP)napi.h -WIN32K_STUBS = $(INTERMEDIATE_)lib$(SEP)win32ksys$(SEP)win32k.S - - - -# NTOSKRNL.EXE -KERNEL_SVC_DB = ntoskrnl$(SEP)sysfuncs.lst -KERNEL_SERVICE_TABLE = $(INTERMEDIATE_)ntoskrnl$(SEP)include$(SEP)internal$(SEP)napi.h -NTDLL_STUBS = $(INTERMEDIATE_)lib$(SEP)ntdllsys$(SEP)ntdll.S -KERNEL_STUBS = $(INTERMEDIATE_)ntoskrnl$(SEP)ex$(SEP)zw.S - -NCI_SERVICE_FILES = \ - $(KERNEL_SERVICE_TABLE) \ - $(WIN32K_SERVICE_TABLE) \ - $(NTDLL_STUBS) \ - $(KERNEL_STUBS) \ - $(WIN32K_STUBS) - -$(NCI_SERVICE_FILES): $(NCI_TARGET) $(KERNEL_SVC_DB) $(WIN32K_SVC_DB) - $(ECHO_NCI) - ${mkdir} $(INTERMEDIATE_)ntoskrnl$(SEP)include$(SEP)internal 2>$(NUL) - ${mkdir} $(INTERMEDIATE_)lib$(SEP)ntdllsys$(SEP)ntdll 2>$(NUL) - ${mkdir} $(INTERMEDIATE_)ntoskrnl$(SEP)ex$(SEP) 2>$(NUL) - ${mkdir} $(INTERMEDIATE_)subsystems$(SEP)win32$(SEP)win32k$(SEP)include 2>$(NUL) - ${mkdir} $(INTERMEDIATE_)lib$(SEP)win32ksys 2>$(NUL) - - $(Q)$(NCI_TARGET) -arch $(ARCH) \ - $(KERNEL_SVC_DB) \ - $(WIN32K_SVC_DB) \ - $(KERNEL_SERVICE_TABLE) \ - $(WIN32K_SERVICE_TABLE) \ - $(NTDLL_STUBS) \ - $(KERNEL_STUBS) \ - $(WIN32K_STUBS) - -.PHONY: nci_service_files_clean -nci_service_files_clean: - -@$(rm) $(NCI_SERVICE_FILES) 2>$(NUL) -clean: nci_service_files_clean diff --git a/reactos/tools/nci/ncitool.c b/reactos/tools/nci/ncitool.c deleted file mode 100644 index bed88496c08..00000000000 --- a/reactos/tools/nci/ncitool.c +++ /dev/null @@ -1,646 +0,0 @@ -/* - * FILE: tools/nci/ncitool.c - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: Native Call Interface Support Tool - * PURPOSE: Generates NCI Tables and Stubs. - * PROGRAMMER; Alex Ionescu (alex@relsoft.net) - * CHANGE HISTORY: 14/01/05 - Created. Based on original code by - * KJK::Hyperion and Emanuelle Aliberti. - * - */ - -/* INCLUDE ******************************************************************/ - -#include -#include -#include -#if !defined(__FreeBSD__) && !defined(__APPLE__) -# include -#endif // __FreeBSD__ - -/* DEFINES ****************************************************************/ - -#define INPUT_BUFFER_SIZE 255 -#define Arguments 7 - -/******* Table Indexes ************/ -#define MAIN_INDEX 0x0 -#define WIN32K_INDEX 0x1000 - -/******* Argument List ************/ -/* First, define the Databases */ -#define NativeSystemDb 0 -#define NativeGuiDb 1 - -/* Now the Service Tables */ -#define NtosServiceTable 2 -#define Win32kServiceTable 3 - -/* And finally, the stub files. */ -#define NtosUserStubs 4 -#define NtosKernelStubs 5 -#define Win32kStubs 6 - -/********** Stub Code ************/ - -/* - * This stubs calls into KUSER_SHARED_DATA where either a - * sysenter or interrupt is performed, depending on CPU support. - */ -#if defined(__GNUC__) -#define UserModeStub_x86 " movl $0x%x, %%eax\n" \ - " movl $KUSER_SHARED_SYSCALL, %%ecx\n" \ - " call *(%%ecx)\n" \ - " ret $0x%x\n\n" - -#define UserModeStub_ppc " stwu 1,-16(1)\n" \ - " mflr 0\n\t" \ - " stw 0,0(1)\n" \ - " li 0,0x%x\n" \ - " sc\n" \ - " lwz 0,0(1)\n" \ - " mtlr 0\n" \ - " addi 1,1,16\n" \ - " blr\n" - -#define UserModeStub_mips " li $8, KUSER_SHARED_SYSCALL\n" \ - " lw $8,0($8)\n" \ - " j $8\n" \ - " nop\n" - -#define UserModeStub_arm " swi #0x%x\n" \ - " bx lr\n\n" - -#elif defined(_MSC_VER) -#define UserModeStub_x86 " asm { \n" \ - " mov eax, %xh\n" \ - " mov ecx, KUSER_SHARED_SYSCALL\n" \ - " call [ecx]\n" \ - " ret %xh\n" \ - " }\n" -#else -#error Unknown compiler for inline assembler -#endif - -/* - * This stub calls KiSystemService directly with a fake INT2E stack. - * Because EIP is pushed during the call, the handler will return here. - */ -#if defined(__GNUC__) -#define KernelModeStub_x86 " movl $0x%x, %%eax\n" \ - " leal 4(%%esp), %%edx\n" \ - " pushfl\n" \ - " pushl $KGDT_R0_CODE\n" \ - " call _KiSystemService\n" \ - " ret $0x%x\n\n" - -/* For now, use the usermode stub. We'll optimize later */ -#define KernelModeStub_ppc UserModeStub_ppc - -#define KernelModeStub_mips " j KiSystemService\n" \ - " nop\n" - -#define KernelModeStub_arm " mov ip, lr\n" \ - " swi #0x%x\n" \ - " bx ip\n\n" - -#elif defined(_MSC_VER) -#define KernelModeStub_x86 " asm { \n" \ - " mov eax, %xh\n" \ - " lea edx, [esp+4]\n" \ - " pushf\n" \ - " push KGDT_R0_CODE\n" \ - " call _KiSystemService\n" \ - " ret %xh\n" \ - " }\n" -#else -#error Unknown compiler for inline assembler -#endif - -/***** Arch Dependent Stuff ******/ -struct ncitool_data_t { - const char *arch; - int args_to_bytes; - const char *km_stub; - const char *um_stub; - const char *global_header; - const char *declaration; -}; - -struct ncitool_data_t ncitool_data[] = { - { "i386", 4, KernelModeStub_x86, UserModeStub_x86, - ".global _%s@%d\n", "_%s@%d:\n" }, - { "powerpc", 4, KernelModeStub_ppc, UserModeStub_ppc, - "\t.globl %s\n", "%s:\n" }, - { "mips", 4, KernelModeStub_mips, UserModeStub_mips, - "\t.globl %s\n", "%s:\n" }, - { "arm", 4, KernelModeStub_arm, UserModeStub_arm, - "\t.globl %s\n", "%s:\n" }, - { 0, } -}; -int arch_sel = 0; -#define ARGS_TO_BYTES(x) (x)*(ncitool_data[arch_sel].args_to_bytes) -#define UserModeStub ncitool_data[arch_sel].um_stub -#define KernelModeStub ncitool_data[arch_sel].km_stub -#define GlobalHeader ncitool_data[arch_sel].global_header -#define Declaration ncitool_data[arch_sel].declaration - -/* FUNCTIONS ****************************************************************/ - -/*++ - * WriteFileHeader - * - * Prints out the File Header for a Stub File. - * - * Params: - * StubFile - Stub File to which to write the header. - * - * FileDescription - Description of the Stub file to which to write the header. - * - * FileLocation - Name of the Stub file to which to write the header. - * - * Returns: - * None. - * - * Remarks: - * FileLocation is only used for printing the header. - * - *--*/ -void -WriteFileHeader(FILE * StubFile, - char* FileDescription, - char* FileLocation) -{ - /* This prints out the file header */ - fprintf(StubFile, - "/* FILE: %s\n" - " * COPYRIGHT: See COPYING in the top level directory\n" - " * PURPOSE: %s\n" - " * PROGRAMMER: Computer Generated File. See tools/nci/ncitool.c\n" - " * REMARK: DO NOT EDIT OR COMMIT MODIFICATIONS TO THIS FILE\n" - " */\n\n\n" - "#include \n\n", - FileDescription, - FileLocation); -} - -/*++ - * WriteFileHeader - * - * Prints out the File Header for a Stub File. - * - * Params: - * StubFile - Stub File to which to write the header. - * - * FileDescription - Description of the Stub file to which to write the header. - * - * FileLocation - Name of the Stub file to which to write the header. - * - * Returns: - * None. - * - * Remarks: - * FileLocation is only used for printing the header. - * - *--*/ -void -WriteStubHeader(FILE* StubFile, - char* SyscallName, - unsigned StackBytes) -{ - /* Export the function */ - fprintf(StubFile, GlobalHeader, SyscallName, StackBytes); - - /* Define it */ - fprintf(StubFile, Declaration, SyscallName, StackBytes); -} - - -/*++ - * WriteKernelModeStub - * - * Prints out the Kernel Mode Stub for a System Call. - * - * Params: - * StubFile - Stub File to which to write the header. - * - * SyscallName - Name of System Call for which to add the stub. - * - * StackBytes - Number of bytes on the stack to return after doing the system call. - * - * SyscallId - Service Descriptor Table ID for this System Call. - * - * Returns: - * None. - * - * Remarks: - * On i386, StackBytes is the number of arguments x 4. - * - *--*/ -void -WriteKernelModeStub(FILE* StubFile, - char* SyscallName, - unsigned StackBytes, - unsigned int SyscallId) -{ - /* Write the Stub Header and export the Function */ - WriteStubHeader(StubFile, SyscallName, StackBytes); - - /* Write the Stub Code */ - fprintf(StubFile, KernelModeStub, SyscallId, StackBytes); -} - -/*++ - * WriteUserModeStub - * - * Prints out the User Mode Stub for a System Call. - * - * Params: - * StubFile - Stub File to which to write the header. - * - * SyscallName - Name of System Call for which to add the stub. - * - * StackBytes - Number of bytes on the stack to return after doing the system call. - * - * SyscallId - Service Descriptor Table ID for this System Call. - * - * Returns: - * None. - * - * Remarks: - * On i386, StackBytes is the number of arguments x 4. - * - *--*/ -void -WriteUserModeStub(FILE* StubFile, - char* SyscallName, - unsigned StackBytes, - unsigned int SyscallId) -{ - /* Write the Stub Header and export the Function */ - WriteStubHeader(StubFile, SyscallName, StackBytes); - - /* Write the Stub Code */ - fprintf(StubFile, UserModeStub, SyscallId, StackBytes); -} - -/*++ - * GetNameAndArgumentsFromDb - * - * Parses an entry from a System Call Database, extracting - * the function's name and arguments that it takes. - * - * Params: - * Line - Entry from the Database to parse. - * - * NtSyscallName - Output string to which to save the Function Name - * - * SyscallArguments - Output string to which to save the number of - * arguments that the function takes. - * - * Returns: - * None. - * - * Remarks: - * On i386, StackBytes is the number of arguments x 4. - * - *--*/ -void -GetNameAndArgumentsFromDb(char Line[], - char ** NtSyscallName, - char ** SyscallArguments) -{ - char *s; - char *stmp; - - /* Remove new line */ - if ((s = (char *) strchr(Line,'\r')) != NULL) { - *s = '\0'; - } - - /* Skip comments (#) and empty lines */ - s = &Line[0]; - if ((*s) != '#' && (*s) != '\0') { - - /* Extract the NtXXX name */ - *NtSyscallName = (char *)strtok(s," \t"); - - /* Extract the argument count */ - *SyscallArguments = (char *)strtok(NULL," \t"); - - /* Remove, if present, the trailing LF */ - if ((stmp = strchr(*SyscallArguments, '\n')) != NULL) { - *stmp = '\0'; - } - - } else { - - /* Skip this entry */ - *NtSyscallName = NULL; - *SyscallArguments = NULL; - } -} - -/*++ - * CreateStubs - * - * Parses a System Call Database and creates stubs for all the entries. - * - * Params: - * SyscallDb - System Call Database to parse. - * - * UserModeFiles - Array of Usermode Stub Files to which to write the stubs. - * - * KernelModeFile - Kernelmode Stub Files to which to write the stubs. - * - * Index - Number of first syscall - * - * UserFiles - Number of Usermode Stub Files to create - * - * NeedsZw - Write Zw prefix? - * - * Returns: - * None. - * - * Remarks: - * None. - * - *--*/ -void -CreateStubs(FILE * SyscallDb, - FILE * UserModeFiles[], - FILE * KernelModeFile, - unsigned Index, - unsigned UserFiles, - unsigned NeedsZw) -{ - char Line[INPUT_BUFFER_SIZE]; - char *NtSyscallName; - char *SyscallArguments; - int SyscallId; - unsigned StackBytes; - - /* We loop, incrementing the System Call Index, until the end of the file */ - for (SyscallId = 0; ((!feof(SyscallDb)) && (fgets(Line, sizeof(Line), SyscallDb) != NULL));) { - - /* Extract the Name and Arguments */ - GetNameAndArgumentsFromDb(Line, &NtSyscallName, &SyscallArguments); - if (SyscallArguments != NULL) - StackBytes = ARGS_TO_BYTES(strtoul(SyscallArguments, NULL, 0)); - else - StackBytes = 0; - - /* Make sure we really extracted something */ - if (NtSyscallName) { - - /* Create Usermode Stubs for Nt/Zw syscalls in each Usermode file */ - int i; - for (i= 0; i < UserFiles; i++) { - - /* Write the Nt Version */ - WriteUserModeStub(UserModeFiles[i], - NtSyscallName, - StackBytes, - SyscallId | Index); - - /* If a Zw Version is needed (was specified), write it too */ - if (NeedsZw) { - - NtSyscallName[0] = 'Z'; - NtSyscallName[1] = 'w'; - WriteUserModeStub(UserModeFiles[i], - NtSyscallName, - StackBytes, - SyscallId | Index); - } - - } - - /* Create the Kernel coutnerparts (only Zw*, Nt* are the real functions!) */ - if (KernelModeFile) { - - NtSyscallName[0] = 'Z'; - NtSyscallName[1] = 'w'; - WriteKernelModeStub(KernelModeFile, - NtSyscallName, - StackBytes, - SyscallId | Index); - } - - /* Only increase if we actually added something */ - SyscallId++; - } - } -} - -/*++ - * CreateSystemServiceTable - * - * Parses a System Call Database and creates a System Call Service Table for it. - * - * Params: - * SyscallDb - System Call Database to parse. - * - * SyscallTable - File in where to create System Call Service Table. - * - * Name - Name of the Service Table. - * - * FileLocation - Filename containing the Table. - * - * Returns: - * None. - * - * Remarks: - * FileLocation is only used for the header generation. - * - *--*/ -void -CreateSystemServiceTable(FILE *SyscallDb, - FILE *SyscallTable, - char * Name, - char * FileLocation) -{ - char Line[INPUT_BUFFER_SIZE]; - char *NtSyscallName; - char *SyscallArguments; - int SyscallId; - - /* Print the Header */ - WriteFileHeader(SyscallTable, "System Call Table for Native API", FileLocation); - - /* First we build the SSDT */ - fprintf(SyscallTable,"\n\n\n"); - fprintf(SyscallTable,"ULONG_PTR %sSSDT[] = {\n", Name); - - /* We loop, incrementing the System Call Index, until the end of the file */ - for (SyscallId = 0; ((!feof(SyscallDb)) && (fgets(Line, sizeof(Line), SyscallDb) != NULL));) { - - /* Extract the Name and Arguments */ - GetNameAndArgumentsFromDb(Line, &NtSyscallName, &SyscallArguments); - - /* Make sure we really extracted something */ - if (NtSyscallName) { - - /* Add a new line */ - if (SyscallId > 0) fprintf(SyscallTable,",\n"); - - /* Write the syscall name in the service table. */ - fprintf(SyscallTable,"\t\t(ULONG_PTR)%s", NtSyscallName); - - /* Only increase if we actually added something */ - SyscallId++; - } - } - - /* Close the service table (C syntax) */ - fprintf(SyscallTable,"\n};\n"); - - /* Now we build the SSPT */ - rewind(SyscallDb); - fprintf(SyscallTable,"\n\n\n"); - fprintf(SyscallTable,"UCHAR %sSSPT[] = {\n", Name); - - for (SyscallId = 0; ((!feof(SyscallDb)) && (fgets(Line, sizeof(Line), SyscallDb) != NULL));) { - - /* Extract the Name and Arguments */ - GetNameAndArgumentsFromDb(Line, &NtSyscallName, &SyscallArguments); - - /* Make sure we really extracted something */ - if (NtSyscallName) { - - /* Add a new line */ - if (SyscallId > 0) fprintf(SyscallTable,",\n"); - - /* Write the syscall arguments in the argument table. */ - if (SyscallArguments != NULL) - fprintf(SyscallTable,"\t\t%lu * sizeof(void *)",strtoul(SyscallArguments, NULL, 0)); - else - fprintf(SyscallTable,"\t\t0"); - - /* Only increase if we actually added something */ - SyscallId++; - } - } - - /* Close the service table (C syntax) */ - fprintf(SyscallTable,"\n};\n"); - - /* - * We write some useful defines - */ - fprintf(SyscallTable, "\n\n#define MIN_SYSCALL_NUMBER 0\n"); - fprintf(SyscallTable, "#define MAX_SYSCALL_NUMBER %d\n", SyscallId - 1); - fprintf(SyscallTable, "#define NUMBER_OF_SYSCALLS %d\n", SyscallId); - fprintf(SyscallTable, "ULONG %sNumberOfSysCalls = %d;\n", Name, SyscallId); -} - -void usage(char * argv0) -{ - printf("Usage: %s [-arch ] sysfuncs.lst w32ksvc.db napi.h ssdt.h napi.S zw.S win32k.S win32k.S\n" - " sysfuncs.lst native system functions database\n" - " w32ksvc.db native graphic functions database\n" - " napi.h NTOSKRNL service table\n" - " ssdt.h WIN32K service table\n" - " napi.S NTDLL stubs\n" - " zw.S NTOSKRNL Zw stubs\n" - " win32k.S GDI32 stubs\n" - " win32k.S USER32 stubs\n" - " -arch is optional, default is %s\n", - argv0, - ncitool_data[0].arch - ); -} - -int main(int argc, char* argv[]) -{ - FILE * Files[Arguments] = { }; - int FileNumber, ArgOffset = 1; - char * OpenType = "r"; - - /* Catch architecture argument */ - if (argc > 3 && !strcmp(argv[1],"-arch")) { - for( arch_sel = 0; ncitool_data[arch_sel].arch; arch_sel++ ) - if (strcmp(argv[2],ncitool_data[arch_sel].arch) == 0) - break; - if (!ncitool_data[arch_sel].arch) { - printf("Invalid arch '%s'\n", argv[2]); - usage(argv[0]); - return 1; - } - ArgOffset = 3; - } - /* Make sure all arguments all there */ - if (argc != Arguments + ArgOffset) { - usage(argv[0]); - return(1); - } - - /* Open all Output and bail out if any fail */ - for (FileNumber = 0; FileNumber < Arguments; FileNumber++) { - - /* Open the File */ - if (FileNumber == 2) OpenType = "wb"; - Files[FileNumber] = fopen(argv[FileNumber + ArgOffset], OpenType); - - /* Check for failure and error out if so */ - if (!Files[FileNumber]) { - perror(argv[FileNumber + ArgOffset]); - return (1); - } - } - - /* Write the File Headers */ - WriteFileHeader(Files[NtosUserStubs], - "System Call Stubs for Native API", - argv[NtosUserStubs + ArgOffset]); - - WriteFileHeader(Files[NtosKernelStubs], - "System Call Stubs for Native API", - argv[NtosKernelStubs + ArgOffset]); - fputs("#include \n\n", Files[NtosKernelStubs]); - - WriteFileHeader(Files[Win32kStubs], - "System Call Stubs for Native API", - argv[Win32kStubs + ArgOffset]); - - /* Create the System Stubs */ - CreateStubs(Files[NativeSystemDb], - &Files[NtosUserStubs], - Files[NtosKernelStubs], - MAIN_INDEX, - 1, - 1); - - /* Create the Graphics Stubs */ - CreateStubs(Files[NativeGuiDb], - &Files[Win32kStubs], - NULL, - WIN32K_INDEX, - 1, - 0); - - /* Rewind the databases */ - rewind(Files[NativeSystemDb]); - rewind(Files[NativeGuiDb]); - - /* Create the Service Tables */ - CreateSystemServiceTable(Files[NativeSystemDb], - Files[NtosServiceTable], - "Main", - argv[NtosServiceTable + ArgOffset]); - - CreateSystemServiceTable(Files[NativeGuiDb], - Files[Win32kServiceTable], - "Win32k", - argv[Win32kServiceTable + ArgOffset]); - - /* Close all files */ - for (FileNumber = 0; FileNumber < Arguments-ArgOffset; FileNumber++) { - - /* Close the File */ - fclose(Files[FileNumber]); - - } - - return(0); -} diff --git a/reactos/tools/ofw_interface/calls.ofw b/reactos/tools/ofw_interface/calls.ofw deleted file mode 100644 index 00273f1a426..00000000000 --- a/reactos/tools/ofw_interface/calls.ofw +++ /dev/null @@ -1,16 +0,0 @@ -# Function Args Returns Types -# Real OFW functions to proxy -finddevice 1 1 char* int -open 1 1 char* int -getprop 4 1 int char* char*:arg3 int int -nextprop 3 1 int char* char* int -getproplen 2 1 int char* int -write 3 1 int char*:arg2 int int -read 3 1 int char*:arg2 int int -exit 0 0 -child 1 1 int int -peer 1 1 int int -parent 1 1 int int -seek 3 1 int int int int -package-to-path 3 1 int char*:arg2 int int -claim 3 1 int int int int diff --git a/reactos/tools/ofw_interface/ofw_interface.cpp b/reactos/tools/ofw_interface/ofw_interface.cpp deleted file mode 100644 index 5946c7b3e08..00000000000 --- a/reactos/tools/ofw_interface/ofw_interface.cpp +++ /dev/null @@ -1,316 +0,0 @@ -#include -#include -#include -#include -#include -#include - -class ofw_wrappers { -public: - int base, ctindex, method_ctindex; - std::string functions; - std::string names; - std::string calltable; - std::string le_stubs; - std::string of_call; -}; - -class vartype { -public: - vartype( const std::string &typestr ) { - size_t amp = typestr.find('&'); - size_t col = typestr.find(':'); - if( amp != std::string::npos ) { - if( col > amp && col != std::string::npos ) - lit_value = typestr.substr(amp+1,col-amp+1); - else lit_value = typestr.substr(amp+1); - } - if( col != std::string::npos ) { - if( amp > col && amp != std::string::npos ) - len = typestr.substr(col+1,amp-col+1); - else len = typestr.substr(col+1); - } - - if( amp != std::string::npos && amp < col ) col = amp; - if( col == std::string::npos ) col = typestr.size(); - c_type = typestr.substr(0,col); - } - - vartype( const vartype &other ) - : c_type(other.c_type), - len(other.len), - lit_value(other.lit_value) { - } - - vartype &operator = ( const vartype &other ) { - c_type = other.c_type; - len = other.len; - lit_value = other.lit_value; - return *this; - } - - std::string c_type; - std::string len; - std::string lit_value; -}; - -std::string uppercase( const std::string &toucase ) { - std::vector ucase_work(toucase.size()); - for( size_t i = 0; i < toucase.size(); i++ ) { - ucase_work[i] = toupper(toucase[i]); - } - return std::string(&ucase_work[0], toucase.size()); -} - -std::string clip_eol( std::string in, const std::string &eol_marks ) { - size_t found; - for( size_t i = 0; i < eol_marks.size(); i++ ) { - found = in.find( eol_marks[i] ); - if( found != std::string::npos ) - in = in.substr( 0, found ); - } - return in; -} - -int round_up( int x, int factor ) { - return (x + (factor - 1)) & ~(factor - 1); -} - -void populate_definition( ofw_wrappers &wrapper, const std::string &line ) { - std::istringstream iss(line); - bool make_function = true, method_call = false, make_stub = true, comma; - std::string name, nametext, argtype, rettype; - std::vector argtypes; - int args, rets, i, local_offset, total_stack, userarg_start = 0; - size_t f; - std::ostringstream function, ct_csource, le_stub, of_call; - - iss >> name >> args >> rets; - - if( !name.size() ) return; - - if( (f = name.find('!')) != std::string::npos ) { - nametext = name.substr(f+1); - name = name.substr(0,f); - } - if( name[0] == '-' ) { - name = name.substr(1); - make_function = false; - } - if( name[0] == '+' ) { - name = name.substr(1); - make_stub = false; - } - if( name[0] == '@' ) { - name = name.substr(1); - method_call = true; - make_function = false; - } - - if( !nametext.size() ) nametext = name; - - for( i = 1; i < (int)name.size(); i++ ) - if( name[i] == '-' ) name[i] = '_'; - - if( nametext == "call-method" ) - wrapper.method_ctindex = wrapper.ctindex; - - for( i = 0; i < args; i++ ) { - iss >> argtype; - argtypes.push_back(vartype(argtype)); - } - - if( method_call ) { - userarg_start = 1; - args += 2; - } - - iss >> rettype; - if( !rettype.size() ) rettype = "void"; - - local_offset = (3 + rets + args) * 4; - total_stack = round_up(12 + local_offset, 16); - - function << "asm_ofw_" << name << ":\n" - << "\t/* Reserve stack space */\n" - << "\tsubi %r1,%r1," << total_stack << "\n" - << "\t/* Store r8, r9, lr */\n" - << "\tstw %r8," << (local_offset + 0) << "(%r1)\n" - << "\tstw %r9," << (local_offset + 4) << "(%r1)\n" - << "\tmflr %r8\n" - << "\tstw %r8," << (local_offset + 8) << "(%r1)\n" - << "\t/* Get read name */\n" - << "\tlis %r8," << name << "_ofw_name@ha\n" - << "\taddi %r9,%r8," << name << "_ofw_name@l\n" - << "\tstw %r9,0(%r1)\n" - << "\t/* " << args << " arguments and " << rets << " return */\n" - << "\tli %r9," << args << "\n" - << "\tstw %r9,4(%r1)\n" - << "\tli %r9," << rets << "\n" - << "\tstw %r9,8(%r1)\n"; - - for( int i = 0; i < args; i++ ) - function << "\tstw %r" << (i+3) << "," << (4 * (i + 3)) << "(%r1)\n"; - - function << "\t/* Load up the call address */\n" - << "\tlis %r10,ofw_call_addr@ha\n" - << "\tlwz %r9,ofw_call_addr@l(%r10)\n" - << "\tmtlr %r9\n" - << "\t/* Set argument */\n" - << "\tmr %r3,%r1\n" - << "\t/* Fire */\n" - << "\tblrl\n" - << "\tlwz %r3," << (local_offset - 4) << "(%r1)\n" - << "\t/* Restore registers */\n" - << "\tlwz %r8," << (local_offset + 8) << "(%r1)\n" - << "\tmtlr %r8\n" - << "\tlwz %r9," << (local_offset + 4) << "(%r1)\n" - << "\tlwz %r8," << (local_offset + 0) << "(%r1)\n" - << "\t/* Return */\n" - << "\taddi %r1,%r1," << total_stack << "\n" - << "\tblr\n"; - - if( method_call ) { - argtypes.insert(argtypes.begin(),vartype("int")); - argtypes.insert(argtypes.begin(),vartype("char*")); - } - - le_stub << rettype << " ofw_" << name << "("; - - comma = false; - for( i = userarg_start; i < args; i++ ) { - if( !argtypes[i].lit_value.size() ) { - if( !comma ) comma = true; else le_stub << ","; - le_stub << argtypes[i].c_type << " arg" << i; - } - } - le_stub << ")"; - of_call << le_stub.str() << ";\n"; - - le_stub << " {\n"; - if( rettype != "void" ) - le_stub << "\t" << rettype << " ret;\n"; - - if( method_call ) { - le_stub << "\tchar arg0[" - << round_up(nametext.size()+1,8) - << "] = \"" << nametext << "\";\n"; - } - - for( i = 0; i < args; i++ ) { - if( argtypes[i].lit_value.size() ) { - le_stub << "\t" << argtypes[i].c_type << " arg" << i << " = " - << argtypes[i].lit_value << ";\n"; - } - } - - le_stub << "\t"; - if( rettype != "void" ) le_stub << "ret = (" << rettype << ")"; - - le_stub << "ofproxy(" << - (method_call ? (wrapper.method_ctindex * 4) : (wrapper.ctindex * 4)); - - for( i = 0; i < 6; i++ ) { - if( i < args ) le_stub << ",(void *)arg" << i; - else le_stub << ",NULL"; - } - - le_stub << ");\n"; - - if( rettype != "void" ) - le_stub << "\treturn ret;\n"; - - le_stub << "}\n"; - - if( make_function ) wrapper.functions += function.str(); - if( make_stub ) { - wrapper.le_stubs += le_stub.str(); - wrapper.of_call += of_call.str(); - } - if( !method_call ) { - wrapper.names += name + "_ofw_name:\n\t.asciz \"" + nametext + "\"\n"; - wrapper.calltable += std::string("\t.long asm_ofw_") + name + "\n"; - wrapper.ctindex++; - } -} - -int main( int argc, char **argv ) { - int status = 0; - std::ifstream in; - std::ofstream out, outcsource, outcheader; - std::string line; - const char *eol_marks = "#\r\n"; - ofw_wrappers wrappers; - - wrappers.base = 0xe00000; - wrappers.ctindex = 0; - - if( argc < 5 ) { - fprintf( stderr, "%s [interface.ofw] [ofw.s] [le_stub.c] [le_stub.h]\n", argv[0] ); - return 1; - } - - in.open( argv[1] ); - if( !in ) { - fprintf( stderr, "can't open %s\n", argv[1] ); - status = 1; - goto error; - } - - out.open( argv[2] ); - if( !out ) { - fprintf( stderr, "can't open %s\n", argv[2] ); - status = 1; - goto error; - } - - outcsource.open( argv[3] ); - if( !outcsource ) { - fprintf( stderr, "can't open %s\n", argv[3] ); - status = 1; - goto error; - } - - outcheader.open( argv[4] ); - if( !outcheader ) { - fprintf( stderr, "can't open %s\n", argv[4] ); - status = 1; - goto error; - } - - while( std::getline( in, line ) ) { - line = clip_eol( line, eol_marks ); - if( line.size() ) populate_definition( wrappers, line ); - } - - out << "/* AUTOMATICALLY GENERATED BY ofw_interface */\n" - << "\t.section .text\n" - << "\t.align 4\n" - << "\t.globl _start\n" - << "\t.globl ofw_functions\n" - << "\t.globl ofw_call_addr\n" - << "ofw_call_addr:\n" - << "\t.long 0\n" - << "\n/* Function Wrappers */\n\n" - << wrappers.functions - << "\n/* Function Names */\n\n" - << wrappers.names - << "\n/* Function Call Table for Freeldr */\n\n" - << "\t.align 4\n" - << "ofw_functions:\n" - << wrappers.calltable - << "\n/* End */\n"; - - outcsource << "/* AUTOMATICALLY GENERATED BY ofw_interface */\n" - << "#include \"of.h\"\n" - << wrappers.le_stubs; - - outcheader << "/* AUTOMATICALLY GENERATE BY ofw_interface */\n" - << "#ifndef _OFW_CALLS_H\n" - << "#define _OFW_CALLS_H\n" - << wrappers.of_call - << "#endif/*_OFW_CALLS_H*/\n"; - -error: - return status; -} diff --git a/reactos/tools/ofw_interface/ofw_interface.mak b/reactos/tools/ofw_interface/ofw_interface.mak deleted file mode 100644 index 105a072031e..00000000000 --- a/reactos/tools/ofw_interface/ofw_interface.mak +++ /dev/null @@ -1,63 +0,0 @@ -OFW_INTERFACE_BASE = $(TOOLS_BASE_)ofw_interface -OFW_INTERFACE_BASE_ = $(OFW_INTERFACE_BASE)$(SEP) -OFW_INTERFACE_INT = $(INTERMEDIATE_)$(OFW_INTERFACE_BASE) -OFW_INTERFACE_INT_ = $(OFW_INTERFACE_INT)$(SEP) -OFW_INTERFACE_OUT = $(OUTPUT_)$(OFW_INTERFACE_BASE) -OFW_INTERFACE_OUT_ = $(OFW_INTERFACE_OUT)$(SEP) - -OFW_INTERFACE_OUTPUT = boot/freeldr/freeldr/arch/powerpc/ofw_calls.s -OFW_INTERFACE_SOURCE = boot/freeldr/freeldr/arch/powerpc/ofw.c -OFW_INTERFACE_HEADER = boot/freeldr/freeldr/include/of_call.h -OFW_INTERFACE_INPUT = $(OFW_INTERFACE_BASE_)calls.ofw -OFW_INTERFACE_SERVICE_FILES = \ - $(OFW_INTERFACE_OUTPUT) \ - $(OFW_INTERFACE_SOURCE) \ - $(OFW_INTERFACE_HEADER) - -$(OFW_INTERFACE_INT): | $(TOOLS_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(OFW_INTERFACE_OUT): | $(TOOLS_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - -OFW_INTERFACE_TARGET = \ - $(OFW_INTERFACE_OUT_)ofw_interface$(EXEPOSTFIX) - -OFW_INTERFACE_SOURCES = $(addprefix $(OFW_INTERFACE_BASE_), \ - ofw_interface.cpp \ - ) - -OFW_INTERFACE_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(OFW_INTERFACE_SOURCES:.cpp=.o)) - -OFW_INTERFACE_HOST_CFLAGS = $(TOOLS_CFLAGS) - -OFW_INTERFACE_HOST_LFLAGS = $(TOOLS_LFLAGS) - -$(OFW_INTERFACE_TARGET): $(OFW_INTERFACE_OBJECTS) | $(OFW_INTERFACE_OUT) - $(ECHO_LD) - ${host_gpp} $(OFW_INTERFACE_OBJECTS) $(OFW_INTERFACE_HOST_LFLAGS) -o $@ - -$(OFW_INTERFACE_INT_)ofw_interface.o: $(OFW_INTERFACE_BASE_)ofw_interface.cpp | $(OFW_INTERFACE_INT) - $(ECHO_CC) - ${host_gpp} $(OFW_INTERFACE_HOST_CFLAGS) -c $< -o $@ - -$(OFW_INTERFACE_SERVICE_FILES): $(OFW_INTERFACE_TARGET) $(OFW_INTERFACE_INPUT) - $(ECHO_OFW) - $(Q)$(OFW_INTERFACE_TARGET) \ - $(OFW_INTERFACE_INPUT) \ - $(OFW_INTERFACE_OUTPUT) \ - $(OFW_INTERFACE_SOURCE) \ - $(OFW_INTERFACE_HEADER) - -.PHONY: ofw_interface -ofw_interface: $(OFW_INTERFACE_TARGET) - -.PHONY: ofw_interface_clean -ofw_interface_clean: - -@$(rm) $(OFW_INTERFACE_TARGET) $(OFW_INTERFACE_OBJECTS) 2>$(NUL) -clean: ofw_interface_clean diff --git a/reactos/tools/pefixup.c b/reactos/tools/pefixup.c deleted file mode 100644 index f26c2b7a396..00000000000 --- a/reactos/tools/pefixup.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - * PE Fixup Utility - * Copyright (C) 2005 Filip Navara - * - * The purpose of this utility is fix PE binaries generated by binutils and - * to manipulate flags that can't be set by binutils. - * - * Currently two features are implemented: - * - * - Setting flags on PE sections for use by drivers. The sections - * .text, .data, .idata, .bss are marked as non-pageable and - * non-discarable, section PAGE is marked as pageable and section - * INIT is marked as discaradable. - * - * - Sorting of export name table in executables. DLLTOOL has bug - * in sorting algorithm when the --kill-at flag is used. The exports - * are sorted in the decorated form and so the fastcall symbols are - * incorrectly put at the beginning of export table. This option - * allow to correct sort the table, so binary search can be used - * to process them. - */ - -#include -#include -#include -#include -#ifndef _WIN32 -#include -#endif - -#ifndef O_BINARY -#define O_BINARY 0 -#endif - -/* The following definitions are ripped from MinGW W32API headers. We don't - use these headers directly in order to allow compilation on Linux hosts. */ - -typedef unsigned char BYTE, *PBYTE; -typedef unsigned short WORD; -typedef unsigned int DWORD; -typedef int LONG; - -#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 -#define IMAGE_SIZEOF_SHORT_NAME 8 -#define IMAGE_DOS_SIGNATURE 0x5A4D -#define IMAGE_NT_SIGNATURE 0x00004550 -#define IMAGE_SCN_MEM_DISCARDABLE 0x2000000 -#define IMAGE_SCN_MEM_NOT_PAGED 0x8000000 -#define FIELD_OFFSET(t,f) ((LONG)&(((t*)0)->f)) -#define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((unsigned long)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader)) -#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 - -#pragma pack(2) -typedef struct _IMAGE_DOS_HEADER { - WORD e_magic; - WORD e_cblp; - WORD e_cp; - WORD e_crlc; - WORD e_cparhdr; - WORD e_minalloc; - WORD e_maxalloc; - WORD e_ss; - WORD e_sp; - WORD e_csum; - WORD e_ip; - WORD e_cs; - WORD e_lfarlc; - WORD e_ovno; - WORD e_res[4]; - WORD e_oemid; - WORD e_oeminfo; - WORD e_res2[10]; - LONG e_lfanew; -} IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER; -#pragma pack(4) -#pragma pack(4) -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; -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; -typedef struct _IMAGE_OPTIONAL_HEADER { - WORD Magic; - BYTE MajorLinkerVersion; - BYTE MinorLinkerVersion; - DWORD SizeOfCode; - DWORD SizeOfInitializedData; - DWORD SizeOfUninitializedData; - DWORD AddressOfEntryPoint; - DWORD BaseOfCode; - DWORD BaseOfData; - DWORD ImageBase; - DWORD SectionAlignment; - DWORD FileAlignment; - WORD MajorOperatingSystemVersion; - WORD MinorOperatingSystemVersion; - WORD MajorImageVersion; - WORD MinorImageVersion; - WORD MajorSubsystemVersion; - WORD MinorSubsystemVersion; - DWORD Reserved1; - DWORD SizeOfImage; - DWORD SizeOfHeaders; - DWORD CheckSum; - WORD Subsystem; - WORD DllCharacteristics; - DWORD SizeOfStackReserve; - DWORD SizeOfStackCommit; - DWORD SizeOfHeapReserve; - DWORD SizeOfHeapCommit; - DWORD LoaderFlags; - DWORD NumberOfRvaAndSizes; - IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; -} IMAGE_OPTIONAL_HEADER,*PIMAGE_OPTIONAL_HEADER; -typedef struct _IMAGE_NT_HEADERS { - DWORD Signature; - IMAGE_FILE_HEADER FileHeader; - IMAGE_OPTIONAL_HEADER OptionalHeader; -} IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS; -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; -#pragma pack(4) - -/* End of ripped definitions */ - -typedef struct _export_t { - DWORD name; - WORD ordinal; -} export_t; - -unsigned char *buffer; -PIMAGE_DOS_HEADER dos_header; -PIMAGE_NT_HEADERS nt_header; - -static inline WORD dtohs(WORD in) -{ - PBYTE in_ptr = (PBYTE)∈ - return in_ptr[0] | (in_ptr[1] << 8); -} - -static inline WORD htods(WORD in) -{ - WORD out; - PBYTE out_ptr = (PBYTE)&out; - out_ptr[0] = in; out_ptr[1] = in >> 8; - return out; -} - -static inline DWORD dtohl(DWORD in) -{ - PBYTE in_ptr = (PBYTE)∈ - return in_ptr[0] | (in_ptr[1] << 8) | (in_ptr[2] << 16) | (in_ptr[3] << 24); -} - -static inline DWORD htodl(DWORD in) -{ - DWORD out; - PBYTE out_ptr = (PBYTE)&out; - out_ptr[0] = in ; out_ptr[1] = in >> 8; - out_ptr[2] = in >> 16; out_ptr[3] = in >> 24; - return out; -} - -void *rva_to_ptr(DWORD rva) -{ - PIMAGE_SECTION_HEADER section_header; - unsigned int i; - - for (i = 0, section_header = IMAGE_FIRST_SECTION(nt_header); - i < dtohl(nt_header->FileHeader.NumberOfSections); - i++, section_header++) - { - if (rva >= dtohl(section_header->VirtualAddress) && - rva < dtohl(section_header->VirtualAddress) + - dtohl(section_header->Misc.VirtualSize)) - { - return buffer + rva - dtohl(section_header->VirtualAddress) + - dtohl(section_header->PointerToRawData); - } - } - - return NULL; -} - -int export_compare_func(const void *a, const void *b) -{ - const export_t *ap = a; - const export_t *bp = b; - char *an = rva_to_ptr(ap->name); - char *bn = rva_to_ptr(bp->name); - return strcmp(an, bn); -} - -int main(int argc, char **argv) -{ - int fd_in, fd_out; - long len; - char hdrbuf[4] = { }, elfhdr[4] = { '\177', 'E', 'L', 'F' }; - PIMAGE_SECTION_HEADER section_header; - PIMAGE_DATA_DIRECTORY data_dir; - unsigned int i; - unsigned long checksum; - int fixup_exports = 0; - int fixup_sections = 0; - - /* - * Process parameters. - */ - - if (argc < 2) - { - printf("Usage: %s \n" - "Options:\n" - " -sections Sets section flags for PE image.\n" - " -exports Sort the names in export table.\n", - argv[0]); - return 1; - } - - for (i = 2; i < argc; i++) - { - if (!strcmp(argv[i], "-sections")) - fixup_sections = 1; - else if (!strcmp(argv[i], "-exports")) - fixup_exports = 1; - else - { printf("Invalid option: %s\n", argv[i]); return 1; } - } - - if (fixup_sections == 0 && fixup_exports == 0) - { - printf("Nothing to do.\n"); - return 0; - } - - /* - * Read the whole file to memory. - */ - - fd_in = open(argv[1], O_RDONLY | O_BINARY); - if (fd_in == 0) - { - printf("Can't open input file.\n"); - return 1; - } - - /* - * PowerPC ReactOS uses elf, so doesn't need pefixup - */ - len = read(fd_in, hdrbuf, sizeof(elfhdr)); - if (!memcmp(hdrbuf, elfhdr, sizeof(elfhdr))) - return 0; - - len = lseek(fd_in, 0, SEEK_END); - if (len < sizeof(IMAGE_DOS_HEADER)) - { - close(fd_in); - printf("'%s' isn't a PE image (too short)\n", argv[1]); - return 1; - } - - /* Lower down we overwrite the byte at len, so here, we need at least - * one more byte than len. We'll be guaranteed one or two now. */ - buffer = malloc((len + 2) & ~1); - if (buffer == NULL) - { - close(fd_in); - printf("Not enough memory available.\n"); - return 1; - } - - /* Read the whole input file into a buffer */ - lseek(fd_in, 0, SEEK_SET); - read(fd_in, buffer, len); - /* Here is where the block end overwrite was */ - if (len & 1) - buffer[len] = 0; - - close(fd_in); - - /* - * Check the headers and save pointers to them. - */ - - dos_header = (PIMAGE_DOS_HEADER)buffer; - nt_header = (PIMAGE_NT_HEADERS)(buffer + dtohl(dos_header->e_lfanew)); - - if (dtohs(dos_header->e_magic) != IMAGE_DOS_SIGNATURE || - dtohl(nt_header->Signature) != IMAGE_NT_SIGNATURE) - { - printf("'%s' isn't a PE image (bad headers)\n", argv[1]); - free(buffer); - return 1; - } - - if (fixup_exports) - { - /* Sort export directory */ - data_dir = &nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; - if (dtohl(data_dir->Size) != 0) - { - PIMAGE_EXPORT_DIRECTORY export_directory; - DWORD *name_ptr; - WORD *ordinal_ptr; - export_t *exports; - - export_directory = (PIMAGE_EXPORT_DIRECTORY)rva_to_ptr(dtohl(data_dir->VirtualAddress)); - if (export_directory != NULL) - { - exports = malloc(sizeof(export_t) * dtohl(export_directory->NumberOfNames)); - if (exports == NULL) - { - printf("Not enough memory.\n"); - free(buffer); - return 1; - } - - name_ptr = (DWORD *)rva_to_ptr(dtohl(export_directory->AddressOfNames)); - ordinal_ptr = (WORD *)rva_to_ptr(dtohl(export_directory->AddressOfNameOrdinals)); - - for (i = 0; i < dtohl(export_directory->NumberOfNames); i++) - { - exports[i].name = dtohl(name_ptr[i]); - exports[i].ordinal = dtohl(ordinal_ptr[i]); - } - - qsort(exports, dtohl(export_directory->NumberOfNames), sizeof(export_t), - export_compare_func); - - for (i = 0; i < dtohl(export_directory->NumberOfNames); i++) - { - name_ptr[i] = htodl(exports[i].name); - ordinal_ptr[i] = htodl(exports[i].ordinal); - } - - free(exports); - } - } - } - - if (fixup_sections) - { - /* Update section flags */ - for (i = 0, section_header = IMAGE_FIRST_SECTION(nt_header); - i < dtohl(nt_header->OptionalHeader.NumberOfRvaAndSizes); - i++, section_header++) - { - if (!strcmp((char*)section_header->Name, ".text") || - !strcmp((char*)section_header->Name, ".data") || - !strcmp((char*)section_header->Name, ".idata") || - !strcmp((char*)section_header->Name, ".bss")) - { - section_header->Characteristics |= htodl(IMAGE_SCN_MEM_NOT_PAGED); - section_header->Characteristics &= htodl(~IMAGE_SCN_MEM_DISCARDABLE); - } - else if (!strcmp((char*)section_header->Name, "INIT")) - { - section_header->Characteristics |= htodl(IMAGE_SCN_MEM_DISCARDABLE); - } - else if (!strcmp((char*)section_header->Name, "PAGE")) - { - section_header->Characteristics |= htodl(IMAGE_SCN_MEM_NOT_PAGED); - } - } - } - - /* Recalculate checksum */ - nt_header->OptionalHeader.CheckSum = 0; - checksum = 0; - for (i = 0; i < len; i += 2) - { - checksum += *(unsigned short *)(buffer + i); - checksum = (checksum + (checksum >> 16)) & 0xffff; - } - checksum += len; - nt_header->OptionalHeader.CheckSum = htods(checksum); - - /* Write the output file */ - fd_out = open(argv[1], O_WRONLY | O_BINARY); - write(fd_out, buffer, len); - close(fd_out); - - return 0; -} diff --git a/reactos/tools/pefixup.mak b/reactos/tools/pefixup.mak deleted file mode 100644 index 3ceb374b7e2..00000000000 --- a/reactos/tools/pefixup.mak +++ /dev/null @@ -1,36 +0,0 @@ -PEFIXUP_BASE = $(TOOLS_BASE) -PEFIXUP_BASE_ = $(PEFIXUP_BASE)$(SEP) - -PEFIXUP_INT = $(INTERMEDIATE_)$(PEFIXUP_BASE) -PEFIXUP_INT_ = $(PEFIXUP_INT)$(SEP) -PEFIXUP_OUT = $(OUTPUT_)$(PEFIXUP_BASE) -PEFIXUP_OUT_ = $(PEFIXUP_OUT)$(SEP) - -PEFIXUP_TARGET = \ - $(PEFIXUP_OUT_)pefixup$(EXEPOSTFIX) - -PEFIXUP_SOURCES = \ - $(PEFIXUP_BASE_)pefixup.c - -PEFIXUP_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(PEFIXUP_SOURCES:.c=.o)) - -PEFIXUP_HOST_CFLAGS = $(TOOLS_CFLAGS) - -PEFIXUP_HOST_LFLAGS = $(TOOLS_LFLAGS) - -.PHONY: pefixup -pefixup: $(PEFIXUP_TARGET) - -$(PEFIXUP_TARGET): $(PEFIXUP_OBJECTS) | $(PEFIXUP_OUT) - $(ECHO_LD) - ${host_gcc} $(PEFIXUP_OBJECTS) $(PEFIXUP_HOST_LFLAGS) -o $@ - -$(PEFIXUP_INT_)pefixup.o: $(PEFIXUP_BASE_)pefixup.c | $(PEFIXUP_INT) - $(ECHO_CC) - ${host_gcc} $(PEFIXUP_HOST_CFLAGS) -c $< -o $@ - -.PHONY: pefixup_clean -pefixup_clean: - -@$(rm) $(PEFIXUP_TARGET) $(PEFIXUP_OBJECTS) 2>$(NUL) -clean: pefixup_clean diff --git a/reactos/tools/pipetools/piperead.cpp b/reactos/tools/pipetools/piperead.cpp deleted file mode 100644 index bac9e0eb6fb..00000000000 --- a/reactos/tools/pipetools/piperead.cpp +++ /dev/null @@ -1,81 +0,0 @@ -// -// piperead.cpp -// -// Martin Fuchs, 30.11.2003 -// - -// -// Invoke as: "piperead [pipe_name]", -// for example: "piperead com_1" -// - - -#define WIN32_LEAN_AND_MEAN -#include -#include - - - // This definition currently missing in MinGW. -#ifndef FILE_FLAG_FIRST_PIPE_INSTANCE -#define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000 -#endif - - -static void print_error(DWORD win32_error) -{ - fprintf(stderr, "WIN32 error %lu\n", win32_error); -} - - -int main(int argc, char** argv) -{ - char path[MAX_PATH]; - const char* pipe_name; - - if (argc > 1) - pipe_name = *++argv; - else - pipe_name = "com_1"; - - sprintf(path, "\\\\.\\pipe\\%s", pipe_name); - - HANDLE hPipe = CreateNamedPipe(path, PIPE_ACCESS_DUPLEX|FILE_FLAG_FIRST_PIPE_INSTANCE, PIPE_WAIT|PIPE_TYPE_BYTE, 1, 4096, 4096, 30000, NULL); - - if (hPipe == INVALID_HANDLE_VALUE) { - print_error(GetLastError()); - return 1; - } - - for(;;) { - DWORD read; - BYTE buffer[1024]; - - if (!ReadFile(hPipe, buffer, sizeof(buffer), &read, NULL)) { - DWORD error = GetLastError(); - - if (error == ERROR_PIPE_LISTENING) - Sleep(1000); - else if (error == ERROR_BROKEN_PIPE) { - CloseHandle(hPipe); - - hPipe = CreateNamedPipe(path, PIPE_ACCESS_DUPLEX|FILE_FLAG_FIRST_PIPE_INSTANCE, PIPE_WAIT|PIPE_TYPE_BYTE, 1, 4096, 4096, 30000, NULL); - - if (hPipe == INVALID_HANDLE_VALUE) { - print_error(GetLastError()); - return 1; - } - } else { - print_error(error); - break; - } - } - - if (read) - fwrite(buffer, read, 1, stdout); - } - - if (!CloseHandle(hPipe)) - print_error(GetLastError()); - - return 0; -} diff --git a/reactos/tools/pipetools/pipespy.cpp b/reactos/tools/pipetools/pipespy.cpp deleted file mode 100644 index 653c7f1def4..00000000000 --- a/reactos/tools/pipetools/pipespy.cpp +++ /dev/null @@ -1,251 +0,0 @@ -/* - * PipeSpy - * Copyright (c) 2004, Skywing (skywing@valhallalegends.com) - * Released under the GNU GPL for the ReactOS project - * - * This program can be used to spy on a named pipe in Windows NT(+) - * or ReactOS. It is particularly intended to be used for - * understanding the remote kernel debugging protocol used - * by windows kd. - * - * USE: - * - * PipeSpy \\.\pipe\debug_server \\.\pipe\debug_client > PipeSpy.log - * - * VMware: act as client, connect to \\.\pipe\debug_server, pipe is connected - * to application - * - * WinDbg -k com:pipe,port=\\.\pipe\debug_client,resets=0 - * - * NOTE: - * - * This program hasn't really been tested against ReactOS, and has only - * been built with Visual Studio .NET 2003. - */ -#include -#include -#include - -HANDLE g_DebugServerPipe, g_DebugClientPipe; -CRITICAL_SECTION g_OutputLock; - -void dumphex(const char *buf, int len, int pos) -{ - int i, j; - for(j = 0; j < len; j += 16) { - for(i = 0; i < 16; i++) { - if(i + j < len) - printf("%02x%c", (unsigned char)buf[i + j], j + i + 1 == pos ? '*' : ' '); - else - printf(" "); - } - for(i = 0; i < 16; i++) { - if(i + j < len) - printf("%c", buf[i + j] >= ' ' ? buf[i + j] : '.'); - else - printf(" "); - } - printf("\n"); - } -} - -enum { - PIPEBUF_INITIAL_SIZE = 4096, - PIPEBUF_MAX_SIZE = 16384 -}; - -typedef struct _READ_OVERLAPPED { - OVERLAPPED ReadOverlapped; - char* Buffer; - HANDLE Pipe, OtherPipe; - bool Server; - bool Connected; -} READ_OVERLAPPED; - -VOID WINAPI WritePipeCompletion(DWORD dwErrorCode, DWORD dwNumberOfBytesTransferred, LPOVERLAPPED lpOverlapped) -{ - if(dwErrorCode) { - EnterCriticalSection(&g_OutputLock); - printf(lpOverlapped->hEvent ? "Server> Error %u writing to client pipe\n" : "Client> Error %u writing to server pipe\n", dwErrorCode); - LeaveCriticalSection(&g_OutputLock); - } - - free((void*)lpOverlapped); -} - -VOID WINAPI ReadPipeCompletion(DWORD dwErrorCode, DWORD dwNumberOfBytesTransferred, LPOVERLAPPED lpOverlapped) -{ - READ_OVERLAPPED* ReadOverlapped = (READ_OVERLAPPED*)lpOverlapped; - LPOVERLAPPED WriteOverlapped; - - EnterCriticalSection(&g_OutputLock); - - if(dwErrorCode) { - printf(ReadOverlapped->Server ? "Server> Error %u reading from pipe\n" : "Client> Error %u reading from pipe\n", dwErrorCode); - ReadOverlapped->Connected = false; - } else { - SYSTEMTIME SystemTime; - - GetLocalTime(&SystemTime); - printf(ReadOverlapped->Server ? "Server> [%02u:%02u:%02u.%03u] Received %u byte message:\n" : "Client> [%02u:%02u:%02u.%03u] Received %u byte message:\n", - SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, SystemTime.wMilliseconds, dwNumberOfBytesTransferred); - dumphex(ReadOverlapped->Buffer, (int)dwNumberOfBytesTransferred, -1); - printf("\n"); - } - - LeaveCriticalSection(&g_OutputLock); - - WriteOverlapped = (LPOVERLAPPED)malloc(sizeof(OVERLAPPED)+dwNumberOfBytesTransferred); - - if(!WriteOverlapped) - printf(ReadOverlapped->Server ? "Server> Out of memory\n" : "Client> Out of memory\n"); - else { - ZeroMemory(WriteOverlapped, sizeof(OVERLAPPED)); - WriteOverlapped->hEvent = (HANDLE)ReadOverlapped->Server; - memcpy(((char*)WriteOverlapped)+sizeof(OVERLAPPED), ReadOverlapped->Buffer, dwNumberOfBytesTransferred); - WriteFileEx(ReadOverlapped->OtherPipe, ((char*)WriteOverlapped)+sizeof(OVERLAPPED), dwNumberOfBytesTransferred, WriteOverlapped, - WritePipeCompletion); - } - - if(!dwErrorCode) { - ZeroMemory(ReadOverlapped, sizeof(OVERLAPPED)); - ReadFileEx(ReadOverlapped->Pipe, ReadOverlapped->Buffer, PIPEBUF_INITIAL_SIZE, &ReadOverlapped->ReadOverlapped, ReadPipeCompletion); - } -} - -void __cdecl pipeserver(void* param) -{ - READ_OVERLAPPED ReadOverlapped; - - ReadOverlapped.Pipe = (HANDLE)param, ReadOverlapped.OtherPipe = ReadOverlapped.Pipe == g_DebugServerPipe ? g_DebugClientPipe : g_DebugServerPipe; - ReadOverlapped.Server = ReadOverlapped.Pipe == g_DebugServerPipe; - ReadOverlapped.Buffer = (char*)malloc(PIPEBUF_INITIAL_SIZE); - - for(;;) { - if(!ConnectNamedPipe(ReadOverlapped.Pipe, 0) && GetLastError() != ERROR_PIPE_CONNECTED) { - printf(ReadOverlapped.Server ? "Server> Error %u accepting pipe connection\n" : "Client> Error %u accepting pipe connection\n", - GetLastError()); - break; - } - - ReadOverlapped.Connected = true; - printf(ReadOverlapped.Server ? "Server> Connected\n" : "Client> Connected\n"); - - ZeroMemory(&ReadOverlapped.ReadOverlapped, sizeof(OVERLAPPED)); - ReadFileEx(ReadOverlapped.Pipe, ReadOverlapped.Buffer, PIPEBUF_INITIAL_SIZE, &ReadOverlapped.ReadOverlapped, ReadPipeCompletion); - - do { - SleepEx(INFINITE, TRUE); - } while(ReadOverlapped.Connected) ; - - DisconnectNamedPipe(ReadOverlapped.Pipe); - printf(ReadOverlapped.Server ? "Server> Disconnected\n" : "Client> Disconnected\n"); - } - - printf(ReadOverlapped.Server ? "Server> Shutting down\n" : "Client> Shutting down\n"); - - free(ReadOverlapped.Buffer); - CloseHandle(ReadOverlapped.Pipe); - SleepEx(0, TRUE); -} - -int main(int ac, char **av) -{ - if(ac != 3) { - printf("syntax: pipespy serverpipe clientpipe\n"); - return 0; - } - - g_DebugServerPipe = CreateNamedPipe(av[1], PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, - 1, 4096, 4096, NMPWAIT_WAIT_FOREVER, 0); - - if(g_DebugServerPipe == INVALID_HANDLE_VALUE) { - printf("Error %u creating server pipe\n", GetLastError()); - return 0; - } - - g_DebugClientPipe = CreateNamedPipe(av[2], PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, - 1, 4096, 4096, NMPWAIT_WAIT_FOREVER, 0); - - if(g_DebugClientPipe == INVALID_HANDLE_VALUE) { - printf("Error %u creating client pipe\n", GetLastError()); - CloseHandle(g_DebugServerPipe); - return 0; - } - - InitializeCriticalSection(&g_OutputLock); - _beginthread(pipeserver, 0, (void*)g_DebugServerPipe); - pipeserver((void*)g_DebugClientPipe); - DeleteCriticalSection(&g_OutputLock); - return 0; -} - - -/* - while(!Error) { - SleepEx(0, TRUE); - BufferPos = 0; - - if(BufferSize > PIPEBUF_MAX_SIZE) { - char* NewBuf = (char*)realloc(Buffer, PIPEBUF_MAX_SIZE); - - if(NewBuf) { - Buffer = NewBuf; - BufferSize = PIPEBUF_MAX_SIZE; - } - } - - for(;;) { - char* NewBuf; - - if(ReadFile(Pipe, Buffer+BufferPos, BufferSize-BufferPos, &Read, 0)) { - BufferPos += Read; - Error = 0; - break; - } - - Error = GetLastError(); - - printf("Error=%u read=%u\n", Error, Read); - - if(Error != ERROR_MORE_DATA) { - printf(Server ? "Server> Error %u reading from pipe\n" : "Client> Error %u reading from pipe\n", GetLastError()); - break; - } - - NewBuf = (char*)realloc(Buffer, BufferSize << 1); - - if(!NewBuf) { - printf(Server ? "Server> Out of memory\n" : "Client> Out of memory\n"); - break; - } - - BufferSize <<= 1; - BufferPos += Read; - Error = 0; - } - - if(Error) - break; - - WriteOverlapped = (LPOVERLAPPED)malloc(sizeof(OVERLAPPED)+BufferPos); - - if(!WriteOverlapped) - printf(Server ? "Server> Out of memory\n" : "Client> Out of memory\n"); - else { - ZeroMemory(WriteOverlapped, sizeof(OVERLAPPED)); - memcpy(((char*)WriteOverlapped)+sizeof(OVERLAPPED), Buffer, BufferPos); - WriteFileEx(OtherPipe, ((char*)WriteOverlapped)+sizeof(OVERLAPPED), BufferPos, WriteOverlapped, WritePipeCompletion); - } - - EnterCriticalSection(&g_OutputLock); - printf(Server ? "Server> Received %u byte message:\n" : "Client> Received %u byte message:\n", BufferPos); - dumphex(Buffer, (int)BufferPos, -1); - printf("\n"); - LeaveCriticalSection(&g_OutputLock); - } - - DisconnectNamedPipe(Pipe); - printf(Server ? "Server> Disconnected\n" : "Client> Disconnected\n"); - - */ diff --git a/reactos/tools/pipetools/pipetunnel.cpp b/reactos/tools/pipetools/pipetunnel.cpp deleted file mode 100644 index 23643ff5776..00000000000 --- a/reactos/tools/pipetools/pipetunnel.cpp +++ /dev/null @@ -1,317 +0,0 @@ -// -// pipetunnel.cpp -// -// Martin Fuchs, 30.11.2003 -// - -// -// Invoke as: "pipetunnel [pipe_name]", -// for example: "pipetunnel com_2" -// -// Then start up RectOS in VMWare, wait for the serial connect. -// After that you can connect GDB using the command "target remote :9999". -// - - -#define WIN32_LEAN_AND_MEAN -#include - -#include - -#ifdef _MSC_VER -#pragma comment(lib, "wsock32") -#endif - -#include -#include - - - // This definition currently missing in MinGW. -#ifndef FILE_FLAG_FIRST_PIPE_INSTANCE -#define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000 -#endif - - -static void print_error(DWORD win32_error) -{ - fprintf(stderr, "WIN32 error %lu\n", win32_error); -} - - -#ifdef _DEBUG - - // critical section wrapper -struct CritSect : public CRITICAL_SECTION -{ - CritSect() - { - InitializeCriticalSection(this); - } - - ~CritSect() - { - DeleteCriticalSection(this); - } -}; - -static void dbg_trace(char mode, const char* buffer, int l) -{ - static char s_mode = '\0'; - static CritSect crit_sect; - - EnterCriticalSection(&crit_sect); - - if (l) { - for(const char*p=buffer; l--; ++p) { - if (mode != s_mode) { - putchar('\n'); - putchar(mode); - putchar(' '); - - s_mode = mode; - } - - if (*p=='\n' || !*p /*|| *p=='#'*/) { - /*if (*p == '#') - putchar(*p);*/ - - s_mode = '\0'; - } else - putchar(*p); - } - } - - LeaveCriticalSection(&crit_sect); -} - -#endif - - -static SOCKET s_srv_socket = (SOCKET)-1; - -SOCKET open_tcp_connect() -{ - if (s_srv_socket == (SOCKET)-1) { - SOCKADDR_IN srv_addr = {0}; - - srv_addr.sin_family = AF_INET; - srv_addr.sin_addr.s_addr = htonl(INADDR_ANY); - srv_addr.sin_port = htons(9999); - - s_srv_socket = socket(PF_INET, SOCK_STREAM, 0); - if (s_srv_socket == (SOCKET)-1) { - perror("socket()"); - return 0; - } - - if (bind(s_srv_socket, (struct sockaddr*) &srv_addr, sizeof(srv_addr)) == -1) { - perror("bind()"); - return 0; - } - - if (listen(s_srv_socket, 4) == -1) { - perror("listen()"); - return 0; - } - } - - SOCKADDR_IN rem_addr; - int rem_len = sizeof(rem_addr); - - for(;;) { - SOCKET sock = accept(s_srv_socket, (struct sockaddr*)&rem_addr, &rem_len); - - if (sock < 0) { - if (errno == EINTR) - continue; - - perror("accept()"); - return 0; - } - - return sock; - } -} - - - -struct WriterThread -{ - WriterThread(SOCKET sock, HANDLE hPipe) - : _sock(sock), - _hPipe(hPipe) - { - DWORD tid; - - HANDLE hThread = CreateThread(NULL, 0, WriterThreadRoutine, this, 0, &tid); - - if (hThread) { - SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST); - - CloseHandle(hThread); - } else - delete this; - } - -protected: - SOCKET _sock; - HANDLE _hPipe; - - static DWORD WINAPI WriterThreadRoutine(LPVOID param) - { - WriterThread* pThis = (WriterThread*) param; - - DWORD ret = pThis->Run(); - - delete pThis; - - return ret; - } - - DWORD Run() - { - char buffer[1024]; - - for(;;) { - int r = recv(_sock, buffer, sizeof(buffer), 0); - - if (r == -1) { - perror("recv()"); - fprintf(stderr, "debugger connection broken\n"); - _sock = (SOCKET)-1; - return 1; - } - - if (r) { - DWORD wrote; - - if (!WriteFile(_hPipe, buffer, r, &wrote, NULL)) - break; - -#ifdef _DEBUG - dbg_trace('<', buffer, r); -#endif - } - } - - return 0; - } -}; - - -LONG read_pipe(HANDLE hPipe, SOCKET sock) -{ - for(;;) { - DWORD read; - char buffer[1024]; - - // wait for input data - WaitForSingleObject(hPipe, INFINITE); - - if (!ReadFile(hPipe, buffer, sizeof(buffer), &read, NULL)) { - DWORD error = GetLastError(); - - if (error == ERROR_PIPE_LISTENING) - Sleep(1000); - else - return error; - } - - if (read) { -#ifdef _DEBUG - dbg_trace('>', buffer, read); -#endif - - if (!send(sock, buffer, read, 0)) { - perror("send()"); - return GetLastError(); - } - } - } -} - - -int main(int argc, char** argv) -{ - char path[MAX_PATH]; - const char* pipe_name; - - if (argc > 1) - pipe_name = *++argv; - else - pipe_name = "com_2"; - - sprintf(path, "\\\\.\\pipe\\%s", pipe_name); - - - // initialize winsock - WSADATA wsa_data; - - if (WSAStartup(MAKEWORD(2,2), &wsa_data)) { - fprintf(stderr, "WSAStartup() failed\n"); - return 0; - } - - - // increment priority to be faster than the cpu eating VMWare process - SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); - SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST); - - - HANDLE hPipe = INVALID_HANDLE_VALUE; - - for(;;) { - DWORD read; - - if (hPipe == INVALID_HANDLE_VALUE) { - hPipe = CreateNamedPipe(path, PIPE_ACCESS_DUPLEX|FILE_FLAG_FIRST_PIPE_INSTANCE|FILE_FLAG_OVERLAPPED, PIPE_WAIT|PIPE_TYPE_BYTE, 1, 4096, 4096, 30000, NULL); - - if (hPipe == INVALID_HANDLE_VALUE) { - print_error(GetLastError()); - return 1; - } - } - - // wait for the client side of the pipe - while(!ReadFile(hPipe, NULL, 0, &read, NULL) && - GetLastError()==ERROR_PIPE_LISTENING) - Sleep(1000); - - puts("\nnamed pipe connected, now waiting for TCP connection..."); - - SOCKET sock = open_tcp_connect(); - if (sock == (SOCKET)-1) - break; - - puts("TCP connection established."); - - // launch writer thread - new WriterThread(sock, hPipe); - - // launch reader loop - LONG error = read_pipe(hPipe, sock); - - - // close TCP connectiom - closesocket(sock); - sock = (SOCKET)-1; - - // close named pipe - CloseHandle(hPipe); - hPipe = INVALID_HANDLE_VALUE; - - - if (error == ERROR_BROKEN_PIPE) - puts("\nconnection closed."); // normal connection termination - else { - print_error(GetLastError()); - break; - } - } - - if (hPipe != INVALID_HANDLE_VALUE) - if (!CloseHandle(hPipe)) - print_error(GetLastError()); - - return 0; -} diff --git a/reactos/tools/raddr2line.c b/reactos/tools/raddr2line.c deleted file mode 100644 index 576e96c6508..00000000000 --- a/reactos/tools/raddr2line.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Usage: raddr2line input-file address/offset - * - * This is a tool and is compiled using the host compiler, - * i.e. on Linux gcc and not mingw-gcc (cross-compiler). - * Therefore we can't include SDK headers and we have to - * duplicate some definitions here. - * Also note that the internal functions are "old C-style", - * returning an int, where a return of 0 means success and - * non-zero is failure. - */ - -#include -#include -#include - -#include "rsym.h" - -size_t fixup_offset ( size_t ImageBase, size_t offset ) -{ - if ( offset >= ImageBase ) - offset -= ImageBase; - return offset; -} - -long -my_atoi ( const char* a ) -{ - int i = 0; - const char* fmt = "%x"; - - if ( *a == '0' ) - { - switch ( *++a ) - { - case 'x': - fmt = "%x"; - ++a; - break; - case 'd': - fmt = "%d"; - ++a; - break; - default: - fmt = "%o"; - break; - } - } - sscanf ( a, fmt, &i ); - return i; -} - -PIMAGE_SECTION_HEADER -find_rossym_section ( PIMAGE_FILE_HEADER PEFileHeader, - PIMAGE_SECTION_HEADER PESectionHeaders ) -{ - size_t i; - for ( i = 0; i < PEFileHeader->NumberOfSections; i++ ) - { - if ( 0 == strcmp ( (char*)PESectionHeaders[i].Name, ".rossym" ) ) - return &PESectionHeaders[i]; - } - return NULL; -} - -int -find_and_print_offset ( - void* data, - size_t offset ) -{ - PSYMBOLFILE_HEADER RosSymHeader = (PSYMBOLFILE_HEADER)data; - PROSSYM_ENTRY Entries = (PROSSYM_ENTRY)((char*)data + RosSymHeader->SymbolsOffset); - char* Strings = (char*)data + RosSymHeader->StringsOffset; - size_t symbols = RosSymHeader->SymbolsLength / sizeof(ROSSYM_ENTRY); - size_t i; - - //if ( RosSymHeader->SymbolsOffset ) - - for ( i = 0; i < symbols; i++ ) - { - if ( Entries[i].Address > offset ) - { - if ( !i-- ) - return 1; - else - { - PROSSYM_ENTRY e = &Entries[i]; - printf ( "%s:%lu (%s)\n", - &Strings[e->FileOffset], - e->SourceLine, - &Strings[e->FunctionOffset] ); - return 0; - } - } - } - return 1; -} - -int -process_data ( const void* FileData, size_t FileSize, size_t offset ) -{ - PIMAGE_DOS_HEADER PEDosHeader; - PIMAGE_FILE_HEADER PEFileHeader; - PIMAGE_OPTIONAL_HEADER PEOptHeader; - PIMAGE_SECTION_HEADER PESectionHeaders; - PIMAGE_SECTION_HEADER PERosSymSectionHeader; - size_t ImageBase; - int res; - - /* Check if MZ header exists */ - PEDosHeader = (PIMAGE_DOS_HEADER)FileData; - if (PEDosHeader->e_magic != IMAGE_DOS_MAGIC || PEDosHeader->e_lfanew == 0L) - { - perror("Input file is not a PE image.\n"); - return 1; - } - - /* Locate PE file header */ - /* sizeof(ULONG) = sizeof(MAGIC) */ - PEFileHeader = (PIMAGE_FILE_HEADER)((char *)FileData + PEDosHeader->e_lfanew + sizeof(ULONG)); - - /* Locate optional header */ - PEOptHeader = (PIMAGE_OPTIONAL_HEADER)(PEFileHeader + 1); - ImageBase = PEOptHeader->ImageBase; - - /* Locate PE section headers */ - PESectionHeaders = (PIMAGE_SECTION_HEADER)((char *) PEOptHeader + PEFileHeader->SizeOfOptionalHeader); - - /* make sure offset is what we want */ - offset = fixup_offset ( ImageBase, offset ); - - /* find rossym section */ - PERosSymSectionHeader = find_rossym_section ( - PEFileHeader, PESectionHeaders ); - if ( !PERosSymSectionHeader ) - { - fprintf ( stderr, "Couldn't find rossym section in executable\n" ); - return 1; - } - res = find_and_print_offset ( (char*)FileData + PERosSymSectionHeader->PointerToRawData, - offset ); - if ( res ) - printf ( "??:0\n" ); - return res; -} - -int -process_file ( const char* file_name, size_t offset ) -{ - void* FileData; - size_t FileSize; - int res = 1; - - FileData = load_file ( file_name, &FileSize ); - if ( !FileData ) - { - fprintf ( stderr, "An error occured loading '%s'\n", file_name ); - } - else - { - res = process_data ( FileData, FileSize, offset ); - free ( FileData ); - } - - return res; -} - -int main ( int argc, const char** argv ) -{ - char* path; - size_t offset; - int res; - - if ( argc != 3 ) - { - fprintf(stderr, "Usage: raddr2line \n"); - exit(1); - } - - path = convert_path ( argv[1] ); - offset = my_atoi ( argv[2] ); - - res = process_file ( path, offset ); - - free ( path ); - - return res; -} diff --git a/reactos/tools/raddr2line.mak b/reactos/tools/raddr2line.mak deleted file mode 100644 index 4f0c7c2add7..00000000000 --- a/reactos/tools/raddr2line.mak +++ /dev/null @@ -1,41 +0,0 @@ -RADDR2LINE_BASE = $(TOOLS_BASE) -RADDR2LINE_BASE_ = $(RADDR2LINE_BASE)$(SEP) - -RADDR2LINE_INT = $(INTERMEDIATE_)$(RADDR2LINE_BASE) -RADDR2LINE_INT_ = $(RADDR2LINE_INT)$(SEP) -RADDR2LINE_OUT = $(OUTPUT_)$(RADDR2LINE_BASE) -RADDR2LINE_OUT_ = $(RADDR2LINE_OUT)$(SEP) - -RADDR2LINE_TARGET = \ - $(RADDR2LINE_OUT_)raddr2line$(EXEPOSTFIX) - -RADDR2LINE_SOURCES = \ - $(RADDR2LINE_BASE_)raddr2line.c \ - $(RADDR2LINE_BASE_)rsym_common.c - -RADDR2LINE_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(RADDR2LINE_SOURCES:.c=.o)) - -RADDR2LINE_HOST_CFLAGS = $(TOOLS_CFLAGS) - -RADDR2LINE_HOST_LFLAGS = $(TOOLS_LFLAGS) - -.PHONY: raddr2line -raddr2line: $(RADDR2LINE_TARGET) - -$(RADDR2LINE_TARGET): $(RADDR2LINE_OBJECTS) | $(RADDR2LINE_OUT) - $(ECHO_LD) - ${host_gcc} $(RADDR2LINE_OBJECTS) $(RADDR2LINE_HOST_LFLAGS) -o $@ - -$(RADDR2LINE_INT_)raddr2line.o: $(RADDR2LINE_BASE_)raddr2line.c | $(RADDR2LINE_INT) - $(ECHO_CC) - ${host_gcc} $(RADDR2LINE_HOST_CFLAGS) -c $< -o $@ - -#$(RADDR2LINE_INT_)rsym_common.o: $(RADDR2LINE_BASE_)rsym_common.c | $(RADDR2LINE_INT) -# $(ECHO_CC) -# ${host_gcc} $(RADDR2LINE_HOST_CFLAGS) -c $< -o $@ - -.PHONY: raddr2line_clean -raddr2line_clean: - -@$(rm) $(RADDR2LINE_TARGET) $(RADDR2LINE_OBJECTS) 2>$(NUL) -clean: raddr2line_clean diff --git a/reactos/tools/rbuild/automaticdependency.cpp b/reactos/tools/rbuild/automaticdependency.cpp deleted file mode 100644 index ac13ac18c90..00000000000 --- a/reactos/tools/rbuild/automaticdependency.cpp +++ /dev/null @@ -1,560 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * Copyright (C) 2007 Hervé Poussineau - * - * 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. - */ -#include "pch.h" -#include -#include - -#include "rbuild.h" - -/* Read at most this amount of bytes from each file and assume that all #includes are located within this block */ -#define MAX_BYTES_TO_READ 4096 - -using std::string; -using std::vector; -using std::map; - -SourceFile::SourceFile ( AutomaticDependency* automaticDependency, - const Module& module, - const File& file, - SourceFile* parent ) - : file ( file ), - automaticDependency ( automaticDependency), - module ( module ), - youngestLastWriteTime ( 0 ) -{ - if (parent != NULL ) - parents.push_back ( parent ); -} - -void -SourceFile::Close () -{ - buf.resize ( 0 ); - p = end = NULL; -} - -void -SourceFile::Open () -{ - struct stat statbuf; - string filename = file.GetFullPath (); - - Close (); - FILE* f = fopen ( filename.c_str (), "rb" ); - if ( !f ) - throw FileNotFoundException ( filename ); - - if ( fstat ( fileno ( f ), &statbuf ) != 0 ) - { - fclose ( f ); - throw AccessDeniedException ( filename ); - } - lastWriteTime = statbuf.st_mtime; - - unsigned long len = (unsigned long) filelen ( f ); - if ( len > MAX_BYTES_TO_READ ) - len = MAX_BYTES_TO_READ; - buf.resize ( len ); - fread ( &buf[0], 1, len, f ); - fclose ( f ); - p = buf.c_str (); - end = p + len; -} - -void -SourceFile::SkipWhitespace () -{ - while ( p < end && isspace ( *p )) - p++; -} - -bool -SourceFile::ReadInclude ( string& filename, - bool& searchCurrentDirectory, - bool& includeNext) -{ - while ( p < end ) - { - if ( p != buf.c_str () ) - { - /* Go to end of line */ - while ( *p != '\n' && p < end ) - p++; - SkipWhitespace (); - } - if ( ( end - p > 13 ) && ( *p == '#') ) - { - bool include = false; - p++; - SkipWhitespace (); - if ( *p == 'i' ) - { - if ( strncmp ( p, "include ", 8 ) == 0 ) - { - p += 8; - includeNext = false; - include = true; - } - if ( strncmp ( p, "include_next ", 13 ) == 0 ) - { - p += 13; - includeNext = true; - include = true; - } - - if ( include ) - { - SkipWhitespace (); - if ( p < end ) - { - register char ch = *p; - if ( ch == '<' || ch == '"' ) - { - searchCurrentDirectory = (ch == '"'); - p++; - filename.resize ( MAX_PATH ); - int i = 0; - ch = *p; - while ( p < end && ch != '>' && ch != '"' && ch != '\n' ) - { - filename[i++] = *p; - p++; - if ( p < end ) - ch = *p; - } - filename.resize ( i ); - return true; - } - } - } - } - } - p++; - } - filename = ""; - searchCurrentDirectory = false; - includeNext = false; - return false; -} - -bool -SourceFile::IsParentOf ( const SourceFile* parent, - const SourceFile* child ) -{ - size_t i; - for ( i = 0; i < child->parents.size (); i++ ) - { - if ( child->parents[i] != NULL ) - { - if ( child->parents[i] == parent ) - return true; - } - } - for ( i = 0; i < child->parents.size (); i++ ) - { - if ( child->parents[i] != NULL ) - { - if ( IsParentOf ( parent, - child->parents[i] ) ) - return true; - } - } - return false; -} - -bool -SourceFile::IsIncludedFrom ( const File& file ) -{ - SourceFile* sourceFile = automaticDependency->RetrieveFromCache ( file ); - if ( sourceFile == NULL ) - return false; - - if ( sourceFile == this ) - return true; - - return IsParentOf ( sourceFile, - this ); -} - -bool -SourceFile::CanProcessFile ( const File& file ) -{ - string extension = GetExtension ( file.file ); - std::transform ( extension.begin (), extension.end (), extension.begin (), tolower ); - if ( extension == ".h" ) - return true; - if ( extension == ".c" ) - return true; - if ( extension == ".cpp" ) - return true; - if ( extension == ".rc" ) - return true; - if ( extension == ".s" ) - return true; - if ( extension == ".nls" ) - return true; - if ( extension == ".idl" ) - return true; - if ( automaticDependency->project.configuration.Verbose ) - printf ( "Skipping file %s, as its extension is not recognized\n", file.file.name.c_str () ); - return false; -} - -SourceFile* -SourceFile::ParseFile ( const File& file ) -{ - if ( !CanProcessFile ( file ) ) - return NULL; - - if ( IsIncludedFrom ( file ) ) - return NULL; - - SourceFile* sourceFile = automaticDependency->RetrieveFromCacheOrParse ( module, - file, - this ); - return sourceFile; -} - -void -SourceFile::Parse () -{ - Open (); - while ( p < end ) - { - string includedFilename; - - bool searchCurrentDirectory; - bool includeNext; - while ( ReadInclude ( includedFilename, - searchCurrentDirectory, - includeNext ) ) - { - File resolvedFile ( SourceDirectory, "", "", false, "", false ) ; - bool locatedFile = automaticDependency->LocateIncludedFile ( this, - module, - includedFilename, - searchCurrentDirectory, - includeNext, - resolvedFile ); - if ( locatedFile ) - { - SourceFile* sourceFile = ParseFile ( *new File ( resolvedFile ) ); - if ( sourceFile != NULL ) - files.push_back ( sourceFile ); - } else if ( automaticDependency->project.configuration.Verbose ) - printf ( "Unable to find %c%s%c, included in %s%c%s\n", - searchCurrentDirectory ? '\"' : '<', - includedFilename.c_str (), - searchCurrentDirectory ? '\"' : '>', - this->file.file.relative_path.c_str (), - cSep, - this->file.file.name.c_str () ); - } - p++; - } - Close (); -} - -AutomaticDependency::AutomaticDependency ( const Project& project ) - : project ( project ) -{ -} - -AutomaticDependency::~AutomaticDependency () -{ - std::map::iterator theIterator; - for ( theIterator = sourcefile_map.begin (); theIterator != sourcefile_map.end (); theIterator++ ) - delete theIterator->second; -} - -void -AutomaticDependency::ParseFiles () -{ - for( std::map::const_iterator p = project.modules.begin(); p != project.modules.end(); ++ p ) - ParseFiles ( *p->second ); -} - -void -AutomaticDependency::GetModuleFiles ( const Module& module, - vector& files ) const -{ - for ( size_t i = 0; i < module.non_if_data.files.size (); i++ ) - files.push_back ( module.non_if_data.files[i] ); - - /* FIXME: Collect files in IFs here */ - - if ( module.pch != NULL ) - { - const FileLocation& pch = *module.pch->file; - File *file = new File ( pch.directory, pch.relative_path, pch.name , false, "", true ); - files.push_back ( file ); - } -} - -void -AutomaticDependency::ParseFiles ( const Module& module ) -{ - vector files; - GetModuleFiles ( module, files ); - for ( size_t i = 0; i < files.size (); i++ ) - ParseFile ( module, *files[i] ); -} - -void -AutomaticDependency::ParseFile ( const Module& module, - const File& file ) -{ - RetrieveFromCacheOrParse ( module, - file, - NULL ); -} - -bool -AutomaticDependency::LocateIncludedFile ( const FileLocation& directory, - const string& includedFilename ) -{ - string path; - switch ( directory.directory ) - { - case SourceDirectory: - path = ""; - break; - case IntermediateDirectory: - path = Environment::GetIntermediatePath (); - break; - case OutputDirectory: - path = Environment::GetOutputPath (); - break; - default: - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %d.", - directory.directory ); - } - if ( directory.relative_path.length () > 0 ) - { - if ( path.length () > 0 ) - path += sSep; - path += directory.relative_path; - } - - string normalizedFilename = NormalizeFilename ( path + sSep + includedFilename ); - FILE* f = fopen ( normalizedFilename.c_str (), "rb" ); - if ( f != NULL ) - { - fclose ( f ); - return true; - } - return false; -} - -void -AutomaticDependency::GetIncludeDirectories ( vector& includes, - const Module& module ) -{ - size_t i; - for ( i = 0; i < module.non_if_data.includes.size (); i++ ) - includes.push_back( module.non_if_data.includes[i] ); - for ( i = 0; i < module.project.non_if_data.includes.size (); i++ ) - includes.push_back( module.project.non_if_data.includes[i] ); -} - -bool -AutomaticDependency::LocateIncludedFile ( SourceFile* sourceFile, - const Module& module, - const string& includedFilename, - bool searchCurrentDirectory, - bool includeNext, - File& resolvedFile ) -{ - vector includes; - string includedFileDir; - Include currentDirectory ( module.project, SourceDirectory, sourceFile->file.file.relative_path ); - if ( searchCurrentDirectory ) - includes.push_back ( ¤tDirectory ); - GetIncludeDirectories ( includes, module ); - - for ( size_t j = 0; j < includes.size (); j++ ) - { - Include& include = *includes[j]; - if ( LocateIncludedFile ( *include.directory, - includedFilename ) ) - { - if ( includeNext && - include.directory->directory == sourceFile->file.file.directory && - include.directory->relative_path == sourceFile->file.file.relative_path ) - { - includeNext = false; - continue; - } - resolvedFile.file.directory = include.directory->directory; - size_t index = includedFilename.find_last_of ( "/\\" ); - if ( index == string::npos ) - { - resolvedFile.file.name = includedFilename; - resolvedFile.file.relative_path = include.directory->relative_path; - } - else - { - resolvedFile.file.relative_path = NormalizeFilename ( - include.directory->relative_path + sSep + - includedFilename.substr ( 0, index ) ); - resolvedFile.file.name = includedFilename.substr ( index + 1 ); - } - return true; - } - } - return false; -} - -SourceFile* -AutomaticDependency::RetrieveFromCacheOrParse ( const Module& module, - const File& file, - SourceFile* parentSourceFile ) -{ - string filename = file.GetFullPath(); - SourceFile* sourceFile = sourcefile_map[filename]; - if ( sourceFile == NULL ) - { - sourceFile = new SourceFile ( this, - module, - file, - parentSourceFile ); - sourcefile_map[filename] = sourceFile; - sourceFile->Parse (); - } - else if ( parentSourceFile != NULL ) - sourceFile->parents.push_back ( parentSourceFile ); - return sourceFile; -} - -SourceFile* -AutomaticDependency::RetrieveFromCache ( const File& file ) -{ - string filename = file.GetFullPath(); - return sourcefile_map[filename]; -} - -void -AutomaticDependency::CheckAutomaticDependencies ( bool verbose ) -{ - ParseFiles (); - for( std::map::const_iterator p = project.modules.begin(); p != project.modules.end(); ++ p ) - { - Module& module = *p->second; - CheckAutomaticDependencies ( module, verbose ); - } -} - -void -AutomaticDependency::GetModulesToCheck ( Module& module, vector& modules ) -{ - modules.push_back ( &module ); - for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ ) - { - Library& library = *module.non_if_data.libraries[i]; - if ( library.importedModule->type != ObjectLibrary ) - break; - modules.push_back ( library.importedModule ); - } - - /* FIXME: Collect libraries in IFs here */ -} - -void -AutomaticDependency::CheckAutomaticDependenciesForModule ( Module& module, - bool verbose ) -{ - size_t mi; - vector modules; - GetModulesToCheck ( module, modules ); - for ( mi = 0; mi < modules.size (); mi++ ) - ParseFiles ( *modules[mi] ); - for ( mi = 0; mi < modules.size (); mi++ ) - CheckAutomaticDependencies ( *modules[mi], verbose ); -} - -void -AutomaticDependency::CheckAutomaticDependencies ( const Module& module, - bool verbose ) -{ - struct utimbuf timebuf; - vector files; - GetModuleFiles ( module, files ); - for ( size_t fi = 0; fi < files.size (); fi++ ) - { - File& file = *files[fi]; - SourceFile* sourceFile = RetrieveFromCache ( file ); - if ( sourceFile != NULL ) - { - CheckAutomaticDependenciesForFile ( sourceFile ); - assert ( sourceFile->youngestLastWriteTime != 0 ); - if ( sourceFile->youngestLastWriteTime > sourceFile->lastWriteTime ) - { - if ( verbose ) - { - printf ( "Marking %s%c%s for rebuild due to younger file %s%c%s\n", - sourceFile->file.file.relative_path.c_str (), - cSep, sourceFile->file.file.name.c_str (), - sourceFile->youngestFile->file.file.relative_path.c_str (), - cSep, sourceFile->youngestFile->file.file.name.c_str () ); - } - timebuf.actime = sourceFile->youngestLastWriteTime; - timebuf.modtime = sourceFile->youngestLastWriteTime; - utime ( sourceFile->file.GetFullPath ().c_str (), - &timebuf ); - } - } - } -} - -void -AutomaticDependency::CheckAutomaticDependenciesForFile ( SourceFile* sourceFile ) -{ - if ( sourceFile->youngestLastWriteTime > 0 ) - return; - - if ( sourceFile->files.size () == 0 ) - { - sourceFile->youngestLastWriteTime = sourceFile->lastWriteTime; - sourceFile->youngestFile = sourceFile; - return; - } - - for ( size_t i = 0; i < sourceFile->files.size (); i++ ) - { - SourceFile* childSourceFile = sourceFile->files[i]; - - CheckAutomaticDependenciesForFile ( childSourceFile ); - if ( ( childSourceFile->youngestLastWriteTime > sourceFile->youngestLastWriteTime ) || - ( childSourceFile->lastWriteTime > sourceFile->youngestLastWriteTime ) ) - { - if ( childSourceFile->youngestLastWriteTime > childSourceFile->lastWriteTime ) - { - sourceFile->youngestLastWriteTime = childSourceFile->youngestLastWriteTime; - sourceFile->youngestFile = childSourceFile->youngestFile; - } - else - { - sourceFile->youngestLastWriteTime = childSourceFile->lastWriteTime; - sourceFile->youngestFile = childSourceFile; - } - } - } -} diff --git a/reactos/tools/rbuild/autoregister.cpp b/reactos/tools/rbuild/autoregister.cpp deleted file mode 100644 index 4e56cf15c16..00000000000 --- a/reactos/tools/rbuild/autoregister.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" - -#include "rbuild.h" - -using std::string; - -AutoRegister::AutoRegister ( const Project& project_, - const Module* module_, - const XMLElement& node_ ) - : XmlNode(project_, node_), - module(module_) -{ - Initialize(); -} - -bool -AutoRegister::IsSupportedModuleType ( ModuleType type ) -{ - if ( type == Win32DLL || - type == Win32OCX ) - { - return true; - } - else - { - return false; - } -} - -AutoRegisterType -AutoRegister::GetAutoRegisterType( const string& type ) -{ - if ( type == "DllRegisterServer" ) - return DllRegisterServer; - if ( type == "DllInstall" ) - return DllInstall; - if ( type == "Both" ) - return Both; - throw XMLInvalidBuildFileException ( - node.location, - " type attribute must be DllRegisterServer, DllInstall or Both." ); -} - -void -AutoRegister::Initialize () -{ - if ( !IsSupportedModuleType ( module->type ) ) - { - throw XMLInvalidBuildFileException ( - node.location, - " is not applicable for this module type." ); - } - - const XMLAttribute* att = node.GetAttribute ( "infsection", true ); - if ( !att ) - { - throw XMLInvalidBuildFileException ( - node.location, - " must have a 'infsection' attribute." ); - } - infSection = att->value; - - att = node.GetAttribute ( "type", true ); - if ( !att ) - { - throw XMLInvalidBuildFileException ( - node.location, - " must have a 'type' attribute." ); - } - type = GetAutoRegisterType ( att->value ); -} diff --git a/reactos/tools/rbuild/backend/backend.cpp b/reactos/tools/rbuild/backend/backend.cpp deleted file mode 100644 index c7227684553..00000000000 --- a/reactos/tools/rbuild/backend/backend.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "../pch.h" - -#include "../rbuild.h" -#include "backend.h" - -using std::string; -using std::vector; -using std::map; - -map* -Backend::Factory::factories = NULL; -int -Backend::Factory::ref = 0; - -Backend::Factory::Factory ( const std::string& name_, const std::string& description_ ) -{ - string name(name_); - strlwr ( &name[0] ); - if ( !ref++ ) - factories = new map; - (*factories)[name] = this; - m_name = name; - m_description = description_; -} - -Backend::Factory::~Factory () -{ - if ( !--ref ) - { - delete factories; - factories = NULL; - } -} - -/*static*/ Backend* -Backend::Factory::Create ( const string& name, - Project& project, - Configuration& configuration ) -{ - string sname ( name ); - strlwr ( &sname[0] ); - if ( !factories || !factories->size () ) - throw InvalidOperationException ( __FILE__, - __LINE__, - "No registered factories" ); - Backend::Factory* f = (*factories)[sname]; - if ( !f ) - { - throw UnknownBackendException ( sname ); - return NULL; - } - return (*f) ( project, configuration ); -} - -Backend::Backend ( Project& project, - Configuration& configuration ) - : ProjectNode ( project ), - configuration ( configuration ) -{ -} - -Backend::~Backend() -{ -} - -string -Backend::GetFullPath ( const FileLocation& file ) const -{ - string directory; - switch ( file.directory ) - { - case SourceDirectory: - directory = ""; - break; - case IntermediateDirectory: - directory = Environment::GetIntermediatePath (); - break; - case OutputDirectory: - directory = Environment::GetOutputPath (); - break; - case InstallDirectory: - directory = Environment::GetInstallPath (); - break; - default: - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %d.", - file.directory ); - } - - if ( file.relative_path.length () > 0 ) - { - if ( directory.length () > 0 ) - directory += sSep; - directory += file.relative_path; - } - return directory; -} - -string -Backend::GetFullName ( const FileLocation& file ) const -{ - string directory = GetFullPath ( file ); - - if ( directory.length () > 0 ) - directory += sSep; - - return directory + file.name; -} diff --git a/reactos/tools/rbuild/backend/backend.h b/reactos/tools/rbuild/backend/backend.h deleted file mode 100644 index 1b01d9d2c87..00000000000 --- a/reactos/tools/rbuild/backend/backend.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef __BACKEND_H -#define __BACKEND_H - -#include "../rbuild.h" - -class Backend; - -typedef Backend* BackendFactory ( Project& project, - Configuration& configuration ); - -class Backend -{ -public: - class Factory - { - static std::map* factories; - static int ref; - std::string m_name; - std::string m_description; - - protected: - - Factory ( const std::string& name_, const std::string& description_ ); - virtual ~Factory(); - - virtual Backend* operator() ( Project&, - Configuration& configuration ) = 0; - - public: - static Backend* Create ( const std::string& name, - Project& project, - Configuration& configuration ); - - static std::map::iterator map_begin(void) - { - return factories->begin(); - } - - static std::map::iterator map_end(void) - { - return factories->end(); - } - - const char *Name(void) { return m_name.c_str(); } - const char *Description(void) { return m_description.c_str(); } - }; - -protected: - Backend ( Project& project, - Configuration& configuration ); - -public: - virtual ~Backend(); - - virtual std::string GetFullName ( const FileLocation& file ) const; - virtual std::string GetFullPath ( const FileLocation& file ) const; - virtual void Process () = 0; - Project& ProjectNode; - Configuration& configuration; -}; - -#endif /* __BACKEND_H */ diff --git a/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp b/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp deleted file mode 100644 index 2a79d3a9ce0..00000000000 --- a/reactos/tools/rbuild/backend/codeblocks/codeblocks.cpp +++ /dev/null @@ -1,912 +0,0 @@ -/* - * Copyright (C) 2006 Christoph von Wittich - * - * 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. - */ -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include -#include - -#include - -#include "codeblocks.h" -#include "../mingw/mingw.h" - -using std::string; -using std::vector; -using std::ifstream; - -#ifdef OUT -#undef OUT -#endif//OUT - -#define IsStaticLibrary( module ) ( ( module.type == StaticLibrary ) || ( module.type == HostStaticLibrary ) ) - -static class CBFactory : public Backend::Factory -{ - public: - - CBFactory() : Factory("CB", "Code::Blocks") {} - Backend *operator() (Project &project, - Configuration& configuration) - { - return new CBBackend(project, configuration); - } - -} factory; - - -CBBackend::CBBackend(Project &project, - Configuration& configuration) : Backend(project, configuration) -{ - m_unitCount = 0; -} - -void CBBackend::Process() -{ - - while ( m_configurations.size () > 0 ) - { - const CBConfiguration* cfg = m_configurations.back(); - m_configurations.pop_back(); - delete cfg; - } - - m_configurations.push_back ( new CBConfiguration( Debug )); - m_configurations.push_back ( new CBConfiguration( Release )); - - string filename_wrkspace ( ProjectNode.name ); - filename_wrkspace += "_auto.workspace"; - - printf ( "Creating Code::Blocks workspace: %s\n", filename_wrkspace.c_str() ); - - ProcessModules(); - m_wrkspaceFile = fopen ( filename_wrkspace.c_str(), "wb" ); - - if ( !m_wrkspaceFile ) - { - printf ( "Could not create file '%s'.\n", filename_wrkspace.c_str() ); - return; - } - - _generate_workspace ( m_wrkspaceFile ); - - fclose ( m_wrkspaceFile ); - printf ( "Done.\n" ); -} - -void CBBackend::ProcessModules() -{ - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module &module = *p->second; - MingwAddImplicitLibraries( module ); - _generate_cbproj ( module ); - } -} - -static std::string -GetExtension ( const std::string& filename ) -{ - size_t index = filename.find_last_of ( '/' ); - if (index == string::npos) index = 0; - string tmp = filename.substr( index, filename.size() - index ); - size_t ext_index = tmp.find_last_of( '.' ); - if (ext_index != string::npos) - return filename.substr ( index + ext_index, filename.size() ); - return ""; -} - -static bool FileExists(string &filename) -{ - ifstream file(filename.c_str()); - - if(!file.is_open()) - return false; - - file.close(); - return true; -} - -void CBBackend::ProcessFile(string &filepath) -{ - // Remove the .\ at the start of the filenames - if ( filepath[0] == '.' && strchr ( "/\\", filepath[1] ) ) - filepath.erase(0, 2); - - if(!FileExists(filepath)) - return; - - // Change the \ to / - for(size_t i = 0; i < filepath.length(); i++) - { - if(filepath[i] == '\\') - filepath[i] = '/'; - } - - // Remove the filename from the path - string folder = ""; - - size_t pos = filepath.rfind(string("/"), filepath.length() - 1); - - if(pos != string::npos) - { - folder = filepath; - folder.erase(pos, folder.length() - pos); - } - - FileUnit fileUnit; - fileUnit.filename = filepath; - fileUnit.folder = folder; - - m_fileUnits.push_back(fileUnit); - - if(folder != "") - AddFolders(folder); - - m_unitCount++; -} - -bool CBBackend::CheckFolderAdded(string &folder) -{ - for(size_t i = 0; i < m_folders.size(); i++) - { - if(m_folders[i] == folder) - return true; - } - - return false; -} - -void CBBackend::AddFolders(string &folder) -{ - // Check if this folder was already added. true if it was, false otherwise. - if(CheckFolderAdded(folder)) - return; - - m_folders.push_back(folder); - - size_t pos = folder.rfind(string("/"), folder.length() - 1); - - if(pos == string::npos) - return; - - folder.erase(pos, folder.length() - pos); - AddFolders(folder); -} - -void CBBackend::OutputFolders() -{ -#if 0 - m_devFile << "Folders="; - - for(size_t i = 0; i < m_folders.size(); i++) - { - if(i > 0) - m_devFile << ","; - - m_devFile << m_folders[i]; - } -#endif -} - -std::string -CBBackend::CbpFileName ( const Module& module ) const -{ - return DosSeparator( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_auto.cbp" ) - ); -} - -std::string -CBBackend::LayoutFileName ( const Module& module ) const -{ - return DosSeparator( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_auto.layout" ) - ); -} - -std::string -CBBackend::DependFileName ( const Module& module ) const -{ - return DosSeparator( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_auto.depend" ) - ); -} - -void -CBBackend::_get_object_files ( const Module& module, vector& out) const -{ - string basepath = module.output->relative_path; - size_t i; - string intenv = Environment::GetIntermediatePath () + "\\" + basepath + "\\"; - string outenv = Environment::GetOutputPath () + "\\" + basepath + "\\"; - - vector cfgs; - - if ( configuration.UseConfigurationInPath ) - { - cfgs.push_back ( intenv + "Debug" ); - cfgs.push_back ( intenv + "Release" ); - cfgs.push_back ( outenv + "Debug" ); - cfgs.push_back ( outenv + "Release" ); - } - else - { - cfgs.push_back ( intenv ); - cfgs.push_back ( outenv ); - } - - vector ifs_list; - ifs_list.push_back ( &module.project.non_if_data ); - ifs_list.push_back ( &module.non_if_data ); - while ( ifs_list.size () ) - { - const IfableData& data = *ifs_list.back(); - ifs_list.pop_back(); - const vector& files = data.files; - for ( i = 0; i < files.size (); i++ ) - { - string file = files[i]->file.relative_path + sSep + files[i]->file.name; - string::size_type pos = file.find_last_of ("\\"); - if ( pos != string::npos ) - file.erase ( 0, pos+1 ); - if ( !stricmp ( Right(file,3).c_str(), ".rc" ) ) - file = ReplaceExtension ( file, ".res" ); - else - file = ReplaceExtension ( file, ".obj" ); - for ( size_t j = 0; j < cfgs.size () / 2; j++ ) - out.push_back ( cfgs[j] + "\\" + file ); - } - - } -} - -void -CBBackend::_clean_project_files ( void ) -{ - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - vector out; - printf("Cleaning project %s %s\n", module.name.c_str (), module.output->relative_path.c_str () ); - - string basepath = module.output->relative_path; - remove ( CbpFileName ( module ).c_str () ); - remove ( DependFileName ( module ).c_str () ); - remove ( LayoutFileName ( module ).c_str () ); - - _get_object_files ( module, out ); - for ( size_t j = 0; j < out.size (); j++) - { - //printf("Cleaning file %s\n", out[j].c_str () ); - remove ( out[j].c_str () ); - } - } - - string filename_wrkspace = ProjectNode.name + ".workspace"; - - remove ( filename_wrkspace.c_str () ); -} - -void -CBBackend::_generate_workspace ( FILE* OUT ) -{ - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\t\r\n" ); - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - - if ((module.type != Iso) && - (module.type != LiveIso) && - (module.type != IsoRegTest) && - (module.type != LiveIsoRegTest)) - { - std::string Cbp_file = CbpFileName ( module ); - fprintf ( OUT, "\t\t\r\n", Cbp_file.c_str()); - - /* dependencies */ - vector ifs_list; - ifs_list.push_back ( &module.project.non_if_data ); - ifs_list.push_back ( &module.non_if_data ); - while ( ifs_list.size() ) - { - const IfableData& data = *ifs_list.back(); - ifs_list.pop_back(); - const vector& libs = data.libraries; - for ( size_t j = 0; j < libs.size(); j++ ) - fprintf ( OUT, "\t\t\t\r\n", libs[j]->importedModule->output->relative_path.c_str(), libs[j]->name.c_str() ); - } - fprintf ( OUT, "\t\t\r\n" ); - } - } - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\r\n" ); -} - -void -CBBackend::_generate_cbproj ( const Module& module ) -{ - - size_t i; - - string cbproj_file = CbpFileName(module); - string outdir; - string intdir; - string path_basedir = module.GetPathToBaseDir (); - string intenv = Environment::GetIntermediatePath (); - string outenv = Environment::GetOutputPath (); - string module_type = GetExtension(*module.output); - string cbproj_path = module.output->relative_path; - string CompilerVar; - string baseaddr; - string windres_defines; - string widl_options; - string project_linker_flags = "-Wl,--enable-stdcall-fixup "; - project_linker_flags += GenerateProjectLinkerFlags(); - - bool lib = (module.type == ObjectLibrary) || - (module.type == RpcClient) || - (module.type == RpcServer) || - (module.type == RpcProxy) || - (module_type == ".lib") || - (module_type == ".a"); - bool dll = (module_type == ".dll") || (module_type == ".cpl"); - bool exe = (module_type == ".exe") || (module_type == ".scr"); - bool sys = (module_type == ".sys"); - - vector source_files, resource_files, includes, libraries, libpaths; - vector header_files, common_defines, compiler_flags; - vector vars, values; - - /* do not create project files for these targets - use virtual targets instead */ - switch (module.type) - { - case Iso: - case LiveIso: - case IsoRegTest: - case LiveIsoRegTest: - return; - default: - break; - } - - compiler_flags.push_back ( "-Wall" ); - - // Always force disabling of sibling calls optimisation for GCC - // (TODO: Move to version-specific once this bug is fixed in GCC) - compiler_flags.push_back ( "-fno-optimize-sibling-calls" ); - - if ( module.pch != NULL ) - { - string pch_path = Path::RelativeFromDirectory ( - module.pch->file->name, - module.output->relative_path ); - - header_files.push_back ( pch_path ); - } - - if ( intenv == "obj-i386" ) - intdir = path_basedir + "obj-i386"; /* append relative dir from project dir */ - else - intdir = intenv; - - if ( outenv == "output-i386" ) - outdir = path_basedir + "output-i386"; - else - outdir = outenv; - - vector ifs_list; - ifs_list.push_back ( &module.project.non_if_data ); - ifs_list.push_back ( &module.non_if_data ); - while ( ifs_list.size() ) - { - const IfableData& data = *ifs_list.back(); - ifs_list.pop_back(); - const vector& files = data.files; - for ( i = 0; i < files.size(); i++ ) - { - string fullpath = files[i]->file.relative_path + sSep + files[i]->file.name; - string file = string(".") + &fullpath[cbproj_path.size()]; - - if ( !stricmp ( Right(file,3).c_str(), ".rc" ) ) - resource_files.push_back ( file ); - else - source_files.push_back ( file ); - } - const vector& incs = data.includes; - for ( i = 0; i < incs.size(); i++ ) - { - string path = Path::RelativeFromDirectory ( - incs[i]->directory->relative_path, - module.output->relative_path ); - - includes.push_back ( path ); - widl_options += "-I" + path + " "; - } - const vector& libs = data.libraries; - for ( i = 0; i < libs.size(); i++ ) - { - string libpath = intdir + "\\" + libs[i]->importedModule->output->relative_path; - libraries.push_back ( libs[i]->name ); - libpaths.push_back ( libpath ); - } - const vector& cflags = data.compilerFlags; - for ( i = 0; i < cflags.size(); i++ ) - { - compiler_flags.push_back ( cflags[i]->flag ); - } - const vector& defs = data.defines; - for ( i = 0; i < defs.size(); i++ ) - { - if ( defs[i]->value[0] ) - { - const string& escaped = _replace_str(defs[i]->value, "\"","""); - common_defines.push_back( defs[i]->name + "=" + escaped ); - windres_defines += "-D" + defs[i]->name + "=" + escaped + " "; - } - else - { - common_defines.push_back( defs[i]->name ); - windres_defines += "-D" + defs[i]->name + " "; - } - } - /*const vector& variables = data.properties; - for ( i = 0; i < variables.size(); i++ ) - { - vars.push_back( variables[i]->name ); - values.push_back( variables[i]->value ); - }*/ - for ( std::map::const_iterator p = data.properties.begin(); p != data.properties.end(); ++ p ) - { - Property& prop = *p->second; - if ( strstr ( module.baseaddress.c_str(), prop.name.c_str() ) ) - baseaddr = prop.value; - } - } - - if ( !module.allowWarnings ) - compiler_flags.push_back ( "-Werror" ); - - if ( IsStaticLibrary ( module ) && module.isStartupLib ) - compiler_flags.push_back ( "-Wno-main" ); - - - FILE* OUT = fopen ( cbproj_file.c_str(), "wb" ); - - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\t\t\r\n" ); - fprintf ( OUT, "\r\n" ); - - - fclose ( OUT ); -} - -CBConfiguration::CBConfiguration ( const OptimizationType optimization, const std::string &name ) -{ - this->optimization = optimization; - if ( name != "" ) - this->name = name; - else - { - if ( optimization == Debug ) - this->name = "Debug"; - else if ( optimization == Release ) - this->name = "Release"; - else - this->name = "Unknown"; - } -} - -std::string -CBBackend::_replace_str(std::string string1, const std::string &find_str, const std::string &replace_str) -{ - std::string::size_type pos = string1.find(find_str, 0); - int intLen = find_str.length(); - - while(std::string::npos != pos) - { - string1.replace(pos, intLen, replace_str); - pos = string1.find(find_str, intLen + pos); - } - - return string1; -} - -std::string -CBBackend::GenerateProjectLinkerFlags() const -{ - std::string lflags; - for ( size_t i = 0; i < ProjectNode.linkerFlags.size (); i++ ) - { - LinkerFlag& linkerFlag = *ProjectNode.linkerFlags[i]; - if ( lflags.length () > 0 ) - lflags += " "; - lflags += linkerFlag.flag; - } - return lflags; -} - -void -CBBackend::MingwAddImplicitLibraries( Module &module ) -{ - Library* pLibrary; - - if ( !module.isDefaultEntryPoint ) - return; - - if ( module.IsDLL () ) - { - //pLibrary = new Library ( module, "__mingw_dllmain" ); - //module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary ); - } - else - { - pLibrary = new Library ( module, module.isUnicode ? "mingw_wmain" : "mingw_main" ); - module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary ); - } - - pLibrary = new Library ( module, "mingw_common" ); - module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin() + 1, pLibrary ); - - if ( module.name != "msvcrt" ) - { - // always link in msvcrt to get the basic routines - pLibrary = new Library ( module, "msvcrt" ); - module.non_if_data.libraries.push_back ( pLibrary ); - } -} - -const Property* -CBBackend::_lookup_property ( const Module& module, const std::string& name ) const -{ - std::map::const_iterator p; - - /* Check local values */ - p = module.non_if_data.properties.find(name); - - if ( p != module.non_if_data.properties.end() ) - return p->second; - - // TODO FIXME - should we check local if-ed properties? - p = module.project.non_if_data.properties.find(name); - - if ( p != module.project.non_if_data.properties.end() ) - return p->second; - - // TODO FIXME - should we check global if-ed properties? - return NULL; -} - -bool -CBBackend::IsWineModule ( const Module& module ) const -{ - if ( module.importLibrary == NULL) - return false; - - size_t index = module.importLibrary->source->name.rfind ( ".spec.def" ); - return ( index != string::npos ); -} diff --git a/reactos/tools/rbuild/backend/codeblocks/codeblocks.h b/reactos/tools/rbuild/backend/codeblocks/codeblocks.h deleted file mode 100644 index 22d03122062..00000000000 --- a/reactos/tools/rbuild/backend/codeblocks/codeblocks.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2005 Trevor McCort - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef __CODEBLOCKS_H__ -#define __CODEBLOCKS_H__ - -#include -#include -#include - -#include "../backend.h" - -class FileUnit -{ - public: - std::string filename; - std::string folder; -}; - -enum OptimizationType -{ - Debug, - Release -}; - -class CBConfiguration -{ - public: - CBConfiguration(const OptimizationType optimization, - const std::string &name = ""); - virtual ~CBConfiguration() {} - std::string name; - OptimizationType optimization; -}; - -class CBBackend : public Backend -{ - public: - - CBBackend(Project &project, - Configuration& configuration); - virtual ~CBBackend() {} - - virtual void Process(); - - private: - - void ProcessModules(); - void ProcessFile(std::string &filename); - - bool CheckFolderAdded(std::string &folder); - void AddFolders(std::string &folder); - - void OutputFolders(); - void OutputFileUnits(); - - std::string CbpFileName ( const Module& module ) const; - std::string LayoutFileName ( const Module& module ) const; - std::string DependFileName ( const Module& module ) const; - std::string GenerateProjectLinkerFlags () const; - void MingwAddImplicitLibraries( Module &module ); - bool IsWineModule ( const Module& module ) const; - std::vector m_configurations; - - std::vector m_fileUnits; - std::vector m_folders; - - int m_unitCount; - - FILE* m_wrkspaceFile; - - std::string _replace_str( - std::string string1, - const std::string &find_str, - const std::string &replace_str); - - void _generate_workspace ( FILE* OUT ); - void _generate_cbproj ( const Module& module ); - - void _clean_project_files ( void ); - void _get_object_files ( const Module& module, std::vector& out ) const; - void _install_files ( const std::string& vcdir, const std::string& config ); - bool _copy_file ( const std::string& inputname, const std::string& targetname ) const; - const Property* _lookup_property ( const Module& module, const std::string& name ) const; -}; - - -#endif // __MSVC_H__ - diff --git a/reactos/tools/rbuild/backend/dependencymap/dependencymap.cpp b/reactos/tools/rbuild/backend/dependencymap/dependencymap.cpp deleted file mode 100644 index df6b23afb2f..00000000000 --- a/reactos/tools/rbuild/backend/dependencymap/dependencymap.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (C) 2007 Christoph von Wittich - * - * 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. - */ -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include -#include -#include - -#include - -#include "dependencymap.h" -#include "../mingw/mingw.h" - -using std::string; -using std::vector; -using std::map; -using std::ifstream; - -#ifdef OUT -#undef OUT -#endif//OUT - - -static class DepMapFactory : public Backend::Factory -{ - public: - - DepMapFactory() : Factory("DepMap", "Dependency Map") {} - Backend *operator() (Project &project, - Configuration& configuration) - { - return new DepMapBackend(project, configuration); - } - -} factory; - - -DepMapBackend::DepMapBackend(Project &project, - Configuration& configuration) : Backend(project, configuration) -{ - -} - -void DepMapBackend::Process() -{ - string filename_depmap ( "dependencymap.xml" ); - printf ( "Creating dependecy map: %s\n", filename_depmap.c_str() ); - - m_DepMapFile = fopen ( filename_depmap.c_str(), "wb" ); - - if ( !m_DepMapFile ) - { - printf ( "Could not create file '%s'.\n", filename_depmap.c_str() ); - return; - } - - _generate_depmap ( m_DepMapFile ); - - fclose ( m_DepMapFile ); - printf ( "Done.\n" ); -} - -void -DepMapBackend::_clean_project_files ( void ) -{ - remove ( "dependencymap.xml" ); -} - - -void -DepMapBackend::_generate_depmap ( FILE* OUT ) -{ - /* add dependencies */ - - typedef map ModuleMap; - ModuleMap module_map; - - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - if ((module.type != Iso) && - (module.type != LiveIso) && - (module.type != IsoRegTest) && - (module.type != LiveIsoRegTest)) - { - vector ifs_list; - ifs_list.push_back ( &module.project.non_if_data ); - ifs_list.push_back ( &module.non_if_data ); - - module_data * current_data; - ModuleMap::iterator mod_it = module_map.find ( module.name ); - if (mod_it != module_map.end ()) - { - current_data = mod_it->second; - } - else - { - current_data = new module_data(); - if (current_data) - { - module_map.insert (std::make_pair(module.name, current_data)); - } - } - while ( ifs_list.size() ) - { - const IfableData& data = *ifs_list.back(); - ifs_list.pop_back(); - const vector& libs = data.libraries; - for ( size_t j = 0; j < libs.size(); j++ ) - { - ModuleMap::iterator it = module_map.find ( libs[j]->name ); - - if ( it != module_map.end ()) - { - module_data * data = it->second; - data->references.push_back ( module.name ); - } - else - { - module_data * data = new module_data(); - if ( data ) - { - data->references.push_back ( module.name ); - } - module_map.insert ( std::make_pair( libs[j]->name, data ) ); - } - current_data->libraries.push_back ( libs[j]->name ); - } - } - } - } - - fprintf ( m_DepMapFile, "\r\n" ); - fprintf ( m_DepMapFile, "\r\n" ); - fprintf ( m_DepMapFile, "\r\n" ); - - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - - ModuleMap::iterator it = module_map.find ( module.name ); - if ( it != module_map.end () ) - { - module_data * data = it->second; - - - - fprintf ( m_DepMapFile, "\t\r\n" ); - fprintf ( m_DepMapFile, "\t\t%s\r\n", module.name.c_str () ); - fprintf ( m_DepMapFile, "\t\t%s\r\n", module.output->relative_path.c_str () ); - fprintf ( m_DepMapFile, "\t\t%u\r\n", (unsigned int)data->references.size () ); - fprintf ( m_DepMapFile, "\t\t%u\r\n", (unsigned int)data->libraries.size () ); -#if 0 - if ( data->references.size () ) - { - fprintf ( m_DepMapFile, "\t\r\n" ); - for ( size_t j = 0; j < data->references.size (); j++ ) - { - fprintf ( m_DepMapFile, "\t\t\r\n", data->references[j].c_str () ); - } - fprintf ( m_DepMapFile, "\t\r\n" ); - } - - if ( data->libraries.size () ) - { - fprintf ( m_DepMapFile, "\t\r\n" ); - for ( size_t j = 0; j < data->libraries.size (); j++ ) - { - fprintf ( m_DepMapFile, "\t\t\r\n", data->libraries[j].c_str () ); - } - fprintf ( m_DepMapFile, "\t\r\n" ); - } -#endif - fprintf ( m_DepMapFile, "\t\r\n" ); - } - } - - fprintf ( m_DepMapFile, "" ); -} - - -DepMapConfiguration::DepMapConfiguration ( const std::string &name ) -{ - /* nothing to do here */ -} - - diff --git a/reactos/tools/rbuild/backend/dependencymap/dependencymap.h b/reactos/tools/rbuild/backend/dependencymap/dependencymap.h deleted file mode 100644 index c40b2004713..00000000000 --- a/reactos/tools/rbuild/backend/dependencymap/dependencymap.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2007 Christoph von Wittich - * - * 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. - */ -#ifndef __DEPMAP_H__ -#define __DEPMAP_H__ - -#include -#include -#include - -#include "../backend.h" - -class DepMapConfiguration -{ - public: - DepMapConfiguration(const std::string &name = ""); - virtual ~DepMapConfiguration() {} - std::string name; -}; - -class DepMapBackend : public Backend -{ - public: - - DepMapBackend(Project &project, - Configuration& configuration); - virtual ~DepMapBackend() {} - - virtual void Process(); - - private: - - FILE* m_DepMapFile; - - std::vector m_configurations; - void _generate_depmap ( FILE* OUT ); - void _clean_project_files ( void ); - - struct module_data - { - std::vector libraries; - std::vector references; - - module_data() - {} - ~module_data() - {} - }; - -}; - - -#endif // __DEPMAP_H__ - diff --git a/reactos/tools/rbuild/backend/devcpp/devcpp.cpp b/reactos/tools/rbuild/backend/devcpp/devcpp.cpp deleted file mode 100644 index cd155bf9cd3..00000000000 --- a/reactos/tools/rbuild/backend/devcpp/devcpp.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (C) 2005 Trevor McCort - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include - -#include "devcpp.h" - -using namespace std; - -static class DevCppFactory : public Backend::Factory -{ - public: - - DevCppFactory() : Factory("devcpp", "Dev C++") {} - Backend *operator() (Project &project, - Configuration& configuration) - { - return new DevCppBackend(project, configuration); - } - -} factory; - - -DevCppBackend::DevCppBackend(Project &project, - Configuration& configuration) : Backend(project, configuration) -{ - m_unitCount = 0; -} - -void DevCppBackend::Process() -{ - string filename = ProjectNode.name + ".dev"; - - cout << "Creating Dev-C++ project: " << filename << endl; - - ProcessModules(); - - m_devFile.open(filename.c_str()); - - if(!m_devFile.is_open()) - { - cout << "Could not open file." << endl; - return; - } - - m_devFile << "[Project]" << endl; - - m_devFile << "FileName=" << filename << endl - << "Name=" << ProjectNode.name << endl - << "UnitCount=" << m_unitCount << endl - << "Type=1" << endl - << "Ver=1" << endl - << "ObjFiles=" << endl - << "Includes=" << endl - << "Libs=" << endl - << "PrivateResource=" << endl - << "ResourceIncludes=" << endl - << "MakeIncludes=" << endl - << "Compiler=" << endl - << "CppCompiler=" << endl - << "Linker=" << endl - << "IsCpp=1" << endl - << "Icon=" << endl - << "ExeOutput=" << endl - << "ObjectOutput=" << endl - << "OverrideOutput=0" << endl - << "OverrideOutputName=" << endl - << "HostApplication=" << endl - << "CommandLine=" << endl - << "UseCustomMakefile=1" << endl - << "CustomMakefile=" << ProjectNode.makefile << endl - << "IncludeVersionInto=0" << endl - << "SupportXPThemes=0" << endl - << "CompilerSet=0" << endl - - << "CompilerSettings=0000000000000000000000" << endl; - - OutputFolders(); - - m_devFile << endl << endl; - - OutputFileUnits(); - - m_devFile.close(); - - // Dev-C++ needs a makefile, so use the MinGW backend to create one. - - cout << "Creating Makefile: " << ProjectNode.makefile << endl; - - Backend *backend = Backend::Factory::Create("mingw", - ProjectNode, - configuration ); - backend->Process(); - delete backend; - - cout << "Done." << endl << endl; - - cout << "You may want to disable Class browsing (see below) before you open this project in Dev-C++, as the " - << "parsing required for large projects can take quite awhile." - << endl << endl - << "(Tools->Editor Options->Class browsing->Enable class browsing check box)" - << endl << endl; -} - -void DevCppBackend::ProcessModules() -{ - for(std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p) - { - Module &module = *p->second; - - for(size_t k = 0; k < module.non_if_data.files.size(); k++) - { - File &file = *module.non_if_data.files[k]; - - ProcessFile( file.file.relative_path + sSep + file.file.name ); - } - } -} - -bool FileExists(string &filename) -{ - ifstream file(filename.c_str()); - - if(!file.is_open()) - return false; - - file.close(); - return true; -} - -void DevCppBackend::ProcessFile(string filepath) -{ - // Remove the .\ at the start of the filenames - if ((filepath[0] == '.') && (filepath[1] == '\\')) filepath.erase(0, 2); - - if(!FileExists(filepath)) - return; - - // Change the \ to / - - for(size_t i = 0; i < filepath.length(); i++) - { - if(filepath[i] == '/') - filepath[i] = '\\'; - } - - - // Remove the filename from the path - string folder = ""; - - size_t pos = filepath.rfind(string("\\"), filepath.length() - 1); - - if(pos != string::npos) - { - folder = filepath; - folder.erase(pos, folder.length() - pos); - } - - FileUnit fileUnit; - fileUnit.filename = filepath; - fileUnit.folder = folder; - - m_fileUnits.push_back(fileUnit); - - if(folder != "") - AddFolders(folder); - - m_unitCount++; -} - -bool DevCppBackend::CheckFolderAdded(string &folder) -{ - for(size_t i = 0; i < m_folders.size(); i++) - { - if(m_folders[i] == folder) - return true; - } - - return false; -} - -void DevCppBackend::AddFolders(string &folder) -{ - // Check if this folder was already added. true if it was, false otherwise. - if(CheckFolderAdded(folder)) - return; - - m_folders.push_back(folder); - - size_t pos = folder.rfind(string("\\"), folder.length() - 1); - - if(pos == string::npos) - return; - - folder.erase(pos, folder.length() - pos); - AddFolders(folder); -} - -void DevCppBackend::OutputFolders() -{ - m_devFile << "Folders="; - - for(size_t i = 0; i < m_folders.size(); i++) - { - if(i > 0) - m_devFile << ","; - - m_devFile << m_folders[i]; - } -} - -void DevCppBackend::OutputFileUnits() -{ - for(size_t i = 0; i < m_fileUnits.size(); i++) - { - m_devFile << "[Unit" << i + 1 << "]" << endl; - - - m_devFile << "FileName=" << m_fileUnits[i].filename << endl; - m_devFile << "CompileCpp=1" << endl; - m_devFile << "Folder=" << m_fileUnits[i].folder << endl; - m_devFile << "Compile=1" << endl; - m_devFile << "Link=1" << endl; - m_devFile << "Priority=1000" << endl; - m_devFile << "OverrideBuildCmd=0" << endl; - m_devFile << "BuildCmd=" << endl << endl;; - } -} diff --git a/reactos/tools/rbuild/backend/devcpp/devcpp.h b/reactos/tools/rbuild/backend/devcpp/devcpp.h deleted file mode 100644 index 34274f9996c..00000000000 --- a/reactos/tools/rbuild/backend/devcpp/devcpp.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2005 Trevor McCort - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef __DEVCPP_H__ -#define __DEVCPP_H__ - -#include -#include -#include - -#include "../backend.h" - -class FileUnit -{ - public: - std::string filename; - std::string folder; -}; - -class DevCppBackend : public Backend -{ - public: - - DevCppBackend(Project &project, - Configuration& configuration); - virtual ~DevCppBackend() {} - - virtual void Process(); - - private: - - void ProcessModules(); - void ProcessFile(std::string filename); - - bool CheckFolderAdded(std::string &folder); - void AddFolders(std::string &folder); - - void OutputFolders(); - void OutputFileUnits(); - - std::vector m_fileUnits; - std::vector m_folders; - - int m_unitCount; - - std::ofstream m_devFile; -}; - -#endif // __DEVCPP_H__ - diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp deleted file mode 100644 index 2d57389d04e..00000000000 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ /dev/null @@ -1,1272 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * 2006 Christoph von Wittich - * - * 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. - */ -#include "../../pch.h" - -#include "mingw.h" -#include -#include "modulehandler.h" - -#ifdef _MSC_VER -#define popen _popen -#define pclose _pclose -#endif//_MSC_VER - -using std::string; -using std::vector; -using std::set; -using std::map; - -typedef set set_string; - -const struct ModuleHandlerInformations ModuleHandlerInformations[] = { - { HostTrue, "", "", "" }, // BuildTool - { HostFalse, "", "", "" }, // StaticLibrary - { HostFalse, "", "", "" }, // ObjectLibrary - { HostFalse, "", "", "" }, // Kernel - { HostFalse, "", "", "" }, // KernelModeDLL - { HostFalse, "-D__NTDRIVER__", "", "" }, // KernelModeDriver - { HostFalse, "", "", "" }, // NativeDLL - { HostFalse, "-D__NTAPP__", "", "" }, // NativeCUI - { HostFalse, "", "", "" }, // Win32DLL - { HostFalse, "", "", "" }, // Win32OCX - { HostFalse, "", "", "" }, // Win32CUI - { HostFalse, "", "", "" }, // Win32GUI - { HostFalse, "", "", "-nostartfiles -nostdlib" }, // BootLoader - { HostFalse, "", "-f bin", "" }, // BootSector - { HostFalse, "", "", "" }, // Iso - { HostFalse, "", "", "" }, // LiveIso - { HostFalse, "", "", "" }, // Test - { HostFalse, "", "", "" }, // RpcServer - { HostFalse, "", "", "" }, // RpcClient - { HostFalse, "", "", "" }, // Alias - { HostFalse, "", "", "-nostartfiles -nostdlib" }, // BootProgram - { HostFalse, "", "", "" }, // Win32SCR - { HostFalse, "", "", "" }, // IdlHeader - { HostFalse, "", "", "" }, // IsoRegTest - { HostFalse, "", "", "" }, // LiveIsoRegTest - { HostFalse, "", "", "" }, // EmbeddedTypeLib - { HostFalse, "", "", "" }, // ElfExecutable - { HostFalse, "", "", "" }, // RpcProxy - { HostTrue, "", "", "" }, // HostStaticLibrary - { HostFalse, "", "", "" }, // Cabinet - { HostFalse, "", "", "" }, // KeyboardLayout - { HostFalse, "", "", "" }, // MessageHeader -}; - -string -MingwBackend::GetFullPath ( const FileLocation& file ) const -{ - MingwModuleHandler::PassThruCacheDirectory ( &file ); - - string directory; - switch ( file.directory ) - { - case SourceDirectory: - directory = ""; - break; - case IntermediateDirectory: - directory = "$(INTERMEDIATE)"; - break; - case OutputDirectory: - directory = "$(OUTPUT)"; - break; - case InstallDirectory: - directory = "$(INSTALL)"; - break; - case TemporaryDirectory: - directory = "$(TEMPORARY)"; - break; - default: - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %d.", - file.directory ); - } - - if ( file.relative_path.length () > 0 ) - { - if ( directory.length () > 0 ) - directory += sSep; - directory += file.relative_path; - } - return directory; -} - -string -MingwBackend::GetFullName ( const FileLocation& file ) const -{ - string directory; - switch ( file.directory ) - { - case SourceDirectory: - directory = ""; - break; - case IntermediateDirectory: - directory = "$(INTERMEDIATE)"; - break; - case OutputDirectory: - directory = "$(OUTPUT)"; - break; - case InstallDirectory: - directory = "$(INSTALL)"; - break; - case TemporaryDirectory: - directory = "$(TEMPORARY)"; - break; - default: - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %d.", - file.directory ); - } - - if ( file.relative_path.length () > 0 ) - { - if ( directory.length () > 0 ) - directory += sSep; - directory += file.relative_path; - } - - if ( directory.length () > 0 ) - directory += sSep; - - return directory + file.name; -} - -string -v2s ( const Backend* backend, const vector& files, int wrap_at ) -{ - if ( !files.size() ) - return ""; - string s; - int wrap_count = 0; - for ( size_t i = 0; i < files.size(); i++ ) - { - const FileLocation& file = files[i]; - if ( wrap_at > 0 && wrap_count++ == wrap_at ) - s += " \\\n\t\t"; - else if ( s.size() ) - s += " "; - s += backend->GetFullName ( file ); - } - return s; -} - - -string -v2s ( const string_list& v, int wrap_at ) -{ - if ( !v.size() ) - return ""; - string s; - int wrap_count = 0; - for ( size_t i = 0; i < v.size(); i++ ) - { - if ( !v[i].size() ) - continue; - if ( wrap_at > 0 && wrap_count++ == wrap_at ) - s += " \\\n\t\t"; - else if ( s.size() ) - s += " "; - s += v[i]; - } - return s; -} - - -static class MingwFactory : public Backend::Factory -{ -public: - MingwFactory() : Factory ( "mingw", "Minimalist GNU Win32" ) {} - Backend* operator() ( Project& project, - Configuration& configuration ) - { - return new MingwBackend ( project, - configuration ); - } -} factory; - - -MingwBackend::MingwBackend ( Project& project, - Configuration& configuration ) - : Backend ( project, configuration ), - manualBinutilsSetting( false ), - intermediateDirectory ( new Directory ( "" ) ), - outputDirectory ( new Directory ( "" ) ), - installDirectory ( new Directory ( "" ) ) -{ - compilerPrefix = ""; -} - -MingwBackend::~MingwBackend() -{ - delete intermediateDirectory; - delete outputDirectory; - delete installDirectory; -} - -string -MingwBackend::AddDirectoryTarget ( const string& directory, - Directory* directoryTree ) -{ - if ( directory.length () > 0) - directoryTree->Add ( directory.c_str() ); - return directoryTree->name; -} - -bool -MingwBackend::CanEnablePreCompiledHeaderSupportForModule ( const Module& module ) -{ - if ( !configuration.CompilationUnitsEnabled ) - return true; - - const vector& compilationUnits = module.non_if_data.compilationUnits; - size_t i; - for ( i = 0; i < compilationUnits.size (); i++ ) - { - CompilationUnit& compilationUnit = *compilationUnits[i]; - if ( compilationUnit.GetFiles ().size () != 1 ) - return false; - } - return true; -} - -void -MingwBackend::ProcessModules () -{ - printf ( "Processing modules..." ); - - vector v; - size_t i; - - for ( std::map::iterator p = ProjectNode.modules.begin (); p != ProjectNode.modules.end (); ++ p ) - { - Module& module = *p->second; - if ( !module.enabled ) - continue; - MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler ( - module, - this ); - h->AddImplicitLibraries ( module ); - if ( use_pch && CanEnablePreCompiledHeaderSupportForModule ( module ) ) - h->EnablePreCompiledHeaderSupport (); - v.push_back ( h ); - } - - size_t iend = v.size (); - - for ( i = 0; i < iend; i++ ) - v[i]->GenerateSourceMacro(); - for ( i = 0; i < iend; i++ ) - v[i]->GenerateObjectMacro(); - fprintf ( fMakefile, "\n" ); - for ( i = 0; i < iend; i++ ) - v[i]->GenerateTargetMacro(); - fprintf ( fMakefile, "\n" ); - - GenerateAllTarget ( v ); - GenerateRegTestsRunTarget (); - - for ( i = 0; i < iend; i++ ) - v[i]->GenerateOtherMacros(); - - for ( i = 0; i < iend; i++ ) - { - MingwModuleHandler& h = *v[i]; - h.GeneratePreconditionDependencies (); - h.Process (); - h.GenerateInvocations (); - h.GenerateCleanTarget (); - h.GenerateInstallTarget (); - h.GenerateDependsTarget (); - delete v[i]; - } - - printf ( "done\n" ); -} - -void -MingwBackend::Process () -{ - if ( configuration.CheckDependenciesForModuleOnly ) - CheckAutomaticDependenciesForModuleOnly (); - else - ProcessNormal (); -} - -void -MingwBackend::CheckAutomaticDependenciesForModuleOnly () -{ - if ( configuration.AutomaticDependencies ) - { - Module* module = ProjectNode.LocateModule ( configuration.CheckDependenciesForModuleOnlyModule ); - if ( module == NULL ) - { - printf ( "Module '%s' does not exist\n", - configuration.CheckDependenciesForModuleOnlyModule.c_str () ); - return; - } - - printf ( "Checking automatic dependencies for module '%s'...", - module->name.c_str () ); - AutomaticDependency automaticDependency ( ProjectNode ); - automaticDependency.CheckAutomaticDependenciesForModule ( *module, - configuration.Verbose ); - printf ( "done\n" ); - } -} - -void -MingwBackend::ProcessNormal () -{ - assert(sizeof(ModuleHandlerInformations)/sizeof(ModuleHandlerInformations[0]) == TypeDontCare); - - DetectCompiler (); - DetectBinutils (); - DetectNetwideAssembler (); - DetectPipeSupport (); - DetectPCHSupport (); - CreateMakefile (); - GenerateHeader (); - GenerateGlobalVariables (); - GenerateXmlBuildFilesMacro (); - ProcessModules (); - GenerateInstallTarget (); - GenerateTestTarget (); - GenerateDirectoryTargets (); - GenerateDirectories (); - GenerateTestSupportCode (); - GenerateCompilationUnitSupportCode (); - GenerateSysSetup (); - GenerateProxyMakefiles (); - CheckAutomaticDependencies (); - CloseMakefile (); -} - -void -MingwBackend::CreateMakefile () -{ - fMakefile = fopen ( ProjectNode.makefile.c_str (), "w" ); - if ( !fMakefile ) - throw AccessDeniedException ( ProjectNode.makefile ); - MingwModuleHandler::SetBackend ( this ); - MingwModuleHandler::SetMakefile ( fMakefile ); -} - -void -MingwBackend::CloseMakefile () const -{ - if (fMakefile) - fclose ( fMakefile ); -} - -void -MingwBackend::GenerateHeader () const -{ - fprintf ( fMakefile, "# THIS FILE IS AUTOMATICALLY GENERATED, EDIT '%s' INSTEAD\n\n", - ProjectNode.GetProjectFilename ().c_str () ); -} - -void -MingwBackend::GenerateProjectCFlagsMacro ( const char* assignmentOperation, - const IfableData& data ) const -{ - set used_defs; - - if ( data.includes.size () > 0 ) - fprintf ( - fMakefile, - "PROJECT_CFLAGS %s %s\n", - assignmentOperation, - MingwModuleHandler::GenerateGccIncludeParametersFromVector ( data.includes ).c_str ()); - - if ( data.defines.size () > 0 ) - fprintf ( - fMakefile, - "PROJECT_CDEFINES %s %s\n", - assignmentOperation, - MingwModuleHandler::GenerateGccDefineParametersFromVector ( data.defines, used_defs ).c_str ()); -} - -void -MingwBackend::GenerateGlobalCFlagsAndProperties ( - const char* assignmentOperation, - const IfableData& data ) const -{ - for ( std::map::const_iterator p = data.properties.begin(); p != data.properties.end(); ++ p ) - { - Property& prop = *p->second; - - if (!prop.isInternal) - { - fprintf ( fMakefile, "%s := %s\n", - prop.name.c_str(), - prop.value.c_str() ); - } - } - - if ( data.includes.size() || data.defines.size() ) - { - GenerateProjectCFlagsMacro ( assignmentOperation, - data ); - } -} - -void -MingwBackend::GenerateProjectGccOptionsMacro ( const char* assignmentOperation, - IfableData& data ) const -{ - size_t i; - - fprintf ( - fMakefile, - "PROJECT_GCCOPTIONS %s", - assignmentOperation ); - - for ( i = 0; i < data.compilerFlags.size(); i++ ) - { - if ( data.compilerFlags[i]->compiler == CompilerTypeDontCare ) - { - fprintf ( - fMakefile, - " %s", - data.compilerFlags[i]->flag.c_str() ); - } - } - - fprintf ( fMakefile, "\n" ); -} - -void -MingwBackend::GenerateProjectGccOptions ( - const char* assignmentOperation, - IfableData& data ) const -{ - if ( data.compilerFlags.size() ) - { - GenerateProjectGccOptionsMacro ( assignmentOperation, - data ); - } -} - -string -MingwBackend::GenerateProjectLFLAGS () const -{ - string lflags; - for ( size_t i = 0; i < ProjectNode.linkerFlags.size (); i++ ) - { - LinkerFlag& linkerFlag = *ProjectNode.linkerFlags[i]; - if ( lflags.length () > 0 ) - lflags += " "; - lflags += linkerFlag.flag; - } - return lflags; -} - -void -MingwBackend::GenerateGlobalVariables () const -{ - fprintf ( fMakefile, - "PREFIX := %s\n", - compilerPrefix.c_str () ); - fprintf ( fMakefile, - "nasm := %s\n", - nasmCommand.c_str () ); - - GenerateGlobalCFlagsAndProperties ( "=", ProjectNode.non_if_data ); - GenerateProjectGccOptions ( "=", ProjectNode.non_if_data ); - - fprintf ( fMakefile, "PROJECT_RCFLAGS := $(PROJECT_CFLAGS) $(PROJECT_CDEFINES)\n" ); - fprintf ( fMakefile, "PROJECT_WIDLFLAGS := $(PROJECT_CFLAGS) $(PROJECT_CDEFINES)\n" ); - fprintf ( fMakefile, "PROJECT_LFLAGS := '$(shell ${TARGET_CC} -print-libgcc-file-name)' %s\n", GenerateProjectLFLAGS ().c_str () ); - fprintf ( fMakefile, "PROJECT_LPPFLAGS := '$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)' '$(shell ${TARGET_CPP} -print-file-name=libgcc.a)' '$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)' '$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)'\n" ); - fprintf ( fMakefile, "PROJECT_CFLAGS += -Wall\n" ); - fprintf ( fMakefile, "ifneq ($(OARCH),)\n" ); - fprintf ( fMakefile, "PROJECT_CFLAGS += -march=$(OARCH)\n" ); - fprintf ( fMakefile, "endif\n" ); - fprintf ( fMakefile, "PROJECT_CFLAGS += $(PROJECT_GCCOPTIONS)\n" ); - fprintf ( fMakefile, "\n" ); -} - -bool -MingwBackend::IncludeInAllTarget ( const Module& module ) const -{ - if ( MingwModuleHandler::ReferenceObjects ( module ) ) - return false; - if ( module.type == BootSector ) - return false; - if ( module.type == Iso ) - return false; - if ( module.type == LiveIso ) - return false; - if ( module.type == IsoRegTest ) - return false; - if ( module.type == LiveIsoRegTest ) - return false; - if ( module.type == Test ) - return false; - if ( module.type == Alias ) - return false; - return true; -} - -void -MingwBackend::GenerateAllTarget ( const vector& handlers ) const -{ - fprintf ( fMakefile, "all:" ); - int wrap_count = 0; - size_t iend = handlers.size (); - for ( size_t i = 0; i < iend; i++ ) - { - const Module& module = handlers[i]->module; - if ( IncludeInAllTarget ( module ) ) - { - if ( wrap_count++ == 5 ) - fprintf ( fMakefile, " \\\n\t\t" ), wrap_count = 0; - fprintf ( fMakefile, - " %s", - GetTargetMacro(module).c_str () ); - } - } - fprintf ( fMakefile, "\n\t\n\n" ); -} - -void -MingwBackend::GenerateRegTestsRunTarget () const -{ - fprintf ( fMakefile, - "REGTESTS_RUN_TARGET = regtests.dll\n" ); - fprintf ( fMakefile, - "$(REGTESTS_RUN_TARGET): $(REGTESTS_TARGET)\n" ); - fprintf ( fMakefile, - "\t$(cp) $(REGTESTS_TARGET) $(REGTESTS_RUN_TARGET)\n" ); - fprintf ( fMakefile, "\n" ); -} - -void -MingwBackend::GenerateXmlBuildFilesMacro() const -{ - fprintf ( fMakefile, - "XMLBUILDFILES = %s \\\n", - ProjectNode.GetProjectFilename ().c_str () ); - string xmlbuildFilenames; - int numberOfExistingFiles = 0; - struct stat statbuf; - time_t SystemTime, lastWriteTime; - - for ( size_t i = 0; i < ProjectNode.xmlbuildfiles.size (); i++ ) - { - XMLInclude& xmlbuildfile = *ProjectNode.xmlbuildfiles[i]; - if ( !xmlbuildfile.fileExists ) - continue; - numberOfExistingFiles++; - if ( xmlbuildFilenames.length () > 0 ) - xmlbuildFilenames += " "; - - FILE* f = fopen ( xmlbuildfile.topIncludeFilename.c_str (), "rb" ); - if ( !f ) - throw FileNotFoundException ( NormalizeFilename ( xmlbuildfile.topIncludeFilename ) ); - - if ( fstat ( fileno ( f ), &statbuf ) != 0 ) - { - fclose ( f ); - throw AccessDeniedException ( NormalizeFilename ( xmlbuildfile.topIncludeFilename ) ); - } - - lastWriteTime = statbuf.st_mtime; - SystemTime = time(NULL); - - if (SystemTime != -1) - { - if (difftime (lastWriteTime, SystemTime) > 0) - throw InvalidDateException ( NormalizeFilename ( xmlbuildfile.topIncludeFilename ) ); - } - - fclose ( f ); - - xmlbuildFilenames += NormalizeFilename ( xmlbuildfile.topIncludeFilename ); - if ( numberOfExistingFiles % 5 == 4 || i == ProjectNode.xmlbuildfiles.size () - 1 ) - { - fprintf ( fMakefile, - "\t%s", - xmlbuildFilenames.c_str ()); - if ( i == ProjectNode.xmlbuildfiles.size () - 1 ) - { - fprintf ( fMakefile, "\n" ); - } - else - { - fprintf ( fMakefile, - " \\\n" ); - } - xmlbuildFilenames.resize ( 0 ); - } - numberOfExistingFiles++; - } - fprintf ( fMakefile, "\n" ); -} - -void -MingwBackend::GenerateTestSupportCode () -{ - printf ( "Generating test support code..." ); - TestSupportCode testSupportCode ( ProjectNode ); - testSupportCode.GenerateTestSupportCode ( configuration.Verbose ); - printf ( "done\n" ); -} - -void -MingwBackend::GenerateCompilationUnitSupportCode () -{ - if ( configuration.CompilationUnitsEnabled ) - { - printf ( "Generating compilation unit support code..." ); - CompilationUnitSupportCode compilationUnitSupportCode ( ProjectNode ); - compilationUnitSupportCode.Generate ( configuration.Verbose ); - printf ( "done\n" ); - } -} - -void -MingwBackend::GenerateSysSetup () -{ - printf ( "Generating syssetup.inf..." ); - SysSetupGenerator sysSetupGenerator ( ProjectNode ); - sysSetupGenerator.Generate (); - printf ( "done\n" ); -} - -string -MingwBackend::GetProxyMakefileTree () const -{ - if ( configuration.GenerateProxyMakefilesInSourceTree ) - return ""; - else - return Environment::GetOutputPath (); -} - -void -MingwBackend::GenerateProxyMakefiles () -{ - printf ( "Generating proxy makefiles..." ); - ProxyMakefile proxyMakefile ( ProjectNode ); - proxyMakefile.GenerateProxyMakefiles ( configuration.Verbose, - GetProxyMakefileTree () ); - printf ( "done\n" ); -} - -void -MingwBackend::CheckAutomaticDependencies () -{ - if ( configuration.AutomaticDependencies ) - { - printf ( "Checking automatic dependencies..." ); - AutomaticDependency automaticDependency ( ProjectNode ); - automaticDependency.CheckAutomaticDependencies ( configuration.Verbose ); - printf ( "done\n" ); - } -} - -void -MingwBackend::GenerateDirectories () -{ - printf ( "Creating directories..." ); - intermediateDirectory->GenerateTree ( IntermediateDirectory, configuration.Verbose ); - outputDirectory->GenerateTree ( OutputDirectory, configuration.Verbose ); - if ( !configuration.MakeHandlesInstallDirectories ) - installDirectory->GenerateTree ( InstallDirectory, configuration.Verbose ); - printf ( "done\n" ); -} - -bool -MingwBackend::TryToDetectThisCompiler ( const string& compiler ) -{ - string command = ssprintf ( - "%s -v 1>%s 2>%s", - FixSeparatorForSystemCommand(compiler).c_str (), - NUL, - NUL ); - int exitcode = system ( command.c_str () ); - return (bool) (exitcode == 0); -} - -void -MingwBackend::DetectCompiler () -{ - printf ( "Detecting compiler..." ); - - bool detectedCompiler = false; - const string& ROS_PREFIXValue = Environment::GetVariable ( "ROS_PREFIX" ); - if ( ROS_PREFIXValue.length () > 0 ) - { - compilerPrefix = ROS_PREFIXValue; - compilerCommand = compilerPrefix + "-gcc"; - detectedCompiler = TryToDetectThisCompiler ( compilerCommand ); - } -#if defined(WIN32) - if ( !detectedCompiler ) - { - compilerPrefix = ""; - compilerCommand = "gcc"; - detectedCompiler = TryToDetectThisCompiler ( compilerCommand ); - } -#endif - if ( !detectedCompiler ) - { - compilerPrefix = "mingw32"; - compilerCommand = compilerPrefix + "-gcc"; - detectedCompiler = TryToDetectThisCompiler ( compilerCommand ); - } - - if ( detectedCompiler ) - { - string compilerVersion = GetCompilerVersion ( compilerCommand ); - if ( IsSupportedCompilerVersion ( compilerVersion ) ) - printf ( "detected (%s %s)\n", compilerCommand.c_str (), compilerVersion.c_str() ); - else - { - printf ( "detected (%s), but with unsupported version (%s)\n", - compilerCommand.c_str (), - compilerVersion.c_str () ); - throw UnsupportedBuildToolException ( compilerCommand, compilerVersion ); - } - } - else - printf ( "not detected\n" ); - -} - -bool -MingwBackend::TryToDetectThisNetwideAssembler ( const string& assembler ) -{ - string command = ssprintf ( - "%s -h 1>%s 2>%s", - FixSeparatorForSystemCommand(assembler).c_str (), - NUL, - NUL ); - int exitcode = system ( command.c_str () ); - return (bool) (exitcode == 0); -} - -string -MingwBackend::GetVersionString ( const string& versionCommand ) -{ - FILE *fp; - int ch, i; - size_t newline; - char buffer[81]; - - fp = popen ( versionCommand.c_str () , "r" ); - for( i = 0; - ( i < 80 ) && - ( feof ( fp ) == 0 && - ( ( ch = fgetc( fp ) ) != -1 ) ); - i++ ) - { - buffer[i] = (char) ch; - } - buffer[i] = '\0'; - pclose ( fp ); - - char separators[] = " "; - char *token; - char *prevtoken = NULL; - - string version; - - token = strtok ( buffer, separators ); - while ( token != NULL ) - { - prevtoken = token; - version = string( prevtoken ); - if ( (newline = version.find('\n')) != std::string::npos ) - version.erase(newline, 1); - if ( version.find('.') != std::string::npos ) - break; - token = strtok ( NULL, separators ); - } - return version; -} - -string -MingwBackend::GetNetwideAssemblerVersion ( const string& nasmCommand ) -{ - string versionCommand; - if ( nasmCommand.find("yasm") != std::string::npos ) - { - versionCommand = ssprintf ( "%s --version", - nasmCommand.c_str (), - NUL, - NUL ); - } - else - { - versionCommand = ssprintf ( "%s -v", - nasmCommand.c_str (), - NUL, - NUL ); - } - return GetVersionString( versionCommand ); -} - -string -MingwBackend::GetCompilerVersion ( const string& compilerCommand ) -{ - string versionCommand = ssprintf ( "%s --version gcc", - compilerCommand.c_str (), - NUL, - NUL ); - return GetVersionString( versionCommand ); -} - -string -MingwBackend::GetBinutilsVersion ( const string& binutilsCommand ) -{ - string versionCommand = ssprintf ( "%s -v", - binutilsCommand.c_str (), - NUL, - NUL ); - return GetVersionString( versionCommand ); -} - -bool -MingwBackend::IsSupportedCompilerVersion ( const string& compilerVersion ) -{ - if ( strcmp ( compilerVersion.c_str (), "3.4.2") < 0 ) - return false; - else - return true; -} - -bool -MingwBackend::TryToDetectThisBinutils ( const string& binutils ) -{ - string command = ssprintf ( - "%s -v 1>%s 2>%s", - FixSeparatorForSystemCommand(binutils).c_str (), - NUL, - NUL ); - int exitcode = system ( command.c_str () ); - return (exitcode == 0); -} - -string -MingwBackend::GetBinutilsVersionDate ( const string& binutilsCommand ) -{ - FILE *fp; - int ch, i; - char buffer[81]; - - string versionCommand = ssprintf ( "%s -v", - binutilsCommand.c_str (), - NUL, - NUL ); - fp = popen ( versionCommand.c_str () , "r" ); - for( i = 0; - ( i < 80 ) && - ( feof ( fp ) == 0 && - ( ( ch = fgetc( fp ) ) != -1 ) ); - i++ ) - { - buffer[i] = (char) ch; - } - buffer[i] = '\0'; - pclose ( fp ); - - char separators[] = " "; - char *token; - char *prevtoken = NULL; - - token = strtok ( buffer, separators ); - while ( token != NULL ) - { - prevtoken = token; - token = strtok ( NULL, separators ); - } - string version = string ( prevtoken ); - int lastDigit = version.find_last_not_of ( "\t\r\n" ); - if ( lastDigit != -1 ) - return string ( version, 0, lastDigit+1 ); - else - return version; -} - -bool -MingwBackend::IsSupportedBinutilsVersion ( const string& binutilsVersion ) -{ - if ( manualBinutilsSetting ) return true; - - /* linux */ - if ( binutilsVersion.find('.') != std::string::npos ) - { - /* TODO: blacklist versions on version number instead of date */ - return true; - } - - /* - * - Binutils older than 2003/10/01 have broken windres which can't handle - * icons with alpha channel. - * - Binutils between 2004/09/02 and 2004/10/08 have broken handling of - * forward exports in dlltool. - */ - if ( ( ( strcmp ( binutilsVersion.c_str (), "20040902") >= 0 ) && - ( strcmp ( binutilsVersion.c_str (), "20041008") <= 0 ) ) || - ( strcmp ( binutilsVersion.c_str (), "20031001") < 0 ) ) - return false; - else - return true; -} - -void -MingwBackend::DetectBinutils () -{ - printf ( "Detecting binutils..." ); - - bool detectedBinutils = false; - const string& ROS_PREFIXValue = Environment::GetVariable ( "ROS_PREFIX" ); - - if ( ROS_PREFIXValue.length () > 0 ) - { - binutilsPrefix = ROS_PREFIXValue; - binutilsCommand = binutilsPrefix + "-ld"; - manualBinutilsSetting = true; - detectedBinutils = true; - } -#if defined(WIN32) - if ( !detectedBinutils ) - { - binutilsPrefix = ""; - binutilsCommand = "ld"; - detectedBinutils = TryToDetectThisBinutils ( binutilsCommand ); - } -#endif - if ( !detectedBinutils ) - { - binutilsPrefix = "mingw32"; - binutilsCommand = binutilsPrefix + "-ld"; - detectedBinutils = TryToDetectThisBinutils ( binutilsCommand ); - } - if ( detectedBinutils ) - { - string binutilsVersion = GetBinutilsVersionDate ( binutilsCommand ); - if ( IsSupportedBinutilsVersion ( binutilsVersion ) ) - printf ( "detected (%s %s)\n", binutilsCommand.c_str (), GetBinutilsVersion( binutilsCommand ).c_str() ); - else - { - printf ( "detected (%s), but with unsupported version (%s)\n", - binutilsCommand.c_str (), - binutilsVersion.c_str () ); - throw UnsupportedBuildToolException ( binutilsCommand, binutilsVersion ); - } - } - else - printf ( "not detected\n" ); - -} - -void -MingwBackend::DetectNetwideAssembler () -{ - printf ( "Detecting netwide assembler..." ); - - nasmCommand = "nasm"; - bool detectedNasm = TryToDetectThisNetwideAssembler ( nasmCommand ); -#if defined(WIN32) - if ( !detectedNasm ) - { - nasmCommand = "nasmw"; - detectedNasm = TryToDetectThisNetwideAssembler ( nasmCommand ); - } -#endif - if ( !detectedNasm ) - { - nasmCommand = "yasm"; - detectedNasm = TryToDetectThisNetwideAssembler ( nasmCommand ); - } - if ( detectedNasm ) - printf ( "detected (%s %s)\n", nasmCommand.c_str (), GetNetwideAssemblerVersion( nasmCommand ).c_str() ); - else - printf ( "not detected\n" ); -} - -void -MingwBackend::DetectPipeSupport () -{ - printf ( "Detecting compiler -pipe support..." ); - - string pipe_detection = "tools" + sSep + "rbuild" + sSep + "backend" + sSep + "mingw" + sSep + "pipe_detection.c"; - string pipe_detectionObjectFilename = ReplaceExtension ( pipe_detection, - ".o" ); - string command = ssprintf ( - "%s -pipe -c %s -o %s 1>%s 2>%s", - FixSeparatorForSystemCommand(compilerCommand).c_str (), - pipe_detection.c_str (), - pipe_detectionObjectFilename.c_str (), - NUL, - NUL ); - int exitcode = system ( command.c_str () ); - FILE* f = fopen ( pipe_detectionObjectFilename.c_str (), "rb" ); - if ( f ) - { - usePipe = (exitcode == 0); - fclose ( f ); - unlink ( pipe_detectionObjectFilename.c_str () ); - } - else - usePipe = false; - - if ( usePipe ) - printf ( "detected\n" ); - else - printf ( "not detected\n" ); -} - -void -MingwBackend::DetectPCHSupport () -{ - printf ( "Detecting compiler pre-compiled header support..." ); - - if ( configuration.PrecompiledHeadersEnabled ) - { - string path = "tools" + sSep + "rbuild" + sSep + "backend" + sSep + "mingw" + sSep + "pch_detection.h"; - string cmd = ssprintf ( - "%s -c %s 1>%s 2>%s", - FixSeparatorForSystemCommand(compilerCommand).c_str (), - path.c_str (), - NUL, - NUL ); - system ( cmd.c_str () ); - path += ".gch"; - - FILE* f = fopen ( path.c_str (), "rb" ); - if ( f ) - { - use_pch = true; - fclose ( f ); - unlink ( path.c_str () ); - } - else - use_pch = false; - - if ( use_pch ) - printf ( "detected\n" ); - else - printf ( "not detected\n" ); - } - else - { - use_pch = false; - printf ( "disabled\n" ); - } -} - -void -MingwBackend::GetNonModuleInstallTargetFiles ( - vector& out ) const -{ - for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ ) - { - const InstallFile& installfile = *ProjectNode.installfiles[i]; - out.push_back ( *installfile.target ); - } -} - -void -MingwBackend::GetModuleInstallTargetFiles ( - vector& out ) const -{ - for ( std::map::const_iterator p = ProjectNode.modules.begin (); p != ProjectNode.modules.end (); ++ p ) - { - const Module& module = *p->second; - if ( !module.enabled ) - continue; - if ( module.install ) - out.push_back ( *module.install ); - } -} - -void -MingwBackend::GetInstallTargetFiles ( - vector& out ) const -{ - GetNonModuleInstallTargetFiles ( out ); - GetModuleInstallTargetFiles ( out ); -} - -void -MingwBackend::OutputInstallTarget ( const FileLocation& source, - const FileLocation& target ) -{ - fprintf ( fMakefile, - "%s: %s | %s\n", - GetFullName ( target ).c_str (), - GetFullName ( source ).c_str (), - GetFullPath ( target ).c_str () ); - fprintf ( fMakefile, - "\t$(ECHO_CP)\n" ); - fprintf ( fMakefile, - "\t${cp} %s %s 1>$(NUL)\n", - GetFullName ( source ).c_str (), - GetFullName ( target ).c_str () ); -} - -void -MingwBackend::OutputNonModuleInstallTargets () -{ - for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ ) - { - const InstallFile& installfile = *ProjectNode.installfiles[i]; - OutputInstallTarget ( *installfile.source, *installfile.target ); - } -} - -const Module& -MingwBackend::GetAliasedModuleOrModule ( const Module& module ) const -{ - if ( module.aliasedModuleName.size () > 0 ) - { - const Module* aliasedModule = ProjectNode.LocateModule ( module.aliasedModuleName ); - assert ( aliasedModule ); - return *aliasedModule; - } - else - return module; -} - -void -MingwBackend::OutputModuleInstallTargets () -{ - for ( std::map::const_iterator p = ProjectNode.modules.begin (); p != ProjectNode.modules.end (); ++ p ) - { - const Module& module = *p->second; - if ( !module.enabled ) - continue; - if ( module.install ) - { - const Module& aliasedModule = GetAliasedModuleOrModule ( module ); - OutputInstallTarget ( *aliasedModule.output, *module.install ); - } - } -} - -string -MingwBackend::GetRegistrySourceFiles () -{ - return "boot" + sSep + "bootdata" + sSep + "hivecls_" + Environment::GetArch() + ".inf " - "boot" + sSep + "bootdata" + sSep + "hivedef_" + Environment::GetArch() + ".inf " - "boot" + sSep + "bootdata" + sSep + "hiveinst_" + Environment::GetArch() + ".inf " - "boot" + sSep + "bootdata" + sSep + "hivesft_" + Environment::GetArch() + ".inf " - "boot" + sSep + "bootdata" + sSep + "hivesys_" + Environment::GetArch() + ".inf "; -} - -string -MingwBackend::GetRegistryTargetFiles () -{ - string system32ConfigDirectory = "system32" + sSep + "config"; - FileLocation system32 ( InstallDirectory, system32ConfigDirectory, "" ); - - vector registry_files; - registry_files.push_back ( FileLocation ( InstallDirectory, system32ConfigDirectory, "default" ) ); - registry_files.push_back ( FileLocation ( InstallDirectory, system32ConfigDirectory, "sam" ) ); - registry_files.push_back ( FileLocation ( InstallDirectory, system32ConfigDirectory, "security" ) ); - registry_files.push_back ( FileLocation ( InstallDirectory, system32ConfigDirectory, "software" ) ); - registry_files.push_back ( FileLocation ( InstallDirectory, system32ConfigDirectory, "system" ) ); - - return v2s( this, registry_files, 6 ); -} - -void -MingwBackend::OutputRegistryInstallTarget () -{ - FileLocation system32 ( InstallDirectory, "system32" + sSep + "config", "" ); - - string registrySourceFiles = GetRegistrySourceFiles (); - string registryTargetFiles = GetRegistryTargetFiles (); - fprintf ( fMakefile, - "install_registry: %s\n", - registryTargetFiles.c_str () ); - fprintf ( fMakefile, - "%s: %s %s $(MKHIVE_TARGET)\n", - registryTargetFiles.c_str (), - registrySourceFiles.c_str (), - GetFullPath ( system32 ).c_str () ); - fprintf ( fMakefile, - "\t$(ECHO_MKHIVE)\n" ); - fprintf ( fMakefile, - "\t$(MKHIVE_TARGET) boot%cbootdata %s $(ARCH) boot%cbootdata%chiveinst_$(ARCH).inf\n", - cSep, GetFullPath ( system32 ).c_str (), - cSep, cSep ); - fprintf ( fMakefile, - "\n" ); -} - -void -MingwBackend::GenerateInstallTarget () -{ - vector vInstallTargetFiles; - GetInstallTargetFiles ( vInstallTargetFiles ); - string installTargetFiles = v2s ( this, vInstallTargetFiles, 5 ); - string registryTargetFiles = GetRegistryTargetFiles (); - - fprintf ( fMakefile, - "install: %s %s\n", - installTargetFiles.c_str (), - registryTargetFiles.c_str () ); - OutputNonModuleInstallTargets (); - OutputModuleInstallTargets (); - OutputRegistryInstallTarget (); - fprintf ( fMakefile, - "\n" ); -} - -void -MingwBackend::GetModuleTestTargets ( - vector& out ) const -{ - for ( std::map::const_iterator p = ProjectNode.modules.begin (); p != ProjectNode.modules.end (); ++ p ) - { - const Module& module = *p->second; - if ( !module.enabled ) - continue; - if ( module.type == Test ) - out.push_back ( module.name ); - } -} - -void -MingwBackend::GenerateTestTarget () -{ - vector vTestTargets; - GetModuleTestTargets ( vTestTargets ); - string testTargets = v2s ( vTestTargets, 5 ); - - fprintf ( fMakefile, - "test: %s\n", - testTargets.c_str () ); - fprintf ( fMakefile, - "\n" ); -} - -void -MingwBackend::GenerateDirectoryTargets () -{ - intermediateDirectory->CreateRule ( fMakefile, "$(INTERMEDIATE)" ); - outputDirectory->CreateRule ( fMakefile, "$(OUTPUT)" ); - installDirectory->CreateRule ( fMakefile, "$(INSTALL)" ); -} diff --git a/reactos/tools/rbuild/backend/mingw/mingw.h b/reactos/tools/rbuild/backend/mingw/mingw.h deleted file mode 100644 index 2c7e23b2961..00000000000 --- a/reactos/tools/rbuild/backend/mingw/mingw.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef MINGW_H -#define MINGW_H - -#include "../backend.h" - -#ifdef WIN32 - #define NUL "NUL" -#else - #define NUL "/dev/null" -#endif - -class Directory; -class MingwModuleHandler; - -extern std::string -v2s ( const Backend* backend, const std::vector& files, int wrap_at ); -extern std::string -v2s ( const string_list& v, int wrap_at ); - - -class MingwBackend : public Backend -{ -public: - MingwBackend ( Project& project, - Configuration& configuration ); - ~MingwBackend (); - virtual void Process (); - std::string AddDirectoryTarget ( const std::string& directory, - Directory* directoryTree ); - const Module& GetAliasedModuleOrModule ( const Module& module ) const; - std::string compilerPrefix; - std::string compilerCommand; - std::string nasmCommand; - std::string binutilsPrefix; - std::string binutilsCommand; - bool usePipe, manualBinutilsSetting; - Directory* intermediateDirectory; - Directory* outputDirectory; - Directory* installDirectory; - - std::string GetFullName ( const FileLocation& file ) const; - std::string GetFullPath ( const FileLocation& file ) const; - -private: - void CreateMakefile (); - void CloseMakefile () const; - void GenerateHeader () const; - void GenerateProjectCFlagsMacro ( const char* assignmentOperation, - const IfableData& data ) const; - void GenerateGlobalCFlagsAndProperties ( const char* op, - const IfableData& data ) const; - void GenerateProjectGccOptionsMacro ( const char* assignmentOperation, - IfableData& data ) const; - void GenerateProjectGccOptions ( const char* assignmentOperation, - IfableData& data ) const; - std::string GenerateProjectLFLAGS () const; - void GenerateDirectories (); - void GenerateGlobalVariables () const; - bool IncludeInAllTarget ( const Module& module ) const; - void GenerateAllTarget ( const std::vector& handlers ) const; - void GenerateRegTestsRunTarget () const; - void GenerateXmlBuildFilesMacro() const; - void GenerateTestSupportCode (); - void GenerateCompilationUnitSupportCode (); - void GenerateSysSetup (); - std::string GetProxyMakefileTree () const; - void GenerateProxyMakefiles (); - void CheckAutomaticDependencies (); - bool TryToDetectThisCompiler ( const std::string& compiler ); - void DetectCompiler (); - std::string GetCompilerVersion ( const std::string& compilerCommand ); - bool IsSupportedCompilerVersion ( const std::string& compilerVersion ); - bool TryToDetectThisNetwideAssembler ( const std::string& assembler ); - bool TryToDetectThisBinutils ( const std::string& binutils ); - std::string GetBinutilsVersion ( const std::string& binutilsCommand ); - std::string GetBinutilsVersionDate ( const std::string& binutilsCommand ); - bool IsSupportedBinutilsVersion ( const std::string& binutilsVersion ); - std::string GetVersionString ( const std::string& versionCommand ); - std::string GetNetwideAssemblerVersion ( const std::string& nasmCommand ); - void DetectBinutils (); - void DetectNetwideAssembler (); - void DetectPipeSupport (); - void DetectPCHSupport (); - bool CanEnablePreCompiledHeaderSupportForModule ( const Module& module ); - void ProcessModules (); - void CheckAutomaticDependenciesForModuleOnly (); - void ProcessNormal (); - std::string GetNonModuleInstallDirectories ( const std::string& installDirectory ); - std::string GetInstallDirectories ( const std::string& installDirectory ); - void GetNonModuleInstallFiles ( std::vector& out ) const; - void GetInstallFiles ( std::vector& out ) const; - void GetNonModuleInstallTargetFiles ( std::vector& out ) const; - void GetModuleInstallTargetFiles ( std::vector& out ) const; - void GetInstallTargetFiles ( std::vector& out ) const; - void OutputInstallTarget ( const FileLocation& source, const FileLocation& target ); - void OutputNonModuleInstallTargets (); - void OutputModuleInstallTargets (); - std::string GetRegistrySourceFiles (); - std::string GetRegistryTargetFiles (); - void OutputRegistryInstallTarget (); - void GenerateInstallTarget (); - void GetModuleTestTargets ( std::vector& out ) const; - void GenerateTestTarget (); - void GenerateDirectoryTargets (); - FILE* fMakefile; - bool use_pch; -}; - - -class ProxyMakefile -{ -public: - ProxyMakefile ( const Project& project ); - ~ProxyMakefile (); - void GenerateProxyMakefiles ( bool verbose, - std::string outputTree ); - static bool GenerateProxyMakefile ( const Module& module ); - -private: - std::string GeneratePathToParentDirectory ( int numberOfParentDirectories ); - std::string GetPathToTopDirectory ( Module& module ); - void GenerateProxyMakefileForModule ( Module& module, - bool verbose, - std::string outputTree ); - const Project& project; -}; - -typedef struct ModuleHandlerInformations -{ - HostType DefaultHost; - const char* cflags; - const char* nasmflags; - const char* linkerflags; -}; - -extern const struct ModuleHandlerInformations ModuleHandlerInformations[]; - -#endif /* MINGW_H */ diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp deleted file mode 100644 index a444c18151e..00000000000 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ /dev/null @@ -1,3555 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * 2007-2008 Hervé Poussineau - * - * 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. - */ -#include "../../pch.h" -#include -#include - -#include "../../rbuild.h" -#include "mingw.h" -#include "modulehandler.h" -#include "rule.h" - -using std::set; -using std::string; -using std::vector; - -#define CLEAN_FILE(f) clean_files.push_back ( (f).name.length () > 0 ? backend->GetFullName ( f ) : backend->GetFullPath ( f ) ); -#define IsStaticLibrary( module ) ( ( module.type == StaticLibrary ) || ( module.type == HostStaticLibrary ) ) - -MingwBackend* -MingwModuleHandler::backend = NULL; -FILE* -MingwModuleHandler::fMakefile = NULL; - -string -PrefixFilename ( - const string& filename, - const string& prefix ) -{ - if ( !prefix.length() ) - return filename; - string out; - const char* pfilename = filename.c_str(); - const char* p1 = strrchr ( pfilename, '/' ); - const char* p2 = strrchr ( pfilename, '\\' ); - if ( p1 || p2 ) - { - if ( p2 > p1 ) - p1 = p2; - out += string(pfilename,p1-pfilename) + cSep; - pfilename = p1 + 1; - } - out += prefix + pfilename; - return out; -} - -string -GetTargetMacro ( const Module& module, bool with_dollar ) -{ - string s ( module.name ); - strupr ( &s[0] ); - s += "_TARGET"; - if ( with_dollar ) - return ssprintf ( "$(%s)", s.c_str() ); - return s; -} - -MingwModuleHandler::MingwModuleHandler ( - const Module& module_ ) - - : module(module_) -{ - use_pch = false; -} - -MingwModuleHandler::~MingwModuleHandler() -{ -} - -/*static*/ void -MingwModuleHandler::SetBackend ( MingwBackend* backend_ ) -{ - backend = backend_; -} - -/*static*/ void -MingwModuleHandler::SetMakefile ( FILE* f ) -{ - fMakefile = f; -} - -void -MingwModuleHandler::EnablePreCompiledHeaderSupport () -{ - use_pch = true; -} - -/*static*/ const FileLocation* -MingwModuleHandler::PassThruCacheDirectory (const FileLocation* file ) -{ - switch ( file->directory ) - { - case SourceDirectory: - break; - case IntermediateDirectory: - backend->AddDirectoryTarget ( file->relative_path, backend->intermediateDirectory ); - break; - case OutputDirectory: - backend->AddDirectoryTarget ( file->relative_path, backend->outputDirectory ); - break; - case InstallDirectory: - backend->AddDirectoryTarget ( file->relative_path, backend->installDirectory ); - break; - default: - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %d.", - file->directory ); - } - - return file; -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetTargetFilename ( - const Module& module, - string_list* pclean_files ) -{ - FileLocation *target = new FileLocation ( *module.output ); - if ( pclean_files ) - { - string_list& clean_files = *pclean_files; - CLEAN_FILE ( *target ); - } - return target; -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetImportLibraryFilename ( - const Module& module, - string_list* pclean_files ) -{ - FileLocation *target = new FileLocation ( *module.dependency ); - if ( pclean_files ) - { - string_list& clean_files = *pclean_files; - CLEAN_FILE ( *target ); - } - return target; -} - -/* caller needs to delete the returned object */ -MingwModuleHandler* -MingwModuleHandler::InstanciateHandler ( - const Module& module, - MingwBackend* backend ) -{ - MingwModuleHandler* handler; - switch ( module.type ) - { - case StaticLibrary: - case HostStaticLibrary: - case ObjectLibrary: - case RpcServer: - case RpcClient: - case RpcProxy: - case MessageHeader: - case IdlHeader: - case EmbeddedTypeLib: - case BootSector: - handler = new MingwModuleHandler( module ); - break; - case BuildTool: - handler = new MingwBuildToolModuleHandler ( module ); - break; - case Kernel: - handler = new MingwKernelModuleHandler ( module ); - break; - case NativeCUI: - handler = new MingwNativeCUIModuleHandler ( module ); - break; - case Win32CUI: - handler = new MingwWin32CUIModuleHandler ( module ); - break; - case Win32SCR: - case Win32GUI: - handler = new MingwWin32GUIModuleHandler ( module ); - break; - case KeyboardLayout: - case KernelModeDLL: - case KernelModeDriver: - handler = new MingwKernelModeDLLModuleHandler ( module ); - break; - case NativeDLL: - handler = new MingwNativeDLLModuleHandler ( module ); - break; - case Win32DLL: - handler = new MingwWin32DLLModuleHandler ( module ); - break; - case Win32OCX: - handler = new MingwWin32OCXModuleHandler ( module ); - break; - case BootLoader: - handler = new MingwBootLoaderModuleHandler ( module ); - break; - case BootProgram: - handler = new MingwBootProgramModuleHandler ( module ); - break; - case Iso: - handler = new MingwIsoModuleHandler ( module ); - break; - case LiveIso: - handler = new MingwLiveIsoModuleHandler ( module ); - break; - case IsoRegTest: - handler = new MingwIsoModuleHandler ( module ); - break; - case LiveIsoRegTest: - handler = new MingwLiveIsoModuleHandler ( module ); - break; - case Test: - handler = new MingwTestModuleHandler ( module ); - break; - case Alias: - handler = new MingwAliasModuleHandler ( module ); - break; - case Cabinet: - handler = new MingwCabinetModuleHandler ( module ); - break; - case ElfExecutable: - handler = new MingwElfExecutableModuleHandler ( module ); - break; - default: - throw UnknownModuleTypeException ( - module.node.location, - module.type ); - break; - } - return handler; -} - -string -MingwModuleHandler::GetWorkingDirectory () const -{ - return "."; -} - -string -MingwModuleHandler::GetBasename ( const string& filename ) const -{ - size_t index = filename.find_last_of ( '.' ); - if ( index != string::npos ) - return filename.substr ( 0, index ); - return ""; -} - -string -MingwModuleHandler::GetCompilationUnitDependencies ( - const CompilationUnit& compilationUnit ) const -{ - if ( compilationUnit.GetFiles ().size () <= 1 ) - return ""; - vector sourceFiles; - for ( size_t i = 0; i < compilationUnit.GetFiles ().size (); i++ ) - { - const File& file = *compilationUnit.GetFiles ()[i]; - sourceFiles.push_back ( backend->GetFullName ( file.file ) ); - } - return string ( " " ) + v2s ( sourceFiles, 10 ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetModuleArchiveFilename () const -{ - if ( IsStaticLibrary ( module ) ) - return GetTargetFilename ( module, NULL ); - return new FileLocation ( IntermediateDirectory, - module.output->relative_path, - ReplaceExtension ( module.name, ".temp.a" ) ); -} - -/*static*/ bool -MingwModuleHandler::ReferenceObjects ( - const Module& module ) -{ - if ( module.type == ObjectLibrary ) - return true; - if ( module.type == RpcServer ) - return true; - if ( module.type == RpcClient ) - return true; - if ( module.type == RpcProxy ) - return true; - if ( module.type == IdlHeader ) - return true; - if ( module.type == MessageHeader) - return true; - return false; -} - -void -MingwModuleHandler::OutputCopyCommand ( const FileLocation& source, - const FileLocation& destination ) -{ - fprintf ( fMakefile, "# OUTPUT COPY COMMAND\n" ); - fprintf ( fMakefile, - "\t$(ECHO_CP)\n" ); - fprintf ( fMakefile, - "\t${cp} %s %s 1>$(NUL)\n", - backend->GetFullName ( source ).c_str (), - backend->GetFullName ( *PassThruCacheDirectory ( &destination ) ).c_str () ); -} - -string -MingwModuleHandler::GetImportLibraryDependency ( - const Module& importedModule ) -{ - string dep; - if ( ReferenceObjects ( importedModule ) ) - { - const vector& compilationUnits = importedModule.non_if_data.compilationUnits; - size_t i; - - dep = GetTargetMacro ( importedModule ); - for ( i = 0; i < compilationUnits.size (); i++ ) - { - CompilationUnit& compilationUnit = *compilationUnits[i]; - const FileLocation& compilationName = compilationUnit.GetFilename (); - const FileLocation *objectFilename = GetObjectFilename ( &compilationName, importedModule ); - if ( GetExtension ( *objectFilename ) == ".h" ) - dep += ssprintf ( " $(%s_HEADERS)", importedModule.name.c_str () ); - else if ( GetExtension ( *objectFilename ) == ".rc" ) - dep += ssprintf ( " $(%s_MCHEADERS)", importedModule.name.c_str () ); - } - } - else - { - const FileLocation *library_target = GetImportLibraryFilename ( importedModule, NULL ); - dep = backend->GetFullName ( *library_target ); - delete library_target; - } - - if ( IsStaticLibrary ( importedModule ) || importedModule.type == ObjectLibrary ) - { - const std::vector& libraries = importedModule.non_if_data.libraries; - - for ( size_t i = 0; i < libraries.size (); ++ i ) - { - dep += " "; - dep += GetImportLibraryDependency ( *libraries[i]->importedModule ); - } - } - - return dep; -} - -void -MingwModuleHandler::GetTargets ( const Module& dependencyModule, - string_list& targets ) -{ - if ( dependencyModule.invocations.size () > 0 ) - { - for ( size_t i = 0; i < dependencyModule.invocations.size (); i++ ) - { - Invoke& invoke = *dependencyModule.invocations[i]; - invoke.GetTargets ( targets ); - } - } - else - targets.push_back ( GetImportLibraryDependency ( dependencyModule ) ); -} - -void -MingwModuleHandler::GetModuleDependencies ( - string_list& dependencies ) -{ - size_t iend = module.dependencies.size (); - - if ( iend == 0 ) - return; - - for ( size_t i = 0; i < iend; i++ ) - { - const Dependency& dependency = *module.dependencies[i]; - const Module& dependencyModule = *dependency.dependencyModule; - GetTargets ( dependencyModule, - dependencies ); - } - vector v; - GetDefinitionDependencies ( v ); - - for ( size_t i = 0; i < v.size (); i++ ) - { - const FileLocation& file = v[i]; - dependencies.push_back ( backend->GetFullName ( file ) ); - } -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetObjectFilename ( - const FileLocation* sourceFile, - const Module& module ) const -{ - DirectoryLocation destination_directory; - string newExtension; - string extension = GetExtension ( *sourceFile ); - - if ( module.type == BootSector ) - return new FileLocation ( *module.output ); - else if ( extension == ".rc" || extension == ".RC" ) - newExtension = "_" + module.name + ".coff"; - else if ( extension == ".mc" || extension == ".MC" ) - newExtension = ".rc"; - else if ( extension == ".spec" || extension == ".SPEC" ) - newExtension = "_" + module.name + ".stubs.o"; - else if ( extension == ".idl" || extension == ".IDL" ) - { - if ( module.type == RpcServer ) - newExtension = "_s.o"; - else if ( module.type == RpcClient ) - newExtension = "_c.o"; - else if ( module.type == RpcProxy ) - newExtension = "_p.o"; - else - newExtension = ".h"; - } - else - newExtension = "_" + module.name + ".o"; - - if ( module.type == BootSector ) - destination_directory = OutputDirectory; - else - destination_directory = IntermediateDirectory; - - const FileLocation *obj_file = new FileLocation( - destination_directory, - sourceFile->relative_path, - ReplaceExtension ( sourceFile->name, newExtension ) ); - PassThruCacheDirectory ( obj_file ); - - return obj_file; -} - -string -MingwModuleHandler::GetModuleCleanTarget ( const Module& module ) const -{ - return module.name + "_clean"; -} - -void -MingwModuleHandler::GetReferencedObjectLibraryModuleCleanTargets ( vector& moduleNames ) const -{ - for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ ) - { - Library& library = *module.non_if_data.libraries[i]; - if ( library.importedModule->type == ObjectLibrary ) - moduleNames.push_back ( GetModuleCleanTarget ( *library.importedModule ) ); - } -} - -void -MingwModuleHandler::GenerateCleanTarget () const -{ - if ( module.type == Alias ) - return; - - fprintf ( fMakefile, "# CLEAN TARGET\n" ); - fprintf ( fMakefile, - ".PHONY: %s_clean\n", - module.name.c_str() ); - vector referencedModuleNames; - GetReferencedObjectLibraryModuleCleanTargets ( referencedModuleNames ); - fprintf ( fMakefile, - "%s: %s\n\t-@${rm}", - GetModuleCleanTarget ( module ).c_str(), - v2s ( referencedModuleNames, 10 ).c_str () ); - for ( size_t i = 0; i < clean_files.size(); i++ ) - { - if ( ( i + 1 ) % 10 == 9 ) - fprintf ( fMakefile, " 2>$(NUL)\n\t-@${rm}" ); - fprintf ( fMakefile, " %s", clean_files[i].c_str() ); - } - fprintf ( fMakefile, " 2>$(NUL)\n" ); - - if( ProxyMakefile::GenerateProxyMakefile(module) ) - { - DirectoryLocation root; - - if ( backend->configuration.GenerateProxyMakefilesInSourceTree ) - root = SourceDirectory; - else - root = OutputDirectory; - - FileLocation proxyMakefile ( root, - module.output->relative_path, - "GNUmakefile" ); - fprintf ( fMakefile, "\t-@${rm} %s 2>$(NUL)\n", - backend->GetFullName ( proxyMakefile ).c_str () ); - } - - fprintf ( fMakefile, "clean: %s_clean\n\n", module.name.c_str() ); -} - -void -MingwModuleHandler::GenerateInstallTarget () const -{ - if ( !module.install ) - return; - fprintf ( fMakefile, "# INSTALL TARGET\n" ); - fprintf ( fMakefile, ".PHONY: %s_install\n", module.name.c_str() ); - fprintf ( fMakefile, - "%s_install: %s\n", - module.name.c_str (), - backend->GetFullName ( *module.install ).c_str () ); -} - -void -MingwModuleHandler::GenerateDependsTarget () const -{ - fprintf ( fMakefile, "# DEPENDS TARGET\n" ); - fprintf ( fMakefile, - ".PHONY: %s_depends\n", - module.name.c_str() ); - fprintf ( fMakefile, - "%s_depends: $(RBUILD_TARGET)\n", - module.name.c_str () ); - fprintf ( fMakefile, - "\t$(ECHO_RBUILD)\n" ); - fprintf ( fMakefile, - "\t$(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) -dm%s mingw\n", - module.name.c_str () ); -} - -string -MingwModuleHandler::GetObjectFilenames () -{ - const vector& compilationUnits = module.non_if_data.compilationUnits; - if ( compilationUnits.size () == 0 ) - return ""; - - string objectFilenames ( "" ); - for ( size_t i = 0; i < compilationUnits.size (); i++ ) - { - if ( objectFilenames.size () > 0 ) - objectFilenames += " "; - const FileLocation& compilationName = compilationUnits[i]->GetFilename (); - const FileLocation *object_file = GetObjectFilename ( &compilationName, module ); - objectFilenames += backend->GetFullName ( *object_file ); - delete object_file; - } - return objectFilenames; -} - -/* static */ string -MingwModuleHandler::GenerateGccDefineParametersFromVector ( - const vector& defines, - set& used_defs) -{ - string parameters; - - for ( size_t i = 0; i < defines.size (); i++ ) - { - Define& define = *defines[i]; - if (used_defs.find(define.name) != used_defs.end()) - continue; - if (parameters.length () > 0) - parameters += " "; - if (define.name.find('(') != string::npos) - parameters += "$(QT)"; - parameters += "-D"; - parameters += define.name; - if (define.value.length () > 0) - { - parameters += "="; - parameters += define.value; - } - if (define.name.find('(') != string::npos) - parameters += "$(QT)"; - used_defs.insert(used_defs.begin(),define.name); - } - return parameters; -} - -string -MingwModuleHandler::GenerateGccDefineParameters () const -{ - set used_defs; - string parameters = GenerateGccDefineParametersFromVector ( module.project.non_if_data.defines, used_defs ); - string s = GenerateGccDefineParametersFromVector ( module.non_if_data.defines, used_defs ); - if ( s.length () > 0 ) - { - parameters += " "; - parameters += s; - } - return parameters; -} - -string -MingwModuleHandler::ConcatenatePaths ( - const string& path1, - const string& path2 ) const -{ - if ( ( path1.length () == 0 ) || ( path1 == "." ) || ( path1 == "./" ) ) - return path2; - if ( path1[path1.length ()] == cSep ) - return path1 + path2; - else - return path1 + cSep + path2; -} - -/* static */ string -MingwModuleHandler::GenerateGccIncludeParametersFromVector ( const vector& includes ) -{ - string parameters, path_prefix; - for ( size_t i = 0; i < includes.size (); i++ ) - { - Include& include = *includes[i]; - if ( parameters.length () > 0 ) - parameters += " "; - parameters += "-I" + backend->GetFullPath ( *include.directory );; - } - return parameters; -} - -string -MingwModuleHandler::GenerateGccIncludeParameters () const -{ - string parameters = GenerateGccIncludeParametersFromVector ( module.non_if_data.includes ); - string s = GenerateGccIncludeParametersFromVector ( module.project.non_if_data.includes ); - if ( s.length () > 0 ) - { - parameters += " "; - parameters += s; - } - return parameters; -} - -string -MingwModuleHandler::GenerateCompilerParametersFromVector ( const vector& compilerFlags, const CompilerType type ) const -{ - string parameters; - for ( size_t i = 0; i < compilerFlags.size (); i++ ) - { - CompilerFlag& compilerFlag = *compilerFlags[i]; - if ( compilerFlag.compiler == type ) - parameters += " " + compilerFlag.flag; - } - return parameters; -} - -string -MingwModuleHandler::GenerateLinkerParametersFromVector ( const vector& linkerFlags ) const -{ - string parameters; - for ( size_t i = 0; i < linkerFlags.size (); i++ ) - { - LinkerFlag& linkerFlag = *linkerFlags[i]; - if ( parameters.length () > 0 ) - parameters += " "; - parameters += linkerFlag.flag; - } - return parameters; -} - -string -MingwModuleHandler::GenerateImportLibraryDependenciesFromVector ( - const vector& libraries ) -{ - string dependencies ( "" ); - int wrap_count = 0; - for ( size_t i = 0; i < libraries.size (); i++ ) - { - if ( wrap_count++ == 5 ) - dependencies += " \\\n\t\t", wrap_count = 0; - else if ( dependencies.size () > 0 ) - dependencies += " "; - dependencies += GetImportLibraryDependency ( *libraries[i]->importedModule ); - } - return dependencies; -} - -string -MingwModuleHandler::GenerateLinkerParameters () const -{ - return GenerateLinkerParametersFromVector ( module.linkerFlags ); -} - -void -MingwModuleHandler::GenerateMacro ( - const char* assignmentOperation, - const string& macro, - const IfableData& data, - set *used_defs, - bool generatingCompilerMacro ) -{ - size_t i; - bool generateAssignment; - - generateAssignment = (use_pch && module.pch != NULL ) || data.includes.size () > 0 || data.defines.size () > 0; - if ( generatingCompilerMacro ) - generateAssignment |= data.compilerFlags.size () > 0; - if ( generateAssignment ) - { - fprintf ( fMakefile, - "%s %s", - macro.c_str(), - assignmentOperation ); - } - - const FileLocation *pchFilename = GetPrecompiledHeaderFilename (); - if ( pchFilename ) - { - fprintf ( fMakefile, - " -I%s", - backend->GetFullPath ( *pchFilename ).c_str () ); - delete pchFilename; - } - - if ( generatingCompilerMacro ) - { - string compilerParameters = GenerateCompilerParametersFromVector ( data.compilerFlags, CompilerTypeDontCare ); - if ( compilerParameters.size () > 0 ) - { - fprintf ( - fMakefile, - "%s", - compilerParameters.c_str () ); - } - } - for ( i = 0; i < data.includes.size(); i++ ) - { - const Include& include = *data.includes[i]; - const FileLocation* includeDirectory = include.directory; - fprintf ( - fMakefile, - " -I%s", - backend->GetFullPath ( *includeDirectory ).c_str() ); - } - for ( i = 0; i < data.defines.size(); i++ ) - { - const Define& define = *data.defines[i]; - if ( used_defs ) - { - set::const_iterator last_define; - for (last_define = used_defs->begin (); - last_define != used_defs->end (); - last_define++) - { - if ( (*last_define)->name != define.name ) - continue; - if ( !define.overridable ) - { - throw InvalidOperationException ( (*last_define)->node->location.c_str (), - 0, - "Invalid override of define '%s', already defined at %s", - define.name.c_str (), - define.node->location.c_str () ); - } - if ( backend->configuration.Verbose ) - printf("%s: Overriding '%s' already defined at %s\n", - (*last_define)->node->location.c_str (), define.name.c_str (), - define.node->location.c_str () ); - break; - } - if ( last_define != used_defs->end () ) - continue; - } - fprintf ( - fMakefile, - " -D%s", - define.name.c_str() ); - if (define.value.length () > 0) - fprintf ( - fMakefile, - "=%s", - define.value.c_str() ); - if ( used_defs ) - used_defs->insert( used_defs->begin (), &define ); - } - if ( generateAssignment ) - { - fprintf ( fMakefile, "\n" ); - } -} - -void -MingwModuleHandler::GenerateMacros ( - const char* assignmentOperation, - const IfableData& data, - const vector* linkerFlags, - set& used_defs ) -{ - fprintf ( fMakefile, "# MACROS\n" ); - GenerateMacro ( assignmentOperation, - cflagsMacro, - data, - &used_defs, - true ); - GenerateMacro ( assignmentOperation, - windresflagsMacro, - data, - NULL, - false ); - - if ( linkerFlags != NULL ) - { - string linkerParameters = GenerateLinkerParametersFromVector ( *linkerFlags ); - if ( linkerParameters.size () > 0 ) - { - fprintf ( - fMakefile, - "%s %s %s\n", - linkerflagsMacro.c_str (), - assignmentOperation, - linkerParameters.c_str() ); - } - } - - if ( data.libraries.size () > 0 ) - { - string deps = GenerateImportLibraryDependenciesFromVector ( data.libraries ); - if ( deps.size () > 0 ) - { - fprintf ( - fMakefile, - "%s %s %s\n", - libsMacro.c_str(), - assignmentOperation, - deps.c_str() ); - } - } -} - -void -MingwModuleHandler::CleanupCompilationUnitVector ( vector& compilationUnits ) -{ - for ( size_t i = 0; i < compilationUnits.size (); i++ ) - delete compilationUnits[i]; -} - -void -MingwModuleHandler::GetModuleSpecificCompilationUnits ( vector& compilationUnits ) -{ -} - -void -MingwModuleHandler::GenerateSourceMacros ( - const IfableData& data ) -{ - size_t i; - - fprintf ( fMakefile, "# SOURCE MACROS\n" ); - const vector& compilationUnits = data.compilationUnits; - vector headers; - if ( compilationUnits.size () > 0 ) - { - fprintf ( - fMakefile, - "%s =", - sourcesMacro.c_str () ); - for ( i = 0; i < compilationUnits.size(); i++ ) - { - CompilationUnit& compilationUnit = *compilationUnits[i]; - const FileLocation& compilationName = compilationUnit.GetFilename (); - fprintf ( - fMakefile, - "%s%s", - ( i%10 == 9 ? " \\\n\t" : " " ), - backend->GetFullName ( compilationName ).c_str () ); - } - fprintf ( fMakefile, "\n" ); - } - - vector sourceCompilationUnits; - GetModuleSpecificCompilationUnits ( sourceCompilationUnits ); - for ( i = 0; i < sourceCompilationUnits.size (); i++ ) - { - const FileLocation& compilationName = sourceCompilationUnits[i]->GetFilename (); - fprintf ( - fMakefile, - "%s += %s\n", - sourcesMacro.c_str(), - backend->GetFullName ( compilationName ).c_str () ); - } - CleanupCompilationUnitVector ( sourceCompilationUnits ); -} - -void -MingwModuleHandler::GenerateObjectMacros ( - const IfableData& data ) -{ - size_t i; - const char* assignmentOperation = "="; - - const vector& compilationUnits = data.compilationUnits; - vector headers; - vector mcheaders; - vector mcresources; - fprintf ( fMakefile, "# OBJECT MACROS\n" ); - if ( compilationUnits.size () > 0 ) - { - for ( i = 0; i < compilationUnits.size (); i++ ) - { - CompilationUnit& compilationUnit = *compilationUnits[i]; - if ( compilationUnit.IsFirstFile () ) - { - const FileLocation& compilationName = compilationUnit.GetFilename (); - const FileLocation *object_file = GetObjectFilename ( &compilationName, module ); - fprintf ( fMakefile, - "%s := %s\n", - objectsMacro.c_str(), - backend->GetFullName ( *object_file ).c_str () ); - delete object_file; - assignmentOperation = "+="; - break; - } - } - fprintf ( - fMakefile, - "%s %s", - objectsMacro.c_str (), - assignmentOperation ); - for ( i = 0; i < compilationUnits.size(); i++ ) - { - CompilationUnit& compilationUnit = *compilationUnits[i]; - if ( !compilationUnit.IsFirstFile () ) - { - const FileLocation& compilationName = compilationUnit.GetFilename (); - const FileLocation *objectFilename = GetObjectFilename ( &compilationName, module ); - if ( GetExtension ( *objectFilename ) == ".h" ) - headers.push_back ( objectFilename ); - else if ( GetExtension ( *objectFilename ) == ".rc" ) - { - const FileLocation *headerFilename = GetMcHeaderFilename ( &compilationUnit.GetFilename () ); - mcheaders.push_back ( headerFilename ); - mcresources.push_back ( objectFilename ); - } - else - { - fprintf ( - fMakefile, - "%s%s", - ( i%10 == 9 ? " \\\n\t" : " " ), - backend->GetFullName ( *objectFilename ).c_str () ); - delete objectFilename; - } - } - } - fprintf ( fMakefile, "\n" ); - } - if ( headers.size () > 0 ) - { - fprintf ( - fMakefile, - "%s_HEADERS %s", - module.name.c_str (), - assignmentOperation ); - for ( i = 0; i < headers.size (); i++ ) - { - fprintf ( - fMakefile, - "%s%s", - ( i%10 == 9 ? " \\\n\t" : " " ), - backend->GetFullName ( *headers[i] ).c_str () ); - delete headers[i]; - } - fprintf ( fMakefile, "\n" ); - } - - if ( mcheaders.size () > 0 ) - { - fprintf ( - fMakefile, - "%s_MCHEADERS %s", - module.name.c_str (), - assignmentOperation ); - for ( i = 0; i < mcheaders.size (); i++ ) - { - fprintf ( - fMakefile, - "%s%s", - ( i%10 == 9 ? " \\\n\t" : " " ), - backend->GetFullName ( *mcheaders[i] ).c_str () ); - delete mcheaders[i]; - } - fprintf ( fMakefile, "\n" ); - } - - if ( mcresources.size () > 0 ) - { - fprintf ( - fMakefile, - "%s_RESOURCES %s", - module.name.c_str (), - assignmentOperation ); - for ( i = 0; i < mcresources.size (); i++ ) - { - fprintf ( - fMakefile, - "%s%s", - ( i%10 == 9 ? " \\\n\t" : " " ), - backend->GetFullName ( *mcresources[i] ).c_str () ); - delete mcresources[i]; - } - fprintf ( fMakefile, "\n" ); - } - - vector sourceCompilationUnits; - GetModuleSpecificCompilationUnits ( sourceCompilationUnits ); - for ( i = 0; i < sourceCompilationUnits.size (); i++ ) - { - const FileLocation& compilationName = sourceCompilationUnits[i]->GetFilename (); - const FileLocation *object_file = GetObjectFilename ( &compilationName, module ); - fprintf ( - fMakefile, - "%s += %s\n", - objectsMacro.c_str(), - backend->GetFullName ( *object_file ).c_str () ); - delete object_file; - } - CleanupCompilationUnitVector ( sourceCompilationUnits ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetPrecompiledHeaderFilename () const -{ - if ( !module.pch || !use_pch ) - return NULL; - return new FileLocation ( IntermediateDirectory, - module.pch->file->relative_path + "/.gch_" + module.name, - module.pch->file->name + ".gch" ); -} - -Rule arRule1 ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).a: $($(module_name)_OBJS) $(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).a", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule arRule2 ( "\t$(ECHO_AR)\n" - "\t${ar} -rc $@ $($(module_name)_OBJS)\n", - NULL ); -Rule arHostRule2 ( "\t$(ECHO_AR)\n" - "\t${host_ar} -rc $@ $($(module_name)_OBJS)\n", - NULL ); -Rule gasRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_GAS)\n" - "\t${gcc} -x assembler-with-cpp -o $@ -D__ASM__ $($(module_name)_CFLAGS) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule bootRule ( "$(source): ${$(module_name)_precondition}\n" - "$(module_output): $(source)$(dependencies) | $(OUTPUT)$(SEP)$(source_dir)\n" - "\t$(ECHO_NASM)\n" - "\t$(Q)${nasm} -f win32 $< -o $@ $($(module_name)_NASMFLAGS)\n", - "$(OUTPUT)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule nasmRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_NASM)\n" - "\t$(Q)${nasm} -f win32 $< -o $@ $($(module_name)_NASMFLAGS)\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule windresRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).coff: $(source)$(dependencies) $(WRC_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir) $(TEMPORARY)\n" - "\t$(ECHO_WRC)\n" - "\t${gcc} -xc -E -DRC_INVOKED ${$(module_name)_RCFLAGS} $(source) > $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp\n" - "\t$(Q)$(WRC_TARGET) ${$(module_name)_RCFLAGS} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp\n" - "\t-@${rm} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp 2>$(NUL)\n" - "\t${windres} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp -o $@\n" - "\t-@${rm} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp 2>$(NUL)\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).coff", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule wmcRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc $(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h: $(WMC_TARGET) $(source) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_WMC)\n" - "\t$(Q)$(WMC_TARGET) -i -H $(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h -o $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc $(source)\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc", - "$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule winebuildKMDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_WINEBLD)\n" - "\t${gcc} -xc -E $(source) -I. > $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec\n" - "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).spec.def --def -E $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec\n\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec.def", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule winebuildKMRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c:\n" - "\t${cp} $(NUL) $@ 1>$(NUL)\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule winebuildDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_WINEBLD)\n" - "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).spec.def --def -E $(source)\n\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec.def", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule winebuildRule ( "$(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(source_path)$(SEP)$(source_name_noext).spec $(WINEBUILD_TARGET)\n" - "\t$(ECHO_WINEBLD)\n" - "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c --pedll $(source_path)$(SEP)$(source_name_noext).spec\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule widlHeaderRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).h: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_WIDL)\n" - "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).h $(source)\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).h", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule widlServerRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.h: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_WIDL)\n" - "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.h -s -S $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.c $(source)\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.h$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.h", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.c", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_s.o", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule widlClientRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.h: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_WIDL)\n" - "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.h -c -C $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.c $(source)\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.h$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.h", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.c", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_c.o", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule widlProxyRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.h: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_WIDL)\n" - "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.h -p -P $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.c $(source)\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.c $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.h$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.h", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.c", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_p.o", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule widlTlbRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(module_name).tlb: $(source)$(dependencies) $(WIDL_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_WIDL)\n" - "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -t -T $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).tlb $(source)\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL ); -Rule gccRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL ); -Rule gccHostRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${host_gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL ); -Rule gppRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gpp} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL ); -Rule gppHostRule ( "$(source): ${$(module_name)_precondition}\n" - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n" - "\t$(ECHO_CC)\n" - "\t${host_gpp} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", - "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o", NULL ); -Rule emptyRule ( "", NULL ); - -void -MingwModuleHandler::GenerateGccCommand ( - const FileLocation* sourceFile, - const Rule *rule, - const string& extraDependencies ) -{ - const FileLocation *pchFilename = GetPrecompiledHeaderFilename (); - string dependencies = extraDependencies; - - string flags; - string extension = GetExtension ( *sourceFile ); - if ( extension == ".cc" || extension == ".cpp" || extension == ".cxx" ) - flags = GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags, CompilerTypeCPP ); - else - flags = GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags, CompilerTypeCC ); - - if ( pchFilename ) - { - dependencies += " " + backend->GetFullName ( *pchFilename ); - delete pchFilename; - } - - /* WIDL generated headers may be used */ - vector rpcDependencies; - GetRpcHeaderDependencies ( rpcDependencies ); - if ( rpcDependencies.size () > 0 ) - dependencies += " " + v2s ( backend, rpcDependencies, 5 ); - - rule->Execute ( fMakefile, backend, module, sourceFile, clean_files, dependencies, flags ); -} - -string -MingwModuleHandler::GetPropertyValue ( const Module& module, const std::string& name ) -{ - const Property* property = module.project.LookupProperty(name); - - if (property) - return property->value; - else - return string ( "" ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetRpcServerHeaderFilename ( const FileLocation *base ) const -{ - string newname = GetBasename ( base->name ) + "_s.h"; - return new FileLocation ( IntermediateDirectory, base->relative_path, newname ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetRpcClientHeaderFilename ( const FileLocation *base ) const -{ - string newname = GetBasename ( base->name ) + "_c.h"; - return new FileLocation ( IntermediateDirectory, base->relative_path, newname ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetRpcProxyHeaderFilename ( const FileLocation *base ) const -{ - string newname = GetBasename ( base->name ) + "_p.h"; - return new FileLocation ( IntermediateDirectory, base->relative_path, newname ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetIdlHeaderFilename ( const FileLocation *base ) const -{ - string newname = GetBasename ( base->name ) + ".h"; - return new FileLocation ( IntermediateDirectory, base->relative_path, newname ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetMcHeaderFilename ( const FileLocation *base ) const -{ - string newname = GetBasename ( base->name ) + ".h"; - return new FileLocation ( IntermediateDirectory, "include/reactos" , newname ); -} - -void -MingwModuleHandler::GenerateCommands ( - const CompilationUnit& compilationUnit, - const string& extraDependencies ) -{ - const FileLocation& sourceFile = compilationUnit.GetFilename (); - string extension = GetExtension ( sourceFile ); - std::transform ( extension.begin (), extension.end (), extension.begin (), tolower ); - - struct - { - HostType host; - ModuleType type; - string extension; - Rule* rule; - } rules[] = { - { HostDontCare, TypeDontCare, ".s", &gasRule }, - { HostDontCare, BootSector, ".asm", &bootRule }, - { HostDontCare, TypeDontCare, ".asm", &nasmRule }, - { HostDontCare, TypeDontCare, ".rc", &windresRule }, - { HostDontCare, TypeDontCare, ".mc", &wmcRule }, - { HostFalse, Kernel, ".spec", &winebuildKMRule }, - { HostFalse, KernelModeDLL, ".spec", &winebuildKMRule }, - { HostDontCare, TypeDontCare, ".spec", &winebuildRule }, - { HostDontCare, RpcServer, ".idl", &widlServerRule }, - { HostDontCare, RpcClient, ".idl", &widlClientRule }, - { HostDontCare, RpcProxy, ".idl", &widlProxyRule }, - { HostDontCare, EmbeddedTypeLib, ".idl", &widlTlbRule }, - { HostDontCare, TypeDontCare, ".idl", &widlHeaderRule }, - { HostTrue, TypeDontCare, ".c", &gccHostRule }, - { HostTrue, TypeDontCare, ".cc", &gppHostRule }, - { HostTrue, TypeDontCare, ".cpp", &gppHostRule }, - { HostTrue, TypeDontCare, ".cxx", &gppHostRule }, - { HostFalse, TypeDontCare, ".c", &gccRule }, - { HostFalse, TypeDontCare, ".cc", &gppRule }, - { HostFalse, TypeDontCare, ".cpp", &gppRule }, - { HostFalse, TypeDontCare, ".cxx", &gppRule }, - { HostFalse, Cabinet, ".*", &emptyRule } - }; - size_t i; - Rule *customRule = NULL; - - fprintf ( fMakefile, "# COMMANDS\n" ); - - for ( i = 0; i < sizeof ( rules ) / sizeof ( rules[0] ); i++ ) - { - if ( rules[i].host != HostDontCare && rules[i].host != ModuleHandlerInformations[module.type].DefaultHost ) - continue; - if ( rules[i].type != TypeDontCare && rules[i].type != module.type ) - continue; - if ( rules[i].extension != extension && rules[i].extension != ".*") - continue; - customRule = rules[i].rule; - break; - } - - if ( extension == ".c" || extension == ".cc" || extension == ".cpp" || extension == ".cxx" ) - { - GenerateGccCommand ( &sourceFile, - customRule, - GetCompilationUnitDependencies ( compilationUnit ) + extraDependencies ); - } - else if ( customRule ) - customRule->Execute ( fMakefile, backend, module, &sourceFile, clean_files ); - else - { - throw InvalidOperationException ( __FILE__, - __LINE__, - "Unsupported filename extension '%s' in file '%s'", - extension.c_str (), - backend->GetFullName ( sourceFile ).c_str () ); - } -} - -void -MingwModuleHandler::GenerateBuildMapCode ( const FileLocation *mapTarget ) -{ - fprintf ( fMakefile, "# BUILD MAP CODE\n" ); - - fprintf ( fMakefile, - "ifeq ($(ROS_BUILDMAP),full)\n" ); - - FileLocation mapFilename ( OutputDirectory, - module.output->relative_path, - GetBasename ( module.output->name ) + ".map" ); - CLEAN_FILE ( mapFilename ); - - fprintf ( fMakefile, - "\t$(ECHO_OBJDUMP)\n" ); - fprintf ( fMakefile, - "\t$(Q)${objdump} -d -S %s > %s\n", - mapTarget ? backend->GetFullName ( *mapTarget ).c_str () : "$@", - backend->GetFullName ( mapFilename ).c_str () ); - - fprintf ( fMakefile, - "else\n" ); - fprintf ( fMakefile, - "ifeq ($(ROS_BUILDMAP),yes)\n" ); - - fprintf ( fMakefile, - "\t$(ECHO_NM)\n" ); - fprintf ( fMakefile, - "\t$(Q)${nm} --numeric-sort %s > %s\n", - mapTarget ? backend->GetFullName ( *mapTarget ).c_str () : "$@", - backend->GetFullName ( mapFilename ).c_str () ); - - fprintf ( fMakefile, - "endif\n" ); - - fprintf ( fMakefile, - "endif\n" ); -} - -void -MingwModuleHandler::GenerateBuildNonSymbolStrippedCode () -{ - fprintf ( fMakefile, "# BUILD NO STRIP CODE\n" ); - - fprintf ( fMakefile, - "ifeq ($(ROS_BUILDNOSTRIP),yes)\n" ); - - FileLocation nostripFilename ( OutputDirectory, - module.output->relative_path, - GetBasename ( module.output->name ) + ".nostrip" + GetExtension ( *module.output ) ); - CLEAN_FILE ( nostripFilename ); - - OutputCopyCommand ( *module.output, nostripFilename ); - - fprintf ( fMakefile, - "endif\n" ); -} - -void -MergeStringVector ( const Backend* backend, - const vector& input, - vector& output ) -{ - int wrap_at = 25; - string s; - int wrap_count = -1; - for ( size_t i = 0; i < input.size (); i++ ) - { - if ( wrap_count++ == wrap_at ) - { - output.push_back ( s ); - s = ""; - wrap_count = 0; - } - else if ( s.size () > 0) - s += " "; - s += backend->GetFullName ( input[i] ); - } - if ( s.length () > 0 ) - output.push_back ( s ); -} - -void -MingwModuleHandler::GetObjectsVector ( const IfableData& data, - vector& objectFiles ) const -{ - for ( size_t i = 0; i < data.compilationUnits.size (); i++ ) - { - CompilationUnit& compilationUnit = *data.compilationUnits[i]; - const FileLocation& compilationName = compilationUnit.GetFilename (); - const FileLocation *object_file = GetObjectFilename ( &compilationName, module ); - objectFiles.push_back ( *object_file ); - delete object_file; - } -} - -void -MingwModuleHandler::GenerateCleanObjectsAsYouGoCode () const -{ - if ( backend->configuration.CleanAsYouGo ) - { - vector objectFiles; - GetObjectsVector ( module.non_if_data, - objectFiles ); - vector lines; - MergeStringVector ( backend, - objectFiles, - lines ); - for ( size_t i = 0; i < lines.size (); i++ ) - { - fprintf ( fMakefile, - "\t-@${rm} %s 2>$(NUL)\n", - lines[i].c_str () ); - } - } -} - -void -MingwModuleHandler::GenerateRunRsymCode () const -{ - fprintf ( fMakefile, "# RUN RSYM CODE\n" ); - fprintf ( fMakefile, - "ifneq ($(ROS_GENERATE_RSYM),no)\n" ); - fprintf ( fMakefile, - "\t$(ECHO_RSYM)\n" ); - fprintf ( fMakefile, - "\t$(Q)$(RSYM_TARGET) $@ $@\n\n" ); - fprintf ( fMakefile, - "endif\n" ); -} - -void -MingwModuleHandler::GenerateRunStripCode () const -{ - fprintf ( fMakefile, "# RUN STRIP CODE\n" ); - fprintf ( fMakefile, - "ifeq ($(ROS_LEAN_AND_MEAN),yes)\n" ); - fprintf ( fMakefile, - "\t$(ECHO_STRIP)\n" ); - fprintf ( fMakefile, - "\t${strip} -s -x -X $@\n\n" ); - fprintf ( fMakefile, - "endif\n" ); -} - -void -MingwModuleHandler::GenerateLinkerCommand ( - const string& dependencies, - const string& linkerParameters, - const string& pefixupParameters ) -{ - const FileLocation *target_file = GetTargetFilename ( module, NULL ); - const FileLocation *definitionFilename = GetDefinitionFilename (); - string linker = "${ld}"; - string objectsMacro = GetObjectsMacro ( module ); - string libsMacro = GetLibsMacro (); - - fprintf ( fMakefile, "# LINKER COMMAND\n" ); - - string target_macro ( GetTargetMacro ( module ) ); - string target_folder ( backend->GetFullPath ( *target_file ) ); - - string linkerScriptArgument; - if ( module.linkerScript != NULL ) - linkerScriptArgument = ssprintf ( " -T %s", backend->GetFullName ( *module.linkerScript->file ).c_str () ); - else - linkerScriptArgument = ""; - - fprintf ( fMakefile, - "%s: %s %s $(RSYM_TARGET) $(PEFIXUP_TARGET) | %s\n", - target_macro.c_str (), - definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "", - dependencies.c_str (), - target_folder.c_str () ); - fprintf ( fMakefile, "\t$(ECHO_LD)\n" ); - string targetName ( module.output->name ); - - /* check if we need to add default C++ libraries, ie if we have - * a C++ user-mode module without the -nostdlib linker flag - */ - bool link_defaultlibs = module.cplusplus && - linkerParameters.find ("-nostdlib") == string::npos && - !(module.type == KernelModeDLL || module.type == KernelModeDriver); - - if ( !module.HasImportLibrary() ) - { - fprintf ( fMakefile, - "\t%s %s%s %s %s %s %s -o %s\n", - linker.c_str (), - linkerParameters.c_str (), - linkerScriptArgument.c_str (), - objectsMacro.c_str (), - link_defaultlibs ? "$(PROJECT_LPPFLAGS) " : "", - libsMacro.c_str (), - GetLinkerMacro ().c_str (), - target_macro.c_str () ); - } - else - { - FileLocation temp_exp ( TemporaryDirectory, - "", - module.name + ".temp.exp" ); - CLEAN_FILE ( temp_exp ); - - fprintf ( fMakefile, - "\t${dlltool} --dllname %s --def %s --output-exp %s%s%s\n", - targetName.c_str (), - definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "", - backend->GetFullName ( temp_exp ).c_str (), - module.mangledSymbols ? "" : " --kill-at", - module.underscoreSymbols ? " --add-underscore" : "" ); - - fprintf ( fMakefile, - "\t%s %s%s %s %s %s %s %s -o %s\n", - - linker.c_str (), - linkerParameters.c_str (), - linkerScriptArgument.c_str (), - backend->GetFullName ( temp_exp ).c_str (), - objectsMacro.c_str (), - link_defaultlibs ? "$(PROJECT_LPPFLAGS) " : "", - libsMacro.c_str (), - GetLinkerMacro ().c_str (), - target_macro.c_str () ); - - fprintf ( fMakefile, - "\t$(Q)$(PEFIXUP_TARGET) %s -exports%s\n", - target_macro.c_str (), - pefixupParameters.c_str() ); - - fprintf ( fMakefile, - "\t-@${rm} %s 2>$(NUL)\n", - backend->GetFullName ( temp_exp ).c_str () ); - } - - GenerateBuildMapCode (); - GenerateBuildNonSymbolStrippedCode (); - GenerateRunRsymCode (); - GenerateRunStripCode (); - GenerateCleanObjectsAsYouGoCode (); - - if ( definitionFilename ) - delete definitionFilename; - delete target_file; -} - -void -MingwModuleHandler::GeneratePhonyTarget() const -{ - string targetMacro ( GetTargetMacro ( module ) ); - const FileLocation *target_file = GetTargetFilename ( module, NULL ); - - fprintf ( fMakefile, "# PHONY TARGET\n" ); - fprintf ( fMakefile, - ".PHONY: %s\n\n", - targetMacro.c_str ()); - fprintf ( fMakefile, "%s: | %s\n", - targetMacro.c_str (), - backend->GetFullPath ( *target_file ).c_str () ); - - delete target_file; -} - -void -MingwModuleHandler::GenerateObjectFileTargets ( const IfableData& data ) -{ - size_t i; - string moduleDependencies; - - fprintf ( fMakefile, "# OBJECT FILE TARGETS\n" ); - - const vector& compilationUnits = data.compilationUnits; - for ( i = 0; i < compilationUnits.size (); i++ ) - { - CompilationUnit& compilationUnit = *compilationUnits[i]; - const FileLocation& compilationName = compilationUnit.GetFilename (); - const FileLocation *objectFilename = GetObjectFilename ( &compilationName, module ); - if ( GetExtension ( *objectFilename ) == ".h" ) - moduleDependencies += ssprintf ( " $(%s_HEADERS)", module.name.c_str () ); - else if ( GetExtension ( *objectFilename ) == ".rc" ) - moduleDependencies += ssprintf ( " $(%s_RESOURCES)", module.name.c_str () ); - delete objectFilename; - } - - for ( i = 0; i < compilationUnits.size (); i++ ) - { - GenerateCommands ( *compilationUnits[i], - moduleDependencies ); - fprintf ( fMakefile, - "\n" ); - } - - vector sourceCompilationUnits; - GetModuleSpecificCompilationUnits ( sourceCompilationUnits ); - for ( i = 0; i < sourceCompilationUnits.size (); i++ ) - { - GenerateCommands ( *sourceCompilationUnits[i], - moduleDependencies ); - } - CleanupCompilationUnitVector ( sourceCompilationUnits ); -} - -void -MingwModuleHandler::GenerateObjectFileTargets () -{ - const FileLocation *pchFilename = GetPrecompiledHeaderFilename (); - - fprintf ( fMakefile, "# OBJECT FILE TARGETS\n" ); - - if ( pchFilename ) - { - string cc = ( ModuleHandlerInformations[module.type].DefaultHost == HostTrue ? "${host_gcc}" : "${gcc}" ); - string cppc = ( ModuleHandlerInformations[module.type].DefaultHost == HostTrue ? "${host_gpp}" : "${gpp}" ); - - const FileLocation& baseHeaderFile = *module.pch->file; - CLEAN_FILE ( *pchFilename ); - string dependencies = backend->GetFullName ( baseHeaderFile ); - /* WIDL generated headers may be used */ - vector rpcDependencies; - GetRpcHeaderDependencies ( rpcDependencies ); - if ( rpcDependencies.size () > 0 ) - dependencies += " " + v2s ( backend, rpcDependencies, 5 ); - fprintf ( fMakefile, - "%s: %s | %s\n", - backend->GetFullName ( *pchFilename ).c_str(), - dependencies.c_str(), - backend->GetFullPath ( *pchFilename ).c_str() ); - fprintf ( fMakefile, "\t$(ECHO_PCH)\n" ); - fprintf ( fMakefile, - "\t%s -o %s %s -g %s\n\n", - module.cplusplus ? cppc.c_str() : cc.c_str(), - backend->GetFullName ( *pchFilename ).c_str(), - cflagsMacro.c_str(), - backend->GetFullName ( baseHeaderFile ).c_str() ); - delete pchFilename; - } - - GenerateObjectFileTargets ( module.non_if_data ); - fprintf ( fMakefile, "\n" ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GenerateArchiveTarget () -{ - const FileLocation *archiveFilename = GetModuleArchiveFilename (); - const FileLocation *definitionFilename = GetDefinitionFilename (); - - fprintf ( fMakefile, "# ARCHIVE TARGET\n" ); - - if ( IsStaticLibrary ( module ) && definitionFilename ) - { - arRule1.Execute ( fMakefile, - backend, - module, - archiveFilename, - clean_files, - backend->GetFullName ( *definitionFilename ).c_str () ); - - fprintf ( fMakefile, - "\t${dlltool} --dllname %s --def %s --output-lib $@%s%s\n", - module.importLibrary->dllname.c_str (), - backend->GetFullName ( *definitionFilename ).c_str (), - module.mangledSymbols ? "" : " --kill-at", - module.underscoreSymbols ? " --add-underscore" : "" ); - } - else - arRule1.Execute ( fMakefile, backend, module, archiveFilename, clean_files ); - - if ( definitionFilename ) - delete definitionFilename; - - if(module.type == HostStaticLibrary) - arHostRule2.Execute ( fMakefile, backend, module, archiveFilename, clean_files ); - else - arRule2.Execute ( fMakefile, backend, module, archiveFilename, clean_files ); - - GenerateCleanObjectsAsYouGoCode (); - - fprintf ( fMakefile, "\n" ); - - return archiveFilename; -} - -string -MingwModuleHandler::GetCFlagsMacro () const -{ - return ssprintf ( "$(%s_CFLAGS)", - module.name.c_str () ); -} - -/*static*/ string -MingwModuleHandler::GetObjectsMacro ( const Module& module ) -{ - return ssprintf ( "$(%s_OBJS)", - module.name.c_str () ); -} - -string -MingwModuleHandler::GetLinkingDependenciesMacro () const -{ - return ssprintf ( "$(%s_LINKDEPS)", module.name.c_str () ); -} - -string -MingwModuleHandler::GetLibsMacro () const -{ - return ssprintf ( "$(%s_LIBS)", module.name.c_str () ); -} - -string -MingwModuleHandler::GetLinkerMacro () const -{ - return ssprintf ( "$(%s_LFLAGS)", - module.name.c_str () ); -} - -string -MingwModuleHandler::GetModuleTargets ( const Module& module ) -{ - if ( ReferenceObjects ( module ) ) - return GetObjectsMacro ( module ); - else - { - const FileLocation *target_file = GetTargetFilename ( module, NULL ); - string target = backend->GetFullName ( *target_file ).c_str (); - delete target_file; - return target; - } -} - -void -MingwModuleHandler::GenerateSourceMacro () -{ - sourcesMacro = ssprintf ( "%s_SOURCES", module.name.c_str ()); - - GenerateSourceMacros ( module.non_if_data ); - - // future references to the macro will be to get its values - sourcesMacro = ssprintf ("$(%s)", sourcesMacro.c_str ()); -} - -void -MingwModuleHandler::GenerateObjectMacro () -{ - objectsMacro = ssprintf ("%s_OBJS", module.name.c_str ()); - - GenerateObjectMacros ( module.non_if_data ); - - // future references to the macro will be to get its values - objectsMacro = ssprintf ("$(%s)", objectsMacro.c_str ()); -} - -void -MingwModuleHandler::GenerateTargetMacro () -{ - fprintf ( fMakefile, "# TARGET MACRO\n" ); - fprintf ( fMakefile, - "%s := %s\n", - GetTargetMacro ( module, false ).c_str (), - GetModuleTargets ( module ).c_str () ); -} - -void -MingwModuleHandler::GetRpcHeaderDependencies ( - vector& dependencies ) const -{ - for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ ) - { - Library& library = *module.non_if_data.libraries[i]; - if ( library.importedModule->type == RpcServer || - library.importedModule->type == RpcClient || - library.importedModule->type == RpcProxy || - library.importedModule->type == IdlHeader ) - { - for ( size_t j = 0; j < library.importedModule->non_if_data.compilationUnits.size (); j++ ) - { - CompilationUnit& compilationUnit = *library.importedModule->non_if_data.compilationUnits[j]; - const FileLocation& sourceFile = compilationUnit.GetFilename (); - string extension = GetExtension ( sourceFile ); - if ( extension == ".idl" || extension == ".IDL" ) - { - string basename = GetBasename ( sourceFile.name ); - if ( library.importedModule->type == RpcServer ) - { - const FileLocation *header = GetRpcServerHeaderFilename ( &sourceFile ); - dependencies.push_back ( *header ); - delete header; - } - if ( library.importedModule->type == RpcClient ) - { - const FileLocation *header = GetRpcClientHeaderFilename ( &sourceFile ); - dependencies.push_back ( *header ); - delete header; - } - if ( library.importedModule->type == RpcProxy ) - { - const FileLocation *header = GetRpcProxyHeaderFilename ( &sourceFile ); - dependencies.push_back ( *header ); - delete header; - } - if ( library.importedModule->type == IdlHeader ) - { - const FileLocation *header = GetIdlHeaderFilename ( &sourceFile ); - dependencies.push_back ( *header ); - delete header; - } - } - } - } - } -} - -void -MingwModuleHandler::GenerateOtherMacros () -{ - set used_defs; - - fprintf ( fMakefile, "# OTHER MACROS\n" ); - - cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str ()); - nasmflagsMacro = ssprintf ("%s_NASMFLAGS", module.name.c_str ()); - windresflagsMacro = ssprintf ("%s_RCFLAGS", module.name.c_str ()); - widlflagsMacro = ssprintf ("%s_WIDLFLAGS", module.name.c_str ()); - linkerflagsMacro = ssprintf ("%s_LFLAGS", module.name.c_str ()); - libsMacro = ssprintf("%s_LIBS", module.name.c_str ()); - linkDepsMacro = ssprintf ("%s_LINKDEPS", module.name.c_str ()); - - GenerateMacros ( - "=", - module.non_if_data, - &module.linkerFlags, - used_defs ); - - if ( ModuleHandlerInformations[module.type].DefaultHost == HostFalse ) - { - GenerateMacros ( - "+=", - module.project.non_if_data, - NULL, - used_defs ); - } - - if ( IsWineModule() ) - { - vector s; - GetSpecImplibDependencies ( s, module.importLibrary->source ); - - fprintf ( - fMakefile, - "%s +=", - linkDepsMacro.c_str() ); - for ( size_t i = 0; i < s.size(); i++ ) - fprintf ( fMakefile, - " %s", - backend->GetFullName ( s[i] ).c_str () ); - fprintf ( fMakefile, "\n" ); - } - - string globalCflags = ""; - if ( ModuleHandlerInformations[module.type].DefaultHost == HostFalse ) - globalCflags += " $(PROJECT_CFLAGS)"; - else - globalCflags += " -Wall -Wpointer-arith -D__REACTOS__"; - globalCflags += " -g"; - if ( backend->usePipe ) - globalCflags += " -pipe"; - if ( !module.allowWarnings ) - globalCflags += " -Werror"; - if ( ModuleHandlerInformations[module.type].DefaultHost == HostTrue ) - { - if ( module.cplusplus ) - globalCflags += " $(HOST_CPPFLAGS)"; - else - globalCflags += " -Wno-strict-aliasing $(HOST_CFLAGS)"; - } - else - { - if ( module.cplusplus ) - { - // HACK: use host headers when building C++ - globalCflags += " $(HOST_CPPFLAGS)"; - } - else - globalCflags += " -nostdinc"; - } - - // Always force disabling of sibling calls optimisation for GCC - // (TODO: Move to version-specific once this bug is fixed in GCC) - globalCflags += " -fno-optimize-sibling-calls"; - - fprintf ( - fMakefile, - "%s +=%s\n", - cflagsMacro.c_str (), - globalCflags.c_str () ); - - if ( ModuleHandlerInformations[module.type].DefaultHost == HostFalse ) - { - fprintf ( - fMakefile, - "%s += $(PROJECT_RCFLAGS)\n", - windresflagsMacro.c_str () ); - - fprintf ( - fMakefile, - "%s += $(PROJECT_WIDLFLAGS) -I%s\n", - widlflagsMacro.c_str (), - module.output->relative_path.c_str () ); - - fprintf ( - fMakefile, - "%s_LFLAGS := $(PROJECT_LFLAGS) -g $(%s_LFLAGS)\n", - module.name.c_str (), - module.name.c_str () ); - } - else - { - fprintf ( - fMakefile, - "%s_LFLAGS += $(HOST_LFLAGS)\n", - module.name.c_str () ); - } - - fprintf ( - fMakefile, - "%s += $(%s)\n", - linkDepsMacro.c_str (), - libsMacro.c_str () ); - - const char *cflags = ModuleHandlerInformations[module.type].cflags; - if ( strlen( cflags ) > 0 ) - { - fprintf ( fMakefile, - "%s += %s\n\n", - cflagsMacro.c_str (), - cflags ); - } - - const char* nasmflags = ModuleHandlerInformations[module.type].nasmflags; - if ( strlen( nasmflags ) > 0 ) - { - fprintf ( fMakefile, - "%s += %s\n\n", - nasmflagsMacro.c_str (), - nasmflags ); - } - - const char *linkerflags = ModuleHandlerInformations[module.type].linkerflags; - if ( strlen( linkerflags ) > 0 ) - { - fprintf ( fMakefile, - "%s += %s\n\n", - linkerflagsMacro.c_str (), - linkerflags ); - } - - if ( IsStaticLibrary ( module ) && module.isStartupLib ) - { - fprintf ( fMakefile, - "%s += -Wno-main\n\n", - cflagsMacro.c_str () ); - } - - fprintf ( fMakefile, "\n\n" ); - - // future references to the macros will be to get their values - cflagsMacro = ssprintf ("$(%s)", cflagsMacro.c_str ()); - nasmflagsMacro = ssprintf ("$(%s)", nasmflagsMacro.c_str ()); - widlflagsMacro = ssprintf ("$(%s)", widlflagsMacro.c_str ()); -} - -void -MingwModuleHandler::GenerateRules () -{ - fprintf ( fMakefile, "# RULES\n" ); - string targetMacro = GetTargetMacro ( module ); - //CLEAN_FILE ( targetMacro ); - CLEAN_FILE ( FileLocation ( SourceDirectory, "", targetMacro ) ); - - // generate phony target for module name - fprintf ( fMakefile, ".PHONY: %s\n", - module.name.c_str () ); - string dependencies = GetTargetMacro ( module ); - if ( module.type == Test ) - dependencies += " $(REGTESTS_RUN_TARGET)"; - fprintf ( fMakefile, "%s: %s\n\n", - module.name.c_str (), - dependencies.c_str () ); - if ( module.type == Test ) - { - fprintf ( fMakefile, - "\t@%s\n", - targetMacro.c_str ()); - } - - if ( !ReferenceObjects ( module ) ) - { - const FileLocation* ar_target = GenerateArchiveTarget (); - delete ar_target; - } - - if ( IsWineModule() ) - { - Rule * defRule; - - if ( module.type == Kernel || module.type == KernelModeDLL || module.type == KernelModeDriver ) - defRule = &winebuildKMDefRule; - else - defRule = &winebuildDefRule; - - defRule->Execute ( fMakefile, backend, module, module.importLibrary->source, clean_files ); - } - - GenerateObjectFileTargets (); -} - -void -MingwModuleHandler::GetInvocationDependencies ( - const Module& module, - string_list& dependencies ) -{ - for ( size_t i = 0; i < module.invocations.size (); i++ ) - { - Invoke& invoke = *module.invocations[i]; - if ( invoke.invokeModule == &module ) - /* Protect against circular dependencies */ - continue; - invoke.GetTargets ( dependencies ); - } -} - -void -MingwModuleHandler::GenerateInvocations () const -{ - if ( module.invocations.size () == 0 ) - return; - - fprintf ( fMakefile, "# INVOCATIONS\n" ); - - size_t iend = module.invocations.size (); - for ( size_t i = 0; i < iend; i++ ) - { - const Invoke& invoke = *module.invocations[i]; - - if ( invoke.invokeModule->type != BuildTool ) - { - throw XMLInvalidBuildFileException ( - module.node.location, - "Only modules of type buildtool can be invoked." ); - } - - string invokeTarget = module.GetInvocationTarget ( i ); - string_list invoke_targets; - assert ( invoke_targets.size() ); - invoke.GetTargets ( invoke_targets ); - fprintf ( fMakefile, - ".PHONY: %s\n\n", - invokeTarget.c_str () ); - fprintf ( fMakefile, - "%s:", - invokeTarget.c_str () ); - size_t j, jend = invoke_targets.size(); - for ( j = 0; j < jend; j++ ) - { - fprintf ( fMakefile, - " %s", - invoke_targets[i].c_str () ); - } - fprintf ( fMakefile, "\n\n%s", invoke_targets[0].c_str () ); - for ( j = 1; j < jend; j++ ) - fprintf ( fMakefile, - " %s", - invoke_targets[i].c_str () ); - fprintf ( fMakefile, - ": %s\n", - NormalizeFilename ( backend->GetFullName ( *invoke.invokeModule->output ) ).c_str () ); - fprintf ( fMakefile, "\t$(ECHO_INVOKE)\n" ); - fprintf ( fMakefile, - "\t%s %s\n\n", - NormalizeFilename ( backend->GetFullName ( *invoke.invokeModule->output ) ).c_str (), - invoke.GetParameters ().c_str () ); - } -} - -string -MingwModuleHandler::GetPreconditionDependenciesName () const -{ - return module.name + "_precondition"; -} - -void -MingwModuleHandler::GetDefaultDependencies ( - string_list& dependencies ) const -{ - /* Avoid circular dependency */ - if ( ModuleHandlerInformations[module.type].DefaultHost == HostTrue ) - return; - - if (module.name != "psdk" && - module.name != "dxsdk") - { - dependencies.push_back ( "$(PSDK_TARGET) $(psdk_HEADERS)" ); - dependencies.push_back ( "$(DXSDK_TARGET) $(dxsdk_HEADERS)" ); - } - - if (module.name != "errcodes" && - module.name != "bugcodes" && - module.name != "ntstatus") - { - dependencies.push_back ( "$(ERRCODES_TARGET) $(ERRCODES_MCHEADERS)" ); - dependencies.push_back ( "$(BUGCODES_TARGET) $(BUGCODES_MCHEADERS)" ); - dependencies.push_back ( "$(NTSTATUS_TARGET) $(NTSTATUS_MCHEADERS)" ); - } - - ///* Check if any dependent library relies on the generated headers */ - //for ( size_t i = 0; i < module.project.modules.size (); i++ ) - //{ - // const Module& m = *module.project.modules[i]; - // for ( size_t j = 0; j < m.non_if_data.compilationUnits.size (); j++ ) - // { - // CompilationUnit& compilationUnit = *m.non_if_data.compilationUnits[j]; - // const FileLocation& sourceFile = compilationUnit.GetFilename (); - // string extension = GetExtension ( sourceFile ); - // if (extension == ".mc" || extension == ".MC" ) - // { - // string dependency = ssprintf ( "$(%s_MCHEADERS)", m.name.c_str () ); - // dependencies.push_back ( dependency ); - // } - // } - //} -} - -void -MingwModuleHandler::GeneratePreconditionDependencies () -{ - fprintf ( fMakefile, "# PRECONDITION DEPENDENCIES\n" ); - string preconditionDependenciesName = GetPreconditionDependenciesName (); - string_list dependencies; - GetDefaultDependencies ( dependencies ); - GetModuleDependencies ( dependencies ); - - GetInvocationDependencies ( module, dependencies ); - - if ( dependencies.size() ) - { - fprintf ( fMakefile, - "%s =", - preconditionDependenciesName.c_str () ); - for ( size_t i = 0; i < dependencies.size(); i++ ) - fprintf ( fMakefile, - " %s", - dependencies[i].c_str () ); - fprintf ( fMakefile, "\n\n" ); - } - - fprintf ( fMakefile, "\n" ); -} - -bool -MingwModuleHandler::IsWineModule () const -{ - if ( module.importLibrary == NULL) - return false; - - size_t index = module.importLibrary->source->name.rfind ( ".spec" ); - return ( index != string::npos ); -} - -/* caller needs to delete the returned object */ -const FileLocation* -MingwModuleHandler::GetDefinitionFilename () const -{ - if ( module.importLibrary == NULL ) - return NULL; - - if ( IsWineModule () ) - { - return new FileLocation ( IntermediateDirectory, - module.importLibrary->source->relative_path, - GetBasename ( module.importLibrary->source->name ) + "_" + module.name + ".spec.def" ); - } - else - { - return new FileLocation ( SourceDirectory, - module.importLibrary->source->relative_path, - module.importLibrary->source->name ); - } -} - -void -MingwModuleHandler::GenerateImportLibraryTargetIfNeeded () -{ - if ( module.importLibrary != NULL ) - { - const FileLocation *library_target = GetImportLibraryFilename ( module, &clean_files ); - const FileLocation *defFilename = GetDefinitionFilename (); - string empty = "tools" + sSep + "rbuild" + sSep + "empty.def"; - - vector deps; - GetDefinitionDependencies ( deps ); - - fprintf ( fMakefile, "# IMPORT LIBRARY RULE\n" ); - - fprintf ( fMakefile, "%s:", - backend->GetFullName ( *library_target ).c_str () ); - - if ( defFilename ) - { - fprintf ( fMakefile, " %s", - backend->GetFullName ( *defFilename ).c_str () ); - } - - size_t i, iend = deps.size(); - for ( i = 0; i < iend; i++ ) - fprintf ( fMakefile, " %s", - backend->GetFullName ( deps[i] ).c_str () ); - - fprintf ( fMakefile, " | %s\n", - backend->GetFullPath ( *library_target ).c_str () ); - - fprintf ( fMakefile, "\t$(ECHO_DLLTOOL)\n" ); - - fprintf ( fMakefile, - "\t${dlltool} --dllname %s --def %s --output-lib %s%s%s\n\n", - module.output->name.c_str (), - defFilename ? backend->GetFullName ( *defFilename ).c_str () - : empty.c_str (), - backend->GetFullName ( *library_target ).c_str (), - module.mangledSymbols ? "" : " --kill-at", - module.underscoreSymbols ? " --add-underscore" : "" ); - - if ( defFilename ) - delete defFilename; - delete library_target; - } -} - -void -MingwModuleHandler::GetSpecObjectDependencies ( - vector& dependencies, - const FileLocation *file ) const -{ - dependencies.push_back ( FileLocation ( IntermediateDirectory, - file->relative_path, - GetBasename ( file->name ) + "_" + module.name + ".stubs.c" ) ); -} - -void -MingwModuleHandler::GetSpecImplibDependencies ( - vector& dependencies, - const FileLocation *file ) const -{ - dependencies.push_back ( FileLocation ( IntermediateDirectory, - file->relative_path, - GetBasename ( file->name ) + "_" + module.name + ".spec.def" ) ); -} - -void -MingwModuleHandler::GetMcObjectDependencies ( - vector& dependencies, - const FileLocation *file ) const -{ - string basename = GetBasename ( file->name ); - - FileLocation defDependency ( IntermediateDirectory, - "include/reactos", - basename + ".h" ); - dependencies.push_back ( defDependency ); - - FileLocation stubsDependency ( IntermediateDirectory, - file->relative_path, - basename + ".rc" ); - dependencies.push_back ( stubsDependency ); -} - -void -MingwModuleHandler::GetWidlObjectDependencies ( - vector& dependencies, - const FileLocation *file ) const -{ - string basename = GetBasename ( file->name ); - const FileLocation *generatedHeaderFilename = GetRpcServerHeaderFilename ( file ); - - FileLocation serverSourceDependency ( IntermediateDirectory, - file->relative_path, - basename + "_s.c" ); - dependencies.push_back ( serverSourceDependency ); - dependencies.push_back ( *generatedHeaderFilename ); - - delete generatedHeaderFilename; -} - -void -MingwModuleHandler::GetDefinitionDependencies ( - vector& dependencies ) const -{ - const vector& compilationUnits = module.non_if_data.compilationUnits; - for ( size_t i = 0; i < compilationUnits.size (); i++ ) - { - const CompilationUnit& compilationUnit = *compilationUnits[i]; - const FileLocation& sourceFile = compilationUnit.GetFilename (); - string extension = GetExtension ( sourceFile ); - if ( extension == ".spec" || extension == ".SPEC" ) - GetSpecObjectDependencies ( dependencies, &sourceFile ); - if ( extension == ".idl" || extension == ".IDL" ) - { - if ( ( module.type == RpcServer ) || ( module.type == RpcClient ) || ( module.type == RpcProxy ) ) - GetWidlObjectDependencies ( dependencies, &sourceFile ); - } - } -} - -enum DebugSupportType -{ - DebugKernelMode, - DebugUserMode -}; - -static void -MingwAddDebugSupportLibraries ( Module& module, DebugSupportType type ) -{ - Library* pLibrary; - - switch(type) - { - case DebugKernelMode: - pLibrary = new Library ( module, "debugsup_ntoskrnl" ); - break; - - case DebugUserMode: - pLibrary = new Library ( module, "debugsup_ntdll" ); - break; - - default: - assert(0); - } - - module.non_if_data.libraries.push_back(pLibrary); -} - -MingwBuildToolModuleHandler::MingwBuildToolModuleHandler ( const Module& module_ ) - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwBuildToolModuleHandler::Process () -{ - GenerateBuildToolModuleTarget (); -} - -void -MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget () -{ - string targetMacro ( GetTargetMacro (module) ); - string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - string libsMacro = GetLibsMacro (); - - GenerateRules (); - - fprintf ( fMakefile, "# BUILD TOOL MODULE TARGET\n" ); - - string linker; - if ( module.cplusplus ) - linker = "${host_gpp}"; - else - linker = "${host_gcc}"; - - const FileLocation *target_file = GetTargetFilename ( module, NULL ); - fprintf ( fMakefile, "%s: %s %s | %s\n", - targetMacro.c_str (), - objectsMacro.c_str (), - linkDepsMacro.c_str (), - backend->GetFullPath ( *target_file ).c_str () ); - fprintf ( fMakefile, "\t$(ECHO_LD)\n" ); - fprintf ( fMakefile, - "\t%s %s -o $@ %s %s\n\n", - linker.c_str (), - GetLinkerMacro ().c_str (), - objectsMacro.c_str (), - libsMacro.c_str () ); - - delete target_file; -} - - -MingwKernelModuleHandler::MingwKernelModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwKernelModuleHandler::Process () -{ - GenerateKernelModuleTarget (); -} - -void -MingwKernelModuleHandler::GenerateKernelModuleTarget () -{ - string targetMacro ( GetTargetMacro ( module ) ); - string workingDirectory = GetWorkingDirectory ( ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - - GenerateLinkerCommand ( dependencies, - linkerParameters + " $(NTOSKRNL_SHARED)", - " -sections" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - - -void -MingwKernelModeDLLModuleHandler::AddImplicitLibraries ( Module& module ) -{ - MingwAddDebugSupportLibraries ( module, DebugKernelMode ); -} - -void -MingwKernelModeDLLModuleHandler::Process () -{ - GenerateKernelModeDLLModuleTarget (); -} - -void -MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget () -{ - string targetMacro ( GetTargetMacro ( module ) ); - string workingDirectory = GetWorkingDirectory (); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - GenerateLinkerCommand ( dependencies, - linkerParameters, - " -sections" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwNativeDLLModuleHandler::AddImplicitLibraries ( Module& module ) -{ - MingwAddDebugSupportLibraries ( module, DebugUserMode ); -} - -void -MingwNativeDLLModuleHandler::Process () -{ - GenerateNativeDLLModuleTarget (); -} - -void -MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget () -{ - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory ( ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - GenerateLinkerCommand ( dependencies, - linkerParameters, - "" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -MingwNativeCUIModuleHandler::MingwNativeCUIModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwNativeCUIModuleHandler::AddImplicitLibraries ( Module& module ) -{ - MingwAddDebugSupportLibraries ( module, DebugUserMode ); -} - -void -MingwNativeCUIModuleHandler::Process () -{ - GenerateNativeCUIModuleTarget (); -} - -void -MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget () -{ - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory ( ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=native -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - GenerateLinkerCommand ( dependencies, - linkerParameters, - "" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -MingwWin32DLLModuleHandler::MingwWin32DLLModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -MingwWin32OCXModuleHandler::MingwWin32OCXModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -static bool -LinksToCrt( Module &module ) -{ - for ( size_t i = 0; i < module.non_if_data.libraries.size (); i++ ) - { - Library& library = *module.non_if_data.libraries[i]; - if ( library.name == "libcntpr" || library.name == "crt" ) - return true; - } - return false; -} - -static void -MingwAddImplicitLibraries( Module &module ) -{ - Library* pLibrary; - bool links_to_crt; - - if ( module.type != Win32DLL - && module.type != Win32OCX - && module.type != Win32CUI - && module.type != Win32GUI - && module.type != Win32SCR) - { - // no implicit libraries - return; - } - - links_to_crt = LinksToCrt ( module ); - - if ( !module.isDefaultEntryPoint ) - { - if ( module.GetEntryPoint(false) == "0" ) - { - if ( !links_to_crt ) - { - pLibrary = new Library ( module, "mingw_common" ); - module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin() , pLibrary ); - - pLibrary = new Library ( module, "msvcrt" ); - module.non_if_data.libraries.push_back ( pLibrary ); - links_to_crt = true; - } - } - pLibrary = new Library ( module, "debugsup_ntdll" ); - module.non_if_data.libraries.push_back(pLibrary); - return; - } - - if ( module.IsDLL () ) - { - //pLibrary = new Library ( module, "__mingw_dllmain" ); - //module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary ); - } - else - { - pLibrary = new Library ( module, module.isUnicode ? "mingw_wmain" : "mingw_main" ); - module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary ); - } - - pLibrary = new Library ( module, "mingw_common" ); - module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin() + 1, pLibrary ); - - if ( !links_to_crt ) - { - // always link in msvcrt to get the basic routines - pLibrary = new Library ( module, "msvcrt" ); - module.non_if_data.libraries.push_back ( pLibrary ); - } - - pLibrary = new Library ( module, "debugsup_ntdll" ); - module.non_if_data.libraries.push_back(pLibrary); -} - -void -MingwWin32DLLModuleHandler::AddImplicitLibraries ( Module& module ) -{ - MingwAddImplicitLibraries ( module ); -} - -void -MingwWin32DLLModuleHandler::Process () -{ - GenerateWin32DLLModuleTarget (); -} - -void -MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget () -{ - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory ( ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=console -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - GenerateLinkerCommand ( dependencies, - linkerParameters, - "" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -void -MingwWin32OCXModuleHandler::AddImplicitLibraries ( Module& module ) -{ - MingwAddImplicitLibraries ( module ); -} - -void -MingwWin32OCXModuleHandler::Process () -{ - GenerateWin32OCXModuleTarget (); -} - -void -MingwWin32OCXModuleHandler::GenerateWin32OCXModuleTarget () -{ - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory ( ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=console -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000 -shared", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - GenerateLinkerCommand ( dependencies, - linkerParameters, - "" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -MingwWin32CUIModuleHandler::MingwWin32CUIModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwWin32CUIModuleHandler::AddImplicitLibraries ( Module& module ) -{ - MingwAddImplicitLibraries ( module ); -} - -void -MingwWin32CUIModuleHandler::Process () -{ - GenerateWin32CUIModuleTarget (); -} - -void -MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget () -{ - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory ( ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=console -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - GenerateLinkerCommand ( dependencies, - linkerParameters, - "" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -MingwWin32GUIModuleHandler::MingwWin32GUIModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwWin32GUIModuleHandler::AddImplicitLibraries ( Module& module ) -{ - MingwAddImplicitLibraries ( module ); -} - -void -MingwWin32GUIModuleHandler::Process () -{ - GenerateWin32GUIModuleTarget (); -} - -void -MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget () -{ - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory ( ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=windows -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - GenerateLinkerCommand ( dependencies, - linkerParameters, - "" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -MingwBootLoaderModuleHandler::MingwBootLoaderModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwBootLoaderModuleHandler::Process () -{ - GenerateBootLoaderModuleTarget (); -} - -void -MingwBootLoaderModuleHandler::GenerateBootLoaderModuleTarget () -{ - string targetName ( module.output->name ); - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory (); - FileLocation junk_tmp ( TemporaryDirectory, - "", - module.name + ".junk.tmp" ); - CLEAN_FILE ( junk_tmp ); - string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateRules (); - - fprintf ( fMakefile, "# BOOT LOADER MODULE TARGET\n" ); - - const FileLocation *target_file = GetTargetFilename ( module, NULL ); - fprintf ( fMakefile, "%s: %s %s | %s\n", - targetMacro.c_str (), - objectsMacro.c_str (), - linkDepsMacro.c_str (), - backend->GetFullPath ( *target_file ).c_str () ); - - fprintf ( fMakefile, "\t$(ECHO_LD)\n" ); - - if (Environment::GetArch() == "arm") - { - fprintf ( fMakefile, - "\t${gcc} -Wl,--subsystem,native -Wl,--section-start,startup=0x8000 -o %s %s %s %s\n", - backend->GetFullName ( junk_tmp ).c_str (), - objectsMacro.c_str (), - linkDepsMacro.c_str (), - GetLinkerMacro ().c_str ()); - } - else - { - fprintf ( fMakefile, - "\t${gcc} -Wl,--subsystem,native -Wl,-Ttext,0x8000 -o %s %s %s %s\n", - backend->GetFullName ( junk_tmp ).c_str (), - objectsMacro.c_str (), - linkDepsMacro.c_str (), - GetLinkerMacro ().c_str ()); - } - fprintf ( fMakefile, - "\t${objcopy} -O binary %s $@\n", - backend->GetFullName ( junk_tmp ).c_str () ); - GenerateBuildMapCode ( &junk_tmp ); - fprintf ( fMakefile, - "\t-@${rm} %s 2>$(NUL)\n", - backend->GetFullName ( junk_tmp ).c_str () ); - - delete target_file; -} - - -MingwBootProgramModuleHandler::MingwBootProgramModuleHandler ( - const Module& module_ ) - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwBootProgramModuleHandler::Process () -{ - GenerateBootProgramModuleTarget (); -} - -void -MingwBootProgramModuleHandler::GenerateBootProgramModuleTarget () -{ - string targetName ( module.output->name ); - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory (); - FileLocation junk_tmp ( TemporaryDirectory, - "", - module.name + ".junk.tmp" ); - FileLocation junk_elf ( TemporaryDirectory, - "", - module.name + ".junk.elf" ); - FileLocation junk_cpy ( TemporaryDirectory, - "", - module.name + ".junk.elf" ); - CLEAN_FILE ( junk_tmp ); - CLEAN_FILE ( junk_elf ); - CLEAN_FILE ( junk_cpy ); - string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - const Module *payload = module.project.LocateModule ( module.payload ); - - GenerateRules (); - - fprintf ( fMakefile, "# BOOT PROGRAM MODULE TARGET\n" ); - - const FileLocation *target_file = GetTargetFilename ( module, NULL ); - fprintf ( fMakefile, "%s: %s %s %s | %s\n", - targetMacro.c_str (), - objectsMacro.c_str (), - linkDepsMacro.c_str (), - payload->name.c_str (), - backend->GetFullPath ( *target_file ).c_str () ); - - fprintf ( fMakefile, "\t$(ECHO_BOOTPROG)\n" ); - - fprintf ( fMakefile, "\t$(%s_PREPARE) $(OUTPUT)$(SEP)%s %s\n", - module.buildtype.c_str (), - NormalizeFilename( backend->GetFullName ( *payload->output ) ).c_str (), - backend->GetFullName ( junk_cpy ).c_str () ); - - fprintf ( fMakefile, "\t${objcopy} $(%s_FLATFORMAT) %s %s\n", - module.buildtype.c_str (), - backend->GetFullName ( junk_cpy ).c_str (), - backend->GetFullName ( junk_tmp ).c_str () ); - - fprintf ( fMakefile, "\t${ld} $(%s_LINKFORMAT) %s %s -g -o %s\n", - module.buildtype.c_str (), - linkDepsMacro.c_str (), - backend->GetFullName ( junk_tmp ).c_str (), - backend->GetFullName ( junk_elf ).c_str () ); - - fprintf ( fMakefile, "\t${objcopy} $(%s_COPYFORMAT) %s $(INTERMEDIATE)$(SEP)%s\n", - module.buildtype.c_str (), - backend->GetFullName ( junk_elf ).c_str (), - backend->GetFullName ( *module.output ) .c_str () ); - - fprintf ( fMakefile, - "\t-@${rm} %s %s %s 2>$(NUL)\n", - backend->GetFullName ( junk_tmp ).c_str (), - backend->GetFullName ( junk_elf ).c_str (), - backend->GetFullName ( junk_cpy ).c_str () ); - - delete target_file; -} - - -MingwIsoModuleHandler::MingwIsoModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwIsoModuleHandler::Process () -{ - GenerateIsoModuleTarget (); -} - -void -MingwIsoModuleHandler::OutputBootstrapfileCopyCommands ( - const string& bootcdDirectory ) -{ - for ( std::map::const_iterator p = module.project.modules.begin (); p != module.project.modules.end (); ++ p ) - { - const Module& m = *p->second; - if ( !m.enabled ) - continue; - if ( m.bootstrap != NULL ) - { - FileLocation targetFile ( OutputDirectory, - m.bootstrap->base.length () > 0 - ? bootcdDirectory + sSep + m.bootstrap->base - : bootcdDirectory, - m.bootstrap->nameoncd ); - OutputCopyCommand ( *m.output, targetFile ); - } - } -} - -void -MingwIsoModuleHandler::OutputCdfileCopyCommands ( - const string& bootcdDirectory ) -{ - for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) - { - const CDFile& cdfile = *module.project.cdfiles[i]; - FileLocation targetFile ( OutputDirectory, - cdfile.target->relative_path.length () > 0 - ? bootcdDirectory + sSep + cdfile.target->relative_path - : bootcdDirectory, - cdfile.target->name ); - OutputCopyCommand ( *cdfile.source, targetFile ); - } -} - -void -MingwIsoModuleHandler::GetBootstrapCdDirectories ( vector& out, - const string& bootcdDirectory ) -{ - for ( std::map::const_iterator p = module.project.modules.begin (); p != module.project.modules.end (); ++ p ) - { - const Module& m = *p->second; - if ( !m.enabled ) - continue; - if ( m.bootstrap != NULL ) - { - FileLocation targetDirectory ( OutputDirectory, - m.bootstrap->base.length () > 0 - ? bootcdDirectory + sSep + m.bootstrap->base - : bootcdDirectory, - "" ); - out.push_back ( targetDirectory ); - } - } -} - -void -MingwIsoModuleHandler::GetNonModuleCdDirectories ( vector& out, - const string& bootcdDirectory ) -{ - for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) - { - const CDFile& cdfile = *module.project.cdfiles[i]; - FileLocation targetDirectory ( OutputDirectory, - cdfile.target->relative_path.length () > 0 - ? bootcdDirectory + sSep + cdfile.target->relative_path - : bootcdDirectory, - "" ); - out.push_back( targetDirectory ); - } -} - -void -MingwIsoModuleHandler::GetCdDirectories ( vector& out, - const string& bootcdDirectory ) -{ - GetBootstrapCdDirectories ( out, bootcdDirectory ); - GetNonModuleCdDirectories ( out, bootcdDirectory ); -} - -void -MingwIsoModuleHandler::GetBootstrapCdFiles ( - vector& out ) const -{ - for ( std::map::const_iterator p = module.project.modules.begin (); p != module.project.modules.end (); ++ p ) - { - const Module& m = *p->second; - if ( !m.enabled ) - continue; - if ( m.bootstrap != NULL ) - { - out.push_back ( *m.output ); - } - } -} - -void -MingwIsoModuleHandler::GetNonModuleCdFiles ( - vector& out ) const -{ - for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) - { - const CDFile& cdfile = *module.project.cdfiles[i]; - out.push_back ( *cdfile.source ); - } -} - -void -MingwIsoModuleHandler::GetCdFiles ( - vector& out ) const -{ - GetBootstrapCdFiles ( out ); - GetNonModuleCdFiles ( out ); -} - -void -MingwIsoModuleHandler::GenerateIsoModuleTarget () -{ - fprintf ( fMakefile, "# ISO MODULE TARGET\n" ); - string bootcdDirectory = "cd"; - FileLocation bootcd ( OutputDirectory, - bootcdDirectory, - "" ); - FileLocation bootcdReactos ( OutputDirectory, - bootcdDirectory + sSep + Environment::GetCdOutputPath (), - "" ); - vector vSourceFiles, vCdFiles; - vector vCdDirectories; - - // unattend.inf - FileLocation srcunattend ( SourceDirectory, - "boot" + sSep + "bootdata" + sSep + "bootcdregtest", - "unattend.inf" ); - FileLocation tarunattend ( bootcdReactos.directory, - bootcdReactos.relative_path, - "unattend.inf" ); - if (module.type == IsoRegTest) - vSourceFiles.push_back ( srcunattend ); - - // bootsector - const Module* bootModule = module.bootSector->bootSectorModule; - - if (!bootModule) - { - throw InvalidOperationException ( module.node.location.c_str(), - 0, - "Invalid bootsector. module '%s' requires ", - module.name.c_str ()); - } - - const FileLocation *isoboot = bootModule->output; - vSourceFiles.push_back ( *isoboot ); - - // prepare reactos.dff and reactos.inf - FileLocation reactosDff ( SourceDirectory, - "boot" + sSep + "bootdata" + sSep + "packages", - "reactos.dff" ); - FileLocation reactosInf ( bootcdReactos.directory, - bootcdReactos.relative_path, - "reactos.inf" ); - - vSourceFiles.push_back ( reactosDff ); - - /* - We use only the name and not full FileLocation(ouput) because Iso/LiveIso are an exception to the general rule. - Iso/LiveIso outputs are generated in code base root - */ - string IsoName = module.output->name; - - string sourceFiles = v2s ( backend, vSourceFiles, 5 ); - - // fill cdrom - GetCdDirectories ( vCdDirectories, bootcdDirectory ); - GetCdFiles ( vCdFiles ); - string cdDirectories = "";//v2s ( vCdDirectories, 5 ); - string cdFiles = v2s ( backend, vCdFiles, 5 ); - - fprintf ( fMakefile, ".PHONY: %s\n\n", - module.name.c_str ()); - fprintf ( fMakefile, - "%s: all %s %s %s $(CABMAN_TARGET) $(CDMAKE_TARGET) %s\n", - module.name.c_str (), - backend->GetFullName ( *isoboot ).c_str (), - sourceFiles.c_str (), - cdFiles.c_str (), - cdDirectories.c_str () ); - fprintf ( fMakefile, - "\t$(Q)$(CABMAN_TARGET) -C %s -L %s -I -P $(OUTPUT)\n", - backend->GetFullName ( reactosDff ).c_str (), - backend->GetFullPath ( bootcdReactos ).c_str () ); - fprintf ( fMakefile, - "\t$(Q)$(CABMAN_TARGET) -C %s -RC %s -L %s -N -P $(OUTPUT)\n", - backend->GetFullName ( reactosDff ).c_str (), - backend->GetFullName ( reactosInf ).c_str (), - backend->GetFullPath ( bootcdReactos ).c_str ()); - fprintf ( fMakefile, - "\t-@${rm} %s 2>$(NUL)\n", - backend->GetFullName ( reactosInf ).c_str () ); - OutputBootstrapfileCopyCommands ( bootcdDirectory ); - OutputCdfileCopyCommands ( bootcdDirectory ); - - if (module.type == IsoRegTest) - OutputCopyCommand ( srcunattend, tarunattend ); - - fprintf ( fMakefile, "\t$(ECHO_CDMAKE)\n" ); - fprintf ( fMakefile, - "\t$(Q)$(CDMAKE_TARGET) -v -j -m -b %s %s REACTOS %s\n", - backend->GetFullName ( *isoboot ).c_str (), - backend->GetFullPath ( bootcd ).c_str (), - IsoName.c_str() ); - fprintf ( fMakefile, - "\n" ); -} - - -MingwLiveIsoModuleHandler::MingwLiveIsoModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwLiveIsoModuleHandler::Process () -{ - GenerateLiveIsoModuleTarget (); -} - -void -MingwLiveIsoModuleHandler::CreateDirectory ( const string& directory ) -{ - FileLocation dir ( OutputDirectory, - directory, - "" ); - MingwModuleHandler::PassThruCacheDirectory ( &dir ); -} - -void -MingwLiveIsoModuleHandler::OutputModuleCopyCommands ( string& livecdDirectory, - string& reactosDirectory ) -{ - for ( std::map::const_iterator p = module.project.modules.begin (); p != module.project.modules.end (); ++ p ) - { - const Module& m = *p->second; - if ( !m.enabled ) - continue; - if ( m.install ) - { - const Module& aliasedModule = backend->GetAliasedModuleOrModule ( m ); - FileLocation destination ( OutputDirectory, - m.install->relative_path.length () > 0 - ? livecdDirectory + sSep + reactosDirectory + sSep + m.install->relative_path - : livecdDirectory + sSep + reactosDirectory, - m.install->name ); - OutputCopyCommand ( *aliasedModule.output, - destination); - } - } -} - -void -MingwLiveIsoModuleHandler::OutputNonModuleCopyCommands ( string& livecdDirectory, - string& reactosDirectory ) -{ - for ( size_t i = 0; i < module.project.installfiles.size (); i++ ) - { - const InstallFile& installfile = *module.project.installfiles[i]; - FileLocation target ( OutputDirectory, - installfile.target->relative_path.length () > 0 - ? livecdDirectory + sSep + reactosDirectory + sSep + installfile.target->relative_path - : livecdDirectory + sSep + reactosDirectory, - installfile.target->name ); - OutputCopyCommand ( *installfile.source, target ); - } -} - -void -MingwLiveIsoModuleHandler::OutputProfilesDirectoryCommands ( string& livecdDirectory ) -{ - CreateDirectory ( livecdDirectory + sSep + "Profiles" ); - CreateDirectory ( livecdDirectory + sSep + "Profiles" + sSep + "All Users") ; - CreateDirectory ( livecdDirectory + sSep + "Profiles" + sSep + "All Users" + sSep + "Desktop" ); - CreateDirectory ( livecdDirectory + sSep + "Profiles" + sSep + "Default User" ); - CreateDirectory ( livecdDirectory + sSep + "Profiles" + sSep + "Default User" + sSep + "Desktop" ); - CreateDirectory ( livecdDirectory + sSep + "Profiles" + sSep + "Default User" + sSep + "My Documents" ); - - FileLocation livecdIni ( SourceDirectory, - "boot" + sSep + "bootdata", - "livecd.ini" ); - FileLocation destination ( OutputDirectory, - livecdDirectory, - "freeldr.ini" ); - OutputCopyCommand ( livecdIni, - destination ); -} - -void -MingwLiveIsoModuleHandler::OutputLoaderCommands ( string& livecdDirectory ) -{ - FileLocation freeldr ( OutputDirectory, - "boot" + sSep + "freeldr" + sSep + "freeldr", - "freeldr.sys" ); - FileLocation destination ( OutputDirectory, - livecdDirectory + sSep + "loader", - "setupldr.sys" ); - OutputCopyCommand ( freeldr, - destination ); -} - -void -MingwLiveIsoModuleHandler::OutputRegistryCommands ( string& livecdDirectory ) -{ - fprintf ( fMakefile, "# REGISTRY COMMANDS\n" ); - FileLocation reactosSystem32ConfigDirectory ( OutputDirectory, - livecdDirectory + sSep + "reactos" + sSep + "system32" + sSep + "config", - "" ); - fprintf ( fMakefile, - "\t$(ECHO_MKHIVE)\n" ); - fprintf ( fMakefile, - "\t$(MKHIVE_TARGET) boot%cbootdata %s $(ARCH) boot%cbootdata%clivecd.inf boot%cbootdata%chiveinst_$(ARCH).inf\n", - cSep, backend->GetFullPath ( reactosSystem32ConfigDirectory ).c_str (), - cSep, cSep, cSep, cSep ); -} - -void -MingwLiveIsoModuleHandler::GenerateLiveIsoModuleTarget () -{ - fprintf ( fMakefile, "# LIVE ISO MODULE TARGET\n" ); - string livecdDirectory = module.name; - FileLocation livecd ( OutputDirectory, livecdDirectory, "" ); - - string IsoName; - - // bootsector - const Module* bootModule = module.bootSector->bootSectorModule; - - if (!bootModule) - { - throw InvalidOperationException ( module.node.location.c_str(), - 0, - "Invalid bootsector. module '%s' requires ", - module.name.c_str ()); - } - - const FileLocation *isoboot = bootModule->output; - - /* - We use only the name and not full FileLocation(ouput) because Iso/LiveIso are an exception to the general rule. - Iso/LiveIso outputs are generated in code base root - */ - IsoName = module.output->name; - - string reactosDirectory = "reactos"; - string livecdReactosNoFixup = livecdDirectory + sSep + reactosDirectory; - FileLocation livecdReactos ( OutputDirectory, - livecdReactosNoFixup, - "" ); - CLEAN_FILE ( livecdReactos ); - - fprintf ( fMakefile, ".PHONY: %s\n\n", - module.name.c_str ()); - fprintf ( fMakefile, - "%s: all %s %s $(MKHIVE_TARGET) $(CDMAKE_TARGET)\n", - module.name.c_str (), - backend->GetFullName ( *isoboot) .c_str (), - backend->GetFullPath ( livecdReactos ).c_str () ); - OutputModuleCopyCommands ( livecdDirectory, - reactosDirectory ); - OutputNonModuleCopyCommands ( livecdDirectory, - reactosDirectory ); - OutputProfilesDirectoryCommands ( livecdDirectory ); - OutputLoaderCommands ( livecdDirectory ); - OutputRegistryCommands ( livecdDirectory ); - fprintf ( fMakefile, "\t$(ECHO_CDMAKE)\n" ); - fprintf ( fMakefile, - "\t$(Q)$(CDMAKE_TARGET) -v -m -j -b %s %s REACTOS %s\n", - backend->GetFullName( *isoboot ).c_str (), - backend->GetFullPath ( livecd ).c_str (), - IsoName.c_str() ); - fprintf ( fMakefile, - "\n" ); -} - - -MingwTestModuleHandler::MingwTestModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwTestModuleHandler::Process () -{ - GenerateTestModuleTarget (); -} - -/* caller needs to delete the returned object */ -void -MingwTestModuleHandler::GetModuleSpecificCompilationUnits ( vector& compilationUnits ) -{ - compilationUnits.push_back ( new CompilationUnit ( new File ( IntermediateDirectory, module.output->relative_path + sSep + "..", module.name + "_hooks.c", false, "", false ) ) ); - compilationUnits.push_back ( new CompilationUnit ( new File ( IntermediateDirectory, module.output->relative_path + sSep + "..", module.name + "_stubs.S", false, "", false ) ) ); - compilationUnits.push_back ( new CompilationUnit ( new File ( IntermediateDirectory, module.output->relative_path + sSep + "..", module.name + "_startup.c", false, "", false ) ) ); -} - -void -MingwTestModuleHandler::GenerateTestModuleTarget () -{ - string targetMacro ( GetTargetMacro ( module ) ); - string workingDirectory = GetWorkingDirectory ( ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - - GenerateImportLibraryTargetIfNeeded (); - - if ( module.non_if_data.compilationUnits.size () > 0 ) - { - GenerateRules (); - - string dependencies = linkDepsMacro + " " + objectsMacro; - - string linkerParameters = ssprintf ( "-subsystem=console -entry=%s -image-base=%s -file-alignment=0x1000 -section-alignment=0x1000", - module.GetEntryPoint(!(Environment::GetArch() == "arm")).c_str (), - module.baseaddress.c_str () ); - GenerateLinkerCommand ( dependencies, - linkerParameters, - "" ); - } - else - { - GeneratePhonyTarget(); - } -} - - -MingwAliasModuleHandler::MingwAliasModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwAliasModuleHandler::Process () -{ -} - - -MingwCabinetModuleHandler::MingwCabinetModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwCabinetModuleHandler::Process () -{ - string targetMacro ( GetTargetMacro (module) ); - - GenerateRules (); - - fprintf ( fMakefile, "# CABINET MODULE TARGET\n" ); - const FileLocation *target_file = GetTargetFilename ( module, NULL ); - fprintf ( fMakefile, "%s: $(CABMAN_TARGET) | %s\n", - targetMacro.c_str (), - backend->GetFullPath ( *target_file ).c_str () ); - - fprintf ( fMakefile, "\t$(ECHO_CABMAN)\n" ); - fprintf ( fMakefile, - "\t$(Q)$(CABMAN_TARGET) -M raw -S %s $(%s_SOURCES)\n", // Escape the asterisk for Make - targetMacro.c_str (), - module.name.c_str()); -} - -MingwElfExecutableModuleHandler::MingwElfExecutableModuleHandler ( - const Module& module_ ) - - : MingwModuleHandler ( module_ ) -{ -} - -void -MingwElfExecutableModuleHandler::Process () -{ - string targetName ( module.output->name ); - string targetMacro ( GetTargetMacro (module) ); - string workingDirectory = GetWorkingDirectory (); - string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro (); - string libsMacro = GetLibsMacro (); - - GenerateRules (); - - fprintf ( fMakefile, "# ELF EXECUTABLE TARGET\n" ); - const FileLocation *target_file = GetTargetFilename ( module, NULL ); - fprintf ( fMakefile, "%s: %s %s | %s\n", - targetMacro.c_str (), - objectsMacro.c_str (), - linkDepsMacro.c_str (), - backend->GetFullPath ( *target_file ).c_str () ); - - fprintf ( fMakefile, "\t$(ECHO_BOOTPROG)\n" ); - - fprintf ( fMakefile, "\t${gcc} $(%s_LINKFORMAT) %s %s -g -o %s\n", - module.buildtype.c_str(), - objectsMacro.c_str(), - libsMacro.c_str(), - targetMacro.c_str () ); - - delete target_file; -} diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h deleted file mode 100644 index bf5e4a6e16d..00000000000 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.h +++ /dev/null @@ -1,372 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef MINGW_MODULEHANDLER_H -#define MINGW_MODULEHANDLER_H - -#include "../backend.h" -#include "mingw.h" - -class MingwBackend; -class Rule; - -extern std::string -GetTargetMacro ( const Module&, bool with_dollar = true ); - -extern std::string -PrefixFilename ( - const std::string& filename, - const std::string& prefix ); - -class MingwModuleHandler -{ -public: - MingwModuleHandler ( const Module& module_ ); - virtual ~MingwModuleHandler(); - - static void SetBackend ( MingwBackend* backend_ ); - static void SetMakefile ( FILE* f ); - void EnablePreCompiledHeaderSupport (); - - static const FileLocation* PassThruCacheDirectory (const FileLocation* fileLocation ); - - static const FileLocation* GetTargetFilename ( - const Module& module, - string_list* pclean_files ); - - static const FileLocation* GetImportLibraryFilename ( - const Module& module, - string_list* pclean_files ); - - static std::string GenerateGccDefineParametersFromVector ( const std::vector& defines, std::set &used_defs ); - static std::string GenerateGccIncludeParametersFromVector ( const std::vector& includes ); - - std::string GetModuleTargets ( const Module& module ); - void GetObjectsVector ( const IfableData& data, - std::vector& objectFiles ) const; - void GenerateSourceMacro(); - void GenerateObjectMacro(); - void GenerateTargetMacro(); - void GenerateOtherMacros(); - - static MingwModuleHandler* InstanciateHandler ( const Module& module_, - MingwBackend* backend_ ); - void GeneratePreconditionDependencies (); - virtual void Process () { GenerateRules (); } - void GenerateInvocations () const; - void GenerateCleanTarget () const; - void GenerateInstallTarget () const; - void GenerateDependsTarget () const; - static bool ReferenceObjects ( const Module& module ); - virtual void AddImplicitLibraries ( Module& module ) { return; } - - void OutputCopyCommand ( const FileLocation& source, - const FileLocation& destination ); -protected: - virtual void GetModuleSpecificCompilationUnits ( std::vector& compilationUnits ); - std::string GetWorkingDirectory () const; - std::string GetBasename ( const std::string& filename ) const; - std::string GetCompilationUnitDependencies ( const CompilationUnit& compilationUnit ) const; - const FileLocation* GetModuleArchiveFilename () const; - std::string GetImportLibraryDependency ( const Module& importedModule ); - void GetTargets ( const Module& dependencyModule, - string_list& targets ); - void GetModuleDependencies ( string_list& dependencies ); - std::string GetAllDependencies () const; - const FileLocation* GetObjectFilename ( const FileLocation* sourceFile, - const Module& module ) const; - - std::string GetObjectFilenames (); - - std::string GetPreconditionDependenciesName () const; - std::string GetCFlagsMacro () const; - static std::string GetObjectsMacro ( const Module& ); - std::string GetLinkingDependenciesMacro () const; - std::string GetLibsMacro () const; - std::string GetLinkerMacro () const; - void GenerateCleanObjectsAsYouGoCode () const; - void GenerateRunRsymCode () const; - void GenerateRunStripCode () const; - void GenerateLinkerCommand ( const std::string& dependencies, - const std::string& linkerParameters, - const std::string& pefixupParameters ); - void GeneratePhonyTarget() const; - void GenerateBuildMapCode ( const FileLocation *mapTarget = NULL ); - void GenerateRules (); - void GenerateImportLibraryTargetIfNeeded (); - void GetDefinitionDependencies ( std::vector& dependencies ) const; - std::string GetLinkingDependencies () const; - static MingwBackend* backend; - static FILE* fMakefile; - bool use_pch; -private: - std::string ConcatenatePaths ( const std::string& path1, - const std::string& path2 ) const; - std::string GenerateGccDefineParameters () const; - std::string GenerateCompilerParametersFromVector ( const std::vector& compilerFlags, const CompilerType type ) const; - std::string GenerateLinkerParametersFromVector ( const std::vector& linkerFlags ) const; - std::string GenerateImportLibraryDependenciesFromVector ( const std::vector& libraries ); - std::string GenerateLinkerParameters () const; - void GenerateMacro ( const char* assignmentOperation, - const std::string& macro, - const IfableData& data, - std::set* used_defs, - bool generatingCompilerMacro ); - void GenerateMacros ( const char* op, - const IfableData& data, - const std::vector* linkerFlags, - std::set& used_defs ); - void GenerateSourceMacros ( const IfableData& data ); - void GenerateObjectMacros ( const IfableData& data ); - std::string GenerateGccIncludeParameters () const; - std::string GenerateGccParameters () const; - std::string GenerateNasmParameters () const; - const FileLocation* GetPrecompiledHeaderFilename () const; - void GenerateGccCommand ( const FileLocation* sourceFile, - const Rule *rule, - const std::string& extraDependencies ); - void GenerateCommands ( const CompilationUnit& compilationUnit, - const std::string& extraDependencies ); - void GenerateObjectFileTargets ( const IfableData& data ); - void GenerateObjectFileTargets (); - const FileLocation* GenerateArchiveTarget (); - void GetMcObjectDependencies ( std::vector& dependencies, - const FileLocation *file ) const; - void GetSpecObjectDependencies ( std::vector& dependencies, - const FileLocation *file ) const; - void GetSpecImplibDependencies ( std::vector& dependencies, - const FileLocation *file ) const; - void GetWidlObjectDependencies ( std::vector& dependencies, - const FileLocation *file ) const; - void GetDefaultDependencies ( string_list& dependencies ) const; - void GetInvocationDependencies ( const Module& module, string_list& dependencies ); - bool IsWineModule () const; - const FileLocation* GetDefinitionFilename () const; - void GenerateBuildNonSymbolStrippedCode (); - void CleanupCompilationUnitVector ( std::vector& compilationUnits ); - void GetRpcHeaderDependencies ( std::vector& dependencies ) const; - void GetMcHeaderDependencies ( std::vector& dependencies ) const; - static std::string GetPropertyValue ( const Module& module, const std::string& name ); - const FileLocation* GetRpcServerHeaderFilename ( const FileLocation *base ) const; - const FileLocation* GetRpcClientHeaderFilename ( const FileLocation *base ) const; - const FileLocation* GetRpcProxyHeaderFilename ( const FileLocation *base ) const; - const FileLocation* GetIdlHeaderFilename ( const FileLocation *base ) const; - const FileLocation* GetMcHeaderFilename ( const FileLocation *base ) const; - std::string GetModuleCleanTarget ( const Module& module ) const; - void GetReferencedObjectLibraryModuleCleanTargets ( std::vector& moduleNames ) const; -public: - const Module& module; - string_list clean_files; - std::string cflagsMacro; - std::string nasmflagsMacro; - std::string windresflagsMacro; - std::string widlflagsMacro; - std::string linkerflagsMacro; - std::string sourcesMacro; - std::string objectsMacro; - std::string libsMacro; - std::string linkDepsMacro; -}; - - -class MingwBuildToolModuleHandler : public MingwModuleHandler -{ -public: - MingwBuildToolModuleHandler ( const Module& module ); - virtual void Process (); -private: - void GenerateBuildToolModuleTarget (); -}; - - -class MingwKernelModuleHandler : public MingwModuleHandler -{ -public: - MingwKernelModuleHandler ( const Module& module ); - virtual void Process (); -private: - void GenerateKernelModuleTarget (); -}; - - -class MingwKernelModeDLLModuleHandler : public MingwModuleHandler -{ -public: - MingwKernelModeDLLModuleHandler ( const Module& module ); - virtual void Process (); - void AddImplicitLibraries ( Module& module ); -private: - void GenerateKernelModeDLLModuleTarget (); -}; - - -class MingwNativeDLLModuleHandler : public MingwModuleHandler -{ -public: - MingwNativeDLLModuleHandler ( const Module& module ); - virtual void Process (); - void AddImplicitLibraries ( Module& module ); -private: - void GenerateNativeDLLModuleTarget (); -}; - - -class MingwNativeCUIModuleHandler : public MingwModuleHandler -{ -public: - MingwNativeCUIModuleHandler ( const Module& module ); - virtual void Process (); - void AddImplicitLibraries ( Module& module ); -private: - void GenerateNativeCUIModuleTarget (); -}; - - -class MingwWin32DLLModuleHandler : public MingwModuleHandler -{ -public: - MingwWin32DLLModuleHandler ( const Module& module ); - virtual void Process (); - void AddImplicitLibraries ( Module& module ); -private: - void GenerateWin32DLLModuleTarget (); -}; - - -class MingwWin32OCXModuleHandler : public MingwModuleHandler -{ -public: - MingwWin32OCXModuleHandler ( const Module& module ); - virtual void Process (); - void AddImplicitLibraries ( Module& module ); -private: - void GenerateWin32OCXModuleTarget (); -}; - - -class MingwWin32CUIModuleHandler : public MingwModuleHandler -{ -public: - MingwWin32CUIModuleHandler ( const Module& module ); - virtual void Process (); - void AddImplicitLibraries ( Module& module ); -private: - void GenerateWin32CUIModuleTarget (); -}; - - -class MingwWin32GUIModuleHandler : public MingwModuleHandler -{ -public: - MingwWin32GUIModuleHandler ( const Module& module ); - virtual void Process (); - void AddImplicitLibraries ( Module& module ); -private: - void GenerateWin32GUIModuleTarget (); -}; - - -class MingwBootLoaderModuleHandler : public MingwModuleHandler -{ -public: - MingwBootLoaderModuleHandler ( const Module& module ); - virtual void Process (); -private: - void GenerateBootLoaderModuleTarget (); -}; - - -class MingwBootProgramModuleHandler : public MingwModuleHandler -{ -public: - MingwBootProgramModuleHandler ( const Module& module ); - virtual void Process (); - std::string GetProgTextAddrMacro (); -private: - void GenerateBootProgramModuleTarget (); -}; - - -class MingwIsoModuleHandler : public MingwModuleHandler -{ -public: - MingwIsoModuleHandler ( const Module& module ); - virtual void Process (); -private: - void GenerateIsoModuleTarget (); - void GetBootstrapCdDirectories ( std::vector& out, const std::string& bootcdDirectory ); - void GetNonModuleCdDirectories ( std::vector& out, const std::string& bootcdDirectory ); - void GetCdDirectories ( std::vector& out, const std::string& bootcdDirectory ); - void GetBootstrapCdFiles ( std::vector& out ) const; - void GetNonModuleCdFiles ( std::vector& out ) const; - void GetCdFiles ( std::vector& out ) const; - void OutputBootstrapfileCopyCommands ( const std::string& bootcdDirectory ); - void OutputCdfileCopyCommands ( const std::string& bootcdDirectory ); -}; - - -class MingwLiveIsoModuleHandler : public MingwModuleHandler -{ -public: - MingwLiveIsoModuleHandler ( const Module& module ); - virtual void Process (); -private: - void GenerateLiveIsoModuleTarget (); - void CreateDirectory ( const std::string& directory ); - void OutputModuleCopyCommands ( std::string& livecdDirectory, - std::string& livecdReactos ); - void OutputNonModuleCopyCommands ( std::string& livecdDirectory, - std::string& livecdReactos ); - void OutputProfilesDirectoryCommands ( std::string& livecdDirectory ); - void OutputLoaderCommands ( std::string& livecdDirectory ); - void OutputRegistryCommands ( std::string& livecdDirectory ); -}; - - -class MingwTestModuleHandler : public MingwModuleHandler -{ -public: - MingwTestModuleHandler ( const Module& module ); - virtual void Process (); -protected: - virtual void GetModuleSpecificCompilationUnits ( std::vector& compilationUnits ); -private: - void GenerateTestModuleTarget (); -}; - -class MingwAliasModuleHandler : public MingwModuleHandler -{ -public: - MingwAliasModuleHandler ( const Module& module ); - virtual void Process (); -}; - -class MingwCabinetModuleHandler : public MingwModuleHandler -{ -public: - MingwCabinetModuleHandler ( const Module& module ); - virtual void Process (); -}; - -class MingwElfExecutableModuleHandler : public MingwModuleHandler -{ -public: - MingwElfExecutableModuleHandler ( const Module& module ); - virtual void Process (); -}; - -#endif /* MINGW_MODULEHANDLER_H */ diff --git a/reactos/tools/rbuild/backend/mingw/pch_detection.h b/reactos/tools/rbuild/backend/mingw/pch_detection.h deleted file mode 100644 index 65538aeeefc..00000000000 --- a/reactos/tools/rbuild/backend/mingw/pch_detection.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 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. - */ - -/* This file is intentionally left empty */ diff --git a/reactos/tools/rbuild/backend/mingw/pipe_detection.c b/reactos/tools/rbuild/backend/mingw/pipe_detection.c deleted file mode 100644 index 7c7eea4eae0..00000000000 --- a/reactos/tools/rbuild/backend/mingw/pipe_detection.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ - -int -main ( int argc, char** argv ) -{ - return 0; -} diff --git a/reactos/tools/rbuild/backend/mingw/proxymakefile.cpp b/reactos/tools/rbuild/backend/mingw/proxymakefile.cpp deleted file mode 100644 index c819931aa1c..00000000000 --- a/reactos/tools/rbuild/backend/mingw/proxymakefile.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "../../pch.h" - -#include "mingw.h" -#include - -using std::string; -using std::vector; - -ProxyMakefile::ProxyMakefile ( const Project& project ) - : project ( project ) -{ -} - -ProxyMakefile::~ProxyMakefile () -{ -} - -bool -ProxyMakefile::GenerateProxyMakefile ( const Module& module ) -{ - return module.output->directory == OutputDirectory; -} - -void -ProxyMakefile::GenerateProxyMakefiles ( bool verbose, - string outputTree ) -{ - for ( std::map::const_iterator p = project.modules.begin (); p != project.modules.end (); ++ p ) - { - Module& module = *p->second; - if ( !module.enabled ) - continue; - if ( !GenerateProxyMakefile ( module ) ) - continue; - GenerateProxyMakefileForModule ( module, - verbose, - outputTree ); - } -} - -string -ProxyMakefile::GeneratePathToParentDirectory ( int numberOfParentDirectories ) -{ - string path = ""; - for ( int i = 0; i < numberOfParentDirectories; i++ ) - { - if ( path != "" ) - path += sSep; - path += ".."; - } - return path; -} - -string -ProxyMakefile::GetPathToTopDirectory ( Module& module ) -{ - int numberOfDirectories = 1; - string basePath = module.output->relative_path; - for ( size_t i = 0; i < basePath.length (); i++ ) - { - if ( basePath[i] == cSep ) - numberOfDirectories++; - } - return GeneratePathToParentDirectory ( numberOfDirectories ); -} - -void -ProxyMakefile::GenerateProxyMakefileForModule ( Module& module, - bool verbose, - string outputTree ) -{ - char* buf; - char* s; - - if ( verbose ) - { - printf ( "\nGenerating proxy makefile for %s", - module.name.c_str () ); - } - - string base; - string pathToTopDirectory; - if ( outputTree.length () > 0 ) - { - base = outputTree + sSep + module.output->relative_path; - pathToTopDirectory = working_directory; - } - else - { - base = module.output->relative_path; - pathToTopDirectory = GetPathToTopDirectory ( module ); - } - string proxyMakefile = NormalizeFilename ( base + sSep + "GNUmakefile" ); - string defaultTarget = module.name; - - buf = (char*) malloc ( 10*1024 ); - if ( buf == NULL ) - throw OutOfMemoryException (); - - s = buf; - s = s + sprintf ( s, "# This file is automatically generated.\n" ); - s = s + sprintf ( s, "\n" ); - s = s + sprintf ( s, "TOP = %s\n", pathToTopDirectory.c_str () ); - s = s + sprintf ( s, "DEFAULT = %s\n", defaultTarget.c_str () ); - s = s + sprintf ( s, "include $(TOP)/proxy.mak\n" ); - - FileSupportCode::WriteIfChanged ( buf, proxyMakefile, true ); - - free ( buf ); -} diff --git a/reactos/tools/rbuild/backend/mingw/rule.cpp b/reactos/tools/rbuild/backend/mingw/rule.cpp deleted file mode 100644 index d246f3d12ad..00000000000 --- a/reactos/tools/rbuild/backend/mingw/rule.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2008 Hervé Poussineau - * - * 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. - */ - -#include "../../rbuild.h" -#include "modulehandler.h" -#include "rule.h" - -using std::string; - -static void -ReplaceVariable( string& str, - const string& name, - const string& value ) -{ - size_t i = str.find ( name ); - while ( i != string::npos ) - { - str.replace ( i, name.length (), value ); - i = str.find ( name ); - } -} - -static std::string -FixString ( const string& str, Backend *backend, const Module& module, const FileLocation *source, - const std::string& additional_dependencies, const std::string& compiler_flags ) -{ - string ret = str; - string dep = additional_dependencies; - - dep += " " + module.xmlbuildFile; - - if ( source ) - { - ReplaceVariable ( ret, "$(source_noext)", ReplaceExtension ( backend->GetFullName ( *source ), "" ) ); - ReplaceVariable ( ret, "$(source)", backend->GetFullName ( *source ) ); - ReplaceVariable ( ret, "$(source_dir)", source->relative_path ); - ReplaceVariable ( ret, "$(source_name)", source->name ); - ReplaceVariable ( ret, "$(source_name_noext)", ReplaceExtension ( source->name , "" ) ); - ReplaceVariable ( ret, "$(source_path)", backend->GetFullPath ( *source ) ); - } - ReplaceVariable ( ret, "$(dependencies)", dep ); - ReplaceVariable ( ret, "$(module_name)", module.name ); - ReplaceVariable ( ret, "$(module_output)", GetTargetMacro ( module, true ) ); - ReplaceVariable ( ret, "$(SEP)", sSep ); - - ReplaceVariable ( ret, "$(compiler_flags)", compiler_flags ); - - return ret; -} - -Rule::Rule( const std::string& command, const char *generatedFile1, ... ) - : command ( command ) -{ - va_list ap; - const char *s; - - s = generatedFile1; - va_start ( ap, generatedFile1 ); - while ( s ) - { - generatedFiles.push_back ( s ); - s = va_arg ( ap, const char* ); - } - va_end ( ap ); -} - - -void Rule::Execute ( FILE *outputFile, - MingwBackend *backend, - const Module& module, - const FileLocation *source, - string_list& clean_files, - const std::string& additional_dependencies, - const std::string& compiler_flags ) const -{ - string cmd = FixString ( command, backend, module, source, additional_dependencies, compiler_flags ); - - fprintf ( outputFile, "%s", cmd.c_str () ); - - for ( size_t i = 0; i < generatedFiles.size (); i++ ) - { - string file = FixString ( generatedFiles[i], backend, module, source, "", "" ); - if ( file[file.length () - 1] != cSep ) - { - clean_files.push_back ( file ); - continue; - } - - if ( file[0] != '$' ) - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %s.", - file.c_str () ); - - size_t pos = file.find_first_of ( cSep ); - string relative_path = file.substr ( pos + 1, file.length () - pos - 2 ); - string dir = file.substr ( 0, pos ); - if ( dir == "$(INTERMEDIATE)" ) - backend->AddDirectoryTarget ( relative_path, backend->intermediateDirectory ); - else if ( dir == "$(OUTPUT)" ) - backend->AddDirectoryTarget ( relative_path, backend->outputDirectory ); - else if ( dir == "$(INSTALL)" ) - backend->AddDirectoryTarget ( relative_path, backend->installDirectory ); - else - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %s.", - dir.c_str () ); - } -} diff --git a/reactos/tools/rbuild/backend/mingw/rule.h b/reactos/tools/rbuild/backend/mingw/rule.h deleted file mode 100644 index e32b923ebf2..00000000000 --- a/reactos/tools/rbuild/backend/mingw/rule.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2008 Hervé Poussineau - * - * 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. - */ - -#ifndef MINGW_RULE_H -#define MINGW_RULE_H - -#include "mingw.h" - -class Rule -{ -public: - Rule ( const std::string& command, const char *generatedFile1, ... ); - void Execute ( FILE *outputFile, - MingwBackend *backend, - const Module& module, - const FileLocation *source, - string_list& clean_files, - const std::string& additional_dependencies = "", - const std::string& compiler_flags = "" ) const; -private: - const std::string command; - string_list generatedFiles; -}; - -#endif diff --git a/reactos/tools/rbuild/backend/msbuild/msbuild.cpp b/reactos/tools/rbuild/backend/msbuild/msbuild.cpp deleted file mode 100644 index 7ed4b685277..00000000000 --- a/reactos/tools/rbuild/backend/msbuild/msbuild.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (C) 2007 Christoph von Wittich - * - * 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. - */ -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include -#include - -#include - -#include "msbuild.h" -#include "../mingw/mingw.h" - -using std::string; -using std::vector; -using std::map; -using std::ifstream; - -#ifdef OUT -#undef OUT -#endif//OUT - - -static class MsBuildFactory : public Backend::Factory -{ - public: - - MsBuildFactory() : Factory("MsBuild", "Ms Build") {} - Backend *operator() (Project &project, - Configuration& configuration) - { - return new MsBuildBackend(project, configuration); - } - -} factory; - - -MsBuildBackend::MsBuildBackend(Project &project, - Configuration& configuration) : Backend(project, configuration) -{ - -} - -void MsBuildBackend::Process() -{ - if ( configuration.CleanAsYouGo ) { - _clean_project_files(); - return; - } - - ProcessModules(); -} - -void -MsBuildBackend::_generate_makefile ( const Module& module ) -{ - string makefile = module.output->relative_path + "\\makefile"; - FILE* OUT = fopen ( makefile.c_str(), "wb" ); - fprintf ( OUT, "!INCLUDE $(NTMAKEENV)\\makefile.def\r\n" ); - fclose ( OUT ); -} - -void -MsBuildBackend::_generate_sources ( const Module& module ) -{ - size_t i; - - string module_type = GetExtension(*module.output); - vector source_files, resource_files, includes, libraries; - vector header_files, common_defines, compiler_flags; - vector vars, values; - string sourcesfile = module.output->relative_path + "\\sources"; - string proj_path = module.output->relative_path; - - FILE* OUT = fopen ( sourcesfile.c_str(), "wb" ); - fprintf ( OUT, "TARGETNAME=%s\r\n", module.name.c_str() ); - - vector ifs_list; - ifs_list.push_back ( &module.project.non_if_data ); - ifs_list.push_back ( &module.non_if_data ); - while ( ifs_list.size() ) - { - const IfableData& data = *ifs_list.back(); - ifs_list.pop_back(); - const vector& files = data.files; - for ( i = 0; i < files.size(); i++ ) - { - source_files.push_back ( files[i]->file.name ); - } - const vector& incs = data.includes; - for ( i = 0; i < incs.size(); i++ ) - { - string path = Path::RelativeFromDirectory ( - incs[i]->directory->relative_path, - module.output->relative_path ); - - includes.push_back ( path ); - } - const vector& libs = data.libraries; - for ( i = 0; i < libs.size(); i++ ) - { - libraries.push_back ( libs[i]->name ); - } - const vector& cflags = data.compilerFlags; - for ( i = 0; i < cflags.size(); i++ ) - { - compiler_flags.push_back ( cflags[i]->flag ); - } - const vector& defs = data.defines; - for ( i = 0; i < defs.size(); i++ ) - { - if ( defs[i]->value[0] ) - { - const string& escaped = _replace_str(defs[i]->value, "\"","""); - common_defines.push_back( defs[i]->name + "=" + escaped ); - } - else - { - common_defines.push_back( defs[i]->name ); - } - } - } - - if (module_type == ".sys") - fprintf ( OUT, "TARGETTYPE=DRIVER\r\n" ); - if (module_type == ".dll") - fprintf ( OUT, "TARGETTYPE=LIBRARY\r\n" ); - - fprintf ( OUT, "\r\nMSC_WARNING_LEVEL=/W3 /WX\r\n\r\n" ); - - /* Disable deprecated function uage warnings */ - fprintf ( OUT, "C_DEFINES=$(C_DEFINES) /DSTDCALL=__stdcall /DDDKAPI=__stdcall /wd4996\r\n" ); - - - /* includes */ - fprintf ( OUT, "INCLUDES=.; \\\r\n" ); - for ( i = 1; i < includes.size() -1; i++ ) - { - const string& include = includes[i]; - - /* don't include psdk / ddk / crt */ - std::string::size_type pos = include.find("ddk"); - std::string::size_type pos2 = include.find("psdk"); - std::string::size_type pos3 = include.find("crt"); - if ((std::string::npos == pos) && (std::string::npos == pos2) && (std::string::npos == pos3)) - fprintf ( OUT, "\t%s; \\\r\n", include.c_str() ); - } - if (includes.size() > 1) - { - const string& include = includes[includes.size()-1]; - fprintf ( OUT, "\t%s \r\n\r\n", include.c_str() ); - } - - fprintf ( OUT, "TARGETLIBS= $(DDK_LIB_PATH)\\ntstrsafe.lib\r\n\r\n" ); - - string source_file = ""; - if (source_files.size() > 0) - { - source_file = DosSeparator(source_files[0]); - fprintf ( OUT, "SOURCES=%s \\\r\n", source_file.c_str() ); - - for ( size_t isrcfile = 1; isrcfile < source_files.size()-1; isrcfile++ ) - { - source_file = DosSeparator(source_files[isrcfile]); - fprintf ( OUT, "\t%s \\\r\n", source_file.c_str() ); - } - } - if (source_files.size() > 1) - { - source_file = DosSeparator(source_files[source_files.size()-1]); - fprintf ( OUT, "\t%s \r\n", source_file.c_str() ); - } - - fprintf ( OUT, "TARGET_DESTINATION=retail\r\n" ); - - - fclose ( OUT ); -} - -void MsBuildBackend::ProcessModules() -{ - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module &module = *p->second; - _generate_makefile ( module ); - _generate_sources ( module ); - } -} - -void -MsBuildBackend::_clean_project_files ( void ) -{ - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - printf("Cleaning project %s %s\n", module.name.c_str (), module.output->relative_path.c_str () ); - - string makefile = module.output->relative_path + "\\makefile"; - string sourcesfile = module.output->relative_path + "\\sources"; - - string basepath = module.output->relative_path; - remove ( makefile.c_str() ); - remove ( sourcesfile.c_str() ); - } -} - -MsBuildConfiguration::MsBuildConfiguration ( const std::string &name ) -{ - /* nothing to do here */ -} - -const Property* -MsBuildBackend::_lookup_property ( const Module& module, const std::string& name ) const -{ - std::map::const_iterator p; - - /* Check local values */ - p = module.non_if_data.properties.find(name); - - if ( p != module.non_if_data.properties.end() ) - return p->second; - - // TODO FIXME - should we check local if-ed properties? - p = module.project.non_if_data.properties.find(name); - - if ( p != module.project.non_if_data.properties.end() ) - return p->second; - - // TODO FIXME - should we check global if-ed properties? - return NULL; -} - -std::string -MsBuildBackend::_replace_str(std::string string1, const std::string &find_str, const std::string &replace_str) -{ - std::string::size_type pos = string1.find(find_str, 0); - int intLen = find_str.length(); - - while(std::string::npos != pos) - { - string1.replace(pos, intLen, replace_str); - pos = string1.find(find_str, intLen + pos); - } - - return string1; -} - diff --git a/reactos/tools/rbuild/backend/msbuild/msbuild.h b/reactos/tools/rbuild/backend/msbuild/msbuild.h deleted file mode 100644 index d3b3cb6ea12..00000000000 --- a/reactos/tools/rbuild/backend/msbuild/msbuild.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2007 Christoph von Wittich - * - * 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. - */ -#ifndef __MSBUILD_H__ -#define __MSBUILD_H__ - -#include -#include -#include - -#include "../backend.h" - -class MsBuildConfiguration -{ - public: - MsBuildConfiguration(const std::string &name = ""); - virtual ~MsBuildConfiguration() {} - std::string name; -}; - -class MsBuildBackend : public Backend -{ - public: - - MsBuildBackend(Project &project, - Configuration& configuration); - virtual ~MsBuildBackend() {} - - virtual void Process(); - - private: - - FILE* m_MsBuildFile; - - std::vector m_configurations; - void _generate_makefile ( const Module& module ); - void _generate_sources ( const Module& module ); - void _clean_project_files ( void ); - void ProcessModules(); - const Property* _lookup_property ( const Module& module, const std::string& name ) const; - std::string _replace_str(std::string string1, const std::string &find_str, const std::string &replace_str); - - struct module_data - { - std::vector libraries; - std::vector references; - - module_data() - {} - ~module_data() - {} - }; - -}; - - -#endif // __MsBuild_H__ - diff --git a/reactos/tools/rbuild/backend/msvc/genguid.cpp b/reactos/tools/rbuild/backend/msvc/genguid.cpp deleted file mode 100644 index f475f4162c6..00000000000 --- a/reactos/tools/rbuild/backend/msvc/genguid.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Based on the genguid utility for WINE and ReactOS - * - * Copyright 2003 Jonathan Wilson - * Copyright 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include "../../pch.h" -#include "msvc.h" -#include - -using std::string; - -#ifdef _WIN32 -#include -#include - -typedef HRESULT _stdcall CoInitializeFunc ( PVOID ); -typedef void _stdcall CoUninitializeFunc ( void ); -typedef HRESULT _stdcall CoCreateGuidFunc ( GUID* ); - -static CoInitializeFunc *pCoInitialize = NULL; -static CoUninitializeFunc *pCoUninitialize = NULL; -static CoCreateGuidFunc *pCoCreateGuid = NULL; - - -std::string -MSVCBackend::_gen_guid() -{ - GUID m_guid; - HRESULT result; - bool good_guid = false; - static char guid[38]; - - // Load ole32. We will need it later on - HMODULE olelib = LoadLibrary ( "ole32.dll" ); - if ( olelib != NULL ) - { - pCoInitialize = (CoInitializeFunc *)GetProcAddress( olelib, "CoInitialize" ); - pCoUninitialize = (CoUninitializeFunc *)GetProcAddress( olelib, "CoUninitialize" ); - pCoCreateGuid = (CoCreateGuidFunc *)GetProcAddress( olelib, "CoCreateGuid" ); - if ( !pCoInitialize || !pCoUninitialize || !pCoCreateGuid ) - printf ( "Missing exports from ole32.dll\n" ); - else - { - if (pCoInitialize(NULL) != S_OK) - printf("Unable to initalize OLE libraries\n"); - else - { - result = pCoCreateGuid(&m_guid); - if (result != S_OK) - printf("Unable to create GUID\n"); - else - good_guid = true; - pCoUninitialize(); - } - } - FreeLibrary ( olelib ); - } - if ( !good_guid ) - { - // TODO FIXME - fall-back to random #'s - } - const char* strfmt = "%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X"; - sprintf(guid, strfmt,m_guid.Data1,m_guid.Data2,m_guid.Data3,m_guid.Data4[0], - m_guid.Data4[1],m_guid.Data4[2],m_guid.Data4[3],m_guid.Data4[4],m_guid.Data4[5], - m_guid.Data4[6],m_guid.Data4[7],m_guid.Data1,m_guid.Data2,m_guid.Data3,m_guid.Data4[0], - m_guid.Data4[1],m_guid.Data4[2],m_guid.Data4[3],m_guid.Data4[4],m_guid.Data4[5], - m_guid.Data4[6],m_guid.Data4[7]); - - return guid; -} - -#else /* Linux, etc */ - -std::string -MSVCBackend::_gen_guid() -{ - return std::string(); -} -#endif /* WIN32/Linux */ diff --git a/reactos/tools/rbuild/backend/msvc/msvc.cpp b/reactos/tools/rbuild/backend/msvc/msvc.cpp deleted file mode 100644 index aa29317a968..00000000000 --- a/reactos/tools/rbuild/backend/msvc/msvc.cpp +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Copyright (C) 2005 Trevor McCort - * Copyright (C) 2005 Casper S. Hornstrup - * Copyright (C) 2005 Steven Edwards - * Copyright (C) 2005 Royce Mitchell - * Copyright (C) 2006 Christoph von Wittich - * - * 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. - */ -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include -#include - -#include "msvc.h" - -using std::string; -using std::vector; -using std::ifstream; - -static class MSVCFactory : public Backend::Factory -{ - public: - - MSVCFactory() : Factory("MSVC", "Microsoft Visual C") {} - Backend *operator() (Project &project, - Configuration& configuration) - { - return new MSVCBackend(project, configuration); - } - -} factory; - - -MSVCBackend::MSVCBackend(Project &project, - Configuration& configuration) : Backend(project, configuration) -{ - m_unitCount = 0; -} - -void MSVCBackend::Process() -{ - // TODO FIXME wine hack? - bool only_msvc_headers = false; - - while ( m_configurations.size () > 0 ) - { - const MSVCConfiguration* cfg = m_configurations.back(); - m_configurations.pop_back(); - delete cfg; - } - - m_configurations.push_back ( new MSVCConfiguration( Debug )); - m_configurations.push_back ( new MSVCConfiguration( Release )); - m_configurations.push_back ( new MSVCConfiguration( Speed )); - - if (!only_msvc_headers) - { - m_configurations.push_back ( new MSVCConfiguration( Debug, ReactOSHeaders )); - m_configurations.push_back ( new MSVCConfiguration( Release, ReactOSHeaders )); - m_configurations.push_back ( new MSVCConfiguration( Speed, ReactOSHeaders )); - } - - if ( configuration.CleanAsYouGo ) { - _clean_project_files(); - return; - } - if ( configuration.InstallFiles ) { - _install_files( _get_vc_dir(), configuration.VSConfigurationType ); - return; - } - string filename_sln ( ProjectNode.name ); - - if ( configuration.VSProjectVersion == "6.00" ) - filename_sln += "_auto.dsw"; - else - filename_sln += "_auto.sln"; - - printf ( "Creating MSVC workspace: %s\n", filename_sln.c_str() ); - - ProcessModules(); - m_slnFile = fopen ( filename_sln.c_str(), "wb" ); - - if ( !m_slnFile ) - { - printf ( "Could not create file '%s'.\n", filename_sln.c_str() ); - return; - } - - if ( configuration.VSProjectVersion == "6.00" ) - _generate_wine_dsw ( m_slnFile ); - else - _generate_sln ( m_slnFile ); - - fclose ( m_slnFile ); - printf ( "Done.\n" ); -} - -void MSVCBackend::ProcessModules() -{ - for(std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p) - { - Module &module = *p->second; - - module.guid = _gen_guid(); - - if (configuration.VSProjectVersion == "6.00") - _generate_dsp ( module ); - else - _generate_vcproj ( module ); - } -} - -static bool FileExists(string &filename) -{ - ifstream file(filename.c_str()); - - if(!file.is_open()) - return false; - - file.close(); - return true; -} - -void MSVCBackend::ProcessFile(string &filepath) -{ - // Remove the .\ at the start of the filenames - if ( filepath[0] == '.' && strchr ( "/\\", filepath[1] ) ) - filepath.erase(0, 2); - - if(!FileExists(filepath)) - return; - - // Change the \ to / - for(size_t i = 0; i < filepath.length(); i++) - { - if(filepath[i] == '\\') - filepath[i] = '/'; - } - - // Remove the filename from the path - string folder = ""; - - size_t pos = filepath.rfind(string("/"), filepath.length() - 1); - - if(pos != string::npos) - { - folder = filepath; - folder.erase(pos, folder.length() - pos); - } - - FileUnit fileUnit; - fileUnit.filename = filepath; - fileUnit.folder = folder; - - m_fileUnits.push_back(fileUnit); - - if(folder != "") - AddFolders(folder); - - m_unitCount++; -} - -bool MSVCBackend::CheckFolderAdded(string &folder) -{ - for(size_t i = 0; i < m_folders.size(); i++) - { - if(m_folders[i] == folder) - return true; - } - - return false; -} - -void MSVCBackend::AddFolders(string &folder) -{ - // Check if this folder was already added. true if it was, false otherwise. - if(CheckFolderAdded(folder)) - return; - - m_folders.push_back(folder); - - size_t pos = folder.rfind(string("/"), folder.length() - 1); - - if(pos == string::npos) - return; - - folder.erase(pos, folder.length() - pos); - AddFolders(folder); -} - -void MSVCBackend::OutputFolders() -{ -#if 0 - m_devFile << "Folders="; - - for(size_t i = 0; i < m_folders.size(); i++) - { - if(i > 0) - m_devFile << ","; - - m_devFile << m_folders[i]; - } -#endif -} - -std::string -MSVCBackend::OptFileName ( const Module& module ) const -{ - return FixSeparatorForSystemCommand( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_" + _get_vc_dir() + "_auto.opt" ) - ); -} - -std::string -MSVCBackend::SuoFileName ( const Module& module ) const -{ - return FixSeparatorForSystemCommand( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_" + _get_vc_dir() + "_auto.suo" ) - ); -} - -std::string -MSVCBackend::DswFileName ( const Module& module ) const -{ - return FixSeparatorForSystemCommand( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_auto.dsw" ) - ); -} - -std::string -MSVCBackend::SlnFileName ( const Module& module ) const -{ - return FixSeparatorForSystemCommand( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_" + _get_vc_dir() + "_auto.sln" ) - ); -} - -std::string -MSVCBackend::NcbFileName ( const Module& module ) const -{ - return FixSeparatorForSystemCommand( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_" + _get_vc_dir() + "_auto.ncb" ) - ); -} - -std::string -MSVCBackend::DspFileName ( const Module& module ) const -{ - return FixSeparatorForSystemCommand( - ReplaceExtension ( module.output->relative_path + "\\" + module.output->name, "_auto.dsp" ) - ); -} - -std::string -MSVCBackend::VcprojFileName ( const Module& module ) const -{ - return FixSeparatorForSystemCommand( - ReplaceExtension ( module.output->relative_path + "\\" + module.name, "_" + _get_vc_dir() + "_auto.vcproj" ) - ); -} - -std::string MSVCBackend::_get_vc_dir ( void ) const -{ - if ( configuration.VSProjectVersion == "6.00" ) - return "vc6"; - else if ( configuration.VSProjectVersion == "7.00" ) - return "vc70"; - else if ( configuration.VSProjectVersion == "7.10" ) - return "vc71"; - else if ( configuration.VSProjectVersion == "9.00" ) - return "vc9"; - else /* must be VS2005 */ - return "vc8"; - - -} - -void -MSVCBackend::_get_object_files ( const Module& module, vector& out) const -{ - string basepath = module.output->relative_path; - string vcdir = _get_vc_dir (); - size_t i; - string intenv = Environment::GetIntermediatePath () + DEF_SSEP + basepath + DEF_SSEP; - string outenv = Environment::GetOutputPath () + DEF_SSEP + basepath + DEF_SSEP; - - if ( configuration.UseVSVersionInPath ) - { - intenv += vcdir + DEF_SSEP; - outenv += vcdir + DEF_SSEP; - } - - string dbg = vcdir.substr ( 0, 3 ); - - vector cfgs; - - if ( configuration.UseConfigurationInPath ) - { - cfgs.push_back ( intenv + "Debug" ); - cfgs.push_back ( intenv + "Release" ); - cfgs.push_back ( intenv + "Speed" ); - cfgs.push_back ( outenv + "Debug" ); - cfgs.push_back ( outenv + "Release" ); - cfgs.push_back ( outenv + "Speed" ); - } - else - { - cfgs.push_back ( intenv ); - cfgs.push_back ( outenv ); - } - - vector ifs_list; - ifs_list.push_back ( &module.project.non_if_data ); - ifs_list.push_back ( &module.non_if_data ); - while ( ifs_list.size () ) - { - const IfableData& data = *ifs_list.back(); - ifs_list.pop_back(); - const vector& files = data.files; - for ( i = 0; i < files.size (); i++ ) - { - string file = files[i]->file.relative_path + sSep + files[i]->file.name; - string::size_type pos = file.find_last_of (DEF_SSEP); - if ( pos != string::npos ) - file.erase ( 0, pos+1 ); - if ( !stricmp ( Right(file,3).c_str(), ".rc" ) ) - file = ReplaceExtension ( file, ".res" ); - else - file = ReplaceExtension ( file, ".obj" ); - for ( size_t j = 0; j < cfgs.size () / 2; j++ ) - out.push_back ( cfgs[j] + file ); - } - - } - //common files in intermediate dir - for ( i = 0; i < cfgs.size () / 2; i++) - { - out.push_back ( cfgs[i] + "BuildLog.htm" ); - out.push_back ( cfgs[i] + dbg + "0.pdb" ); - out.push_back ( cfgs[i] + dbg + "0.idb" ); - out.push_back ( cfgs[i] + module.name + ".pch" ); - } - //files in the output dir - for ( i = cfgs.size () / 2; i < cfgs.size (); i++ ) - { - out.push_back ( cfgs[i] + module.output->name ); - out.push_back ( cfgs[i] + module.name + ".pdb" ); - out.push_back ( cfgs[i] + module.name + ".lib" ); - out.push_back ( cfgs[i] + module.name + ".exp" ); - out.push_back ( cfgs[i] + module.name + ".ilk" ); - } -} - -void -MSVCBackend::_get_def_files ( const Module& module, vector& out) const -{ - if (module.HasImportLibrary ()) - { -#if 0 - string modulename = module.GetBasePath (); - string file = module.importLibrary->definition; - size_t pos = file.find (".def"); - if (pos != string::npos) - { - file.insert (pos, "_msvc"); - } - modulename += DEF_SSEP + file; - out.push_back (modulename); -#endif - } -} - -void -MSVCBackend::_clean_project_files ( void ) -{ - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - vector out; - printf("Cleaning project %s %s %s\n", module.name.c_str (), module.output->relative_path.c_str (), NcbFileName ( module ).c_str () ); - - string basepath = module.output->relative_path; - remove ( NcbFileName ( module ).c_str () ); - remove ( DspFileName ( module ).c_str () ); - remove ( DswFileName ( module ).c_str () ); - remove ( OptFileName ( module ).c_str () ); - remove ( SlnFileName ( module ).c_str () ); - remove ( SuoFileName ( module ).c_str () ); - remove ( VcprojFileName ( module ).c_str () ); - - string username = getenv ( "USERNAME" ); - string computername = getenv ( "COMPUTERNAME" ); - string vcproj_file_user = ""; - - if ((computername != "") && (username != "")) - vcproj_file_user = VcprojFileName ( module ) + "." + computername + "." + username + ".user"; - - remove ( vcproj_file_user.c_str () ); - - _get_object_files ( module, out ); - _get_def_files ( module, out ); - for ( size_t j = 0; j < out.size (); j++) - { - printf("Cleaning file %s\n", out[j].c_str () ); - remove ( out[j].c_str () ); - } - } - - string filename_sln = ProjectNode.name + ".sln"; - string filename_dsw = ProjectNode.name + ".dsw"; - - remove ( filename_sln.c_str () ); - remove ( filename_dsw.c_str () ); -} - -bool -MSVCBackend::_copy_file ( const std::string& inputname, const std::string& targetname ) const -{ - FILE * input = fopen ( inputname.c_str (), "rb" ); - if ( !input ) - return false; - - FILE * output = fopen ( targetname.c_str (), "wb+" ); - if ( !output ) - { - fclose ( input ); - return false; - } - - char buffer[256]; - int num_read; - while ( (num_read = fread( buffer, sizeof(char), 256, input) ) || !feof( input ) ) - fwrite( buffer, sizeof(char), num_read, output ); - - fclose ( input ); - fclose ( output ); - return true; -} - -void -MSVCBackend::_install_files (const std::string& vcdir, const::string& config) -{ - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - if ( !module.install ) - continue; - - string inputname = Environment::GetOutputPath () + DEF_SSEP + module.output->relative_path + DEF_SSEP + vcdir + DEF_SSEP + config + DEF_SSEP + module.output->name; - string installdir = Environment::GetInstallPath () + DEF_SSEP + module.install->relative_path + DEF_SSEP + module.install->name; - if ( _copy_file( inputname, installdir ) ) - printf ("Installed File :'%s'\n",installdir.c_str () ); - } -} diff --git a/reactos/tools/rbuild/backend/msvc/msvc.h b/reactos/tools/rbuild/backend/msvc/msvc.h deleted file mode 100644 index a321f4e701c..00000000000 --- a/reactos/tools/rbuild/backend/msvc/msvc.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (C) 2005 Trevor McCort - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef __MSVC_H__ -#define __MSVC_H__ - -#include -#include -#include - -#include "../backend.h" - -class FileUnit -{ - public: - std::string filename; - std::string folder; -}; - -enum OptimizationType -{ - Debug, - Release, - Speed -}; - -enum HeadersType -{ - MSVCHeaders, - ReactOSHeaders -}; - -class MSVCConfiguration -{ - public: - MSVCConfiguration(const OptimizationType optimization, - const HeadersType headers = MSVCHeaders, - const std::string &name = ""); - virtual ~MSVCConfiguration() {} - std::string name; - OptimizationType optimization; - HeadersType headers; -}; - -class MSVCBackend : public Backend -{ - public: - - MSVCBackend(Project &project, - Configuration& configuration); - virtual ~MSVCBackend() {} - - virtual void Process(); - - private: - - void ProcessModules(); - void ProcessFile(std::string &filename); - - bool CheckFolderAdded(std::string &folder); - void AddFolders(std::string &folder); - - void OutputFolders(); - void OutputFileUnits(); - - std::string DspFileName ( const Module& module ) const; - std::string VcprojFileName ( const Module& module ) const; - std::string DswFileName ( const Module& module ) const; - std::string SlnFileName ( const Module& module ) const; - std::string OptFileName ( const Module& module ) const; - std::string SuoFileName ( const Module& module ) const; - std::string NcbFileName ( const Module& module ) const; - - std::vector m_configurations; - - std::vector m_fileUnits; - std::vector m_folders; - - int m_unitCount; - - FILE* m_dswFile; - FILE* m_slnFile; - FILE* m_rulesFile; - - // functions in msvcmaker.cpp: - - void _generate_dsp ( const Module& module ); - void _generate_dsw_header ( FILE* OUT ); - void _generate_dsw_project ( - FILE* OUT, - const Module& module, - std::string dsp_file, - const std::vector& dependencies ); - - void _generate_dsw_footer ( FILE* OUT ); - void _generate_wine_dsw ( FILE* OUT ); - - // functions in vcprojmaker.cpp: - - std::string _strip_gcc_deffile(std::string Filename, std::string sourcedir, std::string objdir); - std::string _get_solution_version ( void ); - std::string _get_studio_version ( void ); - std::string _gen_guid(); - std::string _replace_str( - std::string string1, - const std::string &find_str, - const std::string &replace_str); - - std::string _get_vc_dir ( void ) const; - - void _generate_vcproj ( const Module& module ); - - void _generate_sln_header ( FILE* OUT ); - void _generate_sln_footer ( FILE* OUT ); - void _generate_sln ( FILE* OUT ); - //void _generate_rules_file ( FILE* OUT ); - void _generate_sln_project ( - FILE* OUT, - const Module& module, - std::string vcproj_file, - std::string sln_guid, - std::string vcproj_guid, - const std::vector& libraries ); - void _generate_sln_configurations ( - FILE* OUT, - std::string vcproj_guid ); - void _clean_project_files ( void ); - void _get_object_files ( const Module& module, std::vector& out ) const; - void _get_def_files ( const Module& module, std::vector& out ) const; - void _install_files ( const std::string& vcdir, const std::string& config ); - bool _copy_file ( const std::string& inputname, const std::string& targetname ) const; - const Property* _lookup_property ( const Module& module, const std::string& name ) const; -}; - -#endif // __MSVC_H__ diff --git a/reactos/tools/rbuild/backend/msvc/msvcmaker.cpp b/reactos/tools/rbuild/backend/msvc/msvcmaker.cpp deleted file mode 100644 index b437e6d49cb..00000000000 --- a/reactos/tools/rbuild/backend/msvc/msvcmaker.cpp +++ /dev/null @@ -1,872 +0,0 @@ -/* - * Copyright (C) 2002 Patrik Stridvall - * Copyright (C) 2005 Royce Mitchell III - * - * 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. - */ - -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include - -#include - -#include "msvc.h" - -using std::string; -using std::vector; -using std::set; - -typedef set StringSet; - -#ifdef OUT -#undef OUT -#endif//OUT - -void -MSVCBackend::_generate_dsp ( const Module& module ) -{ - size_t i; - // TODO FIXME wine hack? - const bool wine = false; - - string dsp_file = DspFileName(module); - printf ( "Creating MSVC project: '%s'\n", dsp_file.c_str() ); - FILE* OUT = fopen ( dsp_file.c_str(), "wb" ); - - vector imports; - for ( i = 0; i < module.non_if_data.libraries.size(); i++ ) - { - imports.push_back ( module.non_if_data.libraries[i]->name ); - } - - string module_type = GetExtension(*module.output); - bool lib = (module_type == ".lib") || (module_type == ".a"); - bool dll = (module_type == ".dll") || (module_type == ".cpl"); - bool exe = (module_type == ".exe") || (module_type == ".scr"); - // TODO FIXME - need more checks here for 'sys' and possibly 'drv'? - - bool console = exe && (module.type == Win32CUI); - - // TODO FIXME - not sure if the count here is right... - int parts = 0; - const char* p = strpbrk ( dsp_file.c_str(), "/\\" ); - while ( p ) - { - ++parts; - p = strpbrk ( p+1, "/\\" ); - } - string msvc_wine_dir = ".."; - while ( --parts ) - msvc_wine_dir += "\\.."; - - string wine_include_dir = msvc_wine_dir + "\\include"; - - //$progress_current++; - //$output->progress("$dsp_file (file $progress_current of $progress_max)"); - - // TODO FIXME - what's diff. betw. 'c_srcs' and 'source_files'? - vector c_srcs, source_files, header_files, resource_files, includes, libraries; - StringSet common_defines; - vector ifs_list; - ifs_list.push_back ( &module.project.non_if_data ); - ifs_list.push_back ( &module.non_if_data ); - - // this is a define in MinGW w32api, but not Microsoft's headers - common_defines.insert ( "STDCALL=__stdcall" ); - - while ( ifs_list.size() ) - { - const IfableData& data = *ifs_list.back(); - ifs_list.pop_back(); - const vector& files = data.files; - for ( i = 0; i < files.size(); i++ ) - { - if (files[i]->file.directory != SourceDirectory) - continue; - - // We want the full path here for directory support later on - string path = Path::RelativeFromDirectory ( - files[i]->file.relative_path, - module.output->relative_path ); - string file = path + std::string("\\") + files[i]->file.name; - - source_files.push_back ( file ); - if ( !stricmp ( Right(file,2).c_str(), ".c" ) ) - c_srcs.push_back ( file ); - if ( !stricmp ( Right(file,2).c_str(), ".h" ) ) - header_files.push_back ( file ); - if ( !stricmp ( Right(file,3).c_str(), ".rc" ) ) - resource_files.push_back ( file ); - } - const vector& incs = data.includes; - for ( i = 0; i < incs.size(); i++ ) - { - string path = Path::RelativeFromDirectory ( - incs[i]->directory->relative_path, - module.output->relative_path ); - includes.push_back ( path ); - } - const vector& libs = data.libraries; - for ( i = 0; i < libs.size(); i++ ) - { - libraries.push_back ( libs[i]->name + ".lib" ); - } - const vector& defs = data.defines; - for ( i = 0; i < defs.size(); i++ ) - { - if ( defs[i]->value[0] ) - common_defines.insert( defs[i]->name + "=" + defs[i]->value ); - else - common_defines.insert( defs[i]->name ); - } - } - // TODO FIXME - we don't include header files in our build system - //my @header_files = @{module->{header_files}}; - //vector header_files; - - // TODO FIXME - wine hack? - /*if (module.name !~ /^wine(?:_unicode|build|runtests|test)?$/ && - module.name !~ /^(?:gdi32)_.+?$/ && - Right ( module.name, 5 ) == "_test" ) - { - source_files.push_back ( module.name + ".spec" ); - @source_files = sort(@source_files); - }*/ - - bool no_cpp = true; - bool no_msvc_headers = true; - // TODO FIXME - wine hack? - /*if (module.name =~ /^wine(?:runtests|test)$/ - || Right ( module.name, 5 ) == "_test" ) - { - no_msvc_headers = false; - }*/ - - std::vector cfgs; - - cfgs.push_back ( module.name + " - Win32" ); - - if (!no_cpp) - { - std::vector _cfgs; - for ( i = 0; i < cfgs.size(); i++ ) - { - _cfgs.push_back ( cfgs[i] + " C" ); - _cfgs.push_back ( cfgs[i] + " C++" ); - } - cfgs.resize(0); - cfgs = _cfgs; - } - - // TODO FIXME - wine hack? - /*if (!no_release) - { - std::vector _cfgs; - for ( i = 0; i < cfgs.size(); i++ ) - { - _cfgs.push_back ( cfgs[i] + " Debug" ); - _cfgs.push_back ( cfgs[i] + " Release" ); - } - cfgs.resize(0); - cfgs = _cfgs; - }*/ - - if (!no_msvc_headers) - { - std::vector _cfgs; - for ( i = 0; i < cfgs.size(); i++ ) - { - _cfgs.push_back ( cfgs[i] + " MSVC Headers" ); - _cfgs.push_back ( cfgs[i] + " Wine Headers" ); - } - cfgs.resize(0); - cfgs = _cfgs; - } - - string default_cfg = cfgs.back(); - - fprintf ( OUT, "# Microsoft Developer Studio Project File - Name=\"%s\" - Package Owner=<4>\r\n", module.name.c_str() ); - fprintf ( OUT, "# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n" ); - fprintf ( OUT, "# ** DO NOT EDIT **\r\n" ); - fprintf ( OUT, "\r\n" ); - - if ( lib ) - { - fprintf ( OUT, "# TARGTYPE \"Win32 (x86) Static Library\" 0x0104\r\n" ); - } - else if ( dll ) - { - fprintf ( OUT, "# TARGTYPE \"Win32 (x86) Dynamic-Link Library\" 0x0102\r\n" ); - } - else - { - fprintf ( OUT, "# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n" ); - } - fprintf ( OUT, "\r\n" ); - - fprintf ( OUT, "CFG=%s\r\n", default_cfg.c_str() ); - fprintf ( OUT, "!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n" ); - fprintf ( OUT, "!MESSAGE use the Export Makefile command and run\r\n" ); - fprintf ( OUT, "!MESSAGE \r\n" ); - fprintf ( OUT, "!MESSAGE NMAKE /f \"%s.mak\".\r\n", module.name.c_str() ); - fprintf ( OUT, "!MESSAGE \r\n" ); - fprintf ( OUT, "!MESSAGE You can specify a configuration when running NMAKE\r\n" ); - fprintf ( OUT, "!MESSAGE by defining the macro CFG on the command line. For example:\r\n" ); - fprintf ( OUT, "!MESSAGE \r\n" ); - fprintf ( OUT, "!MESSAGE NMAKE /f \"%s.mak\" CFG=\"%s\"\r\n", module.name.c_str(), default_cfg.c_str() ); - fprintf ( OUT, "!MESSAGE \r\n" ); - fprintf ( OUT, "!MESSAGE Possible choices for configuration are:\r\n" ); - fprintf ( OUT, "!MESSAGE \r\n" ); - for ( i = 0; i < cfgs.size(); i++ ) - { - const string& cfg = cfgs[i]; - if ( lib ) - { - fprintf ( OUT, "!MESSAGE \"%s\" (based on \"Win32 (x86) Static Library\")\r\n", cfg.c_str() ); - } - else if ( dll ) - { - fprintf ( OUT, "!MESSAGE \"%s\" (based on \"Win32 (x86) Dynamic-Link Library\")\r\n", cfg.c_str() ); - } - else - { - fprintf ( OUT, "!MESSAGE \"%s\" (based on \"Win32 (x86) Console Application\")\r\n", cfg.c_str() ); - } - } - fprintf ( OUT, "!MESSAGE \r\n" ); - fprintf ( OUT, "\r\n" ); - - fprintf ( OUT, "# Begin Project\r\n" ); - fprintf ( OUT, "# PROP AllowPerConfigDependencies 0\r\n" ); - fprintf ( OUT, "# PROP Scc_ProjName \"\"\r\n" ); - fprintf ( OUT, "# PROP Scc_LocalPath \"\"\r\n" ); - fprintf ( OUT, "CPP=cl.exe\r\n" ); - if ( !lib && !exe ) fprintf ( OUT, "MTL=midl.exe\r\n" ); - fprintf ( OUT, "RSC=rc.exe\r\n" ); - - std::string output_dir; - for ( size_t icfg = 0; icfg < cfgs.size(); icfg++ ) - { - std::string& cfg = cfgs[icfg]; - if ( icfg == 0 ) - { - fprintf ( OUT, "!IF \"$(CFG)\" == \"%s\"\r\n", cfg.c_str() ); - fprintf ( OUT, "\r\n" ); - } - else - { - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "!ELSEIF \"$(CFG)\" == \"%s\"\r\n", cfg.c_str() ); - fprintf ( OUT, "\r\n" ); - } - - bool debug = !strstr ( cfg.c_str(), "Release" ); - bool msvc_headers = ( 0 != strstr ( cfg.c_str(), "MSVC Headers" ) ); - - fprintf ( OUT, "# PROP BASE Use_MFC 0\r\n" ); - - if ( debug ) - { - fprintf ( OUT, "# PROP BASE Use_Debug_Libraries 1\r\n" ); - } - else - { - fprintf ( OUT, "# PROP BASE Use_Debug_Libraries 0\r\n" ); - } - - output_dir = Replace(cfg,module.name + " - ",""); - output_dir = Replace(output_dir," ","_"); - output_dir = Replace(output_dir,"C++","Cxx"); - // TODO FIXME - wine hack? - //if ( output_prefix_dir.size() ) - // output_dir = output_prefix_dir + "\\" + output_dir; - - fprintf ( OUT, "# PROP BASE Output_Dir \"%s\"\r\n", output_dir.c_str() ); - fprintf ( OUT, "# PROP BASE Intermediate_Dir \"%s\"\r\n", output_dir.c_str() ); - - fprintf ( OUT, "# PROP BASE Target_Dir \"\"\r\n" ); - - fprintf ( OUT, "# PROP Use_MFC 0\r\n" ); - if ( debug ) - { - fprintf ( OUT, "# PROP Use_Debug_Libraries 1\r\n" ); - } - else - { - fprintf ( OUT, "# PROP Use_Debug_Libraries 0\r\n" ); - } - fprintf ( OUT, "# PROP Output_Dir \"%s\"\r\n", output_dir.c_str() ); - fprintf ( OUT, "# PROP Intermediate_Dir \"%s\"\r\n", output_dir.c_str() ); - - if ( dll ) fprintf ( OUT, "# PROP Ignore_Export_Lib 0\r\n" ); - fprintf ( OUT, "# PROP Target_Dir \"\"\r\n" ); - - StringSet defines = common_defines; - - if ( debug ) - { - defines.insert ( "_DEBUG" ); - if ( lib || exe ) - { - fprintf ( OUT, "# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od" ); - defines.insert ( "_LIB" ); - } - else - { - fprintf ( OUT, "# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od" ); - defines.insert ( "_WINDOWS" ); - defines.insert ( "_USRDLL" ); - // TODO FIXME - wine hack? - //defines.insert ( string("\U") + module.name + "\E_EXPORTS" ); - } - } - else - { - defines.insert ( "NDEBUG" ); - if ( lib || exe ) - { - fprintf ( OUT, "# ADD BASE CPP /nologo /W3 /GX /O2" ); - defines.insert ( "_LIB" ); - } - else - { - fprintf ( OUT, "# ADD BASE CPP /nologo /MT /W3 /GX /O2" ); - defines.insert ( "_WINDOWS" ); - defines.insert ( "_USRDLL" ); - // TODO FIXME - wine hack? - //defines.insert ( string("\U") + module.name + "\E_EXPORTS" ); - } - } - - for ( StringSet::const_iterator it1=defines.begin(); it1!=defines.end(); it1++ ) - { - fprintf ( OUT, " /D \"%s\"", it1->c_str() ); - } - if ( lib || exe ) fprintf ( OUT, " /YX" ); - fprintf ( OUT, " /FD" ); - if ( debug ) - { - fprintf ( OUT, " /GZ" ); - if ( lib || exe ) fprintf ( OUT, " " ); - } - fprintf ( OUT, " /c" ); - fprintf ( OUT, "\r\n" ); - - if ( debug ) - { - defines.insert ( "_DEBUG" ); - if(lib) - { - fprintf ( OUT, "# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od" ); - defines.insert ( "_LIB" ); - } - else - { - fprintf ( OUT, "# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od" ); - defines.insert ( "_USRDLL" ); - } - } - else - { - defines.insert ( "NDEBUG" ); - if(lib) - { - fprintf ( OUT, "# ADD CPP /nologo /MT /W3 /GX /O2" ); - defines.insert ( "_LIB" ); - } - else - { - fprintf ( OUT, "# ADD CPP /nologo /MT /W3 /GX /O2" ); - defines.insert ( "_USRDLL" ); - } - } - - // TODO FIXME - wine hack? - if ( wine ) - { - // TODO FIXME - wine hack? - //defines.insert ( string("_\U") + module.name + "\E_" ); - // TODO FIXME - wine hack? - /*if ( module.name !~ /^(?:wine(?:build|test)|.*?_test)$/ ) - defines.insert ( "__WINESRC__" );*/ - if ( msvc_headers ) - defines.insert ( "__WINE_USE_NATIVE_HEADERS" ); - string output_dir2 = Replace(output_dir,"\\","\\\\"); - defines.insert ( ssprintf("__WINETEST_OUTPUT_DIR=\\\"%s\\\"",output_dir.c_str()) ); - defines.insert ( "__i386__" ); - defines.insert ( "_X86_" ); - - // TODO FIXME - wine hacks? - /*if(module.name =~ /^gdi32_(?:enhmfdrv|mfdrv)$/) { - push @includes, ".." ); - } - - if ( strstr ( module.name.c_str(), "_test" ) - { - include.push_back ( msvc_wine_dir + "\\" + output_dir ); - } - - if (!msvc_headers || module.name == "winetest") - { - includes.push_back ( wine_include_dir ); - }*/ - } - - //if ( wine ) - { - for ( i = 0; i < includes.size(); i++ ) - { - const string& include = includes[i]; - if ( strpbrk ( include.c_str(), "[\\\"]" ) || !strncmp ( include.c_str(), "../", 3 ) ) - { - fprintf ( OUT, " /I \"%s\"", include.c_str() ); - } - else - { - fprintf ( OUT, " /I %s", include.c_str() ); - } - } - } - - fprintf ( OUT, " /I \".\"" ); - for ( StringSet::const_iterator it2=defines.begin(); it2!=defines.end(); it2++ ) - { - const string& define = *it2; - if ( strpbrk ( define.c_str(), "[\\\"]" ) ) - { - fprintf ( OUT, " /D \"%s\"", define.c_str() ); - } - else - { - fprintf ( OUT, " /D %s", define.c_str() ); - } - } - if ( wine ) fprintf ( OUT, " /D inline=__inline" ); - if ( 0 && wine ) fprintf ( OUT, " /D \"__STDC__\"" ); - - fprintf ( OUT, lib ? " /YX" : " /FR" ); - fprintf ( OUT, " /FD" ); - if ( debug ) fprintf ( OUT, " /GZ" ); - if ( debug && lib ) fprintf ( OUT, " " ); - fprintf ( OUT, " /c" ); - if ( !no_cpp ) fprintf ( OUT, " /TP" ); - fprintf ( OUT, "\r\n" ); - - if ( debug ) - { - if ( dll ) - { - fprintf ( OUT, "# SUBTRACT CPP /X /YX\r\n" ); - fprintf ( OUT, "# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n" ); - fprintf ( OUT, "# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n" ); - } - fprintf ( OUT, "# ADD BASE RSC /l 0x41d /d \"_DEBUG\"\r\n" ); - fprintf ( OUT, "# ADD RSC /l 0x41d" ); - /*if ( wine )*/ - { - for ( i = 0; i < includes.size(); i++ ) - { - fprintf ( OUT, " /i \"%s\"", includes[i].c_str() ); - } - } - - for ( StringSet::const_iterator it3=defines.begin(); it3!=defines.end(); it3++ ) - { - fprintf ( OUT, " /D \"%s\"", it3->c_str() ); - } - fprintf ( OUT, " /d \"_DEBUG\"\r\n" ); - } - else - { - if ( dll ) - { - fprintf ( OUT, "# SUBTRACT CPP /YX\r\n" ); - fprintf ( OUT, "# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n" ); - fprintf ( OUT, "# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n" ); - } - fprintf ( OUT, "# ADD BASE RSC /l 0x41d /d \"NDEBUG\"\r\n" ); - fprintf ( OUT, "# ADD RSC /l 0x41d" ); - if ( wine ) - { - for ( i = 0; i < includes.size(); i++ ) - fprintf ( OUT, " /i \"%s\"", includes[i].c_str() ); - } - - for ( StringSet::const_iterator it4=defines.begin(); it4!=defines.end(); it4++ ) - { - fprintf ( OUT, " /D \"%s\"", it4->c_str() ); - } - - - fprintf ( OUT, "/d \"NDEBUG\"\r\n" ); - } - fprintf ( OUT, "BSC32=bscmake.exe\r\n" ); - fprintf ( OUT, "# ADD BASE BSC32 /nologo\r\n" ); - fprintf ( OUT, "# ADD BSC32 /nologo\r\n" ); - - if ( exe || dll ) - { - fprintf ( OUT, "LINK32=link.exe\r\n" ); - fprintf ( OUT, "# ADD BASE LINK32 " ); - - for ( i = 0; i < libraries.size(); i++ ) - { - fprintf ( OUT, "%s ", libraries[i].c_str() ); - } - fprintf ( OUT, " /nologo" ); - if ( dll ) fprintf ( OUT, " /dll" ); - if ( console ) fprintf ( OUT, " /subsystem:console" ); - if ( debug ) fprintf ( OUT, " /debug" ); - fprintf ( OUT, " /machine:I386" ); - if ( debug ) fprintf ( OUT, " /pdbtype:sept" ); - fprintf ( OUT, "\r\n" ); - - fprintf ( OUT, "# ADD LINK32" ); - fprintf ( OUT, " /nologo" ); - // TODO FIXME - do we need their kludge? - //if ( module.name == "ntdll" ) fprintf ( OUT, " libcmt.lib" ); // FIXME: Kludge - for ( i = 0; i < imports.size(); i++ ) - { - const string& import = imports[i]; - if ( import != "msvcrt" ) - fprintf ( OUT, " %s.lib", import.c_str() ); - } - if ( dll ) fprintf ( OUT, " /dll" ); - if ( console ) fprintf ( OUT, " /subsystem:console" ); - if ( debug ) fprintf ( OUT, " /debug" ); - fprintf ( OUT, " /machine:I386" ); - // TODO FIXME - do we need their kludge? - //if ( module.name == "ntdll" ) fprintf ( OUT, " /nodefaultlib" ); // FIXME: Kludge - if ( dll ) fprintf ( OUT, " /def:\"%s.def\"", module.name.c_str() ); - if (( dll ) && ( module_type == ".cpl")) fprintf ( OUT, " /out:\"Win32\\%s%s\"", module.name.c_str(), module_type.c_str() ); - if ( debug ) fprintf ( OUT, " /pdbtype:sept" ); - fprintf ( OUT, "\r\n" ); - } - else - { - fprintf ( OUT, "LIB32=link.exe -lib\r\n" ); - fprintf ( OUT, "# ADD BASE LIB32 /nologo\r\n" ); - fprintf ( OUT, "# ADD LIB32 /nologo\r\n" ); - } - } - - if ( cfgs.size() != 0 ) - { - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "!ENDIF \r\n" ); - fprintf ( OUT, "\r\n" ); - } -#if 0 - if ( module.name == "winebuild" ) - { - fprintf ( OUT, "# Begin Special Build Tool\r\n" ); - fprintf ( OUT, "SOURCE=\"$(InputPath)\"\r\n" ); - fprintf ( OUT, "PostBuild_Desc=Copying wine.dll and wine_unicode.dll ...\r\n" ); - fprintf ( OUT, "PostBuild_Cmds=" ); - fprintf ( OUT, "copy ..\\..\\library\\%s\\wine.dll $(OutDir)\t", - output_dir.c_str() ); - fprintf ( OUT, "copy ..\\..\\unicode\\%s\\wine_unicode.dll $(OutDir)\r\n", - output_dir.c_str() ); - fprintf ( OUT, "# End Special Build Tool\r\n" ); - } -#endif - fprintf ( OUT, "# Begin Target\r\n" ); - fprintf ( OUT, "\r\n" ); - for ( i = 0; i < cfgs.size(); i++ ) - { - fprintf ( OUT, "# Name \"%s\"\r\n", cfgs[i].c_str() ); - } - - fprintf ( OUT, "# Begin Group \"Source Files\"\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n" ); - - for ( size_t isrcfile = 0; isrcfile < source_files.size(); isrcfile++ ) - { - string source_file = DosSeparator(source_files[isrcfile]); - - if ( strncmp ( source_file.c_str(), ".\\", 2 ) ) - { - source_file = string(".\\") + source_file; - } -#if 0 - if ( !strcmp ( &source_file[source_file.size()-5], ".spec" ) ) - { - string basename = string ( source_file.c_str(), source_file.size() - 5 ); - - // TODO FIXME - not sure what this is doing? wine hack maybe? - //if ( basename !~ /\..{1,3}$/; ) basename += string(".dll"); - string dbg_c_file = basename + ".dbg.c"; - - fprintf ( OUT, "# Begin Source File\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "SOURCE=%s\r\n", dbg_c_file.c_str() ); - fprintf ( OUT, "# End Source File\r\n" ); - } -#endif - fprintf ( OUT, "# Begin Source File\r\n" ); - fprintf ( OUT, "\r\n" ); - - fprintf ( OUT, "SOURCE=%s\r\n", source_file.c_str() ); - - if ( !strcmp ( &source_file[source_file.size()-5], ".spec" ) ) - { -#if 0 - string basename = string ( source_file.c_str(), source_file.size() - 5 ); - - string spec_file = source_file; - string def_file = basename + ".def"; - - // TODO FIXME - not sure what this is doing? wine hack maybe? - //if ( basename !~ /\..{1,3}$/; ) basename += ".dll"; - string dbg_file = basename + ".dbg"; - string dbg_c_file = basename + ".dbg.c"; - - string srcdir = "."; // FIXME: Is this really always correct? - - fprintf ( OUT, "# Begin Custom Build\r\n" ); - fprintf ( OUT, "InputPath=%s\r\n", spec_file.c_str() ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "BuildCmds= \\\r\n" ); - fprintf ( OUT, "\t..\\..\\tools\\winebuild\\%s\\winebuild.exe --def %s > %s \\\r\n", - output_dir.c_str(), - spec_file.c_str(), - def_file.c_str() ); - - if ( module.name == "ntdll" ) - { - int n = 0; - for ( i = 0; i < c_srcs.size(); i++ ) - { - const string& c_src = c_srcs[i]; - if(n++ > 0) - { - fprintf ( OUT, "\techo %s >> %s \\\r\n", c_src.c_str(), dbg_file.c_str() ); - } - else - { - fprintf ( OUT, "\techo %s > %s \\\r\n", c_src.c_str(), dbg_file.c_str() ); - } - } - fprintf ( OUT, "\t..\\..\\tools\\winebuild\\%s\\winebuild.exe", - output_dir.c_str() ); - fprintf ( OUT, " -o %s --debug -C%s %s \\\r\n", - dbg_c_file.c_str(), - srcdir.c_str(), - dbg_file.c_str() ); - } - else - { - string sc_srcs; - for ( i = 0; i < c_srcs.size(); i++ ) - { - const string& c_src = c_srcs[i]; - if ( !strcmp ( &c_src[c_src.size()-2], ".c" ) ) - { - if ( sc_srcs.size() ) - sc_srcs += " "; - sc_srcs += c_src; - } - } - - fprintf ( OUT, "\t..\\..\\tools\\winebuild\\%s\\winebuild.exe", - output_dir.c_str() ); - fprintf ( OUT, " -o %s --debug -C%s %s \\\r\n", - dbg_c_file.c_str(), - srcdir.c_str(), - sc_srcs.c_str() ); - } - - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\"%s\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\r\n", def_file.c_str() ); - fprintf ( OUT, " $(BuildCmds)\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\"%s\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\r\n", dbg_c_file.c_str() ); - fprintf ( OUT, " $(BuildCmds)\r\n" ); - fprintf ( OUT, "# End Custom Build\r\n" ); -#endif - } - /*else if ( source_file =~ /([^\\]*?\.h)$/ ) - { - my $h_file = $1; - - foreach my $cfg (@cfgs) { - if($#cfgs == 0) { - # Nothing - } elsif($n == 0) { - fprintf ( OUT, "!IF \"$(CFG)\" == \"$cfg\"\r\n" ); - fprintf ( OUT, "\r\n" ); - } else { - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "!ELSEIF \"$(CFG)\" == \"$cfg\"\r\n" ); - fprintf ( OUT, "\r\n" ); - } - - $output_dir = $cfg; - $output_dir =~ s/^$project - //; - $output_dir =~ s/ /_/g; - $output_dir =~ s/C\+\+/Cxx/g; - if($output_prefix_dir) { - $output_dir = "$output_prefix_dir\\$output_dir" ); - } - - fprintf ( OUT, "# Begin Custom Build\r\n" ); - fprintf ( OUT, "OutDir=%s\r\n", output_dir.c_str() ); - fprintf ( OUT, "InputPath=%s\r\n", source_file.c_str() ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\"$(OutDir)\\wine\\%s\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\r\n", h_file.c_str() ); - fprintf ( OUT, "\tcopy \"$(InputPath)\" \"$(OutDir)\\wine\"\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "# End Custom Build\r\n" ); - } - - if ( cfgs.size() != 0) - { - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "!ENDIF \r\n" ); - fprintf ( OUT, "\r\n" ); - } - }*/ - - fprintf ( OUT, "# End Source File\r\n" ); - } - fprintf ( OUT, "# End Group\r\n" ); - fprintf ( OUT, "# Begin Group \"Header Files\"\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n" ); - for ( i = 0; i < header_files.size(); i++ ) - { - const string& header_file = header_files[i]; - fprintf ( OUT, "# Begin Source File\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "SOURCE=.\\%s\r\n", header_file.c_str() ); - fprintf ( OUT, "# End Source File\r\n" ); - } - fprintf ( OUT, "# End Group\r\n" ); - - - - fprintf ( OUT, "# Begin Group \"Resource Files\"\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n" ); -/* for ( i = 0; i < resource_files.size(); i++ ) - { - const string& resource_file = resource_files[i]; - fprintf ( OUT, "# Begin Source File\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "SOURCE=.\\%s\r\n", resource_file.c_str() ); - fprintf ( OUT, "# End Source File\r\n" ); - } -*/ fprintf ( OUT, "# End Group\r\n" ); - - fprintf ( OUT, "# End Target\r\n" ); - fprintf ( OUT, "# End Project\r\n" ); - - fclose(OUT); -} - -void -MSVCBackend::_generate_dsw_header ( FILE* OUT ) -{ - fprintf ( OUT, "Microsoft Developer Studio Workspace File, Format Version 6.00\r\n" ); - fprintf ( OUT, "# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r\n" ); - fprintf ( OUT, "\r\n" ); -} - -void -MSVCBackend::_generate_dsw_project ( - FILE* OUT, - const Module& module, - std::string dsp_file, - const std::vector& dependencies ) -{ - dsp_file = DosSeparator ( std::string(".\\") + dsp_file ); - - // TODO FIXME - must they be sorted? - //@dependencies = sort(@dependencies); - - fprintf ( OUT, "###############################################################################\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "Project: \"%s\"=%s - Package Owner=<4>\r\n", module.name.c_str(), dsp_file.c_str() ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "Package=<5>\r\n" ); - fprintf ( OUT, "{{{\r\n" ); - fprintf ( OUT, "}}}\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "Package=<4>\r\n" ); - fprintf ( OUT, "{{{\r\n" ); - for ( size_t i = 0; i < dependencies.size(); i++ ) - { - Dependency& dependency = *dependencies[i]; - fprintf ( OUT, " Begin Project Dependency\r\n" ); - fprintf ( OUT, " Project_Dep_Name %s\r\n", dependency.module.name.c_str() ); - fprintf ( OUT, " End Project Dependency\r\n" ); - } - fprintf ( OUT, "}}}\r\n" ); - fprintf ( OUT, "\r\n" ); -} - -void -MSVCBackend::_generate_dsw_footer ( FILE* OUT ) -{ - fprintf ( OUT, "###############################################################################\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "Global:\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "Package=<5>\r\n" ); - fprintf ( OUT, "{{{\r\n" ); - fprintf ( OUT, "}}}\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "Package=<3>\r\n" ); - fprintf ( OUT, "{{{\r\n" ); - fprintf ( OUT, "}}}\r\n" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "###############################################################################\r\n" ); - fprintf ( OUT, "\r\n" ); -} - -void -MSVCBackend::_generate_wine_dsw ( FILE* OUT ) -{ - _generate_dsw_header(OUT); - // TODO FIXME - is it necessary to sort them? - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - - std::string dsp_file = DspFileName ( module ); - - // TODO FIXME - more wine hacks? - /*if ( module.name == "gdi32" ) - { - for ( size_t idir = 0; idir < gdi32_dirs.size(); idir++ ) - { - string dir2 = gdi32_dirs[idir]; - $dir2 =~ s%^.*?/([^/]+)$%$1%; - - dependencies.push_back ( Replace ( "gdi32_" + dir2, "/", "_" ) ); - } - }*/ - - _generate_dsw_project ( OUT, module, dsp_file, module.dependencies ); - } - _generate_dsw_footer ( OUT ); -} diff --git a/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp b/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp deleted file mode 100644 index ed744fbf064..00000000000 --- a/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp +++ /dev/null @@ -1,1123 +0,0 @@ -/* - * Copyright (C) 2002 Patrik Stridvall - * Copyright (C) 2005 Royce Mitchell III - * Copyright (C) 2006 Hervé Poussineau - * Copyright (C) 2006 Christoph von Wittich - * - * 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. - */ - -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include -#include -#include -#include - -#include - -#include "msvc.h" - -using std::string; -using std::vector; -using std::set; - -typedef set StringSet; - -#ifdef OUT -#undef OUT -#endif//OUT - -struct SortFilesAscending -{ - bool operator()(const string& rhs, const string& lhs) - { - return rhs < lhs; - } -}; - -MSVCConfiguration::MSVCConfiguration ( const OptimizationType optimization, const HeadersType headers, const std::string &name ) -{ - this->optimization = optimization; - this->headers = headers; - if ( name != "" ) - this->name = name; - else - { - std::string headers_name; - if ( headers == MSVCHeaders ) - headers_name = ""; - else - headers_name = " - ReactOS headers"; - if ( optimization == Debug ) - this->name = "Debug" + headers_name; - else if ( optimization == Release ) - this->name = "Release" + headers_name; - else if ( optimization == Speed ) - this->name = "Speed" + headers_name; - else - this->name = "Unknown" + headers_name; - } -} - -void -MSVCBackend::_generate_vcproj ( const Module& module ) -{ - size_t i; - - string vcproj_file = VcprojFileName(module); - string computername; - string username; - string intermediatedir = ""; - - if (getenv ( "USERNAME" ) != NULL) - username = getenv ( "USERNAME" ); - if (getenv ( "COMPUTERNAME" ) != NULL) - computername = getenv ( "COMPUTERNAME" ); - else if (getenv ( "HOSTNAME" ) != NULL) - computername = getenv ( "HOSTNAME" ); - - string vcproj_file_user = ""; - - if ((computername != "") && (username != "")) - vcproj_file_user = vcproj_file + "." + computername + "." + username + ".user"; - - printf ( "Creating MSVC.NET project: '%s'\n", vcproj_file.c_str() ); - FILE* OUT = fopen ( vcproj_file.c_str(), "wb" ); - - vector imports; - string module_type = GetExtension(*module.output); - bool lib = (module.type == ObjectLibrary) || (module.type == RpcClient) ||(module.type == RpcServer) || (module_type == ".lib") || (module_type == ".a"); - bool dll = (module_type == ".dll") || (module_type == ".cpl"); - bool exe = (module_type == ".exe") || (module_type == ".scr"); - bool sys = (module_type == ".sys"); - - string path_basedir = module.GetPathToBaseDir (); - string intenv = Environment::GetIntermediatePath (); - string outenv = Environment::GetOutputPath (); - string outdir; - string intdir; - string vcdir; - - - if ( intenv == "obj-i386" ) - intdir = path_basedir + "obj-i386"; /* append relative dir from project dir */ - else - intdir = intenv; - - if ( outenv == "output-i386" ) - outdir = path_basedir + "output-i386"; - else - outdir = outenv; - - if ( configuration.UseVSVersionInPath ) - { - vcdir = DEF_SSEP + _get_vc_dir(); - } - // TODO FIXME - need more checks here for 'sys' and possibly 'drv'? - - bool console = exe && (module.type == Win32CUI); - bool include_idl = false; - - vector source_files, resource_files, header_files, includes, includes_ros, libraries; - StringSet common_defines; - vector ifs_list; - ifs_list.push_back ( &module.project.non_if_data ); - ifs_list.push_back ( &module.non_if_data ); - - string baseaddr; - - while ( ifs_list.size() ) - { - const IfableData& data = *ifs_list.back(); - ifs_list.pop_back(); - const vector& files = data.files; - for ( i = 0; i < files.size(); i++ ) - { - if (files[i]->file.directory != SourceDirectory) - continue; - - // We want the full path here for directory support later on - string path = Path::RelativeFromDirectory ( - files[i]->file.relative_path, - module.output->relative_path ); - string file = path + std::string("\\") + files[i]->file.name; - - if ( !stricmp ( Right(file,3).c_str(), ".rc" ) ) - resource_files.push_back ( file ); - else if ( !stricmp ( Right(file,2).c_str(), ".h" ) ) - header_files.push_back ( file ); - else - source_files.push_back ( file ); - } - const vector& incs = data.includes; - for ( i = 0; i < incs.size(); i++ ) - { - string path = Path::RelativeFromDirectory ( - incs[i]->directory->relative_path, - module.output->relative_path ); - if ( module.type != RpcServer && module.type != RpcClient ) - { - if ( path.find ("/include/reactos/idl") != string::npos) - { - include_idl = true; - continue; - } - } - // switch between general headers and ros headers - if ( !strncmp(incs[i]->directory->relative_path.c_str(), "include\\crt", 11 ) || - !strncmp(incs[i]->directory->relative_path.c_str(), "include\\ddk", 11 ) || - !strncmp(incs[i]->directory->relative_path.c_str(), "include\\GL", 10 ) || - !strncmp(incs[i]->directory->relative_path.c_str(), "include\\psdk", 12 ) || - !strncmp(incs[i]->directory->relative_path.c_str(), "include\\reactos\\wine", 20 ) ) - { - if (strncmp(incs[i]->directory->relative_path.c_str(), "include\\crt", 11 )) - // not crt include - includes_ros.push_back ( path ); - } - else - { - includes.push_back ( path ); - } - } - const vector& libs = data.libraries; - for ( i = 0; i < libs.size(); i++ ) - { - string libpath = outdir + "\\" + libs[i]->importedModule->output->relative_path + "\\" + _get_vc_dir() + "\\---\\" + libs[i]->name + ".lib"; - libraries.push_back ( libpath ); - } - const vector& defs = data.defines; - for ( i = 0; i < defs.size(); i++ ) - { - if ( defs[i]->backend != "" && defs[i]->backend != "msvc" ) - continue; - - if ( defs[i]->value[0] ) - common_defines.insert( defs[i]->name + "=" + defs[i]->value ); - else - common_defines.insert( defs[i]->name ); - } - for ( std::map::const_iterator p = data.properties.begin(); p != data.properties.end(); ++ p ) - { - Property& prop = *p->second; - if ( strstr ( module.baseaddress.c_str(), prop.name.c_str() ) ) - baseaddr = prop.value; - } - } - /* include intermediate path for reactos.rc */ - string version = intdir + "\\include"; - includes.push_back (version); - version += "\\reactos"; - includes.push_back (version); - - string include_string; - - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\r\n" ); - - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\t\t\r\n" ); - fprintf ( OUT, "\t\r\n" ); - - //fprintf ( OUT, "\t\r\n" ); - //fprintf ( OUT, "\t\t\r\n", path.c_str() ); - //fprintf ( OUT, "\t\r\n" ); - - int n = 0; - - std::string output_dir; - string importLib; - - // don't do the work m_configurations.size() times - if (module.importLibrary != NULL) - { - intermediatedir = module.output->relative_path + vcdir; - importLib = _strip_gcc_deffile(module.importLibrary->source->name, module.importLibrary->source->relative_path, intermediatedir); - importLib = Path::RelativeFromDirectory ( - importLib, - module.output->relative_path ); - } - - fprintf ( OUT, "\t\r\n" ); - for ( size_t icfg = 0; icfg < m_configurations.size(); icfg++ ) - { - const MSVCConfiguration& cfg = *m_configurations[icfg]; - - bool debug = ( cfg.optimization == Debug ); - bool release = ( cfg.optimization == Release ); - bool speed = ( cfg.optimization == Speed ); - - fprintf ( OUT, "\t\trelative_path.c_str (), vcdir.c_str (), cfg.name.c_str() ); - fprintf ( OUT, "\t\t\tIntermediateDirectory=\"%s\\%s%s\\%s\"\r\n", intdir.c_str (), module.output->relative_path.c_str (), vcdir.c_str (), cfg.name.c_str() ); - } - else - { - fprintf ( OUT, "\t\t\tOutputDirectory=\"%s\\%s%s\"\r\n", outdir.c_str (), module.output->relative_path.c_str (), vcdir.c_str () ); - fprintf ( OUT, "\t\t\tIntermediateDirectory=\"%s\\%s%s\"\r\n", intdir.c_str (), module.output->relative_path.c_str (), vcdir.c_str () ); - } - - fprintf ( OUT, "\t\t\tConfigurationType=\"%d\"\r\n", exe ? 1 : dll ? 2 : lib ? 4 : -1 ); - fprintf ( OUT, "\t\t\tCharacterSet=\"2\">\r\n" ); - - fprintf ( OUT, "\t\t\t 0 ) - fprintf ( OUT, ";" ); - - string unescaped = *it1; - defines.erase(unescaped); - const string& escaped = _replace_str(unescaped, "\"",""); - - defines.insert(escaped); - fprintf ( OUT, "%s", escaped.c_str() ); - } - fprintf ( OUT, "\"\r\n" ); - fprintf ( OUT, "\t\t\t\tForcedIncludeFiles=\"%s\"\r\n", "warning.h"); - fprintf ( OUT, "\t\t\t\tMinimalRebuild=\"%s\"\r\n", speed ? "TRUE" : "FALSE" ); - fprintf ( OUT, "\t\t\t\tBasicRuntimeChecks=\"0\"\r\n" ); - fprintf ( OUT, "\t\t\t\tRuntimeLibrary=\"%d\"\r\n", debug ? 1 : 5 ); // 1=/MTd 5=/MT - fprintf ( OUT, "\t\t\t\tBufferSecurityCheck=\"FALSE\"\r\n" ); - fprintf ( OUT, "\t\t\t\tEnableFunctionLevelLinking=\"FALSE\"\r\n" ); - - if ( module.pch != NULL ) - { - fprintf ( OUT, "\t\t\t\tUsePrecompiledHeader=\"2\"\r\n" ); - string pch_path = Path::RelativeFromDirectory ( - module.pch->file->name, - module.output->relative_path ); - string::size_type pos = pch_path.find_last_of ("/"); - if ( pos != string::npos ) - pch_path.erase(0, pos+1); - fprintf ( OUT, "\t\t\t\tPrecompiledHeaderThrough=\"%s\"\r\n", pch_path.c_str() ); - - // Only include from the same module - pos = pch_path.find("../"); - if (pos == string::npos && std::find(header_files.begin(), header_files.end(), pch_path) == header_files.end()) - header_files.push_back(pch_path); - } - else - { - fprintf ( OUT, "\t\t\t\tUsePrecompiledHeader=\"0\"\r\n" ); - } - - fprintf ( OUT, "\t\t\t\tWholeProgramOptimization=\"%s\"\r\n", release ? "FALSE" : "FALSE"); - if ( release ) - { - fprintf ( OUT, "\t\t\t\tFavorSizeOrSpeed=\"1\"\r\n" ); - fprintf ( OUT, "\t\t\t\tStringPooling=\"true\"\r\n" ); - } - - fprintf ( OUT, "\t\t\t\tWarningLevel=\"%s\"\r\n", speed ? "0" : "3" ); - fprintf ( OUT, "\t\t\t\tDetect64BitPortabilityProblems=\"%s\"\r\n", "FALSE"); - if ( !module.cplusplus ) - fprintf ( OUT, "\t\t\t\tCompileAs=\"1\"\r\n" ); - - if ( module.type == Win32CUI || module.type == Win32GUI ) - { - fprintf ( OUT, "\t\t\t\tCallingConvention=\"%d\"\r\n", 0 ); // 0=__cdecl - } - else - { - fprintf ( OUT, "\t\t\t\tCallingConvention=\"%d\"\r\n", 2 ); // 2=__stdcall - } - - fprintf ( OUT, "\t\t\t\tDebugInformationFormat=\"%s\"/>\r\n", speed ? "0" : release ? "3": "4"); // 3=/Zi 4=ZI - - fprintf ( OUT, "\t\t\t\r\n" ); - - if ( lib ) - { - fprintf ( OUT, "\t\t\t\r\n", module.name.c_str() ); - } - else - { - fprintf ( OUT, "\t\t\t 0 ) - fprintf ( OUT, " " ); - string libpath = libraries[i].c_str(); - libpath = libpath.erase (0, libpath.find_last_of ("\\") + 1 ); - if ( libpath == "msvcrt.lib" ) - { - use_msvcrt_lib = true; - } - fprintf ( OUT, "%s", libpath.c_str() ); - } - fprintf ( OUT, "\"\r\n" ); - - fprintf ( OUT, "\t\t\t\tAdditionalLibraryDirectories=\"" ); - - // Add WDK libs paths, if needed - if (getenv ( "BASEDIR" ) != NULL && - (module.type == Kernel || - module.type == KernelModeDLL || - module.type == KernelModeDriver || - module.type == KeyboardLayout)) - { - string WdkBase, CrtPath, DdkPath; - WdkBase = getenv ( "BASEDIR" ); - CrtPath = WdkBase + "\\lib\\crt\\i386"; - DdkPath = WdkBase + "\\lib\\wnet\\i386"; - - fprintf ( OUT, "%s;", CrtPath.c_str() ); - fprintf ( OUT, "%s", DdkPath.c_str() ); - - if (libraries.size () > 0) - fprintf ( OUT, ";" ); - } - - // Add conventional libraries dirs - for (i = 0; i < libraries.size (); i++) - { - if ( i > 0 ) - fprintf ( OUT, ";" ); - - string libpath = libraries[i].c_str(); - libpath.replace (libpath.find("---"), 3, cfg.name); - libpath = libpath.substr (0, libpath.find_last_of ("\\") ); - fprintf ( OUT, "%s", libpath.c_str() ); - } - - fprintf ( OUT, "\"\r\n" ); - - fprintf ( OUT, "\t\t\t\tOutputFile=\"$(OutDir)/%s%s\"\r\n", module.name.c_str(), module_type.c_str() ); - fprintf ( OUT, "\t\t\t\tLinkIncremental=\"%d\"\r\n", debug ? 2 : 1 ); - fprintf ( OUT, "\t\t\t\tGenerateDebugInformation=\"%s\"\r\n", speed ? "FALSE" : "TRUE" ); - fprintf ( OUT, "\t\t\t\tLinkTimeCodeGeneration=\"%d\"\r\n", release? 0 : 0); // whole program optimization - - if ( debug ) - fprintf ( OUT, "\t\t\t\tProgramDatabaseFile=\"$(OutDir)/%s.pdb\"\r\n", module.name.c_str() ); - - if ( sys ) - { - fprintf ( OUT, "\t\t\t\tAdditionalOptions=\" /ALIGN:0x20 /SECTION:INIT,D /IGNORE:4001,4037,4039,4065,4070,4078,4087,4089,4096\"\r\n" ); - fprintf ( OUT, "\t\t\t\tIgnoreAllDefaultLibraries=\"TRUE\"\r\n" ); - fprintf ( OUT, "\t\t\t\tGenerateManifest=\"FALSE\"\r\n" ); - fprintf ( OUT, "\t\t\t\tSubSystem=\"%d\"\r\n", 3 ); - fprintf ( OUT, "\t\t\t\tDriver=\"%d\"\r\n", 1 ); - fprintf ( OUT, "\t\t\t\tEntryPointSymbol=\"%s\"\r\n", module.GetEntryPoint(false) == "" ? "DriverEntry" : module.GetEntryPoint(false).c_str ()); - fprintf ( OUT, "\t\t\t\tBaseAddress=\"%s\"\r\n", baseaddr == "" ? "0x10000" : baseaddr.c_str ()); - } - else if ( exe ) - { - if ( module.type == Kernel ) - { - fprintf ( OUT, "\t\t\t\tAdditionalOptions=\" /SECTION:INIT,D /ALIGN:0x80\"\r\n" ); - fprintf ( OUT, "\t\t\t\tIgnoreAllDefaultLibraries=\"TRUE\"\r\n" ); - fprintf ( OUT, "\t\t\t\tGenerateManifest=\"FALSE\"\r\n" ); - fprintf ( OUT, "\t\t\t\tSubSystem=\"%d\"\r\n", 3 ); - fprintf ( OUT, "\t\t\t\tDriver=\"%d\"\r\n", 1 ); - fprintf ( OUT, "\t\t\t\tEntryPointSymbol=\"KiSystemStartup\"\r\n" ); - fprintf ( OUT, "\t\t\t\tBaseAddress=\"%s\"\r\n", baseaddr.c_str ()); - } - else if ( module.type == NativeCUI ) - { - fprintf ( OUT, "\t\t\t\tAdditionalOptions=\" /ALIGN:0x20\"\r\n" ); - fprintf ( OUT, "\t\t\t\tSubSystem=\"%d\"\r\n", 1 ); - fprintf ( OUT, "\t\t\t\tGenerateManifest=\"FALSE\"\r\n" ); - fprintf ( OUT, "\t\t\t\tIgnoreAllDefaultLibraries=\"TRUE\"\r\n" ); - fprintf ( OUT, "\t\t\t\tEntryPointSymbol=\"NtProcessStartup\"\r\n" ); - fprintf ( OUT, "\t\t\t\tBaseAddress=\"%s\"\r\n", baseaddr.c_str ()); - } - else if ( module.type == Win32CUI || module.type == Win32GUI || module.type == Win32SCR) - { - if ( use_msvcrt_lib ) - { - fprintf ( OUT, "\t\t\t\tIgnoreAllDefaultLibraries=\"TRUE\"\r\n" ); - } - fprintf ( OUT, "\t\t\t\tSubSystem=\"%d\"\r\n", console ? 1 : 2 ); - } - } - else if ( dll ) - { - if (module.GetEntryPoint(false) == "0") - fprintf ( OUT, "\t\t\t\tEntryPointSymbol=\"\"\r\n" ); - else - { - // get rid of DllMain@12 because MSVC needs to link to _DllMainCRTStartup@12 - // when using CRT - if (module.GetEntryPoint(false) == "DllMain@12") - fprintf ( OUT, "\t\t\t\tEntryPointSymbol=\"\"\r\n" ); - else - fprintf ( OUT, "\t\t\t\tEntryPointSymbol=\"%s\"\r\n", module.GetEntryPoint(false).c_str ()); - } - fprintf ( OUT, "\t\t\t\tBaseAddress=\"%s\"\r\n", baseaddr == "" ? "0x40000" : baseaddr.c_str ()); - if ( use_msvcrt_lib ) - { - fprintf ( OUT, "\t\t\t\tIgnoreAllDefaultLibraries=\"TRUE\"\r\n" ); - } - } - fprintf ( OUT, "\t\t\t\tTargetMachine=\"%d\"/>\r\n", 1 ); - } - - fprintf ( OUT, "\t\t\t\r\n " ); - - fprintf ( OUT, "\t\t\t\r\n" ); - if (configuration.VSProjectVersion == "8.00") - { - fprintf ( OUT, "\t\t\t\r\n" ); - } - fprintf ( OUT, "\t\t\t\r\n" ); - fprintf ( OUT, "\t\t\t\r\n" ); - fprintf ( OUT, "\t\t\t\r\n" ); - fprintf ( OUT, "\t\t\t\r\n" ); - fprintf ( OUT, "\t\t\t\r\n" ); - fprintf ( OUT, "\t\t\r\n" ); - - n++; - } - fprintf ( OUT, "\t\r\n" ); - - fprintf ( OUT, "\t\r\n" ); - - // Source files - fprintf ( OUT, "\t\t\r\n" ); - - std::sort(source_files.begin(), source_files.end(), SortFilesAscending()); - vector last_folder; - vector split_path; - string indent_tab("\t\t\t"); - - for ( size_t isrcfile = 0; isrcfile < source_files.size(); isrcfile++ ) - { - string source_file = DosSeparator(source_files[isrcfile]); - - Path::Split(split_path, source_file, false); - size_t same_folder_index = 0; - for ( size_t ifolder = 0; ifolder < last_folder.size(); ifolder++ ) - { - if ( ifolder < split_path.size() && last_folder[ifolder] == split_path[ifolder] ) - ++same_folder_index; - else - break; - } - - if ( same_folder_index < split_path.size() || last_folder.size() > split_path.size() ) - { - int tabStart = 1; - if ( split_path.size() > last_folder.size() ) - { - for ( size_t ifolder = last_folder.size(); ifolder < split_path.size(); ifolder++ ) - indent_tab.push_back('\t'); - tabStart = split_path.size() - last_folder.size() + 1; - } - else if ( split_path.size() < last_folder.size() ) - { - indent_tab.resize( split_path.size() + 3 ); - tabStart = split_path.size() - last_folder.size() + 1; - } - - for ( size_t ifolder = last_folder.size(), itab = tabStart; ifolder > same_folder_index; ifolder--, itab++ ) - { - fprintf ( OUT, "%s\r\n", indent_tab.substr(0, indent_tab.size() - itab).c_str() ); - } - - for ( size_t ifolder = same_folder_index, itab = split_path.size() - same_folder_index; ifolder < split_path.size(); ifolder++, itab-- ) - { - const string tab = indent_tab.substr(0, indent_tab.size() - itab); - fprintf ( OUT, "%s\r\n", tab.c_str(), split_path[ifolder].c_str() ); - } - - last_folder = split_path; - } - - fprintf ( OUT, "%s\r\n", indent_tab.c_str(), source_file.c_str() ); - - for ( size_t iconfig = 0; iconfig < m_configurations.size(); iconfig++ ) - { - const MSVCConfiguration& config = *m_configurations[iconfig]; - - if (( isrcfile == 0 ) && ( module.pch != NULL )) - { - /* little hack to speed up PCH */ - fprintf ( OUT, "%s\t\r\n" ); - fprintf ( OUT, "%s\t\t\r\n", indent_tab.c_str() ); - fprintf ( OUT, "%s\t\r\n", indent_tab.c_str() ); - } - - //if (configuration.VSProjectVersion < "8.00") { - if ((source_file.find(".idl") != string::npos) || ((source_file.find(".asm") != string::npos || tolower(source_file.at(source_file.size() - 1)) == 's'))) - { - fprintf ( OUT, "%s\t\r\n" ); - fprintf ( OUT, "%s\t\t\r\n", indent_tab.c_str() ); - } - else if ((source_file.find(".asm") != string::npos)) - { - fprintf ( OUT, "%s\t\t\tName=\"VCCustomBuildTool\"\r\n", indent_tab.c_str() ); - fprintf ( OUT, "%s\t\t\tCommandLine=\"nasmw $(InputPath) -f coff -o "$(OutDir)\\$(InputName).obj"\"\r\n", indent_tab.c_str() ); - fprintf ( OUT, "%s\t\t\tOutputs=\"$(OutDir)\\$(InputName).obj\"/>\r\n", indent_tab.c_str() ); - } - else if ((tolower(source_file.at(source_file.size() - 1)) == 's')) - { - fprintf ( OUT, "%s\t\t\tName=\"VCCustomBuildTool\"\r\n", indent_tab.c_str() ); - fprintf ( OUT, "%s\t\t\tCommandLine=\"cl /E "$(InputPath)" %s /D__ASM__ | as -o "$(OutDir)\\$(InputName).obj"\"\r\n", indent_tab.c_str(), include_string.c_str() ); - fprintf ( OUT, "%s\t\t\tOutputs=\"$(OutDir)\\$(InputName).obj\"/>\r\n", indent_tab.c_str() ); - } - fprintf ( OUT, "%s\t\r\n", indent_tab.c_str() ); - } - //} - } - fprintf ( OUT, "%s\r\n", indent_tab.c_str() ); - } - - for ( size_t ifolder = last_folder.size(); ifolder > 0; ifolder-- ) - { - indent_tab.resize( ifolder + 2 ); - fprintf ( OUT, "%s\r\n", indent_tab.c_str() ); - } - - fprintf ( OUT, "\t\t\r\n" ); - - // Header files - fprintf ( OUT, "\t\t\r\n" ); - for ( i = 0; i < header_files.size(); i++ ) - { - const string& header_file = header_files[i]; - fprintf ( OUT, "\t\t\t\r\n", header_file.c_str() ); - fprintf ( OUT, "\t\t\t\r\n" ); - } - fprintf ( OUT, "\t\t\r\n" ); - - // Resource files - fprintf ( OUT, "\t\t\r\n" ); - for ( i = 0; i < resource_files.size(); i++ ) - { - const string& resource_file = resource_files[i]; - fprintf ( OUT, "\t\t\t\r\n", resource_file.c_str() ); - fprintf ( OUT, "\t\t\t\r\n" ); - } - fprintf ( OUT, "\t\t\r\n" ); - - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\r\n" ); - fclose ( OUT ); - - /* User configuration file */ - if (vcproj_file_user != "") - { - OUT = fopen ( vcproj_file_user.c_str(), "wb" ); - fprintf ( OUT, "\r\n" ); - fprintf ( OUT, "\r\n" ); - - fprintf ( OUT, "\t\r\n" ); - for ( size_t icfg = 0; icfg < m_configurations.size(); icfg++ ) - { - const MSVCConfiguration& cfg = *m_configurations[icfg]; - fprintf ( OUT, "\t\t\r\n" ); - fprintf ( OUT, "\t\t\t\r\n" ); - fprintf ( OUT, "\t\t\r\n" ); - } - fprintf ( OUT, "\t\r\n" ); - fprintf ( OUT, "\r\n" ); - fclose ( OUT ); - } - -} - -std::string -MSVCBackend::_strip_gcc_deffile(std::string Filename, std::string sourcedir, std::string objdir) -{ - std::string NewFilename = Environment::GetIntermediatePath () + "\\" + objdir + "\\" + Filename; - // we don't like infinite loops - so replace it in two steps - NewFilename = _replace_str(NewFilename, ".def", "_msvc.de"); - NewFilename = _replace_str(NewFilename, "_msvc.de", "_msvc.def"); - Filename = sourcedir + "\\" + Filename; - - Directory dir(objdir); - dir.GenerateTree(IntermediateDirectory, false); - - std::fstream in_file(Filename.c_str(), std::ios::in); - std::fstream out_file(NewFilename.c_str(), std::ios::out); - std::string::size_type pos; - DWORD i = 0; - - std::string line; - while (std::getline(in_file, line)) - { - pos = line.find("@", 0); - while (std::string::npos != pos) - { - if (pos > 1) - { - // make sure it is stdcall and no ordinal - if (line[pos -1] != ' ') - { - i = 0; - while (true) - { - i++; - if ((line[pos + i] < '0') || (line[pos + i] > '9')) - break; - } - line.replace(pos, i, ""); - } - } - pos = line.find("@", pos + 1); - } - - line += "\n"; - out_file << line; - } - in_file.close(); - out_file.close(); - - return NewFilename; -} - -std::string -MSVCBackend::_replace_str(std::string string1, const std::string &find_str, const std::string &replace_str) -{ - std::string::size_type pos = string1.find(find_str, 0); - int intLen = find_str.length(); - - while(std::string::npos != pos) - { - string1.replace(pos, intLen, replace_str); - pos = string1.find(find_str, intLen + pos); - } - - return string1; -} - -std::string -MSVCBackend::_get_solution_version ( void ) -{ - string version; - - if (configuration.VSProjectVersion.empty()) - configuration.VSProjectVersion = MS_VS_DEF_VERSION; - - else if (configuration.VSProjectVersion == "7.00") - version = "7.00"; - - else if (configuration.VSProjectVersion == "7.10") - version = "8.00"; - - else if (configuration.VSProjectVersion == "8.00") - version = "9.00"; - - else if (configuration.VSProjectVersion == "9.00") - version = "10.00"; - - return version; -} - -std::string -MSVCBackend::_get_studio_version ( void ) -{ - string version; - - if (configuration.VSProjectVersion.empty()) - configuration.VSProjectVersion = MS_VS_DEF_VERSION; - - else if (configuration.VSProjectVersion == "7.00") - version = "2002"; - - else if (configuration.VSProjectVersion == "7.10") - version = "2003"; - - else if (configuration.VSProjectVersion == "8.00") - version = "2005"; - - else if (configuration.VSProjectVersion == "9.00") - version = "2008"; - - return version; -} - -void -MSVCBackend::_generate_sln_header ( FILE* OUT ) -{ - fprintf ( OUT, "Microsoft Visual Studio Solution File, Format Version %s\r\n", _get_solution_version().c_str() ); - fprintf ( OUT, "# Visual Studio %s\r\n", _get_studio_version().c_str() ); - fprintf ( OUT, "\r\n" ); -} - - -void -MSVCBackend::_generate_sln_project ( - FILE* OUT, - const Module& module, - std::string vcproj_file, - std::string sln_guid, - std::string vcproj_guid, - const std::vector& libraries ) -{ - vcproj_file = DosSeparator ( std::string(".\\") + vcproj_file ); - - fprintf ( OUT, "Project(\"%s\") = \"%s\", \"%s\", \"%s\"\r\n", sln_guid.c_str() , module.name.c_str(), vcproj_file.c_str(), vcproj_guid.c_str() ); - - //FIXME: only omit ProjectDependencies in VS 2005 when there are no dependencies - //NOTE: VS 2002 do not use ProjectSection; it uses GlobalSection instead - if ((configuration.VSProjectVersion == "7.10") || (libraries.size() > 0)) { - fprintf ( OUT, "\tProjectSection(ProjectDependencies) = postProject\r\n" ); - for ( size_t i = 0; i < libraries.size(); i++ ) - { - const Module& module = *libraries[i]->importedModule; - fprintf ( OUT, "\t\t%s = %s\r\n", module.guid.c_str(), module.guid.c_str() ); - } - fprintf ( OUT, "\tEndProjectSection\r\n" ); - } - - fprintf ( OUT, "EndProject\r\n" ); -} - - -void -MSVCBackend::_generate_sln_footer ( FILE* OUT ) -{ - fprintf ( OUT, "Global\r\n" ); - fprintf ( OUT, "\tGlobalSection(SolutionConfiguration) = preSolution\r\n" ); - for ( size_t i = 0; i < m_configurations.size(); i++ ) - fprintf ( OUT, "\t\t%s = %s\r\n", m_configurations[i]->name.c_str(), m_configurations[i]->name.c_str() ); - fprintf ( OUT, "\tEndGlobalSection\r\n" ); - fprintf ( OUT, "\tGlobalSection(ProjectConfiguration) = postSolution\r\n" ); - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - std::string guid = module.guid; - _generate_sln_configurations ( OUT, guid.c_str() ); - } - fprintf ( OUT, "\tEndGlobalSection\r\n" ); - fprintf ( OUT, "\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n" ); - fprintf ( OUT, "\tEndGlobalSection\r\n" ); - fprintf ( OUT, "\tGlobalSection(ExtensibilityAddIns) = postSolution\r\n" ); - fprintf ( OUT, "\tEndGlobalSection\r\n" ); - - if (configuration.VSProjectVersion == "7.00") { - fprintf ( OUT, "\tGlobalSection(ProjectDependencies) = postSolution\r\n" ); - //FIXME: Add dependencies for VS 2002 - fprintf ( OUT, "\tEndGlobalSection\r\n" ); - } - - if (configuration.VSProjectVersion == "8.00") { - fprintf ( OUT, "\tGlobalSection(SolutionProperties) = preSolution\r\n" ); - fprintf ( OUT, "\t\tHideSolutionNode = FALSE\r\n" ); - fprintf ( OUT, "\tEndGlobalSection\r\n" ); - } - - fprintf ( OUT, "EndGlobal\r\n" ); - fprintf ( OUT, "\r\n" ); -} - - -void -MSVCBackend::_generate_sln_configurations ( FILE* OUT, std::string vcproj_guid ) -{ - for ( size_t i = 0; i < m_configurations.size (); i++) - { - const MSVCConfiguration& cfg = *m_configurations[i]; - fprintf ( OUT, "\t\t%s.%s|Win32.ActiveCfg = %s|Win32\r\n", vcproj_guid.c_str(), cfg.name.c_str(), cfg.name.c_str() ); - fprintf ( OUT, "\t\t%s.%s|Win32.Build.0 = %s|Win32\r\n", vcproj_guid.c_str(), cfg.name.c_str(), cfg.name.c_str() ); - } -} - -void -MSVCBackend::_generate_sln ( FILE* OUT ) -{ - string sln_guid = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; - vector guids; - - _generate_sln_header(OUT); - // TODO FIXME - is it necessary to sort them? - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - - std::string vcproj_file = VcprojFileName ( module ); - _generate_sln_project ( OUT, module, vcproj_file, sln_guid, module.guid, module.non_if_data.libraries ); - } - _generate_sln_footer ( OUT ); -} - -const Property* -MSVCBackend::_lookup_property ( const Module& module, const std::string& name ) const -{ - std::map::const_iterator p; - - /* Check local values */ - p = module.non_if_data.properties.find(name); - - if ( p != module.non_if_data.properties.end() ) - return p->second; - - // TODO FIXME - should we check local if-ed properties? - p = module.project.non_if_data.properties.find(name); - - if ( p != module.project.non_if_data.properties.end() ) - return p->second; - - // TODO FIXME - should we check global if-ed properties? - return NULL; -} diff --git a/reactos/tools/rbuild/backend/versionreport/versionreport.cpp b/reactos/tools/rbuild/backend/versionreport/versionreport.cpp deleted file mode 100644 index e61af5f1c56..00000000000 --- a/reactos/tools/rbuild/backend/versionreport/versionreport.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2007 Marc Piulachs (marc.piulachs [at] codexchange [dot] net) - * - * 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. - */ -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include -#include -#include - -#include - -#include "versionreport.h" -#include "../mingw/mingw.h" - -using std::string; -using std::vector; -using std::map; -using std::ifstream; - -#ifdef OUT -#undef OUT -#endif//OUT - - -static class VReportFactory : public Backend::Factory -{ - public: - - VReportFactory() : Factory("VReport", "Version Report") {} - Backend *operator() (Project &project, - Configuration& configuration) - { - return new VReportBackend(project, configuration); - } - -} factory; - - -VReportBackend::VReportBackend(Project &project, - Configuration& configuration) : Backend(project, configuration) -{ - -} - -void VReportBackend::Process() -{ - string filename_depmap ( "versionreport.xml" ); - printf ( "Creating version report: %s\n", filename_depmap.c_str() ); - - m_VReportFile = fopen ( filename_depmap.c_str(), "wb" ); - - if ( !m_VReportFile ) - { - printf ( "Could not create file '%s'.\n", filename_depmap.c_str() ); - return; - } - - GenerateReport ( m_VReportFile ); - - fclose ( m_VReportFile ); - printf ( "Done.\n" ); -} - -void -VReportBackend::CleanFiles ( void ) -{ - remove ( "versionreport.xml" ); -} - -void -VReportBackend::GenerateReport ( FILE* OUT ) -{ - fprintf ( m_VReportFile, "\r\n" ); - fprintf ( m_VReportFile, "\r\n" ); - fprintf ( m_VReportFile, "\r\n" ); - - for( std::map::const_iterator p = ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p ) - { - Module& module = *p->second; - if ((module.type != Iso) && - (module.type != LiveIso) && - (module.type != IsoRegTest) && - (module.type != LiveIsoRegTest)) - { - Module& module = *p->second; - - if (module.metadata) - { - if (module.metadata->version.length() > 0) - { - fprintf ( m_VReportFile, "\t\r\n" ); - fprintf ( m_VReportFile, "\t\t%s\r\n", module.name.c_str () ); - fprintf ( m_VReportFile, "\t\t%s\r\n", module.output->relative_path.c_str () ); - fprintf ( m_VReportFile, "\t\t%s\r\n", module.metadata->version.c_str () ); - fprintf ( m_VReportFile, "\t\t%s\r\n", module.metadata->date.c_str () ); - fprintf ( m_VReportFile, "\t\t%s\r\n", module.metadata->owner.c_str () ); - fprintf ( m_VReportFile, "\t\r\n" ); - } - } - } - } - - fprintf ( m_VReportFile, "" ); -} - - -VReportConfiguration::VReportConfiguration ( const std::string &name ) -{ - /* nothing to do here */ -} diff --git a/reactos/tools/rbuild/backend/versionreport/versionreport.h b/reactos/tools/rbuild/backend/versionreport/versionreport.h deleted file mode 100644 index 7280d29709e..00000000000 --- a/reactos/tools/rbuild/backend/versionreport/versionreport.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2007 Marc Piulachs (marc.piulachs [at] codexchange [dot] net) - * - * 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. - */ -#ifndef __VREPORT_H__ -#define __VREPORT_H__ - -#include -#include -#include - -#include "../backend.h" - -class VReportConfiguration -{ - public: - VReportConfiguration(const std::string &name = ""); - virtual ~VReportConfiguration() {} - std::string name; -}; - -class VReportBackend : public Backend -{ - public: - - VReportBackend(Project &project, - Configuration& configuration); - virtual ~VReportBackend() {} - - virtual void Process(); - - private: - - FILE* m_VReportFile; - - std::vector m_configurations; - - void GenerateReport ( FILE* OUT ); - void CleanFiles ( void ); - - struct module_data - { - std::vector libraries; - std::vector references; - - module_data() - {} - ~module_data() - {} - }; - -}; - - -#endif // __VREPORT_H__ diff --git a/reactos/tools/rbuild/bootstrap.cpp b/reactos/tools/rbuild/bootstrap.cpp deleted file mode 100644 index 31cef585c9e..00000000000 --- a/reactos/tools/rbuild/bootstrap.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; - -Bootstrap::Bootstrap ( const Project& project_, - const Module* module_, - const XMLElement& bootstrapNode ) - : project(project_), - module(module_), - node(bootstrapNode) -{ - Initialize(); -} - -Bootstrap::~Bootstrap () -{ -} - -bool -Bootstrap::IsSupportedModuleType ( ModuleType type ) -{ - switch ( type ) - { - case Kernel: - case KernelModeDLL: - case KeyboardLayout: - case NativeDLL: - case NativeCUI: - case Win32DLL: - case Win32OCX: - case Win32CUI: - case Win32SCR: - case Win32GUI: - case KernelModeDriver: - case BootSector: - case BootLoader: - case BootProgram: - case Cabinet: - return true; - case BuildTool: - case StaticLibrary: - case HostStaticLibrary: - case ObjectLibrary: - case Iso: - case LiveIso: - case IsoRegTest: - case LiveIsoRegTest: - case Test: - case RpcServer: - case RpcClient: - case RpcProxy: - case Alias: - case IdlHeader: - case MessageHeader: - case EmbeddedTypeLib: - case ElfExecutable: - return false; - case TypeDontCare: - break; - } - throw InvalidOperationException ( __FILE__, - __LINE__ ); -} - -string -Bootstrap::ReplaceVariable ( const string& name, - const string& value, - string path ) -{ - size_t i = path.find ( name ); - if ( i != string::npos ) - return path.replace ( i, name.length (), value ); - else - return path; -} - -void -Bootstrap::Initialize () -{ - if ( !IsSupportedModuleType ( module->type ) ) - { - throw XMLInvalidBuildFileException ( - node.location, - " is not applicable for this module type." ); - } - - const XMLAttribute* att = node.GetAttribute ( "installbase", false ); - if ( att != NULL ) - base = ReplaceVariable ( "$(CDOUTPUT)", Environment::GetCdOutputPath (), att->value ); - else - base = ""; - - att = node.GetAttribute ( "nameoncd", false ); - if ( att != NULL ) - nameoncd = att->value; - else - nameoncd = module->output->name; -} - -void -Bootstrap::ProcessXML() -{ -} diff --git a/reactos/tools/rbuild/cdfile.cpp b/reactos/tools/rbuild/cdfile.cpp deleted file mode 100644 index e577d25ab53..00000000000 --- a/reactos/tools/rbuild/cdfile.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; - -string -CDFile::ReplaceVariable ( const string& name, - const string& value, - string path ) -{ - size_t i = path.find ( name ); - if ( i != string::npos ) - return path.replace ( i, name.length (), value ); - else - return path; -} - -CDFile::~CDFile () -{ - delete source; - delete target; -} - -CDFile::CDFile ( const Project& project, - const XMLElement& cdfileNode, - const string& path ) - : XmlNode ( project, cdfileNode ) -{ - const XMLAttribute* att = cdfileNode.GetAttribute ( "installbase", false ); - string target_relative_directory; - if ( att != NULL ) - target_relative_directory = ReplaceVariable ( "$(CDOUTPUT)", Environment::GetCdOutputPath (), att->value ); - else - target_relative_directory = ""; - - const XMLAttribute* nameoncd = cdfileNode.GetAttribute ( "nameoncd", false ); - - source = new FileLocation ( SourceDirectory, - path, - cdfileNode.value, - &cdfileNode ); - target = new FileLocation ( OutputDirectory, - target_relative_directory, - nameoncd ? nameoncd->value : cdfileNode.value, - &cdfileNode ); -} diff --git a/reactos/tools/rbuild/compilationunit.cpp b/reactos/tools/rbuild/compilationunit.cpp deleted file mode 100644 index 0fa05c0daf3..00000000000 --- a/reactos/tools/rbuild/compilationunit.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -CompilationUnit::CompilationUnit ( const File* file ) - : project(NULL), - module(NULL), - node(NULL) -{ - default_name = new FileLocation ( IntermediateDirectory, - "", - file->file.name ); - - name = file->file.relative_path + sSep + file->file.name; - files.push_back ( file ); -} - -CompilationUnit::CompilationUnit ( const Project* project, - const Module* module, - const XMLElement* node ) - : project(project), - module(module), - node(node) -{ - const XMLAttribute* att = node->GetAttribute ( "name", true ); - assert(att); - - default_name = new FileLocation ( IntermediateDirectory, - module ? module->output->relative_path : "", - att->value, - node ); - name = module->output->relative_path + cSep + att->value; -} - -CompilationUnit::~CompilationUnit () -{ - size_t i; - for ( i = 0; i < files.size (); i++ ) - delete files[i]; - - delete default_name; -} - -void -CompilationUnit::ProcessXML () -{ - size_t i; - for ( i = 0; i < files.size (); i++ ) - const_cast ( files[i] )->ProcessXML (); -} - -bool -CompilationUnit::IsGeneratedFile () const -{ - if ( files.size () != 1 ) - return false; - const File* file = files[0]; - string extension = GetExtension ( file->file ); - return ( extension == ".spec" || extension == ".SPEC" || extension == ".mc" || extension == ".MC"); -} - -bool -CompilationUnit::HasFileWithExtension ( const std::string& extension ) const -{ - size_t i; - for ( i = 0; i < files.size (); i++ ) - { - const File& file = *files[i]; - string fileExtension = GetExtension ( file.file ); - if ( !stricmp ( fileExtension.c_str (), extension.c_str () ) ) - return true; - } - return false; -} - -bool -CompilationUnit::IsFirstFile () const -{ - if ( files.size () == 0 || files.size () > 1 ) - return false; - const File* file = files[0]; - return file->first; -} - - -const FileLocation& -CompilationUnit::GetFilename () const -{ - if ( files.size () == 0 || files.size () > 1 ) - return *default_name; - - const File* file = files[0]; - return file->file; -} - -const std::string& -CompilationUnit::GetSwitches () const -{ - static const std::string empty_string = std::string(""); - if ( files.size () == 0 || files.size () > 1 ) - return empty_string; - const File* file = files[0]; - return file->switches; -} - -void -CompilationUnit::AddFile ( const File * file ) -{ - files.push_back ( file ); -} - -const std::vector -CompilationUnit::GetFiles () const -{ - return files; -} diff --git a/reactos/tools/rbuild/compilationunitsupportcode.cpp b/reactos/tools/rbuild/compilationunitsupportcode.cpp deleted file mode 100644 index 2e7fdf8bacd..00000000000 --- a/reactos/tools/rbuild/compilationunitsupportcode.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -CompilationUnitSupportCode::CompilationUnitSupportCode ( const Project& project ) - : project ( project ) -{ -} - -CompilationUnitSupportCode::~CompilationUnitSupportCode () -{ -} - -void -CompilationUnitSupportCode::Generate ( bool verbose ) -{ - for( std::map::const_iterator p = project.modules.begin(); p != project.modules.end(); ++ p ) - { - GenerateForModule ( *p->second, - verbose ); - } -} - -void -CompilationUnitSupportCode::GenerateForModule ( Module& module, - bool verbose ) -{ - if ( verbose ) - { - printf ( "\nGenerating compilation unit support code for %s", - module.name.c_str () ); - } - - for ( size_t i = 0; i < module.non_if_data.compilationUnits.size () ; i++ ) - { - CompilationUnit& compilationUnit = *module.non_if_data.compilationUnits[i]; - if ( compilationUnit.GetFiles ().size () <= 1 ) - continue; - WriteCompilationUnitFile ( module, compilationUnit ); - } -} - -string -CompilationUnitSupportCode::GetCompilationUnitFilename ( Module& module, - CompilationUnit& compilationUnit ) -{ - return NormalizeFilename ( Environment::GetIntermediatePath () + sSep + compilationUnit.name ); -} - -void -CompilationUnitSupportCode::WriteCompilationUnitFile ( Module& module, - CompilationUnit& compilationUnit ) -{ - char* buf; - char* s; - - buf = (char*) malloc ( 512*1024 ); - if ( buf == NULL ) - throw OutOfMemoryException (); - - s = buf; - s = s + sprintf ( s, "/* This file is automatically generated. */\n" ); - s = s + sprintf ( s, "#define ONE_COMPILATION_UNIT\n" ); - - for ( size_t i = 0; i < compilationUnit.GetFiles ().size () ; i++ ) - { - const File& file = *compilationUnit.GetFiles ()[i]; - s = s + sprintf ( s, "#include <%s/%s>\n", ChangeSeparator ( file.file.relative_path, '\\', '/' ).c_str (), file.file.name.c_str () ); - } - - s = s + sprintf ( s, "\n" ); - - FileSupportCode::WriteIfChanged ( buf, GetCompilationUnitFilename ( module, compilationUnit ) ); - - free ( buf ); -} diff --git a/reactos/tools/rbuild/compilerflag.cpp b/reactos/tools/rbuild/compilerflag.cpp deleted file mode 100644 index 00c5562b831..00000000000 --- a/reactos/tools/rbuild/compilerflag.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -CompilerFlag::CompilerFlag ( const Project& project_, - const XMLElement& compilerFlagNode ) - : project(project_), - module(NULL), - node(compilerFlagNode) -{ - Initialize(); -} - -CompilerFlag::CompilerFlag ( const Project& project_, - const Module* module_, - const XMLElement& compilerFlagNode ) - : project(project_), - module(module_), - node(compilerFlagNode) -{ - Initialize(); -} - -CompilerFlag::~CompilerFlag () -{ -} - -void -CompilerFlag::Initialize () -{ - if (node.value.size () == 0) - { - throw XMLInvalidBuildFileException ( - node.location, - " is empty." ); - } - - flag = node.value; - compiler = CompilerTypeDontCare; - - const XMLAttribute* att = node.GetAttribute ( "compiler", false ); - if ( att != NULL) - { - if ( att->value == "cpp" ) - compiler = CompilerTypeCPP; - else if ( att->value == "cc" ) - compiler = CompilerTypeCC; - else - { - throw InvalidAttributeValueException ( - node.location, - "compiler", - att->value ); - } - } -} - -void -CompilerFlag::ProcessXML () -{ -} diff --git a/reactos/tools/rbuild/configuration.cpp b/reactos/tools/rbuild/configuration.cpp deleted file mode 100644 index 84188c1fe7d..00000000000 --- a/reactos/tools/rbuild/configuration.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -Configuration::Configuration () -{ - Verbose = false; - CleanAsYouGo = false; - AutomaticDependencies = true; - CheckDependenciesForModuleOnly = false; - CompilationUnitsEnabled = true; - PrecompiledHeadersEnabled = true; - MakeHandlesInstallDirectories = false; - GenerateProxyMakefilesInSourceTree = false; - InstallFiles = false; - UseConfigurationInPath = false; - UseVSVersionInPath = false; -} - -Configuration::~Configuration () -{ -} diff --git a/reactos/tools/rbuild/define.cpp b/reactos/tools/rbuild/define.cpp deleted file mode 100644 index d972d672b0c..00000000000 --- a/reactos/tools/rbuild/define.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -Define::Define ( const Project& project, - const XMLElement& defineNode ) - : project(project), - module(NULL), - node(&defineNode) -{ - Initialize(); -} - -Define::Define ( const Project& project, - const Module* module, - const XMLElement& defineNode ) - : project(project), - module(module), - node(&defineNode) -{ - Initialize(); -} - -Define::Define ( const Project& project, - const Module* module, - const std::string& name_, - const std::string& backend_) - : project(project), - module(module), - node(NULL) -{ - name = name_; - value = ""; - backend = backend_; -} - -Define::~Define () -{ -// if ( node ) -// delete node; -// if ( module ) -// delete module; -} - -void -Define::Initialize() -{ - const XMLAttribute* att = node->GetAttribute ( "name", true ); - - att = node->GetAttribute ( "name", true ); - assert(att); - name = att->value; - value = node->value; - - att = node->GetAttribute ( "backend", false ); - if ( att ) - backend = att->value; - - att = node->GetAttribute ( "overridable", false ); - if ( att ) - overridable = ( att->value == "true" || att->value == "yes" ); - else - overridable = false; -} - -void -Define::ProcessXML() -{ -} diff --git a/reactos/tools/rbuild/directory.cpp b/reactos/tools/rbuild/directory.cpp deleted file mode 100644 index 381328398f3..00000000000 --- a/reactos/tools/rbuild/directory.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" -#ifdef _MSC_VER -#include -#else -#include -#endif//_MSC_VER - -#ifdef WIN32 -#define MKDIR(s) mkdir(s) -#else -#define MKDIR(s) mkdir(s, 0755) -#endif - -using std::string; -using std::vector; - -Directory::Directory ( const string& name_ ) - : name(name_) -{ - size_t pos = name.find_first_of ( "$:" ); - if ( pos != string::npos ) - { - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory name '%s'", - name.c_str() ); - } - - const char* p = strpbrk ( name_.c_str (), "/\\" ); - if ( name_.c_str () == p ) - { - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid relative path '%s'", - name_.c_str () ); - } - - if ( p ) - { - name.erase ( p - name_.c_str ()); - Add ( p + 1 ); - } -} - -void -Directory::Add ( const char* subdir ) -{ - size_t i; - string s1 = string ( subdir ); - if ( ( i = s1.find ( '$' ) ) != string::npos ) - { - throw InvalidOperationException ( __FILE__, - __LINE__, - "No environment variables can be used here. Path was %s", - subdir ); - } - - const char* p = strpbrk ( subdir, "/\\" ); - if ( subdir == p || ( *subdir && subdir[1] == ':' ) ) - { - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid relative path '%s'", - subdir ); - } - - if ( !p ) - p = subdir + strlen(subdir); - string s ( subdir, p-subdir ); - if ( subdirs.find(s) == subdirs.end() ) - subdirs[s] = new Directory(s); - if ( *p && *++p ) - subdirs[s]->Add ( p ); -} - -bool -Directory::mkdir_p ( const char* path ) -{ -#ifndef _MSC_VER - DIR *directory; - directory = opendir ( path ); - if ( directory != NULL ) - { - closedir ( directory ); - return false; - } -#endif//_MSC_VER - - if ( MKDIR ( path ) != 0 ) - { -#ifdef _MSC_VER - if ( errno == EEXIST ) - return false; -#endif//_MSC_VER - throw AccessDeniedException ( string ( path ) ); - } - return true; -} - -bool -Directory::CreateDirectory ( const string& path ) -{ - size_t index = 0; - size_t nextIndex; - if ( isalpha ( path[0] ) && path[1] == ':' && path[2] == cSep ) - { - nextIndex = path.find ( cSep, 3); - index = path.find ( cSep ); - } - else - nextIndex = path.find ( cSep ); - - bool directoryWasCreated = false; - while ( nextIndex != string::npos ) - { - nextIndex = path.find ( cSep, index + 1 ); - directoryWasCreated = mkdir_p ( path.substr ( 0, nextIndex ).c_str () ); - index = nextIndex; - } - return directoryWasCreated; -} - -void -Directory::GenerateTree ( DirectoryLocation root, - bool verbose ) -{ - switch ( root ) - { - case IntermediateDirectory: - return GenerateTree ( Environment::GetIntermediatePath (), verbose ); - case OutputDirectory: - return GenerateTree ( Environment::GetOutputPath (), verbose ); - case InstallDirectory: - return GenerateTree ( Environment::GetInstallPath (), verbose ); - default: - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %d.", - root ); - } -} - -void -Directory::GenerateTree ( const string& parent, - bool verbose ) -{ - string path; - - if ( parent.size () > 0 ) - { - if ( name.size () > 0 ) - path = parent + sSep + name; - else - path = parent; - if ( CreateDirectory ( path ) && verbose ) - printf ( "Created %s\n", path.c_str () ); - } - else - path = name; - - for ( directory_map::iterator i = subdirs.begin (); - i != subdirs.end (); - ++i ) - { - i->second->GenerateTree ( path, verbose ); - } -} - -string -Directory::EscapeSpaces ( const string& path ) -{ - string newpath; - const char* p = &path[0]; - while ( *p != 0 ) - { - if ( *p == ' ' ) - newpath = newpath + "\\ "; - else - newpath = newpath + *p; - *p++; - } - return newpath; -} - -void -Directory::CreateRule ( FILE* f, - const string& parent ) -{ - string path; - string escapedName = EscapeSpaces ( name ); - - if ( escapedName.size() > 0 ) - { - if ( ! (escapedName == "tools" && - ( parent == "$(OUTPUT)" || parent == "$(INTERMEDIATE)" ) ) ) - { - fprintf ( f, - "%s%c%s: | %s\n", - parent.c_str (), - cSep, - escapedName.c_str (), - parent.c_str () ); - - fprintf ( f, - "\t$(ECHO_MKDIR)\n" ); - - fprintf ( f, - "\t${mkdir} $@\n" ); - } - - path = parent + sSep + escapedName; - } - else - path = parent; - - for ( directory_map::iterator i = subdirs.begin(); - i != subdirs.end(); - ++i ) - { - i->second->CreateRule ( f, path ); - } -} - -Directory::~Directory() -{ - std::map::iterator theIterator; - for ( theIterator = subdirs.begin (); theIterator != subdirs.end (); theIterator++ ) - delete theIterator->second; -} diff --git a/reactos/tools/rbuild/doc/rbuild.dbk b/reactos/tools/rbuild/doc/rbuild.dbk deleted file mode 100644 index 692db206722..00000000000 --- a/reactos/tools/rbuild/doc/rbuild.dbk +++ /dev/null @@ -1,1809 +0,0 @@ - - - - ReactOS Build System Documentation - - - $Id$ - - - Casper - - Hornstrup - - - - Emanuele - - Aliberti - - - - 2005 - - - - - Building ReactOS - -
        - Building ReactOS - - To generate GNU make makefiles and building ReactOS, do the - following: - - Go to the top-level reactos - directory; - - - - Run the command:mingw32-make - - This will start building ReactOS. - - - - To build a bootable CD, run the following command:mingw32-make bootcdThis - will create ReactOS.iso in the top-level - reactos directory. -
        -
        - - - How build directions are stored - - XML files are used throughout the ReactOS source tree to drive the - build system. - -
        - Top-level XML Build File - - The top-level XML build file (ReactOS.rbuild) is - processed by rbuild. The following is an example of - how it could look like:<?xml version="1.0"?> -<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd"> -<project name="ReactOS" makefile="Makefile.auto" xmlns:xi="http://www.w3.org/2001/XInclude"> - <xi:include href="config.rbuild"> - <xi:fallback> - <xi:include href="config.template.rbuild" /> - </xi:fallback> - </xi:include> - - <define name="_M_IX86" /> - <if property="DBG" value="1"> - <define name="DBG" value="1" /> - <property name="DBG_OR_KDBG" value="true" /> - </if> - - <include base="ReactOS">include</include> - - <directory name="boot"> - <xi:include href="boot/boot.rbuild" /> - </directory> - - <module name="bootcd" type="iso"> - </module> -</project> -
        - -
        - XInclude - - XML files used by rbuild are modular and use - XInclude to include other chunks of XML in the top-level - ReactOS.rbuild file. The namespace used by XInclude is - xi. - -
        - xi:include - - It is possible to split an XML build file over several files. - The include element in the xi namespace is used to - accomplish this. - -
        - Syntax - - <xi:include href="config.rbuild"> - <xi:fallback> - <xi:include href="config.template.rbuild" /> - </xi:fallback> -</xi:include> -
        - -
        - Attributes - - - - href - - - Name of XML build file to include. The filename is - relative to the location of the current XML build - file. - - - -
        - -
        - Content - - None. -
        - -
        - Children - - xi:fallback. -
        -
        - -
        - xi:fallback - - This element is used to provide the name of an alternate file - that is to be included if the first include file did not - exists. - -
        - Syntax - - <xi:fallback> - <xi:include href="config.template.rbuild" /> -</xi:fallback> -
        - -
        - Attributes - - None. -
        - -
        - Content - - None. -
        - -
        - Parents - - xi:include. -
        - -
        - Children - - xi:include. -
        -
        -
        - -
        - Element reference - -
        - Bootstrap element - - A bootstrap element specifies that the generated file should be - put on the bootable CD as a bootstrap file. - -
        - Syntax - - <bootstrap base="reactos" nameoncd="halmp.dll" /> -
        - -
        - Attributes - - - - base - - - Put file in this directory on the bootable CD. This - attribute is optional. - - - - - nameoncd - - - Name of file on the bootable CD. This attribute is - optional. - - - -
        - -
        - Content - - None. -
        - -
        - Parents - - module. -
        - -
        - Children - - None. -
        -
        - -
        - CDFile element - - A cdfile element specifies the name of a file that is to be put - on the bootable CD. - -
        - Syntax - - <cdfile base="reactos" nameoncd="ReadMe.txt">ReadMe.txt</cdfile> -
        - -
        - Attributes - - - - base - - - Put file in this directory on the bootable CD. This - attribute is optional. - - - - - nameoncd - - - Name of file on the bootable CD. This attribute is - optional. - - - -
        - -
        - Content - - Name of file. -
        - -
        - Children - - None. -
        -
        - -
        - Compilerflag element - - A compilerflag element specifies additional flags to be bassed - to the compiler. - -
        - Syntax - - <compilerflags>-Wpointer-arith</compilerflag> -
        - -
        - Attributes. - - None. -
        - -
        - Content - - The compiler flags. -
        - -
        - Parents - - if, project. -
        - -
        - Children - - None. -
        -
        - -
        - Component element - - A component element specifies that imports from a library are to - be stubbed so tests can be run without actually calling the functions - in the library. This element can only be used for modules of type - test. - -
        - Syntax - - <component name="ntdll.dll"> - ... -</component> -
        - -
        - Attributes - - - - name - - - Name of library. - - - -
        - -
        - Content - - None. -
        - -
        - Children - - symbol. -
        -
        - -
        - Define element - - A define element specifies the name and (optionally) value of a - define for the C/C++ compiler and resource compiler. - -
        - Syntax - - <define name="WINVER">0x501</define> -
        - -
        - Attributes - - - - name - - - Name of define. - - - -
        - -
        - Content - - Value of define. The value is optional. -
        - -
        - Parents - - project, module. -
        - -
        - Children - - None. -
        -
        - -
        - Dependency element - - A dependency element specifies the name of a module (usually of - type buildtool) that is to be processed before the current - module. - -
        - Syntax - - <dependency>OtherModule</dependency> -
        - -
        - Attributes - - None. -
        - -
        - Content - - Name of module. -
        - -
        - Children - - None. -
        -
        - -
        - Directory element - - A directory element specifies the name of a subdirectory. - -
        - Syntax - - <directory name="MyDirectory"> - ... -</directory> -
        - -
        - Attributes - - - - name - - - Name of directory. - - - -
        - -
        - Content - - None. -
        - -
        - Parents - - directory, if, project. -
        - -
        - Children - - cdfile, directory, file, if, pch, property. -
        -
        - -
        - File element - - A file element specifies the name of a file that is to be - processed. - -
        - Syntax - - <file>MyFile.c</file> -
        - -
        - Attributes - - None. -
        - -
        - Content - - Name of file. -
        - -
        - Parents - - directory, module. -
        - -
        - Children - - None. -
        -
        - -
        - Group element - - A group element's purpose is grouping subelements. - -
        - Syntax - - <group> - <file>i386-dis.c</file> - <file>kdb_help.S</file> - <file>longjmp.S</file> - <file>setjmp.S</file> -</group> -
        - -
        - Attributes - - None. -
        - -
        - Content - - None. -
        - -
        - Parents - - if. -
        - -
        - Children - - file. -
        -
        - -
        - If element - - An if element allows for conditional processing of other - elements. - -
        - Syntax - - <if property="DBG" value="1"> - ... -</if> -
        - -
        - Attributes - - - - property - - - Name of the property that is to be evaluated. - - - - - value - - - Value to compare to the value of the property. If the - property has the specified value, then the subelements are - processed. - - - -
        - -
        - Content - - None. -
        - -
        - Parents - - project, directory. -
        - -
        - Children - - compilerflag, - define, directory, file, if, include, property. -
        -
        - -
        - Importlibrary element - - An importlibrary element specifies that an import library should - be generated which other modules can use to link with the current - module. - -
        - Syntax - - <importlibrary definition="MyModule.def" /> -
        - -
        - Attributes - - - - definition - - - Filename of definition file - (.def) used to generate the import - library. The filename is relative to the current - module. - - - -
        - -
        - Content - - None. -
        - -
        - Parents - - module. -
        - -
        - Children - - None. -
        -
        - -
        - Include element - - An include element specifies an include directory for the C/C++ - compiler and resource compiler. - -
        - Syntax - - <include base="MyLibraryModule">include</include> -
        - -
        - Attributes - - - - base - - - Module or project which the value of this element is - relative to. This attribute is optional. If left out, the - include directory is relative to the position of the - top-level XML build file. - - - -
        - -
        - Content - - Relative include directory. -
        - -
        - Parents - - project, module. -
        - -
        - Children - - None. -
        -
        - -
        - Input element - - An input element specifies a group of filenames that is to be - passed as parameters to a build tool. Input filename parameters are - located after output filename parameters on the command line. - -
        - Syntax - - <input> - ... -</input> -
        - -
        - Attributes - - None. -
        - -
        - Content - - None. -
        - -
        - Parents - - invoke. -
        - -
        - Children - - inputfile. -
        -
        - -
        - Inputfile element - - An inputfile element specifies a filename that is to be passed - as a parameter to a build tool. - -
        - Syntax - - <inputfile>ntoskrnl.mc</inputfile> -
        - -
        - Attributes - - - - switches - - - Switches that is passed as parameters just before the - filename. This attribute is optional. - - - -
        - -
        - Content - - Name of file that is to be passed as a parameter to the build - tool. -
        - -
        - Parents - - input. -
        - -
        - Children - - None. -
        -
        - -
        - Installfile element - - An installfile element specifies the name of a file that is to - be installed when using 'make install'. - -
        - Syntax - - <installfile base="reactos" newname="ReadMe.txt">ReadMe.txt</installfile> -
        - -
        - Attributes - - - - base - - - Put file in this directory within the install - directory. This attribute is optional. - - - - - newname - - - Name of file within the install directory. This - attribute is optional. - - - -
        - -
        - Content - - Name of file. -
        - -
        - Children - - None. -
        -
        - -
        - Invoke element - - An invoke element specifies the name of a module which is to be - executed before the current module is processed. - -
        - Syntax - - <invoke module="wmc"> - <input> - <inputfile>ntoskrnl.mc</inputfile> - </input> - <output> - <outputfile switches="-H">../include/reactos/bugcodes.h</outputfile> - <outputfile switches="-o">bugcodes.rc</outputfile> - </output> -</invoke> -
        - -
        - Attributes - - - - module - - - Name of the module to execute. - - - -
        - -
        - Content - - None. -
        - -
        - Children - - input, output. -
        -
        - -
        - Library element - - A library element specifies the name of another module which is - to be linked with the current module. - -
        - Syntax - - <library>MyLibraryModule</library> -
        - -
        - Attributes - - None.section -
        - -
        - Parents - - module. -
        - -
        - Children - - None. -
        -
        - -
        - Linkerflag element - - A likerflag element specifies flags to be passed to the linker - tool. - -
        - Syntax - - <linkerflag>-lgcc</linkerflag> -
        - -
        - Attributes - - None. -
        - -
        - Content - - The switches to pass to the linker. -
        - -
        - Parents - - module. -
        - -
        - Children - - None. -
        -
        - -
        - Module element - - There can be zero or more modules per XML build file. - -
        - Syntax - - <module if="${MP}" ifnot="${MP}" name="msvcrt" type="win32dll" extension=".dll" entrypoint="_DllMain@12" baseaddress="0x70000000" mangledsymbols="true" installbase="system32" installname="msvcrt.dll" usewrc="false" allowwarnings="true" aliasof="module1"> - ... -</module> -
        - -
        - Attributes - - - - if - - - If the value is 1, then the module is enabled, - otherwise it is disabled. A disabled module is not - processed. - - - - - ifnot - - - If the value is 1, then the module is disabled, - otherwise it is enabled. A disabled module is not - processed. - - - - - name - - - Name of the module. Also the base name of the - generated file if such file is generated for the particular - module type. - - - - - type - - - Type of module. See below for an explanation of module - types. The module type determines the - actions that is to be carried out to process the module. The - defined module types are seen - below: - - - Module Types - - - - - Value - - Output name suffix - - Entrypoint - - Baseaddress - - Mangledsymbols - - Description - - - - - - buildtool - - - - - .exe (Windows) - - none (Linux) - - - - - - - - - - - - - - Builds a tool that can be run (invoked) when - building ReactOS. - - - - staticlibrary - - .a - - - - - - - - - - - Builds a static library containing object - files that can be linked together with other - modules. - - - - objectlibrary - - .o - - - - - - - - - - - Builds object files that can be linked - together with other modules. - - - - kernel - - .exe - - _NtProcessStartup - - - - - - - - Builds - ntoskrnl.exe. - - - - kernelmodedll - - .dll - - _DriverEntry@8 - - - - - - - - Builds a kernel-mode DLL. - - - - kernelmodedriver - - .sys - - _DriverEntry@8 - - - - - - - - Builds a kernel-mode driver. - - - - nativecui - - .exe - - _NtProcessStartup - - - - - - - - Build a native NT/ROS program (no enviroment - subsystem required to run). - - - - nativedll - - .dll - - _DllMainCRTStartup@12 - - - - - - - - Builds a native DLL. - - - - win32dll - - .dll - - _DllMain@12 - - - - - - - - Builds a Win32 DLL. - - - - win32cui - - .exe - - _mainCRTStartup - - - - - - - - Builds a Win32 console executable. - - - - win32gui - - .exe - - _WinMainCRTStartup - - - - - - - - Builds a Win32 GUI executable. - - - - bootloader - - - - - - - - - - - - - - Builds a bootloader. - - - - bootsector - - - - - - - - - - - - - - Builds one or more bootsector - binaries. - - - - iso - - - - - - - - - - - -. - - Builds a bootable CD. - - - - test - - .exe - - _mainCRTStartup - - - - - - - - Builds a testsuite. - - - - rpcserver - - .o - - - - - - - - - - - Generates and builds server code for an RPC - interface. - - - - rpcclient - - .o - - - - - - - - - - - Generates and builds client code for an RPC - interface. - - - - alias - - - - - - - - - - - - - - Module is an alias for another module. This - module type is the only module type for which the - aliasof attribute is applicable. Only the module - install functionality is aliased. - - - -
        -
        -
        - - - extension - - - Extension of the generated file if such file is - generated for the particular module type. - - - - - entrypoint - - - Entrypoint symbol of the generated file if such file - is generated for the particular module type. - - - - - baseaddress - - - Base address of the generated file if such file is - generated for the particular module type. - - - - - mangledsymbols - - - Controls wether or not to pass --kill-at to dlltool. - If this attribute has the value false then --kill-at is - passed to dlltool. If the value is true, then --kill-at is - not passed to dlltool. If the generated file exports C++ - classes then this need to be true. - - - - - installbase - - - Base directory of the generated file in the - installation directory. This attribute is optional. - - - - - installname - - - Name of generated file in the installation directory. - This attribute is optional, but if not specified, the - generated file is not copied to the installation - directory. - - - - - usewrc - - - Use WRC to compile resources if true. If false, - windres is used. This attribute is optional. If not - specified, WRC will be used. - - - - - allowwarnings - - - Error out if false and at least one warning is emitted - during building of this module. This attribute is optional. - If not specified, it is assumed to be false. - - - - - aliasof - - - Name of module that is aliased. - - -
        -
        - -
        - Content - - None. -
        - -
        - Parents - - project, directory. -
        - -
        - Children - - bootstrap, component, define, dependency, directory, file, if, importlibrary, include, invoke, library, linkerflag, property. -
        -
        - -
        - Output element - - An output element specifies a group of filenames that is to be - passed as parameters to a build tool. Output filename parameters are - located before input filename parameters on the command line. - -
        - Syntax - - <output> - ... -</output> -
        - -
        - Attributes - - None. -
        - -
        - Content - - None. -
        - -
        - Parents - - invoke -
        - -
        - Children - - outputfile. -
        -
        - -
        - Outputfile element - - An outputfile element specifies a filename that is to be passed - as a parameter to a build tool. - -
        - Syntax - - <outputfile switches="-H">../include/reactos/bugcodes.h</outputfile> -
        - -
        - Attributes - - - - switches - - - Switches that are passed as parameters just before the - filename. This attribute is optional. - - - -
        - -
        - Content - - Name of file that is to be passed as a parameter to the build - tool. -
        - -
        - Parents - - output. -
        - -
        - Children - - None. -
        -
        - -
        - Pch element - - A pch element specifies a GCC precompiled header file. - -
        - Syntax - - <pch>ntdll.h</pch> -
        - -
        - Attributes - - None. -
        - -
        - Content - - Name of the include file to be precompiled. -
        - -
        - Parents - - directory. -
        - -
        - Children - - None. -
        -
        - -
        - Project element - - There can be one project per - top-level XML build file. A project can only be defined in a top-level - XML build file. - -
        - Syntax - - <project name="ReactOS" makefile="Makefile.auto" xmlns:xi="http://www.w3.org/2001/XInclude"> - ... -</project> -
        - -
        - Attributes - - - - name - - - Name of the project. - - - - - makefile - - - Filename of the GNU makefile that is to be - created. - - - -
        - -
        - Content - - None. -
        - -
        - Parents - - None. This is the top-level (root) element of - ReactOS.rbuild file. -
        - -
        - Children - - define, directory, if, include, module, property. -
        -
        - -
        - Property element - - A property element specifies the name and value of a property - that can be used for conditional processing of the XML build - file. - -
        - Syntax - - <property name="mypropertyname" value="mypropertyvalue" /> -
        - -
        - Attributes - - - - name - - - Name of property. - - - - - value - - - Value of property. - - - -
        - -
        - Content - - None. -
        - -
        - Parents - - -
        - -
        - Children - - None. -
        -
        - -
        - Symbol element - - A symbol element specifies an imported function from a library - that is to be stubbed so tests can be run without actually calling the - function in the library. - -
        - Syntax - - <symbol newname="RtlAllocateHeap">HeapAlloc@12</symbol> -
        - -
        - Attributes - - - - newname - - - New name of symbol. This attribute is optional. - - - -
        - -
        - Content - - Name of symbol. -
        - -
        - Children - - None. -
        -
        -
        -
        - - - Bibliography - - <ulink - url="http://www.w3.org/TR/2004/REC-xml-20040204/">Extensible Markup - Language (XML) 1.0 (Third Edition)</ulink>W3C - Recommendation - François - - Yergeau - - Tim - - Bray - - Jean - - Paoli - - C. M. - - Sperberg-McQueen - - Eve - - Maler - 4th February 2004 - - <ulink - url="http://www.w3.org/TR/2004/REC-xinclude-20041220/">XML Inclusions - (XInclude) Version 1.0 </ulink>W3C - Recommendation - Jonathan - - Marsh - - - Microsoft - - - jmarsh@microsoft.com - - David - - Orchard - - - BEA Systems - - - dorchard@bea.com - 20 December 2004 - -
        \ No newline at end of file diff --git a/reactos/tools/rbuild/doc/rbuild.txt b/reactos/tools/rbuild/doc/rbuild.txt deleted file mode 100644 index ffe0a711a12..00000000000 --- a/reactos/tools/rbuild/doc/rbuild.txt +++ /dev/null @@ -1,538 +0,0 @@ -ReactOS Build System Documentation -================================== - -Building ReactOS ----------------- -To generate GNU make makefiles and building ReactOS do the following: - - 1) Go to the top-level reactos directory - 2) Run the command: mingw32-make - -This will start building ReactOS. - -To build a bootable CD run the following command: - - mingw32-make bootcd - -This will create ReactOS.iso in the top-level reactos directory. - - -Top-level XML Build File ------------------------- -The top-level xml build file (ReactOS.rbuild) is processed by rbuild. The following is an example of how it could look like: - - - - - - - - - - - - - - - - - include - - - - - - - - - - -xi:include ----------- -It is possible to split an xml build file over several files. The include element in the xi namespace is used to accomplish this. - -Syntax: - - - - - - -Attributes: - href - Name of xml build file to include. The filename is relative to the location of the current xml build file. - -Value: - None. - -Elements: - xi:fallback - - -xi:fallback ------------ -This element is used to provide the name of an alternate file that is to be included if the first include file did not exists. - -Attributes: - None. - -Value: - None. - -Elements: - xi:include. - - -Project element ---------------- -There can be one project per top-level XML build file. A project can only be defined in a top-level xml build file. - -Syntax: - - ... - - -Attributes: - name - Name of the project. - makefile - Filename of the GNU makefile that is to be created. - -Value: - None. - -Elements: - define, directory, if, include, module, property - - -Module element --------------- -There can be zero or more modules per xml build file. - -Syntax: - - ... - - -Attributes: - if - If the value is 1, then the module is enabled, otherwise it is disabled. A disabled module is not processed. - ifnot - If the value is 1, then the module is disabled, otherwise it is enabled. A disabled module is not processed. - name - Name of the module. Also the base name of the generated file if such file is generated for the particular module type. - type - Type of module. See below for an explanation of module types. - extension - Extension of the generated file if such file is generated for the particular module type. - entrypoint - Entrypoint symbol of the generated file if such file is generated for the particular module type. - baseaddress - Base address of the generated file if such file is generated for the particular module type. - mangledsymbols - Controls wether or not to pass --kill-at to dlltool. If this attribute has the value false then --kill-at is passed to dlltool. If the value is true, then --kill-at is not passed to dlltool. If the generated file exports C++ classes then this need to be true. - installbase - Base directory of the generated file in the installation directory. This attribute is optional. - installname - Name of generated file in the installation directory. This attribute is optional, but if not specified, the generated file is not copied to the installation directory. - usewrc - Use WRC to compile resources if true. If false, windres is used. This attribute is optional. If not specified, WRC will be used. - allowwarnings - Error out if false and at least one warning is emitted during building of this module. This attribute is optional. If not specified, it is assumed to be false. - aliasof - Name of module that is aliased. -Value: - None. - -Elements: - autoregister, bootstrap, component, compilationunit, define, dependency, directory, file, if, importlibrary, include, invoke, library, linkerscript, property. - - -Module types ------------- -The module type determines the actions that is to be carried out to process the module. The defined module types are seen below: - buildtool - Builds a tool that can be run (invoked) when building ReactOS. Default extension is .exe when building on Windows and nothing when building on Linux. The entrypoint, baseaddress, and mangledsymbols module attributes are not applicable for this module type. - staticlibrary - Builds a static library containing object files that can be linked together with other modules. Default extension is .a. The entrypoint, baseaddress, and mangledsymbols module attributes are not applicable for this module type. - objectlibrary - Builds object files that can be linked together with other modules. Default extension is .o. The entrypoint, baseaddress, and mangledsymbols module attributes are not applicable for this module type. - kernel - Builds ntoskrnl.exe. Default extension is .exe. Default entrypoint is _NtProcessStartup. - kernelmodedll - Builds a kernel-mode DLL. Default extension is .dll. Default entrypoint is _DriverEntry@8. - kernelmodedriver - Builds a kernel-mode driver. Default extension is .sys. Default entrypoint is _DriverEntry@8. - nativedll - Builds a native DLL. Default extension is .dll. Default entrypoint is _DllMainCRTStartup@12. - win32dll - Builds a Win32 DLL. Default extension is .dll. Default entrypoint is _DllMain@12. - win32cui - Builds a Win32 console executable. Default extension is .exe. Default entrypoint is _mainCRTStartup. The baseaddress module attribute is not applicable for this module type. - win32gui - Builds a Win32 GUI executable. Default extension is .exe. Default entrypoint is _WinMainCRTStartup. The baseaddress module attribute is not applicable for this module type. - bootloader - Builds a bootloader. The entrypoint, baseaddress, and mangledsymbols module attributes are not applicable for this module type. - bootsector - Builds one or more bootsector binaries. The entrypoint, baseaddress, and mangledsymbols module attributes are not applicable for this module type. - iso - Builds a bootable CD. The entrypoint, baseaddress, and mangledsymbols module attributes are not applicable for this module type. - test - Builds a testsuite. Default extension is .exe. Default entrypoint is _mainCRTStartup. The baseaddress module attribute is not applicable for this module type. - rpcserver - Generates and builds server code for an RPC interface. Default extension is .o. The entrypoint, baseaddress, and mangledsymbols module attributes are not applicable for this module type. - rpcclient - Generates and builds client code for an RPC interface. Default extension is .o. The entrypoint, baseaddress, and mangledsymbols module attributes are not applicable for this module type. - alias - Module is an alias for another module. This module type is the only module type for which the aliasof attribute is applicable. Only the module install functionality is aliased. - - -Autoregister element --------------------- -An autoregister element specifies that the generated executable should be registered in the registry during second stage setup. - -Syntax: - - -Attributes: - infsection - Name of section in syssetup.inf. - type - Type of registration. Can be either DllRegisterServer, DllInstall, or Both. - -Value: - None. - -Elements: - None. - - -Bootstrap element ------------------ -A bootstrap element specifies that the generated file should be put on the bootable CD as a bootstrap file. - -Syntax: - - -Attributes: - installbase - Put file in this directory on the bootable CD. This attribute is optional. - nameoncd - Name of file on the bootable CD. This attribute is optional. - -Value: - None. - -Elements: - None. - - -CDFile element --------------- -A cdfile element specifies the name of a file that is to be put on the bootable CD. - -Syntax: - ReadMe.txt - -Attributes: - installbase - Put file in this directory on the bootable CD. This attribute is optional. - nameoncd - Name of file on the bootable CD. This attribute is optional. - -Value: - Name of file. - -Elements: - None. - - -CompilationUnit element ------------------------ -A compilationunit element specifies that one or more source code files are to be compiled as a single compilation unit. - -Syntax: - - ... - - -Attributes: - name - Name of generated source code file. - -Value: - None. - -Elements: - directory, file, if. - - -Component element ------------------ -A component element specifies that imports from a library are to be stubbed so tests can be run without actually calling the functions in the library. This element can only be used for modules of type test. - -Syntax: - - ... - - -Attributes: - name - Name of library. - -Value: - None. - -Elements: - Symbol. - - -Symbol element --------------- -A symbol element specifies an imported function from a library that is to be stubbed so tests can be run without actually calling the function in the library. - -Syntax: - HeapAlloc@12 - -Attributes: - newname - New name of symbol. This attribute is optional. - -Value: - Name of symbol. - -Elements: - None. - - -Define element --------------- -A define element specifies the name and (optionally) value of a define for the C/C++ compiler and resource compiler. - -Syntax: - 0x501 - -Attributes: - name - Name of define. - -Value: - Value of define. The value is optional. - -Elements: - None. - - -Dependency element ------------------- -A dependency element specifies the name of a module (usually of type buildtool) that is to be processed before the current module. - -Syntax: - OtherModule - -Attributes: - None. - -Value: - Name of module. - -Elements: - None. - - -Directory element ------------------ -A directory element specifies the name of a subdirectory. - -Syntax: - - ... - - -Attributes: - name - Name of directory. - -Value: - None. - -Elements: - cdfile, directory, file, if, property. - - -File element ------------- -A file element specifies the name of a file that is to be processed. - -Syntax: - MyFile.c - -Attributes: - None. - -Value: - Name of file. - -Elements: - None. - - -If element ----------- -An if element allows for conditional processing of other elements. - -Syntax: - - ... - - -Attributes: - property - Name of the property that is to be evaluated. - value - Value to compare to the value of the property. If the property has the specified value, then the subelements are processed. - -Value: - None. - -Elements: - compilationunit, compilerflag, define, directory, file, if, include, property. - - -Importlibrary element ---------------------- -An importlibrary element specifies that an import library should be generated which other modules can use to link with the current module. - -Syntax: - - -Attributes: - definition - Filename of definition file (.def) used to generate the import library. The filename is relative to the current module. - -Value: - None. - -Elements: - None. - - -Include element ---------------- -An include element specifies an include directory for the C/C++ compiler and resource compiler. - -Syntax: - include - -Attributes: - base - Module or project which the value of this element is relative to. This attribute is optional. If left out, the include directory is relative to the position of the top-level xml build file. - -Value: - Relative include directory. - -Elements: - None. - - -Installfile element -------------------- -An installfile element specifies the name of a file that is to be installed when using 'make install'. - -Syntax: - ReadMe.txt - -Attributes: - installbase - Put file in this directory within the install directory. This attribute is optional. - newname - Name of file within the install directory. This attribute is optional. - -Value: - Name of file. - -Elements: - None. - - -Invoke element --------------- -An invoke element specifies the name of a module which is to be executed before the current module is processed. - -Syntax: - - - ntoskrnl.mc - - - ../include/reactos/bugcodes.h - bugcodes.rc - - - -Attributes: - None. - -Value: - Name of the module to execute. - -Elements: - input, output. - - -Input element -------------- -An input element specifies a group of filenames that is to be passed as parameters to a build tool. Input filename parameters are located after output filename parameters on the command line. - -Attributes: - None. - -Value: - None. - -Elements: - inputfile. - - -Inputfile element ------------------ -An inputfile element specifies a filename that is to be passed as a parameter to a build tool. - -Attributes: - switches - Switches that is passed as parameters just before the filename. This attribute is optional. - -Value: - Name of file that is to be passed as a parameter to the build tool. - -Elements: - None. - - -Output element --------------- -An output element specifies a group of filenames that is to be passed as parameters to a build tool. Output filename parameters are located before input filename parameters on the command line. - -Attributes: - None. - -Value: - None. - -Elements: - outputfile. - - -Outputfile element ------------------- -An outputfile element specifies a filename that is to be passed as a parameter to a build tool. - -Attributes: - switches - Switches that is passed as parameters just before the filename. This attribute is optional. - -Value: - Name of file that is to be passed as a parameter to the build tool. - -Elements: - None. - - -Library -------- -An importlibrary element specifies the name of another module which is to be linked with the current module. - -Syntax: - MyLibraryModule - -Attributes: - None. - -Value: - Name of the module to link with. - -Elements: - None. - - -Linkerscript ------------- -A linkerscript element specifies the filename of a binutils linker script. - -Syntax: - MyLinkerScript - -Attributes: - base - Module which the value of this element is relative to. This attribute is optional. If left out, the linker script is relative to the position of the top-level xml build file. - -Value: - Relative linker script filename. - -Elements: - None. - - -Property --------- -A property element specifies the name and value of a property that can be used for conditional processing of the xml build file. - -Syntax: - - -Attributes: - name - Name of property. - value - Value of property. - -Value: - None. - -Elements: - None. diff --git a/reactos/tools/rbuild/empty.def b/reactos/tools/rbuild/empty.def deleted file mode 100644 index aabd2247c04..00000000000 --- a/reactos/tools/rbuild/empty.def +++ /dev/null @@ -1 +0,0 @@ -EXPORTS diff --git a/reactos/tools/rbuild/exception.cpp b/reactos/tools/rbuild/exception.cpp deleted file mode 100644 index f4056bbda44..00000000000 --- a/reactos/tools/rbuild/exception.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include "rbuild.h" - -using std::string; - -Exception::Exception () -{ -} - -Exception::Exception ( const string& message ) -{ - _e = message; -} - -Exception::Exception ( const char* format, ...) -{ - va_list args; - va_start ( args, format); - _e = ssvprintf ( format, args); - va_end ( args ); -} - -void Exception::SetMessage ( const char* format, ...) -{ - va_list args; - va_start ( args, format); - _e = ssvprintf ( format, args); - va_end ( args ); -} - -void Exception::SetMessageV ( const char* message, va_list args ) -{ - _e = ssvprintf ( message, args); -} - - -MissingArgumentException::MissingArgumentException ( const string& argument ) - : Exception ( "Argument '%s' is missing", - argument.c_str () ) -{ -} - - -OutOfMemoryException::OutOfMemoryException () - : Exception ( "Out of memory" ) -{ -} - - -InvalidOperationException::InvalidOperationException ( - const char* filename, - const int linenumber ) - : Exception ( "%s:%d", filename, linenumber ) -{ -} - -InvalidDateException::InvalidDateException ( const string& filename) - : Exception ( "File '%s' has an invalid date.", - filename.c_str() ) -{ - Filename = filename; -} - -InvalidOperationException::InvalidOperationException ( - const char* filename, - const int linenumber, - const char* message, - ... ) -{ - string errorMessage; - va_list args; - va_start ( args, message ); - errorMessage = ssvprintf ( message, args ); - va_end ( args ); - SetMessage ( - "%s:%d %s", - filename, - linenumber, - errorMessage.c_str () ); -} - - -FileNotFoundException::FileNotFoundException ( const string& filename ) - : Exception ( "File '%s' not found.", - filename.c_str() ) -{ - Filename = filename; -} - - -AccessDeniedException::AccessDeniedException ( const string& filename) - : Exception ( "Access denied to file or directory '%s'.", - filename.c_str() ) -{ - Filename = filename; -} - - -RequiredAttributeNotFoundException::RequiredAttributeNotFoundException ( - const string& location, - const string& attributeName, - const string& elementName ) - : XMLInvalidBuildFileException ( - location, - "Required attribute '%s' not found on '%s'.", - attributeName.c_str (), - elementName.c_str ()) -{ -} - -InvalidAttributeValueException::InvalidAttributeValueException ( - const string& location, - const string& name, - const string& value ) - : XMLInvalidBuildFileException ( - location, - "Attribute '%s' has an invalid value '%s'.", - name.c_str (), - value.c_str () ) -{ - -} - -BackendNameConflictException::BackendNameConflictException ( const string& name ) - : Exception ( "Backend name conflict: '%s'", - name.c_str() ) -{ -} - - -UnknownBackendException::UnknownBackendException ( const string& name ) - : Exception ( "Unknown Backend requested: '%s'", - name.c_str() ) -{ -} - - -UnknownModuleTypeException::UnknownModuleTypeException ( const string& location, - int moduletype ) - : XMLInvalidBuildFileException ( - location, - "module type requested: %i", - moduletype ) -{ -} - - -InvocationFailedException::InvocationFailedException ( const std::string& command, - int exitcode ) - : Exception ( "Failed to execute '%s' (exit code %d)", - command.c_str (), - exitcode ) -{ - Command = command; - ExitCode = exitcode; -} - - -UnsupportedBuildToolException::UnsupportedBuildToolException ( const std::string& buildTool, - const std::string& version ) - : Exception ( "Build tool '%s' with version '%s' is unsupported. Please upgrade your build tool.", - buildTool.c_str (), - version.c_str () ) -{ - BuildTool = buildTool; - Version = version; -} diff --git a/reactos/tools/rbuild/exception.h b/reactos/tools/rbuild/exception.h deleted file mode 100644 index 48cd35d3275..00000000000 --- a/reactos/tools/rbuild/exception.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef __EXCEPTION_H -#define __EXCEPTION_H - -#include "pch.h" -#include "xml.h" - -class Exception -{ -public: - Exception ( const std::string& message ); - Exception ( const char* format, - ...); - const std::string& operator *() { return _e; } - -protected: - Exception (); - void SetMessage ( const char* message, ... ); - void SetMessageV ( const char* message, va_list args ); - -private: - std::string _e; -}; - - -class MissingArgumentException : public Exception -{ -public: - MissingArgumentException ( const std::string& argument ); -}; - - -class InvalidOperationException : public Exception -{ -public: - InvalidOperationException ( const char* filename, - const int linenumber); - InvalidOperationException ( const char* filename, - const int linenumber, - const char* message, - ... ); -}; - - -class OutOfMemoryException : public Exception -{ -public: - OutOfMemoryException (); -}; - - -class FileNotFoundException : public Exception -{ -public: - FileNotFoundException ( const std::string& filename ); - std::string Filename; -}; - - -class AccessDeniedException : public Exception -{ -public: - AccessDeniedException ( const std::string& filename ); - std::string Filename; -}; - -class InvalidDateException : public Exception -{ -public: - InvalidDateException ( const std::string& filename ); - std::string Filename; -}; - -class RequiredAttributeNotFoundException : public XMLInvalidBuildFileException -{ -public: - RequiredAttributeNotFoundException ( const std::string& location, - const std::string& attributeName, - const std::string& elementName ); -}; - - -class InvalidAttributeValueException : public XMLInvalidBuildFileException -{ -public: - InvalidAttributeValueException ( const std::string& location, - const std::string& name, - const std::string& value ); -}; - - -class BackendNameConflictException : public Exception -{ -public: - BackendNameConflictException ( const std::string& name ); -}; - - -class UnknownBackendException : public Exception -{ -public: - UnknownBackendException ( const std::string& name ); -}; - -class UnknownModuleTypeException : public XMLInvalidBuildFileException -{ -public: - UnknownModuleTypeException ( const std::string& location, - int moduletype ); -}; - - -class InvocationFailedException : public Exception -{ -public: - InvocationFailedException ( const std::string& command, - int exitcode ); - std::string Command; - int ExitCode; -}; - - -class UnsupportedBuildToolException : public Exception -{ -public: - UnsupportedBuildToolException ( const std::string& buildtool, - const std::string& version ); - std::string BuildTool; - std::string Version; -}; - -#endif /* __EXCEPTION_H */ diff --git a/reactos/tools/rbuild/filesupportcode.cpp b/reactos/tools/rbuild/filesupportcode.cpp deleted file mode 100644 index 69ffbe66e54..00000000000 --- a/reactos/tools/rbuild/filesupportcode.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; - -/* static */ void -FileSupportCode::WriteIfChanged ( char* outbuf, - const string& filename, - bool ignoreError ) -{ - FILE* out; - unsigned int end; - char* cmpbuf; - unsigned int stat; - - out = fopen ( filename.c_str (), "rb" ); - if ( out == NULL ) - { - out = fopen ( filename.c_str (), "wb" ); - if ( out == NULL ) - { - if ( ignoreError ) - return; - throw AccessDeniedException ( filename ); - } - fputs ( outbuf, out ); - fclose ( out ); - return; - } - - fseek ( out, 0, SEEK_END ); - end = ftell ( out ); - cmpbuf = (char*) malloc ( end ); - if ( cmpbuf == NULL ) - { - fclose ( out ); - throw OutOfMemoryException (); - } - - fseek ( out, 0, SEEK_SET ); - stat = fread ( cmpbuf, 1, end, out ); - if ( stat != end ) - { - free ( cmpbuf ); - fclose ( out ); - throw AccessDeniedException ( filename ); - } - if ( end == strlen ( outbuf ) && memcmp ( cmpbuf, outbuf, end ) == 0 ) - { - free ( cmpbuf ); - fclose ( out ); - return; - } - - free ( cmpbuf ); - fclose ( out ); - out = fopen ( filename.c_str (), "wb" ); - if ( out == NULL ) - { - throw AccessDeniedException ( filename ); - } - - stat = fwrite ( outbuf, 1, strlen ( outbuf ), out); - if ( strlen ( outbuf ) != stat ) - { - fclose ( out ); - throw AccessDeniedException ( filename ); - } - - fclose ( out ); -} diff --git a/reactos/tools/rbuild/global.cpp b/reactos/tools/rbuild/global.cpp deleted file mode 100644 index ec7c211b101..00000000000 --- a/reactos/tools/rbuild/global.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "rbuild.h" - -using std::string; -using std::vector; - -string ExePrefix; -string ExePostfix; -string sSep; -string sBadSep; -char cSep; -char cBadSep; - - -void -InitializeEnvironment () -{ - char *SepValue, *ExePostfixValue, *ExePrefixValue;; - - SepValue = getenv ( "SEP" ); - if ( SepValue && ( 0 == strcmp ( SepValue, DEF_SSEP ) || 0 == strcmp ( SepValue, DEF_SBAD_SEP ) ) ) - { - cSep = SepValue[0]; - sSep = SepValue; - } - else - { - cSep = DEF_CSEP; - sSep = DEF_SSEP; - } - if ( cSep == DEF_CSEP ) - { - cBadSep = DEF_CBAD_SEP; - sBadSep = DEF_SBAD_SEP; - } - else - { - cBadSep = DEF_CSEP; - sBadSep = DEF_SSEP; - } - ExePostfixValue = getenv ( "EXEPOSTFIX" ); - ExePrefixValue = getenv ( "EXEPREFIX" ); - if ( ( ExePostfixValue == NULL || 0 == strlen ( ExePostfixValue ) ) && - ( ExePrefixValue == NULL || 0 == strlen ( ExePrefixValue ) ) ) - { - ExePostfix = DEF_EXEPOSTFIX; - ExePrefix = DEF_EXEPREFIX; - } - else - { - ExePostfix = ExePostfixValue ? ExePostfixValue : ""; - ExePrefix = ExePrefixValue ? ExePrefixValue : ""; - } -} diff --git a/reactos/tools/rbuild/include.cpp b/reactos/tools/rbuild/include.cpp deleted file mode 100644 index a2ead07ae72..00000000000 --- a/reactos/tools/rbuild/include.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -Include::Include ( const Project& project, - const XMLElement* includeNode ) - : directory ( NULL ), - project ( project ), - node ( includeNode ), - module ( NULL ) -{ -} - -Include::Include ( const Project& project, - const XMLElement* includeNode, - const Module* module ) - : directory ( NULL ), - project ( project ), - node ( includeNode ), - module ( module ) -{ -} - -Include::Include ( const Project& project, - DirectoryLocation root, - const std::string& relative_path ) - : project ( project ), - node ( NULL ) -{ - directory = new FileLocation ( root, relative_path, "" ); -} - -Include::~Include() -{ - if ( directory ) - delete directory; -} - -void -Include::ProcessXML () -{ - DirectoryLocation root = SourceDirectory; - const Module *base = module; - - string relative_path; - const XMLAttribute* att = node->GetAttribute ( "base", false ); - if ( att ) - { - if ( !module ) - throw XMLInvalidBuildFileException ( - node->location, - "'base' attribute illegal from global " ); - - if ( att->value == project.name ) - base = NULL; - else - { - base = project.LocateModule ( att->value ); - if ( !base ) - throw XMLInvalidBuildFileException ( - node->location, - " attribute 'base' references non-existant project or module '%s'", - att->value.c_str() ); - root = GetDefaultDirectoryTree ( base ); - } - } - - if ( base ) - { - relative_path = base->output->relative_path; - if ( node->value.length () > 0 && node->value != "." ) - relative_path += sSep + node->value; - } - else - relative_path = node->value; - - att = node->GetAttribute ( "root", false ); - if ( att ) - { - if ( att->value == "intermediate" ) - root = IntermediateDirectory; - else if ( att->value == "output" ) - root = OutputDirectory; - else - throw InvalidAttributeValueException ( node->location, - "root", - att->value ); - } - - directory = new FileLocation ( root, - relative_path, - "", - node ); -} - -DirectoryLocation -Include::GetDefaultDirectoryTree ( const Module* module ) const -{ - if ( module != NULL && - ( module->type == RpcServer || - module->type == RpcClient || - module->type == RpcProxy || - module->type == IdlHeader) ) - return IntermediateDirectory; - else - return SourceDirectory; -} diff --git a/reactos/tools/rbuild/installfile.cpp b/reactos/tools/rbuild/installfile.cpp deleted file mode 100644 index da79d7039b0..00000000000 --- a/reactos/tools/rbuild/installfile.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; - -InstallFile::~InstallFile() -{ - delete source; - delete target; -} - -InstallFile::InstallFile ( const Project& project, - const XMLElement& installfileNode, - const string& path ) - : XmlNode(project, installfileNode ) -{ - const XMLAttribute* base = node.GetAttribute ( "installbase", false ); - const XMLAttribute* newname = node.GetAttribute ( "newname", false ); - - DirectoryLocation source_directory = SourceDirectory; - const XMLAttribute* att = node.GetAttribute ( "root", false ); - if ( att != NULL) - { - if ( att->value == "intermediate" ) - source_directory = IntermediateDirectory; - else if ( att->value == "output" ) - source_directory = OutputDirectory; - else - { - throw InvalidAttributeValueException ( - node.location, - "root", - att->value ); - } - } - - source = new FileLocation ( source_directory, - path, - node.value, - &node ); - target = new FileLocation ( InstallDirectory, - base && base->value != "." - ? base->value - : "", - newname - ? newname->value - : node.value, - &node ); -} diff --git a/reactos/tools/rbuild/linkerflag.cpp b/reactos/tools/rbuild/linkerflag.cpp deleted file mode 100644 index 996269e5191..00000000000 --- a/reactos/tools/rbuild/linkerflag.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -LinkerFlag::LinkerFlag ( const Project& project_, - const XMLElement& linkerFlagNode ) - : project(project_), - module(NULL), - node(linkerFlagNode) -{ - Initialize(); -} - -LinkerFlag::LinkerFlag ( const Project& project_, - const Module* module_, - const XMLElement& linkerFlagNode ) - : project(project_), - module(module_), - node(linkerFlagNode) -{ - Initialize(); -} - -LinkerFlag::~LinkerFlag () -{ -} - -void -LinkerFlag::Initialize () -{ -} - -void -LinkerFlag::ProcessXML () -{ - if ( node.value.size () == 0 ) - { - throw XMLInvalidBuildFileException ( - node.location, - " is empty." ); - } - flag = node.value; -} diff --git a/reactos/tools/rbuild/linkerscript.cpp b/reactos/tools/rbuild/linkerscript.cpp deleted file mode 100644 index 56c845e4153..00000000000 --- a/reactos/tools/rbuild/linkerscript.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -LinkerScript::LinkerScript ( const XMLElement& node_, - const Module& module_, - const FileLocation *file_ ) - : node(node_), module(module_), file(file_) -{ -} - -LinkerScript::~LinkerScript () -{ - delete file; -} - -void -LinkerScript::ProcessXML() -{ -} diff --git a/reactos/tools/rbuild/makefile b/reactos/tools/rbuild/makefile deleted file mode 100644 index 58ea26d26e8..00000000000 --- a/reactos/tools/rbuild/makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP = ../.. -DEFAULT = rbuild -include $(TOP)/proxy.mak diff --git a/reactos/tools/rbuild/module.cpp b/reactos/tools/rbuild/module.cpp deleted file mode 100644 index d84ecc9059f..00000000000 --- a/reactos/tools/rbuild/module.cpp +++ /dev/null @@ -1,1809 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * Copyright (C) 2008 Hervé Poussineau - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -string -Right ( const string& s, size_t n ) -{ - if ( n > s.size() ) - return s; - return string ( &s[s.size()-n] ); -} - -string -Replace ( const string& s, const string& find, const string& with ) -{ - string ret; - const char* p = s.c_str(); - while ( p ) - { - const char* p2 = strstr ( p, find.c_str() ); - if ( !p2 ) - break; - if ( p2 > p ) - ret += string ( p, p2-p ); - ret += with; - p = p2 + find.size(); - } - if ( *p ) - ret += p; - return ret; -} - -string -ChangeSeparator ( const string& s, - const char fromSeparator, - const char toSeparator ) -{ - string s2(s); - char* p = strchr ( &s2[0], fromSeparator ); - while ( p ) - { - *p++ = toSeparator; - p = strchr ( p, fromSeparator ); - } - return s2; -} - -string -FixSeparator ( const string& s ) -{ - return ChangeSeparator ( s, cBadSep, cSep ); -} - -string -FixSeparatorForSystemCommand ( const string& s ) -{ - string s2(s); - char* p = strchr ( &s2[0], DEF_CBAD_SEP ); - while ( p ) - { - *p++ = DEF_CSEP; - p = strchr ( p, DEF_CBAD_SEP ); - } - return s2; -} - -string -DosSeparator ( const string& s ) -{ - string s2(s); - char* p = strchr ( &s2[0], '/' ); - while ( p ) - { - *p++ = '\\'; - p = strchr ( p, '/' ); - } - return s2; -} - -string -ReplaceExtension ( - const string& filename, - const string& newExtension ) -{ - size_t index = filename.find_last_of ( '/' ); - if ( index == string::npos ) - index = 0; - size_t index2 = filename.find_last_of ( '\\' ); - if ( index2 != string::npos && index2 > index ) - index = index2; - string tmp = filename.substr( index /*, filename.size() - index*/ ); - size_t ext_index = tmp.find_last_of( '.' ); - if ( ext_index != string::npos ) - return filename.substr ( 0, index + ext_index ) + newExtension; - return filename + newExtension; -} - -string -GetSubPath ( - const Project& project, - const string& location, - const string& path, - const string& att_value ) -{ - if ( !att_value.size() ) - throw XMLInvalidBuildFileException ( - location, - " tag has empty 'name' attribute" ); - if ( strpbrk ( att_value.c_str (), "/\\?*:<>|" ) ) - throw XMLInvalidBuildFileException ( - location, - " tag has invalid characters in 'name' attribute" ); - if ( !path.size() ) - return att_value; - - return FixSeparator(path + cSep + att_value); -} - -static string -GetExtension ( const string& filename ) -{ - size_t index = filename.find_last_of ( '/' ); - if (index == string::npos) index = 0; - string tmp = filename.substr( index, filename.size() - index ); - size_t ext_index = tmp.find_last_of( '.' ); - if (ext_index != string::npos) - return filename.substr ( index + ext_index, filename.size() ); - return ""; -} - -string -GetExtension ( const FileLocation& file ) -{ - return GetExtension ( file.name ); -} - -string -NormalizeFilename ( const string& filename ) -{ - if ( filename == "" ) - return ""; - Path path; - string normalizedPath = path.Fixup ( filename, true ); - string relativeNormalizedPath = path.RelativeFromWorkingDirectory ( normalizedPath ); - return FixSeparator ( relativeNormalizedPath ); -} - -bool -GetBooleanValue ( const string& value ) -{ - if ( value == "1" ) - return true; - else - return false; -} - -string -ToLower ( string filename ) -{ - for ( size_t i = 1; i < filename.length (); i++ ) - filename[i] = tolower ( filename[i] ); - return filename; -} - -IfableData::IfableData( ) - : asmFiles ( 0 ) -{ -} - -void IfableData::ExtractModules( std::map &modules ) -{ - size_t i; - for ( i = 0; i < this->modules.size (); i++ ) - modules.insert(std::make_pair(this->modules[i]->name, this->modules[i])); -} - -IfableData::~IfableData() -{ - size_t i; - for ( i = 0; i < includes.size (); i++ ) - delete includes[i]; - for ( i = 0; i < defines.size (); i++ ) - delete defines[i]; - for ( i = 0; i < libraries.size (); i++ ) - delete libraries[i]; - for ( std::map::const_iterator p = properties.begin(); p != properties.end(); ++ p ) - delete p->second; - for ( i = 0; i < compilerFlags.size (); i++ ) - delete compilerFlags[i]; - for ( i = 0; i < modules.size(); i++ ) - delete modules[i]; - for ( i = 0; i < compilationUnits.size (); i++ ) - delete compilationUnits[i]; -} - -void IfableData::ProcessXML () -{ - size_t i; - for ( i = 0; i < includes.size (); i++ ) - includes[i]->ProcessXML (); - for ( i = 0; i < defines.size (); i++ ) - defines[i]->ProcessXML (); - for ( i = 0; i < libraries.size (); i++ ) - libraries[i]->ProcessXML (); - for ( std::map::const_iterator p = properties.begin(); p != properties.end(); ++ p ) - p->second->ProcessXML (); - for ( i = 0; i < compilerFlags.size(); i++ ) - compilerFlags[i]->ProcessXML (); - for ( i = 0; i < compilationUnits.size (); i++ ) - compilationUnits[i]->ProcessXML (); -} - -Module::Module ( const Project& project, - const XMLElement& moduleNode, - const string& modulePath ) - : project (project), - node (moduleNode), - importLibrary (NULL), - metadata (NULL), - bootSector (NULL), - bootstrap (NULL), - autoRegister(NULL), - linkerScript (NULL), - pch (NULL), - cplusplus (false), - output (NULL), - install (NULL) -{ - if ( node.name != "module" ) - throw InvalidOperationException ( __FILE__, - __LINE__, - "Module created with non- node" ); - - xmlbuildFile = FixSeparator ( Path::RelativeFromWorkingDirectory ( moduleNode.xmlFile->filename () ) ); - - const XMLAttribute* att = moduleNode.GetAttribute ( "name", true ); - assert(att); - name = att->value; - - enabled = true; - - att = moduleNode.GetAttribute ( "if", false ); - if ( att != NULL ) - enabled = GetBooleanValue ( project.ResolveProperties ( att->value ) ); - - att = moduleNode.GetAttribute ( "ifnot", false ); - if ( att != NULL ) - enabled = !GetBooleanValue ( project.ResolveProperties ( att->value ) ); - - if ( !enabled && project.configuration.Verbose ) - printf("Module '%s' has been disabled.\n", name.c_str () ); - - att = moduleNode.GetAttribute ( "type", true ); - assert(att); - type = GetModuleType ( node.location, *att ); - - att = moduleNode.GetAttribute ( "extension", false ); - if ( att != NULL ) - extension = att->value; - else - extension = GetDefaultModuleExtension (); - - att = moduleNode.GetAttribute ( "unicode", false ); - if ( att != NULL ) - { - const char* p = att->value.c_str(); - if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) ) - isUnicode = true; - else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) ) - isUnicode = false; - else - { - throw InvalidAttributeValueException ( - moduleNode.location, - "unicode", - att->value ); - } - } - else - isUnicode = false; - - if (isUnicode) - { - // Always define UNICODE and _UNICODE - Define* pDefine = new Define ( project, this, "UNICODE" ); - non_if_data.defines.push_back ( pDefine ); - - pDefine = new Define ( project, this, "_UNICODE" ); - non_if_data.defines.push_back ( pDefine ); - } - - att = moduleNode.GetAttribute ( "entrypoint", false ); - if ( att != NULL ) - { - if ( att->value == "" ) - { - throw InvalidAttributeValueException ( - moduleNode.location, - "entrypoint", - att->value ); - } - - entrypoint = att->value; - isDefaultEntryPoint = false; - } - else - { - entrypoint = GetDefaultModuleEntrypoint (); - isDefaultEntryPoint = true; - } - - att = moduleNode.GetAttribute ( "baseaddress", false ); - if ( att != NULL ) - baseaddress = att->value; - else - baseaddress = GetDefaultModuleBaseaddress (); - - att = moduleNode.GetAttribute ( "mangledsymbols", false ); - if ( att != NULL ) - { - const char* p = att->value.c_str(); - if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) ) - mangledSymbols = true; - else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) ) - mangledSymbols = false; - else - { - throw InvalidAttributeValueException ( - moduleNode.location, - "mangledsymbols", - att->value ); - } - } - else - mangledSymbols = false; - - att = moduleNode.GetAttribute ( "underscoresymbols", false ); - if ( att != NULL ) - underscoreSymbols = att->value == "true"; - else - underscoreSymbols = false; - - att = moduleNode.GetAttribute ( "isstartuplib", false ); - if ( att != NULL ) - { - const char* p = att->value.c_str(); - if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) ) - isStartupLib = true; - else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) ) - isStartupLib = false; - else - { - throw InvalidAttributeValueException ( - moduleNode.location, - "isstartuplib", - att->value ); - } - } - else - isStartupLib = false; - - att = moduleNode.GetAttribute ( "prefix", false ); - if ( att != NULL ) - prefix = att->value; - - att = moduleNode.GetAttribute ( "installname", false ); - if ( att != NULL ) - { - const XMLAttribute* installbase = moduleNode.GetAttribute ( "installbase", false ); - install = new FileLocation ( InstallDirectory, - installbase ? installbase->value : "", - att->value, - &moduleNode ); - - output = new FileLocation ( GetTargetDirectoryTree (), - modulePath, - att->value, - &moduleNode ); - } - - att = moduleNode.GetAttribute ( "output", false ); - if ( att != NULL ) - { - if (output != NULL) - { - printf ( "%s: WARNING: 'installname' overrides 'output' also defined for this module.\n", - moduleNode.location.c_str() ); - } - else - { - output = new FileLocation ( GetTargetDirectoryTree (), - modulePath, - att->value, - &moduleNode ); - } - } - - /* If no one has set the output file for this module set it automatically */ - if (output == NULL) - { - output = new FileLocation ( GetTargetDirectoryTree (), - modulePath, - name + extension, - &moduleNode ); - } - - att = moduleNode.GetAttribute ( "allowwarnings", false ); - if ( att == NULL ) - { - att = moduleNode.GetAttribute ( "warnings", false ); - if ( att != NULL ) - { - printf ( "%s: WARNING: 'warnings' attribute of is deprecated, use 'allowwarnings' instead\n", - moduleNode.location.c_str() ); - } - } - if ( att != NULL ) - allowWarnings = att->value == "true"; - else - allowWarnings = false; - - att = moduleNode.GetAttribute ( "aliasof", false ); - if ( type == Alias && att != NULL ) - aliasedModuleName = att->value; - else - aliasedModuleName = ""; - - if ( type == BootProgram ) - { - att = moduleNode.GetAttribute ( "payload", true ); - payload = att->value; - } - - if ( type == BootProgram || type == ElfExecutable ) - { - att = moduleNode.GetAttribute ( "buildtype", false ); - if ( att != NULL ) - { - buildtype = att->value; - } - else - { - buildtype = "BOOTPROG"; - } - } - - att = moduleNode.GetAttribute ( "description", false ); - if (att != NULL ) - { - description = project.ResolveProperties(att->value); - } - else - description = ""; - - att = moduleNode.GetAttribute ( "lcid", false ); - if (type == KeyboardLayout && att != NULL ) - lcid = att->value; - else - lcid = ""; - - att = moduleNode.GetAttribute ( "layoutid", false ); - if (type == KeyboardLayout && att != NULL ) - layoutId = att->value; - else - layoutId = ""; - - att = moduleNode.GetAttribute ( "layoutnameresid", false ); - if (type == KeyboardLayout && att != NULL ) - layoutNameResId = att->value; - else - layoutNameResId = ""; - - SetImportLibrary ( NULL ); -} - -Module::~Module () -{ - size_t i; - for ( i = 0; i < invocations.size(); i++ ) - delete invocations[i]; - for ( i = 0; i < dependencies.size(); i++ ) - delete dependencies[i]; - for ( i = 0; i < compilerFlags.size(); i++ ) - delete compilerFlags[i]; - for ( i = 0; i < linkerFlags.size(); i++ ) - delete linkerFlags[i]; - for ( i = 0; i < stubbedComponents.size(); i++ ) - delete stubbedComponents[i]; - if ( linkerScript ) - delete linkerScript; - if ( pch ) - delete pch; - if ( install ) - delete install; - if ( metadata ) - delete metadata; - if ( bootstrap ) - delete bootstrap; - if ( importLibrary ) - delete importLibrary; - if ( bootSector ) - delete bootSector; - if ( dependency ) - delete dependency; - if ( autoRegister ) - delete autoRegister; - if ( output ) - delete output; -} - -void -Module::ProcessXML() -{ - if ( type == Alias ) - { - aliasedModuleName = project.ResolveProperties ( aliasedModuleName ); - if ( aliasedModuleName == name ) - { - throw XMLInvalidBuildFileException ( - node.location, - "module '%s' cannot link against itself", - name.c_str() ); - } - const Module* m = project.LocateModule ( aliasedModuleName ); - if ( !m && enabled ) - { - throw XMLInvalidBuildFileException ( - node.location, - "module '%s' trying to alias non-existant module '%s'", - name.c_str(), - aliasedModuleName.c_str() ); - } - } - - size_t i; - for ( i = 0; i < node.subElements.size(); i++ ) - { - ParseContext parseContext; - ProcessXMLSubElement ( *node.subElements[i], SourceDirectory, output->relative_path, parseContext ); - } - for ( i = 0; i < invocations.size(); i++ ) - invocations[i]->ProcessXML (); - for ( i = 0; i < dependencies.size(); i++ ) - dependencies[i]->ProcessXML (); - for ( i = 0; i < compilerFlags.size(); i++ ) - compilerFlags[i]->ProcessXML(); - for ( i = 0; i < linkerFlags.size(); i++ ) - linkerFlags[i]->ProcessXML(); - for ( i = 0; i < stubbedComponents.size(); i++ ) - stubbedComponents[i]->ProcessXML(); - non_if_data.ProcessXML(); - if ( linkerScript ) - linkerScript->ProcessXML(); - if ( pch ) - pch->ProcessXML(); - if ( autoRegister ) - autoRegister->ProcessXML(); -} - -void -Module::ProcessXMLSubElement ( const XMLElement& e, - DirectoryLocation directory, - const string& relative_path, - ParseContext& parseContext ) -{ - CompilationUnit* pOldCompilationUnit = parseContext.compilationUnit; - bool subs_invalid = false; - string subpath ( relative_path ); - DirectoryLocation subdirectory = SourceDirectory; - if ( e.name == "file" && e.value.size () > 0 ) - { - bool first = false; - const XMLAttribute* att = e.GetAttribute ( "first", false ); - if ( att != NULL ) - { - if ( !stricmp ( att->value.c_str(), "true" ) ) - first = true; - else if ( stricmp ( att->value.c_str(), "false" ) ) - { - throw XMLInvalidBuildFileException ( - e.location, - "attribute 'first' of element can only be 'true' or 'false'" ); - } - } - string switches = ""; - att = e.GetAttribute ( "switches", false ); - if ( att != NULL ) - switches = att->value; - if ( !cplusplus ) - { - // check for c++ file - string ext = GetExtension ( e.value ); - if ( !stricmp ( ext.c_str(), ".cpp" ) ) - cplusplus = true; - else if ( !stricmp ( ext.c_str(), ".cc" ) ) - cplusplus = true; - else if ( !stricmp ( ext.c_str(), ".cxx" ) ) - cplusplus = true; - } - File* pFile = new File ( directory, - relative_path, - e.value, - first, - switches, - false ); - if ( parseContext.compilationUnit ) - parseContext.compilationUnit->AddFile ( pFile ); - else - { - CompilationUnit* pCompilationUnit = new CompilationUnit ( pFile ); - string ext = ToLower ( GetExtension ( e.value ) ); - if ( ext == ".idl" ) - { - // put .idl files at the start of the module - non_if_data.compilationUnits.insert ( - non_if_data.compilationUnits.begin(), - pCompilationUnit ); - } - else if ( ext == ".asm" || ext == ".s" ) - { - // put .asm files at the end of the module - non_if_data.compilationUnits.push_back ( pCompilationUnit ); - non_if_data.asmFiles++; - } - else - { - // put other files in the middle - non_if_data.compilationUnits.insert ( - non_if_data.compilationUnits.end() - non_if_data.asmFiles, - pCompilationUnit ); - } - } - non_if_data.files.push_back ( pFile ); - subs_invalid = true; - } - else if ( e.name == "library" && e.value.size () ) - { - Library* pLibrary = new Library ( e, *this, e.value ); - non_if_data.libraries.push_back ( pLibrary ); - subs_invalid = true; - } - else if ( e.name == "directory" ) - { - const XMLAttribute* att = e.GetAttribute ( "name", true ); - const XMLAttribute* root = e.GetAttribute ( "root", false ); - assert(att); - if ( root ) - { - if ( root->value == "intermediate" ) - subdirectory = IntermediateDirectory; - else if ( root->value == "output" ) - subdirectory = OutputDirectory; - else - { - throw InvalidAttributeValueException ( - e.location, - "root", - root->value ); - } - } - subpath = GetSubPath ( this->project, e.location, relative_path, att->value ); - } - else if ( e.name == "include" ) - { - Include* include = new Include ( project, &e, this ); - non_if_data.includes.push_back ( include ); - subs_invalid = true; - } - else if ( e.name == "define" ) - { - Define* pDefine = new Define ( project, this, e ); - non_if_data.defines.push_back ( pDefine ); - subs_invalid = true; - } - else if ( e.name == "metadata" ) - { - metadata = new Metadata ( e, *this ); - subs_invalid = false; - } - else if ( e.name == "invoke" ) - { - invocations.push_back ( new Invoke ( e, *this ) ); - subs_invalid = false; - } - else if ( e.name == "dependency" ) - { - dependencies.push_back ( new Dependency ( e, *this ) ); - subs_invalid = true; - } - else if ( e.name == "bootsector" ) - { - bootSector = new Bootsector ( e, this ); - subs_invalid = true; - } - else if ( e.name == "importlibrary" ) - { - if ( importLibrary ) - { - throw XMLInvalidBuildFileException ( - e.location, - "Only one is valid per module" ); - } - SetImportLibrary ( new ImportLibrary ( project, e, this ) ); - subs_invalid = true; - } - else if ( e.name == "if" || e.name == "ifnot" ) - { - const XMLAttribute* name; - name = e.GetAttribute ( "property", true ); - assert( name ); - const Property *property = project.LookupProperty( name->value ); - if ( !property ) - { - // Property not found - throw InvalidOperationException ( __FILE__, - __LINE__, - "Test on unknown property '%s' at %s", - name->value.c_str (), e.location.c_str () ); - } - - const XMLAttribute* value; - value = e.GetAttribute ( "value", true ); - assert( value ); - - bool negate = ( e.name == "ifnot" ); - bool equality = ( property->value == value->value ); - if ( equality == negate ) - { - // Failed, skip this element - if ( project.configuration.Verbose ) - printf("Skipping 'If' at %s\n", e.location.c_str () ); - return; - } - subs_invalid = false; - } - else if ( e.name == "compilerflag" ) - { - CompilerFlag* pCompilerFlag = new CompilerFlag ( project, this, e ); - non_if_data.compilerFlags.push_back ( pCompilerFlag ); - subs_invalid = true; - } - else if ( e.name == "linkerflag" ) - { - linkerFlags.push_back ( new LinkerFlag ( project, this, e ) ); - subs_invalid = true; - } - else if ( e.name == "linkerscript" ) - { - if ( linkerScript ) - { - throw XMLInvalidBuildFileException ( - e.location, - "Only one is valid per module" ); - } - size_t pos = e.value.find_last_of ( "/\\" ); - if ( pos == string::npos ) - { - linkerScript = new LinkerScript ( - e, *this, new FileLocation ( SourceDirectory, relative_path, e.value, &e ) ); - } - else - { - string dir = e.value.substr ( 0, pos ); - string name = e.value.substr ( pos + 1); - linkerScript = new LinkerScript ( - e, *this, new FileLocation ( SourceDirectory, relative_path + sSep + dir, name, &e ) ); - } - subs_invalid = true; - } - else if ( e.name == "component" ) - { - stubbedComponents.push_back ( new StubbedComponent ( this, e ) ); - subs_invalid = false; - } - else if ( e.name == "property" ) - { - throw XMLInvalidBuildFileException ( - e.location, - " is not a valid sub-element of " ); - } - else if ( e.name == "bootstrap" ) - { - bootstrap = new Bootstrap ( project, this, e ); - subs_invalid = true; - } - else if ( e.name == "pch" ) - { - if ( pch ) - { - throw XMLInvalidBuildFileException ( - e.location, - "Only one is valid per module" ); - } - size_t pos = e.value.find_last_of ( "/\\" ); - if ( pos == string::npos ) - { - pch = new PchFile ( - e, *this, new FileLocation ( SourceDirectory, relative_path, e.value, &e ) ); - } - else - { - string dir = e.value.substr ( 0, pos ); - string name = e.value.substr ( pos + 1); - pch = new PchFile ( - e, *this, new FileLocation ( SourceDirectory, relative_path + sSep + dir, name, &e ) ); - } - subs_invalid = true; - } - else if ( e.name == "compilationunit" ) - { - if ( project.configuration.CompilationUnitsEnabled ) - { - CompilationUnit* pCompilationUnit = new CompilationUnit ( &project, this, &e ); - non_if_data.compilationUnits.push_back ( pCompilationUnit ); - parseContext.compilationUnit = pCompilationUnit; - } - subs_invalid = false; - } - else if ( e.name == "autoregister" ) - { - if ( autoRegister != NULL) - { - throw XMLInvalidBuildFileException ( - e.location, - "there can be only one <%s> element for a module", - e.name.c_str() ); - } - autoRegister = new AutoRegister ( project, this, e ); - subs_invalid = true; - } - if ( subs_invalid && e.subElements.size() > 0 ) - { - throw XMLInvalidBuildFileException ( - e.location, - "<%s> cannot have sub-elements", - e.name.c_str() ); - } - for ( size_t i = 0; i < e.subElements.size (); i++ ) - ProcessXMLSubElement ( *e.subElements[i], subdirectory, subpath, parseContext ); - parseContext.compilationUnit = pOldCompilationUnit; -} - -ModuleType -Module::GetModuleType ( const string& location, const XMLAttribute& attribute ) -{ - if ( attribute.value == "buildtool" ) - return BuildTool; - if ( attribute.value == "staticlibrary" ) - return StaticLibrary; - if ( attribute.value == "hoststaticlibrary" ) - return HostStaticLibrary; - if ( attribute.value == "objectlibrary" ) - return ObjectLibrary; - if ( attribute.value == "kernel" ) - return Kernel; - if ( attribute.value == "kernelmodedll" ) - return KernelModeDLL; - if ( attribute.value == "kernelmodedriver" ) - return KernelModeDriver; - if ( attribute.value == "nativedll" ) - return NativeDLL; - if ( attribute.value == "nativecui" ) - return NativeCUI; - if ( attribute.value == "keyboardlayout" ) - return KeyboardLayout; - if ( attribute.value == "win32dll" ) - return Win32DLL; - if ( attribute.value == "win32ocx" ) - return Win32OCX; - if ( attribute.value == "win32cui" ) - return Win32CUI; - if ( attribute.value == "win32gui" ) - return Win32GUI; - if ( attribute.value == "win32scr" ) - return Win32SCR; - if ( attribute.value == "bootloader" ) - return BootLoader; - if ( attribute.value == "bootsector" ) - return BootSector; - if ( attribute.value == "bootprogram" ) - return BootProgram; - if ( attribute.value == "iso" ) - return Iso; - if ( attribute.value == "liveiso" ) - return LiveIso; - if ( attribute.value == "isoregtest" ) - return IsoRegTest; - if ( attribute.value == "liveisoregtest" ) - return LiveIsoRegTest; - if ( attribute.value == "test" ) - return Test; - if ( attribute.value == "rpcserver" ) - return RpcServer; - if ( attribute.value == "rpcclient" ) - return RpcClient; - if ( attribute.value == "rpcproxy" ) - return RpcProxy; - if ( attribute.value == "alias" ) - return Alias; - if ( attribute.value == "idlheader" ) - return IdlHeader; - if ( attribute.value == "embeddedtypelib" ) - return EmbeddedTypeLib; - if ( attribute.value == "elfexecutable" ) - return ElfExecutable; - if ( attribute.value == "cabinet" ) - return Cabinet; - if ( attribute.value == "messageheader" ) - return MessageHeader; - throw InvalidAttributeValueException ( location, - attribute.name, - attribute.value ); -} - -DirectoryLocation -Module::GetTargetDirectoryTree () const -{ - switch ( type ) - { - case Kernel: - case KernelModeDLL: - case KeyboardLayout: - case NativeDLL: - case Win32DLL: - case Win32OCX: - case KernelModeDriver: - case NativeCUI: - case Win32CUI: - case Test: - case Win32SCR: - case Win32GUI: - case BuildTool: - case BootLoader: - case BootSector: - case BootProgram: - case Iso: - case LiveIso: - case IsoRegTest: - case LiveIsoRegTest: - case ElfExecutable: - case Cabinet: - return OutputDirectory; - case EmbeddedTypeLib: - case StaticLibrary: - case HostStaticLibrary: - case ObjectLibrary: - case RpcServer: - case RpcClient: - case RpcProxy: - case Alias: - case IdlHeader: - case MessageHeader: - return IntermediateDirectory; - case TypeDontCare: - break; - } - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid module type %d.", - type ); -} - -string -Module::GetDefaultModuleExtension () const -{ - switch (type) - { - case BuildTool: - return ExePostfix; - case BootProgram: - case StaticLibrary: - case HostStaticLibrary: - return ".a"; - case ObjectLibrary: - return ".o"; - case Kernel: - case NativeCUI: - case Win32CUI: - case Win32GUI: - return ".exe"; - case Win32SCR: - return ".scr"; - - case KernelModeDLL: - case NativeDLL: - case KeyboardLayout: - case Win32DLL: - return ".dll"; - case Win32OCX: - return ".ocx"; - case KernelModeDriver: - case BootLoader: - return ".sys"; - case Cabinet: - return ".cab"; - case BootSector: - return ".o"; - case Iso: - case LiveIso: - case IsoRegTest: - case LiveIsoRegTest: - return ".iso"; - case Test: - return ".exe"; - case RpcServer: - case RpcClient: - case RpcProxy: - return ".o"; - case Alias: - case ElfExecutable: - case IdlHeader: - case MessageHeader: - return ""; - case EmbeddedTypeLib: - return ".tlb"; - case TypeDontCare: - break; - } - throw InvalidOperationException ( __FILE__, - __LINE__ ); -} - -string -Module::GetDefaultModuleEntrypoint () const -{ - switch ( type ) - { - case Kernel: - return "KiSystemStartup"; - case KeyboardLayout: - case KernelModeDLL: - case KernelModeDriver: - if (Environment::GetArch() == "arm") return "DriverEntry"; - return "DriverEntry@8"; - case NativeDLL: - if (Environment::GetArch() == "arm") return "DllMainCRTStartup"; - return "DllMainCRTStartup@12"; - case NativeCUI: - if (Environment::GetArch() == "arm") return "NtProcessStartup"; - return "NtProcessStartup@4"; - case Win32DLL: - case Win32OCX: - if (Environment::GetArch() == "arm") return "DllMain"; - return "DllMain@12"; - case Win32CUI: - case Test: - if ( isUnicode ) - return "wmainCRTStartup"; - else - return "mainCRTStartup"; - case Win32SCR: - case Win32GUI: - if ( isUnicode ) - return "wWinMainCRTStartup"; - else - return "WinMainCRTStartup"; - case BuildTool: - case StaticLibrary: - case HostStaticLibrary: - case ObjectLibrary: - case BootLoader: - case BootSector: - case Iso: - case LiveIso: - case IsoRegTest: - case LiveIsoRegTest: - case RpcServer: - case RpcClient: - case RpcProxy: - case Alias: - case BootProgram: - case IdlHeader: - case MessageHeader: - case ElfExecutable: - case EmbeddedTypeLib: - case Cabinet: - return ""; - case TypeDontCare: - break; - } - throw InvalidOperationException ( __FILE__, - __LINE__ ); -} - -string -Module::GetDefaultModuleBaseaddress () const -{ - switch ( type ) - { - case Kernel: - return "0x80800000"; - case Win32DLL: - case Win32OCX: - return "0x10000000"; - case NativeDLL: - case NativeCUI: - case Win32CUI: - case Test: - return "0x00400000"; - case Win32SCR: - case Win32GUI: - return "0x00400000"; - case KeyboardLayout: - case KernelModeDLL: - case KernelModeDriver: - return "0x00010000"; - case ElfExecutable: - return "0xe00000"; - case BuildTool: - case StaticLibrary: - case HostStaticLibrary: - case ObjectLibrary: - case BootLoader: - case BootSector: - case Iso: - case LiveIso: - case IsoRegTest: - case LiveIsoRegTest: - case RpcServer: - case RpcClient: - case RpcProxy: - case Alias: - case BootProgram: - case IdlHeader: - case MessageHeader: - case EmbeddedTypeLib: - case Cabinet: - return ""; - case TypeDontCare: - break; - } - throw InvalidOperationException ( __FILE__, - __LINE__ ); -} - -bool -Module::HasImportLibrary () const -{ - return importLibrary != NULL && type != StaticLibrary && type != HostStaticLibrary; -} - -bool -Module::IsDLL () const -{ - switch ( type ) - { - case Kernel: - case KernelModeDLL: - case NativeDLL: - case KeyboardLayout: - case Win32DLL: - case Win32OCX: - case KernelModeDriver: - return true; - case NativeCUI: - case Win32CUI: - case Test: - case Win32SCR: - case Win32GUI: - case BuildTool: - case StaticLibrary: - case HostStaticLibrary: - case ObjectLibrary: - case BootLoader: - case BootSector: - case BootProgram: - case Iso: - case LiveIso: - case IsoRegTest: - case LiveIsoRegTest: - case RpcServer: - case RpcClient: - case RpcProxy: - case Alias: - case IdlHeader: - case MessageHeader: - case EmbeddedTypeLib: - case ElfExecutable: - case Cabinet: - return false; - case TypeDontCare: - break; - } - throw InvalidOperationException ( __FILE__, - __LINE__ ); -} - -string -Module::GetPathWithPrefix ( const string& prefix ) const -{ - return output->relative_path + cSep + prefix + output->name; -} - -string -Module::GetPathToBaseDir () const -{ - string temp_path = output->relative_path; - string result = "..\\"; - while(temp_path.find ('\\') != string::npos) - { - temp_path.erase (0, temp_path.find('\\')+1); - result += "..\\"; - } - return result; -} - -string -Module::GetInvocationTarget ( const int index ) const -{ - return ssprintf ( "%s_invoke_%d", - name.c_str (), - index ); -} - -string -Module::GetEntryPoint(bool leadingUnderscore) const -{ - string result = ""; - if (entrypoint == "0" || entrypoint == "0x0") - return "0"; - if (leadingUnderscore) - result = "_"; - - result += entrypoint; - return result; -} - -bool -Module::HasFileWithExtension ( - const IfableData& data, - const std::string& extension ) const -{ - size_t i; - for ( i = 0; i < data.compilationUnits.size (); i++ ) - { - CompilationUnit* compilationUnit = data.compilationUnits[i]; - if ( compilationUnit->HasFileWithExtension ( extension ) ) - return true; - } - return false; -} - -void -Module::InvokeModule () const -{ - for ( size_t i = 0; i < invocations.size (); i++ ) - { - Invoke& invoke = *invocations[i]; - string command = FixSeparatorForSystemCommand(invoke.invokeModule->output->relative_path + "/" + invoke.invokeModule->output->name ) + " " + invoke.GetParameters (); - printf ( "Executing '%s'\n\n", command.c_str () ); - int exitcode = system ( command.c_str () ); - if ( exitcode != 0 ) - throw InvocationFailedException ( command, - exitcode ); - } -} - - -void -Module::SetImportLibrary ( ImportLibrary* importLibrary ) -{ - this->importLibrary = importLibrary; - dependency = new FileLocation ( HasImportLibrary () ? IntermediateDirectory : output->directory, - output->relative_path, - HasImportLibrary () ? "lib" + name + ".a" : output->name ); -} - - -File::File ( DirectoryLocation directory, - const string& relative_path, - const string& name, - bool _first, - const string& _switches, - bool _isPreCompiledHeader ) - : file ( directory, relative_path, name ), - first(_first), - switches(_switches), - isPreCompiledHeader(_isPreCompiledHeader) -{ -} - - -void -File::ProcessXML() -{ -} - - -std::string File::GetFullPath () const -{ - string directory ( "" ); - switch ( file.directory ) - { - case SourceDirectory: - break; - case IntermediateDirectory: - directory = Environment::GetIntermediatePath () + sSep; - break; - default: - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid directory %d.", - file.directory ); - } - - if ( file.relative_path.length () > 0 ) - directory += file.relative_path + sSep; - - - return directory + file.name; -} - - -Library::Library ( const XMLElement& _node, - const Module& _module, - const string& _name ) - : node(&_node), - module(_module), - name(_name), - importedModule(_module.project.LocateModule(_name)) -{ - if ( module.name == name ) - { - throw XMLInvalidBuildFileException ( - node->location, - "module '%s' cannot link against itself", - name.c_str() ); - } - if ( !importedModule ) - { - throw XMLInvalidBuildFileException ( - node->location, - "module '%s' trying to import non-existant module '%s'", - module.name.c_str(), - name.c_str() ); - } -} - -Library::Library ( const Module& _module, - const string& _name ) - : node(NULL), - module(_module), - name(_name), - importedModule(_module.project.LocateModule(_name)) -{ -} - -void -Library::ProcessXML() -{ - if ( node && !module.project.LocateModule ( name ) ) - { - throw XMLInvalidBuildFileException ( - node->location, - "module '%s' is trying to link against non-existant module '%s'", - module.name.c_str(), - name.c_str() ); - } -} - - -Invoke::Invoke ( const XMLElement& _node, - const Module& _module ) - : node (_node), - module (_module) -{ -} - -void -Invoke::ProcessXML() -{ - const XMLAttribute* att = node.GetAttribute ( "module", false ); - if (att == NULL) - invokeModule = &module; - else - { - invokeModule = module.project.LocateModule ( att->value ); - if ( invokeModule == NULL ) - { - throw XMLInvalidBuildFileException ( - node.location, - "module '%s' is trying to invoke non-existant module '%s'", - module.name.c_str(), - att->value.c_str() ); - } - } - - for ( size_t i = 0; i < node.subElements.size (); i++ ) - ProcessXMLSubElement ( *node.subElements[i] ); -} - -void -Invoke::ProcessXMLSubElement ( const XMLElement& e ) -{ - bool subs_invalid = false; - if ( e.name == "input" ) - { - for ( size_t i = 0; i < e.subElements.size (); i++ ) - ProcessXMLSubElementInput ( *e.subElements[i] ); - } - else if ( e.name == "output" ) - { - for ( size_t i = 0; i < e.subElements.size (); i++ ) - ProcessXMLSubElementOutput ( *e.subElements[i] ); - } - if ( subs_invalid && e.subElements.size() > 0 ) - { - throw XMLInvalidBuildFileException ( - e.location, - "<%s> cannot have sub-elements", - e.name.c_str() ); - } -} - -void -Invoke::ProcessXMLSubElementInput ( const XMLElement& e ) -{ - bool subs_invalid = false; - if ( e.name == "inputfile" && e.value.size () > 0 ) - { - input.push_back ( new InvokeFile ( - e, FixSeparator ( module.output->relative_path + cSep + e.value ) ) ); - subs_invalid = true; - } - if ( subs_invalid && e.subElements.size() > 0 ) - { - throw XMLInvalidBuildFileException ( - e.location, - "<%s> cannot have sub-elements", - e.name.c_str() ); - } -} - -void -Invoke::ProcessXMLSubElementOutput ( const XMLElement& e ) -{ - bool subs_invalid = false; - if ( e.name == "outputfile" && e.value.size () > 0 ) - { - output.push_back ( new InvokeFile ( - e, FixSeparator ( module.output->relative_path + cSep + e.value ) ) ); - subs_invalid = true; - } - if ( subs_invalid && e.subElements.size() > 0 ) - { - throw XMLInvalidBuildFileException ( - e.location, - "<%s> cannot have sub-elements", - e.name.c_str() ); - } -} - -void -Invoke::GetTargets ( string_list& targets ) const -{ - for ( size_t i = 0; i < output.size (); i++ ) - { - InvokeFile& file = *output[i]; - targets.push_back ( NormalizeFilename ( file.name ) ); - } -} - -string -Invoke::GetParameters () const -{ - string parameters ( "" ); - size_t i; - for ( i = 0; i < output.size (); i++ ) - { - if ( parameters.length () > 0) - parameters += " "; - InvokeFile& invokeFile = *output[i]; - if ( invokeFile.switches.length () > 0 ) - { - parameters += invokeFile.switches + " "; - } - parameters += invokeFile.name; - } - - for ( i = 0; i < input.size (); i++ ) - { - if ( parameters.length () > 0 ) - parameters += " "; - InvokeFile& invokeFile = *input[i]; - if ( invokeFile.switches.length () > 0 ) - { - parameters += invokeFile.switches; - parameters += " "; - } - parameters += invokeFile.name ; - } - - return parameters; -} - - -InvokeFile::InvokeFile ( const XMLElement& _node, - const string& _name ) - : node (_node), - name (_name) -{ - const XMLAttribute* att = _node.GetAttribute ( "switches", false ); - if (att != NULL) - switches = att->value; - else - switches = ""; -} - -void -InvokeFile::ProcessXML() -{ -} - - -Dependency::Dependency ( const XMLElement& _node, - const Module& _module ) - : node (_node), - module (_module), - dependencyModule (NULL) -{ -} - -void -Dependency::ProcessXML() -{ - dependencyModule = module.project.LocateModule ( node.value ); - if ( dependencyModule == NULL ) - { - throw XMLInvalidBuildFileException ( - node.location, - "module '%s' depend on non-existant module '%s'", - module.name.c_str(), - node.value.c_str() ); - } -} - -Bootsector::Bootsector ( const XMLElement& _node, - const Module* _module ) - : node (_node), - module (_module), - bootSectorModule (NULL) -{ - if ( !IsSupportedModuleType ( module->type ) ) - { - throw XMLInvalidBuildFileException ( - node.location, - " is not applicable for this module type." ); - } - - bootSectorModule = module->project.LocateModule ( node.value ); - if ( bootSectorModule == NULL ) - { - throw XMLInvalidBuildFileException ( - node.location, - "module '%s' depend on non-existant module '%s'", - module->name.c_str(), - node.value.c_str() ); - } - - if (bootSectorModule->type != BootSector) - { - throw XMLInvalidBuildFileException ( - node.location, - "module '%s' is referencing non BootSector module '%s'", - module->name.c_str(), - node.value.c_str() ); - } -} - -void -Bootsector::ProcessXML() -{ -} - -bool -Bootsector::IsSupportedModuleType ( ModuleType type ) -{ - if ( type == Iso || - type == LiveIso || - type == IsoRegTest || - type == LiveIsoRegTest ) - { - return true; - } - - return false; -} - -Metadata::Metadata ( const XMLElement& _node, - const Module& _module ) - : node (_node), - module (_module) -{ - /* The module name */ - const XMLAttribute* att = _node.GetAttribute ( "name", false ); - if (att != NULL) - name = att->value; - else - name = module.name; - - /* The module description */ - att = _node.GetAttribute ( "description", false ); - if (att != NULL) - description = att->value; - else - description = ""; - - /* The module version */ - att = _node.GetAttribute ( "version", false ); - if (att != NULL) - version = att->value; - else - version = ""; - - /* The module copyright */ - att = _node.GetAttribute ( "copyright", false ); - if (att != NULL) - copyright = att->value; - else - copyright = ""; - - att = _node.GetAttribute ( "url", false ); - if (att != NULL) - url = att->value; - else - url = ""; - - /* When was this module updated */ - att = _node.GetAttribute ( "date", false ); - if (att != NULL) - date = att->value; - else - date = "?"; - - /* When was this module updated */ - att = _node.GetAttribute ( "owner", false ); - if (att != NULL) - owner = att->value; - else - owner = "ReactOS"; -} - - -ImportLibrary::~ImportLibrary () -{ - delete source; -} - - -ImportLibrary::ImportLibrary ( const Project& project, - const XMLElement& node, - const Module* module ) - : XmlNode ( project, node ), - module (module) -{ - DirectoryLocation directory = SourceDirectory; - const Module* base = module; - const XMLAttribute* dllname = node.GetAttribute ( "dllname", false ); - const XMLAttribute* definition = node.GetAttribute ( "definition", true ); - assert ( definition ); - - string relative_path; - const XMLAttribute* att = node.GetAttribute ( "base", false ); - if ( att ) - { - base = project.LocateModule ( att->value ); - if ( !base ) - throw XMLInvalidBuildFileException ( - node.location, - " attribute 'base' references non-existant module '%s'", - att->value.c_str() ); - - } - - if ( base ) - { - relative_path = base->output->relative_path; - if ( node.value.length () > 0 && node.value != "." ) - relative_path += sSep + node.value; - } - else - relative_path = node.value; - - att = node.GetAttribute ( "root", false ); - if ( att ) - { - if ( att->value == "intermediate" ) - directory = IntermediateDirectory; - else - throw InvalidAttributeValueException ( node.location, - "root", - att->value ); - } - - if ( dllname ) - this->dllname = dllname->value; - else if ( module->type == StaticLibrary || module->type == HostStaticLibrary ) - throw XMLInvalidBuildFileException ( - node.location, - " dllname attribute required." ); - - size_t index = definition->value.find_last_of ( "/\\" ); - if ( index == string::npos ) - { - source = new FileLocation ( directory, - base->output->relative_path, - definition->value, - &node ); - } - else - { - string dir = definition->value.substr ( 0, index ); - string name = definition->value.substr ( index + 1); - source = new FileLocation ( directory, - NormalizeFilename ( base->output->relative_path + sSep + dir ), - name, - &node ); - } -} - - -Property::Property ( const XMLElement& node_, - const Project& project_, - const Module* module_ ) - : project(project_), module(module_) -{ - const XMLAttribute* att; - - att = node_.GetAttribute ( "name", true ); - assert(att); - name = project.ResolveProperties ( att->value ); - - att = node_.GetAttribute ( "value", true ); - assert(att); - value = att->value; - - att = node_.GetAttribute ( "internal", false ); - if ( att != NULL ) - { - const char* p = att->value.c_str(); - if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) ) - isInternal = true; - else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) ) - isInternal = false; - else - { - throw InvalidAttributeValueException ( - node_.location, - "internal", - att->value ); - } - } - else - isInternal = false; -} - -Property::Property ( const Project& project_, - const Module* module_, - const std::string& name_, - const std::string& value_ ) - : project(project_), module(module_), name(name_), value(value_) -{ -} - -void -Property::ProcessXML() -{ -} - - -PchFile::PchFile ( - const XMLElement& node_, - const Module& module_, - const FileLocation *file_ ) - : node(node_), module(module_), file(file_) -{ -} - -PchFile::~PchFile() -{ - delete file; -} - -void -PchFile::ProcessXML() -{ -} diff --git a/reactos/tools/rbuild/pch.h b/reactos/tools/rbuild/pch.h deleted file mode 100644 index 7b6e9a9f1f4..00000000000 --- a/reactos/tools/rbuild/pch.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef PCH_H -#define PCH_H - -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) // identifier was truncated to '255' characters in the debug information -#endif//_MSC_VER - -#include -#include -#include -#include -#include - -#ifdef WIN32 -#include -#ifndef MAX_PATH -#define MAX_PATH _MAX_PATH -#endif//MAX_PATH -#else -#include -#include -typedef LONG *PLONG; - -#endif//WIN32 - -#include - - -#ifndef WIN32 -#include -#include -#include -#include - -inline char * strlwr(char *x) -{ - char *y=x; - - while (*y) { - *y=tolower(*y); - y++; - } - return x; -} - -inline char *strupr(char *x) -{ - char *y=x; - - while (*y) { - *y=toupper(*y); - y++; - } - return x; -} - -#define _finite __finite -#define _isnan __isnan -#define stricmp strcasecmp -#define MAX_PATH PATH_MAX -#define _MAX_PATH PATH_MAX -#endif - -#endif//PCH_H diff --git a/reactos/tools/rbuild/project.cpp b/reactos/tools/rbuild/project.cpp deleted file mode 100644 index deb288c5394..00000000000 --- a/reactos/tools/rbuild/project.cpp +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * Copyright (C) 2008 Hervé Poussineau - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" -#include "backend/backend.h" - -using std::string; -using std::vector; - -/* static */ string -Environment::GetVariable ( const string& name ) -{ - char* value = getenv ( name.c_str () ); - if ( value != NULL && strlen ( value ) > 0 ) - return ssprintf ( "%s", - value ); - else - return ""; -} - -string -Environment::GetArch () -{ - return GetEnvironmentVariablePathOrDefault ( "ROS_ARCH", "i386" ); -} - -/* static */ string -Environment::GetEnvironmentVariablePathOrDefault ( const string& name, - const string& defaultValue ) -{ - const string& environmentVariableValue = Environment::GetVariable ( name ); - if ( environmentVariableValue.length () > 0 ) - return NormalizeFilename ( environmentVariableValue ); - else - return defaultValue; -} - -/* static */ string -Environment::GetIntermediatePath () -{ - string defaultIntermediate = - string( "obj-" ) + GetArch (); - return GetEnvironmentVariablePathOrDefault ( "ROS_INTERMEDIATE", - defaultIntermediate ); -} - -/* static */ string -Environment::GetOutputPath () -{ - string defaultOutput = - string( "output-" ) + GetArch (); - return GetEnvironmentVariablePathOrDefault ( "ROS_OUTPUT", - defaultOutput ); -} - -/* static */ string -Environment::GetInstallPath () -{ - string defaultInstall = GetCdOutputPath (); - return GetEnvironmentVariablePathOrDefault ( "ROS_INSTALL", - defaultInstall ); -} - -/* static */ string -Environment::GetCdOutputPath () -{ - return GetEnvironmentVariablePathOrDefault ( "ROS_CDOUTPUT", - "reactos" ); -} - -/* static */ string -Environment::GetAutomakeFile ( const std::string& defaultFile ) -{ - return GetEnvironmentVariablePathOrDefault ( "ROS_AUTOMAKE", - defaultFile ); -} - -ParseContext::ParseContext () - : compilationUnit (NULL) -{ -} - - -FileLocation::FileLocation ( const DirectoryLocation directory, - const std::string& relative_path, - const std::string& name, - const XMLElement *node ) - : directory ( directory ), - relative_path ( NormalizeFilename ( relative_path ) ), - name ( name ) -{ - if ( relative_path[0] == '/' || - relative_path[0] == '\\' || - relative_path.find ( '$' ) != string::npos || - ( relative_path.length () > 1 && ( relative_path[1] == ':' || - relative_path.find_last_of ( "/\\" ) == relative_path.length () - 1 ) ) || - ( relative_path.length () > 3 && relative_path.find ( ':' ) != string::npos ) - ) - { - if ( node ) - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid relative path '%s' at %s", - relative_path.c_str (), - node->location.c_str () ); - else - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid relative path '%s'", - relative_path.c_str () ); - } - - if ( name.find_first_of ( "/\\:" ) != string::npos ) - { - if ( node ) - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid file name '%s' at %s", - name.c_str (), - node->location.c_str () ); - else - throw InvalidOperationException ( __FILE__, - __LINE__, - "Invalid file name '%s'", - name.c_str () ); - } -} - - -FileLocation::FileLocation ( const FileLocation& other ) - : directory ( other.directory ), - relative_path ( other.relative_path ), - name ( other.name ) -{ -} - - -Project::Project ( const Configuration& configuration, - const string& filename, - const std::map* properties ) - : xmlfile (filename), - node (NULL), - head (NULL), - configuration (configuration) -{ - _backend = NULL; - - if ( properties ) - { - std::map::const_iterator it; - for (it = properties->begin (); it != properties->end (); it++) - { - const Property *existing = LookupProperty( it->first ); - if ( !existing ) - { - Property* property = new Property ( *this, NULL, it->first, it->second ); - non_if_data.properties.insert ( std::make_pair ( property->name, property ) ); - } - } - } - - ReadXml(); -} - -Project::~Project () -{ - size_t i; - if ( _backend ) - delete _backend; -#ifdef NOT_NEEDED_SINCE_THESE_ARE_CLEANED_BY_IFABLE_DATA - for ( i = 0; i < modules.size (); i++ ) - delete modules[i]; -#endif - for ( i = 0; i < linkerFlags.size (); i++ ) - delete linkerFlags[i]; - for ( i = 0; i < cdfiles.size (); i++ ) - delete cdfiles[i]; - for ( i = 0; i < installfiles.size (); i++ ) - delete installfiles[i]; - if ( head ) - delete head; -} - -const Property* -Project::LookupProperty ( const string& name ) const -{ - std::map::const_iterator p = non_if_data.properties.find(name); - - if ( p == non_if_data.properties.end () ) - return NULL; - - return p->second; -} - -string -Project::ResolveNextProperty ( const string& s ) const -{ - size_t i = s.find ( "${" ); - if ( i == string::npos ) - i = s.find ( "$(" ); - if ( i != string::npos ) - { - string endCharacter; - if ( s[i + 1] == '{' ) - endCharacter = "}"; - else - endCharacter = ")"; - size_t j = s.find ( endCharacter ); - if ( j != string::npos ) - { - int propertyNameLength = j - i - 2; - string propertyName = s.substr ( i + 2, propertyNameLength ); - const Property* property = LookupProperty ( propertyName ); - if ( property != NULL ) - return string ( s ).replace ( i, propertyNameLength + 3, property->value ); - } - } - return s; -} - -string -Project::ResolveProperties ( const string& s ) const -{ - string s2 = s; - string s3; - do - { - s3 = s2; - s2 = ResolveNextProperty ( s3 ); - } while ( s2 != s3 ); - return s2; -} - -void -Project::ExecuteInvocations () -{ - for( std::map::const_iterator p = modules.begin(); p != modules.end(); ++ p ) - p->second->InvokeModule (); -} - -void -Project::ReadXml () -{ - Path path; - head = XMLLoadFile ( xmlfile, path, xmlbuildfiles ); - node = NULL; - for ( size_t i = 0; i < head->subElements.size (); i++ ) - { - if ( head->subElements[i]->name == "project" ) - { - node = head->subElements[i]; - string path; - ProcessXML ( path ); - return; - } - } - - if (node == NULL) - node = head->subElements[0]; - - throw XMLInvalidBuildFileException ( - node->location, - "Document contains no 'project' tag." ); -} - -void -Project::ProcessXML ( const string& path ) -{ - const XMLAttribute *att; - if ( node->name != "project" ) - throw Exception ( "internal tool error: Project::ProcessXML() called with non- node" ); - - att = node->GetAttribute ( "name", false ); - if ( !att ) - name = "Unnamed"; - else - name = att->value; - - att = node->GetAttribute ( "makefile", true ); - assert(att); - makefile = Environment::GetAutomakeFile ( att->value ); - - size_t i; - for ( i = 0; i < node->subElements.size (); i++ ) - { - ParseContext parseContext; - ProcessXMLSubElement ( *node->subElements[i], path, parseContext ); - } - - non_if_data.ProcessXML (); - - non_if_data.ExtractModules( modules ); - - for ( i = 0; i < linkerFlags.size (); i++ ) - linkerFlags[i]->ProcessXML (); - for( std::map::const_iterator p = modules.begin(); p != modules.end(); ++ p ) - p->second->ProcessXML (); - for ( i = 0; i < cdfiles.size (); i++ ) - cdfiles[i]->ProcessXML (); - for ( i = 0; i < installfiles.size (); i++ ) - installfiles[i]->ProcessXML (); -} - -void -Project::ProcessXMLSubElement ( const XMLElement& e, - const string& path, - ParseContext& parseContext ) -{ - bool subs_invalid = false; - - string subpath(path); - if ( e.name == "module" ) - { - Module* module = new Module ( *this, e, path ); - if ( LocateModule ( module->name ) ) - throw XMLInvalidBuildFileException ( - node->location, - "module name conflict: '%s' (originally defined at %s)", - module->name.c_str(), - module->node.location.c_str() ); - non_if_data.modules.push_back ( module ); - return; // defer processing until later - } - else if ( e.name == "cdfile" ) - { - CDFile* cdfile = new CDFile ( *this, e, path ); - cdfiles.push_back ( cdfile ); - subs_invalid = true; - } - else if ( e.name == "installfile" ) - { - InstallFile* installfile = new InstallFile ( *this, e, path ); - installfiles.push_back ( installfile ); - subs_invalid = true; - } - else if ( e.name == "directory" ) - { - const XMLAttribute* att = e.GetAttribute ( "name", true ); - assert(att); - subpath = GetSubPath ( *this, e.location, path, att->value ); - } - else if ( e.name == "include" ) - { - Include* include = new Include ( *this, &e ); - non_if_data.includes.push_back ( include ); - subs_invalid = true; - } - else if ( e.name == "define" ) - { - Define* define = new Define ( *this, e ); - non_if_data.defines.push_back ( define ); - subs_invalid = true; - } - else if ( e.name == "compilerflag" ) - { - CompilerFlag* pCompilerFlag = new CompilerFlag ( *this, e ); - non_if_data.compilerFlags.push_back ( pCompilerFlag ); - subs_invalid = true; - } - else if ( e.name == "linkerflag" ) - { - linkerFlags.push_back ( new LinkerFlag ( *this, e ) ); - subs_invalid = true; - } - else if ( e.name == "if" || e.name == "ifnot" ) - { - const XMLAttribute* name; - name = e.GetAttribute ( "property", true ); - assert( name ); - const Property *property = LookupProperty( name->value ); - if ( !property ) - { - // Property not found - throw InvalidOperationException ( __FILE__, - __LINE__, - "Test on unknown property '%s' at %s", - name->value.c_str (), e.location.c_str () ); - } - - const XMLAttribute* value; - value = e.GetAttribute ( "value", true ); - assert( value ); - - bool negate = ( e.name == "ifnot" ); - bool equality = ( property->value == value->value ); - if ( equality == negate ) - { - // Failed, skip this element - if ( configuration.Verbose ) - printf("Skipping 'If' at %s\n", e.location.c_str () ); - return; - } - subs_invalid = false; - } - else if ( e.name == "property" ) - { - Property* property = new Property ( e, *this, NULL ); - non_if_data.properties.insert ( std::make_pair ( property->name, property ) ); - } - if ( subs_invalid && e.subElements.size() ) - { - throw XMLInvalidBuildFileException ( - e.location, - "<%s> cannot have sub-elements", - e.name.c_str() ); - } - for ( size_t i = 0; i < e.subElements.size (); i++ ) - ProcessXMLSubElement ( *e.subElements[i], subpath, parseContext ); -} - -Module* -Project::LocateModule ( const string& name ) -{ - std::map::const_iterator p = modules.find(name); - - if ( p == modules.end() ) - return NULL; - - return p->second; -} - -const Module* -Project::LocateModule ( const string& name ) const -{ - std::map::const_iterator p = modules.find(name); - - if ( p == modules.end() ) - return NULL; - - return p->second; -} - -const std::string& -Project::GetProjectFilename () const -{ - return xmlfile; -} diff --git a/reactos/tools/rbuild/project.dtd b/reactos/tools/rbuild/project.dtd deleted file mode 100644 index 5411ce18646..00000000000 --- a/reactos/tools/rbuild/project.dtd +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/reactos/tools/rbuild/rbuild.cpp b/reactos/tools/rbuild/rbuild.cpp deleted file mode 100644 index d81fd3b80b3..00000000000 --- a/reactos/tools/rbuild/rbuild.cpp +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include -#include - -#include -#ifdef WIN32 -#include -#endif -#include - -#include "rbuild.h" -#include "backend/backend.h" -#include "backend/mingw/mingw.h" - -using std::string; -using std::vector; - -static string BuildSystem; -static string RootXmlFile; -static Configuration configuration; -static std::map properties; - -bool -ParseAutomaticDependencySwitch ( - char switchChar2, - char* switchStart ) -{ - switch ( switchChar2 ) - { - case 'd': - configuration.AutomaticDependencies = false; - break; - case 'm': - if ( strlen ( switchStart ) <= 3 ) - { - printf ( "Switch -dm requires a module name\n" ); - return false; - } - configuration.CheckDependenciesForModuleOnly = true; - configuration.CheckDependenciesForModuleOnlyModule = string(&switchStart[3]); - break; - default: - printf ( "Unknown switch -d%c\n", - switchChar2 ); - return false; - } - return true; -} - -bool -ParseCompilationUnitSwitch ( - char switchChar2, - char* switchStart ) -{ - switch ( switchChar2 ) - { - case 'd': - configuration.CompilationUnitsEnabled = false; - break; - default: - printf ( "Unknown switch -u%c\n", - switchChar2 ); - return false; - } - return true; -} - -bool -ParsePrecompiledHeaderSwitch ( - char switchChar2, - char* switchStart ) -{ - switch ( switchChar2 ) - { - case 'd': - configuration.PrecompiledHeadersEnabled = false; - break; - default: - printf ( "Unknown switch -h%c\n", - switchChar2 ); - return false; - } - return true; -} - -bool -ParseVCProjectSwitch ( - char switchChar2, - char* switchStart ) -{ - string temp; - - switch ( switchChar2 ) - { - case 's': - if ( strlen ( switchStart ) <= 3 ) - { - printf ( "Switch -dm requires a module name\n" ); - return false; - } - configuration.VSProjectVersion = string(&switchStart[3]); - - if (configuration.VSProjectVersion.at(0) == '{') { - printf ( "Error: invalid char {\n" ); - return false; - } - - if (configuration.VSProjectVersion.length() == 1) //7,8 - configuration.VSProjectVersion.append(".00"); - - if (configuration.VSProjectVersion.length() == 3) //7.1 - configuration.VSProjectVersion.append("0"); - - break; - case 'c': - configuration.VSConfigurationType = string (&switchStart[3]); - configuration.InstallFiles = true; - break; - case 'o': - if ( strlen ( switchStart ) <= 3 ) - { - printf ( "Invalid switch\n" ); - return false; - } - temp = string (&switchStart[3]); - if ( temp.find ("configuration") != string::npos ) - configuration.UseConfigurationInPath = true; - - if ( temp.find ("version") != string::npos ) - configuration.UseVSVersionInPath = true; - break; - default: - printf ( "Unknown switch -d%c\n", - switchChar2 ); - return false; - } - return true; -} - -bool -ParseMakeSwitch ( char switchChar2 ) -{ - switch ( switchChar2 ) - { - case 'i': - configuration.MakeHandlesInstallDirectories = true; - break; - default: - printf ( "Unknown switch -m%c\n", - switchChar2 ); - return false; - } - return true; -} - -bool -ParseProxyMakefileSwitch ( char switchChar2 ) -{ - switch ( switchChar2 ) - { - case 's': - configuration.GenerateProxyMakefilesInSourceTree = true; - break; - default: - printf ( "Unknown switch -p%c\n", - switchChar2 ); - return false; - } - return true; -} - -bool -ParseDefineSwitch ( char* switchStart ) -{ - string s = string ( switchStart + 2 ); - string::size_type separator = s.find ( '=' ); - if ( separator == string::npos || separator == 0 ) - { - printf ( "Invalid define switch: '%s'\n", switchStart ); - return false; - } - if ( s.find ( '=', separator + 1 ) != string::npos ) - { - printf ( "Invalid define switch: '%s'\n", switchStart ); - return false; - } - - string var = s.substr ( 0, separator ); - string val = s.substr ( separator + 1 ); - properties.insert ( std::pair ( var, val ) ); - return true; -} - -bool -ParseSwitch ( int argc, char** argv, int index ) -{ - char switchChar = strlen ( argv[index] ) > 1 ? argv[index][1] : ' '; - char switchChar2 = strlen ( argv[index] ) > 2 ? argv[index][2] : ' '; - switch ( switchChar ) - { - case 'v': - if (switchChar2 == 's' || switchChar2 == 'c' || switchChar2 == 'o') - { - return ParseVCProjectSwitch ( - switchChar2, - argv[index] ); - } - else - configuration.Verbose = true; - break; - case 'c': - configuration.CleanAsYouGo = true; - break; - case 'd': - return ParseAutomaticDependencySwitch ( - switchChar2, - argv[index] ); - case 'h': - return ParsePrecompiledHeaderSwitch ( - switchChar2, - argv[index] ); - - case 'u': - return ParseCompilationUnitSwitch ( - switchChar2, - argv[index] ); - case 'r': - RootXmlFile = string(&argv[index][2]); - break; - case 'm': - return ParseMakeSwitch ( switchChar2 ); - case 'p': - return ParseProxyMakefileSwitch ( switchChar2 ); - case 'D': - return ParseDefineSwitch ( argv[index] ); - default: - printf ( - "Unknown switch -%c\n", - switchChar ); - return false; - } - return true; -} - -bool -ParseArguments ( int argc, char** argv ) -{ - if ( argc < 2 ) - return false; - - for ( int i = 1; i < argc; i++ ) - { - if ( argv[i][0] == '-' ) - { - if ( !ParseSwitch ( argc, argv, i ) ) - return false; - } - else - BuildSystem = argv[i]; - } - - return true; -} - -int -main ( int argc, char** argv ) -{ - InitializeEnvironment (); - - if ( !ParseArguments ( argc, argv ) ) - { - printf ( "Generates project files for buildsystems\n\n" ); - printf ( " rbuild [switches] -r{rootfile.rbuild} buildsystem\n\n" ); - printf ( "Switches:\n" ); - printf ( " -v Be verbose.\n" ); - printf ( " -c Clean as you go. Delete generated files as soon as they are not\n" ); - printf ( " needed anymore.\n" ); - printf ( " -dd Disable automatic dependencies.\n" ); - printf ( " -dm{module} Check only automatic dependencies for this module.\n" ); - printf ( " -ud Disable multiple source files per compilation unit.\n" ); - printf ( " -mi Let make handle creation of install directories. Rbuild will\n" ); - printf ( " not generate the directories.\n" ); - printf ( " -ps Generate proxy makefiles in source tree instead of the output.\n" ); - printf ( " tree.\n" ); - printf ( " -vs{version} Version of MS VS project files. Default is %s.\n", MS_VS_DEF_VERSION ); - printf ( " -vo{version|configuration} Adds subdirectory path to the default Intermediate-Outputdirectory.\n" ); - printf ( " -Dvar=val Set the value of 'var' variable to 'val'.\n" ); - printf ( "\n" ); - printf ( " buildsystem Target build system. Can be one of:\n" ); - - std::map::iterator iter; - for (iter = Backend::Factory::map_begin(); iter != Backend::Factory::map_end(); iter++) - { - Backend::Factory *factory = iter->second; - printf ( " %-10s %s\n", factory->Name(), factory->Description()); - } - return 1; - } - try - { - if ( RootXmlFile.length () == 0 ) - throw MissingArgumentException ( "-r" ); - - string projectFilename ( RootXmlFile ); - - printf ( "Reading build files..." ); - Project project ( configuration, projectFilename, &properties ); - printf ( "done\n" ); - - project.SetBackend ( Backend::Factory::Create ( - BuildSystem, - project, - configuration ) ); - - project.ExecuteInvocations (); - project.GetBackend().Process(); - - return 0; - } - catch ( Exception& ex ) - { - printf ( "%s\n", (*ex).c_str () ); - return 1; - } - catch ( XMLException& ex ) - { - printf ( "%s\n", (*ex).c_str () ); - return 1; - } -} diff --git a/reactos/tools/rbuild/rbuild.dsp b/reactos/tools/rbuild/rbuild.dsp deleted file mode 100644 index 95faedf9b13..00000000000 --- a/reactos/tools/rbuild/rbuild.dsp +++ /dev/null @@ -1,356 +0,0 @@ -# Microsoft Developer Studio Project File - Name="rbuild" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=rbuild - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "rbuild.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "rbuild.mak" CFG="rbuild - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "rbuild - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "rbuild - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "rbuild - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "rbuild - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I ".." /I "../../lib/inflib" /I "../../include/reactos" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "INFLIB_HOST" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "rbuild - Win32 Release" -# Name "rbuild - Win32 Debug" -# Begin Group "backends" - -# PROP Default_Filter "" -# Begin Group "devcpp" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\backend\devcpp\devcpp.cpp -# End Source File -# Begin Source File - -SOURCE=.\backend\devcpp\devcpp.h -# End Source File -# End Group -# Begin Group "msvc" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\backend\msvc\genguid.cpp -# End Source File -# Begin Source File - -SOURCE=.\backend\msvc\msvc.cpp -# End Source File -# Begin Source File - -SOURCE=.\backend\msvc\msvc.h -# End Source File -# Begin Source File - -SOURCE=.\backend\msvc\msvcmaker.cpp -# End Source File -# Begin Source File - -SOURCE=.\backend\msvc\vcprojmaker.cpp -# End Source File -# End Group -# Begin Group "mingw" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\backend\mingw\mingw.cpp -# End Source File -# Begin Source File - -SOURCE=.\backend\mingw\mingw.h -# End Source File -# Begin Source File - -SOURCE=.\backend\mingw\modulehandler.cpp -# End Source File -# Begin Source File - -SOURCE=.\backend\mingw\modulehandler.h -# End Source File -# Begin Source File - -SOURCE=.\backend\mingw\pch_detection.h -# End Source File -# Begin Source File - -SOURCE=.\backend\mingw\proxymakefile.cpp -# End Source File -# End Group -# Begin Group "backend_sources" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\backend\backend.cpp -# End Source File -# End Group -# Begin Group "backend_headers" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\backend\backend.h -# End Source File -# End Group -# End Group -# Begin Group "rbuild_sources" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\automaticdependency.cpp -# End Source File -# Begin Source File - -SOURCE=.\bootstrap.cpp -# End Source File -# Begin Source File - -SOURCE=.\cdfile.cpp -# End Source File -# Begin Source File - -SOURCE=.\compilationunit.cpp -# End Source File -# Begin Source File - -SOURCE=.\compilationunitsupportcode.cpp -# End Source File -# Begin Source File - -SOURCE=.\compilerflag.cpp -# End Source File -# Begin Source File - -SOURCE=.\configuration.cpp -# End Source File -# Begin Source File - -SOURCE=.\define.cpp -# End Source File -# Begin Source File - -SOURCE=.\directory.cpp -# End Source File -# Begin Source File - -SOURCE=.\exception.cpp -# End Source File -# Begin Source File - -SOURCE=.\filesupportcode.cpp -# End Source File -# Begin Source File - -SOURCE=.\global.cpp -# End Source File -# Begin Source File - -SOURCE=.\include.cpp -# End Source File -# Begin Source File - -SOURCE=.\installfile.cpp -# End Source File -# Begin Source File - -SOURCE=.\linkerflag.cpp -# End Source File -# Begin Source File - -SOURCE=.\linkerscript.cpp -# End Source File -# Begin Source File - -SOURCE=.\module.cpp -# End Source File -# Begin Source File - -SOURCE=.\project.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbuild.cpp -# End Source File -# Begin Source File - -SOURCE=.\stubbedcomponent.cpp -# End Source File -# Begin Source File - -SOURCE=.\syssetupgenerator.cpp -# End Source File -# Begin Source File - -SOURCE=.\testsupportcode.cpp -# End Source File -# Begin Source File - -SOURCE=.\wineresource.cpp -# End Source File -# End Group -# Begin Group "rbuild_headers" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\exception.h -# End Source File -# Begin Source File - -SOURCE=.\pch.h -# End Source File -# Begin Source File - -SOURCE=.\rbuild.h -# End Source File -# Begin Source File - -SOURCE=.\test.h -# End Source File -# End Group -# Begin Group "inflib" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\lib\inflib\builddep.h -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infcommon.h -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infcore.c -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infget.c -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infhost.h -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infhostgen.c -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infhostget.c -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infhostglue.c -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infhostput.c -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\inflib.h -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infpriv.h -# End Source File -# Begin Source File - -SOURCE=..\..\lib\inflib\infput.c -# End Source File -# End Group -# Begin Group "tools" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ssprintf.cpp -# End Source File -# Begin Source File - -SOURCE=..\ssprintf.h -# End Source File -# Begin Source File - -SOURCE=..\xml.cpp -# End Source File -# Begin Source File - -SOURCE=..\xml.h -# End Source File -# End Group -# End Target -# End Project diff --git a/reactos/tools/rbuild/rbuild.dsw b/reactos/tools/rbuild/rbuild.dsw deleted file mode 100644 index f1c3863426c..00000000000 --- a/reactos/tools/rbuild/rbuild.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "rbuild"=.\rbuild.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/reactos/tools/rbuild/rbuild.h b/reactos/tools/rbuild/rbuild.h deleted file mode 100644 index 2e5645cf807..00000000000 --- a/reactos/tools/rbuild/rbuild.h +++ /dev/null @@ -1,1014 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef __RBUILD_H -#define __RBUILD_H - -#include "pch.h" - -#ifdef WIN32 -#include -#include -#endif/*WIN32*/ -#include -#include -#ifdef _MSC_VER -#include -#else/*_MSC_VER*/ -#include -#ifdef WIN32 -#include -#endif/*WIN32*/ -#endif/*_MSC_VER*/ - -#include - -#include "ssprintf.h" -#include "exception.h" -#include "xml.h" - -class Backend; // forward declaration - -typedef std::vector string_list; - -extern std::string ExePrefix; -extern std::string ExePostfix; -extern std::string sSep; -extern std::string sBadSep; -extern char cSep; -extern char cBadSep; - -#ifdef WIN32 -#define DEF_EXEPREFIX "" -#define DEF_EXEPOSTFIX ".exe" -#define DEF_CSEP '\\' -#define DEF_CBAD_SEP '/' -#define DEF_SSEP "\\" -#define DEF_SBAD_SEP "/" -#else -#define DEF_EXEPREFIX "./" -#define DEF_EXEPOSTFIX "" -#define DEF_CSEP '/' -#define DEF_CBAD_SEP '\\' -#define DEF_SSEP "/" -#define DEF_SBAD_SEP "\\" -#endif - -#define MS_VS_DEF_VERSION "7.10" - -class XmlNode; -class Directory; -class Project; -class IfableData; -class Module; -class Include; -class Define; -class File; -class Library; -class Invoke; -class InvokeFile; -class Dependency; -class ImportLibrary; -class CompilerFlag; -class LinkerFlag; -class LinkerScript; -class Property; -class TestSupportCode; -class AutomaticDependency; -class Bootstrap; -class CDFile; -class InstallFile; -class PchFile; -class StubbedComponent; -class StubbedSymbol; -class CompilationUnit; -class FileLocation; -class AutoRegister; - -class SourceFileTest; -class Metadata; -class Bootsector; - -typedef std::map directory_map; - -class XmlNode -{ -protected: - const Project& project; - const XMLElement& node; - - XmlNode ( const Project& project_, - const XMLElement& node_ ); - virtual ~XmlNode(); - -public: - virtual void ProcessXML(); -}; - -enum DirectoryLocation -{ - SourceDirectory, - IntermediateDirectory, - OutputDirectory, - InstallDirectory, - TemporaryDirectory, -}; - -class Directory -{ -public: - std::string name; - directory_map subdirs; - Directory ( const std::string& name ); - ~Directory(); - void Add ( const char* subdir ); - void GenerateTree ( DirectoryLocation root, - bool verbose ); - void CreateRule ( FILE* f, - const std::string& parent ); -private: - bool mkdir_p ( const char* path ); - bool CreateDirectory ( const std::string& path ); - std::string EscapeSpaces ( const std::string& path ); - void GenerateTree ( const std::string& parent, - bool verbose ); -}; - - -class Configuration -{ -public: - Configuration (); - ~Configuration (); - bool Verbose; - bool CleanAsYouGo; - bool AutomaticDependencies; - bool CheckDependenciesForModuleOnly; - bool CompilationUnitsEnabled; - bool PrecompiledHeadersEnabled; - std::string CheckDependenciesForModuleOnlyModule; - std::string VSProjectVersion; - std::string VSConfigurationType; - bool UseVSVersionInPath; - bool UseConfigurationInPath; - bool MakeHandlesInstallDirectories; - bool GenerateProxyMakefilesInSourceTree; - bool InstallFiles; -}; - -class Environment -{ -public: - static std::string GetVariable ( const std::string& name ); - static std::string GetArch (); - static std::string GetIntermediatePath (); - static std::string GetOutputPath (); - static std::string GetCdOutputPath (); - static std::string GetInstallPath (); - static std::string GetAutomakeFile ( const std::string& defaultFile ); - static std::string GetEnvironmentVariablePathOrDefault ( const std::string& name, - const std::string& defaultValue ); -}; - - -class FileSupportCode -{ -public: - static void WriteIfChanged ( char* outbuf, - const std::string& filename, - bool ignoreError = false ); -}; - - -class ParseContext -{ -public: - CompilationUnit* compilationUnit; - ParseContext (); -}; - - -class IfableData -{ -public: - std::vector compilationUnits; - std::vector files; - std::vector includes; - std::vector defines; - std::vector libraries; - std::map properties; - std::vector modules; - std::vector compilerFlags; - int asmFiles; // number of .asm files in compilationUnits - - IfableData(); - ~IfableData(); - void ProcessXML(); - void ExtractModules( std::map &modules ); -}; - -class Project -{ - std::string xmlfile; - XMLElement *node, *head; - Backend* _backend; -public: - const Configuration& configuration; - std::string name; - std::string makefile; - XMLIncludes xmlbuildfiles; - std::vector linkerFlags; - std::vector cdfiles; - std::vector installfiles; - std::map modules; - IfableData non_if_data; - - Project ( const Configuration& configuration, - const std::string& filename, - const std::map* properties = NULL ); - ~Project (); - void SetBackend ( Backend* backend ) { _backend = backend; } - Backend& GetBackend() { return *_backend; } - void ExecuteInvocations (); - - void ProcessXML ( const std::string& path ); - Module* LocateModule ( const std::string& name ); - const Module* LocateModule ( const std::string& name ) const; - const std::string& GetProjectFilename () const; - std::string ResolveProperties ( const std::string& s ) const; - const Property* LookupProperty ( const std::string& name ) const; -private: - std::string ResolveNextProperty ( const std::string& s ) const; - void ReadXml (); - void ProcessXMLSubElement ( const XMLElement& e, - const std::string& path, - ParseContext& parseContext ); - - // disable copy semantics - Project ( const Project& ); - Project& operator = ( const Project& ); -}; - - -enum ModuleType -{ - BuildTool, - StaticLibrary, - ObjectLibrary, - Kernel, - KernelModeDLL, - KernelModeDriver, - NativeDLL, - NativeCUI, - Win32DLL, - Win32OCX, - Win32CUI, - Win32GUI, - BootLoader, - BootSector, - Iso, - LiveIso, - Test, - RpcServer, - RpcClient, - Alias, - BootProgram, - Win32SCR, - IdlHeader, - IsoRegTest, - LiveIsoRegTest, - EmbeddedTypeLib, - ElfExecutable, - RpcProxy, - HostStaticLibrary, - Cabinet, - KeyboardLayout, - MessageHeader, - TypeDontCare, // always at the end -}; - -enum HostType -{ - HostFalse, - HostDefault, - HostTrue, - HostDontCare, -}; - -enum CompilerType -{ - CompilerTypeDontCare, - CompilerTypeCC, - CompilerTypeCPP, -}; - -class FileLocation -{ -public: - DirectoryLocation directory; - std::string relative_path; - std::string name; - - FileLocation ( const DirectoryLocation directory, - const std::string& relative_path, - const std::string& name, - const XMLElement *node = NULL ); - - FileLocation ( const FileLocation& other ); -}; - -class Module -{ -public: - const Project& project; - const XMLElement& node; - std::string xmlbuildFile; - std::string name; - std::string guid; - std::string extension; - std::string baseaddress; - std::string payload; - std::string buildtype; - ModuleType type; - ImportLibrary* importLibrary; - Metadata* metadata; - Bootsector* bootSector; - bool mangledSymbols; - bool underscoreSymbols; - bool isUnicode; - bool isDefaultEntryPoint; - Bootstrap* bootstrap; - AutoRegister* autoRegister; // node - IfableData non_if_data; - std::vector invocations; - std::vector dependencies; - std::vector compilerFlags; - std::vector linkerFlags; - std::vector stubbedComponents; - LinkerScript* linkerScript; - PchFile* pch; - bool cplusplus; - std::string prefix; - std::string aliasedModuleName; - bool allowWarnings; - bool enabled; - bool isStartupLib; - FileLocation *output; // "path/foo.exe" - FileLocation *dependency; // "path/foo.exe" or "path/libfoo.a" - FileLocation *install; - std::string description; - std::string lcid; - std::string layoutId; - std::string layoutNameResId; - - Module ( const Project& project, - const XMLElement& moduleNode, - const std::string& modulePath ); - ~Module (); - ModuleType GetModuleType ( const std::string& location, - const XMLAttribute& attribute ); - bool HasImportLibrary () const; - bool IsDLL () const; - std::string GetPathWithPrefix ( const std::string& prefix ) const; // "path/prefixfoo.exe" - std::string GetPathToBaseDir() const; // "../" offset to rootdirectory - std::string GetEntryPoint(bool leadingUnderscore) const; - void GetTargets ( string_list& ) const; - std::string GetInvocationTarget ( const int index ) const; - bool HasFileWithExtension ( const IfableData&, const std::string& extension ) const; - void InvokeModule () const; - void ProcessXML (); -private: - void SetImportLibrary ( ImportLibrary* importLibrary ); - DirectoryLocation GetTargetDirectoryTree () const; - std::string GetDefaultModuleExtension () const; - std::string GetDefaultModuleEntrypoint () const; - std::string GetDefaultModuleBaseaddress () const; - std::string entrypoint; - void ProcessXMLSubElement ( const XMLElement& e, - DirectoryLocation directory, - const std::string& relative_path, - ParseContext& parseContext ); -}; - - -class Include -{ -public: - FileLocation *directory; - - Include ( const Project& project, - const XMLElement* includeNode ); - Include ( const Project& project, - const XMLElement* includeNode, - const Module* module ); - Include ( const Project& project, - DirectoryLocation directory, - const std::string& relative_path ); - ~Include (); - void ProcessXML (); -private: - const Project& project; - const XMLElement* node; - const Module* module; - DirectoryLocation GetDefaultDirectoryTree ( const Module* module ) const; -}; - - -class Define -{ -public: - const Project& project; - const Module* module; - const XMLElement* node; - std::string name; - std::string value; - std::string backend; - bool overridable; - - Define ( const Project& project, - const XMLElement& defineNode ); - Define ( const Project& project, - const Module* module, - const XMLElement& defineNode ); - Define ( const Project& project, - const Module* module, - const std::string& name_, - const std::string& backend_ = "" ); - ~Define(); - void ProcessXML(); -private: - void Initialize(); -}; - - -class File -{ -public: - FileLocation file; - bool first; - std::string switches; - bool isPreCompiledHeader; - - File ( DirectoryLocation directory, - const std::string& relative_path, - const std::string& name, - bool _first, - const std::string& _switches, - bool _isPreCompiledHeader ); - - void ProcessXML(); - std::string GetFullPath () const; -}; - - -class Library -{ - const XMLElement *node; -public: - const Module& module; - std::string name; - const Module* importedModule; - - Library ( const XMLElement& _node, - const Module& _module, - const std::string& _name ); - Library ( const Module& _module, - const std::string& _name ); - - void ProcessXML(); -}; - - -class Invoke -{ -public: - const XMLElement& node; - const Module& module; - const Module* invokeModule; - std::vector input; - std::vector output; - - Invoke ( const XMLElement& _node, - const Module& _module ); - - void ProcessXML(); - void GetTargets ( string_list& targets ) const; - std::string GetParameters () const; -private: - void ProcessXMLSubElement ( const XMLElement& e ); - void ProcessXMLSubElementInput ( const XMLElement& e ); - void ProcessXMLSubElementOutput ( const XMLElement& e ); -}; - - -class InvokeFile -{ -public: - const XMLElement& node; - std::string name; - std::string switches; - - InvokeFile ( const XMLElement& _node, - const std::string& _name ); - - void ProcessXML (); -}; - - -class Dependency -{ -public: - const XMLElement& node; - const Module& module; - const Module* dependencyModule; - - Dependency ( const XMLElement& _node, - const Module& _module ); - - void ProcessXML(); -}; - -class Bootsector -{ -public: - const XMLElement& node; - const Module* module; - const Module* bootSectorModule; - - Bootsector ( const XMLElement& _node, - const Module* _module ); - - void ProcessXML(); -private: - bool IsSupportedModuleType ( ModuleType type ); -}; - -class Metadata -{ -public: - const XMLElement& node; - const Module& module; - std::string name; - std::string description; - std::string version; - std::string copyright; - std::string url; - std::string date; - std::string owner; - - Metadata ( const XMLElement& _node, - const Module& _module ); - - void ProcessXML(); -}; - -class ImportLibrary : public XmlNode -{ -public: - const Module* module; - std::string dllname; - FileLocation *source; - - ImportLibrary ( const Project& project, - const XMLElement& node, - const Module* module ); - ~ImportLibrary (); -}; - - -class CompilerFlag -{ -public: - const Project& project; - const Module* module; - const XMLElement& node; - std::string flag; - CompilerType compiler; - - CompilerFlag ( const Project& project, - const XMLElement& compilerFlagNode ); - CompilerFlag ( const Project& project, - const Module* module, - const XMLElement& compilerFlagNode ); - ~CompilerFlag (); - void ProcessXML(); -private: - void Initialize(); -}; - - -class LinkerFlag -{ -public: - const Project& project; - const Module* module; - const XMLElement& node; - std::string flag; - - LinkerFlag ( const Project& project, - const XMLElement& linkerFlagNode ); - LinkerFlag ( const Project& project, - const Module* module, - const XMLElement& linkerFlagNode ); - ~LinkerFlag (); - void ProcessXML(); -private: - void Initialize(); -}; - - -class LinkerScript -{ -public: - const XMLElement& node; - const Module& module; - const FileLocation *file; - - LinkerScript ( const XMLElement& node, - const Module& module, - const FileLocation *file ); - ~LinkerScript (); - void ProcessXML(); -}; - - -class Property -{ -public: - const Project& project; - const Module* module; - std::string name, value; - bool isInternal; - - Property ( const XMLElement& node_, - const Project& project_, - const Module* module_ ); - - Property ( const Project& project_, - const Module* module_, - const std::string& name_, - const std::string& value_ ); - - void ProcessXML(); -}; - - -class TestSupportCode -{ -public: - const Project& project; - - TestSupportCode ( const Project& project ); - ~TestSupportCode (); - void GenerateTestSupportCode ( bool verbose ); -private: - bool IsTestModule ( const Module& module ); - void GenerateTestSupportCodeForModule ( Module& module, - bool verbose ); - std::string GetHooksFilename ( Module& module ); - char* WriteStubbedSymbolToHooksFile ( char* buffer, - const StubbedComponent& component, - const StubbedSymbol& symbol ); - char* WriteStubbedComponentToHooksFile ( char* buffer, - const StubbedComponent& component ); - void WriteHooksFile ( Module& module ); - std::string GetStubsFilename ( Module& module ); - char* WriteStubbedSymbolToStubsFile ( char* buffer, - const StubbedComponent& component, - const StubbedSymbol& symbol, - int stubIndex ); - char* WriteStubbedComponentToStubsFile ( char* buffer, - const StubbedComponent& component, - int* stubIndex ); - void WriteStubsFile ( Module& module ); - std::string GetStartupFilename ( Module& module ); - bool IsUnknownCharacter ( char ch ); - std::string GetTestDispatcherName ( std::string filename ); - bool IsTestFile ( std::string& filename ) const; - void GetSourceFilenames ( string_list& list, - Module& module ) const; - char* WriteTestDispatcherPrototypesToStartupFile ( char* buffer, - Module& module ); - char* WriteRegisterTestsFunctionToStartupFile ( char* buffer, - Module& module ); - void WriteStartupFile ( Module& module ); -}; - - -class SourceFile -{ -public: - SourceFile ( AutomaticDependency* automaticDependency, - const Module& module, - const File& file, - SourceFile* parent ); - void Parse (); - std::vector files; /* List of files included in this file */ - const File& file; - AutomaticDependency* automaticDependency; - const Module& module; - std::vector parents; /* List of files, this file is included from */ - time_t lastWriteTime; - time_t youngestLastWriteTime; /* Youngest last write time of this file and all children */ - SourceFile* youngestFile; -private: - void Close (); - void Open (); - void SkipWhitespace (); - bool ReadInclude ( std::string& filename, - bool& searchCurrentDirectory, - bool& includeNext ); - bool IsIncludedFrom ( const File& file ); - SourceFile* ParseFile(const File& file); - bool CanProcessFile ( const File& file ); - bool IsParentOf ( const SourceFile* parent, - const SourceFile* child ); - std::string buf; - const char *p; - const char *end; -}; - - -class AutomaticDependency -{ - friend class SourceFileTest; -public: - const Project& project; - - AutomaticDependency ( const Project& project ); - ~AutomaticDependency (); - bool LocateIncludedFile ( const FileLocation& directory, - const std::string& includedFilename ); - bool LocateIncludedFile ( SourceFile* sourceFile, - const Module& module, - const std::string& includedFilename, - bool searchCurrentDirectory, - bool includeNext, - File& resolvedFile ); - SourceFile* RetrieveFromCacheOrParse ( const Module& module, - const File& file, - SourceFile* parentSourceFile ); - SourceFile* RetrieveFromCache ( const File& file ); - void CheckAutomaticDependencies ( bool verbose ); - void CheckAutomaticDependenciesForModule ( Module& module, - bool verbose ); -private: - void GetModulesToCheck ( Module& module, std::vector& modules ); - void CheckAutomaticDependencies ( const Module& module, - bool verbose ); - void CheckAutomaticDependenciesForFile ( SourceFile* sourceFile ); - void GetIncludeDirectories ( std::vector& includes, - const Module& module ); - void GetModuleFiles ( const Module& module, - std::vector& files ) const; - void ParseFiles (); - void ParseFiles ( const Module& module ); - void ParseFile ( const Module& module, - const File& file ); - std::map sourcefile_map; -}; - - -class Bootstrap -{ -public: - const Project& project; - const Module* module; - const XMLElement& node; - std::string base; - std::string nameoncd; - - Bootstrap ( const Project& project, - const Module* module, - const XMLElement& bootstrapNode ); - ~Bootstrap (); - void ProcessXML(); -private: - bool IsSupportedModuleType ( ModuleType type ); - void Initialize(); - static std::string ReplaceVariable ( const std::string& name, - const std::string& value, - std::string path ); -}; - - -class CDFile : public XmlNode -{ -public: - FileLocation *source; - FileLocation *target; - - CDFile ( const Project& project, - const XMLElement& bootstrapNode, - const std::string& path ); - ~CDFile (); -private: - static std::string ReplaceVariable ( const std::string& name, - const std::string& value, - std::string path ); -}; - - -class InstallFile : public XmlNode -{ -public: - FileLocation *source; - FileLocation *target; - - InstallFile ( const Project& project, - const XMLElement& bootstrapNode, - const std::string& path ); - ~InstallFile (); -}; - - -class PchFile -{ -public: - const XMLElement& node; - const Module& module; - const FileLocation *file; - - PchFile ( - const XMLElement& node, - const Module& module, - const FileLocation *file ); - ~PchFile(); - void ProcessXML(); -}; - - -class StubbedComponent -{ -public: - const Module* module; - const XMLElement& node; - std::string name; - std::vector symbols; - - StubbedComponent ( const Module* module_, - const XMLElement& stubbedComponentNode ); - ~StubbedComponent (); - void ProcessXML (); - void ProcessXMLSubElement ( const XMLElement& e ); -}; - - -class StubbedSymbol -{ -public: - const XMLElement& node; - std::string symbol; - std::string newname; - std::string strippedName; - - StubbedSymbol ( const XMLElement& stubbedSymbolNode ); - ~StubbedSymbol (); - void ProcessXML(); -private: - std::string StripSymbol ( std::string symbol ); -}; - - -class CompilationUnit -{ -public: - std::string name; - - CompilationUnit ( const File* file ); - CompilationUnit ( const Project* project, - const Module* module, - const XMLElement* node ); - ~CompilationUnit (); - void ProcessXML(); - bool IsGeneratedFile () const; - bool HasFileWithExtension ( const std::string& extension ) const; - bool IsFirstFile () const; - const FileLocation& GetFilename () const; - const std::string& GetSwitches () const; - void AddFile ( const File * file ); - const std::vector GetFiles () const; -private: - const Project* project; - const Module* module; - const XMLElement* node; - std::vector files; - FileLocation *default_name; -}; - - -class CompilationUnitSupportCode -{ -public: - const Project& project; - - CompilationUnitSupportCode ( const Project& project ); - ~CompilationUnitSupportCode (); - void Generate ( bool verbose ); -private: - void GenerateForModule ( Module& module, - bool verbose ); - std::string GetCompilationUnitFilename ( Module& module, - CompilationUnit& compilationUnit ); - void WriteCompilationUnitFile ( Module& module, - CompilationUnit& compilationUnit ); -}; - - -enum AutoRegisterType -{ - DllRegisterServer, - DllInstall, - Both -}; - -class AutoRegister : public XmlNode -{ -public: - const Module* module; - std::string infSection; - AutoRegisterType type; - AutoRegister ( const Project& project_, - const Module* module_, - const XMLElement& node_ ); -private: - bool IsSupportedModuleType ( ModuleType type ); - AutoRegisterType GetAutoRegisterType( const std::string& type ); - void Initialize (); -}; - - -class SysSetupGenerator -{ -public: - const Project& project; - SysSetupGenerator ( const Project& project ); - ~SysSetupGenerator (); - void Generate (); -private: - std::string GetDirectoryId ( const Module& module ); - std::string GetFlags ( const Module& module ); - void Generate ( HINF inf, - const Module& module ); -}; - - -extern void -InitializeEnvironment (); - -extern std::string -Right ( const std::string& s, size_t n ); - -extern std::string -Replace ( const std::string& s, const std::string& find, const std::string& with ); - -extern std::string -ChangeSeparator ( const std::string& s, - const char fromSeparator, - const char toSeparator ); - -extern std::string -FixSeparator ( const std::string& s ); - -extern std::string -FixSeparatorForSystemCommand ( const std::string& s ); - -extern std::string -DosSeparator ( const std::string& s ); - -extern std::string -ReplaceExtension ( - const std::string& filename, - const std::string& newExtension ); - -extern std::string -GetSubPath ( - const Project& project, - const std::string& location, - const std::string& path, - const std::string& att_value ); - -extern std::string -GetExtension ( const FileLocation& file ); - -extern std::string -NormalizeFilename ( const std::string& filename ); - -extern std::string -ToLower ( std::string filename ); - -#endif /* __RBUILD_H */ diff --git a/reactos/tools/rbuild/rbuild.mak b/reactos/tools/rbuild/rbuild.mak deleted file mode 100644 index d0f84181302..00000000000 --- a/reactos/tools/rbuild/rbuild.mak +++ /dev/null @@ -1,588 +0,0 @@ -# Copyright (C) 2005 Casper S. Hornstrup -# -# 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. - -RBUILD_BASE = $(TOOLS_BASE_)rbuild -RBUILD_BASE_ = $(RBUILD_BASE)$(SEP) -RBUILD_INT = $(INTERMEDIATE_)$(RBUILD_BASE) -RBUILD_INT_ = $(RBUILD_INT)$(SEP) -RBUILD_OUT = $(OUTPUT_)$(RBUILD_BASE) -RBUILD_OUT_ = $(RBUILD_OUT)$(SEP) - -$(RBUILD_INT): | $(TOOLS_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_OUT): | $(TOOLS_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - - -RBUILD_BACKEND_BASE = $(RBUILD_BASE_)backend -RBUILD_BACKEND_BASE_ = $(RBUILD_BACKEND_BASE)$(SEP) -RBUILD_BACKEND_INT = $(INTERMEDIATE_)$(RBUILD_BACKEND_BASE) -RBUILD_BACKEND_INT_ = $(RBUILD_BACKEND_INT)$(SEP) -RBUILD_BACKEND_OUT = $(OUTPUT_)$(RBUILD_BACKEND_BASE) -RBUILD_BACKEND_OUT_ = $(RBUILD_BACKEND_OUT)$(SEP) - -$(RBUILD_BACKEND_INT): | $(RBUILD_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_BACKEND_OUT): | $(RBUILD_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - - -RBUILD_MINGW_BASE = $(RBUILD_BACKEND_BASE_)mingw -RBUILD_MINGW_BASE_ = $(RBUILD_MINGW_BASE)$(SEP) -RBUILD_MINGW_INT = $(INTERMEDIATE_)$(RBUILD_MINGW_BASE) -RBUILD_MINGW_INT_ = $(RBUILD_MINGW_INT)$(SEP) -RBUILD_MINGW_OUT = $(OUTPUT_)$(RBUILD_MINGW_BASE) -RBUILD_MINGW_OUT_ = $(RBUILD_MINGW_OUT)$(SEP) - -$(RBUILD_MINGW_INT): | $(RBUILD_BACKEND_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_MINGW_OUT): | $(RBUILD_BACKEND_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - - -RBUILD_TESTS_BASE = $(RBUILD_BASE_)tests -RBUILD_TESTS_BASE_ = $(RBUILD_TESTS_BASE)$(SEP) -RBUILD_TESTS_INT = $(INTERMEDIATE_)$(RBUILD_TESTS_BASE) -RBUILD_TESTS_INT_ = $(RBUILD_TESTS_INT)$(SEP) -RBUILD_TESTS_OUT = $(OUTPUT_)$(RBUILD_TESTS_BASE) - -$(RBUILD_TESTS_INT): | $(RBUILD_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_TESTS_OUT): | $(RBUILD_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - - -RBUILD_DEVCPP_BASE = $(RBUILD_BACKEND_BASE_)devcpp -RBUILD_DEVCPP_BASE_ = $(RBUILD_DEVCPP_BASE)$(SEP) -RBUILD_DEVCPP_INT = $(INTERMEDIATE_)$(RBUILD_DEVCPP_BASE) -RBUILD_DEVCPP_INT_ = $(RBUILD_DEVCPP_INT)$(SEP) -RBUILD_DEVCPP_OUT = $(OUTPUT_)$(RBUILD_DEVCPP_BASE) -RBUILD_DEVCPP_OUT_ = $(RBUILD_DEVCPP_OUT)$(SEP) - -$(RBUILD_DEVCPP_INT): | $(RBUILD_BACKEND_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_DEVCPP_OUT): | $(RBUILD_BACKEND_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - -RBUILD_CODEBLOCKS_BASE = $(RBUILD_BACKEND_BASE_)codeblocks -RBUILD_CODEBLOCKS_BASE_ = $(RBUILD_CODEBLOCKS_BASE)$(SEP) -RBUILD_CODEBLOCKS_INT = $(INTERMEDIATE_)$(RBUILD_CODEBLOCKS_BASE) -RBUILD_CODEBLOCKS_INT_ = $(RBUILD_CODEBLOCKS_INT)$(SEP) -RBUILD_CODEBLOCKS_OUT = $(OUTPUT_)$(RBUILD_CODEBLOCKS_BASE) -RBUILD_CODEBLOCKS_OUT_ = $(RBUILD_CODEBLOCKS_OUT)$(SEP) - -$(RBUILD_CODEBLOCKS_INT): | $(RBUILD_BACKEND_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_CODEBLOCKS_OUT): | $(RBUILD_BACKEND_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - - -RBUILD_MSBUILD_BASE = $(RBUILD_BACKEND_BASE_)msbuild -RBUILD_MSBUILD_BASE_ = $(RBUILD_MSBUILD_BASE)$(SEP) -RBUILD_MSBUILD_INT = $(INTERMEDIATE_)$(RBUILD_MSBUILD_BASE) -RBUILD_MSBUILD_INT_ = $(RBUILD_MSBUILD_INT)$(SEP) -RBUILD_MSBUILD_OUT = $(OUTPUT_)$(RBUILD_MSBUILD_BASE) -RBUILD_MSBUILD_OUT_ = $(RBUILD_MSBUILD_OUT)$(SEP) - -$(RBUILD_MSBUILD_INT): | $(RBUILD_BACKEND_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_MSBUILD_OUT): | $(RBUILD_BACKEND_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - -RBUILD_DEPMAP_BASE = $(RBUILD_BACKEND_BASE_)dependencymap -RBUILD_DEPMAP_BASE_ = $(RBUILD_DEPMAP_BASE)$(SEP) -RBUILD_DEPMAP_INT = $(INTERMEDIATE_)$(RBUILD_DEPMAP_BASE) -RBUILD_DEPMAP_INT_ = $(RBUILD_DEPMAP_INT)$(SEP) -RBUILD_DEPMAP_OUT = $(OUTPUT_)$(RBUILD_DEPMAP_BASE) -RBUILD_DEPMAP_OUT_ = $(RBUILD_DEPMAP_OUT)$(SEP) - -$(RBUILD_DEPMAP_INT): | $(RBUILD_BACKEND_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_DEPMAP_OUT): | $(RBUILD_BACKEND_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - -RBUILD_VREPORT_BASE = $(RBUILD_BACKEND_BASE_)versionreport -RBUILD_VREPORT_BASE_ = $(RBUILD_VREPORT_BASE)$(SEP) -RBUILD_VREPORT_INT = $(INTERMEDIATE_)$(RBUILD_VREPORT_BASE) -RBUILD_VREPORT_INT_ = $(RBUILD_VREPORT_INT)$(SEP) -RBUILD_VREPORT_OUT = $(OUTPUT_)$(RBUILD_VREPORT_BASE) -RBUILD_VREPORT_OUT_ = $(RBUILD_VREPORT_OUT)$(SEP) - -$(RBUILD_VREPORT_INT): | $(RBUILD_BACKEND_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_VREPORT_OUT): | $(RBUILD_BACKEND_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - - -RBUILD_MSVC_BASE = $(RBUILD_BACKEND_BASE_)msvc -RBUILD_MSVC_BASE_ = $(RBUILD_MSVC_BASE)$(SEP) -RBUILD_MSVC_INT = $(INTERMEDIATE_)$(RBUILD_MSVC_BASE) -RBUILD_MSVC_INT_ = $(RBUILD_MSVC_INT)$(SEP) -RBUILD_MSVC_OUT = $(OUTPUT_)$(RBUILD_MSVC_BASE) -RBUILD_MSVC_OUT_ = $(RBUILD_MSVC_OUT)$(SEP) - -$(RBUILD_MSVC_INT): | $(RBUILD_BACKEND_INT) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(RBUILD_MSVC_OUT): | $(RBUILD_BACKEND_OUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - - -RBUILD_TARGET = \ - $(RBUILD_OUT_)rbuild$(EXEPOSTFIX) - -RBUILD_TEST_TARGET = \ - $(RBUILD_OUT_)rbuild_test$(EXEPOSTFIX) - -RBUILD_BACKEND_MINGW_BASE_SOURCES = $(addprefix $(RBUILD_MINGW_BASE_), \ - mingw.cpp \ - modulehandler.cpp \ - proxymakefile.cpp \ - rule.cpp \ - ) - -RBUILD_BACKEND_DEVCPP_BASE_SOURCES = $(addprefix $(RBUILD_DEVCPP_BASE_), \ - devcpp.cpp \ - ) - -RBUILD_BACKEND_CODEBLOCKS_BASE_SOURCES = $(addprefix $(RBUILD_CODEBLOCKS_BASE_), \ - codeblocks.cpp \ - ) - -RBUILD_BACKEND_DEPMAP_BASE_SOURCES = $(addprefix $(RBUILD_DEPMAP_BASE_), \ - dependencymap.cpp \ - ) - -RBUILD_BACKEND_VREPORT_BASE_SOURCES = $(addprefix $(RBUILD_VREPORT_BASE_), \ - versionreport.cpp \ - ) - -RBUILD_BACKEND_MSBUILD_BASE_SOURCES = $(addprefix $(RBUILD_MSBUILD_BASE_), \ - msbuild.cpp \ - ) - -RBUILD_BACKEND_MSVC_BASE_SOURCES = $(addprefix $(RBUILD_MSVC_BASE_), \ - genguid.cpp \ - msvc.cpp \ - msvcmaker.cpp \ - vcprojmaker.cpp \ - ) - -RBUILD_BACKEND_SOURCES = \ - $(RBUILD_BACKEND_MINGW_BASE_SOURCES) \ - $(RBUILD_BACKEND_DEVCPP_BASE_SOURCES) \ - $(RBUILD_BACKEND_MSVC_BASE_SOURCES) \ - $(RBUILD_BACKEND_CODEBLOCKS_BASE_SOURCES) \ - $(RBUILD_BACKEND_DEPMAP_BASE_SOURCES) \ - $(RBUILD_BACKEND_VREPORT_BASE_SOURCES) \ - $(RBUILD_BACKEND_MSBUILD_BASE_SOURCES) \ - $(RBUILD_BACKEND_BASE_)backend.cpp - -RBUILD_SOURCES = \ - $(RBUILD_BACKEND_SOURCES) \ - $(addprefix $(RBUILD_BASE_), \ - global.cpp \ - automaticdependency.cpp \ - autoregister.cpp \ - bootstrap.cpp \ - cdfile.cpp \ - compilationunit.cpp \ - compilationunitsupportcode.cpp \ - compilerflag.cpp \ - configuration.cpp \ - define.cpp \ - directory.cpp \ - exception.cpp \ - filesupportcode.cpp \ - include.cpp \ - installfile.cpp \ - linkerflag.cpp \ - linkerscript.cpp \ - module.cpp \ - project.cpp \ - rbuild.cpp \ - stubbedcomponent.cpp \ - syssetupgenerator.cpp \ - testsupportcode.cpp \ - xmlnode.cpp \ - ) - -RBUILD_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(RBUILD_SOURCES:.cpp=.o)) - -RBUILD_BACKEND_DEVCPP_HEADERS = \ - devcpp.h - -RBUILD_BACKEND_MSVCCPP_HEADERS = \ - msvc.h - -RBUILD_BACKEND_CODEBLOCKS_HEADERS = \ - codeblocks.h - -RBUILD_BACKEND_DEPMAP_HEADERS = \ - dependencymap.h - -RBUILD_BACKEND_VREPORT_HEADERS = \ - versionreport.h - -RBUILD_BACKEND_MSBUILD_HEADERS = \ - msbuild.h - -RBUILD_BACKEND_MINGW_HEADERS = \ - mingw.h \ - modulehandler.h \ - rule.h - -RBUILD_BACKEND_HEADERS = \ - backend.h \ - $(addprefix devcpp$(SEP), $(RBUILD_BACKEND_DEVCPP_HEADERS)) \ - $(addprefix msvc$(SEP), $(RBUILD_BACKEND_MSVC_HEADERS)) \ - $(addprefix mingw$(SEP), $(RBUILD_BACKEND_MINGW_HEADERS)) \ - $(addprefix codeblocks$(SEP), $(RBUILD_BACKEND_CODEBLOCKS_HEADERS)) \ - $(addprefix msbuild$(SEP), $(RBUILD_BACKEND_MSBUILD_HEADERS)) \ - $(addprefix versionreport$(SEP), $(RBUILD_BACKEND_VREPORT_HEADERS)) \ - $(addprefix dependencymap$(SEP), $(RBUILD_BACKEND_DEPMAP_HEADERS)) - -RBUILD_HEADERS = \ - $(addprefix $(RBUILD_BASE_), \ - exception.h \ - pch.h \ - rbuild.h \ - test.h \ - $(addprefix backend$(SEP), $(RBUILD_BACKEND_HEADERS)) \ - ) \ - $(XML_SSPRINTF_HEADERS) - -RBUILD_TESTS = \ - tests$(SEP)cdfiletest.cpp \ - tests$(SEP)compilationunittest.cpp \ - tests$(SEP)definetest.cpp \ - tests$(SEP)functiontest.cpp \ - tests$(SEP)iftest.cpp \ - tests$(SEP)includetest.cpp \ - tests$(SEP)invoketest.cpp \ - tests$(SEP)linkerflagtest.cpp \ - tests$(SEP)moduletest.cpp \ - tests$(SEP)projecttest.cpp \ - tests$(SEP)sourcefiletest.cpp \ - tests$(SEP)symboltest.cpp - -RBUILD_TEST_SPECIAL_SOURCES = \ - $(addprefix $(RBUILD_BASE_), $(RBUILD_TESTS)) \ - $(RBUILD_BASE_)tests$(SEP)alltests.cpp - -RBUILD_TEST_SOURCES = \ - $(RBUILD_COMMON_SOURCES) \ - $(RBUILD_TEST_SPECIAL_SOURCES) - -RBUILD_TEST_SPECIAL_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(RBUILD_TEST_SPECIAL_SOURCES:.cpp=.o)) - -RBUILD_TEST_OBJECTS = \ - $(RBUILD_COMMON_OBJECTS) \ - $(RBUILD_TEST_SPECIAL_OBJECTS) - -RBUILD_HOST_CXXFLAGS = -I$(RBUILD_BASE) -I$(TOOLS_BASE) -I$(INFLIB_BASE) $(TOOLS_CPPFLAGS) -Iinclude -Iinclude/reactos - -RBUILD_HOST_LFLAGS = $(TOOLS_LFLAGS) - -.PHONY: rbuild -rbuild: $(RBUILD_TARGET) -host_gpp += -g - -$(RBUILD_TARGET): $(RBUILD_OBJECTS) $(XML_SSPRINTF_OBJECTS) $(INFLIB_HOST_OBJECTS) | $(RBUILD_OUT) - $(ECHO_LD) - ${host_gpp} $^ $(RBUILD_HOST_LFLAGS) -o $@ - -$(RBUILD_INT_)global.o: $(RBUILD_BASE_)global.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)automaticdependency.o: $(RBUILD_BASE_)automaticdependency.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)autoregister.o: $(RBUILD_BASE_)autoregister.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)bootstrap.o: $(RBUILD_BASE_)bootstrap.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)cdfile.o: $(RBUILD_BASE_)cdfile.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)compilationunit.o: $(RBUILD_BASE_)compilationunit.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)compilationunitsupportcode.o: $(RBUILD_BASE_)compilationunitsupportcode.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)compilerflag.o: $(RBUILD_BASE_)compilerflag.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)configuration.o: $(RBUILD_BASE_)configuration.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)define.o: $(RBUILD_BASE_)define.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)directory.o: $(RBUILD_BASE_)directory.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)exception.o: $(RBUILD_BASE_)exception.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)filesupportcode.o: $(RBUILD_BASE_)filesupportcode.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)include.o: $(RBUILD_BASE_)include.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)installfile.o: $(RBUILD_BASE_)installfile.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)linkerflag.o: $(RBUILD_BASE_)linkerflag.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)linkerscript.o: $(RBUILD_BASE_)linkerscript.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)module.o: $(RBUILD_BASE_)module.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)project.o: $(RBUILD_BASE_)project.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)rbuild.o: $(RBUILD_BASE_)rbuild.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)rule.o: $(RBUILD_BASE_)rule.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)stubbedcomponent.o: $(RBUILD_BASE_)stubbedcomponent.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)syssetupgenerator.o: $(RBUILD_BASE_)syssetupgenerator.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)wineresource.o: $(RBUILD_BASE_)wineresource.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)xmlnode.o: $(RBUILD_BASE_)xmlnode.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_INT_)testsupportcode.o: $(RBUILD_BASE_)testsupportcode.cpp $(RBUILD_HEADERS) | $(RBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_BACKEND_INT_)backend.o: $(RBUILD_BACKEND_BASE_)backend.cpp $(RBUILD_HEADERS) | $(RBUILD_BACKEND_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MINGW_INT_)mingw.o: $(RBUILD_MINGW_BASE_)mingw.cpp $(RBUILD_HEADERS) | $(RBUILD_MINGW_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MINGW_INT_)modulehandler.o: $(RBUILD_MINGW_BASE_)modulehandler.cpp $(RBUILD_HEADERS) | $(RBUILD_MINGW_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MINGW_INT_)proxymakefile.o: $(RBUILD_MINGW_BASE_)proxymakefile.cpp $(RBUILD_HEADERS) | $(RBUILD_MINGW_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MINGW_INT_)rule.o: $(RBUILD_MINGW_BASE_)rule.cpp $(RBUILD_HEADERS) | $(RBUILD_MINGW_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_DEVCPP_INT_)devcpp.o: $(RBUILD_DEVCPP_BASE_)devcpp.cpp $(RBUILD_HEADERS) | $(RBUILD_DEVCPP_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_CODEBLOCKS_INT_)codeblocks.o: $(RBUILD_CODEBLOCKS_BASE_)codeblocks.cpp $(RBUILD_HEADERS) | $(RBUILD_CODEBLOCKS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_DEPMAP_INT_)dependencymap.o: $(RBUILD_DEPMAP_BASE_)dependencymap.cpp $(RBUILD_HEADERS) | $(RBUILD_DEPMAP_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_VREPORT_INT_)versionreport.o: $(RBUILD_VREPORT_BASE_)versionreport.cpp $(RBUILD_HEADERS) | $(RBUILD_VREPORT_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MSBUILD_INT_)msbuild.o: $(RBUILD_MSBUILD_BASE_)msbuild.cpp $(RBUILD_HEADERS) | $(RBUILD_MSBUILD_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MSVC_INT_)genguid.o: $(RBUILD_MSVC_BASE_)genguid.cpp $(RBUILD_HEADERS) | $(RBUILD_MSVC_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MSVC_INT_)msvc.o: $(RBUILD_MSVC_BASE_)msvc.cpp $(RBUILD_HEADERS) | $(RBUILD_MSVC_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MSVC_INT_)msvcmaker.o: $(RBUILD_MSVC_BASE_)msvcmaker.cpp $(RBUILD_HEADERS) | $(RBUILD_MSVC_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_MSVC_INT_)vcprojmaker.o: $(RBUILD_MSVC_BASE_)vcprojmaker.cpp $(RBUILD_HEADERS) | $(RBUILD_MSVC_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TEST_TARGET): $(RBUILD_TEST_OBJECTS) $(INFLIB_HOST_OBJECTS) $(RBUILD_HEADERS) | $(RBUILD_OUT) - $(ECHO_LD) - ${host_gpp} $(RBUILD_TEST_OBJECTS) $(INFLIB_HOST_OBJECTS) $(RBUILD_HOST_LFLAGS) -o $@ - -$(RBUILD_TESTS_INT_)cdfiletest.o: $(RBUILD_TESTS_BASE_)cdfiletest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)compilationunittest.o: $(RBUILD_TESTS_BASE_)compilationunittest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)definetest.o: $(RBUILD_TESTS_BASE_)definetest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)functiontest.o: $(RBUILD_TESTS_BASE_)functiontest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)iftest.o: $(RBUILD_TESTS_BASE_)iftest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)includetest.o: $(RBUILD_TESTS_BASE_)includetest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)invoketest.o: $(RBUILD_TESTS_BASE_)invoketest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)linkerflagtest.o: $(RBUILD_TESTS_BASE_)linkerflagtest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)moduletest.o: $(RBUILD_TESTS_BASE_)moduletest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)projecttest.o: $(RBUILD_TESTS_BASE_)projecttest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)sourcefiletest.o: $(RBUILD_TESTS_BASE_)sourcefiletest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)symboltest.o: $(RBUILD_TESTS_BASE_)symboltest.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - -$(RBUILD_TESTS_INT_)alltests.o: $(RBUILD_TESTS_BASE_)alltests.cpp $(RBUILD_HEADERS) | $(RBUILD_TESTS_INT) - $(ECHO_CC) - ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ - - -.PHONY: rbuild_test -rbuild_test: $(RBUILD_TEST_TARGET) - $(ECHO_TEST) - $(Q)$(RBUILD_TEST_TARGET) - -.PHONY: rbuild_test_clean -rbuild_test_clean: $(RBUILD_TEST_TARGET) $(RBUILD_TESTS_INT) - -@$(rm) $(RBUILD_TEST_TARGET) $(RBUILD_TEST_SPECIAL_OBJECTS) 2>$(NUL) - -.PHONY: rbuild_clean -rbuild_clean: $(RBUILD_TARGET) $(RBUILD_OBJECTS) $(RBUILD_TESTS_INT) - -@$(rm) $(RBUILD_TARGET) $(RBUILD_OBJECTS) 2>$(NUL) -clean: rbuild_clean diff --git a/reactos/tools/rbuild/rbuild.sln b/reactos/tools/rbuild/rbuild.sln deleted file mode 100644 index 0f9164398e8..00000000000 --- a/reactos/tools/rbuild/rbuild.sln +++ /dev/null @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rbuild", "rbuild.vcproj", "{D9305AFB-499E-49F1-A865-99DD7E19E762}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D9305AFB-499E-49F1-A865-99DD7E19E762}.Debug|Win32.ActiveCfg = Debug|Win32 - {D9305AFB-499E-49F1-A865-99DD7E19E762}.Debug|Win32.Build.0 = Debug|Win32 - {D9305AFB-499E-49F1-A865-99DD7E19E762}.Release|Win32.ActiveCfg = Release|Win32 - {D9305AFB-499E-49F1-A865-99DD7E19E762}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/reactos/tools/rbuild/rbuild.vcproj b/reactos/tools/rbuild/rbuild.vcproj deleted file mode 100644 index 603e1443ef4..00000000000 --- a/reactos/tools/rbuild/rbuild.vcproj +++ /dev/null @@ -1,1311 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/reactos/tools/rbuild/stubbedcomponent.cpp b/reactos/tools/rbuild/stubbedcomponent.cpp deleted file mode 100644 index 7cd1ef61f89..00000000000 --- a/reactos/tools/rbuild/stubbedcomponent.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -StubbedComponent::StubbedComponent ( const Module* module_, - const XMLElement& stubbedComponentNode ) - : module(module_), - node(stubbedComponentNode) -{ - const XMLAttribute* att = node.GetAttribute ( "name", true ); - assert ( att ); - name = att->value; -} - -StubbedComponent::~StubbedComponent () -{ - for ( size_t i = 0; i < symbols.size(); i++ ) - delete symbols[i]; -} - -void -StubbedComponent::ProcessXML () -{ - size_t i; - for ( i = 0; i < node.subElements.size (); i++ ) - ProcessXMLSubElement ( *node.subElements[i] ); - for ( i = 0; i < symbols.size (); i++ ) - symbols[i]->ProcessXML (); -} - -void -StubbedComponent::ProcessXMLSubElement ( const XMLElement& e ) -{ - bool subs_invalid = false; - if ( e.name == "symbol" ) - { - symbols.push_back ( new StubbedSymbol ( e ) ); - subs_invalid = false; - } - if ( subs_invalid && e.subElements.size () > 0 ) - { - throw XMLInvalidBuildFileException ( - e.location, - "<%s> cannot have sub-elements", - e.name.c_str() ); - } - for ( size_t i = 0; i < e.subElements.size (); i++ ) - ProcessXMLSubElement ( *e.subElements[i] ); -} - - - -StubbedSymbol::StubbedSymbol ( const XMLElement& stubbedSymbolNode ) - : node(stubbedSymbolNode) -{ -} - -StubbedSymbol::~StubbedSymbol () -{ -} - -void -StubbedSymbol::ProcessXML () -{ - if ( node.value.size () == 0 ) - { - throw XMLInvalidBuildFileException ( - node.location, - " is empty." ); - } - symbol = node.value; - - strippedName = StripSymbol ( symbol ); - - const XMLAttribute* att = node.GetAttribute ( "newname", false ); - if ( att != NULL ) - newname = att->value; - else - newname = strippedName; -} - -string -StubbedSymbol::StripSymbol ( string symbol ) -{ - size_t start = 0; - while ( start < symbol.length () && symbol[start] == '@') - start++; - size_t end = symbol.length () - 1; - while ( end > 0 && isdigit ( symbol[end] ) ) - end--; - if ( end > 0 && symbol[end] == '@' ) - end--; - if ( end > 0 ) - return symbol.substr ( start, end - start + 1 ); - else - return ""; -} diff --git a/reactos/tools/rbuild/syssetupgenerator.cpp b/reactos/tools/rbuild/syssetupgenerator.cpp deleted file mode 100644 index 581b875bf29..00000000000 --- a/reactos/tools/rbuild/syssetupgenerator.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -SysSetupGenerator::SysSetupGenerator ( const Project& project ) - : project ( project ) -{ -} - -SysSetupGenerator::~SysSetupGenerator () -{ -} - -void -SysSetupGenerator::Generate () -{ - HINF inf; - ULONG errorLine; - - string syssetupTemplate = "media" + sSep + "inf" + sSep + "syssetup.inf.tpl"; - string syssetup = Environment::GetOutputPath() + sSep + "media" + sSep + "inf" + sSep + "syssetup.inf"; - - if ( 0 != InfHostOpenFile ( &inf, syssetupTemplate.c_str (), &errorLine ) ) - throw new FileNotFoundException ( syssetupTemplate ); - - for( std::map::const_iterator p = project.modules.begin(); p != project.modules.end(); ++ p ) - { - const Module& module = *p->second; - if ( module.autoRegister != NULL ) - Generate ( inf, module ); - } - - if ( 0 != InfHostWriteFile ( inf, syssetup.c_str (), "" ) ) - { - InfHostCloseFile ( inf ); - throw new AccessDeniedException ( syssetup ); - } - - InfHostCloseFile ( inf ); -} - -#define DIRECTORYID_SYSTEM32 "11" - -string -SysSetupGenerator::GetDirectoryId ( const Module& module ) -{ - if ( module.install && ToLower ( module.install->relative_path ) == "system32" ) - return DIRECTORYID_SYSTEM32; - throw InvalidOperationException ( __FILE__, - __LINE__ ); -} - -#define FLG_REGSVR_DLLREGISTER "1" -#define FLG_REGSVR_DLLINSTALL "2" -#define FLG_REGSVR_BOTH "3" - -string -SysSetupGenerator::GetFlags ( const Module& module ) -{ - if ( module.autoRegister->type == DllRegisterServer ) - return FLG_REGSVR_DLLREGISTER; - if ( module.autoRegister->type == DllInstall ) - return FLG_REGSVR_DLLINSTALL; - if ( module.autoRegister->type == Both ) - return FLG_REGSVR_BOTH; - throw InvalidOperationException ( __FILE__, - __LINE__ ); -} - -void -SysSetupGenerator::Generate ( HINF inf, - const Module& module ) -{ - PINFCONTEXT context; - - string infSection = module.autoRegister->infSection; - if ( 0 != InfHostFindOrAddSection ( inf, infSection.c_str (), &context ) ) - { - throw new Exception ( ".inf section '%s' not found", infSection.c_str () ); - InfHostCloseFile ( inf ); - } - - if ( 0 != InfHostAddLine ( context, NULL ) || - 0 != InfHostAddField ( context, GetDirectoryId ( module ).c_str () ) || - 0 != InfHostAddField ( context, "" ) || - ( module.install && 0 != InfHostAddField ( context, module.install->name.c_str () ) ) || - 0 != InfHostAddField ( context, GetFlags ( module ).c_str () ) ) - { - InfHostFreeContext ( context ); - InfHostCloseFile ( inf ); - throw InvalidOperationException ( __FILE__, - __LINE__ ); - } - - InfHostFreeContext ( context ); -} diff --git a/reactos/tools/rbuild/test.h b/reactos/tools/rbuild/test.h deleted file mode 100644 index 5a052fbbed5..00000000000 --- a/reactos/tools/rbuild/test.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#ifndef __TEST_H -#define __TEST_H - -#include "rbuild.h" -#include "backend/mingw/mingw.h" - -#define SSEP DEF_SSEP - -#define RBUILD_BASE "tools" SSEP "rbuild" SSEP - -class BaseTest -{ -public: - bool Failed; - BaseTest (); - virtual ~BaseTest (); - virtual void Run () = 0; -protected: - void Assert ( const char *message, - ... ); - void IsNull ( void* reference, - const char* file, - int line ); - void IsNotNull ( void* reference, - const char* file, - int line ); - void IsTrue ( bool condition, - const char* file, - int line ); - void IsFalse ( bool condition, - const char* file, - int line ); - void AreEqual ( int expected, - int actual, - const char* file, - int line ); - void AreEqual ( const std::string& expected, - const std::string& actual, - const char* file, - int line ); - void AreNotEqual ( int expected, - int actual, - const char* file, - int line ); -private: - void Fail (); -}; - -#define IS_NULL(reference) IsNull((void*)reference,__FILE__,__LINE__) -#define IS_NOT_NULL(reference) IsNotNull((void*)reference,__FILE__,__LINE__) -#define IS_TRUE(condition) IsTrue(condition,__FILE__,__LINE__) -#define IS_FALSE(condition) IsFalse(condition,__FILE__,__LINE__) -#define ARE_EQUAL(expected,actual) AreEqual(expected,actual,__FILE__,__LINE__) -#define ARE_NOT_EQUAL(expected,actual) AreNotEqual(expected,actual,__FILE__,__LINE__) - -class ProjectTest : public BaseTest -{ -public: - void Run (); -}; - - -class ModuleTest : public BaseTest -{ -public: - void Run (); -}; - - -class DefineTest : public BaseTest -{ -public: - void Run (); -}; - - -class IncludeTest : public BaseTest -{ -public: - void Run (); -}; - - -class InvokeTest : public BaseTest -{ -public: - void Run (); -}; - - -class LinkerFlagTest : public BaseTest -{ -public: - void Run (); -}; - - -class IfTest : public BaseTest -{ -public: - void Run (); -private: - void TestProjectIf ( Project& project ); - void TestModuleIf ( Project& project ); -}; - - -class FunctionTest : public BaseTest -{ -public: - void Run (); -}; - - -class SourceFileTest : public BaseTest -{ -public: - void Run (); - void IncludeTest (); - void FullParseTest (); -private: - bool IsParentOf ( const SourceFile* parent, - const SourceFile* child ); - -}; - - -class CDFileTest : public BaseTest -{ -public: - void Run (); -}; - - -class SymbolTest : public BaseTest -{ -public: - void Run (); -}; - -class CompilationUnitTest : public BaseTest -{ -public: - void Run (); -}; - -#endif /* __TEST_H */ diff --git a/reactos/tools/rbuild/tests/alltests.cpp b/reactos/tools/rbuild/tests/alltests.cpp deleted file mode 100644 index dd6fb3d5ea7..00000000000 --- a/reactos/tools/rbuild/tests/alltests.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" - -#include "rbuild.h" -#include "test.h" - -BaseTest::BaseTest() -{ - Failed = false; -} - -BaseTest::~BaseTest() -{ -} - -void BaseTest::Assert(const char *message, ...) -{ - va_list args; - va_start ( args, message ); - vprintf(message, args); - va_end ( args ); - Fail(); -} - -void BaseTest::IsNull(void* reference, - const char* file, - int line) -{ - if (reference != NULL) - { - Assert("Condition was not NULL at %s:%d\n", - file, - line); - } -} - -void BaseTest::IsNotNull(void* reference, - const char* file, - int line) -{ - if (reference == NULL) - { - Assert("Condition was NULL at %s:%d\n", - file, - line); - } -} - -void BaseTest::IsTrue(bool condition, - const char* file, - int line) -{ - if (!condition) - { - Assert("Condition was not true at %s:%d\n", - file, - line); - } -} - -void BaseTest::IsFalse(bool condition, - const char* file, - int line) -{ - if (condition) - { - Assert("Condition was not false at %s:%d\n", - file, - line); - } -} - -void BaseTest::AreEqual(int expected, - int actual, - const char* file, - int line) -{ - if (actual != expected) - { - Assert("Expected %d/0x%.08x was %d/0x%.08x at %s:%d\n", - expected, - expected, - actual, - actual, - file, - line); - } -} - -void BaseTest::AreEqual(const std::string& expected, - const std::string& actual, - const char* file, - int line) -{ - if (actual != expected) - { - Assert("Expected '%s' was '%s' at %s:%d\n", - expected.c_str(), - actual.c_str(), - file, - line); - } -} - -void BaseTest::AreNotEqual(int expected, - int actual, - const char* file, - int line) -{ - if (actual == expected) - { - Assert("Actual value expected to be different from %d/0x%.08x at %s:%d\n", - expected, - expected, - file, - line); - } -} - -void BaseTest::Fail() -{ - Failed = true; -} - -class BaseTestList : public std::vector -{ -public: - ~BaseTestList() - { - for ( size_t i = 0; i < size(); i++ ) - { - delete (*this)[i]; - } - } -}; - -class TestDispatcher -{ -public: - void Run() - { - int numberOfFailedTests = 0; - BaseTestList tests; - GetTests(tests); - for (size_t i = 0; i < tests.size(); i++) - { - try - { - BaseTest& test = *tests[i]; - test.Run(); - if (test.Failed) - numberOfFailedTests++; - } - catch ( Exception& ex ) - { - printf ( "%s\n", (*ex).c_str () ); - numberOfFailedTests++; - } - catch ( XMLException& ex ) - { - printf ( "%s\n", (*ex).c_str () ); - numberOfFailedTests++; - } - } - - if (numberOfFailedTests > 0) - printf("%d tests failed\n", - numberOfFailedTests); - else - printf("All tests succeeded\n"); - } - -private: - void GetTests ( BaseTestList& tests ) - { - tests.push_back(new ProjectTest()); - tests.push_back(new ModuleTest()); - tests.push_back(new DefineTest()); - tests.push_back(new IncludeTest()); - tests.push_back(new InvokeTest()); - tests.push_back(new LinkerFlagTest()); - tests.push_back(new IfTest()); - tests.push_back(new FunctionTest()); - tests.push_back(new SourceFileTest()); - tests.push_back(new CDFileTest()); - tests.push_back(new SymbolTest()); - tests.push_back(new CompilationUnitTest()); - } -}; - - -int main(int argc, - char** argv) -{ - InitializeEnvironment (); - TestDispatcher testDispatcher; - testDispatcher.Run(); - return 0; -}; diff --git a/reactos/tools/rbuild/tests/cdfiletest.cpp b/reactos/tools/rbuild/tests/cdfiletest.cpp deleted file mode 100644 index 764f4fcc5be..00000000000 --- a/reactos/tools/rbuild/tests/cdfiletest.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void CDFileTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/cdfile.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - ARE_EQUAL ( 3, project.cdfiles.size () ); - - CDFile& cdfile1 = *project.cdfiles[0]; - ARE_EQUAL("dir1", cdfile1.base); - ARE_EQUAL("ReadMe1.txt", cdfile1.nameoncd); - - CDFile& cdfile2 = *project.cdfiles[1]; - ARE_EQUAL("dir2", cdfile2.base); - ARE_EQUAL("readme2.txt", cdfile2.nameoncd); - - CDFile& cdfile3 = *project.cdfiles[2]; - //ARE_EQUAL("", cdfile3.base); - ARE_EQUAL("readme3.txt", cdfile3.nameoncd); -} diff --git a/reactos/tools/rbuild/tests/compilationunittest.cpp b/reactos/tools/rbuild/tests/compilationunittest.cpp deleted file mode 100644 index 3003e99c709..00000000000 --- a/reactos/tools/rbuild/tests/compilationunittest.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void CompilationUnitTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/compilationunit.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - ARE_EQUAL ( 1, project.modules.size () ); - - Module& module1 = *project.modules[0]; - IS_TRUE ( module1.type == BuildTool ); - - ARE_EQUAL ( 3, module1.non_if_data.files.size()); - ARE_EQUAL ( "dir1" SSEP "file1.c", module1.non_if_data.files[0]->name ); - ARE_EQUAL ( "dir1" SSEP "file2.c", module1.non_if_data.files[1]->name ); - ARE_EQUAL ( "dir1" SSEP "file3.c", module1.non_if_data.files[2]->name ); - - ARE_EQUAL ( 2, module1.non_if_data.compilationUnits.size () ); - - CompilationUnit& compilationUnit1 = *module1.non_if_data.compilationUnits[0]; - ARE_EQUAL ( 2, compilationUnit1.files.size () ); - - ARE_EQUAL ( "dir1" SSEP "file1.c", compilationUnit1.files[0]->name ); - ARE_EQUAL ( "dir1" SSEP "file2.c", compilationUnit1.files[1]->name ); - - CompilationUnit& compilationUnit2 = *module1.non_if_data.compilationUnits[1]; - ARE_EQUAL ( 1, compilationUnit2.files.size () ); - - ARE_EQUAL ( "dir1" SSEP "file3.c", compilationUnit2.files[0]->name ); -} diff --git a/reactos/tools/rbuild/tests/data/automaticdependency.rbuild b/reactos/tools/rbuild/tests/data/automaticdependency.rbuild deleted file mode 100644 index 6612ba36a02..00000000000 --- a/reactos/tools/rbuild/tests/data/automaticdependency.rbuild +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - . - sourcefile1.c - - - - - - diff --git a/reactos/tools/rbuild/tests/data/automaticdependency_include.rbuild b/reactos/tools/rbuild/tests/data/automaticdependency_include.rbuild deleted file mode 100644 index 0fda1c24f56..00000000000 --- a/reactos/tools/rbuild/tests/data/automaticdependency_include.rbuild +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - . - sourcefile1 - sourcefile_include.c - - - - - - diff --git a/reactos/tools/rbuild/tests/data/cdfile.rbuild b/reactos/tools/rbuild/tests/data/cdfile.rbuild deleted file mode 100644 index 42c4a71a157..00000000000 --- a/reactos/tools/rbuild/tests/data/cdfile.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - - - readme1.txt - readme2.txt - readme3.txt - - diff --git a/reactos/tools/rbuild/tests/data/compilationunit.rbuild b/reactos/tools/rbuild/tests/data/compilationunit.rbuild deleted file mode 100644 index 3fb03d2ef0f..00000000000 --- a/reactos/tools/rbuild/tests/data/compilationunit.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - file1.c - file2.c - - file3.c - - - diff --git a/reactos/tools/rbuild/tests/data/define.rbuild b/reactos/tools/rbuild/tests/data/define.rbuild deleted file mode 100644 index 2dc1fa334cd..00000000000 --- a/reactos/tools/rbuild/tests/data/define.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - - value1 - - - value2 - - - diff --git a/reactos/tools/rbuild/tests/data/if.rbuild b/reactos/tools/rbuild/tests/data/if.rbuild deleted file mode 100644 index 415d1bf98cd..00000000000 --- a/reactos/tools/rbuild/tests/data/if.rbuild +++ /dev/null @@ -1,14 +0,0 @@ - - - - - compilerflag1 - - - - compilerflag2 - file1.c - - file2.c - - diff --git a/reactos/tools/rbuild/tests/data/include.rbuild b/reactos/tools/rbuild/tests/data/include.rbuild deleted file mode 100644 index 62ac296fc2a..00000000000 --- a/reactos/tools/rbuild/tests/data/include.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - include1 - - - include2 - - - - - include3 - - - diff --git a/reactos/tools/rbuild/tests/data/invoke.rbuild b/reactos/tools/rbuild/tests/data/invoke.rbuild deleted file mode 100644 index 39d8a65674f..00000000000 --- a/reactos/tools/rbuild/tests/data/invoke.rbuild +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - file1.c - - - file1.c - - - - - diff --git a/reactos/tools/rbuild/tests/data/linkerflag.rbuild b/reactos/tools/rbuild/tests/data/linkerflag.rbuild deleted file mode 100644 index 3abff97e74f..00000000000 --- a/reactos/tools/rbuild/tests/data/linkerflag.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - - -lgcc1 - - -lgcc2 - - diff --git a/reactos/tools/rbuild/tests/data/module.rbuild b/reactos/tools/rbuild/tests/data/module.rbuild deleted file mode 100644 index 905affd95a7..00000000000 --- a/reactos/tools/rbuild/tests/data/module.rbuild +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - file1.c - file2.c - - - - - module1 - module1 - file3.c - file4.c - - - diff --git a/reactos/tools/rbuild/tests/data/project.rbuild b/reactos/tools/rbuild/tests/data/project.rbuild deleted file mode 100644 index 30cb97f060a..00000000000 --- a/reactos/tools/rbuild/tests/data/project.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/reactos/tools/rbuild/tests/data/sourcefile1.c b/reactos/tools/rbuild/tests/data/sourcefile1.c deleted file mode 100644 index 28af7778e50..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile1.c +++ /dev/null @@ -1,13 +0,0 @@ -/* - * ReactOS kernel - */ -/* $Id: main.c 12694 2005-01-01 11:47:33Z hbirr $ - * FILE: ntoskrnl/ke/main.c - */ - -/* INCLUDES *****************************************************************/ - -#include -#include - -/* GLOBALS *******************************************************************/ diff --git a/reactos/tools/rbuild/tests/data/sourcefile1/sourcefile1_header3.h b/reactos/tools/rbuild/tests/data/sourcefile1/sourcefile1_header3.h deleted file mode 100644 index 40a8c178f10..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile1/sourcefile1_header3.h +++ /dev/null @@ -1 +0,0 @@ -/* empty */ diff --git a/reactos/tools/rbuild/tests/data/sourcefile1/sourcefile_includenext.h b/reactos/tools/rbuild/tests/data/sourcefile1/sourcefile_includenext.h deleted file mode 100644 index 40a8c178f10..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile1/sourcefile_includenext.h +++ /dev/null @@ -1 +0,0 @@ -/* empty */ diff --git a/reactos/tools/rbuild/tests/data/sourcefile1_header1.h b/reactos/tools/rbuild/tests/data/sourcefile1_header1.h deleted file mode 100644 index c4261ef88cb..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile1_header1.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/reactos/tools/rbuild/tests/data/sourcefile1_header2.h b/reactos/tools/rbuild/tests/data/sourcefile1_header2.h deleted file mode 100644 index 212537b619a..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile1_header2.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "sourcefile1/sourcefile1_header3.h" -#include -#include diff --git a/reactos/tools/rbuild/tests/data/sourcefile1_recurse.h b/reactos/tools/rbuild/tests/data/sourcefile1_recurse.h deleted file mode 100644 index 0ce390cf892..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile1_recurse.h +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include diff --git a/reactos/tools/rbuild/tests/data/sourcefile_include.c b/reactos/tools/rbuild/tests/data/sourcefile_include.c deleted file mode 100644 index 8ee9670f406..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile_include.c +++ /dev/null @@ -1,2 +0,0 @@ -# include -#include diff --git a/reactos/tools/rbuild/tests/data/sourcefile_include.h b/reactos/tools/rbuild/tests/data/sourcefile_include.h deleted file mode 100644 index 40a8c178f10..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile_include.h +++ /dev/null @@ -1 +0,0 @@ -/* empty */ diff --git a/reactos/tools/rbuild/tests/data/sourcefile_includenext.h b/reactos/tools/rbuild/tests/data/sourcefile_includenext.h deleted file mode 100644 index 0f4f8e730b5..00000000000 --- a/reactos/tools/rbuild/tests/data/sourcefile_includenext.h +++ /dev/null @@ -1 +0,0 @@ -#include_next diff --git a/reactos/tools/rbuild/tests/data/symbol.rbuild b/reactos/tools/rbuild/tests/data/symbol.rbuild deleted file mode 100644 index 7f08a286e6b..00000000000 --- a/reactos/tools/rbuild/tests/data/symbol.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - HeapAlloc@12 - LdrAccessResource@16 - - - diff --git a/reactos/tools/rbuild/tests/definetest.cpp b/reactos/tools/rbuild/tests/definetest.cpp deleted file mode 100644 index ca3976513f4..00000000000 --- a/reactos/tools/rbuild/tests/definetest.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void DefineTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/define.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - ARE_EQUAL(1, project.non_if_data.defines.size()); - Define& define1 = *project.non_if_data.defines[0]; - ARE_EQUAL("define1", define1.name); - ARE_EQUAL("value1", define1.value); - - ARE_EQUAL(1, project.modules.size()); - Module& module1 = *project.modules[0]; - - ARE_EQUAL(1, module1.non_if_data.defines.size()); - Define& define2 = *module1.non_if_data.defines[0]; - ARE_EQUAL("define2", define2.name); - ARE_EQUAL("value2", define2.value); -} diff --git a/reactos/tools/rbuild/tests/functiontest.cpp b/reactos/tools/rbuild/tests/functiontest.cpp deleted file mode 100644 index f7e0bcdd612..00000000000 --- a/reactos/tools/rbuild/tests/functiontest.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void FunctionTest::Run () -{ - string fixedupFilename = NormalizeFilename ( "." SSEP "dir1" SSEP "dir2" SSEP ".." SSEP "filename.txt" ); - ARE_EQUAL ( "dir1" SSEP "filename.txt", fixedupFilename ); - ARE_EQUAL ( "file.txt", GetFilename ( "file.txt" ) ); - ARE_EQUAL ( "file.txt", GetFilename ( "dir" SSEP "file.txt" ) ); -} diff --git a/reactos/tools/rbuild/tests/iftest.cpp b/reactos/tools/rbuild/tests/iftest.cpp deleted file mode 100644 index b71cd748303..00000000000 --- a/reactos/tools/rbuild/tests/iftest.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void -IfTest::TestProjectIf ( Project& project ) -{ - ARE_EQUAL ( 1, project.non_if_data.ifs.size () ); - If& if1 = *project.non_if_data.ifs[0]; - ARE_EQUAL ( "VAR1", if1.property ); - ARE_EQUAL ( "value1", if1.value ); - - ARE_EQUAL ( 1, if1.data.compilerFlags.size () ); - CompilerFlag& compilerFlag1 = *if1.data.compilerFlags[0]; - ARE_EQUAL( "compilerflag1", compilerFlag1.flag ); -} - -void -IfTest::TestModuleIf ( Project& project ) -{ - ARE_EQUAL ( 1, project.modules.size () ); - Module& module1 = *project.modules[0]; - - ARE_EQUAL ( 1, module1.non_if_data.ifs.size () ); - If& if1 = *module1.non_if_data.ifs[0]; - ARE_EQUAL ( "VAR2", if1.property ); - ARE_EQUAL ( "value2", if1.value ); - - ARE_EQUAL ( 1, if1.data.files.size () ); - File& file1 = *if1.data.files[0]; - ARE_EQUAL( SSEP "file1.c", file1.name ); - - ARE_EQUAL ( 1, module1.non_if_data.files.size () ); - File& file2 = *module1.non_if_data.files[0]; - ARE_EQUAL( SSEP "file2.c", file2.name ); - - ARE_EQUAL ( 1, if1.data.compilerFlags.size () ); - CompilerFlag& compilerFlag2 = *if1.data.compilerFlags[0]; - ARE_EQUAL( "compilerflag2", compilerFlag2.flag ); -} - -void -IfTest::Run () -{ - string projectFilename ( RBUILD_BASE "tests/data/if.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - - TestProjectIf ( project ); - TestModuleIf ( project ); -} diff --git a/reactos/tools/rbuild/tests/includetest.cpp b/reactos/tools/rbuild/tests/includetest.cpp deleted file mode 100644 index a9753c9f782..00000000000 --- a/reactos/tools/rbuild/tests/includetest.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void IncludeTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/include.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - ARE_EQUAL(1, project.non_if_data.includes.size()); - Include& include1 = *project.non_if_data.includes[0]; - ARE_EQUAL("include1", include1.directory); - - ARE_EQUAL(2, project.modules.size()); - Module& module1 = *project.modules[0]; - Module& module2 = *project.modules[1]; - - ARE_EQUAL(1, module1.non_if_data.includes.size()); - Include& include2 = *module1.non_if_data.includes[0]; - ARE_EQUAL("include2", include2.directory); - - ARE_EQUAL(1, module2.non_if_data.includes.size()); - Include& include3 = *module2.non_if_data.includes[0]; - ARE_EQUAL(FixSeparator("dir1/include3"), include3.directory); -} diff --git a/reactos/tools/rbuild/tests/invoketest.cpp b/reactos/tools/rbuild/tests/invoketest.cpp deleted file mode 100644 index 5732525ae43..00000000000 --- a/reactos/tools/rbuild/tests/invoketest.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void InvokeTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/invoke.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - ARE_EQUAL(1, project.modules.size()); - - Module& module1 = *project.modules[0]; - ARE_EQUAL(1, module1.invocations.size()); - - Invoke& invoke1 = *module1.invocations[0]; - ARE_EQUAL(1, invoke1.output.size()); - - InvokeFile& file1 = *invoke1.output[0]; - ARE_EQUAL(FixSeparator("dir1/file1.c"), file1.name); -} diff --git a/reactos/tools/rbuild/tests/linkerflagtest.cpp b/reactos/tools/rbuild/tests/linkerflagtest.cpp deleted file mode 100644 index 1045e79cbd9..00000000000 --- a/reactos/tools/rbuild/tests/linkerflagtest.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void LinkerFlagTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/linkerflag.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - ARE_EQUAL(1, project.linkerFlags.size()); - LinkerFlag& linkerFlag1 = *project.linkerFlags[0]; - ARE_EQUAL("-lgcc1", linkerFlag1.flag); - - ARE_EQUAL(1, project.modules.size()); - Module& module1 = *project.modules[0]; - - ARE_EQUAL(1, module1.linkerFlags.size()); - LinkerFlag& linkerFlag2 = *module1.linkerFlags[0]; - ARE_EQUAL("-lgcc2", linkerFlag2.flag); -} diff --git a/reactos/tools/rbuild/tests/moduletest.cpp b/reactos/tools/rbuild/tests/moduletest.cpp deleted file mode 100644 index 596739059cf..00000000000 --- a/reactos/tools/rbuild/tests/moduletest.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void ModuleTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/module.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - ARE_EQUAL(2, project.modules.size()); - - Module& module1 = *project.modules[0]; - IS_TRUE(module1.type == BuildTool); - - ARE_EQUAL(2, module1.non_if_data.files.size()); - ARE_EQUAL("dir1" SSEP "file1.c", module1.non_if_data.files[0]->name); - ARE_EQUAL("dir1" SSEP "file2.c", module1.non_if_data.files[1]->name); - - ARE_EQUAL(0, module1.non_if_data.libraries.size()); - - Module& module2 = *project.modules[1]; - IS_TRUE(module2.type == KernelModeDLL); - ARE_EQUAL("reactos", module2.installBase); - ARE_EQUAL("module2.ext", module2.installName); - - ARE_EQUAL(2, module2.non_if_data.files.size()); - ARE_EQUAL("dir2" SSEP "file3.c", module2.non_if_data.files[0]->name); - ARE_EQUAL("dir2" SSEP "file4.c", module2.non_if_data.files[1]->name); - - ARE_EQUAL(1, module2.non_if_data.libraries.size()); - Library& library1 = *module2.non_if_data.libraries[0]; - ARE_EQUAL("module1", library1.name); - - ARE_EQUAL(1, module2.dependencies.size()); - Dependency& module1dependency = *module2.dependencies[0]; - IS_NOT_NULL(module1dependency.dependencyModule); - ARE_EQUAL("module1", module1dependency.dependencyModule->name); -} diff --git a/reactos/tools/rbuild/tests/projecttest.cpp b/reactos/tools/rbuild/tests/projecttest.cpp deleted file mode 100644 index 17050a4d109..00000000000 --- a/reactos/tools/rbuild/tests/projecttest.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void ProjectTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/project.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - ARE_EQUAL(2, project.modules.size()); -} diff --git a/reactos/tools/rbuild/tests/sourcefiletest.cpp b/reactos/tools/rbuild/tests/sourcefiletest.cpp deleted file mode 100644 index 1fb43762ecf..00000000000 --- a/reactos/tools/rbuild/tests/sourcefiletest.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -bool -SourceFileTest::IsParentOf ( const SourceFile* parent, - const SourceFile* child ) -{ - size_t i; - for ( i = 0; i < child->parents.size (); i++ ) - { - if ( child->parents[i] != NULL ) - { - if ( child->parents[i] == parent ) - { - return true; - } - } - } - for ( i = 0; i < child->parents.size (); i++ ) - { - if ( child->parents[i] != NULL ) - { - if ( IsParentOf ( parent, - child->parents[i] ) ) - { - return true; - } - } - } - return false; -} - -void -SourceFileTest::IncludeTest () -{ - const string projectFilename = RBUILD_BASE "tests" SSEP "data" SSEP "automaticdependency_include.xml"; - Configuration configuration; - Project project ( configuration, projectFilename ); - AutomaticDependency automaticDependency ( project ); - automaticDependency.ParseFiles (); - ARE_EQUAL( 4, automaticDependency.sourcefile_map.size () ); - const SourceFile* include = automaticDependency.RetrieveFromCache ( RBUILD_BASE "tests" SSEP "data" SSEP "sourcefile_include.h" ); - IS_NOT_NULL( include ); - const SourceFile* includenext = automaticDependency.RetrieveFromCache ( RBUILD_BASE "tests" SSEP "data" SSEP "sourcefile1" SSEP "sourcefile_includenext.h" ); - IS_NOT_NULL( includenext ); -} - -void -SourceFileTest::FullParseTest () -{ - const string projectFilename = RBUILD_BASE "tests" SSEP "data" SSEP "automaticdependency.xml"; - Configuration configuration; - Project project ( configuration, projectFilename ); - AutomaticDependency automaticDependency ( project ); - automaticDependency.ParseFiles (); - ARE_EQUAL( 5, automaticDependency.sourcefile_map.size () ); - const SourceFile* header1 = automaticDependency.RetrieveFromCache ( RBUILD_BASE "tests" SSEP "data" SSEP "sourcefile1_header1.h" ); - IS_NOT_NULL( header1 ); - const SourceFile* recurse = automaticDependency.RetrieveFromCache ( RBUILD_BASE "tests" SSEP "data" SSEP "sourcefile1_recurse.h" ); - IS_NOT_NULL( recurse ); - IS_TRUE( IsParentOf ( header1, - recurse ) ); - IS_FALSE( IsParentOf ( recurse, - header1 ) ); - -} - -void -SourceFileTest::Run () -{ - IncludeTest (); - FullParseTest (); -} diff --git a/reactos/tools/rbuild/tests/symboltest.cpp b/reactos/tools/rbuild/tests/symboltest.cpp deleted file mode 100644 index b7620095340..00000000000 --- a/reactos/tools/rbuild/tests/symboltest.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "test.h" - -using std::string; - -void SymbolTest::Run() -{ - string projectFilename ( RBUILD_BASE "tests/data/symbol.xml" ); - Configuration configuration; - Project project ( configuration, projectFilename ); - - ARE_EQUAL ( 1, project.modules.size () ); - Module& module1 = *project.modules[0]; - - ARE_EQUAL ( 1, module1.stubbedComponents.size () ); - StubbedComponent& component1 = *module1.stubbedComponents[0]; - ARE_EQUAL ( "ntdll.dll", component1.name ); - - ARE_EQUAL ( 2, component1.symbols.size () ); - StubbedSymbol& symbol1 = *component1.symbols[0]; - ARE_EQUAL ( "HeapAlloc@12", symbol1.symbol ); - ARE_EQUAL ( "RtlAllocateHeap", symbol1.newname ); - - StubbedSymbol& symbol2 = *component1.symbols[1]; - ARE_EQUAL ( "LdrAccessResource@16", symbol2.symbol ); - ARE_EQUAL ( "LdrAccessResource", symbol2.newname ); -} diff --git a/reactos/tools/rbuild/testsupportcode.cpp b/reactos/tools/rbuild/testsupportcode.cpp deleted file mode 100644 index 73e61142386..00000000000 --- a/reactos/tools/rbuild/testsupportcode.cpp +++ /dev/null @@ -1,413 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include "pch.h" -#include - -#include "rbuild.h" - -using std::string; -using std::vector; - -static std::string -GetFilename ( const std::string& filename ) -{ - size_t index = filename.find_last_of ( cSep ); - if ( index == string::npos ) - return filename; - else - return filename.substr ( index + 1, filename.length () - index ); -} - -TestSupportCode::TestSupportCode ( const Project& project ) - : project ( project ) -{ -} - -TestSupportCode::~TestSupportCode () -{ -} - -bool -TestSupportCode::IsTestModule ( const Module& module ) -{ - return module.type == Test; -} - -void -TestSupportCode::GenerateTestSupportCode ( bool verbose ) -{ - for( std::map::const_iterator p = project.modules.begin(); p != project.modules.end(); ++ p ) - { - if ( IsTestModule ( *p->second ) ) - { - GenerateTestSupportCodeForModule ( *p->second, - verbose ); - } - } -} - -void -TestSupportCode::GenerateTestSupportCodeForModule ( Module& module, - bool verbose ) -{ - if ( verbose ) - { - printf ( "\nGenerating test support code for %s", - module.name.c_str () ); - } - - WriteHooksFile ( module ); - WriteStubsFile ( module ); - WriteStartupFile ( module ); -} - -string -TestSupportCode::GetHooksFilename ( Module& module ) -{ - return NormalizeFilename ( Environment::GetIntermediatePath () + sSep + module.output->relative_path + sSep + "_hooks.c" ); -} - -char* -TestSupportCode::WriteStubbedSymbolToHooksFile ( char* buffer, - const StubbedComponent& component, - const StubbedSymbol& symbol ) -{ - buffer = buffer + sprintf ( buffer, - " {\"%s\", \"%s\", NULL, NULL, NULL},\n", - component.name.c_str (), - symbol.newname.c_str () ); - return buffer; -} - -char* -TestSupportCode::WriteStubbedComponentToHooksFile ( char* buffer, - const StubbedComponent& component ) -{ - for ( size_t i = 0; i < component.symbols.size () ; i++ ) - buffer = WriteStubbedSymbolToHooksFile ( buffer, - component, - *component.symbols[i] ); - return buffer; -} - -void -TestSupportCode::WriteHooksFile ( Module& module ) -{ - char* buf; - char* s; - - buf = (char*) malloc ( 50*1024 ); - if ( buf == NULL ) - throw OutOfMemoryException (); - - s = buf; - s = s + sprintf ( s, "/* This file is automatically generated. */\n" ); - s = s + sprintf ( s, "#include \n" ); - s = s + sprintf ( s, "#include \"regtests.h\"\n" ); - s = s + sprintf ( s, "\n" ); - s = s + sprintf ( s, "_API_DESCRIPTION ExternalDependencies[] =\n" ); - s = s + sprintf ( s, "{\n" ); - - int symbolCount = 0; - for ( size_t i = 0; i < module.stubbedComponents.size () ; i++ ) - { - s = WriteStubbedComponentToHooksFile ( s, - *module.stubbedComponents[i] ); - symbolCount += module.stubbedComponents[i]->symbols.size (); - } - - s = s + sprintf ( s, "};\n" ); - s = s + sprintf ( s, "\n" ); - s = s + sprintf ( s, "#define ExternalDependencyCount %d\n", symbolCount ); - s = s + sprintf ( s, "ULONG MaxExternalDependency = ExternalDependencyCount - 1;\n" ); - s = s + sprintf ( s, "\n" ); - - FileSupportCode::WriteIfChanged ( buf, GetHooksFilename ( module ) ); - - free ( buf ); -} - -string -TestSupportCode::GetStubsFilename ( Module& module ) -{ - return NormalizeFilename ( Environment::GetIntermediatePath () + sSep + module.output->relative_path + sSep + "_stubs.S" ); -} - -string -GetLinkerSymbol ( const StubbedSymbol& symbol ) -{ - if (symbol.symbol[0] == '@') - return symbol.symbol; - else - return "_" + symbol.symbol; -} - -string -GetLinkerImportSymbol ( const StubbedSymbol& symbol ) -{ - if (symbol.symbol[0] == '@') - return "__imp_" + symbol.symbol; - else - return "__imp__" + symbol.symbol; -} - -string -GetIndirectCallTargetSymbol ( const StubbedSymbol& symbol ) -{ - return GetLinkerSymbol ( symbol ) + "_"; -} - -char* -TestSupportCode::WriteStubbedSymbolToStubsFile ( char* buffer, - const StubbedComponent& component, - const StubbedSymbol& symbol, - int stubIndex ) -{ - string linkerSymbol = GetLinkerSymbol ( symbol ); - string linkerImportSymbol = GetLinkerImportSymbol ( symbol ); - string indirectCallTargetSymbol = GetIndirectCallTargetSymbol ( symbol ); - buffer = buffer + sprintf ( buffer, - ".globl %s\n", - linkerSymbol.c_str () ); - buffer = buffer + sprintf ( buffer, - ".globl %s\n", - linkerImportSymbol.c_str () ); - buffer = buffer + sprintf ( buffer, - "%s:\n", - linkerSymbol.c_str () ); - buffer = buffer + sprintf ( buffer, - "%s:\n", - linkerImportSymbol.c_str () ); - buffer = buffer + sprintf ( buffer, - " .long %s\n", - indirectCallTargetSymbol.c_str () ); - buffer = buffer + sprintf ( buffer, - "%s:\n", - indirectCallTargetSymbol.c_str () ); - buffer = buffer + sprintf ( buffer, - " pushl $%d\n", - stubIndex ); - buffer = buffer + sprintf ( buffer, - " jmp passthrough\n" ); - buffer = buffer + sprintf ( buffer, "\n" ); - return buffer; -} - -char* -TestSupportCode::WriteStubbedComponentToStubsFile ( char* buffer, - const StubbedComponent& component, - int* stubIndex ) -{ - for ( size_t i = 0; i < component.symbols.size () ; i++ ) - buffer = WriteStubbedSymbolToStubsFile ( buffer, - component, - *component.symbols[i], - (*stubIndex)++ ); - return buffer; -} - -void -TestSupportCode::WriteStubsFile ( Module& module ) -{ - char* buf; - char* s; - - buf = (char*) malloc ( 512*1024 ); - if ( buf == NULL ) - throw OutOfMemoryException (); - - s = buf; - s = s + sprintf ( s, "/* This file is automatically generated. */\n" ); - s = s + sprintf ( s, "passthrough:\n" ); - s = s + sprintf ( s, " call _FrameworkGetHook@4\n" ); - s = s + sprintf ( s, " test %%eax, %%eax\n" ); - s = s + sprintf ( s, " je .return\n" ); - s = s + sprintf ( s, " jmp *%%eax\n" ); - s = s + sprintf ( s, ".return:\n" ); - s = s + sprintf ( s, " /* This will most likely corrupt the stack */\n" ); - s = s + sprintf ( s, " ret\n" ); - s = s + sprintf ( s, "\n" ); - - int stubIndex = 0; - for ( size_t i = 0; i < module.stubbedComponents.size () ; i++ ) - { - s = WriteStubbedComponentToStubsFile ( s, - *module.stubbedComponents[i], - &stubIndex ); - } - - FileSupportCode::WriteIfChanged ( buf, GetStubsFilename ( module ) ); - - free ( buf ); -} - -string -TestSupportCode::GetStartupFilename ( Module& module ) -{ - return NormalizeFilename ( Environment::GetIntermediatePath () + sSep + module.output->relative_path + sSep + "_startup.c" ); -} - -bool -TestSupportCode::IsUnknownCharacter ( char ch ) -{ - if ( ch >= 'a' && ch <= 'z' ) - return false; - if ( ch >= 'A' && ch <= 'Z' ) - return false; - if ( ch >= '0' && ch <= '9' ) - return false; - return true; -} - -string -TestSupportCode::GetTestDispatcherName ( string filename ) -{ - string filenamePart = ReplaceExtension ( GetFilename ( filename ), "" ); - if ( filenamePart.length () > 0 ) - filenamePart[0] = toupper ( filenamePart[0] ); - for ( size_t i = 1; i < filenamePart.length (); i++ ) - { - if ( IsUnknownCharacter ( filenamePart[i] ) ) - filenamePart[i] = '_'; - else - filenamePart[i] = tolower ( filenamePart[i] ); - } - return filenamePart + "Test"; -} - -bool -TestSupportCode::IsTestFile ( string& filename ) const -{ - if ( stricmp ( GetFilename ( filename ).c_str (), "setup.c" ) == 0 ) - return false; - return true; -} - -void -TestSupportCode::GetSourceFilenames ( string_list& list, - Module& module ) const -{ - size_t i; - - const vector& compilationUnits = module.non_if_data.compilationUnits; - for ( i = 0; i < compilationUnits.size (); i++ ) - { - const FileLocation& sourceFileLocation = compilationUnits[i]->GetFilename (); - string filename = sourceFileLocation.relative_path + sSep + sourceFileLocation.name; - if ( !compilationUnits[i]->IsGeneratedFile () && IsTestFile ( filename ) ) - list.push_back ( filename ); - } -} - -char* -TestSupportCode::WriteTestDispatcherPrototypesToStartupFile ( char* buffer, - Module& module ) -{ - string_list files; - GetSourceFilenames ( files, - module ); - for ( size_t i = 0; i < files.size (); i++ ) - { - buffer = buffer + sprintf ( buffer, - "extern void %s(int Command, char *Buffer);\n", - GetTestDispatcherName ( files[i] ).c_str () ); - } - buffer = buffer + sprintf ( buffer, "\n" ); - return buffer; -} - -char* -TestSupportCode::WriteRegisterTestsFunctionToStartupFile ( char* buffer, - Module& module ) -{ - buffer = buffer + sprintf ( buffer, - "extern void AddTest(TestRoutine Routine);\n" ); - buffer = buffer + sprintf ( buffer, - "\n" ); - - buffer = buffer + sprintf ( buffer, - "void\n" ); - buffer = buffer + sprintf ( buffer, - "RegisterTests()\n" ); - buffer = buffer + sprintf ( buffer, - "{\n" ); - - string_list files; - GetSourceFilenames ( files, - module ); - for ( size_t i = 0; i < files.size (); i++ ) - { - buffer = buffer + sprintf ( buffer, - "AddTest((TestRoutine)%s);\n", - GetTestDispatcherName ( files[i]).c_str () ); - } - buffer = buffer + sprintf ( buffer, - "}\n" ); - buffer = buffer + sprintf ( buffer, "\n" ); - return buffer; -} - -void -TestSupportCode::WriteStartupFile ( Module& module ) -{ - char* buf; - char* s; - - buf = (char*) malloc ( 50*1024 ); - if ( buf == NULL ) - throw OutOfMemoryException (); - - s = buf; - s = s + sprintf ( s, "/* This file is automatically generated. */\n" ); - s = s + sprintf ( s, "\n" ); - s = s + sprintf ( s, "#include \n" ); - s = s + sprintf ( s, "#include \"regtests.h\"\n" ); - s = s + sprintf ( s, "\n" ); - s = WriteTestDispatcherPrototypesToStartupFile ( s, - module ); - s = WriteRegisterTestsFunctionToStartupFile ( s, - module ); - s = s + sprintf ( s, "\n" ); - s = s + sprintf ( s, "void\n" ); - s = s + sprintf ( s, "ConsoleWrite(char *Buffer)\n" ); - s = s + sprintf ( s, "{\n" ); - s = s + sprintf ( s, " printf(Buffer);\n" ); - s = s + sprintf ( s, "}\n" ); - s = s + sprintf ( s, "\n" ); - s = s + sprintf ( s, "int\n" ); - s = s + sprintf ( s, "STDCALL\n" ); - s = s + sprintf ( s, "WinMain(HINSTANCE hInstance,\n" ); - s = s + sprintf ( s, " HINSTANCE hPrevInstance,\n" ); - s = s + sprintf ( s, " LPSTR lpszCmdParam,\n" ); - s = s + sprintf ( s, " int nCmdShow)\n" ); - s = s + sprintf ( s, "{\n" ); - s = s + sprintf ( s, " _SetPriorityClass(_GetCurrentProcess(), HIGH_PRIORITY_CLASS);\n" ); - s = s + sprintf ( s, " _SetThreadPriority(_GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);\n" ); - s = s + sprintf ( s, " InitializeTests();\n" ); - s = s + sprintf ( s, " RegisterTests();\n" ); - s = s + sprintf ( s, " SetupOnce();\n" ); - s = s + sprintf ( s, " PerformTests(ConsoleWrite, NULL);\n" ); - s = s + sprintf ( s, " _ExitProcess(0);\n" ); - s = s + sprintf ( s, " return 0;\n" ); - s = s + sprintf ( s, "}\n" ); - s = s + sprintf ( s, "\n" ); - - FileSupportCode::WriteIfChanged ( buf, GetStartupFilename ( module ) ); - - free ( buf ); -} diff --git a/reactos/tools/rbuild/xmlnode.cpp b/reactos/tools/rbuild/xmlnode.cpp deleted file mode 100644 index 808610c498c..00000000000 --- a/reactos/tools/rbuild/xmlnode.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2007 Hervé Poussineau - * - * 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. - */ -#include "pch.h" - -#include "rbuild.h" - -using std::string; - -XmlNode::XmlNode ( const Project& project_, - const XMLElement& node ) - : project(project_), - node(node) -{ -} - -XmlNode::~XmlNode () -{ -} - -void -XmlNode::ProcessXML () -{ -} diff --git a/reactos/tools/regtests2xml/regtests2xml.c b/reactos/tools/regtests2xml/regtests2xml.c deleted file mode 100644 index 5759b50ea1d..00000000000 --- a/reactos/tools/regtests2xml/regtests2xml.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Convert debug output from running the regression tests - * on ReactOS to an xml document. - * Casper S. Hornstrup - */ - -#include -#include -#include -#include -#include - -#ifdef WIN32 -#include -#include -#else -#include -#include -#include -#include -#include -#endif -#include -#ifndef WIN32 -#ifndef MAX_PATH -#define MAX_PATH 260 -#endif -#define DIR_SEPARATOR_CHAR '/' -#define DIR_SEPARATOR_STRING "/" -#else -#define DIR_SEPARATOR_CHAR '\\' -#define DIR_SEPARATOR_STRING "\\" -#endif - -typedef struct _TEST_RESULT_INFO -{ - struct _TEST_RESULT_INFO *next; - char testname[100]; - char result[200]; - int succeeded; /* 0 = failed, 1 = succeeded */ -} TEST_RESULT_INFO, *PTEST_RESULT_INFO; - - -static FILE *out; -static FILE *file_handle = NULL; -static char *file_buffer = NULL; -static unsigned int file_size = 0; -static int file_pointer = 0; -static PTEST_RESULT_INFO test_result_info_list = NULL; - - -static char* -convert_path(char* origpath) -{ - char* newpath; - int i; - - newpath = strdup(origpath); - - i = 0; - while (newpath[i] != 0) - { -#ifndef WIN32 - if (newpath[i] == '\\') - { - newpath[i] = '/'; - } -#else -#ifdef WIN32 - if (newpath[i] == '/') - { - newpath[i] = '\\'; - } -#endif -#endif - i++; - } - return(newpath); -} - -static void -write_line(char *line) -{ - int n_out; - char buf[200]; - - memset(buf, 0, sizeof(buf)); - strcpy(buf, line); - /* Terminate the line */ - buf[strlen(buf)] = '\r'; - buf[strlen(buf)] = '\n'; - - n_out = fwrite(&buf[0], 1, strlen(buf), out); -} - - -static void -read_file(char *filename) -{ - file_handle = fopen(filename, "rb"); - if (file_handle == NULL) - { - printf("Can't open %s\n", filename); - exit(1); - } - - // Get the size of the file - fseek(file_handle, 0, SEEK_END); - file_size = ftell(file_handle); - - // Load it all into memory - file_buffer = malloc(file_size); - if (file_buffer == NULL) - { - fclose(file_handle); - printf("Out of memory\n"); - exit(1); - } - fseek(file_handle, 0, SEEK_SET); - if (file_size > 0) - { - if (fread (file_buffer, 1, file_size, file_handle) < 1) - { - fclose(file_handle); - printf("Read error in file %s\n", filename); - exit(1); - } - } - - file_pointer = 0; -} - -static void -close_file() -{ - free(file_buffer); - file_buffer = NULL; - fclose(file_handle); - file_handle = NULL; - file_pointer = 0; -} - -static int -is_whitespace(char ch) -{ - if (ch == ' ') - { - return 1; - } - if (ch == '\t') - { - return 1; - } - return 0; -} - -static int -is_eol_char(char ch) -{ - if (ch == '\r') - { - return 1; - } - if (ch == '\n') - { - return 1; - } - return 0; -} - -static void -skip_line() -{ - while ((file_pointer < file_size) && (!is_eol_char(file_buffer[file_pointer]))) - { - file_pointer++; - } - if ((file_pointer < file_size) && (is_eol_char(file_buffer[file_pointer]))) - { - file_pointer++; - if ((file_pointer < file_size) && (file_buffer[file_pointer] == '\n')) - { - file_pointer++; - } - } -} - -static void -skip_whitespace() -{ - while ((file_pointer < file_size) && !is_eol_char(file_buffer[file_pointer]) - && is_whitespace(file_buffer[file_pointer])) - { - file_pointer++; - } -} - -static int -skip_to_next_test() -{ - static char test_marker[] = "ROSREGTEST:"; - int found_test = 0; - - while ((file_pointer < file_size) && (!found_test)) - { - skip_whitespace(); - found_test = 1; - int i = 0; - while (1) - { - if (i >= strlen(test_marker)) - { - break; - } - if (is_eol_char(file_buffer[file_pointer])) - { - found_test = 0; - break; - } - if (file_buffer[file_pointer] != test_marker[i]) - { - found_test = 0; - break; - } - file_pointer++; - i++; - } - if (!found_test) - { - skip_line(); - } - } - return found_test; -} - -static int -read_until(char ch, char* buf) -{ - int start = file_pointer; - while ((file_pointer < file_size)) - { - if (file_buffer[file_pointer] == ch) - { - strncpy(buf, &file_buffer[start], file_pointer - start); - buf[file_pointer - start] = 0; - return 1; - } - file_pointer++; - } - return 0; -} - -static int -read_until_end(char* buf) -{ - int start = file_pointer; - while ((file_pointer < file_size)) - { - if (is_eol_char(file_buffer[file_pointer])) - { - strncpy(buf, &file_buffer[start], file_pointer - start); - buf[file_pointer - start] = 0; - skip_line(); - return 1; - } - file_pointer++; - } - return 0; -} - -static void -parse_file(char *filename) -{ - PTEST_RESULT_INFO test_result_info; - - read_file(filename); - - do - { - if (!skip_to_next_test()) - { - break; - } - - /* - * FORMAT: - * [ROSREGTEST:][space][|][][|][space][Status:][space][] - */ - - test_result_info = malloc(sizeof(TEST_RESULT_INFO)); - if (test_result_info == NULL) - { - printf("Out of memory\n"); - exit(1); - } - - /* Skip whitespaces */ - skip_whitespace(); - - /* [|] */ - file_pointer++; - - /* */ - read_until(')', test_result_info->testname); - - /* [|] */ - file_pointer++; - - /* [space] */ - file_pointer++; - - /* Status: */ - file_pointer += 7; - - /* [space] */ - file_pointer++; - - /* */ - read_until_end(test_result_info->result); - - if (strncmp(test_result_info->result, "Success", 7) == 0) - { - test_result_info->succeeded = 1; - } - else - { - test_result_info->succeeded = 0; - } - - test_result_info->next = test_result_info_list; - test_result_info_list = test_result_info; - } while (1); - - close_file(); -} - -static void -generate_xml() -{ - PTEST_RESULT_INFO test_result_info; - char buf[200]; - int success_rate; - int succeeded_total; - int failed_total; - - succeeded_total = 0; - failed_total = 0; - - test_result_info = test_result_info_list; - while (test_result_info != NULL) - { - if (test_result_info->succeeded) - { - succeeded_total++; - } - else - { - failed_total++; - } - test_result_info = test_result_info->next; - } - - if (succeeded_total + failed_total > 0) - { - success_rate = ((succeeded_total) * 100) / (succeeded_total + failed_total); - } - else - { - success_rate = 100; - } - - write_line(""); - write_line(""); - - sprintf(buf, "", - success_rate, succeeded_total, failed_total); - write_line(buf); - - if (test_result_info_list != NULL) - { - test_result_info = test_result_info_list; - while (test_result_info != NULL) - { - sprintf(buf, "", - test_result_info->testname, - test_result_info->succeeded == 1 ? "true" : "false", - test_result_info->result); - write_line(buf); - write_line(""); - test_result_info = test_result_info->next; - } - } - - write_line(""); -} - -static char HELP[] = - "REGTESTS2XML input-filename output-filename\n" - "\n" - " input-filename File containing output from running regression tests\n" - " output-filename File to create\n"; - -int main(int argc, char **argv) -{ - char *input_file; - char *output_file; - - if (argc < 3) - { - puts(HELP); - return 1; - } - - input_file = convert_path(argv[1]); - if (input_file[0] == 0) - { - printf("Missing input-filename\n"); - return 1; - } - - output_file = convert_path(argv[2]); - if (output_file[0] == 0) - { - printf("Missing output-filename\n"); - return 1; - } - - out = fopen(output_file, "wb"); - if (out == NULL) - { - printf("Cannot open output file"); - return 1; - } - - parse_file(input_file); - - generate_xml(); - - fclose(out); - - return 0; -} diff --git a/reactos/tools/rgenstat/llmosrt.c b/reactos/tools/rgenstat/llmosrt.c deleted file mode 100755 index ef2e1794b79..00000000000 --- a/reactos/tools/rgenstat/llmosrt.c +++ /dev/null @@ -1,106 +0,0 @@ -/* $Id$ */ -/* A Linked-List Memory Sort - by Philip J. Erdelsky - pje@acm.org - http://www.alumni.caltech.edu/~pje/ -*/ - -/* According to his website, this file was released into the public domain by Phillip J. Erdelsky */ - - -#include - -void *sort_linked_list(void *p, unsigned index, int (*compare)(void *, void *)) -{ - unsigned base; - unsigned long block_size; - - struct record - { - struct record *next[1]; - /* other members not directly accessed by this function */ - }; - - struct tape - { - struct record *first, *last; - unsigned long count; - } tape[4]; - - /* Distribute the records alternately to tape[0] and tape[1]. */ - - tape[0].count = tape[1].count = 0L; - tape[0].first = NULL; - base = 0; - while (p != NULL) - { - struct record *next = ((struct record *)p)->next[index]; - ((struct record *)p)->next[index] = tape[base].first; - tape[base].first = ((struct record *)p); - tape[base].count++; - p = next; - base ^= 1; - } - - /* If the list is empty or contains only a single record, then */ - /* tape[1].count == 0L and this part is vacuous. */ - - for (base = 0, block_size = 1L; tape[base+1].count != 0L; - base ^= 2, block_size <<= 1) - { - int dest; - struct tape *tape0, *tape1; - tape0 = tape + base; - tape1 = tape + base + 1; - dest = base ^ 2; - tape[dest].count = tape[dest+1].count = 0; - for (; tape0->count != 0; dest ^= 1) - { - unsigned long n0, n1; - struct tape *output_tape = tape + dest; - n0 = n1 = block_size; - while (1) - { - struct record *chosen_record; - struct tape *chosen_tape; - if (n0 == 0 || tape0->count == 0) - { - if (n1 == 0 || tape1->count == 0) - break; - chosen_tape = tape1; - n1--; - } - else if (n1 == 0 || tape1->count == 0) - { - chosen_tape = tape0; - n0--; - } - else if ((*compare)(tape0->first, tape1->first) > 0) - { - chosen_tape = tape1; - n1--; - } - else - { - chosen_tape = tape0; - n0--; - } - chosen_tape->count--; - chosen_record = chosen_tape->first; - chosen_tape->first = chosen_record->next[index]; - if (output_tape->count == 0) - output_tape->first = chosen_record; - else - output_tape->last->next[index] = chosen_record; - output_tape->last = chosen_record; - output_tape->count++; - } - } - } - - if (tape[base].count > 1L) - tape[base].last->next[index] = NULL; - return tape[base].first; -} - -/* EOF */ diff --git a/reactos/tools/rgenstat/module_list.txt b/reactos/tools/rgenstat/module_list.txt deleted file mode 100644 index 983d5cab726..00000000000 --- a/reactos/tools/rgenstat/module_list.txt +++ /dev/null @@ -1,136 +0,0 @@ -clb base\applications\regedit\clb -notifyhook base\shell\explorer\notifyhook -freetype dll\3rdparty\freetype -mesa32 dll\3rdparty\mesa32 -access dll\cpl\access -appwiz dll\cpl\appwiz -desk dll\cpl\desk -hdwwiz dll\cpl\hdwwiz -intl dll\cpl\intl -intl_new dll\cpl\intl_new -main dll\cpl\main -mmsys dll\cpl\mmsys -ncpa dll\cpl\ncpa -powercfg dll\cpl\powercfg -sysdm dll\cpl\sysdm -timedate dll\cpl\timedate -d3d8thk dll\directx\d3d8thk -devenum dll\directx\devenum -ddraw dll\directx\ddraw -dinput dll\directx\dinput -dinput8 dll\directx\dinput8 -dplay dll\directx\dplay -dplayx dll\directx\dplayx -dsound dll\directx\dsound -dxdiagn dll\directx\dxdiagn -kbdda dll\keyboard\kbdda -kbddv dll\keyboard\kbddv -kbdes dll\keyboard\kbdes -kbdfr dll\keyboard\kbdfr -kbdgr dll\keyboard\kbdgr -kbdhe dll\keyboard\kbdhe -kbdheb dll\keyboard\kbdheb -kbdhu dll\keyboard\kbdhu -kbdru dll\keyboard\kbdru -kbdse dll\keyboard\kbdse -kbdsg dll\keyboard\kbdsg -kbdsk dll\keyboard\kbdsk -kbduk dll\keyboard\kbduk -kbdus dll\keyboard\kbdus -kbdbe dll\keyboard\kbdbe -kbdur dll\keyboard\kbdur -kbdpo dll\keyboard\kbdpo -ntdll dll\ntdll -acledit dll\win32\acledit -aclui dll\win32\aclui -advapi32 dll\win32\advapi32 -advpack dll\win32\advpack -authz dll\win32\authz -avifil32 dll\win32\avifil32 -cabinet dll\win32\cabinet -cards dll\win32\cards -cfgmgr32 dll\win32\cfgmgr32 -console dll\win32\console -comctl32 dll\win32\comctl32 -comdlg32 dll\win32\comdlg32 -crtdll dll\win32\crtdll -crypt32 dll\win32\crypt32 -cryptdll dll\win32\cryptdll -dbghelp dll\win32\dbghelp -devmgr dll\win32\devmgr -dhcpcsvc dll\win32\dhcpcsvc -dnsapi dll\win32\dnsapi -fmifs dll\win32\fmifs -gdi32 dll\win32\gdi32 -gdiplus dll\win32\gdiplus -glu32 dll\win32\glu32 -hid dll\win32\hid -icmp dll\win32\icmp -imagehlp dll\win32\imagehlp -imm32 dll\win32\imm32 -iphlpapi dll\win32\iphlpapi -kernel32 dll\win32\kernel32 -lsasrv dll\win32\lsasrv -lz32 dll\win32\lz32 -mapi32 dll\win32\mapi32 -mmdrv dll\win32\mmdrv -mpr dll\win32\mpr -msacm32 dll\win32\msacm -msafd dll\win32\msafd -msgina dll\win32\msgina -msi dll\win32\msi -msimg32 dll\win32\msimg32 -msvcrt dll\win32\msvcrt -msvcrt20 dll\win32\msvcrt20 -msvfw32 dll\win32\msvfw32 -mswsock dll\win32\mswsock -netapi32 dll\win32\netapi32 -netcfgx dll\win32\netcfgx -newdev dll\win32\newdev -ntmarta dll\win32\ntmarta -objsel dll\win32\objsel -ole32 dll\win32\ole32 -oleacc dll\win32\oleacc -oleaut32 dll\win32\oleaut32 -oledlg dll\win32\oledlg -olepro32 dll\win32\olepro32 -opengl32 dll\win32\opengl32 -powrprof dll\win32\powrprof -psapi dll\win32\psapi -riched20 dll\win32\riched20 -riched32 dll\win32\riched32 -rpcrt4 dll\win32\rpcrt4 -samlib dll\win32\samlib -samsrv dll\win32\samsrv -secur32 dll\win32\secur32 -security dll\win32\security -serialui dll\win32\serialui -setupapi dll\win32\setupapi -shdocvw dll\win32\shdocvw -shell32 dll\win32\shell32 -slayer dll\win32\shellext\slayer -shfolder dll\win32\shfolder -shlwapi dll\win32\shlwapi -smdll dll\win32\smdll -snmpapi dll\win32\snmpapi -syssetup dll\win32\syssetup -twain_32 dll\win32\twain_32 -urlmon dll\win32\urlmon -user32 dll\win32\user32 -userenv dll\win32\userenv -uxtheme dll\win32\uxtheme -vdmdbg dll\win32\vdmdbg -version dll\win32\version -wininet dll\win32\wininet -midimap dll\win32\winmm\midimap -wavemap dll\win32\winmm\wavemap -winmm dll\win32\winmm -winspool dll\win32\winspool -wintrust dll\win32\wintrust -ws2_32 dll\win32\ws2_32 -ws2help dll\win32\ws2help -wshirda dll\win32\wshirda -wsock32 dll\win32\wsock32 -wshtcpip drivers\network\wshtcpip -framebuf drivers\video\displays\framebuf -vgaddi drivers\video\displays\vga diff --git a/reactos/tools/rgenstat/rgenstat.c b/reactos/tools/rgenstat/rgenstat.c deleted file mode 100755 index 336a0b7147c..00000000000 --- a/reactos/tools/rgenstat/rgenstat.c +++ /dev/null @@ -1,908 +0,0 @@ -/* - * Generate a file with API status information from a list - * of files in a directory. - * Casper S. Hornstrup - */ - -#include -#include -#include -#include -#include - -#ifdef WIN32 -#include -#include -#include -int __cdecl strcasecmp (const char * __sz1, const char * __sz2) - {return _stricmp (__sz1, __sz2);} -#else -#if !defined(__FreeBSD__) && !defined(__APPLE__) -#include -#endif -#include -#include -#include -#include -#endif -#include -#ifndef WIN32 -#ifndef MAX_PATH -#define MAX_PATH 260 -#endif -#define DIR_SEPARATOR_CHAR '/' -#define DIR_SEPARATOR_STRING "/" -#else -#define DIR_SEPARATOR_CHAR '\\' -#define DIR_SEPARATOR_STRING "\\" -#endif - -#define TAG_UNKNOWN -1 -#define TAG_IMPLEMENTED 0 -#define TAG_UNIMPLEMENTED 1 - -typedef struct _API_INFO -{ - struct _API_INFO *next; - int tag_id; - char name[100]; - char filename[MAX_PATH]; -} API_INFO, *PAPI_INFO; - - -PAPI_INFO sort_linked_list(PAPI_INFO, - unsigned, int (*)(PAPI_INFO, PAPI_INFO)); - - -static FILE *in; -static FILE *out; -static FILE *file_handle = NULL; -static char *file_buffer = NULL; -static unsigned int file_size = 0; -static int file_pointer = 0; -static char tagname[200]; -static PAPI_INFO api_info_list = NULL; - - -static char* -convert_path(char* origpath) -{ - char* newpath; - int i; - - newpath = strdup(origpath); - - i = 0; - while (newpath[i] != 0) - { -#ifndef WIN32 - if (newpath[i] == '\\') - { - newpath[i] = '/'; - } -#else -#ifdef WIN32 - if (newpath[i] == '/') - { - newpath[i] = '\\'; - } -#endif -#endif - i++; - } - return(newpath); -} - -static char* -path_to_url(char* path) -{ - int i; - - i = 0; - while (path[i] != 0) - { - if (path[i] == '\\') - { - path[i] = '/'; - } - i++; - } - return(path); -} - -static void -write_line(char *line) -{ - int n_out; - char buf[200]; - - memset(buf, 0, sizeof(buf)); - strcpy(buf, line); - /* Terminate the line */ - buf[strlen(buf)] = '\r'; - buf[strlen(buf)] = '\n'; - - n_out = fwrite(&buf[0], 1, strlen(buf), out); -} - - -static void -read_file(char *filename) -{ - file_handle = fopen(filename, "rb"); - if (file_handle == NULL) - { - printf("Can't open %s\n", filename); - exit(1); - } - - // Get the size of the file - fseek(file_handle, 0, SEEK_END); - file_size = ftell(file_handle); - - // Load it all into memory - file_buffer = malloc(file_size); - if (file_buffer == NULL) - { - fclose(file_handle); - printf("Out of memory\n"); - exit(1); - } - fseek(file_handle, 0, SEEK_SET); - if (file_size > 0) - { - if (fread (file_buffer, 1, file_size, file_handle) < 1) - { - fclose(file_handle); - printf("Read error in file %s\n", filename); - exit(1); - } - } - - file_pointer = 0; -} - -static void -close_file() -{ - free(file_buffer); - file_buffer = NULL; - fclose(file_handle); - file_handle = NULL; - file_pointer = 0; -} - -static int -is_whitespace(char ch) -{ - if (ch == ' ') - { - return 1; - } - if (ch == '\t') - { - return 1; - } - return 0; -} - -static int -is_eol_char(char ch) -{ - if (ch == '\r') - { - return 1; - } - if (ch == '\n') - { - return 1; - } - return 0; -} - -static int -is_end_of_tag(char ch) -{ - if ((ch >= 'a') && (ch <= 'z')) - { - return 0; - } - if ((ch >= 'A') && (ch <= 'Z')) - { - return 0; - } - if ((ch >= '0') && (ch <= '9')) - { - return 0; - } - if (ch == '_') - { - return 0; - } - return 1; -} - -static int -is_end_of_name(char ch) -{ - /* Currently the same as is_end_of_tag() */ - return is_end_of_tag(ch); -} - -static int -is_valid_file(char *filename) -{ - char ext[MAX_PATH]; - int i; - - i = strlen(filename); - while (i > 0 && filename[i] != '.') - { - i--; - } - if (i > 0) - { - memset(ext, 0, sizeof(ext)); - strncpy(&ext[0], &filename[i], strlen(&filename[i])); - - if ((strncmp(ext, ".c", 2) == 0) || (strncmp(ext, ".C", 2) == 0)) - { - return 1; - } - } - return 0; -} - -static int -get_tag_id(char *tag) -{ - if (strcasecmp(tag, "implemented") == 0) - { - return TAG_IMPLEMENTED; - } - if (strcasecmp(tag, "unimplemented") == 0) - { - return TAG_UNIMPLEMENTED; - } - return TAG_UNKNOWN; -} - -static int -skip_to_next_tag() -{ - unsigned int start; - int end_of_tag; - int found_tag = 0; - int tag_id; - int len; - - tagname[0] = 0; - while ((file_pointer < file_size) && (!found_tag)) - { - if (file_buffer[file_pointer] == '@') - { - file_pointer++; - start = file_pointer; - end_of_tag = 0; - while ((file_pointer < file_size) && (!end_of_tag)) - { - end_of_tag = is_end_of_tag(file_buffer[file_pointer]); - file_pointer++; - } - len = file_pointer > start ? file_pointer - start - 1 : 0; - strncpy(tagname, &file_buffer[start], len); - tagname[len] = 0; - - tag_id = get_tag_id(tagname); - if (tag_id != TAG_UNKNOWN) - { - return tag_id; - } - } - file_pointer++; - } - - return TAG_UNKNOWN; -} - -static void -skip_line() -{ - while ((file_pointer < file_size) && (!is_eol_char(file_buffer[file_pointer]))) - { - file_pointer++; - } - if ((file_pointer < file_size) && (file_buffer[file_pointer] == '\n')) - { - file_pointer++; - } -} - -static void -skip_comments() -{ - while ((file_pointer < file_size)) - { - if (file_buffer[file_pointer] == '*') - { - if ((file_pointer + 1 < file_size)) - { - if (file_buffer[file_pointer + 1] == '/') - { - skip_line(); - return; - } - } - } - file_pointer++; - } -} - -static int -get_previous_identifier(unsigned int end, char *name) -{ - unsigned int my_file_pointer = end; - int len; - - name[0] = 0; - - while ((my_file_pointer > 0) && (is_whitespace(file_buffer[my_file_pointer]) - || is_eol_char(file_buffer[my_file_pointer]))) - { - my_file_pointer--; - } - - /* Skip any comments between function name and it's parameters */ - if ((my_file_pointer > 0) && (file_buffer[my_file_pointer] == '/')) - { - if ((my_file_pointer > 0) && (file_buffer[my_file_pointer - 1] == '*')) - { - my_file_pointer--; - while ((my_file_pointer > 0) && !((file_buffer[my_file_pointer] == '*') - && (file_buffer[my_file_pointer - 1] == '/'))) - { - my_file_pointer--; - } - my_file_pointer -= 2; - } - } - - /* Skip any remaining whitespace */ - while ((my_file_pointer > 0) && (is_whitespace(file_buffer[my_file_pointer]))) - { - my_file_pointer--; - } - - end = my_file_pointer; - while ((my_file_pointer > 0)) - { - if (is_end_of_name(file_buffer[my_file_pointer])) - { - len = end - my_file_pointer; - strncpy(name, &file_buffer[my_file_pointer + 1], len); - name[len] = 0; - return 1; - } - my_file_pointer--; - } - - return 0; -} - -static int -skip_to_next_name(char *name) -{ - while ((file_pointer < file_size)) - { - if (file_buffer[file_pointer] == '(') - { - return get_previous_identifier(file_pointer - 1, name); - } - file_pointer++; - } - return 0; -} - -// Build a path and filename so it is of the format [module][directory][filename]. -// Also convert all backslashes into forward slashes. -static void -get_filename(char *cvspath, char *filename, char *result) -{ - strcpy(result, cvspath); - strcat(result, filename); - path_to_url(result); -} - -static void -parse_file(char *fullname, char *cvspath, char *filename) -{ - PAPI_INFO api_info; - char prev[200]; - char name[200]; - int tag_id; - - read_file(fullname); - - prev[0] = 0; - do - { - tag_id = skip_to_next_tag(); - if (tag_id == TAG_UNKNOWN) - { - break; - } - - /* Skip rest of the comments between the tag and the function name */ - skip_comments(); - - if (skip_to_next_name(name)) - { - if (strlen(name) == 0) - { - printf("Warning: empty function name in file %s. Previous function name was %s.\n", - fullname, prev); - } - api_info = malloc(sizeof(API_INFO)); - if (api_info == NULL) - { - printf("Out of memory\n"); - exit(1); - } - - api_info->tag_id = tag_id; - strcpy(api_info->name, name); - - get_filename(cvspath, filename, api_info->filename); - - api_info->next = api_info_list; - api_info_list = api_info; - strcpy(prev, name); - } - } while (1); - - close_file(); -} - -#ifdef WIN32 - -/* Win32 version */ -static void -process_directory (char *path, char *cvspath) -{ - struct _finddata_t f; - int findhandle; - char searchbuf[MAX_PATH]; - char buf[MAX_PATH]; - char newcvspath[MAX_PATH]; - - strcpy(searchbuf, path); - strcat(searchbuf, "*.*"); - - findhandle =_findfirst(searchbuf, &f); - if (findhandle != -1) - { - do - { - if (f.attrib & _A_SUBDIR) - { - if (f.name[0] != '.') - { - strcpy(buf, path); - strcat(buf, f.name); - strcat(buf, DIR_SEPARATOR_STRING); - - strcpy(newcvspath, cvspath); - strcat(newcvspath, f.name); - strcat(newcvspath, "/"); - - process_directory(buf, newcvspath); - } - continue; - } - - strcpy(buf, path); - strcat(buf, f.name); - - /* Must be a .c file */ - if (!is_valid_file(buf)) - { - continue; - } - - parse_file(buf, cvspath, f.name); - } - while (_findnext(findhandle, &f) == 0); - _findclose(findhandle); - } - else - { - printf("Cannot open directory '%s'", path); - exit(1); - } -} - -#else - -/* Linux version */ -static void -process_directory (char *path, char *cvspath) -{ - DIR *dirp; - struct dirent *entry; - struct stat stbuf; - char buf[MAX_PATH]; - char newcvspath[MAX_PATH]; - -#ifdef HAVE_D_TYPE - dirp = opendir(path); - if (dirp != NULL) - { - while ((entry = readdir(dirp)) != NULL) - { - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) - continue; // skip self and parent - - if (entry->d_type == DT_REG) // normal file - { - // Check for an absolute path - if (path[0] == DIR_SEPARATOR_CHAR) - { - strcpy(buf, path); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, entry->d_name); - } - else - { - getcwd(buf, sizeof(buf)); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, path); - strcat(buf, entry->d_name); - } - - if (stat(buf, &stbuf) == -1) - { - printf("Can't access '%s' (%s)\n", buf, strerror(errno)); - return; - } - - if (S_ISDIR(stbuf.st_mode)) - { - strcpy(newcvspath, cvspath); - strcat(newcvspath, f.name); - strcat(newcvspath, "/"); - - process_directory(buf, newcvspath); - continue; - } - - /* Must be a .c file */ - if (!is_valid_file(buf)) - { - continue; - } - - parse_file(buf, cvspath, entry->d_name); - } - } - closedir(dirp); - } - else - { - printf("Can't open %s\n", path); - exit(1); - } - -#else - - dirp = opendir(path); - if (dirp != NULL) - { - while ((entry = readdir(dirp)) != NULL) - { - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) - continue; // skip self and parent - - // Check for an absolute path - if (path[0] == DIR_SEPARATOR_CHAR) - { - strcpy(buf, path); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, entry->d_name); - } - else - { - getcwd(buf, sizeof(buf)); - strcat(buf, DIR_SEPARATOR_STRING); - strcat(buf, path); - strcat(buf, entry->d_name); - } - - if (stat(buf, &stbuf) == -1) - { - printf("Can't access '%s' (%s)\n", buf, strerror(errno)); - return; - } - - if (S_ISDIR(stbuf.st_mode)) - { - strcpy(newcvspath, cvspath); - strcat(newcvspath, entry->d_name); - strcat(newcvspath, "/"); - - process_directory(buf, newcvspath); - continue; - } - - /* Must be a .c file */ - if (!is_valid_file(buf)) - { - continue; - } - - parse_file(buf, cvspath, entry->d_name); - } - closedir(dirp); - } - else - { - printf("Can't open %s\n", path); - exit(1); - } - -#endif -} - -#endif - -/* - * This function compares two API entries. It returns a negative value if p is - * before q, or a positive value if p is after q. - */ -static int -compare_api_order(PAPI_INFO p, PAPI_INFO q) -{ - return strcmp(p->name, q->name); -} - -char * -get_filename_without_base(char *component_base, - char *filename) -{ - return &filename[strlen(component_base)]; -} - -static void -generate_xml_for_component(char *component_name, - char *component_base) -{ - PAPI_INFO api_info; - char canonical_base[MAX_PATH]; - char buf[200]; - int complete; - int implemented_total; - int unimplemented_total; - - // Sort list - api_info_list = sort_linked_list(api_info_list, 0, compare_api_order); - - implemented_total = 0; - unimplemented_total = 0; - - api_info = api_info_list; - while (api_info != NULL) - { - if (api_info->tag_id == TAG_IMPLEMENTED) - implemented_total ++; - else if (api_info->tag_id == TAG_UNIMPLEMENTED) - unimplemented_total ++; - - api_info = api_info->next; - } - - if (implemented_total + unimplemented_total > 0) - complete = ((implemented_total) * 100) / (implemented_total + unimplemented_total); - else - complete = 100; - - strcpy(canonical_base, component_base); - path_to_url(canonical_base); - - sprintf(buf, "", - component_name, canonical_base, complete, implemented_total, unimplemented_total); - write_line(buf); - - if (api_info_list != NULL) - { - write_line(""); - - api_info = api_info_list; - while (api_info != NULL) - { - sprintf(buf, "", - api_info->name, - api_info->tag_id == TAG_IMPLEMENTED ? "true" : "false", - get_filename_without_base(component_base, - api_info->filename)); - write_line(buf); - api_info = api_info->next; - } - - write_line(""); - } - - write_line(""); -} - -static void -read_input_file(char *input_file) -{ - char component_name[MAX_PATH]; - char component_path[MAX_PATH]; - char *canonical_path; - unsigned int index; - unsigned int start; - PAPI_INFO api_info; - PAPI_INFO next_api_info; - char *buffer; - int size; - int len; - - in = fopen(input_file, "rb"); - if (in == NULL) - { - printf("Cannot open input file"); - exit(1); - } - - // Get the size of the file - fseek(in, 0, SEEK_END); - size = ftell(in); - - // Load it all into memory - buffer = malloc(size); - if (buffer == NULL) - { - fclose(in); - printf("Out of memory\n"); - exit(1); - } - fseek(in, 0, SEEK_SET); - if (fread (buffer, 1, size, in) < 1) - { - fclose(in); - printf("Read error in file %s\n", input_file); - exit(1); - } - - index = 0; - - write_line(""); - write_line(""); - write_line(""); - write_line(""); - - while (1) - { - /* Free previous list */ - for (api_info = api_info_list; api_info != NULL; api_info = next_api_info) - { - next_api_info = api_info->next; - free(api_info); - } - api_info_list = NULL; - - /* Skip whitespace and eol characters */ - while ((index < size) && (is_whitespace(buffer[index]) || (is_eol_char(buffer[index])))) - index++; - if ((file_pointer < size) && (buffer[index] == '\n')) - index++; - - if (buffer[index] == ';') - { - /* Skip comments */ - while ((index < size) && (!is_eol_char(buffer[index]))) - index++; - if ((index < size) && (buffer[index] == '\n')) - index++; - continue; - } - - /* Get component name */ - start = index; - while ((index < size) && (!is_whitespace(buffer[index]))) - index++; - if (index >= size) - break; - - len = index - start; - strncpy(component_name, &buffer[start], len); - component_name[len] = 0; - - /* Skip whitespace */ - while ((index < size) && (is_whitespace(buffer[index]))) - index++; - if (index >= size) - break; - - /* Get component path */ - start = index; - while ((index < size) && (!is_whitespace(buffer[index]) && !is_eol_char(buffer[index]))) - index++; - - len = index - start; - strncpy(component_path, &buffer[start], len); - component_path[len] = 0; - - /* Append directory separator if needed */ - if (component_path[strlen(component_path)] != DIR_SEPARATOR_CHAR) - { - int i = strlen(component_path); - component_path[strlen(component_path)] = DIR_SEPARATOR_CHAR; - component_path[i + 1] = 0; - } - - /* Skip to end of line */ - while ((index < size) && (!is_eol_char(buffer[index]))) - index++; - if ((index < size) && (buffer[index] == '\n')) - index++; - - canonical_path = convert_path(component_path); - if (canonical_path != NULL) - { - process_directory(canonical_path, canonical_path); - free(canonical_path); - generate_xml_for_component(component_name, - component_path); - } - } - - write_line(""); -} - -static char HELP[] = - "RGENSTAT input-filename output-filename\n" - "\n" - " input-filename File containing list of components to process\n" - " output-filename File to create\n"; - -int main(int argc, char **argv) -{ - char *input_file; - char *output_file; - - if (argc < 2) - { - puts(HELP); - return 1; - } - - input_file = convert_path(argv[1]); - if (input_file[0] == 0) - { - printf("Missing input-filename\n"); - return 1; - } - - output_file = convert_path(argv[2]); - if (output_file[0] == 0) - { - printf("Missing output-filename\n"); - return 1; - } - - out = fopen(output_file, "wb"); - if (out == NULL) - { - printf("Cannot open output file"); - return 1; - } - - read_input_file(input_file); - - fclose(out); - - return 0; -} - -/* EOF */ diff --git a/reactos/tools/rgenstat/rgenstat.rbuild b/reactos/tools/rgenstat/rgenstat.rbuild deleted file mode 100644 index 6de3bef7407..00000000000 --- a/reactos/tools/rgenstat/rgenstat.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - - rgenstat.c - llmosrt.c - diff --git a/reactos/tools/rgenstat/web/c.gif b/reactos/tools/rgenstat/web/c.gif deleted file mode 100755 index 08f00d4ea11f8d253bff1cc22a94a23d41e0c30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmZ?wbhEHb6krfwn8?7;(9m$;zySsZhX4QnEB<5wG8h1=izYEJSOWlnL?d$m diff --git a/reactos/tools/rgenstat/web/i.gif b/reactos/tools/rgenstat/web/i.gif deleted file mode 100755 index 2c8ca54792980ba8d37687ee1b06f7a6a5009b9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 zcmZ?wbhEHb - -If your browser do not support XSLT click here. - - - diff --git a/reactos/tools/rgenstat/web/rapistatus.css b/reactos/tools/rgenstat/web/rapistatus.css deleted file mode 100755 index a429226f4bb..00000000000 --- a/reactos/tools/rgenstat/web/rapistatus.css +++ /dev/null @@ -1,57 +0,0 @@ -.c IMG -{ - border: 0px; -} - -.c, .c_, -.f, .f_, -.i, .i_, -.u, .u_ -{ - FONT: 10px 'Verdana'; - margin-left: 20px; -} - -.c_ .f, -.c_ .f_ -{ - display: none; -} - -.h -{ - display: none; -} - -.t -{ - cursor: pointer; - margin-right: 8px; -} - -.filter -{ - cursor: pointer; - vertical-align: middle; -} - - -.st -{ - margin-left: 20px; -} - -.i -{ - margin-left: 20px; -} - -.u -{ - margin-left: 20px; -} - -.l -{ - cursor: pointer; -} diff --git a/reactos/tools/rgenstat/web/rapistatus.js b/reactos/tools/rgenstat/web/rapistatus.js deleted file mode 100755 index 44f5764ab00..00000000000 --- a/reactos/tools/rgenstat/web/rapistatus.js +++ /dev/null @@ -1,291 +0,0 @@ -function toggle (elt) -{ - if (elt == null) - return; - - var eltLink = elt.firstChild; - if (eltLink != null && eltLink.className == 't') // toggle - { - var ich = elt.className.indexOf ('_'); - if (ich < 0) - { - eltLink.src = 'tp.gif'; - elt.className += '_'; - } - else - { - eltLink.src = 'tm.gif'; - elt.className = elt.className.slice (0, ich); - } - } -} - -function setView (elt, fView) -{ - var eltLink = elt.firstChild; - if (eltLink != null && eltLink.className == 't') // toggle - { - var ich = elt.className.indexOf ('_'); - if (ich < 0 && !fView) - { - eltLink.src = 'tp.gif'; - elt.className += '_'; - } - else if (ich >= 0 && fView) - { - eltLink.src = 'tm.gif'; - elt.className = elt.className.slice (0, ich); - } - } -} - -function trimSrc (strSrc) -{ - return strSrc.slice (strSrc.lastIndexOf ('/') + 1, strSrc.lastIndexOf ('.')); -} - -function getChildrenByTagName (elt, strTag) -{ - strTag = strTag.toLowerCase (); - var rgChildren = new Array (); - var eltChild = elt.firstChild; - while (eltChild) - { - if (eltChild.tagName && eltChild.tagName.toLowerCase () == strTag) - rgChildren.push (eltChild); - eltChild = eltChild.nextSibling; - } - return rgChildren; -} - -function viewAll (elt, dictTypes) -{ - var fView = false; - var rgImages = getChildrenByTagName (elt, 'IMG'); - var cImages = rgImages.length; - for (var iImage = 0; iImage < cImages; iImage++) - { - var strImage = trimSrc (rgImages [iImage].src); - if (dictTypes [strImage]) - { - fView = true; - break; - } - } - var rgElts = getChildrenByTagName (elt, 'DIV'); - var cElts = rgElts.length; - if (cElts != 0) - { - var iElt; - for (iElt = 0; iElt < cElts; iElt ++) - fView |= viewAll (rgElts [iElt], dictTypes); - } - elt.style.display = fView ? '' : 'none'; - return fView; -} - -function getView (elt) -{ - var eltLink = elt.firstChild; - if (eltLink != null && eltLink.className == 't') // toggle - { - var ich = elt.className.indexOf ('_'); - if (ich < 0) - return true; - } - return false; -} - -function getParentDiv (elt) -{ - if (elt) - { - do - { - elt = elt.parentNode; - } - while (elt && elt.tagName != 'DIV'); - } - - return elt; -} - -function getName (elt) -{ - var rgSpans = getChildrenByTagName (elt, 'SPAN'); - for (var iSpan = 0; iSpan < rgSpans.length; iSpan ++) - { - var span = rgSpans [iSpan]; - if (span.className == 'l') // label - { - if (span.innerText) - return span.innerText; - else - return span.firstChild.nodeValue; - } - } - return null; -} - -function clickHandler (evt) -{ - var elt; - if (document.layers) - elt = evt.taget; - else if (window.event && window.event.srcElement) - { - elt = window.event.srcElement; - evt = window.event; - } - else if (evt && evt.stopPropagation) - elt = evt.target; - - if (!elt.className && elt.parentNode) - elt = elt.parentNode; - - if (elt.className == 'l') // label - { - var strName; - - eltDiv = getParentDiv (elt); - var strEltClass = eltDiv.className; - if (strEltClass.charAt (strEltClass.length - 1) == '_') - strEltClass = strEltClass.slice (0, strEltClass.length - 1); - strName = getName (eltDiv); - - if (strEltClass == 'f') // Function - { - var strFilename = elt.nextSibling; - if (strFilename && strFilename.innerText) - { - var strRoot = 'http://svn.reactos.com/viewcvs/trunk/'; - var strExtra = '?view=markup'; - window.open (strRoot + strFilename.innerText + strExtra, 'SVN'); - } - } - } - else - { - if (elt.parentNode && elt.parentNode.className == 't') // toggle - elt = elt.parentNode; - else if (elt.className != 't') // toggle - return; - - while (elt != null && elt.tagName != 'DIV') - elt = elt.parentNode; - - if (evt.shiftKey) - { - var rgElts = getChildrenByTagName (elt, 'DIV'); - var cElts = rgElts.length; - if (cElts != 0) - { - var fView = false; - var iElt; - for (iElt = 0; iElt < cElts; iElt ++) - { - if (getView (rgElts [iElt])) - { - fView = true; - break; - } - } - for (iElt = 0; iElt < cElts; iElt ++) - { - setView (rgElts [iElt], !fView); - } - } - } - else if (evt.ctrlKey) - { - setView (elt, true); - var eltParent = getParentDiv (elt); - while (eltParent) - { - var rgSiblings = getChildrenByTagName (eltParent, 'DIV'); - var cSiblings = rgSiblings.length; - for (var iSibling = 0; iSibling < cSiblings; iSibling++) - { - var eltSibling = rgSiblings [iSibling]; - if (eltSibling != elt) - { - setView (eltSibling, false); - } - } - elt = eltParent; - eltParent = getParentDiv (elt); - } - } - else - toggle (elt); - } - - return false; -} - -function filterTree () -{ - var eltImplemented = document.getElementById ('implemented'); - var eltUnimplemented = document.getElementById ('unimplemented'); - - var dictTypes = new Object (); - if (eltImplemented.checked) - dictTypes ['i'] = true; - if (eltUnimplemented.checked) - dictTypes ['u'] = true; - - viewAll (document.getElementById ('ROOT'), dictTypes); -} - -function selectImplemented () -{ - toggleFilter ('implemented'); -} - -function selectUnimplemented () -{ - toggleFilter ('unimplemented'); -} - -function toggleFilter (strFilter) -{ - var eltImplemented = document.getElementById ('implemented'); - var eltUnimplemented = document.getElementById ('unimplemented'); - - var eltToggle = document.getElementById (strFilter); - if (window && window.event && window.event.shiftKey) - { - eltImplemented.checked = eltUnimplemented.checked; - eltUnimplemented.checked = true; - } - else - if (!eltUnimplemented.checked && !eltImplemented.checked) - { - eltImplemented.checked = eltUnimplemented.checked = true; - eltToggle.checked = false; - } - filterTree (); -} - -function onLoad () -{ - var eltImplemented = document.getElementById ('implemented'); - var eltUnimplemented = document.getElementById ('unimplemented'); - eltImplemented.checked = eltUnimplemented.checked = true; -} - -if (document.layers) -{ - document.captureEvents (Event.MOUSEUP); - document.onmouseup = clickHandler; -} -else if (document.attachEvent) -{ - document.attachEvent('onclick', clickHandler); -} -else if (document.addEventListener) -{ - document.addEventListener('click', clickHandler, false); -} -else - document.onclick = clickHandler; diff --git a/reactos/tools/rgenstat/web/rapistatus.xsl b/reactos/tools/rgenstat/web/rapistatus.xsl deleted file mode 100755 index 4eb01432956..00000000000 --- a/reactos/tools/rgenstat/web/rapistatus.xsl +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - - - - ReactOS API Status - - - - - -

        -

        ReactOS API Status

        -

        -

        - - - - - - - - - - - -
        Implemented -
        Unimplemented -
        -

        -
        - -
        -

        - Legend :
        - - - - - - - - - - - - - - - - - -
        Component Implemented Complete
        Function Unimplemented
        - -

        - - -
        - - - - - - - - - - -
        - - c - - - - -
        -
        - - - - - - - - - - - - - -
        - - f - - - -
        -
        - - - - - - - - - - - _ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : - - % - - - - - : - - - - - : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        diff --git a/reactos/tools/rgenstat/web/sc.gif b/reactos/tools/rgenstat/web/sc.gif deleted file mode 100755 index b02afd9b2e0cee6c787f16db5db4acad56017859..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70 zcmZ?wbhEHbxH#$XKq@BJ4) diff --git a/reactos/tools/rgenstat/web/tb.gif b/reactos/tools/rgenstat/web/tb.gif deleted file mode 100755 index ee68c5a356b234ad96166594a5cd69daba0135da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmZ?wbhEHb*x10p@c;jR#h)w;AfN*xK=KSsvUB=7l{VVWaBehQ a;FcO0Ju#NS-SKdT?2=t2?^cU2SOWktUKcw6 diff --git a/reactos/tools/rsym.c b/reactos/tools/rsym.c deleted file mode 100644 index 0ae8fb8ea46..00000000000 --- a/reactos/tools/rsym.c +++ /dev/null @@ -1,978 +0,0 @@ -/* - * Usage: rsym input-file output-file - * - * There are two sources of information: the .stab/.stabstr - * sections of the executable and the COFF symbol table. Most - * of the information is in the .stab/.stabstr sections. - * However, most of our asm files don't contain .stab directives, - * so routines implemented in assembler won't show up in the - * .stab section. They are present in the COFF symbol table. - * So, we mostly use the .stab/.stabstr sections, but we augment - * the info there with info from the COFF symbol table when - * possible. - * - * This is a tool and is compiled using the host compiler, - * i.e. on Linux gcc and not mingw-gcc (cross-compiler). - * Therefore we can't include SDK headers and we have to - * duplicate some definitions here. - * Also note that the internal functions are "old C-style", - * returning an int, where a return of 0 means success and - * non-zero is failure. - */ - -#include -#include -#include -#include - -#include "rsym.h" - -static int -CompareSymEntry(const PROSSYM_ENTRY SymEntry1, const PROSSYM_ENTRY SymEntry2) -{ - if (SymEntry1->Address < SymEntry2->Address) - { - return -1; - } - - if (SymEntry2->Address < SymEntry1->Address) - { - return +1; - } - - return 0; -} - -static int -GetStabInfo(void *FileData, PIMAGE_FILE_HEADER PEFileHeader, - PIMAGE_SECTION_HEADER PESectionHeaders, - ULONG *StabSymbolsLength, void **StabSymbolsBase, - ULONG *StabStringsLength, void **StabStringsBase) -{ - ULONG Idx; - - /* Load .stab and .stabstr sections if available */ - *StabSymbolsBase = NULL; - *StabSymbolsLength = 0; - *StabStringsBase = NULL; - *StabStringsLength = 0; - - for (Idx = 0; Idx < PEFileHeader->NumberOfSections; Idx++) - { - /* printf("section: '%.08s'\n", PESectionHeaders[Idx].Name); */ - if ((strncmp((char*)PESectionHeaders[Idx].Name, ".stab", 5) == 0) - && (PESectionHeaders[Idx].Name[5] == 0)) - { - /* printf(".stab section found. Size %d\n", - PESectionHeaders[Idx].SizeOfRawData); */ - - *StabSymbolsLength = PESectionHeaders[Idx].SizeOfRawData; - *StabSymbolsBase = (void *)((char *) FileData + PESectionHeaders[Idx].PointerToRawData); - } - - if (strncmp((char*)PESectionHeaders[Idx].Name, ".stabstr", 8) == 0) - { - /* printf(".stabstr section found. Size %d\n", - PESectionHeaders[Idx].SizeOfRawData); */ - - *StabStringsLength = PESectionHeaders[Idx].SizeOfRawData; - *StabStringsBase = (void *)((char *) FileData + PESectionHeaders[Idx].PointerToRawData); - } - } - - return 0; -} - -static int -GetCoffInfo(void *FileData, PIMAGE_FILE_HEADER PEFileHeader, - PIMAGE_SECTION_HEADER PESectionHeaders, - ULONG *CoffSymbolsLength, void **CoffSymbolsBase, - ULONG *CoffStringsLength, void **CoffStringsBase) -{ - - if (0 == PEFileHeader->PointerToSymbolTable || 0 == PEFileHeader->NumberOfSymbols) - { - /* No COFF symbol table */ - *CoffSymbolsLength = 0; - *CoffStringsLength = 0; - } - else - { - *CoffSymbolsLength = PEFileHeader->NumberOfSymbols * sizeof(COFF_SYMENT); - *CoffSymbolsBase = (void *)((char *) FileData + PEFileHeader->PointerToSymbolTable); - *CoffStringsLength = *((ULONG *) ((char *) *CoffSymbolsBase + *CoffSymbolsLength)); - *CoffStringsBase = (void *)((char *) *CoffSymbolsBase + *CoffSymbolsLength); - } - - return 0; -} - -static ULONG -FindOrAddString(char *StringToFind, ULONG *StringsLength, void *StringsBase) -{ - char *Search, *End; - - Search = (char *) StringsBase; - End = Search + *StringsLength; - - while (Search < End) - { - if (0 == strcmp(Search, StringToFind)) - { - return Search - (char *) StringsBase; - } - Search += strlen(Search) + 1; - } - - strcpy(Search, StringToFind); - *StringsLength += strlen(StringToFind) + 1; - - return Search - (char *) StringsBase; -} - -static int -ConvertStabs(ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase, - ULONG *StringsLength, void *StringsBase, - ULONG StabSymbolsLength, void *StabSymbolsBase, - ULONG StabStringsLength, void *StabStringsBase, - ULONG_PTR ImageBase, PIMAGE_FILE_HEADER PEFileHeader, - PIMAGE_SECTION_HEADER PESectionHeaders) -{ - PSTAB_ENTRY StabEntry; - ULONG Count, i; - ULONG_PTR Address, LastFunctionAddress; - int First = 1; - char *Name; - ULONG NameLen; - char FuncName[256]; - PROSSYM_ENTRY Current; - - StabEntry = StabSymbolsBase; - Count = StabSymbolsLength / sizeof(STAB_ENTRY); - *SymbolsCount = 0; - if (Count == 0) - { - /* No symbol info */ - *SymbolsBase = NULL; - return 0; - } - - *SymbolsBase = malloc(Count * sizeof(ROSSYM_ENTRY)); - if (NULL == *SymbolsBase) - { - fprintf(stderr, "Failed to allocate memory for converted .stab symbols\n"); - return 1; - } - Current = *SymbolsBase; - memset ( Current, 0, sizeof(*Current) ); - - LastFunctionAddress = 0; - for (i = 0; i < Count; i++) - { - if ( 0 == LastFunctionAddress ) - { - Address = StabEntry[i].n_value - ImageBase; - } - else - { - Address = LastFunctionAddress + StabEntry[i].n_value; - } - switch (StabEntry[i].n_type) - { - case N_SO: - case N_SOL: - case N_BINCL: - Name = (char *) StabStringsBase + StabEntry[i].n_strx; - if (StabStringsLength < StabEntry[i].n_strx - ||'\0' == *Name || '/' == Name[strlen(Name) - 1] - || '\\' == Name[strlen(Name) - 1] - || StabEntry[i].n_value < ImageBase) - { - continue; - } - if ( First || Address != Current->Address ) - { - if ( !First ) - { - memset ( ++Current, 0, sizeof(*Current) ); - Current->FunctionOffset = Current[-1].FunctionOffset; - } - else - First = 0; - Current->Address = Address; - } - Current->FileOffset = FindOrAddString((char *)StabStringsBase - + StabEntry[i].n_strx, - StringsLength, - StringsBase); - break; - case N_FUN: - if (0 == StabEntry[i].n_desc || StabEntry[i].n_value < ImageBase) - { - LastFunctionAddress = 0; /* line # 0 = end of function */ - continue; - } - if ( First || Address != Current->Address ) - { - if ( !First ) - memset ( ++Current, 0, sizeof(*Current) ); - else - First = 0; - Current->Address = Address; - Current->FileOffset = Current[-1].FileOffset; - } - Name = (char *) StabStringsBase + StabEntry[i].n_strx; - NameLen = strcspn(Name, ":"); - if (sizeof(FuncName) <= NameLen) - { - free(*SymbolsBase); - fprintf(stderr, "Function name too long\n"); - return 1; - } - memcpy(FuncName, Name, NameLen); - FuncName[NameLen] = '\0'; - Current->FunctionOffset = FindOrAddString(FuncName, - StringsLength, - StringsBase); - Current->SourceLine = 0; - LastFunctionAddress = Address; - break; - case N_SLINE: - if ( First || Address != Current->Address ) - { - if ( !First ) - { - memset ( ++Current, 0, sizeof(*Current) ); - Current->FileOffset = Current[-1].FileOffset; - Current->FunctionOffset = Current[-1].FunctionOffset; - } - else - First = 0; - Current->Address = Address; - } - Current->SourceLine = StabEntry[i].n_desc; - break; - default: - continue; - } - } - *SymbolsCount = (Current - *SymbolsBase + 1); - - qsort(*SymbolsBase, *SymbolsCount, sizeof(ROSSYM_ENTRY), (int (*)(const void *, const void *)) CompareSymEntry); - - return 0; -} - -static int -ConvertCoffs(ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase, - ULONG *StringsLength, void *StringsBase, - ULONG CoffSymbolsLength, void *CoffSymbolsBase, - ULONG CoffStringsLength, void *CoffStringsBase, - ULONG_PTR ImageBase, PIMAGE_FILE_HEADER PEFileHeader, - PIMAGE_SECTION_HEADER PESectionHeaders) -{ - ULONG Count, i; - PCOFF_SYMENT CoffEntry; - char FuncName[256]; - char *p; - PROSSYM_ENTRY Current; - - CoffEntry = (PCOFF_SYMENT) CoffSymbolsBase; - Count = CoffSymbolsLength / sizeof(COFF_SYMENT); - *SymbolsBase = malloc(Count * sizeof(ROSSYM_ENTRY)); - if (NULL == *SymbolsBase) - { - fprintf(stderr, "Unable to allocate memory for converted COFF symbols\n"); - return 1; - } - *SymbolsCount = 0; - Current = *SymbolsBase; - - for (i = 0; i < Count; i++) - { - if (ISFCN(CoffEntry[i].e_type) || C_EXT == CoffEntry[i].e_sclass) - { - Current->Address = CoffEntry[i].e_value; - if (0 < CoffEntry[i].e_scnum) - { - if (PEFileHeader->NumberOfSections < CoffEntry[i].e_scnum) - { - free(*SymbolsBase); - fprintf(stderr, "Invalid section number %d in COFF symbols (only %d sections present)\n", - CoffEntry[i].e_scnum, PEFileHeader->NumberOfSections); - return 1; - } - Current->Address += PESectionHeaders[CoffEntry[i].e_scnum - 1].VirtualAddress; - } - Current->FileOffset = 0; - if (0 == CoffEntry[i].e.e.e_zeroes) - { - if (sizeof(FuncName) <= strlen((char *) CoffStringsBase + CoffEntry[i].e.e.e_offset)) - { - free(*SymbolsBase); - fprintf(stderr, "Function name too long\n"); - return 1; - } - strcpy(FuncName, (char *) CoffStringsBase + CoffEntry[i].e.e.e_offset); - } - else - { - memcpy(FuncName, CoffEntry[i].e.e_name, E_SYMNMLEN); - FuncName[E_SYMNMLEN] = '\0'; - } - - /* Name demangling: stdcall */ - p = strrchr(FuncName, '@'); - if (NULL != p) - { - *p = '\0'; - } - p = ('_' == FuncName[0] || '@' == FuncName[0] ? FuncName + 1 : FuncName); - Current->FunctionOffset = FindOrAddString(p, - StringsLength, - StringsBase); - Current->SourceLine = 0; - memset ( ++Current, 0, sizeof(*Current) ); - } - i += CoffEntry[i].e_numaux; - } - - *SymbolsCount = (Current - *SymbolsBase + 1); - qsort(*SymbolsBase, *SymbolsCount, sizeof(ROSSYM_ENTRY), (int (*)(const void *, const void *)) CompareSymEntry); - - return 0; -} - -static int -MergeStabsAndCoffs(ULONG *MergedSymbolCount, PROSSYM_ENTRY *MergedSymbols, - ULONG StabSymbolsCount, PROSSYM_ENTRY StabSymbols, - ULONG CoffSymbolsCount, PROSSYM_ENTRY CoffSymbols) -{ - ULONG StabIndex, j; - ULONG CoffIndex; - ULONG_PTR StabFunctionStartAddress; - ULONG StabFunctionStringOffset, NewStabFunctionStringOffset; - - *MergedSymbolCount = 0; - if (StabSymbolsCount == 0) - { - *MergedSymbols = NULL; - return 0; - } - *MergedSymbols = malloc(StabSymbolsCount * sizeof(ROSSYM_ENTRY)); - if (NULL == *MergedSymbols) - { - fprintf(stderr, "Unable to allocate memory for merged symbols\n"); - return 1; - } - - StabFunctionStartAddress = 0; - StabFunctionStringOffset = 0; - CoffIndex = 0; - for (StabIndex = 0; StabIndex < StabSymbolsCount; StabIndex++) - { - (*MergedSymbols)[*MergedSymbolCount] = StabSymbols[StabIndex]; - for (j = StabIndex + 1; - j < StabSymbolsCount && StabSymbols[j].Address == StabSymbols[StabIndex].Address; - j++) - { - if (0 != StabSymbols[j].FileOffset && 0 == (*MergedSymbols)[*MergedSymbolCount].FileOffset) - { - (*MergedSymbols)[*MergedSymbolCount].FileOffset = StabSymbols[j].FileOffset; - } - if (0 != StabSymbols[j].FunctionOffset && 0 == (*MergedSymbols)[*MergedSymbolCount].FunctionOffset) - { - (*MergedSymbols)[*MergedSymbolCount].FunctionOffset = StabSymbols[j].FunctionOffset; - } - if (0 != StabSymbols[j].SourceLine && 0 == (*MergedSymbols)[*MergedSymbolCount].SourceLine) - { - (*MergedSymbols)[*MergedSymbolCount].SourceLine = StabSymbols[j].SourceLine; - } - } - StabIndex = j - 1; - while (CoffIndex < CoffSymbolsCount - && CoffSymbols[CoffIndex + 1].Address <= (*MergedSymbols)[*MergedSymbolCount].Address) - { - CoffIndex++; - } - NewStabFunctionStringOffset = (*MergedSymbols)[*MergedSymbolCount].FunctionOffset; - if (CoffSymbolsCount > 0 && - CoffSymbols[CoffIndex].Address < (*MergedSymbols)[*MergedSymbolCount].Address - && StabFunctionStartAddress < CoffSymbols[CoffIndex].Address - && 0 != CoffSymbols[CoffIndex].FunctionOffset) - { - (*MergedSymbols)[*MergedSymbolCount].FunctionOffset = CoffSymbols[CoffIndex].FunctionOffset; - } - if (StabFunctionStringOffset != NewStabFunctionStringOffset) - { - StabFunctionStartAddress = (*MergedSymbols)[*MergedSymbolCount].Address; - } - StabFunctionStringOffset = NewStabFunctionStringOffset; - (*MergedSymbolCount)++; - } - - return 0; -} - -static PIMAGE_SECTION_HEADER -FindSectionForRVA(DWORD RVA, unsigned NumberOfSections, PIMAGE_SECTION_HEADER SectionHeaders) -{ - unsigned Section; - - for (Section = 0; Section < NumberOfSections; Section++) - { - if (SectionHeaders[Section].VirtualAddress <= RVA && - RVA < SectionHeaders[Section].VirtualAddress + SectionHeaders[Section].Misc.VirtualSize) - { - return SectionHeaders + Section; - } - } - - return NULL; -} - -static int -IncludeRelocationsForSection(PIMAGE_SECTION_HEADER SectionHeader) -{ - static char *BlacklistedSections[] = - { - ".edata", - ".idata", - ".reloc" - }; - char SectionName[IMAGE_SIZEOF_SHORT_NAME]; - unsigned i; - - if (0 != (SectionHeader->Characteristics & IMAGE_SCN_LNK_REMOVE)) - { - return 0; - } - - for (i = 0; i < sizeof(BlacklistedSections) / sizeof(BlacklistedSections[0]); i++) - { - strncpy(SectionName, BlacklistedSections[i], IMAGE_SIZEOF_SHORT_NAME); - if (0 == memcmp(SectionName, SectionHeader->Name, IMAGE_SIZEOF_SHORT_NAME)) - { - return 0; - } - } - - return 1; -} - -static int -ProcessRelocations(ULONG *ProcessedRelocsLength, void **ProcessedRelocs, - void *RawData, PIMAGE_OPTIONAL_HEADER OptHeader, - unsigned NumberOfSections, PIMAGE_SECTION_HEADER SectionHeaders) -{ - PIMAGE_SECTION_HEADER RelocSectionHeader, TargetSectionHeader; - PIMAGE_BASE_RELOCATION BaseReloc, End, AcceptedRelocs; - int Found; - - if (OptHeader->NumberOfRvaAndSizes < IMAGE_DIRECTORY_ENTRY_BASERELOC - || 0 == OptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress) - { - /* No relocation entries */ - *ProcessedRelocsLength = 0; - *ProcessedRelocs = NULL; - return 0; - } - - RelocSectionHeader = FindSectionForRVA(OptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress, - NumberOfSections, SectionHeaders); - if (NULL == RelocSectionHeader) - { - fprintf(stderr, "Can't find section header for relocation data\n"); - return 1; - } - - *ProcessedRelocs = malloc(RelocSectionHeader->SizeOfRawData); - if (NULL == *ProcessedRelocs) - { - fprintf(stderr, "Failed to allocate %lu bytes for relocations\n", RelocSectionHeader->SizeOfRawData); - return 1; - } - *ProcessedRelocsLength = 0; - - BaseReloc = (PIMAGE_BASE_RELOCATION) ((char *) RawData - + RelocSectionHeader->PointerToRawData - + (OptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress - - RelocSectionHeader->VirtualAddress)); - End = (PIMAGE_BASE_RELOCATION) ((char *) BaseReloc - + OptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size); - - while (BaseReloc < End && 0 < BaseReloc->SizeOfBlock) - { - TargetSectionHeader = FindSectionForRVA(BaseReloc->VirtualAddress, NumberOfSections, - SectionHeaders); - if (NULL != TargetSectionHeader && IncludeRelocationsForSection(TargetSectionHeader)) - { - AcceptedRelocs = *ProcessedRelocs; - Found = 0; - while (AcceptedRelocs < (PIMAGE_BASE_RELOCATION) ((char *) *ProcessedRelocs + - *ProcessedRelocsLength) - && ! Found) - { - Found = BaseReloc->SizeOfBlock == AcceptedRelocs->SizeOfBlock - && 0 == memcmp(BaseReloc, AcceptedRelocs, AcceptedRelocs->SizeOfBlock); - AcceptedRelocs= (PIMAGE_BASE_RELOCATION) ((char *) AcceptedRelocs + - AcceptedRelocs->SizeOfBlock); - } - if (! Found) - { - memcpy((char *) *ProcessedRelocs + *ProcessedRelocsLength, - BaseReloc, BaseReloc->SizeOfBlock); - *ProcessedRelocsLength += BaseReloc->SizeOfBlock; - } - } - BaseReloc = (PIMAGE_BASE_RELOCATION)((char *) BaseReloc + BaseReloc->SizeOfBlock); - } - - return 0; -} - -static int -CreateOutputFile(FILE *OutFile, void *InData, - PIMAGE_DOS_HEADER InDosHeader, PIMAGE_FILE_HEADER InFileHeader, - PIMAGE_OPTIONAL_HEADER InOptHeader, PIMAGE_SECTION_HEADER InSectionHeaders, - ULONG RosSymLength, void *RosSymSection) -{ - ULONG StartOfRawData; - unsigned Section; - void *OutHeader, *ProcessedRelocs, *PaddedRosSym, *Data; - PIMAGE_DOS_HEADER OutDosHeader; - PIMAGE_FILE_HEADER OutFileHeader; - PIMAGE_OPTIONAL_HEADER OutOptHeader; - PIMAGE_SECTION_HEADER OutSectionHeaders, CurrentSectionHeader; - DWORD CheckSum; - ULONG Length, i; - ULONG ProcessedRelocsLength; - ULONG RosSymOffset, RosSymFileLength; - int InRelocSectionIndex; - PIMAGE_SECTION_HEADER OutRelocSection; - - StartOfRawData = 0; - for (Section = 0; Section < InFileHeader->NumberOfSections; Section++) - { - if ((0 == StartOfRawData - || InSectionHeaders[Section].PointerToRawData < StartOfRawData) - && 0 != InSectionHeaders[Section].PointerToRawData - && 0 == (InSectionHeaders[Section].Characteristics & IMAGE_SCN_LNK_REMOVE)) - { - StartOfRawData = InSectionHeaders[Section].PointerToRawData; - } - } - OutHeader = malloc(StartOfRawData); - if (NULL == OutHeader) - { - fprintf(stderr, "Failed to allocate %lu bytes for output file header\n", StartOfRawData); - return 1; - } - memset(OutHeader, '\0', StartOfRawData); - - OutDosHeader = (PIMAGE_DOS_HEADER) OutHeader; - memcpy(OutDosHeader, InDosHeader, InDosHeader->e_lfanew + sizeof(ULONG)); - - OutFileHeader = (PIMAGE_FILE_HEADER)((char *) OutHeader + OutDosHeader->e_lfanew + sizeof(ULONG)); - memcpy(OutFileHeader, InFileHeader, sizeof(IMAGE_FILE_HEADER)); - OutFileHeader->PointerToSymbolTable = 0; - OutFileHeader->NumberOfSymbols = 0; - OutFileHeader->Characteristics &= ~(IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_LOCAL_SYMS_STRIPPED | - IMAGE_FILE_DEBUG_STRIPPED); - - OutOptHeader = (PIMAGE_OPTIONAL_HEADER)(OutFileHeader + 1); - memcpy(OutOptHeader, InOptHeader, sizeof(IMAGE_OPTIONAL_HEADER)); - OutOptHeader->CheckSum = 0; - - OutSectionHeaders = (PIMAGE_SECTION_HEADER)((char *) OutOptHeader + OutFileHeader->SizeOfOptionalHeader); - - if (ProcessRelocations(&ProcessedRelocsLength, &ProcessedRelocs, InData, InOptHeader, - InFileHeader->NumberOfSections, InSectionHeaders)) - { - return 1; - } - if (InOptHeader->NumberOfRvaAndSizes < IMAGE_DIRECTORY_ENTRY_BASERELOC - || 0 == InOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress) - { - InRelocSectionIndex = -1; - } - else - { - InRelocSectionIndex = FindSectionForRVA(InOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress, - InFileHeader->NumberOfSections, InSectionHeaders) - InSectionHeaders; - } - - OutFileHeader->NumberOfSections = 0; - CurrentSectionHeader = OutSectionHeaders; - OutOptHeader->SizeOfImage = 0; - RosSymOffset = 0; - OutRelocSection = NULL; - for (Section = 0; Section < InFileHeader->NumberOfSections; Section++) - { - if (0 == (InSectionHeaders[Section].Characteristics & IMAGE_SCN_LNK_REMOVE)) - { - *CurrentSectionHeader = InSectionHeaders[Section]; - CurrentSectionHeader->PointerToLinenumbers = 0; - CurrentSectionHeader->NumberOfLinenumbers = 0; - if (OutOptHeader->SizeOfImage < CurrentSectionHeader->VirtualAddress + - CurrentSectionHeader->Misc.VirtualSize) - { - OutOptHeader->SizeOfImage = ROUND_UP(CurrentSectionHeader->VirtualAddress + - CurrentSectionHeader->Misc.VirtualSize, - OutOptHeader->SectionAlignment); - } - if (RosSymOffset < CurrentSectionHeader->PointerToRawData + CurrentSectionHeader->SizeOfRawData) - { - RosSymOffset = CurrentSectionHeader->PointerToRawData + CurrentSectionHeader->SizeOfRawData; - } - if (Section == (ULONG)InRelocSectionIndex) - { - OutRelocSection = CurrentSectionHeader; - } - (OutFileHeader->NumberOfSections) ++; - CurrentSectionHeader++; - } - } - - if (OutRelocSection == CurrentSectionHeader - 1) - { - OutOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = ProcessedRelocsLength; - if (OutOptHeader->SizeOfImage == OutRelocSection->VirtualAddress + - ROUND_UP(OutRelocSection->Misc.VirtualSize, - OutOptHeader->SectionAlignment)) - { - OutOptHeader->SizeOfImage = OutRelocSection->VirtualAddress + - ROUND_UP(ProcessedRelocsLength, - OutOptHeader->SectionAlignment); - } - OutRelocSection->Misc.VirtualSize = ProcessedRelocsLength; - if (RosSymOffset == OutRelocSection->PointerToRawData - + OutRelocSection->SizeOfRawData) - { - RosSymOffset = OutRelocSection->PointerToRawData + - ROUND_UP(ProcessedRelocsLength, OutOptHeader->FileAlignment); - } - OutRelocSection->SizeOfRawData = ROUND_UP(ProcessedRelocsLength, - OutOptHeader->FileAlignment); - } - - if (RosSymLength > 0) - { - RosSymFileLength = ROUND_UP(RosSymLength, OutOptHeader->FileAlignment); - memcpy(CurrentSectionHeader->Name, ".rossym", 8); /* We're lucky: string is exactly 8 bytes long */ - CurrentSectionHeader->Misc.VirtualSize = RosSymLength; - CurrentSectionHeader->VirtualAddress = OutOptHeader->SizeOfImage; - CurrentSectionHeader->SizeOfRawData = RosSymFileLength; - CurrentSectionHeader->PointerToRawData = RosSymOffset; - CurrentSectionHeader->PointerToRelocations = 0; - CurrentSectionHeader->PointerToLinenumbers = 0; - CurrentSectionHeader->NumberOfRelocations = 0; - CurrentSectionHeader->NumberOfLinenumbers = 0; - CurrentSectionHeader->Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE - | IMAGE_SCN_LNK_REMOVE | IMAGE_SCN_TYPE_NOLOAD; - OutOptHeader->SizeOfImage = ROUND_UP(CurrentSectionHeader->VirtualAddress + - CurrentSectionHeader->Misc.VirtualSize, - OutOptHeader->SectionAlignment); - (OutFileHeader->NumberOfSections)++; - - PaddedRosSym = malloc(RosSymFileLength); - if (NULL == PaddedRosSym) - { - fprintf(stderr, "Failed to allocate %lu bytes for padded .rossym\n", RosSymFileLength); - return 1; - } - memcpy(PaddedRosSym, RosSymSection, RosSymLength); - memset((char *) PaddedRosSym + RosSymLength, '\0', RosSymFileLength - RosSymLength); - } - else - { - PaddedRosSym = NULL; - } - CheckSum = 0; - for (i = 0; i < StartOfRawData / 2; i++) - { - CheckSum += ((unsigned short*) OutHeader)[i]; - CheckSum = 0xffff & (CheckSum + (CheckSum >> 16)); - } - Length = StartOfRawData; - for (Section = 0; Section < OutFileHeader->NumberOfSections; Section++) - { - if (OutRelocSection == OutSectionHeaders + Section) - { - Data = (void *) ProcessedRelocs; - } - else if (RosSymLength > 0 && Section + 1 == OutFileHeader->NumberOfSections) - { - Data = (void *) PaddedRosSym; - } - else - { - Data = (void *) ((char *) InData + OutSectionHeaders[Section].PointerToRawData); - } - for (i = 0; i < OutSectionHeaders[Section].SizeOfRawData / 2; i++) - { - CheckSum += ((unsigned short*) Data)[i]; - CheckSum = 0xffff & (CheckSum + (CheckSum >> 16)); - } - Length += OutSectionHeaders[Section].SizeOfRawData; - } - CheckSum += Length; - OutOptHeader->CheckSum = CheckSum; - - if (fwrite(OutHeader, 1, StartOfRawData, OutFile) != StartOfRawData) - { - perror("Error writing output header\n"); - free(OutHeader); - return 1; - } - - for (Section = 0; Section < OutFileHeader->NumberOfSections; Section++) - { - if (0 != OutSectionHeaders[Section].SizeOfRawData) - { - fseek(OutFile, OutSectionHeaders[Section].PointerToRawData, SEEK_SET); - if (OutRelocSection == OutSectionHeaders + Section) - { - Data = (void *) ProcessedRelocs; - } - else if (RosSymLength > 0 && Section + 1 == OutFileHeader->NumberOfSections) - { - Data = (void *) PaddedRosSym; - } - else - { - Data = (void *) ((char *) InData + OutSectionHeaders[Section].PointerToRawData); - } - if (fwrite(Data, 1, OutSectionHeaders[Section].SizeOfRawData, OutFile) != - OutSectionHeaders[Section].SizeOfRawData) - { - perror("Error writing section data\n"); - free(PaddedRosSym); - free(OutHeader); - return 1; - } - } - } - - if (PaddedRosSym) - { - free(PaddedRosSym); - } - free(OutHeader); - - return 0; -} - -int main(int argc, char* argv[]) -{ - PSYMBOLFILE_HEADER SymbolFileHeader; - PIMAGE_DOS_HEADER PEDosHeader; - PIMAGE_FILE_HEADER PEFileHeader; - PIMAGE_OPTIONAL_HEADER PEOptHeader; - PIMAGE_SECTION_HEADER PESectionHeaders; - ULONG ImageBase; - void *StabBase; - ULONG StabsLength; - void *StabStringBase; - ULONG StabStringsLength; - void *CoffBase = NULL; - ULONG CoffsLength; - void *CoffStringBase = NULL; - ULONG CoffStringsLength; - char* path1; - char* path2; - FILE* out; - void *StringBase; - ULONG StringsLength; - ULONG StabSymbolsCount; - PROSSYM_ENTRY StabSymbols; - ULONG CoffSymbolsCount; - PROSSYM_ENTRY CoffSymbols; - ULONG MergedSymbolsCount; - PROSSYM_ENTRY MergedSymbols; - size_t FileSize; - void *FileData; - ULONG RosSymLength; - void *RosSymSection; - char elfhdr[4] = { '\177', 'E', 'L', 'F' }; - - if (3 != argc) - { - fprintf(stderr, "Usage: rsym \n"); - exit(1); - } - - path1 = convert_path(argv[1]); - path2 = convert_path(argv[2]); - - FileData = load_file ( path1, &FileSize ); - if ( !FileData ) - { - fprintf ( stderr, "An error occured loading '%s'\n", path1 ); - exit(1); - } - - /* Check if MZ header exists */ - PEDosHeader = (PIMAGE_DOS_HEADER) FileData; - if (PEDosHeader->e_magic != IMAGE_DOS_MAGIC || PEDosHeader->e_lfanew == 0L) - { - /* Ignore elf */ - if (!memcmp(PEDosHeader, elfhdr, sizeof(elfhdr))) - exit(0); - perror("Input file is not a PE image.\n"); - free(FileData); - exit(1); - } - - /* Locate PE file header */ - /* sizeof(ULONG) = sizeof(MAGIC) */ - PEFileHeader = (PIMAGE_FILE_HEADER)((char *) FileData + PEDosHeader->e_lfanew + sizeof(ULONG)); - - /* Locate optional header */ - assert(sizeof(ULONG) == 4); - PEOptHeader = (PIMAGE_OPTIONAL_HEADER)(PEFileHeader + 1); - ImageBase = PEOptHeader->ImageBase; - - /* Locate PE section headers */ - PESectionHeaders = (PIMAGE_SECTION_HEADER)((char *) PEOptHeader + PEFileHeader->SizeOfOptionalHeader); - - if (GetStabInfo(FileData, PEFileHeader, PESectionHeaders, &StabsLength, &StabBase, - &StabStringsLength, &StabStringBase)) - { - free(FileData); - exit(1); - } - - if (GetCoffInfo(FileData, PEFileHeader, PESectionHeaders, &CoffsLength, &CoffBase, - &CoffStringsLength, &CoffStringBase)) - { - free(FileData); - exit(1); - } - - StringBase = malloc(1 + StabStringsLength + CoffStringsLength + - (CoffsLength / sizeof(ROSSYM_ENTRY)) * (E_SYMNMLEN + 1)); - if (NULL == StringBase) - { - free(FileData); - fprintf(stderr, "Failed to allocate memory for strings table\n"); - exit(1); - } - /* Make offset 0 into an empty string */ - *((char *) StringBase) = '\0'; - StringsLength = 1; - - if (ConvertStabs(&StabSymbolsCount, &StabSymbols, &StringsLength, StringBase, - StabsLength, StabBase, StabStringsLength, StabStringBase, - ImageBase, PEFileHeader, PESectionHeaders)) - { - free(StringBase); - free(FileData); - fprintf(stderr, "Failed to allocate memory for strings table\n"); - exit(1); - } - - if (ConvertCoffs(&CoffSymbolsCount, &CoffSymbols, &StringsLength, StringBase, - CoffsLength, CoffBase, CoffStringsLength, CoffStringBase, - ImageBase, PEFileHeader, PESectionHeaders)) - { - if (StabSymbols) - { - free(StabSymbols); - } - free(StringBase); - free(FileData); - exit(1); - } - - if (MergeStabsAndCoffs(&MergedSymbolsCount, &MergedSymbols, - StabSymbolsCount, StabSymbols, - CoffSymbolsCount, CoffSymbols)) - { - if (CoffSymbols) - { - free(CoffSymbols); - } - if (StabSymbols) - { - free(StabSymbols); - } - free(StringBase); - free(FileData); - exit(1); - } - - if (CoffSymbols) - { - free(CoffSymbols); - } - if (StabSymbols) - { - free(StabSymbols); - } - if (MergedSymbolsCount == 0) - { - RosSymLength = 0; - RosSymSection = NULL; - } - else - { - RosSymLength = sizeof(SYMBOLFILE_HEADER) + MergedSymbolsCount * sizeof(ROSSYM_ENTRY) - + StringsLength; - RosSymSection = malloc(RosSymLength); - if (NULL == RosSymSection) - { - free(MergedSymbols); - free(StringBase); - free(FileData); - fprintf(stderr, "Unable to allocate memory for .rossym section\n"); - exit(1); - } - memset(RosSymSection, '\0', RosSymLength); - - SymbolFileHeader = (PSYMBOLFILE_HEADER) RosSymSection; - SymbolFileHeader->SymbolsOffset = sizeof(SYMBOLFILE_HEADER); - SymbolFileHeader->SymbolsLength = MergedSymbolsCount * sizeof(ROSSYM_ENTRY); - SymbolFileHeader->StringsOffset = SymbolFileHeader->SymbolsOffset + SymbolFileHeader->SymbolsLength; - SymbolFileHeader->StringsLength = StringsLength; - - memcpy((char *) RosSymSection + SymbolFileHeader->SymbolsOffset, MergedSymbols, - SymbolFileHeader->SymbolsLength); - memcpy((char *) RosSymSection + SymbolFileHeader->StringsOffset, StringBase, - SymbolFileHeader->StringsLength); - - free(MergedSymbols); - } - free(StringBase); - out = fopen(path2, "wb"); - if (out == NULL) - { - perror("Cannot open output file"); - free(RosSymSection); - free(FileData); - exit(1); - } - - if (CreateOutputFile(out, FileData, PEDosHeader, PEFileHeader, PEOptHeader, - PESectionHeaders, RosSymLength, RosSymSection)) - { - fclose(out); - if (RosSymSection) - { - free(RosSymSection); - } - free(FileData); - exit(1); - } - - fclose(out); - if (RosSymSection) - { - free(RosSymSection); - } - free(FileData); - - return 0; -} - -/* EOF */ diff --git a/reactos/tools/rsym.h b/reactos/tools/rsym.h deleted file mode 100644 index 8f23daaf5a8..00000000000 --- a/reactos/tools/rsym.h +++ /dev/null @@ -1,357 +0,0 @@ -/* rsym.h */ - -#ifndef RSYM_H -#define RSYM_H - -#define IMAGE_DOS_MAGIC 0x5a4d -#define IMAGE_PE_MAGIC 0x00004550 -#define IMAGE_SIZEOF_SHORT_NAME 8 - -#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 -#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 -#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 - -#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 - -#define IMAGE_SCN_TYPE_NOLOAD 0x00000002 -#define IMAGE_SCN_LNK_REMOVE 0x00000800 -#define IMAGE_SCN_MEM_READ 0x40000000 -#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 - -#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 - -typedef unsigned char BYTE; -typedef unsigned char UCHAR; -typedef unsigned short WORD; -typedef unsigned short USHORT; -typedef unsigned long long ULONGLONG; -#if defined(__x86_64__) && defined(unix) -typedef signed int LONG; -typedef unsigned int ULONG; -typedef unsigned int DWORD; -#else -typedef signed long LONG; -typedef unsigned long ULONG; -typedef unsigned long DWORD; -#endif -#if defined(_WIN64) -typedef unsigned __int64 ULONG_PTR; -#else -#if defined(__x86_64__) && defined(unix) -typedef unsigned int ULONG_PTR; -#else -typedef unsigned long ULONG_PTR; -#endif -#endif - -#pragma pack(push,2) - -typedef struct _IMAGE_DOS_HEADER { - WORD e_magic; - WORD e_cblp; - WORD e_cp; - WORD e_crlc; - WORD e_cparhdr; - WORD e_minalloc; - WORD e_maxalloc; - WORD e_ss; - WORD e_sp; - WORD e_csum; - WORD e_ip; - WORD e_cs; - WORD e_lfarlc; - WORD e_ovno; - WORD e_res[4]; - WORD e_oemid; - WORD e_oeminfo; - WORD e_res2[10]; - LONG e_lfanew; -} IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER; -#pragma pack(pop) - -#pragma pack(push,4) -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; -#pragma pack(pop) - -typedef struct _IMAGE_DATA_DIRECTORY { - DWORD VirtualAddress; - DWORD Size; -} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY; - -typedef struct _IMAGE_OPTIONAL_HEADER32 { - WORD Magic; - BYTE MajorLinkerVersion; - BYTE MinorLinkerVersion; - DWORD SizeOfCode; - DWORD SizeOfInitializedData; - DWORD SizeOfUninitializedData; - DWORD AddressOfEntryPoint; - DWORD BaseOfCode; - DWORD BaseOfData; - DWORD 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; - DWORD SizeOfStackReserve; - DWORD SizeOfStackCommit; - DWORD SizeOfHeapReserve; - DWORD SizeOfHeapCommit; - DWORD LoaderFlags; - DWORD NumberOfRvaAndSizes; - IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; -} IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32; - -typedef struct _IMAGE_OPTIONAL_HEADER64 { - WORD Magic; - 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; - - -#ifdef _TARGET_PE64 -typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER; -typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER; -#else -typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER; -typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER; -#endif - -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; - -#pragma pack(push,4) -typedef struct _IMAGE_BASE_RELOCATION { - DWORD VirtualAddress; - DWORD SizeOfBlock; - WORD TypeOffset[1]; -} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION; -#pragma pack(pop) - -typedef struct { - USHORT f_magic; /* magic number */ - USHORT f_nscns; /* number of sections */ - ULONG f_timdat; /* time & date stamp */ - ULONG f_symptr; /* file pointer to symtab */ - ULONG f_nsyms; /* number of symtab entries */ - USHORT f_opthdr; /* sizeof(optional hdr) */ - USHORT f_flags; /* flags */ -} FILHDR; - -typedef struct { - char s_name[8]; /* section name */ - ULONG s_paddr; /* physical address, aliased s_nlib */ - ULONG s_vaddr; /* virtual address */ - ULONG s_size; /* section size */ - ULONG s_scnptr; /* file ptr to raw data for section */ - ULONG s_relptr; /* file ptr to relocation */ - ULONG s_lnnoptr; /* file ptr to line numbers */ - USHORT s_nreloc; /* number of relocation entries */ - USHORT s_nlnno; /* number of line number entries */ - ULONG s_flags; /* flags */ -} SCNHDR; -#pragma pack(4) - -typedef struct _SYMBOLFILE_HEADER { - ULONG SymbolsOffset; - ULONG SymbolsLength; - ULONG StringsOffset; - ULONG StringsLength; -} SYMBOLFILE_HEADER, *PSYMBOLFILE_HEADER; - -typedef struct _STAB_ENTRY { - ULONG n_strx; /* index into string table of name */ - UCHAR n_type; /* type of symbol */ - UCHAR n_other; /* misc info (usually empty) */ - USHORT n_desc; /* description field */ - ULONG n_value; /* value of symbol */ -} STAB_ENTRY, *PSTAB_ENTRY; - -/* http://www.math.utah.edu/docs/info/stabs_12.html */ -#define N_GYSM 0x20 -#define N_FNAME 0x22 -#define N_FUN 0x24 -#define N_STSYM 0x26 -#define N_LCSYM 0x28 -#define N_MAIN 0x2A -#define N_PC 0x30 -#define N_NSYMS 0x32 -#define N_NOMAP 0x34 -#define N_RSYM 0x40 -#define N_M2C 0x42 -#define N_SLINE 0x44 -#define N_DSLINE 0x46 -#define N_BSLINE 0x48 -#define N_BROWS 0x48 -#define N_DEFD 0x4A -#define N_EHDECL 0x50 -#define N_MOD2 0x50 -#define N_CATCH 0x54 -#define N_SSYM 0x60 -#define N_SO 0x64 -#define N_LSYM 0x80 -#define N_BINCL 0x82 -#define N_SOL 0x84 -#define N_PSYM 0xA0 -#define N_EINCL 0xA2 -#define N_ENTRY 0xA4 -#define N_LBRAC 0xC0 -#define N_EXCL 0xC2 -#define N_SCOPE 0xC4 -#define N_RBRAC 0xE0 -#define N_BCOMM 0xE2 -#define N_ECOMM 0xE4 -#define N_ECOML 0xE8 -#define N_LENG 0xFE - -/* COFF symbol table */ - -#define E_SYMNMLEN 8 /* # characters in a symbol name */ -#define E_FILNMLEN 14 /* # characters in a file name */ -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -#define N_BTMASK (0xf) -#define N_TMASK (0x30) -#define N_BTSHFT (4) -#define N_TSHIFT (2) - -/* derived types, in e_type */ -#define DT_NON (0) /* no derived type */ -#define DT_PTR (1) /* pointer */ -#define DT_FCN (2) /* function */ -#define DT_ARY (3) /* array */ - -#define BTYPE(x) ((x) & N_BTMASK) - -#define ISPTR(x) (((x) & N_TMASK) == (DT_PTR << N_BTSHFT)) -#define ISFCN(x) (((x) & N_TMASK) == (DT_FCN << N_BTSHFT)) -#define ISARY(x) (((x) & N_TMASK) == (DT_ARY << N_BTSHFT)) -#define ISTAG(x) ((x)==C_STRTAG||(x)==C_UNTAG||(x)==C_ENTAG) -#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK)) - -#define C_EFCN 0xff /* physical end of function */ -#define C_NULL 0 -#define C_AUTO 1 /* automatic variable */ -#define C_EXT 2 /* external symbol */ -#define C_STAT 3 /* static */ -#define C_REG 4 /* register variable */ -#define C_EXTDEF 5 /* external definition */ -#define C_LABEL 6 /* label */ -#define C_ULABEL 7 /* undefined label */ -#define C_MOS 8 /* member of structure */ -#define C_ARG 9 /* function argument */ -#define C_STRTAG 10 /* structure tag */ -#define C_MOU 11 /* member of union */ -#define C_UNTAG 12 /* union tag */ -#define C_TPDEF 13 /* type definition */ -#define C_USTATIC 14 /* undefined static */ -#define C_ENTAG 15 /* enumeration tag */ -#define C_MOE 16 /* member of enumeration */ -#define C_REGPARM 17 /* register parameter */ -#define C_FIELD 18 /* bit field */ -#define C_AUTOARG 19 /* auto argument */ -#define C_LASTENT 20 /* dummy entry (end of block) */ -#define C_BLOCK 100 /* ".bb" or ".eb" */ -#define C_FCN 101 /* ".bf" or ".ef" */ -#define C_EOS 102 /* end of structure */ -#define C_FILE 103 /* file name */ -#define C_LINE 104 /* line # reformatted as symbol table entry */ -#define C_ALIAS 105 /* duplicate tag */ -#define C_HIDDEN 106 /* ext symbol in dmert public lib */ - -#pragma pack(1) -typedef struct _COFF_SYMENT -{ - union - { - char e_name[E_SYMNMLEN]; - struct - { - ULONG e_zeroes; - ULONG e_offset; - } - e; - } - e; - ULONG e_value; - short e_scnum; - USHORT e_type; - UCHAR e_sclass; - UCHAR e_numaux; -} COFF_SYMENT, *PCOFF_SYMENT; -#pragma pack(4) - -typedef struct _ROSSYM_ENTRY { - ULONG_PTR Address; - ULONG FunctionOffset; - ULONG FileOffset; - ULONG SourceLine; -} ROSSYM_ENTRY, *PROSSYM_ENTRY; - -#define ROUND_UP(N, S) (((N) + (S) - 1) & ~((S) - 1)) - -extern char* -convert_path(const char* origpath); - -extern void* -load_file ( const char* file_name, size_t* file_size ); - -#endif/*RSYM_H*/ diff --git a/reactos/tools/rsym.mak b/reactos/tools/rsym.mak deleted file mode 100644 index 527e548f275..00000000000 --- a/reactos/tools/rsym.mak +++ /dev/null @@ -1,45 +0,0 @@ -RSYM_BASE = $(TOOLS_BASE) -RSYM_BASE_ = $(RSYM_BASE)$(SEP) - -RSYM_INT = $(INTERMEDIATE_)$(RSYM_BASE) -RSYM_INT_ = $(RSYM_INT)$(SEP) -RSYM_OUT = $(OUTPUT_)$(RSYM_BASE) -RSYM_OUT_ = $(RSYM_OUT)$(SEP) - -RSYM_TARGET = \ - $(RSYM_OUT_)rsym$(EXEPOSTFIX) - -RSYM_SOURCES = \ - $(RSYM_BASE_)rsym.c \ - $(RSYM_BASE_)rsym_common.c - -RSYM_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(RSYM_SOURCES:.c=.o)) - -ifeq ($(ARCH),amd64) -RSYM_HOST_CFLAGS = $(TOOLS_CFLAGS) -D_TARGET_PE64 -else -RSYM_HOST_CFLAGS = $(TOOLS_CFLAGS) -endif - -RSYM_HOST_LFLAGS = $(TOOLS_LFLAGS) - -.PHONY: rsym -rsym: $(RSYM_TARGET) - -$(RSYM_TARGET): $(RSYM_OBJECTS) | $(RSYM_OUT) - $(ECHO_LD) - ${host_gcc} $(RSYM_OBJECTS) $(RSYM_HOST_LFLAGS) -o $@ - -$(RSYM_INT_)rsym.o: $(RSYM_BASE_)rsym.c | $(RSYM_INT) - $(ECHO_CC) - ${host_gcc} $(RSYM_HOST_CFLAGS) -c $< -o $@ - -$(RSYM_INT_)rsym_common.o: $(RSYM_BASE_)rsym_common.c | $(RSYM_INT) - $(ECHO_CC) - ${host_gcc} $(RSYM_HOST_CFLAGS) -c $< -o $@ - -.PHONY: rsym_clean -rsym_clean: - -@$(rm) $(RSYM_TARGET) $(RSYM_OBJECTS) 2>$(NUL) -clean: rsym_clean diff --git a/reactos/tools/rsym_common.c b/reactos/tools/rsym_common.c deleted file mode 100644 index 875463fe920..00000000000 --- a/reactos/tools/rsym_common.c +++ /dev/null @@ -1,62 +0,0 @@ -/* rsym_common.c */ - -#include -#include -#include - -#include "rsym.h" - -char* -convert_path ( const char* origpath ) -{ - char* newpath; - int i; - - newpath = strdup(origpath); - - i = 0; - while (newpath[i] != 0) - { -#ifdef UNIX_PATHS - if (newpath[i] == '\\') - { - newpath[i] = '/'; - } -#else -#ifdef DOS_PATHS - if (newpath[i] == '/') - { - newpath[i] = '\\'; - } -#endif -#endif - i++; - } - return(newpath); -} - -void* -load_file ( const char* file_name, size_t* file_size ) -{ - FILE* f; - void* FileData = NULL; - - f = fopen ( file_name, "rb" ); - if (f != NULL) - { - fseek(f, 0L, SEEK_END); - *file_size = ftell(f); - fseek(f, 0L, SEEK_SET); - FileData = malloc(*file_size); - if (FileData != NULL) - { - if ( *file_size != fread(FileData, 1, *file_size, f) ) - { - free(FileData); - FileData = NULL; - } - } - fclose(f); - } - return FileData; -} diff --git a/reactos/tools/ssprintf.cpp b/reactos/tools/ssprintf.cpp deleted file mode 100644 index 4e41579d41b..00000000000 --- a/reactos/tools/ssprintf.cpp +++ /dev/null @@ -1,1964 +0,0 @@ -/* - * 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. - */ - -// For character conversion functions like "wctomb" and "alloca" under Unix -#include - -#if defined(WIN32) - // Under Win32 hosts, "alloca" is not defined by stdlib.h, but by malloc.h - // On the other hand, malloc.h is deprecated under some Unix hosts, so only include it for Win32 hosts. - #include -#endif - -#include -#include -#include -#include -#include "ssprintf.h" - -#ifndef WIN32 -#define _finite __finite -#define _isnan __isnan -#endif - -#ifndef __APPLE__ -inline int iswdigit ( wchar_t c ) -{ - return ( c >= L'0' && c <= L'9' ); -} -#endif - -#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__CYGWIN__) -# define __isnan isnan -# define __finite finite -# define powl __builtin_powl -# define modfl __builtin_modfl -#endif // _FreeBSD__ - -#ifdef _MSC_VER -#define alloca _alloca -#endif//_MSC_VER - -#ifdef _MSC_VER -typedef __int64 LONGLONG; -typedef unsigned __int64 ULONGLONG; -#else -typedef long long LONGLONG; -typedef unsigned long long ULONGLONG; -#endif - -typedef struct { - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int sign:1; -} ieee_float_t; - -typedef struct { - unsigned int mantissal:32; - unsigned int mantissah:20; - unsigned int exponent:11; - unsigned int sign:1; -} ieee_double_t; - -typedef struct { - unsigned int mantissal:32; - unsigned int mantissah:32; - unsigned int exponent:15; - unsigned int sign:1; - unsigned int empty:16; -} ieee_long_double_t; - -std::string -ssprintf ( const char* fmt, ... ) -{ - va_list arg; - va_start(arg, fmt); - std::string f = ssvprintf ( fmt, arg ); - va_end(arg); - return f; -} - -std::wstring -sswprintf ( const wchar_t* fmt, ... ) -{ - va_list arg; - va_start(arg, fmt); - std::wstring f = sswvprintf ( fmt, arg ); - va_end(arg); - return f; -} - -#define ZEROPAD 1 /* pad with zero */ -#define SIGN 2 /* unsigned/signed long */ -#define PLUS 4 /* show plus */ -#define SPACE 8 /* space if plus */ -#define LEFT 16 /* left justified */ -#define SPECIAL 32 /* 0x */ -#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ -#define ZEROTRUNC 128 /* truncate zero 's */ - - -static int -skip_atoi(const char **s) -{ - int i=0; - - while (isdigit(**s)) - i = i*10 + *((*s)++) - '0'; - return i; -} - -static int -skip_wtoi(const wchar_t **s) -{ - int i=0; - - while (iswdigit(**s)) - i = i*10 + *((*s)++) - L'0'; - return i; -} - - -static int -do_div(LONGLONG *n,int base) -{ - int __res = ((ULONGLONG) *n) % (unsigned) base; - *n = ((ULONGLONG) *n) / (unsigned) base; - return __res; -} - - -static bool -number(std::string& f, LONGLONG num, int base, int size, int precision ,int type) -{ - char c,sign,tmp[66]; - const char *digits="0123456789abcdefghijklmnopqrstuvwxyz"; - int i; - - if (type & LARGE) - digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - if (type & LEFT) - type &= ~ZEROPAD; - if (base < 2 || base > 36) - return false; - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if (num < 0) { - sign = '-'; - num = -num; - size--; - } else if (type & PLUS) { - sign = '+'; - size--; - } else if (type & SPACE) { - sign = ' '; - size--; - } - } - if (type & SPECIAL) { - if (base == 16) - size -= 2; - else if (base == 8) - size--; - } - i = 0; - if (num == 0) - tmp[i++]='0'; - else while (num != 0) - tmp[i++] = digits[do_div(&num,base)]; - if (i > precision) - precision = i; - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - f += ' '; - if (sign) - f += sign; - if (type & SPECIAL) - { - if (base==8) - f += '0'; - else if (base==16) - { - f += '0'; - f += digits[33]; - } - } - if (!(type & LEFT)) - { - while (size-- > 0) - f += c; - } - while (i < precision--) - { - f += '0'; - } - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += ' '; - } - return true; -} - -static bool -wnumber(std::wstring& f, LONGLONG num, int base, int size, int precision ,int type) -{ - wchar_t c,sign,tmp[66]; - const wchar_t *digits = L"0123456789abcdefghijklmnopqrstuvwxyz"; - int i; - - if (type & LARGE) - digits = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - if (type & LEFT) - type &= ~ZEROPAD; - if (base < 2 || base > 36) - return 0; - c = (type & ZEROPAD) ? L'0' : L' '; - sign = false; - if (type & SIGN) { - if (num < 0) { - sign = L'-'; - num = -num; - size--; - } else if (type & PLUS) { - sign = L'+'; - size--; - } else if (type & SPACE) { - sign = L' '; - size--; - } - } - if (type & SPECIAL) { - if (base == 16) - size -= 2; - else if (base == 8) - size--; - } - i = 0; - if (num == 0) - tmp[i++]=L'0'; - else while (num != 0) - tmp[i++] = digits[do_div(&num,base)]; - if (i > precision) - precision = i; - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - f += L' '; - if (sign) - f += sign; - if (type & SPECIAL) - { - if (base==8) - f += L'0'; - else if (base==16) - { - f += L'0'; - f += digits[33]; - } - } - if (!(type & LEFT)) - { - while (size-- > 0) - f += c; - } - while (i < precision--) - { - f += L'0'; - } - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += L' '; - } - return true; -} - - -static bool -numberf(std::string& f, double __n, char exp_sign, int size, int precision, int type) -{ - double exponent = 0.0; - double e; - long ie; - - int i = 0; - int j = 0; - int ro = 0; - - double frac, intr; - double p; - char *buf, *tmp, sign, c; - int result; - - union - { - double* __n; - ieee_double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == 'g' || exp_sign == 'G' || exp_sign == 'e' || exp_sign == 'E' ) - { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff); - exponent = ie/3.321928; - } - - if ( exp_sign == 'g' || exp_sign == 'G' ) - { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - else - exp_sign = 'f'; - } - - if ( exp_sign == 'e' || exp_sign == 'E' ) - { - frac = modf(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = numberf(f,__n/pow(10.0L,(long double)e),'f',size-4, precision, type); - if (result < 0) - return false; - f += exp_sign; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = number(f,ie, 10,2, 2,type ); - if (result < 0) - return false; - return true; - } - - if ( exp_sign == 'f' ) - { - buf = (char*)alloca(4096); - if (type & LEFT) - type &= ~ZEROPAD; - - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) - { - if (__n < 0) - { - sign = '-'; - __n = fabs(__n); - size--; - } - else if (type & PLUS) - { - sign = '+'; - size--; - } - else if (type & SPACE) - { - sign = ' '; - size--; - } - } - - frac = modf(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - if ( precision > 0 ) - { - i = precision-1; - while ( i >= 0 ) - { - frac*=10.0L; - frac = modf(frac, &p); - buf[i] = (int)p + '0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) - ro = 1; - - if ( precision >= 1 || type & SPECIAL) - { - buf[i++] = '.'; - size--; - } - } - - if ( intr == 0.0 ) - { - buf[i++] = '0'; - size--; - } - else - { - while ( intr > 0.0 ) - { - p = intr; - intr/=10.0L; - modf(intr, &intr); - - p -= 10.0*intr; - - buf[i++] = (int)p + '0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1) - { - if ( buf[j] >= '0' && buf[j] <= '8' ) - { - buf[j]++; - ro = 0; - } - else if ( buf[j] == '9' ) - { - buf[j] = '0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = '1'; - - buf[i] = 0; - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += ' '; - } - if (sign) - { - f += sign; - } - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += ' '; - } - - if (!(type & LEFT)) - { - while (size-- > 0) - f += c; - } - - tmp = buf; - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) - { - j = 0; - while ( j < i && ( *tmp == '0' || *tmp == '.' )) - { - tmp++; - i--; - } - } - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += ' '; - } - } - return true; -} - -static bool -wnumberf(std::wstring& f, double __n, wchar_t exp_sign, int size, int precision, int type) -{ - double exponent = 0.0; - double e; - long ie; - - int i = 0; - int j = 0; - int ro = 0; - - double frac, intr; - double p; - wchar_t *buf, *tmp, sign, c; - int result; - - union - { - double* __n; - ieee_double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == L'g' || exp_sign == L'G' || exp_sign == L'e' || exp_sign == L'E' ) - { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff); - exponent = ie/3.321928; - } - - if ( exp_sign == L'g' || exp_sign == L'G' ) - { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - else - exp_sign = L'f'; - } - - if ( exp_sign == L'e' || exp_sign == L'E' ) - { - frac = modf(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = wnumberf(f,__n/pow(10.0L,(long double) e),L'f',size-4, precision, type); - if (result < 0) - return false; - f += exp_sign; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = wnumber(f,ie, 10,2, 2,type ); - if (result < 0) - return false; - return true; - } - - if ( exp_sign == L'f' ) - { - buf = (wchar_t*)alloca(4096*sizeof(wchar_t)); - if (type & LEFT) - type &= ~ZEROPAD; - - c = (type & ZEROPAD) ? L'0' : L' '; - sign = 0; - if (type & SIGN) - { - if (__n < 0) - { - sign = L'-'; - __n = fabs(__n); - size--; - } - else if (type & PLUS) - { - sign = L'+'; - size--; - } - else if (type & SPACE) - { - sign = L' '; - size--; - } - } - - frac = modf(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - if ( precision > 0 ) - { - i = precision-1; - while ( i >= 0 ) - { - frac*=10.0L; - frac = modf(frac, &p); - buf[i] = (int)p + L'0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) - ro = 1; - - if ( precision >= 1 || type & SPECIAL) - { - buf[i++] = L'.'; - size--; - } - } - - if ( intr == 0.0 ) - { - buf[i++] = L'0'; - size--; - } - else - { - while ( intr > 0.0 ) - { - p = intr; - intr/=10.0L; - modf(intr, &intr); - - p -= 10.0*intr; - - buf[i++] = (int)p + L'0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1) - { - if ( buf[j] >= L'0' && buf[j] <= L'8' ) - { - buf[j]++; - ro = 0; - } - else if ( buf[j] == L'9' ) - { - buf[j] = L'0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = L'1'; - - buf[i] = 0; - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += L' '; - } - if (sign) - { - f += sign; - } - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += L' '; - } - - if (!(type & LEFT)) - { - while (size-- > 0) - f += c; - } - - tmp = buf; - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) - { - j = 0; - while ( j < i && ( *tmp == L'0' || *tmp == L'.' )) - { - tmp++; - i--; - } - } - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += L' '; - } - } - return true; -} - -static bool -numberfl(std::string& f, long double __n, char exp_sign, int size, int precision, int type) -{ - long double exponent = 0.0; - long double e; - long ie; - - int i = 0; - int j = 0; - int ro = 0; - - long double frac, intr; - long double p; - char *buf, *tmp, sign, c; - int result; - - union - { - long double* __n; - ieee_long_double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == 'g' || exp_sign == 'G' || exp_sign == 'e' || exp_sign == 'E' ) - { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3fff); - exponent = ie/3.321928; - } - - if ( exp_sign == 'g' || exp_sign == 'G' ) - { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - else - exp_sign = 'f'; - } - - if ( exp_sign == 'e' || exp_sign == 'E' ) - { - frac = modfl(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = numberf(f,__n/powl(10.0L,e),'f',size-4, precision, type); - if (result < 0) - return false; - f += exp_sign; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = number(f,ie, 10,2, 2,type ); - if (result < 0) - return false; - return true; - } - - if ( exp_sign == 'f' ) - { - buf = (char*)alloca(4096); - if (type & LEFT) - type &= ~ZEROPAD; - - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) - { - if (__n < 0) - { - sign = '-'; - __n = fabs(__n); - size--; - } - else if (type & PLUS) - { - sign = '+'; - size--; - } - else if (type & SPACE) - { - sign = ' '; - size--; - } - } - - frac = modfl(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - if ( precision > 0 ) - { - i = precision-1; - while ( i >= 0 ) - { - frac*=10.0L; - frac = modfl((long double)frac, &p); - buf[i] = (int)p + '0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) - ro = 1; - - if ( precision >= 1 || type & SPECIAL) - { - buf[i++] = '.'; - size--; - } - } - - if ( intr == 0.0 ) - { - buf[i++] = '0'; - size--; - } - else - { - while ( intr > 0.0 ) - { - p = intr; - intr/=10.0L; - modfl(intr, &intr); - - p -= 10.0L*intr; - - buf[i++] = (int)p + '0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1) - { - if ( buf[j] >= '0' && buf[j] <= '8' ) - { - buf[j]++; - ro = 0; - } - else if ( buf[j] == '9' ) - { - buf[j] = '0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = '1'; - - buf[i] = 0; - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += ' '; - } - if (sign) - { - f += sign; - } - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += ' '; - } - - if (!(type & LEFT)) - { - while (size-- > 0) - f += c; - } - - tmp = buf; - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) - { - j = 0; - while ( j < i && ( *tmp == '0' || *tmp == '.' )) - { - tmp++; - i--; - } - } - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += ' '; - } - } - return true; -} - -static bool -wnumberfl(std::wstring& f, long double __n, wchar_t exp_sign, int size, int precision, int type) -{ - long double exponent = 0.0; - long double e; - long ie; - - int i = 0; - int j = 0; - int ro = 0; - - long double frac, intr; - long double p; - wchar_t *buf, *tmp, sign, c; - int result; - - union - { - long double* __n; - ieee_long_double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == L'g' || exp_sign == L'G' || exp_sign == L'e' || exp_sign == L'E' ) - { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3fff); - exponent = ie/3.321928; - } - - if ( exp_sign == L'g' || exp_sign == L'G' ) - { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - else - exp_sign = 'f'; - } - - if ( exp_sign == L'e' || exp_sign == L'E' ) - { - frac = modfl(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = wnumberf(f,__n/powl(10.0L,e),L'f',size-4, precision, type); - if (result < 0) - return false; - f += exp_sign; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = wnumber(f,ie, 10,2, 2,type ); - if (result < 0) - return false; - return true; - } - - if ( exp_sign == L'f' ) - { - buf = (wchar_t*)alloca(4096*sizeof(wchar_t)); - if (type & LEFT) - type &= ~ZEROPAD; - - c = (type & ZEROPAD) ? L'0' : L' '; - sign = 0; - if (type & SIGN) - { - if (__n < 0) - { - sign = L'-'; - __n = fabs(__n); - size--; - } - else if (type & PLUS) - { - sign = L'+'; - size--; - } - else if (type & SPACE) - { - sign = L' '; - size--; - } - } - - frac = modfl(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - if ( precision > 0 ) - { - i = precision-1; - while ( i >= 0 ) - { - frac*=10.0L; - frac = modfl((long double)frac, &p); - buf[i] = (int)p + L'0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) - ro = 1; - - if ( precision >= 1 || type & SPECIAL) - { - buf[i++] = L'.'; - size--; - } - } - - if ( intr == 0.0 ) - { - buf[i++] = L'0'; - size--; - } - else - { - while ( intr > 0.0 ) - { - p = intr; - intr/=10.0L; - modfl(intr, &intr); - - p -= 10.0L*intr; - - buf[i++] = (int)p + L'0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1) - { - if ( buf[j] >= L'0' && buf[j] <= L'8' ) - { - buf[j]++; - ro = 0; - } - else if ( buf[j] == L'9' ) - { - buf[j] = L'0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = L'1'; - - buf[i] = 0; - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += L' '; - } - if (sign) - { - f += sign; - } - - if (!(type&(ZEROPAD+LEFT))) - { - while(size-->0) - f += L' '; - } - - if (!(type & LEFT)) - { - while (size-- > 0) - f += c; - } - - tmp = buf; - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) - { - j = 0; - while ( j < i && ( *tmp == L'0' || *tmp == L'.' )) - { - tmp++; - i--; - } - } - while (i-- > 0) - { - f += tmp[i]; - } - while (size-- > 0) - { - f += L' '; - } - } - return true; -} - -static int -do_string(std::string& f, const char* s, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (s == NULL) - { - s = ""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && s[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - f += ' '; - done++; - } - for (i = 0; i < len; ++i) - { - f += *s++; - done++; - } - while (len < field_width--) - { - f += ' '; - done++; - } - return done; -} - -static int -do_wstring(std::wstring& f, const wchar_t* s, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (s == NULL) - { - s = L""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && s[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - f += L' '; - done++; - } - for (i = 0; i < len; ++i) - { - f += *s++; - done++; - } - while (len < field_width--) - { - f += L' '; - done++; - } - return done; -} - -static int -stringw(std::string& f, const wchar_t* sw, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (sw == NULL) - { - sw = L""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && sw[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - f += ' '; - done++; - } - for (i = 0; i < len; ++i) - { -#define MY_MB_CUR_MAX 1 - char mb[MY_MB_CUR_MAX]; - int mbcount, j; - mbcount = wctomb(mb, *sw++); - if (mbcount <= 0) - { - break; - } - for (j = 0; j < mbcount; j++) - { - f += mb[j]; - done++; - } - } - while (len < field_width--) - { - f += ' '; - done++; - } - return done; -} - -static int -wstringa(std::wstring& f, const char* sa, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (sa == NULL) - { - sa = ""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && sa[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - f += L' '; - done++; - } - for (i = 0; i < len;) - { - wchar_t w; - int mbcount; - mbcount = mbtowc(&w, sa+i, len-i); - if (mbcount <= 0) - break; - f += w; - done++; - i += mbcount; - } - while (len < field_width--) - { - f += L' '; - done++; - } - return done; -} - -#define _isnanl _isnan -#define _finitel _finite - -std::string -ssvprintf ( const char *fmt, va_list args ) -{ - ULONGLONG num; - int base; - long double _ldouble; - double _double; - const char *s; - const wchar_t* sw; - int result; - std::string f; - - int flags; /* flags to number() */ - - int field_width; /* width of output field */ - int precision; /* min. # of digits for integers; max - number of chars for from string */ - int qualifier = 0; /* 'h', 'l', 'L' or 'I64' for integer fields */ - - for (; *fmt ; ++fmt) - { - if (*fmt != '%') - { - f += *fmt; - continue; - } - - /* process flags */ - flags = 0; - repeat: - ++fmt; /* this also skips first '%' */ - switch (*fmt) { - case '-': flags |= LEFT; goto repeat; - case '+': flags |= PLUS; goto repeat; - case ' ': flags |= SPACE; goto repeat; - case '#': flags |= SPECIAL; goto repeat; - case '0': flags |= ZEROPAD; goto repeat; - } - - /* get field width */ - field_width = -1; - if (isdigit(*fmt)) - field_width = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - field_width = va_arg(args, int); - if (field_width < 0) { - field_width = -field_width; - flags |= LEFT; - } - } - - /* get the precision */ - precision = -1; - if (*fmt == '.') { - ++fmt; - if (isdigit(*fmt)) - precision = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - precision = va_arg(args, int); - } - if (precision < 0) - precision = 0; - } - - /* get the conversion qualifier */ - qualifier = 0; - // %Z can be just stand alone or as size_t qualifier - if ( *fmt == 'Z' ) { - qualifier = *fmt; - switch ( *(fmt+1)) { - case 'o': - case 'b': - case 'X': - case 'x': - case 'd': - case 'i': - case 'u': - ++fmt; - break; - default: - break; - } - } else if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'w') { - qualifier = *fmt; - ++fmt; - } else if (*fmt == 'I' && *(fmt+1) == '6' && *(fmt+2) == '4') { - qualifier = *fmt; - fmt += 3; - } - - // go fine with ll instead of L - if ( *fmt == 'l' ) { - ++fmt; - qualifier = 'L'; - } - - /* default base */ - base = 10; - - switch (*fmt) { - case 'c': - if (!(flags & LEFT)) - while (--field_width > 0) - { - f += ' '; - } - if (qualifier == 'l' || qualifier == 'w') - { - f += (char)(unsigned char)(wchar_t) va_arg(args,int); - } - else - { - f += (char)(unsigned char) va_arg(args,int); - } - while (--field_width > 0) - { - f += ' '; - } - continue; - - case 'C': - if (!(flags & LEFT)) - while (--field_width > 0) - { - f += ' '; - } - if (qualifier == 'h') - { - f += (char)(unsigned char) va_arg(args,int); - } - else - { - f += (char)(unsigned char)(wchar_t) va_arg(args,int); - } - while (--field_width > 0) - { - f += ' '; - } - continue; - - case 's': - if (qualifier == 'l' || qualifier == 'w') { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } else { - /* print ascii string */ - s = va_arg(args, char *); - result = do_string(f, s, -1, field_width, precision, flags); - } - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - case 'S': - if (qualifier == 'h') { - /* print ascii string */ - s = va_arg(args, char *); - result = do_string(f, s, -1, field_width, precision, flags); - } else { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - /*case 'Z': - if (qualifier == 'w') { - // print counted unicode string - PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING); - if ((pus == NULL) || (pus->Buffer == NULL)) { - sw = NULL; - len = -1; - } else { - sw = pus->Buffer; - len = pus->Length / sizeof(WCHAR); - } - result = stringw(f, sw, len, field_width, precision, flags); - } else { - // print counted ascii string - PANSI_STRING pas = va_arg(args, PANSI_STRING); - if ((pas == NULL) || (pas->Buffer == NULL)) { - s = NULL; - len = -1; - } else { - s = pas->Buffer; - len = pas->Length; - } - result = string(f, s, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - continue;*/ - - case 'e': - case 'E': - case 'f': - case 'g': - case 'G': - if (qualifier == 'l' || qualifier == 'L' ) { - _ldouble = va_arg(args, long double); - - if ( _isnanl(_ldouble) ) - { - f += "Nan"; - } - else if ( !_finitel(_ldouble) ) - { - if ( _ldouble < 0 ) - f += "-Inf"; - else - f += "+Inf"; - } else { - if ( precision == -1 ) - precision = 6; - result = numberfl(f,_ldouble,*fmt,field_width,precision,flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - } else { - _double = (double)va_arg(args, double); - - if ( _isnan(_double) ) - { - f += "Nan"; - } - else if ( !_finite(_double) ) - { - if ( _double < 0 ) - f += "-Inf"; - else - f += "+Inf"; - } - else - { - if ( precision == -1 ) - precision = 6; - result = numberf(f,_double,*fmt,field_width,precision,flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - } - continue; - - case 'p': - if (field_width == -1) { - field_width = 2*sizeof(void *); - flags |= ZEROPAD; - } - result = number(f, - (unsigned long) va_arg(args, void *), 16, - field_width, precision, flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - case 'n': - if (qualifier == 'l') { - long * ip = va_arg(args, long *); - *ip = 0; - } else { - int * ip = va_arg(args, int *); - *ip = 0; - } - continue; - - /* integer number formats - set up the flags and "break" */ - case 'o': - base = 8; - break; - - case 'b': - base = 2; - break; - - case 'X': - flags |= LARGE; - case 'x': - base = 16; - break; - - case 'd': - case 'i': - flags |= SIGN; - case 'u': - break; - - default: - if (*fmt != '%') - { - f += '%'; - } - if (*fmt) - { - f += *fmt; - } - else - --fmt; - continue; - } - - if (qualifier == 'I') - num = va_arg(args, ULONGLONG); - else if (qualifier == 'l') { - if (flags & SIGN) - num = va_arg(args, long); - else - num = va_arg(args, unsigned long); - } - else if (qualifier == 'h') { - if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - } - else if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - result = number(f, num, base, field_width, precision, flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - //putc('\0',f); - return f; -} - -std::wstring -sswvprintf ( const wchar_t* fmt, va_list args ) -{ - ULONGLONG num; - int base; - long double _ldouble; - double _double; - const wchar_t* s; - const char* sa; - int result; - std::wstring f; - - int flags; /* flags to number() */ - - int field_width; /* width of output field */ - int precision; /* min. # of digits for integers; max - number of chars for from string */ - int qualifier = 0; /* 'h', 'l', 'L' or 'I64' for integer fields */ - - for (; *fmt ; ++fmt) - { - if (*fmt != L'%') - { - f += *fmt; - continue; - } - - /* process flags */ - flags = 0; - repeat: - ++fmt; /* this also skips first '%' */ - switch (*fmt) { - case L'-': flags |= LEFT; goto repeat; - case L'+': flags |= PLUS; goto repeat; - case L' ': flags |= SPACE; goto repeat; - case L'#': flags |= SPECIAL; goto repeat; - case L'0': flags |= ZEROPAD; goto repeat; - } - - /* get field width */ - field_width = -1; - if (isdigit(*fmt)) - field_width = skip_wtoi(&fmt); - else if (*fmt == L'*') { - ++fmt; - /* it's the next argument */ - field_width = va_arg(args, int); - if (field_width < 0) { - field_width = -field_width; - flags |= LEFT; - } - } - - /* get the precision */ - precision = -1; - if (*fmt == L'.') { - ++fmt; - if (iswdigit(*fmt)) - precision = skip_wtoi(&fmt); - else if (*fmt == L'*') { - ++fmt; - /* it's the next argument */ - precision = va_arg(args, int); - } - if (precision < 0) - precision = 0; - } - - /* get the conversion qualifier */ - qualifier = 0; - // %Z can be just stand alone or as size_t qualifier - if ( *fmt == L'Z' ) { - qualifier = *fmt; - switch ( *(fmt+1)) { - case L'o': - case L'b': - case L'X': - case L'x': - case L'd': - case L'i': - case L'u': - ++fmt; - break; - default: - break; - } - } else if (*fmt == L'h' || *fmt == L'l' || *fmt == L'L' || *fmt == L'w') { - qualifier = *fmt; - ++fmt; - } else if (*fmt == L'I' && *(fmt+1) == L'6' && *(fmt+2) == L'4') { - qualifier = *fmt; - fmt += 3; - } - - // go fine with ll instead of L - if ( *fmt == L'l' ) { - ++fmt; - qualifier = L'L'; - } - - /* default base */ - base = 10; - - switch (*fmt) { - case L'c': - if (!(flags & LEFT)) - while (--field_width > 0) - { - f += L' '; - } - if ( qualifier == L'h' ) - { - f += (wchar_t)(char)(unsigned char) va_arg(args,int); - } - else - { - f += (wchar_t) va_arg(args,int); - } - while (--field_width > 0) - { - f += ' '; - } - continue; - - case 'C': - if (!(flags & LEFT)) - while (--field_width > 0) - { - f += L' '; - } - if (qualifier == L'l' || qualifier == L'w') - { - f += (wchar_t) va_arg(args,int); - } - else - { - f += (wchar_t)(char)(unsigned char) va_arg(args,int); - } - while (--field_width > 0) - { - f += L' '; - } - continue; - - case 's': - if (qualifier == L'h') { - /* print ascii string */ - sa = va_arg(args, char *); - result = wstringa(f, sa, -1, field_width, precision, flags); - } else { - /* print unicode string */ - s = va_arg(args, wchar_t *); - result = do_wstring(f, s, -1, field_width, precision, flags); - } - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - case 'S': - if (qualifier == L'l' || qualifier == L'w') { - /* print unicode string */ - s = va_arg(args, wchar_t *); - result = do_wstring(f, s, -1, field_width, precision, flags); - } else { - /* print ascii string */ - sa = va_arg(args, char *); - result = wstringa(f, sa, -1, field_width, precision, flags); - } - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - case L'e': - case L'E': - case L'f': - case L'g': - case L'G': - if (qualifier == L'l' || qualifier == L'L' ) - { - _ldouble = va_arg(args, long double); - - if ( _isnanl(_ldouble) ) - { - f += L"Nan"; - } - else if ( !_finitel(_ldouble) ) - { - if ( _ldouble < 0 ) - f += L"-Inf"; - else - f += L"+Inf"; - } else { - if ( precision == -1 ) - precision = 6; - result = wnumberfl(f,_ldouble,*fmt,field_width,precision,flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - } else { - _double = (double)va_arg(args, double); - - if ( _isnan(_double) ) - { - f += L"Nan"; - } - else if ( !_finite(_double) ) - { - if ( _double < 0 ) - f += L"-Inf"; - else - f += L"+Inf"; - } - else - { - if ( precision == -1 ) - precision = 6; - result = wnumberf(f,_double,*fmt,field_width,precision,flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - } - continue; - - case L'p': - if (field_width == -1) { - field_width = 2*sizeof(void *); - flags |= ZEROPAD; - } - result = wnumber(f, - (unsigned long) va_arg(args, void *), 16, - field_width, precision, flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - continue; - - case L'n': - if (qualifier == L'l') { - long * ip = va_arg(args, long *); - *ip = 0; - } else { - int * ip = va_arg(args, int *); - *ip = 0; - } - continue; - - /* integer number formats - set up the flags and "break" */ - case L'o': - base = 8; - break; - - case L'b': - base = 2; - break; - - case L'X': - flags |= LARGE; - case L'x': - base = 16; - break; - - case L'd': - case L'i': - flags |= SIGN; - case L'u': - break; - - default: - if (*fmt != L'%') - { - f += L'%'; - } - if (*fmt) - { - f += *fmt; - } - else - --fmt; - continue; - } - - if (qualifier == L'I') - num = va_arg(args, ULONGLONG); - else if (qualifier == L'l') { - if (flags & SIGN) - num = va_arg(args, long); - else - num = va_arg(args, unsigned long); - } - else if (qualifier == L'h') { - if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - } - else if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - result = wnumber(f, num, base, field_width, precision, flags); - if (result < 0) - { - assert(!"TODO FIXME handle error better"); - return f; - } - } - //putc('\0',f); - return f; -} diff --git a/reactos/tools/ssprintf.h b/reactos/tools/ssprintf.h deleted file mode 100644 index d1ca48e82e0..00000000000 --- a/reactos/tools/ssprintf.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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. - */ -#ifndef SSPRINTF_H -#define SSPRINTF_H - -#include -#include - -#ifdef __CYGWIN__ -namespace std { - typedef basic_string wstring; -} -#endif - -std::string ssprintf ( const char* fmt, ... ); -std::string ssvprintf ( const char* fmt, va_list args ); - -std::wstring sswprintf ( const wchar_t* fmt, ... ); -std::wstring sswvprintf ( const wchar_t* fmt, va_list args ); - -#ifdef _UNICODE -#define sstprintf sswprintf -#define sstvprintf sswvprintf -#else -#define sstprintf ssprintf -#define sstvprintf ssvprintf -#endif - -#endif diff --git a/reactos/tools/stubgen.c b/reactos/tools/stubgen.c deleted file mode 100644 index 6d9aa387d9e..00000000000 --- a/reactos/tools/stubgen.c +++ /dev/null @@ -1,157 +0,0 @@ -#include -#include -#include -#include - -#ifdef _WIN32 -#define popen _popen -#define snprintf _snprintf -#endif - -typedef struct _stub { - char *name; - char *origin; - struct _stub *next; -} stub; - -void usage( char *name ) { - fprintf( stderr, - "Usage: %s [-n nm] [-m make] libs...\n" - "nm -- The command used to run nm on reactos objects\n" - "make -- The command used to build reactos\n\n" - "libs are import libraries (.a files) typically from\n" - "dk/lib/nkm and dk/lib/w32\n", - name ); -} - -int main( int argc, char **argv ) { - char line[1024]; - char *make = "make"; - char *nm = "nm"; - char *origin = "unknown.a"; - stub *functions = NULL, *new_f, *imports = NULL, *search; - FILE *make_f, *nm_f; - int i, libstart = argc; - FILE *out = fopen("tests/stubs.tst","w"); - - if( argc == 1 ) { usage(argv[0]); return 1; } - - if( !out ) { - fprintf( stderr, "Could not write file tests/stubs.tst\n" ); - return 1; - } - - fprintf( out, "# Automatically generated by stubgen\n" ); - - for( i = 1; i < argc; i++ ) { - if( !strcmp( argv[i], "-m" ) ) { - make = argv[i+1]; - i++; - } else if( !strcmp( argv[i], "-n" ) ) { - nm = argv[i+1]; - i++; - } else { libstart = i; break; } - } - - snprintf( line, sizeof(line), "%s test 2>&1", make ); - make_f = popen( line, "r" ); - - if( !make_f ) { - fclose( out ); - fprintf( stderr, "Could not run %s test\n", make ); - return 1; - } - - while( fgets( line, sizeof(line), make_f ) ) { - char *end_of_location; - char *begin_q, *end_q; - - if( !strstr( line, "undefined reference to" ) ) continue; - - end_of_location = strrchr( line, ':' ); - - if( !end_of_location ) continue; - - begin_q = strchr( end_of_location, '`' ); - end_q = strchr( end_of_location, '\'' ); - - if( !begin_q || !end_q ) continue; - - begin_q += 2; /* skip `_ */ - - memmove( line, begin_q, end_q - begin_q ); - line[end_q - begin_q] = 0; - - for( new_f = functions; new_f; new_f = new_f->next ) - if( !strcmp( new_f->name, line ) ) break; - - if( new_f ) continue; - - new_f = (stub *)malloc( sizeof(stub) ); - if( !new_f ) {fprintf( stderr, "Out of memory\n" ); return 1;} - - new_f->name = strdup( line ); - new_f->next = functions; - functions = new_f; - } - - /* Scan libraries and collect available import sections */ - for( i = libstart; i < argc; i++ ) { - snprintf( line, sizeof(line), "%s %s", nm, argv[i] ); - nm_f = popen( line, "r" ); - - for( origin = argv[i]; *argv[i]; argv[i]++ ) - if( *argv[i] == '/' || *argv[i] == '\\' ) - origin = argv[i] + 1; - - - if( !nm_f ) { - fprintf( stderr, "Could not run %s\n", line ); - continue; - } - - while( fgets( line, sizeof(line), nm_f ) ) { - char *import_sign, *eol; - - if( !(import_sign = strstr( line, " I " )) ) continue; - - import_sign += 3; - while( *import_sign && isspace(*import_sign) ) import_sign++; - - /* Strip ws after name */ - for( eol = import_sign; *eol && !isspace(*eol); eol++ ); - - *eol = 0; - - for( new_f = imports; new_f; new_f = new_f->next ) - if( !strcmp( new_f->name, import_sign ) ) break; - - if( new_f ) continue; - - new_f = (stub *)malloc( sizeof(stub) ); - if( !new_f ) {fprintf( stderr, "Out of memory\n" ); return 1;} - - new_f->name = strdup( import_sign + 1 ); - new_f->origin = origin; - new_f->next = imports; - imports = new_f; - } - - fclose( nm_f ); - } - - /* Now we have a list of unique functions and a list of imports, - lookup each function and output the entry from the import list. */ - for( new_f = functions; new_f; new_f = new_f->next ) { - for( search = imports; search; search = search->next ) { - if( !strcmp( new_f->name, search->name ) ) { - fprintf( out, "%s %s\n", search->origin, search->name ); - continue; - } - } - } - - fclose( out ); - - return 0; -} diff --git a/reactos/tools/tools.mak b/reactos/tools/tools.mak deleted file mode 100644 index 256ce7a09e8..00000000000 --- a/reactos/tools/tools.mak +++ /dev/null @@ -1,53 +0,0 @@ -TOOLS_BASE = tools -TOOLS_BASE_ = $(TOOLS_BASE)$(SEP) -TOOLS_INT = $(INTERMEDIATE_)$(TOOLS_BASE) -TOOLS_INT_ = $(TOOLS_INT)$(SEP) -TOOLS_OUT = $(OUTPUT_)$(TOOLS_BASE) -TOOLS_OUT_ = $(TOOLS_OUT)$(SEP) - -TOOLS_CFLAGS = -Wall -Wpointer-arith -Wno-strict-aliasing -D__REACTOS__ $(HOST_CFLAGS) -TOOLS_CPPFLAGS = -Wall -Wpointer-arith -D__REACTOS__ $(HOST_CPPFLAGS) -TOOLS_LFLAGS = $(HOST_LFLAGS) - -$(TOOLS_INT): | $(INTERMEDIATE) - $(ECHO_MKDIR) - ${mkdir} $@ - -ifneq ($(INTERMEDIATE),$(OUTPUT)) -$(TOOLS_OUT): | $(OUTPUT) - $(ECHO_MKDIR) - ${mkdir} $@ -endif - -XML_SSPRINTF_SOURCES = $(addprefix $(TOOLS_BASE_), \ - ssprintf.cpp \ - xml.cpp \ - ) - -XML_SSPRINTF_HEADERS = $(addprefix $(TOOLS_BASE_), \ - ssprintf.h \ - xml.h \ - ) - -XML_SSPRINTF_OBJECTS = \ - $(addprefix $(INTERMEDIATE_), $(XML_SSPRINTF_SOURCES:.cpp=.o)) - -$(TOOLS_INT_)ssprintf.o: $(TOOLS_BASE_)ssprintf.cpp $(XML_SSPRINTF_HEADERS) | $(TOOLS_INT) - $(ECHO_CC) - ${host_gpp} $(TOOLS_CPPFLAGS) -c $< -o $@ - -$(TOOLS_INT_)xml.o: $(TOOLS_BASE_)xml.cpp $(XML_SSPRINTF_HEADERS) | $(TOOLS_INT) - $(ECHO_CC) - ${host_gpp} $(TOOLS_CPPFLAGS) -c $< -o $@ - -include tools/bin2c.mak -include tools/buildno/buildno.mak -include tools/gendib/gendib.mak -ifeq ($(ARCH),powerpc) -include tools/ofw_interface/ofw_interface.mak -endif -include tools/nci/nci.mak -include tools/pefixup.mak -include tools/raddr2line.mak -include tools/rbuild/rbuild.mak -include tools/rsym.mak diff --git a/reactos/tools/tools.rbuild b/reactos/tools/tools.rbuild deleted file mode 100644 index 6b571e6c010..00000000000 --- a/reactos/tools/tools.rbuild +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/reactos/tools/unicode/Makefile.in b/reactos/tools/unicode/Makefile.in deleted file mode 100644 index b0419c716df..00000000000 --- a/reactos/tools/unicode/Makefile.in +++ /dev/null @@ -1,88 +0,0 @@ -TOPSRCDIR = @top_srcdir@ -TOPOBJDIR = ../.. -SRCDIR = @srcdir@ -VPATH = @srcdir@ -LIBRARY = wine_unicode -SOVERSION = 1 -VERSCRIPT = $(SRCDIR)/wine_unicode.map -EXTRADEFS = -D__WINESRC__ -DNO_LIBWINE_PORT -DWINE_UNICODE_API="" - -CODEPAGES = \ - 037 \ - 424 \ - 437 \ - 500 \ - 737 \ - 775 \ - 850 \ - 852 \ - 855 \ - 856 \ - 857 \ - 860 \ - 861 \ - 862 \ - 863 \ - 864 \ - 865 \ - 866 \ - 869 \ - 874 \ - 875 \ - 878 \ - 932 \ - 936 \ - 949 \ - 950 \ - 1006 \ - 1026 \ - 1250 \ - 1251 \ - 1252 \ - 1253 \ - 1254 \ - 1255 \ - 1256 \ - 1257 \ - 1258 \ - 10000 \ - 10006 \ - 10007 \ - 10029 \ - 10079 \ - 10081 \ - 20866 \ - 20932 \ - 21866 \ - 28591 \ - 28592 \ - 28593 \ - 28594 \ - 28595 \ - 28596 \ - 28597 \ - 28598 \ - 28599 \ - 28600 \ - 28603 \ - 28604 \ - 28605 \ - 28606 - -C_SRCS = \ - casemap.c \ - collation.c \ - compose.c \ - cptable.c \ - fold.c \ - mbtowc.c \ - sortkey.c \ - string.c \ - utf8.c \ - wctomb.c \ - wctype.c \ - $(CODEPAGES:%=c_%.c) - -@MAKE_LIB_RULES@ - -### Dependencies: diff --git a/reactos/tools/unicode/c_037.c b/reactos/tools/unicode/c_037.c deleted file mode 100644 index be5b8bb5e28..00000000000 --- a/reactos/tools/unicode/c_037.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 037 (IBM EBCDIC US Canada) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, - 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, - 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, - 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, - 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, - 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, - 0x00e7, 0x00f1, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, - 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, - 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, - 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, - 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, - 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, - 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, - 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, - 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, - 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, - 0x005e, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, - 0x00bd, 0x00be, 0x005b, 0x005d, 0x00af, 0x00a8, 0x00b4, 0x00d7, - 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, - 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, - 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, - 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, - 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, - 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, - 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, - 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, - 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, - 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, - 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, - 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, - 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, - 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, - 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, - 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, - 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, - 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, - 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, - 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, - 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, - 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, - /* 0x0100 .. 0x01ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc3, 0x83, - 0xc3, 0x83, 0xc3, 0x83, 0xc3, 0x83, 0xc4, 0x84, - 0xac, 0x84, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc7, 0x87, 0xc7, 0x87, - 0xc7, 0x87, 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, - 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, - 0xc9, 0x89, 0x3f, 0x3f, 0xd1, 0x91, 0xd2, 0x92, - 0x3f, 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0x3f, - 0x3f, 0xd3, 0x93, 0xd5, 0x95, 0xd5, 0x95, 0xd5, - 0x95, 0x3f, 0x3f, 0x3f, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd9, 0x99, 0xd9, 0x99, - 0xd9, 0x99, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe6, 0xa6, 0xe8, 0xa8, - 0xe8, 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0xa2, - 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xac, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc6, 0x86, 0x3f, 0x3f, 0x3f, 0x3f, 0xc9, - 0x3f, 0x3f, 0x93, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0xd6, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0xe3, 0xe4, - 0xa4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, 0xc9, - 0x89, 0xd6, 0x96, 0xe4, 0xa4, 0xfc, 0xdc, 0xfc, - 0xdc, 0xfc, 0xdc, 0xfc, 0xdc, 0x3f, 0x63, 0x43, - 0xc1, 0x81, 0x9e, 0x9c, 0xc7, 0x87, 0xc7, 0x87, - 0xd2, 0x92, 0xd6, 0x96, 0xd6, 0x96, 0x3f, 0x3f, - 0x91, 0x3f, 0x3f, 0x3f, 0xc7, 0x87, 0x3f, 0x3f, - 0xd5, 0x95, 0x67, 0x47, 0x9e, 0x9c, 0x80, 0x70, - /* 0x0200 .. 0x02ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc5, 0x85, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xd9, 0x99, 0xd9, 0x99, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe2, 0xa2, 0xe3, 0xa3, 0x3f, 0x3f, 0xc8, 0x88, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, - 0xc5, 0x85, 0xec, 0xcc, 0xef, 0xcf, 0xd6, 0x96, - 0xd6, 0x96, 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x88, 0x3f, 0x91, 0x99, 0x3f, 0x3f, 0x3f, 0xa6, - 0xa8, 0xbe, 0x7f, 0x79, 0x7d, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb0, 0x3f, 0xb0, 0xa5, - 0x7d, 0xbc, 0xbe, 0x79, 0x3f, 0x6d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x90, 0x3f, 0xa1, 0x7f, 0x3f, 0x3f, - 0x3f, 0x93, 0xa2, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x79, 0xbe, 0xb0, 0xa1, 0xbc, 0xbc, 0x3f, 0x3f, - 0xbd, 0x3f, 0x90, 0x7f, 0xa5, 0x3f, 0x7f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6d, 0x6d, 0x6d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x79, 0xbe, 0x3f, 0x3f, 0xbd, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xbe, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xbe, 0xbd, 0xc1, 0xb3, - 0xc5, 0xc8, 0xc9, 0x3f, 0xd6, 0x3f, 0xe8, 0x3f, - 0x3f, 0xc1, 0xc2, 0x3f, 0x3f, 0xc5, 0xe9, 0xc8, - 0x3f, 0xc9, 0xd2, 0x3f, 0xd4, 0xd5, 0x3f, 0xd6, - 0x3f, 0xd7, 0x3f, 0x3f, 0xe3, 0xe8, 0x3f, 0xe7, - 0x3f, 0x3f, 0xc9, 0xe8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa0, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x3f, 0xe8, 0xe8, 0xe8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x9e, 0xc2, 0x3f, - 0xc4, 0xc5, 0x3f, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, - 0xd3, 0xd4, 0xd5, 0x3f, 0xd6, 0x3f, 0xd7, 0xd9, - 0xe3, 0xe4, 0xe6, 0x81, 0x3f, 0x3f, 0x3f, 0x82, - 0x84, 0x85, 0x3f, 0x3f, 0x3f, 0x87, 0x3f, 0x92, - 0x94, 0x3f, 0x96, 0x3f, 0x3f, 0x3f, 0x97, 0xa3, - 0xa4, 0x3f, 0x3f, 0xa5, 0x3f, 0x59, 0x3f, 0x3f, - 0x3f, 0x3f, 0x89, 0x99, 0xa4, 0xa5, 0x59, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x83, 0x3f, 0x8c, 0x3f, - 0x86, 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0xc1, 0x81, 0xc2, 0x82, 0xc2, 0x82, 0xc2, 0x82, - 0x68, 0x48, 0xc4, 0x84, 0xc4, 0x84, 0xc4, 0x84, - 0xc4, 0x84, 0xc4, 0x84, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc6, 0x86, - 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, 0xc8, 0x88, - 0xc8, 0x88, 0xc8, 0x88, 0xc9, 0x89, 0x77, 0x57, - 0xd2, 0x92, 0xd2, 0x92, 0xd2, 0x92, 0xd3, 0x93, - 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0xd4, 0x94, - 0xd4, 0x94, 0xd4, 0x94, 0xd5, 0x95, 0xd5, 0x95, - 0xd5, 0x95, 0xd5, 0x95, 0xef, 0xcf, 0xef, 0xcf, - 0xd6, 0x96, 0xd6, 0x96, 0xd7, 0x97, 0xd7, 0x97, - 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, - 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe3, 0xa3, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe5, 0xa5, 0xe5, 0xa5, - 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, - 0xe6, 0xa6, 0xe7, 0xa7, 0xe7, 0xa7, 0xe8, 0xa8, - 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0x88, 0xa3, - 0xa6, 0xa8, 0x3f, 0xa2, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0x81, 0xc1, 0x81, 0x62, 0x42, 0x62, 0x42, - 0x62, 0x42, 0x62, 0x42, 0xc1, 0x81, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0x72, 0x52, - 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xeb, 0xcb, 0xeb, 0xcb, 0xeb, 0xcb, 0xeb, 0xcb, - 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe8, 0xa8, 0xe8, 0xa8, 0xe8, 0xa8, - 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe8, 0x3f, 0xe8, 0x3f, 0xe8, 0x3f, 0xe8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbd, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc8, 0xc8, 0xc8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0xc9, 0xc9, 0xc9, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe8, 0xe8, 0xe8, 0xe8, 0xd7, 0xbd, 0xbd, 0x79, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd6, 0xd6, 0x3f, 0x3f, 0x3f, 0xbe, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x60, 0x3f, 0x60, 0x60, 0x60, 0x3f, 0x6d, - 0x79, 0x7d, 0x6b, 0x79, 0x7f, 0x7f, 0x6b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0xbe, 0x7f, 0x3f, 0x79, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x5a, 0x3f, 0xbc, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x61, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x90, 0x89, 0x3f, 0x3f, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x95, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x3f, - 0x81, 0x85, 0x96, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4a, 0x3f, 0x3f, 0xb1, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0xc3, 0x3f, 0x3f, 0x3f, 0x3f, 0xc5, - 0x3f, 0x3f, 0x87, 0xc8, 0xc8, 0xc8, 0x88, 0x88, - 0xc9, 0xc9, 0xd3, 0x93, 0x3f, 0xd5, 0x3f, 0x3f, - 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xd9, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0x3f, 0x3f, 0x3f, - 0xe9, 0x3f, 0xd2, 0x67, 0xc2, 0xc3, 0x85, 0x85, - 0xc5, 0xc6, 0x3f, 0xd4, 0x96, 0x3f, 0x3f, 0x3f, - 0x3f, 0x89, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc4, 0x84, 0x85, - 0x89, 0x91, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0x3f, 0x3f, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe7, 0x3f, 0x3f, 0xd3, 0xc3, 0xc4, 0xd4, - 0x89, 0x3f, 0x3f, 0x3f, 0xa5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa7, 0x3f, 0x3f, 0x93, 0x83, 0x84, 0x94, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0xb0, 0x6e, 0xa5, 0x60, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x60, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x60, 0x8f, 0x3f, 0x61, 0xe0, 0x5c, - 0x90, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, 0x3f, 0xd3, - 0x3f, 0x3f, 0x3f, 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x95, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0xa1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8a, 0x8b, 0x3f, 0x3f, 0x4c, 0x6e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0xb0, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0xc2, - 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, - 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, - 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xf0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x60, 0x60, 0x4f, 0x4f, 0x60, 0x60, 0x6a, 0x6a, - 0x60, 0x60, 0x6a, 0x6a, 0x4e, 0x4e, 0x4e, 0x4e, - 0x5f, 0x5f, 0x5f, 0x5f, 0xd3, 0xd3, 0xd3, 0xd3, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x60, 0x60, 0x6a, 0x6a, - 0x7e, 0x4f, 0x4e, 0x4e, 0x4e, 0x5f, 0x5f, 0x5f, - 0xd3, 0xd3, 0xd3, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x61, 0xe0, 0xe7, 0x60, 0x4f, 0x60, 0x4f, - 0x60, 0x4f, 0x60, 0x4f, 0x60, 0x4f, 0x60, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0x6e, 0x8a, 0x8b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xba, 0xbb, 0x3f, 0x7f, 0x7f, 0x6b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbc, 0xbc, 0xbc, 0xbc, 0x6d, 0x6d, 0x6d, - 0x6b, 0x3f, 0x4b, 0x3f, 0x5e, 0x7a, 0x6f, 0x5a, - 0x60, 0x4d, 0x5d, 0xc0, 0xd0, 0x3f, 0x3f, 0x7b, - 0x50, 0x5c, 0x4e, 0x60, 0x4c, 0x6e, 0x7e, 0x3f, - 0xe0, 0x5b, 0x6c, 0x7c, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4a, 0xb1, 0x5f, 0xbc, 0x6a, 0xb2, 0x3f, 0x3f, - 0x4f, 0x4c, 0xb0, 0x6e, 0xa5, 0x3f, 0xd6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_037 = -{ - { 37, 1, 0x003f, 0x003f, "IBM EBCDIC US Canada" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_10000.c b/reactos/tools/unicode/c_10000.c deleted file mode 100644 index d43ca98840a..00000000000 --- a/reactos/tools/unicode/c_10000.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 10000 (Mac Roman) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/MAC/ROMAN.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, - 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, - 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, - 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, - 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, - 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, - 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, - 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x00e6, 0x00f8, - 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, - 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, - 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, - 0x00ff, 0x0178, 0x2044, 0x00a4, 0x2039, 0x203a, 0xfb01, 0xfb02, - 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, - 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, - 0x003f, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, - 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xb4, 0x7c, 0xa4, - 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x2d, 0xa8, 0xf8, - 0xa1, 0xb1, 0x32, 0x33, 0xab, 0xb5, 0xa6, 0xe1, - 0xfc, 0x31, 0xbc, 0xc8, 0x3f, 0x3f, 0x3f, 0xc0, - 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, - 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, - 0x44, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x78, - 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0x59, 0x3f, 0xa7, - 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, - 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, - 0x64, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, - 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0x79, 0x3f, 0xd8, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0xf5, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0xce, 0xcf, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0xd9, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0xc4, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x86, 0x9f, 0x86, - 0x9f, 0x86, 0x9f, 0x86, 0x9f, 0x3f, 0x80, 0x8a, - 0x41, 0x61, 0xae, 0xbe, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x81, 0x8c, 0xae, 0xbe, 0xaf, 0xbf, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x85, 0x9a, 0xcd, 0x9b, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xab, 0xfd, 0xd4, 0xd5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0xf6, 0xff, - 0x27, 0xf8, 0xab, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xab, 0xf6, 0xf7, 0xf8, 0xf8, 0xf9, 0xfa, - 0xac, 0x3f, 0xfb, 0xfd, 0xff, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfc, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xab, 0x3f, 0x3f, 0xac, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xab, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xab, 0xac, 0x41, 0xe1, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0xb9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa7, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0xb9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xae, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xa7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xa7, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x82, 0x8d, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xec, 0x95, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xcd, 0x9b, 0xcd, 0x9b, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xe5, 0x89, 0xe5, 0x89, - 0xe5, 0x89, 0xe5, 0x89, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xe6, 0x90, - 0xe6, 0x90, 0xe6, 0x90, 0xe6, 0x90, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xef, 0x99, 0xef, 0x99, 0xef, 0x99, 0xef, 0x99, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xac, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xac, 0xac, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xab, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0xd0, 0xd1, 0xd0, 0x3f, 0x5f, - 0xd4, 0xd5, 0xe2, 0xd4, 0xd2, 0xd3, 0xe3, 0x3f, - 0xa0, 0xe0, 0xa5, 0x3f, 0x2e, 0x3f, 0xc9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0xe4, 0x3f, 0xab, 0xfd, 0x3f, 0xd4, 0x3f, 0x3f, - 0x3f, 0xdc, 0xdd, 0x3f, 0x21, 0x3f, 0xf8, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xda, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfb, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0xaa, 0x3f, 0x5a, 0x3f, 0xbd, 0x3f, - 0x5a, 0x3f, 0x4b, 0x81, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xb9, 0x3f, 0x3f, 0x3f, - 0xb7, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdc, 0xf6, 0xdd, 0xff, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdc, 0xdd, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0xb6, 0x3f, 0x3f, 0xaf, 0xc6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0xb7, 0x2d, 0xb1, 0x3f, 0xda, 0x5c, 0x2a, - 0xfb, 0xa5, 0xc3, 0x3f, 0x3f, 0x3f, 0xb0, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0xba, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xad, 0x3d, 0x3d, 0x3d, 0xb2, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0xc7, 0xc8, 0x3f, 0x3f, 0x3c, 0x3e, - 0xb2, 0xb3, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xe1, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xdc, 0xdd, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0xc2, 0xc2, 0xc2, 0xc2, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xc2, 0xc2, 0xc2, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xd7, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdc, 0xdd, 0xc7, 0xc8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0xd2, 0xd3, 0xe3, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0xde, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf8, 0xf8, 0xf8, 0xf8, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0xd1, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xc2, 0xf8, 0x7c, 0xb4, 0x3f, 0x3f, - 0x7c, 0xdc, 0xf6, 0xdd, 0xff, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_10000 = -{ - { 10000, 1, 0x003f, 0x003f, "Mac Roman" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_10006.c b/reactos/tools/unicode/c_10006.c deleted file mode 100644 index 6ac0b20f8b7..00000000000 --- a/reactos/tools/unicode/c_10006.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 10006 (Mac Greek) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/MAC/GREEK.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c4, 0x00b9, 0x00b2, 0x00c9, 0x00b3, 0x00d6, 0x00dc, 0x0385, - 0x00e0, 0x00e2, 0x00e4, 0x0384, 0x00a8, 0x00e7, 0x00e9, 0x00e8, - 0x00ea, 0x00eb, 0x00a3, 0x2122, 0x00ee, 0x00ef, 0x2022, 0x00bd, - 0x2030, 0x00f4, 0x00f6, 0x00a6, 0x00ad, 0x00f9, 0x00fb, 0x00fc, - 0x2020, 0x0393, 0x0394, 0x0398, 0x039b, 0x039e, 0x03a0, 0x00df, - 0x00ae, 0x00a9, 0x03a3, 0x03aa, 0x00a7, 0x2260, 0x00b0, 0x0387, - 0x0391, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x0392, 0x0395, 0x0396, - 0x0397, 0x0399, 0x039a, 0x039c, 0x03a6, 0x03ab, 0x03a8, 0x03a9, - 0x03ac, 0x039d, 0x00ac, 0x039f, 0x03a1, 0x2248, 0x03a4, 0x00ab, - 0x00bb, 0x2026, 0x00a0, 0x03a5, 0x03a7, 0x0386, 0x0388, 0x0153, - 0x2013, 0x2015, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x0389, - 0x038a, 0x038c, 0x038e, 0x03ad, 0x03ae, 0x03af, 0x03cc, 0x038f, - 0x03cd, 0x03b1, 0x03b2, 0x03c8, 0x03b4, 0x03b5, 0x03c6, 0x03b3, - 0x03b7, 0x03b9, 0x03be, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03bf, - 0x03c0, 0x03ce, 0x03c1, 0x03c3, 0x03c4, 0x03b8, 0x03c9, 0x03c2, - 0x03c7, 0x03c5, 0x03b6, 0x03ca, 0x03cb, 0x0390, 0x03b0, 0x003f -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xca, 0x21, 0x63, 0x92, 0x3f, 0xb4, 0x9b, 0xac, - 0x8c, 0xa9, 0x61, 0xc7, 0xc2, 0x9c, 0xa8, 0xd0, - 0xae, 0xb1, 0x82, 0x84, 0x27, 0xed, 0x3f, 0x3f, - 0x2c, 0x81, 0x6f, 0xc8, 0x3f, 0x97, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x80, 0x41, 0x41, 0x43, - 0x45, 0x83, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x85, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x86, 0x59, 0x3f, 0xa7, - 0x88, 0x61, 0x89, 0x61, 0x8a, 0x61, 0x61, 0x8d, - 0x8f, 0x8e, 0x90, 0x91, 0x69, 0x69, 0x94, 0x95, - 0x64, 0x6e, 0x6f, 0x6f, 0x99, 0x6f, 0x9a, 0xd6, - 0x6f, 0x9d, 0x75, 0x9e, 0x9f, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0xcf, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x86, 0x9f, 0x86, - 0x9f, 0x86, 0x9f, 0x86, 0x9f, 0x3f, 0x80, 0x8a, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x85, 0x9a, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0xd4, 0xd5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xd0, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0xd0, 0xd0, 0x3f, 0x3f, - 0x8c, 0x3f, 0xae, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x8c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x8b, 0x87, 0xcd, 0xaf, - 0xce, 0xd7, 0xd8, 0x3f, 0xd9, 0x3f, 0xda, 0xdf, - 0xfd, 0xb0, 0xb5, 0xa1, 0xa2, 0xb6, 0xb7, 0xb8, - 0xa3, 0xb9, 0xba, 0xa4, 0xbb, 0xc1, 0xa5, 0xc3, - 0xa6, 0xc4, 0x3f, 0xaa, 0xc6, 0xcb, 0xbc, 0xcc, - 0xbe, 0xbf, 0xab, 0xbd, 0xc0, 0xdb, 0xdc, 0xdd, - 0xfe, 0xe1, 0xe2, 0xe7, 0xe4, 0xe5, 0xfa, 0xe8, - 0xf5, 0xe9, 0xeb, 0xec, 0xed, 0xee, 0xea, 0xef, - 0xf0, 0xf2, 0xf7, 0xf3, 0xf4, 0xf9, 0xe6, 0xf8, - 0xe3, 0xf6, 0xfb, 0xfc, 0xde, 0xe0, 0xf1, 0x3f, - 0xe2, 0xf5, 0xcb, 0xcb, 0xcb, 0xe6, 0xf0, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xeb, 0xf2, 0xf7, 0x3f, 0xa3, 0xe5, 0x3f, 0x3f, - 0x3f, 0xaa, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe2, 0xe7, 0xe4, - 0xe6, 0xf8, 0x69, 0x72, 0x75, 0x76, 0xe2, 0xe7, - 0xf2, 0xe6, 0xf8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0xf5, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x8d, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x95, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x89, 0x41, 0x89, - 0x41, 0x89, 0x41, 0x89, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x90, - 0x45, 0x90, 0x45, 0x90, 0x45, 0x90, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x99, 0x4f, 0x99, 0x4f, 0x99, 0x4f, 0x99, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, - 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0x3f, 0x3f, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x3f, 0x3f, - 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, - 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, - 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, - 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0x3f, 0x3f, - 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x3f, 0x3f, - 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, - 0x3f, 0xcb, 0x3f, 0xcb, 0x3f, 0xcb, 0x3f, 0xcb, - 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, - 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, - 0xe1, 0xc0, 0xe5, 0xdb, 0xe8, 0xdc, 0xe9, 0xdd, - 0xef, 0xde, 0xf9, 0xe0, 0xf6, 0xf1, 0x3f, 0x3f, - 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, - 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, - 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, - 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, - 0xe1, 0xe1, 0xe1, 0xe1, 0xc0, 0x3f, 0xe1, 0xe1, - 0xb0, 0xb0, 0xb0, 0xcd, 0xb0, 0x3f, 0xe9, 0x3f, - 0x3f, 0x8c, 0xe8, 0xe8, 0xdc, 0x3f, 0xe8, 0xe8, - 0xb6, 0xce, 0xb8, 0xd7, 0xb8, 0x3f, 0x3f, 0x3f, - 0xe9, 0xe9, 0xfb, 0xfd, 0x3f, 0x3f, 0xe9, 0xfb, - 0xb9, 0xb9, 0xb9, 0xd8, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf9, 0xf9, 0xfc, 0xfe, 0xf2, 0xf2, 0xf9, 0xfc, - 0xcb, 0xcb, 0xcb, 0xda, 0xc4, 0x8c, 0x87, 0x60, - 0x3f, 0x3f, 0xf6, 0xf6, 0xf1, 0x3f, 0xf6, 0xf6, - 0xc3, 0xd9, 0xbf, 0xdf, 0xbf, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0xd0, 0xd0, 0xd1, 0x3f, 0x5f, - 0xd4, 0xd5, 0x2c, 0xd4, 0xd2, 0xd3, 0x2c, 0x3f, - 0xa0, 0x3f, 0x96, 0x3f, 0x2e, 0x3f, 0xc9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x98, 0x3f, 0x27, 0x22, 0x3f, 0xd4, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xd0, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xae, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x93, 0x3f, 0x5a, 0x3f, 0xbf, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xf0, 0xe7, 0xa1, 0xa6, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xae, 0x96, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xad, 0x3d, 0x3d, 0x3d, 0xb2, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0xc7, 0xc8, 0x3f, 0x3f, 0x3c, 0x3e, - 0xb2, 0xb3, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x9b, 0x9b, - 0x2d, 0x2d, 0x9b, 0x9b, 0x2b, 0x2b, 0x2b, 0x2b, - 0xc2, 0xc2, 0xc2, 0xc2, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x9b, 0x9b, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xc2, 0xc2, 0xc2, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xc7, 0xc8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0xd2, 0xd3, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0xd0, 0xd0, 0xd0, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0xd0, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x92, 0xc2, 0xd0, 0x9b, 0xb4, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_10006 = -{ - { 10006, 1, 0x003f, 0x003f, "Mac Greek" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_10007.c b/reactos/tools/unicode/c_10007.c deleted file mode 100644 index b58d56210d0..00000000000 --- a/reactos/tools/unicode/c_10007.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 10007 (Mac Cyrillic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/MAC/CYRILLIC.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x0406, - 0x00ae, 0x00a9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, - 0x221e, 0x00b1, 0x2264, 0x2265, 0x0456, 0x00b5, 0x2202, 0x0408, - 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040a, 0x045a, - 0x0458, 0x0405, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, - 0x00bb, 0x2026, 0x00a0, 0x040b, 0x045b, 0x040c, 0x045c, 0x0455, - 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x201e, - 0x040e, 0x045e, 0x040f, 0x045f, 0x2116, 0x0401, 0x0451, 0x044f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x00a4 -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xca, 0x21, 0xa2, 0xa3, 0xff, 0x59, 0x7c, 0xa4, - 0x22, 0xa9, 0x61, 0xc7, 0xc2, 0x2d, 0xa8, 0xd1, - 0xa1, 0xb1, 0x32, 0x33, 0x27, 0xb5, 0xa6, 0x3f, - 0x2c, 0x31, 0x6f, 0xc8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0xd6, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0xc4, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0xd4, 0xd5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xd1, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xa1, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0xd1, 0xd1, 0x3f, 0x3f, - 0x22, 0x3f, 0xa1, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0400 .. 0x04ff */ - 0x85, 0xdd, 0xab, 0xae, 0xb8, 0xc1, 0xa7, 0xba, - 0xb7, 0xbc, 0xbe, 0xcb, 0xcd, 0x88, 0xd8, 0xda, - 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, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, - 0xe5, 0xde, 0xac, 0xaf, 0xb9, 0xcf, 0xb4, 0xbb, - 0xc0, 0xbd, 0xbf, 0xcc, 0xce, 0xe8, 0xd9, 0xdb, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x86, 0xe6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x80, 0xe0, 0x80, 0xe0, 0x3f, 0x3f, 0x85, 0xe5, - 0x3f, 0x3f, 0x3f, 0x3f, 0x86, 0xe6, 0x87, 0xe7, - 0x3f, 0x3f, 0x88, 0xe8, 0x88, 0xe8, 0x8e, 0xee, - 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0xfd, 0x93, 0xf3, - 0x93, 0xf3, 0x93, 0xf3, 0x97, 0xf7, 0x3f, 0x3f, - 0x9b, 0xfb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xed, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0xd0, 0xd1, 0xd0, 0x3f, 0x5f, - 0xd4, 0xd5, 0x2c, 0xd4, 0xd2, 0xd3, 0xd7, 0x3f, - 0xa0, 0x3f, 0xa5, 0x3f, 0x2e, 0x3f, 0xc9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0xd4, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xd1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0xdc, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0xaa, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0xb6, 0x3f, 0x3f, 0x4f, 0xc6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xa1, 0xa5, 0xc3, 0x3f, 0x3f, 0x3f, 0xb0, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xad, 0x3d, 0x3d, 0x3d, 0xb2, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0xc7, 0xc8, 0x3f, 0x3f, 0x3c, 0x3e, - 0xb2, 0xb3, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0xc2, 0xc2, 0xc2, 0xc2, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xc2, 0xc2, 0xc2, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xc7, 0xc8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0xd2, 0xd3, 0xd7, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd1, 0xd1, 0xd1, 0xd1, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0xd1, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xc2, 0xd1, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_10007 = -{ - { 10007, 1, 0x003f, 0x003f, "Mac Cyrillic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_10029.c b/reactos/tools/unicode/c_10029.c deleted file mode 100644 index 6946df11bf0..00000000000 --- a/reactos/tools/unicode/c_10029.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 10029 (Mac Latin 2) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/MAC/LATIN2.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c4, 0x0100, 0x0101, 0x00c9, 0x0104, 0x00d6, 0x00dc, 0x00e1, - 0x0105, 0x010c, 0x00e4, 0x010d, 0x0106, 0x0107, 0x00e9, 0x0179, - 0x017a, 0x010e, 0x00ed, 0x010f, 0x0112, 0x0113, 0x0116, 0x00f3, - 0x0117, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x011a, 0x011b, 0x00fc, - 0x2020, 0x00b0, 0x0118, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, - 0x00ae, 0x00a9, 0x2122, 0x0119, 0x00a8, 0x2260, 0x0123, 0x012e, - 0x012f, 0x012a, 0x2264, 0x2265, 0x012b, 0x0136, 0x2202, 0x2211, - 0x0142, 0x013b, 0x013c, 0x013d, 0x013e, 0x0139, 0x013a, 0x0145, - 0x0146, 0x0143, 0x00ac, 0x221a, 0x0144, 0x0147, 0x2206, 0x00ab, - 0x00bb, 0x2026, 0x00a0, 0x0148, 0x0150, 0x00d5, 0x0151, 0x014c, - 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, - 0x014d, 0x0154, 0x0155, 0x0158, 0x2039, 0x203a, 0x0159, 0x0156, - 0x0157, 0x0160, 0x201a, 0x201e, 0x0161, 0x015a, 0x015b, 0x00c1, - 0x0164, 0x0165, 0x00cd, 0x017d, 0x017e, 0x016a, 0x00d3, 0x00d4, - 0x016b, 0x016e, 0x00da, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, - 0x00dd, 0x00fd, 0x0137, 0x017b, 0x0141, 0x017c, 0x0122, 0x02c7 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xca, 0x21, 0x63, 0xa3, 0x3f, 0x59, 0x7c, 0xa4, - 0xac, 0xa9, 0x61, 0xc7, 0xc2, 0x2d, 0xa8, 0xd1, - 0xa1, 0x3f, 0x32, 0x33, 0x27, 0x75, 0xa6, 0x3f, - 0x2c, 0x31, 0x6f, 0xc8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0xe7, 0x41, 0x41, 0x80, 0x41, 0x41, 0x43, - 0x45, 0x83, 0x45, 0x45, 0x49, 0xea, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0xee, 0xef, 0xcd, 0x85, 0x78, - 0x4f, 0x55, 0xf2, 0x55, 0x86, 0xf8, 0x3f, 0xa7, - 0x61, 0x87, 0x61, 0x61, 0x8a, 0x61, 0x61, 0x63, - 0x65, 0x8e, 0x65, 0x65, 0x69, 0x92, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x97, 0x99, 0x9b, 0x9a, 0xd6, - 0x6f, 0x75, 0x9c, 0x75, 0x9f, 0xf9, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x81, 0x82, 0x41, 0x61, 0x84, 0x88, 0x8c, 0x8d, - 0x43, 0x63, 0x43, 0x63, 0x89, 0x8b, 0x91, 0x93, - 0x44, 0x64, 0x94, 0x95, 0x45, 0x65, 0x96, 0x98, - 0xa2, 0xab, 0x9d, 0x9e, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0xfe, 0xae, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0xb1, 0xb4, 0x49, 0x69, 0xaf, 0xb0, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0xb5, 0xfa, - 0x3f, 0xbd, 0xbe, 0xb9, 0xba, 0xbb, 0xbc, 0x3f, - 0x3f, 0xfc, 0xb8, 0xc1, 0xc4, 0xbf, 0xc0, 0xc5, - 0xcb, 0x3f, 0x3f, 0x3f, 0xcf, 0xd8, 0x4f, 0x6f, - 0xcc, 0xce, 0x4f, 0x6f, 0xd9, 0xda, 0xdf, 0xe0, - 0xdb, 0xde, 0xe5, 0xe6, 0x53, 0x73, 0x53, 0x73, - 0xe1, 0xe4, 0x54, 0x74, 0xe8, 0xe9, 0x54, 0x74, - 0x55, 0x75, 0xed, 0xf0, 0x55, 0x75, 0xf1, 0xf3, - 0xf4, 0xf5, 0xf6, 0xf7, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x8f, 0x90, 0xfb, 0xfd, 0xeb, 0xec, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x86, 0x9f, 0x86, - 0x9f, 0x86, 0x9f, 0x86, 0x9f, 0x3f, 0x80, 0x8a, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x85, 0x9a, 0xcd, 0x9b, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0xd4, 0xd5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0xff, - 0x27, 0xd1, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xa1, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0xd1, 0xd1, 0x3f, 0x3f, - 0xac, 0x3f, 0xa1, 0x22, 0xff, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0xac, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0xac, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa7, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xa7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xa7, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x94, 0x95, 0x94, 0x95, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xcd, 0x9b, 0xcd, 0x9b, - 0xcf, 0xd8, 0xcf, 0xd8, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0xe5, 0xe6, 0xe1, 0xe4, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xed, 0xf0, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xef, 0x99, 0xef, 0x99, 0xef, 0x99, 0xef, 0x99, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xac, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xac, 0xac, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0xd0, 0xd1, 0xd0, 0x3f, 0x5f, - 0xd4, 0xd5, 0xe2, 0xd4, 0xd2, 0xd3, 0xe3, 0x3f, - 0xa0, 0x3f, 0xa5, 0x3f, 0x2e, 0x3f, 0xc9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0xd4, 0x3f, 0x3f, - 0x3f, 0xdc, 0xdd, 0x3f, 0x21, 0x3f, 0xd1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0xaa, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb7, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdc, 0x5e, 0xdd, 0xff, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdc, 0xdd, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0xb6, 0x3f, 0x3f, 0x4f, 0xc6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb7, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0xa1, 0xa5, 0xc3, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xad, 0x3d, 0x3d, 0x3d, 0xb2, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0xc7, 0xc8, 0x3f, 0x3f, 0x3c, 0x3e, - 0xb2, 0xb3, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xdc, 0xdd, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0xc2, 0xc2, 0xc2, 0xc2, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xc2, 0xc2, 0xc2, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xd7, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdc, 0xdd, 0xc7, 0xc8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0xd2, 0xd3, 0xe3, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd1, 0xd1, 0xd1, 0xd1, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0xd1, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0xa3, 0xc2, 0xd1, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0xdc, 0x5e, 0xdd, 0xff, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_10029 = -{ - { 10029, 1, 0x003f, 0x003f, "Mac Latin 2" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1006.c b/reactos/tools/unicode/c_1006.c deleted file mode 100644 index 4584ca24d66..00000000000 --- a/reactos/tools/unicode/c_1006.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 1006 (IBM Arabic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/CP1006.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06f6, - 0x06f7, 0x06f8, 0x06f9, 0x060c, 0x061b, 0x00ad, 0x061f, 0xfe81, - 0xfe8d, 0xfe8e, 0xfe8e, 0xfe8f, 0xfe91, 0xfb56, 0xfb58, 0xfe93, - 0xfe95, 0xfe97, 0xfb66, 0xfb68, 0xfe99, 0xfe9b, 0xfe9d, 0xfe9f, - 0xfb7a, 0xfb7c, 0xfea1, 0xfea3, 0xfea5, 0xfea7, 0xfea9, 0xfb84, - 0xfeab, 0xfead, 0xfb8c, 0xfeaf, 0xfb8a, 0xfeb1, 0xfeb3, 0xfeb5, - 0xfeb7, 0xfeb9, 0xfebb, 0xfebd, 0xfebf, 0xfec1, 0xfec5, 0xfec9, - 0xfeca, 0xfecb, 0xfecc, 0xfecd, 0xfece, 0xfecf, 0xfed0, 0xfed1, - 0xfed3, 0xfed5, 0xfed7, 0xfed9, 0xfedb, 0xfb92, 0xfb94, 0xfedd, - 0xfedf, 0xfee0, 0xfee1, 0xfee3, 0xfb9e, 0xfee5, 0xfee7, 0xfe85, - 0xfeed, 0xfba6, 0xfba8, 0xfba9, 0xfbaa, 0xfe80, 0xfe89, 0xfe8a, - 0xfe8b, 0xfef1, 0xfef2, 0xfef3, 0xfbb0, 0xfbae, 0xfe7c, 0xfe7d -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0x3f, - 0x22, 0x63, 0x61, 0x3c, 0x3f, 0xad, 0x72, 0x2d, - 0x3f, 0x3f, 0x32, 0x33, 0x27, 0x75, 0x3f, 0x3f, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x3f, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0600 .. 0x06ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xab, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xac, 0x3f, 0x3f, 0x3f, 0xae, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, - 0xa9, 0xaa, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, - 0xb6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xba, 0x3f, - 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xc0, 0x3f, 0xc1, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xc7, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xcc, 0x3f, 0xca, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xe5, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xec, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xf1, 0x3f, - 0xf2, 0xf3, 0xf4, 0x3f, 0x3f, 0x3f, 0xfd, 0x3f, - 0xfc, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xfe, 0xff, 0x3f, 0x3f, - 0xf5, 0xaf, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, - 0x3f, 0xf6, 0xf7, 0xf8, 0x3f, 0xb0, 0xb1, 0xb3, - 0x3f, 0xb4, 0x3f, 0xb7, 0x3f, 0xb8, 0x3f, 0xb9, - 0x3f, 0xbc, 0x3f, 0xbd, 0x3f, 0xbe, 0x3f, 0xbf, - 0x3f, 0xc2, 0x3f, 0xc3, 0x3f, 0xc4, 0x3f, 0xc5, - 0x3f, 0xc6, 0x3f, 0xc8, 0x3f, 0xc9, 0x3f, 0xcb, - 0x3f, 0xcd, 0x3f, 0xce, 0x3f, 0xcf, 0x3f, 0xd0, - 0x3f, 0xd1, 0x3f, 0xd2, 0x3f, 0xd3, 0x3f, 0xd4, - 0x3f, 0xd5, 0x3f, 0x3f, 0x3f, 0xd6, 0x3f, 0x3f, - 0x3f, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, - 0xde, 0xdf, 0x3f, 0xe0, 0x3f, 0xe1, 0x3f, 0xe2, - 0x3f, 0xe3, 0x3f, 0xe4, 0x3f, 0xe7, 0x3f, 0xe8, - 0xe9, 0xea, 0x3f, 0xeb, 0x3f, 0xed, 0x3f, 0xee, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xf0, 0x3f, 0x3f, - 0x3f, 0xf9, 0xfa, 0xfb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x1200, 0x0400, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_1006 = -{ - { 1006, 1, 0x003f, 0x003f, "IBM Arabic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_10079.c b/reactos/tools/unicode/c_10079.c deleted file mode 100644 index 0290253c3bc..00000000000 --- a/reactos/tools/unicode/c_10079.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 10079 (Mac Icelandic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/MAC/ICELAND.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, - 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, - 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, - 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, - 0x00dd, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, - 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, - 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, - 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x00e6, 0x00f8, - 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, - 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, - 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, - 0x00ff, 0x0178, 0x2044, 0x00a4, 0x00d0, 0x00f0, 0x00de, 0x00fe, - 0x00fd, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, - 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, - 0x003f, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, - 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xb4, 0x7c, 0xa4, - 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x2d, 0xa8, 0xf8, - 0xa1, 0xb1, 0x32, 0x33, 0xab, 0xb5, 0xa6, 0xe1, - 0xfc, 0x31, 0xbc, 0xc8, 0x3f, 0x3f, 0x3f, 0xc0, - 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, - 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, - 0xdc, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x78, - 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xa0, 0xde, 0xa7, - 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, - 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, - 0xdd, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, - 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xe0, 0xdf, 0xd8, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0xdc, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0xf5, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0xce, 0xcf, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0xd9, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0xc4, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x86, 0x9f, 0x86, - 0x9f, 0x86, 0x9f, 0x86, 0x9f, 0x3f, 0x80, 0x8a, - 0x41, 0x61, 0xae, 0xbe, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x81, 0x8c, 0xae, 0xbe, 0xaf, 0xbf, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x85, 0x9a, 0xcd, 0x9b, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xab, 0xfd, 0xd4, 0xd5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0xf6, 0xff, - 0x27, 0xf8, 0xab, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xab, 0xf6, 0xf7, 0xf8, 0xf8, 0xf9, 0xfa, - 0xac, 0x3f, 0xfb, 0xfd, 0xff, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfc, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xab, 0x3f, 0x3f, 0xac, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xab, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xab, 0xac, 0x41, 0xe1, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0xb9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa7, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0xb9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xae, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xa7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xa7, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0xdd, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x82, 0x8d, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xec, 0x95, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xcd, 0x9b, 0xcd, 0x9b, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xe5, 0x89, 0xe5, 0x89, - 0xe5, 0x89, 0xe5, 0x89, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xe6, 0x90, - 0xe6, 0x90, 0xe6, 0x90, 0xe6, 0x90, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xef, 0x99, 0xef, 0x99, 0xef, 0x99, 0xef, 0x99, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xac, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xac, 0xac, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xab, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0xd0, 0xd1, 0xd0, 0x3f, 0x5f, - 0xd4, 0xd5, 0xe2, 0xd4, 0xd2, 0xd3, 0xe3, 0x3f, - 0x3f, 0x3f, 0xa5, 0x3f, 0x2e, 0x3f, 0xc9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0xe4, 0x3f, 0xab, 0xfd, 0x3f, 0xd4, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xf8, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xda, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfb, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0xaa, 0x3f, 0x5a, 0x3f, 0xbd, 0x3f, - 0x5a, 0x3f, 0x4b, 0x81, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xb9, 0x3f, 0x3f, 0x3f, - 0xb7, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0xf6, 0x3e, 0xff, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0xb6, 0x3f, 0x3f, 0xaf, 0xc6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0xb7, 0x2d, 0xb1, 0x3f, 0xda, 0x5c, 0x2a, - 0xfb, 0xa5, 0xc3, 0x3f, 0x3f, 0x3f, 0xb0, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0xba, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xad, 0x3d, 0x3d, 0x3d, 0xb2, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0xc7, 0xc8, 0x3f, 0x3f, 0x3c, 0x3e, - 0xb2, 0xb3, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xe1, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0xc2, 0xc2, 0xc2, 0xc2, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xc2, 0xc2, 0xc2, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xd7, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xc7, 0xc8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0xd2, 0xd3, 0xe3, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf8, 0xf8, 0xf8, 0xf8, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0xd1, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xc2, 0xf8, 0x7c, 0xb4, 0x3f, 0x3f, - 0x7c, 0x3c, 0xf6, 0x3e, 0xff, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_10079 = -{ - { 10079, 1, 0x003f, 0x003f, "Mac Icelandic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_10081.c b/reactos/tools/unicode/c_10081.c deleted file mode 100644 index 6351e59e68b..00000000000 --- a/reactos/tools/unicode/c_10081.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 10081 (Mac Turkish) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/MAC/TURKISH.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, - 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, - 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, - 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, - 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, - 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, - 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, - 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x00e6, 0x00f8, - 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, - 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, - 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, - 0x00ff, 0x0178, 0x011e, 0x011f, 0x0130, 0x0131, 0x015e, 0x015f, - 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, - 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, - 0x003f, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x003f, 0x02c6, 0x02dc, - 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xca, 0xc1, 0xa2, 0xa3, 0x3f, 0xb4, 0x7c, 0xa4, - 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x2d, 0xa8, 0xf8, - 0xa1, 0xb1, 0x32, 0x33, 0xab, 0xb5, 0xa6, 0xe1, - 0xfc, 0x31, 0xbc, 0xc8, 0x3f, 0x3f, 0x3f, 0xc0, - 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, - 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, - 0x44, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x78, - 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0x59, 0x3f, 0xa7, - 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, - 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, - 0x64, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, - 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0x79, 0x3f, 0xd8, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0xda, 0xdb, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0xdc, 0xdd, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0xce, 0xcf, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0xde, 0xdf, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0xd9, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0xc4, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x86, 0x9f, 0x86, - 0x9f, 0x86, 0x9f, 0x86, 0x9f, 0x3f, 0x80, 0x8a, - 0x41, 0x61, 0xae, 0xbe, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x81, 0x8c, 0xae, 0xbe, 0xaf, 0xbf, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x85, 0x9a, 0xcd, 0x9b, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xab, 0xfd, 0xd4, 0xd5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0xf6, 0xff, - 0x27, 0xf8, 0xab, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xab, 0xf6, 0xf7, 0xf8, 0xf8, 0xf9, 0xfa, - 0xac, 0x3f, 0xfb, 0xfd, 0xff, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfc, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xab, 0x3f, 0x3f, 0xac, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xab, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xab, 0xac, 0x41, 0xe1, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0xb9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa7, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0xb9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xae, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xa7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xa7, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x82, 0x8d, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xec, 0x95, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xcd, 0x9b, 0xcd, 0x9b, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xe5, 0x89, 0xe5, 0x89, - 0xe5, 0x89, 0xe5, 0x89, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xe6, 0x90, - 0xe6, 0x90, 0xe6, 0x90, 0xe6, 0x90, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xef, 0x99, 0xef, 0x99, 0xef, 0x99, 0xef, 0x99, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xac, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xac, 0xac, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xab, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0xd0, 0xd1, 0xd0, 0x3f, 0x5f, - 0xd4, 0xd5, 0xe2, 0xd4, 0xd2, 0xd3, 0xe3, 0x3f, - 0xa0, 0xe0, 0xa5, 0x3f, 0x2e, 0x3f, 0xc9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0xe4, 0x3f, 0xab, 0xfd, 0x3f, 0xd4, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xf8, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfb, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0xaa, 0x3f, 0x5a, 0x3f, 0xbd, 0x3f, - 0x5a, 0x3f, 0x4b, 0x81, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xb9, 0x3f, 0x3f, 0x3f, - 0xb7, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0xf6, 0x3e, 0xff, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0xb6, 0x3f, 0x3f, 0xaf, 0xc6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0xb7, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xfb, 0xa5, 0xc3, 0x3f, 0x3f, 0x3f, 0xb0, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0xba, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xad, 0x3d, 0x3d, 0x3d, 0xb2, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0xc7, 0xc8, 0x3f, 0x3f, 0x3c, 0x3e, - 0xb2, 0xb3, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xe1, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0xc2, 0xc2, 0xc2, 0xc2, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xc2, 0xc2, 0xc2, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xd7, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xc7, 0xc8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0xd2, 0xd3, 0xe3, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf8, 0xf8, 0xf8, 0xf8, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0xd1, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xc2, 0xf8, 0x7c, 0xb4, 0x3f, 0x3f, - 0x7c, 0x3c, 0xf6, 0x3e, 0xff, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_10081 = -{ - { 10081, 1, 0x003f, 0x003f, "Mac Turkish" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1026.c b/reactos/tools/unicode/c_1026.c deleted file mode 100644 index 2ed67c03df0..00000000000 --- a/reactos/tools/unicode/c_1026.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 1026 (IBM EBCDIC Latin 5 Turkish) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/EBCDIC/CP1026.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, - 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, - 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, - 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, - 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, - 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, - 0x007b, 0x00f1, 0x00c7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, - 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, - 0x00ec, 0x00df, 0x011e, 0x0130, 0x002a, 0x0029, 0x003b, 0x005e, - 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, - 0x005b, 0x00d1, 0x015f, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, - 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, - 0x00cc, 0x0131, 0x003a, 0x00d6, 0x015e, 0x0027, 0x003d, 0x00dc, - 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x00ab, 0x00bb, 0x007d, 0x0060, 0x00a6, 0x00b1, - 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, - 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x00a1, 0x00bf, 0x005d, 0x0024, 0x0040, 0x00ae, - 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, - 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, - 0x00e7, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5, - 0x011f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, - 0x0051, 0x0052, 0x00b9, 0x00fb, 0x005c, 0x00f9, 0x00fa, 0x00ff, - 0x00fc, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, - 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0023, 0x00d2, 0x00d3, 0x00d5, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x00b3, 0x00db, 0x0022, 0x00d9, 0x00da, 0x009f -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, - 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, - 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, - 0x40, 0x4f, 0xfc, 0xec, 0xad, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0xae, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0x68, 0xdc, 0xac, 0x5f, 0x6d, - 0x8d, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0x48, 0xbb, 0x8c, 0xcc, 0x07, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, - 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, - 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, - 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x8e, 0xb5, - 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, - 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, - 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, - 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x4a, - 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, - 0xc4, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7b, 0xbf, - 0x80, 0xfd, 0xfe, 0xfb, 0x7f, 0xe8, 0x3f, 0x59, - 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xc0, - 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, - 0x84, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, - 0x70, 0xdd, 0xde, 0xdb, 0xe0, 0xa8, 0x3f, 0xdf, - /* 0x0100 .. 0x01ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc3, 0x83, - 0xc3, 0x83, 0xc3, 0x83, 0xc3, 0x83, 0xc4, 0x84, - 0xc4, 0x84, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc7, 0x87, 0x5a, 0xd0, - 0xc7, 0x87, 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, - 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, - 0x5b, 0x79, 0x3f, 0x3f, 0xd1, 0x91, 0xd2, 0x92, - 0x3f, 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0x3f, - 0x3f, 0xd3, 0x93, 0xd5, 0x95, 0xd5, 0x95, 0xd5, - 0x95, 0x3f, 0x3f, 0x3f, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd9, 0x99, 0xd9, 0x99, - 0xd9, 0x99, 0xe2, 0xa2, 0xe2, 0xa2, 0x7c, 0x6a, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe6, 0xa6, 0xe8, 0xa8, - 0xe8, 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0xa2, - 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xc4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc6, 0x86, 0x3f, 0x3f, 0x3f, 0x3f, 0xc9, - 0x3f, 0x3f, 0x93, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0xd6, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0xe3, 0xe4, - 0xa4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xbb, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, 0xc9, - 0x89, 0xd6, 0x96, 0xe4, 0xa4, 0x7f, 0xe0, 0x7f, - 0xe0, 0x7f, 0xe0, 0x7f, 0xe0, 0x3f, 0x63, 0x43, - 0xc1, 0x81, 0x9e, 0x9c, 0xc7, 0x87, 0xc7, 0x87, - 0xd2, 0x92, 0xd6, 0x96, 0xd6, 0x96, 0x3f, 0x3f, - 0x91, 0x3f, 0x3f, 0x3f, 0xc7, 0x87, 0x3f, 0x3f, - 0xd5, 0x95, 0x67, 0x47, 0x9e, 0x9c, 0x80, 0x70, - /* 0x0200 .. 0x02ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc5, 0x85, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xd9, 0x99, 0xd9, 0x99, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe2, 0xa2, 0xe3, 0xa3, 0x3f, 0x3f, 0xc8, 0x88, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, - 0xc5, 0x85, 0x7b, 0xa1, 0xef, 0xcf, 0xd6, 0x96, - 0xd6, 0x96, 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x88, 0x3f, 0x91, 0x99, 0x3f, 0x3f, 0x3f, 0xa6, - 0xa8, 0xbe, 0xfc, 0x8d, 0x7d, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5f, 0x3f, 0x5f, 0xa5, - 0x7d, 0xbc, 0xbe, 0x8d, 0x3f, 0x6d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x90, 0x3f, 0xcc, 0xfc, 0x3f, 0x3f, - 0x3f, 0x93, 0xa2, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x8d, 0xbe, 0x5f, 0xcc, 0xbc, 0xbc, 0x3f, 0x3f, - 0xbd, 0x3f, 0x90, 0xfc, 0xa5, 0x3f, 0xfc, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6d, 0x6d, 0x6d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8d, 0xbe, 0x3f, 0x3f, 0xbd, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xbe, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xbe, 0xbd, 0xc1, 0xb3, - 0xc5, 0xc8, 0xc9, 0x3f, 0xd6, 0x3f, 0xe8, 0x3f, - 0x3f, 0xc1, 0xc2, 0x3f, 0x3f, 0xc5, 0xe9, 0xc8, - 0x3f, 0xc9, 0xd2, 0x3f, 0xd4, 0xd5, 0x3f, 0xd6, - 0x3f, 0xd7, 0x3f, 0x3f, 0xe3, 0xe8, 0x3f, 0xe7, - 0x3f, 0x3f, 0xc9, 0xe8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa0, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x3f, 0xe8, 0xe8, 0xe8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x9e, 0xc2, 0x3f, - 0xc4, 0xc5, 0x3f, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, - 0xd3, 0xd4, 0xd5, 0x3f, 0xd6, 0x3f, 0xd7, 0xd9, - 0xe3, 0xe4, 0xe6, 0x81, 0x3f, 0x3f, 0x3f, 0x82, - 0x84, 0x85, 0x3f, 0x3f, 0x3f, 0x87, 0x3f, 0x92, - 0x94, 0x3f, 0x96, 0x3f, 0x3f, 0x3f, 0x97, 0xa3, - 0xa4, 0x3f, 0x3f, 0xa5, 0x3f, 0x59, 0x3f, 0x3f, - 0x3f, 0x3f, 0x89, 0x99, 0xa4, 0xa5, 0x59, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x83, 0x3f, 0x84, 0x3f, - 0x86, 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0xc1, 0x81, 0xc2, 0x82, 0xc2, 0x82, 0xc2, 0x82, - 0x4a, 0xc0, 0xc4, 0x84, 0xc4, 0x84, 0xc4, 0x84, - 0xc4, 0x84, 0xc4, 0x84, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc6, 0x86, - 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, 0xc8, 0x88, - 0xc8, 0x88, 0xc8, 0x88, 0xc9, 0x89, 0x77, 0x57, - 0xd2, 0x92, 0xd2, 0x92, 0xd2, 0x92, 0xd3, 0x93, - 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0xd4, 0x94, - 0xd4, 0x94, 0xd4, 0x94, 0xd5, 0x95, 0xd5, 0x95, - 0xd5, 0x95, 0xd5, 0x95, 0xef, 0xcf, 0xef, 0xcf, - 0xd6, 0x96, 0xd6, 0x96, 0xd7, 0x97, 0xd7, 0x97, - 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, - 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe3, 0xa3, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe5, 0xa5, 0xe5, 0xa5, - 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, - 0xe6, 0xa6, 0xe7, 0xa7, 0xe7, 0xa7, 0xe8, 0xa8, - 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0x88, 0xa3, - 0xa6, 0xa8, 0x3f, 0xa2, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0x81, 0xc1, 0x81, 0x62, 0x42, 0x62, 0x42, - 0x62, 0x42, 0x62, 0x42, 0xc1, 0x81, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0x72, 0x52, - 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xeb, 0xcb, 0xeb, 0xcb, 0xeb, 0xcb, 0xeb, 0xcb, - 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe8, 0xa8, 0xe8, 0xa8, 0xe8, 0xa8, - 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe8, 0x3f, 0xe8, 0x3f, 0xe8, 0x3f, 0xe8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbd, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc8, 0xc8, 0xc8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0xc9, 0xc9, 0xc9, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe8, 0xe8, 0xe8, 0xe8, 0xd7, 0xbd, 0xbd, 0x8d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd6, 0xd6, 0x3f, 0x3f, 0x3f, 0xbe, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x60, 0x3f, 0x60, 0x60, 0x60, 0x3f, 0x6d, - 0x8d, 0x7d, 0x6b, 0x8d, 0xfc, 0xfc, 0x6b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0xbe, 0xfc, 0x3f, 0x8d, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x4f, 0x3f, 0xbc, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x61, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x90, 0x89, 0x3f, 0x3f, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x95, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x3f, - 0x81, 0x85, 0x96, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb0, 0x3f, 0x3f, 0xb1, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0xc3, 0x3f, 0x3f, 0x3f, 0x3f, 0xc5, - 0x3f, 0x3f, 0x87, 0xc8, 0xc8, 0xc8, 0x88, 0x88, - 0xc9, 0xc9, 0xd3, 0x93, 0x3f, 0xd5, 0x3f, 0x3f, - 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xd9, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0x3f, 0x3f, 0x3f, - 0xe9, 0x3f, 0xd2, 0x67, 0xc2, 0xc3, 0x85, 0x85, - 0xc5, 0xc6, 0x3f, 0xd4, 0x96, 0x3f, 0x3f, 0x3f, - 0x3f, 0x89, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc4, 0x84, 0x85, - 0x89, 0x91, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0x3f, 0x3f, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe7, 0x3f, 0x3f, 0xd3, 0xc3, 0xc4, 0xd4, - 0x89, 0x3f, 0x3f, 0x3f, 0xa5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa7, 0x3f, 0x3f, 0x93, 0x83, 0x84, 0x94, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0x5f, 0x6e, 0xa5, 0x60, 0xbb, 0x3f, 0x3f, - 0x3f, 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x60, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x60, 0x8f, 0x3f, 0x61, 0xdc, 0x5c, - 0x90, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, 0x3f, 0xd3, - 0x3f, 0x3f, 0x3f, 0xbb, 0xbb, 0x3f, 0x3f, 0x3f, - 0x3f, 0x95, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xcc, 0x3f, 0x3f, 0x3f, - 0x3f, 0xcc, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xcc, 0xcc, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8a, 0x8b, 0x3f, 0x3f, 0x4c, 0x6e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0xc2, - 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, - 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, - 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xf0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x60, 0x60, 0xbb, 0xbb, 0x60, 0x60, 0x8e, 0x8e, - 0x60, 0x60, 0x8e, 0x8e, 0x4e, 0x4e, 0x4e, 0x4e, - 0xba, 0xba, 0xba, 0xba, 0xd3, 0xd3, 0xd3, 0xd3, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x60, 0x60, 0x8e, 0x8e, - 0x7e, 0xbb, 0x4e, 0x4e, 0x4e, 0xba, 0xba, 0xba, - 0xd3, 0xd3, 0xd3, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x61, 0xdc, 0xe7, 0x60, 0xbb, 0x60, 0xbb, - 0x60, 0xbb, 0x60, 0xbb, 0x60, 0xbb, 0x60, 0xbb, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0x6e, 0x8a, 0x8b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x68, 0xac, 0x3f, 0xfc, 0xfc, 0x6b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbc, 0xbc, 0xbc, 0xbc, 0x6d, 0x6d, 0x6d, - 0x6b, 0x3f, 0x4b, 0x3f, 0x5e, 0x7a, 0x6f, 0x4f, - 0x60, 0x4d, 0x5d, 0x48, 0x8c, 0x3f, 0x3f, 0xec, - 0x50, 0x5c, 0x4e, 0x60, 0x4c, 0x6e, 0x7e, 0x3f, - 0xdc, 0xad, 0x6c, 0xae, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 0x4f, 0xfc, 0xec, 0xad, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0xae, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0x68, 0xdc, 0xac, 0x5f, 0x6d, - 0x8d, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0x48, 0xbb, 0x8c, 0xcc, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0xb1, 0xba, 0xbc, 0x8e, 0xb2, 0x3f, 0x3f, - 0xbb, 0x4c, 0x5f, 0x6e, 0xa5, 0x3f, 0xd6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_1026 = -{ - { 1026, 1, 0x003f, 0x003f, "IBM EBCDIC Latin 5 Turkish" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1250.c b/reactos/tools/unicode/c_1250.c deleted file mode 100644 index 7df9ccf1a37..00000000000 --- a/reactos/tools/unicode/c_1250.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 1250 (ANSI Eastern Europe) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0081, 0x201a, 0x0083, 0x201e, 0x2026, 0x2020, 0x2021, - 0x0088, 0x2030, 0x0160, 0x2039, 0x015a, 0x0164, 0x017d, 0x0179, - 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x0098, 0x2122, 0x0161, 0x203a, 0x015b, 0x0165, 0x017e, 0x017a, - 0x00a0, 0x02c7, 0x02d8, 0x0141, 0x00a4, 0x0104, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x015e, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x017b, - 0x00b0, 0x00b1, 0x02db, 0x0142, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x0105, 0x015f, 0x00bb, 0x013d, 0x02dd, 0x013e, 0x017c, - 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, - 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, - 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, - 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, - 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, - 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x81, 0x3f, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, - 0x88, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa0, 0x21, 0x63, 0x4c, 0xa4, 0x59, 0xa6, 0xa7, - 0xa8, 0xa9, 0x61, 0xab, 0xac, 0xad, 0xae, 0x97, - 0xb0, 0xb1, 0x32, 0x33, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0x31, 0x6f, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0xc1, 0xc2, 0x41, 0xc4, 0x41, 0x41, 0xc7, - 0x45, 0xc9, 0x45, 0xcb, 0x49, 0xcd, 0xce, 0x49, - 0xd0, 0x4e, 0x4f, 0xd3, 0xd4, 0x4f, 0xd6, 0xd7, - 0x4f, 0x55, 0xda, 0x55, 0xdc, 0xdd, 0x3f, 0xdf, - 0x61, 0xe1, 0xe2, 0x61, 0xe4, 0x61, 0x61, 0xe7, - 0x65, 0xe9, 0x65, 0xeb, 0x69, 0xed, 0xee, 0x69, - 0x64, 0x6e, 0x6f, 0xf3, 0xf4, 0x6f, 0xf6, 0xf7, - 0x6f, 0x75, 0xfa, 0x75, 0xfc, 0xfd, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0xc3, 0xe3, 0xa5, 0xb9, 0xc6, 0xe6, - 0x43, 0x63, 0x43, 0x63, 0xc8, 0xe8, 0xcf, 0xef, - 0xd0, 0xf0, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0xca, 0xea, 0xcc, 0xec, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0xc5, 0xe5, 0x4c, 0x6c, 0xbc, 0xbe, 0x3f, - 0x3f, 0xa3, 0xb3, 0xd1, 0xf1, 0x4e, 0x6e, 0xd2, - 0xf2, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd5, 0xf5, 0x4f, 0x6f, 0xc0, 0xe0, 0x52, 0x72, - 0xd8, 0xf8, 0x8c, 0x9c, 0x53, 0x73, 0xaa, 0xba, - 0x8a, 0x9a, 0xde, 0xfe, 0x8d, 0x9d, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0xd9, 0xf9, - 0xdb, 0xfb, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x8f, 0x9f, 0xaf, 0xbf, 0x8e, 0x9e, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0xbd, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0xa1, - 0x27, 0x97, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xff, 0xb0, 0xb2, 0x7e, 0xbd, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x5e, 0x7e, 0x97, 0x97, 0xa2, 0xff, - 0xa8, 0x3f, 0xb0, 0xbd, 0xa1, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x8c, 0x9c, 0x8a, 0x9a, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0xc3, 0xe3, - 0xc3, 0xe3, 0xc3, 0xe3, 0xc3, 0xe3, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0xb4, 0xbd, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0x97, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x5e, 0x9b, 0xa1, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x97, 0x97, 0x97, 0x97, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0xac, 0x97, 0xa6, 0x59, 0x3f, 0x3f, - 0x7c, 0x8b, 0x5e, 0x9b, 0xa1, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_1250 = -{ - { 1250, 1, 0x003f, 0x003f, "ANSI Eastern Europe" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1251.c b/reactos/tools/unicode/c_1251.c deleted file mode 100644 index bb4ede20b3e..00000000000 --- a/reactos/tools/unicode/c_1251.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 1251 (ANSI Cyrillic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, - 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, - 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x0098, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, - 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, - 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, - 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, - 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa0, 0x21, 0x63, 0x4c, 0xa4, 0x59, 0xa6, 0xa7, - 0x22, 0xa9, 0x61, 0xab, 0xac, 0xad, 0xae, 0x97, - 0xb0, 0xb1, 0x32, 0x33, 0x27, 0xb5, 0xb6, 0xb7, - 0x2c, 0x31, 0x6f, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x97, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x97, 0x97, 0x3f, 0x3f, - 0x22, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0400 .. 0x04ff */ - 0xc5, 0xa8, 0x80, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, - 0xa3, 0x8a, 0x8c, 0x8e, 0x8d, 0xc8, 0xa1, 0x8f, - 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, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - 0xe5, 0xb8, 0x90, 0x83, 0xba, 0xbe, 0xb3, 0xbf, - 0xbc, 0x9a, 0x9c, 0x9e, 0x9d, 0xe8, 0xa2, 0x9f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa5, 0xb4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xc6, 0xe6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc0, 0xe0, 0xc0, 0xe0, 0x3f, 0x3f, 0xc5, 0xe5, - 0x3f, 0x3f, 0x3f, 0x3f, 0xc6, 0xe6, 0xc7, 0xe7, - 0x3f, 0x3f, 0xc8, 0xe8, 0xc8, 0xe8, 0xce, 0xee, - 0x3f, 0x3f, 0x3f, 0x3f, 0xdd, 0xfd, 0xd3, 0xf3, - 0xd3, 0xf3, 0xd3, 0xf3, 0xd7, 0xf7, 0x3f, 0x3f, - 0xdb, 0xfb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xed, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0x27, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0x97, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x88, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0xb9, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x5e, 0x9b, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x97, 0x97, 0x97, 0x97, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0xac, 0x97, 0xa6, 0x59, 0x3f, 0x3f, - 0x7c, 0x8b, 0x5e, 0x9b, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_1251 = -{ - { 1251, 1, 0x003f, 0x003f, "ANSI Cyrillic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1252.c b/reactos/tools/unicode/c_1252.c deleted file mode 100644 index 04a5485a515..00000000000 --- a/reactos/tools/unicode/c_1252.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 1252 (ANSI Latin 1) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, - 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x017d, 0x008f, - 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x017e, 0x0178, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x81, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x8d, 0x3f, 0x8f, - 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0x3f, 0x3f, - 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, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0xd0, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x8c, 0x9c, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x8a, 0x9a, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x9f, 0x5a, 0x7a, 0x5a, 0x7a, 0x8e, 0x9e, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x88, 0x76, - 0x27, 0xaf, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x98, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x88, 0x98, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0xf0, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x8a, 0x9a, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0xb4, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x88, 0x9b, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x98, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x8b, 0x88, 0x9b, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_1252 = -{ - { 1252, 1, 0x003f, 0x003f, "ANSI Latin 1" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1253.c b/reactos/tools/unicode/c_1253.c deleted file mode 100644 index 49bc3b9ef29..00000000000 --- a/reactos/tools/unicode/c_1253.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 1253 (ANSI Greek) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, - 0x0088, 0x2030, 0x008a, 0x2039, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x0098, 0x2122, 0x009a, 0x203a, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x0385, 0x0386, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x003f, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x2015, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x00b5, 0x00b6, 0x00b7, - 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, - 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x003f, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, - 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, - 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x003f -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x81, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x88, 0x3f, 0x8a, 0x3f, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x3f, 0x9a, 0x3f, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0x21, 0x63, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0x61, 0xab, 0xac, 0xad, 0xae, 0x97, - 0xb0, 0xb1, 0xb2, 0xb3, 0x27, 0xb5, 0xb6, 0xb7, - 0x2c, 0x31, 0x6f, 0xbb, 0x3f, 0xbd, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0xe2, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x97, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x97, 0x97, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa1, 0xa2, 0xb7, - 0xb8, 0xb9, 0xba, 0x3f, 0xbc, 0x3f, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0x3f, 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, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x3f, - 0xe2, 0xe8, 0xd5, 0xd5, 0xd5, 0xf6, 0xf0, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xf1, 0xf2, 0x3f, 0xc8, 0xe5, 0x3f, 0x3f, - 0x3f, 0xd3, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe2, 0xe3, 0xe4, - 0xf6, 0xf7, 0x69, 0x72, 0x75, 0x76, 0xe2, 0xe3, - 0xf1, 0xf6, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0xe8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0x3f, 0x3f, - 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, - 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, - 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, - 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, - 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0x3f, 0x3f, - 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x3f, 0x3f, - 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, - 0x3f, 0xd5, 0x3f, 0xd5, 0x3f, 0xd5, 0x3f, 0xd5, - 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, - 0xe1, 0xdc, 0xe5, 0xdd, 0xe7, 0xde, 0xe9, 0xdf, - 0xef, 0xfc, 0xf5, 0xfd, 0xf9, 0xfe, 0x3f, 0x3f, - 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, - 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, - 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, - 0xe1, 0xe1, 0xe1, 0xe1, 0xdc, 0x3f, 0xe1, 0xe1, - 0xc1, 0xc1, 0xc1, 0xa2, 0xc1, 0x3f, 0xe9, 0x3f, - 0x3f, 0xa8, 0xe7, 0xe7, 0xde, 0x3f, 0xe7, 0xe7, - 0xc5, 0xb8, 0xc7, 0xb9, 0xc7, 0x3f, 0x3f, 0x3f, - 0xe9, 0xe9, 0xfa, 0xc0, 0x3f, 0x3f, 0xe9, 0xfa, - 0xc9, 0xc9, 0xc9, 0xba, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf5, 0xf5, 0xfb, 0xe0, 0xf1, 0xf1, 0xf5, 0xfb, - 0xd5, 0xd5, 0xd5, 0xbe, 0xd1, 0xa8, 0xa1, 0x60, - 0x3f, 0x3f, 0xf9, 0xf9, 0xfe, 0x3f, 0xf9, 0xf9, - 0xcf, 0xbc, 0xd9, 0xbf, 0xd9, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0xaf, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0x27, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0x97, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0xd9, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xf0, 0xe3, 0xc3, 0xd0, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x5e, 0x9b, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x97, 0x97, 0x97, 0x97, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0xa3, 0xac, 0x97, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x8b, 0x5e, 0x9b, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_1253 = -{ - { 1253, 1, 0x003f, 0x003f, "ANSI Greek" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1254.c b/reactos/tools/unicode/c_1254.c deleted file mode 100644 index 5d30611f12c..00000000000 --- a/reactos/tools/unicode/c_1254.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 1254 (ANSI Turkish) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, - 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f, - 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x81, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x8d, 0x8e, 0x8f, - 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0x9e, 0x3f, - 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, - 0x44, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x59, 0x3f, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0x64, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x79, 0x3f, 0xff, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0xd0, 0xf0, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0xdd, 0xfd, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x8c, 0x9c, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0xde, 0xfe, - 0x8a, 0x9a, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x9f, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x88, 0x76, - 0x27, 0xaf, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x98, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x88, 0x98, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x8a, 0x9a, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0xb4, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x88, 0x9b, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x98, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x8b, 0x88, 0x9b, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_1254 = -{ - { 1254, 1, 0x003f, 0x003f, "ANSI Turkish" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1255.c b/reactos/tools/unicode/c_1255.c deleted file mode 100644 index 31f2d98623b..00000000000 --- a/reactos/tools/unicode/c_1255.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 1255 (ANSI Hebrew) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, - 0x02c6, 0x2030, 0x008a, 0x2039, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x02dc, 0x2122, 0x009a, 0x203a, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, - 0x05b8, 0x05b9, 0x003f, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, - 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3, - 0x05f4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x00de, 0x00df, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, 0x003f, 0x003f, 0x200e, 0x200f, 0x003f -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x81, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8a, 0x3f, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x9a, 0x3f, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0x3f, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0x61, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0x6f, 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, 0xaa, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0xdf, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0xba, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x88, 0x76, - 0x27, 0xaf, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x98, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x88, 0x98, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0500 .. 0x05ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0x3f, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0xfd, 0xfe, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0xb4, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xa4, 0x3f, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0xe0, 0xe1, 0xe2, - 0xe3, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x88, 0x9b, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x98, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0x3f, 0xd6, - 0xf2, 0xe0, 0xe3, 0xe4, 0xeb, 0xec, 0xed, 0xf8, - 0xfa, 0x2b, 0xf9, 0xf9, 0xf9, 0xf9, 0xe0, 0xe0, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x3f, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0x3f, 0xee, 0x3f, - 0xf0, 0xf1, 0x3f, 0xf3, 0xf4, 0x3f, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xe5, 0xe1, 0xeb, 0xf4, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x8b, 0x88, 0x9b, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x0400, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_1255 = -{ - { 1255, 1, 0x003f, 0x003f, "ANSI Hebrew" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1256.c b/reactos/tools/unicode/c_1256.c deleted file mode 100644 index 13a4569ac07..00000000000 --- a/reactos/tools/unicode/c_1256.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 1256 (ANSI Arabic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, - 0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, - 0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba, - 0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f, - 0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, - 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, - 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7, - 0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, - 0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef, - 0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7, - 0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2 -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa0, 0x21, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0x61, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0x6f, 0xbb, 0xbc, 0xbd, 0xbe, 0x3f, - 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, 0x59, 0x3f, 0x3f, - 0xe0, 0x61, 0xe2, 0x61, 0x61, 0x61, 0x61, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0x69, 0x69, 0xee, 0xef, - 0x64, 0x6e, 0x6f, 0x6f, 0xf4, 0x6f, 0x6f, 0xf7, - 0x6f, 0xf9, 0x75, 0xfb, 0xfc, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x8c, 0x9c, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0xfc, 0x55, - 0xfc, 0x55, 0xfc, 0x55, 0xfc, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x88, 0x76, - 0x27, 0xaf, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x88, 0x7e, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0600 .. 0x06ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xba, 0x3f, 0x3f, 0x3f, 0xbf, - 0x3f, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, - 0xd9, 0xda, 0xdb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdc, 0xdd, 0xde, 0xdf, 0xe1, 0xe3, 0xe4, 0xe5, - 0xe6, 0xec, 0xed, 0xf0, 0xf1, 0xf2, 0xf3, 0xf5, - 0xf6, 0xf8, 0xfa, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8a, 0x3f, 0x3f, 0x3f, 0x3f, 0x81, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x8d, 0x3f, - 0x8f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x9a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x98, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x90, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x9f, 0x3f, 0x3f, 0x3f, 0xaa, 0x3f, - 0x3f, 0xc0, 0xc0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0xe2, 0x41, 0xe2, - 0x41, 0xe2, 0x41, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0xea, - 0x45, 0xea, 0x45, 0xea, 0x45, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0xf4, 0x4f, 0xf4, 0x4f, 0xf4, 0x4f, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x9d, 0x9e, 0xfd, 0xfe, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0xb4, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x88, 0x9b, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x8b, 0x88, 0x9b, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x1200, 0x0400, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_1256 = -{ - { 1256, 1, 0x003f, 0x003f, "ANSI Arabic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1257.c b/reactos/tools/unicode/c_1257.c deleted file mode 100644 index a71e6281ae0..00000000000 --- a/reactos/tools/unicode/c_1257.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 1257 (ANSI Baltic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0081, 0x201a, 0x0083, 0x201e, 0x2026, 0x2020, 0x2021, - 0x0088, 0x2030, 0x008a, 0x2039, 0x008c, 0x00a8, 0x02c7, 0x00b8, - 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x0098, 0x2122, 0x009a, 0x203a, 0x009c, 0x00af, 0x02db, 0x009f, - 0x00a0, 0x003f, 0x00a2, 0x00a3, 0x00a4, 0x003f, 0x00a6, 0x00a7, - 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, - 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, - 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, - 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, - 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, - 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, - 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, - 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, - 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x02d9 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x81, 0x3f, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, - 0x88, 0x3f, 0x8a, 0x3f, 0x8c, 0x3f, 0x3f, 0x3f, - 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x3f, 0x9a, 0x3f, 0x9c, 0x3f, 0x3f, 0x9f, - 0xa0, 0x21, 0xa2, 0xa3, 0xa4, 0x59, 0xa6, 0xa7, - 0x8d, 0xa9, 0x61, 0xab, 0xac, 0xad, 0xae, 0x9d, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0x8f, 0xb9, 0x6f, 0xbb, 0xbc, 0xbd, 0xbe, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0xc4, 0xc5, 0xaf, 0x43, - 0x45, 0xc9, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0xd3, 0x4f, 0xd5, 0xd6, 0xd7, - 0xa8, 0x55, 0x55, 0x55, 0xdc, 0x59, 0x3f, 0xdf, - 0x61, 0x61, 0x61, 0x61, 0xe4, 0xe5, 0xbf, 0x63, - 0x65, 0xe9, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0xf3, 0x6f, 0xf5, 0xf6, 0xf7, - 0xb8, 0x75, 0x75, 0x75, 0xfc, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0xc2, 0xe2, 0x41, 0x61, 0xc0, 0xe0, 0xc3, 0xe3, - 0x43, 0x63, 0x43, 0x63, 0xc8, 0xe8, 0x44, 0x64, - 0x44, 0x64, 0xc7, 0xe7, 0x45, 0x65, 0xcb, 0xeb, - 0xc6, 0xe6, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0xcc, 0xec, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0xce, 0xee, 0x49, 0x69, 0xc1, 0xe1, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0xcd, 0xed, - 0x3f, 0x4c, 0x6c, 0xcf, 0xef, 0x4c, 0x6c, 0x3f, - 0x3f, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0xd4, 0xf4, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0xaa, 0xba, - 0x52, 0x72, 0xda, 0xfa, 0x53, 0x73, 0x53, 0x73, - 0xd0, 0xf0, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0xdb, 0xfb, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xd8, 0xf8, 0x57, 0x77, 0x59, 0x79, - 0x59, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xaf, 0xbf, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xaf, 0xbf, 0xa8, 0xb8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x8e, - 0x27, 0x9d, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xff, 0xb0, 0x9e, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x5e, 0x7e, 0x9d, 0x9d, 0x3f, 0xff, - 0x8d, 0x3f, 0xb0, 0x22, 0x8e, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x8f, - 0x9e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0x8d, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x8d, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xaf, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0xc7, 0xe7, 0xc7, 0xe7, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0xd4, 0xf4, 0xd4, 0xf4, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0xda, 0xfa, 0xd0, 0xf0, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xdb, 0xfb, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x8d, 0x8d, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0xb4, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0x9d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x5e, 0x9b, 0x8e, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x9d, 0x9d, 0x9d, 0x9d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0x9d, 0xa6, 0x59, 0x3f, 0x3f, - 0x7c, 0x8b, 0x5e, 0x9b, 0x8e, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_1257 = -{ - { 1257, 1, 0x003f, 0x003f, "ANSI Baltic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_1258.c b/reactos/tools/unicode/c_1258.c deleted file mode 100644 index 791f1fbbcc0..00000000000 --- a/reactos/tools/unicode/c_1258.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 1258 (ANSI/OEM Viet Nam) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, - 0x02c6, 0x2030, 0x008a, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f, - 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x02dc, 0x2122, 0x009a, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x0300, 0x00cd, 0x00ce, 0x00cf, - 0x0110, 0x00d1, 0x0309, 0x00d3, 0x00d4, 0x01a0, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x01af, 0x0303, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0301, 0x00ed, 0x00ee, 0x00ef, - 0x0111, 0x00f1, 0x0323, 0x00f3, 0x00f4, 0x01a1, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x01b0, 0x20ab, 0x00ff -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x81, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8a, 0x3f, 0x3f, 0x8d, 0x8e, 0x8f, - 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x9a, 0x3f, 0x3f, 0x9d, 0x9e, 0x3f, - 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, 0x41, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0x49, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0x4f, 0xd3, 0xd4, 0x4f, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x59, 0x3f, 0xdf, - 0xe0, 0xe1, 0xe2, 0x61, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0x69, 0xed, 0xee, 0xef, - 0x64, 0xf1, 0x6f, 0xf3, 0xf4, 0x6f, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x79, 0x3f, 0xff, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0xc3, 0xe3, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0xd0, 0xf0, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x8c, 0x9c, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x9f, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x83, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0xd5, 0xf5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0xdd, - 0xfd, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x88, 0x76, - 0x27, 0xaf, 0xb4, 0xcc, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x98, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0xcc, 0xec, 0x88, 0xde, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0xd2, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xf2, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xcc, 0xec, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xec, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0xc3, 0xe3, - 0xc3, 0xe3, 0xc3, 0xe3, 0xc3, 0xe3, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0xd5, 0xf5, 0xd5, 0xf5, 0xd5, 0xf5, - 0xd5, 0xf5, 0xd5, 0xf5, 0x55, 0x75, 0x55, 0x75, - 0xdd, 0xfd, 0xdd, 0xfd, 0xdd, 0xfd, 0xdd, 0xfd, - 0xdd, 0xfd, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x82, 0x91, 0x93, 0x94, 0x84, 0x3f, - 0x86, 0x87, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x89, 0x3f, 0xb4, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xfe, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x99, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x88, 0x9b, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x98, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x8b, 0x9b, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x84, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x8b, 0x88, 0x9b, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_1258 = -{ - { 1258, 1, 0x003f, 0x003f, "ANSI/OEM Viet Nam" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_20866.c b/reactos/tools/unicode/c_20866.c deleted file mode 100644 index c0d5bdc6b85..00000000000 --- a/reactos/tools/unicode/c_20866.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 20866 (Russian KOI8) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-R.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, - 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, - 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, - 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, - 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, - 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, - 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, - 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, - 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, - 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, - 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9a, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0x3f, - 0x22, 0xbf, 0x61, 0x3c, 0x3f, 0x2d, 0x72, 0x2d, - 0x9c, 0x3f, 0x9d, 0x33, 0x27, 0x75, 0x3f, 0x9e, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x9f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x81, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x9c, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x9c, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x9e, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0400 .. 0x04ff */ - 0xe5, 0xb3, 0x3f, 0xe7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xeb, 0xe9, 0xf5, 0x3f, - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, - 0xc5, 0xa3, 0x3f, 0xc7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xcb, 0xc9, 0xd5, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf6, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0xc1, 0xe1, 0xc1, 0x3f, 0x3f, 0xe5, 0xc5, - 0x3f, 0x3f, 0x3f, 0x3f, 0xf6, 0xd6, 0xfa, 0xda, - 0x3f, 0x3f, 0xe9, 0xc9, 0xe9, 0xc9, 0xef, 0xcf, - 0x3f, 0x3f, 0x3f, 0x3f, 0xfc, 0xdc, 0xf5, 0xd5, - 0xf5, 0xd5, 0xf5, 0xd5, 0xfe, 0xde, 0x3f, 0x3f, - 0xf9, 0xd9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xce, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x95, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9c, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x9c, 0x95, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x97, 0x97, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x98, 0x99, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x98, 0x99, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9e, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x93, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x80, 0x80, 0x81, 0x81, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x82, 0x82, 0x82, 0x82, - 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, - 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x2d, 0x2d, 0x7c, 0x7c, - 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, - 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, - 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, - 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x8b, 0x3f, 0x3f, 0x3f, 0x8c, 0x3f, 0x3f, 0x3f, - 0x8d, 0x3f, 0x3f, 0x3f, 0x8e, 0x3f, 0x3f, 0x3f, - 0x8f, 0x90, 0x91, 0x92, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x94, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x81, 0x3c, 0x5e, 0x3e, 0x76, 0x94, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_20866 = -{ - { 20866, 1, 0x003f, 0x003f, "Russian KOI8" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_20932.c b/reactos/tools/unicode/c_20932.c deleted file mode 100644 index 4cef7977340..00000000000 --- a/reactos/tools/unicode/c_20932.c +++ /dev/null @@ -1,6298 +0,0 @@ -/* code page 20932 (EUC-JP) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[20480] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0000, 0x0000, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003f, - /* unused lead bytes */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte 8e */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, - 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, - 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, - 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, - 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, - 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, - 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, - 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x3000, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0xff1a, - 0xff1b, 0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0x00a8, - 0xff3e, 0xffe3, 0xff3f, 0x30fd, 0x30fe, 0x309d, 0x309e, 0x3003, - 0x4edd, 0x3005, 0x3006, 0x3007, 0x30fc, 0x2015, 0x2010, 0xff0f, - 0xff3c, 0x301c, 0x2016, 0xff5c, 0x2026, 0x2025, 0x2018, 0x2019, - 0x201c, 0x201d, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, - 0xff5b, 0xff5d, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, - 0x300e, 0x300f, 0x3010, 0x3011, 0xff0b, 0x2212, 0x00b1, 0x00d7, - 0x00f7, 0xff1d, 0x2260, 0xff1c, 0xff1e, 0x2266, 0x2267, 0x221e, - 0x2234, 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xffe5, - 0xff04, 0x00a2, 0x00a3, 0xff05, 0xff03, 0xff06, 0xff0a, 0xff20, - 0x00a7, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x003f, - /* lead byte a2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, - 0x203b, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, - 0x222a, 0x2229, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x2227, 0x2228, 0x00ac, 0x21d2, 0x21d4, 0x2200, - 0x2203, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x2220, 0x22a5, 0x2312, 0x2202, - 0x2207, 0x2261, 0x2252, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, - 0x2235, 0x222b, 0x222c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x212b, 0x2030, 0x266f, 0x266d, 0x266a, 0x2020, - 0x2021, 0x00b6, 0x003f, 0x003f, 0x003f, 0x003f, 0x25ef, 0x003f, - /* lead byte a3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, - 0xff18, 0xff19, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, - 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, - 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, - 0xff38, 0xff39, 0xff3a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, - 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, - 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, - 0xff58, 0xff59, 0xff5a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, - 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, - 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, - 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, - 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, - 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, - 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, - 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, - 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, - 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, - 0x3090, 0x3091, 0x3092, 0x3093, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, - 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, - 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, - 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, - 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, - 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, - 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, - 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, - 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, - 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, - 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, - 0x03a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, - 0x03c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, - 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, - 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, - 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, - 0x042e, 0x042f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, - 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, - 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, - 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, - 0x044e, 0x044f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, - 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, - 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, - 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, - 0x2542, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte b0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x4e9c, 0x5516, 0x5a03, 0x963f, 0x54c0, 0x611b, 0x6328, - 0x59f6, 0x9022, 0x8475, 0x831c, 0x7a50, 0x60aa, 0x63e1, 0x6e25, - 0x65ed, 0x8466, 0x82a6, 0x9bf5, 0x6893, 0x5727, 0x65a1, 0x6271, - 0x5b9b, 0x59d0, 0x867b, 0x98f4, 0x7d62, 0x7dbe, 0x9b8e, 0x6216, - 0x7c9f, 0x88b7, 0x5b89, 0x5eb5, 0x6309, 0x6697, 0x6848, 0x95c7, - 0x978d, 0x674f, 0x4ee5, 0x4f0a, 0x4f4d, 0x4f9d, 0x5049, 0x56f2, - 0x5937, 0x59d4, 0x5a01, 0x5c09, 0x60df, 0x610f, 0x6170, 0x6613, - 0x6905, 0x70ba, 0x754f, 0x7570, 0x79fb, 0x7dad, 0x7def, 0x80c3, - 0x840e, 0x8863, 0x8b02, 0x9055, 0x907a, 0x533b, 0x4e95, 0x4ea5, - 0x57df, 0x80b2, 0x90c1, 0x78ef, 0x4e00, 0x58f1, 0x6ea2, 0x9038, - 0x7a32, 0x8328, 0x828b, 0x9c2f, 0x5141, 0x5370, 0x54bd, 0x54e1, - 0x56e0, 0x59fb, 0x5f15, 0x98f2, 0x6deb, 0x80e4, 0x852d, 0x003f, - /* lead byte b1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9662, 0x9670, 0x96a0, 0x97fb, 0x540b, 0x53f3, 0x5b87, - 0x70cf, 0x7fbd, 0x8fc2, 0x96e8, 0x536f, 0x9d5c, 0x7aba, 0x4e11, - 0x7893, 0x81fc, 0x6e26, 0x5618, 0x5504, 0x6b1d, 0x851a, 0x9c3b, - 0x59e5, 0x53a9, 0x6d66, 0x74dc, 0x958f, 0x5642, 0x4e91, 0x904b, - 0x96f2, 0x834f, 0x990c, 0x53e1, 0x55b6, 0x5b30, 0x5f71, 0x6620, - 0x66f3, 0x6804, 0x6c38, 0x6cf3, 0x6d29, 0x745b, 0x76c8, 0x7a4e, - 0x9834, 0x82f1, 0x885b, 0x8a60, 0x92ed, 0x6db2, 0x75ab, 0x76ca, - 0x99c5, 0x60a6, 0x8b01, 0x8d8a, 0x95b2, 0x698e, 0x53ad, 0x5186, - 0x5712, 0x5830, 0x5944, 0x5bb4, 0x5ef6, 0x6028, 0x63a9, 0x63f4, - 0x6cbf, 0x6f14, 0x708e, 0x7114, 0x7159, 0x71d5, 0x733f, 0x7e01, - 0x8276, 0x82d1, 0x8597, 0x9060, 0x925b, 0x9d1b, 0x5869, 0x65bc, - 0x6c5a, 0x7525, 0x51f9, 0x592e, 0x5965, 0x5f80, 0x5fdc, 0x003f, - /* lead byte b2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x62bc, 0x65fa, 0x6a2a, 0x6b27, 0x6bb4, 0x738b, 0x7fc1, - 0x8956, 0x9d2c, 0x9d0e, 0x9ec4, 0x5ca1, 0x6c96, 0x837b, 0x5104, - 0x5c4b, 0x61b6, 0x81c6, 0x6876, 0x7261, 0x4e59, 0x4ffa, 0x5378, - 0x6069, 0x6e29, 0x7a4f, 0x97f3, 0x4e0b, 0x5316, 0x4eee, 0x4f55, - 0x4f3d, 0x4fa1, 0x4f73, 0x52a0, 0x53ef, 0x5609, 0x590f, 0x5ac1, - 0x5bb6, 0x5be1, 0x79d1, 0x6687, 0x679c, 0x67b6, 0x6b4c, 0x6cb3, - 0x706b, 0x73c2, 0x798d, 0x79be, 0x7a3c, 0x7b87, 0x82b1, 0x82db, - 0x8304, 0x8377, 0x83ef, 0x83d3, 0x8766, 0x8ab2, 0x5629, 0x8ca8, - 0x8fe6, 0x904e, 0x971e, 0x868a, 0x4fc4, 0x5ce8, 0x6211, 0x7259, - 0x753b, 0x81e5, 0x82bd, 0x86fe, 0x8cc0, 0x96c5, 0x9913, 0x99d5, - 0x4ecb, 0x4f1a, 0x89e3, 0x56de, 0x584a, 0x58ca, 0x5efb, 0x5feb, - 0x602a, 0x6094, 0x6062, 0x61d0, 0x6212, 0x62d0, 0x6539, 0x003f, - /* lead byte b3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9b41, 0x6666, 0x68b0, 0x6d77, 0x7070, 0x754c, 0x7686, - 0x7d75, 0x82a5, 0x87f9, 0x958b, 0x968e, 0x8c9d, 0x51f1, 0x52be, - 0x5916, 0x54b3, 0x5bb3, 0x5d16, 0x6168, 0x6982, 0x6daf, 0x788d, - 0x84cb, 0x8857, 0x8a72, 0x93a7, 0x9ab8, 0x6d6c, 0x99a8, 0x86d9, - 0x57a3, 0x67ff, 0x86ce, 0x920e, 0x5283, 0x5687, 0x5404, 0x5ed3, - 0x62e1, 0x64b9, 0x683c, 0x6838, 0x6bbb, 0x7372, 0x78ba, 0x7a6b, - 0x899a, 0x89d2, 0x8d6b, 0x8f03, 0x90ed, 0x95a3, 0x9694, 0x9769, - 0x5b66, 0x5cb3, 0x697d, 0x984d, 0x984e, 0x639b, 0x7b20, 0x6a2b, - 0x6a7f, 0x68b6, 0x9c0d, 0x6f5f, 0x5272, 0x559d, 0x6070, 0x62ec, - 0x6d3b, 0x6e07, 0x6ed1, 0x845b, 0x8910, 0x8f44, 0x4e14, 0x9c39, - 0x53f6, 0x691b, 0x6a3a, 0x9784, 0x682a, 0x515c, 0x7ac3, 0x84b2, - 0x91dc, 0x938c, 0x565b, 0x9d28, 0x6822, 0x8305, 0x8431, 0x003f, - /* lead byte b4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7ca5, 0x5208, 0x82c5, 0x74e6, 0x4e7e, 0x4f83, 0x51a0, - 0x5bd2, 0x520a, 0x52d8, 0x52e7, 0x5dfb, 0x559a, 0x582a, 0x59e6, - 0x5b8c, 0x5b98, 0x5bdb, 0x5e72, 0x5e79, 0x60a3, 0x611f, 0x6163, - 0x61be, 0x63db, 0x6562, 0x67d1, 0x6853, 0x68fa, 0x6b3e, 0x6b53, - 0x6c57, 0x6f22, 0x6f97, 0x6f45, 0x74b0, 0x7518, 0x76e3, 0x770b, - 0x7aff, 0x7ba1, 0x7c21, 0x7de9, 0x7f36, 0x7ff0, 0x809d, 0x8266, - 0x839e, 0x89b3, 0x8acc, 0x8cab, 0x9084, 0x9451, 0x9593, 0x9591, - 0x95a2, 0x9665, 0x97d3, 0x9928, 0x8218, 0x4e38, 0x542b, 0x5cb8, - 0x5dcc, 0x73a9, 0x764c, 0x773c, 0x5ca9, 0x7feb, 0x8d0b, 0x96c1, - 0x9811, 0x9854, 0x9858, 0x4f01, 0x4f0e, 0x5371, 0x559c, 0x5668, - 0x57fa, 0x5947, 0x5b09, 0x5bc4, 0x5c90, 0x5e0c, 0x5e7e, 0x5fcc, - 0x63ee, 0x673a, 0x65d7, 0x65e2, 0x671f, 0x68cb, 0x68c4, 0x003f, - /* lead byte b5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6a5f, 0x5e30, 0x6bc5, 0x6c17, 0x6c7d, 0x757f, 0x7948, - 0x5b63, 0x7a00, 0x7d00, 0x5fbd, 0x898f, 0x8a18, 0x8cb4, 0x8d77, - 0x8ecc, 0x8f1d, 0x98e2, 0x9a0e, 0x9b3c, 0x4e80, 0x507d, 0x5100, - 0x5993, 0x5b9c, 0x622f, 0x6280, 0x64ec, 0x6b3a, 0x72a0, 0x7591, - 0x7947, 0x7fa9, 0x87fb, 0x8abc, 0x8b70, 0x63ac, 0x83ca, 0x97a0, - 0x5409, 0x5403, 0x55ab, 0x6854, 0x6a58, 0x8a70, 0x7827, 0x6775, - 0x9ecd, 0x5374, 0x5ba2, 0x811a, 0x8650, 0x9006, 0x4e18, 0x4e45, - 0x4ec7, 0x4f11, 0x53ca, 0x5438, 0x5bae, 0x5f13, 0x6025, 0x6551, - 0x673d, 0x6c42, 0x6c72, 0x6ce3, 0x7078, 0x7403, 0x7a76, 0x7aae, - 0x7b08, 0x7d1a, 0x7cfe, 0x7d66, 0x65e7, 0x725b, 0x53bb, 0x5c45, - 0x5de8, 0x62d2, 0x62e0, 0x6319, 0x6e20, 0x865a, 0x8a31, 0x8ddd, - 0x92f8, 0x6f01, 0x79a6, 0x9b5a, 0x4ea8, 0x4eab, 0x4eac, 0x003f, - /* lead byte b6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x4f9b, 0x4fa0, 0x50d1, 0x5147, 0x7af6, 0x5171, 0x51f6, - 0x5354, 0x5321, 0x537f, 0x53eb, 0x55ac, 0x5883, 0x5ce1, 0x5f37, - 0x5f4a, 0x602f, 0x6050, 0x606d, 0x631f, 0x6559, 0x6a4b, 0x6cc1, - 0x72c2, 0x72ed, 0x77ef, 0x80f8, 0x8105, 0x8208, 0x854e, 0x90f7, - 0x93e1, 0x97ff, 0x9957, 0x9a5a, 0x4ef0, 0x51dd, 0x5c2d, 0x6681, - 0x696d, 0x5c40, 0x66f2, 0x6975, 0x7389, 0x6850, 0x7c81, 0x50c5, - 0x52e4, 0x5747, 0x5dfe, 0x9326, 0x65a4, 0x6b23, 0x6b3d, 0x7434, - 0x7981, 0x79bd, 0x7b4b, 0x7dca, 0x82b9, 0x83cc, 0x887f, 0x895f, - 0x8b39, 0x8fd1, 0x91d1, 0x541f, 0x9280, 0x4e5d, 0x5036, 0x53e5, - 0x533a, 0x72d7, 0x7396, 0x77e9, 0x82e6, 0x8eaf, 0x99c6, 0x99c8, - 0x99d2, 0x5177, 0x611a, 0x865e, 0x55b0, 0x7a7a, 0x5076, 0x5bd3, - 0x9047, 0x9685, 0x4e32, 0x6adb, 0x91e7, 0x5c51, 0x5c48, 0x003f, - /* lead byte b7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6398, 0x7a9f, 0x6c93, 0x9774, 0x8f61, 0x7aaa, 0x718a, - 0x9688, 0x7c82, 0x6817, 0x7e70, 0x6851, 0x936c, 0x52f2, 0x541b, - 0x85ab, 0x8a13, 0x7fa4, 0x8ecd, 0x90e1, 0x5366, 0x8888, 0x7941, - 0x4fc2, 0x50be, 0x5211, 0x5144, 0x5553, 0x572d, 0x73ea, 0x578b, - 0x5951, 0x5f62, 0x5f84, 0x6075, 0x6176, 0x6167, 0x61a9, 0x63b2, - 0x643a, 0x656c, 0x666f, 0x6842, 0x6e13, 0x7566, 0x7a3d, 0x7cfb, - 0x7d4c, 0x7d99, 0x7e4b, 0x7f6b, 0x830e, 0x834a, 0x86cd, 0x8a08, - 0x8a63, 0x8b66, 0x8efd, 0x981a, 0x9d8f, 0x82b8, 0x8fce, 0x9be8, - 0x5287, 0x621f, 0x6483, 0x6fc0, 0x9699, 0x6841, 0x5091, 0x6b20, - 0x6c7a, 0x6f54, 0x7a74, 0x7d50, 0x8840, 0x8a23, 0x6708, 0x4ef6, - 0x5039, 0x5026, 0x5065, 0x517c, 0x5238, 0x5263, 0x55a7, 0x570f, - 0x5805, 0x5acc, 0x5efa, 0x61b2, 0x61f8, 0x62f3, 0x6372, 0x003f, - /* lead byte b8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x691c, 0x6a29, 0x727d, 0x72ac, 0x732e, 0x7814, 0x786f, - 0x7d79, 0x770c, 0x80a9, 0x898b, 0x8b19, 0x8ce2, 0x8ed2, 0x9063, - 0x9375, 0x967a, 0x9855, 0x9a13, 0x9e78, 0x5143, 0x539f, 0x53b3, - 0x5e7b, 0x5f26, 0x6e1b, 0x6e90, 0x7384, 0x73fe, 0x7d43, 0x8237, - 0x8a00, 0x8afa, 0x9650, 0x4e4e, 0x500b, 0x53e4, 0x547c, 0x56fa, - 0x59d1, 0x5b64, 0x5df1, 0x5eab, 0x5f27, 0x6238, 0x6545, 0x67af, - 0x6e56, 0x72d0, 0x7cca, 0x88b4, 0x80a1, 0x80e1, 0x83f0, 0x864e, - 0x8a87, 0x8de8, 0x9237, 0x96c7, 0x9867, 0x9f13, 0x4e94, 0x4e92, - 0x4f0d, 0x5348, 0x5449, 0x543e, 0x5a2f, 0x5f8c, 0x5fa1, 0x609f, - 0x68a7, 0x6a8e, 0x745a, 0x7881, 0x8a9e, 0x8aa4, 0x8b77, 0x9190, - 0x4e5e, 0x9bc9, 0x4ea4, 0x4f7c, 0x4faf, 0x5019, 0x5016, 0x5149, - 0x516c, 0x529f, 0x52b9, 0x52fe, 0x539a, 0x53e3, 0x5411, 0x003f, - /* lead byte b9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x540e, 0x5589, 0x5751, 0x57a2, 0x597d, 0x5b54, 0x5b5d, - 0x5b8f, 0x5de5, 0x5de7, 0x5df7, 0x5e78, 0x5e83, 0x5e9a, 0x5eb7, - 0x5f18, 0x6052, 0x614c, 0x6297, 0x62d8, 0x63a7, 0x653b, 0x6602, - 0x6643, 0x66f4, 0x676d, 0x6821, 0x6897, 0x69cb, 0x6c5f, 0x6d2a, - 0x6d69, 0x6e2f, 0x6e9d, 0x7532, 0x7687, 0x786c, 0x7a3f, 0x7ce0, - 0x7d05, 0x7d18, 0x7d5e, 0x7db1, 0x8015, 0x8003, 0x80af, 0x80b1, - 0x8154, 0x818f, 0x822a, 0x8352, 0x884c, 0x8861, 0x8b1b, 0x8ca2, - 0x8cfc, 0x90ca, 0x9175, 0x9271, 0x783f, 0x92fc, 0x95a4, 0x964d, - 0x9805, 0x9999, 0x9ad8, 0x9d3b, 0x525b, 0x52ab, 0x53f7, 0x5408, - 0x58d5, 0x62f7, 0x6fe0, 0x8c6a, 0x8f5f, 0x9eb9, 0x514b, 0x523b, - 0x544a, 0x56fd, 0x7a40, 0x9177, 0x9d60, 0x9ed2, 0x7344, 0x6f09, - 0x8170, 0x7511, 0x5ffd, 0x60da, 0x9aa8, 0x72db, 0x8fbc, 0x003f, - /* lead byte ba */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6b64, 0x9803, 0x4eca, 0x56f0, 0x5764, 0x58be, 0x5a5a, - 0x6068, 0x61c7, 0x660f, 0x6606, 0x6839, 0x68b1, 0x6df7, 0x75d5, - 0x7d3a, 0x826e, 0x9b42, 0x4e9b, 0x4f50, 0x53c9, 0x5506, 0x5d6f, - 0x5de6, 0x5dee, 0x67fb, 0x6c99, 0x7473, 0x7802, 0x8a50, 0x9396, - 0x88df, 0x5750, 0x5ea7, 0x632b, 0x50b5, 0x50ac, 0x518d, 0x6700, - 0x54c9, 0x585e, 0x59bb, 0x5bb0, 0x5f69, 0x624d, 0x63a1, 0x683d, - 0x6b73, 0x6e08, 0x707d, 0x91c7, 0x7280, 0x7815, 0x7826, 0x796d, - 0x658e, 0x7d30, 0x83dc, 0x88c1, 0x8f09, 0x969b, 0x5264, 0x5728, - 0x6750, 0x7f6a, 0x8ca1, 0x51b4, 0x5742, 0x962a, 0x583a, 0x698a, - 0x80b4, 0x54b2, 0x5d0e, 0x57fc, 0x7895, 0x9dfa, 0x4f5c, 0x524a, - 0x548b, 0x643e, 0x6628, 0x6714, 0x67f5, 0x7a84, 0x7b56, 0x7d22, - 0x932f, 0x685c, 0x9bad, 0x7b39, 0x5319, 0x518a, 0x5237, 0x003f, - /* lead byte bb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5bdf, 0x62f6, 0x64ae, 0x64e6, 0x672d, 0x6bba, 0x85a9, - 0x96d1, 0x7690, 0x9bd6, 0x634c, 0x9306, 0x9bab, 0x76bf, 0x6652, - 0x4e09, 0x5098, 0x53c2, 0x5c71, 0x60e8, 0x6492, 0x6563, 0x685f, - 0x71e6, 0x73ca, 0x7523, 0x7b97, 0x7e82, 0x8695, 0x8b83, 0x8cdb, - 0x9178, 0x9910, 0x65ac, 0x66ab, 0x6b8b, 0x4ed5, 0x4ed4, 0x4f3a, - 0x4f7f, 0x523a, 0x53f8, 0x53f2, 0x55e3, 0x56db, 0x58eb, 0x59cb, - 0x59c9, 0x59ff, 0x5b50, 0x5c4d, 0x5e02, 0x5e2b, 0x5fd7, 0x601d, - 0x6307, 0x652f, 0x5b5c, 0x65af, 0x65bd, 0x65e8, 0x679d, 0x6b62, - 0x6b7b, 0x6c0f, 0x7345, 0x7949, 0x79c1, 0x7cf8, 0x7d19, 0x7d2b, - 0x80a2, 0x8102, 0x81f3, 0x8996, 0x8a5e, 0x8a69, 0x8a66, 0x8a8c, - 0x8aee, 0x8cc7, 0x8cdc, 0x96cc, 0x98fc, 0x6b6f, 0x4e8b, 0x4f3c, - 0x4f8d, 0x5150, 0x5b57, 0x5bfa, 0x6148, 0x6301, 0x6642, 0x003f, - /* lead byte bc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6b21, 0x6ecb, 0x6cbb, 0x723e, 0x74bd, 0x75d4, 0x78c1, - 0x793a, 0x800c, 0x8033, 0x81ea, 0x8494, 0x8f9e, 0x6c50, 0x9e7f, - 0x5f0f, 0x8b58, 0x9d2b, 0x7afa, 0x8ef8, 0x5b8d, 0x96eb, 0x4e03, - 0x53f1, 0x57f7, 0x5931, 0x5ac9, 0x5ba4, 0x6089, 0x6e7f, 0x6f06, - 0x75be, 0x8cea, 0x5b9f, 0x8500, 0x7be0, 0x5072, 0x67f4, 0x829d, - 0x5c61, 0x854a, 0x7e1e, 0x820e, 0x5199, 0x5c04, 0x6368, 0x8d66, - 0x659c, 0x716e, 0x793e, 0x7d17, 0x8005, 0x8b1d, 0x8eca, 0x906e, - 0x86c7, 0x90aa, 0x501f, 0x52fa, 0x5c3a, 0x6753, 0x707c, 0x7235, - 0x914c, 0x91c8, 0x932b, 0x82e5, 0x5bc2, 0x5f31, 0x60f9, 0x4e3b, - 0x53d6, 0x5b88, 0x624b, 0x6731, 0x6b8a, 0x72e9, 0x73e0, 0x7a2e, - 0x816b, 0x8da3, 0x9152, 0x9996, 0x5112, 0x53d7, 0x546a, 0x5bff, - 0x6388, 0x6a39, 0x7dac, 0x9700, 0x56da, 0x53ce, 0x5468, 0x003f, - /* lead byte bd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5b97, 0x5c31, 0x5dde, 0x4fee, 0x6101, 0x62fe, 0x6d32, - 0x79c0, 0x79cb, 0x7d42, 0x7e4d, 0x7fd2, 0x81ed, 0x821f, 0x8490, - 0x8846, 0x8972, 0x8b90, 0x8e74, 0x8f2f, 0x9031, 0x914b, 0x916c, - 0x96c6, 0x919c, 0x4ec0, 0x4f4f, 0x5145, 0x5341, 0x5f93, 0x620e, - 0x67d4, 0x6c41, 0x6e0b, 0x7363, 0x7e26, 0x91cd, 0x9283, 0x53d4, - 0x5919, 0x5bbf, 0x6dd1, 0x795d, 0x7e2e, 0x7c9b, 0x587e, 0x719f, - 0x51fa, 0x8853, 0x8ff0, 0x4fca, 0x5cfb, 0x6625, 0x77ac, 0x7ae3, - 0x821c, 0x99ff, 0x51c6, 0x5faa, 0x65ec, 0x696f, 0x6b89, 0x6df3, - 0x6e96, 0x6f64, 0x76fe, 0x7d14, 0x5de1, 0x9075, 0x9187, 0x9806, - 0x51e6, 0x521d, 0x6240, 0x6691, 0x66d9, 0x6e1a, 0x5eb6, 0x7dd2, - 0x7f72, 0x66f8, 0x85af, 0x85f7, 0x8af8, 0x52a9, 0x53d9, 0x5973, - 0x5e8f, 0x5f90, 0x6055, 0x92e4, 0x9664, 0x50b7, 0x511f, 0x003f, - /* lead byte be */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x52dd, 0x5320, 0x5347, 0x53ec, 0x54e8, 0x5546, 0x5531, - 0x5617, 0x5968, 0x59be, 0x5a3c, 0x5bb5, 0x5c06, 0x5c0f, 0x5c11, - 0x5c1a, 0x5e84, 0x5e8a, 0x5ee0, 0x5f70, 0x627f, 0x6284, 0x62db, - 0x638c, 0x6377, 0x6607, 0x660c, 0x662d, 0x6676, 0x677e, 0x68a2, - 0x6a1f, 0x6a35, 0x6cbc, 0x6d88, 0x6e09, 0x6e58, 0x713c, 0x7126, - 0x7167, 0x75c7, 0x7701, 0x785d, 0x7901, 0x7965, 0x79f0, 0x7ae0, - 0x7b11, 0x7ca7, 0x7d39, 0x8096, 0x83d6, 0x848b, 0x8549, 0x885d, - 0x88f3, 0x8a1f, 0x8a3c, 0x8a54, 0x8a73, 0x8c61, 0x8cde, 0x91a4, - 0x9266, 0x937e, 0x9418, 0x969c, 0x9798, 0x4e0a, 0x4e08, 0x4e1e, - 0x4e57, 0x5197, 0x5270, 0x57ce, 0x5834, 0x58cc, 0x5b22, 0x5e38, - 0x60c5, 0x64fe, 0x6761, 0x6756, 0x6d44, 0x72b6, 0x7573, 0x7a63, - 0x84b8, 0x8b72, 0x91b8, 0x9320, 0x5631, 0x57f4, 0x98fe, 0x003f, - /* lead byte bf */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x62ed, 0x690d, 0x6b96, 0x71ed, 0x7e54, 0x8077, 0x8272, - 0x89e6, 0x98df, 0x8755, 0x8fb1, 0x5c3b, 0x4f38, 0x4fe1, 0x4fb5, - 0x5507, 0x5a20, 0x5bdd, 0x5be9, 0x5fc3, 0x614e, 0x632f, 0x65b0, - 0x664b, 0x68ee, 0x699b, 0x6d78, 0x6df1, 0x7533, 0x75b9, 0x771f, - 0x795e, 0x79e6, 0x7d33, 0x81e3, 0x82af, 0x85aa, 0x89aa, 0x8a3a, - 0x8eab, 0x8f9b, 0x9032, 0x91dd, 0x9707, 0x4eba, 0x4ec1, 0x5203, - 0x5875, 0x58ec, 0x5c0b, 0x751a, 0x5c3d, 0x814e, 0x8a0a, 0x8fc5, - 0x9663, 0x976d, 0x7b25, 0x8acf, 0x9808, 0x9162, 0x56f3, 0x53a8, - 0x9017, 0x5439, 0x5782, 0x5e25, 0x63a8, 0x6c34, 0x708a, 0x7761, - 0x7c8b, 0x7fe0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968f, - 0x745e, 0x9ac4, 0x5d07, 0x5d69, 0x6570, 0x67a2, 0x8da8, 0x96db, - 0x636e, 0x6749, 0x6919, 0x83c5, 0x9817, 0x96c0, 0x88fe, 0x003f, - /* lead byte c0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6f84, 0x647a, 0x5bf8, 0x4e16, 0x702c, 0x755d, 0x662f, - 0x51c4, 0x5236, 0x52e2, 0x59d3, 0x5f81, 0x6027, 0x6210, 0x653f, - 0x6574, 0x661f, 0x6674, 0x68f2, 0x6816, 0x6b63, 0x6e05, 0x7272, - 0x751f, 0x76db, 0x7cbe, 0x8056, 0x58f0, 0x88fd, 0x897f, 0x8aa0, - 0x8a93, 0x8acb, 0x901d, 0x9192, 0x9752, 0x9759, 0x6589, 0x7a0e, - 0x8106, 0x96bb, 0x5e2d, 0x60dc, 0x621a, 0x65a5, 0x6614, 0x6790, - 0x77f3, 0x7a4d, 0x7c4d, 0x7e3e, 0x810a, 0x8cac, 0x8d64, 0x8de1, - 0x8e5f, 0x78a9, 0x5207, 0x62d9, 0x63a5, 0x6442, 0x6298, 0x8a2d, - 0x7a83, 0x7bc0, 0x8aac, 0x96ea, 0x7d76, 0x820c, 0x8749, 0x4ed9, - 0x5148, 0x5343, 0x5360, 0x5ba3, 0x5c02, 0x5c16, 0x5ddd, 0x6226, - 0x6247, 0x64b0, 0x6813, 0x6834, 0x6cc9, 0x6d45, 0x6d17, 0x67d3, - 0x6f5c, 0x714e, 0x717d, 0x65cb, 0x7a7f, 0x7bad, 0x7dda, 0x003f, - /* lead byte c1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7e4a, 0x7fa8, 0x817a, 0x821b, 0x8239, 0x85a6, 0x8a6e, - 0x8cce, 0x8df5, 0x9078, 0x9077, 0x92ad, 0x9291, 0x9583, 0x9bae, - 0x524d, 0x5584, 0x6f38, 0x7136, 0x5168, 0x7985, 0x7e55, 0x81b3, - 0x7cce, 0x564c, 0x5851, 0x5ca8, 0x63aa, 0x66fe, 0x66fd, 0x695a, - 0x72d9, 0x758f, 0x758e, 0x790e, 0x7956, 0x79df, 0x7c97, 0x7d20, - 0x7d44, 0x8607, 0x8a34, 0x963b, 0x9061, 0x9f20, 0x50e7, 0x5275, - 0x53cc, 0x53e2, 0x5009, 0x55aa, 0x58ee, 0x594f, 0x723d, 0x5b8b, - 0x5c64, 0x531d, 0x60e3, 0x60f3, 0x635c, 0x6383, 0x633f, 0x63bb, - 0x64cd, 0x65e9, 0x66f9, 0x5de3, 0x69cd, 0x69fd, 0x6f15, 0x71e5, - 0x4e89, 0x75e9, 0x76f8, 0x7a93, 0x7cdf, 0x7dcf, 0x7d9c, 0x8061, - 0x8349, 0x8358, 0x846c, 0x84bc, 0x85fb, 0x88c5, 0x8d70, 0x9001, - 0x906d, 0x9397, 0x971c, 0x9a12, 0x50cf, 0x5897, 0x618e, 0x003f, - /* lead byte c2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x81d3, 0x8535, 0x8d08, 0x9020, 0x4fc3, 0x5074, 0x5247, - 0x5373, 0x606f, 0x6349, 0x675f, 0x6e2c, 0x8db3, 0x901f, 0x4fd7, - 0x5c5e, 0x8cca, 0x65cf, 0x7d9a, 0x5352, 0x8896, 0x5176, 0x63c3, - 0x5b58, 0x5b6b, 0x5c0a, 0x640d, 0x6751, 0x905c, 0x4ed6, 0x591a, - 0x592a, 0x6c70, 0x8a51, 0x553e, 0x5815, 0x59a5, 0x60f0, 0x6253, - 0x67c1, 0x8235, 0x6955, 0x9640, 0x99c4, 0x9a28, 0x4f53, 0x5806, - 0x5bfe, 0x8010, 0x5cb1, 0x5e2f, 0x5f85, 0x6020, 0x614b, 0x6234, - 0x66ff, 0x6cf0, 0x6ede, 0x80ce, 0x817f, 0x82d4, 0x888b, 0x8cb8, - 0x9000, 0x902e, 0x968a, 0x9edb, 0x9bdb, 0x4ee3, 0x53f0, 0x5927, - 0x7b2c, 0x918d, 0x984c, 0x9df9, 0x6edd, 0x7027, 0x5353, 0x5544, - 0x5b85, 0x6258, 0x629e, 0x62d3, 0x6ca2, 0x6fef, 0x7422, 0x8a17, - 0x9438, 0x6fc1, 0x8afe, 0x8338, 0x51e7, 0x86f8, 0x53ea, 0x003f, - /* lead byte c3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x53e9, 0x4f46, 0x9054, 0x8fb0, 0x596a, 0x8131, 0x5dfd, - 0x7aea, 0x8fbf, 0x68da, 0x8c37, 0x72f8, 0x9c48, 0x6a3d, 0x8ab0, - 0x4e39, 0x5358, 0x5606, 0x5766, 0x62c5, 0x63a2, 0x65e6, 0x6b4e, - 0x6de1, 0x6e5b, 0x70ad, 0x77ed, 0x7aef, 0x7baa, 0x7dbb, 0x803d, - 0x80c6, 0x86cb, 0x8a95, 0x935b, 0x56e3, 0x58c7, 0x5f3e, 0x65ad, - 0x6696, 0x6a80, 0x6bb5, 0x7537, 0x8ac7, 0x5024, 0x77e5, 0x5730, - 0x5f1b, 0x6065, 0x667a, 0x6c60, 0x75f4, 0x7a1a, 0x7f6e, 0x81f4, - 0x8718, 0x9045, 0x99b3, 0x7bc9, 0x755c, 0x7af9, 0x7b51, 0x84c4, - 0x9010, 0x79e9, 0x7a92, 0x8336, 0x5ae1, 0x7740, 0x4e2d, 0x4ef2, - 0x5b99, 0x5fe0, 0x62bd, 0x663c, 0x67f1, 0x6ce8, 0x866b, 0x8877, - 0x8a3b, 0x914e, 0x92f3, 0x99d0, 0x6a17, 0x7026, 0x732a, 0x82e7, - 0x8457, 0x8caf, 0x4e01, 0x5146, 0x51cb, 0x558b, 0x5bf5, 0x003f, - /* lead byte c4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5e16, 0x5e33, 0x5e81, 0x5f14, 0x5f35, 0x5f6b, 0x5fb4, - 0x61f2, 0x6311, 0x66a2, 0x671d, 0x6f6e, 0x7252, 0x753a, 0x773a, - 0x8074, 0x8139, 0x8178, 0x8776, 0x8abf, 0x8adc, 0x8d85, 0x8df3, - 0x929a, 0x9577, 0x9802, 0x9ce5, 0x52c5, 0x6357, 0x76f4, 0x6715, - 0x6c88, 0x73cd, 0x8cc3, 0x93ae, 0x9673, 0x6d25, 0x589c, 0x690e, - 0x69cc, 0x8ffd, 0x939a, 0x75db, 0x901a, 0x585a, 0x6802, 0x63b4, - 0x69fb, 0x4f43, 0x6f2c, 0x67d8, 0x8fbb, 0x8526, 0x7db4, 0x9354, - 0x693f, 0x6f70, 0x576a, 0x58f7, 0x5b2c, 0x7d2c, 0x722a, 0x540a, - 0x91e3, 0x9db4, 0x4ead, 0x4f4e, 0x505c, 0x5075, 0x5243, 0x8c9e, - 0x5448, 0x5824, 0x5b9a, 0x5e1d, 0x5e95, 0x5ead, 0x5ef7, 0x5f1f, - 0x608c, 0x62b5, 0x633a, 0x63d0, 0x68af, 0x6c40, 0x7887, 0x798e, - 0x7a0b, 0x7de0, 0x8247, 0x8a02, 0x8ae6, 0x8e44, 0x9013, 0x003f, - /* lead byte c5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x90b8, 0x912d, 0x91d8, 0x9f0e, 0x6ce5, 0x6458, 0x64e2, - 0x6575, 0x6ef4, 0x7684, 0x7b1b, 0x9069, 0x93d1, 0x6eba, 0x54f2, - 0x5fb9, 0x64a4, 0x8f4d, 0x8fed, 0x9244, 0x5178, 0x586b, 0x5929, - 0x5c55, 0x5e97, 0x6dfb, 0x7e8f, 0x751c, 0x8cbc, 0x8ee2, 0x985b, - 0x70b9, 0x4f1d, 0x6bbf, 0x6fb1, 0x7530, 0x96fb, 0x514e, 0x5410, - 0x5835, 0x5857, 0x59ac, 0x5c60, 0x5f92, 0x6597, 0x675c, 0x6e21, - 0x767b, 0x83df, 0x8ced, 0x9014, 0x90fd, 0x934d, 0x7825, 0x783a, - 0x52aa, 0x5ea6, 0x571f, 0x5974, 0x6012, 0x5012, 0x515a, 0x51ac, - 0x51cd, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5b95, 0x5cf6, - 0x5d8b, 0x60bc, 0x6295, 0x642d, 0x6771, 0x6843, 0x68bc, 0x68df, - 0x76d7, 0x6dd8, 0x6e6f, 0x6d9b, 0x706f, 0x71c8, 0x5f53, 0x75d8, - 0x7977, 0x7b49, 0x7b54, 0x7b52, 0x7cd6, 0x7d71, 0x5230, 0x003f, - /* lead byte c6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8463, 0x8569, 0x85e4, 0x8a0e, 0x8b04, 0x8c46, 0x8e0f, - 0x9003, 0x900f, 0x9419, 0x9676, 0x982d, 0x9a30, 0x95d8, 0x50cd, - 0x52d5, 0x540c, 0x5802, 0x5c0e, 0x61a7, 0x649e, 0x6d1e, 0x77b3, - 0x7ae5, 0x80f4, 0x8404, 0x9053, 0x9285, 0x5ce0, 0x9d07, 0x533f, - 0x5f97, 0x5fb3, 0x6d9c, 0x7279, 0x7763, 0x79bf, 0x7be4, 0x6bd2, - 0x72ec, 0x8aad, 0x6803, 0x6a61, 0x51f8, 0x7a81, 0x6934, 0x5c4a, - 0x9cf6, 0x82eb, 0x5bc5, 0x9149, 0x701e, 0x5678, 0x5c6f, 0x60c7, - 0x6566, 0x6c8c, 0x8c5a, 0x9041, 0x9813, 0x5451, 0x66c7, 0x920d, - 0x5948, 0x90a3, 0x5185, 0x4e4d, 0x51ea, 0x8599, 0x8b0e, 0x7058, - 0x637a, 0x934b, 0x6962, 0x99b4, 0x7e04, 0x7577, 0x5357, 0x6960, - 0x8edf, 0x96e3, 0x6c5d, 0x4e8c, 0x5c3c, 0x5f10, 0x8fe9, 0x5302, - 0x8cd1, 0x8089, 0x8679, 0x5eff, 0x65e5, 0x4e73, 0x5165, 0x003f, - /* lead byte c7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5982, 0x5c3f, 0x97ee, 0x4efb, 0x598a, 0x5fcd, 0x8a8d, - 0x6fe1, 0x79b0, 0x7962, 0x5be7, 0x8471, 0x732b, 0x71b1, 0x5e74, - 0x5ff5, 0x637b, 0x649a, 0x71c3, 0x7c98, 0x4e43, 0x5efc, 0x4e4b, - 0x57dc, 0x56a2, 0x60a9, 0x6fc3, 0x7d0d, 0x80fd, 0x8133, 0x81bf, - 0x8fb2, 0x8997, 0x86a4, 0x5df4, 0x628a, 0x64ad, 0x8987, 0x6777, - 0x6ce2, 0x6d3e, 0x7436, 0x7834, 0x5a46, 0x7f75, 0x82ad, 0x99ac, - 0x4ff3, 0x5ec3, 0x62dd, 0x6392, 0x6557, 0x676f, 0x76c3, 0x724c, - 0x80cc, 0x80ba, 0x8f29, 0x914d, 0x500d, 0x57f9, 0x5a92, 0x6885, - 0x6973, 0x7164, 0x72fd, 0x8cb7, 0x58f2, 0x8ce0, 0x966a, 0x9019, - 0x877f, 0x79e4, 0x77e7, 0x8429, 0x4f2f, 0x5265, 0x535a, 0x62cd, - 0x67cf, 0x6cca, 0x767d, 0x7b94, 0x7c95, 0x8236, 0x8584, 0x8feb, - 0x66dd, 0x6f20, 0x7206, 0x7e1b, 0x83ab, 0x99c1, 0x9ea6, 0x003f, - /* lead byte c8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x51fd, 0x7bb1, 0x7872, 0x7bb8, 0x8087, 0x7b48, 0x6ae8, - 0x5e61, 0x808c, 0x7551, 0x7560, 0x516b, 0x9262, 0x6e8c, 0x767a, - 0x9197, 0x9aea, 0x4f10, 0x7f70, 0x629c, 0x7b4f, 0x95a5, 0x9ce9, - 0x567a, 0x5859, 0x86e4, 0x96bc, 0x4f34, 0x5224, 0x534a, 0x53cd, - 0x53db, 0x5e06, 0x642c, 0x6591, 0x677f, 0x6c3e, 0x6c4e, 0x7248, - 0x72af, 0x73ed, 0x7554, 0x7e41, 0x822c, 0x85e9, 0x8ca9, 0x7bc4, - 0x91c6, 0x7169, 0x9812, 0x98ef, 0x633d, 0x6669, 0x756a, 0x76e4, - 0x78d0, 0x8543, 0x86ee, 0x532a, 0x5351, 0x5426, 0x5983, 0x5e87, - 0x5f7c, 0x60b2, 0x6249, 0x6279, 0x62ab, 0x6590, 0x6bd4, 0x6ccc, - 0x75b2, 0x76ae, 0x7891, 0x79d8, 0x7dcb, 0x7f77, 0x80a5, 0x88ab, - 0x8ab9, 0x8cbb, 0x907f, 0x975e, 0x98db, 0x6a0b, 0x7c38, 0x5099, - 0x5c3e, 0x5fae, 0x6787, 0x6bd8, 0x7435, 0x7709, 0x7f8e, 0x003f, - /* lead byte c9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9f3b, 0x67ca, 0x7a17, 0x5339, 0x758b, 0x9aed, 0x5f66, - 0x819d, 0x83f1, 0x8098, 0x5f3c, 0x5fc5, 0x7562, 0x7b46, 0x903c, - 0x6867, 0x59eb, 0x5a9b, 0x7d10, 0x767e, 0x8b2c, 0x4ff5, 0x5f6a, - 0x6a19, 0x6c37, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8a55, 0x8c79, - 0x5edf, 0x63cf, 0x75c5, 0x79d2, 0x82d7, 0x9328, 0x92f2, 0x849c, - 0x86ed, 0x9c2d, 0x54c1, 0x5f6c, 0x658c, 0x6d5c, 0x7015, 0x8ca7, - 0x8cd3, 0x983b, 0x654f, 0x74f6, 0x4e0d, 0x4ed8, 0x57e0, 0x592b, - 0x5a66, 0x5bcc, 0x51a8, 0x5e03, 0x5e9c, 0x6016, 0x6276, 0x6577, - 0x65a7, 0x666e, 0x6d6e, 0x7236, 0x7b26, 0x8150, 0x819a, 0x8299, - 0x8b5c, 0x8ca0, 0x8ce6, 0x8d74, 0x961c, 0x9644, 0x4fae, 0x64ab, - 0x6b66, 0x821e, 0x8461, 0x856a, 0x90e8, 0x5c01, 0x6953, 0x98a8, - 0x847a, 0x8557, 0x4f0f, 0x526f, 0x5fa9, 0x5e45, 0x670d, 0x003f, - /* lead byte ca */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x798f, 0x8179, 0x8907, 0x8986, 0x6df5, 0x5f17, 0x6255, - 0x6cb8, 0x4ecf, 0x7269, 0x9b92, 0x5206, 0x543b, 0x5674, 0x58b3, - 0x61a4, 0x626e, 0x711a, 0x596e, 0x7c89, 0x7cde, 0x7d1b, 0x96f0, - 0x6587, 0x805e, 0x4e19, 0x4f75, 0x5175, 0x5840, 0x5e63, 0x5e73, - 0x5f0a, 0x67c4, 0x4e26, 0x853d, 0x9589, 0x965b, 0x7c73, 0x9801, - 0x50fb, 0x58c1, 0x7656, 0x78a7, 0x5225, 0x77a5, 0x8511, 0x7b86, - 0x504f, 0x5909, 0x7247, 0x7bc7, 0x7de8, 0x8fba, 0x8fd4, 0x904d, - 0x4fbf, 0x52c9, 0x5a29, 0x5f01, 0x97ad, 0x4fdd, 0x8217, 0x92ea, - 0x5703, 0x6355, 0x6b69, 0x752b, 0x88dc, 0x8f14, 0x7a42, 0x52df, - 0x5893, 0x6155, 0x620a, 0x66ae, 0x6bcd, 0x7c3f, 0x83e9, 0x5023, - 0x4ff8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5b9d, 0x5cf0, 0x5cef, - 0x5d29, 0x5e96, 0x62b1, 0x6367, 0x653e, 0x65b9, 0x670b, 0x003f, - /* lead byte cb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6cd5, 0x6ce1, 0x70f9, 0x7832, 0x7e2b, 0x80de, 0x82b3, - 0x840c, 0x84ec, 0x8702, 0x8912, 0x8a2a, 0x8c4a, 0x90a6, 0x92d2, - 0x98fd, 0x9cf3, 0x9d6c, 0x4e4f, 0x4ea1, 0x508d, 0x5256, 0x574a, - 0x59a8, 0x5e3d, 0x5fd8, 0x5fd9, 0x623f, 0x66b4, 0x671b, 0x67d0, - 0x68d2, 0x5192, 0x7d21, 0x80aa, 0x81a8, 0x8b00, 0x8c8c, 0x8cbf, - 0x927e, 0x9632, 0x5420, 0x982c, 0x5317, 0x50d5, 0x535c, 0x58a8, - 0x64b2, 0x6734, 0x7267, 0x7766, 0x7a46, 0x91e6, 0x52c3, 0x6ca1, - 0x6b86, 0x5800, 0x5e4c, 0x5954, 0x672c, 0x7ffb, 0x51e1, 0x76c6, - 0x6469, 0x78e8, 0x9b54, 0x9ebb, 0x57cb, 0x59b9, 0x6627, 0x679a, - 0x6bce, 0x54e9, 0x69d9, 0x5e55, 0x819c, 0x6795, 0x9baa, 0x67fe, - 0x9c52, 0x685d, 0x4ea6, 0x4fe3, 0x53c8, 0x62b9, 0x672b, 0x6cab, - 0x8fc4, 0x4fad, 0x7e6d, 0x9ebf, 0x4e07, 0x6162, 0x6e80, 0x003f, - /* lead byte cc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6f2b, 0x8513, 0x5473, 0x672a, 0x9b45, 0x5df3, 0x7b95, - 0x5cac, 0x5bc6, 0x871c, 0x6e4a, 0x84d1, 0x7a14, 0x8108, 0x5999, - 0x7c8d, 0x6c11, 0x7720, 0x52d9, 0x5922, 0x7121, 0x725f, 0x77db, - 0x9727, 0x9d61, 0x690b, 0x5a7f, 0x5a18, 0x51a5, 0x540d, 0x547d, - 0x660e, 0x76df, 0x8ff7, 0x9298, 0x9cf4, 0x59ea, 0x725d, 0x6ec5, - 0x514d, 0x68c9, 0x7dbf, 0x7dec, 0x9762, 0x9eba, 0x6478, 0x6a21, - 0x8302, 0x5984, 0x5b5f, 0x6bdb, 0x731b, 0x76f2, 0x7db2, 0x8017, - 0x8499, 0x5132, 0x6728, 0x9ed9, 0x76ee, 0x6762, 0x52ff, 0x9905, - 0x5c24, 0x623b, 0x7c7e, 0x8cb0, 0x554f, 0x60b6, 0x7d0b, 0x9580, - 0x5301, 0x4e5f, 0x51b6, 0x591c, 0x723a, 0x8036, 0x91ce, 0x5f25, - 0x77e2, 0x5384, 0x5f79, 0x7d04, 0x85ac, 0x8a33, 0x8e8d, 0x9756, - 0x67f3, 0x85ae, 0x9453, 0x6109, 0x6108, 0x6cb9, 0x7652, 0x003f, - /* lead byte cd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8aed, 0x8f38, 0x552f, 0x4f51, 0x512a, 0x52c7, 0x53cb, - 0x5ba5, 0x5e7d, 0x60a0, 0x6182, 0x63d6, 0x6709, 0x67da, 0x6e67, - 0x6d8c, 0x7336, 0x7337, 0x7531, 0x7950, 0x88d5, 0x8a98, 0x904a, - 0x9091, 0x90f5, 0x96c4, 0x878d, 0x5915, 0x4e88, 0x4f59, 0x4e0e, - 0x8a89, 0x8f3f, 0x9810, 0x50ad, 0x5e7c, 0x5996, 0x5bb9, 0x5eb8, - 0x63da, 0x63fa, 0x64c1, 0x66dc, 0x694a, 0x69d8, 0x6d0b, 0x6eb6, - 0x7194, 0x7528, 0x7aaf, 0x7f8a, 0x8000, 0x8449, 0x84c9, 0x8981, - 0x8b21, 0x8e0a, 0x9065, 0x967d, 0x990a, 0x617e, 0x6291, 0x6b32, - 0x6c83, 0x6d74, 0x7fcc, 0x7ffc, 0x6dc0, 0x7f85, 0x87ba, 0x88f8, - 0x6765, 0x83b1, 0x983c, 0x96f7, 0x6d1b, 0x7d61, 0x843d, 0x916a, - 0x4e71, 0x5375, 0x5d50, 0x6b04, 0x6feb, 0x85cd, 0x862d, 0x89a7, - 0x5229, 0x540f, 0x5c65, 0x674e, 0x68a8, 0x7406, 0x7483, 0x003f, - /* lead byte ce */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x75e2, 0x88cf, 0x88e1, 0x91cc, 0x96e2, 0x9678, 0x5f8b, - 0x7387, 0x7acb, 0x844e, 0x63a0, 0x7565, 0x5289, 0x6d41, 0x6e9c, - 0x7409, 0x7559, 0x786b, 0x7c92, 0x9686, 0x7adc, 0x9f8d, 0x4fb6, - 0x616e, 0x65c5, 0x865c, 0x4e86, 0x4eae, 0x50da, 0x4e21, 0x51cc, - 0x5bee, 0x6599, 0x6881, 0x6dbc, 0x731f, 0x7642, 0x77ad, 0x7a1c, - 0x7ce7, 0x826f, 0x8ad2, 0x907c, 0x91cf, 0x9675, 0x9818, 0x529b, - 0x7dd1, 0x502b, 0x5398, 0x6797, 0x6dcb, 0x71d0, 0x7433, 0x81e8, - 0x8f2a, 0x96a3, 0x9c57, 0x9e9f, 0x7460, 0x5841, 0x6d99, 0x7d2f, - 0x985e, 0x4ee4, 0x4f36, 0x4f8b, 0x51b7, 0x52b1, 0x5dba, 0x601c, - 0x73b2, 0x793c, 0x82d3, 0x9234, 0x96b7, 0x96f6, 0x970a, 0x9e97, - 0x9f62, 0x66a6, 0x6b74, 0x5217, 0x52a3, 0x70c8, 0x88c2, 0x5ec9, - 0x604b, 0x6190, 0x6f23, 0x7149, 0x7c3e, 0x7df4, 0x806f, 0x003f, - /* lead byte cf */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x84ee, 0x9023, 0x932c, 0x5442, 0x9b6f, 0x6ad3, 0x7089, - 0x8cc2, 0x8def, 0x9732, 0x52b4, 0x5a41, 0x5eca, 0x5f04, 0x6717, - 0x697c, 0x6994, 0x6d6a, 0x6f0f, 0x7262, 0x72fc, 0x7bed, 0x8001, - 0x807e, 0x874b, 0x90ce, 0x516d, 0x9e93, 0x7984, 0x808b, 0x9332, - 0x8ad6, 0x502d, 0x548c, 0x8a71, 0x6b6a, 0x8cc4, 0x8107, 0x60d1, - 0x67a0, 0x9df2, 0x4e99, 0x4e98, 0x9c10, 0x8a6b, 0x85c1, 0x8568, - 0x6900, 0x6e7e, 0x7897, 0x8155, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte d0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5f0c, 0x4e10, 0x4e15, 0x4e2a, 0x4e31, 0x4e36, 0x4e3c, - 0x4e3f, 0x4e42, 0x4e56, 0x4e58, 0x4e82, 0x4e85, 0x8c6b, 0x4e8a, - 0x8212, 0x5f0d, 0x4e8e, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea2, 0x4eb0, - 0x4eb3, 0x4eb6, 0x4ece, 0x4ecd, 0x4ec4, 0x4ec6, 0x4ec2, 0x4ed7, - 0x4ede, 0x4eed, 0x4edf, 0x4ef7, 0x4f09, 0x4f5a, 0x4f30, 0x4f5b, - 0x4f5d, 0x4f57, 0x4f47, 0x4f76, 0x4f88, 0x4f8f, 0x4f98, 0x4f7b, - 0x4f69, 0x4f70, 0x4f91, 0x4f6f, 0x4f86, 0x4f96, 0x5118, 0x4fd4, - 0x4fdf, 0x4fce, 0x4fd8, 0x4fdb, 0x4fd1, 0x4fda, 0x4fd0, 0x4fe4, - 0x4fe5, 0x501a, 0x5028, 0x5014, 0x502a, 0x5025, 0x5005, 0x4f1c, - 0x4ff6, 0x5021, 0x5029, 0x502c, 0x4ffe, 0x4fef, 0x5011, 0x5006, - 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505a, 0x5056, - 0x506c, 0x5078, 0x5080, 0x509a, 0x5085, 0x50b4, 0x50b2, 0x003f, - /* lead byte d1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x50c9, 0x50ca, 0x50b3, 0x50c2, 0x50d6, 0x50de, 0x50e5, - 0x50ed, 0x50e3, 0x50ee, 0x50f9, 0x50f5, 0x5109, 0x5101, 0x5102, - 0x5116, 0x5115, 0x5114, 0x511a, 0x5121, 0x513a, 0x5137, 0x513c, - 0x513b, 0x513f, 0x5140, 0x5152, 0x514c, 0x5154, 0x5162, 0x7af8, - 0x5169, 0x516a, 0x516e, 0x5180, 0x5182, 0x56d8, 0x518c, 0x5189, - 0x518f, 0x5191, 0x5193, 0x5195, 0x5196, 0x51a4, 0x51a6, 0x51a2, - 0x51a9, 0x51aa, 0x51ab, 0x51b3, 0x51b1, 0x51b2, 0x51b0, 0x51b5, - 0x51bd, 0x51c5, 0x51c9, 0x51db, 0x51e0, 0x8655, 0x51e9, 0x51ed, - 0x51f0, 0x51f5, 0x51fe, 0x5204, 0x520b, 0x5214, 0x520e, 0x5227, - 0x522a, 0x522e, 0x5233, 0x5239, 0x524f, 0x5244, 0x524b, 0x524c, - 0x525e, 0x5254, 0x526a, 0x5274, 0x5269, 0x5273, 0x527f, 0x527d, - 0x528d, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8fa8, 0x003f, - /* lead byte d2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8fa7, 0x52ac, 0x52ad, 0x52bc, 0x52b5, 0x52c1, 0x52cd, - 0x52d7, 0x52de, 0x52e3, 0x52e6, 0x98ed, 0x52e0, 0x52f3, 0x52f5, - 0x52f8, 0x52f9, 0x5306, 0x5308, 0x7538, 0x530d, 0x5310, 0x530f, - 0x5315, 0x531a, 0x5323, 0x532f, 0x5331, 0x5333, 0x5338, 0x5340, - 0x5346, 0x5345, 0x4e17, 0x5349, 0x534d, 0x51d6, 0x535e, 0x5369, - 0x536e, 0x5918, 0x537b, 0x5377, 0x5382, 0x5396, 0x53a0, 0x53a6, - 0x53a5, 0x53ae, 0x53b0, 0x53b6, 0x53c3, 0x7c12, 0x96d9, 0x53df, - 0x66fc, 0x71ee, 0x53ee, 0x53e8, 0x53ed, 0x53fa, 0x5401, 0x543d, - 0x5440, 0x542c, 0x542d, 0x543c, 0x542e, 0x5436, 0x5429, 0x541d, - 0x544e, 0x548f, 0x5475, 0x548e, 0x545f, 0x5471, 0x5477, 0x5470, - 0x5492, 0x547b, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54c7, - 0x54a2, 0x54b8, 0x54a5, 0x54ac, 0x54c4, 0x54c8, 0x54a8, 0x003f, - /* lead byte d3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x54ab, 0x54c2, 0x54a4, 0x54be, 0x54bc, 0x54d8, 0x54e5, - 0x54e6, 0x550f, 0x5514, 0x54fd, 0x54ee, 0x54ed, 0x54fa, 0x54e2, - 0x5539, 0x5540, 0x5563, 0x554c, 0x552e, 0x555c, 0x5545, 0x5556, - 0x5557, 0x5538, 0x5533, 0x555d, 0x5599, 0x5580, 0x54af, 0x558a, - 0x559f, 0x557b, 0x557e, 0x5598, 0x559e, 0x55ae, 0x557c, 0x5583, - 0x55a9, 0x5587, 0x55a8, 0x55da, 0x55c5, 0x55df, 0x55c4, 0x55dc, - 0x55e4, 0x55d4, 0x5614, 0x55f7, 0x5616, 0x55fe, 0x55fd, 0x561b, - 0x55f9, 0x564e, 0x5650, 0x71df, 0x5634, 0x5636, 0x5632, 0x5638, - 0x566b, 0x5664, 0x562f, 0x566c, 0x566a, 0x5686, 0x5680, 0x568a, - 0x56a0, 0x5694, 0x568f, 0x56a5, 0x56ae, 0x56b6, 0x56b4, 0x56c2, - 0x56bc, 0x56c1, 0x56c3, 0x56c0, 0x56c8, 0x56ce, 0x56d1, 0x56d3, - 0x56d7, 0x56ee, 0x56f9, 0x5700, 0x56ff, 0x5704, 0x5709, 0x003f, - /* lead byte d4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5708, 0x570b, 0x570d, 0x5713, 0x5718, 0x5716, 0x55c7, - 0x571c, 0x5726, 0x5737, 0x5738, 0x574e, 0x573b, 0x5740, 0x574f, - 0x5769, 0x57c0, 0x5788, 0x5761, 0x577f, 0x5789, 0x5793, 0x57a0, - 0x57b3, 0x57a4, 0x57aa, 0x57b0, 0x57c3, 0x57c6, 0x57d4, 0x57d2, - 0x57d3, 0x580a, 0x57d6, 0x57e3, 0x580b, 0x5819, 0x581d, 0x5872, - 0x5821, 0x5862, 0x584b, 0x5870, 0x6bc0, 0x5852, 0x583d, 0x5879, - 0x5885, 0x58b9, 0x589f, 0x58ab, 0x58ba, 0x58de, 0x58bb, 0x58b8, - 0x58ae, 0x58c5, 0x58d3, 0x58d1, 0x58d7, 0x58d9, 0x58d8, 0x58e5, - 0x58dc, 0x58e4, 0x58df, 0x58ef, 0x58fa, 0x58f9, 0x58fb, 0x58fc, - 0x58fd, 0x5902, 0x590a, 0x5910, 0x591b, 0x68a6, 0x5925, 0x592c, - 0x592d, 0x5932, 0x5938, 0x593e, 0x7ad2, 0x5955, 0x5950, 0x594e, - 0x595a, 0x5958, 0x5962, 0x5960, 0x5967, 0x596c, 0x5969, 0x003f, - /* lead byte d5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5978, 0x5981, 0x599d, 0x4f5e, 0x4fab, 0x59a3, 0x59b2, - 0x59c6, 0x59e8, 0x59dc, 0x598d, 0x59d9, 0x59da, 0x5a25, 0x5a1f, - 0x5a11, 0x5a1c, 0x5a09, 0x5a1a, 0x5a40, 0x5a6c, 0x5a49, 0x5a35, - 0x5a36, 0x5a62, 0x5a6a, 0x5a9a, 0x5abc, 0x5abe, 0x5acb, 0x5ac2, - 0x5abd, 0x5ae3, 0x5ad7, 0x5ae6, 0x5ae9, 0x5ad6, 0x5afa, 0x5afb, - 0x5b0c, 0x5b0b, 0x5b16, 0x5b32, 0x5ad0, 0x5b2a, 0x5b36, 0x5b3e, - 0x5b43, 0x5b45, 0x5b40, 0x5b51, 0x5b55, 0x5b5a, 0x5b5b, 0x5b65, - 0x5b69, 0x5b70, 0x5b73, 0x5b75, 0x5b78, 0x6588, 0x5b7a, 0x5b80, - 0x5b83, 0x5ba6, 0x5bb8, 0x5bc3, 0x5bc7, 0x5bc9, 0x5bd4, 0x5bd0, - 0x5be4, 0x5be6, 0x5be2, 0x5bde, 0x5be5, 0x5beb, 0x5bf0, 0x5bf6, - 0x5bf3, 0x5c05, 0x5c07, 0x5c08, 0x5c0d, 0x5c13, 0x5c20, 0x5c22, - 0x5c28, 0x5c38, 0x5c39, 0x5c41, 0x5c46, 0x5c4e, 0x5c53, 0x003f, - /* lead byte d6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5c50, 0x5c4f, 0x5b71, 0x5c6c, 0x5c6e, 0x4e62, 0x5c76, - 0x5c79, 0x5c8c, 0x5c91, 0x5c94, 0x599b, 0x5cab, 0x5cbb, 0x5cb6, - 0x5cbc, 0x5cb7, 0x5cc5, 0x5cbe, 0x5cc7, 0x5cd9, 0x5ce9, 0x5cfd, - 0x5cfa, 0x5ced, 0x5d8c, 0x5cea, 0x5d0b, 0x5d15, 0x5d17, 0x5d5c, - 0x5d1f, 0x5d1b, 0x5d11, 0x5d14, 0x5d22, 0x5d1a, 0x5d19, 0x5d18, - 0x5d4c, 0x5d52, 0x5d4e, 0x5d4b, 0x5d6c, 0x5d73, 0x5d76, 0x5d87, - 0x5d84, 0x5d82, 0x5da2, 0x5d9d, 0x5dac, 0x5dae, 0x5dbd, 0x5d90, - 0x5db7, 0x5dbc, 0x5dc9, 0x5dcd, 0x5dd3, 0x5dd2, 0x5dd6, 0x5ddb, - 0x5deb, 0x5df2, 0x5df5, 0x5e0b, 0x5e1a, 0x5e19, 0x5e11, 0x5e1b, - 0x5e36, 0x5e37, 0x5e44, 0x5e43, 0x5e40, 0x5e4e, 0x5e57, 0x5e54, - 0x5e5f, 0x5e62, 0x5e64, 0x5e47, 0x5e75, 0x5e76, 0x5e7a, 0x9ebc, - 0x5e7f, 0x5ea0, 0x5ec1, 0x5ec2, 0x5ec8, 0x5ed0, 0x5ecf, 0x003f, - /* lead byte d7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5ed6, 0x5ee3, 0x5edd, 0x5eda, 0x5edb, 0x5ee2, 0x5ee1, - 0x5ee8, 0x5ee9, 0x5eec, 0x5ef1, 0x5ef3, 0x5ef0, 0x5ef4, 0x5ef8, - 0x5efe, 0x5f03, 0x5f09, 0x5f5d, 0x5f5c, 0x5f0b, 0x5f11, 0x5f16, - 0x5f29, 0x5f2d, 0x5f38, 0x5f41, 0x5f48, 0x5f4c, 0x5f4e, 0x5f2f, - 0x5f51, 0x5f56, 0x5f57, 0x5f59, 0x5f61, 0x5f6d, 0x5f73, 0x5f77, - 0x5f83, 0x5f82, 0x5f7f, 0x5f8a, 0x5f88, 0x5f91, 0x5f87, 0x5f9e, - 0x5f99, 0x5f98, 0x5fa0, 0x5fa8, 0x5fad, 0x5fbc, 0x5fd6, 0x5ffb, - 0x5fe4, 0x5ff8, 0x5ff1, 0x5fdd, 0x60b3, 0x5fff, 0x6021, 0x6060, - 0x6019, 0x6010, 0x6029, 0x600e, 0x6031, 0x601b, 0x6015, 0x602b, - 0x6026, 0x600f, 0x603a, 0x605a, 0x6041, 0x606a, 0x6077, 0x605f, - 0x604a, 0x6046, 0x604d, 0x6063, 0x6043, 0x6064, 0x6042, 0x606c, - 0x606b, 0x6059, 0x6081, 0x608d, 0x60e7, 0x6083, 0x609a, 0x003f, - /* lead byte d8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6084, 0x609b, 0x6096, 0x6097, 0x6092, 0x60a7, 0x608b, - 0x60e1, 0x60b8, 0x60e0, 0x60d3, 0x60b4, 0x5ff0, 0x60bd, 0x60c6, - 0x60b5, 0x60d8, 0x614d, 0x6115, 0x6106, 0x60f6, 0x60f7, 0x6100, - 0x60f4, 0x60fa, 0x6103, 0x6121, 0x60fb, 0x60f1, 0x610d, 0x610e, - 0x6147, 0x613e, 0x6128, 0x6127, 0x614a, 0x613f, 0x613c, 0x612c, - 0x6134, 0x613d, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, - 0x615a, 0x616b, 0x6174, 0x616f, 0x6165, 0x6171, 0x615f, 0x615d, - 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61ac, 0x6194, 0x619a, - 0x618a, 0x6191, 0x61ab, 0x61ae, 0x61cc, 0x61ca, 0x61c9, 0x61f7, - 0x61c8, 0x61c3, 0x61c6, 0x61ba, 0x61cb, 0x7f79, 0x61cd, 0x61e6, - 0x61e3, 0x61f6, 0x61fa, 0x61f4, 0x61ff, 0x61fd, 0x61fc, 0x61fe, - 0x6200, 0x6208, 0x6209, 0x620d, 0x620c, 0x6214, 0x621b, 0x003f, - /* lead byte d9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x621e, 0x6221, 0x622a, 0x622e, 0x6230, 0x6232, 0x6233, - 0x6241, 0x624e, 0x625e, 0x6263, 0x625b, 0x6260, 0x6268, 0x627c, - 0x6282, 0x6289, 0x627e, 0x6292, 0x6293, 0x6296, 0x62d4, 0x6283, - 0x6294, 0x62d7, 0x62d1, 0x62bb, 0x62cf, 0x62ff, 0x62c6, 0x64d4, - 0x62c8, 0x62dc, 0x62cc, 0x62ca, 0x62c2, 0x62c7, 0x629b, 0x62c9, - 0x630c, 0x62ee, 0x62f1, 0x6327, 0x6302, 0x6308, 0x62ef, 0x62f5, - 0x6350, 0x633e, 0x634d, 0x641c, 0x634f, 0x6396, 0x638e, 0x6380, - 0x63ab, 0x6376, 0x63a3, 0x638f, 0x6389, 0x639f, 0x63b5, 0x636b, - 0x6369, 0x63be, 0x63e9, 0x63c0, 0x63c6, 0x63e3, 0x63c9, 0x63d2, - 0x63f6, 0x63c4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, - 0x651d, 0x6417, 0x6428, 0x640f, 0x6467, 0x646f, 0x6476, 0x644e, - 0x652a, 0x6495, 0x6493, 0x64a5, 0x64a9, 0x6488, 0x64bc, 0x003f, - /* lead byte da */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x64da, 0x64d2, 0x64c5, 0x64c7, 0x64bb, 0x64d8, 0x64c2, - 0x64f1, 0x64e7, 0x8209, 0x64e0, 0x64e1, 0x62ac, 0x64e3, 0x64ef, - 0x652c, 0x64f6, 0x64f4, 0x64f2, 0x64fa, 0x6500, 0x64fd, 0x6518, - 0x651c, 0x6505, 0x6524, 0x6523, 0x652b, 0x6534, 0x6535, 0x6537, - 0x6536, 0x6538, 0x754b, 0x6548, 0x6556, 0x6555, 0x654d, 0x6558, - 0x655e, 0x655d, 0x6572, 0x6578, 0x6582, 0x6583, 0x8b8a, 0x659b, - 0x659f, 0x65ab, 0x65b7, 0x65c3, 0x65c6, 0x65c1, 0x65c4, 0x65cc, - 0x65d2, 0x65db, 0x65d9, 0x65e0, 0x65e1, 0x65f1, 0x6772, 0x660a, - 0x6603, 0x65fb, 0x6773, 0x6635, 0x6636, 0x6634, 0x661c, 0x664f, - 0x6644, 0x6649, 0x6641, 0x665e, 0x665d, 0x6664, 0x6667, 0x6668, - 0x665f, 0x6662, 0x6670, 0x6683, 0x6688, 0x668e, 0x6689, 0x6684, - 0x6698, 0x669d, 0x66c1, 0x66b9, 0x66c9, 0x66be, 0x66bc, 0x003f, - /* lead byte db */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x66c4, 0x66b8, 0x66d6, 0x66da, 0x66e0, 0x663f, 0x66e6, - 0x66e9, 0x66f0, 0x66f5, 0x66f7, 0x670f, 0x6716, 0x671e, 0x6726, - 0x6727, 0x9738, 0x672e, 0x673f, 0x6736, 0x6741, 0x6738, 0x6737, - 0x6746, 0x675e, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, - 0x67a9, 0x677c, 0x676a, 0x678c, 0x678b, 0x67a6, 0x67a1, 0x6785, - 0x67b7, 0x67ef, 0x67b4, 0x67ec, 0x67b3, 0x67e9, 0x67b8, 0x67e4, - 0x67de, 0x67dd, 0x67e2, 0x67ee, 0x67b9, 0x67ce, 0x67c6, 0x67e7, - 0x6a9c, 0x681e, 0x6846, 0x6829, 0x6840, 0x684d, 0x6832, 0x684e, - 0x68b3, 0x682b, 0x6859, 0x6863, 0x6877, 0x687f, 0x689f, 0x688f, - 0x68ad, 0x6894, 0x689d, 0x689b, 0x6883, 0x6aae, 0x68b9, 0x6874, - 0x68b5, 0x68a0, 0x68ba, 0x690f, 0x688d, 0x687e, 0x6901, 0x68ca, - 0x6908, 0x68d8, 0x6922, 0x6926, 0x68e1, 0x690c, 0x68cd, 0x003f, - /* lead byte dc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x68d4, 0x68e7, 0x68d5, 0x6936, 0x6912, 0x6904, 0x68d7, - 0x68e3, 0x6925, 0x68f9, 0x68e0, 0x68ef, 0x6928, 0x692a, 0x691a, - 0x6923, 0x6921, 0x68c6, 0x6979, 0x6977, 0x695c, 0x6978, 0x696b, - 0x6954, 0x697e, 0x696e, 0x6939, 0x6974, 0x693d, 0x6959, 0x6930, - 0x6961, 0x695e, 0x695d, 0x6981, 0x696a, 0x69b2, 0x69ae, 0x69d0, - 0x69bf, 0x69c1, 0x69d3, 0x69be, 0x69ce, 0x5be8, 0x69ca, 0x69dd, - 0x69bb, 0x69c3, 0x69a7, 0x6a2e, 0x6991, 0x69a0, 0x699c, 0x6995, - 0x69b4, 0x69de, 0x69e8, 0x6a02, 0x6a1b, 0x69ff, 0x6b0a, 0x69f9, - 0x69f2, 0x69e7, 0x6a05, 0x69b1, 0x6a1e, 0x69ed, 0x6a14, 0x69eb, - 0x6a0a, 0x6a12, 0x6ac1, 0x6a23, 0x6a13, 0x6a44, 0x6a0c, 0x6a72, - 0x6a36, 0x6a78, 0x6a47, 0x6a62, 0x6a59, 0x6a66, 0x6a48, 0x6a38, - 0x6a22, 0x6a90, 0x6a8d, 0x6aa0, 0x6a84, 0x6aa2, 0x6aa3, 0x003f, - /* lead byte dd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6a97, 0x8617, 0x6abb, 0x6ac3, 0x6ac2, 0x6ab8, 0x6ab3, - 0x6aac, 0x6ade, 0x6ad1, 0x6adf, 0x6aaa, 0x6ada, 0x6aea, 0x6afb, - 0x6b05, 0x8616, 0x6afa, 0x6b12, 0x6b16, 0x9b31, 0x6b1f, 0x6b38, - 0x6b37, 0x76dc, 0x6b39, 0x98ee, 0x6b47, 0x6b43, 0x6b49, 0x6b50, - 0x6b59, 0x6b54, 0x6b5b, 0x6b5f, 0x6b61, 0x6b78, 0x6b79, 0x6b7f, - 0x6b80, 0x6b84, 0x6b83, 0x6b8d, 0x6b98, 0x6b95, 0x6b9e, 0x6ba4, - 0x6baa, 0x6bab, 0x6baf, 0x6bb2, 0x6bb1, 0x6bb3, 0x6bb7, 0x6bbc, - 0x6bc6, 0x6bcb, 0x6bd3, 0x6bdf, 0x6bec, 0x6beb, 0x6bf3, 0x6bef, - 0x9ebe, 0x6c08, 0x6c13, 0x6c14, 0x6c1b, 0x6c24, 0x6c23, 0x6c5e, - 0x6c55, 0x6c62, 0x6c6a, 0x6c82, 0x6c8d, 0x6c9a, 0x6c81, 0x6c9b, - 0x6c7e, 0x6c68, 0x6c73, 0x6c92, 0x6c90, 0x6cc4, 0x6cf1, 0x6cd3, - 0x6cbd, 0x6cd7, 0x6cc5, 0x6cdd, 0x6cae, 0x6cb1, 0x6cbe, 0x003f, - /* lead byte de */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6cba, 0x6cdb, 0x6cef, 0x6cd9, 0x6cea, 0x6d1f, 0x884d, - 0x6d36, 0x6d2b, 0x6d3d, 0x6d38, 0x6d19, 0x6d35, 0x6d33, 0x6d12, - 0x6d0c, 0x6d63, 0x6d93, 0x6d64, 0x6d5a, 0x6d79, 0x6d59, 0x6d8e, - 0x6d95, 0x6fe4, 0x6d85, 0x6df9, 0x6e15, 0x6e0a, 0x6db5, 0x6dc7, - 0x6de6, 0x6db8, 0x6dc6, 0x6dec, 0x6dde, 0x6dcc, 0x6de8, 0x6dd2, - 0x6dc5, 0x6dfa, 0x6dd9, 0x6de4, 0x6dd5, 0x6dea, 0x6dee, 0x6e2d, - 0x6e6e, 0x6e2e, 0x6e19, 0x6e72, 0x6e5f, 0x6e3e, 0x6e23, 0x6e6b, - 0x6e2b, 0x6e76, 0x6e4d, 0x6e1f, 0x6e43, 0x6e3a, 0x6e4e, 0x6e24, - 0x6eff, 0x6e1d, 0x6e38, 0x6e82, 0x6eaa, 0x6e98, 0x6ec9, 0x6eb7, - 0x6ed3, 0x6ebd, 0x6eaf, 0x6ec4, 0x6eb2, 0x6ed4, 0x6ed5, 0x6e8f, - 0x6ea5, 0x6ec2, 0x6e9f, 0x6f41, 0x6f11, 0x704c, 0x6eec, 0x6ef8, - 0x6efe, 0x6f3f, 0x6ef2, 0x6f31, 0x6eef, 0x6f32, 0x6ecc, 0x003f, - /* lead byte df */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6f3e, 0x6f13, 0x6ef7, 0x6f86, 0x6f7a, 0x6f78, 0x6f81, - 0x6f80, 0x6f6f, 0x6f5b, 0x6ff3, 0x6f6d, 0x6f82, 0x6f7c, 0x6f58, - 0x6f8e, 0x6f91, 0x6fc2, 0x6f66, 0x6fb3, 0x6fa3, 0x6fa1, 0x6fa4, - 0x6fb9, 0x6fc6, 0x6faa, 0x6fdf, 0x6fd5, 0x6fec, 0x6fd4, 0x6fd8, - 0x6ff1, 0x6fee, 0x6fdb, 0x7009, 0x700b, 0x6ffa, 0x7011, 0x7001, - 0x700f, 0x6ffe, 0x701b, 0x701a, 0x6f74, 0x701d, 0x7018, 0x701f, - 0x7030, 0x703e, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70af, - 0x70f1, 0x70ac, 0x70b8, 0x70b3, 0x70ae, 0x70df, 0x70cb, 0x70dd, - 0x70d9, 0x7109, 0x70fd, 0x711c, 0x7119, 0x7165, 0x7155, 0x7188, - 0x7166, 0x7162, 0x714c, 0x7156, 0x716c, 0x718f, 0x71fb, 0x7184, - 0x7195, 0x71a8, 0x71ac, 0x71d7, 0x71b9, 0x71be, 0x71d2, 0x71c9, - 0x71d4, 0x71ce, 0x71e0, 0x71ec, 0x71e7, 0x71f5, 0x71fc, 0x003f, - /* lead byte e0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x71f9, 0x71ff, 0x720d, 0x7210, 0x721b, 0x7228, 0x722d, - 0x722c, 0x7230, 0x7232, 0x723b, 0x723c, 0x723f, 0x7240, 0x7246, - 0x724b, 0x7258, 0x7274, 0x727e, 0x7282, 0x7281, 0x7287, 0x7292, - 0x7296, 0x72a2, 0x72a7, 0x72b9, 0x72b2, 0x72c3, 0x72c6, 0x72c4, - 0x72ce, 0x72d2, 0x72e2, 0x72e0, 0x72e1, 0x72f9, 0x72f7, 0x500f, - 0x7317, 0x730a, 0x731c, 0x7316, 0x731d, 0x7334, 0x732f, 0x7329, - 0x7325, 0x733e, 0x734e, 0x734f, 0x9ed8, 0x7357, 0x736a, 0x7368, - 0x7370, 0x7378, 0x7375, 0x737b, 0x737a, 0x73c8, 0x73b3, 0x73ce, - 0x73bb, 0x73c0, 0x73e5, 0x73ee, 0x73de, 0x74a2, 0x7405, 0x746f, - 0x7425, 0x73f8, 0x7432, 0x743a, 0x7455, 0x743f, 0x745f, 0x7459, - 0x7441, 0x745c, 0x7469, 0x7470, 0x7463, 0x746a, 0x7476, 0x747e, - 0x748b, 0x749e, 0x74a7, 0x74ca, 0x74cf, 0x74d4, 0x73f1, 0x003f, - /* lead byte e1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x74e0, 0x74e3, 0x74e7, 0x74e9, 0x74ee, 0x74f2, 0x74f0, - 0x74f1, 0x74f8, 0x74f7, 0x7504, 0x7503, 0x7505, 0x750c, 0x750e, - 0x750d, 0x7515, 0x7513, 0x751e, 0x7526, 0x752c, 0x753c, 0x7544, - 0x754d, 0x754a, 0x7549, 0x755b, 0x7546, 0x755a, 0x7569, 0x7564, - 0x7567, 0x756b, 0x756d, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, - 0x758a, 0x7589, 0x7582, 0x7594, 0x759a, 0x759d, 0x75a5, 0x75a3, - 0x75c2, 0x75b3, 0x75c3, 0x75b5, 0x75bd, 0x75b8, 0x75bc, 0x75b1, - 0x75cd, 0x75ca, 0x75d2, 0x75d9, 0x75e3, 0x75de, 0x75fe, 0x75ff, - 0x75fc, 0x7601, 0x75f0, 0x75fa, 0x75f2, 0x75f3, 0x760b, 0x760d, - 0x7609, 0x761f, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, - 0x7630, 0x763b, 0x7647, 0x7648, 0x7646, 0x765c, 0x7658, 0x7661, - 0x7662, 0x7668, 0x7669, 0x766a, 0x7667, 0x766c, 0x7670, 0x003f, - /* lead byte e2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7672, 0x7676, 0x7678, 0x767c, 0x7680, 0x7683, 0x7688, - 0x768b, 0x768e, 0x7696, 0x7693, 0x7699, 0x769a, 0x76b0, 0x76b4, - 0x76b8, 0x76b9, 0x76ba, 0x76c2, 0x76cd, 0x76d6, 0x76d2, 0x76de, - 0x76e1, 0x76e5, 0x76e7, 0x76ea, 0x862f, 0x76fb, 0x7708, 0x7707, - 0x7704, 0x7729, 0x7724, 0x771e, 0x7725, 0x7726, 0x771b, 0x7737, - 0x7738, 0x7747, 0x775a, 0x7768, 0x776b, 0x775b, 0x7765, 0x777f, - 0x777e, 0x7779, 0x778e, 0x778b, 0x7791, 0x77a0, 0x779e, 0x77b0, - 0x77b6, 0x77b9, 0x77bf, 0x77bc, 0x77bd, 0x77bb, 0x77c7, 0x77cd, - 0x77d7, 0x77da, 0x77dc, 0x77e3, 0x77ee, 0x77fc, 0x780c, 0x7812, - 0x7926, 0x7820, 0x792a, 0x7845, 0x788e, 0x7874, 0x7886, 0x787c, - 0x789a, 0x788c, 0x78a3, 0x78b5, 0x78aa, 0x78af, 0x78d1, 0x78c6, - 0x78cb, 0x78d4, 0x78be, 0x78bc, 0x78c5, 0x78ca, 0x78ec, 0x003f, - /* lead byte e3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x78e7, 0x78da, 0x78fd, 0x78f4, 0x7907, 0x7912, 0x7911, - 0x7919, 0x792c, 0x792b, 0x7940, 0x7960, 0x7957, 0x795f, 0x795a, - 0x7955, 0x7953, 0x797a, 0x797f, 0x798a, 0x799d, 0x79a7, 0x9f4b, - 0x79aa, 0x79ae, 0x79b3, 0x79b9, 0x79ba, 0x79c9, 0x79d5, 0x79e7, - 0x79ec, 0x79e1, 0x79e3, 0x7a08, 0x7a0d, 0x7a18, 0x7a19, 0x7a20, - 0x7a1f, 0x7980, 0x7a31, 0x7a3b, 0x7a3e, 0x7a37, 0x7a43, 0x7a57, - 0x7a49, 0x7a61, 0x7a62, 0x7a69, 0x9f9d, 0x7a70, 0x7a79, 0x7a7d, - 0x7a88, 0x7a97, 0x7a95, 0x7a98, 0x7a96, 0x7aa9, 0x7ac8, 0x7ab0, - 0x7ab6, 0x7ac5, 0x7ac4, 0x7abf, 0x9083, 0x7ac7, 0x7aca, 0x7acd, - 0x7acf, 0x7ad5, 0x7ad3, 0x7ad9, 0x7ada, 0x7add, 0x7ae1, 0x7ae2, - 0x7ae6, 0x7aed, 0x7af0, 0x7b02, 0x7b0f, 0x7b0a, 0x7b06, 0x7b33, - 0x7b18, 0x7b19, 0x7b1e, 0x7b35, 0x7b28, 0x7b36, 0x7b50, 0x003f, - /* lead byte e4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7b7a, 0x7b04, 0x7b4d, 0x7b0b, 0x7b4c, 0x7b45, 0x7b75, - 0x7b65, 0x7b74, 0x7b67, 0x7b70, 0x7b71, 0x7b6c, 0x7b6e, 0x7b9d, - 0x7b98, 0x7b9f, 0x7b8d, 0x7b9c, 0x7b9a, 0x7b8b, 0x7b92, 0x7b8f, - 0x7b5d, 0x7b99, 0x7bcb, 0x7bc1, 0x7bcc, 0x7bcf, 0x7bb4, 0x7bc6, - 0x7bdd, 0x7be9, 0x7c11, 0x7c14, 0x7be6, 0x7be5, 0x7c60, 0x7c00, - 0x7c07, 0x7c13, 0x7bf3, 0x7bf7, 0x7c17, 0x7c0d, 0x7bf6, 0x7c23, - 0x7c27, 0x7c2a, 0x7c1f, 0x7c37, 0x7c2b, 0x7c3d, 0x7c4c, 0x7c43, - 0x7c54, 0x7c4f, 0x7c40, 0x7c50, 0x7c58, 0x7c5f, 0x7c64, 0x7c56, - 0x7c65, 0x7c6c, 0x7c75, 0x7c83, 0x7c90, 0x7ca4, 0x7cad, 0x7ca2, - 0x7cab, 0x7ca1, 0x7ca8, 0x7cb3, 0x7cb2, 0x7cb1, 0x7cae, 0x7cb9, - 0x7cbd, 0x7cc0, 0x7cc5, 0x7cc2, 0x7cd8, 0x7cd2, 0x7cdc, 0x7ce2, - 0x9b3b, 0x7cef, 0x7cf2, 0x7cf4, 0x7cf6, 0x7cfa, 0x7d06, 0x003f, - /* lead byte e5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7d02, 0x7d1c, 0x7d15, 0x7d0a, 0x7d45, 0x7d4b, 0x7d2e, - 0x7d32, 0x7d3f, 0x7d35, 0x7d46, 0x7d73, 0x7d56, 0x7d4e, 0x7d72, - 0x7d68, 0x7d6e, 0x7d4f, 0x7d63, 0x7d93, 0x7d89, 0x7d5b, 0x7d8f, - 0x7d7d, 0x7d9b, 0x7dba, 0x7dae, 0x7da3, 0x7db5, 0x7dc7, 0x7dbd, - 0x7dab, 0x7e3d, 0x7da2, 0x7daf, 0x7ddc, 0x7db8, 0x7d9f, 0x7db0, - 0x7dd8, 0x7ddd, 0x7de4, 0x7dde, 0x7dfb, 0x7df2, 0x7de1, 0x7e05, - 0x7e0a, 0x7e23, 0x7e21, 0x7e12, 0x7e31, 0x7e1f, 0x7e09, 0x7e0b, - 0x7e22, 0x7e46, 0x7e66, 0x7e3b, 0x7e35, 0x7e39, 0x7e43, 0x7e37, - 0x7e32, 0x7e3a, 0x7e67, 0x7e5d, 0x7e56, 0x7e5e, 0x7e59, 0x7e5a, - 0x7e79, 0x7e6a, 0x7e69, 0x7e7c, 0x7e7b, 0x7e83, 0x7dd5, 0x7e7d, - 0x8fae, 0x7e7f, 0x7e88, 0x7e89, 0x7e8c, 0x7e92, 0x7e90, 0x7e93, - 0x7e94, 0x7e96, 0x7e8e, 0x7e9b, 0x7e9c, 0x7f38, 0x7f3a, 0x003f, - /* lead byte e6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7f45, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f50, 0x7f51, 0x7f55, - 0x7f54, 0x7f58, 0x7f5f, 0x7f60, 0x7f68, 0x7f69, 0x7f67, 0x7f78, - 0x7f82, 0x7f86, 0x7f83, 0x7f88, 0x7f87, 0x7f8c, 0x7f94, 0x7f9e, - 0x7f9d, 0x7f9a, 0x7fa3, 0x7faf, 0x7fb2, 0x7fb9, 0x7fae, 0x7fb6, - 0x7fb8, 0x8b71, 0x7fc5, 0x7fc6, 0x7fca, 0x7fd5, 0x7fd4, 0x7fe1, - 0x7fe6, 0x7fe9, 0x7ff3, 0x7ff9, 0x98dc, 0x8006, 0x8004, 0x800b, - 0x8012, 0x8018, 0x8019, 0x801c, 0x8021, 0x8028, 0x803f, 0x803b, - 0x804a, 0x8046, 0x8052, 0x8058, 0x805a, 0x805f, 0x8062, 0x8068, - 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807d, 0x807f, 0x8084, - 0x8086, 0x8085, 0x809b, 0x8093, 0x809a, 0x80ad, 0x5190, 0x80ac, - 0x80db, 0x80e5, 0x80d9, 0x80dd, 0x80c4, 0x80da, 0x80d6, 0x8109, - 0x80ef, 0x80f1, 0x811b, 0x8129, 0x8123, 0x812f, 0x814b, 0x003f, - /* lead byte e7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x968b, 0x8146, 0x813e, 0x8153, 0x8151, 0x80fc, 0x8171, - 0x816e, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818a, 0x8180, - 0x8182, 0x81a0, 0x8195, 0x81a4, 0x81a3, 0x815f, 0x8193, 0x81a9, - 0x81b0, 0x81b5, 0x81be, 0x81b8, 0x81bd, 0x81c0, 0x81c2, 0x81ba, - 0x81c9, 0x81cd, 0x81d1, 0x81d9, 0x81d8, 0x81c8, 0x81da, 0x81df, - 0x81e0, 0x81e7, 0x81fa, 0x81fb, 0x81fe, 0x8201, 0x8202, 0x8205, - 0x8207, 0x820a, 0x820d, 0x8210, 0x8216, 0x8229, 0x822b, 0x8238, - 0x8233, 0x8240, 0x8259, 0x8258, 0x825d, 0x825a, 0x825f, 0x8264, - 0x8262, 0x8268, 0x826a, 0x826b, 0x822e, 0x8271, 0x8277, 0x8278, - 0x827e, 0x828d, 0x8292, 0x82ab, 0x829f, 0x82bb, 0x82ac, 0x82e1, - 0x82e3, 0x82df, 0x82d2, 0x82f4, 0x82f3, 0x82fa, 0x8393, 0x8303, - 0x82fb, 0x82f9, 0x82de, 0x8306, 0x82dc, 0x8309, 0x82d9, 0x003f, - /* lead byte e8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, - 0x8350, 0x8345, 0x832f, 0x832b, 0x8317, 0x8318, 0x8385, 0x839a, - 0x83aa, 0x839f, 0x83a2, 0x8396, 0x8323, 0x838e, 0x8387, 0x838a, - 0x837c, 0x83b5, 0x8373, 0x8375, 0x83a0, 0x8389, 0x83a8, 0x83f4, - 0x8413, 0x83eb, 0x83ce, 0x83fd, 0x8403, 0x83d8, 0x840b, 0x83c1, - 0x83f7, 0x8407, 0x83e0, 0x83f2, 0x840d, 0x8422, 0x8420, 0x83bd, - 0x8438, 0x8506, 0x83fb, 0x846d, 0x842a, 0x843c, 0x855a, 0x8484, - 0x8477, 0x846b, 0x84ad, 0x846e, 0x8482, 0x8469, 0x8446, 0x842c, - 0x846f, 0x8479, 0x8435, 0x84ca, 0x8462, 0x84b9, 0x84bf, 0x849f, - 0x84d9, 0x84cd, 0x84bb, 0x84da, 0x84d0, 0x84c1, 0x84c6, 0x84d6, - 0x84a1, 0x8521, 0x84ff, 0x84f4, 0x8517, 0x8518, 0x852c, 0x851f, - 0x8515, 0x8514, 0x84fc, 0x8540, 0x8563, 0x8558, 0x8548, 0x003f, - /* lead byte e9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8541, 0x8602, 0x854b, 0x8555, 0x8580, 0x85a4, 0x8588, - 0x8591, 0x858a, 0x85a8, 0x856d, 0x8594, 0x859b, 0x85ea, 0x8587, - 0x859c, 0x8577, 0x857e, 0x8590, 0x85c9, 0x85ba, 0x85cf, 0x85b9, - 0x85d0, 0x85d5, 0x85dd, 0x85e5, 0x85dc, 0x85f9, 0x860a, 0x8613, - 0x860b, 0x85fe, 0x85fa, 0x8606, 0x8622, 0x861a, 0x8630, 0x863f, - 0x864d, 0x4e55, 0x8654, 0x865f, 0x8667, 0x8671, 0x8693, 0x86a3, - 0x86a9, 0x86aa, 0x868b, 0x868c, 0x86b6, 0x86af, 0x86c4, 0x86c6, - 0x86b0, 0x86c9, 0x8823, 0x86ab, 0x86d4, 0x86de, 0x86e9, 0x86ec, - 0x86df, 0x86db, 0x86ef, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, - 0x86fb, 0x8711, 0x8709, 0x870d, 0x86f9, 0x870a, 0x8734, 0x873f, - 0x8737, 0x873b, 0x8725, 0x8729, 0x871a, 0x8760, 0x875f, 0x8778, - 0x874c, 0x874e, 0x8774, 0x8757, 0x8768, 0x876e, 0x8759, 0x003f, - /* lead byte ea */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8753, 0x8763, 0x876a, 0x8805, 0x87a2, 0x879f, 0x8782, - 0x87af, 0x87cb, 0x87bd, 0x87c0, 0x87d0, 0x96d6, 0x87ab, 0x87c4, - 0x87b3, 0x87c7, 0x87c6, 0x87bb, 0x87ef, 0x87f2, 0x87e0, 0x880f, - 0x880d, 0x87fe, 0x87f6, 0x87f7, 0x880e, 0x87d2, 0x8811, 0x8816, - 0x8815, 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883b, - 0x8844, 0x8842, 0x8852, 0x8859, 0x885e, 0x8862, 0x886b, 0x8881, - 0x887e, 0x889e, 0x8875, 0x887d, 0x88b5, 0x8872, 0x8882, 0x8897, - 0x8892, 0x88ae, 0x8899, 0x88a2, 0x888d, 0x88a4, 0x88b0, 0x88bf, - 0x88b1, 0x88c3, 0x88c4, 0x88d4, 0x88d8, 0x88d9, 0x88dd, 0x88f9, - 0x8902, 0x88fc, 0x88f4, 0x88e8, 0x88f2, 0x8904, 0x890c, 0x890a, - 0x8913, 0x8943, 0x891e, 0x8925, 0x892a, 0x892b, 0x8941, 0x8944, - 0x893b, 0x8936, 0x8938, 0x894c, 0x891d, 0x8960, 0x895e, 0x003f, - /* lead byte eb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8966, 0x8964, 0x896d, 0x896a, 0x896f, 0x8974, 0x8977, - 0x897e, 0x8983, 0x8988, 0x898a, 0x8993, 0x8998, 0x89a1, 0x89a9, - 0x89a6, 0x89ac, 0x89af, 0x89b2, 0x89ba, 0x89bd, 0x89bf, 0x89c0, - 0x89da, 0x89dc, 0x89dd, 0x89e7, 0x89f4, 0x89f8, 0x8a03, 0x8a16, - 0x8a10, 0x8a0c, 0x8a1b, 0x8a1d, 0x8a25, 0x8a36, 0x8a41, 0x8a5b, - 0x8a52, 0x8a46, 0x8a48, 0x8a7c, 0x8a6d, 0x8a6c, 0x8a62, 0x8a85, - 0x8a82, 0x8a84, 0x8aa8, 0x8aa1, 0x8a91, 0x8aa5, 0x8aa6, 0x8a9a, - 0x8aa3, 0x8ac4, 0x8acd, 0x8ac2, 0x8ada, 0x8aeb, 0x8af3, 0x8ae7, - 0x8ae4, 0x8af1, 0x8b14, 0x8ae0, 0x8ae2, 0x8af7, 0x8ade, 0x8adb, - 0x8b0c, 0x8b07, 0x8b1a, 0x8ae1, 0x8b16, 0x8b10, 0x8b17, 0x8b20, - 0x8b33, 0x97ab, 0x8b26, 0x8b2b, 0x8b3e, 0x8b28, 0x8b41, 0x8b4c, - 0x8b4f, 0x8b4e, 0x8b49, 0x8b56, 0x8b5b, 0x8b5a, 0x8b6b, 0x003f, - /* lead byte ec */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8b5f, 0x8b6c, 0x8b6f, 0x8b74, 0x8b7d, 0x8b80, 0x8b8c, - 0x8b8e, 0x8b92, 0x8b93, 0x8b96, 0x8b99, 0x8b9a, 0x8c3a, 0x8c41, - 0x8c3f, 0x8c48, 0x8c4c, 0x8c4e, 0x8c50, 0x8c55, 0x8c62, 0x8c6c, - 0x8c78, 0x8c7a, 0x8c82, 0x8c89, 0x8c85, 0x8c8a, 0x8c8d, 0x8c8e, - 0x8c94, 0x8c7c, 0x8c98, 0x621d, 0x8cad, 0x8caa, 0x8cbd, 0x8cb2, - 0x8cb3, 0x8cae, 0x8cb6, 0x8cc8, 0x8cc1, 0x8ce4, 0x8ce3, 0x8cda, - 0x8cfd, 0x8cfa, 0x8cfb, 0x8d04, 0x8d05, 0x8d0a, 0x8d07, 0x8d0f, - 0x8d0d, 0x8d10, 0x9f4e, 0x8d13, 0x8ccd, 0x8d14, 0x8d16, 0x8d67, - 0x8d6d, 0x8d71, 0x8d73, 0x8d81, 0x8d99, 0x8dc2, 0x8dbe, 0x8dba, - 0x8dcf, 0x8dda, 0x8dd6, 0x8dcc, 0x8ddb, 0x8dcb, 0x8dea, 0x8deb, - 0x8ddf, 0x8de3, 0x8dfc, 0x8e08, 0x8e09, 0x8dff, 0x8e1d, 0x8e1e, - 0x8e10, 0x8e1f, 0x8e42, 0x8e35, 0x8e30, 0x8e34, 0x8e4a, 0x003f, - /* lead byte ed */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8e47, 0x8e49, 0x8e4c, 0x8e50, 0x8e48, 0x8e59, 0x8e64, - 0x8e60, 0x8e2a, 0x8e63, 0x8e55, 0x8e76, 0x8e72, 0x8e7c, 0x8e81, - 0x8e87, 0x8e85, 0x8e84, 0x8e8b, 0x8e8a, 0x8e93, 0x8e91, 0x8e94, - 0x8e99, 0x8eaa, 0x8ea1, 0x8eac, 0x8eb0, 0x8ec6, 0x8eb1, 0x8ebe, - 0x8ec5, 0x8ec8, 0x8ecb, 0x8edb, 0x8ee3, 0x8efc, 0x8efb, 0x8eeb, - 0x8efe, 0x8f0a, 0x8f05, 0x8f15, 0x8f12, 0x8f19, 0x8f13, 0x8f1c, - 0x8f1f, 0x8f1b, 0x8f0c, 0x8f26, 0x8f33, 0x8f3b, 0x8f39, 0x8f45, - 0x8f42, 0x8f3e, 0x8f4c, 0x8f49, 0x8f46, 0x8f4e, 0x8f57, 0x8f5c, - 0x8f62, 0x8f63, 0x8f64, 0x8f9c, 0x8f9f, 0x8fa3, 0x8fad, 0x8faf, - 0x8fb7, 0x8fda, 0x8fe5, 0x8fe2, 0x8fea, 0x8fef, 0x9087, 0x8ff4, - 0x9005, 0x8ff9, 0x8ffa, 0x9011, 0x9015, 0x9021, 0x900d, 0x901e, - 0x9016, 0x900b, 0x9027, 0x9036, 0x9035, 0x9039, 0x8ff8, 0x003f, - /* lead byte ee */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x904f, 0x9050, 0x9051, 0x9052, 0x900e, 0x9049, 0x903e, - 0x9056, 0x9058, 0x905e, 0x9068, 0x906f, 0x9076, 0x96a8, 0x9072, - 0x9082, 0x907d, 0x9081, 0x9080, 0x908a, 0x9089, 0x908f, 0x90a8, - 0x90af, 0x90b1, 0x90b5, 0x90e2, 0x90e4, 0x6248, 0x90db, 0x9102, - 0x9112, 0x9119, 0x9132, 0x9130, 0x914a, 0x9156, 0x9158, 0x9163, - 0x9165, 0x9169, 0x9173, 0x9172, 0x918b, 0x9189, 0x9182, 0x91a2, - 0x91ab, 0x91af, 0x91aa, 0x91b5, 0x91b4, 0x91ba, 0x91c0, 0x91c1, - 0x91c9, 0x91cb, 0x91d0, 0x91d6, 0x91df, 0x91e1, 0x91db, 0x91fc, - 0x91f5, 0x91f6, 0x921e, 0x91ff, 0x9214, 0x922c, 0x9215, 0x9211, - 0x925e, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923f, - 0x924b, 0x9250, 0x929c, 0x9296, 0x9293, 0x929b, 0x925a, 0x92cf, - 0x92b9, 0x92b7, 0x92e9, 0x930f, 0x92fa, 0x9344, 0x932e, 0x003f, - /* lead byte ef */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9319, 0x9322, 0x931a, 0x9323, 0x933a, 0x9335, 0x933b, - 0x935c, 0x9360, 0x937c, 0x936e, 0x9356, 0x93b0, 0x93ac, 0x93ad, - 0x9394, 0x93b9, 0x93d6, 0x93d7, 0x93e8, 0x93e5, 0x93d8, 0x93c3, - 0x93dd, 0x93d0, 0x93c8, 0x93e4, 0x941a, 0x9414, 0x9413, 0x9403, - 0x9407, 0x9410, 0x9436, 0x942b, 0x9435, 0x9421, 0x943a, 0x9441, - 0x9452, 0x9444, 0x945b, 0x9460, 0x9462, 0x945e, 0x946a, 0x9229, - 0x9470, 0x9475, 0x9477, 0x947d, 0x945a, 0x947c, 0x947e, 0x9481, - 0x947f, 0x9582, 0x9587, 0x958a, 0x9594, 0x9596, 0x9598, 0x9599, - 0x95a0, 0x95a8, 0x95a7, 0x95ad, 0x95bc, 0x95bb, 0x95b9, 0x95be, - 0x95ca, 0x6ff6, 0x95c3, 0x95cd, 0x95cc, 0x95d5, 0x95d4, 0x95d6, - 0x95dc, 0x95e1, 0x95e5, 0x95e2, 0x9621, 0x9628, 0x962e, 0x962f, - 0x9642, 0x964c, 0x964f, 0x964b, 0x9677, 0x965c, 0x965e, 0x003f, - /* lead byte f0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x965d, 0x965f, 0x9666, 0x9672, 0x966c, 0x968d, 0x9698, - 0x9695, 0x9697, 0x96aa, 0x96a7, 0x96b1, 0x96b2, 0x96b0, 0x96b4, - 0x96b6, 0x96b8, 0x96b9, 0x96ce, 0x96cb, 0x96c9, 0x96cd, 0x894d, - 0x96dc, 0x970d, 0x96d5, 0x96f9, 0x9704, 0x9706, 0x9708, 0x9713, - 0x970e, 0x9711, 0x970f, 0x9716, 0x9719, 0x9724, 0x972a, 0x9730, - 0x9739, 0x973d, 0x973e, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, - 0x975c, 0x9760, 0x9764, 0x9766, 0x9768, 0x52d2, 0x976b, 0x9771, - 0x9779, 0x9785, 0x977c, 0x9781, 0x977a, 0x9786, 0x978b, 0x978f, - 0x9790, 0x979c, 0x97a8, 0x97a6, 0x97a3, 0x97b3, 0x97b4, 0x97c3, - 0x97c6, 0x97c8, 0x97cb, 0x97dc, 0x97ed, 0x9f4f, 0x97f2, 0x7adf, - 0x97f6, 0x97f5, 0x980f, 0x980c, 0x9838, 0x9824, 0x9821, 0x9837, - 0x983d, 0x9846, 0x984f, 0x984b, 0x986b, 0x986f, 0x9870, 0x003f, - /* lead byte f1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9871, 0x9874, 0x9873, 0x98aa, 0x98af, 0x98b1, 0x98b6, - 0x98c4, 0x98c3, 0x98c6, 0x98e9, 0x98eb, 0x9903, 0x9909, 0x9912, - 0x9914, 0x9918, 0x9921, 0x991d, 0x991e, 0x9924, 0x9920, 0x992c, - 0x992e, 0x993d, 0x993e, 0x9942, 0x9949, 0x9945, 0x9950, 0x994b, - 0x9951, 0x9952, 0x994c, 0x9955, 0x9997, 0x9998, 0x99a5, 0x99ad, - 0x99ae, 0x99bc, 0x99df, 0x99db, 0x99dd, 0x99d8, 0x99d1, 0x99ed, - 0x99ee, 0x99f1, 0x99f2, 0x99fb, 0x99f8, 0x9a01, 0x9a0f, 0x9a05, - 0x99e2, 0x9a19, 0x9a2b, 0x9a37, 0x9a45, 0x9a42, 0x9a40, 0x9a43, - 0x9a3e, 0x9a55, 0x9a4d, 0x9a5b, 0x9a57, 0x9a5f, 0x9a62, 0x9a65, - 0x9a64, 0x9a69, 0x9a6b, 0x9a6a, 0x9aad, 0x9ab0, 0x9abc, 0x9ac0, - 0x9acf, 0x9ad1, 0x9ad3, 0x9ad4, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3, - 0x9ae6, 0x9aef, 0x9aeb, 0x9aee, 0x9af4, 0x9af1, 0x9af7, 0x003f, - /* lead byte f2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9afb, 0x9b06, 0x9b18, 0x9b1a, 0x9b1f, 0x9b22, 0x9b23, - 0x9b25, 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b32, - 0x9b44, 0x9b43, 0x9b4f, 0x9b4d, 0x9b4e, 0x9b51, 0x9b58, 0x9b74, - 0x9b93, 0x9b83, 0x9b91, 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, - 0x9bb4, 0x9bc0, 0x9bca, 0x9bb9, 0x9bc6, 0x9bcf, 0x9bd1, 0x9bd2, - 0x9be3, 0x9be2, 0x9be4, 0x9bd4, 0x9be1, 0x9c3a, 0x9bf2, 0x9bf1, - 0x9bf0, 0x9c15, 0x9c14, 0x9c09, 0x9c13, 0x9c0c, 0x9c06, 0x9c08, - 0x9c12, 0x9c0a, 0x9c04, 0x9c2e, 0x9c1b, 0x9c25, 0x9c24, 0x9c21, - 0x9c30, 0x9c47, 0x9c32, 0x9c46, 0x9c3e, 0x9c5a, 0x9c60, 0x9c67, - 0x9c76, 0x9c78, 0x9ce7, 0x9cec, 0x9cf0, 0x9d09, 0x9d08, 0x9ceb, - 0x9d03, 0x9d06, 0x9d2a, 0x9d26, 0x9daf, 0x9d23, 0x9d1f, 0x9d44, - 0x9d15, 0x9d12, 0x9d41, 0x9d3f, 0x9d3e, 0x9d46, 0x9d48, 0x003f, - /* lead byte f3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9d5d, 0x9d5e, 0x9d64, 0x9d51, 0x9d50, 0x9d59, 0x9d72, - 0x9d89, 0x9d87, 0x9dab, 0x9d6f, 0x9d7a, 0x9d9a, 0x9da4, 0x9da9, - 0x9db2, 0x9dc4, 0x9dc1, 0x9dbb, 0x9db8, 0x9dba, 0x9dc6, 0x9dcf, - 0x9dc2, 0x9dd9, 0x9dd3, 0x9df8, 0x9de6, 0x9ded, 0x9def, 0x9dfd, - 0x9e1a, 0x9e1b, 0x9e1e, 0x9e75, 0x9e79, 0x9e7d, 0x9e81, 0x9e88, - 0x9e8b, 0x9e8c, 0x9e92, 0x9e95, 0x9e91, 0x9e9d, 0x9ea5, 0x9ea9, - 0x9eb8, 0x9eaa, 0x9ead, 0x9761, 0x9ecc, 0x9ece, 0x9ecf, 0x9ed0, - 0x9ed4, 0x9edc, 0x9ede, 0x9edd, 0x9ee0, 0x9ee5, 0x9ee8, 0x9eef, - 0x9ef4, 0x9ef6, 0x9ef7, 0x9ef9, 0x9efb, 0x9efc, 0x9efd, 0x9f07, - 0x9f08, 0x76b7, 0x9f15, 0x9f21, 0x9f2c, 0x9f3e, 0x9f4a, 0x9f52, - 0x9f54, 0x9f63, 0x9f5f, 0x9f60, 0x9f61, 0x9f66, 0x9f67, 0x9f6c, - 0x9f6a, 0x9f77, 0x9f72, 0x9f76, 0x9f95, 0x9f9c, 0x9fa0, 0x003f, - /* lead byte f4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x582f, 0x69c7, 0x9059, 0x7464, 0x51dc, 0x7199, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f -}; - -static const unsigned char cp2uni_leadbytes[256] = -{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, - 0x0a, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 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, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 -}; - -static const unsigned short uni2cp_low[27648] = -{ - /* 0x0000 .. 0x00ff */ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0020, 0x0021, 0xa1f1, 0xa1f2, 0x003f, 0x005c, 0x007c, 0xa1f8, - 0xa1af, 0x0063, 0x0061, 0xa1d4, 0xa2cc, 0x002d, 0x0072, 0xa1bd, - 0xa1eb, 0xa1de, 0x0032, 0x0033, 0xa1ad, 0xa6cc, 0xa2f9, 0x003f, - 0x002c, 0x0031, 0x006f, 0xa1d5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0043, - 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049, - 0x0044, 0x004e, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0xa1df, - 0x004f, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x003f, 0xa6c2, - 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0063, - 0x0065, 0x0065, 0x0065, 0x0065, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0064, 0x006e, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0xa1e0, - 0x006f, 0x0075, 0x0075, 0x0075, 0x0075, 0x0079, 0x003f, 0x0079, - /* 0x0100 .. 0x01ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063, - 0x0043, 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0047, 0x0067, 0x0047, 0x0067, - 0x0047, 0x0067, 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, - 0x0049, 0x0069, 0x003f, 0x003f, 0x004a, 0x006a, 0x004b, 0x006b, - 0x003f, 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x003f, - 0x003f, 0x004c, 0x006c, 0x004e, 0x006e, 0x004e, 0x006e, 0x004e, - 0x006e, 0x003f, 0x003f, 0x003f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0057, 0x0077, 0x0059, 0x0079, - 0x0059, 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0073, - 0x0062, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0044, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0045, 0x0046, 0x0066, 0x003f, 0x003f, 0x003f, 0x003f, 0x0049, - 0x003f, 0x003f, 0x006c, 0x003f, 0x003f, 0x003f, 0x003f, 0x004f, - 0x004f, 0x006f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, 0x0054, 0x0055, - 0x0075, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa8a2, 0x003f, 0x003f, 0x0021, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, 0x0049, - 0x0069, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, - 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x003f, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0047, 0x0067, 0x0047, 0x0067, - 0x004b, 0x006b, 0x004f, 0x006f, 0x004f, 0x006f, 0x003f, 0x003f, - 0x006a, 0x003f, 0x003f, 0x003f, 0x0047, 0x0067, 0x003f, 0x003f, - 0x004e, 0x006e, 0x0041, 0x0061, 0x0041, 0x0061, 0x004f, 0x006f, - /* 0x0200 .. 0x02ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0053, 0x0073, 0x0054, 0x0074, 0x003f, 0x003f, 0x0048, 0x0068, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, - 0x0045, 0x0065, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0068, 0x003f, 0x006a, 0x0072, 0x003f, 0x003f, 0x003f, 0x0077, - 0x0079, 0xa1ad, 0xa1ed, 0xa1c6, 0xa1c7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x005e, 0x0076, - 0x0027, 0xa1bd, 0xa1ad, 0x0060, 0x003f, 0x005f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1eb, 0x003f, 0x007e, 0xa1ed, 0x003f, 0x003f, - 0x003f, 0x006c, 0x0073, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0300 .. 0x03ff */ - 0x0060, 0xa1ad, 0x005e, 0x007e, 0xa1bd, 0x007e, 0x003f, 0x003f, - 0xa1af, 0x003f, 0xa1eb, 0xa1ed, 0x0076, 0x003f, 0x0022, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x002c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x005f, 0x005f, 0x005f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0060, 0xa1ad, 0x003f, 0x003f, 0xa1af, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1ad, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1ad, 0xa1af, 0xa6a1, 0x003f, - 0xa6a5, 0xa6a7, 0xa6a9, 0x003f, 0xa6af, 0x003f, 0xa6b4, 0xa6b8, - 0xa6c9, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4, 0xa6a5, 0xa6a6, 0xa6a7, - 0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ad, 0xa6ae, 0xa6af, - 0xa6b0, 0xa6b1, 0x003f, 0xa6b2, 0xa6b3, 0xa6b4, 0xa6b5, 0xa6b6, - 0xa6b7, 0xa6b8, 0xa6a9, 0xa6b4, 0xa6c1, 0xa6c5, 0xa6c7, 0xa6c9, - 0xa6d4, 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5, 0xa6c6, 0xa6c7, - 0xa6c8, 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd, 0xa6ce, 0xa6cf, - 0xa6d0, 0xa6d1, 0x003f, 0xa6d2, 0xa6d3, 0xa6d4, 0xa6d5, 0xa6d6, - 0xa6d7, 0xa6d8, 0xa6c9, 0xa6d4, 0xa6cf, 0xa6d4, 0xa6d8, 0x003f, - 0xa6c2, 0xa6c8, 0xa6b4, 0xa6b4, 0xa6b4, 0xa6d5, 0xa6d0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa6ca, 0xa6d1, 0x003f, 0x003f, 0xa6a8, 0xa6c5, 0x003f, 0x003f, - 0x003f, 0xa6b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0400 .. 0x04ff */ - 0xa7a6, 0xa7a7, 0x003f, 0xa7a4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa7ac, 0xa7aa, 0xa7b5, 0x003f, - 0xa7a1, 0xa7a2, 0xa7a3, 0xa7a4, 0xa7a5, 0xa7a6, 0xa7a8, 0xa7a9, - 0xa7aa, 0xa7ab, 0xa7ac, 0xa7ad, 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, - 0xa7b2, 0xa7b3, 0xa7b4, 0xa7b5, 0xa7b6, 0xa7b7, 0xa7b8, 0xa7b9, - 0xa7ba, 0xa7bb, 0xa7bc, 0xa7bd, 0xa7be, 0xa7bf, 0xa7c0, 0xa7c1, - 0xa7d1, 0xa7d2, 0xa7d3, 0xa7d4, 0xa7d5, 0xa7d6, 0xa7d8, 0xa7d9, - 0xa7da, 0xa7db, 0xa7dc, 0xa7dd, 0xa7de, 0xa7df, 0xa7e0, 0xa7e1, - 0xa7e2, 0xa7e3, 0xa7e4, 0xa7e5, 0xa7e6, 0xa7e7, 0xa7e8, 0xa7e9, - 0xa7ea, 0xa7eb, 0xa7ec, 0xa7ed, 0xa7ee, 0xa7ef, 0xa7f0, 0xa7f1, - 0xa7d6, 0xa7d7, 0x003f, 0xa7d4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa7dc, 0xa7da, 0xa7e5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa7a8, 0xa7d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa7a1, 0xa7d1, 0xa7a1, 0xa7d1, 0x003f, 0x003f, 0xa7a6, 0xa7d6, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa7a8, 0xa7d8, 0xa7a9, 0xa7d9, - 0x003f, 0x003f, 0xa7aa, 0xa7da, 0xa7aa, 0xa7da, 0xa7b0, 0xa7e0, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa7bf, 0xa7ef, 0xa7b5, 0xa7e5, - 0xa7b5, 0xa7e5, 0xa7b5, 0xa7e5, 0xa7b9, 0xa7e9, 0x003f, 0x003f, - 0xa7bd, 0xa7ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1d00 .. 0x1dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0041, 0x0042, 0x003f, - 0x0044, 0x0045, 0x003f, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, - 0x004c, 0x004d, 0x004e, 0x003f, 0x004f, 0x003f, 0x0050, 0x0052, - 0x0054, 0x0055, 0x0057, 0x0061, 0x003f, 0x003f, 0x003f, 0x0062, - 0x0064, 0x0065, 0x003f, 0x003f, 0x003f, 0x0067, 0x003f, 0x006b, - 0x006d, 0x003f, 0x006f, 0x003f, 0x003f, 0x003f, 0x0070, 0x0074, - 0x0075, 0x003f, 0x003f, 0x0076, 0x003f, 0xa6c2, 0xa6c3, 0xa6c4, - 0xa6d5, 0xa6d6, 0x0069, 0x0072, 0x0075, 0x0076, 0xa6c2, 0xa6c3, - 0xa6d1, 0xa6d5, 0xa6d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa7df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0063, 0x003f, 0x0064, 0x003f, - 0x0066, 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, 0x003f, 0x003f, 0xa6c8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1e00 .. 0x1eff */ - 0x0041, 0x0061, 0x0042, 0x0062, 0x0042, 0x0062, 0x0042, 0x0062, - 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0046, 0x0066, - 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0048, 0x0068, 0x0048, 0x0068, 0x0049, 0x0069, 0x0049, 0x0069, - 0x004b, 0x006b, 0x004b, 0x006b, 0x004b, 0x006b, 0x004c, 0x006c, - 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x004d, 0x006d, - 0x004d, 0x006d, 0x004d, 0x006d, 0x004e, 0x006e, 0x004e, 0x006e, - 0x004e, 0x006e, 0x004e, 0x006e, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0050, 0x0070, 0x0050, 0x0070, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0054, 0x0074, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0056, 0x0076, 0x0056, 0x0076, - 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, - 0x0057, 0x0077, 0x0058, 0x0078, 0x0058, 0x0078, 0x0059, 0x0079, - 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0068, 0x0074, - 0x0077, 0x0079, 0x003f, 0x0073, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0059, 0x0079, 0x0059, 0x0079, 0x0059, 0x0079, - 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1f00 .. 0x1fff */ - 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, - 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, - 0xa6c5, 0xa6c5, 0xa6c5, 0xa6c5, 0xa6c5, 0xa6c5, 0x003f, 0x003f, - 0xa6a5, 0xa6a5, 0xa6a5, 0xa6a5, 0xa6a5, 0xa6a5, 0x003f, 0x003f, - 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, - 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, - 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, - 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, - 0xa6cf, 0xa6cf, 0xa6cf, 0xa6cf, 0xa6cf, 0xa6cf, 0x003f, 0x003f, - 0xa6af, 0xa6af, 0xa6af, 0xa6af, 0xa6af, 0xa6af, 0x003f, 0x003f, - 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, - 0x003f, 0xa6b4, 0x003f, 0xa6b4, 0x003f, 0xa6b4, 0x003f, 0xa6b4, - 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, - 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, - 0xa6c1, 0xa6c1, 0xa6c5, 0xa6c5, 0xa6c7, 0xa6c7, 0xa6c9, 0xa6c9, - 0xa6cf, 0xa6cf, 0xa6d4, 0xa6d4, 0xa6d8, 0xa6d8, 0x003f, 0x003f, - 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, - 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, - 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, - 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, - 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, - 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, - 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0x003f, 0xa6c1, 0xa6c1, - 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0x003f, 0xa6c9, 0x003f, - 0x003f, 0xa1af, 0xa6c7, 0xa6c7, 0xa6c7, 0x003f, 0xa6c7, 0xa6c7, - 0xa6a5, 0xa6a5, 0xa6a7, 0xa6a7, 0xa6a7, 0x003f, 0x003f, 0x003f, - 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0x003f, 0x003f, 0xa6c9, 0xa6c9, - 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d1, 0xa6d1, 0xa6d4, 0xa6d4, - 0xa6b4, 0xa6b4, 0xa6b4, 0xa6b4, 0xa6b1, 0xa1af, 0xa1af, 0x0060, - 0x003f, 0x003f, 0xa6d8, 0xa6d8, 0xa6d8, 0x003f, 0xa6d8, 0xa6d8, - 0xa6af, 0xa6af, 0xa6b8, 0xa6b8, 0xa6b8, 0xa1ad, 0x003f, 0x003f, - /* 0x2000 .. 0x20ff */ - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1be, 0xa1be, 0x003f, 0xa1bd, 0xa1bd, 0xa1bd, 0xa1c2, 0x005f, - 0xa1c6, 0xa1c7, 0x002c, 0xa1c6, 0xa1c8, 0xa1c9, 0x002c, 0x003f, - 0xa2f7, 0xa2f8, 0x003f, 0x003f, 0x002e, 0xa1c5, 0xa1c4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0xa2f3, 0x003f, 0xa1ec, 0xa1ed, 0x003f, 0xa1c6, 0x003f, 0x003f, - 0x003f, 0xa1d2, 0xa1d3, 0xa2a8, 0x0021, 0x003f, 0x007e, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x002f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1eb, 0x0069, 0x003f, 0x003f, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0xa1dd, 0x003d, 0x0028, 0x0029, 0x006e, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0xa1dd, 0x003d, 0x0028, 0x0029, 0x003f, - 0x0061, 0x0065, 0x006f, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa1f1, 0x003f, 0x003f, 0xa1f2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2100 .. 0x21ff */ - 0x003f, 0x003f, 0x0043, 0xa1ee, 0x003f, 0x003f, 0x003f, 0x0045, - 0x003f, 0x003f, 0x0067, 0x0048, 0x0048, 0x0048, 0x0068, 0x0068, - 0x0049, 0x0049, 0x004c, 0x006c, 0x003f, 0x004e, 0x003f, 0x003f, - 0x0050, 0x0050, 0x0051, 0x0052, 0x0052, 0x0052, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x005a, 0x003f, 0xa6b8, 0x003f, - 0x005a, 0x003f, 0x004b, 0xa2f2, 0x0042, 0x0043, 0x0065, 0x0065, - 0x0045, 0x0046, 0x003f, 0x004d, 0x006f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0069, 0x003f, 0x003f, 0xa6d0, 0xa6c3, 0xa6a3, 0xa6b0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0044, 0x0064, 0x0065, - 0x0069, 0x006a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0049, 0x003f, 0x003f, 0x003f, 0x0056, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0058, 0x003f, 0x003f, 0x004c, 0x0043, 0x0044, 0x004d, - 0x0069, 0x003f, 0x003f, 0x003f, 0x0076, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0078, 0x003f, 0x003f, 0x006c, 0x0063, 0x0064, 0x006d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2ab, 0xa2ac, 0xa2aa, 0xa2ad, 0x002d, 0x007c, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa2ab, 0xa2aa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x002d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa2ce, 0xa2cd, - 0x003f, 0x003f, 0xa2cd, 0x003f, 0xa2ce, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2200 .. 0x22ff */ - 0xa2cf, 0x003f, 0xa2df, 0xa2d0, 0xa2d0, 0x004f, 0x003f, 0xa2e0, - 0xa2ba, 0xa2ba, 0x003f, 0xa2bb, 0xa2bb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1dd, 0xa1de, 0x003f, 0x002f, 0x005c, 0x002a, - 0xa1eb, 0x003f, 0xa2e5, 0x003f, 0x003f, 0xa2e7, 0xa1e7, 0x004c, - 0xa2dc, 0x003f, 0x003f, 0x007c, 0x007c, 0x003f, 0x003f, 0xa2ca, - 0xa2cb, 0xa2c1, 0xa2c0, 0xa2e9, 0xa2ea, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1e8, 0xa2e8, 0x003a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x007e, 0xa2e6, 0x003f, 0x003f, - 0x003f, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x007e, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa2e2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1e2, 0xa2e1, 0xa2e1, 0xa2e1, 0x003f, 0x003f, 0xa1e5, 0xa1e6, - 0x003f, 0x003f, 0xa2e3, 0xa2e4, 0x003f, 0x003f, 0x003c, 0x003e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa2be, 0xa2bf, 0xa2be, 0xa2bf, 0xa2bc, 0xa2bd, - 0xa2bc, 0xa2bd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa2dd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2300 .. 0x23ff */ - 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa2de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa1d2, 0xa1d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2400 .. 0x24ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, - 0x0039, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, - 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, - 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, - 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, - 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x0030, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2500 .. 0x25ff */ - 0xa8a1, 0xa8ac, 0xa8a2, 0xa8ad, 0x002d, 0x002d, 0x007c, 0x007c, - 0x002d, 0x002d, 0x007c, 0x007c, 0xa8a3, 0xa8a3, 0xa8a3, 0xa8ae, - 0xa8a4, 0xa8a4, 0xa8a4, 0xa8af, 0xa8a6, 0xa8a6, 0xa8a6, 0xa8b1, - 0xa8a5, 0xa8a5, 0xa8a5, 0xa8b0, 0xa8a7, 0xa8bc, 0xa8a7, 0xa8a7, - 0xa8b7, 0xa8a7, 0xa8a7, 0xa8b2, 0xa8a9, 0xa8be, 0xa8a9, 0xa8a9, - 0xa8b9, 0xa8a9, 0xa8a9, 0xa8b4, 0xa8a8, 0xa8a8, 0xa8a8, 0xa8b8, - 0xa8bd, 0xa8a8, 0xa8a8, 0xa8b3, 0xa8aa, 0xa8aa, 0xa8aa, 0xa8ba, - 0xa8bf, 0xa8aa, 0xa8aa, 0xa8b5, 0xa8ab, 0xa8ab, 0xa8ab, 0xa8bb, - 0xa8ab, 0xa8ab, 0xa8c0, 0xa8ab, 0xa8ab, 0xa8ab, 0xa8ab, 0xa8ab, - 0xa8ab, 0xa8ab, 0xa8ab, 0xa8b6, 0x002d, 0x002d, 0x007c, 0x007c, - 0x003d, 0x007c, 0x002b, 0x002b, 0x002b, 0xa2cc, 0xa2cc, 0xa2cc, - 0x004c, 0x004c, 0x004c, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, - 0x002b, 0x002b, 0x002b, 0x002b, 0x0054, 0x0054, 0x0054, 0x002b, - 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x003f, 0x003f, 0x003f, - 0x003f, 0x002f, 0x005c, 0x0058, 0x002d, 0x007c, 0x002d, 0x007c, - 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2a3, 0xa2a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa2a5, 0xa2a4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa2a7, 0xa2a6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa2a1, 0xa1fe, - 0x003f, 0x003f, 0x003f, 0xa1fb, 0x003f, 0x003f, 0xa1fd, 0xa1fc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa2fe, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2600 .. 0x26ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1fa, 0xa1f9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1ea, 0x003f, 0xa1e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa2f6, 0x003f, 0x003f, 0xa2f5, 0x003f, 0xa2f4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2e00 .. 0x2eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcaec, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2f00 .. 0x2fff */ - 0xb0ec, 0x003f, 0xd0a6, 0xd0a8, 0xb2b5, 0xd0ad, 0xc6f3, 0xd0b5, - 0xbfcd, 0xd1b9, 0xc6fe, 0xc8ac, 0xd1c4, 0xd1cc, 0xd1d2, 0xd1dc, - 0xd1e1, 0xc5e1, 0xcecf, 0xd2b1, 0xd2b8, 0xd2b9, 0xd2be, 0xbdbd, - 0xcbce, 0xd2c7, 0xd2cc, 0xd2d3, 0xcbf4, 0xb8fd, 0xd3f8, 0xc5da, - 0xbbce, 0xd4e9, 0xd4ea, 0xcdbc, 0xc2e7, 0xbdf7, 0xbbd2, 0xd5df, - 0xc0a3, 0xbeae, 0xd5f7, 0xd5f9, 0xd6a5, 0xbbb3, 0xd6df, 0xb9a9, - 0xb8ca, 0xb6d2, 0xb4b3, 0xd6f6, 0xd6f8, 0xd7ae, 0xd7b0, 0xd7b5, - 0xb5dd, 0x003f, 0xd7c4, 0xd7c6, 0xbfb4, 0xd8f9, 0x003f, 0xbcea, - 0xbbd9, 0xdabd, 0xcab8, 0xc5cd, 0xb6d4, 0xcafd, 0xdadb, 0xc6fc, - 0xdba9, 0xb7ee, 0xccda, 0xb7e7, 0xbbdf, 0xddc6, 0xddd5, 0xddd9, - 0xc8e6, 0xccd3, 0xbbe1, 0xdde3, 0xbfe5, 0xb2d0, 0xc4de, 0xc9e3, - 0xe0ab, 0xe0ad, 0xcad2, 0xb2e7, 0xb5ed, 0xb8a4, 0xb8bc, 0xb6cc, - 0xb1bb, 0xb4a4, 0xb4c5, 0xc0b8, 0xcdd1, 0xc5c4, 0xc9a5, 0x003f, - 0xe2a2, 0xc7f2, 0xc8e9, 0xbbae, 0xccdc, 0xccb7, 0xccf0, 0xc0d0, - 0xbca8, 0x003f, 0xb2d3, 0xb7ea, 0xcea9, 0xc3dd, 0xcac6, 0xbbe5, - 0xb4cc, 0xe6a6, 0xcdd3, 0xb1a9, 0xcfb7, 0xbca9, 0xe6d0, 0xbcaa, - 0xe6e6, 0xc6f9, 0xbfc3, 0xbcab, 0xbbea, 0xb1b1, 0xc0e5, 0xc1a4, - 0xbdae, 0xbab1, 0xbfa7, 0xe7e7, 0xe9c8, 0xc3ee, 0xb7ec, 0xb9d4, - 0xb0e1, 0xeba8, 0xb8ab, 0xb3d1, 0xb8c0, 0xc3ab, 0xc6a6, 0xecb5, - 0xecb8, 0xb3ad, 0xc0d6, 0xc1f6, 0xc2ad, 0xbfc8, 0xbcd6, 0xbfc9, - 0xc3a4, 0x003f, 0xcdb8, 0xc6d3, 0xc8d0, 0xcea4, 0xb6e2, 0xc4b9, - 0xcce7, 0xc9ec, 0xf0b0, 0xf0b2, 0xb1ab, 0x003f, 0xc8f3, 0xcccc, - 0xb3d7, 0xf0ea, 0xf0ec, 0xb2bb, 0xcac7, 0xc9f7, 0xc8f4, 0xbfa9, - 0xbcf3, 0xb9e1, 0xc7cf, 0xb9fc, 0xb9e2, 0xf1f5, 0xf2a8, 0xf2ae, - 0xf2af, 0xb5b4, 0xb5fb, 0xc4bb, 0xf3c3, 0xbcaf, 0xf3ce, 0xcbe3, - 0x003f, 0xb5d0, 0x003f, 0xf3e3, 0xf3e6, 0xc5a4, 0xb8dd, 0xc1cd, - 0xc9a1, 0xf3ee, 0xf3ef, 0xceb6, 0xf3fd, 0xf3fe, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3000 .. 0x30ff */ - 0xa1a1, 0xa1a2, 0xa1a3, 0xa1b7, 0x003f, 0xa1b9, 0xa1ba, 0xa1bb, - 0xa1d2, 0xa1d3, 0xa1d4, 0xa1d5, 0xa1d6, 0xa1d7, 0xa1d8, 0xa1d9, - 0xa1da, 0xa1db, 0xa2a9, 0xa2ae, 0xa1cc, 0xa1cd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x005b, 0x005d, 0xa1c1, 0xa1c8, 0xa1c9, 0x002c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa2a9, 0x003f, - 0xbdbd, 0x003f, 0xd2c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, - 0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, - 0xa4b0, 0xa4b1, 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, - 0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf, - 0xa4c0, 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, - 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, - 0xa4d0, 0xa4d1, 0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, - 0xa4d8, 0xa4d9, 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df, - 0xa4e0, 0xa4e1, 0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7, - 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, - 0xa4f0, 0xa4f1, 0xa4f2, 0xa4f3, 0xa4a6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa1ab, 0xa1ac, 0xa1b5, 0xa1b6, 0x003f, - 0x003f, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6, 0xa5a7, - 0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac, 0xa5ad, 0xa5ae, 0xa5af, - 0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6, 0xa5b7, - 0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd, 0xa5be, 0xa5bf, - 0xa5c0, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, 0xa5c7, - 0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, - 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, 0xa5d7, - 0xa5d8, 0xa5d9, 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5de, 0xa5df, - 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6, 0xa5e7, - 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee, 0xa5ef, - 0xa5f0, 0xa5f1, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6, 0xa5ef, - 0xa5f0, 0xa5f1, 0xa5f2, 0xa1a6, 0xa1bc, 0xa1b3, 0xa1b4, 0x003f, - /* 0x3100 .. 0x31ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb0ec, 0xc6f3, 0xbbb0, 0xbbcd, 0xbee5, 0xc3e6, - 0xb2bc, 0xb9c3, 0xb2b5, 0xcaba, 0xc3fa, 0xc5b7, 0xc3cf, 0xbfcd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3200 .. 0x32ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb0ec, 0xc6f3, 0xbbb0, 0xbbcd, 0xb8de, 0xcfbb, 0xbcb7, 0xc8ac, - 0xb6e5, 0xbdbd, 0xb7ee, 0xb2d0, 0xbfe5, 0xccda, 0xb6e2, 0xc5da, - 0xc6fc, 0xb3f4, 0xcdad, 0xbcd2, 0xccbe, 0xc6c3, 0xbae2, 0xbdcb, - 0xcfab, 0xc8eb, 0xc3cb, 0xbdf7, 0xc5ac, 0xcda5, 0xb0f5, 0xc3ed, - 0xb9e0, 0xb5d9, 0xbccc, 0xc0b5, 0xbee5, 0xc3e6, 0xb2bc, 0xbab8, - 0xb1a6, 0xb0e5, 0xbda1, 0xb3d8, 0xb4c6, 0xb4eb, 0xbbf1, 0xb6a8, - 0xcceb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad, 0xa5af, - 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd, 0xa5bf, - 0xa5c1, 0xa5c4, 0xa5c6, 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, - 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de, 0xa5df, - 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9, 0xa5ea, - 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f0, 0xa5f1, 0xa5f2, 0x003f, - /* 0x4e00 .. 0x4eff */ - 0xb0ec, 0xc3fa, 0x003f, 0xbcb7, 0x003f, 0x003f, 0x003f, 0xcbfc, - 0xbee6, 0xbbb0, 0xbee5, 0xb2bc, 0x003f, 0xc9d4, 0xcdbf, 0x003f, - 0xd0a2, 0xb1af, 0x003f, 0x003f, 0xb3ee, 0xd0a3, 0xc0a4, 0xd2c2, - 0xb5d6, 0xcaba, 0x003f, 0x003f, 0x003f, 0x003f, 0xbee7, 0x003f, - 0x003f, 0xcebe, 0x003f, 0x003f, 0x003f, 0x003f, 0xcac2, 0x003f, - 0x003f, 0x003f, 0xd0a4, 0x003f, 0x003f, 0xc3e6, 0x003f, 0x003f, - 0x003f, 0xd0a5, 0xb6fa, 0x003f, 0x003f, 0x003f, 0xd0a6, 0x003f, - 0xb4dd, 0xc3b0, 0x003f, 0xbce7, 0xd0a7, 0x003f, 0x003f, 0xd0a8, - 0x003f, 0x003f, 0xd0a9, 0xc7b5, 0x003f, 0xb5d7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc7b7, 0x003f, 0xc6e3, 0xb8c3, 0xcbb3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c9, 0xd0aa, 0xbee8, - 0xd0ab, 0xb2b5, 0x003f, 0x003f, 0x003f, 0xb6e5, 0xb8f0, 0xcce9, - 0x003f, 0x003f, 0xd6a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdf0, 0x003f, 0xc6fd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb4a5, 0x003f, - 0xb5b5, 0x003f, 0xd0ac, 0x003f, 0x003f, 0xd0ad, 0xcebb, 0x003f, - 0xcdbd, 0xc1e8, 0xd0af, 0xbbf6, 0xc6f3, 0x003f, 0xd0b2, 0x003f, - 0x003f, 0xb1be, 0xb8df, 0x003f, 0xb8de, 0xb0e6, 0x003f, 0x003f, - 0xcfcb, 0xcfca, 0x003f, 0xbab3, 0xb0a1, 0x003f, 0xd0b3, 0xd0b4, - 0xd0b5, 0xcbb4, 0xd0b6, 0x003f, 0xb8f2, 0xb0e7, 0xcbf2, 0x003f, - 0xb5fc, 0x003f, 0x003f, 0xb5fd, 0xb5fe, 0xc4e2, 0xcebc, 0x003f, - 0xd0b7, 0x003f, 0x003f, 0xd0b8, 0x003f, 0x003f, 0xd0b9, 0x003f, - 0x003f, 0x003f, 0xbfcd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbdba, 0xbfce, 0xd0be, 0x003f, 0xd0bc, 0x003f, 0xd0bd, 0xb5d8, - 0x003f, 0x003f, 0xbaa3, 0xb2f0, 0x003f, 0xd0bb, 0xd0ba, 0xcaa9, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbbc6, 0xbbc5, 0xc2be, 0xd0bf, - 0xc9d5, 0xc0e7, 0x003f, 0x003f, 0x003f, 0xa1b8, 0xd0c0, 0xd0c2, - 0x003f, 0x003f, 0x003f, 0xc2e5, 0xcee1, 0xb0ca, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0c1, 0xb2be, 0x003f, - 0xb6c4, 0x003f, 0xc3e7, 0x003f, 0x003f, 0x003f, 0xb7ef, 0xd0c3, - 0x003f, 0x003f, 0x003f, 0xc7a4, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x4f00 .. 0x4fff */ - 0x003f, 0xb4eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd0c4, 0xb0cb, 0x003f, 0x003f, 0xb8e0, 0xb4ec, 0xc9fa, - 0xc8b2, 0xb5d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb2f1, 0x003f, 0xd0e7, 0xc5c1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc7ec, - 0xd0c6, 0x003f, 0x003f, 0x003f, 0xc8bc, 0x003f, 0xcee2, 0x003f, - 0xbfad, 0x003f, 0xbbc7, 0x003f, 0xbbf7, 0xb2c0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc4d1, 0x003f, 0x003f, 0xc3a2, 0xd0ca, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb0cc, 0xc4e3, 0xbdbb, - 0xbab4, 0xcda4, 0x003f, 0xc2ce, 0x003f, 0xb2bf, 0x003f, 0xd0c9, - 0x003f, 0xcdbe, 0xd0c5, 0xd0c7, 0xbaee, 0xd0c8, 0xd5a4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd0d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0d3, - 0xd0d1, 0x003f, 0x003f, 0xb2c2, 0x003f, 0xcabb, 0xd0cb, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd0cf, 0xb8f3, 0x003f, 0x003f, 0xbbc8, - 0x003f, 0x003f, 0x003f, 0xb4a6, 0x003f, 0x003f, 0xd0d4, 0x003f, - 0xd0cc, 0x003f, 0x003f, 0xcee3, 0x003f, 0xbbf8, 0x003f, 0xd0cd, - 0x003f, 0xd0d2, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0d5, 0x003f, - 0xd0ce, 0x003f, 0x003f, 0xb6a1, 0x003f, 0xb0cd, 0x003f, 0x003f, - 0xb6a2, 0xb2c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd5a5, 0x003f, 0xcbf9, 0xc9ee, 0xb8f4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbfaf, 0xceb7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcad8, - 0x003f, 0x003f, 0xb7b8, 0xc2a5, 0xb2e4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbdd3, 0x003f, 0x003f, 0x003f, 0xd0d9, 0x003f, - 0xd0de, 0xd0dc, 0x003f, 0x003f, 0xd0d7, 0x003f, 0x003f, 0xc2af, - 0xd0da, 0x003f, 0xd0dd, 0xd0db, 0x003f, 0xcadd, 0x003f, 0xd0d8, - 0x003f, 0xbfae, 0x003f, 0xcbf3, 0xd0df, 0xd0e0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbda4, 0xd0ed, - 0x003f, 0x003f, 0x003f, 0xc7d0, 0x003f, 0xc9b6, 0xd0e8, 0x003f, - 0xcaf0, 0x003f, 0xb2b6, 0x003f, 0x003f, 0x003f, 0xd0ec, 0x003f, - /* 0x5000 .. 0x50ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0e6, 0xd0ef, 0x003f, - 0x003f, 0xc1d2, 0x003f, 0xb8c4, 0x003f, 0xc7dc, 0x003f, 0xe0c7, - 0x003f, 0xd0ee, 0xc5dd, 0x003f, 0xd0e3, 0x003f, 0xb8f6, 0x003f, - 0x003f, 0xb8f5, 0xd0e1, 0x003f, 0x003f, 0x003f, 0x003f, 0xbcda, - 0x003f, 0xd0e9, 0x003f, 0xcaef, 0xc3cd, 0xd0e5, 0xb7f1, 0x003f, - 0xd0e2, 0xd0ea, 0xd0e4, 0xced1, 0xd0eb, 0xcfc1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6e6, 0x003f, - 0x003f, 0xb7f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd0f0, 0x003f, 0x003f, 0x003f, 0xd0f1, - 0xd0f5, 0xb0ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcad0, - 0xd0f4, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0f3, 0xd0f7, 0x003f, - 0x003f, 0x003f, 0xd0f6, 0x003f, 0xc4e4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7f2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd0f8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbcc5, 0x003f, 0xc2a6, 0xc4e5, 0xb6f6, 0x003f, - 0xd0f9, 0x003f, 0x003f, 0x003f, 0x003f, 0xb5b6, 0x003f, 0x003f, - 0xd0fa, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0fc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbb5, 0x003f, 0x003f, - 0x003f, 0xb7e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbbb1, 0xc8f7, 0xd0fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbac5, 0xcdc3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd0fe, 0xd1a3, 0xd0fd, 0xbac4, 0x003f, 0xbdfd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7b9, 0x003f, - 0x003f, 0x003f, 0xd1a4, 0x003f, 0x003f, 0xb6cf, 0x003f, 0x003f, - 0x003f, 0xd1a1, 0xd1a2, 0x003f, 0x003f, 0xc6af, 0x003f, 0xc1fc, - 0x003f, 0xb6a3, 0x003f, 0x003f, 0x003f, 0xcbcd, 0xd1a5, 0x003f, - 0x003f, 0x003f, 0xcebd, 0x003f, 0x003f, 0x003f, 0xd1a6, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd1a9, 0x003f, 0xd1a7, 0x003f, 0xc1ce, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1a8, 0xd1aa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1ac, 0x003f, 0x003f, - 0x003f, 0xd1ab, 0x003f, 0xcac8, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5100 .. 0x51ff */ - 0xb5b7, 0xd1ae, 0xd1af, 0x003f, 0xb2af, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd1ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbcf4, 0x003f, 0xd1b2, 0xd1b1, 0xd1b0, 0x003f, - 0xd0d6, 0x003f, 0xd1b3, 0x003f, 0x003f, 0x003f, 0x003f, 0xbdfe, - 0x003f, 0xd1b4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcda5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xccd9, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1b6, - 0x003f, 0x003f, 0xd1b5, 0xd1b8, 0xd1b7, 0x003f, 0x003f, 0xd1b9, - 0xd1ba, 0xb0f4, 0x003f, 0xb8b5, 0xb7bb, 0xbdbc, 0xc3fb, 0xb6a4, - 0xc0e8, 0xb8f7, 0x003f, 0xb9ee, 0xd1bc, 0xccc8, 0xc5c6, 0x003f, - 0xbbf9, 0x003f, 0xd1bb, 0x003f, 0xd1bd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc5de, 0x003f, 0xb3f5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd1be, 0x003f, 0x003f, 0xc6fe, 0x003f, 0x003f, - 0xc1b4, 0xd1c0, 0xd1c1, 0xc8ac, 0xb8f8, 0xcfbb, 0xd1c2, 0x003f, - 0x003f, 0xb6a6, 0x003f, 0x003f, 0x003f, 0xcabc, 0xc2b6, 0xb6f1, - 0xc5b5, 0x003f, 0x003f, 0x003f, 0xb7f3, 0x003f, 0x003f, 0x003f, - 0xd1c3, 0x003f, 0xd1c4, 0x003f, 0x003f, 0xc6e2, 0xb1df, 0x003f, - 0x003f, 0xd1c7, 0xbafd, 0x003f, 0xd1c6, 0xbac6, 0x003f, 0xd1c8, - 0xe6ee, 0xd1c9, 0xcbc1, 0xd1ca, 0x003f, 0xd1cb, 0xd1cc, 0xbee9, - 0x003f, 0xbccc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb4a7, 0x003f, 0xd1cf, 0x003f, 0xd1cd, 0xccbd, 0xd1ce, 0x003f, - 0xc9da, 0xd1d0, 0xd1d1, 0xd1d2, 0xc5df, 0x003f, 0x003f, 0x003f, - 0xd1d6, 0xd1d4, 0xd1d5, 0xd1d3, 0xbae3, 0xd1d7, 0xccea, 0xcee4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1d8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc0a8, 0xd1d9, 0xbdda, 0x003f, - 0x003f, 0xd1da, 0x003f, 0xc3fc, 0xcebf, 0xc5e0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2c5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd1db, 0xf4a5, 0xb6c5, 0x003f, 0x003f, - 0xd1dc, 0xcbde, 0x003f, 0x003f, 0x003f, 0x003f, 0xbde8, 0xc2fc, - 0x003f, 0xd1de, 0xc6e4, 0x003f, 0x003f, 0xd1df, 0x003f, 0x003f, - 0xd1e0, 0xb3ae, 0x003f, 0x003f, 0x003f, 0xd1e1, 0xb6a7, 0x003f, - 0xc6cc, 0xb1fa, 0xbdd0, 0x003f, 0x003f, 0xc8a1, 0xd1e2, 0x003f, - /* 0x5200 .. 0x52ff */ - 0xc5e1, 0x003f, 0x003f, 0xbfcf, 0xd1e3, 0x003f, 0xcaac, 0xc0da, - 0xb4a2, 0x003f, 0xb4a9, 0xd1e4, 0x003f, 0x003f, 0xd1e6, 0x003f, - 0x003f, 0xb7ba, 0x003f, 0x003f, 0xd1e5, 0x003f, 0x003f, 0xcef3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbde9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc8bd, 0xcacc, 0x003f, 0xd1e7, - 0x003f, 0xcdf8, 0xd1e8, 0x003f, 0x003f, 0x003f, 0xd1e9, 0x003f, - 0xc5fe, 0x003f, 0x003f, 0xd1ea, 0x003f, 0x003f, 0xc0a9, 0xbafe, - 0xb7f4, 0xd1eb, 0xbbc9, 0xb9ef, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc4e6, 0xd1ed, 0x003f, 0x003f, 0xc2a7, - 0x003f, 0x003f, 0xbaef, 0xd1ee, 0xd1ef, 0xc1b0, 0x003f, 0xd1ec, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd1f1, 0x003f, 0xcbb6, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb9e4, 0x003f, 0x003f, 0xd1f0, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb7f5, 0xbade, 0xc7ed, 0x003f, 0x003f, - 0x003f, 0xd1f4, 0xd1f2, 0x003f, 0x003f, 0x003f, 0x003f, 0xc9fb, - 0xbeea, 0xd1fb, 0xb3e4, 0xd1f5, 0xd1f3, 0xc1cf, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1f7, 0x003f, 0xd1f6, - 0x003f, 0x003f, 0x003f, 0xb3c4, 0x003f, 0x003f, 0x003f, 0xb7e0, - 0xd1fc, 0xcead, 0x003f, 0x003f, 0x003f, 0xd1f8, 0x003f, 0x003f, - 0x003f, 0xd1fd, 0xd1fa, 0x003f, 0xd1f9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcecf, 0x003f, 0x003f, 0x003f, 0xb8f9, - 0xb2c3, 0x003f, 0x003f, 0xcef4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbdf5, 0xc5d8, 0xb9e5, 0xd2a2, 0xd2a3, 0x003f, 0x003f, - 0x003f, 0xcee5, 0x003f, 0x003f, 0xcfab, 0xd2a5, 0x003f, 0x003f, - 0x003f, 0xb8fa, 0x003f, 0x003f, 0xd2a4, 0x003f, 0xb3af, 0x003f, - 0x003f, 0xd2a6, 0x003f, 0xcbd6, 0x003f, 0xc4bc, 0x003f, 0xcda6, - 0x003f, 0xcad9, 0x003f, 0x003f, 0x003f, 0xd2a7, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf0d5, 0x003f, 0x003f, 0xc6b0, 0x003f, 0xd2a8, - 0xb4aa, 0xccb3, 0x003f, 0x003f, 0x003f, 0xbea1, 0xd2a9, 0xcae7, - 0xd2ad, 0x003f, 0xc0aa, 0xd2aa, 0xb6d0, 0x003f, 0xd2ab, 0xb4ab, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb7ae, 0xd2ae, 0x003f, 0xd2af, 0x003f, 0x003f, - 0xd2b0, 0xd2b1, 0xbcdb, 0x003f, 0x003f, 0x003f, 0xb8fb, 0xccde, - /* 0x5300 .. 0x53ff */ - 0x003f, 0xcce8, 0xc6f7, 0x003f, 0x003f, 0xcaf1, 0xd2b2, 0x003f, - 0xd2b3, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2b5, 0x003f, 0xd2b7, - 0xd2b6, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2b8, 0xb2bd, 0xcbcc, - 0x003f, 0xbafc, 0xd2b9, 0x003f, 0x003f, 0xc1d9, 0x003f, 0x003f, - 0xbea2, 0xb6a9, 0x003f, 0xd2ba, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc8db, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2bb, - 0x003f, 0xd2bc, 0x003f, 0xd2bd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd2be, 0xc9a4, 0xb6e8, 0xb0e5, 0x003f, 0x003f, 0x003f, 0xc6bf, - 0xd2bf, 0xbdbd, 0x003f, 0xc0e9, 0x003f, 0xd2c1, 0xd2c0, 0xbea3, - 0xb8e1, 0xd2c3, 0xc8be, 0x003f, 0x003f, 0xd2c4, 0x003f, 0x003f, - 0x003f, 0xc8dc, 0xc2b4, 0xc2ee, 0xb6a8, 0x003f, 0x003f, 0xc6ee, - 0xc3b1, 0x003f, 0xc7ee, 0x003f, 0xcbce, 0x003f, 0xd2c6, 0x003f, - 0xc0ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7b5, 0x003f, - 0x003f, 0xd2c7, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2c8, 0xb1ac, - 0xb0f5, 0xb4ed, 0x003f, 0xc2a8, 0xb5d1, 0xcdf1, 0x003f, 0xd2cb, - 0xb2b7, 0x003f, 0x003f, 0xd2ca, 0x003f, 0x003f, 0x003f, 0xb6aa, - 0x003f, 0x003f, 0xd2cc, 0x003f, 0xccf1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2cd, 0x003f, - 0xced2, 0x003f, 0xb8fc, 0x003f, 0x003f, 0x003f, 0x003f, 0xb8b6, - 0xd2ce, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2d0, 0xd2cf, 0x003f, - 0xbfdf, 0xb1b9, 0x003f, 0x003f, 0x003f, 0xb1de, 0xd2d1, 0x003f, - 0xd2d2, 0x003f, 0x003f, 0xb8b7, 0x003f, 0x003f, 0xd2d3, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb5ee, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbbb2, 0xd2d4, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcbf4, 0xbab5, 0xb5da, 0xcda7, 0xc1d0, 0xc8bf, 0xbcfd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbdc7, 0x003f, 0xbce8, 0xbcf5, - 0x003f, 0xbdf6, 0x003f, 0xc8c0, 0x003f, 0x003f, 0x003f, 0xd2d7, - 0x003f, 0xb1c3, 0xc1d1, 0xb8fd, 0xb8c5, 0xb6e7, 0x003f, 0x003f, - 0xd2db, 0xc3a1, 0xc2fe, 0xb6ab, 0xbea4, 0xd2dc, 0xd2da, 0xb2c4, - 0xc2e6, 0xbcb8, 0xbbcb, 0xb1a6, 0x003f, 0x003f, 0xb3f0, 0xb9e6, - 0xbbca, 0x003f, 0xd2dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5400 .. 0x54ff */ - 0x003f, 0xd2de, 0x003f, 0xb5c9, 0xb3c6, 0x003f, 0x003f, 0x003f, - 0xb9e7, 0xb5c8, 0xc4df, 0xb1a5, 0xc6b1, 0xccbe, 0xb9a1, 0xcdf9, - 0xc5c7, 0xb8fe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb7af, 0x003f, 0xd2e7, 0x003f, 0xb6e3, - 0xcbca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc8dd, 0x003f, - 0x003f, 0xd2e6, 0x003f, 0xb4de, 0xd2e1, 0xd2e2, 0xd2e4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2e5, 0x003f, - 0xb5db, 0xbfe1, 0x003f, 0xcaad, 0xd2e3, 0xd2df, 0xb8e3, 0x003f, - 0xd2e0, 0x003f, 0xcfa4, 0x003f, 0x003f, 0x003f, 0xcaf2, 0x003f, - 0xc4e8, 0xb8e2, 0xb9f0, 0x003f, 0x003f, 0x003f, 0xd2e8, 0x003f, - 0x003f, 0xc6dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2ec, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbcfe, 0x003f, 0xbcf6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd2ef, 0xd2ed, 0x003f, 0xcca3, 0x003f, 0xd2ea, 0xd2f3, 0xd2ee, - 0x003f, 0x003f, 0x003f, 0xd2f1, 0xb8c6, 0xccbf, 0x003f, 0x003f, - 0xd2f2, 0x003f, 0x003f, 0x003f, 0xd2f4, 0x003f, 0xd2f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbaf0, 0xcfc2, 0x003f, 0xd2eb, 0xd2e9, - 0xd2f5, 0x003f, 0xd2f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd2f8, 0x003f, 0xd3a3, 0xd2fa, 0x003f, 0x003f, - 0xd2fe, 0x003f, 0x003f, 0xd3a1, 0xd2fb, 0x003f, 0x003f, 0xd3be, - 0x003f, 0x003f, 0xbae9, 0xb3b1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd2f9, 0x003f, 0x003f, 0x003f, 0xd3a5, 0xb0f6, 0xd3a4, 0x003f, - 0xb0a5, 0xc9ca, 0xd3a2, 0x003f, 0xd2fc, 0x003f, 0x003f, 0xd2f7, - 0xd2fd, 0xbac8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb0f7, 0xd3af, 0x003f, 0x003f, 0xd3a7, 0xd3a8, 0x003f, - 0xbea5, 0xcbe9, 0x003f, 0x003f, 0x003f, 0xd3ad, 0xd3ac, 0x003f, - 0x003f, 0x003f, 0xc5af, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd3ae, 0x003f, 0x003f, 0xd3ab, 0x003f, 0x003f, - /* 0x5500 .. 0x55ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xb1b4, 0x003f, 0xbab6, 0xbfb0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3a9, - 0xc5e2, 0x003f, 0x003f, 0x003f, 0xd3aa, 0x003f, 0xb0a2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3b4, 0xcda3, - 0x003f, 0xbea7, 0x003f, 0xd3ba, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3b9, 0xd3b0, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2c3, 0x003f, - 0xd3b1, 0x003f, 0x003f, 0x003f, 0xc2ef, 0xd3b6, 0xbea6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3b3, 0x003f, 0x003f, 0xcce4, - 0x003f, 0x003f, 0x003f, 0xb7bc, 0x003f, 0x003f, 0xd3b7, 0xd3b8, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3b5, 0xd3bb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd3b2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd3c1, 0xd3c6, 0x003f, 0xd3c2, 0x003f, - 0xd3bd, 0x003f, 0x003f, 0xd3c7, 0xc1b1, 0x003f, 0x003f, 0xd3c9, - 0x003f, 0xb9a2, 0xd3bf, 0xc3fd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3c3, 0xd3bc, 0xb4ad, 0x003f, 0xb4ee, 0xb3e5, 0xd3c4, 0xd3c0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7f6, - 0xd3ca, 0xd3c8, 0xc1d3, 0xb5ca, 0xb6ac, 0x003f, 0xd3c5, 0x003f, - 0xb6f4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb1c4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3ce, 0xd3cc, 0x003f, 0xd4a7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3d1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd3cb, 0x003f, 0xd3cf, 0x003f, 0x003f, 0xd3cd, - 0x003f, 0x003f, 0x003f, 0xbbcc, 0xd3d0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3d3, - 0x003f, 0xd3d8, 0x003f, 0x003f, 0x003f, 0xd3d6, 0xd3d5, 0x003f, - /* 0x5600 .. 0x56ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc3b2, 0x003f, - 0x003f, 0xb2c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3d2, 0x003f, 0xd3d4, 0xbea8, - 0xb1b3, 0x003f, 0x003f, 0xd3d7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb2de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3e2, - 0x003f, 0xbefc, 0xd3de, 0x003f, 0xd3dc, 0x003f, 0xd3dd, 0x003f, - 0xd3df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb1bd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc1b9, 0x003f, 0xd3d9, 0x003f, - 0xd3da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb3fa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3e1, 0x003f, 0x003f, 0x003f, - 0xb4ef, 0x003f, 0xd3e4, 0xd3e0, 0xd3e3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcaae, 0x003f, 0x003f, 0x003f, - 0xc6d5, 0x003f, 0xc8b8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3e5, 0xb3c5, - 0x003f, 0x003f, 0xd3e7, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3ea, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3e9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3e8, 0x003f, 0xc7b9, 0x003f, 0x003f, 0xd3eb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3ec, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3ee, 0x003f, 0xd3ed, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd3f0, 0x003f, 0x003f, 0x003f, - 0xd3f3, 0xd3f1, 0xd3ef, 0xd3f2, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3f4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3f5, 0x003f, - 0x003f, 0xd3f6, 0x003f, 0xd3f7, 0x003f, 0x003f, 0x003f, 0xd3f8, - 0xd1c5, 0x003f, 0xbcfc, 0xbbcd, 0x003f, 0x003f, 0xb2f3, 0x003f, - 0xb0f8, 0x003f, 0x003f, 0xc3c4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3f9, 0x003f, - 0xbaa4, 0x003f, 0xb0cf, 0xbfde, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3fa, 0xb8c7, 0x003f, 0x003f, 0xb9f1, 0x003f, 0xd3fc, - /* 0x5700 .. 0x57ff */ - 0xd3fb, 0x003f, 0x003f, 0xcae0, 0xd3fd, 0x003f, 0x003f, 0x003f, - 0xd4a1, 0xd3fe, 0x003f, 0xd4a2, 0x003f, 0xd4a3, 0x003f, 0xb7f7, - 0x003f, 0x003f, 0xb1e0, 0xd4a4, 0x003f, 0x003f, 0xd4a6, 0x003f, - 0xd4a5, 0x003f, 0x003f, 0x003f, 0xd4a8, 0x003f, 0x003f, 0xc5da, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4a9, 0xb0b5, - 0xbadf, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7bd, 0x003f, 0x003f, - 0xc3cf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4aa, - 0xd4ab, 0x003f, 0x003f, 0xd4ad, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4ae, 0x003f, 0xbae4, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6d1, - 0x003f, 0x003f, 0xcbb7, 0x003f, 0x003f, 0x003f, 0xd4ac, 0xd4af, - 0xbac1, 0xb9a3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4b3, 0x003f, 0x003f, 0xbaa5, 0x003f, 0xc3b3, 0x003f, - 0x003f, 0xd4b0, 0xc4da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4b4, - 0x003f, 0x003f, 0xbfe2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4b2, 0xd4b5, 0x003f, 0xb7bf, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd4b6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4b7, 0x003f, 0xb9a4, 0xb3c0, 0xd4b9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd4ba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4bb, 0x003f, 0x003f, 0xd4b8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4b1, 0x003f, 0x003f, 0xd4bc, 0x003f, 0x003f, 0xd4bd, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcbe4, 0x003f, 0x003f, 0xbeeb, 0x003f, - 0x003f, 0x003f, 0xd4bf, 0xd4c0, 0xd4be, 0x003f, 0xd4c2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc7b8, 0x003f, 0x003f, 0xb0e8, - 0xc9d6, 0x003f, 0x003f, 0xd4c3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbefd, 0x003f, 0x003f, 0xbcb9, - 0x003f, 0xc7dd, 0xb4f0, 0x003f, 0xbaeb, 0x003f, 0x003f, 0x003f, - /* 0x5800 .. 0x58ff */ - 0xcbd9, 0x003f, 0xc6b2, 0x003f, 0x003f, 0xb7f8, 0xc2cf, 0x003f, - 0x003f, 0x003f, 0xd4c1, 0xd4c4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2c4, 0x003f, 0x003f, - 0x003f, 0xd4c5, 0x003f, 0x003f, 0x003f, 0xd4c6, 0x003f, 0x003f, - 0x003f, 0xd4c8, 0x003f, 0x003f, 0xc4e9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb4ae, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4a1, - 0xb1e1, 0xcaf3, 0x003f, 0x003f, 0xbeec, 0xc5c8, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbae6, 0x003f, 0x003f, 0xd4ce, 0x003f, 0x003f, - 0xcabd, 0xcedd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb2f4, 0xd4ca, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc1ba, 0xd4cd, 0x003f, 0xc5e3, 0x003f, 0x003f, 0xc5c9, - 0xc5e4, 0xc8b9, 0xc4cd, 0x003f, 0x003f, 0x003f, 0xbac9, 0x003f, - 0x003f, 0x003f, 0xd4c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb1f6, 0x003f, 0xc5b6, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4cb, 0x003f, 0xd4c7, 0x003f, 0x003f, 0xbfd0, 0x003f, 0x003f, - 0x003f, 0xd4cf, 0x003f, 0x003f, 0x003f, 0x003f, 0xbdce, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb6ad, 0x003f, 0xd4d0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcae8, 0x003f, 0x003f, 0x003f, 0xc1fd, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc4c6, 0x003f, 0x003f, 0xd4d2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcbcf, 0x003f, 0x003f, 0xd4d3, 0x003f, 0x003f, 0xd4d8, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcaaf, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4d7, 0xd4d1, 0xd4d4, 0xd4d6, 0x003f, 0x003f, 0xbaa6, 0x003f, - 0x003f, 0xcac9, 0x003f, 0x003f, 0x003f, 0xd4d9, 0x003f, 0xc3c5, - 0x003f, 0x003f, 0xb2f5, 0x003f, 0xbeed, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4db, 0x003f, 0xd4da, 0x003f, 0xb9e8, 0x003f, 0xd4dc, - 0xd4de, 0xd4dd, 0x003f, 0x003f, 0xd4e0, 0x003f, 0xd4d5, 0xd4e2, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd4e1, 0xd4df, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbbce, 0xbfd1, 0x003f, 0xc1d4, 0xd4e3, - 0xc0bc, 0xb0ed, 0xc7e4, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4db, - 0x003f, 0xd4e5, 0xd4e4, 0xd4e6, 0xd4e7, 0xd4e8, 0x003f, 0x003f, - /* 0x5900 .. 0x59ff */ - 0x003f, 0x003f, 0xd4e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcad1, 0xd4ea, 0x003f, 0x003f, 0x003f, 0x003f, 0xb2c6, - 0xd4eb, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdbc, 0xb3b0, 0x003f, - 0xd2c9, 0xbdc8, 0xc2bf, 0xd4ec, 0xcceb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xccb4, 0x003f, 0x003f, 0xd4ee, 0x003f, 0xc2e7, - 0x003f, 0xc5b7, 0xc2c0, 0xc9d7, 0xd4ef, 0xd4f0, 0xb1fb, 0x003f, - 0x003f, 0xbcba, 0xd4f1, 0x003f, 0x003f, 0x003f, 0x003f, 0xb0d0, - 0xd4f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4f3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb1e2, 0x003f, 0x003f, 0xb4f1, - 0xc6e0, 0xcaf4, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4f7, 0xc1d5, - 0xd4f6, 0xb7c0, 0x003f, 0x003f, 0xcbdb, 0xd4f5, 0x003f, 0xc5e5, - 0xd4f9, 0x003f, 0xd4f8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4fb, 0x003f, 0xd4fa, 0x003f, 0x003f, 0xb1fc, 0x003f, 0xd4fc, - 0xbea9, 0xd4fe, 0xc3a5, 0x003f, 0xd4fd, 0x003f, 0xcab3, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbdf7, 0xc5db, 0x003f, 0x003f, 0x003f, - 0xd5a1, 0x003f, 0x003f, 0x003f, 0x003f, 0xb9a5, 0x003f, 0x003f, - 0x003f, 0xd5a2, 0xc7a1, 0xc8de, 0xccd1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc7a5, 0x003f, 0x003f, 0xd5ab, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb5b8, 0x003f, 0x003f, 0xcdc5, 0x003f, - 0x003f, 0xccaf, 0x003f, 0xd6ac, 0x003f, 0xd5a3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd5a6, 0x003f, 0xc2c5, 0x003f, 0x003f, - 0xcbb8, 0x003f, 0x003f, 0x003f, 0xc5ca, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcbe5, 0x003f, 0xbaca, 0x003f, 0x003f, 0xbeaa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5a8, 0x003f, - 0x003f, 0xbbd0, 0x003f, 0xbbcf, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb0b9, 0xb8c8, 0x003f, 0xc0ab, 0xb0d1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd5ac, 0xd5ad, 0x003f, 0xd5aa, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb1b8, 0xb4af, 0x003f, - 0xd5a9, 0x003f, 0xccc5, 0xc9b1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb0a8, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb0f9, 0x003f, 0x003f, 0x003f, 0xbbd1, - /* 0x5a00 .. 0x5aff */ - 0x003f, 0xb0d2, 0x003f, 0xb0a3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd5b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd5b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xccbc, 0x003f, 0xd5b3, 0x003f, 0xd5b1, 0x003f, 0x003f, 0xd5af, - 0xbfb1, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5ae, 0x003f, 0x003f, - 0x003f, 0xcada, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb8e4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5b7, 0xd5b8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbeab, 0x003f, 0x003f, 0x003f, - 0xd5b4, 0xcfac, 0x003f, 0x003f, 0x003f, 0x003f, 0xc7cc, 0x003f, - 0x003f, 0xd5b6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbaa7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5b9, 0x003f, 0x003f, 0x003f, 0xc9d8, 0x003f, - 0x003f, 0x003f, 0xd5ba, 0x003f, 0xd5b5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xccbb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc7de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5bb, 0xc9b2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd5bc, 0xd5c0, 0xd5bd, 0x003f, - 0x003f, 0xb2c7, 0xd5bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbcbb, 0x003f, 0xd5be, 0xb7f9, 0x003f, 0x003f, 0x003f, - 0xd5cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5c5, 0xd5c2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc3e4, 0x003f, 0xd5c1, 0x003f, 0x003f, 0xd5c3, 0x003f, - 0x003f, 0xd5c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5c6, 0xd5c7, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5b00 .. 0x5bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb4f2, 0x003f, 0xd5c9, 0xd5c8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5ca, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbeee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5cd, 0x003f, 0xc4dc, 0x003f, 0x003f, 0x003f, - 0xb1c5, 0x003f, 0xd5cb, 0x003f, 0x003f, 0x003f, 0xd5ce, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5cf, 0x003f, - 0xd5d2, 0x003f, 0x003f, 0xd5d0, 0x003f, 0xd5d1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbbd2, 0xd5d3, 0x003f, 0x003f, 0xb9a6, 0xd5d4, 0x003f, 0xbbfa, - 0xc2b8, 0x003f, 0xd5d5, 0xd5d6, 0xbbda, 0xb9a7, 0x003f, 0xccd2, - 0x003f, 0x003f, 0x003f, 0xb5a8, 0xb8c9, 0xd5d7, 0xb3d8, 0x003f, - 0x003f, 0xd5d8, 0x003f, 0xc2b9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd5d9, 0xd6a3, 0x003f, 0xd5da, 0x003f, 0xd5db, 0x003f, 0x003f, - 0xd5dc, 0x003f, 0xd5de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd5df, 0x003f, 0x003f, 0xd5e0, 0x003f, 0xc2f0, 0x003f, 0xb1a7, - 0xbce9, 0xb0c2, 0x003f, 0xc1d7, 0xb4b0, 0xbcb5, 0x003f, 0xb9a8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5e6, 0x003f, 0xbda1, - 0xb4b1, 0xc3e8, 0xc4ea, 0xb0b8, 0xb5b9, 0xcaf5, 0x003f, 0xbcc2, - 0x003f, 0x003f, 0xb5d2, 0xc0eb, 0xbcbc, 0xcda8, 0xd5e1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb5dc, 0x003f, - 0xbacb, 0x003f, 0x003f, 0xb3b2, 0xb1e3, 0xbeac, 0xb2c8, 0x003f, - 0xd5e2, 0xcdc6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbdc9, - 0x003f, 0x003f, 0xbce4, 0xd5e3, 0xb4f3, 0xc6d2, 0xcca9, 0xd5e4, - 0x003f, 0xd5e5, 0x003f, 0x003f, 0xc9d9, 0x003f, 0x003f, 0x003f, - 0xd5e7, 0x003f, 0xb4a8, 0xb6f7, 0xd5e6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb4b2, 0x003f, 0xbfb2, 0xd5eb, 0xbba1, - 0x003f, 0xb2c9, 0xd5ea, 0x003f, 0xd5e8, 0xd5ec, 0xd5e9, 0xc7ab, - 0xdccd, 0xbfb3, 0x003f, 0xd5ed, 0x003f, 0x003f, 0xcec0, 0x003f, - 0xd5ee, 0x003f, 0x003f, 0xd5f0, 0x003f, 0xc3fe, 0xd5ef, 0x003f, - 0xc0a3, 0x003f, 0xbbfb, 0x003f, 0x003f, 0x003f, 0xc2d0, 0xbcf7, - /* 0x5c00 .. 0x5cff */ - 0x003f, 0xc9f5, 0xc0ec, 0x003f, 0xbccd, 0xd5f1, 0xbead, 0xd5f2, - 0xd5f3, 0xb0d3, 0xc2ba, 0xbfd2, 0x003f, 0xd5f4, 0xc6b3, 0xbeae, - 0x003f, 0xbeaf, 0x003f, 0xd5f5, 0x003f, 0x003f, 0xc0ed, 0x003f, - 0x003f, 0x003f, 0xbeb0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd5f6, 0x003f, 0xd5f7, 0x003f, 0xcce0, 0x003f, 0x003f, 0x003f, - 0xd5f8, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6c6, 0x003f, 0x003f, - 0x003f, 0xbda2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd5f9, 0xd5fa, 0xbcdc, 0xbfac, 0xc6f4, 0xbfd4, 0xc8f8, 0xc7a2, - 0xb6c9, 0xd5fb, 0x003f, 0x003f, 0x003f, 0xb5ef, 0xd5fc, 0x003f, - 0xb6fe, 0x003f, 0xc6cf, 0xb2b0, 0x003f, 0xbbd3, 0xd5fd, 0xd6a2, - 0xd6a1, 0xb6fd, 0x003f, 0xd5fe, 0x003f, 0xc5b8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2b0, 0x003f, - 0xc5cb, 0xbcc8, 0x003f, 0x003f, 0xc1d8, 0xcdfa, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6a4, 0x003f, 0xd6a5, 0xc6d6, - 0x003f, 0xbbb3, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6a7, 0x003f, - 0x003f, 0xd6a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6a9, 0x003f, 0x003f, 0x003f, - 0xb4f4, 0xd6aa, 0x003f, 0x003f, 0xd6ab, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb2ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc1bb, 0xb4e4, 0x003f, 0xd6ad, 0xcca8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc2d2, 0x003f, 0xb3d9, 0x003f, 0x003f, 0xd6af, 0xd6b1, - 0xb4df, 0x003f, 0x003f, 0xd6ae, 0xd6b0, 0x003f, 0xd6b3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6b2, 0x003f, 0xd6b4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd6b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc6bd, 0xb6ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb2e5, 0xd6b6, 0xd6bb, 0x003f, 0x003f, 0xd6b9, 0x003f, 0xcaf7, - 0xcaf6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5e7, 0x003f, - 0x003f, 0x003f, 0xd6b8, 0xbdd4, 0x003f, 0xd6b7, 0x003f, 0x003f, - /* 0x5d00 .. 0x5dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbff2, - 0x003f, 0x003f, 0x003f, 0xd6bc, 0x003f, 0x003f, 0xbaea, 0x003f, - 0x003f, 0xd6c2, 0x003f, 0x003f, 0xd6c3, 0xd6bd, 0xb3b3, 0xd6be, - 0xd6c7, 0xd6c6, 0xd6c5, 0xd6c1, 0x003f, 0x003f, 0x003f, 0xd6c0, - 0x003f, 0x003f, 0xd6c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcaf8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd6cb, 0xd6c8, 0x003f, 0xd6ca, 0x003f, - 0xcdf2, 0x003f, 0xd6c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6bf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbff3, 0x003f, 0x003f, 0xd6cc, 0x003f, 0x003f, 0xbab7, - 0x003f, 0x003f, 0x003f, 0xd6cd, 0x003f, 0x003f, 0xd6ce, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd6d1, 0x003f, 0xd6d0, 0x003f, 0x003f, 0xd6cf, - 0x003f, 0x003f, 0x003f, 0xc5e8, 0xd6ba, 0x003f, 0x003f, 0x003f, - 0xd6d7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6d3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd6d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6d4, 0x003f, 0xd6d5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6d8, - 0x003f, 0x003f, 0xcee6, 0x003f, 0xd6d9, 0xd6d6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd6da, 0x003f, 0x003f, 0xb4e0, 0xd6db, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd6dd, 0xd6dc, 0x003f, 0x003f, 0xd6de, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd6df, 0x003f, 0xc0ee, 0xbda3, 0x003f, - 0x003f, 0xbde4, 0x003f, 0xc1e3, 0x003f, 0xb9a9, 0xbab8, 0xb9aa, - 0xb5f0, 0x003f, 0x003f, 0xd6e0, 0x003f, 0x003f, 0xbab9, 0x003f, - 0x003f, 0xb8ca, 0xd6e1, 0xcca6, 0xc7c3, 0xd6e2, 0x003f, 0xb9ab, - 0x003f, 0x003f, 0x003f, 0xb4ac, 0x003f, 0xc3a7, 0xb6d2, 0x003f, - /* 0x5e00 .. 0x5eff */ - 0x003f, 0x003f, 0xbbd4, 0xc9db, 0x003f, 0x003f, 0xc8c1, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd6e3, 0xb4f5, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd6e6, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4a1, 0x003f, - 0x003f, 0xd6e5, 0xd6e4, 0xd6e7, 0x003f, 0xc4eb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbfe3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbbd5, 0x003f, 0xc0ca, 0x003f, 0xc2d3, - 0xb5a2, 0x003f, 0x003f, 0xc4a2, 0x003f, 0x003f, 0xd6e8, 0xd6e9, - 0xbeef, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbb9, 0x003f, 0x003f, - 0xd6ec, 0x003f, 0x003f, 0xd6eb, 0xd6ea, 0xc9fd, 0x003f, 0xd6f3, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcbda, 0x003f, 0xd6ed, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6ef, 0xcbeb, 0x003f, 0xd6ee, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6f0, - 0x003f, 0xc8a8, 0xd6f1, 0xcabe, 0xd6f2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb4b3, 0xcabf, 0xc7af, 0xd6f4, 0xd6f5, 0x003f, - 0xb9ac, 0xb4b4, 0xd6f6, 0xb8b8, 0xcdc4, 0xcda9, 0xb4f6, 0xd6f8, - 0x003f, 0xc4a3, 0x003f, 0xb9ad, 0xbeb1, 0x003f, 0x003f, 0xc8df, - 0x003f, 0x003f, 0xbeb2, 0x003f, 0x003f, 0x003f, 0x003f, 0xbdf8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4ec, 0xcaf9, 0xc5b9, - 0x003f, 0x003f, 0xb9ae, 0x003f, 0xc9dc, 0x003f, 0x003f, 0x003f, - 0xd6f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5d9, 0xbac2, - 0x003f, 0x003f, 0x003f, 0xb8cb, 0x003f, 0xc4ed, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb0c3, 0xbdee, 0xb9af, - 0xcdc7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd6fa, 0xd6fb, 0xc7d1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd6fc, 0xcef7, 0xcfad, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6fe, - 0xd6fd, 0x003f, 0x003f, 0xb3c7, 0x003f, 0x003f, 0xd7a1, 0x003f, - 0x003f, 0x003f, 0xd7a4, 0xd7a5, 0x003f, 0xd7a3, 0x003f, 0xc9c0, - 0xbeb3, 0xd7a7, 0xd7a6, 0xd7a2, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd7a8, 0xd7a9, 0x003f, 0x003f, 0xd7aa, 0x003f, 0x003f, 0x003f, - 0xd7ad, 0xd7ab, 0x003f, 0xd7ac, 0xd7ae, 0x003f, 0xb1e4, 0xc4ee, - 0xd7af, 0x003f, 0xb7fa, 0xb2f6, 0xc7b6, 0x003f, 0xd7b0, 0xc6fb, - /* 0x5f00 .. 0x5fff */ - 0x003f, 0xcadb, 0x003f, 0xd7b1, 0xcfae, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd7b2, 0xcac0, 0xd7b5, 0xd0a1, 0xd0b1, 0x003f, 0xbcb0, - 0xc6f5, 0xd7b6, 0x003f, 0xb5dd, 0xc4a4, 0xb0fa, 0xd7b7, 0xcaa6, - 0xb9b0, 0x003f, 0x003f, 0xc3d0, 0x003f, 0x003f, 0x003f, 0xc4ef, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xccef, 0xb8b9, 0xb8cc, - 0x003f, 0xd7b8, 0x003f, 0x003f, 0x003f, 0xd7b9, 0x003f, 0xd7bf, - 0x003f, 0xbce5, 0x003f, 0x003f, 0x003f, 0xc4a5, 0x003f, 0xb6af, - 0xd7ba, 0x003f, 0x003f, 0x003f, 0xc9ab, 0x003f, 0xc3c6, 0x003f, - 0x003f, 0xd7bb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd7bc, 0x003f, 0xb6b0, 0x003f, 0xd7bd, 0x003f, 0xd7be, 0x003f, - 0x003f, 0xd7c0, 0x003f, 0xc5f6, 0x003f, 0x003f, 0xd7c1, 0xd7c2, - 0x003f, 0xd7c3, 0x003f, 0x003f, 0xd7b4, 0xd7b3, 0x003f, 0x003f, - 0x003f, 0xd7c4, 0xb7c1, 0x003f, 0x003f, 0x003f, 0xc9a7, 0x003f, - 0x003f, 0xbacc, 0xc9b7, 0xc4a6, 0xc9cb, 0xd7c5, 0x003f, 0x003f, - 0xbeb4, 0xb1c6, 0x003f, 0xd7c6, 0x003f, 0x003f, 0x003f, 0xd7c7, - 0x003f, 0xccf2, 0x003f, 0x003f, 0xc8e0, 0x003f, 0x003f, 0xd7ca, - 0xb1fd, 0xc0ac, 0xd7c9, 0xd7c8, 0xb7c2, 0xc2d4, 0x003f, 0xd7ce, - 0xd7cc, 0x003f, 0xd7cb, 0xcea7, 0xb8e5, 0x003f, 0x003f, 0x003f, - 0xbdf9, 0xd7cd, 0xc5cc, 0xbdbe, 0x003f, 0x003f, 0x003f, 0xc6c0, - 0xd7d1, 0xd7d0, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7cf, 0x003f, - 0xd7d2, 0xb8e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd7d3, 0xc9fc, 0xbddb, 0x003f, 0x003f, 0xd7d4, 0xc8f9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc6c1, 0xc4a7, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc5b0, 0x003f, 0x003f, 0xd7d5, 0xb5ab, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbfb4, 0x003f, 0xc9ac, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb4f7, 0xc7a6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7d6, 0xbbd6, - 0xcbba, 0xcbbb, 0x003f, 0x003f, 0xb1fe, 0xd7db, 0x003f, 0x003f, - 0xc3e9, 0x003f, 0x003f, 0x003f, 0xd7d8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb2f7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd8ad, 0xd7da, 0x003f, 0x003f, 0x003f, 0xc7b0, 0x003f, 0x003f, - 0xd7d9, 0x003f, 0x003f, 0xd7d7, 0x003f, 0xb9fa, 0x003f, 0xd7dd, - /* 0x6000 .. 0x60ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7e3, 0xd7e9, - 0xd7e1, 0x003f, 0xc5dc, 0x003f, 0x003f, 0xd7e6, 0xc9dd, 0x003f, - 0x003f, 0xd7e0, 0x003f, 0xd7e5, 0xcee7, 0xbbd7, 0x003f, 0x003f, - 0xc2d5, 0xd7de, 0x003f, 0x003f, 0x003f, 0xb5de, 0xd7e8, 0xc0ad, - 0xb1e5, 0xd7e2, 0xb2f8, 0xd7e7, 0x003f, 0x003f, 0x003f, 0xb6b1, - 0x003f, 0xd7e4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd7ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd7ec, 0xd7f6, 0xd7f4, 0x003f, 0x003f, 0xd7f1, 0x003f, - 0x003f, 0x003f, 0xd7f0, 0xcef8, 0x003f, 0xd7f2, 0x003f, 0x003f, - 0xb6b2, 0x003f, 0xb9b1, 0x003f, 0x003f, 0xbdfa, 0x003f, 0x003f, - 0x003f, 0xd7f9, 0xd7eb, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7ef, - 0xd7df, 0x003f, 0xb2fa, 0xd7f3, 0xd7f5, 0xc3d1, 0x003f, 0x003f, - 0xbaa8, 0xb2b8, 0xd7ed, 0xd7f8, 0xd7f7, 0xb6b3, 0x003f, 0xc2a9, - 0xb3e6, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7c3, 0x003f, 0xd7ee, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd7fa, 0x003f, 0xd7fd, 0xd8a1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbcbd, 0x003f, 0xd8a7, 0xc4f0, 0xd7fb, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd8a5, 0x003f, 0xb2f9, 0x003f, 0xd8a3, 0xd8a4, - 0x003f, 0x003f, 0xd7fe, 0xd8a2, 0x003f, 0x003f, 0x003f, 0xb8e7, - 0xcdaa, 0x003f, 0x003f, 0xb4b5, 0x003f, 0x003f, 0xb1d9, 0xd8a6, - 0x003f, 0xc7ba, 0xb0ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc8e1, 0xd7dc, 0xd8ac, 0xd8b0, 0xcce5, 0x003f, - 0xd8a9, 0x003f, 0x003f, 0x003f, 0xc5e9, 0xd8ae, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbef0, 0xd8af, 0xc6d7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcfc7, 0x003f, 0xd8ab, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd8b1, 0x003f, 0xb9fb, 0x003f, 0xc0cb, 0x003f, 0x003f, 0xb0d4, - 0xd8aa, 0xd8a8, 0x003f, 0xc1da, 0x003f, 0x003f, 0x003f, 0xd7fc, - 0xbbb4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc2c6, 0xd8bd, 0x003f, 0xc1db, 0xd8b8, 0x003f, 0xd8b5, 0xd8b6, - 0x003f, 0xbce6, 0xd8b9, 0xd8bc, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6100 .. 0x61ff */ - 0xd8b7, 0xbda5, 0x003f, 0xd8ba, 0x003f, 0x003f, 0xd8b4, 0x003f, - 0xccfc, 0xccfb, 0x003f, 0x003f, 0x003f, 0xd8be, 0xd8bf, 0xb0d5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8b3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb6f2, 0xb0a6, 0x003f, 0x003f, 0x003f, 0xb4b6, - 0x003f, 0xd8bb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8c3, - 0xd8c2, 0x003f, 0x003f, 0x003f, 0xd8c7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd8c8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd8c6, 0xd8c9, 0xd8c1, 0xd8c5, - 0x003f, 0x003f, 0xd8ca, 0x003f, 0xd8cb, 0x003f, 0x003f, 0xd8c0, - 0xbbfc, 0x003f, 0xd8c4, 0xc2d6, 0xb9b2, 0xd8b2, 0xbfb5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8d8, 0x003f, 0xcae9, 0x003f, 0x003f, - 0xd8ce, 0xd8cf, 0xd8d0, 0x003f, 0x003f, 0xd8d7, 0x003f, 0xd8d6, - 0x003f, 0x003f, 0xcbfd, 0xb4b7, 0x003f, 0xd8d4, 0x003f, 0xb7c5, - 0xb3b4, 0x003f, 0x003f, 0xd8d1, 0x003f, 0x003f, 0xceb8, 0xd8d3, - 0xb0d6, 0xd8d5, 0x003f, 0xd8cc, 0xd8d2, 0xd8d9, 0xb7c4, 0xd8cd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcddd, 0x003f, - 0x003f, 0x003f, 0xcdab, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8dc, - 0x003f, 0x003f, 0xd8e0, 0x003f, 0x003f, 0x003f, 0xc1fe, 0x003f, - 0xcef9, 0xd8e1, 0x003f, 0x003f, 0xd8de, 0x003f, 0xd8db, 0x003f, - 0x003f, 0xd8da, 0xd8df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcab0, 0x003f, 0x003f, 0xc6b4, - 0x003f, 0xb7c6, 0x003f, 0xd8e2, 0xd8dd, 0x003f, 0xd8e3, 0x003f, - 0x003f, 0x003f, 0xb7fb, 0x003f, 0x003f, 0x003f, 0xb2b1, 0x003f, - 0x003f, 0x003f, 0xd8eb, 0x003f, 0x003f, 0x003f, 0xb4b8, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8e9, 0x003f, 0x003f, 0xd8ea, 0xbaa9, - 0xd8e8, 0xd8e6, 0xd8e5, 0xd8ec, 0xd8e4, 0xd8ee, 0x003f, 0x003f, - 0xb2fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8f0, 0x003f, 0x003f, 0xd8ef, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc4a8, 0x003f, 0xd8f3, 0x003f, 0xd8f1, 0xd8e7, - 0xb7fc, 0x003f, 0xd8f2, 0x003f, 0xd8f6, 0xd8f5, 0xd8f7, 0xd8f4, - /* 0x6200 .. 0x62ff */ - 0xd8f8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd8f9, 0xd8fa, 0xcaea, 0x003f, 0xd8fc, 0xd8fb, 0xbdbf, 0x003f, - 0xc0ae, 0xb2e6, 0xb2fc, 0x003f, 0xd8fd, 0x003f, 0xb0bf, 0x003f, - 0x003f, 0x003f, 0xc0cc, 0xd8fe, 0x003f, 0xecc3, 0xd9a1, 0xb7e1, - 0x003f, 0xd9a2, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0ef, 0x003f, - 0x003f, 0x003f, 0xd9a3, 0x003f, 0x003f, 0x003f, 0xd9a4, 0xb5ba, - 0xd9a5, 0x003f, 0xd9a6, 0xd9a7, 0xc2d7, 0x003f, 0x003f, 0x003f, - 0xb8cd, 0x003f, 0x003f, 0xcce1, 0x003f, 0x003f, 0x003f, 0xcbbc, - 0xbdea, 0xd9a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0f0, - 0xeebd, 0xc8e2, 0x003f, 0xbcea, 0x003f, 0xbacd, 0xd9a9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc2c7, 0x003f, 0xcaa7, 0x003f, 0x003f, - 0xc2f1, 0x003f, 0x003f, 0xd9ac, 0x003f, 0x003f, 0xd9aa, 0x003f, - 0xd9ad, 0x003f, 0x003f, 0xd9ab, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd9ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcab1, 0x003f, - 0x003f, 0xb0b7, 0x003f, 0x003f, 0x003f, 0x003f, 0xc9de, 0x003f, - 0x003f, 0xc8e3, 0x003f, 0x003f, 0xd9af, 0x003f, 0xd9b2, 0xbeb5, - 0xb5bb, 0x003f, 0xd9b0, 0xd9b7, 0xbeb6, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd9b1, 0xc7c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdde, 0xd9b3, 0xd9b4, 0xd9b8, 0xc5ea, 0xd9b5, 0xb9b3, - 0xc0de, 0x003f, 0x003f, 0xd9c6, 0xc8b4, 0x003f, 0xc2f2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc8e4, 0xdaad, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcafa, 0x003f, 0x003f, 0x003f, 0xc4f1, 0x003f, 0x003f, - 0x003f, 0xcbf5, 0x003f, 0xd9bb, 0xb2a1, 0xc3ea, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd9c4, 0x003f, 0x003f, 0xc3b4, 0xd9be, 0xd9c5, - 0xd9c0, 0xd9c7, 0xd9c3, 0x003f, 0xd9c2, 0xc7ef, 0x003f, 0xd9bc, - 0xb2fd, 0xd9ba, 0xb5f1, 0xc2f3, 0xd9b6, 0x003f, 0x003f, 0xd9b9, - 0xb9b4, 0xc0db, 0x003f, 0xbeb7, 0xd9c1, 0xc7d2, 0x003f, 0x003f, - 0xb5f2, 0xb3c8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb3e7, 0xbfa1, 0xd9c9, 0xd9ce, - 0x003f, 0xd9ca, 0x003f, 0xb7fd, 0x003f, 0xd9cf, 0xbba2, 0xb9e9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbda6, 0xd9bd, - /* 0x6300 .. 0x63ff */ - 0x003f, 0xbbfd, 0xd9cc, 0x003f, 0x003f, 0x003f, 0x003f, 0xbbd8, - 0xd9cd, 0xb0c4, 0x003f, 0x003f, 0xd9c8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc4a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb5f3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6b4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9cb, - 0xb0a7, 0x003f, 0x003f, 0xbac3, 0x003f, 0x003f, 0x003f, 0xbfb6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc4f2, 0x003f, 0x003f, 0xc8d4, 0xd9d1, 0xc1de, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc2aa, 0x003f, 0x003f, 0xbbab, 0xd9d2, 0x003f, 0xd9d4, - 0xd9d0, 0x003f, 0x003f, 0x003f, 0x003f, 0xcae1, 0x003f, 0xc4bd, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc1dc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcafb, - 0xbcce, 0xd9e0, 0x003f, 0xd9df, 0x003f, 0x003f, 0xbff8, 0x003f, - 0x003f, 0x003f, 0xb7fe, 0x003f, 0x003f, 0x003f, 0xd9d9, 0xbeb9, - 0x003f, 0x003f, 0xc6e8, 0xc7b1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd9d7, 0x003f, 0x003f, 0xc1dd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbcf8, 0xd9dc, 0x003f, 0x003f, 0xbeb8, 0x003f, 0xd9d6, 0xd9db, - 0x003f, 0x003f, 0xc7d3, 0x003f, 0x003f, 0x003f, 0xd9d5, 0x003f, - 0xb7a1, 0x003f, 0x003f, 0xb3dd, 0x003f, 0x003f, 0x003f, 0xd9dd, - 0xceab, 0xbace, 0xc3b5, 0xd9da, 0x003f, 0xc0dc, 0x003f, 0xb9b5, - 0xbfe4, 0xb1e6, 0xc1bc, 0xd9d8, 0xb5c5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb7c7, 0x003f, 0xc4cf, 0xd9de, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc1df, 0x003f, 0x003f, 0xd9e1, 0x003f, - 0xd9e3, 0x003f, 0x003f, 0xc2b7, 0xd9e9, 0x003f, 0xd9e4, 0x003f, - 0x003f, 0xd9e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc9c1, - 0xc4f3, 0x003f, 0xd9e7, 0x003f, 0x003f, 0x003f, 0xcdac, 0x003f, - 0x003f, 0x003f, 0xcdc8, 0xb4b9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb0ae, 0x003f, 0xd9e5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd9e2, 0x003f, 0x003f, 0x003f, 0x003f, 0xb4f8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb1e7, 0x003f, 0xd9e8, 0x003f, - 0x003f, 0x003f, 0xcdc9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6400 .. 0x64ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9ec, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2bb, 0x003f, 0xd9f3, - 0x003f, 0x003f, 0x003f, 0xd9ed, 0x003f, 0x003f, 0xd9ea, 0xd9f1, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd9d3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9ee, 0x003f, - 0xd9f2, 0x003f, 0x003f, 0x003f, 0xc8c2, 0xc5eb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd9eb, 0x003f, 0xd9ef, 0x003f, - 0x003f, 0x003f, 0xb7c8, 0x003f, 0x003f, 0x003f, 0xbaf1, 0x003f, - 0x003f, 0x003f, 0xc0dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9f7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc5a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9f4, - 0x003f, 0xcbe0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9f5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9f6, 0x003f, - 0xccce, 0x003f, 0xc0a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb7e2, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd9fd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbbb5, 0xd9fa, 0x003f, 0xd9f9, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc7b2, 0x003f, 0x003f, 0x003f, 0xc6b5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc5b1, 0xd9fb, 0x003f, 0x003f, - 0x003f, 0xd9fc, 0x003f, 0xc9ef, 0x003f, 0xc7c5, 0xbba3, 0x003f, - 0xc0f1, 0x003f, 0xcbd0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3c9, 0x003f, 0xdaa5, 0xd9fe, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdca, 0xdaa7, 0x003f, 0x003f, 0xdaa3, 0x003f, 0xdaa4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc1e0, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdaa2, 0x003f, 0xd9bf, 0x003f, 0x003f, 0x003f, - 0xdaa6, 0x003f, 0xdaa1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdaab, 0xdaac, 0xc5a7, 0xdaae, 0x003f, 0x003f, 0xbba4, 0xdaa9, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb5bc, 0x003f, 0x003f, 0xdaaf, - 0x003f, 0xdaa8, 0xdab3, 0x003f, 0xdab2, 0x003f, 0xdab1, 0x003f, - 0x003f, 0x003f, 0xdab4, 0x003f, 0x003f, 0xdab6, 0xbef1, 0x003f, - /* 0x6500 .. 0x65ff */ - 0xdab5, 0x003f, 0x003f, 0x003f, 0x003f, 0xdab9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdab7, 0x003f, 0x003f, 0x003f, 0xdab8, 0xd9f0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdabb, 0xdaba, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd9f8, 0xdabc, 0xdab0, 0x003f, 0x003f, 0xbbd9, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdabd, 0xdabe, 0xdac0, 0xdabf, - 0xdac1, 0xb2fe, 0x003f, 0xb9b6, 0x003f, 0x003f, 0xcafc, 0xc0af, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb8ce, 0x003f, 0x003f, - 0xdac3, 0x003f, 0x003f, 0x003f, 0x003f, 0xdac6, 0x003f, 0xc9d2, - 0x003f, 0xb5df, 0x003f, 0x003f, 0x003f, 0xdac5, 0xdac4, 0xc7d4, - 0xdac7, 0xb6b5, 0x003f, 0x003f, 0x003f, 0xdac9, 0xdac8, 0x003f, - 0x003f, 0x003f, 0xb4ba, 0xbbb6, 0x003f, 0x003f, 0xc6d8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb7c9, 0x003f, 0x003f, 0x003f, - 0xbff4, 0x003f, 0xdaca, 0x003f, 0xc0b0, 0xc5a8, 0x003f, 0xc9df, - 0xdacb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdacc, 0xdacd, 0x003f, 0x003f, 0x003f, 0xcab8, - 0xd5dd, 0xc0c6, 0x003f, 0x003f, 0xc9cc, 0x003f, 0xbad8, 0x003f, - 0xc8e5, 0xc8c3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5cd, - 0x003f, 0xcec1, 0x003f, 0xdacf, 0xbcd0, 0x003f, 0x003f, 0xdad0, - 0x003f, 0xb0b6, 0x003f, 0x003f, 0xb6d4, 0xc0cd, 0x003f, 0xc9e0, - 0x003f, 0x003f, 0x003f, 0xdad1, 0xbbc2, 0xc3c7, 0x003f, 0xbbdb, - 0xbfb7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdad2, - 0x003f, 0xcafd, 0x003f, 0x003f, 0xb1f7, 0xbbdc, 0x003f, 0x003f, - 0x003f, 0xdad5, 0x003f, 0xdad3, 0xdad6, 0xceb9, 0xdad4, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc0fb, 0xdad7, 0x003f, 0x003f, 0xc2b2, - 0x003f, 0x003f, 0xdad8, 0x003f, 0x003f, 0x003f, 0x003f, 0xb4fa, - 0x003f, 0xdada, 0x003f, 0xdad9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdadb, 0xdadc, 0xb4fb, 0x003f, 0x003f, 0xc6fc, 0xc3b6, 0xb5ec, - 0xbbdd, 0xc1e1, 0x003f, 0x003f, 0xbddc, 0xb0b0, 0x003f, 0x003f, - 0x003f, 0xdadd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb2a2, 0xdae1, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6600 .. 0x66ff */ - 0x003f, 0x003f, 0xb9b7, 0xdae0, 0x003f, 0x003f, 0xbaab, 0xbeba, - 0x003f, 0x003f, 0xdadf, 0x003f, 0xbebb, 0x003f, 0xccc0, 0xbaaa, - 0x003f, 0x003f, 0x003f, 0xb0d7, 0xc0ce, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdae6, 0x003f, 0x003f, 0xc0b1, - 0xb1c7, 0x003f, 0x003f, 0x003f, 0x003f, 0xbdd5, 0x003f, 0xcbe6, - 0xbaf2, 0x003f, 0x003f, 0x003f, 0x003f, 0xbebc, 0x003f, 0xc0a7, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdae5, 0xdae3, 0xdae4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc3eb, 0x003f, 0x003f, 0xdba6, - 0x003f, 0xdaea, 0xbbfe, 0xb9b8, 0xdae8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdae9, 0x003f, 0xbfb8, 0x003f, 0x003f, 0x003f, 0xdae7, - 0x003f, 0x003f, 0xbbaf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdaec, 0xdaeb, 0xdaf0, - 0x003f, 0x003f, 0xdaf1, 0x003f, 0xdaed, 0x003f, 0xb3a2, 0xdaee, - 0xdaef, 0xc8d5, 0x003f, 0x003f, 0x003f, 0x003f, 0xc9e1, 0xb7ca, - 0xdaf2, 0x003f, 0x003f, 0x003f, 0xc0b2, 0x003f, 0xbebd, 0x003f, - 0x003f, 0x003f, 0xc3d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb6c7, 0x003f, 0xdaf3, 0xdaf7, 0x003f, 0x003f, 0xb2cb, - 0xdaf4, 0xdaf6, 0x003f, 0x003f, 0x003f, 0x003f, 0xdaf5, 0x003f, - 0x003f, 0xbdeb, 0x003f, 0x003f, 0x003f, 0x003f, 0xc3c8, 0xb0c5, - 0xdaf8, 0x003f, 0x003f, 0x003f, 0x003f, 0xdaf9, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc4aa, 0x003f, 0x003f, 0x003f, 0xcef1, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbbc3, 0x003f, 0x003f, 0xcaeb, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcbbd, 0x003f, 0x003f, 0x003f, - 0xdba2, 0xdafb, 0x003f, 0x003f, 0xdafe, 0x003f, 0xdafd, 0x003f, - 0x003f, 0xdafa, 0x003f, 0x003f, 0xdba1, 0x003f, 0x003f, 0xc6de, - 0x003f, 0xdafc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdba3, 0x003f, - 0x003f, 0xbdec, 0xdba4, 0x003f, 0xcdcb, 0xc7f8, 0x003f, 0x003f, - 0xdba5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdba7, 0x003f, - 0x003f, 0xdba8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdba9, 0x003f, 0xb6ca, 0xb1c8, 0xb9b9, 0xdbaa, 0x003f, 0xdbab, - 0xbdf1, 0xc1e2, 0x003f, 0x003f, 0xd2d8, 0xc1be, 0xc1bd, 0xc2d8, - /* 0x6700 .. 0x67ff */ - 0xbac7, 0x003f, 0x003f, 0xd0f2, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb7ee, 0xcdad, 0x003f, 0xcafe, 0x003f, 0xc9fe, 0x003f, 0xdbac, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbaf3, 0xc4bf, 0xdbad, 0xcfaf, - 0x003f, 0x003f, 0x003f, 0xcbbe, 0x003f, 0xc4ab, 0xdbae, 0xb4fc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbaf, 0xdbb0, - 0xccda, 0x003f, 0xcca4, 0xcbf6, 0xcbdc, 0xbba5, 0xdbb2, 0x003f, - 0x003f, 0xbceb, 0x003f, 0x003f, 0xcbd1, 0x003f, 0xdbb4, 0xdbb7, - 0xdbb6, 0x003f, 0xb4f9, 0x003f, 0x003f, 0xb5e0, 0x003f, 0xdbb3, - 0x003f, 0xdbb5, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbb8, 0x003f, - 0x003f, 0xbff9, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdfb, 0xb0c9, - 0xbae0, 0xc2bc, 0x003f, 0xbcdd, 0x003f, 0x003f, 0xbef3, 0x003f, - 0x003f, 0xdbbb, 0x003f, 0x003f, 0xc5ce, 0x003f, 0xdbb9, 0xc2ab, - 0xdbba, 0xbef2, 0xccdd, 0xdbbc, 0xdbbd, 0xcde8, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdbc2, 0x003f, 0x003f, 0xb9ba, 0x003f, 0xc7d5, - 0xdbbf, 0xc5ec, 0xdade, 0xdae2, 0x003f, 0xb5cf, 0x003f, 0xc7c7, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdbc1, 0x003f, 0xbebe, 0xc8c4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbc7, 0x003f, 0xc8fa, - 0x003f, 0xdbbe, 0x003f, 0xdbc4, 0xdbc3, 0x003f, 0x003f, 0x003f, - 0xc0cf, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbed, 0x003f, 0xced3, - 0x003f, 0x003f, 0xcbe7, 0x003f, 0xb2cc, 0xbbde, 0x003f, 0x003f, - 0xcfc8, 0xdbc6, 0xbff5, 0x003f, 0x003f, 0x003f, 0xdbc5, 0x003f, - 0x003f, 0xdbc0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb8cf, - 0x003f, 0x003f, 0x003f, 0xdbcc, 0xdbca, 0x003f, 0xb2cd, 0xdbc8, - 0xdbce, 0xdbd4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc2c8, 0x003f, 0x003f, 0xcac1, 0x003f, 0xdbd6, 0x003f, - 0x003f, 0x003f, 0xc9a2, 0x003f, 0x003f, 0x003f, 0xdbd5, 0xc7f0, - 0xcbbf, 0xb4bb, 0x003f, 0xc0f7, 0xbdc0, 0x003f, 0x003f, 0x003f, - 0xc4d3, 0x003f, 0xcdae, 0x003f, 0x003f, 0xdbd1, 0xdbd0, 0x003f, - 0x003f, 0x003f, 0xdbd2, 0x003f, 0xdbcf, 0x003f, 0x003f, 0xdbd7, - 0x003f, 0xdbcd, 0x003f, 0x003f, 0xdbcb, 0x003f, 0xdbd3, 0xdbc9, - 0x003f, 0xc3ec, 0x003f, 0xccf8, 0xbcc6, 0xbaf4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbaba, 0x003f, 0x003f, 0xcbef, 0xb3c1, - /* 0x6800 .. 0x68ff */ - 0x003f, 0x003f, 0xc4ce, 0xc6ca, 0xb1c9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc0f2, 0x003f, 0x003f, 0xc0b4, 0xb7aa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbd9, 0x003f, - 0x003f, 0xb9bb, 0xb3fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdbdb, 0xb3f4, 0xdbe1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdbde, 0x003f, 0xc0f3, 0x003f, 0x003f, 0x003f, - 0xb3cb, 0xbaac, 0x003f, 0x003f, 0xb3ca, 0xbacf, 0x003f, 0x003f, - 0xdbdc, 0xb7e5, 0xb7cb, 0xc5ed, 0x003f, 0x003f, 0xdbda, 0x003f, - 0xb0c6, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbdd, 0xdbdf, 0x003f, - 0xb6cd, 0xb7ac, 0x003f, 0xb4bc, 0xb5cb, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdbe2, 0x003f, 0x003f, 0xbaf9, 0xcbf1, 0x003f, 0xbbb7, - 0x003f, 0x003f, 0x003f, 0xdbe3, 0x003f, 0x003f, 0x003f, 0xc9b0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdbef, 0x003f, 0xb2b3, 0xdbe4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbf5, 0xdbe5, - 0x003f, 0xcec2, 0x003f, 0xdbec, 0x003f, 0xc7df, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbf4, 0x003f, 0xdbe7, - 0x003f, 0x003f, 0x003f, 0xb0b4, 0xdbe9, 0x003f, 0x003f, 0xb9bc, - 0x003f, 0x003f, 0x003f, 0xdbeb, 0x003f, 0xdbea, 0x003f, 0xdbe6, - 0xdbf1, 0x003f, 0xbebf, 0x003f, 0x003f, 0x003f, 0xd4ed, 0xb8e8, - 0xcdfc, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbe8, 0x003f, 0xc4f4, - 0xb3a3, 0xbaad, 0x003f, 0xdbe0, 0x003f, 0xdbf0, 0xb3e1, 0x003f, - 0x003f, 0xdbee, 0xdbf2, 0x003f, 0xc5ee, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb4fe, 0x003f, 0xdcb2, 0x003f, - 0x003f, 0xccc9, 0xdbf7, 0xb4fd, 0x003f, 0xdbfe, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcbc0, 0x003f, 0xdca1, 0xdca3, 0x003f, 0xdca7, - 0xdbf9, 0x003f, 0xc3aa, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5ef, - 0xdcab, 0xdbfc, 0x003f, 0xdca8, 0x003f, 0x003f, 0x003f, 0xdca2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbfb9, 0xdcac, - 0x003f, 0x003f, 0xc0b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdcaa, 0xb4bd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6900 .. 0x69ff */ - 0xcfd0, 0xdbf6, 0x003f, 0x003f, 0xdca6, 0xb0d8, 0x003f, 0x003f, - 0xdbf8, 0x003f, 0x003f, 0xccba, 0xdbfd, 0xbfa2, 0xc4c7, 0xdbf3, - 0x003f, 0x003f, 0xdca5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbffa, 0xdcaf, 0xb3f1, 0xb8a1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdcb1, 0xdbfa, 0xdcb0, 0x003f, 0xdca9, 0xdbfb, 0x003f, - 0xdcad, 0x003f, 0xdcae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdcbf, 0x003f, 0x003f, 0x003f, 0xc6ce, 0x003f, 0xdca4, 0x003f, - 0x003f, 0xdcbb, 0x003f, 0x003f, 0x003f, 0xdcbd, 0x003f, 0xc4d8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcdcc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc9f6, 0xdcb8, 0xc2ca, 0x003f, 0x003f, - 0x003f, 0xdcbe, 0xc1bf, 0x003f, 0xdcb5, 0xdcc2, 0xdcc1, 0x003f, - 0xc6ef, 0xdcc0, 0xc6ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdcc4, 0xdcb7, 0x003f, 0xb6c8, 0xdcba, 0xbddd, - 0x003f, 0x003f, 0x003f, 0xc7e0, 0xdcbc, 0xb6cb, 0x003f, 0xdcb4, - 0xdcb6, 0xdcb3, 0x003f, 0x003f, 0xcfb0, 0xb3da, 0xdcb9, 0x003f, - 0x003f, 0xdcc3, 0xb3b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbae7, 0x003f, 0x003f, 0x003f, 0xb1dd, 0x003f, - 0x003f, 0xdcd4, 0x003f, 0x003f, 0xcfb1, 0xdcd7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbfba, 0xdcd6, 0x003f, 0x003f, 0x003f, - 0xdcd5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcd2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcc6, 0x003f, - 0x003f, 0xdce3, 0xdcc5, 0x003f, 0xdcd8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdcd0, 0x003f, 0x003f, 0xdccb, 0xdcc8, - 0x003f, 0xdcc9, 0x003f, 0xdcd1, 0x003f, 0x003f, 0x003f, 0xf4a2, - 0x003f, 0x003f, 0xdcce, 0xb9bd, 0xc4c8, 0xc1e4, 0xdccc, 0x003f, - 0xdcc7, 0x003f, 0x003f, 0xdcca, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcdcd, 0xcbea, 0x003f, 0x003f, 0x003f, 0xdccf, 0xdcd9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdce1, - 0xdcda, 0x003f, 0x003f, 0xdce7, 0x003f, 0xdce5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdce0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdcdf, 0x003f, 0xc4d0, 0x003f, 0xc1e5, 0x003f, 0xdcdd, - /* 0x6a00 .. 0x6aff */ - 0x003f, 0x003f, 0xdcdb, 0x003f, 0x003f, 0xdce2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdce8, 0xc8f5, 0xdcee, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdce9, 0xdcec, 0xdce6, 0x003f, 0x003f, 0xc3f4, - 0x003f, 0xc9b8, 0x003f, 0xdcdc, 0x003f, 0x003f, 0xdce4, 0xbec0, - 0x003f, 0xcccf, 0xdcf8, 0xdceb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb8a2, 0xb2a3, 0xb3df, 0x003f, 0x003f, 0xdcd3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbec1, 0xdcf0, 0x003f, - 0xdcf7, 0xbcf9, 0xb3f2, 0x003f, 0x003f, 0xc3ae, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdced, 0x003f, 0x003f, 0xdcf2, - 0xdcf6, 0x003f, 0x003f, 0xb6b6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb5cc, 0xdcf4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb5a1, - 0x003f, 0xc6cb, 0xdcf3, 0x003f, 0x003f, 0x003f, 0xdcf5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdcef, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdcf1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3e0, - 0xc3c9, 0x003f, 0x003f, 0x003f, 0xdcfc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcfa, 0xb8e9, 0x003f, - 0xdcf9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdda1, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdbd8, 0x003f, 0x003f, 0x003f, - 0xdcfb, 0x003f, 0xdcfd, 0xdcfe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddac, 0x003f, 0xdda8, 0x003f, 0xdbed, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdda7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdda6, 0x003f, 0x003f, 0xdda3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdcea, 0xdda5, 0xdda4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xddaa, 0x003f, 0xcfa6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddad, 0xb6fb, 0x003f, 0x003f, 0xdda9, 0xddab, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc8a7, 0x003f, 0xddae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddb2, 0xddaf, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6b00 .. 0x6bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xcdf3, 0xddb0, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdcde, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddb3, 0x003f, 0x003f, 0x003f, 0xddb4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb1b5, 0x003f, 0xddb6, - 0xb7e7, 0xbca1, 0x003f, 0xb6d5, 0x003f, 0x003f, 0x003f, 0xb2a4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcddf, 0x003f, 0x003f, 0x003f, 0x003f, 0xddb8, - 0xddb7, 0xddba, 0xb5bd, 0x003f, 0x003f, 0xb6d6, 0xb4be, 0x003f, - 0x003f, 0x003f, 0x003f, 0xddbd, 0x003f, 0x003f, 0x003f, 0xddbc, - 0x003f, 0xddbe, 0x003f, 0x003f, 0xb2ce, 0x003f, 0xc3b7, 0x003f, - 0xddbf, 0x003f, 0x003f, 0xb4bf, 0xddc1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xddc0, 0x003f, 0xddc2, 0x003f, 0x003f, 0x003f, 0xddc3, - 0x003f, 0xddc4, 0xbbdf, 0xc0b5, 0xbaa1, 0x003f, 0xc9f0, 0x003f, - 0x003f, 0xcae2, 0xcfc4, 0x003f, 0x003f, 0x003f, 0x003f, 0xbbf5, - 0x003f, 0x003f, 0x003f, 0xbad0, 0xcef2, 0x003f, 0x003f, 0x003f, - 0xddc5, 0xddc6, 0x003f, 0xbbe0, 0x003f, 0x003f, 0x003f, 0xddc7, - 0xddc8, 0x003f, 0x003f, 0xddca, 0xddc9, 0x003f, 0xcbd8, 0x003f, - 0x003f, 0xbdde, 0xbcec, 0xbbc4, 0x003f, 0xddcb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xddcd, 0xbfa3, 0x003f, - 0xddcc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xddce, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xddcf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddd0, 0xddd1, 0x003f, 0x003f, 0x003f, 0xddd2, - 0x003f, 0xddd4, 0xddd3, 0xddd5, 0xb2a5, 0xc3ca, 0x003f, 0xddd6, - 0x003f, 0x003f, 0xbba6, 0xb3cc, 0xddd7, 0x003f, 0x003f, 0xc5c2, - 0xd4cc, 0x003f, 0x003f, 0x003f, 0x003f, 0xb5a3, 0xddd8, 0x003f, - 0x003f, 0x003f, 0x003f, 0xddd9, 0x003f, 0xcaec, 0xcbe8, 0x003f, - 0x003f, 0x003f, 0xc6c7, 0xddda, 0xc8e6, 0x003f, 0x003f, 0x003f, - 0xc8fb, 0x003f, 0x003f, 0xccd3, 0x003f, 0x003f, 0x003f, 0xdddb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdddd, 0xdddc, 0x003f, 0x003f, 0xdddf, - 0x003f, 0x003f, 0x003f, 0xddde, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6c00 .. 0x6cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdde1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbbe1, - 0x003f, 0xccb1, 0x003f, 0xdde2, 0xdde3, 0x003f, 0x003f, 0xb5a4, - 0x003f, 0x003f, 0x003f, 0xdde4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdde6, 0xdde5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbfe5, 0x003f, 0x003f, 0xc9b9, - 0xb1ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc8c5, 0x003f, - 0xc4f5, 0xbdc1, 0xb5e1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc8c6, 0x003f, - 0xbcae, 0x003f, 0x003f, 0x003f, 0x003f, 0xdde8, 0x003f, 0xb4c0, - 0x003f, 0x003f, 0xb1f8, 0x003f, 0x003f, 0xc6f2, 0xdde7, 0xb9be, - 0xc3d3, 0x003f, 0xdde9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xddf1, 0x003f, 0xddea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc2c1, 0x003f, 0xb5e2, 0xddf2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb7e8, 0x003f, 0x003f, 0xb5a5, 0xddf0, 0x003f, - 0x003f, 0xddee, 0xddeb, 0xcde0, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc4c0, 0x003f, 0x003f, 0x003f, 0xc6d9, 0xddec, 0x003f, 0x003f, - 0xddf4, 0x003f, 0xddf3, 0xb7a3, 0x003f, 0x003f, 0xb2ad, 0x003f, - 0x003f, 0xbabb, 0xdded, 0xddef, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcbd7, 0xc2f4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcbf7, 0x003f, 0x003f, 0xddfc, 0x003f, - 0x003f, 0xddfd, 0x003f, 0xb2cf, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcaa8, 0xccfd, 0xdea1, 0xbca3, 0xbec2, 0xddf8, 0xddfe, 0xb1e8, - 0x003f, 0xb6b7, 0x003f, 0x003f, 0xddf5, 0xddfa, 0x003f, 0x003f, - 0x003f, 0xc0f4, 0xc7f1, 0x003f, 0xc8e7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xddf7, 0x003f, 0xcba1, 0x003f, 0xddf9, - 0x003f, 0xdea4, 0x003f, 0xdea2, 0x003f, 0xddfb, 0x003f, 0x003f, - 0x003f, 0xcba2, 0xc7c8, 0xb5e3, 0x003f, 0xc5a5, 0x003f, 0x003f, - 0xc3ed, 0x003f, 0xdea5, 0x003f, 0x003f, 0x003f, 0x003f, 0xdea3, - 0xc2d9, 0xddf6, 0x003f, 0xb1cb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6d00 .. 0x6dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcdce, 0xdeb0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdeaf, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0f6, - 0x003f, 0xdeac, 0x003f, 0xcdec, 0x003f, 0x003f, 0xc6b6, 0xdea6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4c5, 0x003f, 0x003f, - 0x003f, 0xb1cc, 0xb9bf, 0xdea9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbda7, 0xdeae, 0x003f, 0xdead, 0xdea8, 0x003f, - 0xdeab, 0x003f, 0x003f, 0xb3e8, 0x003f, 0xdeaa, 0xc7c9, 0x003f, - 0x003f, 0xceae, 0x003f, 0x003f, 0xbef4, 0xc0f5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdeb6, 0xdeb4, 0x003f, 0xc9cd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdeb1, 0xdeb3, 0x003f, 0xb1ba, 0x003f, - 0x003f, 0xb9c0, 0xcfb2, 0x003f, 0xb3bd, 0x003f, 0xc9e2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcde1, 0x003f, 0x003f, 0xb3a4, - 0xbfbb, 0xdeb5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdeba, 0x003f, 0x003f, - 0xbec3, 0x003f, 0x003f, 0x003f, 0xcdb0, 0x003f, 0xdeb7, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdeb2, 0x003f, 0xdeb8, 0x003f, 0x003f, - 0x003f, 0xcede, 0x003f, 0xc5f3, 0xc6c2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3b6, - 0x003f, 0x003f, 0xb1d5, 0x003f, 0x003f, 0xdebe, 0x003f, 0x003f, - 0xdec1, 0x003f, 0x003f, 0x003f, 0xcec3, 0x003f, 0x003f, 0x003f, - 0xcde4, 0x003f, 0x003f, 0x003f, 0x003f, 0xdec8, 0xdec2, 0xdebf, - 0x003f, 0x003f, 0x003f, 0xced4, 0xdec5, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbdca, 0xdec7, 0x003f, 0x003f, 0xdecc, 0x003f, 0x003f, - 0xc5f1, 0xdeca, 0x003f, 0x003f, 0x003f, 0x003f, 0xdec4, 0x003f, - 0x003f, 0xc3b8, 0x003f, 0x003f, 0xdecb, 0x003f, 0xdec0, 0x003f, - 0xdec6, 0x003f, 0xdecd, 0xb0fc, 0xdec3, 0x003f, 0xdece, 0x003f, - 0x003f, 0xbfbc, 0x003f, 0xbddf, 0x003f, 0xcaa5, 0x003f, 0xbaae, - 0x003f, 0xdebb, 0xdec9, 0xc5ba, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6e00 .. 0x6eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0b6, 0x003f, 0xb3e9, - 0xbad1, 0xbec4, 0xdebd, 0xbdc2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb7cc, 0x003f, 0xdebc, 0x003f, 0x003f, - 0x003f, 0xded2, 0xbded, 0xb8ba, 0x003f, 0xdee1, 0x003f, 0xdedb, - 0xb5f4, 0xc5cf, 0x003f, 0xded6, 0xdedf, 0xb0af, 0xb1b2, 0x003f, - 0x003f, 0xb2b9, 0x003f, 0xded8, 0xc2ac, 0xdecf, 0xded1, 0xb9c1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdee2, 0x003f, 0xdedd, 0x003f, 0x003f, 0x003f, 0xded5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdedc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xccab, 0x003f, 0x003f, 0xdeda, 0xdede, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb8d0, 0x003f, - 0xbec5, 0x003f, 0x003f, 0xc3b9, 0x003f, 0x003f, 0x003f, 0xded4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdaf, - 0x003f, 0x003f, 0x003f, 0xded7, 0x003f, 0x003f, 0xded0, 0xc5f2, - 0x003f, 0x003f, 0xded3, 0x003f, 0x003f, 0x003f, 0xded9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfd1, 0xbcbe, - 0xcbfe, 0x003f, 0xdee3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc8ae, 0x003f, 0x003f, 0xdeef, - 0xb8bb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbde0, 0x003f, - 0xdee5, 0x003f, 0x003f, 0x003f, 0xceaf, 0xb9c2, 0x003f, 0xdef2, - 0x003f, 0x003f, 0xb0ee, 0x003f, 0x003f, 0xdef0, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdee4, 0x003f, 0x003f, 0x003f, 0x003f, 0xdeea, - 0x003f, 0x003f, 0xdeec, 0x003f, 0x003f, 0x003f, 0xcdcf, 0xdee7, - 0x003f, 0x003f, 0xc5ae, 0x003f, 0x003f, 0xdee9, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdef1, 0x003f, 0xdeeb, 0xccc7, 0x003f, 0x003f, - 0x003f, 0xdee6, 0x003f, 0xbca2, 0xdefe, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3ea, 0x003f, 0xdee8, 0xdeed, 0xdeee, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2ec, 0xc2da, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdef6, 0x003f, 0x003f, 0xdefc, - 0x003f, 0x003f, 0xdefa, 0x003f, 0xc5a9, 0x003f, 0x003f, 0xdfa3, - 0xdef7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdef8, 0xdee0, - /* 0x6f00 .. 0x6fff */ - 0x003f, 0xb5f9, 0xc9ba, 0x003f, 0x003f, 0x003f, 0xbcbf, 0x003f, - 0x003f, 0xb9f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfb3, - 0x003f, 0xdef4, 0x003f, 0xdfa2, 0xb1e9, 0xc1e6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc7f9, 0x003f, 0xb4c1, 0xcefa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcca1, 0xc4d2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdefb, 0xdefd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc1b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfa1, 0xdef9, - 0x003f, 0xdef3, 0x003f, 0x003f, 0x003f, 0xb4c3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb7e9, 0x003f, 0x003f, 0x003f, - 0xdfaf, 0x003f, 0x003f, 0xdfaa, 0xc0f8, 0x003f, 0x003f, 0xb3e3, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbde1, 0x003f, 0xdfb3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfac, 0xc4ac, 0xdfa9, - 0xc4d9, 0x003f, 0x003f, 0x003f, 0xdfcc, 0x003f, 0x003f, 0x003f, - 0xdfa6, 0x003f, 0xdfa5, 0x003f, 0xdfae, 0x003f, 0x003f, 0x003f, - 0xdfa8, 0xdfa7, 0xdfad, 0x003f, 0xc0a1, 0x003f, 0xdfa4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfb0, 0x003f, - 0x003f, 0xdfb1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb4c2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfb6, 0x003f, 0xdfb5, 0xdfb7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdfba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc5c3, 0x003f, 0xdfb4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfb8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb7e3, 0xc2f9, 0xdfb2, 0xc7bb, 0x003f, 0x003f, 0xdfb9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdfbe, 0xdfbc, 0x003f, 0x003f, - 0xdfbf, 0x003f, 0x003f, 0xdfc2, 0x003f, 0x003f, 0x003f, 0xdfbb, - 0xb9ea, 0xc7a8, 0x003f, 0x003f, 0xdeb9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcdf4, 0xdfbd, 0x003f, 0xdfc1, 0xc2f5, - 0x003f, 0xdfc0, 0x003f, 0xdfab, 0x003f, 0x003f, 0xefe9, 0x003f, - 0x003f, 0x003f, 0xdfc5, 0x003f, 0x003f, 0x003f, 0xdfc9, 0x003f, - /* 0x7000 .. 0x70ff */ - 0x003f, 0xdfc7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfc3, 0x003f, 0xdfc4, 0x003f, 0x003f, 0x003f, 0xdfc8, - 0x003f, 0xdfc6, 0x003f, 0x003f, 0x003f, 0xc9ce, 0x003f, 0x003f, - 0xdfce, 0x003f, 0xdfcb, 0xdfca, 0x003f, 0xdfcd, 0xc6d4, 0xdfcf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc3f5, 0xc2ed, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc0a5, 0x003f, 0x003f, 0x003f, - 0xdfd0, 0x003f, 0xdfd2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfd1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdef5, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfd3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc6e7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdfd4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb2d0, 0x003f, 0x003f, 0x003f, 0xc5f4, - 0xb3a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb5e4, 0x003f, 0x003f, 0x003f, 0xbcde, 0xbad2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcfa7, 0xbfe6, 0x003f, 0x003f, 0x003f, 0xb1ea, 0x003f, - 0x003f, 0x003f, 0xdfd6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfd5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdfd9, 0xc3ba, 0xdfdc, 0xdfd7, - 0x003f, 0x003f, 0x003f, 0xdfdb, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdfda, 0xc5c0, 0xb0d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcef5, 0x003f, 0x003f, 0xdfde, 0x003f, 0x003f, 0x003f, 0xb1a8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfe0, 0x003f, 0x003f, 0x003f, 0xdfdf, 0x003f, 0xdfdd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfd8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcba3, 0x003f, 0x003f, 0x003f, 0xdfe2, 0x003f, 0x003f, - /* 0x7100 .. 0x71ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfe1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb1eb, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfe4, 0xcab2, 0x003f, 0xdfe3, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccb5, 0x003f, 0x003f, 0x003f, 0x003f, 0xbec7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc1b3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbec6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcefb, 0x003f, 0x003f, 0xdfea, 0x003f, 0xc0f9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfe6, 0xdfeb, 0x003f, - 0x003f, 0xb1ec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdfe9, 0x003f, 0xc7e1, 0xdfe5, 0xdfe8, 0xbec8, - 0x003f, 0xc8d1, 0x003f, 0x003f, 0xdfec, 0x003f, 0xbcd1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0fa, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdfef, 0x003f, 0x003f, 0x003f, - 0xdfe7, 0x003f, 0xb7a7, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfed, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcdd0, 0xdff0, 0x003f, 0x003f, - 0x003f, 0xf4a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbdcf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdff1, 0x003f, 0x003f, 0x003f, 0xdff2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc7ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdff4, 0x003f, 0x003f, 0x003f, 0x003f, 0xdff5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc7b3, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc5f5, 0xdff7, 0x003f, 0x003f, 0x003f, 0x003f, 0xdff9, 0x003f, - 0xced5, 0x003f, 0xdff6, 0x003f, 0xdff8, 0xb1ed, 0x003f, 0xdff3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3db, - 0xdffa, 0x003f, 0x003f, 0x003f, 0x003f, 0xc1e7, 0xbbb8, 0xdffc, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdffb, 0xbfa4, 0xd2d9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdffd, 0x003f, 0x003f, - 0x003f, 0xe0a1, 0x003f, 0xdfee, 0xdffe, 0x003f, 0x003f, 0xe0a2, - /* 0x7200 .. 0x72ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc7fa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0a3, 0x003f, 0x003f, - 0xe0a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0a5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0a6, 0x003f, 0xc4de, 0x003f, 0xe0a8, 0xe0a7, 0x003f, 0x003f, - 0xe0a9, 0x003f, 0xe0aa, 0x003f, 0x003f, 0xbcdf, 0xc9e3, 0x003f, - 0x003f, 0x003f, 0xccec, 0xe0ab, 0xe0ac, 0xc1d6, 0xbca4, 0xe0ad, - 0xe0ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0af, 0xcad2, - 0xc8c7, 0x003f, 0x003f, 0xe0b0, 0xc7d7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc4ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0b1, 0xb2e7, 0x003f, 0xb5ed, 0x003f, 0xccc6, 0x003f, 0xccb6, - 0x003f, 0xb2b4, 0xcfb4, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbd2, - 0x003f, 0xcaaa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc0b7, 0x003f, 0xe0b2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc6c3, 0x003f, 0x003f, 0x003f, 0xb8a3, 0xe0b3, 0x003f, - 0xbad4, 0xe0b5, 0xe0b4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0b6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe0b7, 0x003f, 0x003f, 0x003f, 0xe0b8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb5be, 0x003f, 0xe0b9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ba, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb8a4, 0x003f, 0x003f, 0xc8c8, - 0x003f, 0x003f, 0xe0bc, 0x003f, 0x003f, 0x003f, 0xbef5, 0x003f, - 0x003f, 0xe0bb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb6b8, 0xe0bd, 0xe0bf, 0x003f, 0xe0be, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0c0, 0x003f, - 0xb8d1, 0x003f, 0xe0c1, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6e9, - 0x003f, 0xc1c0, 0x003f, 0xb9fd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0c3, 0xe0c4, 0xe0c2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbced, 0x003f, 0x003f, 0xc6c8, 0xb6b9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0c6, - 0xc3ac, 0xe0c5, 0x003f, 0x003f, 0xcfb5, 0xc7e2, 0x003f, 0x003f, - /* 0x7300 .. 0x73ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe0c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0cb, 0xe0c8, - 0x003f, 0x003f, 0x003f, 0xccd4, 0xe0ca, 0xe0cc, 0x003f, 0xcec4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0d0, 0x003f, 0x003f, - 0x003f, 0xe0cf, 0xc3f6, 0xc7ad, 0x003f, 0x003f, 0xb8a5, 0xe0ce, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0cd, 0x003f, 0xcdb1, 0xcdb2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0d1, 0xb1ee, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb9f6, 0xbbe2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0d2, 0xe0d3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0d5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbdc3, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0d7, 0x003f, 0xe0d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0d8, 0x003f, 0xb3cd, 0x003f, 0x003f, 0xe0da, 0x003f, 0x003f, - 0xe0d9, 0x003f, 0xe0dc, 0xe0db, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb8bc, 0x003f, 0x003f, 0xcea8, - 0x003f, 0xb6cc, 0x003f, 0xb2a6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6ea, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb4e1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcee8, 0xe0de, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0e0, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0e1, 0x003f, 0xb2d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0dd, 0x003f, 0xbbb9, 0x003f, 0x003f, 0xc4c1, 0xe0df, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0e4, 0x003f, - 0xbcee, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0e2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb7be, 0x003f, 0x003f, 0xc8c9, 0xe0e3, 0x003f, - 0x003f, 0xe0fe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb8bd, 0x003f, - /* 0x7400 .. 0x74ff */ - 0x003f, 0x003f, 0x003f, 0xb5e5, 0x003f, 0xe0e6, 0xcdfd, 0x003f, - 0x003f, 0xceb0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc2f6, 0x003f, 0x003f, 0xe0e8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe0ea, 0xced6, 0xb6d7, 0xc8fc, 0xc7ca, 0x003f, - 0x003f, 0x003f, 0xe0eb, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ed, - 0x003f, 0xe0f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ec, 0x003f, 0x003f, - 0x003f, 0xe0ef, 0xb8ea, 0xb1cd, 0xe0f1, 0x003f, 0xbff0, 0xe0ee, - 0xcedc, 0x003f, 0x003f, 0xe0f4, 0xf4a4, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe0f2, 0xe0f5, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0e7, - 0xe0f3, 0x003f, 0x003f, 0xbabc, 0x003f, 0x003f, 0xe0f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0f7, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcdfe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0f8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0f9, 0x003f, - 0x003f, 0x003f, 0xe0e5, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0fa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb4c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbca5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe0fb, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0fc, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0fd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb1bb, 0x003f, 0x003f, 0x003f, - 0xe1a1, 0x003f, 0xc9bb, 0xe1a2, 0x003f, 0x003f, 0xb4a4, 0xe1a3, - 0x003f, 0xe1a4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1a5, 0x003f, - 0xe1a7, 0xe1a8, 0xe1a6, 0x003f, 0x003f, 0x003f, 0xc9d3, 0xe1aa, - 0xe1a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7500 .. 0x75ff */ - 0x003f, 0x003f, 0x003f, 0xe1ac, 0xe1ab, 0xe1ad, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1ae, 0xe1b0, 0xe1af, 0x003f, - 0x003f, 0xb9f9, 0x003f, 0xe1b2, 0x003f, 0xe1b1, 0x003f, 0x003f, - 0xb4c5, 0x003f, 0xbfd3, 0x003f, 0xc5bc, 0x003f, 0xe1b3, 0xc0b8, - 0x003f, 0x003f, 0x003f, 0xbbba, 0x003f, 0xb1f9, 0xe1b4, 0x003f, - 0xcdd1, 0x003f, 0x003f, 0xcae3, 0xe1b5, 0x003f, 0x003f, 0x003f, - 0xc5c4, 0xcdb3, 0xb9c3, 0xbfbd, 0x003f, 0x003f, 0x003f, 0xc3cb, - 0xd2b4, 0x003f, 0xc4ae, 0xb2e8, 0xe1b6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1b7, 0x003f, 0xe1bc, 0x003f, - 0x003f, 0xe1ba, 0xe1b9, 0xdac2, 0xb3a6, 0xe1b8, 0x003f, 0xb0da, - 0x003f, 0xc8aa, 0x003f, 0x003f, 0xc8ca, 0x003f, 0x003f, 0x003f, - 0x003f, 0xceb1, 0xe1bd, 0xe1bb, 0xc3dc, 0xc0a6, 0x003f, 0x003f, - 0xc8ab, 0x003f, 0xc9ad, 0x003f, 0xe1bf, 0xceac, 0xb7cd, 0xe1c0, - 0x003f, 0xe1be, 0xc8d6, 0xe1c1, 0x003f, 0xe1c2, 0x003f, 0x003f, - 0xb0db, 0x003f, 0x003f, 0xbef6, 0xe1c7, 0x003f, 0xe1c4, 0xc6ed, - 0xe1c3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb5a6, - 0x003f, 0x003f, 0xe1ca, 0x003f, 0x003f, 0x003f, 0xe1c5, 0xe1c6, - 0x003f, 0xe1c9, 0xe1c8, 0xc9a5, 0x003f, 0x003f, 0xc1c2, 0xc1c1, - 0x003f, 0xb5bf, 0x003f, 0x003f, 0xe1cb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1cc, 0x003f, 0x003f, 0xe1cd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe1cf, 0x003f, 0xe1ce, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb1d6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe1d7, 0xc8e8, 0xe1d1, 0x003f, 0xe1d3, 0x003f, 0x003f, - 0xe1d5, 0xbfbe, 0x003f, 0x003f, 0xe1d6, 0xe1d4, 0xbcc0, 0x003f, - 0x003f, 0x003f, 0xe1d0, 0xe1d2, 0x003f, 0xc9c2, 0x003f, 0xbec9, - 0x003f, 0x003f, 0xe1d9, 0x003f, 0x003f, 0xe1d8, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1da, 0x003f, 0xbca6, 0xbaaf, 0x003f, 0x003f, - 0xc5f7, 0xe1db, 0x003f, 0xc4cb, 0x003f, 0x003f, 0xe1dd, 0x003f, - 0x003f, 0x003f, 0xcea1, 0xe1dc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc1e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe1e2, 0x003f, 0xe1e4, 0xe1e5, 0xc3d4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1e3, 0x003f, 0xe1e0, 0x003f, 0xe1de, 0xe1df, - /* 0x7600 .. 0x76ff */ - 0x003f, 0xe1e1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe1e8, 0x003f, 0xe1e6, 0x003f, 0xe1e7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e9, - 0xe1eb, 0xe1ec, 0xe1ed, 0x003f, 0xe1ee, 0x003f, 0x003f, 0xe1ea, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe1f0, 0x003f, 0x003f, 0x003f, 0xe1ef, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe1f1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcec5, 0x003f, 0x003f, 0x003f, 0xe1f4, 0xe1f2, - 0xe1f3, 0x003f, 0x003f, 0x003f, 0xb4e2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xccfe, 0x003f, 0x003f, 0x003f, 0xcaca, 0x003f, - 0xe1f6, 0x003f, 0x003f, 0x003f, 0xe1f5, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe1f7, 0xe1f8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1fc, - 0xe1f9, 0xe1fa, 0xe1fb, 0x003f, 0xe1fd, 0x003f, 0x003f, 0x003f, - 0xe1fe, 0x003f, 0xe2a1, 0x003f, 0x003f, 0x003f, 0xe2a2, 0x003f, - 0xe2a3, 0x003f, 0xc8af, 0xc5d0, 0xe2a4, 0xc7f2, 0xc9b4, 0x003f, - 0xe2a5, 0x003f, 0x003f, 0xe2a6, 0xc5aa, 0x003f, 0xb3a7, 0xb9c4, - 0xe2a7, 0x003f, 0x003f, 0xe2a8, 0x003f, 0x003f, 0xe2a9, 0x003f, - 0xbba9, 0x003f, 0x003f, 0xe2ab, 0x003f, 0x003f, 0xe2aa, 0x003f, - 0x003f, 0xe2ac, 0xe2ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc8e9, 0x003f, - 0xe2ae, 0x003f, 0x003f, 0x003f, 0xe2af, 0x003f, 0x003f, 0xf3e9, - 0xe2b0, 0xe2b1, 0xe2b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xbbae, - 0x003f, 0x003f, 0xe2b3, 0xc7d6, 0x003f, 0x003f, 0xcbdf, 0x003f, - 0xb1ce, 0x003f, 0xb1d7, 0x003f, 0x003f, 0xe2b4, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe2b6, 0x003f, 0x003f, 0x003f, 0xe2b5, 0xc5f0, - 0x003f, 0x003f, 0x003f, 0xc0b9, 0xddb9, 0x003f, 0xe2b7, 0xccc1, - 0x003f, 0xe2b8, 0x003f, 0xb4c6, 0xc8d7, 0xe2b9, 0x003f, 0xe2ba, - 0x003f, 0x003f, 0xe2bb, 0x003f, 0x003f, 0x003f, 0xccdc, 0x003f, - 0x003f, 0x003f, 0xccd5, 0x003f, 0xc4be, 0x003f, 0x003f, 0x003f, - 0xc1ea, 0x003f, 0x003f, 0xe2bd, 0x003f, 0x003f, 0xbde2, 0x003f, - /* 0x7700 .. 0x77ff */ - 0x003f, 0xbeca, 0x003f, 0x003f, 0xe2c0, 0x003f, 0x003f, 0xe2bf, - 0xe2be, 0xc8fd, 0x003f, 0xb4c7, 0xb8a9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2c6, 0x003f, 0x003f, 0xe2c3, 0xbfbf, - 0xccb2, 0x003f, 0x003f, 0x003f, 0xe2c2, 0xe2c4, 0xe2c5, 0x003f, - 0x003f, 0xe2c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2c7, - 0xe2c8, 0x003f, 0xc4af, 0x003f, 0xb4e3, 0x003f, 0x003f, 0x003f, - 0xc3e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2c9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe2ca, 0xe2cd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbfe7, 0x003f, 0xc6c4, 0x003f, 0xe2ce, 0xcbd3, 0x003f, - 0xe2cb, 0x003f, 0x003f, 0xe2cc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe2d1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d0, 0xe2cf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2d3, 0x003f, 0x003f, 0xe2d2, 0x003f, - 0x003f, 0xe2d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d6, 0x003f, - 0xe2d5, 0x003f, 0x003f, 0x003f, 0x003f, 0xcacd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbdd6, 0xcec6, 0x003f, 0x003f, - 0xe2d7, 0x003f, 0x003f, 0xc6b7, 0x003f, 0x003f, 0xe2d8, 0x003f, - 0x003f, 0xe2d9, 0x003f, 0xe2dd, 0xe2db, 0xe2dc, 0x003f, 0xe2da, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2de, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2df, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2e0, - 0x003f, 0x003f, 0xe2e1, 0xccb7, 0xe2e2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xccf0, 0xe2e3, 0x003f, 0xc3ce, 0x003f, 0xc7ea, - 0x003f, 0xb6eb, 0x003f, 0x003f, 0x003f, 0xc3bb, 0xe2e4, 0xb6ba, - 0x003f, 0x003f, 0x003f, 0xc0d0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2e5, 0x003f, 0x003f, 0x003f, - /* 0x7800 .. 0x78ff */ - 0x003f, 0x003f, 0xbabd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2e6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe2e7, 0x003f, 0xb8a6, 0xbad5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2e9, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5d6, 0xbad6, 0xb5ce, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcba4, 0x003f, 0xc7cb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc5d7, 0x003f, 0x003f, 0x003f, 0x003f, 0xb9dc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2eb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbecb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xceb2, 0xb9c5, 0x003f, 0x003f, 0xb8a7, - 0x003f, 0x003f, 0xc8a3, 0x003f, 0xe2ed, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2ef, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb8eb, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2ee, 0xc4f6, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2f1, 0xb3b7, 0xe2ec, 0x003f, - 0x003f, 0xc8ea, 0x003f, 0xb1b0, 0x003f, 0xbaec, 0x003f, 0xcfd2, - 0x003f, 0x003f, 0xe2f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2f2, 0x003f, 0x003f, 0x003f, 0xcacb, - 0x003f, 0xc0d9, 0xe2f4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2f5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2f3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb3ce, 0x003f, 0xe2fb, 0x003f, 0xe2fa, 0x003f, - 0x003f, 0xbca7, 0x003f, 0x003f, 0x003f, 0xe2fc, 0xe2f7, 0x003f, - 0x003f, 0x003f, 0xe2fd, 0xe2f8, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc8d8, 0xe2f6, 0x003f, 0x003f, 0xe2f9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a1, - 0xcbe1, 0x003f, 0x003f, 0x003f, 0xe2fe, 0x003f, 0x003f, 0xb0eb, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a3, 0x003f, 0x003f, - /* 0x7900 .. 0x79ff */ - 0x003f, 0xbecc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc1c3, 0x003f, - 0x003f, 0xe3a7, 0xe3a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2e8, 0x003f, - 0x003f, 0x003f, 0xe2ea, 0xe3aa, 0xe3a9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbca8, 0x003f, 0xcee9, 0x003f, 0xbcd2, 0x003f, - 0xe3ab, 0xb7b7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb5c0, - 0xb5a7, 0xbbe3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcdb4, 0x003f, 0x003f, 0xe3b1, 0x003f, 0xe3b0, 0xc1c4, 0xe3ad, - 0x003f, 0x003f, 0xe3af, 0x003f, 0x003f, 0xbdcb, 0xbfc0, 0xe3ae, - 0xe3ac, 0x003f, 0xc7aa, 0x003f, 0x003f, 0xbecd, 0x003f, 0x003f, - 0xc9bc, 0x003f, 0x003f, 0x003f, 0x003f, 0xbad7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5f8, - 0x003f, 0x003f, 0xe3b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3b3, - 0xe3c9, 0xb6d8, 0x003f, 0x003f, 0xcfbd, 0xc1b5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3b4, 0x003f, 0x003f, 0xb2d2, 0xc4f7, 0xcaa1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3b5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb5fa, 0xe3b6, - 0x003f, 0x003f, 0xe3b8, 0x003f, 0x003f, 0x003f, 0xe3b9, 0x003f, - 0xc7a9, 0x003f, 0x003f, 0xe3ba, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3bb, 0xe3bc, 0x003f, 0x003f, 0xb6d9, 0xb2d3, 0xc6c5, - 0xbda8, 0xbbe4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3bd, 0x003f, 0xbda9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb2ca, 0xc9c3, 0x003f, 0x003f, 0xe3be, 0x003f, 0x003f, - 0xc8eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc1c5, - 0x003f, 0xe3c1, 0x003f, 0xe3c2, 0xc7e9, 0x003f, 0xbfc1, 0xe3bf, - 0x003f, 0xc3e1, 0x003f, 0x003f, 0xe3c0, 0x003f, 0x003f, 0x003f, - 0xbece, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb0dc, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7a00 .. 0x7aff */ - 0xb5a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe3c3, 0x003f, 0x003f, 0xc4f8, 0x003f, 0xe3c4, 0xc0c7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xccad, 0x003f, 0x003f, 0xc9a3, - 0xe3c5, 0xe3c6, 0xc3d5, 0x003f, 0xcec7, 0x003f, 0x003f, 0xe3c8, - 0xe3c7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbcef, 0x003f, - 0x003f, 0xe3ca, 0xb0f0, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3cd, - 0x003f, 0x003f, 0x003f, 0xe3cb, 0xb2d4, 0xb7ce, 0xe3cc, 0xb9c6, - 0xb9f2, 0x003f, 0xcae6, 0xe3ce, 0x003f, 0x003f, 0xcbd4, 0x003f, - 0x003f, 0xe3d0, 0x003f, 0x003f, 0x003f, 0xc0d1, 0xb1cf, 0xb2ba, - 0xb0ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3cf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3d1, 0xe3d2, 0xbef7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3d3, 0x003f, 0xb3cf, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe3d5, 0x003f, 0x003f, 0x003f, 0xb7ea, 0x003f, 0xb5e6, 0x003f, - 0x003f, 0xe3d6, 0xb6f5, 0x003f, 0x003f, 0xe3d7, 0x003f, 0xc0fc, - 0x003f, 0xc6cd, 0x003f, 0xc0e0, 0xbaf5, 0x003f, 0x003f, 0x003f, - 0xe3d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc3e2, 0xc1eb, 0x003f, 0xe3da, 0xe3dc, 0xe3d9, - 0xe3db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7a2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3dd, 0xb7a6, 0x003f, 0x003f, 0x003f, 0xb5e7, 0xcdd2, - 0xe3df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3e0, 0x003f, - 0x003f, 0x003f, 0xb1ae, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3e3, - 0x003f, 0x003f, 0x003f, 0xb3f6, 0xe3e2, 0xe3e1, 0x003f, 0xe3e5, - 0xe3de, 0x003f, 0xe3e6, 0xcea9, 0x003f, 0xe3e7, 0x003f, 0xe3e8, - 0x003f, 0x003f, 0xd4f4, 0xe3ea, 0x003f, 0xe3e9, 0x003f, 0x003f, - 0x003f, 0xe3eb, 0xe3ec, 0x003f, 0xceb5, 0xe3ed, 0x003f, 0xf0ef, - 0xbecf, 0xe3ee, 0xe3ef, 0xbdd7, 0x003f, 0xc6b8, 0xe3f0, 0x003f, - 0x003f, 0x003f, 0xc3a8, 0x003f, 0x003f, 0xe3f1, 0x003f, 0xc3bc, - 0xe3f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6a5, 0x003f, - 0xd1bf, 0xc3dd, 0xbcb3, 0x003f, 0x003f, 0x003f, 0x003f, 0xb4c8, - /* 0x7b00 .. 0x7bff */ - 0x003f, 0x003f, 0xe3f3, 0x003f, 0xe4a2, 0x003f, 0xe3f6, 0x003f, - 0xb5e8, 0x003f, 0xe3f5, 0xe4a4, 0x003f, 0x003f, 0x003f, 0xe3f4, - 0x003f, 0xbed0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe3f8, 0xe3f9, 0x003f, 0xc5ab, 0x003f, 0x003f, 0xe3fa, 0x003f, - 0xb3de, 0x003f, 0x003f, 0x003f, 0x003f, 0xbfda, 0xc9e4, 0x003f, - 0xe3fc, 0x003f, 0x003f, 0x003f, 0xc2e8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3f7, 0x003f, 0xe3fb, 0xe3fd, 0x003f, - 0x003f, 0xbafb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4a6, 0xc9ae, 0x003f, - 0xc8a6, 0xc5f9, 0x003f, 0xb6da, 0xe4a5, 0xe4a3, 0x003f, 0xc8b5, - 0xe3fe, 0xc3de, 0xc5fb, 0x003f, 0xc5fa, 0x003f, 0xbaf6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4b8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4a8, 0x003f, 0xe4aa, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4ad, 0x003f, 0xe4ae, 0x003f, - 0xe4ab, 0xe4ac, 0x003f, 0x003f, 0xe4a9, 0xe4a7, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe4a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcacf, 0xb2d5, - 0x003f, 0x003f, 0x003f, 0xe4b5, 0x003f, 0xe4b2, 0x003f, 0xe4b7, - 0x003f, 0x003f, 0xe4b6, 0x003f, 0xc7f3, 0xcca7, 0x003f, 0xbbbb, - 0xe4b0, 0xe4b9, 0xe4b4, 0x003f, 0xe4b3, 0xe4af, 0x003f, 0xe4b1, - 0x003f, 0xb4c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc3bd, 0x003f, 0x003f, 0xc0fd, 0x003f, 0x003f, - 0x003f, 0xc8a2, 0x003f, 0x003f, 0xe4be, 0x003f, 0x003f, 0x003f, - 0xc8a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc0e1, 0xe4bb, 0x003f, 0x003f, 0xc8cf, 0x003f, 0xe4bf, 0xcad3, - 0x003f, 0xc3db, 0x003f, 0xe4ba, 0xe4bc, 0x003f, 0x003f, 0xe4bd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4c0, 0x003f, 0x003f, - 0xbcc4, 0x003f, 0x003f, 0x003f, 0xc6c6, 0xe4c5, 0xe4c4, 0x003f, - 0x003f, 0xe4c1, 0x003f, 0x003f, 0x003f, 0xcfb6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4ca, 0x003f, 0x003f, 0xe4ce, 0xe4cb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7c00 .. 0x7cff */ - 0xe4c7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4c8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4cd, 0x003f, 0x003f, - 0x003f, 0xe4c2, 0xd2d5, 0xe4c9, 0xe4c3, 0x003f, 0x003f, 0xe4cc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d2, - 0x003f, 0xb4ca, 0x003f, 0xe4cf, 0x003f, 0x003f, 0x003f, 0xe4d0, - 0x003f, 0x003f, 0xe4d1, 0xe4d4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d3, - 0xc8f6, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d5, 0xcefc, 0xcaed, - 0xe4da, 0x003f, 0x003f, 0xe4d7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d6, 0xc0d2, 0x003f, 0xe4d9, - 0xe4db, 0x003f, 0x003f, 0x003f, 0xe4d8, 0x003f, 0xe4df, 0x003f, - 0xe4dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4dd, - 0xe4c6, 0x003f, 0x003f, 0x003f, 0xe4de, 0xe4e0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4e1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcac6, 0x003f, 0xe4e2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcce2, 0x003f, - 0x003f, 0xb6ce, 0xb7a9, 0xe4e3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcab4, 0x003f, 0xbfe8, 0x003f, 0xccb0, 0x003f, 0x003f, - 0xe4e4, 0x003f, 0xceb3, 0x003f, 0x003f, 0xc7f4, 0x003f, 0xc1c6, - 0xc7b4, 0x003f, 0x003f, 0xbdcd, 0x003f, 0x003f, 0x003f, 0xb0c0, - 0x003f, 0xe4e9, 0xe4e7, 0x003f, 0xe4e5, 0xb4a1, 0x003f, 0xbed1, - 0xe4ea, 0x003f, 0x003f, 0xe4e8, 0x003f, 0xe4e6, 0xe4ee, 0x003f, - 0x003f, 0xe4ed, 0xe4ec, 0xe4eb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe4ef, 0x003f, 0x003f, 0x003f, 0xe4f0, 0xc0ba, 0x003f, - 0xe4f1, 0x003f, 0xe4f3, 0x003f, 0x003f, 0xe4f2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb8d2, 0x003f, 0x003f, 0x003f, 0xc1b8, 0x003f, - 0x003f, 0x003f, 0xe4f5, 0x003f, 0x003f, 0x003f, 0xc5fc, 0x003f, - 0xe4f4, 0x003f, 0x003f, 0x003f, 0xe4f6, 0x003f, 0xcab5, 0xc1ec, - 0xb9c7, 0x003f, 0xe4f7, 0x003f, 0x003f, 0x003f, 0x003f, 0xcec8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f9, - 0x003f, 0x003f, 0xe4fa, 0x003f, 0xe4fb, 0x003f, 0xe4fc, 0x003f, - 0xbbe5, 0x003f, 0xe4fd, 0xb7cf, 0x003f, 0x003f, 0xb5ea, 0x003f, - /* 0x7d00 .. 0x7dff */ - 0xb5aa, 0x003f, 0xe5a1, 0x003f, 0xccf3, 0xb9c8, 0xe4fe, 0x003f, - 0x003f, 0x003f, 0xe5a4, 0xcce6, 0x003f, 0xc7bc, 0x003f, 0x003f, - 0xc9b3, 0x003f, 0x003f, 0x003f, 0xbde3, 0xe5a3, 0x003f, 0xbcd3, - 0xb9c9, 0xbbe6, 0xb5e9, 0xcab6, 0xe5a2, 0x003f, 0x003f, 0x003f, - 0xc1c7, 0xcbc2, 0xbaf7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbbe7, 0xc4dd, 0x003f, 0xe5a7, 0xcedf, - 0xbad9, 0x003f, 0xe5a8, 0xbfc2, 0x003f, 0xe5aa, 0x003f, 0x003f, - 0x003f, 0xbed2, 0xbab0, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a9, - 0x003f, 0x003f, 0xbdaa, 0xb8be, 0xc1c8, 0xe5a5, 0xe5ab, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5a6, 0xb7d0, 0x003f, 0xe5ae, 0xe5b2, - 0xb7eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5ad, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5b6, 0x003f, 0x003f, 0xb9ca, 0x003f, - 0x003f, 0xcded, 0xb0bc, 0xe5b3, 0x003f, 0x003f, 0xb5eb, 0x003f, - 0xe5b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5b1, 0x003f, - 0x003f, 0xc5fd, 0xe5af, 0xe5ac, 0x003f, 0xb3a8, 0xc0e4, 0x003f, - 0x003f, 0xb8a8, 0x003f, 0x003f, 0x003f, 0xe5b8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe5b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5b7, - 0x003f, 0x003f, 0x003f, 0xe5b4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb7d1, 0xc2b3, 0xe5b9, 0xc1ee, 0x003f, 0x003f, 0xe5c6, - 0x003f, 0x003f, 0xe5c2, 0xe5bc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5c0, 0xbcfa, 0xb0dd, 0xe5bb, 0xe5c3, - 0xe5c7, 0xb9cb, 0xccd6, 0x003f, 0xc4d6, 0xe5bd, 0x003f, 0x003f, - 0xe5c5, 0x003f, 0xe5ba, 0xc3be, 0x003f, 0xe5bf, 0xb0bd, 0xccca, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5be, - 0x003f, 0x003f, 0xb6db, 0xc8ec, 0x003f, 0x003f, 0x003f, 0xc1ed, - 0x003f, 0xced0, 0xbdef, 0x003f, 0x003f, 0xe5ee, 0x003f, 0x003f, - 0xe5c8, 0x003f, 0xc0fe, 0x003f, 0xe5c4, 0xe5c9, 0xe5cb, 0x003f, - 0xc4f9, 0xe5ce, 0x003f, 0x003f, 0xe5ca, 0x003f, 0x003f, 0x003f, - 0xcad4, 0xb4cb, 0x003f, 0x003f, 0xcccb, 0x003f, 0x003f, 0xb0de, - 0x003f, 0x003f, 0xe5cd, 0x003f, 0xcefd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5cc, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7e00 .. 0x7eff */ - 0x003f, 0xb1ef, 0x003f, 0x003f, 0xc6ec, 0xe5cf, 0x003f, 0x003f, - 0x003f, 0xe5d6, 0xe5d0, 0xe5d7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc7fb, 0x003f, 0x003f, 0xbcca, 0xe5d5, - 0x003f, 0xe5d2, 0xe5d8, 0xe5d1, 0x003f, 0x003f, 0xbdc4, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcba5, 0x003f, 0x003f, 0xbdcc, 0x003f, - 0x003f, 0xe5d4, 0xe5e0, 0x003f, 0x003f, 0xe5dc, 0x003f, 0xe5df, - 0x003f, 0xe5dd, 0xe5e1, 0xe5db, 0x003f, 0xe5c1, 0xc0d3, 0x003f, - 0x003f, 0xc8cb, 0x003f, 0xe5de, 0x003f, 0x003f, 0xe5d9, 0x003f, - 0x003f, 0x003f, 0xc1a1, 0xb7d2, 0x003f, 0xbdab, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbfa5, 0xc1b6, 0xe5e4, 0x003f, - 0x003f, 0xe5e6, 0xe5e7, 0x003f, 0x003f, 0xe5e3, 0xe5e5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5da, 0xe5e2, - 0x003f, 0xe5ea, 0xe5e9, 0x003f, 0x003f, 0xcbfa, 0x003f, 0x003f, - 0xb7ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe5e8, 0x003f, 0xe5ec, 0xe5eb, 0xe5ef, 0x003f, 0xe5f1, - 0x003f, 0x003f, 0xbbbc, 0xe5ed, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe5f2, 0xe5f3, 0x003f, 0x003f, 0xe5f4, 0x003f, 0xe5fa, 0xc5bb, - 0xe5f6, 0x003f, 0xe5f5, 0xe5f7, 0xe5f8, 0x003f, 0xe5f9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5fb, 0xe5fc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7f00 .. 0x7fff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb4cc, 0x003f, - 0xe5fd, 0x003f, 0xe5fe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a2, 0xe6a3, 0xe6a4, 0x003f, - 0xe6a5, 0xe6a6, 0x003f, 0x003f, 0xe6a8, 0xe6a7, 0x003f, 0x003f, - 0xe6a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6aa, - 0xe6ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6ae, - 0xe6ac, 0xe6ad, 0xbae1, 0xb7d3, 0x003f, 0x003f, 0xc3d6, 0x003f, - 0xc8b3, 0x003f, 0xbdf0, 0x003f, 0x003f, 0xc7cd, 0x003f, 0xc8ed, - 0xe6af, 0xd8ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe6b0, 0xe6b2, 0x003f, 0xcde5, 0xe6b1, 0xe6b4, - 0xe6b3, 0x003f, 0xcdd3, 0x003f, 0xe6b5, 0x003f, 0xc8fe, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe6b6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe6b9, 0x003f, 0x003f, 0xe6b8, 0xe6b7, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe6ba, 0xb7b2, 0x003f, 0x003f, 0x003f, - 0xc1a2, 0xb5c1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6be, 0xe6bb, - 0x003f, 0x003f, 0xe6bc, 0x003f, 0x003f, 0x003f, 0xe6bf, 0x003f, - 0xe6c0, 0xe6bd, 0x003f, 0x003f, 0x003f, 0xb1a9, 0x003f, 0x003f, - 0x003f, 0xb2a7, 0x003f, 0x003f, 0x003f, 0xe6c2, 0xe6c3, 0x003f, - 0x003f, 0x003f, 0xe6c4, 0x003f, 0xcde2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbdac, 0x003f, 0xe6c6, 0xe6c5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbfe9, 0xe6c7, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6c8, 0x003f, - 0x003f, 0xe6c9, 0x003f, 0xb4e5, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb4cd, 0x003f, 0x003f, 0xe6ca, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe6cb, 0x003f, 0xcbdd, 0xcde3, 0x003f, 0x003f, 0x003f, - /* 0x8000 .. 0x80ff */ - 0xcdd4, 0xcfb7, 0x003f, 0xb9cd, 0xe6ce, 0xbcd4, 0xe6cd, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe6cf, 0xbca9, 0x003f, 0x003f, 0x003f, - 0xc2d1, 0x003f, 0xe6d0, 0x003f, 0x003f, 0xb9cc, 0x003f, 0xccd7, - 0xe6d1, 0xe6d2, 0x003f, 0x003f, 0xe6d3, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe6d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe6d5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbcaa, 0x003f, 0x003f, 0xcced, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe6d7, 0x003f, 0xc3bf, 0x003f, 0xe6d6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6d9, 0x003f, - 0x003f, 0x003f, 0xe6d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe6da, 0x003f, 0x003f, 0x003f, 0xc0bb, 0x003f, - 0xe6db, 0x003f, 0xe6dc, 0x003f, 0x003f, 0x003f, 0xcab9, 0xe6dd, - 0x003f, 0xc1ef, 0xe6de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe6df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcefe, - 0xe6e2, 0x003f, 0xe6e1, 0xe6e0, 0xc4b0, 0x003f, 0xe6e3, 0xbfa6, - 0x003f, 0xe6e4, 0x003f, 0x003f, 0x003f, 0xe6e5, 0xcfb8, 0xe6e6, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe6e7, 0xe6e9, 0xe6e8, 0xc8a5, - 0x003f, 0xc6f9, 0x003f, 0xcfbe, 0xc8a9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe6eb, 0x003f, 0x003f, 0xbed3, 0x003f, - 0xc9aa, 0x003f, 0xe6ec, 0xe6ea, 0x003f, 0xb4ce, 0x003f, 0x003f, - 0x003f, 0xb8d4, 0xbbe8, 0x003f, 0x003f, 0xc8ee, 0x003f, 0x003f, - 0x003f, 0xb8aa, 0xcbc3, 0x003f, 0xe6ef, 0xe6ed, 0x003f, 0xb9ce, - 0x003f, 0xb9cf, 0xb0e9, 0x003f, 0xbae8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc7d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb0df, 0xe6f4, 0x003f, 0xc3c0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc7d8, 0x003f, 0xc2db, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6f6, 0x003f, - 0x003f, 0xe6f2, 0xe6f5, 0xe6f0, 0x003f, 0xe6f3, 0xcba6, 0x003f, - 0x003f, 0xb8d5, 0x003f, 0x003f, 0xb0fd, 0xe6f1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6f8, - 0x003f, 0xe6f9, 0x003f, 0x003f, 0xc6b9, 0x003f, 0x003f, 0x003f, - 0xb6bb, 0x003f, 0x003f, 0x003f, 0xe7a6, 0xc7bd, 0x003f, 0x003f, - /* 0x8100 .. 0x81ff */ - 0x003f, 0x003f, 0xbbe9, 0x003f, 0x003f, 0xb6bc, 0xc0c8, 0xcfc6, - 0xccae, 0xe6f7, 0xc0d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb5d3, 0xe6fa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe6fc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe6fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6fd, - 0x003f, 0xc3a6, 0x003f, 0xc7be, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc4b1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a2, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe6fe, 0x003f, 0x003f, 0xbfd5, 0x003f, - 0xc9e5, 0xe7a5, 0x003f, 0xe7a4, 0xb9d0, 0xcfd3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7b5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a9, 0xe7aa, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbcf0, 0x003f, 0x003f, 0xe7a8, 0x003f, - 0xb9f8, 0xe7a7, 0x003f, 0x003f, 0xe7ab, 0x003f, 0x003f, 0x003f, - 0xc4b2, 0xcaa2, 0xc1a3, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2dc, - 0xe7af, 0x003f, 0xe7b0, 0xe7ac, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7ad, 0x003f, 0xe7ae, 0x003f, 0x003f, 0x003f, 0x003f, 0xb9d1, - 0x003f, 0x003f, 0x003f, 0xe7b6, 0x003f, 0xe7b2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc9e6, 0x003f, 0xcbec, 0xc9a8, 0x003f, 0x003f, - 0xe7b1, 0x003f, 0x003f, 0xe7b4, 0xe7b3, 0x003f, 0x003f, 0x003f, - 0xcbc4, 0xe7b7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7b8, 0x003f, 0x003f, 0xc1b7, 0x003f, 0xe7b9, 0x003f, 0x003f, - 0xe7bb, 0x003f, 0xe7bf, 0x003f, 0x003f, 0xe7bc, 0xe7ba, 0xc7bf, - 0xe7bd, 0x003f, 0xe7be, 0x003f, 0x003f, 0x003f, 0xb2b2, 0x003f, - 0xe7c5, 0xe7c0, 0x003f, 0x003f, 0x003f, 0xe7c1, 0x003f, 0x003f, - 0x003f, 0xe7c2, 0x003f, 0xc2a1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7c4, 0xe7c3, 0xe7c6, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7c7, - 0xe7c8, 0x003f, 0x003f, 0xbfc3, 0x003f, 0xb2e9, 0x003f, 0xe7c9, - 0xced7, 0x003f, 0xbcab, 0x003f, 0x003f, 0xbdad, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbbea, 0xc3d7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7ca, 0xe7cb, 0xb1b1, 0x003f, 0xe7cc, 0x003f, - /* 0x8200 .. 0x82ff */ - 0x003f, 0xe7cd, 0xe7ce, 0x003f, 0x003f, 0xe7cf, 0x003f, 0xe7d0, - 0xb6bd, 0xdaaa, 0xe7d1, 0x003f, 0xc0e5, 0xe7d2, 0xbccb, 0x003f, - 0xe7d3, 0x003f, 0xd0b0, 0x003f, 0x003f, 0x003f, 0xe7d4, 0xcade, - 0xb4dc, 0x003f, 0x003f, 0xc1a4, 0xbdd8, 0x003f, 0xc9f1, 0xbdae, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe7d5, 0xb9d2, 0xe7d6, 0xc8cc, 0x003f, 0xe7e4, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe7d8, 0x003f, 0xc2c9, 0xc7f5, 0xb8bf, - 0xe7d7, 0xc1a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4fa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7db, 0xe7da, 0xe7dd, 0x003f, 0x003f, 0xe7dc, 0x003f, 0xe7de, - 0x003f, 0x003f, 0xe7e0, 0x003f, 0xe7df, 0x003f, 0xb4cf, 0x003f, - 0xe7e1, 0x003f, 0xe7e2, 0xe7e3, 0x003f, 0x003f, 0xbab1, 0xcec9, - 0x003f, 0xe7e5, 0xbfa7, 0x003f, 0x003f, 0x003f, 0xb1f0, 0xe7e6, - 0xe7e7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7e8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb0f2, 0x003f, 0xe7e9, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc9e7, 0x003f, 0x003f, 0x003f, 0xbcc7, 0x003f, 0xe7ec, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3a9, 0xb0b2, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe7eb, 0xe7ee, 0xc7ce, 0x003f, 0xbfc4, - 0x003f, 0xb2d6, 0x003f, 0xcba7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb7dd, 0xb6dc, 0x003f, 0xe7ed, 0x003f, 0xb2ea, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb4a3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb1f1, 0xe7f2, 0xceea, 0xc2dd, 0x003f, 0x003f, 0xc9c4, - 0x003f, 0xe7fe, 0x003f, 0xb2d7, 0xe7fc, 0x003f, 0xe7fa, 0xe7f1, - 0x003f, 0xe7ef, 0x003f, 0xe7f0, 0x003f, 0xbce3, 0xb6ec, 0xc3f7, - 0x003f, 0x003f, 0x003f, 0xc6d1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb1d1, 0x003f, 0xe7f4, 0xe7f3, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe7f9, 0xe7f5, 0xe7f8, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8300 .. 0x83ff */ - 0x003f, 0x003f, 0xccd0, 0xe7f7, 0xb2d8, 0xb3fd, 0xe7fb, 0x003f, - 0x003f, 0xe7fd, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7d4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8a3, 0xe8ac, - 0xe8ad, 0x003f, 0x003f, 0x003f, 0xb0ab, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8b4, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb0f1, 0x003f, 0x003f, 0xe8ab, 0x003f, 0x003f, 0x003f, 0xe8aa, - 0x003f, 0xe8a5, 0xe8a4, 0x003f, 0xe8a2, 0xe8a1, 0xc3e3, 0x003f, - 0xc2fb, 0xe8a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe8a6, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8a9, 0x003f, 0x003f, - 0x003f, 0xc1f0, 0xb7d5, 0x003f, 0x003f, 0x003f, 0x003f, 0xb1c1, - 0xe8a8, 0x003f, 0xb9d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc1f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8ba, 0x003f, 0xe8bb, 0x003f, 0xb2d9, - 0x003f, 0x003f, 0x003f, 0xb2ae, 0xe8b8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8ae, 0x003f, 0xe8b6, - 0x003f, 0xe8bd, 0xe8b7, 0x003f, 0x003f, 0x003f, 0xe8b5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe7f6, 0x003f, 0x003f, 0xe8b3, 0x003f, - 0x003f, 0x003f, 0xe8af, 0x003f, 0x003f, 0x003f, 0xb4d0, 0xe8b1, - 0xe8bc, 0x003f, 0xe8b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe8be, 0x003f, 0xe8b0, 0xc7fc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcde9, 0x003f, 0x003f, 0x003f, 0xe8b9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8cf, 0x003f, 0x003f, - 0x003f, 0xe8c7, 0x003f, 0x003f, 0x003f, 0xbffb, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb5c6, 0x003f, 0xb6dd, 0x003f, 0xe8c2, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb2db, 0x003f, 0x003f, 0xbed4, 0x003f, - 0xe8c5, 0x003f, 0x003f, 0x003f, 0xbada, 0x003f, 0x003f, 0xc5d1, - 0xe8ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcaee, 0x003f, 0xe8c1, 0x003f, 0x003f, 0x003f, 0xb2da, - 0xb8d6, 0xc9a9, 0xe8cb, 0x003f, 0xe8bf, 0x003f, 0x003f, 0xe8c8, - 0x003f, 0x003f, 0x003f, 0xe8d2, 0x003f, 0xe8c3, 0x003f, 0x003f, - /* 0x8400 .. 0x84ff */ - 0x003f, 0x003f, 0x003f, 0xe8c4, 0xc6ba, 0x003f, 0x003f, 0xe8c9, - 0x003f, 0x003f, 0x003f, 0xe8c6, 0xcba8, 0xe8cc, 0xb0e0, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8c0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe8ce, 0x003f, 0xe8cd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc7eb, 0xe8d4, 0x003f, 0xe8df, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3fe, 0x003f, 0x003f, 0x003f, 0xe8e2, 0x003f, 0x003f, - 0xe8d0, 0x003f, 0x003f, 0x003f, 0xe8d5, 0xcdee, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8de, 0x003f, - 0x003f, 0xcdd5, 0x003f, 0x003f, 0x003f, 0x003f, 0xceaa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc3f8, - 0x003f, 0x003f, 0x003f, 0xb3eb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc9f2, 0xe8e4, 0xc6a1, 0x003f, 0x003f, 0xb0b1, 0x003f, - 0x003f, 0xe8dd, 0x003f, 0xe8d9, 0xc1f2, 0xe8d3, 0xe8db, 0xe8e0, - 0x003f, 0xc7ac, 0x003f, 0x003f, 0x003f, 0xb0aa, 0x003f, 0xe8d8, - 0x003f, 0xe8e1, 0xc9f8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe8dc, 0x003f, 0xe8d7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbed5, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbdaf, 0x003f, 0x003f, 0x003f, 0xbcac, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccd8, 0x003f, 0x003f, 0xc9c7, 0x003f, 0x003f, 0xe8e7, - 0x003f, 0xe8f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8da, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb3f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbef8, 0xe8e5, 0x003f, 0xe8ea, 0xc1f3, 0x003f, 0x003f, 0xe8e6, - 0x003f, 0xe8ed, 0x003f, 0x003f, 0xc3df, 0x003f, 0xe8ee, 0x003f, - 0x003f, 0xcdd6, 0xe8e3, 0xb3b8, 0x003f, 0xe8e9, 0x003f, 0x003f, - 0xe8ec, 0xccac, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8ef, 0x003f, - 0x003f, 0xe8e8, 0xe8eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcba9, 0x003f, 0xcfa1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe8f3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe8fa, 0x003f, 0x003f, 0xe8f2, - /* 0x8500 .. 0x85ff */ - 0xbcc3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8d1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcace, 0x003f, 0xcca2, 0xe8f9, 0xe8f8, 0x003f, 0xe8f4, - 0xe8f5, 0x003f, 0xb1b6, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8f7, - 0x003f, 0xe8f1, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4d5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe8f6, 0xb0fe, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2a2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcac3, 0x003f, 0x003f, - 0xe8fb, 0xe9a1, 0x003f, 0xc8d9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe8fe, 0xbed6, 0xbcc9, 0xe9a3, 0x003f, 0x003f, 0xb6be, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9a4, 0x003f, 0xc9f9, - 0xe8fd, 0x003f, 0xe8d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8fc, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcfcf, 0xc6a2, 0xc9f3, 0x003f, 0x003f, 0xe9ab, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9b1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9b2, 0x003f, - 0xe9a5, 0x003f, 0x003f, 0x003f, 0xc7f6, 0x003f, 0x003f, 0xe9af, - 0xe9a7, 0x003f, 0xe9a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9b3, 0xe9a8, 0x003f, 0x003f, 0xe9ac, 0x003f, 0x003f, 0xb1f2, - 0x003f, 0xc6e5, 0x003f, 0xe9ad, 0xe9b0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9a6, 0x003f, 0xc1a6, 0x003f, - 0xe9aa, 0xbba7, 0xbfc5, 0xb7b0, 0xccf4, 0x003f, 0xccf9, 0xbdf2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9b7, 0xe9b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcfce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9b4, 0x003f, 0x003f, 0x003f, 0xcdf5, 0x003f, 0xe9b6, - 0xe9b8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9b9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9bc, 0xe9ba, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc6a3, 0xe9bb, 0x003f, 0x003f, - 0x003f, 0xc8cd, 0xe9ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbdf3, - 0x003f, 0xe9bd, 0xe9c2, 0xc1f4, 0x003f, 0x003f, 0xe9c1, 0x003f, - /* 0x8600 .. 0x86ff */ - 0x003f, 0x003f, 0xe9a2, 0x003f, 0x003f, 0x003f, 0xe9c3, 0xc1c9, - 0x003f, 0x003f, 0xe9be, 0xe9c0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe9bf, 0x003f, 0x003f, 0xddb1, 0xdda2, - 0x003f, 0x003f, 0xe9c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe9c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdf6, 0x003f, 0xe2bc, - 0xe9c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c8, 0xb8d7, 0x003f, - 0xb5d4, 0x003f, 0x003f, 0x003f, 0xe9ca, 0xd1dd, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb5f5, 0x003f, 0xceba, 0x003f, 0xb6f3, 0xe9cb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9cc, - 0x003f, 0x003f, 0x003f, 0xc3ee, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9cd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc6fa, 0x003f, 0xb0ba, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb2e3, 0xe9d2, 0xe9d3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe9ce, 0x003f, 0xbbbd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe9cf, 0xc7c2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9d0, 0xe9d1, 0xe9db, 0x003f, 0x003f, 0x003f, 0xe9d5, - 0xe9d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9d4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9d6, 0x003f, 0xe9d7, 0xbcd8, - 0x003f, 0xe9d9, 0x003f, 0xc3c1, 0x003f, 0xb7d6, 0xb3c2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9dc, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3bf, 0x003f, 0xe9e1, 0x003f, 0x003f, 0xe9dd, 0xe9e0, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc8ba, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9de, 0x003f, 0x003f, 0xe9df, 0xc9c8, 0xc8da, 0xe9e2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc2fd, 0xe9ec, 0x003f, 0xe9e8, 0x003f, 0x003f, 0xb2eb, 0x003f, - /* 0x8700 .. 0x87ff */ - 0xe9e6, 0x003f, 0xcbaa, 0xe9e7, 0x003f, 0x003f, 0xe9e4, 0x003f, - 0xe9e5, 0xe9ea, 0xe9ed, 0x003f, 0x003f, 0xe9eb, 0x003f, 0x003f, - 0x003f, 0xe9e9, 0xe9e3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc3d8, 0x003f, 0xe9f4, 0x003f, 0xccaa, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9f2, 0x003f, 0x003f, - 0x003f, 0xe9f3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9ee, 0x003f, 0x003f, 0xe9f0, - 0x003f, 0x003f, 0x003f, 0xe9f1, 0x003f, 0x003f, 0x003f, 0xe9ef, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc0e6, 0x003f, 0xcfb9, 0xe9f8, 0x003f, 0xe9f9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeaa1, 0x003f, 0xbfaa, 0x003f, 0xe9fb, - 0x003f, 0xe9fe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9f6, - 0xe9f5, 0x003f, 0x003f, 0xeaa2, 0x003f, 0x003f, 0xb2dc, 0x003f, - 0xe9fc, 0x003f, 0xeaa3, 0x003f, 0x003f, 0x003f, 0xe9fd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9fa, 0x003f, 0xc4b3, 0x003f, - 0xe9f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc7e8, - 0x003f, 0x003f, 0xeaa7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdbb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaa6, - 0x003f, 0x003f, 0xeaa5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeaae, 0x003f, 0x003f, 0x003f, 0xeaa8, - 0x003f, 0x003f, 0x003f, 0xeab0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcde6, 0xeab3, 0x003f, 0xeaaa, 0x003f, 0x003f, - 0xeaab, 0x003f, 0x003f, 0x003f, 0xeaaf, 0x003f, 0xeab2, 0xeab1, - 0x003f, 0x003f, 0x003f, 0xeaa9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeaac, 0x003f, 0xeabd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeab6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeab4, - 0x003f, 0x003f, 0xeab5, 0x003f, 0x003f, 0x003f, 0xeaba, 0xeabb, - 0x003f, 0xb3aa, 0x003f, 0xb5c2, 0x003f, 0x003f, 0xeab9, 0x003f, - /* 0x8800 .. 0x88ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaa4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeab8, 0xeabc, 0xeab7, - 0x003f, 0xeabe, 0x003f, 0x003f, 0x003f, 0xeac0, 0xeabf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeac2, 0xeac1, 0xe9da, 0x003f, 0x003f, 0x003f, 0xeac6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeac3, 0x003f, 0x003f, 0x003f, 0x003f, 0xeac4, 0x003f, - 0x003f, 0xeac5, 0x003f, 0xeac7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb7ec, 0x003f, 0xeac9, 0x003f, 0xeac8, 0x003f, 0xbdb0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb9d4, 0xdea7, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeaca, 0xbdd1, 0x003f, 0x003f, 0x003f, 0xb3b9, - 0x003f, 0xeacb, 0x003f, 0xb1d2, 0x003f, 0xbed7, 0xeacc, 0x003f, - 0x003f, 0xb9d5, 0xeacd, 0xb0e1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc9bd, 0x003f, 0x003f, 0xeace, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbfea, 0x003f, 0xead5, 0x003f, 0x003f, 0xead2, 0x003f, 0xc3ef, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xead3, 0xead0, 0xb6de, - 0x003f, 0xeacf, 0xead6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb7b6, 0x003f, 0x003f, 0xc2de, 0x003f, 0xeadc, 0x003f, 0x003f, - 0x003f, 0x003f, 0xead8, 0x003f, 0x003f, 0x003f, 0xc2b5, 0xead7, - 0x003f, 0xeada, 0x003f, 0x003f, 0x003f, 0x003f, 0xead1, 0x003f, - 0x003f, 0x003f, 0xeadb, 0x003f, 0xeadd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc8ef, 0x003f, 0x003f, 0xead9, 0x003f, - 0xeade, 0xeae0, 0x003f, 0x003f, 0xb8d3, 0xead4, 0x003f, 0xb0c1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeadf, - 0x003f, 0xbadb, 0xcef6, 0xeae1, 0xeae2, 0xc1f5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcea2, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeae3, 0xcdb5, 0x003f, 0x003f, - 0xeae4, 0xeae5, 0x003f, 0x003f, 0xcae4, 0xeae6, 0x003f, 0xbac0, - 0x003f, 0xcea3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeaeb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeaec, 0xbed8, 0xeaea, 0x003f, 0x003f, 0x003f, - 0xcde7, 0xeae7, 0x003f, 0x003f, 0xeae9, 0xc0bd, 0xbffe, 0x003f, - /* 0x8900 .. 0x89ff */ - 0x003f, 0x003f, 0xeae8, 0x003f, 0xeaed, 0x003f, 0x003f, 0xcaa3, - 0x003f, 0x003f, 0xeaef, 0x003f, 0xeaee, 0x003f, 0x003f, 0x003f, - 0xb3ec, 0x003f, 0xcbab, 0xeaf0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeafc, 0xeaf2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaf3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeaf4, 0xeaf5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaf9, 0x003f, - 0xeafa, 0x003f, 0x003f, 0xeaf8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeaf6, 0x003f, 0xeaf1, 0xeaf7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeafb, 0xf0b7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb2a8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeafe, 0xb6df, - 0xeafd, 0x003f, 0x003f, 0x003f, 0xeba2, 0x003f, 0xeba1, 0x003f, - 0x003f, 0x003f, 0xeba4, 0x003f, 0x003f, 0xeba3, 0x003f, 0xeba5, - 0x003f, 0x003f, 0xbdb1, 0x003f, 0xeba6, 0x003f, 0x003f, 0xeba7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeba8, 0xc0be, - 0x003f, 0xcdd7, 0x003f, 0xeba9, 0x003f, 0x003f, 0xcaa4, 0xc7c6, - 0xebaa, 0x003f, 0xebab, 0xb8ab, 0x003f, 0x003f, 0x003f, 0xb5ac, - 0x003f, 0x003f, 0x003f, 0xebac, 0x003f, 0x003f, 0xbbeb, 0xc7c1, - 0xebad, 0x003f, 0xb3d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xebae, 0x003f, 0x003f, 0x003f, 0x003f, 0xebb0, 0xcdf7, - 0x003f, 0xebaf, 0xbfc6, 0x003f, 0xebb1, 0x003f, 0x003f, 0xebb2, - 0x003f, 0x003f, 0xebb3, 0xb4d1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xebb4, 0x003f, 0x003f, 0xebb5, 0x003f, 0xebb6, - 0xebb7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb3d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xebb8, 0x003f, 0xebb9, 0xebba, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb2f2, 0x003f, 0x003f, 0xbfa8, 0xebbb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xebbc, 0x003f, 0x003f, 0x003f, - 0xebbd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8a00 .. 0x8aff */ - 0xb8c0, 0x003f, 0xc4fb, 0xebbe, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb7d7, 0x003f, 0xbfd6, 0x003f, 0xebc1, 0x003f, 0xc6a4, 0x003f, - 0xebc0, 0x003f, 0x003f, 0xb7b1, 0x003f, 0x003f, 0xebbf, 0xc2f7, - 0xb5ad, 0x003f, 0x003f, 0xebc2, 0x003f, 0xebc3, 0x003f, 0xbed9, - 0x003f, 0x003f, 0x003f, 0xb7ed, 0x003f, 0xebc4, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcbac, 0x003f, 0x003f, 0xc0df, 0x003f, 0x003f, - 0x003f, 0xb5f6, 0x003f, 0xccf5, 0xc1ca, 0x003f, 0xebc5, 0x003f, - 0x003f, 0x003f, 0xbfc7, 0xc3f0, 0xbeda, 0x003f, 0x003f, 0x003f, - 0x003f, 0xebc6, 0x003f, 0x003f, 0x003f, 0x003f, 0xebc9, 0x003f, - 0xebca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbabe, 0xc2c2, 0xebc8, 0x003f, 0xbedb, 0xc9be, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xebc7, 0x003f, 0x003f, 0xbbec, 0x003f, - 0xb1d3, 0x003f, 0xebce, 0xb7d8, 0x003f, 0x003f, 0xbbee, 0x003f, - 0x003f, 0xbbed, 0x003f, 0xcfcd, 0xebcd, 0xebcc, 0xc1a7, 0x003f, - 0xb5cd, 0xcfc3, 0xb3ba, 0xbedc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xebcb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xebd0, 0x003f, 0xebd1, 0xebcf, 0x003f, 0xb8d8, - 0x003f, 0xcdc0, 0x003f, 0x003f, 0xbbef, 0xc7a7, 0x003f, 0x003f, - 0x003f, 0xebd4, 0x003f, 0xc0c0, 0x003f, 0xc3c2, 0x003f, 0x003f, - 0xcdb6, 0x003f, 0xebd7, 0x003f, 0x003f, 0x003f, 0xb8ec, 0x003f, - 0xc0bf, 0xebd3, 0x003f, 0xebd8, 0xb8ed, 0xebd5, 0xebd6, 0x003f, - 0xebd2, 0x003f, 0x003f, 0x003f, 0xc0e2, 0xc6c9, 0x003f, 0x003f, - 0xc3af, 0x003f, 0xb2dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc8f0, 0x003f, 0x003f, 0xb5c3, 0x003f, 0x003f, 0xc4b4, - 0x003f, 0x003f, 0xebdb, 0x003f, 0xebd9, 0x003f, 0x003f, 0xc3cc, - 0x003f, 0x003f, 0x003f, 0xc0c1, 0xb4d2, 0xebda, 0x003f, 0xbfdb, - 0x003f, 0x003f, 0xceca, 0x003f, 0x003f, 0x003f, 0xcfc0, 0x003f, - 0x003f, 0x003f, 0xebdc, 0xebe7, 0xc4b5, 0x003f, 0xebe6, 0x003f, - 0xebe3, 0xebeb, 0xebe4, 0x003f, 0xebe0, 0x003f, 0xc4fc, 0xebdf, - 0x003f, 0x003f, 0x003f, 0xebdd, 0x003f, 0xcda1, 0xbbf0, 0x003f, - 0x003f, 0xebe1, 0x003f, 0xebde, 0x003f, 0x003f, 0x003f, 0xebe5, - 0xbdf4, 0x003f, 0xb8c1, 0x003f, 0x003f, 0x003f, 0xc2fa, 0x003f, - /* 0x8b00 .. 0x8bff */ - 0xcbc5, 0xb1da, 0xb0e2, 0x003f, 0xc6a5, 0x003f, 0x003f, 0xebe9, - 0x003f, 0x003f, 0x003f, 0x003f, 0xebe8, 0x003f, 0xc6e6, 0x003f, - 0xebed, 0x003f, 0x003f, 0x003f, 0xebe2, 0x003f, 0xebec, 0xebee, - 0x003f, 0xb8ac, 0xebea, 0xb9d6, 0x003f, 0xbcd5, 0x003f, 0x003f, - 0xebef, 0xcdd8, 0x003f, 0x003f, 0x003f, 0x003f, 0xebf2, 0x003f, - 0xebf5, 0x003f, 0x003f, 0xebf3, 0xc9b5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xebf0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb6e0, 0x003f, 0x003f, 0x003f, 0x003f, 0xebf4, 0x003f, - 0x003f, 0xebf6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xebfa, 0x003f, 0x003f, 0xebf7, 0x003f, 0xebf9, 0xebf8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebfb, 0x003f, - 0xbcb1, 0x003f, 0xebfd, 0xebfc, 0xc9e8, 0x003f, 0x003f, 0xeca1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7d9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xebfe, 0xeca2, 0x003f, 0x003f, 0xeca3, - 0xb5c4, 0xe6c1, 0xbef9, 0x003f, 0xeca4, 0x003f, 0x003f, 0xb8ee, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeca5, 0x003f, 0x003f, - 0xeca6, 0x003f, 0x003f, 0xbbbe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdace, 0x003f, 0xeca7, 0x003f, 0xeca8, 0x003f, - 0xbdb2, 0x003f, 0xeca9, 0xecaa, 0x003f, 0x003f, 0xecab, 0x003f, - 0x003f, 0xecac, 0xecad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8c00 .. 0x8cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc3ab, - 0x003f, 0x003f, 0xecae, 0x003f, 0x003f, 0x003f, 0x003f, 0xecb0, - 0x003f, 0xecaf, 0x003f, 0x003f, 0x003f, 0x003f, 0xc6a6, 0x003f, - 0xecb1, 0x003f, 0xcbad, 0x003f, 0xecb2, 0x003f, 0xecb3, 0x003f, - 0xecb4, 0x003f, 0x003f, 0x003f, 0x003f, 0xecb5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc6da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbedd, 0xecb6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb9eb, 0xd0ae, 0xecb7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xecb8, 0xc9bf, 0xecb9, 0x003f, 0xecc1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xecba, 0x003f, 0x003f, 0xecbc, 0x003f, 0x003f, - 0x003f, 0xecbb, 0xecbd, 0x003f, 0xcbc6, 0xecbe, 0xecbf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xecc0, 0x003f, 0x003f, 0x003f, - 0xecc2, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3ad, 0xc4e7, 0x003f, - 0xc9e9, 0xbae2, 0xb9d7, 0x003f, 0x003f, 0x003f, 0x003f, 0xc9cf, - 0xb2df, 0xc8ce, 0xecc5, 0xb4d3, 0xc0d5, 0xecc4, 0xecc9, 0xc3f9, - 0xcce3, 0x003f, 0xecc7, 0xecc8, 0xb5ae, 0x003f, 0xecca, 0xc7e3, - 0xc2df, 0x003f, 0x003f, 0xc8f1, 0xc5bd, 0xecc6, 0x003f, 0xcbc7, - 0xb2ec, 0xeccc, 0xcfa8, 0xc4c2, 0xcfc5, 0x003f, 0x003f, 0xbbf1, - 0xeccb, 0x003f, 0xc2b1, 0x003f, 0x003f, 0xecdc, 0xc1a8, 0x003f, - 0x003f, 0xc6f8, 0x003f, 0xc9d0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeccf, 0xbbbf, 0xbbf2, 0x003f, 0xbede, 0x003f, - 0xc7e5, 0x003f, 0xb8ad, 0xecce, 0xeccd, 0x003f, 0xc9ea, 0x003f, - 0x003f, 0x003f, 0xbcc1, 0x003f, 0x003f, 0xc5d2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xecd1, 0xecd2, 0xb9d8, 0xecd0, 0x003f, 0x003f, - /* 0x8d00 .. 0x8dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xecd3, 0xecd4, 0x003f, 0xecd6, - 0xc2a3, 0x003f, 0xecd5, 0xb4e6, 0x003f, 0xecd8, 0x003f, 0xecd7, - 0xecd9, 0x003f, 0x003f, 0xecdb, 0xecdd, 0x003f, 0xecde, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc0d6, 0x003f, 0xbccf, 0xecdf, - 0x003f, 0x003f, 0x003f, 0xb3d2, 0x003f, 0xece0, 0x003f, 0x003f, - 0xc1f6, 0xece1, 0x003f, 0xece2, 0xc9eb, 0x003f, 0x003f, 0xb5af, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xece3, 0x003f, 0x003f, 0x003f, 0xc4b6, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb1db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xece4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbcf1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbff6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc2ad, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xece7, 0x003f, 0x003f, 0x003f, 0xece6, 0x003f, - 0x003f, 0x003f, 0xece5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeced, 0xeceb, 0x003f, 0x003f, 0xece8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecea, 0x003f, - 0x003f, 0x003f, 0xece9, 0xecec, 0x003f, 0xb5f7, 0x003f, 0xecf0, - 0x003f, 0xc0d7, 0x003f, 0xecf1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb8d9, 0x003f, 0xecee, 0xecef, 0x003f, 0x003f, 0x003f, 0xcfa9, - 0x003f, 0x003f, 0x003f, 0xc4b7, 0x003f, 0xc1a9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xecf2, 0x003f, 0x003f, 0xecf5, - /* 0x8e00 .. 0x8eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xecf3, 0xecf4, 0xcdd9, 0x003f, 0x003f, 0x003f, 0x003f, 0xc6a7, - 0xecf8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecf6, 0xecf7, 0xecf9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeda9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xecfc, 0x003f, 0x003f, 0x003f, 0xecfd, 0xecfb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xecfa, 0x003f, 0xc4fd, 0x003f, 0x003f, 0xeda1, - 0xeda5, 0xeda2, 0xecfe, 0x003f, 0xeda3, 0x003f, 0x003f, 0x003f, - 0xeda4, 0x003f, 0x003f, 0x003f, 0x003f, 0xedab, 0x003f, 0x003f, - 0x003f, 0xeda6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0d8, - 0xeda8, 0x003f, 0x003f, 0xedaa, 0xeda7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xedad, 0x003f, 0xbdb3, 0x003f, 0xedac, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xedae, 0x003f, 0x003f, 0x003f, - 0x003f, 0xedaf, 0x003f, 0x003f, 0xedb2, 0xedb1, 0x003f, 0xedb0, - 0x003f, 0x003f, 0xedb4, 0xedb3, 0x003f, 0xccf6, 0x003f, 0x003f, - 0x003f, 0xedb6, 0x003f, 0xedb5, 0xedb7, 0x003f, 0x003f, 0x003f, - 0x003f, 0xedb8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xedba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xedb9, 0xbfc8, 0xedbb, 0x003f, 0x003f, 0xb6ed, - 0xedbc, 0xedbe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedbf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedc0, 0xedbd, 0x003f, - 0xedc1, 0x003f, 0xbcd6, 0xedc2, 0xb5b0, 0xb7b3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb8ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedc3, 0x003f, 0x003f, 0x003f, 0xc6f0, - 0x003f, 0x003f, 0xc5be, 0xedc4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedc7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbcb4, 0x003f, 0x003f, 0xedc6, 0xedc5, 0xb7da, 0xedc8, 0x003f, - /* 0x8f00 .. 0x8fff */ - 0x003f, 0x003f, 0x003f, 0xb3d3, 0x003f, 0xedca, 0x003f, 0x003f, - 0x003f, 0xbadc, 0xedc9, 0x003f, 0xedd2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xedcc, 0xedce, 0xcae5, 0xedcb, 0x003f, 0x003f, - 0x003f, 0xedcd, 0x003f, 0xedd1, 0xedcf, 0xb5b1, 0x003f, 0xedd0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedd3, 0x003f, - 0x003f, 0xc7da, 0xced8, 0x003f, 0x003f, 0x003f, 0x003f, 0xbdb4, - 0x003f, 0x003f, 0x003f, 0xedd4, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcda2, 0xedd6, 0x003f, 0xedd5, 0x003f, 0x003f, 0xedd9, 0xcdc1, - 0x003f, 0x003f, 0xedd8, 0x003f, 0xb3ed, 0xedd7, 0xeddc, 0x003f, - 0x003f, 0xeddb, 0x003f, 0x003f, 0xedda, 0xc5b2, 0xeddd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedde, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeddf, 0x003f, 0x003f, 0xb9ec, - 0x003f, 0xb7a5, 0xede0, 0xede1, 0xede2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbfc9, 0xede3, 0x003f, 0xbcad, 0xede4, - 0x003f, 0x003f, 0x003f, 0xede5, 0x003f, 0x003f, 0x003f, 0xd2a1, - 0xd1fe, 0x003f, 0x003f, 0x003f, 0x003f, 0xede6, 0xe5f0, 0xede7, - 0xc3a4, 0xbfab, 0xc7c0, 0x003f, 0x003f, 0x003f, 0x003f, 0xede8, - 0x003f, 0x003f, 0xcad5, 0xc4d4, 0xb9fe, 0x003f, 0x003f, 0xc3a9, - 0x003f, 0x003f, 0xb1aa, 0x003f, 0xcbf8, 0xbfd7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7de, 0x003f, - 0x003f, 0xb6e1, 0x003f, 0x003f, 0xcad6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xede9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xedeb, 0x003f, 0x003f, 0xedea, 0xb2e0, 0x003f, - 0x003f, 0xc6f6, 0xedec, 0xc7f7, 0x003f, 0xc5b3, 0x003f, 0xeded, - 0xbdd2, 0x003f, 0x003f, 0x003f, 0xedef, 0x003f, 0x003f, 0xccc2, - 0xedfe, 0xedf1, 0xedf2, 0x003f, 0x003f, 0xc4c9, 0x003f, 0x003f, - /* 0x9000 .. 0x90ff */ - 0xc2e0, 0xc1f7, 0x003f, 0xc6a8, 0x003f, 0xedf0, 0xb5d5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedf9, 0x003f, 0xedf6, 0xeea5, 0xc6a9, - 0xc3e0, 0xedf3, 0x003f, 0xc4fe, 0xc5d3, 0xedf4, 0xedf8, 0xbfe0, - 0x003f, 0xc7e7, 0xc4cc, 0x003f, 0x003f, 0xc0c2, 0xedf7, 0xc2ae, - 0xc2a4, 0xedf5, 0xb0a9, 0xcfa2, 0x003f, 0x003f, 0x003f, 0xedfa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2e1, 0x003f, - 0x003f, 0xbdb5, 0xbfca, 0x003f, 0x003f, 0xedfc, 0xedfb, 0x003f, - 0xb0ef, 0xedfd, 0x003f, 0x003f, 0xc9af, 0x003f, 0xeea7, 0x003f, - 0x003f, 0xc6db, 0xbfeb, 0x003f, 0x003f, 0xc3d9, 0x003f, 0xb6f8, - 0x003f, 0xeea6, 0xcdb7, 0xb1bf, 0x003f, 0xcad7, 0xb2e1, 0xeea1, - 0xeea2, 0xeea3, 0xeea4, 0xc6bb, 0xc3a3, 0xb0e3, 0xeea8, 0x003f, - 0xeea9, 0xf4a3, 0x003f, 0x003f, 0xc2bd, 0x003f, 0xeeaa, 0x003f, - 0xb1f3, 0xc1cc, 0x003f, 0xb8af, 0x003f, 0xcdda, 0x003f, 0x003f, - 0xeeab, 0xc5ac, 0x003f, 0x003f, 0x003f, 0xc1f8, 0xbcd7, 0xeeac, - 0x003f, 0x003f, 0xeeaf, 0x003f, 0x003f, 0xbde5, 0xeead, 0xc1ab, - 0xc1aa, 0x003f, 0xb0e4, 0x003f, 0xcecb, 0xeeb1, 0x003f, 0xc8f2, - 0xeeb3, 0xeeb2, 0xeeb0, 0xe3e4, 0xb4d4, 0x003f, 0x003f, 0xedee, - 0x003f, 0xeeb5, 0xeeb4, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeb6, - 0x003f, 0xcdb8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc6e1, 0x003f, 0x003f, 0xcbae, 0x003f, - 0xeeb7, 0x003f, 0xbcd9, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeb8, - 0x003f, 0xeeb9, 0x003f, 0x003f, 0x003f, 0xeeba, 0x003f, 0x003f, - 0xc5a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb0ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb9d9, 0x003f, 0x003f, 0x003f, 0xcfba, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeebe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb7b4, 0xeebb, 0x003f, 0xeebc, 0x003f, 0x003f, 0x003f, - 0xc9f4, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3d4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdb9, 0x003f, 0xb6bf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5d4, 0x003f, 0x003f, - /* 0x9100 .. 0x91ff */ - 0x003f, 0x003f, 0xeebf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeec0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeec1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5a2, 0x003f, 0x003f, - 0xeec3, 0x003f, 0xeec2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc6d3, 0xeec4, 0xbdb6, 0xbce0, 0xc7db, 0xc3f1, 0x003f, - 0x003f, 0x003f, 0xbcf2, 0x003f, 0xbfec, 0x003f, 0xeec5, 0x003f, - 0xeec6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbfdd, 0xeec7, 0x003f, 0xeec8, 0x003f, 0x003f, - 0x003f, 0xeec9, 0xcdef, 0x003f, 0xbdb7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeecb, 0xeeca, 0x003f, 0xb9da, 0x003f, 0xb9f3, - 0xbbc0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeece, 0x003f, 0x003f, 0x003f, 0x003f, 0xbde6, - 0x003f, 0xeecd, 0x003f, 0xeecc, 0x003f, 0xc2e9, 0x003f, 0x003f, - 0xb8ef, 0x003f, 0xc0c3, 0x003f, 0x003f, 0x003f, 0x003f, 0xc8b0, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbdb9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeecf, 0x003f, 0xbedf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeed2, 0xeed0, 0x003f, 0x003f, 0x003f, 0xeed1, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeed4, 0xeed3, 0x003f, 0x003f, - 0xbefa, 0x003f, 0xeed5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeed6, 0xeed7, 0x003f, 0x003f, 0x003f, 0x003f, 0xc8d0, 0xbad3, - 0xbce1, 0xeed8, 0x003f, 0xeed9, 0xcea4, 0xbdc5, 0xccee, 0xcecc, - 0xeeda, 0xb6e2, 0x003f, 0x003f, 0x003f, 0x003f, 0xeedb, 0x003f, - 0xc5a3, 0x003f, 0x003f, 0xeede, 0xb3f8, 0xbfcb, 0x003f, 0xeedc, - 0x003f, 0xeedd, 0x003f, 0xc4e0, 0x003f, 0x003f, 0xcbd5, 0xb6fc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeee0, 0xeee1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeedf, 0x003f, 0x003f, 0xeee3, - /* 0x9200 .. 0x92ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc6df, 0xb3c3, 0x003f, - 0x003f, 0xeee7, 0x003f, 0x003f, 0xeee4, 0xeee6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeee2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefcf, 0x003f, 0x003f, 0xeee5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xceeb, 0x003f, 0x003f, 0xb8da, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeef, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc5b4, 0xeeea, 0x003f, 0x003f, - 0xeeed, 0xeeeb, 0x003f, 0xeef0, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeef1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeee9, - 0x003f, 0x003f, 0xeef6, 0xb1f4, 0x003f, 0x003f, 0xeee8, 0x003f, - 0x003f, 0x003f, 0xc8ad, 0x003f, 0xeeec, 0x003f, 0xbee0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb9db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbc8, 0x003f, - 0xb6e4, 0x003f, 0x003f, 0xbdc6, 0x003f, 0xc6bc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc1ad, 0x003f, 0xeef4, 0x003f, 0xeeee, 0xeef3, 0x003f, - 0xccc3, 0x003f, 0xc4b8, 0xeef5, 0xeef2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc1ac, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeef9, - 0x003f, 0xeef8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeef7, - 0x003f, 0x003f, 0xcbaf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbdfb, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeefa, 0xcadf, 0x003f, 0x003f, 0xb1d4, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc9c6, 0xc3f2, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb5f8, 0x003f, 0xeefc, 0x003f, 0xb9dd, 0x003f, 0x003f, 0x003f, - /* 0x9300 .. 0x93ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbbac, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeefb, - 0xbfed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbfee, 0xefa1, 0xefa3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbefb, 0x003f, 0xefa2, 0xefa4, 0x003f, 0x003f, 0xb6d3, 0x003f, - 0xc9c5, 0x003f, 0x003f, 0xbce2, 0xcfa3, 0x003f, 0xeefe, 0xbaf8, - 0x003f, 0x003f, 0xcfbf, 0x003f, 0x003f, 0xefa6, 0x003f, 0x003f, - 0x003f, 0x003f, 0xefa5, 0xefa7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeefd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc6e9, 0x003f, 0xc5d5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc4d7, 0x003f, 0xefac, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc3c3, 0xefa8, 0x003f, 0x003f, 0x003f, - 0xefa9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb7ad, 0x003f, 0xefab, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb8b0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xefaa, 0x003f, 0xbee1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb3f9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xefb0, 0x003f, 0xbabf, 0xc1f9, - 0x003f, 0x003f, 0xc4ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3bb, - 0x003f, 0x003f, 0x003f, 0x003f, 0xefae, 0xefaf, 0xc4c3, 0x003f, - 0xefad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefb1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xefb7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefb9, 0xc5ad, 0x003f, 0x003f, 0x003f, 0x003f, 0xefb2, 0xefb3, - 0xefb6, 0x003f, 0x003f, 0x003f, 0x003f, 0xefb8, 0x003f, 0x003f, - 0x003f, 0xb6c0, 0x003f, 0x003f, 0xefbb, 0xefb5, 0x003f, 0x003f, - 0xefb4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9400 .. 0x94ff */ - 0x003f, 0x003f, 0x003f, 0xefbf, 0x003f, 0x003f, 0x003f, 0xefc0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefc1, 0x003f, 0x003f, 0xefbe, 0xefbd, 0x003f, 0x003f, 0x003f, - 0xbee2, 0xc6aa, 0xefbc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefc5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xefc3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefc4, 0xefc2, 0x003f, - 0xc2f8, 0x003f, 0xefc6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefc7, 0x003f, 0x003f, 0xefc9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb4d5, 0xefc8, 0xccfa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xefd4, 0xefca, 0x003f, 0x003f, 0xefcd, 0x003f, - 0xefcb, 0x003f, 0xefcc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xefce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefd0, 0x003f, 0x003f, 0x003f, 0x003f, 0xefd1, 0x003f, 0xefd2, - 0x003f, 0x003f, 0x003f, 0x003f, 0xefd5, 0xefd3, 0xefd6, 0xefd8, - 0x003f, 0xefd7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9500 .. 0x95ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4b9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcce7, 0x003f, 0xefd9, 0xc1ae, 0x003f, 0x003f, 0x003f, 0xefda, - 0x003f, 0xcac4, 0xefdb, 0xb3ab, 0x003f, 0x003f, 0x003f, 0xb1bc, - 0x003f, 0xb4d7, 0x003f, 0xb4d6, 0xefdc, 0x003f, 0xefdd, 0x003f, - 0xefde, 0xefdf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefe0, 0x003f, 0xb4d8, 0xb3d5, 0xb9de, 0xc8b6, 0x003f, 0xefe2, - 0xefe1, 0x003f, 0x003f, 0x003f, 0x003f, 0xefe3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb1dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefe6, 0x003f, 0xefe5, 0xefe4, 0x003f, 0xefe7, 0x003f, - 0x003f, 0x003f, 0x003f, 0xefea, 0x003f, 0x003f, 0x003f, 0xb0c7, - 0x003f, 0x003f, 0xefe8, 0x003f, 0xefec, 0xefeb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xefee, 0xefed, 0xefef, 0x003f, - 0xc6ae, 0x003f, 0x003f, 0x003f, 0xeff0, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeff1, 0xeff3, 0x003f, 0x003f, 0xeff2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9600 .. 0x96ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc9ec, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeff4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeff5, 0x003f, 0xbae5, 0x003f, 0x003f, 0x003f, 0xeff6, 0xeff7, - 0x003f, 0x003f, 0xcbc9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc1cb, 0x003f, 0x003f, 0x003f, 0xb0a4, - 0xc2cb, 0x003f, 0xeff8, 0x003f, 0xc9ed, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeffb, 0xeff9, 0xb9df, 0x003f, 0xeffa, - 0xb8c2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcac5, 0xeffd, 0xf0a1, 0xeffe, 0xf0a2, - 0x003f, 0x003f, 0xb1a1, 0xbfd8, 0xbdfc, 0xb4d9, 0xf0a3, 0x003f, - 0x003f, 0x003f, 0xc7e6, 0x003f, 0xf0a5, 0x003f, 0x003f, 0x003f, - 0xb1a2, 0x003f, 0xf0a4, 0xc4c4, 0x003f, 0xcecd, 0xc6ab, 0xeffc, - 0xcea6, 0x003f, 0xb8b1, 0x003f, 0x003f, 0xcddb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6f9, 0xceb4, 0x003f, - 0xb7a8, 0x003f, 0xc2e2, 0xe7a1, 0x003f, 0xf0a6, 0xb3ac, 0xbfef, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb3d6, 0xf0a8, 0x003f, 0xf0a9, - 0xf0a7, 0xb7e4, 0x003f, 0xbadd, 0xbee3, 0x003f, 0x003f, 0x003f, - 0xb1a3, 0x003f, 0x003f, 0xced9, 0x003f, 0x003f, 0x003f, 0xf0ab, - 0xeeae, 0x003f, 0xf0aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf0ae, 0xf0ac, 0xf0ad, 0x003f, 0xf0af, 0x003f, 0xf0b0, 0xceec, - 0xf0b1, 0xf0b2, 0x003f, 0xc0c9, 0xc8bb, 0x003f, 0x003f, 0x003f, - 0xbffd, 0xb4e7, 0x003f, 0x003f, 0xcdba, 0xb2ed, 0xbdb8, 0xb8db, - 0x003f, 0xf0b5, 0x003f, 0xf0b4, 0xbbf3, 0xf0b6, 0xf0b3, 0x003f, - 0x003f, 0xbba8, 0x003f, 0x003f, 0x003f, 0xf0ba, 0xeaad, 0x003f, - 0x003f, 0xd2d6, 0x003f, 0xbff7, 0xf0b8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcea5, 0xc6f1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb1ab, 0x003f, 0xc0e3, 0xbcb6, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcab7, 0x003f, 0xb1c0, 0x003f, 0x003f, 0x003f, 0xceed, 0xcdeb, - 0x003f, 0xf0bb, 0x003f, 0xc5c5, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9700 .. 0x97ff */ - 0xbcfb, 0x003f, 0x003f, 0x003f, 0xf0bc, 0x003f, 0xf0bd, 0xbfcc, - 0xf0be, 0x003f, 0xceee, 0x003f, 0x003f, 0xf0b9, 0xf0c0, 0xf0c2, - 0x003f, 0xf0c1, 0x003f, 0xf0bf, 0x003f, 0x003f, 0xf0c3, 0x003f, - 0x003f, 0xf0c4, 0x003f, 0x003f, 0xc1fa, 0x003f, 0xb2e2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf0c5, 0x003f, 0x003f, 0xccb8, - 0x003f, 0x003f, 0xf0c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf0c7, 0x003f, 0xcfaa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdbb1, 0xf0c8, 0x003f, 0x003f, 0x003f, 0xf0c9, 0xf0ca, 0x003f, - 0x003f, 0x003f, 0xf0ce, 0x003f, 0xf0cb, 0x003f, 0xf0cc, 0x003f, - 0xf0cd, 0xf0cf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc0c4, 0x003f, 0x003f, 0x003f, 0xccf7, 0x003f, - 0x003f, 0xc0c5, 0x003f, 0x003f, 0xf0d0, 0x003f, 0xc8f3, 0x003f, - 0xf0d1, 0xf3d3, 0xcccc, 0x003f, 0xf0d2, 0x003f, 0xf0d3, 0x003f, - 0xf0d4, 0xb3d7, 0x003f, 0xf0d6, 0x003f, 0xbfd9, 0x003f, 0x003f, - 0x003f, 0xf0d7, 0x003f, 0x003f, 0xb7a4, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf0d8, 0xf0dc, 0x003f, 0xf0da, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf0db, 0x003f, 0x003f, 0xb3f3, 0xf0d9, 0xf0dd, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0de, 0x003f, 0xb0c8, 0x003f, 0xf0df, - 0xf0e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbee4, 0x003f, 0x003f, 0x003f, 0xf0e1, 0x003f, 0x003f, 0x003f, - 0xb5c7, 0x003f, 0x003f, 0xf0e4, 0x003f, 0x003f, 0xf0e3, 0x003f, - 0xf0e2, 0x003f, 0x003f, 0xebf1, 0x003f, 0xcadc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0e5, 0xf0e6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0e7, 0x003f, 0x003f, 0xf0e8, 0x003f, - 0xf0e9, 0x003f, 0x003f, 0xf0ea, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb4da, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf0eb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0ec, 0xc7a3, 0x003f, - 0x003f, 0x003f, 0xf0ee, 0xb2bb, 0x003f, 0xf0f1, 0xf0f0, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb1a4, 0x003f, 0x003f, 0x003f, 0xb6c1, - /* 0x9800 .. 0x98ff */ - 0x003f, 0xcac7, 0xc4ba, 0xbaa2, 0x003f, 0xb9e0, 0xbde7, 0x003f, - 0xbfdc, 0x003f, 0x003f, 0x003f, 0xf0f3, 0x003f, 0x003f, 0xf0f2, - 0xcdc2, 0xb4e8, 0xc8d2, 0xc6dc, 0x003f, 0x003f, 0x003f, 0xbffc, - 0xcece, 0x003f, 0xb7db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf0f6, 0x003f, 0x003f, 0xf0f5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcbcb, 0xc6ac, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb1d0, 0x003f, 0x003f, 0xf0f7, - 0xf0f4, 0x003f, 0x003f, 0xc9d1, 0xcdea, 0xf0f8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0f9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0fb, 0xc2ea, 0xb3db, 0xb3dc, 0xf0fa, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb4e9, 0xb8b2, 0x003f, 0x003f, - 0xb4ea, 0x003f, 0x003f, 0xc5bf, 0x003f, 0x003f, 0xcee0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb8dc, - 0x003f, 0x003f, 0x003f, 0xf0fc, 0x003f, 0x003f, 0x003f, 0xf0fd, - 0xf0fe, 0xf1a1, 0x003f, 0xf1a3, 0xf1a2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc9f7, 0x003f, 0xf1a4, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1a5, - 0x003f, 0xf1a6, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1a7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf1a9, 0xf1a8, 0x003f, 0xf1aa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc8f4, 0xe6cc, 0x003f, 0x003f, 0xbfa9, - 0x003f, 0x003f, 0xb5b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf1ab, 0x003f, 0xf1ac, 0x003f, 0xd2ac, 0xddbb, 0xc8d3, - 0x003f, 0x003f, 0xb0fb, 0x003f, 0xb0bb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbbf4, 0xcbb0, 0xbefe, 0x003f, - /* 0x9900 .. 0x99ff */ - 0x003f, 0x003f, 0x003f, 0xf1ad, 0x003f, 0xccdf, 0x003f, 0x003f, - 0x003f, 0xf1ae, 0xcddc, 0x003f, 0xb1c2, 0x003f, 0x003f, 0x003f, - 0xbbc1, 0x003f, 0xf1af, 0xb2ee, 0xf1b0, 0x003f, 0x003f, 0x003f, - 0xf1b1, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1b3, 0xf1b4, 0x003f, - 0xf1b6, 0xf1b2, 0x003f, 0x003f, 0xf1b5, 0x003f, 0x003f, 0x003f, - 0xb4db, 0x003f, 0x003f, 0x003f, 0xf1b7, 0x003f, 0xf1b8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1b9, 0xf1ba, 0x003f, - 0x003f, 0x003f, 0xf1bb, 0x003f, 0x003f, 0xf1bd, 0x003f, 0x003f, - 0x003f, 0xf1bc, 0x003f, 0xf1bf, 0xf1c2, 0x003f, 0x003f, 0x003f, - 0xf1be, 0xf1c0, 0xf1c1, 0x003f, 0x003f, 0xf1c3, 0x003f, 0xb6c2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbcf3, 0xf1c4, - 0xf1c5, 0xb9e1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1c6, 0x003f, 0x003f, - 0xb3be, 0x003f, 0x003f, 0x003f, 0xc7cf, 0xf1c7, 0xf1c8, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc3da, 0xc6eb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf1c9, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc7fd, 0x003f, 0x003f, 0xc2cc, 0xb1d8, 0xb6ee, 0x003f, - 0xb6ef, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc3f3, 0xf1ce, 0xb6f0, 0x003f, 0x003f, 0xb2ef, 0x003f, 0x003f, - 0xf1cd, 0x003f, 0x003f, 0xf1cb, 0x003f, 0xf1cc, 0x003f, 0xf1ca, - 0x003f, 0x003f, 0xf1d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1cf, 0xf1d0, 0x003f, - 0x003f, 0xf1d1, 0xf1d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf1d4, 0x003f, 0x003f, 0xf1d3, 0x003f, 0x003f, 0x003f, 0xbdd9, - /* 0x9a00 .. 0x9aff */ - 0x003f, 0xf1d5, 0x003f, 0x003f, 0x003f, 0xf1d7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb5b3, 0xf1d6, - 0x003f, 0x003f, 0xc1fb, 0xb8b3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf1d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc2cd, 0x003f, 0x003f, 0xf1da, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc6ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1db, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1e0, 0x003f, - 0xf1de, 0x003f, 0xf1dd, 0xf1df, 0x003f, 0xf1dc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1e2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1e1, 0x003f, 0xf1e4, - 0x003f, 0x003f, 0xb6c3, 0xf1e3, 0x003f, 0x003f, 0x003f, 0xf1e5, - 0x003f, 0x003f, 0xf1e6, 0x003f, 0xf1e8, 0xf1e7, 0x003f, 0x003f, - 0x003f, 0xf1e9, 0xf1eb, 0xf1ea, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb9fc, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1ec, 0x003f, 0x003f, - 0xf1ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb3bc, 0x003f, 0x003f, 0x003f, 0xf1ee, 0x003f, 0x003f, 0x003f, - 0xf1ef, 0x003f, 0x003f, 0x003f, 0xbff1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1f0, - 0x003f, 0xf1f1, 0x003f, 0xf1f2, 0xf1f3, 0x003f, 0x003f, 0x003f, - 0xb9e2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1f4, 0xf1f5, - 0x003f, 0x003f, 0xf1f6, 0xf1f7, 0x003f, 0x003f, 0xf1f8, 0x003f, - 0x003f, 0x003f, 0xc8b1, 0xf1fa, 0x003f, 0xc9a6, 0xf1fb, 0xf1f9, - 0x003f, 0xf1fd, 0x003f, 0x003f, 0xf1fc, 0x003f, 0x003f, 0xf1fe, - 0x003f, 0x003f, 0x003f, 0xf2a1, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9b00 .. 0x9bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2a2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf2a3, 0x003f, 0xf2a4, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2a5, - 0x003f, 0x003f, 0xf2a6, 0xf2a7, 0x003f, 0xf2a8, 0x003f, 0xf2a9, - 0xf2aa, 0xf2ab, 0xf2ac, 0x003f, 0x003f, 0x003f, 0xf2ad, 0xf2ae, - 0x003f, 0xddb5, 0xf2af, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4f8, 0xb5b4, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3a1, 0xbab2, 0xf2b1, 0xf2b0, 0xcca5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2b3, 0xf2b4, 0xf2b2, - 0x003f, 0xf2b5, 0x003f, 0x003f, 0xcbe2, 0x003f, 0x003f, 0x003f, - 0xf2b6, 0x003f, 0xb5fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfa5, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf2b7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf2b9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb0be, 0x003f, - 0x003f, 0xf2ba, 0xcaab, 0xf2b8, 0x003f, 0x003f, 0xf2bb, 0xf2bc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2bd, - 0xf2be, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf2bf, 0x003f, 0xcbee, 0xbbad, 0x003f, 0xbafa, 0xc1af, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf2c0, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf2c3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf2c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2c4, 0x003f, - 0x003f, 0xb8f1, 0xf2c2, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2c5, - 0x003f, 0xf2c6, 0xf2c7, 0x003f, 0xf2cb, 0x003f, 0xbbaa, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc2e4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf2cc, 0xf2c9, 0xf2c8, 0xf2ca, 0x003f, 0x003f, 0x003f, - 0xb7df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf2d0, 0xf2cf, 0xf2ce, 0x003f, 0x003f, 0xb0b3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9c00 .. 0x9cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xf2da, 0x003f, 0xf2d6, 0x003f, - 0xf2d7, 0xf2d3, 0xf2d9, 0x003f, 0xf2d5, 0xb3e2, 0x003f, 0x003f, - 0xcfcc, 0x003f, 0xf2d8, 0xf2d4, 0xf2d2, 0xf2d1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf2dc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf2df, 0x003f, 0x003f, 0xf2de, 0xf2dd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc9c9, 0xf2db, 0xb0f3, - 0xf2e0, 0x003f, 0xf2e2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3ef, 0xf2cd, 0xb1b7, 0x003f, 0x003f, 0xf2e4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2e3, 0xf2e1, - 0xc3ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcbf0, 0x003f, 0x003f, 0x003f, 0x003f, 0xceda, - 0x003f, 0x003f, 0xf2e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf2e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2e7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2e8, 0x003f, - 0xf2e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4bb, 0x003f, 0xf2ea, - 0x003f, 0xc8b7, 0x003f, 0xf2ef, 0xf2eb, 0x003f, 0x003f, 0x003f, - 0xf2ec, 0x003f, 0x003f, 0xcbb1, 0xccc4, 0x003f, 0xc6d0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9d00 .. 0x9dff */ - 0x003f, 0x003f, 0x003f, 0xf2f0, 0x003f, 0x003f, 0xf2f1, 0xc6be, - 0xf2ee, 0xf2ed, 0x003f, 0x003f, 0x003f, 0x003f, 0xb2aa, 0x003f, - 0x003f, 0x003f, 0xf2f9, 0x003f, 0x003f, 0xf2f8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb1f5, 0x003f, 0x003f, 0x003f, 0xf2f6, - 0x003f, 0x003f, 0x003f, 0xf2f5, 0x003f, 0x003f, 0xf2f3, 0x003f, - 0xb3fb, 0x003f, 0xf2f2, 0xbcb2, 0xb2a9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb9e3, 0x003f, 0x003f, 0xf2fc, 0xf2fb, - 0x003f, 0xf2fa, 0x003f, 0x003f, 0xf2f7, 0x003f, 0xf2fd, 0x003f, - 0xf2fe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf3a5, 0xf3a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf3a6, 0x003f, 0x003f, 0xb1ad, 0xf3a1, 0xf3a2, 0x003f, - 0xb9f4, 0xccb9, 0x003f, 0x003f, 0xf3a3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcbb2, 0x003f, 0x003f, 0xf3ab, - 0x003f, 0x003f, 0xf3a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3a9, - 0x003f, 0xf3a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7dc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf3ae, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf3af, 0x003f, 0xf3aa, 0x003f, 0x003f, 0x003f, 0xf2f4, - 0x003f, 0x003f, 0xf3b0, 0x003f, 0xc4e1, 0x003f, 0x003f, 0x003f, - 0xf3b4, 0x003f, 0xf3b5, 0xf3b3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf3b2, 0xf3b8, 0x003f, 0xf3b1, 0x003f, 0xf3b6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3b7, - 0x003f, 0x003f, 0x003f, 0xf3ba, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf3b9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3bc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3bd, 0x003f, 0xf3be, - 0x003f, 0x003f, 0xcfc9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf3bb, 0xc2eb, 0xbaed, 0x003f, 0x003f, 0xf3bf, 0x003f, 0x003f, - /* 0x9e00 .. 0x9eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3c0, 0xf3c1, 0x003f, 0x003f, 0xf3c2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3c3, 0x003f, 0x003f, - 0xb8b4, 0xf3c4, 0x003f, 0x003f, 0x003f, 0xf3c5, 0x003f, 0xbcaf, - 0x003f, 0xf3c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf3c7, 0x003f, 0x003f, 0xf3c8, 0xf3c9, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf3cc, 0xf3ca, 0xcfbc, 0x003f, 0xf3cb, 0x003f, 0xceef, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3cd, 0x003f, 0xcedb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3ce, 0xc7fe, 0x003f, - 0x003f, 0xf3cf, 0xf3d1, 0x003f, 0x003f, 0xf3d2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf3d0, 0xb9ed, 0xcccd, 0xcbe3, 0xd6f7, 0x003f, 0xdde0, 0xcbfb, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb2ab, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf3d4, 0xb5d0, 0xf3d5, 0xf3d6, - 0xf3d7, 0x003f, 0xb9f5, 0x003f, 0xf3d8, 0x003f, 0x003f, 0x003f, - 0xe0d4, 0xccdb, 0x003f, 0xc2e3, 0xf3d9, 0xf3db, 0xf3da, 0x003f, - 0xf3dc, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3dd, 0x003f, 0x003f, - 0xf3de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3df, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf3e0, 0x003f, 0xf3e1, 0xf3e2, - 0x003f, 0xf3e3, 0x003f, 0xf3e4, 0xf3e5, 0xf3e6, 0x003f, 0x003f, - /* 0x9f00 .. 0x9fff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3e7, - 0xf3e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc5a4, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb8dd, 0x003f, 0xf3ea, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc1cd, 0xf3eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf3ec, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xc9a1, 0x003f, 0x003f, 0xf3ed, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3ee, 0xe3b7, 0x003f, 0x003f, 0xecda, 0xf0ed, - 0x003f, 0x003f, 0xf3ef, 0x003f, 0xf3f0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3f2, - 0xf3f3, 0xf3f4, 0xcef0, 0xf3f1, 0x003f, 0x003f, 0xf3f5, 0xf3f6, - 0x003f, 0x003f, 0xf3f8, 0x003f, 0xf3f7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3fa, 0x003f, 0x003f, 0x003f, 0xf3fb, 0xf3f9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xceb6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3fc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf3fd, 0xe3d4, 0x003f, 0x003f, - 0xf3fe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xf900 .. 0xf9ff */ - 0xecb1, 0xb9b9, 0xbcd6, 0xeccb, 0xb3ea, 0xb6fa, 0xb6e7, 0xf3fd, - 0xf3fd, 0xb7c0, 0xb6e2, 0xd3c9, 0xc6e0, 0xd8f1, 0xe1fa, 0xcde5, - 0xe9c7, 0xcde6, 0xcde7, 0xeeb6, 0xdcdb, 0xcdec, 0xdfe0, 0xe0e4, - 0xcdee, 0xcdef, 0xf1d1, 0xd0ac, 0xcdf1, 0xcdf3, 0xe0a5, 0xcdf6, - 0xf3c2, 0xcdf2, 0xcdf4, 0xcdf5, 0xeba2, 0xd9c7, 0xe7c4, 0x003f, - 0xcfad, 0xcfaf, 0xcfb2, 0xcfb5, 0xcfba, 0xd0d4, 0xcee4, 0xd2a9, - 0x003f, 0xcfa6, 0xe0a4, 0xe2ba, 0xcfb7, 0xe9c3, 0xceba, 0xcfa9, - 0xcfaa, 0xcfa5, 0xbaed, 0xe2f1, 0xe3b3, 0x003f, 0x003f, 0x003f, - 0xbcaf, 0xcfc0, 0xd4e2, 0xcfae, 0xe4c6, 0xcfb8, 0xcfb4, 0xe2fd, - 0xcfa8, 0xcdeb, 0xd4de, 0x003f, 0xdcec, 0x003f, 0xcfb3, 0xcedf, - 0xe5df, 0xeffb, 0xf0d5, 0xcfbe, 0xf4a5, 0xcebf, 0xcec7, 0xb0bd, - 0xc9a9, 0xcecd, 0xeca6, 0xd9bc, 0xdcdb, 0xc2fa, 0xc3b0, 0xc7ab, - 0xc5dc, 0xcea8, 0xb0db, 0xcbcc, 0x003f, 0xcad8, 0xc9fc, 0xc9d4, - 0xc8e7, 0xdacb, 0xbaf7, 0xd2d4, 0xbac9, 0xbeca, 0xcdd5, 0x003f, - 0xbba6, 0xc3a4, 0xc4c0, 0xbda6, 0xbce3, 0xceab, 0xceac, 0xcebc, - 0xd1c0, 0xd1da, 0xcec2, 0xcec8, 0xcec9, 0xceca, 0xcecc, 0xd2af, - 0xcfa4, 0xbdf7, 0xd7aa, 0xceb9, 0xdfc9, 0xe2ea, 0xefe3, 0xf1eb, - 0xceef, 0xf3d5, 0xcecf, 0x003f, 0x003f, 0xede0, 0xc7af, 0xcef9, - 0xd8f8, 0xc7b2, 0xcefa, 0xcefb, 0x003f, 0x003f, 0xcefd, 0xcefe, - 0xedd3, 0xcfa1, 0xcfa2, 0x003f, 0xcef3, 0xcef4, 0xb0f6, 0xcef5, - 0xcef6, 0x003f, 0xcef7, 0xc7b0, 0xc7b1, 0x003f, 0xcefc, 0xe0da, - 0xcee1, 0xd3fa, 0xc7ab, 0xcee6, 0xcee7, 0xcee8, 0xe0f2, 0xe6b9, - 0xe6d9, 0xceeb, 0xceed, 0xf0cd, 0xcece, 0xcee3, 0xe3b9, 0xeed4, - 0xf0b1, 0xd8a8, 0xcebb, 0xcebd, 0xcec0, 0xc7a2, 0xcec1, 0xdcdb, - 0xdff9, 0xcec5, 0xe8fa, 0xcecb, 0xceb6, 0xdaf4, 0xeff6, 0xcead, - 0x003f, 0xccf8, 0xceae, 0xceaf, 0xceb0, 0xceb1, 0xceb2, 0xc9b3, - 0xcee0, 0xcfbb, 0xd9a4, 0xcea6, 0xced1, 0xd6c6, 0xdecd, 0xced8, - 0xcea7, 0xd8cb, 0xb7aa, 0xcea8, 0xceb4, 0xcdf8, 0xcdf9, 0xcdfa, - 0xb0d7, 0xcdfb, 0xcdfc, 0xc5a5, 0xcdfd, 0xcea1, 0xd8ed, 0xcea2, - 0xcea3, 0xcea4, 0xcea5, 0xc6bf, 0xc5ae, 0xd2e7, 0xced5, 0x003f, - 0xe9c2, 0xced9, 0xceda, 0xcedb, 0xced3, 0xced4, 0xced7, 0xcea9, - 0xb3de, 0xceb3, 0x003f, 0xdfd5, 0xbcb1, 0xbdba, 0xc3e3, 0xbbc9, - /* 0xfa00 .. 0xfaff */ - 0xc0da, 0xc5d9, 0xc2f3, 0xc5fc, 0xc2f0, 0xc6b6, 0xcbbd, 0xedd5, - 0xb9d4, 0xb9df, 0xb8ab, 0xb3c7, 0xd1ba, 0x003f, 0x003f, 0x003f, - 0xc4cd, 0x003f, 0xc0b2, 0x003f, 0x003f, 0x003f, 0xc3f6, 0xb1d7, - 0xcee9, 0xbfc0, 0xbecd, 0xcaa1, 0xccf7, 0xc0ba, 0xb1a9, 0x003f, - 0x003f, 0x003f, 0xbdf4, 0x003f, 0x003f, 0xb0ef, 0xc5d4, 0x003f, - 0x003f, 0x003f, 0xc8d3, 0xbbf4, 0xb4db, 0xc4e1, 0x003f, 0x003f, - 0xc9ee, 0xc1ce, 0xccc8, 0xcad9, 0xb6d0, 0xc8dc, 0xb3e5, 0xc3b2, - 0xb4ef, 0xcabd, 0xcbcf, 0xc1d8, 0xd6a5, 0xb2f9, 0xb3b4, 0xc1fe, - 0xc4a8, 0xc9d2, 0xb4fb, 0xbdeb, 0xc7df, 0xb3a4, 0xbded, 0xb4c1, - 0xbcd1, 0x003f, 0xc2f6, 0xc8ea, 0xbcd2, 0xbbe3, 0xb5a7, 0xcdb4, - 0xc1c4, 0xbdcb, 0xb2d2, 0xc4f7, 0xb9f2, 0xc6cd, 0xc0e1, 0xcefd, - 0xe5d6, 0xc8cb, 0xbdf0, 0xbcd4, 0xbdad, 0x003f, 0x003f, 0xc3f8, - 0xb3ec, 0xbbeb, 0xb1da, 0xb6e0, 0xc9d0, 0xc2a3, 0x003f, 0xb0ef, - 0xc6f1, 0xb6c1, 0xc9d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcac2, 0xd1d7, 0xc1b4, 0x003f, 0xbdbc, 0xd1c3, 0xcda6, 0xbcdb, - 0xb3e5, 0x003f, 0xd3bc, 0x003f, 0xc4cd, 0xcaaf, 0xb1e2, 0xcbdb, - 0xd5b9, 0x003f, 0x003f, 0x003f, 0xbacc, 0xd7d4, 0xd8b1, 0xbfb5, - 0xccfc, 0xc1fe, 0x003f, 0xc4a8, 0xc2d7, 0xd9e9, 0xd9d3, 0x003f, - 0xdac4, 0xc0b2, 0xcfaf, 0xcbbe, 0xbef3, 0xddc6, 0xbba6, 0xceae, - 0x003f, 0xbca2, 0xb4c1, 0xc6d4, 0xbcd1, 0x003f, 0xbcdf, 0xc8c8, - 0xc3f6, 0x003f, 0x003f, 0xb2e8, 0x003f, 0xe1e9, 0xb1d7, 0xc0b9, - 0xc4be, 0x003f, 0xc3e5, 0x003f, 0x003f, 0xc0e1, 0x003f, 0xe5b6, - 0xcefd, 0x003f, 0xbcd4, 0xb9d3, 0xb2da, 0x003f, 0xeaf6, 0xcaa4, - 0xbbeb, 0xc4b4, 0xbdf4, 0xc0c1, 0xb1da, 0xc2fa, 0xcda1, 0xb6e0, - 0xdace, 0xc2a3, 0xcda2, 0xeeaf, 0x003f, 0x003f, 0x003f, 0xc6f1, - 0xccf7, 0x003f, 0xb6c1, 0x003f, 0xc9d1, 0x003f, 0xf3fd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfb00 .. 0xfbff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x002b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfe00 .. 0xfeff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x007e, 0x007e, 0x007e, 0x007e, 0x005f, 0x005f, 0x005f, - 0x002c, 0xa1a2, 0x002e, 0x003f, 0x003b, 0x003a, 0x003f, 0x0021, - 0xa1bd, 0x0028, 0x0029, 0x007b, 0x007d, 0xa1cc, 0xa1cd, 0x0023, - 0x0026, 0x002a, 0x002b, 0x002d, 0x003c, 0x003e, 0x003d, 0x003f, - 0x005c, 0x0024, 0x0025, 0x0040, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xff00 .. 0xffff */ - 0x003f, 0xa1aa, 0x0022, 0xa1f4, 0xa1f0, 0xa1f3, 0xa1f5, 0x0027, - 0xa1ca, 0xa1cb, 0xa1f6, 0xa1dc, 0xa1a4, 0x002d, 0xa1a5, 0xa1bf, - 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, - 0xa3b8, 0xa3b9, 0xa1a7, 0xa1a8, 0xa1e3, 0xa1e1, 0xa1e4, 0xa1a9, - 0xa1f7, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, - 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf, - 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7, - 0xa3d8, 0xa3d9, 0xa3da, 0xa1ce, 0xa1c0, 0xa1cf, 0xa1b0, 0xa1b2, - 0xa1ae, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7, - 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef, - 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7, - 0xa3f8, 0xa3f9, 0xa3fa, 0xa1d0, 0xa1c3, 0xa1d1, 0x007e, 0x003f, - 0x003f, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, 0x8ea7, - 0x8ea8, 0x8ea9, 0x8eaa, 0x8eab, 0x8eac, 0x8ead, 0x8eae, 0x8eaf, - 0x8eb0, 0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, 0x8eb5, 0x8eb6, 0x8eb7, - 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0x8ebc, 0x8ebd, 0x8ebe, 0x8ebf, - 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3, 0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, - 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb, 0x8ecc, 0x8ecd, 0x8ece, 0x8ecf, - 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4, 0x8ed5, 0x8ed6, 0x8ed7, - 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc, 0x8edd, 0x8ede, 0x8edf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1f1, 0xa1f2, 0xa2cc, 0xa1b1, 0x007c, 0xa1ef, 0x003f, 0x003f, - 0xa8a2, 0xa2ab, 0xa2ac, 0xa2aa, 0xa2ad, 0xa2a3, 0xa1fb, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* defaults */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x0f00, 0x1000, - 0x1100, 0x1200, 0x1300, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x1400, 0x1500, - 0x1600, 0x1700, 0x1800, 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x1d00, - 0x1e00, 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, - 0x2600, 0x2700, 0x2800, 0x2900, 0x2a00, 0x2b00, 0x2c00, 0x2d00, - 0x2e00, 0x2f00, 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, - 0x3600, 0x3700, 0x3800, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, - 0x3e00, 0x3f00, 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, - 0x4600, 0x4700, 0x4800, 0x4900, 0x4a00, 0x4b00, 0x4c00, 0x4d00, - 0x4e00, 0x4f00, 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, - 0x5600, 0x5700, 0x5800, 0x5900, 0x5a00, 0x5b00, 0x5c00, 0x5d00, - 0x5e00, 0x5f00, 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6600, 0x6700, 0x6800, 0x6b00, 0x6b00, 0x6900, 0x6a00 -}; - -const struct dbcs_table cptable_20932 = -{ - { 20932, 2, 0x003f, 0x003f, "EUC-JP" }, - cp2uni, - cp2uni_leadbytes, - uni2cp_low, - uni2cp_high, - { 0x8e, 0x8f, 0xa1, 0xfe, 0x00, 0x00 } -}; diff --git a/reactos/tools/unicode/c_21866.c b/reactos/tools/unicode/c_21866.c deleted file mode 100644 index 7fdb7f3b87f..00000000000 --- a/reactos/tools/unicode/c_21866.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 21866 (Ukrainian KOI8) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-U.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, - 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, - 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, - 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, - 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, - 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x045e, 0x255e, - 0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, - 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x040e, 0x00a9, - 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, - 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, - 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9a, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0x3f, - 0x22, 0xbf, 0x61, 0x3c, 0x3f, 0x2d, 0x72, 0x2d, - 0x9c, 0x3f, 0x9d, 0x33, 0x27, 0x75, 0x3f, 0x9e, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x9f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x81, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x9c, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x9c, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x9e, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0400 .. 0x04ff */ - 0xe5, 0xb3, 0x3f, 0xe7, 0xb4, 0x3f, 0xb6, 0xb7, - 0x3f, 0x3f, 0x3f, 0x3f, 0xeb, 0xe9, 0xbe, 0x3f, - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, - 0xc5, 0xa3, 0x3f, 0xc7, 0xa4, 0x3f, 0xa6, 0xa7, - 0x3f, 0x3f, 0x3f, 0x3f, 0xcb, 0xc9, 0xae, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xbd, 0xad, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf6, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0xc1, 0xe1, 0xc1, 0x3f, 0x3f, 0xe5, 0xc5, - 0x3f, 0x3f, 0x3f, 0x3f, 0xf6, 0xd6, 0xfa, 0xda, - 0x3f, 0x3f, 0xe9, 0xc9, 0xe9, 0xc9, 0xef, 0xcf, - 0x3f, 0x3f, 0x3f, 0x3f, 0xfc, 0xdc, 0xf5, 0xd5, - 0xf5, 0xd5, 0xf5, 0xd5, 0xfe, 0xde, 0x3f, 0x3f, - 0xf9, 0xd9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xce, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x95, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9c, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x9c, 0x95, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x97, 0x97, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x98, 0x99, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x98, 0x99, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9e, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x93, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x80, 0x80, 0x81, 0x81, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x82, 0x82, 0x82, 0x82, - 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, - 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x2d, 0x2d, 0x7c, 0x7c, - 0xa0, 0xa1, 0xa2, 0xa2, 0xa5, 0xa8, 0xa8, 0xa8, - 0xa9, 0xaa, 0xab, 0xac, 0xac, 0xac, 0xaf, 0xb0, - 0xb1, 0xb2, 0xb2, 0xb5, 0xb8, 0xb8, 0xb8, 0xb9, - 0xba, 0xbb, 0xbc, 0xbc, 0xbc, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x8b, 0x3f, 0x3f, 0x3f, 0x8c, 0x3f, 0x3f, 0x3f, - 0x8d, 0x3f, 0x3f, 0x3f, 0x8e, 0x3f, 0x3f, 0x3f, - 0x8f, 0x90, 0x91, 0x92, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x94, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x81, 0x3c, 0x5e, 0x3e, 0x76, 0x94, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_21866 = -{ - { 21866, 1, 0x003f, 0x003f, "Ukrainian KOI8" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28591.c b/reactos/tools/unicode/c_28591.c deleted file mode 100644 index d6dff0dfdff..00000000000 --- a/reactos/tools/unicode/c_28591.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28591 (ISO 8859-1 Latin 1) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 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, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0xd0, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xaf, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x5e, 0x7e, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0xf0, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xb4, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28591 = -{ - { 28591, 1, 0x003f, 0x003f, "ISO 8859-1 Latin 1" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28592.c b/reactos/tools/unicode/c_28592.c deleted file mode 100644 index 88328d14096..00000000000 --- a/reactos/tools/unicode/c_28592.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28592 (ISO 8859-2 Latin 2 (East European)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-2.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, - 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, - 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, - 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, - 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, - 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, - 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, - 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, - 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, - 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0x4c, 0xa4, 0x59, 0x7c, 0xa7, - 0xa8, 0x63, 0x61, 0x3c, 0x3f, 0xad, 0x72, 0x2d, - 0xb0, 0x3f, 0x32, 0x33, 0xb4, 0x75, 0x3f, 0x3f, - 0xb8, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0xc1, 0xc2, 0x41, 0xc4, 0x41, 0x41, 0xc7, - 0x45, 0xc9, 0x45, 0xcb, 0x49, 0xcd, 0xce, 0x49, - 0xd0, 0x4e, 0x4f, 0xd3, 0xd4, 0x4f, 0xd6, 0xd7, - 0x4f, 0x55, 0xda, 0x55, 0xdc, 0xdd, 0x3f, 0xdf, - 0x61, 0xe1, 0xe2, 0x61, 0xe4, 0x61, 0x61, 0xe7, - 0x65, 0xe9, 0x65, 0xeb, 0x69, 0xed, 0xee, 0x69, - 0x64, 0x6e, 0x6f, 0xf3, 0xf4, 0x6f, 0xf6, 0xf7, - 0x6f, 0x75, 0xfa, 0x75, 0xfc, 0xfd, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0xc3, 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, - 0x43, 0x63, 0x43, 0x63, 0xc8, 0xe8, 0xcf, 0xef, - 0xd0, 0xf0, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0xca, 0xea, 0xcc, 0xec, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0xc5, 0xe5, 0x4c, 0x6c, 0xa5, 0xb5, 0x3f, - 0x3f, 0xa3, 0xb3, 0xd1, 0xf1, 0x4e, 0x6e, 0xd2, - 0xf2, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd5, 0xf5, 0x4f, 0x6f, 0xc0, 0xe0, 0x52, 0x72, - 0xd8, 0xf8, 0xa6, 0xb6, 0x53, 0x73, 0xaa, 0xba, - 0xa9, 0xb9, 0xde, 0xfe, 0xab, 0xbb, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0xd9, 0xf9, - 0xdb, 0xfb, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0xac, 0xbc, 0xaf, 0xbf, 0xae, 0xbe, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0xbd, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0xb7, - 0x27, 0x2d, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xff, 0xb0, 0xb2, 0x7e, 0xbd, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x5e, 0x7e, 0x2d, 0x2d, 0xa2, 0xff, - 0xa8, 0x3f, 0xb0, 0xbd, 0xb7, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0xa6, 0xb6, 0xa9, 0xb9, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0xc3, 0xe3, - 0xc3, 0xe3, 0xc3, 0xe3, 0xc3, 0xe3, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xb4, 0xbd, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0xb7, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0xb7, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28592 = -{ - { 28592, 1, 0x003f, 0x003f, "ISO 8859-2 Latin 2 (East European)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28593.c b/reactos/tools/unicode/c_28593.c deleted file mode 100644 index 2bc395892eb..00000000000 --- a/reactos/tools/unicode/c_28593.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28593 (ISO 8859-3 Latin 3 (South European)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-3.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x003f, 0x0124, 0x00a7, - 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x003f, 0x017b, - 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, - 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x00be, 0x017c, - 0x00c0, 0x00c1, 0x00c2, 0x003f, 0x00c4, 0x010a, 0x0108, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x003f, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, - 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x003f, 0x00e4, 0x010b, 0x0109, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x003f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, - 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0xa3, 0xa4, 0x59, 0x7c, 0xa7, - 0xa8, 0x63, 0x61, 0x3c, 0x3f, 0xad, 0x72, 0x2d, - 0xb0, 0x3f, 0xb2, 0xb3, 0xb4, 0xb5, 0x3f, 0xb7, - 0xb8, 0x31, 0x6f, 0x3e, 0x3f, 0xbd, 0xbe, 0x3f, - 0xc0, 0xc1, 0xc2, 0x41, 0xc4, 0x41, 0x41, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0x44, 0xd1, 0xd2, 0xd3, 0xd4, 0x4f, 0xd6, 0xd7, - 0x4f, 0xd9, 0xda, 0xdb, 0xdc, 0x59, 0x3f, 0xdf, - 0xe0, 0xe1, 0xe2, 0x61, 0xe4, 0x61, 0x61, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0x64, 0xf1, 0xf2, 0xf3, 0xf4, 0x6f, 0xf6, 0xf7, - 0x6f, 0xf9, 0xfa, 0xfb, 0xfc, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0xc6, 0xe6, 0xc5, 0xe5, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0xd8, 0xf8, 0xab, 0xbb, - 0xd5, 0xf5, 0x47, 0x67, 0xa6, 0xb6, 0xa1, 0xb1, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0xa9, 0xb9, 0x3f, 0x3f, 0xac, 0xbc, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0xde, 0xfe, 0xaa, 0xba, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0xdd, 0xfd, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0xaf, 0xbf, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xff, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x5e, 0x7e, 0x2d, 0x2d, 0xa2, 0xff, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xb4, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0xb1, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0xa3, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28593 = -{ - { 28593, 1, 0x003f, 0x003f, "ISO 8859-3 Latin 3 (South European)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28594.c b/reactos/tools/unicode/c_28594.c deleted file mode 100644 index c069f47fcba..00000000000 --- a/reactos/tools/unicode/c_28594.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28594 (ISO 8859-4 Latin 4 (Baltic old)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-4.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, - 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, - 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, - 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, - 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, - 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, - 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, - 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0x4c, 0xa4, 0x59, 0x7c, 0xa7, - 0xa8, 0x63, 0x61, 0x3c, 0x3f, 0xad, 0x72, 0xaf, - 0xb0, 0x3f, 0x32, 0x33, 0xb4, 0x75, 0x3f, 0x3f, - 0xb8, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x43, - 0x45, 0xc9, 0x45, 0xcb, 0x49, 0xcd, 0xce, 0x49, - 0xd0, 0x4e, 0x4f, 0x4f, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0x55, 0xda, 0xdb, 0xdc, 0x59, 0x3f, 0xdf, - 0x61, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x63, - 0x65, 0xe9, 0x65, 0xeb, 0x69, 0xed, 0xee, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0x75, 0xfa, 0xfb, 0xfc, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0xc0, 0xe0, 0x41, 0x61, 0xa1, 0xb1, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0xc8, 0xe8, 0x44, 0x64, - 0xd0, 0xf0, 0xaa, 0xba, 0x45, 0x65, 0xcc, 0xec, - 0xca, 0xea, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0xab, 0xbb, 0x48, 0x68, 0x48, 0x68, - 0xa5, 0xb5, 0xcf, 0xef, 0x49, 0x69, 0xc7, 0xe7, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0xd3, 0xf3, - 0xa2, 0x4c, 0x6c, 0xa6, 0xb6, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0xd1, 0xf1, 0x4e, - 0x6e, 0x3f, 0xbd, 0xbf, 0xd2, 0xf2, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0xa3, 0xb3, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0xa9, 0xb9, 0x54, 0x74, 0x54, 0x74, 0xac, 0xbc, - 0xdd, 0xfd, 0xde, 0xfe, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xd9, 0xf9, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0xae, 0xbe, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0xb7, - 0x27, 0xaf, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xff, 0xb0, 0xb2, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x5e, 0x7e, 0xaf, 0xaf, 0x3f, 0xff, - 0xa8, 0x3f, 0xb0, 0x22, 0xb7, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0xbf, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0xaa, 0xba, 0xaa, 0xba, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0xd2, 0xf2, 0xd2, 0xf2, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0xa9, 0xb9, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0xdd, 0xfd, 0xde, 0xfe, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xb4, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0xb7, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0xaf, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0xb7, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28594 = -{ - { 28594, 1, 0x003f, 0x003f, "ISO 8859-4 Latin 4 (Baltic old)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28595.c b/reactos/tools/unicode/c_28595.c deleted file mode 100644 index e61da41e455..00000000000 --- a/reactos/tools/unicode/c_28595.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 28595 (ISO 8859-5 Cyrillic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-5.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, - 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, - 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, - 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0xfd, - 0x22, 0x63, 0x61, 0x3c, 0x3f, 0xad, 0x72, 0x2d, - 0x3f, 0x3f, 0x32, 0x33, 0x27, 0x75, 0x3f, 0x3f, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x3f, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0400 .. 0x04ff */ - 0xb5, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xb8, 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, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xd5, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xd8, 0xfe, 0xff, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb6, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0xd0, 0xb0, 0xd0, 0x3f, 0x3f, 0xb5, 0xd5, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb6, 0xd6, 0xb7, 0xd7, - 0x3f, 0x3f, 0xb8, 0xd8, 0xb8, 0xd8, 0xbe, 0xde, - 0x3f, 0x3f, 0x3f, 0x3f, 0xcd, 0xed, 0xc3, 0xe3, - 0xc3, 0xe3, 0xc3, 0xe3, 0xc7, 0xe7, 0x3f, 0x3f, - 0xcb, 0xeb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdd, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0xf0, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_28595 = -{ - { 28595, 1, 0x003f, 0x003f, "ISO 8859-5 Cyrillic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28596.c b/reactos/tools/unicode/c_28596.c deleted file mode 100644 index 19c493b94eb..00000000000 --- a/reactos/tools/unicode/c_28596.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 28596 (ISO 8859-6 Arabic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-6.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x003f, 0x003f, 0x003f, 0x00a4, 0x003f, 0x003f, 0x00a7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x060c, 0x00ad, 0x003f, 0x003f, - 0x00b0, 0x00b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x00b6, 0x00b7, - 0x003f, 0x003f, 0x003f, 0x061b, 0x00bc, 0x00bd, 0x00be, 0x061f, - 0x003f, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, - 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, - 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, - 0x0638, 0x0639, 0x063a, 0x003f, 0x003f, 0x003f, 0x00de, 0x00df, - 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, - 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, - 0x0650, 0x0651, 0x0652, 0x003f, 0x003f, 0x003f, 0x003f, 0x00f7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x00fe, 0x003f -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0x4c, 0xa4, 0x59, 0x7c, 0xa7, - 0x22, 0x63, 0x61, 0x3c, 0x3f, 0xad, 0x72, 0x2d, - 0xb0, 0xb1, 0x32, 0x33, 0x27, 0x75, 0xb6, 0xb7, - 0x2c, 0x31, 0x6f, 0x3e, 0xbc, 0xbd, 0xbe, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0xdf, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0xf7, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0xfe, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x3f, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0600 .. 0x06ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xac, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xbb, 0x3f, 0x3f, 0x3f, 0xbf, - 0x3f, 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, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x1200, 0x0400, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_28596 = -{ - { 28596, 1, 0x003f, 0x003f, "ISO 8859-6 Arabic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28597.c b/reactos/tools/unicode/c_28597.c deleted file mode 100644 index f72efb24335..00000000000 --- a/reactos/tools/unicode/c_28597.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28597 (ISO 8859-7 Greek) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-7.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x2018, 0x2019, 0x00a3, 0x20ac, 0x20af, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x037a, 0x00ab, 0x00ac, 0x00ad, 0x003f, 0x2015, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, - 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, - 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x003f, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, - 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, - 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x003f -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0xa3, 0x3f, 0x59, 0xa6, 0xa7, - 0xa8, 0xa9, 0x61, 0xab, 0xac, 0xad, 0x72, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0x27, 0xec, 0x3f, 0xb7, - 0x2c, 0x31, 0x6f, 0xbb, 0x3f, 0xbd, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0xe2, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0xa1, 0xa2, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xaf, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xaa, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0x3f, 0xbc, 0x3f, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0x3f, 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, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x3f, - 0xe2, 0xe8, 0xd5, 0xd5, 0xd5, 0xf6, 0xf0, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xf1, 0xf2, 0x3f, 0xc8, 0xe5, 0x3f, 0x3f, - 0x3f, 0xd3, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe2, 0xe3, 0xe4, - 0xf6, 0xf7, 0x69, 0x72, 0x75, 0x76, 0xe2, 0xe3, - 0xf1, 0xf6, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0xe8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0x3f, 0x3f, - 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, - 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, - 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, - 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, - 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0x3f, 0x3f, - 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0x3f, 0x3f, - 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, - 0x3f, 0xd5, 0x3f, 0xd5, 0x3f, 0xd5, 0x3f, 0xd5, - 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, - 0xe1, 0xdc, 0xe5, 0xdd, 0xe7, 0xde, 0xe9, 0xdf, - 0xef, 0xfc, 0xf5, 0xfd, 0xf9, 0xfe, 0x3f, 0x3f, - 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, - 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, - 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, - 0xe1, 0xe1, 0xe1, 0xe1, 0xdc, 0x3f, 0xe1, 0xe1, - 0xc1, 0xc1, 0xc1, 0xb6, 0xc1, 0x3f, 0xe9, 0x3f, - 0x3f, 0xa8, 0xe7, 0xe7, 0xde, 0x3f, 0xe7, 0xe7, - 0xc5, 0xb8, 0xc7, 0xb9, 0xc7, 0x3f, 0x3f, 0x3f, - 0xe9, 0xe9, 0xfa, 0xc0, 0x3f, 0x3f, 0xe9, 0xfa, - 0xc9, 0xc9, 0xc9, 0xba, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf5, 0xf5, 0xfb, 0xe0, 0xf1, 0xf1, 0xf5, 0xfb, - 0xd5, 0xd5, 0xd5, 0xbe, 0xd1, 0xa8, 0xb5, 0x60, - 0x3f, 0x3f, 0xf9, 0xf9, 0xfe, 0x3f, 0xf9, 0xf9, - 0xcf, 0xbc, 0xd9, 0xbf, 0xd9, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0xaf, 0xaf, 0xaf, 0x3f, 0x5f, - 0xa1, 0xa2, 0x2c, 0xa1, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0xa1, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa4, 0x3f, 0x3f, 0xa5, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0xd9, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xf0, 0xe3, 0xc3, 0xd0, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0xaf, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0xa3, 0xac, 0xaf, 0xa6, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28597 = -{ - { 28597, 1, 0x003f, 0x003f, "ISO 8859-7 Greek" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28598.c b/reactos/tools/unicode/c_28598.c deleted file mode 100644 index 3bd0cf98d94..00000000000 --- a/reactos/tools/unicode/c_28598.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 28598 (ISO 8859-8 Hebrew) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-8.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x003f, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x00de, 0x2017, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, 0x003f, 0x003f, 0x200e, 0x200f, 0x003f -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0x61, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0x6f, 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, 0xaa, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0xba, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xaf, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x5e, 0x7e, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0500 .. 0x05ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0xfd, 0xfe, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0xdf, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xb4, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0xe0, 0xe1, 0xe2, - 0xe3, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0x3f, 0x3f, - 0xf2, 0xe0, 0xe3, 0xe4, 0xeb, 0xec, 0xed, 0xf8, - 0xfa, 0x2b, 0xf9, 0xf9, 0xf9, 0xf9, 0xe0, 0xe0, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x3f, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0x3f, 0xee, 0x3f, - 0xf0, 0xf1, 0x3f, 0xf3, 0xf4, 0x3f, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xe5, 0xe1, 0xeb, 0xf4, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x0400, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_28598 = -{ - { 28598, 1, 0x003f, 0x003f, "ISO 8859-8 Hebrew" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28599.c b/reactos/tools/unicode/c_28599.c deleted file mode 100644 index e4cc2580182..00000000000 --- a/reactos/tools/unicode/c_28599.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28599 (ISO 8859-9 Latin 5 (Turkish)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-9.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 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, - 0x44, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x59, 0x3f, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0x64, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x79, 0x3f, 0xff, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0xd0, 0xf0, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0xdd, 0xfd, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0xde, 0xfe, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xb4, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xaf, 0xb4, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xb4, 0x5e, 0x7e, 0xaf, 0xaf, 0x3f, 0x3f, - 0xa8, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xb4, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb4, 0xa8, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa8, 0xa8, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xb4, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xb4, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0xa6, 0xa5, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28599 = -{ - { 28599, 1, 0x003f, 0x003f, "ISO 8859-9 Latin 5 (Turkish)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28600.c b/reactos/tools/unicode/c_28600.c deleted file mode 100644 index 0ef4edf29a3..00000000000 --- a/reactos/tools/unicode/c_28600.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28600 (ISO 8859-10 Latin 6 (Nordic)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-10.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, - 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, - 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, - 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, - 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, - 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, - 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0xa7, - 0x22, 0x63, 0x61, 0x3c, 0x3f, 0xad, 0x72, 0xbd, - 0xb0, 0x3f, 0x32, 0x33, 0x27, 0x75, 0x3f, 0xb7, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x43, - 0x45, 0xc9, 0x45, 0xcb, 0x49, 0xcd, 0xce, 0xcf, - 0xd0, 0x4e, 0x4f, 0xd3, 0xd4, 0xd5, 0xd6, 0x78, - 0xd8, 0x55, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0x61, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x63, - 0x65, 0xe9, 0x65, 0xeb, 0x69, 0xed, 0xee, 0xef, - 0xf0, 0x6e, 0x6f, 0xf3, 0xf4, 0xf5, 0xf6, 0x3f, - 0xf8, 0x75, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x79, - /* 0x0100 .. 0x01ff */ - 0xc0, 0xe0, 0x41, 0x61, 0xa1, 0xb1, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0xc8, 0xe8, 0x44, 0x64, - 0xa9, 0xb9, 0xa2, 0xb2, 0x45, 0x65, 0xcc, 0xec, - 0xca, 0xea, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0xa3, 0xb3, 0x48, 0x68, 0x48, 0x68, - 0xa5, 0xb5, 0xa4, 0xb4, 0x49, 0x69, 0xc7, 0xe7, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0xa6, 0xb6, - 0xff, 0x4c, 0x6c, 0xa8, 0xb8, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0xd1, 0xf1, 0x4e, - 0x6e, 0x3f, 0xaf, 0xbf, 0xd2, 0xf2, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0xaa, 0xba, 0x54, 0x74, 0x54, 0x74, 0xab, 0xbb, - 0xd7, 0xf7, 0xae, 0xbe, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xd9, 0xf9, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0xac, 0xbc, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xbd, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0xbd, 0xbd, 0x3f, 0x3f, - 0x22, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0xbf, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0xf0, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0xa2, 0xb2, 0xa2, 0xb2, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0xd2, 0xf2, 0xd2, 0xf2, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0xaa, 0xba, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0xd7, 0xf7, 0xae, 0xbe, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0xbd, 0xbd, 0xbd, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xbd, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbd, 0xbd, 0xbd, 0xbd, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0xbd, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0xbd, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28600 = -{ - { 28600, 1, 0x003f, 0x003f, "ISO 8859-10 Latin 6 (Nordic)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28603.c b/reactos/tools/unicode/c_28603.c deleted file mode 100644 index 7229126e36e..00000000000 --- a/reactos/tools/unicode/c_28603.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28603 (ISO 8859-13 Latin 7 (Baltic)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-13.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, - 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, - 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, - 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, - 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, - 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, - 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, - 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, - 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, - 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, - 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0xa2, 0xa3, 0xa4, 0x59, 0xa6, 0xa7, - 0x22, 0xa9, 0x61, 0xab, 0xac, 0xad, 0xae, 0x2d, - 0xb0, 0xb1, 0xb2, 0xb3, 0x27, 0xb5, 0xb6, 0xb7, - 0x2c, 0xb9, 0x6f, 0xbb, 0xbc, 0xbd, 0xbe, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0xc4, 0xc5, 0xaf, 0x43, - 0x45, 0xc9, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0xd3, 0x4f, 0xd5, 0xd6, 0xd7, - 0xa8, 0x55, 0x55, 0x55, 0xdc, 0x59, 0x3f, 0xdf, - 0x61, 0x61, 0x61, 0x61, 0xe4, 0xe5, 0xbf, 0x63, - 0x65, 0xe9, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0xf3, 0x6f, 0xf5, 0xf6, 0xf7, - 0xb8, 0x75, 0x75, 0x75, 0xfc, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0xc2, 0xe2, 0x41, 0x61, 0xc0, 0xe0, 0xc3, 0xe3, - 0x43, 0x63, 0x43, 0x63, 0xc8, 0xe8, 0x44, 0x64, - 0x44, 0x64, 0xc7, 0xe7, 0x45, 0x65, 0xcb, 0xeb, - 0xc6, 0xe6, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0xcc, 0xec, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0xce, 0xee, 0x49, 0x69, 0xc1, 0xe1, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0xcd, 0xed, - 0x3f, 0x4c, 0x6c, 0xcf, 0xef, 0x4c, 0x6c, 0x3f, - 0x3f, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0xd4, 0xf4, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0xaa, 0xba, - 0x52, 0x72, 0xda, 0xfa, 0x53, 0x73, 0x53, 0x73, - 0xd0, 0xf0, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0xdb, 0xfb, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xd8, 0xf8, 0x57, 0x77, 0x59, 0x79, - 0x59, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xaf, 0xbf, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xaf, 0xbf, 0xa8, 0xb8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0xff, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xaf, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0xc7, 0xe7, 0xc7, 0xe7, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0xd4, 0xf4, 0xd4, 0xf4, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0xda, 0xfa, 0xd0, 0xf0, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xdb, 0xfb, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0xff, 0x2c, 0x60, 0xb4, 0xa1, 0xa5, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0xa6, 0xa6, - 0x2d, 0x2d, 0xa6, 0xa6, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0xa6, 0xa6, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0xb4, 0xa1, 0xa5, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0x2d, 0xa6, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28603 = -{ - { 28603, 1, 0x003f, 0x003f, "ISO 8859-13 Latin 7 (Baltic)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28604.c b/reactos/tools/unicode/c_28604.c deleted file mode 100644 index e0473b5f52a..00000000000 --- a/reactos/tools/unicode/c_28604.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28604 (ISO 8859-14 Latin 8 (Celtic)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-14.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, - 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, - 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, - 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0xa3, 0x3f, 0x59, 0x7c, 0xa7, - 0x22, 0xa9, 0x61, 0x3c, 0x3f, 0xad, 0xae, 0x2d, - 0x3f, 0x3f, 0x32, 0x33, 0x27, 0x75, 0xb6, 0x3f, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0x44, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x78, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x3f, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0x64, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x3f, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x3f, 0xff, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0xa4, 0xa5, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0xb2, 0xb3, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0xd0, 0xf0, 0xde, 0xfe, - 0xaf, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x3f, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0xa1, 0xa2, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0xa6, 0xab, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xb0, 0xb1, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0xb4, 0xb5, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0xb7, 0xb9, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0xbb, 0xbf, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0xd7, 0xf7, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xac, 0xbc, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0xa3, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28604 = -{ - { 28604, 1, 0x003f, 0x003f, "ISO 8859-14 Latin 8 (Celtic)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28605.c b/reactos/tools/unicode/c_28605.c deleted file mode 100644 index f870741caff..00000000000 --- a/reactos/tools/unicode/c_28605.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28605 (ISO 8859-15 Latin 9 (Euro)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-15.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, - 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, - 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x3f, 0xa5, 0x7c, 0xa7, - 0x22, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0x27, 0xb5, 0xb6, 0xb7, - 0x2c, 0xb9, 0xba, 0xbb, 0x3f, 0x3f, 0x3f, 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, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0xd0, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0xbc, 0xbd, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0xa6, 0xa8, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0xbe, 0x5a, 0x7a, 0x5a, 0x7a, 0xb4, 0xb8, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0xc5, 0xe5, 0xc6, 0xe6, 0xd8, 0xf8, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0xd5, 0xf5, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xaf, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0xaf, 0xaf, 0x3f, 0x3f, - 0x22, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb5, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0xf0, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xd5, 0xf5, 0xd5, 0xf5, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0xa6, 0xa8, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xaf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa2, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0xc5, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0xac, 0xac, 0xac, 0xac, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xac, 0xac, 0xac, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xaf, 0xaf, 0xaf, 0xaf, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa2, 0xa3, 0xac, 0xaf, 0x7c, 0xa5, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28605 = -{ - { 28605, 1, 0x003f, 0x003f, "ISO 8859-15 Latin 9 (Euro)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_28606.c b/reactos/tools/unicode/c_28606.c deleted file mode 100644 index a8d0fffdc0b..00000000000 --- a/reactos/tools/unicode/c_28606.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 28606 (ISO 8859-16 Latin 10 (Balkan)) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/ISO8859/8859-16.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, - 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, - 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, - 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, - 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, - 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, - 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 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, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0xa7, - 0x22, 0xa9, 0x61, 0xab, 0x3f, 0xad, 0x72, 0x2d, - 0xb0, 0xb1, 0x32, 0x33, 0x27, 0x75, 0xb6, 0xb7, - 0x2c, 0x31, 0x6f, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc0, 0xc1, 0xc2, 0x41, 0xc4, 0x41, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0x4e, 0xd2, 0xd3, 0xd4, 0x4f, 0xd6, 0x78, - 0x4f, 0xd9, 0xda, 0xdb, 0xdc, 0x59, 0x3f, 0xdf, - 0xe0, 0xe1, 0xe2, 0x61, 0xe4, 0x61, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0x64, 0x6e, 0xf2, 0xf3, 0xf4, 0x6f, 0xf6, 0x3f, - 0x6f, 0xf9, 0xfa, 0xfb, 0xfc, 0x79, 0x3f, 0xff, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0xc3, 0xe3, 0xa1, 0xa2, 0xc5, 0xe5, - 0x43, 0x63, 0x43, 0x63, 0xb2, 0xb9, 0x44, 0x64, - 0xd0, 0xf0, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0xdd, 0xfd, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0xa3, 0xb3, 0xd1, 0xf1, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd5, 0xf5, 0xbc, 0xbd, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0xd7, 0xf7, 0x53, 0x73, 0x53, 0x73, - 0xa6, 0xa8, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0xd8, 0xf8, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0xbe, 0xac, 0xae, 0xaf, 0xbf, 0xb4, 0xb8, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0xdc, 0xfc, 0xdc, - 0xfc, 0xdc, 0xfc, 0xdc, 0xfc, 0x3f, 0xc4, 0xe4, - 0x41, 0x61, 0xc6, 0xe6, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0xc6, 0xe6, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0xaa, 0xba, 0xde, 0xfe, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0xd6, 0xf6, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xb0, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xb0, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xb7, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xdf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xdf, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0xc6, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xdf, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xdf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0xc7, 0xe7, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xcf, 0xef, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0xd7, 0xf7, 0xa6, 0xa8, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xc2, 0xe2, 0xc2, 0xe2, - 0xc2, 0xe2, 0xc2, 0xe2, 0x41, 0x61, 0xc3, 0xe3, - 0xc3, 0xe3, 0xc3, 0xe3, 0xc3, 0xe3, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xca, 0xea, - 0xca, 0xea, 0xca, 0xea, 0xca, 0xea, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, 0xd4, 0xf4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0xb5, 0xa5, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xb1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xb0, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xab, 0xbb, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb7, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xab, 0xbb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0xb5, 0xa5, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_28606 = -{ - { 28606, 1, 0x003f, 0x003f, "ISO 8859-16 Latin 10 (Balkan)" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_424.c b/reactos/tools/unicode/c_424.c deleted file mode 100644 index a018e5aa7d2..00000000000 --- a/reactos/tools/unicode/c_424.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 424 (IBM EBCDIC Hebrew) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/CP424.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, - 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, - 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, - 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, - 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, - 0x0020, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, - 0x05d7, 0x05d8, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c, - 0x0026, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac, - 0x002d, 0x002f, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, - 0x003f, 0x05ea, 0x003f, 0x003f, 0x00a0, 0x003f, 0x003f, 0x003f, - 0x2017, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, - 0x003f, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x00ab, 0x00bb, 0x003f, 0x003f, 0x003f, 0x00b1, - 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x003f, 0x003f, 0x003f, 0x00b8, 0x003f, 0x00a4, - 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x00ae, - 0x005e, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, - 0x00bd, 0x00be, 0x005b, 0x005d, 0x00af, 0x00a8, 0x00b4, 0x00d7, - 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x00ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, - 0x0051, 0x0052, 0x00b9, 0x003f, 0x003f, 0x003f, 0x00de, 0x00df, - 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, - 0x0059, 0x005a, 0x00b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x00b3, 0x003f, 0x003f, 0x003f, 0x00fe, 0x009f -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, - 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, - 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, - 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, - 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, - 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, - 0x74, 0x5a, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, - 0xbd, 0xb4, 0x81, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, - 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, - 0x9d, 0xda, 0x96, 0x8b, 0xb7, 0xb8, 0xb9, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc3, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc9, 0xc9, 0xc9, 0xc9, - 0xc4, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xbf, - 0xd6, 0xe4, 0xe4, 0xe4, 0xe4, 0xe8, 0xde, 0xdf, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x83, - 0x85, 0x85, 0x85, 0x85, 0x89, 0x89, 0x89, 0x89, - 0x84, 0x95, 0x96, 0x96, 0x96, 0x96, 0x96, 0xe1, - 0x96, 0xa4, 0xa4, 0xa4, 0xa4, 0xa8, 0xfe, 0xa8, - /* 0x0100 .. 0x01ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc3, 0x83, - 0xc3, 0x83, 0xc3, 0x83, 0xc3, 0x83, 0xc4, 0x84, - 0xc4, 0x84, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc7, 0x87, 0xc7, 0x87, - 0xc7, 0x87, 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, - 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, - 0xc9, 0x89, 0x3f, 0x3f, 0xd1, 0x91, 0xd2, 0x92, - 0x3f, 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0x3f, - 0x3f, 0xd3, 0x93, 0xd5, 0x95, 0xd5, 0x95, 0xd5, - 0x95, 0x3f, 0x3f, 0x3f, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd9, 0x99, 0xd9, 0x99, - 0xd9, 0x99, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe6, 0xa6, 0xe8, 0xa8, - 0xe8, 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0xa2, - 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xc4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc6, 0x86, 0x3f, 0x3f, 0x3f, 0x3f, 0xc9, - 0x3f, 0x3f, 0x93, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0xd6, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0xe3, 0xe4, - 0xa4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, 0xc9, - 0x89, 0xd6, 0x96, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, - 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0x3f, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc7, 0x87, 0xc7, 0x87, - 0xd2, 0x92, 0xd6, 0x96, 0xd6, 0x96, 0x3f, 0x3f, - 0x91, 0x3f, 0x3f, 0x3f, 0xc7, 0x87, 0x3f, 0x3f, - 0xd5, 0x95, 0xc1, 0x81, 0xc1, 0x81, 0xd6, 0x96, - /* 0x0200 .. 0x02ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc5, 0x85, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xd9, 0x99, 0xd9, 0x99, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe2, 0xa2, 0xe3, 0xa3, 0x3f, 0x3f, 0xc8, 0x88, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, - 0xc5, 0x85, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x88, 0x3f, 0x91, 0x99, 0x3f, 0x3f, 0x3f, 0xa6, - 0xa8, 0xbe, 0x7f, 0x79, 0x7d, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xb0, 0x3f, 0xb0, 0xa5, - 0x7d, 0xbc, 0xbe, 0x79, 0x3f, 0x6d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x90, 0x3f, 0xa1, 0x7f, 0x3f, 0x3f, - 0x3f, 0x93, 0xa2, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x79, 0xbe, 0xb0, 0xa1, 0xbc, 0xbc, 0x3f, 0x3f, - 0xbd, 0x3f, 0x90, 0x7f, 0xa5, 0x3f, 0x7f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6d, 0x6d, 0x6d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x79, 0xbe, 0x3f, 0x3f, 0xbd, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xbe, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xbe, 0xbd, 0xc1, 0xb3, - 0xc5, 0xc8, 0xc9, 0x3f, 0xd6, 0x3f, 0xe8, 0x3f, - 0x3f, 0xc1, 0xc2, 0x3f, 0x3f, 0xc5, 0xe9, 0xc8, - 0x3f, 0xc9, 0xd2, 0x3f, 0xd4, 0xd5, 0x3f, 0xd6, - 0x3f, 0xd7, 0x3f, 0x3f, 0xe3, 0xe8, 0x3f, 0xe7, - 0x3f, 0x3f, 0xc9, 0xe8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa0, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xe8, 0xe8, 0xe8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0500 .. 0x05ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x71, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0xc1, 0xc2, 0x3f, - 0xc4, 0xc5, 0x3f, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, - 0xd3, 0xd4, 0xd5, 0x3f, 0xd6, 0x3f, 0xd7, 0xd9, - 0xe3, 0xe4, 0xe6, 0x81, 0x3f, 0x3f, 0x3f, 0x82, - 0x84, 0x85, 0x3f, 0x3f, 0x3f, 0x87, 0x3f, 0x92, - 0x94, 0x3f, 0x96, 0x3f, 0x3f, 0x3f, 0x97, 0xa3, - 0xa4, 0x3f, 0x3f, 0xa5, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x89, 0x99, 0xa4, 0xa5, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x83, 0x3f, 0x84, 0x3f, - 0x86, 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0xc1, 0x81, 0xc2, 0x82, 0xc2, 0x82, 0xc2, 0x82, - 0xc3, 0x83, 0xc4, 0x84, 0xc4, 0x84, 0xc4, 0x84, - 0xc4, 0x84, 0xc4, 0x84, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc6, 0x86, - 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, 0xc8, 0x88, - 0xc8, 0x88, 0xc8, 0x88, 0xc9, 0x89, 0xc9, 0x89, - 0xd2, 0x92, 0xd2, 0x92, 0xd2, 0x92, 0xd3, 0x93, - 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0xd4, 0x94, - 0xd4, 0x94, 0xd4, 0x94, 0xd5, 0x95, 0xd5, 0x95, - 0xd5, 0x95, 0xd5, 0x95, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd7, 0x97, 0xd7, 0x97, - 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, - 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe3, 0xa3, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe5, 0xa5, 0xe5, 0xa5, - 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, - 0xe6, 0xa6, 0xe7, 0xa7, 0xe7, 0xa7, 0xe8, 0xa8, - 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0x88, 0xa3, - 0xa6, 0xa8, 0x3f, 0xa2, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe8, 0xa8, 0xe8, 0xa8, 0xe8, 0xa8, - 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe8, 0x3f, 0xe8, 0x3f, 0xe8, 0x3f, 0xe8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbd, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc8, 0xc8, 0xc8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0xc9, 0xc9, 0xc9, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe8, 0xe8, 0xe8, 0xe8, 0xd7, 0xbd, 0xbd, 0x79, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd6, 0xd6, 0x3f, 0x3f, 0x3f, 0xbe, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x60, 0x3f, 0x60, 0x60, 0x60, 0x3f, 0x78, - 0x79, 0x7d, 0x6b, 0x79, 0x7f, 0x7f, 0x6b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0xbe, 0x7f, 0x3f, 0x79, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x5a, 0x3f, 0xbc, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x61, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x90, 0x89, 0x3f, 0x3f, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x95, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x3f, - 0x81, 0x85, 0x96, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4a, 0x3f, 0x3f, 0xb1, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0xc3, 0x3f, 0x3f, 0x3f, 0x3f, 0xc5, - 0x3f, 0x3f, 0x87, 0xc8, 0xc8, 0xc8, 0x88, 0x88, - 0xc9, 0xc9, 0xd3, 0x93, 0x3f, 0xd5, 0x3f, 0x3f, - 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xd9, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0x3f, 0x3f, 0x3f, - 0xe9, 0x3f, 0xd2, 0xc1, 0xc2, 0xc3, 0x85, 0x85, - 0xc5, 0xc6, 0x3f, 0xd4, 0x96, 0x41, 0x42, 0x43, - 0x44, 0x89, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc4, 0x84, 0x85, - 0x89, 0x91, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0x3f, 0x3f, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe7, 0x3f, 0x3f, 0xd3, 0xc3, 0xc4, 0xd4, - 0x89, 0x3f, 0x3f, 0x3f, 0xa5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa7, 0x3f, 0x3f, 0x93, 0x83, 0x84, 0x94, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0xb0, 0x6e, 0xa5, 0x60, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x60, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x60, 0x8f, 0x3f, 0x61, 0xe0, 0x5c, - 0x90, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, 0x3f, 0xd3, - 0x3f, 0x3f, 0x3f, 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x95, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0xa1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8a, 0x8b, 0x3f, 0x3f, 0x4c, 0x6e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0xb0, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0xc2, - 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, - 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, - 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xf0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x60, 0x60, 0x4f, 0x4f, 0x60, 0x60, 0x6a, 0x6a, - 0x60, 0x60, 0x6a, 0x6a, 0x4e, 0x4e, 0x4e, 0x4e, - 0x5f, 0x5f, 0x5f, 0x5f, 0xd3, 0xd3, 0xd3, 0xd3, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x60, 0x60, 0x6a, 0x6a, - 0x7e, 0x4f, 0x4e, 0x4e, 0x4e, 0x5f, 0x5f, 0x5f, - 0xd3, 0xd3, 0xd3, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x61, 0xe0, 0xe7, 0x60, 0x4f, 0x60, 0x4f, - 0x60, 0x4f, 0x60, 0x4f, 0x60, 0x4f, 0x60, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0x6e, 0x8a, 0x8b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xba, 0xbb, 0x3f, 0x7f, 0x7f, 0x6b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x51, 0x3f, 0x3f, - 0x62, 0x41, 0x44, 0x45, 0x53, 0x54, 0x55, 0x68, - 0x71, 0x4e, 0x69, 0x69, 0x69, 0x69, 0x41, 0x41, - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x3f, - 0x49, 0x51, 0x52, 0x53, 0x54, 0x3f, 0x56, 0x3f, - 0x58, 0x59, 0x3f, 0x63, 0x64, 0x3f, 0x66, 0x67, - 0x68, 0x69, 0x71, 0x46, 0x42, 0x53, 0x64, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbc, 0xbc, 0xbc, 0xbc, 0x6d, 0x6d, 0x6d, - 0x6b, 0x3f, 0x4b, 0x3f, 0x5e, 0x7a, 0x6f, 0x5a, - 0x60, 0x4d, 0x5d, 0xc0, 0xd0, 0x3f, 0x3f, 0x7b, - 0x50, 0x5c, 0x4e, 0x60, 0x4c, 0x6e, 0x7e, 0x3f, - 0xe0, 0x5b, 0x6c, 0x7c, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4a, 0xb1, 0x5f, 0xbc, 0x6a, 0xb2, 0x3f, 0x3f, - 0x4f, 0x4c, 0xb0, 0x6e, 0xa5, 0x3f, 0xd6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x0400, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_424 = -{ - { 424, 1, 0x003f, 0x003f, "IBM EBCDIC Hebrew" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_437.c b/reactos/tools/unicode/c_437.c deleted file mode 100644 index a91b4424cb4..00000000000 --- a/reactos/tools/unicode/c_437.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 437 (OEM United States) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP437.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, - 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, - 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, - 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, - 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, - 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, - 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, - 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xad, 0x9b, 0x9c, 0x3f, 0x9d, 0x7c, 0x3f, - 0x22, 0x63, 0xa6, 0xae, 0xaa, 0x2d, 0x72, 0x2d, - 0xf8, 0xf1, 0xfd, 0x33, 0x27, 0xe6, 0x3f, 0xfa, - 0x2c, 0x31, 0xa7, 0xaf, 0xac, 0xab, 0x3f, 0xa8, - 0x41, 0x41, 0x41, 0x41, 0x8e, 0x8f, 0x92, 0x80, - 0x45, 0x90, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0xa5, 0x4f, 0x4f, 0x4f, 0x4f, 0x99, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x9a, 0x59, 0x3f, 0xe1, - 0x85, 0xa0, 0x83, 0x61, 0x84, 0x86, 0x91, 0x87, - 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, - 0x64, 0xa4, 0x95, 0xa2, 0x93, 0x6f, 0x94, 0xf6, - 0x6f, 0x97, 0xa3, 0x96, 0x81, 0x79, 0x3f, 0x98, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x9f, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x8e, 0x84, - 0x41, 0x61, 0x92, 0x91, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x8f, 0x86, 0x92, 0x91, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x99, 0x94, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0xea, - 0x3f, 0x41, 0x42, 0xe2, 0x3f, 0x45, 0x5a, 0x48, - 0xe9, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0xe4, 0x54, 0x59, 0xe8, 0x58, - 0x3f, 0xea, 0x49, 0x59, 0xe0, 0xee, 0x3f, 0x3f, - 0x3f, 0xe0, 0xe1, 0x3f, 0xeb, 0xee, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0xe3, 0x3f, 0x3f, 0xe5, 0xe7, 0x3f, 0xed, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0xed, 0xe3, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0xee, 0x3f, 0x3f, - 0x3f, 0xe4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x92, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0xeb, - 0xed, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0xed, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x80, 0x87, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x8b, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x83, 0x41, 0x83, - 0x41, 0x83, 0x41, 0x83, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x88, - 0x45, 0x88, 0x45, 0x88, 0x45, 0x88, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x93, 0x4f, 0x93, 0x4f, 0x93, 0x4f, 0x93, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xee, 0xee, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0xea, 0xea, 0xea, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0xfc, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x9b, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x9e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0xea, 0x3f, - 0x5a, 0x3f, 0x4b, 0x8f, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xe3, 0x3f, 0xe2, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0xfb, 0x3f, 0x3f, 0x3f, 0xec, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0xef, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf7, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0xf0, 0xf0, 0xf0, 0xf3, 0xf2, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0xf3, 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf4, 0xf5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, - 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, - 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, - 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9b, 0x9c, 0xaa, 0x2d, 0x7c, 0x9d, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_437 = -{ - { 437, 1, 0x003f, 0x003f, "OEM United States" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_500.c b/reactos/tools/unicode/c_500.c deleted file mode 100644 index 0fa33c7c1a2..00000000000 --- a/reactos/tools/unicode/c_500.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 500 (IBM EBCDIC International) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/EBCDIC/CP500.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, - 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, - 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, - 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, - 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, - 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5, - 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, - 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef, - 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, - 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5, - 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, - 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, - 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, - 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1, - 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4, - 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae, - 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc, - 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7, - 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5, - 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, - 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff, - 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, - 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, - 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, - 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, - 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, - 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, - 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, - 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, - 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, - 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, - 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, - 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, - 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, - 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, - 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, - 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, - 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, - 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, - 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, - /* 0x0100 .. 0x01ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc3, 0x83, - 0xc3, 0x83, 0xc3, 0x83, 0xc3, 0x83, 0xc4, 0x84, - 0xac, 0x84, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc7, 0x87, 0xc7, 0x87, - 0xc7, 0x87, 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, - 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, - 0xc9, 0x89, 0x3f, 0x3f, 0xd1, 0x91, 0xd2, 0x92, - 0x3f, 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0x3f, - 0x3f, 0xd3, 0x93, 0xd5, 0x95, 0xd5, 0x95, 0xd5, - 0x95, 0x3f, 0x3f, 0x3f, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd9, 0x99, 0xd9, 0x99, - 0xd9, 0x99, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe6, 0xa6, 0xe8, 0xa8, - 0xe8, 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0xa2, - 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xac, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc6, 0x86, 0x3f, 0x3f, 0x3f, 0x3f, 0xc9, - 0x3f, 0x3f, 0x93, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0xd6, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0xe3, 0xe4, - 0xa4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xbb, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, 0xc9, - 0x89, 0xd6, 0x96, 0xe4, 0xa4, 0xfc, 0xdc, 0xfc, - 0xdc, 0xfc, 0xdc, 0xfc, 0xdc, 0x3f, 0x63, 0x43, - 0xc1, 0x81, 0x9e, 0x9c, 0xc7, 0x87, 0xc7, 0x87, - 0xd2, 0x92, 0xd6, 0x96, 0xd6, 0x96, 0x3f, 0x3f, - 0x91, 0x3f, 0x3f, 0x3f, 0xc7, 0x87, 0x3f, 0x3f, - 0xd5, 0x95, 0x67, 0x47, 0x9e, 0x9c, 0x80, 0x70, - /* 0x0200 .. 0x02ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc5, 0x85, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xd9, 0x99, 0xd9, 0x99, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe2, 0xa2, 0xe3, 0xa3, 0x3f, 0x3f, 0xc8, 0x88, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, - 0xc5, 0x85, 0xec, 0xcc, 0xef, 0xcf, 0xd6, 0x96, - 0xd6, 0x96, 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x88, 0x3f, 0x91, 0x99, 0x3f, 0x3f, 0x3f, 0xa6, - 0xa8, 0xbe, 0x7f, 0x79, 0x7d, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5f, 0x3f, 0x5f, 0xa5, - 0x7d, 0xbc, 0xbe, 0x79, 0x3f, 0x6d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x90, 0x3f, 0xa1, 0x7f, 0x3f, 0x3f, - 0x3f, 0x93, 0xa2, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x79, 0xbe, 0x5f, 0xa1, 0xbc, 0xbc, 0x3f, 0x3f, - 0xbd, 0x3f, 0x90, 0x7f, 0xa5, 0x3f, 0x7f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6d, 0x6d, 0x6d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x79, 0xbe, 0x3f, 0x3f, 0xbd, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xbe, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xbe, 0xbd, 0xc1, 0xb3, - 0xc5, 0xc8, 0xc9, 0x3f, 0xd6, 0x3f, 0xe8, 0x3f, - 0x3f, 0xc1, 0xc2, 0x3f, 0x3f, 0xc5, 0xe9, 0xc8, - 0x3f, 0xc9, 0xd2, 0x3f, 0xd4, 0xd5, 0x3f, 0xd6, - 0x3f, 0xd7, 0x3f, 0x3f, 0xe3, 0xe8, 0x3f, 0xe7, - 0x3f, 0x3f, 0xc9, 0xe8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa0, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x3f, 0xe8, 0xe8, 0xe8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x9e, 0xc2, 0x3f, - 0xc4, 0xc5, 0x3f, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, - 0xd3, 0xd4, 0xd5, 0x3f, 0xd6, 0x3f, 0xd7, 0xd9, - 0xe3, 0xe4, 0xe6, 0x81, 0x3f, 0x3f, 0x3f, 0x82, - 0x84, 0x85, 0x3f, 0x3f, 0x3f, 0x87, 0x3f, 0x92, - 0x94, 0x3f, 0x96, 0x3f, 0x3f, 0x3f, 0x97, 0xa3, - 0xa4, 0x3f, 0x3f, 0xa5, 0x3f, 0x59, 0x3f, 0x3f, - 0x3f, 0x3f, 0x89, 0x99, 0xa4, 0xa5, 0x59, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x83, 0x3f, 0x8c, 0x3f, - 0x86, 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0xc1, 0x81, 0xc2, 0x82, 0xc2, 0x82, 0xc2, 0x82, - 0x68, 0x48, 0xc4, 0x84, 0xc4, 0x84, 0xc4, 0x84, - 0xc4, 0x84, 0xc4, 0x84, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc6, 0x86, - 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, 0xc8, 0x88, - 0xc8, 0x88, 0xc8, 0x88, 0xc9, 0x89, 0x77, 0x57, - 0xd2, 0x92, 0xd2, 0x92, 0xd2, 0x92, 0xd3, 0x93, - 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0xd4, 0x94, - 0xd4, 0x94, 0xd4, 0x94, 0xd5, 0x95, 0xd5, 0x95, - 0xd5, 0x95, 0xd5, 0x95, 0xef, 0xcf, 0xef, 0xcf, - 0xd6, 0x96, 0xd6, 0x96, 0xd7, 0x97, 0xd7, 0x97, - 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, - 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe3, 0xa3, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe5, 0xa5, 0xe5, 0xa5, - 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, - 0xe6, 0xa6, 0xe7, 0xa7, 0xe7, 0xa7, 0xe8, 0xa8, - 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0x88, 0xa3, - 0xa6, 0xa8, 0x3f, 0xa2, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0x81, 0xc1, 0x81, 0x62, 0x42, 0x62, 0x42, - 0x62, 0x42, 0x62, 0x42, 0xc1, 0x81, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0x72, 0x52, - 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xeb, 0xcb, 0xeb, 0xcb, 0xeb, 0xcb, 0xeb, 0xcb, - 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe8, 0xa8, 0xe8, 0xa8, 0xe8, 0xa8, - 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe8, 0x3f, 0xe8, 0x3f, 0xe8, 0x3f, 0xe8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbd, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc5, 0xc8, 0xc8, 0xc8, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0xc9, 0xc9, 0xc9, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe8, 0xe8, 0xe8, 0xe8, 0xd7, 0xbd, 0xbd, 0x79, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd6, 0xd6, 0x3f, 0x3f, 0x3f, 0xbe, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x60, 0x3f, 0x60, 0x60, 0x60, 0x3f, 0x6d, - 0x79, 0x7d, 0x6b, 0x79, 0x7f, 0x7f, 0x6b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0xbe, 0x7f, 0x3f, 0x79, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x4f, 0x3f, 0xbc, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x61, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x90, 0x89, 0x3f, 0x3f, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x95, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x3f, - 0x81, 0x85, 0x96, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb0, 0x3f, 0x3f, 0xb1, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0xc3, 0x3f, 0x3f, 0x3f, 0x3f, 0xc5, - 0x3f, 0x3f, 0x87, 0xc8, 0xc8, 0xc8, 0x88, 0x88, - 0xc9, 0xc9, 0xd3, 0x93, 0x3f, 0xd5, 0x3f, 0x3f, - 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xd9, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0x3f, 0x3f, 0x3f, - 0xe9, 0x3f, 0xd2, 0x67, 0xc2, 0xc3, 0x85, 0x85, - 0xc5, 0xc6, 0x3f, 0xd4, 0x96, 0x3f, 0x3f, 0x3f, - 0x3f, 0x89, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc4, 0x84, 0x85, - 0x89, 0x91, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0x3f, 0x3f, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe7, 0x3f, 0x3f, 0xd3, 0xc3, 0xc4, 0xd4, - 0x89, 0x3f, 0x3f, 0x3f, 0xa5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa7, 0x3f, 0x3f, 0x93, 0x83, 0x84, 0x94, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0x5f, 0x6e, 0xa5, 0x60, 0xbb, 0x3f, 0x3f, - 0x3f, 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x60, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x60, 0x8f, 0x3f, 0x61, 0xe0, 0x5c, - 0x90, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, 0x3f, 0xd3, - 0x3f, 0x3f, 0x3f, 0xbb, 0xbb, 0x3f, 0x3f, 0x3f, - 0x3f, 0x95, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0xa1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x8a, 0x8b, 0x3f, 0x3f, 0x4c, 0x6e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xb3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0xc2, - 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, - 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, - 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xf0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x60, 0x60, 0xbb, 0xbb, 0x60, 0x60, 0x6a, 0x6a, - 0x60, 0x60, 0x6a, 0x6a, 0x4e, 0x4e, 0x4e, 0x4e, - 0xba, 0xba, 0xba, 0xba, 0xd3, 0xd3, 0xd3, 0xd3, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x60, 0x60, 0x6a, 0x6a, - 0x7e, 0xbb, 0x4e, 0x4e, 0x4e, 0xba, 0xba, 0xba, - 0xd3, 0xd3, 0xd3, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x61, 0xe0, 0xe7, 0x60, 0xbb, 0x60, 0xbb, - 0x60, 0xbb, 0x60, 0xbb, 0x60, 0xbb, 0x60, 0xbb, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0x6e, 0x8a, 0x8b, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x4a, 0x5a, 0x3f, 0x7f, 0x7f, 0x6b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbc, 0xbc, 0xbc, 0xbc, 0x6d, 0x6d, 0x6d, - 0x6b, 0x3f, 0x4b, 0x3f, 0x5e, 0x7a, 0x6f, 0x4f, - 0x60, 0x4d, 0x5d, 0xc0, 0xd0, 0x3f, 0x3f, 0x7b, - 0x50, 0x5c, 0x4e, 0x60, 0x4c, 0x6e, 0x7e, 0x3f, - 0xe0, 0x5b, 0x6c, 0x7c, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0xb1, 0xba, 0xbc, 0x6a, 0xb2, 0x3f, 0x3f, - 0xbb, 0x4c, 0x5f, 0x6e, 0xa5, 0x3f, 0xd6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_500 = -{ - { 500, 1, 0x003f, 0x003f, "IBM EBCDIC International" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_737.c b/reactos/tools/unicode/c_737.c deleted file mode 100644 index c8c9f82e462..00000000000 --- a/reactos/tools/unicode/c_737.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 737 (OEM Greek 437G) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP737.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, - 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, - 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, - 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, - 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, - 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x03c9, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd, - 0x03cb, 0x03ce, 0x0386, 0x0388, 0x0389, 0x038a, 0x038c, 0x038e, - 0x038f, 0x00b1, 0x2265, 0x2264, 0x03aa, 0x03ab, 0x00f7, 0x2248, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0x3f, - 0x22, 0x63, 0x61, 0x3c, 0x3f, 0x2d, 0x72, 0x2d, - 0xf8, 0xf1, 0xfd, 0x33, 0x27, 0xa3, 0x3f, 0xfa, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x99, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0xf6, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0xea, 0xfa, - 0xeb, 0xec, 0xed, 0x3f, 0xee, 0x3f, 0xef, 0xf0, - 0xe4, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, - 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, - 0x8f, 0x90, 0x3f, 0x91, 0x92, 0x93, 0x94, 0x95, - 0x96, 0x97, 0xf4, 0xf5, 0xe1, 0xe2, 0xe3, 0xe5, - 0xe8, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, - 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xaa, 0xa9, 0xab, 0xac, 0xad, 0xae, - 0xaf, 0xe0, 0xe4, 0xe8, 0xe6, 0xe7, 0xe9, 0x3f, - 0x99, 0x9f, 0x93, 0x93, 0x93, 0xad, 0xa7, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0xa8, 0xaa, 0x3f, 0x87, 0x9c, 0x3f, 0x3f, - 0x3f, 0x91, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x99, 0x9a, 0x9b, - 0xad, 0xae, 0x69, 0x72, 0x75, 0x76, 0x99, 0x9a, - 0xa8, 0xad, 0xae, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x9f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x3f, 0x3f, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x3f, 0x3f, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0x3f, 0x3f, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x3f, 0x3f, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - 0x3f, 0x93, 0x3f, 0x93, 0x3f, 0x93, 0x3f, 0x93, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x98, 0xe1, 0x9c, 0xe2, 0x9e, 0xe3, 0xa0, 0xe5, - 0xa6, 0xe6, 0xac, 0xe7, 0xe0, 0xe9, 0x3f, 0x3f, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, - 0x98, 0x98, 0x98, 0x98, 0xe1, 0x3f, 0x98, 0x98, - 0x80, 0x80, 0x80, 0xea, 0x80, 0x3f, 0xa0, 0x3f, - 0x3f, 0x22, 0x9e, 0x9e, 0xe3, 0x3f, 0x9e, 0x9e, - 0x84, 0xeb, 0x86, 0xec, 0x86, 0x3f, 0x3f, 0x3f, - 0xa0, 0xa0, 0xe4, 0xe4, 0x3f, 0x3f, 0xa0, 0xe4, - 0x88, 0x88, 0x88, 0xed, 0x3f, 0x3f, 0x3f, 0x3f, - 0xac, 0xac, 0xe8, 0xe8, 0xa8, 0xa8, 0xac, 0xe8, - 0x93, 0x93, 0x93, 0xef, 0x90, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0xe0, 0xe0, 0xe9, 0x3f, 0xe0, 0xe0, - 0x8e, 0xee, 0x97, 0xf0, 0x97, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0xfc, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x97, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xa7, 0x9a, 0x82, 0x8f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0xfb, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf7, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0xf3, 0xf2, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0xf3, 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, - 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, - 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, - 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_737 = -{ - { 737, 1, 0x003f, 0x003f, "OEM Greek 437G" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_775.c b/reactos/tools/unicode/c_775.c deleted file mode 100644 index 1765741c765..00000000000 --- a/reactos/tools/unicode/c_775.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 775 (OEM Baltic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP775.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0106, 0x00fc, 0x00e9, 0x0101, 0x00e4, 0x0123, 0x00e5, 0x0107, - 0x0142, 0x0113, 0x0156, 0x0157, 0x012b, 0x0179, 0x00c4, 0x00c5, - 0x00c9, 0x00e6, 0x00c6, 0x014d, 0x00f6, 0x0122, 0x00a2, 0x015a, - 0x015b, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x00a4, - 0x0100, 0x012a, 0x00f3, 0x017b, 0x017c, 0x017a, 0x201d, 0x00a6, - 0x00a9, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x0141, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010c, 0x0118, - 0x0116, 0x2563, 0x2551, 0x2557, 0x255d, 0x012e, 0x0160, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x0172, 0x016a, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x017d, - 0x0105, 0x010d, 0x0119, 0x0117, 0x012f, 0x0161, 0x0173, 0x016b, - 0x017e, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x00d3, 0x00df, 0x014c, 0x0143, 0x00f5, 0x00d5, 0x00b5, 0x0144, - 0x0136, 0x0137, 0x013b, 0x013c, 0x0146, 0x0112, 0x0145, 0x2019, - 0x00ad, 0x00b1, 0x201c, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x201e, - 0x00b0, 0x2219, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0x21, 0x96, 0x9c, 0x9f, 0x59, 0xa7, 0xf5, - 0x22, 0xa8, 0x61, 0xae, 0xaa, 0xf0, 0xa9, 0x2d, - 0xf8, 0xf1, 0xfd, 0xfc, 0x27, 0xe6, 0xf4, 0xfa, - 0x2c, 0xfb, 0x6f, 0xaf, 0xac, 0xab, 0xf3, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x8e, 0x8f, 0x92, 0x43, - 0x45, 0x90, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0xe0, 0x4f, 0xe5, 0x99, 0x9e, - 0x9d, 0x55, 0x55, 0x55, 0x9a, 0x59, 0x3f, 0xe1, - 0x61, 0x61, 0x61, 0x61, 0x84, 0x86, 0x91, 0x63, - 0x65, 0x82, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0xa2, 0x6f, 0xe4, 0x94, 0xf6, - 0x9b, 0x75, 0x75, 0x75, 0x81, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0xa0, 0x83, 0x41, 0x61, 0xb5, 0xd0, 0x80, 0x87, - 0x43, 0x63, 0x43, 0x63, 0xb6, 0xd1, 0x44, 0x64, - 0x44, 0x64, 0xed, 0x89, 0x45, 0x65, 0xb8, 0xd3, - 0xb7, 0xd2, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x95, 0x85, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0xa1, 0x8c, 0x49, 0x69, 0xbd, 0xd4, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0xe8, 0xe9, - 0x3f, 0x4c, 0x6c, 0xea, 0xeb, 0x4c, 0x6c, 0x3f, - 0x3f, 0xad, 0x88, 0xe3, 0xe7, 0xee, 0xec, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0xe2, 0x93, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x8a, 0x8b, - 0x52, 0x72, 0x97, 0x98, 0x53, 0x73, 0x53, 0x73, - 0xbe, 0xd5, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0xc7, 0xd7, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xc6, 0xd6, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x8d, 0xa5, 0xa3, 0xa4, 0xcf, 0xd8, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x8e, 0x84, - 0x41, 0x61, 0x92, 0x91, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x8f, 0x86, 0x92, 0x91, 0x9d, 0x9b, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x99, 0x94, 0xe5, 0xe4, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0xef, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xe1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x92, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0xed, 0x89, 0xed, 0x89, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xe5, 0xe4, 0xe5, 0xe4, - 0xe2, 0x93, 0xe2, 0x93, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x97, 0x98, 0xbe, 0xd5, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0xc7, 0xd7, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0xef, 0x2c, 0x60, 0xf2, 0xa6, 0xf7, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x96, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x8f, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0xa7, 0xa7, - 0x2d, 0x2d, 0xa7, 0xa7, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0xa7, 0xa7, - 0xcd, 0xba, 0xc9, 0xc9, 0xc9, 0xbb, 0xbb, 0xbb, - 0xc8, 0xc8, 0xc8, 0xbc, 0xbc, 0xbc, 0xcc, 0xcc, - 0xcc, 0xb9, 0xb9, 0xb9, 0xcb, 0xcb, 0xcb, 0xca, - 0xca, 0xca, 0xce, 0xce, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0xf2, 0xa6, 0xf7, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x96, 0x9c, 0xaa, 0x2d, 0xa7, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_775 = -{ - { 775, 1, 0x003f, 0x003f, "OEM Baltic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_850.c b/reactos/tools/unicode/c_850.c deleted file mode 100644 index a5bc688e86c..00000000000 --- a/reactos/tools/unicode/c_850.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 850 (OEM Multilingual Latin 1) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP850.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, - 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, - 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, - 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192, - 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, - 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0, - 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, - 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce, - 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580, - 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe, - 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4, - 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, - 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, - 0xf9, 0xb8, 0xa6, 0xae, 0xaa, 0xf0, 0xa9, 0xee, - 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, - 0xf7, 0xfb, 0xa7, 0xaf, 0xac, 0xab, 0xf3, 0xa8, - 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80, - 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8, - 0xd1, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0x9e, - 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0xed, 0xe8, 0xe1, - 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87, - 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, - 0xd0, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6, - 0x9b, 0x97, 0xa3, 0x96, 0x81, 0xec, 0xe7, 0x98, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0xd1, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0xd5, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x9f, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x8e, 0x84, - 0x41, 0x61, 0x92, 0x91, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x8f, 0x86, 0x92, 0x91, 0x9d, 0x9b, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x99, 0x94, 0xe5, 0xe4, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xef, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xee, 0xef, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xef, 0x5e, 0x7e, 0xee, 0xee, 0x3f, 0x3f, - 0xf9, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xf7, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xef, 0x3f, 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0xf9, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xe1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x92, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0xd0, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x80, 0x87, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xd8, 0x8b, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xe5, 0xe4, 0xe5, 0xe4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xb6, 0x83, 0xb6, 0x83, - 0xb6, 0x83, 0xb6, 0x83, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xd2, 0x88, - 0xd2, 0x88, 0xd2, 0x88, 0xd2, 0x88, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xe2, 0x93, 0xe2, 0x93, 0xe2, 0x93, 0xe2, 0x93, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xf9, 0xf9, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0xf2, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xef, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xee, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbd, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x8f, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0xdd, 0xdd, - 0x2d, 0x2d, 0xdd, 0xdd, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0xdd, 0xdd, - 0xcd, 0xba, 0xc9, 0xc9, 0xc9, 0xbb, 0xbb, 0xbb, - 0xc8, 0xc8, 0xc8, 0xbc, 0xbc, 0xbc, 0xcc, 0xcc, - 0xcc, 0xb9, 0xb9, 0xb9, 0xcb, 0xcb, 0xcb, 0xca, - 0xca, 0xca, 0xce, 0xce, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xee, 0xee, 0xee, 0xee, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xbd, 0x9c, 0xaa, 0xee, 0xdd, 0xbe, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_850 = -{ - { 850, 1, 0x003f, 0x003f, "OEM Multilingual Latin 1" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_852.c b/reactos/tools/unicode/c_852.c deleted file mode 100644 index 455732a6698..00000000000 --- a/reactos/tools/unicode/c_852.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 852 (OEM Slovak Latin 2) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP852.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x016f, 0x0107, 0x00e7, - 0x0142, 0x00eb, 0x0150, 0x0151, 0x00ee, 0x0179, 0x00c4, 0x0106, - 0x00c9, 0x0139, 0x013a, 0x00f4, 0x00f6, 0x013d, 0x013e, 0x015a, - 0x015b, 0x00d6, 0x00dc, 0x0164, 0x0165, 0x0141, 0x00d7, 0x010d, - 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x0104, 0x0105, 0x017d, 0x017e, - 0x0118, 0x0119, 0x00ac, 0x017a, 0x010c, 0x015f, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x011a, - 0x015e, 0x2563, 0x2551, 0x2557, 0x255d, 0x017b, 0x017c, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x0102, 0x0103, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, - 0x0111, 0x0110, 0x010e, 0x00cb, 0x010f, 0x0147, 0x00cd, 0x00ce, - 0x011b, 0x2518, 0x250c, 0x2588, 0x2584, 0x0162, 0x016e, 0x2580, - 0x00d3, 0x00df, 0x00d4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, - 0x0154, 0x00da, 0x0155, 0x0170, 0x00fd, 0x00dd, 0x0163, 0x00b4, - 0x00ad, 0x02dd, 0x02db, 0x02c7, 0x02d8, 0x00a7, 0x00f7, 0x00b8, - 0x00b0, 0x00a8, 0x02d9, 0x0171, 0x0158, 0x0159, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0x21, 0x63, 0x4c, 0xcf, 0x59, 0x7c, 0xf5, - 0xf9, 0x63, 0x61, 0xae, 0xaa, 0xf0, 0x72, 0x2d, - 0xf8, 0x3f, 0x32, 0x33, 0xef, 0x75, 0x3f, 0x3f, - 0xf7, 0x31, 0x6f, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0xb5, 0xb6, 0x41, 0x8e, 0x41, 0x41, 0x80, - 0x45, 0x90, 0x45, 0xd3, 0x49, 0xd6, 0xd7, 0x49, - 0xd1, 0x4e, 0x4f, 0xe0, 0xe2, 0x4f, 0x99, 0x9e, - 0x4f, 0x55, 0xe9, 0x55, 0x9a, 0xed, 0x3f, 0xe1, - 0x61, 0xa0, 0x83, 0x61, 0x84, 0x61, 0x61, 0x87, - 0x65, 0x82, 0x65, 0x89, 0x69, 0xa1, 0x8c, 0x69, - 0x64, 0x6e, 0x6f, 0xa2, 0x93, 0x6f, 0x94, 0xf6, - 0x6f, 0x75, 0xa3, 0x75, 0x81, 0xec, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0xc6, 0xc7, 0xa4, 0xa5, 0x8f, 0x86, - 0x43, 0x63, 0x43, 0x63, 0xac, 0x9f, 0xd2, 0xd4, - 0xd1, 0xd0, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0xa8, 0xa9, 0xb7, 0xd8, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x91, 0x92, 0x4c, 0x6c, 0x95, 0x96, 0x3f, - 0x3f, 0x9d, 0x88, 0xe3, 0xe4, 0x4e, 0x6e, 0xd5, - 0xe5, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x8a, 0x8b, 0x4f, 0x6f, 0xe8, 0xea, 0x52, 0x72, - 0xfc, 0xfd, 0x97, 0x98, 0x53, 0x73, 0xb8, 0xad, - 0xe6, 0xe7, 0xdd, 0xee, 0x9b, 0x9c, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0xde, 0x85, - 0xeb, 0xfb, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x8d, 0xab, 0xbd, 0xbe, 0xa6, 0xa7, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xd1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x8e, 0x84, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x99, 0x94, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xef, 0xf1, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0xf3, - 0x27, 0x2d, 0xef, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf4, 0xfa, 0xf8, 0xf2, 0x7e, 0xf1, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xef, 0x5e, 0x7e, 0x2d, 0x2d, 0xf4, 0xfa, - 0xf9, 0x3f, 0xf8, 0xf1, 0xf3, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xf7, - 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xef, 0x3f, 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0xf9, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xe1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x80, 0x87, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x97, 0x98, 0xe6, 0xe7, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xb6, 0x83, 0xb6, 0x83, - 0xb6, 0x83, 0xb6, 0x83, 0x41, 0x61, 0xc6, 0xc7, - 0xc6, 0xc7, 0xc6, 0xc7, 0xc6, 0xc7, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xe2, 0x93, 0xe2, 0x93, 0xe2, 0x93, 0xe2, 0x93, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xf9, 0xf9, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xef, 0xf1, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0xf3, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xc9, 0xc9, 0xc9, 0xbb, 0xbb, 0xbb, - 0xc8, 0xc8, 0xc8, 0xbc, 0xbc, 0xbc, 0xcc, 0xcc, - 0xcc, 0xb9, 0xb9, 0xb9, 0xcb, 0xcb, 0xcb, 0xca, - 0xca, 0xca, 0xce, 0xce, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0xaa, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0xf3, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_852 = -{ - { 852, 1, 0x003f, 0x003f, "OEM Slovak Latin 2" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_855.c b/reactos/tools/unicode/c_855.c deleted file mode 100644 index 6cef840aa7b..00000000000 --- a/reactos/tools/unicode/c_855.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 855 (OEM Cyrillic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP855.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, - 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408, - 0x0459, 0x0409, 0x045a, 0x040a, 0x045b, 0x040b, 0x045c, 0x040c, - 0x045e, 0x040e, 0x045f, 0x040f, 0x044e, 0x042e, 0x044a, 0x042a, - 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, - 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, - 0x0418, 0x2563, 0x2551, 0x2557, 0x255d, 0x0439, 0x0419, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x043a, 0x041a, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, - 0x043b, 0x041b, 0x043c, 0x041c, 0x043d, 0x041d, 0x043e, 0x041e, - 0x043f, 0x2518, 0x250c, 0x2588, 0x2584, 0x041f, 0x044f, 0x2580, - 0x042f, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, - 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044c, 0x042c, 0x2116, - 0x00ad, 0x044b, 0x042b, 0x0437, 0x0417, 0x0448, 0x0428, 0x044d, - 0x042d, 0x0449, 0x0429, 0x0447, 0x0427, 0x00a7, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0x21, 0x63, 0x4c, 0xcf, 0x59, 0x7c, 0xfd, - 0x22, 0x63, 0x61, 0xae, 0x3f, 0xf0, 0x72, 0x2d, - 0x3f, 0x3f, 0x32, 0x33, 0x27, 0x75, 0x3f, 0x3f, - 0x2c, 0x31, 0x6f, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x3f, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0400 .. 0x04ff */ - 0xa9, 0x85, 0x81, 0x83, 0x87, 0x89, 0x8b, 0x8d, - 0x8f, 0x91, 0x93, 0x95, 0x97, 0xb8, 0x99, 0x9b, - 0xa1, 0xa3, 0xec, 0xad, 0xa7, 0xa9, 0xea, 0xf4, - 0xb8, 0xbe, 0xc7, 0xd1, 0xd3, 0xd5, 0xd7, 0xdd, - 0xe2, 0xe4, 0xe6, 0xe8, 0xab, 0xb6, 0xa5, 0xfc, - 0xf6, 0xfa, 0x9f, 0xf2, 0xee, 0xf8, 0x9d, 0xe0, - 0xa0, 0xa2, 0xeb, 0xac, 0xa6, 0xa8, 0xe9, 0xf3, - 0xb7, 0xbd, 0xc6, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xe1, 0xe3, 0xe5, 0xe7, 0xaa, 0xb5, 0xa4, 0xfb, - 0xf5, 0xf9, 0x9e, 0xf1, 0xed, 0xf7, 0x9c, 0xde, - 0xa8, 0x84, 0x80, 0x82, 0x86, 0x88, 0x8a, 0x8c, - 0x8e, 0x90, 0x92, 0x94, 0x96, 0xb7, 0x98, 0x9a, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xea, 0xe9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0xa0, 0xa1, 0xa0, 0x3f, 0x3f, 0xa9, 0xa8, - 0x3f, 0x3f, 0x3f, 0x3f, 0xea, 0xe9, 0xf4, 0xf3, - 0x3f, 0x3f, 0xb8, 0xb7, 0xb8, 0xb7, 0xd7, 0xd6, - 0x3f, 0x3f, 0x3f, 0x3f, 0xf8, 0xf7, 0xe8, 0xe7, - 0xe8, 0xe7, 0xe8, 0xe7, 0xfc, 0xfb, 0x3f, 0x3f, - 0xf2, 0xf1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xd4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0xef, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xc9, 0xc9, 0xc9, 0xbb, 0xbb, 0xbb, - 0xc8, 0xc8, 0xc8, 0xbc, 0xbc, 0xbc, 0xcc, 0xcc, - 0xcc, 0xb9, 0xb9, 0xb9, 0xcb, 0xcb, 0xcb, 0xca, - 0xca, 0xca, 0xce, 0xce, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_855 = -{ - { 855, 1, 0x003f, 0x003f, "OEM Cyrillic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_856.c b/reactos/tools/unicode/c_856.c deleted file mode 100644 index b86d527cde2..00000000000 --- a/reactos/tools/unicode/c_856.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 856 (Hebrew PC) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/CP856.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, 0x009b, 0x00a3, 0x009d, 0x00d7, 0x009f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x003f, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x003f, 0x003f, 0x003f, - 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x003f, 0x003f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00de, 0x2580, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x00b5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x00af, 0x00b4, - 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, - 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x9b, 0x3f, 0x9d, 0x3f, 0x9f, - 0xff, 0x21, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, - 0xf9, 0xb8, 0x61, 0xae, 0xaa, 0xf0, 0xa9, 0xee, - 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, - 0xf7, 0xfb, 0x6f, 0xaf, 0xac, 0xab, 0xf3, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x9e, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0xf6, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xef, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xee, 0xef, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xef, 0x5e, 0x7e, 0xee, 0xee, 0x3f, 0x3f, - 0xf9, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xf7, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xef, 0x3f, 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0xf9, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0500 .. 0x05ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 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, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xf9, 0xf9, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0xf2, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xef, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xee, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbd, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x80, 0x81, 0x82, - 0x83, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0xdd, 0xdd, - 0x2d, 0x2d, 0xdd, 0xdd, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0xdd, 0xdd, - 0xcd, 0xba, 0xc9, 0xc9, 0xc9, 0xbb, 0xbb, 0xbb, - 0xc8, 0xc8, 0xc8, 0xbc, 0xbc, 0xbc, 0xcc, 0xcc, - 0xcc, 0xb9, 0xb9, 0xb9, 0xcb, 0xcb, 0xcb, 0xca, - 0xca, 0xca, 0xce, 0xce, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x89, 0x3f, 0x3f, - 0x92, 0x80, 0x83, 0x84, 0x8b, 0x8c, 0x8d, 0x98, - 0x9a, 0x2b, 0x99, 0x99, 0x99, 0x99, 0x80, 0x80, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x3f, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x3f, 0x8e, 0x3f, - 0x90, 0x91, 0x3f, 0x93, 0x94, 0x3f, 0x96, 0x97, - 0x98, 0x99, 0x9a, 0x85, 0x81, 0x8b, 0x94, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xee, 0xee, 0xee, 0xee, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xbd, 0x9c, 0xaa, 0xee, 0xdd, 0xbe, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x0400, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_856 = -{ - { 856, 1, 0x003f, 0x003f, "Hebrew PC" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_857.c b/reactos/tools/unicode/c_857.c deleted file mode 100644 index 782927ea26a..00000000000 --- a/reactos/tools/unicode/c_857.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 857 (OEM Turkish) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP857.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, - 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x0131, 0x00c4, 0x00c5, - 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, - 0x0130, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x015e, 0x015f, - 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x011e, 0x011f, - 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0, - 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, - 0x00ba, 0x00aa, 0x00ca, 0x00cb, 0x00c8, 0x003f, 0x00cd, 0x00ce, - 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580, - 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x003f, - 0x00d7, 0x00da, 0x00db, 0x00d9, 0x00ec, 0x00ff, 0x00af, 0x00b4, - 0x00ad, 0x00b1, 0x003f, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, - 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, - 0xf9, 0xb8, 0xd1, 0xae, 0xaa, 0xf0, 0xa9, 0xee, - 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, - 0xf7, 0xfb, 0xd0, 0xaf, 0xac, 0xab, 0xf3, 0xa8, - 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80, - 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8, - 0x44, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0xe8, - 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0x59, 0x3f, 0xe1, - 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87, - 0x8a, 0x82, 0x88, 0x89, 0xec, 0xa1, 0x8c, 0x8b, - 0x64, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6, - 0x9b, 0x97, 0xa3, 0x96, 0x81, 0x79, 0x3f, 0xed, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0xa6, 0xa7, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x98, 0x8d, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x9e, 0x9f, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x8e, 0x84, - 0x41, 0x61, 0x92, 0x91, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x8f, 0x86, 0x92, 0x91, 0x9d, 0x9b, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x99, 0x94, 0xe5, 0xe4, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xef, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xee, 0xef, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xef, 0x5e, 0x7e, 0xee, 0xee, 0x3f, 0x3f, - 0xf9, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xf7, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xef, 0x3f, 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0xf9, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xe1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x92, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x80, 0x87, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0xd8, 0x8b, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0xe5, 0xe4, 0xe5, 0xe4, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0xb6, 0x83, 0xb6, 0x83, - 0xb6, 0x83, 0xb6, 0x83, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0xd2, 0x88, - 0xd2, 0x88, 0xd2, 0x88, 0xd2, 0x88, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0xe2, 0x93, 0xe2, 0x93, 0xe2, 0x93, 0xe2, 0x93, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xf9, 0xf9, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0xef, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xef, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xee, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xbd, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x8f, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0xdd, 0xdd, - 0x2d, 0x2d, 0xdd, 0xdd, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0xdd, 0xdd, - 0xcd, 0xba, 0xc9, 0xc9, 0xc9, 0xbb, 0xbb, 0xbb, - 0xc8, 0xc8, 0xc8, 0xbc, 0xbc, 0xbc, 0xcc, 0xcc, - 0xcc, 0xb9, 0xb9, 0xb9, 0xcb, 0xcb, 0xcb, 0xca, - 0xca, 0xca, 0xce, 0xce, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xee, 0xee, 0xee, 0xee, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xbd, 0x9c, 0xaa, 0xee, 0xdd, 0xbe, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_857 = -{ - { 857, 1, 0x003f, 0x003f, "OEM Turkish" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_860.c b/reactos/tools/unicode/c_860.c deleted file mode 100644 index f090561a7fa..00000000000 --- a/reactos/tools/unicode/c_860.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 860 (OEM Portuguese) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP860.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e3, 0x00e0, 0x00c1, 0x00e7, - 0x00ea, 0x00ca, 0x00e8, 0x00cd, 0x00d4, 0x00ec, 0x00c3, 0x00c2, - 0x00c9, 0x00c0, 0x00c8, 0x00f4, 0x00f5, 0x00f2, 0x00da, 0x00f9, - 0x00cc, 0x00d5, 0x00dc, 0x00a2, 0x00a3, 0x00d9, 0x20a7, 0x00d3, - 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, - 0x00bf, 0x00d2, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, - 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, - 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xad, 0x9b, 0x9c, 0x3f, 0x59, 0x7c, 0x3f, - 0x22, 0x63, 0xa6, 0xae, 0xaa, 0x2d, 0x72, 0x2d, - 0xf8, 0xf1, 0xfd, 0x33, 0x27, 0xe6, 0x3f, 0xfa, - 0x2c, 0x31, 0xa7, 0xaf, 0xac, 0xab, 0x3f, 0xa8, - 0x91, 0x86, 0x8f, 0x8e, 0x41, 0x41, 0x41, 0x80, - 0x92, 0x90, 0x89, 0x45, 0x98, 0x8b, 0x49, 0x49, - 0x44, 0xa5, 0xa9, 0x9f, 0x8c, 0x99, 0x4f, 0x78, - 0x4f, 0x9d, 0x96, 0x55, 0x9a, 0x59, 0x3f, 0xe1, - 0x85, 0xa0, 0x83, 0x84, 0x61, 0x61, 0x61, 0x87, - 0x8a, 0x82, 0x88, 0x65, 0x8d, 0xa1, 0x69, 0x69, - 0x64, 0xa4, 0x95, 0xa2, 0x93, 0x94, 0x6f, 0xf6, - 0x6f, 0x97, 0xa3, 0x75, 0x81, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x99, 0x94, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0xea, - 0x3f, 0x41, 0x42, 0xe2, 0x3f, 0x45, 0x5a, 0x48, - 0xe9, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0xe4, 0x54, 0x59, 0xe8, 0x58, - 0x3f, 0xea, 0x49, 0x59, 0xe0, 0xee, 0x3f, 0x3f, - 0x3f, 0xe0, 0xe1, 0x3f, 0xeb, 0xee, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0xe3, 0x3f, 0x3f, 0xe5, 0xe7, 0x3f, 0xed, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0xed, 0xe3, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0xee, 0x3f, 0x3f, - 0x3f, 0xe4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0xeb, - 0xed, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0xed, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x80, 0x87, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x99, 0x94, 0x99, 0x94, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x8f, 0x83, 0x8f, 0x83, - 0x8f, 0x83, 0x8f, 0x83, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x89, 0x88, - 0x89, 0x88, 0x89, 0x88, 0x89, 0x88, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x8c, 0x93, 0x8c, 0x93, 0x8c, 0x93, 0x8c, 0x93, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xee, 0xee, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0xea, 0xea, 0xea, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0xfc, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x9b, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x9e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0xea, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xe3, 0x3f, 0xe2, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0xfb, 0x3f, 0x3f, 0x3f, 0xec, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0xef, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf7, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0xf0, 0xf0, 0xf0, 0xf3, 0xf2, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0xf3, 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf4, 0xf5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, - 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, - 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, - 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9b, 0x9c, 0xaa, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_860 = -{ - { 860, 1, 0x003f, 0x003f, "OEM Portuguese" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_861.c b/reactos/tools/unicode/c_861.c deleted file mode 100644 index f799726ef24..00000000000 --- a/reactos/tools/unicode/c_861.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 861 (OEM Icelandic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP861.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, - 0x00ea, 0x00eb, 0x00e8, 0x00d0, 0x00f0, 0x00de, 0x00c4, 0x00c5, - 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00fe, 0x00fb, 0x00dd, - 0x00fd, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x20a7, 0x0192, - 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00c1, 0x00cd, 0x00d3, 0x00da, - 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, - 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, - 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xad, 0x63, 0x9c, 0x3f, 0x59, 0x7c, 0x3f, - 0x22, 0x63, 0x61, 0xae, 0xaa, 0x2d, 0x72, 0x2d, - 0xf8, 0xf1, 0xfd, 0x33, 0x27, 0xe6, 0x3f, 0xfa, - 0x2c, 0x31, 0x6f, 0xaf, 0xac, 0xab, 0x3f, 0xa8, - 0x41, 0xa4, 0x41, 0x41, 0x8e, 0x8f, 0x92, 0x80, - 0x45, 0x90, 0x45, 0x45, 0x49, 0xa5, 0x49, 0x49, - 0x8b, 0x4e, 0x4f, 0xa6, 0x4f, 0x4f, 0x99, 0x78, - 0x9d, 0x55, 0xa7, 0x55, 0x9a, 0x97, 0x8d, 0xe1, - 0x85, 0xa0, 0x83, 0x61, 0x84, 0x86, 0x91, 0x87, - 0x8a, 0x82, 0x88, 0x89, 0x69, 0xa1, 0x69, 0x69, - 0x8c, 0x6e, 0x6f, 0xa2, 0x93, 0x6f, 0x94, 0xf6, - 0x9b, 0x75, 0xa3, 0x96, 0x81, 0x98, 0x95, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x8b, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x9f, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x8e, 0x84, - 0x41, 0x61, 0x92, 0x91, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x8f, 0x86, 0x92, 0x91, 0x9d, 0x9b, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x99, 0x94, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0xea, - 0x3f, 0x41, 0x42, 0xe2, 0x3f, 0x45, 0x5a, 0x48, - 0xe9, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0xe4, 0x54, 0x59, 0xe8, 0x58, - 0x3f, 0xea, 0x49, 0x59, 0xe0, 0xee, 0x3f, 0x3f, - 0x3f, 0xe0, 0xe1, 0x3f, 0xeb, 0xee, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0xe3, 0x3f, 0x3f, 0xe5, 0xe7, 0x3f, 0xed, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0xed, 0xe3, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0xee, 0x3f, 0x3f, - 0x3f, 0xe4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x92, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0xeb, - 0xed, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0xed, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x8c, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x80, 0x87, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x83, 0x41, 0x83, - 0x41, 0x83, 0x41, 0x83, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x88, - 0x45, 0x88, 0x45, 0x88, 0x45, 0x88, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x93, 0x4f, 0x93, 0x4f, 0x93, 0x4f, 0x93, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xee, 0xee, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0xea, 0xea, 0xea, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0xfc, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x9e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0xea, 0x3f, - 0x5a, 0x3f, 0x4b, 0x8f, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xe3, 0x3f, 0xe2, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0xfb, 0x3f, 0x3f, 0x3f, 0xec, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0xef, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf7, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0xf0, 0xf0, 0xf0, 0xf3, 0xf2, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0xf3, 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf4, 0xf5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, - 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, - 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, - 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x9c, 0xaa, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_861 = -{ - { 861, 1, 0x003f, 0x003f, "OEM Icelandic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_862.c b/reactos/tools/unicode/c_862.c deleted file mode 100644 index f58a7e5c1fd..00000000000 --- a/reactos/tools/unicode/c_862.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 862 (OEM Hebrew) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP862.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, - 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, - 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, - 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, - 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xad, 0x9b, 0x9c, 0x3f, 0x9d, 0x7c, 0x3f, - 0x22, 0x63, 0xa6, 0xae, 0xaa, 0x2d, 0x72, 0x2d, - 0xf8, 0xf1, 0xfd, 0x33, 0x27, 0xe6, 0x3f, 0xfa, - 0x2c, 0x31, 0xa7, 0xaf, 0xac, 0xab, 0x3f, 0xa8, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0xa5, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0xe1, - 0x61, 0xa0, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0xa1, 0x69, 0x69, - 0x64, 0xa4, 0x6f, 0xa2, 0x6f, 0x6f, 0x6f, 0xf6, - 0x6f, 0x75, 0xa3, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x9f, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0xea, - 0x3f, 0x41, 0x42, 0xe2, 0x3f, 0x45, 0x5a, 0x48, - 0xe9, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0xe4, 0x54, 0x59, 0xe8, 0x58, - 0x3f, 0xea, 0x49, 0x59, 0xe0, 0xee, 0x3f, 0x3f, - 0x3f, 0xe0, 0xe1, 0x3f, 0xeb, 0xee, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0xe3, 0x3f, 0x3f, 0xe5, 0xe7, 0x3f, 0xed, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0xed, 0xe3, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0xee, 0x3f, 0x3f, - 0x3f, 0xe4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0500 .. 0x05ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 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, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0xeb, - 0xed, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0xed, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xee, 0xee, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0xea, 0xea, 0xea, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0xfc, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x9b, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x9e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0xea, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x80, 0x81, 0x82, - 0x83, 0x69, 0x3f, 0x3f, 0xe3, 0x3f, 0xe2, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0xfb, 0x3f, 0x3f, 0x3f, 0xec, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0xef, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf7, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0xf0, 0xf0, 0xf0, 0xf3, 0xf2, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0xf3, 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf4, 0xf5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, - 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, - 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, - 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x89, 0x3f, 0x3f, - 0x92, 0x80, 0x83, 0x84, 0x8b, 0x8c, 0x8d, 0x98, - 0x9a, 0x2b, 0x99, 0x99, 0x99, 0x99, 0x80, 0x80, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x3f, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x3f, 0x8e, 0x3f, - 0x90, 0x91, 0x3f, 0x93, 0x94, 0x3f, 0x96, 0x97, - 0x98, 0x99, 0x9a, 0x85, 0x81, 0x8b, 0x94, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9b, 0x9c, 0xaa, 0x2d, 0x7c, 0x9d, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x0400, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_862 = -{ - { 862, 1, 0x003f, 0x003f, "OEM Hebrew" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_863.c b/reactos/tools/unicode/c_863.c deleted file mode 100644 index f9916d74a87..00000000000 --- a/reactos/tools/unicode/c_863.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 863 (OEM Canadian French) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP863.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00c2, 0x00e0, 0x00b6, 0x00e7, - 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x2017, 0x00c0, 0x00a7, - 0x00c9, 0x00c8, 0x00ca, 0x00f4, 0x00cb, 0x00cf, 0x00fb, 0x00f9, - 0x00a4, 0x00d4, 0x00dc, 0x00a2, 0x00a3, 0x00d9, 0x00db, 0x0192, - 0x00a6, 0x00b4, 0x00f3, 0x00fa, 0x00a8, 0x00b8, 0x00b3, 0x00af, - 0x00ce, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00be, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, - 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, - 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0x21, 0x9b, 0x9c, 0x98, 0x59, 0xa0, 0x8f, - 0xa4, 0x63, 0x61, 0xae, 0xaa, 0x2d, 0x72, 0xa7, - 0xf8, 0xf1, 0xfd, 0xa6, 0xa1, 0xe6, 0x86, 0xfa, - 0xa5, 0x31, 0x6f, 0xaf, 0xac, 0xab, 0xad, 0x3f, - 0x8e, 0x41, 0x84, 0x41, 0x41, 0x41, 0x41, 0x80, - 0x91, 0x90, 0x92, 0x94, 0x49, 0x49, 0xa8, 0x95, - 0x44, 0x4e, 0x4f, 0x4f, 0x99, 0x4f, 0x4f, 0x78, - 0x4f, 0x9d, 0x55, 0x9e, 0x9a, 0x59, 0x3f, 0xe1, - 0x85, 0x61, 0x83, 0x61, 0x61, 0x61, 0x61, 0x87, - 0x8a, 0x82, 0x88, 0x89, 0x69, 0x69, 0x8c, 0x8b, - 0x64, 0x6e, 0x6f, 0xa2, 0x93, 0x6f, 0x6f, 0xf6, - 0x6f, 0x97, 0xa3, 0x96, 0x81, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x9f, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0xa1, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0xa7, 0xa1, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0xa1, 0x5e, 0x7e, 0xa7, 0xa7, 0x3f, 0x3f, - 0xa4, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa5, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0xa1, 0x3f, 0x3f, 0xa4, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa1, 0xa4, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0xea, - 0x3f, 0x41, 0x42, 0xe2, 0x3f, 0x45, 0x5a, 0x48, - 0xe9, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0xe4, 0x54, 0x59, 0xe8, 0x58, - 0x3f, 0xea, 0x49, 0x59, 0xe0, 0xee, 0x3f, 0x3f, - 0x3f, 0xe0, 0xe1, 0x3f, 0xeb, 0xee, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0xe3, 0x3f, 0x3f, 0xe5, 0xe7, 0x3f, 0xed, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0xed, 0xe3, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0xee, 0x3f, 0x3f, - 0x3f, 0xe4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0xeb, - 0xed, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0xed, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x80, 0x87, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x95, 0x8b, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x84, 0x83, 0x84, 0x83, - 0x84, 0x83, 0x84, 0x83, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x92, 0x88, - 0x92, 0x88, 0x92, 0x88, 0x92, 0x88, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x99, 0x93, 0x99, 0x93, 0x99, 0x93, 0x99, 0x93, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xee, 0xee, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0xa4, 0xa4, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0xea, 0xea, 0xea, 0xa1, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x8d, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0xa1, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0xa7, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0xfc, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x9b, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0xea, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xe3, 0x3f, 0xe2, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0xfb, 0x3f, 0x3f, 0x3f, 0xec, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0xef, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf7, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0xf0, 0xf0, 0xf0, 0xf3, 0xf2, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0xf3, 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf4, 0xf5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0xa0, 0xa0, - 0x2d, 0x2d, 0xa0, 0xa0, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0xa0, 0xa0, - 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, - 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, - 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, - 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa7, 0xa7, 0xa7, 0xa7, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9b, 0x9c, 0xaa, 0xa7, 0xa0, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_863 = -{ - { 863, 1, 0x003f, 0x003f, "OEM Canadian French" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_864.c b/reactos/tools/unicode/c_864.c deleted file mode 100644 index 852a8cf0af5..00000000000 --- a/reactos/tools/unicode/c_864.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 864 (OEM Arabic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP864.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x066a, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00b0, 0x00b7, 0x2219, 0x221a, 0x2592, 0x2500, 0x2502, 0x253c, - 0x2524, 0x252c, 0x251c, 0x2534, 0x2510, 0x250c, 0x2514, 0x2518, - 0x03b2, 0x221e, 0x03c6, 0x00b1, 0x00bd, 0x00bc, 0x2248, 0x00ab, - 0x00bb, 0xfef7, 0xfef8, 0x009b, 0x009c, 0xfefb, 0xfefc, 0x009f, - 0x00a0, 0x00ad, 0xfe82, 0x00a3, 0x00a4, 0xfe84, 0x003f, 0x00a7, - 0xfe8e, 0xfe8f, 0xfe95, 0xfe99, 0x060c, 0xfe9d, 0xfea1, 0xfea5, - 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, - 0x0668, 0x0669, 0xfed1, 0x061b, 0xfeb1, 0xfeb5, 0xfeb9, 0x061f, - 0x00a2, 0xfe80, 0xfe81, 0xfe83, 0xfe85, 0xfeca, 0xfe8b, 0xfe8d, - 0xfe91, 0xfe93, 0xfe97, 0xfe9b, 0xfe9f, 0xfea3, 0xfea7, 0xfea9, - 0xfeab, 0xfead, 0xfeaf, 0xfeb3, 0xfeb7, 0xfebb, 0xfebf, 0xfec1, - 0xfec5, 0xfecb, 0xfecf, 0x00a6, 0x00ac, 0x00f7, 0x00d7, 0xfec9, - 0x0640, 0xfed3, 0xfed7, 0xfedb, 0xfedf, 0xfee3, 0xfee7, 0xfeeb, - 0xfeed, 0xfeef, 0xfef3, 0xfebd, 0xfecc, 0xfece, 0xfecd, 0xfee1, - 0xfe7d, 0x0651, 0xfee5, 0xfee9, 0xfeec, 0xfef0, 0xfef2, 0xfed0, - 0xfed5, 0xfef5, 0xfef6, 0xfedd, 0xfed9, 0xfef1, 0x25a0, 0x003f -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 0x3f, 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x9b, 0x9c, 0x3f, 0x3f, 0x9f, - 0xa0, 0x21, 0xc0, 0xa3, 0xa4, 0x59, 0xdb, 0xa7, - 0x22, 0x63, 0x61, 0x97, 0xdc, 0xa1, 0x72, 0x2d, - 0x80, 0x93, 0x32, 0x33, 0x27, 0x75, 0x3f, 0x81, - 0x2c, 0x31, 0x6f, 0x98, 0x95, 0x94, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0xde, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x90, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0xdd, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x86, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x80, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x80, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x81, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x92, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x90, 0x3f, 0x59, 0x59, 0x59, 0x92, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0600 .. 0x06ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xac, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xbb, 0x3f, 0x3f, 0x3f, 0xbf, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0x25, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x90, 0x3f, 0x3f, - 0x92, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x90, 0x3f, - 0x3f, 0x92, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x82, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x80, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xc0, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x93, 0x3f, 0x2f, 0x5c, 0x2a, - 0x80, 0x82, 0x83, 0x3f, 0x3f, 0x3f, 0x91, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x96, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x97, 0x98, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x81, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x85, 0x85, 0x86, 0x86, 0x2d, 0x2d, 0xdb, 0xdb, - 0x2d, 0x2d, 0xdb, 0xdb, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x2d, 0x2d, 0xdb, 0xdb, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0xdc, 0xdc, 0xdc, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x84, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x97, 0x98, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x3f, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xf0, 0x3f, 0x3f, - 0xc1, 0xc2, 0xa2, 0xc3, 0xa5, 0xc4, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xc6, 0x3f, 0xc7, 0xa8, 0xa9, - 0x3f, 0xc8, 0x3f, 0xc9, 0x3f, 0xaa, 0x3f, 0xca, - 0x3f, 0xab, 0x3f, 0xcb, 0x3f, 0xad, 0x3f, 0xcc, - 0x3f, 0xae, 0x3f, 0xcd, 0x3f, 0xaf, 0x3f, 0xce, - 0x3f, 0xcf, 0x3f, 0xd0, 0x3f, 0xd1, 0x3f, 0xd2, - 0x3f, 0xbc, 0x3f, 0xd3, 0x3f, 0xbd, 0x3f, 0xd4, - 0x3f, 0xbe, 0x3f, 0xd5, 0x3f, 0xeb, 0x3f, 0xd6, - 0x3f, 0xd7, 0x3f, 0x3f, 0x3f, 0xd8, 0x3f, 0x3f, - 0x3f, 0xdf, 0xc5, 0xd9, 0xec, 0xee, 0xed, 0xda, - 0xf7, 0xba, 0x3f, 0xe1, 0x3f, 0xf8, 0x3f, 0xe2, - 0x3f, 0xfc, 0x3f, 0xe3, 0x3f, 0xfb, 0x3f, 0xe4, - 0x3f, 0xef, 0x3f, 0xe5, 0x3f, 0xf2, 0x3f, 0xe6, - 0x3f, 0xf3, 0x3f, 0xe7, 0xf4, 0xe8, 0x3f, 0xe9, - 0xf5, 0xfd, 0xf6, 0xea, 0x3f, 0xf9, 0xfa, 0x99, - 0x9a, 0x3f, 0x3f, 0x9d, 0x9e, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 0x21, 0x22, 0x23, 0x24, 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc0, 0xa3, 0xdc, 0x2d, 0xdb, 0x59, 0x3f, 0x3f, - 0x86, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x1200, 0x0400, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_864 = -{ - { 864, 1, 0x003f, 0x003f, "OEM Arabic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_865.c b/reactos/tools/unicode/c_865.c deleted file mode 100644 index 7233cf7499c..00000000000 --- a/reactos/tools/unicode/c_865.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 865 (OEM Nordic) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP865.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, - 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, - 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, - 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x20a7, 0x0192, - 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, - 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00a4, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, - 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, - 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xad, 0x63, 0x9c, 0xaf, 0x59, 0x7c, 0x3f, - 0x22, 0x63, 0xa6, 0xae, 0xaa, 0x2d, 0x72, 0x2d, - 0xf8, 0xf1, 0xfd, 0x33, 0x27, 0xe6, 0x3f, 0xfa, - 0x2c, 0x31, 0xa7, 0x3e, 0xac, 0xab, 0x3f, 0xa8, - 0x41, 0x41, 0x41, 0x41, 0x8e, 0x8f, 0x92, 0x80, - 0x45, 0x90, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0xa5, 0x4f, 0x4f, 0x4f, 0x4f, 0x99, 0x78, - 0x9d, 0x55, 0x55, 0x55, 0x9a, 0x59, 0x3f, 0xe1, - 0x85, 0xa0, 0x83, 0x61, 0x84, 0x86, 0x91, 0x87, - 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, - 0x64, 0xa4, 0x95, 0xa2, 0x93, 0x6f, 0x94, 0xf6, - 0x9b, 0x97, 0xa3, 0x96, 0x81, 0x79, 0x3f, 0x98, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x9f, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x9a, 0x81, 0x9a, - 0x81, 0x9a, 0x81, 0x9a, 0x81, 0x3f, 0x8e, 0x84, - 0x41, 0x61, 0x92, 0x91, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x8f, 0x86, 0x92, 0x91, 0x9d, 0x9b, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x99, 0x94, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0xea, - 0x3f, 0x41, 0x42, 0xe2, 0x3f, 0x45, 0x5a, 0x48, - 0xe9, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0xe4, 0x54, 0x59, 0xe8, 0x58, - 0x3f, 0xea, 0x49, 0x59, 0xe0, 0xee, 0x3f, 0x3f, - 0x3f, 0xe0, 0xe1, 0x3f, 0xeb, 0xee, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe6, 0x3f, 0x3f, 0x3f, - 0xe3, 0x3f, 0x3f, 0xe5, 0xe7, 0x3f, 0xed, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0x3f, 0x59, 0x59, 0x59, 0xed, 0xe3, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0xee, 0x3f, 0x3f, - 0x3f, 0xe4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x92, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xe1, 0x3f, 0xeb, - 0xed, 0x3f, 0x69, 0x72, 0x75, 0x76, 0xe1, 0x3f, - 0x3f, 0xed, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x80, 0x87, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x8b, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x83, 0x41, 0x83, - 0x41, 0x83, 0x41, 0x83, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x88, - 0x45, 0x88, 0x45, 0x88, 0x45, 0x88, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x93, 0x4f, 0x93, 0x4f, 0x93, 0x4f, 0x93, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xee, 0xee, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0xea, 0xea, 0xea, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0xfc, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x9e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0xea, 0x3f, - 0x5a, 0x3f, 0x4b, 0x8f, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xe3, 0x3f, 0xe2, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0xfb, 0x3f, 0x3f, 0x3f, 0xec, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0xef, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf7, 0xf7, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0xf0, 0xf0, 0xf0, 0xf3, 0xf2, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0xf3, 0xf2, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf4, 0xf5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, - 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, - 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, - 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x9c, 0xaa, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_865 = -{ - { 865, 1, 0x003f, 0x003f, "OEM Nordic" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_866.c b/reactos/tools/unicode/c_866.c deleted file mode 100644 index b92e117b9bc..00000000000 --- a/reactos/tools/unicode/c_866.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 866 (OEM Russian) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP866.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, - 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0x21, 0x63, 0x4c, 0xfd, 0x59, 0x7c, 0x3f, - 0x22, 0x63, 0x61, 0x3c, 0x3f, 0x2d, 0x72, 0x2d, - 0xf8, 0x3f, 0x32, 0x33, 0x27, 0x75, 0x3f, 0xfa, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0xfa, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0400 .. 0x04ff */ - 0x85, 0xf0, 0x3f, 0x83, 0xf2, 0x3f, 0x3f, 0xf4, - 0x3f, 0x3f, 0x3f, 0x3f, 0x8a, 0x88, 0xf6, 0x3f, - 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, 0xac, 0xad, 0xae, 0xaf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xa5, 0xf1, 0x3f, 0xa3, 0xf3, 0x3f, 0x3f, 0xf5, - 0x3f, 0x3f, 0x3f, 0x3f, 0xaa, 0xa8, 0xf7, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x86, 0xa6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x80, 0xa0, 0x80, 0xa0, 0x3f, 0x3f, 0x85, 0xa5, - 0x3f, 0x3f, 0x3f, 0x3f, 0x86, 0xa6, 0x87, 0xa7, - 0x3f, 0x3f, 0x88, 0xa8, 0x88, 0xa8, 0x8e, 0xae, - 0x3f, 0x3f, 0x3f, 0x3f, 0x9d, 0xed, 0x93, 0xe3, - 0x93, 0xe3, 0x93, 0xe3, 0x97, 0xe7, 0x3f, 0x3f, - 0x9b, 0xeb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xad, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0xf9, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0xfc, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0xf9, 0xfb, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xfa, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x7c, 0x7c, - 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, - 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, - 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, - 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0xdd, 0x3f, 0x3f, 0x3f, - 0xde, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_866 = -{ - { 866, 1, 0x003f, 0x003f, "OEM Russian" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_869.c b/reactos/tools/unicode/c_869.c deleted file mode 100644 index 5b7c71ab49f..00000000000 --- a/reactos/tools/unicode/c_869.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 869 (OEM Greek) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP869.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0386, 0x0087, - 0x00b7, 0x00ac, 0x00a6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389, - 0x038a, 0x03aa, 0x038c, 0x0093, 0x0094, 0x038e, 0x03ab, 0x00a9, - 0x038f, 0x00b2, 0x00b3, 0x03ac, 0x00a3, 0x03ad, 0x03ae, 0x03af, - 0x03ca, 0x0390, 0x03cc, 0x03cd, 0x0391, 0x0392, 0x0393, 0x0394, - 0x0395, 0x0396, 0x0397, 0x00bd, 0x0398, 0x0399, 0x00ab, 0x00bb, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039a, 0x039b, 0x039c, - 0x039d, 0x2563, 0x2551, 0x2557, 0x255d, 0x039e, 0x039f, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x03a0, 0x03a1, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x03a3, - 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, - 0x03b3, 0x2518, 0x250c, 0x2588, 0x2584, 0x03b4, 0x03b5, 0x2580, - 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, - 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x0384, - 0x00ad, 0x00b1, 0x03c5, 0x03c6, 0x03c7, 0x00a7, 0x03c8, 0x0385, - 0x00b0, 0x00a8, 0x03c9, 0x03cb, 0x03b0, 0x03ce, 0x25a0, 0x00a0 -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, 0x84, 0x85, 0x3f, 0x87, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x93, 0x94, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0x21, 0x63, 0x9c, 0x3f, 0x59, 0x8a, 0xf5, - 0xf9, 0x97, 0x61, 0xae, 0x89, 0xf0, 0x72, 0x8e, - 0xf8, 0xf1, 0x99, 0x9a, 0x27, 0xe6, 0x3f, 0x88, - 0x2c, 0x31, 0x6f, 0xaf, 0x3f, 0xab, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0xd7, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xb3, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x8b, 0x8c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x8e, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xf8, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x8e, 0x8e, 0x3f, 0x3f, - 0xf9, 0x3f, 0xf8, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0xf9, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xef, 0xf7, 0x86, 0x88, - 0x8d, 0x8f, 0x90, 0x3f, 0x92, 0x3f, 0x95, 0x98, - 0xa1, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, - 0xac, 0xad, 0xb5, 0xb6, 0xb7, 0xb8, 0xbd, 0xbe, - 0xc6, 0xc7, 0x3f, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, - 0xd4, 0xd5, 0x91, 0x96, 0x9b, 0x9d, 0x9e, 0x9f, - 0xfc, 0xd6, 0xd7, 0xd8, 0xdd, 0xde, 0xe0, 0xe1, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xed, 0xec, 0xee, 0xf2, 0xf3, 0xf4, - 0xf6, 0xfa, 0xa0, 0xfb, 0xa2, 0xa3, 0xfd, 0x3f, - 0xd7, 0xe2, 0xd1, 0xd1, 0xd1, 0xf3, 0xea, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe4, 0xeb, 0xed, 0x3f, 0xac, 0xde, 0x3f, 0x3f, - 0x3f, 0xcf, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0xd7, 0xd8, 0xdd, - 0xf3, 0xf4, 0x69, 0x72, 0x75, 0x76, 0xd7, 0xd8, - 0xeb, 0xf3, 0xf4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0xe2, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0x3f, 0x3f, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x3f, 0x3f, - 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0x3f, 0x3f, - 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0x3f, 0x3f, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, - 0x3f, 0xd1, 0x3f, 0xd1, 0x3f, 0xd1, 0x3f, 0xd1, - 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, - 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, - 0xd6, 0x9b, 0xde, 0x9d, 0xe1, 0x9e, 0xe3, 0x9f, - 0xe9, 0xa2, 0xf2, 0xa3, 0xfa, 0xfd, 0x3f, 0x3f, - 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, - 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, - 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, - 0xd6, 0xd6, 0xd6, 0xd6, 0x9b, 0x3f, 0xd6, 0xd6, - 0xa4, 0xa4, 0xa4, 0x86, 0xa4, 0x3f, 0xe3, 0x3f, - 0x3f, 0xf9, 0xe1, 0xe1, 0x9e, 0x3f, 0xe1, 0xe1, - 0xa8, 0x8d, 0xaa, 0x8f, 0xaa, 0x3f, 0x3f, 0x3f, - 0xe3, 0xe3, 0xa0, 0xa1, 0x3f, 0x3f, 0xe3, 0xa0, - 0xad, 0xad, 0xad, 0x90, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf2, 0xf2, 0xfb, 0xfc, 0xeb, 0xeb, 0xf2, 0xfb, - 0xd1, 0xd1, 0xd1, 0x95, 0xc7, 0xf9, 0xf7, 0x60, - 0x3f, 0x3f, 0xfa, 0xfa, 0xfd, 0x3f, 0xfa, 0xfa, - 0xbe, 0x92, 0xd5, 0x98, 0xd5, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x8e, 0x8e, 0x8e, 0x3f, 0x5f, - 0x8b, 0x8c, 0x2c, 0x8b, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x8b, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x8e, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf8, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x9c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0xd5, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0xea, 0xd8, 0xa6, 0xc6, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0xf1, 0x3f, 0x2f, 0x5c, 0x2a, - 0xf8, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xae, 0xaf, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x88, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0xc4, 0xc4, 0xb3, 0xb3, 0x2d, 0x2d, 0x8a, 0x8a, - 0x2d, 0x2d, 0x8a, 0x8a, 0xda, 0xda, 0xda, 0xda, - 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, - 0xd9, 0xd9, 0xd9, 0xd9, 0xc3, 0xc3, 0xc3, 0xc3, - 0xc3, 0xc3, 0xc3, 0xc3, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb4, 0xb4, 0xb4, 0xb4, 0xc2, 0xc2, 0xc2, 0xc2, - 0xc2, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, - 0xc5, 0xc5, 0xc5, 0xc5, 0x2d, 0x2d, 0x8a, 0x8a, - 0xcd, 0xba, 0xc9, 0xc9, 0xc9, 0xbb, 0xbb, 0xbb, - 0xc8, 0xc8, 0xc8, 0xbc, 0xbc, 0xbc, 0xcc, 0xcc, - 0xcc, 0xb9, 0xb9, 0xb9, 0xcb, 0xcb, 0xcb, 0xca, - 0xca, 0xca, 0xce, 0xce, 0xce, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0xdf, 0x3f, 0x3f, 0x3f, 0xdc, 0x3f, 0x3f, 0x3f, - 0xdb, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xb0, 0xb1, 0xb2, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0xae, 0xaf, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x8e, 0x8e, 0x8e, 0x8e, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x8e, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x9c, 0x89, 0x8e, 0x8a, 0x59, 0x3f, 0x3f, - 0xb3, 0x3c, 0x5e, 0x3e, 0x76, 0xfe, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_869 = -{ - { 869, 1, 0x003f, 0x003f, "OEM Greek" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_874.c b/reactos/tools/unicode/c_874.c deleted file mode 100644 index 1a46bf5058c..00000000000 --- a/reactos/tools/unicode/c_874.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 874 (ANSI/OEM Thai) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP874.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0081, 0x0082, 0x0083, 0x0084, 0x2026, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, - 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, - 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, - 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, - 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, - 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, - 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, - 0x0e38, 0x0e39, 0x0e3a, 0x003f, 0x003f, 0x003f, 0x00de, 0x0e3f, - 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, - 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, - 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, - 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x003f, 0x003f, 0x00fe, 0x003f -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x81, 0x82, 0x83, 0x84, 0x3f, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0x3f, - 0x22, 0x63, 0x61, 0x3c, 0x3f, 0x2d, 0x72, 0x97, - 0x3f, 0x3f, 0x32, 0x33, 0x27, 0x75, 0x3f, 0x3f, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x3f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0xfe, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7c, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x91, 0x92, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x97, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x97, 0x97, 0x3f, 0x3f, - 0x22, 0x3f, 0x3f, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x3f, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0e00 .. 0x0eff */ - 0x3f, 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, 0x3f, 0x3f, 0x3f, 0x3f, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x96, 0x97, 0x96, 0x3f, 0x5f, - 0x91, 0x92, 0x2c, 0x91, 0x93, 0x94, 0x2c, 0x3f, - 0x3f, 0x3f, 0x95, 0x3f, 0x2e, 0x3f, 0x85, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x91, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x97, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x80, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x3f, 0x95, 0x56, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x2d, 0x2d, 0x7c, 0x7c, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x2b, 0x2b, 0x2b, 0x2b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, 0x4c, 0x4c, 0x4c, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x2d, 0x7c, 0x7c, - 0x3d, 0x7c, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x4c, 0x4c, 0x4c, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x54, 0x54, 0x54, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x93, 0x94, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x97, 0x97, 0x97, 0x97, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x97, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x97, 0x7c, 0x59, 0x3f, 0x3f, - 0x7c, 0x3c, 0x5e, 0x3e, 0x76, 0x3f, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0400, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_874 = -{ - { 874, 1, 0x003f, 0x003f, "ANSI/OEM Thai" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_875.c b/reactos/tools/unicode/c_875.c deleted file mode 100644 index 987e30b574f..00000000000 --- a/reactos/tools/unicode/c_875.c +++ /dev/null @@ -1,683 +0,0 @@ -/* code page 875 (IBM EBCDIC Greek) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/EBCDIC/CP875.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f, - 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087, - 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007, - 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004, - 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a, - 0x0020, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021, - 0x0026, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, - 0x03a1, 0x03a3, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e, - 0x002d, 0x002f, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, - 0x03aa, 0x03ab, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f, - 0x00a8, 0x0386, 0x0388, 0x0389, 0x00a0, 0x038a, 0x038c, 0x038e, - 0x038f, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022, - 0x0385, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, - 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, - 0x00b4, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, - 0x00a3, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd, - 0x03cb, 0x03ce, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, - 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x00ad, 0x03c9, 0x0390, 0x03b0, 0x2018, 0x2015, - 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, - 0x0051, 0x0052, 0x00b1, 0x00bd, 0x001a, 0x0387, 0x2019, 0x00a6, - 0x005c, 0x001a, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, - 0x0059, 0x005a, 0x00b2, 0x00a7, 0x001a, 0x001a, 0x00ab, 0x00ac, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x00b3, 0x00a9, 0x001a, 0x001a, 0x00bb, 0x009f -}; - -static const unsigned char uni2cp_low[4608] = -{ - /* 0x0000 .. 0x00ff */ - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, - 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, - 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, - 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, - 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, - 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, - 0x74, 0x4f, 0x83, 0xb0, 0x3f, 0xe8, 0xdf, 0xeb, - 0x70, 0xfb, 0x81, 0xee, 0xef, 0xca, 0x99, 0xcf, - 0x90, 0xda, 0xea, 0xfa, 0xa0, 0x9f, 0x3f, 0x3f, - 0x6b, 0xf1, 0x96, 0xfe, 0x3f, 0xdb, 0x3f, 0x3f, - 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc3, - 0xc5, 0xc5, 0xc5, 0xc5, 0xc9, 0xc9, 0xc9, 0xc9, - 0xc4, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xa7, - 0xd6, 0xe4, 0xe4, 0xe4, 0xe4, 0xe8, 0x3f, 0x8b, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x83, - 0x85, 0x85, 0x85, 0x85, 0x89, 0x89, 0x89, 0x89, - 0x84, 0x95, 0x96, 0x96, 0x96, 0x96, 0x96, 0x3f, - 0x96, 0xa4, 0xa4, 0xa4, 0xa4, 0xa8, 0x3f, 0xa8, - /* 0x0100 .. 0x01ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc3, 0x83, - 0xc3, 0x83, 0xc3, 0x83, 0xc3, 0x83, 0xc4, 0x84, - 0xc4, 0x84, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc7, 0x87, 0xc7, 0x87, - 0xc7, 0x87, 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, - 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, 0xc9, 0x89, - 0xc9, 0x89, 0x3f, 0x3f, 0xd1, 0x91, 0xd2, 0x92, - 0x3f, 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0x3f, - 0x3f, 0xd3, 0x93, 0xd5, 0x95, 0xd5, 0x95, 0xd5, - 0x95, 0x3f, 0x3f, 0x3f, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd9, 0x99, 0xd9, 0x99, - 0xd9, 0x99, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe6, 0xa6, 0xe8, 0xa8, - 0xe8, 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0xa2, - 0x82, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xc4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc5, 0xc6, 0x86, 0x3f, 0x3f, 0x3f, 0x3f, 0xc9, - 0x3f, 0x3f, 0x93, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0xd6, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, 0xe3, 0xe4, - 0xa4, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, 0xc9, - 0x89, 0xd6, 0x96, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, - 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0x3f, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc7, 0x87, 0xc7, 0x87, - 0xd2, 0x92, 0xd6, 0x96, 0xd6, 0x96, 0x3f, 0x3f, - 0x91, 0x3f, 0x3f, 0x3f, 0xc7, 0x87, 0x3f, 0x3f, - 0xd5, 0x95, 0xc1, 0x81, 0xc1, 0x81, 0xd6, 0x96, - /* 0x0200 .. 0x02ff */ - 0xc1, 0x81, 0xc1, 0x81, 0xc5, 0x85, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xd9, 0x99, 0xd9, 0x99, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe2, 0xa2, 0xe3, 0xa3, 0x3f, 0x3f, 0xc8, 0x88, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0x81, - 0xc5, 0x85, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x88, 0x3f, 0x91, 0x99, 0x3f, 0x3f, 0x3f, 0xa6, - 0xa8, 0xa0, 0x7f, 0xce, 0xde, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5f, 0x3f, 0x5f, 0xa5, - 0x7d, 0xcf, 0xa0, 0x79, 0x3f, 0x6d, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x90, 0x3f, 0xa1, 0x7f, 0x3f, 0x3f, - 0x3f, 0x93, 0xa2, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x79, 0xa0, 0x5f, 0xa1, 0xcf, 0xcf, 0x3f, 0x3f, - 0x70, 0x3f, 0x90, 0x7f, 0xa5, 0x3f, 0x7f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x6b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6d, 0x6d, 0x6d, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x79, 0xa0, 0x3f, 0x3f, 0x70, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa0, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa0, 0x80, 0x71, 0xdd, - 0x72, 0x73, 0x75, 0x3f, 0x76, 0x3f, 0x77, 0x78, - 0xcc, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, - 0x57, 0x58, 0x3f, 0x59, 0x62, 0x63, 0x64, 0x65, - 0x66, 0x67, 0x68, 0x69, 0xb1, 0xb2, 0xb3, 0xb5, - 0xcd, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x9a, - 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xaa, 0xab, 0xac, - 0xad, 0xae, 0xba, 0xaf, 0xbb, 0xbc, 0xbd, 0xbe, - 0xbf, 0xcb, 0xb4, 0xb8, 0xb6, 0xb7, 0xb9, 0x3f, - 0x8b, 0x9b, 0x63, 0x63, 0x63, 0xbd, 0xad, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9d, 0xae, 0xba, 0x3f, 0x48, 0x8e, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0xc1, 0xc2, 0x3f, - 0xc4, 0xc5, 0x3f, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, - 0xd3, 0xd4, 0xd5, 0x3f, 0xd6, 0x3f, 0xd7, 0xd9, - 0xe3, 0xe4, 0xe6, 0x81, 0x3f, 0x3f, 0x3f, 0x82, - 0x84, 0x85, 0x3f, 0x3f, 0x3f, 0x87, 0x3f, 0x92, - 0x94, 0x3f, 0x96, 0x3f, 0x3f, 0x3f, 0x97, 0xa3, - 0xa4, 0x3f, 0x3f, 0xa5, 0x3f, 0x8b, 0x8c, 0x8d, - 0xbd, 0xbe, 0x89, 0x99, 0xa4, 0xa5, 0x8b, 0x8c, - 0xae, 0xbd, 0xbe, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x83, 0x3f, 0x84, 0x3f, - 0x86, 0x3f, 0x87, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xa3, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xa9, 0x3f, 0x3f, 0x3f, 0x9b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0xc1, 0x81, 0xc2, 0x82, 0xc2, 0x82, 0xc2, 0x82, - 0xc3, 0x83, 0xc4, 0x84, 0xc4, 0x84, 0xc4, 0x84, - 0xc4, 0x84, 0xc4, 0x84, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc6, 0x86, - 0xc7, 0x87, 0xc8, 0x88, 0xc8, 0x88, 0xc8, 0x88, - 0xc8, 0x88, 0xc8, 0x88, 0xc9, 0x89, 0xc9, 0x89, - 0xd2, 0x92, 0xd2, 0x92, 0xd2, 0x92, 0xd3, 0x93, - 0xd3, 0x93, 0xd3, 0x93, 0xd3, 0x93, 0xd4, 0x94, - 0xd4, 0x94, 0xd4, 0x94, 0xd5, 0x95, 0xd5, 0x95, - 0xd5, 0x95, 0xd5, 0x95, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd7, 0x97, 0xd7, 0x97, - 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, 0xd9, 0x99, - 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, 0xe2, 0xa2, - 0xe2, 0xa2, 0xe3, 0xa3, 0xe3, 0xa3, 0xe3, 0xa3, - 0xe3, 0xa3, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe5, 0xa5, 0xe5, 0xa5, - 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, 0xe6, 0xa6, - 0xe6, 0xa6, 0xe7, 0xa7, 0xe7, 0xa7, 0xe8, 0xa8, - 0xe9, 0xa9, 0xe9, 0xa9, 0xe9, 0xa9, 0x88, 0xa3, - 0xa6, 0xa8, 0x3f, 0xa2, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, 0xc1, 0x81, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, 0xc5, 0x85, - 0xc9, 0x89, 0xc9, 0x89, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, 0xd6, 0x96, - 0xd6, 0x96, 0xd6, 0x96, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, 0xe4, 0xa4, - 0xe4, 0xa4, 0xe8, 0xa8, 0xe8, 0xa8, 0xe8, 0xa8, - 0xe8, 0xa8, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0x3f, 0x3f, - 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x3f, 0x3f, - 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, - 0x3f, 0x63, 0x3f, 0x63, 0x3f, 0x63, 0x3f, 0x63, - 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, - 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, - 0x8a, 0xb1, 0x8e, 0xb2, 0x9a, 0xb3, 0x9c, 0xb5, - 0xac, 0xb6, 0xbc, 0xb7, 0xcb, 0xb9, 0x3f, 0x3f, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, - 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, - 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, - 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, - 0x8a, 0x8a, 0x8a, 0x8a, 0xb1, 0x3f, 0x8a, 0x8a, - 0x41, 0x41, 0x41, 0x71, 0x41, 0x3f, 0x9c, 0x3f, - 0x3f, 0x70, 0x9a, 0x9a, 0xb3, 0x3f, 0x9a, 0x9a, - 0x45, 0x72, 0x47, 0x73, 0x47, 0x3f, 0x3f, 0x3f, - 0x9c, 0x9c, 0xb4, 0xcc, 0x3f, 0x3f, 0x9c, 0xb4, - 0x49, 0x49, 0x49, 0x75, 0x3f, 0x3f, 0x3f, 0x3f, - 0xbc, 0xbc, 0xb8, 0xcd, 0xae, 0xae, 0xbc, 0xb8, - 0x63, 0x63, 0x63, 0x77, 0x58, 0x70, 0x80, 0x79, - 0x3f, 0x3f, 0xcb, 0xcb, 0xb9, 0x3f, 0xcb, 0xcb, - 0x56, 0x76, 0x67, 0x78, 0x67, 0xa0, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x60, 0x3f, 0xcf, 0xcf, 0xcf, 0x3f, 0x6d, - 0xce, 0xde, 0x6b, 0xce, 0x7f, 0x7f, 0x6b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x4b, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0xa0, 0x7f, 0x3f, 0xce, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x4f, 0x3f, 0xcf, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x61, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x90, 0x89, 0x3f, 0x3f, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x95, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x4e, 0x60, 0x7e, 0x4d, 0x5d, 0x3f, - 0x81, 0x85, 0x96, 0xa7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x83, 0x3f, 0x3f, 0xb0, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0xc3, 0x3f, 0x3f, 0x3f, 0x3f, 0xc5, - 0x3f, 0x3f, 0x87, 0xc8, 0xc8, 0xc8, 0x88, 0x88, - 0xc9, 0xc9, 0xd3, 0x93, 0x3f, 0xd5, 0x3f, 0x3f, - 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xd9, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xe9, 0x3f, 0x67, 0x3f, - 0xe9, 0x3f, 0xd2, 0xc1, 0xc2, 0xc3, 0x85, 0x85, - 0xc5, 0xc6, 0x3f, 0xd4, 0x96, 0x3f, 0x3f, 0x3f, - 0x3f, 0x89, 0x3f, 0x3f, 0xad, 0x8c, 0x43, 0x57, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc4, 0x84, 0x85, - 0x89, 0x91, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xc9, 0x3f, 0x3f, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xe7, 0x3f, 0x3f, 0xd3, 0xc3, 0xc4, 0xd4, - 0x89, 0x3f, 0x3f, 0x3f, 0xa5, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa7, 0x3f, 0x3f, 0x93, 0x83, 0x84, 0x94, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0x5f, 0x6e, 0xa5, 0x60, 0x6a, 0x3f, 0x3f, - 0x3f, 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x60, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x60, 0xda, 0x3f, 0x61, 0xe0, 0x5c, - 0x90, 0x3f, 0xe5, 0x3f, 0x3f, 0x3f, 0x3f, 0xd3, - 0x3f, 0x3f, 0x3f, 0x6a, 0x6a, 0x3f, 0x3f, 0x3f, - 0x3f, 0x95, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, - 0x3f, 0xa1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xa1, 0xa1, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x7e, 0x7e, 0x7e, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xee, 0xfe, 0x3f, 0x3f, 0x4c, 0x6e, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4c, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc1, 0xc2, - 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, - 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, - 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xf0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x60, 0x60, 0x6a, 0x6a, 0x60, 0x60, 0xdf, 0xdf, - 0x60, 0x60, 0xdf, 0xdf, 0x4e, 0x4e, 0x4e, 0x4e, - 0xef, 0xef, 0xef, 0xef, 0xd3, 0xd3, 0xd3, 0xd3, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x60, 0x60, 0xdf, 0xdf, - 0x7e, 0x6a, 0x4e, 0x4e, 0x4e, 0xef, 0xef, 0xef, - 0xd3, 0xd3, 0xd3, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0xe3, 0xe3, 0xe3, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x61, 0xe0, 0xe7, 0x60, 0x6a, 0x60, 0x6a, - 0x60, 0x6a, 0x60, 0x6a, 0x60, 0x6a, 0x60, 0x6a, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd6, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x40, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4c, 0x6e, 0xee, 0xfe, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x4a, 0x5a, 0x3f, 0x7f, 0x7f, 0x6b, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x4e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xcf, 0xcf, 0xcf, 0xcf, 0x6d, 0x6d, 0x6d, - 0x6b, 0x3f, 0x4b, 0x3f, 0x5e, 0x7a, 0x6f, 0x4f, - 0xcf, 0x4d, 0x5d, 0xc0, 0xd0, 0x3f, 0x3f, 0x7b, - 0x50, 0x5c, 0x4e, 0x60, 0x4c, 0x6e, 0x7e, 0x3f, - 0xe0, 0x5b, 0x6c, 0x7c, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x83, 0xb0, 0xef, 0xcf, 0xdf, 0xe8, 0x3f, 0x3f, - 0x6a, 0x4c, 0x5f, 0x6e, 0xa5, 0x3f, 0xd6, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0d00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0e00, 0x1100, 0x1100, 0x0f00, 0x1000 -}; - -const struct sbcs_table cptable_875 = -{ - { 875, 1, 0x003f, 0x003f, "IBM EBCDIC Greek" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_878.c b/reactos/tools/unicode/c_878.c deleted file mode 100644 index 41cfe802a9d..00000000000 --- a/reactos/tools/unicode/c_878.c +++ /dev/null @@ -1,716 +0,0 @@ -/* code page 878 (Russian KOI8) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-R.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, - 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, - 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, - 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, - 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, - 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, - 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, - 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, - 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, - 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, - 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a -}; - -static const unsigned char uni2cp_low[4864] = -{ - /* 0x0000 .. 0x00ff */ - 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, 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, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9a, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0x3f, - 0x22, 0xbf, 0x61, 0x3c, 0x3f, 0x2d, 0x72, 0x2d, - 0x9c, 0x3f, 0x9d, 0x33, 0x27, 0x75, 0x3f, 0x9e, - 0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, - 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, - 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, - 0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, - 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, - 0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x9f, - 0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79, - /* 0x0100 .. 0x01ff */ - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63, - 0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64, - 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67, - 0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, - 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69, - 0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b, - 0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f, - 0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e, - 0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72, - 0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79, - 0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73, - 0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49, - 0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55, - 0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x81, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49, - 0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55, - 0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67, - 0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f, - 0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f, - 0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f, - /* 0x0200 .. 0x02ff */ - 0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75, - 0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, - 0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77, - 0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76, - 0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x9c, 0x3f, 0x7e, 0x22, 0x3f, 0x3f, - 0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0300 .. 0x03ff */ - 0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f, - 0x22, 0x3f, 0x9c, 0x22, 0x76, 0x3f, 0x22, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x9e, - 0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f, - 0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48, - 0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f, - 0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58, - 0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x0400 .. 0x04ff */ - 0xe5, 0xb3, 0x3f, 0xe7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xeb, 0xe9, 0xf5, 0x3f, - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, - 0xc5, 0xa3, 0x3f, 0xc7, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0xcb, 0xc9, 0xd5, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xf6, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xe1, 0xc1, 0xe1, 0xc1, 0x3f, 0x3f, 0xe5, 0xc5, - 0x3f, 0x3f, 0x3f, 0x3f, 0xf6, 0xd6, 0xfa, 0xda, - 0x3f, 0x3f, 0xe9, 0xc9, 0xe9, 0xc9, 0xef, 0xcf, - 0x3f, 0x3f, 0x3f, 0x3f, 0xfc, 0xdc, 0xf5, 0xd5, - 0xf5, 0xd5, 0xf5, 0xd5, 0xfe, 0xde, 0x3f, 0x3f, - 0xf9, 0xd9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1d00 .. 0x1dff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f, - 0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b, - 0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52, - 0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62, - 0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b, - 0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74, - 0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xce, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x63, 0x3f, 0x64, 0x3f, - 0x66, 0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x7a, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1e00 .. 0x1eff */ - 0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62, - 0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64, - 0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66, - 0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68, - 0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69, - 0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c, - 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d, - 0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e, - 0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70, - 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72, - 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, - 0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74, - 0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76, - 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77, - 0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79, - 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74, - 0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65, - 0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, - 0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75, - 0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79, - 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x1f00 .. 0x1fff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f, - 0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, - /* 0x2000 .. 0x20ff */ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f, - 0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f, - 0x3f, 0x3f, 0x95, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x9c, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f, - 0x61, 0x65, 0x6f, 0x78, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2100 .. 0x21ff */ - 0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45, - 0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68, - 0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f, - 0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f, - 0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65, - 0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65, - 0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f, - 0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d, - 0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, - 0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2200 .. 0x22ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a, - 0x9c, 0x95, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c, - 0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f, - 0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, - 0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x97, 0x97, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3d, 0x3d, 0x3d, 0x3d, 0x98, 0x99, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e, - 0x98, 0x99, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9e, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2300 .. 0x23ff */ - 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x93, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2400 .. 0x24ff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 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, - 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, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x2500 .. 0x25ff */ - 0x80, 0x80, 0x81, 0x81, 0x2d, 0x2d, 0x7c, 0x7c, - 0x2d, 0x2d, 0x7c, 0x7c, 0x82, 0x82, 0x82, 0x82, - 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, - 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x2d, 0x2d, 0x7c, 0x7c, - 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, - 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, - 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, - 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c, - 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, - 0x8b, 0x3f, 0x3f, 0x3f, 0x8c, 0x3f, 0x3f, 0x3f, - 0x8d, 0x3f, 0x3f, 0x3f, 0x8e, 0x3f, 0x3f, 0x3f, - 0x8f, 0x90, 0x91, 0x92, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x94, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0x3000 .. 0x30ff */ - 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfb00 .. 0xfbff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xfe00 .. 0xfeff */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f, - 0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21, - 0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23, - 0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f, - 0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* 0xff00 .. 0xffff */ - 0x3f, 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, 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, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f, - 0x81, 0x3c, 0x5e, 0x3e, 0x76, 0x94, 0x4f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - /* defaults */ - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, - 0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100 -}; - -const struct sbcs_table cptable_878 = -{ - { 878, 1, 0x003f, 0x003f, "Russian KOI8" }, - cp2uni, - uni2cp_low, - uni2cp_high -}; diff --git a/reactos/tools/unicode/c_932.c b/reactos/tools/unicode/c_932.c deleted file mode 100644 index 041760ef8c4..00000000000 --- a/reactos/tools/unicode/c_932.c +++ /dev/null @@ -1,5242 +0,0 @@ -/* code page 932 (ANSI/OEM Japanese Shift-JIS) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[12032] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x003f, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, - 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, - 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, - 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, - 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, - 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, - 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, - 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003f, 0x00fe, 0x003f, - /* unused lead bytes */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte 81 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x3000, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0xff1a, 0xff1b, - 0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0x00a8, 0xff3e, - 0xffe3, 0xff3f, 0x30fd, 0x30fe, 0x309d, 0x309e, 0x3003, 0x4edd, - 0x3005, 0x3006, 0x3007, 0x30fc, 0x2015, 0x2010, 0xff0f, 0xff3c, - 0xff5e, 0x2225, 0xff5c, 0x2026, 0x2025, 0x2018, 0x2019, 0x201c, - 0x201d, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, 0xff5b, - 0xff5d, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, - 0x300f, 0x3010, 0x3011, 0xff0b, 0xff0d, 0x00b1, 0x00d7, 0x003f, - 0x00f7, 0xff1d, 0x2260, 0xff1c, 0xff1e, 0x2266, 0x2267, 0x221e, - 0x2234, 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xffe5, - 0xff04, 0xffe0, 0xffe1, 0xff05, 0xff03, 0xff06, 0xff0a, 0xff20, - 0x00a7, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, - 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x203b, 0x3012, - 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, 0x2229, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x2227, 0x2228, 0xffe2, 0x21d2, 0x21d4, 0x2200, 0x2203, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, - 0x2252, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235, 0x222b, - 0x222c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x212b, 0x2030, 0x266f, 0x266d, 0x266a, 0x2020, 0x2021, 0x00b6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x25ef, 0x003f, 0x003f, 0x003f, - /* lead byte 82 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xff10, - 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, - 0xff19, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, - 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, - 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, - 0xff39, 0xff3a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, - 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, - 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, - 0xff58, 0xff59, 0xff5a, 0x003f, 0x003f, 0x003f, 0x003f, 0x3041, - 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, - 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, - 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, - 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, - 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, - 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, - 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, - 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, - 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, - 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, - 0x3092, 0x3093, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte 83 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, - 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, - 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, - 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, - 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, - 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, - 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, - 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x003f, - 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, - 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, - 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0391, - 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, - 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, - 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x03b1, - 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, - 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, - 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte 84 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, - 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, - 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, - 0x042f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, - 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x003f, - 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, - 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, - 0x044e, 0x044f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x2500, - 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c, 0x2524, - 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b, 0x2517, - 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, 0x2528, - 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte 87 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, - 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, - 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162, 0x2163, - 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x003f, 0x3349, - 0x3314, 0x3322, 0x334d, 0x3318, 0x3327, 0x3303, 0x3336, 0x3351, - 0x3357, 0x330d, 0x3326, 0x3323, 0x332b, 0x334a, 0x333b, 0x339c, - 0x339d, 0x339e, 0x338e, 0x338f, 0x33c4, 0x33a1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x337b, 0x003f, - 0x301d, 0x301f, 0x2116, 0x33cd, 0x2121, 0x32a4, 0x32a5, 0x32a6, - 0x32a7, 0x32a8, 0x3231, 0x3232, 0x3239, 0x337e, 0x337d, 0x337c, - 0x2252, 0x2261, 0x222b, 0x222e, 0x2211, 0x221a, 0x22a5, 0x2220, - 0x221f, 0x22bf, 0x2235, 0x2229, 0x222a, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte 88 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x4e9c, - 0x5516, 0x5a03, 0x963f, 0x54c0, 0x611b, 0x6328, 0x59f6, 0x9022, - 0x8475, 0x831c, 0x7a50, 0x60aa, 0x63e1, 0x6e25, 0x65ed, 0x8466, - 0x82a6, 0x9bf5, 0x6893, 0x5727, 0x65a1, 0x6271, 0x5b9b, 0x59d0, - 0x867b, 0x98f4, 0x7d62, 0x7dbe, 0x9b8e, 0x6216, 0x7c9f, 0x88b7, - 0x5b89, 0x5eb5, 0x6309, 0x6697, 0x6848, 0x95c7, 0x978d, 0x674f, - 0x4ee5, 0x4f0a, 0x4f4d, 0x4f9d, 0x5049, 0x56f2, 0x5937, 0x59d4, - 0x5a01, 0x5c09, 0x60df, 0x610f, 0x6170, 0x6613, 0x6905, 0x70ba, - 0x754f, 0x7570, 0x79fb, 0x7dad, 0x7def, 0x80c3, 0x840e, 0x8863, - 0x8b02, 0x9055, 0x907a, 0x533b, 0x4e95, 0x4ea5, 0x57df, 0x80b2, - 0x90c1, 0x78ef, 0x4e00, 0x58f1, 0x6ea2, 0x9038, 0x7a32, 0x8328, - 0x828b, 0x9c2f, 0x5141, 0x5370, 0x54bd, 0x54e1, 0x56e0, 0x59fb, - 0x5f15, 0x98f2, 0x6deb, 0x80e4, 0x852d, 0x003f, 0x003f, 0x003f, - /* lead byte 89 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9662, 0x9670, 0x96a0, 0x97fb, 0x540b, 0x53f3, 0x5b87, 0x70cf, - 0x7fbd, 0x8fc2, 0x96e8, 0x536f, 0x9d5c, 0x7aba, 0x4e11, 0x7893, - 0x81fc, 0x6e26, 0x5618, 0x5504, 0x6b1d, 0x851a, 0x9c3b, 0x59e5, - 0x53a9, 0x6d66, 0x74dc, 0x958f, 0x5642, 0x4e91, 0x904b, 0x96f2, - 0x834f, 0x990c, 0x53e1, 0x55b6, 0x5b30, 0x5f71, 0x6620, 0x66f3, - 0x6804, 0x6c38, 0x6cf3, 0x6d29, 0x745b, 0x76c8, 0x7a4e, 0x9834, - 0x82f1, 0x885b, 0x8a60, 0x92ed, 0x6db2, 0x75ab, 0x76ca, 0x99c5, - 0x60a6, 0x8b01, 0x8d8a, 0x95b2, 0x698e, 0x53ad, 0x5186, 0x003f, - 0x5712, 0x5830, 0x5944, 0x5bb4, 0x5ef6, 0x6028, 0x63a9, 0x63f4, - 0x6cbf, 0x6f14, 0x708e, 0x7114, 0x7159, 0x71d5, 0x733f, 0x7e01, - 0x8276, 0x82d1, 0x8597, 0x9060, 0x925b, 0x9d1b, 0x5869, 0x65bc, - 0x6c5a, 0x7525, 0x51f9, 0x592e, 0x5965, 0x5f80, 0x5fdc, 0x62bc, - 0x65fa, 0x6a2a, 0x6b27, 0x6bb4, 0x738b, 0x7fc1, 0x8956, 0x9d2c, - 0x9d0e, 0x9ec4, 0x5ca1, 0x6c96, 0x837b, 0x5104, 0x5c4b, 0x61b6, - 0x81c6, 0x6876, 0x7261, 0x4e59, 0x4ffa, 0x5378, 0x6069, 0x6e29, - 0x7a4f, 0x97f3, 0x4e0b, 0x5316, 0x4eee, 0x4f55, 0x4f3d, 0x4fa1, - 0x4f73, 0x52a0, 0x53ef, 0x5609, 0x590f, 0x5ac1, 0x5bb6, 0x5be1, - 0x79d1, 0x6687, 0x679c, 0x67b6, 0x6b4c, 0x6cb3, 0x706b, 0x73c2, - 0x798d, 0x79be, 0x7a3c, 0x7b87, 0x82b1, 0x82db, 0x8304, 0x8377, - 0x83ef, 0x83d3, 0x8766, 0x8ab2, 0x5629, 0x8ca8, 0x8fe6, 0x904e, - 0x971e, 0x868a, 0x4fc4, 0x5ce8, 0x6211, 0x7259, 0x753b, 0x81e5, - 0x82bd, 0x86fe, 0x8cc0, 0x96c5, 0x9913, 0x99d5, 0x4ecb, 0x4f1a, - 0x89e3, 0x56de, 0x584a, 0x58ca, 0x5efb, 0x5feb, 0x602a, 0x6094, - 0x6062, 0x61d0, 0x6212, 0x62d0, 0x6539, 0x003f, 0x003f, 0x003f, - /* lead byte 8a */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9b41, 0x6666, 0x68b0, 0x6d77, 0x7070, 0x754c, 0x7686, 0x7d75, - 0x82a5, 0x87f9, 0x958b, 0x968e, 0x8c9d, 0x51f1, 0x52be, 0x5916, - 0x54b3, 0x5bb3, 0x5d16, 0x6168, 0x6982, 0x6daf, 0x788d, 0x84cb, - 0x8857, 0x8a72, 0x93a7, 0x9ab8, 0x6d6c, 0x99a8, 0x86d9, 0x57a3, - 0x67ff, 0x86ce, 0x920e, 0x5283, 0x5687, 0x5404, 0x5ed3, 0x62e1, - 0x64b9, 0x683c, 0x6838, 0x6bbb, 0x7372, 0x78ba, 0x7a6b, 0x899a, - 0x89d2, 0x8d6b, 0x8f03, 0x90ed, 0x95a3, 0x9694, 0x9769, 0x5b66, - 0x5cb3, 0x697d, 0x984d, 0x984e, 0x639b, 0x7b20, 0x6a2b, 0x003f, - 0x6a7f, 0x68b6, 0x9c0d, 0x6f5f, 0x5272, 0x559d, 0x6070, 0x62ec, - 0x6d3b, 0x6e07, 0x6ed1, 0x845b, 0x8910, 0x8f44, 0x4e14, 0x9c39, - 0x53f6, 0x691b, 0x6a3a, 0x9784, 0x682a, 0x515c, 0x7ac3, 0x84b2, - 0x91dc, 0x938c, 0x565b, 0x9d28, 0x6822, 0x8305, 0x8431, 0x7ca5, - 0x5208, 0x82c5, 0x74e6, 0x4e7e, 0x4f83, 0x51a0, 0x5bd2, 0x520a, - 0x52d8, 0x52e7, 0x5dfb, 0x559a, 0x582a, 0x59e6, 0x5b8c, 0x5b98, - 0x5bdb, 0x5e72, 0x5e79, 0x60a3, 0x611f, 0x6163, 0x61be, 0x63db, - 0x6562, 0x67d1, 0x6853, 0x68fa, 0x6b3e, 0x6b53, 0x6c57, 0x6f22, - 0x6f97, 0x6f45, 0x74b0, 0x7518, 0x76e3, 0x770b, 0x7aff, 0x7ba1, - 0x7c21, 0x7de9, 0x7f36, 0x7ff0, 0x809d, 0x8266, 0x839e, 0x89b3, - 0x8acc, 0x8cab, 0x9084, 0x9451, 0x9593, 0x9591, 0x95a2, 0x9665, - 0x97d3, 0x9928, 0x8218, 0x4e38, 0x542b, 0x5cb8, 0x5dcc, 0x73a9, - 0x764c, 0x773c, 0x5ca9, 0x7feb, 0x8d0b, 0x96c1, 0x9811, 0x9854, - 0x9858, 0x4f01, 0x4f0e, 0x5371, 0x559c, 0x5668, 0x57fa, 0x5947, - 0x5b09, 0x5bc4, 0x5c90, 0x5e0c, 0x5e7e, 0x5fcc, 0x63ee, 0x673a, - 0x65d7, 0x65e2, 0x671f, 0x68cb, 0x68c4, 0x003f, 0x003f, 0x003f, - /* lead byte 8b */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6a5f, 0x5e30, 0x6bc5, 0x6c17, 0x6c7d, 0x757f, 0x7948, 0x5b63, - 0x7a00, 0x7d00, 0x5fbd, 0x898f, 0x8a18, 0x8cb4, 0x8d77, 0x8ecc, - 0x8f1d, 0x98e2, 0x9a0e, 0x9b3c, 0x4e80, 0x507d, 0x5100, 0x5993, - 0x5b9c, 0x622f, 0x6280, 0x64ec, 0x6b3a, 0x72a0, 0x7591, 0x7947, - 0x7fa9, 0x87fb, 0x8abc, 0x8b70, 0x63ac, 0x83ca, 0x97a0, 0x5409, - 0x5403, 0x55ab, 0x6854, 0x6a58, 0x8a70, 0x7827, 0x6775, 0x9ecd, - 0x5374, 0x5ba2, 0x811a, 0x8650, 0x9006, 0x4e18, 0x4e45, 0x4ec7, - 0x4f11, 0x53ca, 0x5438, 0x5bae, 0x5f13, 0x6025, 0x6551, 0x003f, - 0x673d, 0x6c42, 0x6c72, 0x6ce3, 0x7078, 0x7403, 0x7a76, 0x7aae, - 0x7b08, 0x7d1a, 0x7cfe, 0x7d66, 0x65e7, 0x725b, 0x53bb, 0x5c45, - 0x5de8, 0x62d2, 0x62e0, 0x6319, 0x6e20, 0x865a, 0x8a31, 0x8ddd, - 0x92f8, 0x6f01, 0x79a6, 0x9b5a, 0x4ea8, 0x4eab, 0x4eac, 0x4f9b, - 0x4fa0, 0x50d1, 0x5147, 0x7af6, 0x5171, 0x51f6, 0x5354, 0x5321, - 0x537f, 0x53eb, 0x55ac, 0x5883, 0x5ce1, 0x5f37, 0x5f4a, 0x602f, - 0x6050, 0x606d, 0x631f, 0x6559, 0x6a4b, 0x6cc1, 0x72c2, 0x72ed, - 0x77ef, 0x80f8, 0x8105, 0x8208, 0x854e, 0x90f7, 0x93e1, 0x97ff, - 0x9957, 0x9a5a, 0x4ef0, 0x51dd, 0x5c2d, 0x6681, 0x696d, 0x5c40, - 0x66f2, 0x6975, 0x7389, 0x6850, 0x7c81, 0x50c5, 0x52e4, 0x5747, - 0x5dfe, 0x9326, 0x65a4, 0x6b23, 0x6b3d, 0x7434, 0x7981, 0x79bd, - 0x7b4b, 0x7dca, 0x82b9, 0x83cc, 0x887f, 0x895f, 0x8b39, 0x8fd1, - 0x91d1, 0x541f, 0x9280, 0x4e5d, 0x5036, 0x53e5, 0x533a, 0x72d7, - 0x7396, 0x77e9, 0x82e6, 0x8eaf, 0x99c6, 0x99c8, 0x99d2, 0x5177, - 0x611a, 0x865e, 0x55b0, 0x7a7a, 0x5076, 0x5bd3, 0x9047, 0x9685, - 0x4e32, 0x6adb, 0x91e7, 0x5c51, 0x5c48, 0x003f, 0x003f, 0x003f, - /* lead byte 8c */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6398, 0x7a9f, 0x6c93, 0x9774, 0x8f61, 0x7aaa, 0x718a, 0x9688, - 0x7c82, 0x6817, 0x7e70, 0x6851, 0x936c, 0x52f2, 0x541b, 0x85ab, - 0x8a13, 0x7fa4, 0x8ecd, 0x90e1, 0x5366, 0x8888, 0x7941, 0x4fc2, - 0x50be, 0x5211, 0x5144, 0x5553, 0x572d, 0x73ea, 0x578b, 0x5951, - 0x5f62, 0x5f84, 0x6075, 0x6176, 0x6167, 0x61a9, 0x63b2, 0x643a, - 0x656c, 0x666f, 0x6842, 0x6e13, 0x7566, 0x7a3d, 0x7cfb, 0x7d4c, - 0x7d99, 0x7e4b, 0x7f6b, 0x830e, 0x834a, 0x86cd, 0x8a08, 0x8a63, - 0x8b66, 0x8efd, 0x981a, 0x9d8f, 0x82b8, 0x8fce, 0x9be8, 0x003f, - 0x5287, 0x621f, 0x6483, 0x6fc0, 0x9699, 0x6841, 0x5091, 0x6b20, - 0x6c7a, 0x6f54, 0x7a74, 0x7d50, 0x8840, 0x8a23, 0x6708, 0x4ef6, - 0x5039, 0x5026, 0x5065, 0x517c, 0x5238, 0x5263, 0x55a7, 0x570f, - 0x5805, 0x5acc, 0x5efa, 0x61b2, 0x61f8, 0x62f3, 0x6372, 0x691c, - 0x6a29, 0x727d, 0x72ac, 0x732e, 0x7814, 0x786f, 0x7d79, 0x770c, - 0x80a9, 0x898b, 0x8b19, 0x8ce2, 0x8ed2, 0x9063, 0x9375, 0x967a, - 0x9855, 0x9a13, 0x9e78, 0x5143, 0x539f, 0x53b3, 0x5e7b, 0x5f26, - 0x6e1b, 0x6e90, 0x7384, 0x73fe, 0x7d43, 0x8237, 0x8a00, 0x8afa, - 0x9650, 0x4e4e, 0x500b, 0x53e4, 0x547c, 0x56fa, 0x59d1, 0x5b64, - 0x5df1, 0x5eab, 0x5f27, 0x6238, 0x6545, 0x67af, 0x6e56, 0x72d0, - 0x7cca, 0x88b4, 0x80a1, 0x80e1, 0x83f0, 0x864e, 0x8a87, 0x8de8, - 0x9237, 0x96c7, 0x9867, 0x9f13, 0x4e94, 0x4e92, 0x4f0d, 0x5348, - 0x5449, 0x543e, 0x5a2f, 0x5f8c, 0x5fa1, 0x609f, 0x68a7, 0x6a8e, - 0x745a, 0x7881, 0x8a9e, 0x8aa4, 0x8b77, 0x9190, 0x4e5e, 0x9bc9, - 0x4ea4, 0x4f7c, 0x4faf, 0x5019, 0x5016, 0x5149, 0x516c, 0x529f, - 0x52b9, 0x52fe, 0x539a, 0x53e3, 0x5411, 0x003f, 0x003f, 0x003f, - /* lead byte 8d */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x540e, 0x5589, 0x5751, 0x57a2, 0x597d, 0x5b54, 0x5b5d, 0x5b8f, - 0x5de5, 0x5de7, 0x5df7, 0x5e78, 0x5e83, 0x5e9a, 0x5eb7, 0x5f18, - 0x6052, 0x614c, 0x6297, 0x62d8, 0x63a7, 0x653b, 0x6602, 0x6643, - 0x66f4, 0x676d, 0x6821, 0x6897, 0x69cb, 0x6c5f, 0x6d2a, 0x6d69, - 0x6e2f, 0x6e9d, 0x7532, 0x7687, 0x786c, 0x7a3f, 0x7ce0, 0x7d05, - 0x7d18, 0x7d5e, 0x7db1, 0x8015, 0x8003, 0x80af, 0x80b1, 0x8154, - 0x818f, 0x822a, 0x8352, 0x884c, 0x8861, 0x8b1b, 0x8ca2, 0x8cfc, - 0x90ca, 0x9175, 0x9271, 0x783f, 0x92fc, 0x95a4, 0x964d, 0x003f, - 0x9805, 0x9999, 0x9ad8, 0x9d3b, 0x525b, 0x52ab, 0x53f7, 0x5408, - 0x58d5, 0x62f7, 0x6fe0, 0x8c6a, 0x8f5f, 0x9eb9, 0x514b, 0x523b, - 0x544a, 0x56fd, 0x7a40, 0x9177, 0x9d60, 0x9ed2, 0x7344, 0x6f09, - 0x8170, 0x7511, 0x5ffd, 0x60da, 0x9aa8, 0x72db, 0x8fbc, 0x6b64, - 0x9803, 0x4eca, 0x56f0, 0x5764, 0x58be, 0x5a5a, 0x6068, 0x61c7, - 0x660f, 0x6606, 0x6839, 0x68b1, 0x6df7, 0x75d5, 0x7d3a, 0x826e, - 0x9b42, 0x4e9b, 0x4f50, 0x53c9, 0x5506, 0x5d6f, 0x5de6, 0x5dee, - 0x67fb, 0x6c99, 0x7473, 0x7802, 0x8a50, 0x9396, 0x88df, 0x5750, - 0x5ea7, 0x632b, 0x50b5, 0x50ac, 0x518d, 0x6700, 0x54c9, 0x585e, - 0x59bb, 0x5bb0, 0x5f69, 0x624d, 0x63a1, 0x683d, 0x6b73, 0x6e08, - 0x707d, 0x91c7, 0x7280, 0x7815, 0x7826, 0x796d, 0x658e, 0x7d30, - 0x83dc, 0x88c1, 0x8f09, 0x969b, 0x5264, 0x5728, 0x6750, 0x7f6a, - 0x8ca1, 0x51b4, 0x5742, 0x962a, 0x583a, 0x698a, 0x80b4, 0x54b2, - 0x5d0e, 0x57fc, 0x7895, 0x9dfa, 0x4f5c, 0x524a, 0x548b, 0x643e, - 0x6628, 0x6714, 0x67f5, 0x7a84, 0x7b56, 0x7d22, 0x932f, 0x685c, - 0x9bad, 0x7b39, 0x5319, 0x518a, 0x5237, 0x003f, 0x003f, 0x003f, - /* lead byte 8e */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5bdf, 0x62f6, 0x64ae, 0x64e6, 0x672d, 0x6bba, 0x85a9, 0x96d1, - 0x7690, 0x9bd6, 0x634c, 0x9306, 0x9bab, 0x76bf, 0x6652, 0x4e09, - 0x5098, 0x53c2, 0x5c71, 0x60e8, 0x6492, 0x6563, 0x685f, 0x71e6, - 0x73ca, 0x7523, 0x7b97, 0x7e82, 0x8695, 0x8b83, 0x8cdb, 0x9178, - 0x9910, 0x65ac, 0x66ab, 0x6b8b, 0x4ed5, 0x4ed4, 0x4f3a, 0x4f7f, - 0x523a, 0x53f8, 0x53f2, 0x55e3, 0x56db, 0x58eb, 0x59cb, 0x59c9, - 0x59ff, 0x5b50, 0x5c4d, 0x5e02, 0x5e2b, 0x5fd7, 0x601d, 0x6307, - 0x652f, 0x5b5c, 0x65af, 0x65bd, 0x65e8, 0x679d, 0x6b62, 0x003f, - 0x6b7b, 0x6c0f, 0x7345, 0x7949, 0x79c1, 0x7cf8, 0x7d19, 0x7d2b, - 0x80a2, 0x8102, 0x81f3, 0x8996, 0x8a5e, 0x8a69, 0x8a66, 0x8a8c, - 0x8aee, 0x8cc7, 0x8cdc, 0x96cc, 0x98fc, 0x6b6f, 0x4e8b, 0x4f3c, - 0x4f8d, 0x5150, 0x5b57, 0x5bfa, 0x6148, 0x6301, 0x6642, 0x6b21, - 0x6ecb, 0x6cbb, 0x723e, 0x74bd, 0x75d4, 0x78c1, 0x793a, 0x800c, - 0x8033, 0x81ea, 0x8494, 0x8f9e, 0x6c50, 0x9e7f, 0x5f0f, 0x8b58, - 0x9d2b, 0x7afa, 0x8ef8, 0x5b8d, 0x96eb, 0x4e03, 0x53f1, 0x57f7, - 0x5931, 0x5ac9, 0x5ba4, 0x6089, 0x6e7f, 0x6f06, 0x75be, 0x8cea, - 0x5b9f, 0x8500, 0x7be0, 0x5072, 0x67f4, 0x829d, 0x5c61, 0x854a, - 0x7e1e, 0x820e, 0x5199, 0x5c04, 0x6368, 0x8d66, 0x659c, 0x716e, - 0x793e, 0x7d17, 0x8005, 0x8b1d, 0x8eca, 0x906e, 0x86c7, 0x90aa, - 0x501f, 0x52fa, 0x5c3a, 0x6753, 0x707c, 0x7235, 0x914c, 0x91c8, - 0x932b, 0x82e5, 0x5bc2, 0x5f31, 0x60f9, 0x4e3b, 0x53d6, 0x5b88, - 0x624b, 0x6731, 0x6b8a, 0x72e9, 0x73e0, 0x7a2e, 0x816b, 0x8da3, - 0x9152, 0x9996, 0x5112, 0x53d7, 0x546a, 0x5bff, 0x6388, 0x6a39, - 0x7dac, 0x9700, 0x56da, 0x53ce, 0x5468, 0x003f, 0x003f, 0x003f, - /* lead byte 8f */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5b97, 0x5c31, 0x5dde, 0x4fee, 0x6101, 0x62fe, 0x6d32, 0x79c0, - 0x79cb, 0x7d42, 0x7e4d, 0x7fd2, 0x81ed, 0x821f, 0x8490, 0x8846, - 0x8972, 0x8b90, 0x8e74, 0x8f2f, 0x9031, 0x914b, 0x916c, 0x96c6, - 0x919c, 0x4ec0, 0x4f4f, 0x5145, 0x5341, 0x5f93, 0x620e, 0x67d4, - 0x6c41, 0x6e0b, 0x7363, 0x7e26, 0x91cd, 0x9283, 0x53d4, 0x5919, - 0x5bbf, 0x6dd1, 0x795d, 0x7e2e, 0x7c9b, 0x587e, 0x719f, 0x51fa, - 0x8853, 0x8ff0, 0x4fca, 0x5cfb, 0x6625, 0x77ac, 0x7ae3, 0x821c, - 0x99ff, 0x51c6, 0x5faa, 0x65ec, 0x696f, 0x6b89, 0x6df3, 0x003f, - 0x6e96, 0x6f64, 0x76fe, 0x7d14, 0x5de1, 0x9075, 0x9187, 0x9806, - 0x51e6, 0x521d, 0x6240, 0x6691, 0x66d9, 0x6e1a, 0x5eb6, 0x7dd2, - 0x7f72, 0x66f8, 0x85af, 0x85f7, 0x8af8, 0x52a9, 0x53d9, 0x5973, - 0x5e8f, 0x5f90, 0x6055, 0x92e4, 0x9664, 0x50b7, 0x511f, 0x52dd, - 0x5320, 0x5347, 0x53ec, 0x54e8, 0x5546, 0x5531, 0x5617, 0x5968, - 0x59be, 0x5a3c, 0x5bb5, 0x5c06, 0x5c0f, 0x5c11, 0x5c1a, 0x5e84, - 0x5e8a, 0x5ee0, 0x5f70, 0x627f, 0x6284, 0x62db, 0x638c, 0x6377, - 0x6607, 0x660c, 0x662d, 0x6676, 0x677e, 0x68a2, 0x6a1f, 0x6a35, - 0x6cbc, 0x6d88, 0x6e09, 0x6e58, 0x713c, 0x7126, 0x7167, 0x75c7, - 0x7701, 0x785d, 0x7901, 0x7965, 0x79f0, 0x7ae0, 0x7b11, 0x7ca7, - 0x7d39, 0x8096, 0x83d6, 0x848b, 0x8549, 0x885d, 0x88f3, 0x8a1f, - 0x8a3c, 0x8a54, 0x8a73, 0x8c61, 0x8cde, 0x91a4, 0x9266, 0x937e, - 0x9418, 0x969c, 0x9798, 0x4e0a, 0x4e08, 0x4e1e, 0x4e57, 0x5197, - 0x5270, 0x57ce, 0x5834, 0x58cc, 0x5b22, 0x5e38, 0x60c5, 0x64fe, - 0x6761, 0x6756, 0x6d44, 0x72b6, 0x7573, 0x7a63, 0x84b8, 0x8b72, - 0x91b8, 0x9320, 0x5631, 0x57f4, 0x98fe, 0x003f, 0x003f, 0x003f, - /* lead byte 90 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x62ed, 0x690d, 0x6b96, 0x71ed, 0x7e54, 0x8077, 0x8272, 0x89e6, - 0x98df, 0x8755, 0x8fb1, 0x5c3b, 0x4f38, 0x4fe1, 0x4fb5, 0x5507, - 0x5a20, 0x5bdd, 0x5be9, 0x5fc3, 0x614e, 0x632f, 0x65b0, 0x664b, - 0x68ee, 0x699b, 0x6d78, 0x6df1, 0x7533, 0x75b9, 0x771f, 0x795e, - 0x79e6, 0x7d33, 0x81e3, 0x82af, 0x85aa, 0x89aa, 0x8a3a, 0x8eab, - 0x8f9b, 0x9032, 0x91dd, 0x9707, 0x4eba, 0x4ec1, 0x5203, 0x5875, - 0x58ec, 0x5c0b, 0x751a, 0x5c3d, 0x814e, 0x8a0a, 0x8fc5, 0x9663, - 0x976d, 0x7b25, 0x8acf, 0x9808, 0x9162, 0x56f3, 0x53a8, 0x003f, - 0x9017, 0x5439, 0x5782, 0x5e25, 0x63a8, 0x6c34, 0x708a, 0x7761, - 0x7c8b, 0x7fe0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968f, - 0x745e, 0x9ac4, 0x5d07, 0x5d69, 0x6570, 0x67a2, 0x8da8, 0x96db, - 0x636e, 0x6749, 0x6919, 0x83c5, 0x9817, 0x96c0, 0x88fe, 0x6f84, - 0x647a, 0x5bf8, 0x4e16, 0x702c, 0x755d, 0x662f, 0x51c4, 0x5236, - 0x52e2, 0x59d3, 0x5f81, 0x6027, 0x6210, 0x653f, 0x6574, 0x661f, - 0x6674, 0x68f2, 0x6816, 0x6b63, 0x6e05, 0x7272, 0x751f, 0x76db, - 0x7cbe, 0x8056, 0x58f0, 0x88fd, 0x897f, 0x8aa0, 0x8a93, 0x8acb, - 0x901d, 0x9192, 0x9752, 0x9759, 0x6589, 0x7a0e, 0x8106, 0x96bb, - 0x5e2d, 0x60dc, 0x621a, 0x65a5, 0x6614, 0x6790, 0x77f3, 0x7a4d, - 0x7c4d, 0x7e3e, 0x810a, 0x8cac, 0x8d64, 0x8de1, 0x8e5f, 0x78a9, - 0x5207, 0x62d9, 0x63a5, 0x6442, 0x6298, 0x8a2d, 0x7a83, 0x7bc0, - 0x8aac, 0x96ea, 0x7d76, 0x820c, 0x8749, 0x4ed9, 0x5148, 0x5343, - 0x5360, 0x5ba3, 0x5c02, 0x5c16, 0x5ddd, 0x6226, 0x6247, 0x64b0, - 0x6813, 0x6834, 0x6cc9, 0x6d45, 0x6d17, 0x67d3, 0x6f5c, 0x714e, - 0x717d, 0x65cb, 0x7a7f, 0x7bad, 0x7dda, 0x003f, 0x003f, 0x003f, - /* lead byte 91 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7e4a, 0x7fa8, 0x817a, 0x821b, 0x8239, 0x85a6, 0x8a6e, 0x8cce, - 0x8df5, 0x9078, 0x9077, 0x92ad, 0x9291, 0x9583, 0x9bae, 0x524d, - 0x5584, 0x6f38, 0x7136, 0x5168, 0x7985, 0x7e55, 0x81b3, 0x7cce, - 0x564c, 0x5851, 0x5ca8, 0x63aa, 0x66fe, 0x66fd, 0x695a, 0x72d9, - 0x758f, 0x758e, 0x790e, 0x7956, 0x79df, 0x7c97, 0x7d20, 0x7d44, - 0x8607, 0x8a34, 0x963b, 0x9061, 0x9f20, 0x50e7, 0x5275, 0x53cc, - 0x53e2, 0x5009, 0x55aa, 0x58ee, 0x594f, 0x723d, 0x5b8b, 0x5c64, - 0x531d, 0x60e3, 0x60f3, 0x635c, 0x6383, 0x633f, 0x63bb, 0x003f, - 0x64cd, 0x65e9, 0x66f9, 0x5de3, 0x69cd, 0x69fd, 0x6f15, 0x71e5, - 0x4e89, 0x75e9, 0x76f8, 0x7a93, 0x7cdf, 0x7dcf, 0x7d9c, 0x8061, - 0x8349, 0x8358, 0x846c, 0x84bc, 0x85fb, 0x88c5, 0x8d70, 0x9001, - 0x906d, 0x9397, 0x971c, 0x9a12, 0x50cf, 0x5897, 0x618e, 0x81d3, - 0x8535, 0x8d08, 0x9020, 0x4fc3, 0x5074, 0x5247, 0x5373, 0x606f, - 0x6349, 0x675f, 0x6e2c, 0x8db3, 0x901f, 0x4fd7, 0x5c5e, 0x8cca, - 0x65cf, 0x7d9a, 0x5352, 0x8896, 0x5176, 0x63c3, 0x5b58, 0x5b6b, - 0x5c0a, 0x640d, 0x6751, 0x905c, 0x4ed6, 0x591a, 0x592a, 0x6c70, - 0x8a51, 0x553e, 0x5815, 0x59a5, 0x60f0, 0x6253, 0x67c1, 0x8235, - 0x6955, 0x9640, 0x99c4, 0x9a28, 0x4f53, 0x5806, 0x5bfe, 0x8010, - 0x5cb1, 0x5e2f, 0x5f85, 0x6020, 0x614b, 0x6234, 0x66ff, 0x6cf0, - 0x6ede, 0x80ce, 0x817f, 0x82d4, 0x888b, 0x8cb8, 0x9000, 0x902e, - 0x968a, 0x9edb, 0x9bdb, 0x4ee3, 0x53f0, 0x5927, 0x7b2c, 0x918d, - 0x984c, 0x9df9, 0x6edd, 0x7027, 0x5353, 0x5544, 0x5b85, 0x6258, - 0x629e, 0x62d3, 0x6ca2, 0x6fef, 0x7422, 0x8a17, 0x9438, 0x6fc1, - 0x8afe, 0x8338, 0x51e7, 0x86f8, 0x53ea, 0x003f, 0x003f, 0x003f, - /* lead byte 92 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x53e9, 0x4f46, 0x9054, 0x8fb0, 0x596a, 0x8131, 0x5dfd, 0x7aea, - 0x8fbf, 0x68da, 0x8c37, 0x72f8, 0x9c48, 0x6a3d, 0x8ab0, 0x4e39, - 0x5358, 0x5606, 0x5766, 0x62c5, 0x63a2, 0x65e6, 0x6b4e, 0x6de1, - 0x6e5b, 0x70ad, 0x77ed, 0x7aef, 0x7baa, 0x7dbb, 0x803d, 0x80c6, - 0x86cb, 0x8a95, 0x935b, 0x56e3, 0x58c7, 0x5f3e, 0x65ad, 0x6696, - 0x6a80, 0x6bb5, 0x7537, 0x8ac7, 0x5024, 0x77e5, 0x5730, 0x5f1b, - 0x6065, 0x667a, 0x6c60, 0x75f4, 0x7a1a, 0x7f6e, 0x81f4, 0x8718, - 0x9045, 0x99b3, 0x7bc9, 0x755c, 0x7af9, 0x7b51, 0x84c4, 0x003f, - 0x9010, 0x79e9, 0x7a92, 0x8336, 0x5ae1, 0x7740, 0x4e2d, 0x4ef2, - 0x5b99, 0x5fe0, 0x62bd, 0x663c, 0x67f1, 0x6ce8, 0x866b, 0x8877, - 0x8a3b, 0x914e, 0x92f3, 0x99d0, 0x6a17, 0x7026, 0x732a, 0x82e7, - 0x8457, 0x8caf, 0x4e01, 0x5146, 0x51cb, 0x558b, 0x5bf5, 0x5e16, - 0x5e33, 0x5e81, 0x5f14, 0x5f35, 0x5f6b, 0x5fb4, 0x61f2, 0x6311, - 0x66a2, 0x671d, 0x6f6e, 0x7252, 0x753a, 0x773a, 0x8074, 0x8139, - 0x8178, 0x8776, 0x8abf, 0x8adc, 0x8d85, 0x8df3, 0x929a, 0x9577, - 0x9802, 0x9ce5, 0x52c5, 0x6357, 0x76f4, 0x6715, 0x6c88, 0x73cd, - 0x8cc3, 0x93ae, 0x9673, 0x6d25, 0x589c, 0x690e, 0x69cc, 0x8ffd, - 0x939a, 0x75db, 0x901a, 0x585a, 0x6802, 0x63b4, 0x69fb, 0x4f43, - 0x6f2c, 0x67d8, 0x8fbb, 0x8526, 0x7db4, 0x9354, 0x693f, 0x6f70, - 0x576a, 0x58f7, 0x5b2c, 0x7d2c, 0x722a, 0x540a, 0x91e3, 0x9db4, - 0x4ead, 0x4f4e, 0x505c, 0x5075, 0x5243, 0x8c9e, 0x5448, 0x5824, - 0x5b9a, 0x5e1d, 0x5e95, 0x5ead, 0x5ef7, 0x5f1f, 0x608c, 0x62b5, - 0x633a, 0x63d0, 0x68af, 0x6c40, 0x7887, 0x798e, 0x7a0b, 0x7de0, - 0x8247, 0x8a02, 0x8ae6, 0x8e44, 0x9013, 0x003f, 0x003f, 0x003f, - /* lead byte 93 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x90b8, 0x912d, 0x91d8, 0x9f0e, 0x6ce5, 0x6458, 0x64e2, 0x6575, - 0x6ef4, 0x7684, 0x7b1b, 0x9069, 0x93d1, 0x6eba, 0x54f2, 0x5fb9, - 0x64a4, 0x8f4d, 0x8fed, 0x9244, 0x5178, 0x586b, 0x5929, 0x5c55, - 0x5e97, 0x6dfb, 0x7e8f, 0x751c, 0x8cbc, 0x8ee2, 0x985b, 0x70b9, - 0x4f1d, 0x6bbf, 0x6fb1, 0x7530, 0x96fb, 0x514e, 0x5410, 0x5835, - 0x5857, 0x59ac, 0x5c60, 0x5f92, 0x6597, 0x675c, 0x6e21, 0x767b, - 0x83df, 0x8ced, 0x9014, 0x90fd, 0x934d, 0x7825, 0x783a, 0x52aa, - 0x5ea6, 0x571f, 0x5974, 0x6012, 0x5012, 0x515a, 0x51ac, 0x003f, - 0x51cd, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5b95, 0x5cf6, - 0x5d8b, 0x60bc, 0x6295, 0x642d, 0x6771, 0x6843, 0x68bc, 0x68df, - 0x76d7, 0x6dd8, 0x6e6f, 0x6d9b, 0x706f, 0x71c8, 0x5f53, 0x75d8, - 0x7977, 0x7b49, 0x7b54, 0x7b52, 0x7cd6, 0x7d71, 0x5230, 0x8463, - 0x8569, 0x85e4, 0x8a0e, 0x8b04, 0x8c46, 0x8e0f, 0x9003, 0x900f, - 0x9419, 0x9676, 0x982d, 0x9a30, 0x95d8, 0x50cd, 0x52d5, 0x540c, - 0x5802, 0x5c0e, 0x61a7, 0x649e, 0x6d1e, 0x77b3, 0x7ae5, 0x80f4, - 0x8404, 0x9053, 0x9285, 0x5ce0, 0x9d07, 0x533f, 0x5f97, 0x5fb3, - 0x6d9c, 0x7279, 0x7763, 0x79bf, 0x7be4, 0x6bd2, 0x72ec, 0x8aad, - 0x6803, 0x6a61, 0x51f8, 0x7a81, 0x6934, 0x5c4a, 0x9cf6, 0x82eb, - 0x5bc5, 0x9149, 0x701e, 0x5678, 0x5c6f, 0x60c7, 0x6566, 0x6c8c, - 0x8c5a, 0x9041, 0x9813, 0x5451, 0x66c7, 0x920d, 0x5948, 0x90a3, - 0x5185, 0x4e4d, 0x51ea, 0x8599, 0x8b0e, 0x7058, 0x637a, 0x934b, - 0x6962, 0x99b4, 0x7e04, 0x7577, 0x5357, 0x6960, 0x8edf, 0x96e3, - 0x6c5d, 0x4e8c, 0x5c3c, 0x5f10, 0x8fe9, 0x5302, 0x8cd1, 0x8089, - 0x8679, 0x5eff, 0x65e5, 0x4e73, 0x5165, 0x003f, 0x003f, 0x003f, - /* lead byte 94 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5982, 0x5c3f, 0x97ee, 0x4efb, 0x598a, 0x5fcd, 0x8a8d, 0x6fe1, - 0x79b0, 0x7962, 0x5be7, 0x8471, 0x732b, 0x71b1, 0x5e74, 0x5ff5, - 0x637b, 0x649a, 0x71c3, 0x7c98, 0x4e43, 0x5efc, 0x4e4b, 0x57dc, - 0x56a2, 0x60a9, 0x6fc3, 0x7d0d, 0x80fd, 0x8133, 0x81bf, 0x8fb2, - 0x8997, 0x86a4, 0x5df4, 0x628a, 0x64ad, 0x8987, 0x6777, 0x6ce2, - 0x6d3e, 0x7436, 0x7834, 0x5a46, 0x7f75, 0x82ad, 0x99ac, 0x4ff3, - 0x5ec3, 0x62dd, 0x6392, 0x6557, 0x676f, 0x76c3, 0x724c, 0x80cc, - 0x80ba, 0x8f29, 0x914d, 0x500d, 0x57f9, 0x5a92, 0x6885, 0x003f, - 0x6973, 0x7164, 0x72fd, 0x8cb7, 0x58f2, 0x8ce0, 0x966a, 0x9019, - 0x877f, 0x79e4, 0x77e7, 0x8429, 0x4f2f, 0x5265, 0x535a, 0x62cd, - 0x67cf, 0x6cca, 0x767d, 0x7b94, 0x7c95, 0x8236, 0x8584, 0x8feb, - 0x66dd, 0x6f20, 0x7206, 0x7e1b, 0x83ab, 0x99c1, 0x9ea6, 0x51fd, - 0x7bb1, 0x7872, 0x7bb8, 0x8087, 0x7b48, 0x6ae8, 0x5e61, 0x808c, - 0x7551, 0x7560, 0x516b, 0x9262, 0x6e8c, 0x767a, 0x9197, 0x9aea, - 0x4f10, 0x7f70, 0x629c, 0x7b4f, 0x95a5, 0x9ce9, 0x567a, 0x5859, - 0x86e4, 0x96bc, 0x4f34, 0x5224, 0x534a, 0x53cd, 0x53db, 0x5e06, - 0x642c, 0x6591, 0x677f, 0x6c3e, 0x6c4e, 0x7248, 0x72af, 0x73ed, - 0x7554, 0x7e41, 0x822c, 0x85e9, 0x8ca9, 0x7bc4, 0x91c6, 0x7169, - 0x9812, 0x98ef, 0x633d, 0x6669, 0x756a, 0x76e4, 0x78d0, 0x8543, - 0x86ee, 0x532a, 0x5351, 0x5426, 0x5983, 0x5e87, 0x5f7c, 0x60b2, - 0x6249, 0x6279, 0x62ab, 0x6590, 0x6bd4, 0x6ccc, 0x75b2, 0x76ae, - 0x7891, 0x79d8, 0x7dcb, 0x7f77, 0x80a5, 0x88ab, 0x8ab9, 0x8cbb, - 0x907f, 0x975e, 0x98db, 0x6a0b, 0x7c38, 0x5099, 0x5c3e, 0x5fae, - 0x6787, 0x6bd8, 0x7435, 0x7709, 0x7f8e, 0x003f, 0x003f, 0x003f, - /* lead byte 95 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9f3b, 0x67ca, 0x7a17, 0x5339, 0x758b, 0x9aed, 0x5f66, 0x819d, - 0x83f1, 0x8098, 0x5f3c, 0x5fc5, 0x7562, 0x7b46, 0x903c, 0x6867, - 0x59eb, 0x5a9b, 0x7d10, 0x767e, 0x8b2c, 0x4ff5, 0x5f6a, 0x6a19, - 0x6c37, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8a55, 0x8c79, 0x5edf, - 0x63cf, 0x75c5, 0x79d2, 0x82d7, 0x9328, 0x92f2, 0x849c, 0x86ed, - 0x9c2d, 0x54c1, 0x5f6c, 0x658c, 0x6d5c, 0x7015, 0x8ca7, 0x8cd3, - 0x983b, 0x654f, 0x74f6, 0x4e0d, 0x4ed8, 0x57e0, 0x592b, 0x5a66, - 0x5bcc, 0x51a8, 0x5e03, 0x5e9c, 0x6016, 0x6276, 0x6577, 0x003f, - 0x65a7, 0x666e, 0x6d6e, 0x7236, 0x7b26, 0x8150, 0x819a, 0x8299, - 0x8b5c, 0x8ca0, 0x8ce6, 0x8d74, 0x961c, 0x9644, 0x4fae, 0x64ab, - 0x6b66, 0x821e, 0x8461, 0x856a, 0x90e8, 0x5c01, 0x6953, 0x98a8, - 0x847a, 0x8557, 0x4f0f, 0x526f, 0x5fa9, 0x5e45, 0x670d, 0x798f, - 0x8179, 0x8907, 0x8986, 0x6df5, 0x5f17, 0x6255, 0x6cb8, 0x4ecf, - 0x7269, 0x9b92, 0x5206, 0x543b, 0x5674, 0x58b3, 0x61a4, 0x626e, - 0x711a, 0x596e, 0x7c89, 0x7cde, 0x7d1b, 0x96f0, 0x6587, 0x805e, - 0x4e19, 0x4f75, 0x5175, 0x5840, 0x5e63, 0x5e73, 0x5f0a, 0x67c4, - 0x4e26, 0x853d, 0x9589, 0x965b, 0x7c73, 0x9801, 0x50fb, 0x58c1, - 0x7656, 0x78a7, 0x5225, 0x77a5, 0x8511, 0x7b86, 0x504f, 0x5909, - 0x7247, 0x7bc7, 0x7de8, 0x8fba, 0x8fd4, 0x904d, 0x4fbf, 0x52c9, - 0x5a29, 0x5f01, 0x97ad, 0x4fdd, 0x8217, 0x92ea, 0x5703, 0x6355, - 0x6b69, 0x752b, 0x88dc, 0x8f14, 0x7a42, 0x52df, 0x5893, 0x6155, - 0x620a, 0x66ae, 0x6bcd, 0x7c3f, 0x83e9, 0x5023, 0x4ff8, 0x5305, - 0x5446, 0x5831, 0x5949, 0x5b9d, 0x5cf0, 0x5cef, 0x5d29, 0x5e96, - 0x62b1, 0x6367, 0x653e, 0x65b9, 0x670b, 0x003f, 0x003f, 0x003f, - /* lead byte 96 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6cd5, 0x6ce1, 0x70f9, 0x7832, 0x7e2b, 0x80de, 0x82b3, 0x840c, - 0x84ec, 0x8702, 0x8912, 0x8a2a, 0x8c4a, 0x90a6, 0x92d2, 0x98fd, - 0x9cf3, 0x9d6c, 0x4e4f, 0x4ea1, 0x508d, 0x5256, 0x574a, 0x59a8, - 0x5e3d, 0x5fd8, 0x5fd9, 0x623f, 0x66b4, 0x671b, 0x67d0, 0x68d2, - 0x5192, 0x7d21, 0x80aa, 0x81a8, 0x8b00, 0x8c8c, 0x8cbf, 0x927e, - 0x9632, 0x5420, 0x982c, 0x5317, 0x50d5, 0x535c, 0x58a8, 0x64b2, - 0x6734, 0x7267, 0x7766, 0x7a46, 0x91e6, 0x52c3, 0x6ca1, 0x6b86, - 0x5800, 0x5e4c, 0x5954, 0x672c, 0x7ffb, 0x51e1, 0x76c6, 0x003f, - 0x6469, 0x78e8, 0x9b54, 0x9ebb, 0x57cb, 0x59b9, 0x6627, 0x679a, - 0x6bce, 0x54e9, 0x69d9, 0x5e55, 0x819c, 0x6795, 0x9baa, 0x67fe, - 0x9c52, 0x685d, 0x4ea6, 0x4fe3, 0x53c8, 0x62b9, 0x672b, 0x6cab, - 0x8fc4, 0x4fad, 0x7e6d, 0x9ebf, 0x4e07, 0x6162, 0x6e80, 0x6f2b, - 0x8513, 0x5473, 0x672a, 0x9b45, 0x5df3, 0x7b95, 0x5cac, 0x5bc6, - 0x871c, 0x6e4a, 0x84d1, 0x7a14, 0x8108, 0x5999, 0x7c8d, 0x6c11, - 0x7720, 0x52d9, 0x5922, 0x7121, 0x725f, 0x77db, 0x9727, 0x9d61, - 0x690b, 0x5a7f, 0x5a18, 0x51a5, 0x540d, 0x547d, 0x660e, 0x76df, - 0x8ff7, 0x9298, 0x9cf4, 0x59ea, 0x725d, 0x6ec5, 0x514d, 0x68c9, - 0x7dbf, 0x7dec, 0x9762, 0x9eba, 0x6478, 0x6a21, 0x8302, 0x5984, - 0x5b5f, 0x6bdb, 0x731b, 0x76f2, 0x7db2, 0x8017, 0x8499, 0x5132, - 0x6728, 0x9ed9, 0x76ee, 0x6762, 0x52ff, 0x9905, 0x5c24, 0x623b, - 0x7c7e, 0x8cb0, 0x554f, 0x60b6, 0x7d0b, 0x9580, 0x5301, 0x4e5f, - 0x51b6, 0x591c, 0x723a, 0x8036, 0x91ce, 0x5f25, 0x77e2, 0x5384, - 0x5f79, 0x7d04, 0x85ac, 0x8a33, 0x8e8d, 0x9756, 0x67f3, 0x85ae, - 0x9453, 0x6109, 0x6108, 0x6cb9, 0x7652, 0x003f, 0x003f, 0x003f, - /* lead byte 97 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8aed, 0x8f38, 0x552f, 0x4f51, 0x512a, 0x52c7, 0x53cb, 0x5ba5, - 0x5e7d, 0x60a0, 0x6182, 0x63d6, 0x6709, 0x67da, 0x6e67, 0x6d8c, - 0x7336, 0x7337, 0x7531, 0x7950, 0x88d5, 0x8a98, 0x904a, 0x9091, - 0x90f5, 0x96c4, 0x878d, 0x5915, 0x4e88, 0x4f59, 0x4e0e, 0x8a89, - 0x8f3f, 0x9810, 0x50ad, 0x5e7c, 0x5996, 0x5bb9, 0x5eb8, 0x63da, - 0x63fa, 0x64c1, 0x66dc, 0x694a, 0x69d8, 0x6d0b, 0x6eb6, 0x7194, - 0x7528, 0x7aaf, 0x7f8a, 0x8000, 0x8449, 0x84c9, 0x8981, 0x8b21, - 0x8e0a, 0x9065, 0x967d, 0x990a, 0x617e, 0x6291, 0x6b32, 0x003f, - 0x6c83, 0x6d74, 0x7fcc, 0x7ffc, 0x6dc0, 0x7f85, 0x87ba, 0x88f8, - 0x6765, 0x83b1, 0x983c, 0x96f7, 0x6d1b, 0x7d61, 0x843d, 0x916a, - 0x4e71, 0x5375, 0x5d50, 0x6b04, 0x6feb, 0x85cd, 0x862d, 0x89a7, - 0x5229, 0x540f, 0x5c65, 0x674e, 0x68a8, 0x7406, 0x7483, 0x75e2, - 0x88cf, 0x88e1, 0x91cc, 0x96e2, 0x9678, 0x5f8b, 0x7387, 0x7acb, - 0x844e, 0x63a0, 0x7565, 0x5289, 0x6d41, 0x6e9c, 0x7409, 0x7559, - 0x786b, 0x7c92, 0x9686, 0x7adc, 0x9f8d, 0x4fb6, 0x616e, 0x65c5, - 0x865c, 0x4e86, 0x4eae, 0x50da, 0x4e21, 0x51cc, 0x5bee, 0x6599, - 0x6881, 0x6dbc, 0x731f, 0x7642, 0x77ad, 0x7a1c, 0x7ce7, 0x826f, - 0x8ad2, 0x907c, 0x91cf, 0x9675, 0x9818, 0x529b, 0x7dd1, 0x502b, - 0x5398, 0x6797, 0x6dcb, 0x71d0, 0x7433, 0x81e8, 0x8f2a, 0x96a3, - 0x9c57, 0x9e9f, 0x7460, 0x5841, 0x6d99, 0x7d2f, 0x985e, 0x4ee4, - 0x4f36, 0x4f8b, 0x51b7, 0x52b1, 0x5dba, 0x601c, 0x73b2, 0x793c, - 0x82d3, 0x9234, 0x96b7, 0x96f6, 0x970a, 0x9e97, 0x9f62, 0x66a6, - 0x6b74, 0x5217, 0x52a3, 0x70c8, 0x88c2, 0x5ec9, 0x604b, 0x6190, - 0x6f23, 0x7149, 0x7c3e, 0x7df4, 0x806f, 0x003f, 0x003f, 0x003f, - /* lead byte 98 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x84ee, 0x9023, 0x932c, 0x5442, 0x9b6f, 0x6ad3, 0x7089, 0x8cc2, - 0x8def, 0x9732, 0x52b4, 0x5a41, 0x5eca, 0x5f04, 0x6717, 0x697c, - 0x6994, 0x6d6a, 0x6f0f, 0x7262, 0x72fc, 0x7bed, 0x8001, 0x807e, - 0x874b, 0x90ce, 0x516d, 0x9e93, 0x7984, 0x808b, 0x9332, 0x8ad6, - 0x502d, 0x548c, 0x8a71, 0x6b6a, 0x8cc4, 0x8107, 0x60d1, 0x67a0, - 0x9df2, 0x4e99, 0x4e98, 0x9c10, 0x8a6b, 0x85c1, 0x8568, 0x6900, - 0x6e7e, 0x7897, 0x8155, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x5f0c, - 0x4e10, 0x4e15, 0x4e2a, 0x4e31, 0x4e36, 0x4e3c, 0x4e3f, 0x4e42, - 0x4e56, 0x4e58, 0x4e82, 0x4e85, 0x8c6b, 0x4e8a, 0x8212, 0x5f0d, - 0x4e8e, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea2, 0x4eb0, 0x4eb3, 0x4eb6, - 0x4ece, 0x4ecd, 0x4ec4, 0x4ec6, 0x4ec2, 0x4ed7, 0x4ede, 0x4eed, - 0x4edf, 0x4ef7, 0x4f09, 0x4f5a, 0x4f30, 0x4f5b, 0x4f5d, 0x4f57, - 0x4f47, 0x4f76, 0x4f88, 0x4f8f, 0x4f98, 0x4f7b, 0x4f69, 0x4f70, - 0x4f91, 0x4f6f, 0x4f86, 0x4f96, 0x5118, 0x4fd4, 0x4fdf, 0x4fce, - 0x4fd8, 0x4fdb, 0x4fd1, 0x4fda, 0x4fd0, 0x4fe4, 0x4fe5, 0x501a, - 0x5028, 0x5014, 0x502a, 0x5025, 0x5005, 0x4f1c, 0x4ff6, 0x5021, - 0x5029, 0x502c, 0x4ffe, 0x4fef, 0x5011, 0x5006, 0x5043, 0x5047, - 0x6703, 0x5055, 0x5050, 0x5048, 0x505a, 0x5056, 0x506c, 0x5078, - 0x5080, 0x509a, 0x5085, 0x50b4, 0x50b2, 0x003f, 0x003f, 0x003f, - /* lead byte 99 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x50c9, 0x50ca, 0x50b3, 0x50c2, 0x50d6, 0x50de, 0x50e5, 0x50ed, - 0x50e3, 0x50ee, 0x50f9, 0x50f5, 0x5109, 0x5101, 0x5102, 0x5116, - 0x5115, 0x5114, 0x511a, 0x5121, 0x513a, 0x5137, 0x513c, 0x513b, - 0x513f, 0x5140, 0x5152, 0x514c, 0x5154, 0x5162, 0x7af8, 0x5169, - 0x516a, 0x516e, 0x5180, 0x5182, 0x56d8, 0x518c, 0x5189, 0x518f, - 0x5191, 0x5193, 0x5195, 0x5196, 0x51a4, 0x51a6, 0x51a2, 0x51a9, - 0x51aa, 0x51ab, 0x51b3, 0x51b1, 0x51b2, 0x51b0, 0x51b5, 0x51bd, - 0x51c5, 0x51c9, 0x51db, 0x51e0, 0x8655, 0x51e9, 0x51ed, 0x003f, - 0x51f0, 0x51f5, 0x51fe, 0x5204, 0x520b, 0x5214, 0x520e, 0x5227, - 0x522a, 0x522e, 0x5233, 0x5239, 0x524f, 0x5244, 0x524b, 0x524c, - 0x525e, 0x5254, 0x526a, 0x5274, 0x5269, 0x5273, 0x527f, 0x527d, - 0x528d, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8fa8, 0x8fa7, - 0x52ac, 0x52ad, 0x52bc, 0x52b5, 0x52c1, 0x52cd, 0x52d7, 0x52de, - 0x52e3, 0x52e6, 0x98ed, 0x52e0, 0x52f3, 0x52f5, 0x52f8, 0x52f9, - 0x5306, 0x5308, 0x7538, 0x530d, 0x5310, 0x530f, 0x5315, 0x531a, - 0x5323, 0x532f, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, - 0x4e17, 0x5349, 0x534d, 0x51d6, 0x535e, 0x5369, 0x536e, 0x5918, - 0x537b, 0x5377, 0x5382, 0x5396, 0x53a0, 0x53a6, 0x53a5, 0x53ae, - 0x53b0, 0x53b6, 0x53c3, 0x7c12, 0x96d9, 0x53df, 0x66fc, 0x71ee, - 0x53ee, 0x53e8, 0x53ed, 0x53fa, 0x5401, 0x543d, 0x5440, 0x542c, - 0x542d, 0x543c, 0x542e, 0x5436, 0x5429, 0x541d, 0x544e, 0x548f, - 0x5475, 0x548e, 0x545f, 0x5471, 0x5477, 0x5470, 0x5492, 0x547b, - 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54c7, 0x54a2, 0x54b8, - 0x54a5, 0x54ac, 0x54c4, 0x54c8, 0x54a8, 0x003f, 0x003f, 0x003f, - /* lead byte 9a */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x54ab, 0x54c2, 0x54a4, 0x54be, 0x54bc, 0x54d8, 0x54e5, 0x54e6, - 0x550f, 0x5514, 0x54fd, 0x54ee, 0x54ed, 0x54fa, 0x54e2, 0x5539, - 0x5540, 0x5563, 0x554c, 0x552e, 0x555c, 0x5545, 0x5556, 0x5557, - 0x5538, 0x5533, 0x555d, 0x5599, 0x5580, 0x54af, 0x558a, 0x559f, - 0x557b, 0x557e, 0x5598, 0x559e, 0x55ae, 0x557c, 0x5583, 0x55a9, - 0x5587, 0x55a8, 0x55da, 0x55c5, 0x55df, 0x55c4, 0x55dc, 0x55e4, - 0x55d4, 0x5614, 0x55f7, 0x5616, 0x55fe, 0x55fd, 0x561b, 0x55f9, - 0x564e, 0x5650, 0x71df, 0x5634, 0x5636, 0x5632, 0x5638, 0x003f, - 0x566b, 0x5664, 0x562f, 0x566c, 0x566a, 0x5686, 0x5680, 0x568a, - 0x56a0, 0x5694, 0x568f, 0x56a5, 0x56ae, 0x56b6, 0x56b4, 0x56c2, - 0x56bc, 0x56c1, 0x56c3, 0x56c0, 0x56c8, 0x56ce, 0x56d1, 0x56d3, - 0x56d7, 0x56ee, 0x56f9, 0x5700, 0x56ff, 0x5704, 0x5709, 0x5708, - 0x570b, 0x570d, 0x5713, 0x5718, 0x5716, 0x55c7, 0x571c, 0x5726, - 0x5737, 0x5738, 0x574e, 0x573b, 0x5740, 0x574f, 0x5769, 0x57c0, - 0x5788, 0x5761, 0x577f, 0x5789, 0x5793, 0x57a0, 0x57b3, 0x57a4, - 0x57aa, 0x57b0, 0x57c3, 0x57c6, 0x57d4, 0x57d2, 0x57d3, 0x580a, - 0x57d6, 0x57e3, 0x580b, 0x5819, 0x581d, 0x5872, 0x5821, 0x5862, - 0x584b, 0x5870, 0x6bc0, 0x5852, 0x583d, 0x5879, 0x5885, 0x58b9, - 0x589f, 0x58ab, 0x58ba, 0x58de, 0x58bb, 0x58b8, 0x58ae, 0x58c5, - 0x58d3, 0x58d1, 0x58d7, 0x58d9, 0x58d8, 0x58e5, 0x58dc, 0x58e4, - 0x58df, 0x58ef, 0x58fa, 0x58f9, 0x58fb, 0x58fc, 0x58fd, 0x5902, - 0x590a, 0x5910, 0x591b, 0x68a6, 0x5925, 0x592c, 0x592d, 0x5932, - 0x5938, 0x593e, 0x7ad2, 0x5955, 0x5950, 0x594e, 0x595a, 0x5958, - 0x5962, 0x5960, 0x5967, 0x596c, 0x5969, 0x003f, 0x003f, 0x003f, - /* lead byte 9b */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5978, 0x5981, 0x599d, 0x4f5e, 0x4fab, 0x59a3, 0x59b2, 0x59c6, - 0x59e8, 0x59dc, 0x598d, 0x59d9, 0x59da, 0x5a25, 0x5a1f, 0x5a11, - 0x5a1c, 0x5a09, 0x5a1a, 0x5a40, 0x5a6c, 0x5a49, 0x5a35, 0x5a36, - 0x5a62, 0x5a6a, 0x5a9a, 0x5abc, 0x5abe, 0x5acb, 0x5ac2, 0x5abd, - 0x5ae3, 0x5ad7, 0x5ae6, 0x5ae9, 0x5ad6, 0x5afa, 0x5afb, 0x5b0c, - 0x5b0b, 0x5b16, 0x5b32, 0x5ad0, 0x5b2a, 0x5b36, 0x5b3e, 0x5b43, - 0x5b45, 0x5b40, 0x5b51, 0x5b55, 0x5b5a, 0x5b5b, 0x5b65, 0x5b69, - 0x5b70, 0x5b73, 0x5b75, 0x5b78, 0x6588, 0x5b7a, 0x5b80, 0x003f, - 0x5b83, 0x5ba6, 0x5bb8, 0x5bc3, 0x5bc7, 0x5bc9, 0x5bd4, 0x5bd0, - 0x5be4, 0x5be6, 0x5be2, 0x5bde, 0x5be5, 0x5beb, 0x5bf0, 0x5bf6, - 0x5bf3, 0x5c05, 0x5c07, 0x5c08, 0x5c0d, 0x5c13, 0x5c20, 0x5c22, - 0x5c28, 0x5c38, 0x5c39, 0x5c41, 0x5c46, 0x5c4e, 0x5c53, 0x5c50, - 0x5c4f, 0x5b71, 0x5c6c, 0x5c6e, 0x4e62, 0x5c76, 0x5c79, 0x5c8c, - 0x5c91, 0x5c94, 0x599b, 0x5cab, 0x5cbb, 0x5cb6, 0x5cbc, 0x5cb7, - 0x5cc5, 0x5cbe, 0x5cc7, 0x5cd9, 0x5ce9, 0x5cfd, 0x5cfa, 0x5ced, - 0x5d8c, 0x5cea, 0x5d0b, 0x5d15, 0x5d17, 0x5d5c, 0x5d1f, 0x5d1b, - 0x5d11, 0x5d14, 0x5d22, 0x5d1a, 0x5d19, 0x5d18, 0x5d4c, 0x5d52, - 0x5d4e, 0x5d4b, 0x5d6c, 0x5d73, 0x5d76, 0x5d87, 0x5d84, 0x5d82, - 0x5da2, 0x5d9d, 0x5dac, 0x5dae, 0x5dbd, 0x5d90, 0x5db7, 0x5dbc, - 0x5dc9, 0x5dcd, 0x5dd3, 0x5dd2, 0x5dd6, 0x5ddb, 0x5deb, 0x5df2, - 0x5df5, 0x5e0b, 0x5e1a, 0x5e19, 0x5e11, 0x5e1b, 0x5e36, 0x5e37, - 0x5e44, 0x5e43, 0x5e40, 0x5e4e, 0x5e57, 0x5e54, 0x5e5f, 0x5e62, - 0x5e64, 0x5e47, 0x5e75, 0x5e76, 0x5e7a, 0x9ebc, 0x5e7f, 0x5ea0, - 0x5ec1, 0x5ec2, 0x5ec8, 0x5ed0, 0x5ecf, 0x003f, 0x003f, 0x003f, - /* lead byte 9c */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5ed6, 0x5ee3, 0x5edd, 0x5eda, 0x5edb, 0x5ee2, 0x5ee1, 0x5ee8, - 0x5ee9, 0x5eec, 0x5ef1, 0x5ef3, 0x5ef0, 0x5ef4, 0x5ef8, 0x5efe, - 0x5f03, 0x5f09, 0x5f5d, 0x5f5c, 0x5f0b, 0x5f11, 0x5f16, 0x5f29, - 0x5f2d, 0x5f38, 0x5f41, 0x5f48, 0x5f4c, 0x5f4e, 0x5f2f, 0x5f51, - 0x5f56, 0x5f57, 0x5f59, 0x5f61, 0x5f6d, 0x5f73, 0x5f77, 0x5f83, - 0x5f82, 0x5f7f, 0x5f8a, 0x5f88, 0x5f91, 0x5f87, 0x5f9e, 0x5f99, - 0x5f98, 0x5fa0, 0x5fa8, 0x5fad, 0x5fbc, 0x5fd6, 0x5ffb, 0x5fe4, - 0x5ff8, 0x5ff1, 0x5fdd, 0x60b3, 0x5fff, 0x6021, 0x6060, 0x003f, - 0x6019, 0x6010, 0x6029, 0x600e, 0x6031, 0x601b, 0x6015, 0x602b, - 0x6026, 0x600f, 0x603a, 0x605a, 0x6041, 0x606a, 0x6077, 0x605f, - 0x604a, 0x6046, 0x604d, 0x6063, 0x6043, 0x6064, 0x6042, 0x606c, - 0x606b, 0x6059, 0x6081, 0x608d, 0x60e7, 0x6083, 0x609a, 0x6084, - 0x609b, 0x6096, 0x6097, 0x6092, 0x60a7, 0x608b, 0x60e1, 0x60b8, - 0x60e0, 0x60d3, 0x60b4, 0x5ff0, 0x60bd, 0x60c6, 0x60b5, 0x60d8, - 0x614d, 0x6115, 0x6106, 0x60f6, 0x60f7, 0x6100, 0x60f4, 0x60fa, - 0x6103, 0x6121, 0x60fb, 0x60f1, 0x610d, 0x610e, 0x6147, 0x613e, - 0x6128, 0x6127, 0x614a, 0x613f, 0x613c, 0x612c, 0x6134, 0x613d, - 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615a, 0x616b, - 0x6174, 0x616f, 0x6165, 0x6171, 0x615f, 0x615d, 0x6153, 0x6175, - 0x6199, 0x6196, 0x6187, 0x61ac, 0x6194, 0x619a, 0x618a, 0x6191, - 0x61ab, 0x61ae, 0x61cc, 0x61ca, 0x61c9, 0x61f7, 0x61c8, 0x61c3, - 0x61c6, 0x61ba, 0x61cb, 0x7f79, 0x61cd, 0x61e6, 0x61e3, 0x61f6, - 0x61fa, 0x61f4, 0x61ff, 0x61fd, 0x61fc, 0x61fe, 0x6200, 0x6208, - 0x6209, 0x620d, 0x620c, 0x6214, 0x621b, 0x003f, 0x003f, 0x003f, - /* lead byte 9d */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x621e, 0x6221, 0x622a, 0x622e, 0x6230, 0x6232, 0x6233, 0x6241, - 0x624e, 0x625e, 0x6263, 0x625b, 0x6260, 0x6268, 0x627c, 0x6282, - 0x6289, 0x627e, 0x6292, 0x6293, 0x6296, 0x62d4, 0x6283, 0x6294, - 0x62d7, 0x62d1, 0x62bb, 0x62cf, 0x62ff, 0x62c6, 0x64d4, 0x62c8, - 0x62dc, 0x62cc, 0x62ca, 0x62c2, 0x62c7, 0x629b, 0x62c9, 0x630c, - 0x62ee, 0x62f1, 0x6327, 0x6302, 0x6308, 0x62ef, 0x62f5, 0x6350, - 0x633e, 0x634d, 0x641c, 0x634f, 0x6396, 0x638e, 0x6380, 0x63ab, - 0x6376, 0x63a3, 0x638f, 0x6389, 0x639f, 0x63b5, 0x636b, 0x003f, - 0x6369, 0x63be, 0x63e9, 0x63c0, 0x63c6, 0x63e3, 0x63c9, 0x63d2, - 0x63f6, 0x63c4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, - 0x651d, 0x6417, 0x6428, 0x640f, 0x6467, 0x646f, 0x6476, 0x644e, - 0x652a, 0x6495, 0x6493, 0x64a5, 0x64a9, 0x6488, 0x64bc, 0x64da, - 0x64d2, 0x64c5, 0x64c7, 0x64bb, 0x64d8, 0x64c2, 0x64f1, 0x64e7, - 0x8209, 0x64e0, 0x64e1, 0x62ac, 0x64e3, 0x64ef, 0x652c, 0x64f6, - 0x64f4, 0x64f2, 0x64fa, 0x6500, 0x64fd, 0x6518, 0x651c, 0x6505, - 0x6524, 0x6523, 0x652b, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, - 0x754b, 0x6548, 0x6556, 0x6555, 0x654d, 0x6558, 0x655e, 0x655d, - 0x6572, 0x6578, 0x6582, 0x6583, 0x8b8a, 0x659b, 0x659f, 0x65ab, - 0x65b7, 0x65c3, 0x65c6, 0x65c1, 0x65c4, 0x65cc, 0x65d2, 0x65db, - 0x65d9, 0x65e0, 0x65e1, 0x65f1, 0x6772, 0x660a, 0x6603, 0x65fb, - 0x6773, 0x6635, 0x6636, 0x6634, 0x661c, 0x664f, 0x6644, 0x6649, - 0x6641, 0x665e, 0x665d, 0x6664, 0x6667, 0x6668, 0x665f, 0x6662, - 0x6670, 0x6683, 0x6688, 0x668e, 0x6689, 0x6684, 0x6698, 0x669d, - 0x66c1, 0x66b9, 0x66c9, 0x66be, 0x66bc, 0x003f, 0x003f, 0x003f, - /* lead byte 9e */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x66c4, 0x66b8, 0x66d6, 0x66da, 0x66e0, 0x663f, 0x66e6, 0x66e9, - 0x66f0, 0x66f5, 0x66f7, 0x670f, 0x6716, 0x671e, 0x6726, 0x6727, - 0x9738, 0x672e, 0x673f, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, - 0x675e, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67a9, - 0x677c, 0x676a, 0x678c, 0x678b, 0x67a6, 0x67a1, 0x6785, 0x67b7, - 0x67ef, 0x67b4, 0x67ec, 0x67b3, 0x67e9, 0x67b8, 0x67e4, 0x67de, - 0x67dd, 0x67e2, 0x67ee, 0x67b9, 0x67ce, 0x67c6, 0x67e7, 0x6a9c, - 0x681e, 0x6846, 0x6829, 0x6840, 0x684d, 0x6832, 0x684e, 0x003f, - 0x68b3, 0x682b, 0x6859, 0x6863, 0x6877, 0x687f, 0x689f, 0x688f, - 0x68ad, 0x6894, 0x689d, 0x689b, 0x6883, 0x6aae, 0x68b9, 0x6874, - 0x68b5, 0x68a0, 0x68ba, 0x690f, 0x688d, 0x687e, 0x6901, 0x68ca, - 0x6908, 0x68d8, 0x6922, 0x6926, 0x68e1, 0x690c, 0x68cd, 0x68d4, - 0x68e7, 0x68d5, 0x6936, 0x6912, 0x6904, 0x68d7, 0x68e3, 0x6925, - 0x68f9, 0x68e0, 0x68ef, 0x6928, 0x692a, 0x691a, 0x6923, 0x6921, - 0x68c6, 0x6979, 0x6977, 0x695c, 0x6978, 0x696b, 0x6954, 0x697e, - 0x696e, 0x6939, 0x6974, 0x693d, 0x6959, 0x6930, 0x6961, 0x695e, - 0x695d, 0x6981, 0x696a, 0x69b2, 0x69ae, 0x69d0, 0x69bf, 0x69c1, - 0x69d3, 0x69be, 0x69ce, 0x5be8, 0x69ca, 0x69dd, 0x69bb, 0x69c3, - 0x69a7, 0x6a2e, 0x6991, 0x69a0, 0x699c, 0x6995, 0x69b4, 0x69de, - 0x69e8, 0x6a02, 0x6a1b, 0x69ff, 0x6b0a, 0x69f9, 0x69f2, 0x69e7, - 0x6a05, 0x69b1, 0x6a1e, 0x69ed, 0x6a14, 0x69eb, 0x6a0a, 0x6a12, - 0x6ac1, 0x6a23, 0x6a13, 0x6a44, 0x6a0c, 0x6a72, 0x6a36, 0x6a78, - 0x6a47, 0x6a62, 0x6a59, 0x6a66, 0x6a48, 0x6a38, 0x6a22, 0x6a90, - 0x6a8d, 0x6aa0, 0x6a84, 0x6aa2, 0x6aa3, 0x003f, 0x003f, 0x003f, - /* lead byte 9f */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6a97, 0x8617, 0x6abb, 0x6ac3, 0x6ac2, 0x6ab8, 0x6ab3, 0x6aac, - 0x6ade, 0x6ad1, 0x6adf, 0x6aaa, 0x6ada, 0x6aea, 0x6afb, 0x6b05, - 0x8616, 0x6afa, 0x6b12, 0x6b16, 0x9b31, 0x6b1f, 0x6b38, 0x6b37, - 0x76dc, 0x6b39, 0x98ee, 0x6b47, 0x6b43, 0x6b49, 0x6b50, 0x6b59, - 0x6b54, 0x6b5b, 0x6b5f, 0x6b61, 0x6b78, 0x6b79, 0x6b7f, 0x6b80, - 0x6b84, 0x6b83, 0x6b8d, 0x6b98, 0x6b95, 0x6b9e, 0x6ba4, 0x6baa, - 0x6bab, 0x6baf, 0x6bb2, 0x6bb1, 0x6bb3, 0x6bb7, 0x6bbc, 0x6bc6, - 0x6bcb, 0x6bd3, 0x6bdf, 0x6bec, 0x6beb, 0x6bf3, 0x6bef, 0x003f, - 0x9ebe, 0x6c08, 0x6c13, 0x6c14, 0x6c1b, 0x6c24, 0x6c23, 0x6c5e, - 0x6c55, 0x6c62, 0x6c6a, 0x6c82, 0x6c8d, 0x6c9a, 0x6c81, 0x6c9b, - 0x6c7e, 0x6c68, 0x6c73, 0x6c92, 0x6c90, 0x6cc4, 0x6cf1, 0x6cd3, - 0x6cbd, 0x6cd7, 0x6cc5, 0x6cdd, 0x6cae, 0x6cb1, 0x6cbe, 0x6cba, - 0x6cdb, 0x6cef, 0x6cd9, 0x6cea, 0x6d1f, 0x884d, 0x6d36, 0x6d2b, - 0x6d3d, 0x6d38, 0x6d19, 0x6d35, 0x6d33, 0x6d12, 0x6d0c, 0x6d63, - 0x6d93, 0x6d64, 0x6d5a, 0x6d79, 0x6d59, 0x6d8e, 0x6d95, 0x6fe4, - 0x6d85, 0x6df9, 0x6e15, 0x6e0a, 0x6db5, 0x6dc7, 0x6de6, 0x6db8, - 0x6dc6, 0x6dec, 0x6dde, 0x6dcc, 0x6de8, 0x6dd2, 0x6dc5, 0x6dfa, - 0x6dd9, 0x6de4, 0x6dd5, 0x6dea, 0x6dee, 0x6e2d, 0x6e6e, 0x6e2e, - 0x6e19, 0x6e72, 0x6e5f, 0x6e3e, 0x6e23, 0x6e6b, 0x6e2b, 0x6e76, - 0x6e4d, 0x6e1f, 0x6e43, 0x6e3a, 0x6e4e, 0x6e24, 0x6eff, 0x6e1d, - 0x6e38, 0x6e82, 0x6eaa, 0x6e98, 0x6ec9, 0x6eb7, 0x6ed3, 0x6ebd, - 0x6eaf, 0x6ec4, 0x6eb2, 0x6ed4, 0x6ed5, 0x6e8f, 0x6ea5, 0x6ec2, - 0x6e9f, 0x6f41, 0x6f11, 0x704c, 0x6eec, 0x6ef8, 0x6efe, 0x6f3f, - 0x6ef2, 0x6f31, 0x6eef, 0x6f32, 0x6ecc, 0x003f, 0x003f, 0x003f, - /* lead byte e0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6f3e, 0x6f13, 0x6ef7, 0x6f86, 0x6f7a, 0x6f78, 0x6f81, 0x6f80, - 0x6f6f, 0x6f5b, 0x6ff3, 0x6f6d, 0x6f82, 0x6f7c, 0x6f58, 0x6f8e, - 0x6f91, 0x6fc2, 0x6f66, 0x6fb3, 0x6fa3, 0x6fa1, 0x6fa4, 0x6fb9, - 0x6fc6, 0x6faa, 0x6fdf, 0x6fd5, 0x6fec, 0x6fd4, 0x6fd8, 0x6ff1, - 0x6fee, 0x6fdb, 0x7009, 0x700b, 0x6ffa, 0x7011, 0x7001, 0x700f, - 0x6ffe, 0x701b, 0x701a, 0x6f74, 0x701d, 0x7018, 0x701f, 0x7030, - 0x703e, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70af, 0x70f1, - 0x70ac, 0x70b8, 0x70b3, 0x70ae, 0x70df, 0x70cb, 0x70dd, 0x003f, - 0x70d9, 0x7109, 0x70fd, 0x711c, 0x7119, 0x7165, 0x7155, 0x7188, - 0x7166, 0x7162, 0x714c, 0x7156, 0x716c, 0x718f, 0x71fb, 0x7184, - 0x7195, 0x71a8, 0x71ac, 0x71d7, 0x71b9, 0x71be, 0x71d2, 0x71c9, - 0x71d4, 0x71ce, 0x71e0, 0x71ec, 0x71e7, 0x71f5, 0x71fc, 0x71f9, - 0x71ff, 0x720d, 0x7210, 0x721b, 0x7228, 0x722d, 0x722c, 0x7230, - 0x7232, 0x723b, 0x723c, 0x723f, 0x7240, 0x7246, 0x724b, 0x7258, - 0x7274, 0x727e, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72a2, - 0x72a7, 0x72b9, 0x72b2, 0x72c3, 0x72c6, 0x72c4, 0x72ce, 0x72d2, - 0x72e2, 0x72e0, 0x72e1, 0x72f9, 0x72f7, 0x500f, 0x7317, 0x730a, - 0x731c, 0x7316, 0x731d, 0x7334, 0x732f, 0x7329, 0x7325, 0x733e, - 0x734e, 0x734f, 0x9ed8, 0x7357, 0x736a, 0x7368, 0x7370, 0x7378, - 0x7375, 0x737b, 0x737a, 0x73c8, 0x73b3, 0x73ce, 0x73bb, 0x73c0, - 0x73e5, 0x73ee, 0x73de, 0x74a2, 0x7405, 0x746f, 0x7425, 0x73f8, - 0x7432, 0x743a, 0x7455, 0x743f, 0x745f, 0x7459, 0x7441, 0x745c, - 0x7469, 0x7470, 0x7463, 0x746a, 0x7476, 0x747e, 0x748b, 0x749e, - 0x74a7, 0x74ca, 0x74cf, 0x74d4, 0x73f1, 0x003f, 0x003f, 0x003f, - /* lead byte e1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x74e0, 0x74e3, 0x74e7, 0x74e9, 0x74ee, 0x74f2, 0x74f0, 0x74f1, - 0x74f8, 0x74f7, 0x7504, 0x7503, 0x7505, 0x750c, 0x750e, 0x750d, - 0x7515, 0x7513, 0x751e, 0x7526, 0x752c, 0x753c, 0x7544, 0x754d, - 0x754a, 0x7549, 0x755b, 0x7546, 0x755a, 0x7569, 0x7564, 0x7567, - 0x756b, 0x756d, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758a, - 0x7589, 0x7582, 0x7594, 0x759a, 0x759d, 0x75a5, 0x75a3, 0x75c2, - 0x75b3, 0x75c3, 0x75b5, 0x75bd, 0x75b8, 0x75bc, 0x75b1, 0x75cd, - 0x75ca, 0x75d2, 0x75d9, 0x75e3, 0x75de, 0x75fe, 0x75ff, 0x003f, - 0x75fc, 0x7601, 0x75f0, 0x75fa, 0x75f2, 0x75f3, 0x760b, 0x760d, - 0x7609, 0x761f, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, - 0x7630, 0x763b, 0x7647, 0x7648, 0x7646, 0x765c, 0x7658, 0x7661, - 0x7662, 0x7668, 0x7669, 0x766a, 0x7667, 0x766c, 0x7670, 0x7672, - 0x7676, 0x7678, 0x767c, 0x7680, 0x7683, 0x7688, 0x768b, 0x768e, - 0x7696, 0x7693, 0x7699, 0x769a, 0x76b0, 0x76b4, 0x76b8, 0x76b9, - 0x76ba, 0x76c2, 0x76cd, 0x76d6, 0x76d2, 0x76de, 0x76e1, 0x76e5, - 0x76e7, 0x76ea, 0x862f, 0x76fb, 0x7708, 0x7707, 0x7704, 0x7729, - 0x7724, 0x771e, 0x7725, 0x7726, 0x771b, 0x7737, 0x7738, 0x7747, - 0x775a, 0x7768, 0x776b, 0x775b, 0x7765, 0x777f, 0x777e, 0x7779, - 0x778e, 0x778b, 0x7791, 0x77a0, 0x779e, 0x77b0, 0x77b6, 0x77b9, - 0x77bf, 0x77bc, 0x77bd, 0x77bb, 0x77c7, 0x77cd, 0x77d7, 0x77da, - 0x77dc, 0x77e3, 0x77ee, 0x77fc, 0x780c, 0x7812, 0x7926, 0x7820, - 0x792a, 0x7845, 0x788e, 0x7874, 0x7886, 0x787c, 0x789a, 0x788c, - 0x78a3, 0x78b5, 0x78aa, 0x78af, 0x78d1, 0x78c6, 0x78cb, 0x78d4, - 0x78be, 0x78bc, 0x78c5, 0x78ca, 0x78ec, 0x003f, 0x003f, 0x003f, - /* lead byte e2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x78e7, 0x78da, 0x78fd, 0x78f4, 0x7907, 0x7912, 0x7911, 0x7919, - 0x792c, 0x792b, 0x7940, 0x7960, 0x7957, 0x795f, 0x795a, 0x7955, - 0x7953, 0x797a, 0x797f, 0x798a, 0x799d, 0x79a7, 0x9f4b, 0x79aa, - 0x79ae, 0x79b3, 0x79b9, 0x79ba, 0x79c9, 0x79d5, 0x79e7, 0x79ec, - 0x79e1, 0x79e3, 0x7a08, 0x7a0d, 0x7a18, 0x7a19, 0x7a20, 0x7a1f, - 0x7980, 0x7a31, 0x7a3b, 0x7a3e, 0x7a37, 0x7a43, 0x7a57, 0x7a49, - 0x7a61, 0x7a62, 0x7a69, 0x9f9d, 0x7a70, 0x7a79, 0x7a7d, 0x7a88, - 0x7a97, 0x7a95, 0x7a98, 0x7a96, 0x7aa9, 0x7ac8, 0x7ab0, 0x003f, - 0x7ab6, 0x7ac5, 0x7ac4, 0x7abf, 0x9083, 0x7ac7, 0x7aca, 0x7acd, - 0x7acf, 0x7ad5, 0x7ad3, 0x7ad9, 0x7ada, 0x7add, 0x7ae1, 0x7ae2, - 0x7ae6, 0x7aed, 0x7af0, 0x7b02, 0x7b0f, 0x7b0a, 0x7b06, 0x7b33, - 0x7b18, 0x7b19, 0x7b1e, 0x7b35, 0x7b28, 0x7b36, 0x7b50, 0x7b7a, - 0x7b04, 0x7b4d, 0x7b0b, 0x7b4c, 0x7b45, 0x7b75, 0x7b65, 0x7b74, - 0x7b67, 0x7b70, 0x7b71, 0x7b6c, 0x7b6e, 0x7b9d, 0x7b98, 0x7b9f, - 0x7b8d, 0x7b9c, 0x7b9a, 0x7b8b, 0x7b92, 0x7b8f, 0x7b5d, 0x7b99, - 0x7bcb, 0x7bc1, 0x7bcc, 0x7bcf, 0x7bb4, 0x7bc6, 0x7bdd, 0x7be9, - 0x7c11, 0x7c14, 0x7be6, 0x7be5, 0x7c60, 0x7c00, 0x7c07, 0x7c13, - 0x7bf3, 0x7bf7, 0x7c17, 0x7c0d, 0x7bf6, 0x7c23, 0x7c27, 0x7c2a, - 0x7c1f, 0x7c37, 0x7c2b, 0x7c3d, 0x7c4c, 0x7c43, 0x7c54, 0x7c4f, - 0x7c40, 0x7c50, 0x7c58, 0x7c5f, 0x7c64, 0x7c56, 0x7c65, 0x7c6c, - 0x7c75, 0x7c83, 0x7c90, 0x7ca4, 0x7cad, 0x7ca2, 0x7cab, 0x7ca1, - 0x7ca8, 0x7cb3, 0x7cb2, 0x7cb1, 0x7cae, 0x7cb9, 0x7cbd, 0x7cc0, - 0x7cc5, 0x7cc2, 0x7cd8, 0x7cd2, 0x7cdc, 0x7ce2, 0x9b3b, 0x7cef, - 0x7cf2, 0x7cf4, 0x7cf6, 0x7cfa, 0x7d06, 0x003f, 0x003f, 0x003f, - /* lead byte e3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7d02, 0x7d1c, 0x7d15, 0x7d0a, 0x7d45, 0x7d4b, 0x7d2e, 0x7d32, - 0x7d3f, 0x7d35, 0x7d46, 0x7d73, 0x7d56, 0x7d4e, 0x7d72, 0x7d68, - 0x7d6e, 0x7d4f, 0x7d63, 0x7d93, 0x7d89, 0x7d5b, 0x7d8f, 0x7d7d, - 0x7d9b, 0x7dba, 0x7dae, 0x7da3, 0x7db5, 0x7dc7, 0x7dbd, 0x7dab, - 0x7e3d, 0x7da2, 0x7daf, 0x7ddc, 0x7db8, 0x7d9f, 0x7db0, 0x7dd8, - 0x7ddd, 0x7de4, 0x7dde, 0x7dfb, 0x7df2, 0x7de1, 0x7e05, 0x7e0a, - 0x7e23, 0x7e21, 0x7e12, 0x7e31, 0x7e1f, 0x7e09, 0x7e0b, 0x7e22, - 0x7e46, 0x7e66, 0x7e3b, 0x7e35, 0x7e39, 0x7e43, 0x7e37, 0x003f, - 0x7e32, 0x7e3a, 0x7e67, 0x7e5d, 0x7e56, 0x7e5e, 0x7e59, 0x7e5a, - 0x7e79, 0x7e6a, 0x7e69, 0x7e7c, 0x7e7b, 0x7e83, 0x7dd5, 0x7e7d, - 0x8fae, 0x7e7f, 0x7e88, 0x7e89, 0x7e8c, 0x7e92, 0x7e90, 0x7e93, - 0x7e94, 0x7e96, 0x7e8e, 0x7e9b, 0x7e9c, 0x7f38, 0x7f3a, 0x7f45, - 0x7f4c, 0x7f4d, 0x7f4e, 0x7f50, 0x7f51, 0x7f55, 0x7f54, 0x7f58, - 0x7f5f, 0x7f60, 0x7f68, 0x7f69, 0x7f67, 0x7f78, 0x7f82, 0x7f86, - 0x7f83, 0x7f88, 0x7f87, 0x7f8c, 0x7f94, 0x7f9e, 0x7f9d, 0x7f9a, - 0x7fa3, 0x7faf, 0x7fb2, 0x7fb9, 0x7fae, 0x7fb6, 0x7fb8, 0x8b71, - 0x7fc5, 0x7fc6, 0x7fca, 0x7fd5, 0x7fd4, 0x7fe1, 0x7fe6, 0x7fe9, - 0x7ff3, 0x7ff9, 0x98dc, 0x8006, 0x8004, 0x800b, 0x8012, 0x8018, - 0x8019, 0x801c, 0x8021, 0x8028, 0x803f, 0x803b, 0x804a, 0x8046, - 0x8052, 0x8058, 0x805a, 0x805f, 0x8062, 0x8068, 0x8073, 0x8072, - 0x8070, 0x8076, 0x8079, 0x807d, 0x807f, 0x8084, 0x8086, 0x8085, - 0x809b, 0x8093, 0x809a, 0x80ad, 0x5190, 0x80ac, 0x80db, 0x80e5, - 0x80d9, 0x80dd, 0x80c4, 0x80da, 0x80d6, 0x8109, 0x80ef, 0x80f1, - 0x811b, 0x8129, 0x8123, 0x812f, 0x814b, 0x003f, 0x003f, 0x003f, - /* lead byte e4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x968b, 0x8146, 0x813e, 0x8153, 0x8151, 0x80fc, 0x8171, 0x816e, - 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818a, 0x8180, 0x8182, - 0x81a0, 0x8195, 0x81a4, 0x81a3, 0x815f, 0x8193, 0x81a9, 0x81b0, - 0x81b5, 0x81be, 0x81b8, 0x81bd, 0x81c0, 0x81c2, 0x81ba, 0x81c9, - 0x81cd, 0x81d1, 0x81d9, 0x81d8, 0x81c8, 0x81da, 0x81df, 0x81e0, - 0x81e7, 0x81fa, 0x81fb, 0x81fe, 0x8201, 0x8202, 0x8205, 0x8207, - 0x820a, 0x820d, 0x8210, 0x8216, 0x8229, 0x822b, 0x8238, 0x8233, - 0x8240, 0x8259, 0x8258, 0x825d, 0x825a, 0x825f, 0x8264, 0x003f, - 0x8262, 0x8268, 0x826a, 0x826b, 0x822e, 0x8271, 0x8277, 0x8278, - 0x827e, 0x828d, 0x8292, 0x82ab, 0x829f, 0x82bb, 0x82ac, 0x82e1, - 0x82e3, 0x82df, 0x82d2, 0x82f4, 0x82f3, 0x82fa, 0x8393, 0x8303, - 0x82fb, 0x82f9, 0x82de, 0x8306, 0x82dc, 0x8309, 0x82d9, 0x8335, - 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, - 0x832f, 0x832b, 0x8317, 0x8318, 0x8385, 0x839a, 0x83aa, 0x839f, - 0x83a2, 0x8396, 0x8323, 0x838e, 0x8387, 0x838a, 0x837c, 0x83b5, - 0x8373, 0x8375, 0x83a0, 0x8389, 0x83a8, 0x83f4, 0x8413, 0x83eb, - 0x83ce, 0x83fd, 0x8403, 0x83d8, 0x840b, 0x83c1, 0x83f7, 0x8407, - 0x83e0, 0x83f2, 0x840d, 0x8422, 0x8420, 0x83bd, 0x8438, 0x8506, - 0x83fb, 0x846d, 0x842a, 0x843c, 0x855a, 0x8484, 0x8477, 0x846b, - 0x84ad, 0x846e, 0x8482, 0x8469, 0x8446, 0x842c, 0x846f, 0x8479, - 0x8435, 0x84ca, 0x8462, 0x84b9, 0x84bf, 0x849f, 0x84d9, 0x84cd, - 0x84bb, 0x84da, 0x84d0, 0x84c1, 0x84c6, 0x84d6, 0x84a1, 0x8521, - 0x84ff, 0x84f4, 0x8517, 0x8518, 0x852c, 0x851f, 0x8515, 0x8514, - 0x84fc, 0x8540, 0x8563, 0x8558, 0x8548, 0x003f, 0x003f, 0x003f, - /* lead byte e5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8541, 0x8602, 0x854b, 0x8555, 0x8580, 0x85a4, 0x8588, 0x8591, - 0x858a, 0x85a8, 0x856d, 0x8594, 0x859b, 0x85ea, 0x8587, 0x859c, - 0x8577, 0x857e, 0x8590, 0x85c9, 0x85ba, 0x85cf, 0x85b9, 0x85d0, - 0x85d5, 0x85dd, 0x85e5, 0x85dc, 0x85f9, 0x860a, 0x8613, 0x860b, - 0x85fe, 0x85fa, 0x8606, 0x8622, 0x861a, 0x8630, 0x863f, 0x864d, - 0x4e55, 0x8654, 0x865f, 0x8667, 0x8671, 0x8693, 0x86a3, 0x86a9, - 0x86aa, 0x868b, 0x868c, 0x86b6, 0x86af, 0x86c4, 0x86c6, 0x86b0, - 0x86c9, 0x8823, 0x86ab, 0x86d4, 0x86de, 0x86e9, 0x86ec, 0x003f, - 0x86df, 0x86db, 0x86ef, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, - 0x86fb, 0x8711, 0x8709, 0x870d, 0x86f9, 0x870a, 0x8734, 0x873f, - 0x8737, 0x873b, 0x8725, 0x8729, 0x871a, 0x8760, 0x875f, 0x8778, - 0x874c, 0x874e, 0x8774, 0x8757, 0x8768, 0x876e, 0x8759, 0x8753, - 0x8763, 0x876a, 0x8805, 0x87a2, 0x879f, 0x8782, 0x87af, 0x87cb, - 0x87bd, 0x87c0, 0x87d0, 0x96d6, 0x87ab, 0x87c4, 0x87b3, 0x87c7, - 0x87c6, 0x87bb, 0x87ef, 0x87f2, 0x87e0, 0x880f, 0x880d, 0x87fe, - 0x87f6, 0x87f7, 0x880e, 0x87d2, 0x8811, 0x8816, 0x8815, 0x8822, - 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883b, 0x8844, 0x8842, - 0x8852, 0x8859, 0x885e, 0x8862, 0x886b, 0x8881, 0x887e, 0x889e, - 0x8875, 0x887d, 0x88b5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88ae, - 0x8899, 0x88a2, 0x888d, 0x88a4, 0x88b0, 0x88bf, 0x88b1, 0x88c3, - 0x88c4, 0x88d4, 0x88d8, 0x88d9, 0x88dd, 0x88f9, 0x8902, 0x88fc, - 0x88f4, 0x88e8, 0x88f2, 0x8904, 0x890c, 0x890a, 0x8913, 0x8943, - 0x891e, 0x8925, 0x892a, 0x892b, 0x8941, 0x8944, 0x893b, 0x8936, - 0x8938, 0x894c, 0x891d, 0x8960, 0x895e, 0x003f, 0x003f, 0x003f, - /* lead byte e6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8966, 0x8964, 0x896d, 0x896a, 0x896f, 0x8974, 0x8977, 0x897e, - 0x8983, 0x8988, 0x898a, 0x8993, 0x8998, 0x89a1, 0x89a9, 0x89a6, - 0x89ac, 0x89af, 0x89b2, 0x89ba, 0x89bd, 0x89bf, 0x89c0, 0x89da, - 0x89dc, 0x89dd, 0x89e7, 0x89f4, 0x89f8, 0x8a03, 0x8a16, 0x8a10, - 0x8a0c, 0x8a1b, 0x8a1d, 0x8a25, 0x8a36, 0x8a41, 0x8a5b, 0x8a52, - 0x8a46, 0x8a48, 0x8a7c, 0x8a6d, 0x8a6c, 0x8a62, 0x8a85, 0x8a82, - 0x8a84, 0x8aa8, 0x8aa1, 0x8a91, 0x8aa5, 0x8aa6, 0x8a9a, 0x8aa3, - 0x8ac4, 0x8acd, 0x8ac2, 0x8ada, 0x8aeb, 0x8af3, 0x8ae7, 0x003f, - 0x8ae4, 0x8af1, 0x8b14, 0x8ae0, 0x8ae2, 0x8af7, 0x8ade, 0x8adb, - 0x8b0c, 0x8b07, 0x8b1a, 0x8ae1, 0x8b16, 0x8b10, 0x8b17, 0x8b20, - 0x8b33, 0x97ab, 0x8b26, 0x8b2b, 0x8b3e, 0x8b28, 0x8b41, 0x8b4c, - 0x8b4f, 0x8b4e, 0x8b49, 0x8b56, 0x8b5b, 0x8b5a, 0x8b6b, 0x8b5f, - 0x8b6c, 0x8b6f, 0x8b74, 0x8b7d, 0x8b80, 0x8b8c, 0x8b8e, 0x8b92, - 0x8b93, 0x8b96, 0x8b99, 0x8b9a, 0x8c3a, 0x8c41, 0x8c3f, 0x8c48, - 0x8c4c, 0x8c4e, 0x8c50, 0x8c55, 0x8c62, 0x8c6c, 0x8c78, 0x8c7a, - 0x8c82, 0x8c89, 0x8c85, 0x8c8a, 0x8c8d, 0x8c8e, 0x8c94, 0x8c7c, - 0x8c98, 0x621d, 0x8cad, 0x8caa, 0x8cbd, 0x8cb2, 0x8cb3, 0x8cae, - 0x8cb6, 0x8cc8, 0x8cc1, 0x8ce4, 0x8ce3, 0x8cda, 0x8cfd, 0x8cfa, - 0x8cfb, 0x8d04, 0x8d05, 0x8d0a, 0x8d07, 0x8d0f, 0x8d0d, 0x8d10, - 0x9f4e, 0x8d13, 0x8ccd, 0x8d14, 0x8d16, 0x8d67, 0x8d6d, 0x8d71, - 0x8d73, 0x8d81, 0x8d99, 0x8dc2, 0x8dbe, 0x8dba, 0x8dcf, 0x8dda, - 0x8dd6, 0x8dcc, 0x8ddb, 0x8dcb, 0x8dea, 0x8deb, 0x8ddf, 0x8de3, - 0x8dfc, 0x8e08, 0x8e09, 0x8dff, 0x8e1d, 0x8e1e, 0x8e10, 0x8e1f, - 0x8e42, 0x8e35, 0x8e30, 0x8e34, 0x8e4a, 0x003f, 0x003f, 0x003f, - /* lead byte e7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8e47, 0x8e49, 0x8e4c, 0x8e50, 0x8e48, 0x8e59, 0x8e64, 0x8e60, - 0x8e2a, 0x8e63, 0x8e55, 0x8e76, 0x8e72, 0x8e7c, 0x8e81, 0x8e87, - 0x8e85, 0x8e84, 0x8e8b, 0x8e8a, 0x8e93, 0x8e91, 0x8e94, 0x8e99, - 0x8eaa, 0x8ea1, 0x8eac, 0x8eb0, 0x8ec6, 0x8eb1, 0x8ebe, 0x8ec5, - 0x8ec8, 0x8ecb, 0x8edb, 0x8ee3, 0x8efc, 0x8efb, 0x8eeb, 0x8efe, - 0x8f0a, 0x8f05, 0x8f15, 0x8f12, 0x8f19, 0x8f13, 0x8f1c, 0x8f1f, - 0x8f1b, 0x8f0c, 0x8f26, 0x8f33, 0x8f3b, 0x8f39, 0x8f45, 0x8f42, - 0x8f3e, 0x8f4c, 0x8f49, 0x8f46, 0x8f4e, 0x8f57, 0x8f5c, 0x003f, - 0x8f62, 0x8f63, 0x8f64, 0x8f9c, 0x8f9f, 0x8fa3, 0x8fad, 0x8faf, - 0x8fb7, 0x8fda, 0x8fe5, 0x8fe2, 0x8fea, 0x8fef, 0x9087, 0x8ff4, - 0x9005, 0x8ff9, 0x8ffa, 0x9011, 0x9015, 0x9021, 0x900d, 0x901e, - 0x9016, 0x900b, 0x9027, 0x9036, 0x9035, 0x9039, 0x8ff8, 0x904f, - 0x9050, 0x9051, 0x9052, 0x900e, 0x9049, 0x903e, 0x9056, 0x9058, - 0x905e, 0x9068, 0x906f, 0x9076, 0x96a8, 0x9072, 0x9082, 0x907d, - 0x9081, 0x9080, 0x908a, 0x9089, 0x908f, 0x90a8, 0x90af, 0x90b1, - 0x90b5, 0x90e2, 0x90e4, 0x6248, 0x90db, 0x9102, 0x9112, 0x9119, - 0x9132, 0x9130, 0x914a, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, - 0x9173, 0x9172, 0x918b, 0x9189, 0x9182, 0x91a2, 0x91ab, 0x91af, - 0x91aa, 0x91b5, 0x91b4, 0x91ba, 0x91c0, 0x91c1, 0x91c9, 0x91cb, - 0x91d0, 0x91d6, 0x91df, 0x91e1, 0x91db, 0x91fc, 0x91f5, 0x91f6, - 0x921e, 0x91ff, 0x9214, 0x922c, 0x9215, 0x9211, 0x925e, 0x9257, - 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923f, 0x924b, 0x9250, - 0x929c, 0x9296, 0x9293, 0x929b, 0x925a, 0x92cf, 0x92b9, 0x92b7, - 0x92e9, 0x930f, 0x92fa, 0x9344, 0x932e, 0x003f, 0x003f, 0x003f, - /* lead byte e8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9319, 0x9322, 0x931a, 0x9323, 0x933a, 0x9335, 0x933b, 0x935c, - 0x9360, 0x937c, 0x936e, 0x9356, 0x93b0, 0x93ac, 0x93ad, 0x9394, - 0x93b9, 0x93d6, 0x93d7, 0x93e8, 0x93e5, 0x93d8, 0x93c3, 0x93dd, - 0x93d0, 0x93c8, 0x93e4, 0x941a, 0x9414, 0x9413, 0x9403, 0x9407, - 0x9410, 0x9436, 0x942b, 0x9435, 0x9421, 0x943a, 0x9441, 0x9452, - 0x9444, 0x945b, 0x9460, 0x9462, 0x945e, 0x946a, 0x9229, 0x9470, - 0x9475, 0x9477, 0x947d, 0x945a, 0x947c, 0x947e, 0x9481, 0x947f, - 0x9582, 0x9587, 0x958a, 0x9594, 0x9596, 0x9598, 0x9599, 0x003f, - 0x95a0, 0x95a8, 0x95a7, 0x95ad, 0x95bc, 0x95bb, 0x95b9, 0x95be, - 0x95ca, 0x6ff6, 0x95c3, 0x95cd, 0x95cc, 0x95d5, 0x95d4, 0x95d6, - 0x95dc, 0x95e1, 0x95e5, 0x95e2, 0x9621, 0x9628, 0x962e, 0x962f, - 0x9642, 0x964c, 0x964f, 0x964b, 0x9677, 0x965c, 0x965e, 0x965d, - 0x965f, 0x9666, 0x9672, 0x966c, 0x968d, 0x9698, 0x9695, 0x9697, - 0x96aa, 0x96a7, 0x96b1, 0x96b2, 0x96b0, 0x96b4, 0x96b6, 0x96b8, - 0x96b9, 0x96ce, 0x96cb, 0x96c9, 0x96cd, 0x894d, 0x96dc, 0x970d, - 0x96d5, 0x96f9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970e, 0x9711, - 0x970f, 0x9716, 0x9719, 0x9724, 0x972a, 0x9730, 0x9739, 0x973d, - 0x973e, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975c, 0x9760, - 0x9764, 0x9766, 0x9768, 0x52d2, 0x976b, 0x9771, 0x9779, 0x9785, - 0x977c, 0x9781, 0x977a, 0x9786, 0x978b, 0x978f, 0x9790, 0x979c, - 0x97a8, 0x97a6, 0x97a3, 0x97b3, 0x97b4, 0x97c3, 0x97c6, 0x97c8, - 0x97cb, 0x97dc, 0x97ed, 0x9f4f, 0x97f2, 0x7adf, 0x97f6, 0x97f5, - 0x980f, 0x980c, 0x9838, 0x9824, 0x9821, 0x9837, 0x983d, 0x9846, - 0x984f, 0x984b, 0x986b, 0x986f, 0x9870, 0x003f, 0x003f, 0x003f, - /* lead byte e9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9871, 0x9874, 0x9873, 0x98aa, 0x98af, 0x98b1, 0x98b6, 0x98c4, - 0x98c3, 0x98c6, 0x98e9, 0x98eb, 0x9903, 0x9909, 0x9912, 0x9914, - 0x9918, 0x9921, 0x991d, 0x991e, 0x9924, 0x9920, 0x992c, 0x992e, - 0x993d, 0x993e, 0x9942, 0x9949, 0x9945, 0x9950, 0x994b, 0x9951, - 0x9952, 0x994c, 0x9955, 0x9997, 0x9998, 0x99a5, 0x99ad, 0x99ae, - 0x99bc, 0x99df, 0x99db, 0x99dd, 0x99d8, 0x99d1, 0x99ed, 0x99ee, - 0x99f1, 0x99f2, 0x99fb, 0x99f8, 0x9a01, 0x9a0f, 0x9a05, 0x99e2, - 0x9a19, 0x9a2b, 0x9a37, 0x9a45, 0x9a42, 0x9a40, 0x9a43, 0x003f, - 0x9a3e, 0x9a55, 0x9a4d, 0x9a5b, 0x9a57, 0x9a5f, 0x9a62, 0x9a65, - 0x9a64, 0x9a69, 0x9a6b, 0x9a6a, 0x9aad, 0x9ab0, 0x9abc, 0x9ac0, - 0x9acf, 0x9ad1, 0x9ad3, 0x9ad4, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3, - 0x9ae6, 0x9aef, 0x9aeb, 0x9aee, 0x9af4, 0x9af1, 0x9af7, 0x9afb, - 0x9b06, 0x9b18, 0x9b1a, 0x9b1f, 0x9b22, 0x9b23, 0x9b25, 0x9b27, - 0x9b28, 0x9b29, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b32, 0x9b44, 0x9b43, - 0x9b4f, 0x9b4d, 0x9b4e, 0x9b51, 0x9b58, 0x9b74, 0x9b93, 0x9b83, - 0x9b91, 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, 0x9bb4, 0x9bc0, - 0x9bca, 0x9bb9, 0x9bc6, 0x9bcf, 0x9bd1, 0x9bd2, 0x9be3, 0x9be2, - 0x9be4, 0x9bd4, 0x9be1, 0x9c3a, 0x9bf2, 0x9bf1, 0x9bf0, 0x9c15, - 0x9c14, 0x9c09, 0x9c13, 0x9c0c, 0x9c06, 0x9c08, 0x9c12, 0x9c0a, - 0x9c04, 0x9c2e, 0x9c1b, 0x9c25, 0x9c24, 0x9c21, 0x9c30, 0x9c47, - 0x9c32, 0x9c46, 0x9c3e, 0x9c5a, 0x9c60, 0x9c67, 0x9c76, 0x9c78, - 0x9ce7, 0x9cec, 0x9cf0, 0x9d09, 0x9d08, 0x9ceb, 0x9d03, 0x9d06, - 0x9d2a, 0x9d26, 0x9daf, 0x9d23, 0x9d1f, 0x9d44, 0x9d15, 0x9d12, - 0x9d41, 0x9d3f, 0x9d3e, 0x9d46, 0x9d48, 0x003f, 0x003f, 0x003f, - /* lead byte ea */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9d5d, 0x9d5e, 0x9d64, 0x9d51, 0x9d50, 0x9d59, 0x9d72, 0x9d89, - 0x9d87, 0x9dab, 0x9d6f, 0x9d7a, 0x9d9a, 0x9da4, 0x9da9, 0x9db2, - 0x9dc4, 0x9dc1, 0x9dbb, 0x9db8, 0x9dba, 0x9dc6, 0x9dcf, 0x9dc2, - 0x9dd9, 0x9dd3, 0x9df8, 0x9de6, 0x9ded, 0x9def, 0x9dfd, 0x9e1a, - 0x9e1b, 0x9e1e, 0x9e75, 0x9e79, 0x9e7d, 0x9e81, 0x9e88, 0x9e8b, - 0x9e8c, 0x9e92, 0x9e95, 0x9e91, 0x9e9d, 0x9ea5, 0x9ea9, 0x9eb8, - 0x9eaa, 0x9ead, 0x9761, 0x9ecc, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed4, - 0x9edc, 0x9ede, 0x9edd, 0x9ee0, 0x9ee5, 0x9ee8, 0x9eef, 0x003f, - 0x9ef4, 0x9ef6, 0x9ef7, 0x9ef9, 0x9efb, 0x9efc, 0x9efd, 0x9f07, - 0x9f08, 0x76b7, 0x9f15, 0x9f21, 0x9f2c, 0x9f3e, 0x9f4a, 0x9f52, - 0x9f54, 0x9f63, 0x9f5f, 0x9f60, 0x9f61, 0x9f66, 0x9f67, 0x9f6c, - 0x9f6a, 0x9f77, 0x9f72, 0x9f76, 0x9f95, 0x9f9c, 0x9fa0, 0x582f, - 0x69c7, 0x9059, 0x7464, 0x51dc, 0x7199, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ed */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7e8a, 0x891c, 0x9348, 0x9288, 0x84dc, 0x4fc9, 0x70bb, 0x6631, - 0x68c8, 0x92f9, 0x66fb, 0x5f45, 0x4e28, 0x4ee1, 0x4efc, 0x4f00, - 0x4f03, 0x4f39, 0x4f56, 0x4f92, 0x4f8a, 0x4f9a, 0x4f94, 0x4fcd, - 0x5040, 0x5022, 0x4fff, 0x501e, 0x5046, 0x5070, 0x5042, 0x5094, - 0x50f4, 0x50d8, 0x514a, 0x5164, 0x519d, 0x51be, 0x51ec, 0x5215, - 0x529c, 0x52a6, 0x52c0, 0x52db, 0x5300, 0x5307, 0x5324, 0x5372, - 0x5393, 0x53b2, 0x53dd, 0xfa0e, 0x549c, 0x548a, 0x54a9, 0x54ff, - 0x5586, 0x5759, 0x5765, 0x57ac, 0x57c8, 0x57c7, 0xfa0f, 0x003f, - 0xfa10, 0x589e, 0x58b2, 0x590b, 0x5953, 0x595b, 0x595d, 0x5963, - 0x59a4, 0x59ba, 0x5b56, 0x5bc0, 0x752f, 0x5bd8, 0x5bec, 0x5c1e, - 0x5ca6, 0x5cba, 0x5cf5, 0x5d27, 0x5d53, 0xfa11, 0x5d42, 0x5d6d, - 0x5db8, 0x5db9, 0x5dd0, 0x5f21, 0x5f34, 0x5f67, 0x5fb7, 0x5fde, - 0x605d, 0x6085, 0x608a, 0x60de, 0x60d5, 0x6120, 0x60f2, 0x6111, - 0x6137, 0x6130, 0x6198, 0x6213, 0x62a6, 0x63f5, 0x6460, 0x649d, - 0x64ce, 0x654e, 0x6600, 0x6615, 0x663b, 0x6609, 0x662e, 0x661e, - 0x6624, 0x6665, 0x6657, 0x6659, 0xfa12, 0x6673, 0x6699, 0x66a0, - 0x66b2, 0x66bf, 0x66fa, 0x670e, 0xf929, 0x6766, 0x67bb, 0x6852, - 0x67c0, 0x6801, 0x6844, 0x68cf, 0xfa13, 0x6968, 0xfa14, 0x6998, - 0x69e2, 0x6a30, 0x6a6b, 0x6a46, 0x6a73, 0x6a7e, 0x6ae2, 0x6ae4, - 0x6bd6, 0x6c3f, 0x6c5c, 0x6c86, 0x6c6f, 0x6cda, 0x6d04, 0x6d87, - 0x6d6f, 0x6d96, 0x6dac, 0x6dcf, 0x6df8, 0x6df2, 0x6dfc, 0x6e39, - 0x6e5c, 0x6e27, 0x6e3c, 0x6ebf, 0x6f88, 0x6fb5, 0x6ff5, 0x7005, - 0x7007, 0x7028, 0x7085, 0x70ab, 0x710f, 0x7104, 0x715c, 0x7146, - 0x7147, 0xfa15, 0x71c1, 0x71fe, 0x72b1, 0x003f, 0x003f, 0x003f, - /* lead byte ee */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x72be, 0x7324, 0xfa16, 0x7377, 0x73bd, 0x73c9, 0x73d6, 0x73e3, - 0x73d2, 0x7407, 0x73f5, 0x7426, 0x742a, 0x7429, 0x742e, 0x7462, - 0x7489, 0x749f, 0x7501, 0x756f, 0x7682, 0x769c, 0x769e, 0x769b, - 0x76a6, 0xfa17, 0x7746, 0x52af, 0x7821, 0x784e, 0x7864, 0x787a, - 0x7930, 0xfa18, 0xfa19, 0xfa1a, 0x7994, 0xfa1b, 0x799b, 0x7ad1, - 0x7ae7, 0xfa1c, 0x7aeb, 0x7b9e, 0xfa1d, 0x7d48, 0x7d5c, 0x7db7, - 0x7da0, 0x7dd6, 0x7e52, 0x7f47, 0x7fa1, 0xfa1e, 0x8301, 0x8362, - 0x837f, 0x83c7, 0x83f6, 0x8448, 0x84b4, 0x8553, 0x8559, 0x003f, - 0x856b, 0xfa1f, 0x85b0, 0xfa20, 0xfa21, 0x8807, 0x88f5, 0x8a12, - 0x8a37, 0x8a79, 0x8aa7, 0x8abe, 0x8adf, 0xfa22, 0x8af6, 0x8b53, - 0x8b7f, 0x8cf0, 0x8cf4, 0x8d12, 0x8d76, 0xfa23, 0x8ecf, 0xfa24, - 0xfa25, 0x9067, 0x90de, 0xfa26, 0x9115, 0x9127, 0x91da, 0x91d7, - 0x91de, 0x91ed, 0x91ee, 0x91e4, 0x91e5, 0x9206, 0x9210, 0x920a, - 0x923a, 0x9240, 0x923c, 0x924e, 0x9259, 0x9251, 0x9239, 0x9267, - 0x92a7, 0x9277, 0x9278, 0x92e7, 0x92d7, 0x92d9, 0x92d0, 0xfa27, - 0x92d5, 0x92e0, 0x92d3, 0x9325, 0x9321, 0x92fb, 0xfa28, 0x931e, - 0x92ff, 0x931d, 0x9302, 0x9370, 0x9357, 0x93a4, 0x93c6, 0x93de, - 0x93f8, 0x9431, 0x9445, 0x9448, 0x9592, 0xf9dc, 0xfa29, 0x969d, - 0x96af, 0x9733, 0x973b, 0x9743, 0x974d, 0x974f, 0x9751, 0x9755, - 0x9857, 0x9865, 0xfa2a, 0xfa2b, 0x9927, 0xfa2c, 0x999e, 0x9a4e, - 0x9ad9, 0x9adc, 0x9b75, 0x9b72, 0x9b8f, 0x9bb1, 0x9bbb, 0x9c00, - 0x9d70, 0x9d6b, 0xfa2d, 0x9e19, 0x9ed1, 0x003f, 0x003f, 0x2170, - 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, - 0x2179, 0xffe2, 0xffe4, 0xff07, 0xff02, 0x003f, 0x003f, 0x003f, - /* lead byte fa */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, - 0x2178, 0x2179, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, - 0x2166, 0x2167, 0x2168, 0x2169, 0xffe2, 0xffe4, 0xff07, 0xff02, - 0x3231, 0x2116, 0x2121, 0x2235, 0x7e8a, 0x891c, 0x9348, 0x9288, - 0x84dc, 0x4fc9, 0x70bb, 0x6631, 0x68c8, 0x92f9, 0x66fb, 0x5f45, - 0x4e28, 0x4ee1, 0x4efc, 0x4f00, 0x4f03, 0x4f39, 0x4f56, 0x4f92, - 0x4f8a, 0x4f9a, 0x4f94, 0x4fcd, 0x5040, 0x5022, 0x4fff, 0x501e, - 0x5046, 0x5070, 0x5042, 0x5094, 0x50f4, 0x50d8, 0x514a, 0x003f, - 0x5164, 0x519d, 0x51be, 0x51ec, 0x5215, 0x529c, 0x52a6, 0x52c0, - 0x52db, 0x5300, 0x5307, 0x5324, 0x5372, 0x5393, 0x53b2, 0x53dd, - 0xfa0e, 0x549c, 0x548a, 0x54a9, 0x54ff, 0x5586, 0x5759, 0x5765, - 0x57ac, 0x57c8, 0x57c7, 0xfa0f, 0xfa10, 0x589e, 0x58b2, 0x590b, - 0x5953, 0x595b, 0x595d, 0x5963, 0x59a4, 0x59ba, 0x5b56, 0x5bc0, - 0x752f, 0x5bd8, 0x5bec, 0x5c1e, 0x5ca6, 0x5cba, 0x5cf5, 0x5d27, - 0x5d53, 0xfa11, 0x5d42, 0x5d6d, 0x5db8, 0x5db9, 0x5dd0, 0x5f21, - 0x5f34, 0x5f67, 0x5fb7, 0x5fde, 0x605d, 0x6085, 0x608a, 0x60de, - 0x60d5, 0x6120, 0x60f2, 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, - 0x62a6, 0x63f5, 0x6460, 0x649d, 0x64ce, 0x654e, 0x6600, 0x6615, - 0x663b, 0x6609, 0x662e, 0x661e, 0x6624, 0x6665, 0x6657, 0x6659, - 0xfa12, 0x6673, 0x6699, 0x66a0, 0x66b2, 0x66bf, 0x66fa, 0x670e, - 0xf929, 0x6766, 0x67bb, 0x6852, 0x67c0, 0x6801, 0x6844, 0x68cf, - 0xfa13, 0x6968, 0xfa14, 0x6998, 0x69e2, 0x6a30, 0x6a6b, 0x6a46, - 0x6a73, 0x6a7e, 0x6ae2, 0x6ae4, 0x6bd6, 0x6c3f, 0x6c5c, 0x6c86, - 0x6c6f, 0x6cda, 0x6d04, 0x6d87, 0x6d6f, 0x003f, 0x003f, 0x003f, - /* lead byte fb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6d96, 0x6dac, 0x6dcf, 0x6df8, 0x6df2, 0x6dfc, 0x6e39, 0x6e5c, - 0x6e27, 0x6e3c, 0x6ebf, 0x6f88, 0x6fb5, 0x6ff5, 0x7005, 0x7007, - 0x7028, 0x7085, 0x70ab, 0x710f, 0x7104, 0x715c, 0x7146, 0x7147, - 0xfa15, 0x71c1, 0x71fe, 0x72b1, 0x72be, 0x7324, 0xfa16, 0x7377, - 0x73bd, 0x73c9, 0x73d6, 0x73e3, 0x73d2, 0x7407, 0x73f5, 0x7426, - 0x742a, 0x7429, 0x742e, 0x7462, 0x7489, 0x749f, 0x7501, 0x756f, - 0x7682, 0x769c, 0x769e, 0x769b, 0x76a6, 0xfa17, 0x7746, 0x52af, - 0x7821, 0x784e, 0x7864, 0x787a, 0x7930, 0xfa18, 0xfa19, 0x003f, - 0xfa1a, 0x7994, 0xfa1b, 0x799b, 0x7ad1, 0x7ae7, 0xfa1c, 0x7aeb, - 0x7b9e, 0xfa1d, 0x7d48, 0x7d5c, 0x7db7, 0x7da0, 0x7dd6, 0x7e52, - 0x7f47, 0x7fa1, 0xfa1e, 0x8301, 0x8362, 0x837f, 0x83c7, 0x83f6, - 0x8448, 0x84b4, 0x8553, 0x8559, 0x856b, 0xfa1f, 0x85b0, 0xfa20, - 0xfa21, 0x8807, 0x88f5, 0x8a12, 0x8a37, 0x8a79, 0x8aa7, 0x8abe, - 0x8adf, 0xfa22, 0x8af6, 0x8b53, 0x8b7f, 0x8cf0, 0x8cf4, 0x8d12, - 0x8d76, 0xfa23, 0x8ecf, 0xfa24, 0xfa25, 0x9067, 0x90de, 0xfa26, - 0x9115, 0x9127, 0x91da, 0x91d7, 0x91de, 0x91ed, 0x91ee, 0x91e4, - 0x91e5, 0x9206, 0x9210, 0x920a, 0x923a, 0x9240, 0x923c, 0x924e, - 0x9259, 0x9251, 0x9239, 0x9267, 0x92a7, 0x9277, 0x9278, 0x92e7, - 0x92d7, 0x92d9, 0x92d0, 0xfa27, 0x92d5, 0x92e0, 0x92d3, 0x9325, - 0x9321, 0x92fb, 0xfa28, 0x931e, 0x92ff, 0x931d, 0x9302, 0x9370, - 0x9357, 0x93a4, 0x93c6, 0x93de, 0x93f8, 0x9431, 0x9445, 0x9448, - 0x9592, 0xf9dc, 0xfa29, 0x969d, 0x96af, 0x9733, 0x973b, 0x9743, - 0x974d, 0x974f, 0x9751, 0x9755, 0x9857, 0x9865, 0xfa2a, 0xfa2b, - 0x9927, 0xfa2c, 0x999e, 0x9a4e, 0x9ad9, 0x003f, 0x003f, 0x003f, - /* lead byte fc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9adc, 0x9b75, 0x9b72, 0x9b8f, 0x9bb1, 0x9bbb, 0x9c00, 0x9d70, - 0x9d6b, 0xfa2d, 0x9e19, 0x9ed1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f -}; - -static const unsigned char cp2uni_leadbytes[256] = -{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x03, 0x04, 0x05, 0x01, 0x01, 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, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, - 0x27, 0x28, 0x29, 0x01, 0x01, 0x2a, 0x2b, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x2c, 0x2d, 0x2e, 0x00, 0x00, 0x00 -}; - -static const unsigned short uni2cp_low[27904] = -{ - /* 0x0000 .. 0x00ff */ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0020, 0x0021, 0x0063, 0x004c, 0x003f, 0x005c, 0x007c, 0x8198, - 0x814e, 0x0063, 0x0061, 0x8173, 0x003f, 0x002d, 0x0072, 0x815c, - 0x818b, 0x817d, 0x0032, 0x0033, 0x814c, 0x83ca, 0x81f7, 0x003f, - 0x002c, 0x0031, 0x006f, 0x8174, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0043, - 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049, - 0x0044, 0x004e, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x817e, - 0x004f, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x003f, 0x83c0, - 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0063, - 0x0065, 0x0065, 0x0065, 0x0065, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0064, 0x006e, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x8180, - 0x006f, 0x0075, 0x0075, 0x0075, 0x0075, 0x0079, 0x00fe, 0x0079, - /* 0x0100 .. 0x01ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063, - 0x0043, 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0047, 0x0067, 0x0047, 0x0067, - 0x0047, 0x0067, 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, - 0x0049, 0x0069, 0x003f, 0x003f, 0x004a, 0x006a, 0x004b, 0x006b, - 0x003f, 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x003f, - 0x003f, 0x004c, 0x006c, 0x004e, 0x006e, 0x004e, 0x006e, 0x004e, - 0x006e, 0x003f, 0x003f, 0x003f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0057, 0x0077, 0x0059, 0x0079, - 0x0059, 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0073, - 0x0062, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0044, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0045, 0x0046, 0x0066, 0x003f, 0x003f, 0x003f, 0x003f, 0x0049, - 0x003f, 0x003f, 0x006c, 0x003f, 0x003f, 0x003f, 0x003f, 0x004f, - 0x004f, 0x006f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, 0x0054, 0x0055, - 0x0075, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x84a0, 0x003f, 0x003f, 0x0021, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, 0x0049, - 0x0069, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, - 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x003f, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0047, 0x0067, 0x0047, 0x0067, - 0x004b, 0x006b, 0x004f, 0x006f, 0x004f, 0x006f, 0x003f, 0x003f, - 0x006a, 0x003f, 0x003f, 0x003f, 0x0047, 0x0067, 0x003f, 0x003f, - 0x004e, 0x006e, 0x0041, 0x0061, 0x0041, 0x0061, 0x004f, 0x006f, - /* 0x0200 .. 0x02ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0053, 0x0073, 0x0054, 0x0074, 0x003f, 0x003f, 0x0048, 0x0068, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, - 0x0045, 0x0065, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0068, 0x003f, 0x006a, 0x0072, 0x003f, 0x003f, 0x003f, 0x0077, - 0x0079, 0x814c, 0x818d, 0x8165, 0x8166, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x005e, 0x0076, - 0x0027, 0x815c, 0x814c, 0x0060, 0x003f, 0x005f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x818b, 0x003f, 0x007e, 0x818d, 0x003f, 0x003f, - 0x003f, 0x006c, 0x0073, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0300 .. 0x03ff */ - 0x0060, 0x814c, 0x005e, 0x007e, 0x815c, 0x815c, 0x003f, 0x003f, - 0x814e, 0x003f, 0x818b, 0x818d, 0x0076, 0x003f, 0x0022, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x002c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x005f, 0x005f, 0x005f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0060, 0x814c, 0x003f, 0x003f, 0x814e, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x814c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x814c, 0x814e, 0x839f, 0x003f, - 0x83a3, 0x83a5, 0x83a7, 0x003f, 0x83ad, 0x003f, 0x83b2, 0x83b6, - 0x83c7, 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, 0x83a4, 0x83a5, - 0x83a6, 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, 0x83ac, 0x83ad, - 0x83ae, 0x83af, 0x003f, 0x83b0, 0x83b1, 0x83b2, 0x83b3, 0x83b4, - 0x83b5, 0x83b6, 0x83a7, 0x83b2, 0x83bf, 0x83c3, 0x83c5, 0x83c7, - 0x83d2, 0x83bf, 0x83c0, 0x83c1, 0x83c2, 0x83c3, 0x83c4, 0x83c5, - 0x83c6, 0x83c7, 0x83c8, 0x83c9, 0x83ca, 0x83cb, 0x83cc, 0x83cd, - 0x83ce, 0x83cf, 0x003f, 0x83d0, 0x83d1, 0x83d2, 0x83d3, 0x83d4, - 0x83d5, 0x83d6, 0x83c7, 0x83d2, 0x83cd, 0x83d2, 0x83d6, 0x003f, - 0x83c0, 0x83c6, 0x83b2, 0x83b2, 0x83b2, 0x83d3, 0x83ce, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x83c8, 0x83cf, 0x003f, 0x003f, 0x83a6, 0x83c3, 0x003f, 0x003f, - 0x003f, 0x83b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0400 .. 0x04ff */ - 0x8445, 0x8446, 0x003f, 0x8443, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x844b, 0x8449, 0x8454, 0x003f, - 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, - 0x8449, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f, 0x8450, - 0x8451, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8457, 0x8458, - 0x8459, 0x845a, 0x845b, 0x845c, 0x845d, 0x845e, 0x845f, 0x8460, - 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8477, 0x8478, - 0x8479, 0x847a, 0x847b, 0x847c, 0x847d, 0x847e, 0x8480, 0x8481, - 0x8482, 0x8483, 0x8484, 0x8485, 0x8486, 0x8487, 0x8488, 0x8489, - 0x848a, 0x848b, 0x848c, 0x848d, 0x848e, 0x848f, 0x8490, 0x8491, - 0x8475, 0x8476, 0x003f, 0x8473, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x847b, 0x8479, 0x8485, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8447, 0x8477, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8440, 0x8470, 0x8440, 0x8470, 0x003f, 0x003f, 0x8445, 0x8475, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8447, 0x8477, 0x8448, 0x8478, - 0x003f, 0x003f, 0x8449, 0x8479, 0x8449, 0x8479, 0x844f, 0x8480, - 0x003f, 0x003f, 0x003f, 0x003f, 0x845e, 0x848f, 0x8454, 0x8485, - 0x8454, 0x8485, 0x8454, 0x8485, 0x8458, 0x8489, 0x003f, 0x003f, - 0x845c, 0x848d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1d00 .. 0x1dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0041, 0x0042, 0x003f, - 0x0044, 0x0045, 0x003f, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, - 0x004c, 0x004d, 0x004e, 0x003f, 0x004f, 0x003f, 0x0050, 0x0052, - 0x0054, 0x0055, 0x0057, 0x0061, 0x003f, 0x003f, 0x003f, 0x0062, - 0x0064, 0x0065, 0x003f, 0x003f, 0x003f, 0x0067, 0x003f, 0x006b, - 0x006d, 0x003f, 0x006f, 0x003f, 0x003f, 0x003f, 0x0070, 0x0074, - 0x0075, 0x003f, 0x003f, 0x0076, 0x003f, 0x83c0, 0x83c1, 0x83c2, - 0x83d3, 0x83d4, 0x0069, 0x0072, 0x0075, 0x0076, 0x83c0, 0x83c1, - 0x83cf, 0x83d3, 0x83d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x847e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0063, 0x003f, 0x0064, 0x003f, - 0x0066, 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, 0x003f, 0x003f, 0x83c6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1e00 .. 0x1eff */ - 0x0041, 0x0061, 0x0042, 0x0062, 0x0042, 0x0062, 0x0042, 0x0062, - 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0046, 0x0066, - 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0048, 0x0068, 0x0048, 0x0068, 0x0049, 0x0069, 0x0049, 0x0069, - 0x004b, 0x006b, 0x004b, 0x006b, 0x004b, 0x006b, 0x004c, 0x006c, - 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x004d, 0x006d, - 0x004d, 0x006d, 0x004d, 0x006d, 0x004e, 0x006e, 0x004e, 0x006e, - 0x004e, 0x006e, 0x004e, 0x006e, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0050, 0x0070, 0x0050, 0x0070, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0054, 0x0074, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0056, 0x0076, 0x0056, 0x0076, - 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, - 0x0057, 0x0077, 0x0058, 0x0078, 0x0058, 0x0078, 0x0059, 0x0079, - 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0068, 0x0074, - 0x0077, 0x0079, 0x003f, 0x0073, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0059, 0x0079, 0x0059, 0x0079, 0x0059, 0x0079, - 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1f00 .. 0x1fff */ - 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, - 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, - 0x83c3, 0x83c3, 0x83c3, 0x83c3, 0x83c3, 0x83c3, 0x003f, 0x003f, - 0x83a3, 0x83a3, 0x83a3, 0x83a3, 0x83a3, 0x83a3, 0x003f, 0x003f, - 0x83c5, 0x83c5, 0x83c5, 0x83c5, 0x83c5, 0x83c5, 0x83c5, 0x83c5, - 0x83a5, 0x83a5, 0x83a5, 0x83a5, 0x83a5, 0x83a5, 0x83a5, 0x83a5, - 0x83c7, 0x83c7, 0x83c7, 0x83c7, 0x83c7, 0x83c7, 0x83c7, 0x83c7, - 0x83a7, 0x83a7, 0x83a7, 0x83a7, 0x83a7, 0x83a7, 0x83a7, 0x83a7, - 0x83cd, 0x83cd, 0x83cd, 0x83cd, 0x83cd, 0x83cd, 0x003f, 0x003f, - 0x83ad, 0x83ad, 0x83ad, 0x83ad, 0x83ad, 0x83ad, 0x003f, 0x003f, - 0x83d2, 0x83d2, 0x83d2, 0x83d2, 0x83d2, 0x83d2, 0x83d2, 0x83d2, - 0x003f, 0x83b2, 0x003f, 0x83b2, 0x003f, 0x83b2, 0x003f, 0x83b2, - 0x83d6, 0x83d6, 0x83d6, 0x83d6, 0x83d6, 0x83d6, 0x83d6, 0x83d6, - 0x83b6, 0x83b6, 0x83b6, 0x83b6, 0x83b6, 0x83b6, 0x83b6, 0x83b6, - 0x83bf, 0x83bf, 0x83c3, 0x83c3, 0x83c5, 0x83c5, 0x83c7, 0x83c7, - 0x83cd, 0x83cd, 0x83d2, 0x83d2, 0x83d6, 0x83d6, 0x003f, 0x003f, - 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, - 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, - 0x83c5, 0x83c5, 0x83c5, 0x83c5, 0x83c5, 0x83c5, 0x83c5, 0x83c5, - 0x83a5, 0x83a5, 0x83a5, 0x83a5, 0x83a5, 0x83a5, 0x83a5, 0x83a5, - 0x83d6, 0x83d6, 0x83d6, 0x83d6, 0x83d6, 0x83d6, 0x83d6, 0x83d6, - 0x83b6, 0x83b6, 0x83b6, 0x83b6, 0x83b6, 0x83b6, 0x83b6, 0x83b6, - 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x83bf, 0x003f, 0x83bf, 0x83bf, - 0x839f, 0x839f, 0x839f, 0x839f, 0x839f, 0x003f, 0x83c7, 0x003f, - 0x003f, 0x814e, 0x83c5, 0x83c5, 0x83c5, 0x003f, 0x83c5, 0x83c5, - 0x83a3, 0x83a3, 0x83a5, 0x83a5, 0x83a5, 0x003f, 0x003f, 0x003f, - 0x83c7, 0x83c7, 0x83c7, 0x83c7, 0x003f, 0x003f, 0x83c7, 0x83c7, - 0x83a7, 0x83a7, 0x83a7, 0x83a7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x83d2, 0x83d2, 0x83d2, 0x83d2, 0x83cf, 0x83cf, 0x83d2, 0x83d2, - 0x83b2, 0x83b2, 0x83b2, 0x83b2, 0x83af, 0x814e, 0x814e, 0x0060, - 0x003f, 0x003f, 0x83d6, 0x83d6, 0x83d6, 0x003f, 0x83d6, 0x83d6, - 0x83ad, 0x83ad, 0x83b6, 0x83b6, 0x83b6, 0x814c, 0x003f, 0x003f, - /* 0x2000 .. 0x20ff */ - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x815d, 0x815d, 0x003f, 0x815c, 0x815c, 0x815c, 0x003f, 0x005f, - 0x8165, 0x8166, 0x002c, 0x8165, 0x8167, 0x8168, 0x8781, 0x003f, - 0x81f5, 0x81f6, 0x003f, 0x003f, 0x002e, 0x8164, 0x8163, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0x81f1, 0x003f, 0x818c, 0x818d, 0x003f, 0x8165, 0x003f, 0x003f, - 0x003f, 0x8171, 0x8172, 0x81a6, 0x0021, 0x003f, 0x815c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x002f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x818b, 0x0069, 0x003f, 0x003f, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0x815d, 0x003d, 0x0028, 0x0029, 0x006e, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0x815d, 0x003d, 0x0028, 0x0029, 0x003f, - 0x0061, 0x0065, 0x006f, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0063, 0x003f, 0x003f, 0x004c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2100 .. 0x21ff */ - 0x003f, 0x003f, 0x0043, 0x818e, 0x003f, 0x003f, 0x003f, 0x0045, - 0x003f, 0x003f, 0x0067, 0x0048, 0x0048, 0x0048, 0x0068, 0x0068, - 0x0049, 0x0049, 0x004c, 0x006c, 0x003f, 0x004e, 0x8782, 0x003f, - 0x0050, 0x0050, 0x0051, 0x0052, 0x0052, 0x0052, 0x003f, 0x003f, - 0x003f, 0x8784, 0x003f, 0x003f, 0x005a, 0x003f, 0x83b6, 0x003f, - 0x005a, 0x003f, 0x004b, 0x81f0, 0x0042, 0x0043, 0x0065, 0x0065, - 0x0045, 0x0046, 0x003f, 0x004d, 0x006f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0069, 0x003f, 0x003f, 0x83ce, 0x83c1, 0x83a1, 0x83ae, - 0x8794, 0x003f, 0x003f, 0x003f, 0x003f, 0x0044, 0x0064, 0x0065, - 0x0069, 0x006a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, 0x875a, 0x875b, - 0x875c, 0x875d, 0x003f, 0x003f, 0x004c, 0x0043, 0x0044, 0x004d, - 0xeeef, 0xeef0, 0xeef1, 0xeef2, 0xeef3, 0xeef4, 0xeef5, 0xeef6, - 0xeef7, 0xeef8, 0x003f, 0x003f, 0x006c, 0x0063, 0x0064, 0x006d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x81a9, 0x81aa, 0x81a8, 0x81ab, 0x002d, 0x007c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x81a9, 0x81a8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x002d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x81cc, 0x81cb, - 0x003f, 0x003f, 0x81cb, 0x003f, 0x81cc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2200 .. 0x22ff */ - 0x81cd, 0x003f, 0x81dd, 0x81ce, 0x81ce, 0x004f, 0x003f, 0x81de, - 0x81b8, 0x81b8, 0x003f, 0x81b9, 0x81b9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8794, 0x815d, 0x817d, 0x003f, 0x002f, 0x005c, 0x002a, - 0x818b, 0x003f, 0x81e3, 0x003f, 0x003f, 0x81e5, 0x8187, 0x8798, - 0x81da, 0x003f, 0x003f, 0x007c, 0x007c, 0x8161, 0x8161, 0x81c8, - 0x81c9, 0x81bf, 0x81be, 0x81e7, 0x81e8, 0x003f, 0x8793, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8188, 0x81e6, 0x003a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x007e, 0x81e4, 0x003f, 0x003f, - 0x003f, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x007e, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x81e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8182, 0x81df, 0x81df, 0x81df, 0x003f, 0x003f, 0x8185, 0x8186, - 0x003f, 0x003f, 0x81e1, 0x81e2, 0x003f, 0x003f, 0x003c, 0x003e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x81bc, 0x81bd, 0x81bc, 0x81bd, 0x81ba, 0x81bb, - 0x81ba, 0x81bb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x81db, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8799, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2300 .. 0x23ff */ - 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x81dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8171, 0x8172, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2400 .. 0x24ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x8747, - 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, 0x874d, 0x874e, 0x874f, - 0x8750, 0x8751, 0x8752, 0x8753, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, - 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, - 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, - 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, - 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x0030, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2500 .. 0x25ff */ - 0x849f, 0x84aa, 0x84a0, 0x84ab, 0x002d, 0x002d, 0x007c, 0x007c, - 0x002d, 0x002d, 0x007c, 0x007c, 0x84a1, 0x84a1, 0x84a1, 0x84ac, - 0x84a2, 0x84a2, 0x84a2, 0x84ad, 0x84a4, 0x84a4, 0x84a4, 0x84af, - 0x84a3, 0x84a3, 0x84a3, 0x84ae, 0x84a5, 0x84ba, 0x84a5, 0x84a5, - 0x84b5, 0x84a5, 0x84a5, 0x84b0, 0x84a7, 0x84bc, 0x84a7, 0x84a7, - 0x84b7, 0x84a7, 0x84a7, 0x84b2, 0x84a6, 0x84a6, 0x84a6, 0x84b6, - 0x84bb, 0x84a6, 0x84a6, 0x84b1, 0x84a8, 0x84a8, 0x84a8, 0x84b8, - 0x84bd, 0x84a8, 0x84a8, 0x84b3, 0x84a9, 0x84a9, 0x84a9, 0x84b9, - 0x84a9, 0x84a9, 0x84be, 0x84a9, 0x84a9, 0x84a9, 0x84a9, 0x84a9, - 0x84a9, 0x84a9, 0x84a9, 0x84b4, 0x002d, 0x002d, 0x007c, 0x007c, - 0x003d, 0x007c, 0x002b, 0x002b, 0x002b, 0x003f, 0x003f, 0x003f, - 0x004c, 0x004c, 0x004c, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, - 0x002b, 0x002b, 0x002b, 0x002b, 0x0054, 0x0054, 0x0054, 0x002b, - 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x003f, 0x003f, 0x003f, - 0x003f, 0x002f, 0x005c, 0x0058, 0x002d, 0x007c, 0x002d, 0x007c, - 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x81a1, 0x81a0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x81a3, 0x81a2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x81a5, 0x81a4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x819f, 0x819e, - 0x003f, 0x003f, 0x003f, 0x819b, 0x003f, 0x003f, 0x819d, 0x819c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x81fc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2600 .. 0x26ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x819a, 0x8199, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x818a, 0x003f, 0x8189, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x81f4, 0x003f, 0x003f, 0x81f3, 0x003f, 0x81f2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2e00 .. 0x2eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x95ea, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2f00 .. 0x2fff */ - 0x88ea, 0xed4c, 0x98a4, 0x98a6, 0x89b3, 0x98ab, 0x93f1, 0x98b3, - 0x906c, 0x9958, 0x93fc, 0x94aa, 0x9963, 0x996b, 0x9971, 0x997b, - 0x9981, 0x9381, 0x97cd, 0x99af, 0x99b6, 0x99b7, 0x99bc, 0x8f5c, - 0x966d, 0x99c5, 0x99ca, 0x99d1, 0x9694, 0x8cfb, 0x9a98, 0x9379, - 0x8e6d, 0x9ae7, 0x9ae8, 0x975b, 0x91e5, 0x8f97, 0x8e71, 0x9b7e, - 0x90a1, 0x8fac, 0x9b97, 0x9b99, 0x9ba3, 0x8e52, 0x9bdd, 0x8d48, - 0x8cc8, 0x8bd0, 0x8ab1, 0x9bf4, 0x9bf6, 0x9c4d, 0x9c4f, 0x9c54, - 0x8b7c, 0x003f, 0x9c63, 0x9c65, 0x9053, 0x9cf7, 0x003f, 0x8ee8, - 0x8e78, 0x9dbb, 0x95b6, 0x936c, 0x8bd2, 0x95fb, 0x9dd9, 0x93fa, - 0x9e48, 0x8c8e, 0x96d8, 0x8c87, 0x8e7e, 0x9f65, 0x9f74, 0x9f78, - 0x94e4, 0x96d1, 0x8e81, 0x9f83, 0x9085, 0x89ce, 0x92dc, 0x9583, - 0xe0a9, 0xe0ab, 0x95d0, 0x89e5, 0x8b8d, 0x8ca2, 0x8cba, 0x8bca, - 0x895a, 0x8aa2, 0x8ac3, 0x90b6, 0x9770, 0x9363, 0x9544, 0x003f, - 0xe1a0, 0x9492, 0x94e7, 0x8e4d, 0x96da, 0x96b5, 0x96ee, 0x90ce, - 0x8ea6, 0x003f, 0x89d1, 0x8c8a, 0x97a7, 0x927c, 0x95c4, 0x8e85, - 0x8aca, 0xe3a4, 0x9772, 0x8948, 0x9856, 0x8ea7, 0xe3ce, 0x8ea8, - 0xe3e4, 0x93f7, 0x9062, 0x8ea9, 0x8e8a, 0x8950, 0x90e3, 0x9143, - 0x8f4d, 0x8daf, 0x9046, 0xe487, 0xe567, 0x928e, 0x8c8c, 0x8d73, - 0x88df, 0xe647, 0x8ca9, 0x8a70, 0x8cbe, 0x924a, 0x93a4, 0xe6b3, - 0xe6b6, 0x8a4c, 0x90d4, 0x9196, 0x91ab, 0x9067, 0x8ed4, 0x9068, - 0x9243, 0x003f, 0x9757, 0x93d1, 0x94ce, 0x97a2, 0x8be0, 0x92b7, - 0x96e5, 0x958c, 0xe8ae, 0xe8b0, 0x894a, 0xeed6, 0x94f1, 0x96ca, - 0x8a76, 0xe8e8, 0xe8ea, 0x89b9, 0x95c5, 0x9597, 0x94f2, 0x9048, - 0x8ef1, 0x8d81, 0x946e, 0x8d9c, 0x8d82, 0xe995, 0xe9a6, 0xe9ac, - 0xe9ad, 0x8b53, 0x8b9b, 0x92b9, 0xea62, 0x8ead, 0xea6d, 0x9683, - 0x003f, 0x8b6f, 0xeeec, 0xea83, 0xea86, 0x9343, 0x8cdb, 0x916c, - 0x9540, 0xea8e, 0xea8f, 0x97b4, 0xea9d, 0xea9e, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3000 .. 0x30ff */ - 0x8140, 0x8141, 0x8142, 0x8156, 0x003f, 0x8158, 0x8159, 0x815a, - 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, - 0x8179, 0x817a, 0x81a7, 0x81ac, 0x816b, 0x816c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x005b, 0x005d, 0x003f, 0x8780, 0x8168, 0x8781, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x81a7, 0x003f, - 0x8f5c, 0x003f, 0x99bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x829f, 0x82a0, 0x82a1, 0x82a2, 0x82a3, 0x82a4, 0x82a5, - 0x82a6, 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, - 0x82ae, 0x82af, 0x82b0, 0x82b1, 0x82b2, 0x82b3, 0x82b4, 0x82b5, - 0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0x82bb, 0x82bc, 0x82bd, - 0x82be, 0x82bf, 0x82c0, 0x82c1, 0x82c2, 0x82c3, 0x82c4, 0x82c5, - 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0x82ca, 0x82cb, 0x82cc, 0x82cd, - 0x82ce, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0x82d3, 0x82d4, 0x82d5, - 0x82d6, 0x82d7, 0x82d8, 0x82d9, 0x82da, 0x82db, 0x82dc, 0x82dd, - 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, 0x82e3, 0x82e4, 0x82e5, - 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82eb, 0x82ec, 0x82ed, - 0x82ee, 0x82ef, 0x82f0, 0x82f1, 0x82a4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x814a, 0x814b, 0x8154, 0x8155, 0x003f, - 0x003f, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, - 0x8347, 0x8348, 0x8349, 0x834a, 0x834b, 0x834c, 0x834d, 0x834e, - 0x834f, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, - 0x8357, 0x8358, 0x8359, 0x835a, 0x835b, 0x835c, 0x835d, 0x835e, - 0x835f, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, - 0x8367, 0x8368, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d, 0x836e, - 0x836f, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, - 0x8377, 0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, 0x837e, - 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, - 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, 0x838d, 0x838e, 0x838f, - 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396, 0x838f, - 0x8390, 0x8391, 0x8392, 0x8145, 0x815b, 0x8152, 0x8153, 0x003f, - /* 0x3100 .. 0x31ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x88ea, 0x93f1, 0x8e4f, 0x8e6c, 0x8fe3, 0x9286, - 0x89ba, 0x8d62, 0x89b3, 0x95b8, 0x929a, 0x9356, 0x926e, 0x906c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3200 .. 0x32ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x878a, 0x878b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x878c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x88ea, 0x93f1, 0x8e4f, 0x8e6c, 0x8cdc, 0x985a, 0x8eb5, 0x94aa, - 0x8be3, 0x8f5c, 0x8c8e, 0x89ce, 0x9085, 0x96d8, 0x8be0, 0x9379, - 0x93fa, 0x8a94, 0x974c, 0x8ed0, 0x96bc, 0x93c1, 0x8de0, 0x8f6a, - 0x984a, 0x94e9, 0x926a, 0x8f97, 0x934b, 0x9744, 0x88f3, 0x928d, - 0x8d80, 0x8b78, 0x8eca, 0x90b3, 0x8785, 0x8786, 0x8787, 0x8788, - 0x8789, 0x88e3, 0x8f40, 0x8a77, 0x8ac4, 0x8ae9, 0x8e91, 0x8ba6, - 0x96e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8341, 0x8343, 0x8345, 0x8347, 0x8349, 0x834a, 0x834c, 0x834e, - 0x8350, 0x8352, 0x8354, 0x8356, 0x8358, 0x835a, 0x835c, 0x835e, - 0x8360, 0x8363, 0x8365, 0x8367, 0x8369, 0x836a, 0x836b, 0x836c, - 0x836d, 0x836e, 0x8371, 0x8374, 0x8377, 0x837a, 0x837d, 0x837e, - 0x8380, 0x8381, 0x8382, 0x8384, 0x8386, 0x8388, 0x8389, 0x838a, - 0x838b, 0x838c, 0x838d, 0x838f, 0x8390, 0x8391, 0x8392, 0x003f, - /* 0x3300 .. 0x33ff */ - 0x003f, 0x003f, 0x003f, 0x8765, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8769, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8760, 0x003f, 0x003f, 0x003f, - 0x8763, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8761, 0x876b, 0x003f, 0x003f, 0x876a, 0x8764, - 0x003f, 0x003f, 0x003f, 0x876c, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8766, 0x003f, - 0x003f, 0x003f, 0x003f, 0x876e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x875f, 0x876d, 0x003f, 0x003f, 0x8762, 0x003f, 0x003f, - 0x003f, 0x8767, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8768, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x877e, 0x878f, 0x878e, 0x878d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8772, 0x8773, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x876f, 0x8770, 0x8771, 0x003f, - 0x003f, 0x8775, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8774, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8783, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x4e00 .. 0x4eff */ - 0x88ea, 0x929a, 0x003f, 0x8eb5, 0x003f, 0x003f, 0x003f, 0x969c, - 0x8fe4, 0x8e4f, 0x8fe3, 0x89ba, 0x003f, 0x9573, 0x975e, 0x003f, - 0x98a0, 0x894e, 0x003f, 0x003f, 0x8a8e, 0x98a1, 0x90a2, 0x99c0, - 0x8b75, 0x95b8, 0x003f, 0x003f, 0x003f, 0x003f, 0x8fe5, 0x003f, - 0x003f, 0x97bc, 0x003f, 0x003f, 0x003f, 0x003f, 0x95c0, 0x003f, - 0xed4c, 0x003f, 0x98a2, 0x003f, 0x003f, 0x9286, 0x003f, 0x003f, - 0x003f, 0x98a3, 0x8bf8, 0x003f, 0x003f, 0x003f, 0x98a4, 0x003f, - 0x8adb, 0x924f, 0x003f, 0x8ee5, 0x98a5, 0x003f, 0x003f, 0x98a6, - 0x003f, 0x003f, 0x98a7, 0x9454, 0x003f, 0x8b76, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9456, 0x003f, 0x93e1, 0x8cc1, 0x9652, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe568, 0x98a8, 0x8fe6, - 0x98a9, 0x89b3, 0x003f, 0x003f, 0x003f, 0x8be3, 0x8cee, 0x96e7, - 0x003f, 0x003f, 0x9ba4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9790, 0x003f, 0x93fb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8aa3, 0x003f, - 0x8b54, 0x003f, 0x98aa, 0x003f, 0x003f, 0x98ab, 0x97b9, 0x003f, - 0x975c, 0x9188, 0x98ad, 0x8e96, 0x93f1, 0x003f, 0x98b0, 0x003f, - 0x003f, 0x895d, 0x8cdd, 0x003f, 0x8cdc, 0x88e4, 0x003f, 0x003f, - 0x986a, 0x9869, 0x003f, 0x8db1, 0x889f, 0x003f, 0x98b1, 0x98b2, - 0x98b3, 0x9653, 0x98b4, 0x003f, 0x8cf0, 0x88e5, 0x9692, 0x003f, - 0x8b9c, 0x003f, 0x003f, 0x8b9d, 0x8b9e, 0x92e0, 0x97ba, 0x003f, - 0x98b5, 0x003f, 0x003f, 0x98b6, 0x003f, 0x003f, 0x98b7, 0x003f, - 0x003f, 0x003f, 0x906c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8f59, 0x906d, 0x98bc, 0x003f, 0x98ba, 0x003f, 0x98bb, 0x8b77, - 0x003f, 0x003f, 0x8da1, 0x89ee, 0x003f, 0x98b9, 0x98b8, 0x95a7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8e65, 0x8e64, 0x91bc, 0x98bd, - 0x9574, 0x90e5, 0x003f, 0x003f, 0x003f, 0x8157, 0x98be, 0x98c0, - 0x003f, 0xed4d, 0x003f, 0x91e3, 0x97df, 0x88c8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x98bf, 0x89bc, 0x003f, - 0x8bc2, 0x003f, 0x9287, 0x003f, 0x003f, 0x003f, 0x8c8f, 0x98c1, - 0x003f, 0x003f, 0x003f, 0x9443, 0xed4e, 0x003f, 0x003f, 0x003f, - /* 0x4f00 .. 0x4fff */ - 0xed4f, 0x8ae9, 0x003f, 0xed50, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x98c2, 0x88c9, 0x003f, 0x003f, 0x8cde, 0x8aea, 0x959a, - 0x94b0, 0x8b78, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x89ef, 0x003f, 0x98e5, 0x9360, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x948c, - 0x98c4, 0x003f, 0x003f, 0x003f, 0x94ba, 0x003f, 0x97e0, 0x003f, - 0x904c, 0xed51, 0x8e66, 0x003f, 0x8e97, 0x89be, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x92cf, 0x003f, 0x003f, 0x9241, 0x98c8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x88ca, 0x92e1, 0x8f5a, - 0x8db2, 0x9743, 0x003f, 0x91cc, 0x003f, 0x89bd, 0xed52, 0x98c7, - 0x003f, 0x975d, 0x98c3, 0x98c5, 0x8dec, 0x98c6, 0x9b43, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x98ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x98d1, - 0x98cf, 0x003f, 0x003f, 0x89c0, 0x003f, 0x95b9, 0x98c9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x98cd, 0x8cf1, 0x003f, 0x003f, 0x8e67, - 0x003f, 0x003f, 0x003f, 0x8aa4, 0x003f, 0x003f, 0x98d2, 0x003f, - 0x98ca, 0x003f, 0xed54, 0x97e1, 0x003f, 0x8e98, 0x003f, 0x98cb, - 0x003f, 0x98d0, 0xed53, 0x003f, 0xed56, 0x003f, 0x98d3, 0x003f, - 0x98cc, 0x003f, 0xed55, 0x8b9f, 0x003f, 0x88cb, 0x003f, 0x003f, - 0x8ba0, 0x89bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9b44, 0x003f, 0x9699, 0x958e, 0x8cf2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x904e, 0x97b5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x95d6, - 0x003f, 0x003f, 0x8c57, 0x91a3, 0x89e2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xed45, 0x8f72, 0x003f, 0x003f, 0xed57, 0x98d7, 0x003f, - 0x98dc, 0x98da, 0x003f, 0x003f, 0x98d5, 0x003f, 0x003f, 0x91ad, - 0x98d8, 0x003f, 0x98db, 0x98d9, 0x003f, 0x95db, 0x003f, 0x98d6, - 0x003f, 0x904d, 0x003f, 0x9693, 0x98dd, 0x98de, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f43, 0x98eb, - 0x003f, 0x003f, 0x003f, 0x946f, 0x003f, 0x9555, 0x98e6, 0x003f, - 0x95ee, 0x003f, 0x89b4, 0x003f, 0x003f, 0x003f, 0x98ea, 0xed5a, - /* 0x5000 .. 0x50ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x98e4, 0x98ed, 0x003f, - 0x003f, 0x9171, 0x003f, 0x8cc2, 0x003f, 0x947b, 0x003f, 0xe0c5, - 0x003f, 0x98ec, 0x937c, 0x003f, 0x98e1, 0x003f, 0x8cf4, 0x003f, - 0x003f, 0x8cf3, 0x98df, 0x003f, 0x003f, 0x003f, 0xed5b, 0x8ed8, - 0x003f, 0x98e7, 0xed59, 0x95ed, 0x926c, 0x98e3, 0x8c91, 0x003f, - 0x98e0, 0x98e8, 0x98e2, 0x97cf, 0x98e9, 0x9860, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8be4, 0x003f, - 0x003f, 0x8c90, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xed58, 0x003f, 0xed5e, 0x98ee, 0x003f, 0x003f, 0xed5c, 0x98ef, - 0x98f3, 0x88cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x95ce, - 0x98f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x98f1, 0x98f5, 0x003f, - 0x003f, 0x003f, 0x98f4, 0x003f, 0x92e2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c92, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x98f6, 0x003f, 0x003f, 0x003f, - 0xed5d, 0x003f, 0x8ec3, 0x003f, 0x91a4, 0x92e3, 0x8bf4, 0x003f, - 0x98f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x8b55, 0x003f, 0x003f, - 0x98f8, 0x003f, 0x003f, 0x003f, 0x003f, 0x98fa, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9654, 0x003f, 0x003f, - 0x003f, 0x8c86, 0x003f, 0x003f, 0xed5f, 0x003f, 0x003f, 0x003f, - 0x8e50, 0x94f5, 0x98f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8dc3, 0x9762, 0x003f, 0x003f, - 0x003f, 0x003f, 0x98fc, 0x9942, 0x98fb, 0x8dc2, 0x003f, 0x8f9d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c58, 0x003f, - 0x003f, 0x003f, 0x9943, 0x003f, 0x003f, 0x8bcd, 0x003f, 0x003f, - 0x003f, 0x9940, 0x9941, 0x003f, 0x003f, 0x93ad, 0x003f, 0x919c, - 0x003f, 0x8ba1, 0x003f, 0x003f, 0x003f, 0x966c, 0x9944, 0x003f, - 0xed61, 0x003f, 0x97bb, 0x003f, 0x003f, 0x003f, 0x9945, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9948, 0x003f, 0x9946, 0x003f, 0x916d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9947, 0x9949, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xed60, 0x994b, 0x003f, 0x003f, - 0x003f, 0x994a, 0x003f, 0x95c6, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5100 .. 0x51ff */ - 0x8b56, 0x994d, 0x994e, 0x003f, 0x89ad, 0x003f, 0x003f, 0x003f, - 0x003f, 0x994c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8ef2, 0x003f, 0x9951, 0x9950, 0x994f, 0x003f, - 0x98d4, 0x003f, 0x9952, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f9e, - 0x003f, 0x9953, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9744, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x96d7, 0x003f, 0x003f, 0x003f, 0x003f, 0x9955, - 0x003f, 0x003f, 0x9954, 0x9957, 0x9956, 0x003f, 0x003f, 0x9958, - 0x9959, 0x88f2, 0x003f, 0x8cb3, 0x8c5a, 0x8f5b, 0x929b, 0x8ba2, - 0x90e6, 0x8cf5, 0xed62, 0x8d8e, 0x995b, 0x96c6, 0x9365, 0x003f, - 0x8e99, 0x003f, 0x995a, 0x003f, 0x995c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x937d, 0x003f, 0x8a95, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x995d, 0x003f, 0xed63, 0x93fc, 0x003f, 0x003f, - 0x9153, 0x995f, 0x9960, 0x94aa, 0x8cf6, 0x985a, 0x9961, 0x003f, - 0x003f, 0x8ba4, 0x003f, 0x003f, 0x003f, 0x95ba, 0x91b4, 0x8bef, - 0x9354, 0x003f, 0x003f, 0x003f, 0x8c93, 0x003f, 0x003f, 0x003f, - 0x9962, 0x003f, 0x9963, 0x003f, 0x003f, 0x93e0, 0x897e, 0x003f, - 0x003f, 0x9966, 0x8dfb, 0x003f, 0x9965, 0x8dc4, 0x003f, 0x9967, - 0xe3ec, 0x9968, 0x9660, 0x9969, 0x003f, 0x996a, 0x996b, 0x8fe7, - 0x003f, 0x8eca, 0x003f, 0x003f, 0x003f, 0xed64, 0x003f, 0x003f, - 0x8aa5, 0x003f, 0x996e, 0x003f, 0x996c, 0x96bb, 0x996d, 0x003f, - 0x9579, 0x996f, 0x9970, 0x9971, 0x937e, 0x003f, 0x003f, 0x003f, - 0x9975, 0x9973, 0x9974, 0x9972, 0x8de1, 0x9976, 0x96e8, 0x97e2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9977, 0xed65, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x90a6, 0x9978, 0x8f79, 0x003f, - 0x003f, 0x9979, 0x003f, 0x929c, 0x97bd, 0x9380, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x99c3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x997a, 0xeaa3, 0x8bc3, 0x003f, 0x003f, - 0x997b, 0x967d, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f88, 0x91fa, - 0x003f, 0x997d, 0x93e2, 0x003f, 0xed66, 0x997e, 0x003f, 0x003f, - 0x9980, 0x8a4d, 0x003f, 0x003f, 0x003f, 0x9981, 0x8ba5, 0x003f, - 0x93ca, 0x899a, 0x8f6f, 0x003f, 0x003f, 0x949f, 0x9982, 0x003f, - /* 0x5200 .. 0x52ff */ - 0x9381, 0x003f, 0x003f, 0x906e, 0x9983, 0x003f, 0x95aa, 0x90d8, - 0x8aa0, 0x003f, 0x8aa7, 0x9984, 0x003f, 0x003f, 0x9986, 0x003f, - 0x003f, 0x8c59, 0x003f, 0x003f, 0x9985, 0xed67, 0x003f, 0x97f1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f89, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x94bb, 0x95ca, 0x003f, 0x9987, - 0x003f, 0x9798, 0x9988, 0x003f, 0x003f, 0x003f, 0x9989, 0x003f, - 0x939e, 0x003f, 0x003f, 0x998a, 0x003f, 0x003f, 0x90a7, 0x8dfc, - 0x8c94, 0x998b, 0x8e68, 0x8d8f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x92e4, 0x998d, 0x003f, 0x003f, 0x91a5, - 0x003f, 0x003f, 0x8ded, 0x998e, 0x998f, 0x914f, 0x003f, 0x998c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9991, 0x003f, 0x9655, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8d84, 0x003f, 0x003f, 0x9990, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8c95, 0x8ddc, 0x948d, 0x003f, 0x003f, - 0x003f, 0x9994, 0x9992, 0x003f, 0x003f, 0x003f, 0x003f, 0x959b, - 0x8fe8, 0x999b, 0x8a84, 0x9995, 0x9993, 0x916e, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9997, 0x003f, 0x9996, - 0x003f, 0x003f, 0x003f, 0x8a63, 0x003f, 0x003f, 0x003f, 0x8c80, - 0x999c, 0x97ab, 0x003f, 0x003f, 0x003f, 0x9998, 0x003f, 0x003f, - 0x003f, 0x999d, 0x999a, 0x003f, 0x9999, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x97cd, 0xed68, 0x003f, 0x003f, 0x8cf7, - 0x89c1, 0x003f, 0x003f, 0x97f2, 0x003f, 0x003f, 0xed69, 0x003f, - 0x003f, 0x8f95, 0x9377, 0x8d85, 0x99a0, 0x99a1, 0x003f, 0xee5b, - 0x003f, 0x97e3, 0x003f, 0x003f, 0x984a, 0x99a3, 0x003f, 0x003f, - 0x003f, 0x8cf8, 0x003f, 0x003f, 0x99a2, 0x003f, 0x8a4e, 0x003f, - 0xed6a, 0x99a4, 0x003f, 0x9675, 0x003f, 0x92ba, 0x003f, 0x9745, - 0x003f, 0x95d7, 0x003f, 0x003f, 0x003f, 0x99a5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe8d3, 0x003f, 0x003f, 0x93ae, 0x003f, 0x99a6, - 0x8aa8, 0x96b1, 0x003f, 0xed6b, 0x003f, 0x8f9f, 0x99a7, 0x95e5, - 0x99ab, 0x003f, 0x90a8, 0x99a8, 0x8bce, 0x003f, 0x99a9, 0x8aa9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8c4d, 0x99ac, 0x003f, 0x99ad, 0x003f, 0x003f, - 0x99ae, 0x99af, 0x8ed9, 0x003f, 0x003f, 0x003f, 0x8cf9, 0x96dc, - /* 0x5300 .. 0x53ff */ - 0xed6c, 0x96e6, 0x93f5, 0x003f, 0x003f, 0x95ef, 0x99b0, 0xed6d, - 0x99b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x99b3, 0x003f, 0x99b5, - 0x99b4, 0x003f, 0x003f, 0x003f, 0x003f, 0x99b6, 0x89bb, 0x966b, - 0x003f, 0x8dfa, 0x99b7, 0x003f, 0x003f, 0x9178, 0x003f, 0x003f, - 0x8fa0, 0x8ba7, 0x003f, 0x99b8, 0xed6e, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x94d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x99b9, - 0x003f, 0x99ba, 0x003f, 0x99bb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x99bc, 0x9543, 0x8be6, 0x88e3, 0x003f, 0x003f, 0x003f, 0x93bd, - 0x99bd, 0x8f5c, 0x003f, 0x90e7, 0x003f, 0x99bf, 0x99be, 0x8fa1, - 0x8cdf, 0x99c1, 0x94bc, 0x003f, 0x003f, 0x99c2, 0x003f, 0x003f, - 0x003f, 0x94da, 0x91b2, 0x91ec, 0x8ba6, 0x003f, 0x003f, 0x93ec, - 0x9250, 0x003f, 0x948e, 0x003f, 0x966d, 0x003f, 0x99c4, 0x003f, - 0x90e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c54, 0x003f, - 0x003f, 0x99c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x99c6, 0x894b, - 0x88f3, 0x8aeb, 0xed6f, 0x91a6, 0x8b70, 0x9791, 0x003f, 0x99c9, - 0x89b5, 0x003f, 0x003f, 0x99c8, 0x003f, 0x003f, 0x003f, 0x8ba8, - 0x003f, 0x003f, 0x99ca, 0x003f, 0x96ef, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xed70, 0x003f, 0x003f, 0x99cb, 0x003f, - 0x97d0, 0x003f, 0x8cfa, 0x003f, 0x003f, 0x003f, 0x003f, 0x8cb4, - 0x99cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x99ce, 0x99cd, 0x003f, - 0x907e, 0x8958, 0x003f, 0x003f, 0x003f, 0x897d, 0x99cf, 0x003f, - 0x99d0, 0x003f, 0xed71, 0x8cb5, 0x003f, 0x003f, 0x99d1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8b8e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8e51, 0x99d2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9694, 0x8db3, 0x8b79, 0x9746, 0x916f, 0x94bd, 0x8efb, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8f66, 0x003f, 0x8ee6, 0x8ef3, - 0x003f, 0x8f96, 0x003f, 0x94be, 0x003f, 0xed72, 0x003f, 0x99d5, - 0x003f, 0x8962, 0x9170, 0x8cfb, 0x8cc3, 0x8be5, 0x003f, 0x003f, - 0x99d9, 0x9240, 0x91fc, 0x8ba9, 0x8fa2, 0x99da, 0x99d8, 0x89c2, - 0x91e4, 0x8eb6, 0x8e6a, 0x8945, 0x003f, 0x003f, 0x8a90, 0x8d86, - 0x8e69, 0x003f, 0x99db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5400 .. 0x54ff */ - 0x003f, 0x99dc, 0x003f, 0x8b68, 0x8a65, 0x003f, 0x003f, 0x003f, - 0x8d87, 0x8b67, 0x92dd, 0x8944, 0x93af, 0x96bc, 0x8d40, 0x9799, - 0x9366, 0x8cfc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8c4e, 0x003f, 0x99e5, 0x003f, 0x8be1, - 0x9669, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x94db, 0x003f, - 0x003f, 0x99e4, 0x003f, 0x8adc, 0x99df, 0x99e0, 0x99e2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x99e3, 0x003f, - 0x8b7a, 0x9081, 0x003f, 0x95ab, 0x99e1, 0x99dd, 0x8ce1, 0x003f, - 0x99de, 0x003f, 0x9843, 0x003f, 0x003f, 0x003f, 0x95f0, 0x003f, - 0x92e6, 0x8ce0, 0x8d90, 0x003f, 0x003f, 0x003f, 0x99e6, 0x003f, - 0x003f, 0x93db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x99ea, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8efc, 0x003f, 0x8ef4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x99ed, 0x99eb, 0x003f, 0x96a1, 0x003f, 0x99e8, 0x99f1, 0x99ec, - 0x003f, 0x003f, 0x003f, 0x99ef, 0x8cc4, 0x96bd, 0x003f, 0x003f, - 0x99f0, 0x003f, 0x003f, 0x003f, 0x99f2, 0x003f, 0x99f4, 0x003f, - 0x003f, 0x003f, 0xed75, 0x8dee, 0x9861, 0x003f, 0x99e9, 0x99e7, - 0x99f3, 0x003f, 0x99ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xed74, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x99f6, 0x003f, 0x9a42, 0x99f8, 0x003f, 0x003f, - 0x99fc, 0xed76, 0x003f, 0x9a40, 0x99f9, 0x003f, 0x003f, 0x9a5d, - 0x003f, 0x003f, 0x8de7, 0x8a50, 0x003f, 0x003f, 0x003f, 0x003f, - 0x99f7, 0x003f, 0x003f, 0x003f, 0x9a44, 0x88f4, 0x9a43, 0x003f, - 0x88a3, 0x9569, 0x9a41, 0x003f, 0x99fa, 0x003f, 0x003f, 0x99f5, - 0x99fb, 0x8dc6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9a45, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x88f5, 0x9a4e, 0x003f, 0x003f, 0x9a46, 0x9a47, 0x003f, - 0x8fa3, 0x9689, 0x003f, 0x003f, 0x003f, 0x9a4c, 0x9a4b, 0x003f, - 0x003f, 0x003f, 0x934e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9a4d, 0x003f, 0x003f, 0x9a4a, 0x003f, 0xed77, - /* 0x5500 .. 0x55ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x8953, 0x003f, 0x8db4, 0x904f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a48, - 0x9382, 0x003f, 0x003f, 0x003f, 0x9a49, 0x003f, 0x88a0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a53, 0x9742, - 0x003f, 0x8fa5, 0x003f, 0x9a59, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9a58, 0x9a4f, 0x003f, 0x003f, 0x003f, 0x003f, 0x91c1, 0x003f, - 0x9a50, 0x003f, 0x003f, 0x003f, 0x91ed, 0x9a55, 0x8fa4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a52, 0x003f, 0x003f, 0x96e2, - 0x003f, 0x003f, 0x003f, 0x8c5b, 0x003f, 0x003f, 0x9a56, 0x9a57, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a54, 0x9a5a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9a51, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9a60, 0x9a65, 0x003f, 0x9a61, 0x003f, - 0x9a5c, 0x003f, 0x003f, 0x9a66, 0x9150, 0x003f, 0xed78, 0x9a68, - 0x003f, 0x8d41, 0x9a5e, 0x929d, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9a62, 0x9a5b, 0x8aab, 0x003f, 0x8aec, 0x8a85, 0x9a63, 0x9a5f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c96, - 0x9a69, 0x9a67, 0x9172, 0x8b69, 0x8baa, 0x003f, 0x9a64, 0x003f, - 0x8bf2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8963, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a6d, 0x9a6b, 0x003f, 0x9aa5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a70, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9a6a, 0x003f, 0x9a6e, 0x003f, 0x003f, 0x9a6c, - 0x003f, 0x003f, 0x003f, 0x8e6b, 0x9a6f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a72, - 0x003f, 0x9a77, 0x003f, 0x003f, 0x003f, 0x9a75, 0x9a74, 0x003f, - /* 0x5600 .. 0x56ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9251, 0x003f, - 0x003f, 0x89c3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a71, 0x003f, 0x9a73, 0x8fa6, - 0x8952, 0x003f, 0x003f, 0x9a76, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x89dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a82, - 0x003f, 0x8ffa, 0x9a7d, 0x003f, 0x9a7b, 0x003f, 0x9a7c, 0x003f, - 0x9a7e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x895c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9158, 0x003f, 0x9a78, 0x003f, - 0x9a79, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8a9a, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a81, 0x003f, 0x003f, 0x003f, - 0x8aed, 0x003f, 0x9a84, 0x9a80, 0x9a83, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x95ac, 0x003f, 0x003f, 0x003f, - 0x93d3, 0x003f, 0x94b6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9a86, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a85, 0x8a64, - 0x003f, 0x003f, 0x9a87, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a8a, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a89, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9a88, 0x003f, 0x9458, 0x003f, 0x003f, 0x9a8b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a8c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a8e, 0x003f, 0x9a8d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9a90, 0x003f, 0x003f, 0x003f, - 0x9a93, 0x9a91, 0x9a8f, 0x9a92, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9a94, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a95, 0x003f, - 0x003f, 0x9a96, 0x003f, 0x9a97, 0x003f, 0x003f, 0x003f, 0x9a98, - 0x9964, 0x003f, 0x8efa, 0x8e6c, 0x003f, 0x003f, 0x89f1, 0x003f, - 0x88f6, 0x003f, 0x003f, 0x9263, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a99, 0x003f, - 0x8da2, 0x003f, 0x88cd, 0x907d, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9a9a, 0x8cc5, 0x003f, 0x003f, 0x8d91, 0x003f, 0x9a9c, - /* 0x5700 .. 0x57ff */ - 0x9a9b, 0x003f, 0x003f, 0x95de, 0x9a9d, 0x003f, 0x003f, 0x003f, - 0x9a9f, 0x9a9e, 0x003f, 0x9aa0, 0x003f, 0x9aa1, 0x003f, 0x8c97, - 0x003f, 0x003f, 0x8980, 0x9aa2, 0x003f, 0x003f, 0x9aa4, 0x003f, - 0x9aa3, 0x003f, 0x003f, 0x003f, 0x9aa6, 0x003f, 0x003f, 0x9379, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9aa7, 0x88b3, - 0x8ddd, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c5c, 0x003f, 0x003f, - 0x926e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9aa8, - 0x9aa9, 0x003f, 0x003f, 0x9aab, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9aac, 0x003f, 0x8de2, 0x003f, 0x003f, 0x003f, 0x003f, 0x8bcf, - 0x003f, 0x003f, 0x9656, 0x003f, 0x003f, 0x003f, 0x9aaa, 0x9aad, - 0x8dbf, 0x8d42, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xed79, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9ab1, 0x003f, 0x003f, 0x8da3, 0xed7a, 0x9252, 0x003f, - 0x003f, 0x9aae, 0x92d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9ab2, - 0x003f, 0x003f, 0x9082, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9ab0, 0x9ab3, 0x003f, 0x8c5e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9ab4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9ab5, 0x003f, 0x8d43, 0x8a5f, 0x9ab7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9ab8, 0x003f, 0xed7b, 0x003f, 0x003f, 0x003f, - 0x9ab9, 0x003f, 0x003f, 0x9ab6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9aaf, 0x003f, 0x003f, 0x9aba, 0x003f, 0x003f, 0x9abb, 0xed7d, - 0xed7c, 0x003f, 0x003f, 0x9684, 0x003f, 0x003f, 0x8fe9, 0x003f, - 0x003f, 0x003f, 0x9abd, 0x9abe, 0x9abc, 0x003f, 0x9ac0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9457, 0x003f, 0x003f, 0x88e6, - 0x9575, 0x003f, 0x003f, 0x9ac1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8ffb, 0x003f, 0x003f, 0x8eb7, - 0x003f, 0x947c, 0x8aee, 0x003f, 0x8de9, 0x003f, 0x003f, 0x003f, - /* 0x5800 .. 0x58ff */ - 0x9678, 0x003f, 0x93b0, 0x003f, 0x003f, 0x8c98, 0x91cd, 0x003f, - 0x003f, 0x003f, 0x9abf, 0x9ac2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x91c2, 0x003f, 0x003f, - 0x003f, 0x9ac3, 0x003f, 0x003f, 0x003f, 0x9ac4, 0x003f, 0x003f, - 0x003f, 0x9ac6, 0x003f, 0x003f, 0x92e7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8aac, 0x003f, 0x003f, 0x003f, 0x003f, 0xea9f, - 0x8981, 0x95f1, 0x003f, 0x003f, 0x8fea, 0x9367, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8de4, 0x003f, 0x003f, 0x9acc, 0x003f, 0x003f, - 0x95bb, 0x97db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x89f2, 0x9ac8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9159, 0x9acb, 0x003f, 0x9383, 0x003f, 0x003f, 0x9368, - 0x9384, 0x94b7, 0x92cb, 0x003f, 0x003f, 0x003f, 0x8dc7, 0x003f, - 0x003f, 0x003f, 0x9ac7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8996, 0x003f, 0x9355, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9ac9, 0x003f, 0x9ac5, 0x003f, 0x003f, 0x906f, 0x003f, 0x003f, - 0x003f, 0x9acd, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f6d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8bab, 0x003f, 0x9ace, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x95e6, 0x003f, 0x003f, 0x003f, 0x919d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x92c4, 0x003f, 0xed81, 0x9ad0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x966e, 0x003f, 0x003f, 0x9ad1, 0x003f, 0x003f, 0x9ad6, 0x003f, - 0x003f, 0x003f, 0xed82, 0x95ad, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9ad5, 0x9acf, 0x9ad2, 0x9ad4, 0x003f, 0x003f, 0x8da4, 0x003f, - 0x003f, 0x95c7, 0x003f, 0x003f, 0x003f, 0x9ad7, 0x003f, 0x9264, - 0x003f, 0x003f, 0x89f3, 0x003f, 0x8feb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9ad9, 0x003f, 0x9ad8, 0x003f, 0x8d88, 0x003f, 0x9ada, - 0x9adc, 0x9adb, 0x003f, 0x003f, 0x9ade, 0x003f, 0x9ad3, 0x9ae0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9adf, 0x9add, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8e6d, 0x9070, 0x003f, 0x9173, 0x9ae1, - 0x90ba, 0x88eb, 0x9484, 0x003f, 0x003f, 0x003f, 0x003f, 0x92d9, - 0x003f, 0x9ae3, 0x9ae2, 0x9ae4, 0x9ae5, 0x9ae6, 0x003f, 0x003f, - /* 0x5900 .. 0x59ff */ - 0x003f, 0x003f, 0x9ae7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x95cf, 0x9ae8, 0xed83, 0x003f, 0x003f, 0x003f, 0x89c4, - 0x9ae9, 0x003f, 0x003f, 0x003f, 0x003f, 0x975b, 0x8a4f, 0x003f, - 0x99c7, 0x8f67, 0x91bd, 0x9aea, 0x96e9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x96b2, 0x003f, 0x003f, 0x9aec, 0x003f, 0x91e5, - 0x003f, 0x9356, 0x91be, 0x9576, 0x9aed, 0x9aee, 0x899b, 0x003f, - 0x003f, 0x8eb8, 0x9aef, 0x003f, 0x003f, 0x003f, 0x003f, 0x88ce, - 0x9af0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9af1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8982, 0x003f, 0x003f, 0x8aef, - 0x93de, 0x95f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x9af5, 0x9174, - 0x9af4, 0x8c5f, 0x003f, 0xed84, 0x967a, 0x9af3, 0x003f, 0x9385, - 0x9af7, 0x003f, 0x9af6, 0xed85, 0x003f, 0xed86, 0x003f, 0x003f, - 0x9af9, 0x003f, 0x9af8, 0xed87, 0x003f, 0x899c, 0x003f, 0x9afa, - 0x8fa7, 0x9afc, 0x9244, 0x003f, 0x9afb, 0x003f, 0x95b1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8f97, 0x937a, 0x003f, 0x003f, 0x003f, - 0x9b40, 0x003f, 0x003f, 0x003f, 0x003f, 0x8d44, 0x003f, 0x003f, - 0x003f, 0x9b41, 0x9440, 0x94dc, 0x96cf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9444, 0x003f, 0x003f, 0x9b4a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8b57, 0x003f, 0x003f, 0x9764, 0x003f, - 0x003f, 0x96ad, 0x003f, 0x9baa, 0x003f, 0x9b42, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9b45, 0xed88, 0x91c3, 0x003f, 0x003f, - 0x9657, 0x003f, 0x003f, 0x003f, 0x9369, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9b46, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9685, 0xed89, 0x8dc8, 0x003f, 0x003f, 0x8fa8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9b47, 0x003f, - 0x003f, 0x8e6f, 0x003f, 0x8e6e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x88b7, 0x8cc6, 0x003f, 0x90a9, 0x88cf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9b4b, 0x9b4c, 0x003f, 0x9b49, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8957, 0x8aad, 0x003f, - 0x9b48, 0x003f, 0x96c3, 0x9550, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x88a6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x88f7, 0x003f, 0x003f, 0x003f, 0x8e70, - /* 0x5a00 .. 0x5aff */ - 0x003f, 0x88d0, 0x003f, 0x88a1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9b51, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9b4f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x96ba, 0x003f, 0x9b52, 0x003f, 0x9b50, 0x003f, 0x003f, 0x9b4e, - 0x9050, 0x003f, 0x003f, 0x003f, 0x003f, 0x9b4d, 0x003f, 0x003f, - 0x003f, 0x95d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8ce2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9b56, 0x9b57, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8fa9, 0x003f, 0x003f, 0x003f, - 0x9b53, 0x984b, 0x003f, 0x003f, 0x003f, 0x003f, 0x946b, 0x003f, - 0x003f, 0x9b55, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8da5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9b58, 0x003f, 0x003f, 0x003f, 0x9577, 0x003f, - 0x003f, 0x003f, 0x9b59, 0x003f, 0x9b54, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x96b9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x947d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9b5a, 0x9551, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9b5b, 0x9b5f, 0x9b5c, 0x003f, - 0x003f, 0x89c5, 0x9b5e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8eb9, 0x003f, 0x9b5d, 0x8c99, 0x003f, 0x003f, 0x003f, - 0x9b6b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9b64, 0x9b61, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9284, 0x003f, 0x9b60, 0x003f, 0x003f, 0x9b62, 0x003f, - 0x003f, 0x9b63, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9b65, 0x9b66, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5b00 .. 0x5bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8af0, 0x003f, 0x9b68, 0x9b67, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9b69, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8fec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9b6c, 0x003f, 0x92da, 0x003f, 0x003f, 0x003f, - 0x8964, 0x003f, 0x9b6a, 0x003f, 0x003f, 0x003f, 0x9b6d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9b6e, 0x003f, - 0x9b71, 0x003f, 0x003f, 0x9b6f, 0x003f, 0x9b70, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8e71, 0x9b72, 0x003f, 0x003f, 0x8d45, 0x9b73, 0xed8a, 0x8e9a, - 0x91b6, 0x003f, 0x9b74, 0x9b75, 0x8e79, 0x8d46, 0x003f, 0x96d0, - 0x003f, 0x003f, 0x003f, 0x8b47, 0x8cc7, 0x9b76, 0x8a77, 0x003f, - 0x003f, 0x9b77, 0x003f, 0x91b7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9b78, 0x9ba1, 0x003f, 0x9b79, 0x003f, 0x9b7a, 0x003f, 0x003f, - 0x9b7b, 0x003f, 0x9b7d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9b7e, 0x003f, 0x003f, 0x9b80, 0x003f, 0x91ee, 0x003f, 0x8946, - 0x8ee7, 0x88c0, 0x003f, 0x9176, 0x8aae, 0x8eb3, 0x003f, 0x8d47, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9386, 0x003f, 0x8f40, - 0x8aaf, 0x9288, 0x92e8, 0x88b6, 0x8b58, 0x95f3, 0x003f, 0x8ec0, - 0x003f, 0x003f, 0x8b71, 0x90e9, 0x8eba, 0x9747, 0x9b81, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8b7b, 0x003f, - 0x8dc9, 0x003f, 0x003f, 0x8a51, 0x8983, 0x8faa, 0x89c6, 0x003f, - 0x9b82, 0x9765, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f68, - 0xed8b, 0x003f, 0x8ee2, 0x9b83, 0x8af1, 0x93d0, 0x96a7, 0x9b84, - 0x003f, 0x9b85, 0x003f, 0x003f, 0x9578, 0x003f, 0x003f, 0x003f, - 0x9b87, 0x003f, 0x8aa6, 0x8bf5, 0x9b86, 0x003f, 0x003f, 0x003f, - 0xed8d, 0x003f, 0x003f, 0x8ab0, 0x003f, 0x9051, 0x9b8b, 0x8e40, - 0x003f, 0x89c7, 0x9b8a, 0x003f, 0x9b88, 0x9b8c, 0x9b89, 0x944a, - 0x9ecb, 0x9052, 0x003f, 0x9b8d, 0xed8e, 0x003f, 0x97be, 0x003f, - 0x9b8e, 0x003f, 0x003f, 0x9b90, 0x003f, 0x929e, 0x9b8f, 0x003f, - 0x90a1, 0x003f, 0x8e9b, 0x003f, 0x003f, 0x003f, 0x91ce, 0x8ef5, - /* 0x5c00 .. 0x5cff */ - 0x003f, 0x9595, 0x90ea, 0x003f, 0x8ecb, 0x9b91, 0x8fab, 0x9b92, - 0x9b93, 0x88d1, 0x91b8, 0x9071, 0x003f, 0x9b94, 0x93b1, 0x8fac, - 0x003f, 0x8fad, 0x003f, 0x9b95, 0x003f, 0x003f, 0x90eb, 0x003f, - 0x003f, 0x003f, 0x8fae, 0x003f, 0x003f, 0x003f, 0xed8f, 0x003f, - 0x9b96, 0x003f, 0x9b97, 0x003f, 0x96de, 0x003f, 0x003f, 0x003f, - 0x9b98, 0x003f, 0x003f, 0x003f, 0x003f, 0x8bc4, 0x003f, 0x003f, - 0x003f, 0x8f41, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9b99, 0x9b9a, 0x8eda, 0x904b, 0x93f2, 0x9073, 0x94f6, 0x9441, - 0x8bc7, 0x9b9b, 0x003f, 0x003f, 0x003f, 0x8b8f, 0x9b9c, 0x003f, - 0x8bfc, 0x003f, 0x93cd, 0x89ae, 0x003f, 0x8e72, 0x9b9d, 0x9ba0, - 0x9b9f, 0x8bfb, 0x003f, 0x9b9e, 0x003f, 0x9357, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x91ae, 0x003f, - 0x936a, 0x8ec6, 0x003f, 0x003f, 0x9177, 0x979a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9ba2, 0x003f, 0x9ba3, 0x93d4, - 0x003f, 0x8e52, 0x003f, 0x003f, 0x003f, 0x003f, 0x9ba5, 0x003f, - 0x003f, 0x9ba6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9ba7, 0x003f, 0x003f, 0x003f, - 0x8af2, 0x9ba8, 0x003f, 0x003f, 0x9ba9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x89aa, 0x003f, 0x003f, 0x003f, 0x003f, 0xed90, 0x003f, - 0x915a, 0x8ae2, 0x003f, 0x9bab, 0x96a6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x91d0, 0x003f, 0x8a78, 0x003f, 0x003f, 0x9bad, 0x9baf, - 0x8add, 0x003f, 0xed91, 0x9bac, 0x9bae, 0x003f, 0x9bb1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9bb0, 0x003f, 0x9bb2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9bb3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x93bb, 0x8bac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x89e3, 0x9bb4, 0x9bb9, 0x003f, 0x003f, 0x9bb7, 0x003f, 0x95f5, - 0x95f4, 0x003f, 0x003f, 0x003f, 0x003f, 0xed92, 0x9387, 0x003f, - 0x003f, 0x003f, 0x9bb6, 0x8f73, 0x003f, 0x9bb5, 0x003f, 0x003f, - /* 0x5d00 .. 0x5dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9092, - 0x003f, 0x003f, 0x003f, 0x9bba, 0x003f, 0x003f, 0x8de8, 0x003f, - 0x003f, 0x9bc0, 0x003f, 0x003f, 0x9bc1, 0x9bbb, 0x8a52, 0x9bbc, - 0x9bc5, 0x9bc4, 0x9bc3, 0x9bbf, 0x003f, 0x003f, 0x003f, 0x9bbe, - 0x003f, 0x003f, 0x9bc2, 0x003f, 0x003f, 0x003f, 0x003f, 0xed93, - 0x003f, 0x95f6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xed96, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9bc9, 0x9bc6, 0x003f, 0x9bc8, 0x003f, - 0x9792, 0x003f, 0x9bc7, 0xed94, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9bbd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9093, 0x003f, 0x003f, 0x9bca, 0xed97, 0x003f, 0x8db5, - 0x003f, 0x003f, 0x003f, 0x9bcb, 0x003f, 0x003f, 0x9bcc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9bcf, 0x003f, 0x9bce, 0x003f, 0x003f, 0x9bcd, - 0x003f, 0x003f, 0x003f, 0x9388, 0x9bb8, 0x003f, 0x003f, 0x003f, - 0x9bd5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9bd1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9bd0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9bd2, 0x003f, 0x9bd3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9bd6, - 0xed98, 0xed99, 0x97e4, 0x003f, 0x9bd7, 0x9bd4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9bd8, 0x003f, 0x003f, 0x8ade, 0x9bd9, 0x003f, 0x003f, - 0xed9a, 0x003f, 0x9bdb, 0x9bda, 0x003f, 0x003f, 0x9bdc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9bdd, 0x003f, 0x90ec, 0x8f42, 0x003f, - 0x003f, 0x8f84, 0x003f, 0x9183, 0x003f, 0x8d48, 0x8db6, 0x8d49, - 0x8b90, 0x003f, 0x003f, 0x9bde, 0x003f, 0x003f, 0x8db7, 0x003f, - 0x003f, 0x8cc8, 0x9bdf, 0x96a4, 0x9462, 0x9be0, 0x003f, 0x8d4a, - 0x003f, 0x003f, 0x003f, 0x8aaa, 0x003f, 0x9246, 0x8bd0, 0x003f, - /* 0x5e00 .. 0x5eff */ - 0x003f, 0x003f, 0x8e73, 0x957a, 0x003f, 0x003f, 0x94bf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9be1, 0x8af3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9be4, 0x003f, 0x003f, 0x003f, 0x003f, 0x929f, 0x003f, - 0x003f, 0x9be3, 0x9be2, 0x9be5, 0x003f, 0x92e9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9083, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8e74, 0x003f, 0x90c8, 0x003f, 0x91d1, - 0x8b41, 0x003f, 0x003f, 0x92a0, 0x003f, 0x003f, 0x9be6, 0x9be7, - 0x8fed, 0x003f, 0x003f, 0x003f, 0x003f, 0x9658, 0x003f, 0x003f, - 0x9bea, 0x003f, 0x003f, 0x9be9, 0x9be8, 0x959d, 0x003f, 0x9bf1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9679, 0x003f, 0x9beb, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9bed, 0x968b, 0x003f, 0x9bec, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9bee, - 0x003f, 0x94a6, 0x9bef, 0x95bc, 0x9bf0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8ab1, 0x95bd, 0x944e, 0x9bf2, 0x9bf3, 0x003f, - 0x8d4b, 0x8ab2, 0x9bf4, 0x8cb6, 0x9763, 0x9748, 0x8af4, 0x9bf6, - 0x003f, 0x92a1, 0x003f, 0x8d4c, 0x8faf, 0x003f, 0x003f, 0x94dd, - 0x003f, 0x003f, 0x8fb0, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f98, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x92ea, 0x95f7, 0x9358, - 0x003f, 0x003f, 0x8d4d, 0x003f, 0x957b, 0x003f, 0x003f, 0x003f, - 0x9bf7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9378, 0x8dc0, - 0x003f, 0x003f, 0x003f, 0x8cc9, 0x003f, 0x92eb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x88c1, 0x8f8e, 0x8d4e, - 0x9766, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9bf8, 0x9bf9, 0x9470, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9bfa, 0x97f5, 0x984c, 0x003f, 0x003f, 0x003f, 0x003f, 0x9bfc, - 0x9bfb, 0x003f, 0x003f, 0x8a66, 0x003f, 0x003f, 0x9c40, 0x003f, - 0x003f, 0x003f, 0x9c43, 0x9c44, 0x003f, 0x9c42, 0x003f, 0x955f, - 0x8fb1, 0x9c46, 0x9c45, 0x9c41, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9c47, 0x9c48, 0x003f, 0x003f, 0x9c49, 0x003f, 0x003f, 0x003f, - 0x9c4c, 0x9c4a, 0x003f, 0x9c4b, 0x9c4d, 0x003f, 0x8984, 0x92ec, - 0x9c4e, 0x003f, 0x8c9a, 0x89f4, 0x9455, 0x003f, 0x9c4f, 0x93f9, - /* 0x5f00 .. 0x5fff */ - 0x003f, 0x95d9, 0x003f, 0x9c50, 0x984d, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9c51, 0x95be, 0x9c54, 0x989f, 0x98af, 0x003f, 0x8eae, - 0x93f3, 0x9c55, 0x003f, 0x8b7c, 0x92a2, 0x88f8, 0x9c56, 0x95a4, - 0x8d4f, 0x003f, 0x003f, 0x926f, 0x003f, 0x003f, 0x003f, 0x92ed, - 0x003f, 0xed9b, 0x003f, 0x003f, 0x003f, 0x96ed, 0x8cb7, 0x8cca, - 0x003f, 0x9c57, 0x003f, 0x003f, 0x003f, 0x9c58, 0x003f, 0x9c5e, - 0x003f, 0x8ee3, 0x003f, 0x003f, 0xed9c, 0x92a3, 0x003f, 0x8bad, - 0x9c59, 0x003f, 0x003f, 0x003f, 0x954a, 0x003f, 0x9265, 0x003f, - 0x003f, 0x9c5a, 0x003f, 0x003f, 0x003f, 0xed4b, 0x003f, 0x003f, - 0x9c5b, 0x003f, 0x8bae, 0x003f, 0x9c5c, 0x003f, 0x9c5d, 0x003f, - 0x003f, 0x9c5f, 0x003f, 0x9396, 0x003f, 0x003f, 0x9c60, 0x9c61, - 0x003f, 0x9c62, 0x003f, 0x003f, 0x9c53, 0x9c52, 0x003f, 0x003f, - 0x003f, 0x9c63, 0x8c60, 0x003f, 0x003f, 0x003f, 0x9546, 0xed9d, - 0x003f, 0x8dca, 0x9556, 0x92a4, 0x956a, 0x9c64, 0x003f, 0x003f, - 0x8fb2, 0x8965, 0x003f, 0x9c65, 0x003f, 0x003f, 0x003f, 0x9c66, - 0x003f, 0x96f0, 0x003f, 0x003f, 0x94de, 0x003f, 0x003f, 0x9c69, - 0x899d, 0x90aa, 0x9c68, 0x9c67, 0x8c61, 0x91d2, 0x003f, 0x9c6d, - 0x9c6b, 0x003f, 0x9c6a, 0x97a5, 0x8ce3, 0x003f, 0x003f, 0x003f, - 0x8f99, 0x9c6c, 0x936b, 0x8f5d, 0x003f, 0x003f, 0x003f, 0x93be, - 0x9c70, 0x9c6f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9c6e, 0x003f, - 0x9c71, 0x8ce4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9c72, 0x959c, 0x8f7a, 0x003f, 0x003f, 0x9c73, 0x94f7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x93bf, 0x92a5, 0x003f, 0x003f, 0xed9e, - 0x003f, 0x934f, 0x003f, 0x003f, 0x9c74, 0x8b4a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9053, 0x003f, 0x954b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8af5, 0x9445, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9c75, 0x8e75, - 0x9659, 0x965a, 0x003f, 0x003f, 0x899e, 0x9c7a, 0xed9f, 0x003f, - 0x9289, 0x003f, 0x003f, 0x003f, 0x9c77, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x89f5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9cab, 0x9c79, 0x003f, 0x003f, 0x003f, 0x944f, 0x003f, 0x003f, - 0x9c78, 0x003f, 0x003f, 0x9c76, 0x003f, 0x8d9a, 0x003f, 0x9c7c, - /* 0x6000 .. 0x60ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9c83, 0x9c89, - 0x9c81, 0x003f, 0x937b, 0x003f, 0x003f, 0x9c86, 0x957c, 0x003f, - 0x003f, 0x9c80, 0x003f, 0x9c85, 0x97e5, 0x8e76, 0x003f, 0x003f, - 0x91d3, 0x9c7d, 0x003f, 0x003f, 0x003f, 0x8b7d, 0x9c88, 0x90ab, - 0x8985, 0x9c82, 0x89f6, 0x9c87, 0x003f, 0x003f, 0x003f, 0x8baf, - 0x003f, 0x9c84, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9c8a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9c8c, 0x9c96, 0x9c94, 0x003f, 0x003f, 0x9c91, 0x003f, - 0x003f, 0x003f, 0x9c90, 0x97f6, 0x003f, 0x9c92, 0x003f, 0x003f, - 0x8bb0, 0x003f, 0x8d50, 0x003f, 0x003f, 0x8f9a, 0x003f, 0x003f, - 0x003f, 0x9c99, 0x9c8b, 0x003f, 0x003f, 0xeda0, 0x003f, 0x9c8f, - 0x9c7e, 0x003f, 0x89f8, 0x9c93, 0x9c95, 0x9270, 0x003f, 0x003f, - 0x8da6, 0x89b6, 0x9c8d, 0x9c98, 0x9c97, 0x8bb1, 0x003f, 0x91a7, - 0x8a86, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c62, 0x003f, 0x9c8e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9c9a, 0x003f, 0x9c9d, 0x9c9f, 0xeda1, 0x003f, 0x003f, - 0x003f, 0x8ebb, 0xeda2, 0x9ca5, 0x92ee, 0x9c9b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9ca3, 0x003f, 0x89f7, 0x003f, 0x9ca1, 0x9ca2, - 0x003f, 0x003f, 0x9c9e, 0x9ca0, 0x003f, 0x003f, 0x003f, 0x8ce5, - 0x9749, 0x003f, 0x003f, 0x8ab3, 0x003f, 0x003f, 0x8978, 0x9ca4, - 0x003f, 0x9459, 0x88ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x94df, 0x9c7b, 0x9caa, 0x9cae, 0x96e3, 0x003f, - 0x9ca7, 0x003f, 0x003f, 0x003f, 0x9389, 0x9cac, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8fee, 0x9cad, 0x93d5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9866, 0x003f, 0x9ca9, 0x003f, 0xeda4, 0x003f, 0x003f, - 0x9caf, 0x003f, 0x8d9b, 0x003f, 0x90c9, 0x003f, 0xeda3, 0x88d2, - 0x9ca8, 0x9ca6, 0x003f, 0x9179, 0x003f, 0x003f, 0x003f, 0x9c9c, - 0x8e53, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x91c4, 0x9cbb, 0xeda6, 0x917a, 0x9cb6, 0x003f, 0x9cb3, 0x9cb4, - 0x003f, 0x8ee4, 0x9cb7, 0x9cba, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6100 .. 0x61ff */ - 0x9cb5, 0x8f44, 0x003f, 0x9cb8, 0x003f, 0x003f, 0x9cb2, 0x003f, - 0x96fa, 0x96f9, 0x003f, 0x003f, 0x003f, 0x9cbc, 0x9cbd, 0x88d3, - 0x003f, 0xeda7, 0x003f, 0x003f, 0x003f, 0x9cb1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8bf0, 0x88a4, 0x003f, 0x003f, 0x003f, 0x8ab4, - 0xeda5, 0x9cb9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9cc1, - 0x9cc0, 0x003f, 0x003f, 0x003f, 0x9cc5, 0x003f, 0x003f, 0x003f, - 0xeda9, 0x003f, 0x003f, 0x003f, 0x9cc6, 0x003f, 0x003f, 0xeda8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9cc4, 0x9cc7, 0x9cbf, 0x9cc3, - 0x003f, 0x003f, 0x9cc8, 0x003f, 0x9cc9, 0x003f, 0x003f, 0x9cbe, - 0x8e9c, 0x003f, 0x9cc2, 0x91d4, 0x8d51, 0x9cb0, 0x9054, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9cd6, 0x003f, 0x95e7, 0x003f, 0x003f, - 0x9ccc, 0x9ccd, 0x9cce, 0x003f, 0x003f, 0x9cd5, 0x003f, 0x9cd4, - 0x003f, 0x003f, 0x969d, 0x8ab5, 0x003f, 0x9cd2, 0x003f, 0x8c64, - 0x8a53, 0x003f, 0x003f, 0x9ccf, 0x003f, 0x003f, 0x97b6, 0x9cd1, - 0x88d4, 0x9cd3, 0x003f, 0x9cca, 0x9cd0, 0x9cd7, 0x8c63, 0x9ccb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x977c, 0x003f, - 0x003f, 0x003f, 0x974a, 0x003f, 0x003f, 0x003f, 0x003f, 0x9cda, - 0x003f, 0x003f, 0x9cde, 0x003f, 0x003f, 0x003f, 0x919e, 0x003f, - 0x97f7, 0x9cdf, 0x003f, 0x003f, 0x9cdc, 0x003f, 0x9cd9, 0x003f, - 0xedaa, 0x9cd8, 0x9cdd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x95ae, 0x003f, 0x003f, 0x93b2, - 0x003f, 0x8c65, 0x003f, 0x9ce0, 0x9cdb, 0x003f, 0x9ce1, 0x003f, - 0x003f, 0x003f, 0x8c9b, 0x003f, 0x003f, 0x003f, 0x89af, 0x003f, - 0x003f, 0x003f, 0x9ce9, 0x003f, 0x003f, 0x003f, 0x8ab6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9ce7, 0x003f, 0x003f, 0x9ce8, 0x8da7, - 0x9ce6, 0x9ce4, 0x9ce3, 0x9cea, 0x9ce2, 0x9cec, 0x003f, 0x003f, - 0x89f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9cee, 0x003f, 0x003f, 0x9ced, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x92a6, 0x003f, 0x9cf1, 0x003f, 0x9cef, 0x9ce5, - 0x8c9c, 0x003f, 0x9cf0, 0x003f, 0x9cf4, 0x9cf3, 0x9cf5, 0x9cf2, - /* 0x6200 .. 0x62ff */ - 0x9cf6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9cf7, 0x9cf8, 0x95e8, 0x003f, 0x9cfa, 0x9cf9, 0x8f5e, 0x003f, - 0x90ac, 0x89e4, 0x89fa, 0xedab, 0x9cfb, 0x003f, 0x88bd, 0x003f, - 0x003f, 0x003f, 0x90ca, 0x9cfc, 0x003f, 0xe6c1, 0x9d40, 0x8c81, - 0x003f, 0x9d41, 0x003f, 0x003f, 0x003f, 0x003f, 0x90ed, 0x003f, - 0x003f, 0x003f, 0x9d42, 0x003f, 0x003f, 0x003f, 0x9d43, 0x8b59, - 0x9d44, 0x003f, 0x9d45, 0x9d46, 0x91d5, 0x003f, 0x003f, 0x003f, - 0x8ccb, 0x003f, 0x003f, 0x96df, 0x003f, 0x003f, 0x003f, 0x965b, - 0x8f8a, 0x9d47, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x90ee, - 0xe7bb, 0x94e0, 0x003f, 0x8ee8, 0x003f, 0x8dcb, 0x9d48, 0x003f, - 0x003f, 0x003f, 0x003f, 0x91c5, 0x003f, 0x95a5, 0x003f, 0x003f, - 0x91ef, 0x003f, 0x003f, 0x9d4b, 0x003f, 0x003f, 0x9d49, 0x003f, - 0x9d4c, 0x003f, 0x003f, 0x9d4a, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9d4d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x95af, 0x003f, - 0x003f, 0x88b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x957d, 0x003f, - 0x003f, 0x94e1, 0x003f, 0x003f, 0x9d4e, 0x003f, 0x9d51, 0x8fb3, - 0x8b5a, 0x003f, 0x9d4f, 0x9d56, 0x8fb4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9d50, 0x9463, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x977d, 0x9d52, 0x9d53, 0x9d57, 0x938a, 0x9d54, 0x8d52, - 0x90dc, 0x003f, 0x003f, 0x9d65, 0x94b2, 0x003f, 0x91f0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedac, 0x003f, - 0x003f, 0x003f, 0x003f, 0x94e2, 0x9dab, 0x003f, 0x003f, 0x003f, - 0x003f, 0x95f8, 0x003f, 0x003f, 0x003f, 0x92ef, 0x003f, 0x003f, - 0x003f, 0x9695, 0x003f, 0x9d5a, 0x899f, 0x928a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9d63, 0x003f, 0x003f, 0x9253, 0x9d5d, 0x9d64, - 0x9d5f, 0x9d66, 0x9d62, 0x003f, 0x9d61, 0x948f, 0x003f, 0x9d5b, - 0x89fb, 0x9d59, 0x8b91, 0x91f1, 0x9d55, 0x003f, 0x003f, 0x9d58, - 0x8d53, 0x90d9, 0x003f, 0x8fb5, 0x9d60, 0x9471, 0x003f, 0x003f, - 0x8b92, 0x8a67, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8a87, 0x9040, 0x9d68, 0x9d6d, - 0x003f, 0x9d69, 0x003f, 0x8c9d, 0x003f, 0x9d6e, 0x8e41, 0x8d89, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f45, 0x9d5c, - /* 0x6300 .. 0x63ff */ - 0x003f, 0x8e9d, 0x9d6b, 0x003f, 0x003f, 0x003f, 0x003f, 0x8e77, - 0x9d6c, 0x88c2, 0x003f, 0x003f, 0x9d67, 0x003f, 0x003f, 0x003f, - 0x003f, 0x92a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8b93, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8bb2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9d6a, - 0x88a5, 0x003f, 0x003f, 0x8dc1, 0x003f, 0x003f, 0x003f, 0x9055, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x92f0, 0x003f, 0x003f, 0x94d2, 0x9d70, 0x917d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x91a8, 0x003f, 0x003f, 0x8e4a, 0x9d71, 0x003f, 0x9d73, - 0x9d6f, 0x003f, 0x003f, 0x003f, 0x003f, 0x95df, 0x003f, 0x92bb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x917b, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x95f9, - 0x8ecc, 0x9d80, 0x003f, 0x9d7e, 0x003f, 0x003f, 0x9098, 0x003f, - 0x003f, 0x003f, 0x8c9e, 0x003f, 0x003f, 0x003f, 0x9d78, 0x8fb7, - 0x003f, 0x003f, 0x93e6, 0x9450, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9d76, 0x003f, 0x003f, 0x917c, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8ef6, 0x9d7b, 0x003f, 0x003f, 0x8fb6, 0x003f, 0x9d75, 0x9d7a, - 0x003f, 0x003f, 0x9472, 0x003f, 0x003f, 0x003f, 0x9d74, 0x003f, - 0x8c40, 0x003f, 0x003f, 0x8a7c, 0x003f, 0x003f, 0x003f, 0x9d7c, - 0x97a9, 0x8dcc, 0x9254, 0x9d79, 0x003f, 0x90da, 0x003f, 0x8d54, - 0x9084, 0x8986, 0x915b, 0x9d77, 0x8b64, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8c66, 0x003f, 0x92cd, 0x9d7d, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x917e, 0x003f, 0x003f, 0x9d81, 0x003f, - 0x9d83, 0x003f, 0x003f, 0x91b5, 0x9d89, 0x003f, 0x9d84, 0x003f, - 0x003f, 0x9d86, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9560, - 0x92f1, 0x003f, 0x9d87, 0x003f, 0x003f, 0x003f, 0x974b, 0x003f, - 0x003f, 0x003f, 0x9767, 0x8ab7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x88ac, 0x003f, 0x9d85, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9d82, 0x003f, 0x003f, 0x003f, 0x003f, 0x8af6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8987, 0xedad, 0x9d88, 0x003f, - 0x003f, 0x003f, 0x9768, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6400 .. 0x64ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9d8c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x91b9, 0x003f, 0x9d93, - 0x003f, 0x003f, 0x003f, 0x9d8d, 0x003f, 0x003f, 0x9d8a, 0x9d91, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9d72, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9d8e, 0x003f, - 0x9d92, 0x003f, 0x003f, 0x003f, 0x94c0, 0x938b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9d8b, 0x003f, 0x9d8f, 0x003f, - 0x003f, 0x003f, 0x8c67, 0x003f, 0x003f, 0x003f, 0x8def, 0x003f, - 0x003f, 0x003f, 0x90db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9d97, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9345, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9d94, - 0x003f, 0x9680, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9d95, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9d96, 0x003f, - 0x96cc, 0x003f, 0x90a0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8c82, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9d9d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8e54, 0x9d9a, 0x003f, 0x9d99, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9451, 0x003f, 0x003f, 0xedaf, 0x93b3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9350, 0x9d9b, 0x003f, 0x003f, - 0x003f, 0x9d9c, 0x003f, 0x958f, 0x003f, 0x9464, 0x8e42, 0x003f, - 0x90ef, 0x003f, 0x966f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8a68, 0x003f, 0x9da3, 0x9d9e, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9769, 0x9da5, 0x003f, 0x003f, 0x9da1, 0x003f, 0x9da2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9180, 0xedb0, 0x003f, - 0x003f, 0x003f, 0x9da0, 0x003f, 0x9d5e, 0x003f, 0x003f, 0x003f, - 0x9da4, 0x003f, 0x9d9f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9da9, 0x9daa, 0x9346, 0x9dac, 0x003f, 0x003f, 0x8e43, 0x9da7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8b5b, 0x003f, 0x003f, 0x9dad, - 0x003f, 0x9da6, 0x9db1, 0x003f, 0x9db0, 0x003f, 0x9daf, 0x003f, - 0x003f, 0x003f, 0x9db2, 0x003f, 0x003f, 0x9db4, 0x8fef, 0x003f, - /* 0x6500 .. 0x65ff */ - 0x9db3, 0x003f, 0x003f, 0x003f, 0x003f, 0x9db7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9db5, 0x003f, 0x003f, 0x003f, 0x9db6, 0x9d90, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9db9, 0x9db8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9d98, 0x9dba, 0x9dae, 0x003f, 0x003f, 0x8e78, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9dbb, 0x9dbc, 0x9dbe, 0x9dbd, - 0x9dbf, 0x89fc, 0x003f, 0x8d55, 0x003f, 0x003f, 0x95fa, 0x90ad, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8ccc, 0x003f, 0x003f, - 0x9dc1, 0x003f, 0x003f, 0x003f, 0x003f, 0x9dc4, 0xedb1, 0x9571, - 0x003f, 0x8b7e, 0x003f, 0x003f, 0x003f, 0x9dc3, 0x9dc2, 0x9473, - 0x9dc5, 0x8bb3, 0x003f, 0x003f, 0x003f, 0x9dc7, 0x9dc6, 0x003f, - 0x003f, 0x003f, 0x8ab8, 0x8e55, 0x003f, 0x003f, 0x93d6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8c68, 0x003f, 0x003f, 0x003f, - 0x9094, 0x003f, 0x9dc8, 0x003f, 0x90ae, 0x9347, 0x003f, 0x957e, - 0x9dc9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9dca, 0x9dcb, 0x003f, 0x003f, 0x003f, 0x95b6, - 0x9b7c, 0x90c4, 0x003f, 0x003f, 0x956b, 0x003f, 0x8dd6, 0x003f, - 0x94e3, 0x94c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x936c, - 0x003f, 0x97bf, 0x003f, 0x9dcd, 0x8ece, 0x003f, 0x003f, 0x9dce, - 0x003f, 0x88b4, 0x003f, 0x003f, 0x8bd2, 0x90cb, 0x003f, 0x9580, - 0x003f, 0x003f, 0x003f, 0x9dcf, 0x8e61, 0x9266, 0x003f, 0x8e7a, - 0x9056, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9dd0, - 0x003f, 0x95fb, 0x003f, 0x003f, 0x8997, 0x8e7b, 0x003f, 0x003f, - 0x003f, 0x9dd3, 0x003f, 0x9dd1, 0x9dd4, 0x97b7, 0x9dd2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x90f9, 0x9dd5, 0x003f, 0x003f, 0x91b0, - 0x003f, 0x003f, 0x9dd6, 0x003f, 0x003f, 0x003f, 0x003f, 0x8af8, - 0x003f, 0x9dd8, 0x003f, 0x9dd7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9dd9, 0x9dda, 0x8af9, 0x003f, 0x003f, 0x93fa, 0x9255, 0x8b8c, - 0x8e7c, 0x9181, 0x003f, 0x003f, 0x8f7b, 0x88ae, 0x003f, 0x003f, - 0x003f, 0x9ddb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x89a0, 0x9ddf, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6600 .. 0x66ff */ - 0xedb2, 0x003f, 0x8d56, 0x9dde, 0x003f, 0x003f, 0x8da9, 0x8fb8, - 0x003f, 0xedb5, 0x9ddd, 0x003f, 0x8fb9, 0x003f, 0x96be, 0x8da8, - 0x003f, 0x003f, 0x003f, 0x88d5, 0x90cc, 0xedb3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9de4, 0x003f, 0xedb7, 0x90af, - 0x8966, 0x003f, 0x003f, 0x003f, 0xedb8, 0x8f74, 0x003f, 0x9686, - 0x8df0, 0x003f, 0x003f, 0x003f, 0x003f, 0x8fba, 0xedb6, 0x90a5, - 0x003f, 0xed47, 0x003f, 0x003f, 0x9de3, 0x9de1, 0x9de2, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedb4, 0x928b, 0x003f, 0x003f, 0x9e45, - 0x003f, 0x9de8, 0x8e9e, 0x8d57, 0x9de6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9de7, 0x003f, 0x9057, 0x003f, 0x003f, 0x003f, 0x9de5, - 0x003f, 0x003f, 0x8e4e, 0x003f, 0x003f, 0x003f, 0x003f, 0xedba, - 0x003f, 0xedbb, 0x003f, 0x003f, 0x003f, 0x9dea, 0x9de9, 0x9dee, - 0x003f, 0x003f, 0x9def, 0x003f, 0x9deb, 0xedb9, 0x8a41, 0x9dec, - 0x9ded, 0x94d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x9581, 0x8c69, - 0x9df0, 0x003f, 0x003f, 0xedbd, 0x90b0, 0x003f, 0x8fbb, 0x003f, - 0x003f, 0x003f, 0x9271, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8bc5, 0x003f, 0x9df1, 0x9df5, 0x003f, 0x003f, 0x89c9, - 0x9df2, 0x9df4, 0x003f, 0x003f, 0x003f, 0x003f, 0x9df3, 0x003f, - 0x003f, 0x8f8b, 0x003f, 0x003f, 0x003f, 0x003f, 0x9267, 0x88c3, - 0x9df6, 0xedbe, 0x003f, 0x003f, 0x003f, 0x9df7, 0x003f, 0x003f, - 0xedbf, 0x003f, 0x92a8, 0x003f, 0x003f, 0x003f, 0x97ef, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8e62, 0x003f, 0x003f, 0x95e9, 0x003f, - 0x003f, 0x003f, 0xedc0, 0x003f, 0x965c, 0x003f, 0x003f, 0x003f, - 0x9e41, 0x9df9, 0x003f, 0x003f, 0x9dfc, 0x003f, 0x9dfb, 0xedc1, - 0x003f, 0x9df8, 0x003f, 0x003f, 0x9e40, 0x003f, 0x003f, 0x93dc, - 0x003f, 0x9dfa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e42, 0x003f, - 0x003f, 0x8f8c, 0x9e43, 0x003f, 0x976a, 0x9498, 0x003f, 0x003f, - 0x9e44, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e46, 0x003f, - 0x003f, 0x9e47, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9e48, 0x003f, 0x8bc8, 0x8967, 0x8d58, 0x9e49, 0x003f, 0x9e4a, - 0x8f91, 0x9182, 0xedc2, 0xed4a, 0x99d6, 0x915d, 0x915c, 0x91d6, - /* 0x6700 .. 0x67ff */ - 0x8dc5, 0x003f, 0x003f, 0x98f0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8c8e, 0x974c, 0x003f, 0x95fc, 0x003f, 0x959e, 0xedc3, 0x9e4b, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8df1, 0x92bd, 0x9e4c, 0x984e, - 0x003f, 0x003f, 0x003f, 0x965d, 0x003f, 0x92a9, 0x9e4d, 0x8afa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e4e, 0x9e4f, - 0x96d8, 0x003f, 0x96a2, 0x9696, 0x967b, 0x8e44, 0x9e51, 0x003f, - 0x003f, 0x8ee9, 0x003f, 0x003f, 0x9670, 0x003f, 0x9e53, 0x9e56, - 0x9e55, 0x003f, 0x8af7, 0x003f, 0x003f, 0x8b80, 0x003f, 0x9e52, - 0x003f, 0x9e54, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e57, 0x003f, - 0x003f, 0x9099, 0x003f, 0x003f, 0x003f, 0x003f, 0x979b, 0x88c7, - 0x8dde, 0x91ba, 0x003f, 0x8edb, 0x003f, 0x003f, 0x8ff1, 0x003f, - 0x003f, 0x9e5a, 0x003f, 0x003f, 0x936d, 0x003f, 0x9e58, 0x91a9, - 0x9e59, 0x8ff0, 0x96db, 0x9e5b, 0x9e5c, 0x9788, 0xedc5, 0x003f, - 0x003f, 0x003f, 0x9e61, 0x003f, 0x003f, 0x8d59, 0x003f, 0x9474, - 0x9e5e, 0x938c, 0x9ddc, 0x9de0, 0x003f, 0x8b6e, 0x003f, 0x9466, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9e60, 0x003f, 0x8fbc, 0x94c2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e66, 0x003f, 0x94f8, - 0x003f, 0x9e5d, 0x003f, 0x9e63, 0x9e62, 0x003f, 0x003f, 0x003f, - 0x90cd, 0x003f, 0x003f, 0x003f, 0x003f, 0x968d, 0x003f, 0x97d1, - 0x003f, 0x003f, 0x9687, 0x003f, 0x89ca, 0x8e7d, 0x003f, 0x003f, - 0x9867, 0x9e65, 0x9095, 0x003f, 0x003f, 0x003f, 0x9e64, 0x003f, - 0x003f, 0x9e5f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8ccd, - 0x003f, 0x003f, 0x003f, 0x9e6b, 0x9e69, 0x003f, 0x89cb, 0x9e67, - 0x9e6d, 0x9e73, 0x003f, 0xedc6, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedc8, 0x91c6, 0x003f, 0x003f, 0x95bf, 0x003f, 0x9e75, 0x003f, - 0x003f, 0x003f, 0x9541, 0x003f, 0x003f, 0x003f, 0x9e74, 0x9490, - 0x965e, 0x8ab9, 0x003f, 0x90f5, 0x8f5f, 0x003f, 0x003f, 0x003f, - 0x92d1, 0x003f, 0x974d, 0x003f, 0x003f, 0x9e70, 0x9e6f, 0x003f, - 0x003f, 0x003f, 0x9e71, 0x003f, 0x9e6e, 0x003f, 0x003f, 0x9e76, - 0x003f, 0x9e6c, 0x003f, 0x003f, 0x9e6a, 0x003f, 0x9e72, 0x9e68, - 0x003f, 0x928c, 0x003f, 0x96f6, 0x8ec4, 0x8df2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8db8, 0x003f, 0x003f, 0x968f, 0x8a60, - /* 0x6800 .. 0x68ff */ - 0x003f, 0xedc9, 0x92cc, 0x93c8, 0x8968, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x90f0, 0x003f, 0x003f, 0x90b2, 0x8c49, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e78, 0x003f, - 0x003f, 0x8d5a, 0x8a9c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9e7a, 0x8a94, 0x9e81, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9e7d, 0x003f, 0x90f1, 0x003f, 0x003f, 0x003f, - 0x8a6a, 0x8daa, 0x003f, 0x003f, 0x8a69, 0x8dcd, 0x003f, 0x003f, - 0x9e7b, 0x8c85, 0x8c6a, 0x938d, 0xedca, 0x003f, 0x9e79, 0x003f, - 0x88c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e7c, 0x9e7e, 0x003f, - 0x8bcb, 0x8c4b, 0xedc7, 0x8aba, 0x8b6a, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9e82, 0x003f, 0x003f, 0x8df7, 0x9691, 0x003f, 0x8e56, - 0x003f, 0x003f, 0x003f, 0x9e83, 0x003f, 0x003f, 0x003f, 0x954f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9e8f, 0x003f, 0x89b1, 0x9e84, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e95, 0x9e85, - 0x003f, 0x97c0, 0x003f, 0x9e8c, 0x003f, 0x947e, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e94, 0x003f, 0x9e87, - 0x003f, 0x003f, 0x003f, 0x88b2, 0x9e89, 0x003f, 0x003f, 0x8d5b, - 0x003f, 0x003f, 0x003f, 0x9e8b, 0x003f, 0x9e8a, 0x003f, 0x9e86, - 0x9e91, 0x003f, 0x8fbd, 0x003f, 0x003f, 0x003f, 0x9aeb, 0x8ce6, - 0x979c, 0x003f, 0x003f, 0x003f, 0x003f, 0x9e88, 0x003f, 0x92f2, - 0x8a42, 0x8dab, 0x003f, 0x9e80, 0x003f, 0x9e90, 0x8a81, 0x003f, - 0x003f, 0x9e8e, 0x9e92, 0x003f, 0x938e, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8afc, 0x003f, 0x9eb0, 0x003f, - 0xed48, 0x96c7, 0x9e97, 0x8afb, 0x003f, 0x9e9e, 0x003f, 0xedcb, - 0x003f, 0x003f, 0x965f, 0x003f, 0x9e9f, 0x9ea1, 0x003f, 0x9ea5, - 0x9e99, 0x003f, 0x9249, 0x003f, 0x003f, 0x003f, 0x003f, 0x938f, - 0x9ea9, 0x9e9c, 0x003f, 0x9ea6, 0x003f, 0x003f, 0x003f, 0x9ea0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9058, 0x9eaa, - 0x003f, 0x003f, 0x90b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9ea8, 0x8abb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6900 .. 0x69ff */ - 0x986f, 0x9e96, 0x003f, 0x003f, 0x9ea4, 0x88d6, 0x003f, 0x003f, - 0x9e98, 0x003f, 0x003f, 0x96b8, 0x9e9d, 0x9041, 0x92c5, 0x9e93, - 0x003f, 0x003f, 0x9ea3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x909a, 0x9ead, 0x8a91, 0x8c9f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9eaf, 0x9e9a, 0x9eae, 0x003f, 0x9ea7, 0x9e9b, 0x003f, - 0x9eab, 0x003f, 0x9eac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9ebd, 0x003f, 0x003f, 0x003f, 0x93cc, 0x003f, 0x9ea2, 0x003f, - 0x003f, 0x9eb9, 0x003f, 0x003f, 0x003f, 0x9ebb, 0x003f, 0x92d6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x976b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9596, 0x9eb6, 0x91c8, 0x003f, 0x003f, - 0x003f, 0x9ebc, 0x915e, 0x003f, 0x9eb3, 0x9ec0, 0x9ebf, 0x003f, - 0x93ed, 0x9ebe, 0x93e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedcd, 0x003f, 0x9ec2, 0x9eb5, 0x003f, 0x8bc6, 0x9eb8, 0x8f7c, - 0x003f, 0x003f, 0x003f, 0x9480, 0x9eba, 0x8bc9, 0x003f, 0x9eb2, - 0x9eb4, 0x9eb1, 0x003f, 0x003f, 0x984f, 0x8a79, 0x9eb7, 0x003f, - 0x003f, 0x9ec1, 0x8a54, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8de5, 0x003f, 0x003f, 0x003f, 0x897c, 0x003f, - 0x003f, 0x9ed2, 0x003f, 0x003f, 0x9850, 0x9ed5, 0x003f, 0x003f, - 0xedcf, 0x003f, 0x003f, 0x9059, 0x9ed4, 0x003f, 0x003f, 0x003f, - 0x9ed3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9ed0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9ec4, 0x003f, - 0x003f, 0x9ee1, 0x9ec3, 0x003f, 0x9ed6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9ece, 0x003f, 0x003f, 0x9ec9, 0x9ec6, - 0x003f, 0x9ec7, 0x003f, 0x9ecf, 0x003f, 0x003f, 0x003f, 0xeaa0, - 0x003f, 0x003f, 0x9ecc, 0x8d5c, 0x92c6, 0x9184, 0x9eca, 0x003f, - 0x9ec5, 0x003f, 0x003f, 0x9ec8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x976c, 0x968a, 0x003f, 0x003f, 0x003f, 0x9ecd, 0x9ed7, 0x003f, - 0x003f, 0x003f, 0xedd0, 0x003f, 0x003f, 0x003f, 0x003f, 0x9edf, - 0x9ed8, 0x003f, 0x003f, 0x9ee5, 0x003f, 0x9ee3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9ede, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9edd, 0x003f, 0x92ce, 0x003f, 0x9185, 0x003f, 0x9edb, - /* 0x6a00 .. 0x6aff */ - 0x003f, 0x003f, 0x9ed9, 0x003f, 0x003f, 0x9ee0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9ee6, 0x94f3, 0x9eec, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9ee7, 0x9eea, 0x9ee4, 0x003f, 0x003f, 0x9294, - 0x003f, 0x9557, 0x003f, 0x9eda, 0x003f, 0x003f, 0x9ee2, 0x8fbe, - 0x003f, 0x96cd, 0x9ef6, 0x9ee9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8ca0, 0x89a1, 0x8a7e, 0x003f, 0x003f, 0x9ed1, 0x003f, - 0xedd1, 0x003f, 0x003f, 0x003f, 0x003f, 0x8fbf, 0x9eee, 0x003f, - 0x9ef5, 0x8ef7, 0x8a92, 0x003f, 0x003f, 0x924d, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9eeb, 0x003f, 0xedd3, 0x9ef0, - 0x9ef4, 0x003f, 0x003f, 0x8bb4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b6b, 0x9ef2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8b40, - 0x003f, 0x93c9, 0x9ef1, 0x003f, 0x003f, 0x003f, 0x9ef3, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedd2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9eed, 0xedd4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9eef, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedd5, 0x8a80, - 0x9268, 0x003f, 0x003f, 0x003f, 0x9efa, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9ef8, 0x8ce7, 0x003f, - 0x9ef7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9f40, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9e77, 0x003f, 0x003f, 0x003f, - 0x9ef9, 0x003f, 0x9efb, 0x9efc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9f4b, 0x003f, 0x9f47, 0x003f, 0x9e8d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9f46, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9f45, 0x003f, 0x003f, 0x9f42, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9ee8, 0x9f44, 0x9f43, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9f49, 0x003f, 0x9845, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9f4c, 0x8bf9, 0x003f, 0x003f, 0x9f48, 0x9f4a, - 0x003f, 0x003f, 0xedd6, 0x003f, 0xedd7, 0x003f, 0x003f, 0x003f, - 0x94a5, 0x003f, 0x9f4d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9f51, 0x9f4e, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6b00 .. 0x6bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x9793, 0x9f4f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9edc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9f52, 0x003f, 0x003f, 0x003f, 0x9f53, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8954, 0x003f, 0x9f55, - 0x8c87, 0x8e9f, 0x003f, 0x8bd3, 0x003f, 0x003f, 0x003f, 0x89a2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x977e, 0x003f, 0x003f, 0x003f, 0x003f, 0x9f57, - 0x9f56, 0x9f59, 0x8b5c, 0x003f, 0x003f, 0x8bd4, 0x8abc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9f5c, 0x003f, 0x003f, 0x003f, 0x9f5b, - 0x003f, 0x9f5d, 0x003f, 0x003f, 0x89cc, 0x003f, 0x9256, 0x003f, - 0x9f5e, 0x003f, 0x003f, 0x8abd, 0x9f60, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9f5f, 0x003f, 0x9f61, 0x003f, 0x003f, 0x003f, 0x9f62, - 0x003f, 0x9f63, 0x8e7e, 0x90b3, 0x8d9f, 0x003f, 0x9590, 0x003f, - 0x003f, 0x95e0, 0x9863, 0x003f, 0x003f, 0x003f, 0x003f, 0x8e95, - 0x003f, 0x003f, 0x003f, 0x8dce, 0x97f0, 0x003f, 0x003f, 0x003f, - 0x9f64, 0x9f65, 0x003f, 0x8e80, 0x003f, 0x003f, 0x003f, 0x9f66, - 0x9f67, 0x003f, 0x003f, 0x9f69, 0x9f68, 0x003f, 0x9677, 0x003f, - 0x003f, 0x8f7d, 0x8eea, 0x8e63, 0x003f, 0x9f6a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9f6c, 0x9042, 0x003f, - 0x9f6b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9f6d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9f6e, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9f6f, 0x9f70, 0x003f, 0x003f, 0x003f, 0x9f71, - 0x003f, 0x9f73, 0x9f72, 0x9f74, 0x89a3, 0x9269, 0x003f, 0x9f75, - 0x003f, 0x003f, 0x8e45, 0x8a6b, 0x9f76, 0x003f, 0x003f, 0x9361, - 0x9aca, 0x003f, 0x003f, 0x003f, 0x003f, 0x8b42, 0x9f77, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9f78, 0x003f, 0x95ea, 0x9688, 0x003f, - 0x003f, 0x003f, 0x93c5, 0x9f79, 0x94e4, 0x003f, 0xedd8, 0x003f, - 0x94f9, 0x003f, 0x003f, 0x96d1, 0x003f, 0x003f, 0x003f, 0x9f7a, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9f7c, 0x9f7b, 0x003f, 0x003f, 0x9f7e, - 0x003f, 0x003f, 0x003f, 0x9f7d, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6c00 .. 0x6cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9f81, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8e81, - 0x003f, 0x96af, 0x003f, 0x9f82, 0x9f83, 0x003f, 0x003f, 0x8b43, - 0x003f, 0x003f, 0x003f, 0x9f84, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9f86, 0x9f85, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9085, 0x003f, 0x003f, 0x9558, - 0x8969, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x94c3, 0xedd9, - 0x92f3, 0x8f60, 0x8b81, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x94c4, 0x003f, - 0x8eac, 0x003f, 0x003f, 0x003f, 0x003f, 0x9f88, 0x003f, 0x8abe, - 0x003f, 0x003f, 0x8998, 0x003f, 0xedda, 0x93f0, 0x9f87, 0x8d5d, - 0x9272, 0x003f, 0x9f89, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9f91, 0x003f, 0x9f8a, 0x003f, 0x003f, 0x003f, 0x003f, 0xeddc, - 0x91bf, 0x003f, 0x8b82, 0x9f92, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8c88, 0x003f, 0x003f, 0x8b44, 0x9f90, 0x003f, - 0x003f, 0x9f8e, 0x9f8b, 0x9780, 0x003f, 0x003f, 0xeddb, 0x003f, - 0x92be, 0x003f, 0x003f, 0x003f, 0x93d7, 0x9f8c, 0x003f, 0x003f, - 0x9f94, 0x003f, 0x9f93, 0x8c42, 0x003f, 0x003f, 0x89ab, 0x003f, - 0x003f, 0x8db9, 0x9f8d, 0x9f8f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9676, 0x91f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9697, 0x003f, 0x003f, 0x9f9c, 0x003f, - 0x003f, 0x9f9d, 0x003f, 0x89cd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x95a6, 0x96fb, 0x9f9f, 0x8ea1, 0x8fc0, 0x9f98, 0x9f9e, 0x8988, - 0x003f, 0x8bb5, 0x003f, 0x003f, 0x9f95, 0x9f9a, 0x003f, 0x003f, - 0x003f, 0x90f2, 0x9491, 0x003f, 0x94e5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9f97, 0x003f, 0x9640, 0x003f, 0x9f99, - 0x003f, 0x9fa2, 0xeddd, 0x9fa0, 0x003f, 0x9f9b, 0x003f, 0x003f, - 0x003f, 0x9641, 0x9467, 0x8b83, 0x003f, 0x9344, 0x003f, 0x003f, - 0x928d, 0x003f, 0x9fa3, 0x003f, 0x003f, 0x003f, 0x003f, 0x9fa1, - 0x91d7, 0x9f96, 0x003f, 0x896a, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6d00 .. 0x6dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xedde, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x976d, 0x9fae, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9fad, 0x003f, 0x003f, 0x003f, 0x003f, 0x90f4, - 0x003f, 0x9faa, 0x003f, 0x978c, 0x003f, 0x003f, 0x93b4, 0x9fa4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x92c3, 0x003f, 0x003f, - 0x003f, 0x896b, 0x8d5e, 0x9fa7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8f46, 0x9fac, 0x003f, 0x9fab, 0x9fa6, 0x003f, - 0x9fa9, 0x003f, 0x003f, 0x8a88, 0x003f, 0x9fa8, 0x9468, 0x003f, - 0x003f, 0x97ac, 0x003f, 0x003f, 0x8ff2, 0x90f3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9fb4, 0x9fb2, 0x003f, 0x956c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9faf, 0x9fb1, 0x003f, 0x8959, 0x003f, - 0x003f, 0x8d5f, 0x9851, 0x003f, 0x8a5c, 0x003f, 0x9582, 0xede0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9781, 0x003f, 0x003f, 0x8a43, - 0x905a, 0x9fb3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9fb8, 0x003f, 0xeddf, - 0x8fc1, 0x003f, 0x003f, 0x003f, 0x974f, 0x003f, 0x9fb5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9fb0, 0x003f, 0x9fb6, 0xede1, 0x003f, - 0x003f, 0x97dc, 0x003f, 0x9393, 0x93c0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xede2, 0x003f, 0x003f, 0x8a55, - 0x003f, 0x003f, 0x8974, 0x003f, 0x003f, 0x9fbc, 0x003f, 0x003f, - 0x9fbf, 0x003f, 0x003f, 0x003f, 0x97c1, 0x003f, 0x003f, 0x003f, - 0x9784, 0x003f, 0x003f, 0x003f, 0x003f, 0x9fc6, 0x9fc0, 0x9fbd, - 0x003f, 0x003f, 0x003f, 0x97d2, 0x9fc3, 0x003f, 0x003f, 0xede3, - 0x003f, 0x8f69, 0x9fc5, 0x003f, 0x003f, 0x9fca, 0x003f, 0x003f, - 0x9391, 0x9fc8, 0x003f, 0x003f, 0x003f, 0x003f, 0x9fc2, 0x003f, - 0x003f, 0x9257, 0x003f, 0x003f, 0x9fc9, 0x003f, 0x9fbe, 0x003f, - 0x9fc4, 0x003f, 0x9fcb, 0x88fa, 0x9fc1, 0x003f, 0x9fcc, 0x003f, - 0x003f, 0x905b, 0xede5, 0x8f7e, 0x003f, 0x95a3, 0x003f, 0x8dac, - 0xede4, 0x9fb9, 0x9fc7, 0x9359, 0xede6, 0x003f, 0x003f, 0x003f, - /* 0x6e00 .. 0x6eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x90b4, 0x003f, 0x8a89, - 0x8dcf, 0x8fc2, 0x9fbb, 0x8f61, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8c6b, 0x003f, 0x9fba, 0x003f, 0x003f, - 0x003f, 0x9fd0, 0x8f8d, 0x8cb8, 0x003f, 0x9fdf, 0x003f, 0x9fd9, - 0x8b94, 0x936e, 0x003f, 0x9fd4, 0x9fdd, 0x88ad, 0x8951, 0xede9, - 0x003f, 0x89b7, 0x003f, 0x9fd6, 0x91aa, 0x9fcd, 0x9fcf, 0x8d60, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9fe0, 0xede7, 0x9fdb, 0x003f, 0xedea, 0x003f, 0x9fd3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9fda, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x96a9, 0x003f, 0x003f, 0x9fd8, 0x9fdc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8cce, 0x003f, - 0x8fc3, 0x003f, 0x003f, 0x9258, 0xede8, 0x003f, 0x003f, 0x9fd2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x974e, - 0x003f, 0x003f, 0x003f, 0x9fd5, 0x003f, 0x003f, 0x9fce, 0x9392, - 0x003f, 0x003f, 0x9fd1, 0x003f, 0x003f, 0x003f, 0x9fd7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9870, 0x8ebc, - 0x969e, 0x003f, 0x9fe1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x94ac, 0x003f, 0x003f, 0x9fed, - 0x8cb9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f80, 0x003f, - 0x9fe3, 0x003f, 0x003f, 0x003f, 0x97ad, 0x8d61, 0x003f, 0x9ff0, - 0x003f, 0x003f, 0x88ec, 0x003f, 0x003f, 0x9fee, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9fe2, 0x003f, 0x003f, 0x003f, 0x003f, 0x9fe8, - 0x003f, 0x003f, 0x9fea, 0x003f, 0x003f, 0x003f, 0x976e, 0x9fe5, - 0x003f, 0x003f, 0x934d, 0x003f, 0x003f, 0x9fe7, 0x003f, 0xedeb, - 0x003f, 0x003f, 0x9fef, 0x003f, 0x9fe9, 0x96c5, 0x003f, 0x003f, - 0x003f, 0x9fe4, 0x003f, 0x8ea0, 0x9ffc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8a8a, 0x003f, 0x9fe6, 0x9feb, 0x9fec, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x91ea, 0x91d8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9ff4, 0x003f, 0x003f, 0x9ffa, - 0x003f, 0x003f, 0x9ff8, 0x003f, 0x9348, 0x003f, 0x003f, 0xe042, - 0x9ff5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9ff6, 0x9fde, - /* 0x6f00 .. 0x6fff */ - 0x003f, 0x8b99, 0x9559, 0x003f, 0x003f, 0x003f, 0x8ebd, 0x003f, - 0x003f, 0x8d97, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9852, - 0x003f, 0x9ff2, 0x003f, 0xe041, 0x8989, 0x9186, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9499, 0x003f, 0x8abf, 0x97f8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x969f, 0x92d0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9ff9, 0x9ffb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9151, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe040, 0x9ff7, - 0x003f, 0x9ff1, 0x003f, 0x003f, 0x003f, 0x8ac1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8c89, 0x003f, 0x003f, 0x003f, - 0xe04e, 0x003f, 0x003f, 0xe049, 0x90f6, 0x003f, 0x003f, 0x8a83, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8f81, 0x003f, 0xe052, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe04b, 0x92aa, 0xe048, - 0x92d7, 0x003f, 0x003f, 0x003f, 0xe06b, 0x003f, 0x003f, 0x003f, - 0xe045, 0x003f, 0xe044, 0x003f, 0xe04d, 0x003f, 0x003f, 0x003f, - 0xe047, 0xe046, 0xe04c, 0x003f, 0x909f, 0x003f, 0xe043, 0x003f, - 0xedec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe04f, 0x003f, - 0x003f, 0xe050, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8ac0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe055, 0x003f, 0xe054, 0xe056, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe059, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9362, 0x003f, 0xe053, 0x003f, 0xeded, 0x003f, 0x003f, - 0x003f, 0xe057, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8c83, 0x91f7, 0xe051, 0x945a, 0x003f, 0x003f, 0xe058, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe05d, 0xe05b, 0x003f, 0x003f, - 0xe05e, 0x003f, 0x003f, 0xe061, 0x003f, 0x003f, 0x003f, 0xe05a, - 0x8d8a, 0x9447, 0x003f, 0x003f, 0x9fb7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9794, 0xe05c, 0x003f, 0xe060, 0x91f3, - 0x003f, 0xe05f, 0x003f, 0xe04a, 0x003f, 0xedee, 0xe889, 0x003f, - 0x003f, 0x003f, 0xe064, 0x003f, 0x003f, 0x003f, 0xe068, 0x003f, - /* 0x7000 .. 0x70ff */ - 0x003f, 0xe066, 0x003f, 0x003f, 0x003f, 0xedef, 0x003f, 0xedf0, - 0x003f, 0xe062, 0x003f, 0xe063, 0x003f, 0x003f, 0x003f, 0xe067, - 0x003f, 0xe065, 0x003f, 0x003f, 0x003f, 0x956d, 0x003f, 0x003f, - 0xe06d, 0x003f, 0xe06a, 0xe069, 0x003f, 0xe06c, 0x93d2, 0xe06e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9295, 0x91eb, - 0xedf1, 0x003f, 0x003f, 0x003f, 0x90a3, 0x003f, 0x003f, 0x003f, - 0xe06f, 0x003f, 0xe071, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe070, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9ff3, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe072, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x93e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe073, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x89ce, 0x003f, 0x003f, 0x003f, 0x9394, - 0x8a44, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b84, 0x003f, 0x003f, 0x003f, 0x8edc, 0x8dd0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedf2, 0x003f, 0x003f, - 0x003f, 0x9846, 0x9086, 0x003f, 0x003f, 0x003f, 0x898a, 0x003f, - 0x003f, 0x003f, 0xe075, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe074, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedf3, 0xe078, 0x9259, 0xe07b, 0xe076, - 0x003f, 0x003f, 0x003f, 0xe07a, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe079, 0x935f, 0x88d7, 0xed46, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x97f3, 0x003f, 0x003f, 0xe07d, 0x003f, 0x003f, 0x003f, 0x8947, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe080, 0x003f, 0x003f, 0x003f, 0xe07e, 0x003f, 0xe07c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe077, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9642, 0x003f, 0x003f, 0x003f, 0xe082, 0x003f, 0x003f, - /* 0x7100 .. 0x71ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xedf5, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe081, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedf4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x898b, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe084, 0x95b0, 0x003f, 0xe083, 0x003f, 0x003f, 0x003f, - 0x003f, 0x96b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x8fc5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9152, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8fc4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedf7, 0xedf8, - 0x003f, 0x97f9, 0x003f, 0x003f, 0xe08a, 0x003f, 0x90f7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe086, 0xe08b, 0x003f, - 0x003f, 0x898c, 0x003f, 0x003f, 0xedf6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe089, 0x003f, 0x9481, 0xe085, 0xe088, 0x8fc6, - 0x003f, 0x94cf, 0x003f, 0x003f, 0xe08c, 0x003f, 0x8ecf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x90f8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe08f, 0x003f, 0x003f, 0x003f, - 0xe087, 0x003f, 0x8c46, 0x003f, 0x003f, 0x003f, 0x003f, 0xe08d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x976f, 0xe090, 0x003f, 0x003f, - 0x003f, 0xeaa4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f6e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe091, 0x003f, 0x003f, 0x003f, 0xe092, 0x003f, 0x003f, 0x003f, - 0x003f, 0x944d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe094, 0x003f, 0x003f, 0x003f, 0x003f, 0xe095, 0x003f, - 0x003f, 0xedfa, 0x003f, 0x9452, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9395, 0xe097, 0x003f, 0x003f, 0x003f, 0x003f, 0xe099, 0x003f, - 0x97d3, 0x003f, 0xe096, 0x003f, 0xe098, 0x898d, 0x003f, 0xe093, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9a7a, - 0xe09a, 0x003f, 0x003f, 0x003f, 0x003f, 0x9187, 0x8e57, 0xe09c, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe09b, 0x9043, 0x99d7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe09d, 0x003f, 0x003f, - 0x003f, 0xe09f, 0x003f, 0xe08e, 0xe09e, 0x003f, 0xedfb, 0xe0a0, - /* 0x7200 .. 0x72ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x949a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0a1, 0x003f, 0x003f, - 0xe0a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0a3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0a4, 0x003f, 0x92dc, 0x003f, 0xe0a6, 0xe0a5, 0x003f, 0x003f, - 0xe0a7, 0x003f, 0xe0a8, 0x003f, 0x003f, 0x8edd, 0x9583, 0x003f, - 0x003f, 0x003f, 0x96ea, 0xe0a9, 0xe0aa, 0x9175, 0x8ea2, 0xe0ab, - 0xe0ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ad, 0x95d0, - 0x94c5, 0x003f, 0x003f, 0xe0ae, 0x9476, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x92ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0af, 0x89e5, 0x003f, 0x8b8d, 0x003f, 0x96c4, 0x003f, 0x96b4, - 0x003f, 0x89b2, 0x9853, 0x003f, 0x003f, 0x003f, 0x003f, 0x9671, - 0x003f, 0x95a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x90b5, 0x003f, 0xe0b0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x93c1, 0x003f, 0x003f, 0x003f, 0x8ca1, 0xe0b1, 0x003f, - 0x8dd2, 0xe0b3, 0xe0b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0b4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe0b5, 0x003f, 0x003f, 0x003f, 0xe0b6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b5d, 0x003f, 0xe0b7, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0b8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8ca2, 0x003f, 0x003f, 0x94c6, - 0x003f, 0xedfc, 0xe0ba, 0x003f, 0x003f, 0x003f, 0x8ff3, 0x003f, - 0x003f, 0xe0b9, 0x003f, 0x003f, 0x003f, 0x003f, 0xee40, 0x003f, - 0x003f, 0x003f, 0x8bb6, 0xe0bb, 0xe0bd, 0x003f, 0xe0bc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0be, 0x003f, - 0x8ccf, 0x003f, 0xe0bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x8be7, - 0x003f, 0x915f, 0x003f, 0x8d9d, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0c1, 0xe0c2, 0xe0c0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8eeb, 0x003f, 0x003f, 0x93c6, 0x8bb7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0c4, - 0x924b, 0xe0c3, 0x003f, 0x003f, 0x9854, 0x9482, 0x003f, 0x003f, - /* 0x7300 .. 0x73ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe0c7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0c9, 0xe0c6, - 0x003f, 0x003f, 0x003f, 0x96d2, 0xe0c8, 0xe0ca, 0x003f, 0x97c2, - 0x003f, 0x003f, 0x003f, 0x003f, 0xee41, 0xe0ce, 0x003f, 0x003f, - 0x003f, 0xe0cd, 0x9296, 0x944c, 0x003f, 0x003f, 0x8ca3, 0xe0cc, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0cb, 0x003f, 0x9750, 0x9751, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0cf, 0x898e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8d96, 0x8e82, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0d0, 0xe0d1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0d3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8f62, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0d5, 0x003f, 0xe0d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0d6, 0x003f, 0x8a6c, 0x003f, 0x003f, 0xe0d8, 0x003f, 0xee43, - 0xe0d7, 0x003f, 0xe0da, 0xe0d9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8cba, 0x003f, 0x003f, 0x97a6, - 0x003f, 0x8bca, 0x003f, 0x89a4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8be8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8adf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x97e6, 0xe0dc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0de, 0x003f, 0xee44, 0x003f, 0x003f, - 0xe0df, 0x003f, 0x89cf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0db, 0xee45, 0x8e58, 0x003f, 0x003f, 0x92bf, 0xe0dd, 0x003f, - 0x003f, 0x003f, 0xee48, 0x003f, 0x003f, 0x003f, 0xee46, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0e2, 0x003f, - 0x8eec, 0x003f, 0x003f, 0xee47, 0x003f, 0xe0e0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8c5d, 0x003f, 0x003f, 0x94c7, 0xe0e1, 0x003f, - 0x003f, 0xe0fc, 0x003f, 0x003f, 0x003f, 0xee4a, 0x003f, 0x003f, - 0xe0e7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8cbb, 0x003f, - /* 0x7400 .. 0x74ff */ - 0x003f, 0x003f, 0x003f, 0x8b85, 0x003f, 0xe0e4, 0x979d, 0xee49, - 0x003f, 0x97ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x91f4, 0x003f, 0x003f, 0xe0e6, 0xee4b, 0x003f, - 0x003f, 0xee4d, 0xee4c, 0x003f, 0x003f, 0x003f, 0xee4e, 0x003f, - 0x003f, 0x003f, 0xe0e8, 0x97d4, 0x8bd5, 0x94fa, 0x9469, 0x003f, - 0x003f, 0x003f, 0xe0e9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0eb, - 0x003f, 0xe0ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ea, 0x003f, 0x003f, - 0x003f, 0xe0ed, 0x8ce8, 0x896c, 0xe0ef, 0x003f, 0x9090, 0xe0ec, - 0x97da, 0x003f, 0xee4f, 0xe0f2, 0xeaa2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe0f0, 0xe0f3, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0e5, - 0xe0f1, 0x003f, 0x003f, 0x8dba, 0x003f, 0x003f, 0xe0f4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0f5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x979e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xee50, 0x003f, 0xe0f6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0f7, 0xee51, - 0x003f, 0x003f, 0xe0e3, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0f8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8ac2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8ea3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe0f9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0fa, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0fb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x895a, 0x003f, 0x003f, 0x003f, - 0xe140, 0x003f, 0x955a, 0xe141, 0x003f, 0x003f, 0x8aa2, 0xe142, - 0x003f, 0xe143, 0x003f, 0x003f, 0x003f, 0x003f, 0xe144, 0x003f, - 0xe146, 0xe147, 0xe145, 0x003f, 0x003f, 0x003f, 0x9572, 0xe149, - 0xe148, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7500 .. 0x75ff */ - 0x003f, 0xee52, 0x003f, 0xe14b, 0xe14a, 0xe14c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe14d, 0xe14f, 0xe14e, 0x003f, - 0x003f, 0x8d99, 0x003f, 0xe151, 0x003f, 0xe150, 0x003f, 0x003f, - 0x8ac3, 0x003f, 0x9072, 0x003f, 0x935b, 0x003f, 0xe152, 0x90b6, - 0x003f, 0x003f, 0x003f, 0x8e59, 0x003f, 0x8999, 0xe153, 0x003f, - 0x9770, 0x003f, 0x003f, 0x95e1, 0xe154, 0x003f, 0x003f, 0xed8c, - 0x9363, 0x9752, 0x8d62, 0x905c, 0x003f, 0x003f, 0x003f, 0x926a, - 0x99b2, 0x003f, 0x92ac, 0x89e6, 0xe155, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe156, 0x003f, 0xe15b, 0x003f, - 0x003f, 0xe159, 0xe158, 0x9dc0, 0x8a45, 0xe157, 0x003f, 0x88d8, - 0x003f, 0x94a8, 0x003f, 0x003f, 0x94c8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x97af, 0xe15c, 0xe15a, 0x927b, 0x90a4, 0x003f, 0x003f, - 0x94a9, 0x003f, 0x954c, 0x003f, 0xe15e, 0x97aa, 0x8c6c, 0xe15f, - 0x003f, 0xe15d, 0x94d4, 0xe160, 0x003f, 0xe161, 0x003f, 0xee53, - 0x88d9, 0x003f, 0x003f, 0x8ff4, 0xe166, 0x003f, 0xe163, 0x93eb, - 0xe162, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8b45, - 0x003f, 0x003f, 0xe169, 0x003f, 0x003f, 0x003f, 0xe164, 0xe165, - 0x003f, 0xe168, 0xe167, 0x9544, 0x003f, 0x003f, 0x9161, 0x9160, - 0x003f, 0x8b5e, 0x003f, 0x003f, 0xe16a, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe16b, 0x003f, 0x003f, 0xe16c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe16e, 0x003f, 0xe16d, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8975, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe176, 0x94e6, 0xe170, 0x003f, 0xe172, 0x003f, 0x003f, - 0xe174, 0x905d, 0x003f, 0x003f, 0xe175, 0xe173, 0x8ebe, 0x003f, - 0x003f, 0x003f, 0xe16f, 0xe171, 0x003f, 0x9561, 0x003f, 0x8fc7, - 0x003f, 0x003f, 0xe178, 0x003f, 0x003f, 0xe177, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe179, 0x003f, 0x8ea4, 0x8dad, 0x003f, 0x003f, - 0x9397, 0xe17a, 0x003f, 0x92c9, 0x003f, 0x003f, 0xe17c, 0x003f, - 0x003f, 0x003f, 0x979f, 0xe17b, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9189, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe182, 0x003f, 0xe184, 0xe185, 0x9273, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe183, 0x003f, 0xe180, 0x003f, 0xe17d, 0xe17e, - /* 0x7600 .. 0x76ff */ - 0x003f, 0xe181, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe188, 0x003f, 0xe186, 0x003f, 0xe187, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe189, - 0xe18b, 0xe18c, 0xe18d, 0x003f, 0xe18e, 0x003f, 0x003f, 0xe18a, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe190, 0x003f, 0x003f, 0x003f, 0xe18f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe191, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x97c3, 0x003f, 0x003f, 0x003f, 0xe194, 0xe192, - 0xe193, 0x003f, 0x003f, 0x003f, 0x8ae0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x96fc, 0x003f, 0x003f, 0x003f, 0x95c8, 0x003f, - 0xe196, 0x003f, 0x003f, 0x003f, 0xe195, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe197, 0xe198, 0x003f, 0x003f, 0x003f, 0x003f, 0xe19c, - 0xe199, 0xe19a, 0xe19b, 0x003f, 0xe19d, 0x003f, 0x003f, 0x003f, - 0xe19e, 0x003f, 0xe19f, 0x003f, 0x003f, 0x003f, 0xe1a0, 0x003f, - 0xe1a1, 0x003f, 0x94ad, 0x936f, 0xe1a2, 0x9492, 0x9553, 0x003f, - 0xe1a3, 0x003f, 0xee54, 0xe1a4, 0x9349, 0x003f, 0x8a46, 0x8d63, - 0xe1a5, 0x003f, 0x003f, 0xe1a6, 0x003f, 0x003f, 0xe1a7, 0x003f, - 0x8e48, 0x003f, 0x003f, 0xe1a9, 0x003f, 0x003f, 0xe1a8, 0x003f, - 0x003f, 0xe1aa, 0xe1ab, 0xee57, 0xee55, 0x003f, 0xee56, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee58, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x94e7, 0x003f, - 0xe1ac, 0x003f, 0x003f, 0x003f, 0xe1ad, 0x003f, 0x003f, 0xea89, - 0xe1ae, 0xe1af, 0xe1b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x8e4d, - 0x003f, 0x003f, 0xe1b1, 0x9475, 0x003f, 0x003f, 0x967e, 0x003f, - 0x896d, 0x003f, 0x8976, 0x003f, 0x003f, 0xe1b2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1b4, 0x003f, 0x003f, 0x003f, 0xe1b3, 0x9390, - 0x003f, 0x003f, 0x003f, 0x90b7, 0x9f58, 0x003f, 0xe1b5, 0x96bf, - 0x003f, 0xe1b6, 0x003f, 0x8ac4, 0x94d5, 0xe1b7, 0x003f, 0xe1b8, - 0x003f, 0x003f, 0xe1b9, 0x003f, 0x003f, 0x003f, 0x96da, 0x003f, - 0x003f, 0x003f, 0x96d3, 0x003f, 0x92bc, 0x003f, 0x003f, 0x003f, - 0x918a, 0x003f, 0x003f, 0xe1bb, 0x003f, 0x003f, 0x8f82, 0x003f, - /* 0x7700 .. 0x77ff */ - 0x003f, 0x8fc8, 0x003f, 0x003f, 0xe1be, 0x003f, 0x003f, 0xe1bd, - 0xe1bc, 0x94fb, 0x003f, 0x8ac5, 0x8ca7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe1c4, 0x003f, 0x003f, 0xe1c1, 0x905e, - 0x96b0, 0x003f, 0x003f, 0x003f, 0xe1c0, 0xe1c2, 0xe1c3, 0x003f, - 0x003f, 0xe1bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1c5, - 0xe1c6, 0x003f, 0x92ad, 0x003f, 0x8ae1, 0x003f, 0x003f, 0x003f, - 0x9285, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee5a, 0xe1c7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1c8, 0xe1cb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9087, 0x003f, 0x93c2, 0x003f, 0xe1cc, 0x9672, 0x003f, - 0xe1c9, 0x003f, 0x003f, 0xe1ca, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe1cf, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1ce, 0xe1cd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe1d1, 0x003f, 0x003f, 0xe1d0, 0x003f, - 0x003f, 0xe1d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1d4, 0x003f, - 0xe1d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x95cb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8f75, 0x97c4, 0x003f, 0x003f, - 0xe1d5, 0x003f, 0x003f, 0x93b5, 0x003f, 0x003f, 0xe1d6, 0x003f, - 0x003f, 0xe1d7, 0x003f, 0xe1db, 0xe1d9, 0xe1da, 0x003f, 0xe1d8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1dc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1dd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1de, - 0x003f, 0x003f, 0xe1df, 0x96b5, 0xe1e0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x96ee, 0xe1e1, 0x003f, 0x926d, 0x003f, 0x948a, - 0x003f, 0x8be9, 0x003f, 0x003f, 0x003f, 0x925a, 0xe1e2, 0x8bb8, - 0x003f, 0x003f, 0x003f, 0x90ce, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e3, 0x003f, 0x003f, 0x003f, - /* 0x7800 .. 0x78ff */ - 0x003f, 0x003f, 0x8dbb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1e5, 0x003f, 0x8ca4, 0x8dd3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe1e7, 0xee5c, 0x003f, 0x003f, 0x003f, 0x9375, 0x8dd4, 0x8b6d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9643, 0x003f, 0x946a, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9376, 0x003f, 0x003f, 0x003f, 0x003f, 0x8d7b, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee5d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8fc9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xee5e, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x97b0, 0x8d64, 0x003f, 0x003f, 0x8ca5, - 0x003f, 0x003f, 0x94a1, 0x003f, 0xe1eb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xee5f, 0x003f, 0xe1ed, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8ce9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1ec, 0x92f4, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1ef, 0x8a56, 0xe1ea, 0x003f, - 0x003f, 0x94e8, 0x003f, 0x894f, 0x003f, 0x8dea, 0x003f, 0x9871, - 0x003f, 0x003f, 0xe1ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe1f0, 0x003f, 0x003f, 0x003f, 0x95c9, - 0x003f, 0x90d7, 0xe1f2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1f3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1f1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8a6d, 0x003f, 0xe1f9, 0x003f, 0xe1f8, 0x003f, - 0x003f, 0x8ea5, 0x003f, 0x003f, 0x003f, 0xe1fa, 0xe1f5, 0x003f, - 0x003f, 0x003f, 0xe1fb, 0xe1f6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x94d6, 0xe1f4, 0x003f, 0x003f, 0xe1f7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe241, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe240, - 0x9681, 0x003f, 0x003f, 0x003f, 0xe1fc, 0x003f, 0x003f, 0x88e9, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe243, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe242, 0x003f, 0x003f, - /* 0x7900 .. 0x79ff */ - 0x003f, 0x8fca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe244, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9162, 0x003f, - 0x003f, 0xe246, 0xe245, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe247, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1e6, 0x003f, - 0x003f, 0x003f, 0xe1e8, 0xe249, 0xe248, 0x003f, 0x003f, 0x003f, - 0xee60, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8ea6, 0x003f, 0x97e7, 0x003f, 0x8ed0, 0x003f, - 0xe24a, 0x8c56, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8b5f, - 0x8b46, 0x8e83, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9753, 0x003f, 0x003f, 0xe250, 0x003f, 0xe24f, 0x9163, 0xe24c, - 0x003f, 0x003f, 0xe24e, 0x003f, 0x003f, 0x8f6a, 0x905f, 0xe24d, - 0xe24b, 0x003f, 0x9449, 0x003f, 0x003f, 0x8fcb, 0x003f, 0x003f, - 0x955b, 0x003f, 0x003f, 0x003f, 0x003f, 0x8dd5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9398, - 0x003f, 0x003f, 0xe251, 0x003f, 0x003f, 0x003f, 0x003f, 0xe252, - 0xe268, 0x8bd6, 0x003f, 0x003f, 0x985c, 0x9154, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe253, 0x003f, 0x003f, 0x89d0, 0x92f5, 0x959f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xee64, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xee66, 0x003f, 0xe254, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8b9a, 0xe255, - 0x003f, 0x003f, 0xe257, 0x003f, 0x003f, 0x003f, 0xe258, 0x003f, - 0x9448, 0x003f, 0x003f, 0xe259, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe25a, 0xe25b, 0x003f, 0x003f, 0x8bd7, 0x89d1, 0x93c3, - 0x8f47, 0x8e84, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe25c, 0x003f, 0x8f48, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x89c8, 0x9562, 0x003f, 0x003f, 0xe25d, 0x003f, 0x003f, - 0x94e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9164, - 0x003f, 0xe260, 0x003f, 0xe261, 0x9489, 0x003f, 0x9060, 0xe25e, - 0x003f, 0x9281, 0x003f, 0x003f, 0xe25f, 0x003f, 0x003f, 0x003f, - 0x8fcc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x88da, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7a00 .. 0x7aff */ - 0x8b48, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe262, 0x003f, 0x003f, 0x92f6, 0x003f, 0xe263, 0x90c5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x96ab, 0x003f, 0x003f, 0x9542, - 0xe264, 0xe265, 0x9274, 0x003f, 0x97c5, 0x003f, 0x003f, 0xe267, - 0xe266, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8eed, 0x003f, - 0x003f, 0xe269, 0x88ee, 0x003f, 0x003f, 0x003f, 0x003f, 0xe26c, - 0x003f, 0x003f, 0x003f, 0xe26a, 0x89d2, 0x8c6d, 0xe26b, 0x8d65, - 0x8d92, 0x003f, 0x95e4, 0xe26d, 0x003f, 0x003f, 0x9673, 0x003f, - 0x003f, 0xe26f, 0x003f, 0x003f, 0x003f, 0x90cf, 0x896e, 0x89b8, - 0x88aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe26e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe270, 0xe271, 0x8ff5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe272, 0x003f, 0x8a6e, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe274, 0x003f, 0x003f, 0x003f, 0x8c8a, 0x003f, 0x8b86, 0x003f, - 0x003f, 0xe275, 0x8bf3, 0x003f, 0x003f, 0xe276, 0x003f, 0x90fa, - 0x003f, 0x93cb, 0x003f, 0x90de, 0x8df3, 0x003f, 0x003f, 0x003f, - 0xe277, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9282, 0x918b, 0x003f, 0xe279, 0xe27b, 0xe278, - 0xe27a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c41, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe27c, 0x8c45, 0x003f, 0x003f, 0x003f, 0x8b87, 0x9771, - 0xe27e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe280, 0x003f, - 0x003f, 0x003f, 0x894d, 0x003f, 0x003f, 0x003f, 0x003f, 0xe283, - 0x003f, 0x003f, 0x003f, 0x8a96, 0xe282, 0xe281, 0x003f, 0xe285, - 0xe27d, 0x003f, 0xe286, 0x97a7, 0x003f, 0xe287, 0x003f, 0xe288, - 0x003f, 0xee67, 0x9af2, 0xe28a, 0x003f, 0xe289, 0x003f, 0x003f, - 0x003f, 0xe28b, 0xe28c, 0x003f, 0x97b3, 0xe28d, 0x003f, 0xe8ed, - 0x8fcd, 0xe28e, 0xe28f, 0x8f76, 0x003f, 0x93b6, 0xe290, 0xee68, - 0x003f, 0x003f, 0x9247, 0xee6a, 0x003f, 0xe291, 0x003f, 0x925b, - 0xe292, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8ba3, 0x003f, - 0x995e, 0x927c, 0x8eb1, 0x003f, 0x003f, 0x003f, 0x003f, 0x8ac6, - /* 0x7b00 .. 0x7bff */ - 0x003f, 0x003f, 0xe293, 0x003f, 0xe2a0, 0x003f, 0xe296, 0x003f, - 0x8b88, 0x003f, 0xe295, 0xe2a2, 0x003f, 0x003f, 0x003f, 0xe294, - 0x003f, 0x8fce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe298, 0xe299, 0x003f, 0x934a, 0x003f, 0x003f, 0xe29a, 0x003f, - 0x8a7d, 0x003f, 0x003f, 0x003f, 0x003f, 0x9079, 0x9584, 0x003f, - 0xe29c, 0x003f, 0x003f, 0x003f, 0x91e6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe297, 0x003f, 0xe29b, 0xe29d, 0x003f, - 0x003f, 0x8df9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2a4, 0x954d, 0x003f, - 0x94a4, 0x9399, 0x003f, 0x8bd8, 0xe2a3, 0xe2a1, 0x003f, 0x94b3, - 0xe29e, 0x927d, 0x939b, 0x003f, 0x939a, 0x003f, 0x8df4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2b6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2a6, 0x003f, 0xe2a8, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2ab, 0x003f, 0xe2ac, 0x003f, - 0xe2a9, 0xe2aa, 0x003f, 0x003f, 0xe2a7, 0xe2a5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe29f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x95cd, 0x89d3, - 0x003f, 0x003f, 0x003f, 0xe2b3, 0x003f, 0xe2b0, 0x003f, 0xe2b5, - 0x003f, 0x003f, 0xe2b4, 0x003f, 0x9493, 0x96a5, 0x003f, 0x8e5a, - 0xe2ae, 0xe2b7, 0xe2b2, 0x003f, 0xe2b1, 0xe2ad, 0xee6b, 0xe2af, - 0x003f, 0x8ac7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x925c, 0x003f, 0x003f, 0x90fb, 0x003f, 0x003f, - 0x003f, 0x94a0, 0x003f, 0x003f, 0xe2bc, 0x003f, 0x003f, 0x003f, - 0x94a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x90df, 0xe2b9, 0x003f, 0x003f, 0x94cd, 0x003f, 0xe2bd, 0x95d1, - 0x003f, 0x927a, 0x003f, 0xe2b8, 0xe2ba, 0x003f, 0x003f, 0xe2bb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2be, 0x003f, 0x003f, - 0x8ec2, 0x003f, 0x003f, 0x003f, 0x93c4, 0xe2c3, 0xe2c2, 0x003f, - 0x003f, 0xe2bf, 0x003f, 0x003f, 0x003f, 0x9855, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2c8, 0x003f, 0x003f, 0xe2cc, 0xe2c9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7c00 .. 0x7cff */ - 0xe2c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2c6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2cb, 0x003f, 0x003f, - 0x003f, 0xe2c0, 0x99d3, 0xe2c7, 0xe2c1, 0x003f, 0x003f, 0xe2ca, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d0, - 0x003f, 0x8ac8, 0x003f, 0xe2cd, 0x003f, 0x003f, 0x003f, 0xe2ce, - 0x003f, 0x003f, 0xe2cf, 0xe2d2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d1, - 0x94f4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d3, 0x97fa, 0x95eb, - 0xe2d8, 0x003f, 0x003f, 0xe2d5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d4, 0x90d0, 0x003f, 0xe2d7, - 0xe2d9, 0x003f, 0x003f, 0x003f, 0xe2d6, 0x003f, 0xe2dd, 0x003f, - 0xe2da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2db, - 0xe2c4, 0x003f, 0x003f, 0x003f, 0xe2dc, 0xe2de, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2df, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x95c4, 0x003f, 0xe2e0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x96e0, 0x003f, - 0x003f, 0x8bcc, 0x8c48, 0xe2e1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x95b2, 0x003f, 0x9088, 0x003f, 0x96ae, 0x003f, 0x003f, - 0xe2e2, 0x003f, 0x97b1, 0x003f, 0x003f, 0x9494, 0x003f, 0x9165, - 0x9453, 0x003f, 0x003f, 0x8f6c, 0x003f, 0x003f, 0x003f, 0x88be, - 0x003f, 0xe2e7, 0xe2e5, 0x003f, 0xe2e3, 0x8a9f, 0x003f, 0x8fcf, - 0xe2e8, 0x003f, 0x003f, 0xe2e6, 0x003f, 0xe2e4, 0xe2ec, 0x003f, - 0x003f, 0xe2eb, 0xe2ea, 0xe2e9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe2ed, 0x003f, 0x003f, 0x003f, 0xe2ee, 0x90b8, 0x003f, - 0xe2ef, 0x003f, 0xe2f1, 0x003f, 0x003f, 0xe2f0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8cd0, 0x003f, 0x003f, 0x003f, 0x9157, 0x003f, - 0x003f, 0x003f, 0xe2f3, 0x003f, 0x003f, 0x003f, 0x939c, 0x003f, - 0xe2f2, 0x003f, 0x003f, 0x003f, 0xe2f4, 0x003f, 0x95b3, 0x918c, - 0x8d66, 0x003f, 0xe2f5, 0x003f, 0x003f, 0x003f, 0x003f, 0x97c6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2f7, - 0x003f, 0x003f, 0xe2f8, 0x003f, 0xe2f9, 0x003f, 0xe2fa, 0x003f, - 0x8e85, 0x003f, 0xe2fb, 0x8c6e, 0x003f, 0x003f, 0x8b8a, 0x003f, - /* 0x7d00 .. 0x7dff */ - 0x8b49, 0x003f, 0xe340, 0x003f, 0x96f1, 0x8d67, 0xe2fc, 0x003f, - 0x003f, 0x003f, 0xe343, 0x96e4, 0x003f, 0x945b, 0x003f, 0x003f, - 0x9552, 0x003f, 0x003f, 0x003f, 0x8f83, 0xe342, 0x003f, 0x8ed1, - 0x8d68, 0x8e86, 0x8b89, 0x95b4, 0xe341, 0x003f, 0x003f, 0x003f, - 0x9166, 0x9661, 0x8df5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8e87, 0x92db, 0x003f, 0xe346, 0x97dd, - 0x8dd7, 0x003f, 0xe347, 0x9061, 0x003f, 0xe349, 0x003f, 0x003f, - 0x003f, 0x8fd0, 0x8dae, 0x003f, 0x003f, 0x003f, 0x003f, 0xe348, - 0x003f, 0x003f, 0x8f49, 0x8cbc, 0x9167, 0xe344, 0xe34a, 0x003f, - 0xee6d, 0x003f, 0x003f, 0xe345, 0x8c6f, 0x003f, 0xe34d, 0xe351, - 0x8c8b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe34c, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe355, 0xee6e, 0x003f, 0x8d69, 0x003f, - 0x003f, 0x978d, 0x88ba, 0xe352, 0x003f, 0x003f, 0x8b8b, 0x003f, - 0xe34f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe350, 0x003f, - 0x003f, 0x939d, 0xe34e, 0xe34b, 0x003f, 0x8a47, 0x90e2, 0x003f, - 0x003f, 0x8ca6, 0x003f, 0x003f, 0x003f, 0xe357, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe354, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe356, - 0x003f, 0x003f, 0x003f, 0xe353, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8c70, 0x91b1, 0xe358, 0x918e, 0x003f, 0x003f, 0xe365, - 0xee70, 0x003f, 0xe361, 0xe35b, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe35f, 0x8ef8, 0x88db, 0xe35a, 0xe362, - 0xe366, 0x8d6a, 0x96d4, 0x003f, 0x92d4, 0xe35c, 0x003f, 0xee6f, - 0xe364, 0x003f, 0xe359, 0x925d, 0x003f, 0xe35e, 0x88bb, 0x96c8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe35d, - 0x003f, 0x003f, 0x8bd9, 0x94ea, 0x003f, 0x003f, 0x003f, 0x918d, - 0x003f, 0x97ce, 0x8f8f, 0x003f, 0x003f, 0xe38e, 0xee71, 0x003f, - 0xe367, 0x003f, 0x90fc, 0x003f, 0xe363, 0xe368, 0xe36a, 0x003f, - 0x92f7, 0xe36d, 0x003f, 0x003f, 0xe369, 0x003f, 0x003f, 0x003f, - 0x95d2, 0x8ac9, 0x003f, 0x003f, 0x96c9, 0x003f, 0x003f, 0x88dc, - 0x003f, 0x003f, 0xe36c, 0x003f, 0x97fb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe36b, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7e00 .. 0x7eff */ - 0x003f, 0x898f, 0x003f, 0x003f, 0x93ea, 0xe36e, 0x003f, 0x003f, - 0x003f, 0xe375, 0xe36f, 0xe376, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe372, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x949b, 0x003f, 0x003f, 0x8ec8, 0xe374, - 0x003f, 0xe371, 0xe377, 0xe370, 0x003f, 0x003f, 0x8f63, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9644, 0x003f, 0x003f, 0x8f6b, 0x003f, - 0x003f, 0xe373, 0xe380, 0x003f, 0x003f, 0xe37b, 0x003f, 0xe37e, - 0x003f, 0xe37c, 0xe381, 0xe37a, 0x003f, 0xe360, 0x90d1, 0x003f, - 0x003f, 0x94c9, 0x003f, 0xe37d, 0x003f, 0x003f, 0xe378, 0x003f, - 0x003f, 0x003f, 0x9140, 0x8c71, 0x003f, 0x8f4a, 0x003f, 0x003f, - 0x003f, 0x003f, 0xee72, 0x003f, 0x9044, 0x9155, 0xe384, 0x003f, - 0x003f, 0xe386, 0xe387, 0x003f, 0x003f, 0xe383, 0xe385, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe379, 0xe382, - 0x003f, 0xe38a, 0xe389, 0x003f, 0x003f, 0x969a, 0x003f, 0x003f, - 0x8c4a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe388, 0x003f, 0xe38c, 0xe38b, 0xe38f, 0x003f, 0xe391, - 0x003f, 0x003f, 0x8e5b, 0xe38d, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe392, 0xe393, 0xed40, 0x003f, 0xe394, 0x003f, 0xe39a, 0x935a, - 0xe396, 0x003f, 0xe395, 0xe397, 0xe398, 0x003f, 0xe399, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe39b, 0xe39c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7f00 .. 0x7fff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8aca, 0x003f, - 0xe39d, 0x003f, 0xe39e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe39f, 0x003f, 0xee73, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a0, 0xe3a1, 0xe3a2, 0x003f, - 0xe3a3, 0xe3a4, 0x003f, 0x003f, 0xe3a6, 0xe3a5, 0x003f, 0x003f, - 0xe3a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a8, - 0xe3a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3ac, - 0xe3aa, 0xe3ab, 0x8ddf, 0x8c72, 0x003f, 0x003f, 0x9275, 0x003f, - 0x94b1, 0x003f, 0x8f90, 0x003f, 0x003f, 0x946c, 0x003f, 0x94eb, - 0xe3ad, 0x9ceb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3ae, 0xe3b0, 0x003f, 0x9785, 0xe3af, 0xe3b2, - 0xe3b1, 0x003f, 0x9772, 0x003f, 0xe3b3, 0x003f, 0x94fc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe3b4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3b7, 0x003f, 0x003f, 0xe3b6, 0xe3b5, 0x003f, - 0x003f, 0xee74, 0x003f, 0xe3b8, 0x8c51, 0x003f, 0x003f, 0x003f, - 0x9141, 0x8b60, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3bc, 0xe3b9, - 0x003f, 0x003f, 0xe3ba, 0x003f, 0x003f, 0x003f, 0xe3bd, 0x003f, - 0xe3be, 0xe3bb, 0x003f, 0x003f, 0x003f, 0x8948, 0x003f, 0x003f, - 0x003f, 0x89a5, 0x003f, 0x003f, 0x003f, 0xe3c0, 0xe3c1, 0x003f, - 0x003f, 0x003f, 0xe3c2, 0x003f, 0x9782, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8f4b, 0x003f, 0xe3c4, 0xe3c3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9089, 0xe3c5, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3c6, 0x003f, - 0x003f, 0xe3c7, 0x003f, 0x8ae3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8acb, 0x003f, 0x003f, 0xe3c8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3c9, 0x003f, 0x967c, 0x9783, 0x003f, 0x003f, 0x003f, - /* 0x8000 .. 0x80ff */ - 0x9773, 0x9856, 0x003f, 0x8d6c, 0xe3cc, 0x8ed2, 0xe3cb, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3cd, 0x8ea7, 0x003f, 0x003f, 0x003f, - 0x91cf, 0x003f, 0xe3ce, 0x003f, 0x003f, 0x8d6b, 0x003f, 0x96d5, - 0xe3cf, 0xe3d0, 0x003f, 0x003f, 0xe3d1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe3d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8ea8, 0x003f, 0x003f, 0x96eb, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3d5, 0x003f, 0x925e, 0x003f, 0xe3d4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3d7, 0x003f, - 0x003f, 0x003f, 0xe3d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3d8, 0x003f, 0x003f, 0x003f, 0x90b9, 0x003f, - 0xe3d9, 0x003f, 0xe3da, 0x003f, 0x003f, 0x003f, 0x95b7, 0xe3db, - 0x003f, 0x918f, 0xe3dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe3dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x97fc, - 0xe3e0, 0x003f, 0xe3df, 0xe3de, 0x92ae, 0x003f, 0xe3e1, 0x9045, - 0x003f, 0xe3e2, 0x003f, 0x003f, 0x003f, 0xe3e3, 0x9857, 0xe3e4, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe3e5, 0xe3e7, 0xe3e6, 0x94a3, - 0x003f, 0x93f7, 0x003f, 0x985d, 0x94a7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3e9, 0x003f, 0x003f, 0x8fd1, 0x003f, - 0x9549, 0x003f, 0xe3ea, 0xe3e8, 0x003f, 0x8acc, 0x003f, 0x003f, - 0x003f, 0x8cd2, 0x8e88, 0x003f, 0x003f, 0x94ec, 0x003f, 0x003f, - 0x003f, 0x8ca8, 0x9662, 0x003f, 0xe3ed, 0xe3eb, 0x003f, 0x8d6d, - 0x003f, 0x8d6e, 0x88e7, 0x003f, 0x8de6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9478, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x88dd, 0xe3f2, 0x003f, 0x925f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9477, 0x003f, 0x91d9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3f4, 0x003f, - 0x003f, 0xe3f0, 0xe3f3, 0xe3ee, 0x003f, 0xe3f1, 0x9645, 0x003f, - 0x003f, 0x8cd3, 0x003f, 0x003f, 0x88fb, 0xe3ef, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3f6, - 0x003f, 0xe3f7, 0x003f, 0x003f, 0x93b7, 0x003f, 0x003f, 0x003f, - 0x8bb9, 0x003f, 0x003f, 0x003f, 0xe445, 0x945c, 0x003f, 0x003f, - /* 0x8100 .. 0x81ff */ - 0x003f, 0x003f, 0x8e89, 0x003f, 0x003f, 0x8bba, 0x90c6, 0x9865, - 0x96ac, 0xe3f5, 0x90d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8b72, 0xe3f8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3fa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3fb, - 0x003f, 0x9245, 0x003f, 0x945d, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x92af, 0x003f, 0x003f, 0x003f, 0x003f, 0xe442, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe441, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3fc, 0x003f, 0x003f, 0x9074, 0x003f, - 0x9585, 0xe444, 0x003f, 0xe443, 0x8d6f, 0x9872, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe454, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe448, 0xe449, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8eee, 0x003f, 0x003f, 0xe447, 0x003f, - 0x8d98, 0xe446, 0x003f, 0x003f, 0xe44a, 0x003f, 0x003f, 0x003f, - 0x92b0, 0x95a0, 0x9142, 0x003f, 0x003f, 0x003f, 0x003f, 0x91da, - 0xe44e, 0x003f, 0xe44f, 0xe44b, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe44c, 0x003f, 0xe44d, 0x003f, 0x003f, 0x003f, 0x003f, 0x8d70, - 0x003f, 0x003f, 0x003f, 0xe455, 0x003f, 0xe451, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9586, 0x003f, 0x968c, 0x9547, 0x003f, 0x003f, - 0xe450, 0x003f, 0x003f, 0xe453, 0xe452, 0x003f, 0x003f, 0x003f, - 0x9663, 0xe456, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe457, 0x003f, 0x003f, 0x9156, 0x003f, 0xe458, 0x003f, 0x003f, - 0xe45a, 0x003f, 0xe45e, 0x003f, 0x003f, 0xe45b, 0xe459, 0x945e, - 0xe45c, 0x003f, 0xe45d, 0x003f, 0x003f, 0x003f, 0x89b0, 0x003f, - 0xe464, 0xe45f, 0x003f, 0x003f, 0x003f, 0xe460, 0x003f, 0x003f, - 0x003f, 0xe461, 0x003f, 0x919f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe463, 0xe462, 0xe465, 0x003f, 0x003f, 0x003f, 0x003f, 0xe466, - 0xe467, 0x003f, 0x003f, 0x9062, 0x003f, 0x89e7, 0x003f, 0xe468, - 0x97d5, 0x003f, 0x8ea9, 0x003f, 0x003f, 0x8f4c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8e8a, 0x9276, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe469, 0xe46a, 0x8950, 0x003f, 0xe46b, 0x003f, - /* 0x8200 .. 0x82ff */ - 0x003f, 0xe46c, 0xe46d, 0x003f, 0x003f, 0xe46e, 0x003f, 0xe46f, - 0x8bbb, 0x9da8, 0xe470, 0x003f, 0x90e3, 0xe471, 0x8ec9, 0x003f, - 0xe472, 0x003f, 0x98ae, 0x003f, 0x003f, 0x003f, 0xe473, 0x95dc, - 0x8ada, 0x003f, 0x003f, 0x9143, 0x8f77, 0x003f, 0x9591, 0x8f4d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe474, 0x8d71, 0xe475, 0x94ca, 0x003f, 0xe484, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe477, 0x003f, 0x91c7, 0x9495, 0x8cbd, - 0xe476, 0x9144, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe478, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x92f8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe47a, 0xe479, 0xe47c, 0x003f, 0x003f, 0xe47b, 0x003f, 0xe47d, - 0x003f, 0x003f, 0xe480, 0x003f, 0xe47e, 0x003f, 0x8acd, 0x003f, - 0xe481, 0x003f, 0xe482, 0xe483, 0x003f, 0x003f, 0x8daf, 0x97c7, - 0x003f, 0xe485, 0x9046, 0x003f, 0x003f, 0x003f, 0x8990, 0xe486, - 0xe487, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe488, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x88f0, 0x003f, 0xe489, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe48a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9587, 0x003f, 0x003f, 0x003f, 0x8ec5, 0x003f, 0xe48c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8a48, 0x88b0, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe48b, 0xe48e, 0x946d, 0x003f, 0x9063, - 0x003f, 0x89d4, 0x003f, 0x9646, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8c7c, 0x8bda, 0x003f, 0xe48d, 0x003f, 0x89e8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8aa1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8991, 0xe492, 0x97e8, 0x91db, 0x003f, 0x003f, 0x9563, - 0x003f, 0xe49e, 0x003f, 0x89d5, 0xe49c, 0x003f, 0xe49a, 0xe491, - 0x003f, 0xe48f, 0x003f, 0xe490, 0x003f, 0x8ee1, 0x8bea, 0x9297, - 0x003f, 0x003f, 0x003f, 0x93cf, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8970, 0x003f, 0xe494, 0xe493, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe499, 0xe495, 0xe498, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8300 .. 0x83ff */ - 0x003f, 0xee76, 0x96ce, 0xe497, 0x89d6, 0x8a9d, 0xe49b, 0x003f, - 0x003f, 0xe49d, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c73, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4a1, 0xe4aa, - 0xe4ab, 0x003f, 0x003f, 0x003f, 0x88a9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4b2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x88ef, 0x003f, 0x003f, 0xe4a9, 0x003f, 0x003f, 0x003f, 0xe4a8, - 0x003f, 0xe4a3, 0xe4a2, 0x003f, 0xe4a0, 0xe49f, 0x9283, 0x003f, - 0x91f9, 0xe4a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4a4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4a7, 0x003f, 0x003f, - 0x003f, 0x9190, 0x8c74, 0x003f, 0x003f, 0x003f, 0x003f, 0x8960, - 0xe4a6, 0x003f, 0x8d72, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9191, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xee77, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4b8, 0x003f, 0xe4b9, 0x003f, 0x89d7, - 0x003f, 0x003f, 0x003f, 0x89ac, 0xe4b6, 0x003f, 0x003f, 0xee78, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4ac, 0x003f, 0xe4b4, - 0x003f, 0xe4bb, 0xe4b5, 0x003f, 0x003f, 0x003f, 0xe4b3, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe496, 0x003f, 0x003f, 0xe4b1, 0x003f, - 0x003f, 0x003f, 0xe4ad, 0x003f, 0x003f, 0x003f, 0x8ace, 0xe4af, - 0xe4ba, 0x003f, 0xe4b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4bc, 0x003f, 0xe4ae, 0x949c, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9789, 0x003f, 0x003f, 0x003f, 0xe4b7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4cd, 0x003f, 0x003f, - 0x003f, 0xe4c5, 0x003f, 0x003f, 0x003f, 0x909b, 0x003f, 0xee79, - 0x003f, 0x003f, 0x8b65, 0x003f, 0x8bdb, 0x003f, 0xe4c0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x89d9, 0x003f, 0x003f, 0x8fd2, 0x003f, - 0xe4c3, 0x003f, 0x003f, 0x003f, 0x8dd8, 0x003f, 0x003f, 0x9370, - 0xe4c8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x95ec, 0x003f, 0xe4bf, 0x003f, 0x003f, 0x003f, 0x89d8, - 0x8cd4, 0x9548, 0xe4c9, 0x003f, 0xe4bd, 0x003f, 0xee7a, 0xe4c6, - 0x003f, 0x003f, 0x003f, 0xe4d0, 0x003f, 0xe4c1, 0x003f, 0x003f, - /* 0x8400 .. 0x84ff */ - 0x003f, 0x003f, 0x003f, 0xe4c2, 0x93b8, 0x003f, 0x003f, 0xe4c7, - 0x003f, 0x003f, 0x003f, 0xe4c4, 0x9647, 0xe4ca, 0x88de, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4be, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4cc, 0x003f, 0xe4cb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x948b, 0xe4d2, 0x003f, 0xe4dd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8a9e, 0x003f, 0x003f, 0x003f, 0xe4e0, 0x003f, 0x003f, - 0xe4ce, 0x003f, 0x003f, 0x003f, 0xe4d3, 0x978e, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4dc, 0x003f, - 0xee7b, 0x9774, 0x003f, 0x003f, 0x003f, 0x003f, 0x97a8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9298, - 0x003f, 0x003f, 0x003f, 0x8a8b, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9592, 0xe4e2, 0x939f, 0x003f, 0x003f, 0x88af, 0x003f, - 0x003f, 0xe4db, 0x003f, 0xe4d7, 0x9192, 0xe4d1, 0xe4d9, 0xe4de, - 0x003f, 0x944b, 0x003f, 0x003f, 0x003f, 0x88a8, 0x003f, 0xe4d6, - 0x003f, 0xe4df, 0x9598, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe4da, 0x003f, 0xe4d5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8fd3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8f4e, 0x003f, 0x003f, 0x003f, 0x8eaa, 0x003f, 0x003f, 0x003f, - 0x003f, 0x96d6, 0x003f, 0x003f, 0x9566, 0x003f, 0x003f, 0xe4e5, - 0x003f, 0xe4ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8a97, 0x003f, 0xee7c, 0x003f, 0x003f, 0x003f, - 0x8ff6, 0xe4e3, 0x003f, 0xe4e8, 0x9193, 0x003f, 0x003f, 0xe4e4, - 0x003f, 0xe4eb, 0x003f, 0x003f, 0x927e, 0x003f, 0xe4ec, 0x003f, - 0x003f, 0x9775, 0xe4e1, 0x8a57, 0x003f, 0xe4e7, 0x003f, 0x003f, - 0xe4ea, 0x96aa, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4ed, 0x003f, - 0x003f, 0xe4e6, 0xe4e9, 0x003f, 0xed44, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x9648, 0x003f, 0x9840, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f8, 0x003f, 0x003f, 0xe4f0, - /* 0x8500 .. 0x85ff */ - 0x8ec1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4cf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x95cc, 0x003f, 0x96a0, 0xe4f7, 0xe4f6, 0x003f, 0xe4f2, - 0xe4f3, 0x003f, 0x8955, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f5, - 0x003f, 0xe4ef, 0x003f, 0x003f, 0x003f, 0x003f, 0x92d3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f4, 0x88fc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x91a0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x95c1, 0x003f, 0x003f, - 0xe4f9, 0xe540, 0x003f, 0x94d7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4fc, 0x8fd4, 0x8ec7, 0xe542, 0x003f, 0x003f, 0x8bbc, 0x003f, - 0x003f, 0x003f, 0x003f, 0xee7d, 0x003f, 0xe543, 0x003f, 0x9599, - 0xe4fb, 0xee7e, 0xe4d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4fa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x986e, 0x93a0, 0x9593, 0xee80, 0x003f, 0xe54a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe550, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe551, 0x003f, - 0xe544, 0x003f, 0x003f, 0x003f, 0x9496, 0x003f, 0x003f, 0xe54e, - 0xe546, 0x003f, 0xe548, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe552, 0xe547, 0x003f, 0x003f, 0xe54b, 0x003f, 0x003f, 0x8992, - 0x003f, 0x93e3, 0x003f, 0xe54c, 0xe54f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe545, 0x003f, 0x9145, 0x003f, - 0xe549, 0x8e46, 0x9064, 0x8c4f, 0x96f2, 0x003f, 0x96f7, 0x8f92, - 0xee82, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe556, 0xe554, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x986d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe553, 0x003f, 0x003f, 0x003f, 0x9795, 0x003f, 0xe555, - 0xe557, 0x003f, 0x003f, 0x003f, 0x003f, 0xe558, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe55b, 0xe559, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x93a1, 0xe55a, 0x003f, 0x003f, - 0x003f, 0x94cb, 0xe54d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f93, - 0x003f, 0xe55c, 0xe561, 0x9194, 0x003f, 0x003f, 0xe560, 0x003f, - /* 0x8600 .. 0x86ff */ - 0x003f, 0x003f, 0xe541, 0x003f, 0x003f, 0x003f, 0xe562, 0x9168, - 0x003f, 0x003f, 0xe55d, 0xe55f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe55e, 0x003f, 0x003f, 0x9f50, 0x9f41, - 0x003f, 0x003f, 0xe564, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe563, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9796, 0x003f, 0xe1ba, - 0xe565, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe566, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe567, 0x8cd5, 0x003f, - 0x8b73, 0x003f, 0x003f, 0x003f, 0xe569, 0x997c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8b95, 0x003f, 0x97b8, 0x003f, 0x8bf1, 0xe56a, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe56b, - 0x003f, 0x003f, 0x003f, 0x928e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe56c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x93f8, 0x003f, 0x88b8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x89e1, 0xe571, 0xe572, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe56d, 0x003f, 0x8e5c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe56e, 0x9461, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe56f, 0xe570, 0xe57a, 0x003f, 0x003f, 0x003f, 0xe574, - 0xe577, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe573, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe575, 0x003f, 0xe576, 0x8ed6, - 0x003f, 0xe578, 0x003f, 0x9260, 0x003f, 0x8c75, 0x8a61, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe57b, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8a5e, 0x003f, 0xe581, 0x003f, 0x003f, 0xe57c, 0xe580, - 0x003f, 0x003f, 0x003f, 0x003f, 0x94b8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe57d, 0x003f, 0x003f, 0xe57e, 0x9567, 0x94d8, 0xe582, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x91fb, 0xe58c, 0x003f, 0xe588, 0x003f, 0x003f, 0x89e9, 0x003f, - /* 0x8700 .. 0x87ff */ - 0xe586, 0x003f, 0x9649, 0xe587, 0x003f, 0x003f, 0xe584, 0x003f, - 0xe585, 0xe58a, 0xe58d, 0x003f, 0x003f, 0xe58b, 0x003f, 0x003f, - 0x003f, 0xe589, 0xe583, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9277, 0x003f, 0xe594, 0x003f, 0x96a8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe592, 0x003f, 0x003f, - 0x003f, 0xe593, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe58e, 0x003f, 0x003f, 0xe590, - 0x003f, 0x003f, 0x003f, 0xe591, 0x003f, 0x003f, 0x003f, 0xe58f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x90e4, 0x003f, 0x9858, 0xe598, 0x003f, 0xe599, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe59f, 0x003f, 0x9049, 0x003f, 0xe59b, - 0x003f, 0xe59e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe596, - 0xe595, 0x003f, 0x003f, 0xe5a0, 0x003f, 0x003f, 0x89da, 0x003f, - 0xe59c, 0x003f, 0xe5a1, 0x003f, 0x003f, 0x003f, 0xe59d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe59a, 0x003f, 0x92b1, 0x003f, - 0xe597, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9488, - 0x003f, 0x003f, 0xe5a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x975a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a4, - 0x003f, 0x003f, 0xe5a3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5ac, 0x003f, 0x003f, 0x003f, 0xe5a6, - 0x003f, 0x003f, 0x003f, 0xe5ae, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9786, 0xe5b1, 0x003f, 0xe5a8, 0x003f, 0x003f, - 0xe5a9, 0x003f, 0x003f, 0x003f, 0xe5ad, 0x003f, 0xe5b0, 0xe5af, - 0x003f, 0x003f, 0x003f, 0xe5a7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe5aa, 0x003f, 0xe5bb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe5b4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5b2, - 0x003f, 0x003f, 0xe5b3, 0x003f, 0x003f, 0x003f, 0xe5b8, 0xe5b9, - 0x003f, 0x8a49, 0x003f, 0x8b61, 0x003f, 0x003f, 0xe5b7, 0x003f, - /* 0x8800 .. 0x88ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a2, 0x003f, 0xee85, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5b6, 0xe5ba, 0xe5b5, - 0x003f, 0xe5bc, 0x003f, 0x003f, 0x003f, 0xe5be, 0xe5bd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe5c0, 0xe5bf, 0xe579, 0x003f, 0x003f, 0x003f, 0xe5c4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe5c1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5c2, 0x003f, - 0x003f, 0xe5c3, 0x003f, 0xe5c5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8c8c, 0x003f, 0xe5c7, 0x003f, 0xe5c6, 0x003f, 0x8f4f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8d73, 0x9fa5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5c8, 0x8f70, 0x003f, 0x003f, 0x003f, 0x8a58, - 0x003f, 0xe5c9, 0x003f, 0x8971, 0x003f, 0x8fd5, 0xe5ca, 0x003f, - 0x003f, 0x8d74, 0xe5cb, 0x88df, 0x003f, 0x003f, 0x003f, 0x003f, - 0x955c, 0x003f, 0x003f, 0xe5cc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x908a, 0x003f, 0xe5d3, 0x003f, 0x003f, 0xe5d0, 0x003f, 0x928f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5d1, 0xe5ce, 0x8bdc, - 0x003f, 0xe5cd, 0xe5d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8c55, 0x003f, 0x003f, 0x91dc, 0x003f, 0xe5da, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5d6, 0x003f, 0x003f, 0x003f, 0x91b3, 0xe5d5, - 0x003f, 0xe5d8, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5cf, 0x003f, - 0x003f, 0x003f, 0xe5d9, 0x003f, 0xe5db, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x94ed, 0x003f, 0x003f, 0xe5d7, 0x003f, - 0xe5dc, 0xe5de, 0x003f, 0x003f, 0x8cd1, 0xe5d2, 0x003f, 0x88bf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5dd, - 0x003f, 0x8dd9, 0x97f4, 0xe5df, 0xe5e0, 0x9195, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x97a0, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe5e1, 0x9754, 0x003f, 0x003f, - 0xe5e2, 0xe5e3, 0x003f, 0x003f, 0x95e2, 0xe5e4, 0x003f, 0x8dbe, - 0x003f, 0x97a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe5e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5ea, 0x8fd6, 0xe5e8, 0xee86, 0x003f, 0x003f, - 0x9787, 0xe5e5, 0x003f, 0x003f, 0xe5e7, 0x90bb, 0x909e, 0x003f, - /* 0x8900 .. 0x89ff */ - 0x003f, 0x003f, 0xe5e6, 0x003f, 0xe5eb, 0x003f, 0x003f, 0x95a1, - 0x003f, 0x003f, 0xe5ed, 0x003f, 0xe5ec, 0x003f, 0x003f, 0x003f, - 0x8a8c, 0x003f, 0x964a, 0xe5ee, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xed41, 0xe5fa, 0xe5f0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5f1, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5f2, 0xe5f3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5f7, 0x003f, - 0xe5f8, 0x003f, 0x003f, 0xe5f6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe5f4, 0x003f, 0xe5ef, 0xe5f5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe5f9, 0xe8b5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x89a6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5fc, 0x8bdd, - 0xe5fb, 0x003f, 0x003f, 0x003f, 0xe641, 0x003f, 0xe640, 0x003f, - 0x003f, 0x003f, 0xe643, 0x003f, 0x003f, 0xe642, 0x003f, 0xe644, - 0x003f, 0x003f, 0x8f50, 0x003f, 0xe645, 0x003f, 0x003f, 0xe646, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe647, 0x90bc, - 0x003f, 0x9776, 0x003f, 0xe648, 0x003f, 0x003f, 0x95a2, 0x9465, - 0xe649, 0x003f, 0xe64a, 0x8ca9, 0x003f, 0x003f, 0x003f, 0x8b4b, - 0x003f, 0x003f, 0x003f, 0xe64b, 0x003f, 0x003f, 0x8e8b, 0x9460, - 0xe64c, 0x003f, 0x8a6f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe64d, 0x003f, 0x003f, 0x003f, 0x003f, 0xe64f, 0x9797, - 0x003f, 0xe64e, 0x9065, 0x003f, 0xe650, 0x003f, 0x003f, 0xe651, - 0x003f, 0x003f, 0xe652, 0x8acf, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe653, 0x003f, 0x003f, 0xe654, 0x003f, 0xe655, - 0xe656, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8a70, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe657, 0x003f, 0xe658, 0xe659, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x89f0, 0x003f, 0x003f, 0x9047, 0xe65a, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe65b, 0x003f, 0x003f, 0x003f, - 0xe65c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8a00 .. 0x8aff */ - 0x8cbe, 0x003f, 0x92f9, 0xe65d, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8c76, 0x003f, 0x9075, 0x003f, 0xe660, 0x003f, 0x93a2, 0x003f, - 0xe65f, 0x003f, 0xee87, 0x8c50, 0x003f, 0x003f, 0xe65e, 0x91f5, - 0x8b4c, 0x003f, 0x003f, 0xe661, 0x003f, 0xe662, 0x003f, 0x8fd7, - 0x003f, 0x003f, 0x003f, 0x8c8d, 0x003f, 0xe663, 0x003f, 0x003f, - 0x003f, 0x003f, 0x964b, 0x003f, 0x003f, 0x90dd, 0x003f, 0x003f, - 0x003f, 0x8b96, 0x003f, 0x96f3, 0x9169, 0x003f, 0xe664, 0xee88, - 0x003f, 0x003f, 0x9066, 0x9290, 0x8fd8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe665, 0x003f, 0x003f, 0x003f, 0x003f, 0xe668, 0x003f, - 0xe669, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8dbc, 0x91c0, 0xe667, 0x003f, 0x8fd9, 0x955d, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe666, 0x003f, 0x003f, 0x8e8c, 0x003f, - 0x8972, 0x003f, 0xe66d, 0x8c77, 0x003f, 0x003f, 0x8e8e, 0x003f, - 0x003f, 0x8e8d, 0x003f, 0x986c, 0xe66c, 0xe66b, 0x9146, 0x003f, - 0x8b6c, 0x9862, 0x8a59, 0x8fda, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xee89, 0x003f, 0x003f, 0xe66a, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe66f, 0x003f, 0xe670, 0xe66e, 0x003f, 0x8cd6, - 0x003f, 0x975f, 0x003f, 0x003f, 0x8e8f, 0x9446, 0x003f, 0x003f, - 0x003f, 0xe673, 0x003f, 0x90be, 0x003f, 0x9261, 0x003f, 0x003f, - 0x9755, 0x003f, 0xe676, 0x003f, 0x003f, 0x003f, 0x8cea, 0x003f, - 0x90bd, 0xe672, 0x003f, 0xe677, 0x8ceb, 0xe674, 0xe675, 0xee8a, - 0xe671, 0x003f, 0x003f, 0x003f, 0x90e0, 0x93c7, 0x003f, 0x003f, - 0x924e, 0x003f, 0x89db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x94ee, 0x003f, 0x003f, 0x8b62, 0x003f, 0xee8b, 0x92b2, - 0x003f, 0x003f, 0xe67a, 0x003f, 0xe678, 0x003f, 0x003f, 0x926b, - 0x003f, 0x003f, 0x003f, 0x90bf, 0x8ad0, 0xe679, 0x003f, 0x907a, - 0x003f, 0x003f, 0x97c8, 0x003f, 0x003f, 0x003f, 0x985f, 0x003f, - 0x003f, 0x003f, 0xe67b, 0xe687, 0x92b3, 0x003f, 0xe686, 0xee8c, - 0xe683, 0xe68b, 0xe684, 0x003f, 0xe680, 0x003f, 0x92fa, 0xe67e, - 0x003f, 0x003f, 0x003f, 0xe67c, 0x003f, 0x9740, 0x8e90, 0x003f, - 0x003f, 0xe681, 0x003f, 0xe67d, 0x003f, 0x003f, 0xee8e, 0xe685, - 0x8f94, 0x003f, 0x8cbf, 0x003f, 0x003f, 0x003f, 0x91f8, 0x003f, - /* 0x8b00 .. 0x8bff */ - 0x9664, 0x8979, 0x88e0, 0x003f, 0x93a3, 0x003f, 0x003f, 0xe689, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe688, 0x003f, 0x93e4, 0x003f, - 0xe68d, 0x003f, 0x003f, 0x003f, 0xe682, 0x003f, 0xe68c, 0xe68e, - 0x003f, 0x8caa, 0xe68a, 0x8d75, 0x003f, 0x8ed3, 0x003f, 0x003f, - 0xe68f, 0x9777, 0x003f, 0x003f, 0x003f, 0x003f, 0xe692, 0x003f, - 0xe695, 0x003f, 0x003f, 0xe693, 0x9554, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe690, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8bde, 0x003f, 0x003f, 0x003f, 0x003f, 0xe694, 0x003f, - 0x003f, 0xe696, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe69a, 0x003f, 0x003f, 0xe697, 0x003f, 0xe699, 0xe698, - 0x003f, 0x003f, 0x003f, 0xee8f, 0x003f, 0x003f, 0xe69b, 0x003f, - 0x8eaf, 0x003f, 0xe69d, 0xe69c, 0x9588, 0x003f, 0x003f, 0xe69f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c78, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe69e, 0xe6a0, 0x003f, 0x003f, 0xe6a1, - 0x8b63, 0xe3bf, 0x8ff7, 0x003f, 0xe6a2, 0x003f, 0x003f, 0x8cec, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a3, 0x003f, 0xee90, - 0xe6a4, 0x003f, 0x003f, 0x8e5d, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9dcc, 0x003f, 0xe6a5, 0x003f, 0xe6a6, 0x003f, - 0x8f51, 0x003f, 0xe6a7, 0xe6a8, 0x003f, 0x003f, 0xe6a9, 0x003f, - 0x003f, 0xe6aa, 0xe6ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8c00 .. 0x8cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x924a, - 0x003f, 0x003f, 0xe6ac, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6ae, - 0x003f, 0xe6ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x93a4, 0x003f, - 0xe6af, 0x003f, 0x964c, 0x003f, 0xe6b0, 0x003f, 0xe6b1, 0x003f, - 0xe6b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6b3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x93d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8fdb, 0xe6b4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8d8b, 0x98ac, 0xe6b5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe6b6, 0x955e, 0xe6b7, 0x003f, 0xe6bf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe6b8, 0x003f, 0x003f, 0xe6ba, 0x003f, 0x003f, - 0x003f, 0xe6b9, 0xe6bb, 0x003f, 0x9665, 0xe6bc, 0xe6bd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe6be, 0x003f, 0x003f, 0x003f, - 0xe6c0, 0x003f, 0x003f, 0x003f, 0x003f, 0x8a4c, 0x92e5, 0x003f, - 0x9589, 0x8de0, 0x8d76, 0x003f, 0x003f, 0x003f, 0x003f, 0x956e, - 0x89dd, 0x94cc, 0xe6c3, 0x8ad1, 0x90d3, 0xe6c2, 0xe6c7, 0x9299, - 0x96e1, 0x003f, 0xe6c5, 0xe6c6, 0x8b4d, 0x003f, 0xe6c8, 0x9483, - 0x91dd, 0x003f, 0x003f, 0x94ef, 0x935c, 0xe6c4, 0x003f, 0x9666, - 0x89ea, 0xe6ca, 0x9847, 0x92c0, 0x9864, 0x003f, 0x003f, 0x8e91, - 0xe6c9, 0x003f, 0x91af, 0x003f, 0x003f, 0xe6da, 0x9147, 0x003f, - 0x003f, 0x93f6, 0x003f, 0x956f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe6cd, 0x8e5e, 0x8e92, 0x003f, 0x8fdc, 0x003f, - 0x9485, 0x003f, 0x8cab, 0xe6cc, 0xe6cb, 0x003f, 0x958a, 0x003f, - 0x003f, 0x003f, 0x8ebf, 0x003f, 0x003f, 0x9371, 0x003f, 0x003f, - 0xee91, 0x003f, 0x003f, 0x003f, 0xee92, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe6cf, 0xe6d0, 0x8d77, 0xe6ce, 0x003f, 0x003f, - /* 0x8d00 .. 0x8dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xe6d1, 0xe6d2, 0x003f, 0xe6d4, - 0x91a1, 0x003f, 0xe6d3, 0x8ae4, 0x003f, 0xe6d6, 0x003f, 0xe6d5, - 0xe6d7, 0x003f, 0xee93, 0xe6d9, 0xe6db, 0x003f, 0xe6dc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x90d4, 0x003f, 0x8ecd, 0xe6dd, - 0x003f, 0x003f, 0x003f, 0x8a71, 0x003f, 0xe6de, 0x003f, 0x003f, - 0x9196, 0xe6df, 0x003f, 0xe6e0, 0x958b, 0x003f, 0xee94, 0x8b4e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe6e1, 0x003f, 0x003f, 0x003f, 0x92b4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x897a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe6e2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8eef, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9096, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x91ab, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe6e5, 0x003f, 0x003f, 0x003f, 0xe6e4, 0x003f, - 0x003f, 0x003f, 0xe6e3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe6eb, 0xe6e9, 0x003f, 0x003f, 0xe6e6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6e8, 0x003f, - 0x003f, 0x003f, 0xe6e7, 0xe6ea, 0x003f, 0x8b97, 0x003f, 0xe6ee, - 0x003f, 0x90d5, 0x003f, 0xe6ef, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8cd7, 0x003f, 0xe6ec, 0xe6ed, 0x003f, 0x003f, 0x003f, 0x9848, - 0x003f, 0x003f, 0x003f, 0x92b5, 0x003f, 0x9148, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe6f0, 0x003f, 0x003f, 0xe6f3, - /* 0x8e00 .. 0x8eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe6f1, 0xe6f2, 0x9778, 0x003f, 0x003f, 0x003f, 0x003f, 0x93a5, - 0xe6f6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6f4, 0xe6f5, 0xe6f7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe748, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe6fa, 0x003f, 0x003f, 0x003f, 0xe6fb, 0xe6f9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe6f8, 0x003f, 0x92fb, 0x003f, 0x003f, 0xe740, - 0xe744, 0xe741, 0xe6fc, 0x003f, 0xe742, 0x003f, 0x003f, 0x003f, - 0xe743, 0x003f, 0x003f, 0x003f, 0x003f, 0xe74a, 0x003f, 0x003f, - 0x003f, 0xe745, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x90d6, - 0xe747, 0x003f, 0x003f, 0xe749, 0xe746, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe74c, 0x003f, 0x8f52, 0x003f, 0xe74b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe74d, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe74e, 0x003f, 0x003f, 0xe751, 0xe750, 0x003f, 0xe74f, - 0x003f, 0x003f, 0xe753, 0xe752, 0x003f, 0x96f4, 0x003f, 0x003f, - 0x003f, 0xe755, 0x003f, 0xe754, 0xe756, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe757, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe759, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe758, 0x9067, 0xe75a, 0x003f, 0x003f, 0x8beb, - 0xe75b, 0xe75d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe75e, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe75f, 0xe75c, 0x003f, - 0xe760, 0x003f, 0x8ed4, 0xe761, 0x8b4f, 0x8c52, 0x003f, 0xee96, - 0x003f, 0x003f, 0x8cac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe762, 0x003f, 0x003f, 0x003f, 0x93ee, - 0x003f, 0x003f, 0x935d, 0xe763, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe766, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8eb2, 0x003f, 0x003f, 0xe765, 0xe764, 0x8c79, 0xe767, 0x003f, - /* 0x8f00 .. 0x8fff */ - 0x003f, 0x003f, 0x003f, 0x8a72, 0x003f, 0xe769, 0x003f, 0x003f, - 0x003f, 0x8dda, 0xe768, 0x003f, 0xe771, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe76b, 0xe76d, 0x95e3, 0xe76a, 0x003f, 0x003f, - 0x003f, 0xe76c, 0x003f, 0xe770, 0xe76e, 0x8b50, 0x003f, 0xe76f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe772, 0x003f, - 0x003f, 0x9479, 0x97d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f53, - 0x003f, 0x003f, 0x003f, 0xe773, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9741, 0xe775, 0x003f, 0xe774, 0x003f, 0x003f, 0xe778, 0x9760, - 0x003f, 0x003f, 0xe777, 0x003f, 0x8a8d, 0xe776, 0xe77b, 0x003f, - 0x003f, 0xe77a, 0x003f, 0x003f, 0xe779, 0x9351, 0xe77c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe77d, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe77e, 0x003f, 0x003f, 0x8d8c, - 0x003f, 0x8c44, 0xe780, 0xe781, 0xe782, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9068, 0xe783, 0x003f, 0x8eab, 0xe784, - 0x003f, 0x003f, 0x003f, 0xe785, 0x003f, 0x003f, 0x003f, 0x999f, - 0x999e, 0x003f, 0x003f, 0x003f, 0x003f, 0xe786, 0xe390, 0xe787, - 0x9243, 0x904a, 0x945f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe788, - 0x003f, 0x003f, 0x95d3, 0x92d2, 0x8d9e, 0x003f, 0x003f, 0x9248, - 0x003f, 0x003f, 0x8949, 0x003f, 0x9698, 0x9076, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c7d, 0x003f, - 0x003f, 0x8bdf, 0x003f, 0x003f, 0x95d4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe789, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe78b, 0x003f, 0x003f, 0xe78a, 0x89de, 0x003f, - 0x003f, 0x93f4, 0xe78c, 0x9497, 0x003f, 0x9352, 0x003f, 0xe78d, - 0x8f71, 0x003f, 0x003f, 0x003f, 0xe78f, 0x003f, 0x003f, 0x96c0, - 0xe79e, 0xe791, 0xe792, 0x003f, 0x003f, 0x92c7, 0x003f, 0x003f, - /* 0x9000 .. 0x90ff */ - 0x91de, 0x9197, 0x003f, 0x93a6, 0x003f, 0xe790, 0x8b74, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe799, 0x003f, 0xe796, 0xe7a3, 0x93a7, - 0x9280, 0xe793, 0x003f, 0x92fc, 0x9372, 0xe794, 0xe798, 0x9080, - 0x003f, 0x9487, 0x92ca, 0x003f, 0x003f, 0x90c0, 0xe797, 0x91ac, - 0x91a2, 0xe795, 0x88a7, 0x9841, 0x003f, 0x003f, 0x003f, 0xe79a, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x91df, 0x003f, - 0x003f, 0x8f54, 0x9069, 0x003f, 0x003f, 0xe79c, 0xe79b, 0x003f, - 0x88ed, 0xe79d, 0x003f, 0x003f, 0x954e, 0x003f, 0xe7a5, 0x003f, - 0x003f, 0x93d9, 0x908b, 0x003f, 0x003f, 0x9278, 0x003f, 0x8bf6, - 0x003f, 0xe7a4, 0x9756, 0x895e, 0x003f, 0x95d5, 0x89df, 0xe79f, - 0xe7a0, 0xe7a1, 0xe7a2, 0x93b9, 0x9242, 0x88e1, 0xe7a6, 0x003f, - 0xe7a7, 0xeaa1, 0x003f, 0x003f, 0x91bb, 0x003f, 0xe7a8, 0x003f, - 0x8993, 0x916b, 0x003f, 0x8cad, 0x003f, 0x9779, 0x003f, 0xee99, - 0xe7a9, 0x934b, 0x003f, 0x003f, 0x003f, 0x9198, 0x8ed5, 0xe7aa, - 0x003f, 0x003f, 0xe7ad, 0x003f, 0x003f, 0x8f85, 0xe7ab, 0x914a, - 0x9149, 0x003f, 0x88e2, 0x003f, 0x97c9, 0xe7af, 0x003f, 0x94f0, - 0xe7b1, 0xe7b0, 0xe7ae, 0xe284, 0x8ad2, 0x003f, 0x003f, 0xe78e, - 0x003f, 0xe7b3, 0xe7b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7b4, - 0x003f, 0x9757, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x93df, 0x003f, 0x003f, 0x964d, 0x003f, - 0xe7b5, 0x003f, 0x8ed7, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7b6, - 0x003f, 0xe7b7, 0x003f, 0x003f, 0x003f, 0xe7b8, 0x003f, 0x003f, - 0x9340, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x88e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x8d78, 0x003f, 0x003f, 0x003f, 0x9859, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe7bc, 0x003f, 0x003f, 0xee9a, 0x003f, - 0x003f, 0x8c53, 0xe7b9, 0x003f, 0xe7ba, 0x003f, 0x003f, 0x003f, - 0x9594, 0x003f, 0x003f, 0x003f, 0x003f, 0x8a73, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9758, 0x003f, 0x8bbd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9373, 0x003f, 0x003f, - /* 0x9100 .. 0x91ff */ - 0x003f, 0x003f, 0xe7bd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7be, 0x003f, 0x003f, 0xee9c, 0x003f, 0x003f, - 0x003f, 0xe7bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xee9d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9341, 0x003f, 0x003f, - 0xe7c1, 0x003f, 0xe7c0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x93d1, 0xe7c2, 0x8f55, 0x8ede, 0x947a, 0x9291, 0x003f, - 0x003f, 0x003f, 0x8ef0, 0x003f, 0x908c, 0x003f, 0xe7c3, 0x003f, - 0xe7c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x907c, 0xe7c5, 0x003f, 0xe7c6, 0x003f, 0x003f, - 0x003f, 0xe7c7, 0x978f, 0x003f, 0x8f56, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7c9, 0xe7c8, 0x003f, 0x8d79, 0x003f, 0x8d93, - 0x8e5f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x8f86, - 0x003f, 0xe7cb, 0x003f, 0xe7ca, 0x003f, 0x91e7, 0x003f, 0x003f, - 0x8ced, 0x003f, 0x90c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x94ae, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8f58, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7cd, 0x003f, 0x8fdd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7d0, 0xe7ce, 0x003f, 0x003f, 0x003f, 0xe7cf, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe7d2, 0xe7d1, 0x003f, 0x003f, - 0x8ff8, 0x003f, 0xe7d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7d4, 0xe7d5, 0x003f, 0x003f, 0x003f, 0x003f, 0x94ce, 0x8dd1, - 0x8edf, 0xe7d6, 0x003f, 0xe7d7, 0x97a2, 0x8f64, 0x96ec, 0x97ca, - 0xe7d8, 0x8be0, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7d9, 0xee9f, - 0x9342, 0x003f, 0xee9e, 0xe7dc, 0x8a98, 0x906a, 0xeea0, 0xe7da, - 0x003f, 0xe7db, 0x003f, 0x92de, 0xeea3, 0xeea4, 0x9674, 0x8bfa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeea1, 0xeea2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7de, 0xe7df, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe7dd, 0x003f, 0x003f, 0xe7e1, - /* 0x9200 .. 0x92ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeea5, 0x003f, - 0x003f, 0x003f, 0xeea7, 0x003f, 0x003f, 0x93dd, 0x8a62, 0x003f, - 0xeea6, 0xe7e5, 0x003f, 0x003f, 0xe7e2, 0xe7e4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7e0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe86e, 0x003f, 0x003f, 0xe7e3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x97e9, 0x003f, 0x003f, 0x8cd8, - 0x003f, 0xeeae, 0xeea8, 0x003f, 0xeeaa, 0x003f, 0x003f, 0xe7ed, - 0xeea9, 0x003f, 0x003f, 0x003f, 0x9353, 0xe7e8, 0x003f, 0x003f, - 0xe7eb, 0xe7e9, 0x003f, 0xe7ee, 0x003f, 0x003f, 0xeeab, 0x003f, - 0xe7ef, 0xeead, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7e7, - 0x003f, 0xeeac, 0xe7f4, 0x8994, 0x003f, 0x003f, 0xe7e6, 0x003f, - 0x003f, 0x003f, 0x94ab, 0x003f, 0xe7ea, 0x003f, 0x8fde, 0xeeaf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8d7a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeb1, - 0xeeb2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9667, 0x003f, - 0x8be2, 0x003f, 0x003f, 0x8f65, 0x003f, 0x93ba, 0x003f, 0x003f, - 0xed43, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x914c, 0x003f, 0xe7f2, 0x003f, 0xe7ec, 0xe7f1, 0x003f, - 0x96c1, 0x003f, 0x92b6, 0xe7f3, 0xe7f0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeb0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x914b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7f7, - 0x003f, 0xe7f6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7f5, - 0xeeb6, 0x003f, 0x964e, 0xeeba, 0x003f, 0xeeb8, 0x003f, 0xeeb4, - 0x003f, 0xeeb5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeeb9, 0x003f, 0x003f, 0x003f, 0x8f9b, 0x003f, 0x003f, 0xeeb3, - 0x003f, 0xe7f8, 0x95dd, 0x003f, 0x003f, 0x8973, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9565, 0x9292, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b98, 0xed49, 0xe7fa, 0xeebd, 0x8d7c, 0x003f, 0x003f, 0xeec0, - /* 0x9300 .. 0x93ff */ - 0x003f, 0x003f, 0xeec2, 0x003f, 0x003f, 0x003f, 0x8e4b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7f9, - 0x908d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x908e, 0xe840, 0xe842, 0x003f, 0x003f, 0xeec1, 0xeebf, 0x003f, - 0x8ff9, 0xeebc, 0xe841, 0xe843, 0x003f, 0xeebb, 0x8bd1, 0x003f, - 0x9564, 0x003f, 0x003f, 0x8ee0, 0x9842, 0x003f, 0xe7fc, 0x8df6, - 0x003f, 0x003f, 0x985e, 0x003f, 0x003f, 0xe845, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe844, 0xe846, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe7fb, 0x003f, 0x003f, 0x003f, - 0xed42, 0x003f, 0x003f, 0x93e7, 0x003f, 0x9374, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x92d5, 0x003f, 0xe84b, 0xeec4, - 0x003f, 0x003f, 0x003f, 0x9262, 0xe847, 0x003f, 0x003f, 0x003f, - 0xe848, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8c4c, 0x003f, 0xe84a, 0x003f, - 0xeec3, 0x003f, 0x003f, 0x003f, 0x003f, 0x8cae, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe849, 0x003f, 0x8fdf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8a99, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe84f, 0x003f, 0x8dbd, 0x9199, - 0x003f, 0x003f, 0x92c8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeec5, 0x003f, 0x003f, 0x8a5a, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe84d, 0xe84e, 0x92c1, 0x003f, - 0xe84c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe850, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe856, 0x003f, 0x003f, 0xeec6, 0x003f, - 0xe859, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe858, 0x934c, 0x003f, 0x003f, 0x003f, 0x003f, 0xe851, 0xe852, - 0xe855, 0x003f, 0x003f, 0x003f, 0x003f, 0xe857, 0xeec7, 0x003f, - 0x003f, 0x8bbe, 0x003f, 0x003f, 0xe85a, 0xe854, 0x003f, 0x003f, - 0xe853, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeec8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9400 .. 0x94ff */ - 0x003f, 0x003f, 0x003f, 0xe85e, 0x003f, 0x003f, 0x003f, 0xe85f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe860, 0x003f, 0x003f, 0xe85d, 0xe85c, 0x003f, 0x003f, 0x003f, - 0x8fe0, 0x93a8, 0xe85b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe864, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe862, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeec9, 0x003f, 0x003f, 0x003f, 0xe863, 0xe861, 0x003f, - 0x91f6, 0x003f, 0xe865, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe866, 0x003f, 0x003f, 0xe868, 0xeeca, 0x003f, 0x003f, - 0xeecb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8ad3, 0xe867, 0x96f8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe873, 0xe869, 0x003f, 0x003f, 0xe86c, 0x003f, - 0xe86a, 0x003f, 0xe86b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe86d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe86f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe870, 0x003f, 0xe871, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe874, 0xe872, 0xe875, 0xe877, - 0x003f, 0xe876, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9500 .. 0x95ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x92b7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x96e5, 0x003f, 0xe878, 0x914d, 0x003f, 0x003f, 0x003f, 0xe879, - 0x003f, 0x95c2, 0xe87a, 0x8a4a, 0x003f, 0x003f, 0x003f, 0x895b, - 0x003f, 0x8ad5, 0xeecc, 0x8ad4, 0xe87b, 0x003f, 0xe87c, 0x003f, - 0xe87d, 0xe87e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe880, 0x003f, 0x8ad6, 0x8a74, 0x8d7d, 0x94b4, 0x003f, 0xe882, - 0xe881, 0x003f, 0x003f, 0x003f, 0x003f, 0xe883, 0x003f, 0x003f, - 0x003f, 0x003f, 0x897b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe886, 0x003f, 0xe885, 0xe884, 0x003f, 0xe887, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe88a, 0x003f, 0x003f, 0x003f, 0x88c5, - 0x003f, 0x003f, 0xe888, 0x003f, 0xe88c, 0xe88b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe88e, 0xe88d, 0xe88f, 0x003f, - 0x93ac, 0x003f, 0x003f, 0x003f, 0xe890, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe891, 0xe893, 0x003f, 0x003f, 0xe892, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9600 .. 0x96ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x958c, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe894, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe895, 0x003f, 0x8de3, 0x003f, 0x003f, 0x003f, 0xe896, 0xe897, - 0x003f, 0x003f, 0x9668, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x916a, 0x003f, 0x003f, 0x003f, 0x88a2, - 0x91c9, 0x003f, 0xe898, 0x003f, 0x958d, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe89b, 0xe899, 0x8d7e, 0x003f, 0xe89a, - 0x8cc0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x95c3, 0xe89d, 0xe89f, 0xe89e, 0xe8a0, - 0x003f, 0x003f, 0x8940, 0x9077, 0x8f9c, 0x8ad7, 0xe8a1, 0x003f, - 0x003f, 0x003f, 0x9486, 0x003f, 0xe8a3, 0x003f, 0x003f, 0x003f, - 0x8941, 0x003f, 0xe8a2, 0x92c2, 0x003f, 0x97cb, 0x93a9, 0xe89c, - 0x97a4, 0x003f, 0x8caf, 0x003f, 0x003f, 0x977a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8bf7, 0x97b2, 0x003f, - 0x8c47, 0x003f, 0x91e0, 0xe440, 0x003f, 0xe8a4, 0x8a4b, 0x908f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8a75, 0xe8a6, 0x003f, 0xe8a7, - 0xe8a5, 0x8c84, 0x003f, 0x8ddb, 0x8fe1, 0xeecf, 0x003f, 0x003f, - 0x8942, 0x003f, 0x003f, 0x97d7, 0x003f, 0x003f, 0x003f, 0xe8a9, - 0xe7ac, 0x003f, 0xe8a8, 0x003f, 0x003f, 0x003f, 0x003f, 0xeed0, - 0xe8ac, 0xe8aa, 0xe8ab, 0x003f, 0xe8ad, 0x003f, 0xe8ae, 0x97ea, - 0xe8af, 0xe8b0, 0x003f, 0x90c7, 0x94b9, 0x003f, 0x003f, 0x003f, - 0x909d, 0x8ae5, 0x003f, 0x003f, 0x9759, 0x89eb, 0x8f57, 0x8cd9, - 0x003f, 0xe8b3, 0x003f, 0xe8b2, 0x8e93, 0xe8b4, 0xe8b1, 0x003f, - 0x003f, 0x8e47, 0x003f, 0x003f, 0x003f, 0xe8b8, 0xe5ab, 0x003f, - 0x003f, 0x99d4, 0x003f, 0x9097, 0xe8b6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x97a3, 0x93ef, 0x003f, 0x003f, 0x003f, 0x003f, - 0x894a, 0x003f, 0x90e1, 0x8eb4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x95b5, 0x003f, 0x895f, 0x003f, 0x003f, 0x003f, 0x97eb, 0x978b, - 0x003f, 0xe8b9, 0x003f, 0x9364, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9700 .. 0x97ff */ - 0x8ef9, 0x003f, 0x003f, 0x003f, 0xe8ba, 0x003f, 0xe8bb, 0x906b, - 0xe8bc, 0x003f, 0x97ec, 0x003f, 0x003f, 0xe8b7, 0xe8be, 0xe8c0, - 0x003f, 0xe8bf, 0x003f, 0xe8bd, 0x003f, 0x003f, 0xe8c1, 0x003f, - 0x003f, 0xe8c2, 0x003f, 0x003f, 0x919a, 0x003f, 0x89e0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe8c3, 0x003f, 0x003f, 0x96b6, - 0x003f, 0x003f, 0xe8c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe8c5, 0x003f, 0x9849, 0xeed1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9e50, 0xe8c6, 0x003f, 0xeed2, 0x003f, 0xe8c7, 0xe8c8, 0x003f, - 0x003f, 0x003f, 0xe8cc, 0xeed3, 0xe8c9, 0x003f, 0xe8ca, 0x003f, - 0xe8cb, 0xe8cd, 0x003f, 0x003f, 0x003f, 0xeed4, 0x003f, 0xeed5, - 0x003f, 0xeed6, 0x90c2, 0x003f, 0x003f, 0xeed7, 0x96f5, 0x003f, - 0x003f, 0x90c3, 0x003f, 0x003f, 0xe8ce, 0x003f, 0x94f1, 0x003f, - 0xe8cf, 0xea72, 0x96ca, 0x003f, 0xe8d0, 0x003f, 0xe8d1, 0x003f, - 0xe8d2, 0x8a76, 0x003f, 0xe8d4, 0x003f, 0x9078, 0x003f, 0x003f, - 0x003f, 0xe8d5, 0x003f, 0x003f, 0x8c43, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe8d6, 0xe8da, 0x003f, 0xe8d8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe8d9, 0x003f, 0x003f, 0x8a93, 0xe8d7, 0xe8db, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8dc, 0x003f, 0x88c6, 0x003f, 0xe8dd, - 0xe8de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8fe2, 0x003f, 0x003f, 0x003f, 0xe8df, 0x003f, 0x003f, 0x003f, - 0x8b66, 0x003f, 0x003f, 0xe8e2, 0x003f, 0x003f, 0xe8e1, 0x003f, - 0xe8e0, 0x003f, 0x003f, 0xe691, 0x003f, 0x95da, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8e3, 0xe8e4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8e5, 0x003f, 0x003f, 0xe8e6, 0x003f, - 0xe8e7, 0x003f, 0x003f, 0xe8e8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8ad8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe8e9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8ea, 0x9442, 0x003f, - 0x003f, 0x003f, 0xe8ec, 0x89b9, 0x003f, 0xe8ef, 0xe8ee, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8943, 0x003f, 0x003f, 0x003f, 0x8bbf, - /* 0x9800 .. 0x98ff */ - 0x003f, 0x95c5, 0x92b8, 0x8da0, 0x003f, 0x8d80, 0x8f87, 0x003f, - 0x907b, 0x003f, 0x003f, 0x003f, 0xe8f1, 0x003f, 0x003f, 0xe8f0, - 0x9761, 0x8ae6, 0x94d0, 0x93da, 0x003f, 0x003f, 0x003f, 0x909c, - 0x97cc, 0x003f, 0x8c7a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe8f4, 0x003f, 0x003f, 0xe8f3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x966a, 0x93aa, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x896f, 0x003f, 0x003f, 0xe8f5, - 0xe8f2, 0x003f, 0x003f, 0x9570, 0x978a, 0xe8f6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8f7, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8f9, 0x91e8, 0x8a7a, 0x8a7b, 0xe8f8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8ae7, 0x8cb0, 0x003f, 0xeed8, - 0x8ae8, 0x003f, 0x003f, 0x935e, 0x003f, 0x003f, 0x97de, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeed9, 0x003f, 0x8cda, - 0x003f, 0x003f, 0x003f, 0xe8fa, 0x003f, 0x003f, 0x003f, 0xe8fb, - 0xe8fc, 0xe940, 0x003f, 0xe942, 0xe941, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9597, 0x003f, 0xe943, 0x003f, 0x003f, 0x003f, 0x003f, 0xe944, - 0x003f, 0xe945, 0x003f, 0x003f, 0x003f, 0x003f, 0xe946, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe948, 0xe947, 0x003f, 0xe949, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x94f2, 0xe3ca, 0x003f, 0x003f, 0x9048, - 0x003f, 0x003f, 0x8b51, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe94a, 0x003f, 0xe94b, 0x003f, 0x99aa, 0x9f5a, 0x94d1, - 0x003f, 0x003f, 0x88f9, 0x003f, 0x88b9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x8e94, 0x964f, 0x8ffc, 0x003f, - /* 0x9900 .. 0x99ff */ - 0x003f, 0x003f, 0x003f, 0xe94c, 0x003f, 0x96dd, 0x003f, 0x003f, - 0x003f, 0xe94d, 0x977b, 0x003f, 0x8961, 0x003f, 0x003f, 0x003f, - 0x8e60, 0x003f, 0xe94e, 0x89ec, 0xe94f, 0x003f, 0x003f, 0x003f, - 0xe950, 0x003f, 0x003f, 0x003f, 0x003f, 0xe952, 0xe953, 0x003f, - 0xe955, 0xe951, 0x003f, 0x003f, 0xe954, 0x003f, 0x003f, 0xeedc, - 0x8ad9, 0x003f, 0x003f, 0x003f, 0xe956, 0x003f, 0xe957, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe958, 0xe959, 0x003f, - 0x003f, 0x003f, 0xe95a, 0x003f, 0x003f, 0xe95c, 0x003f, 0x003f, - 0x003f, 0xe95b, 0x003f, 0xe95e, 0xe961, 0x003f, 0x003f, 0x003f, - 0xe95d, 0xe95f, 0xe960, 0x003f, 0x003f, 0xe962, 0x003f, 0x8bc0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8ef1, 0xe963, - 0xe964, 0x8d81, 0x003f, 0x003f, 0x003f, 0x003f, 0xeede, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe965, 0x003f, 0x003f, - 0x8a5d, 0x003f, 0x003f, 0x003f, 0x946e, 0xe966, 0xe967, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9279, 0x93e9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe968, 0x003f, 0x003f, 0x003f, - 0x003f, 0x949d, 0x003f, 0x003f, 0x91ca, 0x8977, 0x8bec, 0x003f, - 0x8bed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9293, 0xe96d, 0x8bee, 0x003f, 0x003f, 0x89ed, 0x003f, 0x003f, - 0xe96c, 0x003f, 0x003f, 0xe96a, 0x003f, 0xe96b, 0x003f, 0xe969, - 0x003f, 0x003f, 0xe977, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe96e, 0xe96f, 0x003f, - 0x003f, 0xe970, 0xe971, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe973, 0x003f, 0x003f, 0xe972, 0x003f, 0x003f, 0x003f, 0x8f78, - /* 0x9a00 .. 0x9aff */ - 0x003f, 0xe974, 0x003f, 0x003f, 0x003f, 0xe976, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8b52, 0xe975, - 0x003f, 0x003f, 0x919b, 0x8cb1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe978, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x91cb, 0x003f, 0x003f, 0xe979, 0x003f, 0x003f, 0x003f, 0x003f, - 0x93ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe97a, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe980, 0x003f, - 0xe97d, 0x003f, 0xe97c, 0xe97e, 0x003f, 0xe97b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe982, 0xeedf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe981, 0x003f, 0xe984, - 0x003f, 0x003f, 0x8bc1, 0xe983, 0x003f, 0x003f, 0x003f, 0xe985, - 0x003f, 0x003f, 0xe986, 0x003f, 0xe988, 0xe987, 0x003f, 0x003f, - 0x003f, 0xe989, 0xe98b, 0xe98a, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8d9c, 0x003f, 0x003f, 0x003f, 0x003f, 0xe98c, 0x003f, 0x003f, - 0xe98d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8a5b, 0x003f, 0x003f, 0x003f, 0xe98e, 0x003f, 0x003f, 0x003f, - 0xe98f, 0x003f, 0x003f, 0x003f, 0x9091, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe990, - 0x003f, 0xe991, 0x003f, 0xe992, 0xe993, 0x003f, 0x003f, 0x003f, - 0x8d82, 0xeee0, 0x003f, 0x003f, 0xeee1, 0x003f, 0xe994, 0xe995, - 0x003f, 0x003f, 0xe996, 0xe997, 0x003f, 0x003f, 0xe998, 0x003f, - 0x003f, 0x003f, 0x94af, 0xe99a, 0x003f, 0x9545, 0xe99b, 0xe999, - 0x003f, 0xe99d, 0x003f, 0x003f, 0xe99c, 0x003f, 0x003f, 0xe99e, - 0x003f, 0x003f, 0x003f, 0xe99f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9b00 .. 0x9bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9a0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9a1, 0x003f, 0xe9a2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9a3, - 0x003f, 0x003f, 0xe9a4, 0xe9a5, 0x003f, 0xe9a6, 0x003f, 0xe9a7, - 0xe9a8, 0xe9a9, 0xe9aa, 0x003f, 0x003f, 0x003f, 0xe9ab, 0xe9ac, - 0x003f, 0x9f54, 0xe9ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2f6, 0x8b53, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8a40, 0x8db0, 0xe9af, 0xe9ae, 0x96a3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9b1, 0xe9b2, 0xe9b0, - 0x003f, 0xe9b3, 0x003f, 0x003f, 0x9682, 0x003f, 0x003f, 0x003f, - 0xe9b4, 0x003f, 0x8b9b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9844, - 0x003f, 0x003f, 0xeee3, 0x003f, 0xe9b5, 0xeee2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe9b7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x88bc, 0xeee4, - 0x003f, 0xe9b8, 0x95a9, 0xe9b6, 0x003f, 0x003f, 0xe9b9, 0xe9ba, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9bb, - 0xe9bc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9bd, 0x003f, 0x968e, 0x8e4c, 0x003f, 0x8df8, 0x914e, 0x003f, - 0x003f, 0xeee5, 0x003f, 0x003f, 0xe9be, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9c1, 0x003f, 0xeee6, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c2, 0x003f, - 0x003f, 0x8cef, 0xe9c0, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c3, - 0x003f, 0xe9c4, 0xe9c5, 0x003f, 0xe9c9, 0x003f, 0x8e49, 0x003f, - 0x003f, 0x003f, 0x003f, 0x91e2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9ca, 0xe9c7, 0xe9c6, 0xe9c8, 0x003f, 0x003f, 0x003f, - 0x8c7e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9ce, 0xe9cd, 0xe9cc, 0x003f, 0x003f, 0x88b1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9c00 .. 0x9cff */ - 0xeee7, 0x003f, 0x003f, 0x003f, 0xe9d8, 0x003f, 0xe9d4, 0x003f, - 0xe9d5, 0xe9d1, 0xe9d7, 0x003f, 0xe9d3, 0x8a82, 0x003f, 0x003f, - 0x986b, 0x003f, 0xe9d6, 0xe9d2, 0xe9d0, 0xe9cf, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe9da, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9dd, 0x003f, 0x003f, 0xe9dc, 0xe9db, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9568, 0xe9d9, 0x88f1, - 0xe9de, 0x003f, 0xe9e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8a8f, 0xe9cb, 0x8956, 0x003f, 0x003f, 0xe9e2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9e1, 0xe9df, - 0x924c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x9690, 0x003f, 0x003f, 0x003f, 0x003f, 0x97d8, - 0x003f, 0x003f, 0xe9e3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9e4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9e5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9e6, 0x003f, - 0xe9e7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x92b9, 0x003f, 0xe9e8, - 0x003f, 0x94b5, 0x003f, 0xe9ed, 0xe9e9, 0x003f, 0x003f, 0x003f, - 0xe9ea, 0x003f, 0x003f, 0x9650, 0x96c2, 0x003f, 0x93ce, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9d00 .. 0x9dff */ - 0x003f, 0x003f, 0x003f, 0xe9ee, 0x003f, 0x003f, 0xe9ef, 0x93bc, - 0xe9ec, 0xe9eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x89a8, 0x003f, - 0x003f, 0x003f, 0xe9f7, 0x003f, 0x003f, 0xe9f6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8995, 0x003f, 0x003f, 0x003f, 0xe9f4, - 0x003f, 0x003f, 0x003f, 0xe9f3, 0x003f, 0x003f, 0xe9f1, 0x003f, - 0x8a9b, 0x003f, 0xe9f0, 0x8eb0, 0x89a7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8d83, 0x003f, 0x003f, 0xe9fa, 0xe9f9, - 0x003f, 0xe9f8, 0x003f, 0x003f, 0xe9f5, 0x003f, 0xe9fb, 0x003f, - 0xe9fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xea44, 0xea43, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xea45, 0x003f, 0x003f, 0x894c, 0xea40, 0xea41, 0x003f, - 0x8d94, 0x96b7, 0x003f, 0x003f, 0xea42, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeee9, 0x9651, 0x003f, 0x003f, 0xea4a, - 0xeee8, 0x003f, 0xea46, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xea4b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea48, - 0x003f, 0xea47, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x8c7b, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xea4c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xea4d, 0x003f, 0x003f, 0x003f, - 0x003f, 0xea4e, 0x003f, 0xea49, 0x003f, 0x003f, 0x003f, 0xe9f2, - 0x003f, 0x003f, 0xea4f, 0x003f, 0x92df, 0x003f, 0x003f, 0x003f, - 0xea53, 0x003f, 0xea54, 0xea52, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xea51, 0xea57, 0x003f, 0xea50, 0x003f, 0xea55, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea56, - 0x003f, 0x003f, 0x003f, 0xea59, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xea58, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea5b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea5c, 0x003f, 0xea5d, - 0x003f, 0x003f, 0x9868, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xea5a, 0x91e9, 0x8deb, 0x003f, 0x003f, 0xea5e, 0x003f, 0x003f, - /* 0x9e00 .. 0x9eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeeeb, 0xea5f, 0xea60, 0x003f, 0x003f, 0xea61, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea62, 0x003f, 0x003f, - 0x8cb2, 0xea63, 0x003f, 0x003f, 0x003f, 0xea64, 0x003f, 0x8ead, - 0x003f, 0xea65, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xea66, 0x003f, 0x003f, 0xea67, 0xea68, 0x003f, 0x003f, 0x003f, - 0x003f, 0xea6b, 0xea69, 0x985b, 0x003f, 0xea6a, 0x003f, 0x97ed, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea6c, 0x003f, 0x97d9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea6d, 0x949e, 0x003f, - 0x003f, 0xea6e, 0xea70, 0x003f, 0x003f, 0xea71, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xea6f, 0x8d8d, 0x96cb, 0x9683, 0x9bf5, 0x003f, 0x9f80, 0x969b, - 0x003f, 0x003f, 0x003f, 0x003f, 0x89a9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xea73, 0x8b6f, 0xea74, 0xea75, - 0xea76, 0xeeec, 0x8d95, 0x003f, 0xea77, 0x003f, 0x003f, 0x003f, - 0xe0d2, 0x96d9, 0x003f, 0x91e1, 0xea78, 0xea7a, 0xea79, 0x003f, - 0xea7b, 0x003f, 0x003f, 0x003f, 0x003f, 0xea7c, 0x003f, 0x003f, - 0xea7d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea7e, - 0x003f, 0x003f, 0x003f, 0x003f, 0xea80, 0x003f, 0xea81, 0xea82, - 0x003f, 0xea83, 0x003f, 0xea84, 0xea85, 0xea86, 0x003f, 0x003f, - /* 0x9f00 .. 0x9fff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea87, - 0xea88, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x9343, 0x003f, - 0x003f, 0x003f, 0x003f, 0x8cdb, 0x003f, 0xea8a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x916c, 0xea8b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xea8c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x9540, 0x003f, 0x003f, 0xea8d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xea8e, 0xe256, 0x003f, 0x003f, 0xe6d8, 0xe8eb, - 0x003f, 0x003f, 0xea8f, 0x003f, 0xea90, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea92, - 0xea93, 0xea94, 0x97ee, 0xea91, 0x003f, 0x003f, 0xea95, 0xea96, - 0x003f, 0x003f, 0xea98, 0x003f, 0xea97, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xea9a, 0x003f, 0x003f, 0x003f, 0xea9b, 0xea99, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x97b4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xea9c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xea9d, 0xe273, 0x003f, 0x003f, - 0xea9e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xf900 .. 0xf9ff */ - 0xe6af, 0x8d58, 0x8ed4, 0xe6c9, 0x8a8a, 0x8bf8, 0x8be5, 0xea9d, - 0xea9d, 0x8c5f, 0x8be0, 0x9a68, 0x93de, 0x9cef, 0xe19a, 0x9785, - 0xe566, 0x9786, 0x9787, 0xe7b4, 0x9ed9, 0x978c, 0xe080, 0xe0e2, - 0x978e, 0x978f, 0xe970, 0x98aa, 0x9791, 0x9793, 0xe0a3, 0x9796, - 0xea61, 0x9792, 0x9794, 0x9795, 0xe641, 0x9d66, 0xe463, 0x003f, - 0x984c, 0xedc4, 0x9851, 0x9854, 0x9859, 0x98d2, 0x97e2, 0x99a7, - 0x003f, 0x9845, 0xe0a2, 0xe1b8, 0x9856, 0xe562, 0x97b8, 0x9848, - 0x9849, 0x9844, 0x8deb, 0xe1ef, 0xe252, 0xee70, 0x003f, 0x003f, - 0x8ead, 0x985f, 0x9ae0, 0x984d, 0xe2c4, 0x9857, 0x9853, 0xe1fb, - 0x9847, 0x978b, 0x9adc, 0x003f, 0x9eea, 0x003f, 0x9852, 0x97dd, - 0xe37e, 0xe89b, 0xe8d3, 0x985d, 0xeaa3, 0x97bd, 0x97c5, 0x88bb, - 0x9548, 0x97cb, 0xe6a4, 0x9d5b, 0x9ed9, 0x91f8, 0x924f, 0x944a, - 0x937b, 0x97a6, 0x88d9, 0x966b, 0x003f, 0x95d6, 0x959c, 0x9573, - 0x94e5, 0x9dc9, 0x8df5, 0x99d2, 0x8dc7, 0x8fc8, 0x9774, 0x003f, - 0x8e45, 0x9243, 0x92be, 0x8f45, 0x8ee1, 0x97a9, 0x97aa, 0x97ba, - 0x995f, 0x9979, 0x97c0, 0x97c6, 0x97c7, 0x97c8, 0x97ca, 0x99ad, - 0x9843, 0x8f97, 0x9c49, 0x97b7, 0xe068, 0xe1e8, 0xe883, 0xe98b, - 0x97ed, 0xea74, 0x97cd, 0x003f, 0x003f, 0xe780, 0x944e, 0x97f7, - 0x9cf6, 0x9451, 0x97f8, 0x97f9, 0xee50, 0x003f, 0x97fb, 0x97fc, - 0xe772, 0x9840, 0x9841, 0x003f, 0x97f1, 0x97f2, 0x88f4, 0x97f3, - 0x97f4, 0x003f, 0x97f5, 0x944f, 0x9450, 0x003f, 0x97fa, 0xe0d8, - 0x97df, 0x9a9a, 0x944a, 0x97e4, 0x97e5, 0x97e6, 0xe0f0, 0xe3b7, - 0xe3d7, 0x97e9, 0x97eb, 0xe8cb, 0x97cc, 0x97e1, 0xe258, 0xe7d2, - 0xe8af, 0x9ca6, 0x97b9, 0x97bb, 0x97be, 0x9441, 0x97bf, 0x9ed9, - 0xe099, 0x97c3, 0xe4f8, 0x97c9, 0x97b4, 0x9df2, 0xe896, 0x97ab, - 0x003f, 0x96f6, 0x97ac, 0x97ad, 0x97ae, 0x97af, 0x97b0, 0x9552, - 0x97de, 0x985a, 0x9d43, 0x97a4, 0x97cf, 0x9bc4, 0x9fcb, 0x97d6, - 0x97a5, 0x9cc9, 0x8c49, 0x97a6, 0xeecd, 0x9798, 0x9799, 0x979a, - 0x88d5, 0x979b, 0x979c, 0x9344, 0x979d, 0x979f, 0x9ceb, 0x97a0, - 0x97a1, 0x97a2, 0x97a3, 0x93bd, 0x934d, 0x99e5, 0x97d3, 0x003f, - 0xe561, 0x97d7, 0x97d8, 0x97d9, 0x97d1, 0x97d2, 0x97d5, 0x97a7, - 0x8a7d, 0x97b1, 0x003f, 0xe074, 0x8eaf, 0x8f59, 0x9283, 0x8e68, - /* 0xfa00 .. 0xfaff */ - 0x90d8, 0x9378, 0x91f1, 0x939c, 0x91ee, 0x93b4, 0x965c, 0xe774, - 0x8d73, 0x8d7e, 0x8ca9, 0x8a66, 0x9959, 0x003f, 0xed73, 0xed7e, - 0xed80, 0xed95, 0xedbc, 0xedcc, 0xedce, 0xedf9, 0xee42, 0xee59, - 0xee61, 0xee62, 0xee63, 0xee65, 0xee69, 0xee6c, 0xee75, 0xee81, - 0xee83, 0xee84, 0xee8d, 0xee95, 0xee97, 0xee98, 0xee9b, 0xeeb7, - 0xeebe, 0xeece, 0xeeda, 0xeedb, 0xeedd, 0xeeea, 0x003f, 0x003f, - 0x958e, 0x916d, 0x96c6, 0x95d7, 0x8bce, 0x94da, 0x8a85, 0x9251, - 0x8aed, 0x95bb, 0x966e, 0x9177, 0x9ba3, 0x89f7, 0x8a53, 0x919e, - 0x92a6, 0x9571, 0x8af9, 0x8f8b, 0x947e, 0x8a43, 0x8f8d, 0x8abf, - 0x8ecf, 0x003f, 0x91f4, 0x94e8, 0x8ed0, 0x8e83, 0x8b46, 0x9753, - 0x9163, 0x8f6a, 0x89d0, 0x92f5, 0x8d92, 0x93cb, 0x90df, 0x97fb, - 0xe375, 0x94c9, 0x8f90, 0x8ed2, 0x8f4c, 0x003f, 0x003f, 0x9298, - 0x8a8c, 0x8e8b, 0x8979, 0x8bde, 0x956f, 0x91a1, 0x003f, 0x88ed, - 0x93ef, 0x8bbf, 0x9570, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x95c0, 0x9976, 0x9153, 0x003f, 0x8f5b, 0x9962, 0x9745, 0x8ed9, - 0x8a85, 0x003f, 0x9a5b, 0x003f, 0x92cb, 0x95ad, 0x8982, 0x967a, - 0x9b58, 0x003f, 0x003f, 0x003f, 0x8dca, 0x9c73, 0x9caf, 0x9054, - 0x96fa, 0x919e, 0x003f, 0x92a6, 0x91d5, 0x9d89, 0x9d72, 0x003f, - 0x9dc2, 0x90b0, 0x984e, 0x965d, 0x8ff1, 0x9f65, 0x8e45, 0x97ac, - 0x003f, 0x8ea0, 0x8abf, 0x93d2, 0x8ecf, 0x003f, 0x8edd, 0x94c6, - 0x9296, 0x003f, 0x003f, 0x89e6, 0x003f, 0xe189, 0x8976, 0x90b7, - 0x92bc, 0x003f, 0x9285, 0x003f, 0x003f, 0x90df, 0x003f, 0xe355, - 0x97fb, 0x003f, 0x8ed2, 0x8d72, 0x89d8, 0x003f, 0xe5f4, 0x95a2, - 0x8e8b, 0x92b2, 0x8f94, 0x90bf, 0x8979, 0x91f8, 0x9740, 0x8bde, - 0x9dcc, 0x91a1, 0x9741, 0xe7ad, 0x003f, 0x003f, 0x003f, 0x93ef, - 0x96f5, 0x003f, 0x8bbf, 0x003f, 0x9570, 0x003f, 0xea9d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfb00 .. 0xfbff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x002b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfe00 .. 0xfeff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x815c, 0x815c, 0x815c, 0x815c, 0x005f, 0x005f, 0x005f, - 0x002c, 0x8141, 0x002e, 0x003f, 0x003b, 0x003a, 0x003f, 0x0021, - 0x815c, 0x0028, 0x0029, 0x007b, 0x007d, 0x816b, 0x816c, 0x0023, - 0x0026, 0x002a, 0x002b, 0x002d, 0x003c, 0x003e, 0x003d, 0x003f, - 0x005c, 0x0024, 0x0025, 0x0040, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xff00 .. 0xffff */ - 0x003f, 0x8149, 0xeefc, 0x8194, 0x8190, 0x8193, 0x8195, 0xeefb, - 0x8169, 0x816a, 0x8196, 0x817b, 0x8143, 0x817c, 0x8144, 0x815e, - 0x824f, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, - 0x8257, 0x8258, 0x8146, 0x8147, 0x8183, 0x8181, 0x8184, 0x8148, - 0x8197, 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, - 0x8267, 0x8268, 0x8269, 0x826a, 0x826b, 0x826c, 0x826d, 0x826e, - 0x826f, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276, - 0x8277, 0x8278, 0x8279, 0x816d, 0x815f, 0x816e, 0x814f, 0x8151, - 0x814d, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, - 0x8288, 0x8289, 0x828a, 0x828b, 0x828c, 0x828d, 0x828e, 0x828f, - 0x8290, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, - 0x8298, 0x8299, 0x829a, 0x816f, 0x8162, 0x8170, 0x8160, 0x003f, - 0x003f, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8191, 0x8192, 0x81ca, 0x8150, 0xeefa, 0x818f, 0x003f, 0x003f, - 0x84a0, 0x81a9, 0x81aa, 0x81a8, 0x81ab, 0x81a1, 0x819b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* defaults */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x0f00, 0x1000, - 0x1100, 0x1200, 0x1300, 0x1400, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x1500, 0x1600, - 0x1700, 0x1800, 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x1d00, 0x1e00, - 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, - 0x2700, 0x2800, 0x2900, 0x2a00, 0x2b00, 0x2c00, 0x2d00, 0x2e00, - 0x2f00, 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, 0x3600, - 0x3700, 0x3800, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, 0x3e00, - 0x3f00, 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, 0x4600, - 0x4700, 0x4800, 0x4900, 0x4a00, 0x4b00, 0x4c00, 0x4d00, 0x4e00, - 0x4f00, 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, 0x5600, - 0x5700, 0x5800, 0x5900, 0x5a00, 0x5b00, 0x5c00, 0x5d00, 0x5e00, - 0x5f00, 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500, 0x6600, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6700, 0x6800, 0x6900, 0x6c00, 0x6c00, 0x6a00, 0x6b00 -}; - -const struct dbcs_table cptable_932 = -{ - { 932, 2, 0x003f, 0x003f, "ANSI/OEM Japanese Shift-JIS" }, - cp2uni, - cp2uni_leadbytes, - uni2cp_low, - uni2cp_high, - { 0x81, 0x9f, 0xe0, 0xfc, 0x00, 0x00 } -}; diff --git a/reactos/tools/unicode/c_936.c b/reactos/tools/unicode/c_936.c deleted file mode 100644 index de0f28d1063..00000000000 --- a/reactos/tools/unicode/c_936.c +++ /dev/null @@ -1,7882 +0,0 @@ -/* code page 936 (ANSI/OEM Simplified Chinese GBK) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[32512] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x20ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003f, - /* lead byte 81 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x4e02, 0x4e04, 0x4e05, 0x4e06, 0x4e0f, 0x4e12, 0x4e17, 0x4e1f, - 0x4e20, 0x4e21, 0x4e23, 0x4e26, 0x4e29, 0x4e2e, 0x4e2f, 0x4e31, - 0x4e33, 0x4e35, 0x4e37, 0x4e3c, 0x4e40, 0x4e41, 0x4e42, 0x4e44, - 0x4e46, 0x4e4a, 0x4e51, 0x4e55, 0x4e57, 0x4e5a, 0x4e5b, 0x4e62, - 0x4e63, 0x4e64, 0x4e65, 0x4e67, 0x4e68, 0x4e6a, 0x4e6b, 0x4e6c, - 0x4e6d, 0x4e6e, 0x4e6f, 0x4e72, 0x4e74, 0x4e75, 0x4e76, 0x4e77, - 0x4e78, 0x4e79, 0x4e7a, 0x4e7b, 0x4e7c, 0x4e7d, 0x4e7f, 0x4e80, - 0x4e81, 0x4e82, 0x4e83, 0x4e84, 0x4e85, 0x4e87, 0x4e8a, 0x003f, - 0x4e90, 0x4e96, 0x4e97, 0x4e99, 0x4e9c, 0x4e9d, 0x4e9e, 0x4ea3, - 0x4eaa, 0x4eaf, 0x4eb0, 0x4eb1, 0x4eb4, 0x4eb6, 0x4eb7, 0x4eb8, - 0x4eb9, 0x4ebc, 0x4ebd, 0x4ebe, 0x4ec8, 0x4ecc, 0x4ecf, 0x4ed0, - 0x4ed2, 0x4eda, 0x4edb, 0x4edc, 0x4ee0, 0x4ee2, 0x4ee6, 0x4ee7, - 0x4ee9, 0x4eed, 0x4eee, 0x4eef, 0x4ef1, 0x4ef4, 0x4ef8, 0x4ef9, - 0x4efa, 0x4efc, 0x4efe, 0x4f00, 0x4f02, 0x4f03, 0x4f04, 0x4f05, - 0x4f06, 0x4f07, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12, 0x4f13, 0x4f14, - 0x4f15, 0x4f16, 0x4f1c, 0x4f1d, 0x4f21, 0x4f23, 0x4f28, 0x4f29, - 0x4f2c, 0x4f2d, 0x4f2e, 0x4f31, 0x4f33, 0x4f35, 0x4f37, 0x4f39, - 0x4f3b, 0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f44, 0x4f45, - 0x4f47, 0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, - 0x4f56, 0x4f61, 0x4f62, 0x4f66, 0x4f68, 0x4f6a, 0x4f6b, 0x4f6d, - 0x4f6e, 0x4f71, 0x4f72, 0x4f75, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, - 0x4f7d, 0x4f80, 0x4f81, 0x4f82, 0x4f85, 0x4f86, 0x4f87, 0x4f8a, - 0x4f8c, 0x4f8e, 0x4f90, 0x4f92, 0x4f93, 0x4f95, 0x4f96, 0x4f98, - 0x4f99, 0x4f9a, 0x4f9c, 0x4f9e, 0x4f9f, 0x4fa1, 0x4fa2, 0x003f, - /* lead byte 82 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x4fa4, 0x4fab, 0x4fad, 0x4fb0, 0x4fb1, 0x4fb2, 0x4fb3, 0x4fb4, - 0x4fb6, 0x4fb7, 0x4fb8, 0x4fb9, 0x4fba, 0x4fbb, 0x4fbc, 0x4fbd, - 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc2, 0x4fc6, 0x4fc7, 0x4fc8, 0x4fc9, - 0x4fcb, 0x4fcc, 0x4fcd, 0x4fd2, 0x4fd3, 0x4fd4, 0x4fd5, 0x4fd6, - 0x4fd9, 0x4fdb, 0x4fe0, 0x4fe2, 0x4fe4, 0x4fe5, 0x4fe7, 0x4feb, - 0x4fec, 0x4ff0, 0x4ff2, 0x4ff4, 0x4ff5, 0x4ff6, 0x4ff7, 0x4ff9, - 0x4ffb, 0x4ffc, 0x4ffd, 0x4fff, 0x5000, 0x5001, 0x5002, 0x5003, - 0x5004, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, 0x500a, 0x003f, - 0x500b, 0x500e, 0x5010, 0x5011, 0x5013, 0x5015, 0x5016, 0x5017, - 0x501b, 0x501d, 0x501e, 0x5020, 0x5022, 0x5023, 0x5024, 0x5027, - 0x502b, 0x502f, 0x5030, 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, - 0x5036, 0x5037, 0x5038, 0x5039, 0x503b, 0x503d, 0x503f, 0x5040, - 0x5041, 0x5042, 0x5044, 0x5045, 0x5046, 0x5049, 0x504a, 0x504b, - 0x504d, 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5056, 0x5057, - 0x5058, 0x5059, 0x505b, 0x505d, 0x505e, 0x505f, 0x5060, 0x5061, - 0x5062, 0x5063, 0x5064, 0x5066, 0x5067, 0x5068, 0x5069, 0x506a, - 0x506b, 0x506d, 0x506e, 0x506f, 0x5070, 0x5071, 0x5072, 0x5073, - 0x5074, 0x5075, 0x5078, 0x5079, 0x507a, 0x507c, 0x507d, 0x5081, - 0x5082, 0x5083, 0x5084, 0x5086, 0x5087, 0x5089, 0x508a, 0x508b, - 0x508c, 0x508e, 0x508f, 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, - 0x5095, 0x5096, 0x5097, 0x5098, 0x5099, 0x509a, 0x509b, 0x509c, - 0x509d, 0x509e, 0x509f, 0x50a0, 0x50a1, 0x50a2, 0x50a4, 0x50a6, - 0x50aa, 0x50ab, 0x50ad, 0x50ae, 0x50af, 0x50b0, 0x50b1, 0x50b3, - 0x50b4, 0x50b5, 0x50b6, 0x50b7, 0x50b8, 0x50b9, 0x50bc, 0x003f, - /* lead byte 83 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x50bd, 0x50be, 0x50bf, 0x50c0, 0x50c1, 0x50c2, 0x50c3, 0x50c4, - 0x50c5, 0x50c6, 0x50c7, 0x50c8, 0x50c9, 0x50ca, 0x50cb, 0x50cc, - 0x50cd, 0x50ce, 0x50d0, 0x50d1, 0x50d2, 0x50d3, 0x50d4, 0x50d5, - 0x50d7, 0x50d8, 0x50d9, 0x50db, 0x50dc, 0x50dd, 0x50de, 0x50df, - 0x50e0, 0x50e1, 0x50e2, 0x50e3, 0x50e4, 0x50e5, 0x50e8, 0x50e9, - 0x50ea, 0x50eb, 0x50ef, 0x50f0, 0x50f1, 0x50f2, 0x50f4, 0x50f6, - 0x50f7, 0x50f8, 0x50f9, 0x50fa, 0x50fc, 0x50fd, 0x50fe, 0x50ff, - 0x5100, 0x5101, 0x5102, 0x5103, 0x5104, 0x5105, 0x5108, 0x003f, - 0x5109, 0x510a, 0x510c, 0x510d, 0x510e, 0x510f, 0x5110, 0x5111, - 0x5113, 0x5114, 0x5115, 0x5116, 0x5117, 0x5118, 0x5119, 0x511a, - 0x511b, 0x511c, 0x511d, 0x511e, 0x511f, 0x5120, 0x5122, 0x5123, - 0x5124, 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512a, 0x512b, - 0x512c, 0x512d, 0x512e, 0x512f, 0x5130, 0x5131, 0x5132, 0x5133, - 0x5134, 0x5135, 0x5136, 0x5137, 0x5138, 0x5139, 0x513a, 0x513b, - 0x513c, 0x513d, 0x513e, 0x5142, 0x5147, 0x514a, 0x514c, 0x514e, - 0x514f, 0x5150, 0x5152, 0x5153, 0x5157, 0x5158, 0x5159, 0x515b, - 0x515d, 0x515e, 0x515f, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166, - 0x5167, 0x5169, 0x516a, 0x516f, 0x5172, 0x517a, 0x517e, 0x517f, - 0x5183, 0x5184, 0x5186, 0x5187, 0x518a, 0x518b, 0x518e, 0x518f, - 0x5190, 0x5191, 0x5193, 0x5194, 0x5198, 0x519a, 0x519d, 0x519e, - 0x519f, 0x51a1, 0x51a3, 0x51a6, 0x51a7, 0x51a8, 0x51a9, 0x51aa, - 0x51ad, 0x51ae, 0x51b4, 0x51b8, 0x51b9, 0x51ba, 0x51be, 0x51bf, - 0x51c1, 0x51c2, 0x51c3, 0x51c5, 0x51c8, 0x51ca, 0x51cd, 0x51ce, - 0x51d0, 0x51d2, 0x51d3, 0x51d4, 0x51d5, 0x51d6, 0x51d7, 0x003f, - /* lead byte 84 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x51d8, 0x51d9, 0x51da, 0x51dc, 0x51de, 0x51df, 0x51e2, 0x51e3, - 0x51e5, 0x51e6, 0x51e7, 0x51e8, 0x51e9, 0x51ea, 0x51ec, 0x51ee, - 0x51f1, 0x51f2, 0x51f4, 0x51f7, 0x51fe, 0x5204, 0x5205, 0x5209, - 0x520b, 0x520c, 0x520f, 0x5210, 0x5213, 0x5214, 0x5215, 0x521c, - 0x521e, 0x521f, 0x5221, 0x5222, 0x5223, 0x5225, 0x5226, 0x5227, - 0x522a, 0x522c, 0x522f, 0x5231, 0x5232, 0x5234, 0x5235, 0x523c, - 0x523e, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524b, - 0x524e, 0x524f, 0x5252, 0x5253, 0x5255, 0x5257, 0x5258, 0x003f, - 0x5259, 0x525a, 0x525b, 0x525d, 0x525f, 0x5260, 0x5262, 0x5263, - 0x5264, 0x5266, 0x5268, 0x526b, 0x526c, 0x526d, 0x526e, 0x5270, - 0x5271, 0x5273, 0x5274, 0x5275, 0x5276, 0x5277, 0x5278, 0x5279, - 0x527a, 0x527b, 0x527c, 0x527e, 0x5280, 0x5283, 0x5284, 0x5285, - 0x5286, 0x5287, 0x5289, 0x528a, 0x528b, 0x528c, 0x528d, 0x528e, - 0x528f, 0x5291, 0x5292, 0x5294, 0x5295, 0x5296, 0x5297, 0x5298, - 0x5299, 0x529a, 0x529c, 0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52ae, - 0x52af, 0x52b0, 0x52b4, 0x52b5, 0x52b6, 0x52b7, 0x52b8, 0x52b9, - 0x52ba, 0x52bb, 0x52bc, 0x52bd, 0x52c0, 0x52c1, 0x52c2, 0x52c4, - 0x52c5, 0x52c6, 0x52c8, 0x52ca, 0x52cc, 0x52cd, 0x52ce, 0x52cf, - 0x52d1, 0x52d3, 0x52d4, 0x52d5, 0x52d7, 0x52d9, 0x52da, 0x52db, - 0x52dc, 0x52dd, 0x52de, 0x52e0, 0x52e1, 0x52e2, 0x52e3, 0x52e5, - 0x52e6, 0x52e7, 0x52e8, 0x52e9, 0x52ea, 0x52eb, 0x52ec, 0x52ed, - 0x52ee, 0x52ef, 0x52f1, 0x52f2, 0x52f3, 0x52f4, 0x52f5, 0x52f6, - 0x52f7, 0x52f8, 0x52fb, 0x52fc, 0x52fd, 0x5301, 0x5302, 0x5303, - 0x5304, 0x5307, 0x5309, 0x530a, 0x530b, 0x530c, 0x530e, 0x003f, - /* lead byte 85 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5311, 0x5312, 0x5313, 0x5314, 0x5318, 0x531b, 0x531c, 0x531e, - 0x531f, 0x5322, 0x5324, 0x5325, 0x5327, 0x5328, 0x5329, 0x532b, - 0x532c, 0x532d, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334, - 0x5335, 0x5336, 0x5337, 0x5338, 0x533c, 0x533d, 0x5340, 0x5342, - 0x5344, 0x5346, 0x534b, 0x534c, 0x534d, 0x5350, 0x5354, 0x5358, - 0x5359, 0x535b, 0x535d, 0x5365, 0x5368, 0x536a, 0x536c, 0x536d, - 0x5372, 0x5376, 0x5379, 0x537b, 0x537c, 0x537d, 0x537e, 0x5380, - 0x5381, 0x5383, 0x5387, 0x5388, 0x538a, 0x538e, 0x538f, 0x003f, - 0x5390, 0x5391, 0x5392, 0x5393, 0x5394, 0x5396, 0x5397, 0x5399, - 0x539b, 0x539c, 0x539e, 0x53a0, 0x53a1, 0x53a4, 0x53a7, 0x53aa, - 0x53ab, 0x53ac, 0x53ad, 0x53af, 0x53b0, 0x53b1, 0x53b2, 0x53b3, - 0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53b9, 0x53ba, 0x53bc, 0x53bd, - 0x53be, 0x53c0, 0x53c3, 0x53c4, 0x53c5, 0x53c6, 0x53c7, 0x53ce, - 0x53cf, 0x53d0, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dc, 0x53dd, - 0x53de, 0x53e1, 0x53e2, 0x53e7, 0x53f4, 0x53fa, 0x53fe, 0x53ff, - 0x5400, 0x5402, 0x5405, 0x5407, 0x540b, 0x5414, 0x5418, 0x5419, - 0x541a, 0x541c, 0x5422, 0x5424, 0x5425, 0x542a, 0x5430, 0x5433, - 0x5436, 0x5437, 0x543a, 0x543d, 0x543f, 0x5441, 0x5442, 0x5444, - 0x5445, 0x5447, 0x5449, 0x544c, 0x544d, 0x544e, 0x544f, 0x5451, - 0x545a, 0x545d, 0x545e, 0x545f, 0x5460, 0x5461, 0x5463, 0x5465, - 0x5467, 0x5469, 0x546a, 0x546b, 0x546c, 0x546d, 0x546e, 0x546f, - 0x5470, 0x5474, 0x5479, 0x547a, 0x547e, 0x547f, 0x5481, 0x5483, - 0x5485, 0x5487, 0x5488, 0x5489, 0x548a, 0x548d, 0x5491, 0x5493, - 0x5497, 0x5498, 0x549c, 0x549e, 0x549f, 0x54a0, 0x54a1, 0x003f, - /* lead byte 86 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x54a2, 0x54a5, 0x54ae, 0x54b0, 0x54b2, 0x54b5, 0x54b6, 0x54b7, - 0x54b9, 0x54ba, 0x54bc, 0x54be, 0x54c3, 0x54c5, 0x54ca, 0x54cb, - 0x54d6, 0x54d8, 0x54db, 0x54e0, 0x54e1, 0x54e2, 0x54e3, 0x54e4, - 0x54eb, 0x54ec, 0x54ef, 0x54f0, 0x54f1, 0x54f4, 0x54f5, 0x54f6, - 0x54f7, 0x54f8, 0x54f9, 0x54fb, 0x54fe, 0x5500, 0x5502, 0x5503, - 0x5504, 0x5505, 0x5508, 0x550a, 0x550b, 0x550c, 0x550d, 0x550e, - 0x5512, 0x5513, 0x5515, 0x5516, 0x5517, 0x5518, 0x5519, 0x551a, - 0x551c, 0x551d, 0x551e, 0x551f, 0x5521, 0x5525, 0x5526, 0x003f, - 0x5528, 0x5529, 0x552b, 0x552d, 0x5532, 0x5534, 0x5535, 0x5536, - 0x5538, 0x5539, 0x553a, 0x553b, 0x553d, 0x5540, 0x5542, 0x5545, - 0x5547, 0x5548, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5551, - 0x5552, 0x5553, 0x5554, 0x5557, 0x5558, 0x5559, 0x555a, 0x555b, - 0x555d, 0x555e, 0x555f, 0x5560, 0x5562, 0x5563, 0x5568, 0x5569, - 0x556b, 0x556f, 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5579, - 0x557a, 0x557d, 0x557f, 0x5585, 0x5586, 0x558c, 0x558d, 0x558e, - 0x5590, 0x5592, 0x5593, 0x5595, 0x5596, 0x5597, 0x559a, 0x559b, - 0x559e, 0x55a0, 0x55a1, 0x55a2, 0x55a3, 0x55a4, 0x55a5, 0x55a6, - 0x55a8, 0x55a9, 0x55aa, 0x55ab, 0x55ac, 0x55ad, 0x55ae, 0x55af, - 0x55b0, 0x55b2, 0x55b4, 0x55b6, 0x55b8, 0x55ba, 0x55bc, 0x55bf, - 0x55c0, 0x55c1, 0x55c2, 0x55c3, 0x55c6, 0x55c7, 0x55c8, 0x55ca, - 0x55cb, 0x55ce, 0x55cf, 0x55d0, 0x55d5, 0x55d7, 0x55d8, 0x55d9, - 0x55da, 0x55db, 0x55de, 0x55e0, 0x55e2, 0x55e7, 0x55e9, 0x55ed, - 0x55ee, 0x55f0, 0x55f1, 0x55f4, 0x55f6, 0x55f8, 0x55f9, 0x55fa, - 0x55fb, 0x55fc, 0x55ff, 0x5602, 0x5603, 0x5604, 0x5605, 0x003f, - /* lead byte 87 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5606, 0x5607, 0x560a, 0x560b, 0x560d, 0x5610, 0x5611, 0x5612, - 0x5613, 0x5614, 0x5615, 0x5616, 0x5617, 0x5619, 0x561a, 0x561c, - 0x561d, 0x5620, 0x5621, 0x5622, 0x5625, 0x5626, 0x5628, 0x5629, - 0x562a, 0x562b, 0x562e, 0x562f, 0x5630, 0x5633, 0x5635, 0x5637, - 0x5638, 0x563a, 0x563c, 0x563d, 0x563e, 0x5640, 0x5641, 0x5642, - 0x5643, 0x5644, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, 0x564a, - 0x564b, 0x564f, 0x5650, 0x5651, 0x5652, 0x5653, 0x5655, 0x5656, - 0x565a, 0x565b, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x003f, - 0x5663, 0x5665, 0x5666, 0x5667, 0x566d, 0x566e, 0x566f, 0x5670, - 0x5672, 0x5673, 0x5674, 0x5675, 0x5677, 0x5678, 0x5679, 0x567a, - 0x567d, 0x567e, 0x567f, 0x5680, 0x5681, 0x5682, 0x5683, 0x5684, - 0x5687, 0x5688, 0x5689, 0x568a, 0x568b, 0x568c, 0x568d, 0x5690, - 0x5691, 0x5692, 0x5694, 0x5695, 0x5696, 0x5697, 0x5698, 0x5699, - 0x569a, 0x569b, 0x569c, 0x569d, 0x569e, 0x569f, 0x56a0, 0x56a1, - 0x56a2, 0x56a4, 0x56a5, 0x56a6, 0x56a7, 0x56a8, 0x56a9, 0x56aa, - 0x56ab, 0x56ac, 0x56ad, 0x56ae, 0x56b0, 0x56b1, 0x56b2, 0x56b3, - 0x56b4, 0x56b5, 0x56b6, 0x56b8, 0x56b9, 0x56ba, 0x56bb, 0x56bd, - 0x56be, 0x56bf, 0x56c0, 0x56c1, 0x56c2, 0x56c3, 0x56c4, 0x56c5, - 0x56c6, 0x56c7, 0x56c8, 0x56c9, 0x56cb, 0x56cc, 0x56cd, 0x56ce, - 0x56cf, 0x56d0, 0x56d1, 0x56d2, 0x56d3, 0x56d5, 0x56d6, 0x56d8, - 0x56d9, 0x56dc, 0x56e3, 0x56e5, 0x56e6, 0x56e7, 0x56e8, 0x56e9, - 0x56ea, 0x56ec, 0x56ee, 0x56ef, 0x56f2, 0x56f3, 0x56f6, 0x56f7, - 0x56f8, 0x56fb, 0x56fc, 0x5700, 0x5701, 0x5702, 0x5705, 0x5707, - 0x570b, 0x570c, 0x570d, 0x570e, 0x570f, 0x5710, 0x5711, 0x003f, - /* lead byte 88 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5712, 0x5713, 0x5714, 0x5715, 0x5716, 0x5717, 0x5718, 0x5719, - 0x571a, 0x571b, 0x571d, 0x571e, 0x5720, 0x5721, 0x5722, 0x5724, - 0x5725, 0x5726, 0x5727, 0x572b, 0x5731, 0x5732, 0x5734, 0x5735, - 0x5736, 0x5737, 0x5738, 0x573c, 0x573d, 0x573f, 0x5741, 0x5743, - 0x5744, 0x5745, 0x5746, 0x5748, 0x5749, 0x574b, 0x5752, 0x5753, - 0x5754, 0x5755, 0x5756, 0x5758, 0x5759, 0x5762, 0x5763, 0x5765, - 0x5767, 0x576c, 0x576e, 0x5770, 0x5771, 0x5772, 0x5774, 0x5775, - 0x5778, 0x5779, 0x577a, 0x577d, 0x577e, 0x577f, 0x5780, 0x003f, - 0x5781, 0x5787, 0x5788, 0x5789, 0x578a, 0x578d, 0x578e, 0x578f, - 0x5790, 0x5791, 0x5794, 0x5795, 0x5796, 0x5797, 0x5798, 0x5799, - 0x579a, 0x579c, 0x579d, 0x579e, 0x579f, 0x57a5, 0x57a8, 0x57aa, - 0x57ac, 0x57af, 0x57b0, 0x57b1, 0x57b3, 0x57b5, 0x57b6, 0x57b7, - 0x57b9, 0x57ba, 0x57bb, 0x57bc, 0x57bd, 0x57be, 0x57bf, 0x57c0, - 0x57c1, 0x57c4, 0x57c5, 0x57c6, 0x57c7, 0x57c8, 0x57c9, 0x57ca, - 0x57cc, 0x57cd, 0x57d0, 0x57d1, 0x57d3, 0x57d6, 0x57d7, 0x57db, - 0x57dc, 0x57de, 0x57e1, 0x57e2, 0x57e3, 0x57e5, 0x57e6, 0x57e7, - 0x57e8, 0x57e9, 0x57ea, 0x57eb, 0x57ec, 0x57ee, 0x57f0, 0x57f1, - 0x57f2, 0x57f3, 0x57f5, 0x57f6, 0x57f7, 0x57fb, 0x57fc, 0x57fe, - 0x57ff, 0x5801, 0x5803, 0x5804, 0x5805, 0x5808, 0x5809, 0x580a, - 0x580c, 0x580e, 0x580f, 0x5810, 0x5812, 0x5813, 0x5814, 0x5816, - 0x5817, 0x5818, 0x581a, 0x581b, 0x581c, 0x581d, 0x581f, 0x5822, - 0x5823, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582b, 0x582c, - 0x582d, 0x582e, 0x582f, 0x5831, 0x5832, 0x5833, 0x5834, 0x5836, - 0x5837, 0x5838, 0x5839, 0x583a, 0x583b, 0x583c, 0x583d, 0x003f, - /* lead byte 89 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x583e, 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5845, 0x5846, - 0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584e, 0x584f, 0x5850, - 0x5852, 0x5853, 0x5855, 0x5856, 0x5857, 0x5859, 0x585a, 0x585b, - 0x585c, 0x585d, 0x585f, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, - 0x5866, 0x5867, 0x5868, 0x5869, 0x586a, 0x586d, 0x586e, 0x586f, - 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877, - 0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587f, 0x5882, - 0x5884, 0x5886, 0x5887, 0x5888, 0x588a, 0x588b, 0x588c, 0x003f, - 0x588d, 0x588e, 0x588f, 0x5890, 0x5891, 0x5894, 0x5895, 0x5896, - 0x5897, 0x5898, 0x589b, 0x589c, 0x589d, 0x58a0, 0x58a1, 0x58a2, - 0x58a3, 0x58a4, 0x58a5, 0x58a6, 0x58a7, 0x58aa, 0x58ab, 0x58ac, - 0x58ad, 0x58ae, 0x58af, 0x58b0, 0x58b1, 0x58b2, 0x58b3, 0x58b4, - 0x58b5, 0x58b6, 0x58b7, 0x58b8, 0x58b9, 0x58ba, 0x58bb, 0x58bd, - 0x58be, 0x58bf, 0x58c0, 0x58c2, 0x58c3, 0x58c4, 0x58c6, 0x58c7, - 0x58c8, 0x58c9, 0x58ca, 0x58cb, 0x58cc, 0x58cd, 0x58ce, 0x58cf, - 0x58d0, 0x58d2, 0x58d3, 0x58d4, 0x58d6, 0x58d7, 0x58d8, 0x58d9, - 0x58da, 0x58db, 0x58dc, 0x58dd, 0x58de, 0x58df, 0x58e0, 0x58e1, - 0x58e2, 0x58e3, 0x58e5, 0x58e6, 0x58e7, 0x58e8, 0x58e9, 0x58ea, - 0x58ed, 0x58ef, 0x58f1, 0x58f2, 0x58f4, 0x58f5, 0x58f7, 0x58f8, - 0x58fa, 0x58fb, 0x58fc, 0x58fd, 0x58fe, 0x58ff, 0x5900, 0x5901, - 0x5903, 0x5905, 0x5906, 0x5908, 0x5909, 0x590a, 0x590b, 0x590c, - 0x590e, 0x5910, 0x5911, 0x5912, 0x5913, 0x5917, 0x5918, 0x591b, - 0x591d, 0x591e, 0x5920, 0x5921, 0x5922, 0x5923, 0x5926, 0x5928, - 0x592c, 0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593b, 0x003f, - /* lead byte 8a */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x593d, 0x593e, 0x593f, 0x5940, 0x5943, 0x5945, 0x5946, 0x594a, - 0x594c, 0x594d, 0x5950, 0x5952, 0x5953, 0x5959, 0x595b, 0x595c, - 0x595d, 0x595e, 0x595f, 0x5961, 0x5963, 0x5964, 0x5966, 0x5967, - 0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f, - 0x5970, 0x5971, 0x5972, 0x5975, 0x5977, 0x597a, 0x597b, 0x597c, - 0x597e, 0x597f, 0x5980, 0x5985, 0x5989, 0x598b, 0x598c, 0x598e, - 0x598f, 0x5990, 0x5991, 0x5994, 0x5995, 0x5998, 0x599a, 0x599b, - 0x599c, 0x599d, 0x599f, 0x59a0, 0x59a1, 0x59a2, 0x59a6, 0x003f, - 0x59a7, 0x59ac, 0x59ad, 0x59b0, 0x59b1, 0x59b3, 0x59b4, 0x59b5, - 0x59b6, 0x59b7, 0x59b8, 0x59ba, 0x59bc, 0x59bd, 0x59bf, 0x59c0, - 0x59c1, 0x59c2, 0x59c3, 0x59c4, 0x59c5, 0x59c7, 0x59c8, 0x59c9, - 0x59cc, 0x59cd, 0x59ce, 0x59cf, 0x59d5, 0x59d6, 0x59d9, 0x59db, - 0x59de, 0x59df, 0x59e0, 0x59e1, 0x59e2, 0x59e4, 0x59e6, 0x59e7, - 0x59e9, 0x59ea, 0x59eb, 0x59ed, 0x59ee, 0x59ef, 0x59f0, 0x59f1, - 0x59f2, 0x59f3, 0x59f4, 0x59f5, 0x59f6, 0x59f7, 0x59f8, 0x59fa, - 0x59fc, 0x59fd, 0x59fe, 0x5a00, 0x5a02, 0x5a0a, 0x5a0b, 0x5a0d, - 0x5a0e, 0x5a0f, 0x5a10, 0x5a12, 0x5a14, 0x5a15, 0x5a16, 0x5a17, - 0x5a19, 0x5a1a, 0x5a1b, 0x5a1d, 0x5a1e, 0x5a21, 0x5a22, 0x5a24, - 0x5a26, 0x5a27, 0x5a28, 0x5a2a, 0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, - 0x5a2f, 0x5a30, 0x5a33, 0x5a35, 0x5a37, 0x5a38, 0x5a39, 0x5a3a, - 0x5a3b, 0x5a3d, 0x5a3e, 0x5a3f, 0x5a41, 0x5a42, 0x5a43, 0x5a44, - 0x5a45, 0x5a47, 0x5a48, 0x5a4b, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, - 0x5a50, 0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a56, 0x5a57, 0x5a58, - 0x5a59, 0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60, 0x003f, - /* lead byte 8b */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5a61, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a68, 0x5a69, 0x5a6b, - 0x5a6c, 0x5a6d, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71, 0x5a72, 0x5a73, - 0x5a78, 0x5a79, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5a80, 0x5a81, - 0x5a82, 0x5a83, 0x5a84, 0x5a85, 0x5a86, 0x5a87, 0x5a88, 0x5a89, - 0x5a8a, 0x5a8b, 0x5a8c, 0x5a8d, 0x5a8e, 0x5a8f, 0x5a90, 0x5a91, - 0x5a93, 0x5a94, 0x5a95, 0x5a96, 0x5a97, 0x5a98, 0x5a99, 0x5a9c, - 0x5a9d, 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa1, 0x5aa2, 0x5aa3, 0x5aa4, - 0x5aa5, 0x5aa6, 0x5aa7, 0x5aa8, 0x5aa9, 0x5aab, 0x5aac, 0x003f, - 0x5aad, 0x5aae, 0x5aaf, 0x5ab0, 0x5ab1, 0x5ab4, 0x5ab6, 0x5ab7, - 0x5ab9, 0x5aba, 0x5abb, 0x5abc, 0x5abd, 0x5abf, 0x5ac0, 0x5ac3, - 0x5ac4, 0x5ac5, 0x5ac6, 0x5ac7, 0x5ac8, 0x5aca, 0x5acb, 0x5acd, - 0x5ace, 0x5acf, 0x5ad0, 0x5ad1, 0x5ad3, 0x5ad5, 0x5ad7, 0x5ad9, - 0x5ada, 0x5adb, 0x5add, 0x5ade, 0x5adf, 0x5ae2, 0x5ae4, 0x5ae5, - 0x5ae7, 0x5ae8, 0x5aea, 0x5aec, 0x5aed, 0x5aee, 0x5aef, 0x5af0, - 0x5af2, 0x5af3, 0x5af4, 0x5af5, 0x5af6, 0x5af7, 0x5af8, 0x5af9, - 0x5afa, 0x5afb, 0x5afc, 0x5afd, 0x5afe, 0x5aff, 0x5b00, 0x5b01, - 0x5b02, 0x5b03, 0x5b04, 0x5b05, 0x5b06, 0x5b07, 0x5b08, 0x5b0a, - 0x5b0b, 0x5b0c, 0x5b0d, 0x5b0e, 0x5b0f, 0x5b10, 0x5b11, 0x5b12, - 0x5b13, 0x5b14, 0x5b15, 0x5b18, 0x5b19, 0x5b1a, 0x5b1b, 0x5b1c, - 0x5b1d, 0x5b1e, 0x5b1f, 0x5b20, 0x5b21, 0x5b22, 0x5b23, 0x5b24, - 0x5b25, 0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b, 0x5b2c, - 0x5b2d, 0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b33, 0x5b35, 0x5b36, - 0x5b38, 0x5b39, 0x5b3a, 0x5b3b, 0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, - 0x5b41, 0x5b42, 0x5b43, 0x5b44, 0x5b45, 0x5b46, 0x5b47, 0x003f, - /* lead byte 8c */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5b48, 0x5b49, 0x5b4a, 0x5b4b, 0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f, - 0x5b52, 0x5b56, 0x5b5e, 0x5b60, 0x5b61, 0x5b67, 0x5b68, 0x5b6b, - 0x5b6d, 0x5b6e, 0x5b6f, 0x5b72, 0x5b74, 0x5b76, 0x5b77, 0x5b78, - 0x5b79, 0x5b7b, 0x5b7c, 0x5b7e, 0x5b7f, 0x5b82, 0x5b86, 0x5b8a, - 0x5b8d, 0x5b8e, 0x5b90, 0x5b91, 0x5b92, 0x5b94, 0x5b96, 0x5b9f, - 0x5ba7, 0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5bae, 0x5baf, 0x5bb1, - 0x5bb2, 0x5bb7, 0x5bba, 0x5bbb, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bc3, - 0x5bc8, 0x5bc9, 0x5bca, 0x5bcb, 0x5bcd, 0x5bce, 0x5bcf, 0x003f, - 0x5bd1, 0x5bd4, 0x5bd5, 0x5bd6, 0x5bd7, 0x5bd8, 0x5bd9, 0x5bda, - 0x5bdb, 0x5bdc, 0x5be0, 0x5be2, 0x5be3, 0x5be6, 0x5be7, 0x5be9, - 0x5bea, 0x5beb, 0x5bec, 0x5bed, 0x5bef, 0x5bf1, 0x5bf2, 0x5bf3, - 0x5bf4, 0x5bf5, 0x5bf6, 0x5bf7, 0x5bfd, 0x5bfe, 0x5c00, 0x5c02, - 0x5c03, 0x5c05, 0x5c07, 0x5c08, 0x5c0b, 0x5c0c, 0x5c0d, 0x5c0e, - 0x5c10, 0x5c12, 0x5c13, 0x5c17, 0x5c19, 0x5c1b, 0x5c1e, 0x5c1f, - 0x5c20, 0x5c21, 0x5c23, 0x5c26, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, - 0x5c2d, 0x5c2e, 0x5c2f, 0x5c30, 0x5c32, 0x5c33, 0x5c35, 0x5c36, - 0x5c37, 0x5c43, 0x5c44, 0x5c46, 0x5c47, 0x5c4c, 0x5c4d, 0x5c52, - 0x5c53, 0x5c54, 0x5c56, 0x5c57, 0x5c58, 0x5c5a, 0x5c5b, 0x5c5c, - 0x5c5d, 0x5c5f, 0x5c62, 0x5c64, 0x5c67, 0x5c68, 0x5c69, 0x5c6a, - 0x5c6b, 0x5c6c, 0x5c6d, 0x5c70, 0x5c72, 0x5c73, 0x5c74, 0x5c75, - 0x5c76, 0x5c77, 0x5c78, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c7e, 0x5c80, - 0x5c83, 0x5c84, 0x5c85, 0x5c86, 0x5c87, 0x5c89, 0x5c8a, 0x5c8b, - 0x5c8e, 0x5c8f, 0x5c92, 0x5c93, 0x5c95, 0x5c9d, 0x5c9e, 0x5c9f, - 0x5ca0, 0x5ca1, 0x5ca4, 0x5ca5, 0x5ca6, 0x5ca7, 0x5ca8, 0x003f, - /* lead byte 8d */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5caa, 0x5cae, 0x5caf, 0x5cb0, 0x5cb2, 0x5cb4, 0x5cb6, 0x5cb9, - 0x5cba, 0x5cbb, 0x5cbc, 0x5cbe, 0x5cc0, 0x5cc2, 0x5cc3, 0x5cc5, - 0x5cc6, 0x5cc7, 0x5cc8, 0x5cc9, 0x5cca, 0x5ccc, 0x5ccd, 0x5cce, - 0x5ccf, 0x5cd0, 0x5cd1, 0x5cd3, 0x5cd4, 0x5cd5, 0x5cd6, 0x5cd7, - 0x5cd8, 0x5cda, 0x5cdb, 0x5cdc, 0x5cdd, 0x5cde, 0x5cdf, 0x5ce0, - 0x5ce2, 0x5ce3, 0x5ce7, 0x5ce9, 0x5ceb, 0x5cec, 0x5cee, 0x5cef, - 0x5cf1, 0x5cf2, 0x5cf3, 0x5cf4, 0x5cf5, 0x5cf6, 0x5cf7, 0x5cf8, - 0x5cf9, 0x5cfa, 0x5cfc, 0x5cfd, 0x5cfe, 0x5cff, 0x5d00, 0x003f, - 0x5d01, 0x5d04, 0x5d05, 0x5d08, 0x5d09, 0x5d0a, 0x5d0b, 0x5d0c, - 0x5d0d, 0x5d0f, 0x5d10, 0x5d11, 0x5d12, 0x5d13, 0x5d15, 0x5d17, - 0x5d18, 0x5d19, 0x5d1a, 0x5d1c, 0x5d1d, 0x5d1f, 0x5d20, 0x5d21, - 0x5d22, 0x5d23, 0x5d25, 0x5d28, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2f, - 0x5d30, 0x5d31, 0x5d32, 0x5d33, 0x5d35, 0x5d36, 0x5d37, 0x5d38, - 0x5d39, 0x5d3a, 0x5d3b, 0x5d3c, 0x5d3f, 0x5d40, 0x5d41, 0x5d42, - 0x5d43, 0x5d44, 0x5d45, 0x5d46, 0x5d48, 0x5d49, 0x5d4d, 0x5d4e, - 0x5d4f, 0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, - 0x5d57, 0x5d59, 0x5d5a, 0x5d5c, 0x5d5e, 0x5d5f, 0x5d60, 0x5d61, - 0x5d62, 0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67, 0x5d68, 0x5d6a, - 0x5d6d, 0x5d6e, 0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d75, 0x5d76, - 0x5d77, 0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, - 0x5d7f, 0x5d80, 0x5d81, 0x5d83, 0x5d84, 0x5d85, 0x5d86, 0x5d87, - 0x5d88, 0x5d89, 0x5d8a, 0x5d8b, 0x5d8c, 0x5d8d, 0x5d8e, 0x5d8f, - 0x5d90, 0x5d91, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d96, 0x5d97, - 0x5d98, 0x5d9a, 0x5d9b, 0x5d9c, 0x5d9e, 0x5d9f, 0x5da0, 0x003f, - /* lead byte 8e */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5da1, 0x5da2, 0x5da3, 0x5da4, 0x5da5, 0x5da6, 0x5da7, 0x5da8, - 0x5da9, 0x5daa, 0x5dab, 0x5dac, 0x5dad, 0x5dae, 0x5daf, 0x5db0, - 0x5db1, 0x5db2, 0x5db3, 0x5db4, 0x5db5, 0x5db6, 0x5db8, 0x5db9, - 0x5dba, 0x5dbb, 0x5dbc, 0x5dbd, 0x5dbe, 0x5dbf, 0x5dc0, 0x5dc1, - 0x5dc2, 0x5dc3, 0x5dc4, 0x5dc6, 0x5dc7, 0x5dc8, 0x5dc9, 0x5dca, - 0x5dcb, 0x5dcc, 0x5dce, 0x5dcf, 0x5dd0, 0x5dd1, 0x5dd2, 0x5dd3, - 0x5dd4, 0x5dd5, 0x5dd6, 0x5dd7, 0x5dd8, 0x5dd9, 0x5dda, 0x5ddc, - 0x5ddf, 0x5de0, 0x5de3, 0x5de4, 0x5dea, 0x5dec, 0x5ded, 0x003f, - 0x5df0, 0x5df5, 0x5df6, 0x5df8, 0x5df9, 0x5dfa, 0x5dfb, 0x5dfc, - 0x5dff, 0x5e00, 0x5e04, 0x5e07, 0x5e09, 0x5e0a, 0x5e0b, 0x5e0d, - 0x5e0e, 0x5e12, 0x5e13, 0x5e17, 0x5e1e, 0x5e1f, 0x5e20, 0x5e21, - 0x5e22, 0x5e23, 0x5e24, 0x5e25, 0x5e28, 0x5e29, 0x5e2a, 0x5e2b, - 0x5e2c, 0x5e2f, 0x5e30, 0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, - 0x5e39, 0x5e3a, 0x5e3e, 0x5e3f, 0x5e40, 0x5e41, 0x5e43, 0x5e46, - 0x5e47, 0x5e48, 0x5e49, 0x5e4a, 0x5e4b, 0x5e4d, 0x5e4e, 0x5e4f, - 0x5e50, 0x5e51, 0x5e52, 0x5e53, 0x5e56, 0x5e57, 0x5e58, 0x5e59, - 0x5e5a, 0x5e5c, 0x5e5d, 0x5e5f, 0x5e60, 0x5e63, 0x5e64, 0x5e65, - 0x5e66, 0x5e67, 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, - 0x5e6e, 0x5e6f, 0x5e70, 0x5e71, 0x5e75, 0x5e77, 0x5e79, 0x5e7e, - 0x5e81, 0x5e82, 0x5e83, 0x5e85, 0x5e88, 0x5e89, 0x5e8c, 0x5e8d, - 0x5e8e, 0x5e92, 0x5e98, 0x5e9b, 0x5e9d, 0x5ea1, 0x5ea2, 0x5ea3, - 0x5ea4, 0x5ea8, 0x5ea9, 0x5eaa, 0x5eab, 0x5eac, 0x5eae, 0x5eaf, - 0x5eb0, 0x5eb1, 0x5eb2, 0x5eb4, 0x5eba, 0x5ebb, 0x5ebc, 0x5ebd, - 0x5ebf, 0x5ec0, 0x5ec1, 0x5ec2, 0x5ec3, 0x5ec4, 0x5ec5, 0x003f, - /* lead byte 8f */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5ec6, 0x5ec7, 0x5ec8, 0x5ecb, 0x5ecc, 0x5ecd, 0x5ece, 0x5ecf, - 0x5ed0, 0x5ed4, 0x5ed5, 0x5ed7, 0x5ed8, 0x5ed9, 0x5eda, 0x5edc, - 0x5edd, 0x5ede, 0x5edf, 0x5ee0, 0x5ee1, 0x5ee2, 0x5ee3, 0x5ee4, - 0x5ee5, 0x5ee6, 0x5ee7, 0x5ee9, 0x5eeb, 0x5eec, 0x5eed, 0x5eee, - 0x5eef, 0x5ef0, 0x5ef1, 0x5ef2, 0x5ef3, 0x5ef5, 0x5ef8, 0x5ef9, - 0x5efb, 0x5efc, 0x5efd, 0x5f05, 0x5f06, 0x5f07, 0x5f09, 0x5f0c, - 0x5f0d, 0x5f0e, 0x5f10, 0x5f12, 0x5f14, 0x5f16, 0x5f19, 0x5f1a, - 0x5f1c, 0x5f1d, 0x5f1e, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x003f, - 0x5f28, 0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f32, 0x5f33, 0x5f34, - 0x5f35, 0x5f36, 0x5f37, 0x5f38, 0x5f3b, 0x5f3d, 0x5f3e, 0x5f3f, - 0x5f41, 0x5f42, 0x5f43, 0x5f44, 0x5f45, 0x5f46, 0x5f47, 0x5f48, - 0x5f49, 0x5f4a, 0x5f4b, 0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f, 0x5f51, - 0x5f54, 0x5f59, 0x5f5a, 0x5f5b, 0x5f5c, 0x5f5e, 0x5f5f, 0x5f60, - 0x5f63, 0x5f65, 0x5f67, 0x5f68, 0x5f6b, 0x5f6e, 0x5f6f, 0x5f72, - 0x5f74, 0x5f75, 0x5f76, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e, 0x5f7f, - 0x5f83, 0x5f86, 0x5f8d, 0x5f8e, 0x5f8f, 0x5f91, 0x5f93, 0x5f94, - 0x5f96, 0x5f9a, 0x5f9b, 0x5f9d, 0x5f9e, 0x5f9f, 0x5fa0, 0x5fa2, - 0x5fa3, 0x5fa4, 0x5fa5, 0x5fa6, 0x5fa7, 0x5fa9, 0x5fab, 0x5fac, - 0x5faf, 0x5fb0, 0x5fb1, 0x5fb2, 0x5fb3, 0x5fb4, 0x5fb6, 0x5fb8, - 0x5fb9, 0x5fba, 0x5fbb, 0x5fbe, 0x5fbf, 0x5fc0, 0x5fc1, 0x5fc2, - 0x5fc7, 0x5fc8, 0x5fca, 0x5fcb, 0x5fce, 0x5fd3, 0x5fd4, 0x5fd5, - 0x5fda, 0x5fdb, 0x5fdc, 0x5fde, 0x5fdf, 0x5fe2, 0x5fe3, 0x5fe5, - 0x5fe6, 0x5fe8, 0x5fe9, 0x5fec, 0x5fef, 0x5ff0, 0x5ff2, 0x5ff3, - 0x5ff4, 0x5ff6, 0x5ff7, 0x5ff9, 0x5ffa, 0x5ffc, 0x6007, 0x003f, - /* lead byte 90 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6008, 0x6009, 0x600b, 0x600c, 0x6010, 0x6011, 0x6013, 0x6017, - 0x6018, 0x601a, 0x601e, 0x601f, 0x6022, 0x6023, 0x6024, 0x602c, - 0x602d, 0x602e, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6036, - 0x6037, 0x6038, 0x6039, 0x603a, 0x603d, 0x603e, 0x6040, 0x6044, - 0x6045, 0x6046, 0x6047, 0x6048, 0x6049, 0x604a, 0x604c, 0x604e, - 0x604f, 0x6051, 0x6053, 0x6054, 0x6056, 0x6057, 0x6058, 0x605b, - 0x605c, 0x605e, 0x605f, 0x6060, 0x6061, 0x6065, 0x6066, 0x606e, - 0x6071, 0x6072, 0x6074, 0x6075, 0x6077, 0x607e, 0x6080, 0x003f, - 0x6081, 0x6082, 0x6085, 0x6086, 0x6087, 0x6088, 0x608a, 0x608b, - 0x608e, 0x608f, 0x6090, 0x6091, 0x6093, 0x6095, 0x6097, 0x6098, - 0x6099, 0x609c, 0x609e, 0x60a1, 0x60a2, 0x60a4, 0x60a5, 0x60a7, - 0x60a9, 0x60aa, 0x60ae, 0x60b0, 0x60b3, 0x60b5, 0x60b6, 0x60b7, - 0x60b9, 0x60ba, 0x60bd, 0x60be, 0x60bf, 0x60c0, 0x60c1, 0x60c2, - 0x60c3, 0x60c4, 0x60c7, 0x60c8, 0x60c9, 0x60cc, 0x60cd, 0x60ce, - 0x60cf, 0x60d0, 0x60d2, 0x60d3, 0x60d4, 0x60d6, 0x60d7, 0x60d9, - 0x60db, 0x60de, 0x60e1, 0x60e2, 0x60e3, 0x60e4, 0x60e5, 0x60ea, - 0x60f1, 0x60f2, 0x60f5, 0x60f7, 0x60f8, 0x60fb, 0x60fc, 0x60fd, - 0x60fe, 0x60ff, 0x6102, 0x6103, 0x6104, 0x6105, 0x6107, 0x610a, - 0x610b, 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, - 0x6117, 0x6118, 0x6119, 0x611b, 0x611c, 0x611d, 0x611e, 0x6121, - 0x6122, 0x6125, 0x6128, 0x6129, 0x612a, 0x612c, 0x612d, 0x612e, - 0x612f, 0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, - 0x6137, 0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, - 0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146, 0x003f, - /* lead byte 91 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6147, 0x6149, 0x614b, 0x614d, 0x614f, 0x6150, 0x6152, 0x6153, - 0x6154, 0x6156, 0x6157, 0x6158, 0x6159, 0x615a, 0x615b, 0x615c, - 0x615e, 0x615f, 0x6160, 0x6161, 0x6163, 0x6164, 0x6165, 0x6166, - 0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f, 0x6171, - 0x6172, 0x6173, 0x6174, 0x6176, 0x6178, 0x6179, 0x617a, 0x617b, - 0x617c, 0x617d, 0x617e, 0x617f, 0x6180, 0x6181, 0x6182, 0x6183, - 0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618a, 0x618c, - 0x618d, 0x618f, 0x6190, 0x6191, 0x6192, 0x6193, 0x6195, 0x003f, - 0x6196, 0x6197, 0x6198, 0x6199, 0x619a, 0x619b, 0x619c, 0x619e, - 0x619f, 0x61a0, 0x61a1, 0x61a2, 0x61a3, 0x61a4, 0x61a5, 0x61a6, - 0x61aa, 0x61ab, 0x61ad, 0x61ae, 0x61af, 0x61b0, 0x61b1, 0x61b2, - 0x61b3, 0x61b4, 0x61b5, 0x61b6, 0x61b8, 0x61b9, 0x61ba, 0x61bb, - 0x61bc, 0x61bd, 0x61bf, 0x61c0, 0x61c1, 0x61c3, 0x61c4, 0x61c5, - 0x61c6, 0x61c7, 0x61c9, 0x61cc, 0x61cd, 0x61ce, 0x61cf, 0x61d0, - 0x61d3, 0x61d5, 0x61d6, 0x61d7, 0x61d8, 0x61d9, 0x61da, 0x61db, - 0x61dc, 0x61dd, 0x61de, 0x61df, 0x61e0, 0x61e1, 0x61e2, 0x61e3, - 0x61e4, 0x61e5, 0x61e7, 0x61e8, 0x61e9, 0x61ea, 0x61eb, 0x61ec, - 0x61ed, 0x61ee, 0x61ef, 0x61f0, 0x61f1, 0x61f2, 0x61f3, 0x61f4, - 0x61f6, 0x61f7, 0x61f8, 0x61f9, 0x61fa, 0x61fb, 0x61fc, 0x61fd, - 0x61fe, 0x6200, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6207, - 0x6209, 0x6213, 0x6214, 0x6219, 0x621c, 0x621d, 0x621e, 0x6220, - 0x6223, 0x6226, 0x6227, 0x6228, 0x6229, 0x622b, 0x622d, 0x622f, - 0x6230, 0x6231, 0x6232, 0x6235, 0x6236, 0x6238, 0x6239, 0x623a, - 0x623b, 0x623c, 0x6242, 0x6244, 0x6245, 0x6246, 0x624a, 0x003f, - /* lead byte 92 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x624f, 0x6250, 0x6255, 0x6256, 0x6257, 0x6259, 0x625a, 0x625c, - 0x625d, 0x625e, 0x625f, 0x6260, 0x6261, 0x6262, 0x6264, 0x6265, - 0x6268, 0x6271, 0x6272, 0x6274, 0x6275, 0x6277, 0x6278, 0x627a, - 0x627b, 0x627d, 0x6281, 0x6282, 0x6283, 0x6285, 0x6286, 0x6287, - 0x6288, 0x628b, 0x628c, 0x628d, 0x628e, 0x628f, 0x6290, 0x6294, - 0x6299, 0x629c, 0x629d, 0x629e, 0x62a3, 0x62a6, 0x62a7, 0x62a9, - 0x62aa, 0x62ad, 0x62ae, 0x62af, 0x62b0, 0x62b2, 0x62b3, 0x62b4, - 0x62b6, 0x62b7, 0x62b8, 0x62ba, 0x62be, 0x62c0, 0x62c1, 0x003f, - 0x62c3, 0x62cb, 0x62cf, 0x62d1, 0x62d5, 0x62dd, 0x62de, 0x62e0, - 0x62e1, 0x62e4, 0x62ea, 0x62eb, 0x62f0, 0x62f2, 0x62f5, 0x62f8, - 0x62f9, 0x62fa, 0x62fb, 0x6300, 0x6303, 0x6304, 0x6305, 0x6306, - 0x630a, 0x630b, 0x630c, 0x630d, 0x630f, 0x6310, 0x6312, 0x6313, - 0x6314, 0x6315, 0x6317, 0x6318, 0x6319, 0x631c, 0x6326, 0x6327, - 0x6329, 0x632c, 0x632d, 0x632e, 0x6330, 0x6331, 0x6333, 0x6334, - 0x6335, 0x6336, 0x6337, 0x6338, 0x633b, 0x633c, 0x633e, 0x633f, - 0x6340, 0x6341, 0x6344, 0x6347, 0x6348, 0x634a, 0x6351, 0x6352, - 0x6353, 0x6354, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b, - 0x635c, 0x635d, 0x6360, 0x6364, 0x6365, 0x6366, 0x6368, 0x636a, - 0x636b, 0x636c, 0x636f, 0x6370, 0x6372, 0x6373, 0x6374, 0x6375, - 0x6378, 0x6379, 0x637c, 0x637d, 0x637e, 0x637f, 0x6381, 0x6383, - 0x6384, 0x6385, 0x6386, 0x638b, 0x638d, 0x6391, 0x6393, 0x6394, - 0x6395, 0x6397, 0x6399, 0x639a, 0x639b, 0x639c, 0x639d, 0x639e, - 0x639f, 0x63a1, 0x63a4, 0x63a6, 0x63ab, 0x63af, 0x63b1, 0x63b2, - 0x63b5, 0x63b6, 0x63b9, 0x63bb, 0x63bd, 0x63bf, 0x63c0, 0x003f, - /* lead byte 93 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x63c1, 0x63c2, 0x63c3, 0x63c5, 0x63c7, 0x63c8, 0x63ca, 0x63cb, - 0x63cc, 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63d7, 0x63d8, 0x63d9, - 0x63da, 0x63db, 0x63dc, 0x63dd, 0x63df, 0x63e2, 0x63e4, 0x63e5, - 0x63e6, 0x63e7, 0x63e8, 0x63eb, 0x63ec, 0x63ee, 0x63ef, 0x63f0, - 0x63f1, 0x63f3, 0x63f5, 0x63f7, 0x63f9, 0x63fa, 0x63fb, 0x63fc, - 0x63fe, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408, 0x6409, 0x640a, - 0x640d, 0x640e, 0x6411, 0x6412, 0x6415, 0x6416, 0x6417, 0x6418, - 0x6419, 0x641a, 0x641d, 0x641f, 0x6422, 0x6423, 0x6424, 0x003f, - 0x6425, 0x6427, 0x6428, 0x6429, 0x642b, 0x642e, 0x642f, 0x6430, - 0x6431, 0x6432, 0x6433, 0x6435, 0x6436, 0x6437, 0x6438, 0x6439, - 0x643b, 0x643c, 0x643e, 0x6440, 0x6442, 0x6443, 0x6449, 0x644b, - 0x644c, 0x644d, 0x644e, 0x644f, 0x6450, 0x6451, 0x6453, 0x6455, - 0x6456, 0x6457, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d, 0x645f, - 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6468, - 0x646a, 0x646b, 0x646c, 0x646e, 0x646f, 0x6470, 0x6471, 0x6472, - 0x6473, 0x6474, 0x6475, 0x6476, 0x6477, 0x647b, 0x647c, 0x647d, - 0x647e, 0x647f, 0x6480, 0x6481, 0x6483, 0x6486, 0x6488, 0x6489, - 0x648a, 0x648b, 0x648c, 0x648d, 0x648e, 0x648f, 0x6490, 0x6493, - 0x6494, 0x6497, 0x6498, 0x649a, 0x649b, 0x649c, 0x649d, 0x649f, - 0x64a0, 0x64a1, 0x64a2, 0x64a3, 0x64a5, 0x64a6, 0x64a7, 0x64a8, - 0x64aa, 0x64ab, 0x64af, 0x64b1, 0x64b2, 0x64b3, 0x64b4, 0x64b6, - 0x64b9, 0x64bb, 0x64bd, 0x64be, 0x64bf, 0x64c1, 0x64c3, 0x64c4, - 0x64c6, 0x64c7, 0x64c8, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64cf, - 0x64d1, 0x64d3, 0x64d4, 0x64d5, 0x64d6, 0x64d9, 0x64da, 0x003f, - /* lead byte 94 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x64db, 0x64dc, 0x64dd, 0x64df, 0x64e0, 0x64e1, 0x64e3, 0x64e5, - 0x64e7, 0x64e8, 0x64e9, 0x64ea, 0x64eb, 0x64ec, 0x64ed, 0x64ee, - 0x64ef, 0x64f0, 0x64f1, 0x64f2, 0x64f3, 0x64f4, 0x64f5, 0x64f6, - 0x64f7, 0x64f8, 0x64f9, 0x64fa, 0x64fb, 0x64fc, 0x64fd, 0x64fe, - 0x64ff, 0x6501, 0x6502, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507, - 0x6508, 0x650a, 0x650b, 0x650c, 0x650d, 0x650e, 0x650f, 0x6510, - 0x6511, 0x6513, 0x6514, 0x6515, 0x6516, 0x6517, 0x6519, 0x651a, - 0x651b, 0x651c, 0x651d, 0x651e, 0x651f, 0x6520, 0x6521, 0x003f, - 0x6522, 0x6523, 0x6524, 0x6526, 0x6527, 0x6528, 0x6529, 0x652a, - 0x652c, 0x652d, 0x6530, 0x6531, 0x6532, 0x6533, 0x6537, 0x653a, - 0x653c, 0x653d, 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6546, - 0x6547, 0x654a, 0x654b, 0x654d, 0x654e, 0x6550, 0x6552, 0x6553, - 0x6554, 0x6557, 0x6558, 0x655a, 0x655c, 0x655f, 0x6560, 0x6561, - 0x6564, 0x6565, 0x6567, 0x6568, 0x6569, 0x656a, 0x656d, 0x656e, - 0x656f, 0x6571, 0x6573, 0x6575, 0x6576, 0x6578, 0x6579, 0x657a, - 0x657b, 0x657c, 0x657d, 0x657e, 0x657f, 0x6580, 0x6581, 0x6582, - 0x6583, 0x6584, 0x6585, 0x6586, 0x6588, 0x6589, 0x658a, 0x658d, - 0x658e, 0x658f, 0x6592, 0x6594, 0x6595, 0x6596, 0x6598, 0x659a, - 0x659d, 0x659e, 0x65a0, 0x65a2, 0x65a3, 0x65a6, 0x65a8, 0x65aa, - 0x65ac, 0x65ae, 0x65b1, 0x65b2, 0x65b3, 0x65b4, 0x65b5, 0x65b6, - 0x65b7, 0x65b8, 0x65ba, 0x65bb, 0x65be, 0x65bf, 0x65c0, 0x65c2, - 0x65c7, 0x65c8, 0x65c9, 0x65ca, 0x65cd, 0x65d0, 0x65d1, 0x65d3, - 0x65d4, 0x65d5, 0x65d8, 0x65d9, 0x65da, 0x65db, 0x65dc, 0x65dd, - 0x65de, 0x65df, 0x65e1, 0x65e3, 0x65e4, 0x65ea, 0x65eb, 0x003f, - /* lead byte 95 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x65f2, 0x65f3, 0x65f4, 0x65f5, 0x65f8, 0x65f9, 0x65fb, 0x65fc, - 0x65fd, 0x65fe, 0x65ff, 0x6601, 0x6604, 0x6605, 0x6607, 0x6608, - 0x6609, 0x660b, 0x660d, 0x6610, 0x6611, 0x6612, 0x6616, 0x6617, - 0x6618, 0x661a, 0x661b, 0x661c, 0x661e, 0x6621, 0x6622, 0x6623, - 0x6624, 0x6626, 0x6629, 0x662a, 0x662b, 0x662c, 0x662e, 0x6630, - 0x6632, 0x6633, 0x6637, 0x6638, 0x6639, 0x663a, 0x663b, 0x663d, - 0x663f, 0x6640, 0x6642, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, - 0x6649, 0x664a, 0x664d, 0x664e, 0x6650, 0x6651, 0x6658, 0x003f, - 0x6659, 0x665b, 0x665c, 0x665d, 0x665e, 0x6660, 0x6662, 0x6663, - 0x6665, 0x6667, 0x6669, 0x666a, 0x666b, 0x666c, 0x666d, 0x6671, - 0x6672, 0x6673, 0x6675, 0x6678, 0x6679, 0x667b, 0x667c, 0x667d, - 0x667f, 0x6680, 0x6681, 0x6683, 0x6685, 0x6686, 0x6688, 0x6689, - 0x668a, 0x668b, 0x668d, 0x668e, 0x668f, 0x6690, 0x6692, 0x6693, - 0x6694, 0x6695, 0x6698, 0x6699, 0x669a, 0x669b, 0x669c, 0x669e, - 0x669f, 0x66a0, 0x66a1, 0x66a2, 0x66a3, 0x66a4, 0x66a5, 0x66a6, - 0x66a9, 0x66aa, 0x66ab, 0x66ac, 0x66ad, 0x66af, 0x66b0, 0x66b1, - 0x66b2, 0x66b3, 0x66b5, 0x66b6, 0x66b7, 0x66b8, 0x66ba, 0x66bb, - 0x66bc, 0x66bd, 0x66bf, 0x66c0, 0x66c1, 0x66c2, 0x66c3, 0x66c4, - 0x66c5, 0x66c6, 0x66c7, 0x66c8, 0x66c9, 0x66ca, 0x66cb, 0x66cc, - 0x66cd, 0x66ce, 0x66cf, 0x66d0, 0x66d1, 0x66d2, 0x66d3, 0x66d4, - 0x66d5, 0x66d6, 0x66d7, 0x66d8, 0x66da, 0x66de, 0x66df, 0x66e0, - 0x66e1, 0x66e2, 0x66e3, 0x66e4, 0x66e5, 0x66e7, 0x66e8, 0x66ea, - 0x66eb, 0x66ec, 0x66ed, 0x66ee, 0x66ef, 0x66f1, 0x66f5, 0x66f6, - 0x66f8, 0x66fa, 0x66fb, 0x66fd, 0x6701, 0x6702, 0x6703, 0x003f, - /* lead byte 96 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6704, 0x6705, 0x6706, 0x6707, 0x670c, 0x670e, 0x670f, 0x6711, - 0x6712, 0x6713, 0x6716, 0x6718, 0x6719, 0x671a, 0x671c, 0x671e, - 0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6727, 0x6729, - 0x672e, 0x6730, 0x6732, 0x6733, 0x6736, 0x6737, 0x6738, 0x6739, - 0x673b, 0x673c, 0x673e, 0x673f, 0x6741, 0x6744, 0x6745, 0x6747, - 0x674a, 0x674b, 0x674d, 0x6752, 0x6754, 0x6755, 0x6757, 0x6758, - 0x6759, 0x675a, 0x675b, 0x675d, 0x6762, 0x6763, 0x6764, 0x6766, - 0x6767, 0x676b, 0x676c, 0x676e, 0x6771, 0x6774, 0x6776, 0x003f, - 0x6778, 0x6779, 0x677a, 0x677b, 0x677d, 0x6780, 0x6782, 0x6783, - 0x6785, 0x6786, 0x6788, 0x678a, 0x678c, 0x678d, 0x678e, 0x678f, - 0x6791, 0x6792, 0x6793, 0x6794, 0x6796, 0x6799, 0x679b, 0x679f, - 0x67a0, 0x67a1, 0x67a4, 0x67a6, 0x67a9, 0x67ac, 0x67ae, 0x67b1, - 0x67b2, 0x67b4, 0x67b9, 0x67ba, 0x67bb, 0x67bc, 0x67bd, 0x67be, - 0x67bf, 0x67c0, 0x67c2, 0x67c5, 0x67c6, 0x67c7, 0x67c8, 0x67c9, - 0x67ca, 0x67cb, 0x67cc, 0x67cd, 0x67ce, 0x67d5, 0x67d6, 0x67d7, - 0x67db, 0x67df, 0x67e1, 0x67e3, 0x67e4, 0x67e6, 0x67e7, 0x67e8, - 0x67ea, 0x67eb, 0x67ed, 0x67ee, 0x67f2, 0x67f5, 0x67f6, 0x67f7, - 0x67f8, 0x67f9, 0x67fa, 0x67fb, 0x67fc, 0x67fe, 0x6801, 0x6802, - 0x6803, 0x6804, 0x6806, 0x680d, 0x6810, 0x6812, 0x6814, 0x6815, - 0x6818, 0x6819, 0x681a, 0x681b, 0x681c, 0x681e, 0x681f, 0x6820, - 0x6822, 0x6823, 0x6824, 0x6825, 0x6826, 0x6827, 0x6828, 0x682b, - 0x682c, 0x682d, 0x682e, 0x682f, 0x6830, 0x6831, 0x6834, 0x6835, - 0x6836, 0x683a, 0x683b, 0x683f, 0x6847, 0x684b, 0x684d, 0x684f, - 0x6852, 0x6856, 0x6857, 0x6858, 0x6859, 0x685a, 0x685b, 0x003f, - /* lead byte 97 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x685c, 0x685d, 0x685e, 0x685f, 0x686a, 0x686c, 0x686d, 0x686e, - 0x686f, 0x6870, 0x6871, 0x6872, 0x6873, 0x6875, 0x6878, 0x6879, - 0x687a, 0x687b, 0x687c, 0x687d, 0x687e, 0x687f, 0x6880, 0x6882, - 0x6884, 0x6887, 0x6888, 0x6889, 0x688a, 0x688b, 0x688c, 0x688d, - 0x688e, 0x6890, 0x6891, 0x6892, 0x6894, 0x6895, 0x6896, 0x6898, - 0x6899, 0x689a, 0x689b, 0x689c, 0x689d, 0x689e, 0x689f, 0x68a0, - 0x68a1, 0x68a3, 0x68a4, 0x68a5, 0x68a9, 0x68aa, 0x68ab, 0x68ac, - 0x68ae, 0x68b1, 0x68b2, 0x68b4, 0x68b6, 0x68b7, 0x68b8, 0x003f, - 0x68b9, 0x68ba, 0x68bb, 0x68bc, 0x68bd, 0x68be, 0x68bf, 0x68c1, - 0x68c3, 0x68c4, 0x68c5, 0x68c6, 0x68c7, 0x68c8, 0x68ca, 0x68cc, - 0x68ce, 0x68cf, 0x68d0, 0x68d1, 0x68d3, 0x68d4, 0x68d6, 0x68d7, - 0x68d9, 0x68db, 0x68dc, 0x68dd, 0x68de, 0x68df, 0x68e1, 0x68e2, - 0x68e4, 0x68e5, 0x68e6, 0x68e7, 0x68e8, 0x68e9, 0x68ea, 0x68eb, - 0x68ec, 0x68ed, 0x68ef, 0x68f2, 0x68f3, 0x68f4, 0x68f6, 0x68f7, - 0x68f8, 0x68fb, 0x68fd, 0x68fe, 0x68ff, 0x6900, 0x6902, 0x6903, - 0x6904, 0x6906, 0x6907, 0x6908, 0x6909, 0x690a, 0x690c, 0x690f, - 0x6911, 0x6913, 0x6914, 0x6915, 0x6916, 0x6917, 0x6918, 0x6919, - 0x691a, 0x691b, 0x691c, 0x691d, 0x691e, 0x6921, 0x6922, 0x6923, - 0x6925, 0x6926, 0x6927, 0x6928, 0x6929, 0x692a, 0x692b, 0x692c, - 0x692e, 0x692f, 0x6931, 0x6932, 0x6933, 0x6935, 0x6936, 0x6937, - 0x6938, 0x693a, 0x693b, 0x693c, 0x693e, 0x6940, 0x6941, 0x6943, - 0x6944, 0x6945, 0x6946, 0x6947, 0x6948, 0x6949, 0x694a, 0x694b, - 0x694c, 0x694d, 0x694e, 0x694f, 0x6950, 0x6951, 0x6952, 0x6953, - 0x6955, 0x6956, 0x6958, 0x6959, 0x695b, 0x695c, 0x695f, 0x003f, - /* lead byte 98 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6961, 0x6962, 0x6964, 0x6965, 0x6967, 0x6968, 0x6969, 0x696a, - 0x696c, 0x696d, 0x696f, 0x6970, 0x6972, 0x6973, 0x6974, 0x6975, - 0x6976, 0x697a, 0x697b, 0x697d, 0x697e, 0x697f, 0x6981, 0x6983, - 0x6985, 0x698a, 0x698b, 0x698c, 0x698e, 0x698f, 0x6990, 0x6991, - 0x6992, 0x6993, 0x6996, 0x6997, 0x6999, 0x699a, 0x699d, 0x699e, - 0x699f, 0x69a0, 0x69a1, 0x69a2, 0x69a3, 0x69a4, 0x69a5, 0x69a6, - 0x69a9, 0x69aa, 0x69ac, 0x69ae, 0x69af, 0x69b0, 0x69b2, 0x69b3, - 0x69b5, 0x69b6, 0x69b8, 0x69b9, 0x69ba, 0x69bc, 0x69bd, 0x003f, - 0x69be, 0x69bf, 0x69c0, 0x69c2, 0x69c3, 0x69c4, 0x69c5, 0x69c6, - 0x69c7, 0x69c8, 0x69c9, 0x69cb, 0x69cd, 0x69cf, 0x69d1, 0x69d2, - 0x69d3, 0x69d5, 0x69d6, 0x69d7, 0x69d8, 0x69d9, 0x69da, 0x69dc, - 0x69dd, 0x69de, 0x69e1, 0x69e2, 0x69e3, 0x69e4, 0x69e5, 0x69e6, - 0x69e7, 0x69e8, 0x69e9, 0x69ea, 0x69eb, 0x69ec, 0x69ee, 0x69ef, - 0x69f0, 0x69f1, 0x69f3, 0x69f4, 0x69f5, 0x69f6, 0x69f7, 0x69f8, - 0x69f9, 0x69fa, 0x69fb, 0x69fc, 0x69fe, 0x6a00, 0x6a01, 0x6a02, - 0x6a03, 0x6a04, 0x6a05, 0x6a06, 0x6a07, 0x6a08, 0x6a09, 0x6a0b, - 0x6a0c, 0x6a0d, 0x6a0e, 0x6a0f, 0x6a10, 0x6a11, 0x6a12, 0x6a13, - 0x6a14, 0x6a15, 0x6a16, 0x6a19, 0x6a1a, 0x6a1b, 0x6a1c, 0x6a1d, - 0x6a1e, 0x6a20, 0x6a22, 0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27, - 0x6a29, 0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a30, 0x6a32, 0x6a33, - 0x6a34, 0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a, 0x6a3b, 0x6a3c, - 0x6a3f, 0x6a40, 0x6a41, 0x6a42, 0x6a43, 0x6a45, 0x6a46, 0x6a48, - 0x6a49, 0x6a4a, 0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a51, - 0x6a52, 0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a5a, 0x003f, - /* lead byte 99 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a62, 0x6a63, 0x6a64, - 0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, - 0x6a6e, 0x6a6f, 0x6a70, 0x6a72, 0x6a73, 0x6a74, 0x6a75, 0x6a76, - 0x6a77, 0x6a78, 0x6a7a, 0x6a7b, 0x6a7d, 0x6a7e, 0x6a7f, 0x6a81, - 0x6a82, 0x6a83, 0x6a85, 0x6a86, 0x6a87, 0x6a88, 0x6a89, 0x6a8a, - 0x6a8b, 0x6a8c, 0x6a8d, 0x6a8f, 0x6a92, 0x6a93, 0x6a94, 0x6a95, - 0x6a96, 0x6a98, 0x6a99, 0x6a9a, 0x6a9b, 0x6a9c, 0x6a9d, 0x6a9e, - 0x6a9f, 0x6aa1, 0x6aa2, 0x6aa3, 0x6aa4, 0x6aa5, 0x6aa6, 0x003f, - 0x6aa7, 0x6aa8, 0x6aaa, 0x6aad, 0x6aae, 0x6aaf, 0x6ab0, 0x6ab1, - 0x6ab2, 0x6ab3, 0x6ab4, 0x6ab5, 0x6ab6, 0x6ab7, 0x6ab8, 0x6ab9, - 0x6aba, 0x6abb, 0x6abc, 0x6abd, 0x6abe, 0x6abf, 0x6ac0, 0x6ac1, - 0x6ac2, 0x6ac3, 0x6ac4, 0x6ac5, 0x6ac6, 0x6ac7, 0x6ac8, 0x6ac9, - 0x6aca, 0x6acb, 0x6acc, 0x6acd, 0x6ace, 0x6acf, 0x6ad0, 0x6ad1, - 0x6ad2, 0x6ad3, 0x6ad4, 0x6ad5, 0x6ad6, 0x6ad7, 0x6ad8, 0x6ad9, - 0x6ada, 0x6adb, 0x6adc, 0x6add, 0x6ade, 0x6adf, 0x6ae0, 0x6ae1, - 0x6ae2, 0x6ae3, 0x6ae4, 0x6ae5, 0x6ae6, 0x6ae7, 0x6ae8, 0x6ae9, - 0x6aea, 0x6aeb, 0x6aec, 0x6aed, 0x6aee, 0x6aef, 0x6af0, 0x6af1, - 0x6af2, 0x6af3, 0x6af4, 0x6af5, 0x6af6, 0x6af7, 0x6af8, 0x6af9, - 0x6afa, 0x6afb, 0x6afc, 0x6afd, 0x6afe, 0x6aff, 0x6b00, 0x6b01, - 0x6b02, 0x6b03, 0x6b04, 0x6b05, 0x6b06, 0x6b07, 0x6b08, 0x6b09, - 0x6b0a, 0x6b0b, 0x6b0c, 0x6b0d, 0x6b0e, 0x6b0f, 0x6b10, 0x6b11, - 0x6b12, 0x6b13, 0x6b14, 0x6b15, 0x6b16, 0x6b17, 0x6b18, 0x6b19, - 0x6b1a, 0x6b1b, 0x6b1c, 0x6b1d, 0x6b1e, 0x6b1f, 0x6b25, 0x6b26, - 0x6b28, 0x6b29, 0x6b2a, 0x6b2b, 0x6b2c, 0x6b2d, 0x6b2e, 0x003f, - /* lead byte 9a */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6b2f, 0x6b30, 0x6b31, 0x6b33, 0x6b34, 0x6b35, 0x6b36, 0x6b38, - 0x6b3b, 0x6b3c, 0x6b3d, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b44, - 0x6b45, 0x6b48, 0x6b4a, 0x6b4b, 0x6b4d, 0x6b4e, 0x6b4f, 0x6b50, - 0x6b51, 0x6b52, 0x6b53, 0x6b54, 0x6b55, 0x6b56, 0x6b57, 0x6b58, - 0x6b5a, 0x6b5b, 0x6b5c, 0x6b5d, 0x6b5e, 0x6b5f, 0x6b60, 0x6b61, - 0x6b68, 0x6b69, 0x6b6b, 0x6b6c, 0x6b6d, 0x6b6e, 0x6b6f, 0x6b70, - 0x6b71, 0x6b72, 0x6b73, 0x6b74, 0x6b75, 0x6b76, 0x6b77, 0x6b78, - 0x6b7a, 0x6b7d, 0x6b7e, 0x6b7f, 0x6b80, 0x6b85, 0x6b88, 0x003f, - 0x6b8c, 0x6b8e, 0x6b8f, 0x6b90, 0x6b91, 0x6b94, 0x6b95, 0x6b97, - 0x6b98, 0x6b99, 0x6b9c, 0x6b9d, 0x6b9e, 0x6b9f, 0x6ba0, 0x6ba2, - 0x6ba3, 0x6ba4, 0x6ba5, 0x6ba6, 0x6ba7, 0x6ba8, 0x6ba9, 0x6bab, - 0x6bac, 0x6bad, 0x6bae, 0x6baf, 0x6bb0, 0x6bb1, 0x6bb2, 0x6bb6, - 0x6bb8, 0x6bb9, 0x6bba, 0x6bbb, 0x6bbc, 0x6bbd, 0x6bbe, 0x6bc0, - 0x6bc3, 0x6bc4, 0x6bc6, 0x6bc7, 0x6bc8, 0x6bc9, 0x6bca, 0x6bcc, - 0x6bce, 0x6bd0, 0x6bd1, 0x6bd8, 0x6bda, 0x6bdc, 0x6bdd, 0x6bde, - 0x6bdf, 0x6be0, 0x6be2, 0x6be3, 0x6be4, 0x6be5, 0x6be6, 0x6be7, - 0x6be8, 0x6be9, 0x6bec, 0x6bed, 0x6bee, 0x6bf0, 0x6bf1, 0x6bf2, - 0x6bf4, 0x6bf6, 0x6bf7, 0x6bf8, 0x6bfa, 0x6bfb, 0x6bfc, 0x6bfe, - 0x6bff, 0x6c00, 0x6c01, 0x6c02, 0x6c03, 0x6c04, 0x6c08, 0x6c09, - 0x6c0a, 0x6c0b, 0x6c0c, 0x6c0e, 0x6c12, 0x6c17, 0x6c1c, 0x6c1d, - 0x6c1e, 0x6c20, 0x6c23, 0x6c25, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c31, - 0x6c33, 0x6c36, 0x6c37, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3e, - 0x6c3f, 0x6c43, 0x6c44, 0x6c45, 0x6c48, 0x6c4b, 0x6c4c, 0x6c4d, - 0x6c4e, 0x6c4f, 0x6c51, 0x6c52, 0x6c53, 0x6c56, 0x6c58, 0x003f, - /* lead byte 9b */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6c59, 0x6c5a, 0x6c62, 0x6c63, 0x6c65, 0x6c66, 0x6c67, 0x6c6b, - 0x6c6c, 0x6c6d, 0x6c6e, 0x6c6f, 0x6c71, 0x6c73, 0x6c75, 0x6c77, - 0x6c78, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7f, 0x6c80, 0x6c84, 0x6c87, - 0x6c8a, 0x6c8b, 0x6c8d, 0x6c8e, 0x6c91, 0x6c92, 0x6c95, 0x6c96, - 0x6c97, 0x6c98, 0x6c9a, 0x6c9c, 0x6c9d, 0x6c9e, 0x6ca0, 0x6ca2, - 0x6ca8, 0x6cac, 0x6caf, 0x6cb0, 0x6cb4, 0x6cb5, 0x6cb6, 0x6cb7, - 0x6cba, 0x6cc0, 0x6cc1, 0x6cc2, 0x6cc3, 0x6cc6, 0x6cc7, 0x6cc8, - 0x6ccb, 0x6ccd, 0x6cce, 0x6ccf, 0x6cd1, 0x6cd2, 0x6cd8, 0x003f, - 0x6cd9, 0x6cda, 0x6cdc, 0x6cdd, 0x6cdf, 0x6ce4, 0x6ce6, 0x6ce7, - 0x6ce9, 0x6cec, 0x6ced, 0x6cf2, 0x6cf4, 0x6cf9, 0x6cff, 0x6d00, - 0x6d02, 0x6d03, 0x6d05, 0x6d06, 0x6d08, 0x6d09, 0x6d0a, 0x6d0d, - 0x6d0f, 0x6d10, 0x6d11, 0x6d13, 0x6d14, 0x6d15, 0x6d16, 0x6d18, - 0x6d1c, 0x6d1d, 0x6d1f, 0x6d20, 0x6d21, 0x6d22, 0x6d23, 0x6d24, - 0x6d26, 0x6d28, 0x6d29, 0x6d2c, 0x6d2d, 0x6d2f, 0x6d30, 0x6d34, - 0x6d36, 0x6d37, 0x6d38, 0x6d3a, 0x6d3f, 0x6d40, 0x6d42, 0x6d44, - 0x6d49, 0x6d4c, 0x6d50, 0x6d55, 0x6d56, 0x6d57, 0x6d58, 0x6d5b, - 0x6d5d, 0x6d5f, 0x6d61, 0x6d62, 0x6d64, 0x6d65, 0x6d67, 0x6d68, - 0x6d6b, 0x6d6c, 0x6d6d, 0x6d70, 0x6d71, 0x6d72, 0x6d73, 0x6d75, - 0x6d76, 0x6d79, 0x6d7a, 0x6d7b, 0x6d7d, 0x6d7e, 0x6d7f, 0x6d80, - 0x6d81, 0x6d83, 0x6d84, 0x6d86, 0x6d87, 0x6d8a, 0x6d8b, 0x6d8d, - 0x6d8f, 0x6d90, 0x6d92, 0x6d96, 0x6d97, 0x6d98, 0x6d99, 0x6d9a, - 0x6d9c, 0x6da2, 0x6da5, 0x6dac, 0x6dad, 0x6db0, 0x6db1, 0x6db3, - 0x6db4, 0x6db6, 0x6db7, 0x6db9, 0x6dba, 0x6dbb, 0x6dbc, 0x6dbd, - 0x6dbe, 0x6dc1, 0x6dc2, 0x6dc3, 0x6dc8, 0x6dc9, 0x6dca, 0x003f, - /* lead byte 9c */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6dcd, 0x6dce, 0x6dcf, 0x6dd0, 0x6dd2, 0x6dd3, 0x6dd4, 0x6dd5, - 0x6dd7, 0x6dda, 0x6ddb, 0x6ddc, 0x6ddf, 0x6de2, 0x6de3, 0x6de5, - 0x6de7, 0x6de8, 0x6de9, 0x6dea, 0x6ded, 0x6def, 0x6df0, 0x6df2, - 0x6df4, 0x6df5, 0x6df6, 0x6df8, 0x6dfa, 0x6dfd, 0x6dfe, 0x6dff, - 0x6e00, 0x6e01, 0x6e02, 0x6e03, 0x6e04, 0x6e06, 0x6e07, 0x6e08, - 0x6e09, 0x6e0b, 0x6e0f, 0x6e12, 0x6e13, 0x6e15, 0x6e18, 0x6e19, - 0x6e1b, 0x6e1c, 0x6e1e, 0x6e1f, 0x6e22, 0x6e26, 0x6e27, 0x6e28, - 0x6e2a, 0x6e2c, 0x6e2e, 0x6e30, 0x6e31, 0x6e33, 0x6e35, 0x003f, - 0x6e36, 0x6e37, 0x6e39, 0x6e3b, 0x6e3c, 0x6e3d, 0x6e3e, 0x6e3f, - 0x6e40, 0x6e41, 0x6e42, 0x6e45, 0x6e46, 0x6e47, 0x6e48, 0x6e49, - 0x6e4a, 0x6e4b, 0x6e4c, 0x6e4f, 0x6e50, 0x6e51, 0x6e52, 0x6e55, - 0x6e57, 0x6e59, 0x6e5a, 0x6e5c, 0x6e5d, 0x6e5e, 0x6e60, 0x6e61, - 0x6e62, 0x6e63, 0x6e64, 0x6e65, 0x6e66, 0x6e67, 0x6e68, 0x6e69, - 0x6e6a, 0x6e6c, 0x6e6d, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e73, - 0x6e74, 0x6e75, 0x6e76, 0x6e77, 0x6e78, 0x6e79, 0x6e7a, 0x6e7b, - 0x6e7c, 0x6e7d, 0x6e80, 0x6e81, 0x6e82, 0x6e84, 0x6e87, 0x6e88, - 0x6e8a, 0x6e8b, 0x6e8c, 0x6e8d, 0x6e8e, 0x6e91, 0x6e92, 0x6e93, - 0x6e94, 0x6e95, 0x6e96, 0x6e97, 0x6e99, 0x6e9a, 0x6e9b, 0x6e9d, - 0x6e9e, 0x6ea0, 0x6ea1, 0x6ea3, 0x6ea4, 0x6ea6, 0x6ea8, 0x6ea9, - 0x6eab, 0x6eac, 0x6ead, 0x6eae, 0x6eb0, 0x6eb3, 0x6eb5, 0x6eb8, - 0x6eb9, 0x6ebc, 0x6ebe, 0x6ebf, 0x6ec0, 0x6ec3, 0x6ec4, 0x6ec5, - 0x6ec6, 0x6ec8, 0x6ec9, 0x6eca, 0x6ecc, 0x6ecd, 0x6ece, 0x6ed0, - 0x6ed2, 0x6ed6, 0x6ed8, 0x6ed9, 0x6edb, 0x6edc, 0x6edd, 0x6ee3, - 0x6ee7, 0x6eea, 0x6eeb, 0x6eec, 0x6eed, 0x6eee, 0x6eef, 0x003f, - /* lead byte 9d */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6ef0, 0x6ef1, 0x6ef2, 0x6ef3, 0x6ef5, 0x6ef6, 0x6ef7, 0x6ef8, - 0x6efa, 0x6efb, 0x6efc, 0x6efd, 0x6efe, 0x6eff, 0x6f00, 0x6f01, - 0x6f03, 0x6f04, 0x6f05, 0x6f07, 0x6f08, 0x6f0a, 0x6f0b, 0x6f0c, - 0x6f0d, 0x6f0e, 0x6f10, 0x6f11, 0x6f12, 0x6f16, 0x6f17, 0x6f18, - 0x6f19, 0x6f1a, 0x6f1b, 0x6f1c, 0x6f1d, 0x6f1e, 0x6f1f, 0x6f21, - 0x6f22, 0x6f23, 0x6f25, 0x6f26, 0x6f27, 0x6f28, 0x6f2c, 0x6f2e, - 0x6f30, 0x6f32, 0x6f34, 0x6f35, 0x6f37, 0x6f38, 0x6f39, 0x6f3a, - 0x6f3b, 0x6f3c, 0x6f3d, 0x6f3f, 0x6f40, 0x6f41, 0x6f42, 0x003f, - 0x6f43, 0x6f44, 0x6f45, 0x6f48, 0x6f49, 0x6f4a, 0x6f4c, 0x6f4e, - 0x6f4f, 0x6f50, 0x6f51, 0x6f52, 0x6f53, 0x6f54, 0x6f55, 0x6f56, - 0x6f57, 0x6f59, 0x6f5a, 0x6f5b, 0x6f5d, 0x6f5f, 0x6f60, 0x6f61, - 0x6f63, 0x6f64, 0x6f65, 0x6f67, 0x6f68, 0x6f69, 0x6f6a, 0x6f6b, - 0x6f6c, 0x6f6f, 0x6f70, 0x6f71, 0x6f73, 0x6f75, 0x6f76, 0x6f77, - 0x6f79, 0x6f7b, 0x6f7d, 0x6f7e, 0x6f7f, 0x6f80, 0x6f81, 0x6f82, - 0x6f83, 0x6f85, 0x6f86, 0x6f87, 0x6f8a, 0x6f8b, 0x6f8f, 0x6f90, - 0x6f91, 0x6f92, 0x6f93, 0x6f94, 0x6f95, 0x6f96, 0x6f97, 0x6f98, - 0x6f99, 0x6f9a, 0x6f9b, 0x6f9d, 0x6f9e, 0x6f9f, 0x6fa0, 0x6fa2, - 0x6fa3, 0x6fa4, 0x6fa5, 0x6fa6, 0x6fa8, 0x6fa9, 0x6faa, 0x6fab, - 0x6fac, 0x6fad, 0x6fae, 0x6faf, 0x6fb0, 0x6fb1, 0x6fb2, 0x6fb4, - 0x6fb5, 0x6fb7, 0x6fb8, 0x6fba, 0x6fbb, 0x6fbc, 0x6fbd, 0x6fbe, - 0x6fbf, 0x6fc1, 0x6fc3, 0x6fc4, 0x6fc5, 0x6fc6, 0x6fc7, 0x6fc8, - 0x6fca, 0x6fcb, 0x6fcc, 0x6fcd, 0x6fce, 0x6fcf, 0x6fd0, 0x6fd3, - 0x6fd4, 0x6fd5, 0x6fd6, 0x6fd7, 0x6fd8, 0x6fd9, 0x6fda, 0x6fdb, - 0x6fdc, 0x6fdd, 0x6fdf, 0x6fe2, 0x6fe3, 0x6fe4, 0x6fe5, 0x003f, - /* lead byte 9e */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6fe6, 0x6fe7, 0x6fe8, 0x6fe9, 0x6fea, 0x6feb, 0x6fec, 0x6fed, - 0x6ff0, 0x6ff1, 0x6ff2, 0x6ff3, 0x6ff4, 0x6ff5, 0x6ff6, 0x6ff7, - 0x6ff8, 0x6ff9, 0x6ffa, 0x6ffb, 0x6ffc, 0x6ffd, 0x6ffe, 0x6fff, - 0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7005, 0x7006, 0x7007, - 0x7008, 0x7009, 0x700a, 0x700b, 0x700c, 0x700d, 0x700e, 0x700f, - 0x7010, 0x7012, 0x7013, 0x7014, 0x7015, 0x7016, 0x7017, 0x7018, - 0x7019, 0x701c, 0x701d, 0x701e, 0x701f, 0x7020, 0x7021, 0x7022, - 0x7024, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, 0x702a, 0x003f, - 0x702b, 0x702c, 0x702d, 0x702e, 0x702f, 0x7030, 0x7031, 0x7032, - 0x7033, 0x7034, 0x7036, 0x7037, 0x7038, 0x703a, 0x703b, 0x703c, - 0x703d, 0x703e, 0x703f, 0x7040, 0x7041, 0x7042, 0x7043, 0x7044, - 0x7045, 0x7046, 0x7047, 0x7048, 0x7049, 0x704a, 0x704b, 0x704d, - 0x704e, 0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, - 0x7057, 0x7058, 0x7059, 0x705a, 0x705b, 0x705c, 0x705d, 0x705f, - 0x7060, 0x7061, 0x7062, 0x7063, 0x7064, 0x7065, 0x7066, 0x7067, - 0x7068, 0x7069, 0x706a, 0x706e, 0x7071, 0x7072, 0x7073, 0x7074, - 0x7077, 0x7079, 0x707a, 0x707b, 0x707d, 0x7081, 0x7082, 0x7083, - 0x7084, 0x7086, 0x7087, 0x7088, 0x708b, 0x708c, 0x708d, 0x708f, - 0x7090, 0x7091, 0x7093, 0x7097, 0x7098, 0x709a, 0x709b, 0x709e, - 0x709f, 0x70a0, 0x70a1, 0x70a2, 0x70a3, 0x70a4, 0x70a5, 0x70a6, - 0x70a7, 0x70a8, 0x70a9, 0x70aa, 0x70b0, 0x70b2, 0x70b4, 0x70b5, - 0x70b6, 0x70ba, 0x70be, 0x70bf, 0x70c4, 0x70c5, 0x70c6, 0x70c7, - 0x70c9, 0x70cb, 0x70cc, 0x70cd, 0x70ce, 0x70cf, 0x70d0, 0x70d1, - 0x70d2, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d7, 0x70da, 0x003f, - /* lead byte 9f */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x70dc, 0x70dd, 0x70de, 0x70e0, 0x70e1, 0x70e2, 0x70e3, 0x70e5, - 0x70ea, 0x70ee, 0x70f0, 0x70f1, 0x70f2, 0x70f3, 0x70f4, 0x70f5, - 0x70f6, 0x70f8, 0x70fa, 0x70fb, 0x70fc, 0x70fe, 0x70ff, 0x7100, - 0x7101, 0x7102, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x7108, - 0x710b, 0x710c, 0x710d, 0x710e, 0x710f, 0x7111, 0x7112, 0x7114, - 0x7117, 0x711b, 0x711c, 0x711d, 0x711e, 0x711f, 0x7120, 0x7121, - 0x7122, 0x7123, 0x7124, 0x7125, 0x7127, 0x7128, 0x7129, 0x712a, - 0x712b, 0x712c, 0x712d, 0x712e, 0x7132, 0x7133, 0x7134, 0x003f, - 0x7135, 0x7137, 0x7138, 0x7139, 0x713a, 0x713b, 0x713c, 0x713d, - 0x713e, 0x713f, 0x7140, 0x7141, 0x7142, 0x7143, 0x7144, 0x7146, - 0x7147, 0x7148, 0x7149, 0x714b, 0x714d, 0x714f, 0x7150, 0x7151, - 0x7152, 0x7153, 0x7154, 0x7155, 0x7156, 0x7157, 0x7158, 0x7159, - 0x715a, 0x715b, 0x715d, 0x715f, 0x7160, 0x7161, 0x7162, 0x7163, - 0x7165, 0x7169, 0x716a, 0x716b, 0x716c, 0x716d, 0x716f, 0x7170, - 0x7171, 0x7174, 0x7175, 0x7176, 0x7177, 0x7179, 0x717b, 0x717c, - 0x717e, 0x717f, 0x7180, 0x7181, 0x7182, 0x7183, 0x7185, 0x7186, - 0x7187, 0x7188, 0x7189, 0x718b, 0x718c, 0x718d, 0x718e, 0x7190, - 0x7191, 0x7192, 0x7193, 0x7195, 0x7196, 0x7197, 0x719a, 0x719b, - 0x719c, 0x719d, 0x719e, 0x71a1, 0x71a2, 0x71a3, 0x71a4, 0x71a5, - 0x71a6, 0x71a7, 0x71a9, 0x71aa, 0x71ab, 0x71ad, 0x71ae, 0x71af, - 0x71b0, 0x71b1, 0x71b2, 0x71b4, 0x71b6, 0x71b7, 0x71b8, 0x71ba, - 0x71bb, 0x71bc, 0x71bd, 0x71be, 0x71bf, 0x71c0, 0x71c1, 0x71c2, - 0x71c4, 0x71c5, 0x71c6, 0x71c7, 0x71c8, 0x71c9, 0x71ca, 0x71cb, - 0x71cc, 0x71cd, 0x71cf, 0x71d0, 0x71d1, 0x71d2, 0x71d3, 0x003f, - /* lead byte a0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x71d6, 0x71d7, 0x71d8, 0x71d9, 0x71da, 0x71db, 0x71dc, 0x71dd, - 0x71de, 0x71df, 0x71e1, 0x71e2, 0x71e3, 0x71e4, 0x71e6, 0x71e8, - 0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ed, 0x71ef, 0x71f0, 0x71f1, - 0x71f2, 0x71f3, 0x71f4, 0x71f5, 0x71f6, 0x71f7, 0x71f8, 0x71fa, - 0x71fb, 0x71fc, 0x71fd, 0x71fe, 0x71ff, 0x7200, 0x7201, 0x7202, - 0x7203, 0x7204, 0x7205, 0x7207, 0x7208, 0x7209, 0x720a, 0x720b, - 0x720c, 0x720d, 0x720e, 0x720f, 0x7210, 0x7211, 0x7212, 0x7213, - 0x7214, 0x7215, 0x7216, 0x7217, 0x7218, 0x7219, 0x721a, 0x003f, - 0x721b, 0x721c, 0x721e, 0x721f, 0x7220, 0x7221, 0x7222, 0x7223, - 0x7224, 0x7225, 0x7226, 0x7227, 0x7229, 0x722b, 0x722d, 0x722e, - 0x722f, 0x7232, 0x7233, 0x7234, 0x723a, 0x723c, 0x723e, 0x7240, - 0x7241, 0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724a, - 0x724b, 0x724e, 0x724f, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255, - 0x7257, 0x7258, 0x725a, 0x725c, 0x725e, 0x7260, 0x7263, 0x7264, - 0x7265, 0x7268, 0x726a, 0x726b, 0x726c, 0x726d, 0x7270, 0x7271, - 0x7273, 0x7274, 0x7276, 0x7277, 0x7278, 0x727b, 0x727c, 0x727d, - 0x7282, 0x7283, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728c, - 0x728e, 0x7290, 0x7291, 0x7293, 0x7294, 0x7295, 0x7296, 0x7297, - 0x7298, 0x7299, 0x729a, 0x729b, 0x729c, 0x729d, 0x729e, 0x72a0, - 0x72a1, 0x72a2, 0x72a3, 0x72a4, 0x72a5, 0x72a6, 0x72a7, 0x72a8, - 0x72a9, 0x72aa, 0x72ab, 0x72ae, 0x72b1, 0x72b2, 0x72b3, 0x72b5, - 0x72ba, 0x72bb, 0x72bc, 0x72bd, 0x72be, 0x72bf, 0x72c0, 0x72c5, - 0x72c6, 0x72c7, 0x72c9, 0x72ca, 0x72cb, 0x72cc, 0x72cf, 0x72d1, - 0x72d3, 0x72d4, 0x72d5, 0x72d6, 0x72d8, 0x72da, 0x72db, 0x003f, - /* lead byte a1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x3000, 0x3001, 0x3002, 0x00b7, 0x02c9, 0x02c7, 0x00a8, - 0x3003, 0x3005, 0x2014, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, - 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, - 0x300c, 0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, - 0x00b1, 0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, - 0x222a, 0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, - 0x2312, 0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, - 0x221d, 0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, - 0x2234, 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, - 0x00a4, 0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, - 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, - 0x25b2, 0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x003f, - /* lead byte a2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, - 0x2177, 0x2178, 0x2179, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, - 0x248f, 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, - 0x2497, 0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, - 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, - 0x247f, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, - 0x2487, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, - 0x2467, 0x2468, 0x2469, 0x003f, 0x003f, 0x3220, 0x3221, 0x3222, - 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x003f, - 0x003f, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, - 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, 0x003f, 0x003f, 0x003f, - /* lead byte a3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, - 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, - 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, - 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, - 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, - 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, - 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, - 0xff38, 0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, - 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, - 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, - 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, - 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, 0x003f, - /* lead byte a4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, - 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, - 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, - 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, - 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, - 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, - 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, - 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, - 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, - 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, - 0x3090, 0x3091, 0x3092, 0x3093, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, - 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, - 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, - 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, - 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, - 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, - 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, - 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, - 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, - 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, - 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, - 0x03a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, - 0x03c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfe35, 0xfe36, 0xfe39, 0xfe3a, 0xfe3f, 0xfe40, 0xfe3d, 0xfe3e, - 0xfe41, 0xfe42, 0xfe43, 0xfe44, 0x003f, 0x003f, 0xfe3b, 0xfe3c, - 0xfe37, 0xfe38, 0xfe31, 0x003f, 0xfe33, 0xfe34, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, - 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, - 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, - 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, - 0x042e, 0x042f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, - 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, - 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, - 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, - 0x044e, 0x044f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x02ca, 0x02cb, 0x02d9, 0x2013, 0x2015, 0x2025, 0x2035, 0x2105, - 0x2109, 0x2196, 0x2197, 0x2198, 0x2199, 0x2215, 0x221f, 0x2223, - 0x2252, 0x2266, 0x2267, 0x22bf, 0x2550, 0x2551, 0x2552, 0x2553, - 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, - 0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, - 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, - 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573, - 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x003f, - 0x2588, 0x2589, 0x258a, 0x258b, 0x258c, 0x258d, 0x258e, 0x258f, - 0x2593, 0x2594, 0x2595, 0x25bc, 0x25bd, 0x25e2, 0x25e3, 0x25e4, - 0x25e5, 0x2609, 0x2295, 0x3012, 0x301d, 0x301e, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, - 0x00e8, 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, - 0x00f2, 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, - 0x01dc, 0x00fc, 0x00ea, 0x0251, 0x003f, 0x0144, 0x0148, 0x003f, - 0x0261, 0x003f, 0x003f, 0x003f, 0x003f, 0x3105, 0x3106, 0x3107, - 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, - 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, - 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, - 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, - 0x3128, 0x3129, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, - 0x3029, 0x32a3, 0x338e, 0x338f, 0x339c, 0x339d, 0x339e, 0x33a1, - 0x33c4, 0x33ce, 0x33d1, 0x33d2, 0x33d5, 0xfe30, 0xffe2, 0xffe4, - 0x003f, 0x2121, 0x3231, 0x003f, 0x2010, 0x003f, 0x003f, 0x003f, - 0x30fc, 0x309b, 0x309c, 0x30fd, 0x30fe, 0x3006, 0x309d, 0x309e, - 0xfe49, 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xfe50, - 0xfe51, 0xfe52, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xfe59, 0xfe5a, - 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0xfe5f, 0xfe60, 0xfe61, 0x003f, - 0xfe62, 0xfe63, 0xfe64, 0xfe65, 0xfe66, 0xfe68, 0xfe69, 0xfe6a, - 0xfe6b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x3007, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x2500, 0x2501, 0x2502, 0x2503, - 0x2504, 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, - 0x250c, 0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, - 0x2514, 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, - 0x251c, 0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, - 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, - 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, - 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, - 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, - 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte aa */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x72dc, 0x72dd, 0x72df, 0x72e2, 0x72e3, 0x72e4, 0x72e5, 0x72e6, - 0x72e7, 0x72ea, 0x72eb, 0x72f5, 0x72f6, 0x72f9, 0x72fd, 0x72fe, - 0x72ff, 0x7300, 0x7302, 0x7304, 0x7305, 0x7306, 0x7307, 0x7308, - 0x7309, 0x730b, 0x730c, 0x730d, 0x730f, 0x7310, 0x7311, 0x7312, - 0x7314, 0x7318, 0x7319, 0x731a, 0x731f, 0x7320, 0x7323, 0x7324, - 0x7326, 0x7327, 0x7328, 0x732d, 0x732f, 0x7330, 0x7332, 0x7333, - 0x7335, 0x7336, 0x733a, 0x733b, 0x733c, 0x733d, 0x7340, 0x7341, - 0x7342, 0x7343, 0x7344, 0x7345, 0x7346, 0x7347, 0x7348, 0x003f, - 0x7349, 0x734a, 0x734b, 0x734c, 0x734e, 0x734f, 0x7351, 0x7353, - 0x7354, 0x7355, 0x7356, 0x7358, 0x7359, 0x735a, 0x735b, 0x735c, - 0x735d, 0x735e, 0x735f, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, - 0x7366, 0x7367, 0x7368, 0x7369, 0x736a, 0x736b, 0x736e, 0x7370, - 0x7371, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ab */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7372, 0x7373, 0x7374, 0x7375, 0x7376, 0x7377, 0x7378, 0x7379, - 0x737a, 0x737b, 0x737c, 0x737d, 0x737f, 0x7380, 0x7381, 0x7382, - 0x7383, 0x7385, 0x7386, 0x7388, 0x738a, 0x738c, 0x738d, 0x738f, - 0x7390, 0x7392, 0x7393, 0x7394, 0x7395, 0x7397, 0x7398, 0x7399, - 0x739a, 0x739c, 0x739d, 0x739e, 0x73a0, 0x73a1, 0x73a3, 0x73a4, - 0x73a5, 0x73a6, 0x73a7, 0x73a8, 0x73aa, 0x73ac, 0x73ad, 0x73b1, - 0x73b4, 0x73b5, 0x73b6, 0x73b8, 0x73b9, 0x73bc, 0x73bd, 0x73be, - 0x73bf, 0x73c1, 0x73c3, 0x73c4, 0x73c5, 0x73c6, 0x73c7, 0x003f, - 0x73cb, 0x73cc, 0x73ce, 0x73d2, 0x73d3, 0x73d4, 0x73d5, 0x73d6, - 0x73d7, 0x73d8, 0x73da, 0x73db, 0x73dc, 0x73dd, 0x73df, 0x73e1, - 0x73e2, 0x73e3, 0x73e4, 0x73e6, 0x73e8, 0x73ea, 0x73eb, 0x73ec, - 0x73ee, 0x73ef, 0x73f0, 0x73f1, 0x73f3, 0x73f4, 0x73f5, 0x73f6, - 0x73f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ac */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x73f8, 0x73f9, 0x73fa, 0x73fb, 0x73fc, 0x73fd, 0x73fe, 0x73ff, - 0x7400, 0x7401, 0x7402, 0x7404, 0x7407, 0x7408, 0x740b, 0x740c, - 0x740d, 0x740e, 0x7411, 0x7412, 0x7413, 0x7414, 0x7415, 0x7416, - 0x7417, 0x7418, 0x7419, 0x741c, 0x741d, 0x741e, 0x741f, 0x7420, - 0x7421, 0x7423, 0x7424, 0x7427, 0x7429, 0x742b, 0x742d, 0x742f, - 0x7431, 0x7432, 0x7437, 0x7438, 0x7439, 0x743a, 0x743b, 0x743d, - 0x743e, 0x743f, 0x7440, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446, - 0x7447, 0x7448, 0x7449, 0x744a, 0x744b, 0x744c, 0x744d, 0x003f, - 0x744e, 0x744f, 0x7450, 0x7451, 0x7452, 0x7453, 0x7454, 0x7456, - 0x7458, 0x745d, 0x7460, 0x7461, 0x7462, 0x7463, 0x7464, 0x7465, - 0x7466, 0x7467, 0x7468, 0x7469, 0x746a, 0x746b, 0x746c, 0x746e, - 0x746f, 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, - 0x747a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ad */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x747b, 0x747c, 0x747d, 0x747f, 0x7482, 0x7484, 0x7485, 0x7486, - 0x7488, 0x7489, 0x748a, 0x748c, 0x748d, 0x748f, 0x7491, 0x7492, - 0x7493, 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749a, - 0x749b, 0x749d, 0x749f, 0x74a0, 0x74a1, 0x74a2, 0x74a3, 0x74a4, - 0x74a5, 0x74a6, 0x74aa, 0x74ab, 0x74ac, 0x74ad, 0x74ae, 0x74af, - 0x74b0, 0x74b1, 0x74b2, 0x74b3, 0x74b4, 0x74b5, 0x74b6, 0x74b7, - 0x74b8, 0x74b9, 0x74bb, 0x74bc, 0x74bd, 0x74be, 0x74bf, 0x74c0, - 0x74c1, 0x74c2, 0x74c3, 0x74c4, 0x74c5, 0x74c6, 0x74c7, 0x003f, - 0x74c8, 0x74c9, 0x74ca, 0x74cb, 0x74cc, 0x74cd, 0x74ce, 0x74cf, - 0x74d0, 0x74d1, 0x74d3, 0x74d4, 0x74d5, 0x74d6, 0x74d7, 0x74d8, - 0x74d9, 0x74da, 0x74db, 0x74dd, 0x74df, 0x74e1, 0x74e5, 0x74e7, - 0x74e8, 0x74e9, 0x74ea, 0x74eb, 0x74ec, 0x74ed, 0x74f0, 0x74f1, - 0x74f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ae */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x74f3, 0x74f5, 0x74f8, 0x74f9, 0x74fa, 0x74fb, 0x74fc, 0x74fd, - 0x74fe, 0x7500, 0x7501, 0x7502, 0x7503, 0x7505, 0x7506, 0x7507, - 0x7508, 0x7509, 0x750a, 0x750b, 0x750c, 0x750e, 0x7510, 0x7512, - 0x7514, 0x7515, 0x7516, 0x7517, 0x751b, 0x751d, 0x751e, 0x7520, - 0x7521, 0x7522, 0x7523, 0x7524, 0x7526, 0x7527, 0x752a, 0x752e, - 0x7534, 0x7536, 0x7539, 0x753c, 0x753d, 0x753f, 0x7541, 0x7542, - 0x7543, 0x7544, 0x7546, 0x7547, 0x7549, 0x754a, 0x754d, 0x7550, - 0x7551, 0x7552, 0x7553, 0x7555, 0x7556, 0x7557, 0x7558, 0x003f, - 0x755d, 0x755e, 0x755f, 0x7560, 0x7561, 0x7562, 0x7563, 0x7564, - 0x7567, 0x7568, 0x7569, 0x756b, 0x756c, 0x756d, 0x756e, 0x756f, - 0x7570, 0x7571, 0x7573, 0x7575, 0x7576, 0x7577, 0x757a, 0x757b, - 0x757c, 0x757d, 0x757e, 0x7580, 0x7581, 0x7582, 0x7584, 0x7585, - 0x7587, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte af */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7588, 0x7589, 0x758a, 0x758c, 0x758d, 0x758e, 0x7590, 0x7593, - 0x7595, 0x7598, 0x759b, 0x759c, 0x759e, 0x75a2, 0x75a6, 0x75a7, - 0x75a8, 0x75a9, 0x75aa, 0x75ad, 0x75b6, 0x75b7, 0x75ba, 0x75bb, - 0x75bf, 0x75c0, 0x75c1, 0x75c6, 0x75cb, 0x75cc, 0x75ce, 0x75cf, - 0x75d0, 0x75d1, 0x75d3, 0x75d7, 0x75d9, 0x75da, 0x75dc, 0x75dd, - 0x75df, 0x75e0, 0x75e1, 0x75e5, 0x75e9, 0x75ec, 0x75ed, 0x75ee, - 0x75ef, 0x75f2, 0x75f3, 0x75f5, 0x75f6, 0x75f7, 0x75f8, 0x75fa, - 0x75fb, 0x75fd, 0x75fe, 0x7602, 0x7604, 0x7606, 0x7607, 0x003f, - 0x7608, 0x7609, 0x760b, 0x760d, 0x760e, 0x760f, 0x7611, 0x7612, - 0x7613, 0x7614, 0x7616, 0x761a, 0x761c, 0x761d, 0x761e, 0x7621, - 0x7623, 0x7627, 0x7628, 0x762c, 0x762e, 0x762f, 0x7631, 0x7632, - 0x7636, 0x7637, 0x7639, 0x763a, 0x763b, 0x763d, 0x7641, 0x7642, - 0x7644, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte b0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7645, 0x7646, 0x7647, 0x7648, 0x7649, 0x764a, 0x764b, 0x764e, - 0x764f, 0x7650, 0x7651, 0x7652, 0x7653, 0x7655, 0x7657, 0x7658, - 0x7659, 0x765a, 0x765b, 0x765d, 0x765f, 0x7660, 0x7661, 0x7662, - 0x7664, 0x7665, 0x7666, 0x7667, 0x7668, 0x7669, 0x766a, 0x766c, - 0x766d, 0x766e, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x7675, - 0x7676, 0x7677, 0x7679, 0x767a, 0x767c, 0x767f, 0x7680, 0x7681, - 0x7683, 0x7685, 0x7689, 0x768a, 0x768c, 0x768d, 0x768f, 0x7690, - 0x7692, 0x7694, 0x7695, 0x7697, 0x7698, 0x769a, 0x769b, 0x003f, - 0x769c, 0x769d, 0x769e, 0x769f, 0x76a0, 0x76a1, 0x76a2, 0x76a3, - 0x76a5, 0x76a6, 0x76a7, 0x76a8, 0x76a9, 0x76aa, 0x76ab, 0x76ac, - 0x76ad, 0x76af, 0x76b0, 0x76b3, 0x76b5, 0x76b6, 0x76b7, 0x76b8, - 0x76b9, 0x76ba, 0x76bb, 0x76bc, 0x76bd, 0x76be, 0x76c0, 0x76c1, - 0x76c3, 0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, - 0x7691, 0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, - 0x978d, 0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, - 0x6848, 0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, - 0x8884, 0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, - 0x53ed, 0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, - 0x9776, 0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, - 0x67cf, 0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, - 0x73ed, 0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, - 0x62cc, 0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, - 0x6886, 0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, - 0x508d, 0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265, 0x003f, - /* lead byte b1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x76c4, 0x76c7, 0x76c9, 0x76cb, 0x76cc, 0x76d3, 0x76d5, 0x76d9, - 0x76da, 0x76dc, 0x76dd, 0x76de, 0x76e0, 0x76e1, 0x76e2, 0x76e3, - 0x76e4, 0x76e6, 0x76e7, 0x76e8, 0x76e9, 0x76ea, 0x76eb, 0x76ec, - 0x76ed, 0x76f0, 0x76f3, 0x76f5, 0x76f6, 0x76f7, 0x76fa, 0x76fb, - 0x76fd, 0x76ff, 0x7700, 0x7702, 0x7703, 0x7705, 0x7706, 0x770a, - 0x770c, 0x770e, 0x770f, 0x7710, 0x7711, 0x7712, 0x7713, 0x7714, - 0x7715, 0x7716, 0x7717, 0x7718, 0x771b, 0x771c, 0x771d, 0x771e, - 0x7721, 0x7723, 0x7724, 0x7725, 0x7727, 0x772a, 0x772b, 0x003f, - 0x772c, 0x772e, 0x7730, 0x7731, 0x7732, 0x7733, 0x7734, 0x7739, - 0x773b, 0x773d, 0x773e, 0x773f, 0x7742, 0x7744, 0x7745, 0x7746, - 0x7748, 0x7749, 0x774a, 0x774b, 0x774c, 0x774d, 0x774e, 0x774f, - 0x7752, 0x7753, 0x7754, 0x7755, 0x7756, 0x7757, 0x7758, 0x7759, - 0x775c, 0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, - 0x62a5, 0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, - 0x5351, 0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, - 0x5907, 0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, - 0x5d29, 0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, - 0x6bd4, 0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, - 0x6bd9, 0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, - 0x5fc5, 0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, - 0x7f16, 0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, - 0x8fab, 0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, - 0x522b, 0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, - 0x5175, 0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3, 0x003f, - /* lead byte b2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x775d, 0x775e, 0x775f, 0x7760, 0x7764, 0x7767, 0x7769, 0x776a, - 0x776d, 0x776e, 0x776f, 0x7770, 0x7771, 0x7772, 0x7773, 0x7774, - 0x7775, 0x7776, 0x7777, 0x7778, 0x777a, 0x777b, 0x777c, 0x7781, - 0x7782, 0x7783, 0x7786, 0x7787, 0x7788, 0x7789, 0x778a, 0x778b, - 0x778f, 0x7790, 0x7793, 0x7794, 0x7795, 0x7796, 0x7797, 0x7798, - 0x7799, 0x779a, 0x779b, 0x779c, 0x779d, 0x779e, 0x77a1, 0x77a3, - 0x77a4, 0x77a6, 0x77a8, 0x77ab, 0x77ad, 0x77ae, 0x77af, 0x77b1, - 0x77b2, 0x77b4, 0x77b6, 0x77b7, 0x77b8, 0x77b9, 0x77ba, 0x003f, - 0x77bc, 0x77be, 0x77c0, 0x77c1, 0x77c2, 0x77c3, 0x77c4, 0x77c5, - 0x77c6, 0x77c7, 0x77c8, 0x77c9, 0x77ca, 0x77cb, 0x77cc, 0x77ce, - 0x77cf, 0x77d0, 0x77d1, 0x77d2, 0x77d3, 0x77d4, 0x77d5, 0x77d6, - 0x77d8, 0x77d9, 0x77da, 0x77dd, 0x77de, 0x77df, 0x77e0, 0x77e1, - 0x77e4, 0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, - 0x6ce2, 0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, - 0x8236, 0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, - 0x54fa, 0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, - 0x6016, 0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, - 0x8e29, 0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, - 0x6b8b, 0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, - 0x85cf, 0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, - 0x4fa7, 0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, - 0x8336, 0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, - 0x62c6, 0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, - 0x7f20, 0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316, 0x003f, - /* lead byte b3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x77e6, 0x77e8, 0x77ea, 0x77ef, 0x77f0, 0x77f1, 0x77f2, 0x77f4, - 0x77f5, 0x77f7, 0x77f9, 0x77fa, 0x77fb, 0x77fc, 0x7803, 0x7804, - 0x7805, 0x7806, 0x7807, 0x7808, 0x780a, 0x780b, 0x780e, 0x780f, - 0x7810, 0x7813, 0x7815, 0x7819, 0x781b, 0x781e, 0x7820, 0x7821, - 0x7822, 0x7824, 0x7828, 0x782a, 0x782b, 0x782e, 0x782f, 0x7831, - 0x7832, 0x7833, 0x7835, 0x7836, 0x783d, 0x783f, 0x7841, 0x7842, - 0x7843, 0x7844, 0x7846, 0x7848, 0x7849, 0x784a, 0x784b, 0x784d, - 0x784f, 0x7851, 0x7853, 0x7854, 0x7858, 0x7859, 0x785a, 0x003f, - 0x785b, 0x785c, 0x785e, 0x785f, 0x7860, 0x7861, 0x7862, 0x7863, - 0x7864, 0x7865, 0x7866, 0x7867, 0x7868, 0x7869, 0x786f, 0x7870, - 0x7871, 0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7878, 0x7879, - 0x787a, 0x787b, 0x787d, 0x787e, 0x787f, 0x7880, 0x7881, 0x7882, - 0x7883, 0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, - 0x655e, 0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, - 0x5632, 0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, - 0x63a3, 0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, - 0x5ff1, 0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, - 0x6a59, 0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, - 0x627f, 0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, - 0x6c60, 0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, - 0x8d64, 0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, - 0x5ba0, 0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, - 0x4ec7, 0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, - 0x53a8, 0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a, 0x003f, - /* lead byte b4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7884, 0x7885, 0x7886, 0x7888, 0x788a, 0x788b, 0x788f, 0x7890, - 0x7892, 0x7894, 0x7895, 0x7896, 0x7899, 0x789d, 0x789e, 0x78a0, - 0x78a2, 0x78a4, 0x78a6, 0x78a8, 0x78a9, 0x78aa, 0x78ab, 0x78ac, - 0x78ad, 0x78ae, 0x78af, 0x78b5, 0x78b6, 0x78b7, 0x78b8, 0x78ba, - 0x78bb, 0x78bc, 0x78bd, 0x78bf, 0x78c0, 0x78c2, 0x78c3, 0x78c4, - 0x78c6, 0x78c7, 0x78c8, 0x78cc, 0x78cd, 0x78ce, 0x78cf, 0x78d1, - 0x78d2, 0x78d3, 0x78d6, 0x78d7, 0x78d8, 0x78da, 0x78db, 0x78dc, - 0x78dd, 0x78de, 0x78df, 0x78e0, 0x78e1, 0x78e2, 0x78e3, 0x003f, - 0x78e4, 0x78e5, 0x78e6, 0x78e7, 0x78e9, 0x78ea, 0x78eb, 0x78ed, - 0x78ee, 0x78ef, 0x78f0, 0x78f1, 0x78f3, 0x78f5, 0x78f6, 0x78f8, - 0x78f9, 0x78fb, 0x78fc, 0x78fd, 0x78fe, 0x78ff, 0x7900, 0x7902, - 0x7903, 0x7904, 0x7906, 0x7907, 0x7908, 0x7909, 0x790a, 0x790b, - 0x790c, 0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, - 0x5ddd, 0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, - 0x7a97, 0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, - 0x9524, 0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, - 0x8822, 0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, - 0x6148, 0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, - 0x8471, 0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, - 0x7c07, 0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, - 0x8106, 0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, - 0x78cb, 0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, - 0x7b54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, - 0x5e26, 0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e, 0x003f, - /* lead byte b5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x790d, 0x790e, 0x790f, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915, - 0x7916, 0x7917, 0x7918, 0x7919, 0x791a, 0x791b, 0x791c, 0x791d, - 0x791f, 0x7920, 0x7921, 0x7922, 0x7923, 0x7925, 0x7926, 0x7927, - 0x7928, 0x7929, 0x792a, 0x792b, 0x792c, 0x792d, 0x792e, 0x792f, - 0x7930, 0x7931, 0x7932, 0x7933, 0x7935, 0x7936, 0x7937, 0x7938, - 0x7939, 0x793d, 0x793f, 0x7942, 0x7943, 0x7944, 0x7945, 0x7947, - 0x794a, 0x794b, 0x794c, 0x794d, 0x794e, 0x794f, 0x7950, 0x7951, - 0x7952, 0x7954, 0x7955, 0x7958, 0x7959, 0x7961, 0x7963, 0x003f, - 0x7964, 0x7966, 0x7969, 0x796a, 0x796b, 0x796c, 0x796e, 0x7970, - 0x7971, 0x7972, 0x7973, 0x7974, 0x7975, 0x7976, 0x7979, 0x797b, - 0x797c, 0x797d, 0x797e, 0x797f, 0x7982, 0x7983, 0x7986, 0x7987, - 0x7988, 0x7989, 0x798b, 0x798c, 0x798d, 0x798e, 0x7990, 0x7991, - 0x7992, 0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, - 0x80c6, 0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, - 0x86cb, 0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, - 0x8e48, 0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, - 0x9053, 0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, - 0x7b49, 0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, - 0x654c, 0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, - 0x5730, 0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, - 0x6382, 0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, - 0x4f43, 0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, - 0x53fc, 0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, - 0x8dcc, 0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0, 0x003f, - /* lead byte b6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7993, 0x7994, 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799b, - 0x799c, 0x799d, 0x799e, 0x799f, 0x79a0, 0x79a1, 0x79a2, 0x79a3, - 0x79a4, 0x79a5, 0x79a6, 0x79a8, 0x79a9, 0x79aa, 0x79ab, 0x79ac, - 0x79ad, 0x79ae, 0x79af, 0x79b0, 0x79b1, 0x79b2, 0x79b4, 0x79b5, - 0x79b6, 0x79b7, 0x79b8, 0x79bc, 0x79bf, 0x79c2, 0x79c4, 0x79c5, - 0x79c7, 0x79c8, 0x79ca, 0x79cc, 0x79ce, 0x79cf, 0x79d0, 0x79d3, - 0x79d4, 0x79d6, 0x79d7, 0x79d9, 0x79da, 0x79db, 0x79dc, 0x79dd, - 0x79de, 0x79e0, 0x79e1, 0x79e2, 0x79e5, 0x79e8, 0x79ea, 0x003f, - 0x79ec, 0x79ee, 0x79f1, 0x79f2, 0x79f3, 0x79f4, 0x79f5, 0x79f6, - 0x79f7, 0x79f9, 0x79fa, 0x79fc, 0x79fe, 0x79ff, 0x7a01, 0x7a04, - 0x7a05, 0x7a07, 0x7a08, 0x7a09, 0x7a0a, 0x7a0c, 0x7a0f, 0x7a10, - 0x7a11, 0x7a12, 0x7a13, 0x7a15, 0x7a16, 0x7a18, 0x7a19, 0x7a1b, - 0x7a1c, 0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, - 0x5b9a, 0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, - 0x680b, 0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, - 0x9661, 0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, - 0x72ec, 0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, - 0x5ea6, 0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, - 0x7f0e, 0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, - 0x6566, 0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, - 0x591a, 0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, - 0x60f0, 0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, - 0x5a25, 0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, - 0x800c, 0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c, 0x003f, - /* lead byte b7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7a1d, 0x7a1f, 0x7a21, 0x7a22, 0x7a24, 0x7a25, 0x7a26, 0x7a27, - 0x7a28, 0x7a29, 0x7a2a, 0x7a2b, 0x7a2c, 0x7a2d, 0x7a2e, 0x7a2f, - 0x7a30, 0x7a31, 0x7a32, 0x7a34, 0x7a35, 0x7a36, 0x7a38, 0x7a3a, - 0x7a3e, 0x7a40, 0x7a41, 0x7a42, 0x7a43, 0x7a44, 0x7a45, 0x7a47, - 0x7a48, 0x7a49, 0x7a4a, 0x7a4b, 0x7a4c, 0x7a4d, 0x7a4e, 0x7a4f, - 0x7a50, 0x7a52, 0x7a53, 0x7a54, 0x7a55, 0x7a56, 0x7a58, 0x7a59, - 0x7a5a, 0x7a5b, 0x7a5c, 0x7a5d, 0x7a5e, 0x7a5f, 0x7a60, 0x7a61, - 0x7a62, 0x7a63, 0x7a64, 0x7a65, 0x7a66, 0x7a67, 0x7a68, 0x003f, - 0x7a69, 0x7a6a, 0x7a6b, 0x7a6c, 0x7a6d, 0x7a6e, 0x7a6f, 0x7a71, - 0x7a72, 0x7a73, 0x7a75, 0x7a7b, 0x7a7c, 0x7a7d, 0x7a7e, 0x7a82, - 0x7a85, 0x7a87, 0x7a89, 0x7a8a, 0x7a8b, 0x7a8c, 0x7a8e, 0x7a8f, - 0x7a90, 0x7a93, 0x7a94, 0x7a99, 0x7a9a, 0x7a9b, 0x7a9e, 0x7aa1, - 0x7aa2, 0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, - 0x6cd5, 0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, - 0x9492, 0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, - 0x72af, 0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, - 0x9632, 0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, - 0x5561, 0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, - 0x6cb8, 0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, - 0x575f, 0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, - 0x7caa, 0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, - 0x75af, 0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, - 0x4f5b, 0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, - 0x8f90, 0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d, 0x003f, - /* lead byte b8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7aa3, 0x7aa4, 0x7aa7, 0x7aa9, 0x7aaa, 0x7aab, 0x7aae, 0x7aaf, - 0x7ab0, 0x7ab1, 0x7ab2, 0x7ab4, 0x7ab5, 0x7ab6, 0x7ab7, 0x7ab8, - 0x7ab9, 0x7aba, 0x7abb, 0x7abc, 0x7abd, 0x7abe, 0x7ac0, 0x7ac1, - 0x7ac2, 0x7ac3, 0x7ac4, 0x7ac5, 0x7ac6, 0x7ac7, 0x7ac8, 0x7ac9, - 0x7aca, 0x7acc, 0x7acd, 0x7ace, 0x7acf, 0x7ad0, 0x7ad1, 0x7ad2, - 0x7ad3, 0x7ad4, 0x7ad5, 0x7ad7, 0x7ad8, 0x7ada, 0x7adb, 0x7adc, - 0x7add, 0x7ae1, 0x7ae2, 0x7ae4, 0x7ae7, 0x7ae8, 0x7ae9, 0x7aea, - 0x7aeb, 0x7aec, 0x7aee, 0x7af0, 0x7af1, 0x7af2, 0x7af3, 0x003f, - 0x7af4, 0x7af5, 0x7af6, 0x7af7, 0x7af8, 0x7afb, 0x7afc, 0x7afe, - 0x7b00, 0x7b01, 0x7b02, 0x7b05, 0x7b07, 0x7b09, 0x7b0c, 0x7b0d, - 0x7b0e, 0x7b10, 0x7b12, 0x7b13, 0x7b16, 0x7b17, 0x7b18, 0x7b1a, - 0x7b1c, 0x7b1d, 0x7b1f, 0x7b21, 0x7b22, 0x7b23, 0x7b27, 0x7b29, - 0x7b2d, 0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, - 0x8f85, 0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, - 0x8d74, 0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, - 0x7236, 0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, - 0x5490, 0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, - 0x6e89, 0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, - 0x611f, 0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, - 0x809b, 0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, - 0x818f, 0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, - 0x6b4c, 0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, - 0x845b, 0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, - 0x7ed9, 0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9, 0x003f, - /* lead byte b9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7b2f, 0x7b30, 0x7b32, 0x7b34, 0x7b35, 0x7b36, 0x7b37, 0x7b39, - 0x7b3b, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b42, 0x7b43, 0x7b44, - 0x7b46, 0x7b48, 0x7b4a, 0x7b4d, 0x7b4e, 0x7b53, 0x7b55, 0x7b57, - 0x7b59, 0x7b5c, 0x7b5e, 0x7b5f, 0x7b61, 0x7b63, 0x7b64, 0x7b65, - 0x7b66, 0x7b67, 0x7b68, 0x7b69, 0x7b6a, 0x7b6b, 0x7b6c, 0x7b6d, - 0x7b6f, 0x7b70, 0x7b73, 0x7b74, 0x7b76, 0x7b78, 0x7b7a, 0x7b7c, - 0x7b7d, 0x7b7f, 0x7b81, 0x7b82, 0x7b83, 0x7b84, 0x7b86, 0x7b87, - 0x7b88, 0x7b89, 0x7b8a, 0x7b8b, 0x7b8c, 0x7b8e, 0x7b8f, 0x003f, - 0x7b91, 0x7b92, 0x7b93, 0x7b96, 0x7b98, 0x7b99, 0x7b9a, 0x7b9b, - 0x7b9e, 0x7b9f, 0x7ba0, 0x7ba3, 0x7ba4, 0x7ba5, 0x7bae, 0x7baf, - 0x7bb0, 0x7bb2, 0x7bb3, 0x7bb5, 0x7bb6, 0x7bb7, 0x7bb9, 0x7bba, - 0x7bbb, 0x7bbc, 0x7bbd, 0x7bbe, 0x7bbf, 0x7bc0, 0x7bc2, 0x7bc3, - 0x7bc4, 0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, - 0x9f9a, 0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, - 0x62f1, 0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, - 0x57a2, 0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, - 0x4f30, 0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, - 0x8c37, 0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, - 0x5250, 0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, - 0x5173, 0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, - 0x704c, 0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, - 0x7845, 0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, - 0x6842, 0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, - 0x9505, 0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8, 0x003f, - /* lead byte ba */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7bc5, 0x7bc8, 0x7bc9, 0x7bca, 0x7bcb, 0x7bcd, 0x7bce, 0x7bcf, - 0x7bd0, 0x7bd2, 0x7bd4, 0x7bd5, 0x7bd6, 0x7bd7, 0x7bd8, 0x7bdb, - 0x7bdc, 0x7bde, 0x7bdf, 0x7be0, 0x7be2, 0x7be3, 0x7be4, 0x7be7, - 0x7be8, 0x7be9, 0x7beb, 0x7bec, 0x7bed, 0x7bef, 0x7bf0, 0x7bf2, - 0x7bf3, 0x7bf4, 0x7bf5, 0x7bf6, 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfb, - 0x7bfd, 0x7bff, 0x7c00, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c05, - 0x7c06, 0x7c08, 0x7c09, 0x7c0a, 0x7c0d, 0x7c0e, 0x7c10, 0x7c11, - 0x7c12, 0x7c13, 0x7c14, 0x7c15, 0x7c17, 0x7c18, 0x7c19, 0x003f, - 0x7c1a, 0x7c1b, 0x7c1c, 0x7c1d, 0x7c1e, 0x7c20, 0x7c21, 0x7c22, - 0x7c23, 0x7c24, 0x7c25, 0x7c28, 0x7c29, 0x7c2b, 0x7c2c, 0x7c2d, - 0x7c2e, 0x7c2f, 0x7c30, 0x7c31, 0x7c32, 0x7c33, 0x7c34, 0x7c35, - 0x7c36, 0x7c37, 0x7c39, 0x7c3a, 0x7c3b, 0x7c3c, 0x7c3d, 0x7c3e, - 0x7c42, 0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, - 0x9163, 0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, - 0x558a, 0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, - 0x710a, 0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, - 0x8c6a, 0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, - 0x559d, 0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, - 0x76d2, 0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, - 0x8d3a, 0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, - 0x4ea8, 0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, - 0x9e3f, 0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, - 0x543c, 0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, - 0x58f6, 0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56, 0x003f, - /* lead byte bb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7c43, 0x7c44, 0x7c45, 0x7c46, 0x7c47, 0x7c48, 0x7c49, 0x7c4a, - 0x7c4b, 0x7c4c, 0x7c4e, 0x7c4f, 0x7c50, 0x7c51, 0x7c52, 0x7c53, - 0x7c54, 0x7c55, 0x7c56, 0x7c57, 0x7c58, 0x7c59, 0x7c5a, 0x7c5b, - 0x7c5c, 0x7c5d, 0x7c5e, 0x7c5f, 0x7c60, 0x7c61, 0x7c62, 0x7c63, - 0x7c64, 0x7c65, 0x7c66, 0x7c67, 0x7c68, 0x7c69, 0x7c6a, 0x7c6b, - 0x7c6c, 0x7c6d, 0x7c6e, 0x7c6f, 0x7c70, 0x7c71, 0x7c72, 0x7c75, - 0x7c76, 0x7c77, 0x7c78, 0x7c79, 0x7c7a, 0x7c7e, 0x7c7f, 0x7c80, - 0x7c81, 0x7c82, 0x7c83, 0x7c84, 0x7c85, 0x7c86, 0x7c87, 0x003f, - 0x7c88, 0x7c8a, 0x7c8b, 0x7c8c, 0x7c8d, 0x7c8e, 0x7c8f, 0x7c90, - 0x7c93, 0x7c94, 0x7c96, 0x7c99, 0x7c9a, 0x7c9b, 0x7ca0, 0x7ca1, - 0x7ca3, 0x7ca6, 0x7ca7, 0x7ca8, 0x7ca9, 0x7cab, 0x7cac, 0x7cad, - 0x7caf, 0x7cb0, 0x7cb4, 0x7cb5, 0x7cb6, 0x7cb7, 0x7cb8, 0x7cba, - 0x7cbb, 0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, - 0x82b1, 0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, - 0x8bdd, 0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, - 0x6853, 0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, - 0x7115, 0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, - 0x8757, 0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, - 0x604d, 0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, - 0x56de, 0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, - 0x79fd, 0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, - 0x660f, 0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, - 0x706b, 0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, - 0x573e, 0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95, 0x003f, - /* lead byte bc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7cbf, 0x7cc0, 0x7cc2, 0x7cc3, 0x7cc4, 0x7cc6, 0x7cc9, 0x7ccb, - 0x7cce, 0x7ccf, 0x7cd0, 0x7cd1, 0x7cd2, 0x7cd3, 0x7cd4, 0x7cd8, - 0x7cda, 0x7cdb, 0x7cdd, 0x7cde, 0x7ce1, 0x7ce2, 0x7ce3, 0x7ce4, - 0x7ce5, 0x7ce6, 0x7ce7, 0x7ce9, 0x7cea, 0x7ceb, 0x7cec, 0x7ced, - 0x7cee, 0x7cf0, 0x7cf1, 0x7cf2, 0x7cf3, 0x7cf4, 0x7cf5, 0x7cf6, - 0x7cf7, 0x7cf9, 0x7cfa, 0x7cfc, 0x7cfd, 0x7cfe, 0x7cff, 0x7d00, - 0x7d01, 0x7d02, 0x7d03, 0x7d04, 0x7d05, 0x7d06, 0x7d07, 0x7d08, - 0x7d09, 0x7d0b, 0x7d0c, 0x7d0d, 0x7d0e, 0x7d0f, 0x7d10, 0x003f, - 0x7d11, 0x7d12, 0x7d13, 0x7d14, 0x7d15, 0x7d16, 0x7d17, 0x7d18, - 0x7d19, 0x7d1a, 0x7d1b, 0x7d1c, 0x7d1d, 0x7d1e, 0x7d1f, 0x7d21, - 0x7d23, 0x7d24, 0x7d25, 0x7d26, 0x7d28, 0x7d29, 0x7d2a, 0x7d2c, - 0x7d2d, 0x7d2e, 0x7d30, 0x7d31, 0x7d32, 0x7d33, 0x7d34, 0x7d35, - 0x7d36, 0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, - 0x7ee9, 0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, - 0x53ca, 0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, - 0x51e0, 0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, - 0x796d, 0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, - 0x65e2, 0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, - 0x5939, 0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, - 0x94be, 0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, - 0x76d1, 0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, - 0x8270, 0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, - 0x62e3, 0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, - 0x9274, 0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6, 0x003f, - /* lead byte bd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7d37, 0x7d38, 0x7d39, 0x7d3a, 0x7d3b, 0x7d3c, 0x7d3d, 0x7d3e, - 0x7d3f, 0x7d40, 0x7d41, 0x7d42, 0x7d43, 0x7d44, 0x7d45, 0x7d46, - 0x7d47, 0x7d48, 0x7d49, 0x7d4a, 0x7d4b, 0x7d4c, 0x7d4d, 0x7d4e, - 0x7d4f, 0x7d50, 0x7d51, 0x7d52, 0x7d53, 0x7d54, 0x7d55, 0x7d56, - 0x7d57, 0x7d58, 0x7d59, 0x7d5a, 0x7d5b, 0x7d5c, 0x7d5d, 0x7d5e, - 0x7d5f, 0x7d60, 0x7d61, 0x7d62, 0x7d63, 0x7d64, 0x7d65, 0x7d66, - 0x7d67, 0x7d68, 0x7d69, 0x7d6a, 0x7d6b, 0x7d6c, 0x7d6d, 0x7d6f, - 0x7d70, 0x7d71, 0x7d72, 0x7d73, 0x7d74, 0x7d75, 0x7d76, 0x003f, - 0x7d78, 0x7d79, 0x7d7a, 0x7d7b, 0x7d7c, 0x7d7d, 0x7d7e, 0x7d7f, - 0x7d80, 0x7d81, 0x7d82, 0x7d83, 0x7d84, 0x7d85, 0x7d86, 0x7d87, - 0x7d88, 0x7d89, 0x7d8a, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d8e, 0x7d8f, - 0x7d90, 0x7d91, 0x7d92, 0x7d93, 0x7d94, 0x7d95, 0x7d96, 0x7d97, - 0x7d98, 0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, - 0x5efa, 0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, - 0x6868, 0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, - 0x7901, 0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, - 0x56bc, 0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, - 0x997a, 0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, - 0x53eb, 0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, - 0x622a, 0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, - 0x6d01, 0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, - 0x501f, 0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, - 0x91d1, 0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, - 0x8fdb, 0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78, 0x003f, - /* lead byte be */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7d99, 0x7d9a, 0x7d9b, 0x7d9c, 0x7d9d, 0x7d9e, 0x7d9f, 0x7da0, - 0x7da1, 0x7da2, 0x7da3, 0x7da4, 0x7da5, 0x7da7, 0x7da8, 0x7da9, - 0x7daa, 0x7dab, 0x7dac, 0x7dad, 0x7daf, 0x7db0, 0x7db1, 0x7db2, - 0x7db3, 0x7db4, 0x7db5, 0x7db6, 0x7db7, 0x7db8, 0x7db9, 0x7dba, - 0x7dbb, 0x7dbc, 0x7dbd, 0x7dbe, 0x7dbf, 0x7dc0, 0x7dc1, 0x7dc2, - 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dc7, 0x7dc8, 0x7dc9, 0x7dca, - 0x7dcb, 0x7dcc, 0x7dcd, 0x7dce, 0x7dcf, 0x7dd0, 0x7dd1, 0x7dd2, - 0x7dd3, 0x7dd4, 0x7dd5, 0x7dd6, 0x7dd7, 0x7dd8, 0x7dd9, 0x003f, - 0x7dda, 0x7ddb, 0x7ddc, 0x7ddd, 0x7dde, 0x7ddf, 0x7de0, 0x7de1, - 0x7de2, 0x7de3, 0x7de4, 0x7de5, 0x7de6, 0x7de7, 0x7de8, 0x7de9, - 0x7dea, 0x7deb, 0x7dec, 0x7ded, 0x7dee, 0x7def, 0x7df0, 0x7df1, - 0x7df2, 0x7df3, 0x7df4, 0x7df5, 0x7df6, 0x7df7, 0x7df8, 0x7df9, - 0x7dfa, 0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, - 0x9cb8, 0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, - 0x666f, 0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, - 0x9756, 0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, - 0x7ea0, 0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, - 0x6551, 0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, - 0x62d8, 0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, - 0x77e9, 0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, - 0x8ddd, 0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, - 0x6350, 0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, - 0x652b, 0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, - 0x7edd, 0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb, 0x003f, - /* lead byte bf */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7dfb, 0x7dfc, 0x7dfd, 0x7dfe, 0x7dff, 0x7e00, 0x7e01, 0x7e02, - 0x7e03, 0x7e04, 0x7e05, 0x7e06, 0x7e07, 0x7e08, 0x7e09, 0x7e0a, - 0x7e0b, 0x7e0c, 0x7e0d, 0x7e0e, 0x7e0f, 0x7e10, 0x7e11, 0x7e12, - 0x7e13, 0x7e14, 0x7e15, 0x7e16, 0x7e17, 0x7e18, 0x7e19, 0x7e1a, - 0x7e1b, 0x7e1c, 0x7e1d, 0x7e1e, 0x7e1f, 0x7e20, 0x7e21, 0x7e22, - 0x7e23, 0x7e24, 0x7e25, 0x7e26, 0x7e27, 0x7e28, 0x7e29, 0x7e2a, - 0x7e2b, 0x7e2c, 0x7e2d, 0x7e2e, 0x7e2f, 0x7e30, 0x7e31, 0x7e32, - 0x7e33, 0x7e34, 0x7e35, 0x7e36, 0x7e37, 0x7e38, 0x7e39, 0x003f, - 0x7e3a, 0x7e3c, 0x7e3d, 0x7e3e, 0x7e3f, 0x7e40, 0x7e42, 0x7e43, - 0x7e44, 0x7e45, 0x7e46, 0x7e48, 0x7e49, 0x7e4a, 0x7e4b, 0x7e4c, - 0x7e4d, 0x7e4e, 0x7e4f, 0x7e50, 0x7e51, 0x7e52, 0x7e53, 0x7e54, - 0x7e55, 0x7e56, 0x7e57, 0x7e58, 0x7e59, 0x7e5a, 0x7e5b, 0x7e5c, - 0x7e5d, 0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, - 0x5361, 0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, - 0x582a, 0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, - 0x625b, 0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, - 0x5777, 0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, - 0x54b3, 0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, - 0x5543, 0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, - 0x63a7, 0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, - 0x82e6, 0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, - 0x80ef, 0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, - 0x7b50, 0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, - 0x76d4, 0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080, 0x003f, - /* lead byte c0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7e5e, 0x7e5f, 0x7e60, 0x7e61, 0x7e62, 0x7e63, 0x7e64, 0x7e65, - 0x7e66, 0x7e67, 0x7e68, 0x7e69, 0x7e6a, 0x7e6b, 0x7e6c, 0x7e6d, - 0x7e6e, 0x7e6f, 0x7e70, 0x7e71, 0x7e72, 0x7e73, 0x7e74, 0x7e75, - 0x7e76, 0x7e77, 0x7e78, 0x7e79, 0x7e7a, 0x7e7b, 0x7e7c, 0x7e7d, - 0x7e7e, 0x7e7f, 0x7e80, 0x7e81, 0x7e83, 0x7e84, 0x7e85, 0x7e86, - 0x7e87, 0x7e88, 0x7e89, 0x7e8a, 0x7e8b, 0x7e8c, 0x7e8d, 0x7e8e, - 0x7e8f, 0x7e90, 0x7e91, 0x7e92, 0x7e93, 0x7e94, 0x7e95, 0x7e96, - 0x7e97, 0x7e98, 0x7e99, 0x7e9a, 0x7e9c, 0x7e9d, 0x7e9e, 0x003f, - 0x7eae, 0x7eb4, 0x7ebb, 0x7ebc, 0x7ed6, 0x7ee4, 0x7eec, 0x7ef9, - 0x7f0a, 0x7f10, 0x7f1e, 0x7f37, 0x7f39, 0x7f3b, 0x7f3c, 0x7f3d, - 0x7f3e, 0x7f3f, 0x7f40, 0x7f41, 0x7f43, 0x7f46, 0x7f47, 0x7f48, - 0x7f49, 0x7f4a, 0x7f4b, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f4f, 0x7f52, - 0x7f53, 0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, - 0x62ec, 0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, - 0x814a, 0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, - 0x680f, 0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, - 0x89c8, 0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, - 0x5eca, 0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, - 0x4f6c, 0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, - 0x956d, 0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, - 0x7c7b, 0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, - 0x9ece, 0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, - 0x9ca4, 0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, - 0x52b1, 0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0, 0x003f, - /* lead byte c1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7f56, 0x7f59, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f5e, 0x7f60, 0x7f63, - 0x7f64, 0x7f65, 0x7f66, 0x7f67, 0x7f6b, 0x7f6c, 0x7f6d, 0x7f6f, - 0x7f70, 0x7f73, 0x7f75, 0x7f76, 0x7f77, 0x7f78, 0x7f7a, 0x7f7b, - 0x7f7c, 0x7f7d, 0x7f7f, 0x7f80, 0x7f82, 0x7f83, 0x7f84, 0x7f85, - 0x7f86, 0x7f87, 0x7f88, 0x7f89, 0x7f8b, 0x7f8d, 0x7f8f, 0x7f90, - 0x7f91, 0x7f92, 0x7f93, 0x7f95, 0x7f96, 0x7f97, 0x7f98, 0x7f99, - 0x7f9b, 0x7f9c, 0x7fa0, 0x7fa2, 0x7fa3, 0x7fa5, 0x7fa6, 0x7fa8, - 0x7fa9, 0x7faa, 0x7fab, 0x7fac, 0x7fad, 0x7fae, 0x7fb1, 0x003f, - 0x7fb3, 0x7fb4, 0x7fb5, 0x7fb6, 0x7fb7, 0x7fba, 0x7fbb, 0x7fbe, - 0x7fc0, 0x7fc2, 0x7fc3, 0x7fc4, 0x7fc6, 0x7fc7, 0x7fc8, 0x7fc9, - 0x7fcb, 0x7fcd, 0x7fcf, 0x7fd0, 0x7fd1, 0x7fd2, 0x7fd3, 0x7fd6, - 0x7fd7, 0x7fd9, 0x7fda, 0x7fdb, 0x7fdc, 0x7fdd, 0x7fde, 0x7fe2, - 0x7fe3, 0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, - 0x54e9, 0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, - 0x6d9f, 0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, - 0x7cae, 0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, - 0x667e, 0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, - 0x5be5, 0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, - 0x5217, 0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, - 0x9716, 0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, - 0x62ce, 0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, - 0x51cc, 0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, - 0x7409, 0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, - 0x67f3, 0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf, 0x003f, - /* lead byte c2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7fe4, 0x7fe7, 0x7fe8, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fef, - 0x7ff2, 0x7ff4, 0x7ff5, 0x7ff6, 0x7ff7, 0x7ff8, 0x7ff9, 0x7ffa, - 0x7ffd, 0x7ffe, 0x7fff, 0x8002, 0x8007, 0x8008, 0x8009, 0x800a, - 0x800e, 0x800f, 0x8011, 0x8013, 0x801a, 0x801b, 0x801d, 0x801e, - 0x801f, 0x8021, 0x8023, 0x8024, 0x802b, 0x802c, 0x802d, 0x802e, - 0x802f, 0x8030, 0x8032, 0x8034, 0x8039, 0x803a, 0x803c, 0x803e, - 0x8040, 0x8041, 0x8044, 0x8045, 0x8047, 0x8048, 0x8049, 0x804e, - 0x804f, 0x8050, 0x8051, 0x8053, 0x8055, 0x8056, 0x8057, 0x003f, - 0x8059, 0x805b, 0x805c, 0x805d, 0x805e, 0x805f, 0x8060, 0x8061, - 0x8062, 0x8063, 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806b, - 0x806c, 0x806d, 0x806e, 0x806f, 0x8070, 0x8072, 0x8073, 0x8074, - 0x8075, 0x8076, 0x8077, 0x8078, 0x8079, 0x807a, 0x807b, 0x807c, - 0x807d, 0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, - 0x7bd3, 0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, - 0x63b3, 0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, - 0x8d42, 0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, - 0x5415, 0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, - 0x6c2f, 0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, - 0x6ee6, 0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, - 0x4ed1, 0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, - 0x9523, 0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, - 0x5988, 0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, - 0x5417, 0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, - 0x9992, 0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b, 0x003f, - /* lead byte c3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x807e, 0x8081, 0x8082, 0x8085, 0x8088, 0x808a, 0x808d, 0x808e, - 0x808f, 0x8090, 0x8091, 0x8092, 0x8094, 0x8095, 0x8097, 0x8099, - 0x809e, 0x80a3, 0x80a6, 0x80a7, 0x80a8, 0x80ac, 0x80b0, 0x80b3, - 0x80b5, 0x80b6, 0x80b8, 0x80b9, 0x80bb, 0x80c5, 0x80c7, 0x80c8, - 0x80c9, 0x80ca, 0x80cb, 0x80cf, 0x80d0, 0x80d1, 0x80d2, 0x80d3, - 0x80d4, 0x80d5, 0x80d8, 0x80df, 0x80e0, 0x80e2, 0x80e3, 0x80e6, - 0x80ee, 0x80f5, 0x80f7, 0x80f9, 0x80fb, 0x80fe, 0x80ff, 0x8100, - 0x8101, 0x8103, 0x8104, 0x8105, 0x8107, 0x8108, 0x810b, 0x003f, - 0x810c, 0x8115, 0x8117, 0x8119, 0x811b, 0x811c, 0x811d, 0x811f, - 0x8120, 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127, - 0x8128, 0x8129, 0x812a, 0x812b, 0x812d, 0x812e, 0x8130, 0x8133, - 0x8134, 0x8135, 0x8137, 0x8139, 0x813a, 0x813b, 0x813c, 0x813d, - 0x813f, 0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, - 0x732b, 0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, - 0x5192, 0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, - 0x9176, 0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, - 0x7f8e, 0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, - 0x840c, 0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, - 0x772f, 0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, - 0x79d8, 0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, - 0x7ef5, 0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, - 0x63cf, 0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, - 0x706d, 0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, - 0x879f, 0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478, 0x003f, - /* lead byte c4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147, 0x8149, - 0x814d, 0x814e, 0x814f, 0x8152, 0x8156, 0x8157, 0x8158, 0x815b, - 0x815c, 0x815d, 0x815e, 0x815f, 0x8161, 0x8162, 0x8163, 0x8164, - 0x8166, 0x8168, 0x816a, 0x816b, 0x816c, 0x816f, 0x8172, 0x8173, - 0x8175, 0x8176, 0x8177, 0x8178, 0x8181, 0x8183, 0x8184, 0x8185, - 0x8186, 0x8187, 0x8189, 0x818b, 0x818c, 0x818d, 0x818e, 0x8190, - 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8199, 0x819a, - 0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2, 0x81a4, 0x81a5, 0x003f, - 0x81a7, 0x81a9, 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, - 0x81b1, 0x81b2, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, - 0x81bc, 0x81bd, 0x81be, 0x81bf, 0x81c4, 0x81c5, 0x81c7, 0x81c8, - 0x81c9, 0x81cb, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2, - 0x81d3, 0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, - 0x62b9, 0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, - 0x964c, 0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, - 0x6bcd, 0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, - 0x7766, 0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, - 0x5a1c, 0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, - 0x7537, 0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, - 0x5462, 0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, - 0x6ce5, 0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, - 0x852b, 0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, - 0x917f, 0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, - 0x954d, 0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81, 0x003f, - /* lead byte c5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da, 0x81db, - 0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2, 0x81e4, - 0x81e5, 0x81e6, 0x81e8, 0x81e9, 0x81eb, 0x81ee, 0x81ef, 0x81f0, - 0x81f1, 0x81f2, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa, - 0x81fd, 0x81ff, 0x8203, 0x8207, 0x8208, 0x8209, 0x820a, 0x820b, - 0x820e, 0x820f, 0x8211, 0x8213, 0x8215, 0x8216, 0x8217, 0x8218, - 0x8219, 0x821a, 0x821d, 0x8220, 0x8224, 0x8225, 0x8226, 0x8227, - 0x8229, 0x822e, 0x8232, 0x823a, 0x823c, 0x823d, 0x823f, 0x003f, - 0x8240, 0x8241, 0x8242, 0x8243, 0x8245, 0x8246, 0x8248, 0x824a, - 0x824c, 0x824d, 0x824e, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, - 0x8255, 0x8256, 0x8257, 0x8259, 0x825b, 0x825c, 0x825d, 0x825e, - 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, - 0x8269, 0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, - 0x6d53, 0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, - 0x8650, 0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, - 0x9e25, 0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, - 0x722c, 0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, - 0x6e43, 0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, - 0x5224, 0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, - 0x5486, 0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, - 0x57f9, 0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, - 0x76c6, 0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, - 0x787c, 0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, - 0x7812, 0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7, 0x003f, - /* lead byte c6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x826a, 0x826b, 0x826c, 0x826d, 0x8271, 0x8275, 0x8276, 0x8277, - 0x8278, 0x827b, 0x827c, 0x8280, 0x8281, 0x8283, 0x8285, 0x8286, - 0x8287, 0x8289, 0x828c, 0x8290, 0x8293, 0x8294, 0x8295, 0x8296, - 0x829a, 0x829b, 0x829e, 0x82a0, 0x82a2, 0x82a3, 0x82a7, 0x82b2, - 0x82b5, 0x82b6, 0x82ba, 0x82bb, 0x82bc, 0x82bf, 0x82c0, 0x82c2, - 0x82c3, 0x82c5, 0x82c6, 0x82c9, 0x82d0, 0x82d6, 0x82d9, 0x82da, - 0x82dd, 0x82e2, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82ec, 0x82ed, - 0x82ee, 0x82f0, 0x82f2, 0x82f3, 0x82f5, 0x82f6, 0x82f8, 0x003f, - 0x82fa, 0x82fc, 0x82fd, 0x82fe, 0x82ff, 0x8300, 0x830a, 0x830b, - 0x830d, 0x8310, 0x8312, 0x8313, 0x8316, 0x8318, 0x8319, 0x831d, - 0x831e, 0x831f, 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, - 0x8326, 0x8329, 0x832a, 0x832e, 0x8330, 0x8332, 0x8337, 0x833b, - 0x833d, 0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, - 0x5c41, 0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, - 0x74e2, 0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, - 0x8058, 0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, - 0x8bc4, 0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, - 0x8feb, 0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, - 0x83e9, 0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, - 0x66dd, 0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, - 0x51c4, 0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, - 0x7566, 0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, - 0x8d77, 0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, - 0x6c14, 0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390, 0x003f, - /* lead byte c7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x833e, 0x833f, 0x8341, 0x8342, 0x8344, 0x8345, 0x8348, 0x834a, - 0x834b, 0x834c, 0x834d, 0x834e, 0x8353, 0x8355, 0x8356, 0x8357, - 0x8358, 0x8359, 0x835d, 0x8362, 0x8370, 0x8371, 0x8372, 0x8373, - 0x8374, 0x8375, 0x8376, 0x8379, 0x837a, 0x837e, 0x837f, 0x8380, - 0x8381, 0x8382, 0x8383, 0x8384, 0x8387, 0x8388, 0x838a, 0x838b, - 0x838c, 0x838d, 0x838f, 0x8390, 0x8391, 0x8394, 0x8395, 0x8396, - 0x8397, 0x8399, 0x839a, 0x839d, 0x839f, 0x83a1, 0x83a2, 0x83a3, - 0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83ac, 0x83ad, 0x83ae, 0x003f, - 0x83af, 0x83b5, 0x83bb, 0x83be, 0x83bf, 0x83c2, 0x83c3, 0x83c4, - 0x83c6, 0x83c8, 0x83c9, 0x83cb, 0x83cd, 0x83ce, 0x83d0, 0x83d1, - 0x83d2, 0x83d3, 0x83d5, 0x83d7, 0x83d9, 0x83da, 0x83db, 0x83de, - 0x83e2, 0x83e3, 0x83e4, 0x83e6, 0x83e7, 0x83e8, 0x83eb, 0x83ec, - 0x83ed, 0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, - 0x8fc1, 0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, - 0x524d, 0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, - 0x6b49, 0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, - 0x62a2, 0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, - 0x4fa8, 0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, - 0x5207, 0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, - 0x79e6, 0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, - 0x9752, 0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, - 0x6c30, 0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, - 0x4e18, 0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, - 0x533a, 0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20, 0x003f, - /* lead byte c8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x83ee, 0x83ef, 0x83f3, 0x83f4, 0x83f5, 0x83f6, 0x83f7, 0x83fa, - 0x83fb, 0x83fc, 0x83fe, 0x83ff, 0x8400, 0x8402, 0x8405, 0x8407, - 0x8408, 0x8409, 0x840a, 0x8410, 0x8412, 0x8413, 0x8414, 0x8415, - 0x8416, 0x8417, 0x8419, 0x841a, 0x841b, 0x841e, 0x841f, 0x8420, - 0x8421, 0x8422, 0x8423, 0x8429, 0x842a, 0x842b, 0x842c, 0x842d, - 0x842e, 0x842f, 0x8430, 0x8432, 0x8433, 0x8434, 0x8435, 0x8436, - 0x8437, 0x8439, 0x843a, 0x843b, 0x843e, 0x843f, 0x8440, 0x8441, - 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0x003f, - 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f, 0x8450, 0x8452, - 0x8453, 0x8454, 0x8455, 0x8456, 0x8458, 0x845d, 0x845e, 0x845f, - 0x8460, 0x8462, 0x8464, 0x8465, 0x8466, 0x8467, 0x8468, 0x846a, - 0x846e, 0x846f, 0x8470, 0x8472, 0x8474, 0x8477, 0x8479, 0x847b, - 0x847c, 0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, - 0x6743, 0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, - 0x529d, 0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, - 0x96c0, 0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, - 0x58e4, 0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, - 0x70ed, 0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, - 0x5203, 0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, - 0x84c9, 0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, - 0x63c9, 0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, - 0x8fb1, 0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, - 0x745e, 0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, - 0x8428, 0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1, 0x003f, - /* lead byte c9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x847d, 0x847e, 0x847f, 0x8480, 0x8481, 0x8483, 0x8484, 0x8485, - 0x8486, 0x848a, 0x848d, 0x848f, 0x8490, 0x8491, 0x8492, 0x8493, - 0x8494, 0x8495, 0x8496, 0x8498, 0x849a, 0x849b, 0x849d, 0x849e, - 0x849f, 0x84a0, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, - 0x84a8, 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84b0, - 0x84b1, 0x84b3, 0x84b5, 0x84b6, 0x84b7, 0x84bb, 0x84bc, 0x84be, - 0x84c0, 0x84c2, 0x84c3, 0x84c5, 0x84c6, 0x84c7, 0x84c8, 0x84cb, - 0x84cc, 0x84ce, 0x84cf, 0x84d2, 0x84d4, 0x84d5, 0x84d7, 0x003f, - 0x84d8, 0x84d9, 0x84da, 0x84db, 0x84dc, 0x84de, 0x84e1, 0x84e2, - 0x84e4, 0x84e7, 0x84e8, 0x84e9, 0x84ea, 0x84eb, 0x84ed, 0x84ee, - 0x84ef, 0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, - 0x84f8, 0x84f9, 0x84fa, 0x84fb, 0x84fd, 0x84fe, 0x8500, 0x8501, - 0x8502, 0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, - 0x626b, 0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, - 0x7802, 0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, - 0x7b5b, 0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, - 0x886b, 0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, - 0x6247, 0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, - 0x5c1a, 0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, - 0x97f6, 0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, - 0x820c, 0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, - 0x8bbe, 0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, - 0x7ec5, 0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, - 0x6e17, 0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3, 0x003f, - /* lead byte ca */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8503, 0x8504, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509, 0x850a, - 0x850b, 0x850d, 0x850e, 0x850f, 0x8510, 0x8512, 0x8514, 0x8515, - 0x8516, 0x8518, 0x8519, 0x851b, 0x851c, 0x851d, 0x851e, 0x8520, - 0x8522, 0x8523, 0x8524, 0x8525, 0x8526, 0x8527, 0x8528, 0x8529, - 0x852a, 0x852d, 0x852e, 0x852f, 0x8530, 0x8531, 0x8532, 0x8533, - 0x8534, 0x8535, 0x8536, 0x853e, 0x853f, 0x8540, 0x8541, 0x8542, - 0x8544, 0x8545, 0x8546, 0x8547, 0x854b, 0x854c, 0x854d, 0x854e, - 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x003f, - 0x8557, 0x8558, 0x855a, 0x855b, 0x855c, 0x855d, 0x855f, 0x8560, - 0x8561, 0x8562, 0x8563, 0x8565, 0x8566, 0x8567, 0x8569, 0x856a, - 0x856b, 0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571, 0x8573, - 0x8575, 0x8576, 0x8577, 0x8578, 0x857c, 0x857d, 0x857f, 0x8580, - 0x8581, 0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, - 0x72ee, 0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, - 0x62fe, 0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, - 0x77e2, 0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, - 0x4e16, 0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, - 0x55dc, 0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, - 0x5e02, 0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, - 0x5b88, 0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, - 0x67a2, 0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, - 0x758f, 0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, - 0x7f72, 0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, - 0x675f, 0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31, 0x003f, - /* lead byte cb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8582, 0x8583, 0x8586, 0x8588, 0x8589, 0x858a, 0x858b, 0x858c, - 0x858d, 0x858e, 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595, - 0x8596, 0x8597, 0x8598, 0x8599, 0x859a, 0x859d, 0x859e, 0x859f, - 0x85a0, 0x85a1, 0x85a2, 0x85a3, 0x85a5, 0x85a6, 0x85a7, 0x85a9, - 0x85ab, 0x85ac, 0x85ad, 0x85b1, 0x85b2, 0x85b3, 0x85b4, 0x85b5, - 0x85b6, 0x85b8, 0x85ba, 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf, - 0x85c0, 0x85c2, 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8, - 0x85ca, 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85d1, 0x85d2, 0x003f, - 0x85d4, 0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da, 0x85db, 0x85dd, - 0x85de, 0x85df, 0x85e0, 0x85e1, 0x85e2, 0x85e3, 0x85e5, 0x85e6, - 0x85e7, 0x85e8, 0x85ea, 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, - 0x85f0, 0x85f1, 0x85f2, 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, - 0x85f8, 0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, - 0x6813, 0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, - 0x7a0e, 0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, - 0x70c1, 0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, - 0x6b7b, 0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, - 0x5df3, 0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, - 0x8bf5, 0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, - 0x7d20, 0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, - 0x8083, 0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, - 0x9ad3, 0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, - 0x635f, 0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, - 0x9501, 0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854, 0x003f, - /* lead byte cc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x85f9, 0x85fa, 0x85fc, 0x85fd, 0x85fe, 0x8600, 0x8601, 0x8602, - 0x8603, 0x8604, 0x8606, 0x8607, 0x8608, 0x8609, 0x860a, 0x860b, - 0x860c, 0x860d, 0x860e, 0x860f, 0x8610, 0x8612, 0x8613, 0x8614, - 0x8615, 0x8617, 0x8618, 0x8619, 0x861a, 0x861b, 0x861c, 0x861d, - 0x861e, 0x861f, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625, - 0x8626, 0x8628, 0x862a, 0x862b, 0x862c, 0x862d, 0x862e, 0x862f, - 0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637, - 0x8639, 0x863a, 0x863b, 0x863d, 0x863e, 0x863f, 0x8640, 0x003f, - 0x8641, 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, - 0x8649, 0x864a, 0x864b, 0x864c, 0x8652, 0x8653, 0x8655, 0x8656, - 0x8657, 0x8658, 0x8659, 0x865b, 0x865c, 0x865d, 0x865f, 0x8660, - 0x8661, 0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, - 0x866a, 0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, - 0x53f0, 0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, - 0x8d2a, 0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, - 0x8c08, 0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, - 0x6c64, 0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, - 0x5018, 0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, - 0x7ee6, 0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, - 0x7279, 0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, - 0x9511, 0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, - 0x60d5, 0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, - 0x751c, 0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, - 0x8df3, 0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3, 0x003f, - /* lead byte cd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x866d, 0x866f, 0x8670, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, - 0x8677, 0x8678, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688, - 0x8689, 0x868e, 0x868f, 0x8690, 0x8691, 0x8692, 0x8694, 0x8696, - 0x8697, 0x8698, 0x8699, 0x869a, 0x869b, 0x869e, 0x869f, 0x86a0, - 0x86a1, 0x86a2, 0x86a5, 0x86a6, 0x86ab, 0x86ad, 0x86ae, 0x86b2, - 0x86b3, 0x86b7, 0x86b8, 0x86b9, 0x86bb, 0x86bc, 0x86bd, 0x86be, - 0x86bf, 0x86c1, 0x86c2, 0x86c3, 0x86c5, 0x86c8, 0x86cc, 0x86cd, - 0x86d2, 0x86d3, 0x86d5, 0x86d6, 0x86d7, 0x86da, 0x86dc, 0x003f, - 0x86dd, 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e5, 0x86e6, 0x86e7, - 0x86e8, 0x86ea, 0x86eb, 0x86ec, 0x86ef, 0x86f5, 0x86f6, 0x86f7, - 0x86fa, 0x86fb, 0x86fc, 0x86fd, 0x86ff, 0x8701, 0x8704, 0x8705, - 0x8706, 0x870b, 0x870c, 0x870e, 0x870f, 0x8710, 0x8711, 0x8714, - 0x8716, 0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, - 0x901a, 0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, - 0x6876, 0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, - 0x900f, 0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, - 0x5c60, 0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, - 0x817f, 0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, - 0x6258, 0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, - 0x62d3, 0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, - 0x889c, 0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, - 0x4e38, 0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, - 0x5b9b, 0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, - 0x7f51, 0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01, 0x003f, - /* lead byte ce */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8719, 0x871b, 0x871d, 0x871f, 0x8720, 0x8724, 0x8726, 0x8727, - 0x8728, 0x872a, 0x872b, 0x872c, 0x872d, 0x872f, 0x8730, 0x8732, - 0x8733, 0x8735, 0x8736, 0x8738, 0x8739, 0x873a, 0x873c, 0x873d, - 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x874a, - 0x874b, 0x874d, 0x874f, 0x8750, 0x8751, 0x8752, 0x8754, 0x8755, - 0x8756, 0x8758, 0x875a, 0x875b, 0x875c, 0x875d, 0x875e, 0x875f, - 0x8761, 0x8762, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, - 0x876c, 0x876d, 0x876f, 0x8771, 0x8772, 0x8773, 0x8775, 0x003f, - 0x8777, 0x8778, 0x8779, 0x877a, 0x877f, 0x8780, 0x8781, 0x8784, - 0x8786, 0x8787, 0x8789, 0x878a, 0x878c, 0x878e, 0x878f, 0x8790, - 0x8791, 0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799, 0x879a, - 0x879b, 0x879c, 0x879d, 0x879e, 0x87a0, 0x87a1, 0x87a2, 0x87a3, - 0x87a4, 0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, - 0x552f, 0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, - 0x4f1f, 0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, - 0x80c3, 0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, - 0x536b, 0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, - 0x7a33, 0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, - 0x6da1, 0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, - 0x545c, 0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, - 0x68a7, 0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, - 0x821e, 0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, - 0x52ff, 0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, - 0x7852, 0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a, 0x003f, - /* lead byte cf */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x87a5, 0x87a6, 0x87a7, 0x87a9, 0x87aa, 0x87ae, 0x87b0, 0x87b1, - 0x87b2, 0x87b4, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87bb, 0x87bc, - 0x87be, 0x87bf, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c7, - 0x87c8, 0x87c9, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d4, - 0x87d5, 0x87d6, 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87dc, 0x87dd, - 0x87de, 0x87df, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e6, 0x87e7, - 0x87e8, 0x87e9, 0x87eb, 0x87ec, 0x87ed, 0x87ef, 0x87f0, 0x87f1, - 0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, 0x87f7, 0x87f8, 0x003f, - 0x87fa, 0x87fb, 0x87fc, 0x87fd, 0x87ff, 0x8800, 0x8801, 0x8802, - 0x8804, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, 0x880b, 0x880c, - 0x880d, 0x880e, 0x880f, 0x8810, 0x8811, 0x8812, 0x8814, 0x8817, - 0x8818, 0x8819, 0x881a, 0x881c, 0x881d, 0x881e, 0x881f, 0x8820, - 0x8823, 0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, - 0x7184, 0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, - 0x4e60, 0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, - 0x7ec6, 0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, - 0x4fa0, 0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, - 0x5148, 0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, - 0x95f2, 0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, - 0x53bf, 0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, - 0x76f8, 0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, - 0x7fd4, 0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, - 0x6a61, 0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, - 0x54ee, 0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653, 0x003f, - /* lead byte d0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8824, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, 0x882a, 0x882b, - 0x882c, 0x882d, 0x882e, 0x882f, 0x8830, 0x8831, 0x8833, 0x8834, - 0x8835, 0x8836, 0x8837, 0x8838, 0x883a, 0x883b, 0x883d, 0x883e, - 0x883f, 0x8841, 0x8842, 0x8843, 0x8846, 0x8847, 0x8848, 0x8849, - 0x884a, 0x884b, 0x884e, 0x884f, 0x8850, 0x8851, 0x8852, 0x8853, - 0x8855, 0x8856, 0x8858, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e, - 0x885f, 0x8860, 0x8866, 0x8867, 0x886a, 0x886d, 0x886f, 0x8871, - 0x8873, 0x8874, 0x8875, 0x8876, 0x8878, 0x8879, 0x887a, 0x003f, - 0x887b, 0x887c, 0x8880, 0x8883, 0x8886, 0x8887, 0x8889, 0x888a, - 0x888c, 0x888e, 0x888f, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, - 0x8897, 0x8898, 0x8899, 0x889a, 0x889b, 0x889d, 0x889e, 0x889f, - 0x88a0, 0x88a1, 0x88a3, 0x88a5, 0x88a6, 0x88a7, 0x88a8, 0x88a9, - 0x88aa, 0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, - 0x6954, 0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, - 0x90aa, 0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, - 0x61c8, 0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, - 0x6b23, 0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, - 0x8165, 0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, - 0x884c, 0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, - 0x80f8, 0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, - 0x673d, 0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, - 0x9700, 0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, - 0x53d9, 0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, - 0x7eed, 0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384, 0x003f, - /* lead byte d1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x88ac, 0x88ae, 0x88af, 0x88b0, 0x88b2, 0x88b3, 0x88b4, 0x88b5, - 0x88b6, 0x88b8, 0x88b9, 0x88ba, 0x88bb, 0x88bd, 0x88be, 0x88bf, - 0x88c0, 0x88c3, 0x88c4, 0x88c7, 0x88c8, 0x88ca, 0x88cb, 0x88cc, - 0x88cd, 0x88cf, 0x88d0, 0x88d1, 0x88d3, 0x88d6, 0x88d7, 0x88da, - 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88e0, 0x88e1, 0x88e6, 0x88e7, - 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f2, - 0x88f5, 0x88f6, 0x88f7, 0x88fa, 0x88fb, 0x88fd, 0x88ff, 0x8900, - 0x8901, 0x8903, 0x8904, 0x8905, 0x8906, 0x8907, 0x8908, 0x003f, - 0x8909, 0x890b, 0x890c, 0x890d, 0x890e, 0x890f, 0x8911, 0x8914, - 0x8915, 0x8916, 0x8917, 0x8918, 0x891c, 0x891d, 0x891e, 0x891f, - 0x8920, 0x8922, 0x8923, 0x8924, 0x8926, 0x8927, 0x8928, 0x8929, - 0x892c, 0x892d, 0x892e, 0x892f, 0x8931, 0x8932, 0x8933, 0x8935, - 0x8937, 0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, - 0x7a74, 0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, - 0x5bfb, 0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, - 0x8fc5, 0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, - 0x7259, 0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, - 0x8bb6, 0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, - 0x7814, 0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, - 0x6cbf, 0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, - 0x71d5, 0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, - 0x8c1a, 0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, - 0x4f6f, 0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, - 0x517b, 0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476, 0x003f, - /* lead byte d2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8938, 0x8939, 0x893a, 0x893b, 0x893c, 0x893d, 0x893e, 0x893f, - 0x8940, 0x8942, 0x8943, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, - 0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, - 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, - 0x895a, 0x895b, 0x895c, 0x895d, 0x8960, 0x8961, 0x8962, 0x8963, - 0x8964, 0x8965, 0x8967, 0x8968, 0x8969, 0x896a, 0x896b, 0x896c, - 0x896d, 0x896e, 0x896f, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, - 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897a, 0x897c, 0x003f, - 0x897d, 0x897e, 0x8980, 0x8982, 0x8984, 0x8985, 0x8987, 0x8988, - 0x8989, 0x898a, 0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, - 0x8991, 0x8992, 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, - 0x8999, 0x899a, 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, - 0x89a1, 0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, - 0x8200, 0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, - 0x91ce, 0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, - 0x814b, 0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, - 0x4f9d, 0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, - 0x80f0, 0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, - 0x501a, 0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, - 0x9091, 0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, - 0x4ea6, 0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, - 0x8be3, 0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, - 0x8335, 0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, - 0x94f6, 0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690, 0x003f, - /* lead byte d3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x89a2, 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9, - 0x89aa, 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1, - 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9, - 0x89ba, 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c3, - 0x89cd, 0x89d3, 0x89d4, 0x89d5, 0x89d7, 0x89d8, 0x89d9, 0x89db, - 0x89dd, 0x89df, 0x89e0, 0x89e1, 0x89e2, 0x89e4, 0x89e7, 0x89e8, - 0x89e9, 0x89ea, 0x89ec, 0x89ed, 0x89ee, 0x89f0, 0x89f1, 0x89f2, - 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa, 0x003f, - 0x89fb, 0x89fc, 0x89fd, 0x89fe, 0x89ff, 0x8a01, 0x8a02, 0x8a03, - 0x8a04, 0x8a05, 0x8a06, 0x8a08, 0x8a09, 0x8a0a, 0x8a0b, 0x8a0c, - 0x8a0d, 0x8a0e, 0x8a0f, 0x8a10, 0x8a11, 0x8a12, 0x8a13, 0x8a14, - 0x8a15, 0x8a16, 0x8a17, 0x8a18, 0x8a19, 0x8a1a, 0x8a1b, 0x8a1c, - 0x8a1d, 0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, - 0x83b9, 0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, - 0x5f71, 0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, - 0x75c8, 0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, - 0x6c38, 0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, - 0x5c24, 0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, - 0x6709, 0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, - 0x8fc2, 0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, - 0x4f59, 0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, - 0x4e88, 0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, - 0x7fbd, 0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, - 0x5cea, 0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89, 0x003f, - /* lead byte d4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8a1e, 0x8a1f, 0x8a20, 0x8a21, 0x8a22, 0x8a23, 0x8a24, 0x8a25, - 0x8a26, 0x8a27, 0x8a28, 0x8a29, 0x8a2a, 0x8a2b, 0x8a2c, 0x8a2d, - 0x8a2e, 0x8a2f, 0x8a30, 0x8a31, 0x8a32, 0x8a33, 0x8a34, 0x8a35, - 0x8a36, 0x8a37, 0x8a38, 0x8a39, 0x8a3a, 0x8a3b, 0x8a3c, 0x8a3d, - 0x8a3f, 0x8a40, 0x8a41, 0x8a42, 0x8a43, 0x8a44, 0x8a45, 0x8a46, - 0x8a47, 0x8a49, 0x8a4a, 0x8a4b, 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f, - 0x8a50, 0x8a51, 0x8a52, 0x8a53, 0x8a54, 0x8a55, 0x8a56, 0x8a57, - 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x003f, - 0x8a5f, 0x8a60, 0x8a61, 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0x8a66, - 0x8a67, 0x8a68, 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, - 0x8a6f, 0x8a70, 0x8a71, 0x8a72, 0x8a73, 0x8a74, 0x8a75, 0x8a76, - 0x8a77, 0x8a78, 0x8a7a, 0x8a7b, 0x8a7c, 0x8a7d, 0x8a7e, 0x8a7f, - 0x8a80, 0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, - 0x6e0a, 0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, - 0x56ed, 0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, - 0x613f, 0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, - 0x5cb3, 0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, - 0x5300, 0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, - 0x5b55, 0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, - 0x8f7d, 0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, - 0x810f, 0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, - 0x6fa1, 0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, - 0x8d23, 0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, - 0x66fe, 0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67, 0x003f, - /* lead byte d5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8a81, 0x8a82, 0x8a83, 0x8a84, 0x8a85, 0x8a86, 0x8a87, 0x8a88, - 0x8a8b, 0x8a8c, 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92, - 0x8a94, 0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, - 0x8a9c, 0x8a9d, 0x8a9e, 0x8a9f, 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3, - 0x8aa4, 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, - 0x8aac, 0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, - 0x8ab4, 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb, - 0x8abc, 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x003f, - 0x8ac3, 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, - 0x8acb, 0x8acc, 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, - 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, - 0x8adb, 0x8adc, 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, - 0x8ae3, 0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, - 0x70b8, 0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, - 0x77bb, 0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, - 0x5d2d, 0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, - 0x7efd, 0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, - 0x6756, 0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, - 0x62db, 0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, - 0x8087, 0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, - 0x9517, 0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, - 0x7827, 0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, - 0x9707, 0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, - 0x72f0, 0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f, 0x003f, - /* lead byte d6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, - 0x8aec, 0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3, - 0x8af4, 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb, - 0x8afc, 0x8afd, 0x8afe, 0x8aff, 0x8b00, 0x8b01, 0x8b02, 0x8b03, - 0x8b04, 0x8b05, 0x8b06, 0x8b08, 0x8b09, 0x8b0a, 0x8b0b, 0x8b0c, - 0x8b0d, 0x8b0e, 0x8b0f, 0x8b10, 0x8b11, 0x8b12, 0x8b13, 0x8b14, - 0x8b15, 0x8b16, 0x8b17, 0x8b18, 0x8b19, 0x8b1a, 0x8b1b, 0x8b1c, - 0x8b1d, 0x8b1e, 0x8b1f, 0x8b20, 0x8b21, 0x8b22, 0x8b23, 0x003f, - 0x8b24, 0x8b25, 0x8b27, 0x8b28, 0x8b29, 0x8b2a, 0x8b2b, 0x8b2c, - 0x8b2d, 0x8b2e, 0x8b2f, 0x8b30, 0x8b31, 0x8b32, 0x8b33, 0x8b34, - 0x8b35, 0x8b36, 0x8b37, 0x8b38, 0x8b39, 0x8b3a, 0x8b3b, 0x8b3c, - 0x8b3d, 0x8b3e, 0x8b3f, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, - 0x8b45, 0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, - 0x5431, 0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, - 0x804c, 0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, - 0x6307, 0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, - 0x63b7, 0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, - 0x79e9, 0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, - 0x4e2d, 0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, - 0x91cd, 0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, - 0x7ca5, 0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, - 0x9aa4, 0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, - 0x9010, 0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, - 0x8457, 0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51, 0x003f, - /* lead byte d7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d, - 0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55, - 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, - 0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, - 0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6d, 0x8b6e, 0x8b6f, - 0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, - 0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, 0x8b7e, 0x8b7f, - 0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86, 0x003f, - 0x8b87, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e, - 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96, - 0x8b97, 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e, - 0x8b9f, 0x8bac, 0x8bb1, 0x8bbb, 0x8bc7, 0x8bd0, 0x8bea, 0x8c09, - 0x8c1e, 0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, - 0x4e13, 0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, - 0x88c5, 0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, - 0x8d58, 0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, - 0x684c, 0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, - 0x5179, 0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, - 0x4ed4, 0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, - 0x68d5, 0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, - 0x594f, 0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, - 0x963b, 0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, - 0x5c0a, 0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, - 0x5750, 0x5ea7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte d8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8c38, 0x8c39, 0x8c3a, 0x8c3b, 0x8c3c, 0x8c3d, 0x8c3e, 0x8c3f, - 0x8c40, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c48, 0x8c4a, 0x8c4b, - 0x8c4d, 0x8c4e, 0x8c4f, 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54, - 0x8c56, 0x8c57, 0x8c58, 0x8c59, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e, - 0x8c5f, 0x8c60, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, 0x8c68, - 0x8c69, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f, 0x8c70, 0x8c71, 0x8c72, - 0x8c74, 0x8c75, 0x8c76, 0x8c77, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e, - 0x8c7f, 0x8c80, 0x8c81, 0x8c83, 0x8c84, 0x8c86, 0x8c87, 0x003f, - 0x8c88, 0x8c8b, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, - 0x8c93, 0x8c95, 0x8c96, 0x8c97, 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, - 0x8c9d, 0x8c9e, 0x8c9f, 0x8ca0, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, - 0x8ca5, 0x8ca6, 0x8ca7, 0x8ca8, 0x8ca9, 0x8caa, 0x8cab, 0x8cac, - 0x8cad, 0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, - 0x4e98, 0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, - 0x5315, 0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, - 0x9997, 0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, - 0x4e69, 0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, - 0x539d, 0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, - 0x5326, 0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, - 0x520e, 0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, - 0x525c, 0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, - 0x7f54, 0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, - 0x4ede, 0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, - 0x4f09, 0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d, 0x003f, - /* lead byte d9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8cae, 0x8caf, 0x8cb0, 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5, - 0x8cb6, 0x8cb7, 0x8cb8, 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd, - 0x8cbe, 0x8cbf, 0x8cc0, 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, - 0x8cc6, 0x8cc7, 0x8cc8, 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, - 0x8cce, 0x8ccf, 0x8cd0, 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5, - 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, - 0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5, - 0x8ce6, 0x8ce7, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x003f, - 0x8ced, 0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, - 0x8cf5, 0x8cf6, 0x8cf7, 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, - 0x8cfd, 0x8cfe, 0x8cff, 0x8d00, 0x8d01, 0x8d02, 0x8d03, 0x8d04, - 0x8d05, 0x8d06, 0x8d07, 0x8d08, 0x8d09, 0x8d0a, 0x8d0b, 0x8d0c, - 0x8d0d, 0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, - 0x4f89, 0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, - 0x4f94, 0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, - 0x4fd1, 0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, - 0x502e, 0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, - 0x5043, 0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, - 0x50a9, 0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, - 0x5107, 0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, - 0x6c46, 0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, - 0x52f9, 0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, - 0x5156, 0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, - 0x5b34, 0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc, 0x003f, - /* lead byte da */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8d0e, 0x8d0f, 0x8d10, 0x8d11, 0x8d12, 0x8d13, 0x8d14, 0x8d15, - 0x8d16, 0x8d17, 0x8d18, 0x8d19, 0x8d1a, 0x8d1b, 0x8d1c, 0x8d20, - 0x8d51, 0x8d52, 0x8d57, 0x8d5f, 0x8d65, 0x8d68, 0x8d69, 0x8d6a, - 0x8d6c, 0x8d6e, 0x8d6f, 0x8d71, 0x8d72, 0x8d78, 0x8d79, 0x8d7a, - 0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d7f, 0x8d80, 0x8d82, 0x8d83, - 0x8d86, 0x8d87, 0x8d88, 0x8d89, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f, - 0x8d90, 0x8d92, 0x8d93, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99, - 0x8d9a, 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8da0, 0x8da1, 0x003f, - 0x8da2, 0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, - 0x8dab, 0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db2, 0x8db6, - 0x8db7, 0x8db9, 0x8dbb, 0x8dbd, 0x8dc0, 0x8dc1, 0x8dc2, 0x8dc5, - 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, 0x8dcd, 0x8dd0, 0x8dd2, 0x8dd3, - 0x8dd4, 0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, - 0x8baa, 0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, - 0x8bce, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, - 0x8bdf, 0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, - 0x8bf6, 0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, - 0x8c0c, 0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, - 0x8c1b, 0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, - 0x8c2a, 0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, - 0x5369, 0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, - 0x963c, 0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, - 0x9674, 0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, - 0x9099, 0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba, 0x003f, - /* lead byte db */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8dd5, 0x8dd8, 0x8dd9, 0x8ddc, 0x8de0, 0x8de1, 0x8de2, 0x8de5, - 0x8de6, 0x8de7, 0x8de9, 0x8ded, 0x8dee, 0x8df0, 0x8df1, 0x8df2, - 0x8df4, 0x8df6, 0x8dfc, 0x8dfe, 0x8dff, 0x8e00, 0x8e01, 0x8e02, - 0x8e03, 0x8e04, 0x8e06, 0x8e07, 0x8e08, 0x8e0b, 0x8e0d, 0x8e0e, - 0x8e10, 0x8e11, 0x8e12, 0x8e13, 0x8e15, 0x8e16, 0x8e17, 0x8e18, - 0x8e19, 0x8e1a, 0x8e1b, 0x8e1c, 0x8e20, 0x8e21, 0x8e24, 0x8e25, - 0x8e26, 0x8e27, 0x8e28, 0x8e2b, 0x8e2d, 0x8e30, 0x8e32, 0x8e33, - 0x8e34, 0x8e36, 0x8e37, 0x8e38, 0x8e3b, 0x8e3c, 0x8e3e, 0x003f, - 0x8e3f, 0x8e43, 0x8e45, 0x8e46, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, - 0x8e50, 0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e5a, - 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, - 0x8e63, 0x8e64, 0x8e65, 0x8e67, 0x8e68, 0x8e6a, 0x8e6b, 0x8e6e, - 0x8e71, 0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, - 0x90c7, 0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, - 0x90ef, 0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, - 0x9139, 0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, - 0x52be, 0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, - 0x5ef4, 0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, - 0x574c, 0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, - 0x572c, 0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, - 0x5742, 0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, - 0x576d, 0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, - 0x57a7, 0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, - 0x57d2, 0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd, 0x003f, - /* lead byte dc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8e73, 0x8e75, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, 0x8e7d, - 0x8e7e, 0x8e80, 0x8e82, 0x8e83, 0x8e84, 0x8e86, 0x8e88, 0x8e89, - 0x8e8a, 0x8e8b, 0x8e8c, 0x8e8d, 0x8e8e, 0x8e91, 0x8e92, 0x8e93, - 0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9d, - 0x8e9f, 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, - 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8ead, 0x8eae, 0x8eb0, 0x8eb1, - 0x8eb3, 0x8eb4, 0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8ebb, - 0x8ebc, 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x003f, - 0x8ec3, 0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, - 0x8ecb, 0x8ecc, 0x8ecd, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, - 0x8ed4, 0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, - 0x8edc, 0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, - 0x8ee4, 0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, - 0x5844, 0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, - 0x99a8, 0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, - 0x82a8, 0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, - 0x82be, 0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, - 0x82cb, 0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, - 0x82c4, 0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, - 0x8307, 0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, - 0x8311, 0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, - 0x8351, 0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, - 0x839b, 0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, - 0x8317, 0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365, 0x003f, - /* lead byte dd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, - 0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4, - 0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc, - 0x8efd, 0x8efe, 0x8eff, 0x8f00, 0x8f01, 0x8f02, 0x8f03, 0x8f04, - 0x8f05, 0x8f06, 0x8f07, 0x8f08, 0x8f09, 0x8f0a, 0x8f0b, 0x8f0c, - 0x8f0d, 0x8f0e, 0x8f0f, 0x8f10, 0x8f11, 0x8f12, 0x8f13, 0x8f14, - 0x8f15, 0x8f16, 0x8f17, 0x8f18, 0x8f19, 0x8f1a, 0x8f1b, 0x8f1c, - 0x8f1d, 0x8f1e, 0x8f1f, 0x8f20, 0x8f21, 0x8f22, 0x8f23, 0x003f, - 0x8f24, 0x8f25, 0x8f26, 0x8f27, 0x8f28, 0x8f29, 0x8f2a, 0x8f2b, - 0x8f2c, 0x8f2d, 0x8f2e, 0x8f2f, 0x8f30, 0x8f31, 0x8f32, 0x8f33, - 0x8f34, 0x8f35, 0x8f36, 0x8f37, 0x8f38, 0x8f39, 0x8f3a, 0x8f3b, - 0x8f3c, 0x8f3d, 0x8f3e, 0x8f3f, 0x8f40, 0x8f41, 0x8f42, 0x8f43, - 0x8f44, 0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, - 0x83b0, 0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, - 0x8385, 0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, - 0x839e, 0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, - 0x5807, 0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, - 0x8411, 0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, - 0x83ea, 0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, - 0x845a, 0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, - 0x843c, 0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, - 0x84c1, 0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, - 0x84ba, 0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, - 0x850c, 0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a, 0x003f, - /* lead byte de */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8f45, 0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, - 0x8f4d, 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54, - 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c, - 0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64, - 0x8f65, 0x8f6a, 0x8f80, 0x8f8c, 0x8f92, 0x8f9d, 0x8fa0, 0x8fa1, - 0x8fa2, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fa7, 0x8faa, 0x8fac, 0x8fad, - 0x8fae, 0x8faf, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb7, 0x8fb8, - 0x8fba, 0x8fbb, 0x8fbc, 0x8fbf, 0x8fc0, 0x8fc3, 0x8fc6, 0x003f, - 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fcf, 0x8fd2, 0x8fd6, - 0x8fd7, 0x8fda, 0x8fe0, 0x8fe1, 0x8fe3, 0x8fe7, 0x8fec, 0x8fef, - 0x8ff1, 0x8ff2, 0x8ff4, 0x8ff5, 0x8ff6, 0x8ffa, 0x8ffb, 0x8ffc, - 0x8ffe, 0x8fff, 0x9007, 0x9008, 0x900c, 0x900e, 0x9013, 0x9015, - 0x9018, 0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, - 0x8564, 0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, - 0x85a8, 0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, - 0x85b7, 0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, - 0x8629, 0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, - 0x5955, 0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, - 0x624c, 0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, - 0x6322, 0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, - 0x637a, 0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, - 0x63bc, 0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, - 0x6452, 0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, - 0x640c, 0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496, 0x003f, - /* lead byte df */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9019, 0x901c, 0x9023, 0x9024, 0x9025, 0x9027, 0x9028, 0x9029, - 0x902a, 0x902b, 0x902c, 0x9030, 0x9031, 0x9032, 0x9033, 0x9034, - 0x9037, 0x9039, 0x903a, 0x903d, 0x903f, 0x9040, 0x9043, 0x9045, - 0x9046, 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904e, 0x9054, - 0x9055, 0x9056, 0x9059, 0x905a, 0x905c, 0x905d, 0x905e, 0x905f, - 0x9060, 0x9061, 0x9064, 0x9066, 0x9067, 0x9069, 0x906a, 0x906b, - 0x906c, 0x906f, 0x9070, 0x9071, 0x9072, 0x9073, 0x9076, 0x9077, - 0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907e, 0x9081, 0x003f, - 0x9084, 0x9085, 0x9086, 0x9087, 0x9089, 0x908a, 0x908c, 0x908d, - 0x908e, 0x908f, 0x9090, 0x9092, 0x9094, 0x9096, 0x9098, 0x909a, - 0x909c, 0x909e, 0x909f, 0x90a0, 0x90a4, 0x90a5, 0x90a7, 0x90a8, - 0x90a9, 0x90ab, 0x90ad, 0x90b2, 0x90b7, 0x90bc, 0x90bd, 0x90bf, - 0x90c0, 0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, - 0x64d7, 0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, - 0x7519, 0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, - 0x5412, 0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, - 0x5443, 0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, - 0x5477, 0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, - 0x549d, 0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, - 0x54d3, 0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, - 0x54d9, 0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, - 0x54de, 0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, - 0x5523, 0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, - 0x5549, 0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c, 0x003f, - /* lead byte e0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x90c2, 0x90c3, 0x90c6, 0x90c8, 0x90c9, 0x90cb, 0x90cc, 0x90cd, - 0x90d2, 0x90d4, 0x90d5, 0x90d6, 0x90d8, 0x90d9, 0x90da, 0x90de, - 0x90df, 0x90e0, 0x90e3, 0x90e4, 0x90e5, 0x90e9, 0x90ea, 0x90ec, - 0x90ee, 0x90f0, 0x90f1, 0x90f2, 0x90f3, 0x90f5, 0x90f6, 0x90f7, - 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90ff, 0x9100, 0x9101, 0x9103, - 0x9105, 0x9106, 0x9107, 0x9108, 0x9109, 0x910a, 0x910b, 0x910c, - 0x910d, 0x910e, 0x910f, 0x9110, 0x9111, 0x9112, 0x9113, 0x9114, - 0x9115, 0x9116, 0x9117, 0x9118, 0x911a, 0x911b, 0x911c, 0x003f, - 0x911d, 0x911f, 0x9120, 0x9121, 0x9124, 0x9125, 0x9126, 0x9127, - 0x9128, 0x9129, 0x912a, 0x912b, 0x912c, 0x912d, 0x912e, 0x9130, - 0x9132, 0x9133, 0x9134, 0x9135, 0x9136, 0x9137, 0x9138, 0x913a, - 0x913b, 0x913c, 0x913d, 0x913e, 0x913f, 0x9140, 0x9141, 0x9142, - 0x9144, 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, - 0x555c, 0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, - 0x559f, 0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, - 0x5594, 0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, - 0x55ec, 0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, - 0x55f3, 0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, - 0x5608, 0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, - 0x562d, 0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, - 0x565c, 0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, - 0x567c, 0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, - 0x56f5, 0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, - 0x5e0f, 0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c, 0x003f, - /* lead byte e1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9145, 0x9147, 0x9148, 0x9151, 0x9153, 0x9154, 0x9155, 0x9156, - 0x9158, 0x9159, 0x915b, 0x915c, 0x915f, 0x9160, 0x9166, 0x9167, - 0x9168, 0x916b, 0x916d, 0x9173, 0x917a, 0x917b, 0x917c, 0x9180, - 0x9181, 0x9182, 0x9183, 0x9184, 0x9186, 0x9188, 0x918a, 0x918e, - 0x918f, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, - 0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0x91a4, 0x91a5, - 0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91ab, 0x91ac, 0x91b0, 0x91b1, - 0x91b2, 0x91b3, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91bb, 0x003f, - 0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0x91c2, 0x91c3, - 0x91c4, 0x91c5, 0x91c6, 0x91c8, 0x91cb, 0x91d0, 0x91d2, 0x91d3, - 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, 0x91db, - 0x91dd, 0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2, 0x91e3, 0x91e4, - 0x91e5, 0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, - 0x5c7a, 0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, - 0x5c9a, 0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, - 0x5ca3, 0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, - 0x5d02, 0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, - 0x5d1b, 0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, - 0x5d5d, 0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, - 0x5d9d, 0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, - 0x5f89, 0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, - 0x5fbc, 0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, - 0x72c3, 0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, - 0x72f2, 0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa, 0x003f, - /* lead byte e2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea, 0x91eb, 0x91ec, 0x91ed, - 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2, 0x91f3, 0x91f4, 0x91f5, - 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa, 0x91fb, 0x91fc, 0x91fd, - 0x91fe, 0x91ff, 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205, - 0x9206, 0x9207, 0x9208, 0x9209, 0x920a, 0x920b, 0x920c, 0x920d, - 0x920e, 0x920f, 0x9210, 0x9211, 0x9212, 0x9213, 0x9214, 0x9215, - 0x9216, 0x9217, 0x9218, 0x9219, 0x921a, 0x921b, 0x921c, 0x921d, - 0x921e, 0x921f, 0x9220, 0x9221, 0x9222, 0x9223, 0x9224, 0x003f, - 0x9225, 0x9226, 0x9227, 0x9228, 0x9229, 0x922a, 0x922b, 0x922c, - 0x922d, 0x922e, 0x922f, 0x9230, 0x9231, 0x9232, 0x9233, 0x9234, - 0x9235, 0x9236, 0x9237, 0x9238, 0x9239, 0x923a, 0x923b, 0x923c, - 0x923d, 0x923e, 0x923f, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, - 0x9245, 0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, - 0x7315, 0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, - 0x734d, 0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, - 0x98e7, 0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, - 0x996b, 0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, - 0x998a, 0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, - 0x5e91, 0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, - 0x5eb3, 0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, - 0x5fc4, 0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, - 0x5fe4, 0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, - 0x6035, 0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, - 0x603f, 0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042, 0x003f, - /* lead byte e3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, 0x924c, 0x924d, - 0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255, - 0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, 0x925c, 0x925d, - 0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, - 0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, 0x926c, 0x926d, - 0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273, 0x9275, 0x9276, - 0x9277, 0x9278, 0x9279, 0x927a, 0x927b, 0x927c, 0x927d, 0x927e, - 0x927f, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x003f, - 0x9286, 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, 0x928d, - 0x928f, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, - 0x9297, 0x9298, 0x9299, 0x929a, 0x929b, 0x929c, 0x929d, 0x929e, - 0x929f, 0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4, 0x92a5, 0x92a6, - 0x92a7, 0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, - 0x6092, 0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, - 0x60c6, 0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, - 0x6100, 0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, - 0x61b7, 0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, - 0x95f3, 0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, - 0x9608, 0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, - 0x9616, 0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, - 0x6c54, 0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, - 0x6c68, 0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, - 0x6cad, 0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, - 0x6cfa, 0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe, 0x003f, - /* lead byte e4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, 0x92ad, 0x92af, 0x92b0, - 0x92b1, 0x92b2, 0x92b3, 0x92b4, 0x92b5, 0x92b6, 0x92b7, 0x92b8, - 0x92b9, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92be, 0x92bf, 0x92c0, - 0x92c1, 0x92c2, 0x92c3, 0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c9, - 0x92ca, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1, - 0x92d2, 0x92d3, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9, - 0x92da, 0x92db, 0x92dc, 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1, - 0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x003f, - 0x92e9, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, - 0x92f1, 0x92f2, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7, 0x92f8, - 0x92f9, 0x92fa, 0x92fb, 0x92fc, 0x92fd, 0x92fe, 0x92ff, 0x9300, - 0x9301, 0x9302, 0x9303, 0x9304, 0x9305, 0x9306, 0x9307, 0x9308, - 0x9309, 0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, - 0x6d19, 0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, - 0x6d52, 0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, - 0x6d93, 0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, - 0x6dc5, 0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, - 0x6dd9, 0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, - 0x6e6b, 0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, - 0x6e44, 0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, - 0x6ea7, 0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, - 0x6ec2, 0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, - 0x6f2f, 0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, - 0x6f8d, 0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1, 0x003f, - /* lead byte e5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x930a, 0x930b, 0x930c, 0x930d, 0x930e, 0x930f, 0x9310, 0x9311, - 0x9312, 0x9313, 0x9314, 0x9315, 0x9316, 0x9317, 0x9318, 0x9319, - 0x931a, 0x931b, 0x931c, 0x931d, 0x931e, 0x931f, 0x9320, 0x9321, - 0x9322, 0x9323, 0x9324, 0x9325, 0x9326, 0x9327, 0x9328, 0x9329, - 0x932a, 0x932b, 0x932c, 0x932d, 0x932e, 0x932f, 0x9330, 0x9331, - 0x9332, 0x9333, 0x9334, 0x9335, 0x9336, 0x9337, 0x9338, 0x9339, - 0x933a, 0x933b, 0x933c, 0x933d, 0x933f, 0x9340, 0x9341, 0x9342, - 0x9343, 0x9344, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x003f, - 0x934a, 0x934b, 0x934c, 0x934d, 0x934e, 0x934f, 0x9350, 0x9351, - 0x9352, 0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, - 0x935a, 0x935b, 0x935c, 0x935d, 0x935e, 0x935f, 0x9360, 0x9361, - 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, - 0x936b, 0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, - 0x6fde, 0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, - 0x704f, 0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, - 0x752f, 0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, - 0x8b07, 0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, - 0x8fe6, 0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, - 0x900d, 0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, - 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, - 0x9074, 0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, - 0x5f56, 0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, - 0x5c66, 0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, - 0x5c6e, 0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3, 0x003f, - /* lead byte e6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x936c, 0x936d, 0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373, - 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b, - 0x937c, 0x937d, 0x937e, 0x937f, 0x9380, 0x9381, 0x9382, 0x9383, - 0x9384, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938a, 0x938b, - 0x938c, 0x938d, 0x938e, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, - 0x9395, 0x9396, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, - 0x939d, 0x939e, 0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4, - 0x93a5, 0x93a6, 0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x003f, - 0x93ac, 0x93ad, 0x93ae, 0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, - 0x93b4, 0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, - 0x93bc, 0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, - 0x93c4, 0x93c5, 0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93cb, 0x93cc, - 0x93cd, 0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, - 0x59af, 0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, - 0x59d8, 0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, - 0x5a13, 0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, - 0x80ec, 0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, - 0x5ad2, 0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, - 0x5ad8, 0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, - 0x5c15, 0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, - 0x9a75, 0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, - 0x9a85, 0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, - 0x9a9b, 0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, - 0x9aa7, 0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9, 0x003f, - /* lead byte e7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x93ce, 0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5, - 0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de, - 0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6, - 0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee, - 0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, - 0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe, - 0x93ff, 0x9400, 0x9401, 0x9402, 0x9403, 0x9404, 0x9405, 0x9406, - 0x9407, 0x9408, 0x9409, 0x940a, 0x940b, 0x940c, 0x940d, 0x003f, - 0x940e, 0x940f, 0x9410, 0x9411, 0x9412, 0x9413, 0x9414, 0x9415, - 0x9416, 0x9417, 0x9418, 0x9419, 0x941a, 0x941b, 0x941c, 0x941d, - 0x941e, 0x941f, 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, - 0x9426, 0x9427, 0x9428, 0x9429, 0x942a, 0x942b, 0x942c, 0x942d, - 0x942e, 0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, - 0x7ecb, 0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, - 0x7ee8, 0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, - 0x7efa, 0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, - 0x7f0b, 0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, - 0x7f1b, 0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, - 0x7f27, 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, - 0x7f32, 0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, - 0x738e, 0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, - 0x73b7, 0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, - 0x740a, 0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, - 0x745b, 0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c, 0x003f, - /* lead byte e8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x942f, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436, - 0x9437, 0x9438, 0x9439, 0x943a, 0x943b, 0x943c, 0x943d, 0x943f, - 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447, - 0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, - 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, - 0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, - 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, - 0x9468, 0x9469, 0x946a, 0x946c, 0x946d, 0x946e, 0x946f, 0x003f, - 0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, - 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x947f, - 0x9480, 0x9481, 0x9482, 0x9483, 0x9484, 0x9491, 0x9496, 0x9498, - 0x94c7, 0x94cf, 0x94d3, 0x94d4, 0x94da, 0x94e6, 0x94fb, 0x951c, - 0x9520, 0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, - 0x7477, 0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, - 0x748b, 0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, - 0x97ea, 0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, - 0x67a5, 0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, - 0x679e, 0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, - 0x680a, 0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, - 0x67dd, 0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, - 0x6832, 0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, - 0x6883, 0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, - 0x684a, 0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, - 0x686b, 0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9, 0x003f, - /* lead byte e9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9527, 0x9533, 0x953d, 0x9543, 0x9548, 0x954b, 0x9555, 0x955a, - 0x9560, 0x956e, 0x9574, 0x9575, 0x9577, 0x9578, 0x9579, 0x957a, - 0x957b, 0x957c, 0x957d, 0x957e, 0x9580, 0x9581, 0x9582, 0x9583, - 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958a, 0x958b, - 0x958c, 0x958d, 0x958e, 0x958f, 0x9590, 0x9591, 0x9592, 0x9593, - 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959a, 0x959b, - 0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, 0x95a1, 0x95a2, 0x95a3, - 0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, 0x003f, - 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2, - 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, - 0x95bb, 0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2, - 0x95c3, 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca, - 0x95cb, 0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, - 0x6971, 0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, - 0x6998, 0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, - 0x6966, 0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, - 0x69d4, 0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, - 0x69ff, 0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, - 0x6a3e, 0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, - 0x6a28, 0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, - 0x7337, 0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, - 0x6b8d, 0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, - 0x8f72, 0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, - 0x8f7c, 0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b, 0x003f, - /* lead byte ea */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, 0x95d3, - 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, 0x95db, - 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, 0x95e3, - 0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95ec, 0x95ff, 0x9607, 0x9613, - 0x9618, 0x961b, 0x961e, 0x9620, 0x9623, 0x9624, 0x9625, 0x9626, - 0x9627, 0x9628, 0x9629, 0x962b, 0x962c, 0x962d, 0x962f, 0x9630, - 0x9637, 0x9638, 0x9639, 0x963a, 0x963e, 0x9641, 0x9643, 0x964a, - 0x964e, 0x964f, 0x9651, 0x9652, 0x9653, 0x9656, 0x9657, 0x003f, - 0x9658, 0x9659, 0x965a, 0x965c, 0x965d, 0x965e, 0x9660, 0x9663, - 0x9665, 0x9666, 0x966b, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, - 0x9673, 0x9678, 0x9679, 0x967a, 0x967b, 0x967c, 0x967d, 0x967e, - 0x967f, 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, - 0x968a, 0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, - 0x6217, 0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, - 0x81e7, 0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, - 0x65ee, 0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, - 0x6600, 0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, - 0x8006, 0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, - 0x6677, 0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, - 0x66e6, 0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, - 0x8d45, 0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, - 0x89c7, 0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, - 0x726e, 0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, - 0x728b, 0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0, 0x003f, - /* lead byte eb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x968c, 0x968e, 0x9691, 0x9692, 0x9693, 0x9695, 0x9696, 0x969a, - 0x969b, 0x969d, 0x969e, 0x969f, 0x96a0, 0x96a1, 0x96a2, 0x96a3, - 0x96a4, 0x96a5, 0x96a6, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac, - 0x96ad, 0x96ae, 0x96af, 0x96b1, 0x96b2, 0x96b4, 0x96b5, 0x96b7, - 0x96b8, 0x96ba, 0x96bb, 0x96bf, 0x96c2, 0x96c3, 0x96c8, 0x96ca, - 0x96cb, 0x96d0, 0x96d1, 0x96d3, 0x96d4, 0x96d6, 0x96d7, 0x96d8, - 0x96d9, 0x96da, 0x96db, 0x96dc, 0x96dd, 0x96de, 0x96df, 0x96e1, - 0x96e2, 0x96e3, 0x96e4, 0x96e5, 0x96e6, 0x96e7, 0x96eb, 0x003f, - 0x96ec, 0x96ed, 0x96ee, 0x96f0, 0x96f1, 0x96f2, 0x96f4, 0x96f5, - 0x96f8, 0x96fa, 0x96fb, 0x96fc, 0x96fd, 0x96ff, 0x9702, 0x9703, - 0x9705, 0x970a, 0x970b, 0x970c, 0x9710, 0x9711, 0x9712, 0x9714, - 0x9715, 0x9717, 0x9718, 0x9719, 0x971a, 0x971b, 0x971d, 0x971f, - 0x9720, 0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, - 0x6bf9, 0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, - 0x6c1a, 0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, - 0x656b, 0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, - 0x809c, 0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, - 0x80b4, 0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, - 0x80c4, 0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, - 0x80f4, 0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, - 0x8c5a, 0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, - 0x8153, 0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, - 0x817d, 0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, - 0x6ed5, 0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb, 0x003f, - /* lead byte ec */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9721, 0x9722, 0x9723, 0x9724, 0x9725, 0x9726, 0x9727, 0x9728, - 0x9729, 0x972b, 0x972c, 0x972e, 0x972f, 0x9731, 0x9733, 0x9734, - 0x9735, 0x9736, 0x9737, 0x973a, 0x973b, 0x973c, 0x973d, 0x973f, - 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, - 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, 0x974e, 0x974f, - 0x9750, 0x9751, 0x9754, 0x9755, 0x9757, 0x9758, 0x975a, 0x975c, - 0x975d, 0x975f, 0x9763, 0x9764, 0x9766, 0x9767, 0x9768, 0x976a, - 0x976b, 0x976c, 0x976d, 0x976e, 0x976f, 0x9770, 0x9771, 0x003f, - 0x9772, 0x9775, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977d, - 0x977e, 0x977f, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9786, - 0x9787, 0x9788, 0x9789, 0x978a, 0x978c, 0x978e, 0x978f, 0x9790, - 0x9793, 0x9795, 0x9796, 0x9797, 0x9799, 0x979a, 0x979b, 0x979c, - 0x979d, 0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, - 0x6b59, 0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, - 0x5f40, 0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, - 0x65c4, 0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, - 0x7096, 0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, - 0x70ca, 0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, - 0x7168, 0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, - 0x71b5, 0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, - 0x7228, 0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, - 0x6248, 0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, - 0x7953, 0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, - 0x7985, 0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0, 0x003f, - /* lead byte ed */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x979e, 0x979f, 0x97a1, 0x97a2, 0x97a4, 0x97a5, 0x97a6, 0x97a7, - 0x97a8, 0x97a9, 0x97aa, 0x97ac, 0x97ae, 0x97b0, 0x97b1, 0x97b3, - 0x97b5, 0x97b6, 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, - 0x97bd, 0x97be, 0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, - 0x97c5, 0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, - 0x97cd, 0x97ce, 0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, - 0x97d5, 0x97d6, 0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, - 0x97dd, 0x97de, 0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x003f, - 0x97e4, 0x97e5, 0x97e8, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, - 0x97f4, 0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, - 0x97fe, 0x97ff, 0x9800, 0x9801, 0x9802, 0x9803, 0x9804, 0x9805, - 0x9806, 0x9807, 0x9808, 0x9809, 0x980a, 0x980b, 0x980c, 0x980d, - 0x980e, 0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, - 0x60ab, 0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, - 0x6206, 0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, - 0x7800, 0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, - 0x781d, 0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, - 0x7823, 0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, - 0x7847, 0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, - 0x78a1, 0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, - 0x78ec, 0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, - 0x9f9b, 0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, - 0x7707, 0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, - 0x7738, 0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768, 0x003f, - /* lead byte ee */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x980f, 0x9810, 0x9811, 0x9812, 0x9813, 0x9814, 0x9815, 0x9816, - 0x9817, 0x9818, 0x9819, 0x981a, 0x981b, 0x981c, 0x981d, 0x981e, - 0x981f, 0x9820, 0x9821, 0x9822, 0x9823, 0x9824, 0x9825, 0x9826, - 0x9827, 0x9828, 0x9829, 0x982a, 0x982b, 0x982c, 0x982d, 0x982e, - 0x982f, 0x9830, 0x9831, 0x9832, 0x9833, 0x9834, 0x9835, 0x9836, - 0x9837, 0x9838, 0x9839, 0x983a, 0x983b, 0x983c, 0x983d, 0x983e, - 0x983f, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, - 0x9847, 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x003f, - 0x984e, 0x984f, 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, - 0x9856, 0x9857, 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, - 0x985e, 0x985f, 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, - 0x9866, 0x9867, 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, - 0x986e, 0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, - 0x7791, 0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, - 0x754e, 0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, - 0x7f61, 0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, - 0x7f7e, 0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, - 0x948a, 0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, - 0x949a, 0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, - 0x94ac, 0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, - 0x94b9, 0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, - 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, - 0x94d5, 0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, - 0x94e0, 0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea, 0x003f, - /* lead byte ef */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x986f, 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x988b, 0x988e, - 0x9892, 0x9895, 0x9899, 0x98a3, 0x98a8, 0x98a9, 0x98aa, 0x98ab, - 0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3, - 0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb, - 0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, - 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0x98cb, - 0x98cc, 0x98cd, 0x98cf, 0x98d0, 0x98d4, 0x98d6, 0x98d7, 0x98db, - 0x98dc, 0x98dd, 0x98e0, 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x003f, - 0x98e5, 0x98e6, 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, - 0x98ef, 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, - 0x98f7, 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, - 0x98ff, 0x9900, 0x9901, 0x9902, 0x9903, 0x9904, 0x9905, 0x9906, - 0x9907, 0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, - 0x94f7, 0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, - 0x9507, 0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, - 0x9514, 0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, - 0x9522, 0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, - 0x9536, 0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, - 0x9544, 0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, - 0x9553, 0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, - 0x955f, 0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, - 0x9568, 0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, - 0x9573, 0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, - 0x79eb, 0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14, 0x003f, - /* lead byte f0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9908, 0x9909, 0x990a, 0x990b, 0x990c, 0x990e, 0x990f, 0x9911, - 0x9912, 0x9913, 0x9914, 0x9915, 0x9916, 0x9917, 0x9918, 0x9919, - 0x991a, 0x991b, 0x991c, 0x991d, 0x991e, 0x991f, 0x9920, 0x9921, - 0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927, 0x9928, 0x9929, - 0x992a, 0x992b, 0x992c, 0x992d, 0x992f, 0x9930, 0x9931, 0x9932, - 0x9933, 0x9934, 0x9935, 0x9936, 0x9937, 0x9938, 0x9939, 0x993a, - 0x993b, 0x993c, 0x993d, 0x993e, 0x993f, 0x9940, 0x9941, 0x9942, - 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x003f, - 0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, - 0x9952, 0x9953, 0x9956, 0x9957, 0x9958, 0x9959, 0x995a, 0x995b, - 0x995c, 0x995d, 0x995e, 0x995f, 0x9960, 0x9961, 0x9962, 0x9964, - 0x9966, 0x9973, 0x9978, 0x9979, 0x997b, 0x997e, 0x9982, 0x9983, - 0x9989, 0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, - 0x768e, 0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, - 0x9e22, 0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, - 0x9e36, 0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, - 0x9e44, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, - 0x9e51, 0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, - 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, - 0x9e6d, 0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, - 0x75a3, 0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, - 0x75c2, 0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, - 0x75e7, 0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, - 0x760c, 0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619, 0x003f, - /* lead byte f1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x998c, 0x998e, 0x999a, 0x999b, 0x999c, 0x999d, 0x999e, 0x999f, - 0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a6, 0x99a7, 0x99a9, - 0x99aa, 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1, - 0x99b2, 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9, - 0x99ba, 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1, - 0x99c2, 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, - 0x99ca, 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1, - 0x99d2, 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x003f, - 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, - 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, - 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, - 0x99f1, 0x99f2, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, - 0x99f9, 0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, - 0x763f, 0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, - 0x765c, 0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, - 0x7a80, 0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, - 0x7aad, 0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, - 0x88a2, 0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, - 0x88e5, 0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, - 0x8919, 0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, - 0x8966, 0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, - 0x8014, 0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, - 0x8029, 0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, - 0x8052, 0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883, 0x003f, - /* lead byte f2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x99ff, 0x9a00, 0x9a01, - 0x9a02, 0x9a03, 0x9a04, 0x9a05, 0x9a06, 0x9a07, 0x9a08, 0x9a09, - 0x9a0a, 0x9a0b, 0x9a0c, 0x9a0d, 0x9a0e, 0x9a0f, 0x9a10, 0x9a11, - 0x9a12, 0x9a13, 0x9a14, 0x9a15, 0x9a16, 0x9a17, 0x9a18, 0x9a19, - 0x9a1a, 0x9a1b, 0x9a1c, 0x9a1d, 0x9a1e, 0x9a1f, 0x9a20, 0x9a21, - 0x9a22, 0x9a23, 0x9a24, 0x9a25, 0x9a26, 0x9a27, 0x9a28, 0x9a29, - 0x9a2a, 0x9a2b, 0x9a2c, 0x9a2d, 0x9a2e, 0x9a2f, 0x9a30, 0x9a31, - 0x9a32, 0x9a33, 0x9a34, 0x9a35, 0x9a36, 0x9a37, 0x9a38, 0x003f, - 0x9a39, 0x9a3a, 0x9a3b, 0x9a3c, 0x9a3d, 0x9a3e, 0x9a3f, 0x9a40, - 0x9a41, 0x9a42, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, - 0x9a49, 0x9a4a, 0x9a4b, 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, - 0x9a51, 0x9a52, 0x9a53, 0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, - 0x9a59, 0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, - 0x989e, 0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, - 0x866c, 0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, - 0x868b, 0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, - 0x86b6, 0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, - 0x86c9, 0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, - 0x86d0, 0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, - 0x8707, 0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, - 0x871e, 0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, - 0x8729, 0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, - 0x8760, 0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, - 0x8764, 0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2, 0x003f, - /* lead byte f3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61, - 0x9a62, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, - 0x9a6a, 0x9a6b, 0x9a72, 0x9a83, 0x9a89, 0x9a8d, 0x9a8e, 0x9a94, - 0x9a95, 0x9a99, 0x9aa6, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, 0x9aad, - 0x9aae, 0x9aaf, 0x9ab2, 0x9ab3, 0x9ab4, 0x9ab5, 0x9ab9, 0x9abb, - 0x9abd, 0x9abe, 0x9abf, 0x9ac3, 0x9ac4, 0x9ac6, 0x9ac7, 0x9ac8, - 0x9ac9, 0x9aca, 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad2, 0x9ad4, - 0x9ad5, 0x9ad6, 0x9ad7, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, 0x003f, - 0x9add, 0x9ade, 0x9ae0, 0x9ae2, 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae7, - 0x9ae8, 0x9ae9, 0x9aea, 0x9aec, 0x9aee, 0x9af0, 0x9af1, 0x9af2, - 0x9af3, 0x9af4, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9afa, 0x9afc, - 0x9afd, 0x9afe, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b04, 0x9b05, - 0x9b06, 0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, - 0x87e5, 0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, - 0x87c0, 0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, - 0x87fe, 0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, - 0x7f44, 0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, - 0x7b15, 0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, - 0x7b2e, 0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, - 0x7b58, 0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, - 0x7b7b, 0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, - 0x7bac, 0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, - 0x7bb4, 0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, - 0x7bea, 0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b, 0x003f, - /* lead byte f4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9b07, 0x9b09, 0x9b0a, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b10, - 0x9b11, 0x9b12, 0x9b14, 0x9b15, 0x9b16, 0x9b17, 0x9b18, 0x9b19, - 0x9b1a, 0x9b1b, 0x9b1c, 0x9b1d, 0x9b1e, 0x9b20, 0x9b21, 0x9b22, - 0x9b24, 0x9b25, 0x9b26, 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2b, - 0x9b2c, 0x9b2d, 0x9b2e, 0x9b30, 0x9b31, 0x9b33, 0x9b34, 0x9b35, - 0x9b36, 0x9b37, 0x9b38, 0x9b39, 0x9b3a, 0x9b3d, 0x9b3e, 0x9b3f, - 0x9b40, 0x9b46, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4e, 0x9b50, 0x9b52, - 0x9b53, 0x9b55, 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x003f, - 0x9b5b, 0x9b5c, 0x9b5d, 0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, - 0x9b63, 0x9b64, 0x9b65, 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, - 0x9b6b, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, - 0x9b73, 0x9b74, 0x9b75, 0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, - 0x9b7b, 0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, - 0x8201, 0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, - 0x822d, 0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, - 0x823e, 0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, - 0x887e, 0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, - 0x7fa7, 0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, - 0x7c9c, 0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, - 0x7ccc, 0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, - 0x7fbf, 0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, - 0x7ff3, 0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, - 0x9eb4, 0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, - 0x8c47, 0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164, 0x003f, - /* lead byte f5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9b7c, 0x9b7d, 0x9b7e, 0x9b7f, 0x9b80, 0x9b81, 0x9b82, 0x9b83, - 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b, - 0x9b8c, 0x9b8d, 0x9b8e, 0x9b8f, 0x9b90, 0x9b91, 0x9b92, 0x9b93, - 0x9b94, 0x9b95, 0x9b96, 0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b, - 0x9b9c, 0x9b9d, 0x9b9e, 0x9b9f, 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3, - 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab, - 0x9bac, 0x9bad, 0x9bae, 0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, - 0x9bb4, 0x9bb5, 0x9bb6, 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x003f, - 0x9bbb, 0x9bbc, 0x9bbd, 0x9bbe, 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, - 0x9bc3, 0x9bc4, 0x9bc5, 0x9bc6, 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, - 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, - 0x9bd3, 0x9bd4, 0x9bd5, 0x9bd6, 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, - 0x9bdb, 0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, - 0x9172, 0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, - 0x91a2, 0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, - 0x91ba, 0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, - 0x8db5, 0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, - 0x8dde, 0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, - 0x8de3, 0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, - 0x8e1f, 0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, - 0x8e35, 0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, - 0x8e4a, 0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, - 0x8e94, 0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, - 0x8c98, 0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc, 0x003f, - /* lead byte f6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9bdc, 0x9bdd, 0x9bde, 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3, - 0x9be4, 0x9be5, 0x9be6, 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb, - 0x9bec, 0x9bed, 0x9bee, 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, - 0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, - 0x9bfc, 0x9bfd, 0x9bfe, 0x9bff, 0x9c00, 0x9c01, 0x9c02, 0x9c03, - 0x9c04, 0x9c05, 0x9c06, 0x9c07, 0x9c08, 0x9c09, 0x9c0a, 0x9c0b, - 0x9c0c, 0x9c0d, 0x9c0e, 0x9c0f, 0x9c10, 0x9c11, 0x9c12, 0x9c13, - 0x9c14, 0x9c15, 0x9c16, 0x9c17, 0x9c18, 0x9c19, 0x9c1a, 0x003f, - 0x9c1b, 0x9c1c, 0x9c1d, 0x9c1e, 0x9c1f, 0x9c20, 0x9c21, 0x9c22, - 0x9c23, 0x9c24, 0x9c25, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, - 0x9c2b, 0x9c2c, 0x9c2d, 0x9c2e, 0x9c2f, 0x9c30, 0x9c31, 0x9c32, - 0x9c33, 0x9c34, 0x9c35, 0x9c36, 0x9c37, 0x9c38, 0x9c39, 0x9c3a, - 0x9c3b, 0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, - 0x96f3, 0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, - 0x972d, 0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, - 0x9f88, 0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, - 0x96bc, 0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, - 0x92c8, 0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, - 0x9c82, 0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, - 0x9c90, 0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, - 0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, - 0x9ca8, 0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, - 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, - 0x9cbd, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb, 0x003f, - /* lead byte f7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9c3c, 0x9c3d, 0x9c3e, 0x9c3f, 0x9c40, 0x9c41, 0x9c42, 0x9c43, - 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0x9c48, 0x9c49, 0x9c4a, 0x9c4b, - 0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f, 0x9c50, 0x9c51, 0x9c52, 0x9c53, - 0x9c54, 0x9c55, 0x9c56, 0x9c57, 0x9c58, 0x9c59, 0x9c5a, 0x9c5b, - 0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c60, 0x9c61, 0x9c62, 0x9c63, - 0x9c64, 0x9c65, 0x9c66, 0x9c67, 0x9c68, 0x9c69, 0x9c6a, 0x9c6b, - 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, 0x9c70, 0x9c71, 0x9c72, 0x9c73, - 0x9c74, 0x9c75, 0x9c76, 0x9c77, 0x9c78, 0x9c79, 0x9c7a, 0x003f, - 0x9c7b, 0x9c7d, 0x9c7e, 0x9c80, 0x9c83, 0x9c84, 0x9c89, 0x9c8a, - 0x9c8c, 0x9c8f, 0x9c93, 0x9c96, 0x9c97, 0x9c98, 0x9c99, 0x9c9d, - 0x9caa, 0x9cac, 0x9caf, 0x9cb9, 0x9cbe, 0x9cbf, 0x9cc0, 0x9cc1, - 0x9cc2, 0x9cc8, 0x9cc9, 0x9cd1, 0x9cd2, 0x9cda, 0x9cdb, 0x9ce0, - 0x9ce1, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, - 0x9cd5, 0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, - 0x977c, 0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, - 0x97b2, 0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, - 0x9abc, 0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, - 0x9b45, 0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, - 0x990d, 0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, - 0x9aeb, 0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, - 0x9b23, 0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, - 0x9e92, 0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, - 0x9edf, 0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, - 0x9f2c, 0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44, 0x003f, - /* lead byte f8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0x9ce9, 0x9cea, - 0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0x9cf2, - 0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, 0x9cf9, 0x9cfa, - 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9cff, 0x9d00, 0x9d01, 0x9d02, - 0x9d03, 0x9d04, 0x9d05, 0x9d06, 0x9d07, 0x9d08, 0x9d09, 0x9d0a, - 0x9d0b, 0x9d0c, 0x9d0d, 0x9d0e, 0x9d0f, 0x9d10, 0x9d11, 0x9d12, - 0x9d13, 0x9d14, 0x9d15, 0x9d16, 0x9d17, 0x9d18, 0x9d19, 0x9d1a, - 0x9d1b, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d1f, 0x9d20, 0x9d21, 0x003f, - 0x9d22, 0x9d23, 0x9d24, 0x9d25, 0x9d26, 0x9d27, 0x9d28, 0x9d29, - 0x9d2a, 0x9d2b, 0x9d2c, 0x9d2d, 0x9d2e, 0x9d2f, 0x9d30, 0x9d31, - 0x9d32, 0x9d33, 0x9d34, 0x9d35, 0x9d36, 0x9d37, 0x9d38, 0x9d39, - 0x9d3a, 0x9d3b, 0x9d3c, 0x9d3d, 0x9d3e, 0x9d3f, 0x9d40, 0x9d41, - 0x9d42, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte f9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, 0x9d4a, - 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, 0x9d52, - 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0x9d5a, - 0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61, 0x9d62, - 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, 0x9d6a, - 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d72, - 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, - 0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d7f, 0x9d80, 0x9d81, 0x003f, - 0x9d82, 0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, - 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, - 0x9d92, 0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99, - 0x9d9a, 0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0x9da1, - 0x9da2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte fa */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa, - 0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2, - 0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba, - 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, - 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, - 0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, - 0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda, - 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x003f, - 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, - 0x9dea, 0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, - 0x9df2, 0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, - 0x9dfa, 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9dff, 0x9e00, 0x9e01, - 0x9e02, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte fb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9e03, 0x9e04, 0x9e05, 0x9e06, 0x9e07, 0x9e08, 0x9e09, 0x9e0a, - 0x9e0b, 0x9e0c, 0x9e0d, 0x9e0e, 0x9e0f, 0x9e10, 0x9e11, 0x9e12, - 0x9e13, 0x9e14, 0x9e15, 0x9e16, 0x9e17, 0x9e18, 0x9e19, 0x9e1a, - 0x9e1b, 0x9e1c, 0x9e1d, 0x9e1e, 0x9e24, 0x9e27, 0x9e2e, 0x9e30, - 0x9e34, 0x9e3b, 0x9e3c, 0x9e40, 0x9e4d, 0x9e50, 0x9e52, 0x9e53, - 0x9e54, 0x9e56, 0x9e59, 0x9e5d, 0x9e5f, 0x9e60, 0x9e61, 0x9e62, - 0x9e65, 0x9e6e, 0x9e6f, 0x9e72, 0x9e74, 0x9e75, 0x9e76, 0x9e77, - 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e7d, 0x9e80, 0x003f, - 0x9e81, 0x9e83, 0x9e84, 0x9e85, 0x9e86, 0x9e89, 0x9e8a, 0x9e8c, - 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e94, 0x9e95, 0x9e96, - 0x9e97, 0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, 0x9e9e, 0x9ea0, - 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea7, 0x9ea8, 0x9ea9, - 0x9eaa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte fc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2, - 0x9eb3, 0x9eb5, 0x9eb6, 0x9eb7, 0x9eb9, 0x9eba, 0x9ebc, 0x9ebf, - 0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, - 0x9eca, 0x9ecb, 0x9ecc, 0x9ed0, 0x9ed2, 0x9ed3, 0x9ed5, 0x9ed6, - 0x9ed7, 0x9ed9, 0x9eda, 0x9ede, 0x9ee1, 0x9ee3, 0x9ee4, 0x9ee6, - 0x9ee8, 0x9eeb, 0x9eec, 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, - 0x9ef3, 0x9ef4, 0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9efa, 0x9efd, - 0x9eff, 0x9f00, 0x9f01, 0x9f02, 0x9f03, 0x9f04, 0x9f05, 0x003f, - 0x9f06, 0x9f07, 0x9f08, 0x9f09, 0x9f0a, 0x9f0c, 0x9f0f, 0x9f11, - 0x9f12, 0x9f14, 0x9f15, 0x9f16, 0x9f18, 0x9f1a, 0x9f1b, 0x9f1c, - 0x9f1d, 0x9f1e, 0x9f1f, 0x9f21, 0x9f23, 0x9f24, 0x9f25, 0x9f26, - 0x9f27, 0x9f28, 0x9f29, 0x9f2a, 0x9f2b, 0x9f2d, 0x9f2e, 0x9f30, - 0x9f31, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte fd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9f32, 0x9f33, 0x9f34, 0x9f35, 0x9f36, 0x9f38, 0x9f3a, 0x9f3c, - 0x9f3f, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f45, 0x9f46, 0x9f47, - 0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, - 0x9f52, 0x9f53, 0x9f54, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f59, - 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, 0x9f5f, 0x9f60, 0x9f61, - 0x9f62, 0x9f63, 0x9f64, 0x9f65, 0x9f66, 0x9f67, 0x9f68, 0x9f69, - 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, - 0x9f72, 0x9f73, 0x9f74, 0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x003f, - 0x9f79, 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f81, 0x9f82, - 0x9f8d, 0x9f8e, 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, - 0x9f95, 0x9f96, 0x9f97, 0x9f98, 0x9f9c, 0x9f9d, 0x9f9e, 0x9fa1, - 0x9fa2, 0x9fa3, 0x9fa4, 0x9fa5, 0xf92c, 0xf979, 0xf995, 0xf9e7, - 0xf9f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte fe */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfa0c, 0xfa0d, 0xfa0e, 0xfa0f, 0xfa11, 0xfa13, 0xfa14, 0xfa18, - 0xfa1f, 0xfa20, 0xfa21, 0xfa23, 0xfa24, 0xfa27, 0xfa28, 0xfa29, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f -}; - -static const unsigned char cp2uni_leadbytes[256] = -{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 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, 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, 0x00 -}; - -static const unsigned short uni2cp_low[27904] = -{ - /* 0x0000 .. 0x00ff */ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0020, 0x0021, 0x0063, 0x004c, 0xa1e8, 0x0059, 0x007c, 0xa1ec, - 0xa1a7, 0x0063, 0x0061, 0xa1b6, 0x003f, 0x002d, 0x0072, 0xa1a5, - 0xa1e3, 0xa1c0, 0x0032, 0x0033, 0xa840, 0xa6cc, 0x003f, 0xa1a4, - 0x002c, 0x0031, 0x006f, 0xa1b7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0043, - 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049, - 0x0044, 0x004e, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0xa1c1, - 0x004f, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x003f, 0xa6c2, - 0xa8a4, 0xa8a2, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0063, - 0xa8a8, 0xa8a6, 0xa8ba, 0x0065, 0xa8ac, 0xa8aa, 0x0069, 0x0069, - 0x0064, 0x006e, 0xa8b0, 0xa8ae, 0x006f, 0x006f, 0x006f, 0xa1c2, - 0x006f, 0xa8b4, 0xa8b2, 0x0075, 0xa8b9, 0x0079, 0x003f, 0x0079, - /* 0x0100 .. 0x01ff */ - 0x0041, 0xa8a1, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063, - 0x0043, 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0045, 0xa8a5, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0xa8a7, 0x0047, 0x0067, 0x0047, 0x0067, - 0x0047, 0x0067, 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0049, 0x0069, 0x0049, 0xa8a9, 0x0049, 0x0069, 0x0049, 0x0069, - 0x0049, 0x0069, 0x003f, 0x003f, 0x004a, 0x006a, 0x004b, 0x006b, - 0x003f, 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x003f, - 0x003f, 0x004c, 0x006c, 0x004e, 0xa8bd, 0x004e, 0x006e, 0x004e, - 0xa8be, 0x003f, 0x003f, 0x003f, 0x004f, 0xa8ad, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0055, 0x0075, 0x0055, 0xa8b1, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0057, 0x0077, 0x0059, 0x0079, - 0x0059, 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0073, - 0x0062, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0044, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0045, 0x0046, 0x0066, 0x003f, 0x003f, 0x003f, 0x003f, 0x0049, - 0x003f, 0x003f, 0x006c, 0x003f, 0x003f, 0x003f, 0x003f, 0x004f, - 0x004f, 0x006f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, 0x0054, 0x0055, - 0x0075, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa9a6, 0x003f, 0x003f, 0x0021, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0xa8a3, 0x0049, - 0xa8ab, 0x004f, 0xa8af, 0x0055, 0xa8b3, 0x0055, 0xa8b5, 0x0055, - 0xa8b6, 0x0055, 0xa8b7, 0x0055, 0xa8b8, 0x003f, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0047, 0x0067, 0x0047, 0x0067, - 0x004b, 0x006b, 0x004f, 0x006f, 0x004f, 0x006f, 0x003f, 0x003f, - 0x006a, 0x003f, 0x003f, 0x003f, 0x0047, 0x0067, 0x003f, 0x003f, - 0x004e, 0x006e, 0x0041, 0x0061, 0x0041, 0x0061, 0x004f, 0x006f, - /* 0x0200 .. 0x02ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0053, 0x0073, 0x0054, 0x0074, 0x003f, 0x003f, 0x0048, 0x0068, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, - 0x0045, 0x0065, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa8bb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa8c0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0068, 0x003f, 0x006a, 0x0072, 0x003f, 0x003f, 0x003f, 0x0077, - 0x0079, 0xa840, 0xa1e5, 0xa1ae, 0xa1af, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x005e, 0xa1a6, - 0x0027, 0xa1a5, 0xa840, 0xa841, 0x003f, 0x005f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa842, 0xa1e3, 0x003f, 0x007e, 0xa1e5, 0x003f, 0x003f, - 0x003f, 0x006c, 0x0073, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0300 .. 0x03ff */ - 0xa841, 0xa840, 0x005e, 0x007e, 0xa1a5, 0xa1a5, 0x003f, 0xa842, - 0xa1a7, 0x003f, 0xa1e3, 0xa1e5, 0xa1a6, 0x003f, 0x0022, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x002c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x005f, 0x005f, 0x005f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa841, 0xa840, 0x003f, 0x003f, 0xa1a7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa840, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa840, 0xa1a7, 0xa6a1, 0xa1a4, - 0xa6a5, 0xa6a7, 0xa6a9, 0x003f, 0xa6af, 0x003f, 0xa6b4, 0xa6b8, - 0xa6c9, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4, 0xa6a5, 0xa6a6, 0xa6a7, - 0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ad, 0xa6ae, 0xa6af, - 0xa6b0, 0xa6b1, 0x003f, 0xa6b2, 0xa6b3, 0xa6b4, 0xa6b5, 0xa6b6, - 0xa6b7, 0xa6b8, 0xa6a9, 0xa6b4, 0xa6c1, 0xa6c5, 0xa6c7, 0xa6c9, - 0xa6d4, 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5, 0xa6c6, 0xa6c7, - 0xa6c8, 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd, 0xa6ce, 0xa6cf, - 0xa6d0, 0xa6d1, 0x003f, 0xa6d2, 0xa6d3, 0xa6d4, 0xa6d5, 0xa6d6, - 0xa6d7, 0xa6d8, 0xa6c9, 0xa6d4, 0xa6cf, 0xa6d4, 0xa6d8, 0x003f, - 0xa6c2, 0xa6c8, 0xa6b4, 0xa6b4, 0xa6b4, 0xa6d5, 0xa6d0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa6ca, 0xa6d1, 0x003f, 0x003f, 0xa6a8, 0xa6c5, 0x003f, 0x003f, - 0x003f, 0xa6b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0400 .. 0x04ff */ - 0xa7a6, 0xa7a7, 0x003f, 0xa7a4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa7ac, 0xa7aa, 0xa7b5, 0x003f, - 0xa7a1, 0xa7a2, 0xa7a3, 0xa7a4, 0xa7a5, 0xa7a6, 0xa7a8, 0xa7a9, - 0xa7aa, 0xa7ab, 0xa7ac, 0xa7ad, 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, - 0xa7b2, 0xa7b3, 0xa7b4, 0xa7b5, 0xa7b6, 0xa7b7, 0xa7b8, 0xa7b9, - 0xa7ba, 0xa7bb, 0xa7bc, 0xa7bd, 0xa7be, 0xa7bf, 0xa7c0, 0xa7c1, - 0xa7d1, 0xa7d2, 0xa7d3, 0xa7d4, 0xa7d5, 0xa7d6, 0xa7d8, 0xa7d9, - 0xa7da, 0xa7db, 0xa7dc, 0xa7dd, 0xa7de, 0xa7df, 0xa7e0, 0xa7e1, - 0xa7e2, 0xa7e3, 0xa7e4, 0xa7e5, 0xa7e6, 0xa7e7, 0xa7e8, 0xa7e9, - 0xa7ea, 0xa7eb, 0xa7ec, 0xa7ed, 0xa7ee, 0xa7ef, 0xa7f0, 0xa7f1, - 0xa7d6, 0xa7d7, 0x003f, 0xa7d4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa7dc, 0xa7da, 0xa7e5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa7a8, 0xa7d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa7a1, 0xa7d1, 0xa7a1, 0xa7d1, 0x003f, 0x003f, 0xa7a6, 0xa7d6, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa7a8, 0xa7d8, 0xa7a9, 0xa7d9, - 0x003f, 0x003f, 0xa7aa, 0xa7da, 0xa7aa, 0xa7da, 0xa7b0, 0xa7e0, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa7bf, 0xa7ef, 0xa7b5, 0xa7e5, - 0xa7b5, 0xa7e5, 0xa7b5, 0xa7e5, 0xa7b9, 0xa7e9, 0x003f, 0x003f, - 0xa7bd, 0xa7ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1d00 .. 0x1dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0041, 0x0042, 0x003f, - 0x0044, 0x0045, 0x003f, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, - 0x004c, 0x004d, 0x004e, 0x003f, 0x004f, 0x003f, 0x0050, 0x0052, - 0x0054, 0x0055, 0x0057, 0x0061, 0x003f, 0xa8bb, 0x003f, 0x0062, - 0x0064, 0x0065, 0x003f, 0x003f, 0x003f, 0x0067, 0x003f, 0x006b, - 0x006d, 0x003f, 0x006f, 0x003f, 0x003f, 0x003f, 0x0070, 0x0074, - 0x0075, 0x003f, 0x003f, 0x0076, 0x003f, 0xa6c2, 0xa6c3, 0xa6c4, - 0xa6d5, 0xa6d6, 0x0069, 0x0072, 0x0075, 0x0076, 0xa6c2, 0xa6c3, - 0xa6d1, 0xa6d5, 0xa6d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa7df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0063, 0x003f, 0x0064, 0x003f, - 0x0066, 0x003f, 0xa8c0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, 0x003f, 0x003f, 0xa6c8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1e00 .. 0x1eff */ - 0x0041, 0x0061, 0x0042, 0x0062, 0x0042, 0x0062, 0x0042, 0x0062, - 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0044, 0x0064, 0x0045, 0xa8a5, 0x0045, 0xa8a5, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0046, 0x0066, - 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0048, 0x0068, 0x0048, 0x0068, 0x0049, 0x0069, 0x0049, 0x0069, - 0x004b, 0x006b, 0x004b, 0x006b, 0x004b, 0x006b, 0x004c, 0x006c, - 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x004d, 0x006d, - 0x004d, 0x006d, 0x004d, 0x006d, 0x004e, 0x006e, 0x004e, 0x006e, - 0x004e, 0x006e, 0x004e, 0x006e, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0xa8ad, 0x004f, 0xa8ad, 0x0050, 0x0070, 0x0050, 0x0070, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0054, 0x0074, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0xa8b1, 0x0056, 0x0076, 0x0056, 0x0076, - 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, - 0x0057, 0x0077, 0x0058, 0x0078, 0x0058, 0x0078, 0x0059, 0x0079, - 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0068, 0x0074, - 0x0077, 0x0079, 0x003f, 0x0073, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0xa8ba, - 0x0045, 0xa8ba, 0x0045, 0xa8ba, 0x0045, 0xa8ba, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0059, 0x0079, 0x0059, 0x0079, 0x0059, 0x0079, - 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1f00 .. 0x1fff */ - 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, - 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, - 0xa6c5, 0xa6c5, 0xa6c5, 0xa6c5, 0xa6c5, 0xa6c5, 0x003f, 0x003f, - 0xa6a5, 0xa6a5, 0xa6a5, 0xa6a5, 0xa6a5, 0xa6a5, 0x003f, 0x003f, - 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, - 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, - 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, - 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, - 0xa6cf, 0xa6cf, 0xa6cf, 0xa6cf, 0xa6cf, 0xa6cf, 0x003f, 0x003f, - 0xa6af, 0xa6af, 0xa6af, 0xa6af, 0xa6af, 0xa6af, 0x003f, 0x003f, - 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, - 0x003f, 0xa6b4, 0x003f, 0xa6b4, 0x003f, 0xa6b4, 0x003f, 0xa6b4, - 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, - 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, - 0xa6c1, 0xa6c1, 0xa6c5, 0xa6c5, 0xa6c7, 0xa6c7, 0xa6c9, 0xa6c9, - 0xa6cf, 0xa6cf, 0xa6d4, 0xa6d4, 0xa6d8, 0xa6d8, 0x003f, 0x003f, - 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, - 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, - 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, - 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, 0xa6a7, - 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, 0xa6d8, - 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, 0xa6b8, - 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0xa6c1, 0x003f, 0xa6c1, 0xa6c1, - 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0xa6a1, 0x003f, 0xa6c9, 0x003f, - 0x003f, 0xa1a7, 0xa6c7, 0xa6c7, 0xa6c7, 0x003f, 0xa6c7, 0xa6c7, - 0xa6a5, 0xa6a5, 0xa6a7, 0xa6a7, 0xa6a7, 0x003f, 0x003f, 0x003f, - 0xa6c9, 0xa6c9, 0xa6c9, 0xa6c9, 0x003f, 0x003f, 0xa6c9, 0xa6c9, - 0xa6a9, 0xa6a9, 0xa6a9, 0xa6a9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d4, 0xa6d1, 0xa6d1, 0xa6d4, 0xa6d4, - 0xa6b4, 0xa6b4, 0xa6b4, 0xa6b4, 0xa6b1, 0xa1a7, 0xa1a7, 0x0060, - 0x003f, 0x003f, 0xa6d8, 0xa6d8, 0xa6d8, 0x003f, 0xa6d8, 0xa6d8, - 0xa6af, 0xa6af, 0xa6b8, 0xa6b8, 0xa6b8, 0xa840, 0x003f, 0x003f, - /* 0x2000 .. 0x20ff */ - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa95c, 0xa95c, 0x003f, 0xa843, 0xa1aa, 0xa844, 0xa1ac, 0x005f, - 0xa1ae, 0xa1af, 0x002c, 0xa1ae, 0xa1b0, 0xa1b1, 0x002c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x002e, 0xa845, 0xa1ad, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0xa1eb, 0x003f, 0xa1e4, 0xa1e5, 0x003f, 0xa846, 0x003f, 0x003f, - 0x003f, 0xa1b4, 0xa1b5, 0xa1f9, 0x0021, 0x003f, 0xa1a5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa84d, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1e3, 0x0069, 0x003f, 0x003f, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0xa95c, 0x003d, 0x0028, 0x0029, 0x006e, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0xa95c, 0x003d, 0x0028, 0x0029, 0x003f, - 0x0061, 0x0065, 0x006f, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0063, 0x003f, 0x003f, 0x004c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0080, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2100 .. 0x21ff */ - 0x003f, 0x003f, 0x0043, 0xa1e6, 0x003f, 0xa847, 0x003f, 0x0045, - 0x003f, 0xa848, 0x0067, 0x0048, 0x0048, 0x0048, 0x0068, 0x0068, - 0x0049, 0x0049, 0x004c, 0x006c, 0x003f, 0x004e, 0xa1ed, 0x003f, - 0x0050, 0x0050, 0x0051, 0x0052, 0x0052, 0x0052, 0x003f, 0x003f, - 0x003f, 0xa959, 0x003f, 0x003f, 0x005a, 0x003f, 0xa6b8, 0x003f, - 0x005a, 0x003f, 0x004b, 0x0041, 0x0042, 0x0043, 0x0065, 0x0065, - 0x0045, 0x0046, 0x003f, 0x004d, 0x006f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0069, 0x003f, 0x003f, 0xa6d0, 0xa6c3, 0xa6a3, 0xa6b0, - 0xa1c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x0044, 0x0064, 0x0065, - 0x0069, 0x006a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, 0xa2f8, - 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0x004c, 0x0043, 0x0044, 0x004d, - 0xa2a1, 0xa2a2, 0xa2a3, 0xa2a4, 0xa2a5, 0xa2a6, 0xa2a7, 0xa2a8, - 0xa2a9, 0xa2aa, 0x003f, 0x003f, 0x006c, 0x0063, 0x0064, 0x006d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1fb, 0xa1fc, 0xa1fa, 0xa1fd, 0x002d, 0x007c, 0xa849, 0xa84a, - 0xa84b, 0xa84c, 0xa1fb, 0xa1fa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x002d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2200 .. 0x22ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x004f, 0x003f, 0x003f, - 0xa1ca, 0xa1ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1c7, - 0x003f, 0xa1c6, 0xa95c, 0xa1c0, 0x003f, 0xa84d, 0x005c, 0x002a, - 0xa1e3, 0x003f, 0xa1cc, 0x003f, 0x003f, 0xa1d8, 0xa1de, 0xa84e, - 0xa1cf, 0x003f, 0x003f, 0xa84f, 0xa84f, 0xa1ce, 0xa1ce, 0xa1c4, - 0xa1c5, 0xa1c9, 0xa1c8, 0xa1d2, 0x003f, 0x003f, 0xa1d3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1e0, 0xa1df, 0xa1c3, 0xa1cb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x007e, 0xa1d7, 0x003f, 0x003f, - 0x003f, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1d6, 0xa1d6, 0x003f, 0x003f, 0xa1d5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa850, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1d9, 0xa1d4, 0xa1d4, 0xa1d4, 0xa1dc, 0xa1dd, 0xa851, 0xa852, - 0x003f, 0x003f, 0xa1b6, 0xa1b7, 0x003f, 0x003f, 0xa1da, 0xa1db, - 0xa1dc, 0xa1dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa892, 0x003f, 0x003f, - 0x003f, 0xa1d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1cd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa853, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1a4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2300 .. 0x23ff */ - 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa1b4, 0xa1b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2400 .. 0x24ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, - 0xa2e1, 0xa2e2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, - 0xa2c9, 0xa2ca, 0xa2cb, 0xa2cc, 0xa2cd, 0xa2ce, 0xa2cf, 0xa2d0, - 0xa2d1, 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, - 0xa2b1, 0xa2b2, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, - 0xa2b9, 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, - 0xa2c1, 0xa2c2, 0xa2c3, 0xa2c4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, - 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, - 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, - 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, - 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x0030, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2500 .. 0x25ff */ - 0xa9a4, 0xa9a5, 0xa9a6, 0xa9a7, 0xa9a8, 0xa9a9, 0xa9aa, 0xa9ab, - 0xa9ac, 0xa9ad, 0xa9ae, 0xa9af, 0xa9b0, 0xa9b1, 0xa9b2, 0xa9b3, - 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, 0xa9b9, 0xa9ba, 0xa9bb, - 0xa9bc, 0xa9bd, 0xa9be, 0xa9bf, 0xa9c0, 0xa9c1, 0xa9c2, 0xa9c3, - 0xa9c4, 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, 0xa9c9, 0xa9ca, 0xa9cb, - 0xa9cc, 0xa9cd, 0xa9ce, 0xa9cf, 0xa9d0, 0xa9d1, 0xa9d2, 0xa9d3, - 0xa9d4, 0xa9d5, 0xa9d6, 0xa9d7, 0xa9d8, 0xa9d9, 0xa9da, 0xa9db, - 0xa9dc, 0xa9dd, 0xa9de, 0xa9df, 0xa9e0, 0xa9e1, 0xa9e2, 0xa9e3, - 0xa9e4, 0xa9e5, 0xa9e6, 0xa9e7, 0xa9e8, 0xa9e9, 0xa9ea, 0xa9eb, - 0xa9ec, 0xa9ed, 0xa9ee, 0xa9ef, 0x002d, 0x002d, 0x007c, 0x007c, - 0xa854, 0xa855, 0xa856, 0xa857, 0xa858, 0xa859, 0xa85a, 0xa85b, - 0xa85c, 0xa85d, 0xa85e, 0xa85f, 0xa860, 0xa861, 0xa862, 0xa863, - 0xa864, 0xa865, 0xa866, 0xa867, 0xa868, 0xa869, 0xa86a, 0xa86b, - 0xa86c, 0xa86d, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa872, 0xa873, - 0xa874, 0xa875, 0xa876, 0xa877, 0x002d, 0x007c, 0x002d, 0x007c, - 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, - 0x003f, 0xa878, 0xa879, 0xa87a, 0xa87b, 0xa87c, 0xa87d, 0xa87e, - 0xa880, 0xa881, 0xa882, 0xa883, 0xa884, 0xa885, 0xa886, 0xa887, - 0x003f, 0x003f, 0x003f, 0xa888, 0xa889, 0xa88a, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1f6, 0xa1f5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1f8, 0xa1f7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa88b, 0xa88c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1f4, 0xa1f3, - 0x003f, 0x003f, 0x003f, 0xa1f0, 0x003f, 0x003f, 0xa1f2, 0xa1f1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa88d, 0xa88e, 0xa88f, 0xa890, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1f0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2600 .. 0x26ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1ef, 0xa1ee, 0x003f, - 0x003f, 0xa891, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1e2, 0x003f, 0xa1e1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2e00 .. 0x2eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4b8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb9ea, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2f00 .. 0x2fff */ - 0xd2bb, 0xd8ad, 0xd8bc, 0xd8af, 0xd2d2, 0x817c, 0xb6fe, 0xd9ef, - 0xc8cb, 0xb6f9, 0xc8eb, 0xb0cb, 0xd8e7, 0xdaa2, 0xd9fb, 0xbcb8, - 0xdbc9, 0xb5b6, 0xc1a6, 0xd9e8, 0xd8b0, 0xd8ce, 0x855b, 0xcaae, - 0xb2b7, 0xdae0, 0xb3a7, 0xdbcc, 0xd3d6, 0xbfda, 0xe0ed, 0xcdc1, - 0xcabf, 0xe2ba, 0x89e5, 0xcfa6, 0xb4f3, 0xc5ae, 0xd7d3, 0xe5b2, - 0xb4e7, 0xd0a1, 0xdecc, 0xcaac, 0xe5f8, 0xc9bd, 0xe7dd, 0xb9a4, - 0xbcba, 0xbded, 0xb8c9, 0xe7db, 0xb9e3, 0xdbc8, 0xdec3, 0xdfae, - 0xb9ad, 0xe5e6, 0xe1ea, 0xe1dc, 0xd0c4, 0xb8ea, 0x91f4, 0xcad6, - 0xd6a7, 0xeab7, 0xcec4, 0xb6b7, 0xbdef, 0xb7bd, 0xcede, 0xc8d5, - 0xd4bb, 0xd4c2, 0xc4be, 0xc7b7, 0xd6b9, 0xb4f5, 0xecaf, 0xcee3, - 0xb1c8, 0xc3ab, 0xcacf, 0xc6f8, 0xcbae, 0xbbf0, 0xd7a6, 0xb8b8, - 0xd8b3, 0xe3dd, 0xc6ac, 0xd1c0, 0xc5a3, 0xc8ae, 0xd0fe, 0xd3f1, - 0xb9cf, 0xcddf, 0xb8ca, 0xc9fa, 0xd3c3, 0xccef, 0xf1e2, 0xf0da, - 0xb068, 0xb0d7, 0xc6a4, 0xc3f3, 0xc4bf, 0xc3ac, 0xcab8, 0xcaaf, - 0xcabe, 0xb662, 0xbacc, 0xd1a8, 0xc1a2, 0xd6f1, 0xc3d7, 0xf4e9, - 0xf3be, 0xcdf8, 0xd1f2, 0xd3f0, 0xc0cf, 0xb6f8, 0xf1e7, 0xb6fa, - 0xedb2, 0xc8e2, 0xb3bc, 0xd7d4, 0xd6c1, 0xbeca, 0xc9e0, 0xe2b6, - 0xd6db, 0xf4de, 0xc9ab, 0xc648, 0xf2ae, 0xb3e6, 0xd1aa, 0xd0d0, - 0xd2c2, 0xd281, 0xd28a, 0xbdc7, 0xd1d4, 0xb9c8, 0xb6b9, 0xf5b9, - 0xf5f4, 0xd890, 0xb3e0, 0xd7df, 0xd7e3, 0xc9ed, 0xdc87, 0xd0c1, - 0xb3bd, 0xde75, 0xd2d8, 0xd3cf, 0xe18a, 0xc0ef, 0xbdf0, 0xe94c, - 0xe954, 0xb8b7, 0xc1a5, 0xf6bf, 0xd3ea, 0xec69, 0xb7c7, 0xc3e6, - 0xb8ef, 0xed66, 0xbec2, 0xd2f4, 0xed93, 0xef4c, 0xef77, 0xcab3, - 0xcad7, 0xcfe3, 0xf152, 0xb9c7, 0xb8df, 0xf7d4, 0xf459, 0xdbcb, - 0xd8aa, 0xb9ed, 0xf47e, 0xf842, 0xfb75, 0xc2b9, 0xfb9c, 0xc2e9, - 0xfc53, 0xcaf2, 0xbada, 0xede9, 0xfc77, 0xb6a6, 0xb9c4, 0xcaf3, - 0xb1c7, 0xfd52, 0xfd58, 0xfd88, 0xfd94, 0xd9df, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3000 .. 0x30ff */ - 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a8, 0x003f, 0xa1a9, 0xa965, 0xa996, - 0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7, 0xa1b8, 0xa1b9, 0xa1ba, 0xa1bb, - 0xa1be, 0xa1bf, 0xa893, 0xa1fe, 0xa1b2, 0xa1b3, 0xa1bc, 0xa1bd, - 0x003f, 0x003f, 0x005b, 0x005d, 0x003f, 0xa894, 0xa895, 0x002c, - 0x003f, 0xa940, 0xa941, 0xa942, 0xa943, 0xa944, 0xa945, 0xa946, - 0xa947, 0xa948, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa893, 0x003f, - 0xcaae, 0x8560, 0xd8a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, - 0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, - 0xa4b0, 0xa4b1, 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, - 0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf, - 0xa4c0, 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, - 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, - 0xa4d0, 0xa4d1, 0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, - 0xa4d8, 0xa4d9, 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df, - 0xa4e0, 0xa4e1, 0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7, - 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, - 0xa4f0, 0xa4f1, 0xa4f2, 0xa4f3, 0xa4a6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa961, 0xa962, 0xa966, 0xa967, 0x003f, - 0x003f, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6, 0xa5a7, - 0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac, 0xa5ad, 0xa5ae, 0xa5af, - 0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6, 0xa5b7, - 0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd, 0xa5be, 0xa5bf, - 0xa5c0, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, 0xa5c7, - 0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, - 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, 0xa5d7, - 0xa5d8, 0xa5d9, 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5de, 0xa5df, - 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6, 0xa5e7, - 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee, 0xa5ef, - 0xa5f0, 0xa5f1, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6, 0xa5ef, - 0xa5f0, 0xa5f1, 0xa5f2, 0x003f, 0xa960, 0xa963, 0xa964, 0x003f, - /* 0x3100 .. 0x31ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa8c5, 0xa8c6, 0xa8c7, - 0xa8c8, 0xa8c9, 0xa8ca, 0xa8cb, 0xa8cc, 0xa8cd, 0xa8ce, 0xa8cf, - 0xa8d0, 0xa8d1, 0xa8d2, 0xa8d3, 0xa8d4, 0xa8d5, 0xa8d6, 0xa8d7, - 0xa8d8, 0xa8d9, 0xa8da, 0xa8db, 0xa8dc, 0xa8dd, 0xa8de, 0xa8df, - 0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3, 0xa8e4, 0xa8e5, 0xa8e6, 0xa8e7, - 0xa8e8, 0xa8e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd2bb, 0xb6fe, 0xc8fd, 0xcbc4, 0xc9cf, 0xd6d0, - 0xcfc2, 0xbcd7, 0xd2d2, 0xb1fb, 0xb6a1, 0xccec, 0xb5d8, 0xc8cb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3200 .. 0x32ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, - 0xa2ed, 0xa2ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa95a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd2bb, 0xb6fe, 0xc8fd, 0xcbc4, 0xcee5, 0xc1f9, 0xc6df, 0xb0cb, - 0xbec5, 0xcaae, 0xd4c2, 0xbbf0, 0xcbae, 0xc4be, 0xbdf0, 0xcdc1, - 0xc8d5, 0xd6ea, 0xd3d0, 0xc9e7, 0xc3fb, 0xccd8, 0xd894, 0xd7a3, - 0x84ba, 0xc3d8, 0xc4d0, 0xc5ae, 0xdf6d, 0x839e, 0xd3a1, 0xd7a2, - 0xed97, 0xd0dd, 0xd0b4, 0xa949, 0xc9cf, 0xd6d0, 0xcfc2, 0xd7f3, - 0xd3d2, 0xd2bd, 0xd7da, 0xd1a7, 0xb14f, 0xc6f3, 0xd959, 0x8566, - 0xd2b9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad, 0xa5af, - 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd, 0xa5bf, - 0xa5c1, 0xa5c4, 0xa5c6, 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, - 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de, 0xa5df, - 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9, 0xa5ea, - 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f0, 0xa5f1, 0xa5f2, 0x003f, - /* 0x3300 .. 0x33ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa94a, 0xa94b, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa94c, 0xa94d, 0xa94e, 0x003f, - 0x003f, 0xa94f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa950, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa951, 0x003f, - 0x003f, 0xa952, 0xa953, 0x003f, 0x003f, 0xa954, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x4e00 .. 0x4eff */ - 0xd2bb, 0xb6a1, 0x8140, 0xc6df, 0x8141, 0x8142, 0x8143, 0xcdf2, - 0xd5c9, 0xc8fd, 0xc9cf, 0xcfc2, 0xd8a2, 0xb2bb, 0xd3eb, 0x8144, - 0xd8a4, 0xb3f3, 0x8145, 0xd7a8, 0xc7d2, 0xd8a7, 0xcac0, 0x8146, - 0xc7f0, 0xb1fb, 0xd2b5, 0xb4d4, 0xb6ab, 0xcbbf, 0xd8a9, 0x8147, - 0x8148, 0x8149, 0xb6aa, 0x814a, 0xc1bd, 0xd1cf, 0x814b, 0xc9a5, - 0xd8ad, 0x814c, 0xb8f6, 0xd1be, 0xe3dc, 0xd6d0, 0x814d, 0x814e, - 0xb7e1, 0x814f, 0xb4ae, 0x8150, 0xc1d9, 0x8151, 0xd8bc, 0x8152, - 0xcde8, 0xb5a4, 0xceaa, 0xd6f7, 0x8153, 0xc0f6, 0xbed9, 0xd8af, - 0x8154, 0x8155, 0x8156, 0xc4cb, 0x8157, 0xbec3, 0x8158, 0xd8b1, - 0xc3b4, 0xd2e5, 0x8159, 0xd6ae, 0xceda, 0xd5a7, 0xbaf5, 0xb7a6, - 0xc0d6, 0x815a, 0xc6b9, 0xc5d2, 0xc7c7, 0x815b, 0xb9d4, 0x815c, - 0xb3cb, 0xd2d2, 0x815d, 0x815e, 0xd8bf, 0xbec5, 0xc6f2, 0xd2b2, - 0xcfb0, 0xcfe7, 0x815f, 0x8160, 0x8161, 0x8162, 0xcae9, 0x8163, - 0x8164, 0xd8c0, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, 0x816a, - 0xc2f2, 0xc2d2, 0x816b, 0xc8e9, 0x816c, 0x816d, 0x816e, 0x816f, - 0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0xc7ac, 0x8176, - 0x8177, 0x8178, 0x8179, 0x817a, 0x817b, 0x817c, 0xc1cb, 0x817d, - 0xd3e8, 0xd5f9, 0x817e, 0xcac2, 0xb6fe, 0xd8a1, 0xd3da, 0xbff7, - 0x8180, 0xd4c6, 0xbba5, 0xd8c1, 0xcee5, 0xbeae, 0x8181, 0x8182, - 0xd8a8, 0x8183, 0xd1c7, 0xd0a9, 0x8184, 0x8185, 0x8186, 0xd8bd, - 0xd9ef, 0xcdf6, 0xbfba, 0x8187, 0xbdbb, 0xbaa5, 0xd2e0, 0xb2fa, - 0xbae0, 0xc4b6, 0x8188, 0xcfed, 0xbea9, 0xcda4, 0xc1c1, 0x8189, - 0x818a, 0x818b, 0xc7d7, 0xd9f1, 0x818c, 0xd9f4, 0x818d, 0x818e, - 0x818f, 0x8190, 0xc8cb, 0xd8e9, 0x8191, 0x8192, 0x8193, 0xd2da, - 0xcab2, 0xc8ca, 0xd8ec, 0xd8ea, 0xd8c6, 0xbdf6, 0xc6cd, 0xb3f0, - 0x8194, 0xd8eb, 0xbdf1, 0xbde9, 0x8195, 0xc8d4, 0xb4d3, 0x8196, - 0x8197, 0xc2d8, 0x8198, 0xb2d6, 0xd7d0, 0xcacb, 0xcbfb, 0xd5cc, - 0xb8b6, 0xcfc9, 0x8199, 0x819a, 0x819b, 0xd9da, 0xd8f0, 0xc7aa, - 0x819c, 0xd8ee, 0x819d, 0xb4fa, 0xc1ee, 0xd2d4, 0x819e, 0x819f, - 0xd8ed, 0x81a0, 0xd2c7, 0xd8ef, 0xc3c7, 0x81a1, 0x81a2, 0x81a3, - 0xd1f6, 0x81a4, 0xd6d9, 0xd8f2, 0x81a5, 0xd8f5, 0xbcfe, 0xbcdb, - 0x81a6, 0x81a7, 0x81a8, 0xc8ce, 0x81a9, 0xb7dd, 0x81aa, 0xb7c2, - /* 0x4f00 .. 0x4fff */ - 0x81ab, 0xc6f3, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, - 0x81b2, 0xd8f8, 0xd2c1, 0x81b3, 0x81b4, 0xcee9, 0xbcbf, 0xb7fc, - 0xb7a5, 0xd0dd, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0xd6da, - 0xd3c5, 0xbbef, 0xbbe1, 0xd8f1, 0x81ba, 0x81bb, 0xc9a1, 0xceb0, - 0xb4ab, 0x81bc, 0xd8f3, 0x81bd, 0xc9cb, 0xd8f6, 0xc2d7, 0xd8f7, - 0x81be, 0x81bf, 0xceb1, 0xd8f9, 0x81c0, 0x81c1, 0x81c2, 0xb2ae, - 0xb9c0, 0x81c3, 0xd9a3, 0x81c4, 0xb0e9, 0x81c5, 0xc1e6, 0x81c6, - 0xc9ec, 0x81c7, 0xcbc5, 0x81c8, 0xcbc6, 0xd9a4, 0x81c9, 0x81ca, - 0x81cb, 0x81cc, 0x81cd, 0xb5e8, 0x81ce, 0x81cf, 0xb5ab, 0x81d0, - 0x81d1, 0x81d2, 0x81d3, 0x81d4, 0x81d5, 0xcebb, 0xb5cd, 0xd7a1, - 0xd7f4, 0xd3d3, 0x81d6, 0xcce5, 0x81d7, 0xbace, 0x81d8, 0xd9a2, - 0xd9dc, 0xd3e0, 0xd8fd, 0xb7f0, 0xd7f7, 0xd8fe, 0xd8fa, 0xd9a1, - 0xc4e3, 0x81d9, 0x81da, 0xd3b6, 0xd8f4, 0xd9dd, 0x81db, 0xd8fb, - 0x81dc, 0xc5e5, 0x81dd, 0x81de, 0xc0d0, 0x81df, 0x81e0, 0xd1f0, - 0xb0db, 0x81e1, 0x81e2, 0xbcd1, 0xd9a6, 0x81e3, 0xd9a5, 0x81e4, - 0x81e5, 0x81e6, 0x81e7, 0xd9ac, 0xd9ae, 0x81e8, 0xd9ab, 0xcab9, - 0x81e9, 0x81ea, 0x81eb, 0xd9a9, 0xd6b6, 0x81ec, 0x81ed, 0x81ee, - 0xb3de, 0xd9a8, 0x81ef, 0xc0fd, 0x81f0, 0xcacc, 0x81f1, 0xd9aa, - 0x81f2, 0xd9a7, 0x81f3, 0x81f4, 0xd9b0, 0x81f5, 0x81f6, 0xb6b1, - 0x81f7, 0x81f8, 0x81f9, 0xb9a9, 0x81fa, 0xd2c0, 0x81fb, 0x81fc, - 0xcfc0, 0x81fd, 0x81fe, 0xc2c2, 0x8240, 0xbdc4, 0xd5ec, 0xb2e0, - 0xc7c8, 0xbfeb, 0xd9ad, 0x8241, 0xd9af, 0x8242, 0xceea, 0xbaee, - 0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0xc7d6, 0x8248, 0x8249, - 0x824a, 0x824b, 0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0xb1e3, - 0x8251, 0x8252, 0x8253, 0xb4d9, 0xb6ed, 0xd9b4, 0x8254, 0x8255, - 0x8256, 0x8257, 0xbfa1, 0x8258, 0x8259, 0x825a, 0xd9de, 0xc7ce, - 0xc0fe, 0xd9b8, 0x825b, 0x825c, 0x825d, 0x825e, 0x825f, 0xcbd7, - 0xb7fd, 0x8260, 0xd9b5, 0x8261, 0xd9b7, 0xb1a3, 0xd3e1, 0xd9b9, - 0x8262, 0xd0c5, 0x8263, 0xd9b6, 0x8264, 0x8265, 0xd9b1, 0x8266, - 0xd9b2, 0xc1a9, 0xd9b3, 0x8267, 0x8268, 0xbcf3, 0xd0de, 0xb8a9, - 0x8269, 0xbee3, 0x826a, 0xd9bd, 0x826b, 0x826c, 0x826d, 0x826e, - 0xd9ba, 0x826f, 0xb0b3, 0x8270, 0x8271, 0x8272, 0xd9c2, 0x8273, - /* 0x5000 .. 0x50ff */ - 0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827a, 0x827b, - 0x827c, 0x827d, 0x827e, 0x8280, 0xd9c4, 0xb1b6, 0x8281, 0xd9bf, - 0x8282, 0x8283, 0xb5b9, 0x8284, 0xbef3, 0x8285, 0x8286, 0x8287, - 0xccc8, 0xbaf2, 0xd2d0, 0x8288, 0xd9c3, 0x8289, 0x828a, 0xbde8, - 0x828b, 0xb3ab, 0x828c, 0x828d, 0x828e, 0xd9c5, 0xbeeb, 0x828f, - 0xd9c6, 0xd9bb, 0xc4df, 0x8290, 0xd9be, 0xd9c1, 0xd9c0, 0x8291, - 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, - 0x829a, 0x829b, 0xd5ae, 0x829c, 0xd6b5, 0x829d, 0xc7e3, 0x829e, - 0x829f, 0x82a0, 0x82a1, 0xd9c8, 0x82a2, 0x82a3, 0x82a4, 0xbcd9, - 0xd9ca, 0x82a5, 0x82a6, 0x82a7, 0xd9bc, 0x82a8, 0xd9cb, 0xc6ab, - 0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0xd9c9, 0x82ae, 0x82af, - 0x82b0, 0x82b1, 0xd7f6, 0x82b2, 0xcda3, 0x82b3, 0x82b4, 0x82b5, - 0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0xbda1, 0x82bb, 0x82bc, - 0x82bd, 0x82be, 0x82bf, 0x82c0, 0xd9cc, 0x82c1, 0x82c2, 0x82c3, - 0x82c4, 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0xc5bc, 0xcdb5, - 0x82ca, 0x82cb, 0x82cc, 0xd9cd, 0x82cd, 0x82ce, 0xd9c7, 0xb3a5, - 0xbffe, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0xb8b5, 0x82d3, 0x82d4, - 0xc0fc, 0x82d5, 0x82d6, 0x82d7, 0x82d8, 0xb0f8, 0x82d9, 0x82da, - 0x82db, 0x82dc, 0x82dd, 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, - 0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, - 0x82eb, 0x82ec, 0x82ed, 0xb4f6, 0x82ee, 0xd9ce, 0x82ef, 0xd9cf, - 0xb4a2, 0xd9d0, 0x82f0, 0x82f1, 0xb4df, 0x82f2, 0x82f3, 0x82f4, - 0x82f5, 0x82f6, 0xb0c1, 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, - 0x82fc, 0x82fd, 0xd9d1, 0xc9b5, 0x82fe, 0x8340, 0x8341, 0x8342, - 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, - 0x834b, 0x834c, 0x834d, 0x834e, 0x834f, 0x8350, 0x8351, 0xcff1, - 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0xd9d2, 0x8358, - 0x8359, 0x835a, 0xc1c5, 0x835b, 0x835c, 0x835d, 0x835e, 0x835f, - 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0xd9d6, 0xc9ae, - 0x8366, 0x8367, 0x8368, 0x8369, 0xd9d5, 0xd9d4, 0xd9d7, 0x836a, - 0x836b, 0x836c, 0x836d, 0xcbdb, 0x836e, 0xbda9, 0x836f, 0x8370, - 0x8371, 0x8372, 0x8373, 0xc6a7, 0x8374, 0x8375, 0x8376, 0x8377, - /* 0x5100 .. 0x51ff */ - 0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, 0xd9d3, 0xd9d8, - 0x837e, 0x8380, 0x8381, 0xd9d9, 0x8382, 0x8383, 0x8384, 0x8385, - 0x8386, 0x8387, 0xc8e5, 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, - 0x838d, 0x838e, 0x838f, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, - 0x8395, 0xc0dc, 0x8396, 0x8397, 0x8398, 0x8399, 0x839a, 0x839b, - 0x839c, 0x839d, 0x839e, 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, - 0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, - 0x83ac, 0x83ad, 0x83ae, 0x83af, 0x83b0, 0x83b1, 0x83b2, 0xb6f9, - 0xd8a3, 0xd4ca, 0x83b3, 0xd4aa, 0xd0d6, 0xb3e4, 0xd5d7, 0x83b4, - 0xcfc8, 0xb9e2, 0x83b5, 0xbfcb, 0x83b6, 0xc3e2, 0x83b7, 0x83b8, - 0x83b9, 0xb6d2, 0x83ba, 0x83bb, 0xcdc3, 0xd9ee, 0xd9f0, 0x83bc, - 0x83bd, 0x83be, 0xb5b3, 0x83bf, 0xb6b5, 0x83c0, 0x83c1, 0x83c2, - 0x83c3, 0x83c4, 0xbea4, 0x83c5, 0x83c6, 0xc8eb, 0x83c7, 0x83c8, - 0xc8ab, 0x83c9, 0x83ca, 0xb0cb, 0xb9ab, 0xc1f9, 0xd9e2, 0x83cb, - 0xc0bc, 0xb9b2, 0x83cc, 0xb9d8, 0xd0cb, 0xb1f8, 0xc6e4, 0xbedf, - 0xb5e4, 0xd7c8, 0x83cd, 0xd1f8, 0xbce6, 0xcade, 0x83ce, 0x83cf, - 0xbcbd, 0xd9e6, 0xd8e7, 0x83d0, 0x83d1, 0xc4da, 0x83d2, 0x83d3, - 0xb8d4, 0xc8bd, 0x83d4, 0x83d5, 0xb2e1, 0xd4d9, 0x83d6, 0x83d7, - 0x83d8, 0x83d9, 0xc3b0, 0x83da, 0x83db, 0xc3e1, 0xdaa2, 0xc8df, - 0x83dc, 0xd0b4, 0x83dd, 0xbefc, 0xc5a9, 0x83de, 0x83df, 0x83e0, - 0xb9da, 0x83e1, 0xdaa3, 0x83e2, 0xd4a9, 0xdaa4, 0x83e3, 0x83e4, - 0x83e5, 0x83e6, 0x83e7, 0xd9fb, 0xb6ac, 0x83e8, 0x83e9, 0xb7eb, - 0xb1f9, 0xd9fc, 0xb3e5, 0xbef6, 0x83ea, 0xbff6, 0xd2b1, 0xc0e4, - 0x83eb, 0x83ec, 0x83ed, 0xb6b3, 0xd9fe, 0xd9fd, 0x83ee, 0x83ef, - 0xbebb, 0x83f0, 0x83f1, 0x83f2, 0xc6e0, 0x83f3, 0xd7bc, 0xdaa1, - 0x83f4, 0xc1b9, 0x83f5, 0xb5f2, 0xc1e8, 0x83f6, 0x83f7, 0xbcf5, - 0x83f8, 0xb4d5, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, - 0x8440, 0x8441, 0x8442, 0xc1dd, 0x8443, 0xc4fd, 0x8444, 0x8445, - 0xbcb8, 0xb7b2, 0x8446, 0x8447, 0xb7ef, 0x8448, 0x8449, 0x844a, - 0x844b, 0x844c, 0x844d, 0xd9ec, 0x844e, 0xc6be, 0x844f, 0xbfad, - 0xbbcb, 0x8450, 0x8451, 0xb5ca, 0x8452, 0xdbc9, 0xd0d7, 0x8453, - 0xcdb9, 0xb0bc, 0xb3f6, 0xbbf7, 0xdbca, 0xbaaf, 0x8454, 0xd4e4, - /* 0x5200 .. 0x52ff */ - 0xb5b6, 0xb5f3, 0xd8d6, 0xc8d0, 0x8455, 0x8456, 0xb7d6, 0xc7d0, - 0xd8d7, 0x8457, 0xbfaf, 0x8458, 0x8459, 0xdbbb, 0xd8d8, 0x845a, - 0x845b, 0xd0cc, 0xbbae, 0x845c, 0x845d, 0x845e, 0xebbe, 0xc1d0, - 0xc1f5, 0xd4f2, 0xb8d5, 0xb4b4, 0x845f, 0xb3f5, 0x8460, 0x8461, - 0xc9be, 0x8462, 0x8463, 0x8464, 0xc5d0, 0x8465, 0x8466, 0x8467, - 0xc5d9, 0xc0fb, 0x8468, 0xb1f0, 0x8469, 0xd8d9, 0xb9ce, 0x846a, - 0xb5bd, 0x846b, 0x846c, 0xd8da, 0x846d, 0x846e, 0xd6c6, 0xcba2, - 0xc8af, 0xc9b2, 0xb4cc, 0xbfcc, 0x846f, 0xb9f4, 0x8470, 0xd8db, - 0xd8dc, 0xb6e7, 0xbcc1, 0xccea, 0x8471, 0x8472, 0x8473, 0x8474, - 0x8475, 0x8476, 0xcff7, 0x8477, 0xd8dd, 0xc7b0, 0x8478, 0x8479, - 0xb9d0, 0xbda3, 0x847a, 0x847b, 0xccde, 0x847c, 0xc6ca, 0x847d, - 0x847e, 0x8480, 0x8481, 0x8482, 0xd8e0, 0x8483, 0xd8de, 0x8484, - 0x8485, 0xd8df, 0x8486, 0x8487, 0x8488, 0xb0fe, 0x8489, 0xbee7, - 0x848a, 0xcaa3, 0xbcf4, 0x848b, 0x848c, 0x848d, 0x848e, 0xb8b1, - 0x848f, 0x8490, 0xb8ee, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, - 0x8496, 0x8497, 0x8498, 0x8499, 0x849a, 0xd8e2, 0x849b, 0xbdcb, - 0x849c, 0xd8e4, 0xd8e3, 0x849d, 0x849e, 0x849f, 0x84a0, 0x84a1, - 0xc5fc, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8, - 0xd8e5, 0x84a9, 0x84aa, 0xd8e6, 0x84ab, 0x84ac, 0x84ad, 0x84ae, - 0x84af, 0x84b0, 0x84b1, 0xc1a6, 0x84b2, 0xc8b0, 0xb0ec, 0xb9a6, - 0xbcd3, 0xcef1, 0xdbbd, 0xc1d3, 0x84b3, 0x84b4, 0x84b5, 0x84b6, - 0xb6af, 0xd6fa, 0xc5ac, 0xbdd9, 0xdbbe, 0xdbbf, 0x84b7, 0x84b8, - 0x84b9, 0xc0f8, 0xbea2, 0xc0cd, 0x84ba, 0x84bb, 0x84bc, 0x84bd, - 0x84be, 0x84bf, 0x84c0, 0x84c1, 0x84c2, 0x84c3, 0xdbc0, 0xcac6, - 0x84c4, 0x84c5, 0x84c6, 0xb2aa, 0x84c7, 0x84c8, 0x84c9, 0xd3c2, - 0x84ca, 0xc3e3, 0x84cb, 0xd1ab, 0x84cc, 0x84cd, 0x84ce, 0x84cf, - 0xdbc2, 0x84d0, 0xc0d5, 0x84d1, 0x84d2, 0x84d3, 0xdbc3, 0x84d4, - 0xbfb1, 0x84d5, 0x84d6, 0x84d7, 0x84d8, 0x84d9, 0x84da, 0xc4bc, - 0x84db, 0x84dc, 0x84dd, 0x84de, 0xc7da, 0x84df, 0x84e0, 0x84e1, - 0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8, 0x84e9, - 0xdbc4, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0, - 0x84f1, 0xd9e8, 0xc9d7, 0x84f2, 0x84f3, 0x84f4, 0xb9b4, 0xcef0, - /* 0x5300 .. 0x53ff */ - 0xd4c8, 0x84f5, 0x84f6, 0x84f7, 0x84f8, 0xb0fc, 0xb4d2, 0x84f9, - 0xd0d9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0xd9e9, 0x84fe, 0xdecb, - 0xd9eb, 0x8540, 0x8541, 0x8542, 0x8543, 0xd8b0, 0xbbaf, 0xb1b1, - 0x8544, 0xb3d7, 0xd8ce, 0x8545, 0x8546, 0xd4d1, 0x8547, 0x8548, - 0xbdb3, 0xbfef, 0x8549, 0xcfbb, 0x854a, 0x854b, 0xd8d0, 0x854c, - 0x854d, 0x854e, 0xb7cb, 0x854f, 0x8550, 0x8551, 0xd8d1, 0x8552, - 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, 0x855a, - 0x855b, 0xc6a5, 0xc7f8, 0xd2bd, 0x855c, 0x855d, 0xd8d2, 0xc4e4, - 0x855e, 0xcaae, 0x855f, 0xc7a7, 0x8560, 0xd8a6, 0x8561, 0xc9fd, - 0xcee7, 0xbbdc, 0xb0eb, 0x8562, 0x8563, 0x8564, 0xbbaa, 0xd0ad, - 0x8565, 0xb1b0, 0xd7e4, 0xd7bf, 0x8566, 0xb5a5, 0xc2f4, 0xc4cf, - 0x8567, 0x8568, 0xb2a9, 0x8569, 0xb2b7, 0x856a, 0xb1e5, 0xdfb2, - 0xd5bc, 0xbfa8, 0xc2ac, 0xd8d5, 0xc2b1, 0x856b, 0xd8d4, 0xced4, - 0x856c, 0xdae0, 0x856d, 0xcec0, 0x856e, 0x856f, 0xd8b4, 0xc3ae, - 0xd3a1, 0xcea3, 0x8570, 0xbcb4, 0xc8b4, 0xc2d1, 0x8571, 0xbeed, - 0xd0b6, 0x8572, 0xdae1, 0x8573, 0x8574, 0x8575, 0x8576, 0xc7e4, - 0x8577, 0x8578, 0xb3a7, 0x8579, 0xb6f2, 0xccfc, 0xc0fa, 0x857a, - 0x857b, 0xc0f7, 0x857c, 0xd1b9, 0xd1e1, 0xd8c7, 0x857d, 0x857e, - 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0xb2de, 0x8585, 0x8586, - 0xc0e5, 0x8587, 0xbaf1, 0x8588, 0x8589, 0xd8c8, 0x858a, 0xd4ad, - 0x858b, 0x858c, 0xcfe1, 0xd8c9, 0x858d, 0xd8ca, 0xcfc3, 0x858e, - 0xb3f8, 0xbec7, 0x858f, 0x8590, 0x8591, 0x8592, 0xd8cb, 0x8593, - 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0xdbcc, 0x859a, - 0x859b, 0x859c, 0x859d, 0xc8a5, 0x859e, 0x859f, 0x85a0, 0xcfd8, - 0x85a1, 0xc8fe, 0xb2ce, 0x85a2, 0x85a3, 0x85a4, 0x85a5, 0x85a6, - 0xd3d6, 0xb2e6, 0xbcb0, 0xd3d1, 0xcbab, 0xb7b4, 0x85a7, 0x85a8, - 0x85a9, 0xb7a2, 0x85aa, 0x85ab, 0xcae5, 0x85ac, 0xc8a1, 0xcadc, - 0xb1e4, 0xd0f0, 0x85ad, 0xc5d1, 0x85ae, 0x85af, 0x85b0, 0xdbc5, - 0xb5fe, 0x85b1, 0x85b2, 0xbfda, 0xb9c5, 0xbee4, 0xc1ed, 0x85b3, - 0xdfb6, 0xdfb5, 0xd6bb, 0xbdd0, 0xd5d9, 0xb0c8, 0xb6a3, 0xbfc9, - 0xcca8, 0xdfb3, 0xcab7, 0xd3d2, 0x85b4, 0xd8cf, 0xd2b6, 0xbac5, - 0xcbbe, 0xccbe, 0x85b5, 0xdfb7, 0xb5f0, 0xdfb4, 0x85b6, 0x85b7, - /* 0x5400 .. 0x54ff */ - 0x85b8, 0xd3f5, 0x85b9, 0xb3d4, 0xb8f7, 0x85ba, 0xdfba, 0x85bb, - 0xbacf, 0xbcaa, 0xb5f5, 0x85bc, 0xcdac, 0xc3fb, 0xbaf3, 0xc0f4, - 0xcdc2, 0xcff2, 0xdfb8, 0xcfc5, 0x85bd, 0xc2c0, 0xdfb9, 0xc2f0, - 0x85be, 0x85bf, 0x85c0, 0xbefd, 0x85c1, 0xc1df, 0xcdcc, 0xd2f7, - 0xb7cd, 0xdfc1, 0x85c2, 0xdfc4, 0x85c3, 0x85c4, 0xb7f1, 0xb0c9, - 0xb6d6, 0xb7d4, 0x85c5, 0xbaac, 0xccfd, 0xbfd4, 0xcbb1, 0xc6f4, - 0x85c6, 0xd6a8, 0xdfc5, 0x85c7, 0xcee2, 0xb3b3, 0x85c8, 0x85c9, - 0xcefc, 0xb4b5, 0x85ca, 0xcec7, 0xbaf0, 0x85cb, 0xcee1, 0x85cc, - 0xd1bd, 0x85cd, 0x85ce, 0xdfc0, 0x85cf, 0x85d0, 0xb4f4, 0x85d1, - 0xb3ca, 0x85d2, 0xb8e6, 0xdfbb, 0x85d3, 0x85d4, 0x85d5, 0x85d6, - 0xc4c5, 0x85d7, 0xdfbc, 0xdfbd, 0xdfbe, 0xc5bb, 0xdfbf, 0xdfc2, - 0xd4b1, 0xdfc3, 0x85d8, 0xc7ba, 0xced8, 0x85d9, 0x85da, 0x85db, - 0x85dc, 0x85dd, 0xc4d8, 0x85de, 0xdfca, 0x85df, 0xdfcf, 0x85e0, - 0xd6dc, 0x85e1, 0x85e2, 0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7, - 0x85e8, 0xdfc9, 0xdfda, 0xceb6, 0x85e9, 0xbac7, 0xdfce, 0xdfc8, - 0xc5de, 0x85ea, 0x85eb, 0xc9eb, 0xbaf4, 0xc3fc, 0x85ec, 0x85ed, - 0xbed7, 0x85ee, 0xdfc6, 0x85ef, 0xdfcd, 0x85f0, 0xc5d8, 0x85f1, - 0x85f2, 0x85f3, 0x85f4, 0xd5a6, 0xbacd, 0x85f5, 0xbecc, 0xd3bd, - 0xb8c0, 0x85f6, 0xd6e4, 0x85f7, 0xdfc7, 0xb9be, 0xbfa7, 0x85f8, - 0x85f9, 0xc1fc, 0xdfcb, 0xdfcc, 0x85fa, 0xdfd0, 0x85fb, 0x85fc, - 0x85fd, 0x85fe, 0x8640, 0xdfdb, 0xdfe5, 0x8641, 0xdfd7, 0xdfd6, - 0xd7c9, 0xdfe3, 0xdfe4, 0xe5eb, 0xd2a7, 0xdfd2, 0x8642, 0xbfa9, - 0x8643, 0xd4db, 0x8644, 0xbfc8, 0xdfd4, 0x8645, 0x8646, 0x8647, - 0xcfcc, 0x8648, 0x8649, 0xdfdd, 0x864a, 0xd1ca, 0x864b, 0xdfde, - 0xb0a7, 0xc6b7, 0xdfd3, 0x864c, 0xbae5, 0x864d, 0xb6df, 0xcddb, - 0xb9fe, 0xd4d5, 0x864e, 0x864f, 0xdfdf, 0xcfec, 0xb0a5, 0xdfe7, - 0xdfd1, 0xd1c6, 0xdfd5, 0xdfd8, 0xdfd9, 0xdfdc, 0x8650, 0xbba9, - 0x8651, 0xdfe0, 0xdfe1, 0x8652, 0xdfe2, 0xdfe6, 0xdfe8, 0xd3b4, - 0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0xb8e7, 0xc5b6, 0xdfea, - 0xc9da, 0xc1a8, 0xc4c4, 0x8658, 0x8659, 0xbfde, 0xcff8, 0x865a, - 0x865b, 0x865c, 0xd5dc, 0xdfee, 0x865d, 0x865e, 0x865f, 0x8660, - 0x8661, 0x8662, 0xb2b8, 0x8663, 0xbadf, 0xdfec, 0x8664, 0xdbc1, - /* 0x5500 .. 0x55ff */ - 0x8665, 0xd1e4, 0x8666, 0x8667, 0x8668, 0x8669, 0xcbf4, 0xb4bd, - 0x866a, 0xb0a6, 0x866b, 0x866c, 0x866d, 0x866e, 0x866f, 0xdff1, - 0xccc6, 0xdff2, 0x8670, 0x8671, 0xdfed, 0x8672, 0x8673, 0x8674, - 0x8675, 0x8676, 0x8677, 0xdfe9, 0x8678, 0x8679, 0x867a, 0x867b, - 0xdfeb, 0x867c, 0xdfef, 0xdff0, 0xbbbd, 0x867d, 0x867e, 0xdff3, - 0x8680, 0x8681, 0xdff4, 0x8682, 0xbba3, 0x8683, 0xcadb, 0xcea8, - 0xe0a7, 0xb3aa, 0x8684, 0xe0a6, 0x8685, 0x8686, 0x8687, 0xe0a1, - 0x8688, 0x8689, 0x868a, 0x868b, 0xdffe, 0x868c, 0xcdd9, 0xdffc, - 0x868d, 0xdffa, 0x868e, 0xbfd0, 0xd7c4, 0x868f, 0xc9cc, 0x8690, - 0x8691, 0xdff8, 0xb0a1, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, - 0xdffd, 0x8697, 0x8698, 0x8699, 0x869a, 0xdffb, 0xe0a2, 0x869b, - 0x869c, 0x869d, 0x869e, 0x869f, 0xe0a8, 0x86a0, 0x86a1, 0x86a2, - 0x86a3, 0xb7c8, 0x86a4, 0x86a5, 0xc6a1, 0xc9b6, 0xc0b2, 0xdff5, - 0x86a6, 0x86a7, 0xc5be, 0x86a8, 0xd8c4, 0xdff9, 0xc4f6, 0x86a9, - 0x86aa, 0x86ab, 0x86ac, 0x86ad, 0x86ae, 0xe0a3, 0xe0a4, 0xe0a5, - 0xd0a5, 0x86af, 0x86b0, 0xe0b4, 0xcce4, 0x86b1, 0xe0b1, 0x86b2, - 0xbfa6, 0xe0af, 0xceb9, 0xe0ab, 0xc9c6, 0x86b3, 0x86b4, 0xc0ae, - 0xe0ae, 0xbaed, 0xbab0, 0xe0a9, 0x86b5, 0x86b6, 0x86b7, 0xdff6, - 0x86b8, 0xe0b3, 0x86b9, 0x86ba, 0xe0b8, 0x86bb, 0x86bc, 0x86bd, - 0xb4ad, 0xe0b9, 0x86be, 0x86bf, 0xcfb2, 0xbac8, 0x86c0, 0xe0b0, - 0x86c1, 0x86c2, 0x86c3, 0x86c4, 0x86c5, 0x86c6, 0x86c7, 0xd0fa, - 0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc, 0x86cd, 0x86ce, 0x86cf, - 0x86d0, 0xe0ac, 0x86d1, 0xd4fb, 0x86d2, 0xdff7, 0x86d3, 0xc5e7, - 0x86d4, 0xe0ad, 0x86d5, 0xd3f7, 0x86d6, 0xe0b6, 0xe0b7, 0x86d7, - 0x86d8, 0x86d9, 0x86da, 0x86db, 0xe0c4, 0xd0e1, 0x86dc, 0x86dd, - 0x86de, 0xe0bc, 0x86df, 0x86e0, 0xe0c9, 0xe0ca, 0x86e1, 0x86e2, - 0x86e3, 0xe0be, 0xe0aa, 0xc9a4, 0xe0c1, 0x86e4, 0xe0b2, 0x86e5, - 0x86e6, 0x86e7, 0x86e8, 0x86e9, 0xcac8, 0xe0c3, 0x86ea, 0xe0b5, - 0x86eb, 0xcecb, 0x86ec, 0xcbc3, 0xe0cd, 0xe0c6, 0xe0c2, 0x86ed, - 0xe0cb, 0x86ee, 0xe0ba, 0xe0bf, 0xe0c0, 0x86ef, 0x86f0, 0xe0c5, - 0x86f1, 0x86f2, 0xe0c7, 0xe0c8, 0x86f3, 0xe0cc, 0x86f4, 0xe0bb, - 0x86f5, 0x86f6, 0x86f7, 0x86f8, 0x86f9, 0xcbd4, 0xe0d5, 0x86fa, - /* 0x5600 .. 0x56ff */ - 0xe0d6, 0xe0d2, 0x86fb, 0x86fc, 0x86fd, 0x86fe, 0x8740, 0x8741, - 0xe0d0, 0xbcce, 0x8742, 0x8743, 0xe0d1, 0x8744, 0xb8c2, 0xd8c5, - 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, - 0xd0ea, 0x874d, 0x874e, 0xc2ef, 0x874f, 0x8750, 0xe0cf, 0xe0bd, - 0x8751, 0x8752, 0x8753, 0xe0d4, 0xe0d3, 0x8754, 0x8755, 0xe0d7, - 0x8756, 0x8757, 0x8758, 0x8759, 0xe0dc, 0xe0d8, 0x875a, 0x875b, - 0x875c, 0xd6f6, 0xb3b0, 0x875d, 0xd7ec, 0x875e, 0xcbbb, 0x875f, - 0x8760, 0xe0da, 0x8761, 0xcefb, 0x8762, 0x8763, 0x8764, 0xbad9, - 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, - 0x876d, 0x876e, 0x876f, 0x8770, 0xe0e1, 0xe0dd, 0xd2ad, 0x8771, - 0x8772, 0x8773, 0x8774, 0x8775, 0xe0e2, 0x8776, 0x8777, 0xe0db, - 0xe0d9, 0xe0df, 0x8778, 0x8779, 0xe0e0, 0x877a, 0x877b, 0x877c, - 0x877d, 0x877e, 0xe0de, 0x8780, 0xe0e4, 0x8781, 0x8782, 0x8783, - 0xc6f7, 0xd8ac, 0xd4eb, 0xe0e6, 0xcac9, 0x8784, 0x8785, 0x8786, - 0x8787, 0xe0e5, 0x8788, 0x8789, 0x878a, 0x878b, 0xb8c1, 0x878c, - 0x878d, 0x878e, 0x878f, 0xe0e7, 0xe0e8, 0x8790, 0x8791, 0x8792, - 0x8793, 0x8794, 0x8795, 0x8796, 0x8797, 0xe0e9, 0xe0e3, 0x8798, - 0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e, 0xbabf, 0xcce7, - 0x879f, 0x87a0, 0x87a1, 0xe0ea, 0x87a2, 0x87a3, 0x87a4, 0x87a5, - 0x87a6, 0x87a7, 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, - 0x87ae, 0x87af, 0x87b0, 0xcff9, 0x87b1, 0x87b2, 0x87b3, 0x87b4, - 0x87b5, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0xe0eb, - 0x87bc, 0x87bd, 0x87be, 0x87bf, 0x87c0, 0x87c1, 0x87c2, 0xc8c2, - 0x87c3, 0x87c4, 0x87c5, 0x87c6, 0xbdc0, 0x87c7, 0x87c8, 0x87c9, - 0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d1, - 0x87d2, 0x87d3, 0xc4d2, 0x87d4, 0x87d5, 0x87d6, 0x87d7, 0x87d8, - 0x87d9, 0x87da, 0x87db, 0x87dc, 0xe0ec, 0x87dd, 0x87de, 0xe0ed, - 0x87df, 0x87e0, 0xc7f4, 0xcbc4, 0x87e1, 0xe0ee, 0xbbd8, 0xd8b6, - 0xd2f2, 0xe0ef, 0xcdc5, 0x87e2, 0xb6da, 0x87e3, 0x87e4, 0x87e5, - 0x87e6, 0x87e7, 0x87e8, 0xe0f1, 0x87e9, 0xd4b0, 0x87ea, 0x87eb, - 0xc0a7, 0xb4d1, 0x87ec, 0x87ed, 0xcea7, 0xe0f0, 0x87ee, 0x87ef, - 0x87f0, 0xe0f2, 0xb9cc, 0x87f1, 0x87f2, 0xb9fa, 0xcdbc, 0xe0f3, - /* 0x5700 .. 0x57ff */ - 0x87f3, 0x87f4, 0x87f5, 0xc6d4, 0xe0f4, 0x87f6, 0xd4b2, 0x87f7, - 0xc8a6, 0xe0f6, 0xe0f5, 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, - 0x87fd, 0x87fe, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, - 0x8846, 0x8847, 0x8848, 0x8849, 0xe0f7, 0x884a, 0x884b, 0xcdc1, - 0x884c, 0x884d, 0x884e, 0xcaa5, 0x884f, 0x8850, 0x8851, 0x8852, - 0xd4da, 0xdbd7, 0xdbd9, 0x8853, 0xdbd8, 0xb9e7, 0xdbdc, 0xdbdd, - 0xb5d8, 0x8854, 0x8855, 0xdbda, 0x8856, 0x8857, 0x8858, 0x8859, - 0x885a, 0xdbdb, 0xb3a1, 0xdbdf, 0x885b, 0x885c, 0xbbf8, 0x885d, - 0xd6b7, 0x885e, 0xdbe0, 0x885f, 0x8860, 0x8861, 0x8862, 0xbef9, - 0x8863, 0x8864, 0xb7bb, 0x8865, 0xdbd0, 0xccae, 0xbfb2, 0xbbb5, - 0xd7f8, 0xbfd3, 0x8866, 0x8867, 0x8868, 0x8869, 0x886a, 0xbfe9, - 0x886b, 0x886c, 0xbce1, 0xccb3, 0xdbde, 0xb0d3, 0xceeb, 0xb7d8, - 0xd7b9, 0xc6c2, 0x886d, 0x886e, 0xc0a4, 0x886f, 0xccb9, 0x8870, - 0xdbe7, 0xdbe1, 0xc6ba, 0xdbe3, 0x8871, 0xdbe8, 0x8872, 0xc5f7, - 0x8873, 0x8874, 0x8875, 0xdbea, 0x8876, 0x8877, 0xdbe9, 0xbfc0, - 0x8878, 0x8879, 0x887a, 0xdbe6, 0xdbe5, 0x887b, 0x887c, 0x887d, - 0x887e, 0x8880, 0xb4b9, 0xc0ac, 0xc2a2, 0xdbe2, 0xdbe4, 0x8881, - 0x8882, 0x8883, 0x8884, 0xd0cd, 0xdbed, 0x8885, 0x8886, 0x8887, - 0x8888, 0x8889, 0xc0dd, 0xdbf2, 0x888a, 0x888b, 0x888c, 0x888d, - 0x888e, 0x888f, 0x8890, 0xb6e2, 0x8891, 0x8892, 0x8893, 0x8894, - 0xdbf3, 0xdbd2, 0xb9b8, 0xd4ab, 0xdbec, 0x8895, 0xbfd1, 0xdbf0, - 0x8896, 0xdbd1, 0x8897, 0xb5e6, 0x8898, 0xdbeb, 0xbfe5, 0x8899, - 0x889a, 0x889b, 0xdbee, 0x889c, 0xdbf1, 0x889d, 0x889e, 0x889f, - 0xdbf9, 0x88a0, 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, - 0x88a7, 0x88a8, 0xb9a1, 0xb0a3, 0x88a9, 0x88aa, 0x88ab, 0x88ac, - 0x88ad, 0x88ae, 0x88af, 0xc2f1, 0x88b0, 0x88b1, 0xb3c7, 0xdbef, - 0x88b2, 0x88b3, 0xdbf8, 0x88b4, 0xc6d2, 0xdbf4, 0x88b5, 0x88b6, - 0xdbf5, 0xdbf7, 0xdbf6, 0x88b7, 0x88b8, 0xdbfe, 0x88b9, 0xd3f2, - 0xb2ba, 0x88ba, 0x88bb, 0x88bc, 0xdbfd, 0x88bd, 0x88be, 0x88bf, - 0x88c0, 0x88c1, 0x88c2, 0x88c3, 0x88c4, 0xdca4, 0x88c5, 0xdbfb, - 0x88c6, 0x88c7, 0x88c8, 0x88c9, 0xdbfa, 0x88ca, 0x88cb, 0x88cc, - 0xdbfc, 0xc5e0, 0xbbf9, 0x88cd, 0x88ce, 0xdca3, 0x88cf, 0x88d0, - /* 0x5800 .. 0x58ff */ - 0xdca5, 0x88d1, 0xccc3, 0x88d2, 0x88d3, 0x88d4, 0xb6d1, 0xddc0, - 0x88d5, 0x88d6, 0x88d7, 0xdca1, 0x88d8, 0xdca2, 0x88d9, 0x88da, - 0x88db, 0xc7b5, 0x88dc, 0x88dd, 0x88de, 0xb6e9, 0x88df, 0x88e0, - 0x88e1, 0xdca7, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0xdca6, 0x88e6, - 0xdca9, 0xb1a4, 0x88e7, 0x88e8, 0xb5cc, 0x88e9, 0x88ea, 0x88eb, - 0x88ec, 0x88ed, 0xbfb0, 0x88ee, 0x88ef, 0x88f0, 0x88f1, 0x88f2, - 0xd1df, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0xb6c2, 0x88f7, 0x88f8, - 0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x8940, 0x8941, - 0x8942, 0x8943, 0x8944, 0x8945, 0xdca8, 0x8946, 0x8947, 0x8948, - 0x8949, 0x894a, 0x894b, 0x894c, 0xcbfa, 0xebf3, 0x894d, 0x894e, - 0x894f, 0xcbdc, 0x8950, 0x8951, 0xcbfe, 0x8952, 0x8953, 0x8954, - 0xccc1, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0xc8fb, 0x895a, - 0x895b, 0x895c, 0x895d, 0x895e, 0x895f, 0xdcaa, 0x8960, 0x8961, - 0x8962, 0x8963, 0x8964, 0xccee, 0xdcab, 0x8965, 0x8966, 0x8967, - 0x8968, 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, - 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0xdbd3, 0x8976, - 0xdcaf, 0xdcac, 0x8977, 0xbeb3, 0x8978, 0xcafb, 0x8979, 0x897a, - 0x897b, 0xdcad, 0x897c, 0x897d, 0x897e, 0x8980, 0x8981, 0x8982, - 0x8983, 0x8984, 0xc9ca, 0xc4b9, 0x8985, 0x8986, 0x8987, 0x8988, - 0x8989, 0xc7bd, 0xdcae, 0x898a, 0x898b, 0x898c, 0xd4f6, 0xd0e6, - 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, - 0xc4ab, 0xb6d5, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899a, - 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, 0x89a2, - 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0xdbd4, 0x89a7, 0x89a8, 0x89a9, - 0x89aa, 0xb1da, 0x89ab, 0x89ac, 0x89ad, 0xdbd5, 0x89ae, 0x89af, - 0x89b0, 0x89b1, 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, - 0x89b8, 0xdbd6, 0x89b9, 0x89ba, 0x89bb, 0xbabe, 0x89bc, 0x89bd, - 0x89be, 0x89bf, 0x89c0, 0x89c1, 0x89c2, 0x89c3, 0x89c4, 0x89c5, - 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0xc8c0, 0x89ca, 0x89cb, 0x89cc, - 0x89cd, 0x89ce, 0x89cf, 0xcabf, 0xc8c9, 0x89d0, 0xd7b3, 0x89d1, - 0xc9f9, 0x89d2, 0x89d3, 0xbfc7, 0x89d4, 0x89d5, 0xbaf8, 0x89d6, - 0x89d7, 0xd2bc, 0x89d8, 0x89d9, 0x89da, 0x89db, 0x89dc, 0x89dd, - /* 0x5900 .. 0x59ff */ - 0x89de, 0x89df, 0xe2ba, 0x89e0, 0xb4a6, 0x89e1, 0x89e2, 0xb1b8, - 0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0xb8b4, 0x89e8, 0xcfc4, - 0x89e9, 0x89ea, 0x89eb, 0x89ec, 0xd9e7, 0xcfa6, 0xcde2, 0x89ed, - 0x89ee, 0xd9ed, 0xb6e0, 0x89ef, 0xd2b9, 0x89f0, 0x89f1, 0xb9bb, - 0x89f2, 0x89f3, 0x89f4, 0x89f5, 0xe2b9, 0xe2b7, 0x89f6, 0xb4f3, - 0x89f7, 0xccec, 0xccab, 0xb7f2, 0x89f8, 0xd8b2, 0xd1eb, 0xbabb, - 0x89f9, 0xcaa7, 0x89fa, 0x89fb, 0xcdb7, 0x89fc, 0x89fd, 0xd2c4, - 0xbfe4, 0xbcd0, 0xb6e1, 0x89fe, 0xdec5, 0x8a40, 0x8a41, 0x8a42, - 0x8a43, 0xdec6, 0xdbbc, 0x8a44, 0xd1d9, 0x8a45, 0x8a46, 0xc6e6, - 0xc4ce, 0xb7ee, 0x8a47, 0xb7dc, 0x8a48, 0x8a49, 0xbffc, 0xd7e0, - 0x8a4a, 0xc6f5, 0x8a4b, 0x8a4c, 0xb1bc, 0xdec8, 0xbdb1, 0xccd7, - 0xdeca, 0x8a4d, 0xdec9, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, - 0xb5ec, 0x8a53, 0xc9dd, 0x8a54, 0x8a55, 0xb0c2, 0x8a56, 0x8a57, - 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, - 0x8a60, 0x8a61, 0x8a62, 0xc5ae, 0xc5ab, 0x8a63, 0xc4cc, 0x8a64, - 0xbce9, 0xcbfd, 0x8a65, 0x8a66, 0x8a67, 0xbac3, 0x8a68, 0x8a69, - 0x8a6a, 0xe5f9, 0xc8e7, 0xe5fa, 0xcdfd, 0x8a6b, 0xd7b1, 0xb8be, - 0xc2e8, 0x8a6c, 0xc8d1, 0x8a6d, 0x8a6e, 0xe5fb, 0x8a6f, 0x8a70, - 0x8a71, 0x8a72, 0xb6ca, 0xbccb, 0x8a73, 0x8a74, 0xd1fd, 0xe6a1, - 0x8a75, 0xc3ee, 0x8a76, 0x8a77, 0x8a78, 0x8a79, 0xe6a4, 0x8a7a, - 0x8a7b, 0x8a7c, 0x8a7d, 0xe5fe, 0xe6a5, 0xcdd7, 0x8a7e, 0x8a80, - 0xb7c1, 0xe5fc, 0xe5fd, 0xe6a3, 0x8a81, 0x8a82, 0xc4dd, 0xe6a8, - 0x8a83, 0x8a84, 0xe6a7, 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, - 0x8a8a, 0xc3c3, 0x8a8b, 0xc6de, 0x8a8c, 0x8a8d, 0xe6aa, 0x8a8e, - 0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94, 0xc4b7, 0x8a95, - 0x8a96, 0x8a97, 0xe6a2, 0xcabc, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, - 0xbde3, 0xb9c3, 0xe6a6, 0xd0d5, 0xceaf, 0x8a9c, 0x8a9d, 0xe6a9, - 0xe6b0, 0x8a9e, 0xd2a6, 0x8a9f, 0xbdaa, 0xe6ad, 0x8aa0, 0x8aa1, - 0x8aa2, 0x8aa3, 0x8aa4, 0xe6af, 0x8aa5, 0xc0d1, 0x8aa6, 0x8aa7, - 0xd2cc, 0x8aa8, 0x8aa9, 0x8aaa, 0xbca7, 0x8aab, 0x8aac, 0x8aad, - 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, 0x8ab5, - 0x8ab6, 0xe6b1, 0x8ab7, 0xd2f6, 0x8ab8, 0x8ab9, 0x8aba, 0xd7cb, - /* 0x5a00 .. 0x5aff */ - 0x8abb, 0xcdfe, 0x8abc, 0xcdde, 0xc2a6, 0xe6ab, 0xe6ac, 0xbdbf, - 0xe6ae, 0xe6b3, 0x8abd, 0x8abe, 0xe6b2, 0x8abf, 0x8ac0, 0x8ac1, - 0x8ac2, 0xe6b6, 0x8ac3, 0xe6b8, 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, - 0xc4ef, 0x8ac8, 0x8ac9, 0x8aca, 0xc4c8, 0x8acb, 0x8acc, 0xbeea, - 0xc9ef, 0x8acd, 0x8ace, 0xe6b7, 0x8acf, 0xb6f0, 0x8ad0, 0x8ad1, - 0x8ad2, 0xc3e4, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, - 0x8ad9, 0xd3e9, 0xe6b4, 0x8ada, 0xe6b5, 0x8adb, 0xc8a2, 0x8adc, - 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0xe6bd, 0x8ae1, 0x8ae2, 0x8ae3, - 0xe6b9, 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0xc6c5, 0x8ae9, - 0x8aea, 0xcdf1, 0xe6bb, 0x8aeb, 0x8aec, 0x8aed, 0x8aee, 0x8aef, - 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, 0xe6bc, 0x8af5, 0x8af6, - 0x8af7, 0x8af8, 0xbbe9, 0x8af9, 0x8afa, 0x8afb, 0x8afc, 0x8afd, - 0x8afe, 0x8b40, 0xe6be, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0xe6ba, - 0x8b45, 0x8b46, 0xc0b7, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, - 0x8b4c, 0x8b4d, 0x8b4e, 0x8b4f, 0xd3a4, 0xe6bf, 0xc9f4, 0xe6c3, - 0x8b50, 0x8b51, 0xe6c4, 0x8b52, 0x8b53, 0x8b54, 0x8b55, 0xd0f6, - 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, - 0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, - 0x8b66, 0x8b67, 0xc3bd, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, - 0x8b6d, 0x8b6e, 0xc3c4, 0xe6c2, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, - 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, - 0x8b7b, 0x8b7c, 0xe6c1, 0x8b7d, 0x8b7e, 0x8b80, 0x8b81, 0x8b82, - 0x8b83, 0x8b84, 0xe6c7, 0xcfb1, 0x8b85, 0xebf4, 0x8b86, 0x8b87, - 0xe6ca, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0xe6c5, 0x8b8d, - 0x8b8e, 0xbcde, 0xc9a9, 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, - 0x8b94, 0xbcb5, 0x8b95, 0x8b96, 0xcfd3, 0x8b97, 0x8b98, 0x8b99, - 0x8b9a, 0x8b9b, 0xe6c8, 0x8b9c, 0xe6c9, 0x8b9d, 0xe6ce, 0x8b9e, - 0xe6d0, 0x8b9f, 0x8ba0, 0x8ba1, 0xe6d1, 0x8ba2, 0x8ba3, 0x8ba4, - 0xe6cb, 0xb5d5, 0x8ba5, 0xe6cc, 0x8ba6, 0x8ba7, 0xe6cf, 0x8ba8, - 0x8ba9, 0xc4db, 0x8baa, 0xe6c6, 0x8bab, 0x8bac, 0x8bad, 0x8bae, - 0x8baf, 0xe6cd, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, - 0x8bb6, 0x8bb7, 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, - /* 0x5b00 .. 0x5bff */ - 0x8bbe, 0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, - 0x8bc6, 0xe6d2, 0x8bc7, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, - 0x8bcd, 0x8bce, 0x8bcf, 0x8bd0, 0x8bd1, 0x8bd2, 0xe6d4, 0xe6d3, - 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, 0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, - 0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, 0x8bdf, 0x8be0, 0x8be1, 0x8be2, - 0x8be3, 0x8be4, 0x8be5, 0x8be6, 0x8be7, 0x8be8, 0x8be9, 0x8bea, - 0x8beb, 0x8bec, 0xe6d5, 0x8bed, 0xd9f8, 0x8bee, 0x8bef, 0xe6d6, - 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, 0x8bf7, - 0xe6d7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, - 0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, - 0xd7d3, 0xe6dd, 0x8c48, 0xe6de, 0xbfd7, 0xd4d0, 0x8c49, 0xd7d6, - 0xb4e6, 0xcbef, 0xe6da, 0xd8c3, 0xd7ce, 0xd0a2, 0x8c4a, 0xc3cf, - 0x8c4b, 0x8c4c, 0xe6df, 0xbcbe, 0xb9c2, 0xe6db, 0xd1a7, 0x8c4d, - 0x8c4e, 0xbaa2, 0xc2cf, 0x8c4f, 0xd8ab, 0x8c50, 0x8c51, 0x8c52, - 0xcaeb, 0xe5ee, 0x8c53, 0xe6dc, 0x8c54, 0xb7f5, 0x8c55, 0x8c56, - 0x8c57, 0x8c58, 0xc8e6, 0x8c59, 0x8c5a, 0xc4f5, 0x8c5b, 0x8c5c, - 0xe5b2, 0xc4fe, 0x8c5d, 0xcbfc, 0xe5b3, 0xd5ac, 0x8c5e, 0xd3ee, - 0xcad8, 0xb0b2, 0x8c5f, 0xcbce, 0xcdea, 0x8c60, 0x8c61, 0xbaea, - 0x8c62, 0x8c63, 0x8c64, 0xe5b5, 0x8c65, 0xe5b4, 0x8c66, 0xd7da, - 0xb9d9, 0xd6e6, 0xb6a8, 0xcdf0, 0xd2cb, 0xb1a6, 0xcab5, 0x8c67, - 0xb3e8, 0xc9f3, 0xbfcd, 0xd0fb, 0xcad2, 0xe5b6, 0xbbc2, 0x8c68, - 0x8c69, 0x8c6a, 0xcfdc, 0xb9ac, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, - 0xd4d7, 0x8c6f, 0x8c70, 0xbaa6, 0xd1e7, 0xcffc, 0xbcd2, 0x8c71, - 0xe5b7, 0xc8dd, 0x8c72, 0x8c73, 0x8c74, 0xbfed, 0xb1f6, 0xcbde, - 0x8c75, 0x8c76, 0xbcc5, 0x8c77, 0xbcc4, 0xd2fa, 0xc3dc, 0xbfdc, - 0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0xb8bb, 0x8c7c, 0x8c7d, 0x8c7e, - 0xc3c2, 0x8c80, 0xbaae, 0xd4a2, 0x8c81, 0x8c82, 0x8c83, 0x8c84, - 0x8c85, 0x8c86, 0x8c87, 0x8c88, 0x8c89, 0xc7de, 0xc4af, 0xb2ec, - 0x8c8a, 0xb9d1, 0x8c8b, 0x8c8c, 0xe5bb, 0xc1c8, 0x8c8d, 0x8c8e, - 0xd5af, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93, 0xe5bc, 0x8c94, - 0xe5be, 0x8c95, 0x8c96, 0x8c97, 0x8c98, 0x8c99, 0x8c9a, 0x8c9b, - 0xb4e7, 0xb6d4, 0xcbc2, 0xd1b0, 0xb5bc, 0x8c9c, 0x8c9d, 0xcad9, - /* 0x5c00 .. 0x5cff */ - 0x8c9e, 0xb7e2, 0x8c9f, 0x8ca0, 0xc9e4, 0x8ca1, 0xbdab, 0x8ca2, - 0x8ca3, 0xcebe, 0xd7f0, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0xd0a1, - 0x8ca8, 0xc9d9, 0x8ca9, 0x8caa, 0xb6fb, 0xe6d8, 0xbce2, 0x8cab, - 0xb3be, 0x8cac, 0xc9d0, 0x8cad, 0xe6d9, 0xb3a2, 0x8cae, 0x8caf, - 0x8cb0, 0x8cb1, 0xdecc, 0x8cb2, 0xd3c8, 0xdecd, 0x8cb3, 0xd2a2, - 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0xdece, 0x8cb8, 0x8cb9, 0x8cba, - 0x8cbb, 0xbecd, 0x8cbc, 0x8cbd, 0xdecf, 0x8cbe, 0x8cbf, 0x8cc0, - 0xcaac, 0xd2fc, 0xb3df, 0xe5ea, 0xc4e1, 0xbea1, 0xceb2, 0xc4f2, - 0xbed6, 0xc6a8, 0xb2e3, 0x8cc1, 0x8cc2, 0xbed3, 0x8cc3, 0x8cc4, - 0xc7fc, 0xcceb, 0xbdec, 0xcedd, 0x8cc5, 0x8cc6, 0xcaba, 0xc6c1, - 0xe5ec, 0xd0bc, 0x8cc7, 0x8cc8, 0x8cc9, 0xd5b9, 0x8cca, 0x8ccb, - 0x8ccc, 0xe5ed, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, 0xcaf4, 0x8cd1, - 0xcdc0, 0xc2c5, 0x8cd2, 0xe5ef, 0x8cd3, 0xc2c4, 0xe5f0, 0x8cd4, - 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0xe5f8, 0xcdcd, - 0x8cdb, 0xc9bd, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, - 0x8ce2, 0xd2d9, 0xe1a8, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0xd3ec, - 0x8ce7, 0xcbea, 0xc6f1, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, - 0xe1ac, 0x8ced, 0x8cee, 0x8cef, 0xe1a7, 0xe1a9, 0x8cf0, 0x8cf1, - 0xe1aa, 0xe1af, 0x8cf2, 0x8cf3, 0xb2ed, 0x8cf4, 0xe1ab, 0xb8da, - 0xe1ad, 0xe1ae, 0xe1b0, 0xb5ba, 0xe1b1, 0x8cf5, 0x8cf6, 0x8cf7, - 0x8cf8, 0x8cf9, 0xe1b3, 0xe1b8, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, - 0x8cfe, 0xd1d2, 0x8d40, 0xe1b6, 0xe1b5, 0xc1eb, 0x8d41, 0x8d42, - 0x8d43, 0xe1b7, 0x8d44, 0xd4c0, 0x8d45, 0xe1b2, 0x8d46, 0xe1ba, - 0xb0b6, 0x8d47, 0x8d48, 0x8d49, 0x8d4a, 0xe1b4, 0x8d4b, 0xbff9, - 0x8d4c, 0xe1b9, 0x8d4d, 0x8d4e, 0xe1bb, 0x8d4f, 0x8d50, 0x8d51, - 0x8d52, 0x8d53, 0x8d54, 0xe1be, 0x8d55, 0x8d56, 0x8d57, 0x8d58, - 0x8d59, 0x8d5a, 0xe1bc, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f, - 0x8d60, 0xd6c5, 0x8d61, 0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, - 0x8d67, 0xcfbf, 0x8d68, 0x8d69, 0xe1bd, 0xe1bf, 0xc2cd, 0x8d6a, - 0xb6eb, 0x8d6b, 0xd3f8, 0x8d6c, 0x8d6d, 0xc7cd, 0x8d6e, 0x8d6f, - 0xb7e5, 0x8d70, 0x8d71, 0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, - 0x8d77, 0x8d78, 0x8d79, 0xbefe, 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, - /* 0x5d00 .. 0x5dff */ - 0x8d7e, 0x8d80, 0xe1c0, 0xe1c1, 0x8d81, 0x8d82, 0xe1c7, 0xb3e7, - 0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, 0x8d88, 0xc6e9, 0x8d89, - 0x8d8a, 0x8d8b, 0x8d8c, 0x8d8d, 0xb4de, 0x8d8e, 0xd1c2, 0x8d8f, - 0x8d90, 0x8d91, 0x8d92, 0xe1c8, 0x8d93, 0x8d94, 0xe1c6, 0x8d95, - 0x8d96, 0x8d97, 0x8d98, 0x8d99, 0xe1c5, 0x8d9a, 0xe1c3, 0xe1c2, - 0x8d9b, 0xb1c0, 0x8d9c, 0x8d9d, 0x8d9e, 0xd5b8, 0xe1c4, 0x8d9f, - 0x8da0, 0x8da1, 0x8da2, 0x8da3, 0xe1cb, 0x8da4, 0x8da5, 0x8da6, - 0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab, 0xe1cc, 0xe1ca, 0x8dac, - 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db2, 0x8db3, 0xeffa, - 0x8db4, 0x8db5, 0xe1d3, 0xe1d2, 0xc7b6, 0x8db6, 0x8db7, 0x8db8, - 0x8db9, 0x8dba, 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf, 0x8dc0, - 0xe1c9, 0x8dc1, 0x8dc2, 0xe1ce, 0x8dc3, 0xe1d0, 0x8dc4, 0x8dc5, - 0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, 0x8dcb, 0x8dcc, 0x8dcd, - 0x8dce, 0xe1d4, 0x8dcf, 0xe1d1, 0xe1cd, 0x8dd0, 0x8dd1, 0xe1cf, - 0x8dd2, 0x8dd3, 0x8dd4, 0x8dd5, 0xe1d5, 0x8dd6, 0x8dd7, 0x8dd8, - 0x8dd9, 0x8dda, 0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, - 0x8de1, 0x8de2, 0xe1d6, 0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7, - 0x8de8, 0x8de9, 0x8dea, 0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def, - 0x8df0, 0x8df1, 0x8df2, 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7, - 0x8df8, 0xe1d7, 0x8df9, 0x8dfa, 0x8dfb, 0xe1d8, 0x8dfc, 0x8dfd, - 0x8dfe, 0x8e40, 0x8e41, 0x8e42, 0x8e43, 0x8e44, 0x8e45, 0x8e46, - 0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4d, 0x8e4e, - 0x8e4f, 0x8e50, 0x8e51, 0x8e52, 0x8e53, 0x8e54, 0x8e55, 0xe1da, - 0x8e56, 0x8e57, 0x8e58, 0x8e59, 0x8e5a, 0x8e5b, 0x8e5c, 0x8e5d, - 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0xe1db, 0x8e63, 0x8e64, - 0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0xcea1, 0x8e6a, 0x8e6b, - 0x8e6c, 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e72, 0x8e73, - 0x8e74, 0x8e75, 0x8e76, 0xe7dd, 0x8e77, 0xb4a8, 0xd6dd, 0x8e78, - 0x8e79, 0xd1b2, 0xb3b2, 0x8e7a, 0x8e7b, 0xb9a4, 0xd7f3, 0xc7c9, - 0xbede, 0xb9ae, 0x8e7c, 0xced7, 0x8e7d, 0x8e7e, 0xb2ee, 0xdbcf, - 0x8e80, 0xbcba, 0xd2d1, 0xcbc8, 0xb0cd, 0x8e81, 0x8e82, 0xcfef, - 0x8e83, 0x8e84, 0x8e85, 0x8e86, 0x8e87, 0xd9e3, 0xbded, 0x8e88, - /* 0x5e00 .. 0x5eff */ - 0x8e89, 0xb1d2, 0xcad0, 0xb2bc, 0x8e8a, 0xcba7, 0xb7ab, 0x8e8b, - 0xcaa6, 0x8e8c, 0x8e8d, 0x8e8e, 0xcfa3, 0x8e8f, 0x8e90, 0xe0f8, - 0xd5ca, 0xe0fb, 0x8e91, 0x8e92, 0xe0fa, 0xc5c1, 0xccfb, 0x8e93, - 0xc1b1, 0xe0f9, 0xd6e3, 0xb2af, 0xd6c4, 0xb5db, 0x8e94, 0x8e95, - 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0xb4f8, 0xd6a1, - 0x8e9c, 0x8e9d, 0x8e9e, 0x8e9f, 0x8ea0, 0xcfaf, 0xb0ef, 0x8ea1, - 0x8ea2, 0xe0fc, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, 0x8ea7, 0xe1a1, - 0xb3a3, 0x8ea8, 0x8ea9, 0xe0fd, 0xe0fe, 0xc3b1, 0x8eaa, 0x8eab, - 0x8eac, 0x8ead, 0xc3dd, 0x8eae, 0xe1a2, 0xb7f9, 0x8eaf, 0x8eb0, - 0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, 0xbbcf, 0x8eb5, 0x8eb6, 0x8eb7, - 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0xe1a3, 0xc4bb, 0x8ebc, 0x8ebd, - 0x8ebe, 0x8ebf, 0x8ec0, 0xe1a4, 0x8ec1, 0x8ec2, 0xe1a5, 0x8ec3, - 0x8ec4, 0xe1a6, 0xb4b1, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, - 0x8eca, 0x8ecb, 0x8ecc, 0x8ecd, 0x8ece, 0x8ecf, 0x8ed0, 0x8ed1, - 0x8ed2, 0x8ed3, 0xb8c9, 0xc6bd, 0xc4ea, 0x8ed4, 0xb2a2, 0x8ed5, - 0xd0d2, 0x8ed6, 0xe7db, 0xbbc3, 0xd3d7, 0xd3c4, 0x8ed7, 0xb9e3, - 0xe2cf, 0x8ed8, 0x8ed9, 0x8eda, 0xd7af, 0x8edb, 0xc7ec, 0xb1d3, - 0x8edc, 0x8edd, 0xb4b2, 0xe2d1, 0x8ede, 0x8edf, 0x8ee0, 0xd0f2, - 0xc2ae, 0xe2d0, 0x8ee1, 0xbfe2, 0xd3a6, 0xb5d7, 0xe2d2, 0xb5ea, - 0x8ee2, 0xc3ed, 0xb8fd, 0x8ee3, 0xb8ae, 0x8ee4, 0xc5d3, 0xb7cf, - 0xe2d4, 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0xe2d3, 0xb6c8, 0xd7f9, - 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, 0x8eed, 0xcda5, 0x8eee, 0x8eef, - 0x8ef0, 0x8ef1, 0x8ef2, 0xe2d8, 0x8ef3, 0xe2d6, 0xcafc, 0xbfb5, - 0xd3b9, 0xe2d5, 0x8ef4, 0x8ef5, 0x8ef6, 0x8ef7, 0xe2d7, 0x8ef8, - 0x8ef9, 0x8efa, 0x8efb, 0x8efc, 0x8efd, 0x8efe, 0x8f40, 0x8f41, - 0x8f42, 0xc1ae, 0xc0c8, 0x8f43, 0x8f44, 0x8f45, 0x8f46, 0x8f47, - 0x8f48, 0xe2db, 0xe2da, 0xc0aa, 0x8f49, 0x8f4a, 0xc1ce, 0x8f4b, - 0x8f4c, 0x8f4d, 0x8f4e, 0xe2dc, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, - 0x8f53, 0x8f54, 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, - 0xe2dd, 0x8f5b, 0xe2de, 0x8f5c, 0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, - 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0xdbc8, 0x8f65, 0xd1d3, 0xcda2, - 0x8f66, 0x8f67, 0xbda8, 0x8f68, 0x8f69, 0x8f6a, 0xdec3, 0xd8a5, - /* 0x5f00 .. 0x5fff */ - 0xbfaa, 0xdbcd, 0xd2ec, 0xc6fa, 0xc5aa, 0x8f6b, 0x8f6c, 0x8f6d, - 0xdec4, 0x8f6e, 0xb1d7, 0xdfae, 0x8f6f, 0x8f70, 0x8f71, 0xcabd, - 0x8f72, 0xdfb1, 0x8f73, 0xb9ad, 0x8f74, 0xd2fd, 0x8f75, 0xb8a5, - 0xbaeb, 0x8f76, 0x8f77, 0xb3da, 0x8f78, 0x8f79, 0x8f7a, 0xb5dc, - 0xd5c5, 0x8f7b, 0x8f7c, 0x8f7d, 0x8f7e, 0xc3d6, 0xcfd2, 0xbba1, - 0x8f80, 0xe5f3, 0xe5f2, 0x8f81, 0x8f82, 0xe5f4, 0x8f83, 0xcde4, - 0x8f84, 0xc8f5, 0x8f85, 0x8f86, 0x8f87, 0x8f88, 0x8f89, 0x8f8a, - 0x8f8b, 0xb5af, 0xc7bf, 0x8f8c, 0xe5f6, 0x8f8d, 0x8f8e, 0x8f8f, - 0xecb0, 0x8f90, 0x8f91, 0x8f92, 0x8f93, 0x8f94, 0x8f95, 0x8f96, - 0x8f97, 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e, - 0xe5e6, 0x8f9f, 0xb9e9, 0xb5b1, 0x8fa0, 0xc2bc, 0xe5e8, 0xe5e7, - 0xe5e9, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0xd2cd, 0x8fa5, 0x8fa6, - 0x8fa7, 0xe1ea, 0xd0ce, 0x8fa8, 0xcdae, 0x8fa9, 0xd1e5, 0x8faa, - 0x8fab, 0xb2ca, 0xb1eb, 0x8fac, 0xb1f2, 0xc5ed, 0x8fad, 0x8fae, - 0xd5c3, 0xd3b0, 0x8faf, 0xe1dc, 0x8fb0, 0x8fb1, 0x8fb2, 0xe1dd, - 0x8fb3, 0xd2db, 0x8fb4, 0xb3b9, 0xb1cb, 0x8fb5, 0x8fb6, 0x8fb7, - 0xcdf9, 0xd5f7, 0xe1de, 0x8fb8, 0xbeb6, 0xb4fd, 0x8fb9, 0xe1df, - 0xbadc, 0xe1e0, 0xbbb2, 0xc2c9, 0xe1e1, 0x8fba, 0x8fbb, 0x8fbc, - 0xd0ec, 0x8fbd, 0xcdbd, 0x8fbe, 0x8fbf, 0xe1e2, 0x8fc0, 0xb5c3, - 0xc5c7, 0xe1e3, 0x8fc1, 0x8fc2, 0xe1e4, 0x8fc3, 0x8fc4, 0x8fc5, - 0x8fc6, 0xd3f9, 0x8fc7, 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, - 0xe1e5, 0x8fcd, 0xd1ad, 0x8fce, 0x8fcf, 0xe1e6, 0xcea2, 0x8fd0, - 0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0xe1e7, 0x8fd6, 0xb5c2, - 0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0xe1e8, 0xbbd5, 0x8fdb, 0x8fdc, - 0x8fdd, 0x8fde, 0x8fdf, 0xd0c4, 0xe2e0, 0xb1d8, 0xd2e4, 0x8fe0, - 0x8fe1, 0xe2e1, 0x8fe2, 0x8fe3, 0xbcc9, 0xc8cc, 0x8fe4, 0xe2e3, - 0xecfe, 0xecfd, 0xdfaf, 0x8fe5, 0x8fe6, 0x8fe7, 0xe2e2, 0xd6be, - 0xcdfc, 0xc3a6, 0x8fe8, 0x8fe9, 0x8fea, 0xe3c3, 0x8feb, 0x8fec, - 0xd6d2, 0xe2e7, 0x8fed, 0x8fee, 0xe2e8, 0x8fef, 0x8ff0, 0xd3c7, - 0x8ff1, 0x8ff2, 0xe2ec, 0xbfec, 0x8ff3, 0xe2ed, 0xe2e5, 0x8ff4, - 0x8ff5, 0xb3c0, 0x8ff6, 0x8ff7, 0x8ff8, 0xc4ee, 0x8ff9, 0x8ffa, - 0xe2ee, 0x8ffb, 0x8ffc, 0xd0c3, 0x8ffd, 0xbaf6, 0xe2e9, 0xb7de, - /* 0x6000 .. 0x60ff */ - 0xbbb3, 0xccac, 0xcbcb, 0xe2e4, 0xe2e6, 0xe2ea, 0xe2eb, 0x8ffe, - 0x9040, 0x9041, 0xe2f7, 0x9042, 0x9043, 0xe2f4, 0xd4f5, 0xe2f3, - 0x9044, 0x9045, 0xc5ad, 0x9046, 0xd5fa, 0xc5c2, 0xb2c0, 0x9047, - 0x9048, 0xe2ef, 0x9049, 0xe2f2, 0xc1af, 0xcbbc, 0x904a, 0x904b, - 0xb5a1, 0xe2f9, 0x904c, 0x904d, 0x904e, 0xbcb1, 0xe2f1, 0xd0d4, - 0xd4b9, 0xe2f5, 0xb9d6, 0xe2f6, 0x904f, 0x9050, 0x9051, 0xc7d3, - 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0xe2f0, 0x9057, 0x9058, - 0x9059, 0x905a, 0x905b, 0xd7dc, 0xeda1, 0x905c, 0x905d, 0xe2f8, - 0x905e, 0xeda5, 0xe2fe, 0xcad1, 0x905f, 0x9060, 0x9061, 0x9062, - 0x9063, 0x9064, 0x9065, 0xc1b5, 0x9066, 0xbbd0, 0x9067, 0x9068, - 0xbfd6, 0x9069, 0xbae3, 0x906a, 0x906b, 0xcba1, 0x906c, 0x906d, - 0x906e, 0xeda6, 0xeda3, 0x906f, 0x9070, 0xeda2, 0x9071, 0x9072, - 0x9073, 0x9074, 0xbbd6, 0xeda7, 0xd0f4, 0x9075, 0x9076, 0xeda4, - 0xbade, 0xb6f7, 0xe3a1, 0xb6b2, 0xccf1, 0xb9a7, 0x9077, 0xcfa2, - 0xc7a1, 0x9078, 0x9079, 0xbfd2, 0x907a, 0x907b, 0xb6f1, 0x907c, - 0xe2fa, 0xe2fb, 0xe2fd, 0xe2fc, 0xc4d5, 0xe3a2, 0x907d, 0xd3c1, - 0x907e, 0x9080, 0x9081, 0xe3a7, 0xc7c4, 0x9082, 0x9083, 0x9084, - 0x9085, 0xcfa4, 0x9086, 0x9087, 0xe3a9, 0xbab7, 0x9088, 0x9089, - 0x908a, 0x908b, 0xe3a8, 0x908c, 0xbbda, 0x908d, 0xe3a3, 0x908e, - 0x908f, 0x9090, 0xe3a4, 0xe3aa, 0x9091, 0xe3a6, 0x9092, 0xcef2, - 0xd3c6, 0x9093, 0x9094, 0xbbbc, 0x9095, 0x9096, 0xd4c3, 0x9097, - 0xc4fa, 0x9098, 0x9099, 0xeda8, 0xd0fc, 0xe3a5, 0x909a, 0xc3f5, - 0x909b, 0xe3ad, 0xb1af, 0x909c, 0xe3b2, 0x909d, 0x909e, 0x909f, - 0xbcc2, 0x90a0, 0x90a1, 0xe3ac, 0xb5bf, 0x90a2, 0x90a3, 0x90a4, - 0x90a5, 0x90a6, 0x90a7, 0x90a8, 0x90a9, 0xc7e9, 0xe3b0, 0x90aa, - 0x90ab, 0x90ac, 0xbeaa, 0xcdef, 0x90ad, 0x90ae, 0x90af, 0x90b0, - 0x90b1, 0xbbf3, 0x90b2, 0x90b3, 0x90b4, 0xcce8, 0x90b5, 0x90b6, - 0xe3af, 0x90b7, 0xe3b1, 0x90b8, 0xcfa7, 0xe3ae, 0x90b9, 0xcea9, - 0xbbdd, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0xb5eb, 0xbee5, - 0xb2d2, 0xb3cd, 0x90bf, 0xb1b9, 0xe3ab, 0xb2d1, 0xb5ac, 0xb9df, - 0xb6e8, 0x90c0, 0x90c1, 0xcfeb, 0xe3b7, 0x90c2, 0xbbcc, 0x90c3, - 0x90c4, 0xc8c7, 0xd0ca, 0x90c5, 0x90c6, 0x90c7, 0x90c8, 0x90c9, - /* 0x6100 .. 0x61ff */ - 0xe3b8, 0xb3ee, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0xeda9, 0x90ce, - 0xd3fa, 0xd3e4, 0x90cf, 0x90d0, 0x90d1, 0xedaa, 0xe3b9, 0xd2e2, - 0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0xe3b5, 0x90d7, 0x90d8, - 0x90d9, 0x90da, 0xd3de, 0x90db, 0x90dc, 0x90dd, 0x90de, 0xb8d0, - 0xe3b3, 0x90df, 0x90e0, 0xe3b6, 0xb7df, 0x90e1, 0xe3b4, 0xc0a2, - 0x90e2, 0x90e3, 0x90e4, 0xe3ba, 0x90e5, 0x90e6, 0x90e7, 0x90e8, - 0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0, - 0x90f1, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0xd4b8, - 0x90f8, 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9140, - 0xb4c8, 0x9141, 0xe3bb, 0x9142, 0xbbc5, 0x9143, 0xc9f7, 0x9144, - 0x9145, 0xc9e5, 0x9146, 0x9147, 0x9148, 0xc4bd, 0x9149, 0x914a, - 0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0xedab, 0x9150, 0x9151, - 0x9152, 0x9153, 0xc2fd, 0x9154, 0x9155, 0x9156, 0x9157, 0xbbdb, - 0xbfae, 0x9158, 0x9159, 0x915a, 0x915b, 0x915c, 0x915d, 0x915e, - 0xcebf, 0x915f, 0x9160, 0x9161, 0x9162, 0xe3bc, 0x9163, 0xbfb6, - 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, 0x916a, 0x916b, - 0x916c, 0x916d, 0x916e, 0x916f, 0x9170, 0x9171, 0x9172, 0x9173, - 0x9174, 0x9175, 0x9176, 0xb1ef, 0x9177, 0x9178, 0xd4f7, 0x9179, - 0x917a, 0x917b, 0x917c, 0x917d, 0xe3be, 0x917e, 0x9180, 0x9181, - 0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0xedad, 0x9187, 0x9188, - 0x9189, 0x918a, 0x918b, 0x918c, 0x918d, 0x918e, 0x918f, 0xe3bf, - 0xbaa9, 0xedac, 0x9190, 0x9191, 0xe3bd, 0x9192, 0x9193, 0x9194, - 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919a, 0x919b, 0xe3c0, - 0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0xbab6, 0x91a2, - 0x91a3, 0x91a4, 0xb6ae, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, - 0xd0b8, 0x91aa, 0xb0c3, 0xedae, 0x91ab, 0x91ac, 0x91ad, 0x91ae, - 0x91af, 0xedaf, 0xc0c1, 0x91b0, 0xe3c1, 0x91b1, 0x91b2, 0x91b3, - 0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91ba, 0x91bb, - 0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0xc5b3, 0x91c2, - 0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca, - 0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, 0xe3c2, 0x91d0, 0x91d1, - 0x91d2, 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0xdcb2, - /* 0x6200 .. 0x62ff */ - 0x91d9, 0x91da, 0x91db, 0x91dc, 0x91dd, 0x91de, 0xedb0, 0x91df, - 0xb8ea, 0x91e0, 0xceec, 0xeaa7, 0xd0e7, 0xcaf9, 0xc8d6, 0xcfb7, - 0xb3c9, 0xced2, 0xbde4, 0x91e1, 0x91e2, 0xe3de, 0xbbf2, 0xeaa8, - 0xd5bd, 0x91e3, 0xc6dd, 0xeaa9, 0x91e4, 0x91e5, 0x91e6, 0xeaaa, - 0x91e7, 0xeaac, 0xeaab, 0x91e8, 0xeaae, 0xeaad, 0x91e9, 0x91ea, - 0x91eb, 0x91ec, 0xbdd8, 0x91ed, 0xeaaf, 0x91ee, 0xc2be, 0x91ef, - 0x91f0, 0x91f1, 0x91f2, 0xb4c1, 0xb4f7, 0x91f3, 0x91f4, 0xbba7, - 0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0xece6, 0xece5, 0xb7bf, - 0xcbf9, 0xb1e2, 0x91fa, 0xece7, 0x91fb, 0x91fc, 0x91fd, 0xc9c8, - 0xece8, 0xece9, 0x91fe, 0xcad6, 0xded0, 0xb2c5, 0xd4fa, 0x9240, - 0x9241, 0xc6cb, 0xb0c7, 0xb4f2, 0xc8d3, 0x9242, 0x9243, 0x9244, - 0xcdd0, 0x9245, 0x9246, 0xbfb8, 0x9247, 0x9248, 0x9249, 0x924a, - 0x924b, 0x924c, 0x924d, 0xbfdb, 0x924e, 0x924f, 0xc7a4, 0xd6b4, - 0x9250, 0xc0a9, 0xded1, 0xc9a8, 0xd1ef, 0xc5a4, 0xb0e7, 0xb3b6, - 0xc8c5, 0x9251, 0x9252, 0xb0e2, 0x9253, 0x9254, 0xb7f6, 0x9255, - 0x9256, 0xc5fa, 0x9257, 0x9258, 0xb6f3, 0x9259, 0xd5d2, 0xb3d0, - 0xbcbc, 0x925a, 0x925b, 0x925c, 0xb3ad, 0x925d, 0x925e, 0x925f, - 0x9260, 0xbef1, 0xb0d1, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, - 0x9266, 0xd2d6, 0xcae3, 0xd7a5, 0x9267, 0xcdb6, 0xb6b6, 0xbfb9, - 0xd5db, 0x9268, 0xb8a7, 0xc5d7, 0x9269, 0x926a, 0x926b, 0xded2, - 0xbfd9, 0xc2d5, 0xc7c0, 0x926c, 0xbba4, 0xb1a8, 0x926d, 0x926e, - 0xc5ea, 0x926f, 0x9270, 0xc5fb, 0xcca7, 0x9271, 0x9272, 0x9273, - 0x9274, 0xb1a7, 0x9275, 0x9276, 0x9277, 0xb5d6, 0x9278, 0x9279, - 0x927a, 0xc4a8, 0x927b, 0xded3, 0xd1ba, 0xb3e9, 0x927c, 0xc3f2, - 0x927d, 0x927e, 0xb7f7, 0x9280, 0xd6f4, 0xb5a3, 0xb2f0, 0xc4b4, - 0xc4e9, 0xc0ad, 0xded4, 0x9281, 0xb0e8, 0xc5c4, 0xc1e0, 0x9282, - 0xb9d5, 0x9283, 0xbedc, 0xcdd8, 0xb0ce, 0x9284, 0xcdcf, 0xded6, - 0xbed0, 0xd7be, 0xded5, 0xd5d0, 0xb0dd, 0x9285, 0x9286, 0xc4e2, - 0x9287, 0x9288, 0xc2a3, 0xbcf0, 0x9289, 0xd3b5, 0xc0b9, 0xc5a1, - 0xb2a6, 0xd4f1, 0x928a, 0x928b, 0xc0a8, 0xcac3, 0xded7, 0xd5fc, - 0x928c, 0xb9b0, 0x928d, 0xc8ad, 0xcba9, 0x928e, 0xded9, 0xbfbd, - 0x928f, 0x9290, 0x9291, 0x9292, 0xc6b4, 0xd7a7, 0xcab0, 0xc4c3, - /* 0x6300 .. 0x63ff */ - 0x9293, 0xb3d6, 0xb9d2, 0x9294, 0x9295, 0x9296, 0x9297, 0xd6b8, - 0xeafc, 0xb0b4, 0x9298, 0x9299, 0x929a, 0x929b, 0xbfe6, 0x929c, - 0x929d, 0xccf4, 0x929e, 0x929f, 0x92a0, 0x92a1, 0xcdda, 0x92a2, - 0x92a3, 0x92a4, 0xd6bf, 0xc2ce, 0x92a5, 0xcece, 0xcca2, 0xd0ae, - 0xc4d3, 0xb5b2, 0xded8, 0xd5f5, 0xbcb7, 0xbbd3, 0x92a6, 0x92a7, - 0xb0a4, 0x92a8, 0xc5b2, 0xb4ec, 0x92a9, 0x92aa, 0x92ab, 0xd5f1, - 0x92ac, 0x92ad, 0xeafd, 0x92ae, 0x92af, 0x92b0, 0x92b1, 0x92b2, - 0x92b3, 0xdeda, 0xcda6, 0x92b4, 0x92b5, 0xcdec, 0x92b6, 0x92b7, - 0x92b8, 0x92b9, 0xcee6, 0xdedc, 0x92ba, 0xcdb1, 0xc0a6, 0x92bb, - 0x92bc, 0xd7bd, 0x92bd, 0xdedb, 0xb0c6, 0xbab4, 0xc9d3, 0xc4f3, - 0xbee8, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0xb2b6, 0x92c2, 0x92c3, - 0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92c9, 0xc0cc, 0xcbf0, - 0x92ca, 0xbcf1, 0xbbbb, 0xb5b7, 0x92cb, 0x92cc, 0x92cd, 0xc5f5, - 0x92ce, 0xdee6, 0x92cf, 0x92d0, 0x92d1, 0xdee3, 0xbedd, 0x92d2, - 0x92d3, 0xdedf, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0xb4b7, 0xbddd, - 0x92d8, 0x92d9, 0xdee0, 0xc4ed, 0x92da, 0x92db, 0x92dc, 0x92dd, - 0xcfc6, 0x92de, 0xb5e0, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0xb6de, - 0xcada, 0xb5f4, 0xdee5, 0x92e3, 0xd5c6, 0x92e4, 0xdee1, 0xcccd, - 0xc6fe, 0x92e5, 0xc5c5, 0x92e6, 0x92e7, 0x92e8, 0xd2b4, 0x92e9, - 0xbef2, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, - 0xc2d3, 0x92f1, 0xccbd, 0xb3b8, 0x92f2, 0xbdd3, 0x92f3, 0xbfd8, - 0xcdc6, 0xd1da, 0xb4eb, 0x92f4, 0xdee4, 0xdedd, 0xdee7, 0x92f5, - 0xeafe, 0x92f6, 0x92f7, 0xc2b0, 0xdee2, 0x92f8, 0x92f9, 0xd6c0, - 0xb5a7, 0x92fa, 0xb2f4, 0x92fb, 0xdee8, 0x92fc, 0xdef2, 0x92fd, - 0x92fe, 0x9340, 0x9341, 0x9342, 0xdeed, 0x9343, 0xdef1, 0x9344, - 0x9345, 0xc8e0, 0x9346, 0x9347, 0x9348, 0xd7e1, 0xdeef, 0xc3e8, - 0xcce1, 0x9349, 0xb2e5, 0x934a, 0x934b, 0x934c, 0xd2be, 0x934d, - 0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0xdeee, 0x9354, - 0xdeeb, 0xced5, 0x9355, 0xb4a7, 0x9356, 0x9357, 0x9358, 0x9359, - 0x935a, 0xbfab, 0xbebe, 0x935b, 0x935c, 0xbdd2, 0x935d, 0x935e, - 0x935f, 0x9360, 0xdee9, 0x9361, 0xd4ae, 0x9362, 0xdede, 0x9363, - 0xdeea, 0x9364, 0x9365, 0x9366, 0x9367, 0xc0bf, 0x9368, 0xdeec, - /* 0x6400 .. 0x64ff */ - 0xb2f3, 0xb8e9, 0xc2a7, 0x9369, 0x936a, 0xbdc1, 0x936b, 0x936c, - 0x936d, 0x936e, 0x936f, 0xdef5, 0xdef8, 0x9370, 0x9371, 0xb2ab, - 0xb4a4, 0x9372, 0x9373, 0xb4ea, 0xc9a6, 0x9374, 0x9375, 0x9376, - 0x9377, 0x9378, 0x9379, 0xdef6, 0xcbd1, 0x937a, 0xb8e3, 0x937b, - 0xdef7, 0xdefa, 0x937c, 0x937d, 0x937e, 0x9380, 0xdef9, 0x9381, - 0x9382, 0x9383, 0xccc2, 0x9384, 0xb0e1, 0xb4ee, 0x9385, 0x9386, - 0x9387, 0x9388, 0x9389, 0x938a, 0xe5ba, 0x938b, 0x938c, 0x938d, - 0x938e, 0x938f, 0xd0af, 0x9390, 0x9391, 0xb2eb, 0x9392, 0xeba1, - 0x9393, 0xdef4, 0x9394, 0x9395, 0xc9e3, 0xdef3, 0xb0da, 0xd2a1, - 0xb1f7, 0x9396, 0xccaf, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, - 0x939c, 0x939d, 0xdef0, 0x939e, 0xcba4, 0x939f, 0x93a0, 0x93a1, - 0xd5aa, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, 0xdefb, 0x93a7, - 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, 0xb4dd, - 0x93af, 0xc4a6, 0x93b0, 0x93b1, 0x93b2, 0xdefd, 0x93b3, 0x93b4, - 0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, - 0xc3fe, 0xc4a1, 0xdfa1, 0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, - 0x93c2, 0x93c3, 0xc1cc, 0x93c4, 0xdefc, 0xbeef, 0x93c5, 0xc6b2, - 0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, - 0x93ce, 0xb3c5, 0xc8f6, 0x93cf, 0x93d0, 0xcbba, 0xdefe, 0x93d1, - 0x93d2, 0xdfa4, 0x93d3, 0x93d4, 0x93d5, 0x93d6, 0xd7b2, 0x93d7, - 0x93d8, 0x93d9, 0x93da, 0x93db, 0xb3b7, 0x93dc, 0x93dd, 0x93de, - 0x93df, 0xc1c3, 0x93e0, 0x93e1, 0xc7cb, 0xb2a5, 0xb4e9, 0x93e2, - 0xd7ab, 0x93e3, 0x93e4, 0x93e5, 0x93e6, 0xc4ec, 0x93e7, 0xdfa2, - 0xdfa3, 0x93e8, 0xdfa5, 0x93e9, 0xbab3, 0x93ea, 0x93eb, 0x93ec, - 0xdfa6, 0x93ed, 0xc0de, 0x93ee, 0x93ef, 0xc9c3, 0x93f0, 0x93f1, - 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, 0xb2d9, 0xc7e6, 0x93f7, - 0xdfa7, 0x93f8, 0xc7dc, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0xdfa8, - 0xeba2, 0x93fd, 0x93fe, 0x9440, 0x9441, 0x9442, 0xcbd3, 0x9443, - 0x9444, 0x9445, 0xdfaa, 0x9446, 0xdfa9, 0x9447, 0xb2c1, 0x9448, - 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, 0x9450, - 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, - 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, 0x9460, - /* 0x6500 .. 0x65ff */ - 0xc5ca, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, - 0x9468, 0xdfab, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, - 0x946f, 0x9470, 0xd4dc, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, - 0xc8c1, 0x9476, 0x9477, 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, - 0x947d, 0x947e, 0x9480, 0x9481, 0x9482, 0xdfac, 0x9483, 0x9484, - 0x9485, 0x9486, 0x9487, 0xbef0, 0x9488, 0x9489, 0xdfad, 0xd6a7, - 0x948a, 0x948b, 0x948c, 0x948d, 0xeab7, 0xebb6, 0xcad5, 0x948e, - 0xd8fc, 0xb8c4, 0x948f, 0xb9a5, 0x9490, 0x9491, 0xb7c5, 0xd5fe, - 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0xb9ca, 0x9497, 0x9498, - 0xd0a7, 0xf4cd, 0x9499, 0x949a, 0xb5d0, 0x949b, 0x949c, 0xc3f4, - 0x949d, 0xbec8, 0x949e, 0x949f, 0x94a0, 0xebb7, 0xb0bd, 0x94a1, - 0x94a2, 0xbdcc, 0x94a3, 0xc1b2, 0x94a4, 0xb1d6, 0xb3a8, 0x94a5, - 0x94a6, 0x94a7, 0xb8d2, 0xc9a2, 0x94a8, 0x94a9, 0xb6d8, 0x94aa, - 0x94ab, 0x94ac, 0x94ad, 0xebb8, 0xbeb4, 0x94ae, 0x94af, 0x94b0, - 0xcafd, 0x94b1, 0xc7c3, 0x94b2, 0xd5fb, 0x94b3, 0x94b4, 0xb7f3, - 0x94b5, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, - 0x94bd, 0x94be, 0x94bf, 0x94c0, 0x94c1, 0x94c2, 0x94c3, 0xcec4, - 0x94c4, 0x94c5, 0x94c6, 0xd5ab, 0xb1f3, 0x94c7, 0x94c8, 0x94c9, - 0xecb3, 0xb0df, 0x94ca, 0xecb5, 0x94cb, 0x94cc, 0x94cd, 0xb6b7, - 0x94ce, 0xc1cf, 0x94cf, 0xf5fa, 0xd0b1, 0x94d0, 0x94d1, 0xd5e5, - 0x94d2, 0xced3, 0x94d3, 0x94d4, 0xbdef, 0xb3e2, 0x94d5, 0xb8ab, - 0x94d6, 0xd5b6, 0x94d7, 0xedbd, 0x94d8, 0xb6cf, 0x94d9, 0xcbb9, - 0xd0c2, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0, - 0x94e1, 0xb7bd, 0x94e2, 0x94e3, 0xecb6, 0xcaa9, 0x94e4, 0x94e5, - 0x94e6, 0xc5d4, 0x94e7, 0xecb9, 0xecb8, 0xc2c3, 0xecb7, 0x94e8, - 0x94e9, 0x94ea, 0x94eb, 0xd0fd, 0xecba, 0x94ec, 0xecbb, 0xd7e5, - 0x94ed, 0x94ee, 0xecbc, 0x94ef, 0x94f0, 0x94f1, 0xecbd, 0xc6ec, - 0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8, 0x94f9, - 0xcede, 0x94fa, 0xbcc8, 0x94fb, 0x94fc, 0xc8d5, 0xb5a9, 0xbec9, - 0xd6bc, 0xd4e7, 0x94fd, 0x94fe, 0xd1ae, 0xd0f1, 0xeab8, 0xeab9, - 0xeaba, 0xbab5, 0x9540, 0x9541, 0x9542, 0x9543, 0xcab1, 0xbff5, - 0x9544, 0x9545, 0xcdfa, 0x9546, 0x9547, 0x9548, 0x9549, 0x954a, - /* 0x6600 .. 0x66ff */ - 0xeac0, 0x954b, 0xb0ba, 0xeabe, 0x954c, 0x954d, 0xc0a5, 0x954e, - 0x954f, 0x9550, 0xeabb, 0x9551, 0xb2fd, 0x9552, 0xc3f7, 0xbbe8, - 0x9553, 0x9554, 0x9555, 0xd2d7, 0xcef4, 0xeabf, 0x9556, 0x9557, - 0x9558, 0xeabc, 0x9559, 0x955a, 0x955b, 0xeac3, 0x955c, 0xd0c7, - 0xd3b3, 0x955d, 0x955e, 0x955f, 0x9560, 0xb4ba, 0x9561, 0xc3c1, - 0xd7f2, 0x9562, 0x9563, 0x9564, 0x9565, 0xd5d1, 0x9566, 0xcac7, - 0x9567, 0xeac5, 0x9568, 0x9569, 0xeac4, 0xeac7, 0xeac6, 0x956a, - 0x956b, 0x956c, 0x956d, 0x956e, 0xd6e7, 0x956f, 0xcfd4, 0x9570, - 0x9571, 0xeacb, 0x9572, 0xbbce, 0x9573, 0x9574, 0x9575, 0x9576, - 0x9577, 0x9578, 0x9579, 0xbdfa, 0xc9ce, 0x957a, 0x957b, 0xeacc, - 0x957c, 0x957d, 0xc9b9, 0xcffe, 0xeaca, 0xd4ce, 0xeacd, 0xeacf, - 0x957e, 0x9580, 0xcded, 0x9581, 0x9582, 0x9583, 0x9584, 0xeac9, - 0x9585, 0xeace, 0x9586, 0x9587, 0xceee, 0x9588, 0xbbde, 0x9589, - 0xb3bf, 0x958a, 0x958b, 0x958c, 0x958d, 0x958e, 0xc6d5, 0xbeb0, - 0xcefa, 0x958f, 0x9590, 0x9591, 0xc7e7, 0x9592, 0xbea7, 0xead0, - 0x9593, 0x9594, 0xd6c7, 0x9595, 0x9596, 0x9597, 0xc1c0, 0x9598, - 0x9599, 0x959a, 0xd4dd, 0x959b, 0xead1, 0x959c, 0x959d, 0xcfbe, - 0x959e, 0x959f, 0x95a0, 0x95a1, 0xead2, 0x95a2, 0x95a3, 0x95a4, - 0x95a5, 0xcaee, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0xc5af, 0xb0b5, - 0x95aa, 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0xead4, 0x95af, 0x95b0, - 0x95b1, 0x95b2, 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0xead3, - 0xf4df, 0x95b8, 0x95b9, 0x95ba, 0x95bb, 0x95bc, 0xc4ba, 0x95bd, - 0x95be, 0x95bf, 0x95c0, 0x95c1, 0xb1a9, 0x95c2, 0x95c3, 0x95c4, - 0x95c5, 0xe5df, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0xead5, 0x95ca, - 0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, - 0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, - 0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, - 0x95e3, 0xcaef, 0x95e4, 0xead6, 0xead7, 0xc6d8, 0x95e5, 0x95e6, - 0x95e7, 0x95e8, 0x95e9, 0x95ea, 0x95eb, 0x95ec, 0xead8, 0x95ed, - 0x95ee, 0xead9, 0x95ef, 0x95f0, 0x95f1, 0x95f2, 0x95f3, 0x95f4, - 0xd4bb, 0x95f5, 0xc7fa, 0xd2b7, 0xb8fc, 0x95f6, 0x95f7, 0xeac2, - 0x95f8, 0xb2dc, 0x95f9, 0x95fa, 0xc2fc, 0x95fb, 0xd4f8, 0xcce6, - /* 0x6700 .. 0x67ff */ - 0xd7ee, 0x95fc, 0x95fd, 0x95fe, 0x9640, 0x9641, 0x9642, 0x9643, - 0xd4c2, 0xd3d0, 0xebc3, 0xc5f3, 0x9644, 0xb7fe, 0x9645, 0x9646, - 0xebd4, 0x9647, 0x9648, 0x9649, 0xcbb7, 0xebde, 0x964a, 0xc0ca, - 0x964b, 0x964c, 0x964d, 0xcdfb, 0x964e, 0xb3af, 0x964f, 0xc6da, - 0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0xebfc, 0x9656, - 0xc4be, 0x9657, 0xceb4, 0xc4a9, 0xb1be, 0xd4fd, 0x9658, 0xcaf5, - 0x9659, 0xd6ec, 0x965a, 0x965b, 0xc6d3, 0xb6e4, 0x965c, 0x965d, - 0x965e, 0x965f, 0xbbfa, 0x9660, 0x9661, 0xd0e0, 0x9662, 0x9663, - 0xc9b1, 0x9664, 0xd4d3, 0xc8a8, 0x9665, 0x9666, 0xb8cb, 0x9667, - 0xe8be, 0xc9bc, 0x9668, 0x9669, 0xe8bb, 0x966a, 0xc0ee, 0xd0d3, - 0xb2c4, 0xb4e5, 0x966b, 0xe8bc, 0x966c, 0x966d, 0xd5c8, 0x966e, - 0x966f, 0x9670, 0x9671, 0x9672, 0xb6c5, 0x9673, 0xe8bd, 0xcaf8, - 0xb8dc, 0xccf5, 0x9674, 0x9675, 0x9676, 0xc0b4, 0x9677, 0x9678, - 0xd1ee, 0xe8bf, 0xe8c2, 0x9679, 0x967a, 0xbabc, 0x967b, 0xb1ad, - 0xbddc, 0x967c, 0xeabd, 0xe8c3, 0x967d, 0xe8c6, 0x967e, 0xe8cb, - 0x9680, 0x9681, 0x9682, 0x9683, 0xe8cc, 0x9684, 0xcbc9, 0xb0e5, - 0x9685, 0xbcab, 0x9686, 0x9687, 0xb9b9, 0x9688, 0x9689, 0xe8c1, - 0x968a, 0xcdf7, 0x968b, 0xe8ca, 0x968c, 0x968d, 0x968e, 0x968f, - 0xcef6, 0x9690, 0x9691, 0x9692, 0x9693, 0xd5ed, 0x9694, 0xc1d6, - 0xe8c4, 0x9695, 0xc3b6, 0x9696, 0xb9fb, 0xd6a6, 0xe8c8, 0x9697, - 0x9698, 0x9699, 0xcae0, 0xd4e6, 0x969a, 0xe8c0, 0x969b, 0xe8c5, - 0xe8c7, 0x969c, 0xc7b9, 0xb7e3, 0x969d, 0xe8c9, 0x969e, 0xbfdd, - 0xe8d2, 0x969f, 0x96a0, 0xe8d7, 0x96a1, 0xe8d5, 0xbcdc, 0xbccf, - 0xe8db, 0x96a2, 0x96a3, 0x96a4, 0x96a5, 0x96a6, 0x96a7, 0x96a8, - 0x96a9, 0xe8de, 0x96aa, 0xe8da, 0xb1fa, 0x96ab, 0x96ac, 0x96ad, - 0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4, 0xb0d8, - 0xc4b3, 0xb8cc, 0xc6e2, 0xc8be, 0xc8e1, 0x96b5, 0x96b6, 0x96b7, - 0xe8cf, 0xe8d4, 0xe8d6, 0x96b8, 0xb9f1, 0xe8d8, 0xd7f5, 0x96b9, - 0xc4fb, 0x96ba, 0xe8dc, 0x96bb, 0x96bc, 0xb2e9, 0x96bd, 0x96be, - 0x96bf, 0xe8d1, 0x96c0, 0x96c1, 0xbced, 0x96c2, 0x96c3, 0xbfc2, - 0xe8cd, 0xd6f9, 0x96c4, 0xc1f8, 0xb2f1, 0x96c5, 0x96c6, 0x96c7, - 0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, 0xe8df, 0x96cd, 0xcac1, - /* 0x6800 .. 0x68ff */ - 0xe8d9, 0x96ce, 0x96cf, 0x96d0, 0x96d1, 0xd5a4, 0x96d2, 0xb1ea, - 0xd5bb, 0xe8ce, 0xe8d0, 0xb6b0, 0xe8d3, 0x96d3, 0xe8dd, 0xc0b8, - 0x96d4, 0xcaf7, 0x96d5, 0xcba8, 0x96d6, 0x96d7, 0xc6dc, 0xc0f5, - 0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, 0xe8e9, 0x96dd, 0x96de, - 0x96df, 0xd0a3, 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4, 0x96e5, - 0x96e6, 0xe8f2, 0xd6ea, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, - 0x96ec, 0x96ed, 0xe8e0, 0xe8e1, 0x96ee, 0x96ef, 0x96f0, 0xd1f9, - 0xbacb, 0xb8f9, 0x96f1, 0x96f2, 0xb8f1, 0xd4d4, 0xe8ef, 0x96f3, - 0xe8ee, 0xe8ec, 0xb9f0, 0xccd2, 0xe8e6, 0xcea6, 0xbff2, 0x96f4, - 0xb0b8, 0xe8f1, 0xe8f0, 0x96f5, 0xd7c0, 0x96f6, 0xe8e4, 0x96f7, - 0xcda9, 0xc9a3, 0x96f8, 0xbbb8, 0xbddb, 0xe8ea, 0x96f9, 0x96fa, - 0x96fb, 0x96fc, 0x96fd, 0x96fe, 0x9740, 0x9741, 0x9742, 0x9743, - 0xe8e2, 0xe8e3, 0xe8e5, 0xb5b5, 0xe8e7, 0xc7c5, 0xe8eb, 0xe8ed, - 0xbdb0, 0xd7ae, 0x9744, 0xe8f8, 0x9745, 0x9746, 0x9747, 0x9748, - 0x9749, 0x974a, 0x974b, 0x974c, 0xe8f5, 0x974d, 0xcdb0, 0xe8f6, - 0x974e, 0x974f, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, - 0x9756, 0xc1ba, 0x9757, 0xe8e8, 0x9758, 0xc3b7, 0xb0f0, 0x9759, - 0x975a, 0x975b, 0x975c, 0x975d, 0x975e, 0x975f, 0x9760, 0xe8f4, - 0x9761, 0x9762, 0x9763, 0xe8f7, 0x9764, 0x9765, 0x9766, 0xb9a3, - 0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d, 0x976e, - 0x976f, 0x9770, 0xc9d2, 0x9771, 0x9772, 0x9773, 0xc3ce, 0xcee0, - 0xc0e6, 0x9774, 0x9775, 0x9776, 0x9777, 0xcbf3, 0x9778, 0xccdd, - 0xd0b5, 0x9779, 0x977a, 0xcae1, 0x977b, 0xe8f3, 0x977c, 0x977d, - 0x977e, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, - 0xbcec, 0x9787, 0xe8f9, 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, - 0x978d, 0xc3de, 0x978e, 0xc6e5, 0x978f, 0xb9f7, 0x9790, 0x9791, - 0x9792, 0x9793, 0xb0f4, 0x9794, 0x9795, 0xd7d8, 0x9796, 0x9797, - 0xbcac, 0x9798, 0xc5ef, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, - 0xccc4, 0x979e, 0x979f, 0xe9a6, 0x97a0, 0x97a1, 0x97a2, 0x97a3, - 0x97a4, 0x97a5, 0x97a6, 0x97a7, 0x97a8, 0x97a9, 0xc9ad, 0x97aa, - 0xe9a2, 0xc0e2, 0x97ab, 0x97ac, 0x97ad, 0xbfc3, 0x97ae, 0x97af, - 0x97b0, 0xe8fe, 0xb9d7, 0x97b1, 0xe8fb, 0x97b2, 0x97b3, 0x97b4, - /* 0x6900 .. 0x69ff */ - 0x97b5, 0xe9a4, 0x97b6, 0x97b7, 0x97b8, 0xd2ce, 0x97b9, 0x97ba, - 0x97bb, 0x97bc, 0x97bd, 0xe9a3, 0x97be, 0xd6b2, 0xd7b5, 0x97bf, - 0xe9a7, 0x97c0, 0xbdb7, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, - 0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0xe8fc, - 0xe8fd, 0x97cd, 0x97ce, 0x97cf, 0xe9a1, 0x97d0, 0x97d1, 0x97d2, - 0x97d3, 0x97d4, 0x97d5, 0x97d6, 0x97d7, 0xcdd6, 0x97d8, 0x97d9, - 0xd2ac, 0x97da, 0x97db, 0x97dc, 0xe9b2, 0x97dd, 0x97de, 0x97df, - 0x97e0, 0xe9a9, 0x97e1, 0x97e2, 0x97e3, 0xb4aa, 0x97e4, 0xb4bb, - 0x97e5, 0x97e6, 0xe9ab, 0x97e7, 0x97e8, 0x97e9, 0x97ea, 0x97eb, - 0x97ec, 0x97ed, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f3, - 0x97f4, 0x97f5, 0x97f6, 0x97f7, 0xd0a8, 0x97f8, 0x97f9, 0xe9a5, - 0x97fa, 0x97fb, 0xb3fe, 0x97fc, 0x97fd, 0xe9ac, 0xc0e3, 0x97fe, - 0xe9aa, 0x9840, 0x9841, 0xe9b9, 0x9842, 0x9843, 0xe9b8, 0x9844, - 0x9845, 0x9846, 0x9847, 0xe9ae, 0x9848, 0x9849, 0xe8fa, 0x984a, - 0x984b, 0xe9a8, 0x984c, 0x984d, 0x984e, 0x984f, 0x9850, 0xbfac, - 0xe9b1, 0xe9ba, 0x9851, 0x9852, 0xc2a5, 0x9853, 0x9854, 0x9855, - 0xe9af, 0x9856, 0xb8c5, 0x9857, 0xe9ad, 0x9858, 0xd3dc, 0xe9b4, - 0xe9b5, 0xe9b7, 0x9859, 0x985a, 0x985b, 0xe9c7, 0x985c, 0x985d, - 0x985e, 0x985f, 0x9860, 0x9861, 0xc0c6, 0xe9c5, 0x9862, 0x9863, - 0xe9b0, 0x9864, 0x9865, 0xe9bb, 0xb0f1, 0x9866, 0x9867, 0x9868, - 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, 0xe9bc, - 0xd5a5, 0x9870, 0x9871, 0xe9be, 0x9872, 0xe9bf, 0x9873, 0x9874, - 0x9875, 0xe9c1, 0x9876, 0x9877, 0xc1f1, 0x9878, 0x9879, 0xc8b6, - 0x987a, 0x987b, 0x987c, 0xe9bd, 0x987d, 0x987e, 0x9880, 0x9881, - 0x9882, 0xe9c2, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, - 0x9889, 0x988a, 0xe9c3, 0x988b, 0xe9b3, 0x988c, 0xe9b6, 0x988d, - 0xbbb1, 0x988e, 0x988f, 0x9890, 0xe9c0, 0x9891, 0x9892, 0x9893, - 0x9894, 0x9895, 0x9896, 0xbcf7, 0x9897, 0x9898, 0x9899, 0xe9c4, - 0xe9c6, 0x989a, 0x989b, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0, - 0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0xe9ca, 0x98a6, 0x98a7, - 0x98a8, 0x98a9, 0xe9ce, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, - 0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3, 0xb2db, 0x98b4, 0xe9c8, - /* 0x6a00 .. 0x6aff */ - 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb, 0x98bc, - 0x98bd, 0x98be, 0xb7ae, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, - 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0xe9cb, - 0xe9cc, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf, 0x98d0, 0xd5c1, - 0x98d1, 0xc4a3, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7, - 0xe9d8, 0x98d8, 0xbae1, 0x98d9, 0x98da, 0x98db, 0x98dc, 0xe9c9, - 0x98dd, 0xd3a3, 0x98de, 0x98df, 0x98e0, 0xe9d4, 0x98e1, 0x98e2, - 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0xe9d7, 0xe9d0, 0x98e8, - 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0xe9cf, 0x98ed, 0x98ee, 0xc7c1, - 0x98ef, 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, - 0xe9d2, 0x98f7, 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, - 0xe9d9, 0xb3c8, 0x98fe, 0xe9d3, 0x9940, 0x9941, 0x9942, 0x9943, - 0x9944, 0xcff0, 0x9945, 0x9946, 0x9947, 0xe9cd, 0x9948, 0x9949, - 0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, - 0x9952, 0xb3f7, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, - 0x9959, 0xe9d6, 0x995a, 0x995b, 0xe9da, 0x995c, 0x995d, 0x995e, - 0xccb4, 0x995f, 0x9960, 0x9961, 0xcfad, 0x9962, 0x9963, 0x9964, - 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, 0x996a, 0xe9d5, 0x996b, - 0xe9dc, 0xe9db, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0xe9de, - 0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, - 0xe9d1, 0x9979, 0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x9980, - 0x9981, 0xe9dd, 0x9982, 0xe9df, 0xc3ca, 0x9983, 0x9984, 0x9985, - 0x9986, 0x9987, 0x9988, 0x9989, 0x998a, 0x998b, 0x998c, 0x998d, - 0x998e, 0x998f, 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, - 0x9996, 0x9997, 0x9998, 0x9999, 0x999a, 0x999b, 0x999c, 0x999d, - 0x999e, 0x999f, 0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a5, - 0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa, 0x99ab, 0x99ac, 0x99ad, - 0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2, 0x99b3, 0x99b4, 0x99b5, - 0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x99bd, - 0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2, 0x99c3, 0x99c4, 0x99c5, - 0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc, 0x99cd, - 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2, 0x99d3, 0x99d4, 0x99d5, - /* 0x6b00 .. 0x6bff */ - 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd, - 0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, - 0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, - 0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2, 0x99f3, 0x99f4, 0x99f5, - 0xc7b7, 0xb4ce, 0xbbb6, 0xd0c0, 0xeca3, 0x99f6, 0x99f7, 0xc5b7, - 0x99f8, 0x99f9, 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x9a40, - 0x9a41, 0x9a42, 0xd3fb, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0xeca4, - 0x9a47, 0xeca5, 0xc6db, 0x9a48, 0x9a49, 0x9a4a, 0xbfee, 0x9a4b, - 0x9a4c, 0x9a4d, 0x9a4e, 0xeca6, 0x9a4f, 0x9a50, 0xeca7, 0xd0aa, - 0x9a51, 0xc7b8, 0x9a52, 0x9a53, 0xb8e8, 0x9a54, 0x9a55, 0x9a56, - 0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, - 0x9a5f, 0xeca8, 0x9a60, 0x9a61, 0x9a62, 0x9a63, 0x9a64, 0x9a65, - 0x9a66, 0x9a67, 0xd6b9, 0xd5fd, 0xb4cb, 0xb2bd, 0xcee4, 0xc6e7, - 0x9a68, 0x9a69, 0xcde1, 0x9a6a, 0x9a6b, 0x9a6c, 0x9a6d, 0x9a6e, - 0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73, 0x9a74, 0x9a75, 0x9a76, - 0x9a77, 0xb4f5, 0x9a78, 0xcbc0, 0xbcdf, 0x9a79, 0x9a7a, 0x9a7b, - 0x9a7c, 0xe9e2, 0xe9e3, 0xd1ea, 0xe9e5, 0x9a7d, 0xb4f9, 0xe9e4, - 0x9a7e, 0xd1b3, 0xcae2, 0xb2d0, 0x9a80, 0xe9e8, 0x9a81, 0x9a82, - 0x9a83, 0x9a84, 0xe9e6, 0xe9e7, 0x9a85, 0x9a86, 0xd6b3, 0x9a87, - 0x9a88, 0x9a89, 0xe9e9, 0xe9ea, 0x9a8a, 0x9a8b, 0x9a8c, 0x9a8d, - 0x9a8e, 0xe9eb, 0x9a8f, 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a94, - 0x9a95, 0x9a96, 0xe9ec, 0x9a97, 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, - 0x9a9c, 0x9a9d, 0x9a9e, 0xecaf, 0xc5b9, 0xb6ce, 0x9a9f, 0xd2f3, - 0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa6, 0xb5ee, - 0x9aa7, 0xbbd9, 0xecb1, 0x9aa8, 0x9aa9, 0xd2e3, 0x9aaa, 0x9aab, - 0x9aac, 0x9aad, 0x9aae, 0xcee3, 0x9aaf, 0xc4b8, 0x9ab0, 0xc3bf, - 0x9ab1, 0x9ab2, 0xb6be, 0xd8b9, 0xb1c8, 0xb1cf, 0xb1d1, 0xc5fe, - 0x9ab3, 0xb1d0, 0x9ab4, 0xc3ab, 0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, - 0x9ab9, 0xd5b1, 0x9aba, 0x9abb, 0x9abc, 0x9abd, 0x9abe, 0x9abf, - 0x9ac0, 0x9ac1, 0xeba4, 0xbac1, 0x9ac2, 0x9ac3, 0x9ac4, 0xccba, - 0x9ac5, 0x9ac6, 0x9ac7, 0xeba5, 0x9ac8, 0xeba7, 0x9ac9, 0x9aca, - 0x9acb, 0xeba8, 0x9acc, 0x9acd, 0x9ace, 0xeba6, 0x9acf, 0x9ad0, - /* 0x6c00 .. 0x6cff */ - 0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4, 0x9ad5, 0xeba9, 0xebab, 0xebaa, - 0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0xebac, 0x9adb, 0xcacf, - 0xd8b5, 0xc3f1, 0x9adc, 0xc3a5, 0xc6f8, 0xebad, 0xc4ca, 0x9add, - 0xebae, 0xebaf, 0xebb0, 0xb7d5, 0x9ade, 0x9adf, 0x9ae0, 0xb7fa, - 0x9ae1, 0xebb1, 0xc7e2, 0x9ae2, 0xebb3, 0x9ae3, 0xbaa4, 0xd1f5, - 0xb0b1, 0xebb2, 0xebb4, 0x9ae4, 0x9ae5, 0x9ae6, 0xb5aa, 0xc2c8, - 0xc7e8, 0x9ae7, 0xebb5, 0x9ae8, 0xcbae, 0xe3df, 0x9ae9, 0x9aea, - 0xd3c0, 0x9aeb, 0x9aec, 0x9aed, 0x9aee, 0xd9db, 0x9aef, 0x9af0, - 0xcda1, 0xd6ad, 0xc7f3, 0x9af1, 0x9af2, 0x9af3, 0xd9e0, 0xbbe3, - 0x9af4, 0xbaba, 0xe3e2, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, - 0xcfab, 0x9afa, 0x9afb, 0x9afc, 0xe3e0, 0xc9c7, 0x9afd, 0xbab9, - 0x9afe, 0x9b40, 0x9b41, 0xd1b4, 0xe3e1, 0xc8ea, 0xb9af, 0xbdad, - 0xb3d8, 0xcedb, 0x9b42, 0x9b43, 0xccc0, 0x9b44, 0x9b45, 0x9b46, - 0xe3e8, 0xe3e9, 0xcdf4, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, - 0xccad, 0x9b4c, 0xbcb3, 0x9b4d, 0xe3ea, 0x9b4e, 0xe3eb, 0x9b4f, - 0x9b50, 0xd0da, 0x9b51, 0x9b52, 0x9b53, 0xc6fb, 0xb7da, 0x9b54, - 0x9b55, 0xc7df, 0xd2ca, 0xced6, 0x9b56, 0xe3e4, 0xe3ec, 0x9b57, - 0xc9f2, 0xb3c1, 0x9b58, 0x9b59, 0xe3e7, 0x9b5a, 0x9b5b, 0xc6e3, - 0xe3e5, 0x9b5c, 0x9b5d, 0xedb3, 0xe3e6, 0x9b5e, 0x9b5f, 0x9b60, - 0x9b61, 0xc9b3, 0x9b62, 0xc5e6, 0x9b63, 0x9b64, 0x9b65, 0xb9b5, - 0x9b66, 0xc3bb, 0x9b67, 0xe3e3, 0xc5bd, 0xc1a4, 0xc2d9, 0xb2d7, - 0x9b68, 0xe3ed, 0xbba6, 0xc4ad, 0x9b69, 0xe3f0, 0xbeda, 0x9b6a, - 0x9b6b, 0xe3fb, 0xe3f5, 0xbad3, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, - 0xb7d0, 0xd3cd, 0x9b70, 0xd6ce, 0xd5d3, 0xb9c1, 0xd5b4, 0xd1d8, - 0x9b71, 0x9b72, 0x9b73, 0x9b74, 0xd0b9, 0xc7f6, 0x9b75, 0x9b76, - 0x9b77, 0xc8aa, 0xb2b4, 0x9b78, 0xc3da, 0x9b79, 0x9b7a, 0x9b7b, - 0xe3ee, 0x9b7c, 0x9b7d, 0xe3fc, 0xe3ef, 0xb7a8, 0xe3f7, 0xe3f4, - 0x9b7e, 0x9b80, 0x9b81, 0xb7ba, 0x9b82, 0x9b83, 0xc5a2, 0x9b84, - 0xe3f6, 0xc5dd, 0xb2a8, 0xc6fc, 0x9b85, 0xc4e0, 0x9b86, 0x9b87, - 0xd7a2, 0x9b88, 0xc0e1, 0xe3f9, 0x9b89, 0x9b8a, 0xe3fa, 0xe3fd, - 0xcca9, 0xe3f3, 0x9b8b, 0xd3be, 0x9b8c, 0xb1c3, 0xedb4, 0xe3f1, - 0xe3f2, 0x9b8d, 0xe3f8, 0xd0ba, 0xc6c3, 0xd4f3, 0xe3fe, 0x9b8e, - /* 0x6d00 .. 0x6dff */ - 0x9b8f, 0xbde0, 0x9b90, 0x9b91, 0xe4a7, 0x9b92, 0x9b93, 0xe4a6, - 0x9b94, 0x9b95, 0x9b96, 0xd1f3, 0xe4a3, 0x9b97, 0xe4a9, 0x9b98, - 0x9b99, 0x9b9a, 0xc8f7, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e, 0xcfb4, - 0x9b9f, 0xe4a8, 0xe4ae, 0xc2e5, 0x9ba0, 0x9ba1, 0xb6b4, 0x9ba2, - 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0xbdf2, 0x9ba8, 0xe4a2, - 0x9ba9, 0x9baa, 0xbae9, 0xe4aa, 0x9bab, 0x9bac, 0xe4ac, 0x9bad, - 0x9bae, 0xb6fd, 0xd6de, 0xe4b2, 0x9baf, 0xe4ad, 0x9bb0, 0x9bb1, - 0x9bb2, 0xe4a1, 0x9bb3, 0xbbee, 0xcddd, 0xc7a2, 0xc5c9, 0x9bb4, - 0x9bb5, 0xc1f7, 0x9bb6, 0xe4a4, 0x9bb7, 0xc7b3, 0xbdac, 0xbdbd, - 0xe4a5, 0x9bb8, 0xd7c7, 0xb2e2, 0x9bb9, 0xe4ab, 0xbcc3, 0xe4af, - 0x9bba, 0xbbeb, 0xe4b0, 0xc5a8, 0xe4b1, 0x9bbb, 0x9bbc, 0x9bbd, - 0x9bbe, 0xd5e3, 0xbfa3, 0x9bbf, 0xe4ba, 0x9bc0, 0xe4b7, 0x9bc1, - 0xe4bb, 0x9bc2, 0x9bc3, 0xe4bd, 0x9bc4, 0x9bc5, 0xc6d6, 0x9bc6, - 0x9bc7, 0xbac6, 0xc0cb, 0x9bc8, 0x9bc9, 0x9bca, 0xb8a1, 0xe4b4, - 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, 0xd4a1, 0x9bcf, 0x9bd0, 0xbaa3, - 0xbdfe, 0x9bd1, 0x9bd2, 0x9bd3, 0xe4bc, 0x9bd4, 0x9bd5, 0x9bd6, - 0x9bd7, 0x9bd8, 0xcdbf, 0x9bd9, 0x9bda, 0xc4f9, 0x9bdb, 0x9bdc, - 0xcffb, 0xc9e6, 0x9bdd, 0x9bde, 0xd3bf, 0x9bdf, 0xcfd1, 0x9be0, - 0x9be1, 0xe4b3, 0x9be2, 0xe4b8, 0xe4b9, 0xcce9, 0x9be3, 0x9be4, - 0x9be5, 0x9be6, 0x9be7, 0xccce, 0x9be8, 0xc0d4, 0xe4b5, 0xc1b0, - 0xe4b6, 0xced0, 0x9be9, 0xbbc1, 0xb5d3, 0x9bea, 0xc8f3, 0xbda7, - 0xd5c7, 0xc9ac, 0xb8a2, 0xe4ca, 0x9beb, 0x9bec, 0xe4cc, 0xd1c4, - 0x9bed, 0x9bee, 0xd2ba, 0x9bef, 0x9bf0, 0xbaad, 0x9bf1, 0x9bf2, - 0xbad4, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0xe4c3, - 0xb5ed, 0x9bf9, 0x9bfa, 0x9bfb, 0xd7cd, 0xe4c0, 0xcffd, 0xe4bf, - 0x9bfc, 0x9bfd, 0x9bfe, 0xc1dc, 0xccca, 0x9c40, 0x9c41, 0x9c42, - 0x9c43, 0xcae7, 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0xc4d7, 0x9c48, - 0xccd4, 0xe4c8, 0x9c49, 0x9c4a, 0x9c4b, 0xe4c7, 0xe4c1, 0x9c4c, - 0xe4c4, 0xb5ad, 0x9c4d, 0x9c4e, 0xd3d9, 0x9c4f, 0xe4c6, 0x9c50, - 0x9c51, 0x9c52, 0x9c53, 0xd2f9, 0xb4e3, 0x9c54, 0xbbb4, 0x9c55, - 0x9c56, 0xc9ee, 0x9c57, 0xb4be, 0x9c58, 0x9c59, 0x9c5a, 0xbbec, - 0x9c5b, 0xd1cd, 0x9c5c, 0xcced, 0xedb5, 0x9c5d, 0x9c5e, 0x9c5f, - /* 0x6e00 .. 0x6eff */ - 0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0xc7e5, 0x9c65, 0x9c66, - 0x9c67, 0x9c68, 0xd4a8, 0x9c69, 0xe4cb, 0xd7d5, 0xe4c2, 0x9c6a, - 0xbda5, 0xe4c5, 0x9c6b, 0x9c6c, 0xd3e6, 0x9c6d, 0xe4c9, 0xc9f8, - 0x9c6e, 0x9c6f, 0xe4be, 0x9c70, 0x9c71, 0xd3e5, 0x9c72, 0x9c73, - 0xc7fe, 0xb6c9, 0x9c74, 0xd4fc, 0xb2b3, 0xe4d7, 0x9c75, 0x9c76, - 0x9c77, 0xcec2, 0x9c78, 0xe4cd, 0x9c79, 0xcebc, 0x9c7a, 0xb8db, - 0x9c7b, 0x9c7c, 0xe4d6, 0x9c7d, 0xbfca, 0x9c7e, 0x9c80, 0x9c81, - 0xd3ce, 0x9c82, 0xc3ec, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, - 0x9c88, 0x9c89, 0x9c8a, 0xc5c8, 0xe4d8, 0x9c8b, 0x9c8c, 0x9c8d, - 0x9c8e, 0x9c8f, 0x9c90, 0x9c91, 0x9c92, 0xcdc4, 0xe4cf, 0x9c93, - 0x9c94, 0x9c95, 0x9c96, 0xe4d4, 0xe4d5, 0x9c97, 0xbafe, 0x9c98, - 0xcfe6, 0x9c99, 0x9c9a, 0xd5bf, 0x9c9b, 0x9c9c, 0x9c9d, 0xe4d2, - 0x9c9e, 0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, - 0x9ca6, 0x9ca7, 0x9ca8, 0xe4d0, 0x9ca9, 0x9caa, 0xe4ce, 0x9cab, - 0x9cac, 0x9cad, 0x9cae, 0x9caf, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, - 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8, 0x9cb9, 0xcde5, 0xcaaa, - 0x9cba, 0x9cbb, 0x9cbc, 0xc0a3, 0x9cbd, 0xbda6, 0xe4d3, 0x9cbe, - 0x9cbf, 0xb8c8, 0x9cc0, 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0xe4e7, - 0xd4b4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8, 0x9cc9, 0x9cca, 0x9ccb, - 0xe4db, 0x9ccc, 0x9ccd, 0x9cce, 0xc1ef, 0x9ccf, 0x9cd0, 0xe4e9, - 0x9cd1, 0x9cd2, 0xd2e7, 0x9cd3, 0x9cd4, 0xe4df, 0x9cd5, 0xe4e0, - 0x9cd6, 0x9cd7, 0xcfaa, 0x9cd8, 0x9cd9, 0x9cda, 0x9cdb, 0xcbdd, - 0x9cdc, 0xe4da, 0xe4d1, 0x9cdd, 0xe4e5, 0x9cde, 0xc8dc, 0xe4e3, - 0x9cdf, 0x9ce0, 0xc4e7, 0xe4e2, 0x9ce1, 0xe4e1, 0x9ce2, 0x9ce3, - 0x9ce4, 0xb3fc, 0xe4e8, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0xb5e1, - 0x9ce9, 0x9cea, 0x9ceb, 0xd7cc, 0x9cec, 0x9ced, 0x9cee, 0xe4e6, - 0x9cef, 0xbbac, 0x9cf0, 0xd7d2, 0xcccf, 0xebf8, 0x9cf1, 0xe4e4, - 0x9cf2, 0x9cf3, 0xb9f6, 0x9cf4, 0x9cf5, 0x9cf6, 0xd6cd, 0xe4d9, - 0xe4dc, 0xc2fa, 0xe4de, 0x9cf7, 0xc2cb, 0xc0c4, 0xc2d0, 0x9cf8, - 0xb1f5, 0xccb2, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, - 0x9d40, 0x9d41, 0x9d42, 0x9d43, 0xb5ce, 0x9d44, 0x9d45, 0x9d46, - 0x9d47, 0xe4ef, 0x9d48, 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, - /* 0x6f00 .. 0x6fff */ - 0x9d4e, 0x9d4f, 0xc6af, 0x9d50, 0x9d51, 0x9d52, 0xc6e1, 0x9d53, - 0x9d54, 0xe4f5, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0xc2a9, - 0x9d5a, 0x9d5b, 0x9d5c, 0xc0ec, 0xd1dd, 0xe4ee, 0x9d5d, 0x9d5e, - 0x9d5f, 0x9d60, 0x9d61, 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, - 0xc4ae, 0x9d67, 0x9d68, 0x9d69, 0xe4ed, 0x9d6a, 0x9d6b, 0x9d6c, - 0x9d6d, 0xe4f6, 0xe4f4, 0xc2fe, 0x9d6e, 0xe4dd, 0x9d6f, 0xe4f0, - 0x9d70, 0xcafe, 0x9d71, 0xd5c4, 0x9d72, 0x9d73, 0xe4f1, 0x9d74, - 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, 0xd1fa, 0x9d7b, - 0x9d7c, 0x9d7d, 0x9d7e, 0x9d80, 0x9d81, 0x9d82, 0xe4eb, 0xe4ec, - 0x9d83, 0x9d84, 0x9d85, 0xe4f2, 0x9d86, 0xceab, 0x9d87, 0x9d88, - 0x9d89, 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, - 0xc5cb, 0x9d91, 0x9d92, 0x9d93, 0xc7b1, 0x9d94, 0xc2ba, 0x9d95, - 0x9d96, 0x9d97, 0xe4ea, 0x9d98, 0x9d99, 0x9d9a, 0xc1ca, 0x9d9b, - 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0xccb6, 0xb3b1, 0x9da1, - 0x9da2, 0x9da3, 0xe4fb, 0x9da4, 0xe4f3, 0x9da5, 0x9da6, 0x9da7, - 0xe4fa, 0x9da8, 0xe4fd, 0x9da9, 0xe4fc, 0x9daa, 0x9dab, 0x9dac, - 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0xb3ce, 0x9db1, 0x9db2, 0x9db3, - 0xb3ba, 0xe4f7, 0x9db4, 0x9db5, 0xe4f9, 0xe4f8, 0xc5ec, 0x9db6, - 0x9db7, 0x9db8, 0x9db9, 0x9dba, 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, - 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, 0xc0bd, 0x9dc3, 0x9dc4, 0x9dc5, - 0x9dc6, 0xd4e8, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, 0x9dcb, 0xe5a2, - 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, 0x9dd3, - 0x9dd4, 0x9dd5, 0x9dd6, 0xb0c4, 0x9dd7, 0x9dd8, 0xe5a4, 0x9dd9, - 0x9dda, 0xe5a3, 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, - 0xbca4, 0x9de1, 0xe5a5, 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, - 0x9de7, 0xe5a1, 0x9de8, 0x9de9, 0x9dea, 0x9deb, 0x9dec, 0x9ded, - 0x9dee, 0xe4fe, 0xb1f4, 0x9def, 0x9df0, 0x9df1, 0x9df2, 0x9df3, - 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0xe5a8, 0x9dfa, - 0xe5a9, 0xe5a6, 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9e40, 0x9e41, - 0x9e42, 0x9e43, 0x9e44, 0x9e45, 0x9e46, 0x9e47, 0xe5a7, 0xe5aa, - 0x9e48, 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, - 0x9e50, 0x9e51, 0x9e52, 0x9e53, 0x9e54, 0x9e55, 0x9e56, 0x9e57, - /* 0x7000 .. 0x70ff */ - 0x9e58, 0x9e59, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f, - 0x9e60, 0x9e61, 0x9e62, 0x9e63, 0x9e64, 0x9e65, 0x9e66, 0x9e67, - 0x9e68, 0xc6d9, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e6d, 0x9e6e, - 0x9e6f, 0x9e70, 0xe5ab, 0xe5ad, 0x9e71, 0x9e72, 0x9e73, 0x9e74, - 0x9e75, 0x9e76, 0x9e77, 0xe5ac, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, - 0x9e7c, 0x9e7d, 0x9e7e, 0x9e80, 0x9e81, 0x9e82, 0x9e83, 0x9e84, - 0x9e85, 0x9e86, 0x9e87, 0x9e88, 0x9e89, 0xe5af, 0x9e8a, 0x9e8b, - 0x9e8c, 0xe5ae, 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e92, - 0x9e93, 0x9e94, 0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, - 0x9e9b, 0x9e9c, 0x9e9d, 0x9e9e, 0xb9e0, 0x9e9f, 0x9ea0, 0xe5b0, - 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, - 0x9ea9, 0x9eaa, 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0xe5b1, 0x9eaf, - 0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, 0x9eb5, 0x9eb6, 0x9eb7, - 0x9eb8, 0x9eb9, 0x9eba, 0xbbf0, 0xece1, 0xc3f0, 0x9ebb, 0xb5c6, - 0xbbd2, 0x9ebc, 0x9ebd, 0x9ebe, 0x9ebf, 0xc1e9, 0xd4ee, 0x9ec0, - 0xbec4, 0x9ec1, 0x9ec2, 0x9ec3, 0xd7c6, 0x9ec4, 0xd4d6, 0xb2d3, - 0xecbe, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0xeac1, 0x9ec9, 0x9eca, - 0x9ecb, 0xc2af, 0xb4b6, 0x9ecc, 0x9ecd, 0x9ece, 0xd1d7, 0x9ecf, - 0x9ed0, 0x9ed1, 0xb3b4, 0x9ed2, 0xc8b2, 0xbfbb, 0xecc0, 0x9ed3, - 0x9ed4, 0xd6cb, 0x9ed5, 0x9ed6, 0xecbf, 0xecc1, 0x9ed7, 0x9ed8, - 0x9ed9, 0x9eda, 0x9edb, 0x9edc, 0x9edd, 0x9ede, 0x9edf, 0x9ee0, - 0x9ee1, 0x9ee2, 0x9ee3, 0xecc5, 0xbee6, 0xccbf, 0xc5da, 0xbebc, - 0x9ee4, 0xecc6, 0x9ee5, 0xb1fe, 0x9ee6, 0x9ee7, 0x9ee8, 0xecc4, - 0xd5a8, 0xb5e3, 0x9ee9, 0xecc2, 0xc1b6, 0xb3e3, 0x9eea, 0x9eeb, - 0xecc3, 0xcbb8, 0xc0c3, 0xccfe, 0x9eec, 0x9eed, 0x9eee, 0x9eef, - 0xc1d2, 0x9ef0, 0xecc8, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, 0x9ef5, - 0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, 0x9efd, - 0xbae6, 0xc0d3, 0x9efe, 0xd6f2, 0x9f40, 0x9f41, 0x9f42, 0xd1cc, - 0x9f43, 0x9f44, 0x9f45, 0x9f46, 0xbfbe, 0x9f47, 0xb7b3, 0xc9d5, - 0xecc7, 0xbbe2, 0x9f48, 0xcccc, 0xbdfd, 0xc8c8, 0x9f49, 0xcfa9, - 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, 0x9f50, 0xcde9, - 0x9f51, 0xc5eb, 0x9f52, 0x9f53, 0x9f54, 0xb7e9, 0x9f55, 0x9f56, - /* 0x7100 .. 0x71ff */ - 0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, - 0x9f5f, 0xd1c9, 0xbab8, 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, - 0xecc9, 0x9f65, 0x9f66, 0xecca, 0x9f67, 0xbbc0, 0xeccb, 0x9f68, - 0xece2, 0xb1ba, 0xb7d9, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, - 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0xbdb9, 0x9f74, - 0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0xeccc, - 0xd1e6, 0xeccd, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f80, 0xc8bb, 0x9f81, - 0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86, 0x9f87, 0x9f88, 0x9f89, - 0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, 0xecd1, 0x9f8f, 0x9f90, - 0x9f91, 0x9f92, 0xecd3, 0x9f93, 0xbbcd, 0x9f94, 0xbce5, 0x9f95, - 0x9f96, 0x9f97, 0x9f98, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, - 0x9f9e, 0x9f9f, 0x9fa0, 0x9fa1, 0xeccf, 0x9fa2, 0xc9b7, 0x9fa3, - 0x9fa4, 0x9fa5, 0x9fa6, 0x9fa7, 0xc3ba, 0x9fa8, 0xece3, 0xd5d5, - 0xecd0, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0xd6f3, 0x9fae, - 0x9faf, 0x9fb0, 0xecd2, 0xecce, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, - 0xecd4, 0x9fb5, 0xecd5, 0x9fb6, 0x9fb7, 0xc9bf, 0x9fb8, 0x9fb9, - 0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0xcfa8, 0x9fbe, 0x9fbf, 0x9fc0, - 0x9fc1, 0x9fc2, 0xd0dc, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6, 0xd1ac, - 0x9fc7, 0x9fc8, 0x9fc9, 0x9fca, 0xc8db, 0x9fcb, 0x9fcc, 0x9fcd, - 0xecd6, 0xcef5, 0x9fce, 0x9fcf, 0x9fd0, 0x9fd1, 0x9fd2, 0xcaec, - 0xecda, 0x9fd3, 0x9fd4, 0x9fd5, 0x9fd6, 0x9fd7, 0x9fd8, 0x9fd9, - 0xecd9, 0x9fda, 0x9fdb, 0x9fdc, 0xb0be, 0x9fdd, 0x9fde, 0x9fdf, - 0x9fe0, 0x9fe1, 0x9fe2, 0xecd7, 0x9fe3, 0xecd8, 0x9fe4, 0x9fe5, - 0x9fe6, 0xece4, 0x9fe7, 0x9fe8, 0x9fe9, 0x9fea, 0x9feb, 0x9fec, - 0x9fed, 0x9fee, 0x9fef, 0xc8bc, 0x9ff0, 0x9ff1, 0x9ff2, 0x9ff3, - 0x9ff4, 0x9ff5, 0x9ff6, 0x9ff7, 0x9ff8, 0x9ff9, 0xc1c7, 0x9ffa, - 0x9ffb, 0x9ffc, 0x9ffd, 0x9ffe, 0xecdc, 0xd1e0, 0xa040, 0xa041, - 0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047, 0xa048, 0xa049, - 0xecdb, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xd4ef, 0xa04e, 0xecdd, - 0xa04f, 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xdbc6, 0xa055, - 0xa056, 0xa057, 0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, - 0xa05e, 0xecde, 0xa05f, 0xa060, 0xa061, 0xa062, 0xa063, 0xa064, - /* 0x7200 .. 0x72ff */ - 0xa065, 0xa066, 0xa067, 0xa068, 0xa069, 0xa06a, 0xb1ac, 0xa06b, - 0xa06c, 0xa06d, 0xa06e, 0xa06f, 0xa070, 0xa071, 0xa072, 0xa073, - 0xa074, 0xa075, 0xa076, 0xa077, 0xa078, 0xa079, 0xa07a, 0xa07b, - 0xa07c, 0xa07d, 0xa07e, 0xa080, 0xa081, 0xecdf, 0xa082, 0xa083, - 0xa084, 0xa085, 0xa086, 0xa087, 0xa088, 0xa089, 0xa08a, 0xa08b, - 0xece0, 0xa08c, 0xd7a6, 0xa08d, 0xc5c0, 0xa08e, 0xa08f, 0xa090, - 0xebbc, 0xb0ae, 0xa091, 0xa092, 0xa093, 0xbef4, 0xb8b8, 0xd2af, - 0xb0d6, 0xb5f9, 0xa094, 0xd8b3, 0xa095, 0xcbac, 0xa096, 0xe3dd, - 0xa097, 0xa098, 0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d, 0xc6ac, - 0xb0e6, 0xa09e, 0xa09f, 0xa0a0, 0xc5c6, 0xebb9, 0xa0a1, 0xa0a2, - 0xa0a3, 0xa0a4, 0xebba, 0xa0a5, 0xa0a6, 0xa0a7, 0xebbb, 0xa0a8, - 0xa0a9, 0xd1c0, 0xa0aa, 0xc5a3, 0xa0ab, 0xeaf2, 0xa0ac, 0xc4b2, - 0xa0ad, 0xc4b5, 0xc0ce, 0xa0ae, 0xa0af, 0xa0b0, 0xeaf3, 0xc4c1, - 0xa0b1, 0xceef, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xeaf0, 0xeaf4, - 0xa0b6, 0xa0b7, 0xc9fc, 0xa0b8, 0xa0b9, 0xc7a3, 0xa0ba, 0xa0bb, - 0xa0bc, 0xccd8, 0xcefe, 0xa0bd, 0xa0be, 0xa0bf, 0xeaf5, 0xeaf6, - 0xcfac, 0xc0e7, 0xa0c0, 0xa0c1, 0xeaf7, 0xa0c2, 0xa0c3, 0xa0c4, - 0xa0c5, 0xa0c6, 0xb6bf, 0xeaf8, 0xa0c7, 0xeaf9, 0xa0c8, 0xeafa, - 0xa0c9, 0xa0ca, 0xeafb, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, - 0xa0d0, 0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0xa0d5, 0xa0d6, 0xeaf1, - 0xa0d7, 0xa0d8, 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, - 0xa0df, 0xa0e0, 0xa0e1, 0xa0e2, 0xc8ae, 0xe1eb, 0xa0e3, 0xb7b8, - 0xe1ec, 0xa0e4, 0xa0e5, 0xa0e6, 0xe1ed, 0xa0e7, 0xd7b4, 0xe1ee, - 0xe1ef, 0xd3cc, 0xa0e8, 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, - 0xa0ee, 0xe1f1, 0xbff1, 0xe1f0, 0xb5d2, 0xa0ef, 0xa0f0, 0xa0f1, - 0xb1b7, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xe1f3, 0xe1f2, 0xa0f6, - 0xbafc, 0xa0f7, 0xe1f4, 0xa0f8, 0xa0f9, 0xa0fa, 0xa0fb, 0xb9b7, - 0xa0fc, 0xbed1, 0xa0fd, 0xa0fe, 0xaa40, 0xaa41, 0xc4fc, 0xaa42, - 0xbadd, 0xbdc6, 0xaa43, 0xaa44, 0xaa45, 0xaa46, 0xaa47, 0xaa48, - 0xe1f5, 0xe1f7, 0xaa49, 0xaa4a, 0xb6c0, 0xcfc1, 0xcaa8, 0xe1f6, - 0xd5f8, 0xd3fc, 0xe1f8, 0xe1fc, 0xe1f9, 0xaa4b, 0xaa4c, 0xe1fa, - 0xc0ea, 0xaa4d, 0xe1fe, 0xe2a1, 0xc0c7, 0xaa4e, 0xaa4f, 0xaa50, - /* 0x7300 .. 0x73ff */ - 0xaa51, 0xe1fb, 0xaa52, 0xe1fd, 0xaa53, 0xaa54, 0xaa55, 0xaa56, - 0xaa57, 0xaa58, 0xe2a5, 0xaa59, 0xaa5a, 0xaa5b, 0xc1d4, 0xaa5c, - 0xaa5d, 0xaa5e, 0xaa5f, 0xe2a3, 0xaa60, 0xe2a8, 0xb2fe, 0xe2a2, - 0xaa61, 0xaa62, 0xaa63, 0xc3cd, 0xb2c2, 0xe2a7, 0xe2a6, 0xaa64, - 0xaa65, 0xe2a4, 0xe2a9, 0xaa66, 0xaa67, 0xe2ab, 0xaa68, 0xaa69, - 0xaa6a, 0xd0c9, 0xd6ed, 0xc3a8, 0xe2ac, 0xaa6b, 0xcfd7, 0xaa6c, - 0xaa6d, 0xe2ae, 0xaa6e, 0xaa6f, 0xbaef, 0xaa70, 0xaa71, 0xe9e0, - 0xe2ad, 0xe2aa, 0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xbbab, 0xd4b3, - 0xaa76, 0xaa77, 0xaa78, 0xaa79, 0xaa7a, 0xaa7b, 0xaa7c, 0xaa7d, - 0xaa7e, 0xaa80, 0xaa81, 0xaa82, 0xaa83, 0xe2b0, 0xaa84, 0xaa85, - 0xe2af, 0xaa86, 0xe9e1, 0xaa87, 0xaa88, 0xaa89, 0xaa8a, 0xe2b1, - 0xaa8b, 0xaa8c, 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa92, - 0xe2b2, 0xaa93, 0xaa94, 0xaa95, 0xaa96, 0xaa97, 0xaa98, 0xaa99, - 0xaa9a, 0xaa9b, 0xaa9c, 0xaa9d, 0xe2b3, 0xcca1, 0xaa9e, 0xe2b4, - 0xaa9f, 0xaaa0, 0xab40, 0xab41, 0xab42, 0xab43, 0xab44, 0xab45, - 0xab46, 0xab47, 0xab48, 0xab49, 0xab4a, 0xab4b, 0xe2b5, 0xab4c, - 0xab4d, 0xab4e, 0xab4f, 0xab50, 0xd0fe, 0xab51, 0xab52, 0xc2ca, - 0xab53, 0xd3f1, 0xab54, 0xcdf5, 0xab55, 0xab56, 0xe7e0, 0xab57, - 0xab58, 0xe7e1, 0xab59, 0xab5a, 0xab5b, 0xab5c, 0xbec1, 0xab5d, - 0xab5e, 0xab5f, 0xab60, 0xc2ea, 0xab61, 0xab62, 0xab63, 0xe7e4, - 0xab64, 0xab65, 0xe7e3, 0xab66, 0xab67, 0xab68, 0xab69, 0xab6a, - 0xab6b, 0xcde6, 0xab6c, 0xc3b5, 0xab6d, 0xab6e, 0xe7e2, 0xbbb7, - 0xcfd6, 0xab6f, 0xc1e1, 0xe7e9, 0xab70, 0xab71, 0xab72, 0xe7e8, - 0xab73, 0xab74, 0xe7f4, 0xb2a3, 0xab75, 0xab76, 0xab77, 0xab78, - 0xe7ea, 0xab79, 0xe7e6, 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, - 0xe7ec, 0xe7eb, 0xc9ba, 0xab80, 0xab81, 0xd5e4, 0xab82, 0xe7e5, - 0xb7a9, 0xe7e7, 0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, - 0xab89, 0xe7ee, 0xab8a, 0xab8b, 0xab8c, 0xab8d, 0xe7f3, 0xab8e, - 0xd6e9, 0xab8f, 0xab90, 0xab91, 0xab92, 0xe7ed, 0xab93, 0xe7f2, - 0xab94, 0xe7f1, 0xab95, 0xab96, 0xab97, 0xb0e0, 0xab98, 0xab99, - 0xab9a, 0xab9b, 0xe7f5, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, - 0xac40, 0xac41, 0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, - /* 0x7400 .. 0x74ff */ - 0xac48, 0xac49, 0xac4a, 0xc7f2, 0xac4b, 0xc0c5, 0xc0ed, 0xac4c, - 0xac4d, 0xc1f0, 0xe7f0, 0xac4e, 0xac4f, 0xac50, 0xac51, 0xe7f6, - 0xcbf6, 0xac52, 0xac53, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, - 0xac59, 0xac5a, 0xe8a2, 0xe8a1, 0xac5b, 0xac5c, 0xac5d, 0xac5e, - 0xac5f, 0xac60, 0xd7c1, 0xac61, 0xac62, 0xe7fa, 0xe7f9, 0xac63, - 0xe7fb, 0xac64, 0xe7f7, 0xac65, 0xe7fe, 0xac66, 0xe7fd, 0xac67, - 0xe7fc, 0xac68, 0xac69, 0xc1d5, 0xc7d9, 0xc5fd, 0xc5c3, 0xac6a, - 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xc7ed, 0xac6f, 0xac70, 0xac71, - 0xac72, 0xe8a3, 0xac73, 0xac74, 0xac75, 0xac76, 0xac77, 0xac78, - 0xac79, 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e, 0xac80, 0xac81, - 0xac82, 0xac83, 0xac84, 0xac85, 0xac86, 0xe8a6, 0xac87, 0xe8a5, - 0xac88, 0xe8a7, 0xbaf7, 0xe7f8, 0xe8a4, 0xac89, 0xc8f0, 0xc9aa, - 0xac8a, 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, - 0xac92, 0xac93, 0xac94, 0xac95, 0xac96, 0xe8a9, 0xac97, 0xac98, - 0xb9e5, 0xac99, 0xac9a, 0xac9b, 0xac9c, 0xac9d, 0xd1fe, 0xe8a8, - 0xac9e, 0xac9f, 0xaca0, 0xad40, 0xad41, 0xad42, 0xe8aa, 0xad43, - 0xe8ad, 0xe8ae, 0xad44, 0xc1a7, 0xad45, 0xad46, 0xad47, 0xe8af, - 0xad48, 0xad49, 0xad4a, 0xe8b0, 0xad4b, 0xad4c, 0xe8ac, 0xad4d, - 0xe8b4, 0xad4e, 0xad4f, 0xad50, 0xad51, 0xad52, 0xad53, 0xad54, - 0xad55, 0xad56, 0xad57, 0xad58, 0xe8ab, 0xad59, 0xe8b1, 0xad5a, - 0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f, 0xad60, 0xad61, 0xe8b5, - 0xe8b2, 0xe8b3, 0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67, - 0xad68, 0xad69, 0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, 0xad6f, - 0xad70, 0xad71, 0xe8b7, 0xad72, 0xad73, 0xad74, 0xad75, 0xad76, - 0xad77, 0xad78, 0xad79, 0xad7a, 0xad7b, 0xad7c, 0xad7d, 0xad7e, - 0xad80, 0xad81, 0xad82, 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, - 0xad88, 0xad89, 0xe8b6, 0xad8a, 0xad8b, 0xad8c, 0xad8d, 0xad8e, - 0xad8f, 0xad90, 0xad91, 0xad92, 0xb9cf, 0xad93, 0xf0ac, 0xad94, - 0xf0ad, 0xad95, 0xc6b0, 0xb0ea, 0xc8bf, 0xad96, 0xcddf, 0xad97, - 0xad98, 0xad99, 0xad9a, 0xad9b, 0xad9c, 0xad9d, 0xcecd, 0xeab1, - 0xad9e, 0xad9f, 0xada0, 0xae40, 0xeab2, 0xae41, 0xc6bf, 0xb4c9, - 0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, 0xae48, 0xeab3, - /* 0x7500 .. 0x75ff */ - 0xae49, 0xae4a, 0xae4b, 0xae4c, 0xd5e7, 0xae4d, 0xae4e, 0xae4f, - 0xae50, 0xae51, 0xae52, 0xae53, 0xae54, 0xddf9, 0xae55, 0xeab4, - 0xae56, 0xeab5, 0xae57, 0xeab6, 0xae58, 0xae59, 0xae5a, 0xae5b, - 0xb8ca, 0xdfb0, 0xc9f5, 0xae5c, 0xccf0, 0xae5d, 0xae5e, 0xc9fa, - 0xae5f, 0xae60, 0xae61, 0xae62, 0xae63, 0xc9fb, 0xae64, 0xae65, - 0xd3c3, 0xcba6, 0xae66, 0xb8a6, 0xf0ae, 0xb1c2, 0xae67, 0xe5b8, - 0xccef, 0xd3c9, 0xbcd7, 0xc9ea, 0xae68, 0xb5e7, 0xae69, 0xc4d0, - 0xb5e9, 0xae6a, 0xeeae, 0xbbad, 0xae6b, 0xae6c, 0xe7de, 0xae6d, - 0xeeaf, 0xae6e, 0xae6f, 0xae70, 0xae71, 0xb3a9, 0xae72, 0xae73, - 0xeeb2, 0xae74, 0xae75, 0xeeb1, 0xbde7, 0xae76, 0xeeb0, 0xceb7, - 0xae77, 0xae78, 0xae79, 0xae7a, 0xc5cf, 0xae7b, 0xae7c, 0xae7d, - 0xae7e, 0xc1f4, 0xdbce, 0xeeb3, 0xd0f3, 0xae80, 0xae81, 0xae82, - 0xae83, 0xae84, 0xae85, 0xae86, 0xae87, 0xc2d4, 0xc6e8, 0xae88, - 0xae89, 0xae8a, 0xb7ac, 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, - 0xae90, 0xae91, 0xeeb4, 0xae92, 0xb3eb, 0xae93, 0xae94, 0xae95, - 0xbbfb, 0xeeb5, 0xae96, 0xae97, 0xae98, 0xae99, 0xae9a, 0xe7dc, - 0xae9b, 0xae9c, 0xae9d, 0xeeb6, 0xae9e, 0xae9f, 0xbdae, 0xaea0, - 0xaf40, 0xaf41, 0xaf42, 0xf1e2, 0xaf43, 0xaf44, 0xaf45, 0xcae8, - 0xaf46, 0xd2c9, 0xf0da, 0xaf47, 0xf0db, 0xaf48, 0xf0dc, 0xc1c6, - 0xaf49, 0xb8ed, 0xbece, 0xaf4a, 0xaf4b, 0xf0de, 0xaf4c, 0xc5b1, - 0xf0dd, 0xd1f1, 0xaf4d, 0xf0e0, 0xb0cc, 0xbdea, 0xaf4e, 0xaf4f, - 0xaf50, 0xaf51, 0xaf52, 0xd2df, 0xf0df, 0xaf53, 0xb4af, 0xb7e8, - 0xf0e6, 0xf0e5, 0xc6a3, 0xf0e1, 0xf0e2, 0xb4c3, 0xaf54, 0xaf55, - 0xf0e3, 0xd5ee, 0xaf56, 0xaf57, 0xccdb, 0xbed2, 0xbcb2, 0xaf58, - 0xaf59, 0xaf5a, 0xf0e8, 0xf0e7, 0xf0e4, 0xb2a1, 0xaf5b, 0xd6a2, - 0xd3b8, 0xbeb7, 0xc8ac, 0xaf5c, 0xaf5d, 0xf0ea, 0xaf5e, 0xaf5f, - 0xaf60, 0xaf61, 0xd1f7, 0xaf62, 0xd6cc, 0xbadb, 0xf0e9, 0xaf63, - 0xb6bb, 0xaf64, 0xaf65, 0xcdb4, 0xaf66, 0xaf67, 0xc6a6, 0xaf68, - 0xaf69, 0xaf6a, 0xc1a1, 0xf0eb, 0xf0ee, 0xaf6b, 0xf0ed, 0xf0f0, - 0xf0ec, 0xaf6c, 0xbbbe, 0xf0ef, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, - 0xccb5, 0xf0f2, 0xaf71, 0xaf72, 0xb3d5, 0xaf73, 0xaf74, 0xaf75, - 0xaf76, 0xb1d4, 0xaf77, 0xaf78, 0xf0f3, 0xaf79, 0xaf7a, 0xf0f4, - /* 0x7600 .. 0x76ff */ - 0xf0f6, 0xb4e1, 0xaf7b, 0xf0f1, 0xaf7c, 0xf0f7, 0xaf7d, 0xaf7e, - 0xaf80, 0xaf81, 0xf0fa, 0xaf82, 0xf0f8, 0xaf83, 0xaf84, 0xaf85, - 0xf0f5, 0xaf86, 0xaf87, 0xaf88, 0xaf89, 0xf0fd, 0xaf8a, 0xf0f9, - 0xf0fc, 0xf0fe, 0xaf8b, 0xf1a1, 0xaf8c, 0xaf8d, 0xaf8e, 0xcec1, - 0xf1a4, 0xaf8f, 0xf1a3, 0xaf90, 0xc1f6, 0xf0fb, 0xcadd, 0xaf91, - 0xaf92, 0xb4f1, 0xb1f1, 0xccb1, 0xaf93, 0xf1a6, 0xaf94, 0xaf95, - 0xf1a7, 0xaf96, 0xaf97, 0xf1ac, 0xd5ce, 0xf1a9, 0xaf98, 0xaf99, - 0xc8b3, 0xaf9a, 0xaf9b, 0xaf9c, 0xf1a2, 0xaf9d, 0xf1ab, 0xf1a8, - 0xf1a5, 0xaf9e, 0xaf9f, 0xf1aa, 0xafa0, 0xb040, 0xb041, 0xb042, - 0xb043, 0xb044, 0xb045, 0xb046, 0xb0a9, 0xf1ad, 0xb047, 0xb048, - 0xb049, 0xb04a, 0xb04b, 0xb04c, 0xf1af, 0xb04d, 0xf1b1, 0xb04e, - 0xb04f, 0xb050, 0xb051, 0xb052, 0xf1b0, 0xb053, 0xf1ae, 0xb054, - 0xb055, 0xb056, 0xb057, 0xd1a2, 0xb058, 0xb059, 0xb05a, 0xb05b, - 0xb05c, 0xb05d, 0xb05e, 0xf1b2, 0xb05f, 0xb060, 0xb061, 0xf1b3, - 0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067, 0xb068, 0xb069, - 0xb9ef, 0xb06a, 0xb06b, 0xb5c7, 0xb06c, 0xb0d7, 0xb0d9, 0xb06d, - 0xb06e, 0xb06f, 0xd4ed, 0xb070, 0xb5c4, 0xb071, 0xbdd4, 0xbbca, - 0xf0a7, 0xb072, 0xb073, 0xb8de, 0xb074, 0xb075, 0xf0a8, 0xb076, - 0xb077, 0xb0a8, 0xb078, 0xf0a9, 0xb079, 0xb07a, 0xcdee, 0xb07b, - 0xb07c, 0xf0aa, 0xb07d, 0xb07e, 0xb080, 0xb081, 0xb082, 0xb083, - 0xb084, 0xb085, 0xb086, 0xb087, 0xf0ab, 0xb088, 0xb089, 0xb08a, - 0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xc6a4, 0xb091, - 0xb092, 0xd6e5, 0xf1e4, 0xb093, 0xf1e5, 0xb094, 0xb095, 0xb096, - 0xb097, 0xb098, 0xb099, 0xb09a, 0xb09b, 0xb09c, 0xb09d, 0xc3f3, - 0xb09e, 0xb09f, 0xd3db, 0xb0a0, 0xb140, 0xd6d1, 0xc5e8, 0xb141, - 0xd3af, 0xb142, 0xd2e6, 0xb143, 0xb144, 0xeec1, 0xb0bb, 0xd5b5, - 0xd1ce, 0xbce0, 0xbad0, 0xb145, 0xbff8, 0xb146, 0xb8c7, 0xb5c1, - 0xc5cc, 0xb147, 0xb148, 0xcaa2, 0xb149, 0xb14a, 0xb14b, 0xc3cb, - 0xb14c, 0xb14d, 0xb14e, 0xb14f, 0xb150, 0xeec2, 0xb151, 0xb152, - 0xb153, 0xb154, 0xb155, 0xb156, 0xb157, 0xb158, 0xc4bf, 0xb6a2, - 0xb159, 0xedec, 0xc3a4, 0xb15a, 0xd6b1, 0xb15b, 0xb15c, 0xb15d, - 0xcfe0, 0xedef, 0xb15e, 0xb15f, 0xc5ce, 0xb160, 0xb6dc, 0xb161, - /* 0x7700 .. 0x77ff */ - 0xb162, 0xcaa1, 0xb163, 0xb164, 0xeded, 0xb165, 0xb166, 0xedf0, - 0xedf1, 0xc3bc, 0xb167, 0xbfb4, 0xb168, 0xedee, 0xb169, 0xb16a, - 0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171, 0xb172, - 0xb173, 0xedf4, 0xedf2, 0xb174, 0xb175, 0xb176, 0xb177, 0xd5e6, - 0xc3df, 0xb178, 0xedf3, 0xb179, 0xb17a, 0xb17b, 0xedf6, 0xb17c, - 0xd5a3, 0xd1a3, 0xb17d, 0xb17e, 0xb180, 0xedf5, 0xb181, 0xc3d0, - 0xb182, 0xb183, 0xb184, 0xb185, 0xb186, 0xedf7, 0xbff4, 0xbeec, - 0xedf8, 0xb187, 0xccf7, 0xb188, 0xd1db, 0xb189, 0xb18a, 0xb18b, - 0xd7c5, 0xd5f6, 0xb18c, 0xedfc, 0xb18d, 0xb18e, 0xb18f, 0xedfb, - 0xb190, 0xb191, 0xb192, 0xb193, 0xb194, 0xb195, 0xb196, 0xb197, - 0xedf9, 0xedfa, 0xb198, 0xb199, 0xb19a, 0xb19b, 0xb19c, 0xb19d, - 0xb19e, 0xb19f, 0xedfd, 0xbea6, 0xb1a0, 0xb240, 0xb241, 0xb242, - 0xb243, 0xcbaf, 0xeea1, 0xb6bd, 0xb244, 0xeea2, 0xc4c0, 0xb245, - 0xedfe, 0xb246, 0xb247, 0xbdde, 0xb2c7, 0xb248, 0xb249, 0xb24a, - 0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251, 0xb252, - 0xb253, 0xb6c3, 0xb254, 0xb255, 0xb256, 0xeea5, 0xd8ba, 0xeea3, - 0xeea6, 0xb257, 0xb258, 0xb259, 0xc3e9, 0xb3f2, 0xb25a, 0xb25b, - 0xb25c, 0xb25d, 0xb25e, 0xb25f, 0xeea7, 0xeea4, 0xcfb9, 0xb260, - 0xb261, 0xeea8, 0xc2f7, 0xb262, 0xb263, 0xb264, 0xb265, 0xb266, - 0xb267, 0xb268, 0xb269, 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xeea9, - 0xeeaa, 0xb26e, 0xdeab, 0xb26f, 0xb270, 0xc6b3, 0xb271, 0xc7c6, - 0xb272, 0xd6f5, 0xb5c9, 0xb273, 0xcbb2, 0xb274, 0xb275, 0xb276, - 0xeeab, 0xb277, 0xb278, 0xcdab, 0xb279, 0xeeac, 0xb27a, 0xb27b, - 0xb27c, 0xb27d, 0xb27e, 0xd5b0, 0xb280, 0xeead, 0xb281, 0xf6c4, - 0xb282, 0xb283, 0xb284, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289, - 0xb28a, 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xdbc7, 0xb28f, 0xb290, - 0xb291, 0xb292, 0xb293, 0xb294, 0xb295, 0xb296, 0xb297, 0xb4a3, - 0xb298, 0xb299, 0xb29a, 0xc3ac, 0xf1e6, 0xb29b, 0xb29c, 0xb29d, - 0xb29e, 0xb29f, 0xcab8, 0xd2d3, 0xb2a0, 0xd6aa, 0xb340, 0xeff2, - 0xb341, 0xbed8, 0xb342, 0xbdc3, 0xeff3, 0xb6cc, 0xb0ab, 0xb343, - 0xb344, 0xb345, 0xb346, 0xcaaf, 0xb347, 0xb348, 0xedb6, 0xb349, - 0xedb7, 0xb34a, 0xb34b, 0xb34c, 0xb34d, 0xcef9, 0xb7af, 0xbff3, - /* 0x7800 .. 0x78ff */ - 0xedb8, 0xc2eb, 0xc9b0, 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb352, - 0xb353, 0xedb9, 0xb354, 0xb355, 0xc6f6, 0xbfb3, 0xb356, 0xb357, - 0xb358, 0xedbc, 0xc5f8, 0xb359, 0xd1d0, 0xb35a, 0xd7a9, 0xedba, - 0xedbb, 0xb35b, 0xd1e2, 0xb35c, 0xedbf, 0xedc0, 0xb35d, 0xedc4, - 0xb35e, 0xb35f, 0xb360, 0xedc8, 0xb361, 0xedc6, 0xedce, 0xd5e8, - 0xb362, 0xedc9, 0xb363, 0xb364, 0xedc7, 0xedbe, 0xb365, 0xb366, - 0xc5e9, 0xb367, 0xb368, 0xb369, 0xc6c6, 0xb36a, 0xb36b, 0xc9e9, - 0xd4d2, 0xedc1, 0xedc2, 0xedc3, 0xedc5, 0xb36c, 0xc0f9, 0xb36d, - 0xb4a1, 0xb36e, 0xb36f, 0xb370, 0xb371, 0xb9e8, 0xb372, 0xedd0, - 0xb373, 0xb374, 0xb375, 0xb376, 0xedd1, 0xb377, 0xedca, 0xb378, - 0xedcf, 0xb379, 0xcef8, 0xb37a, 0xb37b, 0xcbb6, 0xedcc, 0xedcd, - 0xb37c, 0xb37d, 0xb37e, 0xb380, 0xb381, 0xcff5, 0xb382, 0xb383, - 0xb384, 0xb385, 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, 0xb38b, - 0xb38c, 0xb38d, 0xedd2, 0xc1f2, 0xd3b2, 0xedcb, 0xc8b7, 0xb38e, - 0xb38f, 0xb390, 0xb391, 0xb392, 0xb393, 0xb394, 0xb395, 0xbcef, - 0xb396, 0xb397, 0xb398, 0xb399, 0xc5f0, 0xb39a, 0xb39b, 0xb39c, - 0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb440, 0xb441, 0xb442, 0xedd6, - 0xb443, 0xb5ef, 0xb444, 0xb445, 0xc2b5, 0xb0ad, 0xcbe9, 0xb446, - 0xb447, 0xb1ae, 0xb448, 0xedd4, 0xb449, 0xb44a, 0xb44b, 0xcdeb, - 0xb5e2, 0xb44c, 0xedd5, 0xedd3, 0xedd7, 0xb44d, 0xb44e, 0xb5fa, - 0xb44f, 0xedd8, 0xb450, 0xedd9, 0xb451, 0xeddc, 0xb452, 0xb1cc, - 0xb453, 0xb454, 0xb455, 0xb456, 0xb457, 0xb458, 0xb459, 0xb45a, - 0xc5f6, 0xbcee, 0xedda, 0xccbc, 0xb2ea, 0xb45b, 0xb45c, 0xb45d, - 0xb45e, 0xeddb, 0xb45f, 0xb460, 0xb461, 0xb462, 0xc4eb, 0xb463, - 0xb464, 0xb4c5, 0xb465, 0xb466, 0xb467, 0xb0f5, 0xb468, 0xb469, - 0xb46a, 0xeddf, 0xc0da, 0xb4e8, 0xb46b, 0xb46c, 0xb46d, 0xb46e, - 0xc5cd, 0xb46f, 0xb470, 0xb471, 0xeddd, 0xbfc4, 0xb472, 0xb473, - 0xb474, 0xedde, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479, 0xb47a, - 0xb47b, 0xb47c, 0xb47d, 0xb47e, 0xb480, 0xb481, 0xb482, 0xb483, - 0xc4a5, 0xb484, 0xb485, 0xb486, 0xede0, 0xb487, 0xb488, 0xb489, - 0xb48a, 0xb48b, 0xede1, 0xb48c, 0xede3, 0xb48d, 0xb48e, 0xc1d7, - 0xb48f, 0xb490, 0xbbc7, 0xb491, 0xb492, 0xb493, 0xb494, 0xb495, - /* 0x7900 .. 0x79ff */ - 0xb496, 0xbdb8, 0xb497, 0xb498, 0xb499, 0xede2, 0xb49a, 0xb49b, - 0xb49c, 0xb49d, 0xb49e, 0xb49f, 0xb4a0, 0xb540, 0xb541, 0xb542, - 0xb543, 0xb544, 0xb545, 0xede4, 0xb546, 0xb547, 0xb548, 0xb549, - 0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xede6, 0xb550, - 0xb551, 0xb552, 0xb553, 0xb554, 0xede5, 0xb555, 0xb556, 0xb557, - 0xb558, 0xb559, 0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb55e, 0xb55f, - 0xb560, 0xb561, 0xb562, 0xb563, 0xede7, 0xb564, 0xb565, 0xb566, - 0xb567, 0xb568, 0xcabe, 0xecea, 0xc0f1, 0xb569, 0xc9e7, 0xb56a, - 0xeceb, 0xc6ee, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xecec, 0xb56f, - 0xc6ed, 0xeced, 0xb570, 0xb571, 0xb572, 0xb573, 0xb574, 0xb575, - 0xb576, 0xb577, 0xb578, 0xecf0, 0xb579, 0xb57a, 0xd7e6, 0xecf3, - 0xb57b, 0xb57c, 0xecf1, 0xecee, 0xecef, 0xd7a3, 0xc9f1, 0xcbee, - 0xecf4, 0xb57d, 0xecf2, 0xb57e, 0xb580, 0xcfe9, 0xb581, 0xecf6, - 0xc6b1, 0xb582, 0xb583, 0xb584, 0xb585, 0xbcc0, 0xb586, 0xecf5, - 0xb587, 0xb588, 0xb589, 0xb58a, 0xb58b, 0xb58c, 0xb58d, 0xb5bb, - 0xbbf6, 0xb58e, 0xecf7, 0xb58f, 0xb590, 0xb591, 0xb592, 0xb593, - 0xd9f7, 0xbdfb, 0xb594, 0xb595, 0xc2bb, 0xecf8, 0xb596, 0xb597, - 0xb598, 0xb599, 0xecf9, 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb8a3, - 0xb59e, 0xb59f, 0xb5a0, 0xb640, 0xb641, 0xb642, 0xb643, 0xb644, - 0xb645, 0xb646, 0xecfa, 0xb647, 0xb648, 0xb649, 0xb64a, 0xb64b, - 0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651, 0xb652, 0xecfb, - 0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659, 0xb65a, - 0xb65b, 0xb65c, 0xb65d, 0xecfc, 0xb65e, 0xb65f, 0xb660, 0xb661, - 0xb662, 0xd3ed, 0xd8ae, 0xc0eb, 0xb663, 0xc7dd, 0xbacc, 0xb664, - 0xd0e3, 0xcbbd, 0xb665, 0xcdba, 0xb666, 0xb667, 0xb8d1, 0xb668, - 0xb669, 0xb1fc, 0xb66a, 0xc7ef, 0xb66b, 0xd6d6, 0xb66c, 0xb66d, - 0xb66e, 0xbfc6, 0xc3eb, 0xb66f, 0xb670, 0xeff5, 0xb671, 0xb672, - 0xc3d8, 0xb673, 0xb674, 0xb675, 0xb676, 0xb677, 0xb678, 0xd7e2, - 0xb679, 0xb67a, 0xb67b, 0xeff7, 0xb3d3, 0xb67c, 0xc7d8, 0xd1ed, - 0xb67d, 0xd6c8, 0xb67e, 0xeff8, 0xb680, 0xeff6, 0xb681, 0xbbfd, - 0xb3c6, 0xb682, 0xb683, 0xb684, 0xb685, 0xb686, 0xb687, 0xb688, - 0xbdd5, 0xb689, 0xb68a, 0xd2c6, 0xb68b, 0xbbe0, 0xb68c, 0xb68d, - /* 0x7a00 .. 0x7aff */ - 0xcfa1, 0xb68e, 0xeffc, 0xeffb, 0xb68f, 0xb690, 0xeff9, 0xb691, - 0xb692, 0xb693, 0xb694, 0xb3cc, 0xb695, 0xc9d4, 0xcbb0, 0xb696, - 0xb697, 0xb698, 0xb699, 0xb69a, 0xeffe, 0xb69b, 0xb69c, 0xb0de, - 0xb69d, 0xb69e, 0xd6c9, 0xb69f, 0xb6a0, 0xb740, 0xeffd, 0xb741, - 0xb3ed, 0xb742, 0xb743, 0xf6d5, 0xb744, 0xb745, 0xb746, 0xb747, - 0xb748, 0xb749, 0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, - 0xb750, 0xb751, 0xb752, 0xcec8, 0xb753, 0xb754, 0xb755, 0xf0a2, - 0xb756, 0xf0a1, 0xb757, 0xb5be, 0xbcda, 0xbbfc, 0xb758, 0xb8e5, - 0xb759, 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xc4c2, 0xb75f, - 0xb760, 0xb761, 0xb762, 0xb763, 0xb764, 0xb765, 0xb766, 0xb767, - 0xb768, 0xf0a3, 0xb769, 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xcbeb, - 0xb76e, 0xb76f, 0xb770, 0xb771, 0xb772, 0xb773, 0xb774, 0xb775, - 0xb776, 0xb777, 0xb778, 0xb779, 0xb77a, 0xb77b, 0xb77c, 0xb77d, - 0xb77e, 0xb780, 0xb781, 0xb782, 0xb783, 0xb784, 0xb785, 0xb786, - 0xf0a6, 0xb787, 0xb788, 0xb789, 0xd1a8, 0xb78a, 0xbebf, 0xc7ee, - 0xf1b6, 0xf1b7, 0xbfd5, 0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb4a9, - 0xf1b8, 0xcdbb, 0xb78f, 0xc7d4, 0xd5ad, 0xb790, 0xf1b9, 0xb791, - 0xf1ba, 0xb792, 0xb793, 0xb794, 0xb795, 0xc7cf, 0xb796, 0xb797, - 0xb798, 0xd2a4, 0xd6cf, 0xb799, 0xb79a, 0xf1bb, 0xbdd1, 0xb4b0, - 0xbebd, 0xb79b, 0xb79c, 0xb79d, 0xb4dc, 0xced1, 0xb79e, 0xbfdf, - 0xf1bd, 0xb79f, 0xb7a0, 0xb840, 0xb841, 0xbffa, 0xf1bc, 0xb842, - 0xf1bf, 0xb843, 0xb844, 0xb845, 0xf1be, 0xf1c0, 0xb846, 0xb847, - 0xb848, 0xb849, 0xb84a, 0xf1c1, 0xb84b, 0xb84c, 0xb84d, 0xb84e, - 0xb84f, 0xb850, 0xb851, 0xb852, 0xb853, 0xb854, 0xb855, 0xc1fe, - 0xb856, 0xb857, 0xb858, 0xb859, 0xb85a, 0xb85b, 0xb85c, 0xb85d, - 0xb85e, 0xb85f, 0xb860, 0xc1a2, 0xb861, 0xb862, 0xb863, 0xb864, - 0xb865, 0xb866, 0xb867, 0xb868, 0xb869, 0xb86a, 0xcafa, 0xb86b, - 0xb86c, 0xd5be, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xbeba, 0xbeb9, - 0xd5c2, 0xb871, 0xb872, 0xbfa2, 0xb873, 0xcdaf, 0xf1b5, 0xb874, - 0xb875, 0xb876, 0xb877, 0xb878, 0xb879, 0xbddf, 0xb87a, 0xb6cb, - 0xb87b, 0xb87c, 0xb87d, 0xb87e, 0xb880, 0xb881, 0xb882, 0xb883, - 0xb884, 0xd6f1, 0xf3c3, 0xb885, 0xb886, 0xf3c4, 0xb887, 0xb8cd, - /* 0x7b00 .. 0x7bff */ - 0xb888, 0xb889, 0xb88a, 0xf3c6, 0xf3c7, 0xb88b, 0xb0ca, 0xb88c, - 0xf3c5, 0xb88d, 0xf3c9, 0xcbf1, 0xb88e, 0xb88f, 0xb890, 0xf3cb, - 0xb891, 0xd0a6, 0xb892, 0xb893, 0xb1ca, 0xf3c8, 0xb894, 0xb895, - 0xb896, 0xf3cf, 0xb897, 0xb5d1, 0xb898, 0xb899, 0xf3d7, 0xb89a, - 0xf3d2, 0xb89b, 0xb89c, 0xb89d, 0xf3d4, 0xf3d3, 0xb7fb, 0xb89e, - 0xb1bf, 0xb89f, 0xf3ce, 0xf3ca, 0xb5da, 0xb8a0, 0xf3d0, 0xb940, - 0xb941, 0xf3d1, 0xb942, 0xf3d5, 0xb943, 0xb944, 0xb945, 0xb946, - 0xf3cd, 0xb947, 0xbce3, 0xb948, 0xc1fd, 0xb949, 0xf3d6, 0xb94a, - 0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xb94f, 0xf3da, 0xb950, 0xf3cc, - 0xb951, 0xb5c8, 0xb952, 0xbdee, 0xf3dc, 0xb953, 0xb954, 0xb7a4, - 0xbff0, 0xd6fe, 0xcdb2, 0xb955, 0xb4f0, 0xb956, 0xb2df, 0xb957, - 0xf3d8, 0xb958, 0xf3d9, 0xc9b8, 0xb959, 0xf3dd, 0xb95a, 0xb95b, - 0xf3de, 0xb95c, 0xf3e1, 0xb95d, 0xb95e, 0xb95f, 0xb960, 0xb961, - 0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xf3df, 0xb968, - 0xb969, 0xf3e3, 0xf3e2, 0xb96a, 0xb96b, 0xf3db, 0xb96c, 0xbfea, - 0xb96d, 0xb3ef, 0xb96e, 0xf3e0, 0xb96f, 0xb970, 0xc7a9, 0xb971, - 0xbcf2, 0xb972, 0xb973, 0xb974, 0xb975, 0xf3eb, 0xb976, 0xb977, - 0xb978, 0xb979, 0xb97a, 0xb97b, 0xb97c, 0xb9bf, 0xb97d, 0xb97e, - 0xf3e4, 0xb980, 0xb981, 0xb982, 0xb2ad, 0xbbfe, 0xb983, 0xcbe3, - 0xb984, 0xb985, 0xb986, 0xb987, 0xf3ed, 0xf3e9, 0xb988, 0xb989, - 0xb98a, 0xb9dc, 0xf3ee, 0xb98b, 0xb98c, 0xb98d, 0xf3e5, 0xf3e6, - 0xf3ea, 0xc2e1, 0xf3ec, 0xf3ef, 0xf3e8, 0xbcfd, 0xb98e, 0xb98f, - 0xb990, 0xcfe4, 0xb991, 0xb992, 0xf3f0, 0xb993, 0xb994, 0xb995, - 0xf3e7, 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a, 0xb99b, 0xb99c, - 0xb99d, 0xf3f2, 0xb99e, 0xb99f, 0xb9a0, 0xba40, 0xd7ad, 0xc6aa, - 0xba41, 0xba42, 0xba43, 0xba44, 0xf3f3, 0xba45, 0xba46, 0xba47, - 0xba48, 0xf3f1, 0xba49, 0xc2a8, 0xba4a, 0xba4b, 0xba4c, 0xba4d, - 0xba4e, 0xb8dd, 0xf3f5, 0xba4f, 0xba50, 0xf3f4, 0xba51, 0xba52, - 0xba53, 0xb4db, 0xba54, 0xba55, 0xba56, 0xf3f6, 0xf3f7, 0xba57, - 0xba58, 0xba59, 0xf3f8, 0xba5a, 0xba5b, 0xba5c, 0xc0ba, 0xba5d, - 0xba5e, 0xc0e9, 0xba5f, 0xba60, 0xba61, 0xba62, 0xba63, 0xc5f1, - 0xba64, 0xba65, 0xba66, 0xba67, 0xf3fb, 0xba68, 0xf3fa, 0xba69, - /* 0x7c00 .. 0x7cff */ - 0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0xba70, 0xb4d8, - 0xba71, 0xba72, 0xba73, 0xf3fe, 0xf3f9, 0xba74, 0xba75, 0xf3fc, - 0xba76, 0xba77, 0xba78, 0xba79, 0xba7a, 0xba7b, 0xf3fd, 0xba7c, - 0xba7d, 0xba7e, 0xba80, 0xba81, 0xba82, 0xba83, 0xba84, 0xf4a1, - 0xba85, 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, 0xf4a3, 0xbbc9, - 0xba8b, 0xba8c, 0xf4a2, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, - 0xba92, 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, - 0xf4a4, 0xba9a, 0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f, 0xb2be, - 0xf4a6, 0xf4a5, 0xbaa0, 0xbb40, 0xbb41, 0xbb42, 0xbb43, 0xbb44, - 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49, 0xbcae, 0xbb4a, 0xbb4b, - 0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51, 0xbb52, 0xbb53, - 0xbb54, 0xbb55, 0xbb56, 0xbb57, 0xbb58, 0xbb59, 0xbb5a, 0xbb5b, - 0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f, 0xbb60, 0xbb61, 0xbb62, 0xbb63, - 0xbb64, 0xbb65, 0xbb66, 0xbb67, 0xbb68, 0xbb69, 0xbb6a, 0xbb6b, - 0xbb6c, 0xbb6d, 0xbb6e, 0xc3d7, 0xd9e1, 0xbb6f, 0xbb70, 0xbb71, - 0xbb72, 0xbb73, 0xbb74, 0xc0e0, 0xf4cc, 0xd7d1, 0xbb75, 0xbb76, - 0xbb77, 0xbb78, 0xbb79, 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, - 0xbb80, 0xb7db, 0xbb81, 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, - 0xbb87, 0xf4ce, 0xc1a3, 0xbb88, 0xbb89, 0xc6c9, 0xbb8a, 0xb4d6, - 0xd5b3, 0xbb8b, 0xbb8c, 0xbb8d, 0xf4d0, 0xf4cf, 0xf4d1, 0xcbda, - 0xbb8e, 0xbb8f, 0xf4d2, 0xbb90, 0xd4c1, 0xd6e0, 0xbb91, 0xbb92, - 0xbb93, 0xbb94, 0xb7e0, 0xbb95, 0xbb96, 0xbb97, 0xc1b8, 0xbb98, - 0xbb99, 0xc1bb, 0xf4d3, 0xbeac, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d, - 0xbb9e, 0xb4e2, 0xbb9f, 0xbba0, 0xf4d4, 0xf4d5, 0xbeab, 0xbc40, - 0xbc41, 0xf4d6, 0xbc42, 0xbc43, 0xbc44, 0xf4db, 0xbc45, 0xf4d7, - 0xf4da, 0xbc46, 0xbafd, 0xbc47, 0xf4d8, 0xf4d9, 0xbc48, 0xbc49, - 0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, 0xb8e2, 0xccc7, 0xf4dc, - 0xbc4f, 0xb2da, 0xbc50, 0xbc51, 0xc3d3, 0xbc52, 0xbc53, 0xd4e3, - 0xbfb7, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59, 0xbc5a, - 0xf4dd, 0xbc5b, 0xbc5c, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xc5b4, - 0xbc61, 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0xbc68, - 0xf4e9, 0xbc69, 0xbc6a, 0xcfb5, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, - /* 0x7d00 .. 0x7dff */ - 0xbc6f, 0xbc70, 0xbc71, 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, - 0xbc77, 0xbc78, 0xcec9, 0xbc79, 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, - 0xbc7e, 0xbc80, 0xbc81, 0xbc82, 0xbc83, 0xbc84, 0xbc85, 0xbc86, - 0xbc87, 0xbc88, 0xbc89, 0xbc8a, 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, - 0xcbd8, 0xbc8f, 0xcbf7, 0xbc90, 0xbc91, 0xbc92, 0xbc93, 0xbdf4, - 0xbc94, 0xbc95, 0xbc96, 0xd7cf, 0xbc97, 0xbc98, 0xbc99, 0xc0db, - 0xbc9a, 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0xbca0, 0xbd40, - 0xbd41, 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48, - 0xbd49, 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f, 0xbd50, - 0xbd51, 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57, 0xbd58, - 0xbd59, 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f, 0xbd60, - 0xbd61, 0xbd62, 0xbd63, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, - 0xbd69, 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, - 0xbd71, 0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xd0f5, 0xbd77, - 0xbd78, 0xbd79, 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xf4ea, - 0xbd80, 0xbd81, 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, - 0xbd88, 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, - 0xbd90, 0xbd91, 0xbd92, 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, - 0xbd98, 0xbd99, 0xbd9a, 0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, - 0xbda0, 0xbe40, 0xbe41, 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, - 0xbe47, 0xbe48, 0xbe49, 0xbe4a, 0xbe4b, 0xbe4c, 0xf4eb, 0xbe4d, - 0xbe4e, 0xbe4f, 0xbe50, 0xbe51, 0xbe52, 0xbe53, 0xf4ec, 0xbe54, - 0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59, 0xbe5a, 0xbe5b, 0xbe5c, - 0xbe5d, 0xbe5e, 0xbe5f, 0xbe60, 0xbe61, 0xbe62, 0xbe63, 0xbe64, - 0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xbe69, 0xbe6a, 0xbe6b, 0xbe6c, - 0xbe6d, 0xbe6e, 0xbe6f, 0xbe70, 0xbe71, 0xbe72, 0xbe73, 0xbe74, - 0xbe75, 0xbe76, 0xbe77, 0xbe78, 0xbe79, 0xbe7a, 0xbe7b, 0xbe7c, - 0xbe7d, 0xbe7e, 0xbe80, 0xbe81, 0xbe82, 0xbe83, 0xbe84, 0xbe85, - 0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a, 0xbe8b, 0xbe8c, 0xbe8d, - 0xbe8e, 0xbe8f, 0xbe90, 0xbe91, 0xbe92, 0xbe93, 0xbe94, 0xbe95, - 0xbe96, 0xbe97, 0xbe98, 0xbe99, 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, - 0xbe9e, 0xbe9f, 0xbea0, 0xbf40, 0xbf41, 0xbf42, 0xbf43, 0xbf44, - /* 0x7e00 .. 0x7eff */ - 0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, - 0xbf4d, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51, 0xbf52, 0xbf53, 0xbf54, - 0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59, 0xbf5a, 0xbf5b, 0xbf5c, - 0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, 0xbf62, 0xbf63, 0xbf64, - 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, 0xbf6a, 0xbf6b, 0xbf6c, - 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, 0xbf72, 0xbf73, 0xbf74, - 0xbf75, 0xbf76, 0xbf77, 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, 0xbf7c, - 0xbf7d, 0xbf7e, 0xbf80, 0xf7e3, 0xbf81, 0xbf82, 0xbf83, 0xbf84, - 0xbf85, 0xb7b1, 0xbf86, 0xbf87, 0xbf88, 0xbf89, 0xbf8a, 0xf4ed, - 0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, - 0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a, - 0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xc040, 0xc041, - 0xc042, 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, - 0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051, - 0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0xc058, 0xc059, - 0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e, 0xc05f, 0xc060, 0xc061, - 0xc062, 0xc063, 0xd7eb, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068, - 0xc069, 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070, - 0xc071, 0xc072, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, - 0xc079, 0xc07a, 0xc07b, 0xf4ee, 0xc07c, 0xc07d, 0xc07e, 0xe6f9, - 0xbec0, 0xe6fa, 0xbaec, 0xe6fb, 0xcfcb, 0xe6fc, 0xd4bc, 0xbcb6, - 0xe6fd, 0xe6fe, 0xbccd, 0xc8d2, 0xceb3, 0xe7a1, 0xc080, 0xb4bf, - 0xe7a2, 0xc9b4, 0xb8d9, 0xc4c9, 0xc081, 0xd7dd, 0xc2da, 0xb7d7, - 0xd6bd, 0xcec6, 0xb7c4, 0xc082, 0xc083, 0xc5a6, 0xe7a3, 0xcfdf, - 0xe7a4, 0xe7a5, 0xe7a6, 0xc1b7, 0xd7e9, 0xc9f0, 0xcfb8, 0xd6af, - 0xd6d5, 0xe7a7, 0xb0ed, 0xe7a8, 0xe7a9, 0xc9dc, 0xd2ef, 0xbead, - 0xe7aa, 0xb0f3, 0xc8de, 0xbde1, 0xe7ab, 0xc8c6, 0xc084, 0xe7ac, - 0xbbe6, 0xb8f8, 0xd1a4, 0xe7ad, 0xc2e7, 0xbef8, 0xbdca, 0xcdb3, - 0xe7ae, 0xe7af, 0xbeee, 0xd0e5, 0xc085, 0xcbe7, 0xccd0, 0xbccc, - 0xe7b0, 0xbca8, 0xd0f7, 0xe7b1, 0xc086, 0xd0f8, 0xe7b2, 0xe7b3, - 0xb4c2, 0xe7b4, 0xe7b5, 0xc9fe, 0xceac, 0xc3e0, 0xe7b7, 0xb1c1, - 0xb3f1, 0xc087, 0xe7b8, 0xe7b9, 0xd7db, 0xd5c0, 0xe7ba, 0xc2cc, - /* 0x7f00 .. 0x7fff */ - 0xd7ba, 0xe7bb, 0xe7bc, 0xe7bd, 0xbcea, 0xc3e5, 0xc0c2, 0xe7be, - 0xe7bf, 0xbca9, 0xc088, 0xe7c0, 0xe7c1, 0xe7b6, 0xb6d0, 0xe7c2, - 0xc089, 0xe7c3, 0xe7c4, 0xbbba, 0xb5de, 0xc2c6, 0xb1e0, 0xe7c5, - 0xd4b5, 0xe7c6, 0xb8bf, 0xe7c8, 0xe7c7, 0xb7ec, 0xc08a, 0xe7c9, - 0xb2f8, 0xe7ca, 0xe7cb, 0xe7cc, 0xe7cd, 0xe7ce, 0xe7cf, 0xe7d0, - 0xd3a7, 0xcbf5, 0xe7d1, 0xe7d2, 0xe7d3, 0xe7d4, 0xc9c9, 0xe7d5, - 0xe7d6, 0xe7d7, 0xe7d8, 0xe7d9, 0xbdc9, 0xe7da, 0xf3be, 0xc08b, - 0xb8d7, 0xc08c, 0xc8b1, 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc091, - 0xc092, 0xc093, 0xf3bf, 0xc094, 0xf3c0, 0xf3c1, 0xc095, 0xc096, - 0xc097, 0xc098, 0xc099, 0xc09a, 0xc09b, 0xc09c, 0xc09d, 0xc09e, - 0xb9de, 0xcdf8, 0xc09f, 0xc0a0, 0xd8e8, 0xbab1, 0xc140, 0xc2de, - 0xeeb7, 0xc141, 0xb7a3, 0xc142, 0xc143, 0xc144, 0xc145, 0xeeb9, - 0xc146, 0xeeb8, 0xb0d5, 0xc147, 0xc148, 0xc149, 0xc14a, 0xc14b, - 0xeebb, 0xd5d6, 0xd7ef, 0xc14c, 0xc14d, 0xc14e, 0xd6c3, 0xc14f, - 0xc150, 0xeebd, 0xcaf0, 0xc151, 0xeebc, 0xc152, 0xc153, 0xc154, - 0xc155, 0xeebe, 0xc156, 0xc157, 0xc158, 0xc159, 0xeec0, 0xc15a, - 0xc15b, 0xeebf, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161, - 0xc162, 0xc163, 0xd1f2, 0xc164, 0xc7bc, 0xc165, 0xc3c0, 0xc166, - 0xc167, 0xc168, 0xc169, 0xc16a, 0xb8e1, 0xc16b, 0xc16c, 0xc16d, - 0xc16e, 0xc16f, 0xc1e7, 0xc170, 0xc171, 0xf4c6, 0xd0df, 0xf4c7, - 0xc172, 0xcfdb, 0xc173, 0xc174, 0xc8ba, 0xc175, 0xc176, 0xf4c8, - 0xc177, 0xc178, 0xc179, 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xf4c9, - 0xf4ca, 0xc17e, 0xf4cb, 0xc180, 0xc181, 0xc182, 0xc183, 0xc184, - 0xd9fa, 0xb8fe, 0xc185, 0xc186, 0xe5f1, 0xd3f0, 0xc187, 0xf4e0, - 0xc188, 0xcecc, 0xc189, 0xc18a, 0xc18b, 0xb3e1, 0xc18c, 0xc18d, - 0xc18e, 0xc18f, 0xf1b4, 0xc190, 0xd2ee, 0xc191, 0xf4e1, 0xc192, - 0xc193, 0xc194, 0xc195, 0xc196, 0xcfe8, 0xf4e2, 0xc197, 0xc198, - 0xc7cc, 0xc199, 0xc19a, 0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xb5d4, - 0xb4e4, 0xf4e4, 0xc19f, 0xc1a0, 0xc240, 0xf4e3, 0xf4e5, 0xc241, - 0xc242, 0xf4e6, 0xc243, 0xc244, 0xc245, 0xc246, 0xf4e7, 0xc247, - 0xbab2, 0xb0bf, 0xc248, 0xf4e8, 0xc249, 0xc24a, 0xc24b, 0xc24c, - 0xc24d, 0xc24e, 0xc24f, 0xb7ad, 0xd2ed, 0xc250, 0xc251, 0xc252, - /* 0x8000 .. 0x80ff */ - 0xd2ab, 0xc0cf, 0xc253, 0xbfbc, 0xeba3, 0xd5df, 0xeac8, 0xc254, - 0xc255, 0xc256, 0xc257, 0xf1f3, 0xb6f8, 0xcba3, 0xc258, 0xc259, - 0xc4cd, 0xc25a, 0xf1e7, 0xc25b, 0xf1e8, 0xb8fb, 0xf1e9, 0xbac4, - 0xd4c5, 0xb0d2, 0xc25c, 0xc25d, 0xf1ea, 0xc25e, 0xc25f, 0xc260, - 0xf1eb, 0xc261, 0xf1ec, 0xc262, 0xc263, 0xf1ed, 0xf1ee, 0xf1ef, - 0xf1f1, 0xf1f0, 0xc5d5, 0xc264, 0xc265, 0xc266, 0xc267, 0xc268, - 0xc269, 0xf1f2, 0xc26a, 0xb6fa, 0xc26b, 0xf1f4, 0xd2ae, 0xdec7, - 0xcbca, 0xc26c, 0xc26d, 0xb3dc, 0xc26e, 0xb5a2, 0xc26f, 0xb9a2, - 0xc270, 0xc271, 0xc4f4, 0xf1f5, 0xc272, 0xc273, 0xf1f6, 0xc274, - 0xc275, 0xc276, 0xc1c4, 0xc1fb, 0xd6b0, 0xf1f7, 0xc277, 0xc278, - 0xc279, 0xc27a, 0xf1f8, 0xc27b, 0xc1aa, 0xc27c, 0xc27d, 0xc27e, - 0xc6b8, 0xc280, 0xbedb, 0xc281, 0xc282, 0xc283, 0xc284, 0xc285, - 0xc286, 0xc287, 0xc288, 0xc289, 0xc28a, 0xc28b, 0xc28c, 0xc28d, - 0xc28e, 0xf1f9, 0xb4cf, 0xc28f, 0xc290, 0xc291, 0xc292, 0xc293, - 0xc294, 0xf1fa, 0xc295, 0xc296, 0xc297, 0xc298, 0xc299, 0xc29a, - 0xc29b, 0xc29c, 0xc29d, 0xc29e, 0xc29f, 0xc2a0, 0xc340, 0xedb2, - 0xedb1, 0xc341, 0xc342, 0xcbe0, 0xd2de, 0xc343, 0xcbc1, 0xd5d8, - 0xc344, 0xc8e2, 0xc345, 0xc0df, 0xbca1, 0xc346, 0xc347, 0xc348, - 0xc349, 0xc34a, 0xc34b, 0xebc1, 0xc34c, 0xc34d, 0xd0a4, 0xc34e, - 0xd6e2, 0xc34f, 0xb6c7, 0xb8d8, 0xebc0, 0xb8ce, 0xc350, 0xebbf, - 0xb3a6, 0xb9c9, 0xd6ab, 0xc351, 0xb7f4, 0xb7ca, 0xc352, 0xc353, - 0xc354, 0xbce7, 0xb7be, 0xebc6, 0xc355, 0xebc7, 0xb0b9, 0xbfcf, - 0xc356, 0xebc5, 0xd3fd, 0xc357, 0xebc8, 0xc358, 0xc359, 0xebc9, - 0xc35a, 0xc35b, 0xb7ce, 0xc35c, 0xebc2, 0xebc4, 0xc9f6, 0xd6d7, - 0xd5cd, 0xd0b2, 0xebcf, 0xceb8, 0xebd0, 0xc35d, 0xb5a8, 0xc35e, - 0xc35f, 0xc360, 0xc361, 0xc362, 0xb1b3, 0xebd2, 0xcca5, 0xc363, - 0xc364, 0xc365, 0xc366, 0xc367, 0xc368, 0xc369, 0xc5d6, 0xebd3, - 0xc36a, 0xebd1, 0xc5df, 0xebce, 0xcaa4, 0xebd5, 0xb0fb, 0xc36b, - 0xc36c, 0xbafa, 0xc36d, 0xc36e, 0xd8b7, 0xf1e3, 0xc36f, 0xebca, - 0xebcb, 0xebcc, 0xebcd, 0xebd6, 0xe6c0, 0xebd9, 0xc370, 0xbfe8, - 0xd2c8, 0xebd7, 0xebdc, 0xb8ec, 0xebd8, 0xc371, 0xbdba, 0xc372, - 0xd0d8, 0xc373, 0xb0b7, 0xc374, 0xebdd, 0xc4dc, 0xc375, 0xc376, - /* 0x8100 .. 0x81ff */ - 0xc377, 0xc378, 0xd6ac, 0xc379, 0xc37a, 0xc37b, 0xb4e0, 0xc37c, - 0xc37d, 0xc2f6, 0xbcb9, 0xc37e, 0xc380, 0xebda, 0xebdb, 0xd4e0, - 0xc6ea, 0xc4d4, 0xebdf, 0xc5a7, 0xd9f5, 0xc381, 0xb2b1, 0xc382, - 0xebe4, 0xc383, 0xbdc5, 0xc384, 0xc385, 0xc386, 0xebe2, 0xc387, - 0xc388, 0xc389, 0xc38a, 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, - 0xc390, 0xc391, 0xc392, 0xc393, 0xebe3, 0xc394, 0xc395, 0xb8ac, - 0xc396, 0xcdd1, 0xebe5, 0xc397, 0xc398, 0xc399, 0xebe1, 0xc39a, - 0xc1b3, 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0xc6a2, 0xc3a0, - 0xc440, 0xc441, 0xc442, 0xc443, 0xc444, 0xc445, 0xccf3, 0xc446, - 0xebe6, 0xc447, 0xc0b0, 0xd2b8, 0xebe7, 0xc448, 0xc449, 0xc44a, - 0xb8af, 0xb8ad, 0xc44b, 0xebe8, 0xc7bb, 0xcdf3, 0xc44c, 0xc44d, - 0xc44e, 0xebea, 0xebeb, 0xc44f, 0xc450, 0xc451, 0xc452, 0xc453, - 0xebed, 0xc454, 0xc455, 0xc456, 0xc457, 0xd0c8, 0xc458, 0xebf2, - 0xc459, 0xebee, 0xc45a, 0xc45b, 0xc45c, 0xebf1, 0xc8f9, 0xc45d, - 0xd1fc, 0xebec, 0xc45e, 0xc45f, 0xebe9, 0xc460, 0xc461, 0xc462, - 0xc463, 0xb8b9, 0xcfd9, 0xc4e5, 0xebef, 0xebf0, 0xccda, 0xcdc8, - 0xb0f2, 0xc464, 0xebf6, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, - 0xebf5, 0xc46a, 0xb2b2, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xb8e0, - 0xc46f, 0xebf7, 0xc470, 0xc471, 0xc472, 0xc473, 0xc474, 0xc475, - 0xb1ec, 0xc476, 0xc477, 0xccc5, 0xc4a4, 0xcfa5, 0xc478, 0xc479, - 0xc47a, 0xc47b, 0xc47c, 0xebf9, 0xc47d, 0xc47e, 0xeca2, 0xc480, - 0xc5f2, 0xc481, 0xebfa, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486, - 0xc487, 0xc488, 0xc489, 0xc9c5, 0xc48a, 0xc48b, 0xc48c, 0xc48d, - 0xc48e, 0xc48f, 0xe2df, 0xebfe, 0xc490, 0xc491, 0xc492, 0xc493, - 0xcdce, 0xeca1, 0xb1db, 0xd3b7, 0xc494, 0xc495, 0xd2dc, 0xc496, - 0xc497, 0xc498, 0xebfd, 0xc499, 0xebfb, 0xc49a, 0xc49b, 0xc49c, - 0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc540, 0xc541, 0xc542, 0xc543, - 0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, 0xc54a, 0xc54b, - 0xc54c, 0xc54d, 0xc54e, 0xb3bc, 0xc54f, 0xc550, 0xc551, 0xeab0, - 0xc552, 0xc553, 0xd7d4, 0xc554, 0xf4ab, 0xb3f4, 0xc555, 0xc556, - 0xc557, 0xc558, 0xc559, 0xd6c1, 0xd6c2, 0xc55a, 0xc55b, 0xc55c, - 0xc55d, 0xc55e, 0xc55f, 0xd5e9, 0xbeca, 0xc560, 0xf4a7, 0xc561, - /* 0x8200 .. 0x82ff */ - 0xd2a8, 0xf4a8, 0xf4a9, 0xc562, 0xf4aa, 0xbecb, 0xd3df, 0xc563, - 0xc564, 0xc565, 0xc566, 0xc567, 0xc9e0, 0xc9e1, 0xc568, 0xc569, - 0xf3c2, 0xc56a, 0xcae6, 0xc56b, 0xccf2, 0xc56c, 0xc56d, 0xc56e, - 0xc56f, 0xc570, 0xc571, 0xe2b6, 0xcbb4, 0xc572, 0xcee8, 0xd6db, - 0xc573, 0xf4ad, 0xf4ae, 0xf4af, 0xc574, 0xc575, 0xc576, 0xc577, - 0xf4b2, 0xc578, 0xbabd, 0xf4b3, 0xb0e3, 0xf4b0, 0xc579, 0xf4b1, - 0xbda2, 0xb2d5, 0xc57a, 0xf4b6, 0xf4b7, 0xb6e6, 0xb2b0, 0xcfcf, - 0xf4b4, 0xb4ac, 0xc57b, 0xf4b5, 0xc57c, 0xc57d, 0xf4b8, 0xc57e, - 0xc580, 0xc581, 0xc582, 0xc583, 0xf4b9, 0xc584, 0xc585, 0xcda7, - 0xc586, 0xf4ba, 0xc587, 0xf4bb, 0xc588, 0xc589, 0xc58a, 0xf4bc, - 0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591, 0xc592, - 0xcbd2, 0xc593, 0xf4bd, 0xc594, 0xc595, 0xc596, 0xc597, 0xf4be, - 0xc598, 0xc599, 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc59e, 0xc59f, - 0xf4bf, 0xc5a0, 0xc640, 0xc641, 0xc642, 0xc643, 0xf4de, 0xc1bc, - 0xbce8, 0xc644, 0xc9ab, 0xd1de, 0xe5f5, 0xc645, 0xc646, 0xc647, - 0xc648, 0xdcb3, 0xd2d5, 0xc649, 0xc64a, 0xdcb4, 0xb0ac, 0xdcb5, - 0xc64b, 0xc64c, 0xbdda, 0xc64d, 0xdcb9, 0xc64e, 0xc64f, 0xc650, - 0xd8c2, 0xc651, 0xdcb7, 0xd3f3, 0xc652, 0xc9d6, 0xdcba, 0xdcb6, - 0xc653, 0xdcbb, 0xc3a2, 0xc654, 0xc655, 0xc656, 0xc657, 0xdcbc, - 0xdcc5, 0xdcbd, 0xc658, 0xc659, 0xcedf, 0xd6a5, 0xc65a, 0xdccf, - 0xc65b, 0xdccd, 0xc65c, 0xc65d, 0xdcd2, 0xbde6, 0xc2ab, 0xc65e, - 0xdcb8, 0xdccb, 0xdcce, 0xdcbe, 0xb7d2, 0xb0c5, 0xdcc7, 0xd0be, - 0xdcc1, 0xbba8, 0xc65f, 0xb7bc, 0xdccc, 0xc660, 0xc661, 0xdcc6, - 0xdcbf, 0xc7db, 0xc662, 0xc663, 0xc664, 0xd1bf, 0xdcc0, 0xc665, - 0xc666, 0xdcca, 0xc667, 0xc668, 0xdcd0, 0xc669, 0xc66a, 0xcead, - 0xdcc2, 0xc66b, 0xdcc3, 0xdcc8, 0xdcc9, 0xb2d4, 0xdcd1, 0xcbd5, - 0xc66c, 0xd4b7, 0xdcdb, 0xdcdf, 0xcca6, 0xdce6, 0xc66d, 0xc3e7, - 0xdcdc, 0xc66e, 0xc66f, 0xbfc1, 0xdcd9, 0xc670, 0xb0fa, 0xb9b6, - 0xdce5, 0xdcd3, 0xc671, 0xdcc4, 0xdcd6, 0xc8f4, 0xbfe0, 0xc672, - 0xc673, 0xc674, 0xc675, 0xc9bb, 0xc676, 0xc677, 0xc678, 0xb1bd, - 0xc679, 0xd3a2, 0xc67a, 0xc67b, 0xdcda, 0xc67c, 0xc67d, 0xdcd5, - 0xc67e, 0xc6bb, 0xc680, 0xdcde, 0xc681, 0xc682, 0xc683, 0xc684, - /* 0x8300 .. 0x83ff */ - 0xc685, 0xd7c2, 0xc3af, 0xb7b6, 0xc7d1, 0xc3a9, 0xdce2, 0xdcd8, - 0xdceb, 0xdcd4, 0xc686, 0xc687, 0xdcdd, 0xc688, 0xbea5, 0xdcd7, - 0xc689, 0xdce0, 0xc68a, 0xc68b, 0xdce3, 0xdce4, 0xc68c, 0xdcf8, - 0xc68d, 0xc68e, 0xdce1, 0xdda2, 0xdce7, 0xc68f, 0xc690, 0xc691, - 0xc692, 0xc693, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xbceb, - 0xb4c4, 0xc699, 0xc69a, 0xc3a3, 0xb2e7, 0xdcfa, 0xc69b, 0xdcf2, - 0xc69c, 0xdcef, 0xc69d, 0xdcfc, 0xdcee, 0xd2f0, 0xb2e8, 0xc69e, - 0xc8d7, 0xc8e3, 0xdcfb, 0xc69f, 0xdced, 0xc6a0, 0xc740, 0xc741, - 0xdcf7, 0xc742, 0xc743, 0xdcf5, 0xc744, 0xc745, 0xbea3, 0xdcf4, - 0xc746, 0xb2dd, 0xc747, 0xc748, 0xc749, 0xc74a, 0xc74b, 0xdcf3, - 0xbcf6, 0xdce8, 0xbbc4, 0xc74c, 0xc0f3, 0xc74d, 0xc74e, 0xc74f, - 0xc750, 0xc751, 0xbcd4, 0xdce9, 0xdcea, 0xc752, 0xdcf1, 0xdcf6, - 0xdcf9, 0xb5b4, 0xc753, 0xc8d9, 0xbbe7, 0xdcfe, 0xdcfd, 0xd3ab, - 0xdda1, 0xdda3, 0xdda5, 0xd2f1, 0xdda4, 0xdda6, 0xdda7, 0xd2a9, - 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, 0xbac9, - 0xdda9, 0xc75b, 0xc75c, 0xddb6, 0xddb1, 0xddb4, 0xc75d, 0xc75e, - 0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xddb0, 0xc6ce, 0xc764, - 0xc765, 0xc0f2, 0xc766, 0xc767, 0xc768, 0xc769, 0xc9af, 0xc76a, - 0xc76b, 0xc76c, 0xdcec, 0xddae, 0xc76d, 0xc76e, 0xc76f, 0xc770, - 0xddb7, 0xc771, 0xc772, 0xdcf0, 0xddaf, 0xc773, 0xddb8, 0xc774, - 0xddac, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc77b, - 0xddb9, 0xddb3, 0xddad, 0xc4aa, 0xc77c, 0xc77d, 0xc77e, 0xc780, - 0xdda8, 0xc0b3, 0xc1ab, 0xddaa, 0xddab, 0xc781, 0xddb2, 0xbbf1, - 0xddb5, 0xd3a8, 0xddba, 0xc782, 0xddbb, 0xc3a7, 0xc783, 0xc784, - 0xddd2, 0xddbc, 0xc785, 0xc786, 0xc787, 0xddd1, 0xc788, 0xb9bd, - 0xc789, 0xc78a, 0xbed5, 0xc78b, 0xbefa, 0xc78c, 0xc78d, 0xbaca, - 0xc78e, 0xc78f, 0xc790, 0xc791, 0xddca, 0xc792, 0xddc5, 0xc793, - 0xddbf, 0xc794, 0xc795, 0xc796, 0xb2cb, 0xddc3, 0xc797, 0xddcb, - 0xb2a4, 0xddd5, 0xc798, 0xc799, 0xc79a, 0xddbe, 0xc79b, 0xc79c, - 0xc79d, 0xc6d0, 0xddd0, 0xc79e, 0xc79f, 0xc7a0, 0xc840, 0xc841, - 0xddd4, 0xc1e2, 0xb7c6, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, - 0xddce, 0xddcf, 0xc847, 0xc848, 0xc849, 0xddc4, 0xc84a, 0xc84b, - /* 0x8400 .. 0x84ff */ - 0xc84c, 0xddbd, 0xc84d, 0xddcd, 0xccd1, 0xc84e, 0xddc9, 0xc84f, - 0xc850, 0xc851, 0xc852, 0xddc2, 0xc3c8, 0xc6bc, 0xceae, 0xddcc, - 0xc853, 0xddc8, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, - 0xddc1, 0xc85a, 0xc85b, 0xc85c, 0xddc6, 0xc2dc, 0xc85d, 0xc85e, - 0xc85f, 0xc860, 0xc861, 0xc862, 0xd3a9, 0xd3aa, 0xddd3, 0xcff4, - 0xc8f8, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, - 0xc86a, 0xdde6, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, - 0xddc7, 0xc871, 0xc872, 0xc873, 0xdde0, 0xc2e4, 0xc874, 0xc875, - 0xc876, 0xc877, 0xc878, 0xc879, 0xc87a, 0xc87b, 0xdde1, 0xc87c, - 0xc87d, 0xc87e, 0xc880, 0xc881, 0xc882, 0xc883, 0xc884, 0xc885, - 0xc886, 0xddd7, 0xc887, 0xc888, 0xc889, 0xc88a, 0xc88b, 0xd6f8, - 0xc88c, 0xddd9, 0xddd8, 0xb8f0, 0xddd6, 0xc88d, 0xc88e, 0xc88f, - 0xc890, 0xc6cf, 0xc891, 0xb6ad, 0xc892, 0xc893, 0xc894, 0xc895, - 0xc896, 0xdde2, 0xc897, 0xbaf9, 0xd4e1, 0xdde7, 0xc898, 0xc899, - 0xc89a, 0xb4d0, 0xc89b, 0xddda, 0xc89c, 0xbffb, 0xdde3, 0xc89d, - 0xdddf, 0xc89e, 0xdddd, 0xc89f, 0xc8a0, 0xc940, 0xc941, 0xc942, - 0xc943, 0xc944, 0xb5d9, 0xc945, 0xc946, 0xc947, 0xc948, 0xdddb, - 0xdddc, 0xddde, 0xc949, 0xbdaf, 0xdde4, 0xc94a, 0xdde5, 0xc94b, - 0xc94c, 0xc94d, 0xc94e, 0xc94f, 0xc950, 0xc951, 0xc952, 0xddf5, - 0xc953, 0xc3c9, 0xc954, 0xc955, 0xcbe2, 0xc956, 0xc957, 0xc958, - 0xc959, 0xddf2, 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f, - 0xc960, 0xc961, 0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xd8e1, - 0xc967, 0xc968, 0xc6d1, 0xc969, 0xddf4, 0xc96a, 0xc96b, 0xc96c, - 0xd5f4, 0xddf3, 0xddf0, 0xc96d, 0xc96e, 0xddec, 0xc96f, 0xddef, - 0xc970, 0xdde8, 0xc971, 0xc972, 0xd0ee, 0xc973, 0xc974, 0xc975, - 0xc976, 0xc8d8, 0xddee, 0xc977, 0xc978, 0xdde9, 0xc979, 0xc97a, - 0xddea, 0xcbf2, 0xc97b, 0xdded, 0xc97c, 0xc97d, 0xb1cd, 0xc97e, - 0xc980, 0xc981, 0xc982, 0xc983, 0xc984, 0xc0b6, 0xc985, 0xbcbb, - 0xddf1, 0xc986, 0xc987, 0xddf7, 0xc988, 0xddf6, 0xddeb, 0xc989, - 0xc98a, 0xc98b, 0xc98c, 0xc98d, 0xc5ee, 0xc98e, 0xc98f, 0xc990, - 0xddfb, 0xc991, 0xc992, 0xc993, 0xc994, 0xc995, 0xc996, 0xc997, - 0xc998, 0xc999, 0xc99a, 0xc99b, 0xdea4, 0xc99c, 0xc99d, 0xdea3, - /* 0x8500 .. 0x85ff */ - 0xc99e, 0xc99f, 0xc9a0, 0xca40, 0xca41, 0xca42, 0xca43, 0xca44, - 0xca45, 0xca46, 0xca47, 0xca48, 0xddf8, 0xca49, 0xca4a, 0xca4b, - 0xca4c, 0xc3ef, 0xca4d, 0xc2fb, 0xca4e, 0xca4f, 0xca50, 0xd5e1, - 0xca51, 0xca52, 0xceb5, 0xca53, 0xca54, 0xca55, 0xca56, 0xddfd, - 0xca57, 0xb2cc, 0xca58, 0xca59, 0xca5a, 0xca5b, 0xca5c, 0xca5d, - 0xca5e, 0xca5f, 0xca60, 0xc4e8, 0xcadf, 0xca61, 0xca62, 0xca63, - 0xca64, 0xca65, 0xca66, 0xca67, 0xca68, 0xca69, 0xca6a, 0xc7be, - 0xddfa, 0xddfc, 0xddfe, 0xdea2, 0xb0aa, 0xb1ce, 0xca6b, 0xca6c, - 0xca6d, 0xca6e, 0xca6f, 0xdeac, 0xca70, 0xca71, 0xca72, 0xca73, - 0xdea6, 0xbdb6, 0xc8ef, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, - 0xca79, 0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca7e, 0xdea1, 0xca80, - 0xca81, 0xdea5, 0xca82, 0xca83, 0xca84, 0xca85, 0xdea9, 0xca86, - 0xca87, 0xca88, 0xca89, 0xca8a, 0xdea8, 0xca8b, 0xca8c, 0xca8d, - 0xdea7, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92, 0xca93, 0xca94, - 0xca95, 0xca96, 0xdead, 0xca97, 0xd4cc, 0xca98, 0xca99, 0xca9a, - 0xca9b, 0xdeb3, 0xdeaa, 0xdeae, 0xca9c, 0xca9d, 0xc0d9, 0xca9e, - 0xca9f, 0xcaa0, 0xcb40, 0xcb41, 0xb1a1, 0xdeb6, 0xcb42, 0xdeb1, - 0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0xcb48, 0xcb49, 0xdeb2, - 0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e, 0xcb4f, 0xcb50, 0xcb51, - 0xcb52, 0xcb53, 0xcb54, 0xd1a6, 0xdeb5, 0xcb55, 0xcb56, 0xcb57, - 0xcb58, 0xcb59, 0xcb5a, 0xcb5b, 0xdeaf, 0xcb5c, 0xcb5d, 0xcb5e, - 0xdeb0, 0xcb5f, 0xd0bd, 0xcb60, 0xcb61, 0xcb62, 0xdeb4, 0xcaed, - 0xdeb9, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xdeb8, - 0xcb69, 0xdeb7, 0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, - 0xcb70, 0xdebb, 0xcb71, 0xcb72, 0xcb73, 0xcb74, 0xcb75, 0xcb76, - 0xcb77, 0xbde5, 0xcb78, 0xcb79, 0xcb7a, 0xcb7b, 0xcb7c, 0xb2d8, - 0xc3ea, 0xcb7d, 0xcb7e, 0xdeba, 0xcb80, 0xc5ba, 0xcb81, 0xcb82, - 0xcb83, 0xcb84, 0xcb85, 0xcb86, 0xdebc, 0xcb87, 0xcb88, 0xcb89, - 0xcb8a, 0xcb8b, 0xcb8c, 0xcb8d, 0xccd9, 0xcb8e, 0xcb8f, 0xcb90, - 0xcb91, 0xb7aa, 0xcb92, 0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97, - 0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, - 0xcba0, 0xcc40, 0xcc41, 0xd4e5, 0xcc42, 0xcc43, 0xcc44, 0xdebd, - /* 0x8600 .. 0x86ff */ - 0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49, 0xdebf, 0xcc4a, 0xcc4b, - 0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51, 0xcc52, 0xcc53, - 0xcc54, 0xc4a2, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xdec1, 0xcc59, - 0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0xcc60, 0xcc61, - 0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66, 0xcc67, 0xcc68, 0xdebe, - 0xcc69, 0xdec0, 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, 0xcc6f, - 0xcc70, 0xcc71, 0xcc72, 0xcc73, 0xcc74, 0xcc75, 0xcc76, 0xcc77, - 0xd5ba, 0xcc78, 0xcc79, 0xcc7a, 0xdec2, 0xcc7b, 0xcc7c, 0xcc7d, - 0xcc7e, 0xcc80, 0xcc81, 0xcc82, 0xcc83, 0xcc84, 0xcc85, 0xcc86, - 0xcc87, 0xcc88, 0xcc89, 0xcc8a, 0xcc8b, 0xf2ae, 0xbba2, 0xc2b2, - 0xc5b0, 0xc2c7, 0xcc8c, 0xcc8d, 0xf2af, 0xcc8e, 0xcc8f, 0xcc90, - 0xcc91, 0xcc92, 0xd0e9, 0xcc93, 0xcc94, 0xcc95, 0xd3dd, 0xcc96, - 0xcc97, 0xcc98, 0xebbd, 0xcc99, 0xcc9a, 0xcc9b, 0xcc9c, 0xcc9d, - 0xcc9e, 0xcc9f, 0xcca0, 0xb3e6, 0xf2b0, 0xcd40, 0xf2b1, 0xcd41, - 0xcd42, 0xcaad, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, 0xcd48, - 0xcd49, 0xbae7, 0xf2b3, 0xf2b5, 0xf2b4, 0xcbe4, 0xcfba, 0xf2b2, - 0xcab4, 0xd2cf, 0xc2ec, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, - 0xcd4f, 0xcd50, 0xcec3, 0xf2b8, 0xb0f6, 0xf2b7, 0xcd51, 0xcd52, - 0xcd53, 0xcd54, 0xcd55, 0xf2be, 0xcd56, 0xb2cf, 0xcd57, 0xcd58, - 0xcd59, 0xcd5a, 0xcd5b, 0xcd5c, 0xd1c1, 0xf2ba, 0xcd5d, 0xcd5e, - 0xcd5f, 0xcd60, 0xcd61, 0xf2bc, 0xd4e9, 0xcd62, 0xcd63, 0xf2bb, - 0xf2b6, 0xf2bf, 0xf2bd, 0xcd64, 0xf2b9, 0xcd65, 0xcd66, 0xf2c7, - 0xf2c4, 0xf2c6, 0xcd67, 0xcd68, 0xf2ca, 0xf2c2, 0xf2c0, 0xcd69, - 0xcd6a, 0xcd6b, 0xf2c5, 0xcd6c, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, - 0xd6fb, 0xcd71, 0xcd72, 0xcd73, 0xf2c1, 0xcd74, 0xc7f9, 0xc9df, - 0xcd75, 0xf2c8, 0xb9c6, 0xb5b0, 0xcd76, 0xcd77, 0xf2c3, 0xf2c9, - 0xf2d0, 0xf2d6, 0xcd78, 0xcd79, 0xbbd7, 0xcd7a, 0xcd7b, 0xcd7c, - 0xf2d5, 0xcddc, 0xcd7d, 0xd6eb, 0xcd7e, 0xcd80, 0xf2d2, 0xf2d4, - 0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xb8f2, 0xcd85, 0xcd86, 0xcd87, - 0xcd88, 0xf2cb, 0xcd89, 0xcd8a, 0xcd8b, 0xf2ce, 0xc2f9, 0xcd8c, - 0xd5dd, 0xf2cc, 0xf2cd, 0xf2cf, 0xf2d3, 0xcd8d, 0xcd8e, 0xcd8f, - 0xf2d9, 0xd3bc, 0xcd90, 0xcd91, 0xcd92, 0xcd93, 0xb6ea, 0xcd94, - /* 0x8700 .. 0x87ff */ - 0xcaf1, 0xcd95, 0xb7e4, 0xf2d7, 0xcd96, 0xcd97, 0xcd98, 0xf2d8, - 0xf2da, 0xf2dd, 0xf2db, 0xcd99, 0xcd9a, 0xf2dc, 0xcd9b, 0xcd9c, - 0xcd9d, 0xcd9e, 0xd1d1, 0xf2d1, 0xcd9f, 0xcdc9, 0xcda0, 0xcecf, - 0xd6a9, 0xce40, 0xf2e3, 0xce41, 0xc3db, 0xce42, 0xf2e0, 0xce43, - 0xce44, 0xc0af, 0xf2ec, 0xf2de, 0xce45, 0xf2e1, 0xce46, 0xce47, - 0xce48, 0xf2e8, 0xce49, 0xce4a, 0xce4b, 0xce4c, 0xf2e2, 0xce4d, - 0xce4e, 0xf2e7, 0xce4f, 0xce50, 0xf2e6, 0xce51, 0xce52, 0xf2e9, - 0xce53, 0xce54, 0xce55, 0xf2df, 0xce56, 0xce57, 0xf2e4, 0xf2ea, - 0xce58, 0xce59, 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e, 0xd3ac, - 0xf2e5, 0xb2f5, 0xce5f, 0xce60, 0xf2f2, 0xce61, 0xd0ab, 0xce62, - 0xce63, 0xce64, 0xce65, 0xf2f5, 0xce66, 0xce67, 0xce68, 0xbbc8, - 0xce69, 0xf2f9, 0xce6a, 0xce6b, 0xce6c, 0xce6d, 0xce6e, 0xce6f, - 0xf2f0, 0xce70, 0xce71, 0xf2f6, 0xf2f8, 0xf2fa, 0xce72, 0xce73, - 0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79, 0xf2f3, 0xce7a, - 0xf2f1, 0xce7b, 0xce7c, 0xce7d, 0xbafb, 0xce7e, 0xb5fb, 0xce80, - 0xce81, 0xce82, 0xce83, 0xf2ef, 0xf2f7, 0xf2ed, 0xf2ee, 0xce84, - 0xce85, 0xce86, 0xf2eb, 0xf3a6, 0xce87, 0xf3a3, 0xce88, 0xce89, - 0xf3a2, 0xce8a, 0xce8b, 0xf2f4, 0xce8c, 0xc8da, 0xce8d, 0xce8e, - 0xce8f, 0xce90, 0xce91, 0xf2fb, 0xce92, 0xce93, 0xce94, 0xf3a5, - 0xce95, 0xce96, 0xce97, 0xce98, 0xce99, 0xce9a, 0xce9b, 0xc3f8, - 0xce9c, 0xce9d, 0xce9e, 0xce9f, 0xcea0, 0xcf40, 0xcf41, 0xcf42, - 0xf2fd, 0xcf43, 0xcf44, 0xf3a7, 0xf3a9, 0xf3a4, 0xcf45, 0xf2fc, - 0xcf46, 0xcf47, 0xcf48, 0xf3ab, 0xcf49, 0xf3aa, 0xcf4a, 0xcf4b, - 0xcf4c, 0xcf4d, 0xc2dd, 0xcf4e, 0xcf4f, 0xf3ae, 0xcf50, 0xcf51, - 0xf3b0, 0xcf52, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xf3a1, 0xcf57, - 0xcf58, 0xcf59, 0xf3b1, 0xf3ac, 0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, - 0xcf5e, 0xf3af, 0xf2fe, 0xf3ad, 0xcf5f, 0xcf60, 0xcf61, 0xcf62, - 0xcf63, 0xcf64, 0xcf65, 0xf3b2, 0xcf66, 0xcf67, 0xcf68, 0xcf69, - 0xf3b4, 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xf3a8, 0xcf6e, 0xcf6f, - 0xcf70, 0xcf71, 0xf3b3, 0xcf72, 0xcf73, 0xcf74, 0xf3b5, 0xcf75, - 0xcf76, 0xcf77, 0xcf78, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, - 0xcf7e, 0xd0b7, 0xcf80, 0xcf81, 0xcf82, 0xcf83, 0xf3b8, 0xcf84, - /* 0x8800 .. 0x88ff */ - 0xcf85, 0xcf86, 0xcf87, 0xd9f9, 0xcf88, 0xcf89, 0xcf8a, 0xcf8b, - 0xcf8c, 0xcf8d, 0xf3b9, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92, - 0xcf93, 0xcf94, 0xcf95, 0xf3b7, 0xcf96, 0xc8e4, 0xf3b6, 0xcf97, - 0xcf98, 0xcf99, 0xcf9a, 0xf3ba, 0xcf9b, 0xcf9c, 0xcf9d, 0xcf9e, - 0xcf9f, 0xf3bb, 0xb4c0, 0xcfa0, 0xd040, 0xd041, 0xd042, 0xd043, - 0xd044, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049, 0xd04a, 0xd04b, - 0xd04c, 0xd04d, 0xeec3, 0xd04e, 0xd04f, 0xd050, 0xd051, 0xd052, - 0xd053, 0xf3bc, 0xd054, 0xd055, 0xf3bd, 0xd056, 0xd057, 0xd058, - 0xd1aa, 0xd059, 0xd05a, 0xd05b, 0xf4ac, 0xd0c6, 0xd05c, 0xd05d, - 0xd05e, 0xd05f, 0xd060, 0xd061, 0xd0d0, 0xd1dc, 0xd062, 0xd063, - 0xd064, 0xd065, 0xd066, 0xd067, 0xcfce, 0xd068, 0xd069, 0xbdd6, - 0xd06a, 0xd1c3, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, - 0xd071, 0xbae2, 0xe1e9, 0xd2c2, 0xf1c2, 0xb2b9, 0xd072, 0xd073, - 0xb1ed, 0xf1c3, 0xd074, 0xc9c0, 0xb3c4, 0xd075, 0xd9f2, 0xd076, - 0xcba5, 0xd077, 0xf1c4, 0xd078, 0xd079, 0xd07a, 0xd07b, 0xd6d4, - 0xd07c, 0xd07d, 0xd07e, 0xd080, 0xd081, 0xf1c5, 0xf4c0, 0xf1c6, - 0xd082, 0xd4ac, 0xf1c7, 0xd083, 0xb0c0, 0xf4c1, 0xd084, 0xd085, - 0xf4c2, 0xd086, 0xd087, 0xb4fc, 0xd088, 0xc5db, 0xd089, 0xd08a, - 0xd08b, 0xd08c, 0xccbb, 0xd08d, 0xd08e, 0xd08f, 0xd0e4, 0xd090, - 0xd091, 0xd092, 0xd093, 0xd094, 0xcde0, 0xd095, 0xd096, 0xd097, - 0xd098, 0xd099, 0xf1c8, 0xd09a, 0xd9f3, 0xd09b, 0xd09c, 0xd09d, - 0xd09e, 0xd09f, 0xd0a0, 0xb1bb, 0xd140, 0xcfae, 0xd141, 0xd142, - 0xd143, 0xb8a4, 0xd144, 0xd145, 0xd146, 0xd147, 0xd148, 0xf1ca, - 0xd149, 0xd14a, 0xd14b, 0xd14c, 0xf1cb, 0xd14d, 0xd14e, 0xd14f, - 0xd150, 0xb2c3, 0xc1d1, 0xd151, 0xd152, 0xd7b0, 0xf1c9, 0xd153, - 0xd154, 0xf1cc, 0xd155, 0xd156, 0xd157, 0xd158, 0xf1ce, 0xd159, - 0xd15a, 0xd15b, 0xd9f6, 0xd15c, 0xd2e1, 0xd4a3, 0xd15d, 0xd15e, - 0xf4c3, 0xc8b9, 0xd15f, 0xd160, 0xd161, 0xd162, 0xd163, 0xf4c4, - 0xd164, 0xd165, 0xf1cd, 0xf1cf, 0xbfe3, 0xf1d0, 0xd166, 0xd167, - 0xf1d4, 0xd168, 0xd169, 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, - 0xf1d6, 0xf1d1, 0xd16f, 0xc9d1, 0xc5e1, 0xd170, 0xd171, 0xd172, - 0xc2e3, 0xb9fc, 0xd173, 0xd174, 0xf1d3, 0xd175, 0xf1d5, 0xd176, - /* 0x8900 .. 0x89ff */ - 0xd177, 0xd178, 0xb9d3, 0xd179, 0xd17a, 0xd17b, 0xd17c, 0xd17d, - 0xd17e, 0xd180, 0xf1db, 0xd181, 0xd182, 0xd183, 0xd184, 0xd185, - 0xbad6, 0xd186, 0xb0fd, 0xf1d9, 0xd187, 0xd188, 0xd189, 0xd18a, - 0xd18b, 0xf1d8, 0xf1d2, 0xf1da, 0xd18c, 0xd18d, 0xd18e, 0xd18f, - 0xd190, 0xf1d7, 0xd191, 0xd192, 0xd193, 0xc8ec, 0xd194, 0xd195, - 0xd196, 0xd197, 0xcdca, 0xf1dd, 0xd198, 0xd199, 0xd19a, 0xd19b, - 0xe5bd, 0xd19c, 0xd19d, 0xd19e, 0xf1dc, 0xd19f, 0xf1de, 0xd1a0, - 0xd240, 0xd241, 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, - 0xd248, 0xf1df, 0xd249, 0xd24a, 0xcfe5, 0xd24b, 0xd24c, 0xd24d, - 0xd24e, 0xd24f, 0xd250, 0xd251, 0xd252, 0xd253, 0xd254, 0xd255, - 0xd256, 0xd257, 0xd258, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd25d, - 0xd25e, 0xd25f, 0xd260, 0xd261, 0xd262, 0xd263, 0xf4c5, 0xbdf3, - 0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, 0xf1e0, 0xd26a, - 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271, 0xd272, - 0xd273, 0xd274, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279, 0xd27a, - 0xd27b, 0xd27c, 0xd27d, 0xf1e1, 0xd27e, 0xd280, 0xd281, 0xcef7, - 0xd282, 0xd2aa, 0xd283, 0xf1fb, 0xd284, 0xd285, 0xb8b2, 0xd286, - 0xd287, 0xd288, 0xd289, 0xd28a, 0xd28b, 0xd28c, 0xd28d, 0xd28e, - 0xd28f, 0xd290, 0xd291, 0xd292, 0xd293, 0xd294, 0xd295, 0xd296, - 0xd297, 0xd298, 0xd299, 0xd29a, 0xd29b, 0xd29c, 0xd29d, 0xd29e, - 0xd29f, 0xd2a0, 0xd340, 0xd341, 0xd342, 0xd343, 0xd344, 0xd345, - 0xd346, 0xd347, 0xd348, 0xd349, 0xd34a, 0xd34b, 0xd34c, 0xd34d, - 0xd34e, 0xd34f, 0xd350, 0xd351, 0xd352, 0xd353, 0xd354, 0xd355, - 0xd356, 0xd357, 0xd358, 0xd359, 0xd35a, 0xd35b, 0xd35c, 0xd35d, - 0xd35e, 0xbcfb, 0xb9db, 0xd35f, 0xb9e6, 0xc3d9, 0xcad3, 0xeae8, - 0xc0c0, 0xbef5, 0xeae9, 0xeaea, 0xeaeb, 0xd360, 0xeaec, 0xeaed, - 0xeaee, 0xeaef, 0xbdc7, 0xd361, 0xd362, 0xd363, 0xf5fb, 0xd364, - 0xd365, 0xd366, 0xf5fd, 0xd367, 0xf5fe, 0xd368, 0xf5fc, 0xd369, - 0xd36a, 0xd36b, 0xd36c, 0xbde2, 0xd36d, 0xf6a1, 0xb4a5, 0xd36e, - 0xd36f, 0xd370, 0xd371, 0xf6a2, 0xd372, 0xd373, 0xd374, 0xf6a3, - 0xd375, 0xd376, 0xd377, 0xecb2, 0xd378, 0xd379, 0xd37a, 0xd37b, - 0xd37c, 0xd37d, 0xd37e, 0xd380, 0xd381, 0xd382, 0xd383, 0xd384, - /* 0x8a00 .. 0x8aff */ - 0xd1d4, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a, 0xd9ea, - 0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd392, - 0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0xd398, 0xd399, 0xd39a, - 0xd39b, 0xd39c, 0xd39d, 0xd39e, 0xd39f, 0xd3a0, 0xd440, 0xd441, - 0xd442, 0xd443, 0xd444, 0xd445, 0xd446, 0xd447, 0xd448, 0xd449, - 0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f, 0xd450, 0xd451, - 0xd452, 0xd453, 0xd454, 0xd455, 0xd456, 0xd457, 0xd458, 0xd459, - 0xd45a, 0xd45b, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xf6a4, 0xd460, - 0xd461, 0xd462, 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, - 0xeeba, 0xd469, 0xd46a, 0xd46b, 0xd46c, 0xd46d, 0xd46e, 0xd46f, - 0xd470, 0xd471, 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, - 0xd478, 0xd479, 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e, 0xd480, - 0xd481, 0xd482, 0xd483, 0xd484, 0xd485, 0xd486, 0xd487, 0xd488, - 0xd489, 0xd48a, 0xd48b, 0xd48c, 0xd48d, 0xd48e, 0xd48f, 0xd490, - 0xd491, 0xd492, 0xd493, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, - 0xd499, 0xd5b2, 0xd49a, 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, - 0xd4a0, 0xd540, 0xd541, 0xd542, 0xd543, 0xd544, 0xd545, 0xd546, - 0xd547, 0xd3fe, 0xccdc, 0xd548, 0xd549, 0xd54a, 0xd54b, 0xd54c, - 0xd54d, 0xd54e, 0xd54f, 0xcac4, 0xd550, 0xd551, 0xd552, 0xd553, - 0xd554, 0xd555, 0xd556, 0xd557, 0xd558, 0xd559, 0xd55a, 0xd55b, - 0xd55c, 0xd55d, 0xd55e, 0xd55f, 0xd560, 0xd561, 0xd562, 0xd563, - 0xd564, 0xd565, 0xd566, 0xd567, 0xd568, 0xd569, 0xd56a, 0xd56b, - 0xd56c, 0xd56d, 0xd56e, 0xd56f, 0xd570, 0xd571, 0xd572, 0xd573, - 0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579, 0xd57a, 0xd57b, - 0xd57c, 0xd57d, 0xd57e, 0xd580, 0xd581, 0xd582, 0xd583, 0xd584, - 0xd585, 0xd586, 0xd587, 0xd588, 0xd589, 0xd58a, 0xd58b, 0xd58c, - 0xd58d, 0xd58e, 0xd58f, 0xd590, 0xd591, 0xd592, 0xd593, 0xd594, - 0xd595, 0xd596, 0xd597, 0xd598, 0xd599, 0xd59a, 0xd59b, 0xd59c, - 0xd59d, 0xd59e, 0xd59f, 0xd5a0, 0xd640, 0xd641, 0xd642, 0xd643, - 0xd644, 0xd645, 0xd646, 0xd647, 0xd648, 0xd649, 0xd64a, 0xd64b, - 0xd64c, 0xd64d, 0xd64e, 0xd64f, 0xd650, 0xd651, 0xd652, 0xd653, - 0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659, 0xd65a, 0xd65b, - /* 0x8b00 .. 0x8bff */ - 0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661, 0xd662, 0xe5c0, - 0xd663, 0xd664, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669, 0xd66a, - 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0xd670, 0xd671, 0xd672, - 0xd673, 0xd674, 0xd675, 0xd676, 0xd677, 0xd678, 0xd679, 0xd67a, - 0xd67b, 0xd67c, 0xd67d, 0xd67e, 0xd680, 0xd681, 0xf6a5, 0xd682, - 0xd683, 0xd684, 0xd685, 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a, - 0xd68b, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692, - 0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a, - 0xd69b, 0xd69c, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd740, 0xd741, - 0xd742, 0xd743, 0xd744, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749, - 0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0xd750, 0xd751, - 0xd752, 0xd753, 0xd754, 0xd755, 0xd756, 0xd757, 0xd758, 0xd759, - 0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e, 0xd75f, 0xbeaf, 0xd760, - 0xd761, 0xd762, 0xd763, 0xd764, 0xc6a9, 0xd765, 0xd766, 0xd767, - 0xd768, 0xd769, 0xd76a, 0xd76b, 0xd76c, 0xd76d, 0xd76e, 0xd76f, - 0xd770, 0xd771, 0xd772, 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, - 0xd778, 0xd779, 0xd77a, 0xd77b, 0xd77c, 0xd77d, 0xd77e, 0xd780, - 0xd781, 0xd782, 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0xd788, - 0xd789, 0xd78a, 0xd78b, 0xd78c, 0xd78d, 0xd78e, 0xd78f, 0xd790, - 0xd791, 0xd792, 0xd793, 0xd794, 0xd795, 0xd796, 0xd797, 0xd798, - 0xdaa5, 0xbcc6, 0xb6a9, 0xb8bc, 0xc8cf, 0xbca5, 0xdaa6, 0xdaa7, - 0xccd6, 0xc8c3, 0xdaa8, 0xc6fd, 0xd799, 0xd1b5, 0xd2e9, 0xd1b6, - 0xbcc7, 0xd79a, 0xbdb2, 0xbbe4, 0xdaa9, 0xdaaa, 0xd1c8, 0xdaab, - 0xd0ed, 0xb6ef, 0xc2db, 0xd79b, 0xcbcf, 0xb7ed, 0xc9e8, 0xb7c3, - 0xbef7, 0xd6a4, 0xdaac, 0xdaad, 0xc6c0, 0xd7e7, 0xcab6, 0xd79c, - 0xd5a9, 0xcbdf, 0xd5ef, 0xdaae, 0xd6df, 0xb4ca, 0xdab0, 0xdaaf, - 0xd79d, 0xd2eb, 0xdab1, 0xdab2, 0xdab3, 0xcad4, 0xdab4, 0xcaab, - 0xdab5, 0xdab6, 0xb3cf, 0xd6ef, 0xdab7, 0xbbb0, 0xb5ae, 0xdab8, - 0xdab9, 0xb9ee, 0xd1af, 0xd2e8, 0xdaba, 0xb8c3, 0xcfea, 0xb2ef, - 0xdabb, 0xdabc, 0xd79e, 0xbdeb, 0xcedc, 0xd3ef, 0xdabd, 0xcef3, - 0xdabe, 0xd3d5, 0xbbe5, 0xdabf, 0xcbb5, 0xcbd0, 0xdac0, 0xc7eb, - 0xd6ee, 0xdac1, 0xc5b5, 0xb6c1, 0xdac2, 0xb7cc, 0xbfce, 0xdac3, - /* 0x8c00 .. 0x8cff */ - 0xdac4, 0xcbad, 0xdac5, 0xb5f7, 0xdac6, 0xc1c2, 0xd7bb, 0xdac7, - 0xccb8, 0xd79f, 0xd2ea, 0xc4b1, 0xdac8, 0xb5fd, 0xbbd1, 0xdac9, - 0xd0b3, 0xdaca, 0xdacb, 0xcebd, 0xdacc, 0xdacd, 0xdace, 0xb2f7, - 0xdad1, 0xdacf, 0xd1e8, 0xdad0, 0xc3d5, 0xdad2, 0xd7a0, 0xdad3, - 0xdad4, 0xdad5, 0xd0bb, 0xd2a5, 0xb0f9, 0xdad6, 0xc7ab, 0xdad7, - 0xbdf7, 0xc3a1, 0xdad8, 0xdad9, 0xc3fd, 0xccb7, 0xdada, 0xdadb, - 0xc0be, 0xc6d7, 0xdadc, 0xdadd, 0xc7b4, 0xdade, 0xdadf, 0xb9c8, - 0xd840, 0xd841, 0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, - 0xd848, 0xbbed, 0xd849, 0xd84a, 0xd84b, 0xd84c, 0xb6b9, 0xf4f8, - 0xd84d, 0xf4f9, 0xd84e, 0xd84f, 0xcde3, 0xd850, 0xd851, 0xd852, - 0xd853, 0xd854, 0xd855, 0xd856, 0xd857, 0xf5b9, 0xd858, 0xd859, - 0xd85a, 0xd85b, 0xebe0, 0xd85c, 0xd85d, 0xd85e, 0xd85f, 0xd860, - 0xd861, 0xcff3, 0xbbbf, 0xd862, 0xd863, 0xd864, 0xd865, 0xd866, - 0xd867, 0xd868, 0xbac0, 0xd4a5, 0xd869, 0xd86a, 0xd86b, 0xd86c, - 0xd86d, 0xd86e, 0xd86f, 0xe1d9, 0xd870, 0xd871, 0xd872, 0xd873, - 0xf5f4, 0xb1aa, 0xb2f2, 0xd874, 0xd875, 0xd876, 0xd877, 0xd878, - 0xd879, 0xd87a, 0xf5f5, 0xd87b, 0xd87c, 0xf5f7, 0xd87d, 0xd87e, - 0xd880, 0xbad1, 0xf5f6, 0xd881, 0xc3b2, 0xd882, 0xd883, 0xd884, - 0xd885, 0xd886, 0xd887, 0xd888, 0xf5f9, 0xd889, 0xd88a, 0xd88b, - 0xf5f8, 0xd88c, 0xd88d, 0xd88e, 0xd88f, 0xd890, 0xd891, 0xd892, - 0xd893, 0xd894, 0xd895, 0xd896, 0xd897, 0xd898, 0xd899, 0xd89a, - 0xd89b, 0xd89c, 0xd89d, 0xd89e, 0xd89f, 0xd8a0, 0xd940, 0xd941, - 0xd942, 0xd943, 0xd944, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, - 0xd94a, 0xd94b, 0xd94c, 0xd94d, 0xd94e, 0xd94f, 0xd950, 0xd951, - 0xd952, 0xd953, 0xd954, 0xd955, 0xd956, 0xd957, 0xd958, 0xd959, - 0xd95a, 0xd95b, 0xd95c, 0xd95d, 0xd95e, 0xd95f, 0xd960, 0xd961, - 0xd962, 0xd963, 0xd964, 0xd965, 0xd966, 0xd967, 0xd968, 0xd969, - 0xd96a, 0xd96b, 0xd96c, 0xd96d, 0xd96e, 0xd96f, 0xd970, 0xd971, - 0xd972, 0xd973, 0xd974, 0xd975, 0xd976, 0xd977, 0xd978, 0xd979, - 0xd97a, 0xd97b, 0xd97c, 0xd97d, 0xd97e, 0xd980, 0xd981, 0xd982, - 0xd983, 0xd984, 0xd985, 0xd986, 0xd987, 0xd988, 0xd989, 0xd98a, - 0xd98b, 0xd98c, 0xd98d, 0xd98e, 0xd98f, 0xd990, 0xd991, 0xd992, - /* 0x8d00 .. 0x8dff */ - 0xd993, 0xd994, 0xd995, 0xd996, 0xd997, 0xd998, 0xd999, 0xd99a, - 0xd99b, 0xd99c, 0xd99d, 0xd99e, 0xd99f, 0xd9a0, 0xda40, 0xda41, - 0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47, 0xda48, 0xda49, - 0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xb1b4, 0xd5ea, 0xb8ba, - 0xda4f, 0xb9b1, 0xb2c6, 0xd4f0, 0xcfcd, 0xb0dc, 0xd5cb, 0xbbf5, - 0xd6ca, 0xb7b7, 0xccb0, 0xc6b6, 0xb1e1, 0xb9ba, 0xd6fc, 0xb9e1, - 0xb7a1, 0xbcfa, 0xeada, 0xeadb, 0xccf9, 0xb9f3, 0xeadc, 0xb4fb, - 0xc3b3, 0xb7d1, 0xbad8, 0xeadd, 0xd4f4, 0xeade, 0xbcd6, 0xbbdf, - 0xeadf, 0xc1de, 0xc2b8, 0xd4df, 0xd7ca, 0xeae0, 0xeae1, 0xeae4, - 0xeae2, 0xeae3, 0xc9de, 0xb8b3, 0xb6c4, 0xeae5, 0xcaea, 0xc9cd, - 0xb4cd, 0xda50, 0xda51, 0xe2d9, 0xc5e2, 0xeae6, 0xc0b5, 0xda52, - 0xd7b8, 0xeae7, 0xd7ac, 0xc8fc, 0xd8d3, 0xd8cd, 0xd4de, 0xda53, - 0xd4f9, 0xc9c4, 0xd3ae, 0xb8d3, 0xb3e0, 0xda54, 0xc9e2, 0xf4f6, - 0xda55, 0xda56, 0xda57, 0xbad5, 0xda58, 0xf4f7, 0xda59, 0xda5a, - 0xd7df, 0xda5b, 0xda5c, 0xf4f1, 0xb8b0, 0xd5d4, 0xb8cf, 0xc6f0, - 0xda5d, 0xda5e, 0xda5f, 0xda60, 0xda61, 0xda62, 0xda63, 0xda64, - 0xda65, 0xb3c3, 0xda66, 0xda67, 0xf4f2, 0xb3ac, 0xda68, 0xda69, - 0xda6a, 0xda6b, 0xd4bd, 0xc7f7, 0xda6c, 0xda6d, 0xda6e, 0xda6f, - 0xda70, 0xf4f4, 0xda71, 0xda72, 0xf4f3, 0xda73, 0xda74, 0xda75, - 0xda76, 0xda77, 0xda78, 0xda79, 0xda7a, 0xda7b, 0xda7c, 0xcccb, - 0xda7d, 0xda7e, 0xda80, 0xc8a4, 0xda81, 0xda82, 0xda83, 0xda84, - 0xda85, 0xda86, 0xda87, 0xda88, 0xda89, 0xda8a, 0xda8b, 0xda8c, - 0xda8d, 0xf4f5, 0xda8e, 0xd7e3, 0xc5bf, 0xf5c0, 0xda8f, 0xda90, - 0xf5bb, 0xda91, 0xf5c3, 0xda92, 0xf5c2, 0xda93, 0xd6ba, 0xf5c1, - 0xda94, 0xda95, 0xda96, 0xd4be, 0xf5c4, 0xda97, 0xf5cc, 0xda98, - 0xda99, 0xda9a, 0xda9b, 0xb0cf, 0xb5f8, 0xda9c, 0xf5c9, 0xf5ca, - 0xda9d, 0xc5dc, 0xda9e, 0xda9f, 0xdaa0, 0xdb40, 0xf5c5, 0xf5c6, - 0xdb41, 0xdb42, 0xf5c7, 0xf5cb, 0xdb43, 0xbee0, 0xf5c8, 0xb8fa, - 0xdb44, 0xdb45, 0xdb46, 0xf5d0, 0xf5d3, 0xdb47, 0xdb48, 0xdb49, - 0xbfe7, 0xdb4a, 0xb9f2, 0xf5bc, 0xf5cd, 0xdb4b, 0xdb4c, 0xc2b7, - 0xdb4d, 0xdb4e, 0xdb4f, 0xccf8, 0xdb50, 0xbcf9, 0xdb51, 0xf5ce, - 0xf5cf, 0xf5d1, 0xb6e5, 0xf5d2, 0xdb52, 0xf5d5, 0xdb53, 0xdb54, - /* 0x8e00 .. 0x8eff */ - 0xdb55, 0xdb56, 0xdb57, 0xdb58, 0xdb59, 0xf5bd, 0xdb5a, 0xdb5b, - 0xdb5c, 0xf5d4, 0xd3bb, 0xdb5d, 0xb3ec, 0xdb5e, 0xdb5f, 0xcca4, - 0xdb60, 0xdb61, 0xdb62, 0xdb63, 0xf5d6, 0xdb64, 0xdb65, 0xdb66, - 0xdb67, 0xdb68, 0xdb69, 0xdb6a, 0xdb6b, 0xf5d7, 0xbee1, 0xf5d8, - 0xdb6c, 0xdb6d, 0xccdf, 0xf5db, 0xdb6e, 0xdb6f, 0xdb70, 0xdb71, - 0xdb72, 0xb2c8, 0xd7d9, 0xdb73, 0xf5d9, 0xdb74, 0xf5da, 0xf5dc, - 0xdb75, 0xf5e2, 0xdb76, 0xdb77, 0xdb78, 0xf5e0, 0xdb79, 0xdb7a, - 0xdb7b, 0xf5df, 0xf5dd, 0xdb7c, 0xdb7d, 0xf5e1, 0xdb7e, 0xdb80, - 0xf5de, 0xf5e4, 0xf5e5, 0xdb81, 0xcce3, 0xdb82, 0xdb83, 0xe5bf, - 0xb5b8, 0xf5e3, 0xf5e8, 0xcca3, 0xdb84, 0xdb85, 0xdb86, 0xdb87, - 0xdb88, 0xf5e6, 0xf5e7, 0xdb89, 0xdb8a, 0xdb8b, 0xdb8c, 0xdb8d, - 0xdb8e, 0xf5be, 0xdb8f, 0xdb90, 0xdb91, 0xdb92, 0xdb93, 0xdb94, - 0xdb95, 0xdb96, 0xdb97, 0xdb98, 0xdb99, 0xdb9a, 0xb1c4, 0xdb9b, - 0xdb9c, 0xf5bf, 0xdb9d, 0xdb9e, 0xb5c5, 0xb2e4, 0xdb9f, 0xf5ec, - 0xf5e9, 0xdba0, 0xb6d7, 0xdc40, 0xf5ed, 0xdc41, 0xf5ea, 0xdc42, - 0xdc43, 0xdc44, 0xdc45, 0xdc46, 0xf5eb, 0xdc47, 0xdc48, 0xb4da, - 0xdc49, 0xd4ea, 0xdc4a, 0xdc4b, 0xdc4c, 0xf5ee, 0xdc4d, 0xb3f9, - 0xdc4e, 0xdc4f, 0xdc50, 0xdc51, 0xdc52, 0xdc53, 0xdc54, 0xf5ef, - 0xf5f1, 0xdc55, 0xdc56, 0xdc57, 0xf5f0, 0xdc58, 0xdc59, 0xdc5a, - 0xdc5b, 0xdc5c, 0xdc5d, 0xdc5e, 0xf5f2, 0xdc5f, 0xf5f3, 0xdc60, - 0xdc61, 0xdc62, 0xdc63, 0xdc64, 0xdc65, 0xdc66, 0xdc67, 0xdc68, - 0xdc69, 0xdc6a, 0xdc6b, 0xc9ed, 0xb9aa, 0xdc6c, 0xdc6d, 0xc7fb, - 0xdc6e, 0xdc6f, 0xb6e3, 0xdc70, 0xdc71, 0xdc72, 0xdc73, 0xdc74, - 0xdc75, 0xdc76, 0xccc9, 0xdc77, 0xdc78, 0xdc79, 0xdc7a, 0xdc7b, - 0xdc7c, 0xdc7d, 0xdc7e, 0xdc80, 0xdc81, 0xdc82, 0xdc83, 0xdc84, - 0xdc85, 0xdc86, 0xdc87, 0xdc88, 0xdc89, 0xdc8a, 0xeaa6, 0xdc8b, - 0xdc8c, 0xdc8d, 0xdc8e, 0xdc8f, 0xdc90, 0xdc91, 0xdc92, 0xdc93, - 0xdc94, 0xdc95, 0xdc96, 0xdc97, 0xdc98, 0xdc99, 0xdc9a, 0xdc9b, - 0xdc9c, 0xdc9d, 0xdc9e, 0xdc9f, 0xdca0, 0xdd40, 0xdd41, 0xdd42, - 0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, 0xdd48, 0xdd49, 0xdd4a, - 0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51, 0xdd52, - 0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57, 0xdd58, 0xdd59, 0xdd5a, - /* 0x8f00 .. 0x8fff */ - 0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60, 0xdd61, 0xdd62, - 0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67, 0xdd68, 0xdd69, 0xdd6a, - 0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f, 0xdd70, 0xdd71, 0xdd72, - 0xdd73, 0xdd74, 0xdd75, 0xdd76, 0xdd77, 0xdd78, 0xdd79, 0xdd7a, - 0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd80, 0xdd81, 0xdd82, 0xdd83, - 0xdd84, 0xdd85, 0xdd86, 0xdd87, 0xdd88, 0xdd89, 0xdd8a, 0xdd8b, - 0xdd8c, 0xdd8d, 0xdd8e, 0xdd8f, 0xdd90, 0xdd91, 0xdd92, 0xdd93, - 0xdd94, 0xdd95, 0xdd96, 0xdd97, 0xdd98, 0xdd99, 0xdd9a, 0xdd9b, - 0xdd9c, 0xdd9d, 0xdd9e, 0xdd9f, 0xdda0, 0xde40, 0xde41, 0xde42, - 0xde43, 0xde44, 0xde45, 0xde46, 0xde47, 0xde48, 0xde49, 0xde4a, - 0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f, 0xde50, 0xde51, 0xde52, - 0xde53, 0xde54, 0xde55, 0xde56, 0xde57, 0xde58, 0xde59, 0xde5a, - 0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f, 0xde60, 0xb3b5, 0xd4fe, - 0xb9ec, 0xd0f9, 0xde61, 0xe9ed, 0xd7aa, 0xe9ee, 0xc2d6, 0xc8ed, - 0xbae4, 0xe9ef, 0xe9f0, 0xe9f1, 0xd6e1, 0xe9f2, 0xe9f3, 0xe9f5, - 0xe9f4, 0xe9f6, 0xe9f7, 0xc7e1, 0xe9f8, 0xd4d8, 0xe9f9, 0xbdce, - 0xde62, 0xe9fa, 0xe9fb, 0xbdcf, 0xe9fc, 0xb8a8, 0xc1be, 0xe9fd, - 0xb1b2, 0xbbd4, 0xb9f5, 0xe9fe, 0xde63, 0xeaa1, 0xeaa2, 0xeaa3, - 0xb7f8, 0xbcad, 0xde64, 0xcae4, 0xe0ce, 0xd4af, 0xcfbd, 0xd5b7, - 0xeaa4, 0xd5de, 0xeaa5, 0xd0c1, 0xb9bc, 0xde65, 0xb4c7, 0xb1d9, - 0xde66, 0xde67, 0xde68, 0xc0b1, 0xde69, 0xde6a, 0xde6b, 0xde6c, - 0xb1e6, 0xb1e7, 0xde6d, 0xb1e8, 0xde6e, 0xde6f, 0xde70, 0xde71, - 0xb3bd, 0xc8e8, 0xde72, 0xde73, 0xde74, 0xde75, 0xe5c1, 0xde76, - 0xde77, 0xb1df, 0xde78, 0xde79, 0xde7a, 0xc1c9, 0xb4ef, 0xde7b, - 0xde7c, 0xc7a8, 0xd3d8, 0xde7d, 0xc6f9, 0xd1b8, 0xde7e, 0xb9fd, - 0xc2f5, 0xde80, 0xde81, 0xde82, 0xde83, 0xde84, 0xd3ad, 0xde85, - 0xd4cb, 0xbdfc, 0xde86, 0xe5c2, 0xb7b5, 0xe5c3, 0xde87, 0xde88, - 0xbbb9, 0xd5e2, 0xde89, 0xbdf8, 0xd4b6, 0xcea5, 0xc1ac, 0xb3d9, - 0xde8a, 0xde8b, 0xccf6, 0xde8c, 0xe5c6, 0xe5c4, 0xe5c8, 0xde8d, - 0xe5ca, 0xe5c7, 0xb5cf, 0xc6c8, 0xde8e, 0xb5fc, 0xe5c5, 0xde8f, - 0xcaf6, 0xde90, 0xde91, 0xe5c9, 0xde92, 0xde93, 0xde94, 0xc3d4, - 0xb1c5, 0xbca3, 0xde95, 0xde96, 0xde97, 0xd7b7, 0xde98, 0xde99, - /* 0x9000 .. 0x90ff */ - 0xcdcb, 0xcbcd, 0xcaca, 0xccd3, 0xe5cc, 0xe5cb, 0xc4e6, 0xde9a, - 0xde9b, 0xd1a1, 0xd1b7, 0xe5cd, 0xde9c, 0xe5d0, 0xde9d, 0xcdb8, - 0xd6f0, 0xe5cf, 0xb5dd, 0xde9e, 0xcdbe, 0xde9f, 0xe5d1, 0xb6ba, - 0xdea0, 0xdf40, 0xcda8, 0xb9e4, 0xdf41, 0xcac5, 0xb3d1, 0xcbd9, - 0xd4ec, 0xe5d2, 0xb7ea, 0xdf42, 0xdf43, 0xdf44, 0xe5ce, 0xdf45, - 0xdf46, 0xdf47, 0xdf48, 0xdf49, 0xdf4a, 0xe5d5, 0xb4fe, 0xe5d6, - 0xdf4b, 0xdf4c, 0xdf4d, 0xdf4e, 0xdf4f, 0xe5d3, 0xe5d4, 0xdf50, - 0xd2dd, 0xdf51, 0xdf52, 0xc2df, 0xb1c6, 0xdf53, 0xd3e2, 0xdf54, - 0xdf55, 0xb6dd, 0xcbec, 0xdf56, 0xe5d7, 0xdf57, 0xdf58, 0xd3f6, - 0xdf59, 0xdf5a, 0xdf5b, 0xdf5c, 0xdf5d, 0xb1e9, 0xdf5e, 0xb6f4, - 0xe5da, 0xe5d8, 0xe5d9, 0xb5c0, 0xdf5f, 0xdf60, 0xdf61, 0xd2c5, - 0xe5dc, 0xdf62, 0xdf63, 0xe5de, 0xdf64, 0xdf65, 0xdf66, 0xdf67, - 0xdf68, 0xdf69, 0xe5dd, 0xc7b2, 0xdf6a, 0xd2a3, 0xdf6b, 0xdf6c, - 0xe5db, 0xdf6d, 0xdf6e, 0xdf6f, 0xdf70, 0xd4e2, 0xd5da, 0xdf71, - 0xdf72, 0xdf73, 0xdf74, 0xdf75, 0xe5e0, 0xd7f1, 0xdf76, 0xdf77, - 0xdf78, 0xdf79, 0xdf7a, 0xdf7b, 0xdf7c, 0xe5e1, 0xdf7d, 0xb1dc, - 0xd1fb, 0xdf7e, 0xe5e2, 0xe5e4, 0xdf80, 0xdf81, 0xdf82, 0xdf83, - 0xe5e3, 0xdf84, 0xdf85, 0xe5e5, 0xdf86, 0xdf87, 0xdf88, 0xdf89, - 0xdf8a, 0xd2d8, 0xdf8b, 0xb5cb, 0xdf8c, 0xe7df, 0xdf8d, 0xdaf5, - 0xdf8e, 0xdaf8, 0xdf8f, 0xdaf6, 0xdf90, 0xdaf7, 0xdf91, 0xdf92, - 0xdf93, 0xdafa, 0xd0cf, 0xc4c7, 0xdf94, 0xdf95, 0xb0ee, 0xdf96, - 0xdf97, 0xdf98, 0xd0b0, 0xdf99, 0xdaf9, 0xdf9a, 0xd3ca, 0xbaaa, - 0xdba2, 0xc7f1, 0xdf9b, 0xdafc, 0xdafb, 0xc9db, 0xdafd, 0xdf9c, - 0xdba1, 0xd7de, 0xdafe, 0xc1da, 0xdf9d, 0xdf9e, 0xdba5, 0xdf9f, - 0xdfa0, 0xd3f4, 0xe040, 0xe041, 0xdba7, 0xdba4, 0xe042, 0xdba8, - 0xe043, 0xe044, 0xbdbc, 0xe045, 0xe046, 0xe047, 0xc0c9, 0xdba3, - 0xdba6, 0xd6a3, 0xe048, 0xdba9, 0xe049, 0xe04a, 0xe04b, 0xdbad, - 0xe04c, 0xe04d, 0xe04e, 0xdbae, 0xdbac, 0xbac2, 0xe04f, 0xe050, - 0xe051, 0xbfa4, 0xdbab, 0xe052, 0xe053, 0xe054, 0xdbaa, 0xd4c7, - 0xb2bf, 0xe055, 0xe056, 0xdbaf, 0xe057, 0xb9f9, 0xe058, 0xdbb0, - 0xe059, 0xe05a, 0xe05b, 0xe05c, 0xb3bb, 0xe05d, 0xe05e, 0xe05f, - 0xb5a6, 0xe060, 0xe061, 0xe062, 0xe063, 0xb6bc, 0xdbb1, 0xe064, - /* 0x9100 .. 0x91ff */ - 0xe065, 0xe066, 0xb6f5, 0xe067, 0xdbb2, 0xe068, 0xe069, 0xe06a, - 0xe06b, 0xe06c, 0xe06d, 0xe06e, 0xe06f, 0xe070, 0xe071, 0xe072, - 0xe073, 0xe074, 0xe075, 0xe076, 0xe077, 0xe078, 0xe079, 0xe07a, - 0xe07b, 0xb1c9, 0xe07c, 0xe07d, 0xe07e, 0xe080, 0xdbb4, 0xe081, - 0xe082, 0xe083, 0xdbb3, 0xdbb5, 0xe084, 0xe085, 0xe086, 0xe087, - 0xe088, 0xe089, 0xe08a, 0xe08b, 0xe08c, 0xe08d, 0xe08e, 0xdbb7, - 0xe08f, 0xdbb6, 0xe090, 0xe091, 0xe092, 0xe093, 0xe094, 0xe095, - 0xe096, 0xdbb8, 0xe097, 0xe098, 0xe099, 0xe09a, 0xe09b, 0xe09c, - 0xe09d, 0xe09e, 0xe09f, 0xdbb9, 0xe0a0, 0xe140, 0xdbba, 0xe141, - 0xe142, 0xd3cf, 0xf4fa, 0xc7f5, 0xd7c3, 0xc5e4, 0xf4fc, 0xf4fd, - 0xf4fb, 0xe143, 0xbec6, 0xe144, 0xe145, 0xe146, 0xe147, 0xd0ef, - 0xe148, 0xe149, 0xb7d3, 0xe14a, 0xe14b, 0xd4cd, 0xccaa, 0xe14c, - 0xe14d, 0xf5a2, 0xf5a1, 0xbaa8, 0xf4fe, 0xcbd6, 0xe14e, 0xe14f, - 0xe150, 0xf5a4, 0xc0d2, 0xe151, 0xb3ea, 0xe152, 0xcdaa, 0xf5a5, - 0xf5a3, 0xbdb4, 0xf5a8, 0xe153, 0xf5a9, 0xbdcd, 0xc3b8, 0xbfe1, - 0xcbe1, 0xf5aa, 0xe154, 0xe155, 0xe156, 0xf5a6, 0xf5a7, 0xc4f0, - 0xe157, 0xe158, 0xe159, 0xe15a, 0xe15b, 0xf5ac, 0xe15c, 0xb4bc, - 0xe15d, 0xd7ed, 0xe15e, 0xb4d7, 0xf5ab, 0xf5ae, 0xe15f, 0xe160, - 0xf5ad, 0xf5af, 0xd0d1, 0xe161, 0xe162, 0xe163, 0xe164, 0xe165, - 0xe166, 0xe167, 0xc3d1, 0xc8a9, 0xe168, 0xe169, 0xe16a, 0xe16b, - 0xe16c, 0xe16d, 0xf5b0, 0xf5b1, 0xe16e, 0xe16f, 0xe170, 0xe171, - 0xe172, 0xe173, 0xf5b2, 0xe174, 0xe175, 0xf5b3, 0xf5b4, 0xf5b5, - 0xe176, 0xe177, 0xe178, 0xe179, 0xf5b7, 0xf5b6, 0xe17a, 0xe17b, - 0xe17c, 0xe17d, 0xf5b8, 0xe17e, 0xe180, 0xe181, 0xe182, 0xe183, - 0xe184, 0xe185, 0xe186, 0xe187, 0xe188, 0xe189, 0xe18a, 0xb2c9, - 0xe18b, 0xd3d4, 0xcacd, 0xe18c, 0xc0ef, 0xd6d8, 0xd2b0, 0xc1bf, - 0xe18d, 0xbdf0, 0xe18e, 0xe18f, 0xe190, 0xe191, 0xe192, 0xe193, - 0xe194, 0xe195, 0xe196, 0xe197, 0xb8aa, 0xe198, 0xe199, 0xe19a, - 0xe19b, 0xe19c, 0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe240, 0xe241, - 0xe242, 0xe243, 0xe244, 0xe245, 0xe246, 0xe247, 0xe248, 0xe249, - 0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f, 0xe250, 0xe251, - 0xe252, 0xe253, 0xe254, 0xe255, 0xe256, 0xe257, 0xe258, 0xe259, - /* 0x9200 .. 0x92ff */ - 0xe25a, 0xe25b, 0xe25c, 0xe25d, 0xe25e, 0xe25f, 0xe260, 0xe261, - 0xe262, 0xe263, 0xe264, 0xe265, 0xe266, 0xe267, 0xe268, 0xe269, - 0xe26a, 0xe26b, 0xe26c, 0xe26d, 0xe26e, 0xe26f, 0xe270, 0xe271, - 0xe272, 0xe273, 0xe274, 0xe275, 0xe276, 0xe277, 0xe278, 0xe279, - 0xe27a, 0xe27b, 0xe27c, 0xe27d, 0xe27e, 0xe280, 0xe281, 0xe282, - 0xe283, 0xe284, 0xe285, 0xe286, 0xe287, 0xe288, 0xe289, 0xe28a, - 0xe28b, 0xe28c, 0xe28d, 0xe28e, 0xe28f, 0xe290, 0xe291, 0xe292, - 0xe293, 0xe294, 0xe295, 0xe296, 0xe297, 0xe298, 0xe299, 0xe29a, - 0xe29b, 0xe29c, 0xe29d, 0xe29e, 0xe29f, 0xe2a0, 0xe340, 0xe341, - 0xe342, 0xe343, 0xe344, 0xe345, 0xe346, 0xe347, 0xe348, 0xe349, - 0xe34a, 0xe34b, 0xe34c, 0xe34d, 0xe34e, 0xe34f, 0xe350, 0xe351, - 0xe352, 0xe353, 0xe354, 0xe355, 0xe356, 0xe357, 0xe358, 0xe359, - 0xe35a, 0xe35b, 0xe35c, 0xe35d, 0xe35e, 0xe35f, 0xe360, 0xe361, - 0xe362, 0xe363, 0xe364, 0xe365, 0xe366, 0xe367, 0xe368, 0xe369, - 0xe36a, 0xe36b, 0xe36c, 0xe36d, 0xbcf8, 0xe36e, 0xe36f, 0xe370, - 0xe371, 0xe372, 0xe373, 0xe374, 0xe375, 0xe376, 0xe377, 0xe378, - 0xe379, 0xe37a, 0xe37b, 0xe37c, 0xe37d, 0xe37e, 0xe380, 0xe381, - 0xe382, 0xe383, 0xe384, 0xe385, 0xe386, 0xe387, 0xf6c6, 0xe388, - 0xe389, 0xe38a, 0xe38b, 0xe38c, 0xe38d, 0xe38e, 0xe38f, 0xe390, - 0xe391, 0xe392, 0xe393, 0xe394, 0xe395, 0xe396, 0xe397, 0xe398, - 0xe399, 0xe39a, 0xe39b, 0xe39c, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, - 0xe440, 0xe441, 0xe442, 0xe443, 0xe444, 0xe445, 0xf6c7, 0xe446, - 0xe447, 0xe448, 0xe449, 0xe44a, 0xe44b, 0xe44c, 0xe44d, 0xe44e, - 0xe44f, 0xe450, 0xe451, 0xe452, 0xe453, 0xe454, 0xe455, 0xe456, - 0xe457, 0xe458, 0xe459, 0xe45a, 0xe45b, 0xe45c, 0xe45d, 0xe45e, - 0xf6c8, 0xe45f, 0xe460, 0xe461, 0xe462, 0xe463, 0xe464, 0xe465, - 0xe466, 0xe467, 0xe468, 0xe469, 0xe46a, 0xe46b, 0xe46c, 0xe46d, - 0xe46e, 0xe46f, 0xe470, 0xe471, 0xe472, 0xe473, 0xe474, 0xe475, - 0xe476, 0xe477, 0xe478, 0xe479, 0xe47a, 0xe47b, 0xe47c, 0xe47d, - 0xe47e, 0xe480, 0xe481, 0xe482, 0xe483, 0xe484, 0xe485, 0xe486, - 0xe487, 0xe488, 0xe489, 0xe48a, 0xe48b, 0xe48c, 0xe48d, 0xe48e, - 0xe48f, 0xe490, 0xe491, 0xe492, 0xe493, 0xe494, 0xe495, 0xe496, - /* 0x9300 .. 0x93ff */ - 0xe497, 0xe498, 0xe499, 0xe49a, 0xe49b, 0xe49c, 0xe49d, 0xe49e, - 0xe49f, 0xe4a0, 0xe540, 0xe541, 0xe542, 0xe543, 0xe544, 0xe545, - 0xe546, 0xe547, 0xe548, 0xe549, 0xe54a, 0xe54b, 0xe54c, 0xe54d, - 0xe54e, 0xe54f, 0xe550, 0xe551, 0xe552, 0xe553, 0xe554, 0xe555, - 0xe556, 0xe557, 0xe558, 0xe559, 0xe55a, 0xe55b, 0xe55c, 0xe55d, - 0xe55e, 0xe55f, 0xe560, 0xe561, 0xe562, 0xe563, 0xe564, 0xe565, - 0xe566, 0xe567, 0xe568, 0xe569, 0xe56a, 0xe56b, 0xe56c, 0xe56d, - 0xe56e, 0xe56f, 0xe570, 0xe571, 0xe572, 0xe573, 0xf6c9, 0xe574, - 0xe575, 0xe576, 0xe577, 0xe578, 0xe579, 0xe57a, 0xe57b, 0xe57c, - 0xe57d, 0xe57e, 0xe580, 0xe581, 0xe582, 0xe583, 0xe584, 0xe585, - 0xe586, 0xe587, 0xe588, 0xe589, 0xe58a, 0xe58b, 0xe58c, 0xe58d, - 0xe58e, 0xe58f, 0xe590, 0xe591, 0xe592, 0xe593, 0xe594, 0xe595, - 0xe596, 0xe597, 0xe598, 0xe599, 0xe59a, 0xe59b, 0xe59c, 0xe59d, - 0xe59e, 0xe59f, 0xf6ca, 0xe5a0, 0xe640, 0xe641, 0xe642, 0xe643, - 0xe644, 0xe645, 0xe646, 0xe647, 0xe648, 0xe649, 0xe64a, 0xe64b, - 0xe64c, 0xe64d, 0xe64e, 0xe64f, 0xe650, 0xe651, 0xe652, 0xe653, - 0xe654, 0xe655, 0xe656, 0xe657, 0xe658, 0xe659, 0xe65a, 0xe65b, - 0xe65c, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0xe661, 0xe662, 0xf6cc, - 0xe663, 0xe664, 0xe665, 0xe666, 0xe667, 0xe668, 0xe669, 0xe66a, - 0xe66b, 0xe66c, 0xe66d, 0xe66e, 0xe66f, 0xe670, 0xe671, 0xe672, - 0xe673, 0xe674, 0xe675, 0xe676, 0xe677, 0xe678, 0xe679, 0xe67a, - 0xe67b, 0xe67c, 0xe67d, 0xe67e, 0xe680, 0xe681, 0xe682, 0xe683, - 0xe684, 0xe685, 0xe686, 0xe687, 0xe688, 0xe689, 0xe68a, 0xe68b, - 0xe68c, 0xe68d, 0xe68e, 0xe68f, 0xe690, 0xe691, 0xe692, 0xe693, - 0xe694, 0xe695, 0xe696, 0xe697, 0xe698, 0xe699, 0xe69a, 0xe69b, - 0xe69c, 0xe69d, 0xf6cb, 0xe69e, 0xe69f, 0xe6a0, 0xe740, 0xe741, - 0xe742, 0xe743, 0xe744, 0xe745, 0xe746, 0xe747, 0xf7e9, 0xe748, - 0xe749, 0xe74a, 0xe74b, 0xe74c, 0xe74d, 0xe74e, 0xe74f, 0xe750, - 0xe751, 0xe752, 0xe753, 0xe754, 0xe755, 0xe756, 0xe757, 0xe758, - 0xe759, 0xe75a, 0xe75b, 0xe75c, 0xe75d, 0xe75e, 0xe75f, 0xe760, - 0xe761, 0xe762, 0xe763, 0xe764, 0xe765, 0xe766, 0xe767, 0xe768, - 0xe769, 0xe76a, 0xe76b, 0xe76c, 0xe76d, 0xe76e, 0xe76f, 0xe770, - /* 0x9400 .. 0x94ff */ - 0xe771, 0xe772, 0xe773, 0xe774, 0xe775, 0xe776, 0xe777, 0xe778, - 0xe779, 0xe77a, 0xe77b, 0xe77c, 0xe77d, 0xe77e, 0xe780, 0xe781, - 0xe782, 0xe783, 0xe784, 0xe785, 0xe786, 0xe787, 0xe788, 0xe789, - 0xe78a, 0xe78b, 0xe78c, 0xe78d, 0xe78e, 0xe78f, 0xe790, 0xe791, - 0xe792, 0xe793, 0xe794, 0xe795, 0xe796, 0xe797, 0xe798, 0xe799, - 0xe79a, 0xe79b, 0xe79c, 0xe79d, 0xe79e, 0xe79f, 0xe7a0, 0xe840, - 0xe841, 0xe842, 0xe843, 0xe844, 0xe845, 0xe846, 0xe847, 0xe848, - 0xe849, 0xe84a, 0xe84b, 0xe84c, 0xe84d, 0xe84e, 0xf6cd, 0xe84f, - 0xe850, 0xe851, 0xe852, 0xe853, 0xe854, 0xe855, 0xe856, 0xe857, - 0xe858, 0xe859, 0xe85a, 0xe85b, 0xe85c, 0xe85d, 0xe85e, 0xe85f, - 0xe860, 0xe861, 0xe862, 0xe863, 0xe864, 0xe865, 0xe866, 0xe867, - 0xe868, 0xe869, 0xe86a, 0xe86b, 0xe86c, 0xe86d, 0xe86e, 0xe86f, - 0xe870, 0xe871, 0xe872, 0xe873, 0xe874, 0xe875, 0xe876, 0xe877, - 0xe878, 0xe879, 0xe87a, 0xf6ce, 0xe87b, 0xe87c, 0xe87d, 0xe87e, - 0xe880, 0xe881, 0xe882, 0xe883, 0xe884, 0xe885, 0xe886, 0xe887, - 0xe888, 0xe889, 0xe88a, 0xe88b, 0xe88c, 0xe88d, 0xe88e, 0xe88f, - 0xe890, 0xe891, 0xe892, 0xe893, 0xe894, 0xeec4, 0xeec5, 0xeec6, - 0xd5eb, 0xb6a4, 0xeec8, 0xeec7, 0xeec9, 0xeeca, 0xc7a5, 0xeecb, - 0xeecc, 0xe895, 0xb7b0, 0xb5f6, 0xeecd, 0xeecf, 0xe896, 0xeece, - 0xe897, 0xb8c6, 0xeed0, 0xeed1, 0xeed2, 0xb6db, 0xb3ae, 0xd6d3, - 0xc4c6, 0xb1b5, 0xb8d6, 0xeed3, 0xeed4, 0xd4bf, 0xc7d5, 0xbefb, - 0xced9, 0xb9b3, 0xeed6, 0xeed5, 0xeed8, 0xeed7, 0xc5a5, 0xeed9, - 0xeeda, 0xc7ae, 0xeedb, 0xc7af, 0xeedc, 0xb2a7, 0xeedd, 0xeede, - 0xeedf, 0xeee0, 0xeee1, 0xd7ea, 0xeee2, 0xeee3, 0xbcd8, 0xeee4, - 0xd3cb, 0xccfa, 0xb2ac, 0xc1e5, 0xeee5, 0xc7a6, 0xc3ad, 0xe898, - 0xeee6, 0xeee7, 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xe899, - 0xeeed, 0xeeee, 0xeeef, 0xe89a, 0xe89b, 0xeef0, 0xeef1, 0xeef2, - 0xeef4, 0xeef3, 0xe89c, 0xeef5, 0xcdad, 0xc2c1, 0xeef6, 0xeef7, - 0xeef8, 0xd5a1, 0xeef9, 0xcfb3, 0xeefa, 0xeefb, 0xe89d, 0xeefc, - 0xeefd, 0xefa1, 0xeefe, 0xefa2, 0xb8f5, 0xc3fa, 0xefa3, 0xefa4, - 0xbdc2, 0xd2bf, 0xb2f9, 0xefa5, 0xefa6, 0xefa7, 0xd2f8, 0xefa8, - 0xd6fd, 0xefa9, 0xc6cc, 0xe89e, 0xefaa, 0xefab, 0xc1b4, 0xefac, - /* 0x9500 .. 0x95ff */ - 0xcffa, 0xcbf8, 0xefae, 0xefad, 0xb3fa, 0xb9f8, 0xefaf, 0xefb0, - 0xd0e2, 0xefb1, 0xefb2, 0xb7e6, 0xd0bf, 0xefb3, 0xefb4, 0xefb5, - 0xc8f1, 0xcce0, 0xefb6, 0xefb7, 0xefb8, 0xefb9, 0xefba, 0xd5e0, - 0xefbb, 0xb4ed, 0xc3aa, 0xefbc, 0xe89f, 0xefbd, 0xefbe, 0xefbf, - 0xe8a0, 0xcefd, 0xefc0, 0xc2e0, 0xb4b8, 0xd7b6, 0xbdf5, 0xe940, - 0xcfc7, 0xefc3, 0xefc1, 0xefc2, 0xefc4, 0xb6a7, 0xbcfc, 0xbee2, - 0xc3cc, 0xefc5, 0xefc6, 0xe941, 0xefc7, 0xefcf, 0xefc8, 0xefc9, - 0xefca, 0xc7c2, 0xeff1, 0xb6cd, 0xefcb, 0xe942, 0xefcc, 0xefcd, - 0xb6c6, 0xc3be, 0xefce, 0xe943, 0xefd0, 0xefd1, 0xefd2, 0xd5f2, - 0xe944, 0xefd3, 0xc4f7, 0xe945, 0xefd4, 0xc4f8, 0xefd5, 0xefd6, - 0xb8e4, 0xb0f7, 0xefd7, 0xefd8, 0xefd9, 0xe946, 0xefda, 0xefdb, - 0xefdc, 0xefdd, 0xe947, 0xefde, 0xbeb5, 0xefe1, 0xefdf, 0xefe0, - 0xe948, 0xefe2, 0xefe3, 0xc1cd, 0xefe4, 0xefe5, 0xefe6, 0xefe7, - 0xefe8, 0xefe9, 0xefea, 0xefeb, 0xefec, 0xc0d8, 0xe949, 0xefed, - 0xc1ad, 0xefee, 0xefef, 0xeff0, 0xe94a, 0xe94b, 0xcfe2, 0xe94c, - 0xe94d, 0xe94e, 0xe94f, 0xe950, 0xe951, 0xe952, 0xe953, 0xb3a4, - 0xe954, 0xe955, 0xe956, 0xe957, 0xe958, 0xe959, 0xe95a, 0xe95b, - 0xe95c, 0xe95d, 0xe95e, 0xe95f, 0xe960, 0xe961, 0xe962, 0xe963, - 0xe964, 0xe965, 0xe966, 0xe967, 0xe968, 0xe969, 0xe96a, 0xe96b, - 0xe96c, 0xe96d, 0xe96e, 0xe96f, 0xe970, 0xe971, 0xe972, 0xe973, - 0xe974, 0xe975, 0xe976, 0xe977, 0xe978, 0xe979, 0xe97a, 0xe97b, - 0xe97c, 0xe97d, 0xe97e, 0xe980, 0xe981, 0xe982, 0xe983, 0xe984, - 0xe985, 0xe986, 0xe987, 0xe988, 0xe989, 0xe98a, 0xe98b, 0xe98c, - 0xe98d, 0xe98e, 0xe98f, 0xe990, 0xe991, 0xe992, 0xe993, 0xe994, - 0xe995, 0xe996, 0xe997, 0xe998, 0xe999, 0xe99a, 0xe99b, 0xe99c, - 0xe99d, 0xe99e, 0xe99f, 0xe9a0, 0xea40, 0xea41, 0xea42, 0xea43, - 0xea44, 0xea45, 0xea46, 0xea47, 0xea48, 0xea49, 0xea4a, 0xea4b, - 0xea4c, 0xea4d, 0xea4e, 0xea4f, 0xea50, 0xea51, 0xea52, 0xea53, - 0xea54, 0xea55, 0xea56, 0xea57, 0xea58, 0xea59, 0xea5a, 0xea5b, - 0xc3c5, 0xe3c5, 0xc9c1, 0xe3c6, 0xea5c, 0xb1d5, 0xceca, 0xb4b3, - 0xc8f2, 0xe3c7, 0xcfd0, 0xe3c8, 0xbce4, 0xe3c9, 0xe3ca, 0xc3c6, - 0xd5a2, 0xc4d6, 0xb9eb, 0xcec5, 0xe3cb, 0xc3f6, 0xe3cc, 0xea5d, - /* 0x9600 .. 0x96ff */ - 0xb7a7, 0xb8f3, 0xbad2, 0xe3cd, 0xe3ce, 0xd4c4, 0xe3cf, 0xea5e, - 0xe3d0, 0xd1cb, 0xe3d1, 0xe3d2, 0xe3d3, 0xe3d4, 0xd1d6, 0xe3d5, - 0xb2fb, 0xc0bb, 0xe3d6, 0xea5f, 0xc0ab, 0xe3d7, 0xe3d8, 0xe3d9, - 0xea60, 0xe3da, 0xe3db, 0xea61, 0xb8b7, 0xdae2, 0xea62, 0xb6d3, - 0xea63, 0xdae4, 0xdae3, 0xea64, 0xea65, 0xea66, 0xea67, 0xea68, - 0xea69, 0xea6a, 0xdae6, 0xea6b, 0xea6c, 0xea6d, 0xc8ee, 0xea6e, - 0xea6f, 0xdae5, 0xb7c0, 0xd1f4, 0xd2f5, 0xd5f3, 0xbdd7, 0xea70, - 0xea71, 0xea72, 0xea73, 0xd7e8, 0xdae8, 0xdae7, 0xea74, 0xb0a2, - 0xcdd3, 0xea75, 0xdae9, 0xea76, 0xb8bd, 0xbcca, 0xc2bd, 0xc2a4, - 0xb3c2, 0xdaea, 0xea77, 0xc2aa, 0xc4b0, 0xbdb5, 0xea78, 0xea79, - 0xcfde, 0xea7a, 0xea7b, 0xea7c, 0xdaeb, 0xc9c2, 0xea7d, 0xea7e, - 0xea80, 0xea81, 0xea82, 0xb1dd, 0xea83, 0xea84, 0xea85, 0xdaec, - 0xea86, 0xb6b8, 0xd4ba, 0xea87, 0xb3fd, 0xea88, 0xea89, 0xdaed, - 0xd4c9, 0xcfd5, 0xc5e3, 0xea8a, 0xdaee, 0xea8b, 0xea8c, 0xea8d, - 0xea8e, 0xea8f, 0xdaef, 0xea90, 0xdaf0, 0xc1ea, 0xccd5, 0xcfdd, - 0xea91, 0xea92, 0xea93, 0xea94, 0xea95, 0xea96, 0xea97, 0xea98, - 0xea99, 0xea9a, 0xea9b, 0xea9c, 0xea9d, 0xd3e7, 0xc2a1, 0xea9e, - 0xdaf1, 0xea9f, 0xeaa0, 0xcbe5, 0xeb40, 0xdaf2, 0xeb41, 0xcbe6, - 0xd2fe, 0xeb42, 0xeb43, 0xeb44, 0xb8f4, 0xeb45, 0xeb46, 0xdaf3, - 0xb0af, 0xcfb6, 0xeb47, 0xeb48, 0xd5cf, 0xeb49, 0xeb4a, 0xeb4b, - 0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f, 0xeb50, 0xeb51, 0xeb52, 0xcbed, - 0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57, 0xeb58, 0xeb59, 0xeb5a, - 0xdaf4, 0xeb5b, 0xeb5c, 0xe3c4, 0xeb5d, 0xeb5e, 0xc1a5, 0xeb5f, - 0xeb60, 0xf6bf, 0xeb61, 0xeb62, 0xf6c0, 0xf6c1, 0xc4d1, 0xeb63, - 0xc8b8, 0xd1e3, 0xeb64, 0xeb65, 0xd0db, 0xd1c5, 0xbcaf, 0xb9cd, - 0xeb66, 0xeff4, 0xeb67, 0xeb68, 0xb4c6, 0xd3ba, 0xf6c2, 0xb3fb, - 0xeb69, 0xeb6a, 0xf6c3, 0xeb6b, 0xeb6c, 0xb5f1, 0xeb6d, 0xeb6e, - 0xeb6f, 0xeb70, 0xeb71, 0xeb72, 0xeb73, 0xeb74, 0xeb75, 0xeb76, - 0xf6c5, 0xeb77, 0xeb78, 0xeb79, 0xeb7a, 0xeb7b, 0xeb7c, 0xeb7d, - 0xd3ea, 0xf6a7, 0xd1a9, 0xeb7e, 0xeb80, 0xeb81, 0xeb82, 0xf6a9, - 0xeb83, 0xeb84, 0xeb85, 0xf6a8, 0xeb86, 0xeb87, 0xc1e3, 0xc0d7, - 0xeb88, 0xb1a2, 0xeb89, 0xeb8a, 0xeb8b, 0xeb8c, 0xceed, 0xeb8d, - /* 0x9700 .. 0x97ff */ - 0xd0e8, 0xf6ab, 0xeb8e, 0xeb8f, 0xcff6, 0xeb90, 0xf6aa, 0xd5f0, - 0xf6ac, 0xc3b9, 0xeb91, 0xeb92, 0xeb93, 0xbbf4, 0xf6ae, 0xf6ad, - 0xeb94, 0xeb95, 0xeb96, 0xc4de, 0xeb97, 0xeb98, 0xc1d8, 0xeb99, - 0xeb9a, 0xeb9b, 0xeb9c, 0xeb9d, 0xcbaa, 0xeb9e, 0xcfbc, 0xeb9f, - 0xeba0, 0xec40, 0xec41, 0xec42, 0xec43, 0xec44, 0xec45, 0xec46, - 0xec47, 0xec48, 0xf6af, 0xec49, 0xec4a, 0xf6b0, 0xec4b, 0xec4c, - 0xf6b1, 0xec4d, 0xc2b6, 0xec4e, 0xec4f, 0xec50, 0xec51, 0xec52, - 0xb0d4, 0xc5f9, 0xec53, 0xec54, 0xec55, 0xec56, 0xf6b2, 0xec57, - 0xec58, 0xec59, 0xec5a, 0xec5b, 0xec5c, 0xec5d, 0xec5e, 0xec5f, - 0xec60, 0xec61, 0xec62, 0xec63, 0xec64, 0xec65, 0xec66, 0xec67, - 0xec68, 0xec69, 0xc7e0, 0xf6a6, 0xec6a, 0xec6b, 0xbeb8, 0xec6c, - 0xec6d, 0xbeb2, 0xec6e, 0xb5e5, 0xec6f, 0xec70, 0xb7c7, 0xec71, - 0xbfbf, 0xc3d2, 0xc3e6, 0xec72, 0xec73, 0xd8cc, 0xec74, 0xec75, - 0xec76, 0xb8ef, 0xec77, 0xec78, 0xec79, 0xec7a, 0xec7b, 0xec7c, - 0xec7d, 0xec7e, 0xec80, 0xbdf9, 0xd1a5, 0xec81, 0xb0d0, 0xec82, - 0xec83, 0xec84, 0xec85, 0xec86, 0xf7b0, 0xec87, 0xec88, 0xec89, - 0xec8a, 0xec8b, 0xec8c, 0xec8d, 0xec8e, 0xf7b1, 0xec8f, 0xec90, - 0xec91, 0xec92, 0xec93, 0xd0ac, 0xec94, 0xb0b0, 0xec95, 0xec96, - 0xec97, 0xf7b2, 0xf7b3, 0xec98, 0xf7b4, 0xec99, 0xec9a, 0xec9b, - 0xc7ca, 0xec9c, 0xec9d, 0xec9e, 0xec9f, 0xeca0, 0xed40, 0xed41, - 0xbecf, 0xed42, 0xed43, 0xf7b7, 0xed44, 0xed45, 0xed46, 0xed47, - 0xed48, 0xed49, 0xed4a, 0xf7b6, 0xed4b, 0xb1de, 0xed4c, 0xf7b5, - 0xed4d, 0xed4e, 0xf7b8, 0xed4f, 0xf7b9, 0xed50, 0xed51, 0xed52, - 0xed53, 0xed54, 0xed55, 0xed56, 0xed57, 0xed58, 0xed59, 0xed5a, - 0xed5b, 0xed5c, 0xed5d, 0xed5e, 0xed5f, 0xed60, 0xed61, 0xed62, - 0xed63, 0xed64, 0xed65, 0xed66, 0xed67, 0xed68, 0xed69, 0xed6a, - 0xed6b, 0xed6c, 0xed6d, 0xed6e, 0xed6f, 0xed70, 0xed71, 0xed72, - 0xed73, 0xed74, 0xed75, 0xed76, 0xed77, 0xed78, 0xed79, 0xed7a, - 0xed7b, 0xed7c, 0xed7d, 0xed7e, 0xed80, 0xed81, 0xcea4, 0xc8cd, - 0xed82, 0xbaab, 0xe8b8, 0xe8b9, 0xe8ba, 0xbec2, 0xed83, 0xed84, - 0xed85, 0xed86, 0xed87, 0xd2f4, 0xed88, 0xd4cf, 0xc9d8, 0xed89, - 0xed8a, 0xed8b, 0xed8c, 0xed8d, 0xed8e, 0xed8f, 0xed90, 0xed91, - /* 0x9800 .. 0x98ff */ - 0xed92, 0xed93, 0xed94, 0xed95, 0xed96, 0xed97, 0xed98, 0xed99, - 0xed9a, 0xed9b, 0xed9c, 0xed9d, 0xed9e, 0xed9f, 0xeda0, 0xee40, - 0xee41, 0xee42, 0xee43, 0xee44, 0xee45, 0xee46, 0xee47, 0xee48, - 0xee49, 0xee4a, 0xee4b, 0xee4c, 0xee4d, 0xee4e, 0xee4f, 0xee50, - 0xee51, 0xee52, 0xee53, 0xee54, 0xee55, 0xee56, 0xee57, 0xee58, - 0xee59, 0xee5a, 0xee5b, 0xee5c, 0xee5d, 0xee5e, 0xee5f, 0xee60, - 0xee61, 0xee62, 0xee63, 0xee64, 0xee65, 0xee66, 0xee67, 0xee68, - 0xee69, 0xee6a, 0xee6b, 0xee6c, 0xee6d, 0xee6e, 0xee6f, 0xee70, - 0xee71, 0xee72, 0xee73, 0xee74, 0xee75, 0xee76, 0xee77, 0xee78, - 0xee79, 0xee7a, 0xee7b, 0xee7c, 0xee7d, 0xee7e, 0xee80, 0xee81, - 0xee82, 0xee83, 0xee84, 0xee85, 0xee86, 0xee87, 0xee88, 0xee89, - 0xee8a, 0xee8b, 0xee8c, 0xee8d, 0xee8e, 0xee8f, 0xee90, 0xee91, - 0xee92, 0xee93, 0xee94, 0xee95, 0xee96, 0xee97, 0xee98, 0xee99, - 0xee9a, 0xee9b, 0xee9c, 0xee9d, 0xee9e, 0xee9f, 0xeea0, 0xef40, - 0xef41, 0xef42, 0xef43, 0xef44, 0xef45, 0xd2b3, 0xb6a5, 0xc7ea, - 0xf1fc, 0xcfee, 0xcbb3, 0xd0eb, 0xe7ef, 0xcde7, 0xb9cb, 0xb6d9, - 0xf1fd, 0xb0e4, 0xcbcc, 0xf1fe, 0xd4a4, 0xc2ad, 0xc1ec, 0xc6c4, - 0xbeb1, 0xf2a1, 0xbcd5, 0xef46, 0xf2a2, 0xf2a3, 0xef47, 0xf2a4, - 0xd2c3, 0xc6b5, 0xef48, 0xcdc7, 0xf2a5, 0xef49, 0xd3b1, 0xbfc5, - 0xcce2, 0xef4a, 0xf2a6, 0xf2a7, 0xd1d5, 0xb6ee, 0xf2a8, 0xf2a9, - 0xb5df, 0xf2aa, 0xf2ab, 0xef4b, 0xb2fc, 0xf2ac, 0xf2ad, 0xc8a7, - 0xef4c, 0xef4d, 0xef4e, 0xef4f, 0xef50, 0xef51, 0xef52, 0xef53, - 0xef54, 0xef55, 0xef56, 0xef57, 0xef58, 0xef59, 0xef5a, 0xef5b, - 0xef5c, 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61, 0xef62, 0xef63, - 0xef64, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, 0xef6a, 0xef6b, - 0xef6c, 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71, 0xb7e7, 0xef72, - 0xef73, 0xeca9, 0xecaa, 0xecab, 0xef74, 0xecac, 0xef75, 0xef76, - 0xc6ae, 0xecad, 0xecae, 0xef77, 0xef78, 0xef79, 0xb7c9, 0xcab3, - 0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef80, 0xef81, 0xe2b8, - 0xf7cf, 0xef82, 0xef83, 0xef84, 0xef85, 0xef86, 0xef87, 0xef88, - 0xef89, 0xef8a, 0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f, 0xef90, - 0xef91, 0xef92, 0xef93, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, - /* 0x9900 .. 0x99ff */ - 0xef99, 0xef9a, 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, - 0xf040, 0xf041, 0xf042, 0xf043, 0xf044, 0xf7d0, 0xf045, 0xf046, - 0xb2cd, 0xf047, 0xf048, 0xf049, 0xf04a, 0xf04b, 0xf04c, 0xf04d, - 0xf04e, 0xf04f, 0xf050, 0xf051, 0xf052, 0xf053, 0xf054, 0xf055, - 0xf056, 0xf057, 0xf058, 0xf059, 0xf05a, 0xf05b, 0xf05c, 0xf05d, - 0xf05e, 0xf05f, 0xf060, 0xf061, 0xf062, 0xf063, 0xf7d1, 0xf064, - 0xf065, 0xf066, 0xf067, 0xf068, 0xf069, 0xf06a, 0xf06b, 0xf06c, - 0xf06d, 0xf06e, 0xf06f, 0xf070, 0xf071, 0xf072, 0xf073, 0xf074, - 0xf075, 0xf076, 0xf077, 0xf078, 0xf079, 0xf07a, 0xf07b, 0xf07c, - 0xf07d, 0xf07e, 0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, - 0xf086, 0xf087, 0xf088, 0xf089, 0xf7d3, 0xf7d2, 0xf08a, 0xf08b, - 0xf08c, 0xf08d, 0xf08e, 0xf08f, 0xf090, 0xf091, 0xf092, 0xf093, - 0xf094, 0xf095, 0xf096, 0xe2bb, 0xf097, 0xbca2, 0xf098, 0xe2bc, - 0xe2bd, 0xe2be, 0xe2bf, 0xe2c0, 0xe2c1, 0xb7b9, 0xd2fb, 0xbda4, - 0xcace, 0xb1a5, 0xcbc7, 0xf099, 0xe2c2, 0xb6fc, 0xc8c4, 0xe2c3, - 0xf09a, 0xf09b, 0xbdc8, 0xf09c, 0xb1fd, 0xe2c4, 0xf09d, 0xb6f6, - 0xe2c5, 0xc4d9, 0xf09e, 0xf09f, 0xe2c6, 0xcfda, 0xb9dd, 0xe2c7, - 0xc0a1, 0xf0a0, 0xe2c8, 0xb2f6, 0xf140, 0xe2c9, 0xf141, 0xc1f3, - 0xe2ca, 0xe2cb, 0xc2f8, 0xe2cc, 0xe2cd, 0xe2ce, 0xcad7, 0xd8b8, - 0xd9e5, 0xcfe3, 0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, - 0xf148, 0xf149, 0xf14a, 0xf14b, 0xf14c, 0xf0a5, 0xf14d, 0xf14e, - 0xdcb0, 0xf14f, 0xf150, 0xf151, 0xf152, 0xf153, 0xf154, 0xf155, - 0xf156, 0xf157, 0xf158, 0xf159, 0xf15a, 0xf15b, 0xf15c, 0xf15d, - 0xf15e, 0xf15f, 0xf160, 0xf161, 0xf162, 0xf163, 0xf164, 0xf165, - 0xf166, 0xf167, 0xf168, 0xf169, 0xf16a, 0xf16b, 0xf16c, 0xf16d, - 0xf16e, 0xf16f, 0xf170, 0xf171, 0xf172, 0xf173, 0xf174, 0xf175, - 0xf176, 0xf177, 0xf178, 0xf179, 0xf17a, 0xf17b, 0xf17c, 0xf17d, - 0xf17e, 0xf180, 0xf181, 0xf182, 0xf183, 0xf184, 0xf185, 0xf186, - 0xf187, 0xf188, 0xf189, 0xf18a, 0xf18b, 0xf18c, 0xf18d, 0xf18e, - 0xf18f, 0xf190, 0xf191, 0xf192, 0xf193, 0xf194, 0xf195, 0xf196, - 0xf197, 0xf198, 0xf199, 0xf19a, 0xf19b, 0xf19c, 0xf19d, 0xf19e, - 0xf19f, 0xf1a0, 0xf240, 0xf241, 0xf242, 0xf243, 0xf244, 0xf245, - /* 0x9a00 .. 0x9aff */ - 0xf246, 0xf247, 0xf248, 0xf249, 0xf24a, 0xf24b, 0xf24c, 0xf24d, - 0xf24e, 0xf24f, 0xf250, 0xf251, 0xf252, 0xf253, 0xf254, 0xf255, - 0xf256, 0xf257, 0xf258, 0xf259, 0xf25a, 0xf25b, 0xf25c, 0xf25d, - 0xf25e, 0xf25f, 0xf260, 0xf261, 0xf262, 0xf263, 0xf264, 0xf265, - 0xf266, 0xf267, 0xf268, 0xf269, 0xf26a, 0xf26b, 0xf26c, 0xf26d, - 0xf26e, 0xf26f, 0xf270, 0xf271, 0xf272, 0xf273, 0xf274, 0xf275, - 0xf276, 0xf277, 0xf278, 0xf279, 0xf27a, 0xf27b, 0xf27c, 0xf27d, - 0xf27e, 0xf280, 0xf281, 0xf282, 0xf283, 0xf284, 0xf285, 0xf286, - 0xf287, 0xf288, 0xf289, 0xf28a, 0xf28b, 0xf28c, 0xf28d, 0xf28e, - 0xf28f, 0xf290, 0xf291, 0xf292, 0xf293, 0xf294, 0xf295, 0xf296, - 0xf297, 0xf298, 0xf299, 0xf29a, 0xf29b, 0xf29c, 0xf29d, 0xf29e, - 0xf29f, 0xf2a0, 0xf340, 0xf341, 0xf342, 0xf343, 0xf344, 0xf345, - 0xf346, 0xf347, 0xf348, 0xf349, 0xf34a, 0xf34b, 0xf34c, 0xf34d, - 0xf34e, 0xf34f, 0xf350, 0xf351, 0xc2ed, 0xd4a6, 0xcdd4, 0xd1b1, - 0xb3db, 0xc7fd, 0xf352, 0xb2b5, 0xc2bf, 0xe6e0, 0xcabb, 0xe6e1, - 0xe6e2, 0xbed4, 0xe6e3, 0xd7a4, 0xcdd5, 0xe6e5, 0xbcdd, 0xe6e4, - 0xe6e6, 0xe6e7, 0xc2ee, 0xf353, 0xbdbe, 0xe6e8, 0xc2e6, 0xbaa7, - 0xe6e9, 0xf354, 0xe6ea, 0xb3d2, 0xd1e9, 0xf355, 0xf356, 0xbfa5, - 0xe6eb, 0xc6ef, 0xe6ec, 0xe6ed, 0xf357, 0xf358, 0xe6ee, 0xc6ad, - 0xe6ef, 0xf359, 0xc9a7, 0xe6f0, 0xe6f1, 0xe6f2, 0xe5b9, 0xe6f3, - 0xe6f4, 0xc2e2, 0xe6f5, 0xe6f6, 0xd6e8, 0xe6f7, 0xf35a, 0xe6f8, - 0xb9c7, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360, 0xf361, - 0xf7bb, 0xf7ba, 0xf362, 0xf363, 0xf364, 0xf365, 0xf7be, 0xf7bc, - 0xbaa1, 0xf366, 0xf7bf, 0xf367, 0xf7c0, 0xf368, 0xf369, 0xf36a, - 0xf7c2, 0xf7c1, 0xf7c4, 0xf36b, 0xf36c, 0xf7c3, 0xf36d, 0xf36e, - 0xf36f, 0xf370, 0xf371, 0xf7c5, 0xf7c6, 0xf372, 0xf373, 0xf374, - 0xf375, 0xf7c7, 0xf376, 0xcbe8, 0xf377, 0xf378, 0xf379, 0xf37a, - 0xb8df, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf380, 0xf381, 0xf7d4, - 0xf382, 0xf7d5, 0xf383, 0xf384, 0xf385, 0xf386, 0xf7d6, 0xf387, - 0xf388, 0xf389, 0xf38a, 0xf7d8, 0xf38b, 0xf7da, 0xf38c, 0xf7d7, - 0xf38d, 0xf38e, 0xf38f, 0xf390, 0xf391, 0xf392, 0xf393, 0xf394, - 0xf395, 0xf7db, 0xf396, 0xf7d9, 0xf397, 0xf398, 0xf399, 0xf39a, - /* 0x9b00 .. 0x9bff */ - 0xf39b, 0xf39c, 0xf39d, 0xd7d7, 0xf39e, 0xf39f, 0xf3a0, 0xf440, - 0xf7dc, 0xf441, 0xf442, 0xf443, 0xf444, 0xf445, 0xf446, 0xf7dd, - 0xf447, 0xf448, 0xf449, 0xf7de, 0xf44a, 0xf44b, 0xf44c, 0xf44d, - 0xf44e, 0xf44f, 0xf450, 0xf451, 0xf452, 0xf453, 0xf454, 0xf7df, - 0xf455, 0xf456, 0xf457, 0xf7e0, 0xf458, 0xf459, 0xf45a, 0xf45b, - 0xf45c, 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461, 0xf462, 0xdbcb, - 0xf463, 0xf464, 0xd8aa, 0xf465, 0xf466, 0xf467, 0xf468, 0xf469, - 0xf46a, 0xf46b, 0xf46c, 0xe5f7, 0xb9ed, 0xf46d, 0xf46e, 0xf46f, - 0xf470, 0xbffd, 0xbbea, 0xf7c9, 0xc6c7, 0xf7c8, 0xf471, 0xf7ca, - 0xf7cc, 0xf7cb, 0xf472, 0xf473, 0xf474, 0xf7cd, 0xf475, 0xceba, - 0xf476, 0xf7ce, 0xf477, 0xf478, 0xc4a7, 0xf479, 0xf47a, 0xf47b, - 0xf47c, 0xf47d, 0xf47e, 0xf480, 0xf481, 0xf482, 0xf483, 0xf484, - 0xf485, 0xf486, 0xf487, 0xf488, 0xf489, 0xf48a, 0xf48b, 0xf48c, - 0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0xf492, 0xf493, 0xf494, - 0xf495, 0xf496, 0xf497, 0xf498, 0xf499, 0xf49a, 0xf49b, 0xf49c, - 0xf49d, 0xf49e, 0xf49f, 0xf4a0, 0xf540, 0xf541, 0xf542, 0xf543, - 0xf544, 0xf545, 0xf546, 0xf547, 0xf548, 0xf549, 0xf54a, 0xf54b, - 0xf54c, 0xf54d, 0xf54e, 0xf54f, 0xf550, 0xf551, 0xf552, 0xf553, - 0xf554, 0xf555, 0xf556, 0xf557, 0xf558, 0xf559, 0xf55a, 0xf55b, - 0xf55c, 0xf55d, 0xf55e, 0xf55f, 0xf560, 0xf561, 0xf562, 0xf563, - 0xf564, 0xf565, 0xf566, 0xf567, 0xf568, 0xf569, 0xf56a, 0xf56b, - 0xf56c, 0xf56d, 0xf56e, 0xf56f, 0xf570, 0xf571, 0xf572, 0xf573, - 0xf574, 0xf575, 0xf576, 0xf577, 0xf578, 0xf579, 0xf57a, 0xf57b, - 0xf57c, 0xf57d, 0xf57e, 0xf580, 0xf581, 0xf582, 0xf583, 0xf584, - 0xf585, 0xf586, 0xf587, 0xf588, 0xf589, 0xf58a, 0xf58b, 0xf58c, - 0xf58d, 0xf58e, 0xf58f, 0xf590, 0xf591, 0xf592, 0xf593, 0xf594, - 0xf595, 0xf596, 0xf597, 0xf598, 0xf599, 0xf59a, 0xf59b, 0xf59c, - 0xf59d, 0xf59e, 0xf59f, 0xf5a0, 0xf640, 0xf641, 0xf642, 0xf643, - 0xf644, 0xf645, 0xf646, 0xf647, 0xf648, 0xf649, 0xf64a, 0xf64b, - 0xf64c, 0xf64d, 0xf64e, 0xf64f, 0xf650, 0xf651, 0xf652, 0xf653, - 0xf654, 0xf655, 0xf656, 0xf657, 0xf658, 0xf659, 0xf65a, 0xf65b, - 0xf65c, 0xf65d, 0xf65e, 0xf65f, 0xf660, 0xf661, 0xf662, 0xf663, - /* 0x9c00 .. 0x9cff */ - 0xf664, 0xf665, 0xf666, 0xf667, 0xf668, 0xf669, 0xf66a, 0xf66b, - 0xf66c, 0xf66d, 0xf66e, 0xf66f, 0xf670, 0xf671, 0xf672, 0xf673, - 0xf674, 0xf675, 0xf676, 0xf677, 0xf678, 0xf679, 0xf67a, 0xf67b, - 0xf67c, 0xf67d, 0xf67e, 0xf680, 0xf681, 0xf682, 0xf683, 0xf684, - 0xf685, 0xf686, 0xf687, 0xf688, 0xf689, 0xf68a, 0xf68b, 0xf68c, - 0xf68d, 0xf68e, 0xf68f, 0xf690, 0xf691, 0xf692, 0xf693, 0xf694, - 0xf695, 0xf696, 0xf697, 0xf698, 0xf699, 0xf69a, 0xf69b, 0xf69c, - 0xf69d, 0xf69e, 0xf69f, 0xf6a0, 0xf740, 0xf741, 0xf742, 0xf743, - 0xf744, 0xf745, 0xf746, 0xf747, 0xf748, 0xf749, 0xf74a, 0xf74b, - 0xf74c, 0xf74d, 0xf74e, 0xf74f, 0xf750, 0xf751, 0xf752, 0xf753, - 0xf754, 0xf755, 0xf756, 0xf757, 0xf758, 0xf759, 0xf75a, 0xf75b, - 0xf75c, 0xf75d, 0xf75e, 0xf75f, 0xf760, 0xf761, 0xf762, 0xf763, - 0xf764, 0xf765, 0xf766, 0xf767, 0xf768, 0xf769, 0xf76a, 0xf76b, - 0xf76c, 0xf76d, 0xf76e, 0xf76f, 0xf770, 0xf771, 0xf772, 0xf773, - 0xf774, 0xf775, 0xf776, 0xf777, 0xf778, 0xf779, 0xf77a, 0xf77b, - 0xf77c, 0xf77d, 0xf77e, 0xf780, 0xd3e3, 0xf781, 0xf782, 0xf6cf, - 0xf783, 0xc2b3, 0xf6d0, 0xf784, 0xf785, 0xf6d1, 0xf6d2, 0xf6d3, - 0xf6d4, 0xf786, 0xf787, 0xf6d6, 0xf788, 0xb1ab, 0xf6d7, 0xf789, - 0xf6d8, 0xf6d9, 0xf6da, 0xf78a, 0xf6db, 0xf6dc, 0xf78b, 0xf78c, - 0xf78d, 0xf78e, 0xf6dd, 0xf6de, 0xcfca, 0xf78f, 0xf6df, 0xf6e0, - 0xf6e1, 0xf6e2, 0xf6e3, 0xf6e4, 0xc0f0, 0xf6e5, 0xf6e6, 0xf6e7, - 0xf6e8, 0xf6e9, 0xf790, 0xf6ea, 0xf791, 0xf6eb, 0xf6ec, 0xf792, - 0xf6ed, 0xf6ee, 0xf6ef, 0xf6f0, 0xf6f1, 0xf6f2, 0xf6f3, 0xf6f4, - 0xbea8, 0xf793, 0xf6f5, 0xf6f6, 0xf6f7, 0xf6f8, 0xf794, 0xf795, - 0xf796, 0xf797, 0xf798, 0xc8fa, 0xf6f9, 0xf6fa, 0xf6fb, 0xf6fc, - 0xf799, 0xf79a, 0xf6fd, 0xf6fe, 0xf7a1, 0xf7a2, 0xf7a3, 0xf7a4, - 0xf7a5, 0xf79b, 0xf79c, 0xf7a6, 0xf7a7, 0xf7a8, 0xb1ee, 0xf7a9, - 0xf7aa, 0xf7ab, 0xf79d, 0xf79e, 0xf7ac, 0xf7ad, 0xc1db, 0xf7ae, - 0xf79f, 0xf7a0, 0xf7af, 0xf840, 0xf841, 0xf842, 0xf843, 0xf844, - 0xf845, 0xf846, 0xf847, 0xf848, 0xf849, 0xf84a, 0xf84b, 0xf84c, - 0xf84d, 0xf84e, 0xf84f, 0xf850, 0xf851, 0xf852, 0xf853, 0xf854, - 0xf855, 0xf856, 0xf857, 0xf858, 0xf859, 0xf85a, 0xf85b, 0xf85c, - /* 0x9d00 .. 0x9dff */ - 0xf85d, 0xf85e, 0xf85f, 0xf860, 0xf861, 0xf862, 0xf863, 0xf864, - 0xf865, 0xf866, 0xf867, 0xf868, 0xf869, 0xf86a, 0xf86b, 0xf86c, - 0xf86d, 0xf86e, 0xf86f, 0xf870, 0xf871, 0xf872, 0xf873, 0xf874, - 0xf875, 0xf876, 0xf877, 0xf878, 0xf879, 0xf87a, 0xf87b, 0xf87c, - 0xf87d, 0xf87e, 0xf880, 0xf881, 0xf882, 0xf883, 0xf884, 0xf885, - 0xf886, 0xf887, 0xf888, 0xf889, 0xf88a, 0xf88b, 0xf88c, 0xf88d, - 0xf88e, 0xf88f, 0xf890, 0xf891, 0xf892, 0xf893, 0xf894, 0xf895, - 0xf896, 0xf897, 0xf898, 0xf899, 0xf89a, 0xf89b, 0xf89c, 0xf89d, - 0xf89e, 0xf89f, 0xf8a0, 0xf940, 0xf941, 0xf942, 0xf943, 0xf944, - 0xf945, 0xf946, 0xf947, 0xf948, 0xf949, 0xf94a, 0xf94b, 0xf94c, - 0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951, 0xf952, 0xf953, 0xf954, - 0xf955, 0xf956, 0xf957, 0xf958, 0xf959, 0xf95a, 0xf95b, 0xf95c, - 0xf95d, 0xf95e, 0xf95f, 0xf960, 0xf961, 0xf962, 0xf963, 0xf964, - 0xf965, 0xf966, 0xf967, 0xf968, 0xf969, 0xf96a, 0xf96b, 0xf96c, - 0xf96d, 0xf96e, 0xf96f, 0xf970, 0xf971, 0xf972, 0xf973, 0xf974, - 0xf975, 0xf976, 0xf977, 0xf978, 0xf979, 0xf97a, 0xf97b, 0xf97c, - 0xf97d, 0xf97e, 0xf980, 0xf981, 0xf982, 0xf983, 0xf984, 0xf985, - 0xf986, 0xf987, 0xf988, 0xf989, 0xf98a, 0xf98b, 0xf98c, 0xf98d, - 0xf98e, 0xf98f, 0xf990, 0xf991, 0xf992, 0xf993, 0xf994, 0xf995, - 0xf996, 0xf997, 0xf998, 0xf999, 0xf99a, 0xf99b, 0xf99c, 0xf99d, - 0xf99e, 0xf99f, 0xf9a0, 0xfa40, 0xfa41, 0xfa42, 0xfa43, 0xfa44, - 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, 0xfa4a, 0xfa4b, 0xfa4c, - 0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, 0xfa52, 0xfa53, 0xfa54, - 0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59, 0xfa5a, 0xfa5b, 0xfa5c, - 0xfa5d, 0xfa5e, 0xfa5f, 0xfa60, 0xfa61, 0xfa62, 0xfa63, 0xfa64, - 0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xfa69, 0xfa6a, 0xfa6b, 0xfa6c, - 0xfa6d, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71, 0xfa72, 0xfa73, 0xfa74, - 0xfa75, 0xfa76, 0xfa77, 0xfa78, 0xfa79, 0xfa7a, 0xfa7b, 0xfa7c, - 0xfa7d, 0xfa7e, 0xfa80, 0xfa81, 0xfa82, 0xfa83, 0xfa84, 0xfa85, - 0xfa86, 0xfa87, 0xfa88, 0xfa89, 0xfa8a, 0xfa8b, 0xfa8c, 0xfa8d, - 0xfa8e, 0xfa8f, 0xfa90, 0xfa91, 0xfa92, 0xfa93, 0xfa94, 0xfa95, - 0xfa96, 0xfa97, 0xfa98, 0xfa99, 0xfa9a, 0xfa9b, 0xfa9c, 0xfa9d, - /* 0x9e00 .. 0x9eff */ - 0xfa9e, 0xfa9f, 0xfaa0, 0xfb40, 0xfb41, 0xfb42, 0xfb43, 0xfb44, - 0xfb45, 0xfb46, 0xfb47, 0xfb48, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, - 0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, - 0xfb55, 0xfb56, 0xfb57, 0xfb58, 0xfb59, 0xfb5a, 0xfb5b, 0xc4f1, - 0xf0af, 0xbca6, 0xf0b0, 0xc3f9, 0xfb5c, 0xc5b8, 0xd1bb, 0xfb5d, - 0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xd1bc, 0xfb5e, 0xd1ec, - 0xfb5f, 0xf0b7, 0xf0b6, 0xd4a7, 0xfb60, 0xcdd2, 0xf0b8, 0xf0ba, - 0xf0b9, 0xf0bb, 0xf0bc, 0xfb61, 0xfb62, 0xb8eb, 0xf0bd, 0xbae8, - 0xfb63, 0xf0be, 0xf0bf, 0xbee9, 0xf0c0, 0xb6ec, 0xf0c1, 0xf0c2, - 0xf0c3, 0xf0c4, 0xc8b5, 0xf0c5, 0xf0c6, 0xfb64, 0xf0c7, 0xc5f4, - 0xfb65, 0xf0c8, 0xfb66, 0xfb67, 0xfb68, 0xf0c9, 0xfb69, 0xf0ca, - 0xf7bd, 0xfb6a, 0xf0cb, 0xf0cc, 0xf0cd, 0xfb6b, 0xf0ce, 0xfb6c, - 0xfb6d, 0xfb6e, 0xfb6f, 0xf0cf, 0xbad7, 0xfb70, 0xf0d0, 0xf0d1, - 0xf0d2, 0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d8, 0xfb71, 0xfb72, - 0xd3a5, 0xf0d7, 0xfb73, 0xf0d9, 0xfb74, 0xfb75, 0xfb76, 0xfb77, - 0xfb78, 0xfb79, 0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xf5ba, 0xc2b9, - 0xfb7e, 0xfb80, 0xf7e4, 0xfb81, 0xfb82, 0xfb83, 0xfb84, 0xf7e5, - 0xf7e6, 0xfb85, 0xfb86, 0xf7e7, 0xfb87, 0xfb88, 0xfb89, 0xfb8a, - 0xfb8b, 0xfb8c, 0xf7e8, 0xc2b4, 0xfb8d, 0xfb8e, 0xfb8f, 0xfb90, - 0xfb91, 0xfb92, 0xfb93, 0xfb94, 0xfb95, 0xf7ea, 0xfb96, 0xf7eb, - 0xfb97, 0xfb98, 0xfb99, 0xfb9a, 0xfb9b, 0xfb9c, 0xc2f3, 0xfb9d, - 0xfb9e, 0xfb9f, 0xfba0, 0xfc40, 0xfc41, 0xfc42, 0xfc43, 0xfc44, - 0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xf4f0, 0xfc49, 0xfc4a, 0xfc4b, - 0xf4ef, 0xfc4c, 0xfc4d, 0xc2e9, 0xfc4e, 0xf7e1, 0xf7e2, 0xfc4f, - 0xfc50, 0xfc51, 0xfc52, 0xfc53, 0xbbc6, 0xfc54, 0xfc55, 0xfc56, - 0xfc57, 0xd9e4, 0xfc58, 0xfc59, 0xfc5a, 0xcaf2, 0xc0e8, 0xf0a4, - 0xfc5b, 0xbada, 0xfc5c, 0xfc5d, 0xc7ad, 0xfc5e, 0xfc5f, 0xfc60, - 0xc4ac, 0xfc61, 0xfc62, 0xf7ec, 0xf7ed, 0xf7ee, 0xfc63, 0xf7f0, - 0xf7ef, 0xfc64, 0xf7f1, 0xfc65, 0xfc66, 0xf7f4, 0xfc67, 0xf7f3, - 0xfc68, 0xf7f2, 0xf7f5, 0xfc69, 0xfc6a, 0xfc6b, 0xfc6c, 0xf7f6, - 0xfc6d, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71, 0xfc72, 0xfc73, 0xfc74, - 0xfc75, 0xede9, 0xfc76, 0xedea, 0xedeb, 0xfc77, 0xf6bc, 0xfc78, - /* 0x9f00 .. 0x9fff */ - 0xfc79, 0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfc80, 0xfc81, - 0xfc82, 0xfc83, 0xfc84, 0xf6bd, 0xfc85, 0xf6be, 0xb6a6, 0xfc86, - 0xd8be, 0xfc87, 0xfc88, 0xb9c4, 0xfc89, 0xfc8a, 0xfc8b, 0xd8bb, - 0xfc8c, 0xdcb1, 0xfc8d, 0xfc8e, 0xfc8f, 0xfc90, 0xfc91, 0xfc92, - 0xcaf3, 0xfc93, 0xf7f7, 0xfc94, 0xfc95, 0xfc96, 0xfc97, 0xfc98, - 0xfc99, 0xfc9a, 0xfc9b, 0xfc9c, 0xf7f8, 0xfc9d, 0xfc9e, 0xf7f9, - 0xfc9f, 0xfca0, 0xfd40, 0xfd41, 0xfd42, 0xfd43, 0xfd44, 0xf7fb, - 0xfd45, 0xf7fa, 0xfd46, 0xb1c7, 0xfd47, 0xf7fc, 0xf7fd, 0xfd48, - 0xfd49, 0xfd4a, 0xfd4b, 0xfd4c, 0xf7fe, 0xfd4d, 0xfd4e, 0xfd4f, - 0xfd50, 0xfd51, 0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57, - 0xc6eb, 0xecb4, 0xfd58, 0xfd59, 0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, - 0xfd5e, 0xfd5f, 0xfd60, 0xfd61, 0xfd62, 0xfd63, 0xfd64, 0xfd65, - 0xfd66, 0xfd67, 0xfd68, 0xfd69, 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, - 0xfd6e, 0xfd6f, 0xfd70, 0xfd71, 0xfd72, 0xfd73, 0xfd74, 0xfd75, - 0xfd76, 0xfd77, 0xfd78, 0xfd79, 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, - 0xfd7e, 0xfd80, 0xfd81, 0xfd82, 0xfd83, 0xfd84, 0xfd85, 0xb3dd, - 0xf6b3, 0xfd86, 0xfd87, 0xf6b4, 0xc1e4, 0xf6b5, 0xf6b6, 0xf6b7, - 0xf6b8, 0xf6b9, 0xf6ba, 0xc8a3, 0xf6bb, 0xfd88, 0xfd89, 0xfd8a, - 0xfd8b, 0xfd8c, 0xfd8d, 0xfd8e, 0xfd8f, 0xfd90, 0xfd91, 0xfd92, - 0xfd93, 0xc1fa, 0xb9a8, 0xede8, 0xfd94, 0xfd95, 0xfd96, 0xb9ea, - 0xd9df, 0xfd97, 0xfd98, 0xfd99, 0xfd9a, 0xfd9b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xf900 .. 0xf9ff */ - 0xd84d, 0xb8fc, 0xdc87, 0xd95a, 0xbbac, 0xb4ae, 0xbee4, 0xfd94, - 0xfd94, 0xc6f5, 0xbdf0, 0xc0ae, 0xc4ce, 0x91d0, 0xb05d, 0xc15f, - 0xcc7d, 0xc2dd, 0xc2e3, 0xdf89, 0x98b7, 0xc2e5, 0xc0d3, 0xe7f3, - 0xc2e4, 0xc0d2, 0xf198, 0x8179, 0xc2d1, 0x99da, 0xa080, 0xcc6d, - 0xfb5b, 0x8db9, 0x9e45, 0xcb7b, 0xd268, 0xc0ad, 0xc544, 0xcf9e, - 0xc0c8, 0xc0ca, 0xc0cb, 0xc0c7, 0xfd9c, 0x81ed, 0xc0e4, 0x84da, - 0x93ef, 0x99a9, 0xa074, 0xb152, 0xc0cf, 0xcc4a, 0xcc94, 0xc2b7, - 0xc2b6, 0xf494, 0xfa98, 0xc2b5, 0xb593, 0xbe47, 0xc78a, 0xe49b, - 0xc2b9, 0xd593, 0x89c5, 0xc5aa, 0xbb5c, 0xc340, 0xc0ce, 0xc0da, - 0xd954, 0xc0d7, 0x89be, 0x8cd2, 0x98c7, 0x9c49, 0xc2a9, 0xc0db, - 0xbf7c, 0xc2aa, 0xc0d5, 0xc0df, 0x8443, 0xc1e8, 0xb6a0, 0xbe63, - 0xc1e2, 0xc1ea, 0xd778, 0x9282, 0x98b7, 0xd65a, 0xb5a4, 0x8c8e, - 0xc5ad, 0xc2ca, 0xae90, 0xb1b1, 0xb491, 0xb1e3, 0x8fcd, 0xb2bb, - 0xc3da, 0x94b5, 0xcbf7, 0x85a2, 0xc8fb, 0xcaa1, 0xc87e, 0xd566, - 0x9aa2, 0xb3bd, 0xc9f2, 0xcab0, 0xc8f4, 0xc2d3, 0xc2d4, 0xc1c1, - 0x83c9, 0xfd9d, 0xc1ba, 0xbc5a, 0xc1bc, 0xd58f, 0xc1bf, 0x84ee, - 0x85ce, 0xc5ae, 0x8f5d, 0xc2c3, 0x9e56, 0xb55a, 0xe982, 0xf350, - 0xfb90, 0xc0e8, 0xc1a6, 0x95d1, 0x9a76, 0xde5d, 0xc4ea, 0x917a, - 0x91d9, 0x93d3, 0x9d69, 0x9f92, 0xad49, 0xfd9e, 0xbe9a, 0xc293, - 0xdd82, 0xc98f, 0xdf42, 0xe580, 0xc1d0, 0xc1d3, 0xd1ca, 0xc1d2, - 0xc1d1, 0xd566, 0xc1ae, 0xc4ee, 0xc4ed, 0x9a9a, 0xba9f, 0xab43, - 0xc1ee, 0xe0f2, 0x8c8e, 0x8e58, 0xc1af, 0xc1e1, 0xac93, 0xc1e7, - 0xf1f6, 0xe28f, 0xc1e3, 0xec60, 0xee49, 0xc0fd, 0xb659, 0xf5b7, - 0xeb60, 0x90ba, 0xc1cb, 0xc1c5, 0xe5bc, 0xc4f2, 0xc1cf, 0x98b7, - 0xc1c7, 0xaf9f, 0xdea4, 0xdf7c, 0xfd88, 0x959e, 0xc8ee, 0x84a2, - 0x9683, 0xc1f8, 0xc1f7, 0xc1ef, 0xc1f0, 0xc1f4, 0xc1f2, 0xbc7e, - 0xee90, 0xc1f9, 0xc2be, 0xea91, 0x8290, 0x8d91, 0x9c53, 0xdd86, - 0xc2c9, 0x90fc, 0xc0f5, 0xc2ca, 0xc2a1, 0xc0fb, 0xc0f4, 0xc2c4, - 0xd2d7, 0xc0ee, 0xc0e6, 0xc4e0, 0xc0ed, 0xc1a1, 0xeebe, 0xfd9f, - 0xd165, 0xc0ef, 0xeb78, 0xc4e4, 0xc4e7, 0xc1df, 0x9ffb, 0xad55, - 0xcc41, 0xfda0, 0xf75b, 0xf7eb, 0xc1d6, 0xc1dc, 0xc552, 0xc1a2, - 0xf3d2, 0xc1a3, 0xa0ee, 0xd6cb, 0xd752, 0xcab2, 0xb2e8, 0xb4cc, - /* 0xfa00 .. 0xfaff */ - 0xc7d0, 0xb6c8, 0xcdd8, 0xccc7, 0xd5ac, 0xb6b4, 0xb1a9, 0xdd97, - 0xd0d0, 0xbdb5, 0xd28a, 0xc0aa, 0xfe40, 0xfe41, 0xfe42, 0xfe43, - 0x8956, 0xfe44, 0xc7e7, 0xfe45, 0xfe46, 0x8444, 0xd6ed, 0xd2e6, - 0xfe47, 0xc9f1, 0xcfe9, 0xb8a3, 0xbeb8, 0xbeab, 0xd3f0, 0xfe48, - 0xfe49, 0xfe4a, 0xd654, 0xfe4b, 0xfe4c, 0xd2dd, 0xb6bc, 0xfe4d, - 0xfe4e, 0xfe4f, 0xef88, 0xef95, 0xf05e, 0xfa51, 0x003f, 0x003f, - 0xceea, 0xc9ae, 0xc3e2, 0xc3e3, 0xc7da, 0xb1b0, 0xbac8, 0x8740, - 0xc6f7, 0x8942, 0xc4ab, 0x8cd3, 0xe5f8, 0xbbda, 0xbfae, 0xd4f7, - 0x91cd, 0xc3f4, 0xbcc8, 0xcaee, 0xc3b7, 0xbaa3, 0xe4be, 0x9d68, - 0xd6f3, 0xa08d, 0xd7c1, 0xb1ae, 0xc9e7, 0xeced, 0xc6ed, 0xb576, - 0xd7e6, 0xd7a3, 0xb59c, 0xb59d, 0xb759, 0xcdbb, 0xb99d, 0xbe9a, - 0xbf4e, 0xb7b1, 0xcaf0, 0xd5df, 0xb3f4, 0xdcb3, 0xdcb3, 0xd6f8, - 0xbad6, 0xd295, 0xd65d, 0xd694, 0xd965, 0xd99b, 0xe5c1, 0xd2dd, - 0xeb79, 0xed91, 0xee6c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x814b, 0xbff6, 0xc8ab, 0x81e9, 0xb3e4, 0xbcbd, 0xd3c2, 0xc9d7, - 0xbac8, 0xdffb, 0xe0b9, 0x86ec, 0x8956, 0x899e, 0xd1d9, 0xb1bc, - 0xe6be, 0x8be3, 0xe2da, 0x8f4d, 0xb2ca, 0xe1e6, 0xe3af, 0xc9f7, - 0xd3fa, 0xd4f7, 0x9152, 0x91cd, 0xb4f7, 0xdeed, 0xcbd1, 0xdef0, - 0xb0bd, 0xc7e7, 0xc0ca, 0xcdfb, 0xd5c8, 0xb4f5, 0x9aa2, 0xc1f7, - 0x9cf4, 0xd7cc, 0x9d68, 0x9e73, 0xd6f3, 0xc7c6, 0xbef4, 0xb7b8, - 0xd6ed, 0xac99, 0xae4e, 0xbbad, 0xaf8d, 0xcec1, 0xd2e6, 0xcaa2, - 0xd6b1, 0xb192, 0xd7c5, 0xb46b, 0xb849, 0xb99d, 0xc0e0, 0xbd64, - 0xbe9a, 0xc090, 0xd5df, 0xbbc4, 0xc841, 0xce82, 0xf1df, 0xb8b2, - 0xd295, 0xd57b, 0xd654, 0xd588, 0xd65d, 0xd65a, 0xd649, 0xd694, - 0xd783, 0xd99b, 0xdd94, 0xdf74, 0xe167, 0xe36f, 0xea95, 0xeb79, - 0xbeb8, 0xed76, 0xed91, 0xed9d, 0xee6c, 0xf449, 0xfd94, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfd4c, 0xfd89, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfb00 .. 0xfbff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x002b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfe00 .. 0xfeff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa955, 0xa6f2, 0x003f, 0xa6f4, 0xa6f5, 0xa6e0, 0xa6e1, 0xa6f0, - 0xa6f1, 0xa6e2, 0xa6e3, 0xa6ee, 0xa6ef, 0xa6e6, 0xa6e7, 0xa6e4, - 0xa6e5, 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa968, 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, - 0xa96f, 0xa970, 0xa971, 0x003f, 0xa972, 0xa973, 0xa974, 0xa975, - 0xa1aa, 0xa976, 0xa977, 0xa978, 0xa979, 0xa97a, 0xa97b, 0xa97c, - 0xa97d, 0xa97e, 0xa980, 0xa981, 0xa982, 0xa983, 0xa984, 0x003f, - 0xa985, 0xa986, 0xa987, 0xa988, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xff00 .. 0xffff */ - 0x003f, 0xa3a1, 0xa3a2, 0xa3a3, 0xa1e7, 0xa3a5, 0xa3a6, 0xa3a7, - 0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, - 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, - 0xa3b8, 0xa3b9, 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd, 0xa3be, 0xa3bf, - 0xa3c0, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, - 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf, - 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7, - 0xa3d8, 0xa3d9, 0xa3da, 0xa3db, 0xa3dc, 0xa3dd, 0xa3de, 0xa3df, - 0xa3e0, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7, - 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef, - 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7, - 0xa3f8, 0xa3f9, 0xa3fa, 0xa3fb, 0xa3fc, 0xa3fd, 0xa1ab, 0x003f, - 0x003f, 0xa1a3, 0xa1b8, 0xa1b9, 0xa1a2, 0x003f, 0xa5f2, 0xa5a1, - 0xa5a3, 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7, 0xa5c3, - 0xa960, 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad, - 0xa5af, 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd, - 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6, 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc, - 0xa5cd, 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de, - 0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9, - 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1e9, 0xa1ea, 0xa956, 0xa3fe, 0xa957, 0xa3a4, 0x003f, 0x003f, - 0xa9a6, 0xa1fb, 0xa1fc, 0xa1fa, 0xa1fd, 0xa1f6, 0xa1f0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* defaults */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x0f00, 0x1000, - 0x1100, 0x1200, 0x1300, 0x1400, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x1500, 0x1600, - 0x1700, 0x1800, 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x1d00, 0x1e00, - 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, - 0x2700, 0x2800, 0x2900, 0x2a00, 0x2b00, 0x2c00, 0x2d00, 0x2e00, - 0x2f00, 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, 0x3600, - 0x3700, 0x3800, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, 0x3e00, - 0x3f00, 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, 0x4600, - 0x4700, 0x4800, 0x4900, 0x4a00, 0x4b00, 0x4c00, 0x4d00, 0x4e00, - 0x4f00, 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, 0x5600, - 0x5700, 0x5800, 0x5900, 0x5a00, 0x5b00, 0x5c00, 0x5d00, 0x5e00, - 0x5f00, 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500, 0x6600, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, 0x6c00, - 0x6c00, 0x6700, 0x6800, 0x6900, 0x6c00, 0x6c00, 0x6a00, 0x6b00 -}; - -const struct dbcs_table cptable_936 = -{ - { 936, 2, 0x003f, 0x003f, "ANSI/OEM Simplified Chinese GBK" }, - cp2uni, - cp2uni_leadbytes, - uni2cp_low, - uni2cp_high, - { 0x81, 0xfe, 0x00, 0x00 } -}; diff --git a/reactos/tools/unicode/c_949.c b/reactos/tools/unicode/c_949.c deleted file mode 100644 index c4e9e99a544..00000000000 --- a/reactos/tools/unicode/c_949.c +++ /dev/null @@ -1,9301 +0,0 @@ -/* code page 949 (ANSI/OEM Korean Unified Hangul) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[32256] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003f, - /* unused lead bytes */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte 81 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xac02, 0xac03, 0xac05, 0xac06, 0xac0b, 0xac0c, 0xac0d, - 0xac0e, 0xac0f, 0xac18, 0xac1e, 0xac1f, 0xac21, 0xac22, 0xac23, - 0xac25, 0xac26, 0xac27, 0xac28, 0xac29, 0xac2a, 0xac2b, 0xac2e, - 0xac32, 0xac33, 0xac34, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xac35, 0xac36, 0xac37, 0xac3a, 0xac3b, 0xac3d, 0xac3e, - 0xac3f, 0xac41, 0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, - 0xac48, 0xac49, 0xac4a, 0xac4c, 0xac4e, 0xac4f, 0xac50, 0xac51, - 0xac52, 0xac53, 0xac55, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xac56, 0xac57, 0xac59, 0xac5a, 0xac5b, 0xac5d, 0xac5e, - 0xac5f, 0xac60, 0xac61, 0xac62, 0xac63, 0xac64, 0xac65, 0xac66, - 0xac67, 0xac68, 0xac69, 0xac6a, 0xac6b, 0xac6c, 0xac6d, 0xac6e, - 0xac6f, 0xac72, 0xac73, 0xac75, 0xac76, 0xac79, 0xac7b, 0xac7c, - 0xac7d, 0xac7e, 0xac7f, 0xac82, 0xac87, 0xac88, 0xac8d, 0xac8e, - 0xac8f, 0xac91, 0xac92, 0xac93, 0xac95, 0xac96, 0xac97, 0xac98, - 0xac99, 0xac9a, 0xac9b, 0xac9e, 0xaca2, 0xaca3, 0xaca4, 0xaca5, - 0xaca6, 0xaca7, 0xacab, 0xacad, 0xacae, 0xacb1, 0xacb2, 0xacb3, - 0xacb4, 0xacb5, 0xacb6, 0xacb7, 0xacba, 0xacbe, 0xacbf, 0xacc0, - 0xacc2, 0xacc3, 0xacc5, 0xacc6, 0xacc7, 0xacc9, 0xacca, 0xaccb, - 0xaccd, 0xacce, 0xaccf, 0xacd0, 0xacd1, 0xacd2, 0xacd3, 0xacd4, - 0xacd6, 0xacd8, 0xacd9, 0xacda, 0xacdb, 0xacdc, 0xacdd, 0xacde, - 0xacdf, 0xace2, 0xace3, 0xace5, 0xace6, 0xace9, 0xaceb, 0xaced, - 0xacee, 0xacf2, 0xacf4, 0xacf7, 0xacf8, 0xacf9, 0xacfa, 0xacfb, - 0xacfe, 0xacff, 0xad01, 0xad02, 0xad03, 0xad05, 0xad07, 0xad08, - 0xad09, 0xad0a, 0xad0b, 0xad0e, 0xad10, 0xad12, 0xad13, 0x003f, - /* lead byte 82 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xad14, 0xad15, 0xad16, 0xad17, 0xad19, 0xad1a, 0xad1b, - 0xad1d, 0xad1e, 0xad1f, 0xad21, 0xad22, 0xad23, 0xad24, 0xad25, - 0xad26, 0xad27, 0xad28, 0xad2a, 0xad2b, 0xad2e, 0xad2f, 0xad30, - 0xad31, 0xad32, 0xad33, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xad36, 0xad37, 0xad39, 0xad3a, 0xad3b, 0xad3d, 0xad3e, - 0xad3f, 0xad40, 0xad41, 0xad42, 0xad43, 0xad46, 0xad48, 0xad4a, - 0xad4b, 0xad4c, 0xad4d, 0xad4e, 0xad4f, 0xad51, 0xad52, 0xad53, - 0xad55, 0xad56, 0xad57, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xad59, 0xad5a, 0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f, - 0xad60, 0xad62, 0xad64, 0xad65, 0xad66, 0xad67, 0xad68, 0xad69, - 0xad6a, 0xad6b, 0xad6e, 0xad6f, 0xad71, 0xad72, 0xad77, 0xad78, - 0xad79, 0xad7a, 0xad7e, 0xad80, 0xad83, 0xad84, 0xad85, 0xad86, - 0xad87, 0xad8a, 0xad8b, 0xad8d, 0xad8e, 0xad8f, 0xad91, 0xad92, - 0xad93, 0xad94, 0xad95, 0xad96, 0xad97, 0xad98, 0xad99, 0xad9a, - 0xad9b, 0xad9e, 0xad9f, 0xada0, 0xada1, 0xada2, 0xada3, 0xada5, - 0xada6, 0xada7, 0xada8, 0xada9, 0xadaa, 0xadab, 0xadac, 0xadad, - 0xadae, 0xadaf, 0xadb0, 0xadb1, 0xadb2, 0xadb3, 0xadb4, 0xadb5, - 0xadb6, 0xadb8, 0xadb9, 0xadba, 0xadbb, 0xadbc, 0xadbd, 0xadbe, - 0xadbf, 0xadc2, 0xadc3, 0xadc5, 0xadc6, 0xadc7, 0xadc9, 0xadca, - 0xadcb, 0xadcc, 0xadcd, 0xadce, 0xadcf, 0xadd2, 0xadd4, 0xadd5, - 0xadd6, 0xadd7, 0xadd8, 0xadd9, 0xadda, 0xaddb, 0xaddd, 0xadde, - 0xaddf, 0xade1, 0xade2, 0xade3, 0xade5, 0xade6, 0xade7, 0xade8, - 0xade9, 0xadea, 0xadeb, 0xadec, 0xaded, 0xadee, 0xadef, 0xadf0, - 0xadf1, 0xadf2, 0xadf3, 0xadf4, 0xadf5, 0xadf6, 0xadf7, 0x003f, - /* lead byte 83 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xadfa, 0xadfb, 0xadfd, 0xadfe, 0xae02, 0xae03, 0xae04, - 0xae05, 0xae06, 0xae07, 0xae0a, 0xae0c, 0xae0e, 0xae0f, 0xae10, - 0xae11, 0xae12, 0xae13, 0xae15, 0xae16, 0xae17, 0xae18, 0xae19, - 0xae1a, 0xae1b, 0xae1c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xae1d, 0xae1e, 0xae1f, 0xae20, 0xae21, 0xae22, 0xae23, - 0xae24, 0xae25, 0xae26, 0xae27, 0xae28, 0xae29, 0xae2a, 0xae2b, - 0xae2c, 0xae2d, 0xae2e, 0xae2f, 0xae32, 0xae33, 0xae35, 0xae36, - 0xae39, 0xae3b, 0xae3c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xae3d, 0xae3e, 0xae3f, 0xae42, 0xae44, 0xae47, 0xae48, - 0xae49, 0xae4b, 0xae4f, 0xae51, 0xae52, 0xae53, 0xae55, 0xae57, - 0xae58, 0xae59, 0xae5a, 0xae5b, 0xae5e, 0xae62, 0xae63, 0xae64, - 0xae66, 0xae67, 0xae6a, 0xae6b, 0xae6d, 0xae6e, 0xae6f, 0xae71, - 0xae72, 0xae73, 0xae74, 0xae75, 0xae76, 0xae77, 0xae7a, 0xae7e, - 0xae7f, 0xae80, 0xae81, 0xae82, 0xae83, 0xae86, 0xae87, 0xae88, - 0xae89, 0xae8a, 0xae8b, 0xae8d, 0xae8e, 0xae8f, 0xae90, 0xae91, - 0xae92, 0xae93, 0xae94, 0xae95, 0xae96, 0xae97, 0xae98, 0xae99, - 0xae9a, 0xae9b, 0xae9c, 0xae9d, 0xae9e, 0xae9f, 0xaea0, 0xaea1, - 0xaea2, 0xaea3, 0xaea4, 0xaea5, 0xaea6, 0xaea7, 0xaea8, 0xaea9, - 0xaeaa, 0xaeab, 0xaeac, 0xaead, 0xaeae, 0xaeaf, 0xaeb0, 0xaeb1, - 0xaeb2, 0xaeb3, 0xaeb4, 0xaeb5, 0xaeb6, 0xaeb7, 0xaeb8, 0xaeb9, - 0xaeba, 0xaebb, 0xaebf, 0xaec1, 0xaec2, 0xaec3, 0xaec5, 0xaec6, - 0xaec7, 0xaec8, 0xaec9, 0xaeca, 0xaecb, 0xaece, 0xaed2, 0xaed3, - 0xaed4, 0xaed5, 0xaed6, 0xaed7, 0xaeda, 0xaedb, 0xaedd, 0xaede, - 0xaedf, 0xaee0, 0xaee1, 0xaee2, 0xaee3, 0xaee4, 0xaee5, 0x003f, - /* lead byte 84 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xaee6, 0xaee7, 0xaee9, 0xaeea, 0xaeec, 0xaeee, 0xaeef, - 0xaef0, 0xaef1, 0xaef2, 0xaef3, 0xaef5, 0xaef6, 0xaef7, 0xaef9, - 0xaefa, 0xaefb, 0xaefd, 0xaefe, 0xaeff, 0xaf00, 0xaf01, 0xaf02, - 0xaf03, 0xaf04, 0xaf05, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xaf06, 0xaf09, 0xaf0a, 0xaf0b, 0xaf0c, 0xaf0e, 0xaf0f, - 0xaf11, 0xaf12, 0xaf13, 0xaf14, 0xaf15, 0xaf16, 0xaf17, 0xaf18, - 0xaf19, 0xaf1a, 0xaf1b, 0xaf1c, 0xaf1d, 0xaf1e, 0xaf1f, 0xaf20, - 0xaf21, 0xaf22, 0xaf23, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xaf24, 0xaf25, 0xaf26, 0xaf27, 0xaf28, 0xaf29, 0xaf2a, - 0xaf2b, 0xaf2e, 0xaf2f, 0xaf31, 0xaf33, 0xaf35, 0xaf36, 0xaf37, - 0xaf38, 0xaf39, 0xaf3a, 0xaf3b, 0xaf3e, 0xaf40, 0xaf44, 0xaf45, - 0xaf46, 0xaf47, 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e, 0xaf4f, - 0xaf51, 0xaf52, 0xaf53, 0xaf54, 0xaf55, 0xaf56, 0xaf57, 0xaf58, - 0xaf59, 0xaf5a, 0xaf5b, 0xaf5e, 0xaf5f, 0xaf60, 0xaf61, 0xaf62, - 0xaf63, 0xaf66, 0xaf67, 0xaf68, 0xaf69, 0xaf6a, 0xaf6b, 0xaf6c, - 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, 0xaf71, 0xaf72, 0xaf73, 0xaf74, - 0xaf75, 0xaf76, 0xaf77, 0xaf78, 0xaf7a, 0xaf7b, 0xaf7c, 0xaf7d, - 0xaf7e, 0xaf7f, 0xaf81, 0xaf82, 0xaf83, 0xaf85, 0xaf86, 0xaf87, - 0xaf89, 0xaf8a, 0xaf8b, 0xaf8c, 0xaf8d, 0xaf8e, 0xaf8f, 0xaf92, - 0xaf93, 0xaf94, 0xaf96, 0xaf97, 0xaf98, 0xaf99, 0xaf9a, 0xaf9b, - 0xaf9d, 0xaf9e, 0xaf9f, 0xafa0, 0xafa1, 0xafa2, 0xafa3, 0xafa4, - 0xafa5, 0xafa6, 0xafa7, 0xafa8, 0xafa9, 0xafaa, 0xafab, 0xafac, - 0xafad, 0xafae, 0xafaf, 0xafb0, 0xafb1, 0xafb2, 0xafb3, 0xafb4, - 0xafb5, 0xafb6, 0xafb7, 0xafba, 0xafbb, 0xafbd, 0xafbe, 0x003f, - /* lead byte 85 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xafbf, 0xafc1, 0xafc2, 0xafc3, 0xafc4, 0xafc5, 0xafc6, - 0xafca, 0xafcc, 0xafcf, 0xafd0, 0xafd1, 0xafd2, 0xafd3, 0xafd5, - 0xafd6, 0xafd7, 0xafd8, 0xafd9, 0xafda, 0xafdb, 0xafdd, 0xafde, - 0xafdf, 0xafe0, 0xafe1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xafe2, 0xafe3, 0xafe4, 0xafe5, 0xafe6, 0xafe7, 0xafea, - 0xafeb, 0xafec, 0xafed, 0xafee, 0xafef, 0xaff2, 0xaff3, 0xaff5, - 0xaff6, 0xaff7, 0xaff9, 0xaffa, 0xaffb, 0xaffc, 0xaffd, 0xaffe, - 0xafff, 0xb002, 0xb003, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb005, 0xb006, 0xb007, 0xb008, 0xb009, 0xb00a, 0xb00b, - 0xb00d, 0xb00e, 0xb00f, 0xb011, 0xb012, 0xb013, 0xb015, 0xb016, - 0xb017, 0xb018, 0xb019, 0xb01a, 0xb01b, 0xb01e, 0xb01f, 0xb020, - 0xb021, 0xb022, 0xb023, 0xb024, 0xb025, 0xb026, 0xb027, 0xb029, - 0xb02a, 0xb02b, 0xb02c, 0xb02d, 0xb02e, 0xb02f, 0xb030, 0xb031, - 0xb032, 0xb033, 0xb034, 0xb035, 0xb036, 0xb037, 0xb038, 0xb039, - 0xb03a, 0xb03b, 0xb03c, 0xb03d, 0xb03e, 0xb03f, 0xb040, 0xb041, - 0xb042, 0xb043, 0xb046, 0xb047, 0xb049, 0xb04b, 0xb04d, 0xb04f, - 0xb050, 0xb051, 0xb052, 0xb056, 0xb058, 0xb05a, 0xb05b, 0xb05c, - 0xb05e, 0xb05f, 0xb060, 0xb061, 0xb062, 0xb063, 0xb064, 0xb065, - 0xb066, 0xb067, 0xb068, 0xb069, 0xb06a, 0xb06b, 0xb06c, 0xb06d, - 0xb06e, 0xb06f, 0xb070, 0xb071, 0xb072, 0xb073, 0xb074, 0xb075, - 0xb076, 0xb077, 0xb078, 0xb079, 0xb07a, 0xb07b, 0xb07e, 0xb07f, - 0xb081, 0xb082, 0xb083, 0xb085, 0xb086, 0xb087, 0xb088, 0xb089, - 0xb08a, 0xb08b, 0xb08e, 0xb090, 0xb092, 0xb093, 0xb094, 0xb095, - 0xb096, 0xb097, 0xb09b, 0xb09d, 0xb09e, 0xb0a3, 0xb0a4, 0x003f, - /* lead byte 86 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb0a5, 0xb0a6, 0xb0a7, 0xb0aa, 0xb0b0, 0xb0b2, 0xb0b6, - 0xb0b7, 0xb0b9, 0xb0ba, 0xb0bb, 0xb0bd, 0xb0be, 0xb0bf, 0xb0c0, - 0xb0c1, 0xb0c2, 0xb0c3, 0xb0c6, 0xb0ca, 0xb0cb, 0xb0cc, 0xb0cd, - 0xb0ce, 0xb0cf, 0xb0d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb0d3, 0xb0d5, 0xb0d6, 0xb0d7, 0xb0d9, 0xb0da, 0xb0db, - 0xb0dc, 0xb0dd, 0xb0de, 0xb0df, 0xb0e1, 0xb0e2, 0xb0e3, 0xb0e4, - 0xb0e6, 0xb0e7, 0xb0e8, 0xb0e9, 0xb0ea, 0xb0eb, 0xb0ec, 0xb0ed, - 0xb0ee, 0xb0ef, 0xb0f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb0f1, 0xb0f2, 0xb0f3, 0xb0f4, 0xb0f5, 0xb0f6, 0xb0f7, - 0xb0f8, 0xb0f9, 0xb0fa, 0xb0fb, 0xb0fc, 0xb0fd, 0xb0fe, 0xb0ff, - 0xb100, 0xb101, 0xb102, 0xb103, 0xb104, 0xb105, 0xb106, 0xb107, - 0xb10a, 0xb10d, 0xb10e, 0xb10f, 0xb111, 0xb114, 0xb115, 0xb116, - 0xb117, 0xb11a, 0xb11e, 0xb11f, 0xb120, 0xb121, 0xb122, 0xb126, - 0xb127, 0xb129, 0xb12a, 0xb12b, 0xb12d, 0xb12e, 0xb12f, 0xb130, - 0xb131, 0xb132, 0xb133, 0xb136, 0xb13a, 0xb13b, 0xb13c, 0xb13d, - 0xb13e, 0xb13f, 0xb142, 0xb143, 0xb145, 0xb146, 0xb147, 0xb149, - 0xb14a, 0xb14b, 0xb14c, 0xb14d, 0xb14e, 0xb14f, 0xb152, 0xb153, - 0xb156, 0xb157, 0xb159, 0xb15a, 0xb15b, 0xb15d, 0xb15e, 0xb15f, - 0xb161, 0xb162, 0xb163, 0xb164, 0xb165, 0xb166, 0xb167, 0xb168, - 0xb169, 0xb16a, 0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170, - 0xb171, 0xb172, 0xb173, 0xb174, 0xb175, 0xb176, 0xb177, 0xb17a, - 0xb17b, 0xb17d, 0xb17e, 0xb17f, 0xb181, 0xb183, 0xb184, 0xb185, - 0xb186, 0xb187, 0xb18a, 0xb18c, 0xb18e, 0xb18f, 0xb190, 0xb191, - 0xb195, 0xb196, 0xb197, 0xb199, 0xb19a, 0xb19b, 0xb19d, 0x003f, - /* lead byte 87 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb19e, 0xb19f, 0xb1a0, 0xb1a1, 0xb1a2, 0xb1a3, 0xb1a4, - 0xb1a5, 0xb1a6, 0xb1a7, 0xb1a9, 0xb1aa, 0xb1ab, 0xb1ac, 0xb1ad, - 0xb1ae, 0xb1af, 0xb1b0, 0xb1b1, 0xb1b2, 0xb1b3, 0xb1b4, 0xb1b5, - 0xb1b6, 0xb1b7, 0xb1b8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb1b9, 0xb1ba, 0xb1bb, 0xb1bc, 0xb1bd, 0xb1be, 0xb1bf, - 0xb1c0, 0xb1c1, 0xb1c2, 0xb1c3, 0xb1c4, 0xb1c5, 0xb1c6, 0xb1c7, - 0xb1c8, 0xb1c9, 0xb1ca, 0xb1cb, 0xb1cd, 0xb1ce, 0xb1cf, 0xb1d1, - 0xb1d2, 0xb1d3, 0xb1d5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb1d6, 0xb1d7, 0xb1d8, 0xb1d9, 0xb1da, 0xb1db, 0xb1de, - 0xb1e0, 0xb1e1, 0xb1e2, 0xb1e3, 0xb1e4, 0xb1e5, 0xb1e6, 0xb1e7, - 0xb1ea, 0xb1eb, 0xb1ed, 0xb1ee, 0xb1ef, 0xb1f1, 0xb1f2, 0xb1f3, - 0xb1f4, 0xb1f5, 0xb1f6, 0xb1f7, 0xb1f8, 0xb1fa, 0xb1fc, 0xb1fe, - 0xb1ff, 0xb200, 0xb201, 0xb202, 0xb203, 0xb206, 0xb207, 0xb209, - 0xb20a, 0xb20d, 0xb20e, 0xb20f, 0xb210, 0xb211, 0xb212, 0xb213, - 0xb216, 0xb218, 0xb21a, 0xb21b, 0xb21c, 0xb21d, 0xb21e, 0xb21f, - 0xb221, 0xb222, 0xb223, 0xb224, 0xb225, 0xb226, 0xb227, 0xb228, - 0xb229, 0xb22a, 0xb22b, 0xb22c, 0xb22d, 0xb22e, 0xb22f, 0xb230, - 0xb231, 0xb232, 0xb233, 0xb235, 0xb236, 0xb237, 0xb238, 0xb239, - 0xb23a, 0xb23b, 0xb23d, 0xb23e, 0xb23f, 0xb240, 0xb241, 0xb242, - 0xb243, 0xb244, 0xb245, 0xb246, 0xb247, 0xb248, 0xb249, 0xb24a, - 0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251, 0xb252, - 0xb253, 0xb254, 0xb255, 0xb256, 0xb257, 0xb259, 0xb25a, 0xb25b, - 0xb25d, 0xb25e, 0xb25f, 0xb261, 0xb262, 0xb263, 0xb264, 0xb265, - 0xb266, 0xb267, 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xb26e, 0x003f, - /* lead byte 88 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb26f, 0xb270, 0xb271, 0xb272, 0xb273, 0xb276, 0xb277, - 0xb278, 0xb279, 0xb27a, 0xb27b, 0xb27d, 0xb27e, 0xb27f, 0xb280, - 0xb281, 0xb282, 0xb283, 0xb286, 0xb287, 0xb288, 0xb28a, 0xb28b, - 0xb28c, 0xb28d, 0xb28e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb28f, 0xb292, 0xb293, 0xb295, 0xb296, 0xb297, 0xb29b, - 0xb29c, 0xb29d, 0xb29e, 0xb29f, 0xb2a2, 0xb2a4, 0xb2a7, 0xb2a8, - 0xb2a9, 0xb2ab, 0xb2ad, 0xb2ae, 0xb2af, 0xb2b1, 0xb2b2, 0xb2b3, - 0xb2b5, 0xb2b6, 0xb2b7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb2b8, 0xb2b9, 0xb2ba, 0xb2bb, 0xb2bc, 0xb2bd, 0xb2be, - 0xb2bf, 0xb2c0, 0xb2c1, 0xb2c2, 0xb2c3, 0xb2c4, 0xb2c5, 0xb2c6, - 0xb2c7, 0xb2ca, 0xb2cb, 0xb2cd, 0xb2ce, 0xb2cf, 0xb2d1, 0xb2d3, - 0xb2d4, 0xb2d5, 0xb2d6, 0xb2d7, 0xb2da, 0xb2dc, 0xb2de, 0xb2df, - 0xb2e0, 0xb2e1, 0xb2e3, 0xb2e7, 0xb2e9, 0xb2ea, 0xb2f0, 0xb2f1, - 0xb2f2, 0xb2f6, 0xb2fc, 0xb2fd, 0xb2fe, 0xb302, 0xb303, 0xb305, - 0xb306, 0xb307, 0xb309, 0xb30a, 0xb30b, 0xb30c, 0xb30d, 0xb30e, - 0xb30f, 0xb312, 0xb316, 0xb317, 0xb318, 0xb319, 0xb31a, 0xb31b, - 0xb31d, 0xb31e, 0xb31f, 0xb320, 0xb321, 0xb322, 0xb323, 0xb324, - 0xb325, 0xb326, 0xb327, 0xb328, 0xb329, 0xb32a, 0xb32b, 0xb32c, - 0xb32d, 0xb32e, 0xb32f, 0xb330, 0xb331, 0xb332, 0xb333, 0xb334, - 0xb335, 0xb336, 0xb337, 0xb338, 0xb339, 0xb33a, 0xb33b, 0xb33c, - 0xb33d, 0xb33e, 0xb33f, 0xb340, 0xb341, 0xb342, 0xb343, 0xb344, - 0xb345, 0xb346, 0xb347, 0xb348, 0xb349, 0xb34a, 0xb34b, 0xb34c, - 0xb34d, 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb352, 0xb353, 0xb357, - 0xb359, 0xb35a, 0xb35d, 0xb360, 0xb361, 0xb362, 0xb363, 0x003f, - /* lead byte 89 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb366, 0xb368, 0xb36a, 0xb36c, 0xb36d, 0xb36f, 0xb372, - 0xb373, 0xb375, 0xb376, 0xb377, 0xb379, 0xb37a, 0xb37b, 0xb37c, - 0xb37d, 0xb37e, 0xb37f, 0xb382, 0xb386, 0xb387, 0xb388, 0xb389, - 0xb38a, 0xb38b, 0xb38d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb38e, 0xb38f, 0xb391, 0xb392, 0xb393, 0xb395, 0xb396, - 0xb397, 0xb398, 0xb399, 0xb39a, 0xb39b, 0xb39c, 0xb39d, 0xb39e, - 0xb39f, 0xb3a2, 0xb3a3, 0xb3a4, 0xb3a5, 0xb3a6, 0xb3a7, 0xb3a9, - 0xb3aa, 0xb3ab, 0xb3ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3ae, 0xb3af, 0xb3b0, 0xb3b1, 0xb3b2, 0xb3b3, 0xb3b4, - 0xb3b5, 0xb3b6, 0xb3b7, 0xb3b8, 0xb3b9, 0xb3ba, 0xb3bb, 0xb3bc, - 0xb3bd, 0xb3be, 0xb3bf, 0xb3c0, 0xb3c1, 0xb3c2, 0xb3c3, 0xb3c6, - 0xb3c7, 0xb3c9, 0xb3ca, 0xb3cd, 0xb3cf, 0xb3d1, 0xb3d2, 0xb3d3, - 0xb3d6, 0xb3d8, 0xb3da, 0xb3dc, 0xb3de, 0xb3df, 0xb3e1, 0xb3e2, - 0xb3e3, 0xb3e5, 0xb3e6, 0xb3e7, 0xb3e9, 0xb3ea, 0xb3eb, 0xb3ec, - 0xb3ed, 0xb3ee, 0xb3ef, 0xb3f0, 0xb3f1, 0xb3f2, 0xb3f3, 0xb3f4, - 0xb3f5, 0xb3f6, 0xb3f7, 0xb3f8, 0xb3f9, 0xb3fa, 0xb3fb, 0xb3fd, - 0xb3fe, 0xb3ff, 0xb400, 0xb401, 0xb402, 0xb403, 0xb404, 0xb405, - 0xb406, 0xb407, 0xb408, 0xb409, 0xb40a, 0xb40b, 0xb40c, 0xb40d, - 0xb40e, 0xb40f, 0xb411, 0xb412, 0xb413, 0xb414, 0xb415, 0xb416, - 0xb417, 0xb419, 0xb41a, 0xb41b, 0xb41d, 0xb41e, 0xb41f, 0xb421, - 0xb422, 0xb423, 0xb424, 0xb425, 0xb426, 0xb427, 0xb42a, 0xb42c, - 0xb42d, 0xb42e, 0xb42f, 0xb430, 0xb431, 0xb432, 0xb433, 0xb435, - 0xb436, 0xb437, 0xb438, 0xb439, 0xb43a, 0xb43b, 0xb43c, 0xb43d, - 0xb43e, 0xb43f, 0xb440, 0xb441, 0xb442, 0xb443, 0xb444, 0x003f, - /* lead byte 8a */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb445, 0xb446, 0xb447, 0xb448, 0xb449, 0xb44a, 0xb44b, - 0xb44c, 0xb44d, 0xb44e, 0xb44f, 0xb452, 0xb453, 0xb455, 0xb456, - 0xb457, 0xb459, 0xb45a, 0xb45b, 0xb45c, 0xb45d, 0xb45e, 0xb45f, - 0xb462, 0xb464, 0xb466, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb467, 0xb468, 0xb469, 0xb46a, 0xb46b, 0xb46d, 0xb46e, - 0xb46f, 0xb470, 0xb471, 0xb472, 0xb473, 0xb474, 0xb475, 0xb476, - 0xb477, 0xb478, 0xb479, 0xb47a, 0xb47b, 0xb47c, 0xb47d, 0xb47e, - 0xb47f, 0xb481, 0xb482, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb483, 0xb484, 0xb485, 0xb486, 0xb487, 0xb489, 0xb48a, - 0xb48b, 0xb48c, 0xb48d, 0xb48e, 0xb48f, 0xb490, 0xb491, 0xb492, - 0xb493, 0xb494, 0xb495, 0xb496, 0xb497, 0xb498, 0xb499, 0xb49a, - 0xb49b, 0xb49c, 0xb49e, 0xb49f, 0xb4a0, 0xb4a1, 0xb4a2, 0xb4a3, - 0xb4a5, 0xb4a6, 0xb4a7, 0xb4a9, 0xb4aa, 0xb4ab, 0xb4ad, 0xb4ae, - 0xb4af, 0xb4b0, 0xb4b1, 0xb4b2, 0xb4b3, 0xb4b4, 0xb4b6, 0xb4b8, - 0xb4ba, 0xb4bb, 0xb4bc, 0xb4bd, 0xb4be, 0xb4bf, 0xb4c1, 0xb4c2, - 0xb4c3, 0xb4c5, 0xb4c6, 0xb4c7, 0xb4c9, 0xb4ca, 0xb4cb, 0xb4cc, - 0xb4cd, 0xb4ce, 0xb4cf, 0xb4d1, 0xb4d2, 0xb4d3, 0xb4d4, 0xb4d6, - 0xb4d7, 0xb4d8, 0xb4d9, 0xb4da, 0xb4db, 0xb4de, 0xb4df, 0xb4e1, - 0xb4e2, 0xb4e5, 0xb4e7, 0xb4e8, 0xb4e9, 0xb4ea, 0xb4eb, 0xb4ee, - 0xb4f0, 0xb4f2, 0xb4f3, 0xb4f4, 0xb4f5, 0xb4f6, 0xb4f7, 0xb4f9, - 0xb4fa, 0xb4fb, 0xb4fc, 0xb4fd, 0xb4fe, 0xb4ff, 0xb500, 0xb501, - 0xb502, 0xb503, 0xb504, 0xb505, 0xb506, 0xb507, 0xb508, 0xb509, - 0xb50a, 0xb50b, 0xb50c, 0xb50d, 0xb50e, 0xb50f, 0xb510, 0xb511, - 0xb512, 0xb513, 0xb516, 0xb517, 0xb519, 0xb51a, 0xb51d, 0x003f, - /* lead byte 8b */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb51e, 0xb51f, 0xb520, 0xb521, 0xb522, 0xb523, 0xb526, - 0xb52b, 0xb52c, 0xb52d, 0xb52e, 0xb52f, 0xb532, 0xb533, 0xb535, - 0xb536, 0xb537, 0xb539, 0xb53a, 0xb53b, 0xb53c, 0xb53d, 0xb53e, - 0xb53f, 0xb542, 0xb546, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb547, 0xb548, 0xb549, 0xb54a, 0xb54e, 0xb54f, 0xb551, - 0xb552, 0xb553, 0xb555, 0xb556, 0xb557, 0xb558, 0xb559, 0xb55a, - 0xb55b, 0xb55e, 0xb562, 0xb563, 0xb564, 0xb565, 0xb566, 0xb567, - 0xb568, 0xb569, 0xb56a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xb56f, 0xb570, 0xb571, - 0xb572, 0xb573, 0xb574, 0xb575, 0xb576, 0xb577, 0xb578, 0xb579, - 0xb57a, 0xb57b, 0xb57c, 0xb57d, 0xb57e, 0xb57f, 0xb580, 0xb581, - 0xb582, 0xb583, 0xb584, 0xb585, 0xb586, 0xb587, 0xb588, 0xb589, - 0xb58a, 0xb58b, 0xb58c, 0xb58d, 0xb58e, 0xb58f, 0xb590, 0xb591, - 0xb592, 0xb593, 0xb594, 0xb595, 0xb596, 0xb597, 0xb598, 0xb599, - 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb59e, 0xb59f, 0xb5a2, 0xb5a3, - 0xb5a5, 0xb5a6, 0xb5a7, 0xb5a9, 0xb5ac, 0xb5ad, 0xb5ae, 0xb5af, - 0xb5b2, 0xb5b6, 0xb5b7, 0xb5b8, 0xb5b9, 0xb5ba, 0xb5be, 0xb5bf, - 0xb5c1, 0xb5c2, 0xb5c3, 0xb5c5, 0xb5c6, 0xb5c7, 0xb5c8, 0xb5c9, - 0xb5ca, 0xb5cb, 0xb5ce, 0xb5d2, 0xb5d3, 0xb5d4, 0xb5d5, 0xb5d6, - 0xb5d7, 0xb5d9, 0xb5da, 0xb5db, 0xb5dc, 0xb5dd, 0xb5de, 0xb5df, - 0xb5e0, 0xb5e1, 0xb5e2, 0xb5e3, 0xb5e4, 0xb5e5, 0xb5e6, 0xb5e7, - 0xb5e8, 0xb5e9, 0xb5ea, 0xb5eb, 0xb5ed, 0xb5ee, 0xb5ef, 0xb5f0, - 0xb5f1, 0xb5f2, 0xb5f3, 0xb5f4, 0xb5f5, 0xb5f6, 0xb5f7, 0xb5f8, - 0xb5f9, 0xb5fa, 0xb5fb, 0xb5fc, 0xb5fd, 0xb5fe, 0xb5ff, 0x003f, - /* lead byte 8c */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb600, 0xb601, 0xb602, 0xb603, 0xb604, 0xb605, 0xb606, - 0xb607, 0xb608, 0xb609, 0xb60a, 0xb60b, 0xb60c, 0xb60d, 0xb60e, - 0xb60f, 0xb612, 0xb613, 0xb615, 0xb616, 0xb617, 0xb619, 0xb61a, - 0xb61b, 0xb61c, 0xb61d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb61e, 0xb61f, 0xb620, 0xb621, 0xb622, 0xb623, 0xb624, - 0xb626, 0xb627, 0xb628, 0xb629, 0xb62a, 0xb62b, 0xb62d, 0xb62e, - 0xb62f, 0xb630, 0xb631, 0xb632, 0xb633, 0xb635, 0xb636, 0xb637, - 0xb638, 0xb639, 0xb63a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb63b, 0xb63c, 0xb63d, 0xb63e, 0xb63f, 0xb640, 0xb641, - 0xb642, 0xb643, 0xb644, 0xb645, 0xb646, 0xb647, 0xb649, 0xb64a, - 0xb64b, 0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651, 0xb652, - 0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659, 0xb65a, - 0xb65b, 0xb65c, 0xb65d, 0xb65e, 0xb65f, 0xb660, 0xb661, 0xb662, - 0xb663, 0xb665, 0xb666, 0xb667, 0xb669, 0xb66a, 0xb66b, 0xb66c, - 0xb66d, 0xb66e, 0xb66f, 0xb670, 0xb671, 0xb672, 0xb673, 0xb674, - 0xb675, 0xb676, 0xb677, 0xb678, 0xb679, 0xb67a, 0xb67b, 0xb67c, - 0xb67d, 0xb67e, 0xb67f, 0xb680, 0xb681, 0xb682, 0xb683, 0xb684, - 0xb685, 0xb686, 0xb687, 0xb688, 0xb689, 0xb68a, 0xb68b, 0xb68c, - 0xb68d, 0xb68e, 0xb68f, 0xb690, 0xb691, 0xb692, 0xb693, 0xb694, - 0xb695, 0xb696, 0xb697, 0xb698, 0xb699, 0xb69a, 0xb69b, 0xb69e, - 0xb69f, 0xb6a1, 0xb6a2, 0xb6a3, 0xb6a5, 0xb6a6, 0xb6a7, 0xb6a8, - 0xb6a9, 0xb6aa, 0xb6ad, 0xb6ae, 0xb6af, 0xb6b0, 0xb6b2, 0xb6b3, - 0xb6b4, 0xb6b5, 0xb6b6, 0xb6b7, 0xb6b8, 0xb6b9, 0xb6ba, 0xb6bb, - 0xb6bc, 0xb6bd, 0xb6be, 0xb6bf, 0xb6c0, 0xb6c1, 0xb6c2, 0x003f, - /* lead byte 8d */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb6c3, 0xb6c4, 0xb6c5, 0xb6c6, 0xb6c7, 0xb6c8, 0xb6c9, - 0xb6ca, 0xb6cb, 0xb6cc, 0xb6cd, 0xb6ce, 0xb6cf, 0xb6d0, 0xb6d1, - 0xb6d2, 0xb6d3, 0xb6d5, 0xb6d6, 0xb6d7, 0xb6d8, 0xb6d9, 0xb6da, - 0xb6db, 0xb6dc, 0xb6dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb6de, 0xb6df, 0xb6e0, 0xb6e1, 0xb6e2, 0xb6e3, 0xb6e4, - 0xb6e5, 0xb6e6, 0xb6e7, 0xb6e8, 0xb6e9, 0xb6ea, 0xb6eb, 0xb6ec, - 0xb6ed, 0xb6ee, 0xb6ef, 0xb6f1, 0xb6f2, 0xb6f3, 0xb6f5, 0xb6f6, - 0xb6f7, 0xb6f9, 0xb6fa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb6fb, 0xb6fc, 0xb6fd, 0xb6fe, 0xb6ff, 0xb702, 0xb703, - 0xb704, 0xb706, 0xb707, 0xb708, 0xb709, 0xb70a, 0xb70b, 0xb70c, - 0xb70d, 0xb70e, 0xb70f, 0xb710, 0xb711, 0xb712, 0xb713, 0xb714, - 0xb715, 0xb716, 0xb717, 0xb718, 0xb719, 0xb71a, 0xb71b, 0xb71c, - 0xb71d, 0xb71e, 0xb71f, 0xb720, 0xb721, 0xb722, 0xb723, 0xb724, - 0xb725, 0xb726, 0xb727, 0xb72a, 0xb72b, 0xb72d, 0xb72e, 0xb731, - 0xb732, 0xb733, 0xb734, 0xb735, 0xb736, 0xb737, 0xb73a, 0xb73c, - 0xb73d, 0xb73e, 0xb73f, 0xb740, 0xb741, 0xb742, 0xb743, 0xb745, - 0xb746, 0xb747, 0xb749, 0xb74a, 0xb74b, 0xb74d, 0xb74e, 0xb74f, - 0xb750, 0xb751, 0xb752, 0xb753, 0xb756, 0xb757, 0xb758, 0xb759, - 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xb75f, 0xb761, 0xb762, - 0xb763, 0xb765, 0xb766, 0xb767, 0xb769, 0xb76a, 0xb76b, 0xb76c, - 0xb76d, 0xb76e, 0xb76f, 0xb772, 0xb774, 0xb776, 0xb777, 0xb778, - 0xb779, 0xb77a, 0xb77b, 0xb77e, 0xb77f, 0xb781, 0xb782, 0xb783, - 0xb785, 0xb786, 0xb787, 0xb788, 0xb789, 0xb78a, 0xb78b, 0xb78e, - 0xb793, 0xb794, 0xb795, 0xb79a, 0xb79b, 0xb79d, 0xb79e, 0x003f, - /* lead byte 8e */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb79f, 0xb7a1, 0xb7a2, 0xb7a3, 0xb7a4, 0xb7a5, 0xb7a6, - 0xb7a7, 0xb7aa, 0xb7ae, 0xb7af, 0xb7b0, 0xb7b1, 0xb7b2, 0xb7b3, - 0xb7b6, 0xb7b7, 0xb7b9, 0xb7ba, 0xb7bb, 0xb7bc, 0xb7bd, 0xb7be, - 0xb7bf, 0xb7c0, 0xb7c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb7c2, 0xb7c3, 0xb7c4, 0xb7c5, 0xb7c6, 0xb7c8, 0xb7ca, - 0xb7cb, 0xb7cc, 0xb7cd, 0xb7ce, 0xb7cf, 0xb7d0, 0xb7d1, 0xb7d2, - 0xb7d3, 0xb7d4, 0xb7d5, 0xb7d6, 0xb7d7, 0xb7d8, 0xb7d9, 0xb7da, - 0xb7db, 0xb7dc, 0xb7dd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb7de, 0xb7df, 0xb7e0, 0xb7e1, 0xb7e2, 0xb7e3, 0xb7e4, - 0xb7e5, 0xb7e6, 0xb7e7, 0xb7e8, 0xb7e9, 0xb7ea, 0xb7eb, 0xb7ee, - 0xb7ef, 0xb7f1, 0xb7f2, 0xb7f3, 0xb7f5, 0xb7f6, 0xb7f7, 0xb7f8, - 0xb7f9, 0xb7fa, 0xb7fb, 0xb7fe, 0xb802, 0xb803, 0xb804, 0xb805, - 0xb806, 0xb80a, 0xb80b, 0xb80d, 0xb80e, 0xb80f, 0xb811, 0xb812, - 0xb813, 0xb814, 0xb815, 0xb816, 0xb817, 0xb81a, 0xb81c, 0xb81e, - 0xb81f, 0xb820, 0xb821, 0xb822, 0xb823, 0xb826, 0xb827, 0xb829, - 0xb82a, 0xb82b, 0xb82d, 0xb82e, 0xb82f, 0xb830, 0xb831, 0xb832, - 0xb833, 0xb836, 0xb83a, 0xb83b, 0xb83c, 0xb83d, 0xb83e, 0xb83f, - 0xb841, 0xb842, 0xb843, 0xb845, 0xb846, 0xb847, 0xb848, 0xb849, - 0xb84a, 0xb84b, 0xb84c, 0xb84d, 0xb84e, 0xb84f, 0xb850, 0xb852, - 0xb854, 0xb855, 0xb856, 0xb857, 0xb858, 0xb859, 0xb85a, 0xb85b, - 0xb85e, 0xb85f, 0xb861, 0xb862, 0xb863, 0xb865, 0xb866, 0xb867, - 0xb868, 0xb869, 0xb86a, 0xb86b, 0xb86e, 0xb870, 0xb872, 0xb873, - 0xb874, 0xb875, 0xb876, 0xb877, 0xb879, 0xb87a, 0xb87b, 0xb87d, - 0xb87e, 0xb87f, 0xb880, 0xb881, 0xb882, 0xb883, 0xb884, 0x003f, - /* lead byte 8f */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb885, 0xb886, 0xb887, 0xb888, 0xb889, 0xb88a, 0xb88b, - 0xb88c, 0xb88e, 0xb88f, 0xb890, 0xb891, 0xb892, 0xb893, 0xb894, - 0xb895, 0xb896, 0xb897, 0xb898, 0xb899, 0xb89a, 0xb89b, 0xb89c, - 0xb89d, 0xb89e, 0xb89f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb8a0, 0xb8a1, 0xb8a2, 0xb8a3, 0xb8a4, 0xb8a5, 0xb8a6, - 0xb8a7, 0xb8a9, 0xb8aa, 0xb8ab, 0xb8ac, 0xb8ad, 0xb8ae, 0xb8af, - 0xb8b1, 0xb8b2, 0xb8b3, 0xb8b5, 0xb8b6, 0xb8b7, 0xb8b9, 0xb8ba, - 0xb8bb, 0xb8bc, 0xb8bd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb8be, 0xb8bf, 0xb8c2, 0xb8c4, 0xb8c6, 0xb8c7, 0xb8c8, - 0xb8c9, 0xb8ca, 0xb8cb, 0xb8cd, 0xb8ce, 0xb8cf, 0xb8d1, 0xb8d2, - 0xb8d3, 0xb8d5, 0xb8d6, 0xb8d7, 0xb8d8, 0xb8d9, 0xb8da, 0xb8db, - 0xb8dc, 0xb8de, 0xb8e0, 0xb8e2, 0xb8e3, 0xb8e4, 0xb8e5, 0xb8e6, - 0xb8e7, 0xb8ea, 0xb8eb, 0xb8ed, 0xb8ee, 0xb8ef, 0xb8f1, 0xb8f2, - 0xb8f3, 0xb8f4, 0xb8f5, 0xb8f6, 0xb8f7, 0xb8fa, 0xb8fc, 0xb8fe, - 0xb8ff, 0xb900, 0xb901, 0xb902, 0xb903, 0xb905, 0xb906, 0xb907, - 0xb908, 0xb909, 0xb90a, 0xb90b, 0xb90c, 0xb90d, 0xb90e, 0xb90f, - 0xb910, 0xb911, 0xb912, 0xb913, 0xb914, 0xb915, 0xb916, 0xb917, - 0xb919, 0xb91a, 0xb91b, 0xb91c, 0xb91d, 0xb91e, 0xb91f, 0xb921, - 0xb922, 0xb923, 0xb924, 0xb925, 0xb926, 0xb927, 0xb928, 0xb929, - 0xb92a, 0xb92b, 0xb92c, 0xb92d, 0xb92e, 0xb92f, 0xb930, 0xb931, - 0xb932, 0xb933, 0xb934, 0xb935, 0xb936, 0xb937, 0xb938, 0xb939, - 0xb93a, 0xb93b, 0xb93e, 0xb93f, 0xb941, 0xb942, 0xb943, 0xb945, - 0xb946, 0xb947, 0xb948, 0xb949, 0xb94a, 0xb94b, 0xb94d, 0xb94e, - 0xb950, 0xb952, 0xb953, 0xb954, 0xb955, 0xb956, 0xb957, 0x003f, - /* lead byte 90 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb95a, 0xb95b, 0xb95d, 0xb95e, 0xb95f, 0xb961, 0xb962, - 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xb96a, 0xb96c, 0xb96e, - 0xb96f, 0xb970, 0xb971, 0xb972, 0xb973, 0xb976, 0xb977, 0xb979, - 0xb97a, 0xb97b, 0xb97d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb97e, 0xb97f, 0xb980, 0xb981, 0xb982, 0xb983, 0xb986, - 0xb988, 0xb98b, 0xb98c, 0xb98f, 0xb990, 0xb991, 0xb992, 0xb993, - 0xb994, 0xb995, 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a, 0xb99b, - 0xb99c, 0xb99d, 0xb99e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb99f, 0xb9a0, 0xb9a1, 0xb9a2, 0xb9a3, 0xb9a4, 0xb9a5, - 0xb9a6, 0xb9a7, 0xb9a8, 0xb9a9, 0xb9aa, 0xb9ab, 0xb9ae, 0xb9af, - 0xb9b1, 0xb9b2, 0xb9b3, 0xb9b5, 0xb9b6, 0xb9b7, 0xb9b8, 0xb9b9, - 0xb9ba, 0xb9bb, 0xb9be, 0xb9c0, 0xb9c2, 0xb9c3, 0xb9c4, 0xb9c5, - 0xb9c6, 0xb9c7, 0xb9ca, 0xb9cb, 0xb9cd, 0xb9d3, 0xb9d4, 0xb9d5, - 0xb9d6, 0xb9d7, 0xb9da, 0xb9dc, 0xb9df, 0xb9e0, 0xb9e2, 0xb9e6, - 0xb9e7, 0xb9e9, 0xb9ea, 0xb9eb, 0xb9ed, 0xb9ee, 0xb9ef, 0xb9f0, - 0xb9f1, 0xb9f2, 0xb9f3, 0xb9f6, 0xb9fb, 0xb9fc, 0xb9fd, 0xb9fe, - 0xb9ff, 0xba02, 0xba03, 0xba04, 0xba05, 0xba06, 0xba07, 0xba09, - 0xba0a, 0xba0b, 0xba0c, 0xba0d, 0xba0e, 0xba0f, 0xba10, 0xba11, - 0xba12, 0xba13, 0xba14, 0xba16, 0xba17, 0xba18, 0xba19, 0xba1a, - 0xba1b, 0xba1c, 0xba1d, 0xba1e, 0xba1f, 0xba20, 0xba21, 0xba22, - 0xba23, 0xba24, 0xba25, 0xba26, 0xba27, 0xba28, 0xba29, 0xba2a, - 0xba2b, 0xba2c, 0xba2d, 0xba2e, 0xba2f, 0xba30, 0xba31, 0xba32, - 0xba33, 0xba34, 0xba35, 0xba36, 0xba37, 0xba3a, 0xba3b, 0xba3d, - 0xba3e, 0xba3f, 0xba41, 0xba43, 0xba44, 0xba45, 0xba46, 0x003f, - /* lead byte 91 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xba47, 0xba4a, 0xba4c, 0xba4f, 0xba50, 0xba51, 0xba52, - 0xba56, 0xba57, 0xba59, 0xba5a, 0xba5b, 0xba5d, 0xba5e, 0xba5f, - 0xba60, 0xba61, 0xba62, 0xba63, 0xba66, 0xba6a, 0xba6b, 0xba6c, - 0xba6d, 0xba6e, 0xba6f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xba72, 0xba73, 0xba75, 0xba76, 0xba77, 0xba79, 0xba7a, - 0xba7b, 0xba7c, 0xba7d, 0xba7e, 0xba7f, 0xba80, 0xba81, 0xba82, - 0xba86, 0xba88, 0xba89, 0xba8a, 0xba8b, 0xba8d, 0xba8e, 0xba8f, - 0xba90, 0xba91, 0xba92, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, - 0xba9a, 0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f, 0xbaa0, 0xbaa1, - 0xbaa2, 0xbaa3, 0xbaa4, 0xbaa5, 0xbaa6, 0xbaa7, 0xbaaa, 0xbaad, - 0xbaae, 0xbaaf, 0xbab1, 0xbab3, 0xbab4, 0xbab5, 0xbab6, 0xbab7, - 0xbaba, 0xbabc, 0xbabe, 0xbabf, 0xbac0, 0xbac1, 0xbac2, 0xbac3, - 0xbac5, 0xbac6, 0xbac7, 0xbac9, 0xbaca, 0xbacb, 0xbacc, 0xbacd, - 0xbace, 0xbacf, 0xbad0, 0xbad1, 0xbad2, 0xbad3, 0xbad4, 0xbad5, - 0xbad6, 0xbad7, 0xbada, 0xbadb, 0xbadc, 0xbadd, 0xbade, 0xbadf, - 0xbae0, 0xbae1, 0xbae2, 0xbae3, 0xbae4, 0xbae5, 0xbae6, 0xbae7, - 0xbae8, 0xbae9, 0xbaea, 0xbaeb, 0xbaec, 0xbaed, 0xbaee, 0xbaef, - 0xbaf0, 0xbaf1, 0xbaf2, 0xbaf3, 0xbaf4, 0xbaf5, 0xbaf6, 0xbaf7, - 0xbaf8, 0xbaf9, 0xbafa, 0xbafb, 0xbafd, 0xbafe, 0xbaff, 0xbb01, - 0xbb02, 0xbb03, 0xbb05, 0xbb06, 0xbb07, 0xbb08, 0xbb09, 0xbb0a, - 0xbb0b, 0xbb0c, 0xbb0e, 0xbb10, 0xbb12, 0xbb13, 0xbb14, 0xbb15, - 0xbb16, 0xbb17, 0xbb19, 0xbb1a, 0xbb1b, 0xbb1d, 0xbb1e, 0xbb1f, - 0xbb21, 0xbb22, 0xbb23, 0xbb24, 0xbb25, 0xbb26, 0xbb27, 0x003f, - /* lead byte 92 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbb28, 0xbb2a, 0xbb2c, 0xbb2d, 0xbb2e, 0xbb2f, 0xbb30, - 0xbb31, 0xbb32, 0xbb33, 0xbb37, 0xbb39, 0xbb3a, 0xbb3f, 0xbb40, - 0xbb41, 0xbb42, 0xbb43, 0xbb46, 0xbb48, 0xbb4a, 0xbb4b, 0xbb4c, - 0xbb4e, 0xbb51, 0xbb52, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbb53, 0xbb55, 0xbb56, 0xbb57, 0xbb59, 0xbb5a, 0xbb5b, - 0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f, 0xbb60, 0xbb62, 0xbb64, 0xbb65, - 0xbb66, 0xbb67, 0xbb68, 0xbb69, 0xbb6a, 0xbb6b, 0xbb6d, 0xbb6e, - 0xbb6f, 0xbb70, 0xbb71, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbb72, 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xbb77, 0xbb78, - 0xbb79, 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, 0xbb7f, 0xbb80, - 0xbb81, 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, 0xbb87, 0xbb89, - 0xbb8a, 0xbb8b, 0xbb8d, 0xbb8e, 0xbb8f, 0xbb91, 0xbb92, 0xbb93, - 0xbb94, 0xbb95, 0xbb96, 0xbb97, 0xbb98, 0xbb99, 0xbb9a, 0xbb9b, - 0xbb9c, 0xbb9d, 0xbb9e, 0xbb9f, 0xbba0, 0xbba1, 0xbba2, 0xbba3, - 0xbba5, 0xbba6, 0xbba7, 0xbba9, 0xbbaa, 0xbbab, 0xbbad, 0xbbae, - 0xbbaf, 0xbbb0, 0xbbb1, 0xbbb2, 0xbbb3, 0xbbb5, 0xbbb6, 0xbbb8, - 0xbbb9, 0xbbba, 0xbbbb, 0xbbbc, 0xbbbd, 0xbbbe, 0xbbbf, 0xbbc1, - 0xbbc2, 0xbbc3, 0xbbc5, 0xbbc6, 0xbbc7, 0xbbc9, 0xbbca, 0xbbcb, - 0xbbcc, 0xbbcd, 0xbbce, 0xbbcf, 0xbbd1, 0xbbd2, 0xbbd4, 0xbbd5, - 0xbbd6, 0xbbd7, 0xbbd8, 0xbbd9, 0xbbda, 0xbbdb, 0xbbdc, 0xbbdd, - 0xbbde, 0xbbdf, 0xbbe0, 0xbbe1, 0xbbe2, 0xbbe3, 0xbbe4, 0xbbe5, - 0xbbe6, 0xbbe7, 0xbbe8, 0xbbe9, 0xbbea, 0xbbeb, 0xbbec, 0xbbed, - 0xbbee, 0xbbef, 0xbbf0, 0xbbf1, 0xbbf2, 0xbbf3, 0xbbf4, 0xbbf5, - 0xbbf6, 0xbbf7, 0xbbfa, 0xbbfb, 0xbbfd, 0xbbfe, 0xbc01, 0x003f, - /* lead byte 93 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbc03, 0xbc04, 0xbc05, 0xbc06, 0xbc07, 0xbc0a, 0xbc0e, - 0xbc10, 0xbc12, 0xbc13, 0xbc19, 0xbc1a, 0xbc20, 0xbc21, 0xbc22, - 0xbc23, 0xbc26, 0xbc28, 0xbc2a, 0xbc2b, 0xbc2c, 0xbc2e, 0xbc2f, - 0xbc32, 0xbc33, 0xbc35, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbc36, 0xbc37, 0xbc39, 0xbc3a, 0xbc3b, 0xbc3c, 0xbc3d, - 0xbc3e, 0xbc3f, 0xbc42, 0xbc46, 0xbc47, 0xbc48, 0xbc4a, 0xbc4b, - 0xbc4e, 0xbc4f, 0xbc51, 0xbc52, 0xbc53, 0xbc54, 0xbc55, 0xbc56, - 0xbc57, 0xbc58, 0xbc59, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbc5a, 0xbc5b, 0xbc5c, 0xbc5e, 0xbc5f, 0xbc60, 0xbc61, - 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0xbc68, 0xbc69, - 0xbc6a, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, 0xbc6f, 0xbc70, 0xbc71, - 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, 0xbc77, 0xbc78, 0xbc79, - 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, 0xbc7e, 0xbc7f, 0xbc80, 0xbc81, - 0xbc82, 0xbc83, 0xbc86, 0xbc87, 0xbc89, 0xbc8a, 0xbc8d, 0xbc8f, - 0xbc90, 0xbc91, 0xbc92, 0xbc93, 0xbc96, 0xbc98, 0xbc9b, 0xbc9c, - 0xbc9d, 0xbc9e, 0xbc9f, 0xbca2, 0xbca3, 0xbca5, 0xbca6, 0xbca9, - 0xbcaa, 0xbcab, 0xbcac, 0xbcad, 0xbcae, 0xbcaf, 0xbcb2, 0xbcb6, - 0xbcb7, 0xbcb8, 0xbcb9, 0xbcba, 0xbcbb, 0xbcbe, 0xbcbf, 0xbcc1, - 0xbcc2, 0xbcc3, 0xbcc5, 0xbcc6, 0xbcc7, 0xbcc8, 0xbcc9, 0xbcca, - 0xbccb, 0xbccc, 0xbcce, 0xbcd2, 0xbcd3, 0xbcd4, 0xbcd6, 0xbcd7, - 0xbcd9, 0xbcda, 0xbcdb, 0xbcdd, 0xbcde, 0xbcdf, 0xbce0, 0xbce1, - 0xbce2, 0xbce3, 0xbce4, 0xbce5, 0xbce6, 0xbce7, 0xbce8, 0xbce9, - 0xbcea, 0xbceb, 0xbcec, 0xbced, 0xbcee, 0xbcef, 0xbcf0, 0xbcf1, - 0xbcf2, 0xbcf3, 0xbcf7, 0xbcf9, 0xbcfa, 0xbcfb, 0xbcfd, 0x003f, - /* lead byte 94 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbcfe, 0xbcff, 0xbd00, 0xbd01, 0xbd02, 0xbd03, 0xbd06, - 0xbd08, 0xbd0a, 0xbd0b, 0xbd0c, 0xbd0d, 0xbd0e, 0xbd0f, 0xbd11, - 0xbd12, 0xbd13, 0xbd15, 0xbd16, 0xbd17, 0xbd18, 0xbd19, 0xbd1a, - 0xbd1b, 0xbd1c, 0xbd1d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbd1e, 0xbd1f, 0xbd20, 0xbd21, 0xbd22, 0xbd23, 0xbd25, - 0xbd26, 0xbd27, 0xbd28, 0xbd29, 0xbd2a, 0xbd2b, 0xbd2d, 0xbd2e, - 0xbd2f, 0xbd30, 0xbd31, 0xbd32, 0xbd33, 0xbd34, 0xbd35, 0xbd36, - 0xbd37, 0xbd38, 0xbd39, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbd3a, 0xbd3b, 0xbd3c, 0xbd3d, 0xbd3e, 0xbd3f, 0xbd41, - 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd4a, 0xbd4b, - 0xbd4d, 0xbd4e, 0xbd4f, 0xbd51, 0xbd52, 0xbd53, 0xbd54, 0xbd55, - 0xbd56, 0xbd57, 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f, - 0xbd60, 0xbd61, 0xbd62, 0xbd63, 0xbd65, 0xbd66, 0xbd67, 0xbd69, - 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71, - 0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xbd77, 0xbd78, 0xbd79, - 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xbd7f, 0xbd82, 0xbd83, - 0xbd85, 0xbd86, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, 0xbd92, - 0xbd94, 0xbd96, 0xbd97, 0xbd98, 0xbd9b, 0xbd9d, 0xbd9e, 0xbd9f, - 0xbda0, 0xbda1, 0xbda2, 0xbda3, 0xbda5, 0xbda6, 0xbda7, 0xbda8, - 0xbda9, 0xbdaa, 0xbdab, 0xbdac, 0xbdad, 0xbdae, 0xbdaf, 0xbdb1, - 0xbdb2, 0xbdb3, 0xbdb4, 0xbdb5, 0xbdb6, 0xbdb7, 0xbdb9, 0xbdba, - 0xbdbb, 0xbdbc, 0xbdbd, 0xbdbe, 0xbdbf, 0xbdc0, 0xbdc1, 0xbdc2, - 0xbdc3, 0xbdc4, 0xbdc5, 0xbdc6, 0xbdc7, 0xbdc8, 0xbdc9, 0xbdca, - 0xbdcb, 0xbdcc, 0xbdcd, 0xbdce, 0xbdcf, 0xbdd0, 0xbdd1, 0x003f, - /* lead byte 95 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbdd2, 0xbdd3, 0xbdd6, 0xbdd7, 0xbdd9, 0xbdda, 0xbddb, - 0xbddd, 0xbdde, 0xbddf, 0xbde0, 0xbde1, 0xbde2, 0xbde3, 0xbde4, - 0xbde5, 0xbde6, 0xbde7, 0xbde8, 0xbdea, 0xbdeb, 0xbdec, 0xbded, - 0xbdee, 0xbdef, 0xbdf1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbdf2, 0xbdf3, 0xbdf5, 0xbdf6, 0xbdf7, 0xbdf9, 0xbdfa, - 0xbdfb, 0xbdfc, 0xbdfd, 0xbdfe, 0xbdff, 0xbe01, 0xbe02, 0xbe04, - 0xbe06, 0xbe07, 0xbe08, 0xbe09, 0xbe0a, 0xbe0b, 0xbe0e, 0xbe0f, - 0xbe11, 0xbe12, 0xbe13, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbe15, 0xbe16, 0xbe17, 0xbe18, 0xbe19, 0xbe1a, 0xbe1b, - 0xbe1e, 0xbe20, 0xbe21, 0xbe22, 0xbe23, 0xbe24, 0xbe25, 0xbe26, - 0xbe27, 0xbe28, 0xbe29, 0xbe2a, 0xbe2b, 0xbe2c, 0xbe2d, 0xbe2e, - 0xbe2f, 0xbe30, 0xbe31, 0xbe32, 0xbe33, 0xbe34, 0xbe35, 0xbe36, - 0xbe37, 0xbe38, 0xbe39, 0xbe3a, 0xbe3b, 0xbe3c, 0xbe3d, 0xbe3e, - 0xbe3f, 0xbe40, 0xbe41, 0xbe42, 0xbe43, 0xbe46, 0xbe47, 0xbe49, - 0xbe4a, 0xbe4b, 0xbe4d, 0xbe4f, 0xbe50, 0xbe51, 0xbe52, 0xbe53, - 0xbe56, 0xbe58, 0xbe5c, 0xbe5d, 0xbe5e, 0xbe5f, 0xbe62, 0xbe63, - 0xbe65, 0xbe66, 0xbe67, 0xbe69, 0xbe6b, 0xbe6c, 0xbe6d, 0xbe6e, - 0xbe6f, 0xbe72, 0xbe76, 0xbe77, 0xbe78, 0xbe79, 0xbe7a, 0xbe7e, - 0xbe7f, 0xbe81, 0xbe82, 0xbe83, 0xbe85, 0xbe86, 0xbe87, 0xbe88, - 0xbe89, 0xbe8a, 0xbe8b, 0xbe8e, 0xbe92, 0xbe93, 0xbe94, 0xbe95, - 0xbe96, 0xbe97, 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e, 0xbe9f, - 0xbea0, 0xbea1, 0xbea2, 0xbea3, 0xbea4, 0xbea5, 0xbea6, 0xbea7, - 0xbea9, 0xbeaa, 0xbeab, 0xbeac, 0xbead, 0xbeae, 0xbeaf, 0xbeb0, - 0xbeb1, 0xbeb2, 0xbeb3, 0xbeb4, 0xbeb5, 0xbeb6, 0xbeb7, 0x003f, - /* lead byte 96 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbeb8, 0xbeb9, 0xbeba, 0xbebb, 0xbebc, 0xbebd, 0xbebe, - 0xbebf, 0xbec0, 0xbec1, 0xbec2, 0xbec3, 0xbec4, 0xbec5, 0xbec6, - 0xbec7, 0xbec8, 0xbec9, 0xbeca, 0xbecb, 0xbecc, 0xbecd, 0xbece, - 0xbecf, 0xbed2, 0xbed3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbed5, 0xbed6, 0xbed9, 0xbeda, 0xbedb, 0xbedc, 0xbedd, - 0xbede, 0xbedf, 0xbee1, 0xbee2, 0xbee6, 0xbee7, 0xbee8, 0xbee9, - 0xbeea, 0xbeeb, 0xbeed, 0xbeee, 0xbeef, 0xbef0, 0xbef1, 0xbef2, - 0xbef3, 0xbef4, 0xbef5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbef6, 0xbef7, 0xbef8, 0xbef9, 0xbefa, 0xbefb, 0xbefc, - 0xbefd, 0xbefe, 0xbeff, 0xbf00, 0xbf02, 0xbf03, 0xbf04, 0xbf05, - 0xbf06, 0xbf07, 0xbf0a, 0xbf0b, 0xbf0c, 0xbf0d, 0xbf0e, 0xbf0f, - 0xbf10, 0xbf11, 0xbf12, 0xbf13, 0xbf14, 0xbf15, 0xbf16, 0xbf17, - 0xbf1a, 0xbf1e, 0xbf1f, 0xbf20, 0xbf21, 0xbf22, 0xbf23, 0xbf24, - 0xbf25, 0xbf26, 0xbf27, 0xbf28, 0xbf29, 0xbf2a, 0xbf2b, 0xbf2c, - 0xbf2d, 0xbf2e, 0xbf2f, 0xbf30, 0xbf31, 0xbf32, 0xbf33, 0xbf34, - 0xbf35, 0xbf36, 0xbf37, 0xbf38, 0xbf39, 0xbf3a, 0xbf3b, 0xbf3c, - 0xbf3d, 0xbf3e, 0xbf3f, 0xbf42, 0xbf43, 0xbf45, 0xbf46, 0xbf47, - 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, 0xbf4d, 0xbf4e, 0xbf4f, 0xbf52, - 0xbf53, 0xbf54, 0xbf56, 0xbf57, 0xbf58, 0xbf59, 0xbf5a, 0xbf5b, - 0xbf5c, 0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, 0xbf62, 0xbf63, - 0xbf64, 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, 0xbf6a, 0xbf6b, - 0xbf6c, 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, 0xbf72, 0xbf73, - 0xbf74, 0xbf75, 0xbf76, 0xbf77, 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, - 0xbf7c, 0xbf7d, 0xbf7e, 0xbf7f, 0xbf80, 0xbf81, 0xbf82, 0x003f, - /* lead byte 97 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbf83, 0xbf84, 0xbf85, 0xbf86, 0xbf87, 0xbf88, 0xbf89, - 0xbf8a, 0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, - 0xbf92, 0xbf93, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a, - 0xbf9b, 0xbf9c, 0xbf9d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbf9e, 0xbf9f, 0xbfa0, 0xbfa1, 0xbfa2, 0xbfa3, 0xbfa4, - 0xbfa5, 0xbfa6, 0xbfa7, 0xbfa8, 0xbfa9, 0xbfaa, 0xbfab, 0xbfac, - 0xbfad, 0xbfae, 0xbfaf, 0xbfb1, 0xbfb2, 0xbfb3, 0xbfb4, 0xbfb5, - 0xbfb6, 0xbfb7, 0xbfb8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xbfb9, 0xbfba, 0xbfbb, 0xbfbc, 0xbfbd, 0xbfbe, 0xbfbf, - 0xbfc0, 0xbfc1, 0xbfc2, 0xbfc3, 0xbfc4, 0xbfc6, 0xbfc7, 0xbfc8, - 0xbfc9, 0xbfca, 0xbfcb, 0xbfce, 0xbfcf, 0xbfd1, 0xbfd2, 0xbfd3, - 0xbfd5, 0xbfd6, 0xbfd7, 0xbfd8, 0xbfd9, 0xbfda, 0xbfdb, 0xbfdd, - 0xbfde, 0xbfe0, 0xbfe2, 0xbfe3, 0xbfe4, 0xbfe5, 0xbfe6, 0xbfe7, - 0xbfe8, 0xbfe9, 0xbfea, 0xbfeb, 0xbfec, 0xbfed, 0xbfee, 0xbfef, - 0xbff0, 0xbff1, 0xbff2, 0xbff3, 0xbff4, 0xbff5, 0xbff6, 0xbff7, - 0xbff8, 0xbff9, 0xbffa, 0xbffb, 0xbffc, 0xbffd, 0xbffe, 0xbfff, - 0xc000, 0xc001, 0xc002, 0xc003, 0xc004, 0xc005, 0xc006, 0xc007, - 0xc008, 0xc009, 0xc00a, 0xc00b, 0xc00c, 0xc00d, 0xc00e, 0xc00f, - 0xc010, 0xc011, 0xc012, 0xc013, 0xc014, 0xc015, 0xc016, 0xc017, - 0xc018, 0xc019, 0xc01a, 0xc01b, 0xc01c, 0xc01d, 0xc01e, 0xc01f, - 0xc020, 0xc021, 0xc022, 0xc023, 0xc024, 0xc025, 0xc026, 0xc027, - 0xc028, 0xc029, 0xc02a, 0xc02b, 0xc02c, 0xc02d, 0xc02e, 0xc02f, - 0xc030, 0xc031, 0xc032, 0xc033, 0xc034, 0xc035, 0xc036, 0xc037, - 0xc038, 0xc039, 0xc03a, 0xc03b, 0xc03d, 0xc03e, 0xc03f, 0x003f, - /* lead byte 98 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc040, 0xc041, 0xc042, 0xc043, 0xc044, 0xc045, 0xc046, - 0xc047, 0xc048, 0xc049, 0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, - 0xc04f, 0xc050, 0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, - 0xc059, 0xc05a, 0xc05b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc05d, 0xc05e, 0xc05f, 0xc061, 0xc062, 0xc063, 0xc064, - 0xc065, 0xc066, 0xc067, 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, - 0xc06f, 0xc070, 0xc071, 0xc072, 0xc073, 0xc074, 0xc075, 0xc076, - 0xc077, 0xc078, 0xc079, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc07a, 0xc07b, 0xc07c, 0xc07d, 0xc07e, 0xc07f, 0xc080, - 0xc081, 0xc082, 0xc083, 0xc084, 0xc085, 0xc086, 0xc087, 0xc088, - 0xc089, 0xc08a, 0xc08b, 0xc08c, 0xc08d, 0xc08e, 0xc08f, 0xc092, - 0xc093, 0xc095, 0xc096, 0xc097, 0xc099, 0xc09a, 0xc09b, 0xc09c, - 0xc09d, 0xc09e, 0xc09f, 0xc0a2, 0xc0a4, 0xc0a6, 0xc0a7, 0xc0a8, - 0xc0a9, 0xc0aa, 0xc0ab, 0xc0ae, 0xc0b1, 0xc0b2, 0xc0b7, 0xc0b8, - 0xc0b9, 0xc0ba, 0xc0bb, 0xc0be, 0xc0c2, 0xc0c3, 0xc0c4, 0xc0c6, - 0xc0c7, 0xc0ca, 0xc0cb, 0xc0cd, 0xc0ce, 0xc0cf, 0xc0d1, 0xc0d2, - 0xc0d3, 0xc0d4, 0xc0d5, 0xc0d6, 0xc0d7, 0xc0da, 0xc0de, 0xc0df, - 0xc0e0, 0xc0e1, 0xc0e2, 0xc0e3, 0xc0e6, 0xc0e7, 0xc0e9, 0xc0ea, - 0xc0eb, 0xc0ed, 0xc0ee, 0xc0ef, 0xc0f0, 0xc0f1, 0xc0f2, 0xc0f3, - 0xc0f6, 0xc0f8, 0xc0fa, 0xc0fb, 0xc0fc, 0xc0fd, 0xc0fe, 0xc0ff, - 0xc101, 0xc102, 0xc103, 0xc105, 0xc106, 0xc107, 0xc109, 0xc10a, - 0xc10b, 0xc10c, 0xc10d, 0xc10e, 0xc10f, 0xc111, 0xc112, 0xc113, - 0xc114, 0xc116, 0xc117, 0xc118, 0xc119, 0xc11a, 0xc11b, 0xc121, - 0xc122, 0xc125, 0xc128, 0xc129, 0xc12a, 0xc12b, 0xc12e, 0x003f, - /* lead byte 99 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc132, 0xc133, 0xc134, 0xc135, 0xc137, 0xc13a, 0xc13b, - 0xc13d, 0xc13e, 0xc13f, 0xc141, 0xc142, 0xc143, 0xc144, 0xc145, - 0xc146, 0xc147, 0xc14a, 0xc14e, 0xc14f, 0xc150, 0xc151, 0xc152, - 0xc153, 0xc156, 0xc157, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc159, 0xc15a, 0xc15b, 0xc15d, 0xc15e, 0xc15f, 0xc160, - 0xc161, 0xc162, 0xc163, 0xc166, 0xc16a, 0xc16b, 0xc16c, 0xc16d, - 0xc16e, 0xc16f, 0xc171, 0xc172, 0xc173, 0xc175, 0xc176, 0xc177, - 0xc179, 0xc17a, 0xc17b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc17c, 0xc17d, 0xc17e, 0xc17f, 0xc180, 0xc181, 0xc182, - 0xc183, 0xc184, 0xc186, 0xc187, 0xc188, 0xc189, 0xc18a, 0xc18b, - 0xc18f, 0xc191, 0xc192, 0xc193, 0xc195, 0xc197, 0xc198, 0xc199, - 0xc19a, 0xc19b, 0xc19e, 0xc1a0, 0xc1a2, 0xc1a3, 0xc1a4, 0xc1a6, - 0xc1a7, 0xc1aa, 0xc1ab, 0xc1ad, 0xc1ae, 0xc1af, 0xc1b1, 0xc1b2, - 0xc1b3, 0xc1b4, 0xc1b5, 0xc1b6, 0xc1b7, 0xc1b8, 0xc1b9, 0xc1ba, - 0xc1bb, 0xc1bc, 0xc1be, 0xc1bf, 0xc1c0, 0xc1c1, 0xc1c2, 0xc1c3, - 0xc1c5, 0xc1c6, 0xc1c7, 0xc1c9, 0xc1ca, 0xc1cb, 0xc1cd, 0xc1ce, - 0xc1cf, 0xc1d0, 0xc1d1, 0xc1d2, 0xc1d3, 0xc1d5, 0xc1d6, 0xc1d9, - 0xc1da, 0xc1db, 0xc1dc, 0xc1dd, 0xc1de, 0xc1df, 0xc1e1, 0xc1e2, - 0xc1e3, 0xc1e5, 0xc1e6, 0xc1e7, 0xc1e9, 0xc1ea, 0xc1eb, 0xc1ec, - 0xc1ed, 0xc1ee, 0xc1ef, 0xc1f2, 0xc1f4, 0xc1f5, 0xc1f6, 0xc1f7, - 0xc1f8, 0xc1f9, 0xc1fa, 0xc1fb, 0xc1fe, 0xc1ff, 0xc201, 0xc202, - 0xc203, 0xc205, 0xc206, 0xc207, 0xc208, 0xc209, 0xc20a, 0xc20b, - 0xc20e, 0xc210, 0xc212, 0xc213, 0xc214, 0xc215, 0xc216, 0xc217, - 0xc21a, 0xc21b, 0xc21d, 0xc21e, 0xc221, 0xc222, 0xc223, 0x003f, - /* lead byte 9a */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc224, 0xc225, 0xc226, 0xc227, 0xc22a, 0xc22c, 0xc22e, - 0xc230, 0xc233, 0xc235, 0xc236, 0xc237, 0xc238, 0xc239, 0xc23a, - 0xc23b, 0xc23c, 0xc23d, 0xc23e, 0xc23f, 0xc240, 0xc241, 0xc242, - 0xc243, 0xc244, 0xc245, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc246, 0xc247, 0xc249, 0xc24a, 0xc24b, 0xc24c, 0xc24d, - 0xc24e, 0xc24f, 0xc252, 0xc253, 0xc255, 0xc256, 0xc257, 0xc259, - 0xc25a, 0xc25b, 0xc25c, 0xc25d, 0xc25e, 0xc25f, 0xc261, 0xc262, - 0xc263, 0xc264, 0xc266, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc267, 0xc268, 0xc269, 0xc26a, 0xc26b, 0xc26e, 0xc26f, - 0xc271, 0xc272, 0xc273, 0xc275, 0xc276, 0xc277, 0xc278, 0xc279, - 0xc27a, 0xc27b, 0xc27e, 0xc280, 0xc282, 0xc283, 0xc284, 0xc285, - 0xc286, 0xc287, 0xc28a, 0xc28b, 0xc28c, 0xc28d, 0xc28e, 0xc28f, - 0xc291, 0xc292, 0xc293, 0xc294, 0xc295, 0xc296, 0xc297, 0xc299, - 0xc29a, 0xc29c, 0xc29e, 0xc29f, 0xc2a0, 0xc2a1, 0xc2a2, 0xc2a3, - 0xc2a6, 0xc2a7, 0xc2a9, 0xc2aa, 0xc2ab, 0xc2ae, 0xc2af, 0xc2b0, - 0xc2b1, 0xc2b2, 0xc2b3, 0xc2b6, 0xc2b8, 0xc2ba, 0xc2bb, 0xc2bc, - 0xc2bd, 0xc2be, 0xc2bf, 0xc2c0, 0xc2c1, 0xc2c2, 0xc2c3, 0xc2c4, - 0xc2c5, 0xc2c6, 0xc2c7, 0xc2c8, 0xc2c9, 0xc2ca, 0xc2cb, 0xc2cc, - 0xc2cd, 0xc2ce, 0xc2cf, 0xc2d0, 0xc2d1, 0xc2d2, 0xc2d3, 0xc2d4, - 0xc2d5, 0xc2d6, 0xc2d7, 0xc2d8, 0xc2d9, 0xc2da, 0xc2db, 0xc2de, - 0xc2df, 0xc2e1, 0xc2e2, 0xc2e5, 0xc2e6, 0xc2e7, 0xc2e8, 0xc2e9, - 0xc2ea, 0xc2ee, 0xc2f0, 0xc2f2, 0xc2f3, 0xc2f4, 0xc2f5, 0xc2f7, - 0xc2fa, 0xc2fd, 0xc2fe, 0xc2ff, 0xc301, 0xc302, 0xc303, 0xc304, - 0xc305, 0xc306, 0xc307, 0xc30a, 0xc30b, 0xc30e, 0xc30f, 0x003f, - /* lead byte 9b */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc310, 0xc311, 0xc312, 0xc316, 0xc317, 0xc319, 0xc31a, - 0xc31b, 0xc31d, 0xc31e, 0xc31f, 0xc320, 0xc321, 0xc322, 0xc323, - 0xc326, 0xc327, 0xc32a, 0xc32b, 0xc32c, 0xc32d, 0xc32e, 0xc32f, - 0xc330, 0xc331, 0xc332, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc333, 0xc334, 0xc335, 0xc336, 0xc337, 0xc338, 0xc339, - 0xc33a, 0xc33b, 0xc33c, 0xc33d, 0xc33e, 0xc33f, 0xc340, 0xc341, - 0xc342, 0xc343, 0xc344, 0xc346, 0xc347, 0xc348, 0xc349, 0xc34a, - 0xc34b, 0xc34c, 0xc34d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc34e, 0xc34f, 0xc350, 0xc351, 0xc352, 0xc353, 0xc354, - 0xc355, 0xc356, 0xc357, 0xc358, 0xc359, 0xc35a, 0xc35b, 0xc35c, - 0xc35d, 0xc35e, 0xc35f, 0xc360, 0xc361, 0xc362, 0xc363, 0xc364, - 0xc365, 0xc366, 0xc367, 0xc36a, 0xc36b, 0xc36d, 0xc36e, 0xc36f, - 0xc371, 0xc373, 0xc374, 0xc375, 0xc376, 0xc377, 0xc37a, 0xc37b, - 0xc37e, 0xc37f, 0xc380, 0xc381, 0xc382, 0xc383, 0xc385, 0xc386, - 0xc387, 0xc389, 0xc38a, 0xc38b, 0xc38d, 0xc38e, 0xc38f, 0xc390, - 0xc391, 0xc392, 0xc393, 0xc394, 0xc395, 0xc396, 0xc397, 0xc398, - 0xc399, 0xc39a, 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0xc3a0, - 0xc3a1, 0xc3a2, 0xc3a3, 0xc3a4, 0xc3a5, 0xc3a6, 0xc3a7, 0xc3a8, - 0xc3a9, 0xc3aa, 0xc3ab, 0xc3ac, 0xc3ad, 0xc3ae, 0xc3af, 0xc3b0, - 0xc3b1, 0xc3b2, 0xc3b3, 0xc3b4, 0xc3b5, 0xc3b6, 0xc3b7, 0xc3b8, - 0xc3b9, 0xc3ba, 0xc3bb, 0xc3bc, 0xc3bd, 0xc3be, 0xc3bf, 0xc3c1, - 0xc3c2, 0xc3c3, 0xc3c4, 0xc3c5, 0xc3c6, 0xc3c7, 0xc3c8, 0xc3c9, - 0xc3ca, 0xc3cb, 0xc3cc, 0xc3cd, 0xc3ce, 0xc3cf, 0xc3d0, 0xc3d1, - 0xc3d2, 0xc3d3, 0xc3d4, 0xc3d5, 0xc3d6, 0xc3d7, 0xc3da, 0x003f, - /* lead byte 9c */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc3db, 0xc3dd, 0xc3de, 0xc3e1, 0xc3e3, 0xc3e4, 0xc3e5, - 0xc3e6, 0xc3e7, 0xc3ea, 0xc3eb, 0xc3ec, 0xc3ee, 0xc3ef, 0xc3f0, - 0xc3f1, 0xc3f2, 0xc3f3, 0xc3f6, 0xc3f7, 0xc3f9, 0xc3fa, 0xc3fb, - 0xc3fc, 0xc3fd, 0xc3fe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc3ff, 0xc400, 0xc401, 0xc402, 0xc403, 0xc404, 0xc405, - 0xc406, 0xc407, 0xc409, 0xc40a, 0xc40b, 0xc40c, 0xc40d, 0xc40e, - 0xc40f, 0xc411, 0xc412, 0xc413, 0xc414, 0xc415, 0xc416, 0xc417, - 0xc418, 0xc419, 0xc41a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc41b, 0xc41c, 0xc41d, 0xc41e, 0xc41f, 0xc420, 0xc421, - 0xc422, 0xc423, 0xc425, 0xc426, 0xc427, 0xc428, 0xc429, 0xc42a, - 0xc42b, 0xc42d, 0xc42e, 0xc42f, 0xc431, 0xc432, 0xc433, 0xc435, - 0xc436, 0xc437, 0xc438, 0xc439, 0xc43a, 0xc43b, 0xc43e, 0xc43f, - 0xc440, 0xc441, 0xc442, 0xc443, 0xc444, 0xc445, 0xc446, 0xc447, - 0xc449, 0xc44a, 0xc44b, 0xc44c, 0xc44d, 0xc44e, 0xc44f, 0xc450, - 0xc451, 0xc452, 0xc453, 0xc454, 0xc455, 0xc456, 0xc457, 0xc458, - 0xc459, 0xc45a, 0xc45b, 0xc45c, 0xc45d, 0xc45e, 0xc45f, 0xc460, - 0xc461, 0xc462, 0xc463, 0xc466, 0xc467, 0xc469, 0xc46a, 0xc46b, - 0xc46d, 0xc46e, 0xc46f, 0xc470, 0xc471, 0xc472, 0xc473, 0xc476, - 0xc477, 0xc478, 0xc47a, 0xc47b, 0xc47c, 0xc47d, 0xc47e, 0xc47f, - 0xc481, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486, 0xc487, 0xc488, - 0xc489, 0xc48a, 0xc48b, 0xc48c, 0xc48d, 0xc48e, 0xc48f, 0xc490, - 0xc491, 0xc492, 0xc493, 0xc495, 0xc496, 0xc497, 0xc498, 0xc499, - 0xc49a, 0xc49b, 0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc4a1, 0xc4a2, - 0xc4a3, 0xc4a4, 0xc4a5, 0xc4a6, 0xc4a7, 0xc4a8, 0xc4a9, 0x003f, - /* lead byte 9d */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc4aa, 0xc4ab, 0xc4ac, 0xc4ad, 0xc4ae, 0xc4af, 0xc4b0, - 0xc4b1, 0xc4b2, 0xc4b3, 0xc4b4, 0xc4b5, 0xc4b6, 0xc4b7, 0xc4b9, - 0xc4ba, 0xc4bb, 0xc4bd, 0xc4be, 0xc4bf, 0xc4c0, 0xc4c1, 0xc4c2, - 0xc4c3, 0xc4c4, 0xc4c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc4c6, 0xc4c7, 0xc4c8, 0xc4c9, 0xc4ca, 0xc4cb, 0xc4cc, - 0xc4cd, 0xc4ce, 0xc4cf, 0xc4d0, 0xc4d1, 0xc4d2, 0xc4d3, 0xc4d4, - 0xc4d5, 0xc4d6, 0xc4d7, 0xc4d8, 0xc4d9, 0xc4da, 0xc4db, 0xc4dc, - 0xc4dd, 0xc4de, 0xc4df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc4e0, 0xc4e1, 0xc4e2, 0xc4e3, 0xc4e4, 0xc4e5, 0xc4e6, - 0xc4e7, 0xc4e8, 0xc4ea, 0xc4eb, 0xc4ec, 0xc4ed, 0xc4ee, 0xc4ef, - 0xc4f2, 0xc4f3, 0xc4f5, 0xc4f6, 0xc4f7, 0xc4f9, 0xc4fb, 0xc4fc, - 0xc4fd, 0xc4fe, 0xc502, 0xc503, 0xc504, 0xc505, 0xc506, 0xc507, - 0xc508, 0xc509, 0xc50a, 0xc50b, 0xc50d, 0xc50e, 0xc50f, 0xc511, - 0xc512, 0xc513, 0xc515, 0xc516, 0xc517, 0xc518, 0xc519, 0xc51a, - 0xc51b, 0xc51d, 0xc51e, 0xc51f, 0xc520, 0xc521, 0xc522, 0xc523, - 0xc524, 0xc525, 0xc526, 0xc527, 0xc52a, 0xc52b, 0xc52d, 0xc52e, - 0xc52f, 0xc531, 0xc532, 0xc533, 0xc534, 0xc535, 0xc536, 0xc537, - 0xc53a, 0xc53c, 0xc53e, 0xc53f, 0xc540, 0xc541, 0xc542, 0xc543, - 0xc546, 0xc547, 0xc54b, 0xc54f, 0xc550, 0xc551, 0xc552, 0xc556, - 0xc55a, 0xc55b, 0xc55c, 0xc55f, 0xc562, 0xc563, 0xc565, 0xc566, - 0xc567, 0xc569, 0xc56a, 0xc56b, 0xc56c, 0xc56d, 0xc56e, 0xc56f, - 0xc572, 0xc576, 0xc577, 0xc578, 0xc579, 0xc57a, 0xc57b, 0xc57e, - 0xc57f, 0xc581, 0xc582, 0xc583, 0xc585, 0xc586, 0xc588, 0xc589, - 0xc58a, 0xc58b, 0xc58e, 0xc590, 0xc592, 0xc593, 0xc594, 0x003f, - /* lead byte 9e */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc596, 0xc599, 0xc59a, 0xc59b, 0xc59d, 0xc59e, 0xc59f, - 0xc5a1, 0xc5a2, 0xc5a3, 0xc5a4, 0xc5a5, 0xc5a6, 0xc5a7, 0xc5a8, - 0xc5aa, 0xc5ab, 0xc5ac, 0xc5ad, 0xc5ae, 0xc5af, 0xc5b0, 0xc5b1, - 0xc5b2, 0xc5b3, 0xc5b6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc5b7, 0xc5ba, 0xc5bf, 0xc5c0, 0xc5c1, 0xc5c2, 0xc5c3, - 0xc5cb, 0xc5cd, 0xc5cf, 0xc5d2, 0xc5d3, 0xc5d5, 0xc5d6, 0xc5d7, - 0xc5d9, 0xc5da, 0xc5db, 0xc5dc, 0xc5dd, 0xc5de, 0xc5df, 0xc5e2, - 0xc5e4, 0xc5e6, 0xc5e7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc5e8, 0xc5e9, 0xc5ea, 0xc5eb, 0xc5ef, 0xc5f1, 0xc5f2, - 0xc5f3, 0xc5f5, 0xc5f8, 0xc5f9, 0xc5fa, 0xc5fb, 0xc602, 0xc603, - 0xc604, 0xc609, 0xc60a, 0xc60b, 0xc60d, 0xc60e, 0xc60f, 0xc611, - 0xc612, 0xc613, 0xc614, 0xc615, 0xc616, 0xc617, 0xc61a, 0xc61d, - 0xc61e, 0xc61f, 0xc620, 0xc621, 0xc622, 0xc623, 0xc626, 0xc627, - 0xc629, 0xc62a, 0xc62b, 0xc62f, 0xc631, 0xc632, 0xc636, 0xc638, - 0xc63a, 0xc63c, 0xc63d, 0xc63e, 0xc63f, 0xc642, 0xc643, 0xc645, - 0xc646, 0xc647, 0xc649, 0xc64a, 0xc64b, 0xc64c, 0xc64d, 0xc64e, - 0xc64f, 0xc652, 0xc656, 0xc657, 0xc658, 0xc659, 0xc65a, 0xc65b, - 0xc65e, 0xc65f, 0xc661, 0xc662, 0xc663, 0xc664, 0xc665, 0xc666, - 0xc667, 0xc668, 0xc669, 0xc66a, 0xc66b, 0xc66d, 0xc66e, 0xc670, - 0xc672, 0xc673, 0xc674, 0xc675, 0xc676, 0xc677, 0xc67a, 0xc67b, - 0xc67d, 0xc67e, 0xc67f, 0xc681, 0xc682, 0xc683, 0xc684, 0xc685, - 0xc686, 0xc687, 0xc68a, 0xc68c, 0xc68e, 0xc68f, 0xc690, 0xc691, - 0xc692, 0xc693, 0xc696, 0xc697, 0xc699, 0xc69a, 0xc69b, 0xc69d, - 0xc69e, 0xc69f, 0xc6a0, 0xc6a1, 0xc6a2, 0xc6a3, 0xc6a6, 0x003f, - /* lead byte 9f */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc6a8, 0xc6aa, 0xc6ab, 0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, - 0xc6b2, 0xc6b3, 0xc6b5, 0xc6b6, 0xc6b7, 0xc6bb, 0xc6bc, 0xc6bd, - 0xc6be, 0xc6bf, 0xc6c2, 0xc6c4, 0xc6c6, 0xc6c7, 0xc6c8, 0xc6c9, - 0xc6ca, 0xc6cb, 0xc6ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc6cf, 0xc6d1, 0xc6d2, 0xc6d3, 0xc6d5, 0xc6d6, 0xc6d7, - 0xc6d8, 0xc6d9, 0xc6da, 0xc6db, 0xc6de, 0xc6df, 0xc6e2, 0xc6e3, - 0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7, 0xc6ea, 0xc6eb, 0xc6ed, 0xc6ee, - 0xc6ef, 0xc6f1, 0xc6f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc6f3, 0xc6f4, 0xc6f5, 0xc6f6, 0xc6f7, 0xc6fa, 0xc6fb, - 0xc6fc, 0xc6fe, 0xc6ff, 0xc700, 0xc701, 0xc702, 0xc703, 0xc706, - 0xc707, 0xc709, 0xc70a, 0xc70b, 0xc70d, 0xc70e, 0xc70f, 0xc710, - 0xc711, 0xc712, 0xc713, 0xc716, 0xc718, 0xc71a, 0xc71b, 0xc71c, - 0xc71d, 0xc71e, 0xc71f, 0xc722, 0xc723, 0xc725, 0xc726, 0xc727, - 0xc729, 0xc72a, 0xc72b, 0xc72c, 0xc72d, 0xc72e, 0xc72f, 0xc732, - 0xc734, 0xc736, 0xc738, 0xc739, 0xc73a, 0xc73b, 0xc73e, 0xc73f, - 0xc741, 0xc742, 0xc743, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, - 0xc74b, 0xc74e, 0xc750, 0xc759, 0xc75a, 0xc75b, 0xc75d, 0xc75e, - 0xc75f, 0xc761, 0xc762, 0xc763, 0xc764, 0xc765, 0xc766, 0xc767, - 0xc769, 0xc76a, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, - 0xc772, 0xc773, 0xc776, 0xc777, 0xc779, 0xc77a, 0xc77b, 0xc77f, - 0xc780, 0xc781, 0xc782, 0xc786, 0xc78b, 0xc78c, 0xc78d, 0xc78f, - 0xc792, 0xc793, 0xc795, 0xc799, 0xc79b, 0xc79c, 0xc79d, 0xc79e, - 0xc79f, 0xc7a2, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ae, - 0xc7af, 0xc7b1, 0xc7b2, 0xc7b3, 0xc7b5, 0xc7b6, 0xc7b7, 0x003f, - /* lead byte a0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc7b8, 0xc7b9, 0xc7ba, 0xc7bb, 0xc7be, 0xc7c2, 0xc7c3, - 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0xc7ca, 0xc7cb, 0xc7cd, 0xc7cf, - 0xc7d1, 0xc7d2, 0xc7d3, 0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7, 0xc7d9, - 0xc7da, 0xc7db, 0xc7dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, 0xc7e5, - 0xc7e6, 0xc7e7, 0xc7e9, 0xc7ea, 0xc7eb, 0xc7ed, 0xc7ee, 0xc7ef, - 0xc7f0, 0xc7f1, 0xc7f2, 0xc7f3, 0xc7f4, 0xc7f5, 0xc7f6, 0xc7f7, - 0xc7f8, 0xc7f9, 0xc7fa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc7fb, 0xc7fc, 0xc7fd, 0xc7fe, 0xc7ff, 0xc802, 0xc803, - 0xc805, 0xc806, 0xc807, 0xc809, 0xc80b, 0xc80c, 0xc80d, 0xc80e, - 0xc80f, 0xc812, 0xc814, 0xc817, 0xc818, 0xc819, 0xc81a, 0xc81b, - 0xc81e, 0xc81f, 0xc821, 0xc822, 0xc823, 0xc825, 0xc826, 0xc827, - 0xc828, 0xc829, 0xc82a, 0xc82b, 0xc82e, 0xc830, 0xc832, 0xc833, - 0xc834, 0xc835, 0xc836, 0xc837, 0xc839, 0xc83a, 0xc83b, 0xc83d, - 0xc83e, 0xc83f, 0xc841, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, - 0xc847, 0xc84a, 0xc84b, 0xc84e, 0xc84f, 0xc850, 0xc851, 0xc852, - 0xc853, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, 0xc85a, 0xc85b, - 0xc85c, 0xc85d, 0xc85e, 0xc85f, 0xc860, 0xc861, 0xc862, 0xc863, - 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, 0xc86a, 0xc86b, - 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc872, 0xc873, 0xc875, 0xc876, - 0xc877, 0xc879, 0xc87b, 0xc87c, 0xc87d, 0xc87e, 0xc87f, 0xc882, - 0xc884, 0xc888, 0xc889, 0xc88a, 0xc88e, 0xc88f, 0xc890, 0xc891, - 0xc892, 0xc893, 0xc895, 0xc896, 0xc897, 0xc898, 0xc899, 0xc89a, - 0xc89b, 0xc89c, 0xc89e, 0xc8a0, 0xc8a2, 0xc8a3, 0xc8a4, 0x003f, - /* lead byte a1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc8a5, 0xc8a6, 0xc8a7, 0xc8a9, 0xc8aa, 0xc8ab, 0xc8ac, - 0xc8ad, 0xc8ae, 0xc8af, 0xc8b0, 0xc8b1, 0xc8b2, 0xc8b3, 0xc8b4, - 0xc8b5, 0xc8b6, 0xc8b7, 0xc8b8, 0xc8b9, 0xc8ba, 0xc8bb, 0xc8be, - 0xc8bf, 0xc8c0, 0xc8c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc8c2, 0xc8c3, 0xc8c5, 0xc8c6, 0xc8c7, 0xc8c9, 0xc8ca, - 0xc8cb, 0xc8cd, 0xc8ce, 0xc8cf, 0xc8d0, 0xc8d1, 0xc8d2, 0xc8d3, - 0xc8d6, 0xc8d8, 0xc8da, 0xc8db, 0xc8dc, 0xc8dd, 0xc8de, 0xc8df, - 0xc8e2, 0xc8e3, 0xc8e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc8e6, 0xc8e7, 0xc8e8, 0xc8e9, 0xc8ea, 0xc8eb, 0xc8ec, - 0xc8ed, 0xc8ee, 0xc8ef, 0xc8f0, 0xc8f1, 0xc8f2, 0xc8f3, 0xc8f4, - 0xc8f6, 0xc8f7, 0xc8f8, 0xc8f9, 0xc8fa, 0xc8fb, 0xc8fe, 0xc8ff, - 0xc901, 0xc902, 0xc903, 0xc907, 0xc908, 0xc909, 0xc90a, 0xc90b, - 0xc90e, 0x3000, 0x3001, 0x3002, 0x00b7, 0x2025, 0x2026, 0x00a8, - 0x3003, 0x00ad, 0x2015, 0x2225, 0xff3c, 0x223c, 0x2018, 0x2019, - 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, - 0x300c, 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7, - 0x00f7, 0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032, - 0x2033, 0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640, - 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7, - 0x203b, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, - 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190, - 0x2191, 0x2193, 0x2194, 0x3013, 0x226a, 0x226b, 0x221a, 0x223d, - 0x221d, 0x2235, 0x222b, 0x222c, 0x2208, 0x220b, 0x2286, 0x2287, - 0x2282, 0x2283, 0x222a, 0x2229, 0x2227, 0x2228, 0xffe2, 0x003f, - /* lead byte a2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc910, 0xc912, 0xc913, 0xc914, 0xc915, 0xc916, 0xc917, - 0xc919, 0xc91a, 0xc91b, 0xc91c, 0xc91d, 0xc91e, 0xc91f, 0xc920, - 0xc921, 0xc922, 0xc923, 0xc924, 0xc925, 0xc926, 0xc927, 0xc928, - 0xc929, 0xc92a, 0xc92b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc92d, 0xc92e, 0xc92f, 0xc930, 0xc931, 0xc932, 0xc933, - 0xc935, 0xc936, 0xc937, 0xc938, 0xc939, 0xc93a, 0xc93b, 0xc93c, - 0xc93d, 0xc93e, 0xc93f, 0xc940, 0xc941, 0xc942, 0xc943, 0xc944, - 0xc945, 0xc946, 0xc947, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc948, 0xc949, 0xc94a, 0xc94b, 0xc94c, 0xc94d, 0xc94e, - 0xc94f, 0xc952, 0xc953, 0xc955, 0xc956, 0xc957, 0xc959, 0xc95a, - 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f, 0xc962, 0xc964, 0xc965, - 0xc966, 0xc967, 0xc968, 0xc969, 0xc96a, 0xc96b, 0xc96d, 0xc96e, - 0xc96f, 0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4, 0xff5e, 0x02c7, - 0x02d8, 0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf, - 0x02d0, 0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1, - 0x25c0, 0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, - 0x2663, 0x2299, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4, - 0x25a5, 0x25a8, 0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e, - 0x261c, 0x261e, 0x00b6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, - 0x2196, 0x2198, 0x266d, 0x2669, 0x266a, 0x266c, 0x327f, 0x321c, - 0x2116, 0x33c7, 0x2122, 0x33c2, 0x33d8, 0x2121, 0x20ac, 0x00ae, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc971, 0xc972, 0xc973, 0xc975, 0xc976, 0xc977, 0xc978, - 0xc979, 0xc97a, 0xc97b, 0xc97d, 0xc97e, 0xc97f, 0xc980, 0xc981, - 0xc982, 0xc983, 0xc984, 0xc985, 0xc986, 0xc987, 0xc98a, 0xc98b, - 0xc98d, 0xc98e, 0xc98f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc991, 0xc992, 0xc993, 0xc994, 0xc995, 0xc996, 0xc997, - 0xc99a, 0xc99c, 0xc99e, 0xc99f, 0xc9a0, 0xc9a1, 0xc9a2, 0xc9a3, - 0xc9a4, 0xc9a5, 0xc9a6, 0xc9a7, 0xc9a8, 0xc9a9, 0xc9aa, 0xc9ab, - 0xc9ac, 0xc9ad, 0xc9ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc9af, 0xc9b0, 0xc9b1, 0xc9b2, 0xc9b3, 0xc9b4, 0xc9b5, - 0xc9b6, 0xc9b7, 0xc9b8, 0xc9b9, 0xc9ba, 0xc9bb, 0xc9bc, 0xc9bd, - 0xc9be, 0xc9bf, 0xc9c2, 0xc9c3, 0xc9c5, 0xc9c6, 0xc9c9, 0xc9cb, - 0xc9cc, 0xc9cd, 0xc9ce, 0xc9cf, 0xc9d2, 0xc9d4, 0xc9d7, 0xc9d8, - 0xc9db, 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, - 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, - 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, - 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, - 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, - 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, - 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, - 0xff38, 0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f, - 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, - 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, - 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, - 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, 0x003f, - /* lead byte a4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc9de, 0xc9df, 0xc9e1, 0xc9e3, 0xc9e5, 0xc9e6, 0xc9e8, - 0xc9e9, 0xc9ea, 0xc9eb, 0xc9ee, 0xc9f2, 0xc9f3, 0xc9f4, 0xc9f5, - 0xc9f6, 0xc9f7, 0xc9fa, 0xc9fb, 0xc9fd, 0xc9fe, 0xc9ff, 0xca01, - 0xca02, 0xca03, 0xca04, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xca05, 0xca06, 0xca07, 0xca0a, 0xca0e, 0xca0f, 0xca10, - 0xca11, 0xca12, 0xca13, 0xca15, 0xca16, 0xca17, 0xca19, 0xca1a, - 0xca1b, 0xca1c, 0xca1d, 0xca1e, 0xca1f, 0xca20, 0xca21, 0xca22, - 0xca23, 0xca24, 0xca25, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xca26, 0xca27, 0xca28, 0xca2a, 0xca2b, 0xca2c, 0xca2d, - 0xca2e, 0xca2f, 0xca30, 0xca31, 0xca32, 0xca33, 0xca34, 0xca35, - 0xca36, 0xca37, 0xca38, 0xca39, 0xca3a, 0xca3b, 0xca3c, 0xca3d, - 0xca3e, 0xca3f, 0xca40, 0xca41, 0xca42, 0xca43, 0xca44, 0xca45, - 0xca46, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, - 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, - 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, - 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, - 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, - 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, - 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, - 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, - 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, - 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f, - 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, - 0x3188, 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e, 0x003f, - /* lead byte a5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xca47, 0xca48, 0xca49, 0xca4a, 0xca4b, 0xca4e, 0xca4f, - 0xca51, 0xca52, 0xca53, 0xca55, 0xca56, 0xca57, 0xca58, 0xca59, - 0xca5a, 0xca5b, 0xca5e, 0xca62, 0xca63, 0xca64, 0xca65, 0xca66, - 0xca67, 0xca69, 0xca6a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xca6b, 0xca6c, 0xca6d, 0xca6e, 0xca6f, 0xca70, 0xca71, - 0xca72, 0xca73, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, 0xca79, - 0xca7a, 0xca7b, 0xca7c, 0xca7e, 0xca7f, 0xca80, 0xca81, 0xca82, - 0xca83, 0xca85, 0xca86, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xca87, 0xca88, 0xca89, 0xca8a, 0xca8b, 0xca8c, 0xca8d, - 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92, 0xca93, 0xca94, 0xca95, - 0xca96, 0xca97, 0xca99, 0xca9a, 0xca9b, 0xca9c, 0xca9d, 0xca9e, - 0xca9f, 0xcaa0, 0xcaa1, 0xcaa2, 0xcaa3, 0xcaa4, 0xcaa5, 0xcaa6, - 0xcaa7, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, - 0x2177, 0x2178, 0x2179, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, - 0x2168, 0x2169, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, - 0x03a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, - 0x03c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcaa8, 0xcaa9, 0xcaaa, 0xcaab, 0xcaac, 0xcaad, 0xcaae, - 0xcaaf, 0xcab0, 0xcab1, 0xcab2, 0xcab3, 0xcab4, 0xcab5, 0xcab6, - 0xcab7, 0xcab8, 0xcab9, 0xcaba, 0xcabb, 0xcabe, 0xcabf, 0xcac1, - 0xcac2, 0xcac3, 0xcac5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcac6, 0xcac7, 0xcac8, 0xcac9, 0xcaca, 0xcacb, 0xcace, - 0xcad0, 0xcad2, 0xcad4, 0xcad5, 0xcad6, 0xcad7, 0xcada, 0xcadb, - 0xcadc, 0xcadd, 0xcade, 0xcadf, 0xcae1, 0xcae2, 0xcae3, 0xcae4, - 0xcae5, 0xcae6, 0xcae7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcae8, 0xcae9, 0xcaea, 0xcaeb, 0xcaed, 0xcaee, 0xcaef, - 0xcaf0, 0xcaf1, 0xcaf2, 0xcaf3, 0xcaf5, 0xcaf6, 0xcaf7, 0xcaf8, - 0xcaf9, 0xcafa, 0xcafb, 0xcafc, 0xcafd, 0xcafe, 0xcaff, 0xcb00, - 0xcb01, 0xcb02, 0xcb03, 0xcb04, 0xcb05, 0xcb06, 0xcb07, 0xcb09, - 0xcb0a, 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, - 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, - 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, - 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, - 0x2542, 0x2512, 0x2511, 0x251a, 0x2519, 0x2516, 0x2515, 0x250e, - 0x250d, 0x251e, 0x251f, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, - 0x252a, 0x252d, 0x252e, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, - 0x253a, 0x253d, 0x253e, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, - 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcb0b, 0xcb0c, 0xcb0d, 0xcb0e, 0xcb0f, 0xcb11, 0xcb12, - 0xcb13, 0xcb15, 0xcb16, 0xcb17, 0xcb19, 0xcb1a, 0xcb1b, 0xcb1c, - 0xcb1d, 0xcb1e, 0xcb1f, 0xcb22, 0xcb23, 0xcb24, 0xcb25, 0xcb26, - 0xcb27, 0xcb28, 0xcb29, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcb2a, 0xcb2b, 0xcb2c, 0xcb2d, 0xcb2e, 0xcb2f, 0xcb30, - 0xcb31, 0xcb32, 0xcb33, 0xcb34, 0xcb35, 0xcb36, 0xcb37, 0xcb38, - 0xcb39, 0xcb3a, 0xcb3b, 0xcb3c, 0xcb3d, 0xcb3e, 0xcb3f, 0xcb40, - 0xcb42, 0xcb43, 0xcb44, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcb45, 0xcb46, 0xcb47, 0xcb4a, 0xcb4b, 0xcb4d, 0xcb4e, - 0xcb4f, 0xcb51, 0xcb52, 0xcb53, 0xcb54, 0xcb55, 0xcb56, 0xcb57, - 0xcb5a, 0xcb5b, 0xcb5c, 0xcb5e, 0xcb5f, 0xcb60, 0xcb61, 0xcb62, - 0xcb63, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xcb69, 0xcb6a, 0xcb6b, - 0xcb6c, 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33c4, 0x33a3, - 0x33a4, 0x33a5, 0x33a6, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d, - 0x339e, 0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca, 0x338d, 0x338e, - 0x338f, 0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8, 0x33b0, - 0x33b1, 0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8, - 0x33b9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb, - 0x33bc, 0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393, - 0x3394, 0x2126, 0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6, - 0x33c5, 0x33ad, 0x33ae, 0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab, - 0x33ac, 0x33dd, 0x33d0, 0x33d3, 0x33c3, 0x33c9, 0x33dc, 0x33c6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcb6d, 0xcb6e, 0xcb6f, 0xcb70, 0xcb71, 0xcb72, 0xcb73, - 0xcb74, 0xcb75, 0xcb76, 0xcb77, 0xcb7a, 0xcb7b, 0xcb7c, 0xcb7d, - 0xcb7e, 0xcb7f, 0xcb80, 0xcb81, 0xcb82, 0xcb83, 0xcb84, 0xcb85, - 0xcb86, 0xcb87, 0xcb88, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcb89, 0xcb8a, 0xcb8b, 0xcb8c, 0xcb8d, 0xcb8e, 0xcb8f, - 0xcb90, 0xcb91, 0xcb92, 0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97, - 0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0xcb9d, 0xcb9e, 0xcb9f, 0xcba0, - 0xcba1, 0xcba2, 0xcba3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcba4, 0xcba5, 0xcba6, 0xcba7, 0xcba8, 0xcba9, 0xcbaa, - 0xcbab, 0xcbac, 0xcbad, 0xcbae, 0xcbaf, 0xcbb0, 0xcbb1, 0xcbb2, - 0xcbb3, 0xcbb4, 0xcbb5, 0xcbb6, 0xcbb7, 0xcbb9, 0xcbba, 0xcbbb, - 0xcbbc, 0xcbbd, 0xcbbe, 0xcbbf, 0xcbc0, 0xcbc1, 0xcbc2, 0xcbc3, - 0xcbc4, 0x00c6, 0x00d0, 0x00aa, 0x0126, 0x003f, 0x0132, 0x003f, - 0x013f, 0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a, - 0x003f, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, - 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, - 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, - 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1, 0x24d2, - 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, - 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, - 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460, - 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, - 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153, - 0x2154, 0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, 0x003f, - /* lead byte a9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcbc5, 0xcbc6, 0xcbc7, 0xcbc8, 0xcbc9, 0xcbca, 0xcbcb, - 0xcbcc, 0xcbcd, 0xcbce, 0xcbcf, 0xcbd0, 0xcbd1, 0xcbd2, 0xcbd3, - 0xcbd5, 0xcbd6, 0xcbd7, 0xcbd8, 0xcbd9, 0xcbda, 0xcbdb, 0xcbdc, - 0xcbdd, 0xcbde, 0xcbdf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcbe0, 0xcbe1, 0xcbe2, 0xcbe3, 0xcbe5, 0xcbe6, 0xcbe8, - 0xcbea, 0xcbeb, 0xcbec, 0xcbed, 0xcbee, 0xcbef, 0xcbf0, 0xcbf1, - 0xcbf2, 0xcbf3, 0xcbf4, 0xcbf5, 0xcbf6, 0xcbf7, 0xcbf8, 0xcbf9, - 0xcbfa, 0xcbfb, 0xcbfc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcbfd, 0xcbfe, 0xcbff, 0xcc00, 0xcc01, 0xcc02, 0xcc03, - 0xcc04, 0xcc05, 0xcc06, 0xcc07, 0xcc08, 0xcc09, 0xcc0a, 0xcc0b, - 0xcc0e, 0xcc0f, 0xcc11, 0xcc12, 0xcc13, 0xcc15, 0xcc16, 0xcc17, - 0xcc18, 0xcc19, 0xcc1a, 0xcc1b, 0xcc1e, 0xcc1f, 0xcc20, 0xcc23, - 0xcc24, 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, - 0x0140, 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b, - 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, - 0x3207, 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e, - 0x320f, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, - 0x3217, 0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e, - 0x249f, 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, - 0x24a7, 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, - 0x24af, 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474, - 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, - 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x00b9, 0x00b2, - 0x00b3, 0x2074, 0x207f, 0x2081, 0x2082, 0x2083, 0x2084, 0x003f, - /* lead byte aa */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcc25, 0xcc26, 0xcc2a, 0xcc2b, 0xcc2d, 0xcc2f, 0xcc31, - 0xcc32, 0xcc33, 0xcc34, 0xcc35, 0xcc36, 0xcc37, 0xcc3a, 0xcc3f, - 0xcc40, 0xcc41, 0xcc42, 0xcc43, 0xcc46, 0xcc47, 0xcc49, 0xcc4a, - 0xcc4b, 0xcc4d, 0xcc4e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcc4f, 0xcc50, 0xcc51, 0xcc52, 0xcc53, 0xcc56, 0xcc5a, - 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0xcc61, 0xcc62, 0xcc63, - 0xcc65, 0xcc67, 0xcc69, 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, - 0xcc6f, 0xcc71, 0xcc72, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcc73, 0xcc74, 0xcc76, 0xcc77, 0xcc78, 0xcc79, 0xcc7a, - 0xcc7b, 0xcc7c, 0xcc7d, 0xcc7e, 0xcc7f, 0xcc80, 0xcc81, 0xcc82, - 0xcc83, 0xcc84, 0xcc85, 0xcc86, 0xcc87, 0xcc88, 0xcc89, 0xcc8a, - 0xcc8b, 0xcc8c, 0xcc8d, 0xcc8e, 0xcc8f, 0xcc90, 0xcc91, 0xcc92, - 0xcc93, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, - 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, - 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, - 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, - 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, - 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, - 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, - 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, - 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, - 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, - 0x3090, 0x3091, 0x3092, 0x3093, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ab */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcc94, 0xcc95, 0xcc96, 0xcc97, 0xcc9a, 0xcc9b, 0xcc9d, - 0xcc9e, 0xcc9f, 0xcca1, 0xcca2, 0xcca3, 0xcca4, 0xcca5, 0xcca6, - 0xcca7, 0xccaa, 0xccae, 0xccaf, 0xccb0, 0xccb1, 0xccb2, 0xccb3, - 0xccb6, 0xccb7, 0xccb9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccba, 0xccbb, 0xccbd, 0xccbe, 0xccbf, 0xccc0, 0xccc1, - 0xccc2, 0xccc3, 0xccc6, 0xccc8, 0xccca, 0xcccb, 0xcccc, 0xcccd, - 0xccce, 0xcccf, 0xccd1, 0xccd2, 0xccd3, 0xccd5, 0xccd6, 0xccd7, - 0xccd8, 0xccd9, 0xccda, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccdb, 0xccdc, 0xccdd, 0xccde, 0xccdf, 0xcce0, 0xcce1, - 0xcce2, 0xcce3, 0xcce5, 0xcce6, 0xcce7, 0xcce8, 0xcce9, 0xccea, - 0xcceb, 0xcced, 0xccee, 0xccef, 0xccf1, 0xccf2, 0xccf3, 0xccf4, - 0xccf5, 0xccf6, 0xccf7, 0xccf8, 0xccf9, 0xccfa, 0xccfb, 0xccfc, - 0xccfd, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, - 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, - 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, - 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, - 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, - 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, - 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, - 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, - 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, - 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, - 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ac */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccfe, 0xccff, 0xcd00, 0xcd02, 0xcd03, 0xcd04, 0xcd05, - 0xcd06, 0xcd07, 0xcd0a, 0xcd0b, 0xcd0d, 0xcd0e, 0xcd0f, 0xcd11, - 0xcd12, 0xcd13, 0xcd14, 0xcd15, 0xcd16, 0xcd17, 0xcd1a, 0xcd1c, - 0xcd1e, 0xcd1f, 0xcd20, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcd21, 0xcd22, 0xcd23, 0xcd25, 0xcd26, 0xcd27, 0xcd29, - 0xcd2a, 0xcd2b, 0xcd2d, 0xcd2e, 0xcd2f, 0xcd30, 0xcd31, 0xcd32, - 0xcd33, 0xcd34, 0xcd35, 0xcd36, 0xcd37, 0xcd38, 0xcd3a, 0xcd3b, - 0xcd3c, 0xcd3d, 0xcd3e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcd3f, 0xcd40, 0xcd41, 0xcd42, 0xcd43, 0xcd44, 0xcd45, - 0xcd46, 0xcd47, 0xcd48, 0xcd49, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, - 0xcd4e, 0xcd4f, 0xcd50, 0xcd51, 0xcd52, 0xcd53, 0xcd54, 0xcd55, - 0xcd56, 0xcd57, 0xcd58, 0xcd59, 0xcd5a, 0xcd5b, 0xcd5d, 0xcd5e, - 0xcd5f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, - 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, - 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, - 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, - 0x042e, 0x042f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, - 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, - 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, - 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, - 0x044e, 0x044f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ad */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcd61, 0xcd62, 0xcd63, 0xcd65, 0xcd66, 0xcd67, 0xcd68, - 0xcd69, 0xcd6a, 0xcd6b, 0xcd6e, 0xcd70, 0xcd72, 0xcd73, 0xcd74, - 0xcd75, 0xcd76, 0xcd77, 0xcd79, 0xcd7a, 0xcd7b, 0xcd7c, 0xcd7d, - 0xcd7e, 0xcd7f, 0xcd80, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xcd85, 0xcd86, 0xcd87, - 0xcd89, 0xcd8a, 0xcd8b, 0xcd8c, 0xcd8d, 0xcd8e, 0xcd8f, 0xcd90, - 0xcd91, 0xcd92, 0xcd93, 0xcd96, 0xcd97, 0xcd99, 0xcd9a, 0xcd9b, - 0xcd9d, 0xcd9e, 0xcd9f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcda0, 0xcda1, 0xcda2, 0xcda3, 0xcda6, 0xcda8, 0xcdaa, - 0xcdab, 0xcdac, 0xcdad, 0xcdae, 0xcdaf, 0xcdb1, 0xcdb2, 0xcdb3, - 0xcdb4, 0xcdb5, 0xcdb6, 0xcdb7, 0xcdb8, 0xcdb9, 0xcdba, 0xcdbb, - 0xcdbc, 0xcdbd, 0xcdbe, 0xcdbf, 0xcdc0, 0xcdc1, 0xcdc2, 0xcdc3, - 0xcdc5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte ae */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdc6, 0xcdc7, 0xcdc8, 0xcdc9, 0xcdca, 0xcdcb, 0xcdcd, - 0xcdce, 0xcdcf, 0xcdd1, 0xcdd2, 0xcdd3, 0xcdd4, 0xcdd5, 0xcdd6, - 0xcdd7, 0xcdd8, 0xcdd9, 0xcdda, 0xcddb, 0xcddc, 0xcddd, 0xcdde, - 0xcddf, 0xcde0, 0xcde1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcde2, 0xcde3, 0xcde4, 0xcde5, 0xcde6, 0xcde7, 0xcde9, - 0xcdea, 0xcdeb, 0xcded, 0xcdee, 0xcdef, 0xcdf1, 0xcdf2, 0xcdf3, - 0xcdf4, 0xcdf5, 0xcdf6, 0xcdf7, 0xcdfa, 0xcdfc, 0xcdfe, 0xcdff, - 0xce00, 0xce01, 0xce02, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xce03, 0xce05, 0xce06, 0xce07, 0xce09, 0xce0a, 0xce0b, - 0xce0d, 0xce0e, 0xce0f, 0xce10, 0xce11, 0xce12, 0xce13, 0xce15, - 0xce16, 0xce17, 0xce18, 0xce1a, 0xce1b, 0xce1c, 0xce1d, 0xce1e, - 0xce1f, 0xce22, 0xce23, 0xce25, 0xce26, 0xce27, 0xce29, 0xce2a, - 0xce2b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte af */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xce2c, 0xce2d, 0xce2e, 0xce2f, 0xce32, 0xce34, 0xce36, - 0xce37, 0xce38, 0xce39, 0xce3a, 0xce3b, 0xce3c, 0xce3d, 0xce3e, - 0xce3f, 0xce40, 0xce41, 0xce42, 0xce43, 0xce44, 0xce45, 0xce46, - 0xce47, 0xce48, 0xce49, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xce4a, 0xce4b, 0xce4c, 0xce4d, 0xce4e, 0xce4f, 0xce50, - 0xce51, 0xce52, 0xce53, 0xce54, 0xce55, 0xce56, 0xce57, 0xce5a, - 0xce5b, 0xce5d, 0xce5e, 0xce62, 0xce63, 0xce64, 0xce65, 0xce66, - 0xce67, 0xce6a, 0xce6c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xce6e, 0xce6f, 0xce70, 0xce71, 0xce72, 0xce73, 0xce76, - 0xce77, 0xce79, 0xce7a, 0xce7b, 0xce7d, 0xce7e, 0xce7f, 0xce80, - 0xce81, 0xce82, 0xce83, 0xce86, 0xce88, 0xce8a, 0xce8b, 0xce8c, - 0xce8d, 0xce8e, 0xce8f, 0xce92, 0xce93, 0xce95, 0xce96, 0xce97, - 0xce99, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte b0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xce9a, 0xce9b, 0xce9c, 0xce9d, 0xce9e, 0xce9f, 0xcea2, - 0xcea6, 0xcea7, 0xcea8, 0xcea9, 0xceaa, 0xceab, 0xceae, 0xceaf, - 0xceb0, 0xceb1, 0xceb2, 0xceb3, 0xceb4, 0xceb5, 0xceb6, 0xceb7, - 0xceb8, 0xceb9, 0xceba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcebb, 0xcebc, 0xcebd, 0xcebe, 0xcebf, 0xcec0, 0xcec2, - 0xcec3, 0xcec4, 0xcec5, 0xcec6, 0xcec7, 0xcec8, 0xcec9, 0xceca, - 0xcecb, 0xcecc, 0xcecd, 0xcece, 0xcecf, 0xced0, 0xced1, 0xced2, - 0xced3, 0xced4, 0xced5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xced6, 0xced7, 0xced8, 0xced9, 0xceda, 0xcedb, 0xcedc, - 0xcedd, 0xcede, 0xcedf, 0xcee0, 0xcee1, 0xcee2, 0xcee3, 0xcee6, - 0xcee7, 0xcee9, 0xceea, 0xceed, 0xceee, 0xceef, 0xcef0, 0xcef1, - 0xcef2, 0xcef3, 0xcef6, 0xcefa, 0xcefb, 0xcefc, 0xcefd, 0xcefe, - 0xceff, 0xac00, 0xac01, 0xac04, 0xac07, 0xac08, 0xac09, 0xac0a, - 0xac10, 0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16, 0xac17, - 0xac19, 0xac1a, 0xac1b, 0xac1c, 0xac1d, 0xac20, 0xac24, 0xac2c, - 0xac2d, 0xac2f, 0xac30, 0xac31, 0xac38, 0xac39, 0xac3c, 0xac40, - 0xac4b, 0xac4d, 0xac54, 0xac58, 0xac5c, 0xac70, 0xac71, 0xac74, - 0xac77, 0xac78, 0xac7a, 0xac80, 0xac81, 0xac83, 0xac84, 0xac85, - 0xac86, 0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac90, 0xac94, 0xac9c, - 0xac9d, 0xac9f, 0xaca0, 0xaca1, 0xaca8, 0xaca9, 0xacaa, 0xacac, - 0xacaf, 0xacb0, 0xacb8, 0xacb9, 0xacbb, 0xacbc, 0xacbd, 0xacc1, - 0xacc4, 0xacc8, 0xaccc, 0xacd5, 0xacd7, 0xace0, 0xace1, 0xace4, - 0xace7, 0xace8, 0xacea, 0xacec, 0xacef, 0xacf0, 0xacf1, 0xacf3, - 0xacf5, 0xacf6, 0xacfc, 0xacfd, 0xad00, 0xad04, 0xad06, 0x003f, - /* lead byte b1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcf02, 0xcf03, 0xcf05, 0xcf06, 0xcf07, 0xcf09, 0xcf0a, - 0xcf0b, 0xcf0c, 0xcf0d, 0xcf0e, 0xcf0f, 0xcf12, 0xcf14, 0xcf16, - 0xcf17, 0xcf18, 0xcf19, 0xcf1a, 0xcf1b, 0xcf1d, 0xcf1e, 0xcf1f, - 0xcf21, 0xcf22, 0xcf23, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcf25, 0xcf26, 0xcf27, 0xcf28, 0xcf29, 0xcf2a, 0xcf2b, - 0xcf2e, 0xcf32, 0xcf33, 0xcf34, 0xcf35, 0xcf36, 0xcf37, 0xcf39, - 0xcf3a, 0xcf3b, 0xcf3c, 0xcf3d, 0xcf3e, 0xcf3f, 0xcf40, 0xcf41, - 0xcf42, 0xcf43, 0xcf44, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcf45, 0xcf46, 0xcf47, 0xcf48, 0xcf49, 0xcf4a, 0xcf4b, - 0xcf4c, 0xcf4d, 0xcf4e, 0xcf4f, 0xcf50, 0xcf51, 0xcf52, 0xcf53, - 0xcf56, 0xcf57, 0xcf59, 0xcf5a, 0xcf5b, 0xcf5d, 0xcf5e, 0xcf5f, - 0xcf60, 0xcf61, 0xcf62, 0xcf63, 0xcf66, 0xcf68, 0xcf6a, 0xcf6b, - 0xcf6c, 0xad0c, 0xad0d, 0xad0f, 0xad11, 0xad18, 0xad1c, 0xad20, - 0xad29, 0xad2c, 0xad2d, 0xad34, 0xad35, 0xad38, 0xad3c, 0xad44, - 0xad45, 0xad47, 0xad49, 0xad50, 0xad54, 0xad58, 0xad61, 0xad63, - 0xad6c, 0xad6d, 0xad70, 0xad73, 0xad74, 0xad75, 0xad76, 0xad7b, - 0xad7c, 0xad7d, 0xad7f, 0xad81, 0xad82, 0xad88, 0xad89, 0xad8c, - 0xad90, 0xad9c, 0xad9d, 0xada4, 0xadb7, 0xadc0, 0xadc1, 0xadc4, - 0xadc8, 0xadd0, 0xadd1, 0xadd3, 0xaddc, 0xade0, 0xade4, 0xadf8, - 0xadf9, 0xadfc, 0xadff, 0xae00, 0xae01, 0xae08, 0xae09, 0xae0b, - 0xae0d, 0xae14, 0xae30, 0xae31, 0xae34, 0xae37, 0xae38, 0xae3a, - 0xae40, 0xae41, 0xae43, 0xae45, 0xae46, 0xae4a, 0xae4c, 0xae4d, - 0xae4e, 0xae50, 0xae54, 0xae56, 0xae5c, 0xae5d, 0xae5f, 0xae60, - 0xae61, 0xae65, 0xae68, 0xae69, 0xae6c, 0xae70, 0xae78, 0x003f, - /* lead byte b2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcf6d, 0xcf6e, 0xcf6f, 0xcf72, 0xcf73, 0xcf75, 0xcf76, - 0xcf77, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, 0xcf7e, 0xcf7f, - 0xcf81, 0xcf82, 0xcf83, 0xcf84, 0xcf86, 0xcf87, 0xcf88, 0xcf89, - 0xcf8a, 0xcf8b, 0xcf8d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92, 0xcf93, 0xcf94, - 0xcf95, 0xcf96, 0xcf97, 0xcf98, 0xcf99, 0xcf9a, 0xcf9b, 0xcf9c, - 0xcf9d, 0xcf9e, 0xcf9f, 0xcfa0, 0xcfa2, 0xcfa3, 0xcfa4, 0xcfa5, - 0xcfa6, 0xcfa7, 0xcfa9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcfaa, 0xcfab, 0xcfac, 0xcfad, 0xcfae, 0xcfaf, 0xcfb1, - 0xcfb2, 0xcfb3, 0xcfb4, 0xcfb5, 0xcfb6, 0xcfb7, 0xcfb8, 0xcfb9, - 0xcfba, 0xcfbb, 0xcfbc, 0xcfbd, 0xcfbe, 0xcfbf, 0xcfc0, 0xcfc1, - 0xcfc2, 0xcfc3, 0xcfc5, 0xcfc6, 0xcfc7, 0xcfc8, 0xcfc9, 0xcfca, - 0xcfcb, 0xae79, 0xae7b, 0xae7c, 0xae7d, 0xae84, 0xae85, 0xae8c, - 0xaebc, 0xaebd, 0xaebe, 0xaec0, 0xaec4, 0xaecc, 0xaecd, 0xaecf, - 0xaed0, 0xaed1, 0xaed8, 0xaed9, 0xaedc, 0xaee8, 0xaeeb, 0xaeed, - 0xaef4, 0xaef8, 0xaefc, 0xaf07, 0xaf08, 0xaf0d, 0xaf10, 0xaf2c, - 0xaf2d, 0xaf30, 0xaf32, 0xaf34, 0xaf3c, 0xaf3d, 0xaf3f, 0xaf41, - 0xaf42, 0xaf43, 0xaf48, 0xaf49, 0xaf50, 0xaf5c, 0xaf5d, 0xaf64, - 0xaf65, 0xaf79, 0xaf80, 0xaf84, 0xaf88, 0xaf90, 0xaf91, 0xaf95, - 0xaf9c, 0xafb8, 0xafb9, 0xafbc, 0xafc0, 0xafc7, 0xafc8, 0xafc9, - 0xafcb, 0xafcd, 0xafce, 0xafd4, 0xafdc, 0xafe8, 0xafe9, 0xaff0, - 0xaff1, 0xaff4, 0xaff8, 0xb000, 0xb001, 0xb004, 0xb00c, 0xb010, - 0xb014, 0xb01c, 0xb01d, 0xb028, 0xb044, 0xb045, 0xb048, 0xb04a, - 0xb04c, 0xb04e, 0xb053, 0xb054, 0xb055, 0xb057, 0xb059, 0x003f, - /* lead byte b3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcfcc, 0xcfcd, 0xcfce, 0xcfcf, 0xcfd0, 0xcfd1, 0xcfd2, - 0xcfd3, 0xcfd4, 0xcfd5, 0xcfd6, 0xcfd7, 0xcfd8, 0xcfd9, 0xcfda, - 0xcfdb, 0xcfdc, 0xcfdd, 0xcfde, 0xcfdf, 0xcfe2, 0xcfe3, 0xcfe5, - 0xcfe6, 0xcfe7, 0xcfe9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcfea, 0xcfeb, 0xcfec, 0xcfed, 0xcfee, 0xcfef, 0xcff2, - 0xcff4, 0xcff6, 0xcff7, 0xcff8, 0xcff9, 0xcffa, 0xcffb, 0xcffd, - 0xcffe, 0xcfff, 0xd001, 0xd002, 0xd003, 0xd005, 0xd006, 0xd007, - 0xd008, 0xd009, 0xd00a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd00b, 0xd00c, 0xd00d, 0xd00e, 0xd00f, 0xd010, 0xd012, - 0xd013, 0xd014, 0xd015, 0xd016, 0xd017, 0xd019, 0xd01a, 0xd01b, - 0xd01c, 0xd01d, 0xd01e, 0xd01f, 0xd020, 0xd021, 0xd022, 0xd023, - 0xd024, 0xd025, 0xd026, 0xd027, 0xd028, 0xd029, 0xd02a, 0xd02b, - 0xd02c, 0xb05d, 0xb07c, 0xb07d, 0xb080, 0xb084, 0xb08c, 0xb08d, - 0xb08f, 0xb091, 0xb098, 0xb099, 0xb09a, 0xb09c, 0xb09f, 0xb0a0, - 0xb0a1, 0xb0a2, 0xb0a8, 0xb0a9, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, - 0xb0af, 0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b8, 0xb0bc, 0xb0c4, - 0xb0c5, 0xb0c7, 0xb0c8, 0xb0c9, 0xb0d0, 0xb0d1, 0xb0d4, 0xb0d8, - 0xb0e0, 0xb0e5, 0xb108, 0xb109, 0xb10b, 0xb10c, 0xb110, 0xb112, - 0xb113, 0xb118, 0xb119, 0xb11b, 0xb11c, 0xb11d, 0xb123, 0xb124, - 0xb125, 0xb128, 0xb12c, 0xb134, 0xb135, 0xb137, 0xb138, 0xb139, - 0xb140, 0xb141, 0xb144, 0xb148, 0xb150, 0xb151, 0xb154, 0xb155, - 0xb158, 0xb15c, 0xb160, 0xb178, 0xb179, 0xb17c, 0xb180, 0xb182, - 0xb188, 0xb189, 0xb18b, 0xb18d, 0xb192, 0xb193, 0xb194, 0xb198, - 0xb19c, 0xb1a8, 0xb1cc, 0xb1d0, 0xb1d4, 0xb1dc, 0xb1dd, 0x003f, - /* lead byte b4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd02e, 0xd02f, 0xd030, 0xd031, 0xd032, 0xd033, 0xd036, - 0xd037, 0xd039, 0xd03a, 0xd03b, 0xd03d, 0xd03e, 0xd03f, 0xd040, - 0xd041, 0xd042, 0xd043, 0xd046, 0xd048, 0xd04a, 0xd04b, 0xd04c, - 0xd04d, 0xd04e, 0xd04f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd051, 0xd052, 0xd053, 0xd055, 0xd056, 0xd057, 0xd059, - 0xd05a, 0xd05b, 0xd05c, 0xd05d, 0xd05e, 0xd05f, 0xd061, 0xd062, - 0xd063, 0xd064, 0xd065, 0xd066, 0xd067, 0xd068, 0xd069, 0xd06a, - 0xd06b, 0xd06e, 0xd06f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd071, 0xd072, 0xd073, 0xd075, 0xd076, 0xd077, 0xd078, - 0xd079, 0xd07a, 0xd07b, 0xd07e, 0xd07f, 0xd080, 0xd082, 0xd083, - 0xd084, 0xd085, 0xd086, 0xd087, 0xd088, 0xd089, 0xd08a, 0xd08b, - 0xd08c, 0xd08d, 0xd08e, 0xd08f, 0xd090, 0xd091, 0xd092, 0xd093, - 0xd094, 0xb1df, 0xb1e8, 0xb1e9, 0xb1ec, 0xb1f0, 0xb1f9, 0xb1fb, - 0xb1fd, 0xb204, 0xb205, 0xb208, 0xb20b, 0xb20c, 0xb214, 0xb215, - 0xb217, 0xb219, 0xb220, 0xb234, 0xb23c, 0xb258, 0xb25c, 0xb260, - 0xb268, 0xb269, 0xb274, 0xb275, 0xb27c, 0xb284, 0xb285, 0xb289, - 0xb290, 0xb291, 0xb294, 0xb298, 0xb299, 0xb29a, 0xb2a0, 0xb2a1, - 0xb2a3, 0xb2a5, 0xb2a6, 0xb2aa, 0xb2ac, 0xb2b0, 0xb2b4, 0xb2c8, - 0xb2c9, 0xb2cc, 0xb2d0, 0xb2d2, 0xb2d8, 0xb2d9, 0xb2db, 0xb2dd, - 0xb2e2, 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e8, 0xb2eb, 0xb2ec, 0xb2ed, - 0xb2ee, 0xb2ef, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f7, 0xb2f8, 0xb2f9, - 0xb2fa, 0xb2fb, 0xb2ff, 0xb300, 0xb301, 0xb304, 0xb308, 0xb310, - 0xb311, 0xb313, 0xb314, 0xb315, 0xb31c, 0xb354, 0xb355, 0xb356, - 0xb358, 0xb35b, 0xb35c, 0xb35e, 0xb35f, 0xb364, 0xb365, 0x003f, - /* lead byte b5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd095, 0xd096, 0xd097, 0xd098, 0xd099, 0xd09a, 0xd09b, - 0xd09c, 0xd09d, 0xd09e, 0xd09f, 0xd0a0, 0xd0a1, 0xd0a2, 0xd0a3, - 0xd0a6, 0xd0a7, 0xd0a9, 0xd0aa, 0xd0ab, 0xd0ad, 0xd0ae, 0xd0af, - 0xd0b0, 0xd0b1, 0xd0b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd0b3, 0xd0b6, 0xd0b8, 0xd0ba, 0xd0bb, 0xd0bc, 0xd0bd, - 0xd0be, 0xd0bf, 0xd0c2, 0xd0c3, 0xd0c5, 0xd0c6, 0xd0c7, 0xd0ca, - 0xd0cb, 0xd0cc, 0xd0cd, 0xd0ce, 0xd0cf, 0xd0d2, 0xd0d6, 0xd0d7, - 0xd0d8, 0xd0d9, 0xd0da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd0db, 0xd0de, 0xd0df, 0xd0e1, 0xd0e2, 0xd0e3, 0xd0e5, - 0xd0e6, 0xd0e7, 0xd0e8, 0xd0e9, 0xd0ea, 0xd0eb, 0xd0ee, 0xd0f2, - 0xd0f3, 0xd0f4, 0xd0f5, 0xd0f6, 0xd0f7, 0xd0f9, 0xd0fa, 0xd0fb, - 0xd0fc, 0xd0fd, 0xd0fe, 0xd0ff, 0xd100, 0xd101, 0xd102, 0xd103, - 0xd104, 0xb367, 0xb369, 0xb36b, 0xb36e, 0xb370, 0xb371, 0xb374, - 0xb378, 0xb380, 0xb381, 0xb383, 0xb384, 0xb385, 0xb38c, 0xb390, - 0xb394, 0xb3a0, 0xb3a1, 0xb3a8, 0xb3ac, 0xb3c4, 0xb3c5, 0xb3c8, - 0xb3cb, 0xb3cc, 0xb3ce, 0xb3d0, 0xb3d4, 0xb3d5, 0xb3d7, 0xb3d9, - 0xb3db, 0xb3dd, 0xb3e0, 0xb3e4, 0xb3e8, 0xb3fc, 0xb410, 0xb418, - 0xb41c, 0xb420, 0xb428, 0xb429, 0xb42b, 0xb434, 0xb450, 0xb451, - 0xb454, 0xb458, 0xb460, 0xb461, 0xb463, 0xb465, 0xb46c, 0xb480, - 0xb488, 0xb49d, 0xb4a4, 0xb4a8, 0xb4ac, 0xb4b5, 0xb4b7, 0xb4b9, - 0xb4c0, 0xb4c4, 0xb4c8, 0xb4d0, 0xb4d5, 0xb4dc, 0xb4dd, 0xb4e0, - 0xb4e3, 0xb4e4, 0xb4e6, 0xb4ec, 0xb4ed, 0xb4ef, 0xb4f1, 0xb4f8, - 0xb514, 0xb515, 0xb518, 0xb51b, 0xb51c, 0xb524, 0xb525, 0xb527, - 0xb528, 0xb529, 0xb52a, 0xb530, 0xb531, 0xb534, 0xb538, 0x003f, - /* lead byte b6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd105, 0xd106, 0xd107, 0xd108, 0xd109, 0xd10a, 0xd10b, - 0xd10c, 0xd10e, 0xd10f, 0xd110, 0xd111, 0xd112, 0xd113, 0xd114, - 0xd115, 0xd116, 0xd117, 0xd118, 0xd119, 0xd11a, 0xd11b, 0xd11c, - 0xd11d, 0xd11e, 0xd11f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd120, 0xd121, 0xd122, 0xd123, 0xd124, 0xd125, 0xd126, - 0xd127, 0xd128, 0xd129, 0xd12a, 0xd12b, 0xd12c, 0xd12d, 0xd12e, - 0xd12f, 0xd132, 0xd133, 0xd135, 0xd136, 0xd137, 0xd139, 0xd13b, - 0xd13c, 0xd13d, 0xd13e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd13f, 0xd142, 0xd146, 0xd147, 0xd148, 0xd149, 0xd14a, - 0xd14b, 0xd14e, 0xd14f, 0xd151, 0xd152, 0xd153, 0xd155, 0xd156, - 0xd157, 0xd158, 0xd159, 0xd15a, 0xd15b, 0xd15e, 0xd160, 0xd162, - 0xd163, 0xd164, 0xd165, 0xd166, 0xd167, 0xd169, 0xd16a, 0xd16b, - 0xd16d, 0xb540, 0xb541, 0xb543, 0xb544, 0xb545, 0xb54b, 0xb54c, - 0xb54d, 0xb550, 0xb554, 0xb55c, 0xb55d, 0xb55f, 0xb560, 0xb561, - 0xb5a0, 0xb5a1, 0xb5a4, 0xb5a8, 0xb5aa, 0xb5ab, 0xb5b0, 0xb5b1, - 0xb5b3, 0xb5b4, 0xb5b5, 0xb5bb, 0xb5bc, 0xb5bd, 0xb5c0, 0xb5c4, - 0xb5cc, 0xb5cd, 0xb5cf, 0xb5d0, 0xb5d1, 0xb5d8, 0xb5ec, 0xb610, - 0xb611, 0xb614, 0xb618, 0xb625, 0xb62c, 0xb634, 0xb648, 0xb664, - 0xb668, 0xb69c, 0xb69d, 0xb6a0, 0xb6a4, 0xb6ab, 0xb6ac, 0xb6b1, - 0xb6d4, 0xb6f0, 0xb6f4, 0xb6f8, 0xb700, 0xb701, 0xb705, 0xb728, - 0xb729, 0xb72c, 0xb72f, 0xb730, 0xb738, 0xb739, 0xb73b, 0xb744, - 0xb748, 0xb74c, 0xb754, 0xb755, 0xb760, 0xb764, 0xb768, 0xb770, - 0xb771, 0xb773, 0xb775, 0xb77c, 0xb77d, 0xb780, 0xb784, 0xb78c, - 0xb78d, 0xb78f, 0xb790, 0xb791, 0xb792, 0xb796, 0xb797, 0x003f, - /* lead byte b7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd16e, 0xd16f, 0xd170, 0xd171, 0xd172, 0xd173, 0xd174, - 0xd175, 0xd176, 0xd177, 0xd178, 0xd179, 0xd17a, 0xd17b, 0xd17d, - 0xd17e, 0xd17f, 0xd180, 0xd181, 0xd182, 0xd183, 0xd185, 0xd186, - 0xd187, 0xd189, 0xd18a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd18b, 0xd18c, 0xd18d, 0xd18e, 0xd18f, 0xd190, 0xd191, - 0xd192, 0xd193, 0xd194, 0xd195, 0xd196, 0xd197, 0xd198, 0xd199, - 0xd19a, 0xd19b, 0xd19c, 0xd19d, 0xd19e, 0xd19f, 0xd1a2, 0xd1a3, - 0xd1a5, 0xd1a6, 0xd1a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd1a9, 0xd1aa, 0xd1ab, 0xd1ac, 0xd1ad, 0xd1ae, 0xd1af, - 0xd1b2, 0xd1b4, 0xd1b6, 0xd1b7, 0xd1b8, 0xd1b9, 0xd1bb, 0xd1bd, - 0xd1be, 0xd1bf, 0xd1c1, 0xd1c2, 0xd1c3, 0xd1c4, 0xd1c5, 0xd1c6, - 0xd1c7, 0xd1c8, 0xd1c9, 0xd1ca, 0xd1cb, 0xd1cc, 0xd1cd, 0xd1ce, - 0xd1cf, 0xb798, 0xb799, 0xb79c, 0xb7a0, 0xb7a8, 0xb7a9, 0xb7ab, - 0xb7ac, 0xb7ad, 0xb7b4, 0xb7b5, 0xb7b8, 0xb7c7, 0xb7c9, 0xb7ec, - 0xb7ed, 0xb7f0, 0xb7f4, 0xb7fc, 0xb7fd, 0xb7ff, 0xb800, 0xb801, - 0xb807, 0xb808, 0xb809, 0xb80c, 0xb810, 0xb818, 0xb819, 0xb81b, - 0xb81d, 0xb824, 0xb825, 0xb828, 0xb82c, 0xb834, 0xb835, 0xb837, - 0xb838, 0xb839, 0xb840, 0xb844, 0xb851, 0xb853, 0xb85c, 0xb85d, - 0xb860, 0xb864, 0xb86c, 0xb86d, 0xb86f, 0xb871, 0xb878, 0xb87c, - 0xb88d, 0xb8a8, 0xb8b0, 0xb8b4, 0xb8b8, 0xb8c0, 0xb8c1, 0xb8c3, - 0xb8c5, 0xb8cc, 0xb8d0, 0xb8d4, 0xb8dd, 0xb8df, 0xb8e1, 0xb8e8, - 0xb8e9, 0xb8ec, 0xb8f0, 0xb8f8, 0xb8f9, 0xb8fb, 0xb8fd, 0xb904, - 0xb918, 0xb920, 0xb93c, 0xb93d, 0xb940, 0xb944, 0xb94c, 0xb94f, - 0xb951, 0xb958, 0xb959, 0xb95c, 0xb960, 0xb968, 0xb969, 0x003f, - /* lead byte b8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd1d0, 0xd1d1, 0xd1d2, 0xd1d3, 0xd1d4, 0xd1d5, 0xd1d6, - 0xd1d7, 0xd1d9, 0xd1da, 0xd1db, 0xd1dc, 0xd1dd, 0xd1de, 0xd1df, - 0xd1e0, 0xd1e1, 0xd1e2, 0xd1e3, 0xd1e4, 0xd1e5, 0xd1e6, 0xd1e7, - 0xd1e8, 0xd1e9, 0xd1ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd1eb, 0xd1ec, 0xd1ed, 0xd1ee, 0xd1ef, 0xd1f0, 0xd1f1, - 0xd1f2, 0xd1f3, 0xd1f5, 0xd1f6, 0xd1f7, 0xd1f9, 0xd1fa, 0xd1fb, - 0xd1fc, 0xd1fd, 0xd1fe, 0xd1ff, 0xd200, 0xd201, 0xd202, 0xd203, - 0xd204, 0xd205, 0xd206, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd208, 0xd20a, 0xd20b, 0xd20c, 0xd20d, 0xd20e, 0xd20f, - 0xd211, 0xd212, 0xd213, 0xd214, 0xd215, 0xd216, 0xd217, 0xd218, - 0xd219, 0xd21a, 0xd21b, 0xd21c, 0xd21d, 0xd21e, 0xd21f, 0xd220, - 0xd221, 0xd222, 0xd223, 0xd224, 0xd225, 0xd226, 0xd227, 0xd228, - 0xd229, 0xb96b, 0xb96d, 0xb974, 0xb975, 0xb978, 0xb97c, 0xb984, - 0xb985, 0xb987, 0xb989, 0xb98a, 0xb98d, 0xb98e, 0xb9ac, 0xb9ad, - 0xb9b0, 0xb9b4, 0xb9bc, 0xb9bd, 0xb9bf, 0xb9c1, 0xb9c8, 0xb9c9, - 0xb9cc, 0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d8, 0xb9d9, - 0xb9db, 0xb9dd, 0xb9de, 0xb9e1, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e8, - 0xb9ec, 0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9f9, 0xb9fa, 0xba00, - 0xba01, 0xba08, 0xba15, 0xba38, 0xba39, 0xba3c, 0xba40, 0xba42, - 0xba48, 0xba49, 0xba4b, 0xba4d, 0xba4e, 0xba53, 0xba54, 0xba55, - 0xba58, 0xba5c, 0xba64, 0xba65, 0xba67, 0xba68, 0xba69, 0xba70, - 0xba71, 0xba74, 0xba78, 0xba83, 0xba84, 0xba85, 0xba87, 0xba8c, - 0xbaa8, 0xbaa9, 0xbaab, 0xbaac, 0xbab0, 0xbab2, 0xbab8, 0xbab9, - 0xbabb, 0xbabd, 0xbac4, 0xbac8, 0xbad8, 0xbad9, 0xbafc, 0x003f, - /* lead byte b9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd22a, 0xd22b, 0xd22e, 0xd22f, 0xd231, 0xd232, 0xd233, - 0xd235, 0xd236, 0xd237, 0xd238, 0xd239, 0xd23a, 0xd23b, 0xd23e, - 0xd240, 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, 0xd249, - 0xd24a, 0xd24b, 0xd24c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd24d, 0xd24e, 0xd24f, 0xd250, 0xd251, 0xd252, 0xd253, - 0xd254, 0xd255, 0xd256, 0xd257, 0xd258, 0xd259, 0xd25a, 0xd25b, - 0xd25d, 0xd25e, 0xd25f, 0xd260, 0xd261, 0xd262, 0xd263, 0xd265, - 0xd266, 0xd267, 0xd268, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd269, 0xd26a, 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, - 0xd270, 0xd271, 0xd272, 0xd273, 0xd274, 0xd275, 0xd276, 0xd277, - 0xd278, 0xd279, 0xd27a, 0xd27b, 0xd27c, 0xd27d, 0xd27e, 0xd27f, - 0xd282, 0xd283, 0xd285, 0xd286, 0xd287, 0xd289, 0xd28a, 0xd28b, - 0xd28c, 0xbb00, 0xbb04, 0xbb0d, 0xbb0f, 0xbb11, 0xbb18, 0xbb1c, - 0xbb20, 0xbb29, 0xbb2b, 0xbb34, 0xbb35, 0xbb36, 0xbb38, 0xbb3b, - 0xbb3c, 0xbb3d, 0xbb3e, 0xbb44, 0xbb45, 0xbb47, 0xbb49, 0xbb4d, - 0xbb4f, 0xbb50, 0xbb54, 0xbb58, 0xbb61, 0xbb63, 0xbb6c, 0xbb88, - 0xbb8c, 0xbb90, 0xbba4, 0xbba8, 0xbbac, 0xbbb4, 0xbbb7, 0xbbc0, - 0xbbc4, 0xbbc8, 0xbbd0, 0xbbd3, 0xbbf8, 0xbbf9, 0xbbfc, 0xbbff, - 0xbc00, 0xbc02, 0xbc08, 0xbc09, 0xbc0b, 0xbc0c, 0xbc0d, 0xbc0f, - 0xbc11, 0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc1b, 0xbc1c, - 0xbc1d, 0xbc1e, 0xbc1f, 0xbc24, 0xbc25, 0xbc27, 0xbc29, 0xbc2d, - 0xbc30, 0xbc31, 0xbc34, 0xbc38, 0xbc40, 0xbc41, 0xbc43, 0xbc44, - 0xbc45, 0xbc49, 0xbc4c, 0xbc4d, 0xbc50, 0xbc5d, 0xbc84, 0xbc85, - 0xbc88, 0xbc8b, 0xbc8c, 0xbc8e, 0xbc94, 0xbc95, 0xbc97, 0x003f, - /* lead byte ba */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd28d, 0xd28e, 0xd28f, 0xd292, 0xd293, 0xd294, 0xd296, - 0xd297, 0xd298, 0xd299, 0xd29a, 0xd29b, 0xd29d, 0xd29e, 0xd29f, - 0xd2a1, 0xd2a2, 0xd2a3, 0xd2a5, 0xd2a6, 0xd2a7, 0xd2a8, 0xd2a9, - 0xd2aa, 0xd2ab, 0xd2ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd2ae, 0xd2af, 0xd2b0, 0xd2b2, 0xd2b3, 0xd2b4, 0xd2b5, - 0xd2b6, 0xd2b7, 0xd2ba, 0xd2bb, 0xd2bd, 0xd2be, 0xd2c1, 0xd2c3, - 0xd2c4, 0xd2c5, 0xd2c6, 0xd2c7, 0xd2ca, 0xd2cc, 0xd2cd, 0xd2ce, - 0xd2cf, 0xd2d0, 0xd2d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd2d2, 0xd2d3, 0xd2d5, 0xd2d6, 0xd2d7, 0xd2d9, 0xd2da, - 0xd2db, 0xd2dd, 0xd2de, 0xd2df, 0xd2e0, 0xd2e1, 0xd2e2, 0xd2e3, - 0xd2e6, 0xd2e7, 0xd2e8, 0xd2e9, 0xd2ea, 0xd2eb, 0xd2ec, 0xd2ed, - 0xd2ee, 0xd2ef, 0xd2f2, 0xd2f3, 0xd2f5, 0xd2f6, 0xd2f7, 0xd2f9, - 0xd2fa, 0xbc99, 0xbc9a, 0xbca0, 0xbca1, 0xbca4, 0xbca7, 0xbca8, - 0xbcb0, 0xbcb1, 0xbcb3, 0xbcb4, 0xbcb5, 0xbcbc, 0xbcbd, 0xbcc0, - 0xbcc4, 0xbccd, 0xbccf, 0xbcd0, 0xbcd1, 0xbcd5, 0xbcd8, 0xbcdc, - 0xbcf4, 0xbcf5, 0xbcf6, 0xbcf8, 0xbcfc, 0xbd04, 0xbd05, 0xbd07, - 0xbd09, 0xbd10, 0xbd14, 0xbd24, 0xbd2c, 0xbd40, 0xbd48, 0xbd49, - 0xbd4c, 0xbd50, 0xbd58, 0xbd59, 0xbd64, 0xbd68, 0xbd80, 0xbd81, - 0xbd84, 0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd90, 0xbd91, 0xbd93, - 0xbd95, 0xbd99, 0xbd9a, 0xbd9c, 0xbda4, 0xbdb0, 0xbdb8, 0xbdd4, - 0xbdd5, 0xbdd8, 0xbddc, 0xbde9, 0xbdf0, 0xbdf4, 0xbdf8, 0xbe00, - 0xbe03, 0xbe05, 0xbe0c, 0xbe0d, 0xbe10, 0xbe14, 0xbe1c, 0xbe1d, - 0xbe1f, 0xbe44, 0xbe45, 0xbe48, 0xbe4c, 0xbe4e, 0xbe54, 0xbe55, - 0xbe57, 0xbe59, 0xbe5a, 0xbe5b, 0xbe60, 0xbe61, 0xbe64, 0x003f, - /* lead byte bb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd2fb, 0xd2fc, 0xd2fd, 0xd2fe, 0xd2ff, 0xd302, 0xd304, - 0xd306, 0xd307, 0xd308, 0xd309, 0xd30a, 0xd30b, 0xd30f, 0xd311, - 0xd312, 0xd313, 0xd315, 0xd317, 0xd318, 0xd319, 0xd31a, 0xd31b, - 0xd31e, 0xd322, 0xd323, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd324, 0xd326, 0xd327, 0xd32a, 0xd32b, 0xd32d, 0xd32e, - 0xd32f, 0xd331, 0xd332, 0xd333, 0xd334, 0xd335, 0xd336, 0xd337, - 0xd33a, 0xd33e, 0xd33f, 0xd340, 0xd341, 0xd342, 0xd343, 0xd346, - 0xd347, 0xd348, 0xd349, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd34a, 0xd34b, 0xd34c, 0xd34d, 0xd34e, 0xd34f, 0xd350, - 0xd351, 0xd352, 0xd353, 0xd354, 0xd355, 0xd356, 0xd357, 0xd358, - 0xd359, 0xd35a, 0xd35b, 0xd35c, 0xd35d, 0xd35e, 0xd35f, 0xd360, - 0xd361, 0xd362, 0xd363, 0xd364, 0xd365, 0xd366, 0xd367, 0xd368, - 0xd369, 0xbe68, 0xbe6a, 0xbe70, 0xbe71, 0xbe73, 0xbe74, 0xbe75, - 0xbe7b, 0xbe7c, 0xbe7d, 0xbe80, 0xbe84, 0xbe8c, 0xbe8d, 0xbe8f, - 0xbe90, 0xbe91, 0xbe98, 0xbe99, 0xbea8, 0xbed0, 0xbed1, 0xbed4, - 0xbed7, 0xbed8, 0xbee0, 0xbee3, 0xbee4, 0xbee5, 0xbeec, 0xbf01, - 0xbf08, 0xbf09, 0xbf18, 0xbf19, 0xbf1b, 0xbf1c, 0xbf1d, 0xbf40, - 0xbf41, 0xbf44, 0xbf48, 0xbf50, 0xbf51, 0xbf55, 0xbf94, 0xbfb0, - 0xbfc5, 0xbfcc, 0xbfcd, 0xbfd0, 0xbfd4, 0xbfdc, 0xbfdf, 0xbfe1, - 0xc03c, 0xc051, 0xc058, 0xc05c, 0xc060, 0xc068, 0xc069, 0xc090, - 0xc091, 0xc094, 0xc098, 0xc0a0, 0xc0a1, 0xc0a3, 0xc0a5, 0xc0ac, - 0xc0ad, 0xc0af, 0xc0b0, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0bc, - 0xc0bd, 0xc0bf, 0xc0c0, 0xc0c1, 0xc0c5, 0xc0c8, 0xc0c9, 0xc0cc, - 0xc0d0, 0xc0d8, 0xc0d9, 0xc0db, 0xc0dc, 0xc0dd, 0xc0e4, 0x003f, - /* lead byte bc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd36a, 0xd36b, 0xd36c, 0xd36d, 0xd36e, 0xd36f, 0xd370, - 0xd371, 0xd372, 0xd373, 0xd374, 0xd375, 0xd376, 0xd377, 0xd378, - 0xd379, 0xd37a, 0xd37b, 0xd37e, 0xd37f, 0xd381, 0xd382, 0xd383, - 0xd385, 0xd386, 0xd387, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd388, 0xd389, 0xd38a, 0xd38b, 0xd38e, 0xd392, 0xd393, - 0xd394, 0xd395, 0xd396, 0xd397, 0xd39a, 0xd39b, 0xd39d, 0xd39e, - 0xd39f, 0xd3a1, 0xd3a2, 0xd3a3, 0xd3a4, 0xd3a5, 0xd3a6, 0xd3a7, - 0xd3aa, 0xd3ac, 0xd3ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3af, 0xd3b0, 0xd3b1, 0xd3b2, 0xd3b3, 0xd3b5, 0xd3b6, - 0xd3b7, 0xd3b9, 0xd3ba, 0xd3bb, 0xd3bd, 0xd3be, 0xd3bf, 0xd3c0, - 0xd3c1, 0xd3c2, 0xd3c3, 0xd3c6, 0xd3c7, 0xd3ca, 0xd3cb, 0xd3cc, - 0xd3cd, 0xd3ce, 0xd3cf, 0xd3d1, 0xd3d2, 0xd3d3, 0xd3d4, 0xd3d5, - 0xd3d6, 0xc0e5, 0xc0e8, 0xc0ec, 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f9, - 0xc100, 0xc104, 0xc108, 0xc110, 0xc115, 0xc11c, 0xc11d, 0xc11e, - 0xc11f, 0xc120, 0xc123, 0xc124, 0xc126, 0xc127, 0xc12c, 0xc12d, - 0xc12f, 0xc130, 0xc131, 0xc136, 0xc138, 0xc139, 0xc13c, 0xc140, - 0xc148, 0xc149, 0xc14b, 0xc14c, 0xc14d, 0xc154, 0xc155, 0xc158, - 0xc15c, 0xc164, 0xc165, 0xc167, 0xc168, 0xc169, 0xc170, 0xc174, - 0xc178, 0xc185, 0xc18c, 0xc18d, 0xc18e, 0xc190, 0xc194, 0xc196, - 0xc19c, 0xc19d, 0xc19f, 0xc1a1, 0xc1a5, 0xc1a8, 0xc1a9, 0xc1ac, - 0xc1b0, 0xc1bd, 0xc1c4, 0xc1c8, 0xc1cc, 0xc1d4, 0xc1d7, 0xc1d8, - 0xc1e0, 0xc1e4, 0xc1e8, 0xc1f0, 0xc1f1, 0xc1f3, 0xc1fc, 0xc1fd, - 0xc200, 0xc204, 0xc20c, 0xc20d, 0xc20f, 0xc211, 0xc218, 0xc219, - 0xc21c, 0xc21f, 0xc220, 0xc228, 0xc229, 0xc22b, 0xc22d, 0x003f, - /* lead byte bd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3d7, 0xd3d9, 0xd3da, 0xd3db, 0xd3dc, 0xd3dd, 0xd3de, - 0xd3df, 0xd3e0, 0xd3e2, 0xd3e4, 0xd3e5, 0xd3e6, 0xd3e7, 0xd3e8, - 0xd3e9, 0xd3ea, 0xd3eb, 0xd3ee, 0xd3ef, 0xd3f1, 0xd3f2, 0xd3f3, - 0xd3f5, 0xd3f6, 0xd3f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3f8, 0xd3f9, 0xd3fa, 0xd3fb, 0xd3fe, 0xd400, 0xd402, - 0xd403, 0xd404, 0xd405, 0xd406, 0xd407, 0xd409, 0xd40a, 0xd40b, - 0xd40c, 0xd40d, 0xd40e, 0xd40f, 0xd410, 0xd411, 0xd412, 0xd413, - 0xd414, 0xd415, 0xd416, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd417, 0xd418, 0xd419, 0xd41a, 0xd41b, 0xd41c, 0xd41e, - 0xd41f, 0xd420, 0xd421, 0xd422, 0xd423, 0xd424, 0xd425, 0xd426, - 0xd427, 0xd428, 0xd429, 0xd42a, 0xd42b, 0xd42c, 0xd42d, 0xd42e, - 0xd42f, 0xd430, 0xd431, 0xd432, 0xd433, 0xd434, 0xd435, 0xd436, - 0xd437, 0xc22f, 0xc231, 0xc232, 0xc234, 0xc248, 0xc250, 0xc251, - 0xc254, 0xc258, 0xc260, 0xc265, 0xc26c, 0xc26d, 0xc270, 0xc274, - 0xc27c, 0xc27d, 0xc27f, 0xc281, 0xc288, 0xc289, 0xc290, 0xc298, - 0xc29b, 0xc29d, 0xc2a4, 0xc2a5, 0xc2a8, 0xc2ac, 0xc2ad, 0xc2b4, - 0xc2b5, 0xc2b7, 0xc2b9, 0xc2dc, 0xc2dd, 0xc2e0, 0xc2e3, 0xc2e4, - 0xc2eb, 0xc2ec, 0xc2ed, 0xc2ef, 0xc2f1, 0xc2f6, 0xc2f8, 0xc2f9, - 0xc2fb, 0xc2fc, 0xc300, 0xc308, 0xc309, 0xc30c, 0xc30d, 0xc313, - 0xc314, 0xc315, 0xc318, 0xc31c, 0xc324, 0xc325, 0xc328, 0xc329, - 0xc345, 0xc368, 0xc369, 0xc36c, 0xc370, 0xc372, 0xc378, 0xc379, - 0xc37c, 0xc37d, 0xc384, 0xc388, 0xc38c, 0xc3c0, 0xc3d8, 0xc3d9, - 0xc3dc, 0xc3df, 0xc3e0, 0xc3e2, 0xc3e8, 0xc3e9, 0xc3ed, 0xc3f4, - 0xc3f5, 0xc3f8, 0xc408, 0xc410, 0xc424, 0xc42c, 0xc430, 0x003f, - /* lead byte be */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd438, 0xd439, 0xd43a, 0xd43b, 0xd43c, 0xd43d, 0xd43e, - 0xd43f, 0xd441, 0xd442, 0xd443, 0xd445, 0xd446, 0xd447, 0xd448, - 0xd449, 0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f, 0xd450, - 0xd451, 0xd452, 0xd453, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd454, 0xd455, 0xd456, 0xd457, 0xd458, 0xd459, 0xd45a, - 0xd45b, 0xd45d, 0xd45e, 0xd45f, 0xd461, 0xd462, 0xd463, 0xd465, - 0xd466, 0xd467, 0xd468, 0xd469, 0xd46a, 0xd46b, 0xd46c, 0xd46e, - 0xd470, 0xd471, 0xd472, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, 0xd47a, 0xd47b, - 0xd47d, 0xd47e, 0xd481, 0xd483, 0xd484, 0xd485, 0xd486, 0xd487, - 0xd48a, 0xd48c, 0xd48e, 0xd48f, 0xd490, 0xd491, 0xd492, 0xd493, - 0xd495, 0xd496, 0xd497, 0xd498, 0xd499, 0xd49a, 0xd49b, 0xd49c, - 0xd49d, 0xc434, 0xc43c, 0xc43d, 0xc448, 0xc464, 0xc465, 0xc468, - 0xc46c, 0xc474, 0xc475, 0xc479, 0xc480, 0xc494, 0xc49c, 0xc4b8, - 0xc4bc, 0xc4e9, 0xc4f0, 0xc4f1, 0xc4f4, 0xc4f8, 0xc4fa, 0xc4ff, - 0xc500, 0xc501, 0xc50c, 0xc510, 0xc514, 0xc51c, 0xc528, 0xc529, - 0xc52c, 0xc530, 0xc538, 0xc539, 0xc53b, 0xc53d, 0xc544, 0xc545, - 0xc548, 0xc549, 0xc54a, 0xc54c, 0xc54d, 0xc54e, 0xc553, 0xc554, - 0xc555, 0xc557, 0xc558, 0xc559, 0xc55d, 0xc55e, 0xc560, 0xc561, - 0xc564, 0xc568, 0xc570, 0xc571, 0xc573, 0xc574, 0xc575, 0xc57c, - 0xc57d, 0xc580, 0xc584, 0xc587, 0xc58c, 0xc58d, 0xc58f, 0xc591, - 0xc595, 0xc597, 0xc598, 0xc59c, 0xc5a0, 0xc5a9, 0xc5b4, 0xc5b5, - 0xc5b8, 0xc5b9, 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5c4, 0xc5c5, - 0xc5c6, 0xc5c7, 0xc5c8, 0xc5c9, 0xc5ca, 0xc5cc, 0xc5ce, 0x003f, - /* lead byte bf */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd49e, 0xd49f, 0xd4a0, 0xd4a1, 0xd4a2, 0xd4a3, 0xd4a4, - 0xd4a5, 0xd4a6, 0xd4a7, 0xd4a8, 0xd4aa, 0xd4ab, 0xd4ac, 0xd4ad, - 0xd4ae, 0xd4af, 0xd4b0, 0xd4b1, 0xd4b2, 0xd4b3, 0xd4b4, 0xd4b5, - 0xd4b6, 0xd4b7, 0xd4b8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4b9, 0xd4ba, 0xd4bb, 0xd4bc, 0xd4bd, 0xd4be, 0xd4bf, - 0xd4c0, 0xd4c1, 0xd4c2, 0xd4c3, 0xd4c4, 0xd4c5, 0xd4c6, 0xd4c7, - 0xd4c8, 0xd4c9, 0xd4ca, 0xd4cb, 0xd4cd, 0xd4ce, 0xd4cf, 0xd4d1, - 0xd4d2, 0xd4d3, 0xd4d5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4d6, 0xd4d7, 0xd4d8, 0xd4d9, 0xd4da, 0xd4db, 0xd4dd, - 0xd4de, 0xd4e0, 0xd4e1, 0xd4e2, 0xd4e3, 0xd4e4, 0xd4e5, 0xd4e6, - 0xd4e7, 0xd4e9, 0xd4ea, 0xd4eb, 0xd4ed, 0xd4ee, 0xd4ef, 0xd4f1, - 0xd4f2, 0xd4f3, 0xd4f4, 0xd4f5, 0xd4f6, 0xd4f7, 0xd4f9, 0xd4fa, - 0xd4fc, 0xc5d0, 0xc5d1, 0xc5d4, 0xc5d8, 0xc5e0, 0xc5e1, 0xc5e3, - 0xc5e5, 0xc5ec, 0xc5ed, 0xc5ee, 0xc5f0, 0xc5f4, 0xc5f6, 0xc5f7, - 0xc5fc, 0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601, 0xc605, 0xc606, - 0xc607, 0xc608, 0xc60c, 0xc610, 0xc618, 0xc619, 0xc61b, 0xc61c, - 0xc624, 0xc625, 0xc628, 0xc62c, 0xc62d, 0xc62e, 0xc630, 0xc633, - 0xc634, 0xc635, 0xc637, 0xc639, 0xc63b, 0xc640, 0xc641, 0xc644, - 0xc648, 0xc650, 0xc651, 0xc653, 0xc654, 0xc655, 0xc65c, 0xc65d, - 0xc660, 0xc66c, 0xc66f, 0xc671, 0xc678, 0xc679, 0xc67c, 0xc680, - 0xc688, 0xc689, 0xc68b, 0xc68d, 0xc694, 0xc695, 0xc698, 0xc69c, - 0xc6a4, 0xc6a5, 0xc6a7, 0xc6a9, 0xc6b0, 0xc6b1, 0xc6b4, 0xc6b8, - 0xc6b9, 0xc6ba, 0xc6c0, 0xc6c1, 0xc6c3, 0xc6c5, 0xc6cc, 0xc6cd, - 0xc6d0, 0xc6d4, 0xc6dc, 0xc6dd, 0xc6e0, 0xc6e1, 0xc6e8, 0x003f, - /* lead byte c0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4fe, 0xd4ff, 0xd500, 0xd501, 0xd502, 0xd503, 0xd505, - 0xd506, 0xd507, 0xd509, 0xd50a, 0xd50b, 0xd50d, 0xd50e, 0xd50f, - 0xd510, 0xd511, 0xd512, 0xd513, 0xd516, 0xd518, 0xd519, 0xd51a, - 0xd51b, 0xd51c, 0xd51d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd51e, 0xd51f, 0xd520, 0xd521, 0xd522, 0xd523, 0xd524, - 0xd525, 0xd526, 0xd527, 0xd528, 0xd529, 0xd52a, 0xd52b, 0xd52c, - 0xd52d, 0xd52e, 0xd52f, 0xd530, 0xd531, 0xd532, 0xd533, 0xd534, - 0xd535, 0xd536, 0xd537, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd538, 0xd539, 0xd53a, 0xd53b, 0xd53e, 0xd53f, 0xd541, - 0xd542, 0xd543, 0xd545, 0xd546, 0xd547, 0xd548, 0xd549, 0xd54a, - 0xd54b, 0xd54e, 0xd550, 0xd552, 0xd553, 0xd554, 0xd555, 0xd556, - 0xd557, 0xd55a, 0xd55b, 0xd55d, 0xd55e, 0xd55f, 0xd561, 0xd562, - 0xd563, 0xc6e9, 0xc6ec, 0xc6f0, 0xc6f8, 0xc6f9, 0xc6fd, 0xc704, - 0xc705, 0xc708, 0xc70c, 0xc714, 0xc715, 0xc717, 0xc719, 0xc720, - 0xc721, 0xc724, 0xc728, 0xc730, 0xc731, 0xc733, 0xc735, 0xc737, - 0xc73c, 0xc73d, 0xc740, 0xc744, 0xc74a, 0xc74c, 0xc74d, 0xc74f, - 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, - 0xc75c, 0xc760, 0xc768, 0xc76b, 0xc774, 0xc775, 0xc778, 0xc77c, - 0xc77d, 0xc77e, 0xc783, 0xc784, 0xc785, 0xc787, 0xc788, 0xc789, - 0xc78a, 0xc78e, 0xc790, 0xc791, 0xc794, 0xc796, 0xc797, 0xc798, - 0xc79a, 0xc7a0, 0xc7a1, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7ac, - 0xc7ad, 0xc7b0, 0xc7b4, 0xc7bc, 0xc7bd, 0xc7bf, 0xc7c0, 0xc7c1, - 0xc7c8, 0xc7c9, 0xc7cc, 0xc7ce, 0xc7d0, 0xc7d8, 0xc7dd, 0xc7e4, - 0xc7e8, 0xc7ec, 0xc800, 0xc801, 0xc804, 0xc808, 0xc80a, 0x003f, - /* lead byte c1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd564, 0xd566, 0xd567, 0xd56a, 0xd56c, 0xd56e, 0xd56f, - 0xd570, 0xd571, 0xd572, 0xd573, 0xd576, 0xd577, 0xd579, 0xd57a, - 0xd57b, 0xd57d, 0xd57e, 0xd57f, 0xd580, 0xd581, 0xd582, 0xd583, - 0xd586, 0xd58a, 0xd58b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd58c, 0xd58d, 0xd58e, 0xd58f, 0xd591, 0xd592, 0xd593, - 0xd594, 0xd595, 0xd596, 0xd597, 0xd598, 0xd599, 0xd59a, 0xd59b, - 0xd59c, 0xd59d, 0xd59e, 0xd59f, 0xd5a0, 0xd5a1, 0xd5a2, 0xd5a3, - 0xd5a4, 0xd5a6, 0xd5a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd5a8, 0xd5a9, 0xd5aa, 0xd5ab, 0xd5ac, 0xd5ad, 0xd5ae, - 0xd5af, 0xd5b0, 0xd5b1, 0xd5b2, 0xd5b3, 0xd5b4, 0xd5b5, 0xd5b6, - 0xd5b7, 0xd5b8, 0xd5b9, 0xd5ba, 0xd5bb, 0xd5bc, 0xd5bd, 0xd5be, - 0xd5bf, 0xd5c0, 0xd5c1, 0xd5c2, 0xd5c3, 0xd5c4, 0xd5c5, 0xd5c6, - 0xd5c7, 0xc810, 0xc811, 0xc813, 0xc815, 0xc816, 0xc81c, 0xc81d, - 0xc820, 0xc824, 0xc82c, 0xc82d, 0xc82f, 0xc831, 0xc838, 0xc83c, - 0xc840, 0xc848, 0xc849, 0xc84c, 0xc84d, 0xc854, 0xc870, 0xc871, - 0xc874, 0xc878, 0xc87a, 0xc880, 0xc881, 0xc883, 0xc885, 0xc886, - 0xc887, 0xc88b, 0xc88c, 0xc88d, 0xc894, 0xc89d, 0xc89f, 0xc8a1, - 0xc8a8, 0xc8bc, 0xc8bd, 0xc8c4, 0xc8c8, 0xc8cc, 0xc8d4, 0xc8d5, - 0xc8d7, 0xc8d9, 0xc8e0, 0xc8e1, 0xc8e4, 0xc8f5, 0xc8fc, 0xc8fd, - 0xc900, 0xc904, 0xc905, 0xc906, 0xc90c, 0xc90d, 0xc90f, 0xc911, - 0xc918, 0xc92c, 0xc934, 0xc950, 0xc951, 0xc954, 0xc958, 0xc960, - 0xc961, 0xc963, 0xc96c, 0xc970, 0xc974, 0xc97c, 0xc988, 0xc989, - 0xc98c, 0xc990, 0xc998, 0xc999, 0xc99b, 0xc99d, 0xc9c0, 0xc9c1, - 0xc9c4, 0xc9c7, 0xc9c8, 0xc9ca, 0xc9d0, 0xc9d1, 0xc9d3, 0x003f, - /* lead byte c2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd5ca, 0xd5cb, 0xd5cd, 0xd5ce, 0xd5cf, 0xd5d1, 0xd5d3, - 0xd5d4, 0xd5d5, 0xd5d6, 0xd5d7, 0xd5da, 0xd5dc, 0xd5de, 0xd5df, - 0xd5e0, 0xd5e1, 0xd5e2, 0xd5e3, 0xd5e6, 0xd5e7, 0xd5e9, 0xd5ea, - 0xd5eb, 0xd5ed, 0xd5ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd5ef, 0xd5f0, 0xd5f1, 0xd5f2, 0xd5f3, 0xd5f6, 0xd5f8, - 0xd5fa, 0xd5fb, 0xd5fc, 0xd5fd, 0xd5fe, 0xd5ff, 0xd602, 0xd603, - 0xd605, 0xd606, 0xd607, 0xd609, 0xd60a, 0xd60b, 0xd60c, 0xd60d, - 0xd60e, 0xd60f, 0xd612, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd616, 0xd617, 0xd618, 0xd619, 0xd61a, 0xd61b, 0xd61d, - 0xd61e, 0xd61f, 0xd621, 0xd622, 0xd623, 0xd625, 0xd626, 0xd627, - 0xd628, 0xd629, 0xd62a, 0xd62b, 0xd62c, 0xd62e, 0xd62f, 0xd630, - 0xd631, 0xd632, 0xd633, 0xd634, 0xd635, 0xd636, 0xd637, 0xd63a, - 0xd63b, 0xc9d5, 0xc9d6, 0xc9d9, 0xc9da, 0xc9dc, 0xc9dd, 0xc9e0, - 0xc9e2, 0xc9e4, 0xc9e7, 0xc9ec, 0xc9ed, 0xc9ef, 0xc9f0, 0xc9f1, - 0xc9f8, 0xc9f9, 0xc9fc, 0xca00, 0xca08, 0xca09, 0xca0b, 0xca0c, - 0xca0d, 0xca14, 0xca18, 0xca29, 0xca4c, 0xca4d, 0xca50, 0xca54, - 0xca5c, 0xca5d, 0xca5f, 0xca60, 0xca61, 0xca68, 0xca7d, 0xca84, - 0xca98, 0xcabc, 0xcabd, 0xcac0, 0xcac4, 0xcacc, 0xcacd, 0xcacf, - 0xcad1, 0xcad3, 0xcad8, 0xcad9, 0xcae0, 0xcaec, 0xcaf4, 0xcb08, - 0xcb10, 0xcb14, 0xcb18, 0xcb20, 0xcb21, 0xcb41, 0xcb48, 0xcb49, - 0xcb4c, 0xcb50, 0xcb58, 0xcb59, 0xcb5d, 0xcb64, 0xcb78, 0xcb79, - 0xcb9c, 0xcbb8, 0xcbd4, 0xcbe4, 0xcbe7, 0xcbe9, 0xcc0c, 0xcc0d, - 0xcc10, 0xcc14, 0xcc1c, 0xcc1d, 0xcc21, 0xcc22, 0xcc27, 0xcc28, - 0xcc29, 0xcc2c, 0xcc2e, 0xcc30, 0xcc38, 0xcc39, 0xcc3b, 0x003f, - /* lead byte c3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd63d, 0xd63e, 0xd63f, 0xd641, 0xd642, 0xd643, 0xd644, - 0xd646, 0xd647, 0xd64a, 0xd64c, 0xd64e, 0xd64f, 0xd650, 0xd652, - 0xd653, 0xd656, 0xd657, 0xd659, 0xd65a, 0xd65b, 0xd65d, 0xd65e, - 0xd65f, 0xd660, 0xd661, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd662, 0xd663, 0xd664, 0xd665, 0xd666, 0xd668, 0xd66a, - 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0xd672, 0xd673, 0xd675, - 0xd676, 0xd677, 0xd678, 0xd679, 0xd67a, 0xd67b, 0xd67c, 0xd67d, - 0xd67e, 0xd67f, 0xd680, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd681, 0xd682, 0xd684, 0xd686, 0xd687, 0xd688, 0xd689, - 0xd68a, 0xd68b, 0xd68e, 0xd68f, 0xd691, 0xd692, 0xd693, 0xd695, - 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a, 0xd69b, 0xd69c, 0xd69e, - 0xd6a0, 0xd6a2, 0xd6a3, 0xd6a4, 0xd6a5, 0xd6a6, 0xd6a7, 0xd6a9, - 0xd6aa, 0xcc3c, 0xcc3d, 0xcc3e, 0xcc44, 0xcc45, 0xcc48, 0xcc4c, - 0xcc54, 0xcc55, 0xcc57, 0xcc58, 0xcc59, 0xcc60, 0xcc64, 0xcc66, - 0xcc68, 0xcc70, 0xcc75, 0xcc98, 0xcc99, 0xcc9c, 0xcca0, 0xcca8, - 0xcca9, 0xccab, 0xccac, 0xccad, 0xccb4, 0xccb5, 0xccb8, 0xccbc, - 0xccc4, 0xccc5, 0xccc7, 0xccc9, 0xccd0, 0xccd4, 0xcce4, 0xccec, - 0xccf0, 0xcd01, 0xcd08, 0xcd09, 0xcd0c, 0xcd10, 0xcd18, 0xcd19, - 0xcd1b, 0xcd1d, 0xcd24, 0xcd28, 0xcd2c, 0xcd39, 0xcd5c, 0xcd60, - 0xcd64, 0xcd6c, 0xcd6d, 0xcd6f, 0xcd71, 0xcd78, 0xcd88, 0xcd94, - 0xcd95, 0xcd98, 0xcd9c, 0xcda4, 0xcda5, 0xcda7, 0xcda9, 0xcdb0, - 0xcdc4, 0xcdcc, 0xcdd0, 0xcde8, 0xcdec, 0xcdf0, 0xcdf8, 0xcdf9, - 0xcdfb, 0xcdfd, 0xce04, 0xce08, 0xce0c, 0xce14, 0xce19, 0xce20, - 0xce21, 0xce24, 0xce28, 0xce30, 0xce31, 0xce33, 0xce35, 0x003f, - /* lead byte c4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd6ab, 0xd6ad, 0xd6ae, 0xd6af, 0xd6b1, 0xd6b2, 0xd6b3, - 0xd6b4, 0xd6b5, 0xd6b6, 0xd6b7, 0xd6b8, 0xd6ba, 0xd6bc, 0xd6bd, - 0xd6be, 0xd6bf, 0xd6c0, 0xd6c1, 0xd6c2, 0xd6c3, 0xd6c6, 0xd6c7, - 0xd6c9, 0xd6ca, 0xd6cb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd6cd, 0xd6ce, 0xd6cf, 0xd6d0, 0xd6d2, 0xd6d3, 0xd6d5, - 0xd6d6, 0xd6d8, 0xd6da, 0xd6db, 0xd6dc, 0xd6dd, 0xd6de, 0xd6df, - 0xd6e1, 0xd6e2, 0xd6e3, 0xd6e5, 0xd6e6, 0xd6e7, 0xd6e9, 0xd6ea, - 0xd6eb, 0xd6ec, 0xd6ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd6ee, 0xd6ef, 0xd6f1, 0xd6f2, 0xd6f3, 0xd6f4, 0xd6f6, - 0xd6f7, 0xd6f8, 0xd6f9, 0xd6fa, 0xd6fb, 0xd6fe, 0xd6ff, 0xd701, - 0xd702, 0xd703, 0xd705, 0xd706, 0xd707, 0xd708, 0xd709, 0xd70a, - 0xd70b, 0xd70c, 0xd70d, 0xd70e, 0xd70f, 0xd710, 0xd712, 0xd713, - 0xd714, 0xce58, 0xce59, 0xce5c, 0xce5f, 0xce60, 0xce61, 0xce68, - 0xce69, 0xce6b, 0xce6d, 0xce74, 0xce75, 0xce78, 0xce7c, 0xce84, - 0xce85, 0xce87, 0xce89, 0xce90, 0xce91, 0xce94, 0xce98, 0xcea0, - 0xcea1, 0xcea3, 0xcea4, 0xcea5, 0xceac, 0xcead, 0xcec1, 0xcee4, - 0xcee5, 0xcee8, 0xceeb, 0xceec, 0xcef4, 0xcef5, 0xcef7, 0xcef8, - 0xcef9, 0xcf00, 0xcf01, 0xcf04, 0xcf08, 0xcf10, 0xcf11, 0xcf13, - 0xcf15, 0xcf1c, 0xcf20, 0xcf24, 0xcf2c, 0xcf2d, 0xcf2f, 0xcf30, - 0xcf31, 0xcf38, 0xcf54, 0xcf55, 0xcf58, 0xcf5c, 0xcf64, 0xcf65, - 0xcf67, 0xcf69, 0xcf70, 0xcf71, 0xcf74, 0xcf78, 0xcf80, 0xcf85, - 0xcf8c, 0xcfa1, 0xcfa8, 0xcfb0, 0xcfc4, 0xcfe0, 0xcfe1, 0xcfe4, - 0xcfe8, 0xcff0, 0xcff1, 0xcff3, 0xcff5, 0xcffc, 0xd000, 0xd004, - 0xd011, 0xd018, 0xd02d, 0xd034, 0xd035, 0xd038, 0xd03c, 0x003f, - /* lead byte c5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd715, 0xd716, 0xd717, 0xd71a, 0xd71b, 0xd71d, 0xd71e, - 0xd71f, 0xd721, 0xd722, 0xd723, 0xd724, 0xd725, 0xd726, 0xd727, - 0xd72a, 0xd72c, 0xd72e, 0xd72f, 0xd730, 0xd731, 0xd732, 0xd733, - 0xd736, 0xd737, 0xd739, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd73a, 0xd73b, 0xd73d, 0xd73e, 0xd73f, 0xd740, 0xd741, - 0xd742, 0xd743, 0xd745, 0xd746, 0xd748, 0xd74a, 0xd74b, 0xd74c, - 0xd74d, 0xd74e, 0xd74f, 0xd752, 0xd753, 0xd755, 0xd75a, 0xd75b, - 0xd75c, 0xd75d, 0xd75e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd75f, 0xd762, 0xd764, 0xd766, 0xd767, 0xd768, 0xd76a, - 0xd76b, 0xd76d, 0xd76e, 0xd76f, 0xd771, 0xd772, 0xd773, 0xd775, - 0xd776, 0xd777, 0xd778, 0xd779, 0xd77a, 0xd77b, 0xd77e, 0xd77f, - 0xd780, 0xd782, 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0xd78a, - 0xd78b, 0xd044, 0xd045, 0xd047, 0xd049, 0xd050, 0xd054, 0xd058, - 0xd060, 0xd06c, 0xd06d, 0xd070, 0xd074, 0xd07c, 0xd07d, 0xd081, - 0xd0a4, 0xd0a5, 0xd0a8, 0xd0ac, 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b9, - 0xd0c0, 0xd0c1, 0xd0c4, 0xd0c8, 0xd0c9, 0xd0d0, 0xd0d1, 0xd0d3, - 0xd0d4, 0xd0d5, 0xd0dc, 0xd0dd, 0xd0e0, 0xd0e4, 0xd0ec, 0xd0ed, - 0xd0ef, 0xd0f0, 0xd0f1, 0xd0f8, 0xd10d, 0xd130, 0xd131, 0xd134, - 0xd138, 0xd13a, 0xd140, 0xd141, 0xd143, 0xd144, 0xd145, 0xd14c, - 0xd14d, 0xd150, 0xd154, 0xd15c, 0xd15d, 0xd15f, 0xd161, 0xd168, - 0xd16c, 0xd17c, 0xd184, 0xd188, 0xd1a0, 0xd1a1, 0xd1a4, 0xd1a8, - 0xd1b0, 0xd1b1, 0xd1b3, 0xd1b5, 0xd1ba, 0xd1bc, 0xd1c0, 0xd1d8, - 0xd1f4, 0xd1f8, 0xd207, 0xd209, 0xd210, 0xd22c, 0xd22d, 0xd230, - 0xd234, 0xd23c, 0xd23d, 0xd23f, 0xd241, 0xd248, 0xd25c, 0x003f, - /* lead byte c6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd78d, 0xd78e, 0xd78f, 0xd791, 0xd792, 0xd793, 0xd794, - 0xd795, 0xd796, 0xd797, 0xd79a, 0xd79c, 0xd79e, 0xd79f, 0xd7a0, - 0xd7a1, 0xd7a2, 0xd7a3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd264, 0xd280, 0xd281, 0xd284, 0xd288, 0xd290, 0xd291, - 0xd295, 0xd29c, 0xd2a0, 0xd2a4, 0xd2ac, 0xd2b1, 0xd2b8, 0xd2b9, - 0xd2bc, 0xd2bf, 0xd2c0, 0xd2c2, 0xd2c8, 0xd2c9, 0xd2cb, 0xd2d4, - 0xd2d8, 0xd2dc, 0xd2e4, 0xd2e5, 0xd2f0, 0xd2f1, 0xd2f4, 0xd2f8, - 0xd300, 0xd301, 0xd303, 0xd305, 0xd30c, 0xd30d, 0xd30e, 0xd310, - 0xd314, 0xd316, 0xd31c, 0xd31d, 0xd31f, 0xd320, 0xd321, 0xd325, - 0xd328, 0xd329, 0xd32c, 0xd330, 0xd338, 0xd339, 0xd33b, 0xd33c, - 0xd33d, 0xd344, 0xd345, 0xd37c, 0xd37d, 0xd380, 0xd384, 0xd38c, - 0xd38d, 0xd38f, 0xd390, 0xd391, 0xd398, 0xd399, 0xd39c, 0xd3a0, - 0xd3a8, 0xd3a9, 0xd3ab, 0xd3ad, 0xd3b4, 0xd3b8, 0xd3bc, 0xd3c4, - 0xd3c5, 0xd3c8, 0xd3c9, 0xd3d0, 0xd3d8, 0xd3e1, 0xd3e3, 0xd3ec, - 0xd3ed, 0xd3f0, 0xd3f4, 0xd3fc, 0xd3fd, 0xd3ff, 0xd401, 0x003f, - /* lead byte c7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd408, 0xd41d, 0xd440, 0xd444, 0xd45c, 0xd460, 0xd464, - 0xd46d, 0xd46f, 0xd478, 0xd479, 0xd47c, 0xd47f, 0xd480, 0xd482, - 0xd488, 0xd489, 0xd48b, 0xd48d, 0xd494, 0xd4a9, 0xd4cc, 0xd4d0, - 0xd4d4, 0xd4dc, 0xd4df, 0xd4e8, 0xd4ec, 0xd4f0, 0xd4f8, 0xd4fb, - 0xd4fd, 0xd504, 0xd508, 0xd50c, 0xd514, 0xd515, 0xd517, 0xd53c, - 0xd53d, 0xd540, 0xd544, 0xd54c, 0xd54d, 0xd54f, 0xd551, 0xd558, - 0xd559, 0xd55c, 0xd560, 0xd565, 0xd568, 0xd569, 0xd56b, 0xd56d, - 0xd574, 0xd575, 0xd578, 0xd57c, 0xd584, 0xd585, 0xd587, 0xd588, - 0xd589, 0xd590, 0xd5a5, 0xd5c8, 0xd5c9, 0xd5cc, 0xd5d0, 0xd5d2, - 0xd5d8, 0xd5d9, 0xd5db, 0xd5dd, 0xd5e4, 0xd5e5, 0xd5e8, 0xd5ec, - 0xd5f4, 0xd5f5, 0xd5f7, 0xd5f9, 0xd600, 0xd601, 0xd604, 0xd608, - 0xd610, 0xd611, 0xd613, 0xd614, 0xd615, 0xd61c, 0xd620, 0x003f, - /* lead byte c8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd624, 0xd62d, 0xd638, 0xd639, 0xd63c, 0xd640, 0xd645, - 0xd648, 0xd649, 0xd64b, 0xd64d, 0xd651, 0xd654, 0xd655, 0xd658, - 0xd65c, 0xd667, 0xd669, 0xd670, 0xd671, 0xd674, 0xd683, 0xd685, - 0xd68c, 0xd68d, 0xd690, 0xd694, 0xd69d, 0xd69f, 0xd6a1, 0xd6a8, - 0xd6ac, 0xd6b0, 0xd6b9, 0xd6bb, 0xd6c4, 0xd6c5, 0xd6c8, 0xd6cc, - 0xd6d1, 0xd6d4, 0xd6d7, 0xd6d9, 0xd6e0, 0xd6e4, 0xd6e8, 0xd6f0, - 0xd6f5, 0xd6fc, 0xd6fd, 0xd700, 0xd704, 0xd711, 0xd718, 0xd719, - 0xd71c, 0xd720, 0xd728, 0xd729, 0xd72b, 0xd72d, 0xd734, 0xd735, - 0xd738, 0xd73c, 0xd744, 0xd747, 0xd749, 0xd750, 0xd751, 0xd754, - 0xd756, 0xd757, 0xd758, 0xd759, 0xd760, 0xd761, 0xd763, 0xd765, - 0xd769, 0xd76c, 0xd770, 0xd774, 0xd77c, 0xd77d, 0xd781, 0xd788, - 0xd789, 0xd78c, 0xd790, 0xd798, 0xd799, 0xd79b, 0xd79d, 0x003f, - /* lead byte ca */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475, - 0x54e5, 0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef, - 0x6b4c, 0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888, - 0x8a36, 0x8cc8, 0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374, - 0x5404, 0x606a, 0x6164, 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2, - 0x95a3, 0x4f83, 0x520a, 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79, - 0x61c7, 0x63c0, 0x6746, 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b, - 0x78f5, 0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb, - 0x9593, 0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b, - 0x8910, 0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x611f, - 0x61be, 0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b, 0x7518, 0x75b3, - 0x76e3, 0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452, 0x9f95, 0x003f, - /* lead byte cb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5323, 0x5cac, 0x7532, 0x80db, 0x9240, 0x9598, 0x525b, - 0x5808, 0x59dc, 0x5ca1, 0x5d17, 0x5eb7, 0x5f3a, 0x5f4a, 0x6177, - 0x6c5f, 0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1, 0x7f8c, 0x8154, - 0x8221, 0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47, 0x4ecb, - 0x4ef7, 0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539, - 0x69ea, 0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb, - 0xf900, 0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0xf901, 0x7cb3, - 0x7fb9, 0x91b5, 0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e, - 0x64da, 0x64e7, 0x6e20, 0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0xf902, - 0x907d, 0x9245, 0x92f8, 0x4e7e, 0x4ef6, 0x5065, 0x5dfe, 0x5efa, - 0x6106, 0x6957, 0x8171, 0x8654, 0x8e47, 0x9375, 0x9a2b, 0x4e5e, - 0x5091, 0x6770, 0x6840, 0x5109, 0x528d, 0x5292, 0x6aa2, 0x003f, - /* lead byte cc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048, - 0x61a9, 0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1, - 0x9694, 0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9, - 0x898b, 0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50, - 0x7f3a, 0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257, 0x938c, - 0x4eac, 0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd, 0x537f, - 0x5770, 0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce, 0x656c, - 0x666f, 0x66bb, 0x66f4, 0x6897, 0x6d87, 0x7085, 0x70f1, 0x749f, - 0x74a5, 0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45, - 0x7d93, 0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x9015, - 0x93e1, 0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2, 0x5553, 0x583a, - 0x5951, 0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842, 0x68b0, 0x003f, - /* lead byte cd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb, - 0x7e6b, 0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4, - 0x53e9, 0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab, - 0x62f7, 0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd, - 0x75fc, 0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f, - 0x82e6, 0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0xf903, - 0x8f9c, 0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b, - 0x66f2, 0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11, - 0x6606, 0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68, - 0xf904, 0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5, - 0x6050, 0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3, - 0x8ca2, 0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc, 0x003f, - /* lead byte ce */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b, - 0x9846, 0x5ed3, 0x69e8, 0x85ff, 0x90ed, 0xf905, 0x51a0, 0x5b98, - 0x5bec, 0x6163, 0x68fa, 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1, - 0x7f50, 0x83c5, 0x89c0, 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d, - 0x62ec, 0x9002, 0x4f8a, 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0, - 0x6d38, 0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366, - 0x639b, 0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a, 0x6127, - 0x62d0, 0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4, - 0x50d1, 0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e, - 0x6821, 0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x81a0, - 0x854e, 0x86df, 0x8f03, 0x8f4e, 0x90ca, 0x9903, 0x9a55, 0x9bab, - 0x4e18, 0x4e45, 0x4e5d, 0x4ec7, 0x4ff1, 0x5177, 0x52fe, 0x003f, - /* lead byte cf */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614, 0x5775, 0x57a2, - 0x5bc7, 0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8, 0x67e9, - 0x69cb, 0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7, - 0x7396, 0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc, - 0x8205, 0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011, - 0x90b1, 0x9264, 0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c, - 0x570b, 0x5c40, 0x83ca, 0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98, - 0x7fa4, 0x88d9, 0x8ecd, 0x90e1, 0x5800, 0x5c48, 0x6398, 0x7a9f, - 0x5bae, 0x5f13, 0x7a79, 0x7aae, 0x828e, 0x8eac, 0x5026, 0x5238, - 0x52f8, 0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a, 0x6dc3, 0x7737, - 0x53a5, 0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3, 0x6f70, - 0x8a6d, 0x8ecc, 0x994b, 0xf906, 0x6677, 0x6b78, 0x8cb4, 0x003f, - /* lead byte d0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9b3c, 0xf907, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb, - 0x73ea, 0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73, - 0x9035, 0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc, 0x921e, - 0xf908, 0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8, 0x6975, - 0x9699, 0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839, 0x69ff, - 0x747e, 0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1, 0x9949, - 0xf909, 0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981, - 0x79bd, 0x82a9, 0x887e, 0x887f, 0x895f, 0xf90a, 0x9326, 0x4f0b, - 0x53ca, 0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162, - 0x77dc, 0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x5668, - 0x573b, 0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993, 0x5bc4, 0x5c90, - 0x5d0e, 0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7, 0x65e3, 0x003f, - /* lead byte d1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a, - 0x6c23, 0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482, - 0x74a3, 0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948, - 0x797a, 0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c, - 0x8a18, 0x8b4f, 0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951, - 0x9a0e, 0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee, - 0x6854, 0x91d1, 0x55ab, 0x513a, 0xf90b, 0xf90c, 0x5a1c, 0x61e6, - 0xf90d, 0x62cf, 0x62ff, 0xf90e, 0xf90f, 0xf910, 0xf911, 0xf912, - 0xf913, 0x90a3, 0xf914, 0xf915, 0xf916, 0xf917, 0xf918, 0x8afe, - 0xf919, 0xf91a, 0xf91b, 0xf91c, 0x6696, 0xf91d, 0x7156, 0xf91e, - 0xf91f, 0x96e3, 0xf920, 0x634f, 0x637a, 0x5357, 0xf921, 0x678f, - 0x6960, 0x6e73, 0xf922, 0x7537, 0xf923, 0xf924, 0xf925, 0x003f, - /* lead byte d2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7d0d, 0xf926, 0xf927, 0x8872, 0x56ca, 0x5a18, 0xf928, - 0xf929, 0xf92a, 0xf92b, 0xf92c, 0x4e43, 0xf92d, 0x5167, 0x5948, - 0x67f0, 0x8010, 0xf92e, 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5, - 0x606c, 0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa, 0xf92f, 0x5974, - 0x5f29, 0x6012, 0xf930, 0xf931, 0xf932, 0x7459, 0xf933, 0xf934, - 0xf935, 0xf936, 0xf937, 0xf938, 0x99d1, 0xf939, 0xf93a, 0xf93b, - 0xf93c, 0xf93d, 0xf93e, 0xf93f, 0xf940, 0xf941, 0xf942, 0xf943, - 0x6fc3, 0xf944, 0xf945, 0x81bf, 0x8fb2, 0x60f1, 0xf946, 0xf947, - 0x8166, 0xf948, 0xf949, 0x5c3f, 0xf94a, 0xf94b, 0xf94c, 0xf94d, - 0xf94e, 0xf94f, 0xf950, 0xf951, 0x5ae9, 0x8a25, 0x677b, 0x7d10, - 0xf952, 0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0x80fd, 0xf958, - 0xf959, 0x5c3c, 0x6ce5, 0x533f, 0x6eba, 0x591a, 0x8336, 0x003f, - /* lead byte d3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56, - 0x65b7, 0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e, - 0x7dde, 0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a, - 0x75b8, 0x9054, 0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1, - 0x6e5b, 0x6f6d, 0x6fb9, 0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983, - 0x8ac7, 0x8b5a, 0x931f, 0x6c93, 0x7553, 0x7b54, 0x8e0f, 0x905d, - 0x5510, 0x5802, 0x5858, 0x5e62, 0x6207, 0x649e, 0x68e0, 0x7576, - 0x7cd6, 0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e, 0x5927, 0x5c0d, - 0x5cb1, 0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa, 0x888b, - 0x8cb8, 0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200, - 0x5230, 0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b, - 0x5ea6, 0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843, 0x003f, - /* lead byte d4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4, 0x71fe, - 0x76dc, 0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced, 0x8df3, - 0x8e48, 0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676, 0x97dc, - 0x6bd2, 0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf, 0x7be4, - 0x7e9b, 0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c, - 0x711e, 0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac, - 0x51cd, 0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e, - 0x6f7c, 0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c, - 0x6597, 0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0xf95a, 0x8c46, - 0x9017, 0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f, 0x920d, - 0x5f97, 0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49, 0x85e4, 0x8b04, - 0x9127, 0x9a30, 0x5587, 0x61f6, 0xf95b, 0x7669, 0x7f85, 0x003f, - /* lead byte d5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x863f, 0x87ba, 0x88f8, 0x908f, 0xf95c, 0x6d1b, 0x70d9, - 0x73de, 0x7d61, 0x843d, 0xf95d, 0x916a, 0x99f1, 0xf95e, 0x4e82, - 0x5375, 0x6b04, 0x6b12, 0x703e, 0x721b, 0x862d, 0x9e1e, 0x524c, - 0x8fa3, 0x5d50, 0x64e5, 0x652c, 0x6b16, 0x6feb, 0x7c43, 0x7e9c, - 0x85cd, 0x8964, 0x89bd, 0x62c9, 0x81d8, 0x881f, 0x5eca, 0x6717, - 0x6d6a, 0x72fc, 0x7405, 0x746f, 0x8782, 0x90de, 0x4f86, 0x5d0d, - 0x5fa0, 0x840a, 0x51b7, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169, - 0x51c9, 0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2, - 0x8f1b, 0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e, - 0x623e, 0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad, - 0x9a62, 0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d, - 0x792b, 0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23, 0x003f, - /* lead byte d6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7149, 0x7489, 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023, - 0x934a, 0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9, - 0x6582, 0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9, - 0xf95f, 0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce, - 0x8046, 0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b, - 0x6fa7, 0x79ae, 0x91b4, 0x96b7, 0x52de, 0xf960, 0x6488, 0x64c4, - 0x6ad3, 0x6f5e, 0x7018, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c, - 0x8def, 0x8f05, 0x9732, 0x9b6f, 0x9dfa, 0x9e75, 0x788c, 0x797f, - 0x7da0, 0x83c9, 0x9304, 0x9e7f, 0x9e93, 0x8ad6, 0x58df, 0x5f04, - 0x6727, 0x7027, 0x74cf, 0x7c60, 0x807e, 0x5121, 0x7028, 0x7262, - 0x78ca, 0x8cc2, 0x8cda, 0x8cf4, 0x96f7, 0x4e86, 0x50da, 0x5bee, - 0x5ed6, 0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a, 0x84fc, 0x003f, - /* lead byte d7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x907c, 0x9b27, 0x9f8d, 0x58d8, 0x5a41, 0x5c62, 0x6a13, - 0x6dda, 0x6f0f, 0x763b, 0x7d2f, 0x7e37, 0x851e, 0x8938, 0x93e4, - 0x964b, 0x5289, 0x65d2, 0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f, - 0x7409, 0x7460, 0x7559, 0x7624, 0x786b, 0x8b2c, 0x985e, 0x516d, - 0x622e, 0x9678, 0x4f96, 0x502b, 0x5d19, 0x6dea, 0x7db8, 0x8f2a, - 0x5f8b, 0x6144, 0x6817, 0xf961, 0x9686, 0x52d2, 0x808b, 0x51dc, - 0x51cc, 0x695e, 0x7a1c, 0x7dbe, 0x83f1, 0x9675, 0x4fda, 0x5229, - 0x5398, 0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c, - 0x7281, 0x72f8, 0x7406, 0x7483, 0xf962, 0x75e2, 0x7c6c, 0x7f79, - 0x7fb8, 0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9, - 0x541d, 0x6f7e, 0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57, - 0x9e9f, 0x6797, 0x6dcb, 0x7433, 0x81e8, 0x9716, 0x782c, 0x003f, - /* lead byte d8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2, 0x78bc, - 0x78e8, 0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20, 0x819c, - 0x83ab, 0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162, - 0x633d, 0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c, - 0x8513, 0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b, - 0x6cab, 0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9, - 0x671b, 0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099, - 0x57cb, 0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885, 0x6bcf, - 0x7164, 0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108, 0x8c8a, - 0x964c, 0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2, 0x76df, - 0x840c, 0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9, 0x68c9, 0x6c94, - 0x7704, 0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5, 0x6ec5, 0x003f, - /* lead byte d9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927, - 0x6e9f, 0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298, - 0x9cf4, 0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155, - 0x6478, 0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f, - 0x7261, 0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00, - 0x8b28, 0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46, - 0x9da9, 0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893, - 0x5999, 0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7, - 0x82d7, 0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7, - 0x64ab, 0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d, - 0x7e46, 0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61, - 0x58a8, 0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587, 0x003f, - /* lead byte da */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef, - 0x52ff, 0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c, - 0x5fae, 0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73, - 0x7f8e, 0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6, - 0x610d, 0x61ab, 0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f, - 0x73c9, 0x7de1, 0x9594, 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a, - 0x62cd, 0x640f, 0x64b2, 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e, - 0x7b94, 0x7c95, 0x7e1b, 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9, - 0x99c1, 0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500, - 0x6591, 0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622, 0x76e4, - 0x76fc, 0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c, 0x87e0, 0x8fd4, - 0x9812, 0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24, 0x6f51, 0x003f, - /* lead byte db */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x767c, 0x8dcb, 0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023, - 0x508d, 0x574a, 0x59a8, 0x5c28, 0x5e47, 0x5f77, 0x623f, 0x653e, - 0x65b9, 0x65c1, 0x6609, 0x678b, 0x699c, 0x6ec2, 0x78c5, 0x7d21, - 0x80aa, 0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c, 0x8a2a, 0x8b17, - 0x90a6, 0x9632, 0x9f90, 0x500d, 0x4ff3, 0xf963, 0x57f9, 0x5f98, - 0x62dc, 0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da, - 0x88f4, 0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f, - 0x4f70, 0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61, - 0x6a0a, 0x7169, 0x71d4, 0x756a, 0xf964, 0x7e41, 0x8543, 0x85e9, - 0x98dc, 0x4f10, 0x7b4f, 0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5, - 0x6c3e, 0x6c4e, 0x6cdb, 0x72af, 0x7bc4, 0x8303, 0x6cd5, 0x743a, - 0x50fb, 0x5288, 0x58c1, 0x64d8, 0x6a97, 0x74a7, 0x7656, 0x003f, - /* lead byte dc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x78a7, 0x8617, 0x95e2, 0x9739, 0xf965, 0x535e, 0x5f01, - 0x8b8a, 0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08, - 0x4e19, 0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4, - 0x68c5, 0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920, - 0x9a08, 0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11, - 0x6e7a, 0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913, 0x8b5c, - 0x8f14, 0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9, 0x670d, - 0x798f, 0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39, 0x8f3b, - 0x99a5, 0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01, 0x5cef, - 0x5cf0, 0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x84ec, - 0x8702, 0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8, 0x4fef, 0x5085, - 0x5256, 0x526f, 0x5426, 0x5490, 0x57e0, 0x592b, 0x5a66, 0x003f, - /* lead byte dd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0xf966, 0x6276, 0x6577, - 0x65a7, 0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150, - 0x8151, 0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6, - 0x8cfb, 0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9, - 0x9ce7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e, - 0x5fff, 0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89, - 0x7cde, 0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0xf967, 0x4f5b, 0x5f17, - 0x5f7f, 0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c, - 0x4e15, 0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87, - 0x60b2, 0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4, - 0x6bd6, 0x6bd7, 0x6bd8, 0x6cb8, 0xf968, 0x7435, 0x75fa, 0x7812, - 0x7891, 0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5, 0x003f, - /* lead byte de */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c, - 0x8cbb, 0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c, - 0x658c, 0x6ab3, 0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad, - 0x8ca7, 0x8cd3, 0x983b, 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d, - 0x4e8b, 0x4e9b, 0x4ed5, 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff, - 0x53f2, 0x53f8, 0x5506, 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11, - 0x5beb, 0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368, - 0x659c, 0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7, - 0x6e23, 0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1, - 0x7be9, 0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x86c7, - 0x88df, 0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66, 0x8fad, 0x90aa, - 0x98fc, 0x99df, 0x9e9d, 0x524a, 0xf969, 0x6714, 0xf96a, 0x003f, - /* lead byte df */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5098, 0x522a, 0x5c71, 0x6563, 0x6c55, 0x73ca, 0x7523, - 0x759d, 0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77, 0x6492, 0x6bba, - 0x715e, 0x85a9, 0x4e09, 0xf96b, 0x6749, 0x68ee, 0x6e17, 0x829f, - 0x8518, 0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7, - 0x50cf, 0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0, - 0x5e38, 0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58, - 0x723d, 0x7240, 0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3, - 0x89f4, 0x8a73, 0x8c61, 0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd, - 0x55c7, 0xf96c, 0x7a61, 0x7d22, 0x8272, 0x7272, 0x751f, 0x7525, - 0xf96d, 0x7b19, 0x5885, 0x58fb, 0x5dbc, 0x5e8f, 0x5eb6, 0x5f90, - 0x6055, 0x6292, 0x637f, 0x654d, 0x6691, 0x66d9, 0x66f8, 0x6816, - 0x68f2, 0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72, 0x003f, - /* lead byte e0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4, - 0x9ecd, 0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673, - 0x6790, 0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb, - 0x932b, 0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3, 0x6247, - 0x657e, 0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487, 0x74bf, - 0x766c, 0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3, 0x8239, - 0x861a, 0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425, 0x994d, - 0x9bae, 0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c, - 0x859b, 0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9, - 0x6bb2, 0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x6d89, - 0x71ee, 0xf96e, 0x57ce, 0x59d3, 0x5bac, 0x6027, 0x60fa, 0x6210, - 0x661f, 0x665f, 0x7329, 0x73f9, 0x76db, 0x7701, 0x7b6c, 0x003f, - /* lead byte e1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2, - 0x6b72, 0x6d17, 0x7a05, 0x7b39, 0x7d30, 0xf96f, 0x8cb0, 0x53ec, - 0x562f, 0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383, - 0x6414, 0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4, - 0x71d2, 0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b, - 0x7d20, 0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061, - 0x90b5, 0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91, - 0x7c9f, 0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d, - 0x84c0, 0x905c, 0x98e1, 0x7387, 0x5b8b, 0x609a, 0x677e, 0x6dde, - 0x8a1f, 0x8aa6, 0x9001, 0x980c, 0x5237, 0xf970, 0x7051, 0x788e, - 0x9396, 0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782, - 0x58fd, 0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101, 0x003f, - /* lead byte e2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x620d, 0x624b, 0x6388, 0x641c, 0x6536, 0x6578, 0x6a39, - 0x6b8a, 0x6c34, 0x6d19, 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407, - 0x74b2, 0x7626, 0x7761, 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f, - 0x7dac, 0x7e61, 0x7f9e, 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea, - 0x8896, 0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296, - 0x92b9, 0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996, - 0x9ad3, 0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1, - 0x6f5a, 0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87, - 0x5faa, 0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35, - 0x6df3, 0x73e3, 0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x821c, - 0x8340, 0x84f4, 0x8563, 0x8a62, 0x8ac4, 0x9187, 0x931e, 0x9806, - 0x99b4, 0x620c, 0x8853, 0x8ff0, 0x9265, 0x5d07, 0x5d27, 0x003f, - /* lead byte e3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe, 0x7fd2, - 0x8936, 0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f, - 0x6607, 0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb, - 0x5aa4, 0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd, - 0x662f, 0x6642, 0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5, - 0x8494, 0x84cd, 0x8996, 0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a, - 0x57f4, 0x5bd4, 0x5f0f, 0x606f, 0x62ed, 0x690d, 0x6b96, 0x6e5c, - 0x7184, 0x7bd2, 0x8755, 0x8b58, 0x8efe, 0x98df, 0x98fe, 0x4f38, - 0x4f81, 0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c, 0x65b0, 0x6668, - 0x71fc, 0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398, 0x85aa, - 0x85ce, 0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0xf971, 0x8fc5, 0x5931, - 0x5ba4, 0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81, 0x003f, - /* lead byte e4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf972, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0, - 0x5341, 0xf973, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152, 0x555e, - 0x5a25, 0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe, 0x8859, - 0x8a1d, 0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a, 0x5cb3, - 0x5dbd, 0x5e44, 0x60e1, 0x6115, 0x63e1, 0x6a02, 0x6e25, 0x9102, - 0x9354, 0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f, - 0x6848, 0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01, - 0x8ecb, 0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c, - 0x83f4, 0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e, - 0x600f, 0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0, 0x57c3, - 0x5d16, 0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e, 0x9698, 0x9744, - 0x5384, 0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b, 0x984d, 0x003f, - /* lead byte e5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6, - 0x591c, 0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0xf974, 0x91ce, - 0x5f31, 0xf975, 0xf976, 0x7d04, 0x82e5, 0x846f, 0x84bb, 0x85e5, - 0x8e8d, 0xf977, 0x4f6f, 0xf978, 0xf979, 0x58e4, 0x5b43, 0x6059, - 0x63da, 0x6518, 0x656d, 0x6698, 0xf97a, 0x694a, 0x6a23, 0x6d0b, - 0x7001, 0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0xf97b, 0x7f8a, - 0xf97c, 0x8944, 0xf97d, 0x8b93, 0x91c0, 0x967d, 0xf97e, 0x990a, - 0x5704, 0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad, - 0x9b5a, 0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043, - 0x5830, 0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa, - 0x513c, 0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186, - 0x4e88, 0x4f59, 0xf97f, 0xf980, 0xf981, 0x5982, 0xf982, 0x003f, - /* lead byte e6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf983, 0x6b5f, 0x6c5d, 0xf984, 0x74b5, 0x7916, 0xf985, - 0x8207, 0x8245, 0x8339, 0x8f3f, 0x8f5d, 0xf986, 0x9918, 0xf987, - 0xf988, 0xf989, 0x4ea6, 0xf98a, 0x57df, 0x5f79, 0x6613, 0xf98b, - 0xf98c, 0x75ab, 0x7e79, 0x8b6f, 0xf98d, 0x9006, 0x9a5b, 0x56a5, - 0x5827, 0x59f8, 0x5a1f, 0x5bb4, 0xf98e, 0x5ef6, 0xf98f, 0xf990, - 0x6350, 0x633b, 0xf991, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93, - 0x6df5, 0x6f14, 0xf992, 0x70df, 0x7136, 0x7159, 0xf993, 0x71c3, - 0x71d5, 0xf994, 0x784f, 0x786f, 0xf995, 0x7b75, 0x7de3, 0xf996, - 0x7e2f, 0xf997, 0x884d, 0x8edf, 0xf998, 0xf999, 0xf99a, 0x925b, - 0xf99b, 0x9cf6, 0xf99c, 0xf99d, 0xf99e, 0x6085, 0x6d85, 0xf99f, - 0x71b1, 0xf9a0, 0xf9a1, 0x95b1, 0x53ad, 0xf9a2, 0xf9a3, 0xf9a4, - 0x67d3, 0xf9a5, 0x708e, 0x7130, 0x7430, 0x8276, 0x82d2, 0x003f, - /* lead byte e7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf9a6, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0xf9a7, 0x71c1, - 0x8449, 0xf9a8, 0xf9a9, 0x584b, 0xf9aa, 0xf9ab, 0x5db8, 0x5f71, - 0xf9ac, 0x6620, 0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36, - 0x6f41, 0x6fda, 0x701b, 0x702f, 0x7150, 0x71df, 0x7370, 0xf9ad, - 0x745b, 0xf9ae, 0x74d4, 0x76c8, 0x7a4e, 0x7e93, 0xf9af, 0xf9b0, - 0x82f1, 0x8a60, 0x8fce, 0xf9b1, 0x9348, 0xf9b2, 0x9719, 0xf9b3, - 0xf9b4, 0x4e42, 0x502a, 0xf9b5, 0x5208, 0x53e1, 0x66f3, 0x6c6d, - 0x6fca, 0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602, 0xf9b6, - 0x88d4, 0x8a63, 0x8b7d, 0x8c6b, 0xf9b7, 0x92b3, 0xf9b8, 0x9713, - 0x9810, 0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433, - 0x55da, 0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0xf9b9, - 0x61ca, 0x6556, 0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3, 0x003f, - /* lead byte e8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4, 0x9c32, - 0x9f07, 0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab, 0x7465, - 0x761f, 0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1, 0x74ee, - 0x7515, 0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6, - 0x7aa9, 0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c, - 0x5b9b, 0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897, - 0x7de9, 0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811, - 0x66f0, 0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03, - 0x6b6a, 0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f, 0xf9ba, - 0xf9bb, 0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da, 0x5be5, - 0xf9bc, 0xf9bd, 0x5da2, 0x62d7, 0x6416, 0x6493, 0x64fe, 0xf9be, - 0x66dc, 0xf9bf, 0x6a48, 0xf9c0, 0x71ff, 0x7464, 0xf9c1, 0x003f, - /* lead byte e9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0xf9c2, - 0x87ef, 0x8981, 0x8b20, 0x9059, 0xf9c3, 0x9080, 0x9952, 0x617e, - 0x6b32, 0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197, - 0x52c7, 0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c, - 0x6e67, 0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338, - 0x84c9, 0x8e0a, 0x9394, 0x93de, 0xf9c4, 0x4e8e, 0x4f51, 0x5076, - 0x512a, 0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a, - 0x6182, 0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991, - 0x79b9, 0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047, - 0x90f5, 0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed, - 0x6631, 0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0xf9c5, - 0x6a52, 0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553, 0x003f, - /* lead byte ea */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90, - 0x718a, 0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3, - 0x5a9b, 0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39, - 0x6e72, 0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45, - 0x9060, 0xf9c6, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e, - 0x4f4d, 0x5049, 0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09, - 0x6170, 0x6690, 0x6e2d, 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e, - 0x8466, 0x853f, 0x875f, 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb, - 0x9b4f, 0x4e73, 0x4f91, 0x5112, 0x516a, 0xf9c7, 0x552f, 0x55a9, - 0x5b7a, 0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x6108, - 0x6109, 0x63c4, 0x6538, 0x6709, 0xf9c8, 0x67d4, 0x67da, 0xf9c9, - 0x6961, 0x6962, 0x6cb9, 0x6d27, 0xf9ca, 0x6e38, 0xf9cb, 0x003f, - /* lead byte eb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6fe1, 0x7336, 0x7337, 0xf9cc, 0x745c, 0x7531, 0xf9cd, - 0x7652, 0xf9ce, 0xf9cf, 0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98, - 0x8adb, 0x8aed, 0x8e30, 0x8e42, 0x904a, 0x903e, 0x907a, 0x9149, - 0x91c9, 0x936e, 0xf9d0, 0xf9d1, 0x5809, 0xf9d2, 0x6bd3, 0x8089, - 0x80b2, 0xf9d3, 0xf9d4, 0x5141, 0x596b, 0x5c39, 0xf9d5, 0xf9d6, - 0x6f64, 0x73a7, 0x80e4, 0x8d07, 0xf9d7, 0x9217, 0x958f, 0xf9d8, - 0xf9d9, 0xf9da, 0xf9db, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d, - 0xf9dc, 0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1, - 0x4e59, 0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6, - 0x6ce3, 0x9091, 0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a, - 0x5100, 0x5b9c, 0x610f, 0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591, - 0x77e3, 0x7fa9, 0x8264, 0x858f, 0x87fb, 0x8863, 0x8abc, 0x003f, - /* lead byte ec */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0xf9dd, 0xf9de, - 0x5937, 0x59e8, 0xf9df, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0xf9e0, - 0xf9e1, 0xf9e2, 0xf9e3, 0x723e, 0x73e5, 0xf9e4, 0x7570, 0x75cd, - 0xf9e5, 0x79fb, 0xf9e6, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351, - 0xf9e7, 0xf9e8, 0x8cbd, 0x8cb3, 0x9087, 0xf9e9, 0xf9ea, 0x98f4, - 0x990c, 0xf9eb, 0xf9ec, 0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc, - 0x8b1a, 0x4eba, 0x4ec1, 0x5203, 0x5370, 0xf9ed, 0x54bd, 0x56e0, - 0x59fb, 0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0xf9ee, 0xf9ef, 0x7d6a, - 0x8335, 0xf9f0, 0x8693, 0x8a8d, 0xf9f1, 0x976d, 0x9777, 0xf9f2, - 0xf9f3, 0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2, 0x9038, - 0x93b0, 0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9, 0x6041, 0xf9f4, - 0xf9f5, 0x7a14, 0xf9f6, 0x834f, 0x8cc3, 0x5165, 0x5344, 0x003f, - /* lead byte ed */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf9f7, 0xf9f8, 0xf9f9, 0x4ecd, 0x5269, 0x5b55, 0x82bf, - 0x4ed4, 0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c, - 0x6063, 0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5, - 0x78c1, 0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee, - 0x8cc7, 0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c, - 0x70b8, 0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71, - 0x68e7, 0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4, - 0x7c2a, 0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb, - 0x58ef, 0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2, - 0x6756, 0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0xf9fa, 0x7350, - 0x748b, 0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c, - 0x8523, 0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577, 0x003f, - /* lead byte ee */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750, - 0x683d, 0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1, - 0x8f09, 0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47, - 0x4f4e, 0x5132, 0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e, - 0x6a17, 0x6cae, 0x6e1a, 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35, - 0x82e7, 0x83f9, 0x8457, 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019, - 0x90b8, 0x96ce, 0x9f5f, 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458, - 0x6575, 0x6ef4, 0x72c4, 0xf9fb, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d, - 0x7e3e, 0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f, - 0x8fea, 0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x5168, - 0x5178, 0x524d, 0x526a, 0x5861, 0x587c, 0x5960, 0x5c08, 0x5c55, - 0x5edb, 0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08, 0x6fb1, 0x003f, - /* lead byte ef */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x714e, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7b4c, - 0x7b8b, 0x7bad, 0x7bc6, 0x7e8f, 0x8a6e, 0x8f3e, 0x8f49, 0x923f, - 0x9293, 0x9322, 0x942b, 0x96fb, 0x985a, 0x986b, 0x991e, 0x5207, - 0x622a, 0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76, 0x5360, - 0x5cbe, 0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede, - 0x63a5, 0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075, - 0x5448, 0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5, - 0x633a, 0x653f, 0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968, - 0x6a89, 0x6b63, 0x6c40, 0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e, - 0x70a1, 0x738e, 0x73fd, 0x753a, 0x775b, 0x7887, 0x798e, 0x7a0b, - 0x7a7d, 0x7cbe, 0x7d8e, 0x8247, 0x8a02, 0x8aea, 0x8c9e, 0x912d, - 0x914a, 0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706, 0x9756, 0x003f, - /* lead byte f0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824, - 0x5e1d, 0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c, - 0x81cd, 0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b, - 0x973d, 0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632, - 0x5f14, 0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa, 0x66f9, - 0x671d, 0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167, 0x71e5, - 0x722a, 0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20, 0x7a95, - 0x7c97, 0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4, 0x8a54, - 0x8abf, 0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5, - 0x9ce5, 0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x5352, - 0x62d9, 0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0, 0x616b, 0x68d5, - 0x6dd9, 0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31, 0x816b, 0x003f, - /* lead byte f1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6, - 0x5ea7, 0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd, - 0x80c4, 0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda, - 0x665d, 0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d, - 0x70b7, 0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f, - 0x86db, 0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e, - 0x9152, 0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6, - 0x57c8, 0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec, - 0x710c, 0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff, - 0x8301, 0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b, - 0x6c41, 0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511, - 0x75c7, 0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea, 0x003f, - /* lead byte f2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f, - 0x652f, 0x65e8, 0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a, - 0x6f2c, 0x77e5, 0x7825, 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102, - 0x81f3, 0x829d, 0x82b7, 0x8718, 0x8a8c, 0xf9fc, 0x8d04, 0x8dbe, - 0x9072, 0x76f4, 0x7a19, 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4, - 0x5875, 0x632f, 0x6422, 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84, - 0x6d25, 0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1, - 0x771e, 0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897, - 0x8a3a, 0x8cd1, 0x8eeb, 0x8fb0, 0x9032, 0x93ad, 0x9663, 0x9673, - 0x9707, 0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x74c6, - 0x75be, 0x79e9, 0x7a92, 0x81a3, 0x86ed, 0x8cea, 0x8dcc, 0x8fed, - 0x659f, 0x6715, 0xf9fd, 0x57f7, 0x6f57, 0x7ddd, 0x8f2f, 0x003f, - /* lead byte f3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84, 0x4e14, 0x4f98, - 0x501f, 0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64, 0x78cb, - 0x7b9a, 0xf9fe, 0x8e49, 0x8eca, 0x906e, 0x6349, 0x643e, 0x7740, - 0x7a84, 0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8, - 0x74da, 0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a, - 0x947d, 0x9910, 0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e, - 0x50ed, 0x53c3, 0x5879, 0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9, - 0x8b92, 0x8b96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5a3c, 0x5ee0, - 0x5f70, 0x6134, 0x655e, 0x660c, 0x6636, 0x66a2, 0x69cd, 0x6ec4, - 0x6f32, 0x7316, 0x7621, 0x7a93, 0x8139, 0x8259, 0x83d6, 0x84bc, - 0x50b5, 0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826, 0x7db5, - 0x83dc, 0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56, 0x003f, - /* lead byte f4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0xf9ff, - 0x5254, 0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc, - 0x7620, 0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343, 0x5598, - 0x5929, 0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f, 0x821b, - 0x85a6, 0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621, 0x97c6, - 0x51f8, 0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4, 0x8f1f, - 0x8f4d, 0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb, - 0x7c3d, 0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377, - 0x7252, 0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674, - 0x6df8, 0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0xfa00, 0x5243, - 0x66ff, 0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e, 0x905e, 0x9ad4, - 0x521d, 0x527f, 0x54e8, 0x6194, 0x6284, 0x62db, 0x68a2, 0x003f, - /* lead byte f5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901, - 0x790e, 0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549, - 0x8c82, 0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed, - 0x77d7, 0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2, - 0x585a, 0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525, - 0x9283, 0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8, - 0x690e, 0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429, - 0x8acf, 0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318, - 0x939a, 0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa, - 0x7b51, 0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010, - 0x6625, 0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0, - 0x6c96, 0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403, 0x003f, - /* lead byte f6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8d05, 0x53d6, 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a, - 0x7fe0, 0x805a, 0x8106, 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2, - 0x5074, 0x4ec4, 0x53a0, 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024, - 0x55e4, 0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be, - 0x75d4, 0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e, - 0x81f4, 0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5, - 0x98ed, 0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795, - 0x6c88, 0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4, - 0x7a31, 0x5feb, 0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0, - 0x6253, 0x62d6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99b1, 0x99dd, - 0x502c, 0x5353, 0x5544, 0x577c, 0xfa01, 0x6258, 0xfa02, 0x64e2, - 0x666b, 0x67dd, 0x6fc1, 0x6fef, 0x7422, 0x7438, 0x8a17, 0x003f, - /* lead byte f7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e, - 0x7058, 0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708, - 0x803d, 0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f, - 0xfa03, 0x8569, 0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86, - 0x6c70, 0x6cf0, 0x7b1e, 0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1, - 0xfa04, 0x64c7, 0x6fa4, 0x6491, 0x6504, 0x514e, 0x5410, 0x571f, - 0x8a0e, 0x615f, 0x6876, 0xfa05, 0x75db, 0x7b52, 0x7d71, 0x901a, - 0x5806, 0x69cc, 0x817f, 0x892a, 0x9000, 0x9839, 0x5078, 0x5957, - 0x59ac, 0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6, 0x5761, - 0x5a46, 0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e, - 0x722c, 0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224, - 0x5742, 0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211, 0x003f, - /* lead byte f8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504, 0x6096, - 0x6557, 0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987, 0x8c9d, - 0x5f6d, 0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x4fbf, 0x504f, 0x6241, - 0x7247, 0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19, 0x8cb6, - 0x576a, 0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63, - 0x5ee2, 0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48, - 0x5305, 0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016, - 0x629b, 0x62b1, 0x6355, 0xfa06, 0x6ce1, 0x6d66, 0x75b1, 0x7832, - 0x80de, 0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912, 0x900b, - 0x92ea, 0x98fd, 0x9b91, 0x5e45, 0x66b4, 0x66dd, 0x7011, 0x7206, - 0xfa07, 0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753, 0x6a19, 0x6f02, - 0x74e2, 0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4, 0x9a43, 0x003f, - /* lead byte f9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae, - 0x5f7c, 0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339, - 0x5f3c, 0x5fc5, 0x6ccc, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe, - 0x999d, 0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8, - 0x6630, 0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e, - 0x9c15, 0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068, - 0x608d, 0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0, - 0x9591, 0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b, - 0x54b8, 0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c, - 0x9677, 0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4, - 0x965c, 0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297, - 0x676d, 0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a, 0x003f, - /* lead byte fa */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfa08, 0xfa09, 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793, - 0x595a, 0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9, - 0x89e3, 0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838, - 0x5016, 0x5e78, 0x674f, 0x8347, 0x884c, 0x4eab, 0x5411, 0x56ae, - 0x73e6, 0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f, - 0x865b, 0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa, - 0x9a57, 0x5955, 0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26, - 0x61f8, 0x665b, 0x6ceb, 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729, - 0x774d, 0x7d43, 0x7d62, 0x7e23, 0x8237, 0x8852, 0xfa0a, 0x8ce2, - 0x9249, 0x986f, 0x5b51, 0x7a74, 0x8840, 0x9801, 0x5acc, 0x4fe0, - 0x5354, 0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9, 0x8105, 0x8107, - 0x83a2, 0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211, 0x578b, 0x003f, - /* lead byte fb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192, - 0x73e9, 0x7469, 0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3, - 0x99a8, 0x516e, 0x5f57, 0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a, - 0x91af, 0x978b, 0x4e4e, 0x4e92, 0x547c, 0x58d5, 0x58fa, 0x597d, - 0x5cb5, 0x5f27, 0x6236, 0x6248, 0x660a, 0x6667, 0x6beb, 0x6d69, - 0x6dcf, 0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9, 0x705d, 0x72d0, - 0x7425, 0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e, 0x80e1, - 0x82a6, 0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a, - 0x93ac, 0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f, - 0x6df7, 0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4, - 0x5f18, 0x6c5e, 0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c, - 0x9d3b, 0x5316, 0x548c, 0x5b05, 0x6a3a, 0x706b, 0x7575, 0x003f, - /* lead byte fc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41, 0x8ca8, - 0x9774, 0xfa0b, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b, 0x4e38, - 0x559a, 0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665, - 0x6853, 0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25, - 0x6d3b, 0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8, - 0x604d, 0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1, - 0x6e5f, 0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27, - 0x8352, 0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de, 0x5efb, - 0x5f8a, 0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c, 0x6dee, - 0x6fae, 0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4, 0x8aa8, - 0x8cc4, 0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404, 0x54ee, 0x5686, - 0x5b5d, 0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d, 0x6dc6, 0x003f, - /* lead byte fd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a, - 0x540e, 0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166, - 0x73dd, 0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f, - 0x71fb, 0x85b0, 0x8a13, 0x6688, 0x85a8, 0x55a7, 0x6684, 0x714a, - 0x8431, 0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689, - 0x7147, 0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566, - 0x8667, 0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36, - 0x80f8, 0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79, - 0x7d07, 0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d, - 0x7fd5, 0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec, - 0x5b09, 0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199, - 0x71b9, 0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70, 0x003f -}; - -static const unsigned char cp2uni_leadbytes[256] = -{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 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, 0x01, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 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, 0x01, 0x00 -}; - -static const unsigned short uni2cp_low[39168] = -{ - /* 0x0000 .. 0x00ff */ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0020, 0xa2ae, 0x0063, 0x004c, 0xa2b4, 0x0059, 0x007c, 0xa1d7, - 0xa1a7, 0x0063, 0xa8a3, 0xa1b6, 0x003f, 0xa1a9, 0xa2e7, 0xa1aa, - 0xa1c6, 0xa1be, 0xa9f7, 0xa9f8, 0xa2a5, 0xa5ec, 0xa2d2, 0xa1a4, - 0xa2ac, 0xa9f6, 0xa8ac, 0xa1b7, 0xa8f9, 0xa8f6, 0xa8fa, 0xa2af, - 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0xa8a1, 0x0043, - 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049, - 0xa8a2, 0x004e, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0xa1bf, - 0xa8aa, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0xa8ad, 0xa9ac, - 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0xa9a1, 0x0063, - 0x0065, 0x0065, 0x0065, 0x0065, 0x0069, 0x0069, 0x0069, 0x0069, - 0xa9a3, 0x006e, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0xa1c0, - 0xa9aa, 0x0075, 0x0075, 0x0075, 0x0075, 0x0079, 0xa9ad, 0x0079, - /* 0x0100 .. 0x01ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063, - 0x0043, 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064, - 0xa8a2, 0xa9a2, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0047, 0x0067, 0x0047, 0x0067, - 0x0047, 0x0067, 0x0047, 0x0067, 0x0048, 0x0068, 0xa8a4, 0xa9a4, - 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, - 0x0049, 0xa9a5, 0xa8a6, 0xa9a6, 0x004a, 0x006a, 0x004b, 0x006b, - 0xa9a7, 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0xa8a8, - 0xa9a8, 0xa8a9, 0xa9a9, 0x004e, 0x006e, 0x004e, 0x006e, 0x004e, - 0x006e, 0xa9b0, 0xa8af, 0xa9af, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0xa8ab, 0xa9ab, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0xa8ae, 0xa9ae, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0057, 0x0077, 0x0059, 0x0079, - 0x0059, 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0073, - 0x0062, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa8a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0045, 0x0046, 0x0066, 0x003f, 0x003f, 0x003f, 0x003f, 0x0049, - 0x003f, 0x003f, 0x006c, 0x003f, 0x003f, 0x003f, 0x003f, 0x004f, - 0x004f, 0x006f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, 0x0054, 0x0055, - 0x0075, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa6a2, 0x003f, 0x003f, 0x0021, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, 0x0049, - 0x0069, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, - 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x003f, 0x0041, 0x0061, - 0x0041, 0x0061, 0xa8a1, 0xa9a1, 0x0047, 0x0067, 0x0047, 0x0067, - 0x004b, 0x006b, 0x004f, 0x006f, 0x004f, 0x006f, 0x003f, 0x003f, - 0x006a, 0x003f, 0x003f, 0x003f, 0x0047, 0x0067, 0x003f, 0x003f, - 0x004e, 0x006e, 0x0041, 0x0061, 0xa8a1, 0xa9a1, 0xa8aa, 0xa9aa, - /* 0x0200 .. 0x02ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0053, 0x0073, 0x0054, 0x0074, 0x003f, 0x003f, 0x0048, 0x0068, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, - 0x0045, 0x0065, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0068, 0x003f, 0x006a, 0x0072, 0x003f, 0x003f, 0x003f, 0x0077, - 0x0079, 0xa2a5, 0xa2a9, 0xa1ae, 0xa1af, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x005e, 0xa2a7, - 0x0027, 0xa1aa, 0xa2a5, 0x0060, 0x003f, 0x005f, 0x003f, 0x003f, - 0xa2b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2a8, 0xa2ab, 0xa2aa, 0xa2ad, 0x007e, 0xa2a9, 0x003f, 0x003f, - 0x003f, 0x006c, 0x0073, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0300 .. 0x03ff */ - 0x0060, 0xa2a5, 0x005e, 0x007e, 0xa1aa, 0xa1aa, 0xa2a8, 0xa2ab, - 0xa1a7, 0x003f, 0xa2aa, 0xa2a9, 0xa2a7, 0x003f, 0x0022, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa2ac, - 0xa2ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x005f, 0x005f, 0x005f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0060, 0xa2a5, 0x003f, 0x003f, 0xa1a7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa2a5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa2a5, 0xa1a7, 0xa5c1, 0xa1a4, - 0xa5c5, 0xa5c7, 0xa5c9, 0x003f, 0xa5cf, 0x003f, 0xa5d4, 0xa5d8, - 0xa5e9, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, 0xa5c7, - 0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, - 0xa5d0, 0xa5d1, 0x003f, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, - 0xa5d7, 0xa5d8, 0xa5c9, 0xa5d4, 0xa5e1, 0xa5e5, 0xa5e7, 0xa5e9, - 0xa5f4, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6, 0xa5e7, - 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee, 0xa5ef, - 0xa5f0, 0xa5f1, 0x003f, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6, - 0xa5f7, 0xa5f8, 0xa5e9, 0xa5f4, 0xa5ef, 0xa5f4, 0xa5f8, 0x003f, - 0xa5e2, 0xa5e8, 0xa5d4, 0xa5d4, 0xa5d4, 0xa5f5, 0xa5f0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa5ea, 0xa5f1, 0x003f, 0x003f, 0xa5c8, 0xa5e5, 0x003f, 0x003f, - 0x003f, 0xa5d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0400 .. 0x04ff */ - 0xaca6, 0xaca7, 0x003f, 0xaca4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xacac, 0xacaa, 0xacb5, 0x003f, - 0xaca1, 0xaca2, 0xaca3, 0xaca4, 0xaca5, 0xaca6, 0xaca8, 0xaca9, - 0xacaa, 0xacab, 0xacac, 0xacad, 0xacae, 0xacaf, 0xacb0, 0xacb1, - 0xacb2, 0xacb3, 0xacb4, 0xacb5, 0xacb6, 0xacb7, 0xacb8, 0xacb9, - 0xacba, 0xacbb, 0xacbc, 0xacbd, 0xacbe, 0xacbf, 0xacc0, 0xacc1, - 0xacd1, 0xacd2, 0xacd3, 0xacd4, 0xacd5, 0xacd6, 0xacd8, 0xacd9, - 0xacda, 0xacdb, 0xacdc, 0xacdd, 0xacde, 0xacdf, 0xace0, 0xace1, - 0xace2, 0xace3, 0xace4, 0xace5, 0xace6, 0xace7, 0xace8, 0xace9, - 0xacea, 0xaceb, 0xacec, 0xaced, 0xacee, 0xacef, 0xacf0, 0xacf1, - 0xacd6, 0xacd7, 0x003f, 0xacd4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xacdc, 0xacda, 0xace5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xaca8, 0xacd8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xaca1, 0xacd1, 0xaca1, 0xacd1, 0x003f, 0x003f, 0xaca6, 0xacd6, - 0x003f, 0x003f, 0x003f, 0x003f, 0xaca8, 0xacd8, 0xaca9, 0xacd9, - 0x003f, 0x003f, 0xacaa, 0xacda, 0xacaa, 0xacda, 0xacb0, 0xace0, - 0x003f, 0x003f, 0x003f, 0x003f, 0xacbf, 0xacef, 0xacb5, 0xace5, - 0xacb5, 0xace5, 0xacb5, 0xace5, 0xacb9, 0xace9, 0x003f, 0x003f, - 0xacbd, 0xaced, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1d00 .. 0x1dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0xa8a1, 0x0042, 0x003f, - 0x0044, 0x0045, 0x003f, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, - 0x004c, 0x004d, 0x004e, 0x003f, 0x004f, 0x003f, 0x0050, 0x0052, - 0x0054, 0x0055, 0x0057, 0x0061, 0x003f, 0x003f, 0x003f, 0x0062, - 0x0064, 0x0065, 0x003f, 0x003f, 0x003f, 0x0067, 0x003f, 0x006b, - 0x006d, 0xa9af, 0x006f, 0x003f, 0x003f, 0x003f, 0x0070, 0x0074, - 0x0075, 0x003f, 0x003f, 0x0076, 0x003f, 0xa5e2, 0xa5e3, 0xa5e4, - 0xa5f5, 0xa5f6, 0x0069, 0x0072, 0x0075, 0x0076, 0xa5e2, 0xa5e3, - 0xa5f1, 0xa5f5, 0xa5f6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xacdf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0063, 0x003f, 0xa9a3, 0x003f, - 0x0066, 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, 0x003f, 0x003f, 0xa5e8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1e00 .. 0x1eff */ - 0x0041, 0x0061, 0x0042, 0x0062, 0x0042, 0x0062, 0x0042, 0x0062, - 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0046, 0x0066, - 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0048, 0x0068, 0x0048, 0x0068, 0x0049, 0x0069, 0x0049, 0x0069, - 0x004b, 0x006b, 0x004b, 0x006b, 0x004b, 0x006b, 0x004c, 0x006c, - 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x004d, 0x006d, - 0x004d, 0x006d, 0x004d, 0x006d, 0x004e, 0x006e, 0x004e, 0x006e, - 0x004e, 0x006e, 0x004e, 0x006e, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0050, 0x0070, 0x0050, 0x0070, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0054, 0x0074, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0056, 0x0076, 0x0056, 0x0076, - 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, - 0x0057, 0x0077, 0x0058, 0x0078, 0x0058, 0x0078, 0x0059, 0x0079, - 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0068, 0x0074, - 0x0077, 0x0079, 0x003f, 0x0073, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0059, 0x0079, 0x0059, 0x0079, 0x0059, 0x0079, - 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1f00 .. 0x1fff */ - 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, - 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, - 0xa5e5, 0xa5e5, 0xa5e5, 0xa5e5, 0xa5e5, 0xa5e5, 0x003f, 0x003f, - 0xa5c5, 0xa5c5, 0xa5c5, 0xa5c5, 0xa5c5, 0xa5c5, 0x003f, 0x003f, - 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, - 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, - 0xa5e9, 0xa5e9, 0xa5e9, 0xa5e9, 0xa5e9, 0xa5e9, 0xa5e9, 0xa5e9, - 0xa5c9, 0xa5c9, 0xa5c9, 0xa5c9, 0xa5c9, 0xa5c9, 0xa5c9, 0xa5c9, - 0xa5ef, 0xa5ef, 0xa5ef, 0xa5ef, 0xa5ef, 0xa5ef, 0x003f, 0x003f, - 0xa5cf, 0xa5cf, 0xa5cf, 0xa5cf, 0xa5cf, 0xa5cf, 0x003f, 0x003f, - 0xa5f4, 0xa5f4, 0xa5f4, 0xa5f4, 0xa5f4, 0xa5f4, 0xa5f4, 0xa5f4, - 0x003f, 0xa5d4, 0x003f, 0xa5d4, 0x003f, 0xa5d4, 0x003f, 0xa5d4, - 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, - 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, - 0xa5e1, 0xa5e1, 0xa5e5, 0xa5e5, 0xa5e7, 0xa5e7, 0xa5e9, 0xa5e9, - 0xa5ef, 0xa5ef, 0xa5f4, 0xa5f4, 0xa5f8, 0xa5f8, 0x003f, 0x003f, - 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, - 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, - 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, 0xa5e7, - 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, 0xa5c7, - 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, 0xa5f8, - 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, 0xa5d8, - 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0xa5e1, 0x003f, 0xa5e1, 0xa5e1, - 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0xa5c1, 0x003f, 0xa5e9, 0x003f, - 0x003f, 0xa1a7, 0xa5e7, 0xa5e7, 0xa5e7, 0x003f, 0xa5e7, 0xa5e7, - 0xa5c5, 0xa5c5, 0xa5c7, 0xa5c7, 0xa5c7, 0x003f, 0x003f, 0x003f, - 0xa5e9, 0xa5e9, 0xa5e9, 0xa5e9, 0x003f, 0x003f, 0xa5e9, 0xa5e9, - 0xa5c9, 0xa5c9, 0xa5c9, 0xa5c9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa5f4, 0xa5f4, 0xa5f4, 0xa5f4, 0xa5f1, 0xa5f1, 0xa5f4, 0xa5f4, - 0xa5d4, 0xa5d4, 0xa5d4, 0xa5d4, 0xa5d1, 0xa1a7, 0xa1a7, 0x0060, - 0x003f, 0x003f, 0xa5f8, 0xa5f8, 0xa5f8, 0x003f, 0xa5f8, 0xa5f8, - 0xa5cf, 0xa5cf, 0xa5d8, 0xa5d8, 0xa5d8, 0xa2a5, 0x003f, 0x003f, - /* 0x2000 .. 0x20ff */ - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x002d, 0x002d, 0x003f, 0xa1aa, 0xa1aa, 0xa1aa, 0x003f, 0x005f, - 0xa1ae, 0xa1af, 0x002c, 0xa1ae, 0xa1b0, 0xa1b1, 0x002c, 0x003f, - 0xa2d3, 0xa2d4, 0x003f, 0x003f, 0x002e, 0xa1a5, 0xa1a6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0xa2b6, 0x003f, 0xa1c7, 0xa1c8, 0x003f, 0xa1ae, 0x003f, 0x003f, - 0x003f, 0xa1b4, 0xa1b5, 0xa1d8, 0x0021, 0x003f, 0xa1aa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x002f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2aa, 0x0069, 0x003f, 0x003f, 0xa9f9, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0x002d, 0x003d, 0x0028, 0x0029, 0xa9fa, - 0x0030, 0xa9fb, 0xa9fc, 0xa9fd, 0xa9fe, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0x002d, 0x003d, 0x0028, 0x0029, 0x003f, - 0x0061, 0x0065, 0x006f, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0063, 0x003f, 0x003f, 0x004c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa2e6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2100 .. 0x21ff */ - 0x003f, 0x003f, 0x0043, 0xa1c9, 0x003f, 0x003f, 0x003f, 0x0045, - 0x003f, 0xa2b5, 0x0067, 0x0048, 0x0048, 0x0048, 0x0068, 0xa9a4, - 0x0049, 0x0049, 0x004c, 0xa7a4, 0x003f, 0x004e, 0xa2e0, 0x003f, - 0x0050, 0x0050, 0x0051, 0x0052, 0x0052, 0x0052, 0x003f, 0x003f, - 0x003f, 0xa2e5, 0xa2e2, 0x003f, 0x005a, 0x003f, 0xa7d9, 0x003f, - 0x005a, 0x003f, 0x004b, 0xa1ca, 0x0042, 0x0043, 0x0065, 0x0065, - 0x0045, 0x0046, 0x003f, 0x004d, 0x006f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0069, 0x003f, 0x003f, 0xa5f0, 0xa5e3, 0xa5c3, 0xa5d0, - 0xa2b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x0044, 0x0064, 0x0065, - 0x0069, 0x006a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa8f7, 0xa8f8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa8fb, 0xa8fc, 0xa8fd, 0xa8fe, 0x003f, - 0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6, 0xa5b7, - 0xa5b8, 0xa5b9, 0x003f, 0x003f, 0x004c, 0x0043, 0x0044, 0x004d, - 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6, 0xa5a7, 0xa5a8, - 0xa5a9, 0xa5aa, 0x003f, 0x003f, 0x006c, 0x0063, 0x0064, 0x006d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1e7, 0xa1e8, 0xa1e6, 0xa1e9, 0xa1ea, 0xa2d5, 0xa2d8, 0xa2d6, - 0xa2d9, 0xa2d7, 0xa1e7, 0xa1e6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1ea, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa2a2, 0xa2a1, - 0x003f, 0x003f, 0xa2a1, 0x003f, 0xa2a2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2200 .. 0x22ff */ - 0xa2a3, 0x003f, 0xa1d3, 0xa2a4, 0xa2a4, 0xa8aa, 0x003f, 0xa1d4, - 0xa1f4, 0xa1f4, 0x003f, 0xa1f5, 0xa1f5, 0x003f, 0x003f, 0xa2b3, - 0x003f, 0xa2b2, 0x002d, 0xa1be, 0x003f, 0x002f, 0x005c, 0x002a, - 0xa2aa, 0x003f, 0xa1ee, 0x003f, 0x003f, 0xa1f0, 0xa1c4, 0x004c, - 0xa1d0, 0x003f, 0x003f, 0x007c, 0x007c, 0xa1ab, 0xa1ab, 0xa1fc, - 0xa1fd, 0xa1fb, 0xa1fa, 0xa1f2, 0xa1f3, 0x003f, 0xa2b1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1c5, 0xa1f1, 0x003a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1ad, 0xa1ef, 0x003f, 0x003f, - 0x003f, 0xa1ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x007e, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1c1, 0xa1d5, 0xa1d5, 0xa1d5, 0xa1c2, 0xa1c3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1ec, 0xa1ed, 0x003f, 0x003f, 0x003c, 0x003e, - 0xa1c2, 0xa1c3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1f8, 0xa1f9, 0xa1f8, 0xa1f9, 0xa1f6, 0xa1f7, - 0xa1f6, 0xa1f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa2c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1d1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1a4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2300 .. 0x23ff */ - 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1d2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa1b4, 0xa1b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2400 .. 0x24ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa8e7, 0xa8e8, 0xa8e9, 0xa8ea, 0xa8eb, 0xa8ec, 0xa8ed, 0xa8ee, - 0xa8ef, 0xa8f0, 0xa8f1, 0xa8f2, 0xa8f3, 0xa8f4, 0xa8f5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa9e7, 0xa9e8, 0xa9e9, 0xa9ea, - 0xa9eb, 0xa9ec, 0xa9ed, 0xa9ee, 0xa9ef, 0xa9f0, 0xa9f1, 0xa9f2, - 0xa9f3, 0xa9f4, 0xa9f5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa9cd, 0xa9ce, 0xa9cf, 0xa9d0, - 0xa9d1, 0xa9d2, 0xa9d3, 0xa9d4, 0xa9d5, 0xa9d6, 0xa9d7, 0xa9d8, - 0xa9d9, 0xa9da, 0xa9db, 0xa9dc, 0xa9dd, 0xa9de, 0xa9df, 0xa9e0, - 0xa9e1, 0xa9e2, 0xa9e3, 0xa9e4, 0xa9e5, 0xa9e6, 0x0041, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, - 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, - 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, - 0xa8cd, 0xa8ce, 0xa8cf, 0xa8d0, 0xa8d1, 0xa8d2, 0xa8d3, 0xa8d4, - 0xa8d5, 0xa8d6, 0xa8d7, 0xa8d8, 0xa8d9, 0xa8da, 0xa8db, 0xa8dc, - 0xa8dd, 0xa8de, 0xa8df, 0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3, 0xa8e4, - 0xa8e5, 0xa8e6, 0x0030, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2500 .. 0x25ff */ - 0xa6a1, 0xa6ac, 0xa6a2, 0xa6ad, 0x002d, 0x002d, 0x007c, 0x007c, - 0x002d, 0x002d, 0x007c, 0x007c, 0xa6a3, 0xa6c8, 0xa6c7, 0xa6ae, - 0xa6a4, 0xa6c2, 0xa6c1, 0xa6af, 0xa6a6, 0xa6c6, 0xa6c5, 0xa6b1, - 0xa6a5, 0xa6c4, 0xa6c3, 0xa6b0, 0xa6a7, 0xa6bc, 0xa6c9, 0xa6ca, - 0xa6b7, 0xa6cb, 0xa6cc, 0xa6b2, 0xa6a9, 0xa6be, 0xa6cd, 0xa6ce, - 0xa6b9, 0xa6cf, 0xa6d0, 0xa6b4, 0xa6a8, 0xa6d1, 0xa6d2, 0xa6b8, - 0xa6bd, 0xa6d3, 0xa6d4, 0xa6b3, 0xa6aa, 0xa6d5, 0xa6d6, 0xa6ba, - 0xa6bf, 0xa6d7, 0xa6d8, 0xa6b5, 0xa6ab, 0xa6d9, 0xa6da, 0xa6bb, - 0xa6db, 0xa6dc, 0xa6c0, 0xa6dd, 0xa6de, 0xa6df, 0xa6e0, 0xa6e1, - 0xa6e2, 0xa6e3, 0xa6e4, 0xa6b6, 0x002d, 0x002d, 0x007c, 0x007c, - 0x003d, 0x007c, 0x002b, 0x002b, 0x002b, 0x003f, 0x003f, 0x003f, - 0x004c, 0x004c, 0x004c, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, - 0x002b, 0x002b, 0x002b, 0x002b, 0x0054, 0x0054, 0x0054, 0x002b, - 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x003f, 0x003f, 0x003f, - 0x003f, 0x002f, 0x005c, 0x0058, 0x002d, 0x007c, 0x002d, 0x007c, - 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, 0x002d, 0x007c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa2c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1e1, 0xa1e0, 0x003f, 0xa2c3, 0xa2c7, 0xa2c8, 0xa2cb, 0xa2ca, - 0xa2c9, 0xa2cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1e3, 0xa1e2, 0x003f, 0x003f, 0xa2ba, 0xa2b9, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1e5, 0xa1e4, 0x003f, 0x003f, - 0xa2b8, 0xa2b7, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1df, 0xa1de, - 0xa2c2, 0x003f, 0x003f, 0xa1db, 0x003f, 0x003f, 0xa1dd, 0xa1dc, - 0xa2c4, 0xa2c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1db, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2600 .. 0x26ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1da, 0xa1d9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa2cf, 0xa2ce, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa2d0, 0x003f, 0xa2d1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1cf, 0x003f, 0xa1ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2bc, 0xa2bd, 0x003f, 0xa2c0, 0xa2bb, 0xa2be, 0x003f, 0xa2bf, - 0xa2cd, 0xa2db, 0xa2dc, 0x003f, 0xa2dd, 0xa2da, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2e00 .. 0x2eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9bd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2f00 .. 0x2fff */ - 0xece9, 0x003f, 0x003f, 0x003f, 0xebe0, 0x003f, 0xeca3, 0x003f, - 0xecd1, 0x003f, 0xecfd, 0xf8a2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3ef, 0xd5f4, 0x003f, 0xdde2, 0x003f, 0x003f, 0xe4a8, - 0xdcd4, 0x003f, 0x003f, 0x003f, 0xe9d1, 0xcfa2, 0x003f, 0xf7cf, - 0xdecd, 0x003f, 0x003f, 0xe0aa, 0xd3de, 0xd2b3, 0xedad, 0x003f, - 0xf5bb, 0xe1b3, 0x003f, 0xe3b9, 0x003f, 0xdfa3, 0x003f, 0xcdef, - 0xd0f9, 0xcbee, 0xcace, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcfe1, 0x003f, 0x003f, 0x003f, 0xe3fd, 0xcdfc, 0xfbc2, 0xe2a2, - 0xf2a8, 0x003f, 0xd9fe, 0xd4e0, 0xd0c5, 0xdbb0, 0xd9e9, 0xeced, - 0xe8d8, 0xeac5, 0xd9ca, 0xfde2, 0xf2ad, 0x003f, 0x003f, 0xd9ec, - 0xddef, 0xd9be, 0xe4ab, 0x003f, 0xe2a9, 0xfbfd, 0xf0d0, 0xddab, - 0xfda1, 0x003f, 0xf8b8, 0xe4b3, 0xe9da, 0xccb3, 0xfadc, 0xe8ac, - 0xcdfe, 0xe8bf, 0xcaf6, 0xdfe6, 0xe9c4, 0xefa3, 0xf9b5, 0x003f, - 0x003f, 0xdbdc, 0xf9ab, 0xd9a9, 0xd9cd, 0xd9c3, 0xe3c5, 0xe0b4, - 0xe3c6, 0x003f, 0xfca2, 0xfaeb, 0xd8a1, 0xf1d3, 0xdab7, 0x003f, - 0xddae, 0x003f, 0xe5cf, 0xe9e2, 0xd6d5, 0xecbb, 0x003f, 0xecbc, - 0xebd3, 0xebbf, 0xe3ed, 0xedbb, 0xf2b8, 0xcfbf, 0xe0df, 0xf4bf, - 0xf1c7, 0xcadd, 0xdfe4, 0xf5ac, 0x003f, 0x003f, 0xfaec, 0xfabc, - 0xebfd, 0x003f, 0xccb8, 0xcac7, 0xe5eb, 0xcddb, 0xd4e7, 0xe3ce, - 0x003f, 0xf8af, 0xeee5, 0xf1cb, 0xf0eb, 0xe3f3, 0xf3b3, 0xe3f4, - 0xf2e3, 0x003f, 0xebe9, 0xebb7, 0x003f, 0xd7ec, 0xd1d1, 0xedfe, - 0xdaa6, 0xddbd, 0x003f, 0x003f, 0xe9eb, 0xf4ec, 0xdeaa, 0xd8fc, - 0xfad4, 0xeadf, 0x003f, 0xebe5, 0xfaed, 0xf9a6, 0xdeab, 0xe3dd, - 0xe2cf, 0xfac5, 0xd8a9, 0xcde9, 0xcdd4, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd0a1, 0xe5e0, 0xf0e8, 0xd6dd, 0xd6e3, 0xd8ea, 0xd8ab, - 0xfcdc, 0xe0a8, 0xfdd9, 0x003f, 0x003f, 0xf0a3, 0xcdd5, 0xe0a9, - 0xdeac, 0xf0ba, 0xf6cd, 0xd7a3, 0xcfcf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3000 .. 0x30ff */ - 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a8, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7, 0xa1b8, 0xa1b9, 0xa1ba, 0xa1bb, - 0xa1bc, 0xa1bd, 0x003f, 0xa1eb, 0xa1b2, 0xa1b3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x005b, 0x005d, 0x003f, 0xa1b0, 0xa1b1, 0x002c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4a8, 0xecfe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xaaa1, 0xaaa2, 0xaaa3, 0xaaa4, 0xaaa5, 0xaaa6, 0xaaa7, - 0xaaa8, 0xaaa9, 0xaaaa, 0xaaab, 0xaaac, 0xaaad, 0xaaae, 0xaaaf, - 0xaab0, 0xaab1, 0xaab2, 0xaab3, 0xaab4, 0xaab5, 0xaab6, 0xaab7, - 0xaab8, 0xaab9, 0xaaba, 0xaabb, 0xaabc, 0xaabd, 0xaabe, 0xaabf, - 0xaac0, 0xaac1, 0xaac2, 0xaac3, 0xaac4, 0xaac5, 0xaac6, 0xaac7, - 0xaac8, 0xaac9, 0xaaca, 0xaacb, 0xaacc, 0xaacd, 0xaace, 0xaacf, - 0xaad0, 0xaad1, 0xaad2, 0xaad3, 0xaad4, 0xaad5, 0xaad6, 0xaad7, - 0xaad8, 0xaad9, 0xaada, 0xaadb, 0xaadc, 0xaadd, 0xaade, 0xaadf, - 0xaae0, 0xaae1, 0xaae2, 0xaae3, 0xaae4, 0xaae5, 0xaae6, 0xaae7, - 0xaae8, 0xaae9, 0xaaea, 0xaaeb, 0xaaec, 0xaaed, 0xaaee, 0xaaef, - 0xaaf0, 0xaaf1, 0xaaf2, 0xaaf3, 0xaaa6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xaba1, 0xaba2, 0xaba3, 0xaba4, 0xaba5, 0xaba6, 0xaba7, - 0xaba8, 0xaba9, 0xabaa, 0xabab, 0xabac, 0xabad, 0xabae, 0xabaf, - 0xabb0, 0xabb1, 0xabb2, 0xabb3, 0xabb4, 0xabb5, 0xabb6, 0xabb7, - 0xabb8, 0xabb9, 0xabba, 0xabbb, 0xabbc, 0xabbd, 0xabbe, 0xabbf, - 0xabc0, 0xabc1, 0xabc2, 0xabc3, 0xabc4, 0xabc5, 0xabc6, 0xabc7, - 0xabc8, 0xabc9, 0xabca, 0xabcb, 0xabcc, 0xabcd, 0xabce, 0xabcf, - 0xabd0, 0xabd1, 0xabd2, 0xabd3, 0xabd4, 0xabd5, 0xabd6, 0xabd7, - 0xabd8, 0xabd9, 0xabda, 0xabdb, 0xabdc, 0xabdd, 0xabde, 0xabdf, - 0xabe0, 0xabe1, 0xabe2, 0xabe3, 0xabe4, 0xabe5, 0xabe6, 0xabe7, - 0xabe8, 0xabe9, 0xabea, 0xabeb, 0xabec, 0xabed, 0xabee, 0xabef, - 0xabf0, 0xabf1, 0xabf2, 0xabf3, 0xabf4, 0xabf5, 0xabf6, 0xabef, - 0xabf0, 0xabf1, 0xabf2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3100 .. 0x31ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, - 0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, - 0xa4b0, 0xa4b1, 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, - 0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf, - 0xa4c0, 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, - 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, - 0xa4d0, 0xa4d1, 0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, - 0xa4d8, 0xa4d9, 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df, - 0xa4e0, 0xa4e1, 0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7, - 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, - 0xa4f0, 0xa4f1, 0xa4f2, 0xa4f3, 0xa4f4, 0xa4f5, 0xa4f6, 0xa4f7, - 0xa4f8, 0xa4f9, 0xa4fa, 0xa4fb, 0xa4fc, 0xa4fd, 0xa4fe, 0x003f, - 0x003f, 0x003f, 0xece9, 0xeca3, 0xdfb2, 0xdecc, 0xdfbe, 0xf1e9, - 0xf9bb, 0xcba3, 0xebe0, 0xdcb0, 0xefcb, 0xf4b8, 0xf2a2, 0xecd1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3200 .. 0x32ff */ - 0xa9b1, 0xa9b2, 0xa9b3, 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, - 0xa9b9, 0xa9ba, 0xa9bb, 0xa9bc, 0xa9bd, 0xa9be, 0xa9bf, 0xa9c0, - 0xa9c1, 0xa9c2, 0xa9c3, 0xa9c4, 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, - 0xa9c9, 0xa9ca, 0xa9cb, 0xa9cc, 0xa2df, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa8b1, 0xa8b2, 0xa8b3, 0xa8b4, 0xa8b5, 0xa8b6, 0xa8b7, 0xa8b8, - 0xa8b9, 0xa8ba, 0xa8bb, 0xa8bc, 0xa8bd, 0xa8be, 0xa8bf, 0xa8c0, - 0xa8c1, 0xa8c2, 0xa8c3, 0xa8c4, 0xa8c5, 0xa8c6, 0xa8c7, 0xa8c8, - 0xa8c9, 0xa8ca, 0xa8cb, 0xa8cc, 0x003f, 0x003f, 0x003f, 0xa2de, - 0xece9, 0xeca3, 0xdfb2, 0xdecc, 0xe7e9, 0xd7bf, 0xf6d2, 0xf8a2, - 0xcefa, 0xe4a8, 0xeac5, 0xfbfd, 0xe2a9, 0xd9ca, 0xd1d1, 0xf7cf, - 0xeced, 0xf1bb, 0xeaf3, 0xdee4, 0xd9a3, 0xf7e5, 0xeeaf, 0xf5e6, - 0x003f, 0xddfa, 0xd1fb, 0xd2b3, 0xeeea, 0xe9d0, 0xecd4, 0xf1bc, - 0xfaa3, 0xfdcc, 0x003f, 0xefe1, 0xdfbe, 0xf1e9, 0xf9bb, 0xf1a7, - 0xe9d3, 0x003f, 0xf0f3, 0x003f, 0xcaf8, 0xd0ea, 0xedc0, 0xfaf0, - 0xe5a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xaba2, 0xaba4, 0xaba6, 0xaba8, 0xabaa, 0xabab, 0xabad, 0xabaf, - 0xabb1, 0xabb3, 0xabb5, 0xabb7, 0xabb9, 0xabbb, 0xabbd, 0xabbf, - 0xabc1, 0xabc4, 0xabc6, 0xabc8, 0xabca, 0xabcb, 0xabcc, 0xabcd, - 0xabce, 0xabcf, 0xabd2, 0xabd5, 0xabd8, 0xabdb, 0xabde, 0xabdf, - 0xabe0, 0xabe1, 0xabe2, 0xabe4, 0xabe6, 0xabe8, 0xabe9, 0xabea, - 0xabeb, 0xabec, 0xabed, 0xabef, 0xabf0, 0xabf1, 0xabf2, 0x003f, - /* 0x3300 .. 0x33ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa7c9, 0xa7ca, 0xa7cb, 0xa7cc, 0xa7cd, 0x003f, 0x003f, 0x003f, - 0xa7ba, 0xa7bb, 0xa7dc, 0xa7dd, 0xa7de, 0xa7b6, 0xa7b7, 0xa7b8, - 0xa7d4, 0xa7d5, 0xa7d6, 0xa7d7, 0xa7d8, 0xa7a1, 0xa7a2, 0xa7a3, - 0xa7a5, 0xa7ab, 0xa7ac, 0xa7ad, 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, - 0xa7b2, 0xa7b3, 0xa7b4, 0xa7a7, 0xa7a8, 0xa7a9, 0xa7aa, 0xa7bd, - 0xa7be, 0xa7e5, 0xa7e6, 0xa7e7, 0xa7e8, 0xa7e1, 0xa7e2, 0xa7e3, - 0xa7bf, 0xa7c0, 0xa7c1, 0xa7c2, 0xa7c3, 0xa7c4, 0xa7c5, 0xa7c6, - 0xa7c7, 0xa7c8, 0xa7ce, 0xa7cf, 0xa7d0, 0xa7d1, 0xa7d2, 0xa7d3, - 0xa7da, 0xa7db, 0xa2e3, 0xa7ec, 0xa7a6, 0xa7e0, 0xa7ef, 0xa2e1, - 0xa7bc, 0xa7ed, 0xa7b5, 0x003f, 0x003f, 0x003f, 0x003f, 0xa7b9, - 0xa7ea, 0x003f, 0x003f, 0xa7eb, 0x003f, 0x003f, 0xa7df, 0x003f, - 0xa2e4, 0x003f, 0x003f, 0xa7e4, 0xa7ee, 0xa7e9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x4e00 .. 0x4eff */ - 0xece9, 0xefcb, 0x003f, 0xf6d2, 0x003f, 0x003f, 0x003f, 0xd8b2, - 0xeddb, 0xdfb2, 0xdfbe, 0xf9bb, 0x003f, 0xdcf4, 0x003f, 0x003f, - 0x003f, 0xf5e4, 0x003f, 0x003f, 0xf3a6, 0xdde0, 0xe1a6, 0x003f, - 0xcef8, 0xdcb0, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3aa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1e9, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcdfa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfcaf, 0xd3a1, 0x003f, 0xf1ab, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7d1, 0xd2ac, 0x003f, 0xcef9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf1fd, 0x003f, 0xdebf, 0xfbba, 0xf9b9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xced2, 0x003f, - 0xe3ab, 0xebe0, 0x003f, 0x003f, 0x003f, 0xcefa, 0xcbf7, 0xe5a5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcae1, 0x003f, 0xd4cc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeae1, 0x003f, 0x003f, 0xdce3, 0xdfad, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbeb, 0x003f, - 0x003f, 0x003f, 0xd5af, 0x003f, 0x003f, 0x003f, 0xd6f5, 0x003f, - 0xe5f8, 0x003f, 0x003f, 0xdec0, 0xeca3, 0x003f, 0xe9cd, 0x003f, - 0xeaa7, 0xe9f6, 0xfbbb, 0x003f, 0xe7e9, 0xefcc, 0x003f, 0x003f, - 0xd0e6, 0x003f, 0x003f, 0xdec1, 0x003f, 0x003f, 0xe4ac, 0x003f, - 0x003f, 0xd8cc, 0xf9f1, 0x003f, 0xcedf, 0xfaa4, 0xe6b2, 0x003f, - 0xfafb, 0x003f, 0x003f, 0xfabd, 0xccc8, 0xefcd, 0xd5d5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3a2, 0x003f, - 0x003f, 0x003f, 0xecd1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4a7, 0xecd2, 0x003f, 0x003f, 0xf6b1, 0x003f, 0x003f, 0xcefb, - 0x003f, 0x003f, 0xd0d1, 0xcbbf, 0x003f, 0xeda4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeda8, 0xdec2, 0xf6e2, 0xeddc, - 0xdcf5, 0xe0b9, 0x003f, 0x003f, 0x003f, 0xd4ce, 0x003f, 0xf4b5, - 0x003f, 0x003f, 0x003f, 0xd3db, 0xd6b5, 0xeca4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4e6, 0x003f, 0xf1ea, 0x003f, 0x003f, 0x003f, 0xcbec, 0xcbc0, - 0x003f, 0x003f, 0x003f, 0xecf2, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x4f00 .. 0x4fff */ - 0x003f, 0xd0ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf9f2, 0xeca5, 0xd0df, 0x003f, 0xe7ea, 0xd0eb, 0xdcd1, - 0xdbe9, 0xfdcc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbd7, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdae1, 0x003f, 0xd6b6, 0x003f, - 0xe3df, 0x003f, 0xdec3, 0x003f, 0xdec4, 0xcaa1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeeec, 0x003f, 0x003f, 0xd3a3, 0xeeb7, - 0xf8cf, 0x003f, 0x003f, 0x003f, 0x003f, 0xeac8, 0xeeb8, 0xf1ac, - 0xf1a5, 0xe9ce, 0x003f, 0x003f, 0x003f, 0xf9bc, 0x003f, 0x003f, - 0x003f, 0xe5f9, 0xecea, 0xddd6, 0xedc2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5ba, - 0xdbd8, 0x003f, 0x003f, 0xcaa2, 0x003f, 0x003f, 0xd1cd, 0x003f, - 0x003f, 0x003f, 0xeeed, 0x003f, 0x003f, 0x003f, 0xeceb, 0xdec5, - 0x003f, 0xe3e0, 0x003f, 0xcac9, 0xf2e9, 0x003f, 0xd5ce, 0x003f, - 0xf6b6, 0x003f, 0xcec2, 0xd6c7, 0x003f, 0xe3b4, 0x003f, 0xf1ad, - 0x003f, 0xeae2, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7c2, 0x003f, - 0xf3a7, 0x003f, 0x003f, 0xcdea, 0x003f, 0xebee, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9b2, 0xfda5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6d5, 0xd5e2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8b5, - 0x003f, 0x003f, 0xccf5, 0xf5b5, 0xe4ad, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe7eb, 0xf1d5, 0x003f, 0x003f, 0x003f, 0xf0bb, 0x003f, - 0x003f, 0xe9b5, 0x003f, 0xccc9, 0xfad5, 0x003f, 0x003f, 0xe1d4, - 0x003f, 0x003f, 0xd7d6, 0x003f, 0x003f, 0xdcc1, 0x003f, 0xdec6, - 0xfaef, 0xe3e1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1f3, 0xdcf6, - 0x003f, 0xcefc, 0x003f, 0xdbc4, 0x003f, 0xf8f1, 0x003f, 0x003f, - 0xdce4, 0x003f, 0xe5ef, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5000 .. 0x50ff */ - 0x003f, 0x003f, 0xdcb1, 0x003f, 0x003f, 0x003f, 0xd5d6, 0x003f, - 0x003f, 0xf3da, 0x003f, 0xcbc1, 0x003f, 0xdbc3, 0x003f, 0x003f, - 0x003f, 0xd9fa, 0xd3ee, 0x003f, 0x003f, 0x003f, 0xfab8, 0x003f, - 0x003f, 0xfda6, 0xebef, 0x003f, 0xf4a6, 0x003f, 0xccca, 0xf3a8, - 0x003f, 0xf3db, 0x003f, 0xdba7, 0xf6b7, 0x003f, 0xcfe6, 0xf0f2, - 0xcbda, 0x003f, 0xe7d2, 0xd7c3, 0xf6f0, 0xe8de, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5a6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5e7, 0x003f, 0x003f, 0x003f, 0xcaa3, - 0xcca7, 0xeac9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8b6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfaa5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1ae, 0x003f, 0xefce, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbed, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf6b0, 0xefcf, 0xe9cf, 0x003f, - 0xf7de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xced3, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcf7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdba8, 0x003f, 0x003f, - 0x003f, 0xcbf8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdfa1, 0xdde1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf5ca, 0xe9b6, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7ec, 0xeeee, 0x003f, 0xf3f0, 0x003f, 0xdfbf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcccb, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0c1, 0x003f, 0x003f, - 0x003f, 0xf4d2, 0xe0ba, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfc0, - 0x003f, 0xcee0, 0x003f, 0x003f, 0x003f, 0xdcd2, 0xfdea, 0x003f, - 0x003f, 0x003f, 0xd6f6, 0x003f, 0x003f, 0x003f, 0xeaca, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8e9, 0x003f, 0xe3ac, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3d0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcaa4, 0x003f, 0xdbf8, 0x003f, 0x003f, 0x003f, 0xdec7, - /* 0x5100 .. 0x51ff */ - 0xebf0, 0xf1d6, 0x003f, 0x003f, 0xe5e2, 0x003f, 0xcccc, 0x003f, - 0x003f, 0xcbfb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeae3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfc1, - 0x003f, 0xd6ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe9d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeeb9, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5e3, - 0x003f, 0x003f, 0xd1d3, 0x003f, 0xe5f0, 0x003f, 0x003f, 0x003f, - 0xe8b4, 0xebc3, 0x003f, 0xeaaa, 0xfafc, 0xf5f6, 0xf0bc, 0xfdd4, - 0xe0bb, 0xcec3, 0x003f, 0xd0ba, 0xf7ba, 0xd8f3, 0xf7cd, 0x003f, - 0x003f, 0x003f, 0xe4ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd4df, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd0e7, 0x003f, 0x003f, 0xecfd, 0x003f, 0xd2ae, - 0xeeef, 0xd5d7, 0xeae4, 0xf8a2, 0xcdeb, 0xd7bf, 0xfbb1, 0x003f, - 0x003f, 0xcdec, 0x003f, 0x003f, 0x003f, 0xdcb2, 0xd0ec, 0xcefd, - 0xeef0, 0x003f, 0x003f, 0x003f, 0xccc2, 0x003f, 0x003f, 0x003f, - 0xd0ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5f7, 0x003f, - 0x003f, 0x003f, 0xf3fc, 0x003f, 0x003f, 0xeea2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd9b3, 0x003f, 0x003f, 0xd8f4, 0x003f, 0xe9b7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xceae, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9a2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd8f1, 0x003f, 0xd4cf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a7, 0xd5d2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6a9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf4a2, 0x003f, 0xf1d7, 0x003f, - 0x003f, 0xd5d8, 0x003f, 0xf0bd, 0xd7d0, 0xd4d0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd7cf, 0xebea, 0xfdeb, 0x003f, - 0x003f, 0xdbed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfcc5, 0xcbc2, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdd5, 0x003f, - 0xf4c8, 0xe8ea, 0xf5f3, 0x003f, 0x003f, 0xf9de, 0x003f, 0x003f, - /* 0x5200 .. 0x52ff */ - 0xd3ef, 0x003f, 0x003f, 0xecd3, 0x003f, 0x003f, 0xddc2, 0xefb7, - 0xe7d4, 0x003f, 0xcaca, 0x003f, 0x003f, 0x003f, 0xd9fb, 0x003f, - 0x003f, 0xfafd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6aa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4f8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf7f7, 0xdcac, 0x003f, 0x003f, - 0x003f, 0xd7d7, 0xdfa2, 0x003f, 0x003f, 0x003f, 0xcebe, 0x003f, - 0xd3f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0a4, 0xe1ec, - 0xcfe7, 0xf3cb, 0xeda9, 0xcabe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf4ef, 0x003f, 0x003f, 0x003f, 0xf6ce, - 0x003f, 0x003f, 0xdefb, 0xd0bb, 0xd5b7, 0xeef1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf4a8, 0x003f, 0xdcf8, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcba7, 0x003f, 0xdace, 0x003f, 0x003f, - 0x003f, 0xe0e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeda5, 0xeef2, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcf9, - 0x003f, 0x003f, 0xf9dc, 0x003f, 0x003f, 0xf3dc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8f2, 0x003f, 0xf4f9, - 0x003f, 0x003f, 0x003f, 0xfcf1, 0x003f, 0x003f, 0x003f, 0xd0bc, - 0xdbf9, 0xd7b1, 0x003f, 0x003f, 0x003f, 0xcbfc, 0x003f, 0x003f, - 0x003f, 0xf0a5, 0xcbfd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd5f4, 0x003f, 0x003f, 0x003f, 0xcded, - 0xcaa5, 0x003f, 0x003f, 0xd6ab, 0xd0c2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf0be, 0xd2bd, 0xcca4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfab6, 0x003f, - 0x003f, 0xcccd, 0x003f, 0xdafa, 0x003f, 0xf6cf, 0x003f, 0xe9b8, - 0x003f, 0xd8f5, 0x003f, 0x003f, 0x003f, 0xccce, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd7cd, 0x003f, 0x003f, 0xd4d1, 0xe9ed, 0x003f, - 0xcaeb, 0xd9e2, 0x003f, 0xfdb2, 0x003f, 0xe3ad, 0xd6cc, 0xd9b4, - 0x003f, 0x003f, 0xe1a7, 0xeed3, 0xd0c3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfdb3, 0x003f, 0xd5e4, 0x003f, 0x003f, - 0xcfe8, 0x003f, 0xedc3, 0xd0b2, 0x003f, 0x003f, 0xcefe, 0xdaa8, - /* 0x5300 .. 0x53ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8d0, 0x003f, 0x003f, - 0xfdd6, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8d1, 0x003f, 0xf8d2, - 0xdcd3, 0x003f, 0x003f, 0x003f, 0x003f, 0xdde2, 0xfbf9, 0xddc1, - 0x003f, 0xe3b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeddd, 0xcec4, 0x003f, 0xcba1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdde3, 0x003f, 0x003f, 0x003f, 0x003f, 0xfcdd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf9af, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2fb, - 0xcfa1, 0xe4a8, 0x003f, 0xf4b6, 0xecfe, 0x003f, 0x003f, 0xe3ae, - 0xe7ed, 0xfdc1, 0xdae2, 0x003f, 0x003f, 0xd8b3, 0x003f, 0x003f, - 0x003f, 0xdde4, 0xf0ef, 0xf6f1, 0xfaf0, 0x003f, 0x003f, 0xd1f5, - 0x003f, 0x003f, 0xdacf, 0x003f, 0xdcd4, 0x003f, 0xdca6, 0x003f, - 0xefbf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcecf, 0x003f, - 0xe0d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9d6, - 0xecd4, 0xeacb, 0x003f, 0x003f, 0xcabf, 0xd5b0, 0x003f, 0xcfe9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1ed, 0x003f, 0xcccf, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4ed, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd7d8, 0x003f, 0xfda7, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaab, - 0xf6b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xcff0, 0xf9bd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6f4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcbdb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf3d1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9d1, 0xf3a9, 0xd0e0, 0xe9d2, 0x003f, 0xdae3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d2, 0x003f, 0xf6a2, 0xe1f4, - 0x003f, 0x003f, 0x003f, 0xdae4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe7d5, 0xf5bf, 0xcfa2, 0xcdaf, 0xcfa3, 0x003f, 0x003f, - 0x003f, 0xcdb0, 0xf1fe, 0xd0a3, 0xe1af, 0xf8a3, 0x003f, 0xcaa6, - 0xf7bb, 0xf2ea, 0xdec8, 0xe9d3, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdec9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5400 .. 0x54ff */ - 0x003f, 0x003f, 0x003f, 0xfdde, 0xcac0, 0x003f, 0x003f, 0x003f, - 0xf9ea, 0xd1ce, 0xeed4, 0x003f, 0xd4d2, 0xd9a3, 0xfda8, 0xd7d9, - 0xf7ce, 0xfabe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcfd6, 0x003f, 0xd7f0, 0x003f, 0xebe1, - 0xf8c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcfa, 0x003f, - 0x003f, 0xddc3, 0x003f, 0xf9df, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe7ef, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfde5, 0xf6a3, 0x003f, 0xd9fc, 0xfda9, 0x003f, 0xe7ee, 0x003f, - 0x003f, 0x003f, 0xd5e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefd0, 0x003f, 0xcdb1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf7a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf1b2, 0x003f, 0xf1b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdb2, 0x003f, 0xdaab, 0x003f, 0xcaa7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3e2, 0xfbbc, 0xd9a4, 0x003f, 0x003f, - 0xeeba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8d3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfbfa, 0x003f, 0xcfa4, 0x003f, - 0xdcfb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf6e3, 0x003f, 0x003f, 0x003f, - 0xedaa, 0x003f, 0x003f, 0xf2a1, 0xcee1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfaa6, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf9e0, 0x003f, 0x003f, 0x003f, 0x003f, 0xecd6, 0x003f, 0x003f, - 0xe4ee, 0xf9a1, 0x003f, 0x003f, 0xfbef, 0x003f, 0x003f, 0x003f, - 0xf9eb, 0xeea3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeaac, 0x003f, 0x003f, 0x003f, 0xcaa8, 0x003f, 0x003f, - 0xf4fa, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdd6, 0xfcf6, 0x003f, - 0x003f, 0x003f, 0xf4c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf8d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5500 .. 0x55ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xf8a6, 0x003f, 0xdeca, 0xf2c6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7da, 0x003f, - 0xd3d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd8c5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeae6, - 0x003f, 0xf3dd, 0x003f, 0x003f, 0x003f, 0xe4da, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6e4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf6f2, 0x003f, 0xdfc2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9fd, - 0x003f, 0x003f, 0x003f, 0xccf6, 0x003f, 0x003f, 0xd3ba, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4af, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9e1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf0a6, 0x003f, 0x003f, 0x003f, - 0xcbd3, 0x003f, 0x003f, 0x003f, 0xe0bc, 0x003f, 0xf4ca, 0xd4fa, - 0x003f, 0xfdaa, 0xf9e2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf4b7, 0xfdc2, 0xfcb0, 0x003f, 0xfdec, 0xcae2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdbd, - 0x003f, 0xeae7, 0xdfc3, 0xd1d2, 0xcee2, 0x003f, 0xd3a4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdab, 0x003f, 0xdfe0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf2c7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7f0, 0x003f, 0xd0ee, 0x003f, 0x003f, 0xf3aa, - 0x003f, 0x003f, 0x003f, 0xdecb, 0xf6b8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1f5, 0xf1b3, 0x003f, - /* 0x5600 .. 0x56ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7a3, 0x003f, - 0x003f, 0xcaa9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcfa5, 0x003f, 0x003f, 0xdfc4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1b0, - 0x003f, 0x003f, 0xf0bf, 0x003f, 0xf6a4, 0x003f, 0xe3b6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfac6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd0ef, 0x003f, 0x003f, 0xfded, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xddc4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfcf7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6bf, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdead, 0x003f, 0xfabf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe5f1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xedc4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd2a5, 0x003f, 0x003f, 0xfdee, 0x003f, 0x003f, - 0x003f, 0xf5b6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1f6, 0xdecc, 0x003f, 0x003f, 0xfcde, 0x003f, - 0xecd7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcddd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd6b7, 0xcdb3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5700 .. 0x57ff */ - 0x003f, 0x003f, 0x003f, 0xf8d5, 0xe5d8, 0x003f, 0x003f, 0x003f, - 0xcfea, 0x003f, 0x003f, 0xcfd0, 0x003f, 0xeacc, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeaae, 0xeaad, 0x003f, 0x003f, 0xd3f1, 0x003f, - 0xd3a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7cf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeea4, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0a4, 0x003f, 0x003f, - 0xf2a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd0f0, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf2a3, 0x003f, 0xf7f8, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0b3, - 0x003f, 0x003f, 0xdba9, 0x003f, 0x003f, 0xd3bb, 0xcaec, 0x003f, - 0xf1a6, 0xcbd5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf7e7, 0x003f, 0x003f, 0xcdde, 0x003f, 0xf7a4, 0x003f, - 0x003f, 0x003f, 0xf8c0, 0x003f, 0x003f, 0x003f, 0xd3dd, 0x003f, - 0xccd0, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfa6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf6f3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3dc, 0x003f, 0x003f, 0xfafe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfaa7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xebd9, 0x003f, 0xcfa7, 0xeaaf, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4ef, 0x003f, 0x003f, 0x003f, 0xe9b9, - 0xf1d8, 0x003f, 0x003f, 0xd8d8, 0x003f, 0x003f, 0xe0f2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6b4, - 0xdcfc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf3f1, 0x003f, 0x003f, 0x003f, 0xe3d0, 0x003f, 0x003f, 0xf2fb, - 0x003f, 0xdbc6, 0xd0f1, 0x003f, 0xd0f2, 0x003f, 0x003f, 0x003f, - /* 0x5800 .. 0x58ff */ - 0xcfdc, 0x003f, 0xd3d1, 0x003f, 0x003f, 0xccb1, 0xf7d8, 0x003f, - 0xcba8, 0xebbc, 0xe4be, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4dc, 0x003f, - 0x003f, 0xdcc2, 0x003f, 0x003f, 0xf0a7, 0x003f, 0x003f, 0xe6c0, - 0x003f, 0x003f, 0xcaed, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8eb, - 0xe5e8, 0xdcc3, 0x003f, 0x003f, 0xedde, 0xd3f2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xccf7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xced4, 0xe7ab, 0x003f, 0x003f, 0x003f, 0xcbc3, - 0x003f, 0xe1b1, 0x003f, 0x003f, 0xf7b2, 0x003f, 0x003f, 0xd3f3, - 0xd3d2, 0x003f, 0xf5c0, 0x003f, 0x003f, 0x003f, 0xdfdd, 0x003f, - 0x003f, 0xeef3, 0xe7f1, 0x003f, 0xfdb4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2c8, 0x003f, 0x003f, - 0x003f, 0xf3d2, 0x003f, 0x003f, 0xeef4, 0x003f, 0xe2d3, 0x003f, - 0x003f, 0x003f, 0x003f, 0xccd1, 0x003f, 0xdfea, 0x003f, 0x003f, - 0x003f, 0xe9ba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd9d7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf5cd, 0x003f, 0xf1f2, 0xfac7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd9f8, 0xd4c2, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6e5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xddc5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7f2, 0xeddf, 0x003f, 0x003f, 0xcacb, 0x003f, - 0x003f, 0xdbfa, 0x003f, 0x003f, 0x003f, 0xe8b5, 0x003f, 0xd3a6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdb5, 0x003f, - 0x003f, 0xf9c9, 0x003f, 0xe4e2, 0x003f, 0xfbbd, 0x003f, 0x003f, - 0xd7a4, 0xcec5, 0x003f, 0x003f, 0x003f, 0x003f, 0xced5, 0xd6e6, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe5bd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdecd, 0xecf3, 0x003f, 0x003f, 0xede0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xecec, 0xfbbe, 0xdfeb, 0x003f, 0xe1f8, 0x003f, 0x003f, - /* 0x5900 .. 0x59ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9be, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd0f3, 0xe0aa, 0xe8e2, 0x003f, - 0x003f, 0xe2d4, 0xd2fd, 0x003f, 0xe5a8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd9d3, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3de, - 0x003f, 0xf4b8, 0xf7bc, 0xdcfd, 0x003f, 0xe8ec, 0xe4e7, 0x003f, - 0x003f, 0xe3f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeca8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfaf1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe5f2, 0x003f, 0x003f, 0xd0f4, - 0xd2af, 0xdce5, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0a5, 0xf1b4, - 0xfcb1, 0xccf8, 0x003f, 0x003f, 0xddc6, 0xfad1, 0x003f, 0xf7df, - 0x003f, 0x003f, 0xfaa8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeef5, 0x003f, 0xdece, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7f3, - 0x003f, 0x003f, 0xf7ac, 0xebc4, 0xede1, 0xe0ab, 0xddc7, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd2b3, 0xd2bf, 0x003f, 0x003f, 0x003f, - 0xcacc, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbbf, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5fd, 0xdde5, 0xd8cd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xecf4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd0f5, 0x003f, 0x003f, 0xe8ed, 0xd0d2, - 0x003f, 0xd9d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6e6, 0x003f, 0x003f, - 0xdbaa, 0x003f, 0x003f, 0x003f, 0xf7e0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd8d9, 0x003f, 0xf4a3, 0x003f, 0x003f, 0xf4dd, 0x003f, - 0x003f, 0x003f, 0x003f, 0xefd1, 0x003f, 0x003f, 0xd9b5, 0x003f, - 0x003f, 0xedab, 0x003f, 0xe3b7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeebb, 0xcdb4, 0x003f, 0xe0f3, 0xeacd, 0x003f, 0x003f, 0x003f, - 0x003f, 0xecf5, 0xe8ee, 0x003f, 0xcba9, 0xf1af, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcacd, 0x003f, - 0xeca9, 0x003f, 0xf2eb, 0x003f, 0xfdef, 0x003f, 0xf9f3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe6c1, 0x003f, 0x003f, 0xecd8, 0x003f, 0x003f, 0x003f, 0xedac, - /* 0x5a00 .. 0x5aff */ - 0x003f, 0xeace, 0x003f, 0xe8df, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdecf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd2a6, 0x003f, 0x003f, 0xe7f4, 0xd1d6, 0x003f, 0x003f, 0xe6c2, - 0xe3e3, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4b0, 0x003f, 0x003f, - 0x003f, 0xd8b4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6a5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf3de, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd7a5, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7e8, 0x003f, - 0x003f, 0xe8c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfbe6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdde6, 0x003f, 0x003f, 0x003f, 0xdcfe, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd8da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdaac, 0xeab0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe3b8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcaaa, 0xe1f9, 0x003f, 0xeab1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf2ec, 0x003f, 0x003f, 0xfaee, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeed5, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9f4, 0x003f, - 0x003f, 0xd2ec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5b00 .. 0x5bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbfb, 0x003f, 0x003f, - 0x003f, 0xfdf0, 0x003f, 0xe0bd, 0xcee3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8c6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdeae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdfc5, 0x003f, 0x003f, 0xe5be, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedad, 0xfaea, 0x003f, 0x003f, 0xcdee, 0xeda6, 0x003f, 0xedae, - 0xf0ed, 0x003f, 0xdda1, 0x003f, 0xedaf, 0xfcf8, 0x003f, 0xd8eb, - 0x003f, 0x003f, 0x003f, 0xccf9, 0xcdb5, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfaa9, 0x003f, 0xe1dd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2d5, 0xedcf, 0x003f, 0x003f, 0x003f, 0xdda2, 0x003f, 0x003f, - 0xf9ca, 0x003f, 0xeae8, 0x003f, 0xe5ed, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3eb, 0x003f, 0xe9d4, - 0xe1fa, 0xe4cc, 0x003f, 0xe1e4, 0xe8c7, 0x003f, 0x003f, 0xcedb, - 0x003f, 0x003f, 0x003f, 0xdcd5, 0x003f, 0xf7b5, 0xfcf3, 0xf0f3, - 0xceaf, 0xf1b5, 0xefd2, 0xe8c8, 0xebf1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcbd4, 0xe0be, 0xe3f8, 0xeae9, 0xfcb2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0f4, 0x003f, 0xcfe0, 0x003f, - 0xeea5, 0x003f, 0x003f, 0xfaaa, 0xe6c3, 0xe1b2, 0xcaab, 0x003f, - 0xe3e4, 0xe9bb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d6, - 0xf3f2, 0x003f, 0xeed6, 0xeab2, 0xd0f6, 0xecd9, 0xdacb, 0xcfa8, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdda3, 0x003f, 0x003f, 0x003f, - 0xd8db, 0x003f, 0xf9ce, 0xe9d5, 0xe3d1, 0x003f, 0x003f, 0xd2bc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8ac, 0xf3cc, - 0x003f, 0xcdfb, 0xf6d6, 0x003f, 0xe7f5, 0xe8ef, 0xe3f9, 0xd2bb, - 0xf3f3, 0xe3fb, 0x003f, 0xded0, 0xceb0, 0x003f, 0xd6f7, 0xf1d9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5c1, 0xdcc4, 0x003f, - 0xf5bb, 0x003f, 0xded1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5c00 .. 0x5cff */ - 0x003f, 0xdce6, 0x003f, 0x003f, 0xded2, 0x003f, 0x003f, 0xede2, - 0xeef6, 0xeacf, 0xf0ee, 0xe3fc, 0x003f, 0xd3df, 0xd3f4, 0xe1b3, - 0x003f, 0xe1b4, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4d3, 0x003f, - 0x003f, 0xdfc6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9d6, 0x003f, 0x003f, 0x003f, - 0xdbab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf6a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe3b9, 0xebc5, 0xf4a9, 0xcdb6, 0xd2f9, 0x003f, 0xdaad, 0xd2e3, - 0xcfd1, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbdc, 0xccfa, 0x003f, - 0xcfdd, 0x003f, 0x003f, 0xe8a9, 0x003f, 0xe3bb, 0xe3ba, 0x003f, - 0x003f, 0xe0da, 0x003f, 0x003f, 0x003f, 0xeef7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdcb3, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3f5, 0x003f, 0xd7a6, 0x003f, 0xf6b5, 0xd7db, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1d5, 0x003f, 0x003f, 0xd4ea, - 0x003f, 0xdfa3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfddf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd0f7, 0xedd4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcbaa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe4db, 0x003f, 0xe1fb, 0xcba2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3e0, 0x003f, 0xe4bf, 0x003f, 0xfbc0, 0x003f, 0xdabe, - 0xe4cd, 0x003f, 0xd6b9, 0x003f, 0x003f, 0x003f, 0xefc0, 0x003f, - 0xe1fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf6b9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdfc7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdce7, - 0xdce8, 0x003f, 0x003f, 0x003f, 0xfad6, 0x003f, 0xd3f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf1da, 0x003f, 0xfaf2, 0x003f, 0x003f, - /* 0x5d00 .. 0x5dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2fd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5cf, 0xd0f8, 0x003f, - 0x003f, 0xcddf, 0x003f, 0x003f, 0xf5cb, 0x003f, 0xe4f0, 0xcbab, - 0x003f, 0xd7c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2fe, - 0x003f, 0xddda, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdaae, 0xcaee, 0x003f, 0x003f, 0x003f, - 0xd5b9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3a1, 0x003f, 0x003f, 0xe8e3, 0x003f, 0x003f, 0xf3ab, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfa9, - 0x003f, 0x003f, 0x003f, 0xd3f7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4f1, 0x003f, 0x003f, - 0xcee4, 0x003f, 0xe8f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5f5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7ae, 0x003f, 0xd6ba, 0x003f, 0xdfec, 0xe4c0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8e4, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd8b5, 0x003f, 0x003f, 0x003f, 0xe4dc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4b9, 0xf1b6, 0x003f, - 0x003f, 0xe2de, 0xe1b5, 0x003f, 0x003f, 0xcdef, 0xf1a7, 0xcee5, - 0xcbdd, 0x003f, 0x003f, 0xd9e3, 0x003f, 0x003f, 0xf3ac, 0x003f, - 0x003f, 0xd0f9, 0xecab, 0xded3, 0xf7e9, 0x003f, 0x003f, 0xf9f5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1de, 0xcbee, 0x003f, - /* 0x5e00 .. 0x5eff */ - 0x003f, 0x003f, 0xe3bc, 0xf8d6, 0x003f, 0x003f, 0xdbee, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfdf1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf7b6, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4de, 0x003f, - 0x003f, 0xf2ed, 0x003f, 0xdbd9, 0x003f, 0xf0a8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1fd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xded4, 0x003f, 0xe0ac, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xede3, 0x003f, 0x003f, 0xd3e1, 0x003f, - 0xdfc8, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9b6, 0x003f, 0xfdac, - 0xefd3, 0x003f, 0x003f, 0x003f, 0xe4c1, 0xf8eb, 0x003f, 0xdbac, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfcc6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8ad, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6ba, - 0x003f, 0xdbdf, 0xd3d3, 0xf8c7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcace, 0xf8c1, 0xd2b4, 0x003f, 0x003f, 0xdcb4, - 0xfab9, 0xcacf, 0x003f, 0xfcb3, 0xeaea, 0xeaeb, 0xd0fa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xede4, 0x003f, 0x003f, 0xdde7, - 0x003f, 0x003f, 0xdfc9, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfed, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeebc, 0x003f, 0xefc1, - 0x003f, 0x003f, 0xccd2, 0x003f, 0xdda4, 0x003f, 0x003f, 0x003f, - 0xdfca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3f8, 0xf1a8, - 0x003f, 0x003f, 0x003f, 0xcdb7, 0x003f, 0xefd4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4dd, 0xdfee, 0xcbac, - 0xe9bc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeaec, 0x003f, - 0x003f, 0x003f, 0xdfcb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf9bf, 0xd6af, 0xd5c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcfaa, 0x003f, 0x003f, 0xcea9, 0x003f, 0x003f, 0xd6f8, 0x003f, - 0x003f, 0x003f, 0xf1b7, 0xeef8, 0x003f, 0x003f, 0x003f, 0xd9d9, - 0xf3df, 0x003f, 0xf8c8, 0xcec6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd5e6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf4e6, 0x003f, 0x003f, 0xe6c5, 0xefd5, - 0x003f, 0x003f, 0xcbef, 0xfcdf, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5f00 .. 0x5fff */ - 0x003f, 0xdca7, 0x003f, 0x003f, 0xd6e7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf8c9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3d2, - 0x003f, 0xe3bd, 0x003f, 0xcfe1, 0xf0c0, 0xecda, 0x003f, 0xddd7, - 0xfbf0, 0x003f, 0x003f, 0xecac, 0x003f, 0x003f, 0x003f, 0xf0a9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfad7, 0xfbc1, - 0x003f, 0xd2c0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe5b0, 0x003f, 0x003f, 0x003f, 0xede5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcbad, 0x003f, 0xf9b0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf7a5, 0x003f, 0xcbae, 0x003f, 0xdaaf, 0x003f, 0xd8b6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3a7, 0xfbb2, - 0x003f, 0xfdc4, 0x003f, 0xecad, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfba1, 0x003f, 0x003f, 0x003f, 0xe5e9, 0xe9ee, - 0x003f, 0xf3f4, 0xf8f3, 0xf0c1, 0xdeaf, 0xf8b0, 0x003f, 0x003f, - 0xf3e0, 0xe7af, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbad, - 0x003f, 0xe6b5, 0x003f, 0x003f, 0xf9a8, 0x003f, 0x003f, 0xddd8, - 0xe8d9, 0xefd6, 0x003f, 0x003f, 0x003f, 0xd3e2, 0x003f, 0xe2df, - 0x003f, 0x003f, 0xfce0, 0xd7c8, 0xfdad, 0x003f, 0x003f, 0x003f, - 0xdfef, 0xccd3, 0xd3f9, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4f0, - 0xdbc7, 0xded5, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0f4, 0x003f, - 0xd5d0, 0xe5d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfcc7, 0xdcd6, 0xe2e0, 0x003f, 0x003f, 0x003f, 0xdab0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3a3, 0x003f, 0xd3ec, - 0x003f, 0xf4cb, 0x003f, 0x003f, 0x003f, 0xfdc5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3fd, 0x003f, 0xf9b1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd0fb, 0xecdb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5bc, 0xf2a4, - 0xd8ce, 0xd8cf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf5f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf6e1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2b7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbec, 0x003f, 0xddc8, - /* 0x6000 .. 0x60ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4e8, - 0x003f, 0x003f, 0xd2c1, 0x003f, 0x003f, 0x003f, 0xf8d7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6bb, 0xded6, 0x003f, 0x003f, - 0xf7bd, 0xecae, 0x003f, 0x003f, 0x003f, 0xd0e1, 0x003f, 0xe0f5, - 0xeab3, 0x003f, 0xced6, 0x003f, 0x003f, 0x003f, 0x003f, 0xcca5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xecf6, 0xe2e1, 0xe3be, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfcc8, 0x003f, 0x003f, - 0xcdf0, 0x003f, 0xf9f6, 0x003f, 0x003f, 0xdff0, 0x003f, 0x003f, - 0x003f, 0xe5bf, 0x003f, 0x003f, 0x003f, 0xcebf, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfce1, 0xedb0, 0xfdd1, 0xf6bb, 0x003f, 0x003f, - 0xf9cf, 0xebda, 0xcac1, 0x003f, 0xd2b8, 0xcdf1, 0x003f, 0xe3d3, - 0xfde6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6ed, 0x003f, 0x003f, - 0x003f, 0xe3fa, 0x003f, 0x003f, 0xf0aa, 0xf9d0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfce2, 0x003f, 0xf8a7, 0x003f, - 0x003f, 0x003f, 0xe1e5, 0xeef9, 0x003f, 0x003f, 0x003f, 0xe7f6, - 0xeaed, 0x003f, 0x003f, 0xfcb4, 0xf5c2, 0x003f, 0x003f, 0xd7dc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf0f5, 0x003f, 0xdde8, 0xd3ed, 0xf5fc, 0x003f, 0xdabf, 0x003f, - 0xccfb, 0x003f, 0x003f, 0x003f, 0xd3fa, 0xf4a4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefd7, 0x003f, 0xd4c3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfbe3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfbed, 0x003f, 0xe0ad, 0x003f, 0x003f, 0xeaee, - 0xfbb3, 0xe4c2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf6e7, 0xd2dd, 0x003f, 0xdfcc, 0x003f, 0x003f, 0xfcc9, 0x003f, - 0x003f, 0xe5a9, 0xe0f6, 0xf6b3, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6100 .. 0x61ff */ - 0x003f, 0xe1fe, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbf0, 0x003f, - 0xeaef, 0xeaf0, 0x003f, 0x003f, 0x003f, 0xdac0, 0xf8b4, 0xebf2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4c3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe9d7, 0xe4f1, 0x003f, 0x003f, 0x003f, 0xcaef, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xced7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfcca, 0x003f, 0x003f, 0x003f, 0xf3e1, 0x003f, 0x003f, 0xcbc4, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe3e5, 0x003f, 0xcbc5, 0xeab4, - 0x003f, 0x003f, 0xe9bd, 0x003f, 0xd7c9, 0x003f, 0x003f, 0xebdb, - 0xedb1, 0x003f, 0xccc3, 0xf7be, 0xfccb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf8f4, 0x003f, 0xd9b7, 0x003f, 0x003f, - 0xf3d3, 0xf3d4, 0x003f, 0x003f, 0x003f, 0xf7e4, 0x003f, 0xf7d1, - 0x003f, 0x003f, 0xd8b7, 0xceb1, 0xcac2, 0x003f, 0x003f, 0xfbb4, - 0xcbc6, 0x003f, 0x003f, 0xf0f6, 0x003f, 0x003f, 0xd5e7, 0x003f, - 0xead0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xccd4, 0xcbaf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4aa, 0xe9af, 0x003f, - 0x003f, 0xf5c3, 0xe9d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdde9, 0x003f, 0x003f, 0x003f, 0xf1f3, 0x003f, - 0xd5fb, 0xdebb, 0x003f, 0x003f, 0xf4fb, 0x003f, 0x003f, 0x003f, - 0xfdf3, 0xfdf2, 0xf7a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xddc9, 0x003f, 0x003f, 0xd4d3, - 0x003f, 0xcca8, 0x003f, 0xdac1, 0xccd5, 0x003f, 0xd9e4, 0x003f, - 0x003f, 0x003f, 0xfaca, 0x003f, 0x003f, 0x003f, 0xe5e3, 0x003f, - 0x003f, 0x003f, 0xd3bc, 0x003f, 0x003f, 0x003f, 0xcaf0, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd0c4, 0x003f, 0x003f, 0x003f, 0xcad0, - 0xfaab, 0xebeb, 0xe7f8, 0xd9e5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1d7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3a4, 0x003f, 0x003f, 0x003f, 0xd4fb, 0xfce3, - 0xfad8, 0x003f, 0xf3d5, 0x003f, 0xcfab, 0x003f, 0x003f, 0xebf3, - /* 0x6200 .. 0x62ff */ - 0xd5fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3d4, - 0xcdfc, 0x003f, 0xd9e6, 0x003f, 0xe2f9, 0xe2a1, 0xebd4, 0x003f, - 0xe0f7, 0xe4b2, 0xccfc, 0x003f, 0x003f, 0x003f, 0xfbe4, 0x003f, - 0x003f, 0x003f, 0xf4ab, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0bd, - 0x003f, 0xcaf1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xefb8, 0x003f, 0x003f, 0x003f, 0xd7c0, 0x003f, - 0xeefa, 0xfdf4, 0x003f, 0x003f, 0xd3e3, 0x003f, 0xfbc2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5e8, 0xdbae, - 0xe1b6, 0xf8b7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0bf, - 0xfbc3, 0xddea, 0x003f, 0xe2a2, 0x003f, 0xeea6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf6e8, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf6f5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xddca, 0x003f, - 0x003f, 0xd0e2, 0x003f, 0x003f, 0x003f, 0x003f, 0xdda6, 0x003f, - 0x003f, 0xddeb, 0x003f, 0x003f, 0xe4f9, 0x003f, 0x003f, 0xe3af, - 0xd0fc, 0x003f, 0x003f, 0x003f, 0xf4fc, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccbc, 0xf7ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe5e4, 0xdff1, 0x003f, 0x003f, 0xf7e1, 0x003f, 0xf9f7, - 0xefb9, 0x003f, 0x003f, 0xf8d8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9a9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8d9, 0x003f, 0x003f, 0x003f, 0xeebd, 0x003f, 0x003f, - 0x003f, 0xd8c6, 0x003f, 0x003f, 0xe4e3, 0xf5ce, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddd9, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9e7, - 0xd2b9, 0xd5c3, 0x003f, 0x003f, 0xdae5, 0xdad0, 0x003f, 0xd1d9, - 0xced8, 0x003f, 0xcbde, 0xf4ac, 0xdafb, 0x003f, 0xf6e9, 0xe8f3, - 0xcfac, 0xf0f0, 0x003f, 0xf4fd, 0xdbc8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcec0, 0xe3d4, 0xd1cf, 0xf1f5, - 0x003f, 0xcdf2, 0x003f, 0xcfeb, 0x003f, 0x003f, 0x003f, 0xcdb8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a6, 0xd1da, - /* 0x6300 .. 0x63ff */ - 0x003f, 0xf2a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2a6, - 0x003f, 0xe4ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf1a9, 0x003f, 0x003f, 0x003f, 0xf2c9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xefd8, 0xe6c9, 0x003f, 0xd8b8, 0xfaf3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf3b5, 0x003f, 0x003f, 0xf8a4, 0x003f, 0x003f, 0xd1f3, - 0xe6c8, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8da, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdce9, - 0xded7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbdf, 0x003f, - 0x003f, 0x003f, 0xcfec, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4df, - 0x003f, 0x003f, 0xd1f4, 0xd2ba, 0x003f, 0x003f, 0x003f, 0xdff2, - 0x003f, 0x003f, 0x003f, 0xe1b7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2a3, 0xd3fc, 0x003f, 0x003f, 0xede6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdbc9, 0x003f, 0x003f, 0x003f, 0xe4fa, 0x003f, - 0xcfde, 0x003f, 0x003f, 0xced0, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd5d3, 0xf3f5, 0xf7ae, 0x003f, 0x003f, 0xefc8, 0x003f, 0xcdf3, - 0xf5cf, 0xe5f3, 0xf0c2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcad1, 0x003f, 0x003f, 0x003f, 0xeaf1, 0x003f, 0xd0a6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9da, - 0xf0ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebe7, 0x003f, - 0x003f, 0x003f, 0xe5c0, 0xfcb5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe4c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcca9, 0xfdc6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeab5, 0x003f, 0xe5aa, 0xdfba, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6400 .. 0x64ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1df, 0x003f, 0xdad1, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1b8, 0x003f, 0xe8f4, 0xd3fd, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2a4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf2ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdae6, 0xf7b3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfdcd, 0x003f, 0x003f, 0x003f, 0xf3b6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeed7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf5c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd8a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2a7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd9b8, 0xd9b9, 0xefc9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd6ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf7cb, 0xdfae, 0xe8f5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd2b5, 0x003f, 0x003f, 0x003f, 0xd3d5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf4cc, 0xdafc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd9e8, 0x003f, 0xf7eb, 0xf5c9, 0x003f, - 0xf3bc, 0x003f, 0xdad2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd3b5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe8b6, 0x003f, 0x003f, 0xd6cf, 0xf4ba, 0x003f, 0xf7c9, - 0x003f, 0x003f, 0xccaa, 0x003f, 0x003f, 0xf0c3, 0xccd6, 0x003f, - 0x003f, 0x003f, 0xd0d3, 0x003f, 0xd3bd, 0x003f, 0x003f, 0x003f, - 0xdbfb, 0x003f, 0xcbe0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3e4, 0xf6f7, 0x003f, 0x003f, 0xd5ba, 0xf3cd, 0xcbe1, - 0x003f, 0x003f, 0x003f, 0x003f, 0xebf4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf4ad, 0x003f, 0xfcaa, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf7ec, 0x003f, 0x003f, 0x003f, 0xe8f6, 0x003f, - /* 0x6500 .. 0x65ff */ - 0xdae7, 0x003f, 0x003f, 0x003f, 0xf7cc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe5c1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0ee, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd5fd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcee6, 0xfcab, 0xd5bb, 0x003f, 0x003f, 0xf2a8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2a5, 0xcdb9, - 0xeaf2, 0xcbc7, 0x003f, 0xcdf4, 0x003f, 0x003f, 0xdbaf, 0xefd9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdba, 0x003f, 0x003f, - 0xfcf9, 0x003f, 0x003f, 0x003f, 0x003f, 0xdff3, 0xcee7, 0xdac2, - 0x003f, 0xcfad, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7f9, 0xf8a8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3e2, 0x003f, - 0x003f, 0x003f, 0xcaf2, 0xdfa4, 0x003f, 0x003f, 0xd4c4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xccd7, 0xe5c2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcdbb, 0x003f, 0xefda, 0xeed8, 0x003f, 0xdda7, - 0xe2a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0c0, 0x003f, - 0x003f, 0x003f, 0xd6b0, 0xf8ca, 0x003f, 0xfcfa, 0x003f, 0xd9fe, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdeb0, 0x003f, 0x003f, 0x003f, - 0xddec, 0xdae8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4e0, - 0x003f, 0xd6f9, 0x003f, 0xcdd7, 0xded8, 0x003f, 0x003f, 0xf2f8, - 0x003f, 0xe4d6, 0x003f, 0x003f, 0xd0c5, 0xf4ae, 0x003f, 0xdda8, - 0x003f, 0x003f, 0x003f, 0xedc5, 0xf3d6, 0x003f, 0x003f, 0xded9, - 0xe3e6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3a8, - 0x003f, 0xdbb0, 0x003f, 0x003f, 0xe5da, 0xe3bf, 0x003f, 0x003f, - 0x003f, 0xdbb1, 0x003f, 0x003f, 0x003f, 0xd5e9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0c1, 0xefdb, 0x003f, 0x003f, 0xf0e9, - 0x003f, 0x003f, 0xd7b2, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0fd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd9e9, 0x003f, 0x003f, 0xd0fe, 0x003f, 0xeced, 0xd3a9, 0x003f, - 0xf2a9, 0xf0c4, 0x003f, 0x003f, 0xe2e2, 0xe9ef, 0x003f, 0x003f, - 0x003f, 0xf9d1, 0x003f, 0x003f, 0xe9d9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe8da, 0xdac3, 0xdac4, 0xd4c5, 0x003f, 0xe7fa, - /* 0x6600 .. 0x66ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcde0, 0xe3b0, - 0x003f, 0xdbb2, 0xfbc4, 0x003f, 0xf3e3, 0x003f, 0xd9a5, 0xfbe7, - 0xddcb, 0xd0d4, 0x003f, 0xe6b6, 0xe0ae, 0xfdda, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcb5, 0xe0f8, - 0xe7b1, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5f0, 0x003f, 0xd8dc, - 0xedc6, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1b9, 0x003f, 0xe3c0, - 0xf9c0, 0xe9f0, 0x003f, 0x003f, 0xd9db, 0x003f, 0xf3e4, 0x003f, - 0x003f, 0x003f, 0xdcb6, 0xe4e9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf0c5, 0xe3c1, 0xfccc, 0xfccd, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf2cb, 0x003f, 0xf2cc, 0x003f, 0x003f, 0x003f, 0xe4cf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf1db, 0x003f, 0xfad9, 0x003f, 0xf1b8, 0xfdf5, 0xe0f9, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe7fb, 0xfcb7, 0xfce4, 0xfbc5, - 0xe3e7, 0xd8b9, 0x003f, 0xf6f8, 0x003f, 0x003f, 0xdcc5, 0xccd8, - 0x003f, 0x003f, 0x003f, 0xe0af, 0xf4e7, 0x003f, 0xefdc, 0xcffc, - 0xefdd, 0x003f, 0xf2aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfdbe, 0x003f, 0x003f, 0xcaac, - 0xfdbb, 0xfdc7, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7b2, 0x003f, - 0xead1, 0xdff4, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1ec, 0xe4de, - 0xe5c3, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9a6, 0x003f, 0x003f, - 0xcdbc, 0x003f, 0xf3e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedd5, 0x003f, 0x003f, 0xd9ba, 0x003f, - 0x003f, 0x003f, 0xede7, 0xfbb5, 0xf8ec, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe0e7, 0x003f, 0xccd9, 0x003f, 0x003f, 0xd4c6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a5, 0x003f, 0xd5f5, 0xd3be, - 0x003f, 0xfcfb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f2, 0x003f, - 0x003f, 0xdff5, 0x003f, 0x003f, 0xe8f8, 0xf8ed, 0x003f, 0x003f, - 0xcec7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdf6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe8d8, 0x003f, 0xcdd8, 0xe7d6, 0xccda, 0x003f, 0x003f, 0xcae3, - 0xdff6, 0xf0c7, 0xf0c6, 0x003f, 0xd8ba, 0x003f, 0xf1f4, 0xf4f0, - /* 0x6700 .. 0x67ff */ - 0xf5cc, 0x003f, 0x003f, 0xfce5, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeac5, 0xeaf3, 0x003f, 0xdddb, 0x003f, 0xdcd7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdefd, 0xf2f9, 0x003f, 0xd5c7, - 0x003f, 0x003f, 0x003f, 0xd8d0, 0x003f, 0xf0c8, 0xd1a1, 0xd1a2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9d4, 0xd6e8, - 0xd9ca, 0x003f, 0xdab1, 0xd8c7, 0xdce2, 0xf3ce, 0xf5f4, 0x003f, - 0x003f, 0xf1b9, 0x003f, 0x003f, 0xdad3, 0x003f, 0xf6ea, 0x003f, - 0x003f, 0x003f, 0xcff5, 0x003f, 0x003f, 0xfdae, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcad2, 0x003f, - 0x003f, 0xdfb4, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7dd, 0xfaba, - 0xeea7, 0xf5bd, 0x003f, 0xf8f5, 0x003f, 0x003f, 0xede8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd4e1, 0x003f, 0xd1a3, 0xe1d6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9f8, 0x003f, 0xdbca, - 0xcbf9, 0xd4d4, 0x003f, 0xd9dc, 0x003f, 0xeebe, 0x003f, 0xf7ed, - 0x003f, 0x003f, 0x003f, 0xd2ee, 0x003f, 0x003f, 0xe1e6, 0xf7f9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdded, - 0x003f, 0xe8db, 0x003f, 0xdbb3, 0x003f, 0x003f, 0x003f, 0xd1f7, - 0xe0b0, 0x003f, 0x003f, 0xd4e2, 0x003f, 0xf6d7, 0x003f, 0xd7f9, - 0x003f, 0x003f, 0xd8dd, 0x003f, 0xcdfd, 0xf2ab, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdbd, - 0xf8c2, 0x003f, 0x003f, 0xf2ac, 0x003f, 0x003f, 0xcaad, 0xcaae, - 0xcfae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3c2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdcb7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbda, - 0xd9bb, 0xcaf3, 0xf6d3, 0xe6f8, 0xeaf5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeaf6, 0x003f, 0x003f, 0xf6f9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcfaf, 0x003f, 0x003f, 0xcad3, 0x003f, 0x003f, 0xcaaf, - 0xd2b0, 0xf1ba, 0x003f, 0xd7b3, 0xe3c3, 0xf3fd, 0xdeda, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdedb, 0x003f, 0x003f, 0xefde, 0x003f, - /* 0x6800 .. 0x68ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe2e3, 0xeefb, 0x003f, 0x003f, 0xdff7, 0xd7ca, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcee8, 0xdbdb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1bb, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9f1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfab7, 0xd0c6, 0x003f, 0x003f, 0xccab, 0xeea8, 0x003f, 0x003f, - 0xcbfa, 0xf9f9, 0xccfd, 0xd3fe, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe4d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2ee, 0x003f, - 0xd4d5, 0xdfcd, 0x003f, 0xfcb8, 0xd1d0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2cd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7d2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcad4, - 0x003f, 0xd5d9, 0x003f, 0x003f, 0x003f, 0xd8de, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdd9, - 0x003f, 0x003f, 0x003f, 0xeea9, 0xf6bc, 0x003f, 0x003f, 0xccdb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0c9, 0x003f, 0xfcfc, - 0x003f, 0xe8c9, 0xf4fe, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7fc, - 0xd7de, 0x003f, 0x003f, 0x003f, 0x003f, 0xdedc, 0x003f, 0xf0ac, - 0xccfe, 0xcde1, 0x003f, 0xe1ba, 0x003f, 0xdbef, 0xdab2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd1a5, 0xdcb8, 0x003f, 0x003f, - 0x003f, 0xd8f6, 0x003f, 0xd1a4, 0x003f, 0xcde2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdcea, 0x003f, 0x003f, 0xf0f7, 0x003f, 0xf0ca, - 0xd0be, 0x003f, 0xdddc, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4d6, - 0xd3d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedd0, - 0xcda1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfb5, 0x003f, - 0x003f, 0x003f, 0xdff8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4a1, 0xceb2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6900 .. 0x69ff */ - 0xe8ca, 0x003f, 0x003f, 0x003f, 0x003f, 0xebf5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3d5, 0xf5d0, 0x003f, - 0x003f, 0x003f, 0xf5a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9a7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe5ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6cb, 0x003f, 0xf5f1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9a3, 0xe0db, 0xf6eb, 0x003f, 0xcbf1, - 0x003f, 0xd9ea, 0xf5a2, 0x003f, 0x003f, 0x003f, 0xd7d1, 0x003f, - 0xd1f8, 0xeaf8, 0xeaf9, 0xdab3, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefdf, 0x003f, 0x003f, 0xf1ef, 0x003f, 0xe5f6, 0xeebf, 0xe2e4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0bf, 0x003f, 0xfaac, - 0xf5d1, 0xe7b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9be, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf2ce, 0xdbb4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfcce, 0x003f, 0xddee, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7b4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd7b4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf7b4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdbe, 0x003f, 0xdae9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcfb0, 0xf7d9, 0xf3e6, 0x003f, 0x003f, - 0xced9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xceaa, 0x003f, 0xcbc8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd0a7, 0x003f, 0xf0cb, 0x003f, 0xd0c7, - /* 0x6a00 .. 0x6aff */ - 0x003f, 0x003f, 0xe4c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdbe0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd5da, 0x003f, 0xd7a7, 0x003f, 0x003f, 0x003f, 0xeec0, - 0x003f, 0xf8f6, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5d2, 0xede9, - 0x003f, 0xd9bc, 0x003f, 0xe5c6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5a3, 0x003f, 0x003f, - 0xdad4, 0xe2a7, 0xfbfc, 0x003f, 0x003f, 0xf1dc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcaf4, 0x003f, 0x003f, 0x003f, - 0xe8fa, 0x003f, 0x003f, 0xcee9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe9f8, 0xe2e5, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd0b9, 0xd4f2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1a6, - 0x003f, 0xdfce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfcf4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3aa, 0x003f, 0x003f, 0x003f, 0xccac, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefe0, 0x003f, 0x003f, 0x003f, 0xe5e5, 0xd0d5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbfc, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfce6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcbfe, 0xedea, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdeb1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9e3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd4a2, 0xcff6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd6d0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5ea, 0xf1ee, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfacb, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5a1, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6b00 .. 0x6bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xd5b1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcfed, 0x003f, 0xedeb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5b2, 0x003f, 0x003f, 0x003f, 0xd5bc, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfde2, 0xf3ad, 0x003f, 0xfddb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe9b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd1a7, 0x003f, 0x003f, 0xfde3, 0xceb3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfde4, 0xface, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcab0, 0x003f, 0xf7a7, 0x003f, - 0xcfb1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a2, - 0x003f, 0xfcb6, 0xf2ad, 0xefe1, 0xf3ae, 0xdcc6, 0xd9eb, 0x003f, - 0x003f, 0x003f, 0xe8e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1a8, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5f6, - 0xcffd, 0x003f, 0x003f, 0xdedd, 0x003f, 0x003f, 0x003f, 0xd9d1, - 0x003f, 0x003f, 0x003f, 0xe4ea, 0xf2cf, 0x003f, 0xf7bf, 0x003f, - 0x003f, 0xe2e6, 0xe2a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3d6, 0x003f, - 0xedd1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9f9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6b1, 0xdeb2, - 0x003f, 0x003f, 0xe0e8, 0x003f, 0x003f, 0xd3ab, 0x003f, 0xebdc, - 0x003f, 0x003f, 0xdfaf, 0x003f, 0xcac3, 0x003f, 0x003f, 0xeefc, - 0x003f, 0xfdc3, 0x003f, 0x003f, 0x003f, 0xebf6, 0xcfb2, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd9ec, 0x003f, 0xd9bd, 0x003f, 0xd8df, - 0x003f, 0x003f, 0xd4b8, 0xebbe, 0xddef, 0x003f, 0xddf0, 0xddf1, - 0xddf2, 0x003f, 0x003f, 0xd9be, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfbc6, 0xcfb3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6c00 .. 0x6cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeefd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4ab, - 0x003f, 0xdac5, 0x003f, 0xd8ec, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd1a8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2a9, 0x003f, 0x003f, 0xdebc, - 0xe7b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbf0, 0x003f, - 0xefe2, 0xf1f0, 0xcfb4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdbf1, 0x003f, - 0xe0b1, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfa5, 0x003f, 0xf9d2, - 0x003f, 0x003f, 0xe7fd, 0x003f, 0x003f, 0xe6a3, 0xfbf1, 0xcbb0, - 0xf2ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcde7, 0x003f, 0xe8dc, 0x003f, 0x003f, 0xe7d7, 0x003f, 0x003f, - 0xf7c0, 0x003f, 0xd0e3, 0x003f, 0x003f, 0x003f, 0xdaa1, 0x003f, - 0x003f, 0x003f, 0xccbd, 0x003f, 0x003f, 0xd1a9, 0xddcc, 0x003f, - 0x003f, 0xe3fe, 0xd1aa, 0xe8aa, 0x003f, 0xeab6, 0xf9fa, 0xe6cc, - 0xf6d8, 0x003f, 0x003f, 0x003f, 0xd4c7, 0x003f, 0x003f, 0x003f, - 0xd9cb, 0x003f, 0xd9d2, 0xd3cb, 0xd8f7, 0xdaa9, 0xf5f8, 0x003f, - 0x003f, 0xdede, 0xf2af, 0xf8a9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8c8, 0x003f, 0x003f, 0xeec1, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9c1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xddf3, 0xeafa, 0x003f, 0xf6bd, 0xe1bb, 0xcdbf, 0xf4d4, 0xe6cd, - 0x003f, 0xfccf, 0xfba2, 0x003f, 0xe0dc, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf4bb, 0xdad5, 0x003f, 0xf9b2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfbf2, 0x003f, 0xdbf6, 0x003f, 0xdedf, - 0x003f, 0x003f, 0x003f, 0xdbf2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8dc, 0xf7ee, 0xebe8, 0x003f, 0xd2fa, 0x003f, 0x003f, - 0xf1bc, 0x003f, 0x003f, 0xfada, 0x003f, 0x003f, 0xdaea, 0xdac6, - 0xf7c1, 0x003f, 0x003f, 0xe7b6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6d00 .. 0x6dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe5c7, 0xd6ac, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdcc7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1a9, - 0x003f, 0xe2aa, 0x003f, 0xd5a6, 0x003f, 0x003f, 0xd4d7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2d0, 0x003f, 0xeafb, - 0x003f, 0xe0dd, 0xfbf3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1bd, 0x003f, 0x003f, 0xe2e7, 0xfdd7, 0x003f, - 0xcec8, 0xeab7, 0x003f, 0xfcc0, 0x003f, 0xfde7, 0xf7ef, 0x003f, - 0x003f, 0xd7b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefba, 0xf1dd, 0x003f, 0xdeb3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8cb, 0x003f, 0x003f, 0xf8dd, 0x003f, - 0x003f, 0xfbc7, 0xd5c8, 0x003f, 0xd7df, 0x003f, 0xdda9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9b1, 0x003f, 0x003f, 0xfaad, - 0xf6d9, 0xfaf4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8aa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6ee, 0x003f, 0xccdc, - 0xe1bc, 0xe0ef, 0x003f, 0x003f, 0xe9bf, 0xfcfd, 0xe6ce, 0x003f, - 0x003f, 0xe1d7, 0x003f, 0xe6cf, 0x003f, 0xf4f1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f3, - 0x003f, 0x003f, 0xe4fb, 0x003f, 0x003f, 0xf9e4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefe3, 0x003f, 0x003f, 0xcfee, 0xf6be, 0xe0b2, 0xfcfe, 0xd1ab, - 0x003f, 0x003f, 0x003f, 0xd7fa, 0x003f, 0x003f, 0x003f, 0xfbc8, - 0x003f, 0xe2d7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4a3, 0xf0f8, 0xd7a8, 0x003f, 0x003f, 0x003f, 0xe1e7, 0x003f, - 0x003f, 0xd3bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefe4, 0x003f, 0xd7c5, 0xebe2, 0x003f, 0x003f, 0xfce7, 0x003f, - 0x003f, 0xe4a2, 0x003f, 0xe2e8, 0x003f, 0xe6d0, 0x003f, 0xfbe8, - 0xf4e8, 0xe5f4, 0xf4bc, 0xf4d5, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6e00 .. 0x6eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfb6, - 0x003f, 0xfcb9, 0xeec2, 0xcaf5, 0x003f, 0x003f, 0x003f, 0xefe5, - 0xcbe2, 0xd4a4, 0x003f, 0xdee0, 0xdafd, 0xe4c6, 0xe8be, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0de, 0xf6b4, 0xead2, 0x003f, 0xf9fb, - 0x003f, 0x003f, 0xe0c2, 0x003f, 0xcae4, 0x003f, 0xe7b7, 0x003f, - 0xeafd, 0x003f, 0xd9dd, 0x003f, 0xdab4, 0xeeaa, 0xfbe9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdbcb, 0xdab5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1be, 0x003f, 0x003f, 0xd3ac, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbc9, 0x003f, - 0xdfcf, 0x003f, 0x003f, 0xd3c0, 0xe3d7, 0x003f, 0xefe6, 0xfcd0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c0, - 0x003f, 0x003f, 0x003f, 0xf5d3, 0x003f, 0x003f, 0xecdc, 0xf7b7, - 0x003f, 0x003f, 0xeab8, 0xd1f9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdcc8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeab9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1de, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd7b6, 0xcfb5, 0x003f, 0xd9a8, - 0x003f, 0x003f, 0xecee, 0x003f, 0x003f, 0xddaa, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcda2, 0xe8ae, 0x003f, 0x003f, 0x003f, 0xe1bd, - 0x003f, 0xf2d1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c1, 0x003f, - 0x003f, 0x003f, 0xd2fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdbb5, 0x003f, 0xf3e7, 0xd8fe, 0x003f, 0x003f, - 0x003f, 0xfcd1, 0x003f, 0xedb2, 0xf4af, 0x003f, 0xfba3, 0x003f, - 0x003f, 0xfcc1, 0x003f, 0xeeab, 0xd4a5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4f2, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeed9, 0x003f, 0x003f, 0x003f, - 0xfbca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcde3, 0xd8bb, - /* 0x6f00 .. 0x6fff */ - 0x003f, 0xe5db, 0xf8f7, 0x003f, 0x003f, 0x003f, 0xf6d4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7a9, - 0x003f, 0xcbc9, 0x003f, 0x003f, 0xe6d1, 0xf0cc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd8ae, 0x003f, 0xf9d3, 0xd5fe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8bc, 0xf2b0, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe2ab, 0xf3e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefc2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedec, - 0x003f, 0xe7b8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdafe, 0x003f, 0x003f, 0xccbe, 0x003f, 0x003f, 0xf2fc, - 0xdaeb, 0x003f, 0xe2d8, 0xedd6, 0x003f, 0x003f, 0xd6d1, 0xe0b3, - 0x003f, 0x003f, 0xfcd2, 0x003f, 0xebc8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3c1, 0xf0cd, 0x003f, - 0xcff7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xedd2, 0x003f, 0xd4d8, 0xdcc9, 0xd7f1, 0x003f, - 0x003f, 0xdfbb, 0x003f, 0x003f, 0xf3a5, 0x003f, 0x003f, 0x003f, - 0xf4cd, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1bf, 0xf8b1, 0x003f, - 0xe9fa, 0x003f, 0x003f, 0x003f, 0xfbcb, 0x003f, 0x003f, 0xcad5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9d4, 0xf7ca, 0x003f, 0x003f, 0xd6c8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfce8, 0xf3bd, - 0x003f, 0xeefe, 0x003f, 0xe7fe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd3c2, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3b6, 0x003f, - 0xccad, 0xf6fa, 0xd6b2, 0xd2d8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7d8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7b9, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0ad, - 0xfbcc, 0xeba1, 0x003f, 0x003f, 0xd4a6, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfbcd, 0x003f, 0xd5bd, 0xf1df, 0x003f, 0x003f, 0xf6fb, - 0x003f, 0xdeb4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5eb, 0x003f, - /* 0x7000 .. 0x70ff */ - 0x003f, 0xe5c8, 0x003f, 0x003f, 0x003f, 0xfba4, 0xd4b9, 0x003f, - 0x003f, 0xdee1, 0x003f, 0xe4a3, 0x003f, 0x003f, 0x003f, 0xd7b7, - 0x003f, 0xf8ee, 0x003f, 0x003f, 0x003f, 0xdeb5, 0x003f, 0x003f, - 0xd6d2, 0x003f, 0xf9d5, 0xe7ba, 0xebd5, 0xd5f7, 0xefe7, 0xe1be, - 0x003f, 0x003f, 0x003f, 0xfaae, 0x003f, 0x003f, 0x003f, 0xd6e9, - 0xd6ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7bb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeccb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5b3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xceb4, 0x003f, 0x003f, 0x003f, - 0xfba5, 0xe1ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf7a8, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbce, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8bd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfbfd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfce9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcfb6, 0x003f, 0x003f, 0x003f, 0xedc7, 0xeeac, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xccdd, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf6a7, 0x003f, 0x003f, 0x003f, 0xe6fa, 0x003f, - 0x003f, 0x003f, 0xf5a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfddc, 0xedb3, 0xcec9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefe8, 0x003f, 0x003f, 0xe1bf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfadb, 0xcbe3, 0xf7a9, 0x003f, 0xfba6, - 0x003f, 0x003f, 0x003f, 0xdcb9, 0x003f, 0x003f, 0x003f, 0xf1c0, - 0xedc8, 0xefc3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd6ad, 0x003f, 0x003f, 0xfdce, 0x003f, 0x003f, 0x003f, 0xe8a1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfbf4, 0xd5a7, 0x003f, 0x003f, 0x003f, 0xf1f6, 0x003f, 0xe6d3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccde, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8b2, 0x003f, 0x003f, 0x003f, 0xdceb, 0x003f, 0x003f, - /* 0x7100 .. 0x71ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xfdb6, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe5ea, 0x003f, 0x003f, 0xf1e0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdbcc, 0xddcd, 0x003f, 0x003f, 0x003f, 0xd4c8, 0x003f, - 0x003f, 0xd9ed, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5a5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe6fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6d4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdc8, - 0x003f, 0xd6a1, 0xfdbf, 0x003f, 0xfcd3, 0x003f, 0xefa1, 0x003f, - 0xe7bc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1ee, 0x003f, - 0x003f, 0xe6d5, 0x003f, 0x003f, 0xe9f2, 0x003f, 0xdfb0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd8e0, 0xfcba, 0xfdaf, 0xf0ce, - 0x003f, 0xdbe1, 0x003f, 0x003f, 0xe5c9, 0x003f, 0xedb4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0c3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe3d8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9fb, 0xeaa8, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdb7, - 0x003f, 0x003f, 0xfba7, 0x003f, 0xe9c2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfdf7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2d9, - 0x003f, 0x003f, 0xdcec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe8a2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe6f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfdf8, 0xfdf9, 0x003f, 0x003f, 0x003f, 0xf6bf, 0x003f, - 0x003f, 0xe7a7, 0x003f, 0xe6d7, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4f3, 0xd4c9, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6fa, 0x003f, - 0xd7f2, 0x003f, 0xe1c0, 0x003f, 0xdbe2, 0xe6d8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7bd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0cf, 0xf3be, 0xe2ac, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5b7, 0xe0f0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfdb8, 0xe3e8, 0x003f, 0xd4a7, 0xe8fc, - /* 0x7200 .. 0x72ff */ - 0xfad2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8ef, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd6d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd5b4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf0d0, 0x003f, 0xf7f0, 0xeeb3, 0x003f, 0x003f, - 0xeaba, 0x003f, 0xead3, 0x003f, 0x003f, 0xedc9, 0xddab, 0x003f, - 0x003f, 0x003f, 0xe5ac, 0xfda1, 0x003f, 0xdfd0, 0xecb3, 0x003f, - 0xdfd1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeded, 0xf8b8, - 0xf7fa, 0x003f, 0x003f, 0x003f, 0xf8ab, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf4e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4ba, 0xe4b3, 0x003f, 0xe9da, 0x003f, 0xdeb6, 0x003f, 0xd9bf, - 0x003f, 0xd9c0, 0xd6ef, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9cc, - 0x003f, 0xdaaa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdfe5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf7e5, 0x003f, 0x003f, 0x003f, 0xccb2, 0x003f, 0x003f, - 0xdff9, 0xd7e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd4bb, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdfa, - 0x003f, 0x003f, 0x003f, 0x003f, 0xccb3, 0x003f, 0x003f, 0xdbf3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdfd2, 0x003f, 0xceca, 0x003f, 0xeeda, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4e4, 0x003f, - 0xfbcf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfb7, - 0x003f, 0xeec3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xceea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe2ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd7e1, 0xfaf5, 0x003f, 0x003f, 0xd5c9, 0xf8ac, 0x003f, 0x003f, - /* 0x7300 .. 0x73ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe7d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3e9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8ed, 0xe3c4, 0xf0f1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8e5, 0x003f, 0x003f, - 0x003f, 0xe0fa, 0xeec4, 0xd9de, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeba2, 0xeba3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfcc2, 0xeabb, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe8ab, 0xdee2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedef, 0x003f, 0xe8a3, 0x003f, 0x003f, 0x003f, 0x003f, 0xcff1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4bc, 0x003f, 0xfcea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7be, 0x003f, 0xfcf2, 0x003f, 0x003f, 0xd6b4, 0x003f, 0x003f, - 0xe2ae, 0x003f, 0xd3b7, 0xfacc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfadc, 0x003f, 0xedb5, 0xe1e3, - 0x003f, 0xe8ac, 0x003f, 0xe8dd, 0x003f, 0x003f, 0xefe9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf4bd, 0x003f, 0xcfb8, 0xe9db, - 0xd1ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdac7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebc9, - 0x003f, 0xe8cc, 0x003f, 0x003f, 0x003f, 0xdeb7, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd6bc, 0xd3e5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfadd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdad6, 0x003f, 0xcab1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdac8, 0xdfa6, 0x003f, 0xf9b3, 0xf2d2, 0x003f, 0xcac4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcecb, 0x003f, - 0x003f, 0xcdf5, 0x003f, 0x003f, 0x003f, 0xfdb0, 0xd5a8, 0x003f, - 0xf1c1, 0x003f, 0x003f, 0xe2e9, 0xdcca, 0xecb4, 0xfac0, 0x003f, - 0x003f, 0xfba8, 0xd0a8, 0x003f, 0x003f, 0xdaec, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9ee, - 0x003f, 0xe0fb, 0x003f, 0x003f, 0x003f, 0xefea, 0xfade, 0x003f, - /* 0x7400 .. 0x74ff */ - 0x003f, 0xe0c4, 0x003f, 0xcfb9, 0x003f, 0xd5ca, 0xd7e2, 0xe2af, - 0x003f, 0xd7b8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe8cd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf6da, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefa2, 0xe2da, 0xf6fc, 0x003f, 0x003f, 0xfbd0, 0xd1ad, 0x003f, - 0xcde4, 0x003f, 0xd1ae, 0xdced, 0xe8ce, 0x003f, 0xf0f9, 0xceb5, - 0xe6fc, 0x003f, 0x003f, 0xd7fb, 0xd0d6, 0xddf5, 0xf7f1, 0x003f, - 0xf6fd, 0x003f, 0xdbf7, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbea, - 0xe9dc, 0xd9c1, 0x003f, 0xf5f2, 0xe0c5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xead4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9c2, 0x003f, 0xeabc, - 0x003f, 0xd2c5, 0xfbd1, 0xe7c0, 0xeba5, 0x003f, 0xdffa, 0xe3a2, - 0xd7b9, 0x003f, 0xe9c3, 0x003f, 0xe8fd, 0xe8af, 0x003f, 0x003f, - 0xf2d3, 0xfba9, 0xd8a5, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5cb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0c8, 0x003f, - 0x003f, 0x003f, 0xd1af, 0xd7e3, 0x003f, 0x003f, 0x003f, 0xe0c6, - 0x003f, 0xd6a2, 0x003f, 0xedf0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd7f3, 0x003f, 0x003f, 0x003f, 0xfcd4, 0x003f, 0xdad7, 0xccdf, - 0x003f, 0xf2d4, 0x003f, 0xd1b0, 0x003f, 0xcce0, 0x003f, 0xdbfd, - 0xf3bf, 0x003f, 0xf0d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfcbb, 0x003f, 0xe2b0, 0x003f, 0x003f, 0xe6a5, 0x003f, 0x003f, - 0x003f, 0xe2db, 0x003f, 0x003f, 0x003f, 0xdfde, 0x003f, 0xe0c7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2ef, 0x003f, - 0x003f, 0x003f, 0xcce1, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6ea, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe7c2, 0x003f, 0x003f, 0x003f, - 0xceb6, 0x003f, 0xf3c0, 0x003f, 0xcdfe, 0x003f, 0x003f, 0x003f, - 0xfbd2, 0x003f, 0xf8f8, 0xf7fb, 0x003f, 0x003f, 0xe8bf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8b7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedb6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7500 .. 0x75ff */ - 0x003f, 0xdcba, 0x003f, 0x003f, 0xccb4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf1f7, 0x003f, 0x003f, 0x003f, 0xe8b8, 0x003f, 0x003f, - 0xcaf6, 0x003f, 0xe4a4, 0xf4d6, 0x003f, 0x003f, 0x003f, 0xdfe6, - 0x003f, 0x003f, 0x003f, 0xdfa7, 0x003f, 0xdfe7, 0xe1c1, 0x003f, - 0xe9c4, 0x003f, 0x003f, 0xdccb, 0xe9c5, 0x003f, 0x003f, 0x003f, - 0xefa3, 0xeba6, 0xcba3, 0xe3e9, 0x003f, 0x003f, 0x003f, 0xd1fb, - 0xefa4, 0x003f, 0xefeb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0b4, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcda3, 0x003f, 0x003f, 0xe8e6, - 0x003f, 0xefa5, 0x003f, 0xd3cc, 0xdaed, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd7ba, 0x003f, 0xf2d5, 0xf5e5, 0xd9ef, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf9b4, 0x003f, 0x003f, 0xd5d4, 0xfdcf, 0x003f, - 0x003f, 0x003f, 0xdbe3, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1e1, - 0xecb6, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbfe, 0xd3d7, 0x003f, - 0xd1b1, 0x003f, 0xcbb1, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1b2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbb2, 0xf1c2, - 0x003f, 0x003f, 0xf4e1, 0xf9b5, 0x003f, 0x003f, 0xe1c3, 0xe1c2, - 0x003f, 0xebf7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfa8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbca, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe6b9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8de, 0xf9aa, 0xcaf7, 0x003f, 0xedb7, 0x003f, 0x003f, - 0xd3b8, 0xf2d6, 0x003f, 0x003f, 0xd4d9, 0xeec5, 0xf2f0, 0x003f, - 0x003f, 0x003f, 0xcab2, 0x003f, 0x003f, 0xdcbb, 0x003f, 0xf1f8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xecb7, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5ca, 0x003f, 0xf6c0, 0xfddd, 0x003f, 0x003f, - 0xd4e3, 0xcce2, 0x003f, 0xf7d4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd7e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3c3, 0x003f, 0xd8a6, 0x003f, 0xf6c1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddf6, 0x003f, 0xcdc0, 0x003f, 0x003f, 0x003f, - /* 0x7600 .. 0x76ff */ - 0xe5dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5cb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe1c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8b0, - 0xf4b0, 0xf3ea, 0xdaee, 0x003f, 0xd7bb, 0x003f, 0xe2b1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd7aa, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd6fb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4df, 0x003f, 0xcad6, 0x003f, - 0x003f, 0x003f, 0xeba8, 0x003f, 0x003f, 0x003f, 0xdbfe, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf6c2, 0x003f, 0x003f, 0xefbb, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4fd, 0x003f, 0x003f, 0xe0c8, 0x003f, 0x003f, 0x003f, - 0xe8b9, 0x003f, 0xefa6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcda4, 0x003f, 0x003f, 0xd4f4, 0xdba1, 0xdbdc, 0xdbdd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeedc, 0x003f, 0xcbcb, 0xfcd5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xceeb, 0x003f, - 0xcdc1, 0x003f, 0x003f, 0xfbd3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9ab, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf5d4, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9a9, - 0x003f, 0x003f, 0xe9dd, 0xdbcd, 0x003f, 0x003f, 0xddce, 0x003f, - 0xe7c3, 0x003f, 0xeccc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf9ec, 0x003f, 0x003f, 0x003f, 0xcbcc, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0fc, 0xd4a8, 0x003f, 0xedd3, 0xd8ef, - 0x003f, 0xf2d7, 0x003f, 0xcaf8, 0xdaef, 0x003f, 0x003f, 0xd6d4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9cd, 0x003f, - 0x003f, 0x003f, 0xd8ee, 0x003f, 0xf2c1, 0x003f, 0x003f, 0x003f, - 0xdfd3, 0x003f, 0x003f, 0x003f, 0xdaf0, 0x003f, 0xe2ea, 0x003f, - /* 0x7700 .. 0x77ff */ - 0x003f, 0xe0fd, 0x003f, 0x003f, 0xd8f8, 0x003f, 0x003f, 0x003f, - 0xf7af, 0xdab6, 0x003f, 0xcad7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2d8, 0x003f, - 0xd8f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfadf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfef, - 0xd9c2, 0x003f, 0xf0d2, 0x003f, 0xe4d1, 0x003f, 0x003f, 0x003f, - 0xf3b7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfae0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xefec, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe2b2, 0x003f, 0xd4bd, 0x003f, 0x003f, 0xd9ce, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf4e2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4a9, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdc2, 0xe7da, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf2d9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd9aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8be, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcad, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2eb, 0xd6fc, 0x003f, 0x003f, - 0xcaf9, 0x003f, 0x003f, 0xd4da, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf4d7, 0xcca1, 0x003f, 0x003f, 0xcfba, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5b8, - 0x003f, 0x003f, 0x003f, 0xd9c3, 0xd0e8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3c5, 0xebf8, 0x003f, 0xf2b1, 0x003f, 0x003f, - 0x003f, 0xcfbb, 0x003f, 0x003f, 0x003f, 0xd3ad, 0xe8e1, 0xceec, - 0x003f, 0x003f, 0x003f, 0xe0b4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7800 .. 0x78ff */ - 0x003f, 0x003f, 0xdee3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddf7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2b2, 0xf3f6, 0xf6db, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd7fe, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf8df, 0x003f, 0xf7f2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0a9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6da, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5a6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd7bc, 0xcce3, 0x003f, 0x003f, 0xe6db, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdddd, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd1b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefed, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6de, 0xe4f4, 0xe1ef, 0x003f, - 0x003f, 0xddf8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8cf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcae5, 0x003f, 0x003f, 0x003f, 0xdca1, - 0x003f, 0xe0b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfcac, 0xfcad, 0xd8a7, 0x003f, 0x003f, 0x003f, - 0x003f, 0xedb8, 0x003f, 0x003f, 0x003f, 0xdbb6, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd6f0, 0xf3af, 0x003f, 0x003f, 0xcda5, 0x003f, - 0xdaf1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd8a8, 0x003f, 0x003f, 0x003f, 0xcce4, 0x003f, 0x003f, 0xd1b4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcad8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdaf2, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7900 .. 0x79ff */ - 0x003f, 0xf5a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5a8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5ec, 0xd5f8, 0xdaf3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3c6, 0x003f, 0x003f, 0x003f, 0xdee4, 0x003f, - 0xdee5, 0xd1b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1b6, - 0xd1b7, 0xf2b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0d3, 0xf2b4, - 0x003f, 0x003f, 0xf0d4, 0xcbe4, 0xfbd4, 0xf5e6, 0xe3ea, 0x003f, - 0xdee6, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfd4, 0x003f, 0x003f, - 0xf8f9, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0ae, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd1b8, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6df, - 0x003f, 0xd0d7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfca1, 0xefee, 0xdcd8, - 0x003f, 0xe9df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5dd, 0xfdfb, - 0x003f, 0x003f, 0xe0c9, 0x003f, 0x003f, 0x003f, 0xd6c9, 0x003f, - 0x003f, 0xd4aa, 0x003f, 0xe5cc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9e0, 0x003f, 0x003f, 0x003f, 0xd0d8, 0xfca2, 0xd4be, - 0xe2b3, 0xdee7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdcbc, 0xd2b6, 0xf5d5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcea1, 0xf5a9, 0x003f, 0x003f, 0xddf9, 0x003f, 0x003f, - 0xddfa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0d5, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf6df, 0x003f, 0xf2da, 0xe4eb, - 0x003f, 0xf2f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xecb9, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7a00 .. 0x7aff */ - 0xfdfc, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1aa, 0x003f, 0x003f, - 0xcad9, 0x003f, 0x003f, 0xefef, 0x003f, 0xf5aa, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xecf9, 0x003f, 0x003f, 0xf8ad, - 0x003f, 0xf2c2, 0xf6c3, 0x003f, 0xd7d2, 0x003f, 0x003f, 0xf9a2, - 0xf0d6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0fa, 0x003f, - 0x003f, 0xf6e0, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9f3, 0xf2c3, - 0x003f, 0x003f, 0x003f, 0xd4ab, 0xcab3, 0xcda6, 0x003f, 0xcdc3, - 0xcdda, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9cf, 0x003f, - 0x003f, 0xf6c4, 0x003f, 0x003f, 0x003f, 0xeedd, 0xe7c4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2b4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfe2, 0xe7db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe8b1, 0x003f, 0xfcae, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe5cd, 0x003f, 0x003f, 0x003f, 0xfaeb, 0x003f, 0xcfbc, 0x003f, - 0x003f, 0xcfe2, 0xcdf6, 0x003f, 0x003f, 0xeff0, 0x003f, 0xf4be, - 0x003f, 0xd4cd, 0x003f, 0x003f, 0xf3b8, 0x003f, 0x003f, 0x003f, - 0xe9a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf2f2, 0xf3eb, 0x003f, 0xf0d7, 0x003f, 0x003f, - 0xcfd7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfdf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe8c0, 0xe8c1, 0x003f, 0x003f, 0x003f, 0xcfe3, 0xe9a2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd0aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf3c1, 0xd0ab, 0x003f, 0xd4e4, - 0x003f, 0x003f, 0xefbc, 0xd8a1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9df, - 0x003f, 0xf3d7, 0x003f, 0x003f, 0x003f, 0xdcbd, 0x003f, 0xcce5, - 0xedf1, 0x003f, 0x003f, 0xf1e2, 0x003f, 0xd4db, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe2b5, 0x003f, 0x003f, 0xcae6, 0x003f, 0xd3ae, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcce6, 0x003f, - 0x003f, 0xf1d3, 0xf5e7, 0x003f, 0x003f, 0x003f, 0x003f, 0xcada, - /* 0x7b00 .. 0x7bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbee, - 0x003f, 0xe1c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfe9, 0x003f, 0xeede, 0x003f, 0x003f, 0xf7c2, 0x003f, - 0xd8a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xddac, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf0af, 0xd6bd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe1ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9b6, 0x003f, - 0x003f, 0xd4f5, 0x003f, 0xd0c9, 0xefa7, 0xe2ec, 0x003f, 0xdbea, - 0xcecc, 0xf5e8, 0xf7d5, 0x003f, 0xd3cd, 0x003f, 0xf3fe, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd0b5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0fe, 0x003f, 0xdffb, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6dd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8a4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbcd, - 0x003f, 0x003f, 0x003f, 0xefa8, 0x003f, 0x003f, 0x003f, 0xeeb4, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdad8, 0xd1b9, 0x003f, 0xdfa9, - 0x003f, 0x003f, 0xf3b0, 0x003f, 0x003f, 0xccc4, 0x003f, 0x003f, - 0x003f, 0xceb7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefa9, 0x003f, 0x003f, - 0x003f, 0xdfd5, 0x003f, 0x003f, 0xedd7, 0x003f, 0x003f, 0x003f, - 0xeec6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefbd, 0xfcd6, 0x003f, 0x003f, 0xdbf4, 0x003f, 0xefaa, 0xf8b9, - 0x003f, 0xf5e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe1c6, 0x003f, 0x003f, 0x003f, 0xd4bf, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdee8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7c00 .. 0x7cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0ea, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3c2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3af, 0x003f, - 0x003f, 0xcadb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfcd7, - 0x003f, 0x003f, 0xedd8, 0xe1c7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4d8, 0xd6b3, 0xddad, - 0x003f, 0x003f, 0x003f, 0xd5be, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf1c3, 0xeedf, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd6eb, 0x003f, 0x003f, 0x003f, 0xf4d9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd7e6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdab7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xddfb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xddcf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd8a3, 0x003f, 0x003f, 0xdad9, 0x003f, 0xf0d8, - 0xefc4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1d8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1d4, 0x003f, 0xedf2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5db, 0x003f, - 0x003f, 0xd5dc, 0xf3c4, 0xcbd7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe2b6, 0x003f, 0x003f, 0x003f, 0x003f, 0xeff1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfbd5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3d8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xddd0, 0xf0d9, - 0xcbb3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5dd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcda7, 0x003f, 0x003f, 0xd0ac, 0x003f, - /* 0x7d00 .. 0x7dff */ - 0xd1ba, 0x003f, 0xf1c4, 0x003f, 0xe5b3, 0xfbf5, 0xe9e1, 0xfde0, - 0xfcbc, 0x003f, 0xdaa2, 0xdaa3, 0x003f, 0xd2a1, 0x003f, 0x003f, - 0xd2ef, 0x003f, 0x003f, 0x003f, 0xe2ed, 0x003f, 0x003f, 0xdee9, - 0xcedc, 0xf2b5, 0xd0e4, 0xddd1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe1c8, 0xdbb7, 0xdfe3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedb9, 0xf1c5, 0x003f, 0xf3cf, 0xd7ab, - 0xe1ac, 0x003f, 0x003f, 0xe3eb, 0x003f, 0xeec7, 0x003f, 0x003f, - 0x003f, 0xe1c9, 0xcafa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf0fb, 0xfae1, 0xf0da, 0xcce7, 0xdaf4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xccbf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xceed, 0x003f, - 0x003f, 0xd5a9, 0xfae2, 0x003f, 0x003f, 0x003f, 0xd0e5, 0x003f, - 0xebd6, 0x003f, 0xecdf, 0x003f, 0x003f, 0x003f, 0xdffc, 0x003f, - 0x003f, 0xf7d6, 0xdeea, 0xcbb4, 0x003f, 0x003f, 0xefbe, 0x003f, - 0x003f, 0xccb5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfbd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeff2, 0xe2b7, - 0x003f, 0x003f, 0x003f, 0xcce8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf0fc, 0x003f, 0x003f, 0x003f, - 0xd6e0, 0x003f, 0xf1c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2b8, 0xebab, 0x003f, 0x003f, - 0x003f, 0xcbb5, 0xd8d1, 0x003f, 0xf4ce, 0xf3f7, 0x003f, 0x003f, - 0xd7c6, 0x003f, 0xd1bb, 0xf7aa, 0x003f, 0xedca, 0xd7d3, 0xd8fa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6c5, - 0x003f, 0x003f, 0xd1cc, 0xddfc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdffd, 0x003f, - 0xf9e5, 0x003f, 0xe0ca, 0x003f, 0x003f, 0xf2fd, 0xd3b0, 0x003f, - 0xf4f3, 0xdac9, 0x003f, 0xe6de, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf8ba, 0xe8d0, 0x003f, 0x003f, 0xd8fb, 0x003f, 0x003f, 0xead5, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6a3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf6c6, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7e00 .. 0x7eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf2db, 0xe4fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8b2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdada, 0x003f, 0xf2dc, 0xfbd6, 0xe9b2, - 0x003f, 0xeead, 0x003f, 0xfae3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdcee, 0x003f, 0x003f, 0xf5ea, 0xe6e0, - 0x003f, 0xf0fd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7ac, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5c5, 0xeee0, 0x003f, - 0x003f, 0xdbe5, 0x003f, 0xddde, 0x003f, 0x003f, 0xd9f0, 0xe9a3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1f9, 0x003f, 0xf2c4, 0xe0cb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9a4, 0x003f, - 0x003f, 0xe2b9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3b1, 0xfceb, 0xcda8, 0x003f, 0xccb6, 0x003f, 0x003f, - 0xf0db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe6ba, 0x003f, 0x003f, 0xcda9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3c3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1d9, 0x003f, 0x003f, 0xefab, - 0x003f, 0x003f, 0x003f, 0xe7c5, 0x003f, 0x003f, 0xe0e9, 0x003f, - 0xf3c5, 0x003f, 0x003f, 0xd4c0, 0xd5bf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7f00 .. 0x7fff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xddae, 0x003f, - 0xf9fc, 0x003f, 0xccc0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a2, 0x003f, 0x003f, 0x003f, - 0xceb8, 0x003f, 0x003f, 0x003f, 0xd8d2, 0xf9d6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1aa, 0xced1, 0x003f, 0x003f, 0xf6c7, 0x003f, - 0xdbeb, 0x003f, 0xdffe, 0x003f, 0x003f, 0xd8e1, 0x003f, 0xf7f3, - 0x003f, 0xd7e7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4fe, 0x003f, 0x003f, - 0xd1bc, 0x003f, 0xe5cf, 0x003f, 0xcbb6, 0x003f, 0xdab8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcdc4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd6be, 0x003f, 0x003f, 0x003f, 0xe2ba, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcfd8, 0x003f, 0x003f, 0x003f, - 0xe0cc, 0xebf9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfdfd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd7e8, 0xcbd8, 0x003f, 0x003f, 0x003f, 0xe9e2, 0x003f, 0x003f, - 0x003f, 0xe8ba, 0x003f, 0x003f, 0x003f, 0xe3c7, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeccd, 0x003f, 0xecce, 0x003f, 0xd6bf, 0x003f, - 0x003f, 0x003f, 0xe3a7, 0x003f, 0xdfd6, 0xfde8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeee1, - 0xf6a8, 0xddfd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8bb, 0x003f, 0xe8d1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf9d7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xceee, 0x003f, 0x003f, 0xeccf, 0x003f, 0x003f, 0x003f, - /* 0x8000 .. 0x80ff */ - 0xe9a5, 0xd6d5, 0x003f, 0xcdc5, 0x003f, 0xedba, 0xd1bd, 0x003f, - 0x003f, 0xcfbe, 0x003f, 0x003f, 0xecbb, 0x003f, 0x003f, 0x003f, - 0xd2b1, 0x003f, 0x003f, 0x003f, 0x003f, 0xcce9, 0x003f, 0xd9c4, - 0xe9fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1be, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xecbc, 0x003f, 0x003f, 0xe5ad, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7b0, 0x003f, 0xccea, - 0x003f, 0x003f, 0x003f, 0xd3c4, 0x003f, 0x003f, 0xd6c0, 0x003f, - 0x003f, 0x003f, 0xd6fd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1a1, 0x003f, - 0xdebd, 0x003f, 0xf6a9, 0x003f, 0x003f, 0x003f, 0xdaa4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6a4, - 0xf5c6, 0x003f, 0xe1a2, 0xe9c6, 0x003f, 0x003f, 0x003f, 0xf2c5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4e9, 0xd6ec, 0xebd3, - 0x003f, 0x003f, 0x003f, 0x003f, 0xecbd, 0xe2dc, 0xdeeb, 0xf0dc, - 0x003f, 0xebbf, 0x003f, 0xd7ce, 0xd1bf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5ab, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9fd, 0x003f, 0xcadc, 0x003f, 0x003f, - 0x003f, 0xcdc6, 0xf2b6, 0x003f, 0x003f, 0xddfe, 0x003f, 0x003f, - 0x003f, 0xccb7, 0xdbb8, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0e9, - 0x003f, 0xcedd, 0xebc0, 0x003f, 0xfda2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf8cb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xead6, 0xf1b0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdbce, 0x003f, 0xf7c3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdbcf, 0xcba4, 0x003f, 0x003f, 0xf8e0, 0x003f, - 0x003f, 0xfbd7, 0x003f, 0x003f, 0xebca, 0xe0a1, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcecd, 0x003f, 0x003f, 0xd4dc, 0x003f, 0x003f, 0x003f, - 0xfdd8, 0x003f, 0x003f, 0x003f, 0x003f, 0xd2f6, 0x003f, 0x003f, - /* 0x8100 .. 0x81ff */ - 0x003f, 0x003f, 0xf2b7, 0x003f, 0x003f, 0xfaf6, 0xf6aa, 0xfaf7, - 0xd8e6, 0x003f, 0xf4b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe8d2, 0x003f, 0xcac5, 0xcceb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2ee, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe2bb, 0x003f, 0xf7ad, 0x003f, 0x003f, 0x003f, 0xf8e1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf3ec, 0x003f, 0x003f, 0x003f, 0x003f, 0xdea1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe4fd, 0x003f, 0x003f, 0xe3ec, 0x003f, - 0xddaf, 0xddb0, 0x003f, 0x003f, 0xcbb7, 0xe8d3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1a3, 0xd2e0, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0fe, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9a6, 0xcbf2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedf3, 0xdcd9, 0xe0cd, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7da, - 0xdbb9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xccae, 0x003f, 0xdadb, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdc7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddb1, 0x003f, 0xd8af, 0xe3a3, 0x003f, 0x003f, - 0xceef, 0x003f, 0x003f, 0xf2f3, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf8b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0ce, 0x003f, 0xf5fd, 0x003f, 0x003f, - 0x003f, 0x003f, 0xebec, 0x003f, 0x003f, 0xd3c5, 0xfcec, 0xd2db, - 0xd4eb, 0x003f, 0xdea2, 0x003f, 0x003f, 0x003f, 0xe5e6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0b0, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd5c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedf4, - 0x003f, 0x003f, 0x003f, 0xe3ed, 0x003f, 0xe8c2, 0x003f, 0xedf5, - 0xd7fc, 0x003f, 0xedbb, 0x003f, 0x003f, 0xf6ab, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf2b8, 0xf6c8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd3e6, 0xf2dd, 0xcfbf, 0x003f, 0xebac, 0x003f, - /* 0x8200 .. 0x82ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfc0, 0x003f, 0xe6a8, - 0xfde9, 0x003f, 0xcfc1, 0x003f, 0xe0df, 0xdeec, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe0a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf4bf, 0xe2ef, 0x003f, 0xd9f1, 0xf1c7, - 0x003f, 0xcbb8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf9fe, 0xdbba, 0xdaf5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6ec, 0xdadc, 0xfae4, - 0x003f, 0xe0cf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xddb2, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6a9, 0x003f, 0xeff3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf3ed, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xebfa, 0x003f, 0xf9e6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcadd, 0xd5de, - 0x003f, 0xcade, 0xdfe4, 0x003f, 0x003f, 0x003f, 0xe6fd, 0x003f, - 0xf5ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4f5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe9e3, 0x003f, 0xedcb, 0xcfe4, 0x003f, - 0x003f, 0x003f, 0xd8d3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xddb3, 0xd4ec, 0x003f, 0x003f, 0xf2b9, 0x003f, 0xdfb7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbce, 0xfbd8, 0x003f, - 0x003f, 0xd0d9, 0x003f, 0x003f, 0xddd2, 0xf7f4, 0xe7dc, 0xe4a5, - 0x003f, 0xfca3, 0x003f, 0xdbbb, 0x003f, 0x003f, 0x003f, 0xf2ba, - 0xe9fd, 0xd0ca, 0x003f, 0xf5d6, 0xd9c5, 0xe4b4, 0x003f, 0xeda7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeabd, 0xe6fe, 0x003f, 0xf7c4, 0xf5ad, 0x003f, 0xd9e0, - 0x003f, 0x003f, 0x003f, 0xcab4, 0x003f, 0x003f, 0xf8e2, 0xcfc2, - 0x003f, 0xecbe, 0x003f, 0x003f, 0x003f, 0xe5b4, 0xcdc8, 0xeec8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe7c8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdc9, 0xf9b7, 0x003f, - /* 0x8300 .. 0x83ff */ - 0x003f, 0xf1e8, 0xd9f2, 0xdbf5, 0xcab5, 0xd9c6, 0x003f, 0x003f, - 0x003f, 0xd8c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9ab, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedbc, 0x003f, 0x003f, 0xd8d4, 0x003f, 0x003f, 0x003f, 0xdcda, - 0x003f, 0xe2bc, 0x003f, 0x003f, 0xfced, 0xece0, 0xd2fe, 0x003f, - 0xe9c7, 0xe6aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2f0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfabb, - 0x003f, 0xf5ae, 0xfbaa, 0x003f, 0x003f, 0x003f, 0x003f, 0xecfb, - 0x003f, 0xecbf, 0xfcd8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd4e5, 0x003f, 0x003f, 0x003f, 0xf9c3, - 0x003f, 0x003f, 0x003f, 0xeee2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd7e9, 0xedf6, 0x003f, 0x003f, 0x003f, 0xdeed, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xccec, 0x003f, - 0xe3ee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8d4, 0x003f, - 0x003f, 0x003f, 0xfaf8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xddb4, 0xe4b5, 0xd8b0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8d5, 0x003f, 0x003f, - 0x003f, 0xf4ea, 0x003f, 0x003f, 0x003f, 0xceb9, 0x003f, 0x003f, - 0x003f, 0xd6e1, 0xcfd2, 0x003f, 0xd0b6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcea2, 0x003f, 0x003f, 0xf3ee, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf3f8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdccc, 0x003f, 0xd0cb, 0x003f, 0x003f, 0x003f, 0xfca4, - 0xcdca, 0xd7d4, 0xdea3, 0x003f, 0xe4e0, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeec9, 0x003f, 0x003f, 0x003f, 0xe2dd, 0x003f, 0x003f, - /* 0x8400 .. 0x84ff */ - 0x003f, 0x003f, 0x003f, 0xf5fe, 0xd4ac, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5d1, 0x003f, 0xd8f0, 0xf8c3, 0xead7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf5d7, 0x003f, 0x003f, 0xd8bf, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfdc0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xebad, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5aa, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe7a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeeca, - 0x003f, 0x003f, 0x003f, 0xcae7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8e3, 0x003f, 0xd4dd, 0x003f, 0x003f, 0xead8, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfbd9, 0xedf7, 0x003f, 0x003f, 0xe5b5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0ad, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2bd, 0x003f, 0x003f, 0x003f, 0xe3c8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd9d5, 0x003f, 0x003f, 0xdfaa, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdbbc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf8e4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf1fa, 0x003f, 0x003f, 0xe5b6, 0xf3ef, 0x003f, 0x003f, 0xfbda, - 0xe1e0, 0x003f, 0xd9ac, 0x003f, 0xf5eb, 0x003f, 0xe0b6, 0x003f, - 0x003f, 0xe9c8, 0x003f, 0xcbcf, 0x003f, 0xe3c9, 0x003f, 0x003f, - 0x003f, 0xdeee, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe2be, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdcef, 0x003f, 0xd6a5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe2f1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6fe, 0x003f, 0x003f, 0x003f, - /* 0x8500 .. 0x85ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd9a1, 0x003f, 0xd8c0, 0xdcdb, 0x003f, 0x003f, 0xedbd, - 0xdfb8, 0x003f, 0xeaa5, 0x003f, 0x003f, 0x003f, 0xd7ad, 0x003f, - 0x003f, 0xf3f9, 0x003f, 0xedf8, 0x003f, 0xf5c7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe1ca, 0xebe3, 0x003f, 0xf2de, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8cc, 0x003f, 0xead9, - 0x003f, 0xd3c6, 0x003f, 0xdbe6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf5af, 0x003f, 0x003f, 0x003f, 0x003f, 0xcef0, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe9fe, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfbb6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2f2, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcff2, 0xf7b9, 0xd9f3, 0x003f, 0x003f, 0xe1cb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdadd, 0x003f, 0x003f, 0xdab9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebfb, - 0x003f, 0xcbb9, 0x003f, 0x003f, 0xedf9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0e0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4c0, 0x003f, - 0xfdbc, 0xdfb1, 0xe3ef, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0a3, - 0xfdb9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf0b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdcb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xedbe, 0x003f, 0x003f, 0x003f, 0xd5c0, 0xe3f0, 0xedfa, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9e4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd5ed, 0xe7dd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd4f6, 0xe5b7, 0x003f, 0x003f, - 0x003f, 0xdbe7, 0xe2bf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeecb, - 0x003f, 0x003f, 0xd7f4, 0xf0dd, 0x003f, 0x003f, 0x003f, 0xceab, - /* 0x8600 .. 0x86ff */ - 0x003f, 0x003f, 0xe7de, 0x003f, 0x003f, 0x003f, 0xd6d6, 0xe1cc, - 0x003f, 0x003f, 0xe8b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5ee, 0xdca2, - 0x003f, 0x003f, 0xe0d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5b5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5a1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbdb, 0x003f, - 0xf9cb, 0x003f, 0x003f, 0x003f, 0xcbf3, 0xf4a5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfac8, 0xd6d7, 0x003f, 0xe9e5, 0xfbdc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdd0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfbf6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdaa5, 0x003f, 0xdbbd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xece2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcdf7, 0xf0de, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf6c9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdeef, - 0x003f, 0x003f, 0x003f, 0xd3b1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfcee, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe8c3, 0x003f, 0xf1c8, 0x003f, 0x003f, 0x003f, 0xcef1, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf9ed, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2f4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4b6, 0x003f, - /* 0x8700 .. 0x87ff */ - 0xf5b9, 0x003f, 0xdcf0, 0xe3f1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe8a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf2bb, 0x003f, 0xdea4, 0x003f, 0xdacc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcae9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3da, 0x003f, 0xfcd9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeada, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf9c4, 0x003f, - 0xe3a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfbdd, 0x003f, 0xefca, 0x003f, - 0xe8c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebd7, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9ad, - 0x003f, 0x003f, 0xfbab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd3d9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf6de, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdaf6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0d1, 0x003f, 0x003f, 0xe9a8, - 0x003f, 0x003f, 0xf5f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfaaf, 0x003f, 0xebfc, 0x003f, 0x003f, 0xe0ea, 0x003f, - /* 0x8800 .. 0x88ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3b2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5c5, - 0x003f, 0x003f, 0xf1e3, 0xd5ee, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdcc, 0x003f, 0x003f, 0x003f, 0x003f, 0xedd9, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8c1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfaec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1eb, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfabc, 0xe6e2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfae5, 0xe2fa, 0x003f, 0x003f, 0x003f, 0xcab6, - 0x003f, 0xe4b7, 0x003f, 0xeadb, 0x003f, 0xf5fa, 0x003f, 0x003f, - 0x003f, 0xfbac, 0xcfc3, 0xebfd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf8fa, 0x003f, 0x003f, 0xdfb9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe1f1, 0x003f, 0xd2a4, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5fb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0da, 0xd0db, - 0x003f, 0xeabe, 0xd9b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcab7, 0x003f, 0x003f, 0xd3e7, 0x003f, 0xf8e5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd3b2, 0x003f, 0x003f, 0x003f, 0xe2c0, 0xf2df, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcde5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9ac, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcdcd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeeae, 0xd6ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7ea, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe7e0, 0xebae, 0x003f, 0x003f, - 0x003f, 0xcfd9, 0x003f, 0x003f, 0xdccd, 0xedfb, 0x003f, 0xdef0, - 0x003f, 0xd7eb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdea5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdfd7, 0xdbd0, 0xdbd1, 0x003f, 0x003f, - 0xd5a3, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0b2, 0x003f, 0x003f, - /* 0x8900 .. 0x89ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdcdc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcae8, 0x003f, 0xf8e6, 0xdcce, 0x003f, 0x003f, 0x003f, 0x003f, - 0xeadc, 0xdbd2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9b3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf7db, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3a8, 0x003f, - 0xd7ae, 0x003f, 0x003f, 0xe0e1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcbba, 0x003f, 0x003f, 0xe5d1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0dc, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd5c1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd8ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe3a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0a4, - 0x003f, 0xe9a9, 0x003f, 0xd3c7, 0x003f, 0x003f, 0xdcdd, 0xf8ae, - 0x003f, 0x003f, 0x003f, 0xccb8, 0x003f, 0x003f, 0x003f, 0xd0ae, - 0x003f, 0x003f, 0x003f, 0xd8f2, 0x003f, 0x003f, 0xe3ca, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccaf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd4ad, 0xf6d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd0cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcac6, 0x003f, 0x003f, 0xd5c2, 0x003f, 0x003f, - 0xceba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcac7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfab0, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdfd8, 0x003f, 0x003f, 0x003f, - 0xf5ba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8a00 .. 0x8aff */ - 0xe5eb, 0x003f, 0xeff4, 0xddb5, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcdaa, 0x003f, 0xe3f2, 0x003f, 0xfbf7, 0x003f, 0xf7d0, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfdba, 0x003f, 0x003f, 0xfde1, 0xf6fe, - 0xd1c0, 0x003f, 0x003f, 0xe8c5, 0x003f, 0xe4b8, 0x003f, 0xe1e8, - 0x003f, 0x003f, 0x003f, 0xccc1, 0x003f, 0xd2ed, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdbbe, 0x003f, 0x003f, 0xe0e2, 0x003f, 0x003f, - 0x003f, 0xfac9, 0x003f, 0x003f, 0xe1cd, 0x003f, 0xcab8, 0x003f, - 0x003f, 0x003f, 0xf2e0, 0xf1c9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdef1, 0x003f, 0x003f, 0x003f, 0xf0df, 0xf8c4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeecc, 0x003f, 0x003f, 0xdef2, 0x003f, - 0xe7c9, 0x003f, 0xe2f3, 0xe7e1, 0x003f, 0x003f, 0xe3cb, 0x003f, - 0x003f, 0xe3cc, 0x003f, 0x003f, 0x003f, 0xcff8, 0xefac, 0x003f, - 0xfdfe, 0xfca5, 0xfab1, 0xdfd9, 0x003f, 0xe0d2, 0x003f, 0x003f, - 0x003f, 0xf4da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1ca, 0x003f, 0xcea3, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf2bc, 0xece3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe0a5, 0x003f, 0xf7ab, 0x003f, 0x003f, - 0xebaf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5de, 0x003f, - 0xe1a4, 0xcdab, 0x003f, 0xd9f4, 0xe8a6, 0xcdce, 0xe1e9, 0x003f, - 0xfcef, 0x003f, 0xe0e3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2c1, 0x003f, 0xcea4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdea6, 0x003f, 0x003f, 0xebfe, 0x003f, 0xebdd, 0xf0e0, - 0x003f, 0x003f, 0xf4db, 0x003f, 0xe2f4, 0x003f, 0x003f, 0xd3c8, - 0x003f, 0x003f, 0x003f, 0xf4eb, 0x003f, 0xeeb5, 0x003f, 0xf5d8, - 0x003f, 0x003f, 0xd5df, 0x003f, 0x003f, 0x003f, 0xd6e5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xebb0, 0xf4e3, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe3cd, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4f4, 0xfab2, - 0x003f, 0x003f, 0xeff5, 0xcadf, 0x003f, 0xebb1, 0xedbf, 0x003f, - 0x003f, 0xfdc9, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4a6, 0xf9a4, - 0xf0b3, 0x003f, 0xe5ec, 0x003f, 0x003f, 0x003f, 0xd1e7, 0x003f, - /* 0x8b00 .. 0x8bff */ - 0xd9c7, 0xe4d7, 0xeadd, 0x003f, 0xd4f7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdaba, 0x003f, - 0xdacd, 0x003f, 0x003f, 0x003f, 0xf9cc, 0x003f, 0xe1da, 0xdbbf, - 0x003f, 0xccc5, 0xecd0, 0xcbbb, 0x003f, 0xdef3, 0x003f, 0x003f, - 0xe9aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd9c8, 0x003f, 0x003f, 0xeee3, 0xd7bd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcfc4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd0cd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfca6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf1fb, 0x003f, 0x003f, 0x003f, 0x003f, 0xfdd2, 0xd1c1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe3db, 0x003f, 0xd3c9, 0x003f, 0xdccf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcced, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdea7, 0x003f, 0x003f, 0xe6bb, - 0xeca1, 0x003f, 0x003f, 0x003f, 0xccb9, 0x003f, 0x003f, 0xfbde, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7e2, 0x003f, 0x003f, - 0xd4c1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdca8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2c2, 0x003f, 0xf3d8, 0xe5d3, 0x003f, 0x003f, 0xf3d9, 0x003f, - 0x003f, 0x003f, 0xf3c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8c00 .. 0x8cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcddb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdac, - 0x003f, 0xfcc3, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4e7, 0x003f, - 0xd1c2, 0x003f, 0xf9a5, 0x003f, 0xe8d5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3ce, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd4ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfda, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfbdf, 0xe7e3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8fb, 0xe3cf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf5b0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd8e7, 0x003f, 0xd9c9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8af, 0xeff6, 0x003f, - 0xddb6, 0xeeaf, 0xcdf8, 0x003f, 0x003f, 0x003f, 0x003f, 0xdeb8, - 0xfca7, 0xf7fc, 0xf7b1, 0xcebb, 0xf4a1, 0x003f, 0x003f, 0xeecd, - 0xe1ae, 0x003f, 0x003f, 0xecc3, 0xcffe, 0x003f, 0xf8bf, 0xd8e2, - 0xd3e8, 0x003f, 0x003f, 0xdea8, 0xf4e4, 0xecc2, 0x003f, 0xd9f5, - 0xf9c5, 0xddd3, 0xd6f1, 0xecfc, 0xfcf0, 0x003f, 0x003f, 0xedc0, - 0xcab9, 0x003f, 0xeee4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf2e1, 0x003f, 0xdeb9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd6f2, 0x003f, 0xdef4, 0x003f, 0xdfdb, 0x003f, - 0xdbd3, 0x003f, 0xfae7, 0xd8e3, 0xf4c1, 0x003f, 0xddb7, 0x003f, - 0x003f, 0x003f, 0xf2f5, 0x003f, 0x003f, 0xd4ae, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6f3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xddb8, 0xcfc5, 0xdfdf, 0x003f, 0x003f, - /* 0x8d00 .. 0x8dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xf2be, 0xf6a1, 0x003f, 0xebcb, - 0xf1fc, 0x003f, 0xf3c7, 0x003f, 0x003f, 0xe0eb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xedfc, 0x003f, 0x003f, 0xe1db, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeee5, 0x003f, 0xdef5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfad3, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf1cb, 0x003f, 0x003f, 0xd0af, 0xddb9, 0x003f, 0x003f, 0xd1c3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5b1, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeac6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf0e1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf6ac, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf5d9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0eb, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xddba, 0x003f, 0x003f, 0x003f, 0xf2bf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf7c5, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdba2, 0xf2f6, 0x003f, 0x003f, 0xcaba, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf7f5, 0x003f, 0xcbe5, 0x003f, 0x003f, - 0x003f, 0xeee6, 0x003f, 0xe0d3, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcea5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6d8, - 0x003f, 0x003f, 0x003f, 0xd4af, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8e00 .. 0x8eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe9c9, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3ce, - 0xf4c2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbe6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xebb2, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1a2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xebb3, 0x003f, 0xf0b4, 0x003f, 0x003f, 0xcbf4, - 0xd4b0, 0xf3b2, 0xfbb7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf5ec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeee7, - 0xf4b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf5ed, 0x003f, 0xcff3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf0e2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeece, - 0x003f, 0x003f, 0xf1cc, 0x003f, 0x003f, 0xe5b8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd7f5, 0xe3f3, 0xcfe5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcfc6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf3b3, 0xe4d8, 0xcff9, 0xcfda, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfacd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6e3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf2e2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf5ee, 0x003f, 0x003f, 0xcabb, 0x003f, 0x003f, 0xe3dc, 0x003f, - /* 0x8f00 .. 0x8fff */ - 0x003f, 0x003f, 0x003f, 0xcef2, 0x003f, 0xd6d9, 0x003f, 0x003f, - 0x003f, 0xeeb0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf4e5, 0xd8c2, 0xdcd0, 0xccee, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd5e0, 0xf6ca, 0xfdca, 0xd8d6, 0xf4cf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6a6, 0xdcbe, - 0x003f, 0xdbd4, 0xd7c7, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2fe, - 0x003f, 0x003f, 0x003f, 0xf1cd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2c3, 0xdcde, 0x003f, 0xdcdf, 0x003f, 0x003f, 0xefad, 0xe6ab, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf9dd, 0xeabf, 0x003f, 0x003f, - 0x003f, 0xefae, 0x003f, 0x003f, 0x003f, 0xf4d0, 0xcef3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6ac, 0x003f, 0xcede, - 0x003f, 0x003f, 0xd5f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe3f4, 0xcdd0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd5b8, 0x003f, 0x003f, 0xf7fd, 0x003f, - 0xdca9, 0x003f, 0x003f, 0x003f, 0x003f, 0xdef6, 0x003f, 0xdcaa, - 0xf2e3, 0xe9b4, 0xd2dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe9e6, 0x003f, 0x003f, 0xe3f6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7ca, 0x003f, - 0x003f, 0xd0ce, 0x003f, 0x003f, 0xdaf7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcabc, 0x003f, - 0x003f, 0x003f, 0xeee8, 0xdade, 0x003f, 0xf2f7, 0x003f, 0x003f, - 0xe2fb, 0x003f, 0xcca6, 0x003f, 0x003f, 0x003f, 0x003f, 0xdabb, - 0x003f, 0xeee9, 0x003f, 0x003f, 0x003f, 0xf5da, 0x003f, 0x003f, - /* 0x9000 .. 0x90ff */ - 0xf7dc, 0xe1ea, 0xcec1, 0xd4b1, 0x003f, 0xfdb1, 0xe6bd, 0x003f, - 0xfbad, 0x003f, 0x003f, 0xf8e7, 0x003f, 0xe1ce, 0x003f, 0xf7e2, - 0xf5ef, 0xcfc7, 0x003f, 0x003f, 0xd4b2, 0xccef, 0x003f, 0xd4e8, - 0x003f, 0xeecf, 0xf7d7, 0x003f, 0x003f, 0xe0a6, 0xd6c1, 0xe1dc, - 0xf0e3, 0xf1e4, 0xdcf1, 0xd6a7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4f5, 0x003f, - 0x003f, 0xf1ce, 0xf2e4, 0x003f, 0x003f, 0xd0b0, 0x003f, 0x003f, - 0xecef, 0x003f, 0x003f, 0x003f, 0xf9ba, 0x003f, 0xebb5, 0x003f, - 0x003f, 0xd4ed, 0xe2c4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9e7, - 0x003f, 0x003f, 0xebb4, 0xeaa1, 0x003f, 0xf8bc, 0xcea6, 0x003f, - 0xf9c6, 0xfcda, 0x003f, 0xd4b3, 0xd3b9, 0xeade, 0x003f, 0x003f, - 0x003f, 0xe9ab, 0x003f, 0x003f, 0xe1e1, 0xd3cf, 0xf4f6, 0x003f, - 0xeac0, 0xe1cf, 0x003f, 0xccba, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeeea, 0x003f, 0x003f, 0x003f, 0xf0e4, 0xf3b4, 0xd4ee, - 0x003f, 0x003f, 0xf2c0, 0x003f, 0x003f, 0xf1e5, 0x003f, 0xf4c3, - 0xe0d4, 0x003f, 0xebb6, 0x003f, 0xd7a1, 0xcbe8, 0x003f, 0xf9ad, - 0xe9ad, 0xd8e4, 0xfab3, 0xe2c5, 0xfcbd, 0x003f, 0x003f, 0xecc4, - 0xd8b1, 0x003f, 0xdcab, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5a4, - 0x003f, 0xebe9, 0x003f, 0x003f, 0x003f, 0xe8bb, 0x003f, 0x003f, - 0x003f, 0xd8d7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xfbae, 0xd1e1, 0x003f, 0x003f, 0xdbc0, 0x003f, - 0xf5be, 0x003f, 0xdef7, 0x003f, 0x003f, 0x003f, 0x003f, 0xcafb, - 0xf7c6, 0xcfc8, 0x003f, 0x003f, 0x003f, 0xe1d0, 0x003f, 0x003f, - 0xeed0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe9f4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcef4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5cd, 0x003f, - 0x003f, 0xcfdb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xddbb, 0x003f, 0x003f, 0x003f, 0x003f, 0xceac, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9e8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4b4, 0x003f, 0x003f, - /* 0x9100 .. 0x91ff */ - 0x003f, 0x003f, 0xe4c7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf5db, 0x003f, 0x003f, 0xfac1, 0x003f, 0x003f, - 0x003f, 0xdea9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4f8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeff7, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd3b3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xebb7, 0xeff8, 0xf5dc, 0xedcc, 0xdbd5, 0xf1cf, 0x003f, - 0x003f, 0x003f, 0xf1d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf5b2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd9ae, 0xd5ac, 0x003f, 0xe2c6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfda3, 0x003f, 0xfbe5, - 0xdfab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2f5, - 0x003f, 0xf6ad, 0x003f, 0xf5b3, 0x003f, 0xf0b5, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe1a5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf5dd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeca2, 0xedfd, 0x003f, 0xf5b4, 0xfbb8, - 0x003f, 0xdba3, 0x003f, 0x003f, 0xd6ca, 0xcbd9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe5d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3fa, - 0x003f, 0xebb8, 0x003f, 0xe0b7, 0xd7ec, 0xf1ec, 0xe5af, 0xd5e1, - 0xd7ed, 0xd1d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1f2, - 0xeff9, 0x003f, 0x003f, 0x003f, 0xddbc, 0xf6dc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0e5, 0x003f, 0x003f, 0x003f, 0xf4c4, - 0x003f, 0x003f, 0xe9e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3fb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9200 .. 0x92ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4ef, 0x003f, 0x003f, - 0xcca2, 0xf7fe, 0xdfbc, 0x003f, 0x003f, 0x003f, 0x003f, 0xebcd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0b7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6c2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe8ad, 0x003f, 0x003f, 0x003f, 0x003f, 0xefaf, - 0xcba5, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbe9, 0x003f, 0x003f, - 0x003f, 0xfae8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xccc6, - 0x003f, 0x003f, 0x003f, 0xe6e7, 0x003f, 0x003f, 0xeac7, 0x003f, - 0x003f, 0x003f, 0xdba4, 0x003f, 0xcfc9, 0xe2fc, 0xeffa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xebde, 0x003f, 0x003f, 0xf5c8, 0x003f, 0xd4de, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe0d5, 0x003f, 0xefb0, 0x003f, 0x003f, 0xe2c7, 0x003f, - 0xd9af, 0x003f, 0x003f, 0x003f, 0xf9e7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe7e5, 0x003f, 0x003f, 0xcfca, 0xe1d1, - 0x003f, 0xe2c8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeffb, 0x003f, 0x003f, 0xfaf9, - 0x003f, 0x003f, 0xdcf2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0a7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf8e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcbea, 0x003f, 0x003f, 0x003f, 0xcbbc, 0x003f, 0x003f, 0x003f, - /* 0x9300 .. 0x93ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xd6e2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf5de, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf5df, 0x003f, 0xeeb6, 0x003f, 0x003f, 0x003f, 0xe2f6, 0xd3ca, - 0xeffc, 0xd1c4, 0xefb1, 0x003f, 0xd1c5, 0x003f, 0xd0de, 0x003f, - 0xd9e1, 0x003f, 0x003f, 0xe0b8, 0x003f, 0x003f, 0xcdd1, 0xf3b9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe7cc, 0x003f, 0xd6a8, 0xcea7, 0x003f, 0xd4b5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4c8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd3b4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebb9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbf5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf6dd, 0x003f, 0xf1a3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xccc7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe9ca, 0x003f, 0xe1f0, 0x003f, - 0x003f, 0x003f, 0xf5e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfbaf, 0x003f, 0x003f, 0x003f, 0xcbd1, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfbe0, 0xf2e5, 0x003f, 0x003f, - 0xecf0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0ec, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeeeb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9cb, 0x003f, - 0x003f, 0xccf0, 0x003f, 0x003f, 0xd7af, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3a1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9400 .. 0x94ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xfcf5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf1a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0d6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xefb2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4d1, 0x003f, 0x003f, - 0xf7a1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf1d1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcafc, 0xcafd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcece, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf3c8, 0x003f, 0xf3ba, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9500 .. 0x95ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xedfe, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdaa6, 0x003f, 0x003f, 0xe0ec, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8cd, 0x003f, 0xcbd2, 0x003f, 0x003f, 0x003f, 0xebce, - 0x003f, 0xf9d8, 0xf9d9, 0xcae0, 0xdaca, 0x003f, 0x003f, 0x003f, - 0xcba6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcac8, 0xf9ee, 0xdbec, 0x003f, 0x003f, - 0xd0b1, 0x003f, 0x003f, 0x003f, 0x003f, 0xd5ef, 0x003f, 0x003f, - 0x003f, 0xe6f3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe7a2, 0xe4d9, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4e1, - 0x003f, 0x003f, 0xfcc4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf9ef, 0xcff4, 0xf7e6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcebc, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf4c5, 0xdca3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9600 .. 0x96ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xddbd, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf4c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf8a1, 0x003f, 0x003f, 0x003f, 0xe8d6, 0x003f, - 0x003f, 0x003f, 0xdbc1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf0e6, 0x003f, 0x003f, 0x003f, 0xe4b9, - 0xf6ed, 0x003f, 0xf9ae, 0x003f, 0xddbe, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd7b0, 0xd8e8, 0xcbbd, 0x003f, 0x003f, - 0xf9da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf8ce, 0xf9f0, 0xe0ed, 0xe3b3, 0xf4b3, - 0x003f, 0x003f, 0xeac2, 0xf2e6, 0xf0b6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdbd6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xebe4, 0x003f, 0x003f, 0xf2e7, 0x003f, 0xd7d5, 0xd4b6, 0xf9e8, - 0xd7c1, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5d5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9ea, 0xd7cc, 0x003f, - 0x003f, 0x003f, 0xd3e9, 0xe2c9, 0x003f, 0xfcdb, 0xcdad, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xccb0, 0xeaa2, 0x003f, 0x003f, - 0xe4f6, 0xd0c0, 0x003f, 0xf0b7, 0xeea1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd7f6, 0x003f, 0x003f, 0x003f, 0xe2ca, - 0xe2cb, 0x003f, 0xfacf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xebdf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6cb, - 0x003f, 0x003f, 0x003f, 0xf4b4, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedcd, 0xe4d2, 0x003f, 0x003f, 0xeaa9, 0xe4ba, 0xf3a2, 0xcdd2, - 0x003f, 0xf6cb, 0x003f, 0xf1e6, 0xedc1, 0xe8bc, 0xeed1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0e7, 0xe2cc, 0x003f, - 0x003f, 0xe4aa, 0x003f, 0xf5e1, 0xedda, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd7ee, 0xd1f1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe9eb, 0xe9ec, 0xe0e4, 0x003f, 0x003f, 0x003f, 0x003f, 0xdaa7, - 0xddd4, 0x003f, 0xeaa3, 0x003f, 0x003f, 0x003f, 0xd6c3, 0xd6f4, - 0x003f, 0xdadf, 0x003f, 0xefb3, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9700 .. 0x97ff */ - 0xe2cd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeffd, 0xf2e8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xefc5, 0x003f, 0xe7e7, 0x003f, 0x003f, 0xd7fd, 0x003f, - 0x003f, 0xe7ce, 0x003f, 0x003f, 0xdfdc, 0x003f, 0xf9c7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9f6, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdfac, 0x003f, 0xd6da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdca4, 0x003f, 0x003f, 0x003f, 0xf0b8, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd5fa, 0x003f, 0xe4f7, 0x003f, 0x003f, 0x003f, - 0xd6c4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf4ec, 0x003f, 0x003f, 0x003f, 0x003f, 0xeffe, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf0a1, 0x003f, 0xdeaa, 0x003f, - 0x003f, 0xdabc, 0xd8fc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfad4, 0x003f, 0x003f, 0x003f, 0xece5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xfca8, 0x003f, 0x003f, 0xece6, - 0x003f, 0x003f, 0xd8cb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfbb9, 0x003f, 0xe4d3, 0x003f, 0xcdf9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcfd3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcaea, 0x003f, 0x003f, 0xcfd4, 0x003f, 0xf8bd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4c7, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeadf, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf9db, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd4b7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xebe5, 0x003f, 0x003f, 0xe1d2, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeaa4, 0x003f, 0x003f, 0x003f, 0xfac2, - /* 0x9800 .. 0x98ff */ - 0xfbe1, 0xfaed, 0xf0a2, 0xccf1, 0x003f, 0xfaa3, 0xe2f7, 0x003f, - 0xe2ce, 0x003f, 0xe9f5, 0x003f, 0xe1eb, 0x003f, 0x003f, 0x003f, - 0xe7e8, 0xe8d7, 0xdaf8, 0xd4cb, 0x003f, 0x003f, 0x003f, 0xf7f6, - 0xd6c5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd4e9, 0x003f, 0x003f, - 0xfafa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xccf2, 0xf7dd, 0x003f, 0xdeba, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcea8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf0b9, 0xe4fe, 0xe4c9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d4, 0x003f, 0x003f, 0x003f, - 0xeac3, 0x003f, 0xefb4, 0x003f, 0x003f, 0x003f, 0xd7be, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfbe2, 0x003f, 0xcdd3, - 0x003f, 0x003f, 0x003f, 0xefb5, 0x003f, 0x003f, 0x003f, 0xfae9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf9a6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfbd, - 0x003f, 0xf7c7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf8fd, 0x003f, 0x003f, 0xf8fc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdeab, 0xdbe8, 0x003f, 0x003f, 0xe3dd, - 0x003f, 0xe1e2, 0xd1c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf6d0, 0xebe6, 0xdaf9, - 0x003f, 0x003f, 0x003f, 0x003f, 0xecc7, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdef8, 0xf8e9, 0xe3de, 0x003f, - /* 0x9900 .. 0x99ff */ - 0x003f, 0x003f, 0x003f, 0xcef5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfac3, 0xe5d7, 0x003f, 0xecc8, 0x003f, 0x003f, 0x003f, - 0xf3c9, 0x003f, 0x003f, 0xe4bb, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe6ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefb6, 0x003f, - 0xdcbf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcebd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8c3, 0x003f, 0x003f, - 0x003f, 0xd0cf, 0x003f, 0xcffa, 0xf3ca, 0xe0d7, 0x003f, 0x003f, - 0x003f, 0xd1c7, 0xe9ae, 0x003f, 0xe8bd, 0x003f, 0x003f, 0xfac4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2cf, 0x003f, - 0x003f, 0xfac5, 0x003f, 0x003f, 0x003f, 0xf9b8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdce0, 0x003f, 0x003f, - 0xfbb0, 0x003f, 0x003f, 0x003f, 0xd8a9, 0xe5df, 0xf9a7, 0x003f, - 0x003f, 0xf6ee, 0x003f, 0xf6cc, 0xe2f8, 0x003f, 0x003f, 0x003f, - 0x003f, 0xecf1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdae0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf1d2, 0xd2cc, 0xcfcb, 0x003f, 0x003f, 0xcabd, 0x003f, 0x003f, - 0x003f, 0xddbf, 0x003f, 0x003f, 0x003f, 0xf6ef, 0x003f, 0xdef9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfab4, 0x003f, 0x003f, - 0x003f, 0xd5ad, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1e7, - /* 0x9a00 .. 0x9aff */ - 0x003f, 0xdebe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdcc0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd1c8, 0xd1c9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf8be, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcbf6, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd4f9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5e2, 0xe1d3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd8e9, 0x003f, 0x003f, 0xf8fe, 0x003f, 0xcfcc, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfda4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcef6, 0x003f, 0xfad0, - 0x003f, 0x003f, 0xccf3, 0xe6be, 0x003f, 0x003f, 0x003f, 0xf6ae, - 0x003f, 0x003f, 0xd5f0, 0x003f, 0x003f, 0xd1ca, 0x003f, 0x003f, - 0x003f, 0xfcbe, 0xd5f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcde9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfab5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2d0, 0xf4f7, 0x003f, 0x003f, 0x003f, - 0xcdd4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe7a3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdba5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9b00 .. 0x9bff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe2d1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7a2, - 0x003f, 0x003f, 0xf7e3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeaa6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd0a1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xceda, 0xfbeb, 0xdba6, 0xdbde, 0xd8e5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeae0, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd8aa, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5e0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6db, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefc6, 0x003f, - 0x003f, 0xf8ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4d5, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcef7, 0x003f, 0x003f, 0xe0d8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd7ef, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4ed, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcde6, 0x003f, 0x003f, 0x003f, - 0xccf4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9c00 .. 0x9cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf5e3, 0x003f, 0x003f, - 0xe4ca, 0x003f, 0xdce1, 0x003f, 0x003f, 0xf9c8, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xfcbf, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe8a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8c4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbbe, - 0x003f, 0xdcae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7f7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0e8, 0x003f, 0xddc0, - 0x003f, 0xcfcd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdcf3, 0xd9b0, 0x003f, 0xe6e9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9d00 .. 0x9dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe4bc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xeac4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4ec, 0x003f, - 0xe4e5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfbf8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccbb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4bd, 0x003f, 0x003f, - 0xcddc, 0xd9f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdddf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xedce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd9d0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe5a3, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf9cd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcdae, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfce, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf6af, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xfdd3, 0xebed, 0xd6dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9e00 .. 0x9eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5a4, 0x003f, 0x003f, 0x003f, 0xd5b6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6dd, 0x003f, 0x003f, - 0x003f, 0xf9e9, 0x003f, 0x003f, 0x003f, 0xe7a4, 0x003f, 0xd6e3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd1cb, 0xd6e4, 0x003f, 0x003f, 0x003f, 0xd5f2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdefa, 0x003f, 0xd7f8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd8ea, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcfd5, 0xd8fd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd8ab, 0x003f, 0x003f, 0xfdcb, 0x003f, - 0x003f, 0x003f, 0x003f, 0xfcdc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0a8, 0xd5f3, 0x003f, - 0x003f, 0xfdd9, 0x003f, 0x003f, 0xcca3, 0x003f, 0x003f, 0x003f, - 0xd9f9, 0x003f, 0x003f, 0xd3ea, 0xf5f5, 0x003f, 0xefc7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd3da, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdabd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9f00 .. 0x9fff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8a8, - 0xdcaf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf0a3, 0x003f, - 0x003f, 0x003f, 0x003f, 0xcdd5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe0a9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdeac, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf0ba, 0xeeb1, 0x003f, 0x003f, 0xeeb2, 0x003f, - 0x003f, 0x003f, 0xf6cd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xeed2, - 0x003f, 0xd6c6, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe0e5, - 0x003f, 0x003f, 0xf3bb, 0x003f, 0xe5e1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4cb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd7a3, 0x003f, 0x003f, - 0xdbc2, 0x003f, 0x003f, 0x003f, 0x003f, 0xcafe, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcfcf, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xac00 .. 0xacff */ - 0xb0a1, 0xb0a2, 0x8141, 0x8142, 0xb0a3, 0x8143, 0x8144, 0xb0a4, - 0xb0a5, 0xb0a6, 0xb0a7, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, - 0xb0a8, 0xb0a9, 0xb0aa, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af, - 0x814a, 0xb0b0, 0xb0b1, 0xb0b2, 0xb0b3, 0xb0b4, 0x814b, 0x814c, - 0xb0b5, 0x814d, 0x814e, 0x814f, 0xb0b6, 0x8150, 0x8151, 0x8152, - 0x8153, 0x8154, 0x8155, 0x8156, 0xb0b7, 0xb0b8, 0x8157, 0xb0b9, - 0xb0ba, 0xb0bb, 0x8158, 0x8159, 0x815a, 0x8161, 0x8162, 0x8163, - 0xb0bc, 0xb0bd, 0x8164, 0x8165, 0xb0be, 0x8166, 0x8167, 0x8168, - 0xb0bf, 0x8169, 0x816a, 0x816b, 0x816c, 0x816d, 0x816e, 0x816f, - 0x8170, 0x8171, 0x8172, 0xb0c0, 0x8173, 0xb0c1, 0x8174, 0x8175, - 0x8176, 0x8177, 0x8178, 0x8179, 0xb0c2, 0x817a, 0x8181, 0x8182, - 0xb0c3, 0x8183, 0x8184, 0x8185, 0xb0c4, 0x8186, 0x8187, 0x8188, - 0x8189, 0x818a, 0x818b, 0x818c, 0x818d, 0x818e, 0x818f, 0x8190, - 0x8191, 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8198, - 0xb0c5, 0xb0c6, 0x8199, 0x819a, 0xb0c7, 0x819b, 0x819c, 0xb0c8, - 0xb0c9, 0x819d, 0xb0ca, 0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2, - 0xb0cb, 0xb0cc, 0x81a3, 0xb0cd, 0xb0ce, 0xb0cf, 0xb0d0, 0x81a4, - 0x81a5, 0xb0d1, 0xb0d2, 0xb0d3, 0xb0d4, 0x81a6, 0x81a7, 0x81a8, - 0xb0d5, 0x81a9, 0x81aa, 0x81ab, 0xb0d6, 0x81ac, 0x81ad, 0x81ae, - 0x81af, 0x81b0, 0x81b1, 0x81b2, 0xb0d7, 0xb0d8, 0x81b3, 0xb0d9, - 0xb0da, 0xb0db, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, - 0xb0dc, 0xb0dd, 0xb0de, 0x81ba, 0xb0df, 0x81bb, 0x81bc, 0xb0e0, - 0xb0e1, 0x81bd, 0x81be, 0x81bf, 0x81c0, 0x81c1, 0x81c2, 0x81c3, - 0xb0e2, 0xb0e3, 0x81c4, 0xb0e4, 0xb0e5, 0xb0e6, 0x81c5, 0x81c6, - 0x81c7, 0xb0e7, 0x81c8, 0x81c9, 0xb0e8, 0x81ca, 0x81cb, 0x81cc, - 0xb0e9, 0x81cd, 0x81ce, 0x81cf, 0xb0ea, 0x81d0, 0x81d1, 0x81d2, - 0x81d3, 0x81d4, 0x81d5, 0x81d6, 0x81d7, 0xb0eb, 0x81d8, 0xb0ec, - 0x81d9, 0x81da, 0x81db, 0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, - 0xb0ed, 0xb0ee, 0x81e1, 0x81e2, 0xb0ef, 0x81e3, 0x81e4, 0xb0f0, - 0xb0f1, 0x81e5, 0xb0f2, 0x81e6, 0xb0f3, 0x81e7, 0x81e8, 0xb0f4, - 0xb0f5, 0xb0f6, 0x81e9, 0xb0f7, 0x81ea, 0xb0f8, 0xb0f9, 0x81eb, - 0x81ec, 0x81ed, 0x81ee, 0x81ef, 0xb0fa, 0xb0fb, 0x81f0, 0x81f1, - /* 0xad00 .. 0xadff */ - 0xb0fc, 0x81f2, 0x81f3, 0x81f4, 0xb0fd, 0x81f5, 0xb0fe, 0x81f6, - 0x81f7, 0x81f8, 0x81f9, 0x81fa, 0xb1a1, 0xb1a2, 0x81fb, 0xb1a3, - 0x81fc, 0xb1a4, 0x81fd, 0x81fe, 0x8241, 0x8242, 0x8243, 0x8244, - 0xb1a5, 0x8245, 0x8246, 0x8247, 0xb1a6, 0x8248, 0x8249, 0x824a, - 0xb1a7, 0x824b, 0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0x8251, - 0x8252, 0xb1a8, 0x8253, 0x8254, 0xb1a9, 0xb1aa, 0x8255, 0x8256, - 0x8257, 0x8258, 0x8259, 0x825a, 0xb1ab, 0xb1ac, 0x8261, 0x8262, - 0xb1ad, 0x8263, 0x8264, 0x8265, 0xb1ae, 0x8266, 0x8267, 0x8268, - 0x8269, 0x826a, 0x826b, 0x826c, 0xb1af, 0xb1b0, 0x826d, 0xb1b1, - 0x826e, 0xb1b2, 0x826f, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, - 0xb1b3, 0x8275, 0x8276, 0x8277, 0xb1b4, 0x8278, 0x8279, 0x827a, - 0xb1b5, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, - 0x8288, 0xb1b6, 0x8289, 0xb1b7, 0x828a, 0x828b, 0x828c, 0x828d, - 0x828e, 0x828f, 0x8290, 0x8291, 0xb1b8, 0xb1b9, 0x8292, 0x8293, - 0xb1ba, 0x8294, 0x8295, 0xb1bb, 0xb1bc, 0xb1bd, 0xb1be, 0x8296, - 0x8297, 0x8298, 0x8299, 0xb1bf, 0xb1c0, 0xb1c1, 0x829a, 0xb1c2, - 0x829b, 0xb1c3, 0xb1c4, 0x829c, 0x829d, 0x829e, 0x829f, 0x82a0, - 0xb1c5, 0xb1c6, 0x82a1, 0x82a2, 0xb1c7, 0x82a3, 0x82a4, 0x82a5, - 0xb1c8, 0x82a6, 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ab, 0x82ac, - 0x82ad, 0x82ae, 0x82af, 0x82b0, 0xb1c9, 0xb1ca, 0x82b1, 0x82b2, - 0x82b3, 0x82b4, 0x82b5, 0x82b6, 0xb1cb, 0x82b7, 0x82b8, 0x82b9, - 0x82ba, 0x82bb, 0x82bc, 0x82bd, 0x82be, 0x82bf, 0x82c0, 0x82c1, - 0x82c2, 0x82c3, 0x82c4, 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0xb1cc, - 0x82c9, 0x82ca, 0x82cb, 0x82cc, 0x82cd, 0x82ce, 0x82cf, 0x82d0, - 0xb1cd, 0xb1ce, 0x82d1, 0x82d2, 0xb1cf, 0x82d3, 0x82d4, 0x82d5, - 0xb1d0, 0x82d6, 0x82d7, 0x82d8, 0x82d9, 0x82da, 0x82db, 0x82dc, - 0xb1d1, 0xb1d2, 0x82dd, 0xb1d3, 0x82de, 0x82df, 0x82e0, 0x82e1, - 0x82e2, 0x82e3, 0x82e4, 0x82e5, 0xb1d4, 0x82e6, 0x82e7, 0x82e8, - 0xb1d5, 0x82e9, 0x82ea, 0x82eb, 0xb1d6, 0x82ec, 0x82ed, 0x82ee, - 0x82ef, 0x82f0, 0x82f1, 0x82f2, 0x82f3, 0x82f4, 0x82f5, 0x82f6, - 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, 0x82fc, 0x82fd, 0x82fe, - 0xb1d7, 0xb1d8, 0x8341, 0x8342, 0xb1d9, 0x8343, 0x8344, 0xb1da, - /* 0xae00 .. 0xaeff */ - 0xb1db, 0xb1dc, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, - 0xb1dd, 0xb1de, 0x834b, 0xb1df, 0x834c, 0xb1e0, 0x834d, 0x834e, - 0x834f, 0x8350, 0x8351, 0x8352, 0xb1e1, 0x8353, 0x8354, 0x8355, - 0x8356, 0x8357, 0x8358, 0x8359, 0x835a, 0x8361, 0x8362, 0x8363, - 0x8364, 0x8365, 0x8366, 0x8367, 0x8368, 0x8369, 0x836a, 0x836b, - 0x836c, 0x836d, 0x836e, 0x836f, 0x8370, 0x8371, 0x8372, 0x8373, - 0xb1e2, 0xb1e3, 0x8374, 0x8375, 0xb1e4, 0x8376, 0x8377, 0xb1e5, - 0xb1e6, 0x8378, 0xb1e7, 0x8379, 0x837a, 0x8381, 0x8382, 0x8383, - 0xb1e8, 0xb1e9, 0x8384, 0xb1ea, 0x8385, 0xb1eb, 0xb1ec, 0x8386, - 0x8387, 0x8388, 0xb1ed, 0x8389, 0xb1ee, 0xb1ef, 0xb1f0, 0x838a, - 0xb1f1, 0x838b, 0x838c, 0x838d, 0xb1f2, 0x838e, 0xb1f3, 0x838f, - 0x8390, 0x8391, 0x8392, 0x8393, 0xb1f4, 0xb1f5, 0x8394, 0xb1f6, - 0xb1f7, 0xb1f8, 0x8395, 0x8396, 0x8397, 0xb1f9, 0x8398, 0x8399, - 0xb1fa, 0xb1fb, 0x839a, 0x839b, 0xb1fc, 0x839c, 0x839d, 0x839e, - 0xb1fd, 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, 0x83a4, 0x83a5, - 0xb1fe, 0xb2a1, 0x83a6, 0xb2a2, 0xb2a3, 0xb2a4, 0x83a7, 0x83a8, - 0x83a9, 0x83aa, 0x83ab, 0x83ac, 0xb2a5, 0xb2a6, 0x83ad, 0x83ae, - 0x83af, 0x83b0, 0x83b1, 0x83b2, 0xb2a7, 0x83b3, 0x83b4, 0x83b5, - 0x83b6, 0x83b7, 0x83b8, 0x83b9, 0x83ba, 0x83bb, 0x83bc, 0x83bd, - 0x83be, 0x83bf, 0x83c0, 0x83c1, 0x83c2, 0x83c3, 0x83c4, 0x83c5, - 0x83c6, 0x83c7, 0x83c8, 0x83c9, 0x83ca, 0x83cb, 0x83cc, 0x83cd, - 0x83ce, 0x83cf, 0x83d0, 0x83d1, 0x83d2, 0x83d3, 0x83d4, 0x83d5, - 0x83d6, 0x83d7, 0x83d8, 0x83d9, 0x83da, 0x83db, 0x83dc, 0x83dd, - 0x83de, 0x83df, 0x83e0, 0x83e1, 0xb2a8, 0xb2a9, 0xb2aa, 0x83e2, - 0xb2ab, 0x83e3, 0x83e4, 0x83e5, 0xb2ac, 0x83e6, 0x83e7, 0x83e8, - 0x83e9, 0x83ea, 0x83eb, 0x83ec, 0xb2ad, 0xb2ae, 0x83ed, 0xb2af, - 0xb2b0, 0xb2b1, 0x83ee, 0x83ef, 0x83f0, 0x83f1, 0x83f2, 0x83f3, - 0xb2b2, 0xb2b3, 0x83f4, 0x83f5, 0xb2b4, 0x83f6, 0x83f7, 0x83f8, - 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, 0x8441, 0x8442, - 0xb2b5, 0x8443, 0x8444, 0xb2b6, 0x8445, 0xb2b7, 0x8446, 0x8447, - 0x8448, 0x8449, 0x844a, 0x844b, 0xb2b8, 0x844c, 0x844d, 0x844e, - 0xb2b9, 0x844f, 0x8450, 0x8451, 0xb2ba, 0x8452, 0x8453, 0x8454, - /* 0xaf00 .. 0xafff */ - 0x8455, 0x8456, 0x8457, 0x8458, 0x8459, 0x845a, 0x8461, 0xb2bb, - 0xb2bc, 0x8462, 0x8463, 0x8464, 0x8465, 0xb2bd, 0x8466, 0x8467, - 0xb2be, 0x8468, 0x8469, 0x846a, 0x846b, 0x846c, 0x846d, 0x846e, - 0x846f, 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, - 0x8477, 0x8478, 0x8479, 0x847a, 0x8481, 0x8482, 0x8483, 0x8484, - 0x8485, 0x8486, 0x8487, 0x8488, 0xb2bf, 0xb2c0, 0x8489, 0x848a, - 0xb2c1, 0x848b, 0xb2c2, 0x848c, 0xb2c3, 0x848d, 0x848e, 0x848f, - 0x8490, 0x8491, 0x8492, 0x8493, 0xb2c4, 0xb2c5, 0x8494, 0xb2c6, - 0x8495, 0xb2c7, 0xb2c8, 0xb2c9, 0x8496, 0x8497, 0x8498, 0x8499, - 0xb2ca, 0xb2cb, 0x849a, 0x849b, 0x849c, 0x849d, 0x849e, 0x849f, - 0xb2cc, 0x84a0, 0x84a1, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, - 0x84a7, 0x84a8, 0x84a9, 0x84aa, 0xb2cd, 0xb2ce, 0x84ab, 0x84ac, - 0x84ad, 0x84ae, 0x84af, 0x84b0, 0xb2cf, 0xb2d0, 0x84b1, 0x84b2, - 0x84b3, 0x84b4, 0x84b5, 0x84b6, 0x84b7, 0x84b8, 0x84b9, 0x84ba, - 0x84bb, 0x84bc, 0x84bd, 0x84be, 0x84bf, 0x84c0, 0x84c1, 0x84c2, - 0x84c3, 0xb2d1, 0x84c4, 0x84c5, 0x84c6, 0x84c7, 0x84c8, 0x84c9, - 0xb2d2, 0x84ca, 0x84cb, 0x84cc, 0xb2d3, 0x84cd, 0x84ce, 0x84cf, - 0xb2d4, 0x84d0, 0x84d1, 0x84d2, 0x84d3, 0x84d4, 0x84d5, 0x84d6, - 0xb2d5, 0xb2d6, 0x84d7, 0x84d8, 0x84d9, 0xb2d7, 0x84da, 0x84db, - 0x84dc, 0x84dd, 0x84de, 0x84df, 0xb2d8, 0x84e0, 0x84e1, 0x84e2, - 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8, 0x84e9, 0x84ea, - 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0, 0x84f1, 0x84f2, - 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8, 0x84f9, 0x84fa, - 0xb2d9, 0xb2da, 0x84fb, 0x84fc, 0xb2db, 0x84fd, 0x84fe, 0x8541, - 0xb2dc, 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, 0xb2dd, - 0xb2de, 0xb2df, 0x8548, 0xb2e0, 0x8549, 0xb2e1, 0xb2e2, 0x854a, - 0x854b, 0x854c, 0x854d, 0x854e, 0xb2e3, 0x854f, 0x8550, 0x8551, - 0x8552, 0x8553, 0x8554, 0x8555, 0xb2e4, 0x8556, 0x8557, 0x8558, - 0x8559, 0x855a, 0x8561, 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, - 0xb2e5, 0xb2e6, 0x8567, 0x8568, 0x8569, 0x856a, 0x856b, 0x856c, - 0xb2e7, 0xb2e8, 0x856d, 0x856e, 0xb2e9, 0x856f, 0x8570, 0x8571, - 0xb2ea, 0x8572, 0x8573, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578, - /* 0xb000 .. 0xb0ff */ - 0xb2eb, 0xb2ec, 0x8579, 0x857a, 0xb2ed, 0x8581, 0x8582, 0x8583, - 0x8584, 0x8585, 0x8586, 0x8587, 0xb2ee, 0x8588, 0x8589, 0x858a, - 0xb2ef, 0x858b, 0x858c, 0x858d, 0xb2f0, 0x858e, 0x858f, 0x8590, - 0x8591, 0x8592, 0x8593, 0x8594, 0xb2f1, 0xb2f2, 0x8595, 0x8596, - 0x8597, 0x8598, 0x8599, 0x859a, 0x859b, 0x859c, 0x859d, 0x859e, - 0xb2f3, 0x859f, 0x85a0, 0x85a1, 0x85a2, 0x85a3, 0x85a4, 0x85a5, - 0x85a6, 0x85a7, 0x85a8, 0x85a9, 0x85aa, 0x85ab, 0x85ac, 0x85ad, - 0x85ae, 0x85af, 0x85b0, 0x85b1, 0x85b2, 0x85b3, 0x85b4, 0x85b5, - 0x85b6, 0x85b7, 0x85b8, 0x85b9, 0xb2f4, 0xb2f5, 0x85ba, 0x85bb, - 0xb2f6, 0x85bc, 0xb2f7, 0x85bd, 0xb2f8, 0x85be, 0xb2f9, 0x85bf, - 0x85c0, 0x85c1, 0x85c2, 0xb2fa, 0xb2fb, 0xb2fc, 0x85c3, 0xb2fd, - 0x85c4, 0xb2fe, 0x85c5, 0x85c6, 0x85c7, 0xb3a1, 0x85c8, 0x85c9, - 0x85ca, 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85cf, 0x85d0, 0x85d1, - 0x85d2, 0x85d3, 0x85d4, 0x85d5, 0x85d6, 0x85d7, 0x85d8, 0x85d9, - 0x85da, 0x85db, 0x85dc, 0x85dd, 0x85de, 0x85df, 0x85e0, 0x85e1, - 0x85e2, 0x85e3, 0x85e4, 0x85e5, 0xb3a2, 0xb3a3, 0x85e6, 0x85e7, - 0xb3a4, 0x85e8, 0x85e9, 0x85ea, 0xb3a5, 0x85eb, 0x85ec, 0x85ed, - 0x85ee, 0x85ef, 0x85f0, 0x85f1, 0xb3a6, 0xb3a7, 0x85f2, 0xb3a8, - 0x85f3, 0xb3a9, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8, 0x85f9, - 0xb3aa, 0xb3ab, 0xb3ac, 0x85fa, 0xb3ad, 0x85fb, 0x85fc, 0xb3ae, - 0xb3af, 0xb3b0, 0xb3b1, 0x85fd, 0x85fe, 0x8641, 0x8642, 0x8643, - 0xb3b2, 0xb3b3, 0x8644, 0xb3b4, 0xb3b5, 0xb3b6, 0xb3b7, 0xb3b8, - 0x8645, 0xb3b9, 0x8646, 0xb3ba, 0xb3bb, 0xb3bc, 0x8647, 0x8648, - 0xb3bd, 0x8649, 0x864a, 0x864b, 0xb3be, 0x864c, 0x864d, 0x864e, - 0x864f, 0x8650, 0x8651, 0x8652, 0xb3bf, 0xb3c0, 0x8653, 0xb3c1, - 0xb3c2, 0xb3c3, 0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, - 0xb3c4, 0xb3c5, 0x865a, 0x8661, 0xb3c6, 0x8662, 0x8663, 0x8664, - 0xb3c7, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a, 0x866b, - 0xb3c8, 0x866c, 0x866d, 0x866e, 0x866f, 0xb3c9, 0x8670, 0x8671, - 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8679, - 0x867a, 0x8681, 0x8682, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, - 0x8688, 0x8689, 0x868a, 0x868b, 0x868c, 0x868d, 0x868e, 0x868f, - /* 0xb100 .. 0xb1ff */ - 0x8690, 0x8691, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, 0x8697, - 0xb3ca, 0xb3cb, 0x8698, 0xb3cc, 0xb3cd, 0x8699, 0x869a, 0x869b, - 0xb3ce, 0x869c, 0xb3cf, 0xb3d0, 0x869d, 0x869e, 0x869f, 0x86a0, - 0xb3d1, 0xb3d2, 0x86a1, 0xb3d3, 0xb3d4, 0xb3d5, 0x86a2, 0x86a3, - 0x86a4, 0x86a5, 0x86a6, 0xb3d6, 0xb3d7, 0xb3d8, 0x86a7, 0x86a8, - 0xb3d9, 0x86a9, 0x86aa, 0x86ab, 0xb3da, 0x86ac, 0x86ad, 0x86ae, - 0x86af, 0x86b0, 0x86b1, 0x86b2, 0xb3db, 0xb3dc, 0x86b3, 0xb3dd, - 0xb3de, 0xb3df, 0x86b4, 0x86b5, 0x86b6, 0x86b7, 0x86b8, 0x86b9, - 0xb3e0, 0xb3e1, 0x86ba, 0x86bb, 0xb3e2, 0x86bc, 0x86bd, 0x86be, - 0xb3e3, 0x86bf, 0x86c0, 0x86c1, 0x86c2, 0x86c3, 0x86c4, 0x86c5, - 0xb3e4, 0xb3e5, 0x86c6, 0x86c7, 0xb3e6, 0xb3e7, 0x86c8, 0x86c9, - 0xb3e8, 0x86ca, 0x86cb, 0x86cc, 0xb3e9, 0x86cd, 0x86ce, 0x86cf, - 0xb3ea, 0x86d0, 0x86d1, 0x86d2, 0x86d3, 0x86d4, 0x86d5, 0x86d6, - 0x86d7, 0x86d8, 0x86d9, 0x86da, 0x86db, 0x86dc, 0x86dd, 0x86de, - 0x86df, 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e4, 0x86e5, 0x86e6, - 0xb3eb, 0xb3ec, 0x86e7, 0x86e8, 0xb3ed, 0x86e9, 0x86ea, 0x86eb, - 0xb3ee, 0x86ec, 0xb3ef, 0x86ed, 0x86ee, 0x86ef, 0x86f0, 0x86f1, - 0xb3f0, 0xb3f1, 0x86f2, 0xb3f2, 0x86f3, 0xb3f3, 0x86f4, 0x86f5, - 0x86f6, 0x86f7, 0xb3f4, 0xb3f5, 0xb3f6, 0x86f8, 0x86f9, 0x86fa, - 0xb3f7, 0x86fb, 0x86fc, 0x86fd, 0xb3f8, 0x86fe, 0x8741, 0x8742, - 0x8743, 0x8744, 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, - 0xb3f9, 0x874b, 0x874c, 0x874d, 0x874e, 0x874f, 0x8750, 0x8751, - 0x8752, 0x8753, 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, - 0x875a, 0x8761, 0x8762, 0x8763, 0x8764, 0x8765, 0x8766, 0x8767, - 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, 0x876d, 0x876e, 0x876f, - 0x8770, 0x8771, 0x8772, 0x8773, 0xb3fa, 0x8774, 0x8775, 0x8776, - 0xb3fb, 0x8777, 0x8778, 0x8779, 0xb3fc, 0x877a, 0x8781, 0x8782, - 0x8783, 0x8784, 0x8785, 0x8786, 0xb3fd, 0xb3fe, 0x8787, 0xb4a1, - 0x8788, 0x8789, 0x878a, 0x878b, 0x878c, 0x878d, 0x878e, 0x878f, - 0xb4a2, 0xb4a3, 0x8790, 0x8791, 0xb4a4, 0x8792, 0x8793, 0x8794, - 0xb4a5, 0x8795, 0x8796, 0x8797, 0x8798, 0x8799, 0x879a, 0x879b, - 0x879c, 0xb4a6, 0x879d, 0xb4a7, 0x879e, 0xb4a8, 0x879f, 0x87a0, - /* 0xb200 .. 0xb2ff */ - 0x87a1, 0x87a2, 0x87a3, 0x87a4, 0xb4a9, 0xb4aa, 0x87a5, 0x87a6, - 0xb4ab, 0x87a7, 0x87a8, 0xb4ac, 0xb4ad, 0x87a9, 0x87aa, 0x87ab, - 0x87ac, 0x87ad, 0x87ae, 0x87af, 0xb4ae, 0xb4af, 0x87b0, 0xb4b0, - 0x87b1, 0xb4b1, 0x87b2, 0x87b3, 0x87b4, 0x87b5, 0x87b6, 0x87b7, - 0xb4b2, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0x87bc, 0x87bd, 0x87be, - 0x87bf, 0x87c0, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c6, - 0x87c7, 0x87c8, 0x87c9, 0x87ca, 0xb4b3, 0x87cb, 0x87cc, 0x87cd, - 0x87ce, 0x87cf, 0x87d0, 0x87d1, 0xb4b4, 0x87d2, 0x87d3, 0x87d4, - 0x87d5, 0x87d6, 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87db, 0x87dc, - 0x87dd, 0x87de, 0x87df, 0x87e0, 0x87e1, 0x87e2, 0x87e3, 0x87e4, - 0x87e5, 0x87e6, 0x87e7, 0x87e8, 0x87e9, 0x87ea, 0x87eb, 0x87ec, - 0xb4b5, 0x87ed, 0x87ee, 0x87ef, 0xb4b6, 0x87f0, 0x87f1, 0x87f2, - 0xb4b7, 0x87f3, 0x87f4, 0x87f5, 0x87f6, 0x87f7, 0x87f8, 0x87f9, - 0xb4b8, 0xb4b9, 0x87fa, 0x87fb, 0x87fc, 0x87fd, 0x87fe, 0x8841, - 0x8842, 0x8843, 0x8844, 0x8845, 0xb4ba, 0xb4bb, 0x8846, 0x8847, - 0x8848, 0x8849, 0x884a, 0x884b, 0xb4bc, 0x884c, 0x884d, 0x884e, - 0x884f, 0x8850, 0x8851, 0x8852, 0xb4bd, 0xb4be, 0x8853, 0x8854, - 0x8855, 0xb4bf, 0x8856, 0x8857, 0x8858, 0x8859, 0x885a, 0x8861, - 0xb4c0, 0xb4c1, 0x8862, 0x8863, 0xb4c2, 0x8864, 0x8865, 0x8866, - 0xb4c3, 0xb4c4, 0xb4c5, 0x8867, 0x8868, 0x8869, 0x886a, 0x886b, - 0xb4c6, 0xb4c7, 0x886c, 0xb4c8, 0x886d, 0xb4c9, 0xb4ca, 0x886e, - 0x886f, 0x8870, 0xb4cb, 0x8871, 0xb4cc, 0x8872, 0x8873, 0x8874, - 0xb4cd, 0x8875, 0x8876, 0x8877, 0xb4ce, 0x8878, 0x8879, 0x887a, - 0x8881, 0x8882, 0x8883, 0x8884, 0x8885, 0x8886, 0x8887, 0x8888, - 0x8889, 0x888a, 0x888b, 0x888c, 0x888d, 0x888e, 0x888f, 0x8890, - 0xb4cf, 0xb4d0, 0x8891, 0x8892, 0xb4d1, 0x8893, 0x8894, 0x8895, - 0xb4d2, 0x8896, 0xb4d3, 0x8897, 0x8898, 0x8899, 0x889a, 0x889b, - 0xb4d4, 0xb4d5, 0x889c, 0xb4d6, 0x889d, 0xb4d7, 0x889e, 0x889f, - 0x88a0, 0x88a1, 0xb4d8, 0x88a2, 0xb4d9, 0xb4da, 0xb4db, 0x88a3, - 0xb4dc, 0x88a4, 0x88a5, 0xb4dd, 0xb4de, 0xb4df, 0xb4e0, 0xb4e1, - 0x88a6, 0x88a7, 0x88a8, 0xb4e2, 0xb4e3, 0xb4e4, 0x88a9, 0xb4e5, - 0xb4e6, 0xb4e7, 0xb4e8, 0xb4e9, 0x88aa, 0x88ab, 0x88ac, 0xb4ea, - /* 0xb300 .. 0xb3ff */ - 0xb4eb, 0xb4ec, 0x88ad, 0x88ae, 0xb4ed, 0x88af, 0x88b0, 0x88b1, - 0xb4ee, 0x88b2, 0x88b3, 0x88b4, 0x88b5, 0x88b6, 0x88b7, 0x88b8, - 0xb4ef, 0xb4f0, 0x88b9, 0xb4f1, 0xb4f2, 0xb4f3, 0x88ba, 0x88bb, - 0x88bc, 0x88bd, 0x88be, 0x88bf, 0xb4f4, 0x88c0, 0x88c1, 0x88c2, - 0x88c3, 0x88c4, 0x88c5, 0x88c6, 0x88c7, 0x88c8, 0x88c9, 0x88ca, - 0x88cb, 0x88cc, 0x88cd, 0x88ce, 0x88cf, 0x88d0, 0x88d1, 0x88d2, - 0x88d3, 0x88d4, 0x88d5, 0x88d6, 0x88d7, 0x88d8, 0x88d9, 0x88da, - 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88df, 0x88e0, 0x88e1, 0x88e2, - 0x88e3, 0x88e4, 0x88e5, 0x88e6, 0x88e7, 0x88e8, 0x88e9, 0x88ea, - 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f0, 0x88f1, 0x88f2, - 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0xb4f5, 0xb4f6, 0xb4f7, 0x88f7, - 0xb4f8, 0x88f8, 0x88f9, 0xb4f9, 0xb4fa, 0x88fa, 0xb4fb, 0xb4fc, - 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0xb4fd, 0xb4fe, 0x8941, 0xb5a1, - 0x8942, 0xb5a2, 0x8943, 0xb5a3, 0x8944, 0x8945, 0xb5a4, 0x8946, - 0xb5a5, 0xb5a6, 0x8947, 0x8948, 0xb5a7, 0x8949, 0x894a, 0x894b, - 0xb5a8, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, 0x8952, - 0xb5a9, 0xb5aa, 0x8953, 0xb5ab, 0xb5ac, 0xb5ad, 0x8954, 0x8955, - 0x8956, 0x8957, 0x8958, 0x8959, 0xb5ae, 0x895a, 0x8961, 0x8962, - 0xb5af, 0x8963, 0x8964, 0x8965, 0xb5b0, 0x8966, 0x8967, 0x8968, - 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, 0x8970, - 0xb5b1, 0xb5b2, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0x8976, - 0xb5b3, 0x8977, 0x8978, 0x8979, 0xb5b4, 0x897a, 0x8981, 0x8982, - 0x8983, 0x8984, 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898a, - 0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992, - 0x8993, 0x8994, 0x8995, 0x8996, 0xb5b5, 0xb5b6, 0x8997, 0x8998, - 0xb5b7, 0x8999, 0x899a, 0xb5b8, 0xb5b9, 0x899b, 0xb5ba, 0x899c, - 0xb5bb, 0x899d, 0x899e, 0x899f, 0xb5bc, 0xb5bd, 0x89a0, 0xb5be, - 0x89a1, 0xb5bf, 0x89a2, 0xb5c0, 0x89a3, 0xb5c1, 0x89a4, 0x89a5, - 0xb5c2, 0x89a6, 0x89a7, 0x89a8, 0xb5c3, 0x89a9, 0x89aa, 0x89ab, - 0xb5c4, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1, 0x89b2, - 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9, 0x89ba, - 0x89bb, 0x89bc, 0x89bd, 0x89be, 0xb5c5, 0x89bf, 0x89c0, 0x89c1, - /* 0xb400 .. 0xb4ff */ - 0x89c2, 0x89c3, 0x89c4, 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, - 0x89ca, 0x89cb, 0x89cc, 0x89cd, 0x89ce, 0x89cf, 0x89d0, 0x89d1, - 0xb5c6, 0x89d2, 0x89d3, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8, - 0xb5c7, 0x89d9, 0x89da, 0x89db, 0xb5c8, 0x89dc, 0x89dd, 0x89de, - 0xb5c9, 0x89df, 0x89e0, 0x89e1, 0x89e2, 0x89e3, 0x89e4, 0x89e5, - 0xb5ca, 0xb5cb, 0x89e6, 0xb5cc, 0x89e7, 0x89e8, 0x89e9, 0x89ea, - 0x89eb, 0x89ec, 0x89ed, 0x89ee, 0xb5cd, 0x89ef, 0x89f0, 0x89f1, - 0x89f2, 0x89f3, 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, - 0x89fa, 0x89fb, 0x89fc, 0x89fd, 0x89fe, 0x8a41, 0x8a42, 0x8a43, - 0x8a44, 0x8a45, 0x8a46, 0x8a47, 0x8a48, 0x8a49, 0x8a4a, 0x8a4b, - 0xb5ce, 0xb5cf, 0x8a4c, 0x8a4d, 0xb5d0, 0x8a4e, 0x8a4f, 0x8a50, - 0xb5d1, 0x8a51, 0x8a52, 0x8a53, 0x8a54, 0x8a55, 0x8a56, 0x8a57, - 0xb5d2, 0xb5d3, 0x8a58, 0xb5d4, 0x8a59, 0xb5d5, 0x8a5a, 0x8a61, - 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0xb5d6, 0x8a66, 0x8a67, 0x8a68, - 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, 0x8a70, - 0x8a71, 0x8a72, 0x8a73, 0x8a74, 0x8a75, 0x8a76, 0x8a77, 0x8a78, - 0xb5d7, 0x8a79, 0x8a7a, 0x8a81, 0x8a82, 0x8a83, 0x8a84, 0x8a85, - 0xb5d8, 0x8a86, 0x8a87, 0x8a88, 0x8a89, 0x8a8a, 0x8a8b, 0x8a8c, - 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94, - 0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0xb5d9, 0x8a9a, 0x8a9b, - 0x8a9c, 0x8a9d, 0x8a9e, 0x8a9f, 0xb5da, 0x8aa0, 0x8aa1, 0x8aa2, - 0xb5db, 0x8aa3, 0x8aa4, 0x8aa5, 0xb5dc, 0x8aa6, 0x8aa7, 0x8aa8, - 0x8aa9, 0x8aaa, 0x8aab, 0x8aac, 0x8aad, 0xb5dd, 0x8aae, 0xb5de, - 0x8aaf, 0xb5df, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, 0x8ab5, - 0xb5e0, 0x8ab6, 0x8ab7, 0x8ab8, 0xb5e1, 0x8ab9, 0x8aba, 0x8abb, - 0xb5e2, 0x8abc, 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, - 0xb5e3, 0x8ac3, 0x8ac4, 0x8ac5, 0x8ac6, 0xb5e4, 0x8ac7, 0x8ac8, - 0x8ac9, 0x8aca, 0x8acb, 0x8acc, 0xb5e5, 0xb5e6, 0x8acd, 0x8ace, - 0xb5e7, 0x8acf, 0x8ad0, 0xb5e8, 0xb5e9, 0x8ad1, 0xb5ea, 0x8ad2, - 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0xb5eb, 0xb5ec, 0x8ad7, 0xb5ed, - 0x8ad8, 0xb5ee, 0x8ad9, 0x8ada, 0x8adb, 0x8adc, 0x8add, 0x8ade, - 0xb5ef, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3, 0x8ae4, 0x8ae5, - /* 0xb500 .. 0xb5ff */ - 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, 0x8aec, 0x8aed, - 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, 0x8af5, - 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0xb5f0, 0xb5f1, 0x8afa, 0x8afb, - 0xb5f2, 0x8afc, 0x8afd, 0xb5f3, 0xb5f4, 0x8afe, 0x8b41, 0x8b42, - 0x8b43, 0x8b44, 0x8b45, 0x8b46, 0xb5f5, 0xb5f6, 0x8b47, 0xb5f7, - 0xb5f8, 0xb5f9, 0xb5fa, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, - 0xb5fb, 0xb5fc, 0x8b4d, 0x8b4e, 0xb5fd, 0x8b4f, 0x8b50, 0x8b51, - 0xb5fe, 0x8b52, 0x8b53, 0x8b54, 0x8b55, 0x8b56, 0x8b57, 0x8b58, - 0xb6a1, 0xb6a2, 0x8b59, 0xb6a3, 0xb6a4, 0xb6a5, 0x8b5a, 0x8b61, - 0x8b62, 0x8b63, 0x8b64, 0xb6a6, 0xb6a7, 0xb6a8, 0x8b65, 0x8b66, - 0xb6a9, 0x8b67, 0x8b68, 0x8b69, 0xb6aa, 0x8b6a, 0x8b6b, 0x8b6c, - 0x8b6d, 0x8b6e, 0x8b6f, 0x8b70, 0xb6ab, 0xb6ac, 0x8b71, 0xb6ad, - 0xb6ae, 0xb6af, 0x8b72, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, - 0x8b78, 0x8b79, 0x8b7a, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, - 0x8b86, 0x8b87, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, - 0x8b8e, 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, - 0x8b96, 0x8b97, 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, - 0x8b9e, 0x8b9f, 0x8ba0, 0x8ba1, 0x8ba2, 0x8ba3, 0x8ba4, 0x8ba5, - 0x8ba6, 0x8ba7, 0x8ba8, 0x8ba9, 0x8baa, 0x8bab, 0x8bac, 0x8bad, - 0x8bae, 0x8baf, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, - 0xb6b0, 0xb6b1, 0x8bb6, 0x8bb7, 0xb6b2, 0x8bb8, 0x8bb9, 0x8bba, - 0xb6b3, 0x8bbb, 0xb6b4, 0xb6b5, 0x8bbc, 0x8bbd, 0x8bbe, 0x8bbf, - 0xb6b6, 0xb6b7, 0x8bc0, 0xb6b8, 0xb6b9, 0xb6ba, 0x8bc1, 0x8bc2, - 0x8bc3, 0x8bc4, 0x8bc5, 0xb6bb, 0xb6bc, 0xb6bd, 0x8bc6, 0x8bc7, - 0xb6be, 0x8bc8, 0x8bc9, 0x8bca, 0xb6bf, 0x8bcb, 0x8bcc, 0x8bcd, - 0x8bce, 0x8bcf, 0x8bd0, 0x8bd1, 0xb6c0, 0xb6c1, 0x8bd2, 0xb6c2, - 0xb6c3, 0xb6c4, 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, 0x8bd7, 0x8bd8, - 0xb6c5, 0x8bd9, 0x8bda, 0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, 0x8bdf, - 0x8be0, 0x8be1, 0x8be2, 0x8be3, 0x8be4, 0x8be5, 0x8be6, 0x8be7, - 0x8be8, 0x8be9, 0x8bea, 0x8beb, 0xb6c6, 0x8bec, 0x8bed, 0x8bee, - 0x8bef, 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, - 0x8bf7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, - /* 0xb600 .. 0xb6ff */ - 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, 0x8c48, - 0x8c49, 0x8c4a, 0x8c4b, 0x8c4c, 0x8c4d, 0x8c4e, 0x8c4f, 0x8c50, - 0xb6c7, 0xb6c8, 0x8c51, 0x8c52, 0xb6c9, 0x8c53, 0x8c54, 0x8c55, - 0xb6ca, 0x8c56, 0x8c57, 0x8c58, 0x8c59, 0x8c5a, 0x8c61, 0x8c62, - 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, 0xb6cb, 0x8c68, 0x8c69, - 0x8c6a, 0x8c6b, 0x8c6c, 0x8c6d, 0xb6cc, 0x8c6e, 0x8c6f, 0x8c70, - 0x8c71, 0x8c72, 0x8c73, 0x8c74, 0xb6cd, 0x8c75, 0x8c76, 0x8c77, - 0x8c78, 0x8c79, 0x8c7a, 0x8c81, 0x8c82, 0x8c83, 0x8c84, 0x8c85, - 0x8c86, 0x8c87, 0x8c88, 0x8c89, 0x8c8a, 0x8c8b, 0x8c8c, 0x8c8d, - 0xb6ce, 0x8c8e, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93, 0x8c94, - 0x8c95, 0x8c96, 0x8c97, 0x8c98, 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, - 0x8c9d, 0x8c9e, 0x8c9f, 0x8ca0, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, - 0x8ca5, 0x8ca6, 0x8ca7, 0x8ca8, 0xb6cf, 0x8ca9, 0x8caa, 0x8cab, - 0xb6d0, 0x8cac, 0x8cad, 0x8cae, 0x8caf, 0x8cb0, 0x8cb1, 0x8cb2, - 0x8cb3, 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0x8cb8, 0x8cb9, 0x8cba, - 0x8cbb, 0x8cbc, 0x8cbd, 0x8cbe, 0x8cbf, 0x8cc0, 0x8cc1, 0x8cc2, - 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc6, 0x8cc7, 0x8cc8, 0x8cc9, 0x8cca, - 0x8ccb, 0x8ccc, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, 0x8cd1, 0x8cd2, - 0x8cd3, 0x8cd4, 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, - 0x8cdb, 0x8cdc, 0x8cdd, 0x8cde, 0xb6d1, 0xb6d2, 0x8cdf, 0x8ce0, - 0xb6d3, 0x8ce1, 0x8ce2, 0x8ce3, 0xb6d4, 0x8ce4, 0x8ce5, 0x8ce6, - 0x8ce7, 0x8ce8, 0x8ce9, 0xb6d5, 0xb6d6, 0x8cea, 0x8ceb, 0x8cec, - 0x8ced, 0xb6d7, 0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf2, 0x8cf3, - 0x8cf4, 0x8cf5, 0x8cf6, 0x8cf7, 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, - 0x8cfc, 0x8cfd, 0x8cfe, 0x8d41, 0x8d42, 0x8d43, 0x8d44, 0x8d45, - 0x8d46, 0x8d47, 0x8d48, 0x8d49, 0x8d4a, 0x8d4b, 0x8d4c, 0x8d4d, - 0x8d4e, 0x8d4f, 0x8d50, 0x8d51, 0xb6d8, 0x8d52, 0x8d53, 0x8d54, - 0x8d55, 0x8d56, 0x8d57, 0x8d58, 0x8d59, 0x8d5a, 0x8d61, 0x8d62, - 0x8d63, 0x8d64, 0x8d65, 0x8d66, 0x8d67, 0x8d68, 0x8d69, 0x8d6a, - 0x8d6b, 0x8d6c, 0x8d6d, 0x8d6e, 0x8d6f, 0x8d70, 0x8d71, 0x8d72, - 0xb6d9, 0x8d73, 0x8d74, 0x8d75, 0xb6da, 0x8d76, 0x8d77, 0x8d78, - 0xb6db, 0x8d79, 0x8d7a, 0x8d81, 0x8d82, 0x8d83, 0x8d84, 0x8d85, - /* 0xb700 .. 0xb7ff */ - 0xb6dc, 0xb6dd, 0x8d86, 0x8d87, 0x8d88, 0xb6de, 0x8d89, 0x8d8a, - 0x8d8b, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f, 0x8d90, 0x8d91, 0x8d92, - 0x8d93, 0x8d94, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99, 0x8d9a, - 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8d9f, 0x8da0, 0x8da1, 0x8da2, - 0x8da3, 0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, - 0xb6df, 0xb6e0, 0x8dab, 0x8dac, 0xb6e1, 0x8dad, 0x8dae, 0xb6e2, - 0xb6e3, 0x8daf, 0x8db0, 0x8db1, 0x8db2, 0x8db3, 0x8db4, 0x8db5, - 0xb6e4, 0xb6e5, 0x8db6, 0xb6e6, 0x8db7, 0x8db8, 0x8db9, 0x8dba, - 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0xb6e7, 0x8dbf, 0x8dc0, 0x8dc1, - 0xb6e8, 0x8dc2, 0x8dc3, 0x8dc4, 0xb6e9, 0x8dc5, 0x8dc6, 0x8dc7, - 0x8dc8, 0x8dc9, 0x8dca, 0x8dcb, 0xb6ea, 0xb6eb, 0x8dcc, 0x8dcd, - 0x8dce, 0x8dcf, 0x8dd0, 0x8dd1, 0x8dd2, 0x8dd3, 0x8dd4, 0x8dd5, - 0xb6ec, 0x8dd6, 0x8dd7, 0x8dd8, 0xb6ed, 0x8dd9, 0x8dda, 0x8ddb, - 0xb6ee, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, 0x8de1, 0x8de2, - 0xb6ef, 0xb6f0, 0x8de3, 0xb6f1, 0x8de4, 0xb6f2, 0x8de5, 0x8de6, - 0x8de7, 0x8de8, 0x8de9, 0x8dea, 0xb6f3, 0xb6f4, 0x8deb, 0x8dec, - 0xb6f5, 0x8ded, 0x8dee, 0x8def, 0xb6f6, 0x8df0, 0x8df1, 0x8df2, - 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0xb6f7, 0xb6f8, 0x8df7, 0xb6f9, - 0xb6fa, 0xb6fb, 0xb6fc, 0x8df8, 0x8df9, 0x8dfa, 0xb6fd, 0xb6fe, - 0xb7a1, 0xb7a2, 0x8dfb, 0x8dfc, 0xb7a3, 0x8dfd, 0x8dfe, 0x8e41, - 0xb7a4, 0x8e42, 0x8e43, 0x8e44, 0x8e45, 0x8e46, 0x8e47, 0x8e48, - 0xb7a5, 0xb7a6, 0x8e49, 0xb7a7, 0xb7a8, 0xb7a9, 0x8e4a, 0x8e4b, - 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0xb7aa, 0xb7ab, 0x8e50, 0x8e51, - 0xb7ac, 0x8e52, 0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, - 0x8e59, 0x8e5a, 0x8e61, 0x8e62, 0x8e63, 0x8e64, 0x8e65, 0xb7ad, - 0x8e66, 0xb7ae, 0x8e67, 0x8e68, 0x8e69, 0x8e6a, 0x8e6b, 0x8e6c, - 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e72, 0x8e73, 0x8e74, - 0x8e75, 0x8e76, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e81, 0x8e82, - 0x8e83, 0x8e84, 0x8e85, 0x8e86, 0x8e87, 0x8e88, 0x8e89, 0x8e8a, - 0x8e8b, 0x8e8c, 0x8e8d, 0x8e8e, 0xb7af, 0xb7b0, 0x8e8f, 0x8e90, - 0xb7b1, 0x8e91, 0x8e92, 0x8e93, 0xb7b2, 0x8e94, 0x8e95, 0x8e96, - 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0xb7b3, 0xb7b4, 0x8e9b, 0xb7b5, - /* 0xb800 .. 0xb8ff */ - 0xb7b6, 0xb7b7, 0x8e9c, 0x8e9d, 0x8e9e, 0x8e9f, 0x8ea0, 0xb7b8, - 0xb7b9, 0xb7ba, 0x8ea1, 0x8ea2, 0xb7bb, 0x8ea3, 0x8ea4, 0x8ea5, - 0xb7bc, 0x8ea6, 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8eab, 0x8eac, - 0xb7bd, 0xb7be, 0x8ead, 0xb7bf, 0x8eae, 0xb7c0, 0x8eaf, 0x8eb0, - 0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, 0xb7c1, 0xb7c2, 0x8eb5, 0x8eb6, - 0xb7c3, 0x8eb7, 0x8eb8, 0x8eb9, 0xb7c4, 0x8eba, 0x8ebb, 0x8ebc, - 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0xb7c5, 0xb7c6, 0x8ec1, 0xb7c7, - 0xb7c8, 0xb7c9, 0x8ec2, 0x8ec3, 0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, - 0xb7ca, 0x8ec8, 0x8ec9, 0x8eca, 0xb7cb, 0x8ecb, 0x8ecc, 0x8ecd, - 0x8ece, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4, 0x8ed5, - 0x8ed6, 0xb7cc, 0x8ed7, 0xb7cd, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, - 0x8edc, 0x8edd, 0x8ede, 0x8edf, 0xb7ce, 0xb7cf, 0x8ee0, 0x8ee1, - 0xb7d0, 0x8ee2, 0x8ee3, 0x8ee4, 0xb7d1, 0x8ee5, 0x8ee6, 0x8ee7, - 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0xb7d2, 0xb7d3, 0x8eec, 0xb7d4, - 0x8eed, 0xb7d5, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, - 0xb7d6, 0x8ef4, 0x8ef5, 0x8ef6, 0xb7d7, 0x8ef7, 0x8ef8, 0x8ef9, - 0x8efa, 0x8efb, 0x8efc, 0x8efd, 0x8efe, 0x8f41, 0x8f42, 0x8f43, - 0x8f44, 0x8f45, 0x8f46, 0x8f47, 0x8f48, 0xb7d8, 0x8f49, 0x8f4a, - 0x8f4b, 0x8f4c, 0x8f4d, 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, - 0x8f53, 0x8f54, 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, - 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0x8f65, 0x8f66, 0x8f67, 0x8f68, - 0xb7d9, 0x8f69, 0x8f6a, 0x8f6b, 0x8f6c, 0x8f6d, 0x8f6e, 0x8f6f, - 0xb7da, 0x8f70, 0x8f71, 0x8f72, 0xb7db, 0x8f73, 0x8f74, 0x8f75, - 0xb7dc, 0x8f76, 0x8f77, 0x8f78, 0x8f79, 0x8f7a, 0x8f81, 0x8f82, - 0xb7dd, 0xb7de, 0x8f83, 0xb7df, 0x8f84, 0xb7e0, 0x8f85, 0x8f86, - 0x8f87, 0x8f88, 0x8f89, 0x8f8a, 0xb7e1, 0x8f8b, 0x8f8c, 0x8f8d, - 0xb7e2, 0x8f8e, 0x8f8f, 0x8f90, 0xb7e3, 0x8f91, 0x8f92, 0x8f93, - 0x8f94, 0x8f95, 0x8f96, 0x8f97, 0x8f98, 0xb7e4, 0x8f99, 0xb7e5, - 0x8f9a, 0xb7e6, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e, 0x8f9f, 0x8fa0, - 0xb7e7, 0xb7e8, 0x8fa1, 0x8fa2, 0xb7e9, 0x8fa3, 0x8fa4, 0x8fa5, - 0xb7ea, 0x8fa6, 0x8fa7, 0x8fa8, 0x8fa9, 0x8faa, 0x8fab, 0x8fac, - 0xb7eb, 0xb7ec, 0x8fad, 0xb7ed, 0x8fae, 0xb7ee, 0x8faf, 0x8fb0, - /* 0xb900 .. 0xb9ff */ - 0x8fb1, 0x8fb2, 0x8fb3, 0x8fb4, 0xb7ef, 0x8fb5, 0x8fb6, 0x8fb7, - 0x8fb8, 0x8fb9, 0x8fba, 0x8fbb, 0x8fbc, 0x8fbd, 0x8fbe, 0x8fbf, - 0x8fc0, 0x8fc1, 0x8fc2, 0x8fc3, 0x8fc4, 0x8fc5, 0x8fc6, 0x8fc7, - 0xb7f0, 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fce, - 0xb7f1, 0x8fcf, 0x8fd0, 0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, - 0x8fd6, 0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0x8fdb, 0x8fdc, 0x8fdd, - 0x8fde, 0x8fdf, 0x8fe0, 0x8fe1, 0x8fe2, 0x8fe3, 0x8fe4, 0x8fe5, - 0x8fe6, 0x8fe7, 0x8fe8, 0x8fe9, 0xb7f2, 0xb7f3, 0x8fea, 0x8feb, - 0xb7f4, 0x8fec, 0x8fed, 0x8fee, 0xb7f5, 0x8fef, 0x8ff0, 0x8ff1, - 0x8ff2, 0x8ff3, 0x8ff4, 0x8ff5, 0xb7f6, 0x8ff6, 0x8ff7, 0xb7f7, - 0x8ff8, 0xb7f8, 0x8ff9, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffd, 0x8ffe, - 0xb7f9, 0xb7fa, 0x9041, 0x9042, 0xb7fb, 0x9043, 0x9044, 0x9045, - 0xb7fc, 0x9046, 0x9047, 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, - 0xb7fd, 0xb7fe, 0x904d, 0xb8a1, 0x904e, 0xb8a2, 0x904f, 0x9050, - 0x9051, 0x9052, 0x9053, 0x9054, 0xb8a3, 0xb8a4, 0x9055, 0x9056, - 0xb8a5, 0x9057, 0x9058, 0x9059, 0xb8a6, 0x905a, 0x9061, 0x9062, - 0x9063, 0x9064, 0x9065, 0x9066, 0xb8a7, 0xb8a8, 0x9067, 0xb8a9, - 0x9068, 0xb8aa, 0xb8ab, 0x9069, 0x906a, 0xb8ac, 0xb8ad, 0x906b, - 0x906c, 0x906d, 0x906e, 0x906f, 0x9070, 0x9071, 0x9072, 0x9073, - 0x9074, 0x9075, 0x9076, 0x9077, 0x9078, 0x9079, 0x907a, 0x9081, - 0x9082, 0x9083, 0x9084, 0x9085, 0x9086, 0x9087, 0x9088, 0x9089, - 0x908a, 0x908b, 0x908c, 0x908d, 0xb8ae, 0xb8af, 0x908e, 0x908f, - 0xb8b0, 0x9090, 0x9091, 0x9092, 0xb8b1, 0x9093, 0x9094, 0x9095, - 0x9096, 0x9097, 0x9098, 0x9099, 0xb8b2, 0xb8b3, 0x909a, 0xb8b4, - 0x909b, 0xb8b5, 0x909c, 0x909d, 0x909e, 0x909f, 0x90a0, 0x90a1, - 0xb8b6, 0xb8b7, 0x90a2, 0x90a3, 0xb8b8, 0x90a4, 0xb8b9, 0xb8ba, - 0xb8bb, 0xb8bc, 0xb8bd, 0x90a5, 0x90a6, 0x90a7, 0x90a8, 0x90a9, - 0xb8be, 0xb8bf, 0x90aa, 0xb8c0, 0x90ab, 0xb8c1, 0xb8c2, 0x90ac, - 0x90ad, 0xb8c3, 0x90ae, 0xb8c4, 0xb8c5, 0xb8c6, 0x90af, 0x90b0, - 0xb8c7, 0x90b1, 0x90b2, 0x90b3, 0xb8c8, 0x90b4, 0x90b5, 0x90b6, - 0x90b7, 0x90b8, 0x90b9, 0x90ba, 0xb8c9, 0xb8ca, 0x90bb, 0xb8cb, - 0xb8cc, 0xb8cd, 0xb8ce, 0x90bc, 0x90bd, 0x90be, 0x90bf, 0x90c0, - /* 0xba00 .. 0xbaff */ - 0xb8cf, 0xb8d0, 0x90c1, 0x90c2, 0x90c3, 0x90c4, 0x90c5, 0x90c6, - 0xb8d1, 0x90c7, 0x90c8, 0x90c9, 0x90ca, 0x90cb, 0x90cc, 0x90cd, - 0x90ce, 0x90cf, 0x90d0, 0x90d1, 0x90d2, 0xb8d2, 0x90d3, 0x90d4, - 0x90d5, 0x90d6, 0x90d7, 0x90d8, 0x90d9, 0x90da, 0x90db, 0x90dc, - 0x90dd, 0x90de, 0x90df, 0x90e0, 0x90e1, 0x90e2, 0x90e3, 0x90e4, - 0x90e5, 0x90e6, 0x90e7, 0x90e8, 0x90e9, 0x90ea, 0x90eb, 0x90ec, - 0x90ed, 0x90ee, 0x90ef, 0x90f0, 0x90f1, 0x90f2, 0x90f3, 0x90f4, - 0xb8d3, 0xb8d4, 0x90f5, 0x90f6, 0xb8d5, 0x90f7, 0x90f8, 0x90f9, - 0xb8d6, 0x90fa, 0xb8d7, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9141, - 0xb8d8, 0xb8d9, 0x9142, 0xb8da, 0x9143, 0xb8db, 0xb8dc, 0x9144, - 0x9145, 0x9146, 0x9147, 0xb8dd, 0xb8de, 0xb8df, 0x9148, 0x9149, - 0xb8e0, 0x914a, 0x914b, 0x914c, 0xb8e1, 0x914d, 0x914e, 0x914f, - 0x9150, 0x9151, 0x9152, 0x9153, 0xb8e2, 0xb8e3, 0x9154, 0xb8e4, - 0xb8e5, 0xb8e6, 0x9155, 0x9156, 0x9157, 0x9158, 0x9159, 0x915a, - 0xb8e7, 0xb8e8, 0x9161, 0x9162, 0xb8e9, 0x9163, 0x9164, 0x9165, - 0xb8ea, 0x9166, 0x9167, 0x9168, 0x9169, 0x916a, 0x916b, 0x916c, - 0x916d, 0x916e, 0x916f, 0xb8eb, 0xb8ec, 0xb8ed, 0x9170, 0xb8ee, - 0x9171, 0x9172, 0x9173, 0x9174, 0xb8ef, 0x9175, 0x9176, 0x9177, - 0x9178, 0x9179, 0x917a, 0x9181, 0x9182, 0x9183, 0x9184, 0x9185, - 0x9186, 0x9187, 0x9188, 0x9189, 0x918a, 0x918b, 0x918c, 0x918d, - 0x918e, 0x918f, 0x9190, 0x9191, 0x9192, 0x9193, 0x9194, 0x9195, - 0xb8f0, 0xb8f1, 0x9196, 0xb8f2, 0xb8f3, 0x9197, 0x9198, 0x9199, - 0xb8f4, 0x919a, 0xb8f5, 0x919b, 0x919c, 0x919d, 0x919e, 0x919f, - 0xb8f6, 0xb8f7, 0x91a0, 0xb8f8, 0x91a1, 0xb8f9, 0x91a2, 0x91a3, - 0x91a4, 0x91a5, 0x91a6, 0x91a7, 0xb8fa, 0x91a8, 0x91a9, 0x91aa, - 0xb8fb, 0x91ab, 0x91ac, 0x91ad, 0x91ae, 0x91af, 0x91b0, 0x91b1, - 0x91b2, 0x91b3, 0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, - 0xb8fc, 0xb8fd, 0x91ba, 0x91bb, 0x91bc, 0x91bd, 0x91be, 0x91bf, - 0x91c0, 0x91c1, 0x91c2, 0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, - 0x91c8, 0x91c9, 0x91ca, 0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, - 0x91d0, 0x91d1, 0x91d2, 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, - 0x91d8, 0x91d9, 0x91da, 0x91db, 0xb8fe, 0x91dc, 0x91dd, 0x91de, - /* 0xbb00 .. 0xbbff */ - 0xb9a1, 0x91df, 0x91e0, 0x91e1, 0xb9a2, 0x91e2, 0x91e3, 0x91e4, - 0x91e5, 0x91e6, 0x91e7, 0x91e8, 0x91e9, 0xb9a3, 0x91ea, 0xb9a4, - 0x91eb, 0xb9a5, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, - 0xb9a6, 0x91f2, 0x91f3, 0x91f4, 0xb9a7, 0x91f5, 0x91f6, 0x91f7, - 0xb9a8, 0x91f8, 0x91f9, 0x91fa, 0x91fb, 0x91fc, 0x91fd, 0x91fe, - 0x9241, 0xb9a9, 0x9242, 0xb9aa, 0x9243, 0x9244, 0x9245, 0x9246, - 0x9247, 0x9248, 0x9249, 0x924a, 0xb9ab, 0xb9ac, 0xb9ad, 0x924b, - 0xb9ae, 0x924c, 0x924d, 0xb9af, 0xb9b0, 0xb9b1, 0xb9b2, 0x924e, - 0x924f, 0x9250, 0x9251, 0x9252, 0xb9b3, 0xb9b4, 0x9253, 0xb9b5, - 0x9254, 0xb9b6, 0x9255, 0x9256, 0x9257, 0xb9b7, 0x9258, 0xb9b8, - 0xb9b9, 0x9259, 0x925a, 0x9261, 0xb9ba, 0x9262, 0x9263, 0x9264, - 0xb9bb, 0x9265, 0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, - 0x926c, 0xb9bc, 0x926d, 0xb9bd, 0x926e, 0x926f, 0x9270, 0x9271, - 0x9272, 0x9273, 0x9274, 0x9275, 0xb9be, 0x9276, 0x9277, 0x9278, - 0x9279, 0x927a, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x9286, - 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, 0x928d, 0x928e, - 0x928f, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, - 0xb9bf, 0x9297, 0x9298, 0x9299, 0xb9c0, 0x929a, 0x929b, 0x929c, - 0xb9c1, 0x929d, 0x929e, 0x929f, 0x92a0, 0x92a1, 0x92a2, 0x92a3, - 0x92a4, 0x92a5, 0x92a6, 0x92a7, 0x92a8, 0x92a9, 0x92aa, 0x92ab, - 0x92ac, 0x92ad, 0x92ae, 0x92af, 0xb9c2, 0x92b0, 0x92b1, 0x92b2, - 0xb9c3, 0x92b3, 0x92b4, 0x92b5, 0xb9c4, 0x92b6, 0x92b7, 0x92b8, - 0x92b9, 0x92ba, 0x92bb, 0x92bc, 0xb9c5, 0x92bd, 0x92be, 0xb9c6, - 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c4, 0x92c5, 0x92c6, - 0xb9c7, 0x92c7, 0x92c8, 0x92c9, 0xb9c8, 0x92ca, 0x92cb, 0x92cc, - 0xb9c9, 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1, 0x92d2, 0x92d3, - 0xb9ca, 0x92d4, 0x92d5, 0xb9cb, 0x92d6, 0x92d7, 0x92d8, 0x92d9, - 0x92da, 0x92db, 0x92dc, 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1, - 0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9, - 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1, - 0x92f2, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9, - 0xb9cc, 0xb9cd, 0x92fa, 0x92fb, 0xb9ce, 0x92fc, 0x92fd, 0xb9cf, - /* 0xbc00 .. 0xbcff */ - 0xb9d0, 0x92fe, 0xb9d1, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345, - 0xb9d2, 0xb9d3, 0x9346, 0xb9d4, 0xb9d5, 0xb9d6, 0x9347, 0xb9d7, - 0x9348, 0xb9d8, 0x9349, 0x934a, 0xb9d9, 0xb9da, 0xb9db, 0xb9dc, - 0xb9dd, 0x934b, 0x934c, 0xb9de, 0xb9df, 0xb9e0, 0xb9e1, 0xb9e2, - 0x934d, 0x934e, 0x934f, 0x9350, 0xb9e3, 0xb9e4, 0x9351, 0xb9e5, - 0x9352, 0xb9e6, 0x9353, 0x9354, 0x9355, 0xb9e7, 0x9356, 0x9357, - 0xb9e8, 0xb9e9, 0x9358, 0x9359, 0xb9ea, 0x935a, 0x9361, 0x9362, - 0xb9eb, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, - 0xb9ec, 0xb9ed, 0x936a, 0xb9ee, 0xb9ef, 0xb9f0, 0x936b, 0x936c, - 0x936d, 0xb9f1, 0x936e, 0x936f, 0xb9f2, 0xb9f3, 0x9370, 0x9371, - 0xb9f4, 0x9372, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, - 0x9379, 0x937a, 0x9381, 0x9382, 0x9383, 0xb9f5, 0x9384, 0x9385, - 0x9386, 0x9387, 0x9388, 0x9389, 0x938a, 0x938b, 0x938c, 0x938d, - 0x938e, 0x938f, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, - 0x9396, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, 0x939d, - 0x939e, 0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4, 0x93a5, - 0x93a6, 0x93a7, 0x93a8, 0x93a9, 0xb9f6, 0xb9f7, 0x93aa, 0x93ab, - 0xb9f8, 0x93ac, 0x93ad, 0xb9f9, 0xb9fa, 0x93ae, 0xb9fb, 0x93af, - 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0xb9fc, 0xb9fd, 0x93b4, 0xb9fe, - 0x93b5, 0xbaa1, 0xbaa2, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, - 0xbaa3, 0xbaa4, 0x93bb, 0x93bc, 0xbaa5, 0x93bd, 0x93be, 0xbaa6, - 0xbaa7, 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4, 0x93c5, - 0xbaa8, 0xbaa9, 0x93c6, 0xbaaa, 0xbaab, 0xbaac, 0x93c7, 0x93c8, - 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0xbaad, 0xbaae, 0x93cd, 0x93ce, - 0xbaaf, 0x93cf, 0x93d0, 0x93d1, 0xbab0, 0x93d2, 0x93d3, 0x93d4, - 0x93d5, 0x93d6, 0x93d7, 0x93d8, 0x93d9, 0xbab1, 0x93da, 0xbab2, - 0xbab3, 0xbab4, 0x93db, 0x93dc, 0x93dd, 0xbab5, 0x93de, 0x93df, - 0xbab6, 0x93e0, 0x93e1, 0x93e2, 0xbab7, 0x93e3, 0x93e4, 0x93e5, - 0x93e6, 0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, - 0x93ee, 0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, - 0x93f6, 0x93f7, 0x93f8, 0x93f9, 0xbab8, 0xbab9, 0xbaba, 0x93fa, - 0xbabb, 0x93fb, 0x93fc, 0x93fd, 0xbabc, 0x93fe, 0x9441, 0x9442, - /* 0xbd00 .. 0xbdff */ - 0x9443, 0x9444, 0x9445, 0x9446, 0xbabd, 0xbabe, 0x9447, 0xbabf, - 0x9448, 0xbac0, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, - 0xbac1, 0x944f, 0x9450, 0x9451, 0xbac2, 0x9452, 0x9453, 0x9454, - 0x9455, 0x9456, 0x9457, 0x9458, 0x9459, 0x945a, 0x9461, 0x9462, - 0x9463, 0x9464, 0x9465, 0x9466, 0xbac3, 0x9467, 0x9468, 0x9469, - 0x946a, 0x946b, 0x946c, 0x946d, 0xbac4, 0x946e, 0x946f, 0x9470, - 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, 0x9478, - 0x9479, 0x947a, 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, - 0xbac5, 0x9487, 0x9488, 0x9489, 0x948a, 0x948b, 0x948c, 0x948d, - 0xbac6, 0xbac7, 0x948e, 0x948f, 0xbac8, 0x9490, 0x9491, 0x9492, - 0xbac9, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, 0x9499, - 0xbaca, 0xbacb, 0x949a, 0x949b, 0x949c, 0x949d, 0x949e, 0x949f, - 0x94a0, 0x94a1, 0x94a2, 0x94a3, 0xbacc, 0x94a4, 0x94a5, 0x94a6, - 0xbacd, 0x94a7, 0x94a8, 0x94a9, 0x94aa, 0x94ab, 0x94ac, 0x94ad, - 0x94ae, 0x94af, 0x94b0, 0x94b1, 0x94b2, 0x94b3, 0x94b4, 0x94b5, - 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, 0x94bd, - 0xbace, 0xbacf, 0x94be, 0x94bf, 0xbad0, 0x94c0, 0x94c1, 0xbad1, - 0xbad2, 0xbad3, 0xbad4, 0x94c2, 0x94c3, 0x94c4, 0x94c5, 0x94c6, - 0xbad5, 0xbad6, 0x94c7, 0xbad7, 0x94c8, 0xbad8, 0x94c9, 0x94ca, - 0x94cb, 0xbad9, 0xbada, 0x94cc, 0xbadb, 0x94cd, 0x94ce, 0x94cf, - 0x94d0, 0x94d1, 0x94d2, 0x94d3, 0xbadc, 0x94d4, 0x94d5, 0x94d6, - 0x94d7, 0x94d8, 0x94d9, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, - 0xbadd, 0x94df, 0x94e0, 0x94e1, 0x94e2, 0x94e3, 0x94e4, 0x94e5, - 0xbade, 0x94e6, 0x94e7, 0x94e8, 0x94e9, 0x94ea, 0x94eb, 0x94ec, - 0x94ed, 0x94ee, 0x94ef, 0x94f0, 0x94f1, 0x94f2, 0x94f3, 0x94f4, - 0x94f5, 0x94f6, 0x94f7, 0x94f8, 0x94f9, 0x94fa, 0x94fb, 0x94fc, - 0x94fd, 0x94fe, 0x9541, 0x9542, 0xbadf, 0xbae0, 0x9543, 0x9544, - 0xbae1, 0x9545, 0x9546, 0x9547, 0xbae2, 0x9548, 0x9549, 0x954a, - 0x954b, 0x954c, 0x954d, 0x954e, 0x954f, 0x9550, 0x9551, 0x9552, - 0x9553, 0xbae3, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559, - 0xbae4, 0x955a, 0x9561, 0x9562, 0xbae5, 0x9563, 0x9564, 0x9565, - 0xbae6, 0x9566, 0x9567, 0x9568, 0x9569, 0x956a, 0x956b, 0x956c, - /* 0xbe00 .. 0xbeff */ - 0xbae7, 0x956d, 0x956e, 0xbae8, 0x956f, 0xbae9, 0x9570, 0x9571, - 0x9572, 0x9573, 0x9574, 0x9575, 0xbaea, 0xbaeb, 0x9576, 0x9577, - 0xbaec, 0x9578, 0x9579, 0x957a, 0xbaed, 0x9581, 0x9582, 0x9583, - 0x9584, 0x9585, 0x9586, 0x9587, 0xbaee, 0xbaef, 0x9588, 0xbaf0, - 0x9589, 0x958a, 0x958b, 0x958c, 0x958d, 0x958e, 0x958f, 0x9590, - 0x9591, 0x9592, 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, - 0x9599, 0x959a, 0x959b, 0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, - 0x95a1, 0x95a2, 0x95a3, 0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, - 0x95a9, 0x95aa, 0x95ab, 0x95ac, 0xbaf1, 0xbaf2, 0x95ad, 0x95ae, - 0xbaf3, 0x95af, 0x95b0, 0x95b1, 0xbaf4, 0x95b2, 0xbaf5, 0x95b3, - 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0xbaf6, 0xbaf7, 0x95b8, 0xbaf8, - 0x95b9, 0xbaf9, 0xbafa, 0xbafb, 0x95ba, 0x95bb, 0x95bc, 0x95bd, - 0xbafc, 0xbafd, 0x95be, 0x95bf, 0xbafe, 0x95c0, 0x95c1, 0x95c2, - 0xbba1, 0x95c3, 0xbba2, 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, - 0xbba3, 0xbba4, 0x95c9, 0xbba5, 0xbba6, 0xbba7, 0x95ca, 0x95cb, - 0x95cc, 0x95cd, 0x95ce, 0xbba8, 0xbba9, 0xbbaa, 0x95cf, 0x95d0, - 0xbbab, 0x95d1, 0x95d2, 0x95d3, 0xbbac, 0x95d4, 0x95d5, 0x95d6, - 0x95d7, 0x95d8, 0x95d9, 0x95da, 0xbbad, 0xbbae, 0x95db, 0xbbaf, - 0xbbb0, 0xbbb1, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, - 0xbbb2, 0xbbb3, 0x95e2, 0x95e3, 0x95e4, 0x95e5, 0x95e6, 0x95e7, - 0x95e8, 0x95e9, 0x95ea, 0x95eb, 0x95ec, 0x95ed, 0x95ee, 0x95ef, - 0xbbb4, 0x95f0, 0x95f1, 0x95f2, 0x95f3, 0x95f4, 0x95f5, 0x95f6, - 0x95f7, 0x95f8, 0x95f9, 0x95fa, 0x95fb, 0x95fc, 0x95fd, 0x95fe, - 0x9641, 0x9642, 0x9643, 0x9644, 0x9645, 0x9646, 0x9647, 0x9648, - 0x9649, 0x964a, 0x964b, 0x964c, 0x964d, 0x964e, 0x964f, 0x9650, - 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, - 0xbbb5, 0xbbb6, 0x9659, 0x965a, 0xbbb7, 0x9661, 0x9662, 0xbbb8, - 0xbbb9, 0x9663, 0x9664, 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, - 0xbbba, 0x966a, 0x966b, 0xbbbb, 0xbbbc, 0xbbbd, 0x966c, 0x966d, - 0x966e, 0x966f, 0x9670, 0x9671, 0xbbbe, 0x9672, 0x9673, 0x9674, - 0x9675, 0x9676, 0x9677, 0x9678, 0x9679, 0x967a, 0x9681, 0x9682, - 0x9683, 0x9684, 0x9685, 0x9686, 0x9687, 0x9688, 0x9689, 0x968a, - /* 0xbf00 .. 0xbfff */ - 0x968b, 0xbbbf, 0x968c, 0x968d, 0x968e, 0x968f, 0x9690, 0x9691, - 0xbbc0, 0xbbc1, 0x9692, 0x9693, 0x9694, 0x9695, 0x9696, 0x9697, - 0x9698, 0x9699, 0x969a, 0x969b, 0x969c, 0x969d, 0x969e, 0x969f, - 0xbbc2, 0xbbc3, 0x96a0, 0xbbc4, 0xbbc5, 0xbbc6, 0x96a1, 0x96a2, - 0x96a3, 0x96a4, 0x96a5, 0x96a6, 0x96a7, 0x96a8, 0x96a9, 0x96aa, - 0x96ab, 0x96ac, 0x96ad, 0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, - 0x96b3, 0x96b4, 0x96b5, 0x96b6, 0x96b7, 0x96b8, 0x96b9, 0x96ba, - 0x96bb, 0x96bc, 0x96bd, 0x96be, 0x96bf, 0x96c0, 0x96c1, 0x96c2, - 0xbbc7, 0xbbc8, 0x96c3, 0x96c4, 0xbbc9, 0x96c5, 0x96c6, 0x96c7, - 0xbbca, 0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, 0x96cd, 0x96ce, - 0xbbcb, 0xbbcc, 0x96cf, 0x96d0, 0x96d1, 0xbbcd, 0x96d2, 0x96d3, - 0x96d4, 0x96d5, 0x96d6, 0x96d7, 0x96d8, 0x96d9, 0x96da, 0x96db, - 0x96dc, 0x96dd, 0x96de, 0x96df, 0x96e0, 0x96e1, 0x96e2, 0x96e3, - 0x96e4, 0x96e5, 0x96e6, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, - 0x96ec, 0x96ed, 0x96ee, 0x96ef, 0x96f0, 0x96f1, 0x96f2, 0x96f3, - 0x96f4, 0x96f5, 0x96f6, 0x96f7, 0x96f8, 0x96f9, 0x96fa, 0x96fb, - 0x96fc, 0x96fd, 0x96fe, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, - 0x9746, 0x9747, 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, - 0x974e, 0x974f, 0x9750, 0x9751, 0xbbce, 0x9752, 0x9753, 0x9754, - 0x9755, 0x9756, 0x9757, 0x9758, 0x9759, 0x975a, 0x9761, 0x9762, - 0x9763, 0x9764, 0x9765, 0x9766, 0x9767, 0x9768, 0x9769, 0x976a, - 0x976b, 0x976c, 0x976d, 0x976e, 0x976f, 0x9770, 0x9771, 0x9772, - 0xbbcf, 0x9773, 0x9774, 0x9775, 0x9776, 0x9777, 0x9778, 0x9779, - 0x977a, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, 0x9787, - 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, 0xbbd0, 0x978d, 0x978e, - 0x978f, 0x9790, 0x9791, 0x9792, 0xbbd1, 0xbbd2, 0x9793, 0x9794, - 0xbbd3, 0x9795, 0x9796, 0x9797, 0xbbd4, 0x9798, 0x9799, 0x979a, - 0x979b, 0x979c, 0x979d, 0x979e, 0xbbd5, 0x979f, 0x97a0, 0xbbd6, - 0x97a1, 0xbbd7, 0x97a2, 0x97a3, 0x97a4, 0x97a5, 0x97a6, 0x97a7, - 0x97a8, 0x97a9, 0x97aa, 0x97ab, 0x97ac, 0x97ad, 0x97ae, 0x97af, - 0x97b0, 0x97b1, 0x97b2, 0x97b3, 0x97b4, 0x97b5, 0x97b6, 0x97b7, - 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, 0x97bd, 0x97be, 0x97bf, - /* 0xc000 .. 0xc0ff */ - 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, 0x97c6, 0x97c7, - 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0x97cd, 0x97ce, 0x97cf, - 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, 0x97d5, 0x97d6, 0x97d7, - 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, 0x97dd, 0x97de, 0x97df, - 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4, 0x97e5, 0x97e6, 0x97e7, - 0x97e8, 0x97e9, 0x97ea, 0x97eb, 0x97ec, 0x97ed, 0x97ee, 0x97ef, - 0x97f0, 0x97f1, 0x97f2, 0x97f3, 0x97f4, 0x97f5, 0x97f6, 0x97f7, - 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0xbbd8, 0x97fc, 0x97fd, 0x97fe, - 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847, 0x9848, - 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e, 0x984f, 0x9850, - 0x9851, 0xbbd9, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857, - 0xbbda, 0x9858, 0x9859, 0x985a, 0xbbdb, 0x9861, 0x9862, 0x9863, - 0xbbdc, 0x9864, 0x9865, 0x9866, 0x9867, 0x9868, 0x9869, 0x986a, - 0xbbdd, 0xbbde, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, 0x9870, - 0x9871, 0x9872, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, 0x9878, - 0x9879, 0x987a, 0x9881, 0x9882, 0x9883, 0x9884, 0x9885, 0x9886, - 0x9887, 0x9888, 0x9889, 0x988a, 0x988b, 0x988c, 0x988d, 0x988e, - 0x988f, 0x9890, 0x9891, 0x9892, 0x9893, 0x9894, 0x9895, 0x9896, - 0xbbdf, 0xbbe0, 0x9897, 0x9898, 0xbbe1, 0x9899, 0x989a, 0x989b, - 0xbbe2, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0, 0x98a1, 0x98a2, - 0xbbe3, 0xbbe4, 0x98a3, 0xbbe5, 0x98a4, 0xbbe6, 0x98a5, 0x98a6, - 0x98a7, 0x98a8, 0x98a9, 0x98aa, 0xbbe7, 0xbbe8, 0x98ab, 0xbbe9, - 0xbbea, 0x98ac, 0x98ad, 0xbbeb, 0xbbec, 0xbbed, 0xbbee, 0x98ae, - 0x98af, 0x98b0, 0x98b1, 0x98b2, 0xbbef, 0xbbf0, 0x98b3, 0xbbf1, - 0xbbf2, 0xbbf3, 0x98b4, 0x98b5, 0x98b6, 0xbbf4, 0x98b7, 0x98b8, - 0xbbf5, 0xbbf6, 0x98b9, 0x98ba, 0xbbf7, 0x98bb, 0x98bc, 0x98bd, - 0xbbf8, 0x98be, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, 0x98c4, - 0xbbf9, 0xbbfa, 0x98c5, 0xbbfb, 0xbbfc, 0xbbfd, 0x98c6, 0x98c7, - 0x98c8, 0x98c9, 0x98ca, 0x98cb, 0xbbfe, 0xbca1, 0x98cc, 0x98cd, - 0xbca2, 0x98ce, 0x98cf, 0x98d0, 0xbca3, 0x98d1, 0x98d2, 0x98d3, - 0x98d4, 0x98d5, 0x98d6, 0x98d7, 0xbca4, 0xbca5, 0x98d8, 0xbca6, - 0x98d9, 0xbca7, 0x98da, 0x98db, 0x98dc, 0x98dd, 0x98de, 0x98df, - /* 0xc100 .. 0xc1ff */ - 0xbca8, 0x98e0, 0x98e1, 0x98e2, 0xbca9, 0x98e3, 0x98e4, 0x98e5, - 0xbcaa, 0x98e6, 0x98e7, 0x98e8, 0x98e9, 0x98ea, 0x98eb, 0x98ec, - 0xbcab, 0x98ed, 0x98ee, 0x98ef, 0x98f0, 0xbcac, 0x98f1, 0x98f2, - 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0xbcad, 0xbcae, 0xbcaf, 0xbcb0, - 0xbcb1, 0x98f7, 0x98f8, 0xbcb2, 0xbcb3, 0x98f9, 0xbcb4, 0xbcb5, - 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0xbcb6, 0xbcb7, 0x98fe, 0xbcb8, - 0xbcb9, 0xbcba, 0x9941, 0x9942, 0x9943, 0x9944, 0xbcbb, 0x9945, - 0xbcbc, 0xbcbd, 0x9946, 0x9947, 0xbcbe, 0x9948, 0x9949, 0x994a, - 0xbcbf, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, - 0xbcc0, 0xbcc1, 0x9952, 0xbcc2, 0xbcc3, 0xbcc4, 0x9953, 0x9954, - 0x9955, 0x9956, 0x9957, 0x9958, 0xbcc5, 0xbcc6, 0x9959, 0x995a, - 0xbcc7, 0x9961, 0x9962, 0x9963, 0xbcc8, 0x9964, 0x9965, 0x9966, - 0x9967, 0x9968, 0x9969, 0x996a, 0xbcc9, 0xbcca, 0x996b, 0xbccb, - 0xbccc, 0xbccd, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0x9971, - 0xbcce, 0x9972, 0x9973, 0x9974, 0xbccf, 0x9975, 0x9976, 0x9977, - 0xbcd0, 0x9978, 0x9979, 0x997a, 0x9981, 0x9982, 0x9983, 0x9984, - 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0xbcd1, 0x998a, 0x998b, - 0x998c, 0x998d, 0x998e, 0x998f, 0xbcd2, 0xbcd3, 0xbcd4, 0x9990, - 0xbcd5, 0x9991, 0x9992, 0x9993, 0xbcd6, 0x9994, 0xbcd7, 0x9995, - 0x9996, 0x9997, 0x9998, 0x9999, 0xbcd8, 0xbcd9, 0x999a, 0xbcda, - 0x999b, 0xbcdb, 0x999c, 0x999d, 0x999e, 0xbcdc, 0x999f, 0x99a0, - 0xbcdd, 0xbcde, 0x99a1, 0x99a2, 0xbcdf, 0x99a3, 0x99a4, 0x99a5, - 0xbce0, 0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa, 0x99ab, 0x99ac, - 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1, 0xbce1, 0x99b2, 0x99b3, - 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0xbce2, 0x99b8, 0x99b9, 0x99ba, - 0xbce3, 0x99bb, 0x99bc, 0x99bd, 0xbce4, 0x99be, 0x99bf, 0x99c0, - 0x99c1, 0x99c2, 0x99c3, 0x99c4, 0xbce5, 0x99c5, 0x99c6, 0xbce6, - 0xbce7, 0x99c7, 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc, 0x99cd, - 0xbce8, 0x99ce, 0x99cf, 0x99d0, 0xbce9, 0x99d1, 0x99d2, 0x99d3, - 0xbcea, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, - 0xbceb, 0xbcec, 0x99db, 0xbced, 0x99dc, 0x99dd, 0x99de, 0x99df, - 0x99e0, 0x99e1, 0x99e2, 0x99e3, 0xbcee, 0xbcef, 0x99e4, 0x99e5, - /* 0xc200 .. 0xc2ff */ - 0xbcf0, 0x99e6, 0x99e7, 0x99e8, 0xbcf1, 0x99e9, 0x99ea, 0x99eb, - 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0xbcf2, 0xbcf3, 0x99f0, 0xbcf4, - 0x99f1, 0xbcf5, 0x99f2, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, - 0xbcf6, 0xbcf7, 0x99f8, 0x99f9, 0xbcf8, 0x99fa, 0x99fb, 0xbcf9, - 0xbcfa, 0x99fc, 0x99fd, 0x99fe, 0x9a41, 0x9a42, 0x9a43, 0x9a44, - 0xbcfb, 0xbcfc, 0x9a45, 0xbcfd, 0x9a46, 0xbcfe, 0x9a47, 0xbda1, - 0x9a48, 0xbda2, 0xbda3, 0x9a49, 0xbda4, 0x9a4a, 0x9a4b, 0x9a4c, - 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, 0x9a52, 0x9a53, 0x9a54, - 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a61, 0x9a62, - 0xbda5, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, - 0xbda6, 0xbda7, 0x9a6a, 0x9a6b, 0xbda8, 0x9a6c, 0x9a6d, 0x9a6e, - 0xbda9, 0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73, 0x9a74, 0x9a75, - 0xbdaa, 0x9a76, 0x9a77, 0x9a78, 0x9a79, 0xbdab, 0x9a7a, 0x9a81, - 0x9a82, 0x9a83, 0x9a84, 0x9a85, 0xbdac, 0xbdad, 0x9a86, 0x9a87, - 0xbdae, 0x9a88, 0x9a89, 0x9a8a, 0xbdaf, 0x9a8b, 0x9a8c, 0x9a8d, - 0x9a8e, 0x9a8f, 0x9a90, 0x9a91, 0xbdb0, 0xbdb1, 0x9a92, 0xbdb2, - 0x9a93, 0xbdb3, 0x9a94, 0x9a95, 0x9a96, 0x9a97, 0x9a98, 0x9a99, - 0xbdb4, 0xbdb5, 0x9a9a, 0x9a9b, 0x9a9c, 0x9a9d, 0x9a9e, 0x9a9f, - 0xbdb6, 0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa6, - 0xbdb7, 0x9aa7, 0x9aa8, 0xbdb8, 0x9aa9, 0xbdb9, 0x9aaa, 0x9aab, - 0x9aac, 0x9aad, 0x9aae, 0x9aaf, 0xbdba, 0xbdbb, 0x9ab0, 0x9ab1, - 0xbdbc, 0x9ab2, 0x9ab3, 0x9ab4, 0xbdbd, 0xbdbe, 0x9ab5, 0x9ab6, - 0x9ab7, 0x9ab8, 0x9ab9, 0x9aba, 0xbdbf, 0xbdc0, 0x9abb, 0xbdc1, - 0x9abc, 0xbdc2, 0x9abd, 0x9abe, 0x9abf, 0x9ac0, 0x9ac1, 0x9ac2, - 0x9ac3, 0x9ac4, 0x9ac5, 0x9ac6, 0x9ac7, 0x9ac8, 0x9ac9, 0x9aca, - 0x9acb, 0x9acc, 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad1, 0x9ad2, - 0x9ad3, 0x9ad4, 0x9ad5, 0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, - 0x9adb, 0x9adc, 0x9add, 0x9ade, 0xbdc3, 0xbdc4, 0x9adf, 0x9ae0, - 0xbdc5, 0x9ae1, 0x9ae2, 0xbdc6, 0xbdc7, 0x9ae3, 0x9ae4, 0x9ae5, - 0x9ae6, 0x9ae7, 0x9ae8, 0xbdc8, 0xbdc9, 0xbdca, 0x9ae9, 0xbdcb, - 0x9aea, 0xbdcc, 0x9aeb, 0x9aec, 0x9aed, 0x9aee, 0xbdcd, 0x9aef, - 0xbdce, 0xbdcf, 0x9af0, 0xbdd0, 0xbdd1, 0x9af1, 0x9af2, 0x9af3, - /* 0xc300 .. 0xc3ff */ - 0xbdd2, 0x9af4, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, 0x9afa, - 0xbdd3, 0xbdd4, 0x9afb, 0x9afc, 0xbdd5, 0xbdd6, 0x9afd, 0x9afe, - 0x9b41, 0x9b42, 0x9b43, 0xbdd7, 0xbdd8, 0xbdd9, 0x9b44, 0x9b45, - 0xbdda, 0x9b46, 0x9b47, 0x9b48, 0xbddb, 0x9b49, 0x9b4a, 0x9b4b, - 0x9b4c, 0x9b4d, 0x9b4e, 0x9b4f, 0xbddc, 0xbddd, 0x9b50, 0x9b51, - 0xbdde, 0xbddf, 0x9b52, 0x9b53, 0x9b54, 0x9b55, 0x9b56, 0x9b57, - 0x9b58, 0x9b59, 0x9b5a, 0x9b61, 0x9b62, 0x9b63, 0x9b64, 0x9b65, - 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, - 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0xbde0, 0x9b73, 0x9b74, - 0x9b75, 0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, 0x9b81, 0x9b82, - 0x9b83, 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b88, 0x9b89, 0x9b8a, - 0x9b8b, 0x9b8c, 0x9b8d, 0x9b8e, 0x9b8f, 0x9b90, 0x9b91, 0x9b92, - 0x9b93, 0x9b94, 0x9b95, 0x9b96, 0x9b97, 0x9b98, 0x9b99, 0x9b9a, - 0xbde1, 0xbde2, 0x9b9b, 0x9b9c, 0xbde3, 0x9b9d, 0x9b9e, 0x9b9f, - 0xbde4, 0x9ba0, 0xbde5, 0x9ba1, 0x9ba2, 0x9ba3, 0x9ba4, 0x9ba5, - 0xbde6, 0xbde7, 0x9ba6, 0x9ba7, 0xbde8, 0xbde9, 0x9ba8, 0x9ba9, - 0x9baa, 0x9bab, 0x9bac, 0x9bad, 0xbdea, 0x9bae, 0x9baf, 0x9bb0, - 0xbdeb, 0x9bb1, 0x9bb2, 0x9bb3, 0xbdec, 0x9bb4, 0x9bb5, 0x9bb6, - 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb, 0x9bbc, 0x9bbd, 0x9bbe, - 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3, 0x9bc4, 0x9bc5, 0x9bc6, - 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, - 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3, 0x9bd4, 0x9bd5, 0x9bd6, - 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb, 0x9bdc, 0x9bdd, 0x9bde, - 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3, 0x9be4, 0x9be5, 0x9be6, - 0xbded, 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb, 0x9bec, 0x9bed, - 0x9bee, 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, 0x9bf4, 0x9bf5, - 0x9bf6, 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, 0x9bfc, 0x9bfd, - 0xbdee, 0xbdef, 0x9bfe, 0x9c41, 0xbdf0, 0x9c42, 0x9c43, 0xbdf1, - 0xbdf2, 0x9c44, 0xbdf3, 0x9c45, 0x9c46, 0x9c47, 0x9c48, 0x9c49, - 0xbdf4, 0xbdf5, 0x9c4a, 0x9c4b, 0x9c4c, 0xbdf6, 0x9c4d, 0x9c4e, - 0x9c4f, 0x9c50, 0x9c51, 0x9c52, 0xbdf7, 0xbdf8, 0x9c53, 0x9c54, - 0xbdf9, 0x9c55, 0x9c56, 0x9c57, 0x9c58, 0x9c59, 0x9c5a, 0x9c61, - /* 0xc400 .. 0xc4ff */ - 0x9c62, 0x9c63, 0x9c64, 0x9c65, 0x9c66, 0x9c67, 0x9c68, 0x9c69, - 0xbdfa, 0x9c6a, 0x9c6b, 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, 0x9c70, - 0xbdfb, 0x9c71, 0x9c72, 0x9c73, 0x9c74, 0x9c75, 0x9c76, 0x9c77, - 0x9c78, 0x9c79, 0x9c7a, 0x9c81, 0x9c82, 0x9c83, 0x9c84, 0x9c85, - 0x9c86, 0x9c87, 0x9c88, 0x9c89, 0xbdfc, 0x9c8a, 0x9c8b, 0x9c8c, - 0x9c8d, 0x9c8e, 0x9c8f, 0x9c90, 0xbdfd, 0x9c91, 0x9c92, 0x9c93, - 0xbdfe, 0x9c94, 0x9c95, 0x9c96, 0xbea1, 0x9c97, 0x9c98, 0x9c99, - 0x9c9a, 0x9c9b, 0x9c9c, 0x9c9d, 0xbea2, 0xbea3, 0x9c9e, 0x9c9f, - 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, 0x9ca6, 0x9ca7, - 0xbea4, 0x9ca8, 0x9ca9, 0x9caa, 0x9cab, 0x9cac, 0x9cad, 0x9cae, - 0x9caf, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, - 0x9cb7, 0x9cb8, 0x9cb9, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cbe, - 0x9cbf, 0x9cc0, 0x9cc1, 0x9cc2, 0xbea5, 0xbea6, 0x9cc3, 0x9cc4, - 0xbea7, 0x9cc5, 0x9cc6, 0x9cc7, 0xbea8, 0x9cc8, 0x9cc9, 0x9cca, - 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0xbea9, 0xbeaa, 0x9ccf, 0x9cd0, - 0x9cd1, 0xbeab, 0x9cd2, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd6, 0x9cd7, - 0xbeac, 0x9cd8, 0x9cd9, 0x9cda, 0x9cdb, 0x9cdc, 0x9cdd, 0x9cde, - 0x9cdf, 0x9ce0, 0x9ce1, 0x9ce2, 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, - 0x9ce7, 0x9ce8, 0x9ce9, 0x9cea, 0xbead, 0x9ceb, 0x9cec, 0x9ced, - 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0xbeae, 0x9cf2, 0x9cf3, 0x9cf4, - 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, - 0x9cfd, 0x9cfe, 0x9d41, 0x9d42, 0x9d43, 0x9d44, 0x9d45, 0x9d46, - 0x9d47, 0x9d48, 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, - 0xbeaf, 0x9d4f, 0x9d50, 0x9d51, 0xbeb0, 0x9d52, 0x9d53, 0x9d54, - 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0x9d5a, 0x9d61, 0x9d62, - 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, 0x9d6a, - 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d72, - 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, - 0x9d81, 0x9d82, 0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, - 0x9d89, 0xbeb1, 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, - 0xbeb2, 0xbeb3, 0x9d90, 0x9d91, 0xbeb4, 0x9d92, 0x9d93, 0x9d94, - 0xbeb5, 0x9d95, 0xbeb6, 0x9d96, 0x9d97, 0x9d98, 0x9d99, 0xbeb7, - /* 0xc500 .. 0xc5ff */ - 0xbeb8, 0xbeb9, 0x9d9a, 0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, - 0x9da0, 0x9da1, 0x9da2, 0x9da3, 0xbeba, 0x9da4, 0x9da5, 0x9da6, - 0xbebb, 0x9da7, 0x9da8, 0x9da9, 0xbebc, 0x9daa, 0x9dab, 0x9dac, - 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0xbebd, 0x9db1, 0x9db2, 0x9db3, - 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba, 0x9dbb, - 0xbebe, 0xbebf, 0x9dbc, 0x9dbd, 0xbec0, 0x9dbe, 0x9dbf, 0x9dc0, - 0xbec1, 0x9dc1, 0x9dc2, 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, - 0xbec2, 0xbec3, 0x9dc8, 0xbec4, 0x9dc9, 0xbec5, 0x9dca, 0x9dcb, - 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0xbec6, 0xbec7, 0x9dd0, 0x9dd1, - 0xbec8, 0xbec9, 0xbeca, 0x9dd2, 0xbecb, 0xbecc, 0xbecd, 0x9dd3, - 0x9dd4, 0x9dd5, 0x9dd6, 0xbece, 0xbecf, 0xbed0, 0x9dd7, 0xbed1, - 0xbed2, 0xbed3, 0x9dd8, 0x9dd9, 0x9dda, 0xbed4, 0xbed5, 0x9ddb, - 0xbed6, 0xbed7, 0x9ddc, 0x9ddd, 0xbed8, 0x9dde, 0x9ddf, 0x9de0, - 0xbed9, 0x9de1, 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, - 0xbeda, 0xbedb, 0x9de8, 0xbedc, 0xbedd, 0xbede, 0x9de9, 0x9dea, - 0x9deb, 0x9dec, 0x9ded, 0x9dee, 0xbedf, 0xbee0, 0x9def, 0x9df0, - 0xbee1, 0x9df1, 0x9df2, 0x9df3, 0xbee2, 0x9df4, 0x9df5, 0xbee3, - 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0xbee4, 0xbee5, 0x9dfa, 0xbee6, - 0x9dfb, 0xbee7, 0x9dfc, 0x9dfd, 0x9dfe, 0xbee8, 0x9e41, 0xbee9, - 0xbeea, 0x9e42, 0x9e43, 0x9e44, 0xbeeb, 0x9e45, 0x9e46, 0x9e47, - 0xbeec, 0x9e48, 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4d, 0x9e4e, - 0x9e4f, 0xbeed, 0x9e50, 0x9e51, 0x9e52, 0x9e53, 0x9e54, 0x9e55, - 0x9e56, 0x9e57, 0x9e58, 0x9e59, 0xbeee, 0xbeef, 0x9e5a, 0x9e61, - 0xbef0, 0xbef1, 0x9e62, 0xbef2, 0xbef3, 0xbef4, 0xbef5, 0x9e63, - 0x9e64, 0x9e65, 0x9e66, 0x9e67, 0xbef6, 0xbef7, 0xbef8, 0xbef9, - 0xbefa, 0xbefb, 0xbefc, 0x9e68, 0xbefd, 0x9e69, 0xbefe, 0x9e6a, - 0xbfa1, 0xbfa2, 0x9e6b, 0x9e6c, 0xbfa3, 0x9e6d, 0x9e6e, 0x9e6f, - 0xbfa4, 0x9e70, 0x9e71, 0x9e72, 0x9e73, 0x9e74, 0x9e75, 0x9e76, - 0xbfa5, 0xbfa6, 0x9e77, 0xbfa7, 0x9e78, 0xbfa8, 0x9e79, 0x9e7a, - 0x9e81, 0x9e82, 0x9e83, 0x9e84, 0xbfa9, 0xbfaa, 0xbfab, 0x9e85, - 0xbfac, 0x9e86, 0x9e87, 0x9e88, 0xbfad, 0x9e89, 0xbfae, 0xbfaf, - 0x9e8a, 0x9e8b, 0x9e8c, 0x9e8d, 0xbfb0, 0xbfb1, 0xbfb2, 0xbfb3, - /* 0xc600 .. 0xc6ff */ - 0xbfb4, 0xbfb5, 0x9e8e, 0x9e8f, 0x9e90, 0xbfb6, 0xbfb7, 0xbfb8, - 0xbfb9, 0x9e91, 0x9e92, 0x9e93, 0xbfba, 0x9e94, 0x9e95, 0x9e96, - 0xbfbb, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, 0x9e9d, - 0xbfbc, 0xbfbd, 0x9e9e, 0xbfbe, 0xbfbf, 0x9e9f, 0x9ea0, 0x9ea1, - 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0xbfc0, 0xbfc1, 0x9ea6, 0x9ea7, - 0xbfc2, 0x9ea8, 0x9ea9, 0x9eaa, 0xbfc3, 0xbfc4, 0xbfc5, 0x9eab, - 0xbfc6, 0x9eac, 0x9ead, 0xbfc7, 0xbfc8, 0xbfc9, 0x9eae, 0xbfca, - 0x9eaf, 0xbfcb, 0x9eb0, 0xbfcc, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, - 0xbfcd, 0xbfce, 0x9eb5, 0x9eb6, 0xbfcf, 0x9eb7, 0x9eb8, 0x9eb9, - 0xbfd0, 0x9eba, 0x9ebb, 0x9ebc, 0x9ebd, 0x9ebe, 0x9ebf, 0x9ec0, - 0xbfd1, 0xbfd2, 0x9ec1, 0xbfd3, 0xbfd4, 0xbfd5, 0x9ec2, 0x9ec3, - 0x9ec4, 0x9ec5, 0x9ec6, 0x9ec7, 0xbfd6, 0xbfd7, 0x9ec8, 0x9ec9, - 0xbfd8, 0x9eca, 0x9ecb, 0x9ecc, 0x9ecd, 0x9ece, 0x9ecf, 0x9ed0, - 0x9ed1, 0x9ed2, 0x9ed3, 0x9ed4, 0xbfd9, 0x9ed5, 0x9ed6, 0xbfda, - 0x9ed7, 0xbfdb, 0x9ed8, 0x9ed9, 0x9eda, 0x9edb, 0x9edc, 0x9edd, - 0xbfdc, 0xbfdd, 0x9ede, 0x9edf, 0xbfde, 0x9ee0, 0x9ee1, 0x9ee2, - 0xbfdf, 0x9ee3, 0x9ee4, 0x9ee5, 0x9ee6, 0x9ee7, 0x9ee8, 0x9ee9, - 0xbfe0, 0xbfe1, 0x9eea, 0xbfe2, 0x9eeb, 0xbfe3, 0x9eec, 0x9eed, - 0x9eee, 0x9eef, 0x9ef0, 0x9ef1, 0xbfe4, 0xbfe5, 0x9ef2, 0x9ef3, - 0xbfe6, 0x9ef4, 0x9ef5, 0x9ef6, 0xbfe7, 0x9ef7, 0x9ef8, 0x9ef9, - 0x9efa, 0x9efb, 0x9efc, 0x9efd, 0xbfe8, 0xbfe9, 0x9efe, 0xbfea, - 0x9f41, 0xbfeb, 0x9f42, 0x9f43, 0x9f44, 0x9f45, 0x9f46, 0x9f47, - 0xbfec, 0xbfed, 0x9f48, 0x9f49, 0xbfee, 0x9f4a, 0x9f4b, 0x9f4c, - 0xbfef, 0xbff0, 0xbff1, 0x9f4d, 0x9f4e, 0x9f4f, 0x9f50, 0x9f51, - 0xbff2, 0xbff3, 0x9f52, 0xbff4, 0x9f53, 0xbff5, 0x9f54, 0x9f55, - 0x9f56, 0x9f57, 0x9f58, 0x9f59, 0xbff6, 0xbff7, 0x9f5a, 0x9f61, - 0xbff8, 0x9f62, 0x9f63, 0x9f64, 0xbff9, 0x9f65, 0x9f66, 0x9f67, - 0x9f68, 0x9f69, 0x9f6a, 0x9f6b, 0xbffa, 0xbffb, 0x9f6c, 0x9f6d, - 0xbffc, 0xbffd, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, - 0xbffe, 0xc0a1, 0x9f74, 0x9f75, 0xc0a2, 0x9f76, 0x9f77, 0x9f78, - 0xc0a3, 0x9f79, 0x9f7a, 0x9f81, 0x9f82, 0x9f83, 0x9f84, 0x9f85, - 0xc0a4, 0xc0a5, 0x9f86, 0x9f87, 0x9f88, 0xc0a6, 0x9f89, 0x9f8a, - /* 0xc700 .. 0xc7ff */ - 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, 0xc0a7, 0xc0a8, 0x9f8f, 0x9f90, - 0xc0a9, 0x9f91, 0x9f92, 0x9f93, 0xc0aa, 0x9f94, 0x9f95, 0x9f96, - 0x9f97, 0x9f98, 0x9f99, 0x9f9a, 0xc0ab, 0xc0ac, 0x9f9b, 0xc0ad, - 0x9f9c, 0xc0ae, 0x9f9d, 0x9f9e, 0x9f9f, 0x9fa0, 0x9fa1, 0x9fa2, - 0xc0af, 0xc0b0, 0x9fa3, 0x9fa4, 0xc0b1, 0x9fa5, 0x9fa6, 0x9fa7, - 0xc0b2, 0x9fa8, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0x9fae, - 0xc0b3, 0xc0b4, 0x9faf, 0xc0b5, 0x9fb0, 0xc0b6, 0x9fb1, 0xc0b7, - 0x9fb2, 0x9fb3, 0x9fb4, 0x9fb5, 0xc0b8, 0xc0b9, 0x9fb6, 0x9fb7, - 0xc0ba, 0x9fb8, 0x9fb9, 0x9fba, 0xc0bb, 0x9fbb, 0x9fbc, 0x9fbd, - 0x9fbe, 0x9fbf, 0xc0bc, 0x9fc0, 0xc0bd, 0xc0be, 0x9fc1, 0xc0bf, - 0x9fc2, 0xc0c0, 0xc0c1, 0xc0c2, 0xc0c3, 0xc0c4, 0xc0c5, 0xc0c6, - 0xc0c7, 0x9fc3, 0x9fc4, 0x9fc5, 0xc0c8, 0x9fc6, 0x9fc7, 0x9fc8, - 0xc0c9, 0x9fc9, 0x9fca, 0x9fcb, 0x9fcc, 0x9fcd, 0x9fce, 0x9fcf, - 0xc0ca, 0x9fd0, 0x9fd1, 0xc0cb, 0x9fd2, 0x9fd3, 0x9fd4, 0x9fd5, - 0x9fd6, 0x9fd7, 0x9fd8, 0x9fd9, 0xc0cc, 0xc0cd, 0x9fda, 0x9fdb, - 0xc0ce, 0x9fdc, 0x9fdd, 0x9fde, 0xc0cf, 0xc0d0, 0xc0d1, 0x9fdf, - 0x9fe0, 0x9fe1, 0x9fe2, 0xc0d2, 0xc0d3, 0xc0d4, 0x9fe3, 0xc0d5, - 0xc0d6, 0xc0d7, 0xc0d8, 0x9fe4, 0x9fe5, 0x9fe6, 0xc0d9, 0x9fe7, - 0xc0da, 0xc0db, 0x9fe8, 0x9fe9, 0xc0dc, 0x9fea, 0xc0dd, 0xc0de, - 0xc0df, 0x9feb, 0xc0e0, 0x9fec, 0x9fed, 0x9fee, 0x9fef, 0x9ff0, - 0xc0e1, 0xc0e2, 0x9ff1, 0xc0e3, 0xc0e4, 0xc0e5, 0xc0e6, 0x9ff2, - 0x9ff3, 0x9ff4, 0x9ff5, 0x9ff6, 0xc0e7, 0xc0e8, 0x9ff7, 0x9ff8, - 0xc0e9, 0x9ff9, 0x9ffa, 0x9ffb, 0xc0ea, 0x9ffc, 0x9ffd, 0x9ffe, - 0xa041, 0xa042, 0xa043, 0xa044, 0xc0eb, 0xc0ec, 0xa045, 0xc0ed, - 0xc0ee, 0xc0ef, 0xa046, 0xa047, 0xa048, 0xa049, 0xa04a, 0xa04b, - 0xc0f0, 0xc0f1, 0xa04c, 0xa04d, 0xc0f2, 0xa04e, 0xc0f3, 0xa04f, - 0xc0f4, 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xa055, 0xa056, - 0xc0f5, 0xa057, 0xa058, 0xa059, 0xa05a, 0xc0f6, 0xa061, 0xa062, - 0xa063, 0xa064, 0xa065, 0xa066, 0xc0f7, 0xa067, 0xa068, 0xa069, - 0xc0f8, 0xa06a, 0xa06b, 0xa06c, 0xc0f9, 0xa06d, 0xa06e, 0xa06f, - 0xa070, 0xa071, 0xa072, 0xa073, 0xa074, 0xa075, 0xa076, 0xa077, - 0xa078, 0xa079, 0xa07a, 0xa081, 0xa082, 0xa083, 0xa084, 0xa085, - /* 0xc800 .. 0xc8ff */ - 0xc0fa, 0xc0fb, 0xa086, 0xa087, 0xc0fc, 0xa088, 0xa089, 0xa08a, - 0xc0fd, 0xa08b, 0xc0fe, 0xa08c, 0xa08d, 0xa08e, 0xa08f, 0xa090, - 0xc1a1, 0xc1a2, 0xa091, 0xc1a3, 0xa092, 0xc1a4, 0xc1a5, 0xa093, - 0xa094, 0xa095, 0xa096, 0xa097, 0xc1a6, 0xc1a7, 0xa098, 0xa099, - 0xc1a8, 0xa09a, 0xa09b, 0xa09c, 0xc1a9, 0xa09d, 0xa09e, 0xa09f, - 0xa0a0, 0xa0a1, 0xa0a2, 0xa0a3, 0xc1aa, 0xc1ab, 0xa0a4, 0xc1ac, - 0xa0a5, 0xc1ad, 0xa0a6, 0xa0a7, 0xa0a8, 0xa0a9, 0xa0aa, 0xa0ab, - 0xc1ae, 0xa0ac, 0xa0ad, 0xa0ae, 0xc1af, 0xa0af, 0xa0b0, 0xa0b1, - 0xc1b0, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xa0b6, 0xa0b7, 0xa0b8, - 0xc1b1, 0xc1b2, 0xa0b9, 0xa0ba, 0xc1b3, 0xc1b4, 0xa0bb, 0xa0bc, - 0xa0bd, 0xa0be, 0xa0bf, 0xa0c0, 0xc1b5, 0xa0c1, 0xa0c2, 0xa0c3, - 0xa0c4, 0xa0c5, 0xa0c6, 0xa0c7, 0xa0c8, 0xa0c9, 0xa0ca, 0xa0cb, - 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, 0xa0d0, 0xa0d1, 0xa0d2, 0xa0d3, - 0xa0d4, 0xa0d5, 0xa0d6, 0xa0d7, 0xa0d8, 0xa0d9, 0xa0da, 0xa0db, - 0xc1b6, 0xc1b7, 0xa0dc, 0xa0dd, 0xc1b8, 0xa0de, 0xa0df, 0xa0e0, - 0xc1b9, 0xa0e1, 0xc1ba, 0xa0e2, 0xa0e3, 0xa0e4, 0xa0e5, 0xa0e6, - 0xc1bb, 0xc1bc, 0xa0e7, 0xc1bd, 0xa0e8, 0xc1be, 0xc1bf, 0xc1c0, - 0xa0e9, 0xa0ea, 0xa0eb, 0xc1c1, 0xc1c2, 0xc1c3, 0xa0ec, 0xa0ed, - 0xa0ee, 0xa0ef, 0xa0f0, 0xa0f1, 0xc1c4, 0xa0f2, 0xa0f3, 0xa0f4, - 0xa0f5, 0xa0f6, 0xa0f7, 0xa0f8, 0xa0f9, 0xc1c5, 0xa0fa, 0xc1c6, - 0xa0fb, 0xc1c7, 0xa0fc, 0xa0fd, 0xa0fe, 0xa141, 0xa142, 0xa143, - 0xc1c8, 0xa144, 0xa145, 0xa146, 0xa147, 0xa148, 0xa149, 0xa14a, - 0xa14b, 0xa14c, 0xa14d, 0xa14e, 0xa14f, 0xa150, 0xa151, 0xa152, - 0xa153, 0xa154, 0xa155, 0xa156, 0xc1c9, 0xc1ca, 0xa157, 0xa158, - 0xa159, 0xa15a, 0xa161, 0xa162, 0xc1cb, 0xa163, 0xa164, 0xa165, - 0xc1cc, 0xa166, 0xa167, 0xa168, 0xc1cd, 0xa169, 0xa16a, 0xa16b, - 0xa16c, 0xa16d, 0xa16e, 0xa16f, 0xc1ce, 0xc1cf, 0xa170, 0xc1d0, - 0xa171, 0xc1d1, 0xa172, 0xa173, 0xa174, 0xa175, 0xa176, 0xa177, - 0xc1d2, 0xc1d3, 0xa178, 0xa179, 0xc1d4, 0xa17a, 0xa181, 0xa182, - 0xa183, 0xa184, 0xa185, 0xa186, 0xa187, 0xa188, 0xa189, 0xa18a, - 0xa18b, 0xa18c, 0xa18d, 0xa18e, 0xa18f, 0xc1d5, 0xa190, 0xa191, - 0xa192, 0xa193, 0xa194, 0xa195, 0xc1d6, 0xc1d7, 0xa196, 0xa197, - /* 0xc900 .. 0xc9ff */ - 0xc1d8, 0xa198, 0xa199, 0xa19a, 0xc1d9, 0xc1da, 0xc1db, 0xa19b, - 0xa19c, 0xa19d, 0xa19e, 0xa19f, 0xc1dc, 0xc1dd, 0xa1a0, 0xc1de, - 0xa241, 0xc1df, 0xa242, 0xa243, 0xa244, 0xa245, 0xa246, 0xa247, - 0xc1e0, 0xa248, 0xa249, 0xa24a, 0xa24b, 0xa24c, 0xa24d, 0xa24e, - 0xa24f, 0xa250, 0xa251, 0xa252, 0xa253, 0xa254, 0xa255, 0xa256, - 0xa257, 0xa258, 0xa259, 0xa25a, 0xc1e1, 0xa261, 0xa262, 0xa263, - 0xa264, 0xa265, 0xa266, 0xa267, 0xc1e2, 0xa268, 0xa269, 0xa26a, - 0xa26b, 0xa26c, 0xa26d, 0xa26e, 0xa26f, 0xa270, 0xa271, 0xa272, - 0xa273, 0xa274, 0xa275, 0xa276, 0xa277, 0xa278, 0xa279, 0xa27a, - 0xa281, 0xa282, 0xa283, 0xa284, 0xa285, 0xa286, 0xa287, 0xa288, - 0xc1e3, 0xc1e4, 0xa289, 0xa28a, 0xc1e5, 0xa28b, 0xa28c, 0xa28d, - 0xc1e6, 0xa28e, 0xa28f, 0xa290, 0xa291, 0xa292, 0xa293, 0xa294, - 0xc1e7, 0xc1e8, 0xa295, 0xc1e9, 0xa296, 0xa297, 0xa298, 0xa299, - 0xa29a, 0xa29b, 0xa29c, 0xa29d, 0xc1ea, 0xa29e, 0xa29f, 0xa2a0, - 0xc1eb, 0xa341, 0xa342, 0xa343, 0xc1ec, 0xa344, 0xa345, 0xa346, - 0xa347, 0xa348, 0xa349, 0xa34a, 0xc1ed, 0xa34b, 0xa34c, 0xa34d, - 0xa34e, 0xa34f, 0xa350, 0xa351, 0xa352, 0xa353, 0xa354, 0xa355, - 0xc1ee, 0xc1ef, 0xa356, 0xa357, 0xc1f0, 0xa358, 0xa359, 0xa35a, - 0xc1f1, 0xa361, 0xa362, 0xa363, 0xa364, 0xa365, 0xa366, 0xa367, - 0xc1f2, 0xc1f3, 0xa368, 0xc1f4, 0xa369, 0xc1f5, 0xa36a, 0xa36b, - 0xa36c, 0xa36d, 0xa36e, 0xa36f, 0xa370, 0xa371, 0xa372, 0xa373, - 0xa374, 0xa375, 0xa376, 0xa377, 0xa378, 0xa379, 0xa37a, 0xa381, - 0xa382, 0xa383, 0xa384, 0xa385, 0xa386, 0xa387, 0xa388, 0xa389, - 0xa38a, 0xa38b, 0xa38c, 0xa38d, 0xa38e, 0xa38f, 0xa390, 0xa391, - 0xc1f6, 0xc1f7, 0xa392, 0xa393, 0xc1f8, 0xa394, 0xa395, 0xc1f9, - 0xc1fa, 0xa396, 0xc1fb, 0xa397, 0xa398, 0xa399, 0xa39a, 0xa39b, - 0xc1fc, 0xc1fd, 0xa39c, 0xc1fe, 0xa39d, 0xc2a1, 0xc2a2, 0xa39e, - 0xa39f, 0xc2a3, 0xc2a4, 0xa3a0, 0xc2a5, 0xc2a6, 0xa441, 0xa442, - 0xc2a7, 0xa443, 0xc2a8, 0xa444, 0xc2a9, 0xa445, 0xa446, 0xc2aa, - 0xa447, 0xa448, 0xa449, 0xa44a, 0xc2ab, 0xc2ac, 0xa44b, 0xc2ad, - 0xc2ae, 0xc2af, 0xa44c, 0xa44d, 0xa44e, 0xa44f, 0xa450, 0xa451, - 0xc2b0, 0xc2b1, 0xa452, 0xa453, 0xc2b2, 0xa454, 0xa455, 0xa456, - /* 0xca00 .. 0xcaff */ - 0xc2b3, 0xa457, 0xa458, 0xa459, 0xa45a, 0xa461, 0xa462, 0xa463, - 0xc2b4, 0xc2b5, 0xa464, 0xc2b6, 0xc2b7, 0xc2b8, 0xa465, 0xa466, - 0xa467, 0xa468, 0xa469, 0xa46a, 0xc2b9, 0xa46b, 0xa46c, 0xa46d, - 0xc2ba, 0xa46e, 0xa46f, 0xa470, 0xa471, 0xa472, 0xa473, 0xa474, - 0xa475, 0xa476, 0xa477, 0xa478, 0xa479, 0xa47a, 0xa481, 0xa482, - 0xa483, 0xc2bb, 0xa484, 0xa485, 0xa486, 0xa487, 0xa488, 0xa489, - 0xa48a, 0xa48b, 0xa48c, 0xa48d, 0xa48e, 0xa48f, 0xa490, 0xa491, - 0xa492, 0xa493, 0xa494, 0xa495, 0xa496, 0xa497, 0xa498, 0xa499, - 0xa49a, 0xa49b, 0xa49c, 0xa49d, 0xa49e, 0xa49f, 0xa4a0, 0xa541, - 0xa542, 0xa543, 0xa544, 0xa545, 0xc2bc, 0xc2bd, 0xa546, 0xa547, - 0xc2be, 0xa548, 0xa549, 0xa54a, 0xc2bf, 0xa54b, 0xa54c, 0xa54d, - 0xa54e, 0xa54f, 0xa550, 0xa551, 0xc2c0, 0xc2c1, 0xa552, 0xc2c2, - 0xc2c3, 0xc2c4, 0xa553, 0xa554, 0xa555, 0xa556, 0xa557, 0xa558, - 0xc2c5, 0xa559, 0xa55a, 0xa561, 0xa562, 0xa563, 0xa564, 0xa565, - 0xa566, 0xa567, 0xa568, 0xa569, 0xa56a, 0xa56b, 0xa56c, 0xa56d, - 0xa56e, 0xa56f, 0xa570, 0xa571, 0xa572, 0xc2c6, 0xa573, 0xa574, - 0xa575, 0xa576, 0xa577, 0xa578, 0xc2c7, 0xa579, 0xa57a, 0xa581, - 0xa582, 0xa583, 0xa584, 0xa585, 0xa586, 0xa587, 0xa588, 0xa589, - 0xa58a, 0xa58b, 0xa58c, 0xa58d, 0xa58e, 0xa58f, 0xa590, 0xa591, - 0xc2c8, 0xa592, 0xa593, 0xa594, 0xa595, 0xa596, 0xa597, 0xa598, - 0xa599, 0xa59a, 0xa59b, 0xa59c, 0xa59d, 0xa59e, 0xa59f, 0xa5a0, - 0xa641, 0xa642, 0xa643, 0xa644, 0xa645, 0xa646, 0xa647, 0xa648, - 0xa649, 0xa64a, 0xa64b, 0xa64c, 0xa64d, 0xa64e, 0xa64f, 0xa650, - 0xa651, 0xa652, 0xa653, 0xa654, 0xc2c9, 0xc2ca, 0xa655, 0xa656, - 0xc2cb, 0xa657, 0xa658, 0xa659, 0xc2cc, 0xa65a, 0xa661, 0xa662, - 0xa663, 0xa664, 0xa665, 0xa666, 0xc2cd, 0xc2ce, 0xa667, 0xc2cf, - 0xa668, 0xc2d0, 0xa669, 0xc2d1, 0xa66a, 0xa66b, 0xa66c, 0xa66d, - 0xc2d2, 0xc2d3, 0xa66e, 0xa66f, 0xa670, 0xa671, 0xa672, 0xa673, - 0xc2d4, 0xa674, 0xa675, 0xa676, 0xa677, 0xa678, 0xa679, 0xa67a, - 0xa681, 0xa682, 0xa683, 0xa684, 0xc2d5, 0xa685, 0xa686, 0xa687, - 0xa688, 0xa689, 0xa68a, 0xa68b, 0xc2d6, 0xa68c, 0xa68d, 0xa68e, - 0xa68f, 0xa690, 0xa691, 0xa692, 0xa693, 0xa694, 0xa695, 0xa696, - /* 0xcb00 .. 0xcbff */ - 0xa697, 0xa698, 0xa699, 0xa69a, 0xa69b, 0xa69c, 0xa69d, 0xa69e, - 0xc2d7, 0xa69f, 0xa6a0, 0xa741, 0xa742, 0xa743, 0xa744, 0xa745, - 0xc2d8, 0xa746, 0xa747, 0xa748, 0xc2d9, 0xa749, 0xa74a, 0xa74b, - 0xc2da, 0xa74c, 0xa74d, 0xa74e, 0xa74f, 0xa750, 0xa751, 0xa752, - 0xc2db, 0xc2dc, 0xa753, 0xa754, 0xa755, 0xa756, 0xa757, 0xa758, - 0xa759, 0xa75a, 0xa761, 0xa762, 0xa763, 0xa764, 0xa765, 0xa766, - 0xa767, 0xa768, 0xa769, 0xa76a, 0xa76b, 0xa76c, 0xa76d, 0xa76e, - 0xa76f, 0xa770, 0xa771, 0xa772, 0xa773, 0xa774, 0xa775, 0xa776, - 0xa777, 0xc2dd, 0xa778, 0xa779, 0xa77a, 0xa781, 0xa782, 0xa783, - 0xc2de, 0xc2df, 0xa784, 0xa785, 0xc2e0, 0xa786, 0xa787, 0xa788, - 0xc2e1, 0xa789, 0xa78a, 0xa78b, 0xa78c, 0xa78d, 0xa78e, 0xa78f, - 0xc2e2, 0xc2e3, 0xa790, 0xa791, 0xa792, 0xc2e4, 0xa793, 0xa794, - 0xa795, 0xa796, 0xa797, 0xa798, 0xc2e5, 0xa799, 0xa79a, 0xa79b, - 0xa79c, 0xa79d, 0xa79e, 0xa79f, 0xa7a0, 0xa841, 0xa842, 0xa843, - 0xa844, 0xa845, 0xa846, 0xa847, 0xa848, 0xa849, 0xa84a, 0xa84b, - 0xc2e6, 0xc2e7, 0xa84c, 0xa84d, 0xa84e, 0xa84f, 0xa850, 0xa851, - 0xa852, 0xa853, 0xa854, 0xa855, 0xa856, 0xa857, 0xa858, 0xa859, - 0xa85a, 0xa861, 0xa862, 0xa863, 0xa864, 0xa865, 0xa866, 0xa867, - 0xa868, 0xa869, 0xa86a, 0xa86b, 0xa86c, 0xa86d, 0xa86e, 0xa86f, - 0xa870, 0xa871, 0xa872, 0xa873, 0xc2e8, 0xa874, 0xa875, 0xa876, - 0xa877, 0xa878, 0xa879, 0xa87a, 0xa881, 0xa882, 0xa883, 0xa884, - 0xa885, 0xa886, 0xa887, 0xa888, 0xa889, 0xa88a, 0xa88b, 0xa88c, - 0xa88d, 0xa88e, 0xa88f, 0xa890, 0xa891, 0xa892, 0xa893, 0xa894, - 0xc2e9, 0xa895, 0xa896, 0xa897, 0xa898, 0xa899, 0xa89a, 0xa89b, - 0xa89c, 0xa89d, 0xa89e, 0xa89f, 0xa8a0, 0xa941, 0xa942, 0xa943, - 0xa944, 0xa945, 0xa946, 0xa947, 0xa948, 0xa949, 0xa94a, 0xa94b, - 0xa94c, 0xa94d, 0xa94e, 0xa94f, 0xc2ea, 0xa950, 0xa951, 0xa952, - 0xa953, 0xa954, 0xa955, 0xa956, 0xa957, 0xa958, 0xa959, 0xa95a, - 0xa961, 0xa962, 0xa963, 0xa964, 0xc2eb, 0xa965, 0xa966, 0xc2ec, - 0xa967, 0xc2ed, 0xa968, 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, - 0xa96e, 0xa96f, 0xa970, 0xa971, 0xa972, 0xa973, 0xa974, 0xa975, - 0xa976, 0xa977, 0xa978, 0xa979, 0xa97a, 0xa981, 0xa982, 0xa983, - /* 0xcc00 .. 0xccff */ - 0xa984, 0xa985, 0xa986, 0xa987, 0xa988, 0xa989, 0xa98a, 0xa98b, - 0xa98c, 0xa98d, 0xa98e, 0xa98f, 0xc2ee, 0xc2ef, 0xa990, 0xa991, - 0xc2f0, 0xa992, 0xa993, 0xa994, 0xc2f1, 0xa995, 0xa996, 0xa997, - 0xa998, 0xa999, 0xa99a, 0xa99b, 0xc2f2, 0xc2f3, 0xa99c, 0xa99d, - 0xa99e, 0xc2f4, 0xc2f5, 0xa99f, 0xa9a0, 0xaa41, 0xaa42, 0xc2f6, - 0xc2f7, 0xc2f8, 0xaa43, 0xaa44, 0xc2f9, 0xaa45, 0xc2fa, 0xaa46, - 0xc2fb, 0xaa47, 0xaa48, 0xaa49, 0xaa4a, 0xaa4b, 0xaa4c, 0xaa4d, - 0xc2fc, 0xc2fd, 0xaa4e, 0xc2fe, 0xc3a1, 0xc3a2, 0xc3a3, 0xaa4f, - 0xaa50, 0xaa51, 0xaa52, 0xaa53, 0xc3a4, 0xc3a5, 0xaa54, 0xaa55, - 0xc3a6, 0xaa56, 0xaa57, 0xaa58, 0xc3a7, 0xaa59, 0xaa5a, 0xaa61, - 0xaa62, 0xaa63, 0xaa64, 0xaa65, 0xc3a8, 0xc3a9, 0xaa66, 0xc3aa, - 0xc3ab, 0xc3ac, 0xaa67, 0xaa68, 0xaa69, 0xaa6a, 0xaa6b, 0xaa6c, - 0xc3ad, 0xaa6d, 0xaa6e, 0xaa6f, 0xc3ae, 0xaa70, 0xc3af, 0xaa71, - 0xc3b0, 0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xaa76, 0xaa77, 0xaa78, - 0xc3b1, 0xaa79, 0xaa7a, 0xaa81, 0xaa82, 0xc3b2, 0xaa83, 0xaa84, - 0xaa85, 0xaa86, 0xaa87, 0xaa88, 0xaa89, 0xaa8a, 0xaa8b, 0xaa8c, - 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa92, 0xaa93, 0xaa94, - 0xaa95, 0xaa96, 0xaa97, 0xaa98, 0xaa99, 0xaa9a, 0xaa9b, 0xaa9c, - 0xaa9d, 0xaa9e, 0xaa9f, 0xaaa0, 0xab41, 0xab42, 0xab43, 0xab44, - 0xc3b3, 0xc3b4, 0xab45, 0xab46, 0xc3b5, 0xab47, 0xab48, 0xab49, - 0xc3b6, 0xab4a, 0xab4b, 0xab4c, 0xab4d, 0xab4e, 0xab4f, 0xab50, - 0xc3b7, 0xc3b8, 0xab51, 0xc3b9, 0xc3ba, 0xc3bb, 0xab52, 0xab53, - 0xab54, 0xab55, 0xab56, 0xab57, 0xc3bc, 0xc3bd, 0xab58, 0xab59, - 0xc3be, 0xab5a, 0xab61, 0xab62, 0xc3bf, 0xab63, 0xab64, 0xab65, - 0xab66, 0xab67, 0xab68, 0xab69, 0xc3c0, 0xc3c1, 0xab6a, 0xc3c2, - 0xab6b, 0xc3c3, 0xab6c, 0xab6d, 0xab6e, 0xab6f, 0xab70, 0xab71, - 0xc3c4, 0xab72, 0xab73, 0xab74, 0xc3c5, 0xab75, 0xab76, 0xab77, - 0xab78, 0xab79, 0xab7a, 0xab81, 0xab82, 0xab83, 0xab84, 0xab85, - 0xab86, 0xab87, 0xab88, 0xab89, 0xc3c6, 0xab8a, 0xab8b, 0xab8c, - 0xab8d, 0xab8e, 0xab8f, 0xab90, 0xc3c7, 0xab91, 0xab92, 0xab93, - 0xc3c8, 0xab94, 0xab95, 0xab96, 0xab97, 0xab98, 0xab99, 0xab9a, - 0xab9b, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, 0xac41, 0xac42, - /* 0xcd00 .. 0xcdff */ - 0xac43, 0xc3c9, 0xac44, 0xac45, 0xac46, 0xac47, 0xac48, 0xac49, - 0xc3ca, 0xc3cb, 0xac4a, 0xac4b, 0xc3cc, 0xac4c, 0xac4d, 0xac4e, - 0xc3cd, 0xac4f, 0xac50, 0xac51, 0xac52, 0xac53, 0xac54, 0xac55, - 0xc3ce, 0xc3cf, 0xac56, 0xc3d0, 0xac57, 0xc3d1, 0xac58, 0xac59, - 0xac5a, 0xac61, 0xac62, 0xac63, 0xc3d2, 0xac64, 0xac65, 0xac66, - 0xc3d3, 0xac67, 0xac68, 0xac69, 0xc3d4, 0xac6a, 0xac6b, 0xac6c, - 0xac6d, 0xac6e, 0xac6f, 0xac70, 0xac71, 0xac72, 0xac73, 0xac74, - 0xac75, 0xc3d5, 0xac76, 0xac77, 0xac78, 0xac79, 0xac7a, 0xac81, - 0xac82, 0xac83, 0xac84, 0xac85, 0xac86, 0xac87, 0xac88, 0xac89, - 0xac8a, 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, - 0xac92, 0xac93, 0xac94, 0xac95, 0xac96, 0xac97, 0xac98, 0xac99, - 0xac9a, 0xac9b, 0xac9c, 0xac9d, 0xc3d6, 0xac9e, 0xac9f, 0xaca0, - 0xc3d7, 0xad41, 0xad42, 0xad43, 0xc3d8, 0xad44, 0xad45, 0xad46, - 0xad47, 0xad48, 0xad49, 0xad4a, 0xc3d9, 0xc3da, 0xad4b, 0xc3db, - 0xad4c, 0xc3dc, 0xad4d, 0xad4e, 0xad4f, 0xad50, 0xad51, 0xad52, - 0xc3dd, 0xad53, 0xad54, 0xad55, 0xad56, 0xad57, 0xad58, 0xad59, - 0xad5a, 0xad61, 0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67, - 0xc3de, 0xad68, 0xad69, 0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, - 0xad6f, 0xad70, 0xad71, 0xad72, 0xc3df, 0xc3e0, 0xad73, 0xad74, - 0xc3e1, 0xad75, 0xad76, 0xad77, 0xc3e2, 0xad78, 0xad79, 0xad7a, - 0xad81, 0xad82, 0xad83, 0xad84, 0xc3e3, 0xc3e4, 0xad85, 0xc3e5, - 0xad86, 0xc3e6, 0xad87, 0xad88, 0xad89, 0xad8a, 0xad8b, 0xad8c, - 0xc3e7, 0xad8d, 0xad8e, 0xad8f, 0xad90, 0xad91, 0xad92, 0xad93, - 0xad94, 0xad95, 0xad96, 0xad97, 0xad98, 0xad99, 0xad9a, 0xad9b, - 0xad9c, 0xad9d, 0xad9e, 0xad9f, 0xc3e8, 0xada0, 0xae41, 0xae42, - 0xae43, 0xae44, 0xae45, 0xae46, 0xc3e9, 0xae47, 0xae48, 0xae49, - 0xc3ea, 0xae4a, 0xae4b, 0xae4c, 0xae4d, 0xae4e, 0xae4f, 0xae50, - 0xae51, 0xae52, 0xae53, 0xae54, 0xae55, 0xae56, 0xae57, 0xae58, - 0xae59, 0xae5a, 0xae61, 0xae62, 0xae63, 0xae64, 0xae65, 0xae66, - 0xc3eb, 0xae67, 0xae68, 0xae69, 0xc3ec, 0xae6a, 0xae6b, 0xae6c, - 0xc3ed, 0xae6d, 0xae6e, 0xae6f, 0xae70, 0xae71, 0xae72, 0xae73, - 0xc3ee, 0xc3ef, 0xae74, 0xc3f0, 0xae75, 0xc3f1, 0xae76, 0xae77, - /* 0xce00 .. 0xceff */ - 0xae78, 0xae79, 0xae7a, 0xae81, 0xc3f2, 0xae82, 0xae83, 0xae84, - 0xc3f3, 0xae85, 0xae86, 0xae87, 0xc3f4, 0xae88, 0xae89, 0xae8a, - 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xc3f5, 0xae8f, 0xae90, 0xae91, - 0xae92, 0xc3f6, 0xae93, 0xae94, 0xae95, 0xae96, 0xae97, 0xae98, - 0xc3f7, 0xc3f8, 0xae99, 0xae9a, 0xc3f9, 0xae9b, 0xae9c, 0xae9d, - 0xc3fa, 0xae9e, 0xae9f, 0xaea0, 0xaf41, 0xaf42, 0xaf43, 0xaf44, - 0xc3fb, 0xc3fc, 0xaf45, 0xc3fd, 0xaf46, 0xc3fe, 0xaf47, 0xaf48, - 0xaf49, 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e, 0xaf4f, 0xaf50, - 0xaf51, 0xaf52, 0xaf53, 0xaf54, 0xaf55, 0xaf56, 0xaf57, 0xaf58, - 0xaf59, 0xaf5a, 0xaf61, 0xaf62, 0xaf63, 0xaf64, 0xaf65, 0xaf66, - 0xaf67, 0xaf68, 0xaf69, 0xaf6a, 0xaf6b, 0xaf6c, 0xaf6d, 0xaf6e, - 0xc4a1, 0xc4a2, 0xaf6f, 0xaf70, 0xc4a3, 0xaf71, 0xaf72, 0xc4a4, - 0xc4a5, 0xc4a6, 0xaf73, 0xaf74, 0xaf75, 0xaf76, 0xaf77, 0xaf78, - 0xc4a7, 0xc4a8, 0xaf79, 0xc4a9, 0xaf7a, 0xc4aa, 0xaf81, 0xaf82, - 0xaf83, 0xaf84, 0xaf85, 0xaf86, 0xc4ab, 0xc4ac, 0xaf87, 0xaf88, - 0xc4ad, 0xaf89, 0xaf8a, 0xaf8b, 0xc4ae, 0xaf8c, 0xaf8d, 0xaf8e, - 0xaf8f, 0xaf90, 0xaf91, 0xaf92, 0xc4af, 0xc4b0, 0xaf93, 0xc4b1, - 0xaf94, 0xc4b2, 0xaf95, 0xaf96, 0xaf97, 0xaf98, 0xaf99, 0xaf9a, - 0xc4b3, 0xc4b4, 0xaf9b, 0xaf9c, 0xc4b5, 0xaf9d, 0xaf9e, 0xaf9f, - 0xc4b6, 0xafa0, 0xb041, 0xb042, 0xb043, 0xb044, 0xb045, 0xb046, - 0xc4b7, 0xc4b8, 0xb047, 0xc4b9, 0xc4ba, 0xc4bb, 0xb048, 0xb049, - 0xb04a, 0xb04b, 0xb04c, 0xb04d, 0xc4bc, 0xc4bd, 0xb04e, 0xb04f, - 0xb050, 0xb051, 0xb052, 0xb053, 0xb054, 0xb055, 0xb056, 0xb057, - 0xb058, 0xb059, 0xb05a, 0xb061, 0xb062, 0xb063, 0xb064, 0xb065, - 0xb066, 0xc4be, 0xb067, 0xb068, 0xb069, 0xb06a, 0xb06b, 0xb06c, - 0xb06d, 0xb06e, 0xb06f, 0xb070, 0xb071, 0xb072, 0xb073, 0xb074, - 0xb075, 0xb076, 0xb077, 0xb078, 0xb079, 0xb07a, 0xb081, 0xb082, - 0xb083, 0xb084, 0xb085, 0xb086, 0xb087, 0xb088, 0xb089, 0xb08a, - 0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xc4bf, 0xc4c0, 0xb08f, 0xb090, - 0xc4c1, 0xb091, 0xb092, 0xc4c2, 0xc4c3, 0xb093, 0xb094, 0xb095, - 0xb096, 0xb097, 0xb098, 0xb099, 0xc4c4, 0xc4c5, 0xb09a, 0xc4c6, - 0xc4c7, 0xc4c8, 0xb09b, 0xb09c, 0xb09d, 0xb09e, 0xb09f, 0xb0a0, - /* 0xcf00 .. 0xcfff */ - 0xc4c9, 0xc4ca, 0xb141, 0xb142, 0xc4cb, 0xb143, 0xb144, 0xb145, - 0xc4cc, 0xb146, 0xb147, 0xb148, 0xb149, 0xb14a, 0xb14b, 0xb14c, - 0xc4cd, 0xc4ce, 0xb14d, 0xc4cf, 0xb14e, 0xc4d0, 0xb14f, 0xb150, - 0xb151, 0xb152, 0xb153, 0xb154, 0xc4d1, 0xb155, 0xb156, 0xb157, - 0xc4d2, 0xb158, 0xb159, 0xb15a, 0xc4d3, 0xb161, 0xb162, 0xb163, - 0xb164, 0xb165, 0xb166, 0xb167, 0xc4d4, 0xc4d5, 0xb168, 0xc4d6, - 0xc4d7, 0xc4d8, 0xb169, 0xb16a, 0xb16b, 0xb16c, 0xb16d, 0xb16e, - 0xc4d9, 0xb16f, 0xb170, 0xb171, 0xb172, 0xb173, 0xb174, 0xb175, - 0xb176, 0xb177, 0xb178, 0xb179, 0xb17a, 0xb181, 0xb182, 0xb183, - 0xb184, 0xb185, 0xb186, 0xb187, 0xb188, 0xb189, 0xb18a, 0xb18b, - 0xb18c, 0xb18d, 0xb18e, 0xb18f, 0xc4da, 0xc4db, 0xb190, 0xb191, - 0xc4dc, 0xb192, 0xb193, 0xb194, 0xc4dd, 0xb195, 0xb196, 0xb197, - 0xb198, 0xb199, 0xb19a, 0xb19b, 0xc4de, 0xc4df, 0xb19c, 0xc4e0, - 0xb19d, 0xc4e1, 0xb19e, 0xb19f, 0xb1a0, 0xb241, 0xb242, 0xb243, - 0xc4e2, 0xc4e3, 0xb244, 0xb245, 0xc4e4, 0xb246, 0xb247, 0xb248, - 0xc4e5, 0xb249, 0xb24a, 0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, - 0xc4e6, 0xb250, 0xb251, 0xb252, 0xb253, 0xc4e7, 0xb254, 0xb255, - 0xb256, 0xb257, 0xb258, 0xb259, 0xc4e8, 0xb25a, 0xb261, 0xb262, - 0xb263, 0xb264, 0xb265, 0xb266, 0xb267, 0xb268, 0xb269, 0xb26a, - 0xb26b, 0xb26c, 0xb26d, 0xb26e, 0xb26f, 0xb270, 0xb271, 0xb272, - 0xb273, 0xc4e9, 0xb274, 0xb275, 0xb276, 0xb277, 0xb278, 0xb279, - 0xc4ea, 0xb27a, 0xb281, 0xb282, 0xb283, 0xb284, 0xb285, 0xb286, - 0xc4eb, 0xb287, 0xb288, 0xb289, 0xb28a, 0xb28b, 0xb28c, 0xb28d, - 0xb28e, 0xb28f, 0xb290, 0xb291, 0xb292, 0xb293, 0xb294, 0xb295, - 0xb296, 0xb297, 0xb298, 0xb299, 0xc4ec, 0xb29a, 0xb29b, 0xb29c, - 0xb29d, 0xb29e, 0xb29f, 0xb2a0, 0xb341, 0xb342, 0xb343, 0xb344, - 0xb345, 0xb346, 0xb347, 0xb348, 0xb349, 0xb34a, 0xb34b, 0xb34c, - 0xb34d, 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb352, 0xb353, 0xb354, - 0xc4ed, 0xc4ee, 0xb355, 0xb356, 0xc4ef, 0xb357, 0xb358, 0xb359, - 0xc4f0, 0xb35a, 0xb361, 0xb362, 0xb363, 0xb364, 0xb365, 0xb366, - 0xc4f1, 0xc4f2, 0xb367, 0xc4f3, 0xb368, 0xc4f4, 0xb369, 0xb36a, - 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xc4f5, 0xb36f, 0xb370, 0xb371, - /* 0xd000 .. 0xd0ff */ - 0xc4f6, 0xb372, 0xb373, 0xb374, 0xc4f7, 0xb375, 0xb376, 0xb377, - 0xb378, 0xb379, 0xb37a, 0xb381, 0xb382, 0xb383, 0xb384, 0xb385, - 0xb386, 0xc4f8, 0xb387, 0xb388, 0xb389, 0xb38a, 0xb38b, 0xb38c, - 0xc4f9, 0xb38d, 0xb38e, 0xb38f, 0xb390, 0xb391, 0xb392, 0xb393, - 0xb394, 0xb395, 0xb396, 0xb397, 0xb398, 0xb399, 0xb39a, 0xb39b, - 0xb39c, 0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xc4fa, 0xb441, 0xb442, - 0xb443, 0xb444, 0xb445, 0xb446, 0xc4fb, 0xc4fc, 0xb447, 0xb448, - 0xc4fd, 0xb449, 0xb44a, 0xb44b, 0xc4fe, 0xb44c, 0xb44d, 0xb44e, - 0xb44f, 0xb450, 0xb451, 0xb452, 0xc5a1, 0xc5a2, 0xb453, 0xc5a3, - 0xb454, 0xc5a4, 0xb455, 0xb456, 0xb457, 0xb458, 0xb459, 0xb45a, - 0xc5a5, 0xb461, 0xb462, 0xb463, 0xc5a6, 0xb464, 0xb465, 0xb466, - 0xc5a7, 0xb467, 0xb468, 0xb469, 0xb46a, 0xb46b, 0xb46c, 0xb46d, - 0xc5a8, 0xb46e, 0xb46f, 0xb470, 0xb471, 0xb472, 0xb473, 0xb474, - 0xb475, 0xb476, 0xb477, 0xb478, 0xc5a9, 0xc5aa, 0xb479, 0xb47a, - 0xc5ab, 0xb481, 0xb482, 0xb483, 0xc5ac, 0xb484, 0xb485, 0xb486, - 0xb487, 0xb488, 0xb489, 0xb48a, 0xc5ad, 0xc5ae, 0xb48b, 0xb48c, - 0xb48d, 0xc5af, 0xb48e, 0xb48f, 0xb490, 0xb491, 0xb492, 0xb493, - 0xb494, 0xb495, 0xb496, 0xb497, 0xb498, 0xb499, 0xb49a, 0xb49b, - 0xb49c, 0xb49d, 0xb49e, 0xb49f, 0xb4a0, 0xb541, 0xb542, 0xb543, - 0xb544, 0xb545, 0xb546, 0xb547, 0xb548, 0xb549, 0xb54a, 0xb54b, - 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xc5b0, 0xc5b1, 0xb550, 0xb551, - 0xc5b2, 0xb552, 0xb553, 0xb554, 0xc5b3, 0xb555, 0xb556, 0xb557, - 0xb558, 0xb559, 0xb55a, 0xb561, 0xc5b4, 0xc5b5, 0xb562, 0xc5b6, - 0xb563, 0xc5b7, 0xb564, 0xb565, 0xb566, 0xb567, 0xb568, 0xb569, - 0xc5b8, 0xc5b9, 0xb56a, 0xb56b, 0xc5ba, 0xb56c, 0xb56d, 0xb56e, - 0xc5bb, 0xc5bc, 0xb56f, 0xb570, 0xb571, 0xb572, 0xb573, 0xb574, - 0xc5bd, 0xc5be, 0xb575, 0xc5bf, 0xc5c0, 0xc5c1, 0xb576, 0xb577, - 0xb578, 0xb579, 0xb57a, 0xb581, 0xc5c2, 0xc5c3, 0xb582, 0xb583, - 0xc5c4, 0xb584, 0xb585, 0xb586, 0xc5c5, 0xb587, 0xb588, 0xb589, - 0xb58a, 0xb58b, 0xb58c, 0xb58d, 0xc5c6, 0xc5c7, 0xb58e, 0xc5c8, - 0xc5c9, 0xc5ca, 0xb58f, 0xb590, 0xb591, 0xb592, 0xb593, 0xb594, - 0xc5cb, 0xb595, 0xb596, 0xb597, 0xb598, 0xb599, 0xb59a, 0xb59b, - /* 0xd100 .. 0xd1ff */ - 0xb59c, 0xb59d, 0xb59e, 0xb59f, 0xb5a0, 0xb641, 0xb642, 0xb643, - 0xb644, 0xb645, 0xb646, 0xb647, 0xb648, 0xc5cc, 0xb649, 0xb64a, - 0xb64b, 0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651, 0xb652, - 0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659, 0xb65a, - 0xb661, 0xb662, 0xb663, 0xb664, 0xb665, 0xb666, 0xb667, 0xb668, - 0xb669, 0xb66a, 0xb66b, 0xb66c, 0xb66d, 0xb66e, 0xb66f, 0xb670, - 0xc5cd, 0xc5ce, 0xb671, 0xb672, 0xc5cf, 0xb673, 0xb674, 0xb675, - 0xc5d0, 0xb676, 0xc5d1, 0xb677, 0xb678, 0xb679, 0xb67a, 0xb681, - 0xc5d2, 0xc5d3, 0xb682, 0xc5d4, 0xc5d5, 0xc5d6, 0xb683, 0xb684, - 0xb685, 0xb686, 0xb687, 0xb688, 0xc5d7, 0xc5d8, 0xb689, 0xb68a, - 0xc5d9, 0xb68b, 0xb68c, 0xb68d, 0xc5da, 0xb68e, 0xb68f, 0xb690, - 0xb691, 0xb692, 0xb693, 0xb694, 0xc5db, 0xc5dc, 0xb695, 0xc5dd, - 0xb696, 0xc5de, 0xb697, 0xb698, 0xb699, 0xb69a, 0xb69b, 0xb69c, - 0xc5df, 0xb69d, 0xb69e, 0xb69f, 0xc5e0, 0xb6a0, 0xb741, 0xb742, - 0xb743, 0xb744, 0xb745, 0xb746, 0xb747, 0xb748, 0xb749, 0xb74a, - 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xc5e1, 0xb74f, 0xb750, 0xb751, - 0xb752, 0xb753, 0xb754, 0xb755, 0xc5e2, 0xb756, 0xb757, 0xb758, - 0xc5e3, 0xb759, 0xb75a, 0xb761, 0xb762, 0xb763, 0xb764, 0xb765, - 0xb766, 0xb767, 0xb768, 0xb769, 0xb76a, 0xb76b, 0xb76c, 0xb76d, - 0xb76e, 0xb76f, 0xb770, 0xb771, 0xb772, 0xb773, 0xb774, 0xb775, - 0xc5e4, 0xc5e5, 0xb776, 0xb777, 0xc5e6, 0xb778, 0xb779, 0xb77a, - 0xc5e7, 0xb781, 0xb782, 0xb783, 0xb784, 0xb785, 0xb786, 0xb787, - 0xc5e8, 0xc5e9, 0xb788, 0xc5ea, 0xb789, 0xc5eb, 0xb78a, 0xb78b, - 0xb78c, 0xb78d, 0xc5ec, 0xb78e, 0xc5ed, 0xb78f, 0xb790, 0xb791, - 0xc5ee, 0xb792, 0xb793, 0xb794, 0xb795, 0xb796, 0xb797, 0xb798, - 0xb799, 0xb79a, 0xb79b, 0xb79c, 0xb79d, 0xb79e, 0xb79f, 0xb7a0, - 0xb841, 0xb842, 0xb843, 0xb844, 0xb845, 0xb846, 0xb847, 0xb848, - 0xc5ef, 0xb849, 0xb84a, 0xb84b, 0xb84c, 0xb84d, 0xb84e, 0xb84f, - 0xb850, 0xb851, 0xb852, 0xb853, 0xb854, 0xb855, 0xb856, 0xb857, - 0xb858, 0xb859, 0xb85a, 0xb861, 0xb862, 0xb863, 0xb864, 0xb865, - 0xb866, 0xb867, 0xb868, 0xb869, 0xc5f0, 0xb86a, 0xb86b, 0xb86c, - 0xc5f1, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xb871, 0xb872, 0xb873, - /* 0xd200 .. 0xd2ff */ - 0xb874, 0xb875, 0xb876, 0xb877, 0xb878, 0xb879, 0xb87a, 0xc5f2, - 0xb881, 0xc5f3, 0xb882, 0xb883, 0xb884, 0xb885, 0xb886, 0xb887, - 0xc5f4, 0xb888, 0xb889, 0xb88a, 0xb88b, 0xb88c, 0xb88d, 0xb88e, - 0xb88f, 0xb890, 0xb891, 0xb892, 0xb893, 0xb894, 0xb895, 0xb896, - 0xb897, 0xb898, 0xb899, 0xb89a, 0xb89b, 0xb89c, 0xb89d, 0xb89e, - 0xb89f, 0xb8a0, 0xb941, 0xb942, 0xc5f5, 0xc5f6, 0xb943, 0xb944, - 0xc5f7, 0xb945, 0xb946, 0xb947, 0xc5f8, 0xb948, 0xb949, 0xb94a, - 0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xc5f9, 0xc5fa, 0xb94f, 0xc5fb, - 0xb950, 0xc5fc, 0xb951, 0xb952, 0xb953, 0xb954, 0xb955, 0xb956, - 0xc5fd, 0xb957, 0xb958, 0xb959, 0xb95a, 0xb961, 0xb962, 0xb963, - 0xb964, 0xb965, 0xb966, 0xb967, 0xb968, 0xb969, 0xb96a, 0xb96b, - 0xb96c, 0xb96d, 0xb96e, 0xb96f, 0xc5fe, 0xb970, 0xb971, 0xb972, - 0xb973, 0xb974, 0xb975, 0xb976, 0xc6a1, 0xb977, 0xb978, 0xb979, - 0xb97a, 0xb981, 0xb982, 0xb983, 0xb984, 0xb985, 0xb986, 0xb987, - 0xb988, 0xb989, 0xb98a, 0xb98b, 0xb98c, 0xb98d, 0xb98e, 0xb98f, - 0xb990, 0xb991, 0xb992, 0xb993, 0xb994, 0xb995, 0xb996, 0xb997, - 0xc6a2, 0xc6a3, 0xb998, 0xb999, 0xc6a4, 0xb99a, 0xb99b, 0xb99c, - 0xc6a5, 0xb99d, 0xb99e, 0xb99f, 0xb9a0, 0xba41, 0xba42, 0xba43, - 0xc6a6, 0xc6a7, 0xba44, 0xba45, 0xba46, 0xc6a8, 0xba47, 0xba48, - 0xba49, 0xba4a, 0xba4b, 0xba4c, 0xc6a9, 0xba4d, 0xba4e, 0xba4f, - 0xc6aa, 0xba50, 0xba51, 0xba52, 0xc6ab, 0xba53, 0xba54, 0xba55, - 0xba56, 0xba57, 0xba58, 0xba59, 0xc6ac, 0xba5a, 0xba61, 0xba62, - 0xba63, 0xc6ad, 0xba64, 0xba65, 0xba66, 0xba67, 0xba68, 0xba69, - 0xc6ae, 0xc6af, 0xba6a, 0xba6b, 0xc6b0, 0xba6c, 0xba6d, 0xc6b1, - 0xc6b2, 0xba6e, 0xc6b3, 0xba6f, 0xba70, 0xba71, 0xba72, 0xba73, - 0xc6b4, 0xc6b5, 0xba74, 0xc6b6, 0xba75, 0xba76, 0xba77, 0xba78, - 0xba79, 0xba7a, 0xba81, 0xba82, 0xc6b7, 0xba83, 0xba84, 0xba85, - 0xc6b8, 0xba86, 0xba87, 0xba88, 0xc6b9, 0xba89, 0xba8a, 0xba8b, - 0xba8c, 0xba8d, 0xba8e, 0xba8f, 0xc6ba, 0xc6bb, 0xba90, 0xba91, - 0xba92, 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, - 0xc6bc, 0xc6bd, 0xba9a, 0xba9b, 0xc6be, 0xba9c, 0xba9d, 0xba9e, - 0xc6bf, 0xba9f, 0xbaa0, 0xbb41, 0xbb42, 0xbb43, 0xbb44, 0xbb45, - /* 0xd300 .. 0xd3ff */ - 0xc6c0, 0xc6c1, 0xbb46, 0xc6c2, 0xbb47, 0xc6c3, 0xbb48, 0xbb49, - 0xbb4a, 0xbb4b, 0xbb4c, 0xbb4d, 0xc6c4, 0xc6c5, 0xc6c6, 0xbb4e, - 0xc6c7, 0xbb4f, 0xbb50, 0xbb51, 0xc6c8, 0xbb52, 0xc6c9, 0xbb53, - 0xbb54, 0xbb55, 0xbb56, 0xbb57, 0xc6ca, 0xc6cb, 0xbb58, 0xc6cc, - 0xc6cd, 0xc6ce, 0xbb59, 0xbb5a, 0xbb61, 0xc6cf, 0xbb62, 0xbb63, - 0xc6d0, 0xc6d1, 0xbb64, 0xbb65, 0xc6d2, 0xbb66, 0xbb67, 0xbb68, - 0xc6d3, 0xbb69, 0xbb6a, 0xbb6b, 0xbb6c, 0xbb6d, 0xbb6e, 0xbb6f, - 0xc6d4, 0xc6d5, 0xbb70, 0xc6d6, 0xc6d7, 0xc6d8, 0xbb71, 0xbb72, - 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xc6d9, 0xc6da, 0xbb77, 0xbb78, - 0xbb79, 0xbb7a, 0xbb81, 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, - 0xbb87, 0xbb88, 0xbb89, 0xbb8a, 0xbb8b, 0xbb8c, 0xbb8d, 0xbb8e, - 0xbb8f, 0xbb90, 0xbb91, 0xbb92, 0xbb93, 0xbb94, 0xbb95, 0xbb96, - 0xbb97, 0xbb98, 0xbb99, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d, 0xbb9e, - 0xbb9f, 0xbba0, 0xbc41, 0xbc42, 0xbc43, 0xbc44, 0xbc45, 0xbc46, - 0xbc47, 0xbc48, 0xbc49, 0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, - 0xbc4f, 0xbc50, 0xbc51, 0xbc52, 0xc6db, 0xc6dc, 0xbc53, 0xbc54, - 0xc6dd, 0xbc55, 0xbc56, 0xbc57, 0xc6de, 0xbc58, 0xbc59, 0xbc5a, - 0xbc61, 0xbc62, 0xbc63, 0xbc64, 0xc6df, 0xc6e0, 0xbc65, 0xc6e1, - 0xc6e2, 0xc6e3, 0xbc66, 0xbc67, 0xbc68, 0xbc69, 0xbc6a, 0xbc6b, - 0xc6e4, 0xc6e5, 0xbc6c, 0xbc6d, 0xc6e6, 0xbc6e, 0xbc6f, 0xbc70, - 0xc6e7, 0xbc71, 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, 0xbc77, - 0xc6e8, 0xc6e9, 0xbc78, 0xc6ea, 0xbc79, 0xc6eb, 0xbc7a, 0xbc81, - 0xbc82, 0xbc83, 0xbc84, 0xbc85, 0xc6ec, 0xbc86, 0xbc87, 0xbc88, - 0xc6ed, 0xbc89, 0xbc8a, 0xbc8b, 0xc6ee, 0xbc8c, 0xbc8d, 0xbc8e, - 0xbc8f, 0xbc90, 0xbc91, 0xbc92, 0xc6ef, 0xc6f0, 0xbc93, 0xbc94, - 0xc6f1, 0xc6f2, 0xbc95, 0xbc96, 0xbc97, 0xbc98, 0xbc99, 0xbc9a, - 0xc6f3, 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0xbca0, 0xbd41, - 0xc6f4, 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48, - 0xbd49, 0xc6f5, 0xbd4a, 0xc6f6, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, - 0xbd4f, 0xbd50, 0xbd51, 0xbd52, 0xc6f7, 0xc6f8, 0xbd53, 0xbd54, - 0xc6f9, 0xbd55, 0xbd56, 0xbd57, 0xc6fa, 0xbd58, 0xbd59, 0xbd5a, - 0xbd61, 0xbd62, 0xbd63, 0xbd64, 0xc6fb, 0xc6fc, 0xbd65, 0xc6fd, - /* 0xd400 .. 0xd4ff */ - 0xbd66, 0xc6fe, 0xbd67, 0xbd68, 0xbd69, 0xbd6a, 0xbd6b, 0xbd6c, - 0xc7a1, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71, 0xbd72, 0xbd73, - 0xbd74, 0xbd75, 0xbd76, 0xbd77, 0xbd78, 0xbd79, 0xbd7a, 0xbd81, - 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xc7a2, 0xbd87, 0xbd88, - 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, 0xbd90, - 0xbd91, 0xbd92, 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, 0xbd98, - 0xbd99, 0xbd9a, 0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, 0xbda0, - 0xbe41, 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, 0xbe47, 0xbe48, - 0xc7a3, 0xbe49, 0xbe4a, 0xbe4b, 0xc7a4, 0xbe4c, 0xbe4d, 0xbe4e, - 0xbe4f, 0xbe50, 0xbe51, 0xbe52, 0xbe53, 0xbe54, 0xbe55, 0xbe56, - 0xbe57, 0xbe58, 0xbe59, 0xbe5a, 0xbe61, 0xbe62, 0xbe63, 0xbe64, - 0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xc7a5, 0xbe69, 0xbe6a, 0xbe6b, - 0xc7a6, 0xbe6c, 0xbe6d, 0xbe6e, 0xc7a7, 0xbe6f, 0xbe70, 0xbe71, - 0xbe72, 0xbe73, 0xbe74, 0xbe75, 0xbe76, 0xc7a8, 0xbe77, 0xc7a9, - 0xbe78, 0xbe79, 0xbe7a, 0xbe81, 0xbe82, 0xbe83, 0xbe84, 0xbe85, - 0xc7aa, 0xc7ab, 0xbe86, 0xbe87, 0xc7ac, 0xbe88, 0xbe89, 0xc7ad, - 0xc7ae, 0xbe8a, 0xc7af, 0xbe8b, 0xbe8c, 0xbe8d, 0xbe8e, 0xbe8f, - 0xc7b0, 0xc7b1, 0xbe90, 0xc7b2, 0xbe91, 0xc7b3, 0xbe92, 0xbe93, - 0xbe94, 0xbe95, 0xbe96, 0xbe97, 0xc7b4, 0xbe98, 0xbe99, 0xbe9a, - 0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e, 0xbe9f, 0xbea0, 0xbf41, 0xbf42, - 0xbf43, 0xbf44, 0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49, 0xbf4a, - 0xbf4b, 0xc7b5, 0xbf4c, 0xbf4d, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51, - 0xbf52, 0xbf53, 0xbf54, 0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59, - 0xbf5a, 0xbf61, 0xbf62, 0xbf63, 0xbf64, 0xbf65, 0xbf66, 0xbf67, - 0xbf68, 0xbf69, 0xbf6a, 0xbf6b, 0xbf6c, 0xbf6d, 0xbf6e, 0xbf6f, - 0xbf70, 0xbf71, 0xbf72, 0xbf73, 0xc7b6, 0xbf74, 0xbf75, 0xbf76, - 0xc7b7, 0xbf77, 0xbf78, 0xbf79, 0xc7b8, 0xbf7a, 0xbf81, 0xbf82, - 0xbf83, 0xbf84, 0xbf85, 0xbf86, 0xc7b9, 0xbf87, 0xbf88, 0xc7ba, - 0xbf89, 0xbf8a, 0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, - 0xc7bb, 0xbf91, 0xbf92, 0xbf93, 0xc7bc, 0xbf94, 0xbf95, 0xbf96, - 0xc7bd, 0xbf97, 0xbf98, 0xbf99, 0xbf9a, 0xbf9b, 0xbf9c, 0xbf9d, - 0xc7be, 0xbf9e, 0xbf9f, 0xc7bf, 0xbfa0, 0xc7c0, 0xc041, 0xc042, - /* 0xd500 .. 0xd5ff */ - 0xc043, 0xc044, 0xc045, 0xc046, 0xc7c1, 0xc047, 0xc048, 0xc049, - 0xc7c2, 0xc04a, 0xc04b, 0xc04c, 0xc7c3, 0xc04d, 0xc04e, 0xc04f, - 0xc050, 0xc051, 0xc052, 0xc053, 0xc7c4, 0xc7c5, 0xc054, 0xc7c6, - 0xc055, 0xc056, 0xc057, 0xc058, 0xc059, 0xc05a, 0xc061, 0xc062, - 0xc063, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068, 0xc069, 0xc06a, - 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070, 0xc071, 0xc072, - 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, 0xc079, 0xc07a, - 0xc081, 0xc082, 0xc083, 0xc084, 0xc7c7, 0xc7c8, 0xc085, 0xc086, - 0xc7c9, 0xc087, 0xc088, 0xc089, 0xc7ca, 0xc08a, 0xc08b, 0xc08c, - 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc7cb, 0xc7cc, 0xc091, 0xc7cd, - 0xc092, 0xc7ce, 0xc093, 0xc094, 0xc095, 0xc096, 0xc097, 0xc098, - 0xc7cf, 0xc7d0, 0xc099, 0xc09a, 0xc7d1, 0xc09b, 0xc09c, 0xc09d, - 0xc7d2, 0xc09e, 0xc09f, 0xc0a0, 0xc141, 0xc7d3, 0xc142, 0xc143, - 0xc7d4, 0xc7d5, 0xc144, 0xc7d6, 0xc145, 0xc7d7, 0xc146, 0xc147, - 0xc148, 0xc149, 0xc14a, 0xc14b, 0xc7d8, 0xc7d9, 0xc14c, 0xc14d, - 0xc7da, 0xc14e, 0xc14f, 0xc150, 0xc7db, 0xc151, 0xc152, 0xc153, - 0xc154, 0xc155, 0xc156, 0xc157, 0xc7dc, 0xc7dd, 0xc158, 0xc7de, - 0xc7df, 0xc7e0, 0xc159, 0xc15a, 0xc161, 0xc162, 0xc163, 0xc164, - 0xc7e1, 0xc165, 0xc166, 0xc167, 0xc168, 0xc169, 0xc16a, 0xc16b, - 0xc16c, 0xc16d, 0xc16e, 0xc16f, 0xc170, 0xc171, 0xc172, 0xc173, - 0xc174, 0xc175, 0xc176, 0xc177, 0xc178, 0xc7e2, 0xc179, 0xc17a, - 0xc181, 0xc182, 0xc183, 0xc184, 0xc185, 0xc186, 0xc187, 0xc188, - 0xc189, 0xc18a, 0xc18b, 0xc18c, 0xc18d, 0xc18e, 0xc18f, 0xc190, - 0xc191, 0xc192, 0xc193, 0xc194, 0xc195, 0xc196, 0xc197, 0xc198, - 0xc199, 0xc19a, 0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xc19f, 0xc1a0, - 0xc7e3, 0xc7e4, 0xc241, 0xc242, 0xc7e5, 0xc243, 0xc244, 0xc245, - 0xc7e6, 0xc246, 0xc7e7, 0xc247, 0xc248, 0xc249, 0xc24a, 0xc24b, - 0xc7e8, 0xc7e9, 0xc24c, 0xc7ea, 0xc24d, 0xc7eb, 0xc24e, 0xc24f, - 0xc250, 0xc251, 0xc252, 0xc253, 0xc7ec, 0xc7ed, 0xc254, 0xc255, - 0xc7ee, 0xc256, 0xc257, 0xc258, 0xc7ef, 0xc259, 0xc25a, 0xc261, - 0xc262, 0xc263, 0xc264, 0xc265, 0xc7f0, 0xc7f1, 0xc266, 0xc7f2, - 0xc267, 0xc7f3, 0xc268, 0xc269, 0xc26a, 0xc26b, 0xc26c, 0xc26d, - /* 0xd600 .. 0xd6ff */ - 0xc7f4, 0xc7f5, 0xc26e, 0xc26f, 0xc7f6, 0xc270, 0xc271, 0xc272, - 0xc7f7, 0xc273, 0xc274, 0xc275, 0xc276, 0xc277, 0xc278, 0xc279, - 0xc7f8, 0xc7f9, 0xc27a, 0xc7fa, 0xc7fb, 0xc7fc, 0xc281, 0xc282, - 0xc283, 0xc284, 0xc285, 0xc286, 0xc7fd, 0xc287, 0xc288, 0xc289, - 0xc7fe, 0xc28a, 0xc28b, 0xc28c, 0xc8a1, 0xc28d, 0xc28e, 0xc28f, - 0xc290, 0xc291, 0xc292, 0xc293, 0xc294, 0xc8a2, 0xc295, 0xc296, - 0xc297, 0xc298, 0xc299, 0xc29a, 0xc29b, 0xc29c, 0xc29d, 0xc29e, - 0xc8a3, 0xc8a4, 0xc29f, 0xc2a0, 0xc8a5, 0xc341, 0xc342, 0xc343, - 0xc8a6, 0xc344, 0xc345, 0xc346, 0xc347, 0xc8a7, 0xc348, 0xc349, - 0xc8a8, 0xc8a9, 0xc34a, 0xc8aa, 0xc34b, 0xc8ab, 0xc34c, 0xc34d, - 0xc34e, 0xc8ac, 0xc34f, 0xc350, 0xc8ad, 0xc8ae, 0xc351, 0xc352, - 0xc8af, 0xc353, 0xc354, 0xc355, 0xc8b0, 0xc356, 0xc357, 0xc358, - 0xc359, 0xc35a, 0xc361, 0xc362, 0xc363, 0xc364, 0xc365, 0xc8b1, - 0xc366, 0xc8b2, 0xc367, 0xc368, 0xc369, 0xc36a, 0xc36b, 0xc36c, - 0xc8b3, 0xc8b4, 0xc36d, 0xc36e, 0xc8b5, 0xc36f, 0xc370, 0xc371, - 0xc372, 0xc373, 0xc374, 0xc375, 0xc376, 0xc377, 0xc378, 0xc379, - 0xc37a, 0xc381, 0xc382, 0xc8b6, 0xc383, 0xc8b7, 0xc384, 0xc385, - 0xc386, 0xc387, 0xc388, 0xc389, 0xc8b8, 0xc8b9, 0xc38a, 0xc38b, - 0xc8ba, 0xc38c, 0xc38d, 0xc38e, 0xc8bb, 0xc38f, 0xc390, 0xc391, - 0xc392, 0xc393, 0xc394, 0xc395, 0xc396, 0xc8bc, 0xc397, 0xc8bd, - 0xc398, 0xc8be, 0xc399, 0xc39a, 0xc39b, 0xc39c, 0xc39d, 0xc39e, - 0xc8bf, 0xc39f, 0xc3a0, 0xc441, 0xc8c0, 0xc442, 0xc443, 0xc444, - 0xc8c1, 0xc445, 0xc446, 0xc447, 0xc448, 0xc449, 0xc44a, 0xc44b, - 0xc44c, 0xc8c2, 0xc44d, 0xc8c3, 0xc44e, 0xc44f, 0xc450, 0xc451, - 0xc452, 0xc453, 0xc454, 0xc455, 0xc8c4, 0xc8c5, 0xc456, 0xc457, - 0xc8c6, 0xc458, 0xc459, 0xc45a, 0xc8c7, 0xc461, 0xc462, 0xc463, - 0xc464, 0xc8c8, 0xc465, 0xc466, 0xc8c9, 0xc467, 0xc468, 0xc8ca, - 0xc469, 0xc8cb, 0xc46a, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xc46f, - 0xc8cc, 0xc470, 0xc471, 0xc472, 0xc8cd, 0xc473, 0xc474, 0xc475, - 0xc8ce, 0xc476, 0xc477, 0xc478, 0xc479, 0xc47a, 0xc481, 0xc482, - 0xc8cf, 0xc483, 0xc484, 0xc485, 0xc486, 0xc8d0, 0xc487, 0xc488, - 0xc489, 0xc48a, 0xc48b, 0xc48c, 0xc8d1, 0xc8d2, 0xc48d, 0xc48e, - /* 0xd700 .. 0xd7ff */ - 0xc8d3, 0xc48f, 0xc490, 0xc491, 0xc8d4, 0xc492, 0xc493, 0xc494, - 0xc495, 0xc496, 0xc497, 0xc498, 0xc499, 0xc49a, 0xc49b, 0xc49c, - 0xc49d, 0xc8d5, 0xc49e, 0xc49f, 0xc4a0, 0xc541, 0xc542, 0xc543, - 0xc8d6, 0xc8d7, 0xc544, 0xc545, 0xc8d8, 0xc546, 0xc547, 0xc548, - 0xc8d9, 0xc549, 0xc54a, 0xc54b, 0xc54c, 0xc54d, 0xc54e, 0xc54f, - 0xc8da, 0xc8db, 0xc550, 0xc8dc, 0xc551, 0xc8dd, 0xc552, 0xc553, - 0xc554, 0xc555, 0xc556, 0xc557, 0xc8de, 0xc8df, 0xc558, 0xc559, - 0xc8e0, 0xc55a, 0xc561, 0xc562, 0xc8e1, 0xc563, 0xc564, 0xc565, - 0xc566, 0xc567, 0xc568, 0xc569, 0xc8e2, 0xc56a, 0xc56b, 0xc8e3, - 0xc56c, 0xc8e4, 0xc56d, 0xc56e, 0xc56f, 0xc570, 0xc571, 0xc572, - 0xc8e5, 0xc8e6, 0xc573, 0xc574, 0xc8e7, 0xc575, 0xc8e8, 0xc8e9, - 0xc8ea, 0xc8eb, 0xc576, 0xc577, 0xc578, 0xc579, 0xc57a, 0xc581, - 0xc8ec, 0xc8ed, 0xc582, 0xc8ee, 0xc583, 0xc8ef, 0xc584, 0xc585, - 0xc586, 0xc8f0, 0xc587, 0xc588, 0xc8f1, 0xc589, 0xc58a, 0xc58b, - 0xc8f2, 0xc58c, 0xc58d, 0xc58e, 0xc8f3, 0xc58f, 0xc590, 0xc591, - 0xc592, 0xc593, 0xc594, 0xc595, 0xc8f4, 0xc8f5, 0xc596, 0xc597, - 0xc598, 0xc8f6, 0xc599, 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc59e, - 0xc8f7, 0xc8f8, 0xc59f, 0xc5a0, 0xc8f9, 0xc641, 0xc642, 0xc643, - 0xc8fa, 0xc644, 0xc645, 0xc646, 0xc647, 0xc648, 0xc649, 0xc64a, - 0xc8fb, 0xc8fc, 0xc64b, 0xc8fd, 0xc64c, 0xc8fe, 0xc64d, 0xc64e, - 0xc64f, 0xc650, 0xc651, 0xc652, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xf900 .. 0xf9ff */ - 0xcbd0, 0xcbd6, 0xcbe7, 0xcdcf, 0xcde8, 0xcead, 0xcffb, 0xd0a2, - 0xd0b8, 0xd0d0, 0xd0dd, 0xd1d4, 0xd1d5, 0xd1d8, 0xd1db, 0xd1dc, - 0xd1dd, 0xd1de, 0xd1df, 0xd1e0, 0xd1e2, 0xd1e3, 0xd1e4, 0xd1e5, - 0xd1e6, 0xd1e8, 0xd1e9, 0xd1ea, 0xd1eb, 0xd1ed, 0xd1ef, 0xd1f0, - 0xd1f2, 0xd1f6, 0xd1fa, 0xd1fc, 0xd1fd, 0xd1fe, 0xd2a2, 0xd2a3, - 0xd2a7, 0xd2a8, 0xd2a9, 0xd2aa, 0xd2ab, 0xd2ad, 0xd2b2, 0xd2be, - 0xd2c2, 0xd2c3, 0xd2c4, 0xd2c6, 0xd2c7, 0xd2c8, 0xd2c9, 0xd2ca, - 0xd2cb, 0xd2cd, 0xd2ce, 0xd2cf, 0xd2d0, 0xd2d1, 0xd2d2, 0xd2d3, - 0xd2d4, 0xd2d5, 0xd2d6, 0xd2d7, 0xd2d9, 0xd2da, 0xd2de, 0xd2df, - 0xd2e1, 0xd2e2, 0xd2e4, 0xd2e5, 0xd2e6, 0xd2e7, 0xd2e8, 0xd2e9, - 0xd2ea, 0xd2eb, 0xd2f0, 0xd2f1, 0xd2f2, 0xd2f3, 0xd2f4, 0xd2f5, - 0xd2f7, 0xd2f8, 0xd4e6, 0xd4fc, 0xd5a5, 0xd5ab, 0xd5ae, 0xd6b8, - 0xd6cd, 0xd7cb, 0xd7e4, 0xdbc5, 0xdbe4, 0xdca5, 0xdda5, 0xddd5, - 0xddf4, 0xdefc, 0xdefe, 0xdfb3, 0xdfe1, 0xdfe8, 0xe0f1, 0xe1ad, - 0xe1ed, 0xe3f5, 0xe4a1, 0xe4a9, 0xe5ae, 0xe5b1, 0xe5b2, 0xe5b9, - 0xe5bb, 0xe5bc, 0xe5c4, 0xe5ce, 0xe5d0, 0xe5d2, 0xe5d6, 0xe5fa, - 0xe5fb, 0xe5fc, 0xe5fe, 0xe6a1, 0xe6a4, 0xe6a7, 0xe6ad, 0xe6af, - 0xe6b0, 0xe6b1, 0xe6b3, 0xe6b7, 0xe6b8, 0xe6bc, 0xe6c4, 0xe6c6, - 0xe6c7, 0xe6ca, 0xe6d2, 0xe6d6, 0xe6d9, 0xe6dc, 0xe6df, 0xe6e1, - 0xe6e4, 0xe6e5, 0xe6e6, 0xe6e8, 0xe6ea, 0xe6eb, 0xe6ec, 0xe6ef, - 0xe6f1, 0xe6f2, 0xe6f5, 0xe6f6, 0xe6f7, 0xe6f9, 0xe7a1, 0xe7a6, - 0xe7a9, 0xe7aa, 0xe7ac, 0xe7ad, 0xe7b0, 0xe7bf, 0xe7c1, 0xe7c6, - 0xe7c7, 0xe7cb, 0xe7cd, 0xe7cf, 0xe7d0, 0xe7d3, 0xe7df, 0xe7e4, - 0xe7e6, 0xe7f7, 0xe8e7, 0xe8e8, 0xe8f0, 0xe8f1, 0xe8f7, 0xe8f9, - 0xe8fb, 0xe8fe, 0xe9a7, 0xe9ac, 0xe9cc, 0xe9f7, 0xeac1, 0xeae5, - 0xeaf4, 0xeaf7, 0xeafc, 0xeafe, 0xeba4, 0xeba7, 0xeba9, 0xebaa, - 0xebba, 0xebbb, 0xebbd, 0xebc1, 0xebc2, 0xebc6, 0xebc7, 0xebcc, - 0xebcf, 0xebd0, 0xebd1, 0xebd2, 0xebd8, 0xeca6, 0xeca7, 0xecaa, - 0xecaf, 0xecb0, 0xecb1, 0xecb2, 0xecb5, 0xecb8, 0xecba, 0xecc0, - 0xecc1, 0xecc5, 0xecc6, 0xecc9, 0xecca, 0xecd5, 0xecdd, 0xecde, - 0xece1, 0xece4, 0xece7, 0xece8, 0xecf7, 0xecf8, 0xecfa, 0xeda1, - 0xeda2, 0xeda3, 0xedee, 0xeedb, 0xf2bd, 0xf2fa, 0xf3b1, 0xf4a7, - /* 0xfa00 .. 0xfaff */ - 0xf4ee, 0xf6f4, 0xf6f6, 0xf7b8, 0xf7c8, 0xf7d3, 0xf8db, 0xf8f0, - 0xfaa1, 0xfaa2, 0xfae6, 0xfca9, 0xe8b4, 0x003f, 0x003f, 0x003f, - 0xf5c0, 0x003f, 0xf4e7, 0x003f, 0x003f, 0xfdeb, 0xeec4, 0xeccc, - 0x003f, 0xe3ea, 0xdfd4, 0xdcd8, 0xeffe, 0xeff1, 0xe9e2, 0x003f, - 0x003f, 0x003f, 0xf0b3, 0x003f, 0x003f, 0xecef, 0xd4b4, 0x003f, - 0x003f, 0x003f, 0xdaf9, 0xdef8, 0xcebd, 0xf9cd, 0x003f, 0x003f, - 0xd9b2, 0xe3ac, 0xd8f3, 0xd8f5, 0xd0c3, 0xdde4, 0xcae2, 0xf7a3, - 0xd0ef, 0x003f, 0xd9f8, 0xf6b5, 0x003f, 0xfce2, 0xcbc6, 0xf1f3, - 0xf3a4, 0xdac2, 0x003f, 0xdff4, 0xd8de, 0xfaad, 0xeec2, 0xf9d3, - 0xedb4, 0x003f, 0xf6fc, 0xddf8, 0xdee4, 0xf2b3, 0xd1b7, 0xe9de, - 0xf0d3, 0xf5e6, 0xfca1, 0xefee, 0xcdda, 0xd4cd, 0xefbd, 0xd6a3, - 0xf2db, 0xdbe5, 0xdffe, 0xedba, 0xf6ab, 0x003f, 0x003f, 0xeeca, - 0xcae8, 0xe3ca, 0xe4d7, 0xd0cd, 0xdeb9, 0xf1fc, 0x003f, 0xecef, - 0xd1f1, 0xfac2, 0xdeba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xeeef, 0x003f, 0xf5f6, 0xd0ed, 0xe9b8, 0xedc3, - 0xcae2, 0x003f, 0xfdc2, 0x003f, 0xf5c0, 0xddc5, 0xe5f2, 0xddc6, - 0xdde6, 0x003f, 0x003f, 0x003f, 0xf3f4, 0x003f, 0x003f, 0x003f, - 0xeaef, 0xf1f3, 0x003f, 0xf3a4, 0xd3e3, 0xeaf1, 0xe2a4, 0x003f, - 0xe7f9, 0xf4e7, 0xd5c7, 0xd8d0, 0xede8, 0x003f, 0xdfaf, 0xd7b5, - 0x003f, 0xedb2, 0xf9d3, 0xefe7, 0xedb4, 0x003f, 0xedc9, 0xdbf3, - 0xeec4, 0x003f, 0x003f, 0x003f, 0x003f, 0xe8b0, 0xeccc, 0xe0fc, - 0xf2c1, 0x003f, 0xf3b7, 0x003f, 0x003f, 0xefbd, 0x003f, 0x003f, - 0xd6a3, 0x003f, 0xedba, 0xfcd8, 0xfca4, 0x003f, 0xcbba, 0xdcdd, - 0xe3ca, 0xf0e0, 0xf0b3, 0xf4eb, 0xe4d7, 0xd1e7, 0xebb1, 0xd0cd, - 0xdca8, 0xf1fc, 0xe2c3, 0xf2c0, 0x003f, 0x003f, 0x003f, 0xd1f1, - 0xeffe, 0x003f, 0xfac2, 0x003f, 0xdeba, 0x003f, 0xcfcf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfb00 .. 0xfbff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x002b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfe00 .. 0xfeff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa1aa, 0xa1aa, 0xa1aa, 0xa1aa, 0x005f, 0x005f, 0x005f, - 0x002c, 0xa1a2, 0x002e, 0x003f, 0x003b, 0x003a, 0x003f, 0x0021, - 0xa1aa, 0x0028, 0x0029, 0x007b, 0x007d, 0xa1b2, 0xa1b3, 0x0023, - 0x0026, 0x002a, 0x002b, 0x002d, 0x003c, 0x003e, 0x003d, 0x003f, - 0x005c, 0x0024, 0x0025, 0x0040, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xff00 .. 0xffff */ - 0x003f, 0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7, - 0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, - 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, - 0xa3b8, 0xa3b9, 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd, 0xa3be, 0xa3bf, - 0xa3c0, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, - 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf, - 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7, - 0xa3d8, 0xa3d9, 0xa3da, 0xa3db, 0xa1ac, 0xa3dd, 0xa3de, 0xa3df, - 0xa3e0, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7, - 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef, - 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7, - 0xa3f8, 0xa3f9, 0xa3fa, 0xa3fb, 0xa3fc, 0xa3fd, 0xa2a6, 0x003f, - 0x003f, 0xa1a3, 0xa1b8, 0xa1b9, 0xa1a2, 0x003f, 0xabf2, 0xaba1, - 0xaba3, 0xaba5, 0xaba7, 0xaba9, 0xabe3, 0xabe5, 0xabe7, 0xabc3, - 0x003f, 0xaba2, 0xaba4, 0xaba6, 0xaba8, 0xabaa, 0xabab, 0xabad, - 0xabaf, 0xabb1, 0xabb3, 0xabb5, 0xabb7, 0xabb9, 0xabbb, 0xabbd, - 0xabbf, 0xabc1, 0xabc4, 0xabc6, 0xabc8, 0xabca, 0xabcb, 0xabcc, - 0xabcd, 0xabce, 0xabcf, 0xabd2, 0xabd5, 0xabd8, 0xabdb, 0xabde, - 0xabdf, 0xabe0, 0xabe1, 0xabe2, 0xabe4, 0xabe6, 0xabe8, 0xabe9, - 0xabea, 0xabeb, 0xabec, 0xabed, 0xabef, 0xabf3, 0x003f, 0x003f, - 0xa4d4, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, - 0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, - 0xa4b0, 0xa4b1, 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, - 0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0x003f, - 0x003f, 0x003f, 0xa4bf, 0xa4c0, 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, - 0x003f, 0x003f, 0xa4c5, 0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9, 0xa4ca, - 0x003f, 0x003f, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, 0xa4d0, - 0x003f, 0x003f, 0xa4d1, 0xa4d2, 0xa4d3, 0x003f, 0x003f, 0x003f, - 0xa1cb, 0xa1cc, 0xa1fe, 0xa3fe, 0x007c, 0xa1cd, 0xa3dc, 0x003f, - 0xa6a2, 0xa1e7, 0xa1e8, 0xa1e6, 0xa1e9, 0xa1e1, 0xa1db, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* defaults */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x0500, 0x0600, 0x0700, - 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x0f00, 0x1000, - 0x1100, 0x1200, 0x1300, 0x1400, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x1500, 0x1600, - 0x1700, 0x1800, 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x1d00, 0x1e00, - 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, - 0x2700, 0x2800, 0x2900, 0x2a00, 0x2b00, 0x2c00, 0x2d00, 0x2e00, - 0x2f00, 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, 0x3600, - 0x3700, 0x3800, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, 0x3e00, - 0x3f00, 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, 0x4600, - 0x4700, 0x4800, 0x4900, 0x4a00, 0x4b00, 0x4c00, 0x4d00, 0x4e00, - 0x4f00, 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, 0x5600, - 0x5700, 0x5800, 0x5900, 0x5a00, 0x5b00, 0x5c00, 0x5d00, 0x5e00, - 0x5f00, 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500, 0x6600, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x6700, 0x6800, 0x6900, 0x6a00, - 0x6b00, 0x6c00, 0x6d00, 0x6e00, 0x6f00, 0x7000, 0x7100, 0x7200, - 0x7300, 0x7400, 0x7500, 0x7600, 0x7700, 0x7800, 0x7900, 0x7a00, - 0x7b00, 0x7c00, 0x7d00, 0x7e00, 0x7f00, 0x8000, 0x8100, 0x8200, - 0x8300, 0x8400, 0x8500, 0x8600, 0x8700, 0x8800, 0x8900, 0x8a00, - 0x8b00, 0x8c00, 0x8d00, 0x8e00, 0x8f00, 0x9000, 0x9100, 0x9200, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, 0x9800, - 0x9800, 0x9300, 0x9400, 0x9500, 0x9800, 0x9800, 0x9600, 0x9700 -}; - -const struct dbcs_table cptable_949 = -{ - { 949, 2, 0x003f, 0x003f, "ANSI/OEM Korean Unified Hangul" }, - cp2uni, - cp2uni_leadbytes, - uni2cp_low, - uni2cp_high, - { 0x81, 0xfe, 0x00, 0x00 } -}; diff --git a/reactos/tools/unicode/c_950.c b/reactos/tools/unicode/c_950.c deleted file mode 100644 index 3a5ead730e2..00000000000 --- a/reactos/tools/unicode/c_950.c +++ /dev/null @@ -1,6595 +0,0 @@ -/* code page 950 (ANSI/OEM Traditional Chinese Big5) */ -/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT */ -/* DO NOT EDIT!! */ - -#include "wine/unicode.h" - -static const WCHAR cp2uni[22784] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003f, - /* unused lead bytes */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2027, 0xff1b, 0xff1a, - 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xfe51, 0xfe52, - 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31, - 0x2014, 0xfe33, 0x2574, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35, - 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39, - 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d, - 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41, - 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, - 0x201d, 0x301d, 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, - 0x203b, 0x00a7, 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, - 0x2606, 0x2605, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, - 0x32a3, 0x2105, 0x00af, 0xffe3, 0xff3f, 0x02cd, 0xfe49, 0xfe4a, - 0xfe4d, 0xfe4e, 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, - 0xff0d, 0x00d7, 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, - 0x2266, 0x2267, 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, - 0xfe64, 0xfe65, 0xfe66, 0xff5e, 0x2229, 0x222a, 0x22a5, 0x2220, - 0x221f, 0x22bf, 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, - 0x2640, 0x2642, 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192, - 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xff0f, 0x003f, - /* lead byte a2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xff3c, 0x2215, 0xfe68, 0xff04, 0xffe5, 0x3012, 0xffe0, 0xffe1, - 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5, - 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4, - 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7, - 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, - 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a, - 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500, - 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x256e, 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, - 0x25e2, 0x25e3, 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, - 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, - 0xff19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, - 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, - 0x3026, 0x3027, 0x3028, 0x3029, 0x5341, 0x5344, 0x5345, 0xff21, - 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, - 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, - 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, - 0xff3a, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, - 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, - 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0x003f, - /* lead byte a3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394, - 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, - 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, - 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4, - 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, - 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, - 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108, - 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, - 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, - 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, - 0x3127, 0x3128, 0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x20ac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte a4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c, - 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b, - 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a, - 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e, - 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f, - 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8, - 0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2, - 0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x4e11, 0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b, - 0x5c39, 0x4e88, 0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1, - 0x4ec0, 0x4ec3, 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4, - 0x5143, 0x5141, 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, - 0x5206, 0x5207, 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, - 0x5348, 0x5347, 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, - 0x58ec, 0x5929, 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, - 0x5c3a, 0x5c6f, 0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, - 0x6208, 0x6236, 0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4, - 0x65b9, 0x65e5, 0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79, - 0x6bcb, 0x6bd4, 0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236, - 0x723b, 0x7247, 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, 0x003f, - /* lead byte a5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e, - 0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4, - 0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9, - 0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317, - 0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e, - 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8, - 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1, - 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x592e, 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, - 0x5de8, 0x5de7, 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, - 0x5f18, 0x5f17, 0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, - 0x65a5, 0x65e6, 0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63, - 0x6bcd, 0x6c11, 0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af, - 0x7384, 0x7389, 0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529, - 0x7530, 0x7531, 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf, - 0x76ee, 0x77db, 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb, - 0x4e1e, 0x4e1f, 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6, - 0x4ea5, 0x4eff, 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10, - 0x4f11, 0x4f0f, 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd, - 0x4f01, 0x4f0b, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, 0x003f, - /* lead byte a6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216, - 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f, - 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d, - 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd, - 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919, - 0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979, - 0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89, - 0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5f0f, 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d, - 0x6210, 0x6263, 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec, - 0x65ed, 0x66f2, 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, - 0x6b21, 0x6b64, 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, - 0x6c60, 0x6c50, 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, - 0x725f, 0x725d, 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, - 0x7fbd, 0x8001, 0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, - 0x808b, 0x808c, 0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b, - 0x821f, 0x826e, 0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863, - 0x897f, 0x9621, 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57, - 0x4f5e, 0x4f34, 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d, - 0x4f3a, 0x4f38, 0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63, 0x003f, - /* lead byte a7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48, - 0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225, - 0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac, - 0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426, - 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b, - 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436, - 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea, - 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5747, 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, - 0x593e, 0x599d, 0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, - 0x598d, 0x59a4, 0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, - 0x5b5b, 0x5b8c, 0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f, - 0x5c3e, 0x5c90, 0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f, - 0x5e87, 0x5e8a, 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77, - 0x5f79, 0x5fd8, 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8, - 0x5fea, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, - 0x6289, 0x626d, 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292, - 0x626f, 0x6298, 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, - 0x653b, 0x6538, 0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750, - 0x6751, 0x675c, 0x6756, 0x675e, 0x6749, 0x6746, 0x6760, 0x003f, - /* lead byte a8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81, - 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70, - 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e, - 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076, - 0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2, - 0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3, - 0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093, - 0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x828b, 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46, - 0x8c55, 0x8c9d, 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, - 0x8fb0, 0x8fc2, 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, - 0x90aa, 0x90a6, 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, - 0x9631, 0x962a, 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, - 0x4e9e, 0x4eab, 0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, - 0x4f6c, 0x4f9b, 0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88, - 0x4f69, 0x4f7b, 0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154, - 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd, - 0x523b, 0x5238, 0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241, - 0x52be, 0x52bb, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, - 0x5378, 0x5379, 0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475, 0x003f, - /* lead byte a9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492, - 0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462, - 0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a, - 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947, - 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae, - 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af, - 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a, - 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5c46, 0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1, - 0x5cb3, 0x5e18, 0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78, - 0x5e9a, 0x5e97, 0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27, - 0x5f29, 0x5f80, 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd, - 0x5ff5, 0x5fff, 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a, - 0x6015, 0x6021, 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215, - 0x623f, 0x623e, 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf, - 0x62c2, 0x62b9, 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb, - 0x62c8, 0x62a8, 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd, - 0x62b5, 0x62da, 0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac, - 0x62ce, 0x653e, 0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c, - 0x6606, 0x6602, 0x660e, 0x6600, 0x660f, 0x6615, 0x660a, 0x003f, - /* lead byte aa */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c, - 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f, - 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a, - 0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3, - 0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe, - 0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9, - 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1, - 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7095, 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, - 0x7238, 0x7248, 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, - 0x72d0, 0x73a9, 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, - 0x7599, 0x759a, 0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd, - 0x793e, 0x7940, 0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa, - 0x7cfe, 0x7f54, 0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2, - 0x80b1, 0x80a1, 0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5, - 0x81fe, 0x820d, 0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f, - 0x82b9, 0x82b1, 0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0, - 0x82be, 0x82b7, 0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce, - 0x8fd4, 0x8fd1, 0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1, - 0x9577, 0x9580, 0x961c, 0x9640, 0x963f, 0x963b, 0x9644, 0x003f, - /* lead byte ab */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae, - 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd, - 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0, - 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192, - 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b, - 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b, - 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8, - 0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x54c4, 0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9, - 0x54a7, 0x54bf, 0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2, - 0x57ce, 0x57ae, 0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950, - 0x59dc, 0x59d8, 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea, - 0x59da, 0x59e6, 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4, - 0x5ba2, 0x5ba5, 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9, - 0x5cd2, 0x5df7, 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6, - 0x5efa, 0x5f08, 0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b, - 0x5f87, 0x5f8c, 0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e, - 0x6028, 0x604d, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c, - 0x606b, 0x606a, 0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc, - 0x62ed, 0x6301, 0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7, 0x003f, - /* lead byte ac */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545, - 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f, - 0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1, - 0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef, - 0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de, - 0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83, - 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32, - 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39, - 0x6d27, 0x6d38, 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab, - 0x70ba, 0x70b3, 0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4, - 0x7230, 0x7272, 0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7, - 0x73ca, 0x73bb, 0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d, - 0x754f, 0x754c, 0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2, - 0x75a3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3, - 0x76c5, 0x7701, 0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc, - 0x7707, 0x77dc, 0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949, - 0x7948, 0x7947, 0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f, - 0x7a81, 0x7aff, 0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09, - 0x7d07, 0x7d04, 0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004, 0x003f, - /* lead byte ad */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3, - 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd, - 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6, - 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301, - 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306, - 0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4, - 0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4, - 0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8fed, 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1, - 0x90c3, 0x914b, 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c, - 0x964d, 0x9762, 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, - 0x98db, 0x98df, 0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d, - 0x5023, 0x4fef, 0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006, - 0x503c, 0x501f, 0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014, - 0x5028, 0x4ff1, 0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee, - 0x502d, 0x502a, 0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5, - 0x51a2, 0x51cd, 0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254, - 0x525b, 0x525d, 0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8, - 0x5510, 0x5501, 0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa, - 0x5514, 0x54e9, 0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea, 0x003f, - /* lead byte ae */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2, - 0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a, - 0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20, - 0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0, - 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04, - 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8, - 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab, - 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6063, 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f, - 0x6084, 0x609f, 0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096, - 0x6247, 0x62f3, 0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355, - 0x6342, 0x6346, 0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a, - 0x632b, 0x6328, 0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1, - 0x65c5, 0x6642, 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645, - 0x6641, 0x66f8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, - 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817, - 0x684c, 0x6851, 0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843, - 0x682a, 0x6845, 0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7, - 0x6c23, 0x6c27, 0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95, - 0x6d88, 0x6d87, 0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93, 0x003f, - /* lead byte af */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a, - 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9, - 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8, - 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de, - 0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7, - 0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b, - 0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728, - 0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7825, 0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950, - 0x7960, 0x795f, 0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4, - 0x79e3, 0x79e7, 0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88, - 0x7ad9, 0x7b06, 0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a, - 0x7d20, 0x7d22, 0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d, - 0x7d19, 0x7d1b, 0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006, - 0x8018, 0x8015, 0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102, - 0x80f0, 0x8105, 0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108, - 0x80fd, 0x810a, 0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210, - 0x822a, 0x822b, 0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354, - 0x834a, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332, - 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, 0x003f, - /* lead byte b0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3, - 0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18, - 0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16, - 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77, - 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7, - 0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095, - 0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd, - 0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x965b, 0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2, - 0x99ac, 0x9aa8, 0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a, - 0x507d, 0x505c, 0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065, - 0x5076, 0x504e, 0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f, - 0x506f, 0x506d, 0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2, - 0x52d9, 0x52d8, 0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340, - 0x533e, 0x53c3, 0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e, - 0x5561, 0x5543, 0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f, - 0x5564, 0x5538, 0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541, - 0x5557, 0x5708, 0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806, - 0x57e0, 0x57e4, 0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920, - 0x5962, 0x5a36, 0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40, 0x003f, - /* lead byte b1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5, - 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60, - 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22, - 0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2, - 0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5, - 0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97, - 0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3, - 0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x60c5, 0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5, - 0x60c6, 0x60df, 0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248, - 0x63a0, 0x63a7, 0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367, - 0x6398, 0x63aa, 0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b, - 0x63a8, 0x6384, 0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f, - 0x6380, 0x637b, 0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551, - 0x6559, 0x6557, 0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c, - 0x659b, 0x65ac, 0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a, - 0x6664, 0x6668, 0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881, - 0x68af, 0x68a2, 0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7, - 0x6897, 0x68b0, 0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, - 0x689d, 0x68a8, 0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba, 0x003f, - /* lead byte b2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2, - 0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb, - 0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5, - 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea, - 0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf, - 0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d, - 0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, - 0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x74f7, 0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, - 0x758f, 0x75d4, 0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4, - 0x76d2, 0x76db, 0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a, - 0x786b, 0x7843, 0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92, - 0x7a95, 0x7b20, 0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e, - 0x7b2e, 0x7c92, 0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e, - 0x7d39, 0x7d3c, 0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42, - 0x7d32, 0x7d31, 0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, - 0x801c, 0x804a, 0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129, - 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e, - 0x839e, 0x8398, 0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392, - 0x838a, 0x8393, 0x8389, 0x83a0, 0x8377, 0x837b, 0x837c, 0x003f, - /* lead byte b3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4, - 0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e, - 0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f, - 0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b, - 0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa, - 0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019, - 0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015, - 0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x90e8, 0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6, - 0x91e3, 0x91e7, 0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673, - 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea, - 0x96e9, 0x7ae0, 0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, - 0x9e7f, 0x9ea5, 0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, - 0x5080, 0x5096, 0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274, - 0x5275, 0x5269, 0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b, - 0x5580, 0x55a7, 0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c, - 0x55aa, 0x5594, 0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f, - 0x553e, 0x55b2, 0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, - 0x55ab, 0x5599, 0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, - 0x5831, 0x5821, 0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960, 0x003f, - /* lead byte b4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71, - 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c, - 0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43, - 0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9, - 0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c, - 0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1, - 0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3, - 0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x63d2, 0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee, - 0x6376, 0x63f4, 0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e, - 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670, - 0x6674, 0x6676, 0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe, - 0x66ff, 0x671f, 0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7, - 0x6905, 0x68df, 0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2, - 0x68e3, 0x68cb, 0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da, - 0x696e, 0x68fb, 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, - 0x6bef, 0x6c2e, 0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, - 0x6e32, 0x6e67, 0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, - 0x6e58, 0x6e24, 0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34, - 0x6e4d, 0x6e3a, 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb, 0x003f, - /* lead byte b5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f, - 0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c, - 0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a, - 0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f, - 0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2, - 0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c, - 0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c, - 0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7a97, 0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, - 0x7b50, 0x7b52, 0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, - 0x7ca5, 0x7d5e, 0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, - 0x7d61, 0x7d66, 0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, - 0x800b, 0x8052, 0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e, - 0x8139, 0x8146, 0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c, - 0x83e9, 0x8403, 0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1, - 0x83ef, 0x83f1, 0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc, - 0x83fd, 0x83f2, 0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, - 0x83d4, 0x83df, 0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, - 0x86e4, 0x86d0, 0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, - 0x8996, 0x8a3b, 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, 0x003f, - /* lead byte b6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56, - 0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb, - 0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85, - 0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb, - 0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031, - 0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163, - 0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d, - 0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9593, 0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d, - 0x9685, 0x9686, 0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4, - 0x96c6, 0x96c7, 0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808, - 0x98e7, 0x98ea, 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, - 0x9ec3, 0x9ecd, 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, - 0x50c5, 0x50be, 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, - 0x5277, 0x527d, 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, - 0x55df, 0x55e8, 0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, - 0x55e3, 0x55e4, 0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5, - 0x55c9, 0x5712, 0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a, - 0x5854, 0x586b, 0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b, - 0x5967, 0x5ac1, 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, 0x003f, - /* lead byte b7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9, - 0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148, - 0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c, - 0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137, - 0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d, - 0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417, - 0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688, - 0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x695a, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, - 0x694a, 0x6968, 0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, - 0x6963, 0x695b, 0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, - 0x6ea2, 0x6eaf, 0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, - 0x6ec5, 0x6ea5, 0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96, - 0x6e9c, 0x6ec4, 0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159, - 0x7169, 0x7164, 0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c, - 0x7165, 0x715e, 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, - 0x7345, 0x733f, 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, - 0x7441, 0x743f, 0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, - 0x75f0, 0x7601, 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, - 0x76de, 0x76df, 0x775b, 0x776b, 0x7766, 0x775e, 0x7763, 0x003f, - /* lead byte b8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee, - 0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891, - 0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c, - 0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77, - 0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93, - 0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a, - 0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084, - 0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8179, 0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, - 0x843d, 0x8431, 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b, - 0x843c, 0x8435, 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, - 0x865c, 0x865f, 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, - 0x86fb, 0x8702, 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, - 0x88d9, 0x88dc, 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, - 0x899c, 0x89e3, 0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, - 0x8a87, 0x8a7c, 0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62, - 0x8a6e, 0x8a6c, 0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a, - 0x8c89, 0x8cca, 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2, - 0x8cc5, 0x8de1, 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea, - 0x8de4, 0x8de6, 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, 0x003f, - /* lead byte b9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c, - 0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e, - 0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237, - 0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264, - 0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a, - 0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca, - 0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810, - 0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x98fd, 0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, - 0x9e82, 0x9f0e, 0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, - 0x50ed, 0x50da, 0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9, - 0x5162, 0x51f3, 0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600, - 0x561b, 0x5617, 0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e, - 0x55f7, 0x5616, 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716, - 0x5875, 0x587e, 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, - 0x58fd, 0x5925, 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, - 0x5ae9, 0x5ad7, 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, - 0x5be1, 0x5be5, 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, - 0x5c62, 0x5d84, 0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, - 0x5ed3, 0x5ed6, 0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147, 0x003f, - /* lead byte ba */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158, - 0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f, - 0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1, - 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995, - 0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab, - 0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3, - 0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4, - 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6eff, 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23, - 0x6f15, 0x6f2b, 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, - 0x6ecc, 0x6ef7, 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, - 0x723e, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, - 0x7470, 0x746d, 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, - 0x7613, 0x76e1, 0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, - 0x789f, 0x78a7, 0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d, - 0x7a2e, 0x7a31, 0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95, - 0x7b8b, 0x7b75, 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87, - 0x7b84, 0x7cb9, 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd, - 0x7dbe, 0x7da0, 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, - 0x7dbf, 0x7db5, 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, 0x003f, - /* lead byte bb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150, - 0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa, - 0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4, - 0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3, - 0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722, - 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902, - 0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6, - 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8aaa, 0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, - 0x8c6a, 0x8c8d, 0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, - 0x8d95, 0x8dfc, 0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060, - 0x9058, 0x905c, 0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b, - 0x9119, 0x9118, 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, - 0x9280, 0x9285, 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8, - 0x927c, 0x9291, 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, - 0x9699, 0x969c, 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, - 0x97f6, 0x9817, 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, - 0x9909, 0x99c1, 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, - 0x9cf6, 0x9cf3, 0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb, - 0x50f5, 0x50f9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51dc, 0x003f, - /* lead byte bc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e, - 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e, - 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e, - 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb, - 0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb, - 0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2, - 0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7, - 0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x617c, 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab, - 0x618e, 0x61ac, 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, - 0x646f, 0x6479, 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5, - 0x6493, 0x6495, 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a, - 0x64ac, 0x6499, 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae, - 0x66ab, 0x66b4, 0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e, - 0x6a19, 0x69fd, 0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05, - 0x69ed, 0x6a11, 0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f, - 0x6f7c, 0x6f84, 0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b, - 0x6f78, 0x6f6e, 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58, - 0x6ed5, 0x6f6f, 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8, - 0x7256, 0x729b, 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, 0x003f, - /* lead byte bd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626, - 0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c, - 0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5, - 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b, - 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7, - 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb, - 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9, - 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7fe9, 0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, - 0x8198, 0x8517, 0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513, - 0x8511, 0x8523, 0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506, - 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, - 0x8757, 0x874c, 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912, - 0x8913, 0x8915, 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, - 0x8acb, 0x8af8, 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6, - 0x8acd, 0x8ab6, 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0, - 0x8cde, 0x8ce6, 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc, - 0x8cea, 0x8ce1, 0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d, - 0x8e22, 0x8e0f, 0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d, - 0x8f1b, 0x8f1f, 0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e, 0x003f, - /* lead byte be */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d, - 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb, - 0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2, - 0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707, - 0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c, - 0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df, - 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef, - 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9d03, 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, - 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, - 0x5293, 0x52f3, 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, - 0x566a, 0x5668, 0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, - 0x58c1, 0x58be, 0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78, - 0x5bf0, 0x5c0e, 0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd, - 0x61b6, 0x61be, 0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb, - 0x64bb, 0x64bc, 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf, - 0x64d2, 0x64d4, 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, - 0x66c7, 0x66b8, 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, - 0x6a39, 0x6a44, 0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f, - 0x6a48, 0x6b59, 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1, 0x003f, - /* lead byte bf */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6, - 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8, - 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368, - 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d, - 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f, - 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e, - 0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4, - 0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7e11, 0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09, - 0x7e10, 0x7f79, 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3, - 0x81a9, 0x81a8, 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559, - 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e, - 0x8783, 0x879f, 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932, - 0x8925, 0x892b, 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb, - 0x8af1, 0x8b00, 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02, - 0x8af7, 0x8aed, 0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93, - 0x8cf4, 0x8e44, 0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b, - 0x8f2f, 0x8f38, 0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078, - 0x9072, 0x907c, 0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8, - 0x9333, 0x932f, 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, 0x003f, - /* lead byte c0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7, - 0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713, - 0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b, - 0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b, - 0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb, - 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12, - 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121, - 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x568f, 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, - 0x5b24, 0x5b7a, 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, - 0x5e6b, 0x5f4c, 0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, - 0x6232, 0x6234, 0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6, - 0x64ec, 0x64f1, 0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6, - 0x6a80, 0x6a94, 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e, - 0x6a97, 0x6a90, 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8, - 0x6ff1, 0x6fdf, 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80, - 0x6fec, 0x6fe1, 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df, - 0x71ee, 0x71e6, 0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235, - 0x7246, 0x7370, 0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646, - 0x7642, 0x764c, 0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac, 0x003f, - /* lead byte c1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901, - 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7, - 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9, - 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b, - 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35, - 0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070, - 0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf, - 0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8584, 0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b, - 0x8587, 0x85a8, 0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2, - 0x87c6, 0x87ab, 0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936, - 0x8944, 0x8938, 0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b, - 0x8b0a, 0x8b20, 0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73, - 0x8cfa, 0x8cfd, 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b, - 0x8e48, 0x8e4a, 0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f, - 0x907d, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e, - 0x919c, 0x934d, 0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b, - 0x9318, 0x937e, 0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca, - 0x95cb, 0x95cc, 0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c, - 0x971e, 0x97a0, 0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01, 0x003f, - /* lead byte c2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b, - 0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2, - 0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233, - 0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7, - 0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2, - 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe, - 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8, - 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7652, 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae, - 0x7a61, 0x7a62, 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a, - 0x7c1e, 0x7c23, 0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a, - 0x7e61, 0x7e52, 0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076, - 0x81cd, 0x81cf, 0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9, - 0x85b0, 0x85ba, 0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0, - 0x8986, 0x89b2, 0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50, - 0x8d05, 0x8e59, 0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0, - 0x8f49, 0x8f4d, 0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0, - 0x9394, 0x938a, 0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0, - 0x9398, 0x939a, 0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2, - 0x96dc, 0x96d9, 0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6, 0x003f, - /* lead byte c3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba, - 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03, - 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8, - 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133, - 0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2, - 0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5, - 0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d, - 0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x737a, 0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f, - 0x7661, 0x77c7, 0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f, - 0x7c38, 0x7c3d, 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69, - 0x7e6a, 0x7f85, 0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9, - 0x85dd, 0x85ea, 0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805, - 0x880d, 0x87f9, 0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41, - 0x8b5c, 0x8b58, 0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, - 0x8d08, 0x8d0a, 0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, - 0x8e74, 0x8f54, 0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae, - 0x93e1, 0x93d1, 0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6, - 0x93e2, 0x93cd, 0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4, - 0x96e3, 0x972a, 0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e, 0x003f, - /* lead byte c4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d, - 0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a, - 0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7, - 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6, - 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727, - 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662, - 0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c, - 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7e82, 0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9, - 0x8611, 0x85fa, 0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815, - 0x8964, 0x89ba, 0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f, - 0x8b6b, 0x8d0f, 0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4, - 0x91cb, 0x9418, 0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952, - 0x9951, 0x99a8, 0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d, - 0x9e79, 0x9eb5, 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137, - 0x5138, 0x56c1, 0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc, - 0x61fe, 0x651d, 0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa, - 0x6bb2, 0x704c, 0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3, - 0x7c50, 0x7e8f, 0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823, - 0x8822, 0x8821, 0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74, 0x003f, - /* lead byte c5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf, - 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b, - 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957, - 0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d, - 0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19, - 0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9, - 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61, - 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x79b3, 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972, - 0x896f, 0x89fc, 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61, - 0x9148, 0x9444, 0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1, - 0x986b, 0x9955, 0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31, - 0x9c3e, 0x9c3b, 0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94, - 0x56cc, 0x5dd6, 0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10, - 0x74da, 0x7aca, 0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94, - 0x81e2, 0x8638, 0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463, - 0x9460, 0x9464, 0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57, - 0x9ad3, 0x9ad4, 0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f, - 0x9ef4, 0x56d1, 0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7, - 0x7f50, 0x7f88, 0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92, 0x003f, - /* lead byte c6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744, - 0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa, - 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063, - 0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470, - 0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a, - 0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5, - 0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f, - 0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* lead byte c9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47, - 0x4e8d, 0x56d7, 0xfa0c, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e, - 0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c, - 0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3, - 0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9, - 0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723, - 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73, - 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6c36, 0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, - 0x79b8, 0x808a, 0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, - 0x4ef1, 0x4f00, 0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22, - 0x4f13, 0x4f04, 0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210, - 0x52a6, 0x5322, 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, - 0x572e, 0x572a, 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, - 0x597e, 0x5977, 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, - 0x5c7b, 0x5c7e, 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, - 0x5fd5, 0x5fd4, 0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, - 0x6262, 0x6259, 0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e, - 0x6739, 0x6738, 0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18, - 0x6c46, 0x6c52, 0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b, 0x003f, - /* lead byte ca */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f, - 0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d, - 0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624, - 0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64, - 0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33, - 0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad, - 0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437, - 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x543d, 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, - 0x56e7, 0x56e5, 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, - 0x5906, 0x5940, 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, - 0x5990, 0x598f, 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, - 0x5c8d, 0x5c8f, 0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, - 0x5c93, 0x5c95, 0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, - 0x5e88, 0x5e8d, 0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1, - 0x5fd0, 0x5fed, 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3, - 0x5ffa, 0x5fef, 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283, - 0x628c, 0x628e, 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a, - 0x6270, 0x6281, 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537, - 0x65f0, 0x65f4, 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, 0x003f, - /* lead byte cb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b, - 0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b, - 0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95, - 0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a, - 0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5, - 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594, - 0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, - 0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x828a, 0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f, - 0x90a1, 0x90a5, 0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f, - 0x962d, 0x4e33, 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87, - 0x4f76, 0x4f74, 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, - 0x4f9a, 0x4f79, 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, - 0x4f92, 0x4f82, 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, - 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, - 0x533c, 0x5392, 0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, - 0x5488, 0x546b, 0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466, - 0x548d, 0x546f, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, - 0x56f7, 0x56f9, 0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770, - 0x5776, 0x5780, 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, 0x003f, - /* lead byte cc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce, - 0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1, - 0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93, - 0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf, - 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7, - 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19, - 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d, - 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6034, 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, - 0x6022, 0x600d, 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, - 0x601c, 0x6214, 0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, - 0x62b6, 0x62ca, 0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0, - 0x62b8, 0x653d, 0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612, - 0x6608, 0x65fb, 0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611, - 0x6610, 0x66f6, 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776, - 0x677b, 0x6798, 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, - 0x679f, 0x6791, 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, - 0x6794, 0x6b25, 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, - 0x6ceb, 0x6cee, 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, - 0x6cd0, 0x6cc2, 0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, 0x003f, - /* lead byte cd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0, - 0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1, - 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, - 0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9, - 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1, - 0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8, - 0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1, - 0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x77f7, 0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb, - 0x7c75, 0x7cfd, 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5, - 0x80ad, 0x8220, 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, - 0x82b5, 0x82a7, 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, - 0x82a1, 0x82a9, 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, - 0x866f, 0x866d, 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, - 0x8fd6, 0x8fd5, 0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, - 0x9639, 0x963d, 0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3, - 0x4fb2, 0x4fc9, 0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb, - 0x4fb3, 0x4fdb, 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec, - 0x5244, 0x5249, 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396, - 0x5399, 0x5398, 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, 0x003f, - /* lead byte ce */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6, - 0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0, - 0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b, - 0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4, - 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd, - 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db, - 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8, - 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5cde, 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, - 0x5cd4, 0x5ccf, 0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, - 0x5e21, 0x5e22, 0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, - 0x5e9b, 0x5ea3, 0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037, - 0x6039, 0x6054, 0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049, - 0x605b, 0x604c, 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058, - 0x6066, 0x606e, 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, - 0x630e, 0x6303, 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, - 0x6300, 0x6313, 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, - 0x6543, 0x65aa, 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, - 0x6626, 0x6622, 0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, - 0x662e, 0x670f, 0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba, 0x003f, - /* lead byte cf */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb, - 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee, - 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc, - 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9, - 0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6, - 0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d, - 0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04, - 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6d01, 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07, - 0x6d20, 0x6d2c, 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, - 0x70be, 0x70b1, 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, - 0x7249, 0x724a, 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4, - 0x72e8, 0x72eb, 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc, - 0x73c2, 0x73c8, 0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb, - 0x73bf, 0x73c7, 0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec, - 0x74ee, 0x752e, 0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4, - 0x7708, 0x7703, 0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa, - 0x77e7, 0x77e8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f, - 0x780e, 0x7809, 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945, - 0x7944, 0x79d5, 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, 0x003f, - /* lead byte d0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f, - 0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d, - 0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7, - 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9, - 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd, - 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8, - 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1, - 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x82e4, 0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, - 0x867c, 0x8673, 0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3, - 0x8a04, 0x8a07, 0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1, - 0x90bd, 0x90bf, 0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8, - 0x91d4, 0x91d3, 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e, - 0x501e, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, - 0x4ff4, 0x5033, 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, - 0x5020, 0x5027, 0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194, - 0x5193, 0x51ca, 0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a, - 0x5252, 0x525e, 0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e, - 0x5526, 0x54e2, 0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a, - 0x54ff, 0x5504, 0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1, 0x003f, - /* lead byte d1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b, - 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6, - 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9, - 0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15, - 0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad, - 0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1, - 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa, - 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6041, 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d, - 0x6083, 0x6095, 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219, - 0x6246, 0x62f2, 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336, - 0x6343, 0x63e4, 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341, - 0x6334, 0x6358, 0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a, - 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6, - 0x65c3, 0x65c4, 0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712, - 0x6713, 0x681f, 0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b, - 0x684f, 0x6816, 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f, - 0x684e, 0x6844, 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828, - 0x682e, 0x684d, 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d, - 0x6b31, 0x6b34, 0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4, 0x003f, - /* lead byte d2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64, - 0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f, - 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60, - 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68, - 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d, - 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39, - 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5, - 0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7277, 0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6, - 0x72f3, 0x72fb, 0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc, - 0x73e7, 0x73e3, 0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd, - 0x73da, 0x73d7, 0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5, - 0x7521, 0x755b, 0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0, - 0x75bf, 0x75b6, 0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710, - 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722, - 0x7727, 0x7823, 0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e, - 0x782b, 0x7821, 0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b, - 0x794f, 0x795c, 0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0, - 0x79ee, 0x79ed, 0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89, - 0x7a85, 0x7a8b, 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10, 0x003f, - /* lead byte d3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09, - 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85, - 0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f, - 0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d, - 0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e, - 0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100, - 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351, - 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8342, 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d, - 0x8316, 0x8324, 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345, - 0x834c, 0x8353, 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653, - 0x8652, 0x86a2, 0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687, - 0x8697, 0x8686, 0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1, - 0x86a7, 0x8695, 0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843, - 0x8844, 0x886d, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f, - 0x886f, 0x8883, 0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57, - 0x8c7b, 0x8ca4, 0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6, - 0x8ed1, 0x8ed3, 0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004, - 0x8ffc, 0x8ff6, 0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df, - 0x90e5, 0x90d8, 0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150, 0x003f, - /* lead byte d4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc, - 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e, - 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041, - 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b, - 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051, - 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d, - 0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a, - 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x550c, 0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d, - 0x553b, 0x5540, 0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2, - 0x57f6, 0x57dc, 0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8, - 0x580b, 0x57f3, 0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5, - 0x57ec, 0x57e1, 0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c, - 0x57f1, 0x57e9, 0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58, - 0x5a55, 0x5a67, 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f, - 0x5a65, 0x5a6c, 0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52, - 0x5a44, 0x5a5b, 0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c, - 0x5a70, 0x5a69, 0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72, - 0x5b6e, 0x5bc1, 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a, - 0x5d20, 0x5d0c, 0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f, 0x003f, - /* lead byte d5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1, - 0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96, - 0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3, - 0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db, - 0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365, - 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397, - 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375, - 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6378, 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553, - 0x65cd, 0x6665, 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718, - 0x6879, 0x6887, 0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab, - 0x6956, 0x686f, 0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2, - 0x688f, 0x6877, 0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880, - 0x6871, 0x687e, 0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4, - 0x6878, 0x687b, 0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33, - 0x6b37, 0x6b38, 0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a, - 0x6dc0, 0x6dab, 0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2, - 0x6db7, 0x6df6, 0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6, - 0x6dbe, 0x6de5, 0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd, - 0x6ded, 0x6df0, 0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9, 0x003f, - /* lead byte d6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb, - 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104, - 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8, - 0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f, - 0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff, - 0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401, - 0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b, - 0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x75cb, 0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3, - 0x7739, 0x772f, 0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d, - 0x7725, 0x773b, 0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a, - 0x784c, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a, - 0x7963, 0x796b, 0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7, - 0x7a8f, 0x7a94, 0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30, - 0x7b22, 0x7b24, 0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b, - 0x7b2d, 0x7b2f, 0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98, - 0x7c96, 0x7ca3, 0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45, - 0x7d2c, 0x7d29, 0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b, - 0x7d28, 0x7f63, 0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb, - 0x7fcd, 0x7fd0, 0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f, 0x003f, - /* lead byte d7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, - 0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127, - 0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232, - 0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4, - 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9, - 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e, - 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387, - 0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x86c2, 0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9, - 0x86b3, 0x86b8, 0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd, - 0x86be, 0x8852, 0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a, - 0x8891, 0x88a1, 0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897, - 0x88a4, 0x88ac, 0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9, - 0x89d5, 0x8a30, 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c, - 0x8c5d, 0x8c7d, 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2, - 0x8db9, 0x8dbf, 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7, - 0x8ee0, 0x8ee1, 0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021, - 0x90ef, 0x90ea, 0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb, - 0x90ec, 0x90e9, 0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec, - 0x91f4, 0x91f1, 0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea, 0x003f, - /* lead byte d8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c, - 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5, - 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083, - 0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087, - 0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8, - 0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f, - 0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6, - 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5819, 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848, - 0x5825, 0x581c, 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839, - 0x5838, 0x582d, 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f, - 0x5a7a, 0x5aa2, 0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac, - 0x5a95, 0x5aae, 0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b, - 0x5aa9, 0x5a7b, 0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d, - 0x5bea, 0x5bcd, 0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c, - 0x5c30, 0x5d37, 0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35, - 0x5d51, 0x5d4e, 0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31, - 0x5d59, 0x5d42, 0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36, - 0x5d40, 0x5d45, 0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab, - 0x60c9, 0x60b9, 0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114, 0x003f, - /* lead byte d9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc, - 0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104, - 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8, - 0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5, - 0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4, - 0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0, - 0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568, - 0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x667c, 0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a, - 0x6672, 0x6701, 0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec, - 0x68ea, 0x68f1, 0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6, - 0x6913, 0x6910, 0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970, - 0x68b4, 0x6911, 0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd, - 0x68fc, 0x68e8, 0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd, - 0x68de, 0x68e6, 0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915, - 0x6925, 0x68c7, 0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, - 0x6b99, 0x6b95, 0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, - 0x6e46, 0x6e47, 0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, - 0x6e62, 0x6e2b, 0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33, - 0x6e4b, 0x6e40, 0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e, 0x003f, - /* lead byte da */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b, - 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64, - 0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a, - 0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125, - 0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a, - 0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330, - 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323, - 0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x741a, 0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d, - 0x7429, 0x7420, 0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7, - 0x75da, 0x75e1, 0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695, - 0x7692, 0x76da, 0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a, - 0x774e, 0x774b, 0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865, - 0x785c, 0x786d, 0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868, - 0x785e, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a, - 0x7a03, 0x7a0c, 0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b, - 0x7b44, 0x7b48, 0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2, - 0x7c9e, 0x7ca8, 0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56, - 0x7d67, 0x7d6a, 0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54, - 0x7d69, 0x7d51, 0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, 0x003f, - /* lead byte db */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050, - 0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d, - 0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204, - 0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423, - 0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410, - 0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5, - 0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9, - 0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x83d5, 0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3, - 0x83ec, 0x83ee, 0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db, - 0x83fe, 0x86d8, 0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea, - 0x86dd, 0x86eb, 0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1, - 0x8848, 0x8856, 0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, - 0x88be, 0x88b6, 0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, - 0x8995, 0x8998, 0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, - 0x8a39, 0x8a59, 0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, - 0x8a48, 0x8a51, 0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, - 0x8cba, 0x8cbe, 0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89, - 0x8dd8, 0x8dd3, 0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5, - 0x8dd9, 0x8dc8, 0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa, 0x003f, - /* lead byte dc */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6, - 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f, - 0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb, - 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f, - 0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226, - 0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204, - 0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, - 0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9689, 0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1, - 0x96f0, 0x976c, 0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6, - 0x9ef9, 0x4e83, 0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae, - 0x50c4, 0x50ca, 0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba, - 0x50b1, 0x50cb, 0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278, - 0x527b, 0x527c, 0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca, - 0x55dd, 0x55c0, 0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d, - 0x55cf, 0x55d5, 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9, - 0x55c2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, - 0x586f, 0x5855, 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, - 0x5863, 0x5871, 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, - 0x5ab1, 0x5ab5, 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, 0x003f, - /* lead byte dd */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90, - 0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a, - 0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0, - 0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6, - 0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a, - 0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f, - 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5, - 0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6433, 0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437, - 0x6422, 0x6423, 0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, - 0x642f, 0x640a, 0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7, - 0x641b, 0x642e, 0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, - 0x668c, 0x6695, 0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, - 0x6720, 0x6966, 0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, - 0x6945, 0x696a, 0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, - 0x6949, 0x6935, 0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, - 0x6934, 0x6969, 0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941, - 0x6974, 0x694c, 0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951, - 0x6932, 0x6952, 0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43, - 0x6b42, 0x6b48, 0x6b41, 0x6b9b, 0xfa0d, 0x6bfb, 0x6bfc, 0x003f, - /* lead byte de */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0, - 0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2, - 0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6, - 0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92, - 0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca, - 0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, - 0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142, - 0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7144, 0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291, - 0x7290, 0x728e, 0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a, - 0x7349, 0x7444, 0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440, - 0x744f, 0x7450, 0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1, - 0x74ff, 0x74fe, 0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef, - 0x760f, 0x7603, 0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610, - 0x75fb, 0x75f6, 0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, - 0x7755, 0x775f, 0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, - 0x7754, 0x7759, 0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, - 0x7884, 0x7895, 0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, - 0x7880, 0x7896, 0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, - 0x7a18, 0x7a19, 0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13, 0x003f, - /* lead byte df */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64, - 0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70, - 0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88, - 0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b, - 0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d, - 0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb, - 0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b, - 0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8144, 0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242, - 0x8245, 0x84f1, 0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d, - 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d, - 0x845a, 0x8459, 0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437, - 0x843a, 0x8434, 0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, - 0x83d9, 0x844b, 0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439, - 0x844e, 0x844c, 0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447, - 0x8436, 0x8433, 0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454, - 0x846e, 0x8450, 0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6, - 0x86f5, 0x874d, 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d, - 0x8705, 0x88d6, 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, - 0x88cc, 0x88d0, 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, 0x003f, - /* lead byte e0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f, - 0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81, - 0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66, - 0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c, - 0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0, - 0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2, - 0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00, - 0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9044, 0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, - 0x9116, 0x9114, 0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252, - 0x9230, 0x923a, 0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e, - 0x924a, 0x9246, 0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f, - 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, - 0x924e, 0x9253, 0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, - 0x959b, 0x9692, 0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, - 0x96f8, 0x96f5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, - 0x980e, 0x98ac, 0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, - 0x9aad, 0x9aab, 0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, - 0x50e6, 0x50d4, 0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd, - 0x50e4, 0x50d3, 0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0, 0x003f, - /* lead byte e1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627, - 0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613, - 0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c, - 0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a, - 0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894, - 0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea, - 0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec, - 0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x5be3, 0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, - 0x5d81, 0x5d77, 0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, - 0x5d79, 0x5d7f, 0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, - 0x5ece, 0x5edc, 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, - 0x5f6f, 0x5fb6, 0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, - 0x6152, 0x6153, 0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a, - 0x615b, 0x6165, 0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227, - 0x622b, 0x642b, 0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472, - 0x6473, 0x647d, 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e, - 0x645c, 0x644b, 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, - 0x646b, 0x6459, 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, - 0x669f, 0x6705, 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, 0x003f, - /* lead byte e2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999, - 0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4, - 0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3, - 0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2, - 0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f, - 0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03, - 0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19, - 0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x6f36, 0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30, - 0x6f3c, 0x6f35, 0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd, - 0x6ef6, 0x6f39, 0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e, - 0x6f08, 0x6f21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, - 0x718f, 0x717b, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, - 0x7295, 0x7293, 0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, - 0x7471, 0x7475, 0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, - 0x757d, 0x7590, 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, - 0x7614, 0x76b8, 0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, - 0x776f, 0x777e, 0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8, - 0x787e, 0x78ab, 0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4, - 0x7998, 0x798a, 0x798b, 0x7996, 0x7995, 0x7994, 0x7993, 0x003f, - /* lead byte e3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f, - 0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c, - 0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e, - 0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf, - 0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1, - 0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc, - 0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9, - 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8024, 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, - 0x818d, 0x818c, 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, - 0x84ba, 0x84ce, 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, - 0x84c1, 0x84cd, 0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, - 0x84bb, 0x84a2, 0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af, - 0x84a8, 0x84d6, 0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4, - 0x84d2, 0x84db, 0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, - 0x876b, 0x8740, 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743, - 0x872c, 0x8741, 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, - 0x873c, 0x8712, 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, - 0x8738, 0x8724, 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, - 0x88f2, 0x88fa, 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, 0x003f, - /* lead byte e4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9, - 0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96, - 0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09, - 0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06, - 0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d, - 0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124, - 0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4, - 0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x92a6, 0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3, - 0x92ee, 0x928e, 0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1, - 0x928a, 0x9286, 0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9, - 0x929d, 0x928b, 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, - 0x977a, 0x977e, 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, - 0x977f, 0x97ce, 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, - 0x9907, 0x999d, 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, - 0x99bd, 0x99c7, 0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, - 0x9b61, 0x9b5f, 0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103, - 0x5130, 0x50f8, 0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c, - 0x50fd, 0x510a, 0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642, - 0x564c, 0x5635, 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, 0x003f, - /* lead byte e5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a, - 0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af, - 0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7, - 0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05, - 0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93, - 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d, - 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2, - 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x619b, 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, - 0x61a1, 0x618d, 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, - 0x64a0, 0x6485, 0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, - 0x64a3, 0x649f, 0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579, - 0x657b, 0x65b2, 0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7, - 0x66aa, 0x66af, 0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15, - 0x69f1, 0x69e4, 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d, - 0x69fe, 0x6a27, 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, - 0x6a08, 0x69e6, 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, - 0x6a18, 0x6a25, 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, - 0x6b51, 0x6ba5, 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, - 0x6c02, 0x6f41, 0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, 0x003f, - /* lead byte e6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96, - 0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57, - 0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67, - 0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77, - 0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a, - 0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa, - 0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e, - 0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7362, 0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d, - 0x7485, 0x7488, 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625, - 0x761e, 0x7619, 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, - 0x769c, 0x769d, 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, - 0x78cd, 0x78bb, 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, - 0x78c3, 0x78c4, 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, - 0x799b, 0x6b76, 0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, - 0x7bbe, 0x7bac, 0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, - 0x7cc8, 0x7ccc, 0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7, - 0x7de1, 0x7e03, 0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee, - 0x7ddf, 0x7f76, 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea, - 0x7fec, 0x7fe6, 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, 0x003f, - /* lead byte e7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253, - 0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500, - 0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c, - 0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2, - 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9, - 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e, - 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9, - 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8756, 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, - 0x8754, 0x875b, 0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, - 0x876a, 0x8750, 0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a, - 0x876e, 0x875c, 0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767, - 0x8769, 0x885a, 0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918, - 0x8919, 0x8906, 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4, - 0x89a3, 0x89ed, 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, - 0x8ad1, 0x8ad4, 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, - 0x8ad8, 0x8ac3, 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, - 0x8ce5, 0x8cdf, 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, - 0x8d9c, 0x8da1, 0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, - 0x8e15, 0x8e1b, 0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27, 0x003f, - /* lead byte e8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c, - 0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073, - 0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a, - 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182, - 0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6, - 0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc, - 0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd, - 0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x92b5, 0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab, - 0x95ae, 0x95b0, 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702, - 0x975a, 0x978a, 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, - 0x9826, 0x9829, 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, - 0x98fa, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, - 0x99cf, 0x99d3, 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, - 0x99d7, 0x99cc, 0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1, - 0x9b46, 0x9b43, 0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75, - 0x9b70, 0x9b68, 0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff, - 0x9cf7, 0x9d07, 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04, - 0x9e83, 0x9ed3, 0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a, - 0x5111, 0x51de, 0x5334, 0x53e1, 0x5670, 0x5660, 0x566e, 0x003f, - /* lead byte e9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c, - 0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc, - 0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10, - 0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1, - 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2, - 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9, - 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8, - 0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x61bf, 0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf, - 0x64c9, 0x64bd, 0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533, - 0x657f, 0x657c, 0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb, - 0x66cf, 0x66bd, 0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66, - 0x6a49, 0x6a67, 0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76, - 0x6a5b, 0x6a51, 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a, - 0x6a64, 0x6a50, 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c, - 0x6a5e, 0x6a56, 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54, - 0x6b56, 0x6ba7, 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03, - 0x6c06, 0x6fad, 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8, - 0x6f5e, 0x6fc4, 0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5, - 0x6fae, 0x6fba, 0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8, 0x003f, - /* lead byte ea */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5, - 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4, - 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da, - 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365, - 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495, - 0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633, - 0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d, - 0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7797, 0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3, - 0x78db, 0x78e1, 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44, - 0x7a48, 0x7a47, 0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde, - 0x7be3, 0x7be7, 0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9, - 0x7bd4, 0x7bea, 0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2, - 0x7cd4, 0x7cd7, 0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c, - 0x7e1f, 0x7e20, 0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22, - 0x7e0b, 0x7e0f, 0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43, - 0x7f7b, 0x7f7c, 0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c, - 0x81b1, 0x81a6, 0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac, - 0x81b4, 0x81b2, 0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257, - 0x8556, 0x8545, 0x856b, 0x854d, 0x8553, 0x8561, 0x8558, 0x003f, - /* lead byte eb */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, - 0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555, - 0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c, - 0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792, - 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785, - 0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789, - 0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922, - 0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8ae2, 0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4, - 0x8adf, 0x8af0, 0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef, - 0x8afb, 0x8c91, 0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0, - 0x8cf3, 0x8d6c, 0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38, - 0x8e40, 0x8e45, 0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f, - 0x8ebd, 0x8f36, 0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34, - 0x9076, 0x9079, 0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136, - 0x9193, 0x9190, 0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, - 0x931f, 0x9306, 0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, - 0x9312, 0x9301, 0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, - 0x92fa, 0x9325, 0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324, - 0x92ff, 0x9329, 0x9339, 0x9335, 0x932a, 0x9314, 0x930c, 0x003f, - /* lead byte ec */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd, - 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9, - 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0, - 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929, - 0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea, - 0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa, - 0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e, - 0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9b7d, 0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14, - 0x9d29, 0x9d1d, 0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88, - 0x9e86, 0x9e87, 0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12, - 0x9f3d, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4, - 0x5693, 0x568c, 0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682, - 0x567f, 0x5681, 0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25, - 0x5b32, 0x5b23, 0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b, - 0x5bf1, 0x5bf2, 0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3, - 0x61b5, 0x61bc, 0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de, - 0x64ef, 0x64e9, 0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580, - 0x65b6, 0x65da, 0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89, - 0x6a9f, 0x6a9b, 0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e, 0x003f, - /* lead byte ed */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a, - 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9, - 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde, - 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2, - 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2, - 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510, - 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, - 0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x77b4, 0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902, - 0x78fb, 0x78fc, 0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab, - 0x79a8, 0x7a5c, 0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe, - 0x7ac0, 0x7ac1, 0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb, - 0x7c0e, 0x7bf4, 0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01, - 0x7bf8, 0x7bfd, 0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, - 0x7e2d, 0x7e3c, 0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49, - 0x7e40, 0x7e47, 0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44, - 0x7e3a, 0x7f45, 0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, - 0x81bb, 0x81c4, 0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9, - 0x825b, 0x825a, 0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595, - 0x85a0, 0x858b, 0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e, 0x003f, - /* lead byte ee */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e, - 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582, - 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668, - 0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5, - 0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af, - 0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de, - 0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937, - 0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x8b18, 0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f, - 0x8b12, 0x8b15, 0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13, - 0x8b1a, 0x8c4f, 0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94, - 0x8cf9, 0x8d6f, 0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47, - 0x8f43, 0x8f40, 0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b, - 0x9199, 0x919f, 0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af, - 0x9364, 0x9356, 0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349, - 0x9350, 0x9351, 0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379, - 0x9357, 0x9355, 0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361, - 0x935e, 0x9363, 0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0, - 0x95c9, 0x95c3, 0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720, - 0x971f, 0x9718, 0x971d, 0x9719, 0x979a, 0x97a1, 0x979c, 0x003f, - /* lead byte ef */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a, - 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933, - 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1, - 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb, - 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01, - 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1, - 0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41, - 0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9d45, 0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d, - 0x7ff5, 0x9d2d, 0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda, - 0x9efb, 0x9eff, 0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131, - 0x512d, 0x512e, 0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699, - 0x5970, 0x5b3c, 0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8, - 0x61df, 0x61ed, 0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6, - 0x61e9, 0x64ff, 0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc, - 0x6594, 0x65db, 0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd, - 0x6ae1, 0x6ac6, 0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad, - 0x6b5e, 0x6bc9, 0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005, - 0x7014, 0x700e, 0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7, - 0x700a, 0x7201, 0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376, 0x003f, - /* lead byte f0 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2, - 0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, - 0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c, - 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac, - 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d, - 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56, - 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53, - 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x81d0, 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3, - 0x85c2, 0x85b3, 0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb, - 0x85ce, 0x85c8, 0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8, - 0x85b7, 0x85be, 0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb, - 0x87ea, 0x87e5, 0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3, - 0x87ed, 0x87d8, 0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4, - 0x87e8, 0x87dd, 0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950, - 0x8951, 0x8949, 0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35, - 0x8b47, 0x8b2f, 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26, - 0x8b36, 0x8b2e, 0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75, - 0x8c99, 0x8c98, 0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c, - 0x8e62, 0x8e60, 0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67, 0x003f, - /* lead byte f1 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47, - 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5, - 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b, - 0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395, - 0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4, - 0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3, - 0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722, - 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x97a2, 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa, - 0x9850, 0x9851, 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f, - 0x9a0b, 0x9a09, 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07, - 0x9a06, 0x9ac0, 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35, - 0x9b4a, 0x9b4c, 0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1, - 0x9bb5, 0x9bb8, 0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c, - 0x9d53, 0x9d4f, 0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c, - 0x9d57, 0x9d52, 0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c, - 0x9edf, 0x9f01, 0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29, - 0x9f28, 0x9f4c, 0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4, - 0x56ab, 0x56ad, 0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd, - 0x58db, 0x5912, 0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70, 0x003f, - /* lead byte f2 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e, - 0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1, - 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd, - 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016, - 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c, - 0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6, - 0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516, - 0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x7921, 0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68, - 0x7c33, 0x7c3c, 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76, - 0x7e75, 0x7e78, 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74, - 0x7e68, 0x7f4b, 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe, - 0x8078, 0x81d7, 0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1, - 0x85ed, 0x85d9, 0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2, - 0x85f8, 0x85d8, 0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6, - 0x85ef, 0x85de, 0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7, - 0x8809, 0x880c, 0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a, - 0x8802, 0x8962, 0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958, - 0x895d, 0x8959, 0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48, - 0x8b4a, 0x8b40, 0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55, 0x003f, - /* lead byte f3 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a, - 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d, - 0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51, - 0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad, - 0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec, - 0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3, - 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da, - 0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x97b3, 0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c, - 0x9859, 0x985d, 0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948, - 0x9947, 0x9943, 0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, - 0x9a24, 0x9a1b, 0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, - 0x9a14, 0x9ac2, 0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, - 0x9beb, 0x9be0, 0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, - 0x9bd7, 0x9bec, 0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda, - 0x9d77, 0x9d81, 0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78, - 0x9d86, 0x9d8b, 0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70, - 0x9d69, 0x9d85, 0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, - 0x9d87, 0x9d68, 0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, - 0x9f41, 0x9f4d, 0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2, 0x003f, - /* lead byte f4 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef, - 0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df, - 0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9, - 0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034, - 0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b, - 0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba, - 0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd, - 0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x79b2, 0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48, - 0x7c4a, 0x7c47, 0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, - 0x7fba, 0x7fff, 0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269, - 0x8622, 0x85ff, 0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604, - 0x8609, 0x8605, 0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817, - 0x8813, 0x8816, 0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a, - 0x8b5d, 0x8b68, 0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, - 0x8e88, 0x8e84, 0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, - 0x908d, 0x9143, 0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, - 0x9413, 0x93fb, 0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410, - 0x9428, 0x9419, 0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e, - 0x9416, 0x9412, 0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff, 0x003f, - /* lead byte f5 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df, - 0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862, - 0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c, - 0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36, - 0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10, - 0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8, - 0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f, - 0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9da0, 0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, - 0x9da2, 0x9da8, 0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, - 0x9da7, 0x9e99, 0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, - 0x9f30, 0x9f2e, 0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, - 0x513a, 0x5139, 0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, - 0x5b47, 0x5dcb, 0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc, - 0x6b03, 0x6af8, 0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049, - 0x7045, 0x7046, 0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a, - 0x77d0, 0x792d, 0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a, - 0x7e87, 0x7e88, 0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, - 0x81dd, 0x8618, 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, - 0x8627, 0x862e, 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, 0x003f, - /* lead byte f6 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a, - 0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45, - 0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e, - 0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b, - 0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437, - 0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a, - 0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956, - 0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9a3f, 0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a, - 0x9b52, 0x9c2b, 0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29, - 0x9c24, 0x9c21, 0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca, - 0x9dcf, 0x9dbe, 0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, - 0x9dba, 0x9dac, 0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, - 0x9db2, 0x9e7a, 0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, - 0x9f1a, 0x9f31, 0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, - 0x56c5, 0x56cb, 0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, - 0x6521, 0x6520, 0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, - 0x7055, 0x7056, 0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f, - 0x74d8, 0x74d5, 0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4, - 0x7a70, 0x7a71, 0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, 0x003f, - /* lead byte f7 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634, - 0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826, - 0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84, - 0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a, - 0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c, - 0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449, - 0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b, - 0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9a49, 0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, - 0x9b56, 0x9b55, 0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33, - 0x9c41, 0x9c3c, 0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, - 0x9dd2, 0x9dde, 0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, - 0x9de9, 0x9dd9, 0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6, - 0x9ef0, 0x9f35, 0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2, - 0x513d, 0x5299, 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f, - 0x5f4f, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, - 0x6b11, 0x6b12, 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, - 0x7381, 0x7383, 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, - 0x863a, 0x8640, 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, - 0x8832, 0x882e, 0x8833, 0x8976, 0x8974, 0x8973, 0x89fe, 0x003f, - /* lead byte f8 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64, - 0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4, - 0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52, - 0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c, - 0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4, - 0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec, - 0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3, - 0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9f71, 0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e, - 0x5c6d, 0x652d, 0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d, - 0x7060, 0x7223, 0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, - 0x7c6a, 0x7e97, 0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, - 0x884b, 0x8b94, 0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, - 0x91bd, 0x91c2, 0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, - 0x9747, 0x97c7, 0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, - 0x9c66, 0x9c62, 0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03, - 0x9e06, 0x9e05, 0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04, - 0x9ea0, 0x9f1e, 0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e, - 0x65b8, 0x6b18, 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa, - 0x77d8, 0x77d9, 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, 0x003f, - /* lead byte f9 */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648, - 0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5, - 0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749, - 0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10, - 0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78, - 0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2, - 0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74, - 0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x9fa4, 0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, - 0x883f, 0x8b9e, 0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, - 0x98cc, 0x9961, 0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, - 0x9e17, 0x9f48, 0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482, - 0x9480, 0x9481, 0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b, - 0x8b9f, 0x9483, 0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, - 0x7069, 0x706a, 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, 0x7881, 0x92b9, - 0x88cf, 0x58bb, 0x6052, 0x7ca7, 0x5afa, 0x2554, 0x2566, 0x2557, - 0x2560, 0x256c, 0x2563, 0x255a, 0x2569, 0x255d, 0x2552, 0x2564, - 0x2555, 0x255e, 0x256a, 0x2561, 0x2558, 0x2567, 0x255b, 0x2553, - 0x2565, 0x2556, 0x255f, 0x256b, 0x2562, 0x2559, 0x2568, 0x255c, - 0x2551, 0x2550, 0x256d, 0x256e, 0x2570, 0x256f, 0x2593, 0x003f -}; - -static const unsigned char cp2uni_leadbytes[256] = -{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 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, 0x01, - 0x01, 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, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 -}; - -static const unsigned short uni2cp_low[27648] = -{ - /* 0x0000 .. 0x00ff */ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0020, 0x0021, 0x0063, 0x004c, 0x003f, 0x0059, 0x007c, 0xa1b1, - 0x0022, 0x0063, 0x0061, 0xa16d, 0x003f, 0x002d, 0x0072, 0xa1c2, - 0xa258, 0xa1d3, 0x0032, 0x0033, 0xa3bd, 0xa367, 0x003f, 0xa150, - 0x002c, 0x0031, 0x006f, 0xa16e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0043, - 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049, - 0x0044, 0x004e, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0xa1d1, - 0x004f, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x003f, 0xa35d, - 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0063, - 0x0065, 0x0065, 0x0065, 0x0065, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0064, 0x006e, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0xa1d2, - 0x006f, 0x0075, 0x0075, 0x0075, 0x0075, 0x0079, 0x003f, 0x0079, - /* 0x0100 .. 0x01ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063, - 0x0043, 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0047, 0x0067, 0x0047, 0x0067, - 0x0047, 0x0067, 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, - 0x0049, 0x0069, 0x003f, 0x003f, 0x004a, 0x006a, 0x004b, 0x006b, - 0x003f, 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x003f, - 0x003f, 0x004c, 0x006c, 0x004e, 0x006e, 0x004e, 0x006e, 0x004e, - 0x006e, 0x003f, 0x003f, 0x003f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0057, 0x0077, 0x0059, 0x0079, - 0x0059, 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0073, - 0x0062, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0044, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0045, 0x0046, 0x0066, 0x003f, 0x003f, 0x003f, 0x003f, 0x0049, - 0x003f, 0x003f, 0x006c, 0x003f, 0x003f, 0x003f, 0x003f, 0x004f, - 0x004f, 0x006f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, 0x0054, 0x0055, - 0x0075, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa278, 0x003f, 0x003f, 0x0021, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, 0x0049, - 0x0069, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, - 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x003f, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0047, 0x0067, 0x0047, 0x0067, - 0x004b, 0x006b, 0x004f, 0x006f, 0x004f, 0x006f, 0x003f, 0x003f, - 0x006a, 0x003f, 0x003f, 0x003f, 0x0047, 0x0067, 0x003f, 0x003f, - 0x004e, 0x006e, 0x0041, 0x0061, 0x0041, 0x0061, 0x004f, 0x006f, - /* 0x0200 .. 0x02ff */ - 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0053, 0x0073, 0x0054, 0x0074, 0x003f, 0x003f, 0x0048, 0x0068, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0061, - 0x0045, 0x0065, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0068, 0x003f, 0x006a, 0x0072, 0x003f, 0x003f, 0x003f, 0x0077, - 0x0079, 0xa3bd, 0x0022, 0xa1a5, 0xa1a6, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x005e, 0xa3be, - 0x0027, 0xa3bc, 0xa3bd, 0xa3bf, 0x003f, 0xa1c5, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa3bb, 0xa258, 0x003f, 0x007e, 0x0022, 0x003f, 0x003f, - 0x003f, 0x006c, 0x0073, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x0300 .. 0x03ff */ - 0xa3bf, 0xa3bd, 0x005e, 0x007e, 0xa1c2, 0xa1c2, 0x003f, 0xa3bb, - 0x0022, 0x003f, 0xa258, 0x0022, 0xa3be, 0x003f, 0x0022, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x002c, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa1c5, 0xa1c5, 0x005f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa3bf, 0xa3bd, 0x003f, 0x003f, 0x0022, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa3bd, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa3bd, 0x0022, 0xa344, 0xa150, - 0xa348, 0xa34a, 0xa34c, 0x003f, 0xa352, 0x003f, 0xa357, 0xa35b, - 0xa364, 0xa344, 0xa345, 0xa346, 0xa347, 0xa348, 0xa349, 0xa34a, - 0xa34b, 0xa34c, 0xa34d, 0xa34e, 0xa34f, 0xa350, 0xa351, 0xa352, - 0xa353, 0xa354, 0x003f, 0xa355, 0xa356, 0xa357, 0xa358, 0xa359, - 0xa35a, 0xa35b, 0xa34c, 0xa357, 0xa35c, 0xa360, 0xa362, 0xa364, - 0xa36f, 0xa35c, 0xa35d, 0xa35e, 0xa35f, 0xa360, 0xa361, 0xa362, - 0xa363, 0xa364, 0xa365, 0xa366, 0xa367, 0xa368, 0xa369, 0xa36a, - 0xa36b, 0xa36c, 0x003f, 0xa36d, 0xa36e, 0xa36f, 0xa370, 0xa371, - 0xa372, 0xa373, 0xa364, 0xa36f, 0xa36a, 0xa36f, 0xa373, 0x003f, - 0xa35d, 0xa363, 0xa357, 0xa357, 0xa357, 0xa370, 0xa36b, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa365, 0xa36c, 0x003f, 0x003f, 0xa34b, 0xa360, 0x003f, 0x003f, - 0x003f, 0xa355, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1d00 .. 0x1dff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0041, 0x0042, 0x003f, - 0x0044, 0x0045, 0x003f, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, - 0x004c, 0x004d, 0x004e, 0x003f, 0x004f, 0x003f, 0x0050, 0x0052, - 0x0054, 0x0055, 0x0057, 0x0061, 0x003f, 0x003f, 0x003f, 0x0062, - 0x0064, 0x0065, 0x003f, 0x003f, 0x003f, 0x0067, 0x003f, 0x006b, - 0x006d, 0x003f, 0x006f, 0x003f, 0x003f, 0x003f, 0x0070, 0x0074, - 0x0075, 0x003f, 0x003f, 0x0076, 0x003f, 0xa35d, 0xa35e, 0xa35f, - 0xa370, 0xa371, 0x0069, 0x0072, 0x0075, 0x0076, 0xa35d, 0xa35e, - 0xa36c, 0xa370, 0xa371, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x0063, 0x003f, 0x0064, 0x003f, - 0x0066, 0x003f, 0x0067, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0074, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x007a, 0x003f, 0x003f, 0x003f, 0xa363, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1e00 .. 0x1eff */ - 0x0041, 0x0061, 0x0042, 0x0062, 0x0042, 0x0062, 0x0042, 0x0062, - 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064, - 0x0044, 0x0064, 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0046, 0x0066, - 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, - 0x0048, 0x0068, 0x0048, 0x0068, 0x0049, 0x0069, 0x0049, 0x0069, - 0x004b, 0x006b, 0x004b, 0x006b, 0x004b, 0x006b, 0x004c, 0x006c, - 0x004c, 0x006c, 0x004c, 0x006c, 0x004c, 0x006c, 0x004d, 0x006d, - 0x004d, 0x006d, 0x004d, 0x006d, 0x004e, 0x006e, 0x004e, 0x006e, - 0x004e, 0x006e, 0x004e, 0x006e, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0050, 0x0070, 0x0050, 0x0070, - 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, - 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, - 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, - 0x0054, 0x0074, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0056, 0x0076, 0x0056, 0x0076, - 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, - 0x0057, 0x0077, 0x0058, 0x0078, 0x0058, 0x0078, 0x0059, 0x0079, - 0x005a, 0x007a, 0x005a, 0x007a, 0x005a, 0x007a, 0x0068, 0x0074, - 0x0077, 0x0079, 0x003f, 0x0073, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, - 0x0049, 0x0069, 0x0049, 0x0069, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, 0x004f, 0x006f, - 0x004f, 0x006f, 0x004f, 0x006f, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, - 0x0055, 0x0075, 0x0059, 0x0079, 0x0059, 0x0079, 0x0059, 0x0079, - 0x0059, 0x0079, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x1f00 .. 0x1fff */ - 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, - 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, - 0xa360, 0xa360, 0xa360, 0xa360, 0xa360, 0xa360, 0x003f, 0x003f, - 0xa348, 0xa348, 0xa348, 0xa348, 0xa348, 0xa348, 0x003f, 0x003f, - 0xa362, 0xa362, 0xa362, 0xa362, 0xa362, 0xa362, 0xa362, 0xa362, - 0xa34a, 0xa34a, 0xa34a, 0xa34a, 0xa34a, 0xa34a, 0xa34a, 0xa34a, - 0xa364, 0xa364, 0xa364, 0xa364, 0xa364, 0xa364, 0xa364, 0xa364, - 0xa34c, 0xa34c, 0xa34c, 0xa34c, 0xa34c, 0xa34c, 0xa34c, 0xa34c, - 0xa36a, 0xa36a, 0xa36a, 0xa36a, 0xa36a, 0xa36a, 0x003f, 0x003f, - 0xa352, 0xa352, 0xa352, 0xa352, 0xa352, 0xa352, 0x003f, 0x003f, - 0xa36f, 0xa36f, 0xa36f, 0xa36f, 0xa36f, 0xa36f, 0xa36f, 0xa36f, - 0x003f, 0xa357, 0x003f, 0xa357, 0x003f, 0xa357, 0x003f, 0xa357, - 0xa373, 0xa373, 0xa373, 0xa373, 0xa373, 0xa373, 0xa373, 0xa373, - 0xa35b, 0xa35b, 0xa35b, 0xa35b, 0xa35b, 0xa35b, 0xa35b, 0xa35b, - 0xa35c, 0xa35c, 0xa360, 0xa360, 0xa362, 0xa362, 0xa364, 0xa364, - 0xa36a, 0xa36a, 0xa36f, 0xa36f, 0xa373, 0xa373, 0x003f, 0x003f, - 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, - 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, - 0xa362, 0xa362, 0xa362, 0xa362, 0xa362, 0xa362, 0xa362, 0xa362, - 0xa34a, 0xa34a, 0xa34a, 0xa34a, 0xa34a, 0xa34a, 0xa34a, 0xa34a, - 0xa373, 0xa373, 0xa373, 0xa373, 0xa373, 0xa373, 0xa373, 0xa373, - 0xa35b, 0xa35b, 0xa35b, 0xa35b, 0xa35b, 0xa35b, 0xa35b, 0xa35b, - 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0xa35c, 0x003f, 0xa35c, 0xa35c, - 0xa344, 0xa344, 0xa344, 0xa344, 0xa344, 0x003f, 0xa364, 0x003f, - 0x003f, 0x0022, 0xa362, 0xa362, 0xa362, 0x003f, 0xa362, 0xa362, - 0xa348, 0xa348, 0xa34a, 0xa34a, 0xa34a, 0x003f, 0x003f, 0x003f, - 0xa364, 0xa364, 0xa364, 0xa364, 0x003f, 0x003f, 0xa364, 0xa364, - 0xa34c, 0xa34c, 0xa34c, 0xa34c, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa36f, 0xa36f, 0xa36f, 0xa36f, 0xa36c, 0xa36c, 0xa36f, 0xa36f, - 0xa357, 0xa357, 0xa357, 0xa357, 0xa354, 0x0022, 0x0022, 0x0060, - 0x003f, 0x003f, 0xa373, 0xa373, 0xa373, 0x003f, 0xa373, 0xa373, - 0xa352, 0xa352, 0xa35b, 0xa35b, 0xa35b, 0xa3bd, 0x003f, 0x003f, - /* 0x2000 .. 0x20ff */ - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x002d, 0x002d, 0x003f, 0xa156, 0xa158, 0xa156, 0x003f, 0x005f, - 0xa1a5, 0xa1a6, 0x002c, 0xa1a5, 0xa1a7, 0xa1a8, 0x002c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x002e, 0xa14c, 0xa14b, 0xa145, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0x003f, 0x003f, 0xa1ac, 0x0022, 0x003f, 0xa1ab, 0x003f, 0x003f, - 0x003f, 0xa171, 0xa172, 0xa1b0, 0x0021, 0x003f, 0xa1c2, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa241, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0020, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa258, 0x0069, 0x003f, 0x003f, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0x002d, 0x003d, 0x0028, 0x0029, 0x006e, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x002b, 0x002d, 0x003d, 0x0028, 0x0029, 0x003f, - 0x0061, 0x0065, 0x006f, 0x0078, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0063, 0x003f, 0x003f, 0x004c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa3e1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2100 .. 0x21ff */ - 0x003f, 0x003f, 0x0043, 0xa24a, 0x003f, 0xa1c1, 0x003f, 0x0045, - 0x003f, 0xa24b, 0x0067, 0x0048, 0x0048, 0x0048, 0x0068, 0x0068, - 0x0049, 0x0049, 0x004c, 0x006c, 0x003f, 0x004e, 0x003f, 0x003f, - 0x0050, 0x0050, 0x0051, 0x0052, 0x0052, 0x0052, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x005a, 0x003f, 0xa35b, 0x003f, - 0x005a, 0x003f, 0x004b, 0x0041, 0x0042, 0x0043, 0x0065, 0x0065, - 0x0045, 0x0046, 0x003f, 0x004d, 0x006f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0069, 0x003f, 0x003f, 0xa36b, 0xa35e, 0xa346, 0xa353, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0044, 0x0064, 0x0065, - 0x0069, 0x006a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa2b9, 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, - 0xa2c1, 0xa2c2, 0x003f, 0x003f, 0x004c, 0x0043, 0x0044, 0x004d, - 0x0069, 0x003f, 0x003f, 0x003f, 0x0076, 0x003f, 0x003f, 0x003f, - 0x003f, 0x0078, 0x003f, 0x003f, 0x006c, 0x0063, 0x0064, 0x006d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1f6, 0xa1f4, 0xa1f7, 0xa1f5, 0x002d, 0x007c, 0xa1f8, 0xa1f9, - 0xa1fb, 0xa1fa, 0xa1f6, 0xa1f7, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x002d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2200 .. 0x22ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x004f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x002d, 0xa1d3, 0x003f, 0xa241, 0x005c, 0x002a, - 0xa258, 0x003f, 0xa1d4, 0x003f, 0x003f, 0x003f, 0xa1db, 0xa1e8, - 0xa1e7, 0x003f, 0x003f, 0xa1fd, 0xa1fd, 0xa1fc, 0xa1fc, 0x003f, - 0x003f, 0xa1e4, 0xa1e5, 0xa1ec, 0x003f, 0x003f, 0xa1ed, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1ef, 0xa1ee, 0x003a, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x007e, 0x003f, 0x003f, 0x003f, - 0x003f, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x007e, 0x007e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1dc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1da, 0xa1dd, 0xa1dd, 0xa1dd, 0x003f, 0x003f, 0xa1d8, 0xa1d9, - 0x003f, 0x003f, 0xa16d, 0xa16e, 0x003f, 0x003f, 0x003c, 0x003e, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1f2, 0x003f, 0x003f, - 0x003f, 0xa1f3, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1e6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1e9, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa150, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2300 .. 0x23ff */ - 0x003f, 0x003f, 0x003f, 0x005e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa171, 0xa172, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2400 .. 0x24ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, - 0x0039, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0041, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, - 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, - 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, - 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, - 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, - 0x0079, 0x007a, 0x0030, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2500 .. 0x25ff */ - 0xa277, 0xa277, 0xa278, 0xa278, 0x002d, 0x002d, 0x007c, 0x007c, - 0x002d, 0x002d, 0x007c, 0x007c, 0xa27a, 0xa27a, 0xa27a, 0xa27a, - 0xa27b, 0xa27b, 0xa27b, 0xa27b, 0xa27c, 0xa27c, 0xa27c, 0xa27c, - 0xa27d, 0xa27d, 0xa27d, 0xa27d, 0xa275, 0xa275, 0xa275, 0xa275, - 0xa275, 0xa275, 0xa275, 0xa275, 0xa274, 0xa274, 0xa274, 0xa274, - 0xa274, 0xa274, 0xa274, 0xa274, 0xa273, 0xa273, 0xa273, 0xa273, - 0xa273, 0xa273, 0xa273, 0xa273, 0xa272, 0xa272, 0xa272, 0xa272, - 0xa272, 0xa272, 0xa272, 0xa272, 0xa271, 0xa271, 0xa271, 0xa271, - 0xa271, 0xa271, 0xa271, 0xa271, 0xa271, 0xa271, 0xa271, 0xa271, - 0xa271, 0xa271, 0xa271, 0xa271, 0x002d, 0x002d, 0x007c, 0x007c, - 0xa2a4, 0xf9f8, 0xf9e6, 0xf9ef, 0xf9dd, 0xf9e8, 0xf9f1, 0xf9df, - 0xf9ec, 0xf9f5, 0xf9e3, 0xf9ee, 0xf9f7, 0xf9e5, 0xa2a5, 0xf9f2, - 0xf9e0, 0xa2a7, 0xf9f4, 0xf9e2, 0xf9e7, 0xf9f0, 0xf9de, 0xf9ed, - 0xf9f6, 0xf9e4, 0xa2a6, 0xf9f3, 0xf9e1, 0xa27e, 0xa2a1, 0xa2a3, - 0xa2a2, 0xa2ac, 0xa2ad, 0xa2ae, 0xa15a, 0x007c, 0xa15a, 0x007c, - 0xa15a, 0x007c, 0xa15a, 0x007c, 0xa15a, 0x007c, 0xa15a, 0x007c, - 0x003f, 0xa262, 0xa263, 0xa264, 0xa265, 0xa266, 0xa267, 0xa268, - 0xa269, 0xa270, 0xa26f, 0xa26e, 0xa26d, 0xa26c, 0xa26b, 0xa26a, - 0x003f, 0x003f, 0x003f, 0xf9fe, 0xa276, 0xa279, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1bd, 0xa1bc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa1b6, 0xa1b5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa1bf, 0xa1be, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1bb, 0xa1ba, - 0x003f, 0x003f, 0x003f, 0xa1b3, 0x003f, 0x003f, 0xa1b7, 0xa1b4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa2a8, 0xa2a9, 0xa2ab, 0xa2aa, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1b3, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2600 .. 0x26ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa1b9, 0xa1b8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa1f0, 0x003f, 0xa1f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2e00 .. 0x2eff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa5c0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x2f00 .. 0x2fff */ - 0xa440, 0x003f, 0x003f, 0x003f, 0xa441, 0x003f, 0xa447, 0x003f, - 0xa448, 0xa449, 0xa44a, 0xa44b, 0x003f, 0x003f, 0x003f, 0xa44c, - 0xc942, 0xa44d, 0xa44f, 0x003f, 0xa450, 0xc943, 0x003f, 0xa2cc, - 0xa452, 0x003f, 0xc944, 0x003f, 0xa453, 0xa466, 0xc949, 0xa467, - 0xa468, 0x003f, 0x003f, 0xa469, 0xa46a, 0xa46b, 0xa46c, 0x003f, - 0xa46f, 0xa470, 0xa471, 0xa472, 0xc94b, 0xa473, 0x003f, 0xa475, - 0xa476, 0xa479, 0xa47a, 0x003f, 0x003f, 0x003f, 0xa47b, 0xa47c, - 0xa47d, 0x003f, 0x003f, 0xc94c, 0xa4df, 0xa4e0, 0xa4e1, 0xa4e2, - 0xa4e4, 0x003f, 0xa4e5, 0xa4e6, 0xa4e7, 0xa4e8, 0x003f, 0xa4e9, - 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, 0xc95f, 0xa4f0, - 0xa4f1, 0xa4f2, 0xa4f3, 0xc961, 0xa4f4, 0xa4f5, 0xa4f6, 0xa4f7, - 0xa4f8, 0xc962, 0xa4f9, 0xa4fa, 0xa4fb, 0xa4fc, 0xa5c8, 0xa5c9, - 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5d0, 0xa5d4, 0x003f, - 0x003f, 0xa5d5, 0xa5d6, 0xa5d7, 0xa5d8, 0xa5d9, 0xa5da, 0xa5db, - 0xa5dc, 0xc9a8, 0xa5dd, 0xa5de, 0xa5df, 0xa6cb, 0xa6cc, 0xa6cd, - 0xa6ce, 0xca49, 0xa6cf, 0xa6d0, 0xa6d1, 0xa6d3, 0xa6d4, 0xa6d5, - 0xa6d6, 0xa6d7, 0xa6da, 0xa6db, 0xa6dc, 0xa6dd, 0xa6de, 0xa6df, - 0xa6e0, 0xa6e1, 0xa6e2, 0xca4a, 0xca4f, 0xa6e4, 0xa6e5, 0xa6e6, - 0xa6e7, 0xca50, 0xa8a3, 0xa8a4, 0xa8a5, 0xa8a6, 0xa8a7, 0xa8a8, - 0xcba4, 0xa8a9, 0xa8aa, 0xa8ab, 0xa8ac, 0xa8ad, 0xa8ae, 0xa8af, - 0xa8b0, 0x003f, 0xa8b6, 0xa8bb, 0xa8bc, 0xa8bd, 0xaaf7, 0xaaf8, - 0xaaf9, 0xaafa, 0x003f, 0xab41, 0xab42, 0x003f, 0xab44, 0xadb1, - 0xadb2, 0xadb3, 0xadb4, 0xadb5, 0xadb6, 0xadb7, 0xadb8, 0xadb9, - 0xadba, 0xadbb, 0xb0a8, 0xb0a9, 0xb0aa, 0xd449, 0xb0ab, 0xd44a, - 0xb0ac, 0xb0ad, 0xb3bd, 0xb3be, 0xb3bf, 0xb3c0, 0xb3c1, 0xb3c2, - 0xb6c0, 0xb6c1, 0xb6c2, 0xdcb0, 0xe0ef, 0xb9a9, 0xb9aa, 0xb9ab, - 0xbbf3, 0xbbf4, 0xbea6, 0xc073, 0xc074, 0xefb6, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3000 .. 0x30ff */ - 0xa140, 0xa142, 0xa143, 0xa1b2, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa171, 0xa172, 0xa16d, 0xa16e, 0xa175, 0xa176, 0xa179, 0xa17a, - 0xa169, 0xa16a, 0xa245, 0x003f, 0xa165, 0xa166, 0x003f, 0x003f, - 0x003f, 0x003f, 0x005b, 0x005d, 0x003f, 0xa1a9, 0xa1aa, 0x002c, - 0x003f, 0xa2c3, 0xa2c4, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, - 0xa2ca, 0xa2cb, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa245, 0x003f, - 0xa2cc, 0xa2cd, 0xa2ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3100 .. 0x31ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa374, 0xa375, 0xa376, - 0xa377, 0xa378, 0xa379, 0xa37a, 0xa37b, 0xa37c, 0xa37d, 0xa37e, - 0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7, 0xa3a8, - 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, 0xa3b0, - 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, 0xa3b8, - 0xa3b9, 0xa3ba, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa440, 0xa447, 0xa454, 0xa57c, 0xa457, 0xa4a4, - 0xa455, 0xa5d2, 0xa441, 0xa4fe, 0xa442, 0xa4d1, 0xa661, 0xa448, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3200 .. 0x32ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa440, 0xa447, 0xa454, 0xa57c, 0xa4ad, 0xa4bb, 0xa443, 0xa44b, - 0xa445, 0xa2cc, 0xa4eb, 0xa4f5, 0xa4f4, 0xa4ec, 0xaaf7, 0xa467, - 0xa4e9, 0xaee8, 0xa6b3, 0xaac0, 0xa657, 0xaf53, 0xb05d, 0xafac, - 0x003f, 0xafb5, 0xa86b, 0xa46b, 0xbe41, 0xc075, 0xa64c, 0xaa60, - 0xb6b5, 0xa5f0, 0x003f, 0xa1c0, 0xa457, 0xa4a4, 0xa455, 0xa5aa, - 0xa56b, 0x003f, 0xa976, 0x003f, 0xbaca, 0xa5f8, 0xb8ea, 0xa8f3, - 0xa95d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x3300 .. 0x33ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa255, 0xa256, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa250, 0xa251, 0xa252, 0x003f, - 0x003f, 0xa254, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa257, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa253, 0x003f, - 0x003f, 0xa1eb, 0xa1ea, 0x003f, 0x003f, 0xa24f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x4e00 .. 0x4eff */ - 0xa440, 0xa442, 0x003f, 0xa443, 0x003f, 0x003f, 0x003f, 0xc945, - 0xa456, 0xa454, 0xa457, 0xa455, 0xc946, 0xa4a3, 0xc94f, 0xc94d, - 0xa4a2, 0xa4a1, 0x003f, 0x003f, 0xa542, 0xa541, 0xa540, 0x003f, - 0xa543, 0xa4fe, 0x003f, 0x003f, 0x003f, 0x003f, 0xa5e0, 0xa5e1, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa8c3, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa458, 0x003f, 0xa4a4, 0xc950, 0x003f, - 0xa4a5, 0xc963, 0xa6ea, 0xcbb1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa459, 0xa4a6, 0x003f, 0xa544, 0xc964, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc940, 0xa444, 0x003f, 0xa45b, 0x003f, 0xc947, - 0xa45c, 0x003f, 0x003f, 0xa4a7, 0x003f, 0xa545, 0xa547, 0xa546, - 0x003f, 0x003f, 0xa5e2, 0xa5e3, 0x003f, 0x003f, 0xa8c4, 0x003f, - 0xadbc, 0xa441, 0x003f, 0x003f, 0xc941, 0xa445, 0xa45e, 0xa45d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa5e4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa8c5, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb0ae, 0xd44b, - 0x003f, 0x003f, 0xb6c3, 0xdcb1, 0xdcb2, 0x003f, 0xa446, 0x003f, - 0xa4a9, 0x003f, 0x003f, 0xa8c6, 0xa447, 0xc948, 0xa45f, 0x003f, - 0x003f, 0xa4aa, 0xa4ac, 0xc951, 0xa4ad, 0xa4ab, 0x003f, 0x003f, - 0x003f, 0xa5e5, 0x003f, 0xa8c7, 0x003f, 0x003f, 0xa8c8, 0xab45, - 0x003f, 0xa460, 0xa4ae, 0x003f, 0xa5e6, 0xa5e8, 0xa5e7, 0x003f, - 0xa6eb, 0x003f, 0x003f, 0xa8c9, 0xa8ca, 0xab46, 0xab47, 0x003f, - 0x003f, 0x003f, 0x003f, 0xadbd, 0x003f, 0x003f, 0xdcb3, 0x003f, - 0x003f, 0xf6d6, 0xa448, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa4b0, 0xa4af, 0xc952, 0xa4b1, 0xa4b7, 0x003f, 0xa4b2, 0xa4b3, - 0xc954, 0xc953, 0xa4b5, 0xa4b6, 0x003f, 0xa4b4, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa54a, 0xa54b, 0xa54c, 0xa54d, - 0xa549, 0xa550, 0xc96a, 0x003f, 0xc966, 0xc969, 0xa551, 0xa561, - 0x003f, 0xc968, 0x003f, 0xa54e, 0xa54f, 0xa548, 0x003f, 0x003f, - 0xc965, 0xc967, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa5f5, 0xc9b0, 0xa5f2, 0xa5f6, 0xc9ba, 0xc9ae, 0xa5f3, 0xc9b2, - 0x003f, 0x003f, 0x003f, 0xa5f4, 0x003f, 0xa5f7, 0x003f, 0xa5e9, - /* 0x4f00 .. 0x4fff */ - 0xc9b1, 0xa5f8, 0xc9b5, 0x003f, 0xc9b9, 0xc9b6, 0x003f, 0x003f, - 0xc9b3, 0xa5ea, 0xa5ec, 0xa5f9, 0x003f, 0xa5ee, 0xc9ab, 0xa5f1, - 0xa5ef, 0xa5f0, 0xc9bb, 0xc9b8, 0xc9af, 0xa5ed, 0x003f, 0x003f, - 0xc9ac, 0xa5eb, 0x003f, 0x003f, 0x003f, 0xc9b4, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc9b7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc9ad, 0xca66, 0x003f, 0xa742, - 0xa6f4, 0x003f, 0x003f, 0xca67, 0xa6f1, 0x003f, 0xa744, 0x003f, - 0xa6f9, 0x003f, 0xa6f8, 0xca5b, 0xa6fc, 0xa6f7, 0xca60, 0xca68, - 0x003f, 0xca64, 0x003f, 0xa6fa, 0x003f, 0x003f, 0xa6fd, 0xa6ee, - 0xa747, 0xca5d, 0x003f, 0x003f, 0xcbbd, 0xa6ec, 0xa743, 0xa6ed, - 0xa6f5, 0xa6f6, 0xca62, 0xca5e, 0xa6fb, 0xa6f3, 0xca5a, 0xa6ef, - 0xca65, 0xa745, 0xa748, 0xa6f2, 0xa740, 0xa746, 0xa6f0, 0xca63, - 0xa741, 0xca69, 0xca5c, 0xa6fe, 0xca5f, 0x003f, 0x003f, 0xca61, - 0x003f, 0xa8d8, 0xcbbf, 0xcbcb, 0xa8d0, 0x003f, 0xcbcc, 0xa8cb, - 0xa8d5, 0x003f, 0x003f, 0xa8ce, 0xcbb9, 0xa8d6, 0xcbb8, 0xcbbc, - 0xcbc3, 0xcbc1, 0xa8de, 0xa8d9, 0xcbb3, 0xcbb5, 0xa8db, 0xa8cf, - 0xcbb6, 0xcbc2, 0xcbc9, 0xa8d4, 0xcbbb, 0xcbb4, 0xa8d3, 0xcbb7, - 0xa8d7, 0xcbba, 0x003f, 0xa8d2, 0x003f, 0xa8cd, 0x003f, 0xa8dc, - 0xcbc4, 0xa8dd, 0xcbc8, 0x003f, 0xcbc6, 0xcbca, 0xa8da, 0xcbbe, - 0xcbb2, 0x003f, 0xcbc0, 0xa8d1, 0xcbc5, 0xa8cc, 0xcbc7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xab56, 0xab4a, - 0x003f, 0x003f, 0xcde0, 0xcde8, 0x003f, 0xab49, 0xab51, 0xab5d, - 0x003f, 0xcdee, 0xcdec, 0xcde7, 0x003f, 0x003f, 0x003f, 0xab4b, - 0xcded, 0xcde3, 0xab59, 0xab50, 0xab58, 0xcdde, 0x003f, 0xcdea, - 0x003f, 0xcde1, 0xab54, 0xcde2, 0x003f, 0xcddd, 0xab5b, 0xab4e, - 0xab57, 0xab4d, 0x003f, 0xcddf, 0xcde4, 0x003f, 0xcdeb, 0xab55, - 0xab52, 0xcde6, 0xab5a, 0xcde9, 0xcde5, 0xab4f, 0xab5c, 0xab53, - 0xab4c, 0xab48, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcdef, 0x003f, 0xadd7, 0xadc1, - 0x003f, 0xadd1, 0x003f, 0xadd6, 0xd0d0, 0xd0cf, 0xd0d4, 0xd0d5, - 0xadc4, 0x003f, 0xadcd, 0x003f, 0x003f, 0x003f, 0xadda, 0x003f, - /* 0x5000 .. 0x50ff */ - 0xadce, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0c9, 0xadc7, 0xd0ca, - 0x003f, 0xaddc, 0x003f, 0xadd3, 0xadbe, 0xadbf, 0xd0dd, 0xb0bf, - 0x003f, 0xadcc, 0xadcb, 0xd0cb, 0xadcf, 0xd45b, 0xadc6, 0xd0d6, - 0xadd5, 0xadd4, 0xadca, 0xd0ce, 0xd0d7, 0x003f, 0xd0c8, 0xadc9, - 0xd0d8, 0xadd2, 0xd0cc, 0xadc0, 0x003f, 0xadc3, 0xadc2, 0xd0d9, - 0xadd0, 0xadc5, 0xadd9, 0xaddb, 0xd0d3, 0xadd8, 0x003f, 0xd0db, - 0xd0cd, 0xd0dc, 0x003f, 0xd0d1, 0x003f, 0xd0da, 0x003f, 0xd0d2, - 0x003f, 0x003f, 0x003f, 0x003f, 0xadc8, 0x003f, 0x003f, 0x003f, - 0xd463, 0xd457, 0x003f, 0xb0b3, 0x003f, 0xd45c, 0xd462, 0xb0b2, - 0xd455, 0xb0b6, 0xd459, 0xd452, 0xb0b4, 0xd456, 0xb0b9, 0xb0be, - 0x003f, 0xd467, 0x003f, 0xd451, 0x003f, 0xb0ba, 0x003f, 0xd466, - 0x003f, 0x003f, 0xb0b5, 0xd458, 0xb0b1, 0xd453, 0xd44f, 0xd45d, - 0xd450, 0xd44e, 0xd45a, 0xd460, 0xd461, 0xb0b7, 0x003f, 0x003f, - 0xd85b, 0xd45e, 0xd44d, 0xd45f, 0x003f, 0xb0c1, 0xd464, 0xb0c0, - 0xd44c, 0x003f, 0xd454, 0xd465, 0xb0bc, 0xb0bb, 0xb0b8, 0xb0bd, - 0x003f, 0x003f, 0xb0af, 0x003f, 0x003f, 0xb0b0, 0x003f, 0x003f, - 0xb3c8, 0x003f, 0xd85e, 0xd857, 0x003f, 0xb3c5, 0x003f, 0xd85f, - 0x003f, 0x003f, 0x003f, 0xd855, 0xd858, 0xb3c4, 0xd859, 0x003f, - 0x003f, 0xb3c7, 0xd85d, 0x003f, 0xd853, 0xd852, 0xb3c9, 0x003f, - 0xb3ca, 0xb3c6, 0xb3cb, 0xd851, 0xd85c, 0xd85a, 0xd854, 0x003f, - 0x003f, 0x003f, 0xb3c3, 0xd856, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb6ca, 0xb6c4, 0xdcb7, 0xb6cd, - 0xdcbd, 0xdcc0, 0xb6c6, 0xb6c7, 0xdcba, 0xb6c5, 0xdcc3, 0xb6cb, - 0xdcc4, 0x003f, 0xdcbf, 0xb6cc, 0x003f, 0xdcb4, 0xb6c9, 0xdcb5, - 0x003f, 0xdcbe, 0xdcbc, 0x003f, 0xdcb8, 0xb6c8, 0xdcb6, 0xb6ce, - 0xdcbb, 0xdcc2, 0xdcb9, 0xdcc1, 0x003f, 0x003f, 0xb9b6, 0xb9b3, - 0x003f, 0xb9b4, 0x003f, 0xe0f9, 0xe0f1, 0xb9b2, 0xb9af, 0xe0f2, - 0x003f, 0x003f, 0xb9b1, 0xe0f5, 0x003f, 0xe0f7, 0x003f, 0x003f, - 0xe0fe, 0x003f, 0x003f, 0xe0fd, 0xe0f8, 0xb9ae, 0xe0f0, 0xb9ac, - 0xe0f3, 0xb9b7, 0xe0f6, 0x003f, 0xe0fa, 0xb9b0, 0xb9ad, 0xe0fc, - 0xe0fb, 0xb9b5, 0x003f, 0xe0f4, 0x003f, 0xbbf8, 0xe4ec, 0x003f, - 0xe4e9, 0xbbf9, 0x003f, 0xbbf7, 0x003f, 0xe4f0, 0xe4ed, 0xe4e6, - /* 0x5100 .. 0x51ff */ - 0xbbf6, 0x003f, 0xbbfa, 0xe4e7, 0xbbf5, 0xbbfd, 0xe4ea, 0xe4eb, - 0xbbfb, 0xbbfc, 0xe4f1, 0xe4ee, 0xe4ef, 0x003f, 0x003f, 0x003f, - 0xbeaa, 0xe8f8, 0xbea7, 0xe8f5, 0xbea9, 0xbeab, 0x003f, 0xe8f6, - 0xbea8, 0x003f, 0xe8f7, 0x003f, 0xe8f4, 0x003f, 0x003f, 0xc076, - 0xecbd, 0xc077, 0xecbb, 0x003f, 0xecbc, 0xecba, 0xecb9, 0x003f, - 0x003f, 0xecbe, 0xc075, 0x003f, 0x003f, 0xefb8, 0xefb9, 0x003f, - 0xe4e8, 0xefb7, 0xc078, 0xc35f, 0xf1eb, 0xf1ec, 0x003f, 0xc4d7, - 0xc4d8, 0xf5c1, 0xf5c0, 0xc56c, 0xc56b, 0xf7d0, 0x003f, 0xa449, - 0xa461, 0xa4b9, 0x003f, 0xa4b8, 0xa553, 0xa552, 0xa5fc, 0xa5fb, - 0xa5fd, 0xa5fa, 0x003f, 0xa74a, 0xa749, 0xa74b, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa8e0, 0x003f, 0xa8df, 0xa8e1, 0x003f, 0xab5e, - 0x003f, 0xa259, 0xd0de, 0xa25a, 0xb0c2, 0xa25c, 0xa25b, 0xd860, - 0x003f, 0xa25d, 0xb9b8, 0xa25e, 0x003f, 0xa44a, 0x003f, 0xa4ba, - 0xa5fe, 0xa8e2, 0x003f, 0xa44b, 0xa4bd, 0xa4bb, 0xa4bc, 0x003f, - 0x003f, 0xa640, 0x003f, 0x003f, 0x003f, 0xa74c, 0xa8e4, 0xa8e3, - 0xa8e5, 0x003f, 0x003f, 0x003f, 0xaddd, 0x003f, 0x003f, 0x003f, - 0xbeac, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc94e, - 0x003f, 0xa554, 0xa555, 0x003f, 0x003f, 0xa641, 0x003f, 0xca6a, - 0x003f, 0xab60, 0xab5f, 0xd0e0, 0xd0df, 0xb0c3, 0x003f, 0xa4be, - 0xc955, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbcd, 0x003f, - 0xab61, 0x003f, 0xade0, 0x003f, 0xadde, 0xaddf, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbead, 0x003f, 0xa556, 0x003f, 0x003f, 0x003f, - 0xa642, 0xc9bc, 0x003f, 0x003f, 0x003f, 0x003f, 0xa74d, 0xa74e, - 0x003f, 0xca6b, 0x003f, 0x003f, 0xcbce, 0xa8e6, 0xcbcf, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd0e2, 0xd0e3, 0xade3, 0x003f, - 0xd0e4, 0x003f, 0xd0e1, 0xade4, 0xade2, 0xade1, 0xd0e5, 0x003f, - 0xd468, 0x003f, 0x003f, 0x003f, 0xd861, 0x003f, 0x003f, 0xdcc5, - 0xe140, 0x003f, 0x003f, 0x003f, 0xbbfe, 0xbeae, 0xe8f9, 0x003f, - 0xa44c, 0xa45a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb0c4, 0xb3cd, 0x003f, 0xb9b9, 0x003f, 0xc942, 0xa4bf, 0x003f, - 0xa559, 0xa557, 0xa558, 0x003f, 0x003f, 0xa8e7, 0x003f, 0x003f, - /* 0x5200 .. 0x52ff */ - 0xa44d, 0xa44e, 0x003f, 0xa462, 0x003f, 0x003f, 0xa4c0, 0xa4c1, - 0xa4c2, 0xc9be, 0xa55a, 0x003f, 0xc96b, 0x003f, 0xa646, 0x003f, - 0xc9bf, 0xa644, 0xa645, 0xc9bd, 0x003f, 0x003f, 0xa647, 0xa643, - 0x003f, 0x003f, 0x003f, 0x003f, 0xca6c, 0xaaec, 0xca6d, 0x003f, - 0x003f, 0xca6e, 0x003f, 0x003f, 0xa750, 0xa74f, 0x003f, 0x003f, - 0xa753, 0xa751, 0xa752, 0x003f, 0x003f, 0x003f, 0xa8ed, 0x003f, - 0xa8ec, 0xcbd4, 0xcbd1, 0xcbd2, 0x003f, 0xcbd0, 0xa8ee, 0xa8ea, - 0xa8e9, 0x003f, 0xa8eb, 0xa8e8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa8ef, 0x003f, 0xab63, 0xcdf0, 0x003f, 0xcbd3, 0xab68, - 0x003f, 0xcdf1, 0xab64, 0xab67, 0xab66, 0xab65, 0xab62, 0x003f, - 0x003f, 0x003f, 0xd0e8, 0x003f, 0xade7, 0xd0eb, 0xade5, 0x003f, - 0x003f, 0x003f, 0xd0e7, 0xade8, 0xade6, 0xade9, 0xd0e9, 0xd0ea, - 0x003f, 0xd0e6, 0xd0ec, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3d1, 0xb0c5, 0xd469, 0xd46b, 0xd46a, 0xd46c, 0xb0c6, - 0x003f, 0x003f, 0xb3ce, 0x003f, 0xb3cf, 0xb3d0, 0x003f, 0xb6d0, - 0xdcc7, 0x003f, 0xdcc6, 0xdcc8, 0xdcc9, 0xb6d1, 0x003f, 0xb6cf, - 0xe141, 0xe142, 0xb9bb, 0xb9ba, 0xe35a, 0x003f, 0x003f, 0xbc40, - 0xbc41, 0xbc42, 0xbc44, 0xe4f2, 0xe4f3, 0xbc43, 0x003f, 0x003f, - 0x003f, 0xbeaf, 0x003f, 0xbeb0, 0x003f, 0x003f, 0xf1ed, 0xf5c3, - 0xf5c2, 0xf7d1, 0x003f, 0xa44f, 0x003f, 0x003f, 0x003f, 0xa55c, - 0xa55b, 0x003f, 0x003f, 0xa648, 0x003f, 0x003f, 0xc9c0, 0x003f, - 0x003f, 0xa755, 0xa756, 0xa754, 0xa757, 0xca6f, 0xca70, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa8f1, 0xcbd5, 0x003f, 0xa8f0, 0x003f, - 0xcdf2, 0xab6c, 0xcdf3, 0xab6b, 0x003f, 0x003f, 0x003f, 0xab69, - 0x003f, 0xab6a, 0x003f, 0x003f, 0x003f, 0xd0ed, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb0c7, 0xd46e, 0x003f, 0xb0ca, 0xd46d, 0xb1e5, - 0xb0c9, 0xb0c8, 0x003f, 0xb3d4, 0x003f, 0xb3d3, 0xb3d2, 0xb6d2, - 0x003f, 0x003f, 0xb6d5, 0xb6d6, 0xb6d4, 0x003f, 0xb6d3, 0x003f, - 0x003f, 0xe143, 0x003f, 0xe144, 0x003f, 0x003f, 0x003f, 0xe4f5, - 0xbc45, 0xe4f4, 0x003f, 0xbeb1, 0xecbf, 0xc079, 0x003f, 0xf1ee, - 0xc455, 0x003f, 0xa463, 0xa4c3, 0xc956, 0x003f, 0xa4c4, 0xa4c5, - /* 0x5300 .. 0x53ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa55d, 0xa55e, 0x003f, - 0xa649, 0xca71, 0xcbd6, 0xcbd7, 0x003f, 0xab6d, 0xd0ee, 0xb0cc, - 0xb0cb, 0xd863, 0xd862, 0x003f, 0x003f, 0xa450, 0xa4c6, 0xa55f, - 0x003f, 0xb0cd, 0xc943, 0x003f, 0xc96c, 0xa560, 0x003f, 0xc9c2, - 0xa64b, 0xa64a, 0xc9c1, 0xa758, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xadea, 0x003f, 0x003f, 0xd46f, 0x003f, 0xb6d7, - 0xe145, 0xb9bc, 0x003f, 0x003f, 0xe8fa, 0x003f, 0x003f, 0xf3fd, - 0x003f, 0xa4c7, 0x003f, 0x003f, 0xcbd8, 0xcdf4, 0xb0d0, 0xb0ce, - 0xb0cf, 0xa2cc, 0x003f, 0xa464, 0xa2cd, 0xa2ce, 0x003f, 0xa4c9, - 0xa4c8, 0xa563, 0xa562, 0x003f, 0xc96d, 0xc9c3, 0x003f, 0x003f, - 0x003f, 0xa8f5, 0xa8f2, 0xa8f4, 0xa8f3, 0x003f, 0x003f, 0xab6e, - 0x003f, 0x003f, 0xb3d5, 0x003f, 0xa452, 0x003f, 0xa4cb, 0x003f, - 0xa565, 0xa564, 0x003f, 0xca72, 0x003f, 0x003f, 0xa8f6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc957, 0x003f, 0xa567, 0xa566, - 0xa64c, 0xa64d, 0xca73, 0xa759, 0x003f, 0xa75a, 0x003f, 0xa8f7, - 0xa8f8, 0xa8f9, 0x003f, 0xab6f, 0xcdf5, 0x003f, 0x003f, 0xadeb, - 0x003f, 0x003f, 0xc944, 0x003f, 0xa4cc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc9c4, 0x003f, 0x003f, 0x003f, 0xca74, 0xca75, - 0x003f, 0x003f, 0xcbd9, 0x003f, 0xcbda, 0x003f, 0xcdf7, 0xcdf6, - 0xcdf9, 0xcdf8, 0xab70, 0x003f, 0xd470, 0xaded, 0xd0ef, 0xadec, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd864, 0xb3d6, 0x003f, 0xd865, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe146, 0xb9bd, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbc46, 0x003f, 0xf1ef, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc958, 0x003f, 0xa568, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb0d1, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa453, 0xa465, 0xa4ce, 0xa4cd, 0x003f, 0xa4cf, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa8fb, 0x003f, 0xa8fa, 0xa8fc, - 0x003f, 0x003f, 0x003f, 0xab71, 0x003f, 0x003f, 0x003f, 0xadee, - 0x003f, 0xe8fb, 0xc24f, 0xa466, 0xa56a, 0xa579, 0xa574, 0x003f, - 0xa56f, 0xa56e, 0xa575, 0xa573, 0xa56c, 0xa57a, 0xa56d, 0xa569, - 0xa578, 0xa577, 0xa576, 0xa56b, 0x003f, 0xa572, 0x003f, 0x003f, - 0xa571, 0x003f, 0x003f, 0xa57b, 0xa570, 0x003f, 0x003f, 0x003f, - /* 0x5400 .. 0x54ff */ - 0x003f, 0xa653, 0x003f, 0xa659, 0xa655, 0x003f, 0xa65b, 0xc9c5, - 0xa658, 0xa64e, 0xa651, 0xa654, 0xa650, 0xa657, 0xa65a, 0xa64f, - 0xa652, 0xa656, 0xa65c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xca7e, 0xca7b, 0x003f, 0xa767, 0xca7c, 0xa75b, 0xa75d, 0xa775, - 0xa770, 0x003f, 0x003f, 0x003f, 0xcaa5, 0xca7d, 0xa75f, 0xa761, - 0xcaa4, 0xa768, 0xca78, 0xa774, 0xa776, 0xa75c, 0xa76d, 0x003f, - 0xca76, 0xa773, 0x003f, 0xa764, 0x003f, 0xa76e, 0xa76f, 0xca77, - 0xa76c, 0xa76a, 0x003f, 0xa76b, 0xa771, 0xcaa1, 0xa75e, 0x003f, - 0xa772, 0xcaa3, 0xa766, 0xa763, 0x003f, 0xca7a, 0xa762, 0xcaa6, - 0xa765, 0x003f, 0xa769, 0x003f, 0x003f, 0x003f, 0xa760, 0xcaa2, - 0x003f, 0x003f, 0x003f, 0x003f, 0xca79, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcbeb, 0xcbea, 0xa94f, 0xcbed, 0xcbef, 0xcbe4, 0xcbe7, 0xcbee, - 0xa950, 0x003f, 0x003f, 0xcbe1, 0xcbe5, 0x003f, 0x003f, 0xcbe9, - 0xce49, 0xa94b, 0xce4d, 0xa8fd, 0xcbe6, 0xa8fe, 0xa94c, 0xa945, - 0xa941, 0x003f, 0xcbe2, 0xa944, 0xa949, 0xa952, 0xcbe3, 0xcbdc, - 0xa943, 0xcbdd, 0xcbdf, 0x003f, 0xa946, 0x003f, 0xa948, 0xcbdb, - 0xcbe0, 0x003f, 0x003f, 0xa951, 0xa94d, 0xcbe8, 0xa953, 0x003f, - 0xa94a, 0xcbde, 0xa947, 0x003f, 0x003f, 0xa942, 0xa940, 0x003f, - 0xcbec, 0x003f, 0xa94e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xce48, 0xcdfb, 0xce4b, 0x003f, 0x003f, 0xcdfd, 0xab78, 0xaba8, - 0xab74, 0xaba7, 0xab7d, 0xaba4, 0xab72, 0xcdfc, 0xce43, 0xaba3, - 0xce4f, 0xaba5, 0x003f, 0xab79, 0x003f, 0x003f, 0xce45, 0xce42, - 0xab77, 0x003f, 0xcdfa, 0xaba6, 0xce4a, 0xab7c, 0xce4c, 0xaba9, - 0xab73, 0xab7e, 0xab7b, 0xce40, 0xaba1, 0xce46, 0xce47, 0xab7a, - 0xaba2, 0xab76, 0x003f, 0x003f, 0x003f, 0x003f, 0xab75, 0xcdfe, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xce44, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xce4e, 0x003f, - 0xd144, 0xadfb, 0xd0f1, 0x003f, 0xd0f6, 0xadf4, 0xae40, 0xd0f4, - 0xadef, 0xadf9, 0xadfe, 0xd0fb, 0x003f, 0xadfa, 0xadfd, 0x003f, - 0x003f, 0xd0fe, 0xadf5, 0xd0f5, 0x003f, 0x003f, 0x003f, 0xd142, - 0xd143, 0x003f, 0xadf7, 0xd141, 0xadf3, 0xae43, 0x003f, 0xd0f8, - /* 0x5500 .. 0x55ff */ - 0x003f, 0xadf1, 0x003f, 0xd146, 0xd0f9, 0xd0fd, 0xadf6, 0xae42, - 0xd0fa, 0xadfc, 0xd140, 0xd147, 0xd4a1, 0x003f, 0xd145, 0xae44, - 0xadf0, 0xd0fc, 0xd0f3, 0x003f, 0xadf8, 0x003f, 0x003f, 0xd0f2, - 0x003f, 0x003f, 0xd0f7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0f0, 0xae41, - 0x003f, 0x003f, 0xd477, 0x003f, 0xb0e4, 0xd4a7, 0xb0e2, 0xb0df, - 0xd47c, 0xb0db, 0xd4a2, 0xb0e6, 0xd476, 0xd47b, 0xd47a, 0xadf2, - 0xb0e1, 0xd4a5, 0x003f, 0xd4a8, 0xd473, 0x003f, 0xb3e8, 0x003f, - 0xd4a9, 0xb0e7, 0x003f, 0xb0d9, 0xb0d6, 0xd47e, 0xb0d3, 0x003f, - 0xd4a6, 0x003f, 0xb0da, 0xd4aa, 0x003f, 0xd474, 0xd4a4, 0xb0dd, - 0xd475, 0xd478, 0xd47d, 0x003f, 0x003f, 0xb0de, 0xb0dc, 0xb0e8, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb0e3, 0x003f, 0xb0d7, 0xb1d2, - 0x003f, 0xb0d8, 0xd479, 0xb0e5, 0xb0e0, 0xd4a3, 0xb0d5, 0x003f, - 0x003f, 0x003f, 0xb0d4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd471, 0xd472, 0xd86a, - 0x003f, 0x003f, 0x003f, 0xb3d7, 0xb3da, 0xd875, 0xb3ee, 0xd878, - 0xb3d8, 0xd871, 0xb3de, 0xb3e4, 0xb5bd, 0x003f, 0x003f, 0xb3e2, - 0xd86e, 0xb3ef, 0xb3db, 0xb3e3, 0xd876, 0xdcd7, 0xd87b, 0xd86f, - 0x003f, 0xd866, 0xd873, 0xd86d, 0xb3e1, 0xd879, 0x003f, 0x003f, - 0xb3dd, 0xb3f1, 0xb3ea, 0x003f, 0xb3df, 0xb3dc, 0x003f, 0xb3e7, - 0x003f, 0xd87a, 0xd86c, 0xd872, 0xd874, 0xd868, 0xd877, 0xb3d9, - 0xd867, 0x003f, 0xb3e0, 0xb3f0, 0xb3ec, 0xd869, 0xb3e6, 0x003f, - 0x003f, 0xb3ed, 0xb3e9, 0xb3e5, 0x003f, 0xd870, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb3eb, 0x003f, 0x003f, 0x003f, 0xdcd5, - 0xdcd1, 0x003f, 0xdce0, 0xdcca, 0xdcd3, 0xb6e5, 0xb6e6, 0xb6de, - 0xdcdc, 0xb6e8, 0xdccf, 0xdcce, 0xdccc, 0xdcde, 0xb6dc, 0xdcd8, - 0xdccd, 0xb6df, 0xdcd6, 0xb6da, 0xdcd2, 0xdcd9, 0xdcdb, 0x003f, - 0x003f, 0xdcdf, 0xb6e3, 0xdccb, 0xb6dd, 0xdcd0, 0x003f, 0xb6d8, - 0x003f, 0xb6e4, 0xdcda, 0xb6e0, 0xb6e1, 0xb6e7, 0xb6db, 0xa25f, - 0xb6d9, 0xdcd4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6e2, - 0x003f, 0x003f, 0xdcdd, 0x003f, 0x003f, 0x003f, 0xb9cd, 0xb9c8, - 0x003f, 0xe155, 0xe151, 0x003f, 0xe14b, 0xb9c2, 0xb9be, 0xe154, - /* 0x5600 .. 0x56ff */ - 0xb9bf, 0xe14e, 0xe150, 0x003f, 0xe153, 0x003f, 0xb9c4, 0x003f, - 0xb9cb, 0xb9c5, 0x003f, 0x003f, 0xe149, 0xb9c6, 0xb9c7, 0xe14c, - 0xb9cc, 0x003f, 0xe14a, 0xe14f, 0xb9c3, 0xe148, 0xb9c9, 0xb9c1, - 0x003f, 0x003f, 0x003f, 0xb9c0, 0xe14d, 0xe152, 0x003f, 0xb9ca, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe147, - 0x003f, 0xbc4d, 0xe547, 0x003f, 0xe544, 0x003f, 0xbc47, 0xbc53, - 0xbc54, 0x003f, 0xbc4a, 0xe542, 0xbc4c, 0xe4f9, 0xbc52, 0x003f, - 0xe546, 0xbc49, 0xe548, 0xbc48, 0x003f, 0xe543, 0xe545, 0xbc4b, - 0xe541, 0xe4fa, 0xe4f7, 0x003f, 0x003f, 0xd86b, 0xe4fd, 0x003f, - 0xe4f6, 0xe4fc, 0xe4fb, 0x003f, 0xe4f8, 0x003f, 0xbc4f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbc4e, 0x003f, 0x003f, 0x003f, 0xbc50, - 0xe4fe, 0xbeb2, 0xe540, 0x003f, 0x003f, 0x003f, 0xe945, 0x003f, - 0xe8fd, 0x003f, 0xbebe, 0xe942, 0xbeb6, 0xbeba, 0xe941, 0x003f, - 0xbeb9, 0xbeb5, 0xbeb8, 0xbeb3, 0xbebd, 0xe943, 0xe8fe, 0xbebc, - 0xe8fc, 0xbebb, 0xe944, 0xe940, 0xbc51, 0x003f, 0xbebf, 0xe946, - 0xbeb7, 0xbeb4, 0x003f, 0x003f, 0x003f, 0x003f, 0xecc6, 0xecc8, - 0xc07b, 0xecc9, 0xecc7, 0xecc5, 0xecc4, 0xc07d, 0xecc3, 0xc07e, - 0x003f, 0x003f, 0x003f, 0x003f, 0xecc1, 0xecc2, 0xc07a, 0xc0a1, - 0xc07c, 0x003f, 0x003f, 0xecc0, 0x003f, 0xc250, 0x003f, 0xefbc, - 0xefba, 0xefbf, 0xefbd, 0x003f, 0xefbb, 0xefbe, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc360, 0xf1f2, 0xf1f3, - 0xc456, 0x003f, 0xf1f4, 0xf1f0, 0xf1f5, 0xf1f1, 0xc251, 0x003f, - 0x003f, 0x003f, 0xf3fe, 0xf441, 0xc459, 0xf440, 0xc458, 0xc457, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc45a, 0xf5c5, 0xf5c6, 0x003f, - 0xc4da, 0xc4d9, 0xc4db, 0xf5c4, 0x003f, 0xf6d8, 0xf6d7, 0x003f, - 0xc56d, 0xc56f, 0xc56e, 0xf6d9, 0xc5c8, 0xf8a6, 0x003f, 0x003f, - 0x003f, 0xc5f1, 0x003f, 0xf8a5, 0xf8ee, 0x003f, 0x003f, 0xc949, - 0x003f, 0x003f, 0xa57d, 0xa57c, 0x003f, 0xa65f, 0xa65e, 0xc9c7, - 0xa65d, 0xc9c6, 0x003f, 0x003f, 0xa779, 0xcaa9, 0x003f, 0xcaa8, - 0x003f, 0x003f, 0xa777, 0xa77a, 0x003f, 0x003f, 0xcaa7, 0x003f, - 0xa778, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcbf0, - 0x003f, 0xcbf1, 0xa954, 0x003f, 0x003f, 0x003f, 0x003f, 0xabaa, - /* 0x5700 .. 0x57ff */ - 0x003f, 0xd148, 0xd149, 0xae45, 0xae46, 0x003f, 0x003f, 0xd4ac, - 0xb0e9, 0xb0eb, 0xd4ab, 0xb0ea, 0xd87c, 0xb3f2, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb6e9, 0xb6ea, 0xdce1, 0x003f, 0xb9cf, 0x003f, - 0xb9ce, 0x003f, 0xe549, 0xe948, 0xe947, 0x003f, 0xf96b, 0xa467, - 0xc959, 0x003f, 0xc96e, 0xc96f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa662, 0xa666, 0xc9c9, 0x003f, 0xa664, 0xa663, 0xc9c8, 0xa665, - 0xa661, 0x003f, 0x003f, 0xa660, 0xc9ca, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa7a6, 0x003f, 0x003f, 0xa7a3, 0x003f, - 0xa77d, 0xcaaa, 0x003f, 0x003f, 0x003f, 0xcaab, 0x003f, 0xa7a1, - 0x003f, 0xcaad, 0xa77b, 0xcaae, 0xcaac, 0xa77e, 0xa7a2, 0xa7a5, - 0xa7a4, 0xa77c, 0xcaaf, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa959, 0xcbfe, 0x003f, 0xa95b, 0x003f, 0xa95a, 0x003f, - 0xcc40, 0xa958, 0xa957, 0xcbf5, 0x003f, 0xcbf4, 0x003f, 0xcbf2, - 0xcbf7, 0xcbf6, 0xcbf3, 0xcbfc, 0xcbfd, 0xcbfa, 0xcbf8, 0xa956, - 0x003f, 0x003f, 0x003f, 0xcbfb, 0xa95c, 0xcc41, 0x003f, 0x003f, - 0xcbf9, 0x003f, 0xabab, 0xa955, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xabac, 0xce54, 0x003f, 0x003f, 0xce5a, - 0x003f, 0x003f, 0x003f, 0xabb2, 0xce58, 0xce5e, 0x003f, 0xce55, - 0xce59, 0xce5b, 0xce5d, 0xce57, 0x003f, 0xce56, 0xce51, 0xce52, - 0xabad, 0x003f, 0xabaf, 0xabae, 0xce53, 0xce5c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xabb1, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xce50, 0xd153, 0x003f, - 0xd152, 0xd157, 0xd14e, 0x003f, 0xd151, 0xd150, 0x003f, 0xd154, - 0x003f, 0xd158, 0xae47, 0xae4a, 0x003f, 0x003f, 0xd14f, 0xd155, - 0x003f, 0x003f, 0x003f, 0xae49, 0xd14a, 0x003f, 0xabb0, 0xd4ba, - 0xd156, 0x003f, 0xd14d, 0x003f, 0xae48, 0xd14c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd4b1, 0x003f, 0x003f, 0xb0ec, - 0xb0f0, 0xd4c1, 0xd4af, 0xd4bd, 0xb0f1, 0xd4bf, 0x003f, 0xd4c5, - 0x003f, 0xd4c9, 0x003f, 0x003f, 0xd4c0, 0xd4b4, 0xd4bc, 0x003f, - 0xd4ca, 0xd4c8, 0xd4be, 0xd4b9, 0xd4b2, 0xd8a6, 0xd4b0, 0xb0f5, - 0xd4b7, 0xb0f6, 0xb0f2, 0xd4ad, 0xd4c3, 0xd4b5, 0x003f, 0x003f, - /* 0x5800 .. 0x58ff */ - 0xd4b3, 0xd4c6, 0xb0f3, 0x003f, 0xd4cc, 0xb0ed, 0xb0ef, 0xd4bb, - 0xd4b6, 0xae4b, 0xb0ee, 0xd4b8, 0xd4c7, 0xd4cb, 0xd4c2, 0x003f, - 0xd4c4, 0x003f, 0x003f, 0x003f, 0xd4ae, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd8a1, 0x003f, 0xd8aa, 0xd8a9, 0xb3fa, 0xd8a2, 0x003f, - 0xb3fb, 0xb3f9, 0x003f, 0xd8a4, 0xb3f6, 0xd8a8, 0x003f, 0xd8a3, - 0xd8a5, 0xd87d, 0xb3f4, 0x003f, 0xd8b2, 0xd8b1, 0xd8ae, 0xb3f3, - 0xb3f7, 0xb3f8, 0xd14b, 0xd8ab, 0xb3f5, 0xb0f4, 0xd8ad, 0xd87e, - 0xd8b0, 0xd8af, 0x003f, 0xd8b3, 0x003f, 0xdcef, 0x003f, 0xd8ac, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd8a7, 0xdce7, 0xb6f4, 0xb6f7, 0xb6f2, 0xdce6, 0xdcea, 0xdce5, - 0x003f, 0xb6ec, 0xb6f6, 0xdce2, 0xb6f0, 0xdce9, 0x003f, 0xb6ee, - 0xb6ed, 0xdcec, 0xb6ef, 0xdcee, 0x003f, 0xdceb, 0xb6eb, 0x003f, - 0x003f, 0x003f, 0xb6f5, 0xdcf0, 0xdce4, 0xdced, 0x003f, 0x003f, - 0xdce3, 0x003f, 0x003f, 0xb6f1, 0x003f, 0xb6f3, 0x003f, 0xdce8, - 0x003f, 0xdcf1, 0x003f, 0x003f, 0xe15d, 0xb9d0, 0xe163, 0x003f, - 0x003f, 0xb9d5, 0xe15f, 0xe166, 0xe157, 0xb9d7, 0xb9d1, 0xe15c, - 0xbc55, 0xe15b, 0xe164, 0xb9d2, 0x003f, 0xb9d6, 0xe15a, 0xe160, - 0xe165, 0xe156, 0xb9d4, 0xe15e, 0x003f, 0x003f, 0xe162, 0xe168, - 0xe158, 0xe161, 0x003f, 0xb9d3, 0xe167, 0x003f, 0x003f, 0x003f, - 0xe159, 0x003f, 0x003f, 0x003f, 0xbc59, 0xe54b, 0xbc57, 0xbc56, - 0xe54d, 0xe552, 0x003f, 0xe54e, 0x003f, 0xe551, 0xbc5c, 0x003f, - 0xbea5, 0xbc5b, 0x003f, 0xe54a, 0xe550, 0x003f, 0xbc5a, 0xe54f, - 0x003f, 0xe54c, 0x003f, 0xbc58, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe94d, 0xf9d9, 0xe94f, 0xe94a, 0xbec1, 0xe94c, - 0x003f, 0xbec0, 0xe94e, 0x003f, 0x003f, 0xbec3, 0xe950, 0xbec2, - 0xe949, 0xe94b, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0a5, 0xeccc, - 0x003f, 0xc0a4, 0xeccd, 0xc0a3, 0xeccb, 0xc0a2, 0xecca, 0x003f, - 0xc253, 0xc252, 0xf1f6, 0xf1f8, 0x003f, 0xf1f7, 0xc361, 0xc362, - 0x003f, 0x003f, 0xc363, 0xf442, 0xc45b, 0x003f, 0x003f, 0xf7d3, - 0xf7d2, 0xc5f2, 0x003f, 0xa468, 0xa4d0, 0x003f, 0x003f, 0xa7a7, - 0x003f, 0x003f, 0x003f, 0x003f, 0xce5f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb3fc, 0xb3fd, 0x003f, 0xdcf2, 0xb9d8, 0xe169, 0xe553, - /* 0x5900 .. 0x59ff */ - 0x003f, 0x003f, 0x003f, 0xc95a, 0x003f, 0x003f, 0xcab0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcc42, 0xce60, 0xd159, 0xae4c, - 0x003f, 0x003f, 0xf1f9, 0x003f, 0xc4dc, 0xa469, 0xa57e, 0xc970, - 0x003f, 0xa667, 0xa668, 0x003f, 0xa95d, 0x003f, 0x003f, 0x003f, - 0xb0f7, 0x003f, 0xb9da, 0x003f, 0xb9db, 0xb9d9, 0x003f, 0xa46a, - 0x003f, 0xa4d1, 0xa4d3, 0xa4d2, 0xc95b, 0xa4d4, 0xa5a1, 0xc971, - 0x003f, 0xa5a2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa669, - 0xa66a, 0x003f, 0x003f, 0x003f, 0xc9cb, 0x003f, 0xa7a8, 0x003f, - 0xcab1, 0x003f, 0x003f, 0x003f, 0xa961, 0xcc43, 0x003f, 0xa95f, - 0xa960, 0xa95e, 0xd15a, 0x003f, 0x003f, 0x003f, 0xabb6, 0xabb5, - 0xabb7, 0xabb4, 0x003f, 0xce61, 0xa962, 0xabb3, 0x003f, 0xae4d, - 0xae4e, 0x003f, 0xae4f, 0x003f, 0xd4cd, 0x003f, 0x003f, 0x003f, - 0xb3fe, 0xd8b4, 0xb0f8, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6f8, - 0x003f, 0xb9dd, 0xb9dc, 0xe16a, 0x003f, 0xbc5d, 0xbec4, 0x003f, - 0xefc0, 0xf6da, 0xf7d4, 0xa46b, 0xa5a3, 0x003f, 0xa5a4, 0xc9d1, - 0xa66c, 0xa66f, 0x003f, 0xc9cf, 0xc9cd, 0xa66e, 0xc9d0, 0xc9d2, - 0xc9cc, 0xa671, 0xa670, 0xa66d, 0xa66b, 0xc9ce, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa7b3, 0x003f, 0x003f, 0xa7b0, 0xcab6, 0xcab9, - 0xcab8, 0x003f, 0xa7aa, 0xa7b2, 0x003f, 0x003f, 0xa7af, 0xcab5, - 0xcab3, 0xa7ae, 0x003f, 0x003f, 0x003f, 0xa7a9, 0xa7ac, 0x003f, - 0xcab4, 0xcabb, 0xcab7, 0xa7ad, 0xa7b1, 0xa7b4, 0xcab2, 0xcaba, - 0xa7ab, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa967, 0xa96f, - 0x003f, 0xcc4f, 0xcc48, 0xa970, 0xcc53, 0xcc44, 0xcc4b, 0x003f, - 0x003f, 0xa966, 0xcc45, 0xa964, 0xcc4c, 0xcc50, 0xa963, 0x003f, - 0xcc51, 0xcc4a, 0x003f, 0xcc4d, 0x003f, 0xa972, 0xa969, 0xcc54, - 0xcc52, 0x003f, 0xa96e, 0xa96c, 0xcc49, 0xa96b, 0xcc47, 0xcc46, - 0xa96a, 0xa968, 0xa971, 0xa96d, 0xa965, 0x003f, 0xcc4e, 0x003f, - 0xabb9, 0x003f, 0xabc0, 0xce6f, 0xabb8, 0xce67, 0xce63, 0x003f, - 0xce73, 0xce62, 0x003f, 0xabbb, 0xce6c, 0xabbe, 0xabc1, 0x003f, - 0xabbc, 0xce70, 0xabbf, 0x003f, 0xae56, 0xce76, 0xce64, 0x003f, - 0x003f, 0xce66, 0xce6d, 0xce71, 0xce75, 0xce72, 0xce6b, 0xce6e, - 0x003f, 0x003f, 0xce68, 0xabc3, 0xce6a, 0xce69, 0xce74, 0xabba, - /* 0x5a00 .. 0x5aff */ - 0xce65, 0xabc2, 0x003f, 0xabbd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xae5c, 0xd162, 0x003f, 0xae5b, 0x003f, 0x003f, 0xd160, - 0x003f, 0xae50, 0x003f, 0xae55, 0x003f, 0xd15f, 0xd15c, 0xd161, - 0xae51, 0xd15b, 0x003f, 0xae54, 0xae52, 0x003f, 0xd163, 0xae53, - 0xae57, 0x003f, 0x003f, 0xae58, 0x003f, 0xae5a, 0x003f, 0x003f, - 0x003f, 0xae59, 0x003f, 0x003f, 0x003f, 0xd15d, 0xd15e, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd164, 0x003f, 0xd4d4, 0xb0f9, 0xd8c2, - 0xd4d3, 0xd4e6, 0x003f, 0x003f, 0xb140, 0x003f, 0xd4e4, 0x003f, - 0xb0fe, 0xb0fa, 0xd4ed, 0xd4dd, 0xd4e0, 0x003f, 0xb143, 0xd4ea, - 0xd4e2, 0xb0fb, 0xb144, 0x003f, 0xd4e7, 0xd4e5, 0x003f, 0x003f, - 0xd4d6, 0xd4eb, 0xd4df, 0xd4da, 0x003f, 0xd4d0, 0xd4ec, 0xd4dc, - 0xd4cf, 0x003f, 0xb142, 0xd4e1, 0xd4ee, 0xd4de, 0xd4d2, 0xd4d7, - 0xd4ce, 0x003f, 0xb141, 0x003f, 0xd4db, 0xd4d8, 0xb0fc, 0xd4d1, - 0x003f, 0xd4e9, 0xb0fd, 0x003f, 0xd4d9, 0xd4d5, 0x003f, 0x003f, - 0xd4e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb440, - 0xd8bb, 0x003f, 0xd8b8, 0xd8c9, 0xd8bd, 0xd8ca, 0x003f, 0xb442, - 0x003f, 0x003f, 0x003f, 0xd8c6, 0xd8c3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd8c4, 0xd8c7, 0xd8cb, 0x003f, 0xd4e3, 0xd8cd, - 0xdd47, 0x003f, 0xb443, 0xd8ce, 0xd8b6, 0xd8c0, 0x003f, 0xd8c5, - 0x003f, 0x003f, 0xb441, 0xb444, 0xd8cc, 0xd8cf, 0xd8ba, 0xd8b7, - 0x003f, 0x003f, 0xd8b9, 0x003f, 0x003f, 0xd8be, 0xd8bc, 0xb445, - 0x003f, 0xd8c8, 0x003f, 0x003f, 0xd8bf, 0x003f, 0xd8c1, 0xd8b5, - 0xdcfa, 0xdcf8, 0xb742, 0xb740, 0xdd43, 0xdcf9, 0xdd44, 0xdd40, - 0xdcf7, 0xdd46, 0xdcf6, 0xdcfd, 0xb6fe, 0xb6fd, 0xb6fc, 0xdcfb, - 0xdd41, 0xb6f9, 0xb741, 0x003f, 0xdcf4, 0x003f, 0xdcfe, 0xdcf3, - 0xdcfc, 0xb6fa, 0xdd42, 0xdcf5, 0xb6fb, 0xdd45, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe16e, 0xb9e2, 0xb9e1, - 0xb9e3, 0xe17a, 0xe170, 0xe176, 0xe16b, 0xe179, 0xe178, 0xe17c, - 0xe175, 0xb9de, 0xe174, 0xb9e4, 0x003f, 0xe16d, 0xb9df, 0x003f, - 0xe17b, 0xb9e0, 0xe16f, 0xe172, 0xe177, 0xe171, 0xe16c, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe173, 0xe555, 0xbc61, 0xe558, 0xe557, - 0xe55a, 0xe55c, 0xf9dc, 0xbc5f, 0x003f, 0xe556, 0x003f, 0xe554, - /* 0x5b00 .. 0x5bff */ - 0x003f, 0xe55d, 0xe55b, 0xe559, 0x003f, 0xe55f, 0x003f, 0xe55e, - 0xbc63, 0xbc5e, 0x003f, 0xbc60, 0xbc62, 0x003f, 0x003f, 0xe560, - 0xe957, 0x003f, 0x003f, 0xe956, 0xe955, 0x003f, 0xe958, 0xe951, - 0x003f, 0xe952, 0xe95a, 0xe953, 0x003f, 0xbec5, 0xe95c, 0x003f, - 0xe95b, 0xe954, 0x003f, 0xecd1, 0xc0a8, 0xeccf, 0xecd4, 0xecd3, - 0xe959, 0x003f, 0xc0a7, 0x003f, 0xecd2, 0xecce, 0xecd6, 0xecd5, - 0xc0a6, 0x003f, 0xecd0, 0x003f, 0xbec6, 0x003f, 0x003f, 0x003f, - 0xc254, 0x003f, 0x003f, 0x003f, 0xefc1, 0xf1fa, 0xf1fb, 0xf1fc, - 0xc45c, 0x003f, 0x003f, 0xc45d, 0x003f, 0xf443, 0x003f, 0xf5c8, - 0xf5c7, 0x003f, 0x003f, 0xf6db, 0xf6dc, 0xf7d5, 0xf8a7, 0x003f, - 0xa46c, 0xa46d, 0x003f, 0xa46e, 0xa4d5, 0xa5a5, 0xc9d3, 0xa672, - 0xa673, 0x003f, 0xa7b7, 0xa7b8, 0xa7b6, 0xa7b5, 0x003f, 0xa973, - 0x003f, 0x003f, 0xcc55, 0xa975, 0xa974, 0xcc56, 0x003f, 0x003f, - 0x003f, 0xabc4, 0x003f, 0xae5d, 0xd165, 0x003f, 0xd4f0, 0x003f, - 0xb145, 0xb447, 0xd4ef, 0xb446, 0x003f, 0xb9e5, 0x003f, 0xe17d, - 0xbec7, 0x003f, 0xc0a9, 0xecd7, 0x003f, 0xc45e, 0x003f, 0xc570, - 0x003f, 0xc972, 0x003f, 0xa5a6, 0xc973, 0xa676, 0x003f, 0xa674, - 0xa675, 0xa677, 0x003f, 0xa7ba, 0xa7b9, 0x003f, 0xcabc, 0xa7bb, - 0x003f, 0x003f, 0xcabd, 0xcc57, 0x003f, 0xcc58, 0x003f, 0xa976, - 0xa978, 0xa97a, 0xa977, 0xa97b, 0xa979, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xabc8, 0xabc5, 0xabc7, 0xabc9, 0xabc6, 0xd166, - 0xce77, 0x003f, 0x003f, 0x003f, 0xd168, 0xd167, 0xae63, 0x003f, - 0xae5f, 0x003f, 0x003f, 0xae60, 0xae62, 0xae64, 0xae61, 0x003f, - 0xae66, 0xae65, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb14a, - 0xd4f2, 0xd4f1, 0xb149, 0x003f, 0xb148, 0xb147, 0xb14b, 0xb146, - 0x003f, 0x003f, 0xd8d5, 0xd8d2, 0xb449, 0xd8d1, 0xd8d6, 0x003f, - 0xb44b, 0xd8d4, 0xb448, 0xb44a, 0xd8d3, 0x003f, 0xdd48, 0x003f, - 0xdd49, 0xdd4a, 0x003f, 0x003f, 0x003f, 0x003f, 0xb9e6, 0xb9ee, - 0xe17e, 0xb9e8, 0xb9ec, 0xe1a1, 0xb9ed, 0xb9e9, 0xb9ea, 0xb9e7, - 0xb9eb, 0xbc66, 0xd8d0, 0xbc67, 0xbc65, 0x003f, 0xbc64, 0xe95d, - 0xbec8, 0xecd8, 0xecd9, 0x003f, 0x003f, 0xc364, 0xc45f, 0x003f, - 0xa46f, 0x003f, 0xa678, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x5c00 .. 0x5cff */ - 0x003f, 0xabca, 0x003f, 0xd169, 0xae67, 0x003f, 0x003f, 0xb14e, - 0xb14d, 0xb14c, 0xb44c, 0xb44d, 0xd8d7, 0xb9ef, 0xbec9, 0xa470, - 0xc95c, 0xa4d6, 0xc974, 0x003f, 0x003f, 0xc9d4, 0xa679, 0x003f, - 0x003f, 0x003f, 0xa97c, 0x003f, 0x003f, 0x003f, 0x003f, 0xdd4b, - 0x003f, 0x003f, 0xa471, 0x003f, 0xa4d7, 0xc9d5, 0x003f, 0x003f, - 0xcabe, 0x003f, 0xcabf, 0x003f, 0xa7bc, 0x003f, 0x003f, 0x003f, - 0xd8d8, 0xb44e, 0x003f, 0xdd4c, 0x003f, 0x003f, 0x003f, 0xc0aa, - 0xa472, 0xa4a8, 0xa4d8, 0xc975, 0xa5a7, 0x003f, 0xa7c0, 0xa7bf, - 0xa7bd, 0xa7be, 0x003f, 0x003f, 0xcc59, 0xa97e, 0xa9a1, 0xcc5a, - 0xa97d, 0x003f, 0x003f, 0xabce, 0xce78, 0xabcd, 0xabcb, 0xabcc, - 0xae6a, 0xae68, 0x003f, 0x003f, 0xd16b, 0xae69, 0xd16a, 0x003f, - 0xae5e, 0xd4f3, 0x003f, 0x003f, 0xb150, 0xb151, 0x003f, 0x003f, - 0xb14f, 0x003f, 0xb9f0, 0xe1a2, 0xbc68, 0xbc69, 0x003f, 0xe561, - 0xc0ab, 0xefc2, 0xefc3, 0x003f, 0xc4dd, 0xf8a8, 0xc94b, 0xa4d9, - 0x003f, 0xa473, 0x003f, 0xc977, 0xc976, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa67a, 0xc9d7, 0xc9d8, 0xc9d6, 0x003f, 0xc9d9, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcac7, 0x003f, - 0xcac2, 0xcac4, 0xcac6, 0xcac3, 0xa7c4, 0xcac0, 0x003f, 0xcac1, - 0xa7c1, 0xa7c2, 0xcac5, 0xcac8, 0xa7c3, 0xcac9, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcc68, 0x003f, 0xcc62, - 0xcc5d, 0xa9a3, 0xcc65, 0xcc63, 0xcc5c, 0xcc69, 0xcc6c, 0xcc67, - 0xcc60, 0xa9a5, 0xcc66, 0xa9a6, 0xcc61, 0xcc64, 0xcc5b, 0xcc5f, - 0xcc6b, 0xa9a7, 0x003f, 0xa9a8, 0x003f, 0xcc5e, 0xcc6a, 0xa9a2, - 0xa9a4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xceab, 0xcea4, - 0xceaa, 0xcea3, 0xcea5, 0xce7d, 0xce7b, 0x003f, 0xceac, 0xcea9, - 0xce79, 0x003f, 0xabd0, 0xcea7, 0xcea8, 0x003f, 0xcea6, 0xce7c, - 0xce7a, 0xabcf, 0xcea2, 0xce7e, 0x003f, 0x003f, 0xcea1, 0xcead, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xae6f, 0x003f, 0xae6e, 0x003f, 0xd16c, 0xae6b, 0xd16e, 0x003f, - 0xae70, 0xd16f, 0x003f, 0x003f, 0xae73, 0x003f, 0xae71, 0xd170, - 0xceae, 0xd172, 0x003f, 0xae6d, 0x003f, 0xae6c, 0x003f, 0xd16d, - /* 0x5d00 .. 0x5dff */ - 0xd171, 0xae72, 0x003f, 0x003f, 0x003f, 0x003f, 0xb153, 0xb152, - 0x003f, 0x003f, 0x003f, 0xd4f5, 0xd4f9, 0xd4fb, 0xb154, 0xd4fe, - 0x003f, 0xb158, 0xd541, 0x003f, 0xb15a, 0x003f, 0xb156, 0xb15e, - 0x003f, 0xb15b, 0xd4f7, 0xb155, 0x003f, 0xd4f6, 0xd4f4, 0xd543, - 0xd4f8, 0x003f, 0xb157, 0xd542, 0xb15c, 0xd4fd, 0xd4fc, 0xb15d, - 0xd4fa, 0xb159, 0x003f, 0x003f, 0x003f, 0x003f, 0xd544, 0x003f, - 0xd540, 0xd8e7, 0xd8ee, 0xd8e3, 0xb451, 0xd8df, 0xd8ef, 0xd8d9, - 0xd8ec, 0xd8ea, 0xd8e4, 0x003f, 0xd8ed, 0xd8e6, 0x003f, 0xd8de, - 0xd8f0, 0xd8dc, 0xd8e9, 0xd8da, 0x003f, 0xd8f1, 0x003f, 0xb452, - 0x003f, 0xd8eb, 0xdd4f, 0xd8dd, 0xb44f, 0x003f, 0xd8e1, 0x003f, - 0xb450, 0xd8e0, 0xd8e5, 0x003f, 0x003f, 0xd8e2, 0x003f, 0x003f, - 0x003f, 0xd8e8, 0x003f, 0x003f, 0x003f, 0x003f, 0xdd53, 0x003f, - 0x003f, 0x003f, 0xdd56, 0xdd4e, 0x003f, 0xdd50, 0x003f, 0xdd55, - 0xdd54, 0xb743, 0x003f, 0xd8db, 0xdd52, 0x003f, 0x003f, 0xb744, - 0x003f, 0xdd4d, 0xdd51, 0x003f, 0x003f, 0x003f, 0x003f, 0xe1a9, - 0x003f, 0xe1b0, 0xe1a7, 0x003f, 0xe1ae, 0xe1a5, 0xe1ad, 0xe1b1, - 0xe1a4, 0xe1a8, 0xe1a3, 0x003f, 0xb9f1, 0x003f, 0xe1a6, 0xb9f2, - 0xe1ac, 0xe1ab, 0xe1aa, 0x003f, 0x003f, 0xe1af, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe565, 0xe567, 0xbc6b, 0xe568, 0x003f, 0xe563, - 0x003f, 0xe562, 0xe56c, 0x003f, 0xe56a, 0xbc6a, 0xe56d, 0xe564, - 0xe569, 0xe56b, 0xe566, 0x003f, 0x003f, 0x003f, 0x003f, 0xe961, - 0xe966, 0xe960, 0xe965, 0x003f, 0xe95e, 0xe968, 0xe964, 0xe969, - 0xe963, 0xe95f, 0xe967, 0x003f, 0xe96a, 0xe962, 0x003f, 0xecda, - 0xc0af, 0x003f, 0xc0ad, 0x003f, 0xc0ac, 0xc0ae, 0x003f, 0x003f, - 0xefc4, 0x003f, 0xf172, 0xf1fd, 0x003f, 0x003f, 0xf444, 0xf445, - 0x003f, 0xc460, 0x003f, 0xf5c9, 0x003f, 0xc4de, 0x003f, 0xf5ca, - 0x003f, 0xf6de, 0xc572, 0x003f, 0xc571, 0xf6dd, 0xc5c9, 0x003f, - 0xf7d6, 0x003f, 0x003f, 0x003f, 0x003f, 0xa474, 0xa67b, 0xc9da, - 0xcaca, 0xa8b5, 0xb15f, 0x003f, 0x003f, 0xa475, 0xa5aa, 0xa5a9, - 0xa5a8, 0x003f, 0x003f, 0xa7c5, 0x003f, 0x003f, 0xae74, 0x003f, - 0xdd57, 0xa476, 0xa477, 0xa478, 0xa4da, 0x003f, 0x003f, 0xabd1, - 0x003f, 0xceaf, 0x003f, 0x003f, 0x003f, 0xb453, 0xa479, 0xc95d, - /* 0x5e00 .. 0x5eff */ - 0x003f, 0x003f, 0xa5ab, 0xa5ac, 0xc978, 0x003f, 0xa67c, 0x003f, - 0x003f, 0x003f, 0xcacb, 0x003f, 0xa7c6, 0x003f, 0xcacc, 0x003f, - 0x003f, 0xa9ae, 0x003f, 0x003f, 0xcc6e, 0xa9ac, 0xa9ab, 0xcc6d, - 0xa9a9, 0xcc6f, 0xa9aa, 0xa9ad, 0x003f, 0xabd2, 0x003f, 0xabd4, - 0xceb3, 0xceb0, 0xceb1, 0xceb2, 0xceb4, 0xabd3, 0x003f, 0x003f, - 0xd174, 0xd173, 0x003f, 0xae76, 0x003f, 0xae75, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb162, 0xd546, 0x003f, 0xb161, 0xb163, - 0xb160, 0x003f, 0x003f, 0x003f, 0x003f, 0xb455, 0xd545, 0x003f, - 0xb456, 0xd8f3, 0x003f, 0xb457, 0xd8f2, 0xb454, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdd5a, 0xdd5c, 0xb745, 0xdd5b, 0xdd59, 0xdd58, - 0x003f, 0x003f, 0x003f, 0xe1b4, 0xb9f7, 0xb9f5, 0x003f, 0xb9f6, - 0xe1b2, 0xe1b3, 0x003f, 0xb9f3, 0xe571, 0xe56f, 0x003f, 0xbc6d, - 0xe570, 0xbc6e, 0xbc6c, 0xb9f4, 0x003f, 0x003f, 0xe96d, 0xe96b, - 0xe96c, 0xe56e, 0xecdc, 0xc0b0, 0xecdb, 0xefc5, 0xefc6, 0xe96e, - 0xf1fe, 0x003f, 0xa47a, 0xa5ad, 0xa67e, 0xc9db, 0xa67d, 0x003f, - 0xa9af, 0xb746, 0x003f, 0xa4db, 0xa5ae, 0xabd5, 0xb458, 0x003f, - 0xc979, 0x003f, 0xc97a, 0x003f, 0xc9dc, 0x003f, 0x003f, 0xa7c8, - 0xcad0, 0xcace, 0xa7c9, 0xcacd, 0xcacf, 0xcad1, 0x003f, 0xa7c7, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa9b3, 0xa9b4, 0xa9b1, - 0x003f, 0x003f, 0xa9b0, 0xceb8, 0xa9b2, 0x003f, 0x003f, 0x003f, - 0xabd6, 0x003f, 0xceb7, 0xceb9, 0xceb6, 0xceba, 0xabd7, 0xae79, - 0xd175, 0x003f, 0xd177, 0xae77, 0xd178, 0xae78, 0xd176, 0x003f, - 0xceb5, 0xd547, 0xd54a, 0xd54b, 0xd548, 0xb167, 0xb166, 0xb164, - 0xb165, 0xd549, 0x003f, 0x003f, 0x003f, 0x003f, 0xb168, 0x003f, - 0x003f, 0xb45a, 0xb45b, 0x003f, 0xb45c, 0xdd5d, 0xdd5f, 0xdd61, - 0xb748, 0xb747, 0xb459, 0xdd60, 0xdd5e, 0x003f, 0xe1b8, 0x003f, - 0x003f, 0xe1b6, 0xe1bc, 0xb9f8, 0xe1bd, 0xe1ba, 0xb9f9, 0xe1b7, - 0xe1b5, 0xe1bb, 0xbc70, 0xe573, 0xe1b9, 0xbc72, 0xe574, 0xbc71, - 0xbc74, 0xe575, 0xbc6f, 0xbc73, 0x003f, 0xe973, 0xe971, 0xe970, - 0xe972, 0xe96f, 0x003f, 0x003f, 0xc366, 0x003f, 0xf446, 0xf447, - 0x003f, 0xf5cb, 0xf6df, 0xc655, 0x003f, 0x003f, 0xa9b5, 0xa7ca, - 0x003f, 0x003f, 0xabd8, 0x003f, 0x003f, 0x003f, 0xa47b, 0xa4dc, - /* 0x5f00 .. 0x5fff */ - 0x003f, 0xa5af, 0xc9dd, 0x003f, 0xa7cb, 0xcad2, 0x003f, 0xcebb, - 0xabd9, 0x003f, 0xb9fa, 0xa47c, 0x003f, 0x003f, 0x003f, 0xa6a1, - 0x003f, 0x003f, 0xb749, 0xa47d, 0xa4dd, 0xa4de, 0x003f, 0xa5b1, - 0xa5b0, 0x003f, 0xc9de, 0xa6a2, 0x003f, 0xcad3, 0x003f, 0xa7cc, - 0x003f, 0x003f, 0xcc71, 0xcc72, 0xcc73, 0x003f, 0xa9b6, 0xa9b7, - 0xcc70, 0xa9b8, 0x003f, 0x003f, 0x003f, 0xabda, 0xcebc, 0x003f, - 0xd17a, 0xae7a, 0x003f, 0xd179, 0x003f, 0xb169, 0xd54c, 0xb16a, - 0xd54d, 0x003f, 0x003f, 0x003f, 0xb45d, 0x003f, 0x003f, 0x003f, - 0xdd62, 0x003f, 0x003f, 0xe1bf, 0xe1be, 0x003f, 0xb9fb, 0x003f, - 0xbc75, 0xe576, 0xbeca, 0xe974, 0xc0b1, 0x003f, 0xc573, 0xf7d8, - 0x003f, 0x003f, 0x003f, 0x003f, 0xcc74, 0x003f, 0xcebd, 0xb16b, - 0xd8f4, 0xb74a, 0x003f, 0x003f, 0x003f, 0xc255, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa7ce, 0x003f, 0xa7cd, 0xabdb, 0x003f, 0xd17b, - 0x003f, 0xb16d, 0xb343, 0xb16e, 0xb16c, 0xb45e, 0x003f, 0xe1c0, - 0xb9fc, 0xbc76, 0x003f, 0xc94c, 0xc9df, 0x003f, 0xcad5, 0xa7cf, - 0xcad4, 0xa7d0, 0x003f, 0x003f, 0xa9bc, 0xcc77, 0xcc76, 0xa9bb, - 0xa9b9, 0xa9ba, 0xcc75, 0x003f, 0x003f, 0xabdd, 0xcebe, 0xabe0, - 0xabdc, 0xabe2, 0xabde, 0xabdf, 0xabe1, 0x003f, 0x003f, 0x003f, - 0xae7d, 0xae7c, 0xae7b, 0x003f, 0x003f, 0x003f, 0xd54f, 0xb16f, - 0xb172, 0xb170, 0x003f, 0xd54e, 0xb175, 0x003f, 0xb171, 0xd550, - 0xb174, 0xb173, 0x003f, 0x003f, 0x003f, 0xd8f6, 0xd8f5, 0x003f, - 0xb461, 0xb45f, 0xb460, 0xd8f7, 0xb74b, 0xdd64, 0xb74c, 0xdd63, - 0x003f, 0x003f, 0xe577, 0x003f, 0x003f, 0xbc78, 0xe1c1, 0xbc77, - 0x003f, 0xb9fd, 0x003f, 0xecde, 0xe975, 0xc0b2, 0xecdd, 0xf240, - 0xf448, 0xf449, 0x003f, 0xa4df, 0x003f, 0xa5b2, 0x003f, 0x003f, - 0x003f, 0xc97b, 0x003f, 0x003f, 0xa7d2, 0xa7d4, 0x003f, 0xc9e2, - 0xcad8, 0xcad7, 0xcad6, 0x003f, 0xc9e1, 0xc9e0, 0xa6a4, 0xa7d3, - 0xa7d1, 0xa6a3, 0x003f, 0x003f, 0x003f, 0xa9bd, 0xcc78, 0x003f, - 0xa9be, 0xcadd, 0x003f, 0xcadf, 0xcade, 0xcc79, 0x003f, 0x003f, - 0xcada, 0x003f, 0xa7d8, 0xa7d6, 0x003f, 0xcad9, 0xcadb, 0xcae1, - 0x003f, 0xa7d5, 0x003f, 0xcadc, 0xcae5, 0xa9c0, 0x003f, 0xcae2, - 0xa7d7, 0x003f, 0xcae0, 0xcae3, 0x003f, 0xa9bf, 0x003f, 0xa9c1, - /* 0x6000 .. 0x60ff */ - 0xcae4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xccaf, 0xcca2, 0xcc7e, 0xccae, 0xcca9, 0xabe7, 0xa9c2, - 0xccaa, 0xccad, 0xabe3, 0xccac, 0xa9c3, 0xa9c8, 0xa9c6, 0xcca3, - 0x003f, 0xcc7c, 0xcca5, 0xa9cd, 0xccb0, 0xabe4, 0xcca6, 0x003f, - 0xabe5, 0xa9c9, 0xcca8, 0x003f, 0xcecd, 0xabe6, 0xcc7b, 0xa9ca, - 0xabe8, 0xa9cb, 0xa9c7, 0xa9cc, 0xcca7, 0xcc7a, 0xccab, 0xa9c4, - 0x003f, 0x003f, 0xcc7d, 0xcca4, 0xcca1, 0xa9c5, 0x003f, 0xcebf, - 0x003f, 0xcec0, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xceca, 0xd1a1, 0xcecb, 0xabee, 0xcece, 0xcec4, 0xabed, 0xcec6, - 0x003f, 0xcec7, 0x003f, 0x003f, 0xcec9, 0xabe9, 0x003f, 0x003f, - 0xaea3, 0x003f, 0xf9da, 0xcec5, 0xcec1, 0xaea4, 0x003f, 0x003f, - 0xcecf, 0xae7e, 0xd17d, 0xcec8, 0x003f, 0xd17c, 0xcec3, 0xcecc, - 0x003f, 0x003f, 0xabec, 0xaea1, 0xabf2, 0xaea2, 0xced0, 0xd17e, - 0xabeb, 0xaea6, 0xabf1, 0xabf0, 0xabef, 0xaea5, 0xced1, 0xaea7, - 0xabea, 0x003f, 0xcec2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb176, - 0xd1a4, 0xd1a6, 0x003f, 0xd1a8, 0xaea8, 0xaeae, 0xd553, 0xd1ac, - 0xd1a3, 0xb178, 0xd551, 0x003f, 0xaead, 0xaeab, 0xd1ae, 0x003f, - 0xd552, 0x003f, 0xd1a5, 0x003f, 0xaeac, 0xd1a9, 0xaeaf, 0xd1ab, - 0x003f, 0x003f, 0xaeaa, 0xd1aa, 0xd1ad, 0xd1a7, 0x003f, 0xaea9, - 0xb179, 0x003f, 0xd1a2, 0xb177, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb17a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd555, 0xd55e, 0xb464, 0x003f, 0xb17c, 0xb1a3, 0xb465, 0xd560, - 0xb1aa, 0xd8f9, 0xd556, 0xb1a2, 0xb1a5, 0xb17e, 0xd554, 0xd562, - 0xd565, 0xd949, 0x003f, 0xd563, 0xd8fd, 0xb1a1, 0xb1a8, 0xb1ac, - 0xd55d, 0xd8f8, 0xd561, 0xb17b, 0xd8fa, 0xd564, 0xd8fc, 0xd559, - 0x003f, 0xb462, 0x003f, 0xd557, 0xd558, 0xb1a7, 0x003f, 0x003f, - 0xb1a6, 0xd55b, 0xb1ab, 0xd55f, 0xb1a4, 0xd55c, 0x003f, 0xb1a9, - 0xb466, 0xb463, 0xd8fb, 0x003f, 0xd55a, 0x003f, 0xb17d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb46b, 0xb46f, 0xd940, 0xb751, 0xb46d, 0xd944, 0xb471, 0xdd65, - 0xd946, 0xb753, 0xb469, 0xb46c, 0xd947, 0x003f, 0xd948, 0xd94e, - /* 0x6100 .. 0x61ff */ - 0xb473, 0xb754, 0x003f, 0xd94a, 0xd94f, 0xd943, 0xb75e, 0x003f, - 0xb755, 0xb472, 0xd941, 0xd950, 0x003f, 0xb75d, 0xb470, 0xb74e, - 0xd94d, 0x003f, 0xb474, 0xd945, 0xd8fe, 0xb46a, 0xd942, 0x003f, - 0xd94b, 0x003f, 0xb74d, 0xb752, 0xb467, 0xd94c, 0x003f, 0xb750, - 0x003f, 0x003f, 0x003f, 0xb468, 0x003f, 0x003f, 0x003f, 0xb75c, - 0xe1c3, 0xdd70, 0x003f, 0xdd68, 0xe1c2, 0x003f, 0xdd6c, 0xdd6e, - 0x003f, 0x003f, 0xdd6b, 0x003f, 0xb75b, 0x003f, 0xdd6a, 0xb75f, - 0x003f, 0x003f, 0x003f, 0xe1d2, 0x003f, 0x003f, 0xb75a, 0xba40, - 0xdd71, 0xe1c4, 0x003f, 0x003f, 0xb758, 0xdd69, 0xdd6d, 0xb9fe, - 0xb74f, 0xdd66, 0xdd67, 0xba41, 0xb757, 0xb759, 0xb756, 0xdd6f, - 0x003f, 0x003f, 0xe1c8, 0xe1c9, 0xe1ce, 0xbc7d, 0xe1d5, 0x003f, - 0xba47, 0x003f, 0xba46, 0xe1d0, 0x003f, 0xbc7c, 0xe1c5, 0xba45, - 0x003f, 0xe1d4, 0xba43, 0xba44, 0x003f, 0xe1d1, 0xe5aa, 0xbc7a, - 0xb46e, 0x003f, 0xe1d3, 0xbca3, 0xe1cb, 0x003f, 0xbc7b, 0x003f, - 0xbca2, 0xe1c6, 0xe1ca, 0xe1c7, 0xe1cd, 0xba48, 0xbc79, 0xba42, - 0x003f, 0xe57a, 0xe1cf, 0x003f, 0xbca1, 0x003f, 0xbca4, 0x003f, - 0xe1cc, 0x003f, 0xbc7e, 0xe579, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe57e, 0xbece, 0xe578, 0xe9a3, 0xe5a9, 0xbca8, 0x003f, - 0xbca6, 0xbecc, 0xe5a6, 0xe5a2, 0xbcac, 0x003f, 0xe978, 0x003f, - 0x003f, 0x003f, 0xbcaa, 0xe5a1, 0x003f, 0xe976, 0x003f, 0xe5a5, - 0x003f, 0xe5a8, 0xe57d, 0x003f, 0xbcab, 0x003f, 0x003f, 0xbca5, - 0xe977, 0xbecd, 0xe5a7, 0xbca7, 0xbca9, 0xe5a4, 0xbcad, 0xe5a3, - 0xe57c, 0xe57b, 0xbecb, 0xe5ab, 0xe97a, 0xece0, 0xbed0, 0x003f, - 0xe9a2, 0x003f, 0xe97e, 0x003f, 0xece1, 0x003f, 0xbed1, 0xe9a1, - 0x003f, 0xe97c, 0xc0b4, 0xecdf, 0x003f, 0xe979, 0xe97b, 0xc0b5, - 0xbed3, 0xc0b3, 0xbed2, 0xc0b7, 0xe97d, 0xbecf, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xefcf, 0x003f, - 0xefc7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xece7, 0xefc8, - 0xece3, 0x003f, 0x003f, 0xc256, 0xece5, 0xece4, 0xc0b6, 0xece2, - 0xece6, 0xefd0, 0xefcc, 0xefce, 0x003f, 0xefc9, 0xefca, 0x003f, - 0xefcd, 0xefcb, 0xc367, 0x003f, 0x003f, 0xc36a, 0xc369, 0xc368, - 0xc461, 0xf44a, 0xc462, 0xf241, 0xc4df, 0xf5cc, 0xc4e0, 0xc574, - /* 0x6200 .. 0x62ff */ - 0xc5ca, 0xf7d9, 0x003f, 0xf7da, 0xf7db, 0x003f, 0x003f, 0xf9ba, - 0xa4e0, 0xc97c, 0xa5b3, 0x003f, 0xa6a6, 0xa6a7, 0xa6a5, 0x003f, - 0xa6a8, 0xa7da, 0xa7d9, 0x003f, 0xccb1, 0xa9cf, 0xa9ce, 0x003f, - 0x003f, 0xd1af, 0xb1ad, 0xb1ae, 0x003f, 0x003f, 0x003f, 0xb475, - 0xdd72, 0xb760, 0xb761, 0xdd74, 0xdd76, 0xdd75, 0x003f, 0xe1d7, - 0x003f, 0xe1d6, 0xba49, 0xe1d8, 0x003f, 0xe5ac, 0xbcae, 0x003f, - 0xbed4, 0x003f, 0xc0b8, 0xc257, 0xc0b9, 0x003f, 0xa4e1, 0x003f, - 0x003f, 0x003f, 0xcae6, 0x003f, 0x003f, 0xccb2, 0xa9d1, 0xa9d0, - 0xa9d2, 0xabf3, 0xced2, 0xced3, 0x003f, 0x003f, 0xd1b0, 0xaeb0, - 0xb1af, 0xb476, 0xd951, 0xa4e2, 0x003f, 0xa47e, 0xa4e3, 0x003f, - 0xc97d, 0xa5b7, 0xa5b6, 0xa5b4, 0xa5b5, 0x003f, 0x003f, 0x003f, - 0xa6ab, 0xc9e9, 0xc9eb, 0xa6aa, 0xc9e3, 0x003f, 0xc9e4, 0x003f, - 0xc9ea, 0xc9e6, 0xc9e8, 0xa6a9, 0xc9e5, 0xc9ec, 0xc9e7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa7e1, 0xa7ea, 0xa7e8, - 0xcaf0, 0xcaed, 0xcaf5, 0xa7e6, 0xcaf6, 0x003f, 0xa7df, 0xcaf3, - 0x003f, 0xa7e5, 0xcaef, 0xcaee, 0xa7e3, 0xcaf4, 0xa7e4, 0xa9d3, - 0xa7de, 0xcaf1, 0x003f, 0xcae7, 0xa7db, 0x003f, 0xa7ee, 0xcaec, - 0xcaf2, 0xa7e0, 0xa7e2, 0x003f, 0xcae8, 0x003f, 0xcae9, 0xcaea, - 0x003f, 0xa7ed, 0xa7e7, 0xa7ec, 0xcaeb, 0xa7eb, 0xa7dd, 0xa7dc, - 0xa7e9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa9e1, 0xccbe, 0xccb7, 0xa9dc, 0xa9ef, 0xccb3, 0xccba, 0xccbc, - 0xccbf, 0xa9ea, 0x003f, 0xccbb, 0xccb4, 0xa9e8, 0xccb8, 0x003f, - 0xccc0, 0xa9d9, 0x003f, 0xccbd, 0xa9e3, 0xa9e2, 0xccb6, 0xa9d7, - 0x003f, 0x003f, 0xa9d8, 0x003f, 0xa9d6, 0x003f, 0xa9ee, 0xa9e6, - 0xa9e0, 0xa9d4, 0xccb9, 0xa9df, 0xa9d5, 0xa9e7, 0xa9f0, 0xced4, - 0xa9e4, 0xccb5, 0xa9da, 0xa9dd, 0xa9de, 0x003f, 0xa9ec, 0xa9ed, - 0xa9eb, 0xa9e5, 0xa9e9, 0xa9db, 0xabf4, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xceda, 0xac41, 0xabf8, 0xabfa, 0xac40, - 0xcee6, 0xabfd, 0xd1b1, 0xaeb1, 0xac43, 0xced7, 0xcedf, 0xabfe, - 0xcede, 0xcedb, 0xcee3, 0xcee5, 0xabf7, 0xabfb, 0xac42, 0xaeb3, - /* 0x6300 .. 0x63ff */ - 0xcee0, 0xabf9, 0xac45, 0xced9, 0x003f, 0x003f, 0x003f, 0xabfc, - 0xaeb2, 0xabf6, 0x003f, 0xced6, 0xcedd, 0xced5, 0xced8, 0xcedc, - 0xd1b2, 0xac44, 0x003f, 0xcee1, 0xcee2, 0xcee4, 0xabf5, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xaec1, 0xd1be, 0xaebf, 0xaec0, 0xd1b4, 0xd1c4, 0x003f, 0xaeb6, - 0x003f, 0x003f, 0xd566, 0xd1c6, 0xd1c0, 0x003f, 0xd1b7, 0x003f, - 0xd1c9, 0xd1ba, 0xaebc, 0xd57d, 0xd1bd, 0xaebe, 0xaeb5, 0x003f, - 0xd1cb, 0xd1bf, 0xaeb8, 0xd1b8, 0xd1b5, 0xd1b6, 0xaeb9, 0xd1c5, - 0xd1cc, 0xaebb, 0xd1bc, 0xd1bb, 0xaec3, 0xaec2, 0xaeb4, 0xaeba, - 0xaebd, 0xd1c8, 0x003f, 0x003f, 0xd1c2, 0xaeb7, 0xd1b3, 0xd1ca, - 0xd1c1, 0xd1c3, 0xd1c7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd567, 0x003f, 0xb1b7, - 0xb1cb, 0xb1ca, 0x003f, 0xb1bf, 0x003f, 0xd579, 0xd575, 0xd572, - 0xd5a6, 0xb1ba, 0xb1b2, 0x003f, 0x003f, 0xd577, 0xb4a8, 0xb1b6, - 0xd5a1, 0x003f, 0xb1cc, 0xb1c9, 0xd57b, 0xd56a, 0x003f, 0x003f, - 0xb1c8, 0xd5a3, 0xd569, 0xb1bd, 0xb1c1, 0xd5a2, 0x003f, 0xd573, - 0xb1c2, 0xb1bc, 0xd568, 0x003f, 0xb478, 0xd5a5, 0xd571, 0xb1c7, - 0xd574, 0xd5a4, 0xb1c6, 0x003f, 0xd952, 0x003f, 0xb1b3, 0xd56f, - 0xb1b8, 0xb1c3, 0x003f, 0xb1be, 0xd578, 0xd56e, 0xd56c, 0xd57e, - 0xb1b0, 0xb1c4, 0xb1b4, 0xb477, 0xd57c, 0xb1b5, 0x003f, 0xb1b1, - 0xb1c0, 0xb1bb, 0xb1b9, 0xd570, 0xb1c5, 0xd56d, 0xd57a, 0xd576, - 0xd954, 0xd953, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd56b, 0xd964, 0x003f, - 0xb47a, 0x003f, 0xd96a, 0xd959, 0xd967, 0xdd77, 0xb47d, 0xd96b, - 0xd96e, 0xb47c, 0xd95c, 0xd96d, 0xd96c, 0xb47e, 0xd955, 0xb479, - 0xb4a3, 0x003f, 0xb4a1, 0xd969, 0x003f, 0xd95f, 0xb4a5, 0xd970, - 0xd968, 0xd971, 0xb4ad, 0xb4ab, 0xd966, 0xd965, 0x003f, 0xd963, - 0xd95d, 0xb4a4, 0x003f, 0xb4a2, 0xd1b9, 0xd956, 0x003f, 0xddb7, - 0xd957, 0xb47b, 0xb4aa, 0xdd79, 0x003f, 0xb4a6, 0xb4a7, 0xd958, - 0xd96f, 0xdd78, 0xd960, 0xd95b, 0xb4a9, 0xd961, 0xd95e, 0x003f, - 0x003f, 0xb4ae, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6400 .. 0x64ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb770, 0x003f, - 0x003f, 0xdd7c, 0xddb1, 0xddb6, 0xddaa, 0xb76c, 0xddbb, 0xb769, - 0xdd7a, 0x003f, 0xdd7b, 0xb762, 0xb76b, 0xdda4, 0xb76e, 0xb76f, - 0xdda5, 0x003f, 0xddb2, 0xddb8, 0xb76a, 0x003f, 0xb764, 0xdda3, - 0xdd7d, 0xddba, 0xdda8, 0xdda9, 0xdd7e, 0xddb4, 0xddab, 0xddb5, - 0xddad, 0x003f, 0xb765, 0xe1d9, 0xb768, 0xb766, 0xddb9, 0xddb0, - 0xddac, 0x003f, 0x003f, 0xdda1, 0xba53, 0xddaf, 0xb76d, 0xdda7, - 0x003f, 0xdda6, 0x003f, 0x003f, 0x003f, 0xb767, 0xb763, 0xe1ee, - 0xddb3, 0xddae, 0x003f, 0xdda2, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe1e9, 0x003f, 0xe1da, 0xe1e5, 0x003f, - 0xe1ec, 0xba51, 0xb4ac, 0xe1ea, 0xba4c, 0x003f, 0x003f, 0x003f, - 0xba4b, 0xe1f1, 0x003f, 0xe1db, 0xe1e8, 0xe1dc, 0xe1e7, 0xba4f, - 0xe1eb, 0xd962, 0x003f, 0x003f, 0x003f, 0xe1f2, 0xe1e3, 0xba52, - 0xe5ba, 0xbcaf, 0x003f, 0xe1f0, 0xe1ef, 0xba54, 0xe5ad, 0xbcb0, - 0xe5ae, 0x003f, 0xe1df, 0xe1e0, 0xe1dd, 0xe1e2, 0xe1de, 0xe1f3, - 0xba4e, 0xbcb1, 0xba50, 0xba55, 0x003f, 0xe1e1, 0x003f, 0xe1ed, - 0x003f, 0x003f, 0xe1e6, 0x003f, 0x003f, 0xe5b1, 0x003f, 0xba4a, - 0xbcb4, 0xe9aa, 0xe5b6, 0xe5b5, 0xe5b7, 0x003f, 0x003f, 0xe5b4, - 0xbcb5, 0x003f, 0xbcbb, 0xbcb8, 0x003f, 0xbcb9, 0xe5af, 0xe5b2, - 0xe5bc, 0xbcc1, 0xbcbf, 0x003f, 0xe5b3, 0xd95a, 0xbcb2, 0xe5b9, - 0xe5b0, 0x003f, 0xbcc2, 0xe5b8, 0xba4d, 0xbcb7, 0xe1e4, 0x003f, - 0x003f, 0xbcba, 0x003f, 0xbcbe, 0xbcc0, 0xbcbd, 0xbcbc, 0x003f, - 0xbcb6, 0xe5bb, 0xbcb3, 0xbcc3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xbed8, 0xbed9, 0xe9a9, 0xbee2, 0xbedf, - 0x003f, 0xbed6, 0xbedd, 0xe9ab, 0xbedb, 0xbed5, 0x003f, 0xbedc, - 0x003f, 0xe9a8, 0xc0bb, 0xbed7, 0x003f, 0xbede, 0xc0ba, 0xe9a7, - 0xe9a6, 0x003f, 0xbee0, 0x003f, 0xbee1, 0x003f, 0xe9a5, 0xe9a4, - 0xc0bc, 0xe9ae, 0xbeda, 0xe9ac, 0x003f, 0x003f, 0x003f, 0x003f, - 0xc0bd, 0x003f, 0xc0c2, 0xecea, 0xecec, 0x003f, 0xc0bf, 0x003f, - 0xeced, 0xece9, 0x003f, 0xeceb, 0xc0c0, 0xc0c3, 0x003f, 0xece8, - 0xc0be, 0xc0c1, 0xc259, 0xe9ad, 0xc258, 0x003f, 0x003f, 0xc25e, - 0xefd4, 0x003f, 0xc25c, 0xc25d, 0xefd7, 0xefd3, 0xc25a, 0xefd1, - /* 0x6500 .. 0x65ff */ - 0xc36b, 0xefd5, 0x003f, 0xefd6, 0xefd2, 0x003f, 0xc25b, 0xf242, - 0x003f, 0xf245, 0x003f, 0x003f, 0xf246, 0xf244, 0xf247, 0xc36c, - 0xf243, 0x003f, 0x003f, 0xf44e, 0xc464, 0xf44d, 0xf44c, 0xf44b, - 0xc463, 0xc465, 0x003f, 0xf5cd, 0xc4e2, 0xc4e1, 0x003f, 0x003f, - 0xf6e1, 0xf6e0, 0xf6e3, 0xc5cb, 0xc575, 0xf7dd, 0xf6e2, 0x003f, - 0x003f, 0xf7dc, 0xc5cd, 0xc5cc, 0xc5f3, 0xf8a9, 0xf8ef, 0xa4e4, - 0x003f, 0x003f, 0xd972, 0xe9af, 0x003f, 0x003f, 0xa6ac, 0xcaf7, - 0xa7f1, 0xa7ef, 0x003f, 0xa7f0, 0x003f, 0xccc1, 0xa9f1, 0xac46, - 0x003f, 0xcee7, 0x003f, 0xcee8, 0x003f, 0xac47, 0xd1ce, 0x003f, - 0xaec4, 0xaec5, 0xd1cd, 0x003f, 0x003f, 0x003f, 0x003f, 0xb1d3, - 0x003f, 0xb1cf, 0x003f, 0xd5a7, 0xb1d6, 0xb1d5, 0xb1ce, 0xb1d1, - 0xb1d4, 0xb1d0, 0x003f, 0x003f, 0xd976, 0xb1cd, 0xb4af, 0x003f, - 0x003f, 0x003f, 0xb4b1, 0xb4b2, 0xd975, 0xd978, 0xb4b0, 0xd973, - 0xd977, 0x003f, 0xd974, 0x003f, 0xb771, 0x003f, 0x003f, 0xddbc, - 0x003f, 0x003f, 0xba56, 0xe1f4, 0xbee3, 0xbcc4, 0xe5bd, 0xbcc5, - 0xbcc6, 0xe5bf, 0xe5be, 0xe5c0, 0xe9b1, 0x003f, 0x003f, 0xe9b0, - 0xecef, 0xecee, 0xc0c4, 0xc0c5, 0xf248, 0x003f, 0x003f, 0xa4e5, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd979, 0x003f, 0x003f, 0x003f, - 0xb4b4, 0xb4b3, 0xddbd, 0x003f, 0xefd8, 0xc4e3, 0xf7de, 0xa4e6, - 0x003f, 0xaec6, 0x003f, 0xb1d8, 0xb1d7, 0xd97a, 0xd97b, 0xb772, - 0xe1f5, 0xba57, 0xe9b2, 0x003f, 0xa4e7, 0xa5b8, 0x003f, 0xa9f2, - 0xccc2, 0x003f, 0xcee9, 0xac48, 0xb1d9, 0x003f, 0xd97c, 0xb4b5, - 0xb773, 0x003f, 0xe5c1, 0xe5c2, 0x003f, 0x003f, 0xecf0, 0xc25f, - 0xf8f0, 0xa4e8, 0x003f, 0xccc3, 0xa9f3, 0xac49, 0x003f, 0xceea, - 0x003f, 0xaec7, 0xd1d2, 0xd1d0, 0xd1d1, 0xaec8, 0xd1cf, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb1db, 0xb1dc, 0xd5a8, 0xb1dd, 0xb1da, - 0xd97d, 0x003f, 0xd97e, 0xddbe, 0x003f, 0x003f, 0xba59, 0xba58, - 0x003f, 0x003f, 0xecf1, 0xefd9, 0x003f, 0xf24a, 0xf249, 0xf44f, - 0x003f, 0xc95e, 0xac4a, 0x003f, 0x003f, 0xa4e9, 0xa5b9, 0x003f, - 0xa6ae, 0xa6ad, 0x003f, 0x003f, 0xa6af, 0xa6b0, 0xc9ee, 0xc9ed, - 0xcaf8, 0xa7f2, 0xcafb, 0xcafa, 0xcaf9, 0xcafc, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa9f4, 0xccc9, 0xccc5, 0xccce, 0x003f, 0x003f, - /* 0x6600 .. 0x66ff */ - 0xa9fb, 0x003f, 0xa9f9, 0xccca, 0xccc6, 0xcccd, 0xa9f8, 0xaa40, - 0xccc8, 0xccc4, 0xa9fe, 0xcccb, 0xa9f7, 0xcccc, 0xa9fa, 0xa9fc, - 0xccd0, 0xcccf, 0xccc7, 0xa9f6, 0xa9f5, 0xa9fd, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xceef, 0xcef5, 0x003f, 0xac50, - 0xac4d, 0xceec, 0xcef1, 0x003f, 0xac53, 0xac4b, 0xcef0, 0xac4e, - 0xac51, 0x003f, 0x003f, 0xcef3, 0x003f, 0xac4c, 0xcef8, 0xac4f, - 0x003f, 0xac52, 0xceed, 0xcef2, 0xcef6, 0xceee, 0xceeb, 0x003f, - 0x003f, 0xcef7, 0xcef4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xaed0, 0xaec9, 0xaecc, 0x003f, 0xaecf, 0x003f, 0xd1d5, - 0x003f, 0xaeca, 0xd1d3, 0x003f, 0xaece, 0x003f, 0x003f, 0xaecb, - 0x003f, 0xd1d6, 0xaecd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd5ac, 0xb1df, 0xd5ab, 0xd5ad, 0xb1de, 0xb1e3, 0xd1d4, - 0x003f, 0xd5aa, 0xd5ae, 0x003f, 0xb1e0, 0xd5a9, 0xb1e2, 0x003f, - 0xb1e1, 0x003f, 0xd9a7, 0x003f, 0xd9a2, 0x003f, 0xb4b6, 0xb4ba, - 0xb4b7, 0xd9a5, 0xd9a8, 0x003f, 0xb4b8, 0x003f, 0xb4b9, 0xb4be, - 0xddc7, 0xd9a6, 0xb4bc, 0xd9a3, 0xd9a1, 0x003f, 0xb4bd, 0x003f, - 0xd9a4, 0x003f, 0x003f, 0x003f, 0xb779, 0x003f, 0xddbf, 0xb776, - 0xb777, 0xb775, 0xddc4, 0xddc3, 0xddc0, 0xb77b, 0x003f, 0x003f, - 0xddc2, 0xb4bb, 0x003f, 0x003f, 0xddc6, 0xddc1, 0xb778, 0xb774, - 0xb77a, 0xddc5, 0x003f, 0x003f, 0x003f, 0xba5c, 0x003f, 0xe1f8, - 0xe1f7, 0xe1f6, 0xba5a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xba5b, 0xe5c5, 0xe5c8, 0xbcc8, 0x003f, 0x003f, 0xbcc7, 0xe5c9, - 0xe5c4, 0xbcca, 0xe5c6, 0x003f, 0xbcc9, 0xe5c3, 0x003f, 0xe5c7, - 0xbee9, 0xbee6, 0xe9bb, 0xe9ba, 0x003f, 0xe9b9, 0xe9b4, 0x003f, - 0xe9b5, 0x003f, 0x003f, 0x003f, 0xbee7, 0x003f, 0xbee4, 0xbee8, - 0xe9b3, 0xbee5, 0xe9b6, 0xe9b7, 0xe9bc, 0x003f, 0x003f, 0xe9b8, - 0x003f, 0x003f, 0xecf2, 0x003f, 0x003f, 0x003f, 0xc0c7, 0x003f, - 0xefdc, 0xc0c6, 0xefda, 0xefdb, 0xc260, 0xc36e, 0xf24b, 0x003f, - 0xc36d, 0x003f, 0x003f, 0xf451, 0xf452, 0x003f, 0xc466, 0x003f, - 0xf450, 0xc4e4, 0x003f, 0xf7df, 0xc5ce, 0xf8aa, 0xf8ab, 0x003f, - 0xa4ea, 0x003f, 0xa6b1, 0xa6b2, 0xa7f3, 0x003f, 0xccd1, 0xac54, - 0xaed1, 0xb1e4, 0x003f, 0x003f, 0xb0d2, 0x003f, 0xb4bf, 0xb4c0, - /* 0x6700 .. 0x67ff */ - 0xb3cc, 0xd9a9, 0x003f, 0xb77c, 0xe1fa, 0xe1f9, 0x003f, 0x003f, - 0xa4eb, 0xa6b3, 0xccd2, 0xaa42, 0x003f, 0xaa41, 0x003f, 0xcef9, - 0xcefa, 0x003f, 0xd1d7, 0xd1d8, 0xaed2, 0xaed3, 0x003f, 0xaed4, - 0xd5af, 0x003f, 0x003f, 0xb1e6, 0x003f, 0xb4c2, 0x003f, 0xb4c1, - 0xddc8, 0xdf7a, 0xe1fb, 0xe9bd, 0x003f, 0x003f, 0xc261, 0xc467, - 0xa4ec, 0x003f, 0xa5bc, 0xa5bd, 0xa5bb, 0xa5be, 0xa5ba, 0x003f, - 0x003f, 0xa6b6, 0x003f, 0xc9f6, 0xa6b5, 0xa6b7, 0x003f, 0x003f, - 0xc9f1, 0xc9f0, 0xc9f3, 0xc9f2, 0xc9f5, 0xa6b4, 0xc9ef, 0xc9f4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcafd, 0xa7fd, 0xcafe, - 0xcb43, 0xa7fc, 0x003f, 0xcb47, 0xcb42, 0xcb45, 0xa7f5, 0xa7f6, - 0xa7f7, 0xa7f8, 0x003f, 0xa840, 0x003f, 0xcb41, 0xa7fa, 0xa841, - 0x003f, 0xcb40, 0xcb46, 0x003f, 0xa7f9, 0xcb44, 0xa7fb, 0xa7f4, - 0xa7fe, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xaa57, 0x003f, 0xccd4, 0xaa43, 0x003f, 0xaa4d, - 0xaa4e, 0xaa46, 0xaa58, 0xaa48, 0xccdc, 0xaa53, 0xccd7, 0xaa49, - 0xcce6, 0xcce7, 0xccdf, 0xccd8, 0xaa56, 0xcce4, 0xaa51, 0xaa4f, - 0x003f, 0xcce5, 0x003f, 0xcce3, 0xccdb, 0xccd3, 0xccda, 0xaa4a, - 0x003f, 0xaa50, 0x003f, 0xaa44, 0xccde, 0xccdd, 0xccd5, 0x003f, - 0xaa52, 0xcce1, 0xccd6, 0xaa55, 0xcce8, 0xaa45, 0x003f, 0xaa4c, - 0xccd9, 0xcce2, 0xaa54, 0x003f, 0xaa47, 0xaa4b, 0x003f, 0xcce0, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcf5b, 0xac5c, - 0xac69, 0x003f, 0xcf56, 0xcf4c, 0xac62, 0xcf4a, 0xac5b, 0xcf45, - 0xac65, 0xcf52, 0xcefe, 0xcf41, 0x003f, 0x003f, 0x003f, 0x003f, - 0xcf44, 0xcefb, 0xcf51, 0xcf61, 0xac60, 0xcf46, 0xcf58, 0x003f, - 0xcefd, 0xcf5f, 0xcf60, 0xcf63, 0xcf5a, 0xcf4b, 0xcf53, 0xac66, - 0xac59, 0xac61, 0xac6d, 0xac56, 0xac58, 0x003f, 0x003f, 0x003f, - 0xcf43, 0xac6a, 0xac63, 0xcf5d, 0xcf40, 0xac6c, 0xac67, 0xcf49, - 0x003f, 0x003f, 0xac6b, 0xcf50, 0xcf48, 0xac64, 0xcf5c, 0xcf54, - 0x003f, 0xac5e, 0xcf62, 0xcf47, 0xac5a, 0xcf59, 0xcf4f, 0xac5f, - 0xcf55, 0xac57, 0xcefc, 0xac68, 0xaee3, 0xac5d, 0xcf4e, 0xcf4d, - 0xcf42, 0x003f, 0xcf5e, 0x003f, 0xcf57, 0x003f, 0x003f, 0xac55, - /* 0x6800 .. 0x68ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd1ec, 0xaeea, 0xd1ed, 0x003f, 0xd1e1, 0xaedf, - 0xaeeb, 0x003f, 0xd1da, 0x003f, 0xd1e3, 0xd1eb, 0x003f, 0xd1d9, - 0xd1f4, 0xaed5, 0x003f, 0x003f, 0x003f, 0xd1f3, 0xd1ee, 0x003f, - 0xd1ef, 0xaedd, 0xaee8, 0xd1e5, 0x003f, 0xd1e6, 0xd1f0, 0xd1e7, - 0x003f, 0xd1e2, 0xd1dc, 0xd1dd, 0xd1ea, 0xd1e4, 0x003f, 0x003f, - 0xaed6, 0xaeda, 0xd1f2, 0xd1de, 0xaee6, 0xaee2, 0x003f, 0x003f, - 0xaee5, 0xaeec, 0xaedb, 0xaee7, 0xd1e9, 0xaee9, 0xaed8, 0x003f, - 0xaed7, 0xd1db, 0x003f, 0xd1df, 0xaee0, 0xd1f1, 0xd1e8, 0xd1e0, - 0xaee4, 0xaee1, 0x003f, 0xaed9, 0xaedc, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd5c4, 0x003f, 0xd5b4, 0xd5b5, 0xd5b9, - 0x003f, 0xd5c8, 0xd5c5, 0x003f, 0xd5be, 0xd5bd, 0xb1ed, 0xd5c1, - 0xd5d0, 0xd5b0, 0x003f, 0xd5d1, 0xd5c3, 0xd5d5, 0xd5c9, 0xb1ec, - 0xd5c7, 0xb1e7, 0xb1fc, 0xb1f2, 0x003f, 0xb1f6, 0xb1f5, 0xd5b1, - 0x003f, 0xd5ce, 0xd5d4, 0xd5cc, 0xd5d3, 0x003f, 0x003f, 0xd5c0, - 0xd5b2, 0xd5d2, 0xd5c2, 0xb1ea, 0xb1f7, 0x003f, 0xd5cb, 0xb1f0, - 0x003f, 0x003f, 0x003f, 0xd5ca, 0xd5b3, 0xb1f8, 0x003f, 0xb1fa, - 0xd5cd, 0xb1fb, 0xb1e9, 0xd5ba, 0xd5cf, 0x003f, 0x003f, 0xb1ef, - 0xb1f9, 0xd5bc, 0xd5c6, 0xd5b7, 0xd5bb, 0xb1f4, 0xd5b6, 0xb1e8, - 0xb1f1, 0xb1ee, 0xd5bf, 0xaede, 0xd9c0, 0xb1eb, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xb1f3, 0x003f, 0xd9c3, 0xd9d9, - 0xd9ce, 0xb4d6, 0x003f, 0xb4d1, 0xd9bd, 0xb4d2, 0xd9cd, 0x003f, - 0xd9c6, 0xd9d3, 0xb4ce, 0xd9ab, 0xd9d5, 0xb4c4, 0xd9b3, 0xb4c7, - 0xb4c6, 0x003f, 0xb4d7, 0x003f, 0xd9ad, 0xd9cf, 0xd9d0, 0xb4c9, - 0xb4c5, 0xd9bb, 0x003f, 0xb4d0, 0xd9b6, 0x003f, 0xd9d1, 0xb4cc, - 0xd9c9, 0xd9d6, 0xd9b0, 0xd9b5, 0xd9af, 0x003f, 0xb4cb, 0xd9c2, - 0xddde, 0xd9b1, 0xb4cf, 0xd9ba, 0xd9d2, 0xb4ca, 0xd9b7, 0xd9b4, - 0xd9c5, 0xb4cd, 0xb4c3, 0xb4d9, 0xd9c8, 0xd9c7, 0x003f, 0x003f, - /* 0x6900 .. 0x69ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0xd9ac, 0xb4c8, 0xd9d4, 0xd9bc, - 0xd9be, 0x003f, 0xd9cb, 0xd9ca, 0xd9aa, 0xb4d3, 0xb4d5, 0xd9b2, - 0xd9b9, 0xd9c1, 0xb4d4, 0xd9b8, 0xd9c4, 0xd9d7, 0x003f, 0xd9cc, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd9d8, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd9ae, 0x003f, 0x003f, 0x003f, 0x003f, 0xddf2, - 0xb7a6, 0x003f, 0xddf0, 0xdddb, 0xdde0, 0xddd9, 0x003f, 0xddec, - 0xddcb, 0xddd2, 0x003f, 0xddea, 0xddf4, 0xdddc, 0x003f, 0xddcf, - 0xdde2, 0xdde7, 0xddd3, 0x003f, 0xdde4, 0xddd0, 0x003f, 0x003f, - 0xddd7, 0xddd8, 0xb7a8, 0xddeb, 0xdde9, 0x003f, 0xddcc, 0xddee, - 0x003f, 0xddef, 0xddf1, 0xb7ac, 0xb7a4, 0x003f, 0xd5b8, 0xddd4, - 0xdde6, 0xddd5, 0xb7a1, 0xb7b1, 0xdded, 0xb7af, 0xb7ab, 0xddca, - 0xb7a3, 0x003f, 0xddcd, 0xb7b0, 0x003f, 0xdddd, 0xddc9, 0x003f, - 0xb7a9, 0xdde1, 0xddd1, 0xb7aa, 0xddda, 0xb77e, 0xb4d8, 0xdde3, - 0xd9bf, 0xddce, 0x003f, 0x003f, 0xdde8, 0xb7a5, 0xdde5, 0xb7a2, - 0xdddf, 0xb7ad, 0xddd6, 0xddf3, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb7a7, 0xdec6, 0x003f, 0x003f, 0xb7ae, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe24a, 0xe248, 0x003f, - 0xe25e, 0xe246, 0x003f, 0xe258, 0xb77d, 0xba5f, 0xe242, 0xe25d, - 0x003f, 0xe247, 0xe255, 0xba64, 0xba5d, 0x003f, 0xe25b, 0x003f, - 0xe240, 0xe25a, 0x003f, 0xba6f, 0xe251, 0xe261, 0xba6d, 0xe249, - 0xba5e, 0xe24b, 0xe259, 0xba67, 0xe244, 0xba6b, 0xba61, 0xe24d, - 0xe243, 0xe1fc, 0x003f, 0xe257, 0xba68, 0xe260, 0xe1fd, 0xba65, - 0x003f, 0xe253, 0x003f, 0xba66, 0xe245, 0xe250, 0xe24c, 0xe24e, - 0x003f, 0xba60, 0xe25f, 0xba6e, 0xe24f, 0x003f, 0xe262, 0x003f, - 0x003f, 0xe1fe, 0xe254, 0xba63, 0xba6c, 0xba6a, 0xe241, 0xe256, - 0xba69, 0x003f, 0x003f, 0xba62, 0xe252, 0x003f, 0x003f, 0x003f, - 0x003f, 0xe25c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe5d5, 0x003f, 0xe5d1, 0xe5cd, 0xe5e1, 0xe5de, - 0xbccd, 0x003f, 0x003f, 0xe5e5, 0xe5d4, 0xbcd8, 0xe5db, 0x003f, - 0x003f, 0xe5d0, 0xe5da, 0xbcd5, 0xe5ee, 0x003f, 0xe5eb, 0xe5dd, - 0xe5ce, 0x003f, 0x003f, 0xe5e2, 0xe5e4, 0xbcd1, 0xe5d8, 0xe5d3, - /* 0x6a00 .. 0x6aff */ - 0xe5ca, 0xbcce, 0xbcd6, 0x003f, 0xe5e7, 0xbcd7, 0xe5cb, 0xe5ed, - 0xe5e0, 0xe5e6, 0xbcd4, 0x003f, 0x003f, 0xe5e3, 0x003f, 0xe5ea, - 0x003f, 0xbcd9, 0x003f, 0xbcd3, 0xe5dc, 0xe5cf, 0xe5ef, 0xe5cc, - 0xe5e8, 0xbcd0, 0x003f, 0xe5d6, 0x003f, 0xe5d7, 0xbccf, 0xbccc, - 0xe5d2, 0xbcd2, 0x003f, 0xbccb, 0x003f, 0xe5e9, 0xe5ec, 0xe5d9, - 0xe9ca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe9c2, 0x003f, 0xe9be, 0xbef6, 0x003f, 0x003f, - 0xbeeb, 0xbef0, 0xbeec, 0xe9cc, 0xe9d7, 0xbeea, 0xe9c4, 0xe9cd, - 0xe5df, 0xe9ce, 0x003f, 0x003f, 0xbef1, 0x003f, 0xe9dd, 0xbef5, - 0xbef8, 0xe9c0, 0x003f, 0xbef4, 0x003f, 0xe9db, 0xe9dc, 0xe9d2, - 0xe9d1, 0xe9c9, 0x003f, 0x003f, 0xe9d3, 0xe9da, 0xe9d9, 0x003f, - 0xbeef, 0xbeed, 0xe9cb, 0xe9c8, 0x003f, 0xe9c5, 0xe9d8, 0xbef7, - 0xe9d6, 0xbef3, 0xbef2, 0x003f, 0xe9d0, 0x003f, 0xe9bf, 0xe9c1, - 0xe9c3, 0xe9d5, 0xe9cf, 0xbeee, 0x003f, 0xe9c6, 0x003f, 0xe9d4, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9c7, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0cf, 0xed45, - 0xc0c8, 0xecf5, 0x003f, 0xed41, 0xc0ca, 0xed48, 0x003f, 0xecfc, - 0x003f, 0xecf7, 0x003f, 0x003f, 0xed49, 0xecf3, 0xecfe, 0x003f, - 0xc0d1, 0xed44, 0xed4a, 0xecfd, 0xc0c9, 0xed40, 0xecf4, 0xc0d0, - 0x003f, 0x003f, 0xed47, 0xecf9, 0xc0cc, 0x003f, 0xecfb, 0xecf8, - 0xc0d2, 0xecfa, 0xc0cb, 0xc0ce, 0xed43, 0xecf6, 0xed46, 0x003f, - 0xed42, 0x003f, 0x003f, 0x003f, 0xc263, 0xefe7, 0xc268, 0xc269, - 0x003f, 0x003f, 0x003f, 0xc262, 0xefe6, 0x003f, 0xefe3, 0xefe4, - 0xc266, 0xefde, 0xefe2, 0xc265, 0x003f, 0xefdf, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc267, 0xc264, 0x003f, 0xefdd, 0xefe1, 0xefe5, - 0x003f, 0x003f, 0x003f, 0xf251, 0xf24e, 0xf257, 0x003f, 0xf256, - 0xf254, 0xf24f, 0x003f, 0xc372, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf250, 0xc371, 0xc0cd, 0xf253, 0xc370, 0xf258, 0xf252, - 0xf24d, 0xefe0, 0x003f, 0x003f, 0x003f, 0xc36f, 0x003f, 0xf24c, - 0xf456, 0x003f, 0xf455, 0xf255, 0xc468, 0x003f, 0xf459, 0xf45a, - 0xf454, 0xf458, 0x003f, 0xf453, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf5d1, 0xf457, 0xc4e7, 0xc4e5, 0xf5cf, 0x003f, 0x003f, 0x003f, - /* 0x6b00 .. 0x6bff */ - 0xf5d2, 0x003f, 0xf5ce, 0xf5d0, 0xc4e6, 0x003f, 0x003f, 0x003f, - 0xf6e5, 0xf6e6, 0xc576, 0xf6e4, 0x003f, 0x003f, 0x003f, 0xf7e2, - 0xc5cf, 0xf7e0, 0xf7e1, 0xf8ac, 0x003f, 0x003f, 0xc656, 0xf8f3, - 0xf8f1, 0xf8f2, 0xf8f4, 0x003f, 0x003f, 0x003f, 0xf9bb, 0x003f, - 0xa4ed, 0xa6b8, 0x003f, 0xaa59, 0x003f, 0xcce9, 0x003f, 0x003f, - 0xcf64, 0x003f, 0x003f, 0x003f, 0xd1f5, 0xd1f7, 0x003f, 0xd1f6, - 0x003f, 0xd1f8, 0xb1fd, 0xd5d7, 0xd1f9, 0x003f, 0xd5d6, 0xd5d8, - 0xd5d9, 0xd9da, 0xb4db, 0xd9db, 0xd9dd, 0xb4dc, 0xb4da, 0xd9dc, - 0x003f, 0xddfa, 0xddf8, 0xddf7, 0x003f, 0xddf6, 0xddf5, 0xb7b2, - 0xddf9, 0xba70, 0xe263, 0xe265, 0xba71, 0xe264, 0xbcdb, 0x003f, - 0xbcda, 0xe5f0, 0x003f, 0x003f, 0xe9df, 0xe9de, 0xe9e0, 0x003f, - 0x003f, 0xbef9, 0x003f, 0xed4b, 0xc0d3, 0x003f, 0xefe8, 0xc26a, - 0xf259, 0xc577, 0xa4ee, 0xa5bf, 0xa6b9, 0xa842, 0xaa5a, 0xaa5b, - 0x003f, 0x003f, 0xac6e, 0x003f, 0x003f, 0xd1fa, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb7b3, 0x003f, 0x003f, 0x003f, 0xe6d1, 0xbefa, - 0xc26b, 0xa4ef, 0x003f, 0xa6ba, 0x003f, 0x003f, 0xcceb, 0xaa5c, - 0xccea, 0x003f, 0xcf65, 0xac6f, 0xcf66, 0x003f, 0xac70, 0x003f, - 0xd1fc, 0xaeee, 0xaeed, 0x003f, 0xd5de, 0xd5dc, 0xd5dd, 0xd5db, - 0x003f, 0xd5da, 0x003f, 0x003f, 0xd9de, 0xd9e1, 0xb4de, 0xd9df, - 0xb4dd, 0xd9e0, 0x003f, 0xddfb, 0x003f, 0x003f, 0xe266, 0xe267, - 0xe268, 0x003f, 0xe5f3, 0xe5f2, 0xbcdc, 0xe5f1, 0xe5f4, 0xe9e1, - 0x003f, 0x003f, 0xe9e2, 0xe9e3, 0x003f, 0xed4c, 0xc0d4, 0xc26c, - 0xf25a, 0x003f, 0xc4e8, 0xc95f, 0x003f, 0xac71, 0xcf67, 0xaeef, - 0x003f, 0x003f, 0xb1fe, 0x003f, 0xb4df, 0xd9e2, 0x003f, 0xb7b5, - 0xb7b4, 0x003f, 0x003f, 0xe269, 0xe26a, 0xbcdd, 0xbcde, 0xe9e5, - 0xe9e4, 0xefe9, 0xf7e3, 0xa4f0, 0xc960, 0xa5c0, 0x003f, 0xa843, - 0xcb48, 0x003f, 0xac72, 0xb7b6, 0xa4f1, 0x003f, 0xcf68, 0xac73, - 0xcf69, 0x003f, 0xc0d5, 0xa4f2, 0x003f, 0x003f, 0xccec, 0x003f, - 0xcf6a, 0x003f, 0xd242, 0xd241, 0xd1fe, 0x003f, 0xd1fd, 0xd243, - 0xd240, 0x003f, 0x003f, 0xb240, 0xb241, 0x003f, 0x003f, 0xb4e0, - 0xd9e3, 0x003f, 0xd9e4, 0xd9e5, 0x003f, 0x003f, 0x003f, 0xde41, - 0xde42, 0xde40, 0x003f, 0xddfd, 0xddfe, 0xb7b7, 0xe26b, 0xe5f7, - /* 0x6c00 .. 0x6cff */ - 0xe5f6, 0xe5f5, 0xe5f8, 0xe9e7, 0xe9e6, 0xbefb, 0xe9e8, 0x003f, - 0xc0d6, 0xed4d, 0x003f, 0xefea, 0xf25b, 0xf6e7, 0x003f, 0xa4f3, - 0xa5c2, 0xa5c1, 0x003f, 0xaa5d, 0xc961, 0xc97e, 0xa6bb, 0x003f, - 0xc9f7, 0xcb49, 0xcb4a, 0xaa5e, 0x003f, 0xcced, 0x003f, 0xac74, - 0xcf6b, 0xcf6c, 0x003f, 0xaef0, 0xaef4, 0xd244, 0xaef3, 0xaef1, - 0xaef2, 0x003f, 0xd5df, 0xb242, 0xb4e3, 0x003f, 0xb4e1, 0xb4e2, - 0xd9e6, 0x003f, 0x003f, 0xba72, 0xa4f4, 0x003f, 0xc9a1, 0x003f, - 0xa5c3, 0x003f, 0x003f, 0xc9a4, 0x003f, 0x003f, 0xa5c6, 0xc9a3, - 0xa5c5, 0xa5c4, 0xa844, 0xc9a2, 0x003f, 0x003f, 0xc9f8, 0x003f, - 0x003f, 0x003f, 0xc9fc, 0xc9fe, 0xca40, 0xa6c5, 0xa6c6, 0xc9fb, - 0xa6c1, 0x003f, 0xc9f9, 0x003f, 0xc9fd, 0xa6c2, 0x003f, 0xa6bd, - 0x003f, 0xa6be, 0x003f, 0xa6c4, 0xc9fa, 0xa6bc, 0xa845, 0xa6bf, - 0xa6c0, 0xa6c3, 0x003f, 0x003f, 0x003f, 0xcb5b, 0xcb59, 0xcb4c, - 0xa851, 0xcb53, 0xa84c, 0xcb4d, 0x003f, 0xcb55, 0x003f, 0xcb52, - 0xa84f, 0xcb51, 0xa856, 0xcb5a, 0xa858, 0x003f, 0xa85a, 0x003f, - 0xcb4b, 0x003f, 0xa84d, 0xcb5c, 0x003f, 0xa854, 0xa857, 0x003f, - 0xcd45, 0xa847, 0xa85e, 0xa855, 0xcb4e, 0xa84a, 0xa859, 0xcb56, - 0xa848, 0xa849, 0xcd43, 0xcb4f, 0xa850, 0xa85b, 0xcb5d, 0xcb50, - 0xa84e, 0x003f, 0xa853, 0xccee, 0xa85c, 0xcb57, 0xa852, 0x003f, - 0xa85d, 0xa846, 0xcb54, 0xa84b, 0xcb58, 0xcd44, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xaa6a, 0xaa7a, 0xccf5, 0xaa71, 0x003f, - 0xcd4b, 0xaa62, 0x003f, 0xaa65, 0xcd42, 0x003f, 0xccf3, 0xccf7, - 0xaa6d, 0xaa6f, 0xccfa, 0xaa76, 0xaa68, 0xaa66, 0xaa67, 0xaa75, - 0xcd47, 0xaa70, 0xccf9, 0xccfb, 0xaa6e, 0xaa73, 0xccfc, 0xcd4a, - 0x003f, 0xac75, 0xaa79, 0x003f, 0xaa63, 0xcd49, 0x003f, 0xcd4d, - 0xccf8, 0xcd4f, 0xcd40, 0xaa6c, 0xccf4, 0xaa6b, 0xaa7d, 0xaa72, - 0x003f, 0xccf2, 0xcf75, 0xaa78, 0xaa7c, 0xcd41, 0xcd46, 0x003f, - 0xaa7e, 0xaa77, 0xaa69, 0xaa5f, 0x003f, 0xaa64, 0x003f, 0xccf6, - 0xaa60, 0xcd4e, 0x003f, 0xccf0, 0xccef, 0xccfd, 0xccf1, 0xaa7b, - 0xaef5, 0xaa74, 0xccfe, 0xaa61, 0x003f, 0xaca6, 0x003f, 0x003f, - 0x003f, 0xcd4c, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x6d00 .. 0x6dff */ - 0xcf7c, 0xcfa1, 0x003f, 0xcfa4, 0xcf77, 0x003f, 0x003f, 0xcfa7, - 0xcfaa, 0xcfac, 0xcf74, 0xac76, 0xac7b, 0xd249, 0xacad, 0xcfa5, - 0xcfad, 0xcf7b, 0xcf73, 0x003f, 0x003f, 0x003f, 0xd264, 0xac7e, - 0xcfa2, 0xcf78, 0xcf7a, 0xaca5, 0x003f, 0xcf7d, 0xac7d, 0xcf70, - 0xcfa8, 0x003f, 0xcfab, 0x003f, 0x003f, 0xac7a, 0x003f, 0xaca8, - 0xcf6d, 0xacaa, 0xac78, 0xacae, 0xcfa9, 0xcf6f, 0xacab, 0xd25e, - 0xcd48, 0xac7c, 0xac77, 0xcf76, 0xcf6e, 0xacac, 0xaca4, 0xcfa3, - 0xaca9, 0xaca7, 0xcf79, 0xaca1, 0xcf71, 0xaca2, 0xaca3, 0xcf72, - 0xcfa6, 0xac79, 0xcf7e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd24c, 0xaefd, 0xaf43, 0x003f, 0x003f, 0x003f, 0xd255, 0xd25b, - 0xd257, 0xd24a, 0xd24d, 0xd246, 0xd247, 0xaf4a, 0xaefa, 0xd256, - 0xd25f, 0xaf45, 0xaef6, 0x003f, 0xaf40, 0xd24e, 0xaf42, 0xd24f, - 0xd259, 0x003f, 0x003f, 0x003f, 0xaf44, 0xd268, 0xd248, 0xaefc, - 0xaefb, 0xaf48, 0xd245, 0xd266, 0xd25a, 0xd267, 0xd261, 0xd253, - 0xd262, 0x003f, 0xd25c, 0xd265, 0xd263, 0xaf49, 0xd254, 0xaef9, - 0xaef8, 0xaf41, 0xaf47, 0xd260, 0xaf46, 0xd251, 0xb243, 0x003f, - 0xd269, 0xd250, 0xd24b, 0xaefe, 0xaf4b, 0xaef7, 0x003f, 0xd258, - 0xd25d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb265, 0xd5e1, 0xd5e5, 0x003f, 0xb252, 0xb250, - 0x003f, 0x003f, 0xb247, 0xd5e3, 0xd5e2, 0xb25b, 0x003f, 0xd5e8, - 0xb255, 0x003f, 0xd5fa, 0xd647, 0xb244, 0xd5f7, 0xd5f0, 0xb267, - 0xd5e0, 0x003f, 0xd5fc, 0x003f, 0xb264, 0xb258, 0xb263, 0xb24e, - 0xd5ec, 0xd5fe, 0xd5f6, 0xb24f, 0xb249, 0xd645, 0x003f, 0xd5fd, - 0xd640, 0xb251, 0xb259, 0xd642, 0xd5ea, 0xd5fb, 0xd5ef, 0xd644, - 0xb25e, 0xb246, 0xb25c, 0xd5f4, 0xd5f2, 0xd5f3, 0xb253, 0xd5ee, - 0xd5ed, 0xb248, 0xd5e7, 0xd646, 0xb24a, 0xd5f1, 0xb268, 0x003f, - 0xb262, 0xd5e6, 0xb25f, 0xb25d, 0xb266, 0xd5f8, 0xb261, 0xd252, - 0xd5f9, 0xb260, 0xd641, 0xb245, 0xd5f5, 0xb257, 0xd5e9, 0xb256, - 0x003f, 0xb254, 0xb24c, 0xb24b, 0xd9e7, 0xd643, 0x003f, 0x003f, - /* 0x6e00 .. 0x6eff */ - 0xd5eb, 0x003f, 0x003f, 0xd9fc, 0x003f, 0xb24d, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb541, 0xb25a, 0xb4ee, 0xd9f6, 0xb4fc, 0x003f, 0xd9ea, - 0xb4eb, 0xb4e7, 0xda49, 0xb4ed, 0xb4f1, 0xb4ec, 0xb4f5, 0xda4d, - 0xda44, 0x003f, 0x003f, 0xd9f1, 0xb4fa, 0xb4f4, 0xd9fd, 0xb4e4, - 0xda4a, 0xda43, 0xb4e8, 0xd9f7, 0xb4f7, 0xda55, 0xda56, 0x003f, - 0xb4e5, 0xda48, 0xb4f9, 0xd9fb, 0xd9ed, 0xd9ee, 0xb4fd, 0xd9f2, - 0xd9f9, 0xd9f3, 0x003f, 0xb4fb, 0xb544, 0xd9ef, 0xd9e8, 0xd9e9, - 0x003f, 0xd9eb, 0xb4ea, 0xd9f8, 0x003f, 0xb4f8, 0xb542, 0x003f, - 0x003f, 0xd9fa, 0xda53, 0xda4b, 0xb4e6, 0xda51, 0xb4f2, 0x003f, - 0xb4f0, 0x003f, 0xda57, 0xb4ef, 0xda41, 0xd9f4, 0xd9fe, 0xb547, - 0xda45, 0xda42, 0xd9f0, 0xb543, 0xda4f, 0xda4c, 0xda54, 0xb4e9, - 0xda40, 0xb546, 0x003f, 0xda47, 0x003f, 0x003f, 0xb4f3, 0xb4f6, - 0x003f, 0xda46, 0xb545, 0xd9f5, 0xd5e4, 0x003f, 0x003f, 0xda50, - 0xda4e, 0xda52, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd9ec, 0xb540, 0x003f, 0x003f, 0x003f, 0xde61, 0xde60, 0xde46, - 0xb7bd, 0x003f, 0xde5f, 0xde49, 0xde4a, 0x003f, 0xb7c7, 0xde68, - 0xb7c2, 0xde5e, 0x003f, 0xde43, 0xb7c8, 0xb7be, 0xde52, 0xde48, - 0xde4b, 0xde63, 0xb7b8, 0xde6a, 0xde62, 0xb7c1, 0xde57, 0xb7cc, - 0x003f, 0x003f, 0xb7cb, 0xb7c5, 0x003f, 0x003f, 0xde69, 0xb7b9, - 0xde55, 0xde4c, 0xde59, 0xde65, 0xb7cd, 0x003f, 0xb7bb, 0xde54, - 0x003f, 0xde4d, 0xb7c4, 0x003f, 0xb7c3, 0xde50, 0xde5a, 0xde64, - 0xde47, 0xde51, 0xb7bc, 0xde5b, 0xb7c9, 0xb7c0, 0xde4e, 0xb7bf, - 0xde45, 0xde53, 0xde67, 0xb4fe, 0xbab0, 0xde56, 0xe26c, 0xde58, - 0xde66, 0xb7c6, 0xde4f, 0xb7ba, 0xb7ca, 0xbcf0, 0xde44, 0x003f, - 0xde5d, 0x003f, 0x003f, 0x003f, 0xde5c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe2aa, 0xbaad, 0xe27d, 0xe2a4, 0xbaa2, - 0x003f, 0xe26e, 0xbaaf, 0x003f, 0xba77, 0xe26d, 0xe2b0, 0xbab1, - 0xe271, 0xe2a3, 0x003f, 0xe273, 0xe2b3, 0xe2af, 0xba75, 0xbaa1, - /* 0x6f00 .. 0x6fff */ - 0xe653, 0xbaae, 0xba7d, 0xe26f, 0x003f, 0xe2ae, 0xbaa3, 0xe2ab, - 0xe2b8, 0xe275, 0xe27e, 0x003f, 0x003f, 0xe2b6, 0xe2ac, 0xba7c, - 0x003f, 0x003f, 0xe27c, 0xba76, 0xba74, 0xbaa8, 0x003f, 0x003f, - 0xe27a, 0xe277, 0xe278, 0x003f, 0xe2b2, 0x003f, 0xe2b7, 0xe2b5, - 0xba7a, 0xe2b9, 0xba7e, 0xbaa7, 0x003f, 0xe270, 0xe5fa, 0xe279, - 0x003f, 0xba78, 0xbaac, 0xbaa9, 0xba7b, 0xe2a5, 0xe274, 0xbaaa, - 0xe2a7, 0xbaa4, 0xbaa6, 0xba73, 0x003f, 0xe2a9, 0xe2a1, 0xe272, - 0xbaa5, 0xe2b1, 0xe2b4, 0xe27b, 0xe2a8, 0x003f, 0xba79, 0xbcdf, - 0xe2a6, 0xe5f9, 0x003f, 0xe2ad, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe276, 0xe644, - 0xe64e, 0xbce2, 0xe64d, 0xe659, 0xbce4, 0xe64b, 0x003f, 0xe64f, - 0xbcef, 0x003f, 0xe646, 0xbce7, 0x003f, 0xe652, 0xe9f0, 0xbcf3, - 0xbcf2, 0xe654, 0xe643, 0xe65e, 0xbced, 0x003f, 0xbce3, 0xe657, - 0x003f, 0xe65b, 0xe660, 0xe655, 0xe649, 0xbce6, 0xbce9, 0xbcf1, - 0xbcec, 0x003f, 0xe64c, 0xe2a2, 0x003f, 0x003f, 0xe648, 0xe65f, - 0xbce8, 0x003f, 0xbceb, 0xe661, 0xbce0, 0xe656, 0xe5fb, 0xe65c, - 0xc0df, 0x003f, 0xe64a, 0x003f, 0xbce1, 0xe645, 0xbce5, 0xe5fc, - 0xbaab, 0xe641, 0x003f, 0xe65a, 0xe642, 0xe640, 0xbcea, 0x003f, - 0xe658, 0x003f, 0xe5fe, 0xe651, 0xe650, 0xe65d, 0xe647, 0xbcee, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe9f3, 0x003f, - 0xbf49, 0xbefe, 0xea40, 0xe9eb, 0xbf41, 0xe9f7, 0xbf48, 0xbf43, - 0xe9f5, 0xed4f, 0xe9fb, 0xea42, 0xe9fa, 0xe9e9, 0xe9f8, 0xea44, - 0xea46, 0xbefd, 0xea45, 0xbf44, 0xbf4a, 0x003f, 0xbf47, 0x003f, - 0xe9fe, 0xbf46, 0xe9f9, 0x003f, 0xe9ed, 0xe9f2, 0x003f, 0xe9fd, - 0xbf45, 0xbf42, 0xbefc, 0xbf40, 0xe9f1, 0x003f, 0xe5fd, 0xe9ec, - 0xe9ef, 0xea41, 0xe9f4, 0xe9ea, 0xed4e, 0xea43, 0xe9ee, 0xe9fc, - 0x003f, 0x003f, 0x003f, 0x003f, 0xed51, 0xc0e3, 0x003f, 0x003f, - 0xc0d7, 0x003f, 0x003f, 0xc0db, 0xed53, 0xed59, 0xed57, 0xc0d9, - 0xc0da, 0xc0e1, 0xed5a, 0xed52, 0xc0dc, 0x003f, 0xed56, 0xed55, - 0xed5b, 0xc0e2, 0x003f, 0xc0dd, 0xc0e0, 0xed54, 0xc0e4, 0xc0de, - 0xc0e5, 0xc0d8, 0xed58, 0x003f, 0xed50, 0x003f, 0x003f, 0xeff7, - 0x003f, 0x003f, 0xc271, 0xeff4, 0xeff6, 0x003f, 0xc26f, 0xeff2, - /* 0x7000 .. 0x70ff */ - 0xeff3, 0xefee, 0x003f, 0x003f, 0xe9f6, 0xefef, 0xc270, 0xefeb, - 0x003f, 0xc26d, 0xeff8, 0xc26e, 0xefec, 0xefed, 0xeff1, 0xc273, - 0x003f, 0xc272, 0x003f, 0x003f, 0xeff0, 0xc378, 0xf25f, 0xf265, - 0xc379, 0xf25c, 0xc376, 0xc373, 0xf267, 0xc377, 0x003f, 0xc374, - 0xf25e, 0xf261, 0xf262, 0xf263, 0xf266, 0x003f, 0xeff5, 0xf25d, - 0xc375, 0xf264, 0xf268, 0xf260, 0x003f, 0x003f, 0x003f, 0xf45d, - 0xc46a, 0xf460, 0xc46b, 0xf468, 0xf45f, 0xf45c, 0x003f, 0xf45e, - 0xf462, 0xf465, 0xf464, 0xf467, 0xf45b, 0x003f, 0xc469, 0xf463, - 0xf466, 0xf469, 0xf461, 0xf5d3, 0xf5d4, 0xf5d8, 0xf5d9, 0x003f, - 0xf5d6, 0xf5d7, 0xf5d5, 0x003f, 0xc4e9, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc578, 0xf6eb, 0x003f, 0x003f, 0xf6e8, 0xf6e9, 0xf6ea, - 0xc579, 0x003f, 0xf7e5, 0xf7e4, 0x003f, 0xf8af, 0xc5f4, 0xf8ad, - 0xf8b0, 0xf8ae, 0xf8f5, 0xc657, 0xc665, 0xf9a3, 0xf96c, 0x003f, - 0xf9a2, 0xf9d0, 0xf9d1, 0xa4f5, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa6c7, 0xca41, 0x003f, 0x003f, 0xcb5e, 0x003f, 0xa85f, 0x003f, - 0xa862, 0x003f, 0xcb5f, 0x003f, 0xa860, 0xa861, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcd58, 0xcd5a, 0xcd55, 0xcd52, 0xcd54, 0x003f, - 0x003f, 0x003f, 0xaaa4, 0x003f, 0x003f, 0x003f, 0xaaa2, 0x003f, - 0x003f, 0xcd56, 0xaaa3, 0xcd53, 0xcd50, 0xaaa1, 0xcd57, 0x003f, - 0xcd51, 0xaaa5, 0xcd59, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfaf, - 0x003f, 0xcfb3, 0x003f, 0x003f, 0xacb7, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcfb6, 0x003f, 0xacaf, 0xacb2, 0xacb4, 0xacb6, 0xacb3, - 0xcfb2, 0xcfb1, 0x003f, 0xacb1, 0xcfb4, 0xcfb5, 0x003f, 0xcfae, - 0xacb5, 0x003f, 0xacb0, 0x003f, 0x003f, 0x003f, 0xcfb0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd277, 0xd278, 0xd279, - 0xaf50, 0x003f, 0xaf4c, 0xd26e, 0x003f, 0xd276, 0xd27b, 0xaf51, - 0x003f, 0xd26c, 0xd272, 0xd26b, 0xd275, 0x003f, 0x003f, 0xd271, - 0xaf4d, 0xaf4f, 0xd27a, 0x003f, 0xd26a, 0xd26d, 0xd273, 0x003f, - 0xd274, 0xd27c, 0xd270, 0x003f, 0xaf4e, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb26d, - 0xd64e, 0x003f, 0x003f, 0xd650, 0xd64c, 0x003f, 0xd658, 0xd64a, - 0xd657, 0xb269, 0xd648, 0xda5b, 0xd652, 0xb26c, 0x003f, 0xd653, - /* 0x7100 .. 0x71ff */ - 0xd656, 0x003f, 0xd65a, 0x003f, 0xd64f, 0x003f, 0xd654, 0x003f, - 0x003f, 0xb26a, 0xb26b, 0xd659, 0xd64d, 0xd649, 0xd65b, 0x003f, - 0xd651, 0x003f, 0x003f, 0xd655, 0x003f, 0x003f, 0x003f, 0xd64b, - 0x003f, 0xb548, 0xb549, 0xda65, 0xb54f, 0x003f, 0xda59, 0xda62, - 0xda58, 0xb54c, 0xda60, 0xda5e, 0x003f, 0xda5f, 0xb54a, 0x003f, - 0xda63, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xda5c, 0xda5a, - 0xb54b, 0xda5d, 0xda61, 0x003f, 0x003f, 0x003f, 0xb54d, 0x003f, - 0x003f, 0x003f, 0xda64, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xde70, 0xde77, 0xde79, 0xdea1, 0x003f, 0xb7da, 0xde6b, - 0x003f, 0xb7d2, 0x003f, 0xde7a, 0xb7d7, 0xdea2, 0xb7ce, 0x003f, - 0xde7d, 0x003f, 0xde6d, 0xde7e, 0xde6c, 0x003f, 0xb7dc, 0x003f, - 0xde78, 0xb7cf, 0xdea3, 0x003f, 0xb7d4, 0xde71, 0xb7d9, 0xde7c, - 0xde6f, 0xde76, 0xde72, 0xde6e, 0xb7d1, 0xb7d8, 0xb7d6, 0xb7d3, - 0xb7db, 0xb7d0, 0xde75, 0x003f, 0xb7d5, 0x003f, 0xb54e, 0x003f, - 0xde7b, 0x003f, 0xde73, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xde74, 0x003f, 0x003f, 0xe2c1, 0x003f, 0xbab4, 0x003f, 0x003f, - 0xe2bd, 0xe2c3, 0xe2bf, 0x003f, 0xbab6, 0xe2be, 0xe2c2, 0xe2ba, - 0x003f, 0xe2bc, 0xbab5, 0x003f, 0x003f, 0x003f, 0x003f, 0xe2c0, - 0xe2bb, 0x003f, 0xbab7, 0x003f, 0xbab2, 0x003f, 0x003f, 0xe2c4, - 0x003f, 0xbab3, 0xe667, 0xe664, 0xe670, 0xe66a, 0xe66c, 0xbcf4, - 0xe666, 0xe66e, 0x003f, 0x003f, 0xe66d, 0xe66b, 0x003f, 0xe671, - 0xbcf7, 0xe668, 0xe66f, 0x003f, 0xbcf5, 0x003f, 0x003f, 0xe663, - 0xe665, 0xbcf6, 0xe662, 0xe672, 0x003f, 0xe669, 0x003f, 0x003f, - 0xea4a, 0xbf51, 0x003f, 0x003f, 0xea55, 0xea53, 0xbf4b, 0xea49, - 0xea4c, 0xea4d, 0xea48, 0xbf55, 0xbf56, 0xea47, 0xea56, 0xea51, - 0xbf4f, 0xbf4c, 0xea50, 0xea4e, 0x003f, 0x003f, 0xbf52, 0xea52, - 0xbf4d, 0x003f, 0xbf4e, 0x003f, 0xea4f, 0xbf50, 0xea4b, 0x003f, - 0xea54, 0xbf53, 0xea57, 0xea58, 0xbf54, 0x003f, 0x003f, 0xc0e7, - 0xc0ee, 0xed5c, 0xed62, 0x003f, 0xed60, 0xc0ea, 0xc0e9, 0xc0e6, - 0xed5e, 0x003f, 0x003f, 0x003f, 0xc0ec, 0xc0eb, 0xc0e8, 0x003f, - 0xed61, 0xed5d, 0xed5f, 0x003f, 0xc0ed, 0x003f, 0x003f, 0x003f, - 0xc277, 0xeffb, 0x003f, 0xc274, 0xc275, 0xeffd, 0xc276, 0xeffa, - /* 0x7200 .. 0x72ff */ - 0x003f, 0xeff9, 0xf26c, 0xeffc, 0x003f, 0xf26d, 0xc37a, 0xf26b, - 0x003f, 0x003f, 0xf26a, 0x003f, 0xf269, 0xc37b, 0x003f, 0x003f, - 0xc46c, 0x003f, 0x003f, 0xf46a, 0xf46b, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf5dc, 0xf5db, 0xc4ea, 0x003f, 0xf5da, 0xf6ec, 0xf6ed, - 0x003f, 0x003f, 0xf7e6, 0xf8b1, 0x003f, 0x003f, 0xf8f6, 0xf9bc, - 0xc679, 0xf9c6, 0xa4f6, 0x003f, 0xaaa6, 0xaaa7, 0x003f, 0x003f, - 0xacb8, 0x003f, 0x003f, 0x003f, 0x003f, 0xc0ef, 0xa4f7, 0x003f, - 0xaaa8, 0xaf52, 0xb7dd, 0xa4f8, 0x003f, 0xb26e, 0xbab8, 0xc962, - 0x003f, 0xcfb7, 0xd27d, 0x003f, 0xe2c5, 0x003f, 0xc0f0, 0xa4f9, - 0xaaa9, 0xcfb8, 0xcfb9, 0xda66, 0xb550, 0x003f, 0x003f, 0xdea4, - 0x003f, 0x003f, 0xb7de, 0xe2c6, 0x003f, 0x003f, 0xbcf8, 0x003f, - 0xc37c, 0xa4fa, 0xda67, 0xa4fb, 0x003f, 0xa6c9, 0xca42, 0xa6c8, - 0xa865, 0xa864, 0xa863, 0xcb60, 0x003f, 0x003f, 0x003f, 0xaaaa, - 0x003f, 0xaaab, 0xcd5b, 0x003f, 0xcfba, 0x003f, 0xcfbd, 0xacba, - 0xcfbb, 0x003f, 0xacb9, 0xcfbc, 0xacbb, 0x003f, 0xd2a2, 0xd2a1, - 0xd27e, 0xaf53, 0x003f, 0xd65d, 0xd65e, 0xb26f, 0xd65c, 0xd65f, - 0xb552, 0xb270, 0x003f, 0x003f, 0xb551, 0xda6b, 0xda6a, 0x003f, - 0xda68, 0xda69, 0x003f, 0xda6c, 0xdea6, 0xdea5, 0xdea9, 0x003f, - 0xdea8, 0xdea7, 0xbab9, 0xe2c9, 0x003f, 0xe2c8, 0xbaba, 0xe2c7, - 0xe673, 0x003f, 0xe674, 0xbcf9, 0x003f, 0xea59, 0xea5a, 0x003f, - 0x003f, 0xf272, 0xc37d, 0xf271, 0xf270, 0xf26e, 0xf26f, 0xc4eb, - 0xf46c, 0xf6ee, 0xf8f7, 0x003f, 0xa4fc, 0x003f, 0xc9a5, 0xa5c7, - 0xc9a6, 0x003f, 0x003f, 0x003f, 0xca43, 0xca44, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcb66, 0x003f, 0x003f, 0xcb62, 0x003f, 0xcb61, - 0xaaac, 0xcb65, 0xa867, 0xcb63, 0xa866, 0xcb67, 0xcb64, 0x003f, - 0x003f, 0xcd5f, 0xcfbe, 0xcd5d, 0xcd64, 0x003f, 0xaaad, 0x003f, - 0xaab0, 0xcd65, 0xcd61, 0x003f, 0xcd62, 0x003f, 0xcd5c, 0xaaaf, - 0xcd5e, 0xaaae, 0xcd63, 0x003f, 0xcd60, 0x003f, 0x003f, 0xcfc2, - 0xacbd, 0xacbe, 0x003f, 0xcfc5, 0xcfbf, 0x003f, 0xcfc4, 0x003f, - 0xcfc0, 0xacbc, 0xcfc3, 0xcfc1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd2a8, 0xd2a5, 0x003f, 0xd2a7, 0xaf58, - 0xaf57, 0xaf55, 0xd2a4, 0xd2a9, 0xaf54, 0xaf56, 0xd2a6, 0xd667, - /* 0x7300 .. 0x73ff */ - 0xd2a3, 0xd2aa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd662, - 0xd666, 0x003f, 0xd665, 0xda6e, 0xda79, 0x003f, 0x003f, 0xd668, - 0x003f, 0xd663, 0xda6d, 0xb274, 0x003f, 0x003f, 0xb273, 0xd661, - 0xd664, 0xb275, 0x003f, 0xb272, 0xb271, 0xd660, 0xd669, 0x003f, - 0x003f, 0x003f, 0xda70, 0xda77, 0x003f, 0xb554, 0xda76, 0xda73, - 0x003f, 0xb556, 0x003f, 0x003f, 0x003f, 0xda75, 0x003f, 0x003f, - 0xda6f, 0xda71, 0xda74, 0xda72, 0xb555, 0xda78, 0xb553, 0xb7df, - 0x003f, 0x003f, 0xdead, 0xdeac, 0xdeaa, 0x003f, 0xb7e2, 0xb7e1, - 0xdeae, 0x003f, 0xdeab, 0xe2ca, 0xbabb, 0xb7e0, 0x003f, 0x003f, - 0x003f, 0xdeb0, 0xdeaf, 0x003f, 0xe2cd, 0xe2cb, 0xbcfa, 0x003f, - 0xbabc, 0xe2cc, 0xe676, 0x003f, 0x003f, 0x003f, 0x003f, 0xbcfb, - 0xe675, 0xe67e, 0xe67d, 0xe67b, 0x003f, 0xe67a, 0xe677, 0xe678, - 0xe679, 0xe67c, 0xe6a1, 0x003f, 0x003f, 0xea5f, 0xea5c, 0xea5d, - 0xbf57, 0xea5b, 0xea61, 0xea60, 0xea5e, 0x003f, 0xed64, 0xed65, - 0xc0f1, 0x003f, 0xc0f2, 0xed63, 0x003f, 0xc279, 0xeffe, 0xc278, - 0xc37e, 0x003f, 0xc3a1, 0xc46d, 0xf46e, 0xf46d, 0xf5dd, 0xf6ef, - 0xc57a, 0xf7e8, 0xf7e7, 0xf7e9, 0xa5c8, 0xcfc6, 0xaf59, 0xb276, - 0xd66a, 0xa5c9, 0xc9a7, 0xa4fd, 0x003f, 0x003f, 0xca45, 0x003f, - 0x003f, 0x003f, 0xcb6c, 0xcb6a, 0xcb6b, 0xcb68, 0xa868, 0xcb69, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcd6d, 0x003f, 0xaab3, - 0xcd6b, 0xcd67, 0xcd6a, 0x003f, 0xcd66, 0xaab5, 0xcd69, 0x003f, - 0xaab2, 0xaab1, 0x003f, 0xaab4, 0xcd6c, 0xcd68, 0x003f, 0x003f, - 0x003f, 0x003f, 0xacc2, 0xacc5, 0xcfce, 0xcfcd, 0xcfcc, 0xacbf, - 0xcfd5, 0xcfcb, 0x003f, 0xacc1, 0xd2af, 0x003f, 0xcfd2, 0xcfd0, - 0xacc4, 0x003f, 0xcfc8, 0xcfd3, 0x003f, 0xcfca, 0xcfd4, 0xcfd1, - 0xcfc9, 0x003f, 0xacc0, 0xcfd6, 0xcfc7, 0xacc3, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd2b4, 0xd2ab, 0xd2b6, 0x003f, 0xd2ae, 0xd2b9, - 0xd2ba, 0xd2ac, 0xd2b8, 0xd2b5, 0xd2b3, 0xd2b7, 0xaf5f, 0x003f, - 0xaf5d, 0x003f, 0x003f, 0xd2b1, 0x003f, 0xd2ad, 0x003f, 0xd2b0, - 0xd2bb, 0xd2b2, 0xaf5e, 0xcfcf, 0x003f, 0xaf5a, 0xaf5c, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd678, 0xd66d, 0xd66b, 0x003f, - 0xd66c, 0x003f, 0xd673, 0x003f, 0xd674, 0xd670, 0xb27b, 0xd675, - /* 0x7400 .. 0x74ff */ - 0xd672, 0xd66f, 0x003f, 0xb279, 0xd66e, 0xb277, 0xb27a, 0xd671, - 0xd679, 0xaf5b, 0xb278, 0xd677, 0xd676, 0xb27c, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xda7e, 0x003f, - 0x003f, 0x003f, 0xdaa1, 0xb560, 0x003f, 0xdaa7, 0x003f, 0x003f, - 0xdaa9, 0xdaa2, 0xb55a, 0xdaa6, 0xdaa5, 0xb55b, 0xb561, 0x003f, - 0xb562, 0xdaa8, 0xb558, 0xda7d, 0xda7b, 0xdaa3, 0xda7a, 0xb55f, - 0xda7c, 0xdaa4, 0xdaaa, 0xb559, 0xb55e, 0xb55c, 0xb55d, 0x003f, - 0x003f, 0x003f, 0xb557, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7e9, - 0xdeb7, 0xb7e8, 0xdebb, 0x003f, 0xdeb1, 0x003f, 0xdebc, 0x003f, - 0x003f, 0x003f, 0xdeb2, 0xdeb3, 0x003f, 0xdebd, 0xdeba, 0xdeb8, - 0xdeb9, 0xdeb5, 0xdeb4, 0x003f, 0xdebe, 0xb7e5, 0x003f, 0xdeb6, - 0x003f, 0xb7ea, 0xb7e4, 0xb7eb, 0xb7ec, 0x003f, 0xb7e7, 0xb7e6, - 0x003f, 0x003f, 0xe2ce, 0xbabe, 0xbabd, 0x003f, 0x003f, 0xe2d3, - 0x003f, 0xbcfc, 0xbabf, 0x003f, 0x003f, 0xbac1, 0xe2d4, 0xb7e3, - 0xbac0, 0xe2d0, 0xe2d2, 0xe2cf, 0x003f, 0xe2d1, 0x003f, 0x003f, - 0x003f, 0xe6ab, 0x003f, 0x003f, 0xe6aa, 0xe6a7, 0xbd40, 0xea62, - 0xbd41, 0xe6a6, 0x003f, 0xbcfe, 0x003f, 0xe6a8, 0xe6a5, 0xe6a2, - 0xe6a9, 0xe6a3, 0xe6a4, 0xbcfd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xed69, 0x003f, 0xea66, 0x003f, 0xea65, 0xea67, 0x003f, 0xed66, - 0xbf5a, 0x003f, 0xea63, 0x003f, 0xbf58, 0x003f, 0xbf5c, 0xbf5b, - 0xea64, 0xea68, 0x003f, 0xbf59, 0x003f, 0xed6d, 0xc0f5, 0xc27a, - 0xc0f6, 0xc0f3, 0xed6a, 0xed68, 0x003f, 0xed6b, 0x003f, 0xed6e, - 0xc0f4, 0xed6c, 0xed67, 0x003f, 0x003f, 0xf042, 0xf045, 0xf275, - 0xf040, 0x003f, 0xf46f, 0xf046, 0x003f, 0xc3a2, 0xf044, 0xc27b, - 0xf041, 0xf043, 0xf047, 0xf276, 0x003f, 0xf274, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc3a3, 0xf273, 0x003f, 0x003f, 0x003f, 0xc46e, - 0x003f, 0x003f, 0x003f, 0x003f, 0xc4ed, 0xf6f1, 0xc4ec, 0xf6f3, - 0xf6f0, 0xf6f2, 0xc5d0, 0xf8b2, 0xa5ca, 0xcd6e, 0xd2bc, 0xd2bd, - 0xb27d, 0xdebf, 0xbf5d, 0xc3a4, 0xc57b, 0xf8b3, 0xa5cb, 0x003f, - 0xcd6f, 0xa260, 0x003f, 0x003f, 0xcfd7, 0x003f, 0xcfd8, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd2be, 0xd2bf, 0xb27e, 0xb2a1, - 0x003f, 0x003f, 0x003f, 0xdaab, 0x003f, 0xdec2, 0xdec1, 0xdec0, - /* 0x7500 .. 0x75ff */ - 0xe2d5, 0x003f, 0xe2d6, 0xe2d7, 0xbac2, 0x003f, 0x003f, 0xe6ad, - 0xe6ac, 0x003f, 0x003f, 0xea69, 0xbf5e, 0xbf5f, 0x003f, 0xed72, - 0xed6f, 0xed70, 0xed71, 0xf049, 0xf048, 0xc27c, 0xf277, 0xf5de, - 0xa5cc, 0x003f, 0xacc6, 0x003f, 0xb2a2, 0xdec3, 0x003f, 0xa5cd, - 0x003f, 0xd2c0, 0xb2a3, 0x003f, 0x003f, 0xb563, 0xb564, 0x003f, - 0xa5ce, 0xa5cf, 0xca46, 0xa86a, 0xa869, 0xacc7, 0xcfd9, 0xdaac, - 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0x003f, 0x003f, 0x003f, 0xa86b, - 0xa86c, 0xcb6e, 0xcb6d, 0x003f, 0x003f, 0xaab6, 0xcd72, 0xcd70, - 0xcd71, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcfda, - 0xcfdb, 0x003f, 0x003f, 0xaccb, 0xacc9, 0x003f, 0xacca, 0xacc8, - 0x003f, 0x003f, 0x003f, 0x003f, 0xaf60, 0x003f, 0x003f, 0x003f, - 0x003f, 0xaf64, 0xaf63, 0xd2c1, 0xaf62, 0xaf61, 0x003f, 0xd2c2, - 0x003f, 0x003f, 0xb2a6, 0xd67b, 0xd67a, 0xb2a4, 0xb2a5, 0x003f, - 0x003f, 0x003f, 0xb566, 0xb565, 0xdaae, 0x003f, 0x003f, 0xdaad, - 0xb2a7, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb7ed, 0xdec5, - 0xb7ee, 0xdec4, 0x003f, 0x003f, 0x003f, 0xe2d8, 0xe6ae, 0xbd42, - 0xea6a, 0x003f, 0x003f, 0x003f, 0xed73, 0x003f, 0xc3a6, 0xc3a5, - 0x003f, 0x003f, 0xc57c, 0xa5d4, 0xcd73, 0x003f, 0x003f, 0xb2a8, - 0xe2d9, 0xbac3, 0x003f, 0x003f, 0xcb6f, 0xcb70, 0x003f, 0x003f, - 0xcd74, 0xaab8, 0xaab9, 0x003f, 0x003f, 0xaab7, 0x003f, 0x003f, - 0x003f, 0x003f, 0xaccf, 0xacd0, 0xaccd, 0xacce, 0x003f, 0xcfdc, - 0x003f, 0x003f, 0xcfdd, 0xaccc, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd2c3, 0x003f, 0xaf68, 0xaf69, 0x003f, 0xb2ab, 0xd2c9, 0x003f, - 0xaf6e, 0xaf6c, 0xd2ca, 0xd2c5, 0xaf6b, 0xaf6a, 0xaf65, 0xd2c8, - 0xd2c7, 0xd2c4, 0xaf6d, 0x003f, 0xd2c6, 0xaf66, 0x003f, 0xaf67, - 0x003f, 0x003f, 0xb2ac, 0xd6a1, 0xd6a2, 0xb2ad, 0xd67c, 0xd67e, - 0xd6a4, 0xd6a3, 0xd67d, 0x003f, 0xb2a9, 0xb2aa, 0x003f, 0xdab6, - 0xb56b, 0xb56a, 0xdab0, 0xb568, 0x003f, 0xdab3, 0xb56c, 0xdab4, - 0xb56d, 0xdab1, 0xb567, 0xb569, 0xdab5, 0x003f, 0xdab2, 0xdaaf, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xded2, 0x003f, 0xdec7, - 0xb7f0, 0xb7f3, 0xb7f2, 0xb7f7, 0xb7f6, 0xded3, 0xded1, 0xdeca, - 0xdece, 0xdecd, 0xb7f4, 0xded0, 0xdecc, 0xded4, 0xdecb, 0xb7f5, - /* 0x7600 .. 0x76ff */ - 0xb7ef, 0xb7f1, 0x003f, 0xdec9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe2db, 0xbac7, 0xe2df, 0xbac6, 0xe2dc, 0xbac5, 0x003f, 0xdec8, - 0xdecf, 0xe2de, 0x003f, 0xbac8, 0xe2e0, 0xe2dd, 0xe2da, 0x003f, - 0x003f, 0xe6b1, 0xe6b5, 0xe6b7, 0xe6b3, 0xe6b2, 0xe6b0, 0xbd45, - 0xbd43, 0xbd48, 0xbd49, 0xe6b4, 0xbd46, 0xe6af, 0xbd47, 0xbac4, - 0xe6b6, 0xbd44, 0x003f, 0x003f, 0x003f, 0xea6c, 0x003f, 0xea6b, - 0xea73, 0xea6d, 0xea72, 0xea6f, 0xbf60, 0xea71, 0x003f, 0x003f, - 0xbf61, 0x003f, 0xbf62, 0x003f, 0xea70, 0xea6e, 0x003f, 0x003f, - 0x003f, 0x003f, 0xc0f8, 0xed74, 0x003f, 0x003f, 0xc0f7, 0xed77, - 0xed75, 0xed76, 0x003f, 0x003f, 0xc0f9, 0x003f, 0x003f, 0x003f, - 0xf04d, 0x003f, 0xc2a1, 0xf04e, 0x003f, 0x003f, 0xc27d, 0xf04f, - 0xc27e, 0xf04c, 0xf050, 0x003f, 0xf04a, 0x003f, 0x003f, 0xc3a7, - 0xf278, 0xc3a8, 0xc46f, 0x003f, 0xf04b, 0xc470, 0x003f, 0x003f, - 0x003f, 0xc4ee, 0xf5df, 0x003f, 0xc57e, 0xf6f4, 0xc57d, 0x003f, - 0xf7ea, 0xc5f5, 0xc5f6, 0x003f, 0x003f, 0xf9cc, 0x003f, 0x003f, - 0xacd1, 0xcfde, 0x003f, 0xb56e, 0xb56f, 0xa5d5, 0xa6ca, 0xca47, - 0x003f, 0xcb71, 0xa86d, 0x003f, 0xaaba, 0x003f, 0xacd2, 0xacd3, - 0xacd4, 0xd6a6, 0xd2cb, 0xaf6f, 0x003f, 0x003f, 0xb2ae, 0xd6a5, - 0x003f, 0x003f, 0xdab8, 0xb571, 0x003f, 0xdab7, 0xb570, 0x003f, - 0x003f, 0xded5, 0xbd4a, 0xe6bb, 0xe6b8, 0xe6b9, 0xe6ba, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xed78, 0x003f, 0xf051, 0x003f, - 0x003f, 0x003f, 0xf471, 0xf470, 0x003f, 0xf6f5, 0xa5d6, 0xcd75, - 0xaf70, 0x003f, 0x003f, 0x003f, 0xb572, 0xded6, 0x003f, 0x003f, - 0xe2e1, 0x003f, 0xbd4b, 0xea74, 0x003f, 0xf052, 0xf472, 0xa5d7, - 0x003f, 0x003f, 0xaabb, 0xacd7, 0xcfdf, 0xacd8, 0xacd6, 0x003f, - 0xacd5, 0xd2cc, 0xaf71, 0x003f, 0x003f, 0xaf72, 0xaf73, 0x003f, - 0x003f, 0x003f, 0xb2b0, 0xd6a7, 0xb2af, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xdab9, 0xb2b1, 0xb573, 0xded7, 0xb7f8, 0xb7f9, - 0x003f, 0xbac9, 0x003f, 0xbaca, 0xbd4c, 0xbf64, 0xea75, 0xbf63, - 0x003f, 0xed79, 0xc0fa, 0x003f, 0xf053, 0xf473, 0xa5d8, 0xa86e, - 0xcd78, 0xcd77, 0xaabc, 0xcd76, 0xaabd, 0xcd79, 0x003f, 0xcfe5, - 0xacdb, 0xacda, 0xcfe7, 0xcfe6, 0xacdf, 0x003f, 0xacde, 0x003f, - /* 0x7700 .. 0x77ff */ - 0x003f, 0xacd9, 0x003f, 0xcfe1, 0xcfe2, 0xcfe3, 0x003f, 0xace0, - 0xcfe0, 0xacdc, 0xcfe4, 0xacdd, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd2cf, 0xd2d3, 0xd2d1, 0xd2d0, 0x003f, 0xd2d4, 0x003f, 0x003f, - 0x003f, 0xd2d5, 0xd2d6, 0xd2ce, 0x003f, 0xd2cd, 0x003f, 0xaf75, - 0xaf76, 0x003f, 0xd2d7, 0xd2d2, 0x003f, 0xd6b0, 0x003f, 0xd2d8, - 0xaf77, 0xaf74, 0x003f, 0x003f, 0x003f, 0xd6aa, 0x003f, 0xd6a9, - 0x003f, 0xd6ab, 0xd6ac, 0xd6ae, 0xd6ad, 0xd6b2, 0xb2b5, 0xb2b2, - 0xb2b6, 0xd6a8, 0xb2b7, 0xd6b1, 0xb2b4, 0xd6af, 0xb2b3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdabc, 0xdabe, 0xdaba, 0xdabb, - 0x003f, 0x003f, 0xdabf, 0xdac1, 0xdac2, 0xdabd, 0xdac0, 0xb574, - 0x003f, 0x003f, 0xdedb, 0x003f, 0xdee0, 0xded8, 0xdedc, 0x003f, - 0x003f, 0xdee1, 0xdedd, 0xb7fa, 0xb843, 0x003f, 0xb7fd, 0xded9, - 0xdeda, 0xbace, 0xb846, 0xb7fe, 0x003f, 0xb844, 0xb7fc, 0xdedf, - 0xb845, 0xdede, 0xb841, 0xb7fb, 0xb842, 0xdee2, 0xe2e6, 0xe2e8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb840, 0x003f, 0x003f, 0xe2e3, 0xbacc, 0xe2e9, 0xbacd, - 0xe2e7, 0xe2e2, 0xe2e5, 0xe2ea, 0xbacb, 0xe2e4, 0x003f, 0xbd4e, - 0xe6bf, 0xe6be, 0x003f, 0xbd51, 0xbd4f, 0xe6bc, 0xbd4d, 0xe6bd, - 0x003f, 0xbd50, 0x003f, 0x003f, 0x003f, 0xea7d, 0x003f, 0xeaa1, - 0x003f, 0xea7e, 0xea76, 0xea7a, 0xea79, 0xea77, 0xbf66, 0xbf67, - 0xbf65, 0xea78, 0xea7b, 0xea7c, 0x003f, 0xbf68, 0x003f, 0xc140, - 0xeda3, 0x003f, 0xc0fc, 0xed7b, 0xc0fe, 0xc141, 0x003f, 0x003f, - 0xc0fd, 0xeda2, 0xed7c, 0xc0fb, 0xeda1, 0xed7a, 0xed7e, 0xed7d, - 0x003f, 0x003f, 0xf055, 0xc2a4, 0xc2a5, 0xc2a2, 0x003f, 0xc2a3, - 0x003f, 0x003f, 0xf054, 0x003f, 0xf27b, 0x003f, 0x003f, 0xc3a9, - 0x003f, 0xf279, 0xf27a, 0x003f, 0xf474, 0xf477, 0xf475, 0xf476, - 0xf5e0, 0x003f, 0x003f, 0xc4ef, 0xf7eb, 0xf8b4, 0x003f, 0xc5f7, - 0xf8f8, 0xf8f9, 0xc666, 0xa5d9, 0xace1, 0x003f, 0xdac3, 0x003f, - 0xdee3, 0x003f, 0xa5da, 0xa86f, 0x003f, 0xaabe, 0x003f, 0xcfe8, - 0xcfe9, 0xaf78, 0x003f, 0x003f, 0xdac4, 0xb575, 0xb847, 0xc142, - 0xeda4, 0xf27c, 0xf478, 0xa5db, 0x003f, 0x003f, 0x003f, 0xcda1, - 0xcd7a, 0xcd7c, 0xcd7e, 0xcd7d, 0xcd7b, 0xaabf, 0x003f, 0x003f, - /* 0x7800 .. 0x78ff */ - 0x003f, 0x003f, 0xace2, 0xcff2, 0x003f, 0xcfed, 0xcfea, 0x003f, - 0x003f, 0xcff1, 0x003f, 0x003f, 0xace4, 0xace5, 0xcff0, 0xcfef, - 0xcfee, 0xcfeb, 0xcfec, 0xcff3, 0xace3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xaf7c, 0x003f, 0xafa4, - 0xafa3, 0xd2e1, 0xd2db, 0xd2d9, 0x003f, 0xafa1, 0xd6b9, 0xaf7a, - 0xd2de, 0xd2e2, 0xd2e4, 0xd2e0, 0xd2da, 0xafa2, 0xd2df, 0xd2dd, - 0xaf79, 0xd2e5, 0xafa5, 0xd2e3, 0xaf7d, 0xd2dc, 0x003f, 0xaf7e, - 0xaf7b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb2b9, 0x003f, 0xd6ba, 0x003f, 0x003f, - 0xd6b3, 0xd6b5, 0xd6b7, 0x003f, 0xd6b8, 0xd6b6, 0xb2ba, 0x003f, - 0xd6bb, 0x003f, 0xd6b4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xdac8, 0xb576, 0xdad0, 0x003f, - 0xdac5, 0x003f, 0xdad1, 0x003f, 0xdac6, 0xdac7, 0x003f, 0x003f, - 0xdacf, 0xdace, 0xdacb, 0xb2b8, 0xb577, 0xdac9, 0xdacc, 0xb578, - 0xdacd, 0xdaca, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdeee, 0x003f, 0xdef2, 0xb84e, 0x003f, 0xe2f0, 0xb851, - 0xdef0, 0xf9d6, 0x003f, 0xdeed, 0xdee8, 0xdeea, 0xdeeb, 0xdee4, - 0x003f, 0xb84d, 0x003f, 0x003f, 0xb84c, 0x003f, 0xb848, 0xdee7, - 0x003f, 0xb84f, 0x003f, 0xb850, 0xdee6, 0xdee9, 0xdef1, 0xb84a, - 0xb84b, 0xdeef, 0xdee5, 0x003f, 0x003f, 0x003f, 0xe2f2, 0xbad0, - 0xe2f4, 0xdeec, 0xe2f6, 0xbad4, 0xe2f7, 0xe2f3, 0x003f, 0xbad1, - 0xe2ef, 0xbad3, 0xe2ec, 0xe2f1, 0xe2f5, 0xe2ee, 0x003f, 0x003f, - 0xb849, 0x003f, 0xe2eb, 0xbad2, 0xe2ed, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbd54, 0xe6c1, 0xbd58, 0x003f, 0xbd56, 0x003f, - 0x003f, 0xbacf, 0x003f, 0xe6c8, 0xe6c9, 0xbd53, 0x003f, 0x003f, - 0xe6c7, 0xe6ca, 0xbd55, 0xbd52, 0xe6c3, 0xe6c0, 0xe6c5, 0xe6c2, - 0xbd59, 0xe6c4, 0x003f, 0x003f, 0xe6c6, 0xbd57, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbf6a, 0xeaa8, 0x003f, 0xeaa2, 0xeaa6, 0xeaac, - 0xeaad, 0xeaa9, 0xeaaa, 0xeaa7, 0x003f, 0xeaa4, 0x003f, 0xbf6c, - 0xbf69, 0xeaa3, 0xeaa5, 0x003f, 0xbf6b, 0xeaab, 0x003f, 0xc146, - 0x003f, 0x003f, 0xedaa, 0xeda5, 0xc145, 0x003f, 0x003f, 0xc143, - 0x003f, 0xedac, 0xc144, 0xeda8, 0xeda9, 0xeda6, 0xedad, 0xf056, - /* 0x7900 .. 0x79ff */ - 0x003f, 0xc147, 0xeda7, 0x003f, 0xedae, 0xedab, 0x003f, 0x003f, - 0x003f, 0xf05a, 0x003f, 0x003f, 0xf057, 0x003f, 0xc2a6, 0x003f, - 0xf05b, 0xf05d, 0xf05c, 0xf058, 0xf059, 0x003f, 0x003f, 0xf2a3, - 0x003f, 0xc3aa, 0x003f, 0xf27e, 0xf2a2, 0xf27d, 0xf2a4, 0x003f, - 0x003f, 0xf2a1, 0x003f, 0xf47a, 0xf47d, 0xf479, 0xc471, 0xf47b, - 0xf47c, 0xf47e, 0xc472, 0xc474, 0xc473, 0xf5e1, 0x003f, 0xf5e3, - 0x003f, 0xf5e2, 0x003f, 0x003f, 0x003f, 0xf6f6, 0x003f, 0x003f, - 0xf8b5, 0xf8fa, 0xa5dc, 0x003f, 0x003f, 0xcb72, 0xaac0, 0xcda3, - 0xaac1, 0xaac2, 0xcda2, 0x003f, 0xcff8, 0xcff7, 0xace6, 0xace9, - 0xace8, 0xace7, 0xcff4, 0xcff6, 0xcff5, 0x003f, 0x003f, 0xd2e8, - 0xafa7, 0xd2ec, 0xd2eb, 0xd2ea, 0xd2e6, 0xafa6, 0xafaa, 0xafad, - 0x003f, 0x003f, 0xafae, 0xd2e7, 0xd2e9, 0xafac, 0xafab, 0xafa9, - 0xafa8, 0xd6c2, 0x003f, 0xd6c0, 0xd6bc, 0xb2bb, 0x003f, 0xd6bd, - 0xb2bc, 0xd6be, 0xd6bf, 0xd6c1, 0x003f, 0xb2bd, 0x003f, 0x003f, - 0xdad5, 0x003f, 0xdad4, 0xdad3, 0xdad2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdef6, 0xb852, 0x003f, 0xdef3, 0xdef5, 0x003f, 0xb853, - 0x003f, 0xb854, 0xdef4, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe341, 0x003f, 0xe2f9, 0xe2fa, 0x003f, 0xbad7, 0xbad5, 0xbad6, - 0xe343, 0x003f, 0xe342, 0xe2fe, 0xe2fd, 0xe2fc, 0xe2fb, 0xe340, - 0xe2f8, 0x003f, 0xe6cb, 0xe6d0, 0xe6ce, 0x003f, 0x003f, 0x003f, - 0xe6cd, 0xe6cc, 0xe6cf, 0x003f, 0xeaae, 0x003f, 0xbf6d, 0xc148, - 0xedb0, 0x003f, 0xc149, 0xedaf, 0xf05f, 0xf05e, 0xc2a7, 0x003f, - 0xf2a5, 0xc3ab, 0xf4a1, 0xc5a1, 0xf6f7, 0x003f, 0xf8b7, 0xf8b6, - 0xc9a8, 0xacea, 0xaceb, 0xd6c3, 0x003f, 0xb856, 0xa5dd, 0xa872, - 0xa871, 0xa870, 0x003f, 0x003f, 0x003f, 0xcda4, 0x003f, 0x003f, - 0xaac4, 0xaac3, 0x003f, 0xacee, 0x003f, 0xcffa, 0xcffd, 0xcffb, - 0x003f, 0xacec, 0xaced, 0x003f, 0x003f, 0xcff9, 0xcffc, 0x003f, - 0xafb5, 0x003f, 0x003f, 0x003f, 0xd2f3, 0xd2f5, 0xd2f4, 0xafb2, - 0xd2ef, 0x003f, 0x003f, 0xafb0, 0xafaf, 0x003f, 0xafb3, 0xafb1, - 0x003f, 0xafb4, 0xd2f2, 0xd2ed, 0xd2ee, 0xd2f1, 0xd2f0, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd6c6, 0xd6c7, - 0xd6c5, 0x003f, 0xd6c4, 0xb2be, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7a00 .. 0x7aff */ - 0xb57d, 0x003f, 0xdad6, 0xdad8, 0xdada, 0xb57c, 0x003f, 0x003f, - 0xb57a, 0x003f, 0xdad7, 0xb57b, 0xdad9, 0xb579, 0x003f, 0x003f, - 0xdf41, 0xdef7, 0xdefa, 0xdefe, 0xb85a, 0xdefc, 0x003f, 0xdefb, - 0xdef8, 0xdef9, 0xb858, 0xdf40, 0xb857, 0x003f, 0xb85c, 0xb85b, - 0xb859, 0x003f, 0xdefd, 0x003f, 0x003f, 0x003f, 0xe349, 0x003f, - 0xe348, 0x003f, 0x003f, 0xe344, 0x003f, 0x003f, 0xbad8, 0xe347, - 0xe346, 0xbad9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xbd5e, - 0x003f, 0xe6d2, 0x003f, 0xbd5f, 0xbd5b, 0xbd5d, 0x003f, 0xbd5a, - 0xbd5c, 0x003f, 0x003f, 0x003f, 0xeaaf, 0x003f, 0xbf70, 0xeab1, - 0xeab0, 0x003f, 0xe345, 0xbf72, 0xbf71, 0xbf6e, 0xbf6f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xedb5, 0x003f, 0xedb3, 0xc14a, - 0xedb4, 0x003f, 0xedb6, 0xedb2, 0xedb1, 0x003f, 0x003f, 0xf060, - 0xc2aa, 0xc2a8, 0xc2a9, 0x003f, 0x003f, 0x003f, 0x003f, 0xf2a6, - 0xf2a7, 0xc3ad, 0x003f, 0xc3ac, 0xf4a3, 0xf4a4, 0xf4a2, 0x003f, - 0xf6f8, 0xf6f9, 0x003f, 0x003f, 0xa5de, 0xca48, 0xa873, 0x003f, - 0xcda5, 0xaac6, 0xaac5, 0xcda6, 0x003f, 0x003f, 0xd040, 0xacef, - 0xcffe, 0xacf0, 0x003f, 0x003f, 0xafb6, 0xd2f8, 0xd2f6, 0xd2fc, - 0xafb7, 0xd2f7, 0xd2fb, 0xd2f9, 0xd2fa, 0x003f, 0x003f, 0xd6c8, - 0xd6ca, 0x003f, 0xb2bf, 0x003f, 0xd6c9, 0xb2c0, 0xb5a2, 0xb5a1, - 0xb57e, 0xdadb, 0x003f, 0x003f, 0x003f, 0x003f, 0xdf44, 0xb85d, - 0xb85e, 0x003f, 0xdf43, 0xdf42, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe34a, 0xbadb, 0xbada, 0xe34b, 0xe34c, 0x003f, 0xbd61, 0xbd60, - 0x003f, 0xeab5, 0xe6d3, 0xe6d5, 0xe6d4, 0xeab4, 0xeab2, 0xeab6, - 0xeab3, 0x003f, 0xbf73, 0x003f, 0x003f, 0x003f, 0xedb7, 0xc14b, - 0xedb8, 0xedb9, 0x003f, 0x003f, 0xc2ab, 0xc2ac, 0x003f, 0xc475, - 0x003f, 0x003f, 0xc5d1, 0xa5df, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xd041, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd2fd, 0xafb8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3ba, - 0xb3b9, 0x003f, 0x003f, 0xb5a4, 0xdadd, 0xb5a3, 0xdadc, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdf45, 0x003f, 0xbadc, 0xe34d, 0xbadd, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc476, 0xf4a5, - 0x003f, 0xa6cb, 0xaac7, 0xcda7, 0x003f, 0xacf2, 0x003f, 0xacf1, - /* 0x7b00 .. 0x7bff */ - 0xd042, 0xd043, 0x003f, 0x003f, 0xd340, 0xd342, 0xafb9, 0x003f, - 0xd344, 0xd347, 0xd345, 0x003f, 0x003f, 0x003f, 0xd346, 0xd343, - 0xd2fe, 0xafba, 0xd348, 0xd341, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd6d3, 0xb2c6, 0xd6dc, 0xb2c3, 0x003f, 0xd6d5, 0xb2c7, 0x003f, - 0xb2c1, 0x003f, 0xd6d0, 0xd6dd, 0xd6d1, 0xd6ce, 0xb2c5, 0x003f, - 0xb2c2, 0x003f, 0xd6d4, 0xd6d7, 0xb2c4, 0xd6d8, 0xb2c8, 0xd6d9, - 0xd6cf, 0xd6d6, 0xd6da, 0xd6d2, 0xd6cd, 0xd6cb, 0x003f, 0x003f, - 0xd6db, 0x003f, 0x003f, 0xdadf, 0x003f, 0x003f, 0x003f, 0x003f, - 0xdae4, 0x003f, 0x003f, 0x003f, 0xdae0, 0xdae6, 0xb5a7, 0xd6cc, - 0xdae1, 0xb5a5, 0xdade, 0xb5ac, 0xdae2, 0xb5ab, 0xdae3, 0xb5ad, - 0xb5a8, 0xb5ae, 0xb5a9, 0x003f, 0xb5aa, 0x003f, 0xb5a6, 0x003f, - 0xdae5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb861, 0xdf50, 0x003f, 0xdf53, 0xdf47, 0xdf4c, 0xdf46, 0xb863, - 0x003f, 0xdf4a, 0x003f, 0x003f, 0x003f, 0xdf48, 0xb862, 0x003f, - 0xdf4f, 0xdf4e, 0xdf4b, 0xdf4d, 0xdf49, 0xbae1, 0xdf52, 0xb85f, - 0xdf51, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xe35d, 0x003f, 0xbae8, 0xe358, 0x003f, 0xbae7, - 0xe34e, 0x003f, 0xe350, 0xbae0, 0xe355, 0xe354, 0xe357, 0xbae5, - 0xe352, 0xe351, 0x003f, 0x003f, 0xbae4, 0xbadf, 0xe353, 0xbae2, - 0xe359, 0xe35b, 0x003f, 0xe356, 0xe34f, 0xbae3, 0x003f, 0x003f, - 0xbd69, 0xbade, 0x003f, 0x003f, 0xe35c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe6d9, 0xbd62, 0x003f, 0xe6db, - 0x003f, 0xbd63, 0x003f, 0x003f, 0xbd65, 0xe6de, 0x003f, 0xe6d6, - 0xbae6, 0xe6dc, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6d8, 0x003f, - 0xb860, 0xbd68, 0x003f, 0x003f, 0xbd64, 0x003f, 0xbd66, 0xbd67, - 0x003f, 0xbf76, 0xe6dd, 0xe6d7, 0xbd6a, 0x003f, 0xe6da, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeac0, 0xeabb, 0x003f, 0x003f, - 0xeac5, 0xbf74, 0xeabd, 0xbf78, 0xeac3, 0xeaba, 0xeab7, 0xeac6, - 0xc151, 0xbf79, 0xeac2, 0xeab8, 0xbf77, 0xeabc, 0xbf7b, 0xeab9, - 0xeabe, 0xbf7a, 0xeac1, 0xeac4, 0x003f, 0x003f, 0x003f, 0x003f, - 0xedcb, 0xedcc, 0xedbc, 0xedc3, 0xedc1, 0x003f, 0x003f, 0xc14f, - 0xedc8, 0xeabf, 0x003f, 0xedbf, 0x003f, 0xedc9, 0xc14e, 0xedbe, - /* 0x7c00 .. 0x7cff */ - 0xedbd, 0xedc7, 0xedc4, 0xedc6, 0x003f, 0xedba, 0xedca, 0xc14c, - 0x003f, 0xedc5, 0xedce, 0xedc2, 0xc150, 0xc14d, 0xedc0, 0xedbb, - 0xedcd, 0xbf75, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf063, 0x003f, 0x003f, 0xf061, 0xf067, 0xc2b0, 0xf065, - 0xf064, 0xc2b2, 0xf06a, 0xc2b1, 0x003f, 0xf06b, 0xf068, 0xc2ae, - 0xf069, 0xf062, 0xc2af, 0xc2ad, 0xf2ab, 0xf066, 0x003f, 0x003f, - 0xf06c, 0x003f, 0x003f, 0xf2a8, 0x003f, 0x003f, 0x003f, 0xc3b2, - 0xc3b0, 0xf2aa, 0x003f, 0xf2ac, 0xf2a9, 0xc3b1, 0xc3ae, 0xc3af, - 0xc3b3, 0x003f, 0x003f, 0xc478, 0x003f, 0xf4aa, 0x003f, 0xf4a9, - 0xf4a7, 0xf4a6, 0xf4a8, 0x003f, 0xc477, 0xc479, 0x003f, 0x003f, - 0xc4f0, 0x003f, 0x003f, 0xf5e5, 0xf5e4, 0x003f, 0x003f, 0xf6fa, - 0x003f, 0xf6fc, 0xf6fe, 0xf6fd, 0xf6fb, 0x003f, 0x003f, 0xc5a3, - 0xc5a2, 0x003f, 0x003f, 0xc5d3, 0xc5d2, 0xc5d4, 0xf7ed, 0xf7ec, - 0x003f, 0xf8fb, 0xf8b8, 0xf8fc, 0xc658, 0x003f, 0xc659, 0xf96d, - 0x003f, 0x003f, 0xc67e, 0xa6cc, 0x003f, 0xcda8, 0x003f, 0x003f, - 0xd045, 0xd046, 0xd044, 0x003f, 0x003f, 0xacf3, 0x003f, 0xd047, - 0xd048, 0xd049, 0x003f, 0x003f, 0xd349, 0xd34f, 0x003f, 0x003f, - 0xd34d, 0xafbb, 0xd34b, 0x003f, 0xd34c, 0xd34e, 0x003f, 0x003f, - 0x003f, 0xd34a, 0xb2c9, 0x003f, 0xd6de, 0xb2cb, 0xd6e0, 0xb2ca, - 0xd6df, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdae8, 0xb5af, - 0x003f, 0xdaea, 0xdae7, 0xd6e1, 0x003f, 0xb5b0, 0x003f, 0xf9db, - 0xdae9, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdf56, - 0x003f, 0xb864, 0xdf54, 0xb865, 0xdf55, 0xb866, 0x003f, 0x003f, - 0x003f, 0xbae9, 0xe361, 0xe35e, 0xe360, 0xbaea, 0xbaeb, 0xe35f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6df, 0x003f, 0x003f, - 0xe6e0, 0x003f, 0xbd6b, 0xe6e2, 0xe6e1, 0x003f, 0xa261, 0x003f, - 0xeaca, 0xeacb, 0xeac7, 0x003f, 0xeac8, 0xbf7c, 0xbf7d, 0xeac9, - 0x003f, 0xc157, 0x003f, 0x003f, 0xc153, 0xc158, 0xc154, 0xc156, - 0xc152, 0x003f, 0xc155, 0x003f, 0x003f, 0x003f, 0x003f, 0xc2b3, - 0xedcf, 0x003f, 0xf2ae, 0x003f, 0xf2ad, 0x003f, 0xf4ab, 0xc47a, - 0xc47b, 0xf741, 0xf5e6, 0x003f, 0xf740, 0x003f, 0xf8fd, 0xf9a4, - 0xa6cd, 0x003f, 0x003f, 0xa874, 0x003f, 0xcda9, 0xaac8, 0x003f, - /* 0x7d00 .. 0x7dff */ - 0xacf6, 0xd04c, 0xacf4, 0xd04a, 0xacf9, 0xacf5, 0xacfa, 0xacf8, - 0xd04b, 0xacf7, 0xafbf, 0xafbe, 0xd35a, 0xafc7, 0xd353, 0xd359, - 0xafc3, 0xd352, 0xd358, 0xd356, 0xafc2, 0xafc4, 0xd355, 0xafbd, - 0xd354, 0xafc8, 0xafc5, 0xafc9, 0xafc6, 0xd351, 0xd350, 0xd357, - 0xafc0, 0xafbc, 0xafc1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd6f0, 0xd6e9, 0x003f, 0xb5b5, 0xd6e8, 0x003f, 0xb2cf, 0xb2d6, - 0xb2d3, 0xb2d9, 0xb2d8, 0xb2d4, 0x003f, 0xd6e2, 0xd6e5, 0x003f, - 0xd6e4, 0xb2d0, 0xd6e6, 0xd6ef, 0xb2d1, 0xd6e3, 0xd6ec, 0xd6ed, - 0xb2d2, 0xd6ea, 0xb2d7, 0xb2cd, 0xb2d5, 0xd6e7, 0xb2cc, 0xd6eb, - 0x003f, 0x003f, 0xd6ee, 0x003f, 0x003f, 0x003f, 0xdafb, 0xdaf2, - 0xb5b2, 0xdaf9, 0xdaf6, 0xdaee, 0xdaf7, 0xb5b4, 0xdaef, 0x003f, - 0xdaeb, 0x003f, 0x003f, 0xb86c, 0xdaf4, 0x003f, 0xb5b1, 0xdafa, - 0x003f, 0xb5b8, 0xb5ba, 0xdaed, 0x003f, 0x003f, 0xb5b9, 0xdaf0, - 0xb5b3, 0xdaf8, 0xdaf1, 0xdaf5, 0x003f, 0xdaf3, 0xb5b6, 0xdaec, - 0xb5bb, 0xb2ce, 0xb5b7, 0xb5bc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb868, 0xdf5d, 0xdf5f, 0xdf61, 0xdf65, 0x003f, 0xdf5b, - 0xdf59, 0xb86a, 0x003f, 0xdf60, 0xdf64, 0xdf5c, 0xdf58, 0x003f, - 0xdf57, 0x003f, 0x003f, 0x003f, 0xdf62, 0xdf5a, 0xdf5e, 0xb86b, - 0x003f, 0xb869, 0xdf66, 0xb867, 0xdf63, 0x003f, 0xe372, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbaee, 0xe36a, 0xbd78, 0xe374, - 0xbaf1, 0xe378, 0xbaf7, 0xe365, 0x003f, 0x003f, 0xe375, 0xe362, - 0x003f, 0xe377, 0xe366, 0x003f, 0xbafe, 0xbafb, 0xe376, 0xe370, - 0xbaed, 0xbaf5, 0xbaf4, 0x003f, 0xbaf3, 0xbaf9, 0x003f, 0xe363, - 0xbafa, 0xe371, 0xbaf6, 0xbaec, 0xe373, 0xbaef, 0xbaf0, 0xbaf8, - 0xe368, 0xe367, 0xe364, 0x003f, 0xe36c, 0xe369, 0xe36d, 0xbafd, - 0x003f, 0xe379, 0xbaf2, 0xe36e, 0xe36f, 0x003f, 0xe36b, 0x003f, - 0x003f, 0x003f, 0xbafc, 0x003f, 0x003f, 0x003f, 0x003f, 0xe6e7, - 0xbd70, 0xbd79, 0xbd75, 0xe6e4, 0x003f, 0xbd72, 0xbd76, 0xe6f0, - 0xbd6c, 0xe6e8, 0x003f, 0xbd74, 0x003f, 0x003f, 0xe6eb, 0xe6e6, - 0xbd73, 0xbd77, 0xe6e5, 0x003f, 0xbd71, 0x003f, 0xe6ef, 0xbd6e, - 0xe6ee, 0xe6ed, 0xbd7a, 0xe572, 0xbd6d, 0x003f, 0xe6ec, 0xe6e3, - 0x003f, 0xbd7b, 0xe6ea, 0xbd6f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7e00 .. 0x7eff */ - 0x003f, 0x003f, 0x003f, 0xe6e9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbfa2, 0xbfa7, 0xbf7e, 0xead8, 0xeacf, 0xeadb, 0xead3, 0xead9, - 0xbfa8, 0xbfa1, 0xeacc, 0xead2, 0xeadc, 0xead5, 0xeada, 0xeace, - 0x003f, 0x003f, 0xead6, 0xbfa3, 0xead4, 0xbfa6, 0xbfa5, 0xead0, - 0xead1, 0xeacd, 0xead7, 0xbfa4, 0xeade, 0xeadd, 0x003f, 0x003f, - 0x003f, 0xedda, 0xedd6, 0xc15f, 0x003f, 0xedd0, 0xc159, 0xc169, - 0xeddc, 0xc161, 0xc15d, 0xedd3, 0xc164, 0xc167, 0xedde, 0xc15c, - 0xedd5, 0xc165, 0xede0, 0xeddd, 0xedd1, 0xc160, 0xc15a, 0xc168, - 0xedd8, 0xc163, 0xedd2, 0xc15e, 0xeddf, 0xc162, 0xc15b, 0xedd9, - 0xc166, 0xedd7, 0x003f, 0x003f, 0xeddb, 0x003f, 0x003f, 0x003f, - 0xf06e, 0xf074, 0xc2b9, 0xf077, 0xc2b4, 0xc2b5, 0xf06f, 0xf076, - 0xf071, 0xc2ba, 0xc2b7, 0x003f, 0xf06d, 0x003f, 0xc2b6, 0xf073, - 0xf075, 0xc2b8, 0xf072, 0xf070, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf2b8, 0xc3b7, 0xc3b8, 0xc3b4, 0x003f, 0xc3b5, 0x003f, 0xf2b4, - 0xf2b2, 0x003f, 0xf2b6, 0xc3ba, 0xf2b7, 0xf2b0, 0xf2af, 0xf2b3, - 0xf2b1, 0xc3b6, 0xf2b5, 0xf4ac, 0xc47e, 0xc47d, 0xf4ad, 0x003f, - 0xf4af, 0xf4ae, 0xc4a1, 0x003f, 0x003f, 0x003f, 0xf5eb, 0xf5e8, - 0xf5e9, 0x003f, 0xf5e7, 0xf5ea, 0xc4f2, 0xf5ec, 0x003f, 0xc4f1, - 0x003f, 0xf742, 0x003f, 0xc5d5, 0xc5d7, 0xf7ee, 0xc5d6, 0xf8b9, - 0xf940, 0xf942, 0xf8fe, 0xf941, 0xc66c, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x7f00 .. 0x7fff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa6ce, 0x003f, - 0xacfb, 0xd26f, 0xafca, 0x003f, 0x003f, 0xb2da, 0xdafc, 0xdafd, - 0x003f, 0x003f, 0x003f, 0xeadf, 0xc16a, 0xede1, 0x003f, 0x003f, - 0xc2bb, 0x003f, 0xf2ba, 0xf2b9, 0xc4a2, 0xf5ed, 0x003f, 0xf743, - 0xc5f8, 0xca49, 0x003f, 0x003f, 0xaac9, 0xa875, 0x003f, 0x003f, - 0xd04d, 0x003f, 0x003f, 0xd360, 0xd35b, 0xd35f, 0xd35d, 0xafcb, - 0xd35e, 0xd35c, 0x003f, 0xd6f1, 0x003f, 0xdafe, 0xdb40, 0xdf69, - 0xdf6a, 0xb86e, 0xb86f, 0xdf68, 0xdf6b, 0xdf67, 0xb86d, 0x003f, - 0xbb40, 0x003f, 0xb870, 0xe37a, 0x003f, 0xbd7c, 0xe6f1, 0xbd7d, - 0x003f, 0xbfa9, 0xeae2, 0xeae0, 0xeae1, 0xede4, 0xede3, 0xede2, - 0x003f, 0x003f, 0x003f, 0xf2bb, 0x003f, 0xc3b9, 0xf2bc, 0xf744, - 0xc5f9, 0xf8ba, 0xa6cf, 0xaacb, 0xaaca, 0xd04f, 0xacfc, 0x003f, - 0x003f, 0xd04e, 0xd362, 0x003f, 0xafcc, 0xd6f2, 0xd361, 0x003f, - 0x003f, 0x003f, 0xb2dc, 0xd6f5, 0xd6f3, 0xd6f4, 0xb2db, 0x003f, - 0xdb42, 0xdb43, 0xdb41, 0x003f, 0xb873, 0xdf6d, 0xdf6c, 0xdf6e, - 0xb872, 0xb871, 0x003f, 0x003f, 0xe6f2, 0xe6f4, 0x003f, 0xbd7e, - 0xe6f3, 0xeae3, 0xbfaa, 0xf079, 0x003f, 0xf078, 0xc3bb, 0xf2bd, - 0xc3bd, 0xc3bc, 0xf4b0, 0xf5ee, 0xc4f3, 0xa6d0, 0xd050, 0xacfd, - 0xd365, 0xafce, 0xd364, 0xd363, 0x003f, 0xafcd, 0x003f, 0xd6fb, - 0x003f, 0xd6fd, 0xd6f6, 0xd6f7, 0xb2dd, 0xd6f8, 0xb2de, 0xd6fc, - 0xd6f9, 0xd6fa, 0xb2df, 0x003f, 0xb5be, 0xb5bf, 0x003f, 0xdb44, - 0x003f, 0x003f, 0x003f, 0xdf6f, 0xdf70, 0x003f, 0xe37e, 0xbb43, - 0xbb41, 0xbb42, 0xe37b, 0xe37c, 0x003f, 0xe37d, 0xe6f9, 0x003f, - 0xe6fa, 0xbda1, 0xe6f7, 0xe6f6, 0xe6f8, 0xe6f5, 0xbfad, 0xeae4, - 0xbfab, 0xbfac, 0xede6, 0xc16b, 0xede5, 0xefa8, 0x003f, 0xf07a, - 0xf07b, 0xc2bc, 0x003f, 0xc2bd, 0xc16c, 0xf2be, 0xf2bf, 0xf4b1, - /* 0x8000 .. 0x80ff */ - 0xc4a3, 0xa6d1, 0x003f, 0xa6d2, 0xacfe, 0xaacc, 0xafcf, 0xd051, - 0x003f, 0x003f, 0x003f, 0xb5c0, 0xa6d3, 0xad41, 0xd052, 0xd053, - 0xad40, 0xad42, 0xa6d4, 0x003f, 0xd054, 0xafd1, 0xd366, 0xafd3, - 0xafd0, 0xafd2, 0x003f, 0xd741, 0xb2e0, 0x003f, 0xd740, 0xd6fe, - 0x003f, 0xdf71, 0x003f, 0x003f, 0xe3a1, 0x003f, 0xbda2, 0x003f, - 0xbfae, 0xeae6, 0xeae5, 0x003f, 0xede7, 0x003f, 0x003f, 0x003f, - 0xf5ef, 0x003f, 0x003f, 0xa6d5, 0xcb73, 0xcdaa, 0xad43, 0xd055, - 0x003f, 0xd368, 0x003f, 0x003f, 0x003f, 0xafd4, 0xd367, 0xafd5, - 0x003f, 0x003f, 0x003f, 0xd743, 0x003f, 0x003f, 0xb2e2, 0xd742, - 0xd744, 0x003f, 0xb2e1, 0x003f, 0x003f, 0x003f, 0x003f, 0xdb46, - 0xdb47, 0xdb45, 0xb5c1, 0x003f, 0x003f, 0x003f, 0xb874, 0x003f, - 0xb875, 0x003f, 0xbb45, 0x003f, 0xe3a3, 0xe3a2, 0xbb44, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe6fb, 0x003f, 0x003f, 0xe6fc, - 0x003f, 0x003f, 0x003f, 0x003f, 0xeae7, 0x003f, 0x003f, 0xc170, - 0xc16f, 0xc16d, 0xc16e, 0xc171, 0x003f, 0xf07c, 0xc2bf, 0xc2be, - 0xf2c0, 0xf4b2, 0x003f, 0x003f, 0x003f, 0xc5a5, 0xc5a4, 0xa6d6, - 0x003f, 0x003f, 0xd1fb, 0x003f, 0xb877, 0xb5c2, 0xb876, 0xbb46, - 0x003f, 0xa6d7, 0xc9a9, 0xa6d8, 0xa6d9, 0x003f, 0x003f, 0xcdab, - 0xcb76, 0x003f, 0xcb77, 0xa877, 0x003f, 0xcb74, 0xa876, 0x003f, - 0xa879, 0xcb75, 0xa87b, 0xa87a, 0xcb78, 0xa878, 0x003f, 0x003f, - 0x003f, 0xaad1, 0xaacf, 0xcdad, 0x003f, 0xaace, 0x003f, 0x003f, - 0x003f, 0xaad3, 0xaad5, 0xaad2, 0x003f, 0xcdb0, 0xcdac, 0xaad6, - 0x003f, 0xaad0, 0xa87c, 0x003f, 0xaad4, 0xcdaf, 0x003f, 0x003f, - 0xcdae, 0x003f, 0xaacd, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd05b, 0xad47, 0xad48, 0xd05d, 0x003f, 0xd057, - 0xd05a, 0xd063, 0xd061, 0x003f, 0xad49, 0xd067, 0xad4c, 0xd064, - 0xd05c, 0xd059, 0x003f, 0x003f, 0xdb49, 0xd062, 0xad44, 0xd065, - 0xd056, 0xd05f, 0xad46, 0xad4b, 0xd060, 0xad4f, 0xad4d, 0x003f, - 0xd058, 0xad4a, 0x003f, 0xd05e, 0xad4e, 0xad45, 0xd066, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xafda, 0x003f, 0xafe3, - 0xafd8, 0xafd6, 0xd36a, 0xafde, 0xafdb, 0xd36c, 0x003f, 0x003f, - 0xafdd, 0xd36b, 0xd369, 0xd36e, 0xafe2, 0xafe0, 0xdb48, 0x003f, - /* 0x8100 .. 0x81ff */ - 0xd36f, 0xd36d, 0xafd7, 0x003f, 0x003f, 0xafd9, 0xafdc, 0x003f, - 0xafdf, 0x003f, 0xafe1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd74e, 0xb2e4, 0x003f, - 0xd745, 0xd747, 0x003f, 0xd748, 0x003f, 0xd750, 0xd74c, 0xd74a, - 0x003f, 0xd74d, 0xd751, 0xb2e5, 0xb2e9, 0xd746, 0x003f, 0xd74f, - 0x003f, 0xb2e7, 0x003f, 0xb2e6, 0xd74b, 0xd749, 0x003f, 0xb2e3, - 0xb2e8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb5c8, 0xdb51, 0x003f, 0x003f, 0xdb4f, 0xb5ca, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdb4a, 0xdfa1, 0x003f, 0xb5c9, 0xdb4e, - 0x003f, 0x003f, 0xdb4b, 0xb5c5, 0xb5cb, 0xdb50, 0xb5c7, 0xdb4d, - 0xbb47, 0xb5c6, 0xdb4c, 0xb5cc, 0xb5c4, 0xb5c3, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdf77, 0xdf75, 0x003f, 0xdf7b, 0x003f, - 0xdf73, 0xdfa2, 0xdf78, 0x003f, 0xdf72, 0xb87b, 0xb8a3, 0xdf7d, - 0x003f, 0xdf76, 0x003f, 0xb87e, 0x003f, 0x003f, 0xb87c, 0xdf7e, - 0xb879, 0xb878, 0xdf79, 0xb87d, 0xb5cd, 0x003f, 0xdf7c, 0xdf74, - 0xb87a, 0xb8a1, 0xb8a2, 0x003f, 0x003f, 0x003f, 0x003f, 0xbb4c, - 0xbb48, 0x003f, 0xbb4d, 0xe3a6, 0x003f, 0x003f, 0xe3a5, 0xe3a7, - 0xbb4a, 0xe3a4, 0xbb4b, 0xe3aa, 0xe3a9, 0xe3a8, 0x003f, 0xbb49, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe741, 0x003f, 0xe744, - 0xbda8, 0xe743, 0xbda7, 0xbda3, 0xbda4, 0xbda5, 0xe740, 0xe6fe, - 0xbda6, 0x003f, 0xe742, 0xe6fd, 0x003f, 0x003f, 0xeae9, 0xeaf3, - 0xbfb1, 0xbfb0, 0x003f, 0xeaed, 0xeaef, 0x003f, 0xeaea, 0x003f, - 0xeaee, 0xeae8, 0xeaf1, 0xbfaf, 0xeaf0, 0xeaec, 0x003f, 0xeaf2, - 0x003f, 0xeaeb, 0xc174, 0xede8, 0xedee, 0xc178, 0xc17a, 0xc177, - 0xc176, 0x003f, 0xc175, 0xc173, 0xede9, 0xedec, 0xc172, 0xeded, - 0x003f, 0xc179, 0xedeb, 0x003f, 0xedea, 0xc2c0, 0x003f, 0xc2c1, - 0xf0a1, 0xf07d, 0xf07e, 0x003f, 0x003f, 0xf2c2, 0x003f, 0xf2c1, - 0xc3be, 0xf4b4, 0xc4a4, 0xf4b3, 0x003f, 0xf5f0, 0xf745, 0xc5a6, - 0xf943, 0xf944, 0xc5d8, 0xa6da, 0x003f, 0xaad7, 0xdb52, 0xbb4e, - 0xc17b, 0xedef, 0xa6db, 0x003f, 0xafe5, 0xafe4, 0xdb53, 0x003f, - 0x003f, 0x003f, 0xeaf4, 0xa6dc, 0xad50, 0x003f, 0x003f, 0xdb54, - 0xdb55, 0xdb56, 0xbb4f, 0xbfb2, 0xa6dd, 0x003f, 0xaad8, 0xd068, - /* 0x8200 .. 0x82ff */ - 0xafe6, 0xd370, 0xb2ea, 0x003f, 0xdb57, 0xb8a4, 0x003f, 0xbb50, - 0xbfb3, 0xc17c, 0xc2c2, 0xf4b5, 0xa6de, 0xaad9, 0x003f, 0x003f, - 0xafe7, 0xd752, 0xb5ce, 0x003f, 0xbb51, 0xe3ab, 0xe745, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa6df, 0xb5cf, 0xdfa3, 0xbb52, 0xa6e0, - 0xcdb1, 0xd069, 0xad51, 0x003f, 0x003f, 0xd372, 0x003f, 0x003f, - 0xafea, 0x003f, 0xafe8, 0xafe9, 0xafeb, 0x003f, 0x003f, 0xd371, - 0x003f, 0x003f, 0xd757, 0xd754, 0xd756, 0xb2eb, 0xb2ed, 0xb2ec, - 0xd753, 0xb2ee, 0xd755, 0x003f, 0xdb58, 0xdb59, 0x003f, 0xdb5a, - 0xdfa6, 0x003f, 0xdfa7, 0x003f, 0xdfa5, 0xdfa8, 0x003f, 0xb8a5, - 0x003f, 0xdfa4, 0x003f, 0xbb53, 0x003f, 0x003f, 0xe74a, 0xe746, - 0xe749, 0xe74b, 0xe748, 0xe747, 0x003f, 0xeaf5, 0xeaf6, 0xeaf7, - 0xbfb4, 0xbfb5, 0xedf1, 0xedf0, 0xedf2, 0x003f, 0xf0a3, 0xf0a2, - 0x003f, 0xf2c4, 0x003f, 0xf2c5, 0xf2c3, 0x003f, 0xc4a5, 0x003f, - 0xf4b6, 0xf4b7, 0x003f, 0xf746, 0xf7ef, 0xf8bb, 0xa6e1, 0xa87d, - 0x003f, 0xc17d, 0xa6e2, 0x003f, 0xd758, 0xdb5b, 0x003f, 0xc641, - 0xca4a, 0x003f, 0x003f, 0x003f, 0xca4b, 0xca4d, 0xa6e3, 0xca4e, - 0xca4c, 0x003f, 0x003f, 0xcba2, 0xcba3, 0xcb7b, 0x003f, 0x003f, - 0x003f, 0x003f, 0xcba1, 0xa8a1, 0x003f, 0xa8a2, 0xcb7c, 0xcb7a, - 0xcb79, 0xcb7d, 0xa87e, 0xcb7e, 0xd06a, 0x003f, 0x003f, 0x003f, - 0xcdb6, 0xaadc, 0xcdb5, 0xcdb7, 0x003f, 0xaadb, 0xcdbc, 0xaadf, - 0xcdb2, 0xcdc0, 0xcdc6, 0xaae6, 0xcdc3, 0xaae3, 0x003f, 0xcdb9, - 0xcdbf, 0xcdc1, 0x003f, 0xcdb4, 0xaae2, 0xaadd, 0xcdba, 0xaae4, - 0xaae7, 0xaae1, 0x003f, 0xaada, 0xcdbe, 0xcdb8, 0xcdc5, 0xaae9, - 0xaae5, 0xaae0, 0xcdbd, 0xafec, 0xcdbb, 0xaade, 0xaae8, 0x003f, - 0xcdb3, 0x003f, 0xcdc2, 0xcdc4, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xad62, 0xad5c, 0xad64, 0xad61, 0xd071, 0xd074, 0xad5d, - 0x003f, 0xd06b, 0x003f, 0xad56, 0xad60, 0x003f, 0xad63, 0xad65, - 0xd0a2, 0xd077, 0x003f, 0xad55, 0xd0a1, 0xad59, 0xad57, 0xad52, - 0xd06f, 0x003f, 0xd07e, 0xd073, 0xd076, 0xd0a5, 0x003f, 0xad66, - 0xd07d, 0xad5e, 0xd078, 0xd0a4, 0xd075, 0xd079, 0xd07c, 0x003f, - 0x003f, 0xd06d, 0xd0a3, 0xd07b, 0x003f, 0x003f, 0xd06c, 0x003f, - /* 0x8300 .. 0x83ff */ - 0xd070, 0xad5f, 0xad5a, 0xad53, 0xad58, 0xad54, 0xad67, 0xd06e, - 0xd3a5, 0xad5b, 0x003f, 0x003f, 0xd07a, 0xce41, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3a8, 0xaffa, - 0x003f, 0xd376, 0x003f, 0xd3a3, 0xd37d, 0x003f, 0xd3b2, 0x003f, - 0xd3aa, 0x003f, 0xd37e, 0x003f, 0xd3a9, 0xd378, 0xd37c, 0xd3b5, - 0xaffd, 0xd3ad, 0xd3a4, 0xafed, 0xd3b3, 0xd374, 0x003f, 0xd3ac, - 0x003f, 0xaffc, 0xaff7, 0xd373, 0xaff5, 0xaff4, 0xaff9, 0xd3ab, - 0xaff1, 0xaff8, 0xd072, 0xdb5c, 0xd3a6, 0x003f, 0x003f, 0xd37a, - 0xaffb, 0xd37b, 0xd3a1, 0xaffe, 0xd375, 0xd3af, 0x003f, 0xd3ae, - 0xd3b6, 0xaff3, 0xaff0, 0xd3b4, 0xd3b0, 0xd3a7, 0xd3a2, 0xaff6, - 0xaff2, 0xd377, 0xafee, 0xd3b1, 0xafef, 0x003f, 0xd379, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd75e, 0xd760, 0xd765, 0xd779, 0xb2fc, - 0xb2f2, 0x003f, 0xd75d, 0xb2fd, 0xb2fe, 0xd768, 0xd76f, 0xd775, - 0x003f, 0xd762, 0x003f, 0xd769, 0x003f, 0x003f, 0xb340, 0xd777, - 0xd772, 0xb2fa, 0xb2f8, 0xd76e, 0xd76a, 0xd75c, 0xb2ef, 0xd761, - 0xd759, 0x003f, 0xb2f7, 0xb2f9, 0xd766, 0xd763, 0xb2f4, 0xd773, - 0xb2f1, 0xd764, 0xd77a, 0xd76c, 0x003f, 0xd76b, 0xb2f0, 0x003f, - 0xb2fb, 0x003f, 0xb2f3, 0xd75a, 0xd75f, 0xd770, 0xd776, 0xb341, - 0xd75b, 0xd767, 0xd76d, 0xb2f6, 0x003f, 0x003f, 0xd778, 0xd771, - 0xd774, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb2f5, 0x003f, 0xdb6c, - 0xdb60, 0xb5d7, 0xdb7d, 0xdba7, 0xdbaa, 0xb5d5, 0xdb68, 0xdba3, - 0xdb69, 0xdb77, 0xb5e2, 0xdb73, 0xb5df, 0x003f, 0xdb74, 0xdb5d, - 0x003f, 0xdba4, 0x003f, 0x003f, 0xb5e8, 0xdba1, 0xdb75, 0xdbac, - 0xdb70, 0xdfc8, 0x003f, 0xdbaf, 0xb5e6, 0xdb6e, 0xdb7a, 0xb5e9, - 0xb5d4, 0xdb72, 0xdbad, 0xdb6b, 0xdb64, 0xdb6f, 0x003f, 0xdb63, - 0xdb61, 0xb5d0, 0xdba5, 0xdb6a, 0xdba8, 0x003f, 0xdba9, 0xb5d8, - 0xb5dd, 0xb5d9, 0xb5e1, 0xdb7e, 0xb5da, 0xdb76, 0xdb66, 0x003f, - 0xb5d2, 0xdb5e, 0xdba2, 0xdbab, 0xdb65, 0xb5e0, 0xdbb0, 0xdb71, - /* 0x8400 .. 0x84ff */ - 0x003f, 0xdb6d, 0x003f, 0xb5d1, 0xb5e5, 0x003f, 0xdb7c, 0xb5e7, - 0x003f, 0xdb78, 0xb5dc, 0xb5d6, 0xb5de, 0xb5d3, 0xb5e4, 0xdb79, - 0xdb67, 0xdb7b, 0xdb62, 0xdba6, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdbae, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xdb5f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdfc7, 0x003f, 0xdfdd, 0xb855, 0xdfcc, 0x003f, 0xdfca, - 0xdfb5, 0xb8a9, 0xdfc5, 0xdfd9, 0xdfc1, 0xb8b1, 0xdfd8, 0xdfbf, - 0xb5e3, 0xdfcf, 0xdfc0, 0xdfd6, 0xb8b0, 0xb8a8, 0x003f, 0xdfaa, - 0xdfb2, 0x003f, 0xdfcb, 0xdfc3, 0xdfdc, 0xdfc6, 0xb8b6, 0xdfd7, - 0x003f, 0xb8ad, 0x003f, 0xdfc9, 0xdfd1, 0xdfb6, 0xdfd0, 0x003f, - 0xdfe1, 0xdfb1, 0xdfd2, 0x003f, 0xdfdf, 0x003f, 0xdfab, 0xb5db, - 0x003f, 0xdfb9, 0xdfb8, 0xb8af, 0x003f, 0xdfbc, 0xdfbe, 0xdfcd, - 0xdfde, 0xb8b2, 0x003f, 0xb8b3, 0x003f, 0xdfb0, 0xb8ab, 0xdfb4, - 0xdfda, 0xb8b4, 0x003f, 0xb8ac, 0xb8ae, 0xb8b5, 0xdfe0, 0xdfd3, - 0xdfce, 0x003f, 0x003f, 0xdfbb, 0xdfba, 0xb8aa, 0xdfac, 0xb8a7, - 0xdfc4, 0xdfad, 0xdfc2, 0x003f, 0x003f, 0xdfb7, 0xdfdb, 0x003f, - 0x003f, 0x003f, 0xb8a6, 0x003f, 0x003f, 0x003f, 0xdfb3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfaf, 0xdfd5, 0xdfae, - 0xbb60, 0xe3d3, 0x003f, 0x003f, 0xe3c2, 0x003f, 0x003f, 0xe3ac, - 0xe3ca, 0xbb58, 0xe3bb, 0xe3c5, 0xbb5b, 0xe3be, 0xbb59, 0xe3af, - 0xe3cd, 0xe3ae, 0xe3c1, 0x003f, 0xe3ad, 0x003f, 0x003f, 0xe3bf, - 0xe3c8, 0xe3c6, 0xe3ba, 0xe3b5, 0xe3b3, 0x003f, 0xe3b4, 0xe3c7, - 0xe3d2, 0xe3bc, 0xbb5a, 0x003f, 0xe3b7, 0x003f, 0xe3cb, 0x003f, - 0xbb5d, 0xe3b6, 0xe3b0, 0xe3c0, 0xbb61, 0x003f, 0x003f, 0xbb55, - 0xbb5e, 0xe3b8, 0xe3b2, 0x003f, 0xbb57, 0xdfd4, 0xbb56, 0xe3c3, - 0x003f, 0xbb54, 0xbb63, 0xbb5c, 0xe3c4, 0xe3b9, 0xe3b1, 0xe3cc, - 0xe3bd, 0xbb62, 0xe3d0, 0xbb5f, 0xe3cf, 0x003f, 0xe3c9, 0xe3ce, - 0x003f, 0x003f, 0x003f, 0xe3d1, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe773, - 0xe774, 0xe767, 0xe766, 0xe762, 0xbdb4, 0x003f, 0xbdac, 0xe776, - 0xe775, 0xdfa9, 0xe75f, 0xe763, 0xe75d, 0x003f, 0xe770, 0xe761, - 0x003f, 0xe777, 0xe75a, 0xe758, 0xe764, 0xe76e, 0xe769, 0xbdb6, - /* 0x8500 .. 0x85ff */ - 0xe74f, 0x003f, 0xe76d, 0x003f, 0x003f, 0x003f, 0xbdb7, 0xdfbd, - 0xe75b, 0xe752, 0xe755, 0xe77b, 0xe75c, 0xe753, 0xe751, 0xe74e, - 0x003f, 0xbdb0, 0xe765, 0xbdaf, 0xbdb3, 0xe760, 0xe768, 0xbda9, - 0xe778, 0xe77c, 0xbdab, 0x003f, 0xe757, 0xe76b, 0xe76f, 0xe754, - 0xe779, 0xbdb2, 0x003f, 0xbdb1, 0xe74c, 0xbdb5, 0xe772, 0xe756, - 0xe76a, 0xe750, 0xe75e, 0xe759, 0xbdad, 0xbdae, 0xe76c, 0xe77d, - 0xe77a, 0xe771, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xe74d, 0x003f, 0xbdaa, 0xeb49, 0x003f, - 0xeb40, 0xeb43, 0x003f, 0xbfbb, 0xeb45, 0xeaf9, 0xeb41, 0xeb47, - 0xbfb8, 0xbfbc, 0xbfb6, 0x003f, 0x003f, 0xeafb, 0xeb4c, 0x003f, - 0x003f, 0xeb46, 0x003f, 0xeafc, 0xeb55, 0xeb4f, 0xeaf8, 0xee46, - 0xeafe, 0xbfb7, 0x003f, 0xeb4a, 0x003f, 0xeb54, 0xbfbf, 0x003f, - 0xeb51, 0xeafd, 0xeb44, 0xeb48, 0xeb42, 0xeb56, 0xeb53, 0xeb50, - 0xbfb9, 0xbfba, 0xbfbe, 0xeafa, 0xeb57, 0xbfbd, 0xeb4d, 0x003f, - 0x003f, 0xeb4b, 0x003f, 0x003f, 0x003f, 0xeb4e, 0xee53, 0xee40, - 0xee45, 0xee52, 0xee44, 0xedfb, 0xee41, 0x003f, 0xc1a2, 0x003f, - 0xedf4, 0xee4d, 0xee4f, 0xedf3, 0xc1a1, 0xee51, 0xee49, 0xc1a8, - 0xee50, 0xee42, 0xc1aa, 0xedf9, 0xeb52, 0xee4a, 0xee47, 0xedf5, - 0xee55, 0xc1a4, 0x003f, 0x003f, 0xc1a5, 0xedf7, 0xee48, 0x003f, - 0xee54, 0xee4b, 0xedfd, 0xc1a7, 0xc1a3, 0xee4c, 0xedfe, 0xee56, - 0xedf8, 0xee43, 0xee4e, 0xedfa, 0xedfc, 0x003f, 0xc2cb, 0xedf6, - 0xc1a9, 0xc2c4, 0xc17e, 0x003f, 0x003f, 0x003f, 0x003f, 0xc1a6, - 0xc2c8, 0xf0b3, 0x003f, 0xf0a9, 0xf0a4, 0xf0aa, 0xf0b4, 0xf0b8, - 0xf0b7, 0xc2ca, 0xc2c9, 0x003f, 0x003f, 0xf0ab, 0xf0b9, 0xf0ae, - 0xf0a6, 0x003f, 0xf0a8, 0xf0a7, 0xf0ad, 0xf0b2, 0xf0a5, 0xf0ac, - 0xf0b1, 0xc2c7, 0x003f, 0xf0af, 0x003f, 0xc2c5, 0xf0b0, 0xc2c3, - 0xc2c6, 0xf2d5, 0xf0b5, 0x003f, 0x003f, 0xc3c2, 0x003f, 0xf2cd, - 0xf2d1, 0xf2c9, 0xf2cc, 0x003f, 0xf2d4, 0xc3c0, 0xf2d9, 0xf2d2, - 0x003f, 0xf2ca, 0xf2da, 0xf2d3, 0xc3c3, 0xc3c4, 0xf2d7, 0x003f, - 0xf2cb, 0xc3bf, 0xc3c1, 0xf2c6, 0xf2ce, 0xf2c8, 0x003f, 0xf2d8, - 0xf2d6, 0xf2c7, 0xf2cf, 0x003f, 0x003f, 0x003f, 0xf4be, 0xc3c5, - 0xf2d0, 0xc4a7, 0xc4a9, 0xc4a6, 0x003f, 0xf4c3, 0xf4bb, 0xf4b9, - /* 0x8600 .. 0x86ff */ - 0xf4bd, 0xf4ba, 0x003f, 0x003f, 0xf4bf, 0xf4c1, 0xc4aa, 0xc4ac, - 0x003f, 0xf4c0, 0xc4ad, 0xc4ab, 0xf4c2, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc4a8, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc4f4, - 0xf5f1, 0xf5f7, 0xc4f6, 0xf4bc, 0xf5f6, 0x003f, 0xf5fd, 0xf5f4, - 0xf5fb, 0xf5fa, 0xf4b8, 0xf5f5, 0xf0b6, 0xf5fe, 0xf5f3, 0xf5f8, - 0x003f, 0xf5fc, 0xf5f2, 0x003f, 0xf74a, 0xc4f5, 0xf5f9, 0x003f, - 0x003f, 0xf7f4, 0xf74b, 0xf749, 0xf747, 0xf748, 0xf74c, 0x003f, - 0xc5d9, 0xf7f2, 0xf7f0, 0xf7f5, 0xf7f3, 0x003f, 0xf7f6, 0xc5da, - 0xf7f1, 0x003f, 0x003f, 0xf8bc, 0x003f, 0x003f, 0xf945, 0xf946, - 0xf947, 0x003f, 0x003f, 0xf9c7, 0xf9bd, 0xca4f, 0xaaea, 0x003f, - 0xad68, 0x003f, 0xd3b8, 0xd3b7, 0xb040, 0xb342, 0xd77c, 0x003f, - 0x003f, 0xd77b, 0x003f, 0xb5ea, 0xb8b8, 0x003f, 0xb8b7, 0xb8b9, - 0x003f, 0xe3d4, 0xe77e, 0xeb58, 0xeb5a, 0xeb59, 0x003f, 0xc1ab, - 0xee57, 0xf0ba, 0xf9a5, 0xa6e4, 0x003f, 0xcdc9, 0xcdca, 0xcdc8, - 0xcdc7, 0xaaeb, 0x003f, 0xd0a9, 0xd0a7, 0x003f, 0x003f, 0xd0a6, - 0x003f, 0xad69, 0xad6b, 0xad6a, 0xd0a8, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xd3c4, 0xd3c1, 0xd3bf, - 0x003f, 0x003f, 0xb041, 0xd3c2, 0xb046, 0xd3bc, 0xd3cb, 0x003f, - 0xd3cd, 0xd3bd, 0x003f, 0xb043, 0xd3ce, 0xd3c9, 0xd3bb, 0xd3c0, - 0xd3ca, 0xd3c6, 0xd3c3, 0x003f, 0xb048, 0xd3cc, 0xd3be, 0x003f, - 0x003f, 0xd3c7, 0xd3b9, 0xb047, 0xb044, 0xd3c5, 0x003f, 0xd3c8, - 0xd3ba, 0xb045, 0xb042, 0x003f, 0x003f, 0x003f, 0x003f, 0xb34c, - 0xd7a5, 0xb34b, 0x003f, 0xd7a8, 0xd7ab, 0xb348, 0xb346, 0xd77e, - 0xd7a9, 0xd7a7, 0xd7a4, 0xd7ac, 0xd7ad, 0xd7af, 0xd7b0, 0xd77d, - 0xb345, 0xd7a2, 0xd7a1, 0xd7ae, 0xb347, 0xd7a3, 0xb349, 0xb344, - 0xd7a6, 0xb34d, 0x003f, 0xb34a, 0xd7aa, 0x003f, 0x003f, 0x003f, - 0xb5f1, 0xdbbf, 0x003f, 0xdbb4, 0xb5ee, 0x003f, 0xdfe7, 0xdbbd, - 0xdbb1, 0xb5ec, 0xdbb6, 0xb5ef, 0xdbba, 0xdbb8, 0xb5f2, 0xb5eb, - 0x003f, 0x003f, 0xdbb2, 0xdbb5, 0xb5f0, 0x003f, 0xdbb3, 0x003f, - 0xdbbe, 0xdbbc, 0xdbb7, 0xdbb9, 0xdbbb, 0xb5ed, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdfe8, 0xdfee, 0xdfe4, - 0xdfea, 0xb8ba, 0xdfe6, 0xb8c0, 0x003f, 0x003f, 0xb8bf, 0x003f, - /* 0x8700 .. 0x87ff */ - 0xb8be, 0xdfed, 0xb8c1, 0xb8c2, 0xdfe3, 0xdff0, 0xb8c3, 0xb8bd, - 0xb8bc, 0xdfec, 0xb8c4, 0xdfe2, 0xdfe5, 0xdfef, 0xdfeb, 0x003f, - 0x003f, 0xe3f4, 0xe3e9, 0xb8bb, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbb6a, 0xe3dd, 0xe3f2, 0xe3de, 0xbb65, 0x003f, 0xe3db, 0x003f, - 0xe3e4, 0xe3dc, 0xbb67, 0xe3d6, 0xe3f1, 0xbb68, 0xe3ee, 0xe3ef, - 0xe3d7, 0xbb6d, 0xe3e6, 0x003f, 0xe3e0, 0xe3e7, 0xe3da, 0x003f, - 0xe3f3, 0xe3eb, 0xe3e5, 0xe3d5, 0xbb69, 0xe3ec, 0x003f, 0xbb6c, - 0xe3f0, 0x003f, 0xe3ea, 0xbb66, 0xe3e8, 0x003f, 0xe3e2, 0xbb64, - 0xe3d9, 0xe3e1, 0xe3ed, 0xe3df, 0x003f, 0x003f, 0xe3e3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xbdc1, 0xdfe9, 0xe7b2, 0xe7bb, - 0xe7b1, 0xe7ad, 0xe7aa, 0xbdc2, 0xe7a8, 0xbb6b, 0xe7a1, 0xbdc0, - 0xe7a7, 0xbdbf, 0xe7ac, 0xe7a9, 0xe7b9, 0xe7b4, 0xe7ae, 0xe7b3, - 0xbdbb, 0xe7ab, 0xe7be, 0xe7a2, 0xe7a3, 0xe7ba, 0xbdbc, 0xe7bf, - 0xbdbe, 0xe7c0, 0xe7b0, 0xe3d8, 0xe7b6, 0xe7af, 0xe7b8, 0xe7b5, - 0x003f, 0x003f, 0x003f, 0xe7a6, 0xbdb9, 0xe7bd, 0xbdba, 0xe7a4, - 0xbdbd, 0xeb64, 0xe7b7, 0xe7bc, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeb61, 0xbdb8, 0xbfc0, 0xeb6b, 0xeb67, 0x003f, 0xeb65, - 0xeb60, 0xeb6f, 0x003f, 0x003f, 0x003f, 0xbfc4, 0x003f, 0xeb5c, - 0xeb68, 0xeb69, 0xeb5f, 0xeb5e, 0xeb6c, 0x003f, 0xeb62, 0xeb5d, - 0xeb63, 0x003f, 0xeb6e, 0xeb5b, 0xeb6d, 0xeb6a, 0xbfc2, 0xbfc1, - 0x003f, 0x003f, 0xbfc3, 0xeb66, 0xf0cb, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xee59, 0xc1b1, 0xee5d, 0xee5a, 0xee61, 0xee67, - 0xee5c, 0x003f, 0xee70, 0xc1ae, 0xee6a, 0xee5f, 0xee6b, 0xee66, - 0xee6d, 0xee5e, 0xc1b3, 0xc1b2, 0xee60, 0xee6e, 0xee58, 0xee6c, - 0xc1ac, 0x003f, 0xee64, 0xee63, 0xee68, 0xee5b, 0xc1b0, 0x003f, - 0xc1b4, 0xee62, 0xee69, 0xc1b5, 0xee65, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc1ad, 0xc1af, 0xf0c7, 0xf0c5, 0x003f, 0x003f, 0xf0cc, - 0xf0c9, 0xf0cd, 0x003f, 0xf0be, 0xf0c6, 0xf0d1, 0xee6f, 0xf0c2, - 0xc2cf, 0xe7a5, 0xf0bd, 0xf0ca, 0xf0c4, 0xf0c1, 0xf0bc, 0xf0bb, - 0xf0d0, 0x003f, 0xf0c0, 0xf0bf, 0xc2cd, 0xf0c8, 0x003f, 0xc2cc, - 0x003f, 0x003f, 0xc2ce, 0xf0c3, 0xf0cf, 0x003f, 0xf2de, 0xf2df, - 0x003f, 0xc3c9, 0xf2dc, 0xc3c6, 0xf2e4, 0x003f, 0xc3ca, 0xf2e6, - /* 0x8800 .. 0x88ff */ - 0xf2db, 0xf0ce, 0xf2e8, 0xf2dd, 0x003f, 0xc3c7, 0xf2e3, 0x003f, - 0xf2e5, 0xf2e0, 0xf2e7, 0xf2e2, 0xf2e1, 0xc3c8, 0x003f, 0x003f, - 0xf4c5, 0xf4c6, 0x003f, 0xf4c8, 0xc4ae, 0xc4af, 0xf4c9, 0xf4c7, - 0x003f, 0xf4c4, 0x003f, 0xf642, 0xf645, 0xf641, 0x003f, 0xc4fa, - 0xf643, 0xc4f9, 0xc4f8, 0xc4f7, 0xf644, 0xf751, 0xf74f, 0x003f, - 0xf74e, 0xf640, 0xf750, 0xf646, 0xf74d, 0x003f, 0xf7f9, 0xf7d7, - 0xf7f7, 0xc5db, 0xf7f8, 0xf7fa, 0x003f, 0xf8bf, 0xc5fa, 0xf8be, - 0xf8bd, 0xc5fb, 0x003f, 0xc65a, 0xf96e, 0xf9a7, 0xf9a6, 0xf9a8, - 0xa6e5, 0xd0aa, 0x003f, 0xd3cf, 0xd3d0, 0x003f, 0x003f, 0x003f, - 0xdbc0, 0x003f, 0xf647, 0xf8c0, 0xa6e6, 0xad6c, 0xd0ab, 0x003f, - 0x003f, 0x003f, 0xd7b1, 0xb34e, 0x003f, 0xdbc2, 0xdbc1, 0xb5f3, - 0x003f, 0xb8c5, 0xe7c1, 0xbdc3, 0x003f, 0xbdc4, 0x003f, 0x003f, - 0x003f, 0xbfc5, 0xc5fc, 0xa6e7, 0x003f, 0x003f, 0x003f, 0xd0ac, - 0xaaed, 0xd0ae, 0xd0ad, 0xad6d, 0x003f, 0xd3d1, 0x003f, 0xd3d8, - 0xb049, 0xd3d6, 0xd3d4, 0x003f, 0xd3db, 0xd3d2, 0xd3d3, 0xb04a, - 0x003f, 0xb04e, 0x003f, 0x003f, 0xd3dc, 0xb04d, 0xd3da, 0xd3d7, - 0xd3d5, 0xb04b, 0xb04c, 0xd3d9, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb350, 0xd7b2, 0x003f, 0xb355, 0xd7c2, 0xb354, 0xd7c4, 0x003f, - 0x003f, 0xd7b8, 0xb352, 0xd7c3, 0x003f, 0xd7b3, 0xb353, 0xd7bf, - 0xd7bb, 0xd7bd, 0xd7b7, 0xd7be, 0x003f, 0x003f, 0xb34f, 0xd7ba, - 0x003f, 0xd7b9, 0xd7b5, 0x003f, 0xd7c0, 0x003f, 0x003f, 0xd7bc, - 0xd7b4, 0x003f, 0xd7b6, 0xb351, 0xd7c1, 0x003f, 0x003f, 0x003f, - 0x003f, 0xb5f6, 0xdbcd, 0x003f, 0x003f, 0x003f, 0xdbc9, 0xdbcb, - 0xdbc6, 0xdbc5, 0xdbc3, 0x003f, 0xdbca, 0xdbcc, 0xdbc8, 0x003f, - 0xdbc7, 0xb5f4, 0xb5f5, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xdbcf, 0xb8cd, 0xdff2, 0xdff8, 0xdff3, 0xdff4, 0xf9d8, - 0xdff9, 0x003f, 0xb8cf, 0x003f, 0xb8c7, 0xb8ce, 0xdff1, 0xdbc4, - 0xb8ca, 0xb8c8, 0xdff7, 0xdff6, 0xb8c9, 0xb8cb, 0xdff5, 0xb8c6, - 0x003f, 0xb8cc, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe3f6, - 0xbb74, 0x003f, 0x003f, 0xe442, 0xe441, 0x003f, 0xe3fb, 0xbb76, - 0xe440, 0xe3f7, 0xe3f8, 0xbb6e, 0xbb70, 0x003f, 0xe3fd, 0xe3f5, - 0xbb72, 0xbb71, 0xe3f9, 0xe3fe, 0xe3fc, 0xbb73, 0xe3fa, 0x003f, - /* 0x8900 .. 0x89ff */ - 0x003f, 0xdbce, 0xbb6f, 0x003f, 0x003f, 0xe7c2, 0xe7c9, 0xbdc6, - 0x003f, 0xe7cd, 0xbdca, 0xe7c5, 0xe7c3, 0x003f, 0xe7cc, 0x003f, - 0xbdc5, 0xe7cb, 0xbdc7, 0xbdc8, 0xe7c4, 0xbdc9, 0xe7ca, 0xe7c6, - 0xe7c7, 0xe7c8, 0xbb75, 0x003f, 0x003f, 0x003f, 0xeb70, 0xeb7c, - 0x003f, 0xbfca, 0xeb77, 0xeb79, 0x003f, 0xbfc8, 0xeb71, 0xeb75, - 0x003f, 0xeb78, 0xbfc6, 0xbfc9, 0xeb7b, 0xeb73, 0xeb74, 0xeb7a, - 0xeb72, 0xeb76, 0xbfc7, 0xee72, 0x003f, 0xee71, 0xc1b7, 0xee77, - 0xc1b9, 0x003f, 0x003f, 0xc1b6, 0xee73, 0xc1ba, 0xee74, 0x003f, - 0x003f, 0xee75, 0xee78, 0x003f, 0xc1b8, 0x003f, 0xf0d6, 0x003f, - 0x003f, 0xf0d9, 0x003f, 0xf0d3, 0xf0d5, 0x003f, 0x003f, 0xf0d4, - 0xf0d7, 0xf0d8, 0xee76, 0xf0d2, 0x003f, 0x003f, 0xc3cd, 0xf2ec, - 0xf2ef, 0xf2f1, 0xf2ea, 0xf2eb, 0xf2ee, 0xf2f0, 0xc3ce, 0xc3cc, - 0xc3cb, 0xf2ed, 0xf2e9, 0xf4ca, 0xc4b0, 0x003f, 0xf4cb, 0x003f, - 0x003f, 0xf649, 0xc4fb, 0xf64b, 0xc4fc, 0xf648, 0xf64a, 0xc5a8, - 0x003f, 0xf752, 0xc5a7, 0xf7fd, 0xf7fc, 0x003f, 0xf7fb, 0x003f, - 0x003f, 0xf948, 0xf949, 0xf94b, 0xf94a, 0x003f, 0xca50, 0xa6e8, - 0x003f, 0xad6e, 0xd7c5, 0xb5f7, 0x003f, 0xdffa, 0xc2d0, 0x003f, - 0xf2f2, 0x003f, 0x003f, 0xa8a3, 0x003f, 0x003f, 0x003f, 0xb357, - 0x003f, 0x003f, 0x003f, 0xb356, 0x003f, 0xdbd0, 0xb5f8, 0xdbd2, - 0xdbd1, 0x003f, 0x003f, 0xdffb, 0xb8d0, 0xe443, 0xe446, 0xe445, - 0x003f, 0xe444, 0xe7ce, 0xe7d0, 0xe7cf, 0x003f, 0xbfcc, 0x003f, - 0x003f, 0x003f, 0xbfcb, 0x003f, 0xc1bb, 0xee79, 0xee7b, 0xee7a, - 0x003f, 0x003f, 0xc2d1, 0x003f, 0x003f, 0x003f, 0xf2f4, 0xf2f3, - 0x003f, 0xf4cc, 0xc4b1, 0x003f, 0x003f, 0xc4fd, 0xf754, 0xf753, - 0xc65b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xa8a4, 0xd0af, 0xad6f, 0xd7c8, 0xd7c6, 0x003f, - 0x003f, 0xd7c7, 0xdbd4, 0xdbd5, 0xe043, 0xdbd3, 0x003f, 0xdffc, - 0xe041, 0xe040, 0xe042, 0xb8d1, 0xdffe, 0xdffd, 0xe044, 0x003f, - 0xe449, 0xe447, 0x003f, 0xe448, 0xe7d3, 0xe7d1, 0x003f, 0x003f, - 0xe7d2, 0xeb7d, 0xee7c, 0xee7d, 0xc2d2, 0x003f, 0xf2f5, 0xf4cd, - 0xc4b2, 0x003f, 0xf64c, 0xf755, 0xc5a9, 0x003f, 0xf7fe, 0xf94c, - /* 0x8a00 .. 0x8aff */ - 0xa8a5, 0x003f, 0xad71, 0xad72, 0xd0b0, 0x003f, 0x003f, 0xd0b1, - 0xad70, 0x003f, 0xb054, 0x003f, 0xb052, 0x003f, 0xb051, 0xb058, - 0xb050, 0xb059, 0xd3dd, 0xb056, 0x003f, 0xb053, 0xb057, 0xb055, - 0xb04f, 0x003f, 0x003f, 0xb35f, 0x003f, 0xb359, 0xd7cc, 0xb35e, - 0x003f, 0x003f, 0xb360, 0xb35a, 0x003f, 0xb35b, 0x003f, 0xd7ca, - 0x003f, 0x003f, 0xb358, 0x003f, 0xd7cb, 0xb35d, 0x003f, 0x003f, - 0xd7c9, 0xb35c, 0x003f, 0x003f, 0xb644, 0x003f, 0xb646, 0x003f, - 0x003f, 0xdbd8, 0xb645, 0xb5f9, 0xb5fd, 0x003f, 0xb8e4, 0xe049, - 0xdbda, 0xb5fe, 0x003f, 0x003f, 0xdbdd, 0xdbde, 0xb643, 0x003f, - 0xdbe0, 0x003f, 0xdbe2, 0x003f, 0xdbe3, 0xdbd7, 0xdbd6, 0xdbe4, - 0xb642, 0xdbe1, 0xdbdf, 0x003f, 0xb640, 0xb5fb, 0xb647, 0xdbdb, - 0xdbdc, 0xdbd9, 0x003f, 0xb641, 0x003f, 0x003f, 0xb5fc, 0x003f, - 0xb5fa, 0xe048, 0xb8df, 0xb8da, 0x003f, 0x003f, 0xb8d5, 0x003f, - 0xb8e5, 0xb8d6, 0x003f, 0xb8d2, 0xb8e1, 0xb8de, 0xb8e0, 0x003f, - 0xb8d7, 0xb8dc, 0xb8d3, 0xb8d4, 0xe050, 0xe04d, 0xe045, 0xe04a, - 0x003f, 0xb8e2, 0xe051, 0xb8e3, 0xb8d9, 0x003f, 0x003f, 0xe047, - 0x003f, 0xe04f, 0xe04b, 0xe04e, 0xe04c, 0xb8dd, 0xe046, 0xb8d8, - 0x003f, 0x003f, 0x003f, 0xe44c, 0xbb78, 0xbb7b, 0x003f, 0xe44e, - 0x003f, 0xbba5, 0xe44d, 0xbb7d, 0x003f, 0xbdcf, 0xe44f, 0x003f, - 0xbba4, 0xe44b, 0xbba6, 0x003f, 0x003f, 0x003f, 0xbb79, 0x003f, - 0xb8db, 0xbb7c, 0x003f, 0xbb7a, 0xbb7e, 0xbba2, 0xbb77, 0xbba7, - 0xbba3, 0x003f, 0xbba1, 0xe44a, 0x003f, 0x003f, 0x003f, 0x003f, - 0xbdd6, 0x003f, 0xbdd2, 0x003f, 0x003f, 0x003f, 0xbdd9, 0x003f, - 0xe7d6, 0xbdda, 0xe7e2, 0xe7db, 0xbdcb, 0xe7e3, 0xe7dd, 0xbdd5, - 0xe7de, 0x003f, 0xbdd4, 0xe7e1, 0xbdce, 0xe7df, 0xe7d5, 0xbdcd, - 0xebaa, 0xbdd3, 0x003f, 0xbdd0, 0x003f, 0xbdd8, 0x003f, 0xe7d4, - 0x003f, 0xe7d8, 0xbdcc, 0xe7d7, 0xe7d9, 0xe7da, 0xbdd7, 0xe7dc, - 0xe7e0, 0xe7e4, 0x003f, 0xbddb, 0xbfd2, 0xeba5, 0xebab, 0xeba8, - 0xeb7e, 0xebac, 0xeba1, 0x003f, 0xeba7, 0x003f, 0xbfcd, 0xbfd3, - 0xebad, 0x003f, 0x003f, 0xbfcf, 0x003f, 0xbfd9, 0xbfd4, 0xebaf, - 0xeba9, 0xbfd0, 0xeba2, 0xbfda, 0xeba3, 0xeba4, 0xbfdb, 0xbfd8, - 0xbdd1, 0x003f, 0xbfce, 0xebb0, 0xbfdc, 0x003f, 0xbfd5, 0xebae, - /* 0x8b00 .. 0x8bff */ - 0xbfd1, 0xbfd6, 0xbfd7, 0x003f, 0xc1c3, 0xeea4, 0xeead, 0xeeaa, - 0xeeac, 0x003f, 0xc1c0, 0xeea5, 0x003f, 0xeeab, 0xc1bc, 0xeea7, - 0xc1c4, 0xeea3, 0xeea8, 0xeeaf, 0xeba6, 0xeea9, 0xeea2, 0xc1bd, - 0xeea1, 0xc1be, 0xeeb0, 0xc1bf, 0xeeae, 0xc1c2, 0xee7e, 0x003f, - 0xc1c1, 0x003f, 0xeea6, 0xf0dc, 0xf0ea, 0xf0e5, 0xf0e7, 0xf0db, - 0xc2d3, 0x003f, 0xf0da, 0xc2d6, 0xc2d5, 0x003f, 0xf0e9, 0xf0e1, - 0xf0de, 0xf0e4, 0x003f, 0xf0dd, 0x003f, 0xf0df, 0xf0e8, 0xf0e6, - 0x003f, 0xc2d4, 0xf0ed, 0xf0eb, 0xf0e2, 0xf0ec, 0xf0e3, 0x003f, - 0xf2f9, 0xc3cf, 0xf341, 0x003f, 0x003f, 0xf64f, 0xc3d6, 0xf0e0, - 0xf2f7, 0xc3d2, 0xf2f8, 0xf2fd, 0x003f, 0x003f, 0xc3d4, 0xc3d5, - 0xf2f6, 0xf340, 0xf342, 0xf2fa, 0xf2fc, 0xf2fe, 0xf2fb, 0xf343, - 0xc3d1, 0xc3d7, 0xc3d3, 0x003f, 0xc3d0, 0xf4d0, 0x003f, 0xc4b7, - 0xf4ce, 0x003f, 0x003f, 0xf4d2, 0x003f, 0xf4d3, 0xc4b5, 0xf4d4, - 0xf4d1, 0x003f, 0xf4cf, 0xc4b8, 0xc4b4, 0xf4d5, 0x003f, 0xc4b6, - 0xc4b3, 0x003f, 0x003f, 0x003f, 0xc4fe, 0x003f, 0x003f, 0xc540, - 0xf64e, 0xf64d, 0xf650, 0xf651, 0x003f, 0xc541, 0xf756, 0xf75b, - 0xc5aa, 0x003f, 0xf758, 0x003f, 0xf757, 0xf75a, 0xf759, 0x003f, - 0xf843, 0x003f, 0xc5dc, 0xf842, 0xf840, 0x003f, 0xf841, 0x003f, - 0x003f, 0x003f, 0xc5fe, 0xc5fd, 0xf8c1, 0xf8c2, 0xc640, 0x003f, - 0xf94d, 0xf94e, 0xc667, 0x003f, 0xc66d, 0x003f, 0xf9a9, 0xf9c8, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x8c00 .. 0x8cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xa8a6, - 0x003f, 0xd7cd, 0x003f, 0xd7ce, 0xe052, 0xe450, 0xe7e5, 0xc1c6, - 0x003f, 0xc1c5, 0xf0ee, 0xf344, 0x003f, 0xf844, 0xa8a7, 0xd3de, - 0xb05a, 0xb361, 0xe054, 0xe053, 0xbddc, 0xe7e6, 0xbddd, 0xeeb1, - 0xc2d7, 0x003f, 0x003f, 0x003f, 0xc676, 0xa8a8, 0xcdcb, 0xd3df, - 0x003f, 0x003f, 0xb362, 0x003f, 0xd7cf, 0xd7d0, 0x003f, 0xdbe5, - 0x003f, 0xb648, 0xb8e6, 0x003f, 0xe056, 0xe055, 0xe057, 0x003f, - 0xe451, 0xe452, 0xbba8, 0xbfdd, 0xbdde, 0xbfde, 0x003f, 0xeeb5, - 0xeeb2, 0xeeb4, 0xeeb3, 0xc1c7, 0x003f, 0xf0ef, 0xf346, 0xf345, - 0xcba4, 0xb05c, 0xb05b, 0xd3e0, 0x003f, 0xd7d1, 0x003f, 0x003f, - 0xdbe7, 0xdbe6, 0xb649, 0x003f, 0xe059, 0xe05a, 0xe058, 0x003f, - 0x003f, 0xb8e8, 0xb8e7, 0x003f, 0xbbaa, 0xbba9, 0x003f, 0xe7e7, - 0xebb3, 0xebb1, 0xebb2, 0xbfdf, 0xeeb7, 0xeeb6, 0x003f, 0xf0f2, - 0xf0f1, 0xf0f0, 0xf347, 0x003f, 0xf9aa, 0xa8a9, 0xad73, 0x003f, - 0xad74, 0xb05d, 0xb05e, 0xd3e2, 0xd3e1, 0xd7d2, 0x003f, 0xb368, - 0xb366, 0xb363, 0xb367, 0xb365, 0xb364, 0x003f, 0x003f, 0xb64a, - 0xdbea, 0x003f, 0xb8ed, 0xb64c, 0xb651, 0xdbec, 0xb653, 0xb652, - 0xb655, 0xdbeb, 0xdbe8, 0xb64f, 0xb64b, 0xb64d, 0xdbe9, 0xb654, - 0xb650, 0xb64e, 0xb8ef, 0xb8ee, 0xb8ec, 0xb8f0, 0x003f, 0xb8ea, - 0xb8eb, 0x003f, 0xb8e9, 0x003f, 0xe05b, 0x003f, 0x003f, 0xe454, - 0x003f, 0xbbac, 0xbbad, 0xbbab, 0x003f, 0xe453, 0x003f, 0xe455, - 0x003f, 0xe7ea, 0xe7ec, 0x003f, 0xbde7, 0xe7ed, 0xbde0, 0xe7e9, - 0xbddf, 0xbde9, 0xbde5, 0xbde6, 0xbde2, 0xe7e8, 0xbde1, 0xe7ee, - 0xe7eb, 0x003f, 0xbde8, 0x003f, 0xbde3, 0xbde4, 0xebb5, 0x003f, - 0xebb7, 0xebb6, 0x003f, 0xebb8, 0xbfe0, 0xebb4, 0x003f, 0x003f, - 0xc1cb, 0xeeb8, 0xc1c8, 0xc1cc, 0xc1ca, 0xc1c9, 0xf0f3, 0x003f, - /* 0x8d00 .. 0x8dff */ - 0xf0f6, 0x003f, 0xf0f5, 0x003f, 0xf0f4, 0xc2d8, 0xf348, 0xf349, - 0xc3d8, 0xf34a, 0xc3d9, 0x003f, 0x003f, 0xc4ba, 0x003f, 0xc4b9, - 0xf652, 0x003f, 0x003f, 0xc542, 0xf653, 0xf75c, 0xc5ab, 0xc5ac, - 0x003f, 0xf845, 0x003f, 0xc642, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xa8aa, 0x003f, 0xb36a, 0xb369, - 0xe05c, 0xe05d, 0x003f, 0xbbae, 0xebb9, 0xbdea, 0xebba, 0xeeb9, - 0xa8ab, 0x003f, 0xd0b2, 0xad76, 0xad75, 0x003f, 0xd3e3, 0xb05f, - 0xd3e4, 0xd7d5, 0x003f, 0xd7d4, 0x003f, 0xd7d3, 0x003f, 0x003f, - 0xdbee, 0xb658, 0x003f, 0x003f, 0xdbed, 0xb657, 0x003f, 0x003f, - 0x003f, 0xdbef, 0xb656, 0x003f, 0xe05f, 0xe062, 0xe060, 0xe061, - 0xe065, 0xe05e, 0xe066, 0xe063, 0xe064, 0xbbb0, 0xe456, 0x003f, - 0x003f, 0xbbaf, 0x003f, 0xe7f2, 0xe7f0, 0x003f, 0x003f, 0xbdeb, - 0xe7ef, 0xe7f1, 0x003f, 0xbdec, 0x003f, 0xebbb, 0x003f, 0xebbc, - 0xc1cd, 0x003f, 0xf34c, 0xf34e, 0xf34b, 0xf34d, 0xf4d6, 0xf654, - 0x003f, 0x003f, 0xf96f, 0xa8ac, 0xad77, 0xd3e5, 0xd3e7, 0xd3e6, - 0x003f, 0xd7d8, 0xb36c, 0x003f, 0xd7d6, 0x003f, 0xb36b, 0xd7d9, - 0x003f, 0xd7da, 0xd7d7, 0x003f, 0x003f, 0xdbfb, 0xb660, 0xdbf3, - 0xdbf9, 0x003f, 0x003f, 0xb65b, 0xb65e, 0xdbf2, 0xb659, 0xdbf6, - 0xe06c, 0xb65d, 0x003f, 0xdbf1, 0x003f, 0xdbf7, 0xdbf4, 0xdbfa, - 0xdbf0, 0xdbf8, 0xb65c, 0xb65f, 0xdbf5, 0xb65a, 0x003f, 0xb8f2, - 0xe068, 0xb8f1, 0xe06f, 0xe06e, 0xb8f8, 0x003f, 0xb8f9, 0xe070, - 0xb8f3, 0xe06d, 0xb8f7, 0xe072, 0xe069, 0x003f, 0xe06b, 0xb8f4, - 0xe067, 0xe06a, 0xe071, 0xb8f5, 0xe073, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb8f6, 0x003f, 0xbbb1, 0xe45b, 0xe461, 0xe459, - /* 0x8e00 .. 0x8eff */ - 0xe462, 0x003f, 0xe458, 0xe45d, 0xe463, 0xe460, 0xe45f, 0xe45e, - 0x003f, 0xe457, 0xe45c, 0x003f, 0x003f, 0xe45a, 0x003f, 0xbdf1, - 0xbdee, 0xe7fb, 0xe841, 0xe843, 0xe840, 0xe7f8, 0xe7fa, 0xe845, - 0xe842, 0xe7fc, 0xe846, 0xe7f9, 0xe844, 0xbdef, 0xbdf5, 0xbdf3, - 0xe7f3, 0xbdf4, 0xbdf0, 0xe7f4, 0xe7f6, 0xe7f5, 0xe7fd, 0xe7fe, - 0x003f, 0xbdf2, 0x003f, 0xbded, 0x003f, 0x003f, 0xe7f7, 0x003f, - 0xebc6, 0xbfe2, 0x003f, 0xebbd, 0xbfe3, 0xbfe6, 0xebc2, 0x003f, - 0xebbf, 0xbfe5, 0x003f, 0x003f, 0xebc3, 0xebc4, 0xebbe, 0xebc7, - 0xebc0, 0xebc5, 0xbfe4, 0x003f, 0xbfe1, 0xebc1, 0x003f, 0xeebf, - 0xc1d0, 0xc1ce, 0xc1d1, 0xc1cf, 0xeebe, 0xeebb, 0xeeba, 0x003f, - 0xeebd, 0x003f, 0x003f, 0xeebc, 0xf145, 0xc2de, 0xf0fb, 0xf0fa, - 0x003f, 0xc2d9, 0xf141, 0xf140, 0xf0f7, 0xf143, 0xf0fc, 0xc2dd, - 0xf0f9, 0xf142, 0xf0f8, 0xc2da, 0xc2dc, 0xf0fd, 0xc2db, 0xf0fe, - 0x003f, 0xf144, 0xf352, 0x003f, 0xc3de, 0xf34f, 0x003f, 0xf353, - 0x003f, 0x003f, 0xc3db, 0xf351, 0xc3e0, 0x003f, 0xc3dd, 0x003f, - 0xf350, 0x003f, 0xc3df, 0xf354, 0xc3da, 0x003f, 0x003f, 0x003f, - 0x003f, 0xc4bc, 0xc4be, 0x003f, 0xf4d9, 0xc4bd, 0xf4d7, 0xc3dc, - 0xf4d8, 0xc4bb, 0xc543, 0xc545, 0xf656, 0xc544, 0xf655, 0x003f, - 0xf761, 0xc5ad, 0xf760, 0xc5ae, 0xf75e, 0xf75d, 0xf762, 0xf763, - 0xf846, 0x003f, 0xf75f, 0x003f, 0x003f, 0xf8c6, 0xf8c3, 0xf8c4, - 0xf8c5, 0xc65c, 0x003f, 0xf951, 0xf950, 0xf94f, 0xf970, 0x003f, - 0xf9be, 0xf9ab, 0xc66e, 0xa8ad, 0xb060, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb8fa, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbdf6, 0x003f, 0x003f, 0xebc8, 0x003f, 0x003f, - 0xc2df, 0x003f, 0xf355, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xf9ac, 0xa8ae, 0xaaee, 0xad79, 0xad78, 0x003f, 0xb063, - 0x003f, 0xd3e8, 0xb061, 0xd3e9, 0xb062, 0x003f, 0x003f, 0xd7df, - 0xd7db, 0x003f, 0x003f, 0xb36d, 0xd7de, 0xd7dd, 0xd7dc, 0xb36e, - 0xd7e0, 0xd7e1, 0x003f, 0x003f, 0x003f, 0xdc43, 0xdc41, 0xdc45, - 0xdc46, 0xdc4c, 0x003f, 0xdc48, 0xdc4a, 0x003f, 0xdc42, 0xdbfc, - 0x003f, 0xdc49, 0x003f, 0x003f, 0xdc4b, 0xdc44, 0xdc47, 0xdbfd, - 0xb662, 0xdc40, 0xdbfe, 0xb661, 0xb663, 0x003f, 0xb8fd, 0xe075, - /* 0x8f00 .. 0x8fff */ - 0xe077, 0xe076, 0xe07b, 0xb8fb, 0x003f, 0xe078, 0xe074, 0xe079, - 0xe07a, 0xb8fc, 0xb8fe, 0xe07c, 0x003f, 0xe467, 0xe466, 0x003f, - 0xe464, 0xe465, 0xbbb3, 0xbbb5, 0xbbb2, 0xbbb4, 0xe84d, 0xe84e, - 0xe849, 0x003f, 0xe84a, 0xbdf8, 0xbdfd, 0xbdf7, 0xbdfe, 0xbdf9, - 0xe84b, 0x003f, 0x003f, 0xe84c, 0xe848, 0xbe40, 0xbdfb, 0x003f, - 0x003f, 0xbdfa, 0xbdfc, 0x003f, 0xe847, 0x003f, 0xebca, 0xbfe8, - 0x003f, 0x003f, 0xebcc, 0xbfea, 0xebcf, 0xebcb, 0xebc9, 0xebce, - 0xbfe9, 0xebcd, 0x003f, 0xbfe7, 0x003f, 0x003f, 0xc1d3, 0xc1d6, - 0xeec1, 0x003f, 0xc1d4, 0xeec0, 0xc1d2, 0xc1d5, 0xf146, 0xf147, - 0xf148, 0xc2e0, 0x003f, 0xf149, 0x003f, 0xc2e1, 0xc3e2, 0xf358, - 0xf359, 0xf357, 0xf356, 0xf35a, 0xc3e1, 0xf4dd, 0xf4db, 0xf4dc, - 0xf4de, 0xf4da, 0xf4df, 0xf658, 0x003f, 0xf659, 0xf657, 0xc546, - 0xf764, 0xc5af, 0xf765, 0xf848, 0xf847, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xa8af, 0xb664, 0x003f, 0x003f, 0xb940, - 0x003f, 0x003f, 0x003f, 0xbbb6, 0x003f, 0x003f, 0xbfec, 0x003f, - 0xbfeb, 0x003f, 0x003f, 0x003f, 0x003f, 0xc3e3, 0xc47c, 0xc547, - 0xa8b0, 0xb064, 0xb941, 0x003f, 0xf35b, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xcba6, - 0x003f, 0x003f, 0xa8b1, 0x003f, 0xa8b4, 0xa8b3, 0xa8b2, 0x003f, - 0x003f, 0xcba5, 0x003f, 0xcdcd, 0x003f, 0xcdcf, 0xaaef, 0x003f, - 0x003f, 0xaaf1, 0xcdcc, 0xcdce, 0xaaf0, 0xcdd1, 0xcdd0, 0xcdd2, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xd0b6, 0xd0b4, 0xad7c, 0xd0b3, 0xada3, 0xad7e, 0xad7b, 0x003f, - 0xada4, 0x003f, 0xad7d, 0xada2, 0x003f, 0xada1, 0xd0b5, 0x003f, - 0xad7a, 0x003f, 0x003f, 0x003f, 0xb06a, 0xd3eb, 0xd3f1, 0xb067, - 0xb06e, 0x003f, 0xb069, 0xd3ee, 0xd3f0, 0xb06c, 0xd3ea, 0xd3ed, - /* 0x9000 .. 0x90ff */ - 0xb068, 0xb065, 0xd3ec, 0xb06b, 0xd3ef, 0xb06d, 0xb066, 0x003f, - 0x003f, 0x003f, 0x003f, 0xd7e3, 0xd7e6, 0xb370, 0x003f, 0xb37a, - 0xb376, 0xd7e4, 0x003f, 0x003f, 0xb37e, 0xb377, 0xb37c, 0xb372, - 0x003f, 0xb36f, 0xb371, 0xb37d, 0xd7e5, 0xb375, 0xb378, 0xb374, - 0xb379, 0xd7e7, 0xb37b, 0xb373, 0xd7e2, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xdc4d, 0xb665, 0xdc4f, - 0x003f, 0xb667, 0xb669, 0x003f, 0xdc4e, 0xb666, 0xb66a, 0x003f, - 0xb668, 0x003f, 0x003f, 0x003f, 0xb947, 0xe0a3, 0xb94f, 0xe07e, - 0x003f, 0xb950, 0xb945, 0x003f, 0xe0a1, 0x003f, 0x003f, 0xb94a, - 0x003f, 0xe0a2, 0xb943, 0xb942, 0x003f, 0xb94d, 0xb94c, 0xb94b, - 0xb949, 0xb94e, 0xe07d, 0xb944, 0xb946, 0xb948, 0x003f, 0x003f, - 0xbbb8, 0xbbbb, 0x003f, 0xbbbf, 0xbbb9, 0xbbbe, 0xbbbc, 0x003f, - 0xbbb7, 0x003f, 0xbbbd, 0xbbba, 0x003f, 0x003f, 0x003f, 0xe852, - 0xbe43, 0xbe41, 0x003f, 0xe853, 0x003f, 0xbe44, 0xbe42, 0xe851, - 0xe850, 0x003f, 0xbff0, 0xe84f, 0xbfee, 0xbfed, 0xebd0, 0xbe45, - 0xbfef, 0xebd1, 0xbff2, 0xebd2, 0xbff1, 0xc1d8, 0xeec3, 0xc1d7, - 0xc1dc, 0xc1da, 0xc1db, 0xc2e3, 0xc1d9, 0xeec2, 0xebd3, 0xc2e2, - 0xc2e4, 0x003f, 0xc3e4, 0xc3e5, 0x003f, 0xf4e0, 0x003f, 0xc5de, - 0xc5dd, 0xa8b6, 0x003f, 0x003f, 0xca55, 0xb06f, 0x003f, 0xca52, - 0xca53, 0xca51, 0x003f, 0xca54, 0x003f, 0x003f, 0xcbaa, 0xcba7, - 0xcbac, 0xcba8, 0xa8b7, 0xa8ba, 0x003f, 0xcba9, 0xa8b9, 0xcbab, - 0x003f, 0x003f, 0xa8b8, 0x003f, 0x003f, 0x003f, 0x003f, 0xcdd5, - 0xcdd7, 0xaaf4, 0xcdd3, 0xcdd6, 0xcdd4, 0xaaf2, 0xaaf5, 0x003f, - 0xaaf3, 0x003f, 0x003f, 0x003f, 0x003f, 0xd0b8, 0xd0bc, 0xd0b9, - 0x003f, 0xada7, 0x003f, 0xada8, 0x003f, 0xd0bb, 0x003f, 0xd0bd, - 0xd0bf, 0x003f, 0xada5, 0xd0be, 0x003f, 0x003f, 0xada6, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xd7ee, 0xd0ba, 0xd3f2, 0xd3fb, - 0xd3f9, 0xd3f4, 0xd3f5, 0xd3fa, 0xd3fc, 0xb071, 0x003f, 0xd3f7, - 0xd3f3, 0xb070, 0xb072, 0xd3f6, 0xd3fd, 0xd3f8, 0x003f, 0x003f, - 0xb3a1, 0xd7f1, 0xd7e9, 0xd7ef, 0xd7f0, 0xb3a2, 0x003f, 0xd7e8, - 0xd7ea, 0xd0b7, 0xd7ec, 0xd7ed, 0xd7eb, 0xb66c, 0x003f, 0x003f, - 0x003f, 0xdc56, 0xebd4, 0xdc57, 0xdc54, 0xb3a3, 0xb66e, 0xdc53, - /* 0x9100 .. 0x91ff */ - 0xdc59, 0xdc58, 0xb66b, 0xdc5c, 0xdc52, 0xdc5b, 0xdc50, 0xdc5a, - 0xdc55, 0xb66d, 0x003f, 0xe0aa, 0x003f, 0xe0a5, 0xe0ab, 0xe0a6, - 0xe0a4, 0xe0a7, 0xb951, 0x003f, 0xe0a9, 0x003f, 0xe0a8, 0xb952, - 0xbbc1, 0xbbc0, 0xe46e, 0xe471, 0xe469, 0xe46d, 0xbbc2, 0xe46c, - 0xe46a, 0xe470, 0xe46b, 0xe468, 0xe46f, 0x003f, 0xe859, 0xbe48, - 0xf14a, 0xe856, 0xe857, 0xe855, 0xdc51, 0xbe47, 0xe85a, 0xe854, - 0xbe46, 0xbe49, 0xe858, 0xebd5, 0xbff3, 0xebd6, 0xebd7, 0x003f, - 0xeec4, 0xc1dd, 0xf14b, 0xf14c, 0x003f, 0x003f, 0xf14d, 0xf35d, - 0xf35c, 0xf4e2, 0x003f, 0xf4e1, 0xf65b, 0xf65c, 0xf65a, 0xf766, - 0xc5b0, 0xa8bb, 0xadaa, 0xada9, 0xb075, 0xb074, 0xd440, 0xd441, - 0xd3fe, 0x003f, 0xb073, 0xd7f5, 0x003f, 0xd7f6, 0xd7f2, 0xb3a4, - 0xd7f3, 0x003f, 0xd7f4, 0x003f, 0x003f, 0x003f, 0x003f, 0xdc5f, - 0xdc61, 0xdc5d, 0xdc60, 0xb66f, 0xdc5e, 0xb670, 0x003f, 0x003f, - 0xdd73, 0xb955, 0xb954, 0x003f, 0xb953, 0x003f, 0xe0ac, 0xe0ad, - 0x003f, 0x003f, 0xe473, 0xe475, 0xbbc6, 0xbbc3, 0x003f, 0xbbc5, - 0xbbc4, 0xe474, 0xe472, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xe861, 0xe85e, 0xe85f, 0xbe4d, 0xe860, 0xe85b, 0xe85c, 0xbe4a, - 0x003f, 0xbe4b, 0xe85d, 0xbe4c, 0x003f, 0xebdb, 0x003f, 0xebdc, - 0xebd9, 0xebda, 0xbff4, 0xebd8, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xeec8, 0xeec5, 0xeec7, 0xc1e0, 0xeecb, 0xc1df, 0xeec9, - 0xeecc, 0xeeca, 0xeec6, 0xc1de, 0x003f, 0xf14f, 0x003f, 0xf150, - 0xf14e, 0x003f, 0xf152, 0xc2e5, 0xc2e6, 0xf35f, 0xc3e7, 0xf151, - 0xf35e, 0xc3e6, 0xf4e5, 0xf4e6, 0xc4bf, 0xf4e4, 0x003f, 0xf4e3, - 0x003f, 0xf65d, 0xc548, 0x003f, 0xf849, 0xf8c8, 0xf8c7, 0x003f, - 0xc643, 0xc65d, 0xf8c9, 0xf971, 0x003f, 0xc66f, 0xa8bc, 0xaaf6, - 0x003f, 0xb956, 0x003f, 0xc4c0, 0xa8bd, 0xadab, 0xb3a5, 0xb671, - 0xc2e7, 0xaaf7, 0x003f, 0xd0c1, 0xd0c0, 0xd442, 0x003f, 0xb078, - 0xb076, 0xb07a, 0xd444, 0x003f, 0xb079, 0xb077, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd443, 0xb3a8, 0xd7fc, 0x003f, 0xb3a7, 0xb3a9, - 0xd842, 0xb3ab, 0xd7fe, 0xd840, 0xd7f7, 0xb3aa, 0xd843, 0x003f, - 0x003f, 0xd7f9, 0x003f, 0xd7fa, 0xd7f8, 0xb3a6, 0x003f, 0xd841, - 0xd7fb, 0xd7fd, 0x003f, 0x003f, 0x003f, 0xdc6d, 0x003f, 0xdc6c, - /* 0x9200 .. 0x92ff */ - 0xdc6a, 0xdc62, 0xdc71, 0xdc65, 0xdc6f, 0xdc76, 0xdc6e, 0xb679, - 0x003f, 0xb675, 0xdc63, 0x003f, 0xdc69, 0xb677, 0x003f, 0xdc68, - 0xb678, 0xb67a, 0xdc6b, 0x003f, 0xb672, 0xb673, 0xdc77, 0xdc75, - 0x003f, 0xdc74, 0xdc66, 0x003f, 0xdc72, 0x003f, 0xb676, 0x003f, - 0x003f, 0x003f, 0x003f, 0xb674, 0xdc73, 0xdc64, 0xdc67, 0xdc70, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xe4ba, 0xe0b7, 0x003f, - 0xe0b0, 0xe0c3, 0xe0cc, 0xe0b3, 0xb961, 0x003f, 0xe0c0, 0xb957, - 0xb959, 0xb965, 0xe0b1, 0x003f, 0x003f, 0xb95a, 0xb95c, 0xb966, - 0xb95b, 0x003f, 0x003f, 0x003f, 0x003f, 0xb964, 0xe0b9, 0x003f, - 0xe0ae, 0xb962, 0xe0b8, 0xb95e, 0xe0ca, 0xb963, 0xe0c8, 0xe0bc, - 0xe0c6, 0xb960, 0xe0af, 0xe0c9, 0xe0c4, 0x003f, 0xe0cb, 0xb958, - 0x003f, 0x003f, 0xb967, 0xb95d, 0x003f, 0x003f, 0xe0b5, 0x003f, - 0xe0bd, 0xe0c1, 0x003f, 0xe0c5, 0xb95f, 0xe0b4, 0xe0b2, 0xe0be, - 0x003f, 0x003f, 0x003f, 0x003f, 0xe0bb, 0xe0ba, 0x003f, 0xe0bf, - 0xe0c2, 0x003f, 0xe0c7, 0x003f, 0x003f, 0x003f, 0xe478, 0x003f, - 0xbbc7, 0xe4a4, 0xe47a, 0xbbcc, 0xbbd0, 0xe4ad, 0xe4b5, 0xe4a6, - 0xbbc8, 0x003f, 0xe4aa, 0xe0b6, 0x003f, 0xbbc9, 0xe4b1, 0xe4b6, - 0xe4ae, 0x003f, 0xe4b0, 0xe4b9, 0xe4b2, 0xe47e, 0xe4a9, 0x003f, - 0x003f, 0xbbd1, 0x003f, 0xbbcd, 0xe47c, 0xe4ab, 0xbbcb, 0xe4a5, - 0xbbca, 0xe4b3, 0xe4a2, 0xe479, 0xbbce, 0xe4b8, 0x003f, 0x003f, - 0xe47b, 0xe4af, 0xe4ac, 0xe4a7, 0xe477, 0xe476, 0xe4a1, 0xe4b4, - 0xbbcf, 0xe4b7, 0xe47d, 0xe4a3, 0xbe52, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xbe5a, 0xbe55, 0xe8a4, 0xe8a1, 0xe867, 0xbe50, - 0x003f, 0xf9d7, 0x003f, 0xbe4f, 0xbe56, 0x003f, 0x003f, 0x003f, - 0xe865, 0xbe54, 0xe871, 0xe863, 0xe864, 0xbe4e, 0xe8a3, 0xbe58, - 0xe874, 0xe879, 0xe873, 0xebee, 0xe86f, 0xe877, 0xe875, 0xe868, - 0xe862, 0xe87d, 0xbe57, 0xe87e, 0x003f, 0xe878, 0x003f, 0xe86d, - 0xe86b, 0xe866, 0x003f, 0x003f, 0x003f, 0xe86e, 0xe87b, 0xe86a, - 0xe87a, 0xe8a2, 0x003f, 0x003f, 0xbe53, 0x003f, 0xe876, 0xe87c, - 0xe872, 0xe86c, 0xbe51, 0x003f, 0x003f, 0x003f, 0xe4a8, 0xe870, - 0xbe59, 0xe869, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebf4, - 0xbff7, 0xebf3, 0xebf0, 0xec44, 0xbffb, 0x003f, 0xec41, 0xebf8, - /* 0x9300 .. 0x93ff */ - 0xec43, 0xebe9, 0xebf6, 0x003f, 0xbffd, 0x003f, 0xebe1, 0x003f, - 0xebdf, 0xec42, 0x003f, 0xec40, 0xebfe, 0xebed, 0xebec, 0xebe2, - 0xc040, 0x003f, 0xebe8, 0xebf2, 0xebfd, 0xc043, 0xec45, 0x003f, - 0xc1e8, 0xc045, 0xbffe, 0xebe6, 0x003f, 0xebef, 0xebde, 0xebe0, - 0xbff5, 0xc042, 0xbffa, 0xebe7, 0xebf7, 0xebf1, 0xc041, 0xebdd, - 0xc1e3, 0xebf9, 0xebfc, 0xbffc, 0x003f, 0xebeb, 0xc044, 0xbff9, - 0x003f, 0x003f, 0x003f, 0xbff8, 0xebf5, 0xebfb, 0xbff6, 0x003f, - 0xebe4, 0xebfa, 0x003f, 0x003f, 0xebe5, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xebea, 0xeed2, - 0x003f, 0xeed7, 0xc1e5, 0xc1e7, 0xeedd, 0xc1e1, 0xeeec, 0xeee3, - 0xeed8, 0xeed9, 0xeee2, 0x003f, 0xc1ee, 0xeee1, 0xeed1, 0xeee0, - 0xeed4, 0xeeed, 0xc1ed, 0xc1eb, 0xeed5, 0x003f, 0xeee8, 0x003f, - 0xeeda, 0xeee7, 0x003f, 0xeee9, 0xeed0, 0xc1e6, 0x003f, 0xeeea, - 0x003f, 0x003f, 0xeede, 0x003f, 0xc1ea, 0xeedb, 0x003f, 0x003f, - 0xc1ec, 0xeee4, 0x003f, 0x003f, 0x003f, 0xc1e4, 0xeed6, 0xeee5, - 0x003f, 0xeedf, 0xebe3, 0xeee6, 0xeed3, 0x003f, 0xc1e9, 0x003f, - 0xeeeb, 0x003f, 0xc1e2, 0xeece, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf160, 0xf159, 0xc2e9, 0x003f, 0xf154, 0xf163, 0xf15b, 0xeedc, - 0x003f, 0xf165, 0xf155, 0x003f, 0xc2e8, 0xf15f, 0xc2ea, 0xc2f2, - 0xc2f0, 0xf161, 0xc2f1, 0xf157, 0x003f, 0xf158, 0xf15d, 0xf162, - 0x003f, 0xeecd, 0xc2eb, 0xf16a, 0xf167, 0xf16b, 0xf15e, 0xf15a, - 0xf168, 0xf36a, 0xf15c, 0x003f, 0xc2ee, 0x003f, 0xc2ed, 0xeecf, - 0xc2ef, 0xf164, 0xf166, 0xc2ec, 0xf169, 0xf153, 0x003f, 0xf156, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf373, 0x003f, 0xf363, 0xc3eb, 0xf371, 0x003f, 0x003f, 0xf361, - 0xc3ec, 0x003f, 0xf36c, 0x003f, 0xf368, 0xc3f1, 0xf372, 0xf362, - 0xf365, 0xc3e9, 0xf374, 0x003f, 0xf36d, 0xf370, 0xc3ef, 0xc3f4, - 0xc3f2, 0xf369, 0xf364, 0x003f, 0xc3ed, 0xc3ee, 0xf360, 0xc3ea, - 0x003f, 0xc3e8, 0xc3f0, 0xf36f, 0xc3f3, 0x003f, 0xf36b, 0xf375, - 0xc3f5, 0x003f, 0x003f, 0x003f, 0xf367, 0x003f, 0xf36e, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf4f3, 0xf542, 0xf4f5, - 0xf4fc, 0xf366, 0xf4fa, 0xf4e9, 0xf540, 0xc4c3, 0xf4ed, 0xf4fe, - /* 0x9400 .. 0x94ff */ - 0xf4f4, 0x003f, 0x003f, 0xc4c2, 0x003f, 0x003f, 0xf544, 0xf4f6, - 0x003f, 0xf4fb, 0xf4fd, 0xf4e7, 0xf541, 0xf4f2, 0xf4f7, 0xf4eb, - 0xf4ef, 0xf543, 0xf4f9, 0xf4e8, 0xf4ec, 0xf4ee, 0xf4f8, 0x003f, - 0xc4c1, 0xf4f1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf4ea, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf4f0, 0xf661, 0xf666, 0xc54f, 0xf668, 0x003f, 0xc549, 0x003f, - 0xf664, 0xf66a, 0xc54e, 0xc54a, 0x003f, 0xc54b, 0xf660, 0xf667, - 0xc54d, 0xf665, 0xc54c, 0xf65f, 0xf663, 0xf662, 0x003f, 0xf65e, - 0xf669, 0x003f, 0x003f, 0x003f, 0xc5b1, 0xf76d, 0xf770, 0xf76c, - 0xf76e, 0xf76f, 0xf769, 0xf76a, 0xf767, 0x003f, 0x003f, 0xf76b, - 0xf768, 0xc5b2, 0xc5b3, 0x003f, 0x003f, 0xf84b, 0x003f, 0xf84d, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf84c, 0xf84e, 0x003f, - 0xc5e0, 0x003f, 0xf84a, 0xc5df, 0xc5e1, 0x003f, 0x003f, 0x003f, - 0xf8cb, 0xf8cc, 0xc644, 0xf8ca, 0x003f, 0xf953, 0xf952, 0xf954, - 0xc65f, 0xf955, 0xc65e, 0xf956, 0xf972, 0xf975, 0xf974, 0xc668, - 0xf973, 0x003f, 0x003f, 0x003f, 0xc672, 0xc670, 0xc671, 0xc677, - 0xf9c0, 0xf9c1, 0xf9bf, 0xf9c9, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9500 .. 0x95ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xaaf8, - 0x003f, 0x003f, 0xd844, 0xdc78, 0xe8a5, 0xf376, 0x003f, 0x003f, - 0xaaf9, 0x003f, 0xadac, 0xb07b, 0x003f, 0x003f, 0xd845, 0x003f, - 0xd846, 0xb3ac, 0x003f, 0xb67d, 0xdc7a, 0xdc79, 0xb6a3, 0xb67c, - 0xdc7b, 0xb67e, 0xb6a2, 0xb6a1, 0xb67b, 0x003f, 0x003f, 0x003f, - 0xb968, 0x003f, 0x003f, 0xe0d0, 0xe0ce, 0x003f, 0xe0cf, 0xe0cd, - 0x003f, 0xbbd2, 0x003f, 0xbbd5, 0xbbd7, 0xbbd6, 0x003f, 0x003f, - 0xbbd3, 0xbbd4, 0x003f, 0xe8a7, 0xe8a6, 0xbe5b, 0xe8a8, 0x003f, - 0xe8a9, 0xbe5c, 0x003f, 0x003f, 0x003f, 0xec4d, 0xec4b, 0xeef3, - 0x003f, 0xec49, 0xec4a, 0xc046, 0xec46, 0xec4e, 0xec48, 0xec4c, - 0xeeef, 0x003f, 0x003f, 0xeef1, 0x003f, 0xeef2, 0xc1f3, 0xeeee, - 0xc1f2, 0xeef0, 0xc1ef, 0xc1f0, 0xc1f1, 0xec47, 0x003f, 0x003f, - 0xc2f5, 0xf16e, 0xf16c, 0xf16d, 0xc2f3, 0xc2f6, 0xc2f4, 0x003f, - 0x003f, 0x003f, 0xf377, 0xf378, 0xc3f6, 0x003f, 0xf545, 0xf547, - 0xf546, 0xc4c4, 0xc550, 0xf66d, 0xf66c, 0xf66b, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0x9600 .. 0x96ff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0xaafa, 0x003f, 0xc9aa, 0x003f, - 0xca58, 0xa6e9, 0xca56, 0xca59, 0xca57, 0x003f, 0x003f, 0x003f, - 0xcbae, 0x003f, 0xa8c1, 0x003f, 0xa8c2, 0xcbb0, 0xa8bf, 0xcbaf, - 0xcbad, 0xa8c0, 0xa8be, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xcdd8, 0xcddb, 0xaafd, 0xcdda, 0xcdd9, 0x003f, 0xaafc, - 0xaafb, 0x003f, 0xab40, 0xcddc, 0xaafe, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xd0c6, 0xadae, 0xadaf, 0xadb0, 0xd0c7, 0xd0c3, - 0xadad, 0xd0c4, 0x003f, 0xd0c5, 0xd0c2, 0x003f, 0x003f, 0x003f, - 0xb0a4, 0x003f, 0x003f, 0xb0a1, 0xd445, 0xb0a2, 0xb0a5, 0xd446, - 0x003f, 0xb07e, 0xb07c, 0xb07d, 0xb0a3, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xb3ad, 0xd849, 0xb3b5, 0xd848, 0x003f, 0xd84b, - 0xb3b1, 0xd84a, 0xb6ab, 0xb3af, 0xb3b2, 0xb3ae, 0xb3b3, 0xb3b4, - 0xb3b0, 0x003f, 0x003f, 0x003f, 0xd847, 0xb6a7, 0xdc7d, 0x003f, - 0xdca3, 0x003f, 0x003f, 0xdca2, 0xb6ac, 0xb6a8, 0xb6a9, 0xdc7c, - 0xdc7e, 0xdca1, 0xb6a4, 0xb6a6, 0x003f, 0xb6aa, 0xb6a5, 0x003f, - 0x003f, 0xe0d3, 0xe0d1, 0xe0d2, 0xb96a, 0xb96b, 0x003f, 0xe0d4, - 0xb969, 0xbbd8, 0x003f, 0xbbda, 0xbbd9, 0x003f, 0xe4bb, 0x003f, - 0x003f, 0xe4bc, 0xe8ab, 0x003f, 0xe8aa, 0x003f, 0x003f, 0xc047, - 0xc048, 0xec4f, 0xc049, 0x003f, 0xeef6, 0x003f, 0xeef4, 0x003f, - 0xeef5, 0xc1f4, 0x003f, 0xf16f, 0xc3f7, 0x003f, 0x003f, 0x003f, - 0xc1f5, 0xab41, 0x003f, 0xb0a6, 0xd447, 0x003f, 0x003f, 0xd84c, - 0xb3b6, 0xb6ad, 0xdca4, 0xdca6, 0xb6af, 0xb6ae, 0xb6b0, 0xb6b1, - 0xdca5, 0xb96e, 0xb96f, 0xb96d, 0xbbdb, 0xb96c, 0xe0d5, 0x003f, - 0x003f, 0x003f, 0xbbdc, 0xe8ac, 0xec50, 0xc04a, 0xc1f6, 0xf170, - 0xf174, 0xc2f9, 0xf171, 0xc2fa, 0xc2f8, 0xf175, 0xc2fb, 0xf173, - 0x003f, 0xf379, 0xc2f7, 0xc3f8, 0x003f, 0xf8cd, 0x003f, 0x003f, - 0xab42, 0xb3b8, 0xb3b7, 0x003f, 0x003f, 0x003f, 0x003f, 0xb6b2, - 0xdca8, 0xdca7, 0xb6b3, 0x003f, 0x003f, 0xe0d9, 0xb973, 0xb970, - 0xe0d8, 0xb972, 0xe0d6, 0xb971, 0x003f, 0xe0d7, 0x003f, 0xe4bd, - /* 0x9700 .. 0x97ff */ - 0xbbdd, 0x003f, 0xe8af, 0x003f, 0xbe5d, 0xe8ad, 0xbe5e, 0xbe5f, - 0xe8ae, 0xbe60, 0x003f, 0xec51, 0x003f, 0xc04e, 0xc04b, 0xc050, - 0xec53, 0xc04c, 0xec52, 0xc04f, 0x003f, 0x003f, 0xc04d, 0x003f, - 0xeef9, 0xeefb, 0x003f, 0x003f, 0xc1f7, 0xeefa, 0xc1f8, 0xeef8, - 0xeef7, 0x003f, 0xf177, 0xf176, 0xc2fc, 0xf178, 0xf37e, 0xc3fa, - 0xf37d, 0xf37a, 0xc3f9, 0xf37b, 0xf37c, 0x003f, 0xf548, 0xf549, - 0xc4c5, 0x003f, 0xc553, 0x003f, 0x003f, 0xf66e, 0x003f, 0x003f, - 0xc551, 0xc552, 0xf66f, 0x003f, 0x003f, 0xc5b4, 0xc5b5, 0xf771, - 0x003f, 0x003f, 0xc645, 0xf8cf, 0xc647, 0x003f, 0xf8ce, 0xf8d0, - 0xc646, 0xf957, 0x003f, 0xf9ad, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0xab43, 0x003f, 0x003f, 0x003f, 0xb974, 0x003f, - 0xe4be, 0x003f, 0xe8b0, 0xc051, 0xc052, 0x003f, 0xab44, 0x003f, - 0xbe61, 0xc3fb, 0xadb1, 0x003f, 0x003f, 0x003f, 0xc053, 0x003f, - 0xc5e2, 0xadb2, 0xd84d, 0x003f, 0xdca9, 0x003f, 0xdcab, 0x003f, - 0xdcaa, 0x003f, 0xe0dd, 0xe0da, 0xb975, 0x003f, 0xb976, 0xe0db, - 0xe0dc, 0x003f, 0xe4c0, 0xe4c5, 0xbbde, 0xe4bf, 0xe4c1, 0xe4c8, - 0xe4c3, 0xe4c7, 0xe4c4, 0xe4c2, 0xe4c6, 0xbbdf, 0x003f, 0x003f, - 0xe8b3, 0x003f, 0xe8b1, 0xbe63, 0x003f, 0xbe62, 0xe8b2, 0xbe64, - 0x003f, 0x003f, 0x003f, 0x003f, 0xec56, 0x003f, 0x003f, 0xec55, - 0xc054, 0xec54, 0xeefc, 0x003f, 0xeefe, 0xef41, 0xef40, 0x003f, - 0xc1f9, 0xeefd, 0xf1a1, 0xc2fd, 0xf17d, 0xf1a2, 0xc2fe, 0x003f, - 0xf17b, 0x003f, 0xf17e, 0xf17c, 0xf179, 0xc340, 0xf17a, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf3a1, 0x003f, 0x003f, 0xf3a3, 0xf3a2, - 0x003f, 0xf54a, 0x003f, 0xf54b, 0x003f, 0x003f, 0x003f, 0xf670, - 0x003f, 0xc5b7, 0x003f, 0xc5b6, 0xf84f, 0xf850, 0xc648, 0xf8d1, - 0x003f, 0xc669, 0x003f, 0xadb3, 0xb6b4, 0xe4ca, 0xe4c9, 0xe8b5, - 0xe8b4, 0x003f, 0x003f, 0xc1fa, 0xef43, 0xef42, 0xf1a5, 0xf1a3, - 0xf1a6, 0xf1a4, 0x003f, 0x003f, 0xc3fc, 0xf3a4, 0xf3a5, 0xf3a6, - 0x003f, 0xf671, 0x003f, 0xf772, 0x003f, 0xf8d2, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xadb4, 0x003f, 0x003f, - 0xec57, 0xef44, 0x003f, 0xadb5, 0x003f, 0x003f, 0xbbe0, 0x003f, - 0xec58, 0xc341, 0xf1a7, 0xc3fd, 0x003f, 0xf54c, 0xf54d, 0xc554, - /* 0x9800 .. 0x98ff */ - 0xf851, 0xadb6, 0xb3bb, 0xb3bc, 0xd84e, 0xb6b5, 0xb6b6, 0xdcac, - 0xb6b7, 0x003f, 0xb97a, 0x003f, 0xb97c, 0xe0df, 0xe0e0, 0xe0de, - 0xb977, 0xb978, 0xb97b, 0xb979, 0x003f, 0x003f, 0xe4cb, 0xbbe1, - 0xbbe2, 0x003f, 0x003f, 0xe8bc, 0xbe67, 0xe8b7, 0xe8b6, 0x003f, - 0xe8bb, 0xbe65, 0x003f, 0x003f, 0xc05b, 0x003f, 0xe8b8, 0xe8bd, - 0xe8ba, 0xe8b9, 0x003f, 0xbe66, 0x003f, 0xc059, 0x003f, 0xec5a, - 0xc055, 0x003f, 0xec5b, 0x003f, 0x003f, 0xec59, 0x003f, 0xc058, - 0xc056, 0xc05a, 0x003f, 0xc057, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0xef45, 0x003f, 0xef4a, 0xef46, 0xef49, 0xc1fb, 0x003f, - 0xedd4, 0xef48, 0xef47, 0x003f, 0xc344, 0xc342, 0xc345, 0xc343, - 0xf1a8, 0xf1a9, 0xf1aa, 0xc346, 0x003f, 0x003f, 0x003f, 0xf3aa, - 0xc440, 0xf3a8, 0x003f, 0xc441, 0xf3a7, 0xf3a9, 0xc3fe, 0xf551, - 0xf54e, 0x003f, 0xf54f, 0xf550, 0xf672, 0xc556, 0x003f, 0xc555, - 0x003f, 0xf774, 0xf773, 0xc5b8, 0x003f, 0x003f, 0x003f, 0xc5e3, - 0xc649, 0xc660, 0xf958, 0xf9ae, 0xf9af, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xadb7, 0xdcad, 0x003f, 0x003f, 0xe0e1, 0xe4cc, 0xe4cd, 0xbbe3, - 0x003f, 0xbbe4, 0xe8be, 0xbe68, 0x003f, 0x003f, 0xc1fc, 0x003f, - 0xf1ab, 0x003f, 0xc347, 0xf3ad, 0xc442, 0xf3ac, 0xf3ae, 0xf3ab, - 0xf675, 0xf552, 0xf553, 0x003f, 0xc4c6, 0x003f, 0xf674, 0x003f, - 0x003f, 0xf673, 0x003f, 0xf775, 0xf9b0, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xadb8, 0x003f, 0x003f, 0x003f, 0xadb9, - 0x003f, 0x003f, 0xb0a7, 0xd448, 0x003f, 0xd84f, 0x003f, 0xb6b8, - 0x003f, 0xb6bb, 0xb6b9, 0xdcae, 0x003f, 0xb6bd, 0x003f, 0xb6ba, - 0x003f, 0x003f, 0xb6bc, 0x003f, 0xb97e, 0x003f, 0xe0e2, 0x003f, - 0x003f, 0xe0e3, 0xe8c0, 0x003f, 0xb97d, 0xb9a1, 0xb9a2, 0x003f, - /* 0x9900 .. 0x99ff */ - 0xe4cf, 0x003f, 0xe4ce, 0xbbe5, 0x003f, 0xbbe6, 0x003f, 0xe4d0, - 0xe8bf, 0xbbe8, 0xbe69, 0x003f, 0xbbe7, 0x003f, 0x003f, 0x003f, - 0xc05c, 0xe8c1, 0xbe6b, 0xbe6a, 0xe8c2, 0xe8c5, 0xe8c3, 0xe8c4, - 0xbe6c, 0x003f, 0xc061, 0xc05f, 0x003f, 0x003f, 0xc05e, 0xec5d, - 0x003f, 0xc060, 0x003f, 0x003f, 0xec5c, 0xef4b, 0x003f, 0xec5e, - 0xc05d, 0xec5f, 0xef4e, 0xef4c, 0xef4d, 0xef52, 0xc34b, 0xef51, - 0xef54, 0xef53, 0xef50, 0xef4f, 0x003f, 0xc1fd, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1ae, 0x003f, 0xf1ad, 0xc34a, 0xc348, 0xc349, - 0x003f, 0xf1ac, 0x003f, 0xf3b1, 0x003f, 0xc443, 0x003f, 0xf3b0, - 0xf3af, 0xc444, 0x003f, 0xf558, 0xf557, 0x003f, 0xf555, 0x003f, - 0xf554, 0xc4c8, 0xc4c7, 0xf559, 0xf776, 0xc5b9, 0xf677, 0xc557, - 0xf676, 0xf556, 0x003f, 0xf777, 0xc5e4, 0x003f, 0xc661, 0xf959, - 0x003f, 0xf9b1, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xadba, 0xd850, - 0xef55, 0xadbb, 0x003f, 0x003f, 0xe4d2, 0xe4d1, 0xec60, 0x003f, - 0x003f, 0xef57, 0x003f, 0xef56, 0x003f, 0xc34c, 0xf3b2, 0xf3b3, - 0xc4c9, 0x003f, 0x003f, 0xf9b2, 0xb0a8, 0xb6bf, 0xb6be, 0xe0e4, - 0xe0e6, 0xb9a4, 0xe0e5, 0xb9a3, 0xb9a5, 0xe0e7, 0x003f, 0x003f, - 0x003f, 0xe4d4, 0xe4d6, 0xe4d5, 0x003f, 0xe4d8, 0x003f, 0x003f, - 0x003f, 0xbbe9, 0xe4d7, 0xe4d3, 0x003f, 0x003f, 0x003f, 0xe4d9, - 0x003f, 0xe8cc, 0x003f, 0xe8cf, 0xe8d1, 0xe8c7, 0xe8cb, 0xe8c8, - 0xbe6e, 0xbe71, 0xbe73, 0xe8c9, 0xe8ca, 0xbe72, 0xe8cd, 0xe8d0, - 0xe8ce, 0xbe74, 0x003f, 0xbe70, 0xe8c6, 0xbe6d, 0x003f, 0xbe6f, - 0x003f, 0x003f, 0xc063, 0xec66, 0xec64, 0xec63, 0x003f, 0xec69, - 0x003f, 0xec68, 0xec67, 0x003f, 0xec62, 0xc062, 0xec61, 0x003f, - 0xec65, 0xc064, 0x003f, 0x003f, 0xef5a, 0x003f, 0xef5e, 0xef5b, - 0xef5d, 0xef5c, 0xef59, 0xef5f, 0xef62, 0xef60, 0xef61, 0xc240, - /* 0x9a00 .. 0x9aff */ - 0x003f, 0xc1fe, 0xef58, 0xef63, 0xf1b3, 0xf1b6, 0xf1b8, 0xf1b7, - 0x003f, 0xf1b1, 0xf1b5, 0xf1b0, 0x003f, 0xf1b2, 0xc34d, 0xf1af, - 0x003f, 0xf1b4, 0x003f, 0x003f, 0xf3c0, 0xf3b5, 0xc445, 0x003f, - 0x003f, 0xc446, 0xf3b4, 0xf3b9, 0xf3bf, 0xf3b7, 0xf3be, 0x003f, - 0xf3bb, 0x003f, 0xf3ba, 0xf3bd, 0xf3b8, 0xf3b6, 0x003f, 0xf3bc, - 0x003f, 0xf560, 0xf55e, 0xc4ca, 0xf55d, 0xf563, 0xf561, 0x003f, - 0xc4cb, 0xf55c, 0xf55a, 0x003f, 0xf55b, 0xc4cd, 0xf55f, 0xc4cc, - 0xf562, 0xf678, 0xf67e, 0x003f, 0x003f, 0xf679, 0xc55b, 0xf6a1, - 0xc55a, 0xf67d, 0xf67c, 0xc559, 0xf67b, 0xc558, 0xf67a, 0x003f, - 0xf77d, 0xf7a1, 0xf77e, 0x003f, 0xf77b, 0xc5bb, 0xf778, 0xf77c, - 0xf7a3, 0x003f, 0xf7a2, 0xf779, 0xf77a, 0xc5ba, 0xf852, 0xc5e7, - 0x003f, 0xf853, 0xc5e5, 0xc5e6, 0x003f, 0x003f, 0xf8d3, 0xc64a, - 0xf976, 0x003f, 0xc66a, 0x003f, 0xf9b3, 0xc66b, 0xf9b4, 0xf9b5, - 0xf9c3, 0xf9c2, 0xc67a, 0xf9cd, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xb0a9, 0x003f, 0x003f, 0xe0e9, 0x003f, 0xe0e8, 0x003f, 0xbbea, - 0xbbeb, 0xe4da, 0x003f, 0xe8d2, 0xec6c, 0x003f, 0x003f, 0xbe75, - 0xc065, 0xec6a, 0x003f, 0xec6d, 0xc066, 0x003f, 0xef64, 0xec6b, - 0xf1b9, 0xc34e, 0xf3c1, 0x003f, 0x003f, 0x003f, 0xf566, 0xf564, - 0x003f, 0x003f, 0xf565, 0x003f, 0x003f, 0xf6a2, 0x003f, 0xc55c, - 0xf7a4, 0xc5ea, 0xc5bc, 0xc5e8, 0xc5e9, 0xf8d4, 0xc662, 0x003f, - 0xb0aa, 0x003f, 0x003f, 0x003f, 0xf1ba, 0x003f, 0x003f, 0xd449, - 0x003f, 0xb9a6, 0x003f, 0xe4db, 0x003f, 0x003f, 0xbbec, 0xe4dc, - 0x003f, 0x003f, 0x003f, 0xe8d4, 0xe8d3, 0xc068, 0xbe76, 0xbe77, - 0x003f, 0xe8d7, 0xe8d6, 0xe8d5, 0x003f, 0x003f, 0xec6e, 0xec71, - 0x003f, 0xec70, 0xec6f, 0xc067, 0xef68, 0xef66, 0xef65, 0x003f, - /* 0x9b00 .. 0x9bff */ - 0x003f, 0xef67, 0x003f, 0xc34f, 0xf1bc, 0xf1bd, 0xc350, 0x003f, - 0xf1bb, 0x003f, 0xf3c3, 0xf3c2, 0xf3c5, 0xc447, 0xf3c4, 0x003f, - 0xf567, 0xf569, 0xf568, 0x003f, 0x003f, 0xf6a3, 0xf6a6, 0xf6a4, - 0xf6a5, 0xf7a5, 0xc5bd, 0x003f, 0x003f, 0x003f, 0xf854, 0xf855, - 0xf856, 0x003f, 0xc64b, 0xc663, 0xf9b6, 0xb0ab, 0x003f, 0xbe78, - 0xc069, 0xf1be, 0x003f, 0xf7a6, 0x003f, 0x003f, 0xf9c4, 0xd44a, - 0x003f, 0xc67b, 0xb0ac, 0xec72, 0x003f, 0xf1bf, 0x003f, 0xf3c6, - 0x003f, 0x003f, 0xf6a7, 0xf7a7, 0xb0ad, 0x003f, 0xe4dd, 0xe4de, - 0x003f, 0xbbed, 0xbbee, 0xe8d9, 0xbe7a, 0xbe79, 0xe8d8, 0x003f, - 0xef69, 0x003f, 0xf1c0, 0xf1c2, 0xf1c1, 0xc353, 0xc352, 0xc351, - 0x003f, 0xc55e, 0xf6a8, 0x003f, 0xc55d, 0xf7a9, 0xf7a8, 0x003f, - 0xc64c, 0xf8d5, 0xb3bd, 0xe0ea, 0x003f, 0x003f, 0x003f, 0xe4e1, - 0xe4df, 0xe4e0, 0x003f, 0x003f, 0xe8e2, 0x003f, 0xe8dd, 0xe8da, - 0xe8e1, 0x003f, 0x003f, 0x003f, 0xe8e3, 0x003f, 0x003f, 0xbe7c, - 0xe8e0, 0xe8dc, 0x003f, 0x003f, 0xe8db, 0xe8df, 0xe8de, 0xbe7b, - 0x003f, 0x003f, 0xec7d, 0xec78, 0xec76, 0xeca1, 0xec77, 0x003f, - 0xec73, 0x003f, 0xec79, 0x003f, 0x003f, 0xec74, 0xef72, 0xec75, - 0xeca2, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xec7c, 0xc06a, 0xec7b, 0xec7a, 0x003f, 0xec7e, 0x003f, 0x003f, - 0x003f, 0x003f, 0xef6a, 0xef6d, 0x003f, 0x003f, 0xef6c, 0x003f, - 0xef74, 0xef6f, 0xef73, 0x003f, 0xef71, 0xef70, 0xef6e, 0x003f, - 0xef6b, 0x003f, 0xc243, 0xc242, 0x003f, 0xc244, 0xc241, 0xef75, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf1c8, 0xf1cb, 0x003f, - 0xf1c9, 0xf1cd, 0x003f, 0x003f, 0x003f, 0xf1ce, 0x003f, 0xf1c6, - 0xc358, 0xf1c7, 0x003f, 0xf1c5, 0xf1cc, 0x003f, 0xf1c4, 0xf1c3, - 0xc357, 0xc355, 0xc354, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0xf1ca, 0xf3cf, 0xf3d5, 0xc44a, 0xf3d0, - 0x003f, 0xf3d3, 0xf3d7, 0xc44b, 0xf3d2, 0x003f, 0xf3ca, 0x003f, - 0xf3c9, 0xf3d6, 0xf3cd, 0x003f, 0xf3cb, 0xf3d4, 0xf3cc, 0xc449, - 0xc448, 0x003f, 0xf3c7, 0xf3c8, 0xf3d1, 0x003f, 0x003f, 0x003f, - 0xf3ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf56c, - 0xf56f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc356, 0x003f, 0x003f, - /* 0x9c00 .. 0x9cff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xf56d, 0xf573, 0xf571, - 0xf56b, 0xf576, 0x003f, 0xf56a, 0x003f, 0xc4cf, 0xf572, 0x003f, - 0x003f, 0x003f, 0xf56e, 0xc4ce, 0xf575, 0x003f, 0x003f, 0xf574, - 0x003f, 0x003f, 0x003f, 0x003f, 0xf6ab, 0xf6aa, 0x003f, 0x003f, - 0x003f, 0xf6b1, 0x003f, 0xf6ad, 0xf6b0, 0xc560, 0x003f, 0x003f, - 0xf6ae, 0xf6af, 0x003f, 0xf6a9, 0xf6ac, 0xc55f, 0x003f, 0x003f, - 0x003f, 0xc5bf, 0xf7b4, 0xf7af, 0xf7b3, 0x003f, 0xf7b6, 0xf7b2, - 0x003f, 0xf7ae, 0x003f, 0xc5c1, 0xf7b1, 0xf7b5, 0xc5c0, 0xf7ac, - 0xf570, 0xf7b0, 0x003f, 0x003f, 0xf7ad, 0x003f, 0xf7aa, 0x003f, - 0xf7ab, 0xc5be, 0xf85a, 0xf85c, 0xf85f, 0xf85b, 0xf860, 0x003f, - 0xf859, 0x003f, 0xf857, 0x003f, 0xc5eb, 0xf85d, 0xc5ed, 0xc5ec, - 0xf858, 0xf85e, 0x003f, 0x003f, 0x003f, 0x003f, 0xf8da, 0xc64d, - 0xf8db, 0x003f, 0xf8d9, 0xf8d6, 0x003f, 0x003f, 0xf8d8, 0xf8d7, - 0xf95a, 0x003f, 0x003f, 0x003f, 0x003f, 0xf95c, 0xf95b, 0x003f, - 0x003f, 0xf979, 0x003f, 0xf978, 0xf977, 0xf97a, 0x003f, 0xc673, - 0xc674, 0xf9ca, 0xf9ce, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3be, 0xdcaf, 0xe0ed, - 0x003f, 0xb9a7, 0xe0eb, 0x003f, 0x003f, 0xe0ec, 0x003f, 0x003f, - 0x003f, 0xe4e2, 0xe4e3, 0xbbf1, 0xbbef, 0xe4e4, 0xbbf0, 0xe8e8, - 0x003f, 0xe8eb, 0xe8e5, 0xe8ec, 0xe8e4, 0xe8e6, 0x003f, 0xe8e7, - /* 0x9d00 .. 0x9dff */ - 0xe8ea, 0x003f, 0x003f, 0xbea1, 0xe8ef, 0xe8ee, 0xbe7d, 0xe8e9, - 0xe8ed, 0xbe7e, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xecac, 0x003f, 0xc06f, 0x003f, 0xeca7, 0xc06b, 0x003f, 0xeca4, - 0xecaa, 0xecad, 0x003f, 0xc070, 0x003f, 0xeca9, 0xeca6, 0xecae, - 0xeca5, 0x003f, 0xecab, 0xc06c, 0x003f, 0xeca3, 0xc06d, 0x003f, - 0xc06e, 0xeca8, 0x003f, 0x003f, 0x003f, 0xefa9, 0xef7a, 0xef7b, - 0xef7e, 0xef7c, 0x003f, 0xef76, 0x003f, 0x003f, 0xef79, 0xefa5, - 0xef7d, 0x003f, 0x003f, 0xc245, 0x003f, 0xefa7, 0xefa4, 0xc246, - 0xefa6, 0xef77, 0xefa2, 0xefa3, 0x003f, 0xefa1, 0x003f, 0x003f, - 0x003f, 0x003f, 0xf1d2, 0xf1d4, 0xf1d7, 0x003f, 0x003f, 0xf1d1, - 0x003f, 0xc359, 0xf1d9, 0xf1d0, 0xf1da, 0x003f, 0xf1d6, 0xf1d8, - 0xf1dc, 0xf1d5, 0xf1dd, 0xf1d3, 0xf1cf, 0xc35a, 0x003f, 0xf1db, - 0xc35b, 0xc44d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xef78, - 0xf3f1, 0xf3e8, 0xc44f, 0xf3e4, 0xc450, 0x003f, 0x003f, 0xf3ed, - 0xf3e7, 0xf3dd, 0xc44e, 0xf3ea, 0xf3e5, 0xf3e6, 0x003f, 0xf3d8, - 0xf3df, 0xf3ee, 0x003f, 0xf3eb, 0x003f, 0xf3e3, 0x003f, 0xf3ef, - 0xf3de, 0xf3d9, 0xf3ec, 0x003f, 0xf3db, 0xf3e9, 0xf3e0, 0xf3f0, - 0xf3dc, 0xc44c, 0xf3da, 0xf3e1, 0xf3e2, 0x003f, 0x003f, 0x003f, - 0xf57d, 0x003f, 0xf57b, 0x003f, 0xf5a2, 0x003f, 0xf5ae, 0xf5a5, - 0xf57c, 0xf578, 0xf5a7, 0xf57e, 0xf5a3, 0xf57a, 0xf5aa, 0xf577, - 0xf5a1, 0xf5a6, 0xf5a8, 0xf5ab, 0xf579, 0x003f, 0xf5af, 0xf5b0, - 0xf5a9, 0xf5ad, 0xf5a4, 0x003f, 0xf6c1, 0xf6c4, 0x003f, 0xc561, - 0x003f, 0xf6c3, 0xf6c8, 0xf6c6, 0xc562, 0xf6bd, 0xf6b3, 0xf6b2, - 0xc564, 0xf6bf, 0xf6c0, 0xf6bc, 0xf6b4, 0x003f, 0xf6b9, 0xf5ac, - 0x003f, 0xf6b5, 0xc563, 0xf6bb, 0x003f, 0xf6ba, 0x003f, 0xf6b6, - 0xf6c2, 0x003f, 0xf6b7, 0xf7bb, 0xf6c5, 0xf6c7, 0xf6be, 0xf6b8, - 0xf7bc, 0xf7be, 0xf7b8, 0xc5c2, 0x003f, 0xf7c5, 0xf7c3, 0xc5c3, - 0xf7c2, 0xf7c1, 0xf7ba, 0xf7b7, 0xf7bd, 0xf7c6, 0xf7b9, 0xf7bf, - 0x003f, 0xf869, 0xf86e, 0xf864, 0xf867, 0xc5ee, 0xf86b, 0x003f, - 0xf872, 0xf7c0, 0x003f, 0xf865, 0xf86f, 0xf873, 0xf86a, 0xf863, - 0xf86d, 0x003f, 0xf86c, 0xf871, 0xf870, 0xf7c4, 0xf868, 0xf862, - 0xf866, 0xc64e, 0xc64f, 0xf861, 0x003f, 0xf8e6, 0xf8dd, 0xf8e5, - /* 0x9e00 .. 0x9eff */ - 0xf8e2, 0xf8e3, 0xf8dc, 0xf8df, 0xf8e7, 0xf8e1, 0xf8e0, 0xf8de, - 0x003f, 0xf8e4, 0x003f, 0xf95d, 0x003f, 0xf95e, 0x003f, 0xf960, - 0xf95f, 0xf962, 0xf961, 0xf97c, 0xf97b, 0xf9b7, 0x003f, 0xf9b8, - 0x003f, 0xf9c5, 0xc678, 0xc67c, 0x003f, 0xf9cf, 0xc67d, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xb3bf, 0x003f, 0x003f, - 0x003f, 0xc4d0, 0xf6c9, 0x003f, 0xc650, 0xc651, 0x003f, 0xb3c0, - 0xe0ee, 0x003f, 0xb9a8, 0xe8f0, 0x003f, 0x003f, 0xecb0, 0xecb1, - 0xecaf, 0xefab, 0xefaa, 0xc247, 0xf1df, 0xefac, 0xf1de, 0x003f, - 0x003f, 0xf3f3, 0xc451, 0xc453, 0xf3f2, 0x003f, 0x003f, 0xc452, - 0x003f, 0xf5b1, 0xf5b3, 0xf5b2, 0xf6ca, 0xc565, 0x003f, 0xc5ef, - 0xf8e8, 0xf963, 0x003f, 0x003f, 0xf9d2, 0xb3c1, 0x003f, 0xe4e5, - 0x003f, 0xbea2, 0x003f, 0x003f, 0x003f, 0xecb3, 0xecb2, 0x003f, - 0xefad, 0x003f, 0x003f, 0x003f, 0xc454, 0xc4d1, 0xf7c7, 0xf9cb, - 0x003f, 0x003f, 0x003f, 0xb3c2, 0xbbf2, 0x003f, 0xbea3, 0x003f, - 0xf3f4, 0x003f, 0xf874, 0xb6c0, 0x003f, 0x003f, 0x003f, 0x003f, - 0xefae, 0x003f, 0x003f, 0x003f, 0xc664, 0xb6c1, 0xbea4, 0xc248, - 0xf875, 0xb6c2, 0x003f, 0xe8f1, 0xc072, 0xecb4, 0xecb5, 0x003f, - 0xc071, 0x003f, 0xefaf, 0xc24c, 0xc24a, 0xc24b, 0xc249, 0xf1e0, - 0xc35c, 0x003f, 0x003f, 0x003f, 0xf5b5, 0xf5b4, 0xf5b7, 0xf5b6, - 0xc4d2, 0x003f, 0x003f, 0xf6cb, 0x003f, 0xf6cd, 0xf6cc, 0xc566, - 0xf7c8, 0x003f, 0xf876, 0xf877, 0xc5f0, 0xf964, 0xf97d, 0xc675, - 0x003f, 0xdcb0, 0xecb6, 0xefb0, 0xf3f5, 0xe0ef, 0x003f, 0xefb1, - /* 0x9f00 .. 0x9fff */ - 0xf1e2, 0xf1e1, 0x003f, 0x003f, 0x003f, 0x003f, 0xf878, 0xc652, - 0x003f, 0xf965, 0xf97e, 0x003f, 0x003f, 0x003f, 0xb9a9, 0xe8f2, - 0xe8f3, 0x003f, 0xecb7, 0xb9aa, 0x003f, 0xc35d, 0xf1e3, 0x003f, - 0xf6cf, 0xc567, 0xf6d0, 0xf6ce, 0xf879, 0x003f, 0xf8e9, 0x003f, - 0xb9ab, 0x003f, 0xefb4, 0xefb3, 0xefb2, 0xf1e4, 0x003f, 0x003f, - 0xf1e8, 0xf1e7, 0xf1e6, 0xf1e5, 0xc35e, 0xf3f6, 0xf5b9, 0xc4d3, - 0xf5b8, 0xf6d1, 0xf7cb, 0xf7ca, 0xc5c4, 0xf7c9, 0xf87c, 0xf87b, - 0xf87a, 0x003f, 0x003f, 0xbbf3, 0x003f, 0xecb8, 0xc24d, 0x003f, - 0xf3f7, 0xf3f8, 0xf7cc, 0xf87d, 0x003f, 0x003f, 0xf8ea, 0xf966, - 0xf9b9, 0xf9d4, 0xbbf4, 0xc24e, 0xf1e9, 0xf3f9, 0xf6d2, 0xf87e, - 0x003f, 0x003f, 0xbea6, 0x003f, 0xefb5, 0xf1ea, 0xf3fa, 0xf3fb, - 0xf3fc, 0xf5be, 0x003f, 0xf5ba, 0xc568, 0xf5bd, 0xf5bc, 0xc4d4, - 0xf5bb, 0xc4d6, 0x003f, 0xc4d5, 0xf6d4, 0xf6d3, 0xc569, 0xc56a, - 0x003f, 0x003f, 0xc5c6, 0xf7cd, 0xc5c5, 0x003f, 0xf8a3, 0xf8a4, - 0xf8a2, 0xf8a1, 0xc654, 0x003f, 0xf8eb, 0xf8ec, 0xf8ed, 0xc653, - 0xf967, 0xf96a, 0xf969, 0xf968, 0x003f, 0x003f, 0xf9d3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0xc073, 0x003f, 0x003f, - 0xc365, 0xf5bf, 0xf6d5, 0x003f, 0xc5c7, 0xf7ce, 0x003f, 0x003f, - 0xf9d5, 0x003f, 0x003f, 0x003f, 0xc074, 0x003f, 0x003f, 0x003f, - 0xefb6, 0x003f, 0xf7cf, 0x003f, 0xf9a1, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xf900 .. 0xf9ff */ - 0xb05a, 0xa7f3, 0xa8ae, 0xb8eb, 0xb7c6, 0xa6ea, 0xa579, 0xc074, - 0xc074, 0xabb4, 0xaaf7, 0xb3e2, 0xa960, 0xc369, 0xc4ee, 0xc3b9, - 0xc5da, 0xc1b3, 0xbb72, 0xc5de, 0xbcd6, 0xaca5, 0xaf4f, 0xaf5f, - 0xb8a8, 0xb954, 0xc064, 0xb6c3, 0xa75a, 0xc4e6, 0xc4ea, 0xc4f5, - 0xc67d, 0xb450, 0xc0dd, 0xc2c5, 0xc4b0, 0xa9d4, 0xc3be, 0xc4fa, - 0xb459, 0xaed4, 0xaef6, 0xaf54, 0xada6, 0xa8d3, 0xa74e, 0xb3d2, - 0xbedb, 0xc372, 0xc46c, 0xbf63, 0xa6d1, 0xc4aa, 0xb8b8, 0xb8f4, - 0xc553, 0xbe7c, 0xc64f, 0xb84c, 0xb853, 0xbaf1, 0xdb77, 0xbffd, - 0xb3c0, 0xbdd7, 0xc362, 0xa7cb, 0xc5a2, 0xc5a4, 0xa863, 0xbd55, - 0xb8ef, 0xb970, 0xc253, 0xb9f0, 0xbcd3, 0xb25c, 0xba7c, 0xb2d6, - 0xc15c, 0xadae, 0xb0c7, 0xa6d8, 0xbbfe, 0xade2, 0xb857, 0xbaf0, - 0xb5d9, 0xb3ae, 0xc5aa, 0xced4, 0xbcd6, 0xbfd5, 0xa4a6, 0xb9e7, - 0xabe3, 0xb276, 0xb2a7, 0xa55f, 0xeda8, 0xab4b, 0xb45f, 0xa4a3, - 0xaa63, 0xbcc6, 0xafc1, 0xb0d1, 0xb6eb, 0xacd9, 0xb8ad, 0xbba1, - 0xb1fe, 0xa8b0, 0xa848, 0xac42, 0xad59, 0xb1b0, 0xb2a4, 0xab47, - 0xa8e2, 0x003f, 0xb1e7, 0xc2b3, 0xa87d, 0xbdcc, 0xb671, 0xc079, - 0xa766, 0xa46b, 0xc366, 0xaec8, 0xc26f, 0xc472, 0xbe5b, 0xc67a, - 0xc452, 0xbea4, 0xa44f, 0xbee4, 0xbefa, 0xf765, 0xa67e, 0xbca6, - 0xc5ca, 0xbcbf, 0xbaa7, 0xb7d2, 0xe6a3, 0x003f, 0xbd6d, 0xc170, - 0xbdfb, 0xbdac, 0xb373, 0xc1e5, 0xa643, 0xa648, 0xab7c, 0xaf50, - 0xb5f5, 0xbba1, 0xb747, 0xa9c0, 0xb1c9, 0xc0d4, 0xc3ae, 0xc279, - 0xa54f, 0xcbf1, 0xb9e7, 0xc0ad, 0xccb0, 0xacc2, 0xbcfc, 0xb2dc, - 0xb2e2, 0xb961, 0xb973, 0xc646, 0xbbe2, 0xa8d2, 0xc2a7, 0xc4bf, - 0xc1f5, 0xb463, 0xa446, 0xb9b1, 0xbc64, 0xa7bf, 0xaec6, 0xbcd6, - 0xbf52, 0xc0f8, 0xe764, 0xbff1, 0xc073, 0xb777, 0xa8bf, 0xbc42, - 0xccd8, 0xac68, 0xac79, 0xb7c8, 0xaf5b, 0xaf64, 0xb2b8, 0xafc3, - 0xc3fe, 0xa4bb, 0xbcae, 0xb3b0, 0xaddb, 0xb15b, 0xb25f, 0xbdfc, - 0xabdf, 0xb758, 0xaedf, 0xb276, 0xb6a9, 0xa751, 0xa64f, 0xbc69, - 0xa9f6, 0xa7f5, 0xb1f9, 0xaa64, 0xb27a, 0xb567, 0xbfa9, 0xf9d8, - 0xb8cc, 0xa8bd, 0xc2f7, 0xb0ce, 0xb7c4, 0xa75b, 0xbf4d, 0xbf5a, - 0xc4a9, 0x003f, 0xc5ec, 0xc5ef, 0xaa4c, 0xb24f, 0xc17b, 0xa5df, - 0xb2c1, 0xb2c9, 0xaaac, 0xaaa5, 0xc3d1, 0xa4b0, 0xaff9, 0xa8eb, - /* 0xfa00 .. 0xfaff */ - 0xa4c1, 0xabd7, 0xa9dd, 0xbf7d, 0xa676, 0xac7d, 0xbcc9, 0xbfe7, - 0xa6e6, 0xadb0, 0xa8a3, 0xb9f8, 0xc94a, 0xddfc, 0x003f, 0x003f, - 0xb6ef, 0x003f, 0xb4b8, 0x003f, 0x003f, 0xe8f9, 0x003f, 0xaf71, - 0x003f, 0xafab, 0xb2bb, 0xbad6, 0xb974, 0xbaeb, 0xa6d0, 0x003f, - 0x003f, 0x003f, 0xbdd1, 0x003f, 0x003f, 0xb668, 0xb3a3, 0x003f, - 0x003f, 0x003f, 0xb6ba, 0xb97d, 0xc05d, 0xc562, 0x003f, 0x003f, - 0xab56, 0xb9ac, 0xa74b, 0xab6a, 0xb6d4, 0xa8f5, 0xb3dc, 0xb9c4, - 0xbeb9, 0x003f, 0xbea5, 0xbc68, 0xc94b, 0xaeac, 0xb46e, 0xbca8, - 0xc367, 0xb1d3, 0xac4a, 0xb4bb, 0xb1f6, 0xaefc, 0xb25a, 0xba7e, - 0xb54e, 0x003f, 0xb55a, 0xb84f, 0xaac0, 0xace7, 0xace8, 0xafa7, - 0xafaa, 0xafac, 0xbad7, 0xbad5, 0xbd5c, 0xacf0, 0xb860, 0xbd6d, - 0xbfa7, 0xc163, 0xb870, 0xaacc, 0xafe4, 0x003f, 0x003f, 0xb5db, - 0xbdc5, 0xb5f8, 0xbfd6, 0xc2d4, 0xbbab, 0xc3d8, 0x003f, 0xb668, - 0xc3f8, 0xc554, 0xc057, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa8c3, 0x003f, 0xa5fe, 0xcbb6, 0xa552, 0xbeac, 0xab69, 0xa463, - 0xb3dc, 0xb0de, 0xb3f1, 0xdcda, 0xb6ef, 0xbc58, 0xa961, 0xa962, - 0xb141, 0xe959, 0xe1bc, 0xe1bb, 0xb16d, 0xdd64, 0xb1a6, 0xb756, - 0xb755, 0xbca8, 0x003f, 0xc367, 0xc0b9, 0xd967, 0xb76a, 0xb4ac, - 0xb1ce, 0xb4b8, 0xaed4, 0xb1e6, 0xa7fa, 0xa4ef, 0xb1fe, 0xac79, - 0x003f, 0xb4fe, 0xba7e, 0x003f, 0xb54e, 0xc140, 0xc0ef, 0xa5c7, - 0x003f, 0xe2d0, 0x003f, 0x003f, 0xe6b2, 0xbd45, 0xaf71, 0xb2b1, - 0xaabd, 0xdabf, 0x003f, 0xe6c3, 0xeab5, 0xb860, 0x003f, 0xb86c, - 0xbd6d, 0xdafc, 0xaacc, 0xafee, 0xb5d8, 0xeb64, 0xee75, 0xc2d0, - 0xb5f8, 0xbdd5, 0xbdd1, 0xbdd0, 0xbfd6, 0xbfd5, 0xbfd9, 0xc2d4, - 0xc5dc, 0xc3d8, 0xbfe9, 0xbff0, 0xeec8, 0xe478, 0xd847, 0xc3f8, - 0xb974, 0x003f, 0xc554, 0x003f, 0xc057, 0xf568, 0xc074, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xf87d, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfb00 .. 0xfbff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x002b, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xfe00 .. 0xfeff */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa14a, 0xa157, 0x003f, 0xa159, 0xa15b, 0xa15f, 0xa160, 0xa163, - 0xa164, 0xa167, 0xa168, 0xa16b, 0xa16c, 0xa16f, 0xa170, 0xa173, - 0xa174, 0xa177, 0xa178, 0xa17b, 0xa17c, 0x003f, 0x003f, 0x003f, - 0x003f, 0xa1c6, 0xa1c7, 0xa1ca, 0xa1cb, 0xa1c8, 0xa1c9, 0xa15c, - 0xa14d, 0xa14e, 0xa14f, 0x003f, 0xa151, 0xa152, 0xa153, 0xa154, - 0xa158, 0xa17d, 0xa17e, 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1cc, - 0xa1cd, 0xa1ce, 0xa1de, 0xa1df, 0xa1e0, 0xa1e1, 0xa1e2, 0x003f, - 0xa242, 0xa24c, 0xa24d, 0xa24e, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* 0xff00 .. 0xffff */ - 0x003f, 0xa149, 0x0022, 0xa1ad, 0xa243, 0xa248, 0xa1ae, 0x0027, - 0xa15d, 0xa15e, 0xa1af, 0xa1cf, 0xa141, 0xa1d0, 0xa144, 0xa1fe, - 0xa2af, 0xa2b0, 0xa2b1, 0xa2b2, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, - 0xa2b7, 0xa2b8, 0xa147, 0xa146, 0xa1d5, 0xa1d7, 0xa1d6, 0xa148, - 0xa249, 0xa2cf, 0xa2d0, 0xa2d1, 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, - 0xa2d6, 0xa2d7, 0xa2d8, 0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, - 0xa2de, 0xa2df, 0xa2e0, 0xa2e1, 0xa2e2, 0xa2e3, 0xa2e4, 0xa2e5, - 0xa2e6, 0xa2e7, 0xa2e8, 0x005b, 0xa240, 0x005d, 0x005e, 0xa1c4, - 0x0060, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, 0xa2ef, - 0xa2f0, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, - 0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa2fd, 0xa2fe, 0xa340, - 0xa341, 0xa342, 0xa343, 0xa161, 0xa155, 0xa162, 0xa1e3, 0x003f, - 0x003f, 0xa143, 0xa175, 0xa176, 0xa142, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0xa246, 0xa247, 0x003f, 0xa1c3, 0x007c, 0xa244, 0x003f, 0x003f, - 0xa278, 0xa1f6, 0xa1f4, 0xa1f7, 0xa1f5, 0xa1bd, 0xa1b3, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - /* defaults */ - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f -}; - -static const unsigned short uni2cp_high[256] = -{ - 0x0000, 0x0100, 0x0200, 0x0300, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x0400, 0x0500, 0x0600, - 0x0700, 0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x0e00, 0x0f00, - 0x1000, 0x1100, 0x1200, 0x1300, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x1400, 0x1500, - 0x1600, 0x1700, 0x1800, 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x1d00, - 0x1e00, 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, - 0x2600, 0x2700, 0x2800, 0x2900, 0x2a00, 0x2b00, 0x2c00, 0x2d00, - 0x2e00, 0x2f00, 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, - 0x3600, 0x3700, 0x3800, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, - 0x3e00, 0x3f00, 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, - 0x4600, 0x4700, 0x4800, 0x4900, 0x4a00, 0x4b00, 0x4c00, 0x4d00, - 0x4e00, 0x4f00, 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, - 0x5600, 0x5700, 0x5800, 0x5900, 0x5a00, 0x5b00, 0x5c00, 0x5d00, - 0x5e00, 0x5f00, 0x6000, 0x6100, 0x6200, 0x6300, 0x6400, 0x6500, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, 0x6b00, - 0x6b00, 0x6600, 0x6700, 0x6800, 0x6b00, 0x6b00, 0x6900, 0x6a00 -}; - -const struct dbcs_table cptable_950 = -{ - { 950, 2, 0x003f, 0x003f, "ANSI/OEM Traditional Chinese Big5" }, - cp2uni, - cp2uni_leadbytes, - uni2cp_low, - uni2cp_high, - { 0x81, 0xfe, 0x00, 0x00 } -}; diff --git a/reactos/tools/unicode/casemap.c b/reactos/tools/unicode/casemap.c deleted file mode 100644 index 7073243faab..00000000000 --- a/reactos/tools/unicode/casemap.c +++ /dev/null @@ -1,1647 +0,0 @@ -/* Unicode case mappings */ -/* Automatically generated; DO NOT EDIT!! */ - -#include "wine/unicode.h" - -const WCHAR wine_casemap_lower[3298] = -{ - /* index */ - 0x01bf, 0x02bf, 0x03bf, 0x0439, 0x0539, 0x0639, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0699, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0799, 0x0892, - 0x0100, 0x098f, 0x0100, 0x0100, 0x09ff, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0aff, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0be2, - /* 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, 0x0000, 0x0001, 0x0000, 0xff5d, 0x0000, 0x0000, - 0x0000, 0x0053, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0386 .. 0x03ff */ - 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, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0xffc4, 0x0000, - 0x0000, 0x0001, 0x0000, 0xfff9, 0x0001, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, - /* 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, - 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0500 .. 0x05ff */ - 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, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 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, 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, - /* 0x1f07 .. 0x1fff */ - 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x2490 .. 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, 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, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 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, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0xff1d .. 0xffff */ - 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, 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[3441] = -{ - /* index */ - 0x019f, 0x029f, 0x039f, 0x045a, 0x0556, 0x0655, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0754, 0x0854, - 0x0100, 0x0948, 0x0100, 0x0100, 0x09c8, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0ab2, 0x0bb2, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0c71, - /* 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, - 0x0000, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xff2e, 0xff32, 0x0000, 0xff33, 0xff33, - 0x0000, 0xff36, 0x0000, 0xff35, 0x0000, 0x0000, 0x0000, 0x0000, - 0xff33, 0x0000, 0x0000, 0xff31, 0x0000, 0x0000, 0x0000, 0x0000, - 0xff2f, 0xff2d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff2d, - 0x0000, 0x0000, 0xff2b, 0x0000, 0x0000, 0xff2a, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xff26, 0x0000, 0x0000, 0xff26, 0x0000, 0x0000, 0x0000, 0x0000, - 0xff26, 0x0000, 0xff27, 0xff27, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xff25, 0x0000, 0xffad, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0xffaa, 0xffb0, 0x0007, 0x0000, 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, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0501 .. 0x05ff */ - 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, - 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, - /* 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 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, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x2480 .. 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, - 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 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, 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, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0xff41 .. 0xffff */ - 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 -}; -const WCHAR wine_digitmap[4273] = -{ - /* index */ - 0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x028a, 0x0100, - 0x0100, 0x0384, 0x0474, 0x0564, 0x0654, 0x0744, 0x07f4, 0x08d4, - 0x0994, 0x0100, 0x0100, 0x0a2b, 0x0100, 0x0100, 0x0100, 0x0a9d, - 0x0b8d, 0x0c47, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0d21, 0x0100, 0x0100, 0x0100, 0x0dc1, 0x0100, 0x0100, 0x0ec1, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0fb1, - /* 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, - /* 0x0030 .. 0x00ff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xff80, 0xff80, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xff78, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0646 .. 0x06ff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xf9d0, 0xf9d0, 0xf9d0, 0xf9d0, 0xf9d0, 0xf9d0, - 0xf9d0, 0xf9d0, 0xf9d0, 0xf9d0, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xf940, 0xf940, 0xf940, 0xf940, 0xf940, 0xf940, - 0xf940, 0xf940, 0xf940, 0xf940, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, - /* 0x0906 .. 0x09ff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, 0xf6ca, - 0xf6ca, 0xf6ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xf64a, 0xf64a, 0xf64a, 0xf64a, 0xf64a, 0xf64a, 0xf64a, 0xf64a, - 0xf64a, 0xf64a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, - /* 0x0a10 .. 0x0aff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf5ca, 0xf5ca, - 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, 0xf5ca, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf54a, 0xf54a, - 0xf54a, 0xf54a, 0xf54a, 0xf54a, 0xf54a, 0xf54a, 0xf54a, 0xf54a, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0b10 .. 0x0bff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf4ca, 0xf4ca, - 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, 0xf4ca, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf44a, 0xf44a, - 0xf44a, 0xf44a, 0xf44a, 0xf44a, 0xf44a, 0xf44a, 0xf44a, 0xf44a, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0c10 .. 0x0cff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf3ca, 0xf3ca, - 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, 0xf3ca, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf34a, 0xf34a, - 0xf34a, 0xf34a, 0xf34a, 0xf34a, 0xf34a, 0xf34a, 0xf34a, 0xf34a, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0d10 .. 0x0dff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf2ca, 0xf2ca, - 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, 0xf2ca, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0e50 .. 0x0eff */ - 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, 0xf1e0, - 0xf1e0, 0xf1e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xf160, 0xf160, 0xf160, 0xf160, 0xf160, 0xf160, 0xf160, 0xf160, - 0xf160, 0xf160, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0f20 .. 0x0fff */ - 0xf110, 0xf110, 0xf110, 0xf110, 0xf110, 0xf110, 0xf110, 0xf110, - 0xf110, 0xf110, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1040 .. 0x10ff */ - 0xeff0, 0xeff0, 0xeff0, 0xeff0, 0xeff0, 0xeff0, 0xeff0, 0xeff0, - 0xeff0, 0xeff0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1369 .. 0x13ff */ - 0xecc8, 0xecc8, 0xecc8, 0xecc8, 0xecc8, 0xecc8, 0xecc8, 0xecc8, - 0xecc8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x178e .. 0x17ff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xe850, 0xe850, 0xe850, 0xe850, 0xe850, 0xe850, - 0xe850, 0xe850, 0xe850, 0xe850, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, - /* 0x1810 .. 0x18ff */ - 0xe820, 0xe820, 0xe820, 0xe820, 0xe820, 0xe820, 0xe820, 0xe820, - 0xe820, 0xe820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1946 .. 0x19ff */ - 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, 0xe6ea, - 0xe6ea, 0xe6ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xe660, 0xe660, 0xe660, 0xe660, 0xe660, 0xe660, - 0xe660, 0xe660, 0xe660, 0xe660, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, - /* 0x2026 .. 0x20ff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xdfc0, 0x0000, 0x0000, 0x0000, 0xdfc0, 0xdfc0, - 0xdfc0, 0xdfc0, 0xdfc0, 0xdfc0, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, - 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, - /* 0x2460 .. 0x24ff */ - 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, 0xdbd1, - 0xdbd1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xdbbd, 0xdbbd, 0xdbbd, 0xdbbd, - 0xdbbd, 0xdbbd, 0xdbbd, 0xdbbd, 0xdbbd, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xdba9, 0xdba9, 0xdba9, 0xdba9, 0xdba9, 0xdba9, 0xdba9, 0xdba9, - 0xdba9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xdb46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xdb3c, 0xdb3c, 0xdb3c, - 0xdb3c, 0xdb3c, 0xdb3c, 0xdb3c, 0xdb3c, 0xdb3c, 0x0000, 0xdb31, - /* 0x2700 .. 0x27ff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd8bb, 0xd8bb, - 0xd8bb, 0xd8bb, 0xd8bb, 0xd8bb, 0xd8bb, 0xd8bb, 0xd8bb, 0x0000, - 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, 0xd8b1, - 0xd8b1, 0x0000, 0xd8a7, 0xd8a7, 0xd8a7, 0xd8a7, 0xd8a7, 0xd8a7, - 0xd8a7, 0xd8a7, 0xd8a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0xff10 .. 0xffff */ - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 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_compatmap[1497] = -{ - /* index */ - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0200, 0x0300, 0x0100, 0x0100, 0x0100, 0x03da, 0x04d9, - /* 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, - /* 0xf900 .. 0xf9ff */ - 0x9348, 0x6df3, 0x95c8, 0x93c5, 0x75cd, 0x552d, 0x5adf, 0xa695, - 0xa694, 0x6048, 0x98c7, 0x5c7c, 0x603c, 0x68e9, 0x7d5b, 0x8676, - 0x8d2f, 0x8ea9, 0x8fe6, 0x977c, 0x70ee, 0x7406, 0x77c3, 0x7ac7, - 0x8b25, 0x9851, 0xa0d7, 0x5567, 0x5a59, 0x71e7, 0x78fd, 0x8d0e, - 0xa4fe, 0x642f, 0x76c9, 0x8caa, 0x9040, 0x69a4, 0x88b2, 0x8ef8, - 0x65a2, 0x6dee, 0x7440, 0x79d1, 0x97a2, 0x5659, 0x5889, 0x59af, - 0x6b94, 0x71a2, 0x78de, 0x7db4, 0x86cd, 0x8cd1, 0x8d26, 0x94b8, - 0x9dfa, 0xa236, 0xa4c0, 0x7f51, 0x8043, 0x8463, 0x8a8b, 0x99c5, - 0xa53f, 0x9195, 0x5f9d, 0x65c1, 0x831c, 0x8739, 0x791c, 0x7f83, - 0x937a, 0x9dae, 0x5f8e, 0x6317, 0x70c7, 0x748d, 0x75c1, 0x83e0, - 0x84e7, 0x9cfa, 0x5980, 0x8738, 0x5888, 0x5877, 0x80c6, 0x8467, - 0x8a99, 0x9d1c, 0x9226, 0x6974, 0x70a6, 0x91a1, 0x54db, 0x6288, - 0x66b2, 0x7a26, 0x7c0e, 0x59b4, 0x7f97, 0x565a, 0x6643, 0x54a6, - 0x7364, 0x6c0f, 0x83b8, 0x5a58, 0x5ef2, 0x7d94, 0x8adb, 0x913b, - 0x724a, 0x963f, 0x7316, 0x698b, 0x8971, 0x6a2b, 0x7bef, 0x5537, - 0x57f1, 0x5850, 0x6f07, 0x836c, 0x88f3, 0x9155, 0x9851, 0x5976, - 0x5ac2, 0x5ff2, 0x656a, 0x6c42, 0x767a, 0x7fa5, 0x9c27, 0xa0e3, - 0xa50f, 0xa545, 0x5911, 0x6d3b, 0x71eb, 0x95d5, 0x64e6, 0x6801, - 0x6870, 0x6b09, 0x7591, 0x77b6, 0x7af5, 0x8035, 0x845e, 0x86d8, - 0x958e, 0x8b55, 0x9689, 0x99af, 0x587b, 0x5906, 0x5b1f, 0x7729, - 0x8f22, 0x9109, 0x6527, 0x6652, 0x69d7, 0x7209, 0x8298, 0x79ce, - 0x553c, 0x5d50, 0x623d, 0x640f, 0x6670, 0x7a05, 0x7abb, 0x85eb, - 0x8696, 0x9883, 0x9d44, 0x9d95, 0x9e64, 0x55d6, 0x7ff8, 0x97fd, - 0x9d00, 0x6728, 0x54cc, 0x571f, 0x6232, 0x6282, 0x6bdb, 0x7043, - 0x780e, 0x7c81, 0x8b3a, 0x96b9, 0xa5c9, 0x6cc3, 0x9c68, 0x58c2, - 0x6db3, 0x6e2a, 0x7377, 0x74d1, 0x7a3d, 0x7b8c, 0x7e9d, 0x8341, - 0x9e8e, 0x579c, 0x685c, 0x9ca5, 0x5657, 0x6344, 0x7414, 0x9553, - 0x65b3, 0x676b, 0x6e3d, 0x79ac, 0x9caa, 0x584c, 0x5a31, 0x6286, - 0x6c33, 0x6d6d, 0x6ec6, 0x7302, 0x7a22, 0x7bfd, 0x8593, 0x8ee8, - 0x8ef9, 0x97e3, 0x9cf8, 0x5954, 0x74ce, 0x5a30, 0x77e2, 0x7aa9, - 0x8c0a, 0x9cb2, 0xa265, 0xa4ac, 0x6da3, 0x73d6, 0x87f2, 0x80d4, - 0x8128, 0x8299, 0x78c6, 0x769e, 0x915c, 0x54c3, 0x8938, 0x583b, - /* 0xfa00 .. 0xfaff */ - 0x5807, 0x64a5, 0x68d1, 0x82d3, 0x6181, 0x7319, 0x6cae, 0x9534, - 0x8e44, 0x9c44, 0x8f81, 0x64c8, 0x5734, 0x5bb3, 0x0000, 0x0000, - 0x5e4a, 0x0000, 0x6c62, 0x0000, 0x0000, 0x57c9, 0x7914, 0x7cb3, - 0x7f24, 0x7f45, 0x7f4b, 0x7f74, 0x9d3a, 0x82a1, 0x859f, 0x0000, - 0x8bf2, 0x0000, 0x90d6, 0x0000, 0x0000, 0x9613, 0x96d7, 0x0000, - 0x0000, 0x0000, 0x9ec5, 0x9ed1, 0x9efc, 0xa387, 0x0000, 0x0000, - 0x557e, 0x56b6, 0x571b, 0x5896, 0x58b0, 0x591c, 0x5b67, 0x5bcf, - 0x5c30, 0x5e07, 0x5e6e, 0x6229, 0x6232, 0x6657, 0x672a, 0x674f, - 0x67b2, 0x6b0e, 0x6ba0, 0x6c4e, 0x6e41, 0x7332, 0x73d4, 0x74db, - 0x7726, 0x77e2, 0x79d8, 0x7e46, 0x7ef2, 0x7efc, 0x7efa, 0x7f01, - 0x7f06, 0x7f0c, 0x7f3b, 0x7f3b, 0x7fec, 0x802c, 0x816a, 0x839d, - 0x83b1, 0x83e8, 0x8518, 0x85aa, 0x8791, 0x881c, 0x881b, 0x89f8, - 0x8eb0, 0x8f35, 0x909f, 0x90d6, 0x926f, 0x92a3, 0x9550, 0x95d1, - 0x9c7b, 0x9d96, 0x9dd1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x53b6, 0x5744, 0x56f6, 0x550d, 0x56d1, 0x570b, 0x5851, 0x5883, - 0x5b25, 0x5adc, 0x5b1f, 0x5b67, 0x5dde, 0x5e36, 0x5ec6, 0x5ed5, - 0x5fe2, 0x60a7, 0x6450, 0x6456, 0x64e5, 0x6528, 0x6652, 0x66c7, - 0x6680, 0x6705, 0x66d6, 0x6767, 0x67a8, 0x6937, 0x698e, 0x69c3, - 0x6ac6, 0x6be3, 0x6c85, 0x6c88, 0x6cc2, 0x70e4, 0x7124, 0x72aa, - 0x7443, 0x7432, 0x7488, 0x7583, 0x76d2, 0x7d0a, 0x7797, 0x7810, - 0x788a, 0x79d0, 0x7a64, 0x7a98, 0x7b79, 0x7b7a, 0x7c24, 0x7c34, - 0x7c4c, 0x7ca1, 0x7c96, 0x7e21, 0x8005, 0x8113, 0x81cd, 0x82ac, - 0x8344, 0x848d, 0x8553, 0x889f, 0x893b, 0x8cc4, 0x8e8b, 0x8ecf, - 0x8ede, 0x9006, 0x903e, 0x9010, 0x9045, 0x9041, 0x902f, 0x907a, - 0x90ca, 0x9247, 0x9476, 0x95af, 0x96d5, 0x97b1, 0x9bb6, 0x9c1c, - 0x9c8e, 0x9d12, 0x9d35, 0x9d40, 0x9d6f, 0xa045, 0xa4ce, 0x2d7b, - 0x2d74, 0x3904, 0x40cb, 0x4545, 0x4565, 0x5774, 0x61fa, 0x83fc, - 0xa46b, 0xa4b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0xfe26 .. 0xfeff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x21f5, 0x21e3, 0x21e1, 0x022c, 0x022b, 0x01f3, - 0x01f3, 0x0244, 0x0245, 0x31db, 0x31db, 0x31d5, 0x31d5, 0x31cd, - 0x31cd, 0x31c9, 0x31c9, 0x31cb, 0x31cb, 0x31cb, 0x31cb, 0x0000, - 0x0000, 0x0214, 0x0215, 0x21f5, 0x21f4, 0x21f3, 0x21f2, 0x0212, - 0x0211, 0x0210, 0x01dc, 0x31b0, 0x01dc, 0x0000, 0x01e7, 0x01e5, - 0x01e9, 0x01ca, 0x21bc, 0x01cf, 0x01cf, 0x0220, 0x0221, 0x31b7, - 0x31b7, 0x01c4, 0x01c6, 0x01c9, 0x01c9, 0x01ca, 0x01d8, 0x01d9, - 0x01d7, 0x0000, 0x01f4, 0x01bb, 0x01bb, 0x01d5, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x07a1, 0x07a1, 0x07a0, 0x07a0, 0x079f, 0x079f, - 0x079e, 0x079e, 0x079d, 0x079d, 0x079c, 0x079b, 0x079a, 0x079a, - 0x0799, 0x0799, 0x0798, 0x0797, 0x0796, 0x0796, 0x0795, 0x0795, - 0x0794, 0x0793, 0x0792, 0x0792, 0x0791, 0x0790, 0x078f, 0x078f, - 0x078e, 0x078d, 0x078c, 0x078c, 0x078b, 0x078a, 0x0789, 0x0789, - 0x0788, 0x0787, 0x0786, 0x0786, 0x0785, 0x0785, 0x0784, 0x0784, - 0x0783, 0x0783, 0x0782, 0x0782, 0x0781, 0x0780, 0x077f, 0x077f, - 0x077e, 0x077d, 0x077c, 0x077c, 0x077b, 0x077a, 0x0779, 0x0779, - 0x0778, 0x0777, 0x0776, 0x0776, 0x0775, 0x0774, 0x0773, 0x0773, - 0x0772, 0x0771, 0x0770, 0x0770, 0x076f, 0x076e, 0x076d, 0x076d, - 0x076c, 0x076b, 0x076a, 0x0770, 0x076f, 0x076e, 0x076d, 0x076d, - 0x076c, 0x076b, 0x076a, 0x076a, 0x0769, 0x0768, 0x0767, 0x0767, - 0x0766, 0x0765, 0x0764, 0x0764, 0x0763, 0x0762, 0x0761, 0x0761, - 0x0760, 0x075f, 0x075e, 0x075e, 0x075d, 0x075c, 0x075b, 0x075b, - 0x075a, 0x075a, 0x0759, 0x0759, 0x0758, 0x0757, 0x0756, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, - /* 0xff01 .. 0xffff */ - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x2a26, 0x2a26, - 0x30a1, 0x30aa, 0x30aa, 0x309d, 0x3196, 0x318c, 0x313a, 0x313b, - 0x313c, 0x313d, 0x313e, 0x3177, 0x3178, 0x3179, 0x3154, 0x318c, - 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3135, 0x3136, 0x3137, - 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, - 0x3140, 0x3142, 0x3143, 0x3144, 0x3145, 0x3145, 0x3145, 0x3145, - 0x3145, 0x3145, 0x3147, 0x3149, 0x314b, 0x314d, 0x314f, 0x314f, - 0x314f, 0x314f, 0x314f, 0x3150, 0x3151, 0x3152, 0x3152, 0x3152, - 0x3152, 0x3152, 0x3152, 0x3153, 0x3156, 0x30fb, 0x30fb, 0x31c4, - 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, - 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, - 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, - 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x3190, 0x0000, 0x0000, - 0x0000, 0x318d, 0x318d, 0x318d, 0x318d, 0x318d, 0x318d, 0x0000, - 0x0000, 0x318b, 0x318b, 0x318b, 0x318b, 0x318b, 0x318b, 0x0000, - 0x0000, 0x3189, 0x3189, 0x3189, 0x3189, 0x3189, 0x3189, 0x0000, - 0x0000, 0x3187, 0x3187, 0x3187, 0x0000, 0x0000, 0x0000, 0x00c2, - 0x00c2, 0x00ca, 0x00cc, 0x00c2, 0x00c0, 0x20c3, 0x0000, 0x251a, - 0x21a7, 0x21a7, 0x21a7, 0x21a7, 0x25b3, 0x25dd, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -}; diff --git a/reactos/tools/unicode/collation.c b/reactos/tools/unicode/collation.c deleted file mode 100644 index 446b03dc4e2..00000000000 --- a/reactos/tools/unicode/collation.c +++ /dev/null @@ -1,1657 +0,0 @@ -/* Unicode collation element table */ -/* generated from www.unicode.org/reports/tr10/allkeys.txt */ -/* DO NOT EDIT!! */ - -const unsigned int collation_table[12800] = -{ - /* index */ - 0x00000200, 0x00000300, 0x00000400, 0x00000500, 0x00000600, 0x00000700, 0x00000800, 0x00000900, - 0x00000100, 0x00000a00, 0x00000b00, 0x00000c00, 0x00000d00, 0x00000e00, 0x00000f00, 0x00001000, - 0x00001100, 0x00001200, 0x00001300, 0x00001400, 0x00001500, 0x00001600, 0x00001700, 0x00001800, - 0x00001900, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00001a00, 0x00001b00, - 0x00001c00, 0x00001d00, 0x00001e00, 0x00001f00, 0x00002000, 0x00002100, 0x00002200, 0x00002300, - 0x00002400, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00002500, 0x00002600, - 0x00002700, 0x00002800, 0x00002900, 0x00002a00, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00002b00, 0x00002c00, 0x00002d00, 0x00002e00, 0x00002f00, 0x00003000, 0x00003100, - /* defaults */ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0000 .. 0x00ff */ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x02010111, 0x02020111, 0x02030111, 0x02040111, 0x02050111, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x02090111, 0x024b0111, 0x02700111, 0x02a90111, 0x09e00111, 0x02aa0111, 0x02a70111, 0x02690111, - 0x027a0111, 0x027b0111, 0x02a20111, 0x039f0111, 0x022d0111, 0x02210111, 0x02550111, 0x02a40111, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0x02370111, 0x02350111, 0x03a30111, 0x03a40111, 0x03a50111, 0x024e0111, - 0x02a10111, 0x0a150151, 0x0a290141, 0x0a3d0151, 0x0a490151, 0x0a650151, 0x0a910151, 0x0a990151, - 0x0ab90151, 0x0ad30161, 0x0ae70141, 0x0af70141, 0x0b030161, 0x0b2b0151, 0x0b330151, 0x0b4b0161, - 0x0b670141, 0x0b730141, 0x0b7f0141, 0x0ba70151, 0x0bbf0151, 0x0bd70141, 0x0bef0151, 0x0bfb0141, - 0x0c030151, 0x0c070141, 0x0c130141, 0x027c0111, 0x02a60111, 0x027d0111, 0x020f0111, 0x021b0111, - 0x020c0111, 0x0a150111, 0x0a290111, 0x0a3d0111, 0x0a490111, 0x0a650111, 0x0a910111, 0x0a990111, - 0x0ab90111, 0x0ad30111, 0x0ae70111, 0x0af70111, 0x0b030111, 0x0b2b0111, 0x0b330111, 0x0b4b0111, - 0x0b670111, 0x0b730111, 0x0b7f0111, 0x0ba70111, 0x0bbf0111, 0x0bd70111, 0x0bef0111, 0x0bfb0111, - 0x0c030111, 0x0c070111, 0x0c130111, 0x027e0111, 0x03a70111, 0x027f0111, 0x03aa0111, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02060111, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x02090141, 0x024c0111, 0x09df0111, 0x09e10111, 0x09de0111, 0x09e20111, 0x03a80111, 0x029c0111, - 0x02140111, 0x029f0111, 0x0a150181, 0x02780111, 0x03a60111, 0x02200111, 0x02a00111, 0x02100111, - 0x030a0111, 0x03a00111, 0x0a0d0151, 0x0a0e0151, 0x020d0111, 0x0c9f0121, 0x029d0111, 0x025f0111, - 0x02190111, 0x0a0c0151, 0x0b4b01a1, 0x02790111, 0x0a0c0171, 0x0a0c0171, 0x0a0e0171, 0x024f0111, - 0x0a150151, 0x0a150151, 0x0a150151, 0x0a150151, 0x0a150151, 0x0a150151, 0x0a190121, 0x0a3d0151, - 0x0a650151, 0x0a650151, 0x0a650151, 0x0a650151, 0x0ad30161, 0x0ad30161, 0x0ad30161, 0x0ad30161, - 0x0a5d0121, 0x0b330151, 0x0b4b0161, 0x0b4b0161, 0x0b4b0161, 0x0b4b0161, 0x0b4b0161, 0x03a20111, - 0x0b530121, 0x0bd70141, 0x0bd70141, 0x0bd70141, 0x0bd70141, 0x0c070141, 0x0c3b0121, 0x0ba70131, - 0x0a150111, 0x0a150111, 0x0a150111, 0x0a150111, 0x0a150111, 0x0a150111, 0x0a190111, 0x0a3d0111, - 0x0a650111, 0x0a650111, 0x0a650111, 0x0a650111, 0x0ad30111, 0x0ad30111, 0x0ad30111, 0x0ad30111, - 0x0a5d0111, 0x0b330111, 0x0b4b0111, 0x0b4b0111, 0x0b4b0111, 0x0b4b0111, 0x0b4b0111, 0x03a10111, - 0x0b530111, 0x0bd70111, 0x0bd70111, 0x0bd70111, 0x0bd70111, 0x0c070111, 0x0c3b0111, 0x0c070111, - /* 0x0100 .. 0x01ff */ - 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a3d0151, 0x0a3d0111, - 0x0a3d0151, 0x0a3d0111, 0x0a3d0151, 0x0a3d0111, 0x0a3d0151, 0x0a3d0111, 0x0a490151, 0x0a490111, - 0x0a4d0121, 0x0a4d0111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, - 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, 0x0a990151, 0x0a990111, 0x0a990151, 0x0a990111, - 0x0a990151, 0x0a990111, 0x0a990151, 0x0a990111, 0x0ab90151, 0x0ab90111, 0x0ac50131, 0x0ac50111, - 0x0ad30161, 0x0ad30111, 0x0ad30161, 0x0ad30111, 0x0ad30161, 0x0ad30111, 0x0ad30161, 0x0ad30111, - 0x0ad30161, 0x0ad70111, 0x0ad30181, 0x0ad30131, 0x0ae70141, 0x0ae70111, 0x0af70141, 0x0af70111, - 0x0b7b0111, 0x0b030161, 0x0b030111, 0x0b030161, 0x0b030111, 0x0b030161, 0x0b030111, 0x0b030181, - 0x0b030131, 0x0b0b0121, 0x0b0b0111, 0x0b330151, 0x0b330111, 0x0b330151, 0x0b330111, 0x0b330151, - 0x0b330111, 0x0c580121, 0x0b470121, 0x0b470111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, - 0x0b4b0161, 0x0b4b0111, 0x0b4b0181, 0x0b4b0131, 0x0b7f0141, 0x0b7f0111, 0x0b7f0141, 0x0b7f0111, - 0x0b7f0141, 0x0b7f0111, 0x0ba70151, 0x0ba70111, 0x0ba70151, 0x0ba70111, 0x0ba70151, 0x0ba70111, - 0x0ba70151, 0x0ba70111, 0x0bbf0151, 0x0bbf0111, 0x0bbf0151, 0x0bbf0111, 0x0bc30121, 0x0bc30111, - 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, - 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bfb0141, 0x0bfb0111, 0x0c070141, 0x0c070111, - 0x0c070141, 0x0c130141, 0x0c130111, 0x0c130141, 0x0c130111, 0x0c130141, 0x0c130111, 0x0ba70131, - 0x0a310111, 0x0a350121, 0x0a390121, 0x0a390111, 0x0c4f0121, 0x0c4f0111, 0x0b570121, 0x0a410121, - 0x0a410111, 0x0a510121, 0x0a550121, 0x0a590121, 0x0a590111, 0x0a610111, 0x0a690121, 0x0a6d0121, - 0x0a710121, 0x0a950121, 0x0a950111, 0x0aa50121, 0x0aad0121, 0x0ac10111, 0x0ae30121, 0x0adf0121, - 0x0afb0121, 0x0afb0111, 0x0b0f0111, 0x0b230111, 0x0be30121, 0x0b3b0121, 0x0b3f0111, 0x0b5b0121, - 0x0b4b0161, 0x0b4b0111, 0x0ab50121, 0x0ab50111, 0x0b6b0121, 0x0b6b0111, 0x0b830121, 0x0c470121, - 0x0c470111, 0x0baf0121, 0x0bb30111, 0x0bc70111, 0x0bcb0121, 0x0bcb0111, 0x0bcf0121, 0x0bd70141, - 0x0bd70111, 0x0beb0121, 0x0bf30121, 0x0c0f0121, 0x0c0f0111, 0x0c170121, 0x0c170111, 0x0c270121, - 0x0c2b0121, 0x0c2b0111, 0x0c2f0111, 0x0c430111, 0x0c4b0121, 0x0c4b0111, 0x0c610111, 0x0c3f0111, - 0x0c710111, 0x0c750111, 0x0c790111, 0x0c7d0111, 0x0a490171, 0x0a490171, 0x0a490131, 0x0b030181, - 0x0b030181, 0x0b030131, 0x0b330171, 0x0b330171, 0x0b330131, 0x0a150151, 0x0a150111, 0x0ad30161, - 0x0ad30111, 0x0b4b0161, 0x0b4b0111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bd70141, - 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0a690111, 0x0a150151, 0x0a150111, - 0x0a150151, 0x0a150111, 0x0a190121, 0x0a190111, 0x0aa10121, 0x0aa10111, 0x0a990151, 0x0a990111, - 0x0af70141, 0x0af70111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, 0x0c270121, 0x0c270111, - 0x0ae70111, 0x0a490171, 0x0a490171, 0x0a490131, 0x0a990151, 0x0a990111, 0x0ac10121, 0x0c3f0121, - 0x0b330151, 0x0b330111, 0x0a150151, 0x0a150111, 0x0a190121, 0x0a190111, 0x0b530121, 0x0b530111, - /* 0x0200 .. 0x02ff */ - 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, - 0x0ad30161, 0x0ad30111, 0x0ad30161, 0x0ad30111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, - 0x0b7f0141, 0x0b7f0111, 0x0b7f0141, 0x0b7f0111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, - 0x0ba70151, 0x0ba70111, 0x0bbf0151, 0x0bbf0111, 0x0c370121, 0x0c370111, 0x0ab90151, 0x0ab90111, - 0xffffffff, 0xffffffff, 0x0b630121, 0x0b630111, 0x0c1b0121, 0x0c1b0111, 0x0a150151, 0x0a150111, - 0x0a650151, 0x0a650111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, - 0x0b4b0161, 0x0b4b0111, 0x0c070141, 0x0c070111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0a1d0111, 0x0a210111, 0x0a250111, 0x0a350111, 0x0b570111, 0x0a450111, 0x0a510111, 0x0a550111, - 0x0a750111, 0x0a6d0111, 0x0a790111, 0x0a710111, 0x0a7d0111, 0x0a810111, 0x0a850111, 0x0aef0111, - 0x0aa50111, 0x0ab10111, 0x0a9d0111, 0x0aad0111, 0x0a8d0111, 0x0bdf0111, 0x0ac90111, 0x0acd0111, - 0x0adf0111, 0x0ae30111, 0x0adb0111, 0x0b130111, 0x0b170111, 0x0b1b0111, 0x0b1f0111, 0x0be30111, - 0x0be70111, 0x0b2f0111, 0x0b3b0111, 0x0b430111, 0x0b370111, 0x0b5b0111, 0x0b4f0111, 0x0b5f0111, - 0x0b6f0111, 0x0b870111, 0x0b8b0111, 0x0b8f0111, 0x0b930111, 0x0b970111, 0x0b9b0111, 0x0b9f0111, - 0x0b830111, 0x0ba30111, 0x0bab0111, 0x0baf0111, 0x0af30111, 0x0bb70111, 0x0bbb0111, 0x0bd30111, - 0x0bcf0111, 0x0bdb0111, 0x0beb0111, 0x0bf30111, 0x0bf70111, 0x0bff0111, 0x0b270111, 0x0c0b0111, - 0x0c1f0111, 0x0c230111, 0x0c270111, 0x0c330111, 0x0c530111, 0x0c5b0111, 0x0c6d0111, 0x0c810111, - 0x0c850111, 0x0a2d0111, 0x0a890111, 0x0aa90111, 0x0abd0111, 0x0aeb0111, 0x0aff0111, 0x0b070111, - 0x0b770111, 0x0c650111, 0x0c690111, 0x0a490131, 0x0a490131, 0x0a490131, 0x0bbf0131, 0x0bbf0131, - 0x0bbf0131, 0x0a910131, 0x0b030131, 0x0b030131, 0x0c890111, 0x0c8d0111, 0xffffffff, 0xffffffff, - 0x0ab90191, 0x0ac90121, 0x0ae70171, 0x0b7f0191, 0x0b870121, 0x0b8f0121, 0x0ba30121, 0x0bfb0171, - 0x0c070171, 0x02e90111, 0x02eb0111, 0x0ad10111, 0x0c580111, 0x0ad20111, 0x0c5a0111, 0x0c5f0111, - 0x0c570111, 0x0c600111, 0x02ec0111, 0x02ed0111, 0x02ee0111, 0x02ef0111, 0x02f00111, 0x02f10111, - 0x02f20111, 0x02f30111, 0x02f40111, 0x02f50111, 0x02f60111, 0x02f70111, 0x02f80111, 0x02f90111, - 0x09d30111, 0x09d40111, 0x02fa0111, 0x02fb0111, 0x02fc0111, 0x02fd0111, 0x02fe0111, 0x02ff0111, - 0x02120111, 0x02130111, 0x02150111, 0x021a0111, 0x020e0111, 0x02160111, 0x03000111, 0xffffffff, - 0x0aad0131, 0x0b0301b1, 0x0ba70181, 0x0c030191, 0x0c5b0121, 0x03010111, 0x03020111, 0x03030111, - 0x03040111, 0x03050111, 0x03060111, 0x03070111, 0x03080111, 0x03090111, 0x0c590111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0300 .. 0x03ff */ - 0x00000611, 0x00000511, 0x00000811, 0x00000e11, 0x00001311, 0x00001411, 0x00000711, 0x00000f11, - 0x00000c11, 0x00001511, 0x00000a11, 0x00000d11, 0x00000911, 0x00001611, 0x00001711, 0x00001811, - 0x00001911, 0x00001a11, 0x00001b11, 0x00000311, 0x00000411, 0x00001c11, 0x00001d11, 0x00001e11, - 0x00001f11, 0x00002011, 0x00002111, 0x00002211, 0x00002311, 0x00002411, 0x00002511, 0x00002611, - 0x00002711, 0x00002811, 0x00002911, 0x00002a11, 0x00002b11, 0x00002c11, 0x00002d11, 0x00001111, - 0x00001211, 0x00002e11, 0x00002f11, 0x00003011, 0x00003111, 0x00003211, 0x00003311, 0x00003411, - 0x00003511, 0x00003611, 0x00000211, 0x00003711, 0x00003811, 0x00003911, 0x00003a11, 0x00003b11, - 0x00001011, 0x00003c11, 0x00003d11, 0x00003e11, 0x00003f11, 0x00004011, 0x00004111, 0x00004211, - 0x00000611, 0x00000511, 0x00000b11, 0x00000311, 0x00000c11, 0x00004311, 0x00004411, 0x00004511, - 0x00004611, 0x00004711, 0x00004811, 0x00004911, 0x00004a11, 0x00004b11, 0x00004c11, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x00004d11, 0x00004e11, 0x00004f11, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x02e90111, 0x02ea0111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0x0c9b0111, 0xffffffff, 0xffffffff, 0xffffffff, 0x02350111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x020d0111, 0x02140111, 0x0c910121, 0x025f0111, - 0x0c950131, 0x0c990121, 0x0c9b0121, 0xffffffff, 0x0ca20121, 0xffffffff, 0x0ca80121, 0x0cac0121, - 0x0c9b0111, 0x0c910121, 0x0c920131, 0x0c930121, 0x0c940121, 0x0c950131, 0x0c980121, 0x0c990121, - 0x0c9a0131, 0x0c9b0121, 0x0c9d0131, 0x0c9e0121, 0x0c9f0131, 0x0ca00121, 0x0ca10121, 0x0ca20121, - 0x0ca30131, 0x0ca50131, 0xffffffff, 0x0ca60131, 0x0ca70121, 0x0ca80121, 0x0ca90131, 0x0caa0121, - 0x0cab0121, 0x0cac0121, 0x0c9b0121, 0x0ca80121, 0x0c910111, 0x0c950111, 0x0c990111, 0x0c9b0111, - 0x0ca80111, 0x0c910111, 0x0c920111, 0x0c930111, 0x0c940111, 0x0c950111, 0x0c980111, 0x0c990111, - 0x0c9a0111, 0x0c9b0111, 0x0c9d0111, 0x0c9e0111, 0x0c9f0111, 0x0ca00111, 0x0ca10111, 0x0ca20111, - 0x0ca30111, 0x0ca50111, 0x0ca60141, 0x0ca60111, 0x0ca70111, 0x0ca80111, 0x0ca90111, 0x0caa0111, - 0x0cab0111, 0x0cac0111, 0x0c9b0111, 0x0ca80111, 0x0ca20111, 0x0ca80111, 0x0cac0111, 0xffffffff, - 0x0c920121, 0x0c9a0121, 0x0ca80131, 0x0ca80131, 0x0ca80131, 0x0ca90121, 0x0ca30121, 0x0c9d0121, - 0xffffffff, 0xffffffff, 0x0c970121, 0x0c970111, 0x0c960121, 0x0c960111, 0x0ca40121, 0x0ca40111, - 0x0cad0121, 0x0cad0111, 0x0cae0121, 0x0cae0111, 0x0caf0121, 0x0caf0111, 0x0cb00121, 0x0cb00111, - 0x0cb10121, 0x0cb10111, 0x0cb20121, 0x0cb20111, 0x0cb30121, 0x0cb30111, 0x0cb40121, 0x0cb40111, - 0x0c9d0121, 0x0ca50121, 0x0ca60121, 0x0c9c0111, 0x0c9a0141, 0x0c950121, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0400 .. 0x04ff */ - 0x0cf10121, 0x0cf10121, 0x0ce50121, 0x0ce90121, 0x0cf90121, 0x0d110121, 0x0d210121, 0x0d250121, - 0x0d2d0121, 0x0d4d0121, 0x0d650121, 0x0d9d0121, 0x0da10121, 0x0d190121, 0x0da90121, 0x0e050121, - 0x0cb50121, 0x0ccd0121, 0x0cd10121, 0x0cd50131, 0x0ce10121, 0x0cf10121, 0x0cfd0121, 0x0d090121, - 0x0d190121, 0x0d290121, 0x0d310121, 0x0d490121, 0x0d510121, 0x0d550121, 0x0d690121, 0x0d790121, - 0x0d850121, 0x0d8d0121, 0x0d950121, 0x0da50121, 0x0dc10121, 0x0dc50121, 0x0de10121, 0x0de90121, - 0x0e090121, 0x0e0d0121, 0x0e110121, 0x0e150121, 0x0e1d0121, 0x0e290121, 0x0e310121, 0x0e350121, - 0x0cb50111, 0x0ccd0111, 0x0cd10111, 0x0cd50111, 0x0ce10111, 0x0cf10111, 0x0cfd0111, 0x0d090111, - 0x0d190111, 0x0d290111, 0x0d310111, 0x0d490111, 0x0d510111, 0x0d550111, 0x0d690111, 0x0d790111, - 0x0d850111, 0x0d8d0111, 0x0d950111, 0x0da50111, 0x0dc10111, 0x0dc50111, 0x0de10111, 0x0de90111, - 0x0e090111, 0x0e0d0111, 0x0e110111, 0x0e150111, 0x0e1d0111, 0x0e290111, 0x0e310111, 0x0e350111, - 0x0cf10111, 0x0cf10111, 0x0ce50111, 0x0ce90111, 0x0cf90111, 0x0d110111, 0x0d210111, 0x0d250111, - 0x0d2d0111, 0x0d4d0111, 0x0d650111, 0x0d9d0111, 0x0da10111, 0x0d190111, 0x0da90111, 0x0e050111, - 0x0dd10121, 0x0dd10111, 0x0e250121, 0x0e250111, 0x0e390121, 0x0e390111, 0x0e3d0121, 0x0e3d0111, - 0x0e450121, 0x0e450111, 0x0e410121, 0x0e410111, 0x0e490121, 0x0e490111, 0x0e4d0121, 0x0e4d0111, - 0x0e510121, 0x0e510111, 0x0e550121, 0x0e550111, 0x0e590121, 0x0e590111, 0x0e5d0121, 0x0e5d0111, - 0x0dbd0121, 0x0dbd0111, 0x0ddd0121, 0x0ddd0111, 0x0dd90121, 0x0dd90111, 0x0dd50121, 0x0dd50111, - 0x0d810121, 0x0d810111, 0x030b0111, 0x00005411, 0x00005511, 0x00005611, 0x00005711, 0xffffffff, - 0x00000001, 0x00000001, 0xffffffff, 0xffffffff, 0x0e210121, 0x0e210111, 0x0d890121, 0x0d890111, - 0x0cd50141, 0x0cd50121, 0x0cd90121, 0x0cd90111, 0x0cdd0121, 0x0cdd0111, 0x0d050121, 0x0d050111, - 0x0ced0121, 0x0ced0111, 0x0d350121, 0x0d350111, 0x0d450121, 0x0d450111, 0x0d410121, 0x0d410111, - 0x0d3d0121, 0x0d3d0111, 0x0d590121, 0x0d590111, 0x0d610121, 0x0d610111, 0x0d7d0121, 0x0d7d0111, - 0x0e610121, 0x0e610111, 0x0d910121, 0x0d910111, 0x0d990121, 0x0d990111, 0x0db50121, 0x0db50111, - 0x0db90121, 0x0db90111, 0x0dc90121, 0x0dc90111, 0x0de50121, 0x0de50111, 0x0df10121, 0x0df10111, - 0x0df90121, 0x0df90111, 0x0dcd0121, 0x0dcd0111, 0x0dfd0121, 0x0dfd0111, 0x0e010121, 0x0e010111, - 0x0e650111, 0x0cfd0121, 0x0cfd0111, 0x0d390121, 0x0d390111, 0xffffffff, 0xffffffff, 0x0d5d0121, - 0x0d5d0111, 0xffffffff, 0xffffffff, 0x0df50121, 0x0df50111, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0cb90121, 0x0cb90111, 0x0cbd0121, 0x0cbd0111, 0x0cc90121, 0x0cc90111, 0x0cf50121, 0x0cf50111, - 0x0cc10121, 0x0cc10111, 0x0cc50121, 0x0cc50111, 0x0d010121, 0x0d010111, 0x0d0d0121, 0x0d0d0111, - 0x0d150121, 0x0d150111, 0x0d190121, 0x0d190111, 0x0d1d0121, 0x0d1d0111, 0x0d6d0121, 0x0d6d0111, - 0x0d710121, 0x0d710111, 0x0d750121, 0x0d750111, 0x0e2d0121, 0x0e2d0111, 0x0da50121, 0x0da50111, - 0x0dad0121, 0x0dad0111, 0x0db10121, 0x0db10111, 0x0ded0121, 0x0ded0111, 0xffffffff, 0xffffffff, - 0x0e190121, 0x0e190111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0500 .. 0x05ff */ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x0e900121, 0x0e910121, 0x0e920121, 0x0e930121, 0x0e940131, 0x0e950121, 0x0e960121, - 0x0e970121, 0x0e980121, 0x0e990121, 0x0e9a0121, 0x0e9b0121, 0x0e9c0121, 0x0e9d0121, 0x0e9e0121, - 0x0e9f0121, 0x0ea00121, 0x0ea10121, 0x0ea20121, 0x0ea30131, 0x0ea40121, 0x0ea50121, 0x0ea60121, - 0x0ea70121, 0x0ea80121, 0x0ea90121, 0x0eaa0121, 0x0eab0121, 0x0eac0121, 0x0ead0131, 0x0eae0121, - 0x0eaf0121, 0x0eb00121, 0x0eb10121, 0x0eb20121, 0x0eb30121, 0x0eb40121, 0x0eb50121, 0xffffffff, - 0xffffffff, 0x0eb60111, 0x02bf0111, 0x02c00111, 0x024d0111, 0x022e0111, 0x02500111, 0x02c10111, - 0xffffffff, 0x0e900111, 0x0e910111, 0x0e920111, 0x0e930111, 0x0e940111, 0x0e950111, 0x0e960111, - 0x0e970111, 0x0e980111, 0x0e990111, 0x0e9a0111, 0x0e9b0111, 0x0e9c0111, 0x0e9d0111, 0x0e9e0111, - 0x0e9f0111, 0x0ea00111, 0x0ea10111, 0x0ea20111, 0x0ea30111, 0x0ea40111, 0x0ea50111, 0x0ea60111, - 0x0ea70111, 0x0ea80111, 0x0ea90111, 0x0eaa0111, 0x0eab0111, 0x0eac0111, 0x0ead0111, 0x0eae0111, - 0x0eaf0111, 0x0eb00111, 0x0eb10111, 0x0eb20111, 0x0eb30111, 0x0eb40111, 0x0eb50111, 0x0e940121, - 0xffffffff, 0x02380111, 0x02220111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, - 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, - 0x00000001, 0x00000001, 0xffffffff, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, - 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, - 0x00005811, 0x00005911, 0x00005a11, 0x00005b11, 0x00005c11, 0x00005d11, 0x00005e11, 0x00005f11, - 0x00006011, 0x00006111, 0xffffffff, 0x00006211, 0x00006311, 0x00000001, 0x02c20111, 0x00006411, - 0x02c30111, 0x00006511, 0x00006611, 0x02c40111, 0x00000001, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0eb70111, 0x0eb80111, 0x0eb90111, 0x0eba0111, 0x0ebb0111, 0x0ebc0111, 0x0ebd0111, 0x0ebe0111, - 0x0ebf0111, 0x0ec00111, 0x0ec10131, 0x0ec10111, 0x0ec20111, 0x0ec30131, 0x0ec30111, 0x0ec40121, - 0x0ec40111, 0x0ec50111, 0x0ec60111, 0x0ec70121, 0x0ec70111, 0x0ec80121, 0x0ec80111, 0x0ec90111, - 0x0eca0111, 0x0ecb0111, 0x0ecc0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0ebc0121, 0x0ebc0121, 0x0ec00121, 0x02c50111, 0x02c60111, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0600 .. 0x06ff */ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x022f0111, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x02360111, 0xffffffff, 0xffffffff, 0xffffffff, 0x02510111, - 0xffffffff, 0x0ecd0111, 0x0ece0111, 0x0ecf0111, 0x0ed20111, 0x0ed30111, 0x0ed50111, 0x0ed60111, - 0x0ed70111, 0x0edb0111, 0x0edc0111, 0x0edd0111, 0x0ee30111, 0x0ee90111, 0x0eea0111, 0x0eee0111, - 0x0eef0111, 0x0ef90111, 0x0efa0111, 0x0f040111, 0x0f050111, 0x0f0a0111, 0x0f0b0111, 0x0f0f0111, - 0x0f100111, 0x0f120111, 0x0f130111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x020b0111, 0x0f160111, 0x0f1d0111, 0x0f200111, 0x0f2d0111, 0x0f320111, 0x0f330111, 0x0f390111, - 0x0f3e0111, 0x0f480111, 0x0f490111, 0x00006811, 0x00006911, 0x00006a11, 0x00006b11, 0x00006c11, - 0x00006d11, 0x00006e11, 0x00006f11, 0x00007011, 0x00007111, 0x00007211, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0x02ab0111, 0x02300111, 0x02310111, 0x02a30111, 0xffffffff, 0xffffffff, - 0x00007311, 0x0ed10111, 0x0ed00111, 0x0ed40111, 0x0ecd0111, 0x0ed60121, 0x0f3e0121, 0x0f420121, - 0x0f490121, 0x0ede0111, 0x0edf0111, 0x0ed80111, 0x0ee00111, 0x0ee10111, 0x0ed90111, 0x0ee20111, - 0x0eda0111, 0x0eeb0111, 0x0eec0111, 0x0ee40111, 0x0ee50111, 0x0eed0111, 0x0ee60111, 0x0ee80111, - 0x0ef00111, 0x0ef10111, 0x0ef20111, 0x0ef30111, 0x0ef40111, 0x0ef50111, 0x0ef60111, 0x0ef70111, - 0x0ef80111, 0x0efb0111, 0x0efc0111, 0x0efd0111, 0x0efe0111, 0x0eff0111, 0x0f000111, 0x0f010111, - 0x0f020111, 0x0f030111, 0x0f060111, 0x0f070111, 0x0f080111, 0x0f0c0111, 0x0f0d0111, 0x0f110111, - 0x0f140111, 0x0f170111, 0x0f180111, 0x0f190111, 0x0f1a0111, 0x0f1b0111, 0x0f1c0111, 0x0f1e0111, - 0x0f1f0111, 0x0f210111, 0x0f220111, 0x0f230111, 0x0f240111, 0x0f250111, 0x0f260111, 0x0f270111, - 0x0f280111, 0x0f290111, 0x0f2a0111, 0x0f2b0111, 0x0f2c0111, 0x0f2e0111, 0x0f2f0111, 0x0f300111, - 0x0f310111, 0x0f380111, 0x0f340111, 0x0f350111, 0x0f360111, 0x0f370111, 0x0f3a0111, 0x0ee70111, - 0x0f3d0111, 0x0f3b0111, 0x0f3b0111, 0x0f3c0111, 0x0f3f0111, 0x0f400111, 0x0f410111, 0x0f420111, - 0x0f430111, 0x0f440111, 0x0f450111, 0x0f460111, 0x0f4a0111, 0x0f4b0111, 0x0f4c0111, 0x0f470111, - 0x0f4d0111, 0x0f4e0111, 0x0f4f0111, 0x0f4f0111, 0x02570111, 0x0f3d0111, 0x00007411, 0x00007511, - 0x00007611, 0x00007711, 0x00007811, 0x00007911, 0x00007a11, 0x00000001, 0x00000001, 0x00000001, - 0x00000001, 0x00007b11, 0x00007c11, 0x00007d11, 0x00007e11, 0x0f3e0121, 0x0f490121, 0x00007f11, - 0x00008011, 0x030c0111, 0x00000001, 0x00000001, 0x00000001, 0x00008111, 0xffffffff, 0xffffffff, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0x0f090111, 0x0f0e0111, 0x0f150111, 0x0ecd0121, 0x0f320121, 0xffffffff, - /* 0x0700 .. 0x07ff */ - 0x02660111, 0x02580111, 0x02590111, 0x02390111, 0x023a0111, 0x023b0111, 0x023c0111, 0x023d0111, - 0x023e0111, 0x02520111, 0x02c70111, 0x02c80111, 0x02c90111, 0x02ca0111, 0xffffffff, 0x00000000, - 0x0f500111, 0x00008211, 0x0f510111, 0x0f520111, 0x0f520121, 0x0f530111, 0x0f540111, 0x0f550111, - 0x0f560111, 0x0f570111, 0x0f580111, 0x0f590111, 0x0f590121, 0x0f5a0111, 0x0f5b0111, 0x0f5c0111, - 0x0f5d0111, 0x0f5e0111, 0x0f5f0111, 0x0f600111, 0x0f600121, 0x0f610111, 0x0f620111, 0x0f620121, - 0x0f630111, 0x0f640111, 0x0f650111, 0x0f660111, 0x0f670111, 0xffffffff, 0xffffffff, 0xffffffff, - 0x00008311, 0x00008411, 0x00008511, 0x00008611, 0x00008711, 0x00008811, 0x00008911, 0x00008a11, - 0x00008b11, 0x00008c11, 0x00008d11, 0x00008e11, 0x00008f11, 0x00009011, 0x00009111, 0x00009211, - 0x00009311, 0x00009411, 0x00009511, 0x00009611, 0x00009711, 0x00009811, 0x00009911, 0x00009a11, - 0x00009b11, 0x00009c11, 0x00009d11, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0f680111, 0x0f6b0111, 0x0f6c0111, 0x0f6d0111, 0x0f6f0111, 0x0f700111, 0x0f710111, 0x0f720111, - 0x0f750111, 0x0f770111, 0x0f780111, 0x0f790111, 0x0f7b0111, 0x0f7f0111, 0x0f800111, 0x0f820111, - 0x0f830111, 0x0f870111, 0x0f880111, 0x0f890111, 0x0f8a0111, 0x0f8b0111, 0x0f8c0111, 0x0f8d0111, - 0x0f7c0111, 0x0f690111, 0x0f6a0111, 0x0f7a0111, 0x0f6e0111, 0x0f840111, 0x0f850111, 0x0f860111, - 0x0f7d0111, 0x0f7e0111, 0x0f730111, 0x0f740111, 0x0f810111, 0x0f760111, 0x0f8e0111, 0x0f8f0111, - 0x0f900111, 0x0f910111, 0x0f920111, 0x0f930111, 0x0f940111, 0x0f950111, 0x0f960111, 0x0f970111, - 0x0f980111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0900 .. 0x09ff */ - 0xffffffff, 0x00009f11, 0x0000a011, 0x0000a111, 0xffffffff, 0x10d70111, 0x10d80111, 0x10d90111, - 0x10da0111, 0x10db0111, 0x10dc0111, 0x10dd0111, 0x10df0111, 0x10e10111, 0x10e20111, 0x10e30111, - 0x10e40111, 0x10e50111, 0x10e60111, 0x10e70111, 0x10e80111, 0x10e90111, 0x10ea0111, 0x10eb0111, - 0x10ec0111, 0x10ed0111, 0x10ee0111, 0x10ef0111, 0x10f00111, 0x10f10111, 0x10f20111, 0x10f30111, - 0x10f40111, 0x10f50111, 0x10f60111, 0x10f70111, 0x10f80111, 0x10f90111, 0x10fa0111, 0x10fb0111, - 0x10fc0111, 0x10fc0111, 0x10fd0111, 0x10fe0111, 0x10ff0111, 0x11000111, 0x11010111, 0x11020111, - 0x11030111, 0x11030111, 0x11040111, 0x11050111, 0x11050111, 0x11060111, 0x11070111, 0x11080111, - 0x11090111, 0x110a0111, 0xffffffff, 0xffffffff, 0x00009e11, 0x110b0111, 0x110c0111, 0x110d0111, - 0x110e0111, 0x110f0111, 0x11100111, 0x11110111, 0x11120111, 0x11150111, 0x11160111, 0x11170111, - 0x11180111, 0x11190111, 0x111a0111, 0x111b0111, 0x111c0111, 0x111d0111, 0xffffffff, 0xffffffff, - 0x10d60111, 0x0000a211, 0x0000a311, 0x0000a411, 0x0000a511, 0xffffffff, 0xffffffff, 0xffffffff, - 0x10e90111, 0x10ea0111, 0x10eb0111, 0x10f00111, 0x10f50111, 0x10f60111, 0x10fe0111, 0x11020111, - 0x10de0111, 0x10e00111, 0x11130111, 0x11140111, 0x02600111, 0x02610111, 0x0a0b0111, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0x02cd0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x0000a711, 0x0000a811, 0x0000a911, 0xffffffff, 0x111e0111, 0x111f0111, 0x11200111, - 0x11210111, 0x11220111, 0x11230111, 0x11240111, 0x11260111, 0xffffffff, 0xffffffff, 0x11280111, - 0x11290111, 0xffffffff, 0xffffffff, 0x112a0111, 0x112b0111, 0x112c0111, 0x112d0111, 0x112e0111, - 0x112f0111, 0x11300111, 0x11310111, 0x11320111, 0x11330111, 0x11340111, 0x11350111, 0x11360111, - 0x11370111, 0x11380111, 0x11390111, 0x113a0111, 0x113b0111, 0x113c0111, 0x113d0111, 0x113e0111, - 0x113f0111, 0xffffffff, 0x11400111, 0x11410111, 0x11420111, 0x11430111, 0x11440111, 0x11450111, - 0x11460111, 0xffffffff, 0x11480111, 0xffffffff, 0xffffffff, 0xffffffff, 0x114a0111, 0x114b0111, - 0x114c0111, 0x114d0111, 0xffffffff, 0xffffffff, 0x0000a611, 0xffffffff, 0x114e0111, 0x114f0111, - 0x11500111, 0x11510111, 0x11520111, 0x11530111, 0x11540111, 0xffffffff, 0xffffffff, 0x11570111, - 0x11580111, 0xffffffff, 0xffffffff, 0x11590111, 0x115a0111, 0x115b0111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x115c0111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x11380111, 0x11390111, 0xffffffff, 0x11450111, - 0x11250111, 0x11270111, 0x11550111, 0x11560111, 0xffffffff, 0xffffffff, 0x0a0b0111, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0x11470111, 0x11490111, 0x09e30111, 0x09e40111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, - 0x09c10111, 0x09c20111, 0x030d0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0a00 .. 0x0aff */ - 0xffffffff, 0xffffffff, 0x0000ab11, 0xffffffff, 0xffffffff, 0x11620111, 0x11630111, 0x11670111, - 0x11680111, 0x115f0111, 0x11600111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x11690111, - 0x11640111, 0xffffffff, 0xffffffff, 0x11610111, 0x11650111, 0x116c0111, 0x116d0111, 0x116e0111, - 0x116f0111, 0x11700111, 0x11710111, 0x11720111, 0x11730111, 0x11740111, 0x11750111, 0x11760111, - 0x11770111, 0x11780111, 0x11790111, 0x117a0111, 0x117b0111, 0x117c0111, 0x117d0111, 0x117e0111, - 0x117f0111, 0xffffffff, 0x11800111, 0x11810111, 0x11820111, 0x11830111, 0x11840111, 0x11850111, - 0x11860111, 0xffffffff, 0x11870111, 0x11870111, 0xffffffff, 0x11880111, 0x116a0111, 0xffffffff, - 0x116a0111, 0x116b0111, 0xffffffff, 0xffffffff, 0x0000aa11, 0xffffffff, 0x118a0111, 0x118b0111, - 0x118c0111, 0x118d0111, 0x118e0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x118f0111, - 0x11900111, 0xffffffff, 0xffffffff, 0x11910111, 0x11920111, 0x11930111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x116d0111, 0x116e0111, 0x11730111, 0x11890111, 0xffffffff, 0x11810111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0b0111, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0x0000ac11, 0x0000ad11, 0x11660111, 0x115e0111, 0x115d0111, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x0000af11, 0x0000b011, 0x0000b111, 0xffffffff, 0x11950111, 0x11960111, 0x11970111, - 0x11980111, 0x11990111, 0x119a0111, 0x119b0111, 0xffffffff, 0x119d0111, 0xffffffff, 0x119e0111, - 0x119f0111, 0x11a00111, 0xffffffff, 0x11a10111, 0x11a20111, 0x11a30111, 0x11a40111, 0x11a50111, - 0x11a60111, 0x11a70111, 0x11a80111, 0x11a90111, 0x11aa0111, 0x11ab0111, 0x11ac0111, 0x11ad0111, - 0x11ae0111, 0x11af0111, 0x11b00111, 0x11b10111, 0x11b20111, 0x11b30111, 0x11b40111, 0x11b50111, - 0x11b60111, 0xffffffff, 0x11b70111, 0x11b80111, 0x11b90111, 0x11ba0111, 0x11bb0111, 0x11bc0111, - 0x11bd0111, 0xffffffff, 0x11be0111, 0x11bf0111, 0xffffffff, 0x11c00111, 0x11c10111, 0x11c20111, - 0x11c30111, 0x11c40111, 0xffffffff, 0xffffffff, 0x0000ae11, 0x11c50111, 0x11c60111, 0x11c70111, - 0x11c80111, 0x11c90111, 0x11ca0111, 0x11cb0111, 0x11cc0111, 0x11cd0111, 0xffffffff, 0x11ce0111, - 0x11cf0111, 0x11d00111, 0xffffffff, 0x11d10111, 0x11d20111, 0x11d30111, 0xffffffff, 0xffffffff, - 0x11940111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x119c0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0b0111, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0b00 .. 0x0bff */ - 0xffffffff, 0x0000b311, 0x0000b411, 0x0000b511, 0xffffffff, 0x11d40111, 0x11d50111, 0x11d60111, - 0x11d70111, 0x11d80111, 0x11d90111, 0x11da0111, 0x11dc0111, 0xffffffff, 0xffffffff, 0x11de0111, - 0x11df0111, 0xffffffff, 0xffffffff, 0x11e00111, 0x11e10111, 0x11e20111, 0x11e30111, 0x11e40111, - 0x11e50111, 0x11e60111, 0x11e70111, 0x11e80111, 0x11e90111, 0x11ea0111, 0x11eb0111, 0x11ec0111, - 0x11ed0111, 0x11ee0111, 0x11ef0111, 0x11f00111, 0x11f10111, 0x11f20111, 0x11f30111, 0x11f40111, - 0x11f50111, 0xffffffff, 0x11f60111, 0x11f70111, 0x11f80111, 0x11f90111, 0x11fa0111, 0x11fb0111, - 0x11fd0111, 0xffffffff, 0x11fe0111, 0x11ff0111, 0xffffffff, 0xffffffff, 0x12000111, 0x12010111, - 0x12020111, 0x12030111, 0xffffffff, 0xffffffff, 0x0000b211, 0x12040111, 0x12050111, 0x12060111, - 0x12070111, 0x12080111, 0x12090111, 0x120a0111, 0xffffffff, 0xffffffff, 0xffffffff, 0x120b0111, - 0x120c0111, 0xffffffff, 0xffffffff, 0x120d0111, 0x120e0111, 0x120f0111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12100111, 0x12110111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x11ee0111, 0x11ef0111, 0xffffffff, 0x11fc0111, - 0x11db0111, 0x11dd0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0b0111, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0x030e0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0x0000b611, 0x12120111, 0xffffffff, 0x12130111, 0x12140111, 0x12150111, - 0x12160111, 0x12170111, 0x12180111, 0xffffffff, 0xffffffff, 0xffffffff, 0x12190111, 0x121a0111, - 0x121b0111, 0xffffffff, 0x121c0111, 0x121d0111, 0x121e0111, 0x121f0111, 0xffffffff, 0xffffffff, - 0xffffffff, 0x12200111, 0x12210111, 0xffffffff, 0x12220111, 0xffffffff, 0x12230111, 0x12240111, - 0xffffffff, 0xffffffff, 0xffffffff, 0x12250111, 0x12260111, 0xffffffff, 0xffffffff, 0xffffffff, - 0x12270111, 0x12280111, 0x12290111, 0xffffffff, 0xffffffff, 0xffffffff, 0x122a0111, 0x122b0111, - 0x122c0111, 0x122d0111, 0x122e0111, 0x122f0111, 0x12300111, 0x12310111, 0xffffffff, 0x12320111, - 0x12330111, 0x12340111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12350111, 0x12360111, - 0x12370111, 0x12380111, 0x12390111, 0xffffffff, 0xffffffff, 0xffffffff, 0x123a0111, 0x123b0111, - 0x123c0111, 0xffffffff, 0x123d0111, 0x123e0111, 0x123f0111, 0x12400111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12410111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0x09c30111, 0x09c40111, 0x09c50111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0c00 .. 0x0cff */ - 0xffffffff, 0x0000b711, 0x0000b811, 0x0000b911, 0xffffffff, 0x12420111, 0x12430111, 0x12440111, - 0x12450111, 0x12460111, 0x12470111, 0x12480111, 0x124a0111, 0xffffffff, 0x124c0111, 0x124d0111, - 0x124e0111, 0xffffffff, 0x124f0111, 0x12500111, 0x12510111, 0x12520111, 0x12530111, 0x12540111, - 0x12550111, 0x12560111, 0x12570111, 0x12580111, 0x12590111, 0x125a0111, 0x125b0111, 0x125c0111, - 0x125d0111, 0x125e0111, 0x125f0111, 0x12600111, 0x12610111, 0x12620111, 0x12630111, 0x12640111, - 0x12650111, 0xffffffff, 0x12660111, 0x12670111, 0x12680111, 0x12690111, 0x126a0111, 0x126b0111, - 0x126c0111, 0x126d0111, 0x126e0111, 0x126f0111, 0xffffffff, 0x12700111, 0x12710111, 0x12720111, - 0x12730111, 0x12740111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12750111, 0x12760111, - 0x12770111, 0x12780111, 0x12790111, 0x127a0111, 0x127b0111, 0xffffffff, 0x127c0111, 0x127d0111, - 0x127e0111, 0xffffffff, 0x127f0111, 0x12800111, 0x12810111, 0x12820111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12830111, 0x12840111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x12490111, 0x124b0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0b0111, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0x0000ba11, 0x0000bb11, 0xffffffff, 0x12850111, 0x12860111, 0x12870111, - 0x12880111, 0x12890111, 0x128a0111, 0x128b0111, 0x128d0111, 0xffffffff, 0x128f0111, 0x12900111, - 0x12910111, 0xffffffff, 0x12920111, 0x12930111, 0x12940111, 0x12950111, 0x12960111, 0x12970111, - 0x12980111, 0x12990111, 0x129a0111, 0x129b0111, 0x129c0111, 0x129d0111, 0x129e0111, 0x129f0111, - 0x12a00111, 0x12a10111, 0x12a20111, 0x12a30111, 0x12a40111, 0x12a50111, 0x12a60111, 0x12a70111, - 0x12a80111, 0xffffffff, 0x12a90111, 0x12aa0111, 0x12ab0111, 0x12ac0111, 0x12ad0111, 0x12ae0111, - 0x12af0111, 0x12b00111, 0x12b10111, 0x12b70111, 0xffffffff, 0x12b20111, 0x12b30111, 0x12b40111, - 0x12b50111, 0x12b60111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12b90111, 0x12ba0111, - 0x12bb0111, 0x12bc0111, 0x12bd0111, 0x12be0111, 0x12bf0111, 0xffffffff, 0x12c00111, 0x12c10111, - 0x12c20111, 0xffffffff, 0x12c30111, 0x12c40111, 0x12c50111, 0x12c60111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12c70111, 0x12c80111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12b80111, 0xffffffff, - 0x128c0111, 0x128e0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0b0111, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0d00 .. 0x0dff */ - 0xffffffff, 0xffffffff, 0x0000bc11, 0x0000bd11, 0xffffffff, 0x12c90111, 0x12ca0111, 0x12cb0111, - 0x12cc0111, 0x12cd0111, 0x12ce0111, 0x12cf0111, 0x12d10111, 0xffffffff, 0x12d30111, 0x12d40111, - 0x12d50111, 0xffffffff, 0x12d60111, 0x12d70111, 0x12d80111, 0x12d90111, 0x12da0111, 0x12db0111, - 0x12dc0111, 0x12dd0111, 0x12de0111, 0x12df0111, 0x12e00111, 0x12e10111, 0x12e20111, 0x12e30111, - 0x12e40111, 0x12e50111, 0x12e60111, 0x12e70111, 0x12e80111, 0x12e90111, 0x12ea0111, 0x12eb0111, - 0x12ec0111, 0xffffffff, 0x12ed0111, 0x12ee0111, 0x12ef0111, 0x12f00111, 0x12f10111, 0x12f20111, - 0x12f30111, 0x12f40111, 0x12f50111, 0x12f60111, 0x12f70111, 0x12f80111, 0x12f90111, 0x12fa0111, - 0x12fb0111, 0x12fc0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12fd0111, 0x12fe0111, - 0x12ff0111, 0x13000111, 0x13010111, 0x13020111, 0xffffffff, 0xffffffff, 0x13030111, 0x13040111, - 0x13050111, 0xffffffff, 0x13060111, 0x13070111, 0x13080111, 0x13090111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x130a0111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x12d00111, 0x12d20111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0b0111, 0x0a0c0111, - 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, 0x0a130111, 0x0a140111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0x0000be11, 0x0000bf11, 0xffffffff, 0x130b0111, 0x130c0111, 0x130d0111, - 0x130e0111, 0x130f0111, 0x13100111, 0x13110111, 0x13120111, 0x13130111, 0x13140111, 0x13150111, - 0x13160111, 0x13170111, 0x13180111, 0x13190111, 0x131a0111, 0x131b0111, 0x131c0111, 0xffffffff, - 0xffffffff, 0xffffffff, 0x131d0111, 0x131e0111, 0x131f0111, 0x13200111, 0x13210111, 0x13220111, - 0x13230111, 0x13240111, 0x13250111, 0x13260111, 0x13270111, 0x13280111, 0x13290111, 0x132a0111, - 0x132b0111, 0x132c0111, 0x132d0111, 0x132e0111, 0x132f0111, 0x13300111, 0x13310111, 0x13320111, - 0x13330111, 0x13340111, 0xffffffff, 0x13350111, 0x13360111, 0x13370111, 0x13380111, 0x13390111, - 0x133a0111, 0x133b0111, 0x133c0111, 0x133d0111, 0xffffffff, 0x133e0111, 0xffffffff, 0xffffffff, - 0x133f0111, 0x13400111, 0x13410111, 0x13420111, 0x13430111, 0x13440111, 0x13450111, 0xffffffff, - 0xffffffff, 0xffffffff, 0x13460111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x13470111, - 0x13480111, 0x13490111, 0x134a0111, 0x134b0111, 0x134c0111, 0xffffffff, 0x134d0111, 0xffffffff, - 0x134e0111, 0x134f0111, 0x13500111, 0x13510111, 0x13520111, 0x13530111, 0x13540111, 0x13550111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0x13560111, 0x13570111, 0x02ce0111, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0e00 .. 0x0eff */ - 0xffffffff, 0x13580111, 0x13590111, 0x135a0111, 0x135b0111, 0x135c0111, 0x135d0111, 0x135e0111, - 0x135f0111, 0x13600111, 0x13610111, 0x13620111, 0x13630111, 0x13640111, 0x13650111, 0x13660111, - 0x13670111, 0x13680111, 0x13690111, 0x136a0111, 0x136b0111, 0x136c0111, 0x136d0111, 0x136e0111, - 0x136f0111, 0x13700111, 0x13710111, 0x13720111, 0x13730111, 0x13740111, 0x13750111, 0x13760111, - 0x13770111, 0x13780111, 0x13790111, 0x137a0111, 0x137b0111, 0x137c0111, 0x137d0111, 0x137e0111, - 0x137f0111, 0x13800111, 0x13810111, 0x13820111, 0x13830111, 0x13840111, 0x13850111, 0x13860111, - 0x13870111, 0x13880111, 0x13890111, 0x138a0111, 0x138b0111, 0x138c0111, 0x138d0111, 0x138e0111, - 0x138f0111, 0x13900111, 0x13910111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x09e50111, - 0x13920111, 0x13930111, 0x13940111, 0x13950111, 0x13960111, 0x13970111, 0x09d50111, 0x0000c011, - 0x0000c111, 0x0000c211, 0x0000c311, 0x0000c411, 0x13980111, 0x13990111, 0x00000001, 0x030f0111, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0x02cf0111, 0x02d00111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x139a0111, 0x139b0111, 0xffffffff, 0x139c0111, 0xffffffff, 0xffffffff, 0x139d0111, - 0x139e0111, 0xffffffff, 0x139f0111, 0xffffffff, 0xffffffff, 0x13a00111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x13a10111, 0x13a20111, 0x13a30111, 0x13a40111, - 0xffffffff, 0x13a50111, 0x13a60111, 0x13a70111, 0x13a80111, 0x13a90111, 0x13aa0111, 0x13ab0111, - 0xffffffff, 0x13ac0111, 0x13ad0111, 0x13ae0111, 0xffffffff, 0x13af0111, 0xffffffff, 0x13b00111, - 0xffffffff, 0xffffffff, 0x13b10111, 0x13b20111, 0xffffffff, 0x13b30111, 0x13b40111, 0x13b50111, - 0x13b60111, 0x13b70111, 0x13b80111, 0x13b90111, 0x13ba0111, 0x13bb0111, 0x13bc0111, 0x13bd0111, - 0x13be0111, 0x13bf0111, 0xffffffff, 0x13c00111, 0x13c10111, 0x13c20111, 0xffffffff, 0xffffffff, - 0x13c30111, 0x13c40111, 0x13c50111, 0x13c60111, 0x13c70111, 0xffffffff, 0x09d60111, 0xffffffff, - 0x0000c511, 0x0000c611, 0x0000c711, 0x0000c811, 0x13c80111, 0x13c90111, 0xffffffff, 0xffffffff, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0xffffffff, 0xffffffff, 0x13b20121, 0x13b20121, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x0f00 .. 0x0fff */ - 0x140e0121, 0x03100111, 0x03110111, 0x03120111, 0x02d10111, 0x02d20111, 0x02d30111, 0x02d40111, - 0x02d50111, 0x02d60111, 0x02d70111, 0x02d80111, 0x02d80121, 0x02d90111, 0x02da0111, 0x02db0111, - 0x02dc0111, 0x02dd0111, 0x02de0111, 0x03130111, 0x02460111, 0x03140111, 0x03150111, 0x03160111, - 0x00000001, 0x00000001, 0x03170111, 0x03180111, 0x03190111, 0x031a0111, 0x031b0111, 0x031c0111, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, - 0x0a120111, 0x0a130111, 0x0a140111, 0x0a0b0111, 0x031d0111, 0x00000001, 0x031e0111, 0x00000001, - 0x031f0111, 0x0000c911, 0x02800111, 0x02810111, 0x02820111, 0x02830111, 0x03200111, 0x03210111, - 0x13ca0111, 0x13cc0111, 0x13ce0111, 0x13ce0111, 0x13d00111, 0x13d20111, 0x13d40111, 0x13d60111, - 0xffffffff, 0x13d80111, 0x13da0111, 0x13dc0111, 0x13de0111, 0x13de0111, 0x13e00111, 0x13e20111, - 0x13e40111, 0x13e60111, 0x13e60111, 0x13e80111, 0x13ea0111, 0x13ec0111, 0x13ee0111, 0x13ee0111, - 0x13f00111, 0x13f20111, 0x13f40111, 0x13f60111, 0x13f60111, 0x13f80111, 0x13fa0111, 0x13fc0111, - 0x13fe0111, 0x14000111, 0x14020111, 0x14040111, 0x14060111, 0x14080111, 0x140a0111, 0x140c0111, - 0x140e0111, 0x13ca0111, 0x14020121, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x14140111, 0x14150111, 0x14160111, 0x14190111, 0x141a0111, 0x141b0111, 0x141c0111, - 0x141d0111, 0x141e0111, 0x141f0111, 0x14200111, 0x14210111, 0x14220111, 0x0000ca11, 0x0000cb11, - 0x14170111, 0x14180111, 0x00000001, 0x00000001, 0x14230111, 0x02df0111, 0x00000001, 0x00000001, - 0x14100111, 0x14110111, 0x14120111, 0x14130111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x13cb0111, 0x13cd0111, 0x13cf0111, 0x13cf0111, 0x13d10111, 0x13d30111, 0x13d50111, 0x13d70111, - 0xffffffff, 0x13d90111, 0x13db0111, 0x13dd0111, 0x13df0111, 0x13df0111, 0x13e10111, 0x13e30111, - 0x13e50111, 0x13e70111, 0x13e70111, 0x13e90111, 0x13eb0111, 0x13ed0111, 0x13ef0111, 0x13ef0111, - 0x13f10111, 0x13f30111, 0x13f50111, 0x13f70111, 0x13f70111, 0x13f90111, 0x13fb0111, 0x13fd0111, - 0x13ff0111, 0x14010111, 0x14030111, 0x14050111, 0x14070111, 0x14090111, 0x140b0111, 0x140d0111, - 0x140f0111, 0x13cb0111, 0x13f90121, 0x14010121, 0x14030121, 0xffffffff, 0x03220111, 0x03230111, - 0x03240111, 0x03250111, 0x03260111, 0x03270111, 0x03280111, 0x03290111, 0x00000001, 0x032a0111, - 0x032b0111, 0x032c0111, 0x032d0111, 0x032e0111, 0x032f0111, 0xffffffff, 0xffffffff, 0x03300111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x1000 .. 0x10ff */ - 0x14240111, 0x14250111, 0x14260111, 0x14270111, 0x14280111, 0x14290111, 0x142a0111, 0x142b0111, - 0x142c0111, 0x142d0111, 0x142e0111, 0x142f0111, 0x14300111, 0x14310111, 0x14320111, 0x14330111, - 0x14340111, 0x14350111, 0x14360111, 0x14370111, 0x14380111, 0x14390111, 0x143a0111, 0x143b0111, - 0x143c0111, 0x143d0111, 0x143e0111, 0x143f0111, 0x14400111, 0x14410111, 0x14440111, 0x14450111, - 0x14460111, 0x14470111, 0xffffffff, 0x14480111, 0x14490111, 0x144a0111, 0x144b0111, 0x144c0111, - 0xffffffff, 0x144d0111, 0x144e0111, 0xffffffff, 0x14530111, 0x14540111, 0x14550111, 0x14560111, - 0x14570111, 0x14580111, 0x14590111, 0xffffffff, 0xffffffff, 0xffffffff, 0x0000cc11, 0x0000cd11, - 0x0000ce11, 0x145e0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0x02620111, 0x02630111, 0x02e00111, 0x02e10111, 0x02e20111, 0x02e30111, - 0x14420111, 0x14430111, 0x144f0111, 0x14500111, 0x14510111, 0x14520111, 0x145a0111, 0x145b0111, - 0x145c0111, 0x145d0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0e690121, 0x0e6a0121, 0x0e6b0121, 0x0e6c0121, 0x0e6d0121, 0x0e6e0121, 0x0e6f0121, 0x0e710121, - 0x0e720121, 0x0e730121, 0x0e740121, 0x0e750121, 0x0e760121, 0x0e780121, 0x0e790121, 0x0e7a0121, - 0x0e7b0121, 0x0e7c0121, 0x0e7d0121, 0x0e7f0121, 0x0e800121, 0x0e810121, 0x0e820121, 0x0e830121, - 0x0e840121, 0x0e850121, 0x0e860121, 0x0e870121, 0x0e880121, 0x0e890121, 0x0e8a0121, 0x0e8c0121, - 0x0e8d0121, 0x0e700121, 0x0e770121, 0x0e7e0121, 0x0e8b0121, 0x0e8e0121, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0e690111, 0x0e6a0111, 0x0e6b0111, 0x0e6c0111, 0x0e6d0111, 0x0e6e0111, 0x0e6f0111, 0x0e710111, - 0x0e720111, 0x0e730111, 0x0e740111, 0x0e750111, 0x0e760111, 0x0e780111, 0x0e790111, 0x0e7a0111, - 0x0e7b0111, 0x0e7c0111, 0x0e7d0111, 0x0e7f0111, 0x0e800111, 0x0e810111, 0x0e820111, 0x0e830111, - 0x0e840111, 0x0e850111, 0x0e860111, 0x0e870111, 0x0e880111, 0x0e890111, 0x0e8a0111, 0x0e8c0111, - 0x0e8d0111, 0x0e700111, 0x0e770111, 0x0e7e0111, 0x0e8b0111, 0x0e8e0111, 0x0e8f0111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x02670111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x1100 .. 0x11ff */ - 0x18310111, 0x18320111, 0x18330111, 0x18340111, 0x18350111, 0x18360111, 0x18370111, 0x18380111, - 0x18390111, 0x183a0111, 0x183b0111, 0x183c0111, 0x183d0111, 0x183e0111, 0x183f0111, 0x18400111, - 0x18410111, 0x18420111, 0x18430111, 0x18440111, 0x18450111, 0x18460111, 0x18470111, 0x18480111, - 0x18490111, 0x184a0111, 0x184b0111, 0x184c0111, 0x184d0111, 0x184e0111, 0x184f0111, 0x18500111, - 0x18510111, 0x18520111, 0x18530111, 0x18540111, 0x18550111, 0x18560111, 0x18570111, 0x18580111, - 0x18590111, 0x185a0111, 0x185b0111, 0x185c0111, 0x185d0111, 0x185e0111, 0x185f0111, 0x18600111, - 0x18610111, 0x18620111, 0x18630111, 0x18640111, 0x18650111, 0x18660111, 0x18670111, 0x18680111, - 0x18690111, 0x186a0111, 0x186b0111, 0x186c0111, 0x186d0111, 0x186e0111, 0x186f0111, 0x18700111, - 0x18710111, 0x18720111, 0x18730111, 0x18740111, 0x18750111, 0x18760111, 0x18770111, 0x18780111, - 0x18790111, 0x187a0111, 0x187b0111, 0x187c0111, 0x187d0111, 0x187e0111, 0x187f0111, 0x18800111, - 0x18810111, 0x18820111, 0x18830111, 0x18840111, 0x18850111, 0x18860111, 0x18870111, 0x18880111, - 0x18890111, 0x188a0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x188b0111, - 0x188c0111, 0x188d0111, 0x188e0111, 0x188f0111, 0x18900111, 0x18910111, 0x18920111, 0x18930111, - 0x18940111, 0x18950111, 0x18960111, 0x18970111, 0x18980111, 0x18990111, 0x189a0111, 0x189b0111, - 0x189c0111, 0x189d0111, 0x189e0111, 0x189f0111, 0x18a00111, 0x18a10111, 0x18a20111, 0x18a30111, - 0x18a40111, 0x18a50111, 0x18a60111, 0x18a70111, 0x18a80111, 0x18a90111, 0x18aa0111, 0x18ab0111, - 0x18ac0111, 0x18ad0111, 0x18ae0111, 0x18af0111, 0x18b00111, 0x18b10111, 0x18b20111, 0x18b30111, - 0x18b40111, 0x18b50111, 0x18b60111, 0x18b70111, 0x18b80111, 0x18b90111, 0x18ba0111, 0x18bb0111, - 0x18bc0111, 0x18bd0111, 0x18be0111, 0x18bf0111, 0x18c00111, 0x18c10111, 0x18c20111, 0x18c30111, - 0x18c40111, 0x18c50111, 0x18c60111, 0x18c70111, 0x18c80111, 0x18c90111, 0x18ca0111, 0x18cb0111, - 0x18cc0111, 0x18cd0111, 0x18ce0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x18cf0111, 0x18d00111, 0x18d10111, 0x18d20111, 0x18d30111, 0x18d40111, 0x18d50111, 0x18d60111, - 0x18d70111, 0x18d80111, 0x18d90111, 0x18da0111, 0x18db0111, 0x18dc0111, 0x18dd0111, 0x18de0111, - 0x18df0111, 0x18e00111, 0x18e10111, 0x18e20111, 0x18e30111, 0x18e40111, 0x18e50111, 0x18e60111, - 0x18e70111, 0x18e80111, 0x18e90111, 0x18ea0111, 0x18eb0111, 0x18ec0111, 0x18ed0111, 0x18ee0111, - 0x18ef0111, 0x18f00111, 0x18f10111, 0x18f20111, 0x18f30111, 0x18f40111, 0x18f50111, 0x18f60111, - 0x18f70111, 0x18f80111, 0x18f90111, 0x18fa0111, 0x18fb0111, 0x18fc0111, 0x18fd0111, 0x18fe0111, - 0x18ff0111, 0x19000111, 0x19010111, 0x19020111, 0x19030111, 0x19040111, 0x19050111, 0x19060111, - 0x19070111, 0x19080111, 0x19090111, 0x190a0111, 0x190b0111, 0x190c0111, 0x190d0111, 0x190e0111, - 0x190f0111, 0x19100111, 0x19110111, 0x19120111, 0x19130111, 0x19140111, 0x19150111, 0x19160111, - 0x19170111, 0x19180111, 0x19190111, 0x191a0111, 0x191b0111, 0x191c0111, 0x191d0111, 0x191e0111, - 0x191f0111, 0x19200111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x1200 .. 0x12ff */ - 0x0f990111, 0x0f9a0111, 0x0f9b0111, 0x0f9c0111, 0x0f9d0111, 0x0f9e0111, 0x0f9f0111, 0xffffffff, - 0x0fa00111, 0x0fa10111, 0x0fa20111, 0x0fa30111, 0x0fa40111, 0x0fa50111, 0x0fa60111, 0x0fa70111, - 0x0fa80111, 0x0fa90111, 0x0faa0111, 0x0fab0111, 0x0fac0111, 0x0fad0111, 0x0fae0111, 0x0faf0111, - 0x0fb00111, 0x0fb10111, 0x0fb20111, 0x0fb30111, 0x0fb40111, 0x0fb50111, 0x0fb60111, 0x0fb70111, - 0x0fb80111, 0x0fb90111, 0x0fba0111, 0x0fbb0111, 0x0fbc0111, 0x0fbd0111, 0x0fbe0111, 0x0fbf0111, - 0x0fc00111, 0x0fc10111, 0x0fc20111, 0x0fc30111, 0x0fc40111, 0x0fc50111, 0x0fc60111, 0x0fc70111, - 0x0fc80111, 0x0fc90111, 0x0fca0111, 0x0fcb0111, 0x0fcc0111, 0x0fcd0111, 0x0fce0111, 0x0fcf0111, - 0x0fd00111, 0x0fd10111, 0x0fd20111, 0x0fd30111, 0x0fd40111, 0x0fd50111, 0x0fd60111, 0x0fd70111, - 0x0fd80111, 0x0fd90111, 0x0fda0111, 0x0fdb0111, 0x0fdc0111, 0x0fdd0111, 0x0fde0111, 0xffffffff, - 0x0fdf0111, 0xffffffff, 0x0fe00111, 0x0fe10111, 0x0fe20111, 0x0fe30111, 0xffffffff, 0xffffffff, - 0x0fe40111, 0x0fe50111, 0x0fe60111, 0x0fe70111, 0x0fe80111, 0x0fe90111, 0x0fea0111, 0xffffffff, - 0x0feb0111, 0xffffffff, 0x0fec0111, 0x0fed0111, 0x0fee0111, 0x0fef0111, 0xffffffff, 0xffffffff, - 0x0ff00111, 0x0ff10111, 0x0ff20111, 0x0ff30111, 0x0ff40111, 0x0ff50111, 0x0ff60111, 0x0ff70111, - 0x0ff80111, 0x0ff90111, 0x0ffa0111, 0x0ffb0111, 0x0ffc0111, 0x0ffd0111, 0x0ffe0111, 0x0fff0111, - 0x10000111, 0x10010111, 0x10020111, 0x10030111, 0x10040111, 0x10050111, 0x10060111, 0x10070111, - 0x10080111, 0x10090111, 0x100a0111, 0x100b0111, 0x100c0111, 0x100d0111, 0x100e0111, 0x100f0111, - 0x10100111, 0x10110111, 0x10120111, 0x10130111, 0x10140111, 0x10150111, 0x10160111, 0xffffffff, - 0x10170111, 0xffffffff, 0x10180111, 0x10190111, 0x101a0111, 0x101b0111, 0xffffffff, 0xffffffff, - 0x101c0111, 0x101d0111, 0x101e0111, 0x101f0111, 0x10200111, 0x10210111, 0x10220111, 0x10230111, - 0x10240111, 0x10250111, 0x10260111, 0x10270111, 0x10280111, 0x10290111, 0x102a0111, 0x102b0111, - 0x102c0111, 0x102d0111, 0x102e0111, 0x102f0111, 0x10300111, 0x10310111, 0x10320111, 0x10330111, - 0x10340111, 0x10350111, 0x10360111, 0x10370111, 0x10380111, 0x10390111, 0x103a0111, 0xffffffff, - 0x103b0111, 0xffffffff, 0x103c0111, 0x103d0111, 0x103e0111, 0x103f0111, 0xffffffff, 0xffffffff, - 0x10400111, 0x10410111, 0x10420111, 0x10430111, 0x10440111, 0x10450111, 0x10460111, 0xffffffff, - 0x10470111, 0xffffffff, 0x10480111, 0x10490111, 0x104a0111, 0x104b0111, 0xffffffff, 0xffffffff, - 0x104c0111, 0x104d0111, 0x104e0111, 0x104f0111, 0x10500111, 0x10510111, 0x10520111, 0xffffffff, - 0x10530111, 0x10540111, 0x10550111, 0x10560111, 0x10570111, 0x10580111, 0x10590111, 0xffffffff, - 0x105a0111, 0x105b0111, 0x105c0111, 0x105d0111, 0x105e0111, 0x105f0111, 0x10600111, 0x10610111, - 0x10620111, 0x10630111, 0x10640111, 0x10650111, 0x10660111, 0x10670111, 0x10680111, 0x10690111, - 0x106a0111, 0x106b0111, 0x106c0111, 0x106d0111, 0x106e0111, 0x106f0111, 0x10700111, 0xffffffff, - 0x10710111, 0x10720111, 0x10730111, 0x10740111, 0x10750111, 0x10760111, 0x10770111, 0x10780111, - 0x10790111, 0x107a0111, 0x107b0111, 0x107c0111, 0x107d0111, 0x107e0111, 0x107f0111, 0x10800111, - /* 0x1300 .. 0x13ff */ - 0x10810111, 0x10820111, 0x10830111, 0x10840111, 0x10850111, 0x10860111, 0x10870111, 0x10880111, - 0x10890111, 0x108a0111, 0x108b0111, 0x108c0111, 0x108d0111, 0x108e0111, 0x108f0111, 0xffffffff, - 0x10900111, 0xffffffff, 0x10910111, 0x10920111, 0x10930111, 0x10940111, 0xffffffff, 0xffffffff, - 0x10950111, 0x10960111, 0x10970111, 0x10980111, 0x10990111, 0x109a0111, 0x109b0111, 0xffffffff, - 0x109c0111, 0x109d0111, 0x109e0111, 0x109f0111, 0x10a00111, 0x10a10111, 0x10a20111, 0x10a30111, - 0x10a40111, 0x10a50111, 0x10a60111, 0x10a70111, 0x10a80111, 0x10a90111, 0x10aa0111, 0x10ab0111, - 0x10ac0111, 0x10ad0111, 0x10ae0111, 0x10af0111, 0x10b00111, 0x10b10111, 0x10b20111, 0x10b30111, - 0x10b40111, 0x10b50111, 0x10b60111, 0x10b70111, 0x10b80111, 0x10b90111, 0x10ba0111, 0x10bb0111, - 0x10bc0111, 0x10bd0111, 0x10be0111, 0x10bf0111, 0x10c00111, 0x10c10111, 0x10c20111, 0xffffffff, - 0x10c30111, 0x10c40111, 0x10c50111, 0x10c60111, 0x10c70111, 0x10c80111, 0x10c90111, 0x10ca0111, - 0x10cb0111, 0x10cc0111, 0x10cd0111, 0x10ce0111, 0x10cf0111, 0x10d00111, 0x10d10111, 0x10d20111, - 0x10d30111, 0x10d40111, 0x10d50111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x023f0111, 0x025a0111, 0x02400111, 0x02410111, 0x02420111, 0x02430111, 0x02530111, - 0x02680111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0x09c60111, 0x09c70111, 0x09c80111, 0x09c90111, 0x09ca0111, 0x09cb0111, - 0x09cc0111, 0x09cd0111, 0x09ce0111, 0x09cf0111, 0x09d00111, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x15280111, 0x15290111, 0x152a0111, 0x152b0111, 0x152c0111, 0x152d0111, 0x152e0111, 0x152f0111, - 0x15300111, 0x15310111, 0x15320111, 0x15330111, 0x15340111, 0x15350111, 0x15360111, 0x15370111, - 0x15380111, 0x15390111, 0x153a0111, 0x153b0111, 0x153c0111, 0x153d0111, 0x153e0111, 0x153f0111, - 0x15400111, 0x15410111, 0x15420111, 0x15430111, 0x15440111, 0x15450111, 0x15460111, 0x15470111, - 0x15480111, 0x15490111, 0x154a0111, 0x154b0111, 0x154c0111, 0x154d0111, 0x154e0111, 0x154f0111, - 0x15500111, 0x15510111, 0x15520111, 0x15530111, 0x15540111, 0x15550111, 0x15560111, 0x15570111, - 0x15580111, 0x15590111, 0x155a0111, 0x155b0111, 0x155c0111, 0x155d0111, 0x155e0111, 0x155f0111, - 0x15600111, 0x15610111, 0x15620111, 0x15630111, 0x15640111, 0x15650111, 0x15660111, 0x15670111, - 0x15680111, 0x15690111, 0x156a0111, 0x156b0111, 0x156c0111, 0x156d0111, 0x156e0111, 0x156f0111, - 0x15700111, 0x15710111, 0x15720111, 0x15730111, 0x15740111, 0x15750111, 0x15760111, 0x15770111, - 0x15780111, 0x15790111, 0x157a0111, 0x157b0111, 0x157c0111, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x1400 .. 0x14ff */ - 0xffffffff, 0x157d0111, 0x157e0111, 0x157f0111, 0x15800111, 0x15810111, 0x15820111, 0x15830111, - 0x15840111, 0x15850111, 0x15860111, 0x15870111, 0x15880111, 0x15890111, 0x158a0111, 0x158b0111, - 0x158c0111, 0x158d0111, 0x158e0111, 0x158f0111, 0x15900111, 0x15910111, 0x15920111, 0x15930111, - 0x15940111, 0x15950111, 0x15960111, 0x15970111, 0x15980111, 0x15990111, 0x159a0111, 0x159b0111, - 0x159c0111, 0x159d0111, 0x159e0111, 0x159f0111, 0x15a00111, 0x15a10111, 0x15a20111, 0x15a30111, - 0x15a40111, 0x15a50111, 0x15a60111, 0x15a70111, 0x15a80111, 0x15a90111, 0x15aa0111, 0x15ab0111, - 0x15ac0111, 0x15ad0111, 0x15ae0111, 0x15af0111, 0x15b00111, 0x15b10111, 0x15b20111, 0x15b30111, - 0x15b40111, 0x15b50111, 0x15b60111, 0x15b70111, 0x15b80111, 0x15b90111, 0x15ba0111, 0x15bb0111, - 0x15bc0111, 0x15bd0111, 0x15be0111, 0x15bf0111, 0x15c00111, 0x15c10111, 0x15c20111, 0x15c30111, - 0x15c40111, 0x15c50111, 0x15c60111, 0x15c70111, 0x15c80111, 0x15c90111, 0x15ca0111, 0x15cb0111, - 0x15cc0111, 0x15cd0111, 0x15ce0111, 0x15cf0111, 0x15d00111, 0x15d10111, 0x15d20111, 0x15d30111, - 0x15d40111, 0x15d50111, 0x15d60111, 0x15d70111, 0x15d80111, 0x15d90111, 0x15da0111, 0x15db0111, - 0x15dc0111, 0x15dd0111, 0x15de0111, 0x15df0111, 0x15e00111, 0x15e10111, 0x15e20111, 0x15e30111, - 0x15e40111, 0x15e50111, 0x15e60111, 0x15e70111, 0x15e80111, 0x15e90111, 0x15ea0111, 0x15eb0111, - 0x15ec0111, 0x15ed0111, 0x15ee0111, 0x15ef0111, 0x15f00111, 0x15f10111, 0x15f20111, 0x15f30111, - 0x15f40111, 0x15f50111, 0x15f60111, 0x15f70111, 0x15f80111, 0x15f90111, 0x15fa0111, 0x15fb0111, - 0x15fc0111, 0x15fd0111, 0x15fe0111, 0x15ff0111, 0x16000111, 0x16010111, 0x16020111, 0x16030111, - 0x16040111, 0x16050111, 0x16060111, 0x16070111, 0x16080111, 0x16090111, 0x160a0111, 0x160b0111, - 0x160c0111, 0x160d0111, 0x160e0111, 0x160f0111, 0x16100111, 0x16110111, 0x16120111, 0x16130111, - 0x16140111, 0x16150111, 0x16160111, 0x16170111, 0x16180111, 0x16190111, 0x161a0111, 0x161b0111, - 0x161c0111, 0x161d0111, 0x161e0111, 0x161f0111, 0x16200111, 0x16210111, 0x16220111, 0x16230111, - 0x16240111, 0x16250111, 0x16260111, 0x16270111, 0x16280111, 0x16290111, 0x162a0111, 0x162b0111, - 0x162c0111, 0x162d0111, 0x162e0111, 0x162f0111, 0x16300111, 0x16310111, 0x16320111, 0x16330111, - 0x16340111, 0x16350111, 0x16360111, 0x16370111, 0x16380111, 0x16390111, 0x163a0111, 0x163b0111, - 0x163c0111, 0x163d0111, 0x163e0111, 0x163f0111, 0x16400111, 0x16410111, 0x16420111, 0x16430111, - 0x16440111, 0x16450111, 0x16460111, 0x16470111, 0x16480111, 0x16490111, 0x164a0111, 0x164b0111, - 0x164c0111, 0x164d0111, 0x164e0111, 0x164f0111, 0x16500111, 0x16510111, 0x16520111, 0x16530111, - 0x16540111, 0x16550111, 0x16560111, 0x16570111, 0x16580111, 0x16590111, 0x165a0111, 0x165b0111, - 0x165c0111, 0x165d0111, 0x165e0111, 0x165f0111, 0x16600111, 0x16610111, 0x16620111, 0x16630111, - 0x16640111, 0x16650111, 0x16660111, 0x16670111, 0x16680111, 0x16690111, 0x166a0111, 0x166b0111, - 0x166c0111, 0x166d0111, 0x166e0111, 0x166f0111, 0x16700111, 0x16710111, 0x16720111, 0x16730111, - 0x16740111, 0x16750111, 0x16760111, 0x16770111, 0x16780111, 0x16790111, 0x167a0111, 0x167b0111, - /* 0x1500 .. 0x15ff */ - 0x167c0111, 0x167d0111, 0x167e0111, 0x167f0111, 0x16800111, 0x16810111, 0x16820111, 0x16830111, - 0x16840111, 0x16850111, 0x16860111, 0x16870111, 0x16880111, 0x16890111, 0x168a0111, 0x168b0111, - 0x168c0111, 0x168d0111, 0x168e0111, 0x168f0111, 0x16900111, 0x16910111, 0x16920111, 0x16930111, - 0x16940111, 0x16950111, 0x16960111, 0x16970111, 0x16980111, 0x16990111, 0x169a0111, 0x169b0111, - 0x169c0111, 0x169d0111, 0x169e0111, 0x169f0111, 0x16a00111, 0x16a10111, 0x16a20111, 0x16a30111, - 0x16a40111, 0x16a50111, 0x16a60111, 0x16a70111, 0x16a80111, 0x16a90111, 0x16aa0111, 0x16ab0111, - 0x16ac0111, 0x16ad0111, 0x16ae0111, 0x16af0111, 0x16b00111, 0x16b10111, 0x16b20111, 0x16b30111, - 0x16b40111, 0x16b50111, 0x16b60111, 0x16b70111, 0x16b80111, 0x16b90111, 0x16ba0111, 0x16bb0111, - 0x16bc0111, 0x16bd0111, 0x16be0111, 0x16bf0111, 0x16c00111, 0x16c10111, 0x16c20111, 0x16c30111, - 0x16c40111, 0x16c50111, 0x16c60111, 0x16c70111, 0x16c80111, 0x16c90111, 0x16ca0111, 0x16cb0111, - 0x16cc0111, 0x16cd0111, 0x16ce0111, 0x16cf0111, 0x16d00111, 0x16d10111, 0x16d20111, 0x16d30111, - 0x16d40111, 0x16d50111, 0x16d60111, 0x16d70111, 0x16d80111, 0x16d90111, 0x16da0111, 0x16db0111, - 0x16dc0111, 0x16dd0111, 0x16de0111, 0x16df0111, 0x16e00111, 0x16e10111, 0x16e20111, 0x16e30111, - 0x16e40111, 0x16e50111, 0x16e60111, 0x16e70111, 0x16e80111, 0x16e90111, 0x16ea0111, 0x16eb0111, - 0x16ec0111, 0x16ed0111, 0x16ee0111, 0x16ef0111, 0x16f00111, 0x16f10111, 0x16f20111, 0x16f30111, - 0x16f40111, 0x16f50111, 0x16f60111, 0x16f70111, 0x172a0111, 0x16f80111, 0x16fa0111, 0x16fb0111, - 0x16fc0111, 0x16fd0111, 0x16fe0111, 0x16ff0111, 0x17000111, 0x17010111, 0x17020111, 0x17030111, - 0x17040111, 0x17050111, 0x17060111, 0x17070111, 0x17080111, 0x17090111, 0x170b0111, 0x170c0111, - 0x170d0111, 0x170e0111, 0x170f0111, 0x17100111, 0x17110111, 0x17120111, 0x17190111, 0x171a0111, - 0x171b0111, 0x171c0111, 0x171d0111, 0x171e0111, 0x171f0111, 0x17200111, 0x17210111, 0x17220111, - 0x17230111, 0x17240111, 0x17250111, 0x17260111, 0x17270111, 0x17280111, 0x17290111, 0x172b0111, - 0x172c0111, 0x172d0111, 0x172e0111, 0x172f0111, 0x17300111, 0x17310111, 0x17320111, 0x17330111, - 0x17340111, 0x17350111, 0x17360111, 0x17370111, 0x17380111, 0x17390111, 0x173a0111, 0x173b0111, - 0x173c0111, 0x173d0111, 0x173e0111, 0x173f0111, 0x17400111, 0x17410111, 0x17420111, 0x17430111, - 0x17440111, 0x17450111, 0x17460111, 0x17470111, 0x17480111, 0x17490111, 0x174a0111, 0x174b0111, - 0x174c0111, 0x174d0111, 0x174e0111, 0x174f0111, 0x17500111, 0x17510111, 0x17520111, 0x17530111, - 0x17540111, 0x17550111, 0x17560111, 0x17570111, 0x17580111, 0x17590111, 0x175a0111, 0x175b0111, - 0x175c0111, 0x175d0111, 0x175e0111, 0x175f0111, 0x17600111, 0x17610111, 0x17620111, 0x17630111, - 0x17640111, 0x17650111, 0x17660111, 0x17670111, 0x17680111, 0x17690111, 0x176a0111, 0x176b0111, - 0x176c0111, 0x176d0111, 0x176e0111, 0x176f0111, 0x17700111, 0x17710111, 0x17720111, 0x17730111, - 0x17740111, 0x17750111, 0x17760111, 0x17770111, 0x17780111, 0x17790111, 0x177a0111, 0x177b0111, - 0x177c0111, 0x177d0111, 0x177e0111, 0x177f0111, 0x17800111, 0x17810111, 0x17820111, 0x17830111, - /* 0x1600 .. 0x16ff */ - 0x17840111, 0x17850111, 0x17860111, 0x17870111, 0x17880111, 0x17890111, 0x178a0111, 0x178b0111, - 0x178c0111, 0x178d0111, 0x178e0111, 0x178f0111, 0x17900111, 0x17910111, 0x17920111, 0x17930111, - 0x17940111, 0x17950111, 0x17960111, 0x17970111, 0x17980111, 0x17990111, 0x179a0111, 0x179b0111, - 0x179c0111, 0x179d0111, 0x179e0111, 0x179f0111, 0x17a00111, 0x17a10111, 0x17a20111, 0x17a30111, - 0x17a40111, 0x17a50111, 0x17a60111, 0x17a70111, 0x17a80111, 0x17a90111, 0x17aa0111, 0x17ab0111, - 0x17ac0111, 0x17ad0111, 0x17ae0111, 0x17af0111, 0x17b00111, 0x17b10111, 0x17b20111, 0x17b30111, - 0x17b40111, 0x17b50111, 0x17b60111, 0x17b70111, 0x17b80111, 0x17b90111, 0x17ba0111, 0x17bb0111, - 0x17bc0111, 0x17bd0111, 0x17be0111, 0x17bf0111, 0x17c00111, 0x17c10111, 0x17c20111, 0x17c30111, - 0x17c40111, 0x17c50111, 0x17c60111, 0x17c70111, 0x17c80111, 0x17c90111, 0x17ca0111, 0x17cb0111, - 0x17cc0111, 0x17cd0111, 0x17ce0111, 0x17cf0111, 0x17d00111, 0x17d10111, 0x17d20111, 0x17d30111, - 0x17d40111, 0x17d50111, 0x17d60111, 0x17d70111, 0x17d80111, 0x17d90111, 0x17da0111, 0x17db0111, - 0x17dc0111, 0x17dd0111, 0x17de0111, 0x17df0111, 0x17e00111, 0x17e10111, 0x17e20111, 0x17e30111, - 0x17e40111, 0x17e50111, 0x17e60111, 0x17e70111, 0x17e80111, 0x17e90111, 0x17ea0111, 0x17eb0111, - 0x17ec0111, 0x17ed0111, 0x17ee0111, 0x17ef0111, 0x17f00111, 0x03310111, 0x025d0111, 0x16f90111, - 0x170a0111, 0x17130111, 0x17140111, 0x17150111, 0x17160111, 0x17170111, 0x17180111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x020a0111, 0x17f10111, 0x17f20111, 0x17f30111, 0x17f40111, 0x17f50111, 0x17f60111, 0x17f70111, - 0x17f80111, 0x17f90111, 0x17fa0111, 0x17fb0111, 0x17fc0111, 0x17fd0111, 0x17fe0111, 0x17ff0111, - 0x18000111, 0x18010111, 0x18020111, 0x18030111, 0x18040111, 0x18050111, 0x18060111, 0x18070111, - 0x18080111, 0x18090111, 0x180a0111, 0x02840111, 0x02850111, 0xffffffff, 0xffffffff, 0xffffffff, - 0x180b0111, 0x180b0121, 0x180c0111, 0x18280111, 0x180c0121, 0x180c0121, 0x180d0111, 0x180d0121, - 0x180e0111, 0x180e0121, 0x18260111, 0x18270111, 0x180e0121, 0x180e0121, 0x180e0121, 0x180f0111, - 0x18100111, 0x18110111, 0x18120111, 0x18120121, 0x18120121, 0x18120121, 0x18120121, 0x18130111, - 0x182b0111, 0x18140111, 0x18150111, 0x18150121, 0x18150121, 0x18150121, 0x18160111, 0x18160121, - 0x18160121, 0x18170111, 0x18170121, 0x18180111, 0x18180121, 0x18190111, 0x18190121, 0x181a0111, - 0x181b0111, 0x181c0111, 0x181d0111, 0x181d0121, 0x181d0121, 0x181d0121, 0x181d0121, 0x181e0111, - 0x181e0121, 0x181e0121, 0x181f0111, 0x181f0121, 0x181f0121, 0x181b0121, 0x18200111, 0x18210111, - 0x18210121, 0x18210121, 0x18220111, 0x18220121, 0x18230111, 0x18230121, 0x18240111, 0x18250111, - 0x18290111, 0x182d0111, 0x182e0111, 0x182a0111, 0x182c0111, 0x182f0111, 0x18300111, 0x18300121, - 0x18300121, 0x18140121, 0x181d0121, 0x02480111, 0x02490111, 0x024a0111, 0x18190121, 0x18210121, - 0x180d0121, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x1700 .. 0x17ff */ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x145f0111, 0x14600111, 0x14610111, 0x14620111, 0x14630111, 0x14640111, 0x14650111, 0x14660111, - 0x14670111, 0x14680111, 0x14690111, 0x146a0111, 0x146b0111, 0x146c0111, 0x146d0111, 0x146e0111, - 0x146f0111, 0x14700111, 0x14710111, 0x14720111, 0x14730111, 0x14740111, 0x14750111, 0x14760111, - 0x14770111, 0x14780111, 0x14790111, 0x147a0111, 0x147b0111, 0x147c0111, 0x147d0111, 0x147e0111, - 0x147f0111, 0x14800111, 0x14810111, 0x14820111, 0x14830111, 0x14840111, 0x14850111, 0x14860111, - 0x14870111, 0x14880111, 0x14890111, 0x148a0111, 0x148b0111, 0x148c0111, 0x148d0111, 0x148e0111, - 0x148f0111, 0x14900111, 0x14910111, 0x14920111, 0x14930111, 0x14940111, 0x14950111, 0x14960111, - 0x14970111, 0x14980111, 0x14990111, 0x149a0111, 0x149b0111, 0x149c0111, 0x149d0111, 0x149e0111, - 0x149f0111, 0x14a00111, 0x14a10111, 0x14a20111, 0x14a30111, 0x14a40111, 0x0000cf11, 0x0000d011, - 0x0000d111, 0x0000d211, 0x0000d311, 0x0000d411, 0x0000d511, 0x0000d611, 0x0000d711, 0x0000d811, - 0x0000d911, 0x0000da11, 0x14a50111, 0x0000db11, 0x02640111, 0x02650111, 0x02470111, 0x02e40111, - 0x02e50111, 0x02e60111, 0x02e70111, 0x09e60111, 0x02e80111, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x1800 .. 0x18ff */ - 0x02cb0111, 0x02560111, 0x02320111, 0x025b0111, 0x02440111, 0x02450111, 0x02230111, 0x02240111, - 0x02330111, 0x025c0111, 0x02cc0111, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, - 0x0a0b0111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x14ae0111, 0x14b00111, 0x14b30111, 0x14b90111, 0x14bb0111, 0x14be0111, 0x14c00111, 0x14c30111, - 0x14c40111, 0x14c50111, 0x14ca0111, 0x14cc0111, 0x14cf0111, 0x14d10111, 0x14d60111, 0x14d80111, - 0x14d90111, 0x14da0111, 0x14e10111, 0x14e40111, 0x14e70111, 0x14ec0111, 0x14f00111, 0x14f30111, - 0x14f50111, 0x14f70111, 0x14fa0111, 0x14ff0111, 0x15000111, 0x15030111, 0x15070111, 0x150a0111, - 0x150b0111, 0x150c0111, 0x150d0111, 0x14ad0111, 0x14b10111, 0x14b40111, 0x14ba0111, 0x14bc0111, - 0x14bf0111, 0x14c10111, 0x14c60111, 0x14cb0111, 0x14cd0111, 0x14d00111, 0x14d20111, 0x14d70111, - 0x14e20111, 0x14e50111, 0x14e80111, 0x14ed0111, 0x15010111, 0x14f10111, 0x14f60111, 0x14fb0111, - 0x15050111, 0x15080111, 0x150e0111, 0x150f0111, 0x14ea0111, 0x14b20111, 0x14b50111, 0x14b80111, - 0x14c20111, 0x14bd0111, 0x14c70111, 0x14fc0111, 0x14d30111, 0x14d50111, 0x14ce0111, 0x14db0111, - 0x14e30111, 0x14e60111, 0x14ee0111, 0x14f80111, 0x15060111, 0x15090111, 0x15020111, 0x15040111, - 0x15100111, 0x14e90111, 0x14f20111, 0x14b60111, 0x14fd0111, 0x14f40111, 0x14f90111, 0x14ef0111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x14a60111, 0x14a70111, 0x14a80111, 0x14a90111, 0x14aa0111, 0x14ab0111, 0x14ac0111, 0x14af0111, - 0x14b70111, 0x14fe0111, 0x14c80111, 0x14eb0111, 0x15110111, 0x15130111, 0x15140111, 0x15160111, - 0x15170111, 0x151a0111, 0x151c0111, 0x151d0111, 0x151f0111, 0x15210111, 0x15230111, 0x15240111, - 0x15180111, 0x15220111, 0x14d40111, 0x14c90111, 0x14dc0111, 0x14dd0111, 0x15120111, 0x15150111, - 0x15190111, 0x151b0111, 0x14de0111, 0x15200111, 0x14df0111, 0x14e00111, 0x15250111, 0x15260111, - 0x151e0111, 0x15270111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x1e00 .. 0x1eff */ - 0x0a150151, 0x0a150111, 0x0a290141, 0x0a290111, 0x0a290141, 0x0a290111, 0x0a290141, 0x0a290111, - 0x0a3d0151, 0x0a3d0111, 0x0a490151, 0x0a490111, 0x0a490151, 0x0a490111, 0x0a490151, 0x0a490111, - 0x0a490151, 0x0a490111, 0x0a490151, 0x0a490111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, - 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, 0x0a910151, 0x0a910111, - 0x0a990151, 0x0a990111, 0x0ab90151, 0x0ab90111, 0x0ab90151, 0x0ab90111, 0x0ab90151, 0x0ab90111, - 0x0ab90151, 0x0ab90111, 0x0ab90151, 0x0ab90111, 0x0ad30161, 0x0ad30111, 0x0ad30161, 0x0ad30111, - 0x0af70141, 0x0af70111, 0x0af70141, 0x0af70111, 0x0af70141, 0x0af70111, 0x0b030161, 0x0b030111, - 0x0b030161, 0x0b030111, 0x0b030161, 0x0b030111, 0x0b030161, 0x0b030111, 0x0b2b0151, 0x0b2b0111, - 0x0b2b0151, 0x0b2b0111, 0x0b2b0151, 0x0b2b0111, 0x0b330151, 0x0b330111, 0x0b330151, 0x0b330111, - 0x0b330151, 0x0b330111, 0x0b330151, 0x0b330111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, - 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, 0x0b670141, 0x0b670111, 0x0b670141, 0x0b670111, - 0x0b7f0141, 0x0b7f0111, 0x0b7f0141, 0x0b7f0111, 0x0b7f0141, 0x0b7f0111, 0x0b7f0141, 0x0b7f0111, - 0x0ba70151, 0x0ba70111, 0x0ba70151, 0x0ba70111, 0x0ba70151, 0x0ba70111, 0x0ba70151, 0x0ba70111, - 0x0ba70151, 0x0ba70111, 0x0bbf0151, 0x0bbf0111, 0x0bbf0151, 0x0bbf0111, 0x0bbf0151, 0x0bbf0111, - 0x0bbf0151, 0x0bbf0111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, - 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bef0151, 0x0bef0111, 0x0bef0151, 0x0bef0111, - 0x0bfb0141, 0x0bfb0111, 0x0bfb0141, 0x0bfb0111, 0x0bfb0141, 0x0bfb0111, 0x0bfb0141, 0x0bfb0111, - 0x0bfb0141, 0x0bfb0111, 0x0c030151, 0x0c030111, 0x0c030151, 0x0c030111, 0x0c070141, 0x0c070111, - 0x0c130141, 0x0c130111, 0x0c130141, 0x0c130111, 0x0c130141, 0x0c130111, 0x0ab90111, 0x0bbf0111, - 0x0bfb0111, 0x0c070111, 0x0a150131, 0x0ba70131, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, - 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, - 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, 0x0a150151, 0x0a150111, - 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, - 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, 0x0a650151, 0x0a650111, - 0x0ad30161, 0x0ad30111, 0x0ad30161, 0x0ad30111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, - 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, - 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, - 0x0b4b0161, 0x0b4b0111, 0x0b4b0161, 0x0b4b0111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, - 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, 0x0bd70141, 0x0bd70111, - 0x0bd70141, 0x0bd70111, 0x0c070141, 0x0c070111, 0x0c070141, 0x0c070111, 0x0c070141, 0x0c070111, - 0x0c070141, 0x0c070111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x1f00 .. 0x1fff */ - 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, - 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, - 0x0c950111, 0x0c950111, 0x0c950111, 0x0c950111, 0x0c950111, 0x0c950111, 0xffffffff, 0xffffffff, - 0x0c950131, 0x0c950131, 0x0c950131, 0x0c950131, 0x0c950131, 0x0c950131, 0xffffffff, 0xffffffff, - 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, - 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, - 0x0c9b0111, 0x0c9b0111, 0x0c9b0111, 0x0c9b0111, 0x0c9b0111, 0x0c9b0111, 0x0c9b0111, 0x0c9b0111, - 0x0c9b0121, 0x0c9b0121, 0x0c9b0121, 0x0c9b0121, 0x0c9b0121, 0x0c9b0121, 0x0c9b0121, 0x0c9b0121, - 0x0ca20111, 0x0ca20111, 0x0ca20111, 0x0ca20111, 0x0ca20111, 0x0ca20111, 0xffffffff, 0xffffffff, - 0x0ca20121, 0x0ca20121, 0x0ca20121, 0x0ca20121, 0x0ca20121, 0x0ca20121, 0xffffffff, 0xffffffff, - 0x0ca80111, 0x0ca80111, 0x0ca80111, 0x0ca80111, 0x0ca80111, 0x0ca80111, 0x0ca80111, 0x0ca80111, - 0xffffffff, 0x0ca80121, 0xffffffff, 0x0ca80121, 0xffffffff, 0x0ca80121, 0xffffffff, 0x0ca80121, - 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, - 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, - 0x0c910111, 0x0c910111, 0x0c950111, 0x0c950111, 0x0c990111, 0x0c990111, 0x0c9b0111, 0x0c9b0111, - 0x0ca20111, 0x0ca20111, 0x0ca80111, 0x0ca80111, 0x0cac0111, 0x0cac0111, 0xffffffff, 0xffffffff, - 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, - 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, - 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, 0x0c990111, - 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, 0x0c990121, - 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0x0cac0111, - 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x0cac0121, - 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0x0c910111, 0xffffffff, 0x0c910111, 0x0c910111, - 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x0c910121, 0x02170111, 0x0c9b0111, 0x02170111, - 0x021d0111, 0x02140111, 0x0c990111, 0x0c990111, 0x0c990111, 0xffffffff, 0x0c990111, 0x0c990111, - 0x0c950131, 0x0c950131, 0x0c990121, 0x0c990121, 0x0c990121, 0x02170111, 0x02170111, 0x02170111, - 0x0c9b0111, 0x0c9b0111, 0x0c9b0111, 0x0c9b0111, 0xffffffff, 0xffffffff, 0x0c9b0111, 0x0c9b0111, - 0x0c9b0121, 0x0c9b0121, 0x0c9b0121, 0x0c9b0121, 0xffffffff, 0x02180111, 0x02180111, 0x02180111, - 0x0ca80111, 0x0ca80111, 0x0ca80111, 0x0ca80111, 0x0ca50111, 0x0ca50111, 0x0ca80111, 0x0ca80111, - 0x0ca80121, 0x0ca80121, 0x0ca80121, 0x0ca80121, 0x0ca50131, 0x02140111, 0x02140111, 0x020c0111, - 0xffffffff, 0xffffffff, 0x0cac0111, 0x0cac0111, 0x0cac0111, 0xffffffff, 0x0cac0111, 0x0cac0111, - 0x0ca20121, 0x0ca20121, 0x0cac0121, 0x0cac0121, 0x0cac0121, 0x020d0111, 0x02180111, 0xffffffff, - /* 0x2000 .. 0x20ff */ - 0x02090131, 0x02090131, 0x02090131, 0x02090131, 0x02090131, 0x02090131, 0x02090131, 0x02090141, - 0x02090131, 0x02090131, 0x02090131, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x02250111, 0x02250121, 0x02260111, 0x02270111, 0x02280111, 0x02290111, 0x03a90111, 0x021c0111, - 0x026a0111, 0x026b0111, 0x026c0111, 0x026d0111, 0x02710111, 0x02720111, 0x02730111, 0x02740111, - 0x02ae0111, 0x02af0111, 0x02b00111, 0x02b10111, 0x02550131, 0x02550131, 0x02550131, 0x02b20111, - 0x02070111, 0x02080111, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02090141, - 0x02ac0111, 0x02ad0111, 0x02b60111, 0x02b60121, 0x02b60121, 0x02b70111, 0x02b70121, 0x02b70121, - 0x02b90111, 0x026e0111, 0x026f0111, 0x02ba0111, 0x024b0131, 0x02540111, 0x02110111, 0x02bb0111, - 0x02bc0111, 0x02bd0111, 0x02be0111, 0x02b30111, 0x02a50111, 0x02860111, 0x02870111, 0xffffffff, - 0x024e0131, 0x024b0131, 0x02a80111, 0x029e0111, 0x02b40111, 0x02b50111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0a0b0151, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0f0151, 0x0a100151, 0x0a110151, 0x0a120151, - 0x0a130151, 0x0a140151, 0x039f0151, 0x03ab0121, 0x03a40141, 0x027a0151, 0x027b0141, 0x0b3301a1, - 0x0a0b0161, 0x0a0c0161, 0x0a0d0161, 0x0a0e0161, 0x0a0f0161, 0x0a100161, 0x0a110161, 0x0a120161, - 0x0a130161, 0x0a140161, 0x039f0161, 0x03ab0131, 0x03a40151, 0x027a0161, 0x027b0151, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x09e70111, 0x09e80111, 0x09e90111, 0x09ea0111, 0x09eb0111, 0x09ec0111, 0x09ed0111, 0x09ee0111, - 0x0b7f0161, 0x09ef0111, 0x09f00111, 0x09f10111, 0x09f20111, 0x09f30111, 0x09f40111, 0x09f50111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0000e411, 0x0000e511, 0x0000e611, 0x0000e711, 0x0000e811, 0x0000e911, 0x0000ea11, 0x0000eb11, - 0x0000ec11, 0x0000ed11, 0x0000ee11, 0x0000ef11, 0x0000f011, 0x0000f111, 0x0000f211, 0x0000f311, - 0x0000f411, 0x0000f511, 0x0000f611, 0x0000f711, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2100 .. 0x21ff */ - 0x0a150131, 0x0a150131, 0x0a3d0181, 0x030a0121, 0x09f60111, 0x0a3d0131, 0x0a3d0131, 0x0a710131, - 0x09f70111, 0x030a0121, 0x0a990131, 0x0ab90171, 0x0ab90171, 0x0ab90171, 0x0ab90131, 0x0ac50121, - 0x0ad30191, 0x0ad30191, 0x0b030191, 0x0b030141, 0x09f80111, 0x0b330181, 0x0b330171, 0x09f90111, - 0x09fa0111, 0x0b670161, 0x0b730161, 0x0b7f0171, 0x0b7f0171, 0x0b7f0171, 0x09fb0111, 0x09fc0111, - 0x0ba70181, 0x0bbf0171, 0x0bbf0191, 0x09fd0111, 0x0c130161, 0x09fe0111, 0x0cac0121, 0x09ff0111, - 0x0c130161, 0x0a000111, 0x0af70141, 0x0a150151, 0x0a290161, 0x0a3d0181, 0x0a010111, 0x0a650131, - 0x0a650171, 0x0a910171, 0x0a020111, 0x0b2b0181, 0x0b4b0141, 0x0eb70121, 0x0eb80121, 0x0eb90121, - 0x0eba0121, 0x0ad30141, 0x0a030111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0c0171, 0x0a0d0171, 0x0a0c0171, 0x0a0d0171, 0x0a0e0171, - 0x0a0f0171, 0x0a0c0171, 0x0a100171, 0x0a0c0171, 0x0a0e0171, 0x0a100171, 0x0a120171, 0x0a0c0171, - 0x0ad30181, 0x0ad30181, 0x0ad30181, 0x0ad30181, 0x0bef0171, 0x0bef0171, 0x0bef0171, 0x0bef0171, - 0x0ad30181, 0x0c030171, 0x0c030171, 0x0c030171, 0x0b030181, 0x0a3d0171, 0x0a490171, 0x0b2b0171, - 0x0ad30131, 0x0ad30131, 0x0ad30131, 0x0ad30131, 0x0bef0131, 0x0bef0131, 0x0bef0131, 0x0bef0131, - 0x0ad30131, 0x0c030131, 0x0c030131, 0x0c030131, 0x0b030131, 0x0a3d0131, 0x0a490131, 0x0b2b0131, - 0x0a040111, 0x0a050111, 0x0a060111, 0x0a070111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x03320111, 0x03340111, 0x03330111, 0x03350111, 0x03360111, 0x03370111, 0x03380111, 0x03390111, - 0x033a0111, 0x033b0111, 0x03320111, 0x03330111, 0x033c0111, 0x033d0111, 0x033e0111, 0x033f0111, - 0x03400111, 0x03410111, 0x03420111, 0x03430111, 0x03440111, 0x03450111, 0x03460111, 0x03470111, - 0x03480111, 0x03490111, 0x034a0111, 0x034b0111, 0x034c0111, 0x034d0111, 0x03360111, 0x034e0111, - 0x034f0111, 0x03500111, 0x03510111, 0x03520111, 0x03530111, 0x03540111, 0x03550111, 0x03560111, - 0x03570111, 0x03580111, 0x03590111, 0x035a0111, 0x035b0111, 0x035c0111, 0x035d0111, 0x035e0111, - 0x035f0111, 0x03600111, 0x03610111, 0x03620111, 0x03630111, 0x03640111, 0x03650111, 0x03660111, - 0x03670111, 0x03680111, 0x03690111, 0x036a0111, 0x036b0111, 0x036c0111, 0x03700111, 0x036e0111, - 0x036c0111, 0x036d0111, 0x036e0111, 0x036f0111, 0x03700111, 0x03710111, 0x03720111, 0x03730111, - 0x03740111, 0x03750111, 0x03760111, 0x03770111, 0x03780111, 0x03790111, 0x037a0111, 0x037b0111, - 0x037c0111, 0x037d0111, 0x037e0111, 0x037f0111, 0x03800111, 0x03810111, 0x03820111, 0x03830111, - 0x03840111, 0x03850111, 0x03860111, 0x03870111, 0x03880111, 0x03890111, 0x038a0111, 0x038b0111, - 0x038c0111, 0x038d0111, 0x038e0111, 0x038f0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2200 .. 0x22ff */ - 0x03900111, 0x03910111, 0x03920111, 0x03930111, 0x03930111, 0x03940111, 0x03950111, 0x03960111, - 0x03970111, 0x03970111, 0x03980111, 0x03990111, 0x03990111, 0x039a0111, 0x039b0111, 0x039c0111, - 0x039d0111, 0x039e0111, 0x03ab0111, 0x03ac0111, 0x03ad0111, 0x03ae0111, 0x03af0111, 0x03b00111, - 0x03b10111, 0x03b20111, 0x03b30111, 0x03b40111, 0x03b50111, 0x03b60111, 0x03b70111, 0x03b80111, - 0x03b90111, 0x03ba0111, 0x03bb0111, 0x03bc0111, 0x03bc0111, 0x03bd0111, 0x03bd0111, 0x03be0111, - 0x03bf0111, 0x03c00111, 0x03c10111, 0x03c20111, 0x03c20121, 0x03c20121, 0x03c30111, 0x03c30121, - 0x03c30121, 0x03c40111, 0x03c50111, 0x03c60111, 0x03c70111, 0x03c80111, 0x03c90111, 0x03ca0111, - 0x03cb0111, 0x03cc0111, 0x03cd0111, 0x03ce0111, 0x03cf0111, 0x03d00111, 0x03d10111, 0x03d20111, - 0x03d30111, 0x03cf0111, 0x03d40111, 0x03d50111, 0x03d50111, 0x03d60111, 0x03d70111, 0x03d60111, - 0x03d80111, 0x03d80111, 0x03d90111, 0x03da0111, 0x03db0111, 0x03dc0111, 0x03dd0111, 0x03de0111, - 0x03df0111, 0x03e00111, 0x03e10111, 0x03e20111, 0x03e30111, 0x03e40111, 0x03e50111, 0x03e60111, - 0x03e70111, 0x03e80111, 0x03e90111, 0x03ea0111, 0x03eb0111, 0x03ec0111, 0x03ed0111, 0x03ee0111, - 0x03a40111, 0x03ef0111, 0x03ef0111, 0x03f00111, 0x03f10111, 0x03f20111, 0x03f30111, 0x03f40111, - 0x03f50111, 0x03f60111, 0x03f70111, 0x03f80111, 0x03f90111, 0x03dc0111, 0x03a30111, 0x03a50111, - 0x03f10111, 0x03f20111, 0x03fa0111, 0x03fb0111, 0x03fa0111, 0x03fb0111, 0x03fc0111, 0x03fd0111, - 0x03fc0111, 0x03fd0111, 0x03fe0111, 0x03ff0111, 0x04000111, 0x04010111, 0x04020111, 0x04030111, - 0x03fe0111, 0x03ff0111, 0x04040111, 0x04050111, 0x04040111, 0x04050111, 0x04060111, 0x04070111, - 0x04060111, 0x04070111, 0x04080111, 0x04090111, 0x040a0111, 0x040b0111, 0x040c0111, 0x040d0111, - 0x040e0111, 0x040f0111, 0x04100111, 0x04110111, 0x04120111, 0x04130111, 0x04140111, 0x04150111, - 0x04160111, 0x04170111, 0x04180111, 0x04190111, 0x041a0111, 0x041b0111, 0x041c0111, 0x041d0111, - 0x041e0111, 0x041f0111, 0x04200111, 0x04210111, 0x04220111, 0x04230111, 0x04240111, 0x04250111, - 0x04260111, 0x04270111, 0x04280111, 0x04290111, 0x04200111, 0x04260111, 0x04270111, 0x04290111, - 0x042a0111, 0x042b0111, 0x042c0111, 0x042d0111, 0x042e0111, 0x042f0111, 0x04300111, 0x04310111, - 0x04320111, 0x04330111, 0x04340111, 0x04350111, 0x04360111, 0x04370111, 0x04380111, 0x04390111, - 0x043a0111, 0x043b0111, 0x043c0111, 0x043d0111, 0x043e0111, 0x043f0111, 0x04400111, 0x04410111, - 0x04420111, 0x04430111, 0x04440111, 0x04450111, 0x04460111, 0x04470111, 0x04480111, 0x04490111, - 0x044a0111, 0x044b0111, 0x044c0111, 0x044d0111, 0x044e0111, 0x044f0111, 0x04500111, 0x04510111, - 0x04520111, 0x04530111, 0x04540111, 0x04550111, 0x04560111, 0x04570111, 0x04580111, 0x04590111, - 0x04000111, 0x04010111, 0x040f0111, 0x04100111, 0x045a0111, 0x045b0111, 0x045c0111, 0x045d0111, - 0x045e0111, 0x045f0111, 0x042c0111, 0x042d0111, 0x042e0111, 0x042f0111, 0x04600111, 0x04610111, - 0x04620111, 0x04630111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2300 .. 0x23ff */ - 0x04640111, 0x04650111, 0x04660111, 0x04670111, 0x04680111, 0x04690111, 0x046a0111, 0x046b0111, - 0x046c0111, 0x046d0111, 0x046e0111, 0x046f0111, 0x04700111, 0x04710111, 0x04720111, 0x04730111, - 0x04740111, 0x04750111, 0x04760111, 0x04770111, 0x04780111, 0x04790111, 0x047a0111, 0x047b0111, - 0x047c0111, 0x047d0111, 0x047e0111, 0x047f0111, 0x04800111, 0x04810111, 0x04820111, 0x04830111, - 0x04840111, 0x04850111, 0x04860111, 0x04870111, 0x04880111, 0x04890111, 0x048a0111, 0x048b0111, - 0x048c0111, 0x02880111, 0x02890111, 0x048d0111, 0x048e0111, 0x048f0111, 0x04900111, 0x04910111, - 0x04920111, 0x04930111, 0x04940111, 0x04950111, 0x04960111, 0x04970111, 0x04980111, 0x04990111, - 0x049a0111, 0x049b0111, 0x049c0111, 0x049d0111, 0x049e0111, 0x049f0111, 0x04a00111, 0x04a10111, - 0x04a20111, 0x04a30111, 0x04a40111, 0x04a50111, 0x04a60111, 0x04a70111, 0x04a80111, 0x04a90111, - 0x04aa0111, 0x04ab0111, 0x04ac0111, 0x04ad0111, 0x04ae0111, 0x04af0111, 0x04b00111, 0x04b10111, - 0x04b20111, 0x04b30111, 0x04b40111, 0x04b50111, 0x04b60111, 0x04b70111, 0x04b80111, 0x04b90111, - 0x04ba0111, 0x04bb0111, 0x04bc0111, 0x04bd0111, 0x04be0111, 0x04bf0111, 0x04c00111, 0x04c10111, - 0x04c20111, 0x04c30111, 0x04c40111, 0x04c50111, 0x04c60111, 0x04c70111, 0x04c80111, 0x04c90111, - 0x04ca0111, 0x04cb0111, 0x04cc0111, 0x04cd0111, 0x04ce0111, 0x04cf0111, 0x04d00111, 0x04d10111, - 0x04d20111, 0x04d30111, 0x04d40111, 0x04d50111, 0x04d60111, 0x04d70111, 0x04d80111, 0x04d90111, - 0x04da0111, 0x04db0111, 0x04dc0111, 0x04dd0111, 0xffffffff, 0x04de0111, 0x04df0111, 0x04e00111, - 0x04e10111, 0x04e20111, 0x04e30111, 0x04e40111, 0x04e50111, 0x04e60111, 0x04e70111, 0x04e80111, - 0x04e90111, 0x04ea0111, 0x04eb0111, 0x04ec0111, 0x04ed0111, 0x04ee0111, 0x04ef0111, 0x04f00111, - 0x04f10111, 0x04f20111, 0x04f30111, 0x04f40111, 0x04f50111, 0x04f60111, 0x04f70111, 0x04f80111, - 0x04f90111, 0x04fa0111, 0x04fb0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2400 .. 0x24ff */ - 0x04fc0111, 0x04fd0111, 0x04fe0111, 0x04ff0111, 0x05000111, 0x05010111, 0x05020111, 0x05030111, - 0x05040111, 0x05050111, 0x05060111, 0x05070111, 0x05080111, 0x05090111, 0x050a0111, 0x050b0111, - 0x050c0111, 0x050d0111, 0x050e0111, 0x050f0111, 0x05100111, 0x05110111, 0x05120111, 0x05130111, - 0x05140111, 0x05150111, 0x05160111, 0x05170111, 0x05180111, 0x05190111, 0x051a0111, 0x051b0111, - 0x051c0111, 0x051d0111, 0x051e0111, 0x051f0111, 0x05200111, 0x05210111, 0x05220111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x05230111, 0x05240111, 0x05250111, 0x05260111, 0x05270111, 0x05280111, 0x05290111, 0x052a0111, - 0x052b0111, 0x052c0111, 0x052d0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0a0c0141, 0x0a0d0141, 0x0a0e0141, 0x0a0f0141, 0x0a100141, 0x0a110141, 0x0a120141, 0x0a130141, - 0x0a140141, 0x0a0c0141, 0x0a0c0141, 0x0a0c0141, 0x0a0c0141, 0x0a0c0141, 0x0a0c0141, 0x0a0c0141, - 0x0a0c0141, 0x0a0c0141, 0x0a0c0141, 0x0a0d0141, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x0a0c0131, 0x0a0d0131, 0x0a0e0131, 0x0a0f0131, 0x0a100131, 0x0a110131, 0x0a120131, 0x0a130131, - 0x0a140131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, - 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0d0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x0a150171, 0x0a290171, - 0x0a3d0191, 0x0a490181, 0x0a650181, 0x0a910181, 0x0a990171, 0x0ab90181, 0x0ad301a1, 0x0ae70161, - 0x0af70161, 0x0b0301a1, 0x0b2b0191, 0x0b330191, 0x0b4b0191, 0x0b670171, 0x0b730171, 0x0b7f0181, - 0x0ba70171, 0x0bbf0181, 0x0bd70161, 0x0bef0181, 0x0bfb0161, 0x0c030181, 0x0c070161, 0x0c130171, - 0x0a150141, 0x0a290131, 0x0a3d0141, 0x0a490141, 0x0a650141, 0x0a910141, 0x0a990141, 0x0ab90141, - 0x0ad30151, 0x0ae70131, 0x0af70131, 0x0b030151, 0x0b2b0141, 0x0b330141, 0x0b4b0151, 0x0b670131, - 0x0b730131, 0x0b7f0131, 0x0ba70141, 0x0bbf0141, 0x0bd70131, 0x0bef0141, 0x0bfb0131, 0x0c030141, - 0x0c070131, 0x0c130131, 0x0a0b0141, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2500 .. 0x25ff */ - 0x052e0111, 0x052f0111, 0x05300111, 0x05310111, 0x05320111, 0x05330111, 0x05340111, 0x05350111, - 0x05360111, 0x05370111, 0x05380111, 0x05390111, 0x053a0111, 0x053b0111, 0x053c0111, 0x053d0111, - 0x053e0111, 0x053f0111, 0x05400111, 0x05410111, 0x05420111, 0x05430111, 0x05440111, 0x05450111, - 0x05460111, 0x05470111, 0x05480111, 0x05490111, 0x054a0111, 0x054b0111, 0x054c0111, 0x054d0111, - 0x054e0111, 0x054f0111, 0x05500111, 0x05510111, 0x05520111, 0x05530111, 0x05540111, 0x05550111, - 0x05560111, 0x05570111, 0x05580111, 0x05590111, 0x055a0111, 0x055b0111, 0x055c0111, 0x055d0111, - 0x055e0111, 0x055f0111, 0x05600111, 0x05610111, 0x05620111, 0x05630111, 0x05640111, 0x05650111, - 0x05660111, 0x05670111, 0x05680111, 0x05690111, 0x056a0111, 0x056b0111, 0x056c0111, 0x056d0111, - 0x056e0111, 0x056f0111, 0x05700111, 0x05710111, 0x05720111, 0x05730111, 0x05740111, 0x05750111, - 0x05760111, 0x05770111, 0x05780111, 0x05790111, 0x057a0111, 0x057b0111, 0x057c0111, 0x057d0111, - 0x057e0111, 0x057f0111, 0x05800111, 0x05810111, 0x05820111, 0x05830111, 0x05840111, 0x05850111, - 0x05860111, 0x05870111, 0x05880111, 0x05890111, 0x058a0111, 0x058b0111, 0x058c0111, 0x058d0111, - 0x058e0111, 0x058f0111, 0x05900111, 0x05910111, 0x05920111, 0x05930111, 0x05940111, 0x05950111, - 0x05960111, 0x05970111, 0x05980111, 0x05990111, 0x059a0111, 0x059b0111, 0x059c0111, 0x059d0111, - 0x059e0111, 0x059f0111, 0x05a00111, 0x05a10111, 0x05a20111, 0x05a30111, 0x05a40111, 0x05a50111, - 0x05a60111, 0x05a70111, 0x05a80111, 0x05a90111, 0x05aa0111, 0x05ab0111, 0x05ac0111, 0x05ad0111, - 0x05ae0111, 0x05af0111, 0x05b00111, 0x05b10111, 0x05b20111, 0x05b30111, 0x05b40111, 0x05b50111, - 0x05b60111, 0x05b70111, 0x05b80111, 0x05b90111, 0x05ba0111, 0x05bb0111, 0x05bc0111, 0x05bd0111, - 0x05be0111, 0x05bf0111, 0x05c00111, 0x05c10111, 0x05c20111, 0x05c30111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x05c40111, 0x05c50111, 0x05c60111, 0x05c70111, 0x05c80111, 0x05c90111, 0x05ca0111, 0x05cb0111, - 0x05cc0111, 0x05cd0111, 0x05ce0111, 0x05cf0111, 0x05d00111, 0x05d10111, 0x05d20111, 0x05d30111, - 0x05d40111, 0x05d50111, 0x05d60111, 0x05d70111, 0x05d80111, 0x05d90111, 0x05da0111, 0x05db0111, - 0x05dc0111, 0x05dd0111, 0x05de0111, 0x05df0111, 0x05e00111, 0x05e10111, 0x05e20111, 0x05e30111, - 0x05e40111, 0x05e50111, 0x05e60111, 0x05e70111, 0x05e80111, 0x05e90111, 0x05ea0111, 0x05eb0111, - 0x05ec0111, 0x05ed0111, 0x05ee0111, 0x05ef0111, 0x05f00111, 0x05f10111, 0x05f20111, 0x05f30111, - 0x05f40111, 0x05f50111, 0x05f60111, 0x05f70111, 0x05f80111, 0x05f90111, 0x05fa0111, 0x05fb0111, - 0x05fc0111, 0x05fd0111, 0x05fe0111, 0x05ff0111, 0x06000111, 0x06010111, 0x06020111, 0x06030111, - 0x06040111, 0x06050111, 0x06060111, 0x06070111, 0x06080111, 0x06090111, 0x060a0111, 0x060b0111, - 0x060c0111, 0x060d0111, 0x060e0111, 0x060f0111, 0x06100111, 0x06110111, 0x06120111, 0x06130111, - 0x06140111, 0x06150111, 0x06160111, 0x06170111, 0x06180111, 0x06190111, 0x061a0111, 0x061b0111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2600 .. 0x26ff */ - 0x061c0111, 0x061d0111, 0x061e0111, 0x061f0111, 0x06200111, 0x06210111, 0x06220111, 0x06230111, - 0x06240111, 0x06250111, 0x06260111, 0x06270111, 0x06280111, 0x06290111, 0x062a0111, 0x062b0111, - 0x062c0111, 0x062d0111, 0x062e0111, 0x062f0111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x06300111, 0x06310111, 0x06320111, 0x06330111, 0x06340111, 0x06350111, 0x06360111, - 0x06370111, 0x06380111, 0x06390111, 0x063a0111, 0x063b0111, 0x063c0111, 0x063d0111, 0x063e0111, - 0x063f0111, 0x06400111, 0x06410111, 0x06420111, 0x06430111, 0x06440111, 0x06450111, 0x06460111, - 0x06470111, 0x06480111, 0x06490111, 0x064a0111, 0x064b0111, 0x064c0111, 0x064d0111, 0x064e0111, - 0x064f0111, 0x06500111, 0x06510111, 0x06520111, 0x06530111, 0x06540111, 0x06550111, 0x06560111, - 0x06570111, 0x06580111, 0x06590111, 0x065a0111, 0x065b0111, 0x065c0111, 0x065d0111, 0x065e0111, - 0x065f0111, 0x06600111, 0x06610111, 0x06620111, 0x06630111, 0x06640111, 0x06650111, 0x06660111, - 0x06670111, 0x06680111, 0x06690111, 0x066a0111, 0x066b0111, 0x066c0111, 0x066d0111, 0x066e0111, - 0x066f0111, 0x06700111, 0x06710111, 0x06720111, 0x06730111, 0x06740111, 0x06750111, 0x06760111, - 0x06770111, 0x06780111, 0x06790111, 0x067a0111, 0x067b0111, 0x067c0111, 0x067d0111, 0x067e0111, - 0x067f0111, 0x06800111, 0x06810111, 0x06820111, 0x06830111, 0x0a080111, 0x0a090111, 0x0a0a0111, - 0x06840111, 0x06850111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2700 .. 0x27ff */ - 0xffffffff, 0x06860111, 0x06870111, 0x06880111, 0x06890111, 0xffffffff, 0x068a0111, 0x068b0111, - 0x068c0111, 0x068d0111, 0xffffffff, 0xffffffff, 0x068e0111, 0x068f0111, 0x06900111, 0x06910111, - 0x06920111, 0x06930111, 0x06940111, 0x06950111, 0x06960111, 0x06970111, 0x06980111, 0x06990111, - 0x069a0111, 0x069b0111, 0x069c0111, 0x069d0111, 0x069e0111, 0x069f0111, 0x06a00111, 0x06a10111, - 0x06a20111, 0x06a30111, 0x06a40111, 0x06a50111, 0x06a60111, 0x06a70111, 0x06a80111, 0x06a90111, - 0xffffffff, 0x06aa0111, 0x06ab0111, 0x06ac0111, 0x06ad0111, 0x06ae0111, 0x06af0111, 0x06b00111, - 0x06b10111, 0x06b20111, 0x06b30111, 0x06b40111, 0x06b50111, 0x06b60111, 0x06b70111, 0x06b80111, - 0x06b90111, 0x06ba0111, 0x06bb0111, 0x06bc0111, 0x06bd0111, 0x06be0111, 0x06bf0111, 0x06c00111, - 0x06c10111, 0x06c20111, 0x06c30111, 0x06c40111, 0x06c50111, 0x06c60111, 0x06c70111, 0x06c80111, - 0x06c90111, 0x06ca0111, 0x06cb0111, 0x06cc0111, 0xffffffff, 0x06cd0111, 0xffffffff, 0x06ce0111, - 0x06cf0111, 0x06d00111, 0x06d10111, 0xffffffff, 0xffffffff, 0xffffffff, 0x06d20111, 0xffffffff, - 0x06d30111, 0x06d40111, 0x06d50111, 0x06d60111, 0x06d70111, 0x06d80111, 0x06d90111, 0xffffffff, - 0xffffffff, 0x06da0111, 0x06db0111, 0x06dc0111, 0x06dd0111, 0x06de0111, 0x06df0111, 0x06e00111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0a0c0141, 0x0a0d0141, - 0x0a0e0141, 0x0a0f0141, 0x0a100141, 0x0a110141, 0x0a120141, 0x0a130141, 0x0a140141, 0x06e10111, - 0x0a0c0141, 0x0a0d0141, 0x0a0e0141, 0x0a0f0141, 0x0a100141, 0x0a110141, 0x0a120141, 0x0a130141, - 0x0a140141, 0x06e20111, 0x0a0c0141, 0x0a0d0141, 0x0a0e0141, 0x0a0f0141, 0x0a100141, 0x0a110141, - 0x0a120141, 0x0a130141, 0x0a140141, 0x06e30111, 0x06e40111, 0xffffffff, 0xffffffff, 0xffffffff, - 0x06e50111, 0x06e60111, 0x06e70111, 0x06e80111, 0x06e90111, 0x06ea0111, 0x06eb0111, 0x06ec0111, - 0x06ed0111, 0x06ee0111, 0x06ef0111, 0x06f00111, 0x06f10111, 0x06f20111, 0x06f30111, 0x06f40111, - 0x06f50111, 0x06f60111, 0x06f70111, 0x06f80111, 0x06f90111, 0x06fa0111, 0x06fb0111, 0x06fc0111, - 0xffffffff, 0x06fd0111, 0x06fe0111, 0x06ff0111, 0x07000111, 0x07010111, 0x07020111, 0x07030111, - 0x07040111, 0x07050111, 0x07060111, 0x07070111, 0x07080111, 0x07090111, 0x070a0111, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2800 .. 0x28ff */ - 0x070b0111, 0x070c0111, 0x070d0111, 0x070e0111, 0x070f0111, 0x07100111, 0x07110111, 0x07120111, - 0x07130111, 0x07140111, 0x07150111, 0x07160111, 0x07170111, 0x07180111, 0x07190111, 0x071a0111, - 0x071b0111, 0x071c0111, 0x071d0111, 0x071e0111, 0x071f0111, 0x07200111, 0x07210111, 0x07220111, - 0x07230111, 0x07240111, 0x07250111, 0x07260111, 0x07270111, 0x07280111, 0x07290111, 0x072a0111, - 0x072b0111, 0x072c0111, 0x072d0111, 0x072e0111, 0x072f0111, 0x07300111, 0x07310111, 0x07320111, - 0x07330111, 0x07340111, 0x07350111, 0x07360111, 0x07370111, 0x07380111, 0x07390111, 0x073a0111, - 0x073b0111, 0x073c0111, 0x073d0111, 0x073e0111, 0x073f0111, 0x07400111, 0x07410111, 0x07420111, - 0x07430111, 0x07440111, 0x07450111, 0x07460111, 0x07470111, 0x07480111, 0x07490111, 0x074a0111, - 0x074b0111, 0x074c0111, 0x074d0111, 0x074e0111, 0x074f0111, 0x07500111, 0x07510111, 0x07520111, - 0x07530111, 0x07540111, 0x07550111, 0x07560111, 0x07570111, 0x07580111, 0x07590111, 0x075a0111, - 0x075b0111, 0x075c0111, 0x075d0111, 0x075e0111, 0x075f0111, 0x07600111, 0x07610111, 0x07620111, - 0x07630111, 0x07640111, 0x07650111, 0x07660111, 0x07670111, 0x07680111, 0x07690111, 0x076a0111, - 0x076b0111, 0x076c0111, 0x076d0111, 0x076e0111, 0x076f0111, 0x07700111, 0x07710111, 0x07720111, - 0x07730111, 0x07740111, 0x07750111, 0x07760111, 0x07770111, 0x07780111, 0x07790111, 0x077a0111, - 0x077b0111, 0x077c0111, 0x077d0111, 0x077e0111, 0x077f0111, 0x07800111, 0x07810111, 0x07820111, - 0x07830111, 0x07840111, 0x07850111, 0x07860111, 0x07870111, 0x07880111, 0x07890111, 0x078a0111, - 0x078b0111, 0x078c0111, 0x078d0111, 0x078e0111, 0x078f0111, 0x07900111, 0x07910111, 0x07920111, - 0x07930111, 0x07940111, 0x07950111, 0x07960111, 0x07970111, 0x07980111, 0x07990111, 0x079a0111, - 0x079b0111, 0x079c0111, 0x079d0111, 0x079e0111, 0x079f0111, 0x07a00111, 0x07a10111, 0x07a20111, - 0x07a30111, 0x07a40111, 0x07a50111, 0x07a60111, 0x07a70111, 0x07a80111, 0x07a90111, 0x07aa0111, - 0x07ab0111, 0x07ac0111, 0x07ad0111, 0x07ae0111, 0x07af0111, 0x07b00111, 0x07b10111, 0x07b20111, - 0x07b30111, 0x07b40111, 0x07b50111, 0x07b60111, 0x07b70111, 0x07b80111, 0x07b90111, 0x07ba0111, - 0x07bb0111, 0x07bc0111, 0x07bd0111, 0x07be0111, 0x07bf0111, 0x07c00111, 0x07c10111, 0x07c20111, - 0x07c30111, 0x07c40111, 0x07c50111, 0x07c60111, 0x07c70111, 0x07c80111, 0x07c90111, 0x07ca0111, - 0x07cb0111, 0x07cc0111, 0x07cd0111, 0x07ce0111, 0x07cf0111, 0x07d00111, 0x07d10111, 0x07d20111, - 0x07d30111, 0x07d40111, 0x07d50111, 0x07d60111, 0x07d70111, 0x07d80111, 0x07d90111, 0x07da0111, - 0x07db0111, 0x07dc0111, 0x07dd0111, 0x07de0111, 0x07df0111, 0x07e00111, 0x07e10111, 0x07e20111, - 0x07e30111, 0x07e40111, 0x07e50111, 0x07e60111, 0x07e70111, 0x07e80111, 0x07e90111, 0x07ea0111, - 0x07eb0111, 0x07ec0111, 0x07ed0111, 0x07ee0111, 0x07ef0111, 0x07f00111, 0x07f10111, 0x07f20111, - 0x07f30111, 0x07f40111, 0x07f50111, 0x07f60111, 0x07f70111, 0x07f80111, 0x07f90111, 0x07fa0111, - 0x07fb0111, 0x07fc0111, 0x07fd0111, 0x07fe0111, 0x07ff0111, 0x08000111, 0x08010111, 0x08020111, - 0x08030111, 0x08040111, 0x08050111, 0x08060111, 0x08070111, 0x08080111, 0x08090111, 0x080a0111, - /* 0x2e00 .. 0x2eff */ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfb400121, 0xfb400121, 0xfb400111, 0xfb400111, 0xfb400121, 0xfb400111, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400111, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400111, - 0xfb400111, 0xfb400121, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400121, 0xfb400111, 0xfb400121, - 0xfb400111, 0xfb400111, 0xffffffff, 0xfb400111, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400121, 0xfb400111, 0xfb400121, - 0xfb400111, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400111, 0xfb400121, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400111, 0xfb410111, 0xfb410111, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410111, 0xfb410121, - 0xfb410121, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410121, - 0xfb410111, 0xfb410111, 0xfb410121, 0xfb410111, 0xfb410111, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410121, 0xfb410111, 0xfb410121, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410121, 0xfb410111, - 0xfb410111, 0xfb410121, 0xfb410111, 0xfb410121, 0xfb410121, 0xfb410111, 0xfb410111, 0xfb410121, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410121, 0xfb410111, 0xfb410121, 0xfb410111, 0xfb410121, - 0xfb410111, 0xfb410121, 0xfb410121, 0xfb410121, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x2f00 .. 0x2fff */ - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, - 0xfb400121, 0xfb400121, 0xfb400121, 0xfb400121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, - 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xfb410121, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x09a90111, 0x09aa0111, 0x09ab0111, 0x09ac0111, 0x09ad0111, 0x09ae0111, 0x09af0111, 0x09b00111, - 0x09b10111, 0x09b20111, 0x09b30111, 0x09b40111, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x3000 .. 0x30ff */ - 0x02090121, 0x02340111, 0x025e0111, 0x02b80111, 0x09b50111, 0x09d70111, 0x192c0111, 0x0a0b0111, - 0x02880111, 0x02890111, 0x028a0111, 0x028b0111, 0x028c0111, 0x028d0111, 0x028e0111, 0x028f0111, - 0x02900111, 0x02910111, 0x09b60111, 0x09b70111, 0x02920111, 0x02930111, 0x02940111, 0x02950111, - 0x02960111, 0x02970111, 0x02980111, 0x02990111, 0x022a0111, 0x02750111, 0x02760111, 0x02770111, - 0x09b80111, 0x0a0c0111, 0x0a0d0111, 0x0a0e0111, 0x0a0f0111, 0x0a100111, 0x0a110111, 0x0a120111, - 0x0a130111, 0x0a140111, 0x0000dc11, 0x0000dd11, 0x0000de11, 0x0000df11, 0x0000e011, 0x0000e111, - 0x022b0111, 0x09d80111, 0x09d80111, 0x09d90111, 0x09d90111, 0x09da0111, 0x09b60121, 0x09b90111, - 0xfb400121, 0xfb400121, 0xfb400121, 0xffffffff, 0xffffffff, 0xffffffff, 0x09ba0111, 0x09bb0111, - 0xffffffff, 0x19210111, 0x19210121, 0x19220111, 0x19220121, 0x19230111, 0x19230121, 0x19240111, - 0x19240121, 0x19250111, 0x19250121, 0x19260111, 0x19260111, 0x19270111, 0x19270111, 0x19280111, - 0x19280111, 0x19290111, 0x19290111, 0x192a0111, 0x192a0111, 0x192b0111, 0x192b0111, 0x192c0121, - 0x192c0121, 0x192d0111, 0x192d0111, 0x192e0111, 0x192e0111, 0x192f0111, 0x192f0111, 0x19300111, - 0x19300111, 0x19310111, 0x19310111, 0x19320111, 0x19320121, 0x19320121, 0x19330111, 0x19330111, - 0x19340111, 0x19340111, 0x19350111, 0x19360111, 0x19370111, 0x19380111, 0x19390111, 0x193a0111, - 0x193a0111, 0x193a0111, 0x193b0111, 0x193b0111, 0x193b0111, 0x193c0111, 0x193c0111, 0x193c0111, - 0x193d0111, 0x193d0111, 0x193d0111, 0x193e0111, 0x193e0111, 0x193e0111, 0x193f0111, 0x19400111, - 0x19410111, 0x19420111, 0x19430111, 0x19440111, 0x19440121, 0x19450111, 0x19450121, 0x19460111, - 0x19460121, 0x19470111, 0x19480111, 0x19490111, 0x194a0111, 0x194b0111, 0x194c0111, 0x194c0121, - 0x194d0111, 0x194e0111, 0x194f0111, 0x19500111, 0x19230121, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x0000e211, 0x0000e311, 0x021e0111, 0x021f0111, 0x09db0111, 0x09db0111, 0xffffffff, - 0xffffffff, 0x19210131, 0x19210151, 0x19220131, 0x19220151, 0x19230131, 0x19230151, 0x19240131, - 0x19240151, 0x19250131, 0x19250151, 0x19260131, 0x19260131, 0x19270121, 0x19270121, 0x19280121, - 0x19280121, 0x19290131, 0x19290131, 0x192a0121, 0x192a0121, 0x192b0121, 0x192b0121, 0x192c0131, - 0x192c0131, 0x192d0121, 0x192d0121, 0x192e0121, 0x192e0121, 0x192f0121, 0x192f0121, 0x19300121, - 0x19300121, 0x19310121, 0x19310121, 0x19320131, 0x19320151, 0x19320151, 0x19330121, 0x19330121, - 0x19340121, 0x19340121, 0x19350121, 0x19360121, 0x19370121, 0x19380121, 0x19390121, 0x193a0121, - 0x193a0121, 0x193a0121, 0x193b0121, 0x193b0121, 0x193b0121, 0x193c0121, 0x193c0121, 0x193c0121, - 0x193d0121, 0x193d0121, 0x193d0121, 0x193e0121, 0x193e0121, 0x193e0121, 0x193f0121, 0x19400121, - 0x19410121, 0x19420121, 0x19430121, 0x19440131, 0x19440151, 0x19450131, 0x19450151, 0x19460131, - 0x19460151, 0x19470121, 0x19480121, 0x19490121, 0x194a0121, 0x194b0121, 0x194c0131, 0x194c0141, - 0x194d0121, 0x194e0121, 0x194f0121, 0x19500121, 0x19230151, 0x19260121, 0x19290121, 0x194c0141, - 0x194d0121, 0x194e0121, 0x194f0121, 0x022c0111, 0x09dc0111, 0x09dd0111, 0x09dd0111, 0xffffffff, - /* 0x3100 .. 0x31ff */ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x19510111, 0x19520111, 0x19530111, - 0x19540111, 0x19560111, 0x19570111, 0x19580111, 0x19590111, 0x195a0111, 0x195b0111, 0x195e0111, - 0x195f0111, 0x19600111, 0x19610111, 0x19630111, 0x19640111, 0x19650111, 0x19660111, 0x19670111, - 0x19680111, 0x19690111, 0x196a0111, 0x196b0111, 0x196d0111, 0x196e0111, 0x19700111, 0x19710111, - 0x19720111, 0x19730111, 0x19740111, 0x19750111, 0x19760111, 0x19780111, 0x197c0111, 0x197d0111, - 0x197e0111, 0x197f0111, 0x19550111, 0x195c0111, 0x19620111, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x18310121, 0x18320121, 0x18d10121, 0x18330121, 0x18d30121, 0x18d40121, 0x18340121, - 0x18350121, 0x18360121, 0x18d70121, 0x18d80121, 0x18d90121, 0x18da0121, 0x18db0121, 0x18dc0121, - 0x184b0121, 0x18370121, 0x18380121, 0x18390121, 0x18520121, 0x183a0121, 0x183b0121, 0x183c0121, - 0x183d0121, 0x183e0121, 0x183f0121, 0x18400121, 0x18410121, 0x18420121, 0x18430121, 0x188d0121, - 0x188e0121, 0x188f0121, 0x18900121, 0x18910121, 0x18920121, 0x18930121, 0x18940121, 0x18950121, - 0x18960121, 0x18970121, 0x18980121, 0x18990121, 0x189a0121, 0x189b0121, 0x189c0121, 0x189d0121, - 0x189e0121, 0x189f0121, 0x18a00121, 0x18a10121, 0x188c0121, 0x18450121, 0x18460121, 0x18ee0121, - 0x18ef0121, 0x18f30121, 0x18f50121, 0x18fa0121, 0x18fe0121, 0x19000121, 0x184d0121, 0x19040121, - 0x19060121, 0x184e0121, 0x184f0121, 0x18510121, 0x18530121, 0x18540121, 0x18580121, 0x185a0121, - 0x185c0121, 0x185d0121, 0x185e0121, 0x185f0121, 0x18600121, 0x18630121, 0x18670121, 0x18710121, - 0x18780121, 0x187d0121, 0x19180121, 0x19190121, 0x18880121, 0x18890121, 0x188a0121, 0x18b00121, - 0x18b10121, 0x18b40121, 0x18bd0121, 0x18be0121, 0x18c00121, 0x18ca0121, 0x18cd0121, 0xffffffff, - 0x09bc0111, 0x09bd0111, 0xfb400141, 0xfb400141, 0xfb400141, 0xfb400141, 0xfb400141, 0xfb400141, - 0xfb400141, 0xfb400141, 0xfb400141, 0xfb400141, 0xfb400141, 0xfb400141, 0xfb400141, 0xfb400141, - 0x19510121, 0x19670121, 0x195f0121, 0x195a0121, 0x196f0111, 0x196f0121, 0x196c0111, 0x196b0121, - 0x197e0121, 0x196a0121, 0x197d0121, 0x197e0121, 0x197b0111, 0x195d0111, 0x19700121, 0x19720121, - 0x19790111, 0x197a0111, 0x19770111, 0x197d0131, 0x19520121, 0x19570121, 0x195b0121, 0x195e0121, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0x3200 .. 0x32ff */ - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0xffffffff, 0xffffffff, 0xffffffff, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, - 0x027a0131, 0x027a0131, 0x027a0131, 0x027a0131, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x18310131, 0x18330131, 0x18340131, 0x18360131, 0x18370131, 0x18380131, 0x183a0131, 0x183c0131, - 0x183d0131, 0x183f0131, 0x18400131, 0x18410131, 0x18420131, 0x18430131, 0x18310131, 0x18330131, - 0x18340131, 0x18360131, 0x18370131, 0x18380131, 0x183a0131, 0x183c0131, 0x183d0131, 0x183f0131, - 0x18400131, 0x18410131, 0x18420131, 0x18430131, 0xffffffff, 0xffffffff, 0xffffffff, 0x09be0111, - 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, - 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb410131, 0xfb400131, - 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb410131, 0xfb400131, - 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb410131, 0xfb400131, 0xfb400131, 0xfb400131, - 0xfb410131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, - 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb400131, 0xfb410131, 0xfb400131, - 0xfb400131, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0a0c0131, 0x0a0d0131, 0x0a0e0131, 0x0a0f0131, 0x0a100131, 0x0a110131, 0x0a120131, 0x0a130131, - 0x0a140131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x19210171, 0x19220171, 0x19230171, 0x19240171, 0x19250171, 0x19260151, 0x19270141, 0x19280141, - 0x19290151, 0x192a0141, 0x192b0141, 0x192c0151, 0x192d0141, 0x192e0141, 0x192f0141, 0x19300141, - 0x19310141, 0x19320171, 0x19330141, 0x19340141, 0x19350141, 0x19360141, 0x19370141, 0x19380141, - 0x19390141, 0x193a0141, 0x193b0141, 0x193c0141, 0x193d0141, 0x193e0141, 0x193f0141, 0x19400141, - 0x19410141, 0x19420141, 0x19430141, 0x19440171, 0x19450171, 0x19460171, 0x19470141, 0x19480141, - 0x19490141, 0x194a0141, 0x194b0141, 0x194c0161, 0x194d0131, 0x194e0131, 0x194f0141, 0xffffffff, - /* 0x3300 .. 0x33ff */ - 0x19210181, 0x19210181, 0x19210181, 0x19210181, 0x19220181, 0x19220181, 0x19230181, 0x19240181, - 0x19240181, 0x19250181, 0x19250181, 0x19260161, 0x19260161, 0x19260161, 0x19260161, 0x19260161, - 0x19270151, 0x19270151, 0x19270151, 0x19270151, 0x19270151, 0x19270151, 0x19270151, 0x19270151, - 0x19280151, 0x19280151, 0x19280151, 0x19280151, 0x19290161, 0x192a0151, 0x192a0151, 0x192b0151, - 0x192b0151, 0x192c0161, 0x192e0151, 0x192e0151, 0x19300151, 0x19330151, 0x19340151, 0x19340151, - 0x19350151, 0x19390151, 0x193a0151, 0x193a0151, 0x193a0151, 0x193a0151, 0x193b0151, 0x193b0151, - 0x193b0151, 0x193b0151, 0x193c0151, 0x193c0151, 0x193c0151, 0x193c0151, 0x193d0151, 0x193d0151, - 0x193d0151, 0x193d0151, 0x193d0151, 0x193d0151, 0x193d0151, 0x193e0151, 0x193e0151, 0x193e0151, - 0x193e0151, 0x193e0151, 0x193e0151, 0x193f0151, 0x193f0151, 0x193f0151, 0x193f0151, 0x193f0151, - 0x19400151, 0x19400151, 0x19400151, 0x19420151, 0x19420151, 0x19420151, 0x19440181, 0x19440181, - 0x19450181, 0x19480151, 0x19480151, 0x19490151, 0x19490151, 0x194a0151, 0x194a0151, 0x194c0171, - 0x0a0b0131, 0x0a0c0131, 0x0a0d0131, 0x0a0e0131, 0x0a0f0131, 0x0a100131, 0x0a110131, 0x0a120131, - 0x0a130131, 0x0a140131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, - 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0d0131, 0x0a0d0131, 0x0a0d0131, 0x0a0d0131, - 0x0a0d0131, 0x0ab901a1, 0x0a490191, 0x0a1501a1, 0x0a290181, 0x0b4b01b1, 0x0b670181, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xfb400151, 0xfb400151, 0xfb400151, 0xfb400151, 0xfb400151, - 0x0b670181, 0x0b3301b1, 0x0c9f0141, 0x0b2b01a1, 0x0af70171, 0x0af70181, 0x0b2b01b1, 0x0a990181, - 0x0a3d01a1, 0x0af70171, 0x0b670181, 0x0b3301b1, 0x0c9f0141, 0x0c9f0141, 0x0b2b01a1, 0x0af70171, - 0x0ab901b1, 0x0af70171, 0x0b2b01b1, 0x0a990181, 0x0bbf01a1, 0x0c9f0141, 0x0b2b01a1, 0x0a490191, - 0x0af70171, 0x0a910191, 0x0b3301b1, 0x0c9f0141, 0x0b2b01a1, 0x0a3d01a1, 0x0af70171, 0x0b2b01a1, - 0x0a3d01a1, 0x0b2b01a1, 0x0af70171, 0x0b2b01a1, 0x0a3d01a1, 0x0b2b01a1, 0x0af70171, 0x0b2b01a1, - 0x0b2b01a1, 0x0b670191, 0x0af70171, 0x0b2b01b1, 0x0a990181, 0x0b7f01a1, 0x0b7f01a1, 0x0b7f01a1, - 0x0b670181, 0x0b3301b1, 0x0c9f0141, 0x0b2b01a1, 0x0b670181, 0x0b3301b1, 0x0c9f0141, 0x0b2b01a1, - 0x0af70171, 0x0b2b01b1, 0x0b670181, 0x0b3301b1, 0x0c9f0141, 0x0b2b01a1, 0x0af70171, 0x0b2b01b1, - 0x0af70171, 0x0b2b01b1, 0x0a150191, 0x0a290191, 0x0a3d01a1, 0x0a3d01a1, 0x0a3d01b1, 0x0a3d01b1, - 0x0a490191, 0x0a990181, 0x0ab901a1, 0x0ab901b1, 0x0ad301b1, 0x0af70181, 0x0af70181, 0x0af70171, - 0x0b0301c1, 0x0b0301c1, 0x0b0301c1, 0x0b0301c1, 0x0b2b01a1, 0x0b2b01a1, 0x0b2b01a1, 0x0b670191, - 0x0b670181, 0x0b670191, 0x0b670191, 0x0ba70191, 0x0ba701a1, 0x0bfb0181, 0xffffffff, 0xffffffff, - 0x0a0c0131, 0x0a0d0131, 0x0a0e0131, 0x0a0f0131, 0x0a100131, 0x0a110131, 0x0a120131, 0x0a130131, - 0x0a140131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, - 0x0a0c0131, 0x0a0c0131, 0x0a0c0131, 0x0a0d0131, 0x0a0d0131, 0x0a0d0131, 0x0a0d0131, 0x0a0d0131, - 0x0a0d0131, 0x0a0d0131, 0x0a0d0131, 0x0a0d0131, 0x0a0d0131, 0x0a0e0131, 0x0a0e0131, 0xffffffff, - /* 0xf900 .. 0xf9ff */ - 0xfb410111, 0xfb400111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, - 0xfb410111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, - 0xfb410111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb410111, 0xfb410111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb410111, - 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, - 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb410111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb410111, - 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb410111, - 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb410111, - 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb410111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb410111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb410111, 0xfb400111, - /* 0xfa00 .. 0xfaff */ - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb410111, - 0xfb400111, 0xfb410111, 0xfb400111, 0xfb410111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb400111, - 0xfb400111, 0xfb400111, 0xfb400111, 0xfb400111, 0xfb410111, 0xfb400111, 0xfb400111, 0xfb410111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, - 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xfb410111, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0xfb00 .. 0xfbff */ - 0x0a910131, 0x0a910131, 0x0a910131, 0x0a910131, 0x0a910131, 0x0ba70131, 0x0ba70131, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x0ea30121, 0x0ea30121, 0x0ea30121, 0x0ead0121, 0x0ea30121, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0ec00111, 0x00006711, 0x0ec00121, - 0x0ec60121, 0x0eb70131, 0x0eba0131, 0x0ebb0121, 0x0ec10121, 0x0ec20121, 0x0ec30121, 0x0eca0121, - 0x0ecc0121, 0x039f0131, 0x0ecb0111, 0x0ecb0111, 0x0ecb0111, 0x0ecb0111, 0x0eb70111, 0x0eb70111, - 0x0eb70111, 0x0eb80111, 0x0eb90111, 0x0eba0111, 0x0ebb0111, 0x0ebc0111, 0x0ebd0111, 0xffffffff, - 0x0ebf0111, 0x0ec00111, 0x0ec10131, 0x0ec10111, 0x0ec20111, 0xffffffff, 0x0ec30111, 0xffffffff, - 0x0ec40111, 0x0ec50111, 0xffffffff, 0x0ec70121, 0x0ec70111, 0xffffffff, 0x0ec80111, 0x0ec90111, - 0x0eca0111, 0x0ecb0111, 0x0ecc0111, 0x0ebc0111, 0x0eb80111, 0x0ec10111, 0x0ec70111, 0x0eb70121, - 0x0ed10131, 0x0ed10121, 0x0ed80151, 0x0ed80141, 0x0ed80121, 0x0ed80131, 0x0ed90151, 0x0ed90141, - 0x0ed90121, 0x0ed90131, 0x0eda0151, 0x0eda0141, 0x0eda0121, 0x0eda0131, 0x0edf0151, 0x0edf0141, - 0x0edf0121, 0x0edf0131, 0x0ee20151, 0x0ee20141, 0x0ee20121, 0x0ee20131, 0x0ede0151, 0x0ede0141, - 0x0ede0121, 0x0ede0131, 0x0f1a0151, 0x0f1a0141, 0x0f1a0121, 0x0f1a0131, 0x0f1c0151, 0x0f1c0141, - 0x0f1c0121, 0x0f1c0131, 0x0ee50151, 0x0ee50141, 0x0ee50121, 0x0ee50131, 0x0ee40151, 0x0ee40141, - 0x0ee40121, 0x0ee40131, 0x0ee60151, 0x0ee60141, 0x0ee60121, 0x0ee60131, 0x0ee80151, 0x0ee80141, - 0x0ee80121, 0x0ee80131, 0x0ef50131, 0x0ef50121, 0x0ef40131, 0x0ef40121, 0x0ef60131, 0x0ef60121, - 0x0ef00131, 0x0ef00121, 0x0f020131, 0x0f020121, 0x0efb0131, 0x0efb0121, 0x0f210151, 0x0f210141, - 0x0f210121, 0x0f210131, 0x0f270151, 0x0f270141, 0x0f270121, 0x0f270131, 0x0f2b0151, 0x0f2b0141, - 0x0f2b0121, 0x0f2b0131, 0x0f290151, 0x0f290141, 0x0f290121, 0x0f290131, 0x0f340131, 0x0f340121, - 0x0f350151, 0x0f350141, 0x0f350121, 0x0f350131, 0x0f3d0131, 0x0f3d0121, 0x0f3b0151, 0x0f3b0141, - 0x0f3b0121, 0x0f3b0131, 0x0f3a0151, 0x0f3a0141, 0x0f3a0121, 0x0f3a0131, 0x0f4f0131, 0x0f4f0121, - 0x0f4f0131, 0x0f4f0121, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x0f250151, 0x0f250141, 0x0f250121, 0x0f250131, 0x0f420141, - 0x0f420131, 0x0f410131, 0x0f410121, 0x0f430131, 0x0f430121, 0x0f420141, 0x0f460131, 0x0f460121, - 0x0f400131, 0x0f400121, 0x0f440131, 0x0f440121, 0x0f4d0151, 0x0f4d0141, 0x0f4d0121, 0x0f4d0131, - 0x0f480121, 0x0f480131, 0x0ed50151, 0x0ed50141, 0x0ed50151, 0x0ed50141, 0x0ed50151, 0x0ed50141, - 0x0ed50151, 0x0ed50141, 0x0ed50151, 0x0ed50141, 0x0ed50151, 0x0ed50141, 0x0ed50151, 0x0ed50141, - 0x0ed50121, 0x0ed50151, 0x0ed50141, 0x0ed50121, 0x0f4a0151, 0x0f4a0141, 0x0f4a0121, 0x0f4a0131, - /* 0xfc00 .. 0xfcff */ - 0x0ed50151, 0x0ed50151, 0x0ed50151, 0x0ed50151, 0x0ed50151, 0x0ed70151, 0x0ed70151, 0x0ed70151, - 0x0ed70151, 0x0ed70151, 0x0ed70151, 0x0edc0151, 0x0edc0151, 0x0edc0151, 0x0edc0151, 0x0edc0151, - 0x0edc0151, 0x0edd0151, 0x0edd0151, 0x0edd0151, 0x0edd0151, 0x0ee30151, 0x0ee30151, 0x0ee90151, - 0x0ee90151, 0x0eea0151, 0x0eea0151, 0x0eea0151, 0x0f040151, 0x0f040151, 0x0f040151, 0x0f040151, - 0x0f0a0151, 0x0f0a0151, 0x0f0b0151, 0x0f0b0151, 0x0f0b0151, 0x0f0b0151, 0x0f0f0151, 0x0f0f0151, - 0x0f100151, 0x0f120151, 0x0f120151, 0x0f130151, 0x0f130151, 0x0f160151, 0x0f160151, 0x0f160151, - 0x0f160151, 0x0f160151, 0x0f160151, 0x0f1d0151, 0x0f1d0151, 0x0f1d0151, 0x0f1d0151, 0x0f200151, - 0x0f200151, 0x0f200151, 0x0f200151, 0x0f200151, 0x0f200151, 0x0f200151, 0x0f200151, 0x0f2d0151, - 0x0f2d0151, 0x0f2d0151, 0x0f2d0151, 0x0f2d0151, 0x0f2d0151, 0x0f320161, 0x0f320161, 0x0f320161, - 0x0f320161, 0x0f320161, 0x0f320161, 0x0f330151, 0x0f330151, 0x0f330151, 0x0f330151, 0x0f330151, - 0x0f330151, 0x0f390151, 0x0f390151, 0x0f390151, 0x0f390151, 0x0f490161, 0x0f490161, 0x0f490161, - 0x0f490161, 0x0f490161, 0x0f490161, 0x0eef0131, 0x0ef90131, 0x0f480151, 0x00006e31, 0x00006e31, - 0x00006e31, 0x00006e31, 0x00006e31, 0x00006e31, 0x0ed50141, 0x0ed50141, 0x0ed50141, 0x0ed50141, - 0x0ed50141, 0x0ed50141, 0x0ed70141, 0x0ed70141, 0x0ed70141, 0x0ed70141, 0x0ed70141, 0x0ed70141, - 0x0edc0141, 0x0edc0141, 0x0edc0141, 0x0edc0141, 0x0edc0141, 0x0edc0141, 0x0edd0141, 0x0edd0141, - 0x0edd0141, 0x0edd0141, 0x0edd0141, 0x0edd0141, 0x0f160141, 0x0f160141, 0x0f1d0141, 0x0f1d0141, - 0x0f200141, 0x0f200141, 0x0f200141, 0x0f200141, 0x0f200141, 0x0f2d0141, 0x0f2d0141, 0x0f2d0141, - 0x0f320151, 0x0f320151, 0x0f330141, 0x0f330141, 0x0f330141, 0x0f330141, 0x0f330141, 0x0f330141, - 0x0f480141, 0x0f490151, 0x0f490151, 0x0f490151, 0x0f490151, 0x0f490151, 0x0f490151, 0x0ed50121, - 0x0ed50121, 0x0ed50121, 0x0ed50121, 0x0ed50121, 0x0ed70121, 0x0ed70121, 0x0ed70121, 0x0ed70121, - 0x0ed70121, 0x0edc0121, 0x0edc0121, 0x0edc0121, 0x0edc0121, 0x0edc0121, 0x0edd0121, 0x0ee30121, - 0x0ee30121, 0x0ee90121, 0x0ee90121, 0x0eea0121, 0x0eea0121, 0x0f040121, 0x0f040121, 0x0f040121, - 0x0f040121, 0x0f0a0121, 0x0f0a0121, 0x0f0a0121, 0x0f0b0121, 0x0f0b0121, 0x0f0b0121, 0x0f0b0121, - 0x0f0f0121, 0x0f100121, 0x0f120121, 0x0f120121, 0x0f130121, 0x0f130121, 0x0f160121, 0x0f160121, - 0x0f160121, 0x0f160121, 0x0f1d0121, 0x0f1d0121, 0x0f200121, 0x0f200121, 0x0f200121, 0x0f200121, - 0x0f200121, 0x0f2d0121, 0x0f2d0121, 0x0f2d0121, 0x0f2d0121, 0x0f2d0121, 0x0f320131, 0x0f320131, - 0x0f320131, 0x0f320131, 0x0f330121, 0x0f330121, 0x0f330121, 0x0f330121, 0x0f330121, 0x0f390121, - 0x0f390121, 0x0f390121, 0x0f490131, 0x0f490131, 0x0f490131, 0x0f490131, 0x0f490131, 0x0ed50131, - 0x0ed50131, 0x0ed70131, 0x0ed70131, 0x0edc0131, 0x0edc0131, 0x0edd0131, 0x0edd0131, 0x0f040131, - 0x0f040131, 0x0f050131, 0x0f050131, 0x0f200131, 0x0f200131, 0x0f2d0131, 0x0f330131, 0x0f330131, - 0x0f490141, 0x0f490141, 0x00006e21, 0x00006e21, 0x00006e21, 0x0f0f0151, 0x0f0f0151, 0x0f120151, - 0x0f120151, 0x0f130151, 0x0f130151, 0x0f040151, 0x0f040151, 0x0f050151, 0x0f050151, 0x0ee90151, - /* 0xfd00 .. 0xfdff */ - 0x0ee90151, 0x0ee30151, 0x0ee30151, 0x0eea0151, 0x0eea0151, 0x0f0a0151, 0x0f0a0151, 0x0f0b0151, - 0x0f0b0151, 0x0f050151, 0x0f050151, 0x0f050151, 0x0f050151, 0x0f050151, 0x0f040151, 0x0f0a0151, - 0x0f0b0151, 0x0f0f0141, 0x0f0f0141, 0x0f120141, 0x0f120141, 0x0f130141, 0x0f130141, 0x0f040141, - 0x0f040141, 0x0f050141, 0x0f050141, 0x0ee90141, 0x0ee90141, 0x0ee30141, 0x0ee30141, 0x0eea0141, - 0x0eea0141, 0x0f0a0141, 0x0f0a0141, 0x0f0b0141, 0x0f0b0141, 0x0f050141, 0x0f050141, 0x0f050141, - 0x0f050141, 0x0f050141, 0x0f040141, 0x0f0a0141, 0x0f0b0141, 0x0f050121, 0x0f050121, 0x0f050121, - 0x0f050121, 0x0f040121, 0x0f050121, 0x0f0f0121, 0x0f040131, 0x0f040131, 0x0f040131, 0x0f050131, - 0x0f050131, 0x0f050131, 0x0f0f0131, 0x0f100131, 0x0ed60131, 0x0ed60141, 0x029a0111, 0x029b0111, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0edc0121, 0x0edc0141, 0x0edc0121, 0x0edc0121, 0x0edc0121, 0x0edc0121, 0x0edc0121, 0x0edc0121, - 0x0ee30141, 0x0ee30121, 0x0ee90141, 0x0ee90141, 0x0f040121, 0x0f040121, 0x0f040141, 0x0f040141, - 0x0f040121, 0x0f040121, 0x0f040141, 0x0f040121, 0x0f0a0141, 0x0f0a0121, 0x0f0a0141, 0x0f050141, - 0x0f050121, 0x0f050141, 0x0f050141, 0x0f050121, 0x0f050141, 0x0f050121, 0x0f0b0141, 0x0f0b0141, - 0x0f0b0121, 0x0f0f0141, 0x0f0f0121, 0x0f0f0121, 0x0f0f0141, 0x0f120141, 0x0f120141, 0x0f120121, - 0x0f120141, 0x0f130141, 0x0f130141, 0x0f130141, 0x0f160141, 0x0f160121, 0x0f1d0141, 0x0f1d0141, - 0x0f2d0141, 0x0f2d0141, 0x0f2d0141, 0x0f2d0121, 0x0f2d0141, 0x0f2d0141, 0x0f2d0121, 0x0f2d0141, - 0x0f2d0121, 0x0f320131, 0x0f320131, 0x0f320151, 0x0f320131, 0x0f320131, 0x0f320131, 0x0f320131, - 0xffffffff, 0xffffffff, 0x0f320131, 0x0f390121, 0x0f390121, 0x0f330121, 0x0f330141, 0x0f330141, - 0x0f330121, 0x0f330141, 0x0f330141, 0x0f330141, 0x0f490151, 0x0f490131, 0x0ed70141, 0x0edc0141, - 0x0edc0141, 0x0edc0141, 0x0edc0141, 0x0edc0141, 0x0edc0141, 0x0ee30141, 0x0ee30141, 0x0ee30141, - 0x0f040141, 0x0f0a0141, 0x0f050141, 0x0f0b0141, 0x0f2d0141, 0x0f2d0141, 0x0f490151, 0x0f490151, - 0x0f490151, 0x0f320151, 0x0f1d0141, 0x0f330141, 0x0f1d0121, 0x0f2d0121, 0x0f120141, 0x0f200141, - 0x0f330121, 0x0f320151, 0x0f2d0121, 0x0f200141, 0x0f2d0141, 0x0f330141, 0x0ee30141, 0x0ee90141, - 0x0f320151, 0x0f160141, 0x0ed70141, 0x0f200121, 0x0f120121, 0x0f0a0121, 0x0f040141, 0x0f330141, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x0f0a0151, 0x0f1d0151, 0x0ed60141, 0x0ed60141, 0x0f320161, 0x0f0a0151, 0x0ef90131, 0x0f120151, - 0x0f3e0141, 0x0f0a0151, 0x0f0a0151, 0x0ee30151, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - /* 0xfe00 .. 0xfeff */ - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x00005011, 0x00005111, 0x00005211, 0x00005311, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x02550151, 0x02280131, 0x02270121, 0x021b0141, 0x021b0141, 0x027a0171, 0x027b0161, 0x027e0141, - 0x027f0141, 0x02920131, 0x02930131, 0x02900121, 0x02910121, 0x028a0121, 0x028b0121, 0x02880121, - 0x02890121, 0x028c0131, 0x028d0131, 0x028e0121, 0x028f0121, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x02110121, 0x02110121, 0x02110121, 0x02110121, 0x021b0131, 0x021b0131, 0x021b0131, - 0x022d0131, 0x02340121, 0x02550141, 0xffffffff, 0x02350131, 0x02370131, 0x024e0141, 0x024b0141, - 0x02280121, 0x027a0141, 0x027b0131, 0x027e0131, 0x027f0131, 0x02920121, 0x02930121, 0x02a90131, - 0x02a70131, 0x02a20131, 0x039f0141, 0x02210131, 0x03a30131, 0x03a50131, 0x03a40131, 0xffffffff, - 0x02a60131, 0x09e00131, 0x02aa0131, 0x02a10131, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0x00006831, 0x00006821, 0x00006921, 0xffffffff, 0x00006a21, 0xffffffff, 0x00006b31, 0x00006b21, - 0x00006c31, 0x00006c21, 0x00006d31, 0x00006d21, 0x00006e31, 0x00006e21, 0x00006f31, 0x00006f21, - 0x0ecd0131, 0x0ece0131, 0x0ece0121, 0x0ecf0131, 0x0ecf0121, 0x0ed20131, 0x0ed20121, 0x0ed30131, - 0x0ed30121, 0x0ed50151, 0x0ed50141, 0x0ed50121, 0x0ed50131, 0x0ed60141, 0x0ed60131, 0x0ed70151, - 0x0ed70141, 0x0ed70121, 0x0ed70131, 0x0edb0131, 0x0edb0121, 0x0edc0151, 0x0edc0141, 0x0edc0121, - 0x0edc0131, 0x0edd0151, 0x0edd0141, 0x0edd0121, 0x0edd0131, 0x0ee30151, 0x0ee30141, 0x0ee30121, - 0x0ee30131, 0x0ee90151, 0x0ee90141, 0x0ee90121, 0x0ee90131, 0x0eea0151, 0x0eea0141, 0x0eea0121, - 0x0eea0131, 0x0eee0131, 0x0eee0121, 0x0eef0131, 0x0eef0121, 0x0ef90131, 0x0ef90121, 0x0efa0131, - 0x0efa0121, 0x0f040151, 0x0f040141, 0x0f040121, 0x0f040131, 0x0f050151, 0x0f050141, 0x0f050121, - 0x0f050131, 0x0f0a0151, 0x0f0a0141, 0x0f0a0121, 0x0f0a0131, 0x0f0b0151, 0x0f0b0141, 0x0f0b0121, - 0x0f0b0131, 0x0f0f0151, 0x0f0f0141, 0x0f0f0121, 0x0f0f0131, 0x0f100151, 0x0f100141, 0x0f100121, - 0x0f100131, 0x0f120151, 0x0f120141, 0x0f120121, 0x0f120131, 0x0f130151, 0x0f130141, 0x0f130121, - 0x0f130131, 0x0f160151, 0x0f160141, 0x0f160121, 0x0f160131, 0x0f1d0151, 0x0f1d0141, 0x0f1d0121, - 0x0f1d0131, 0x0f200151, 0x0f200141, 0x0f200121, 0x0f200131, 0x0f2d0151, 0x0f2d0141, 0x0f2d0121, - 0x0f2d0131, 0x0f320161, 0x0f320151, 0x0f320131, 0x0f320141, 0x0f330151, 0x0f330141, 0x0f330121, - 0x0f330131, 0x0f390151, 0x0f390141, 0x0f390121, 0x0f390131, 0x0f3e0141, 0x0f3e0131, 0x0f480151, - 0x0f480141, 0x0f490161, 0x0f490151, 0x0f490131, 0x0f490141, 0x0f2d0151, 0x0f2d0141, 0x0f2d0151, - 0x0f2d0141, 0x0f2d0151, 0x0f2d0141, 0x0f2d0151, 0x0f2d0141, 0xffffffff, 0xffffffff, 0x00000000, - /* 0xff00 .. 0xffff */ - 0xffffffff, 0x024b0121, 0x02700121, 0x02a90121, 0x09e00121, 0x02aa0121, 0x02a70121, 0x02690121, - 0x027a0121, 0x027b0121, 0x02a20121, 0x039f0121, 0x022d0121, 0x02210121, 0x02550121, 0x02a40121, - 0x0a0b0121, 0x0a0c0121, 0x0a0d0121, 0x0a0e0121, 0x0a0f0121, 0x0a100121, 0x0a110121, 0x0a120121, - 0x0a130121, 0x0a140121, 0x02370121, 0x02350121, 0x03a30121, 0x03a40121, 0x03a50121, 0x024e0121, - 0x02a10121, 0x0a150161, 0x0a290151, 0x0a3d0161, 0x0a490161, 0x0a650161, 0x0a910161, 0x0a990161, - 0x0ab90161, 0x0ad30171, 0x0ae70151, 0x0af70151, 0x0b030171, 0x0b2b0161, 0x0b330161, 0x0b4b0171, - 0x0b670151, 0x0b730151, 0x0b7f0151, 0x0ba70161, 0x0bbf0161, 0x0bd70151, 0x0bef0161, 0x0bfb0151, - 0x0c030161, 0x0c070151, 0x0c130151, 0x027c0121, 0x02a60121, 0x027d0121, 0x020f0121, 0x021b0121, - 0x020c0121, 0x0a150121, 0x0a290121, 0x0a3d0121, 0x0a490121, 0x0a650121, 0x0a910121, 0x0a990121, - 0x0ab90121, 0x0ad30121, 0x0ae70121, 0x0af70121, 0x0b030121, 0x0b2b0121, 0x0b330121, 0x0b4b0121, - 0x0b670121, 0x0b730121, 0x0b7f0121, 0x0ba70121, 0x0bbf0121, 0x0bd70121, 0x0bef0121, 0x0bfb0121, - 0x0c030121, 0x0c070121, 0x0c130121, 0x027e0121, 0x03a70121, 0x027f0121, 0x03aa0121, 0xffffffff, - 0xffffffff, 0x025e0121, 0x028c0121, 0x028d0121, 0x02340131, 0x022c0121, 0x194f0131, 0x19210141, - 0x19220141, 0x19230141, 0x19240141, 0x19250141, 0x19440141, 0x19450141, 0x19460141, 0x19320141, - 0x09dc0121, 0x19210161, 0x19220161, 0x19230161, 0x19240161, 0x19250161, 0x19260141, 0x19270131, - 0x19280131, 0x19290141, 0x192a0131, 0x192b0131, 0x192c0141, 0x192d0131, 0x192e0131, 0x192f0131, - 0x19300131, 0x19310131, 0x19320161, 0x19330131, 0x19340131, 0x19350131, 0x19360131, 0x19370131, - 0x19380131, 0x19390131, 0x193a0131, 0x193b0131, 0x193c0131, 0x193d0131, 0x193e0131, 0x193f0131, - 0x19400131, 0x19410131, 0x19420131, 0x19430131, 0x19440161, 0x19450161, 0x19460161, 0x19470131, - 0x19480131, 0x19490131, 0x194a0131, 0x194b0131, 0x194c0151, 0x19500131, 0x0000e221, 0x0000e321, - 0x188c0131, 0x18310141, 0x18320131, 0x18d10131, 0x18330141, 0x18d30131, 0x18d40131, 0x18340141, - 0x18350131, 0x18360141, 0x18d70131, 0x18d80131, 0x18d90131, 0x18da0131, 0x18db0131, 0x18dc0131, - 0x184b0131, 0x18370141, 0x18380141, 0x18390131, 0x18520131, 0x183a0141, 0x183b0131, 0x183c0141, - 0x183d0141, 0x183e0131, 0x183f0141, 0x18400141, 0x18410141, 0x18420141, 0x18430141, 0xffffffff, - 0xffffffff, 0xffffffff, 0x188d0131, 0x188e0131, 0x188f0131, 0x18900131, 0x18910131, 0x18920131, - 0xffffffff, 0xffffffff, 0x18930131, 0x18940131, 0x18950131, 0x18960131, 0x18970131, 0x18980131, - 0xffffffff, 0xffffffff, 0x18990131, 0x189a0131, 0x189b0131, 0x189c0131, 0x189d0131, 0x189e0131, - 0xffffffff, 0xffffffff, 0x189f0131, 0x18a00131, 0x18a10131, 0xffffffff, 0xffffffff, 0xffffffff, - 0x09df0121, 0x09e10121, 0x03a60121, 0x02100121, 0x03a80121, 0x09e20121, 0x09ef0121, 0xffffffff, - 0x05300121, 0x03320121, 0x03340121, 0x03330121, 0x03350121, 0x05c40121, 0x05ef0121, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x09bf0111, 0x09c00111, 0xffffffff, 0xffffffff -}; diff --git a/reactos/tools/unicode/compose.c b/reactos/tools/unicode/compose.c deleted file mode 100644 index 8d5567df0c8..00000000000 --- a/reactos/tools/unicode/compose.c +++ /dev/null @@ -1,1098 +0,0 @@ -/* Unicode char composition */ -/* Automatically generated; DO NOT EDIT!! */ - -#include "wine/unicode.h" - -const WCHAR unicode_compose_table[0x846] = -{ - /* second chars + offsets */ - 0x0300, 0x0046, 0x0301, 0x009a, 0x0302, 0x0110, 0x0303, 0x0130, - 0x0304, 0x014c, 0x0306, 0x0178, 0x0307, 0x0198, 0x0308, 0x01c6, - 0x0309, 0x01fc, 0x030a, 0x0214, 0x030b, 0x021a, 0x030c, 0x0220, - 0x030f, 0x0245, 0x0311, 0x0253, 0x0313, 0x025f, 0x0314, 0x026d, - 0x031b, 0x027d, 0x0323, 0x0281, 0x0324, 0x02ab, 0x0325, 0x02ad, - 0x0326, 0x02af, 0x0327, 0x02b3, 0x0328, 0x02c9, 0x032d, 0x02d3, - 0x032e, 0x02df, 0x0330, 0x02e1, 0x0331, 0x02e7, 0x0338, 0x02f8, - 0x0342, 0x0325, 0x0345, 0x0342, 0x05b4, 0x0381, 0x05b7, 0x0382, - 0x05b8, 0x0384, 0x05b9, 0x0385, 0x05bc, 0x0386, 0x05bf, 0x039c, - 0x05c1, 0x039f, 0x05c2, 0x03a1, 0x0653, 0x03a3, 0x0654, 0x03a4, - 0x0655, 0x03aa, 0x093c, 0x03ab, 0x09bc, 0x03b6, 0x09be, 0x03b9, - 0x09d7, 0x03ba, 0x0a3c, 0x03bb, 0x0b3c, 0x03c1, 0x0b3e, 0x03c3, - 0x0b56, 0x03c4, 0x0b57, 0x03c5, 0x0bbe, 0x03c6, 0x0bd7, 0x03c8, - 0x0c56, 0x03ca, 0x0cc2, 0x03cb, 0x0cd5, 0x03cc, 0x0cd6, 0x03cf, - 0x0d3e, 0x03d0, 0x0d57, 0x03d2, 0x0dca, 0x03d3, 0x0dcf, 0x03d5, - 0x0ddf, 0x03d6, 0x0f72, 0x03d7, 0x0f74, 0x03d8, 0x0f80, 0x03d9, - 0x0fb5, 0x03dc, 0x0fb7, 0x03de, 0x102e, 0x03e8, 0x3099, 0x03e9, - 0x309a, 0x0419, 0x0000, 0x0423, - /* 0x0300 */ - 0x0041, 0x00c0, 0x0045, 0x00c8, 0x0049, 0x00cc, 0x004e, 0x01f8, - 0x004f, 0x00d2, 0x0055, 0x00d9, 0x0057, 0x1e80, 0x0059, 0x1ef2, - 0x0061, 0x00e0, 0x0065, 0x00e8, 0x0069, 0x00ec, 0x006e, 0x01f9, - 0x006f, 0x00f2, 0x0075, 0x00f9, 0x0077, 0x1e81, 0x0079, 0x1ef3, - 0x00a8, 0x1fed, 0x00c2, 0x1ea6, 0x00ca, 0x1ec0, 0x00d4, 0x1ed2, - 0x00dc, 0x01db, 0x00e2, 0x1ea7, 0x00ea, 0x1ec1, 0x00f4, 0x1ed3, - 0x00fc, 0x01dc, 0x0102, 0x1eb0, 0x0103, 0x1eb1, 0x0112, 0x1e14, - 0x0113, 0x1e15, 0x014c, 0x1e50, 0x014d, 0x1e51, 0x01a0, 0x1edc, - 0x01a1, 0x1edd, 0x01af, 0x1eea, 0x01b0, 0x1eeb, 0x0391, 0x1fba, - 0x0395, 0x1fc8, 0x0397, 0x1fca, 0x0399, 0x1fda, 0x039f, 0x1ff8, - 0x03a5, 0x1fea, 0x03a9, 0x1ffa, 0x03b1, 0x1f70, 0x03b5, 0x1f72, - 0x03b7, 0x1f74, 0x03b9, 0x1f76, 0x03bf, 0x1f78, 0x03c5, 0x1f7a, - 0x03c9, 0x1f7c, 0x03ca, 0x1fd2, 0x03cb, 0x1fe2, 0x0415, 0x0400, - 0x0418, 0x040d, 0x0435, 0x0450, 0x0438, 0x045d, 0x1f00, 0x1f02, - 0x1f01, 0x1f03, 0x1f08, 0x1f0a, 0x1f09, 0x1f0b, 0x1f10, 0x1f12, - 0x1f11, 0x1f13, 0x1f18, 0x1f1a, 0x1f19, 0x1f1b, 0x1f20, 0x1f22, - 0x1f21, 0x1f23, 0x1f28, 0x1f2a, 0x1f29, 0x1f2b, 0x1f30, 0x1f32, - 0x1f31, 0x1f33, 0x1f38, 0x1f3a, 0x1f39, 0x1f3b, 0x1f40, 0x1f42, - 0x1f41, 0x1f43, 0x1f48, 0x1f4a, 0x1f49, 0x1f4b, 0x1f50, 0x1f52, - 0x1f51, 0x1f53, 0x1f59, 0x1f5b, 0x1f60, 0x1f62, 0x1f61, 0x1f63, - 0x1f68, 0x1f6a, 0x1f69, 0x1f6b, 0x1fbf, 0x1fcd, 0x1ffe, 0x1fdd, - /* 0x0301 */ - 0x0041, 0x00c1, 0x0043, 0x0106, 0x0045, 0x00c9, 0x0047, 0x01f4, - 0x0049, 0x00cd, 0x004b, 0x1e30, 0x004c, 0x0139, 0x004d, 0x1e3e, - 0x004e, 0x0143, 0x004f, 0x00d3, 0x0050, 0x1e54, 0x0052, 0x0154, - 0x0053, 0x015a, 0x0055, 0x00da, 0x0057, 0x1e82, 0x0059, 0x00dd, - 0x005a, 0x0179, 0x0061, 0x00e1, 0x0063, 0x0107, 0x0065, 0x00e9, - 0x0067, 0x01f5, 0x0069, 0x00ed, 0x006b, 0x1e31, 0x006c, 0x013a, - 0x006d, 0x1e3f, 0x006e, 0x0144, 0x006f, 0x00f3, 0x0070, 0x1e55, - 0x0072, 0x0155, 0x0073, 0x015b, 0x0075, 0x00fa, 0x0077, 0x1e83, - 0x0079, 0x00fd, 0x007a, 0x017a, 0x00a8, 0x0385, 0x00c2, 0x1ea4, - 0x00c5, 0x01fa, 0x00c6, 0x01fc, 0x00c7, 0x1e08, 0x00ca, 0x1ebe, - 0x00cf, 0x1e2e, 0x00d4, 0x1ed0, 0x00d5, 0x1e4c, 0x00d8, 0x01fe, - 0x00dc, 0x01d7, 0x00e2, 0x1ea5, 0x00e5, 0x01fb, 0x00e6, 0x01fd, - 0x00e7, 0x1e09, 0x00ea, 0x1ebf, 0x00ef, 0x1e2f, 0x00f4, 0x1ed1, - 0x00f5, 0x1e4d, 0x00f8, 0x01ff, 0x00fc, 0x01d8, 0x0102, 0x1eae, - 0x0103, 0x1eaf, 0x0112, 0x1e16, 0x0113, 0x1e17, 0x014c, 0x1e52, - 0x014d, 0x1e53, 0x0168, 0x1e78, 0x0169, 0x1e79, 0x01a0, 0x1eda, - 0x01a1, 0x1edb, 0x01af, 0x1ee8, 0x01b0, 0x1ee9, 0x0308, 0x0344, - 0x0391, 0x0386, 0x0395, 0x0388, 0x0397, 0x0389, 0x0399, 0x038a, - 0x039f, 0x038c, 0x03a5, 0x038e, 0x03a9, 0x038f, 0x03b1, 0x03ac, - 0x03b5, 0x03ad, 0x03b7, 0x03ae, 0x03b9, 0x03af, 0x03bf, 0x03cc, - 0x03c5, 0x03cd, 0x03c9, 0x03ce, 0x03ca, 0x0390, 0x03cb, 0x03b0, - 0x03d2, 0x03d3, 0x0413, 0x0403, 0x041a, 0x040c, 0x0433, 0x0453, - 0x043a, 0x045c, 0x1f00, 0x1f04, 0x1f01, 0x1f05, 0x1f08, 0x1f0c, - 0x1f09, 0x1f0d, 0x1f10, 0x1f14, 0x1f11, 0x1f15, 0x1f18, 0x1f1c, - 0x1f19, 0x1f1d, 0x1f20, 0x1f24, 0x1f21, 0x1f25, 0x1f28, 0x1f2c, - 0x1f29, 0x1f2d, 0x1f30, 0x1f34, 0x1f31, 0x1f35, 0x1f38, 0x1f3c, - 0x1f39, 0x1f3d, 0x1f40, 0x1f44, 0x1f41, 0x1f45, 0x1f48, 0x1f4c, - 0x1f49, 0x1f4d, 0x1f50, 0x1f54, 0x1f51, 0x1f55, 0x1f59, 0x1f5d, - 0x1f60, 0x1f64, 0x1f61, 0x1f65, 0x1f68, 0x1f6c, 0x1f69, 0x1f6d, - 0x1fbf, 0x1fce, 0x1ffe, 0x1fde, - /* 0x0302 */ - 0x0041, 0x00c2, 0x0043, 0x0108, 0x0045, 0x00ca, 0x0047, 0x011c, - 0x0048, 0x0124, 0x0049, 0x00ce, 0x004a, 0x0134, 0x004f, 0x00d4, - 0x0053, 0x015c, 0x0055, 0x00db, 0x0057, 0x0174, 0x0059, 0x0176, - 0x005a, 0x1e90, 0x0061, 0x00e2, 0x0063, 0x0109, 0x0065, 0x00ea, - 0x0067, 0x011d, 0x0068, 0x0125, 0x0069, 0x00ee, 0x006a, 0x0135, - 0x006f, 0x00f4, 0x0073, 0x015d, 0x0075, 0x00fb, 0x0077, 0x0175, - 0x0079, 0x0177, 0x007a, 0x1e91, 0x1ea0, 0x1eac, 0x1ea1, 0x1ead, - 0x1eb8, 0x1ec6, 0x1eb9, 0x1ec7, 0x1ecc, 0x1ed8, 0x1ecd, 0x1ed9, - /* 0x0303 */ - 0x0041, 0x00c3, 0x0045, 0x1ebc, 0x0049, 0x0128, 0x004e, 0x00d1, - 0x004f, 0x00d5, 0x0055, 0x0168, 0x0056, 0x1e7c, 0x0059, 0x1ef8, - 0x0061, 0x00e3, 0x0065, 0x1ebd, 0x0069, 0x0129, 0x006e, 0x00f1, - 0x006f, 0x00f5, 0x0075, 0x0169, 0x0076, 0x1e7d, 0x0079, 0x1ef9, - 0x00c2, 0x1eaa, 0x00ca, 0x1ec4, 0x00d4, 0x1ed6, 0x00e2, 0x1eab, - 0x00ea, 0x1ec5, 0x00f4, 0x1ed7, 0x0102, 0x1eb4, 0x0103, 0x1eb5, - 0x01a0, 0x1ee0, 0x01a1, 0x1ee1, 0x01af, 0x1eee, 0x01b0, 0x1eef, - /* 0x0304 */ - 0x0041, 0x0100, 0x0045, 0x0112, 0x0047, 0x1e20, 0x0049, 0x012a, - 0x004f, 0x014c, 0x0055, 0x016a, 0x0059, 0x0232, 0x0061, 0x0101, - 0x0065, 0x0113, 0x0067, 0x1e21, 0x0069, 0x012b, 0x006f, 0x014d, - 0x0075, 0x016b, 0x0079, 0x0233, 0x00c4, 0x01de, 0x00c6, 0x01e2, - 0x00d5, 0x022c, 0x00d6, 0x022a, 0x00dc, 0x01d5, 0x00e4, 0x01df, - 0x00e6, 0x01e3, 0x00f5, 0x022d, 0x00f6, 0x022b, 0x00fc, 0x01d6, - 0x01ea, 0x01ec, 0x01eb, 0x01ed, 0x0226, 0x01e0, 0x0227, 0x01e1, - 0x022e, 0x0230, 0x022f, 0x0231, 0x0391, 0x1fb9, 0x0399, 0x1fd9, - 0x03a5, 0x1fe9, 0x03b1, 0x1fb1, 0x03b9, 0x1fd1, 0x03c5, 0x1fe1, - 0x0418, 0x04e2, 0x0423, 0x04ee, 0x0438, 0x04e3, 0x0443, 0x04ef, - 0x1e36, 0x1e38, 0x1e37, 0x1e39, 0x1e5a, 0x1e5c, 0x1e5b, 0x1e5d, - /* 0x0306 */ - 0x0041, 0x0102, 0x0045, 0x0114, 0x0047, 0x011e, 0x0049, 0x012c, - 0x004f, 0x014e, 0x0055, 0x016c, 0x0061, 0x0103, 0x0065, 0x0115, - 0x0067, 0x011f, 0x0069, 0x012d, 0x006f, 0x014f, 0x0075, 0x016d, - 0x0228, 0x1e1c, 0x0229, 0x1e1d, 0x0391, 0x1fb8, 0x0399, 0x1fd8, - 0x03a5, 0x1fe8, 0x03b1, 0x1fb0, 0x03b9, 0x1fd0, 0x03c5, 0x1fe0, - 0x0410, 0x04d0, 0x0415, 0x04d6, 0x0416, 0x04c1, 0x0418, 0x0419, - 0x0423, 0x040e, 0x0430, 0x04d1, 0x0435, 0x04d7, 0x0436, 0x04c2, - 0x0438, 0x0439, 0x0443, 0x045e, 0x1ea0, 0x1eb6, 0x1ea1, 0x1eb7, - /* 0x0307 */ - 0x0041, 0x0226, 0x0042, 0x1e02, 0x0043, 0x010a, 0x0044, 0x1e0a, - 0x0045, 0x0116, 0x0046, 0x1e1e, 0x0047, 0x0120, 0x0048, 0x1e22, - 0x0049, 0x0130, 0x004d, 0x1e40, 0x004e, 0x1e44, 0x004f, 0x022e, - 0x0050, 0x1e56, 0x0052, 0x1e58, 0x0053, 0x1e60, 0x0054, 0x1e6a, - 0x0057, 0x1e86, 0x0058, 0x1e8a, 0x0059, 0x1e8e, 0x005a, 0x017b, - 0x0061, 0x0227, 0x0062, 0x1e03, 0x0063, 0x010b, 0x0064, 0x1e0b, - 0x0065, 0x0117, 0x0066, 0x1e1f, 0x0067, 0x0121, 0x0068, 0x1e23, - 0x006d, 0x1e41, 0x006e, 0x1e45, 0x006f, 0x022f, 0x0070, 0x1e57, - 0x0072, 0x1e59, 0x0073, 0x1e61, 0x0074, 0x1e6b, 0x0077, 0x1e87, - 0x0078, 0x1e8b, 0x0079, 0x1e8f, 0x007a, 0x017c, 0x015a, 0x1e64, - 0x015b, 0x1e65, 0x0160, 0x1e66, 0x0161, 0x1e67, 0x017f, 0x1e9b, - 0x1e62, 0x1e68, 0x1e63, 0x1e69, - /* 0x0308 */ - 0x0041, 0x00c4, 0x0045, 0x00cb, 0x0048, 0x1e26, 0x0049, 0x00cf, - 0x004f, 0x00d6, 0x0055, 0x00dc, 0x0057, 0x1e84, 0x0058, 0x1e8c, - 0x0059, 0x0178, 0x0061, 0x00e4, 0x0065, 0x00eb, 0x0068, 0x1e27, - 0x0069, 0x00ef, 0x006f, 0x00f6, 0x0074, 0x1e97, 0x0075, 0x00fc, - 0x0077, 0x1e85, 0x0078, 0x1e8d, 0x0079, 0x00ff, 0x00d5, 0x1e4e, - 0x00f5, 0x1e4f, 0x016a, 0x1e7a, 0x016b, 0x1e7b, 0x0399, 0x03aa, - 0x03a5, 0x03ab, 0x03b9, 0x03ca, 0x03c5, 0x03cb, 0x03d2, 0x03d4, - 0x0406, 0x0407, 0x0410, 0x04d2, 0x0415, 0x0401, 0x0416, 0x04dc, - 0x0417, 0x04de, 0x0418, 0x04e4, 0x041e, 0x04e6, 0x0423, 0x04f0, - 0x0427, 0x04f4, 0x042b, 0x04f8, 0x042d, 0x04ec, 0x0430, 0x04d3, - 0x0435, 0x0451, 0x0436, 0x04dd, 0x0437, 0x04df, 0x0438, 0x04e5, - 0x043e, 0x04e7, 0x0443, 0x04f1, 0x0447, 0x04f5, 0x044b, 0x04f9, - 0x044d, 0x04ed, 0x0456, 0x0457, 0x04d8, 0x04da, 0x04d9, 0x04db, - 0x04e8, 0x04ea, 0x04e9, 0x04eb, - /* 0x0309 */ - 0x0041, 0x1ea2, 0x0045, 0x1eba, 0x0049, 0x1ec8, 0x004f, 0x1ece, - 0x0055, 0x1ee6, 0x0059, 0x1ef6, 0x0061, 0x1ea3, 0x0065, 0x1ebb, - 0x0069, 0x1ec9, 0x006f, 0x1ecf, 0x0075, 0x1ee7, 0x0079, 0x1ef7, - 0x00c2, 0x1ea8, 0x00ca, 0x1ec2, 0x00d4, 0x1ed4, 0x00e2, 0x1ea9, - 0x00ea, 0x1ec3, 0x00f4, 0x1ed5, 0x0102, 0x1eb2, 0x0103, 0x1eb3, - 0x01a0, 0x1ede, 0x01a1, 0x1edf, 0x01af, 0x1eec, 0x01b0, 0x1eed, - /* 0x030a */ - 0x0041, 0x00c5, 0x0055, 0x016e, 0x0061, 0x00e5, 0x0075, 0x016f, - 0x0077, 0x1e98, 0x0079, 0x1e99, - /* 0x030b */ - 0x004f, 0x0150, 0x0055, 0x0170, 0x006f, 0x0151, 0x0075, 0x0171, - 0x0423, 0x04f2, 0x0443, 0x04f3, - /* 0x030c */ - 0x0041, 0x01cd, 0x0043, 0x010c, 0x0044, 0x010e, 0x0045, 0x011a, - 0x0047, 0x01e6, 0x0048, 0x021e, 0x0049, 0x01cf, 0x004b, 0x01e8, - 0x004c, 0x013d, 0x004e, 0x0147, 0x004f, 0x01d1, 0x0052, 0x0158, - 0x0053, 0x0160, 0x0054, 0x0164, 0x0055, 0x01d3, 0x005a, 0x017d, - 0x0061, 0x01ce, 0x0063, 0x010d, 0x0064, 0x010f, 0x0065, 0x011b, - 0x0067, 0x01e7, 0x0068, 0x021f, 0x0069, 0x01d0, 0x006a, 0x01f0, - 0x006b, 0x01e9, 0x006c, 0x013e, 0x006e, 0x0148, 0x006f, 0x01d2, - 0x0072, 0x0159, 0x0073, 0x0161, 0x0074, 0x0165, 0x0075, 0x01d4, - 0x007a, 0x017e, 0x00dc, 0x01d9, 0x00fc, 0x01da, 0x01b7, 0x01ee, - 0x0292, 0x01ef, - /* 0x030f */ - 0x0041, 0x0200, 0x0045, 0x0204, 0x0049, 0x0208, 0x004f, 0x020c, - 0x0052, 0x0210, 0x0055, 0x0214, 0x0061, 0x0201, 0x0065, 0x0205, - 0x0069, 0x0209, 0x006f, 0x020d, 0x0072, 0x0211, 0x0075, 0x0215, - 0x0474, 0x0476, 0x0475, 0x0477, - /* 0x0311 */ - 0x0041, 0x0202, 0x0045, 0x0206, 0x0049, 0x020a, 0x004f, 0x020e, - 0x0052, 0x0212, 0x0055, 0x0216, 0x0061, 0x0203, 0x0065, 0x0207, - 0x0069, 0x020b, 0x006f, 0x020f, 0x0072, 0x0213, 0x0075, 0x0217, - /* 0x0313 */ - 0x0391, 0x1f08, 0x0395, 0x1f18, 0x0397, 0x1f28, 0x0399, 0x1f38, - 0x039f, 0x1f48, 0x03a9, 0x1f68, 0x03b1, 0x1f00, 0x03b5, 0x1f10, - 0x03b7, 0x1f20, 0x03b9, 0x1f30, 0x03bf, 0x1f40, 0x03c1, 0x1fe4, - 0x03c5, 0x1f50, 0x03c9, 0x1f60, - /* 0x0314 */ - 0x0391, 0x1f09, 0x0395, 0x1f19, 0x0397, 0x1f29, 0x0399, 0x1f39, - 0x039f, 0x1f49, 0x03a1, 0x1fec, 0x03a5, 0x1f59, 0x03a9, 0x1f69, - 0x03b1, 0x1f01, 0x03b5, 0x1f11, 0x03b7, 0x1f21, 0x03b9, 0x1f31, - 0x03bf, 0x1f41, 0x03c1, 0x1fe5, 0x03c5, 0x1f51, 0x03c9, 0x1f61, - /* 0x031b */ - 0x004f, 0x01a0, 0x0055, 0x01af, 0x006f, 0x01a1, 0x0075, 0x01b0, - /* 0x0323 */ - 0x0041, 0x1ea0, 0x0042, 0x1e04, 0x0044, 0x1e0c, 0x0045, 0x1eb8, - 0x0048, 0x1e24, 0x0049, 0x1eca, 0x004b, 0x1e32, 0x004c, 0x1e36, - 0x004d, 0x1e42, 0x004e, 0x1e46, 0x004f, 0x1ecc, 0x0052, 0x1e5a, - 0x0053, 0x1e62, 0x0054, 0x1e6c, 0x0055, 0x1ee4, 0x0056, 0x1e7e, - 0x0057, 0x1e88, 0x0059, 0x1ef4, 0x005a, 0x1e92, 0x0061, 0x1ea1, - 0x0062, 0x1e05, 0x0064, 0x1e0d, 0x0065, 0x1eb9, 0x0068, 0x1e25, - 0x0069, 0x1ecb, 0x006b, 0x1e33, 0x006c, 0x1e37, 0x006d, 0x1e43, - 0x006e, 0x1e47, 0x006f, 0x1ecd, 0x0072, 0x1e5b, 0x0073, 0x1e63, - 0x0074, 0x1e6d, 0x0075, 0x1ee5, 0x0076, 0x1e7f, 0x0077, 0x1e89, - 0x0079, 0x1ef5, 0x007a, 0x1e93, 0x01a0, 0x1ee2, 0x01a1, 0x1ee3, - 0x01af, 0x1ef0, 0x01b0, 0x1ef1, - /* 0x0324 */ - 0x0055, 0x1e72, 0x0075, 0x1e73, - /* 0x0325 */ - 0x0041, 0x1e00, 0x0061, 0x1e01, - /* 0x0326 */ - 0x0053, 0x0218, 0x0054, 0x021a, 0x0073, 0x0219, 0x0074, 0x021b, - /* 0x0327 */ - 0x0043, 0x00c7, 0x0044, 0x1e10, 0x0045, 0x0228, 0x0047, 0x0122, - 0x0048, 0x1e28, 0x004b, 0x0136, 0x004c, 0x013b, 0x004e, 0x0145, - 0x0052, 0x0156, 0x0053, 0x015e, 0x0054, 0x0162, 0x0063, 0x00e7, - 0x0064, 0x1e11, 0x0065, 0x0229, 0x0067, 0x0123, 0x0068, 0x1e29, - 0x006b, 0x0137, 0x006c, 0x013c, 0x006e, 0x0146, 0x0072, 0x0157, - 0x0073, 0x015f, 0x0074, 0x0163, - /* 0x0328 */ - 0x0041, 0x0104, 0x0045, 0x0118, 0x0049, 0x012e, 0x004f, 0x01ea, - 0x0055, 0x0172, 0x0061, 0x0105, 0x0065, 0x0119, 0x0069, 0x012f, - 0x006f, 0x01eb, 0x0075, 0x0173, - /* 0x032d */ - 0x0044, 0x1e12, 0x0045, 0x1e18, 0x004c, 0x1e3c, 0x004e, 0x1e4a, - 0x0054, 0x1e70, 0x0055, 0x1e76, 0x0064, 0x1e13, 0x0065, 0x1e19, - 0x006c, 0x1e3d, 0x006e, 0x1e4b, 0x0074, 0x1e71, 0x0075, 0x1e77, - /* 0x032e */ - 0x0048, 0x1e2a, 0x0068, 0x1e2b, - /* 0x0330 */ - 0x0045, 0x1e1a, 0x0049, 0x1e2c, 0x0055, 0x1e74, 0x0065, 0x1e1b, - 0x0069, 0x1e2d, 0x0075, 0x1e75, - /* 0x0331 */ - 0x0042, 0x1e06, 0x0044, 0x1e0e, 0x004b, 0x1e34, 0x004c, 0x1e3a, - 0x004e, 0x1e48, 0x0052, 0x1e5e, 0x0054, 0x1e6e, 0x005a, 0x1e94, - 0x0062, 0x1e07, 0x0064, 0x1e0f, 0x0068, 0x1e96, 0x006b, 0x1e35, - 0x006c, 0x1e3b, 0x006e, 0x1e49, 0x0072, 0x1e5f, 0x0074, 0x1e6f, - 0x007a, 0x1e95, - /* 0x0338 */ - 0x003c, 0x226e, 0x003d, 0x2260, 0x003e, 0x226f, 0x2190, 0x219a, - 0x2192, 0x219b, 0x2194, 0x21ae, 0x21d0, 0x21cd, 0x21d2, 0x21cf, - 0x21d4, 0x21ce, 0x2203, 0x2204, 0x2208, 0x2209, 0x220b, 0x220c, - 0x2223, 0x2224, 0x2225, 0x2226, 0x223c, 0x2241, 0x2243, 0x2244, - 0x2245, 0x2247, 0x2248, 0x2249, 0x224d, 0x226d, 0x2261, 0x2262, - 0x2264, 0x2270, 0x2265, 0x2271, 0x2272, 0x2274, 0x2273, 0x2275, - 0x2276, 0x2278, 0x2277, 0x2279, 0x227a, 0x2280, 0x227b, 0x2281, - 0x227c, 0x22e0, 0x227d, 0x22e1, 0x2282, 0x2284, 0x2283, 0x2285, - 0x2286, 0x2288, 0x2287, 0x2289, 0x2291, 0x22e2, 0x2292, 0x22e3, - 0x22a2, 0x22ac, 0x22a8, 0x22ad, 0x22a9, 0x22ae, 0x22ab, 0x22af, - 0x22b2, 0x22ea, 0x22b3, 0x22eb, 0x22b4, 0x22ec, 0x22b5, 0x22ed, - 0x2add, 0x2adc, - /* 0x0342 */ - 0x00a8, 0x1fc1, 0x03b1, 0x1fb6, 0x03b7, 0x1fc6, 0x03b9, 0x1fd6, - 0x03c5, 0x1fe6, 0x03c9, 0x1ff6, 0x03ca, 0x1fd7, 0x03cb, 0x1fe7, - 0x1f00, 0x1f06, 0x1f01, 0x1f07, 0x1f08, 0x1f0e, 0x1f09, 0x1f0f, - 0x1f20, 0x1f26, 0x1f21, 0x1f27, 0x1f28, 0x1f2e, 0x1f29, 0x1f2f, - 0x1f30, 0x1f36, 0x1f31, 0x1f37, 0x1f38, 0x1f3e, 0x1f39, 0x1f3f, - 0x1f50, 0x1f56, 0x1f51, 0x1f57, 0x1f59, 0x1f5f, 0x1f60, 0x1f66, - 0x1f61, 0x1f67, 0x1f68, 0x1f6e, 0x1f69, 0x1f6f, 0x1fbf, 0x1fcf, - 0x1ffe, 0x1fdf, - /* 0x0345 */ - 0x0391, 0x1fbc, 0x0397, 0x1fcc, 0x03a9, 0x1ffc, 0x03ac, 0x1fb4, - 0x03ae, 0x1fc4, 0x03b1, 0x1fb3, 0x03b7, 0x1fc3, 0x03c9, 0x1ff3, - 0x03ce, 0x1ff4, 0x1f00, 0x1f80, 0x1f01, 0x1f81, 0x1f02, 0x1f82, - 0x1f03, 0x1f83, 0x1f04, 0x1f84, 0x1f05, 0x1f85, 0x1f06, 0x1f86, - 0x1f07, 0x1f87, 0x1f08, 0x1f88, 0x1f09, 0x1f89, 0x1f0a, 0x1f8a, - 0x1f0b, 0x1f8b, 0x1f0c, 0x1f8c, 0x1f0d, 0x1f8d, 0x1f0e, 0x1f8e, - 0x1f0f, 0x1f8f, 0x1f20, 0x1f90, 0x1f21, 0x1f91, 0x1f22, 0x1f92, - 0x1f23, 0x1f93, 0x1f24, 0x1f94, 0x1f25, 0x1f95, 0x1f26, 0x1f96, - 0x1f27, 0x1f97, 0x1f28, 0x1f98, 0x1f29, 0x1f99, 0x1f2a, 0x1f9a, - 0x1f2b, 0x1f9b, 0x1f2c, 0x1f9c, 0x1f2d, 0x1f9d, 0x1f2e, 0x1f9e, - 0x1f2f, 0x1f9f, 0x1f60, 0x1fa0, 0x1f61, 0x1fa1, 0x1f62, 0x1fa2, - 0x1f63, 0x1fa3, 0x1f64, 0x1fa4, 0x1f65, 0x1fa5, 0x1f66, 0x1fa6, - 0x1f67, 0x1fa7, 0x1f68, 0x1fa8, 0x1f69, 0x1fa9, 0x1f6a, 0x1faa, - 0x1f6b, 0x1fab, 0x1f6c, 0x1fac, 0x1f6d, 0x1fad, 0x1f6e, 0x1fae, - 0x1f6f, 0x1faf, 0x1f70, 0x1fb2, 0x1f74, 0x1fc2, 0x1f7c, 0x1ff2, - 0x1fb6, 0x1fb7, 0x1fc6, 0x1fc7, 0x1ff6, 0x1ff7, - /* 0x05b4 */ - 0x05d9, 0xfb1d, - /* 0x05b7 */ - 0x05d0, 0xfb2e, 0x05f2, 0xfb1f, - /* 0x05b8 */ - 0x05d0, 0xfb2f, - /* 0x05b9 */ - 0x05d5, 0xfb4b, - /* 0x05bc */ - 0x05d0, 0xfb30, 0x05d1, 0xfb31, 0x05d2, 0xfb32, 0x05d3, 0xfb33, - 0x05d4, 0xfb34, 0x05d5, 0xfb35, 0x05d6, 0xfb36, 0x05d8, 0xfb38, - 0x05d9, 0xfb39, 0x05da, 0xfb3a, 0x05db, 0xfb3b, 0x05dc, 0xfb3c, - 0x05de, 0xfb3e, 0x05e0, 0xfb40, 0x05e1, 0xfb41, 0x05e3, 0xfb43, - 0x05e4, 0xfb44, 0x05e6, 0xfb46, 0x05e7, 0xfb47, 0x05e8, 0xfb48, - 0x05e9, 0xfb49, 0x05ea, 0xfb4a, - /* 0x05bf */ - 0x05d1, 0xfb4c, 0x05db, 0xfb4d, 0x05e4, 0xfb4e, - /* 0x05c1 */ - 0x05e9, 0xfb2a, 0xfb49, 0xfb2c, - /* 0x05c2 */ - 0x05e9, 0xfb2b, 0xfb49, 0xfb2d, - /* 0x0653 */ - 0x0627, 0x0622, - /* 0x0654 */ - 0x0627, 0x0623, 0x0648, 0x0624, 0x064a, 0x0626, 0x06c1, 0x06c2, - 0x06d2, 0x06d3, 0x06d5, 0x06c0, - /* 0x0655 */ - 0x0627, 0x0625, - /* 0x093c */ - 0x0915, 0x0958, 0x0916, 0x0959, 0x0917, 0x095a, 0x091c, 0x095b, - 0x0921, 0x095c, 0x0922, 0x095d, 0x0928, 0x0929, 0x092b, 0x095e, - 0x092f, 0x095f, 0x0930, 0x0931, 0x0933, 0x0934, - /* 0x09bc */ - 0x09a1, 0x09dc, 0x09a2, 0x09dd, 0x09af, 0x09df, - /* 0x09be */ - 0x09c7, 0x09cb, - /* 0x09d7 */ - 0x09c7, 0x09cc, - /* 0x0a3c */ - 0x0a16, 0x0a59, 0x0a17, 0x0a5a, 0x0a1c, 0x0a5b, 0x0a2b, 0x0a5e, - 0x0a32, 0x0a33, 0x0a38, 0x0a36, - /* 0x0b3c */ - 0x0b21, 0x0b5c, 0x0b22, 0x0b5d, - /* 0x0b3e */ - 0x0b47, 0x0b4b, - /* 0x0b56 */ - 0x0b47, 0x0b48, - /* 0x0b57 */ - 0x0b47, 0x0b4c, - /* 0x0bbe */ - 0x0bc6, 0x0bca, 0x0bc7, 0x0bcb, - /* 0x0bd7 */ - 0x0b92, 0x0b94, 0x0bc6, 0x0bcc, - /* 0x0c56 */ - 0x0c46, 0x0c48, - /* 0x0cc2 */ - 0x0cc6, 0x0cca, - /* 0x0cd5 */ - 0x0cbf, 0x0cc0, 0x0cc6, 0x0cc7, 0x0cca, 0x0ccb, - /* 0x0cd6 */ - 0x0cc6, 0x0cc8, - /* 0x0d3e */ - 0x0d46, 0x0d4a, 0x0d47, 0x0d4b, - /* 0x0d57 */ - 0x0d46, 0x0d4c, - /* 0x0dca */ - 0x0dd9, 0x0dda, 0x0ddc, 0x0ddd, - /* 0x0dcf */ - 0x0dd9, 0x0ddc, - /* 0x0ddf */ - 0x0dd9, 0x0dde, - /* 0x0f72 */ - 0x0f71, 0x0f73, - /* 0x0f74 */ - 0x0f71, 0x0f75, - /* 0x0f80 */ - 0x0f71, 0x0f81, 0x0fb2, 0x0f76, 0x0fb3, 0x0f78, - /* 0x0fb5 */ - 0x0f40, 0x0f69, 0x0f90, 0x0fb9, - /* 0x0fb7 */ - 0x0f42, 0x0f43, 0x0f4c, 0x0f4d, 0x0f51, 0x0f52, 0x0f56, 0x0f57, - 0x0f5b, 0x0f5c, 0x0f92, 0x0f93, 0x0f9c, 0x0f9d, 0x0fa1, 0x0fa2, - 0x0fa6, 0x0fa7, 0x0fab, 0x0fac, - /* 0x102e */ - 0x1025, 0x1026, - /* 0x3099 */ - 0x3046, 0x3094, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, - 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, - 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, - 0x3061, 0x3062, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, - 0x306f, 0x3070, 0x3072, 0x3073, 0x3075, 0x3076, 0x3078, 0x3079, - 0x307b, 0x307c, 0x309d, 0x309e, 0x30a6, 0x30f4, 0x30ab, 0x30ac, - 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, - 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, - 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c4, 0x30c5, - 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30cf, 0x30d0, 0x30d2, 0x30d3, - 0x30d5, 0x30d6, 0x30d8, 0x30d9, 0x30db, 0x30dc, 0x30ef, 0x30f7, - 0x30f0, 0x30f8, 0x30f1, 0x30f9, 0x30f2, 0x30fa, 0x30fd, 0x30fe, - /* 0x309a */ - 0x306f, 0x3071, 0x3072, 0x3074, 0x3075, 0x3077, 0x3078, 0x307a, - 0x307b, 0x307d, 0x30cf, 0x30d1, 0x30d2, 0x30d4, 0x30d5, 0x30d7, - 0x30d8, 0x30da, 0x30db, 0x30dd -}; - -const unsigned int unicode_compose_table_size = 69; - -const WCHAR unicode_decompose_table[4560] = -{ - /* index */ - 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0100, 0x0160, 0x0100, - 0x0100, 0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x0100, 0x01c0, - 0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x01e0, 0x01f0, - 0x0100, 0x0200, 0x0210, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0220, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0230, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0240, 0x0100, 0x0100, 0x0100, 0x0100, - /* null sub-index */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - /* sub-index 00 */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0270, 0x0290, 0x02b0, 0x02d0, - /* sub-index 01 */ - 0x02f0, 0x0310, 0x0330, 0x0350, 0x0370, 0x0390, 0x03b0, 0x03d0, - 0x0250, 0x0250, 0x03f0, 0x0410, 0x0430, 0x0450, 0x0470, 0x0490, - /* sub-index 02 */ - 0x04b0, 0x04d0, 0x04f0, 0x0510, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - /* sub-index 03 */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x0530, 0x0250, 0x0250, 0x0250, - 0x0550, 0x0570, 0x0590, 0x05b0, 0x05d0, 0x05f0, 0x0250, 0x0250, - /* sub-index 04 */ - 0x0610, 0x0630, 0x0250, 0x0650, 0x0250, 0x0670, 0x0250, 0x0690, - 0x0250, 0x0250, 0x0250, 0x0250, 0x06b0, 0x06d0, 0x06f0, 0x0710, - /* sub-index 06 */ - 0x0250, 0x0250, 0x0730, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0750, 0x0770, 0x0250, 0x0250, - /* sub-index 09 */ - 0x0250, 0x0250, 0x0790, 0x07b0, 0x0250, 0x07d0, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x07f0, 0x0810, 0x0250, 0x0250, - /* sub-index 0a */ - 0x0250, 0x0250, 0x0250, 0x0830, 0x0250, 0x0850, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - /* sub-index 0b */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x0870, 0x0890, 0x0250, 0x0250, - 0x0250, 0x08b0, 0x0250, 0x0250, 0x08d0, 0x0250, 0x0250, 0x0250, - /* sub-index 0c */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x08f0, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0910, 0x0250, 0x0250, 0x0250, - /* sub-index 0d */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x0930, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0950, 0x0250, 0x0250, - /* sub-index 0f */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x0970, 0x0990, 0x09b0, 0x09d0, - 0x09f0, 0x0a10, 0x0a30, 0x0a50, 0x0250, 0x0250, 0x0250, 0x0250, - /* sub-index 10 */ - 0x0250, 0x0250, 0x0a70, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - /* sub-index 1e */ - 0x0a90, 0x0ab0, 0x0ad0, 0x0af0, 0x0b10, 0x0b30, 0x0b50, 0x0b70, - 0x0b90, 0x0bb0, 0x0bd0, 0x0bf0, 0x0c10, 0x0c30, 0x0c50, 0x0c70, - /* sub-index 1f */ - 0x0c90, 0x0cb0, 0x0cd0, 0x0cf0, 0x0d10, 0x0d30, 0x0d50, 0x0d70, - 0x0d90, 0x0db0, 0x0dd0, 0x0df0, 0x0e10, 0x0e30, 0x0e50, 0x0e70, - /* sub-index 21 */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0e90, 0x0eb0, 0x0250, 0x0ed0, 0x0250, 0x0250, 0x0250, - /* sub-index 22 */ - 0x0ef0, 0x0250, 0x0f10, 0x0250, 0x0f30, 0x0250, 0x0f50, 0x0f70, - 0x0f90, 0x0250, 0x0fb0, 0x0250, 0x0250, 0x0250, 0x0fd0, 0x0250, - /* sub-index 2a */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0ff0, 0x0250, 0x0250, - /* sub-index 30 */ - 0x0250, 0x0250, 0x0250, 0x0250, 0x1010, 0x1030, 0x1050, 0x1070, - 0x0250, 0x1090, 0x10b0, 0x10d0, 0x10f0, 0x1110, 0x0250, 0x1130, - /* sub-index fb */ - 0x0250, 0x1150, 0x1170, 0x1190, 0x11b0, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - /* null mapping */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x00c0 .. 0x00cf */ - 0x0041, 0x0300, 0x0041, 0x0301, 0x0041, 0x0302, 0x0041, 0x0303, - 0x0041, 0x0308, 0x0041, 0x030a, 0x0000, 0x0000, 0x0043, 0x0327, - 0x0045, 0x0300, 0x0045, 0x0301, 0x0045, 0x0302, 0x0045, 0x0308, - 0x0049, 0x0300, 0x0049, 0x0301, 0x0049, 0x0302, 0x0049, 0x0308, - /* 0x00d0 .. 0x00df */ - 0x0000, 0x0000, 0x004e, 0x0303, 0x004f, 0x0300, 0x004f, 0x0301, - 0x004f, 0x0302, 0x004f, 0x0303, 0x004f, 0x0308, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0055, 0x0300, 0x0055, 0x0301, 0x0055, 0x0302, - 0x0055, 0x0308, 0x0059, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x00e0 .. 0x00ef */ - 0x0061, 0x0300, 0x0061, 0x0301, 0x0061, 0x0302, 0x0061, 0x0303, - 0x0061, 0x0308, 0x0061, 0x030a, 0x0000, 0x0000, 0x0063, 0x0327, - 0x0065, 0x0300, 0x0065, 0x0301, 0x0065, 0x0302, 0x0065, 0x0308, - 0x0069, 0x0300, 0x0069, 0x0301, 0x0069, 0x0302, 0x0069, 0x0308, - /* 0x00f0 .. 0x00ff */ - 0x0000, 0x0000, 0x006e, 0x0303, 0x006f, 0x0300, 0x006f, 0x0301, - 0x006f, 0x0302, 0x006f, 0x0303, 0x006f, 0x0308, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0075, 0x0300, 0x0075, 0x0301, 0x0075, 0x0302, - 0x0075, 0x0308, 0x0079, 0x0301, 0x0000, 0x0000, 0x0079, 0x0308, - /* 0x0100 .. 0x010f */ - 0x0041, 0x0304, 0x0061, 0x0304, 0x0041, 0x0306, 0x0061, 0x0306, - 0x0041, 0x0328, 0x0061, 0x0328, 0x0043, 0x0301, 0x0063, 0x0301, - 0x0043, 0x0302, 0x0063, 0x0302, 0x0043, 0x0307, 0x0063, 0x0307, - 0x0043, 0x030c, 0x0063, 0x030c, 0x0044, 0x030c, 0x0064, 0x030c, - /* 0x0110 .. 0x011f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0045, 0x0304, 0x0065, 0x0304, - 0x0045, 0x0306, 0x0065, 0x0306, 0x0045, 0x0307, 0x0065, 0x0307, - 0x0045, 0x0328, 0x0065, 0x0328, 0x0045, 0x030c, 0x0065, 0x030c, - 0x0047, 0x0302, 0x0067, 0x0302, 0x0047, 0x0306, 0x0067, 0x0306, - /* 0x0120 .. 0x012f */ - 0x0047, 0x0307, 0x0067, 0x0307, 0x0047, 0x0327, 0x0067, 0x0327, - 0x0048, 0x0302, 0x0068, 0x0302, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0049, 0x0303, 0x0069, 0x0303, 0x0049, 0x0304, 0x0069, 0x0304, - 0x0049, 0x0306, 0x0069, 0x0306, 0x0049, 0x0328, 0x0069, 0x0328, - /* 0x0130 .. 0x013f */ - 0x0049, 0x0307, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x004a, 0x0302, 0x006a, 0x0302, 0x004b, 0x0327, 0x006b, 0x0327, - 0x0000, 0x0000, 0x004c, 0x0301, 0x006c, 0x0301, 0x004c, 0x0327, - 0x006c, 0x0327, 0x004c, 0x030c, 0x006c, 0x030c, 0x0000, 0x0000, - /* 0x0140 .. 0x014f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004e, 0x0301, - 0x006e, 0x0301, 0x004e, 0x0327, 0x006e, 0x0327, 0x004e, 0x030c, - 0x006e, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x004f, 0x0304, 0x006f, 0x0304, 0x004f, 0x0306, 0x006f, 0x0306, - /* 0x0150 .. 0x015f */ - 0x004f, 0x030b, 0x006f, 0x030b, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0052, 0x0301, 0x0072, 0x0301, 0x0052, 0x0327, 0x0072, 0x0327, - 0x0052, 0x030c, 0x0072, 0x030c, 0x0053, 0x0301, 0x0073, 0x0301, - 0x0053, 0x0302, 0x0073, 0x0302, 0x0053, 0x0327, 0x0073, 0x0327, - /* 0x0160 .. 0x016f */ - 0x0053, 0x030c, 0x0073, 0x030c, 0x0054, 0x0327, 0x0074, 0x0327, - 0x0054, 0x030c, 0x0074, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0055, 0x0303, 0x0075, 0x0303, 0x0055, 0x0304, 0x0075, 0x0304, - 0x0055, 0x0306, 0x0075, 0x0306, 0x0055, 0x030a, 0x0075, 0x030a, - /* 0x0170 .. 0x017f */ - 0x0055, 0x030b, 0x0075, 0x030b, 0x0055, 0x0328, 0x0075, 0x0328, - 0x0057, 0x0302, 0x0077, 0x0302, 0x0059, 0x0302, 0x0079, 0x0302, - 0x0059, 0x0308, 0x005a, 0x0301, 0x007a, 0x0301, 0x005a, 0x0307, - 0x007a, 0x0307, 0x005a, 0x030c, 0x007a, 0x030c, 0x0000, 0x0000, - /* 0x01a0 .. 0x01af */ - 0x004f, 0x031b, 0x006f, 0x031b, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0055, 0x031b, - /* 0x01b0 .. 0x01bf */ - 0x0075, 0x031b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x01c0 .. 0x01cf */ - 0x0000, 0x0000, 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, 0x030c, 0x0061, 0x030c, 0x0049, 0x030c, - /* 0x01d0 .. 0x01df */ - 0x0069, 0x030c, 0x004f, 0x030c, 0x006f, 0x030c, 0x0055, 0x030c, - 0x0075, 0x030c, 0x00dc, 0x0304, 0x00fc, 0x0304, 0x00dc, 0x0301, - 0x00fc, 0x0301, 0x00dc, 0x030c, 0x00fc, 0x030c, 0x00dc, 0x0300, - 0x00fc, 0x0300, 0x0000, 0x0000, 0x00c4, 0x0304, 0x00e4, 0x0304, - /* 0x01e0 .. 0x01ef */ - 0x0226, 0x0304, 0x0227, 0x0304, 0x00c6, 0x0304, 0x00e6, 0x0304, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0047, 0x030c, 0x0067, 0x030c, - 0x004b, 0x030c, 0x006b, 0x030c, 0x004f, 0x0328, 0x006f, 0x0328, - 0x01ea, 0x0304, 0x01eb, 0x0304, 0x01b7, 0x030c, 0x0292, 0x030c, - /* 0x01f0 .. 0x01ff */ - 0x006a, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0047, 0x0301, 0x0067, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, - 0x004e, 0x0300, 0x006e, 0x0300, 0x00c5, 0x0301, 0x00e5, 0x0301, - 0x00c6, 0x0301, 0x00e6, 0x0301, 0x00d8, 0x0301, 0x00f8, 0x0301, - /* 0x0200 .. 0x020f */ - 0x0041, 0x030f, 0x0061, 0x030f, 0x0041, 0x0311, 0x0061, 0x0311, - 0x0045, 0x030f, 0x0065, 0x030f, 0x0045, 0x0311, 0x0065, 0x0311, - 0x0049, 0x030f, 0x0069, 0x030f, 0x0049, 0x0311, 0x0069, 0x0311, - 0x004f, 0x030f, 0x006f, 0x030f, 0x004f, 0x0311, 0x006f, 0x0311, - /* 0x0210 .. 0x021f */ - 0x0052, 0x030f, 0x0072, 0x030f, 0x0052, 0x0311, 0x0072, 0x0311, - 0x0055, 0x030f, 0x0075, 0x030f, 0x0055, 0x0311, 0x0075, 0x0311, - 0x0053, 0x0326, 0x0073, 0x0326, 0x0054, 0x0326, 0x0074, 0x0326, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0048, 0x030c, 0x0068, 0x030c, - /* 0x0220 .. 0x022f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0307, 0x0061, 0x0307, - 0x0045, 0x0327, 0x0065, 0x0327, 0x00d6, 0x0304, 0x00f6, 0x0304, - 0x00d5, 0x0304, 0x00f5, 0x0304, 0x004f, 0x0307, 0x006f, 0x0307, - /* 0x0230 .. 0x023f */ - 0x022e, 0x0304, 0x022f, 0x0304, 0x0059, 0x0304, 0x0079, 0x0304, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0340 .. 0x034f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0308, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0380 .. 0x038f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00a8, 0x0301, 0x0391, 0x0301, 0x0000, 0x0000, - 0x0395, 0x0301, 0x0397, 0x0301, 0x0399, 0x0301, 0x0000, 0x0000, - 0x039f, 0x0301, 0x0000, 0x0000, 0x03a5, 0x0301, 0x03a9, 0x0301, - /* 0x0390 .. 0x039f */ - 0x03ca, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x03a0 .. 0x03af */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0399, 0x0308, 0x03a5, 0x0308, - 0x03b1, 0x0301, 0x03b5, 0x0301, 0x03b7, 0x0301, 0x03b9, 0x0301, - /* 0x03b0 .. 0x03bf */ - 0x03cb, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x03c0 .. 0x03cf */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0308, 0x03c5, 0x0308, - 0x03bf, 0x0301, 0x03c5, 0x0301, 0x03c9, 0x0301, 0x0000, 0x0000, - /* 0x03d0 .. 0x03df */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03d2, 0x0301, - 0x03d2, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0400 .. 0x040f */ - 0x0415, 0x0300, 0x0415, 0x0308, 0x0000, 0x0000, 0x0413, 0x0301, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0406, 0x0308, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x041a, 0x0301, 0x0418, 0x0300, 0x0423, 0x0306, 0x0000, 0x0000, - /* 0x0410 .. 0x041f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0418, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0430 .. 0x043f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0438, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0450 .. 0x045f */ - 0x0435, 0x0300, 0x0435, 0x0308, 0x0000, 0x0000, 0x0433, 0x0301, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0456, 0x0308, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x043a, 0x0301, 0x0438, 0x0300, 0x0443, 0x0306, 0x0000, 0x0000, - /* 0x0470 .. 0x047f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0474, 0x030f, 0x0475, 0x030f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x04c0 .. 0x04cf */ - 0x0000, 0x0000, 0x0416, 0x0306, 0x0436, 0x0306, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x04d0 .. 0x04df */ - 0x0410, 0x0306, 0x0430, 0x0306, 0x0410, 0x0308, 0x0430, 0x0308, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0415, 0x0306, 0x0435, 0x0306, - 0x0000, 0x0000, 0x0000, 0x0000, 0x04d8, 0x0308, 0x04d9, 0x0308, - 0x0416, 0x0308, 0x0436, 0x0308, 0x0417, 0x0308, 0x0437, 0x0308, - /* 0x04e0 .. 0x04ef */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0418, 0x0304, 0x0438, 0x0304, - 0x0418, 0x0308, 0x0438, 0x0308, 0x041e, 0x0308, 0x043e, 0x0308, - 0x0000, 0x0000, 0x0000, 0x0000, 0x04e8, 0x0308, 0x04e9, 0x0308, - 0x042d, 0x0308, 0x044d, 0x0308, 0x0423, 0x0304, 0x0443, 0x0304, - /* 0x04f0 .. 0x04ff */ - 0x0423, 0x0308, 0x0443, 0x0308, 0x0423, 0x030b, 0x0443, 0x030b, - 0x0427, 0x0308, 0x0447, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000, - 0x042b, 0x0308, 0x044b, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0620 .. 0x062f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0627, 0x0653, 0x0627, 0x0654, - 0x0648, 0x0654, 0x0627, 0x0655, 0x064a, 0x0654, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x06c0 .. 0x06cf */ - 0x06d5, 0x0654, 0x0000, 0x0000, 0x06c1, 0x0654, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x06d0 .. 0x06df */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x06d2, 0x0654, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0920 .. 0x092f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0928, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0930 .. 0x093f */ - 0x0000, 0x0000, 0x0930, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0933, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0950 .. 0x095f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0915, 0x093c, 0x0916, 0x093c, 0x0917, 0x093c, 0x091c, 0x093c, - 0x0921, 0x093c, 0x0922, 0x093c, 0x092b, 0x093c, 0x092f, 0x093c, - /* 0x09c0 .. 0x09cf */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x09c7, 0x09be, - 0x09c7, 0x09d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x09d0 .. 0x09df */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x09a1, 0x09bc, 0x09a2, 0x09bc, 0x0000, 0x0000, 0x09af, 0x09bc, - /* 0x0a30 .. 0x0a3f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a32, 0x0a3c, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0a38, 0x0a3c, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0a50 .. 0x0a5f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0a16, 0x0a3c, 0x0a17, 0x0a3c, 0x0a1c, 0x0a3c, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0a2b, 0x0a3c, 0x0000, 0x0000, - /* 0x0b40 .. 0x0b4f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0b47, 0x0b56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b47, 0x0b3e, - 0x0b47, 0x0b57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0b50 .. 0x0b5f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0b21, 0x0b3c, 0x0b22, 0x0b3c, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0b90 .. 0x0b9f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0b92, 0x0bd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0bc0 .. 0x0bcf */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0bc6, 0x0bbe, 0x0bc7, 0x0bbe, - 0x0bc6, 0x0bd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0c40 .. 0x0c4f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0c46, 0x0c56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0cc0 .. 0x0ccf */ - 0x0cbf, 0x0cd5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0cc6, 0x0cd5, - 0x0cc6, 0x0cd6, 0x0000, 0x0000, 0x0cc6, 0x0cc2, 0x0cca, 0x0cd5, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0d40 .. 0x0d4f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0d46, 0x0d3e, 0x0d47, 0x0d3e, - 0x0d46, 0x0d57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0dd0 .. 0x0ddf */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0dd9, 0x0dca, 0x0000, 0x0000, - 0x0dd9, 0x0dcf, 0x0ddc, 0x0dca, 0x0dd9, 0x0ddf, 0x0000, 0x0000, - /* 0x0f40 .. 0x0f4f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f42, 0x0fb7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0f4c, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0f50 .. 0x0f5f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0f51, 0x0fb7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f56, 0x0fb7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0f5b, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0f60 .. 0x0f6f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0f40, 0x0fb5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0f70 .. 0x0f7f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f71, 0x0f72, - 0x0000, 0x0000, 0x0f71, 0x0f74, 0x0fb2, 0x0f80, 0x0000, 0x0000, - 0x0fb3, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0f80 .. 0x0f8f */ - 0x0000, 0x0000, 0x0f71, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0f90 .. 0x0f9f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f92, 0x0fb7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0f9c, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0fa0 .. 0x0faf */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0fa1, 0x0fb7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fa6, 0x0fb7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0fab, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x0fb0 .. 0x0fbf */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0f90, 0x0fb5, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1020 .. 0x102f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1025, 0x102e, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1e00 .. 0x1e0f */ - 0x0041, 0x0325, 0x0061, 0x0325, 0x0042, 0x0307, 0x0062, 0x0307, - 0x0042, 0x0323, 0x0062, 0x0323, 0x0042, 0x0331, 0x0062, 0x0331, - 0x00c7, 0x0301, 0x00e7, 0x0301, 0x0044, 0x0307, 0x0064, 0x0307, - 0x0044, 0x0323, 0x0064, 0x0323, 0x0044, 0x0331, 0x0064, 0x0331, - /* 0x1e10 .. 0x1e1f */ - 0x0044, 0x0327, 0x0064, 0x0327, 0x0044, 0x032d, 0x0064, 0x032d, - 0x0112, 0x0300, 0x0113, 0x0300, 0x0112, 0x0301, 0x0113, 0x0301, - 0x0045, 0x032d, 0x0065, 0x032d, 0x0045, 0x0330, 0x0065, 0x0330, - 0x0228, 0x0306, 0x0229, 0x0306, 0x0046, 0x0307, 0x0066, 0x0307, - /* 0x1e20 .. 0x1e2f */ - 0x0047, 0x0304, 0x0067, 0x0304, 0x0048, 0x0307, 0x0068, 0x0307, - 0x0048, 0x0323, 0x0068, 0x0323, 0x0048, 0x0308, 0x0068, 0x0308, - 0x0048, 0x0327, 0x0068, 0x0327, 0x0048, 0x032e, 0x0068, 0x032e, - 0x0049, 0x0330, 0x0069, 0x0330, 0x00cf, 0x0301, 0x00ef, 0x0301, - /* 0x1e30 .. 0x1e3f */ - 0x004b, 0x0301, 0x006b, 0x0301, 0x004b, 0x0323, 0x006b, 0x0323, - 0x004b, 0x0331, 0x006b, 0x0331, 0x004c, 0x0323, 0x006c, 0x0323, - 0x1e36, 0x0304, 0x1e37, 0x0304, 0x004c, 0x0331, 0x006c, 0x0331, - 0x004c, 0x032d, 0x006c, 0x032d, 0x004d, 0x0301, 0x006d, 0x0301, - /* 0x1e40 .. 0x1e4f */ - 0x004d, 0x0307, 0x006d, 0x0307, 0x004d, 0x0323, 0x006d, 0x0323, - 0x004e, 0x0307, 0x006e, 0x0307, 0x004e, 0x0323, 0x006e, 0x0323, - 0x004e, 0x0331, 0x006e, 0x0331, 0x004e, 0x032d, 0x006e, 0x032d, - 0x00d5, 0x0301, 0x00f5, 0x0301, 0x00d5, 0x0308, 0x00f5, 0x0308, - /* 0x1e50 .. 0x1e5f */ - 0x014c, 0x0300, 0x014d, 0x0300, 0x014c, 0x0301, 0x014d, 0x0301, - 0x0050, 0x0301, 0x0070, 0x0301, 0x0050, 0x0307, 0x0070, 0x0307, - 0x0052, 0x0307, 0x0072, 0x0307, 0x0052, 0x0323, 0x0072, 0x0323, - 0x1e5a, 0x0304, 0x1e5b, 0x0304, 0x0052, 0x0331, 0x0072, 0x0331, - /* 0x1e60 .. 0x1e6f */ - 0x0053, 0x0307, 0x0073, 0x0307, 0x0053, 0x0323, 0x0073, 0x0323, - 0x015a, 0x0307, 0x015b, 0x0307, 0x0160, 0x0307, 0x0161, 0x0307, - 0x1e62, 0x0307, 0x1e63, 0x0307, 0x0054, 0x0307, 0x0074, 0x0307, - 0x0054, 0x0323, 0x0074, 0x0323, 0x0054, 0x0331, 0x0074, 0x0331, - /* 0x1e70 .. 0x1e7f */ - 0x0054, 0x032d, 0x0074, 0x032d, 0x0055, 0x0324, 0x0075, 0x0324, - 0x0055, 0x0330, 0x0075, 0x0330, 0x0055, 0x032d, 0x0075, 0x032d, - 0x0168, 0x0301, 0x0169, 0x0301, 0x016a, 0x0308, 0x016b, 0x0308, - 0x0056, 0x0303, 0x0076, 0x0303, 0x0056, 0x0323, 0x0076, 0x0323, - /* 0x1e80 .. 0x1e8f */ - 0x0057, 0x0300, 0x0077, 0x0300, 0x0057, 0x0301, 0x0077, 0x0301, - 0x0057, 0x0308, 0x0077, 0x0308, 0x0057, 0x0307, 0x0077, 0x0307, - 0x0057, 0x0323, 0x0077, 0x0323, 0x0058, 0x0307, 0x0078, 0x0307, - 0x0058, 0x0308, 0x0078, 0x0308, 0x0059, 0x0307, 0x0079, 0x0307, - /* 0x1e90 .. 0x1e9f */ - 0x005a, 0x0302, 0x007a, 0x0302, 0x005a, 0x0323, 0x007a, 0x0323, - 0x005a, 0x0331, 0x007a, 0x0331, 0x0068, 0x0331, 0x0074, 0x0308, - 0x0077, 0x030a, 0x0079, 0x030a, 0x0000, 0x0000, 0x017f, 0x0307, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1ea0 .. 0x1eaf */ - 0x0041, 0x0323, 0x0061, 0x0323, 0x0041, 0x0309, 0x0061, 0x0309, - 0x00c2, 0x0301, 0x00e2, 0x0301, 0x00c2, 0x0300, 0x00e2, 0x0300, - 0x00c2, 0x0309, 0x00e2, 0x0309, 0x00c2, 0x0303, 0x00e2, 0x0303, - 0x1ea0, 0x0302, 0x1ea1, 0x0302, 0x0102, 0x0301, 0x0103, 0x0301, - /* 0x1eb0 .. 0x1ebf */ - 0x0102, 0x0300, 0x0103, 0x0300, 0x0102, 0x0309, 0x0103, 0x0309, - 0x0102, 0x0303, 0x0103, 0x0303, 0x1ea0, 0x0306, 0x1ea1, 0x0306, - 0x0045, 0x0323, 0x0065, 0x0323, 0x0045, 0x0309, 0x0065, 0x0309, - 0x0045, 0x0303, 0x0065, 0x0303, 0x00ca, 0x0301, 0x00ea, 0x0301, - /* 0x1ec0 .. 0x1ecf */ - 0x00ca, 0x0300, 0x00ea, 0x0300, 0x00ca, 0x0309, 0x00ea, 0x0309, - 0x00ca, 0x0303, 0x00ea, 0x0303, 0x1eb8, 0x0302, 0x1eb9, 0x0302, - 0x0049, 0x0309, 0x0069, 0x0309, 0x0049, 0x0323, 0x0069, 0x0323, - 0x004f, 0x0323, 0x006f, 0x0323, 0x004f, 0x0309, 0x006f, 0x0309, - /* 0x1ed0 .. 0x1edf */ - 0x00d4, 0x0301, 0x00f4, 0x0301, 0x00d4, 0x0300, 0x00f4, 0x0300, - 0x00d4, 0x0309, 0x00f4, 0x0309, 0x00d4, 0x0303, 0x00f4, 0x0303, - 0x1ecc, 0x0302, 0x1ecd, 0x0302, 0x01a0, 0x0301, 0x01a1, 0x0301, - 0x01a0, 0x0300, 0x01a1, 0x0300, 0x01a0, 0x0309, 0x01a1, 0x0309, - /* 0x1ee0 .. 0x1eef */ - 0x01a0, 0x0303, 0x01a1, 0x0303, 0x01a0, 0x0323, 0x01a1, 0x0323, - 0x0055, 0x0323, 0x0075, 0x0323, 0x0055, 0x0309, 0x0075, 0x0309, - 0x01af, 0x0301, 0x01b0, 0x0301, 0x01af, 0x0300, 0x01b0, 0x0300, - 0x01af, 0x0309, 0x01b0, 0x0309, 0x01af, 0x0303, 0x01b0, 0x0303, - /* 0x1ef0 .. 0x1eff */ - 0x01af, 0x0323, 0x01b0, 0x0323, 0x0059, 0x0300, 0x0079, 0x0300, - 0x0059, 0x0323, 0x0079, 0x0323, 0x0059, 0x0309, 0x0079, 0x0309, - 0x0059, 0x0303, 0x0079, 0x0303, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1f00 .. 0x1f0f */ - 0x03b1, 0x0313, 0x03b1, 0x0314, 0x1f00, 0x0300, 0x1f01, 0x0300, - 0x1f00, 0x0301, 0x1f01, 0x0301, 0x1f00, 0x0342, 0x1f01, 0x0342, - 0x0391, 0x0313, 0x0391, 0x0314, 0x1f08, 0x0300, 0x1f09, 0x0300, - 0x1f08, 0x0301, 0x1f09, 0x0301, 0x1f08, 0x0342, 0x1f09, 0x0342, - /* 0x1f10 .. 0x1f1f */ - 0x03b5, 0x0313, 0x03b5, 0x0314, 0x1f10, 0x0300, 0x1f11, 0x0300, - 0x1f10, 0x0301, 0x1f11, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0395, 0x0313, 0x0395, 0x0314, 0x1f18, 0x0300, 0x1f19, 0x0300, - 0x1f18, 0x0301, 0x1f19, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1f20 .. 0x1f2f */ - 0x03b7, 0x0313, 0x03b7, 0x0314, 0x1f20, 0x0300, 0x1f21, 0x0300, - 0x1f20, 0x0301, 0x1f21, 0x0301, 0x1f20, 0x0342, 0x1f21, 0x0342, - 0x0397, 0x0313, 0x0397, 0x0314, 0x1f28, 0x0300, 0x1f29, 0x0300, - 0x1f28, 0x0301, 0x1f29, 0x0301, 0x1f28, 0x0342, 0x1f29, 0x0342, - /* 0x1f30 .. 0x1f3f */ - 0x03b9, 0x0313, 0x03b9, 0x0314, 0x1f30, 0x0300, 0x1f31, 0x0300, - 0x1f30, 0x0301, 0x1f31, 0x0301, 0x1f30, 0x0342, 0x1f31, 0x0342, - 0x0399, 0x0313, 0x0399, 0x0314, 0x1f38, 0x0300, 0x1f39, 0x0300, - 0x1f38, 0x0301, 0x1f39, 0x0301, 0x1f38, 0x0342, 0x1f39, 0x0342, - /* 0x1f40 .. 0x1f4f */ - 0x03bf, 0x0313, 0x03bf, 0x0314, 0x1f40, 0x0300, 0x1f41, 0x0300, - 0x1f40, 0x0301, 0x1f41, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, - 0x039f, 0x0313, 0x039f, 0x0314, 0x1f48, 0x0300, 0x1f49, 0x0300, - 0x1f48, 0x0301, 0x1f49, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1f50 .. 0x1f5f */ - 0x03c5, 0x0313, 0x03c5, 0x0314, 0x1f50, 0x0300, 0x1f51, 0x0300, - 0x1f50, 0x0301, 0x1f51, 0x0301, 0x1f50, 0x0342, 0x1f51, 0x0342, - 0x0000, 0x0000, 0x03a5, 0x0314, 0x0000, 0x0000, 0x1f59, 0x0300, - 0x0000, 0x0000, 0x1f59, 0x0301, 0x0000, 0x0000, 0x1f59, 0x0342, - /* 0x1f60 .. 0x1f6f */ - 0x03c9, 0x0313, 0x03c9, 0x0314, 0x1f60, 0x0300, 0x1f61, 0x0300, - 0x1f60, 0x0301, 0x1f61, 0x0301, 0x1f60, 0x0342, 0x1f61, 0x0342, - 0x03a9, 0x0313, 0x03a9, 0x0314, 0x1f68, 0x0300, 0x1f69, 0x0300, - 0x1f68, 0x0301, 0x1f69, 0x0301, 0x1f68, 0x0342, 0x1f69, 0x0342, - /* 0x1f70 .. 0x1f7f */ - 0x03b1, 0x0300, 0x0000, 0x0000, 0x03b5, 0x0300, 0x0000, 0x0000, - 0x03b7, 0x0300, 0x0000, 0x0000, 0x03b9, 0x0300, 0x0000, 0x0000, - 0x03bf, 0x0300, 0x0000, 0x0000, 0x03c5, 0x0300, 0x0000, 0x0000, - 0x03c9, 0x0300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1f80 .. 0x1f8f */ - 0x1f00, 0x0345, 0x1f01, 0x0345, 0x1f02, 0x0345, 0x1f03, 0x0345, - 0x1f04, 0x0345, 0x1f05, 0x0345, 0x1f06, 0x0345, 0x1f07, 0x0345, - 0x1f08, 0x0345, 0x1f09, 0x0345, 0x1f0a, 0x0345, 0x1f0b, 0x0345, - 0x1f0c, 0x0345, 0x1f0d, 0x0345, 0x1f0e, 0x0345, 0x1f0f, 0x0345, - /* 0x1f90 .. 0x1f9f */ - 0x1f20, 0x0345, 0x1f21, 0x0345, 0x1f22, 0x0345, 0x1f23, 0x0345, - 0x1f24, 0x0345, 0x1f25, 0x0345, 0x1f26, 0x0345, 0x1f27, 0x0345, - 0x1f28, 0x0345, 0x1f29, 0x0345, 0x1f2a, 0x0345, 0x1f2b, 0x0345, - 0x1f2c, 0x0345, 0x1f2d, 0x0345, 0x1f2e, 0x0345, 0x1f2f, 0x0345, - /* 0x1fa0 .. 0x1faf */ - 0x1f60, 0x0345, 0x1f61, 0x0345, 0x1f62, 0x0345, 0x1f63, 0x0345, - 0x1f64, 0x0345, 0x1f65, 0x0345, 0x1f66, 0x0345, 0x1f67, 0x0345, - 0x1f68, 0x0345, 0x1f69, 0x0345, 0x1f6a, 0x0345, 0x1f6b, 0x0345, - 0x1f6c, 0x0345, 0x1f6d, 0x0345, 0x1f6e, 0x0345, 0x1f6f, 0x0345, - /* 0x1fb0 .. 0x1fbf */ - 0x03b1, 0x0306, 0x03b1, 0x0304, 0x1f70, 0x0345, 0x03b1, 0x0345, - 0x03ac, 0x0345, 0x0000, 0x0000, 0x03b1, 0x0342, 0x1fb6, 0x0345, - 0x0391, 0x0306, 0x0391, 0x0304, 0x0391, 0x0300, 0x0000, 0x0000, - 0x0391, 0x0345, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1fc0 .. 0x1fcf */ - 0x0000, 0x0000, 0x00a8, 0x0342, 0x1f74, 0x0345, 0x03b7, 0x0345, - 0x03ae, 0x0345, 0x0000, 0x0000, 0x03b7, 0x0342, 0x1fc6, 0x0345, - 0x0395, 0x0300, 0x0000, 0x0000, 0x0397, 0x0300, 0x0000, 0x0000, - 0x0397, 0x0345, 0x1fbf, 0x0300, 0x1fbf, 0x0301, 0x1fbf, 0x0342, - /* 0x1fd0 .. 0x1fdf */ - 0x03b9, 0x0306, 0x03b9, 0x0304, 0x03ca, 0x0300, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0342, 0x03ca, 0x0342, - 0x0399, 0x0306, 0x0399, 0x0304, 0x0399, 0x0300, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1ffe, 0x0300, 0x1ffe, 0x0301, 0x1ffe, 0x0342, - /* 0x1fe0 .. 0x1fef */ - 0x03c5, 0x0306, 0x03c5, 0x0304, 0x03cb, 0x0300, 0x0000, 0x0000, - 0x03c1, 0x0313, 0x03c1, 0x0314, 0x03c5, 0x0342, 0x03cb, 0x0342, - 0x03a5, 0x0306, 0x03a5, 0x0304, 0x03a5, 0x0300, 0x0000, 0x0000, - 0x03a1, 0x0314, 0x00a8, 0x0300, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x1ff0 .. 0x1fff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x1f7c, 0x0345, 0x03c9, 0x0345, - 0x03ce, 0x0345, 0x0000, 0x0000, 0x03c9, 0x0342, 0x1ff6, 0x0345, - 0x039f, 0x0300, 0x0000, 0x0000, 0x03a9, 0x0300, 0x0000, 0x0000, - 0x03a9, 0x0345, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x2190 .. 0x219f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2190, 0x0338, 0x2192, 0x0338, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x21a0 .. 0x21af */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2194, 0x0338, 0x0000, 0x0000, - /* 0x21c0 .. 0x21cf */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x21d0, 0x0338, 0x21d4, 0x0338, 0x21d2, 0x0338, - /* 0x2200 .. 0x220f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2203, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2208, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x220b, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x2220 .. 0x222f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2223, 0x0338, 0x0000, 0x0000, 0x2225, 0x0338, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x2240 .. 0x224f */ - 0x0000, 0x0000, 0x223c, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2243, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x2245, 0x0338, - 0x0000, 0x0000, 0x2248, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x2260 .. 0x226f */ - 0x003d, 0x0338, 0x0000, 0x0000, 0x2261, 0x0338, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x224d, 0x0338, 0x003c, 0x0338, 0x003e, 0x0338, - /* 0x2270 .. 0x227f */ - 0x2264, 0x0338, 0x2265, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2272, 0x0338, 0x2273, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2276, 0x0338, 0x2277, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x2280 .. 0x228f */ - 0x227a, 0x0338, 0x227b, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2282, 0x0338, 0x2283, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2286, 0x0338, 0x2287, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x22a0 .. 0x22af */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x22a2, 0x0338, 0x22a8, 0x0338, 0x22a9, 0x0338, 0x22ab, 0x0338, - /* 0x22e0 .. 0x22ef */ - 0x227c, 0x0338, 0x227d, 0x0338, 0x2291, 0x0338, 0x2292, 0x0338, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x22b2, 0x0338, 0x22b3, 0x0338, - 0x22b4, 0x0338, 0x22b5, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x2ad0 .. 0x2adf */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2add, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x3040 .. 0x304f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x304b, 0x3099, 0x0000, 0x0000, 0x304d, 0x3099, 0x0000, 0x0000, - /* 0x3050 .. 0x305f */ - 0x304f, 0x3099, 0x0000, 0x0000, 0x3051, 0x3099, 0x0000, 0x0000, - 0x3053, 0x3099, 0x0000, 0x0000, 0x3055, 0x3099, 0x0000, 0x0000, - 0x3057, 0x3099, 0x0000, 0x0000, 0x3059, 0x3099, 0x0000, 0x0000, - 0x305b, 0x3099, 0x0000, 0x0000, 0x305d, 0x3099, 0x0000, 0x0000, - /* 0x3060 .. 0x306f */ - 0x305f, 0x3099, 0x0000, 0x0000, 0x3061, 0x3099, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3064, 0x3099, 0x0000, 0x0000, 0x3066, 0x3099, - 0x0000, 0x0000, 0x3068, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x3070 .. 0x307f */ - 0x306f, 0x3099, 0x306f, 0x309a, 0x0000, 0x0000, 0x3072, 0x3099, - 0x3072, 0x309a, 0x0000, 0x0000, 0x3075, 0x3099, 0x3075, 0x309a, - 0x0000, 0x0000, 0x3078, 0x3099, 0x3078, 0x309a, 0x0000, 0x0000, - 0x307b, 0x3099, 0x307b, 0x309a, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x3090 .. 0x309f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3046, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x309d, 0x3099, 0x0000, 0x0000, - /* 0x30a0 .. 0x30af */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x30ab, 0x3099, 0x0000, 0x0000, 0x30ad, 0x3099, 0x0000, 0x0000, - /* 0x30b0 .. 0x30bf */ - 0x30af, 0x3099, 0x0000, 0x0000, 0x30b1, 0x3099, 0x0000, 0x0000, - 0x30b3, 0x3099, 0x0000, 0x0000, 0x30b5, 0x3099, 0x0000, 0x0000, - 0x30b7, 0x3099, 0x0000, 0x0000, 0x30b9, 0x3099, 0x0000, 0x0000, - 0x30bb, 0x3099, 0x0000, 0x0000, 0x30bd, 0x3099, 0x0000, 0x0000, - /* 0x30c0 .. 0x30cf */ - 0x30bf, 0x3099, 0x0000, 0x0000, 0x30c1, 0x3099, 0x0000, 0x0000, - 0x0000, 0x0000, 0x30c4, 0x3099, 0x0000, 0x0000, 0x30c6, 0x3099, - 0x0000, 0x0000, 0x30c8, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x30d0 .. 0x30df */ - 0x30cf, 0x3099, 0x30cf, 0x309a, 0x0000, 0x0000, 0x30d2, 0x3099, - 0x30d2, 0x309a, 0x0000, 0x0000, 0x30d5, 0x3099, 0x30d5, 0x309a, - 0x0000, 0x0000, 0x30d8, 0x3099, 0x30d8, 0x309a, 0x0000, 0x0000, - 0x30db, 0x3099, 0x30db, 0x309a, 0x0000, 0x0000, 0x0000, 0x0000, - /* 0x30f0 .. 0x30ff */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x30a6, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, 0x30ef, 0x3099, - 0x30f0, 0x3099, 0x30f1, 0x3099, 0x30f2, 0x3099, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x30fd, 0x3099, 0x0000, 0x0000, - /* 0xfb10 .. 0xfb1f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x05d9, 0x05b4, 0x0000, 0x0000, 0x05f2, 0x05b7, - /* 0xfb20 .. 0xfb2f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x05e9, 0x05c1, 0x05e9, 0x05c2, - 0xfb49, 0x05c1, 0xfb49, 0x05c2, 0x05d0, 0x05b7, 0x05d0, 0x05b8, - /* 0xfb30 .. 0xfb3f */ - 0x05d0, 0x05bc, 0x05d1, 0x05bc, 0x05d2, 0x05bc, 0x05d3, 0x05bc, - 0x05d4, 0x05bc, 0x05d5, 0x05bc, 0x05d6, 0x05bc, 0x0000, 0x0000, - 0x05d8, 0x05bc, 0x05d9, 0x05bc, 0x05da, 0x05bc, 0x05db, 0x05bc, - 0x05dc, 0x05bc, 0x0000, 0x0000, 0x05de, 0x05bc, 0x0000, 0x0000, - /* 0xfb40 .. 0xfb4f */ - 0x05e0, 0x05bc, 0x05e1, 0x05bc, 0x0000, 0x0000, 0x05e3, 0x05bc, - 0x05e4, 0x05bc, 0x0000, 0x0000, 0x05e6, 0x05bc, 0x05e7, 0x05bc, - 0x05e8, 0x05bc, 0x05e9, 0x05bc, 0x05ea, 0x05bc, 0x05d5, 0x05b9, - 0x05d1, 0x05bf, 0x05db, 0x05bf, 0x05e4, 0x05bf, 0x0000, 0x0000 -}; diff --git a/reactos/tools/unicode/cpmap.pl b/reactos/tools/unicode/cpmap.pl deleted file mode 100644 index 8962e5aafdd..00000000000 --- a/reactos/tools/unicode/cpmap.pl +++ /dev/null @@ -1,1237 +0,0 @@ -#!/usr/bin/perl -# -# Generate code page .c files from ftp.unicode.org descriptions -# -# 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 -# - -# base directory for ftp.unicode.org files -$BASEDIR = "ftp.unicode.org/Public/"; -$MAPPREFIX = $BASEDIR . "MAPPINGS/"; - -# UnicodeData file -$UNICODEDATA = $BASEDIR . "UNIDATA/UnicodeData.txt"; - -# Sort keys file -$SORTKEYS = "www.unicode.org/reports/tr10/allkeys.txt"; - -# Defaults mapping -$DEFAULTS = "./defaults"; - -# Default char for undefined mappings -$DEF_CHAR = ord '?'; - -@allfiles = -( - [ 37, "VENDORS/MICSFT/EBCDIC/CP037.TXT", "IBM EBCDIC US Canada" ], - [ 424, "VENDORS/MISC/CP424.TXT", "IBM EBCDIC Hebrew" ], - [ 437, "VENDORS/MICSFT/PC/CP437.TXT", "OEM United States" ], - [ 500, "VENDORS/MICSFT/EBCDIC/CP500.TXT", "IBM EBCDIC International" ], - [ 737, "VENDORS/MICSFT/PC/CP737.TXT", "OEM Greek 437G" ], - [ 775, "VENDORS/MICSFT/PC/CP775.TXT", "OEM Baltic" ], - [ 850, "VENDORS/MICSFT/PC/CP850.TXT", "OEM Multilingual Latin 1" ], - [ 852, "VENDORS/MICSFT/PC/CP852.TXT", "OEM Slovak Latin 2" ], - [ 855, "VENDORS/MICSFT/PC/CP855.TXT", "OEM Cyrillic" ], - [ 856, "VENDORS/MISC/CP856.TXT", "Hebrew PC" ], - [ 857, "VENDORS/MICSFT/PC/CP857.TXT", "OEM Turkish" ], - [ 860, "VENDORS/MICSFT/PC/CP860.TXT", "OEM Portuguese" ], - [ 861, "VENDORS/MICSFT/PC/CP861.TXT", "OEM Icelandic" ], - [ 862, "VENDORS/MICSFT/PC/CP862.TXT", "OEM Hebrew" ], - [ 863, "VENDORS/MICSFT/PC/CP863.TXT", "OEM Canadian French" ], - [ 864, "VENDORS/MICSFT/PC/CP864.TXT", "OEM Arabic" ], - [ 865, "VENDORS/MICSFT/PC/CP865.TXT", "OEM Nordic" ], - [ 866, "VENDORS/MICSFT/PC/CP866.TXT", "OEM Russian" ], - [ 869, "VENDORS/MICSFT/PC/CP869.TXT", "OEM Greek" ], - [ 874, "VENDORS/MICSFT/PC/CP874.TXT", "ANSI/OEM Thai" ], - [ 875, "VENDORS/MICSFT/EBCDIC/CP875.TXT", "IBM EBCDIC Greek" ], - [ 878, "VENDORS/MISC/KOI8-R.TXT", "Russian KOI8" ], - [ 932, "VENDORS/MICSFT/WINDOWS/CP932.TXT", "ANSI/OEM Japanese Shift-JIS" ], - [ 936, "VENDORS/MICSFT/WINDOWS/CP936.TXT", "ANSI/OEM Simplified Chinese GBK" ], - [ 949, "VENDORS/MICSFT/WINDOWS/CP949.TXT", "ANSI/OEM Korean Unified Hangul" ], - [ 950, "VENDORS/MICSFT/WINDOWS/CP950.TXT", "ANSI/OEM Traditional Chinese Big5" ], - [ 1006, "VENDORS/MISC/CP1006.TXT", "IBM Arabic" ], - [ 1026, "VENDORS/MICSFT/EBCDIC/CP1026.TXT", "IBM EBCDIC Latin 5 Turkish" ], - [ 1250, "VENDORS/MICSFT/WINDOWS/CP1250.TXT", "ANSI Eastern Europe" ], - [ 1251, "VENDORS/MICSFT/WINDOWS/CP1251.TXT", "ANSI Cyrillic" ], - [ 1252, "VENDORS/MICSFT/WINDOWS/CP1252.TXT", "ANSI Latin 1" ], - [ 1253, "VENDORS/MICSFT/WINDOWS/CP1253.TXT", "ANSI Greek" ], - [ 1254, "VENDORS/MICSFT/WINDOWS/CP1254.TXT", "ANSI Turkish" ], - [ 1255, "VENDORS/MICSFT/WINDOWS/CP1255.TXT", "ANSI Hebrew" ], - [ 1256, "VENDORS/MICSFT/WINDOWS/CP1256.TXT", "ANSI Arabic" ], - [ 1257, "VENDORS/MICSFT/WINDOWS/CP1257.TXT", "ANSI Baltic" ], - [ 1258, "VENDORS/MICSFT/WINDOWS/CP1258.TXT", "ANSI/OEM Viet Nam" ], - [ 10000, "VENDORS/MICSFT/MAC/ROMAN.TXT", "Mac Roman" ], - [ 10006, "VENDORS/MICSFT/MAC/GREEK.TXT", "Mac Greek" ], - [ 10007, "VENDORS/MICSFT/MAC/CYRILLIC.TXT", "Mac Cyrillic" ], - [ 10029, "VENDORS/MICSFT/MAC/LATIN2.TXT", "Mac Latin 2" ], - [ 10079, "VENDORS/MICSFT/MAC/ICELAND.TXT", "Mac Icelandic" ], - [ 10081, "VENDORS/MICSFT/MAC/TURKISH.TXT", "Mac Turkish" ], - [ 20866, "VENDORS/MISC/KOI8-R.TXT", "Russian KOI8" ], - [ 20932, "OBSOLETE/EASTASIA/JIS/JIS0208.TXT", "EUC-JP" ], - [ 21866, "VENDORS/MISC/KOI8-U.TXT", "Ukrainian KOI8" ], - [ 28591, "ISO8859/8859-1.TXT", "ISO 8859-1 Latin 1" ], - [ 28592, "ISO8859/8859-2.TXT", "ISO 8859-2 Latin 2 (East European)" ], - [ 28593, "ISO8859/8859-3.TXT", "ISO 8859-3 Latin 3 (South European)" ], - [ 28594, "ISO8859/8859-4.TXT", "ISO 8859-4 Latin 4 (Baltic old)" ], - [ 28595, "ISO8859/8859-5.TXT", "ISO 8859-5 Cyrillic" ], - [ 28596, "ISO8859/8859-6.TXT", "ISO 8859-6 Arabic" ], - [ 28597, "ISO8859/8859-7.TXT", "ISO 8859-7 Greek" ], - [ 28598, "ISO8859/8859-8.TXT", "ISO 8859-8 Hebrew" ], - [ 28599, "ISO8859/8859-9.TXT", "ISO 8859-9 Latin 5 (Turkish)" ], - [ 28600, "ISO8859/8859-10.TXT", "ISO 8859-10 Latin 6 (Nordic)" ], - [ 28603, "ISO8859/8859-13.TXT", "ISO 8859-13 Latin 7 (Baltic)" ], - [ 28604, "ISO8859/8859-14.TXT", "ISO 8859-14 Latin 8 (Celtic)" ], - [ 28605, "ISO8859/8859-15.TXT", "ISO 8859-15 Latin 9 (Euro)" ], - [ 28606, "ISO8859/8859-16.TXT", "ISO 8859-16 Latin 10 (Balkan)" ] -); - - -%ctype = -( - "upper" => 0x0001, - "lower" => 0x0002, - "digit" => 0x0004, - "space" => 0x0008, - "punct" => 0x0010, - "cntrl" => 0x0020, - "blank" => 0x0040, - "xdigit" => 0x0080, - "alpha" => 0x0100 -); - -%categories = -( - "Lu" => $ctype{"alpha"}|$ctype{"upper"}, # Letter, Uppercase - "Ll" => $ctype{"alpha"}|$ctype{"lower"}, # Letter, Lowercase - "Lt" => $ctype{"alpha"}, # Letter, Titlecase - "Mn" => $ctype{"punct"}, # Mark, Non-Spacing - "Mc" => $ctype{"punct"}, # Mark, Spacing Combining - "Me" => $ctype{"punct"}, # Mark, Enclosing - "Nd" => $ctype{"digit"}, # Number, Decimal Digit - "Nl" => $ctype{"punct"}, # Number, Letter - "No" => $ctype{"punct"}, # Number, Other - "Zs" => $ctype{"space"}, # Separator, Space - "Zl" => $ctype{"space"}, # Separator, Line - "Zp" => $ctype{"space"}, # Separator, Paragraph - "Cc" => $ctype{"cntrl"}, # Other, Control - "Cf" => 0, # Other, Format - "Cs" => 0, # Other, Surrogate - "Co" => 0, # Other, Private Use - "Cn" => 0, # Other, Not Assigned - "Lm" => $ctype{"punct"}, # Letter, Modifier - "Lo" => $ctype{"alpha"}, # Letter, Other - "Pc" => $ctype{"punct"}, # Punctuation, Connector - "Pd" => $ctype{"punct"}, # Punctuation, Dash - "Ps" => $ctype{"punct"}, # Punctuation, Open - "Pe" => $ctype{"punct"}, # Punctuation, Close - "Pi" => $ctype{"punct"}, # Punctuation, Initial quote - "Pf" => $ctype{"punct"}, # Punctuation, Final quote - "Po" => $ctype{"punct"}, # Punctuation, Other - "Sm" => $ctype{"punct"}, # Symbol, Math - "Sc" => $ctype{"punct"}, # Symbol, Currency - "Sk" => $ctype{"punct"}, # Symbol, Modifier - "So" => $ctype{"punct"} # Symbol, Other -); - -# a few characters need additional categories that cannot be determined automatically -%special_categories = -( - "xdigit" => [ ord('0')..ord('9'),ord('A')..ord('F'),ord('a')..ord('f'), - 0xff10..0xff19, 0xff21..0xff26, 0xff41..0xff46 ], - "space" => [ 0x09..0x0d, 0x85 ], - "blank" => [ 0x09, 0x20, 0xa0, 0x3000, 0xfeff ], - "cntrl" => [ 0x070f, 0x180b, 0x180c, 0x180d, 0x180e, 0x200c, 0x200d, - 0x200e, 0x200f, 0x202a, 0x202b, 0x202c, 0x202d, 0x202e, - 0x206a, 0x206b, 0x206c, 0x206d, 0x206e, 0x206f, 0xfeff, - 0xfff9, 0xfffa, 0xfffb ] -); - -%directions = -( - "L" => 1, # Left-to-Right - "LRE" => 11, # Left-to-Right Embedding - "LRO" => 11, # Left-to-Right Override - "R" => 2, # Right-to-Left - "AL" => 2, # Right-to-Left Arabic - "RLE" => 11, # Right-to-Left Embedding - "RLO" => 11, # Right-to-Left Override - "PDF" => 11, # Pop Directional Format - "EN" => 3, # European Number - "ES" => 4, # European Number Separator - "ET" => 5, # European Number Terminator - "AN" => 6, # Arabic Number - "CS" => 7, # Common Number Separator - "NSM" => 0, # Non-Spacing Mark - "BN" => 0, # Boundary Neutral - "B" => 8, # Paragraph Separator - "S" => 9, # Segment Separator - "WS" => 10, # Whitespace - "ON" => 11 # Other Neutrals -); - - -################################################################ -# main routine - -READ_DEFAULTS(); -my @sortkeys = READ_SORTKEYS_FILE(); -DUMP_CASE_MAPPINGS(); -DUMP_SORTKEYS(@sortkeys); -DUMP_COMPOSE_TABLES(); -DUMP_CTYPE_TABLES(); - -foreach $file (@allfiles) { HANDLE_FILE( @$file ); } - -OUTPUT_CPTABLE(); - -exit(0); - - -################################################################ -# read in the defaults file -sub READ_DEFAULTS -{ - @unicode_defaults = (); - @unicode_aliases = (); - @tolower_table = (); - @toupper_table = (); - @digitmap_table = (); - @compatmap_table = (); - @category_table = (); - @direction_table = (); - @decomp_table = (); - @compose_table = (); - - # first setup a few default mappings - - open DEFAULTS or die "Cannot open $DEFAULTS"; - print "Loading $DEFAULTS\n"; - while () - { - next if /^\#/; # skip comments - next if /^$/; # skip empty lines - if (/^(([0-9a-fA-F]+)(,[0-9a-fA-F]+)*)\s+([0-9a-fA-F]+|'.'|none)\s+(\#.*)?/) - { - my @src = map hex, split /,/,$1; - my $dst = $4; - my $comment = $5; - if ($#src > 0) { push @unicode_aliases, \@src; } - next if ($dst eq "none"); - $dst = ($dst =~ /\'.\'/) ? ord substr($dst,1,1) : hex $dst; - foreach $src (@src) - { - die "Duplicate value" if defined($unicode_defaults[$src]); - $unicode_defaults[$src] = $dst; - } - next; - } - die "Unrecognized line $_\n"; - } - - # now build mappings from the decomposition field of the Unicode database - - open UNICODEDATA or die "Cannot open $UNICODEDATA"; - print "Loading $UNICODEDATA\n"; - while () - { - # Decode the fields ... - ($code, $name, $cat, $comb, $bidi, - $decomp, $dec, $dig, $num, $mirror, - $oldname, $comment, $upper, $lower, $title) = split /;/; - - my $src = hex $code; - - die "unknown category $cat" unless defined $categories{$cat}; - die "unknown directionality $bidi" unless defined $directions{$bidi}; - - $uniname[$src] = $name; - $category_table[$src] = $categories{$cat}; - $direction_table[$src] = $directions{$bidi}; - - if ($lower ne "") - { - $tolower_table[$src] = hex $lower; - $category_table[$src] |= $ctype{"upper"}|$ctype{"alpha"}; - } - if ($upper ne "") - { - $toupper_table[$src] = hex $upper; - $category_table[$src] |= $ctype{"lower"}|$ctype{"alpha"}; - } - if ($dec ne "") - { - $category_table[$src] |= $ctype{"digit"}; - } - if ($dig ne "") - { - $digitmap_table[$src] = ord $dig; - } - - # copy the category and direction for everything between First/Last pairs - if ($name =~ /, First>/) { $start = $src; } - if ($name =~ /, Last>/) - { - while ($start < $src) - { - $category_table[$start] = $category_table[$src]; - $direction_table[$start] = $direction_table[$src]; - $start++; - } - } - - next if $decomp eq ""; # no decomposition, skip it - - if ($decomp =~ /^<([a-zA-Z]+)>\s+([0-9a-fA-F]+)$/) - { - # decomposition of the form " 1234" -> use char if type is known - if (($src >= 0xf900 && $src < 0xfb00) || ($src >= 0xfe30 && $src < 0xfffd)) - { - # Single char decomposition in the compatibility range - $compatmap_table[$src] = hex $2; - } - next unless ($1 eq "font" || - $1 eq "noBreak" || - $1 eq "circle" || - $1 eq "super" || - $1 eq "sub" || - $1 eq "wide" || - $1 eq "narrow" || - $1 eq "compat" || - $1 eq "small"); - $dst = hex $2; - } - elsif ($decomp =~ /^\s+0020\s+([0-9a-fA-F]+)/) - { - # decomposition " 0020 1234" -> combining accent - $dst = hex $1; - } - elsif ($decomp =~ /^([0-9a-fA-F]+)/) - { - # decomposition contains only char values without prefix -> use first char - $dst = hex $1; - $category_table[$src] |= $category_table[$dst]; - # store decomposition if it contains two chars - if ($decomp =~ /^([0-9a-fA-F]+)\s+([0-9a-fA-F]+)$/) - { - $decomp_table[$src] = [ hex $1, hex $2 ]; - push @compose_table, [ hex $1, hex $2, $src ]; - } - elsif ($decomp =~ /^(<[a-z]+>\s)*([0-9a-fA-F]+)$/ && - (($src >= 0xf900 && $src < 0xfb00) || ($src >= 0xfe30 && $src < 0xfffd))) - { - # Single char decomposition in the compatibility range - $compatmap_table[$src] = hex $2; - } - } - else - { - next; - } - - next if defined($unicode_defaults[$src]); # may have been set in the defaults file - - # check for loops - for ($i = $dst; ; $i = $unicode_defaults[$i]) - { - die sprintf("loop detected for %04x -> %04x",$src,$dst) if $i == $src; - last unless defined($unicode_defaults[$i]); - } - $unicode_defaults[$src] = $dst; - } - - # patch the category of some special characters - - foreach $cat (keys %special_categories) - { - my $flag = $ctype{$cat}; - foreach $i (@{$special_categories{$cat}}) { $category_table[$i] |= $flag; } - } -} - - -################################################################ -# parse the input file -sub READ_FILE -{ - my $name = shift; - open INPUT,$name or die "Cannot open $name"; - @cp2uni = (); - @lead_bytes = (); - @uni2cp = (); - - while () - { - next if /^\#/; # skip comments - next if /^$/; # skip empty lines - next if /\x1a/; # skip ^Z - next if (/^0x([0-9a-fA-F]+)\s+\#UNDEFINED/); # undefined char - - if (/^0x([0-9a-fA-F]+)\s+\#DBCS LEAD BYTE/) - { - $cp = hex $1; - push @lead_bytes,$cp; - $cp2uni[$cp] = 0; - next; - } - if (/^0x([0-9a-fA-F]+)\s+0x([0-9a-fA-F]+)\s+(\#.*)?/) - { - $cp = hex $1; - $uni = hex $2; - $cp2uni[$cp] = $uni unless defined($cp2uni[$cp]); - $uni2cp[$uni] = $cp unless defined($uni2cp[$uni]); - next; - } - die "$name: Unrecognized line $_\n"; - } -} - - -################################################################ -# build EUC-JP table from the JIS 0208 file -# FIXME: for proper EUC-JP we should probably read JIS 0212 too -# but this would require 3-byte DBCS characters -sub READ_JIS0208_FILE -{ - my $name = shift; - @cp2uni = (); - @lead_bytes = (); - @uni2cp = (); - - # ASCII chars - for ($i = 0x00; $i <= 0x7f; $i++) - { - $cp2uni[$i] = $i; - $uni2cp[$i] = $i; - } - - # JIS X 0201 right plane - for ($i = 0xa1; $i <= 0xdf; $i++) - { - $cp2uni[0x8e00 + $i] = 0xfec0 + $i; - $uni2cp[0xfec0 + $i] = 0x8e00 + $i; - } - - # lead bytes - foreach $i (0x8e, 0x8f, 0xa1 .. 0xfe) - { - push @lead_bytes,$i; - $cp2uni[$i] = 0; - } - - # undefined chars - foreach $i (0x80 .. 0x8d, 0x90 .. 0xa0, 0xff) - { - $cp2uni[$i] = $DEF_CHAR; - } - - # Shift-JIS compatibility - $uni2cp[0x00a5] = 0x5c; - $uni2cp[0x203e] = 0x7e; - - # Fix backslash conversion - $cp2uni[0xa1c0] = 0xff3c; - $uni2cp[0xff3c] = 0xa1c0; - - open INPUT, "$name" or die "Cannot open $name"; - while () - { - next if /^\#/; # skip comments - next if /^$/; # skip empty lines - next if /\x1a/; # skip ^Z - if (/^0x[0-9a-fA-F]+\s+0x([0-9a-fA-F]+)\s+0x([0-9a-fA-F]+)\s+(\#.*)?/) - { - $cp = 0x8080 + hex $1; - $uni = hex $2; - $cp2uni[$cp] = $uni unless defined($cp2uni[$cp]); - $uni2cp[$uni] = $cp unless defined($uni2cp[$uni]); - next; - } - die "$name: Unrecognized line $_\n"; - } -} - - -################################################################ -# build the sort keys table -sub READ_SORTKEYS_FILE -{ - my @sortkeys = (); - for (my $i = 0; $i < 65536; $i++) { $sortkeys[$i] = [ -1, 0, 0, 0, 0 ] }; - - open INPUT, "$SORTKEYS" or die "Cannot open $SORTKEYS"; - print "Loading $SORTKEYS\n"; - while () - { - next if /^\#/; # skip comments - next if /^$/; # skip empty lines - next if /\x1a/; # skip ^Z - next if /^\@version/; # skip @version header - if (/^([0-9a-fA-F]+)\s+;\s+\[([*.])([0-9a-fA-F]{4})\.([0-9a-fA-F]{4})\.([0-9a-fA-F]{4})\.([0-9a-fA-F]+)\]/) - { - my ($uni,$variable) = (hex $1, $2); - next if $uni > 65535; - $sortkeys[$uni] = [ $uni, hex $3, hex $4, hex $5, hex $6 ]; - next; - } - if (/^([0-9a-fA-F]+\s+)+;\s+\[[*.]([0-9a-fA-F]{4})\.([0-9a-fA-F]{4})\.([0-9a-fA-F]{4})\.([0-9a-fA-F]+)\]/) - { - # multiple character sequence, ignored for now - next; - } - die "$SORTKEYS: Unrecognized line $_\n"; - } - close INPUT; - - # compress the keys to 32 bit: - # key 1 to 16 bits, key 2 to 8 bits, key 3 to 4 bits, key 4 to 1 bit - - @sortkeys = sort { ${$a}[1] <=> ${$b}[1] or - ${$a}[2] <=> ${$b}[2] or - ${$a}[3] <=> ${$b}[3] or - ${$a}[4] <=> ${$b}[4] or - $a cmp $b; } @sortkeys; - - my ($n2, $n3) = (1, 1); - my @keys = (-1, -1, -1, -1, -1 ); - my @flatkeys = (); - - for (my $i = 0; $i < 65536; $i++) - { - my @current = @{$sortkeys[$i]}; - next if $current[0] == -1; - if ($current[1] == $keys[1]) - { - if ($current[2] == $keys[2]) - { - if ($current[3] == $keys[3]) - { - # nothing - } - else - { - $keys[3] = $current[3]; - $n3++; - die if ($n3 >= 16); - } - } - else - { - $keys[2] = $current[2]; - $keys[3] = $current[3]; - $n2++; - $n3 = 1; - die if ($n2 >= 256); - } - } - else - { - $keys[1] = $current[1]; - $keys[2] = $current[2]; - $keys[3] = $current[3]; - $n2 = 1; - $n3 = 1; - } - - if ($current[2]) { $current[2] = $n2; } - if ($current[3]) { $current[3] = $n3; } - if ($current[4]) { $current[4] = 1; } - - $flatkeys[$current[0]] = ($current[1] << 16) | ($current[2] << 8) | ($current[3] << 4) | $current[4]; - } - return @flatkeys; -} - - -################################################################ -# build the sort keys table -sub DUMP_SORTKEYS -{ - my @keys = @_; - - # count the number of 256-key ranges that contain something - - my @offsets = (); - my $ranges = 2; - for (my $i = 0; $i < 256; $i++) { $offsets[$i] = 256; } - for (my $i = 0; $i < 65536; $i++) - { - next unless defined $keys[$i]; - $offsets[$i >> 8] = $ranges * 256; - $ranges++; - $i |= 255; - } - - # output the range offsets - - open OUTPUT,">collation.c.new" or die "Cannot create collation.c"; - printf "Building collation.c\n"; - printf OUTPUT "/* Unicode collation element table */\n"; - printf OUTPUT "/* generated from %s */\n", $SORTKEYS; - printf OUTPUT "/* DO NOT EDIT!! */\n\n"; - - printf OUTPUT "const unsigned int collation_table[%d] =\n{\n", $ranges*256; - printf OUTPUT " /* index */\n"; - printf OUTPUT "%s,\n", DUMP_ARRAY( "0x%08x", 0, @offsets ); - - # output the default values - - printf OUTPUT " /* defaults */\n"; - printf OUTPUT "%s", DUMP_ARRAY( "0x%08x", 0, (-1) x 256 ); - - # output all the key ranges - - for (my $i = 0; $i < 256; $i++) - { - next if $offsets[$i] == 256; - printf OUTPUT ",\n /* 0x%02x00 .. 0x%02xff */\n", $i, $i; - printf OUTPUT "%s", DUMP_ARRAY( "0x%08x", -1, @keys[($i<<8) .. ($i<<8)+255] ); - } - printf OUTPUT "\n};\n"; - close OUTPUT; - save_file("collation.c"); -} - - -################################################################ -# add default mappings once the file had been read -sub ADD_DEFAULT_MAPPINGS -{ - # Apply aliases - - foreach $alias (@unicode_aliases) - { - my $target = undef; - foreach $src (@$alias) - { - if (defined($uni2cp[$src])) - { - $target = $uni2cp[$src]; - last; - } - } - next unless defined($target); - - # At least one char of the alias set is defined, set the others to the same value - foreach $src (@$alias) - { - $uni2cp[$src] = $target unless defined($uni2cp[$src]); - } - } - - # For every src -> target mapping in the defaults table, - # make uni2cp[src] = uni2cp[target] if uni2cp[target] is defined - - for ($src = 0; $src < 65536; $src++) - { - next if defined($uni2cp[$src]); # source has a definition already - next unless defined($unicode_defaults[$src]); # no default for this char - my $target = $unicode_defaults[$src]; - - # do a recursive mapping until we find a target char that is defined - while (!defined($uni2cp[$target]) && - defined($unicode_defaults[$target])) { $target = $unicode_defaults[$target]; } - - if (defined($uni2cp[$target])) { $uni2cp[$src] = $uni2cp[$target]; } - } - - # Add an identity mapping for all undefined chars - - for ($i = 0; $i < 256; $i++) - { - next if defined($cp2uni[$i]); - next if defined($uni2cp[$i]); - $cp2uni[$i] = $uni2cp[$i] = $i; - } -} - -################################################################ -# dump an array of integers -sub DUMP_ARRAY -{ - my ($format,$default,@array) = @_; - my $i, $ret = " "; - for ($i = 0; $i < $#array; $i++) - { - $ret .= sprintf($format, defined $array[$i] ? $array[$i] : $default); - $ret .= (($i % 8) != 7) ? ", " : ",\n "; - } - $ret .= sprintf($format, defined $array[$i] ? $array[$i] : $default); - return $ret; -} - -################################################################ -# dump an SBCS mapping table -sub DUMP_SBCS_TABLE -{ - my ($codepage, $name) = @_; - my $i; - - # output the ascii->unicode table - - printf OUTPUT "static const WCHAR cp2uni[256] =\n"; - printf OUTPUT "{\n%s\n};\n\n", DUMP_ARRAY( "0x%04x", $DEF_CHAR, @cp2uni[0 .. 255] ); - - # count the number of unicode->ascii subtables that contain something - - my @filled = (); - my $subtables = 1; - for ($i = 0; $i < 65536; $i++) - { - next unless defined $uni2cp[$i]; - $filled[$i >> 8] = 1; - $subtables++; - $i |= 255; - } - - # output all the subtables into a single array - - printf OUTPUT "static const unsigned char uni2cp_low[%d] =\n{\n", $subtables*256; - for ($i = 0; $i < 256; $i++) - { - next unless $filled[$i]; - printf OUTPUT " /* 0x%02x00 .. 0x%02xff */\n", $i, $i; - printf OUTPUT "%s,\n", DUMP_ARRAY( "0x%02x", $DEF_CHAR, @uni2cp[($i<<8) .. ($i<<8)+255] ); - } - printf OUTPUT " /* defaults */\n"; - printf OUTPUT "%s\n};\n\n", DUMP_ARRAY( "0x%02x", 0, ($DEF_CHAR) x 256 ); - - # output a table of the offsets of the subtables in the previous array - - my $pos = 0; - my @offsets = (); - for ($i = 0; $i < 256; $i++) - { - if ($filled[$i]) { push @offsets, $pos; $pos += 256; } - else { push @offsets, ($subtables-1) * 256; } - } - printf OUTPUT "static const unsigned short uni2cp_high[256] =\n"; - printf OUTPUT "{\n%s\n};\n\n", DUMP_ARRAY( "0x%04x", 0, @offsets ); - - # output the code page descriptor - - printf OUTPUT "const struct sbcs_table cptable_%03d =\n{\n", $codepage; - printf OUTPUT " { %d, 1, 0x%04x, 0x%04x, \"%s\" },\n", - $codepage, $DEF_CHAR, $DEF_CHAR, $name; - printf OUTPUT " cp2uni,\n"; - printf OUTPUT " uni2cp_low,\n"; - printf OUTPUT " uni2cp_high\n};\n"; -} - - -################################################################ -# dump a DBCS mapping table -sub DUMP_DBCS_TABLE -{ - my ($codepage, $name) = @_; - my $i, $x, $y; - - # build a list of lead bytes that are actually used - - my @lblist = (); - LBLOOP: for ($y = 0; $y <= $#lead_bytes; $y++) - { - my $base = $lead_bytes[$y] << 8; - for ($x = 0; $x < 256; $x++) - { - if (defined $cp2uni[$base+$x]) - { - push @lblist,$lead_bytes[$y]; - next LBLOOP; - } - } - } - my $unused = ($#lead_bytes > $#lblist); - - # output the ascii->unicode table for the single byte chars - - printf OUTPUT "static const WCHAR cp2uni[%d] =\n", 256 * ($#lblist + 2 + $unused); - printf OUTPUT "{\n%s,\n", DUMP_ARRAY( "0x%04x", $DEF_CHAR, @cp2uni[0 .. 255] ); - - # output the default table for unused lead bytes - - if ($unused) - { - printf OUTPUT " /* unused lead bytes */\n"; - printf OUTPUT "%s,\n", DUMP_ARRAY( "0x%04x", 0, ($DEF_CHAR) x 256 ); - } - - # output the ascii->unicode table for each DBCS lead byte - - for ($y = 0; $y <= $#lblist; $y++) - { - my $base = $lblist[$y] << 8; - printf OUTPUT " /* lead byte %02x */\n", $lblist[$y]; - printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", $DEF_CHAR, @cp2uni[$base .. $base+255] ); - printf OUTPUT ($y < $#lblist) ? ",\n" : "\n};\n\n"; - } - - # output the lead byte subtables offsets - - my @offsets = (); - for ($x = 0; $x < 256; $x++) { $offsets[$x] = 0; } - for ($x = 0; $x <= $#lblist; $x++) { $offsets[$lblist[$x]] = $x + 1; } - if ($unused) - { - # increment all lead bytes offset to take into account the unused table - for ($x = 0; $x <= $#lead_bytes; $x++) { $offsets[$lead_bytes[$x]]++; } - } - printf OUTPUT "static const unsigned char cp2uni_leadbytes[256] =\n"; - printf OUTPUT "{\n%s\n};\n\n", DUMP_ARRAY( "0x%02x", 0, @offsets ); - - # count the number of unicode->ascii subtables that contain something - - my @filled = (); - my $subtables = 1; - for ($i = 0; $i < 65536; $i++) - { - next unless defined $uni2cp[$i]; - $filled[$i >> 8] = 1; - $subtables++; - $i |= 255; - } - - # output all the subtables into a single array - - printf OUTPUT "static const unsigned short uni2cp_low[%d] =\n{\n", $subtables*256; - for ($y = 0; $y < 256; $y++) - { - next unless $filled[$y]; - printf OUTPUT " /* 0x%02x00 .. 0x%02xff */\n", $y, $y; - printf OUTPUT "%s,\n", DUMP_ARRAY( "0x%04x", $DEF_CHAR, @uni2cp[($y<<8) .. ($y<<8)+255] ); - } - printf OUTPUT " /* defaults */\n"; - printf OUTPUT "%s\n};\n\n", DUMP_ARRAY( "0x%04x", 0, ($DEF_CHAR) x 256 ); - - # output a table of the offsets of the subtables in the previous array - - my $pos = 0; - my @offsets = (); - for ($y = 0; $y < 256; $y++) - { - if ($filled[$y]) { push @offsets, $pos; $pos += 256; } - else { push @offsets, ($subtables-1) * 256; } - } - printf OUTPUT "static const unsigned short uni2cp_high[256] =\n"; - printf OUTPUT "{\n%s\n};\n\n", DUMP_ARRAY( "0x%04x", 0, @offsets ); - - # output the code page descriptor - - printf OUTPUT "const struct dbcs_table cptable_%03d =\n{\n", $codepage; - printf OUTPUT " { %d, 2, 0x%04x, 0x%04x, \"%s\" },\n", - $codepage, $DEF_CHAR, $DEF_CHAR, $name; - printf OUTPUT " cp2uni,\n"; - printf OUTPUT " cp2uni_leadbytes,\n"; - printf OUTPUT " uni2cp_low,\n"; - printf OUTPUT " uni2cp_high,\n"; - DUMP_LB_RANGES(); - printf OUTPUT "};\n"; -} - - -################################################################ -# dump the list of defined lead byte ranges -sub DUMP_LB_RANGES -{ - my @list = (); - my $i = 0; - foreach $i (@lead_bytes) { $list[$i] = 1; } - my $on = 0; - printf OUTPUT " { "; - for ($i = 0; $i < 256; $i++) - { - if ($on) - { - if (!defined $list[$i]) { printf OUTPUT "0x%02x, ", $i-1; $on = 0; } - } - else - { - if ($list[$i]) { printf OUTPUT "0x%02x, ", $i; $on = 1; } - } - } - if ($on) { printf OUTPUT "0xff, "; } - printf OUTPUT "0x00, 0x00 }\n"; -} - - -################################################################ -# dump the case mapping tables -sub DUMP_CASE_MAPPINGS -{ - open OUTPUT,">casemap.c.new" or die "Cannot create casemap.c"; - printf "Building casemap.c\n"; - printf OUTPUT "/* Unicode case mappings */\n"; - printf OUTPUT "/* Automatically generated; DO NOT EDIT!! */\n\n"; - printf OUTPUT "#include \"wine/unicode.h\"\n\n"; - - DUMP_CASE_TABLE( "wine_casemap_lower", @tolower_table ); - DUMP_CASE_TABLE( "wine_casemap_upper", @toupper_table ); - DUMP_CASE_TABLE( "wine_digitmap", @digitmap_table ); - DUMP_CASE_TABLE( "wine_compatmap", @compatmap_table ); - close OUTPUT; - save_file("casemap.c"); -} - - -################################################################ -# dump a case mapping table -sub DUMP_CASE_TABLE -{ - my ($name,@table) = @_; - - # count the number of sub tables that contain something - # also compute the low and upper populated bounds - - my @lowerbounds = ( 0, 0 ); - my @upperbounds = ( 0, 255 ); - my $index = 0; - my @filled = (); - for ($i = 0; $i < 65536; $i++) - { - next unless defined $table[$i]; - if (!defined $filled[$i >> 8]) - { - $lowerbounds[$index] = $i & 0xff; - $upperbounds[$index] = 0xff - $lowerbounds[$index]; - $filled[$i >> 8] = $index * 256 + 512; - $index++; - } - else - { - $upperbounds[$index-1] = 0xff - ($i & 0xff); - } - $table[$i] = ($table[$i] - $i) & 0xffff; - } - - # Collapse blocks upwards if possible - my $removed = 0; - $index = 0; - for ($i = 0; $i < 256; $i++) - { - next unless defined $filled[$i]; - if ($upperbounds[$index - 1] > $lowerbounds[$index]) - { - $removed = $removed + $lowerbounds[$index]; - } - else - { - $removed = $removed + $upperbounds[$index - 1]; - $lowerbounds[$index] = $upperbounds[$index - 1]; - } - $filled[$i] = $filled[$i] - $removed; - $index++; - } - - # dump the table - - printf OUTPUT "const WCHAR %s[%d] =\n", $name, $index * 256 + 512 - $removed; - printf OUTPUT "{\n /* index */\n"; - printf OUTPUT "%s,\n", DUMP_ARRAY( "0x%04x", 256, @filled ); - printf OUTPUT " /* defaults */\n"; - printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, (0) x 256 ); - $index = 0; - for ($i = 0; $i < 256; $i++) - { - next unless $filled[$i]; - printf OUTPUT ",\n /* 0x%02x%02x .. 0x%02xff */\n", $i, $lowerbounds[$index], $i; - printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, - @table[($i<<8) + $lowerbounds[$index] .. ($i<<8)+255] ); - $index++; - } - printf OUTPUT "\n};\n"; -} - - -################################################################ -# dump the ctype tables -sub DUMP_CTYPE_TABLES -{ - open OUTPUT,">wctype.c.new" or die "Cannot create wctype.c"; - printf "Building wctype.c\n"; - printf OUTPUT "/* Unicode ctype tables */\n"; - printf OUTPUT "/* Automatically generated; DO NOT EDIT!! */\n\n"; - printf OUTPUT "#include \"wine/unicode.h\"\n\n"; - - my $i; - my @array = (0) x 256; - - # add the direction in the high 4 bits of the category - for ($i = 0; $i < 65536; $i++) - { - $category_table[$i] |= $direction_table[$i] << 12; - } - - # try to merge table rows - for ($row = 0; $row < 256; $row++) - { - my $rowtxt = sprintf "%04x" x 256, @category_table[($row<<8)..($row<<8)+255]; - if (defined($sequences{$rowtxt})) - { - # reuse an existing row - $array[$row] = $sequences{$rowtxt}; - } - else - { - # create a new row - $sequences{$rowtxt} = $array[$row] = $#array + 1; - push @array, @category_table[($row<<8)..($row<<8)+255]; - } - } - - printf OUTPUT "const unsigned short wine_wctype_table[%d] =\n{\n", $#array+1; - printf OUTPUT " /* offsets */\n%s,\n", DUMP_ARRAY( "0x%04x", 0, @array[0..255] ); - printf OUTPUT " /* values */\n%s\n};\n", DUMP_ARRAY( "0x%04x", 0, @array[256..$#array] ); - - close OUTPUT; - save_file("wctype.c"); -} - - -################################################################ -# dump the char composition tables -sub DUMP_COMPOSE_TABLES -{ - open OUTPUT,">compose.c.new" or die "Cannot create compose.c"; - printf "Building compose.c\n"; - printf OUTPUT "/* Unicode char composition */\n"; - printf OUTPUT "/* Automatically generated; DO NOT EDIT!! */\n\n"; - printf OUTPUT "#include \"wine/unicode.h\"\n\n"; - - ######### composition table - - my @filled = (); - foreach $i (@compose_table) - { - my @comp = @$i; - push @{$filled[$comp[1]]}, [ $comp[0], $comp[2] ]; - } - - # count how many different second chars we have - - for ($i = $count = 0; $i < 65536; $i++) - { - next unless defined $filled[$i]; - $count++; - } - - # build the table of second chars and offsets - - my $pos = $count + 1; - for ($i = 0; $i < 65536; $i++) - { - next unless defined $filled[$i]; - push @table, $i, $pos; - $pos += @{$filled[$i]}; - } - # terminator with last position - push @table, 0, $pos; - printf OUTPUT "const WCHAR unicode_compose_table[0x%x] =\n{\n", 2*$pos; - printf OUTPUT " /* second chars + offsets */\n%s", DUMP_ARRAY( "0x%04x", 0, @table ); - - # build the table of first chars and mappings - - for ($i = 0; $i < 65536; $i++) - { - next unless defined $filled[$i]; - my @table = (); - my @list = sort { $a->[0] <=> $b->[0] } @{$filled[$i]}; - for ($j = 0; $j <= $#list; $j++) - { - push @table, $list[$j][0], $list[$j][1]; - } - printf OUTPUT ",\n /* 0x%04x */\n%s", $i, DUMP_ARRAY( "0x%04x", 0, @table ); - } - printf OUTPUT "\n};\n\nconst unsigned int unicode_compose_table_size = %d;\n\n", $count; - - ######### decomposition table - - # first determine all the 16-char subsets that contain something - - my @filled = (0) x 4096; - my $pos = 16*2; # for the null subset - for ($i = 0; $i < 65536; $i++) - { - next unless defined $decomp_table[$i]; - $filled[$i >> 4] = $pos; - $pos += 16*2; - $i |= 15; - } - my $total = $pos; - - # now count the 256-char subsets that contain something - - my @filled_idx = (256) x 256; - $pos = 256 + 16; - for ($i = 0; $i < 4096; $i++) - { - next unless $filled[$i]; - $filled_idx[$i >> 4] = $pos; - $pos += 16; - $i |= 15; - } - my $null_offset = $pos; # null mapping - $total += $pos; - - # add the index offsets to the subsets positions - - for ($i = 0; $i < 4096; $i++) - { - next unless $filled[$i]; - $filled[$i] += $null_offset; - } - - # dump the main index - - printf OUTPUT "const WCHAR unicode_decompose_table[%d] =\n", $total; - printf OUTPUT "{\n /* index */\n"; - printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @filled_idx ); - printf OUTPUT ",\n /* null sub-index */\n%s", DUMP_ARRAY( "0x%04x", 0, ($null_offset) x 16 ); - - # dump the second-level indexes - - for ($i = 0; $i < 256; $i++) - { - next unless ($filled_idx[$i] > 256); - my @table = @filled[($i<<4)..($i<<4)+15]; - for ($j = 0; $j < 16; $j++) { $table[$j] ||= $null_offset; } - printf OUTPUT ",\n /* sub-index %02x */\n", $i; - printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @table ); - } - - # dump the 16-char subsets - - printf OUTPUT ",\n /* null mapping */\n"; - printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, (0) x 32 ); - - for ($i = 0; $i < 4096; $i++) - { - next unless $filled[$i]; - my @table = (0) x 32; - for ($j = 0; $j < 16; $j++) - { - if (defined $decomp_table[($i<<4) + $j]) - { - $table[2 * $j] = ${$decomp_table[($i << 4) + $j]}[0]; - $table[2 * $j + 1] = ${$decomp_table[($i << 4) + $j]}[1]; - } - } - printf OUTPUT ",\n /* 0x%03x0 .. 0x%03xf */\n", $i, $i; - printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @table ); - } - - printf OUTPUT "\n};\n"; - close OUTPUT; - save_file("compose.c"); -} - - -################################################################ -# read an input file and generate the corresponding .c file -sub HANDLE_FILE -{ - my ($codepage,$filename,$comment) = @_; - - # symbol codepage file is special - if ($codepage == 20932) { READ_JIS0208_FILE($MAPPREFIX . $filename); } - else { READ_FILE($MAPPREFIX . $filename); } - - # hack: 0x00a5 must map to backslash in Shift-JIS - if ($codepage == 932) { $uni2cp[0x00a5] = 0x5c; } - - ADD_DEFAULT_MAPPINGS(); - - my $output = sprintf "c_%03d.c", $codepage; - open OUTPUT,">$output.new" or die "Cannot create $output"; - - printf "Building %s from %s (%s)\n", $output, $filename, $comment; - - # dump all tables - - printf OUTPUT "/* code page %03d (%s) */\n", $codepage, $comment; - printf OUTPUT "/* generated from %s */\n", $MAPPREFIX . $filename; - printf OUTPUT "/* DO NOT EDIT!! */\n\n"; - printf OUTPUT "#include \"wine/unicode.h\"\n\n"; - - if ($#lead_bytes == -1) { DUMP_SBCS_TABLE( $codepage, $comment ); } - else { DUMP_DBCS_TABLE( $codepage, $comment ); } - close OUTPUT; - save_file($output); -} - - -################################################################ -# save a file if modified -sub save_file($) -{ - my $file = shift; - if (!system "cmp $file $file.new >/dev/null") - { - unlink "$file.new"; - } - else - { - rename "$file.new", "$file"; - } -} - - -################################################################ -# output the list of codepage tables into the cptable.c file -sub OUTPUT_CPTABLE -{ - @tables_decl = (); - - foreach $file (@allfiles) - { - my ($codepage,$filename,$comment) = @$file; - push @tables_decl, sprintf("extern union cptable cptable_%03d;\n",$codepage); - } - - push @tables_decl, sprintf("\nstatic const union cptable * const cptables[%d] =\n{\n",$#allfiles+1); - foreach $file (@allfiles) - { - my ($codepage,$filename,$comment) = @$file; - push @tables_decl, sprintf(" &cptable_%03d,\n", $codepage); - } - push @tables_decl, "};"; - REPLACE_IN_FILE( "cptable.c", @tables_decl ); -} - -################################################################ -# replace the contents of a file between ### cpmap ### marks - -sub REPLACE_IN_FILE -{ - my $name = shift; - my @data = @_; - my @lines = (); - open(FILE,$name) or die "Can't open $name"; - while () - { - push @lines, $_; - last if /\#\#\# cpmap begin \#\#\#/; - } - push @lines, @data; - while () - { - if (/\#\#\# cpmap end \#\#\#/) { push @lines, "\n", $_; last; } - } - push @lines, ; - open(FILE,">$name.new") or die "Can't modify $name"; - print FILE @lines; - close(FILE); - save_file($name); -} diff --git a/reactos/tools/unicode/cptable.c b/reactos/tools/unicode/cptable.c deleted file mode 100644 index 7e45f15e03d..00000000000 --- a/reactos/tools/unicode/cptable.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Codepage tables - * - * 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 "wine/unicode.h" - -/* Everything below this line is generated automatically by cpmap.pl */ -/* ### cpmap begin ### */ -extern union cptable cptable_037; -extern union cptable cptable_424; -extern union cptable cptable_437; -extern union cptable cptable_500; -extern union cptable cptable_737; -extern union cptable cptable_775; -extern union cptable cptable_850; -extern union cptable cptable_852; -extern union cptable cptable_855; -extern union cptable cptable_856; -extern union cptable cptable_857; -extern union cptable cptable_860; -extern union cptable cptable_861; -extern union cptable cptable_862; -extern union cptable cptable_863; -extern union cptable cptable_864; -extern union cptable cptable_865; -extern union cptable cptable_866; -extern union cptable cptable_869; -extern union cptable cptable_874; -extern union cptable cptable_875; -extern union cptable cptable_878; -extern union cptable cptable_932; -extern union cptable cptable_936; -extern union cptable cptable_949; -extern union cptable cptable_950; -extern union cptable cptable_1006; -extern union cptable cptable_1026; -extern union cptable cptable_1250; -extern union cptable cptable_1251; -extern union cptable cptable_1252; -extern union cptable cptable_1253; -extern union cptable cptable_1254; -extern union cptable cptable_1255; -extern union cptable cptable_1256; -extern union cptable cptable_1257; -extern union cptable cptable_1258; -extern union cptable cptable_10000; -extern union cptable cptable_10006; -extern union cptable cptable_10007; -extern union cptable cptable_10029; -extern union cptable cptable_10079; -extern union cptable cptable_10081; -extern union cptable cptable_20866; -extern union cptable cptable_20932; -extern union cptable cptable_21866; -extern union cptable cptable_28591; -extern union cptable cptable_28592; -extern union cptable cptable_28593; -extern union cptable cptable_28594; -extern union cptable cptable_28595; -extern union cptable cptable_28596; -extern union cptable cptable_28597; -extern union cptable cptable_28598; -extern union cptable cptable_28599; -extern union cptable cptable_28600; -extern union cptable cptable_28603; -extern union cptable cptable_28604; -extern union cptable cptable_28605; -extern union cptable cptable_28606; - -static const union cptable * const cptables[60] = -{ - &cptable_037, - &cptable_424, - &cptable_437, - &cptable_500, - &cptable_737, - &cptable_775, - &cptable_850, - &cptable_852, - &cptable_855, - &cptable_856, - &cptable_857, - &cptable_860, - &cptable_861, - &cptable_862, - &cptable_863, - &cptable_864, - &cptable_865, - &cptable_866, - &cptable_869, - &cptable_874, - &cptable_875, - &cptable_878, - &cptable_932, - &cptable_936, - &cptable_949, - &cptable_950, - &cptable_1006, - &cptable_1026, - &cptable_1250, - &cptable_1251, - &cptable_1252, - &cptable_1253, - &cptable_1254, - &cptable_1255, - &cptable_1256, - &cptable_1257, - &cptable_1258, - &cptable_10000, - &cptable_10006, - &cptable_10007, - &cptable_10029, - &cptable_10079, - &cptable_10081, - &cptable_20866, - &cptable_20932, - &cptable_21866, - &cptable_28591, - &cptable_28592, - &cptable_28593, - &cptable_28594, - &cptable_28595, - &cptable_28596, - &cptable_28597, - &cptable_28598, - &cptable_28599, - &cptable_28600, - &cptable_28603, - &cptable_28604, - &cptable_28605, - &cptable_28606, -}; -/* ### cpmap end ### */ -/* Everything above this line is generated automatically by cpmap.pl */ - -#define NB_CODEPAGES (sizeof(cptables)/sizeof(cptables[0])) - - -static int cmp_codepage( const void *codepage, const void *entry ) -{ - return *(const unsigned int *)codepage - (*(const union cptable *const *)entry)->info.codepage; -} - - -/* get the table of a given code page */ -const union cptable *wine_cp_get_table( unsigned int codepage ) -{ - const union cptable **res; - - if (!(res = bsearch( &codepage, cptables, NB_CODEPAGES, - sizeof(cptables[0]), cmp_codepage ))) return NULL; - return *res; -} - - -/* enum valid codepages */ -const union cptable *wine_cp_enum_table( unsigned int index ) -{ - if (index >= NB_CODEPAGES) return NULL; - return cptables[index]; -} diff --git a/reactos/tools/unicode/defaults b/reactos/tools/unicode/defaults deleted file mode 100644 index b823fb4c91b..00000000000 --- a/reactos/tools/unicode/defaults +++ /dev/null @@ -1,202 +0,0 @@ -# Default Unicode mappings -# -# 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 -# -# NOTES: -# -# This file contains default mappings for Unicode chars that aren't -# defined directly in the code page file. It is used by the cpmap.pl -# tool to build codepage tables. -# -# The first column defines equivalence sets; if any character in the set -# is defined in the codepage file, all others in the set will map to the -# same value. -# -# The second column specifies the default char to map the whole set to, -# if no characters in the set are defined by the codepage file. -# -# Characters that have an explicit decomposition in the UnicodeData.txt -# file (for instance 00c0 LATIN CAPITAL LETTER A WITH GRAVE -> 0041 0300) -# are handled automatically and do not have to be defined here. They can -# still be defined if necessary to override the unicode decomposition. -# - -# letters - -00a2,20a1 'c' # CENT SIGN, COLON SIGN -00a3,20a4 'L' # POUND SIGN, LIRA SIGN -00a5 'Y' # YEN SIGN -00a6 '|' # BROKEN BAR -00a9 'c' # COPYRIGHT SIGN -00ae 'r' # REGISTERED SIGN -00b5,03bc 'u' # MICRO SIGN, GREEK SMALL LETTER MU -00c6 'A' # LATIN CAPITAL LETTER AE -00d0,0110,0189 'D' # LATIN CAPITAL LETTER D WITH STROKE/AFRICAN D/ETH -00d7 'x' # MULTIPLICATION SIGN -00d8,2205 'O' # LATIN CAPITAL LETTER O WITH STROKE, EMPTY SET -00df,03b2 none # LATIN SMALL LETTER SHARP S, GREEK SMALL LETTER BETA -00e6 'a' # LATIN SMALL LETTER AE -00f0 'd' # LATIN SMALL LETTER ETH -00f8 'o' # LATIN SMALL LETTER O WITH STROKE -0111 'd' # LATIN SMALL LETTER D WITH STROKE -0126 'H' # LATIN CAPITAL LETTER H WITH STROKE -0127 'h' # LATIN SMALL LETTER H WITH STROKE -0131 'i' # LATIN SMALL LETTER DOTLESS I -0141 'L' # LATIN CAPITAL LETTER L WITH STROKE -0142 'l' # LATIN SMALL LETTER L WITH STROKE -0152 'O' # LATIN CAPITAL LIGATURE OE -0153 'o' # LATIN SMALL LIGATURE OE -0166 'T' # LATIN CAPITAL LETTER T WITH STROKE -0167 't' # LATIN SMALL LETTER T WITH STROKE -0180 'b' # LATIN SMALL LETTER B WITH STROKE -0190 'E' # LATIN CAPITAL LETTER OPEN E -0191 'F' # LATIN CAPITAL LETTER F WITH HOOK -0192 'f' # LATIN SMALL LETTER F WITH HOOK -0197 'I' # LATIN CAPITAL LETTER I WITH STROKE -019a 'l' # LATIN SMALL LETTER L WITH BAR -019f 'O' # LATIN CAPITAL LETTER O WITH MIDDLE TILDE -01ab 't' # LATIN SMALL LETTER T WITH PALATAL HOOK -01ae 'T' # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK -01b6 'z' # LATIN SMALL LETTER Z WITH STROKE -0391 'A' # GREEK CAPITAL LETTER ALPHA -0392 'B' # GREEK CAPITAL LETTER BETA -0395 'E' # GREEK CAPITAL LETTER EPSILON -0396 'Z' # GREEK CAPITAL LETTER ZETA -0397 'H' # GREEK CAPITAL LETTER ETA -0399 'I' # GREEK CAPITAL LETTER IOTA -039a 'K' # GREEK CAPITAL LETTER KAPPA -039c 'M' # GREEK CAPITAL LETTER MU -039d 'N' # GREEK CAPITAL LETTER NU -039f 'O' # GREEK CAPITAL LETTER OMICRON -03a1 'P' # GREEK CAPITAL LETTER RHO -03a4 'T' # GREEK CAPITAL LETTER TAU -03a5 'Y' # GREEK CAPITAL LETTER UPSILON -03a7 'X' # GREEK CAPITAL LETTER CHI -01e4 'G' # LATIN CAPITAL LETTER G WITH STROKE -01e5 'g' # LATIN SMALL LETTER G WITH STROKE -0261 'g' # LATIN SMALL LETTER SCRIPT G -2118 'P' # SCRIPT CAPITAL P -212e 'e' # ESTIMATED SYMBOL - -# accents - -00a8,0308 '"' # DIAERESIS -00af,02c9,0304 2014 # MACRON -> EM DASH -00b4,02b9,02ca,0301,2032 ''' # ACUTE ACCENT, PRIME -00b8,0327 ',' # CEDILLA -02ba,02dd,030b,2033 '"' # DOUBLE ACUTE ACCENT, DOUBLE PRIME -02c4,2303 '^' # UP ARROWHEAD -02c6,0302 '^' # CIRCUMFLEX ACCENT -02c7,030c 'v' # COMBINING CARON -> CARON -02c8 ''' # MODIFIER LETTER VERTICAL LINE -02cb,0300 '`' # GRAVE ACCENT -02cd,0331,0332 '_' # MODIFIER LETTER LOW MACRON, COMBINING MACRON BELOW, COMBINING LOW LINE -02d8,0306 none # BREVE -02d9,0307 none # DOT ABOVE -02da,030a,2070,2218 00b0 # RING ABOVE, SUPERSCRIPT ZERO, RING OPERATOR -> DEGREE SIGN -02db,0328 none # OGONEK -02dc,0303 '~' # SMALL TILDE -0305,203e 00af # OVERLINE -> MACRON -030e '"' # COMBINING DOUBLE VERTICAL LINE ABOVE -0333 '_' # COMBINING DOUBLE LOW LINE - -# mathematical symbols - -00b1,2213 none # PLUS-MINUS SIGN, MINUS-OR-PLUS SIGN -2044,2215 '/' # FRACTION/DIVISION SLASH -2216 '\' # SET MINUS -2217 '*' # ASTERISK OPERATOR -221a 'V' # SQUARE ROOT -221f 'L' # RIGHT ANGLE -2223 '|' # DIVIDES -2229 'n' # INTERSECTION -2236 ':' # RATIO -2248 02DC # ALMOST EQUAL TO -> SMALL TILDE -2261,2263 '=' # IDENTICAL TO, STRICTLY EQUIVALENT TO -226a 00ab # MUCH LESS-THAN -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -226b 00bb # MUCH GREATER-THAN -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -22c5 00b7 # DOT OPERATOR -> MIDDLE DOT - -# misc symbols - -00a1 '!' # INVERTED EXCLAMATION MARK -00ab,300a '<' # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, LEFT DOUBLE ANGLE BRACKET -00ad '-' # SOFT HYPHEN -00bb,300b '>' # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, RIGHT DOUBLE ANGLE BRACKET -01c0 2502 # LATIN LETTER DENTAL CLICK -> BOX DRAWINGS LIGHT VERTICAL -01c3 '!' # LATIN LETTER RETROFLEX CLICK -02bb 2018 # MODIFIER LETTER TURNED COMMA -> LEFT SINGLE QUOTATION MARK -02bc,2019 ''' # RIGHT SINGLE QUOTATION MARK -2010,2011,2212 '-' # HYPHEN, MINUS SIGN -2013,2014,2015 '-' # EN DASH, EM DASH, HORIZONTAL BAR, MINUS SIGN -2018,201b,2035 '`' # LEFT SINGLE QUOTATION MARK, SINGLE HIGH-REVERSED-9 QUOTATION MARK, REVERSED PRIME -201a ',' # SINGLE LOW-9 QUOTATION MARK -201c,301d '"' # LEFT DOUBLE QUOTATION MARK, REVERSED DOUBLE PRIME QUOTATION MARK -201d,301e '"' # RIGHT DOUBLE QUOTATION MARK, DOUBLE PRIME QUOTATION MARK -201e,301f ',' # LOW DOUBLE PRIME QUOTATION MARK, DOUBLE LOW-9 QUOTATION MARK -2022,2219 none # BULLET, BULLET OPERATOR -2039,3008 '<' # SINGLE LEFT-POINTING ANGLE QUOTATION MARK, LEFT ANGLE BRACKET -203a,3009 '>' # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK, RIGHT ANGLE BRACKET -203c '!' # DOUBLE EXCLAMATION MARK -2190 2039 # LEFTWARDS ARROW -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK -2191 02c6 # UPWARDS ARROW -> MODIFIER LETTER CIRCUMFLEX ACCENT -2192 203a # RIGHTWARDS ARROW -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -2193 02c7 # DOWNWARDS ARROW -> CARON -2194 '-' # LEFT RIGHT ARROW -2195 '|' # UP DOWN ARROW -223c '~' # TILDE -301a '[' # LEFT WHITE SQUARE BRACKET -301b ']' # RIGHT WHITE SQUARE BRACKET -fe49,fe4a,fe4b,fe4c 203e # DOUBLE WAVY OVERLINE -> OVERLINE -fe4d,fe4e,fe4f '_' # DASHED/CENTRELINE/WAVY LOW LINE - -# box drawing chars - -2500,2501 '-' # BOX DRAWINGS LIGHT/HEAVY HORIZONTAL -2502,2503 '|' # BOX DRAWINGS LIGHT/HEAVY VERTICAL -2504,2505 '-' # BOX DRAWINGS LIGHT/HEAVY TRIPLE DASH HORIZONTAL -2506,2507 00a6 # BOX DRAWINGS LIGHT/HEAVY TRIPLE DASH VERTICAL -> BROKEN BAR -2508,2509 '-' # BOX DRAWINGS LIGHT/HEAVY QUADRUPLE DASH HORIZONTAL -250a,250b 00a6 # BOX DRAWINGS LIGHT/HEAVY QUADRUPLE DASH VERTICAL -> BROKEN BAR -250c,250d,250e,250f '+' # BOX DRAWINGS LIGHT/HEAVY DOWN AND RIGHT -2510,2511,2512,2513 00ac # BOX DRAWINGS LIGHT/HEAVY DOWN AND LEFT -> NOT SIGN -2514,2515,2516,2517 'L' # BOX DRAWINGS LIGHT/HEAVY UP AND RIGHT -2518,2519,251a,251b '+' # BOX DRAWINGS LIGHT/HEAVY UP AND LEFT -251c,251d,251e,251f,2520,2521,2522,2523 '+' # BOX DRAWINGS LIGHT/HEAVY VERTICAL AND RIGHT -2524,2525,2526,2527,2528,2529,252a,252b '+' # BOX DRAWINGS LIGHT/HEAVY VERTICAL AND LEFT -252c,252d,252e,252f,2530,2531,2532,2533 'T' # BOX DRAWINGS LIGHT/HEAVY DOWN AND HORIZONTAL -2534,2535,2536,2537,2538,2539,253a,253b '+' # BOX DRAWINGS LIGHT/HEAVY UP AND HORIZONTAL -253c,253d,253e,253f,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,254a,254b '+' # BOX DRAWINGS LIGHT/HEAVY VERTICAL AND HORIZONTAL -254c,254d '-' # BOX DRAWINGS LIGHT/HEAVY DOUBLE DASH HORIZONTAL -254e,254f 00a6 # BOX DRAWINGS LIGHT/HEAVY DOUBLE DASH VERTICAL -> BROKEN BAR -2550 '=' # BOX DRAWINGS DOUBLE HORIZONTAL -2551 '|' # BOX DRAWINGS DOUBLE VERTICAL -2552,2553,2554 '+' # BOX DRAWINGS DOWN AND RIGHT -2555,2556,2557 00ac # BOX DRAWINGS DOWN AND LEFT -> NOT SIGN -2558,2559,255a 'L' # BOX DRAWINGS UP AND RIGHT -255b,255c,255d '+' # BOX DRAWINGS UP AND LEFT -255e,255f,2560 '+' # BOX DRAWINGS VERTICAL AND RIGHT -2561,2562,2563 '+' # BOX DRAWINGS VERTICAL AND LEFT -2564,2565,2566 'T' # BOX DRAWINGS DOWN AND HORIZONTAL -2567,2568,2569 '+' # BOX DRAWINGS UP AND HORIZONTAL -256a,256b,256c '+' # BOX DRAWINGS VERTICAL AND HORIZONTAL -2571 '/' # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT -2572 '\' # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT -2573 'X' # BOX DRAWINGS LIGHT DIAGONAL CROSS -2574,2576,2578,257a,257c,257e '-' # BOX DRAWINGS LIGHT/HEAVY LEFT/RIGHT -2575,2577,2579,257b,257d,257f '|' # BOX DRAWINGS LIGHT/HEAVY UP/DOWN -25cb,25ef 'O' # WHITE/LARGE CIRCLE diff --git a/reactos/tools/unicode/fold.c b/reactos/tools/unicode/fold.c deleted file mode 100644 index 87a4a418faa..00000000000 --- a/reactos/tools/unicode/fold.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * String folding - * - * 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 "wine/unicode.h" - -static inline WCHAR to_unicode_digit( WCHAR ch ) -{ - extern const WCHAR wine_digitmap[]; - return ch + wine_digitmap[wine_digitmap[ch >> 8] + (ch & 0xff)]; -} - -static inline WCHAR to_unicode_native( WCHAR ch ) -{ - extern const WCHAR wine_compatmap[]; - return ch + wine_compatmap[wine_compatmap[ch >> 8] + (ch & 0xff)]; -} - -static const WCHAR wine_ligatures[] = -{ - 0x00c6, 0x00de, 0x00df, 0x00e6, 0x00fe, 0x0132, 0x0133, 0x0152, - 0x0153, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01c8, 0x01c9, 0x01ca, - 0x01cb, 0x01cc, 0x01e2, 0x01e3, 0x01f1, 0x01f2, 0x01f3, 0x01fc, - 0x01fd, 0x05f0, 0x05f1, 0x05f2, 0xfb00, 0xfb01, 0xfb02, 0xfb03, - 0xfb04, 0xfb05, 0xfb06 -}; - -/* Unicode expanded ligatures */ -static const WCHAR wine_expanded_ligatures[][4] = -{ - { 'A','E','\0',1 }, - { 'T','H','\0',1 }, - { 's','s','\0',1 }, - { 'a','e','\0',1 }, - { 't','h','\0',1 }, - { 'I','J','\0',1 }, - { 'i','j','\0',1 }, - { 'O','E','\0',1 }, - { 'o','e','\0',1 }, - { 'D',0x017d,'\0',1 }, - { 'D',0x017e,'\0',1 }, - { 'd',0x017e,'\0',1 }, - { 'L','J','\0',1 }, - { 'L','j','\0',1 }, - { 'l','j','\0',1 }, - { 'N','J','\0',1 }, - { 'N','j','\0',1 }, - { 'n','j','\0',1 }, - { 0x0100,0x0112,'\0',1 }, - { 0x0101,0x0113,'\0',1 }, - { 'D','Z','\0',1 }, - { 'D','z','\0',1 }, - { 'd','z','\0',1 }, - { 0x00c1,0x00c9,'\0',1 }, - { 0x00e1,0x00e9,'\0',1 }, - { 0x05d5,0x05d5,'\0',1 }, - { 0x05d5,0x05d9,'\0',1 }, - { 0x05d9,0x05d9,'\0',1 }, - { 'f','f','\0',1 }, - { 'f','i','\0',1 }, - { 'f','l','\0',1 }, - { 'f','f','i',2 }, - { 'f','f','l',2 }, - { 0x017f,'t','\0',1 }, - { 's','t','\0',1 } -}; - -static inline int get_ligature_len( WCHAR wc ) -{ - int low = 0, high = sizeof(wine_ligatures)/sizeof(WCHAR) -1; - while (low <= high) - { - int pos = (low + high) / 2; - if (wine_ligatures[pos] < wc) - low = pos + 1; - else if (wine_ligatures[pos] > wc) - high = pos - 1; - else - return wine_expanded_ligatures[pos][3]; - } - return 0; -} - -static inline const WCHAR* get_ligature( WCHAR wc ) -{ - static const WCHAR empty_ligature[] = { '\0','\0','\0', 0 }; - int low = 0, high = sizeof(wine_ligatures)/sizeof(WCHAR) -1; - while (low <= high) - { - int pos = (low + high) / 2; - if (wine_ligatures[pos] < wc) - low = pos + 1; - else if (wine_ligatures[pos] > wc) - high = pos - 1; - else - return wine_expanded_ligatures[pos]; - } - return empty_ligature; -} - -/* fold a unicode string */ -int wine_fold_string( int flags, const WCHAR *src, int srclen, WCHAR *dst, int dstlen ) -{ - WCHAR *dstbase = dst; - const WCHAR *expand; - int i; - - if (srclen == -1) - srclen = strlenW(src) + 1; /* Include terminating NUL in count */ - - if (!dstlen) - { - /* Calculate the required size for dst */ - dstlen = srclen; - - if (flags & MAP_EXPAND_LIGATURES) - { - while (srclen--) - { - dstlen += get_ligature_len(*src); - src++; - } - } - else if (flags & MAP_COMPOSITE) - { - /* FIXME */ - } - else if (flags & MAP_PRECOMPOSED) - { - /* FIXME */ - } - return dstlen; - } - - if (srclen > dstlen) - return 0; - - dstlen -= srclen; - - /* Actually perform the mapping(s) specified */ - for (i = 0; i < srclen; i++) - { - WCHAR ch = *src; - - if (flags & MAP_EXPAND_LIGATURES) - { - expand = get_ligature(ch); - if (expand[0]) - { - if (!dstlen--) - return 0; - dst[0] = expand[0]; - if (expand[2]) - { - if (!dstlen--) - return 0; - *++dst = expand[1]; - ch = expand[2]; - } - else - ch = expand[1]; - dst++; - } - } - else if (flags & MAP_COMPOSITE) - { - /* FIXME */ - } - else if (flags & MAP_PRECOMPOSED) - { - /* FIXME */ - } - if (flags & MAP_FOLDDIGITS) - ch = to_unicode_digit(ch); - if (flags & MAP_FOLDCZONE) - ch = to_unicode_native(ch); - - *dst++ = ch; - src++; - } - return dst - dstbase; -} diff --git a/reactos/tools/unicode/mbtowc.c b/reactos/tools/unicode/mbtowc.c deleted file mode 100644 index c0e5791ccfb..00000000000 --- a/reactos/tools/unicode/mbtowc.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * MultiByteToWideChar implementation - * - * 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 "wine/unicode.h" - -/* get the decomposition of a Unicode char */ -static int get_decomposition( WCHAR src, WCHAR *dst, unsigned int dstlen ) -{ - extern const WCHAR unicode_decompose_table[]; - const WCHAR *ptr = unicode_decompose_table; - int res; - - *dst = src; - ptr = unicode_decompose_table + ptr[src >> 8]; - ptr = unicode_decompose_table + ptr[(src >> 4) & 0x0f] + 2 * (src & 0x0f); - if (!*ptr) return 1; - if (dstlen <= 1) return 0; - /* apply the decomposition recursively to the first char */ - if ((res = get_decomposition( *ptr, dst, dstlen-1 ))) dst[res++] = ptr[1]; - return res; -} - -/* check src string for invalid chars; return non-zero if invalid char found */ -static inline int check_invalid_chars_sbcs( const struct sbcs_table *table, - const unsigned char *src, unsigned int srclen ) -{ - const WCHAR * const cp2uni = table->cp2uni; - while (srclen) - { - if (cp2uni[*src] == table->info.def_unicode_char && *src != table->info.def_char) - break; - src++; - srclen--; - } - return srclen; -} - -/* mbstowcs for single-byte code page */ -/* all lengths are in characters, not bytes */ -static inline int mbstowcs_sbcs( const struct sbcs_table *table, - const unsigned char *src, unsigned int srclen, - WCHAR *dst, unsigned int dstlen ) -{ - const WCHAR * const cp2uni = table->cp2uni; - int ret = srclen; - - if (dstlen < srclen) - { - /* buffer too small: fill it up to dstlen and return error */ - srclen = dstlen; - ret = -1; - } - - for (;;) - { - switch(srclen) - { - default: - case 16: dst[15] = cp2uni[src[15]]; - case 15: dst[14] = cp2uni[src[14]]; - case 14: dst[13] = cp2uni[src[13]]; - case 13: dst[12] = cp2uni[src[12]]; - case 12: dst[11] = cp2uni[src[11]]; - case 11: dst[10] = cp2uni[src[10]]; - case 10: dst[9] = cp2uni[src[9]]; - case 9: dst[8] = cp2uni[src[8]]; - case 8: dst[7] = cp2uni[src[7]]; - case 7: dst[6] = cp2uni[src[6]]; - case 6: dst[5] = cp2uni[src[5]]; - case 5: dst[4] = cp2uni[src[4]]; - case 4: dst[3] = cp2uni[src[3]]; - case 3: dst[2] = cp2uni[src[2]]; - case 2: dst[1] = cp2uni[src[1]]; - case 1: dst[0] = cp2uni[src[0]]; - case 0: break; - } - if (srclen < 16) return ret; - dst += 16; - src += 16; - srclen -= 16; - } -} - -/* mbstowcs for single-byte code page with char decomposition */ -static int mbstowcs_sbcs_decompose( const struct sbcs_table *table, - const unsigned char *src, unsigned int srclen, - WCHAR *dst, unsigned int dstlen ) -{ - const WCHAR * const cp2uni = table->cp2uni; - unsigned int len; - - if (!dstlen) /* compute length */ - { - WCHAR dummy[4]; /* no decomposition is larger than 4 chars */ - for (len = 0; srclen; srclen--, src++) - len += get_decomposition( cp2uni[*src], dummy, 4 ); - return len; - } - - for (len = dstlen; srclen && len; srclen--, src++) - { - int res = get_decomposition( cp2uni[*src], dst, len ); - if (!res) break; - len -= res; - dst += res; - } - if (srclen) return -1; /* overflow */ - return dstlen - len; -} - -/* query necessary dst length for src string */ -static inline int get_length_dbcs( const struct dbcs_table *table, - const unsigned char *src, unsigned int srclen ) -{ - const unsigned char * const cp2uni_lb = table->cp2uni_leadbytes; - int len; - - for (len = 0; srclen; srclen--, src++, len++) - { - if (cp2uni_lb[*src]) - { - if (!--srclen) break; /* partial char, ignore it */ - src++; - } - } - return len; -} - -/* check src string for invalid chars; return non-zero if invalid char found */ -static inline int check_invalid_chars_dbcs( const struct dbcs_table *table, - const unsigned char *src, unsigned int srclen ) -{ - const WCHAR * const cp2uni = table->cp2uni; - const unsigned char * const cp2uni_lb = table->cp2uni_leadbytes; - - while (srclen) - { - unsigned char off = cp2uni_lb[*src]; - if (off) /* multi-byte char */ - { - if (srclen == 1) break; /* partial char, error */ - if (cp2uni[(off << 8) + src[1]] == table->info.def_unicode_char && - ((src[0] << 8) | src[1]) != table->info.def_char) break; - src++; - srclen--; - } - else if (cp2uni[*src] == table->info.def_unicode_char && - *src != table->info.def_char) break; - src++; - srclen--; - } - return srclen; -} - -/* mbstowcs for double-byte code page */ -/* all lengths are in characters, not bytes */ -static inline int mbstowcs_dbcs( const struct dbcs_table *table, - const unsigned char *src, unsigned int srclen, - WCHAR *dst, unsigned int dstlen ) -{ - const WCHAR * const cp2uni = table->cp2uni; - const unsigned char * const cp2uni_lb = table->cp2uni_leadbytes; - unsigned int len; - - if (!dstlen) return get_length_dbcs( table, src, srclen ); - - for (len = dstlen; srclen && len; len--, srclen--, src++, dst++) - { - unsigned char off = cp2uni_lb[*src]; - if (off) - { - if (!--srclen) break; /* partial char, ignore it */ - src++; - *dst = cp2uni[(off << 8) + *src]; - } - else *dst = cp2uni[*src]; - } - if (srclen) return -1; /* overflow */ - return dstlen - len; -} - - -/* mbstowcs for double-byte code page with character decomposition */ -static int mbstowcs_dbcs_decompose( const struct dbcs_table *table, - const unsigned char *src, unsigned int srclen, - WCHAR *dst, unsigned int dstlen ) -{ - const WCHAR * const cp2uni = table->cp2uni; - const unsigned char * const cp2uni_lb = table->cp2uni_leadbytes; - unsigned int len; - WCHAR ch; - int res; - - if (!dstlen) /* compute length */ - { - WCHAR dummy[4]; /* no decomposition is larger than 4 chars */ - for (len = 0; srclen; srclen--, src++) - { - unsigned char off = cp2uni_lb[*src]; - if (off) - { - if (!--srclen) break; /* partial char, ignore it */ - src++; - ch = cp2uni[(off << 8) + *src]; - } - else ch = cp2uni[*src]; - len += get_decomposition( ch, dummy, 4 ); - } - return len; - } - - for (len = dstlen; srclen && len; srclen--, src++) - { - unsigned char off = cp2uni_lb[*src]; - if (off) - { - if (!--srclen) break; /* partial char, ignore it */ - src++; - ch = cp2uni[(off << 8) + *src]; - } - else ch = cp2uni[*src]; - if (!(res = get_decomposition( ch, dst, len ))) break; - dst += res; - len -= res; - } - if (srclen) return -1; /* overflow */ - return dstlen - len; -} - - -/* return -1 on dst buffer overflow, -2 on invalid input char */ -int wine_cp_mbstowcs( const union cptable *table, int flags, - const char *s, int srclen, - WCHAR *dst, int dstlen ) -{ - const unsigned char *src = (const unsigned char*) s; - - if (table->info.char_size == 1) - { - if (flags & MB_ERR_INVALID_CHARS) - { - if (check_invalid_chars_sbcs( &table->sbcs, src, srclen )) return -2; - } - if (!(flags & MB_COMPOSITE)) - { - if (!dstlen) return srclen; - return mbstowcs_sbcs( &table->sbcs, src, srclen, dst, dstlen ); - } - return mbstowcs_sbcs_decompose( &table->sbcs, src, srclen, dst, dstlen ); - } - else /* mbcs */ - { - if (flags & MB_ERR_INVALID_CHARS) - { - if (check_invalid_chars_dbcs( &table->dbcs, src, srclen )) return -2; - } - if (!(flags & MB_COMPOSITE)) - return mbstowcs_dbcs( &table->dbcs, src, srclen, dst, dstlen ); - else - return mbstowcs_dbcs_decompose( &table->dbcs, src, srclen, dst, dstlen ); - } -} - -/* CP_SYMBOL implementation */ -/* return -1 on dst buffer overflow */ -int wine_cpsymbol_mbstowcs( const char *src, int srclen, WCHAR *dst, int dstlen) -{ - int len, i; - if( dstlen == 0) return srclen; - len = dstlen > srclen ? srclen : dstlen; - for( i = 0; i < len; i++) - { - unsigned char c = src [ i ]; - if( c < 0x20 ) - dst[i] = c; - else - dst[i] = c + 0xf000; - } - if( srclen > len) return -1; - return len; -} diff --git a/reactos/tools/unicode/sortkey.c b/reactos/tools/unicode/sortkey.c deleted file mode 100644 index 67c2e8d476b..00000000000 --- a/reactos/tools/unicode/sortkey.c +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Unicode sort key generation - * - * Copyright 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/unicode.h" - -extern int get_decomposition(WCHAR src, WCHAR *dst, unsigned int dstlen); -extern const unsigned int collation_table[]; - -/* - * flags - normalization NORM_* flags - * - * FIXME: 'variable' flag not handled - */ -int wine_get_sortkey(int flags, const WCHAR *src, int srclen, char *dst, int dstlen) -{ - WCHAR dummy[4]; /* no decomposition is larger than 4 chars */ - int key_len[4]; - char *key_ptr[4]; - const WCHAR *src_save = src; - int srclen_save = srclen; - - key_len[0] = key_len[1] = key_len[2] = key_len[3] = 0; - for (; srclen; srclen--, src++) - { - int decomposed_len = 1;/*get_decomposition(*src, dummy, 4);*/ - dummy[0] = *src; - if (decomposed_len) - { - int i; - for (i = 0; i < decomposed_len; i++) - { - WCHAR wch = dummy[i]; - unsigned int ce; - - /* tests show that win2k just ignores NORM_IGNORENONSPACE, - * and skips white space and punctuation characters for - * NORM_IGNORESYMBOLS. - */ - if ((flags & NORM_IGNORESYMBOLS) && (get_char_typeW(wch) & (C1_PUNCT | C1_SPACE))) - continue; - - if (flags & NORM_IGNORECASE) wch = tolowerW(wch); - - ce = collation_table[collation_table[wch >> 8] + (wch & 0xff)]; - if (ce != (unsigned int)-1) - { - if (ce >> 16) key_len[0] += 2; - if ((ce >> 8) & 0xff) key_len[1]++; - if ((ce >> 4) & 0x0f) key_len[2]++; - if (ce & 1) - { - if (wch >> 8) key_len[3]++; - key_len[3]++; - } - } - else - { - key_len[0] += 2; - if (wch >> 8) key_len[0]++; - if (wch & 0xff) key_len[0]++; - } - } - } - } - - if (!dstlen) /* compute length */ - /* 4 * '\1' + 1 * '\0' + key length */ - return key_len[0] + key_len[1] + key_len[2] + key_len[3] + 4 + 1; - - if (dstlen < key_len[0] + key_len[1] + key_len[2] + key_len[3] + 4 + 1) - return 0; /* overflow */ - - src = src_save; - srclen = srclen_save; - - key_ptr[0] = dst; - key_ptr[1] = key_ptr[0] + key_len[0] + 1; - key_ptr[2] = key_ptr[1] + key_len[1] + 1; - key_ptr[3] = key_ptr[2] + key_len[2] + 1; - - for (; srclen; srclen--, src++) - { - int decomposed_len = 1;/*get_decomposition(*src, dummy, 4);*/ - dummy[0] = *src; - if (decomposed_len) - { - int i; - for (i = 0; i < decomposed_len; i++) - { - WCHAR wch = dummy[i]; - unsigned int ce; - - /* tests show that win2k just ignores NORM_IGNORENONSPACE, - * and skips white space and punctuation characters for - * NORM_IGNORESYMBOLS. - */ - if ((flags & NORM_IGNORESYMBOLS) && (get_char_typeW(wch) & (C1_PUNCT | C1_SPACE))) - continue; - - if (flags & NORM_IGNORECASE) wch = tolowerW(wch); - - ce = collation_table[collation_table[wch >> 8] + (wch & 0xff)]; - if (ce != (unsigned int)-1) - { - WCHAR key; - if ((key = ce >> 16)) - { - *key_ptr[0]++ = key >> 8; - *key_ptr[0]++ = key & 0xff; - } - /* make key 1 start from 2 */ - if ((key = (ce >> 8) & 0xff)) *key_ptr[1]++ = key + 1; - /* make key 2 start from 2 */ - if ((key = (ce >> 4) & 0x0f)) *key_ptr[2]++ = key + 1; - /* key 3 is always a character code */ - if (ce & 1) - { - if (wch >> 8) *key_ptr[3]++ = wch >> 8; - if (wch & 0xff) *key_ptr[3]++ = wch & 0xff; - } - } - else - { - *key_ptr[0]++ = 0xff; - *key_ptr[0]++ = 0xfe; - if (wch >> 8) *key_ptr[0]++ = wch >> 8; - if (wch & 0xff) *key_ptr[0]++ = wch & 0xff; - } - } - } - } - - *key_ptr[0] = '\1'; - *key_ptr[1] = '\1'; - *key_ptr[2] = '\1'; - *key_ptr[3]++ = '\1'; - *key_ptr[3] = 0; - - return key_ptr[3] - dst; -} - -static inline int compare_unicode_weights(int flags, const WCHAR *str1, int len1, - const WCHAR *str2, int len2) -{ - unsigned int ce1, ce2; - int ret; - - /* 32-bit collation element table format: - * unicode weight - high 16 bit, diacritic weight - high 8 bit of low 16 bit, - * case weight - high 4 bit of low 8 bit. - */ - while (len1 > 0 && len2 > 0) - { - if (flags & NORM_IGNORESYMBOLS) - { - int skip = 0; - /* FIXME: not tested */ - if (get_char_typeW(*str1) & (C1_PUNCT | C1_SPACE)) - { - str1++; - len1--; - skip = 1; - } - if (get_char_typeW(*str2) & (C1_PUNCT | C1_SPACE)) - { - str2++; - len2--; - skip = 1; - } - if (skip) continue; - } - - /* hyphen and apostrophe are treated differently depending on - * whether SORT_STRINGSORT specified or not - */ - if (!(flags & SORT_STRINGSORT)) - { - if (*str1 == '-' || *str1 == '\'') - { - if (*str2 != '-' && *str2 != '\'') - { - str1++; - len1--; - continue; - } - } - else if (*str2 == '-' || *str2 == '\'') - { - str2++; - len2--; - continue; - } - } - - ce1 = collation_table[collation_table[*str1 >> 8] + (*str1 & 0xff)]; - ce2 = collation_table[collation_table[*str2 >> 8] + (*str2 & 0xff)]; - - if (ce1 != (unsigned int)-1 && ce2 != (unsigned int)-1) - ret = (ce1 >> 16) - (ce2 >> 16); - else - ret = *str1 - *str2; - - if (ret) return ret; - - str1++; - str2++; - len1--; - len2--; - } - return len1 - len2; -} - -static inline int compare_diacritic_weights(int flags, const WCHAR *str1, int len1, - const WCHAR *str2, int len2) -{ - unsigned int ce1, ce2; - int ret; - - /* 32-bit collation element table format: - * unicode weight - high 16 bit, diacritic weight - high 8 bit of low 16 bit, - * case weight - high 4 bit of low 8 bit. - */ - while (len1 > 0 && len2 > 0) - { - if (flags & NORM_IGNORESYMBOLS) - { - int skip = 0; - /* FIXME: not tested */ - if (get_char_typeW(*str1) & (C1_PUNCT | C1_SPACE)) - { - str1++; - len1--; - skip = 1; - } - if (get_char_typeW(*str2) & (C1_PUNCT | C1_SPACE)) - { - str2++; - len2--; - skip = 1; - } - if (skip) continue; - } - - ce1 = collation_table[collation_table[*str1 >> 8] + (*str1 & 0xff)]; - ce2 = collation_table[collation_table[*str2 >> 8] + (*str2 & 0xff)]; - - if (ce1 != (unsigned int)-1 && ce2 != (unsigned int)-1) - ret = ((ce1 >> 8) & 0xff) - ((ce2 >> 8) & 0xff); - else - ret = *str1 - *str2; - - if (ret) return ret; - - str1++; - str2++; - len1--; - len2--; - } - return len1 - len2; -} - -static inline int compare_case_weights(int flags, const WCHAR *str1, int len1, - const WCHAR *str2, int len2) -{ - unsigned int ce1, ce2; - int ret; - - /* 32-bit collation element table format: - * unicode weight - high 16 bit, diacritic weight - high 8 bit of low 16 bit, - * case weight - high 4 bit of low 8 bit. - */ - while (len1 > 0 && len2 > 0) - { - if (flags & NORM_IGNORESYMBOLS) - { - int skip = 0; - /* FIXME: not tested */ - if (get_char_typeW(*str1) & (C1_PUNCT | C1_SPACE)) - { - str1++; - len1--; - skip = 1; - } - if (get_char_typeW(*str2) & (C1_PUNCT | C1_SPACE)) - { - str2++; - len2--; - skip = 1; - } - if (skip) continue; - } - - ce1 = collation_table[collation_table[*str1 >> 8] + (*str1 & 0xff)]; - ce2 = collation_table[collation_table[*str2 >> 8] + (*str2 & 0xff)]; - - if (ce1 != (unsigned int)-1 && ce2 != (unsigned int)-1) - ret = ((ce1 >> 4) & 0x0f) - ((ce2 >> 4) & 0x0f); - else - ret = *str1 - *str2; - - if (ret) return ret; - - str1++; - str2++; - len1--; - len2--; - } - return len1 - len2; -} - -static inline int real_length(const WCHAR *str, int len) -{ - int real_len = 0; - while (len-- && *str++) real_len++; - return real_len; -} - -int wine_compare_string(int flags, const WCHAR *str1, int len1, - const WCHAR *str2, int len2) -{ - int ret; - - len1 = real_length(str1, len1); - len2 = real_length(str2, len2); - - ret = compare_unicode_weights(flags, str1, len1, str2, len2); - if (!ret) - { - if (!(flags & NORM_IGNORENONSPACE)) - ret = compare_diacritic_weights(flags, str1, len1, str2, len2); - if (!ret && !(flags & NORM_IGNORECASE)) - ret = compare_case_weights(flags, str1, len1, str2, len2); - } - return ret; -} diff --git a/reactos/tools/unicode/string.c b/reactos/tools/unicode/string.c deleted file mode 100644 index 3225a0ed73b..00000000000 --- a/reactos/tools/unicode/string.c +++ /dev/null @@ -1,643 +0,0 @@ -/* - * 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 "wine/unicode.h" - -extern const WCHAR wine_casemap_lower[]; -extern const WCHAR wine_casemap_upper[]; -extern const unsigned short wine_wctype_table[]; - -int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch ) -{ - return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]); -} - -WCHAR tolowerW( WCHAR ch ) -{ - return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)]; -} - -WCHAR toupperW( WCHAR ch ) -{ - 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 */ -unsigned short get_char_typeW( WCHAR ch ) -{ - return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)]; -} - -int iscntrlW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_CNTRL; -} - -int ispunctW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_PUNCT; -} - -int isspaceW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_SPACE; -} - -int isdigitW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_DIGIT; -} - -int isxdigitW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_XDIGIT; -} - -int islowerW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_LOWER; -} - -int isupperW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_UPPER; -} - -int isalnumW( WCHAR wc ) -{ - return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER); -} - -int isalphaW( WCHAR wc ) -{ - return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER); -} - -int isgraphW( WCHAR wc ) -{ - return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER); -} - -int isprintW( WCHAR wc ) -{ - return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER); -} - -unsigned int strlenW( const WCHAR *str ) -{ - const WCHAR *s = str; - while (*s) s++; - return s - str; -} - -WCHAR *strcpyW( WCHAR *dst, const WCHAR *src ) -{ - WCHAR *p = dst; - while ((*p++ = *src++)); - return dst; -} - -int strcmpW( const WCHAR *str1, const WCHAR *str2 ) -{ - while (*str1 && (*str1 == *str2)) { str1++; str2++; } - return *str1 - *str2; -} - -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; -} - -WCHAR *strcatW( WCHAR *dst, const WCHAR *src ) -{ - strcpyW( dst + strlenW(dst), src ); - return dst; -} - -WCHAR *strchrW( const WCHAR *str, WCHAR ch ) -{ - do { if (*str == ch) return (WCHAR *)str; } while (*str++); - return NULL; -} - -WCHAR *strrchrW( const WCHAR *str, WCHAR ch ) -{ - WCHAR *ret = NULL; - do { if (*str == ch) ret = (WCHAR *)str; } while (*str++); - return ret; -} - -WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept ) -{ - for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)str; - return NULL; -} - -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; -} - -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; -} - -WCHAR *strlwrW( WCHAR *str ) -{ - WCHAR *ret = str; - while ((*str = tolowerW(*str))) str++; - return ret; -} - -WCHAR *struprW( WCHAR *str ) -{ - WCHAR *ret = str; - while ((*str = toupperW(*str))) str++; - return ret; -} - -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 *)ptr; - return NULL; -} - -WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n ) -{ - const WCHAR *end, *ret = NULL; - for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = ptr; - return (WCHAR *)ret; -} - -long int atolW( const WCHAR *str ) -{ - return strtolW( str, (WCHAR **)0, 10 ); -} - -int atoiW( const WCHAR *str ) -{ - return (int)atolW( str ); -} - -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) - { - 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) - { - 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; -} - - -int vsnprintfW(WCHAR *str, size_t len, const WCHAR *format, va_list valist) -{ - unsigned int written = 0; - const WCHAR *iter = format; - char bufa[256], fmtbufa[64], *fmta; - - while (*iter) - { - while (*iter && *iter != '%') - { - if (written++ >= len) - return -1; - *str++ = *iter++; - } - if (*iter == '%') - { - if (iter[1] == '%') - { - if (written++ >= len) - return -1; - *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++; - } - 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 *); - const WCHAR *striter = wstr ? wstr : none; - while (*striter) - { - if (written++ >= len) - return -1; - *str++ = *striter++; - } - iter++; - break; - } - - case 'c': - if (written++ >= len) - return -1; - *str++ = (WCHAR)va_arg(valist, int); - 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, "%08lX", va_arg(valist, long)); - 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. - * on 64 bit systems this doesn't work for 32 bit types - */ - sprintf(bufaiter, fmtbufa, va_arg(valist, void *)); - } - } - while (*bufaiter) - { - if (written++ >= len) - return -1; - *str++ = *bufaiter++; - } - iter++; - break; - } - } - } - } - if (written >= len) - return -1; - *str++ = 0; - return (int)written; -} - -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; -} diff --git a/reactos/tools/unicode/unicode.rbuild b/reactos/tools/unicode/unicode.rbuild deleted file mode 100644 index f43be12ed9e..00000000000 --- a/reactos/tools/unicode/unicode.rbuild +++ /dev/null @@ -1,76 +0,0 @@ - - - - " " - include/reactos/wine - include/reactos - include - casemap.c - compose.c - cptable.c - mbtowc.c - string.c - wctomb.c - wctype.c - utf8.c - c_037.c - c_424.c - c_437.c - c_500.c - c_737.c - c_775.c - c_850.c - c_852.c - c_855.c - c_856.c - c_857.c - c_860.c - c_861.c - c_862.c - c_863.c - c_864.c - c_865.c - c_866.c - c_869.c - c_874.c - c_875.c - c_878.c - c_932.c - c_936.c - c_949.c - c_950.c - c_1006.c - c_1026.c - c_1250.c - c_1251.c - c_1252.c - c_1253.c - c_1254.c - c_1255.c - c_1256.c - c_1257.c - c_1258.c - c_10000.c - c_10006.c - c_10007.c - c_10029.c - c_10079.c - c_10081.c - c_20866.c - c_20932.c - c_21866.c - c_28591.c - c_28592.c - c_28593.c - c_28594.c - c_28595.c - c_28596.c - c_28597.c - c_28598.c - c_28599.c - c_28600.c - c_28603.c - c_28604.c - c_28605.c - c_28606.c - \ No newline at end of file diff --git a/reactos/tools/unicode/utf8.c b/reactos/tools/unicode/utf8.c deleted file mode 100644 index c1b594fc243..00000000000 --- a/reactos/tools/unicode/utf8.c +++ /dev/null @@ -1,249 +0,0 @@ -/* - * UTF-8 support routines - * - * 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 "wine/unicode.h" - -/* number of following bytes in sequence based on first byte value (for bytes above 0x7f) */ -static const char utf8_length[128] = -{ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x80-0x8f */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x90-0x9f */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xa0-0xaf */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xb0-0xbf */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xc0-0xcf */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xd0-0xdf */ - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* 0xe0-0xef */ - 3,3,3,3,3,3,3,3,4,4,4,4,5,5,0,0 /* 0xf0-0xff */ -}; - -/* first byte mask depending on UTF-8 sequence length */ -static const unsigned char utf8_mask[6] = { 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; - -/* minimum Unicode value depending on UTF-8 sequence length */ -static const unsigned int utf8_minval[6] = { 0x0, 0x80, 0x800, 0x10000, 0x200000, 0x4000000 }; - -/* get the next char value taking surrogates into account */ -static inline unsigned int get_surrogate_value( const WCHAR *src, unsigned int srclen ) -{ - if (src[0] >= 0xd800 && src[0] <= 0xdfff) /* surrogate pair */ - { - if (src[0] > 0xdbff || /* invalid high surrogate */ - srclen <= 1 || /* missing low surrogate */ - src[1] < 0xdc00 || src[1] > 0xdfff) /* invalid low surrogate */ - return 0; - return 0x10000 + ((src[0] & 0x3ff) << 10) + (src[1] & 0x3ff); - } - return src[0]; -} - -/* query necessary dst length for src string */ -static inline int get_length_wcs_utf8( int flags, const WCHAR *src, unsigned int srclen ) -{ - int len; - unsigned int val; - - for (len = 0; srclen; srclen--, src++) - { - if (*src < 0x80) /* 0x00-0x7f: 1 byte */ - { - len++; - continue; - } - if (*src < 0x800) /* 0x80-0x7ff: 2 bytes */ - { - len += 2; - continue; - } - if (!(val = get_surrogate_value( src, srclen ))) - { - if (flags & WC_ERR_INVALID_CHARS) return -2; - continue; - } - if (val < 0x10000) /* 0x800-0xffff: 3 bytes */ - len += 3; - else /* 0x10000-0x10ffff: 4 bytes */ - len += 4; - } - return len; -} - -/* wide char to UTF-8 string conversion */ -/* return -1 on dst buffer overflow, -2 on invalid input char */ -int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int dstlen ) -{ - int len; - - if (!dstlen) return get_length_wcs_utf8( flags, src, srclen ); - - for (len = dstlen; srclen; srclen--, src++) - { - WCHAR ch = *src; - unsigned int val; - - if (ch < 0x80) /* 0x00-0x7f: 1 byte */ - { - if (!len--) return -1; /* overflow */ - *dst++ = ch; - continue; - } - - if (ch < 0x800) /* 0x80-0x7ff: 2 bytes */ - { - if ((len -= 2) < 0) return -1; /* overflow */ - dst[1] = 0x80 | (ch & 0x3f); - ch >>= 6; - dst[0] = 0xc0 | ch; - dst += 2; - continue; - } - - if (!(val = get_surrogate_value( src, srclen ))) - { - if (flags & WC_ERR_INVALID_CHARS) return -2; - continue; - } - - if (val < 0x10000) /* 0x800-0xffff: 3 bytes */ - { - if ((len -= 3) < 0) return -1; /* overflow */ - dst[2] = 0x80 | (val & 0x3f); - val >>= 6; - dst[1] = 0x80 | (val & 0x3f); - val >>= 6; - dst[0] = 0xe0 | val; - dst += 3; - } - else /* 0x10000-0x10ffff: 4 bytes */ - { - if ((len -= 4) < 0) return -1; /* overflow */ - dst[3] = 0x80 | (val & 0x3f); - val >>= 6; - dst[2] = 0x80 | (val & 0x3f); - val >>= 6; - dst[1] = 0x80 | (val & 0x3f); - val >>= 6; - dst[0] = 0xf0 | val; - dst += 4; - } - } - return dstlen - len; -} - -/* query necessary dst length for src string */ -inline static int get_length_mbs_utf8( const unsigned char *src, int srclen ) -{ - int ret; - const unsigned char *srcend = src + srclen; - - for (ret = 0; src < srcend; ret++) - { - unsigned char ch = *src++; - if (ch < 0xc0) continue; - - switch(utf8_length[ch-0x80]) - { - case 5: - if (src >= srcend) return ret; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) continue; - src++; - case 4: - if (src >= srcend) return ret; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) continue; - src++; - case 3: - if (src >= srcend) return ret; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) continue; - src++; - case 2: - if (src >= srcend) return ret; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) continue; - src++; - case 1: - if (src >= srcend) return ret; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) continue; - src++; - } - } - return ret; -} - -/* UTF-8 to wide char string conversion */ -/* return -1 on dst buffer overflow, -2 on invalid input char */ -int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen ) -{ - int len, count; - unsigned int res; - const char *srcend = src + srclen; - - if (!dstlen) return get_length_mbs_utf8( (const unsigned char*)src, srclen ); - - for (count = dstlen; count && (src < srcend); count--, dst++) - { - unsigned char ch = *src++; - if (ch < 0x80) /* special fast case for 7-bit ASCII */ - { - *dst = ch; - continue; - } - len = utf8_length[ch-0x80]; - res = ch & utf8_mask[len]; - - switch(len) - { - case 5: - if (src >= srcend) goto done; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) goto bad; - res = (res << 6) | ch; - src++; - case 4: - if (src >= srcend) goto done; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) goto bad; - res = (res << 6) | ch; - src++; - case 3: - if (src >= srcend) goto done; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) goto bad; - res = (res << 6) | ch; - src++; - case 2: - if (src >= srcend) goto done; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) goto bad; - res = (res << 6) | ch; - src++; - case 1: - if (src >= srcend) goto done; /* ignore partial char */ - if ((ch = *src ^ 0x80) >= 0x40) goto bad; - res = (res << 6) | ch; - src++; - if (res < utf8_minval[len]) goto bad; - if (res >= 0x10000) goto bad; /* FIXME: maybe we should do surrogates here */ - *dst = res; - continue; - } - bad: - if (flags & MB_ERR_INVALID_CHARS) return -2; /* bad char */ - *dst = (WCHAR)'?'; - } - if (src < srcend) return -1; /* overflow */ -done: - return dstlen - count; -} diff --git a/reactos/tools/unicode/wctomb.c b/reactos/tools/unicode/wctomb.c deleted file mode 100644 index 5ad027acd3c..00000000000 --- a/reactos/tools/unicode/wctomb.c +++ /dev/null @@ -1,488 +0,0 @@ -/* - * WideCharToMultiByte implementation - * - * 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 "wine/unicode.h" - -/* search for a character in the unicode_compose_table; helper for compose() */ -static inline int binary_search( WCHAR ch, int low, int high ) -{ - extern const WCHAR unicode_compose_table[]; - while (low <= high) - { - int pos = (low + high) / 2; - if (unicode_compose_table[2*pos] < ch) - { - low = pos + 1; - continue; - } - if (unicode_compose_table[2*pos] > ch) - { - high = pos - 1; - continue; - } - return pos; - } - return -1; -} - -/* return the result of the composition of two Unicode chars, or 0 if none */ -static WCHAR compose( const WCHAR *str ) -{ - extern const WCHAR unicode_compose_table[]; - extern const unsigned int unicode_compose_table_size; - - int idx = 1, low = 0, high = unicode_compose_table_size - 1; - for (;;) - { - int pos = binary_search( str[idx], low, high ); - if (pos == -1) return 0; - if (!idx--) return unicode_compose_table[2*pos+1]; - low = unicode_compose_table[2*pos+1]; - high = unicode_compose_table[2*pos+3] - 1; - } -} - - -/****************************************************************/ -/* sbcs support */ - -/* check if 'ch' is an acceptable sbcs mapping for 'wch' */ -static inline int is_valid_sbcs_mapping( const struct sbcs_table *table, int flags, - WCHAR wch, unsigned char ch ) -{ - if (flags & WC_NO_BEST_FIT_CHARS) return (table->cp2uni[ch] == wch); - if (ch != (unsigned char)table->info.def_char) return 1; - return (wch == table->info.def_unicode_char); -} - -/* query necessary dst length for src string */ -static int get_length_sbcs( const struct sbcs_table *table, int flags, - const WCHAR *src, unsigned int srclen, int *used ) -{ - const unsigned char * const uni2cp_low = table->uni2cp_low; - const unsigned short * const uni2cp_high = table->uni2cp_high; - int ret, tmp; - WCHAR composed; - - if (!used) used = &tmp; /* avoid checking on every char */ - *used = 0; - - for (ret = 0; srclen; ret++, src++, srclen--) - { - WCHAR wch = *src; - unsigned char ch; - - if ((flags & WC_COMPOSITECHECK) && (srclen > 1) && (composed = compose(src))) - { - /* now check if we can use the composed char */ - ch = uni2cp_low[uni2cp_high[composed >> 8] + (composed & 0xff)]; - if (is_valid_sbcs_mapping( table, flags, composed, ch )) - { - /* we have a good mapping, use it */ - src++; - srclen--; - continue; - } - /* no mapping for the composed char, check the other flags */ - if (flags & WC_DEFAULTCHAR) /* use the default char instead */ - { - *used = 1; - src++; /* skip the non-spacing char */ - srclen--; - continue; - } - if (flags & WC_DISCARDNS) /* skip the second char of the composition */ - { - src++; - srclen--; - } - /* WC_SEPCHARS is the default */ - } - if (!*used) - { - ch = uni2cp_low[uni2cp_high[wch >> 8] + (wch & 0xff)]; - *used = !is_valid_sbcs_mapping( table, flags, wch, ch ); - } - } - return ret; -} - -/* wcstombs for single-byte code page */ -static inline int wcstombs_sbcs( const struct sbcs_table *table, - const WCHAR *src, unsigned int srclen, - char *dst, unsigned int dstlen ) -{ - const unsigned char * const uni2cp_low = table->uni2cp_low; - const unsigned short * const uni2cp_high = table->uni2cp_high; - int ret = srclen; - - if (dstlen < srclen) - { - /* buffer too small: fill it up to dstlen and return error */ - srclen = dstlen; - ret = -1; - } - - while (srclen >= 16) - { - dst[0] = uni2cp_low[uni2cp_high[src[0] >> 8] + (src[0] & 0xff)]; - dst[1] = uni2cp_low[uni2cp_high[src[1] >> 8] + (src[1] & 0xff)]; - dst[2] = uni2cp_low[uni2cp_high[src[2] >> 8] + (src[2] & 0xff)]; - dst[3] = uni2cp_low[uni2cp_high[src[3] >> 8] + (src[3] & 0xff)]; - dst[4] = uni2cp_low[uni2cp_high[src[4] >> 8] + (src[4] & 0xff)]; - dst[5] = uni2cp_low[uni2cp_high[src[5] >> 8] + (src[5] & 0xff)]; - dst[6] = uni2cp_low[uni2cp_high[src[6] >> 8] + (src[6] & 0xff)]; - dst[7] = uni2cp_low[uni2cp_high[src[7] >> 8] + (src[7] & 0xff)]; - dst[8] = uni2cp_low[uni2cp_high[src[8] >> 8] + (src[8] & 0xff)]; - dst[9] = uni2cp_low[uni2cp_high[src[9] >> 8] + (src[9] & 0xff)]; - dst[10] = uni2cp_low[uni2cp_high[src[10] >> 8] + (src[10] & 0xff)]; - dst[11] = uni2cp_low[uni2cp_high[src[11] >> 8] + (src[11] & 0xff)]; - dst[12] = uni2cp_low[uni2cp_high[src[12] >> 8] + (src[12] & 0xff)]; - dst[13] = uni2cp_low[uni2cp_high[src[13] >> 8] + (src[13] & 0xff)]; - dst[14] = uni2cp_low[uni2cp_high[src[14] >> 8] + (src[14] & 0xff)]; - dst[15] = uni2cp_low[uni2cp_high[src[15] >> 8] + (src[15] & 0xff)]; - src += 16; - dst += 16; - srclen -= 16; - } - - /* now handle remaining characters */ - src += srclen; - dst += srclen; - switch(srclen) - { - case 15: dst[-15] = uni2cp_low[uni2cp_high[src[-15] >> 8] + (src[-15] & 0xff)]; - case 14: dst[-14] = uni2cp_low[uni2cp_high[src[-14] >> 8] + (src[-14] & 0xff)]; - case 13: dst[-13] = uni2cp_low[uni2cp_high[src[-13] >> 8] + (src[-13] & 0xff)]; - case 12: dst[-12] = uni2cp_low[uni2cp_high[src[-12] >> 8] + (src[-12] & 0xff)]; - case 11: dst[-11] = uni2cp_low[uni2cp_high[src[-11] >> 8] + (src[-11] & 0xff)]; - case 10: dst[-10] = uni2cp_low[uni2cp_high[src[-10] >> 8] + (src[-10] & 0xff)]; - case 9: dst[-9] = uni2cp_low[uni2cp_high[src[-9] >> 8] + (src[-9] & 0xff)]; - case 8: dst[-8] = uni2cp_low[uni2cp_high[src[-8] >> 8] + (src[-8] & 0xff)]; - case 7: dst[-7] = uni2cp_low[uni2cp_high[src[-7] >> 8] + (src[-7] & 0xff)]; - case 6: dst[-6] = uni2cp_low[uni2cp_high[src[-6] >> 8] + (src[-6] & 0xff)]; - case 5: dst[-5] = uni2cp_low[uni2cp_high[src[-5] >> 8] + (src[-5] & 0xff)]; - case 4: dst[-4] = uni2cp_low[uni2cp_high[src[-4] >> 8] + (src[-4] & 0xff)]; - case 3: dst[-3] = uni2cp_low[uni2cp_high[src[-3] >> 8] + (src[-3] & 0xff)]; - case 2: dst[-2] = uni2cp_low[uni2cp_high[src[-2] >> 8] + (src[-2] & 0xff)]; - case 1: dst[-1] = uni2cp_low[uni2cp_high[src[-1] >> 8] + (src[-1] & 0xff)]; - case 0: break; - } - return ret; -} - -/* slow version of wcstombs_sbcs that handles the various flags */ -static int wcstombs_sbcs_slow( const struct sbcs_table *table, int flags, - const WCHAR *src, unsigned int srclen, - char *dst, unsigned int dstlen, - const char *defchar, int *used ) -{ - const unsigned char * const uni2cp_low = table->uni2cp_low; - const unsigned short * const uni2cp_high = table->uni2cp_high; - unsigned char def; - unsigned int len; - int tmp; - WCHAR composed; - - if (!defchar) - def = table->info.def_char & 0xff; - else - def = *defchar; - - if (!used) used = &tmp; /* avoid checking on every char */ - *used = 0; - - for (len = dstlen; srclen && len; dst++, len--, src++, srclen--) - { - WCHAR wch = *src; - - if ((flags & WC_COMPOSITECHECK) && (srclen > 1) && (composed = compose(src))) - { - /* now check if we can use the composed char */ - *dst = uni2cp_low[uni2cp_high[composed >> 8] + (composed & 0xff)]; - if (is_valid_sbcs_mapping( table, flags, composed, *dst )) - { - /* we have a good mapping, use it */ - src++; - srclen--; - continue; - } - /* no mapping for the composed char, check the other flags */ - if (flags & WC_DEFAULTCHAR) /* use the default char instead */ - { - *dst = def; - *used = 1; - src++; /* skip the non-spacing char */ - srclen--; - continue; - } - if (flags & WC_DISCARDNS) /* skip the second char of the composition */ - { - src++; - srclen--; - } - /* WC_SEPCHARS is the default */ - } - - *dst = uni2cp_low[uni2cp_high[wch >> 8] + (wch & 0xff)]; - if (!is_valid_sbcs_mapping( table, flags, wch, *dst )) - { - *dst = def; - *used = 1; - } - } - if (srclen) return -1; /* overflow */ - return dstlen - len; -} - - -/****************************************************************/ -/* dbcs support */ - -/* check if 'ch' is an acceptable dbcs mapping for 'wch' */ -static inline int is_valid_dbcs_mapping( const struct dbcs_table *table, int flags, - WCHAR wch, unsigned short ch ) -{ - if (ch == table->info.def_char && wch != table->info.def_unicode_char) return 0; - if (flags & WC_NO_BEST_FIT_CHARS) - { - /* check if char maps back to the same Unicode value */ - if (ch & 0xff00) - { - unsigned char off = table->cp2uni_leadbytes[ch >> 8]; - return (table->cp2uni[(off << 8) + (ch & 0xff)] == wch); - } - return (table->cp2uni[ch & 0xff] == wch); - } - return 1; -} - -/* query necessary dst length for src string */ -static int get_length_dbcs( const struct dbcs_table *table, int flags, - const WCHAR *src, unsigned int srclen, - const char *defchar, int *used ) -{ - const unsigned short * const uni2cp_low = table->uni2cp_low; - const unsigned short * const uni2cp_high = table->uni2cp_high; - WCHAR defchar_value = table->info.def_char; - WCHAR composed; - int len, tmp; - - if (!defchar && !used && !(flags & WC_COMPOSITECHECK)) - { - for (len = 0; srclen; srclen--, src++, len++) - { - if (uni2cp_low[uni2cp_high[*src >> 8] + (*src & 0xff)] & 0xff00) len++; - } - return len; - } - - if (defchar) defchar_value = defchar[1] ? ((defchar[0] << 8) | defchar[1]) : defchar[0]; - if (!used) used = &tmp; /* avoid checking on every char */ - *used = 0; - for (len = 0; srclen; len++, srclen--, src++) - { - unsigned short res; - WCHAR wch = *src; - - if ((flags & WC_COMPOSITECHECK) && (srclen > 1) && (composed = compose(src))) - { - /* now check if we can use the composed char */ - res = uni2cp_low[uni2cp_high[composed >> 8] + (composed & 0xff)]; - - if (is_valid_dbcs_mapping( table, flags, composed, res )) - { - /* we have a good mapping for the composed char, use it */ - if (res & 0xff00) len++; - src++; - srclen--; - continue; - } - /* no mapping for the composed char, check the other flags */ - if (flags & WC_DEFAULTCHAR) /* use the default char instead */ - { - if (defchar_value & 0xff00) len++; - *used = 1; - src++; /* skip the non-spacing char */ - srclen--; - continue; - } - if (flags & WC_DISCARDNS) /* skip the second char of the composition */ - { - src++; - srclen--; - } - /* WC_SEPCHARS is the default */ - } - - res = uni2cp_low[uni2cp_high[wch >> 8] + (wch & 0xff)]; - if (!is_valid_dbcs_mapping( table, flags, wch, res )) - { - res = defchar_value; - *used = 1; - } - if (res & 0xff00) len++; - } - return len; -} - -/* wcstombs for double-byte code page */ -static inline int wcstombs_dbcs( const struct dbcs_table *table, - const WCHAR *src, unsigned int srclen, - char *dst, unsigned int dstlen ) -{ - const unsigned short * const uni2cp_low = table->uni2cp_low; - const unsigned short * const uni2cp_high = table->uni2cp_high; - int len; - - for (len = dstlen; srclen && len; len--, srclen--, src++) - { - unsigned short res = uni2cp_low[uni2cp_high[*src >> 8] + (*src & 0xff)]; - if (res & 0xff00) - { - if (len == 1) break; /* do not output a partial char */ - len--; - *dst++ = res >> 8; - } - *dst++ = (char)res; - } - if (srclen) return -1; /* overflow */ - return dstlen - len; -} - -/* slow version of wcstombs_dbcs that handles the various flags */ -static int wcstombs_dbcs_slow( const struct dbcs_table *table, int flags, - const WCHAR *src, unsigned int srclen, - char *dst, unsigned int dstlen, - const char *defchar, int *used ) -{ - const unsigned short * const uni2cp_low = table->uni2cp_low; - const unsigned short * const uni2cp_high = table->uni2cp_high; - WCHAR defchar_value = table->info.def_char; - WCHAR composed; - int len, tmp; - - if (defchar) defchar_value = defchar[1] ? ((defchar[0] << 8) | defchar[1]) : defchar[0]; - if (!used) used = &tmp; /* avoid checking on every char */ - *used = 0; - - for (len = dstlen; srclen && len; len--, srclen--, src++) - { - unsigned short res; - WCHAR wch = *src; - - if ((flags & WC_COMPOSITECHECK) && (srclen > 1) && (composed = compose(src))) - { - /* now check if we can use the composed char */ - res = uni2cp_low[uni2cp_high[composed >> 8] + (composed & 0xff)]; - - if (is_valid_dbcs_mapping( table, flags, composed, res )) - { - /* we have a good mapping for the composed char, use it */ - src++; - srclen--; - goto output_char; - } - /* no mapping for the composed char, check the other flags */ - if (flags & WC_DEFAULTCHAR) /* use the default char instead */ - { - res = defchar_value; - *used = 1; - src++; /* skip the non-spacing char */ - srclen--; - goto output_char; - } - if (flags & WC_DISCARDNS) /* skip the second char of the composition */ - { - src++; - srclen--; - } - /* WC_SEPCHARS is the default */ - } - - res = uni2cp_low[uni2cp_high[wch >> 8] + (wch & 0xff)]; - if (!is_valid_dbcs_mapping( table, flags, wch, res )) - { - res = defchar_value; - *used = 1; - } - - output_char: - if (res & 0xff00) - { - if (len == 1) break; /* do not output a partial char */ - len--; - *dst++ = res >> 8; - } - *dst++ = (char)res; - } - if (srclen) return -1; /* overflow */ - return dstlen - len; -} - -/* wide char to multi byte string conversion */ -/* return -1 on dst buffer overflow */ -int wine_cp_wcstombs( const union cptable *table, int flags, - const WCHAR *src, int srclen, - char *dst, int dstlen, const char *defchar, int *used ) -{ - if (table->info.char_size == 1) - { - if (flags || defchar || used) - { - if (!dstlen) return get_length_sbcs( &table->sbcs, flags, src, srclen, used ); - return wcstombs_sbcs_slow( &table->sbcs, flags, src, srclen, - dst, dstlen, defchar, used ); - } - if (!dstlen) return srclen; - return wcstombs_sbcs( &table->sbcs, src, srclen, dst, dstlen ); - } - else /* mbcs */ - { - if (!dstlen) return get_length_dbcs( &table->dbcs, flags, src, srclen, defchar, used ); - if (flags || defchar || used) - return wcstombs_dbcs_slow( &table->dbcs, flags, src, srclen, - dst, dstlen, defchar, used ); - return wcstombs_dbcs( &table->dbcs, src, srclen, dst, dstlen ); - } -} - -/* CP_SYMBOL implementation */ -/* return -1 on dst buffer overflow, -2 on invalid character */ -int wine_cpsymbol_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen) -{ - int len, i; - if( dstlen == 0) return srclen; - len = dstlen > srclen ? srclen : dstlen; - for( i = 0; i < len; i++) - { - WCHAR w = src [ i ]; - if( w < 0x20 ) - dst[i] = w; - else if( w >= 0xf020 && w < 0xf100) - dst[i] = w - 0xf000; - else - return -2; - } - if( srclen > len) return -1; - return len; -} diff --git a/reactos/tools/unicode/wctype.c b/reactos/tools/unicode/wctype.c deleted file mode 100644 index be7c53181ab..00000000000 --- a/reactos/tools/unicode/wctype.c +++ /dev/null @@ -1,2026 +0,0 @@ -/* Unicode ctype tables */ -/* Automatically generated; DO NOT EDIT!! */ - -#include "wine/unicode.h" - -const unsigned short wine_wctype_table[16128] = -{ - /* offsets */ - 0x0100, 0x0200, 0x0300, 0x0400, 0x0500, 0x0600, 0x0700, 0x0800, - 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x0f00, 0x1000, - 0x1100, 0x1200, 0x1300, 0x1400, 0x1500, 0x1600, 0x1700, 0x1800, - 0x1900, 0x1a00, 0x1b00, 0x0900, 0x0900, 0x1c00, 0x1d00, 0x1e00, - 0x1f00, 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, - 0x2700, 0x2400, 0x2400, 0x2800, 0x2900, 0x2a00, 0x2b00, 0x2c00, - 0x2d00, 0x2e00, 0x2f00, 0x3000, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3100, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3200, - 0x3300, 0x1600, 0x1600, 0x1600, 0x3400, 0x0900, 0x0900, 0x3500, - 0x3600, 0x0900, 0x0900, 0x0900, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, - 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x1600, 0x3700, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, 0x3800, - 0x3800, 0x1600, 0x3900, 0x3a00, 0x3b00, 0x3c00, 0x3d00, 0x3e00, - /* values */ - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x9068, 0x8028, 0x9028, 0xa028, 0x8028, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x0020, 0x8020, 0x8020, 0x8020, 0x9020, - 0xa048, 0xb010, 0xb010, 0x5010, 0x5010, 0x5010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0x4010, 0x7010, 0x4010, 0x7010, 0x7010, - 0x3084, 0x3084, 0x3084, 0x3084, 0x3084, 0x3084, 0x3084, 0x3084, - 0x3084, 0x3084, 0x7010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0x1181, 0x1181, 0x1181, 0x1181, 0x1181, 0x1181, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0x1182, 0x1182, 0x1182, 0x1182, 0x1182, 0x1182, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0xb010, 0xb010, 0xb010, 0xb010, 0x0020, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x8028, 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, - 0x7048, 0xb010, 0x5010, 0x5010, 0x5010, 0x5010, 0xb010, 0xb010, - 0xb010, 0xb010, 0x1102, 0xb010, 0xb010, 0x0000, 0xb010, 0xb010, - 0x5010, 0x5010, 0x3010, 0x3010, 0xb010, 0x1102, 0xb010, 0xb010, - 0xb010, 0x3010, 0x1102, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0xb010, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0xb010, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, - 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, - 0x1102, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1102, - 0x1102, 0x1101, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1101, - 0x1102, 0x1101, 0x1101, 0x1101, 0x1102, 0x1102, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1102, 0x1101, 0x1101, 0x1102, 0x1101, 0x1101, - 0x1101, 0x1102, 0x1102, 0x1102, 0x1101, 0x1101, 0x1102, 0x1101, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1101, - 0x1102, 0x1101, 0x1102, 0x1102, 0x1101, 0x1102, 0x1101, 0x1101, - 0x1102, 0x1101, 0x1101, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, - 0x1101, 0x1102, 0x1102, 0x1100, 0x1101, 0x1102, 0x1102, 0x1102, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1101, 0x1103, 0x1102, 0x1101, - 0x1103, 0x1102, 0x1101, 0x1103, 0x1102, 0x1101, 0x1102, 0x1101, - 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, - 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1102, 0x1101, 0x1103, 0x1102, 0x1101, 0x1102, 0x1101, 0x1101, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1101, 0x1101, 0x1102, 0x1101, 0x1101, 0x1102, - 0x1102, 0x1101, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0xb010, 0xb010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1010, 0x1010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x1010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0112, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0000, 0x0000, 0x0000, 0x0000, 0xb010, 0xb010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1010, 0x0000, 0x0000, 0x0000, 0xb010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xb010, 0xb010, 0x1101, 0xb010, - 0x1101, 0x1101, 0x1101, 0x0000, 0x1101, 0x0000, 0x1101, 0x1101, - 0x1102, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x0000, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, - 0x1102, 0x1102, 0x1101, 0x1101, 0x1101, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1101, 0x1102, 0xb010, 0x1101, - 0x1102, 0x1101, 0x1101, 0x1102, 0x1102, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, - 0x0010, 0x0010, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, - 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x0000, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x0000, - 0x0000, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x0000, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x0000, 0x1010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0000, 0x0010, 0x0010, 0x0010, 0x2010, 0x0010, - 0x2010, 0x0010, 0x0010, 0x2010, 0x0010, 0x0010, 0x2010, 0x0010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2100, 0x2100, 0x2100, 0x2010, 0x2010, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2000, 0x2000, 0x2000, 0x2000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2010, 0x7010, 0x2010, 0xb010, 0xb010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2010, 0x0000, 0x0000, 0x2010, 0x2010, - 0x0000, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2010, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, - 0x6004, 0x6004, 0x6004, 0x6004, 0x6004, 0x6004, 0x6004, 0x6004, - 0x6004, 0x6004, 0x5010, 0x6010, 0x6010, 0x2010, 0x2100, 0x2100, - 0x0010, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2010, 0x2100, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x2000, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x2010, 0x2010, 0x0010, - 0x0010, 0xb010, 0x0010, 0x0010, 0x0010, 0x0010, 0x2100, 0x2100, - 0x3004, 0x3004, 0x3004, 0x3004, 0x3004, 0x3004, 0x3004, 0x3004, - 0x3004, 0x3004, 0x2100, 0x2100, 0x2100, 0x2010, 0x2010, 0x2100, - 0x2010, 0x2010, 0x2010, 0x2010, 0x2010, 0x2010, 0x2010, 0x2010, - 0x2010, 0x2010, 0x2010, 0x2010, 0x2010, 0x2010, 0x0000, 0x0020, - 0x2100, 0x0010, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x2100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 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, 0x1010, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0010, 0x1100, 0x1010, 0x1010, - 0x1010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0010, 0x0000, 0x0000, - 0x1100, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0010, 0x0010, 0x1010, 0x1010, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x0000, 0x0000, - 0x0000, 0x0010, 0x1010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x1100, - 0x1100, 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0010, 0x1100, 0x1010, 0x1010, - 0x1010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x1010, - 0x1010, 0x0000, 0x0000, 0x1010, 0x1010, 0x0010, 0x1100, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, 0x0000, 0x1100, - 0x1100, 0x1100, 0x0010, 0x0010, 0x0000, 0x0000, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1100, 0x1100, 0x5010, 0x5010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0010, 0x0010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, - 0x1100, 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0010, 0x0000, 0x1010, 0x1010, - 0x1010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, - 0x0010, 0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x0010, 0x0010, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0010, 0x0010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, - 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0010, 0x1100, 0x1010, 0x1010, - 0x1010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0010, - 0x0010, 0x1010, 0x0000, 0x1010, 0x1010, 0x0010, 0x0000, 0x0000, - 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x0010, 0x0010, 0x0000, 0x0000, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x0000, 0x5010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0010, 0x1010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x1100, - 0x1100, 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0010, 0x1100, 0x1010, 0x0010, - 0x1010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x1010, - 0x1010, 0x0000, 0x0000, 0x1010, 0x1010, 0x0010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x1010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, 0x0000, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1010, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0010, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x0000, 0x1100, 0x1100, 0x0000, 0x1100, 0x0000, 0x1100, 0x1100, - 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, - 0x0010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, - 0x1010, 0x0000, 0x1010, 0x1010, 0x1010, 0x0010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1010, 0x1010, 0x1010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0x5010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1010, 0x1010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, - 0x0010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0010, 0x0010, - 0x0010, 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0010, 0x1100, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x1010, 0x1010, - 0x1010, 0x0000, 0x1010, 0x1010, 0x0010, 0x0010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x0000, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, - 0x1010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x1010, 0x1010, - 0x1010, 0x0000, 0x1010, 0x1010, 0x1010, 0x0010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1010, 0x1010, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x0000, 0x0000, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, - 0x1010, 0x1010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0010, 0x0000, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0010, 0x1100, 0x1100, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x5010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x1010, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1100, 0x1100, 0x0000, 0x1100, 0x0000, 0x0000, 0x1100, - 0x1100, 0x0000, 0x1100, 0x0000, 0x0000, 0x1100, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x0000, 0x1100, - 0x0000, 0x0000, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0010, 0x1100, 0x1100, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0000, 0x0010, 0x0010, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1010, 0x0000, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1004, 0x1004, 0x0000, 0x0000, 0x1100, 0x1100, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x0010, 0x0010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0010, 0x1010, 0x0010, - 0x1010, 0x0010, 0xb010, 0xb010, 0xb010, 0xb010, 0x1010, 0x1010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x1010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x1010, 0x0010, 0x0010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x1010, - 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x1100, 0x1100, 0x0000, 0x1010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x1010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, - 0x1010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1010, 0x1010, - 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1010, 0x1010, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xa008, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0010, 0x0010, 0x0010, 0x1010, 0x1010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x1100, 0x1100, - 0x1100, 0x0000, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1000, 0x1000, 0x1010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0010, 0x1010, - 0x1010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x5010, 0x1100, 0x0010, 0x0000, 0x0000, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1004, 0x1004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0x0030, 0x0030, 0x0030, 0xa028, 0x0000, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1004, 0x1004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1010, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, - 0x0010, 0x0010, 0x0010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1010, 0x1010, 0x0010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0x0000, 0x0000, 0x0000, 0xb010, 0xb010, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, - 0x1004, 0x1004, 0x0000, 0x0000, 0x0000, 0x0000, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0010, - 0x0010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x1010, 0x1010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1010, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, 0x0000, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x0000, 0x0000, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, 0x0000, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x0000, 0x0000, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x0000, 0x1101, 0x0000, 0x1101, 0x0000, 0x1101, 0x0000, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, 0x0000, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0xb010, 0x1102, 0xb010, - 0xb010, 0xb010, 0x1102, 0x1102, 0x1102, 0x0000, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0xb010, 0xb010, 0xb010, - 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, 0x0000, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x0000, 0xb010, 0xb010, 0xb010, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0xb010, 0xb010, 0xb010, - 0x0000, 0x0000, 0x1102, 0x1102, 0x1102, 0x0000, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0xb010, 0xb010, 0x0000, - 0xa008, 0xa008, 0xa008, 0xa008, 0xa008, 0xa008, 0xa008, 0xa008, - 0xa008, 0xa008, 0xa008, 0x0000, 0x0020, 0x0020, 0x1020, 0x2020, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xa008, 0x8008, 0xb020, 0xb020, 0xb020, 0xb020, 0xb020, 0x7008, - 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x7010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xa008, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x3010, 0x1102, 0x0000, 0x0000, 0x3010, 0x3010, 0x3010, 0x3010, - 0x3010, 0x3010, 0x4010, 0x4010, 0xb010, 0xb010, 0xb010, 0x1102, - 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, - 0x3010, 0x3010, 0x4010, 0x4010, 0xb010, 0xb010, 0xb010, 0x0000, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, - 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, - 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x0000, 0x0000, - 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, - 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, 0x0000, - 0xb010, 0xb010, 0x1101, 0xb010, 0xb010, 0xb010, 0xb010, 0x1101, - 0xb010, 0xb010, 0x1102, 0x1101, 0x1101, 0x1101, 0x1102, 0x1102, - 0x1101, 0x1101, 0x1101, 0x1102, 0xb010, 0x1101, 0xb010, 0xb010, - 0xb010, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x1101, 0xb010, 0x1101, 0xb010, - 0x1101, 0xb010, 0x1101, 0x1101, 0x1101, 0x1101, 0x5010, 0x1102, - 0x1101, 0x1101, 0xb010, 0x1101, 0x1102, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1102, 0xb010, 0xb010, 0x1102, 0x1102, 0x1101, 0x1101, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x1101, 0x1102, 0x1102, - 0x1102, 0x1102, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, - 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, - 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, - 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, - 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0x4010, 0x5010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x1010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, - 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, 0x3010, - 0x3010, 0x3010, 0x3010, 0x3010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1111, 0x1111, - 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, - 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, - 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, - 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, - 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, - 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, 0x1112, - 0x1112, 0x1112, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x1010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0xb010, 0xb010, - 0xb010, 0xb010, 0x0000, 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0xb010, 0x0000, 0xb010, - 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0xb010, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, - 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x0000, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, 0x1101, 0x1102, - 0x1101, 0x1102, 0x1101, 0x1102, 0x1102, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x0000, 0x0000, 0x0000, 0x0000, 0xb010, 0xb010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0x0000, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, - 0xa048, 0xb010, 0xb010, 0xb010, 0xb010, 0x1010, 0x1100, 0x1010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0xb010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0xb010, 0xb010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1100, 0xb010, 0xb010, 0xb010, - 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x0000, 0x0010, 0x0010, 0xb010, 0xb010, 0x1010, 0x1010, 0x1100, - 0xb010, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0xb010, 0x1010, 0x1010, 0x1010, 0x1100, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0xb010, 0xb010, 0x0000, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0xb010, 0xb010, 0xb010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0xb010, - 0xb010, 0xb010, 0xb010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0xb010, 0xb010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, - 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0xb010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1010, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x0010, 0x1100, 0x1100, 0x1100, 0x0010, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0010, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1010, 0x1010, 0x0010, 0x0010, 0x1010, - 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2100, 0x0010, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x4010, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x0000, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x0000, 0x2100, 0x0000, - 0x2100, 0x2100, 0x0000, 0x2100, 0x2100, 0x0000, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0xb010, 0xb010, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x0000, 0x0000, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2010, 0xb010, 0x0000, 0x0000, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0x7010, 0xb010, 0x7010, 0x0000, 0xb010, 0x7010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x5010, - 0xb010, 0xb010, 0x4010, 0x4010, 0xb010, 0xb010, 0xb010, 0x0000, - 0xb010, 0x5010, 0x5010, 0xb010, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x0000, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x0000, 0x0000, 0x0060, - 0x0000, 0xb010, 0xb010, 0x5010, 0x5010, 0x5010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0x4010, 0x7010, 0x4010, 0x7010, 0x7010, - 0x3084, 0x3084, 0x3084, 0x3084, 0x3084, 0x3084, 0x3084, 0x3084, - 0x3084, 0x3084, 0x7010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0x1181, 0x1181, 0x1181, 0x1181, 0x1181, 0x1181, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, - 0x1101, 0x1101, 0x1101, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0x1182, 0x1182, 0x1182, 0x1182, 0x1182, 0x1182, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, - 0x1102, 0x1102, 0x1102, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1010, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1010, 0x1010, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x0000, - 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, - 0x0000, 0x0000, 0x1100, 0x1100, 0x1100, 0x0000, 0x0000, 0x0000, - 0x5010, 0x5010, 0xb010, 0xb010, 0xb010, 0x5010, 0x5010, 0x0000, - 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0xb010, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xb020, 0xb020, 0xb020, 0xb010, 0xb010, 0x0000, 0x0000 -}; diff --git a/reactos/tools/unicode/wine/unicode.h b/reactos/tools/unicode/wine/unicode.h deleted file mode 100644 index 1a6582bdc42..00000000000 --- a/reactos/tools/unicode/wine/unicode.h +++ /dev/null @@ -1,303 +0,0 @@ -/* - * 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_UNICODE_H -#define __WINE_UNICODE_H - -#include -#include - -// Definitions copied from -// We only want to include host headers, so we define them manually -#define C1_UPPER 1 -#define C1_LOWER 2 -#define C1_DIGIT 4 -#define C1_SPACE 8 -#define C1_PUNCT 16 -#define C1_CNTRL 32 -#define C1_BLANK 64 -#define C1_XDIGIT 128 -#define C1_ALPHA 256 -#define MB_COMPOSITE 2 -#define MB_ERR_INVALID_CHARS 8 -#define WC_COMPOSITECHECK 512 -#define WC_DISCARDNS 16 -#define WC_DEFAULTCHAR 64 -#define WC_NO_BEST_FIT_CHARS 1024 -#define WC_ERR_INVALID_CHARS 0x0080 - -#ifndef WINE_UNICODE_API -#define WINE_UNICODE_API DECLSPEC_IMPORT -#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 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 ); - -extern inline int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch ) -{ - return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]); -} - -extern 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)]; -} - -extern 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 */ -extern 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)]; -} - -extern inline int iscntrlW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_CNTRL; -} - -extern inline int ispunctW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_PUNCT; -} - -extern inline int isspaceW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_SPACE; -} - -extern inline int isdigitW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_DIGIT; -} - -extern inline int isxdigitW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_XDIGIT; -} - -extern inline int islowerW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_LOWER; -} - -extern inline int isupperW( WCHAR wc ) -{ - return get_char_typeW(wc) & C1_UPPER; -} - -extern inline int isalnumW( WCHAR wc ) -{ - return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER); -} - -extern inline int isalphaW( WCHAR wc ) -{ - return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER); -} - -extern inline int isgraphW( WCHAR wc ) -{ - return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER); -} - -extern 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 */ - -extern inline unsigned int strlenW( const WCHAR *str ) -{ - const WCHAR *s = str; - while (*s) s++; - return s - str; -} - -extern 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 - -extern inline int strcmpW( const WCHAR *str1, const WCHAR *str2 ) -{ - while (*str1 && (*str1 == *str2)) { str1++; str2++; } - return *str1 - *str2; -} - -extern 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; -} - -extern inline WCHAR *strcatW( WCHAR *dst, const WCHAR *src ) -{ - strcpyW( dst + strlenW(dst), src ); - return dst; -} - -extern inline WCHAR *strchrW( const WCHAR *str, WCHAR ch ) -{ - do { if (*str == ch) return (WCHAR *)str; } while (*str++); - return NULL; -} - -extern inline WCHAR *strrchrW( const WCHAR *str, WCHAR ch ) -{ - WCHAR *ret = NULL; - do { if (*str == ch) ret = (WCHAR *)str; } while (*str++); - return ret; -} - -extern inline WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept ) -{ - for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)str; - return NULL; -} - -extern 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; -} - -extern 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; -} - -extern inline WCHAR *strlwrW( WCHAR *str ) -{ - WCHAR *ret = str; - while ((*str = tolowerW(*str))) str++; - return ret; -} - -extern inline WCHAR *struprW( WCHAR *str ) -{ - WCHAR *ret = str; - while ((*str = toupperW(*str))) str++; - return ret; -} - -extern 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 *)ptr; - return NULL; -} - -extern inline WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n ) -{ - const WCHAR *end, *ret = NULL; - for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = ptr; - return (WCHAR *)ret; -} - -extern inline long int atolW( const WCHAR *str ) -{ - return strtolW( str, (WCHAR **)0, 10 ); -} - -extern inline int atoiW( const WCHAR *str ) -{ - return (int)atolW( str ); -} - -#endif /* __WINE_UNICODE_H */ diff --git a/reactos/tools/unicode/wine_unicode.def b/reactos/tools/unicode/wine_unicode.def deleted file mode 100644 index e582d88c29d..00000000000 --- a/reactos/tools/unicode/wine_unicode.def +++ /dev/null @@ -1,58 +0,0 @@ -LIBRARY libwine_unicode.dll - -EXPORTS - 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_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_fold_string - wine_get_sortkey - wine_is_dbcs_leadbyte - wine_utf8_mbstowcs - wine_utf8_wcstombs - wine_wctype_table diff --git a/reactos/tools/widl/client.c b/reactos/tools/widl/client.c deleted file mode 100644 index a30371d3695..00000000000 --- a/reactos/tools/widl/client.c +++ /dev/null @@ -1,506 +0,0 @@ -/* - * 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" - -static FILE* client; -static int indent = 0; - -static void print_client( const char *format, ... ) -{ - va_list va; - va_start(va, format); - print(client, indent, format, va); - va_end(va); -} - - -static void check_pointers(const func_t *func) -{ - const var_t *var; - - if (!func->args) - return; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - { - if (is_var_ptr(var) && cant_be_null(var)) - { - print_client("if (!%s)\n", var->name); - print_client("{\n"); - indent++; - print_client("RpcRaiseException(RPC_X_NULL_REF_POINTER);\n"); - indent--; - print_client("}\n\n"); - } - } -} - -const var_t* get_context_handle_var(const func_t* func) -{ - const var_t* var; - - if (!func->args) - return NULL; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - if (is_attr(var->attrs, ATTR_IN) && is_context_handle(var->type)) - return var; - - return NULL; -} - -static void write_function_stubs(type_t *iface, unsigned int *proc_offset) -{ - const func_t *func; - const char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); - int explicit_handle = is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE); - const var_t *var; - int method_count = 0; - - if (!implicit_handle) - print_client("static RPC_BINDING_HANDLE %s__MIDL_AutoBindHandle;\n\n", iface->name); - - if (iface->funcs) LIST_FOR_EACH_ENTRY( func, iface->funcs, const func_t, entry ) - { - const var_t *def = func->def; - const var_t* explicit_handle_var; - const var_t* explicit_generic_handle_var = NULL; - const var_t* context_handle_var = NULL; - int has_full_pointer = is_full_pointer_function(func); - - /* check for a defined binding handle */ - explicit_handle_var = get_explicit_handle_var(func); - if (!explicit_handle_var) - { - explicit_generic_handle_var = get_explicit_generic_handle_var(func); - if (!explicit_generic_handle_var) - context_handle_var = get_context_handle_var(func); - } - if (explicit_handle) - { - if (!explicit_handle_var && !explicit_generic_handle_var && !context_handle_var) - { - error("%s() does not define an explicit binding handle!\n", def->name); - return; - } - } - else if (implicit_handle) - { - if (explicit_handle_var) - { - error("%s() must not define a binding handle!\n", def->name); - return; - } - } - - write_type_decl_left(client, get_func_return_type(func)); - if (needs_space_after(get_func_return_type(func))) - fprintf(client, " "); - write_prefix_name(client, prefix_client, def); - fprintf(client, "(\n"); - indent++; - if (func->args) - write_args(client, func->args, iface->name, 0, TRUE); - else - print_client("void"); - fprintf(client, ")\n"); - indent--; - - /* write the functions body */ - fprintf(client, "{\n"); - indent++; - - /* declare return value '_RetVal' */ - if (!is_void(get_func_return_type(func))) - { - print_client(""); - write_type_decl_left(client, get_func_return_type(func)); - fprintf(client, " _RetVal;\n"); - } - - if (implicit_handle || explicit_handle_var || explicit_generic_handle_var || context_handle_var) - print_client("RPC_BINDING_HANDLE _Handle = 0;\n"); - - print_client("RPC_MESSAGE _RpcMessage;\n"); - print_client("MIDL_STUB_MESSAGE _StubMsg;\n"); - if (!is_void(get_func_return_type(func)) && decl_indirect(get_func_return_type(func))) - { - print_client("void *_p_%s = &%s;\n", - "_RetVal", "_RetVal"); - } - fprintf(client, "\n"); - - if (has_full_pointer) - write_full_pointer_init(client, indent, func, FALSE); - - /* check pointers */ - check_pointers(func); - - print_client("RpcTryFinally\n"); - print_client("{\n"); - indent++; - - print_client("NdrClientInitializeNew(\n"); - indent++; - print_client("(PRPC_MESSAGE)&_RpcMessage,\n"); - print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); - print_client("(PMIDL_STUB_DESC)&%s_StubDesc,\n", iface->name); - print_client("%d);\n", method_count); - indent--; - fprintf(client, "\n"); - - if (implicit_handle) - { - print_client("_Handle = %s;\n", implicit_handle); - fprintf(client, "\n"); - } - else if (explicit_handle_var) - { - print_client("_Handle = %s;\n", explicit_handle_var->name); - fprintf(client, "\n"); - } - else if (explicit_generic_handle_var) - { - print_client("_Handle = %s_bind(%s);\n", - get_explicit_generic_handle_type(explicit_generic_handle_var)->name, - explicit_generic_handle_var->name); - fprintf(client, "\n"); - } - else if (context_handle_var) - { - /* 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(context_handle_var->type, ATTR_CONTEXTHANDLE) ? FALSE : TRUE; - print_client("if (%s%s != 0)\n", is_ch_ptr ? "*" : "", context_handle_var->name); - indent++; - print_client("_Handle = NDRCContextBinding(%s%s);\n", is_ch_ptr ? "*" : "", context_handle_var->name); - indent--; - fprintf(client, "\n"); - } - - write_remoting_arguments(client, indent, func, PASS_IN, PHASE_BUFFERSIZE); - - print_client("NdrGetBuffer(\n"); - indent++; - print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); - print_client("_StubMsg.BufferLength,\n"); - if (implicit_handle || explicit_handle_var || explicit_generic_handle_var || context_handle_var) - print_client("_Handle);\n"); - else - print_client("%s__MIDL_AutoBindHandle);\n", iface->name); - indent--; - fprintf(client, "\n"); - - /* marshal arguments */ - write_remoting_arguments(client, indent, func, PASS_IN, PHASE_MARSHAL); - - /* send/receive message */ - /* print_client("NdrNsSendReceive(\n"); */ - /* print_client("(unsigned char *)_StubMsg.Buffer,\n"); */ - /* print_client("(RPC_BINDING_HANDLE *) &%s__MIDL_AutoBindHandle);\n", iface->name); */ - print_client("NdrSendReceive(\n"); - indent++; - print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); - print_client("(unsigned char *)_StubMsg.Buffer);\n\n"); - indent--; - - print_client("_StubMsg.BufferStart = (unsigned char *)_RpcMessage.Buffer;\n"); - print_client("_StubMsg.BufferEnd = _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(\n"); - indent++; - print_client("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); - print_client("(PFORMAT_STRING)&__MIDL_ProcFormatString.Format[%u]);\n", *proc_offset); - indent -= 2; - } - - /* unmarshall arguments */ - fprintf(client, "\n"); - write_remoting_arguments(client, indent, func, PASS_OUT, PHASE_UNMARSHAL); - - /* unmarshal return value */ - if (!is_void(get_func_return_type(func))) - { - if (decl_indirect(get_func_return_type(func))) - print_client("MIDL_memset(&%s, 0, sizeof(%s));\n", "_RetVal", "_RetVal"); - else if (is_ptr(get_func_return_type(func)) || is_array(get_func_return_type(func))) - print_client("%s = 0;\n", "_RetVal"); - write_remoting_arguments(client, indent, func, PASS_RETURN, PHASE_UNMARSHAL); - } - - /* update proc_offset */ - if (func->args) - { - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - *proc_offset += get_size_procformatstring_type(var->name, var->type, var->attrs); - } - if (!is_void(get_func_return_type(func))) - *proc_offset += get_size_procformatstring_type("return value", get_func_return_type(func), NULL); - else - *proc_offset += 2; /* FC_END and FC_PAD */ - - indent--; - print_client("}\n"); - print_client("RpcFinally\n"); - print_client("{\n"); - indent++; - - - /* FIXME: emit client finally code */ - - if (has_full_pointer) - write_full_pointer_free(client, indent, func); - - print_client("NdrFreeBuffer((PMIDL_STUB_MESSAGE)&_StubMsg);\n"); - - if (!implicit_handle && explicit_generic_handle_var) - { - fprintf(client, "\n"); - print_client("if (_Handle)\n"); - indent++; - print_client("%s_unbind(%s, _Handle);\n", - get_explicit_generic_handle_type(explicit_generic_handle_var)->name, - explicit_generic_handle_var->name); - indent--; - } - - indent--; - print_client("}\n"); - print_client("RpcEndFinally\n"); - - - /* emit return code */ - if (!is_void(get_func_return_type(func))) - { - fprintf(client, "\n"); - print_client("return _RetVal;\n"); - } - - indent--; - fprintf(client, "}\n"); - fprintf(client, "\n"); - - method_count++; - } -} - - -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 char *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); - else - print_client("&%s__MIDL_AutoBindHandle,\n", iface->name); - indent--; - print_client("},\n"); - print_client("0,\n"); - 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("0x10001, /* Ndr library version */\n"); - 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 long 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%08lx,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 = (RPC_IF_HANDLE)& %s___RpcClientInterface;\n", - iface->name, iface->name); - else - print_client("RPC_IF_HANDLE %s%s_v%d_%d_c_ifspec = (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 char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); - - if (implicit_handle) - { - fprintf(client, "handle_t %s;\n", implicit_handle); - fprintf(client, "\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("#ifdef _ALPHA_\n"); - print_client("#include \n"); - print_client("#endif\n"); - fprintf(client, "\n"); - print_client("#include \"%s\"\n", header_name); - fprintf(client, "\n"); -} - - -void write_client(ifref_list_t *ifaces) -{ - unsigned int proc_offset = 0; - int expr_eval_routines; - ifref_t *iface; - - if (!do_client) - return; - if (do_everything && !need_stub_files(ifaces)) - return; - - init_client(); - if (!client) - return; - - write_formatstringsdecl(client, indent, ifaces, 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_user_quad_list(client); - - if (ifaces) LIST_FOR_EACH_ENTRY( iface, ifaces, ifref_t, entry ) - { - if (!need_stub(iface->iface)) - continue; - - fprintf(client, "/*****************************************************************************\n"); - fprintf(client, " * %s interface\n", iface->iface->name); - fprintf(client, " */\n"); - fprintf(client, "\n"); - - if (iface->iface->funcs) - { - write_implicithandledecl(iface->iface); - - write_clientinterfacedecl(iface->iface); - write_stubdescdecl(iface->iface); - write_function_stubs(iface->iface, &proc_offset); - - print_client("#if !defined(__RPC_WIN32__)\n"); - print_client("#error Invalid build platform for this stub.\n"); - print_client("#endif\n"); - - fprintf(client, "\n"); - write_stubdescriptor(iface->iface, expr_eval_routines); - } - } - - fprintf(client, "\n"); - - write_procformatstring(client, ifaces, need_stub); - write_typeformatstring(client, ifaces, need_stub); - - fclose(client); -} diff --git a/reactos/tools/widl/hash.c b/reactos/tools/widl/hash.c deleted file mode 100644 index da900576713..00000000000 --- a/reactos/tools/widl/hash.c +++ /dev/null @@ -1,620 +0,0 @@ -/* - * 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 - -#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 long 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: -#ifndef __REACTOS__ - case LANG_VIETNAMESE: case LANG_GAELIC: case LANG_MALTESE: - case LANG_TAJIK: case LANG_ROMANSH: case LANG_IRISH: - case LANG_SAMI: case LANG_UPPER_SORBIAN: case LANG_SUTU: - case LANG_TSONGA: case LANG_TSWANA: case LANG_VENDA: - case LANG_XHOSA: case LANG_ZULU: case LANG_ESPERANTO: - case LANG_WALON: case LANG_CORNISH: case LANG_WELSH: - case LANG_BRETON: -#else - 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: -#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; -} diff --git a/reactos/tools/widl/hash.h b/reactos/tools/widl/hash.h deleted file mode 100644 index bb787abab83..00000000000 --- a/reactos/tools/widl/hash.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 - -typedef enum tag_syskind_t { - SYS_WIN16 = 0, - SYS_WIN32, - SYS_MAC -} syskind_t; - -extern unsigned long lhash_val_of_name_sys( syskind_t skind, LCID lcid, LPCSTR lpStr); - -#endif diff --git a/reactos/tools/widl/header.c b/reactos/tools/widl/header.c deleted file mode 100644 index 89fa2dfc554..00000000000 --- a/reactos/tools/widl/header.c +++ /dev/null @@ -1,1131 +0,0 @@ -/* - * 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" - -typedef struct _user_type_t generic_handle_t; - -static int indentation = 0; -user_type_list_t user_type_list = LIST_INIT(user_type_list); -static context_handle_list_t context_handle_list = LIST_INIT(context_handle_list); -static struct list generic_handle_list = LIST_INIT(generic_handle_list); - -static void indent(FILE *h, int delta) -{ - int c; - if (delta < 0) indentation += delta; - for (c=0; c 0) indentation += delta; -} - -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->kind == TKIND_ALIAS) - type = type->orig; - else if (is_ptr(type)) - type = type->ref; - 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 (t->kind == TKIND_ALIAS) - t = t->orig; - 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 long 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; -} - -int is_void(const type_t *t) -{ - if (!t->type && !t->ref) return 1; - return 0; -} - -int is_conformant_array(const type_t *t) -{ - return t->type == RPC_FC_CARRAY - || t->type == RPC_FC_CVARRAY - || (t->type == RPC_FC_BOGUS_ARRAY && t->size_is); -} - -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]); -} - -void write_name(FILE *h, const var_t *v) -{ - if (is_attr( v->attrs, ATTR_PROPGET )) - fprintf(h, "get_" ); - else if (is_attr( v->attrs, ATTR_PROPPUT )) - fprintf(h, "put_" ); - else if (is_attr( v->attrs, ATTR_PROPPUTREF )) - fprintf(h, "putref_" ); - fprintf(h, "%s", v->name); -} - -void write_prefix_name(FILE *h, const char *prefix, const var_t *v) -{ - fprintf(h, "%s", prefix); - write_name(h, v); -} - -static void write_field(FILE *h, var_t *v) -{ - if (!v) return; - if (v->type) { - const char *name = v->name; - if (name == NULL) { - switch (v->type->type) { - case RPC_FC_STRUCT: - case RPC_FC_CVSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_PSTRUCT: - case RPC_FC_BOGUS_STRUCT: - case RPC_FC_ENCAPSULATED_UNION: - name = "DUMMYSTRUCTNAME"; - break; - case RPC_FC_NON_ENCAPSULATED_UNION: - name = "DUMMYUNIONNAME"; - break; - default: - /* ? */ - break; - } - } - indent(h, 0); - write_type_def_or_decl(h, v->type, TRUE, "%s", name); - fprintf(h, ";\n"); - } -} - -static void write_fields(FILE *h, var_list_t *fields) -{ - var_t *v; - if (!fields) return; - LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) write_field(h, v); -} - -static void write_enums(FILE *h, var_list_t *enums) -{ - var_t *v; - if (!enums) return; - LIST_FOR_EACH_ENTRY( v, enums, var_t, entry ) - { - if (v->name) { - indent(h, 0); - write_name(h, v); - if (v->eval) { - fprintf(h, " = "); - write_expr(h, v->eval, 0); - } - } - if (list_next( enums, &v->entry )) fprintf(h, ",\n"); - } - fprintf(h, "\n"); -} - -int needs_space_after(type_t *t) -{ - return (t->kind == TKIND_ALIAS - || (!is_ptr(t) && (!is_conformant_array(t) || t->declarray))); -} - -void write_type_left(FILE *h, type_t *t, int declonly) -{ - if (!h) return; - - if (t->is_const) fprintf(h, "const "); - - if (t->kind == TKIND_ALIAS) fprintf(h, "%s", t->name); - else if (t->declarray) write_type_left(h, t->ref, declonly); - else { - if (t->sign > 0) fprintf(h, "signed "); - else if (t->sign < 0) fprintf(h, "unsigned "); - switch (t->type) { - case RPC_FC_ENUM16: - case RPC_FC_ENUM32: - if (!declonly && t->defined && !t->written && !t->ignore) { - if (t->name) fprintf(h, "enum %s {\n", t->name); - else fprintf(h, "enum {\n"); - t->written = TRUE; - indentation++; - write_enums(h, t->fields_or_args); - indent(h, -1); - fprintf(h, "}"); - } - else fprintf(h, "enum %s", t->name ? t->name : ""); - break; - case RPC_FC_STRUCT: - case RPC_FC_CVSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_PSTRUCT: - case RPC_FC_BOGUS_STRUCT: - case RPC_FC_ENCAPSULATED_UNION: - if (!declonly && t->defined && !t->written && !t->ignore) { - if (t->name) fprintf(h, "struct %s {\n", t->name); - else fprintf(h, "struct {\n"); - t->written = TRUE; - indentation++; - write_fields(h, t->fields_or_args); - indent(h, -1); - fprintf(h, "}"); - } - else fprintf(h, "struct %s", t->name ? t->name : ""); - break; - case RPC_FC_NON_ENCAPSULATED_UNION: - if (!declonly && t->defined && !t->written && !t->ignore) { - if (t->name) fprintf(h, "union %s {\n", t->name); - else fprintf(h, "union {\n"); - t->written = TRUE; - indentation++; - write_fields(h, t->fields_or_args); - indent(h, -1); - fprintf(h, "}"); - } - else fprintf(h, "union %s", t->name ? t->name : ""); - break; - case RPC_FC_RP: - case RPC_FC_UP: - case RPC_FC_FP: - case RPC_FC_OP: - case RPC_FC_CARRAY: - case RPC_FC_CVARRAY: - case RPC_FC_BOGUS_ARRAY: - write_type_left(h, t->ref, declonly); - fprintf(h, "%s*", needs_space_after(t->ref) ? " " : ""); - break; - default: - fprintf(h, "%s", t->name); - } - } -} - -void write_type_right(FILE *h, type_t *t, int is_field) -{ - if (!h) return; - - if (t->declarray) { - if (is_conformant_array(t)) { - fprintf(h, "[%s]", is_field ? "1" : ""); - t = t->ref; - } - for ( ; t->declarray; t = t->ref) - fprintf(h, "[%lu]", t->dim); - } -} - -void write_type_v(FILE *h, type_t *t, int is_field, int declonly, - const char *fmt, va_list args) -{ - type_t *pt; - int ptr_level = 0; - - if (!h) return; - - for (pt = t; is_ptr(pt); pt = pt->ref, ptr_level++) - ; - - if (pt->type == RPC_FC_FUNCTION) { - int i; - const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV); - if (!callconv) callconv = ""; - write_type_left(h, pt->ref, declonly); - fputc(' ', h); - if (ptr_level) fputc('(', h); - fprintf(h, "%s ", callconv); - for (i = 0; i < ptr_level; i++) - fputc('*', h); - } else - write_type_left(h, t, declonly); - if (fmt) { - if (needs_space_after(t)) - fputc(' ', h); - vfprintf(h, fmt, args); - } - if (pt->type == RPC_FC_FUNCTION) { - if (ptr_level) fputc(')', h); - fputc('(', h); - write_args(h, pt->fields_or_args, NULL, 0, FALSE); - fputc(')', h); - } else - write_type_right(h, t, is_field); -} - -void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - write_type_v(f, t, field, FALSE, fmt, args); - va_end(args); -} - -void write_type_decl(FILE *f, type_t *t, const char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - write_type_v(f, t, FALSE, TRUE, fmt, args); - va_end(args); -} - -void write_type_decl_left(FILE *f, type_t *t) -{ - write_type_left(f, t, 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; -} - -/* 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; - for (type = v->type; type; type = type->kind == TKIND_ALIAS ? type->orig : type->ref) { - const char *name = type->name; - if (type->user_types_registered) continue; - 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->type != RPC_FC_BIND_PRIMITIVE && 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 - { - check_for_additional_prototype_types(type->fields_or_args); - } - } - } -} - -void write_user_types(void) -{ - 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); - } -} - -void write_context_handle_rundowns(void) -{ - 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); - } -} - -void write_generic_handle_routines(void) -{ - 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); - } -} - -void write_typedef(type_t *type) -{ - fprintf(header, "typedef "); - write_type_def_or_decl(header, type->orig, FALSE, "%s", type->name); - fprintf(header, ";\n"); -} - -void write_expr(FILE *h, const expr_t *e, int brackets) -{ - switch (e->type) { - case EXPR_VOID: - break; - case EXPR_NUM: - fprintf(h, "%lu", e->u.lval); - break; - case EXPR_HEXNUM: - fprintf(h, "0x%lx", 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: - fprintf(h, "%s", e->u.sval); - break; - case EXPR_NEG: - fprintf(h, "-"); - write_expr(h, e->ref, 1); - break; - case EXPR_NOT: - fprintf(h, "~"); - write_expr(h, e->ref, 1); - break; - case EXPR_PPTR: - fprintf(h, "*"); - write_expr(h, e->ref, 1); - break; - case EXPR_CAST: - fprintf(h, "("); - write_type_decl(h, e->u.tref, NULL); - fprintf(h, ")"); - write_expr(h, e->ref, 1); - 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_MUL: - case EXPR_DIV: - case EXPR_ADD: - case EXPR_SUB: - case EXPR_AND: - case EXPR_OR: - if (brackets) fprintf(h, "("); - write_expr(h, e->ref, 1); - switch (e->type) { - case EXPR_SHL: fprintf(h, " << "); break; - case EXPR_SHR: 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; - default: break; - } - write_expr(h, e->u.ext, 1); - if (brackets) fprintf(h, ")"); - break; - case EXPR_COND: - if (brackets) fprintf(h, "("); - write_expr(h, e->ref, 1); - fprintf(h, " ? "); - write_expr(h, e->u.ext, 1); - fprintf(h, " : "); - write_expr(h, e->ext2, 1); - if (brackets) fprintf(h, ")"); - break; - case EXPR_ADDRESSOF: - fprintf(h, "&"); - write_expr(h, e->ref, 1); - break; - } -} - -void write_constdef(const var_t *v) -{ - fprintf(header, "#define %s (", v->name); - write_expr(header, v->eval, 0); - fprintf(header, ")\n\n"); -} - -void write_externdef(const var_t *v) -{ - fprintf(header, "extern const "); - write_type_def_or_decl(header, v->type, FALSE, "%s", v->name); - fprintf(header, ";\n\n"); -} - -void write_library(const char *name, const attr_list_t *attr) -{ - const UUID *uuid = get_attrp(attr, ATTR_UUID); - fprintf(header, "\n"); - write_guid(header, "LIBID", name, uuid); - fprintf(header, "\n"); -} - - -const var_t* get_explicit_handle_var(const func_t* func) -{ - const var_t* var; - - if (!func->args) - return NULL; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - if (var->type->type == RPC_FC_BIND_PRIMITIVE) - return var; - - return NULL; -} - -const type_t* get_explicit_generic_handle_type(const var_t* var) -{ - const type_t *t; - for (t = var->type; is_ptr(t); t = t->ref) - if (t->type != RPC_FC_BIND_PRIMITIVE && is_attr(t->attrs, ATTR_HANDLE)) - return t; - return NULL; -} - -const var_t* get_explicit_generic_handle_var(const func_t* func) -{ - const var_t* var; - - if (!func->args) - return NULL; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - if (get_explicit_generic_handle_type(var)) - return var; - - return NULL; -} - -int has_out_arg_or_return(const func_t *func) -{ - const var_t *var; - - if (!is_void(get_func_return_type(func))) - return 1; - - if (!func->args) - return 0; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - if (is_attr(var->attrs, ATTR_OUT)) - return 1; - - return 0; -} - - -/********** INTERFACES **********/ - -int is_object(const attr_list_t *list) -{ - const attr_t *attr; - if (list) LIST_FOR_EACH_ENTRY( attr, list, 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 void write_method_macro(const type_t *iface, const char *name) -{ - const func_t *cur; - - if (iface->ref) write_method_macro(iface->ref, name); - - if (!iface->funcs) return; - - fprintf(header, "/*** %s methods ***/\n", iface->name); - LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) - { - var_t *def = cur->def; - if (!is_callas(def->attrs)) { - const var_t *arg; - - fprintf(header, "#define %s_", name); - write_name(header,def); - fprintf(header, "(This"); - if (cur->args) - LIST_FOR_EACH_ENTRY( arg, cur->args, const var_t, entry ) - fprintf(header, ",%s", arg->name); - fprintf(header, ") "); - - fprintf(header, "(This)->lpVtbl->"); - write_name(header, def); - fprintf(header, "(This"); - if (cur->args) - LIST_FOR_EACH_ENTRY( arg, cur->args, 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, "%s", arg->name); - count++; - } - if (do_indent) indentation--; -} - -static void write_cpp_method_def(const type_t *iface) -{ - const func_t *cur; - - if (!iface->funcs) return; - - LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) - { - var_t *def = cur->def; - if (!is_callas(def->attrs)) { - indent(header, 0); - fprintf(header, "virtual "); - write_type_decl_left(header, get_func_return_type(cur)); - fprintf(header, " STDMETHODCALLTYPE "); - write_name(header, def); - fprintf(header, "(\n"); - write_args(header, cur->args, iface->name, 2, TRUE); - fprintf(header, ") = 0;\n"); - fprintf(header, "\n"); - } - } -} - -static void do_write_c_method_def(const type_t *iface, const char *name) -{ - const func_t *cur; - - if (iface->ref) do_write_c_method_def(iface->ref, name); - - if (!iface->funcs) return; - indent(header, 0); - fprintf(header, "/*** %s methods ***/\n", iface->name); - LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) - { - const var_t *def = cur->def; - if (!is_callas(def->attrs)) { - indent(header, 0); - write_type_decl_left(header, get_func_return_type(cur)); - fprintf(header, " (STDMETHODCALLTYPE *"); - write_name(header, def); - fprintf(header, ")(\n"); - write_args(header, cur->args, name, 1, TRUE); - fprintf(header, ");\n"); - fprintf(header, "\n"); - } - } -} - -static void write_c_method_def(const type_t *iface) -{ - do_write_c_method_def(iface, iface->name); -} - -static void write_c_disp_method_def(const type_t *iface) -{ - do_write_c_method_def(iface->ref, iface->name); -} - -static void write_method_proto(const type_t *iface) -{ - const func_t *cur; - - if (!iface->funcs) return; - LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) - { - const var_t *def = cur->def; - - if (!is_local(def->attrs)) { - /* proxy prototype */ - write_type_decl_left(header, get_func_return_type(cur)); - fprintf(header, " CALLBACK %s_", iface->name); - write_name(header, def); - fprintf(header, "_Proxy(\n"); - write_args(header, cur->args, iface->name, 1, TRUE); - fprintf(header, ");\n"); - /* stub prototype */ - fprintf(header, "void __RPC_STUB %s_", iface->name); - write_name(header,def); - fprintf(header, "_Stub(\n"); - fprintf(header, " IRpcStubBuffer* This,\n"); - fprintf(header, " IRpcChannelBuffer* pRpcChannelBuffer,\n"); - fprintf(header, " PRPC_MESSAGE pRpcMessage,\n"); - fprintf(header, " DWORD* pdwStubPhase);\n"); - } - } -} - -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 func_list_t *funcs = iface->funcs; - const func_t *cur; - - if (!is_object(iface->attrs) || !funcs) - return; - - LIST_FOR_EACH_ENTRY(cur, funcs, const func_t, entry) { - const var_t *def = cur->def; - const var_t *cas = is_callas(def->attrs); - - if (cas) { - const func_t *m; - LIST_FOR_EACH_ENTRY(m, iface->funcs, const func_t, entry) - if (!strcmp(m->def->name, cas->name)) - break; - if (&m->entry != iface->funcs) { - const var_t *mdef = m->def; - /* proxy prototype - use local prototype */ - write_type_decl_left(fp, get_func_return_type(m)); - fprintf(fp, " CALLBACK %s_", iface->name); - write_name(fp, mdef); - fprintf(fp, "_Proxy(\n"); - write_args(fp, m->args, iface->name, 1, TRUE); - fprintf(fp, ")"); - if (body) { - type_t *rt = get_func_return_type(m); - 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 (rt->type) { - 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, get_func_return_type(cur)); - fprintf(fp, " __RPC_STUB %s_", iface->name); - write_name(fp, mdef); - fprintf(fp, "_Stub(\n"); - write_args(fp, cur->args, 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", def->name, cas->name); - } - } -} - -static void write_function_proto(const type_t *iface, const func_t *fun, const char *prefix) -{ - var_t *def = fun->def; - - /* FIXME: do we need to handle call_as? */ - write_type_decl_left(header, get_func_return_type(fun)); - fprintf(header, " "); - write_prefix_name(header, prefix, def); - fprintf(header, "(\n"); - if (fun->args) - write_args(header, fun->args, iface->name, 0, TRUE); - else - fprintf(header, " void"); - fprintf(header, ");\n\n"); -} - -static void write_function_protos(const type_t *iface) -{ - const char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); - int explicit_handle = is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE); - const var_t* explicit_handle_var; - const var_t* explicit_generic_handle_var = NULL; - const var_t* context_handle_var = NULL; - const func_t *cur; - int prefixes_differ = strcmp(prefix_client, prefix_server); - - if (!iface->funcs) return; - LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) - { - var_t *def = cur->def; - - /* check for a defined binding handle */ - explicit_handle_var = get_explicit_handle_var(cur); - if (!explicit_handle_var) - { - explicit_generic_handle_var = get_explicit_generic_handle_var(cur); - if (!explicit_generic_handle_var) - context_handle_var = get_context_handle_var(cur); - } - if (explicit_handle) { - if (!explicit_handle_var && !explicit_generic_handle_var && !context_handle_var) { - error("%s() does not define an explicit binding handle!\n", def->name); - return; - } - } else if (implicit_handle) { - if (explicit_handle_var) { - error("%s() must not define a binding handle!\n", def->name); - return; - } - } - - if (prefixes_differ) { - fprintf(header, "/* client prototype */\n"); - write_function_proto(iface, cur, prefix_client); - fprintf(header, "/* server prototype */\n"); - } - write_function_proto(iface, cur, prefix_server); - } -} - -void write_forward(type_t *iface) -{ - /* C/C++ forwards should only be written for object interfaces, so if we - * have a full definition we only write one if we find [object] among the - * attributes - however, if we don't have a full definition at this point - * (i.e. this is an IDL forward), then we also assume that it is an object - * interface, since non-object interfaces shouldn't need forwards */ - if ((!iface->defined || is_object(iface->attrs) || is_attr(iface->attrs, ATTR_DISPINTERFACE)) - && !iface->written) { - fprintf(header, "#ifndef __%s_FWD_DEFINED__\n", iface->name); - fprintf(header, "#define __%s_FWD_DEFINED__\n", iface->name); - fprintf(header, "typedef interface %s %s;\n", iface->name, iface->name); - fprintf(header, "#endif\n\n" ); - iface->written = TRUE; - } -} - -static void write_iface_guid(const type_t *iface) -{ - const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); - write_guid(header, "IID", iface->name, uuid); -} - -static void write_dispiface_guid(const type_t *iface) -{ - const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); - write_guid(header, "DIID", iface->name, uuid); -} - -static void write_coclass_guid(type_t *cocl) -{ - const UUID *uuid = get_attrp(cocl->attrs, ATTR_UUID); - write_guid(header, "CLSID", cocl->name, uuid); -} - -static void write_com_interface(type_t *iface) -{ - if (!iface->funcs && !iface->ref) { - parser_warning("%s has no methods\n", iface->name); - return; - } - - fprintf(header, "/*****************************************************************************\n"); - fprintf(header, " * %s interface\n", iface->name); - fprintf(header, " */\n"); - fprintf(header,"#ifndef __%s_INTERFACE_DEFINED__\n", iface->name); - fprintf(header,"#define __%s_INTERFACE_DEFINED__\n\n", iface->name); - write_iface_guid(iface); - write_forward(iface); - /* C++ interface */ - fprintf(header, "#if defined(__cplusplus) && !defined(CINTERFACE)\n"); - if (iface->ref) - { - fprintf(header, "interface %s : public %s\n", iface->name, iface->ref->name); - fprintf(header, "{\n"); - indentation++; - write_cpp_method_def(iface); - indentation--; - fprintf(header, "};\n"); - } - else - { - fprintf(header, "interface %s\n", iface->name); - fprintf(header, "{\n"); - fprintf(header, " BEGIN_INTERFACE\n"); - fprintf(header, "\n"); - indentation++; - write_cpp_method_def(iface); - indentation--; - fprintf(header, " END_INTERFACE\n"); - fprintf(header, "};\n"); - } - fprintf(header, "#else\n"); - /* C interface */ - fprintf(header, "typedef struct %sVtbl {\n", iface->name); - indentation++; - fprintf(header, " BEGIN_INTERFACE\n"); - fprintf(header, "\n"); - write_c_method_def(iface); - indentation--; - fprintf(header, " END_INTERFACE\n"); - fprintf(header, "} %sVtbl;\n", iface->name); - fprintf(header, "interface %s {\n", iface->name); - fprintf(header, " CONST_VTBL %sVtbl* lpVtbl;\n", iface->name); - fprintf(header, "};\n"); - fprintf(header, "\n"); - fprintf(header, "#ifdef COBJMACROS\n"); - write_method_macro(iface, iface->name); - fprintf(header, "#endif\n"); - fprintf(header, "\n"); - fprintf(header, "#endif\n"); - fprintf(header, "\n"); - write_method_proto(iface); - write_locals(header, iface, FALSE); - fprintf(header,"\n#endif /* __%s_INTERFACE_DEFINED__ */\n\n", iface->name); -} - -static void write_rpc_interface(const type_t *iface) -{ - unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION); - const char *var = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); - static int allocate_written = 0; - - if (!allocate_written) - { - allocate_written = 1; - fprintf(header, "void * __RPC_USER MIDL_user_allocate(size_t);\n"); - fprintf(header, "void __RPC_USER MIDL_user_free(void *);\n\n"); - } - - 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 (iface->funcs) - { - write_iface_guid(iface); - if (var) fprintf(header, "extern handle_t %s;\n", var); - 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)); - } - write_function_protos(iface); - } - fprintf(header,"\n#endif /* __%s_INTERFACE_DEFINED__ */\n\n", iface->name); - - /* FIXME: server/client code */ -} - -void write_interface(type_t *iface) -{ - if (is_object(iface->attrs)) - write_com_interface(iface); - else - write_rpc_interface(iface); -} - -void write_dispinterface(type_t *iface) -{ - fprintf(header, "/*****************************************************************************\n"); - fprintf(header, " * %s dispinterface\n", iface->name); - fprintf(header, " */\n"); - fprintf(header,"#ifndef __%s_DISPINTERFACE_DEFINED__\n", iface->name); - fprintf(header,"#define __%s_DISPINTERFACE_DEFINED__\n\n", iface->name); - write_dispiface_guid(iface); - write_forward(iface); - /* C++ interface */ - fprintf(header, "#if defined(__cplusplus) && !defined(CINTERFACE)\n"); - fprintf(header, "interface %s : public %s\n", iface->name, iface->ref->name); - fprintf(header, "{\n"); - fprintf(header, "};\n"); - fprintf(header, "#else\n"); - /* C interface */ - fprintf(header, "typedef struct %sVtbl {\n", iface->name); - indentation++; - fprintf(header, " BEGIN_INTERFACE\n"); - fprintf(header, "\n"); - write_c_disp_method_def(iface); - indentation--; - fprintf(header, " END_INTERFACE\n"); - fprintf(header, "} %sVtbl;\n", iface->name); - fprintf(header, "interface %s {\n", iface->name); - fprintf(header, " CONST_VTBL %sVtbl* lpVtbl;\n", iface->name); - fprintf(header, "};\n"); - fprintf(header, "\n"); - fprintf(header, "#ifdef COBJMACROS\n"); - write_method_macro(iface->ref, iface->name); - fprintf(header, "#endif\n"); - fprintf(header, "\n"); - fprintf(header, "#endif\n"); - fprintf(header, "\n"); - fprintf(header,"#endif /* __%s_DISPINTERFACE_DEFINED__ */\n\n", iface->name); -} - -void write_coclass(type_t *cocl) -{ - fprintf(header, "/*****************************************************************************\n"); - fprintf(header, " * %s coclass\n", cocl->name); - fprintf(header, " */\n\n"); - write_coclass_guid(cocl); - fprintf(header, "\n"); -} - -void write_coclass_forward(type_t *cocl) -{ - fprintf(header, "#ifndef __%s_FWD_DEFINED__\n", cocl->name); - fprintf(header, "#define __%s_FWD_DEFINED__\n", cocl->name); - fprintf(header, "typedef struct %s %s;\n", cocl->name, cocl->name); - fprintf(header, "#endif /* defined __%s_FWD_DEFINED__ */\n\n", cocl->name ); -} diff --git a/reactos/tools/widl/header.h b/reactos/tools/widl/header.h deleted file mode 100644 index e74a95f91bb..00000000000 --- a/reactos/tools/widl/header.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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 "widltypes.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 long get_attrv(const attr_list_t *list, enum attr_type t); -extern int is_void(const type_t *t); -extern int is_conformant_array(const type_t *t); -extern int is_declptr(const type_t *t); -extern void write_name(FILE *h, const var_t *v); -extern void write_prefix_name(FILE *h, const char *prefix, const var_t *v); -extern const char* get_name(const var_t *v); -extern void write_type_left(FILE *h, type_t *t, int declonly); -extern void write_type_right(FILE *h, type_t *t, int is_field); -extern void write_type_def_or_decl(FILE *h, type_t *t, int is_field, const char *fmt, ...); -extern void write_type_decl(FILE *f, type_t *t, const char *fmt, ...); -extern void write_type_decl_left(FILE *f, type_t *t); -extern int needs_space_after(type_t *t); -extern int is_object(const attr_list_t *list); -extern int is_local(const attr_list_t *list); -extern int need_stub(const type_t *iface); -extern int need_proxy(const type_t *iface); -extern int need_stub_files(const ifref_list_t *ifaces); -extern int need_proxy_file(const ifref_list_t *ifaces); -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 void write_forward(type_t *iface); -extern void write_interface(type_t *iface); -extern void write_dispinterface(type_t *iface); -extern void write_locals(FILE *fp, const type_t *iface, int body); -extern void write_coclass(type_t *cocl); -extern void write_coclass_forward(type_t *cocl); -extern void write_typedef(type_t *type); -extern void write_expr(FILE *h, const expr_t *e, int brackets); -extern void write_constdef(const var_t *v); -extern void write_externdef(const var_t *v); -extern void write_library(const char *name, const attr_list_t *attr); -extern void write_user_types(void); -extern void write_context_handle_rundowns(void); -extern void write_generic_handle_routines(void); -extern const var_t* get_explicit_handle_var(const func_t* func); -extern const type_t* get_explicit_generic_handle_type(const var_t* var); -extern const var_t* get_explicit_generic_handle_var(const func_t* func); -extern const var_t* get_context_handle_var(const func_t* func); -extern int has_out_arg_or_return(const func_t *func); -extern void write_guid(FILE *f, const char *guid_prefix, const char *name, - const UUID *uuid); - -static inline int last_ptr(const type_t *type) -{ - return is_ptr(type) && !is_declptr(type->ref); -} - -static inline int last_array(const type_t *type) -{ - return is_array(type) && !is_array(type->ref); -} - -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) -{ - if (is_attr(type->attrs, ATTR_CONTEXTHANDLE)) - return 1; - - for (;;) - { - if (is_attr(type->attrs, ATTR_CONTEXTHANDLE)) - return 1; - else if (type->kind == TKIND_ALIAS) - type = type->orig; - else if (is_ptr(type)) - type = type->ref; - else return 0; - } -} - -#endif diff --git a/reactos/tools/widl/parser.h b/reactos/tools/widl/parser.h deleted file mode 100644 index 71f08dc994a..00000000000 --- a/reactos/tools/widl/parser.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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); - -#endif diff --git a/reactos/tools/widl/parser.l b/reactos/tools/widl/parser.l deleted file mode 100644 index 5b24b26f57e..00000000000 --- a/reactos/tools/widl/parser.l +++ /dev/null @@ -1,455 +0,0 @@ -/* -*-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 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_]* -int [0-9]+ -hexd [0-9a-fA-F] -hex 0x{hexd}+ -uuid {hexd}{8}-{hexd}{4}-{hexd}{4}-{hexd}{4}-{hexd}{12} -double [0-9]+\.[0-9]+([eE][+-]?[0-9]+)* - -%x QUOTE -%x ATTR -%x PP_LINE - -%{ - -#include "config.h" - -#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" - -extern char *temp_name; - -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); - -#define MAX_IMPORT_DEPTH 10 -struct { - YY_BUFFER_STATE state; - char *input_name; - int line_number; - char *temp_name; -} import_stack[MAX_IMPORT_DEPTH]; -int import_stack_ptr = 0; - -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}* 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 */ - free( input_name ); - input_name = xstrdup(fname); - } -\" yy_push_state(QUOTE); cbufidx = 0; -\" { - yy_pop_state(); - parser_lval.str = get_buffered_cstring(); - return aSTRING; - } -\\\\ | -\\\" 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 = strtoul(yytext, NULL, 0); - return aHEXNUM; - } -{int} { - parser_lval.num = strtoul(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 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; -}; - -static const struct keyword keywords[] = { - {"FALSE", tFALSE}, - {"TRUE", tTRUE}, - {"__cdecl", tCDECL}, - {"__fastcall", tFASTCALL}, - {"__int64", tINT64}, - {"__pascal", tPASCAL}, - {"__stdcall", tSTDCALL}, - {"_cdecl", tCDECL}, - {"_fastcall", tFASTCALL}, - {"_pascal", tPASCAL}, - {"_stdcall", tSTDCALL}, - {"boolean", tBOOLEAN}, - {"byte", tBYTE}, - {"callback", tCALLBACK}, - {"case", tCASE}, - {"cdecl", tCDECL}, - {"char", tCHAR}, - {"coclass", tCOCLASS}, - {"code", tCODE}, - {"comm_status", tCOMMSTATUS}, - {"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}, - {"in_line", tINLINE}, - {"int", tINT}, - {"interface", tINTERFACE}, - {"library", tLIBRARY}, - {"long", tLONG}, - {"methods", tMETHODS}, - {"module", tMODULE}, - {"pascal", tPASCAL}, - {"properties", tPROPERTIES}, - {"short", tSHORT}, - {"signed", tSIGNED}, - {"sizeof", tSIZEOF}, - {"small", tSMALL}, - {"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 */ -static const struct keyword attr_keywords[] = -{ - {"aggregatable", tAGGREGATABLE}, - {"allocate", tALLOCATE}, - {"appobject", tAPPOBJECT}, - {"async", tASYNC}, - {"async_uuid", tASYNCUUID}, - {"auto_handle", tAUTOHANDLE}, - {"bindable", tBINDABLE}, - {"broadcast", tBROADCAST}, - {"byte_count", tBYTECOUNT}, - {"call_as", tCALLAS}, - {"context_handle", tCONTEXTHANDLE}, - {"context_handle_noserialize", tCONTEXTHANDLENOSERIALIZE}, - {"context_handle_serialize", tCONTEXTHANDLENOSERIALIZE}, - {"control", tCONTROL}, - {"defaultcollelem", tDEFAULTCOLLELEM}, - {"defaultvalue", tDEFAULTVALUE}, - {"defaultvtable", tDEFAULTVTABLE}, - {"displaybind", tDISPLAYBIND}, - {"dllname", tDLLNAME}, - {"dual", tDUAL}, - {"endpoint", tENDPOINT}, - {"entry", tENTRY}, - {"explicit_handle", tEXPLICITHANDLE}, - {"handle", tHANDLE}, - {"helpcontext", tHELPCONTEXT}, - {"helpfile", tHELPFILE}, - {"helpstring", tHELPSTRING}, - {"helpstringcontext", tHELPSTRINGCONTEXT}, - {"helpstringdll", tHELPSTRINGDLL}, - {"hidden", tHIDDEN}, - {"id", tID}, - {"idempotent", tIDEMPOTENT}, - {"iid_is", tIIDIS}, - {"immediatebind", tIMMEDIATEBIND}, - {"implicit_handle", tIMPLICITHANDLE}, - {"in", tIN}, - {"input_sync", tINPUTSYNC}, - {"lcid", tLCID}, - {"length_is", tLENGTHIS}, - {"local", tLOCAL}, - {"nonbrowsable", tNONBROWSABLE}, - {"noncreatable", tNONCREATABLE}, - {"nonextensible", tNONEXTENSIBLE}, - {"object", tOBJECT}, - {"odl", tODL}, - {"oleautomation", tOLEAUTOMATION}, - {"optional", tOPTIONAL}, - {"out", tOUT}, - {"pointer_default", tPOINTERDEFAULT}, - {"propget", tPROPGET}, - {"propput", tPROPPUT}, - {"propputref", tPROPPUTREF}, - {"ptr", tPTR}, - {"public", tPUBLIC}, - {"range", tRANGE}, - {"readonly", tREADONLY}, - {"ref", tREF}, - {"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}, - {"transmit_as", tTRANSMITAS}, - {"unique", tUNIQUE}, - {"uuid", tUUID}, - {"v1_enum", tV1ENUM}, - {"vararg", tVARARG}, - {"version", tVERSION}, - {"wire_marshal", tWIREMARSHAL}, -}; - - -#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) { - 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; - free( input_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 *hname, *path, *p; - struct imports *import; - int ptr = import_stack_ptr; - int ret; - - if (!parse_only && do_header) { - 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); - } - - 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 = strdup( fname ); - else if (!(path = wpp_find_include( fname, input_name ))) - error_loc("Unable to open include file %s\n", fname); - - 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; - - ret = wpp_parse_temp( path, NULL, &temp_name ); - 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; ptr -#include -#include -#include -#include -#include -#ifdef HAVE_ALLOCA_H -#include -#endif - -#include "widl.h" -#include "utils.h" -#include "parser.h" -#include "header.h" -#include "typelib.h" -#include "typegen.h" - -#if defined(YYBYACC) - /* Berkeley yacc (byacc) doesn't seem to know about these */ - /* Some *BSD supplied versions do define these though */ -# ifndef YYEMPTY -# define YYEMPTY (-1) /* Empty lookahead value of yychar */ -# endif -# ifndef YYLEX -# define YYLEX yylex() -# endif - -#elif defined(YYBISON) - /* Bison was used for original development */ - /* #define YYEMPTY -2 */ - /* #define YYLEX yylex() */ - -#else - /* No yacc we know yet */ -# if !defined(YYEMPTY) || !defined(YYLEX) -# error Yacc version/type unknown. This version needs to be verified for settings of YYEMPTY and YYLEX. -# elif defined(__GNUC__) /* gcc defines the #warning directive */ -# warning Yacc version/type unknown. It defines YYEMPTY and YYLEX, but is not tested - /* #else we just take a chance that it works... */ -# endif -#endif - -#define YYERROR_VERBOSE - -unsigned char pointer_default = RPC_FC_UP; -static int is_object_interface = FALSE; - -typedef struct list typelist_t; -struct typenode { - type_t *type; - struct list entry; -}; - -typelist_t incomplete_types = LIST_INIT(incomplete_types); - -static void add_incomplete(type_t *t); -static void fix_incomplete(void); - -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_t *make_attr(enum attr_type type); -static attr_t *make_attrv(enum attr_type type, unsigned long val); -static attr_t *make_attrp(enum attr_type type, void *val); -static expr_t *make_expr(enum expr_type type); -static expr_t *make_exprl(enum expr_type type, long val); -static expr_t *make_exprd(enum expr_type type, double val); -static expr_t *make_exprs(enum expr_type type, char *val); -static expr_t *make_exprt(enum expr_type type, type_t *tref, expr_t *expr); -static expr_t *make_expr1(enum expr_type type, expr_t *expr); -static expr_t *make_expr2(enum expr_type type, expr_t *exp1, expr_t *exp2); -static expr_t *make_expr3(enum expr_type type, expr_t *expr1, expr_t *expr2, expr_t *expr3); -static type_t *make_type(unsigned char type, type_t *ref); -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 void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_t *arr, int top); -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(var_list_t *list, var_t *var); -static var_t *make_var(char *name); -static pident_list_t *append_pident(pident_list_t *list, pident_t *p); -static pident_t *make_pident(var_t *var); -static func_list_t *append_func(func_list_t *list, func_t *func); -static func_t *make_func(var_t *def, var_list_t *args); -static type_t *make_class(char *name); -static type_t *make_safearray(type_t *type); -static type_t *make_builtin(char *name); -static type_t *make_int(int sign); - -static type_t *reg_type(type_t *type, const char *name, int t); -static type_t *reg_typedefs(type_t *type, var_list_t *names, attr_list_t *attrs); -static type_t *find_type(const char *name, int t); -static type_t *find_type2(char *name, int t); -static type_t *get_type(unsigned char type, char *name, int t); -static type_t *get_typev(unsigned char type, var_t *name, int t); -static int get_struct_type(var_list_t *fields); - -static var_t *reg_const(var_t *var); -static var_t *find_const(char *name, int f); - -static void write_libid(const char *name, const attr_list_t *attr); -static void write_clsid(type_t *cls); -static void write_diid(type_t *iface); -static void write_iid(type_t *iface); - -static int compute_method_indexes(type_t *iface); -static char *gen_name(void); -static void process_typedefs(var_list_t *names); -static void check_arg(var_t *arg); -static void check_all_user_types(ifref_list_t *ifaces); - -#define tsENUM 1 -#define tsSTRUCT 2 -#define tsUNION 3 - - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 139 "parser.y" -typedef union YYSTYPE { - 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; - pident_t *pident; - pident_list_t *pident_list; - func_t *func; - func_list_t *func_list; - ifref_t *ifref; - ifref_list_t *ifref_list; - char *str; - UUID *uuid; - unsigned int num; - double dbl; - interface_info_t ifinfo; -} YYSTYPE; -/* Line 196 of yacc.c. */ -#line 531 "parser.tab.c" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - - -/* Line 219 of yacc.c. */ -#line 543 "parser.tab.c" - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus)) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#ifndef YY_ -# if YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) -# endif -# endif -# ifndef YY_ -# define YY_(msgid) msgid -# endif -#endif - -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# else -# define YYSTACK_ALLOC alloca -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYINCLUDED_STDLIB_H -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1) -# endif -# ifdef __cplusplus -extern "C" { -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifdef __cplusplus -} -# endif -# endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short int yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined (__GNUC__) && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short int yysigned_char; -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 3 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1044 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 158 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 78 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 277 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 506 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 393 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = -{ - 0, 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, 2, 2, 2, 2, 2, 139, 2, - 150, 151, 142, 141, 135, 140, 157, 143, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 137, 149, - 2, 156, 2, 136, 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, 154, 2, 155, 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, 152, 138, 153, 144, 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, 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, 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, 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, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 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, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 145, 146, 147, 148 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned short int yyprhs[] = -{ - 0, 0, 3, 5, 6, 9, 12, 16, 19, 22, - 25, 28, 29, 32, 35, 39, 42, 45, 48, 51, - 54, 55, 59, 62, 63, 65, 68, 70, 73, 76, - 78, 81, 84, 87, 92, 96, 100, 106, 109, 113, - 118, 119, 121, 123, 125, 129, 131, 136, 140, 141, - 145, 149, 151, 155, 160, 161, 163, 167, 169, 173, - 178, 180, 184, 185, 187, 189, 191, 193, 195, 200, - 205, 207, 209, 211, 213, 215, 217, 222, 227, 229, - 231, 236, 238, 243, 248, 253, 255, 257, 262, 267, - 272, 277, 282, 284, 289, 291, 296, 298, 304, 306, - 308, 313, 315, 317, 319, 321, 323, 325, 327, 329, - 331, 336, 338, 340, 342, 344, 351, 353, 355, 357, - 359, 364, 366, 368, 370, 375, 380, 385, 390, 392, - 394, 399, 404, 406, 408, 410, 412, 414, 416, 418, - 419, 422, 427, 431, 437, 438, 441, 443, 445, 449, - 453, 455, 461, 463, 467, 468, 470, 472, 474, 476, - 478, 480, 482, 488, 492, 496, 500, 504, 508, 512, - 516, 520, 523, 526, 529, 532, 537, 542, 546, 548, - 552, 554, 559, 560, 563, 566, 570, 573, 575, 580, - 584, 585, 587, 588, 590, 592, 594, 596, 598, 600, - 602, 605, 608, 610, 612, 614, 616, 618, 620, 622, - 623, 625, 627, 630, 632, 635, 638, 640, 642, 645, - 648, 651, 657, 658, 661, 664, 667, 670, 673, 676, - 680, 683, 687, 693, 699, 700, 703, 706, 709, 712, - 719, 728, 731, 734, 737, 740, 743, 746, 752, 755, - 758, 761, 763, 768, 770, 774, 776, 778, 782, 784, - 786, 788, 794, 796, 798, 800, 803, 805, 808, 810, - 813, 815, 818, 823, 828, 834, 845, 847 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const short int yyrhs[] = -{ - 159, 0, -1, 160, -1, -1, 160, 222, -1, 160, - 221, -1, 160, 208, 149, -1, 160, 210, -1, 160, - 225, -1, 160, 171, -1, 160, 164, -1, -1, 161, - 222, -1, 161, 221, -1, 161, 208, 149, -1, 161, - 210, -1, 161, 225, -1, 161, 164, -1, 161, 168, - -1, 161, 171, -1, -1, 162, 201, 149, -1, 162, - 164, -1, -1, 149, -1, 187, 149, -1, 165, -1, - 191, 149, -1, 197, 149, -1, 167, -1, 231, 149, - -1, 233, 149, -1, 234, 149, -1, 37, 150, 8, - 151, -1, 70, 8, 149, -1, 166, 161, 10, -1, - 71, 150, 8, 151, 163, -1, 80, 3, -1, 179, - 169, 152, -1, 170, 161, 153, 163, -1, -1, 174, - -1, 132, -1, 175, -1, 174, 135, 175, -1, 173, - -1, 179, 232, 226, 176, -1, 232, 226, 176, -1, - -1, 154, 177, 155, -1, 154, 142, 155, -1, 193, - -1, 177, 135, 194, -1, 177, 155, 154, 194, -1, - -1, 179, -1, 154, 180, 155, -1, 182, -1, 180, - 135, 182, -1, 180, 155, 154, 182, -1, 8, -1, - 181, 135, 8, -1, -1, 13, -1, 15, -1, 16, - -1, 18, -1, 19, -1, 24, 150, 204, 151, -1, - 26, 150, 195, 151, -1, 33, -1, 34, -1, 35, - -1, 36, -1, 38, -1, 39, -1, 40, 150, 196, - 151, -1, 40, 150, 8, 151, -1, 41, -1, 42, - -1, 44, 150, 8, 151, -1, 46, -1, 47, 150, - 181, 151, -1, 48, 150, 8, 151, -1, 48, 150, - 196, 151, -1, 51, -1, 56, -1, 58, 150, 196, - 151, -1, 59, 150, 8, 151, -1, 60, 150, 8, - 151, -1, 61, 150, 196, 151, -1, 62, 150, 8, - 151, -1, 63, -1, 65, 150, 196, 151, -1, 66, - -1, 67, 150, 194, 151, -1, 68, -1, 69, 150, - 57, 3, 151, -1, 72, -1, 74, -1, 79, 150, - 192, 151, -1, 81, -1, 85, -1, 86, -1, 87, - -1, 88, -1, 89, -1, 90, -1, 91, -1, 92, - -1, 94, 150, 230, 151, -1, 96, -1, 97, -1, - 98, -1, 100, -1, 101, 150, 196, 135, 196, 151, - -1, 102, -1, 104, -1, 105, -1, 106, -1, 111, - 150, 192, 151, -1, 114, -1, 116, -1, 117, -1, - 120, 150, 194, 151, -1, 121, 150, 232, 151, -1, - 122, 150, 232, 151, -1, 128, 150, 183, 151, -1, - 129, -1, 130, -1, 131, 150, 235, 151, -1, 134, - 150, 232, 151, -1, 230, -1, 9, -1, 8, -1, - 27, -1, 54, -1, 93, -1, 115, -1, -1, 185, - 186, -1, 26, 194, 137, 199, -1, 38, 137, 199, - -1, 32, 232, 204, 156, 196, -1, -1, 189, 135, - -1, 189, -1, 190, -1, 189, 135, 190, -1, 204, - 156, 196, -1, 204, -1, 49, 203, 152, 188, 153, - -1, 193, -1, 192, 135, 193, -1, -1, 194, -1, - 5, -1, 6, -1, 7, -1, 53, -1, 123, -1, - 3, -1, 194, 136, 194, 137, 194, -1, 194, 138, - 194, -1, 194, 139, 194, -1, 194, 141, 194, -1, - 194, 140, 194, -1, 194, 142, 194, -1, 194, 143, - 194, -1, 194, 11, 194, -1, 194, 12, 194, -1, - 144, 194, -1, 140, 194, -1, 139, 194, -1, 142, - 194, -1, 150, 232, 151, 194, -1, 112, 150, 232, - 151, -1, 150, 194, 151, -1, 196, -1, 195, 135, - 196, -1, 194, -1, 52, 32, 232, 204, -1, -1, - 198, 199, -1, 200, 149, -1, 178, 234, 149, -1, - 179, 149, -1, 149, -1, 178, 232, 226, 176, -1, - 178, 232, 226, -1, -1, 204, -1, -1, 3, -1, - 4, -1, 3, -1, 4, -1, 22, -1, 133, -1, - 207, -1, 109, 207, -1, 127, 207, -1, 127, -1, - 55, -1, 110, -1, 45, -1, 20, -1, 50, -1, - 57, -1, -1, 75, -1, 75, -1, 108, 206, -1, - 113, -1, 82, 206, -1, 64, 206, -1, 76, -1, - 28, -1, 29, 3, -1, 29, 4, -1, 179, 208, - -1, 209, 152, 211, 153, 163, -1, -1, 211, 212, - -1, 178, 222, -1, 43, 3, -1, 43, 4, -1, - 179, 213, -1, 95, 137, -1, 215, 200, 149, -1, - 83, 137, -1, 216, 201, 149, -1, 214, 152, 215, - 216, 153, -1, 214, 152, 219, 149, 153, -1, -1, - 137, 4, -1, 77, 3, -1, 77, 4, -1, 179, - 219, -1, 220, 218, 152, 162, 153, 163, -1, 220, - 137, 3, 152, 167, 162, 153, 163, -1, 217, 163, - -1, 219, 149, -1, 213, 149, -1, 84, 3, -1, - 84, 4, -1, 179, 223, -1, 224, 152, 162, 153, - 163, -1, 142, 226, -1, 32, 226, -1, 184, 226, - -1, 228, -1, 228, 150, 172, 151, -1, 204, -1, - 150, 226, 151, -1, 227, -1, 226, -1, 229, 135, - 226, -1, 103, -1, 126, -1, 99, -1, 118, 203, - 152, 198, 153, -1, 132, -1, 4, -1, 205, -1, - 32, 232, -1, 191, -1, 49, 3, -1, 231, -1, - 118, 3, -1, 234, -1, 125, 3, -1, 107, 150, - 232, 151, -1, 124, 178, 232, 229, -1, 125, 203, - 152, 198, 153, -1, 125, 203, 119, 150, 200, 151, - 202, 152, 185, 153, -1, 5, -1, 5, 157, 5, - -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short int yyrline[] = -{ - 0, 292, 292, 301, 302, 303, 304, 308, 313, 314, - 315, 318, 319, 320, 321, 322, 326, 327, 328, 329, - 332, 333, 334, 337, 338, 341, 342, 343, 348, 349, - 350, 355, 356, 363, 365, 371, 375, 379, 381, 386, - 390, 391, 394, 397, 398, 399, 403, 408, 414, 415, - 416, 419, 420, 421, 424, 425, 429, 435, 436, 437, - 440, 441, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 496, 497, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 516, 520, 521, 526, 527, 528, 529, 532, - 533, 536, 540, 546, 552, 553, 554, 557, 561, 570, - 574, 579, 588, 589, 602, 603, 606, 607, 608, 609, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 630, 631, - 634, 640, 645, 646, 649, 650, 651, 652, 655, 663, - 675, 676, 679, 680, 681, 684, 686, 689, 690, 691, - 692, 693, 709, 710, 711, 712, 713, 714, 715, 718, - 719, 722, 723, 724, 725, 726, 727, 728, 731, 732, - 738, 747, 754, 755, 759, 762, 763, 766, 779, 780, - 783, 784, 787, 796, 805, 806, 809, 810, 813, 825, - 837, 849, 853, 854, 857, 858, 861, 866, 873, 874, - 875, 879, 882, 889, 890, 891, 898, 899, 903, 904, - 905, 908, 919, 920, 921, 922, 923, 924, 925, 926, - 927, 928, 929, 932, 937, 942, 959, 960 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "aIDENTIFIER", "aKNOWNTYPE", "aNUM", - "aHEXNUM", "aDOUBLE", "aSTRING", "aUUID", "aEOF", "SHL", "SHR", - "tAGGREGATABLE", "tALLOCATE", "tAPPOBJECT", "tASYNC", "tASYNCUUID", - "tAUTOHANDLE", "tBINDABLE", "tBOOLEAN", "tBROADCAST", "tBYTE", - "tBYTECOUNT", "tCALLAS", "tCALLBACK", "tCASE", "tCDECL", "tCHAR", - "tCOCLASS", "tCODE", "tCOMMSTATUS", "tCONST", "tCONTEXTHANDLE", - "tCONTEXTHANDLENOSERIALIZE", "tCONTEXTHANDLESERIALIZE", "tCONTROL", - "tCPPQUOTE", "tDEFAULT", "tDEFAULTCOLLELEM", "tDEFAULTVALUE", - "tDEFAULTVTABLE", "tDISPLAYBIND", "tDISPINTERFACE", "tDLLNAME", - "tDOUBLE", "tDUAL", "tENDPOINT", "tENTRY", "tENUM", "tERRORSTATUST", - "tEXPLICITHANDLE", "tEXTERN", "tFALSE", "tFASTCALL", "tFLOAT", "tHANDLE", - "tHANDLET", "tHELPCONTEXT", "tHELPFILE", "tHELPSTRING", - "tHELPSTRINGCONTEXT", "tHELPSTRINGDLL", "tHIDDEN", "tHYPER", "tID", - "tIDEMPOTENT", "tIIDIS", "tIMMEDIATEBIND", "tIMPLICITHANDLE", "tIMPORT", - "tIMPORTLIB", "tIN", "tINLINE", "tINPUTSYNC", "tINT", "tINT64", - "tINTERFACE", "tLCID", "tLENGTHIS", "tLIBRARY", "tLOCAL", "tLONG", - "tMETHODS", "tMODULE", "tNONBROWSABLE", "tNONCREATABLE", - "tNONEXTENSIBLE", "tOBJECT", "tODL", "tOLEAUTOMATION", "tOPTIONAL", - "tOUT", "tPASCAL", "tPOINTERDEFAULT", "tPROPERTIES", "tPROPGET", - "tPROPPUT", "tPROPPUTREF", "tPTR", "tPUBLIC", "tRANGE", "tREADONLY", - "tREF", "tREQUESTEDIT", "tRESTRICTED", "tRETVAL", "tSAFEARRAY", "tSHORT", - "tSIGNED", "tSINGLE", "tSIZEIS", "tSIZEOF", "tSMALL", "tSOURCE", - "tSTDCALL", "tSTRICTCONTEXTHANDLE", "tSTRING", "tSTRUCT", "tSWITCH", - "tSWITCHIS", "tSWITCHTYPE", "tTRANSMITAS", "tTRUE", "tTYPEDEF", "tUNION", - "tUNIQUE", "tUNSIGNED", "tUUID", "tV1ENUM", "tVARARG", "tVERSION", - "tVOID", "tWCHAR", "tWIREMARSHAL", "','", "'?'", "':'", "'|'", "'&'", - "'-'", "'+'", "'*'", "'/'", "'~'", "CAST", "PPTR", "NEG", "ADDRESSOF", - "';'", "'('", "')'", "'{'", "'}'", "'['", "']'", "'='", "'.'", "$accept", - "input", "gbl_statements", "imp_statements", "int_statements", - "semicolon_opt", "statement", "cppquote", "import_start", "import", - "importlib", "libraryhdr", "library_start", "librarydef", "m_args", - "no_args", "args", "arg", "array", "array_list", "m_attributes", - "attributes", "attrib_list", "str_list", "attribute", "uuid_string", - "callconv", "cases", "case", "constdef", "enums", "enum_list", "enum", - "enumdef", "m_exprs", "m_expr", "expr", "expr_list_const", "expr_const", - "externdef", "fields", "field", "s_field", "funcdef", "m_ident", - "t_ident", "ident", "base_type", "m_int", "int_std", "coclass", - "coclasshdr", "coclassdef", "coclass_ints", "coclass_int", - "dispinterface", "dispinterfacehdr", "dispint_props", "dispint_meths", - "dispinterfacedef", "inherit", "interface", "interfacehdr", - "interfacedef", "interfacedec", "module", "modulehdr", "moduledef", - "pident", "func_ident", "direct_ident", "pident_list", "pointer_type", - "structdef", "type", "typedef", "uniondef", "version", 0 -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short int yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 44, 63, 58, 124, 38, - 45, 43, 42, 47, 126, 390, 391, 392, 393, 59, - 40, 41, 123, 125, 91, 93, 61, 46 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 158, 159, 160, 160, 160, 160, 160, 160, 160, - 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 162, 162, 162, 163, 163, 164, 164, 164, 164, 164, - 164, 164, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 172, 173, 174, 174, 174, 175, 175, 176, 176, - 176, 177, 177, 177, 178, 178, 179, 180, 180, 180, - 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 183, 183, 184, 184, 184, 184, 185, - 185, 186, 186, 187, 188, 188, 188, 189, 189, 190, - 190, 191, 192, 192, 193, 193, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, - 196, 197, 198, 198, 199, 199, 199, 199, 200, 201, - 202, 202, 203, 203, 203, 204, 204, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 206, - 206, 207, 207, 207, 207, 207, 207, 207, 208, 208, - 209, 210, 211, 211, 212, 213, 213, 214, 215, 215, - 216, 216, 217, 217, 218, 218, 219, 219, 220, 221, - 221, 221, 222, 222, 223, 223, 224, 225, 226, 226, - 226, 226, 227, 228, 228, 228, 229, 229, 230, 230, - 230, 231, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 233, 234, 234, 235, 235 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = -{ - 0, 2, 1, 0, 2, 2, 3, 2, 2, 2, - 2, 0, 2, 2, 3, 2, 2, 2, 2, 2, - 0, 3, 2, 0, 1, 2, 1, 2, 2, 1, - 2, 2, 2, 4, 3, 3, 5, 2, 3, 4, - 0, 1, 1, 1, 3, 1, 4, 3, 0, 3, - 3, 1, 3, 4, 0, 1, 3, 1, 3, 4, - 1, 3, 0, 1, 1, 1, 1, 1, 4, 4, - 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, - 4, 1, 4, 4, 4, 1, 1, 4, 4, 4, - 4, 4, 1, 4, 1, 4, 1, 5, 1, 1, - 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 4, 1, 1, 1, 1, 6, 1, 1, 1, 1, - 4, 1, 1, 1, 4, 4, 4, 4, 1, 1, - 4, 4, 1, 1, 1, 1, 1, 1, 1, 0, - 2, 4, 3, 5, 0, 2, 1, 1, 3, 3, - 1, 5, 1, 3, 0, 1, 1, 1, 1, 1, - 1, 1, 5, 3, 3, 3, 3, 3, 3, 3, - 3, 2, 2, 2, 2, 4, 4, 3, 1, 3, - 1, 4, 0, 2, 2, 3, 2, 1, 4, 3, - 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 2, 1, 2, 2, 1, 1, 2, 2, - 2, 5, 0, 2, 2, 2, 2, 2, 2, 3, - 2, 3, 5, 5, 0, 2, 2, 2, 2, 6, - 8, 2, 2, 2, 2, 2, 2, 5, 2, 2, - 2, 1, 4, 1, 3, 1, 1, 3, 1, 1, - 1, 5, 1, 1, 1, 2, 1, 2, 1, 2, - 1, 2, 4, 4, 5, 10, 1, 3 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const unsigned short int yydefact[] = -{ - 3, 0, 2, 1, 0, 0, 0, 0, 192, 0, - 0, 0, 192, 54, 192, 62, 10, 26, 11, 29, - 11, 9, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 23, 0, 234, 5, 4, 0, 8, 0, 0, - 0, 218, 219, 263, 206, 197, 217, 0, 205, 192, - 207, 203, 208, 209, 211, 216, 209, 0, 209, 0, - 204, 213, 192, 192, 202, 262, 198, 266, 264, 199, - 268, 0, 270, 0, 225, 226, 193, 194, 0, 0, - 0, 236, 237, 0, 0, 55, 0, 63, 64, 65, - 66, 67, 0, 0, 70, 71, 72, 73, 74, 75, - 0, 78, 79, 0, 81, 0, 0, 85, 86, 0, - 0, 0, 0, 0, 92, 0, 94, 0, 96, 0, - 98, 99, 0, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 0, 111, 112, 113, 260, 114, 0, 116, - 258, 117, 118, 119, 0, 121, 122, 123, 0, 0, - 0, 259, 0, 128, 129, 0, 0, 0, 57, 132, - 0, 0, 0, 0, 0, 220, 227, 238, 246, 25, - 27, 28, 6, 222, 243, 0, 24, 241, 242, 0, - 0, 20, 30, 31, 32, 265, 267, 210, 215, 214, - 0, 212, 200, 269, 271, 201, 195, 196, 0, 0, - 144, 0, 34, 182, 0, 0, 182, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 154, 0, 0, 154, 0, 0, 0, 0, 0, - 0, 62, 56, 35, 0, 17, 18, 19, 0, 15, - 13, 12, 16, 23, 37, 244, 245, 38, 54, 0, - 54, 0, 0, 235, 20, 54, 0, 0, 33, 0, - 146, 147, 150, 181, 54, 135, 0, 136, 137, 138, - 0, 0, 0, 253, 256, 255, 251, 273, 54, 54, - 0, 161, 156, 157, 158, 159, 0, 160, 0, 0, - 0, 0, 0, 180, 0, 178, 0, 0, 0, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 152, 155, 0, 0, 0, 0, 0, 0, - 134, 133, 0, 276, 0, 0, 58, 62, 0, 14, - 39, 23, 0, 223, 228, 0, 0, 0, 54, 0, - 0, 54, 23, 22, 0, 0, 272, 143, 151, 145, - 0, 187, 261, 0, 55, 183, 0, 249, 248, 0, - 250, 40, 0, 0, 274, 68, 0, 173, 172, 174, - 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 69, 77, 76, 80, 0, 82, 83, - 84, 87, 88, 89, 90, 91, 93, 95, 0, 154, - 100, 110, 0, 120, 124, 125, 126, 127, 0, 130, - 131, 59, 0, 221, 224, 230, 0, 229, 232, 0, - 233, 20, 23, 247, 0, 21, 148, 149, 270, 186, - 184, 254, 262, 0, 45, 41, 43, 0, 0, 257, - 190, 0, 177, 0, 169, 170, 0, 163, 164, 166, - 165, 167, 168, 179, 61, 97, 153, 0, 277, 23, - 48, 231, 54, 239, 189, 185, 252, 0, 0, 48, - 0, 191, 176, 175, 0, 115, 36, 154, 188, 23, - 44, 48, 47, 139, 162, 0, 0, 51, 240, 46, - 0, 50, 0, 49, 0, 0, 275, 140, 52, 0, - 0, 54, 53, 54, 142, 141 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const short int yydefgoto[] = -{ - -1, 1, 2, 160, 255, 177, 343, 17, 18, 19, - 236, 164, 20, 237, 433, 434, 435, 436, 478, 486, - 344, 85, 157, 300, 158, 322, 272, 490, 497, 23, - 259, 260, 261, 67, 311, 312, 293, 294, 295, 25, - 264, 355, 356, 345, 470, 78, 273, 68, 188, 69, - 238, 27, 239, 248, 333, 29, 30, 250, 338, 31, - 180, 32, 33, 240, 241, 168, 36, 242, 274, 275, - 276, 277, 159, 70, 416, 39, 72, 324 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -463 -static const short int yypact[] = -{ - -463, 30, 766, -463, 128, 732, -86, 132, 134, 36, - 71, 140, 134, -61, 134, 910, -463, -463, -463, -463, - -463, -463, 23, -47, -43, -36, -33, -13, -463, -30, - 16, -20, 2, 48, -463, -463, 61, -463, 73, 77, - 79, -463, -463, -463, -463, -463, -463, 732, -463, 151, - -463, -463, -463, 146, -463, -463, 146, 81, 146, 532, - -463, -463, 153, 188, 532, -463, -463, -463, -463, -463, - -463, 190, -463, 221, -463, -463, -463, -463, 80, 732, - 85, -463, -463, 88, 732, -463, -93, -463, -463, -463, - -463, -463, 87, 92, -463, -463, -463, -463, -463, -463, - 93, -463, -463, 94, -463, 96, 97, -463, -463, 98, - 99, 103, 104, 105, -463, 107, -463, 108, -463, 110, - -463, -463, 113, -463, -463, -463, -463, -463, -463, -463, - -463, -463, 115, -463, -463, -463, -463, -463, 118, -463, - -463, -463, -463, -463, 119, -463, -463, -463, 121, 122, - 124, -463, 125, -463, -463, 126, 129, -112, -463, -463, - 28, 742, 275, 193, 131, -463, -463, -463, -463, -463, - -463, -463, -463, -463, -463, -23, -463, -463, -463, 195, - 133, -463, -463, -463, -463, -463, 135, -463, -463, -463, - 732, -463, -463, 135, -90, -463, -463, -463, 130, 141, - 190, 190, -463, -463, 91, 143, -463, 190, 536, 291, - 272, 276, 303, 536, 283, 292, 536, 293, 536, 536, - 245, 536, -68, 536, 536, 536, 732, 732, 199, 298, - 732, 910, 150, -463, 155, -463, -463, -463, 158, -463, - -463, -463, -463, -20, -463, -463, -463, -463, 56, 175, - -58, 164, 163, -463, -463, 352, 171, 536, -463, 172, - 189, -463, 170, -463, -39, -463, 91, -463, -463, -463, - 91, 91, 91, -463, -463, -463, 177, 196, -61, -28, - 179, -463, -463, -463, -463, -463, 182, -463, 536, 536, - 536, 536, 524, 599, -111, -463, 185, 186, 187, -463, - -98, 192, 197, 198, 201, 206, 209, 214, 216, 178, - 325, -60, -463, 599, 217, 204, -34, 239, 218, 220, - -463, -463, 225, 176, 232, 234, -463, 910, 332, -463, - -463, -20, -27, -463, -463, 235, 732, 237, 58, 240, - 318, 768, -20, -463, 732, 246, -463, -463, -463, 190, - 536, -463, -463, 732, 247, -463, 249, -463, -463, 243, - -463, 342, 91, 251, -463, -463, 732, -463, -463, -463, - -463, 575, 254, 536, 536, 536, 536, 536, 536, 536, - 536, 536, 536, -463, -463, -463, -463, 392, -463, -463, - -463, -463, -463, -463, -463, -463, -463, -463, 256, 536, - -463, -463, 536, -463, -463, -463, -463, -463, 403, -463, - -463, -463, 258, -463, -463, -463, 91, -463, -463, 261, - -463, -463, -20, -463, 91, -463, -463, -463, 262, -463, - -463, -463, -31, 265, -463, 277, -463, 732, 91, -463, - 190, 268, -463, 536, -463, -463, 481, 62, 7, -1, - -1, 208, 208, -463, -463, -463, -463, 269, -463, -20, - 259, -463, 779, -463, -463, -463, -463, 458, 91, 259, - 271, -463, -463, -463, 536, -463, -463, 548, -463, -20, - -463, 259, -463, -463, 599, 211, -88, -463, -463, -463, - 10, -463, 536, 267, 536, 288, -463, -463, 599, 536, - 591, -71, 599, -71, -463, -463 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const short int yypgoto[] = -{ - -463, -463, -463, 407, -242, -234, 20, -463, -463, 89, - -463, -463, -463, 426, -463, -463, -463, -35, -399, -463, - -12, -2, -463, -463, -218, -463, -463, -463, -463, -463, - -463, -463, 90, 4, 212, -385, -204, -463, -167, -463, - 231, -462, -223, 100, -463, 49, -67, -463, 72, 63, - 67, -463, 438, -463, -463, 422, -463, -463, -463, -463, - -463, -15, -463, 444, 3, -463, -463, 446, -238, -463, - -463, -463, 236, 6, -3, -463, 1, -463 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -194 -static const short int yytable[] = -{ - 22, 84, 71, 40, 198, 35, 24, 167, 38, 330, - 373, 374, 341, 326, 456, 309, 7, 313, 373, 374, - 313, 317, 16, 231, 382, 335, 205, 337, 357, -193, - 3, 136, 358, 359, 360, 140, 494, 387, 233, 504, - 383, 505, 297, 232, 185, 302, 303, 492, 495, 306, - 11, 308, 4, 388, 11, 363, 315, 4, 151, 206, - 5, 83, -193, 86, 73, 6, 7, 493, 79, 26, - 482, 7, 249, 373, 374, 399, 201, 8, 351, 80, - 9, 204, 489, 15, 367, 368, 369, 370, 371, 165, - 347, 400, 487, 15, 196, 197, 15, 413, 10, 234, - 11, 399, 169, 162, -42, 11, 170, 163, 423, 411, - 351, 83, 86, 171, 352, 15, 172, 403, 265, 174, - -42, 351, 192, 266, 439, 364, 15, 195, 189, 176, - 191, 41, 42, 262, 263, 74, 75, 76, 77, 173, - 280, 380, 381, 81, 82, 267, 12, 378, 379, 380, - 381, 178, 13, 14, 186, 77, 193, 77, 22, 22, - 251, 40, 40, 496, 24, 24, 38, 38, 175, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 460, 462, - 235, 235, 15, 427, 268, 179, 464, 256, 463, 373, - 374, 194, 77, 196, 197, 313, 245, 246, 252, 253, - 469, 377, 378, 379, 380, 381, 269, 320, 321, 331, - 15, 418, 15, 181, 281, 453, 282, 283, 284, 373, - 374, 187, 182, 318, 319, 476, 183, 325, 184, 199, - 481, 190, 200, 270, 202, 457, 332, 207, 336, 473, - 203, 271, 208, 209, 210, 488, 211, 212, 213, 214, - 373, 374, 353, 215, 216, 217, 40, 218, 219, 24, - 220, 38, 354, 221, 285, 222, 336, 353, 223, 224, - 484, 225, 226, 313, 227, 228, 229, 354, 244, 230, - 298, 369, 262, 247, 299, 254, 257, -193, 498, 372, - 500, 304, 258, 278, 281, 502, 282, 283, 284, 296, - 305, 307, 310, 323, 327, 328, 281, 329, 282, 283, - 284, 301, 334, 339, 375, 340, 376, 377, 378, 379, - 380, 381, 346, 286, 349, 348, 350, 361, 398, 397, - 365, 362, 366, 408, 287, 414, 384, 385, 386, 402, - 412, 424, 40, 389, 285, 24, 43, 38, 390, 391, - 288, 289, 392, 290, 428, 291, 285, 393, 438, 437, - 394, 292, 44, 441, 45, 395, 491, 396, 401, 405, - 46, 406, 415, 471, 47, 375, 407, 376, 377, 378, - 379, 380, 381, 409, 5, 410, 417, 48, 10, 6, - 404, 49, 50, 420, 431, 425, 429, 51, 430, 52, - 454, 8, 440, 286, 9, 443, 53, 455, 458, 459, - 461, 465, 467, 477, 287, 286, 466, 54, 55, 472, - 475, 499, 10, 483, 56, 501, 287, 161, 21, 421, - 288, 289, 480, 290, 468, 291, 316, 279, 419, 426, - 28, 292, 288, 289, 166, 290, 34, 291, 37, 57, - 58, 59, 60, 292, 0, 61, 0, 0, 314, 0, - 62, 0, 43, 40, 438, 437, 24, 63, 38, 64, - 12, 0, 0, 0, 432, 66, 13, 14, 44, 0, - 45, 0, 0, 0, 0, 0, 46, 0, 0, 353, - 47, 353, 373, 374, 0, 0, 15, 0, 0, 354, - 0, 354, 0, 48, 0, 342, 15, 49, 50, 0, - 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, - 0, 0, 53, 0, 0, 0, 0, 281, 43, 282, - 283, 284, 0, 54, 55, 0, 0, 0, 0, 281, - 56, 282, 283, 284, 44, 0, 45, 0, 0, 0, - 0, 281, 46, 282, 283, 284, 47, 0, 0, 0, - 46, 0, 0, 0, 0, 57, 58, 59, 60, 48, - 0, 61, 0, 49, 50, 0, 62, 285, 0, 51, - 0, 52, 0, 63, 0, 64, 373, 374, 53, 285, - 65, 66, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 285, 373, 374, 0, 0, 56, 54, 55, 0, - 373, 374, 15, 0, 56, 0, 0, 375, 474, 376, - 377, 378, 379, 380, 381, 0, 0, 0, 0, 0, - 0, 57, 58, 59, 60, 0, 286, 61, 0, 0, - 58, 0, 62, 0, 0, 61, 0, 287, 286, 63, - 0, 64, 0, 0, 0, 0, 65, 66, 0, 287, - 286, 0, 0, 288, 289, 0, 290, 0, 291, 0, - 0, 287, 0, 0, 292, 288, 289, 0, 290, 0, - 291, 0, 0, 0, 0, 0, 292, 288, 289, 0, - 485, 0, 291, 0, 0, 0, 0, 0, 292, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 375, 0, 376, 377, 378, 379, 380, 381, 0, - 0, 0, 0, 0, 0, 0, 442, 375, 503, 376, - 377, 378, 379, 380, 381, 375, 43, 376, 377, 378, - 379, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 0, 45, 0, 0, 0, 0, 0, - 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 5, 0, 0, 48, 0, 6, - 0, 49, 50, 0, 0, 7, 0, 51, 0, 52, - 0, 8, 0, 0, 9, 4, 53, 0, 5, 0, - 5, 0, 0, 6, 0, 6, 0, 54, 55, 7, - 0, 5, 10, 234, 56, 8, 6, 8, 9, 11, - 9, 0, 0, 0, 0, 0, 0, 0, 8, 0, - 0, 9, 0, 0, 0, 0, 10, 0, 10, 57, - 58, 59, 60, 11, 0, 61, 0, 0, 0, 10, - 62, 0, 0, 0, 0, 0, 0, 63, 0, 64, - 12, 0, 0, 0, 65, 66, 13, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 12, 0, 12, 0, 0, 0, - 13, 14, 13, 14, 0, 243, 15, 12, 0, 0, - 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 422, 15, 87, 0, 88, 89, 0, 90, 91, - 0, 0, 479, 15, 92, 0, 93, 0, 0, 0, - 0, 0, 0, 94, 95, 96, 97, 0, 98, 99, - 100, 101, 102, 0, 103, 0, 104, 105, 106, 0, - 0, 107, 0, 0, 0, 0, 108, 0, 109, 110, - 111, 112, 113, 114, 0, 115, 116, 117, 118, 119, - 0, 0, 120, 0, 121, 0, 0, 0, 0, 122, - 0, 123, 0, 0, 0, 124, 125, 126, 127, 128, - 129, 130, 131, 0, 132, 0, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, - 0, 144, 0, 0, 145, 0, 146, 147, 0, 0, - 148, 149, 150, 0, 0, 0, 151, 0, 152, 153, - 154, 155, 0, 0, 156 -}; - -static const short int yycheck[] = -{ - 2, 13, 5, 2, 71, 2, 2, 22, 2, 243, - 11, 12, 254, 231, 399, 219, 43, 221, 11, 12, - 224, 225, 2, 135, 135, 83, 119, 250, 266, 119, - 0, 99, 270, 271, 272, 103, 26, 135, 10, 501, - 151, 503, 209, 155, 47, 212, 213, 135, 38, 216, - 77, 218, 29, 151, 77, 278, 223, 29, 126, 152, - 32, 12, 152, 14, 150, 37, 43, 155, 32, 2, - 469, 43, 95, 11, 12, 135, 79, 49, 149, 8, - 52, 84, 481, 154, 288, 289, 290, 291, 292, 22, - 257, 151, 477, 154, 3, 4, 154, 331, 70, 71, - 77, 135, 149, 80, 135, 77, 149, 84, 342, 327, - 149, 62, 63, 149, 153, 154, 149, 151, 27, 149, - 151, 149, 59, 32, 362, 153, 154, 64, 56, 149, - 58, 3, 4, 200, 201, 3, 4, 3, 4, 152, - 207, 142, 143, 3, 4, 54, 118, 140, 141, 142, - 143, 149, 124, 125, 3, 4, 3, 4, 160, 161, - 175, 160, 161, 153, 160, 161, 160, 161, 152, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 416, 421, - 160, 161, 154, 350, 93, 137, 424, 190, 422, 11, - 12, 3, 4, 3, 4, 399, 3, 4, 3, 4, - 438, 139, 140, 141, 142, 143, 115, 8, 9, 153, - 154, 153, 154, 152, 3, 382, 5, 6, 7, 11, - 12, 75, 149, 226, 227, 459, 149, 230, 149, 8, - 468, 150, 152, 142, 149, 402, 248, 150, 250, 443, - 152, 150, 150, 150, 150, 479, 150, 150, 150, 150, - 11, 12, 264, 150, 150, 150, 255, 150, 150, 255, - 150, 255, 264, 150, 53, 150, 278, 279, 150, 150, - 474, 150, 150, 477, 150, 150, 150, 279, 3, 150, - 8, 485, 349, 152, 8, 152, 156, 152, 492, 292, - 494, 8, 151, 150, 3, 499, 5, 6, 7, 8, - 8, 8, 57, 5, 154, 150, 3, 149, 5, 6, - 7, 8, 137, 149, 136, 152, 138, 139, 140, 141, - 142, 143, 151, 112, 135, 153, 156, 150, 3, 151, - 151, 135, 150, 157, 123, 332, 151, 151, 151, 135, - 8, 344, 341, 151, 53, 341, 4, 341, 151, 151, - 139, 140, 151, 142, 353, 144, 53, 151, 361, 361, - 151, 150, 20, 366, 22, 151, 155, 151, 151, 151, - 28, 151, 137, 440, 32, 136, 151, 138, 139, 140, - 141, 142, 143, 151, 32, 151, 149, 45, 70, 37, - 151, 49, 50, 153, 151, 149, 149, 55, 149, 57, - 8, 49, 151, 112, 52, 151, 64, 151, 5, 151, - 149, 149, 135, 154, 123, 112, 151, 75, 76, 151, - 151, 154, 70, 152, 82, 137, 123, 20, 2, 340, - 139, 140, 467, 142, 437, 144, 224, 206, 338, 349, - 2, 150, 139, 140, 22, 142, 2, 144, 2, 107, - 108, 109, 110, 150, -1, 113, -1, -1, 222, -1, - 118, -1, 4, 462, 467, 467, 462, 125, 462, 127, - 118, -1, -1, -1, 132, 133, 124, 125, 20, -1, - 22, -1, -1, -1, -1, -1, 28, -1, -1, 501, - 32, 503, 11, 12, -1, -1, 154, -1, -1, 501, - -1, 503, -1, 45, -1, 153, 154, 49, 50, -1, - -1, -1, -1, 55, -1, 57, -1, -1, -1, -1, - -1, -1, 64, -1, -1, -1, -1, 3, 4, 5, - 6, 7, -1, 75, 76, -1, -1, -1, -1, 3, - 82, 5, 6, 7, 20, -1, 22, -1, -1, -1, - -1, 3, 28, 5, 6, 7, 32, -1, -1, -1, - 28, -1, -1, -1, -1, 107, 108, 109, 110, 45, - -1, 113, -1, 49, 50, -1, 118, 53, -1, 55, - -1, 57, -1, 125, -1, 127, 11, 12, 64, 53, - 132, 133, -1, -1, -1, -1, 64, -1, -1, 75, - 76, 53, 11, 12, -1, -1, 82, 75, 76, -1, - 11, 12, 154, -1, 82, -1, -1, 136, 137, 138, - 139, 140, 141, 142, 143, -1, -1, -1, -1, -1, - -1, 107, 108, 109, 110, -1, 112, 113, -1, -1, - 108, -1, 118, -1, -1, 113, -1, 123, 112, 125, - -1, 127, -1, -1, -1, -1, 132, 133, -1, 123, - 112, -1, -1, 139, 140, -1, 142, -1, 144, -1, - -1, 123, -1, -1, 150, 139, 140, -1, 142, -1, - 144, -1, -1, -1, -1, -1, 150, 139, 140, -1, - 142, -1, 144, -1, -1, -1, -1, -1, 150, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 136, -1, 138, 139, 140, 141, 142, 143, -1, - -1, -1, -1, -1, -1, -1, 151, 136, 137, 138, - 139, 140, 141, 142, 143, 136, 4, 138, 139, 140, - 141, 142, 143, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 20, -1, 22, -1, -1, -1, -1, -1, - 28, -1, -1, -1, 32, -1, -1, -1, -1, -1, - -1, 29, -1, -1, 32, -1, -1, 45, -1, 37, - -1, 49, 50, -1, -1, 43, -1, 55, -1, 57, - -1, 49, -1, -1, 52, 29, 64, -1, 32, -1, - 32, -1, -1, 37, -1, 37, -1, 75, 76, 43, - -1, 32, 70, 71, 82, 49, 37, 49, 52, 77, - 52, -1, -1, -1, -1, -1, -1, -1, 49, -1, - -1, 52, -1, -1, -1, -1, 70, -1, 70, 107, - 108, 109, 110, 77, -1, 113, -1, -1, -1, 70, - 118, -1, -1, -1, -1, -1, -1, 125, -1, 127, - 118, -1, -1, -1, 132, 133, 124, 125, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 118, -1, 118, -1, -1, -1, - 124, 125, 124, 125, -1, 153, 154, 118, -1, -1, - -1, -1, -1, 124, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 154, 153, 154, 13, -1, 15, 16, -1, 18, 19, - -1, -1, 153, 154, 24, -1, 26, -1, -1, -1, - -1, -1, -1, 33, 34, 35, 36, -1, 38, 39, - 40, 41, 42, -1, 44, -1, 46, 47, 48, -1, - -1, 51, -1, -1, -1, -1, 56, -1, 58, 59, - 60, 61, 62, 63, -1, 65, 66, 67, 68, 69, - -1, -1, 72, -1, 74, -1, -1, -1, -1, 79, - -1, 81, -1, -1, -1, 85, 86, 87, 88, 89, - 90, 91, 92, -1, 94, -1, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, -1, -1, -1, - -1, 111, -1, -1, 114, -1, 116, 117, -1, -1, - 120, 121, 122, -1, -1, -1, 126, -1, 128, 129, - 130, 131, -1, -1, 134 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 159, 160, 0, 29, 32, 37, 43, 49, 52, - 70, 77, 118, 124, 125, 154, 164, 165, 166, 167, - 170, 171, 179, 187, 191, 197, 208, 209, 210, 213, - 214, 217, 219, 220, 221, 222, 224, 225, 231, 233, - 234, 3, 4, 4, 20, 22, 28, 32, 45, 49, - 50, 55, 57, 64, 75, 76, 82, 107, 108, 109, - 110, 113, 118, 125, 127, 132, 133, 191, 205, 207, - 231, 232, 234, 150, 3, 4, 3, 4, 203, 32, - 8, 3, 4, 203, 178, 179, 203, 13, 15, 16, - 18, 19, 24, 26, 33, 34, 35, 36, 38, 39, - 40, 41, 42, 44, 46, 47, 48, 51, 56, 58, - 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, - 72, 74, 79, 81, 85, 86, 87, 88, 89, 90, - 91, 92, 94, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 111, 114, 116, 117, 120, 121, - 122, 126, 128, 129, 130, 131, 134, 180, 182, 230, - 161, 161, 80, 84, 169, 208, 213, 219, 223, 149, - 149, 149, 149, 152, 149, 152, 149, 163, 149, 137, - 218, 152, 149, 149, 149, 232, 3, 75, 206, 206, - 150, 206, 207, 3, 3, 207, 3, 4, 204, 8, - 152, 232, 149, 152, 232, 119, 152, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 135, 155, 10, 71, 164, 168, 171, 208, 210, - 221, 222, 225, 153, 3, 3, 4, 152, 211, 95, - 215, 219, 3, 4, 152, 162, 232, 156, 151, 188, - 189, 190, 204, 204, 198, 27, 32, 54, 93, 115, - 142, 150, 184, 204, 226, 227, 228, 229, 150, 198, - 204, 3, 5, 6, 7, 53, 112, 123, 139, 140, - 142, 144, 150, 194, 195, 196, 8, 196, 8, 8, - 181, 8, 196, 196, 8, 8, 196, 8, 196, 194, - 57, 192, 193, 194, 230, 196, 192, 194, 232, 232, - 8, 9, 183, 5, 235, 232, 182, 154, 150, 149, - 163, 153, 178, 212, 137, 83, 178, 200, 216, 149, - 152, 162, 153, 164, 178, 201, 151, 196, 153, 135, - 156, 149, 153, 178, 179, 199, 200, 226, 226, 226, - 226, 150, 135, 200, 153, 151, 150, 194, 194, 194, - 194, 194, 232, 11, 12, 136, 138, 139, 140, 141, - 142, 143, 135, 151, 151, 151, 151, 135, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, 3, 135, - 151, 151, 135, 151, 151, 151, 151, 151, 157, 151, - 151, 182, 8, 163, 222, 137, 232, 149, 153, 201, - 153, 167, 153, 163, 232, 149, 190, 196, 234, 149, - 149, 151, 132, 172, 173, 174, 175, 179, 232, 226, - 151, 232, 151, 151, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 196, 8, 151, 193, 196, 5, 151, - 226, 149, 162, 163, 226, 149, 151, 135, 232, 226, - 202, 204, 151, 194, 137, 151, 163, 154, 176, 153, - 175, 226, 176, 152, 194, 142, 177, 193, 163, 176, - 185, 155, 135, 155, 26, 38, 153, 186, 194, 154, - 194, 137, 194, 137, 199, 199 -}; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ - -#define YYFAIL goto yyerrlab - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) - - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short int *bottom, short int *top) -#else -static void -yy_stack_print (bottom, top) - short int *bottom; - short int *top; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; -#endif -{ - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ", - yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]); -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - size_t yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -#endif /* YYERROR_VERBOSE */ - - - -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else -static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); -} - -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - -/* The look-ahead symbol. */ -int yychar; - -/* The semantic value of the look-ahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) -#else -int -yyparse () - ; -#endif -#endif -{ - - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short int yyssa[YYINITDEPTH]; - short int *yyss = yyssa; - short int *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - -#define YYPOPSTACK (yyvsp--, yyssp--) - - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; - - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short int *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - short int *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a look-ahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to look-ahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) - goto yydefault; - - /* Not known => get a look-ahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the look-ahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; - - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - yystate = yyn; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -#line 292 "parser.y" - { fix_incomplete(); - check_all_user_types((yyvsp[0].ifref_list)); - write_proxies((yyvsp[0].ifref_list)); - write_client((yyvsp[0].ifref_list)); - write_server((yyvsp[0].ifref_list)); - write_dlldata((yyvsp[0].ifref_list)); - ;} - break; - - case 3: -#line 301 "parser.y" - { (yyval.ifref_list) = NULL; ;} - break; - - case 4: -#line 302 "parser.y" - { (yyval.ifref_list) = (yyvsp[-1].ifref_list); ;} - break; - - case 5: -#line 303 "parser.y" - { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), make_ifref((yyvsp[0].type)) ); ;} - break; - - case 6: -#line 304 "parser.y" - { (yyval.ifref_list) = (yyvsp[-2].ifref_list); - reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, 0); - if (!parse_only && do_header) write_coclass_forward((yyvsp[-1].type)); - ;} - break; - - case 7: -#line 308 "parser.y" - { (yyval.ifref_list) = (yyvsp[-1].ifref_list); - add_typelib_entry((yyvsp[0].type)); - reg_type((yyvsp[0].type), (yyvsp[0].type)->name, 0); - if (!parse_only && do_header) write_coclass_forward((yyvsp[0].type)); - ;} - break; - - case 8: -#line 313 "parser.y" - { (yyval.ifref_list) = (yyvsp[-1].ifref_list); add_typelib_entry((yyvsp[0].type)); ;} - break; - - case 9: -#line 314 "parser.y" - { (yyval.ifref_list) = (yyvsp[-1].ifref_list); ;} - break; - - case 10: -#line 315 "parser.y" - { (yyval.ifref_list) = (yyvsp[-1].ifref_list); ;} - break; - - case 11: -#line 318 "parser.y" - {;} - break; - - case 12: -#line 319 "parser.y" - { if (!parse_only) add_typelib_entry((yyvsp[0].type)); ;} - break; - - case 13: -#line 320 "parser.y" - { if (!parse_only) add_typelib_entry((yyvsp[0].type)); ;} - break; - - case 14: -#line 321 "parser.y" - { reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, 0); if (!parse_only && do_header) write_coclass_forward((yyvsp[-1].type)); ;} - break; - - case 15: -#line 322 "parser.y" - { if (!parse_only) add_typelib_entry((yyvsp[0].type)); - reg_type((yyvsp[0].type), (yyvsp[0].type)->name, 0); - if (!parse_only && do_header) write_coclass_forward((yyvsp[0].type)); - ;} - break; - - case 16: -#line 326 "parser.y" - { if (!parse_only) add_typelib_entry((yyvsp[0].type)); ;} - break; - - case 17: -#line 327 "parser.y" - {;} - break; - - case 18: -#line 328 "parser.y" - {;} - break; - - case 19: -#line 329 "parser.y" - {;} - break; - - case 20: -#line 332 "parser.y" - { (yyval.func_list) = NULL; ;} - break; - - case 21: -#line 333 "parser.y" - { (yyval.func_list) = append_func( (yyvsp[-2].func_list), (yyvsp[-1].func) ); ;} - break; - - case 22: -#line 334 "parser.y" - { (yyval.func_list) = (yyvsp[-1].func_list); ;} - break; - - case 25: -#line 341 "parser.y" - { if (!parse_only && do_header) { write_constdef((yyvsp[-1].var)); } ;} - break; - - case 26: -#line 342 "parser.y" - {;} - break; - - case 27: -#line 343 "parser.y" - { if (!parse_only && do_header) { - write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL); - fprintf(header, ";\n\n"); - } - ;} - break; - - case 28: -#line 348 "parser.y" - { if (!parse_only && do_header) { write_externdef((yyvsp[-1].var)); } ;} - break; - - case 29: -#line 349 "parser.y" - {;} - break; - - case 30: -#line 350 "parser.y" - { if (!parse_only && do_header) { - write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL); - fprintf(header, ";\n\n"); - } - ;} - break; - - case 31: -#line 355 "parser.y" - {;} - break; - - case 32: -#line 356 "parser.y" - { if (!parse_only && do_header) { - write_type_def_or_decl(header, (yyvsp[-1].type), FALSE, NULL); - fprintf(header, ";\n\n"); - } - ;} - break; - - case 33: -#line 363 "parser.y" - { if (!parse_only && do_header) fprintf(header, "%s\n", (yyvsp[-1].str)); ;} - break; - - case 34: -#line 365 "parser.y" - { assert(yychar == YYEMPTY); - (yyval.num) = do_import((yyvsp[-1].str)); - if (!(yyval.num)) yychar = aEOF; - ;} - break; - - case 35: -#line 372 "parser.y" - { if ((yyvsp[-2].num)) pop_import(); ;} - break; - - case 36: -#line 376 "parser.y" - { if(!parse_only) add_importlib((yyvsp[-2].str)); ;} - break; - - case 37: -#line 379 "parser.y" - { (yyval.str) = (yyvsp[0].str); ;} - break; - - case 38: -#line 381 "parser.y" - { if (!parse_only) start_typelib((yyvsp[-1].str), (yyvsp[-2].attr_list)); - if (!parse_only && do_header) write_library((yyvsp[-1].str), (yyvsp[-2].attr_list)); - if (!parse_only && do_idfile) write_libid((yyvsp[-1].str), (yyvsp[-2].attr_list)); - ;} - break; - - case 39: -#line 387 "parser.y" - { if (!parse_only) end_typelib(); ;} - break; - - case 40: -#line 390 "parser.y" - { (yyval.var_list) = NULL; ;} - break; - - case 42: -#line 394 "parser.y" - { (yyval.var_list) = NULL; ;} - break; - - case 43: -#line 397 "parser.y" - { check_arg((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); ;} - break; - - case 44: -#line 398 "parser.y" - { check_arg((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var)); ;} - break; - - case 46: -#line 403 "parser.y" - { (yyval.var) = (yyvsp[-1].pident)->var; - (yyval.var)->attrs = (yyvsp[-3].attr_list); - set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident), (yyvsp[0].array_dims), TRUE); - free((yyvsp[-1].pident)); - ;} - break; - - case 47: -#line 408 "parser.y" - { (yyval.var) = (yyvsp[-1].pident)->var; - set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident), (yyvsp[0].array_dims), TRUE); - free((yyvsp[-1].pident)); - ;} - break; - - case 48: -#line 414 "parser.y" - { (yyval.array_dims) = NULL; ;} - break; - - case 49: -#line 415 "parser.y" - { (yyval.array_dims) = (yyvsp[-1].array_dims); ;} - break; - - case 50: -#line 416 "parser.y" - { (yyval.array_dims) = append_array( NULL, make_expr(EXPR_VOID) ); ;} - break; - - case 51: -#line 419 "parser.y" - { (yyval.array_dims) = append_array( NULL, (yyvsp[0].expr) ); ;} - break; - - case 52: -#line 420 "parser.y" - { (yyval.array_dims) = append_array( (yyvsp[-2].array_dims), (yyvsp[0].expr) ); ;} - break; - - case 53: -#line 421 "parser.y" - { (yyval.array_dims) = append_array( (yyvsp[-3].array_dims), (yyvsp[0].expr) ); ;} - break; - - case 54: -#line 424 "parser.y" - { (yyval.attr_list) = NULL; ;} - break; - - case 56: -#line 429 "parser.y" - { (yyval.attr_list) = (yyvsp[-1].attr_list); - if (!(yyval.attr_list)) - error_loc("empty attribute lists unsupported\n"); - ;} - break; - - case 57: -#line 435 "parser.y" - { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); ;} - break; - - case 58: -#line 436 "parser.y" - { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); ;} - break; - - case 59: -#line 437 "parser.y" - { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); ;} - break; - - case 60: -#line 440 "parser.y" - { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); ;} - break; - - case 61: -#line 441 "parser.y" - { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); ;} - break; - - case 62: -#line 444 "parser.y" - { (yyval.attr) = NULL; ;} - break; - - case 63: -#line 445 "parser.y" - { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); ;} - break; - - case 64: -#line 446 "parser.y" - { (yyval.attr) = make_attr(ATTR_APPOBJECT); ;} - break; - - case 65: -#line 447 "parser.y" - { (yyval.attr) = make_attr(ATTR_ASYNC); ;} - break; - - case 66: -#line 448 "parser.y" - { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); ;} - break; - - case 67: -#line 449 "parser.y" - { (yyval.attr) = make_attr(ATTR_BINDABLE); ;} - break; - - case 68: -#line 450 "parser.y" - { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); ;} - break; - - case 69: -#line 451 "parser.y" - { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); ;} - break; - - case 70: -#line 452 "parser.y" - { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); ;} - break; - - case 71: -#line 453 "parser.y" - { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ ;} - break; - - case 72: -#line 454 "parser.y" - { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ ;} - break; - - case 73: -#line 455 "parser.y" - { (yyval.attr) = make_attr(ATTR_CONTROL); ;} - break; - - case 74: -#line 456 "parser.y" - { (yyval.attr) = make_attr(ATTR_DEFAULT); ;} - break; - - case 75: -#line 457 "parser.y" - { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); ;} - break; - - case 76: -#line 458 "parser.y" - { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_EXPR, (yyvsp[-1].expr)); ;} - break; - - case 77: -#line 459 "parser.y" - { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE_STRING, (yyvsp[-1].str)); ;} - break; - - case 78: -#line 460 "parser.y" - { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); ;} - break; - - case 79: -#line 461 "parser.y" - { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); ;} - break; - - case 80: -#line 462 "parser.y" - { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); ;} - break; - - case 81: -#line 463 "parser.y" - { (yyval.attr) = make_attr(ATTR_DUAL); ;} - break; - - case 82: -#line 464 "parser.y" - { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); ;} - break; - - case 83: -#line 465 "parser.y" - { (yyval.attr) = make_attrp(ATTR_ENTRY_STRING, (yyvsp[-1].str)); ;} - break; - - case 84: -#line 466 "parser.y" - { (yyval.attr) = make_attrp(ATTR_ENTRY_ORDINAL, (yyvsp[-1].expr)); ;} - break; - - case 85: -#line 467 "parser.y" - { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); ;} - break; - - case 86: -#line 468 "parser.y" - { (yyval.attr) = make_attr(ATTR_HANDLE); ;} - break; - - case 87: -#line 469 "parser.y" - { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); ;} - break; - - case 88: -#line 470 "parser.y" - { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); ;} - break; - - case 89: -#line 471 "parser.y" - { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); ;} - break; - - case 90: -#line 472 "parser.y" - { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); ;} - break; - - case 91: -#line 473 "parser.y" - { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); ;} - break; - - case 92: -#line 474 "parser.y" - { (yyval.attr) = make_attr(ATTR_HIDDEN); ;} - break; - - case 93: -#line 475 "parser.y" - { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); ;} - break; - - case 94: -#line 476 "parser.y" - { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); ;} - break; - - case 95: -#line 477 "parser.y" - { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); ;} - break; - - case 96: -#line 478 "parser.y" - { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); ;} - break; - - case 97: -#line 479 "parser.y" - { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].str)); ;} - break; - - case 98: -#line 480 "parser.y" - { (yyval.attr) = make_attr(ATTR_IN); ;} - break; - - case 99: -#line 481 "parser.y" - { (yyval.attr) = make_attr(ATTR_INPUTSYNC); ;} - break; - - case 100: -#line 482 "parser.y" - { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); ;} - break; - - case 101: -#line 483 "parser.y" - { (yyval.attr) = make_attr(ATTR_LOCAL); ;} - break; - - case 102: -#line 484 "parser.y" - { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); ;} - break; - - case 103: -#line 485 "parser.y" - { (yyval.attr) = make_attr(ATTR_NONCREATABLE); ;} - break; - - case 104: -#line 486 "parser.y" - { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); ;} - break; - - case 105: -#line 487 "parser.y" - { (yyval.attr) = make_attr(ATTR_OBJECT); ;} - break; - - case 106: -#line 488 "parser.y" - { (yyval.attr) = make_attr(ATTR_ODL); ;} - break; - - case 107: -#line 489 "parser.y" - { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); ;} - break; - - case 108: -#line 490 "parser.y" - { (yyval.attr) = make_attr(ATTR_OPTIONAL); ;} - break; - - case 109: -#line 491 "parser.y" - { (yyval.attr) = make_attr(ATTR_OUT); ;} - break; - - case 110: -#line 492 "parser.y" - { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); ;} - break; - - case 111: -#line 493 "parser.y" - { (yyval.attr) = make_attr(ATTR_PROPGET); ;} - break; - - case 112: -#line 494 "parser.y" - { (yyval.attr) = make_attr(ATTR_PROPPUT); ;} - break; - - case 113: -#line 495 "parser.y" - { (yyval.attr) = make_attr(ATTR_PROPPUTREF); ;} - break; - - case 114: -#line 496 "parser.y" - { (yyval.attr) = make_attr(ATTR_PUBLIC); ;} - break; - - case 115: -#line 497 "parser.y" - { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) ); - list = append_expr( list, (yyvsp[-1].expr) ); - (yyval.attr) = make_attrp(ATTR_RANGE, list); ;} - break; - - case 116: -#line 500 "parser.y" - { (yyval.attr) = make_attr(ATTR_READONLY); ;} - break; - - case 117: -#line 501 "parser.y" - { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); ;} - break; - - case 118: -#line 502 "parser.y" - { (yyval.attr) = make_attr(ATTR_RESTRICTED); ;} - break; - - case 119: -#line 503 "parser.y" - { (yyval.attr) = make_attr(ATTR_RETVAL); ;} - break; - - case 120: -#line 504 "parser.y" - { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); ;} - break; - - case 121: -#line 505 "parser.y" - { (yyval.attr) = make_attr(ATTR_SOURCE); ;} - break; - - case 122: -#line 506 "parser.y" - { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); ;} - break; - - case 123: -#line 507 "parser.y" - { (yyval.attr) = make_attr(ATTR_STRING); ;} - break; - - case 124: -#line 508 "parser.y" - { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); ;} - break; - - case 125: -#line 509 "parser.y" - { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); ;} - break; - - case 126: -#line 510 "parser.y" - { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); ;} - break; - - case 127: -#line 511 "parser.y" - { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); ;} - break; - - case 128: -#line 512 "parser.y" - { (yyval.attr) = make_attr(ATTR_V1ENUM); ;} - break; - - case 129: -#line 513 "parser.y" - { (yyval.attr) = make_attr(ATTR_VARARG); ;} - break; - - case 130: -#line 514 "parser.y" - { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); ;} - break; - - case 131: -#line 515 "parser.y" - { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); ;} - break; - - case 132: -#line 516 "parser.y" - { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); ;} - break; - - case 134: -#line 521 "parser.y" - { if (!is_valid_uuid((yyvsp[0].str))) - error_loc("invalid UUID: %s\n", (yyvsp[0].str)); - (yyval.uuid) = parse_uuid((yyvsp[0].str)); ;} - break; - - case 135: -#line 526 "parser.y" - { (yyval.str) = (yyvsp[0].str); ;} - break; - - case 136: -#line 527 "parser.y" - { (yyval.str) = (yyvsp[0].str); ;} - break; - - case 137: -#line 528 "parser.y" - { (yyval.str) = (yyvsp[0].str); ;} - break; - - case 138: -#line 529 "parser.y" - { (yyval.str) = (yyvsp[0].str); ;} - break; - - case 139: -#line 532 "parser.y" - { (yyval.var_list) = NULL; ;} - break; - - case 140: -#line 533 "parser.y" - { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); ;} - break; - - case 141: -#line 536 "parser.y" - { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) )); - (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL); - (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a ); - ;} - break; - - case 142: -#line 540 "parser.y" - { attr_t *a = make_attr(ATTR_DEFAULT); - (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL); - (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a ); - ;} - break; - - case 143: -#line 546 "parser.y" - { (yyval.var) = reg_const((yyvsp[-2].var)); - set_type((yyval.var), (yyvsp[-3].type), NULL, NULL, FALSE); - (yyval.var)->eval = (yyvsp[0].expr); - ;} - break; - - case 144: -#line 552 "parser.y" - { (yyval.var_list) = NULL; ;} - break; - - case 145: -#line 553 "parser.y" - { (yyval.var_list) = (yyvsp[-1].var_list); ;} - break; - - case 147: -#line 557 "parser.y" - { if (!(yyvsp[0].var)->eval) - (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */); - (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); - ;} - break; - - case 148: -#line 561 "parser.y" - { if (!(yyvsp[0].var)->eval) - { - var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry ); - (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, last->eval->cval + 1); - } - (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); - ;} - break; - - case 149: -#line 570 "parser.y" - { (yyval.var) = reg_const((yyvsp[-2].var)); - (yyval.var)->eval = (yyvsp[0].expr); - (yyval.var)->type = make_int(0); - ;} - break; - - case 150: -#line 574 "parser.y" - { (yyval.var) = reg_const((yyvsp[0].var)); - (yyval.var)->type = make_int(0); - ;} - break; - - case 151: -#line 579 "parser.y" - { (yyval.type) = get_typev(RPC_FC_ENUM16, (yyvsp[-3].var), tsENUM); - (yyval.type)->kind = TKIND_ENUM; - (yyval.type)->fields_or_args = (yyvsp[-1].var_list); - (yyval.type)->defined = TRUE; - if(in_typelib) - add_typelib_entry((yyval.type)); - ;} - break; - - case 152: -#line 588 "parser.y" - { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;} - break; - - case 153: -#line 589 "parser.y" - { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;} - break; - - case 154: -#line 602 "parser.y" - { (yyval.expr) = make_expr(EXPR_VOID); ;} - break; - - case 156: -#line 606 "parser.y" - { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); ;} - break; - - case 157: -#line 607 "parser.y" - { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); ;} - break; - - case 158: -#line 608 "parser.y" - { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); ;} - break; - - case 159: -#line 609 "parser.y" - { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); ;} - break; - - case 160: -#line 610 "parser.y" - { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); ;} - break; - - case 161: -#line 611 "parser.y" - { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); ;} - break; - - case 162: -#line 612 "parser.y" - { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 163: -#line 613 "parser.y" - { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 164: -#line 614 "parser.y" - { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 165: -#line 615 "parser.y" - { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 166: -#line 616 "parser.y" - { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 167: -#line 617 "parser.y" - { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 168: -#line 618 "parser.y" - { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 169: -#line 619 "parser.y" - { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 170: -#line 620 "parser.y" - { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} - break; - - case 171: -#line 621 "parser.y" - { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); ;} - break; - - case 172: -#line 622 "parser.y" - { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); ;} - break; - - case 173: -#line 623 "parser.y" - { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); ;} - break; - - case 174: -#line 624 "parser.y" - { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); ;} - break; - - case 175: -#line 625 "parser.y" - { (yyval.expr) = make_exprt(EXPR_CAST, (yyvsp[-2].type), (yyvsp[0].expr)); ;} - break; - - case 176: -#line 626 "parser.y" - { (yyval.expr) = make_exprt(EXPR_SIZEOF, (yyvsp[-1].type), NULL); ;} - break; - - case 177: -#line 627 "parser.y" - { (yyval.expr) = (yyvsp[-1].expr); ;} - break; - - case 178: -#line 630 "parser.y" - { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); ;} - break; - - case 179: -#line 631 "parser.y" - { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); ;} - break; - - case 180: -#line 634 "parser.y" - { (yyval.expr) = (yyvsp[0].expr); - if (!(yyval.expr)->is_const) - error_loc("expression is not constant\n"); - ;} - break; - - case 181: -#line 640 "parser.y" - { (yyval.var) = (yyvsp[0].var); - set_type((yyval.var), (yyvsp[-1].type), NULL, NULL, FALSE); - ;} - break; - - case 182: -#line 645 "parser.y" - { (yyval.var_list) = NULL; ;} - break; - - case 183: -#line 646 "parser.y" - { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); ;} - break; - - case 184: -#line 649 "parser.y" - { (yyval.var) = (yyvsp[-1].var); ;} - break; - - case 185: -#line 650 "parser.y" - { (yyval.var) = make_var(NULL); (yyval.var)->type = (yyvsp[-1].type); (yyval.var)->attrs = (yyvsp[-2].attr_list); ;} - break; - - case 186: -#line 651 "parser.y" - { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); ;} - break; - - case 187: -#line 652 "parser.y" - { (yyval.var) = NULL; ;} - break; - - case 188: -#line 655 "parser.y" - { (yyval.var) = (yyvsp[-1].pident)->var; - (yyval.var)->attrs = (yyvsp[-3].attr_list); - set_type((yyval.var), (yyvsp[-2].type), (yyvsp[-1].pident), (yyvsp[0].array_dims), FALSE); - free((yyvsp[-1].pident)); - ;} - break; - - case 189: -#line 663 "parser.y" - { var_t *v = (yyvsp[0].pident)->var; - var_list_t *args = (yyvsp[0].pident)->args; - v->attrs = (yyvsp[-2].attr_list); - set_type(v, (yyvsp[-1].type), (yyvsp[0].pident), NULL, FALSE); - free((yyvsp[0].pident)); - (yyval.func) = make_func(v, args); - if (is_attr(v->attrs, ATTR_IN)) { - error_loc("inapplicable attribute [in] for function '%s'\n",(yyval.func)->def->name); - } - ;} - break; - - case 190: -#line 675 "parser.y" - { (yyval.var) = NULL; ;} - break; - - case 192: -#line 679 "parser.y" - { (yyval.var) = NULL; ;} - break; - - case 193: -#line 680 "parser.y" - { (yyval.var) = make_var((yyvsp[0].str)); ;} - break; - - case 194: -#line 681 "parser.y" - { (yyval.var) = make_var((yyvsp[0].str)); ;} - break; - - case 195: -#line 684 "parser.y" - { (yyval.var) = make_var((yyvsp[0].str)); ;} - break; - - case 196: -#line 686 "parser.y" - { (yyval.var) = make_var((yyvsp[0].str)); ;} - break; - - case 197: -#line 689 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 198: -#line 690 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 200: -#line 692 "parser.y" - { (yyval.type) = (yyvsp[0].type); (yyval.type)->sign = 1; ;} - break; - - case 201: -#line 693 "parser.y" - { (yyval.type) = (yyvsp[0].type); (yyval.type)->sign = -1; - switch ((yyval.type)->type) { - case RPC_FC_CHAR: break; - case RPC_FC_SMALL: (yyval.type)->type = RPC_FC_USMALL; break; - case RPC_FC_SHORT: (yyval.type)->type = RPC_FC_USHORT; break; - case RPC_FC_LONG: (yyval.type)->type = RPC_FC_ULONG; break; - case RPC_FC_HYPER: - if ((yyval.type)->name[0] == 'h') /* hyper, as opposed to __int64 */ - { - (yyval.type) = alias((yyval.type), "MIDL_uhyper"); - (yyval.type)->sign = 0; - } - break; - default: break; - } - ;} - break; - - case 202: -#line 709 "parser.y" - { (yyval.type) = make_int(-1); ;} - break; - - case 203: -#line 710 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 204: -#line 711 "parser.y" - { (yyval.type) = duptype(find_type("float", 0), 1); ;} - break; - - case 205: -#line 712 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 206: -#line 713 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 207: -#line 714 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 208: -#line 715 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 211: -#line 722 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 212: -#line 723 "parser.y" - { (yyval.type) = make_builtin((yyvsp[-1].str)); ;} - break; - - case 213: -#line 724 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 214: -#line 725 "parser.y" - { (yyval.type) = make_builtin((yyvsp[-1].str)); ;} - break; - - case 215: -#line 726 "parser.y" - { (yyval.type) = make_builtin((yyvsp[-1].str)); ;} - break; - - case 216: -#line 727 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 217: -#line 728 "parser.y" - { (yyval.type) = make_builtin((yyvsp[0].str)); ;} - break; - - case 218: -#line 731 "parser.y" - { (yyval.type) = make_class((yyvsp[0].str)); ;} - break; - - case 219: -#line 732 "parser.y" - { (yyval.type) = find_type((yyvsp[0].str), 0); - if ((yyval.type)->defined) error_loc("multiple definition error\n"); - if ((yyval.type)->kind != TKIND_COCLASS) error_loc("%s was not declared a coclass\n", (yyvsp[0].str)); - ;} - break; - - case 220: -#line 738 "parser.y" - { (yyval.type) = (yyvsp[0].type); - (yyval.type)->attrs = (yyvsp[-1].attr_list); - if (!parse_only && do_header) - write_coclass((yyval.type)); - if (!parse_only && do_idfile) - write_clsid((yyval.type)); - ;} - break; - - case 221: -#line 748 "parser.y" - { (yyval.type) = (yyvsp[-4].type); - (yyval.type)->ifaces = (yyvsp[-2].ifref_list); - (yyval.type)->defined = TRUE; - ;} - break; - - case 222: -#line 754 "parser.y" - { (yyval.ifref_list) = NULL; ;} - break; - - case 223: -#line 755 "parser.y" - { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); ;} - break; - - case 224: -#line 759 "parser.y" - { (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); ;} - break; - - case 225: -#line 762 "parser.y" - { (yyval.type) = get_type(0, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_DISPATCH; ;} - break; - - case 226: -#line 763 "parser.y" - { (yyval.type) = get_type(0, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_DISPATCH; ;} - break; - - case 227: -#line 766 "parser.y" - { attr_t *attrs; - is_object_interface = TRUE; - (yyval.type) = (yyvsp[0].type); - if ((yyval.type)->defined) error_loc("multiple definition error\n"); - attrs = make_attr(ATTR_DISPINTERFACE); - (yyval.type)->attrs = append_attr( (yyvsp[-1].attr_list), attrs ); - (yyval.type)->ref = find_type("IDispatch", 0); - if (!(yyval.type)->ref) error_loc("IDispatch is undefined\n"); - (yyval.type)->defined = TRUE; - if (!parse_only && do_header) write_forward((yyval.type)); - ;} - break; - - case 228: -#line 779 "parser.y" - { (yyval.var_list) = NULL; ;} - break; - - case 229: -#line 780 "parser.y" - { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); ;} - break; - - case 230: -#line 783 "parser.y" - { (yyval.func_list) = NULL; ;} - break; - - case 231: -#line 784 "parser.y" - { (yyval.func_list) = append_func( (yyvsp[-2].func_list), (yyvsp[-1].func) ); ;} - break; - - case 232: -#line 790 "parser.y" - { (yyval.type) = (yyvsp[-4].type); - (yyval.type)->fields_or_args = (yyvsp[-2].var_list); - (yyval.type)->funcs = (yyvsp[-1].func_list); - if (!parse_only && do_header) write_dispinterface((yyval.type)); - if (!parse_only && do_idfile) write_diid((yyval.type)); - ;} - break; - - case 233: -#line 797 "parser.y" - { (yyval.type) = (yyvsp[-4].type); - (yyval.type)->fields_or_args = (yyvsp[-2].type)->fields_or_args; - (yyval.type)->funcs = (yyvsp[-2].type)->funcs; - if (!parse_only && do_header) write_dispinterface((yyval.type)); - if (!parse_only && do_idfile) write_diid((yyval.type)); - ;} - break; - - case 234: -#line 805 "parser.y" - { (yyval.type) = NULL; ;} - break; - - case 235: -#line 806 "parser.y" - { (yyval.type) = find_type2((yyvsp[0].str), 0); ;} - break; - - case 236: -#line 809 "parser.y" - { (yyval.type) = get_type(RPC_FC_IP, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_INTERFACE; ;} - break; - - case 237: -#line 810 "parser.y" - { (yyval.type) = get_type(RPC_FC_IP, (yyvsp[0].str), 0); (yyval.type)->kind = TKIND_INTERFACE; ;} - break; - - case 238: -#line 813 "parser.y" - { (yyval.ifinfo).interface = (yyvsp[0].type); - (yyval.ifinfo).old_pointer_default = pointer_default; - if (is_attr((yyvsp[-1].attr_list), ATTR_POINTERDEFAULT)) - pointer_default = get_attrv((yyvsp[-1].attr_list), ATTR_POINTERDEFAULT); - is_object_interface = is_object((yyvsp[-1].attr_list)); - if ((yyvsp[0].type)->defined) error_loc("multiple definition error\n"); - (yyvsp[0].type)->attrs = (yyvsp[-1].attr_list); - (yyvsp[0].type)->defined = TRUE; - if (!parse_only && do_header) write_forward((yyvsp[0].type)); - ;} - break; - - case 239: -#line 826 "parser.y" - { (yyval.type) = (yyvsp[-5].ifinfo).interface; - (yyval.type)->ref = (yyvsp[-4].type); - (yyval.type)->funcs = (yyvsp[-2].func_list); - compute_method_indexes((yyval.type)); - if (!parse_only && do_header) write_interface((yyval.type)); - if (!parse_only && local_stubs) write_locals(local_stubs, (yyval.type), TRUE); - if (!parse_only && do_idfile) write_iid((yyval.type)); - pointer_default = (yyvsp[-5].ifinfo).old_pointer_default; - ;} - break; - - case 240: -#line 839 "parser.y" - { (yyval.type) = (yyvsp[-7].ifinfo).interface; - (yyval.type)->ref = find_type2((yyvsp[-5].str), 0); - if (!(yyval.type)->ref) error_loc("base class '%s' not found in import\n", (yyvsp[-5].str)); - (yyval.type)->funcs = (yyvsp[-2].func_list); - compute_method_indexes((yyval.type)); - if (!parse_only && do_header) write_interface((yyval.type)); - if (!parse_only && local_stubs) write_locals(local_stubs, (yyval.type), TRUE); - if (!parse_only && do_idfile) write_iid((yyval.type)); - pointer_default = (yyvsp[-7].ifinfo).old_pointer_default; - ;} - break; - - case 241: -#line 849 "parser.y" - { (yyval.type) = (yyvsp[-1].type); ;} - break; - - case 242: -#line 853 "parser.y" - { (yyval.type) = (yyvsp[-1].type); if (!parse_only && do_header) write_forward((yyval.type)); ;} - break; - - case 243: -#line 854 "parser.y" - { (yyval.type) = (yyvsp[-1].type); if (!parse_only && do_header) write_forward((yyval.type)); ;} - break; - - case 244: -#line 857 "parser.y" - { (yyval.type) = make_type(0, NULL); (yyval.type)->name = (yyvsp[0].str); (yyval.type)->kind = TKIND_MODULE; ;} - break; - - case 245: -#line 858 "parser.y" - { (yyval.type) = make_type(0, NULL); (yyval.type)->name = (yyvsp[0].str); (yyval.type)->kind = TKIND_MODULE; ;} - break; - - case 246: -#line 861 "parser.y" - { (yyval.type) = (yyvsp[0].type); - (yyval.type)->attrs = (yyvsp[-1].attr_list); - ;} - break; - - case 247: -#line 867 "parser.y" - { (yyval.type) = (yyvsp[-4].type); - (yyval.type)->funcs = (yyvsp[-2].func_list); - /* FIXME: if (!parse_only && do_header) write_module($$); */ - ;} - break; - - case 248: -#line 873 "parser.y" - { (yyval.pident) = (yyvsp[0].pident); (yyval.pident)->ptr_level++; ;} - break; - - case 249: -#line 874 "parser.y" - { (yyval.pident) = (yyvsp[0].pident); /* FIXME */ ;} - break; - - case 250: -#line 875 "parser.y" - { (yyval.pident) = (yyvsp[0].pident); - if ((yyval.pident)->callconv) parser_warning("multiple calling conventions %s, %s for function %s\n", (yyval.pident)->callconv, (yyvsp[-1].str), (yyval.pident)->var->name); - (yyval.pident)->callconv = (yyvsp[-1].str); - ;} - break; - - case 252: -#line 883 "parser.y" - { (yyval.pident) = (yyvsp[-3].pident); - (yyvsp[-3].pident)->args = (yyvsp[-1].var_list); - (yyvsp[-3].pident)->is_func = TRUE; - ;} - break; - - case 253: -#line 889 "parser.y" - { (yyval.pident) = make_pident((yyvsp[0].var)); ;} - break; - - case 254: -#line 890 "parser.y" - { (yyval.pident) = (yyvsp[-1].pident); ;} - break; - - case 255: -#line 891 "parser.y" - { (yyval.pident) = (yyvsp[0].pident); - (yyval.pident)->func_ptr_level = (yyval.pident)->ptr_level; - (yyval.pident)->ptr_level = 0; - ;} - break; - - case 256: -#line 898 "parser.y" - { (yyval.pident_list) = append_pident( NULL, (yyvsp[0].pident) ); ;} - break; - - case 257: -#line 899 "parser.y" - { (yyval.pident_list) = append_pident( (yyvsp[-2].pident_list), (yyvsp[0].pident) ); ;} - break; - - case 258: -#line 903 "parser.y" - { (yyval.num) = RPC_FC_RP; ;} - break; - - case 259: -#line 904 "parser.y" - { (yyval.num) = RPC_FC_UP; ;} - break; - - case 260: -#line 905 "parser.y" - { (yyval.num) = RPC_FC_FP; ;} - break; - - case 261: -#line 908 "parser.y" - { (yyval.type) = get_typev(RPC_FC_STRUCT, (yyvsp[-3].var), tsSTRUCT); - /* overwrite RPC_FC_STRUCT with a more exact type */ - (yyval.type)->type = get_struct_type( (yyvsp[-1].var_list) ); - (yyval.type)->kind = TKIND_RECORD; - (yyval.type)->fields_or_args = (yyvsp[-1].var_list); - (yyval.type)->defined = TRUE; - if(in_typelib) - add_typelib_entry((yyval.type)); - ;} - break; - - case 262: -#line 919 "parser.y" - { (yyval.type) = duptype(find_type("void", 0), 1); ;} - break; - - case 263: -#line 920 "parser.y" - { (yyval.type) = find_type((yyvsp[0].str), 0); ;} - break; - - case 264: -#line 921 "parser.y" - { (yyval.type) = (yyvsp[0].type); ;} - break; - - case 265: -#line 922 "parser.y" - { (yyval.type) = duptype((yyvsp[0].type), 1); (yyval.type)->is_const = TRUE; ;} - break; - - case 266: -#line 923 "parser.y" - { (yyval.type) = (yyvsp[0].type); ;} - break; - - case 267: -#line 924 "parser.y" - { (yyval.type) = find_type2((yyvsp[0].str), tsENUM); ;} - break; - - case 268: -#line 925 "parser.y" - { (yyval.type) = (yyvsp[0].type); ;} - break; - - case 269: -#line 926 "parser.y" - { (yyval.type) = get_type(RPC_FC_STRUCT, (yyvsp[0].str), tsSTRUCT); ;} - break; - - case 270: -#line 927 "parser.y" - { (yyval.type) = (yyvsp[0].type); ;} - break; - - case 271: -#line 928 "parser.y" - { (yyval.type) = find_type2((yyvsp[0].str), tsUNION); ;} - break; - - case 272: -#line 929 "parser.y" - { (yyval.type) = make_safearray((yyvsp[-1].type)); ;} - break; - - case 273: -#line 932 "parser.y" - { reg_typedefs((yyvsp[-1].type), (yyvsp[0].pident_list), (yyvsp[-2].attr_list)); - process_typedefs((yyvsp[0].pident_list)); - ;} - break; - - case 274: -#line 937 "parser.y" - { (yyval.type) = get_typev(RPC_FC_NON_ENCAPSULATED_UNION, (yyvsp[-3].var), tsUNION); - (yyval.type)->kind = TKIND_UNION; - (yyval.type)->fields_or_args = (yyvsp[-1].var_list); - (yyval.type)->defined = TRUE; - ;} - break; - - case 275: -#line 944 "parser.y" - { var_t *u = (yyvsp[-3].var); - (yyval.type) = get_typev(RPC_FC_ENCAPSULATED_UNION, (yyvsp[-8].var), tsUNION); - (yyval.type)->kind = TKIND_UNION; - if (!u) u = make_var( xstrdup("tagged_union") ); - u->type = make_type(RPC_FC_NON_ENCAPSULATED_UNION, NULL); - u->type->kind = TKIND_UNION; - u->type->fields_or_args = (yyvsp[-1].var_list); - u->type->defined = TRUE; - (yyval.type)->fields_or_args = append_var( (yyval.type)->fields_or_args, (yyvsp[-5].var) ); - (yyval.type)->fields_or_args = append_var( (yyval.type)->fields_or_args, u ); - (yyval.type)->defined = TRUE; - ;} - break; - - case 276: -#line 959 "parser.y" - { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); ;} - break; - - case 277: -#line 960 "parser.y" - { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); ;} - break; - - - default: break; - } - -/* Line 1126 of yacc.c. */ -#line 3673 "parser.tab.c" - - yyvsp -= yylen; - yyssp -= yylen; - - - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - char *yymsg = 0; -# define YYERROR_VERBOSE_ARGS_MAXIMUM 5 - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; - -#if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -#endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= yysize1 < yysize; - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } - - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= yysize1 < yysize; - yysize = yysize1; - - if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM) - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yymsg; - int yyi = 0; - while ((*yyp = *yyf)) - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - { - yyerror (YY_("syntax error")); - goto yyexhaustedlab; - } - } - else -#endif /* YYERROR_VERBOSE */ - yyerror (YY_("syntax error")); - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse look-ahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse look-ahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (0) - goto yyerrorlab; - -yyvsp -= yylen; - yyssp -= yylen; - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", yystos[yystate], yyvsp); - YYPOPSTACK; - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - if (yyn == YYFINAL) - YYACCEPT; - - *++yyvsp = yylval; - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK; - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - return yyresult; -} - - -#line 963 "parser.y" - - -static void decl_builtin(const char *name, unsigned char type) -{ - type_t *t = make_type(type, NULL); - t->name = xstrdup(name); - reg_type(t, name, 0); -} - -static type_t *make_builtin(char *name) -{ - /* NAME is strdup'd in the lexer */ - type_t *t = duptype(find_type(name, 0), 0); - t->name = name; - return t; -} - -static type_t *make_int(int sign) -{ - type_t *t = duptype(find_type("int", 0), 1); - - t->sign = sign; - if (sign < 0) - t->type = t->type == RPC_FC_LONG ? RPC_FC_ULONG : RPC_FC_USHORT; - - return t; -} - -void init_types(void) -{ - decl_builtin("void", 0); - decl_builtin("byte", RPC_FC_BYTE); - decl_builtin("wchar_t", RPC_FC_WCHAR); - decl_builtin("int", RPC_FC_LONG); /* win32 */ - decl_builtin("short", RPC_FC_SHORT); - decl_builtin("small", RPC_FC_SMALL); - decl_builtin("long", RPC_FC_LONG); - decl_builtin("hyper", RPC_FC_HYPER); - decl_builtin("__int64", RPC_FC_HYPER); - decl_builtin("char", RPC_FC_CHAR); - decl_builtin("float", RPC_FC_FLOAT); - decl_builtin("double", RPC_FC_DOUBLE); - decl_builtin("boolean", RPC_FC_BYTE); - decl_builtin("error_status_t", RPC_FC_ERROR_STATUS_T); - decl_builtin("handle_t", RPC_FC_BIND_PRIMITIVE); -} - -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) -{ - if (!attr) return list; - if (!list) - { - list = xmalloc( sizeof(*list) ); - list_init( list ); - } - list_add_tail( list, &attr->entry ); - return list; -} - -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 long 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_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; -} - -static expr_t *make_exprl(enum expr_type type, long 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; -} - -static 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; -} - -static 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 */ - if (type == 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; - } - } - return e; -} - -static expr_t *make_exprt(enum expr_type type, type_t *tref, expr_t *expr) -{ - expr_t *e; - e = xmalloc(sizeof(expr_t)); - e->type = type; - e->ref = expr; - e->u.tref = tref; - e->is_const = FALSE; - /* check for cast of constant expression */ - if (type == EXPR_SIZEOF) { - switch (tref->type) { - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_SMALL: - case RPC_FC_USMALL: - e->is_const = TRUE; - e->cval = 1; - break; - case RPC_FC_WCHAR: - case RPC_FC_USHORT: - case RPC_FC_SHORT: - e->is_const = TRUE; - e->cval = 2; - break; - case RPC_FC_LONG: - case RPC_FC_ULONG: - case RPC_FC_FLOAT: - case RPC_FC_ERROR_STATUS_T: - e->is_const = TRUE; - e->cval = 4; - break; - case RPC_FC_HYPER: - case RPC_FC_DOUBLE: - e->is_const = TRUE; - e->cval = 8; - break; - } - } - if (type == EXPR_CAST && expr->is_const) { - e->is_const = TRUE; - e->cval = expr->cval; - } - return e; -} - -static expr_t *make_expr1(enum expr_type type, expr_t *expr) -{ - expr_t *e; - if (type == EXPR_ADDRESSOF && expr->type != EXPR_IDENTIFIER) - error("address-of operator applied to invalid expression\n"); - 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_NEG: - e->cval = -expr->cval; - break; - case EXPR_NOT: - e->cval = ~expr->cval; - break; - default: - e->is_const = FALSE; - break; - } - } - return e; -} - -static 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_MUL: - e->cval = expr1->cval * expr2->cval; - break; - case EXPR_DIV: - 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; - default: - e->is_const = FALSE; - break; - } - } - return e; -} - -static 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; -} - -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; -} - -static type_t *make_type(unsigned char type, type_t *ref) -{ - type_t *t = alloc_type(); - t->name = NULL; - t->kind = TKIND_PRIMITIVE; - t->type = type; - t->ref = ref; - t->attrs = NULL; - t->orig = NULL; - t->funcs = NULL; - t->fields_or_args = NULL; - t->ifaces = NULL; - t->dim = 0; - t->size_is = NULL; - t->length_is = NULL; - t->typestring_offset = 0; - t->ptrdesc = 0; - t->declarray = FALSE; - t->ignore = (parse_only != 0); - t->is_const = FALSE; - t->sign = 0; - t->defined = FALSE; - t->written = FALSE; - t->user_types_registered = FALSE; - t->tfswrite = FALSE; - t->typelib_idx = -1; - return t; -} - -static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_t *arr, - int top) -{ - expr_list_t *sizes = get_attrp(v->attrs, ATTR_SIZEIS); - expr_list_t *lengs = get_attrp(v->attrs, ATTR_LENGTHIS); - int ptr_attr = get_attrv(v->attrs, ATTR_POINTERTYPE); - int ptr_type = ptr_attr; - int sizeless, has_varconf; - expr_t *dim; - type_t *atype, **ptype; - int ptr_level = (pident ? pident->ptr_level : 0); - - v->type = type; - - if (!ptr_type && top) - ptr_type = RPC_FC_RP; - - for ( ; 0 < ptr_level; --ptr_level) - { - v->type = make_type(pointer_default, v->type); - if (ptr_level == 1 && ptr_type && !arr) - { - v->type->type = ptr_type; - ptr_type = 0; - } - } - - if (ptr_type && !arr) - { - if (is_ptr(v->type)) - { - if (v->type->type != ptr_type) - { - v->type = duptype(v->type, 1); - v->type->type = ptr_type; - } - } - else if (!arr && ptr_attr) - error("%s: pointer attribute applied to non-pointer type\n", v->name); - } - - if (pident && pident->is_func) { - int func_ptr_level = pident->func_ptr_level; - v->type = make_type(RPC_FC_FUNCTION, v->type); - v->type->fields_or_args = pident->args; - if (pident->callconv) - v->type->attrs = append_attr(NULL, make_attrp(ATTR_CALLCONV, pident->callconv)); - else if (is_object_interface) { - static char *stdmethodcalltype; - if (!stdmethodcalltype) stdmethodcalltype = strdup("STDMETHODCALLTYPE"); - v->type->attrs = append_attr(NULL, make_attrp(ATTR_CALLCONV, stdmethodcalltype)); - } - for (; func_ptr_level > 0; func_ptr_level--) - v->type = make_type(ptr_type, v->type); - } - - sizeless = FALSE; - if (arr) LIST_FOR_EACH_ENTRY_REV(dim, arr, expr_t, entry) - { - if (sizeless) - error("%s: only the first array dimension can be unspecified\n", v->name); - - if (dim->is_const) - { - unsigned int align = 0; - size_t size = type_memsize(v->type, &align); - - if (dim->cval <= 0) - error("%s: array dimension must be positive\n", v->name); - - if (0xffffffffuL / size < (unsigned long) dim->cval) - error("%s: total array size is too large\n", v->name); - else if (0xffffuL < size * dim->cval) - v->type = make_type(RPC_FC_LGFARRAY, v->type); - else - v->type = make_type(RPC_FC_SMFARRAY, v->type); - } - else - { - sizeless = TRUE; - v->type = make_type(RPC_FC_CARRAY, v->type); - } - - v->type->declarray = TRUE; - v->type->dim = dim->cval; - } - - ptype = &v->type; - has_varconf = FALSE; - if (sizes) LIST_FOR_EACH_ENTRY(dim, sizes, expr_t, entry) - { - if (dim->type != EXPR_VOID) - { - has_varconf = TRUE; - atype = *ptype = duptype(*ptype, 0); - - if (atype->type == RPC_FC_SMFARRAY || atype->type == RPC_FC_LGFARRAY) - error("%s: cannot specify size_is for a fixed sized array\n", v->name); - - if (atype->type != RPC_FC_CARRAY && !is_ptr(atype)) - error("%s: size_is attribute applied to illegal type\n", v->name); - - atype->type = RPC_FC_CARRAY; - atype->size_is = dim; - } - - ptype = &(*ptype)->ref; - if (*ptype == NULL) - error("%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) - { - has_varconf = TRUE; - atype = *ptype = duptype(*ptype, 0); - - if (atype->type == RPC_FC_SMFARRAY) - atype->type = RPC_FC_SMVARRAY; - else if (atype->type == RPC_FC_LGFARRAY) - atype->type = RPC_FC_LGVARRAY; - else if (atype->type == RPC_FC_CARRAY) - atype->type = RPC_FC_CVARRAY; - else - error("%s: length_is attribute applied to illegal type\n", v->name); - - atype->length_is = dim; - } - - ptype = &(*ptype)->ref; - if (*ptype == NULL) - error("%s: too many expressions in length_is attribute\n", v->name); - } - - if (has_varconf && !last_array(v->type)) - { - ptype = &v->type; - for (ptype = &v->type; is_array(*ptype); ptype = &(*ptype)->ref) - { - *ptype = duptype(*ptype, 0); - (*ptype)->type = RPC_FC_BOGUS_ARRAY; - } - } - - if (is_array(v->type)) - { - const type_t *rt = v->type->ref; - if (is_user_type(rt)) - v->type->type = RPC_FC_BOGUS_ARRAY; - else - switch (rt->type) - { - case RPC_FC_BOGUS_STRUCT: - case RPC_FC_NON_ENCAPSULATED_UNION: - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_ENUM16: - v->type->type = RPC_FC_BOGUS_ARRAY; - break; - /* FC_RP should be above, but widl overuses these, and will break things. */ - case RPC_FC_UP: - case RPC_FC_RP: - if (rt->ref->type == RPC_FC_IP) - v->type->type = RPC_FC_BOGUS_ARRAY; - break; - } - } -} - -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; -} - -static 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_t *make_var(char *name) -{ - var_t *v = xmalloc(sizeof(var_t)); - v->name = name; - v->type = NULL; - v->attrs = NULL; - v->eval = NULL; - return v; -} - -static pident_list_t *append_pident(pident_list_t *list, pident_t *p) -{ - if (!p) return list; - if (!list) { - list = xmalloc(sizeof(*list)); - list_init(list); - } - list_add_tail(list, &p->entry); - return list; -} - -static pident_t *make_pident(var_t *var) -{ - pident_t *p = xmalloc(sizeof(*p)); - p->var = var; - p->is_func = FALSE; - p->ptr_level = 0; - p->func_ptr_level = 0; - p->args = NULL; - p->callconv = NULL; - return p; -} - -static func_list_t *append_func(func_list_t *list, func_t *func) -{ - if (!func) return list; - if (!list) - { - list = xmalloc( sizeof(*list) ); - list_init( list ); - } - list_add_tail( list, &func->entry ); - return list; -} - -static func_t *make_func(var_t *def, var_list_t *args) -{ - func_t *f = xmalloc(sizeof(func_t)); - f->def = def; - f->args = args; - f->ignore = parse_only; - f->idx = -1; - return f; -} - -static type_t *make_class(char *name) -{ - type_t *c = make_type(0, NULL); - c->name = name; - c->kind = TKIND_COCLASS; - return c; -} - -static type_t *make_safearray(type_t *type) -{ - type_t *sa = duptype(find_type("SAFEARRAY", 0), 1); - sa->ref = type; - return make_type(pointer_default, sa); -} - -#define HASHMAX 64 - -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 *****/ - -struct rtype { - const char *name; - type_t *type; - int t; - struct rtype *next; -}; - -struct rtype *type_hash[HASHMAX]; - -static type_t *reg_type(type_t *type, const char *name, int t) -{ - struct rtype *nt; - int hash; - if (!name) { - error_loc("registering named type without name\n"); - return type; - } - hash = hash_ident(name); - nt = xmalloc(sizeof(struct rtype)); - nt->name = name; - nt->type = type; - nt->t = t; - nt->next = type_hash[hash]; - type_hash[hash] = nt; - return type; -} - -static int is_incomplete(const type_t *t) -{ - return !t->defined && (is_struct(t->type) || is_union(t->type)); -} - -static 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 (t->kind == TKIND_ALIAS && is_incomplete(t)) { - type_t *ot = t->orig; - fix_type(ot); - t->fields_or_args = ot->fields_or_args; - 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); - free(tn); - } -} - -static type_t *reg_typedefs(type_t *type, pident_list_t *pidents, attr_list_t *attrs) -{ - type_t *ptr = type; - const pident_t *pident; - int ptrc = 0; - int is_str = is_attr(attrs, ATTR_STRING); - unsigned char ptr_type = get_attrv(attrs, ATTR_POINTERTYPE); - - if (is_str) - { - type_t *t = type; - unsigned char c; - - while (is_ptr(t)) - t = t->ref; - - c = t->type; - if (c != RPC_FC_CHAR && c != RPC_FC_BYTE && c != RPC_FC_WCHAR) - { - pident = LIST_ENTRY( list_head( pidents ), const pident_t, entry ); - error_loc("'%s': [string] attribute is only valid on 'char', 'byte', or 'wchar_t' pointers and arrays\n", - pident->var->name); - } - } - - /* 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 whether it has other attributes or not, - hence the public attribute. */ - if ((type->kind == TKIND_ENUM || type->kind == TKIND_RECORD - || type->kind == TKIND_UNION) && ! type->name && ! parse_only) - { - if (! is_attr(attrs, ATTR_PUBLIC)) - attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) ); - type->name = gen_name(); - } - - LIST_FOR_EACH_ENTRY( pident, pidents, const pident_t, entry ) - { - var_t *name = pident->var; - - if (name->name) { - type_t *cur = ptr; - int cptr = pident->ptr_level; - if (cptr > ptrc) { - while (cptr > ptrc) { - cur = ptr = make_type(pointer_default, cur); - ptrc++; - } - } else { - while (cptr < ptrc) { - cur = cur->ref; - cptr++; - } - } - if (pident->is_func) { - int func_ptr_level = pident->func_ptr_level; - cur = make_type(RPC_FC_FUNCTION, cur); - cur->fields_or_args = pident->args; - if (pident->callconv) - cur->attrs = append_attr(NULL, make_attrp(ATTR_CALLCONV, pident->callconv)); - else if (is_object_interface) { - static char *stdmethodcalltype; - if (!stdmethodcalltype) stdmethodcalltype = strdup("STDMETHODCALLTYPE"); - cur->attrs = append_attr(NULL, make_attrp(ATTR_CALLCONV, stdmethodcalltype)); - } - for (; func_ptr_level > 0; func_ptr_level--) - cur = make_type(pointer_default, cur); - } - cur = alias(cur, name->name); - cur->attrs = attrs; - if (ptr_type) - { - if (is_ptr(cur)) - cur->type = ptr_type; - else - error_loc("'%s': pointer attribute applied to non-pointer type\n", - cur->name); - } - else if (is_str && ! is_ptr(cur)) - error_loc("'%s': [string] attribute applied to non-pointer type\n", - cur->name); - - if (is_incomplete(cur)) - add_incomplete(cur); - reg_type(cur, cur->name, 0); - } - } - return type; -} - -static type_t *find_type(const char *name, int t) -{ - struct rtype *cur = type_hash[hash_ident(name)]; - while (cur && (cur->t != t || strcmp(cur->name, name))) - cur = cur->next; - if (!cur) { - error_loc("type '%s' not found\n", name); - return NULL; - } - return cur->type; -} - -static type_t *find_type2(char *name, int t) -{ - type_t *tp = find_type(name, t); - free(name); - return tp; -} - -int is_type(const char *name) -{ - struct rtype *cur = type_hash[hash_ident(name)]; - while (cur && (cur->t || strcmp(cur->name, name))) - cur = cur->next; - if (cur) return TRUE; - return FALSE; -} - -static type_t *get_type(unsigned char type, char *name, int t) -{ - struct rtype *cur = NULL; - type_t *tp; - if (name) { - cur = type_hash[hash_ident(name)]; - while (cur && (cur->t != t || strcmp(cur->name, name))) - cur = cur->next; - } - if (cur) { - free(name); - return cur->type; - } - tp = make_type(type, NULL); - tp->name = name; - if (!name) return tp; - return reg_type(tp, name, t); -} - -static type_t *get_typev(unsigned char type, var_t *name, int t) -{ - char *sname = NULL; - if (name) { - sname = name->name; - free(name); - } - return get_type(type, sname, t); -} - -static int get_struct_type(var_list_t *fields) -{ - int has_pointer = 0; - int has_conformance = 0; - int has_variance = 0; - var_t *field; - - if (get_padding(fields)) - return RPC_FC_BOGUS_STRUCT; - - if (fields) LIST_FOR_EACH_ENTRY( field, fields, var_t, entry ) - { - type_t *t = field->type; - - if (is_user_type(t)) - return RPC_FC_BOGUS_STRUCT; - - if (is_ptr(t)) - { - do - t = t->ref; - while (is_ptr(t)); - - switch (t->type) - { - case RPC_FC_IP: - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_NON_ENCAPSULATED_UNION: - case RPC_FC_BOGUS_STRUCT: - return RPC_FC_BOGUS_STRUCT; - } - - has_pointer = 1; - continue; - } - - if (field->type->declarray) - { - if (is_string_type(field->attrs, field->type)) - { - if (is_conformant_array(field->type)) - has_conformance = 1; - has_variance = 1; - continue; - } - - if (is_array(field->type->ref)) - return RPC_FC_BOGUS_STRUCT; - - if (is_conformant_array(field->type)) - { - has_conformance = 1; - if (field->type->declarray && 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 (field->type->length_is) - has_variance = 1; - - t = field->type->ref; - } - - switch (t->type) - { - /* - * RPC_FC_BYTE, RPC_FC_STRUCT, etc - * Simple types don't effect the type of struct. - * A struct containing a simple struct is still a simple struct. - * So long as we can block copy the data, we return RPC_FC_STRUCT. - */ - case 0: /* void pointer */ - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_SMALL: - case RPC_FC_USMALL: - case RPC_FC_WCHAR: - case RPC_FC_SHORT: - case RPC_FC_USHORT: - case RPC_FC_LONG: - case RPC_FC_ULONG: - case RPC_FC_INT3264: - case RPC_FC_UINT3264: - case RPC_FC_HYPER: - case RPC_FC_FLOAT: - case RPC_FC_DOUBLE: - case RPC_FC_STRUCT: - case RPC_FC_ENUM32: - break; - - case RPC_FC_RP: - case RPC_FC_UP: - case RPC_FC_FP: - case RPC_FC_OP: - case RPC_FC_CARRAY: - case RPC_FC_CVARRAY: - case RPC_FC_BOGUS_ARRAY: - has_pointer = 1; - break; - - /* - * Propagate member attributes - * a struct should be at least as complex as its member - */ - case RPC_FC_CVSTRUCT: - has_conformance = 1; - has_variance = 1; - has_pointer = 1; - break; - - case RPC_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 RPC_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 RPC_FC_PSTRUCT: - has_pointer = 1; - break; - - default: - error_loc("Unknown struct member %s with type (0x%02x)\n", field->name, t->type); - /* fallthru - treat it as complex */ - - /* as soon as we see one of these these members, it's bogus... */ - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_NON_ENCAPSULATED_UNION: - case RPC_FC_BOGUS_STRUCT: - case RPC_FC_ENUM16: - return RPC_FC_BOGUS_STRUCT; - } - } - - if( has_variance ) - { - if ( has_conformance ) - return RPC_FC_CVSTRUCT; - else - return RPC_FC_BOGUS_STRUCT; - } - if( has_conformance && has_pointer ) - return RPC_FC_CPSTRUCT; - if( has_conformance ) - return RPC_FC_CSTRUCT; - if( has_pointer ) - return RPC_FC_PSTRUCT; - return RPC_FC_STRUCT; -} - -/***** 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; -} - -static var_t *find_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 void write_libid(const char *name, const attr_list_t *attr) -{ - const UUID *uuid = get_attrp(attr, ATTR_UUID); - write_guid(idfile, "LIBID", name, uuid); -} - -static void write_clsid(type_t *cls) -{ - const UUID *uuid = get_attrp(cls->attrs, ATTR_UUID); - write_guid(idfile, "CLSID", cls->name, uuid); -} - -static void write_diid(type_t *iface) -{ - const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); - write_guid(idfile, "DIID", iface->name, uuid); -} - -static void write_iid(type_t *iface) -{ - const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); - write_guid(idfile, "IID", iface->name, uuid); -} - -static int compute_method_indexes(type_t *iface) -{ - int idx; - func_t *f; - - if (iface->ref) - idx = compute_method_indexes(iface->ref); - else - idx = 0; - - if (!iface->funcs) - return idx; - - LIST_FOR_EACH_ENTRY( f, iface->funcs, func_t, entry ) - if (! is_callas(f->def->attrs)) - f->idx = idx++; - - return idx; -} - -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_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; -} - -static void process_typedefs(pident_list_t *pidents) -{ - pident_t *pident, *next; - - if (!pidents) return; - LIST_FOR_EACH_ENTRY_SAFE( pident, next, pidents, pident_t, entry ) - { - var_t *var = pident->var; - type_t *type = find_type(var->name, 0); - - if (! parse_only && do_header) - write_typedef(type); - if (in_typelib && type->attrs) - add_typelib_entry(type); - - free(pident); - free(var); - } -} - -static void check_arg(var_t *arg) -{ - type_t *t = arg->type; - - if (t->type == 0 && ! is_var_ptr(arg)) - error_loc("argument '%s' has void type\n", arg->name); -} - -static void check_all_user_types(ifref_list_t *ifrefs) -{ - const ifref_t *ifref; - const func_t *f; - - if (ifrefs) LIST_FOR_EACH_ENTRY(ifref, ifrefs, const ifref_t, entry) - { - const func_list_t *fs = ifref->iface->funcs; - if (fs) LIST_FOR_EACH_ENTRY(f, fs, const func_t, entry) - check_for_additional_prototype_types(f->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'; -} - diff --git a/reactos/tools/widl/parser.tab.h b/reactos/tools/widl/parser.tab.h deleted file mode 100644 index f6cd0802337..00000000000 --- a/reactos/tools/widl/parser.tab.h +++ /dev/null @@ -1,345 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.1. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - aIDENTIFIER = 258, - aKNOWNTYPE = 259, - aNUM = 260, - aHEXNUM = 261, - aDOUBLE = 262, - aSTRING = 263, - aUUID = 264, - aEOF = 265, - SHL = 266, - SHR = 267, - tAGGREGATABLE = 268, - tALLOCATE = 269, - tAPPOBJECT = 270, - tASYNC = 271, - tASYNCUUID = 272, - tAUTOHANDLE = 273, - tBINDABLE = 274, - tBOOLEAN = 275, - tBROADCAST = 276, - tBYTE = 277, - tBYTECOUNT = 278, - tCALLAS = 279, - tCALLBACK = 280, - tCASE = 281, - tCDECL = 282, - tCHAR = 283, - tCOCLASS = 284, - tCODE = 285, - tCOMMSTATUS = 286, - tCONST = 287, - tCONTEXTHANDLE = 288, - tCONTEXTHANDLENOSERIALIZE = 289, - tCONTEXTHANDLESERIALIZE = 290, - tCONTROL = 291, - tCPPQUOTE = 292, - tDEFAULT = 293, - tDEFAULTCOLLELEM = 294, - tDEFAULTVALUE = 295, - tDEFAULTVTABLE = 296, - tDISPLAYBIND = 297, - tDISPINTERFACE = 298, - tDLLNAME = 299, - tDOUBLE = 300, - tDUAL = 301, - tENDPOINT = 302, - tENTRY = 303, - tENUM = 304, - tERRORSTATUST = 305, - tEXPLICITHANDLE = 306, - tEXTERN = 307, - tFALSE = 308, - tFASTCALL = 309, - tFLOAT = 310, - tHANDLE = 311, - tHANDLET = 312, - tHELPCONTEXT = 313, - tHELPFILE = 314, - tHELPSTRING = 315, - tHELPSTRINGCONTEXT = 316, - tHELPSTRINGDLL = 317, - tHIDDEN = 318, - tHYPER = 319, - tID = 320, - tIDEMPOTENT = 321, - tIIDIS = 322, - tIMMEDIATEBIND = 323, - tIMPLICITHANDLE = 324, - tIMPORT = 325, - tIMPORTLIB = 326, - tIN = 327, - tINLINE = 328, - tINPUTSYNC = 329, - tINT = 330, - tINT64 = 331, - tINTERFACE = 332, - tLCID = 333, - tLENGTHIS = 334, - tLIBRARY = 335, - tLOCAL = 336, - tLONG = 337, - tMETHODS = 338, - tMODULE = 339, - tNONBROWSABLE = 340, - tNONCREATABLE = 341, - tNONEXTENSIBLE = 342, - tOBJECT = 343, - tODL = 344, - tOLEAUTOMATION = 345, - tOPTIONAL = 346, - tOUT = 347, - tPASCAL = 348, - tPOINTERDEFAULT = 349, - tPROPERTIES = 350, - tPROPGET = 351, - tPROPPUT = 352, - tPROPPUTREF = 353, - tPTR = 354, - tPUBLIC = 355, - tRANGE = 356, - tREADONLY = 357, - tREF = 358, - tREQUESTEDIT = 359, - tRESTRICTED = 360, - tRETVAL = 361, - tSAFEARRAY = 362, - tSHORT = 363, - tSIGNED = 364, - tSINGLE = 365, - tSIZEIS = 366, - tSIZEOF = 367, - tSMALL = 368, - tSOURCE = 369, - tSTDCALL = 370, - tSTRICTCONTEXTHANDLE = 371, - tSTRING = 372, - tSTRUCT = 373, - tSWITCH = 374, - tSWITCHIS = 375, - tSWITCHTYPE = 376, - tTRANSMITAS = 377, - tTRUE = 378, - tTYPEDEF = 379, - tUNION = 380, - tUNIQUE = 381, - tUNSIGNED = 382, - tUUID = 383, - tV1ENUM = 384, - tVARARG = 385, - tVERSION = 386, - tVOID = 387, - tWCHAR = 388, - tWIREMARSHAL = 389, - CAST = 390, - PPTR = 391, - NEG = 392, - ADDRESSOF = 393 - }; -#endif -/* Tokens. */ -#define aIDENTIFIER 258 -#define aKNOWNTYPE 259 -#define aNUM 260 -#define aHEXNUM 261 -#define aDOUBLE 262 -#define aSTRING 263 -#define aUUID 264 -#define aEOF 265 -#define SHL 266 -#define SHR 267 -#define tAGGREGATABLE 268 -#define tALLOCATE 269 -#define tAPPOBJECT 270 -#define tASYNC 271 -#define tASYNCUUID 272 -#define tAUTOHANDLE 273 -#define tBINDABLE 274 -#define tBOOLEAN 275 -#define tBROADCAST 276 -#define tBYTE 277 -#define tBYTECOUNT 278 -#define tCALLAS 279 -#define tCALLBACK 280 -#define tCASE 281 -#define tCDECL 282 -#define tCHAR 283 -#define tCOCLASS 284 -#define tCODE 285 -#define tCOMMSTATUS 286 -#define tCONST 287 -#define tCONTEXTHANDLE 288 -#define tCONTEXTHANDLENOSERIALIZE 289 -#define tCONTEXTHANDLESERIALIZE 290 -#define tCONTROL 291 -#define tCPPQUOTE 292 -#define tDEFAULT 293 -#define tDEFAULTCOLLELEM 294 -#define tDEFAULTVALUE 295 -#define tDEFAULTVTABLE 296 -#define tDISPLAYBIND 297 -#define tDISPINTERFACE 298 -#define tDLLNAME 299 -#define tDOUBLE 300 -#define tDUAL 301 -#define tENDPOINT 302 -#define tENTRY 303 -#define tENUM 304 -#define tERRORSTATUST 305 -#define tEXPLICITHANDLE 306 -#define tEXTERN 307 -#define tFALSE 308 -#define tFASTCALL 309 -#define tFLOAT 310 -#define tHANDLE 311 -#define tHANDLET 312 -#define tHELPCONTEXT 313 -#define tHELPFILE 314 -#define tHELPSTRING 315 -#define tHELPSTRINGCONTEXT 316 -#define tHELPSTRINGDLL 317 -#define tHIDDEN 318 -#define tHYPER 319 -#define tID 320 -#define tIDEMPOTENT 321 -#define tIIDIS 322 -#define tIMMEDIATEBIND 323 -#define tIMPLICITHANDLE 324 -#define tIMPORT 325 -#define tIMPORTLIB 326 -#define tIN 327 -#define tINLINE 328 -#define tINPUTSYNC 329 -#define tINT 330 -#define tINT64 331 -#define tINTERFACE 332 -#define tLCID 333 -#define tLENGTHIS 334 -#define tLIBRARY 335 -#define tLOCAL 336 -#define tLONG 337 -#define tMETHODS 338 -#define tMODULE 339 -#define tNONBROWSABLE 340 -#define tNONCREATABLE 341 -#define tNONEXTENSIBLE 342 -#define tOBJECT 343 -#define tODL 344 -#define tOLEAUTOMATION 345 -#define tOPTIONAL 346 -#define tOUT 347 -#define tPASCAL 348 -#define tPOINTERDEFAULT 349 -#define tPROPERTIES 350 -#define tPROPGET 351 -#define tPROPPUT 352 -#define tPROPPUTREF 353 -#define tPTR 354 -#define tPUBLIC 355 -#define tRANGE 356 -#define tREADONLY 357 -#define tREF 358 -#define tREQUESTEDIT 359 -#define tRESTRICTED 360 -#define tRETVAL 361 -#define tSAFEARRAY 362 -#define tSHORT 363 -#define tSIGNED 364 -#define tSINGLE 365 -#define tSIZEIS 366 -#define tSIZEOF 367 -#define tSMALL 368 -#define tSOURCE 369 -#define tSTDCALL 370 -#define tSTRICTCONTEXTHANDLE 371 -#define tSTRING 372 -#define tSTRUCT 373 -#define tSWITCH 374 -#define tSWITCHIS 375 -#define tSWITCHTYPE 376 -#define tTRANSMITAS 377 -#define tTRUE 378 -#define tTYPEDEF 379 -#define tUNION 380 -#define tUNIQUE 381 -#define tUNSIGNED 382 -#define tUUID 383 -#define tV1ENUM 384 -#define tVARARG 385 -#define tVERSION 386 -#define tVOID 387 -#define tWCHAR 388 -#define tWIREMARSHAL 389 -#define CAST 390 -#define PPTR 391 -#define NEG 392 -#define ADDRESSOF 393 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 139 "parser.y" -typedef union YYSTYPE { - 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; - pident_t *pident; - pident_list_t *pident_list; - func_t *func; - func_list_t *func_list; - ifref_t *ifref; - ifref_list_t *ifref_list; - char *str; - UUID *uuid; - unsigned int num; - double dbl; - interface_info_t ifinfo; -} YYSTYPE; -/* Line 1447 of yacc.c. */ -#line 337 "parser.tab.h" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -extern YYSTYPE parser_lval; - - - diff --git a/reactos/tools/widl/parser.y b/reactos/tools/widl/parser.y deleted file mode 100644 index 46418a33049..00000000000 --- a/reactos/tools/widl/parser.y +++ /dev/null @@ -1,2153 +0,0 @@ -%{ -/* - * 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 -#include -#include -#include -#ifdef HAVE_ALLOCA_H -#include -#endif - -#include "widl.h" -#include "utils.h" -#include "parser.h" -#include "header.h" -#include "typelib.h" -#include "typegen.h" - -#if defined(YYBYACC) - /* Berkeley yacc (byacc) doesn't seem to know about these */ - /* Some *BSD supplied versions do define these though */ -# ifndef YYEMPTY -# define YYEMPTY (-1) /* Empty lookahead value of yychar */ -# endif -# ifndef YYLEX -# define YYLEX yylex() -# endif - -#elif defined(YYBISON) - /* Bison was used for original development */ - /* #define YYEMPTY -2 */ - /* #define YYLEX yylex() */ - -#else - /* No yacc we know yet */ -# if !defined(YYEMPTY) || !defined(YYLEX) -# error Yacc version/type unknown. This version needs to be verified for settings of YYEMPTY and YYLEX. -# elif defined(__GNUC__) /* gcc defines the #warning directive */ -# warning Yacc version/type unknown. It defines YYEMPTY and YYLEX, but is not tested - /* #else we just take a chance that it works... */ -# endif -#endif - -#define YYERROR_VERBOSE - -unsigned char pointer_default = RPC_FC_UP; -static int is_object_interface = FALSE; - -typedef struct list typelist_t; -struct typenode { - type_t *type; - struct list entry; -}; - -typelist_t incomplete_types = LIST_INIT(incomplete_types); - -static void add_incomplete(type_t *t); -static void fix_incomplete(void); - -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_t *make_attr(enum attr_type type); -static attr_t *make_attrv(enum attr_type type, unsigned long val); -static attr_t *make_attrp(enum attr_type type, void *val); -static expr_t *make_expr(enum expr_type type); -static expr_t *make_exprl(enum expr_type type, long val); -static expr_t *make_exprd(enum expr_type type, double val); -static expr_t *make_exprs(enum expr_type type, char *val); -static expr_t *make_exprt(enum expr_type type, type_t *tref, expr_t *expr); -static expr_t *make_expr1(enum expr_type type, expr_t *expr); -static expr_t *make_expr2(enum expr_type type, expr_t *exp1, expr_t *exp2); -static expr_t *make_expr3(enum expr_type type, expr_t *expr1, expr_t *expr2, expr_t *expr3); -static type_t *make_type(unsigned char type, type_t *ref); -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 void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_t *arr, int top); -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(var_list_t *list, var_t *var); -static var_t *make_var(char *name); -static pident_list_t *append_pident(pident_list_t *list, pident_t *p); -static pident_t *make_pident(var_t *var); -static func_list_t *append_func(func_list_t *list, func_t *func); -static func_t *make_func(var_t *def, var_list_t *args); -static type_t *make_class(char *name); -static type_t *make_safearray(type_t *type); -static type_t *make_builtin(char *name); -static type_t *make_int(int sign); - -static type_t *reg_type(type_t *type, const char *name, int t); -static type_t *reg_typedefs(type_t *type, var_list_t *names, attr_list_t *attrs); -static type_t *find_type(const char *name, int t); -static type_t *find_type2(char *name, int t); -static type_t *get_type(unsigned char type, char *name, int t); -static type_t *get_typev(unsigned char type, var_t *name, int t); -static int get_struct_type(var_list_t *fields); - -static var_t *reg_const(var_t *var); -static var_t *find_const(char *name, int f); - -static void write_libid(const char *name, const attr_list_t *attr); -static void write_clsid(type_t *cls); -static void write_diid(type_t *iface); -static void write_iid(type_t *iface); - -static int compute_method_indexes(type_t *iface); -static char *gen_name(void); -static void process_typedefs(var_list_t *names); -static void check_arg(var_t *arg); -static void check_all_user_types(ifref_list_t *ifaces); - -#define tsENUM 1 -#define tsSTRUCT 2 -#define tsUNION 3 - -%} -%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; - pident_t *pident; - pident_list_t *pident_list; - func_t *func; - func_list_t *func_list; - ifref_t *ifref; - ifref_list_t *ifref_list; - char *str; - UUID *uuid; - unsigned int num; - double dbl; - interface_info_t ifinfo; -} - -%token aIDENTIFIER -%token aKNOWNTYPE -%token aNUM aHEXNUM -%token aDOUBLE -%token aSTRING -%token aUUID -%token aEOF -%token SHL SHR -%token tAGGREGATABLE tALLOCATE 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 tDEFAULT -%token tDEFAULTCOLLELEM -%token tDEFAULTVALUE -%token tDEFAULTVTABLE -%token tDISPLAYBIND -%token tDISPINTERFACE -%token tDLLNAME tDOUBLE tDUAL -%token tENDPOINT -%token tENTRY tENUM tERRORSTATUST -%token tEXPLICITHANDLE tEXTERN -%token tFALSE -%token tFASTCALL -%token tFLOAT -%token tHANDLE -%token tHANDLET -%token tHELPCONTEXT tHELPFILE -%token tHELPSTRING tHELPSTRINGCONTEXT tHELPSTRINGDLL -%token tHIDDEN -%token tHYPER tID tIDEMPOTENT -%token tIIDIS -%token tIMMEDIATEBIND -%token tIMPLICITHANDLE -%token tIMPORT tIMPORTLIB -%token tIN tINLINE -%token tINPUTSYNC -%token tINT tINT64 -%token tINTERFACE -%token tLCID -%token tLENGTHIS tLIBRARY -%token tLOCAL -%token tLONG -%token tMETHODS -%token tMODULE -%token tNONBROWSABLE -%token tNONCREATABLE -%token tNONEXTENSIBLE -%token tOBJECT tODL tOLEAUTOMATION -%token tOPTIONAL -%token tOUT -%token tPASCAL -%token tPOINTERDEFAULT -%token tPROPERTIES -%token tPROPGET tPROPPUT tPROPPUTREF -%token tPTR -%token tPUBLIC -%token tRANGE -%token tREADONLY tREF -%token tREQUESTEDIT -%token tRESTRICTED -%token tRETVAL -%token tSAFEARRAY -%token tSHORT -%token tSIGNED -%token tSINGLE -%token tSIZEIS tSIZEOF -%token tSMALL -%token tSOURCE -%token tSTDCALL -%token tSTRICTCONTEXTHANDLE -%token tSTRING tSTRUCT -%token tSWITCH tSWITCHIS tSWITCHTYPE -%token tTRANSMITAS -%token tTRUE -%token tTYPEDEF -%token tUNION -%token tUNIQUE -%token tUNSIGNED -%token tUUID -%token tV1ENUM -%token tVARARG -%token tVERSION -%token tVOID -%token tWCHAR tWIREMARSHAL - -%type attribute -%type m_attributes attributes attrib_list -%type str_list -%type m_expr expr expr_const -%type m_exprs /* exprs expr_list */ expr_list_const -%type array array_list -%type interfacehdr -%type inherit interface interfacedef interfacedec -%type dispinterface dispinterfacehdr dispinterfacedef -%type module modulehdr moduledef -%type base_type int_std -%type enumdef structdef uniondef -%type type -%type coclass_int -%type gbl_statements coclass_ints -%type arg field s_field case enum constdef externdef -%type m_args no_args args fields cases enums enum_list dispint_props -%type m_ident t_ident ident -%type pident func_ident direct_ident -%type pident_list -%type funcdef -%type int_statements dispint_meths -%type coclass coclasshdr coclassdef -%type pointer_type version -%type libraryhdr callconv -%type uuid_string -%type import_start - -%left ',' -%right '?' ':' -%left '|' -%left '&' -%left '-' '+' -%left '*' '/' -%left SHL SHR -%right '~' -%right CAST -%right PPTR -%right NEG -%right ADDRESSOF - -%% - -input: gbl_statements { fix_incomplete(); - check_all_user_types($1); - write_proxies($1); - write_client($1); - write_server($1); - write_dlldata($1); - } - ; - -gbl_statements: { $$ = NULL; } - | gbl_statements interfacedec { $$ = $1; } - | gbl_statements interfacedef { $$ = append_ifref( $1, make_ifref($2) ); } - | gbl_statements coclass ';' { $$ = $1; - reg_type($2, $2->name, 0); - if (!parse_only && do_header) write_coclass_forward($2); - } - | gbl_statements coclassdef { $$ = $1; - add_typelib_entry($2); - reg_type($2, $2->name, 0); - if (!parse_only && do_header) write_coclass_forward($2); - } - | gbl_statements moduledef { $$ = $1; add_typelib_entry($2); } - | gbl_statements librarydef { $$ = $1; } - | gbl_statements statement { $$ = $1; } - ; - -imp_statements: {} - | imp_statements interfacedec { if (!parse_only) add_typelib_entry($2); } - | imp_statements interfacedef { if (!parse_only) add_typelib_entry($2); } - | imp_statements coclass ';' { reg_type($2, $2->name, 0); if (!parse_only && do_header) write_coclass_forward($2); } - | imp_statements coclassdef { if (!parse_only) add_typelib_entry($2); - reg_type($2, $2->name, 0); - if (!parse_only && do_header) write_coclass_forward($2); - } - | imp_statements moduledef { if (!parse_only) add_typelib_entry($2); } - | imp_statements statement {} - | imp_statements importlib {} - | imp_statements librarydef {} - ; - -int_statements: { $$ = NULL; } - | int_statements funcdef ';' { $$ = append_func( $1, $2 ); } - | int_statements statement { $$ = $1; } - ; - -semicolon_opt: - | ';' - ; - -statement: constdef ';' { if (!parse_only && do_header) { write_constdef($1); } } - | cppquote {} - | enumdef ';' { if (!parse_only && do_header) { - write_type_def_or_decl(header, $1, FALSE, NULL); - fprintf(header, ";\n\n"); - } - } - | externdef ';' { if (!parse_only && do_header) { write_externdef($1); } } - | import {} - | structdef ';' { if (!parse_only && do_header) { - write_type_def_or_decl(header, $1, FALSE, NULL); - fprintf(header, ";\n\n"); - } - } - | typedef ';' {} - | uniondef ';' { if (!parse_only && do_header) { - write_type_def_or_decl(header, $1, FALSE, NULL); - fprintf(header, ";\n\n"); - } - } - ; - -cppquote: tCPPQUOTE '(' aSTRING ')' { if (!parse_only && do_header) fprintf(header, "%s\n", $3); } - ; -import_start: tIMPORT aSTRING ';' { assert(yychar == YYEMPTY); - $$ = do_import($2); - if (!$$) yychar = aEOF; - } - ; - -import: import_start imp_statements aEOF - { if ($1) pop_import(); } - ; - -importlib: tIMPORTLIB '(' aSTRING ')' - semicolon_opt { if(!parse_only) add_importlib($3); } - ; - -libraryhdr: tLIBRARY aIDENTIFIER { $$ = $2; } - ; -library_start: attributes libraryhdr '{' { if (!parse_only) start_typelib($2, $1); - if (!parse_only && do_header) write_library($2, $1); - if (!parse_only && do_idfile) write_libid($2, $1); - } - ; -librarydef: library_start imp_statements '}' - semicolon_opt { if (!parse_only) end_typelib(); } - ; - -m_args: { $$ = NULL; } - | args - ; - -no_args: tVOID { $$ = NULL; } - ; - -args: arg { check_arg($1); $$ = append_var( NULL, $1 ); } - | args ',' arg { check_arg($3); $$ = append_var( $1, $3); } - | no_args - ; - -/* split into two rules to get bison to resolve a tVOID conflict */ -arg: attributes type pident array { $$ = $3->var; - $$->attrs = $1; - set_type($$, $2, $3, $4, TRUE); - free($3); - } - | type pident array { $$ = $2->var; - set_type($$, $1, $2, $3, TRUE); - free($2); - } - ; - -array: { $$ = NULL; } - | '[' array_list ']' { $$ = $2; } - | '[' '*' ']' { $$ = append_array( NULL, make_expr(EXPR_VOID) ); } - ; - -array_list: m_expr /* size of first dimension is optional */ { $$ = append_array( NULL, $1 ); } - | array_list ',' expr { $$ = append_array( $1, $3 ); } - | array_list ']' '[' expr { $$ = append_array( $1, $4 ); } - ; - -m_attributes: { $$ = NULL; } - | attributes - ; - -attributes: - '[' attrib_list ']' { $$ = $2; - if (!$$) - error_loc("empty attribute lists unsupported\n"); - } - ; - -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); } - | tAPPOBJECT { $$ = make_attr(ATTR_APPOBJECT); } - | tASYNC { $$ = make_attr(ATTR_ASYNC); } - | tAUTOHANDLE { $$ = make_attr(ATTR_AUTO_HANDLE); } - | tBINDABLE { $$ = make_attr(ATTR_BINDABLE); } - | tCALLAS '(' ident ')' { $$ = make_attrp(ATTR_CALLAS, $3); } - | tCASE '(' expr_list_const ')' { $$ = make_attrp(ATTR_CASE, $3); } - | 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); } - | tDEFAULT { $$ = make_attr(ATTR_DEFAULT); } - | tDEFAULTCOLLELEM { $$ = make_attr(ATTR_DEFAULTCOLLELEM); } - | tDEFAULTVALUE '(' expr_const ')' { $$ = make_attrp(ATTR_DEFAULTVALUE_EXPR, $3); } - | tDEFAULTVALUE '(' aSTRING ')' { $$ = make_attrp(ATTR_DEFAULTVALUE_STRING, $3); } - | tDEFAULTVTABLE { $$ = make_attr(ATTR_DEFAULTVTABLE); } - | tDISPLAYBIND { $$ = make_attr(ATTR_DISPLAYBIND); } - | tDLLNAME '(' aSTRING ')' { $$ = make_attrp(ATTR_DLLNAME, $3); } - | tDUAL { $$ = make_attr(ATTR_DUAL); } - | tENDPOINT '(' str_list ')' { $$ = make_attrp(ATTR_ENDPOINT, $3); } - | tENTRY '(' aSTRING ')' { $$ = make_attrp(ATTR_ENTRY_STRING, $3); } - | tENTRY '(' expr_const ')' { $$ = make_attrp(ATTR_ENTRY_ORDINAL, $3); } - | tEXPLICITHANDLE { $$ = make_attr(ATTR_EXPLICIT_HANDLE); } - | tHANDLE { $$ = make_attr(ATTR_HANDLE); } - | tHELPCONTEXT '(' expr_const ')' { $$ = make_attrp(ATTR_HELPCONTEXT, $3); } - | tHELPFILE '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPFILE, $3); } - | tHELPSTRING '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPSTRING, $3); } - | tHELPSTRINGCONTEXT '(' expr_const ')' { $$ = make_attrp(ATTR_HELPSTRINGCONTEXT, $3); } - | tHELPSTRINGDLL '(' aSTRING ')' { $$ = make_attrp(ATTR_HELPSTRINGDLL, $3); } - | tHIDDEN { $$ = make_attr(ATTR_HIDDEN); } - | tID '(' expr_const ')' { $$ = make_attrp(ATTR_ID, $3); } - | tIDEMPOTENT { $$ = make_attr(ATTR_IDEMPOTENT); } - | tIIDIS '(' expr ')' { $$ = make_attrp(ATTR_IIDIS, $3); } - | tIMMEDIATEBIND { $$ = make_attr(ATTR_IMMEDIATEBIND); } - | tIMPLICITHANDLE '(' tHANDLET aIDENTIFIER ')' { $$ = make_attrp(ATTR_IMPLICIT_HANDLE, $4); } - | tIN { $$ = make_attr(ATTR_IN); } - | tINPUTSYNC { $$ = make_attr(ATTR_INPUTSYNC); } - | tLENGTHIS '(' m_exprs ')' { $$ = make_attrp(ATTR_LENGTHIS, $3); } - | tLOCAL { $$ = make_attr(ATTR_LOCAL); } - | tNONBROWSABLE { $$ = make_attr(ATTR_NONBROWSABLE); } - | tNONCREATABLE { $$ = make_attr(ATTR_NONCREATABLE); } - | tNONEXTENSIBLE { $$ = make_attr(ATTR_NONEXTENSIBLE); } - | tOBJECT { $$ = make_attr(ATTR_OBJECT); } - | tODL { $$ = make_attr(ATTR_ODL); } - | tOLEAUTOMATION { $$ = make_attr(ATTR_OLEAUTOMATION); } - | tOPTIONAL { $$ = make_attr(ATTR_OPTIONAL); } - | tOUT { $$ = make_attr(ATTR_OUT); } - | tPOINTERDEFAULT '(' pointer_type ')' { $$ = make_attrv(ATTR_POINTERDEFAULT, $3); } - | tPROPGET { $$ = make_attr(ATTR_PROPGET); } - | tPROPPUT { $$ = make_attr(ATTR_PROPPUT); } - | tPROPPUTREF { $$ = make_attr(ATTR_PROPPUTREF); } - | tPUBLIC { $$ = make_attr(ATTR_PUBLIC); } - | tRANGE '(' expr_const ',' expr_const ')' { expr_list_t *list = append_expr( NULL, $3 ); - list = append_expr( list, $5 ); - $$ = make_attrp(ATTR_RANGE, list); } - | tREADONLY { $$ = make_attr(ATTR_READONLY); } - | 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); } - | tUUID '(' uuid_string ')' { $$ = make_attrp(ATTR_UUID, $3); } - | tV1ENUM { $$ = make_attr(ATTR_V1ENUM); } - | tVARARG { $$ = make_attr(ATTR_VARARG); } - | tVERSION '(' version ')' { $$ = make_attrv(ATTR_VERSION, $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 { $$ = $1; } - | tFASTCALL { $$ = $1; } - | tPASCAL { $$ = $1; } - | tSTDCALL { $$ = $1; } - ; - -cases: { $$ = NULL; } - | cases case { $$ = append_var( $1, $2 ); } - ; - -case: tCASE expr ':' field { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, $2 )); - $$ = $4; if (!$$) $$ = make_var(NULL); - $$->attrs = append_attr( $$->attrs, a ); - } - | tDEFAULT ':' field { attr_t *a = make_attr(ATTR_DEFAULT); - $$ = $3; if (!$$) $$ = make_var(NULL); - $$->attrs = append_attr( $$->attrs, a ); - } - ; - -constdef: tCONST type ident '=' expr_const { $$ = reg_const($3); - set_type($$, $2, NULL, NULL, FALSE); - $$->eval = $5; - } - ; - -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 ); - $3->eval = make_exprl(EXPR_NUM, last->eval->cval + 1); - } - $$ = append_var( $1, $3 ); - } - ; - -enum: ident '=' expr_const { $$ = reg_const($1); - $$->eval = $3; - $$->type = make_int(0); - } - | ident { $$ = reg_const($1); - $$->type = make_int(0); - } - ; - -enumdef: tENUM t_ident '{' enums '}' { $$ = get_typev(RPC_FC_ENUM16, $2, tsENUM); - $$->kind = TKIND_ENUM; - $$->fields_or_args = $4; - $$->defined = TRUE; - if(in_typelib) - add_typelib_entry($$); - } - ; - -m_exprs: m_expr { $$ = append_expr( NULL, $1 ); } - | m_exprs ',' m_expr { $$ = append_expr( $1, $3 ); } - ; - -/* -exprs: { $$ = make_expr(EXPR_VOID); } - | expr_list - ; - -expr_list: expr - | expr_list ',' expr { LINK($3, $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); } - | tTRUE { $$ = make_exprl(EXPR_TRUEFALSE, 1); } - | aIDENTIFIER { $$ = make_exprs(EXPR_IDENTIFIER, $1); } - | expr '?' expr ':' expr { $$ = make_expr3(EXPR_COND, $1, $3, $5); } - | expr '|' expr { $$ = make_expr2(EXPR_OR , $1, $3); } - | expr '&' expr { $$ = make_expr2(EXPR_AND, $1, $3); } - | expr '+' expr { $$ = make_expr2(EXPR_ADD, $1, $3); } - | expr '-' expr { $$ = make_expr2(EXPR_SUB, $1, $3); } - | expr '*' expr { $$ = make_expr2(EXPR_MUL, $1, $3); } - | expr '/' expr { $$ = make_expr2(EXPR_DIV, $1, $3); } - | expr SHL expr { $$ = make_expr2(EXPR_SHL, $1, $3); } - | expr SHR expr { $$ = make_expr2(EXPR_SHR, $1, $3); } - | '~' expr { $$ = make_expr1(EXPR_NOT, $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); } - | '(' type ')' expr %prec CAST { $$ = make_exprt(EXPR_CAST, $2, $4); } - | tSIZEOF '(' type ')' { $$ = make_exprt(EXPR_SIZEOF, $3, NULL); } - | '(' expr ')' { $$ = $2; } - ; - -expr_list_const: expr_const { $$ = append_expr( NULL, $1 ); } - | expr_list_const ',' expr_const { $$ = append_expr( $1, $3 ); } - ; - -expr_const: expr { $$ = $1; - if (!$$->is_const) - error_loc("expression is not constant\n"); - } - ; - -externdef: tEXTERN tCONST type ident { $$ = $4; - set_type($$, $3, NULL, NULL, FALSE); - } - ; - -fields: { $$ = NULL; } - | fields field { $$ = append_var( $1, $2 ); } - ; - -field: s_field ';' { $$ = $1; } - | m_attributes uniondef ';' { $$ = make_var(NULL); $$->type = $2; $$->attrs = $1; } - | attributes ';' { $$ = make_var(NULL); $$->attrs = $1; } - | ';' { $$ = NULL; } - ; - -s_field: m_attributes type pident array { $$ = $3->var; - $$->attrs = $1; - set_type($$, $2, $3, $4, FALSE); - free($3); - } - ; - -funcdef: - m_attributes type pident { var_t *v = $3->var; - var_list_t *args = $3->args; - v->attrs = $1; - set_type(v, $2, $3, NULL, FALSE); - free($3); - $$ = make_func(v, args); - if (is_attr(v->attrs, ATTR_IN)) { - error_loc("inapplicable attribute [in] for function '%s'\n",$$->def->name); - } - } - ; - -m_ident: { $$ = NULL; } - | ident - ; - -t_ident: { $$ = NULL; } - | aIDENTIFIER { $$ = make_var($1); } - | aKNOWNTYPE { $$ = make_var($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 { $$ = make_builtin($1); } - | tWCHAR { $$ = make_builtin($1); } - | int_std - | tSIGNED int_std { $$ = $2; $$->sign = 1; } - | tUNSIGNED int_std { $$ = $2; $$->sign = -1; - switch ($$->type) { - case RPC_FC_CHAR: break; - case RPC_FC_SMALL: $$->type = RPC_FC_USMALL; break; - case RPC_FC_SHORT: $$->type = RPC_FC_USHORT; break; - case RPC_FC_LONG: $$->type = RPC_FC_ULONG; break; - case RPC_FC_HYPER: - if ($$->name[0] == 'h') /* hyper, as opposed to __int64 */ - { - $$ = alias($$, "MIDL_uhyper"); - $$->sign = 0; - } - break; - default: break; - } - } - | tUNSIGNED { $$ = make_int(-1); } - | tFLOAT { $$ = make_builtin($1); } - | tSINGLE { $$ = duptype(find_type("float", 0), 1); } - | tDOUBLE { $$ = make_builtin($1); } - | tBOOLEAN { $$ = make_builtin($1); } - | tERRORSTATUST { $$ = make_builtin($1); } - | tHANDLET { $$ = make_builtin($1); } - ; - -m_int: - | tINT - ; - -int_std: tINT { $$ = make_builtin($1); } - | tSHORT m_int { $$ = make_builtin($1); } - | tSMALL { $$ = make_builtin($1); } - | tLONG m_int { $$ = make_builtin($1); } - | tHYPER m_int { $$ = make_builtin($1); } - | tINT64 { $$ = make_builtin($1); } - | tCHAR { $$ = make_builtin($1); } - ; - -coclass: tCOCLASS aIDENTIFIER { $$ = make_class($2); } - | tCOCLASS aKNOWNTYPE { $$ = find_type($2, 0); - if ($$->defined) error_loc("multiple definition error\n"); - if ($$->kind != TKIND_COCLASS) error_loc("%s was not declared a coclass\n", $2); - } - ; - -coclasshdr: attributes coclass { $$ = $2; - $$->attrs = $1; - if (!parse_only && do_header) - write_coclass($$); - if (!parse_only && do_idfile) - write_clsid($$); - } - ; - -coclassdef: coclasshdr '{' coclass_ints '}' semicolon_opt - { $$ = $1; - $$->ifaces = $3; - $$->defined = TRUE; - } - ; - -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(0, $2, 0); $$->kind = TKIND_DISPATCH; } - | tDISPINTERFACE aKNOWNTYPE { $$ = get_type(0, $2, 0); $$->kind = TKIND_DISPATCH; } - ; - -dispinterfacehdr: attributes dispinterface { attr_t *attrs; - is_object_interface = TRUE; - $$ = $2; - if ($$->defined) error_loc("multiple definition error\n"); - attrs = make_attr(ATTR_DISPINTERFACE); - $$->attrs = append_attr( $1, attrs ); - $$->ref = find_type("IDispatch", 0); - if (!$$->ref) error_loc("IDispatch is undefined\n"); - $$->defined = TRUE; - if (!parse_only && do_header) write_forward($$); - } - ; - -dispint_props: tPROPERTIES ':' { $$ = NULL; } - | dispint_props s_field ';' { $$ = append_var( $1, $2 ); } - ; - -dispint_meths: tMETHODS ':' { $$ = NULL; } - | dispint_meths funcdef ';' { $$ = append_func( $1, $2 ); } - ; - -dispinterfacedef: dispinterfacehdr '{' - dispint_props - dispint_meths - '}' { $$ = $1; - $$->fields_or_args = $3; - $$->funcs = $4; - if (!parse_only && do_header) write_dispinterface($$); - if (!parse_only && do_idfile) write_diid($$); - } - | dispinterfacehdr - '{' interface ';' '}' { $$ = $1; - $$->fields_or_args = $3->fields_or_args; - $$->funcs = $3->funcs; - if (!parse_only && do_header) write_dispinterface($$); - if (!parse_only && do_idfile) write_diid($$); - } - ; - -inherit: { $$ = NULL; } - | ':' aKNOWNTYPE { $$ = find_type2($2, 0); } - ; - -interface: tINTERFACE aIDENTIFIER { $$ = get_type(RPC_FC_IP, $2, 0); $$->kind = TKIND_INTERFACE; } - | tINTERFACE aKNOWNTYPE { $$ = get_type(RPC_FC_IP, $2, 0); $$->kind = TKIND_INTERFACE; } - ; - -interfacehdr: attributes interface { $$.interface = $2; - $$.old_pointer_default = pointer_default; - if (is_attr($1, ATTR_POINTERDEFAULT)) - pointer_default = get_attrv($1, ATTR_POINTERDEFAULT); - is_object_interface = is_object($1); - if ($2->defined) error_loc("multiple definition error\n"); - $2->attrs = $1; - $2->defined = TRUE; - if (!parse_only && do_header) write_forward($2); - } - ; - -interfacedef: interfacehdr inherit - '{' int_statements '}' semicolon_opt { $$ = $1.interface; - $$->ref = $2; - $$->funcs = $4; - compute_method_indexes($$); - if (!parse_only && do_header) write_interface($$); - if (!parse_only && local_stubs) write_locals(local_stubs, $$, TRUE); - if (!parse_only && do_idfile) write_iid($$); - 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; - $$->ref = find_type2($3, 0); - if (!$$->ref) error_loc("base class '%s' not found in import\n", $3); - $$->funcs = $6; - compute_method_indexes($$); - if (!parse_only && do_header) write_interface($$); - if (!parse_only && local_stubs) write_locals(local_stubs, $$, TRUE); - if (!parse_only && do_idfile) write_iid($$); - pointer_default = $1.old_pointer_default; - } - | dispinterfacedef semicolon_opt { $$ = $1; } - ; - -interfacedec: - interface ';' { $$ = $1; if (!parse_only && do_header) write_forward($$); } - | dispinterface ';' { $$ = $1; if (!parse_only && do_header) write_forward($$); } - ; - -module: tMODULE aIDENTIFIER { $$ = make_type(0, NULL); $$->name = $2; $$->kind = TKIND_MODULE; } - | tMODULE aKNOWNTYPE { $$ = make_type(0, NULL); $$->name = $2; $$->kind = TKIND_MODULE; } - ; - -modulehdr: attributes module { $$ = $2; - $$->attrs = $1; - } - ; - -moduledef: modulehdr '{' int_statements '}' - semicolon_opt { $$ = $1; - $$->funcs = $3; - /* FIXME: if (!parse_only && do_header) write_module($$); */ - } - ; - -pident: '*' pident %prec PPTR { $$ = $2; $$->ptr_level++; } - | tCONST pident { $$ = $2; /* FIXME */ } - | callconv pident { $$ = $2; - if ($$->callconv) parser_warning("multiple calling conventions %s, %s for function %s\n", $$->callconv, $1, $$->var->name); - $$->callconv = $1; - } - | direct_ident - ; - -func_ident: direct_ident '(' m_args ')' - { $$ = $1; - $1->args = $3; - $1->is_func = TRUE; - } - ; - -direct_ident: ident { $$ = make_pident($1); } - | '(' pident ')' { $$ = $2; } - | func_ident { $$ = $1; - $$->func_ptr_level = $$->ptr_level; - $$->ptr_level = 0; - } - ; - -pident_list: - pident { $$ = append_pident( NULL, $1 ); } - | pident_list ',' pident { $$ = append_pident( $1, $3 ); } - ; - -pointer_type: - tREF { $$ = RPC_FC_RP; } - | tUNIQUE { $$ = RPC_FC_UP; } - | tPTR { $$ = RPC_FC_FP; } - ; - -structdef: tSTRUCT t_ident '{' fields '}' { $$ = get_typev(RPC_FC_STRUCT, $2, tsSTRUCT); - /* overwrite RPC_FC_STRUCT with a more exact type */ - $$->type = get_struct_type( $4 ); - $$->kind = TKIND_RECORD; - $$->fields_or_args = $4; - $$->defined = TRUE; - if(in_typelib) - add_typelib_entry($$); - } - ; - -type: tVOID { $$ = duptype(find_type("void", 0), 1); } - | aKNOWNTYPE { $$ = find_type($1, 0); } - | base_type { $$ = $1; } - | tCONST type { $$ = duptype($2, 1); $$->is_const = TRUE; } - | enumdef { $$ = $1; } - | tENUM aIDENTIFIER { $$ = find_type2($2, tsENUM); } - | structdef { $$ = $1; } - | tSTRUCT aIDENTIFIER { $$ = get_type(RPC_FC_STRUCT, $2, tsSTRUCT); } - | uniondef { $$ = $1; } - | tUNION aIDENTIFIER { $$ = find_type2($2, tsUNION); } - | tSAFEARRAY '(' type ')' { $$ = make_safearray($3); } - ; - -typedef: tTYPEDEF m_attributes type pident_list { reg_typedefs($3, $4, $2); - process_typedefs($4); - } - ; - -uniondef: tUNION t_ident '{' fields '}' { $$ = get_typev(RPC_FC_NON_ENCAPSULATED_UNION, $2, tsUNION); - $$->kind = TKIND_UNION; - $$->fields_or_args = $4; - $$->defined = TRUE; - } - | tUNION t_ident - tSWITCH '(' s_field ')' - m_ident '{' cases '}' { var_t *u = $7; - $$ = get_typev(RPC_FC_ENCAPSULATED_UNION, $2, tsUNION); - $$->kind = TKIND_UNION; - if (!u) u = make_var( xstrdup("tagged_union") ); - u->type = make_type(RPC_FC_NON_ENCAPSULATED_UNION, NULL); - u->type->kind = TKIND_UNION; - u->type->fields_or_args = $9; - u->type->defined = TRUE; - $$->fields_or_args = append_var( $$->fields_or_args, $5 ); - $$->fields_or_args = append_var( $$->fields_or_args, u ); - $$->defined = TRUE; - } - ; - -version: - aNUM { $$ = MAKEVERSION($1, 0); } - | aNUM '.' aNUM { $$ = MAKEVERSION($1, $3); } - ; - -%% - -static void decl_builtin(const char *name, unsigned char type) -{ - type_t *t = make_type(type, NULL); - t->name = xstrdup(name); - reg_type(t, name, 0); -} - -static type_t *make_builtin(char *name) -{ - /* NAME is strdup'd in the lexer */ - type_t *t = duptype(find_type(name, 0), 0); - t->name = name; - return t; -} - -static type_t *make_int(int sign) -{ - type_t *t = duptype(find_type("int", 0), 1); - - t->sign = sign; - if (sign < 0) - t->type = t->type == RPC_FC_LONG ? RPC_FC_ULONG : RPC_FC_USHORT; - - return t; -} - -void init_types(void) -{ - decl_builtin("void", 0); - decl_builtin("byte", RPC_FC_BYTE); - decl_builtin("wchar_t", RPC_FC_WCHAR); - decl_builtin("int", RPC_FC_LONG); /* win32 */ - decl_builtin("short", RPC_FC_SHORT); - decl_builtin("small", RPC_FC_SMALL); - decl_builtin("long", RPC_FC_LONG); - decl_builtin("hyper", RPC_FC_HYPER); - decl_builtin("__int64", RPC_FC_HYPER); - decl_builtin("char", RPC_FC_CHAR); - decl_builtin("float", RPC_FC_FLOAT); - decl_builtin("double", RPC_FC_DOUBLE); - decl_builtin("boolean", RPC_FC_BYTE); - decl_builtin("error_status_t", RPC_FC_ERROR_STATUS_T); - decl_builtin("handle_t", RPC_FC_BIND_PRIMITIVE); -} - -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) -{ - if (!attr) return list; - if (!list) - { - list = xmalloc( sizeof(*list) ); - list_init( list ); - } - list_add_tail( list, &attr->entry ); - return list; -} - -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 long 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_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; -} - -static expr_t *make_exprl(enum expr_type type, long 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; -} - -static 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; -} - -static 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 */ - if (type == 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; - } - } - return e; -} - -static expr_t *make_exprt(enum expr_type type, type_t *tref, expr_t *expr) -{ - expr_t *e; - e = xmalloc(sizeof(expr_t)); - e->type = type; - e->ref = expr; - e->u.tref = tref; - e->is_const = FALSE; - /* check for cast of constant expression */ - if (type == EXPR_SIZEOF) { - switch (tref->type) { - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_SMALL: - case RPC_FC_USMALL: - e->is_const = TRUE; - e->cval = 1; - break; - case RPC_FC_WCHAR: - case RPC_FC_USHORT: - case RPC_FC_SHORT: - e->is_const = TRUE; - e->cval = 2; - break; - case RPC_FC_LONG: - case RPC_FC_ULONG: - case RPC_FC_FLOAT: - case RPC_FC_ERROR_STATUS_T: - e->is_const = TRUE; - e->cval = 4; - break; - case RPC_FC_HYPER: - case RPC_FC_DOUBLE: - e->is_const = TRUE; - e->cval = 8; - break; - } - } - if (type == EXPR_CAST && expr->is_const) { - e->is_const = TRUE; - e->cval = expr->cval; - } - return e; -} - -static expr_t *make_expr1(enum expr_type type, expr_t *expr) -{ - expr_t *e; - if (type == EXPR_ADDRESSOF && expr->type != EXPR_IDENTIFIER) - error("address-of operator applied to invalid expression\n"); - 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_NEG: - e->cval = -expr->cval; - break; - case EXPR_NOT: - e->cval = ~expr->cval; - break; - default: - e->is_const = FALSE; - break; - } - } - return e; -} - -static 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_MUL: - e->cval = expr1->cval * expr2->cval; - break; - case EXPR_DIV: - 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; - default: - e->is_const = FALSE; - break; - } - } - return e; -} - -static 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; -} - -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; -} - -static type_t *make_type(unsigned char type, type_t *ref) -{ - type_t *t = alloc_type(); - t->name = NULL; - t->kind = TKIND_PRIMITIVE; - t->type = type; - t->ref = ref; - t->attrs = NULL; - t->orig = NULL; - t->funcs = NULL; - t->fields_or_args = NULL; - t->ifaces = NULL; - t->dim = 0; - t->size_is = NULL; - t->length_is = NULL; - t->typestring_offset = 0; - t->ptrdesc = 0; - t->declarray = FALSE; - t->ignore = (parse_only != 0); - t->is_const = FALSE; - t->sign = 0; - t->defined = FALSE; - t->written = FALSE; - t->user_types_registered = FALSE; - t->tfswrite = FALSE; - t->typelib_idx = -1; - return t; -} - -static void set_type(var_t *v, type_t *type, const pident_t *pident, array_dims_t *arr, - int top) -{ - expr_list_t *sizes = get_attrp(v->attrs, ATTR_SIZEIS); - expr_list_t *lengs = get_attrp(v->attrs, ATTR_LENGTHIS); - int ptr_attr = get_attrv(v->attrs, ATTR_POINTERTYPE); - int ptr_type = ptr_attr; - int sizeless, has_varconf; - expr_t *dim; - type_t *atype, **ptype; - int ptr_level = (pident ? pident->ptr_level : 0); - - v->type = type; - - if (!ptr_type && top) - ptr_type = RPC_FC_RP; - - for ( ; 0 < ptr_level; --ptr_level) - { - v->type = make_type(pointer_default, v->type); - if (ptr_level == 1 && ptr_type && !arr) - { - v->type->type = ptr_type; - ptr_type = 0; - } - } - - if (ptr_type && !arr) - { - if (is_ptr(v->type)) - { - if (v->type->type != ptr_type) - { - v->type = duptype(v->type, 1); - v->type->type = ptr_type; - } - } - else if (!arr && ptr_attr) - error("%s: pointer attribute applied to non-pointer type\n", v->name); - } - - if (pident && pident->is_func) { - int func_ptr_level = pident->func_ptr_level; - v->type = make_type(RPC_FC_FUNCTION, v->type); - v->type->fields_or_args = pident->args; - if (pident->callconv) - v->type->attrs = append_attr(NULL, make_attrp(ATTR_CALLCONV, pident->callconv)); - else if (is_object_interface) { - static char *stdmethodcalltype; - if (!stdmethodcalltype) stdmethodcalltype = strdup("STDMETHODCALLTYPE"); - v->type->attrs = append_attr(NULL, make_attrp(ATTR_CALLCONV, stdmethodcalltype)); - } - for (; func_ptr_level > 0; func_ptr_level--) - v->type = make_type(ptr_type, v->type); - } - - sizeless = FALSE; - if (arr) LIST_FOR_EACH_ENTRY_REV(dim, arr, expr_t, entry) - { - if (sizeless) - error("%s: only the first array dimension can be unspecified\n", v->name); - - if (dim->is_const) - { - unsigned int align = 0; - size_t size = type_memsize(v->type, &align); - - if (dim->cval <= 0) - error("%s: array dimension must be positive\n", v->name); - - if (0xffffffffuL / size < (unsigned long) dim->cval) - error("%s: total array size is too large\n", v->name); - else if (0xffffuL < size * dim->cval) - v->type = make_type(RPC_FC_LGFARRAY, v->type); - else - v->type = make_type(RPC_FC_SMFARRAY, v->type); - } - else - { - sizeless = TRUE; - v->type = make_type(RPC_FC_CARRAY, v->type); - } - - v->type->declarray = TRUE; - v->type->dim = dim->cval; - } - - ptype = &v->type; - has_varconf = FALSE; - if (sizes) LIST_FOR_EACH_ENTRY(dim, sizes, expr_t, entry) - { - if (dim->type != EXPR_VOID) - { - has_varconf = TRUE; - atype = *ptype = duptype(*ptype, 0); - - if (atype->type == RPC_FC_SMFARRAY || atype->type == RPC_FC_LGFARRAY) - error("%s: cannot specify size_is for a fixed sized array\n", v->name); - - if (atype->type != RPC_FC_CARRAY && !is_ptr(atype)) - error("%s: size_is attribute applied to illegal type\n", v->name); - - atype->type = RPC_FC_CARRAY; - atype->size_is = dim; - } - - ptype = &(*ptype)->ref; - if (*ptype == NULL) - error("%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) - { - has_varconf = TRUE; - atype = *ptype = duptype(*ptype, 0); - - if (atype->type == RPC_FC_SMFARRAY) - atype->type = RPC_FC_SMVARRAY; - else if (atype->type == RPC_FC_LGFARRAY) - atype->type = RPC_FC_LGVARRAY; - else if (atype->type == RPC_FC_CARRAY) - atype->type = RPC_FC_CVARRAY; - else - error("%s: length_is attribute applied to illegal type\n", v->name); - - atype->length_is = dim; - } - - ptype = &(*ptype)->ref; - if (*ptype == NULL) - error("%s: too many expressions in length_is attribute\n", v->name); - } - - if (has_varconf && !last_array(v->type)) - { - ptype = &v->type; - for (ptype = &v->type; is_array(*ptype); ptype = &(*ptype)->ref) - { - *ptype = duptype(*ptype, 0); - (*ptype)->type = RPC_FC_BOGUS_ARRAY; - } - } - - if (is_array(v->type)) - { - const type_t *rt = v->type->ref; - if (is_user_type(rt)) - v->type->type = RPC_FC_BOGUS_ARRAY; - else - switch (rt->type) - { - case RPC_FC_BOGUS_STRUCT: - case RPC_FC_NON_ENCAPSULATED_UNION: - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_ENUM16: - v->type->type = RPC_FC_BOGUS_ARRAY; - break; - /* FC_RP should be above, but widl overuses these, and will break things. */ - case RPC_FC_UP: - case RPC_FC_RP: - if (rt->ref->type == RPC_FC_IP) - v->type->type = RPC_FC_BOGUS_ARRAY; - break; - } - } -} - -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; -} - -static 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_t *make_var(char *name) -{ - var_t *v = xmalloc(sizeof(var_t)); - v->name = name; - v->type = NULL; - v->attrs = NULL; - v->eval = NULL; - return v; -} - -static pident_list_t *append_pident(pident_list_t *list, pident_t *p) -{ - if (!p) return list; - if (!list) { - list = xmalloc(sizeof(*list)); - list_init(list); - } - list_add_tail(list, &p->entry); - return list; -} - -static pident_t *make_pident(var_t *var) -{ - pident_t *p = xmalloc(sizeof(*p)); - p->var = var; - p->is_func = FALSE; - p->ptr_level = 0; - p->func_ptr_level = 0; - p->args = NULL; - p->callconv = NULL; - return p; -} - -static func_list_t *append_func(func_list_t *list, func_t *func) -{ - if (!func) return list; - if (!list) - { - list = xmalloc( sizeof(*list) ); - list_init( list ); - } - list_add_tail( list, &func->entry ); - return list; -} - -static func_t *make_func(var_t *def, var_list_t *args) -{ - func_t *f = xmalloc(sizeof(func_t)); - f->def = def; - f->args = args; - f->ignore = parse_only; - f->idx = -1; - return f; -} - -static type_t *make_class(char *name) -{ - type_t *c = make_type(0, NULL); - c->name = name; - c->kind = TKIND_COCLASS; - return c; -} - -static type_t *make_safearray(type_t *type) -{ - type_t *sa = duptype(find_type("SAFEARRAY", 0), 1); - sa->ref = type; - return make_type(pointer_default, sa); -} - -#define HASHMAX 64 - -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 *****/ - -struct rtype { - const char *name; - type_t *type; - int t; - struct rtype *next; -}; - -struct rtype *type_hash[HASHMAX]; - -static type_t *reg_type(type_t *type, const char *name, int t) -{ - struct rtype *nt; - int hash; - if (!name) { - error_loc("registering named type without name\n"); - return type; - } - hash = hash_ident(name); - nt = xmalloc(sizeof(struct rtype)); - nt->name = name; - nt->type = type; - nt->t = t; - nt->next = type_hash[hash]; - type_hash[hash] = nt; - return type; -} - -static int is_incomplete(const type_t *t) -{ - return !t->defined && (is_struct(t->type) || is_union(t->type)); -} - -static 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 (t->kind == TKIND_ALIAS && is_incomplete(t)) { - type_t *ot = t->orig; - fix_type(ot); - t->fields_or_args = ot->fields_or_args; - 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); - free(tn); - } -} - -static type_t *reg_typedefs(type_t *type, pident_list_t *pidents, attr_list_t *attrs) -{ - type_t *ptr = type; - const pident_t *pident; - int ptrc = 0; - int is_str = is_attr(attrs, ATTR_STRING); - unsigned char ptr_type = get_attrv(attrs, ATTR_POINTERTYPE); - - if (is_str) - { - type_t *t = type; - unsigned char c; - - while (is_ptr(t)) - t = t->ref; - - c = t->type; - if (c != RPC_FC_CHAR && c != RPC_FC_BYTE && c != RPC_FC_WCHAR) - { - pident = LIST_ENTRY( list_head( pidents ), const pident_t, entry ); - error_loc("'%s': [string] attribute is only valid on 'char', 'byte', or 'wchar_t' pointers and arrays\n", - pident->var->name); - } - } - - /* 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 whether it has other attributes or not, - hence the public attribute. */ - if ((type->kind == TKIND_ENUM || type->kind == TKIND_RECORD - || type->kind == TKIND_UNION) && ! type->name && ! parse_only) - { - if (! is_attr(attrs, ATTR_PUBLIC)) - attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) ); - type->name = gen_name(); - } - - LIST_FOR_EACH_ENTRY( pident, pidents, const pident_t, entry ) - { - var_t *name = pident->var; - - if (name->name) { - type_t *cur = ptr; - int cptr = pident->ptr_level; - if (cptr > ptrc) { - while (cptr > ptrc) { - cur = ptr = make_type(pointer_default, cur); - ptrc++; - } - } else { - while (cptr < ptrc) { - cur = cur->ref; - cptr++; - } - } - if (pident->is_func) { - int func_ptr_level = pident->func_ptr_level; - cur = make_type(RPC_FC_FUNCTION, cur); - cur->fields_or_args = pident->args; - if (pident->callconv) - cur->attrs = append_attr(NULL, make_attrp(ATTR_CALLCONV, pident->callconv)); - else if (is_object_interface) { - static char *stdmethodcalltype; - if (!stdmethodcalltype) stdmethodcalltype = strdup("STDMETHODCALLTYPE"); - cur->attrs = append_attr(NULL, make_attrp(ATTR_CALLCONV, stdmethodcalltype)); - } - for (; func_ptr_level > 0; func_ptr_level--) - cur = make_type(pointer_default, cur); - } - cur = alias(cur, name->name); - cur->attrs = attrs; - if (ptr_type) - { - if (is_ptr(cur)) - cur->type = ptr_type; - else - error_loc("'%s': pointer attribute applied to non-pointer type\n", - cur->name); - } - else if (is_str && ! is_ptr(cur)) - error_loc("'%s': [string] attribute applied to non-pointer type\n", - cur->name); - - if (is_incomplete(cur)) - add_incomplete(cur); - reg_type(cur, cur->name, 0); - } - } - return type; -} - -static type_t *find_type(const char *name, int t) -{ - struct rtype *cur = type_hash[hash_ident(name)]; - while (cur && (cur->t != t || strcmp(cur->name, name))) - cur = cur->next; - if (!cur) { - error_loc("type '%s' not found\n", name); - return NULL; - } - return cur->type; -} - -static type_t *find_type2(char *name, int t) -{ - type_t *tp = find_type(name, t); - free(name); - return tp; -} - -int is_type(const char *name) -{ - struct rtype *cur = type_hash[hash_ident(name)]; - while (cur && (cur->t || strcmp(cur->name, name))) - cur = cur->next; - if (cur) return TRUE; - return FALSE; -} - -static type_t *get_type(unsigned char type, char *name, int t) -{ - struct rtype *cur = NULL; - type_t *tp; - if (name) { - cur = type_hash[hash_ident(name)]; - while (cur && (cur->t != t || strcmp(cur->name, name))) - cur = cur->next; - } - if (cur) { - free(name); - return cur->type; - } - tp = make_type(type, NULL); - tp->name = name; - if (!name) return tp; - return reg_type(tp, name, t); -} - -static type_t *get_typev(unsigned char type, var_t *name, int t) -{ - char *sname = NULL; - if (name) { - sname = name->name; - free(name); - } - return get_type(type, sname, t); -} - -static int get_struct_type(var_list_t *fields) -{ - int has_pointer = 0; - int has_conformance = 0; - int has_variance = 0; - var_t *field; - - if (get_padding(fields)) - return RPC_FC_BOGUS_STRUCT; - - if (fields) LIST_FOR_EACH_ENTRY( field, fields, var_t, entry ) - { - type_t *t = field->type; - - if (is_user_type(t)) - return RPC_FC_BOGUS_STRUCT; - - if (is_ptr(t)) - { - do - t = t->ref; - while (is_ptr(t)); - - switch (t->type) - { - case RPC_FC_IP: - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_NON_ENCAPSULATED_UNION: - case RPC_FC_BOGUS_STRUCT: - return RPC_FC_BOGUS_STRUCT; - } - - has_pointer = 1; - continue; - } - - if (field->type->declarray) - { - if (is_string_type(field->attrs, field->type)) - { - if (is_conformant_array(field->type)) - has_conformance = 1; - has_variance = 1; - continue; - } - - if (is_array(field->type->ref)) - return RPC_FC_BOGUS_STRUCT; - - if (is_conformant_array(field->type)) - { - has_conformance = 1; - if (field->type->declarray && 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 (field->type->length_is) - has_variance = 1; - - t = field->type->ref; - } - - switch (t->type) - { - /* - * RPC_FC_BYTE, RPC_FC_STRUCT, etc - * Simple types don't effect the type of struct. - * A struct containing a simple struct is still a simple struct. - * So long as we can block copy the data, we return RPC_FC_STRUCT. - */ - case 0: /* void pointer */ - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_SMALL: - case RPC_FC_USMALL: - case RPC_FC_WCHAR: - case RPC_FC_SHORT: - case RPC_FC_USHORT: - case RPC_FC_LONG: - case RPC_FC_ULONG: - case RPC_FC_INT3264: - case RPC_FC_UINT3264: - case RPC_FC_HYPER: - case RPC_FC_FLOAT: - case RPC_FC_DOUBLE: - case RPC_FC_STRUCT: - case RPC_FC_ENUM32: - break; - - case RPC_FC_RP: - case RPC_FC_UP: - case RPC_FC_FP: - case RPC_FC_OP: - case RPC_FC_CARRAY: - case RPC_FC_CVARRAY: - case RPC_FC_BOGUS_ARRAY: - has_pointer = 1; - break; - - /* - * Propagate member attributes - * a struct should be at least as complex as its member - */ - case RPC_FC_CVSTRUCT: - has_conformance = 1; - has_variance = 1; - has_pointer = 1; - break; - - case RPC_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 RPC_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 RPC_FC_PSTRUCT: - has_pointer = 1; - break; - - default: - error_loc("Unknown struct member %s with type (0x%02x)\n", field->name, t->type); - /* fallthru - treat it as complex */ - - /* as soon as we see one of these these members, it's bogus... */ - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_NON_ENCAPSULATED_UNION: - case RPC_FC_BOGUS_STRUCT: - case RPC_FC_ENUM16: - return RPC_FC_BOGUS_STRUCT; - } - } - - if( has_variance ) - { - if ( has_conformance ) - return RPC_FC_CVSTRUCT; - else - return RPC_FC_BOGUS_STRUCT; - } - if( has_conformance && has_pointer ) - return RPC_FC_CPSTRUCT; - if( has_conformance ) - return RPC_FC_CSTRUCT; - if( has_pointer ) - return RPC_FC_PSTRUCT; - return RPC_FC_STRUCT; -} - -/***** 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; -} - -static var_t *find_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 void write_libid(const char *name, const attr_list_t *attr) -{ - const UUID *uuid = get_attrp(attr, ATTR_UUID); - write_guid(idfile, "LIBID", name, uuid); -} - -static void write_clsid(type_t *cls) -{ - const UUID *uuid = get_attrp(cls->attrs, ATTR_UUID); - write_guid(idfile, "CLSID", cls->name, uuid); -} - -static void write_diid(type_t *iface) -{ - const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); - write_guid(idfile, "DIID", iface->name, uuid); -} - -static void write_iid(type_t *iface) -{ - const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID); - write_guid(idfile, "IID", iface->name, uuid); -} - -static int compute_method_indexes(type_t *iface) -{ - int idx; - func_t *f; - - if (iface->ref) - idx = compute_method_indexes(iface->ref); - else - idx = 0; - - if (!iface->funcs) - return idx; - - LIST_FOR_EACH_ENTRY( f, iface->funcs, func_t, entry ) - if (! is_callas(f->def->attrs)) - f->idx = idx++; - - return idx; -} - -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_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; -} - -static void process_typedefs(pident_list_t *pidents) -{ - pident_t *pident, *next; - - if (!pidents) return; - LIST_FOR_EACH_ENTRY_SAFE( pident, next, pidents, pident_t, entry ) - { - var_t *var = pident->var; - type_t *type = find_type(var->name, 0); - - if (! parse_only && do_header) - write_typedef(type); - if (in_typelib && type->attrs) - add_typelib_entry(type); - - free(pident); - free(var); - } -} - -static void check_arg(var_t *arg) -{ - type_t *t = arg->type; - - if (t->type == 0 && ! is_var_ptr(arg)) - error_loc("argument '%s' has void type\n", arg->name); -} - -static void check_all_user_types(ifref_list_t *ifrefs) -{ - const ifref_t *ifref; - const func_t *f; - - if (ifrefs) LIST_FOR_EACH_ENTRY(ifref, ifrefs, const ifref_t, entry) - { - const func_list_t *fs = ifref->iface->funcs; - if (fs) LIST_FOR_EACH_ENTRY(f, fs, const func_t, entry) - check_for_additional_prototype_types(f->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'; -} diff --git a/reactos/tools/widl/parser.yy.c b/reactos/tools/widl/parser.yy.c deleted file mode 100644 index 69cc859c676..00000000000 --- a/reactos/tools/widl/parser.yy.c +++ /dev/null @@ -1,2158 +0,0 @@ -#define yy_create_buffer parser__create_buffer -#define yy_delete_buffer parser__delete_buffer -#define yy_scan_buffer parser__scan_buffer -#define yy_scan_string parser__scan_string -#define yy_scan_bytes parser__scan_bytes -#define yy_flex_debug parser__flex_debug -#define yy_init_buffer parser__init_buffer -#define yy_flush_buffer parser__flush_buffer -#define yy_load_buffer_state parser__load_buffer_state -#define yy_switch_to_buffer parser__switch_to_buffer -#define yyin parser_in -#define yyleng parser_leng -#define yylex parser_lex -#define yyout parser_out -#define yyrestart parser_restart -#define yytext parser_text -#define yywrap parser_wrap - -#line 20 "parser.yy.c" -/* A lexical scanner generated by flex */ - -/* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ - */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 - -#include - - -/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ -#ifdef c_plusplus -#ifndef __cplusplus -#define __cplusplus -#endif -#endif - - -#ifdef __cplusplus - -#include -#include - -/* Use prototypes in function declarations. */ -#define YY_USE_PROTOS - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -#if __STDC__ - -#define YY_USE_PROTOS -#define YY_USE_CONST - -#endif /* __STDC__ */ -#endif /* ! __cplusplus */ - -#ifdef __TURBOC__ - #pragma warn -rch - #pragma warn -use -#include -#include -#define YY_USE_CONST -#define YY_USE_PROTOS -#endif - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - - -#ifdef YY_USE_PROTOS -#define YY_PROTO(proto) proto -#else -#define YY_PROTO(proto) () -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yy_start = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yy_start - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#define YY_BUF_SIZE 16384 - -typedef struct yy_buffer_state *YY_BUFFER_STATE; - -extern int yyleng; -extern FILE *yyin, *yyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - -/* The funky do-while in the following #define is used to turn the definition - * int a single C statement (which needs a semi-colon terminator). This - * avoids problems with code like: - * - * if ( condition_holds ) - * yyless( 5 ); - * else - * do_something_else(); - * - * Prior to using the do-while the compiler would get upset at the - * "else" because it interpreted the "if" statement as being all - * done when it reached the ';' after the yyless() call. - */ - -/* Return all but the first 'n' matched characters back to the input stream. */ - -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - *yy_cp = yy_hold_char; \ - YY_RESTORE_YY_MORE_OFFSET \ - yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, yytext_ptr ) - -/* The following is because we cannot portably get our hands on size_t - * (without autoconf's help, which isn't available because we want - * flex-generated scanners to compile on their own). - */ -typedef unsigned int yy_size_t; - - -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - }; - -static YY_BUFFER_STATE yy_current_buffer = 0; - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - */ -#define YY_CURRENT_BUFFER yy_current_buffer - - -/* yy_hold_char holds the character lost when yytext is formed. */ -static char yy_hold_char; - -static int yy_n_chars; /* number of characters read into yy_ch_buf */ - - -int yyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 1; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow yywrap()'s to do buffer switches - * instead of setting up a fresh yyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void yyrestart YY_PROTO(( FILE *input_file )); - -void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); -void yy_load_buffer_state YY_PROTO(( void )); -YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); -void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); -void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); -void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); -#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) - -YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); -YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); -YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); - -static void *yy_flex_alloc YY_PROTO(( yy_size_t )); -static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); -static void yy_flex_free YY_PROTO(( void * )); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) - -typedef unsigned char YY_CHAR; -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; -typedef int yy_state_type; -extern char *yytext; -#define yytext_ptr yytext - -static yy_state_type yy_get_previous_state YY_PROTO(( void )); -static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); -static int yy_get_next_buffer YY_PROTO(( void )); -static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yytext_ptr = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ - yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - yy_c_buf_p = yy_cp; - -#define YY_NUM_RULES 23 -#define YY_END_OF_BUFFER 24 -static yyconst short int yy_accept[113] = - { 0, - 0, 0, 0, 0, 0, 0, 2, 2, 24, 22, - 19, 18, 3, 14, 14, 22, 22, 17, 17, 9, - 19, 1, 8, 23, 4, 8, 14, 14, 11, 11, - 10, 2, 0, 14, 0, 20, 21, 17, 17, 0, - 1, 1, 7, 6, 5, 14, 0, 11, 11, 2, - 15, 13, 17, 14, 0, 11, 0, 17, 14, 0, - 11, 0, 15, 17, 14, 0, 11, 17, 14, 0, - 11, 17, 14, 0, 11, 17, 14, 0, 11, 17, - 0, 14, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12, 0 - } ; - -static yyconst int yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 4, 5, 1, 1, 1, 1, 6, - 1, 1, 7, 1, 8, 9, 1, 10, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 1, 1, 12, - 1, 13, 1, 1, 14, 15, 15, 15, 16, 17, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 19, 20, 18, 18, 18, 18, 18, 21, 18, - 22, 23, 24, 1, 18, 1, 15, 15, 15, 15, - - 25, 15, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 26, - 18, 18, 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, 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, - 1, 1, 1, 1, 1 - } ; - -static yyconst int yy_meta[27] = - { 0, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, - 3, 1, 1, 3, 3, 3, 3, 4, 4, 4, - 4, 1, 1, 1, 3, 5 - } ; - -static yyconst short int yy_base[151] = - { 0, - 0, 25, 25, 28, 42, 31, 265, 264, 266, 269, - 269, 269, 269, 60, 28, 253, 251, 0, 249, 269, - 38, 260, 269, 269, 269, 31, 39, 62, 79, 0, - 269, 0, 31, 35, 0, 269, 269, 0, 244, 72, - 258, 257, 269, 269, 269, 65, 0, 96, 0, 0, - 113, 0, 242, 68, 0, 129, 149, 240, 70, 0, - 151, 72, 74, 229, 81, 0, 168, 224, 91, 0, - 185, 212, 98, 0, 202, 204, 117, 216, 207, 124, - 0, 108, 129, 269, 0, 0, 0, 206, 0, 0, - 0, 0, 201, 0, 0, 0, 0, 200, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 269, 228, 233, 236, 241, 244, 247, 252, 204, - 195, 194, 189, 188, 187, 178, 177, 172, 171, 170, - 161, 160, 155, 150, 149, 148, 139, 138, 134, 133, - 131, 130, 129, 117, 100, 84, 61, 52, 44, 31 - } ; - -static yyconst short int yy_def[151] = - { 0, - 112, 1, 113, 113, 1, 5, 114, 114, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 115, 115, 112, - 112, 112, 112, 112, 112, 116, 117, 117, 112, 118, - 112, 119, 112, 112, 120, 112, 112, 115, 115, 112, - 112, 112, 112, 112, 112, 121, 121, 112, 118, 119, - 112, 120, 115, 122, 122, 112, 112, 115, 123, 123, - 112, 112, 51, 115, 124, 124, 112, 115, 125, 125, - 112, 115, 126, 126, 112, 115, 112, 112, 118, 115, - 127, 112, 112, 112, 128, 129, 130, 112, 131, 132, - 133, 134, 112, 135, 136, 137, 138, 112, 139, 140, - - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 112, 0, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112 - } ; - -static yyconst short int yy_nxt[296] = - { 0, - 10, 11, 12, 13, 10, 10, 10, 10, 10, 14, - 15, 16, 17, 18, 18, 18, 18, 18, 18, 19, - 18, 20, 10, 10, 18, 18, 21, 24, 25, 22, - 24, 25, 21, 111, 44, 22, 33, 34, 34, 40, - 51, 51, 41, 33, 34, 34, 110, 26, 46, 46, - 26, 27, 28, 45, 109, 29, 29, 29, 29, 30, - 30, 30, 30, 108, 35, 31, 29, 30, 33, 34, - 34, 46, 46, 40, 54, 54, 41, 59, 59, 65, - 65, 63, 63, 63, 63, 35, 107, 112, 48, 48, - 69, 69, 48, 48, 48, 48, 49, 49, 49, 49, - - 73, 73, 106, 48, 49, 56, 56, 77, 77, 56, - 56, 56, 56, 49, 49, 49, 49, 82, 82, 105, - 56, 49, 51, 51, 81, 83, 82, 82, 57, 84, - 83, 104, 103, 102, 84, 101, 100, 57, 61, 61, - 98, 97, 61, 61, 61, 61, 49, 49, 49, 49, - 96, 95, 93, 61, 49, 62, 62, 92, 63, 63, - 67, 67, 91, 90, 67, 67, 67, 67, 49, 49, - 49, 49, 88, 87, 86, 67, 49, 71, 71, 85, - 78, 71, 71, 71, 71, 49, 49, 49, 49, 74, - 70, 66, 71, 49, 75, 75, 60, 55, 75, 75, - - 75, 75, 49, 49, 49, 49, 52, 99, 94, 75, - 49, 79, 79, 89, 81, 79, 79, 79, 79, 49, - 49, 49, 49, 81, 80, 76, 79, 49, 23, 23, - 23, 23, 23, 32, 32, 32, 32, 32, 38, 38, - 38, 43, 72, 43, 43, 43, 47, 68, 47, 49, - 49, 49, 50, 64, 50, 50, 50, 58, 42, 42, - 53, 42, 39, 37, 36, 112, 24, 24, 9, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112 - - } ; - -static yyconst short int yy_chk[296] = - { 0, - 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, 2, 3, 3, 2, - 4, 4, 6, 150, 26, 6, 15, 15, 15, 21, - 33, 33, 21, 34, 34, 34, 149, 3, 27, 27, - 4, 5, 5, 26, 148, 5, 5, 5, 5, 5, - 5, 5, 5, 147, 27, 5, 5, 5, 14, 14, - 14, 28, 28, 40, 46, 46, 40, 54, 54, 59, - 59, 62, 62, 63, 63, 14, 146, 28, 29, 29, - 65, 65, 29, 29, 29, 29, 29, 29, 29, 29, - - 69, 69, 145, 29, 29, 48, 48, 73, 73, 48, - 48, 48, 48, 48, 48, 48, 48, 82, 82, 144, - 48, 48, 51, 51, 77, 80, 77, 77, 51, 80, - 83, 143, 142, 141, 83, 140, 139, 51, 56, 56, - 138, 137, 56, 56, 56, 56, 56, 56, 56, 56, - 136, 135, 134, 56, 56, 57, 57, 133, 57, 57, - 61, 61, 132, 131, 61, 61, 61, 61, 61, 61, - 61, 61, 130, 129, 128, 61, 61, 67, 67, 127, - 126, 67, 67, 67, 67, 67, 67, 67, 67, 125, - 124, 123, 67, 67, 71, 71, 122, 121, 71, 71, - - 71, 71, 71, 71, 71, 71, 120, 98, 93, 71, - 71, 75, 75, 88, 79, 75, 75, 75, 75, 75, - 75, 75, 75, 78, 76, 72, 75, 75, 113, 113, - 113, 113, 113, 114, 114, 114, 114, 114, 115, 115, - 115, 116, 68, 116, 116, 116, 117, 64, 117, 118, - 118, 118, 119, 58, 119, 119, 119, 53, 42, 41, - 39, 22, 19, 17, 16, 9, 8, 7, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112 - - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *yytext; -#line 1 "parser.l" -#define INITIAL 0 -/* -*-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 - */ -#define YY_STACK_USED 1 -#define YY_NO_UNPUT 1 -#define YY_NO_TOP_STATE 1 -#define YY_NEVER_INTERACTIVE 1 -#define QUOTE 1 - -#define ATTR 2 - -#define PP_LINE 3 - -#line 39 "parser.l" - -#include "config.h" - -#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" - -extern char *temp_name; - -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); - -#define MAX_IMPORT_DEPTH 10 -struct { - YY_BUFFER_STATE state; - char *input_name; - int line_number; - char *temp_name; -} import_stack[MAX_IMPORT_DEPTH]; -int import_stack_ptr = 0; - -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 - ************************************************************************** - */ -#line 588 "parser.yy.c" - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap YY_PROTO(( void )); -#else -extern int yywrap YY_PROTO(( void )); -#endif -#endif - -#ifndef YY_NO_UNPUT -static void yyunput YY_PROTO(( int c, char *buf_ptr )); -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen YY_PROTO(( yyconst char * )); -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus -static int yyinput YY_PROTO(( void )); -#else -static int input YY_PROTO(( void )); -#endif -#endif - -#if YY_STACK_USED -static int yy_start_stack_ptr = 0; -static int yy_start_stack_depth = 0; -static int *yy_start_stack = 0; -#ifndef YY_NO_PUSH_STATE -static void yy_push_state YY_PROTO(( int new_state )); -#endif -#ifndef YY_NO_POP_STATE -static void yy_pop_state YY_PROTO(( void )); -#endif -#ifndef YY_NO_TOP_STATE -static int yy_top_state YY_PROTO(( void )); -#endif - -#else -#define YY_NO_PUSH_STATE 1 -#define YY_NO_POP_STATE 1 -#define YY_NO_TOP_STATE 1 -#endif - -#ifdef YY_MALLOC_DECL -YY_MALLOC_DECL -#else -#if __STDC__ -#ifndef __cplusplus -#include -#endif -#else -/* Just try to get by without declaring the routines. This will fail - * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) - * or sizeof(void*) != sizeof(int). - */ -#endif -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ - -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( yy_current_buffer->yy_is_interactive ) \ - { \ - int c = '*', n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ - && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL int yylex YY_PROTO(( void )) -#endif - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - if ( yyleng > 0 ) \ - yy_current_buffer->yy_at_bol = \ - (yytext[yyleng - 1] == '\n'); \ - YY_USER_ACTION - -YY_DECL - { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 109 "parser.l" - -#line 744 "parser.yy.c" - - if ( yy_init ) - { - yy_init = 0; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! yy_start ) - yy_start = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! yy_current_buffer ) - yy_current_buffer = - yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_load_buffer_state(); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = yy_c_buf_p; - - /* Support of yytext. */ - *yy_cp = yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yy_start; - yy_current_state += YY_AT_BOL(); -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 113 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 269 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - - -do_action: /* This label is used only to access EOF actions. */ - - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = yy_hold_char; - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - goto yy_find_action; - -case 1: -YY_RULE_SETUP -#line 110 "parser.l" -yy_push_state(PP_LINE); - YY_BREAK -case 2: -YY_RULE_SETUP -#line 111 "parser.l" -{ - 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 */ - free( input_name ); - input_name = xstrdup(fname); - } - YY_BREAK -case 3: -YY_RULE_SETUP -#line 130 "parser.l" -yy_push_state(QUOTE); cbufidx = 0; - YY_BREAK -case 4: -YY_RULE_SETUP -#line 131 "parser.l" -{ - yy_pop_state(); - parser_lval.str = get_buffered_cstring(); - return aSTRING; - } - YY_BREAK -case 5: -#line 137 "parser.l" -case 6: -YY_RULE_SETUP -#line 137 "parser.l" -addcchar(yytext[1]); - YY_BREAK -case 7: -YY_RULE_SETUP -#line 138 "parser.l" -addcchar('\\'); addcchar(yytext[1]); - YY_BREAK -case 8: -YY_RULE_SETUP -#line 139 "parser.l" -addcchar(yytext[0]); - YY_BREAK -case 9: -YY_RULE_SETUP -#line 140 "parser.l" -yy_push_state(ATTR); return '['; - YY_BREAK -case 10: -YY_RULE_SETUP -#line 141 "parser.l" -yy_pop_state(); return ']'; - YY_BREAK -case 11: -YY_RULE_SETUP -#line 142 "parser.l" -return attr_token(yytext); - YY_BREAK -case 12: -YY_RULE_SETUP -#line 143 "parser.l" -{ - parser_lval.uuid = parse_uuid(yytext); - return aUUID; - } - YY_BREAK -case 13: -YY_RULE_SETUP -#line 147 "parser.l" -{ - parser_lval.num = strtoul(yytext, NULL, 0); - return aHEXNUM; - } - YY_BREAK -case 14: -YY_RULE_SETUP -#line 151 "parser.l" -{ - parser_lval.num = strtoul(yytext, NULL, 0); - return aNUM; - } - YY_BREAK -case 15: -YY_RULE_SETUP -#line 155 "parser.l" -{ - parser_lval.dbl = strtod(yytext, NULL); - return aDOUBLE; - } - YY_BREAK -case 16: -*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ -yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 159 "parser.l" -return tSAFEARRAY; - YY_BREAK -case 17: -YY_RULE_SETUP -#line 160 "parser.l" -return kw_token(yytext); - YY_BREAK -case 18: -YY_RULE_SETUP -#line 161 "parser.l" -line_number++; - YY_BREAK -case 19: -YY_RULE_SETUP -#line 162 "parser.l" - - YY_BREAK -case 20: -YY_RULE_SETUP -#line 163 "parser.l" -return SHL; - YY_BREAK -case 21: -YY_RULE_SETUP -#line 164 "parser.l" -return SHR; - YY_BREAK -case 22: -YY_RULE_SETUP -#line 165 "parser.l" -return yytext[0]; - YY_BREAK -case YY_STATE_EOF(INITIAL): -case YY_STATE_EOF(QUOTE): -case YY_STATE_EOF(ATTR): -case YY_STATE_EOF(PP_LINE): -#line 166 "parser.l" -{ - if (import_stack_ptr) - return aEOF; - else yyterminate(); - } - YY_BREAK -case 23: -YY_RULE_SETUP -#line 171 "parser.l" -ECHO; - YY_BREAK -#line 988 "parser.yy.c" - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yy_hold_char; - YY_RESTORE_YY_MORE_OFFSET - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between yy_current_buffer and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yy_n_chars = yy_current_buffer->yy_n_chars; - yy_current_buffer->yy_input_file = yyin; - yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = yy_c_buf_p; - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer() ) - { - case EOB_ACT_END_OF_FILE: - { - yy_did_buffer_switch_on_eof = 0; - - if ( yywrap() ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = - yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yy_c_buf_p = - &yy_current_buffer->yy_ch_buf[yy_n_chars]; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of yylex */ - - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ - -static int yy_get_next_buffer() - { - register char *dest = yy_current_buffer->yy_ch_buf; - register char *source = yytext_ptr; - register int number_to_move, i; - int ret_val; - - if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( yy_current_buffer->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - yy_current_buffer->yy_n_chars = yy_n_chars = 0; - - else - { - int num_to_read = - yy_current_buffer->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ -#ifdef YY_USES_REJECT - YY_FATAL_ERROR( -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); -#else - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = yy_current_buffer; - - int yy_c_buf_p_offset = - (int) (yy_c_buf_p - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yy_flex_realloc( (void *) b->yy_ch_buf, - b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = yy_current_buffer->yy_buf_size - - number_to_move - 1; -#endif - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), - yy_n_chars, num_to_read ); - - yy_current_buffer->yy_n_chars = yy_n_chars; - } - - if ( yy_n_chars == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - yy_current_buffer->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - yy_n_chars += number_to_move; - yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; - yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; - - return ret_val; - } - - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -static yy_state_type yy_get_previous_state() - { - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = yy_start; - yy_current_state += YY_AT_BOL(); - - for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 113 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; - } - - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - -#ifdef YY_USE_PROTOS -static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) -#else -static yy_state_type yy_try_NUL_trans( yy_current_state ) -yy_state_type yy_current_state; -#endif - { - register int yy_is_jam; - register char *yy_cp = yy_c_buf_p; - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 113 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 112); - - return yy_is_jam ? 0 : yy_current_state; - } - - -#ifndef YY_NO_UNPUT -#ifdef YY_USE_PROTOS -static void yyunput( int c, register char *yy_bp ) -#else -static void yyunput( c, yy_bp ) -int c; -register char *yy_bp; -#endif - { - register char *yy_cp = yy_c_buf_p; - - /* undo effects of setting up yytext */ - *yy_cp = yy_hold_char; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = yy_n_chars + 2; - register char *dest = &yy_current_buffer->yy_ch_buf[ - yy_current_buffer->yy_buf_size + 2]; - register char *source = - &yy_current_buffer->yy_ch_buf[number_to_move]; - - while ( source > yy_current_buffer->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - yy_current_buffer->yy_n_chars = - yy_n_chars = yy_current_buffer->yy_buf_size; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - - yytext_ptr = yy_bp; - yy_hold_char = *yy_cp; - yy_c_buf_p = yy_cp; - } -#endif /* ifndef YY_NO_UNPUT */ - - -#ifdef __cplusplus -static int yyinput() -#else -static int input() -#endif - { - int c; - - *yy_c_buf_p = yy_hold_char; - - if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - /* This was really a NUL. */ - *yy_c_buf_p = '\0'; - - else - { /* need more input */ - int offset = yy_c_buf_p - yytext_ptr; - ++yy_c_buf_p; - - switch ( yy_get_next_buffer() ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart( yyin ); - - /* fall through */ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap() ) - return EOF; - - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = yytext_ptr + offset; - break; - } - } - } - - c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ - *yy_c_buf_p = '\0'; /* preserve yytext */ - yy_hold_char = *++yy_c_buf_p; - - yy_current_buffer->yy_at_bol = (c == '\n'); - - return c; - } - - -#ifdef YY_USE_PROTOS -void yyrestart( FILE *input_file ) -#else -void yyrestart( input_file ) -FILE *input_file; -#endif - { - if ( ! yy_current_buffer ) - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_init_buffer( yy_current_buffer, input_file ); - yy_load_buffer_state(); - } - - -#ifdef YY_USE_PROTOS -void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) -#else -void yy_switch_to_buffer( new_buffer ) -YY_BUFFER_STATE new_buffer; -#endif - { - if ( yy_current_buffer == new_buffer ) - return; - - if ( yy_current_buffer ) - { - /* Flush out information for old buffer. */ - *yy_c_buf_p = yy_hold_char; - yy_current_buffer->yy_buf_pos = yy_c_buf_p; - yy_current_buffer->yy_n_chars = yy_n_chars; - } - - yy_current_buffer = new_buffer; - yy_load_buffer_state(); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yy_did_buffer_switch_on_eof = 1; - } - - -#ifdef YY_USE_PROTOS -void yy_load_buffer_state( void ) -#else -void yy_load_buffer_state() -#endif - { - yy_n_chars = yy_current_buffer->yy_n_chars; - yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; - yyin = yy_current_buffer->yy_input_file; - yy_hold_char = *yy_c_buf_p; - } - - -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) -#else -YY_BUFFER_STATE yy_create_buffer( file, size ) -FILE *file; -int size; -#endif - { - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer( b, file ); - - return b; - } - - -#ifdef YY_USE_PROTOS -void yy_delete_buffer( YY_BUFFER_STATE b ) -#else -void yy_delete_buffer( b ) -YY_BUFFER_STATE b; -#endif - { - if ( ! b ) - return; - - if ( b == yy_current_buffer ) - yy_current_buffer = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yy_flex_free( (void *) b->yy_ch_buf ); - - yy_flex_free( (void *) b ); - } - - -#ifndef YY_ALWAYS_INTERACTIVE -#ifndef YY_NEVER_INTERACTIVE -extern int isatty YY_PROTO(( int )); -#endif -#endif - -#ifdef YY_USE_PROTOS -void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) -#else -void yy_init_buffer( b, file ) -YY_BUFFER_STATE b; -FILE *file; -#endif - - - { - yy_flush_buffer( b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - -#if YY_ALWAYS_INTERACTIVE - b->yy_is_interactive = 1; -#else -#if YY_NEVER_INTERACTIVE - b->yy_is_interactive = 0; -#else - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; -#endif -#endif - } - - -#ifdef YY_USE_PROTOS -void yy_flush_buffer( YY_BUFFER_STATE b ) -#else -void yy_flush_buffer( b ) -YY_BUFFER_STATE b; -#endif - - { - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == yy_current_buffer ) - yy_load_buffer_state(); - } - - -#ifndef YY_NO_SCAN_BUFFER -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) -#else -YY_BUFFER_STATE yy_scan_buffer( base, size ) -char *base; -yy_size_t size; -#endif - { - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer( b ); - - return b; - } -#endif - - -#ifndef YY_NO_SCAN_STRING -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str ) -#else -YY_BUFFER_STATE yy_scan_string( yy_str ) -yyconst char *yy_str; -#endif - { - int len; - for ( len = 0; yy_str[len]; ++len ) - ; - - return yy_scan_bytes( yy_str, len ); - } -#endif - - -#ifndef YY_NO_SCAN_BYTES -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) -#else -YY_BUFFER_STATE yy_scan_bytes( bytes, len ) -yyconst char *bytes; -int len; -#endif - { - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = len + 2; - buf = (char *) yy_flex_alloc( n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < len; ++i ) - buf[i] = bytes[i]; - - buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer( buf, n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; - } -#endif - - -#ifndef YY_NO_PUSH_STATE -#ifdef YY_USE_PROTOS -static void yy_push_state( int new_state ) -#else -static void yy_push_state( new_state ) -int new_state; -#endif - { - if ( yy_start_stack_ptr >= yy_start_stack_depth ) - { - yy_size_t new_size; - - yy_start_stack_depth += YY_START_STACK_INCR; - new_size = yy_start_stack_depth * sizeof( int ); - - if ( ! yy_start_stack ) - yy_start_stack = (int *) yy_flex_alloc( new_size ); - - else - yy_start_stack = (int *) yy_flex_realloc( - (void *) yy_start_stack, new_size ); - - if ( ! yy_start_stack ) - YY_FATAL_ERROR( - "out of memory expanding start-condition stack" ); - } - - yy_start_stack[yy_start_stack_ptr++] = YY_START; - - BEGIN(new_state); - } -#endif - - -#ifndef YY_NO_POP_STATE -static void yy_pop_state() - { - if ( --yy_start_stack_ptr < 0 ) - YY_FATAL_ERROR( "start-condition stack underflow" ); - - BEGIN(yy_start_stack[yy_start_stack_ptr]); - } -#endif - - -#ifndef YY_NO_TOP_STATE -static int yy_top_state() - { - return yy_start_stack[yy_start_stack_ptr - 1]; - } -#endif - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -#ifdef YY_USE_PROTOS -static void yy_fatal_error( yyconst char msg[] ) -#else -static void yy_fatal_error( msg ) -char msg[]; -#endif - { - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); - } - - - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - yytext[yyleng] = yy_hold_char; \ - yy_c_buf_p = yytext + n; \ - yy_hold_char = *yy_c_buf_p; \ - *yy_c_buf_p = '\0'; \ - yyleng = n; \ - } \ - while ( 0 ) - - -/* Internal utility routines. */ - -#ifndef yytext_ptr -#ifdef YY_USE_PROTOS -static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) -#else -static void yy_flex_strncpy( s1, s2, n ) -char *s1; -yyconst char *s2; -int n; -#endif - { - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; - } -#endif - -#ifdef YY_NEED_STRLEN -#ifdef YY_USE_PROTOS -static int yy_flex_strlen( yyconst char *s ) -#else -static int yy_flex_strlen( s ) -yyconst char *s; -#endif - { - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; - } -#endif - - -#ifdef YY_USE_PROTOS -static void *yy_flex_alloc( yy_size_t size ) -#else -static void *yy_flex_alloc( size ) -yy_size_t size; -#endif - { - return (void *) malloc( size ); - } - -#ifdef YY_USE_PROTOS -static void *yy_flex_realloc( void *ptr, yy_size_t size ) -#else -static void *yy_flex_realloc( ptr, size ) -void *ptr; -yy_size_t size; -#endif - { - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); - } - -#ifdef YY_USE_PROTOS -static void yy_flex_free( void *ptr ) -#else -static void yy_flex_free( ptr ) -void *ptr; -#endif - { - free( ptr ); - } - -#if YY_MAIN -int main() - { - yylex(); - return 0; - } -#endif -#line 171 "parser.l" - - -#ifndef parser_wrap -int parser_wrap(void) -{ - return 1; -} -#endif - -struct keyword { - const char *kw; - int token; -}; - -static const struct keyword keywords[] = { - {"FALSE", tFALSE}, - {"TRUE", tTRUE}, - {"__cdecl", tCDECL}, - {"__fastcall", tFASTCALL}, - {"__int64", tINT64}, - {"__pascal", tPASCAL}, - {"__stdcall", tSTDCALL}, - {"_cdecl", tCDECL}, - {"_fastcall", tFASTCALL}, - {"_pascal", tPASCAL}, - {"_stdcall", tSTDCALL}, - {"boolean", tBOOLEAN}, - {"byte", tBYTE}, - {"callback", tCALLBACK}, - {"case", tCASE}, - {"cdecl", tCDECL}, - {"char", tCHAR}, - {"coclass", tCOCLASS}, - {"code", tCODE}, - {"comm_status", tCOMMSTATUS}, - {"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}, - {"in_line", tINLINE}, - {"int", tINT}, - {"interface", tINTERFACE}, - {"library", tLIBRARY}, - {"long", tLONG}, - {"methods", tMETHODS}, - {"module", tMODULE}, - {"pascal", tPASCAL}, - {"properties", tPROPERTIES}, - {"short", tSHORT}, - {"signed", tSIGNED}, - {"sizeof", tSIZEOF}, - {"small", tSMALL}, - {"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 */ -static const struct keyword attr_keywords[] = -{ - {"aggregatable", tAGGREGATABLE}, - {"allocate", tALLOCATE}, - {"appobject", tAPPOBJECT}, - {"async", tASYNC}, - {"async_uuid", tASYNCUUID}, - {"auto_handle", tAUTOHANDLE}, - {"bindable", tBINDABLE}, - {"broadcast", tBROADCAST}, - {"byte_count", tBYTECOUNT}, - {"call_as", tCALLAS}, - {"context_handle", tCONTEXTHANDLE}, - {"context_handle_noserialize", tCONTEXTHANDLENOSERIALIZE}, - {"context_handle_serialize", tCONTEXTHANDLENOSERIALIZE}, - {"control", tCONTROL}, - {"defaultcollelem", tDEFAULTCOLLELEM}, - {"defaultvalue", tDEFAULTVALUE}, - {"defaultvtable", tDEFAULTVTABLE}, - {"displaybind", tDISPLAYBIND}, - {"dllname", tDLLNAME}, - {"dual", tDUAL}, - {"endpoint", tENDPOINT}, - {"entry", tENTRY}, - {"explicit_handle", tEXPLICITHANDLE}, - {"handle", tHANDLE}, - {"helpcontext", tHELPCONTEXT}, - {"helpfile", tHELPFILE}, - {"helpstring", tHELPSTRING}, - {"helpstringcontext", tHELPSTRINGCONTEXT}, - {"helpstringdll", tHELPSTRINGDLL}, - {"hidden", tHIDDEN}, - {"id", tID}, - {"idempotent", tIDEMPOTENT}, - {"iid_is", tIIDIS}, - {"immediatebind", tIMMEDIATEBIND}, - {"implicit_handle", tIMPLICITHANDLE}, - {"in", tIN}, - {"input_sync", tINPUTSYNC}, - {"lcid", tLCID}, - {"length_is", tLENGTHIS}, - {"local", tLOCAL}, - {"nonbrowsable", tNONBROWSABLE}, - {"noncreatable", tNONCREATABLE}, - {"nonextensible", tNONEXTENSIBLE}, - {"object", tOBJECT}, - {"odl", tODL}, - {"oleautomation", tOLEAUTOMATION}, - {"optional", tOPTIONAL}, - {"out", tOUT}, - {"pointer_default", tPOINTERDEFAULT}, - {"propget", tPROPGET}, - {"propput", tPROPPUT}, - {"propputref", tPROPPUTREF}, - {"ptr", tPTR}, - {"public", tPUBLIC}, - {"range", tRANGE}, - {"readonly", tREADONLY}, - {"ref", tREF}, - {"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}, - {"transmit_as", tTRANSMITAS}, - {"unique", tUNIQUE}, - {"uuid", tUUID}, - {"v1_enum", tV1ENUM}, - {"vararg", tVARARG}, - {"version", tVERSION}, - {"wire_marshal", tWIREMARSHAL}, -}; - - -#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) { - 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; - free( input_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 *hname, *path, *p; - struct imports *import; - int ptr = import_stack_ptr; - int ret; - - if (!parse_only && do_header) { - 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); - } - - 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 = strdup( fname ); - else if (!(path = wpp_find_include( fname, input_name ))) - error_loc("Unable to open include file %s\n", fname); - - 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; - - ret = wpp_parse_temp( path, NULL, &temp_name ); - 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; ptr -#include -#include -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_PROCESS_H -#include -#endif - -/* We need to provide a type for gcc_uint64_t. */ -#ifdef __GNUC__ -__extension__ typedef unsigned long long gcc_uint64_t; -#else -typedef unsigned long gcc_uint64_t; -#endif - -#ifndef TMP_MAX -#define TMP_MAX 16384 -#endif - -/* - -@deftypefn Replacement int mkstemps (char *@var{template}, int @var{suffix_len}) - -Generate a unique temporary file name from @var{template}. -@var{template} has the form: - -@example - @var{path}/ccXXXXXX@var{suffix} -@end example - -@var{suffix_len} tells us how long @var{suffix} is (it can be zero -length). The last six characters of @var{template} before @var{suffix} -must be @samp{XXXXXX}; they are replaced with a string that makes the -filename unique. Returns a file descriptor open on the file for -reading and writing. - -@end deftypefn - -*/ - -int -mkstemps ( - char *template, - int suffix_len) -{ - static const char letters[] - = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - static gcc_uint64_t value; -#ifdef HAVE_GETTIMEOFDAY - struct timeval tv; -#endif - char *XXXXXX; - size_t len; - int count; - - len = strlen (template); - - if ((int) len < 6 + suffix_len - || strncmp (&template[len - 6 - suffix_len], "XXXXXX", 6)) - { - return -1; - } - - XXXXXX = &template[len - 6 - suffix_len]; - -#ifdef HAVE_GETTIMEOFDAY - /* Get some more or less random data. */ - gettimeofday (&tv, NULL); - value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid (); -#else - value += getpid (); -#endif - - for (count = 0; count < TMP_MAX; ++count) - { - gcc_uint64_t v = value; - int fd; - - /* Fill in the random bits. */ - XXXXXX[0] = letters[v % 62]; - v /= 62; - XXXXXX[1] = letters[v % 62]; - v /= 62; - XXXXXX[2] = letters[v % 62]; - v /= 62; - XXXXXX[3] = letters[v % 62]; - v /= 62; - XXXXXX[4] = letters[v % 62]; - v /= 62; - XXXXXX[5] = letters[v % 62]; - -#ifdef VMS - fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600, "fop=tmd"); -#else - fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600); -#endif - if (fd >= 0) - /* The file does not exist. */ - return fd; - - /* This is a random value. It is only necessary that the next - TMP_MAX values generated by adding 7777 to VALUE are different - with (module 2^32). */ - value += 7777; - } - - /* We return the null string if we can't find a unique file name. */ - template[0] = '\0'; - return -1; -} diff --git a/reactos/tools/widl/proxy.c b/reactos/tools/widl/proxy.c deleted file mode 100644 index 6d942b42223..00000000000 --- a/reactos/tools/widl/proxy.c +++ /dev/null @@ -1,727 +0,0 @@ -/* - * 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" - -#define END_OF_LIST(list) \ - do { \ - if (list) { \ - while (NEXT_LINK(list)) \ - list = NEXT_LINK(list); \ - } \ - } while(0) - -static FILE* proxy; -static int indent = 0; - -/* FIXME: support generation of stubless proxies */ - -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( "0x10001, /* Ndr library version */\n"); - 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(ifref_list_t *ifaces) -{ - 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( "#ifndef __REDQ_RPCPROXY_H_VERSION__\n"); - print_proxy( "#define __REQUIRED_RPCPROXY_H_VERSION__ 440\n"); - print_proxy( "#endif /* __REDQ_RPCPROXY_H_VERSION__ */\n"); - print_proxy( "\n"); - print_proxy( "#define __midl_proxy\n"); - print_proxy( "#include \"objbase.h\"\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"); - write_formatstringsdecl(proxy, indent, ifaces, need_proxy); - write_stubdescproto(); -} - -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_OUT) && !is_attr(arg->attrs, ATTR_IN)) { - print_proxy( "if(%s)\n", arg->name ); - indent++; - print_proxy( "MIDL_memset( %s, 0, sizeof( *%s ));\n", arg->name, arg->name ); - indent--; - } - } -} - -int is_var_ptr(const var_t *v) -{ - return is_ptr(v->type); -} - -int cant_be_null(const var_t *v) -{ - /* Search backwards for the most recent pointer attribute. */ - const attr_list_t *attrs = v->attrs; - const type_t *type = v->type; - - if (! attrs && type) - { - attrs = type->attrs; - type = type->ref; - } - - while (attrs) - { - int t = get_attrv(attrs, ATTR_POINTERTYPE); - - if (t == RPC_FC_FP || t == RPC_FC_OP || t == RPC_FC_UP) - return 0; - - if (t == RPC_FC_RP) - return 1; - - if (type) - { - attrs = type->attrs; - type = type->ref; - } - else - attrs = NULL; - } - - return 1; /* Default is RPC_FC_RP. */ -} - -static void proxy_check_pointers( const var_list_t *args ) -{ - const var_t *arg; - - if (!args) return; - LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) - { - if (is_var_ptr(arg) && cant_be_null(arg)) { - print_proxy( "if(!%s)\n", arg->name ); - indent++; - print_proxy( "RpcRaiseException(RPC_X_NULL_REF_POINTER);\n"); - indent--; - } - } -} - -static void free_variable( const var_t *arg ) -{ - unsigned int type_offset = arg->type->typestring_offset; - expr_t *iid; - type_t *type = arg->type; - expr_t *size = get_size_is_expr(type, arg->name); - - if (size) - { - print_proxy( "_StubMsg.MaxCount = " ); - write_expr(proxy, size, 0); - fprintf(proxy, ";\n\n"); - print_proxy( "NdrClearOutParameters( &_StubMsg, "); - fprintf(proxy, "&__MIDL_TypeFormatString.Format[%u], ", type_offset ); - fprintf(proxy, "(void*)%s );\n", arg->name ); - return; - } - - switch( type->type ) - { - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_WCHAR: - case RPC_FC_SHORT: - case RPC_FC_USHORT: - case RPC_FC_ENUM16: - case RPC_FC_LONG: - case RPC_FC_ULONG: - case RPC_FC_ENUM32: - case RPC_FC_STRUCT: - break; - - case RPC_FC_FP: - case RPC_FC_IP: - iid = get_attrp( arg->attrs, ATTR_IIDIS ); - if( iid ) - { - print_proxy( "_StubMsg.MaxCount = (unsigned long) " ); - write_expr(proxy, iid, 1); - print_proxy( ";\n\n" ); - } - print_proxy( "NdrClearOutParameters( &_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->type ); - } -} - -static void proxy_free_variables( 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_OUT)) - { - free_variable( arg ); - fprintf(proxy, "\n"); - } -} - -static void gen_proxy(type_t *iface, const func_t *cur, int idx, - unsigned int proc_offset) -{ - var_t *def = cur->def; - int has_ret = !is_void(get_func_return_type(cur)); - int has_full_pointer = is_full_pointer_function(cur); - - indent = 0; - write_type_decl_left(proxy, get_func_return_type(cur)); - print_proxy( " STDMETHODCALLTYPE %s_", iface->name); - write_name(proxy, def); - print_proxy( "_Proxy(\n"); - write_args(proxy, cur->args, iface->name, 1, TRUE); - print_proxy( ")\n"); - print_proxy( "{\n"); - indent ++; - /* local variables */ - if (has_ret) { - print_proxy( "" ); - write_type_decl_left(proxy, get_func_return_type(cur)); - print_proxy( " _RetVal;\n"); - } - print_proxy( "RPC_MESSAGE _RpcMessage;\n" ); - print_proxy( "MIDL_STUB_MESSAGE _StubMsg;\n" ); - if (has_ret) { - if (decl_indirect(get_func_return_type(cur))) - print_proxy("void *_p_%s = &%s;\n", - "_RetVal", "_RetVal"); - } - print_proxy( "\n"); - - if (has_full_pointer) - write_full_pointer_init(proxy, indent, cur, FALSE); - - /* FIXME: trace */ - clear_output_vars( cur->args ); - - print_proxy( "RpcTryExcept\n" ); - print_proxy( "{\n" ); - indent++; - print_proxy( "NdrProxyInitialize(This, &_RpcMessage, &_StubMsg, &Object_StubDesc, %d);\n", idx); - proxy_check_pointers( cur->args ); - - print_proxy( "RpcTryFinally\n" ); - print_proxy( "{\n" ); - indent++; - - write_remoting_arguments(proxy, indent, cur, PASS_IN, PHASE_BUFFERSIZE); - - print_proxy( "NdrProxyGetBuffer(This, &_StubMsg);\n" ); - - write_remoting_arguments(proxy, indent, cur, PASS_IN, PHASE_MARSHAL); - - print_proxy( "NdrProxySendReceive(This, &_StubMsg);\n" ); - fprintf(proxy, "\n"); - print_proxy( "_StubMsg.BufferStart = _RpcMessage.Buffer;\n" ); - print_proxy( "_StubMsg.BufferEnd = _StubMsg.BufferStart + _RpcMessage.BufferLength;\n\n" ); - - print_proxy("if ((_RpcMessage.DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)\n"); - indent++; - print_proxy("NdrConvert( &_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\n", proc_offset ); - indent--; - fprintf(proxy, "\n"); - - write_remoting_arguments(proxy, indent, cur, PASS_OUT, PHASE_UNMARSHAL); - - if (has_ret) - { - if (decl_indirect(get_func_return_type(cur))) - print_proxy("MIDL_memset(&%s, 0, sizeof(%s));\n", "_RetVal", "_RetVal"); - else if (is_ptr(get_func_return_type(cur)) || is_array(get_func_return_type(cur))) - print_proxy("%s = 0;\n", "_RetVal"); - write_remoting_arguments(proxy, indent, cur, PASS_RETURN, PHASE_UNMARSHAL); - } - - indent--; - print_proxy( "}\n"); - print_proxy( "RpcFinally\n" ); - print_proxy( "{\n" ); - indent++; - if (has_full_pointer) - write_full_pointer_free(proxy, indent, cur); - print_proxy( "NdrProxyFreeBuffer(This, &_StubMsg);\n" ); - indent--; - print_proxy( "}\n"); - print_proxy( "RpcEndFinally\n" ); - indent--; - print_proxy( "}\n" ); - print_proxy( "RpcExcept(_StubMsg.dwStubPhase != PROXY_SENDRECEIVE)\n" ); - print_proxy( "{\n" ); - if (has_ret) { - indent++; - proxy_free_variables( cur->args ); - 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 func_t *cur, const char *cas, - unsigned int proc_offset) -{ - var_t *def = cur->def; - const var_t *arg; - int has_ret = !is_void(get_func_return_type(cur)); - int has_full_pointer = is_full_pointer_function(cur); - - indent = 0; - print_proxy( "void __RPC_STUB %s_", iface->name); - write_name(proxy, def); - print_proxy( "_Stub(\n"); - 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("%s * _This = (%s*)((CStdStubBuffer*)This)->pvServerObject;\n", iface->name, iface->name); - print_proxy("MIDL_STUB_MESSAGE _StubMsg;\n"); - declare_stub_args( proxy, indent, cur ); - fprintf(proxy, "\n"); - - /* FIXME: trace */ - - print_proxy("NdrStubInitialize(_pRpcMessage, &_StubMsg, &Object_StubDesc, _pRpcChannelBuffer);\n"); - fprintf(proxy, "\n"); - - write_parameters_init(proxy, indent, cur); - - print_proxy("RpcTryFinally\n"); - print_proxy("{\n"); - indent++; - if (has_full_pointer) - write_full_pointer_init(proxy, indent, cur, TRUE); - print_proxy("if ((_pRpcMessage->DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)\n"); - indent++; - print_proxy("NdrConvert( &_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\n", proc_offset ); - indent--; - fprintf(proxy, "\n"); - - write_remoting_arguments(proxy, indent, cur, PASS_IN, PHASE_UNMARSHAL); - fprintf(proxy, "\n"); - - assign_stub_out_args( proxy, indent, cur ); - - print_proxy("*_pdwStubPhase = STUB_CALL_SERVER;\n"); - fprintf(proxy, "\n"); - print_proxy(""); - if (has_ret) fprintf(proxy, "_RetVal = "); - if (cas) fprintf(proxy, "%s_%s_Stub", iface->name, cas); - else - { - fprintf(proxy, "_This->lpVtbl->"); - write_name(proxy, def); - } - fprintf(proxy, "(_This"); - - if (cur->args) - { - LIST_FOR_EACH_ENTRY( arg, cur->args, const var_t, entry ) - { - fprintf(proxy, ", "); - if (arg->type->declarray) - fprintf(proxy, "*"); - write_name(proxy, arg); - } - } - fprintf(proxy, ");\n"); - fprintf(proxy, "\n"); - print_proxy("*_pdwStubPhase = STUB_MARSHAL;\n"); - fprintf(proxy, "\n"); - - write_remoting_arguments(proxy, indent, cur, PASS_OUT, PHASE_BUFFERSIZE); - - if (!is_void(get_func_return_type(cur))) - write_remoting_arguments(proxy, indent, cur, PASS_RETURN, PHASE_BUFFERSIZE); - - print_proxy("NdrStubGetBuffer(This, _pRpcChannelBuffer, &_StubMsg);\n"); - - write_remoting_arguments(proxy, indent, cur, PASS_OUT, PHASE_MARSHAL); - fprintf(proxy, "\n"); - - /* marshall the return value */ - if (!is_void(get_func_return_type(cur))) - write_remoting_arguments(proxy, indent, cur, PASS_RETURN, PHASE_MARSHAL); - - indent--; - print_proxy("}\n"); - print_proxy("RpcFinally\n"); - print_proxy("{\n"); - - write_remoting_arguments(proxy, indent+1, cur, PASS_OUT, PHASE_FREE); - - if (has_full_pointer) - write_full_pointer_free(proxy, indent, cur); - - print_proxy("}\n"); - print_proxy("RpcEndFinally\n"); - - print_proxy("_pRpcMessage->BufferLength = _StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer;\n"); - indent--; - - print_proxy("}\n"); - print_proxy("\n"); -} - -static int write_proxy_methods(type_t *iface, int skip) -{ - const func_t *cur; - int i = 0; - - if (iface->ref) i = write_proxy_methods(iface->ref, iface->ref->ref != NULL); - if (iface->funcs) LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) { - var_t *def = cur->def; - if (!is_callas(def->attrs)) { - if (i) fprintf(proxy, ",\n"); - print_proxy( "%s%s_", skip ? "0\t/* " : "", iface->name); - write_name(proxy, def); - fprintf(proxy, "_Proxy%s", skip ? " */" : ""); - i++; - } - } - return i; -} - -static int write_stub_methods(type_t *iface, int skip) -{ - const func_t *cur; - int i = 0; - - if (iface->ref) i = write_stub_methods(iface->ref, TRUE); - else return i; /* skip IUnknown */ - - if (iface->funcs) LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) { - var_t *def = cur->def; - if (!is_local(def->attrs)) { - if (skip) - print_proxy("STUB_FORWARDING_FUNCTION,\n"); - else { - if (i) fprintf(proxy,",\n"); - print_proxy( "%s_", iface->name); - write_name(proxy, def); - fprintf(proxy, "_Stub"); - i++; - } - } - } - return i; -} - -static void write_proxy(type_t *iface, unsigned int *proc_offset) -{ - int midx = -1, stubs; - const func_t *cur; - - if (!iface->funcs) return; - - /* FIXME: check for [oleautomation], shouldn't generate proxies/stubs if specified */ - - fprintf(proxy, "/*****************************************************************************\n"); - fprintf(proxy, " * %s interface\n", iface->name); - fprintf(proxy, " */\n"); - LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) - { - const var_t *def = cur->def; - if (!is_local(def->attrs)) { - const var_t *cas = is_callas(def->attrs); - const char *cname = cas ? cas->name : NULL; - int idx = cur->idx; - if (cname) { - const func_t *m; - LIST_FOR_EACH_ENTRY( m, iface->funcs, const func_t, entry ) - if (!strcmp(m->def->name, cname)) - { - idx = m->idx; - break; - } - } - gen_proxy(iface, cur, idx, *proc_offset); - gen_stub(iface, cur, cname, *proc_offset); - *proc_offset += get_size_procformatstring_func( cur ); - if (midx == -1) midx = idx; - else if (midx != idx) error("method index mismatch in write_proxy\n"); - midx++; - } - } - - /* proxy vtable */ - print_proxy( "static const CINTERFACE_PROXY_VTABLE(%d) _%sProxyVtbl =\n", midx, iface->name); - print_proxy( "{\n"); - indent++; - print_proxy( "{\n", iface->name); - indent++; - print_proxy( "&IID_%s,\n", iface->name); - indent--; - print_proxy( "},\n"); - print_proxy( "{\n"); - indent++; - write_proxy_methods(iface, FALSE); - fprintf(proxy, "\n"); - indent--; - print_proxy( "}\n"); - indent--; - print_proxy( "};\n"); - fprintf(proxy, "\n\n"); - - /* stub vtable */ - print_proxy( "static const PRPC_STUB_FUNCTION %s_table[] =\n", iface->name); - print_proxy( "{\n"); - indent++; - stubs = write_stub_methods(iface, FALSE); - fprintf(proxy, "\n"); - indent--; - fprintf(proxy, "};\n"); - print_proxy( "\n"); - print_proxy( "static const CInterfaceStubVtbl _%sStubVtbl =\n", iface->name); - print_proxy( "{\n"); - indent++; - print_proxy( "{\n"); - indent++; - print_proxy( "&IID_%s,\n", iface->name); - print_proxy( "0,\n"); - print_proxy( "%d,\n", stubs+3); - print_proxy( "&%s_table[-3],\n", iface->name); - indent--; - print_proxy( "},\n", iface->name); - print_proxy( "{\n"); - indent++; - print_proxy( "CStdStubBuffer_METHODS\n"); - indent--; - print_proxy( "}\n"); - indent--; - print_proxy( "};\n"); - print_proxy( "\n"); -} - -static int does_any_iface(const ifref_list_t *ifaces, type_pred_t pred) -{ - ifref_t *ir; - - if (ifaces) - LIST_FOR_EACH_ENTRY(ir, ifaces, ifref_t, entry) - if (pred(ir->iface)) - return TRUE; - - return FALSE; -} - -int need_proxy(const type_t *iface) -{ - return is_object(iface->attrs) && !is_local(iface->attrs); -} - -int need_stub(const type_t *iface) -{ - return !is_object(iface->attrs) && !is_local(iface->attrs); -} - -int need_proxy_file(const ifref_list_t *ifaces) -{ - return does_any_iface(ifaces, need_proxy); -} - -int need_stub_files(const ifref_list_t *ifaces) -{ - return does_any_iface(ifaces, need_stub); -} - -void write_proxies(ifref_list_t *ifaces) -{ - ifref_t *cur; - int expr_eval_routines; - char *file_id = proxy_token; - int c; - unsigned int proc_offset = 0; - - if (!do_proxies) return; - if (do_everything && !need_proxy_file(ifaces)) return; - - init_proxy(ifaces); - if(!proxy) return; - - if (ifaces) - LIST_FOR_EACH_ENTRY( cur, ifaces, ifref_t, entry ) - if (need_proxy(cur->iface)) - write_proxy(cur->iface, &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_WIN32__)\n"); - print_proxy( "#error Currently only Wine and WIN32 are supported.\n"); - print_proxy( "#endif\n"); - print_proxy( "\n"); - write_procformatstring(proxy, ifaces, need_proxy); - write_typeformatstring(proxy, ifaces, need_proxy); - - fprintf(proxy, "static const CInterfaceProxyVtbl* const _%s_ProxyVtblList[] =\n", file_id); - fprintf(proxy, "{\n"); - if (ifaces) - LIST_FOR_EACH_ENTRY( cur, ifaces, ifref_t, entry ) - if(cur->iface->ref && cur->iface->funcs && need_proxy(cur->iface)) - fprintf(proxy, " (const CInterfaceProxyVtbl*)&_%sProxyVtbl,\n", cur->iface->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"); - if (ifaces) - LIST_FOR_EACH_ENTRY( cur, ifaces, ifref_t, entry ) - if(cur->iface->ref && cur->iface->funcs && need_proxy(cur->iface)) - fprintf(proxy, " (const CInterfaceStubVtbl*)&_%sStubVtbl,\n", cur->iface->name); - fprintf(proxy, " 0\n"); - fprintf(proxy, "};\n"); - fprintf(proxy, "\n"); - - fprintf(proxy, "static PCInterfaceName const _%s_InterfaceNamesList[] =\n", file_id); - fprintf(proxy, "{\n"); - if (ifaces) - LIST_FOR_EACH_ENTRY( cur, ifaces, ifref_t, entry ) - if(cur->iface->ref && cur->iface->funcs && need_proxy(cur->iface)) - fprintf(proxy, " \"%s\",\n", cur->iface->name); - fprintf(proxy, " 0\n"); - fprintf(proxy, "};\n"); - fprintf(proxy, "\n"); - - fprintf(proxy, "#define _%s_CHECK_IID(n) IID_GENERIC_CHECK_IID(_%s, pIID, n)\n", file_id, file_id); - fprintf(proxy, "\n"); - fprintf(proxy, "int __stdcall _%s_IID_Lookup(const IID* pIID, int* pIndex)\n", file_id); - fprintf(proxy, "{\n"); - c = 0; - if (ifaces) - LIST_FOR_EACH_ENTRY( cur, ifaces, ifref_t, entry ) - if(cur->iface->ref && cur->iface->funcs && need_proxy(cur->iface)) - { - fprintf(proxy, " if (!_%s_CHECK_IID(%d))\n", file_id, c); - fprintf(proxy, " {\n"); - fprintf(proxy, " *pIndex = %d;\n", c); - fprintf(proxy, " return 1;\n"); - fprintf(proxy, " }\n"); - c++; - } - fprintf(proxy, " return 0;\n"); - fprintf(proxy, "}\n"); - fprintf(proxy, "\n"); - - fprintf(proxy, "const ExtendedProxyFileInfo %s_ProxyFileInfo =\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); - fprintf(proxy, " 0,\n"); - fprintf(proxy, " &_%s_IID_Lookup,\n", file_id); - fprintf(proxy, " %d,\n", c); - fprintf(proxy, " 1,\n"); - fprintf(proxy, " 0,\n"); - fprintf(proxy, " 0,\n"); - fprintf(proxy, " 0,\n"); - fprintf(proxy, " 0\n"); - fprintf(proxy, "};\n"); - - fclose(proxy); -} diff --git a/reactos/tools/widl/server.c b/reactos/tools/widl/server.c deleted file mode 100644 index 05aeeb74559..00000000000 --- a/reactos/tools/widl/server.c +++ /dev/null @@ -1,470 +0,0 @@ -/* - * 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, ...) -{ - va_list va; - va_start(va, format); - print(server, indent, format, va); - va_end(va); -} - -static void write_function_stubs(type_t *iface, unsigned int *proc_offset) -{ - char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); - int explicit_handle = is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE); - const func_t *func; - const var_t *var; - const var_t* explicit_handle_var; - - if (!iface->funcs) return; - LIST_FOR_EACH_ENTRY( func, iface->funcs, const func_t, entry ) - { - const var_t *def = func->def; - const var_t* context_handle_var = NULL; - const var_t* explicit_generic_handle_var = NULL; - int has_full_pointer = is_full_pointer_function(func); - - /* check for a defined binding handle */ - explicit_handle_var = get_explicit_handle_var(func); - if (!explicit_handle_var) - { - explicit_generic_handle_var = get_explicit_generic_handle_var(func); - if (!explicit_generic_handle_var) - context_handle_var = get_context_handle_var(func); - } - if (explicit_handle) - { - if (!explicit_handle_var && !explicit_generic_handle_var && !context_handle_var) - { - error("%s() does not define an explicit binding handle!\n", def->name); - return; - } - } - else if (implicit_handle) - { - if (explicit_handle_var) - { - error("%s() must not define a binding handle!\n", def->name); - return; - } - } - - fprintf(server, "void __RPC_STUB\n"); - fprintf(server, "%s_", iface->name); - write_name(server, def); - fprintf(server, "(\n"); - indent++; - print_server("PRPC_MESSAGE _pRpcMessage)\n"); - indent--; - - /* write the functions body */ - fprintf(server, "{\n"); - indent++; - - /* Declare arguments */ - declare_stub_args(server, indent, func); - - print_server("MIDL_STUB_MESSAGE _StubMsg;\n"); - print_server("RPC_STATUS _Status;\n"); - fprintf(server, "\n"); - - - print_server("((void)(_Status));\n"); - print_server("NdrServerInitializeNew(\n"); - indent++; - print_server("_pRpcMessage,\n"); - print_server("&_StubMsg,\n"); - print_server("&%s_StubDesc);\n", iface->name); - indent--; - fprintf(server, "\n"); - - write_parameters_init(server, indent, func); - - if (explicit_handle_var) - { - print_server("%s = _pRpcMessage->Handle;\n", explicit_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 (func->args) - { - print_server("if ((_pRpcMessage->DataRepresentation & 0x0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION)\n"); - indent++; - print_server("NdrConvert(\n"); - indent++; - print_server("(PMIDL_STUB_MESSAGE)&_StubMsg,\n"); - print_server("(PFORMAT_STRING)&__MIDL_ProcFormatString.Format[%u]);\n", *proc_offset); - indent -= 2; - fprintf(server, "\n"); - - /* unmarshall arguments */ - write_remoting_arguments(server, indent, func, PASS_IN, PHASE_UNMARSHAL); - } - - print_server("if (_StubMsg.Buffer > _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); - - /* Call the real server function */ - if (!is_void(get_func_return_type(func))) - print_server("_RetVal = "); - else - print_server(""); - write_prefix_name(server, prefix_server, def); - - if (func->args) - { - int first_arg = 1; - - fprintf(server, "(\n"); - indent++; - LIST_FOR_EACH_ENTRY( var, func->args, 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 */ - int is_ch_ptr = is_aliaschain_attr(var->type, ATTR_CONTEXTHANDLE) ? FALSE : TRUE; - print_server("("); - write_type_decl_left(server, var->type); - fprintf(server, ")%sNDRSContextValue(%s)", is_ch_ptr ? "" : "*", var->name); - } - else - { - print_server(""); - if (var->type->declarray) - fprintf(server, "*"); - write_name(server, var); - } - } - fprintf(server, ");\n"); - indent--; - } - else - { - fprintf(server, "();\n"); - } - - if (has_out_arg_or_return(func)) - { - write_remoting_arguments(server, indent, func, PASS_OUT, PHASE_BUFFERSIZE); - - if (!is_void(get_func_return_type(func))) - write_remoting_arguments(server, indent, func, PASS_RETURN, PHASE_BUFFERSIZE); - - print_server("_pRpcMessage->BufferLength = _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("_StubMsg.Buffer = (unsigned char *)_pRpcMessage->Buffer;\n"); - fprintf(server, "\n"); - } - - /* marshall arguments */ - write_remoting_arguments(server, indent, func, PASS_OUT, PHASE_MARSHAL); - - /* marshall the return value */ - if (!is_void(get_func_return_type(func))) - write_remoting_arguments(server, indent, func, PASS_RETURN, PHASE_MARSHAL); - - indent--; - print_server("}\n"); - print_server("RpcFinally\n"); - print_server("{\n"); - indent++; - - write_remoting_arguments(server, indent, func, PASS_OUT, PHASE_FREE); - - if (has_full_pointer) - write_full_pointer_free(server, indent, func); - - indent--; - print_server("}\n"); - print_server("RpcEndFinally\n"); - - /* calculate buffer length */ - fprintf(server, "\n"); - print_server("_pRpcMessage->BufferLength =\n"); - indent++; - print_server("(unsigned int)(_StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer);\n"); - indent--; - indent--; - fprintf(server, "}\n"); - fprintf(server, "\n"); - - /* update proc_offset */ - *proc_offset += get_size_procformatstring_func( func ); - } -} - - -static void write_dispatchtable(type_t *iface) -{ - unsigned long ver = get_attrv(iface->attrs, ATTR_VERSION); - unsigned long method_count = 0; - const func_t *func; - - print_server("static RPC_DISPATCH_FUNCTION %s_table[] =\n", iface->name); - print_server("{\n"); - indent++; - - if (iface->funcs) LIST_FOR_EACH_ENTRY( func, iface->funcs, const func_t, entry ) - { - var_t *def = func->def; - - print_server("%s_", iface->name); - write_name(server, def); - fprintf(server, ",\n"); - - method_count++; - } - print_server("0\n"); - indent--; - print_server("};\n"); - print_server("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_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"); - 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("0x10001, /* Ndr library version */\n"); - 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 long 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("extern RPC_DISPATCH_TABLE %s_v%d_%d_DispatchTable;\n", iface->name, MAJORVERSION(ver), MINORVERSION(ver)); - 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%08lx,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("0,\n"); - print_server("0,\n"); - indent--; - print_server("};\n"); - if (old_names) - print_server("RPC_IF_HANDLE %s_ServerIfHandle = (RPC_IF_HANDLE)& %s___RpcServerInterface;\n", - iface->name, iface->name); - else - print_server("RPC_IF_HANDLE %s%s_v%d_%d_s_ifspec = (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("#define _SEH_NO_NATIVE_NLG\n"); - print_server("#include \"%s\"\n", header_name); - fprintf(server, "\n"); -} - - -void write_server(ifref_list_t *ifaces) -{ - unsigned int proc_offset = 0; - int expr_eval_routines; - ifref_t *iface; - - if (!do_server) - return; - if (do_everything && !need_stub_files(ifaces)) - return; - - init_server(); - if (!server) - return; - - write_formatstringsdecl(server, indent, ifaces, 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); - - if (ifaces) LIST_FOR_EACH_ENTRY( iface, ifaces, ifref_t, entry ) - { - if (!need_stub(iface->iface)) - continue; - - fprintf(server, "/*****************************************************************************\n"); - fprintf(server, " * %s interface\n", iface->iface->name); - fprintf(server, " */\n"); - fprintf(server, "\n"); - - if (iface->iface->funcs) - { - write_serverinterfacedecl(iface->iface); - write_stubdescdecl(iface->iface); - - write_function_stubs(iface->iface, &proc_offset); - - print_server("#if !defined(__RPC_WIN32__)\n"); - print_server("#error Invalid build platform for this stub.\n"); - print_server("#endif\n"); - - fprintf(server, "\n"); - write_stubdescriptor(iface->iface, expr_eval_routines); - write_dispatchtable(iface->iface); - } - } - - fprintf(server, "\n"); - - write_procformatstring(server, ifaces, need_stub); - write_typeformatstring(server, ifaces, need_stub); - - fclose(server); -} diff --git a/reactos/tools/widl/typegen.c b/reactos/tools/widl/typegen.c deleted file mode 100644 index 32e557f508a..00000000000 --- a/reactos/tools/widl/typegen.c +++ /dev/null @@ -1,3407 +0,0 @@ -/* - * 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 "wine/list.h" - -#include "typegen.h" - -static const func_t *current_func; -static const type_t *current_structure; -static const ifref_t *current_iface; - -static struct list expr_eval_routines = LIST_INIT(expr_eval_routines); -struct expr_eval_routine -{ - struct list entry; - const type_t *structure; - unsigned int baseoff; - const expr_t *expr; -}; - -static size_t fields_memsize(const var_list_t *fields, unsigned int *align); -static size_t 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 size_t write_string_tfs(FILE *file, const attr_list_t *attrs, - type_t *type, - const char *name, unsigned int *typestring_offset); - -const char *string_of_type(unsigned char type) -{ - switch (type) - { - case RPC_FC_BYTE: return "FC_BYTE"; - case RPC_FC_CHAR: return "FC_CHAR"; - case RPC_FC_SMALL: return "FC_SMALL"; - case RPC_FC_USMALL: return "FC_USMALL"; - case RPC_FC_WCHAR: return "FC_WCHAR"; - case RPC_FC_SHORT: return "FC_SHORT"; - case RPC_FC_USHORT: return "FC_USHORT"; - case RPC_FC_LONG: return "FC_LONG"; - case RPC_FC_ULONG: return "FC_ULONG"; - case RPC_FC_FLOAT: return "FC_FLOAT"; - case RPC_FC_HYPER: return "FC_HYPER"; - case RPC_FC_DOUBLE: return "FC_DOUBLE"; - case RPC_FC_ENUM16: return "FC_ENUM16"; - case RPC_FC_ENUM32: return "FC_ENUM32"; - case RPC_FC_IGNORE: return "FC_IGNORE"; - case RPC_FC_ERROR_STATUS_T: return "FC_ERROR_STATUS_T"; - case RPC_FC_RP: return "FC_RP"; - case RPC_FC_UP: return "FC_UP"; - case RPC_FC_OP: return "FC_OP"; - case RPC_FC_FP: return "FC_FP"; - case RPC_FC_ENCAPSULATED_UNION: return "FC_ENCAPSULATED_UNION"; - case RPC_FC_NON_ENCAPSULATED_UNION: return "FC_NON_ENCAPSULATED_UNION"; - case RPC_FC_STRUCT: return "FC_STRUCT"; - case RPC_FC_PSTRUCT: return "FC_PSTRUCT"; - case RPC_FC_CSTRUCT: return "FC_CSTRUCT"; - case RPC_FC_CPSTRUCT: return "FC_CPSTRUCT"; - case RPC_FC_CVSTRUCT: return "FC_CVSTRUCT"; - case RPC_FC_BOGUS_STRUCT: return "FC_BOGUS_STRUCT"; - case RPC_FC_SMFARRAY: return "FC_SMFARRAY"; - case RPC_FC_LGFARRAY: return "FC_LGFARRAY"; - case RPC_FC_SMVARRAY: return "FC_SMVARRAY"; - case RPC_FC_LGVARRAY: return "FC_LGVARRAY"; - case RPC_FC_CARRAY: return "FC_CARRAY"; - case RPC_FC_CVARRAY: return "FC_CVARRAY"; - case RPC_FC_BOGUS_ARRAY: return "FC_BOGUS_ARRAY"; - case RPC_FC_ALIGNM4: return "FC_ALIGNM4"; - case RPC_FC_ALIGNM8: return "FC_ALIGNM8"; - case RPC_FC_POINTER: return "FC_POINTER"; - case RPC_FC_C_CSTRING: return "FC_C_CSTRING"; - case RPC_FC_C_WSTRING: return "FC_C_WSTRING"; - case RPC_FC_CSTRING: return "FC_CSTRING"; - case RPC_FC_WSTRING: return "FC_WSTRING"; - default: - error("string_of_type: unknown type 0x%02x\n", type); - return NULL; - } -} - -int is_struct(unsigned char type) -{ - switch (type) - { - case RPC_FC_STRUCT: - case RPC_FC_PSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_FC_CVSTRUCT: - case RPC_FC_BOGUS_STRUCT: - return 1; - default: - return 0; - } -} - -static int is_non_complex_struct(const type_t *type) -{ - switch (type->type) - { - case RPC_FC_STRUCT: - case RPC_FC_PSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_FC_CVSTRUCT: - return 1; - default: - return 0; - } -} - -int is_union(unsigned char type) -{ - switch (type) - { - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_NON_ENCAPSULATED_UNION: - return 1; - default: - return 0; - } -} - -static int type_has_pointers(const type_t *type) -{ - if (is_user_type(type)) - return FALSE; - else if (is_ptr(type)) - return TRUE; - else if (is_array(type)) - return type_has_pointers(type->ref); - else if (is_struct(type->type)) - { - const var_t *field; - if (type->fields_or_args) LIST_FOR_EACH_ENTRY( field, type->fields_or_args, const var_t, entry ) - { - if (type_has_pointers(field->type)) - return TRUE; - } - } - else if (is_union(type->type)) - { - var_list_t *fields; - const var_t *field; - if (type->type == RPC_FC_ENCAPSULATED_UNION) - { - const var_t *uv = LIST_ENTRY(list_tail(type->fields_or_args), const var_t, entry); - fields = uv->type->fields_or_args; - } - else - fields = type->fields_or_args; - if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) - { - if (field->type && type_has_pointers(field->type)) - return TRUE; - } - } - - return FALSE; -} - -static int type_has_full_pointer(const type_t *type) -{ - if (is_user_type(type)) - return FALSE; - else if (type->type == RPC_FC_FP) - return TRUE; - else if (is_ptr(type)) - return FALSE; - else if (is_array(type)) - return type_has_full_pointer(type->ref); - else if (is_struct(type->type)) - { - const var_t *field; - if (type->fields_or_args) LIST_FOR_EACH_ENTRY( field, type->fields_or_args, const var_t, entry ) - { - if (type_has_full_pointer(field->type)) - return TRUE; - } - } - else if (is_union(type->type)) - { - var_list_t *fields; - const var_t *field; - if (type->type == RPC_FC_ENCAPSULATED_UNION) - { - const var_t *uv = LIST_ENTRY(list_tail(type->fields_or_args), const var_t, entry); - fields = uv->type->fields_or_args; - } - else - fields = type->fields_or_args; - if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) - { - if (field->type && type_has_full_pointer(field->type)) - return TRUE; - } - } - - 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 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 (t->kind == TKIND_ALIAS) - t = t->orig; - else - return 0; - } -} - -int is_user_type(const type_t *t) -{ - return get_user_type(t, NULL) != NULL; -} - -static int is_embedded_complex(const type_t *type) -{ - unsigned char tc = type->type; - return is_struct(tc) || is_union(tc) || is_array(type) || is_user_type(type) - || (is_ptr(type) && type->ref->type == RPC_FC_IP); -} - -static const char *get_context_handle_type_name(const type_t *type) -{ - const type_t *t; - for (t = type; is_ptr(t); t = t->ref) - if (is_attr(t->attrs, ATTR_CONTEXTHANDLE)) - return t->name; - assert(0); - return NULL; -} - -/* 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; -} - -static 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: - 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_MUL: - case EXPR_DIV: - case EXPR_SHL: - case EXPR_SHR: - 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: - 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; -} - -#define WRITE_FCTYPE(file, fctype, typestring_offset) \ - do { \ - if (file) \ - fprintf(file, "/* %2u */\n", typestring_offset); \ - print_file((file), 2, "0x%02x, /* " #fctype " */\n", RPC_##fctype); \ - } \ - while (0) - -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) -{ - if (decl_indirect(t)) - print_file(file, indent, "MIDL_memset(&%s, 0, sizeof(%s));\n", n, n); - else if (is_ptr(t) || is_array(t)) - print_file(file, indent, "%s = 0;\n", n); -} - -void write_parameters_init(FILE *file, int indent, const func_t *func) -{ - const var_t *var; - - if (!is_void(get_func_return_type(func))) - write_var_init(file, indent, get_func_return_type(func), "_RetVal"); - - if (!func->args) - return; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - write_var_init(file, indent, var->type, var->name); - - 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, ifref_list_t *ifaces, type_pred_t pred) -{ - print_file(f, indent, "#define TYPE_FORMAT_STRING_SIZE %d\n", - get_size_typeformatstring(ifaces, pred)); - - print_file(f, indent, "#define PROC_FORMAT_STRING_SIZE %d\n", - get_size_procformatstring(ifaces, 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"); -} - -static inline int is_base_type(unsigned char type) -{ - switch (type) - { - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_USMALL: - case RPC_FC_SMALL: - case RPC_FC_WCHAR: - case RPC_FC_USHORT: - case RPC_FC_SHORT: - case RPC_FC_ULONG: - case RPC_FC_LONG: - case RPC_FC_HYPER: - case RPC_FC_IGNORE: - case RPC_FC_FLOAT: - case RPC_FC_DOUBLE: - case RPC_FC_ENUM16: - case RPC_FC_ENUM32: - case RPC_FC_ERROR_STATUS_T: - case RPC_FC_BIND_PRIMITIVE: - return TRUE; - - default: - return FALSE; - } -} - -int decl_indirect(const type_t *t) -{ - return is_user_type(t) - || (!is_base_type(t->type) - && !is_ptr(t) - && !is_array(t)); -} - -static size_t write_procformatstring_type(FILE *file, int indent, - const char *name, - const type_t *type, - const attr_list_t *attrs, - int is_return) -{ - size_t size; - - int is_in = is_attr(attrs, ATTR_IN); - int is_out = is_attr(attrs, ATTR_OUT); - - if (!is_in && !is_out) is_in = TRUE; - - if (!type->declarray && is_base_type(type->type)) - { - 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->type == RPC_FC_BIND_PRIMITIVE) - { - print_file(file, indent, "0x%02x, /* FC_IGNORE */\n", RPC_FC_IGNORE); - size = 2; /* includes param type prefix */ - } - else if (is_base_type(type->type)) - { - print_file(file, indent, "0x%02x, /* %s */\n", type->type, string_of_type(type->type)); - size = 2; /* includes param type prefix */ - } - else - { - error("Unknown/unsupported type: %s (0x%02x)\n", name, type->type); - size = 0; - } - } - else - { - 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"); - - print_file(file, indent, "0x01,\n"); - print_file(file, indent, "NdrFcShort(0x%x),\n", type->typestring_offset); - size = 4; /* includes param type prefix */ - } - return size; -} - -void write_procformatstring(FILE *file, const ifref_list_t *ifaces, type_pred_t pred) -{ - const ifref_t *iface; - int indent = 0; - const var_t *var; - - 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++; - - if (ifaces) LIST_FOR_EACH_ENTRY( iface, ifaces, const ifref_t, entry ) - { - if (!pred(iface->iface)) - continue; - - if (iface->iface->funcs) - { - const func_t *func; - LIST_FOR_EACH_ENTRY( func, iface->iface->funcs, const func_t, entry ) - { - if (is_local(func->def->attrs)) continue; - /* emit argument data */ - if (func->args) - { - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - write_procformatstring_type(file, indent, var->name, var->type, var->attrs, FALSE); - } - - /* emit return value data */ - if (is_void(get_func_return_type(func))) - { - print_file(file, indent, "0x5b, /* FC_END */\n"); - print_file(file, indent, "0x5c, /* FC_PAD */\n"); - } - else - write_procformatstring_type(file, indent, "return value", get_func_return_type(func), NULL, TRUE); - } - } - } - - print_file(file, indent, "0x0\n"); - indent--; - print_file(file, indent, "}\n"); - indent--; - print_file(file, indent, "};\n"); - print_file(file, indent, "\n"); -} - -static int write_base_type(FILE *file, const type_t *type, unsigned int *typestring_offset) -{ - if (is_base_type(type->type)) - { - print_file(file, 2, "0x%02x,\t/* %s */\n", type->type, string_of_type(type->type)); - *typestring_offset += 1; - return 1; - } - - return 0; -} - -/* write conformance / variance descriptor */ -static size_t write_conf_or_var_desc(FILE *file, const type_t *structure, - unsigned int baseoff, const type_t *type, - const expr_t *expr) -{ - unsigned char operator_type = 0; - unsigned char conftype = RPC_FC_NORMAL_CONFORMANCE; - const char *conftype_string = ""; - const char *operator_string = "no operators"; - const expr_t *subexpr; - - if (!expr) - { - print_file(file, 2, "NdrFcLong(0xffffffff),\t/* -1 */\n"); - return 4; - } - - if (!structure) - { - /* Top-level conformance calculations are done inline. */ - print_file (file, 2, "0x%x,\t/* Corr desc: parameter */\n", - RPC_FC_TOP_LEVEL_CONFORMANCE); - print_file (file, 2, "0x0,\n"); - print_file (file, 2, "NdrFcShort(0x0),\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 %ld 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 = %ld */\n", - RPC_FC_CONSTANT_CONFORMANCE, expr->cval); - print_file(file, 2, "0x%x,\n", expr->cval & ~USHRT_MAX); - print_file(file, 2, "NdrFcShort(0x%x),\n", expr->cval & USHRT_MAX); - - return 4; - } - - if (is_ptr(type) || (is_array(type) && !type->declarray)) - { - conftype = RPC_FC_POINTER_CONFORMANCE; - conftype_string = "field pointer, "; - } - - subexpr = expr; - switch (subexpr->type) - { - case EXPR_PPTR: - subexpr = subexpr->ref; - operator_type = RPC_FC_DEREFERENCE; - operator_string = "FC_DEREFERENCE"; - break; - case EXPR_DIV: - if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 2)) - { - subexpr = subexpr->ref; - operator_type = RPC_FC_DIV_2; - operator_string = "FC_DIV_2"; - } - break; - case EXPR_MUL: - if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 2)) - { - subexpr = subexpr->ref; - operator_type = RPC_FC_MULT_2; - operator_string = "FC_MULT_2"; - } - break; - case EXPR_SUB: - if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 1)) - { - subexpr = subexpr->ref; - operator_type = RPC_FC_SUB_1; - operator_string = "FC_SUB_1"; - } - break; - case EXPR_ADD: - if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 1)) - { - subexpr = subexpr->ref; - operator_type = RPC_FC_ADD_1; - operator_string = "FC_ADD_1"; - } - break; - default: - break; - } - - if (subexpr->type == EXPR_IDENTIFIER) - { - const type_t *correlation_variable = NULL; - unsigned char correlation_variable_type; - unsigned char param_type = 0; - size_t offset = 0; - const var_t *var; - - if (structure->fields_or_args) LIST_FOR_EACH_ENTRY( var, structure->fields_or_args, const var_t, entry ) - { - unsigned int align = 0; - /* FIXME: take alignment into account */ - if (var->name && !strcmp(var->name, subexpr->u.sval)) - { - correlation_variable = var->type; - break; - } - offset += type_memsize(var->type, &align); - } - if (!correlation_variable) - error("write_conf_or_var_desc: couldn't find variable %s in structure\n", - subexpr->u.sval); - - offset -= baseoff; - correlation_variable_type = correlation_variable->type; - - switch (correlation_variable_type) - { - case RPC_FC_CHAR: - case RPC_FC_SMALL: - param_type = RPC_FC_SMALL; - break; - case RPC_FC_BYTE: - case RPC_FC_USMALL: - param_type = RPC_FC_USMALL; - break; - case RPC_FC_WCHAR: - case RPC_FC_SHORT: - case RPC_FC_ENUM16: - param_type = RPC_FC_SHORT; - break; - case RPC_FC_USHORT: - param_type = RPC_FC_USHORT; - break; - case RPC_FC_LONG: - case RPC_FC_ENUM32: - param_type = RPC_FC_LONG; - break; - case RPC_FC_ULONG: - param_type = RPC_FC_ULONG; - break; - case RPC_FC_RP: - case RPC_FC_UP: - case RPC_FC_OP: - case RPC_FC_FP: - if (sizeof(void *) == 4) /* FIXME */ - param_type = RPC_FC_LONG; - else - param_type = RPC_FC_HYPER; - break; - default: - error("write_conf_or_var_desc: conformance variable type not supported 0x%x\n", - correlation_variable_type); - } - - print_file(file, 2, "0x%x, /* Corr desc: %s%s */\n", - conftype | param_type, conftype_string, string_of_type(param_type)); - print_file(file, 2, "0x%x, /* %s */\n", operator_type, operator_string); - print_file(file, 2, "NdrFcShort(0x%x), /* offset = %d */\n", - offset, offset); - } - else - { - 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 (!strcmp (eval->structure->name, structure->name) - && !compare_expr (eval->expr, expr)) - { - found = 1; - break; - } - callback_offset++; - } - - if (!found) - { - eval = xmalloc (sizeof(*eval)); - eval->structure = structure; - 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, /* Corr desc: %s */\n", conftype, conftype_string); - print_file(file, 2, "0x%x, /* %s */\n", RPC_FC_CALLBACK, "FC_CALLBACK"); - print_file(file, 2, "NdrFcShort(0x%x), /* %u */\n", callback_offset, callback_offset); - } - return 4; -} - -static size_t fields_memsize(const var_list_t *fields, unsigned int *align) -{ - int have_align = FALSE; - size_t size = 0; - const var_t *v; - - if (!fields) return 0; - LIST_FOR_EACH_ENTRY( v, fields, const var_t, entry ) - { - unsigned int falign = 0; - size_t fsize = type_memsize(v->type, &falign); - if (!have_align) - { - *align = falign; - have_align = TRUE; - } - size = (size + (falign - 1)) & ~(falign - 1); - size += fsize; - } - - size = (size + (*align - 1)) & ~(*align - 1); - return size; -} - -static size_t union_memsize(const var_list_t *fields, unsigned int *pmaxa) -{ - size_t 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(v->type, &align); - if (maxs < size) maxs = size; - if (*pmaxa < align) *pmaxa = align; - } - } - - return maxs; -} - -int get_padding(const var_list_t *fields) -{ - unsigned short offset = 0; - 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; - size_t size = type_memsize(ft, &align); - if (salign == -1) - salign = align; - offset = (offset + (align - 1)) & ~(align - 1); - offset += size; - } - - return ((offset + (salign - 1)) & ~(salign - 1)) - offset; -} - -size_t type_memsize(const type_t *t, unsigned int *align) -{ - size_t size = 0; - - if (t->declarray && is_conformant_array(t)) - { - type_memsize(t->ref, align); - size = 0; - } - else if (is_ptr(t) || is_conformant_array(t)) - { - size = sizeof(void *); - if (size > *align) *align = size; - } - else switch (t->type) - { - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_USMALL: - case RPC_FC_SMALL: - size = 1; - if (size > *align) *align = size; - break; - case RPC_FC_WCHAR: - case RPC_FC_USHORT: - case RPC_FC_SHORT: - case RPC_FC_ENUM16: - size = 2; - if (size > *align) *align = size; - break; - case RPC_FC_ULONG: - case RPC_FC_LONG: - case RPC_FC_ERROR_STATUS_T: - case RPC_FC_ENUM32: - case RPC_FC_FLOAT: - size = 4; - if (size > *align) *align = size; - break; - case RPC_FC_HYPER: - case RPC_FC_DOUBLE: - size = 8; - if (size > *align) *align = size; - break; - case RPC_FC_STRUCT: - case RPC_FC_CVSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_PSTRUCT: - case RPC_FC_BOGUS_STRUCT: - size = fields_memsize(t->fields_or_args, align); - break; - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_NON_ENCAPSULATED_UNION: - size = union_memsize(t->fields_or_args, align); - break; - case RPC_FC_SMFARRAY: - case RPC_FC_LGFARRAY: - case RPC_FC_SMVARRAY: - case RPC_FC_LGVARRAY: - case RPC_FC_BOGUS_ARRAY: - size = t->dim * type_memsize(t->ref, align); - break; - default: - error("type_memsize: Unknown type %d\n", t->type); - size = 0; - } - - return size; -} - -int is_full_pointer_function(const func_t *func) -{ - const var_t *var; - if (type_has_full_pointer(get_func_return_type(func))) - return TRUE; - if (!func->args) - return FALSE; - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - if (type_has_full_pointer( var->type )) - return TRUE; - return FALSE; -} - -void write_full_pointer_init(FILE *file, int indent, const func_t *func, int is_server) -{ - print_file(file, indent, "_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 func_t *func) -{ - print_file(file, indent, "NdrFullPointerXlatFree(_StubMsg.FullPtrXlatTables);\n"); - fprintf(file, "\n"); -} - -static unsigned int write_nonsimple_pointer(FILE *file, const type_t *type, size_t offset) -{ - short absoff = type->ref->typestring_offset; - short reloff = absoff - (offset + 2); - int ptr_attr = is_ptr(type->ref) ? 0x10 : 0x0; - - print_file(file, 2, "0x%02x, 0x%x,\t/* %s */\n", - type->type, ptr_attr, string_of_type(type->type)); - print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%hd) */\n", - reloff, reloff, absoff); - return 4; -} - -static unsigned int write_simple_pointer(FILE *file, const type_t *type) -{ - unsigned char fc = type->ref->type; - /* 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(type->attrs, type)) - error("write_simple_pointer: can't handle type %s which is a string type\n", type->name); - print_file(file, 2, "0x%02x, 0x8,\t/* %s [simple_pointer] */\n", - type->type, string_of_type(type->type)); - 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 size_t write_pointer_tfs(FILE *file, type_t *type, unsigned int *typestring_offset) -{ - unsigned int offset = *typestring_offset; - - print_start_tfs_comment(file, type, offset); - update_tfsoff(type, offset, file); - - if (type->ref->typestring_offset) - *typestring_offset += write_nonsimple_pointer(file, type, offset); - else if (is_base_type(type->ref->type)) - *typestring_offset += write_simple_pointer(file, type); - - 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 - switch (t->type) - { - case RPC_FC_PSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_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 void write_user_tfs(FILE *file, type_t *type, unsigned int *tfsoff) -{ - unsigned int start, absoff, flags; - unsigned int align = 0, ualign = 0; - const char *name; - type_t *utype = get_user_type(type, &name); - size_t usize = user_type_has_variable_size(utype) ? 0 : type_memsize(utype, &ualign); - size_t size = type_memsize(type, &align); - unsigned short funoff = user_type_offset(name); - short reloff; - - guard_rec(type); - - if (is_base_type(utype->type)) - { - absoff = *tfsoff; - print_start_tfs_comment(file, utype, absoff); - print_file(file, 2, "0x%x,\t/* %s */\n", utype->type, string_of_type(utype->type)); - 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 (utype->type == RPC_FC_RP) - flags = 0x40; - else if (utype->type == RPC_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", RPC_FC_USER_MARSHAL); - print_file(file, 2, "0x%x,\t/* Alignment= %d, Flags= %02x */\n", - flags | (align - 1), align - 1, flags); - print_file(file, 2, "NdrFcShort(0x%hx),\t/* Function offset= %hu */\n", funoff, funoff); - print_file(file, 2, "NdrFcShort(0x%lx),\t/* %lu */\n", size, size); - print_file(file, 2, "NdrFcShort(0x%lx),\t/* %lu */\n", usize, usize); - *tfsoff += 8; - reloff = absoff - *tfsoff; - print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%lu) */\n", reloff, reloff, absoff); - *tfsoff += 2; -} - -static void write_member_type(FILE *file, const type_t *cont, - const attr_list_t *attrs, const type_t *type, - unsigned int *corroff, unsigned int *tfsoff) -{ - if (is_embedded_complex(type) && !is_conformant_array(type)) - { - size_t absoff; - short reloff; - - if (is_union(type->type) && 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"); - /* FIXME: actually compute necessary padding */ - print_file(file, 2, "0x0,\t/* FIXME: padding */\n"); - print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%lu) */\n", - reloff, reloff, absoff); - *tfsoff += 4; - } - else if (is_ptr(type) || is_conformant_array(type)) - { - unsigned char fc = (cont->type == RPC_FC_BOGUS_STRUCT - ? RPC_FC_POINTER - : RPC_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 0x%x\n", type->type); -} - -static void write_end(FILE *file, unsigned int *tfsoff) -{ - if (*tfsoff % 2 == 0) - { - print_file(file, 2, "0x%x,\t\t/* FC_PAD */\n", RPC_FC_PAD); - *tfsoff += 1; - } - print_file(file, 2, "0x%x,\t\t/* FC_END */\n", RPC_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->fields_or_args; - var_t *f; - - if (fs) LIST_FOR_EACH_ENTRY(f, fs, var_t, entry) - { - unsigned int align = 0; - type_t *ft = f->type; - if (is_union(ft->type) && is_attr(f->attrs, ATTR_SWITCHIS)) - { - unsigned int absoff = ft->typestring_offset; - short reloff = absoff - (*tfsoff + 6); - print_file(file, 0, "/* %d */\n", *tfsoff); - print_file(file, 2, "0x%x,\t/* %s */\n", ft->type, string_of_type(ft->type)); - print_file(file, 2, "0x%x,\t/* FIXME: always FC_LONG */\n", RPC_FC_LONG); - write_conf_or_var_desc(file, current_structure, offset, ft, - get_attrp(f->attrs, ATTR_SWITCHIS)); - print_file(file, 2, "NdrFcShort(%hd),\t/* Offset= %hd (%u) */\n", - reloff, reloff, absoff); - *tfsoff += 8; - } - - /* FIXME: take alignment into account */ - offset += type_memsize(ft, &align); - } -} - -static int write_no_repeat_pointer_descriptions( - FILE *file, type_t *type, - size_t *offset_in_memory, size_t *offset_in_buffer, - unsigned int *typestring_offset) -{ - int written = 0; - unsigned int align; - - if (is_ptr(type) || (!type->declarray && is_conformant_array(type))) - { - print_file(file, 2, "0x%02x, /* FC_NO_REPEAT */\n", RPC_FC_NO_REPEAT); - print_file(file, 2, "0x%02x, /* FC_PAD */\n", RPC_FC_PAD); - - /* pointer instance */ - print_file(file, 2, "NdrFcShort(0x%x), /* Memory offset = %d */\n", *offset_in_memory, *offset_in_memory); - print_file(file, 2, "NdrFcShort(0x%x), /* Buffer offset = %d */\n", *offset_in_buffer, *offset_in_buffer); - *typestring_offset += 6; - - if (is_ptr(type)) - { - if (is_string_type(type->attrs, type)) - write_string_tfs(file, NULL, type, NULL, typestring_offset); - else - write_pointer_tfs(file, type, typestring_offset); - } - else - { - unsigned absoff = type->typestring_offset; - short reloff = absoff - (*typestring_offset + 2); - /* FIXME: get pointer attributes from field */ - print_file(file, 2, "0x%02x, 0x0,\t/* %s */\n", RPC_FC_UP, "FC_UP"); - print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%u) */\n", - reloff, reloff, absoff); - *typestring_offset += 4; - } - - align = 0; - *offset_in_memory += type_memsize(type, &align); - /* FIXME: is there a case where these two are different? */ - align = 0; - *offset_in_buffer += type_memsize(type, &align); - - return 1; - } - - if (is_non_complex_struct(type)) - { - const var_t *v; - LIST_FOR_EACH_ENTRY( v, type->fields_or_args, const var_t, entry ) - written += write_no_repeat_pointer_descriptions( - file, v->type, - offset_in_memory, offset_in_buffer, typestring_offset); - } - else - { - align = 0; - *offset_in_memory += type_memsize(type, &align); - /* FIXME: is there a case where these two are different? */ - align = 0; - *offset_in_buffer += type_memsize(type, &align); - } - - return written; -} - -static int write_pointer_description_offsets( - FILE *file, const attr_list_t *attrs, type_t *type, - size_t *offset_in_memory, size_t *offset_in_buffer, - unsigned int *typestring_offset) -{ - int written = 0; - unsigned int align; - - if (is_ptr(type) && type->ref->type != RPC_FC_IP) - { - if (offset_in_memory && offset_in_buffer) - { - /* pointer instance */ - /* FIXME: sometimes from end of structure, sometimes from beginning */ - print_file(file, 2, "NdrFcShort(0x%x), /* Memory offset = %d */\n", *offset_in_memory, *offset_in_memory); - print_file(file, 2, "NdrFcShort(0x%x), /* Buffer offset = %d */\n", *offset_in_buffer, *offset_in_buffer); - - align = 0; - *offset_in_memory += type_memsize(type, &align); - /* FIXME: is there a case where these two are different? */ - align = 0; - *offset_in_buffer += type_memsize(type, &align); - } - *typestring_offset += 4; - - if (is_string_type(attrs, type)) - write_string_tfs(file, NULL, type, NULL, typestring_offset); - else if (processed(type->ref) || is_base_type(type->ref->type)) - write_pointer_tfs(file, type, typestring_offset); - else - error("write_pointer_description_offsets: type format string unknown\n"); - - return 1; - } - - if (is_array(type)) - { - return write_pointer_description_offsets( - file, attrs, type->ref, 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->fields_or_args, const var_t, entry ) - { - written += write_pointer_description_offsets( - file, v->attrs, v->type, offset_in_memory, offset_in_buffer, - typestring_offset); - } - } - else - { - align = 0; - if (offset_in_memory) - *offset_in_memory += type_memsize(type, &align); - /* FIXME: is there a case where these two are different? */ - align = 0; - if (offset_in_buffer) - *offset_in_buffer += type_memsize(type, &align); - } - - 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, - size_t *offset_in_memory, size_t *offset_in_buffer, - unsigned int *typestring_offset) -{ - unsigned int align; - int pointer_count = 0; - - if (type->type == RPC_FC_SMFARRAY || type->type == RPC_FC_LGFARRAY) - { - 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->ref, NULL, NULL, &temp); - if (pointer_count > 0) - { - unsigned int increment_size; - size_t offset_of_array_pointer_mem = 0; - size_t offset_of_array_pointer_buf = 0; - - align = 0; - increment_size = type_memsize(type->ref, &align); - - print_file(file, 2, "0x%02x, /* FC_FIXED_REPEAT */\n", RPC_FC_FIXED_REPEAT); - print_file(file, 2, "0x%02x, /* FC_PAD */\n", RPC_FC_PAD); - print_file(file, 2, "NdrFcShort(0x%x), /* Iterations = %d */\n", type->dim, type->dim); - print_file(file, 2, "NdrFcShort(0x%x), /* Increment = %d */\n", increment_size, increment_size); - print_file(file, 2, "NdrFcShort(0x%x), /* Offset to array = %d */\n", *offset_in_memory, *offset_in_memory); - print_file(file, 2, "NdrFcShort(0x%x), /* Number of pointers = %d */\n", 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 (is_struct(type->type)) - { - const var_t *v; - LIST_FOR_EACH_ENTRY( v, type->fields_or_args, const var_t, entry ) - { - pointer_count += write_fixed_array_pointer_descriptions( - file, v->attrs, v->type, offset_in_memory, offset_in_buffer, - typestring_offset); - } - } - else - { - align = 0; - if (offset_in_memory) - *offset_in_memory += type_memsize(type, &align); - /* FIXME: is there a case where these two are different? */ - align = 0; - if (offset_in_buffer) - *offset_in_buffer += type_memsize(type, &align); - } - - 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, - size_t offset_in_memory, unsigned int *typestring_offset) -{ - unsigned int align; - int pointer_count = 0; - - if (is_conformant_array(type) && !type->length_is) - { - 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->ref, NULL, NULL, &temp); - if (pointer_count > 0) - { - unsigned int increment_size; - size_t offset_of_array_pointer_mem = offset_in_memory; - size_t offset_of_array_pointer_buf = offset_in_memory; - - align = 0; - increment_size = type_memsize(type->ref, &align); - - 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", RPC_FC_VARIABLE_REPEAT); - print_file(file, 2, "0x%02x, /* FC_FIXED_OFFSET */\n", RPC_FC_FIXED_OFFSET); - print_file(file, 2, "NdrFcShort(0x%x), /* Increment = %d */\n", increment_size, increment_size); - print_file(file, 2, "NdrFcShort(0x%x), /* Offset to array = %d */\n", offset_in_memory, offset_in_memory); - print_file(file, 2, "NdrFcShort(0x%x), /* Number of pointers = %d */\n", pointer_count, pointer_count); - *typestring_offset += 8; - - pointer_count = write_pointer_description_offsets( - file, attrs, type->ref, &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, - size_t *offset_in_memory, size_t *offset_in_buffer, - unsigned int *typestring_offset) -{ - unsigned int align; - int pointer_count = 0; - - /* FIXME: do varying array searching here, but pointer searching in write_pointer_description_offsets */ - - if (is_array(type) && type->length_is) - { - 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->ref, NULL, NULL, &temp); - if (pointer_count > 0) - { - unsigned int increment_size; - size_t offset_of_array_pointer_mem = 0; - size_t offset_of_array_pointer_buf = 0; - - align = 0; - increment_size = type_memsize(type->ref, &align); - - 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", RPC_FC_VARIABLE_REPEAT); - print_file(file, 2, "0x%02x, /* FC_VARIABLE_OFFSET */\n", RPC_FC_VARIABLE_OFFSET); - print_file(file, 2, "NdrFcShort(0x%x), /* Increment = %d */\n", increment_size, increment_size); - print_file(file, 2, "NdrFcShort(0x%x), /* Offset to array = %d */\n", *offset_in_memory, *offset_in_memory); - print_file(file, 2, "NdrFcShort(0x%x), /* Number of pointers = %d */\n", pointer_count, pointer_count); - *typestring_offset += 8; - - pointer_count = write_pointer_description_offsets( - file, attrs, type, &offset_of_array_pointer_mem, - &offset_of_array_pointer_buf, typestring_offset); - } - } - else if (is_struct(type->type)) - { - const var_t *v; - LIST_FOR_EACH_ENTRY( v, type->fields_or_args, const var_t, entry ) - { - pointer_count += write_varying_array_pointer_descriptions( - file, v->attrs, v->type, offset_in_memory, offset_in_buffer, - typestring_offset); - } - } - else - { - align = 0; - if (offset_in_memory) - *offset_in_memory += type_memsize(type, &align); - /* FIXME: is there a case where these two are different? */ - align = 0; - if (offset_in_buffer) - *offset_in_buffer += type_memsize(type, &align); - } - - return pointer_count; -} - -static void write_pointer_description(FILE *file, type_t *type, - unsigned int *typestring_offset) -{ - size_t offset_in_buffer; - size_t 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, 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 ((!type->declarray || !current_structure) && is_conformant_array(type)) - write_conformant_array_pointer_descriptions( - file, NULL, type, 0, typestring_offset); - else if (type->type == RPC_FC_CPSTRUCT) - { - unsigned int align = 0; - type_t *carray = find_array_or_string_in_struct(type)->type; - write_conformant_array_pointer_descriptions( - file, NULL, carray, - type_memsize(type, &align), - 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); -} - -int is_declptr(const type_t *t) -{ - return is_ptr(t) || (is_conformant_array(t) && !t->declarray); -} - -static size_t write_string_tfs(FILE *file, const attr_list_t *attrs, - type_t *type, - const char *name, unsigned int *typestring_offset) -{ - size_t start_offset; - unsigned char rtype; - - if (is_declptr(type)) - { - unsigned char flag = is_conformant_array(type) ? 0 : RPC_FC_P_SIMPLEPOINTER; - int pointer_type = is_ptr(type) ? type->type : get_attrv(attrs, ATTR_POINTERTYPE); - if (!pointer_type) - pointer_type = RPC_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; - } - } - - start_offset = *typestring_offset; - update_tfsoff(type, start_offset, file); - - rtype = type->ref->type; - - if ((rtype != RPC_FC_BYTE) && (rtype != RPC_FC_CHAR) && (rtype != RPC_FC_WCHAR)) - { - error("write_string_tfs: Unimplemented for type 0x%x of name: %s\n", rtype, name); - return start_offset; - } - - if (type->declarray && !is_conformant_array(type)) - { - /* FIXME: multi-dimensional array */ - if (0xffffuL < type->dim) - error("array size for parameter %s exceeds %u bytes by %lu bytes\n", - name, 0xffffu, type->dim - 0xffffu); - - if (rtype == RPC_FC_CHAR) - WRITE_FCTYPE(file, FC_CSTRING, *typestring_offset); - else - WRITE_FCTYPE(file, FC_WSTRING, *typestring_offset); - print_file(file, 2, "0x%x, /* FC_PAD */\n", RPC_FC_PAD); - *typestring_offset += 2; - - print_file(file, 2, "NdrFcShort(0x%x), /* %d */\n", type->dim, type->dim); - *typestring_offset += 2; - - return start_offset; - } - else if (type->size_is) - { - unsigned int align = 0; - - if (rtype == RPC_FC_CHAR) - WRITE_FCTYPE(file, FC_C_CSTRING, *typestring_offset); - else - WRITE_FCTYPE(file, FC_C_WSTRING, *typestring_offset); - print_file(file, 2, "0x%x, /* FC_STRING_SIZED */\n", RPC_FC_STRING_SIZED); - *typestring_offset += 2; - - *typestring_offset += write_conf_or_var_desc( - file, current_structure, - (type->declarray && current_structure - ? type_memsize(current_structure, &align) - : 0), - type, type->size_is); - - return start_offset; - } - else - { - if (rtype == RPC_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, /* FC_PAD */\n", RPC_FC_PAD); - *typestring_offset += 2; - - return start_offset; - } -} - -static size_t 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->length_is; - const expr_t *size_is = type->size_is; - unsigned int align = 0; - size_t size; - size_t start_offset; - int has_pointer; - int pointer_type = get_attrv(attrs, ATTR_POINTERTYPE); - unsigned int baseoff - = type->declarray && current_structure - ? type_memsize(current_structure, &align) - : 0; - - if (!pointer_type) - pointer_type = RPC_FC_RP; - - if (write_embedded_types(file, attrs, type->ref, name, FALSE, typestring_offset)) - has_pointer = TRUE; - else - has_pointer = type_has_pointers(type->ref); - - align = 0; - size = type_memsize((is_conformant_array(type) ? type->ref : type), &align); - - 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", type->type, string_of_type(type->type)); - print_file(file, 2, "0x%x,\t/* %d */\n", align - 1, align - 1); - *typestring_offset += 2; - - align = 0; - if (type->type != RPC_FC_BOGUS_ARRAY) - { - unsigned char tc = type->type; - - if (tc == RPC_FC_LGFARRAY || tc == RPC_FC_LGVARRAY) - { - print_file(file, 2, "NdrFcLong(0x%x),\t/* %lu */\n", size, size); - *typestring_offset += 4; - } - else - { - print_file(file, 2, "NdrFcShort(0x%x),\t/* %lu */\n", 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 (type->type == RPC_FC_SMVARRAY || type->type == RPC_FC_LGVARRAY) - { - unsigned int elalign = 0; - size_t elsize = type_memsize(type->ref, &elalign); - - if (type->type == RPC_FC_LGVARRAY) - { - print_file(file, 2, "NdrFcLong(0x%x),\t/* %lu */\n", type->dim, type->dim); - *typestring_offset += 4; - } - else - { - print_file(file, 2, "NdrFcShort(0x%x),\t/* %lu */\n", type->dim, type->dim); - *typestring_offset += 2; - } - - print_file(file, 2, "NdrFcShort(0x%x),\t/* %lu */\n", elsize, elsize); - *typestring_offset += 2; - } - - if (length_is) - *typestring_offset - += write_conf_or_var_desc(file, current_structure, baseoff, - type, length_is); - - if (has_pointer && (!type->declarray || !current_structure)) - { - print_file(file, 2, "0x%x, /* FC_PP */\n", RPC_FC_PP); - print_file(file, 2, "0x%x, /* FC_PAD */\n", RPC_FC_PAD); - *typestring_offset += 2; - write_pointer_description(file, type, typestring_offset); - print_file(file, 2, "0x%x, /* FC_END */\n", RPC_FC_END); - *typestring_offset += 1; - } - - write_member_type(file, type, NULL, type->ref, NULL, typestring_offset); - write_end(file, typestring_offset); - } - else - { - unsigned int dim = size_is ? 0 : type->dim; - print_file(file, 2, "NdrFcShort(0x%x),\t/* %u */\n", 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_member_type(file, type, NULL, type->ref, NULL, 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_t *last_field = LIST_ENTRY( list_tail(type->fields_or_args), const var_t, entry ); - const type_t *ft = last_field->type; - - if (ft->declarray && is_conformant_array(ft)) - return last_field; - - if (ft->type == RPC_FC_CSTRUCT || ft->type == RPC_FC_CPSTRUCT || ft->type == RPC_FC_CVSTRUCT) - return find_array_or_string_in_struct(last_field->type); - else - return NULL; -} - -static void write_struct_members(FILE *file, const type_t *type, - unsigned int *corroff, unsigned int *typestring_offset) -{ - const var_t *field; - unsigned short offset = 0; - int salign = -1; - int padding; - - if (type->fields_or_args) LIST_FOR_EACH_ENTRY( field, type->fields_or_args, const var_t, entry ) - { - type_t *ft = field->type; - if (!ft->declarray || !is_conformant_array(ft)) - { - unsigned int align = 0; - size_t size = type_memsize(ft, &align); - if (salign == -1) - salign = align; - if ((align - 1) & offset) - { - unsigned char fc = 0; - switch (align) - { - case 4: - fc = RPC_FC_ALIGNM4; - break; - case 8: - fc = RPC_FC_ALIGNM8; - break; - default: - error("write_struct_members: cannot align type %d\n", ft->type); - } - print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc)); - offset = (offset + (align - 1)) & ~(align - 1); - *typestring_offset += 1; - } - write_member_type(file, type, field->attrs, field->type, corroff, - typestring_offset); - offset += size; - } - } - - padding = ((offset + (salign - 1)) & ~(salign - 1)) - offset; - if (padding) - { - print_file(file, 2, "0x%x,\t/* FC_STRUCTPAD%d */\n", - RPC_FC_STRUCTPAD1 + padding - 1, - padding); - *typestring_offset += 1; - } - - write_end(file, typestring_offset); -} - -static size_t 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; - size_t start_offset; - size_t array_offset; - int has_pointers = 0; - unsigned int align = 0; - unsigned int corroff; - var_t *f; - - guard_rec(type); - current_structure = type; - - total_size = type_memsize(type, &align); - 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 (type->fields_or_args) LIST_FOR_EACH_ENTRY(f, type->fields_or_args, var_t, entry) - has_pointers |= write_embedded_types(file, f->attrs, f->type, f->name, - FALSE, tfsoff); - if (!has_pointers) has_pointers = type_has_pointers(type); - - array = find_array_or_string_in_struct(type); - if (array && !processed(array->type)) - array_offset - = is_attr(array->attrs, ATTR_STRING) - ? write_string_tfs(file, array->attrs, array->type, array->name, tfsoff) - : 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", type->type, string_of_type(type->type)); - print_file(file, 2, "0x%x,\t/* %d */\n", align - 1, align - 1); - print_file(file, 2, "NdrFcShort(0x%x),\t/* %d */\n", 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 (%lu) */\n", - reloff, reloff, absoff); - *tfsoff += 2; - } - else if (type->type == RPC_FC_BOGUS_STRUCT) - { - print_file(file, 2, "NdrFcShort(0x0),\n"); - *tfsoff += 2; - } - - if (type->type == RPC_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; - short reloff = absoff - *tfsoff; - print_file(file, 2, "NdrFcShort(0x%hx),\t/* Offset= %hd (%u) */\n", - reloff, reloff, absoff); - *tfsoff += 2; - } - else if ((type->type == RPC_FC_PSTRUCT) || - (type->type == RPC_FC_CPSTRUCT) || - (type->type == RPC_FC_CVSTRUCT && has_pointers)) - { - print_file(file, 2, "0x%x, /* FC_PP */\n", RPC_FC_PP); - print_file(file, 2, "0x%x, /* FC_PAD */\n", RPC_FC_PAD); - *tfsoff += 2; - write_pointer_description(file, type, tfsoff); - print_file(file, 2, "0x%x, /* FC_END */\n", RPC_FC_END); - *tfsoff += 1; - } - - write_struct_members(file, type, &corroff, tfsoff); - - if (type->type == RPC_FC_BOGUS_STRUCT) - { - const var_list_t *fs = type->fields_or_args; - const var_t *f; - - type->ptrdesc = *tfsoff; - if (fs) LIST_FOR_EACH_ENTRY(f, fs, const var_t, entry) - { - type_t *ft = f->type; - if (is_ptr(ft)) - { - if (is_string_type(f->attrs, ft)) - write_string_tfs(file, f->attrs, ft, f->name, tfsoff); - else - write_pointer_tfs(file, ft, tfsoff); - } - else if (!ft->declarray && is_conformant_array(ft)) - { - unsigned int absoff = ft->typestring_offset; - short reloff = absoff - (*tfsoff + 2); - int ptr_type = get_attrv(f->attrs, ATTR_POINTERTYPE); - /* FIXME: We need to store pointer attributes for arrays - so we don't lose pointer_default info. */ - if (ptr_type == 0) - ptr_type = RPC_FC_UP; - print_file(file, 0, "/* %d */\n", *tfsoff); - 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); - *tfsoff += 4; - } - } - if (type->ptrdesc == *tfsoff) - type->ptrdesc = 0; - } - - current_structure = save_current_structure; - return start_offset; -} - -static size_t write_pointer_only_tfs(FILE *file, const attr_list_t *attrs, int pointer_type, - unsigned char flags, size_t offset, - unsigned int *typeformat_offset) -{ - size_t start_offset = *typeformat_offset; - short reloff = offset - (*typeformat_offset + 2); - int in_attr, out_attr; - 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 == RPC_FC_RP) - flags |= 0x04; - - print_file(file, 2, "0x%x, 0x%x,\t\t/* %s", - pointer_type, - flags, - string_of_type(pointer_type)); - if (file) - { - if (flags & 0x04) - fprintf(file, " [allocated_on_stack]"); - if (flags & 0x10) - fprintf(file, " [pointer_deref]"); - fprintf(file, " */\n"); - } - - print_file(file, 2, "NdrFcShort(0x%x),\t/* %d */\n", reloff, offset); - *typeformat_offset += 4; - - 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 (is_base_type(t->type)) - { - print_file(file, 2, "NdrFcShort(0x80%02x),\t/* Simple arm type: %s */\n", - t->type, string_of_type(t->type)); - } - else if (t->typestring_offset) - { - short reloff = t->typestring_offset - *tfsoff; - print_file(file, 2, "NdrFcShort(0x%x),\t/* Offset= %d (%d) */\n", - reloff, reloff, t->typestring_offset); - } - else - error("write_branch_type: type unimplemented (0x%x)\n", t->type); - - *tfsoff += 2; -} - -static size_t write_union_tfs(FILE *file, type_t *type, unsigned int *tfsoff) -{ - unsigned int align = 0; - unsigned int start_offset; - size_t size = type_memsize(type, &align); - var_list_t *fields; - size_t nbranch = 0; - type_t *deftype = NULL; - short nodeftype = 0xffff; - var_t *f; - - guard_rec(type); - - if (type->type == RPC_FC_ENCAPSULATED_UNION) - { - const var_t *uv = LIST_ENTRY(list_tail(type->fields_or_args), const var_t, entry); - fields = uv->type->fields_or_args; - } - else - fields = type->fields_or_args; - - 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->type == RPC_FC_ENCAPSULATED_UNION) - { - const var_t *sv = LIST_ENTRY(list_head(type->fields_or_args), const var_t, entry); - const type_t *st = sv->type; - - switch (st->type) - { - case RPC_FC_CHAR: - case RPC_FC_SMALL: - case RPC_FC_USMALL: - case RPC_FC_SHORT: - case RPC_FC_USHORT: - case RPC_FC_LONG: - case RPC_FC_ULONG: - case RPC_FC_ENUM16: - case RPC_FC_ENUM32: - print_file(file, 2, "0x%x,\t/* %s */\n", type->type, string_of_type(type->type)); - print_file(file, 2, "0x%x,\t/* Switch type= %s */\n", - 0x40 | st->type, string_of_type(st->type)); - *tfsoff += 2; - break; - default: - error("union switch type must be an integer, char, or enum\n"); - } - } - print_file(file, 2, "NdrFcShort(0x%x),\t/* %d */\n", size, size); - print_file(file, 2, "NdrFcShort(0x%x),\t/* %d */\n", 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%x),\n", nodeftype); - *tfsoff += 2; - } - - return start_offset; -} - -static size_t write_ip_tfs(FILE *file, const attr_list_t *attrs, type_t *type, - unsigned int *typeformat_offset) -{ - size_t i; - size_t start_offset = *typeformat_offset; - expr_t *iid = get_attrp(attrs, ATTR_IIDIS); - - 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, NULL, 0, type, iid) + 2; - } - else - { - const type_t *base = is_ptr(type) ? type->ref : type; - const UUID *uuid = get_attrp(base->attrs, ATTR_UUID); - - if (! uuid) - error("%s: interface %s missing UUID\n", __FUNCTION__, base->name); - - update_tfsoff(type, start_offset, file); - print_start_tfs_comment(file, type, start_offset); - 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%08lx),\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 size_t write_contexthandle_tfs(FILE *file, const type_t *type, - const var_t *var, - unsigned int *typeformat_offset) -{ - size_t start_offset = *typeformat_offset; - unsigned char flags = 0; - - if (is_attr(current_iface->attrs, ATTR_STRICTCONTEXTHANDLE)) - flags |= NDR_STRICT_CONTEXT_HANDLE; - - if (is_ptr(type)) - flags |= 0x80; - if (is_attr(var->attrs, ATTR_IN)) - { - flags |= 0x40; - if (!is_attr(var->attrs, ATTR_OUT)) - flags |= NDR_CONTEXT_HANDLE_CANNOT_BE_NULL; - } - if (is_attr(var->attrs, ATTR_OUT)) - flags |= 0x20; - - WRITE_FCTYPE(file, FC_BIND_CONTEXT, *typeformat_offset); - 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_NO_SERIALIZE) - 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, "0, /* FIXME: rundown routine index*/\n"); - print_file(file, 2, "0, /* FIXME: param num */\n"); - *typeformat_offset += 4; - - return start_offset; -} - -static size_t write_typeformatstring_var(FILE *file, int indent, const func_t *func, - type_t *type, const var_t *var, - unsigned int *typeformat_offset) -{ - size_t offset; - - if (is_context_handle(type)) - return write_contexthandle_tfs(file, type, var, typeformat_offset); - - if (is_user_type(type)) - { - write_user_tfs(file, type, typeformat_offset); - return type->typestring_offset; - } - - if (is_string_type(var->attrs, type)) - return write_string_tfs(file, var->attrs, type, var->name, typeformat_offset); - - if (is_array(type)) - { - int ptr_type; - size_t off; - off = write_array_tfs(file, var->attrs, type, var->name, typeformat_offset); - ptr_type = get_attrv(var->attrs, ATTR_POINTERTYPE); - /* Top level pointers to conformant arrays may be handled specially - since we can bypass the pointer, but if the array is buried - beneath another pointer (e.g., "[size_is(,n)] int **p" then we - always need to write the pointer. */ - if (!ptr_type && var->type != type) - /* FIXME: This should use pointer_default, but the information - isn't kept around for arrays. */ - ptr_type = RPC_FC_UP; - if (ptr_type && ptr_type != RPC_FC_RP) - { - 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); - *typeformat_offset += 4; - } - return off; - } - - if (!is_ptr(type)) - { - /* basic types don't need a type format string */ - if (is_base_type(type->type)) - return 0; - - switch (type->type) - { - case RPC_FC_STRUCT: - case RPC_FC_PSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_FC_CVSTRUCT: - case RPC_FC_BOGUS_STRUCT: - return write_struct_tfs(file, type, var->name, typeformat_offset); - case RPC_FC_ENCAPSULATED_UNION: - case RPC_FC_NON_ENCAPSULATED_UNION: - return write_union_tfs(file, type, typeformat_offset); - case RPC_FC_IGNORE: - case RPC_FC_BIND_PRIMITIVE: - /* nothing to do */ - return 0; - default: - error("write_typeformatstring_var: Unsupported type 0x%x for variable %s\n", type->type, var->name); - } - } - else if (last_ptr(type)) - { - size_t start_offset = *typeformat_offset; - int in_attr = is_attr(var->attrs, ATTR_IN); - int out_attr = is_attr(var->attrs, ATTR_OUT); - const type_t *base = type->ref; - - if (base->type == RPC_FC_IP - || (base->type == 0 - && is_attr(var->attrs, ATTR_IIDIS))) - { - return write_ip_tfs(file, var->attrs, type, typeformat_offset); - } - - /* special case for pointers to base types */ - if (is_base_type(base->type)) - { - print_file(file, indent, "0x%x, 0x%x, /* %s %s[simple_pointer] */\n", - type->type, (!in_attr && out_attr) ? 0x0C : 0x08, - string_of_type(type->type), - (!in_attr && out_attr) ? "[allocated_on_stack] " : ""); - print_file(file, indent, "0x%02x, /* %s */\n", base->type, string_of_type(base->type)); - print_file(file, indent, "0x5c, /* FC_PAD */\n"); - *typeformat_offset += 4; - return start_offset; - } - } - - assert(is_ptr(type)); - - offset = write_typeformatstring_var(file, indent, func, type->ref, var, typeformat_offset); - if (file) - fprintf(file, "/* %2u */\n", *typeformat_offset); - return write_pointer_only_tfs(file, var->attrs, type->type, - !last_ptr(type) ? 0x10 : 0, - offset, typeformat_offset); -} - -static int write_embedded_types(FILE *file, const attr_list_t *attrs, type_t *type, - const char *name, int write_ptr, unsigned int *tfsoff) -{ - int retmask = 0; - - if (is_user_type(type)) - { - write_user_tfs(file, type, tfsoff); - } - else if (is_string_type(attrs, type)) - { - write_string_tfs(file, attrs, type, name, tfsoff); - } - else if (is_ptr(type)) - { - type_t *ref = type->ref; - - if (ref->type == RPC_FC_IP - || (ref->type == 0 - && is_attr(attrs, ATTR_IIDIS))) - { - write_ip_tfs(file, attrs, type, tfsoff); - } - else - { - if (!processed(ref) && !is_base_type(ref->type)) - retmask |= write_embedded_types(file, NULL, ref, name, TRUE, tfsoff); - - if (write_ptr) - write_pointer_tfs(file, type, tfsoff); - - retmask |= 1; - } - } - else if (type->declarray && is_conformant_array(type)) - ; /* conformant arrays and strings are handled specially */ - else if (is_array(type)) - { - write_array_tfs(file, attrs, type, name, tfsoff); - if (is_conformant_array(type)) - retmask |= 1; - } - else if (is_struct(type->type)) - { - if (!processed(type)) - write_struct_tfs(file, type, name, tfsoff); - } - else if (is_union(type->type)) - { - if (!processed(type)) - write_union_tfs(file, type, tfsoff); - } - else if (!is_base_type(type->type)) - error("write_embedded_types: unknown embedded type for %s (0x%x)\n", - name, type->type); - - return retmask; -} - -static size_t process_tfs(FILE *file, const ifref_list_t *ifaces, type_pred_t pred) -{ - const var_t *var; - const ifref_t *iface; - unsigned int typeformat_offset = 2; - - if (ifaces) LIST_FOR_EACH_ENTRY( iface, ifaces, const ifref_t, entry ) - { - if (!pred(iface->iface)) - continue; - - if (iface->iface->funcs) - { - const func_t *func; - current_iface = iface; - LIST_FOR_EACH_ENTRY( func, iface->iface->funcs, const func_t, entry ) - { - if (is_local(func->def->attrs)) continue; - - if (!is_void(get_func_return_type(func))) - { - var_t v = *func->def; - v.type = get_func_return_type(func); - update_tfsoff(get_func_return_type(func), - write_typeformatstring_var( - file, 2, NULL, get_func_return_type(func), - &v, &typeformat_offset), - file); - } - - current_func = func; - if (func->args) - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - update_tfsoff( - var->type, - write_typeformatstring_var( - file, 2, func, var->type, var, - &typeformat_offset), - file); - } - } - } - - return typeformat_offset + 1; -} - - -void write_typeformatstring(FILE *file, const ifref_list_t *ifaces, 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, ifaces, 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, unsigned int *alignment) -{ - *alignment = 0; - if (is_user_type(type)) - { - const char *uname; - const type_t *utype = get_user_type(type, &uname); - return get_required_buffer_size_type(utype, uname, alignment); - } - else - { - switch (type->type) - { - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_USMALL: - case RPC_FC_SMALL: - *alignment = 4; - return 1; - - case RPC_FC_WCHAR: - case RPC_FC_USHORT: - case RPC_FC_SHORT: - case RPC_FC_ENUM16: - *alignment = 4; - return 2; - - case RPC_FC_ULONG: - case RPC_FC_LONG: - case RPC_FC_ENUM32: - case RPC_FC_FLOAT: - case RPC_FC_ERROR_STATUS_T: - *alignment = 4; - return 4; - - case RPC_FC_HYPER: - case RPC_FC_DOUBLE: - *alignment = 8; - return 8; - - case RPC_FC_IGNORE: - case RPC_FC_BIND_PRIMITIVE: - return 0; - - case RPC_FC_STRUCT: - case RPC_FC_PSTRUCT: - { - size_t size = 0; - const var_t *field; - if (!type->fields_or_args) return 0; - LIST_FOR_EACH_ENTRY( field, type->fields_or_args, const var_t, entry ) - { - unsigned int alignment; - size += get_required_buffer_size_type(field->type, field->name, - &alignment); - } - return size; - } - - case RPC_FC_RP: - return - is_base_type( type->ref->type ) || type->ref->type == RPC_FC_STRUCT - ? get_required_buffer_size_type( type->ref, name, alignment ) - : 0; - - case RPC_FC_SMFARRAY: - case RPC_FC_LGFARRAY: - return type->dim * get_required_buffer_size_type(type->ref, name, alignment); - - default: - 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); - const type_t *t; - - if (!in_attr && !out_attr) - in_attr = 1; - - *alignment = 0; - - for (t = var->type; is_ptr(t); t = t->ref) - if (is_attr(t->attrs, ATTR_CONTEXTHANDLE)) - { - *alignment = 4; - return 20; - } - - if (pass == PASS_OUT) - { - if (out_attr && is_ptr(var->type)) - { - type_t *type = var->type; - - if (type->type == RPC_FC_STRUCT) - { - const var_t *field; - unsigned int size = 36; - - if (!type->fields_or_args) return size; - LIST_FOR_EACH_ENTRY( field, type->fields_or_args, const var_t, entry ) - { - unsigned int align; - size += get_required_buffer_size_type( - field->type, field->name, &align); - } - return size; - } - } - return 0; - } - else - { - if ((!out_attr || in_attr) && !var->type->size_is - && !is_attr(var->attrs, ATTR_STRING) && !var->type->declarray) - { - if (is_ptr(var->type)) - { - type_t *type = var->type; - - if (is_base_type(type->type)) - { - return 25; - } - else if (type->type == RPC_FC_STRUCT) - { - unsigned int size = 36; - const var_t *field; - - if (!type->fields_or_args) return size; - LIST_FOR_EACH_ENTRY( field, type->fields_or_args, const var_t, entry ) - { - unsigned int align; - size += get_required_buffer_size_type( - field->type, field->name, &align); - } - return size; - } - } - } - - return get_required_buffer_size_type(var->type, var->name, alignment); - } -} - -static unsigned int get_function_buffer_size( const func_t *func, enum pass pass ) -{ - const var_t *var; - unsigned int total_size = 0, alignment; - - if (func->args) - { - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - { - total_size += get_required_buffer_size(var, &alignment, pass); - total_size += alignment; - } - } - - if (pass == PASS_OUT && !is_void(get_func_return_type(func))) - { - var_t v = *func->def; - v.type = get_func_return_type(func); - 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, - 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, "&_StubMsg,\n"); - print_file(file, indent, "%s%s%s%s,\n", - (phase == PHASE_UNMARSHAL) ? "(unsigned char **)" : "(unsigned char *)", - (phase == PHASE_UNMARSHAL || decl_indirect(var->type)) ? "&" : "", - (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, enum remoting_phase phase, - enum pass pass, const var_t *var, - const char *varname) -{ - type_t *type = var->type; - unsigned int size; - unsigned int alignment = 0; - unsigned char rtype; - - /* no work to do for other phases, buffer sizing is done elsewhere */ - if (phase != PHASE_MARSHAL && phase != PHASE_UNMARSHAL) - return; - - rtype = is_ptr(type) ? type->ref->type : type->type; - - switch (rtype) - { - case RPC_FC_BYTE: - case RPC_FC_CHAR: - case RPC_FC_SMALL: - case RPC_FC_USMALL: - size = 1; - alignment = 1; - break; - - case RPC_FC_WCHAR: - case RPC_FC_USHORT: - case RPC_FC_SHORT: - case RPC_FC_ENUM16: - size = 2; - alignment = 2; - break; - - case RPC_FC_ULONG: - case RPC_FC_LONG: - case RPC_FC_ENUM32: - case RPC_FC_FLOAT: - case RPC_FC_ERROR_STATUS_T: - size = 4; - alignment = 4; - break; - - case RPC_FC_HYPER: - case RPC_FC_DOUBLE: - size = 8; - alignment = 8; - break; - - case RPC_FC_IGNORE: - case RPC_FC_BIND_PRIMITIVE: - /* no marshalling needed */ - return; - - default: - error("print_phase_basetype: Unsupported type: %s (0x%02x, ptr_level: 0)\n", var->name, rtype); - size = 0; - } - - if (phase == PHASE_MARSHAL) - print_file(file, indent, "MIDL_memset(_StubMsg.Buffer, 0, (0x%x - (long)_StubMsg.Buffer) & 0x%x);\n", alignment, alignment - 1); - print_file(file, indent, "_StubMsg.Buffer = (unsigned char *)(((long)_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->ref : type, NULL); - if (is_ptr(type)) - fprintf(file, " *)_StubMsg.Buffer = *"); - else - fprintf(file, " *)_StubMsg.Buffer = "); - fprintf(file, "%s", varname); - fprintf(file, ";\n"); - } - else if (phase == PHASE_UNMARSHAL) - { - print_file(file, indent, "if (_StubMsg.Buffer + sizeof("); - write_type_decl(file, is_ptr(type) ? type->ref : type, NULL); - fprintf(file, ") > _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"); - if (pass == PASS_IN || pass == PASS_RETURN) - print_file(file, indent, ""); - else - print_file(file, indent, "*"); - fprintf(file, "%s", varname); - if (pass == PASS_IN && is_ptr(type)) - fprintf(file, " = ("); - else - fprintf(file, " = *("); - write_type_decl(file, is_ptr(type) ? type->ref : type, NULL); - fprintf(file, " *)_StubMsg.Buffer;\n"); - } - - print_file(file, indent, "_StubMsg.Buffer += sizeof("); - write_type_decl(file, var->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_size_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_ptr(t) || is_array(t); t = t->ref) - if (t->size_is) - { - if (!x) - x = t->size_is; - else - error("%s: multidimensional conformant" - " arrays not supported at the top level\n", - name); - } - - return x; -} - -static void write_remoting_arg(FILE *file, int indent, const func_t *func, - enum pass pass, enum remoting_phase phase, - const var_t *var) -{ - int in_attr, out_attr, pointer_type; - const type_t *type = var->type; - unsigned char rtype; - size_t start_offset = type->typestring_offset; - - pointer_type = get_attrv(var->attrs, ATTR_POINTERTYPE); - if (!pointer_type) - pointer_type = RPC_FC_RP; - - 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; - } - - rtype = type->type; - - if (is_context_handle(type)) - { - 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 */ - int is_ch_ptr = is_aliaschain_attr(type, ATTR_CONTEXTHANDLE) ? FALSE : TRUE; - print_file(file, indent, "NdrClientContextMarshall(\n"); - print_file(file, indent + 1, "&_StubMsg,\n"); - print_file(file, indent + 1, "(NDR_CCONTEXT)%s%s,\n", is_ch_ptr ? "*" : "", 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, "&_StubMsg,\n"); - print_file(file, indent + 1, "(NDR_SCONTEXT)%s,\n", 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 = 0;\n", var->name); - print_file(file, indent, "NdrClientContextUnmarshall(\n"); - print_file(file, indent + 1, "&_StubMsg,\n"); - print_file(file, indent + 1, "(NDR_CCONTEXT *)%s,\n", var->name); - print_file(file, indent + 1, "_Handle);\n"); - } - else - { - print_file(file, indent, "%s = NdrServerContextNewUnmarshall(\n", var->name); - print_file(file, indent + 1, "&_StubMsg,\n"); - print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n", start_offset); - } - } - } - else if (is_user_type(var->type)) - { - print_phase_function(file, indent, "UserMarshal", phase, var, start_offset); - } - else if (is_string_type(var->attrs, var->type)) - { - if (is_array(type) && !is_conformant_array(type)) - print_phase_function(file, indent, "NonConformantString", phase, var, start_offset); - else - { - if (type->size_is && is_size_needed_for_phase(phase)) - { - print_file(file, indent, "_StubMsg.MaxCount = (unsigned long)"); - write_expr(file, type->size_is, 1); - fprintf(file, ";\n"); - } - - if (phase == PHASE_FREE || pass == PASS_RETURN || pointer_type == RPC_FC_UP) - print_phase_function(file, indent, "Pointer", phase, var, - start_offset - (type->size_is ? 4 : 2)); - else - print_phase_function(file, indent, "ConformantString", phase, var, - start_offset); - } - } - else if (is_array(type)) - { - unsigned char tc = type->type; - const char *array_type = "FixedArray"; - - /* 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); - - if (tc == RPC_FC_SMVARRAY || tc == RPC_FC_LGVARRAY) - { - if (is_size_needed_for_phase(phase)) - { - print_file(file, indent, "_StubMsg.Offset = (unsigned long)0;\n"); /* FIXME */ - print_file(file, indent, "_StubMsg.ActualCount = (unsigned long)"); - write_expr(file, type->length_is, 1); - fprintf(file, ";\n\n"); - } - array_type = "VaryingArray"; - } - else if (tc == RPC_FC_CARRAY) - { - if (is_size_needed_for_phase(phase)) - { - print_file(file, indent, "_StubMsg.MaxCount = (unsigned long)"); - write_expr(file, type->size_is, 1); - fprintf(file, ";\n\n"); - } - array_type = "ConformantArray"; - } - else if (tc == RPC_FC_CVARRAY || tc == RPC_FC_BOGUS_ARRAY) - { - if (is_size_needed_for_phase(phase)) - { - if (type->size_is) - { - print_file(file, indent, "_StubMsg.MaxCount = (unsigned long)"); - write_expr(file, type->size_is, 1); - fprintf(file, ";\n"); - } - if (type->length_is) - { - print_file(file, indent, "_StubMsg.Offset = (unsigned long)0;\n"); /* FIXME */ - print_file(file, indent, "_StubMsg.ActualCount = (unsigned long)"); - write_expr(file, type->length_is, 1); - fprintf(file, ";\n\n"); - } - } - array_type = (tc == RPC_FC_BOGUS_ARRAY - ? "ComplexArray" - : "ConformantVaryingArray"); - } - - if (pointer_type != RPC_FC_RP) array_type = "Pointer"; - print_phase_function(file, indent, array_type, phase, var, start_offset); - if (phase == PHASE_FREE && pointer_type == RPC_FC_RP) - { - /* these are all unmarshalled by allocating memory */ - if (type->type == RPC_FC_BOGUS_ARRAY || - type->type == RPC_FC_CVARRAY || - ((type->type == RPC_FC_SMVARRAY || type->type == RPC_FC_LGVARRAY) && in_attr) || - (type->type == RPC_FC_CARRAY && !in_attr)) - { - print_file(file, indent, "if (%s)\n", var->name); - indent++; - print_file(file, indent, "_StubMsg.pfnFree(%s);\n", var->name); - } - } - } - else if (!is_ptr(var->type) && is_base_type(rtype)) - { - if (phase != PHASE_FREE) - print_phase_basetype(file, indent, phase, pass, var, var->name); - } - else if (!is_ptr(var->type)) - { - switch (rtype) - { - case RPC_FC_STRUCT: - case RPC_FC_PSTRUCT: - print_phase_function(file, indent, "SimpleStruct", phase, var, start_offset); - break; - case RPC_FC_CSTRUCT: - case RPC_FC_CPSTRUCT: - print_phase_function(file, indent, "ConformantStruct", phase, var, start_offset); - break; - case RPC_FC_CVSTRUCT: - print_phase_function(file, indent, "ConformantVaryingStruct", phase, var, start_offset); - break; - case RPC_FC_BOGUS_STRUCT: - print_phase_function(file, indent, "ComplexStruct", phase, var, start_offset); - break; - case RPC_FC_RP: - if (is_base_type( var->type->ref->type )) - { - print_phase_basetype(file, indent, phase, pass, var, var->name); - } - else if (var->type->ref->type == RPC_FC_STRUCT) - { - if (phase != PHASE_BUFFERSIZE && phase != PHASE_FREE) - print_phase_function(file, indent, "SimpleStruct", phase, var, start_offset + 4); - } - else - { - expr_t *iid; - if ((iid = get_attrp( var->attrs, ATTR_IIDIS ))) - { - print_file( file, indent, "_StubMsg.MaxCount = (unsigned long) " ); - write_expr( file, iid, 1 ); - fprintf( file, ";\n\n" ); - } - print_phase_function(file, indent, "Pointer", phase, var, start_offset); - } - break; - default: - error("write_remoting_arguments: Unsupported type: %s (0x%02x)\n", var->name, rtype); - } - } - else - { - if (last_ptr(var->type) && (pointer_type == RPC_FC_RP) && is_base_type(rtype)) - { - if (phase != PHASE_FREE) - print_phase_basetype(file, indent, phase, pass, var, var->name); - } - else if (last_ptr(var->type) && (pointer_type == RPC_FC_RP) && (rtype == RPC_FC_STRUCT)) - { - if (phase != PHASE_BUFFERSIZE && phase != PHASE_FREE) - print_phase_function(file, indent, "SimpleStruct", phase, var, start_offset + 4); - } - else - { - expr_t *iid; - expr_t *sx = get_size_is_expr(type, var->name); - - if ((iid = get_attrp( var->attrs, ATTR_IIDIS ))) - { - print_file( file, indent, "_StubMsg.MaxCount = (unsigned long) " ); - write_expr( file, iid, 1 ); - fprintf( file, ";\n\n" ); - } - else if (sx) - { - print_file(file, indent, "_StubMsg.MaxCount = (unsigned long) "); - write_expr(file, sx, 1); - fprintf(file, ";\n\n"); - } - if (var->type->ref->type == RPC_FC_IP) - print_phase_function(file, indent, "InterfacePointer", phase, var, start_offset); - else - print_phase_function(file, indent, "Pointer", phase, var, start_offset); - } - } - fprintf(file, "\n"); -} - -void write_remoting_arguments(FILE *file, int indent, const func_t *func, - 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, "_StubMsg.BufferLength = %u;\n", size); - } - - if (pass == PASS_RETURN) - { - var_t var; - var = *func->def; - var.type = get_func_return_type(func); - var.name = xstrdup( "_RetVal" ); - write_remoting_arg( file, indent, func, pass, phase, &var ); - free( var.name ); - } - else - { - const var_t *var; - if (!func->args) - return; - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - write_remoting_arg( file, indent, func, pass, phase, var ); - } -} - - -size_t get_size_procformatstring_type(const char *name, const type_t *type, const attr_list_t *attrs) -{ - return write_procformatstring_type(NULL, 0, name, type, attrs, FALSE); -} - - -size_t get_size_procformatstring_func(const func_t *func) -{ - const var_t *var; - size_t size = 0; - - /* argument list size */ - if (func->args) - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - size += get_size_procformatstring_type(var->name, var->type, var->attrs); - - /* return value size */ - if (is_void(get_func_return_type(func))) - size += 2; /* FC_END and FC_PAD */ - else - size += get_size_procformatstring_type("return value", get_func_return_type(func), NULL); - - return size; -} - -size_t get_size_procformatstring(const ifref_list_t *ifaces, type_pred_t pred) -{ - const ifref_t *iface; - size_t size = 1; - const func_t *func; - - if (ifaces) LIST_FOR_EACH_ENTRY( iface, ifaces, const ifref_t, entry ) - { - if (!pred(iface->iface)) - continue; - - if (iface->iface->funcs) - LIST_FOR_EACH_ENTRY( func, iface->iface->funcs, const func_t, entry ) - if (!is_local(func->def->attrs)) - size += get_size_procformatstring_func( func ); - } - return size; -} - -size_t get_size_typeformatstring(const ifref_list_t *ifaces, type_pred_t pred) -{ - set_all_tfswrite(FALSE); - return process_tfs(NULL, ifaces, pred); -} - -static void write_struct_expr(FILE *h, const expr_t *e, int brackets, - const var_list_t *fields, const char *structvar) -{ - switch (e->type) { - case EXPR_VOID: - break; - case EXPR_NUM: - fprintf(h, "%lu", e->u.lval); - break; - case EXPR_HEXNUM: - fprintf(h, "0x%lx", 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: - { - const var_t *field; - LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry ) - if (!strcmp(e->u.sval, field->name)) - { - fprintf(h, "%s->%s", structvar, e->u.sval); - break; - } - - if (&field->entry == fields) error("no field found for identifier %s\n", e->u.sval); - break; - } - case EXPR_NEG: - fprintf(h, "-"); - write_struct_expr(h, e->ref, 1, fields, structvar); - break; - case EXPR_NOT: - fprintf(h, "~"); - write_struct_expr(h, e->ref, 1, fields, structvar); - break; - case EXPR_PPTR: - fprintf(h, "*"); - write_struct_expr(h, e->ref, 1, fields, structvar); - break; - case EXPR_CAST: - fprintf(h, "("); - write_type_decl(h, e->u.tref, NULL); - fprintf(h, ")"); - write_struct_expr(h, e->ref, 1, fields, structvar); - 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_MUL: - case EXPR_DIV: - case EXPR_ADD: - case EXPR_SUB: - case EXPR_AND: - case EXPR_OR: - if (brackets) fprintf(h, "("); - write_struct_expr(h, e->ref, 1, fields, structvar); - switch (e->type) { - case EXPR_SHL: fprintf(h, " << "); break; - case EXPR_SHR: 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; - default: break; - } - write_struct_expr(h, e->u.ext, 1, fields, structvar); - if (brackets) fprintf(h, ")"); - break; - case EXPR_COND: - if (brackets) fprintf(h, "("); - write_struct_expr(h, e->ref, 1, fields, structvar); - fprintf(h, " ? "); - write_struct_expr(h, e->u.ext, 1, fields, structvar); - fprintf(h, " : "); - write_struct_expr(h, e->ext2, 1, fields, structvar); - if (brackets) fprintf(h, ")"); - break; - case EXPR_ADDRESSOF: - fprintf(h, "&"); - write_struct_expr(h, e->ref, 1, fields, structvar); - break; - } -} - - -void declare_stub_args( FILE *file, int indent, const func_t *func ) -{ - int in_attr, out_attr; - int i = 0; - const var_t *var; - - /* declare return value '_RetVal' */ - if (!is_void(get_func_return_type(func))) - { - print_file(file, indent, ""); - write_type_decl_left(file, get_func_return_type(func)); - fprintf(file, " _RetVal;\n"); - } - - if (!func->args) - return; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - { - int is_string = is_attr(var->attrs, ATTR_STRING); - - 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 && !var->type->size_is && !is_string) - { - print_file(file, indent, ""); - write_type_decl(file, var->type->declarray ? var->type : var->type->ref, - "_W%u", i++); - fprintf(file, ";\n"); - } - - print_file(file, indent, ""); - write_type_decl_left(file, var->type); - fprintf(file, " "); - if (var->type->declarray) { - fprintf(file, "( *"); - write_name(file, var); - fprintf(file, " )"); - } else - write_name(file, var); - write_type_right(file, var->type, FALSE); - fprintf(file, ";\n"); - - if (decl_indirect(var->type)) - print_file(file, indent, "void *_p_%s = &%s;\n", - var->name, var->name); - } - } -} - - -void assign_stub_out_args( FILE *file, int indent, const func_t *func ) -{ - int in_attr, out_attr; - int i = 0, sep = 0; - const var_t *var; - - if (!func->args) - return; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - { - int is_string = is_attr(var->attrs, ATTR_STRING); - 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, ""); - write_name(file, var); - - if (is_context_handle(var->type)) - { - fprintf(file, " = NdrContextHandleInitialize(\n"); - print_file(file, indent + 1, "&_StubMsg,\n"); - print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n", - var->type->typestring_offset); - } - else if (var->type->size_is) - { - unsigned int size, align = 0; - type_t *type = var->type; - - fprintf(file, " = NdrAllocate(&_StubMsg, "); - for ( ; type->size_is ; type = type->ref) - { - write_expr(file, type->size_is, TRUE); - fprintf(file, " * "); - } - size = type_memsize(type, &align); - fprintf(file, "%u);\n", size); - } - else if (!is_string) - { - fprintf(file, " = &_W%u;\n", i); - if (is_ptr(var->type) && !last_ptr(var->type)) - print_file(file, indent, "_W%u = 0;\n", i); - i++; - } - - sep = 1; - } - } - if (sep) - fprintf(file, "\n"); -} - - -int write_expr_eval_routines(FILE *file, const char *iface) -{ - static const char *var_name = "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->structure->name; - const var_list_t *fields = eval->structure->fields_or_args; - result = 1; - - print_file(file, 0, "static void __RPC_USER %s_%sExprEval_%04u(PMIDL_STUB_MESSAGE pStubMsg)\n", - iface, name, callback_offset); - print_file(file, 0, "{\n"); - print_file (file, 1, "%s *%s = (%s *)(pStubMsg->StackTop - %u);\n", - name, var_name, name, eval->baseoff); - print_file(file, 1, "pStubMsg->Offset = 0;\n"); /* FIXME */ - print_file(file, 1, "pStubMsg->MaxCount = (unsigned long)"); - write_struct_expr(file, eval->expr, 1, fields, var_name); - 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) - { - const char *name = eval->structure->name; - print_file(file, 1, "%s_%sExprEval_%04u,\n", iface, name, callback_offset); - callback_offset++; - list_remove(&eval->entry); - 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 * %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); -} diff --git a/reactos/tools/widl/typegen.h b/reactos/tools/widl/typegen.h deleted file mode 100644 index 7745454442e..00000000000 --- a/reactos/tools/widl/typegen.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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 -}; - -typedef int (*type_pred_t)(const type_t *); - -void write_formatstringsdecl(FILE *f, int indent, ifref_list_t *ifaces, type_pred_t pred); -void write_procformatstring(FILE *file, const ifref_list_t *ifaces, type_pred_t pred); -void write_typeformatstring(FILE *file, const ifref_list_t *ifaces, type_pred_t pred); -void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase, enum pass pass, const var_t *var, const char *varname); -void write_remoting_arguments(FILE *file, int indent, const func_t *func, enum pass pass, enum remoting_phase phase); -size_t get_size_procformatstring_type(const char *name, const type_t *type, const attr_list_t *attrs); -size_t get_size_procformatstring_func(const func_t *func); -size_t get_size_procformatstring(const ifref_list_t *ifaces, type_pred_t pred); -size_t get_size_typeformatstring(const ifref_list_t *ifaces, type_pred_t pred); -void assign_stub_out_args( FILE *file, int indent, const func_t *func ); -void declare_stub_args( FILE *file, int indent, const func_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 ); -size_t type_memsize(const type_t *t, unsigned int *align); -int decl_indirect(const type_t *t); -void write_parameters_init(FILE *file, int indent, const func_t *func); -void print(FILE *file, int indent, const char *format, va_list ap); -int get_padding(const var_list_t *fields); -int is_user_type(const type_t *t); -expr_t *get_size_is_expr(const type_t *t, const char *name); -int is_full_pointer_function(const func_t *func); -void write_full_pointer_init(FILE *file, int indent, const func_t *func, int is_server); -void write_full_pointer_free(FILE *file, int indent, const func_t *func); diff --git a/reactos/tools/widl/typelib.c b/reactos/tools/widl/typelib.c deleted file mode 100644 index 43d16ec2760..00000000000 --- a/reactos/tools/widl/typelib.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * 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 - -#define NONAMELESSUNION -#define NONAMELESSSTRUCT - -#include - -#include "widl.h" -#include "utils.h" -#include "parser.h" -#include "header.h" -#include "typelib.h" -#include "widltypes.h" -#include "typelib_struct.h" - -int in_typelib = 0; - -static typelib_t *typelib; - -type_t *duptype(type_t *t, int dupname) -{ - type_t *d = alloc_type(); - - *d = *t; - if (dupname && t->name) - d->name = xstrdup(t->name); - - d->orig = t; - return d; -} - -type_t *alias(type_t *t, const char *name) -{ - type_t *a = duptype(t, 0); - - a->name = xstrdup(name); - a->kind = TKIND_ALIAS; - a->attrs = NULL; - a->declarray = FALSE; - - return a; -} - -int is_ptr(const type_t *t) -{ - unsigned char c = t->type; - return c == RPC_FC_RP - || c == RPC_FC_UP - || c == RPC_FC_FP - || c == RPC_FC_OP; -} - -int is_array(const type_t *t) -{ - switch (t->type) - { - case RPC_FC_SMFARRAY: - case RPC_FC_LGFARRAY: - case RPC_FC_SMVARRAY: - case RPC_FC_LGVARRAY: - case RPC_FC_CARRAY: - case RPC_FC_CVARRAY: - case RPC_FC_BOGUS_ARRAY: - return TRUE; - default: - return FALSE; - } -} - -/* List of oleauto types that should be recognized by name. - * (most of) these seem to be intrinsic types in mktyplib. */ - -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)) - switch (t->ref->type) - { - case RPC_FC_CHAR: return VT_LPSTR; - case RPC_FC_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 (t->kind == TKIND_ALIAS && t->attrs) - return VT_USERDEFINED; - - switch (t->type) { - case RPC_FC_BYTE: - case RPC_FC_USMALL: - return VT_UI1; - case RPC_FC_CHAR: - case RPC_FC_SMALL: - return VT_I1; - case RPC_FC_WCHAR: - return VT_I2; /* mktyplib seems to parse wchar_t as short */ - case RPC_FC_SHORT: - return VT_I2; - case RPC_FC_USHORT: - return VT_UI2; - case RPC_FC_LONG: - if (match(t->name, "int")) return VT_INT; - return VT_I4; - case RPC_FC_ULONG: - if (match(t->name, "int")) return VT_UINT; - return VT_UI4; - case RPC_FC_HYPER: - if (t->sign < 0) return VT_UI8; - if (match(t->name, "MIDL_uhyper")) return VT_UI8; - return VT_I8; - case RPC_FC_FLOAT: - return VT_R4; - case RPC_FC_DOUBLE: - return VT_R8; - case RPC_FC_RP: - case RPC_FC_UP: - case RPC_FC_OP: - case RPC_FC_FP: - case RPC_FC_CARRAY: - case RPC_FC_CVARRAY: - if(t->ref) - { - if (match(t->ref->name, "SAFEARRAY")) - return VT_SAFEARRAY; - return VT_PTR; - } - - error("get_type_vt: unknown-deref-type: %d\n", t->ref->type); - break; - case RPC_FC_IP: - if(match(t->name, "IUnknown")) - return VT_UNKNOWN; - if(match(t->name, "IDispatch")) - return VT_DISPATCH; - return VT_USERDEFINED; - - case RPC_FC_ENUM16: - case RPC_FC_STRUCT: - case RPC_FC_PSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_FC_CVSTRUCT: - case RPC_FC_BOGUS_STRUCT: - return VT_USERDEFINED; - case 0: - return t->kind == TKIND_PRIMITIVE ? VT_VOID : VT_USERDEFINED; - default: - error("get_type_vt: unknown type: 0x%02x\n", t->type); - } - return 0; -} - -void start_typelib(char *name, attr_list_t *attrs) -{ - in_typelib++; - if (!do_typelib) return; - - typelib = xmalloc(sizeof(*typelib)); - typelib->name = xstrdup(name); - typelib->filename = xstrdup(typelib_name); - typelib->attrs = attrs; - list_init( &typelib->entries ); - list_init( &typelib->importlibs ); - - if (is_attr(attrs, ATTR_POINTERDEFAULT)) - pointer_default = get_attrv(attrs, ATTR_POINTERDEFAULT); -} - -void end_typelib(void) -{ - in_typelib--; - if (!typelib) return; - - create_msft_typelib(typelib); - pointer_default = RPC_FC_UP; - return; -} - -void add_typelib_entry(type_t *t) -{ - typelib_entry_t *entry; - if (!typelib) return; - - chat("add kind %i: %s\n", t->kind, t->name); - entry = xmalloc(sizeof(*entry)); - entry->type = t; - list_add_tail( &typelib->entries, &entry->entry ); -} - -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 void read_importlib(importlib_t *importlib) -{ - int fd; - INT magic; - char *file_name; - - file_name = wpp_find_include(importlib->name, NULL); - if(file_name) { - fd = open(file_name, O_RDONLY | O_BINARY); - free(file_name); - }else { - fd = open(importlib->name, O_RDONLY | O_BINARY); - } - - if(fd < 0) - error("Could not open 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 ); -} diff --git a/reactos/tools/widl/typelib.h b/reactos/tools/widl/typelib.h deleted file mode 100644 index b17387dfc39..00000000000 --- a/reactos/tools/widl/typelib.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 int in_typelib; -extern void start_typelib(char *name, attr_list_t *attrs); -extern void end_typelib(void); -extern void add_typelib_entry(type_t *t); -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_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_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 diff --git a/reactos/tools/widl/typelib_struct.h b/reactos/tools/widl/typelib_struct.h deleted file mode 100644 index 01c2c642a81..00000000000 --- a/reactos/tools/widl/typelib_struct.h +++ /dev/null @@ -1,605 +0,0 @@ -/* - * 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 pLibtab; /* always exists, always same size (0x80) */ - /* hash table w offsets to guid????? */ -/*6*/MSFT_pSeg pGuidTab; /* all guids are stored here together with */ - /* offset in some table???? */ -/*7*/MSFT_pSeg res07; /* always created, always same size (0x200) */ - /* purpose largely unknown */ -/*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 oDefautlValue[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 - -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 - -/*---------------------------END--------------------------------------------*/ -#endif diff --git a/reactos/tools/widl/utils.c b/reactos/tools/widl/utils.c deleted file mode 100644 index ed950f6095d..00000000000 --- a/reactos/tools/widl/utils.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * 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" - -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 char *s, const char *t, const char *n, va_list ap) -{ - fprintf(stderr, "%s:%d: %s: ", input_name ? input_name : "stdin", line_number, t); - vfprintf(stderr, s, ap); - - if (want_near_indication) - { - char *cpy; - if(n) - { - cpy = xstrdup(n); - make_print(cpy); - fprintf(stderr, " near '%s'", cpy); - free(cpy); - } - } -} - - -/* yyerror: yacc assumes this is not newline terminated. */ -int parser_error(const char *s, ...) -{ - va_list ap; - va_start(ap, s); - generic_msg(s, "Error", parser_text, ap); - fprintf(stderr, "\n"); - va_end(ap); - exit(1); - return 1; -} - -void error_loc(const char *s, ...) -{ - va_list ap; - va_start(ap, s); - generic_msg(s, "Error", parser_text, ap); - va_end(ap); - exit(1); -} - -int parser_warning(const char *s, ...) -{ - va_list ap; - va_start(ap, s); - generic_msg(s, "Warning", parser_text, 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 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); - - /* +4 for later extension and +1 for '\0' */ - base = xmalloc(namelen +4 +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); -} diff --git a/reactos/tools/widl/utils.h b/reactos/tools/widl/utils.h deleted file mode 100644 index 7d6ce5c5f30..00000000000 --- a/reactos/tools/widl/utils.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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); - -#ifndef __GNUC__ -#define __attribute__(X) -#endif - -int parser_error(const char *s, ...) __attribute__((format (printf, 1, 2))); -int parser_warning(const char *s, ...) __attribute__((format (printf, 1, 2))); -void error_loc(const char *s, ...) __attribute__((format (printf, 1, 2))); -void error(const char *s, ...) __attribute__((format (printf, 1, 2))); -void warning(const char *s, ...) __attribute__((format (printf, 1, 2))); -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); - -/* 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) - -#endif diff --git a/reactos/tools/widl/widl.c b/reactos/tools/widl/widl.c deleted file mode 100644 index 73885c736e2..00000000000 --- a/reactos/tools/widl/widl.c +++ /dev/null @@ -1,657 +0,0 @@ -/* - * 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 -#endif - -#include "widl.h" -#include "utils.h" -#include "parser.h" -#include "wine/wpp.h" -#include "header.h" - -/* future options to reserve characters for: */ -/* a = alignment of structures */ -/* A = ACF input filename */ -/* J = do not search standard include path */ -/* O = generate interpreted stubs */ -/* w = select win16/win32 output (?) */ - -static const char usage[] = -"Usage: widl [options...] infile.idl\n" -" or: widl [options...] --dlldata-only name1 [name2...]\n" -" -c Generate client stub\n" -" -C file Name of client stub file (default is infile_c.c)\n" -" -d n Set debug level to 'n'\n" -" -D id[=val] Define preprocessor identifier id=val\n" -" --dlldata=file Name of the dlldata file (default is dlldata.c)\n" -" -E Preprocess only\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" -" -N Do not preprocess input\n" -" --oldnames Use old naming conventions\n" -" -p Generate proxy\n" -" -P file Name of proxy file (default is infile_p.c)\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" -" -s Generate server stub\n" -" -S file Name of server stub file (default is infile_s.c)\n" -" -t Generate typelib\n" -" -T file Name of typelib file (default is infile.tlb)\n" -" -u Generate interface identifiers file\n" -" -U file Name of interface identifiers file (default is infile_i.c)\n" -" -V Print version and exit\n" -" -W Enable pedantic warnings\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 win32 = 1; -int debuglevel = DEBUGLEVEL_NONE; -int parser_debug, yy_flex_debug; - -int pedantic = 0; -int do_everything = 1; -int preprocess_only = 0; -int do_header = 0; -int do_typelib = 0; -int do_proxies = 0; -int do_client = 0; -int do_server = 0; -int do_idfile = 0; -int do_dlldata = 0; -int no_preprocess = 0; -int old_names = 0; - -char *input_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 *idfile_name; -char *idfile_token; -char *temp_name; -const char *prefix_client = ""; -const char *prefix_server = ""; - -int line_number = 1; - -FILE *header; -FILE *local_stubs; -FILE *proxy; -FILE *idfile; - -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 -}; - -static const char short_options[] = - "cC:d:D:EhH:I:NpP:sS:tT:uU:VW"; -static const struct option long_options[] = { - { "dlldata", 1, 0, DLLDATA_OPTION }, - { "dlldata-only", 0, 0, DLLDATA_ONLY_OPTION }, - { "local-stubs", 1, 0, LOCAL_STUBS_OPTION }, - { "oldnames", 0, 0, OLDNAMES_OPTION }, - { "prefix-all", 1, 0, PREFIX_ALL_OPTION }, - { "prefix-client", 1, 0, PREFIX_CLIENT_OPTION }, - { "prefix-server", 1, 0, PREFIX_SERVER_OPTION }, - { 0, 0, 0, 0 } -}; - -static void rm_tempfile(void); - -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; -} - -/* 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_idfile = x; - do_dlldata = x; -} - -static void start_cplusplus_guard(FILE *fp) -{ - fprintf(fp, "#ifdef __cplusplus\n"); - fprintf(fp, "extern \"C\" {\n"); - fprintf(fp, "#endif\n\n"); -} - -static 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) -{ - 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"); - 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(ifref_list_t *ifaces) -{ - struct list filenames = LIST_INIT(filenames); - filename_node_t *node; - FILE *dlldata; - - if (!do_dlldata || !need_proxy_file(ifaces)) - return; - - dlldata = fopen(dlldata_name, "r"); - if (dlldata) { - static char marker[] = "REFERENCE_PROXY_FILE"; - 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); - } - } - - 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); - free_filename_nodes(&filenames); -} - -int main(int argc,char *argv[]) -{ - extern char* optarg; - extern int optind; - int optc; - int ret = 0; - int opti = 0; - - 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(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 '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 'N': - no_preprocess = 1; - break; - case 'p': - do_everything = 0; - do_proxies = 1; - break; - case 'P': - proxy_name = xstrdup(optarg); - 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; - } - } - - if(do_everything) { - set_everything(TRUE); - } - - 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); - free_filename_nodes(&filenames); - return 0; - } - else if (optind != argc - 1) { - fprintf(stderr, "%s", usage); - return 1; - } - else - input_name = xstrdup(argv[optind]); - } - else { - fprintf(stderr, "%s", usage); - return 1; - } - - if(debuglevel) - { - setbuf(stdout,0); - setbuf(stderr,0); - } - - 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 (!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"); - - wpp_add_cmdline_define("__WIDL__"); - - atexit(rm_tempfile); - if (!no_preprocess) - { - chat("Starting preprocess\n"); - - if (!preprocess_only) - { - ret = wpp_parse_temp( input_name, header_name, &temp_name ); - } - 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; - } - } - - if(do_header) { - header_token = make_token(header_name); - - if(!(header = fopen(header_name, "w"))) { - fprintf(stderr, "Could not open %s for output\n", header_name); - return 1; - } - fprintf(header, "/*** Autogenerated by WIDL %s from %s - Do not edit ***/\n", PACKAGE_VERSION, input_name); - fprintf(header, "#include \n" ); - fprintf(header, "#include \n\n" ); - fprintf(header, "#ifndef __%s__\n", header_token); - fprintf(header, "#define __%s__\n", header_token); - start_cplusplus_guard(header); - } - - if (local_stubs_name) { - local_stubs = fopen(local_stubs_name, "w"); - if (!local_stubs) { - fprintf(stderr, "Could not open %s for output\n", local_stubs_name); - return 1; - } - 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); - } - - if (do_idfile) { - idfile_token = make_token(idfile_name); - - idfile = fopen(idfile_name, "w"); - if (! idfile) { - fprintf(stderr, "Could not open %s for output\n", idfile_name); - return 1; - } - - fprintf(idfile, "/*** Autogenerated by WIDL %s ", PACKAGE_VERSION); - fprintf(idfile, "from %s - Do not edit ***/\n\n", input_name); - fprintf(idfile, "#include \n"); - fprintf(idfile, "#include \n\n"); - fprintf(idfile, "#include \n\n"); - start_cplusplus_guard(idfile); - } - - init_types(); - ret = parser_parse(); - - if(do_header) { - fprintf(header, "/* Begin additional prototypes for all interfaces */\n"); - fprintf(header, "\n"); - write_user_types(); - write_generic_handle_routines(); - write_context_handle_rundowns(); - 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); - } - - if (local_stubs) { - fclose(local_stubs); - } - - if (do_idfile) { - fprintf(idfile, "\n"); - end_cplusplus_guard(idfile); - - fclose(idfile); - } - - 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_idfile) - unlink(idfile_name); - if (do_proxies) - unlink(proxy_name); - if (do_typelib) - unlink(typelib_name); -} diff --git a/reactos/tools/widl/widl.h b/reactos/tools/widl/widl.h deleted file mode 100644 index 924b67a3d88..00000000000 --- a/reactos/tools/widl/widl.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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 win32; -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_idfile; -extern int do_dlldata; -extern int old_names; - -extern char *input_name; -extern char *header_name; -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 const char *prefix_client; -extern const char *prefix_server; -extern time_t now; - -extern int line_number; -extern int char_number; - -extern FILE* header; -extern FILE* local_stubs; -extern FILE* idfile; - -extern void write_proxies(ifref_list_t *ifaces); -extern void write_client(ifref_list_t *ifaces); -extern void write_server(ifref_list_t *ifaces); -extern void write_dlldata(ifref_list_t *ifaces); - -#endif diff --git a/reactos/tools/widl/widl.rbuild b/reactos/tools/widl/widl.rbuild deleted file mode 100644 index ddba3f7f1a4..00000000000 --- a/reactos/tools/widl/widl.rbuild +++ /dev/null @@ -1,27 +0,0 @@ - - - - SHORT - 1 - . - include/reactos/wine - include/reactos - include - include - wpp - client.c - hash.c - header.c - proxy.c - server.c - typegen.c - typelib.c - utils.c - widl.c - write_msft.c - parser.yy.c - parser.tab.c - - mkstemps.c - - diff --git a/reactos/tools/widl/widl_ros.diff b/reactos/tools/widl/widl_ros.diff deleted file mode 100644 index 98da9cb5d7c..00000000000 --- a/reactos/tools/widl/widl_ros.diff +++ /dev/null @@ -1,333 +0,0 @@ ---- client.c 2008-09-27 21:56:02.000000000 +0200 -+++ client.c 2008-09-27 20:49:05.000000000 +0200 -@@ -113,7 +113,7 @@ - } - if (explicit_handle) - { -- if (!explicit_handle_var || !explicit_generic_handle_var || !context_handle_var) -+ if (!explicit_handle_var && !explicit_generic_handle_var && !context_handle_var) - { - error("%s() does not define an explicit binding handle!\n", def->name); - return; ---- hash.c 2008-09-27 21:56:02.000000000 +0200 -+++ hash.c 2008-09-22 00:14:35.703125000 +0200 -@@ -21,9 +21,7 @@ - #include - #include - --#include "windef.h" --#include "winbase.h" --#include "winnls.h" -+#include - - #include "hash.h" - -@@ -535,6 +533,7 @@ - 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: -+#ifndef __REACTOS__ - case LANG_VIETNAMESE: case LANG_GAELIC: case LANG_MALTESE: - case LANG_TAJIK: case LANG_ROMANSH: case LANG_IRISH: - case LANG_SAMI: case LANG_UPPER_SORBIAN: case LANG_SUTU: -@@ -542,6 +541,12 @@ - case LANG_XHOSA: case LANG_ZULU: case LANG_ESPERANTO: - case LANG_WALON: case LANG_CORNISH: case LANG_WELSH: - case LANG_BRETON: -+#else -+ 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: -+#endif - nOffset = 16; - pnLookup = Lookup_16; - break; ---- header.c 2008-09-27 21:56:02.000000000 +0200 -+++ header.c 2008-09-27 20:49:05.000000000 +0200 -@@ -891,6 +891,8 @@ - const char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); - int explicit_handle = is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE); - const var_t* explicit_handle_var; -+ const var_t* explicit_generic_handle_var = NULL; -+ const var_t* context_handle_var = NULL; - const func_t *cur; - int prefixes_differ = strcmp(prefix_client, prefix_server); - -@@ -901,8 +903,14 @@ - - /* check for a defined binding handle */ - explicit_handle_var = get_explicit_handle_var(cur); -+ if (!explicit_handle_var) -+ { -+ explicit_generic_handle_var = get_explicit_generic_handle_var(cur); -+ if (!explicit_generic_handle_var) -+ context_handle_var = get_context_handle_var(cur); -+ } - if (explicit_handle) { -- if (!explicit_handle_var) { -+ if (!explicit_handle_var && !explicit_generic_handle_var && !context_handle_var) { - error("%s() does not define an explicit binding handle!\n", def->name); - return; - } ---- header.h 2008-09-27 21:56:02.000000000 +0200 -+++ header.h 2008-09-23 21:14:50.781250000 +0200 -@@ -66,6 +66,7 @@ - extern const var_t* get_explicit_handle_var(const func_t* func); - extern const type_t* get_explicit_generic_handle_type(const var_t* var); - extern const var_t* get_explicit_generic_handle_var(const func_t* func); -+extern const var_t* get_context_handle_var(const func_t* func); - extern int has_out_arg_or_return(const func_t *func); - extern void write_guid(FILE *f, const char *guid_prefix, const char *name, - const UUID *uuid); -@@ -88,11 +89,19 @@ - - static inline int is_context_handle(const type_t *type) - { -- const type_t *t; -- for (t = type; is_ptr(t); t = t->ref) -- if (is_attr(t->attrs, ATTR_CONTEXTHANDLE)) -+ if (is_attr(type->attrs, ATTR_CONTEXTHANDLE)) -+ return 1; -+ -+ for (;;) -+ { -+ if (is_attr(type->attrs, ATTR_CONTEXTHANDLE)) - return 1; -- return 0; -+ else if (type->kind == TKIND_ALIAS) -+ type = type->orig; -+ else if (is_ptr(type)) -+ type = type->ref; -+ else return 0; -+ } - } - - #endif ---- proxy.c 2008-09-27 21:56:02.000000000 +0200 -+++ proxy.c 2008-09-27 20:49:05.000000000 +0200 -@@ -463,41 +463,45 @@ - print_proxy("\n"); - } - --static int write_proxy_methods(type_t *iface) -+static int write_proxy_methods(type_t *iface, int skip) - { - const func_t *cur; - int i = 0; - -- if (iface->ref) i = write_proxy_methods(iface->ref); -+ if (iface->ref) i = write_proxy_methods(iface->ref, iface->ref->ref != NULL); - if (iface->funcs) LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) { - var_t *def = cur->def; - if (!is_callas(def->attrs)) { - if (i) fprintf(proxy, ",\n"); -- print_proxy( "%s_", iface->name); -+ print_proxy( "%s%s_", skip ? "0\t/* " : "", iface->name); - write_name(proxy, def); -- fprintf(proxy, "_Proxy"); -+ fprintf(proxy, "_Proxy%s", skip ? " */" : ""); - i++; - } - } - return i; - } - --static int write_stub_methods(type_t *iface) -+static int write_stub_methods(type_t *iface, int skip) - { - const func_t *cur; - int i = 0; - -- if (iface->ref) i = write_stub_methods(iface->ref); -+ if (iface->ref) i = write_stub_methods(iface->ref, TRUE); - else return i; /* skip IUnknown */ - - if (iface->funcs) LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) { - var_t *def = cur->def; - if (!is_local(def->attrs)) { -- if (i) fprintf(proxy,",\n"); -- print_proxy( "%s_", iface->name); -- write_name(proxy, def); -- fprintf(proxy, "_Stub"); -- i++; -+ if (skip) -+ print_proxy("STUB_FORWARDING_FUNCTION,\n"); -+ else { -+ if (i) fprintf(proxy,",\n"); -+ print_proxy( "%s_", iface->name); -+ write_name(proxy, def); -+ fprintf(proxy, "_Stub"); -+ i++; -+ } - } - } - return i; -@@ -551,7 +555,7 @@ - print_proxy( "},\n"); - print_proxy( "{\n"); - indent++; -- write_proxy_methods(iface); -+ write_proxy_methods(iface, FALSE); - fprintf(proxy, "\n"); - indent--; - print_proxy( "}\n"); -@@ -563,7 +567,7 @@ - print_proxy( "static const PRPC_STUB_FUNCTION %s_table[] =\n", iface->name); - print_proxy( "{\n"); - indent++; -- stubs = write_stub_methods(iface); -+ stubs = write_stub_methods(iface, FALSE); - fprintf(proxy, "\n"); - indent--; - fprintf(proxy, "};\n"); ---- server.c 2008-09-27 21:56:02.000000000 +0200 -+++ server.c 2008-09-27 20:49:05.000000000 +0200 -@@ -60,13 +60,21 @@ - LIST_FOR_EACH_ENTRY( func, iface->funcs, const func_t, entry ) - { - const var_t *def = func->def; -+ const var_t* context_handle_var = NULL; -+ const var_t* explicit_generic_handle_var = NULL; - int has_full_pointer = is_full_pointer_function(func); - - /* check for a defined binding handle */ - explicit_handle_var = get_explicit_handle_var(func); -+ if (!explicit_handle_var) -+ { -+ explicit_generic_handle_var = get_explicit_generic_handle_var(func); -+ if (!explicit_generic_handle_var) -+ context_handle_var = get_context_handle_var(func); -+ } - if (explicit_handle) - { -- if (!explicit_handle_var) -+ if (!explicit_handle_var && !explicit_generic_handle_var && !context_handle_var) - { - error("%s() does not define an explicit binding handle!\n", def->name); - return; -@@ -399,6 +407,7 @@ - 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("#define _SEH_NO_NATIVE_NLG\n"); - print_server("#include \"%s\"\n", header_name); - fprintf(server, "\n"); - } ---- typelib.c 2008-09-27 21:56:02.000000000 +0200 -+++ typelib.c 2008-09-27 20:49:05.000000000 +0200 -@@ -35,8 +35,7 @@ - #define NONAMELESSUNION - #define NONAMELESSSTRUCT - --#include "windef.h" --#include "winbase.h" -+#include - - #include "widl.h" - #include "utils.h" -@@ -360,10 +359,10 @@ - - file_name = wpp_find_include(importlib->name, NULL); - if(file_name) { -- fd = open(file_name, O_RDONLY); -+ fd = open(file_name, O_RDONLY | O_BINARY); - free(file_name); - }else { -- fd = open(importlib->name, O_RDONLY); -+ fd = open(importlib->name, O_RDONLY | O_BINARY); - } - - if(fd < 0) ---- typelib_struct.h 2008-09-27 21:56:02.000000000 +0200 -+++ typelib_struct.h 2008-09-22 00:14:35.703125000 +0200 -@@ -302,7 +302,7 @@ - * - */ - --#include "pshpack1.h" -+#include - - typedef struct { - /*00*/ DWORD SLTG_magic; /* 0x47544c53 == "SLTG" */ -@@ -599,7 +599,7 @@ - WORD typeofarray - */ - --#include "poppack.h" -+#include - - /*---------------------------END--------------------------------------------*/ - #endif ---- widl.c 2008-09-27 21:56:02.000000000 +0200 -+++ widl.c 2008-09-27 20:49:05.000000000 +0200 -@@ -174,7 +174,7 @@ - token = xstrdup(name); - for (i=0; token[i]; i++) { - if (!isalnum(token[i])) token[i] = '_'; -- else token[i] = toupper(token[i]); -+ else token[i] = tolower(token[i]); - } - return token; - } -@@ -561,8 +561,8 @@ - fprintf(header, "/*** Autogenerated by WIDL %s from %s - Do not edit ***/\n", PACKAGE_VERSION, input_name); - fprintf(header, "#include \n" ); - fprintf(header, "#include \n\n" ); -- fprintf(header, "#ifndef __WIDL_%s\n", header_token); -- fprintf(header, "#define __WIDL_%s\n", header_token); -+ fprintf(header, "#ifndef __%s__\n", header_token); -+ fprintf(header, "#define __%s__\n", header_token); - start_cplusplus_guard(header); - } - -@@ -607,7 +607,7 @@ - fprintf(header, "/* End additional prototypes */\n"); - fprintf(header, "\n"); - end_cplusplus_guard(header); -- fprintf(header, "#endif /* __WIDL_%s */\n", header_token); -+ fprintf(header, "#endif /* __%s__ */\n", header_token); - fclose(header); - } - ---- widltypes.h 2008-09-27 21:56:02.000000000 +0200 -+++ widltypes.h 2008-09-26 19:42:52.859375000 +0200 -@@ -21,6 +21,13 @@ - #ifndef __WIDL_WIDLTYPES_H - #define __WIDL_WIDLTYPES_H - -+#define S_OK 0 -+#define S_FALSE 1 -+#define E_OUTOFMEMORY ((HRESULT)0x8007000EL) -+#define TYPE_E_IOERROR ((HRESULT)0x80028CA2L) -+ -+#define max(a, b) ((a) > (b) ? a : b) -+ - #include - #include "guiddef.h" - #include "wine/rpcfc.h" -@@ -31,7 +38,9 @@ - typedef GUID UUID; - #endif - -+#ifndef TRUE - #define TRUE 1 -+#endif - #define FALSE 0 - - #define RPC_FC_FUNCTION 0xfe ---- write_msft.c 2008-09-27 21:56:02.000000000 +0200 -+++ write_msft.c 2008-09-27 20:49:05.000000000 +0200 -@@ -40,10 +40,8 @@ - #define NONAMELESSUNION - #define NONAMELESSSTRUCT - --#include "winerror.h" --#include "windef.h" --#include "winbase.h" --#include "winnls.h" -+#include -+#include - - #include "widltypes.h" - #include "typelib.h" diff --git a/reactos/tools/widl/widltypes.h b/reactos/tools/widl/widltypes.h deleted file mode 100644 index f99e31af585..00000000000 --- a/reactos/tools/widl/widltypes.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - * 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 - -#define S_OK 0 -#define S_FALSE 1 -#define E_OUTOFMEMORY ((HRESULT)0x8007000EL) -#define TYPE_E_IOERROR ((HRESULT)0x80028CA2L) - -#define max(a, b) ((a) > (b) ? a : b) - -#include -#include "guiddef.h" -#include "wine/rpcfc.h" -#include "wine/list.h" - -#ifndef UUID_DEFINED -#define UUID_DEFINED -typedef GUID UUID; -#endif - -#ifndef TRUE -#define TRUE 1 -#endif -#define FALSE 0 - -#define RPC_FC_FUNCTION 0xfe - -typedef struct _attr_t attr_t; -typedef struct _expr_t expr_t; -typedef struct _type_t type_t; -typedef struct _typeref_t typeref_t; -typedef struct _var_t var_t; -typedef struct _pident_t pident_t; -typedef struct _func_t func_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 list attr_list_t; -typedef struct list str_list_t; -typedef struct list func_list_t; -typedef struct list expr_list_t; -typedef struct list var_list_t; -typedef struct list pident_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; - -enum attr_type -{ - ATTR_AGGREGATABLE, - ATTR_APPOBJECT, - ATTR_ASYNC, - ATTR_AUTO_HANDLE, - ATTR_BINDABLE, - ATTR_CALLAS, - ATTR_CALLCONV, /* calling convention pseudo-attribute */ - ATTR_CASE, - ATTR_CONTEXTHANDLE, - ATTR_CONTROL, - ATTR_DEFAULT, - ATTR_DEFAULTCOLLELEM, - ATTR_DEFAULTVALUE_EXPR, - ATTR_DEFAULTVALUE_STRING, - ATTR_DEFAULTVTABLE, - ATTR_DISPINTERFACE, - ATTR_DISPLAYBIND, - ATTR_DLLNAME, - ATTR_DUAL, - ATTR_ENDPOINT, - ATTR_ENTRY_ORDINAL, - ATTR_ENTRY_STRING, - ATTR_EXPLICIT_HANDLE, - ATTR_HANDLE, - ATTR_HELPCONTEXT, - ATTR_HELPFILE, - ATTR_HELPSTRING, - ATTR_HELPSTRINGCONTEXT, - ATTR_HELPSTRINGDLL, - ATTR_HIDDEN, - ATTR_ID, - ATTR_IDEMPOTENT, - ATTR_IIDIS, - ATTR_IMMEDIATEBIND, - ATTR_IMPLICIT_HANDLE, - ATTR_IN, - ATTR_INPUTSYNC, - ATTR_LENGTHIS, - ATTR_LOCAL, - ATTR_NONBROWSABLE, - ATTR_NONCREATABLE, - ATTR_NONEXTENSIBLE, - ATTR_OBJECT, - ATTR_ODL, - ATTR_OLEAUTOMATION, - ATTR_OPTIONAL, - ATTR_OUT, - ATTR_POINTERDEFAULT, - ATTR_POINTERTYPE, - ATTR_PROPGET, - ATTR_PROPPUT, - ATTR_PROPPUTREF, - ATTR_PUBLIC, - ATTR_RANGE, - ATTR_READONLY, - ATTR_REQUESTEDIT, - ATTR_RESTRICTED, - ATTR_RETVAL, - ATTR_SIZEIS, - ATTR_SOURCE, - ATTR_STRICTCONTEXTHANDLE, - ATTR_STRING, - ATTR_SWITCHIS, - ATTR_SWITCHTYPE, - ATTR_TRANSMITAS, - ATTR_UUID, - ATTR_V1ENUM, - ATTR_VARARG, - ATTR_VERSION, - 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, -}; - -enum type_kind -{ - TKIND_PRIMITIVE = -1, - TKIND_ENUM, - TKIND_RECORD, - TKIND_MODULE, - TKIND_INTERFACE, - TKIND_DISPATCH, - TKIND_COCLASS, - TKIND_ALIAS, - TKIND_UNION, - TKIND_MAX -}; - -struct str_list_entry_t -{ - char *str; - struct list entry; -}; - -struct _attr_t { - enum attr_type type; - union { - unsigned long ival; - void *pval; - } u; - /* parser-internal */ - struct list entry; -}; - -struct _expr_t { - enum expr_type type; - const expr_t *ref; - union { - long lval; - double dval; - const char *sval; - const expr_t *ext; - type_t *tref; - } u; - const expr_t *ext2; - int is_const; - long cval; - /* parser-internal */ - struct list entry; -}; - -struct _type_t { - const char *name; - enum type_kind kind; - unsigned char type; - struct _type_t *ref; - const attr_list_t *attrs; - func_list_t *funcs; /* interfaces and modules */ - var_list_t *fields_or_args; /* interfaces, structures, enumerations and functions (for args) */ - ifref_list_t *ifaces; /* coclasses */ - unsigned long dim; /* array dimension */ - expr_t *size_is, *length_is; - type_t *orig; /* dup'd types */ - unsigned int typestring_offset; - unsigned int ptrdesc; /* used for complex structs */ - int typelib_idx; - unsigned int declarray : 1; /* if declared as an array */ - unsigned int ignore : 1; - unsigned int is_const : 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 */ - int sign : 2; -}; - -struct _var_t { - char *name; - type_t *type; - attr_list_t *attrs; - expr_t *eval; - - /* parser-internal */ - struct list entry; -}; - -struct _pident_t { - var_t *var; - int ptr_level; - - int is_func; - /* levels of indirection for function pointers */ - int func_ptr_level; - var_list_t *args; - char *callconv; - - /* parser-internal */ - struct list entry; -}; - -struct _func_t { - var_t *def; - var_list_t *args; - int ignore, idx; - - /* 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; - char *filename; - attr_list_t *attrs; - struct list entries; - struct list importlibs; -}; - -struct _user_type_t { - struct list entry; - const char *name; -}; - -extern unsigned char pointer_default; - -extern user_type_list_t user_type_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); - -type_t *duptype(type_t *t, int dupname); -type_t *alias(type_t *t, const char *name); - -int is_ptr(const type_t *t); -int is_array(const type_t *t); -int is_var_ptr(const var_t *v); -int cant_be_null(const var_t *v); -int is_struct(unsigned char tc); -int is_union(unsigned char tc); - -static inline type_t *get_func_return_type(const func_t *func) -{ - return func->def->type->ref; -} - -#endif diff --git a/reactos/tools/widl/write_msft.c b/reactos/tools/widl/write_msft.c deleted file mode 100644 index 7b3878d7b45..00000000000 --- a/reactos/tools/widl/write_msft.c +++ /dev/null @@ -1,2533 +0,0 @@ -/* - * 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 -#define NONAMELESSSTRUCT - -#include -#include - -#include "widltypes.h" -#include "typelib.h" -#include "typelib_struct.h" -#include "utils.h" -#include "header.h" -#include "hash.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]; - 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; /* or do we use the current one? */ - 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 < 15; 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[0] = length & 0xff; - - converted_name[length + 4] = 0; - - converted_name[1] = 0x00; - - value = lhash_val_of_name_sys(typelib->typelib_header.varflags & 0x0f, typelib->typelib_header.lcid, converted_name + 4); - - converted_name[2] = value; - converted_name[3] = value >> 8; - - 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); - converted_string[0] = length & 0xff; - converted_string[1] = (length >> 8) & 0xff; - - 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]) { - 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[((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; - - hash_key = ctl2_hash_guid(&guid->guid); - - offset = ctl2_find_guid(typelib, hash_key, &guid->guid); - if (offset != -1) return offset; - - 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; - 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) & 0xff) - | (typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 0] & 0xff)) + 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) & 0xff) - | (typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xc] & 0xff)) >> 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_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 *width, /* [O] The width of the type, or NULL. */ - int *alignment, /* [O] The alignment of the type, or NULL. */ - 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 (!width) width = &scratch; - if (!alignment) alignment = &scratch; - if (!decoded_size) decoded_size = &scratch; - - - switch (vt) { - case VT_I1: - case VT_UI1: - *encoded_type = default_type; - *width = 1; - *alignment = 1; - break; - - case VT_INT: - *encoded_type = 0x80000000 | (VT_I4 << 16) | VT_INT; - if ((typelib->typelib_header.varflags & 0x0f) == SYS_WIN16) { - *width = 2; - *alignment = 2; - } else { - *width = 4; - *alignment = 4; - } - break; - - case VT_UINT: - *encoded_type = 0x80000000 | (VT_UI4 << 16) | VT_UINT; - if ((typelib->typelib_header.varflags & 0x0f) == SYS_WIN16) { - *width = 2; - *alignment = 2; - } else { - *width = 4; - *alignment = 4; - } - break; - - case VT_UI2: - case VT_I2: - case VT_BOOL: - *encoded_type = default_type; - *width = 2; - *alignment = 2; - break; - - case VT_I4: - case VT_UI4: - case VT_R4: - case VT_ERROR: - case VT_BSTR: - case VT_HRESULT: - *encoded_type = default_type; - *width = 4; - *alignment = 4; - break; - - case VT_R8: - case VT_I8: - case VT_UI8: - *encoded_type = default_type; - *width = 8; - *alignment = 8; - break; - - case VT_CY: - case VT_DATE: - *encoded_type = default_type; - *width = 8; - *alignment = 8; - break; - - case VT_VOID: - *encoded_type = 0x80000000 | (VT_EMPTY << 16) | vt; - *width = 0; - *alignment = 1; - break; - - case VT_UNKNOWN: - case VT_DISPATCH: - *encoded_type = default_type; - *width = 4; - *alignment = 4; - break; - - case VT_VARIANT: - *encoded_type = default_type; - break; - - case VT_LPSTR: - case VT_LPWSTR: - *encoded_type = 0xfffe0000 | vt; - *width = 4; - *alignment = 4; - break; - - case VT_PTR: - { - int next_vt; - for(next_vt = 0; type->ref; type = type->ref) { - next_vt = get_type_vt(type->ref); - 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->ref, &target_type, NULL, NULL, &child_size); - if(type->ref && (type->ref->type == RPC_FC_IP)) { - chat("encode_type: skipping ptr\n"); - *encoded_type = target_type; - *width = 4; - *alignment = 4; - *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; - - *width = 4; - *alignment = 4; - *decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size; - break; - } - - - case VT_SAFEARRAY: - { - int next_vt; - - /* skip over SAFEARRAY type straight to element type */ - type = type->ref; - - for(next_vt = 0; type->ref; type = type->ref) { - next_vt = get_type_vt(type->ref); - if (next_vt != 0) - break; - } - - encode_type(typelib, next_vt, type->ref, &target_type, NULL, NULL, &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; - - *width = 4; - *alignment = 4; - *decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size; - break; - } - - - case VT_USERDEFINED: - { - int typeinfo_offset; - - /* typedef'd types without attributes aren't included in the typelib */ - while (type->typelib_idx < 0 && type->kind == TKIND_ALIAS && ! type->attrs) - type = type->orig; - - chat("encode_type: VT_USERDEFINED - type %p name = %s type->type %d idx %d\n", type, - type->name, type->type, type->typelib_idx); - - if(type->typelib_idx == -1) { - chat("encode_type: trying to ref not added type\n"); - switch(type->type) { - case RPC_FC_STRUCT: - case RPC_FC_PSTRUCT: - case RPC_FC_CSTRUCT: - case RPC_FC_CPSTRUCT: - case RPC_FC_CVSTRUCT: - case RPC_FC_BOGUS_STRUCT: - add_structure_typeinfo(typelib, type); - break; - case RPC_FC_IP: - add_interface_typeinfo(typelib, type); - break; - case RPC_FC_ENUM16: - add_enum_typeinfo(typelib, type); - break; - case 0: - if (type->kind == TKIND_COCLASS) - add_coclass_typeinfo(typelib, type); - else if (type->kind == TKIND_DISPATCH) - add_dispinterface_typeinfo(typelib, type); - else - error("encode_type: VT_USERDEFINED - can't yet add typedef's on the fly\n"); - break; - default: - error("encode_type: VT_USERDEFINED - unhandled type %d\n", 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; - *width = 0; - *alignment = 1; - - if(type->type == RPC_FC_IP) { - 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_PTR)) && (typedata[1] == *encoded_type)) 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_PTR; - typedata[1] = *encoded_type; - } - *encoded_type = typeoffset; - *width = 4; - *alignment = 4; - *decoded_size += 8; - } - break; - } - - default: - error("encode_type: unrecognized type %d.\n", vt); - *encoded_type = default_type; - *width = 0; - *alignment = 1; - break; - } - - return 0; -} - -static void dump_type(type_t *t) -{ - chat("dump_type: %p name %s type %d ref %p attrs %p\n", t, t->name, t->type, t->ref, t->attrs); - if(t->ref) dump_type(t->ref); -} - -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 *width, /* [O] The width of the type, or NULL. */ - int *alignment, /* [O] The alignment of the type, or NULL. */ - 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 (!width) width = &scratch; - if (!alignment) alignment = &scratch; - if (!decoded_size) decoded_size = &scratch; - *decoded_size = 0; - - chat("encode_var: var %p type %p type->name %s type->ref %p\n", - var, type, type->name ? type->name : "NULL", type->ref); - - if (type->declarray) { - int num_dims, elements = 1, arrayoffset; - type_t *atype; - int *arraydata; - - num_dims = 0; - for (atype = type; atype->declarray; atype = atype->ref) - ++num_dims; - - chat("array with %d dimensions\n", num_dims); - encode_var(typelib, atype, var, &target_type, width, alignment, NULL); - arrayoffset = ctl2_alloc_segment(typelib, MSFT_SEG_ARRAYDESC, (2 + 2 * num_dims) * sizeof(long), 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(long)) << 16); - - arraydata += 2; - for (atype = type; atype->declarray; atype = atype->ref) - { - arraydata[0] = atype->dim; - arraydata[1] = 0; - arraydata += 2; - elements *= atype->dim; - } - - 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; - *width = *width * elements; - *decoded_size = 20 /*sizeof(ARRAYDESC)*/ + (num_dims - 1) * 8 /*sizeof(SAFEARRAYBOUND)*/; - return 0; - } - - vt = get_type_vt(type); - if (vt == VT_PTR) { - int skip_ptr = encode_var(typelib, type->ref, var, &target_type, NULL, NULL, &child_size); - - if(skip_ptr == 2) { - chat("encode_var: skipping ptr\n"); - *encoded_type = target_type; - *decoded_size = child_size; - *width = 4; - *alignment = 4; - 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 { - 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; - - *width = 4; - *alignment = 4; - *decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size; - return 0; - } - - dump_type(type); - - encode_type(typelib, vt, type, encoded_type, width, alignment, decoded_size); - if(type->type == RPC_FC_IP) return 2; - return 0; -} - -static unsigned long get_ulong_val(unsigned long 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_value(msft_typelib_t* typelib, int *out, int vt, void *value) -{ - 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: - case VT_PTR: - { - const unsigned long lv = get_ulong_val(*(unsigned long*)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; - } - return; - } - case VT_BSTR: - { - char *s = (char *) value; - int len = strlen(s), 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; - *((unsigned int *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+2]) = 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; - return; - } - - default: - warning("can't write value of type %d yet\n", vt); - } - return; -} - -static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid, - int vt, 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); - write_value(typelib, &data_out, vt, 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, const func_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; - 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; - - 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->def->attrs )) { - chat("add_func_desc: skipping local function\n"); - return S_FALSE; - } - - if (func->args) - LIST_FOR_EACH_ENTRY( arg, func->args, var_t, entry ) - { - num_params++; - if (arg->attrs) LIST_FOR_EACH_ENTRY( attr, arg->attrs, const attr_t, entry ) { - if(attr->type == ATTR_DEFAULTVALUE_EXPR || attr->type == ATTR_DEFAULTVALUE_STRING) - 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->def->name); - - if (func->def->attrs) LIST_FOR_EACH_ENTRY( attr, func->def->attrs, const attr_t, entry ) { - expr_t *expr = attr->u.pval; - switch(attr->type) { - case ATTR_BINDABLE: - funcflags |= 0x4; /* FUNCFLAG_BINDABLE */ - break; - case ATTR_DISPLAYBIND: - funcflags |= 0x10; /* FUNCFLAG_DISPLAYBIND */ - break; - case ATTR_ENTRY_ORDINAL: - extra_attr = max(extra_attr, 3); - entry = expr->cval; - entry_is_ord = 1; - break; - case ATTR_ENTRY_STRING: - extra_attr = max(extra_attr, 3); - entry = ctl2_alloc_string(typeinfo->typelib, attr->u.pval); - 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_NONBROWSABLE: - funcflags |= 0x400; /* FUNCFLAG_NONBROWSABLE */ - 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; - case ATTR_RESTRICTED: - funcflags |= 0x1; /* FUNCFLAG_FRESTRICTED */ - 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: - warning("add_func_desc: ignoring attr %d\n", attr->type); - 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, get_func_return_type(func), func->def, &typedata[1], NULL, NULL, &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 (func->args) - { - i = 0; - LIST_FOR_EACH_ENTRY( arg, func->args, 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, NULL, NULL, &decoded_size); - if (arg->attrs) LIST_FOR_EACH_ENTRY( attr, arg->attrs, const attr_t, entry ) { - switch(attr->type) { - case ATTR_DEFAULTVALUE_EXPR: - { - int vt; - expr_t *expr = (expr_t *)attr->u.pval; - if (arg->type->type == RPC_FC_ENUM16) - vt = VT_INT; - else - vt = get_type_vt(arg->type); - paramflags |= 0x30; /* PARAMFLAG_FHASDEFAULT | PARAMFLAG_FOPT */ - chat("default value %ld\n", expr->cval); - write_value(typeinfo->typelib, defaultdata, vt, &expr->cval); - break; - } - case ATTR_DEFAULTVALUE_STRING: - { - char *s = (char *)attr->u.pval; - int vt; - if (arg->type->type == RPC_FC_ENUM16) - vt = VT_INT; - else - vt = get_type_vt(arg->type); - paramflags |= 0x30; /* PARAMFLAG_FHASDEFAULT | PARAMFLAG_FOPT */ - chat("default value '%s'\n", s); - write_value(typeinfo->typelib, defaultdata, vt, s); - 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_RETVAL: - paramflags |= 0x08; /* PARAMFLAG_FRETVAL */ - typedata[4] |= 0x4000; - break; - default: - chat("unhandled param attr %d\n", attr->type); - break; - } - } - paramdata[1] = -1; - paramdata[2] = paramflags; - typedata[3] += decoded_size << 16; - i++; - } - } - - 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 += 4; - - /* 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 (func->args) - { - i = 0; - LIST_FOR_EACH_ENTRY( arg, func->args, 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; - int var_datawidth; - int var_alignment; - int var_type_size, var_kind = 0 /* VAR_PERINSTANCE */; - int alignment; - int varflags = 0; - const attr_t *attr; - 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_HIDDEN: - varflags |= 0x40; /* VARFLAG_FHIDDEN */ - break; - case ATTR_ID: - id = expr->cval; - break; - case ATTR_READONLY: - varflags |= 0x01; /* VARFLAG_FREADONLY */ - break; - case ATTR_RESTRICTED: - varflags |= 0x80; /* VARFLAG_FRESTRICTED */ - break; - case ATTR_SOURCE: - varflags |= 0x02; /* VARFLAG_FSOURCE */ - break; - default: - warning("AddVarDesc: unhandled attr type %d\n", attr->type); - 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 */ - encode_var(typeinfo->typelib, var->type, var, &typedata[1], &var_datawidth, - &var_alignment, &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_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_DISPATCH: - var_kind = 3; /* VAR_DISPATCH */ - typeinfo->datawidth = 4; - var_alignment = 4; - 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\n", name, kind); - - 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_DISPINTERFACE: - 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_LOCAL: - break; - - case ATTR_NONCREATABLE: - typeinfo->flags &= ~0x2; /* TYPEFLAG_FCANCREATE */ - break; - - case ATTR_NONEXTENSIBLE: - typeinfo->flags |= 0x80; /* TYPEFLAG_FNONEXTENSIBLE */ - break; - - case ATTR_OBJECT: - break; - - case ATTR_ODL: - break; - - case ATTR_OLEAUTOMATION: - typeinfo->flags |= 0x100; /* TYPEFLAG_FOLEAUTOMATION */ - break; - - case ATTR_PUBLIC: - break; - - 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: - warning("create_msft_typeinfo: ignoring attr %d\n", attr->type); - 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; - 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; - 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; - impinfo.oGuid = ctl2_alloc_guid(typelib, &guidentry); - typelib->typelib_header.dispatchpos = alloc_msft_importinfo(typelib, &impinfo) | 0x01; -} - -static void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinterface) -{ - int idx = 0; - const func_t *func; - var_t *var; - msft_typeinfo_t *msft_typeinfo; - - 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 = 4; - msft_typeinfo->typeinfo->typekind |= 0x2100; - - msft_typeinfo->typeinfo->flags |= 0x1000; /* TYPEFLAG_FDISPATCHABLE */ - add_dispatch(typelib); - msft_typeinfo->typeinfo->cImplTypes = 1; - - /* count the no of funcs, as the variable indices come after the funcs */ - if (dispinterface->funcs) - LIST_FOR_EACH_ENTRY( func, dispinterface->funcs, const func_t, entry ) idx++; - - if (dispinterface->fields_or_args) - LIST_FOR_EACH_ENTRY( var, dispinterface->fields_or_args, var_t, entry ) - add_var_desc(msft_typeinfo, idx++, var); - - if (dispinterface->funcs) - { - idx = 0; - LIST_FOR_EACH_ENTRY( func, dispinterface->funcs, const func_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 func_t *func; - type_t *ref; - msft_typeinfo_t *msft_typeinfo; - importinfo_t *ref_importinfo = NULL; - int num_parents = 0, num_funcs = 0; - const type_t *derived; - - if (-1 < interface->typelib_idx) - return; - - if (is_attr(interface->attrs, ATTR_DISPINTERFACE)) - return add_dispinterface_typeinfo(typelib, interface); - - /* midl adds the parent interface first, unless the parent itself - has no parent (i.e. it stops before IUnknown). */ - - if(interface->ref) { - ref_importinfo = find_importinfo(typelib, interface->ref->name); - - if(!ref_importinfo && interface->ref->ref && interface->ref->typelib_idx == -1) - add_interface_typeinfo(typelib, interface->ref); - } - - interface->typelib_idx = typelib->typelib_header.nrtypeinfos; - msft_typeinfo = create_msft_typeinfo(typelib, TKIND_INTERFACE, interface->name, interface->attrs); - msft_typeinfo->typeinfo->size = 4; - msft_typeinfo->typeinfo->typekind |= 0x2200; - - for (derived = interface->ref; derived; derived = derived->ref) - if (derived->name && !strcmp(derived->name, "IDispatch")) - msft_typeinfo->typeinfo->flags |= 0x1000; /* TYPEFLAG_FDISPATCHABLE */ - - /* can't be dual if it doesn't derive from IDispatch */ - if (!(msft_typeinfo->typeinfo->flags & 0x1000)) /* TYPEFLAG_FDISPATCHABLE */ - msft_typeinfo->typeinfo->flags &= ~0x40; /* TYPEFLAG_FDUAL */ - - if(interface->ref) - add_impl_type(msft_typeinfo, interface->ref, ref_importinfo); - - /* count the number of inherited interfaces and non-local functions */ - for(ref = interface->ref; ref; ref = ref->ref) { - num_parents++; - if (ref->funcs) - LIST_FOR_EACH_ENTRY( func, ref->funcs, const func_t, entry ) - if (!is_local(func->def->attrs)) num_funcs++; - } - msft_typeinfo->typeinfo->datatype2 = num_funcs << 16 | num_parents; - msft_typeinfo->typeinfo->cbSizeVft = num_funcs * 4; - - if (interface->funcs) - LIST_FOR_EACH_ENTRY( func, interface->funcs, const func_t, entry ) - 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 (structure->fields_or_args) - LIST_FOR_EACH_ENTRY( cur, structure->fields_or_args, 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; - - 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 (enumeration->fields_or_args) - LIST_FOR_EACH_ENTRY( cur, enumeration->fields_or_args, 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; - int alignment; - - if (-1 < tdef->typelib_idx) - return; - - tdef->typelib_idx = typelib->typelib_header.nrtypeinfos; - msft_typeinfo = create_msft_typeinfo(typelib, TKIND_ALIAS, tdef->name, tdef->attrs); - encode_type(typelib, get_type_vt(tdef->orig), tdef->orig, &msft_typeinfo->typeinfo->datatype1, &msft_typeinfo->typeinfo->size, - &alignment, &msft_typeinfo->typeinfo->datatype2); - msft_typeinfo->typeinfo->typekind |= (alignment << 11 | alignment << 6); -} - -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; - - 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); - - if (cls->ifaces) LIST_FOR_EACH_ENTRY( iref, cls->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 (cls->ifaces) LIST_FOR_EACH_ENTRY( iref, cls->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_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 = 4; - msft_typeinfo->typeinfo->typekind |= 0x2200; -} - -static void add_module_typeinfo(msft_typelib_t *typelib, type_t *module) -{ - int idx = 0; - const func_t *func; - 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; - - if (module->funcs) - LIST_FOR_EACH_ENTRY( func, module->funcs, const func_t, entry ) - if(add_func_desc(msft_typeinfo, func, idx) == S_OK) - idx++; - - msft_typeinfo->typeinfo->size = idx; -} - -static void add_entry(msft_typelib_t *typelib, typelib_entry_t *entry) -{ - switch(entry->type->kind) { - case TKIND_INTERFACE: - case TKIND_DISPATCH: - add_interface_typeinfo(typelib, entry->type); - break; - - case TKIND_RECORD: - add_structure_typeinfo(typelib, entry->type); - break; - - case TKIND_ENUM: - add_enum_typeinfo(typelib, entry->type); - break; - - case TKIND_ALIAS: - add_typedef_typeinfo(typelib, entry->type); - break; - - case TKIND_COCLASS: - add_coclass_typeinfo(typelib, entry->type); - break; - - case TKIND_MODULE: - add_module_typeinfo(typelib, entry->type); - break; - - default: - error("add_entry: unhandled type %d\n", entry->type->kind); - 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) -{ - typelib->typelib_header.lcid2 = 0x0; - return; -} - -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 int ctl2_write_chunk(int fd, void *segment, int length) -{ - if (write(fd, segment, length) != length) { - close(fd); - return 0; - } - return -1; -} - -static int ctl2_write_segment(msft_typelib_t *typelib, int fd, int segment) -{ - if (write(fd, typelib->typelib_segment_data[segment], typelib->typelib_segdir[segment].length) - != typelib->typelib_segdir[segment].length) { - close(fd); - return 0; - } - - return -1; -} - -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, int fd) -{ - 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]; - ctl2_write_chunk(fd, &typedata_size, sizeof(int)); - if (typeinfo->func_data) - ctl2_write_chunk(fd, typeinfo->func_data + 1, typeinfo->func_data[0]); - if (typeinfo->var_data) - ctl2_write_chunk(fd, typeinfo->var_data + 1, typeinfo->var_data[0]); - if (typeinfo->func_indices) - ctl2_write_chunk(fd, typeinfo->func_indices, (typeinfo->typeinfo->cElement & 0xffff) * 4); - if (typeinfo->var_indices) - ctl2_write_chunk(fd, typeinfo->var_indices, (typeinfo->typeinfo->cElement >> 16) * 4); - if (typeinfo->func_names) - ctl2_write_chunk(fd, typeinfo->func_names, (typeinfo->typeinfo->cElement & 0xffff) * 4); - if (typeinfo->var_names) - ctl2_write_chunk(fd, typeinfo->var_names, (typeinfo->typeinfo->cElement >> 16) * 4); - if (typeinfo->func_offsets) - ctl2_write_chunk(fd, 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; - ctl2_write_chunk(fd, &offset, 4); - } - } - } -} - -static int save_all_changes(msft_typelib_t *typelib) -{ - int retval; - int filepos; - int fd; - - chat("save_all_changes(%p)\n", typelib); - - retval = TYPE_E_IOERROR; - - fd = open(typelib->typelib->filename, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, 0666); - if (fd == -1) return retval; - - 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); - - if (!ctl2_write_chunk(fd, &typelib->typelib_header, sizeof(typelib->typelib_header))) return retval; - if(typelib->typelib_header.varflags & 0x100) - if (!ctl2_write_chunk(fd, &typelib->help_string_dll_offset, sizeof(typelib->help_string_dll_offset))) - return retval; - - if (!ctl2_write_chunk(fd, typelib->typelib_typeinfo_offsets, typelib->typelib_header.nrtypeinfos * 4)) return retval; - if (!ctl2_write_chunk(fd, &typelib->typelib_segdir, sizeof(typelib->typelib_segdir))) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_TYPEINFO )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_GUIDHASH )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_GUID )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_REFERENCES )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_IMPORTINFO )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_IMPORTFILES )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_NAMEHASH )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_NAME )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_STRING )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_TYPEDESC )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_ARRAYDESC )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_CUSTDATA )) return retval; - if (!ctl2_write_segment(typelib, fd, MSFT_SEG_CUSTDATAGUID)) return retval; - - ctl2_write_typeinfos(typelib, fd); - - if (close(fd) == -1) return retval; - - retval = S_OK; - return retval; -} - -int create_msft_typelib(typelib_t *typelib) -{ - msft_typelib_t *msft; - int failed = 0; - typelib_entry_t *entry; - time_t cur_time; - char *time_override; - unsigned int version = 5 << 24 | 1 << 16 | 164; /* 5.01.0164 */ - 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}}; - - msft = xmalloc(sizeof(*msft)); - memset(msft, 0, sizeof(*msft)); - msft->typelib = typelib; - - ctl2_init_header(msft); - ctl2_init_segdir(msft); - - msft->typelib_header.varflags |= SYS_WIN32; - - /* - * 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); - 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); - - LIST_FOR_EACH_ENTRY( entry, &typelib->entries, typelib_entry_t, entry ) - add_entry(msft, entry); - - save_all_changes(msft); - free(msft); - return 1; -} diff --git a/reactos/tools/winebuild/Makefile.in b/reactos/tools/winebuild/Makefile.in deleted file mode 100644 index 77f36917113..00000000000 --- a/reactos/tools/winebuild/Makefile.in +++ /dev/null @@ -1,38 +0,0 @@ -TOPSRCDIR = @top_srcdir@ -TOPOBJDIR = ../.. -SRCDIR = @srcdir@ -VPATH = @srcdir@ -EXEEXT = @EXEEXT@ - -PROGRAMS = winebuild$(EXEEXT) -MANPAGES = winebuild.man -MODULE = none - -C_SRCS = \ - import.c \ - main.c \ - parser.c \ - relay.c \ - res16.c \ - res32.c \ - spec16.c \ - spec32.c \ - utils.c - -INSTALLDIRS = $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man$(prog_manext) - -all: $(PROGRAMS) $(MANPAGES) - -@MAKE_RULES@ - -winebuild$(EXEEXT): $(OBJS) - $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBPORT) $(LDFLAGS) - -install:: $(PROGRAMS) $(MANPAGES) $(INSTALLDIRS) - $(INSTALL_PROGRAM) winebuild$(EXEEXT) $(DESTDIR)$(bindir)/winebuild$(EXEEXT) - $(INSTALL_DATA) winebuild.man $(DESTDIR)$(mandir)/man$(prog_manext)/winebuild.$(prog_manext) - -uninstall:: - $(RM) $(DESTDIR)$(bindir)/winebuild$(EXEEXT) $(DESTDIR)$(mandir)/man$(prog_manext)/winebuild.$(prog_manext) - -@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/reactos/tools/winebuild/build.h b/reactos/tools/winebuild/build.h deleted file mode 100644 index 1aff91b9841..00000000000 --- a/reactos/tools/winebuild/build.h +++ /dev/null @@ -1,236 +0,0 @@ -/* - * 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 - -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_FASTCALL, /* fastcall function (Win32) */ - TYPE_EXTERN, /* external symbol (Win32) */ - TYPE_NBTYPES -} ORD_TYPE; - -typedef enum -{ - SPEC_WIN16, - SPEC_WIN32 -} SPEC_TYPE; - -typedef struct -{ - int n_values; - int *values; -} ORD_VARIABLE; - -typedef struct -{ - char arg_types[21]; -} 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 *init_func; /* initialization routine */ - 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_SPARC, CPU_ALPHA, CPU_POWERPC -}; - -enum target_platform -{ - PLATFORM_UNSPECIFIED, PLATFORM_APPLE, PLATFORM_WINDOWS -}; - -extern enum target_cpu target_cpu; -extern enum target_platform target_platform; - -/* 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_I386 0x10 /* function is i386 only */ -#define FLAG_REGISTER 0x20 /* use register calling convention */ -#define FLAG_PRIVATE 0x40 /* function is private (cannot be imported) */ -#define FLAG_ORDINAL 0x80 /* function should be imported by ordinal */ - -#define FLAG_FORWARD 0x100 /* function is a forwarded name */ -#define FLAG_EXT_LINK 0x200 /* function links to an external symbol */ - -#define MAX_ORDINALS 65535 - -/* global functions */ - -#ifndef __GNUC__ -#define __attribute__(X) -#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 void fatal_error( const char *msg, ... ) - __attribute__ ((__format__ (__printf__, 1, 2))); -extern 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 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 const char *make_c_identifier( const char *str ); -extern const char *get_stub_name( const ORDDEF *odp, const DLLSPEC *spec ); -extern unsigned int get_alignment(unsigned int align); -extern unsigned int get_page_size(void); -extern unsigned int get_ptr_size(void); -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_short_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_ignore_symbol( const char *name ); -extern void add_extra_ld_symbol( const char *name ); -extern void read_undef_symbols( DLLSPEC *spec, char **argv ); -extern int resolve_imports( DLLSPEC *spec ); -extern int has_imports(void); -extern int has_relays( DLLSPEC *spec ); -extern void output_get_pc_thunk(void); -extern void output_stubs( DLLSPEC *spec ); -extern void output_imports( DLLSPEC *spec ); -extern int load_res32_file( const char *name, DLLSPEC *spec ); -extern void output_resources( DLLSPEC *spec ); -extern void load_res16_file( const char *name, DLLSPEC *spec ); -extern void output_res16_data( DLLSPEC *spec ); -extern void output_res16_directory( DLLSPEC *spec, const char *header_name ); - -extern void BuildRelays16(void); -extern void BuildRelays32(void); -extern void BuildSpec16File( DLLSPEC *spec ); -extern void BuildSpec32File( DLLSPEC *spec ); -extern void BuildDef32File( DLLSPEC *spec ); -extern void BuildPedllFile( DLLSPEC *spec ); - -extern int parse_spec_file( FILE *file, DLLSPEC *spec ); -extern int parse_def_file( FILE *file, DLLSPEC *spec ); - -/* global variables */ - -extern int current_line; -extern int UsePIC; -extern int nb_lib_paths; -extern int nb_errors; -extern int display_warnings; -extern int kill_at; -extern int verbose; -extern int save_temps; -extern int link_ext_symbols; - -extern char *input_file_name; -extern char *spec_file_name; -extern FILE *output_file; -extern const char *output_file_name; -extern char **lib_path; - -extern char *as_command; -extern char *ld_command; -extern char *nm_command; - -#endif /* __WINE_BUILD_H */ diff --git a/reactos/tools/winebuild/import.c b/reactos/tools/winebuild/import.c deleted file mode 100644 index 5c54527ccf2..00000000000 --- a/reactos/tools/winebuild/import.c +++ /dev/null @@ -1,1274 +0,0 @@ -/* - * 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 "winglue.h" -#include "build.h" - -struct import -{ - DLLSPEC *spec; /* description of the imported dll */ - char *full_name; /* full name of the input file */ - dev_t dev; /* device/inode of the input file */ - ino_t ino; - int delay; /* delay or not dll loading ? */ - ORDDEF **exports; /* functions exported from this dll */ - int nb_exports; /* number of exported functions */ - ORDDEF **imports; /* functions we want to import from this dll */ - int nb_imports; /* number of imported functions */ -}; - -struct name_table -{ - char **names; - unsigned int count, size; -}; - -static struct name_table undef_symbols; /* list of undefined symbols */ -static struct name_table ignore_symbols; /* list of symbols to ignore */ -static struct name_table extra_ld_symbols; /* list of extra symbols that ld should resolve */ -static struct name_table delayed_imports; /* list of delayed import dlls */ -static struct name_table ext_link_imports; /* list of external symbols to link to */ - -static struct import **dll_imports = NULL; -static int nb_imports = 0; /* number of imported dlls (delayed or not) */ -static int nb_delayed = 0; /* number of delayed dlls */ -static int total_imports = 0; /* total number of imported functions */ -static int total_delayed = 0; /* total number of imported functions in delayed DLLs */ - - -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 ); -} - -/* add a name to a name table */ -static inline void add_name( struct name_table *table, const char *name ) -{ - if (table->count == table->size) - { - table->size += (table->size / 2); - if (table->size < 32) table->size = 32; - table->names = xrealloc( table->names, table->size * sizeof(*table->names) ); - } - table->names[table->count++] = xstrdup( name ); -} - -/* remove a name from a name table */ -static inline void remove_name( struct name_table *table, unsigned int idx ) -{ - assert( idx < table->count ); - free( table->names[idx] ); - memmove( table->names + idx, table->names + idx + 1, - (table->count - idx - 1) * sizeof(*table->names) ); - table->count--; -} - -/* make a name table empty */ -static inline void empty_name_table( struct name_table *table ) -{ - unsigned int i; - - for (i = 0; i < table->count; i++) free( table->names[i] ); - table->count = 0; -} - -/* locate a name in a (sorted) list */ -static inline const char *find_name( const char *name, const struct name_table *table ) -{ - char **res = NULL; - - if (table->count) res = bsearch( &name, table->names, table->count, sizeof(*table->names), name_cmp ); - return res ? *res : NULL; -} - -/* sort a name table */ -static inline void sort_names( struct name_table *table ) -{ - if (table->count) qsort( table->names, table->count, sizeof(*table->names), 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_dll_spec( imp->spec ); - 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.names[i], name )) return 1; - } - return 0; -} - -/* check whether a given dll has already been imported */ -static struct import *is_already_imported( const char *name ) -{ - int i; - - for (i = 0; i < nb_imports; i++) - { - if (!strcmp( dll_imports[i]->spec->file_name, name )) return dll_imports[i]; - } - 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 = xmalloc( strlen(path) + strlen(name) + 9 ); - sprintf( buffer, "%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; - int i; - - for (i = 0; i < nb_lib_paths; i++) - { - if ((fullname = try_library_path( lib_path[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 int read_import_lib( struct import *imp ) -{ - FILE *f; - int i, ret; - struct stat stat; - struct import *prev_imp; - DLLSPEC *spec = imp->spec; - - f = open_input_file( NULL, imp->full_name ); - fstat( fileno(f), &stat ); - imp->dev = stat.st_dev; - imp->ino = stat.st_ino; - ret = parse_def_file( f, spec ); - close_input_file( f ); - if (!ret) return 0; - - /* check if we already imported that library from a different file */ - if ((prev_imp = is_already_imported( 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 ); - return 0; /* the same file was already loaded, ignore this one */ - } - - if (is_delayed_import( spec->file_name )) - { - imp->delay = 1; - nb_delayed++; - } - - 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 1; -} - -/* 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 ) -{ - struct import *imp = xmalloc( sizeof(*imp) ); - - imp->spec = alloc_dll_spec(); - imp->spec->file_name = get_dll_name( name, filename ); - imp->delay = 0; - imp->imports = NULL; - imp->nb_imports = 0; - imp->exports = NULL; - imp->nb_exports = 0; - - if (filename) imp->full_name = xstrdup( filename ); - else imp->full_name = find_library( name ); - - if (read_import_lib( imp )) - { - dll_imports = xrealloc( dll_imports, (nb_imports+1) * sizeof(*dll_imports) ); - dll_imports[nb_imports++] = imp; - } - else - { - free_imports( imp ); - if (nb_errors) exit(1); - } -} - -/* 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 ); - - add_name( &delayed_imports, fullname ); - if ((imp = is_already_imported( fullname )) && !imp->delay) - { - imp->delay = 1; - nb_delayed++; - } - free( fullname ); -} - -/* remove an imported dll, based on its index in the dll_imports array */ -static void remove_import_dll( int index ) -{ - struct import *imp = dll_imports[index]; - - memmove( &dll_imports[index], &dll_imports[index+1], sizeof(imp) * (nb_imports - index - 1) ); - nb_imports--; - if (imp->delay) nb_delayed--; - free_imports( imp ); -} - -/* add a symbol to the ignored symbol list */ -/* if the name starts with '-' the symbol is removed instead */ -void add_ignore_symbol( const char *name ) -{ - unsigned int i; - - if (name[0] == '-') /* remove it */ - { - if (!name[1]) empty_name_table( &ignore_symbols ); /* remove everything */ - else for (i = 0; i < ignore_symbols.count; i++) - { - if (!strcmp( ignore_symbols.names[i], name+1 )) remove_name( &ignore_symbols, i-- ); - } - } - else add_name( &ignore_symbols, name ); -} - -/* add a symbol to the list of extra symbols that ld must resolve */ -void add_extra_ld_symbol( const char *name ) -{ - add_name( &extra_ld_symbols, name ); -} - -/* add a function to the list of imports from a given dll */ -static void add_import_func( struct import *imp, ORDDEF *func ) -{ - imp->imports = xrealloc( imp->imports, (imp->nb_imports+1) * sizeof(*imp->imports) ); - imp->imports[imp->nb_imports++] = func; - total_imports++; - if (imp->delay) total_delayed++; -} - -/* 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"; - 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 (nb_delayed) 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->spec->file_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 ) -{ - char *link_name, *api_name, *dll_name, *p; - int i, j; - - 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 ); - - for (j = 0; j < nb_imports; j++) - { - struct import *imp = dll_imports[j]; - - if (strcasecmp( imp->spec->file_name, dll_name )) continue; - 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->spec->file_name ); - break; - } - if (j == nb_imports) - 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) 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: - if (link_ext_symbols) - { - odp->flags |= FLAG_EXT_LINK; - add_name( &ext_link_imports, odp->link_name ); - } - 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) 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.names[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 ) -{ - unsigned int i, len = 0; - char *cmd, *p, *ld_tmp_file, *undef_file; - int err; - - undef_file = create_undef_symbols_file( spec ); - len += strlen(undef_file) + 1; - ld_tmp_file = get_temp_file_name( output_file_name, ".o" ); - if (!ld_command) ld_command = xstrdup("ld"); - for (i = 0; argv[i]; i++) len += strlen(argv[i]) + 1; - cmd = p = xmalloc( len + strlen(ld_tmp_file) + 8 + strlen(ld_command) ); - p += sprintf( cmd, "%s -r -o %s %s", ld_command, ld_tmp_file, undef_file ); - for (i = 0; argv[i]; i++) - p += sprintf( p, " %s", argv[i] ); - if (verbose) fprintf( stderr, "%s\n", cmd ); - err = system( cmd ); - if (err) fatal_error( "%s -r failed with status %d\n", ld_command, err ); - free( cmd ); - 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; - 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 ); - - if (!nm_command) nm_command = xstrdup("nm"); - cmd = xmalloc( strlen(nm_command) + strlen(name) + 5 ); - sprintf( cmd, "%s -u %s", nm_command, 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; - add_name( &undef_symbols, p ); - } - if ((err = pclose( f ))) warning( "%s failed with status %d\n", cmd, err ); - free( cmd ); -} - -/* resolve the imports for a Win32 module */ -int resolve_imports( DLLSPEC *spec ) -{ - int i; - unsigned int j, removed; - ORDDEF *odp; - - sort_names( &ignore_symbols ); - check_undefined_forwards( spec ); - - for (i = 0; i < nb_imports; i++) - { - struct import *imp = dll_imports[i]; - - for (j = removed = 0; j < undef_symbols.count; j++) - { - if (find_name( undef_symbols.names[j], &ignore_symbols )) continue; - odp = find_export( undef_symbols.names[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->spec->file_name ); - else - { - add_import_func( imp, odp ); - remove_name( &undef_symbols, j-- ); - removed++; - } - } - } - if (!removed) - { - /* the dll is not used, get rid of it */ - if (check_unused( imp, spec )) - warning( "winebuild: %s imported but no symbols used\n", imp->spec->file_name ); - remove_import_dll( i ); - i--; - } - } - - sort_names( &undef_symbols ); - check_undefined_exports( spec ); - - return 1; -} - -/* output the get_pc thunk if needed */ -void output_get_pc_thunk(void) -{ - if (target_cpu != CPU_x86) return; - if (!UsePIC) return; - 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( "\tpopl %%eax\n" ); - output( "\tpushl %%eax\n" ); - output( "\tret\n" ); - 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) ); - - 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 ); - } - break; - case CPU_x86_64: - output( "\tjmpq *%s+%d(%%rip)\n", table, pos ); - break; - case CPU_SPARC: - if ( !UsePIC ) - { - output( "\tsethi %%hi(%s+%d), %%g1\n", table, pos ); - output( "\tld [%%g1+%%lo(%s+%d)], %%g1\n", table, pos ); - output( "\tjmp %%g1\n" ); - output( "\tnop\n" ); - } - else - { - /* Hmpf. Stupid sparc assembler always interprets global variable - names as GOT offsets, so we have to do it the long way ... */ - output( "\tsave %%sp, -96, %%sp\n" ); - output( "0:\tcall 1f\n" ); - output( "\tnop\n" ); - output( "1:\tsethi %%hi(%s+%d-0b), %%g1\n", table, pos ); - output( "\tor %%g1, %%lo(%s+%d-0b), %%g1\n", table, pos ); - output( "\tld [%%g1+%%o7], %%g1\n" ); - output( "\tjmp %%g1\n" ); - output( "\trestore\n" ); - } - break; - case CPU_ALPHA: - output( "\tlda $0,%s\n", table ); - output( "\tlda $0,%d($0)\n", pos ); - output( "\tjmp $31,($0)\n" ); - break; - case CPU_POWERPC: - output( "\taddi %s, %s, -0x4\n", ppc_reg(1), ppc_reg(1) ); - output( "\tstw %s, 0(%s)\n", ppc_reg(9), ppc_reg(1) ); - output( "\taddi %s, %s, -0x4\n", ppc_reg(1), ppc_reg(1) ); - output( "\tstw %s, 0(%s)\n", ppc_reg(8), ppc_reg(1) ); - output( "\taddi %s, %s, -0x4\n", ppc_reg(1), ppc_reg(1) ); - output( "\tstw %s, 0(%s)\n", ppc_reg(7), ppc_reg(1) ); - if (target_platform == PLATFORM_APPLE) - { - output( "\tlis %s, ha16(%s+%d)\n", ppc_reg(9), table, pos ); - output( "\tla %s, lo16(%s+%d)(%s)\n", ppc_reg(8), table, pos, ppc_reg(9) ); - } - else - { - output( "\tlis %s, (%s+%d)@h\n", ppc_reg(9), table, pos ); - output( "\tla %s, (%s+%d)@l(%s)\n", ppc_reg(8), table, pos, ppc_reg(9) ); - } - output( "\tlwz %s, 0(%s)\n", ppc_reg(7), ppc_reg(8) ); - output( "\tmtctr %s\n", ppc_reg(7) ); - output( "\tlwz %s, 0(%s)\n", ppc_reg(7), ppc_reg(1) ); - output( "\taddi %s, %s, 0x4\n", ppc_reg(1), ppc_reg(1) ); - output( "\tlwz %s, 0(%s)\n", ppc_reg(8), ppc_reg(1) ); - output( "\taddi %s, %s, 0x4\n", ppc_reg(1), ppc_reg(1) ); - output( "\tlwz %s, 0(%s)\n", ppc_reg(9), ppc_reg(1) ); - output( "\taddi %s, %s, 0x4\n", ppc_reg(1), ppc_reg(1) ); - output( "\tbctr\n" ); - break; - } - output_function_size( name ); -} - -/* check if we need an import directory */ -int has_imports(void) -{ - return (nb_imports - nb_delayed) > 0; -} - -/* output the import table of a Win32 module */ -static void output_immediate_imports(void) -{ - int i, j; - const char *dll_name; - - if (nb_imports == nb_delayed) 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 */ - - for (i = j = 0; i < nb_imports; i++) - { - if (dll_imports[i]->delay) continue; - dll_name = make_c_identifier( dll_imports[i]->spec->file_name ); - 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 */ - dll_name ); - output( "\t.long .L__wine_spec_import_data_ptrs+%d-.L__wine_spec_rva_base\n", /* FirstThunk */ - j * get_ptr_size() ); - j += dll_imports[i]->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( ".L__wine_spec_import_data_names:\n" ); - for (i = 0; i < nb_imports; i++) - { - if (dll_imports[i]->delay) continue; - dll_name = make_c_identifier( dll_imports[i]->spec->file_name ); - for (j = 0; j < dll_imports[i]->nb_imports; j++) - { - ORDDEF *odp = dll_imports[i]->imports[j]; - if (!(odp->flags & FLAG_NONAME)) - output( "\t%s .L__wine_spec_import_data_%s_%s-.L__wine_spec_rva_base\n", - get_asm_ptr_keyword(), dll_name, odp->name ); - else - { - if (get_ptr_size() == 8) - output( "\t.quad 0x800000000000%04x\n", odp->ordinal ); - else - output( "\t.long 0x8000%04x\n", odp->ordinal ); - } - } - output( "\t%s 0\n", get_asm_ptr_keyword() ); - } - output( ".L__wine_spec_import_data_ptrs:\n" ); - for (i = 0; i < nb_imports; i++) - { - if (dll_imports[i]->delay) continue; - for (j = 0; j < dll_imports[i]->nb_imports; j++) output( "\t%s 0\n", get_asm_ptr_keyword() ); - output( "\t%s 0\n", get_asm_ptr_keyword() ); - } - output( ".L__wine_spec_imports_end:\n" ); - - for (i = 0; i < nb_imports; i++) - { - if (dll_imports[i]->delay) continue; - dll_name = make_c_identifier( dll_imports[i]->spec->file_name ); - for (j = 0; j < dll_imports[i]->nb_imports; j++) - { - ORDDEF *odp = dll_imports[i]->imports[j]; - if (!(odp->flags & FLAG_NONAME)) - { - output( "\t.align %d\n", get_alignment(2) ); - output( ".L__wine_spec_import_data_%s_%s:\n", dll_name, odp->name ); - output( "\t%s %d\n", get_asm_short_keyword(), odp->ordinal ); - output( "\t%s \"%s\"\n", get_asm_string_keyword(), odp->name ); - } - } - } - - for (i = 0; i < nb_imports; i++) - { - if (dll_imports[i]->delay) continue; - dll_name = make_c_identifier( dll_imports[i]->spec->file_name ); - output( ".L__wine_spec_import_name_%s:\n\t%s \"%s\"\n", - dll_name, get_asm_string_keyword(), dll_imports[i]->spec->file_name ); - } -} - -/* output the import thunks of a Win32 module */ -static void output_immediate_import_thunks(void) -{ - int i, j, pos; - int nb_imm = nb_imports - nb_delayed; - static const char import_thunks[] = "__wine_spec_import_thunks"; - - if (!nb_imm) 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)); - - for (i = pos = 0; i < nb_imports; i++) - { - if (dll_imports[i]->delay) continue; - for (j = 0; j < dll_imports[i]->nb_imports; j++, pos += get_ptr_size()) - { - ORDDEF *odp = dll_imports[i]->imports[j]; - output_import_thunk( odp->name ? odp->name : odp->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 i, j, mod; - - if (!nb_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 */ - - for (i = j = mod = 0; i < nb_imports; i++) - { - if (!dll_imports[i]->delay) continue; - output( "\t%s 0\n", get_asm_ptr_keyword() ); /* grAttrs */ - output( "\t%s .L__wine_delay_name_%d\n", /* szName */ - get_asm_ptr_keyword(), i ); - 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 += dll_imports[i]->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" ); - for (i = 0; i < nb_imports; i++) - { - if (!dll_imports[i]->delay) continue; - for (j = 0; j < dll_imports[i]->nb_imports; j++) - { - ORDDEF *odp = dll_imports[i]->imports[j]; - const char *name = odp->name ? odp->name : odp->export_name; - output( "\t%s .L__wine_delay_imp_%d_%s\n", - get_asm_ptr_keyword(), i, name ); - } - } - - output( "\n.L__wine_delay_INT:\n" ); - for (i = 0; i < nb_imports; i++) - { - if (!dll_imports[i]->delay) continue; - for (j = 0; j < dll_imports[i]->nb_imports; j++) - { - ORDDEF *odp = dll_imports[i]->imports[j]; - if (!odp->name) - output( "\t%s %d\n", get_asm_ptr_keyword(), odp->ordinal ); - else - output( "\t%s .L__wine_delay_data_%d_%s\n", - get_asm_ptr_keyword(), i, odp->name ); - } - } - - output( "\n.L__wine_delay_modules:\n" ); - for (i = 0; i < nb_imports; i++) - { - if (dll_imports[i]->delay) output( "\t%s 0\n", get_asm_ptr_keyword() ); - } - - for (i = 0; i < nb_imports; i++) - { - if (!dll_imports[i]->delay) continue; - output( ".L__wine_delay_name_%d:\n", i ); - output( "\t%s \"%s\"\n", - get_asm_string_keyword(), dll_imports[i]->spec->file_name ); - } - - for (i = 0; i < nb_imports; i++) - { - if (!dll_imports[i]->delay) continue; - for (j = 0; j < dll_imports[i]->nb_imports; j++) - { - ORDDEF *odp = dll_imports[i]->imports[j]; - if (!odp->name) continue; - output( ".L__wine_delay_data_%d_%s:\n", i, odp->name ); - output( "\t%s \"%s\"\n", get_asm_string_keyword(), odp->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 i, idx, j, pos, extra_stack_storage = 0; - static const char delayed_import_loaders[] = "__wine_spec_delayed_import_loaders"; - static const char delayed_import_thunks[] = "__wine_spec_delayed_import_thunks"; - - if (!nb_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") ); - switch(target_cpu) - { - case CPU_x86: - output( "\tpushl %%ecx\n" ); - output( "\tpushl %%edx\n" ); - output( "\tpushl %%eax\n" ); - output( "\tcall %s\n", asm_name("__wine_spec_delay_load") ); - output( "\tpopl %%edx\n" ); - output( "\tpopl %%ecx\n" ); - output( "\tjmp *%%eax\n" ); - break; - case CPU_x86_64: - output( "\tpushq %%rdi\n" ); - output( "\tpushq %%rsi\n" ); - output( "\tpushq %%rdx\n" ); - output( "\tpushq %%rcx\n" ); - output( "\tpushq %%r8\n" ); - output( "\tpushq %%r9\n" ); - output( "\tsubq $8,%%rsp\n" ); - output( "\tmovq %%r11,%%rdi\n" ); - output( "\tcall %s\n", asm_name("__wine_spec_delay_load") ); - output( "\taddq $8,%%rsp\n" ); - output( "\tpopq %%r9\n" ); - output( "\tpopq %%r8\n" ); - output( "\tpopq %%rcx\n" ); - output( "\tpopq %%rdx\n" ); - output( "\tpopq %%rsi\n" ); - output( "\tpopq %%rdi\n" ); - output( "\tjmp *%%rax\n" ); - break; - case CPU_SPARC: - output( "\tsave %%sp, -96, %%sp\n" ); - output( "\tcall %s\n", asm_name("__wine_spec_delay_load") ); - output( "\tmov %%g1, %%o0\n" ); - output( "\tjmp %%o0\n" ); - output( "\trestore\n" ); - break; - case CPU_ALPHA: - output( "\tjsr $26,%s\n", asm_name("__wine_spec_delay_load") ); - output( "\tjmp $31,($0)\n" ); - 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_function_size( "__wine_delay_load_asm" ); - output( "\n" ); - - for (i = idx = 0; i < nb_imports; i++) - { - if (!dll_imports[i]->delay) continue; - for (j = 0; j < dll_imports[i]->nb_imports; j++) - { - ORDDEF *odp = dll_imports[i]->imports[j]; - const char *name = odp->name ? odp->name : odp->export_name; - - output( ".L__wine_delay_imp_%d_%s:\n", i, name ); - 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,%%r11\n", (idx << 16) | j ); - output( "\tjmp %s\n", asm_name("__wine_delay_load_asm") ); - break; - case CPU_SPARC: - output( "\tset %d, %%g1\n", (idx << 16) | j ); - output( "\tb,a %s\n", asm_name("__wine_delay_load_asm") ); - break; - case CPU_ALPHA: - output( "\tlda $0,%d($31)\n", j); - output( "\tldah $0,%d($0)\n", idx); - output( "\tjmp $31,%s\n", asm_name("__wine_delay_load_asm") ); - 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; - } - } - 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)); - for (i = pos = 0; i < nb_imports; i++) - { - if (!dll_imports[i]->delay) continue; - for (j = 0; j < dll_imports[i]->nb_imports; j++, pos += get_ptr_size()) - { - ORDDEF *odp = dll_imports[i]->imports[j]; - output_import_thunk( odp->name ? odp->name : odp->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.names[i-1], ext_link_imports.names[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.names[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[256]; - sprintf( buffer, "__wine_spec_ext_link_%s", ext_link_imports.names[i] ); - output_import_thunk( buffer, ".L__wine_spec_external_links", pos ); - 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", asm_name(name) ); - - /* 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 $4,%%esp\n" ); - if (UsePIC) - { - output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") ); - output( "1:" ); - if (exp_name) - { - output( "\tleal .L%s_string-1b(%%eax),%%ecx\n", name ); - output( "\tpushl %%ecx\n" ); - count++; - } - else - output( "\tpushl $%d\n", odp->ordinal ); - output( "\tleal .L__wine_spec_file_name-1b(%%eax),%%ecx\n" ); - output( "\tpushl %%ecx\n" ); - } - else - { - if (exp_name) - { - output( "\tpushl $.L%s_string\n", name ); - count++; - } - else - output( "\tpushl $%d\n", odp->ordinal ); - output( "\tpushl $.L__wine_spec_file_name\n" ); - } - output( "\tcall %s\n", asm_name("__wine_spec_unimplemented_stub") ); - 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 ); - if (nb_imports || ext_link_imports.count || has_stubs(spec) || has_relays(spec)) - output_get_pc_thunk(); -} diff --git a/reactos/tools/winebuild/main.c b/reactos/tools/winebuild/main.c deleted file mode 100644 index 6614680f5a8..00000000000 --- a/reactos/tools/winebuild/main.c +++ /dev/null @@ -1,662 +0,0 @@ -/* - * 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 "winglue.h" -#include "build.h" - -int UsePIC = 0; -int nb_lib_paths = 0; -int nb_errors = 0; -int display_warnings = 0; -int kill_at = 0; -int verbose = 0; -int save_temps = 0; -int link_ext_symbols = 0; - -#if defined(__i386__) || defined(__x86_64__) -enum target_cpu target_cpu = CPU_x86; -#elif defined(__x86_64__) -enum target_cpu target_cpu = CPU_x86_64; -#elif defined(__sparc__) -enum target_cpu target_cpu = CPU_SPARC; -#elif defined(__ALPHA__) -enum target_cpu target_cpu = CPU_ALPHA; -#elif defined(__powerpc__) -enum target_cpu target_cpu = CPU_POWERPC; -#else -#error Unsupported CPU -#endif - -#ifdef __APPLE__ -enum target_platform target_platform = PLATFORM_APPLE; -#elif defined(_WINDOWS) -enum target_platform target_platform = PLATFORM_WINDOWS; -#else -enum target_platform target_platform = PLATFORM_UNSPECIFIED; -#endif - -char **lib_path = 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; - -char *as_command = NULL; -char *ld_command = NULL; -char *nm_command = NULL; - -static int nb_res_files; -static char **res_files; - -/* execution mode */ -enum exec_mode_values -{ - MODE_NONE, - MODE_DLL, - MODE_EXE, - MODE_DEF, - MODE_RELAY16, - MODE_RELAY32, - MODE_PEDLL -}; - -static enum exec_mode_values exec_mode = MODE_NONE; - -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 }, - { "x86_64", CPU_x86_64 }, - { "sparc", CPU_SPARC }, - { "alpha", CPU_ALPHA }, - { "powerpc", CPU_POWERPC } -}; - -static const struct -{ - const char *name; - enum target_platform platform; -} platform_names[] = -{ - { "macos", PLATFORM_APPLE }, - { "darwin", PLATFORM_APPLE }, - { "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 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 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 */ - - /* get the CPU part */ - - if (!(p = strchr( spec, '-' ))) fatal_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 )) break; - } - if (i < sizeof(cpu_names)/sizeof(cpu_names[0])) target_cpu = cpu_names[i].cpu; - else fatal_error( "Unrecognized CPU '%s'\n", spec ); - - platform = p; - if ((p = strrchr( p, '-' ))) platform = p + 1; - - /* 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 ); - - if (!as_command) - { - as_command = xmalloc( strlen(target) + sizeof("-as") ); - strcpy( as_command, target ); - strcat( as_command, "-as" ); - } - if (!ld_command) - { - ld_command = xmalloc( strlen(target) + sizeof("-ld") ); - strcpy( ld_command, target ); - strcat( ld_command, "-ld" ); - } - if (!nm_command) - { - nm_command = xmalloc( strlen(target) + sizeof("-nm") ); - strcpy( nm_command, target ); - strcat( nm_command, "-nm" ); - } -} - -/* 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" -" -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 (only -fPIC is supported)\n" -" -F, --filename=DLLFILE Set the DLL filename (default: from input file name)\n" -" -h, --help Display this help message\n" -" -H, --heap=SIZE Set the heap size for a Win16 dll\n" -" -i, --ignore=SYM[,SYM] Ignore specified symbols when resolving imports\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" -" --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" -" -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)\n" -" --target=TARGET Specify target CPU and platform for cross-compiling\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" -" --relay16 Build the 16-bit relay assembly routines\n" -" --relay32 Build the 32-bit relay assembly routines\n\n" -" --pedll Build a .c file for PE dll\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_ASCMD, - LONG_OPT_EXTERNAL_SYMS, - LONG_OPT_LDCMD, - LONG_OPT_NMCMD, - LONG_OPT_NXCOMPAT, - LONG_OPT_RELAY16, - LONG_OPT_RELAY32, - LONG_OPT_SAVE_TEMPS, - LONG_OPT_SUBSYSTEM, - LONG_OPT_TARGET, - LONG_OPT_VERSION, - LONG_OPT_PEDLL -}; - -static const char short_options[] = "C:D:E:F:H:I:K:L:M:N:d:e:f:hi:kl: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 }, - { "as-cmd", 1, 0, LONG_OPT_ASCMD }, - { "external-symbols", 0, 0, LONG_OPT_EXTERNAL_SYMS }, - { "ld-cmd", 1, 0, LONG_OPT_LDCMD }, - { "nm-cmd", 1, 0, LONG_OPT_NMCMD }, - { "nxcompat", 1, 0, LONG_OPT_NXCOMPAT }, - { "relay16", 0, 0, LONG_OPT_RELAY16 }, - { "relay32", 0, 0, LONG_OPT_RELAY32 }, - { "save-temps", 0, 0, LONG_OPT_SAVE_TEMPS }, - { "subsystem", 1, 0, LONG_OPT_SUBSYSTEM }, - { "target", 1, 0, LONG_OPT_TARGET }, - { "version", 0, 0, LONG_OPT_VERSION }, - { "pedll", 1, 0, LONG_OPT_PEDLL }, - /* aliases for short options */ - { "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' }, - { "ignore", 1, 0, 'i' }, - { "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; - - 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': - lib_path = xrealloc( lib_path, (nb_lib_paths+1) * sizeof(*lib_path) ); - lib_path[nb_lib_paths++] = xstrdup( optarg ); - break; - case 'M': - spec->type = SPEC_WIN16; - break; - case 'N': - spec->dll_name = xstrdup( 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; - /* ignore all other flags */ - break; - case 'h': - usage(0); - break; - case 'i': - { - char *str = xstrdup( optarg ); - char *token = strtok( str, "," ); - while (token) - { - add_ignore_symbol( token ); - token = strtok( NULL, "," ); - } - free( str ); - } - 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': - res_files = xrealloc( res_files, (nb_res_files+1) * sizeof(*res_files) ); - res_files[nb_res_files++] = xstrdup( optarg ); - 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_ASCMD: - as_command = xstrdup( optarg ); - break; - case LONG_OPT_EXTERNAL_SYMS: - link_ext_symbols = 1; - break; - case LONG_OPT_LDCMD: - ld_command = xstrdup( optarg ); - break; - case LONG_OPT_NMCMD: - nm_command = xstrdup( optarg ); - break; - case LONG_OPT_NXCOMPAT: - if (optarg[0] == 'n' || optarg[0] == 'N') - spec->dll_characteristics &= ~IMAGE_DLLCHARACTERISTICS_NX_COMPAT; - break; - case LONG_OPT_RELAY16: - set_exec_mode( MODE_RELAY16 ); - break; - case LONG_OPT_RELAY32: - set_exec_mode( MODE_RELAY32 ); - break; - case LONG_OPT_SAVE_TEMPS: - save_temps = 1; - break; - case LONG_OPT_SUBSYSTEM: - set_subsystem( optarg, spec ); - break; - case LONG_OPT_TARGET: - set_target( optarg ); - break; - case LONG_OPT_VERSION: - printf( "winebuild version " PACKAGE_VERSION "\n" ); - exit(0); - case LONG_OPT_PEDLL: - set_exec_mode( MODE_PEDLL ); - spec_file_name = xstrdup( optarg ); - set_dll_file_name( optarg, spec ); - break; - case '?': - usage(1); - break; - } - } - - if (spec->file_name && !strchr( spec->file_name, '.' )) - strcat( spec->file_name, exec_mode == MODE_EXE ? ".exe" : ".dll" ); - - 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 < nb_res_files; i++) load_res16_file( res_files[i], spec ); - break; - - case SPEC_WIN32: - for (i = 0; i < nb_res_files; i++) - { - if (!load_res32_file( res_files[i], spec )) - fatal_error( "%s is not a valid Win32 resource file\n", res_files[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 main(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; - load_resources( argv, spec ); - load_import_libs( argv ); - if (!spec_file_name) fatal_error( "missing .spec file\n" ); - if (!parse_input_file( spec )) break; - switch (spec->type) - { - case SPEC_WIN16: - fatal_error( "Win16 specs are not supported in ReactOS version of winebuild\n" ); - break; - case SPEC_WIN32: - read_undef_symbols( spec, argv ); - BuildSpec32File( spec ); - break; - default: assert(0); - } - break; - case MODE_EXE: - if (spec->type == SPEC_WIN16) fatal_error( "Cannot build 16-bit exe files\n" ); - if (!spec->file_name) fatal_error( "executable must be named via the -F option\n" ); - load_resources( argv, spec ); - load_import_libs( argv ); - if (spec_file_name && !parse_input_file( spec )) break; - read_undef_symbols( spec, argv ); - BuildSpec32File( spec ); - break; - case MODE_DEF: - if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] ); - if (spec->type == SPEC_WIN16) fatal_error( "Cannot yet build .def file for 16-bit dlls\n" ); - if (!spec_file_name) fatal_error( "missing .spec file\n" ); - if (!parse_input_file( spec )) break; - BuildDef32File( spec ); - break; - case MODE_RELAY16: - fatal_error( "Win16 relays are not supported in ReactOS version of winebuild\n" ); - break; - case MODE_RELAY32: - fatal_error( "Win32 relays are not supported in ReactOS version of winebuild\n" ); - break; - case MODE_PEDLL: - if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] ); - if (!parse_input_file( spec )) break; - BuildPedllFile( 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; -} diff --git a/reactos/tools/winebuild/mkstemps.c b/reactos/tools/winebuild/mkstemps.c deleted file mode 100644 index 9919eac949f..00000000000 --- a/reactos/tools/winebuild/mkstemps.c +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 1991, 1992, 1996, 1998 Free Software Foundation, Inc. - This file is derived from mkstemp.c from the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_PROCESS_H -#include -#endif - -/* We need to provide a type for gcc_uint64_t. */ -#ifdef __GNUC__ -__extension__ typedef unsigned long long gcc_uint64_t; -#else -typedef unsigned long gcc_uint64_t; -#endif - -#ifndef TMP_MAX -#define TMP_MAX 16384 -#endif - -/* - -@deftypefn Replacement int mkstemps (char *@var{template}, int @var{suffix_len}) - -Generate a unique temporary file name from @var{template}. -@var{template} has the form: - -@example - @var{path}/ccXXXXXX@var{suffix} -@end example - -@var{suffix_len} tells us how long @var{suffix} is (it can be zero -length). The last six characters of @var{template} before @var{suffix} -must be @samp{XXXXXX}; they are replaced with a string that makes the -filename unique. Returns a file descriptor open on the file for -reading and writing. - -@end deftypefn - -*/ - -int -mkstemps ( - char *template, - int suffix_len) -{ - static const char letters[] - = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - static gcc_uint64_t value; -#ifdef HAVE_GETTIMEOFDAY - struct timeval tv; -#endif - char *XXXXXX; - size_t len; - int count; - - len = strlen (template); - - if ((int) len < 6 + suffix_len - || strncmp (&template[len - 6 - suffix_len], "XXXXXX", 6)) - { - return -1; - } - - XXXXXX = &template[len - 6 - suffix_len]; - -#ifdef HAVE_GETTIMEOFDAY - /* Get some more or less random data. */ - gettimeofday (&tv, NULL); - value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid (); -#else - value += getpid (); -#endif - - for (count = 0; count < TMP_MAX; ++count) - { - gcc_uint64_t v = value; - int fd; - - /* Fill in the random bits. */ - XXXXXX[0] = letters[v % 62]; - v /= 62; - XXXXXX[1] = letters[v % 62]; - v /= 62; - XXXXXX[2] = letters[v % 62]; - v /= 62; - XXXXXX[3] = letters[v % 62]; - v /= 62; - XXXXXX[4] = letters[v % 62]; - v /= 62; - XXXXXX[5] = letters[v % 62]; - -#ifdef VMS - fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600, "fop=tmd"); -#else - fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600); -#endif - if (fd >= 0) - /* The file does not exist. */ - return fd; - - /* This is a random value. It is only necessary that the next - TMP_MAX values generated by adding 7777 to VALUE are different - with (module 2^32). */ - value += 7777; - } - - /* We return the null string if we can't find a unique file name. */ - template[0] = '\0'; - return -1; -} diff --git a/reactos/tools/winebuild/parser.c b/reactos/tools/winebuild/parser.c deleted file mode 100644 index 304899dfa22..00000000000 --- a/reactos/tools/winebuild/parser.c +++ /dev/null @@ -1,986 +0,0 @@ -/* - * 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 "winglue.h" -#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 */ - "fastcall", /* TYPE_FASTCALL */ - "extern" /* TYPE_EXTERN */ -}; - -static const char * const FlagNames[] = -{ - "norelay", /* FLAG_NORELAY */ - "noname", /* FLAG_NONAME */ - "ret16", /* FLAG_RET16 */ - "ret64", /* FLAG_RET64 */ - "i386", /* FLAG_I386 */ - "register", /* FLAG_REGISTER */ - "private", /* FLAG_PRIVATE */ - "ordinal", /* FLAG_ORDINAL */ - NULL -}; - -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 = ParseNext; - 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 ) -{ - 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) ); - } - return &spec->entry_points[spec->nb_entry_points++]; -} - -/******************************************************************* - * parse_spec_variable - * - * Parse a variable definition in a .spec file. - */ -static int parse_spec_variable( ORDDEF *odp, DLLSPEC *spec ) -{ - char *endptr; - 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++] = strtol(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_export - * - * Parse an exported function definition in a .spec file. - */ -static int parse_spec_export( ORDDEF *odp, DLLSPEC *spec ) -{ - const char *token; - unsigned int i; - - switch(spec->type) - { - case SPEC_WIN16: - if (odp->type == TYPE_STDCALL) - { - error( "'stdcall' not supported for Win16\n" ); - return 0; - } - break; - case SPEC_WIN32: - if (odp->type == TYPE_PASCAL) - { - error( "'pascal' not supported for Win32\n" ); - return 0; - } - break; - default: - break; - } - - if (!(token = GetToken(0))) return 0; - if (*token != '(') - { - error( "Expected '(' got '%s'\n", token ); - return 0; - } - - for (i = 0; i < sizeof(odp->u.func.arg_types); i++) - { - if (!(token = GetToken(0))) return 0; - if (*token == ')') - break; - - if (!strcmp(token, "word")) - odp->u.func.arg_types[i] = 'w'; - else if (!strcmp(token, "s_word")) - odp->u.func.arg_types[i] = 's'; - else if (!strcmp(token, "long") || !strcmp(token, "segptr")) - odp->u.func.arg_types[i] = 'l'; - else if (!strcmp(token, "ptr")) - odp->u.func.arg_types[i] = 'p'; - else if (!strcmp(token, "str")) - odp->u.func.arg_types[i] = 't'; - else if (!strcmp(token, "wstr")) - odp->u.func.arg_types[i] = 'W'; - else if (!strcmp(token, "segstr")) - odp->u.func.arg_types[i] = 'T'; - else if (!strcmp(token, "double")) - { - odp->u.func.arg_types[i++] = 'l'; - if (get_ptr_size() == 4 && i < sizeof(odp->u.func.arg_types)) - odp->u.func.arg_types[i] = 'l'; - } - else - { - error( "Unknown argument type '%s'\n", token ); - return 0; - } - - if (spec->type == SPEC_WIN32) - { - if (strcmp(token, "long") && - strcmp(token, "ptr") && - strcmp(token, "str") && - strcmp(token, "wstr") && - strcmp(token, "double")) - { - error( "Type '%s' not supported for Win32\n", token ); - return 0; - } - } - } - if ((*token != ')') || (i >= sizeof(odp->u.func.arg_types))) - { - error( "Too many arguments\n" ); - return 0; - } - - odp->u.func.arg_types[i] = '\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 (spec->type == SPEC_WIN16) - { - error( "Forwarded functions not supported for Win16\n" ); - return 0; - } - odp->flags |= FLAG_FORWARD; - } - } - 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.arg_types[0] = '\0'; - odp->link_name = xstrdup(""); - odp->flags |= FLAG_I386; /* don't bother generating stubs for Winelib */ - return 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( ORDDEF *odp ) -{ - unsigned int i; - const char *token; - - do - { - if (!(token = GetToken(0))) break; - for (i = 0; FlagNames[i]; i++) - if (!strcmp( FlagNames[i], token )) break; - if (!FlagNames[i]) - { - error( "Unknown flag '%s'\n", token ); - return NULL; - } - 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 ); - memset( odp, 0, sizeof(*odp) ); - - 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( odp ))) 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_FASTCALL: - 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 ((target_cpu != CPU_x86) && (odp->flags & FLAG_I386)) - { - /* ignore this entry point on non-Intel archs */ - 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, "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 )) - { - 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; -} - - -/******************************************************************* - * 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 (spec->type != SPEC_WIN32) - { - error( "'@' ordinals not supported for Win16\n" ); - continue; - } - 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 ); - memset( odp, 0, sizeof(*odp) ); - - odp->lineno = current_line; - odp->ordinal = -1; - odp->name = name; - args = remove_stdcall_decoration( odp->name ); - if (args == -1) odp->type = TYPE_CDECL; - else - { - odp->type = TYPE_STDCALL; - args /= get_ptr_size(); - if (args >= sizeof(odp->u.func.arg_types)) - { - error( "Too many arguments in stdcall function '%s'\n", odp->name ); - return 0; - } - for (i = 0; i < args; i++) odp->u.func.arg_types[i] = 'l'; - } - - /* 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 */ - - if (token && !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; - token = GetToken(1); - } - if (token && !strcmp( token, "PRIVATE" )) - { - odp->flags |= FLAG_PRIVATE; - token = GetToken(1); - } - if (token && !strcmp( token, "DATA" )) - { - odp->type = TYPE_EXTERN; - token = GetToken(1); - } - if (token) - { - error( "Garbage text '%s' found at end of export declaration\n", token ); - goto error; - } - 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; -} diff --git a/reactos/tools/winebuild/relay.c b/reactos/tools/winebuild/relay.c deleted file mode 100644 index 0ddcc55f51e..00000000000 --- a/reactos/tools/winebuild/relay.c +++ /dev/null @@ -1,1001 +0,0 @@ -/* - * 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 "thread.h" -#include "wine/winbase16.h" - -#include "build.h" - -/* offset of a structure field relative to the start of the struct */ -#define STRUCTOFFSET(type,field) ((int)FIELD_OFFSET(type,field)) - -/* offset of register relative to the start of the CONTEXT struct */ -#define CONTEXTOFFSET(reg) STRUCTOFFSET(CONTEXT86,reg) - -/* offset of register relative to the start of the STACK16FRAME struct */ -#define STACK16OFFSET(reg) STRUCTOFFSET(STACK16FRAME,reg) - -/* offset of register relative to the start of the STACK32FRAME struct */ -#define STACK32OFFSET(reg) STRUCTOFFSET(STACK32FRAME,reg) - -/* offset of the stack pointer relative to %fs:(0) */ -#define STACKOFFSET 0xc0 /* STRUCTOFFSET(TEB,WOW32Reserved) */ - -/* fix this if the ntdll_thread_regs structure is changed */ -#define GS_OFFSET 0x1d8 /* STRUCTOFFSET(TEB,SystemReserved2) + STRUCTOFFSET(ntdll_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(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(%%edx), %%edx\n", asm_name("wine_ldt_copy") ); - 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 $%d, %%ebp\n", STACK32OFFSET(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 %d(%%edx), %%ebx\n", (int)sizeof(STACK16FRAME)-22 ); - output( "\tleal -4(%%esp), %%ebp\n" ); - - output( "\tcall *%d(%%edx)\n", STACK16OFFSET(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" ); - - return; - } - - - /* Build register CONTEXT */ - if ( reg_func ) - { - output( "\tsubl $%d, %%esp\n", (int)sizeof(CONTEXT86) ); - - output( "\tmovl %%ecx, %d(%%esp)\n", CONTEXTOFFSET(EFlags) ); - - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(Eax) ); - output( "\tmovl %%ebx, %d(%%esp)\n", CONTEXTOFFSET(Ebx) ); - output( "\tmovl %%esi, %d(%%esp)\n", CONTEXTOFFSET(Esi) ); - output( "\tmovl %%edi, %d(%%esp)\n", CONTEXTOFFSET(Edi) ); - - output( "\tmovl %d(%%edx), %%eax\n", STACK16OFFSET(ebp) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(Ebp) ); - output( "\tmovl %d(%%edx), %%eax\n", STACK16OFFSET(ecx) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(Ecx) ); - output( "\tmovl %d(%%edx), %%eax\n", STACK16OFFSET(edx) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(Edx) ); - - output( "\tmovzwl %d(%%edx), %%eax\n", STACK16OFFSET(ds) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(SegDs) ); - output( "\tmovzwl %d(%%edx), %%eax\n", STACK16OFFSET(es) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(SegEs) ); - output( "\tmovzwl %d(%%edx), %%eax\n", STACK16OFFSET(fs) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(SegFs) ); - output( "\tmovzwl %d(%%edx), %%eax\n", STACK16OFFSET(gs) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(SegGs) ); - - output( "\tmovzwl %d(%%edx), %%eax\n", STACK16OFFSET(cs) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(SegCs) ); - output( "\tmovzwl %d(%%edx), %%eax\n", STACK16OFFSET(ip) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(Eip) ); - - output( "\t.byte 0x64\n\tmovzwl (%d), %%eax\n", STACKOFFSET+2 ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(SegSs) ); - output( "\t.byte 0x64\n\tmovzwl (%d), %%eax\n", STACKOFFSET ); - output( "\taddl $%d, %%eax\n", STACK16OFFSET(ip) ); - output( "\tmovl %%eax, %d(%%esp)\n", CONTEXTOFFSET(Esp) ); -#if 0 - output( "\tfsave %d(%%esp)\n", CONTEXTOFFSET(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 %d(%%edx), %%eax\n", (int)sizeof(STACK16FRAME) ); - output( "\tpushl %%eax\n" ); - output( "\tpushl %d(%%edx)\n", STACK16OFFSET(entry_point) ); - output( "\tcall *%d(%%edx)\n", STACK16OFFSET(relay) ); - - if ( reg_func ) - { - output( "\tleal -%d(%%ebp), %%ebx\n", (int)sizeof(CONTEXT) + STACK32OFFSET(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 $%d, %%sp\n", STACK16OFFSET(callfrom_ip)-4 ); - output( "\tpopl %%eax\n" ); - output( "\tpopl %%edx\n" ); - - /* Restore all registers from CONTEXT */ - output( "\tmovw %d(%%ebx), %%ss\n", CONTEXTOFFSET(SegSs) ); - output( "\tmovl %d(%%ebx), %%esp\n", CONTEXTOFFSET(Esp) ); - output( "\taddl $4, %%esp\n" ); /* room for final return address */ - - output( "\tpushw %d(%%ebx)\n", CONTEXTOFFSET(SegCs) ); - output( "\tpushw %d(%%ebx)\n", CONTEXTOFFSET(Eip) ); - output( "\tpushl %%edx\n" ); - output( "\tpushl %%eax\n" ); - output( "\tpushl %d(%%ebx)\n", CONTEXTOFFSET(EFlags) ); - output( "\tpushl %d(%%ebx)\n", CONTEXTOFFSET(SegDs) ); - - output( "\tpushl %d(%%ebx)\n", CONTEXTOFFSET(SegEs) ); - output( "\tpopl %%es\n" ); - output( "\tpushl %d(%%ebx)\n", CONTEXTOFFSET(SegFs) ); - output( "\tpopl %%fs\n" ); - output( "\tpushl %d(%%ebx)\n", CONTEXTOFFSET(SegGs) ); - output( "\tpopl %%gs\n" ); - - output( "\tmovl %d(%%ebx), %%ebp\n", CONTEXTOFFSET(Ebp) ); - output( "\tmovl %d(%%ebx), %%esi\n", CONTEXTOFFSET(Esi) ); - output( "\tmovl %d(%%ebx), %%edi\n", CONTEXTOFFSET(Edi) ); - output( "\tmovl %d(%%ebx), %%eax\n", CONTEXTOFFSET(Eax) ); - output( "\tmovl %d(%%ebx), %%edx\n", CONTEXTOFFSET(Edx) ); - output( "\tmovl %d(%%ebx), %%ecx\n", CONTEXTOFFSET(Ecx) ); - output( "\tmovl %d(%%ebx), %%ebx\n", CONTEXTOFFSET(Ebx) ); - - output( "\tpopl %%ds\n" ); - output( "\tpopfl\n" ); - output( "\tlret\n" ); - } - 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" ); - } - if (thunk) output_function_size( "__wine_call_from_16_thunk" ); - else if (reg_func) output_function_size( "__wine_call_from_16_regs" ); - else 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 accordinly. - * - * 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( "\tpushl %%ebp\n" ); - output( "\tmovl %%esp, %%ebp\n" ); - - /* Save the 32-bit registers */ - output( "\tpushl %%ebx\n" ); - output( "\tpushl %%esi\n" ); - output( "\tpushl %%edi\n" ); - 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 %d(%%esp), %%edi\n", STACK32OFFSET(target) - STACK32OFFSET(edi)); - /* everything above edi has been popped already */ - - output( "\tmovl %%eax, %d(%%edi)\n", CONTEXTOFFSET(Eax) ); - output( "\tmovl %%ebx, %d(%%edi)\n", CONTEXTOFFSET(Ebx) ); - output( "\tmovl %%ecx, %d(%%edi)\n", CONTEXTOFFSET(Ecx) ); - output( "\tmovl %%edx, %d(%%edi)\n", CONTEXTOFFSET(Edx) ); - output( "\tmovl %%ebp, %d(%%edi)\n", CONTEXTOFFSET(Ebp) ); - output( "\tmovl %%esi, %d(%%edi)\n", CONTEXTOFFSET(Esp) ); - /* The return glue code saved %esp into %esi */ - } - - /* Restore the 32-bit registers */ - output( "\tpopl %%edi\n" ); - output( "\tpopl %%esi\n" ); - output( "\tpopl %%ebx\n" ); - - /* Function exit sequence */ - output( "\tpopl %%ebp\n" ); - output( "\tret $12\n" ); - - - /* 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 %d(%%ebp),%%ebp\n", STACK16OFFSET(bp) ); - - /* Add the specified offset to the new sp */ - output( "\tsubw %d(%%edx), %%sp\n", STACK32OFFSET(nb_args) ); - - if (reg_func) - { - /* Push the called routine address */ - output( "\tmovl %d(%%edx),%%edx\n", STACK32OFFSET(target) ); - output( "\tpushw %d(%%edx)\n", CONTEXTOFFSET(SegCs) ); - output( "\tpushw %d(%%edx)\n", CONTEXTOFFSET(Eip) ); - - /* Get the registers */ - output( "\tpushw %d(%%edx)\n", CONTEXTOFFSET(SegDs) ); - output( "\tpushl %d(%%edx)\n", CONTEXTOFFSET(SegEs) ); - output( "\tpopl %%es\n" ); - output( "\tpushl %d(%%edx)\n", CONTEXTOFFSET(SegFs) ); - output( "\tpopl %%fs\n" ); - output( "\tpushl %d(%%edx)\n", CONTEXTOFFSET(SegGs) ); - output( "\tpopl %%gs\n" ); - output( "\tmovl %d(%%edx),%%ebp\n", CONTEXTOFFSET(Ebp) ); - output( "\tmovl %d(%%edx),%%esi\n", CONTEXTOFFSET(Esi) ); - output( "\tmovl %d(%%edx),%%edi\n", CONTEXTOFFSET(Edi) ); - output( "\tmovl %d(%%edx),%%eax\n", CONTEXTOFFSET(Eax) ); - output( "\tmovl %d(%%edx),%%ebx\n", CONTEXTOFFSET(Ebx) ); - output( "\tmovl %d(%%edx),%%ecx\n", CONTEXTOFFSET(Ecx) ); - output( "\tmovl %d(%%edx),%%edx\n", CONTEXTOFFSET(Edx) ); - - /* Get the 16-bit ds */ - output( "\tpopw %%ds\n" ); - } - else /* not a register function */ - { - /* Push the called routine address */ - output( "\tpushl %d(%%edx)\n", STACK32OFFSET(target) ); - - /* Set %fs and %gs to the value saved by the last CallFrom16 */ - output( "\tpushw %d(%%ebp)\n", STACK16OFFSET(fs)-STACK16OFFSET(bp) ); - output( "\tpopw %%fs\n" ); - output( "\tpushw %d(%%ebp)\n", STACK16OFFSET(gs)-STACK16OFFSET(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( BOOL isEx ) -{ - function_header( isEx ? "CALL32_CBClientEx" : "CALL32_CBClient" ); - - /* Entry code */ - - output( "\tpushl %%ebp\n" ); - output( "\tmovl %%esp,%%ebp\n" ); - output( "\tpushl %%edi\n" ); - output( "\tpushl %%esi\n" ); - output( "\tpushl %%ebx\n" ); - - /* 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( "\tpopl %%esi\n" ); - output( "\tpopl %%edi\n" ); - output( "\tpopl %%ebp\n" ); - output( "\tret\n" ); - 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" ); -} - - -/******************************************************************* - * BuildCallFrom32Regs - * - * Build a 32-bit-to-Wine call-back function for a 'register' function. - * 'args' is the number of dword arguments. - * - * Stack layout: - * ... - * (ebp+16) first arg - * (ebp+12) ret addr to user code - * (ebp+8) eax saved by relay code - * (ebp+4) ret addr to relay code - * (ebp+0) saved ebp - * (ebp-128) buffer area to allow stack frame manipulation - * (ebp-332) CONTEXT86 struct - * (ebp-336) padding for stack alignment - * (ebp-336-n) CONTEXT86 *argument - * .... other arguments copied from (ebp+12) - * - * The entry point routine is called with a CONTEXT* extra argument, - * following the normal args. In this context structure, EIP_reg - * contains the return address to user code, and ESP_reg the stack - * pointer on return (with the return address and arguments already - * removed). - */ -static void BuildCallFrom32Regs(void) -{ - static const int STACK_SPACE = 128 + sizeof(CONTEXT86); - - /* Function header */ - - function_header( "__wine_call_from_32_regs" ); - - /* Allocate some buffer space on the stack */ - - output( "\tpushl %%ebp\n" ); - output( "\tmovl %%esp,%%ebp\n "); - output( "\tleal -%d(%%esp), %%esp\n", STACK_SPACE + 4 /* for context arg */); - - /* Build the context structure */ - - output( "\tpushfl\n" ); - output( "\tpopl %%eax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(EFlags) - STACK_SPACE ); - output( "\tmovl 0(%%ebp),%%eax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(Ebp) - STACK_SPACE ); - output( "\tmovl 8(%%ebp),%%eax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(Eax) - STACK_SPACE ); - output( "\tmovl %%ebx,%d(%%ebp)\n", CONTEXTOFFSET(Ebx) - STACK_SPACE ); - output( "\tmovl %%ecx,%d(%%ebp)\n", CONTEXTOFFSET(Ecx) - STACK_SPACE ); - output( "\tmovl %%edx,%d(%%ebp)\n", CONTEXTOFFSET(Edx) - STACK_SPACE ); - output( "\tmovl %%esi,%d(%%ebp)\n", CONTEXTOFFSET(Esi) - STACK_SPACE ); - output( "\tmovl %%edi,%d(%%ebp)\n", CONTEXTOFFSET(Edi) - STACK_SPACE ); - - output( "\txorl %%eax,%%eax\n" ); - output( "\tmovw %%cs,%%ax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(SegCs) - STACK_SPACE ); - output( "\tmovw %%es,%%ax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(SegEs) - STACK_SPACE ); - output( "\tmovw %%fs,%%ax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(SegFs) - STACK_SPACE ); - output( "\tmovw %%gs,%%ax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(SegGs) - STACK_SPACE ); - output( "\tmovw %%ss,%%ax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(SegSs) - STACK_SPACE ); - output( "\tmovw %%ds,%%ax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(SegDs) - STACK_SPACE ); - output( "\tmovw %%ax,%%es\n" ); /* set %es equal to %ds just in case */ - - output( "\tmovl $0x%x,%%eax\n", CONTEXT86_FULL ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(ContextFlags) - STACK_SPACE ); - - output( "\tmovl 12(%%ebp),%%eax\n" ); /* Get %eip at time of call */ - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(Eip) - STACK_SPACE ); - - /* Transfer the arguments */ - - output( "\tmovl 4(%%ebp),%%ebx\n" ); /* get relay code addr */ - output( "\tmovzbl 4(%%ebx),%%ecx\n" ); /* fetch number of args to copy */ - output( "\tsubl %%ecx,%%esp\n" ); - output( "\tandl $~15,%%esp\n" ); - output( "\tleal 16(%%ebp),%%esi\n" ); /* get %esp at time of call */ - output( "\tmovl %%esp,%%edi\n" ); - output( "\tshrl $2,%%ecx\n" ); - output( "\tjz 1f\n" ); - output( "\tcld\n" ); - output( "\trep\n\tmovsl\n" ); /* copy args */ - output( "1:\tleal %d(%%ebp),%%eax\n", -STACK_SPACE ); /* get addr of context struct */ - output( "\tmovl %%eax,(%%edi)\n" ); /* and pass it as extra arg */ - output( "\tmovzbl 5(%%ebx),%%eax\n" ); /* fetch number of args to remove */ - output( "\tleal 16(%%ebp,%%eax),%%eax\n" ); - output( "\tmovl %%eax,%d(%%ebp)\n", CONTEXTOFFSET(Esp) - STACK_SPACE ); - - /* Call the entry point */ - - output( "\taddl (%%ebx),%%ebx\n" ); - output( "\tcall *%%ebx\n" ); - output( "\tleal -%d(%%ebp),%%ecx\n", STACK_SPACE ); - - /* Restore the context structure */ - - output( "2:\tpushl %d(%%ecx)\n", CONTEXTOFFSET(SegEs) ); - output( "\tpopl %%es\n" ); - output( "\tpushl %d(%%ecx)\n", CONTEXTOFFSET(SegFs) ); - output( "\tpopl %%fs\n" ); - output( "\tpushl %d(%%ecx)\n", CONTEXTOFFSET(SegGs) ); - output( "\tpopl %%gs\n" ); - - output( "\tmovl %d(%%ecx),%%edi\n", CONTEXTOFFSET(Edi) ); - output( "\tmovl %d(%%ecx),%%esi\n", CONTEXTOFFSET(Esi) ); - output( "\tmovl %d(%%ecx),%%edx\n", CONTEXTOFFSET(Edx) ); - output( "\tmovl %d(%%ecx),%%ebx\n", CONTEXTOFFSET(Ebx) ); - output( "\tmovl %d(%%ecx),%%eax\n", CONTEXTOFFSET(Eax) ); - output( "\tmovl %d(%%ecx),%%ebp\n", CONTEXTOFFSET(Ebp) ); - - output( "\tpushl %d(%%ecx)\n", CONTEXTOFFSET(SegSs) ); - output( "\tpopl %%ss\n" ); - output( "\tmovl %d(%%ecx),%%esp\n", CONTEXTOFFSET(Esp) ); - - output( "\tpushl %d(%%ecx)\n", CONTEXTOFFSET(EFlags) ); - output( "\tpushl %d(%%ecx)\n", CONTEXTOFFSET(SegCs) ); - output( "\tpushl %d(%%ecx)\n", CONTEXTOFFSET(Eip) ); - output( "\tpushl %d(%%ecx)\n", CONTEXTOFFSET(SegDs) ); - output( "\tmovl %d(%%ecx),%%ecx\n", CONTEXTOFFSET(Ecx) ); - - output( "\tpopl %%ds\n" ); - output( "\tiret\n" ); - output_function_size( "__wine_call_from_32_regs" ); - - function_header( "__wine_call_from_32_restore_regs" ); - output( "\tmovl 4(%%esp),%%ecx\n" ); - output( "\tjmp 2b\n" ); - output_function_size( "__wine_call_from_32_restore_regs" ); -} - - -/******************************************************************* - * BuildPendingEventCheck - * - * Build a function that checks whether there are any - * pending DPMI events. - * - * Stack layout: - * - * (sp+12) long eflags - * (sp+6) long cs - * (sp+2) long ip - * (sp) word fs - * - * On entry to function, fs register points to a valid TEB. - * On exit from function, stack will be popped. - */ -static void BuildPendingEventCheck(void) -{ - /* Function header */ - - function_header( "DPMI_PendingEventCheck" ); - - /* Check for pending events. */ - - output( "\t.byte 0x64\n\ttestl $0xffffffff,(%d)\n", STRUCTOFFSET(TEB,vm86_pending) ); - output( "\tje %s\n", asm_name("DPMI_PendingEventCheck_Cleanup") ); - output( "\t.byte 0x64\n\ttestl $0xffffffff,(%d)\n", STRUCTOFFSET(TEB,dpmi_vif) ); - output( "\tje %s\n", asm_name("DPMI_PendingEventCheck_Cleanup") ); - - /* Process pending events. */ - - output( "\tsti\n" ); - - /* Start cleanup. Restore fs register. */ - - output( "%s\n", asm_globl("DPMI_PendingEventCheck_Cleanup") ); - output( "\tpopw %%fs\n" ); - - /* Return from function. */ - - output( "%s\n", asm_globl("DPMI_PendingEventCheck_Return") ); - output( "\tiret\n" ); - - output_function_size( "DPMI_PendingEventCheck" ); -} - - -/******************************************************************* - * BuildRelays16 - * - * Build all the 16-bit relay callbacks - */ -void BuildRelays16(void) -{ - if (target_cpu != CPU_x86) - { - output( "/* File not used with this architecture. Do not edit! */\n\n" ); - return; - } - - /* File header */ - - output( "/* File generated automatically. Do not edit! */\n\n" ); - 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( FALSE, FALSE ); - - /* Register CallFrom16 routine */ - BuildCallFrom16Core( TRUE, FALSE ); - - /* C16ThkSL CallFrom16 routine */ - BuildCallFrom16Core( FALSE, TRUE ); - - /* Standard CallTo16 routine */ - BuildCallTo16Core( 0 ); - - /* Register CallTo16 routine */ - BuildCallTo16Core( 1 ); - - /* Standard CallTo16 return stub */ - BuildRet16Func(); - - /* CBClientThunkSL routine */ - BuildCallTo32CBClient( FALSE ); - - /* CBClientThunkSLEx routine */ - BuildCallTo32CBClient( TRUE ); - - /* Pending DPMI events check stub */ - BuildPendingEventCheck(); - - 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") ); - if (UsePIC) output( "wine_ldt_copy_ptr:\t.long %s\n", asm_name("wine_ldt_copy") ); - output_gnu_stack_note(); -} - -/******************************************************************* - * BuildRelays32 - * - * Build all the 32-bit relay callbacks - */ -void BuildRelays32(void) -{ - if (target_cpu != CPU_x86) - { - output( "/* File not used with this architecture. Do not edit! */\n\n" ); - return; - } - - /* File header */ - - output( "/* File generated automatically. Do not edit! */\n\n" ); - output( "\t.text\n" ); - output( "%s:\n\n", asm_name("__wine_spec_thunk_text_32") ); - - /* 32-bit register entry point */ - BuildCallFrom32Regs(); - - output_function_size( "__wine_spec_thunk_text_32" ); - output_gnu_stack_note(); -} diff --git a/reactos/tools/winebuild/res16.c b/reactos/tools/winebuild/res16.c deleted file mode 100644 index 858ea321f02..00000000000 --- a/reactos/tools/winebuild/res16.c +++ /dev/null @@ -1,333 +0,0 @@ -/* - * 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 -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef HAVE_SYS_MMAN_H -#include -#endif - -#include "winglue.h" -#include "build.h" - -/* Unicode string or integer id */ -struct string_id -{ - char *str; /* ptr to string */ - WORD 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; - WORD memopt; -}; - -/* type level of the resource tree */ -struct res_type -{ - const struct string_id *type; /* type name */ - const struct resource *res; /* first resource of this type */ - 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 const unsigned char *file_pos; /* current position in resource file */ -static const unsigned char *file_end; /* end of resource file */ -static const char *file_name; /* current resource file name */ - - -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, const 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 the next byte from the current resource file */ -static unsigned char get_byte(void) -{ - unsigned char ret = *file_pos++; - if (file_pos > file_end) fatal_error( "%s is a truncated/corrupted file\n", file_name ); - return ret; -} - -/* get the next word from the current resource file */ -static WORD get_word(void) -{ - /* might not be aligned */ -#ifdef WORDS_BIGENDIAN - unsigned char high = get_byte(); - unsigned char low = get_byte(); -#else - unsigned char low = get_byte(); - unsigned char high = get_byte(); -#endif - return low | (high << 8); -} - -/* get the next dword from the current resource file */ -static DWORD get_dword(void) -{ -#ifdef WORDS_BIGENDIAN - WORD high = get_word(); - WORD low = get_word(); -#else - WORD low = get_word(); - WORD high = get_word(); -#endif - return low | (high << 16); -} - -/* get a string from the current resource file */ -static void get_string( struct string_id *str ) -{ - if (*file_pos == 0xff) - { - get_byte(); /* skip the 0xff */ - str->str = NULL; - str->id = get_word(); - } - else - { - char *p = xmalloc(strlen((const char *)file_pos) + 1); - str->str = p; - str->id = 0; - while ((*p++ = get_byte())); - } -} - -/* 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 = file_pos; - file_pos += res->data_size; - if (file_pos > file_end) fatal_error( "%s is a truncated/corrupted file\n", file_name ); -} - -/* load a Win16 .res file */ -void load_res16_file( const char *name, DLLSPEC *spec ) -{ - int fd; - void *base; - struct stat st; - - if ((fd = open( name, O_RDONLY )) == -1) fatal_perror( "Cannot open %s", name ); - if ((fstat( fd, &st ) == -1)) fatal_perror( "Cannot stat %s", name ); - if (!st.st_size) fatal_error( "%s is an empty file\n", name ); -#ifdef HAVE_MMAP - if ((base = mmap( NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0 )) == (void*)-1) -#endif /* HAVE_MMAP */ - { - base = xmalloc( st.st_size ); - if (read( fd, base, st.st_size ) != st.st_size) - fatal_error( "Cannot read %s\n", name ); - } - - file_name = name; - file_pos = base; - file_end = file_pos + st.st_size; - while (file_pos < file_end) 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; - struct res_tree *tree; - struct res_type *type = NULL; - - qsort( spec->resources, spec->nb_resources, sizeof(*spec->resources), cmp_res ); - - 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] ); - type->nb_names++; - } - 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 the resource data */ -void output_res16_data( DLLSPEC *spec ) -{ - const struct resource *res; - unsigned int i; - - if (!spec->nb_resources) return; - - 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( ".L__wine_spec_resource_%u_end:\n", i ); - } -} - -/* output the resource definitions */ -void output_res16_directory( DLLSPEC *spec, const char *header_name ) -{ - 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%s 0\n", get_asm_short_keyword() ); /* alignment */ - - /* type and name structures */ - - for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) - { - if (type->type->str) - output( "\t%s .L__wine_spec_restype_%u-.L__wine_spec_ne_rsrctab\n", - get_asm_short_keyword(), i ); - else - output( "\t%s 0x%04x\n", get_asm_short_keyword(), type->type->id | 0x8000 ); - - output( "\t%s %u,0,0\n", get_asm_short_keyword(), type->nb_names ); - - for (j = 0, res = type->res; j < type->nb_names; j++, res++) - { - output( "\t%s .L__wine_spec_resource_%lu-%s\n", - get_asm_short_keyword(), (unsigned long)(res - spec->resources), header_name ); - output( "\t%s .L__wine_spec_resource_%lu_end-.L__wine_spec_resource_%lu\n", - get_asm_short_keyword(), (unsigned long)(res - spec->resources), - (unsigned long)(res - spec->resources) ); - output( "\t%s 0x%04x\n", get_asm_short_keyword(), res->memopt ); - if (res->name.str) - output( "\t%s .L__wine_spec_resname_%u_%u-.L__wine_spec_ne_rsrctab\n", - get_asm_short_keyword(), i, j ); - else - output( "\t%s 0x%04x\n", get_asm_short_keyword(), res->name.id | 0x8000 ); - - output( "\t%s 0,0\n", get_asm_short_keyword() ); - } - } - output( "\t%s 0\n", get_asm_short_keyword() ); /* terminator */ - - /* name strings */ - - for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) - { - if (type->type->str) - { - output( ".L__wine_spec_restype_%u:\n", i ); - output_string( type->type->str ); - } - for (j = 0, res = type->res; j < type->nb_names; j++, res++) - { - if (res->name.str) - { - output( ".L__wine_spec_resname_%u_%u:\n", i, j ); - output_string( res->name.str ); - } - } - } - output( "\t.byte 0\n" ); /* names terminator */ - - free_resource_tree( tree ); -} diff --git a/reactos/tools/winebuild/res32.c b/reactos/tools/winebuild/res32.c deleted file mode 100644 index fad3429b721..00000000000 --- a/reactos/tools/winebuild/res32.c +++ /dev/null @@ -1,463 +0,0 @@ -/* - * 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 -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#include -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef HAVE_SYS_MMAN_H -#include -#endif - -#include "winglue.h" -#include "build.h" - -/* Unicode string or integer id */ -struct string_id -{ - WCHAR *str; /* ptr to Unicode string */ - WORD 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; - WORD lang; -}; - -/* name level of the resource tree */ -struct res_name -{ - const struct string_id *name; /* name */ - const struct resource *res; /* resource */ - int nb_languages; /* number of languages */ - 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 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 */ -}; - -static int byte_swapped; /* whether the current resource file is byte-swapped */ -static const unsigned char *file_pos; /* current position in resource file */ -static const unsigned char *file_end; /* end of resource file */ -static const char *file_name; /* current resource file name */ - -/* size of a resource directory with n entries */ -#define RESDIR_SIZE(n) (sizeof(IMAGE_RESOURCE_DIRECTORY) + (n) * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)) - - -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, const 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, const 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 the next word from the current resource file */ -static WORD get_word(void) -{ - WORD ret = *(const WORD *)file_pos; - if (byte_swapped) ret = (ret << 8) | (ret >> 8); - file_pos += sizeof(WORD); - if (file_pos > file_end) fatal_error( "%s is a truncated file\n", file_name ); - return ret; -} - -/* get the next dword from the current resource file */ -static DWORD get_dword(void) -{ - DWORD ret = *(const DWORD *)file_pos; - if (byte_swapped) - ret = ((ret << 24) | ((ret << 8) & 0x00ff0000) | ((ret >> 8) & 0x0000ff00) | (ret >> 24)); - file_pos += sizeof(DWORD); - if (file_pos > file_end) fatal_error( "%s is a truncated file\n", file_name ); - return ret; -} - -/* get a string from the current resource file */ -static void get_string( struct string_id *str ) -{ - if (*(const WCHAR *)file_pos == 0xffff) - { - get_word(); /* skip the 0xffff */ - str->str = NULL; - str->id = get_word(); - } - else - { - WCHAR *p = xmalloc( (strlenW((const WCHAR*)file_pos) + 1) * sizeof(WCHAR) ); - str->str = p; - str->id = 0; - while ((*p++ = get_word())); - } -} - -/* check the file header */ -/* all values must be zero except header size */ -static int check_header(void) -{ - DWORD 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 ) -{ - DWORD hdr_size; - struct resource *res = add_resource( spec ); - - res->data_size = (get_dword() + 3) & ~3; - hdr_size = get_dword(); - if (hdr_size & 3) fatal_error( "%s header size not aligned\n", file_name ); - - res->data = file_pos - 2*sizeof(DWORD) + hdr_size; - get_string( &res->type ); - get_string( &res->name ); - if ((ULONG_PTR)file_pos & 2) get_word(); /* align to dword boundary */ - get_dword(); /* skip data version */ - get_word(); /* skip mem options */ - res->lang = get_word(); - get_dword(); /* skip version */ - get_dword(); /* skip characteristics */ - - file_pos = (const unsigned char *)res->data + res->data_size; - if (file_pos > file_end) fatal_error( "%s is a truncated file\n", file_name ); -} - -/* load a Win32 .res file */ -int load_res32_file( const char *name, DLLSPEC *spec ) -{ - int fd, ret; - void *base; - struct stat st; - - if ((fd = open( name, O_RDONLY )) == -1) fatal_perror( "Cannot open %s", name ); - if ((fstat( fd, &st ) == -1)) fatal_perror( "Cannot stat %s", name ); - if (!st.st_size) fatal_error( "%s is an empty file\n", name ); -#ifdef HAVE_MMAP - if ((base = mmap( NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0 )) == (void*)-1) -#endif /* HAVE_MMAP */ - { - base = xmalloc( st.st_size ); - if (read( fd, base, st.st_size ) != st.st_size) - fatal_error( "Cannot read %s\n", name ); - } - - byte_swapped = 0; - file_name = name; - file_pos = base; - file_end = file_pos + st.st_size; - if ((ret = check_header())) - { - while (file_pos < file_end) load_next_resource( spec ); - } - close( fd ); - 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; - return res1->lang - res2->lang; -} - -/* build the 3-level (type,name,language) resource tree */ -static struct res_tree *build_resource_tree( DLLSPEC *spec ) -{ - unsigned int i; - struct res_tree *tree; - struct res_type *type = NULL; - struct res_name *name = NULL; - - qsort( spec->resources, spec->nb_resources, sizeof(*spec->resources), cmp_res ); - - 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++; - } - 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%s 0x%04x", get_asm_short_keyword(), 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%s 0,0\n", /* Major/MinorVersion */ - get_asm_short_keyword() ); - output( "\t%s %u,%u\n", /* NumberOfNamed/IdEntries */ - get_asm_short_keyword(), nb_names, nb_ids ); -} - -/* output the resource definitions */ -void output_resources( DLLSPEC *spec ) -{ - int k, nb_id_types; - unsigned int i, n, offset, 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 ); - - /* compute the offsets */ - - offset = RESDIR_SIZE( tree->nb_types ); - for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) - { - offset += RESDIR_SIZE( type->nb_names ); - for (n = 0, name = type->names; n < type->nb_names; n++, name++) - offset += RESDIR_SIZE( name->nb_languages ); - } - offset += spec->nb_resources * sizeof(IMAGE_RESOURCE_DATA_ENTRY); - - for (i = nb_id_types = 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; - nb_id_types++; - } - - 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; - } - } - - /* 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" ); - - output_res_dir( tree->nb_types - nb_id_types, nb_id_types ); - - /* dump the type directory */ - - offset = RESDIR_SIZE( tree->nb_types ); - for (i = 0, type = tree->types; i < tree->nb_types; i++, type++) - { - output( "\t.long 0x%08x,0x%08x\n", - type->name_offset, offset | 0x80000000 ); - offset += RESDIR_SIZE( type->nb_names ); - for (n = 0, name = type->names; n < type->nb_names; n++, name++) - offset += RESDIR_SIZE( name->nb_languages ); - } - - data_offset = offset; - offset = RESDIR_SIZE( tree->nb_types ); - - /* 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 ); - offset += RESDIR_SIZE( type->nb_names ); - for (n = 0, name = type->names; n < type->nb_names; n++, name++) - { - output( "\t.long 0x%08x,0x%08x\n", - name->name_offset, offset | 0x80000000 ); - offset += RESDIR_SIZE( name->nb_languages ); - } - - 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++) - { - unsigned int entry_offset = (res - spec->resources) * sizeof(IMAGE_RESOURCE_DATA_ENTRY); - output( "\t.long 0x%08x,0x%08x\n", res->lang, data_offset + entry_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_bytes( res->data, res->data_size ); - } - output( ".L__wine_spec_resources_end:\n" ); - output( "\t.byte 0\n" ); - - free_resource_tree( tree ); -} diff --git a/reactos/tools/winebuild/spec16.c b/reactos/tools/winebuild/spec16.c deleted file mode 100644 index dc86b1b40ae..00000000000 --- a/reactos/tools/winebuild/spec16.c +++ /dev/null @@ -1,809 +0,0 @@ -/* - * 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 "wine/winbase16.h" - -#include "build.h" - -/* sequences of nops to fill a certain number of words */ -static const char * const nop_sequence[4] = -{ - ".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 */ -}; - -static inline int is_function( const ORDDEF *odp ) -{ - return (odp->type == TYPE_CDECL || - odp->type == TYPE_PASCAL || - odp->type == TYPE_VARARGS || - odp->type == TYPE_STUB); -} - -/******************************************************************* - * 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%s .L__wine_%s_%u-.L__wine_spec_code_segment\n", - get_asm_short_keyword(), - make_c_identifier(spec->dll_name), first + i ); - break; - case TYPE_VARIABLE: - output( "\t%s .L__wine_%s_%u-.L__wine_spec_data_segment\n", - get_asm_short_keyword(), - make_c_identifier(spec->dll_name), first + i ); - break; - case TYPE_ABS: - output( "\t%s 0x%04x /* %s */\n", - get_asm_short_keyword(), 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; - - 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%s %u\n", get_asm_short_keyword(), ordinal ); -} - - -/******************************************************************* - * get_callfrom16_name - */ -static const char *get_callfrom16_name( const ORDDEF *odp ) -{ - static char buffer[80]; - - sprintf( buffer, "%s_%s_%s", - (odp->type == TYPE_PASCAL) ? "p" : - (odp->type == TYPE_VARARGS) ? "v" : "c", - (odp->flags & FLAG_REGISTER) ? "regs" : - (odp->flags & FLAG_RET16) ? "word" : "long", - odp->u.func.arg_types ); - 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, odp->u.func.arg_types ); - 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" ); - return buffer; -} - - -/******************************************************************* - * get_function_argsize - */ -static int get_function_argsize( const ORDDEF *odp ) -{ - const char *args; - int argsize = 0; - - for (args = odp->u.func.arg_types; *args; args++) - { - switch (*args) - { - case 'w': /* word */ - case 's': /* s_word */ - argsize += 2; - break; - case 'l': /* long or segmented pointer */ - case 'T': /* segmented pointer to null-terminated string */ - case 'p': /* linear pointer */ - case 't': /* linear pointer to null-terminated string */ - argsize += 4; - break; - default: - assert(0); - } - } - 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[256]; - int i, pos, stack_words; - const char *args = odp->u.func.arg_types; - int argsize = get_function_argsize( odp ); - int needs_ldt = strchr( args, 'p' ) || strchr( args, 't' ); - - sprintf( name, ".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( "\tpushl %%ebp\n" ); - output( "\tmovl %%esp,%%ebp\n" ); - stack_words = 2; - if (needs_ldt) - { - output( "\tpushl %%esi\n" ); - stack_words++; - if (UsePIC) - { - output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") ); - output( "1:\tmovl wine_ldt_copy_ptr-1b(%%eax),%%esi\n" ); - } - else - output( "\tmovl $%s,%%esi\n", asm_name("wine_ldt_copy") ); - } - - /* preserve 16-byte stack alignment */ - stack_words += strlen(args); - 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 (args[0] || 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 = strlen(args) - 1; i >= 0; i--) - { - switch (args[i]) - { - case 'w': /* 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 's': /* s_word */ - 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 'l': /* long or segmented pointer */ - case 'T': /* segmented pointer to null-terminated string */ - if (odp->type != TYPE_PASCAL) pos -= 4; - output( "\tpushl %d(%%ecx)\n", pos ); - if (odp->type == TYPE_PASCAL) pos += 4; - break; - - case 'p': /* linear pointer */ - case 't': /* linear pointer to null-terminated string */ - 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; - - default: - assert(0); - } - } - - output( "\tcall *8(%%ebp)\n" ); - - if (needs_ldt) output( "\tmovl -4(%%ebp),%%esi\n" ); - - output( "\tleave\n" ); - output( "\tret\n" ); - output_function_size( 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; - - 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; - - return strcmp( odp1->u.func.arg_types, odp2->u.func.arg_types ); -} - - -/******************************************************************* - * 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; - - 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_init_code - * - * Output the dll initialization code. - */ -static void output_init_code( const DLLSPEC *spec, const char *header_name ) -{ - char name[80]; - - sprintf( name, ".L__wine_spec_%s_init", make_c_identifier(spec->dll_name) ); - - output( "\n/* dll initialization code */\n\n" ); - output( "\t.text\n" ); - output( "\t.align 4\n" ); - output( "\t%s\n", func_declaration(name) ); - output( "%s:\n", name ); - output( "subl $4,%%esp\n" ); - if (UsePIC) - { - output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") ); - output( "1:\tleal .L__wine_spec_file_name-1b(%%eax),%%ecx\n" ); - output( "\tpushl %%ecx\n" ); - output( "\tleal %s-1b(%%eax),%%ecx\n", header_name ); - output( "\tpushl %%ecx\n" ); - } - else - { - output( "\tpushl $.L__wine_spec_file_name\n" ); - output( "\tpushl $%s\n", header_name ); - } - output( "\tcall %s\n", asm_name("__wine_dll_register_16") ); - output( "\taddl $12,%%esp\n" ); - output( "\tret\n" ); - output_function_size( name ); - - sprintf( name, ".L__wine_spec_%s_fini", make_c_identifier(spec->dll_name) ); - - output( "\t.align 4\n" ); - output( "\t%s\n", func_declaration(name) ); - output( "%s:\n", name ); - output( "subl $8,%%esp\n" ); - if (UsePIC) - { - output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") ); - output( "1:\tleal %s-1b(%%eax),%%ecx\n", header_name ); - output( "\tpushl %%ecx\n" ); - } - else - { - output( "\tpushl $%s\n", header_name ); - } - output( "\tcall %s\n", asm_name("__wine_dll_unregister_16") ); - output( "\taddl $12,%%esp\n" ); - output( "\tret\n" ); - output_function_size( name ); - - if (target_platform == PLATFORM_APPLE) - { - output( "\t.mod_init_func\n" ); - output( "\t.align %d\n", get_alignment(4) ); - output( "\t.long .L__wine_spec_%s_init\n", make_c_identifier(spec->dll_name) ); - output( "\t.mod_term_func\n" ); - output( "\t.align %d\n", get_alignment(4) ); - output( "\t.long .L__wine_spec_%s_fini\n", make_c_identifier(spec->dll_name) ); - } - else - { - output( "\t.section \".init\",\"ax\"\n" ); - output( "\tcall .L__wine_spec_%s_init\n", make_c_identifier(spec->dll_name) ); - output( "\t.section \".fini\",\"ax\"\n" ); - output( "\tcall .L__wine_spec_%s_fini\n", make_c_identifier(spec->dll_name) ); - } -} - - -/******************************************************************* - * BuildSpec16File - * - * Build a Win16 assembly file from a spec file. - */ -void BuildSpec16File( DLLSPEC *spec ) -{ - ORDDEF **typelist; - int i, j, nb_funcs; - char header_name[256]; - - /* File header */ - - output_standard_file_header(); - - if (!spec->dll_name) /* set default name from file name */ - { - char *p; - spec->dll_name = xstrdup( spec->file_name ); - if ((p = strrchr( spec->dll_name, '.' ))) *p = 0; - } - - /* 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 */ - - sprintf( header_name, "__wine_spec_%s_dos_header", make_c_identifier(spec->dll_name) ); - output( "\n/* module data */\n\n" ); - output( "\t.data\n" ); - output( "\t.align %d\n", get_alignment(4) ); - output( "%s:\n", header_name ); - output( "\t%s 0x%04x\n", get_asm_short_keyword(), /* e_magic */ - IMAGE_DOS_SIGNATURE ); - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_cblp */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_cp */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_crlc */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_cparhdr */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_minalloc */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_maxalloc */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_ss */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_sp */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_csum */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_ip */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_cs */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_lfarlc */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_ovno */ - output( "\t%s 0,0,0,0\n", get_asm_short_keyword() ); /* e_res */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_oemid */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* e_oeminfo */ - output( "\t%s 0,0,0,0,0,0,0,0,0,0\n", get_asm_short_keyword() ); /* e_res2 */ - output( "\t.long .L__wine_spec_ne_header-%s\n", header_name ); /* e_lfanew */ - - output( ".L__wine_spec_ne_header:\n" ); - output( "\t%s 0x%04x\n", get_asm_short_keyword(), /* ne_magic */ - IMAGE_OS2_SIGNATURE ); - output( "\t.byte 0\n" ); /* ne_ver */ - output( "\t.byte 0\n" ); /* ne_rev */ - output( "\t%s .L__wine_spec_ne_enttab-.L__wine_spec_ne_header\n", /* ne_enttab */ - get_asm_short_keyword() ); - output( "\t%s .L__wine_spec_ne_enttab_end-.L__wine_spec_ne_enttab\n", /* ne_cbenttab */ - get_asm_short_keyword() ); - output( "\t.long 0\n" ); /* ne_crc */ - output( "\t%s 0x%04x\n", get_asm_short_keyword(), /* ne_flags */ - NE_FFLAGS_SINGLEDATA | NE_FFLAGS_LIBMODULE ); - output( "\t%s 2\n", get_asm_short_keyword() ); /* ne_autodata */ - output( "\t%s %u\n", get_asm_short_keyword(), spec->heap_size ); /* ne_heap */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_stack */ - output( "\t.long 0\n" ); /* ne_csip */ - output( "\t.long 0\n" ); /* ne_sssp */ - output( "\t%s 2\n", get_asm_short_keyword() ); /* ne_cseg */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_cmod */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_cbnrestab */ - output( "\t%s .L__wine_spec_ne_segtab-.L__wine_spec_ne_header\n", /* ne_segtab */ - get_asm_short_keyword() ); - output( "\t%s .L__wine_spec_ne_rsrctab-.L__wine_spec_ne_header\n", /* ne_rsrctab */ - get_asm_short_keyword() ); - output( "\t%s .L__wine_spec_ne_restab-.L__wine_spec_ne_header\n", /* ne_restab */ - get_asm_short_keyword() ); - output( "\t%s .L__wine_spec_ne_modtab-.L__wine_spec_ne_header\n", /* ne_modtab */ - get_asm_short_keyword() ); - output( "\t%s .L__wine_spec_ne_imptab-.L__wine_spec_ne_header\n", /* ne_imptab */ - get_asm_short_keyword() ); - output( "\t.long 0\n" ); /* ne_nrestab */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_cmovent */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_align */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_cres */ - output( "\t.byte 0x%02x\n", NE_OSFLAGS_WINDOWS ); /* ne_exetyp */ - output( "\t.byte 0x%02x\n", NE_AFLAGS_FASTLOAD ); /* ne_flagsothers */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_pretthunks */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_psegrefbytes */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_swaparea */ - output( "\t%s 0\n", get_asm_short_keyword() ); /* ne_expver */ - - /* segment table */ - - output( "\n.L__wine_spec_ne_segtab:\n" ); - - /* code segment entry */ - - output( "\t%s .L__wine_spec_code_segment-%s\n", /* filepos */ - get_asm_short_keyword(), header_name ); - output( "\t%s .L__wine_spec_code_segment_end-.L__wine_spec_code_segment\n", /* size */ - get_asm_short_keyword() ); - output( "\t%s 0x%04x\n", get_asm_short_keyword(), NE_SEGFLAGS_32BIT ); /* flags */ - output( "\t%s .L__wine_spec_code_segment_end-.L__wine_spec_code_segment\n", /* minsize */ - get_asm_short_keyword() ); - - /* data segment entry */ - - output( "\t%s .L__wine_spec_data_segment-%s\n", /* filepos */ - get_asm_short_keyword(), header_name ); - output( "\t%s .L__wine_spec_data_segment_end-.L__wine_spec_data_segment\n", /* size */ - get_asm_short_keyword() ); - output( "\t%s 0x%04x\n", get_asm_short_keyword(), NE_SEGFLAGS_DATA ); /* flags */ - output( "\t%s .L__wine_spec_data_segment_end-.L__wine_spec_data_segment\n", /* minsize */ - get_asm_short_keyword() ); - - /* resource directory */ - - output_res16_directory( spec, header_name ); - - /* 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; - 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( ".L__wine_spec_code_segment:\n" ); - - for ( i = 0; i < nb_funcs; i++ ) - { - unsigned int arg_types[2]; - int nop_words, 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 = 0; typelist[i]->u.func.arg_types[j]; j++) - { - int type = 0; - switch(typelist[i]->u.func.arg_types[j]) - { - case 'w': type = ARG_WORD; break; - case 's': type = ARG_SWORD; break; - case 'l': type = ARG_LONG; break; - case 'p': type = ARG_PTR; break; - case 't': type = ARG_STR; break; - case 'T': type = ARG_SEGSTR; break; - } - arg_types[j / 10] |= type << (3 * (j % 10)); - } - if (typelist[i]->type == TYPE_VARARGS) arg_types[j / 10] |= ARG_VARARG << (3 * (j % 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( "\tlcall $0,$0\n" ); - - if (typelist[i]->flags & FLAG_REGISTER) - { - nop_words = 4; - } - else if (typelist[i]->flags & FLAG_RET16) - { - output( "\torw %%ax,%%ax\n" ); - output( "\tnop\n" ); /* so that the lretw is aligned */ - nop_words = 2; - } - 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" ); - - 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%s 0x86c7\n", get_asm_short_keyword() ); - 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", make_c_identifier(spec->dll_name), i ); - output( "\tpushw %%bp\n" ); - output( "\tpushl $%s\n", - asm_name( odp->type == TYPE_STUB ? get_stub_name( odp, spec ) : 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", make_c_identifier(spec->dll_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("wine_ldt_copy") ); - } - - output( "\n\t%s\n", get_asm_string_section() ); - output( ".L__wine_spec_file_name:\n" ); - output( "\t%s \"%s\"\n", get_asm_string_keyword(), spec->file_name ); - - output_stubs( spec ); - output_get_pc_thunk(); - output_init_code( spec, header_name ); - output_gnu_stack_note(); - - free( typelist ); -} diff --git a/reactos/tools/winebuild/spec32.c b/reactos/tools/winebuild/spec32.c deleted file mode 100644 index 07c5026dd8e..00000000000 --- a/reactos/tools/winebuild/spec32.c +++ /dev/null @@ -1,715 +0,0 @@ -/* - * 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 "winglue.h" -//#include "wine/exception.h" -#include "build.h" - - -/* 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 */ - if ((odp->type != TYPE_STDCALL) && (odp->type != TYPE_CDECL)) return 0; - /* skip norelay and forward entry points */ - if (odp->flags & (FLAG_NORELAY|FLAG_FORWARD)) return 0; - return 1; -} - -/* check if dll will output relay thunks */ -int has_relays( DLLSPEC *spec ) -{ - int i; - - if (target_cpu != CPU_x86) return 0; - - for (i = spec->base; i <= spec->limit; i++) - { - ORDDEF *odp = spec->ordinals[i]; - if (needs_relay( odp )) return 1; - } - return 0; -} - -/******************************************************************* - * make_internal_name - * - * Generate an internal name for an entry point. Used for stubs etc. - */ -static const char *make_internal_name( const ORDDEF *odp, DLLSPEC *spec, const char *prefix ) -{ - static char buffer[256]; - if (odp->name || odp->export_name) - { - char *p; - sprintf( buffer, "__wine_%s_%s_%s", prefix, spec->file_name, - 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; - } - sprintf( buffer, "__wine_%s_%s_%d", prefix, make_c_identifier(spec->file_name), odp->ordinal ); - return buffer; -} - - -/******************************************************************* - * output_relay_debug - * - * Output entry points for relay debugging - */ -static void output_relay_debug( DLLSPEC *spec ) -{ - int i; - unsigned int j, args, flags; - - /* 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 table of argument types */ - - output( "\t.align %d\n", get_alignment(4) ); - output( ".L__wine_spec_relay_arg_types:\n" ); - - for (i = spec->base; i <= spec->limit; i++) - { - ORDDEF *odp = spec->ordinals[i]; - unsigned int mask = 0; - - if (needs_relay( odp )) - { - for (j = 0; j < 16 && odp->u.func.arg_types[j]; j++) - { - if (odp->u.func.arg_types[j] == 't') mask |= 1<< (j*2); - if (odp->u.func.arg_types[j] == 'W') mask |= 2<< (j*2); - } - } - output( "\t.long 0x%08x\n", mask ); - } - - /* 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 ); - - if (odp->flags & FLAG_REGISTER) - output( "\tpushl %%eax\n" ); - else - output( "\tpushl %%esp\n" ); - - args = strlen(odp->u.func.arg_types); - flags = 0; - if (odp->flags & FLAG_RET64) flags |= 1; - if (odp->type == TYPE_STDCALL) flags |= 2; - output( "\tpushl $%u\n", (flags << 24) | (args << 16) | (i - spec->base) ); - - 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" ); - } - else output( "\tmovl $.L__wine_spec_relay_descr,%%eax\n" ); - output( "\tpushl %%eax\n" ); - - if (odp->flags & FLAG_REGISTER) - { - output( "\tcall *8(%%eax)\n" ); - } - else - { - output( "\tcall *4(%%eax)\n" ); - if (odp->type == TYPE_STDCALL) - output( "\tret $%u\n", args * get_ptr_size() ); - else - output( "\tret\n" ); - } - } -} - -/******************************************************************* - * output_exports - * - * Output the export table for a Win32 module. - */ -static 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: - 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(), 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%s %d\n", - get_asm_short_keyword(), spec->names[i]->ordinal - spec->base ); - } - if (spec->nb_names % 2) - { - output( "\t%s 0\n", get_asm_short_keyword() ); - } - } - - /* 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 */ - - /* we only support relay debugging on i386 */ - if (target_cpu != CPU_x86) - { - output( "\t%s 0\n", get_asm_ptr_keyword() ); - return; - } - - output( ".L__wine_spec_relay_descr:\n" ); - output( "\t%s 0xdeb90001\n", get_asm_ptr_keyword() ); /* magic */ - output( "\t%s 0,0\n", get_asm_ptr_keyword() ); /* relay funcs */ - 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_arg_types\n", get_asm_ptr_keyword() ); - - output_relay_debug( spec ); -} - - -/******************************************************************* - * output_stub_funcs - * - * Output the functions for stub entry points - */ -static void output_stub_funcs( DLLSPEC *spec ) -{ - int i; - -#if 0 - for (i = 0; i < spec->nb_entry_points; i++) - { - ORDDEF *odp = &spec->entry_points[i]; - if (odp->type != TYPE_STUB) continue; - fprintf( outfile, "#ifdef __GNUC__\n" ); - fprintf( outfile, "extern void __wine_spec_unimplemented_stub( const char *module, const char *func ) __attribute__((noreturn));\n" ); - fprintf( outfile, "#else\n" ); - fprintf( outfile, "extern void __wine_spec_unimplemented_stub( const char *module, const char *func );\n" ); - fprintf( outfile, "#endif\n\n" ); - break; - } -#endif - - for (i = 0; i < spec->nb_entry_points; i++) - { - const ORDDEF *odp = &spec->entry_points[i]; - if (odp->type != TYPE_STUB) continue; - output( "void %s(void) ", make_internal_name( odp, spec, "stub" ) ); - if (odp->name) - output( "{ __wine_spec_unimplemented_stub(__wine_spec_file_name, \"%s\"); }\n", odp->name ); - else if (odp->export_name) - output( "{ __wine_spec_unimplemented_stub(__wine_spec_file_name, \"%s\"); }\n", odp->export_name ); - else - output( "{ __wine_spec_unimplemented_stub(__wine_spec_file_name, \"%d\"); }\n", odp->ordinal ); - } -} - - -/******************************************************************* - * 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(4) ); - output( "\t.long %s\n", asm_name(constructor) ); - } - else - { - output( "\n\t.section \".init\",\"ax\"\n" ); - switch(target_cpu) - { - case CPU_x86: - case CPU_x86_64: - output( "\tcall %s\n", asm_name(constructor) ); - break; - case CPU_SPARC: - output( "\tcall %s\n", asm_name(constructor) ); - output( "\tnop\n" ); - break; - case CPU_ALPHA: - output( "\tjsr $26,%s\n", asm_name(constructor) ); - break; - case CPU_POWERPC: - output( "\tbl %s\n", asm_name(constructor) ); - break; - } - } -} - - -/******************************************************************* - * BuildSpec32File - * - * Build a Win32 C file from a spec file. - */ -void BuildSpec32File( DLLSPEC *spec ) -{ - int machine = 0; - unsigned int page_size = get_page_size(); - - resolve_imports( spec ); - output_standard_file_header(); - - /* Reserve some space for the PE header */ - - output( "\t.text\n" ); - output( "\t.align %d\n", get_alignment(page_size) ); - output( "__wine_spec_pe_header:\n" ); - if (target_platform == PLATFORM_APPLE) - output( "\t.space 65536\n" ); - else - output( "\t.skip 65536\n" ); - - /* 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 0x%04x\n", IMAGE_NT_SIGNATURE ); /* 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_ALPHA: machine = IMAGE_FILE_MACHINE_ALPHA; break; - case CPU_SPARC: machine = IMAGE_FILE_MACHINE_UNKNOWN; break; - } - output( "\t%s 0x%04x\n", /* Machine */ - get_asm_short_keyword(), machine ); - output( "\t%s 0\n", /* NumberOfSections */ - get_asm_short_keyword() ); - output( "\t.long 0\n" ); /* TimeDateStamp */ - output( "\t.long 0\n" ); /* PointerToSymbolTable */ - output( "\t.long 0\n" ); /* NumberOfSymbols */ - output( "\t%s %d\n", /* SizeOfOptionalHeader */ - get_asm_short_keyword(), - get_ptr_size() == 8 ? IMAGE_SIZEOF_NT_OPTIONAL64_HEADER : IMAGE_SIZEOF_NT_OPTIONAL32_HEADER ); - output( "\t%s 0x%04x\n", /* Characteristics */ - get_asm_short_keyword(), spec->characteristics ); - output( "\t%s 0x%04x\n", /* Magic */ - get_asm_short_keyword(), - get_ptr_size() == 8 ? IMAGE_NT_OPTIONAL_HDR64_MAGIC : IMAGE_NT_OPTIONAL_HDR32_MAGIC ); - output( "\t.byte 0\n" ); /* MajorLinkerVersion */ - output( "\t.byte 0\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(), asm_name(spec->init_func) ); - 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%s 1,0\n", /* Major/MinorOperatingSystemVersion */ - get_asm_short_keyword() ); - output( "\t%s 0,0\n", /* Major/MinorImageVersion */ - get_asm_short_keyword() ); - output( "\t%s %u,%u\n", /* Major/MinorSubsystemVersion */ - get_asm_short_keyword(), 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%s 0x%04x\n", /* Subsystem */ - get_asm_short_keyword(), spec->subsystem ); - output( "\t%s 0x%04x\n", /* DllCharacteristics */ - get_asm_short_keyword(), 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_stubs( spec ); - output_exports( spec ); - output_imports( spec ); - output_resources( spec ); - output_asm_constructor( "__wine_spec_init_ctor" ); - output_gnu_stack_note(); -} - - -/******************************************************************* - * BuildDef32File - * - * Build a Win32 def file from a spec file. - */ -void BuildDef32File( DLLSPEC *spec ) -{ - const char *name; - int i, total; - - 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"); - - /* 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) continue; - - if (odp->name) name = odp->name; - else if (odp->export_name) name = odp->export_name; - else continue; - - if (!(odp->flags & FLAG_PRIVATE)) total++; - - switch(odp->type) - { - case TYPE_EXTERN: - output( " %s", name ); - is_data = 1; - if(strcmp(name, odp->link_name) || (odp->flags & FLAG_FORWARD)) - output( "=%s", odp->link_name ); - break; - case TYPE_VARARGS: - case TYPE_CDECL: - /* try to reduce output */ - output( " %s", name ); - if(strcmp(name, odp->link_name) || (odp->flags & FLAG_FORWARD)) - output( "=%s", odp->link_name ); - break; - case TYPE_STDCALL: - { - int at_param = strlen(odp->u.func.arg_types) * get_ptr_size(); - output( " %s", name ); - if (!kill_at) 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) output( "@%d", at_param ); - } - break; - } - case TYPE_FASTCALL: - { - int at_param = strlen(odp->u.func.arg_types) * get_ptr_size(); - output( " " ); - if (!kill_at) output( "@" ); - output( "%s", name ); - if (!kill_at) output( "@%d", at_param ); - if (odp->flags & FLAG_FORWARD) - { - output( "=" ); - if (!kill_at) output( "@" ); - output( "%s", odp->link_name ); - } - else if (strcmp(name, odp->link_name)) /* try to reduce output */ - { - output( "=" ); - if (!kill_at) output( "@" ); - output( "%s", odp->link_name ); - if (!kill_at) output( "@%d", at_param ); - } - break; - } - case TYPE_STUB: - { - output( " %s", name ); - if (!kill_at) - { - const char *check = name + strlen(name); - while (name != check && - '0' <= check[-1] && check[-1] <= '9') - { - check--; - } - if (name != check && check != name + strlen(name) && - '@' == check[-1]) - { - output("%s", check - 1); - } - } - if (odp->name || odp->export_name) - { - output("=%s", make_internal_name( odp, spec, "stub" )); - } - break; - } - default: - assert(0); - } - output( " @%d", odp->ordinal ); - if (!odp->name || (odp->flags & FLAG_ORDINAL)) output( " NONAME" ); - if (is_data) output( " DATA" ); - if (odp->flags & FLAG_PRIVATE) output( " PRIVATE" ); - output( "\n" ); - } - if (!total) warning( "%s: Import library doesn't export anything\n", spec->file_name ); -} - - -/******************************************************************* - * BuildPedllFile - * - * Build a PE DLL C file from a spec file. - */ -void BuildPedllFile( DLLSPEC *spec ) -{ - int i, has_stubs = 0; - - output_standard_file_header(); - - for (i = 0; i < spec->nb_entry_points; i++) - { - const ORDDEF *odp = &spec->entry_points[i]; - if (odp->type == TYPE_STUB) - { - has_stubs = 1; - break; - } - } - - if (!has_stubs) - { - output( "/* This file is intentionally left blank */\n"); - return; - } - - output( "#include \n"); - output( "#include \"windef.h\"\n"); - output( "#include \"winbase.h\"\n"); - output( "#include \"wine/config.h\"\n"); - output( "#include \"wine/exception.h\"\n\n"); - - output( "void __wine_spec_unimplemented_stub( const char *module, const char *function )\n"); - output( "{\n"); - output( " ULONG_PTR args[2];\n"); - output( "\n"); - output( " args[0] = (ULONG_PTR)module;\n"); - output( " args[1] = (ULONG_PTR)function;\n"); - output( " RaiseException( EXCEPTION_WINE_STUB, EH_NONCONTINUABLE, 2, args );\n"); - output( "}\n\n"); - - output( "static const char __wine_spec_file_name[] = \"%s\";\n\n", spec->file_name ); - - /* Output the stub functions */ - output_stub_funcs( spec ); -} diff --git a/reactos/tools/winebuild/utils.c b/reactos/tools/winebuild/utils.c deleted file mode 100644 index b0972abc1cd..00000000000 --- a/reactos/tools/winebuild/utils.c +++ /dev/null @@ -1,631 +0,0 @@ -/* - * 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 - -#include "winglue.h" -#include "build.h" - -#define MAX_TMP_FILES 8 -static const char *tmp_files[MAX_TMP_FILES]; -static unsigned int nb_tmp_files; - -/* atexit handler to clean tmp files */ -static void cleanup_tmp_files(void) -{ - unsigned int i; - for (i = 0; i < MAX_TMP_FILES; i++) if (tmp_files[i]) unlink( tmp_files[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; -} - -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; -} - -/* 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; - int fd; - - assert( nb_tmp_files < MAX_TMP_FILES ); - if (!nb_tmp_files && !save_temps) atexit( cleanup_tmp_files ); - - if (!prefix || !prefix[0]) prefix = "winebuild"; - if (!suffix) suffix = ""; - if (!(ext = strchr( prefix, '.' ))) ext = prefix + strlen(prefix); - name = xmalloc( sizeof("/tmp/") + (ext - prefix) + sizeof(".XXXXXX") + strlen(suffix) ); - strcpy( name, "/tmp/" ); - memcpy( name + 5, prefix, ext - prefix ); - strcpy( name + 5 + (ext - prefix), ".XXXXXX" ); - strcat( name, suffix ); - - /* first try without the /tmp/ prefix */ - if ((fd = mkstemps( name + 5, strlen(suffix) )) != -1) - name += 5; - else if ((fd = mkstemps( name, strlen(suffix) )) == -1) - fatal_error( "could not generate a temp file\n" ); - - close( fd ); - tmp_files[nb_tmp_files++] = name; - return name; -} - -/* 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 = xmalloc( strlen(srcdir) + strlen(name) + 2 ); - strcpy( fullname, srcdir ); - strcat( fullname, "/" ); - strcat( fullname, 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; - /* 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 ) -{ - char *cmd; - int err; - - if (!as_command) as_command = xstrdup("as"); - cmd = xmalloc( strlen(as_command) + strlen(obj_file) + strlen(src_file) + 6 ); - sprintf( cmd, "%s -o %s %s", as_command, obj_file, src_file ); - if (verbose) fprintf( stderr, "%s\n", cmd ); - err = system( cmd ); - if (err) fatal_error( "%s failed with status %d\n", as_command, err ); - free( cmd ); -} - - -/******************************************************************* - * alloc_dll_spec - * - * Create a new dll spec file descriptor - */ -DLLSPEC *alloc_dll_spec(void) -{ - DLLSPEC *spec; - - spec = xmalloc( sizeof(*spec) ); - spec->file_name = NULL; - spec->dll_name = NULL; - spec->init_func = NULL; - spec->type = SPEC_WIN32; - spec->base = MAX_ORDINALS; - spec->limit = 0; - spec->stack_size = 0; - spec->heap_size = 0; - spec->nb_entry_points = 0; - spec->alloc_entry_points = 0; - spec->nb_names = 0; - spec->nb_resources = 0; - spec->characteristics = IMAGE_FILE_EXECUTABLE_IMAGE; - 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; - spec->subsystem = 0; - spec->subsystem_major = 4; - spec->subsystem_minor = 0; - spec->entry_points = NULL; - spec->names = NULL; - spec->ordinals = NULL; - spec->resources = NULL; - 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->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. - */ -const char *make_c_identifier( const char *str ) -{ - static char buffer[256]; - char *p; - - for (p = buffer; *str && p < buffer+sizeof(buffer)-1; p++, str++) - { - if (isalnum(*str)) *p = *str; - else *p = '_'; - } - *p = 0; - return 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[256]; - if (odp->name || odp->export_name) - { - char *p; - sprintf( buffer, "__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; - } - sprintf( buffer, "__wine_stub_%s_%d", make_c_identifier(spec->file_name), odp->ordinal ); - return buffer; -} - - -/***************************************************************** - * 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 mimick - * 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: - case CPU_SPARC: - if (target_platform != PLATFORM_APPLE) return align; - /* fall through */ - case CPU_POWERPC: - case CPU_ALPHA: - 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: return 4096; - case CPU_x86_64: return 4096; - case CPU_POWERPC: return 4096; - case CPU_SPARC: return 8192; - case CPU_ALPHA: return 8192; - } - /* 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_SPARC: - case CPU_ALPHA: - return 4; - case CPU_x86_64: - return 8; - } - /* unreached */ - assert(0); - return 0; -} - -/* return the assembly name for a C symbol */ -const char *asm_name( const char *sym ) -{ - static char buffer[256]; - - switch (target_platform) - { - case PLATFORM_APPLE: - case PLATFORM_WINDOWS: - buffer[0] = '_'; - strcpy( buffer + 1, 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[256]; - - switch (target_platform) - { - case PLATFORM_APPLE: - return ""; - case PLATFORM_WINDOWS: - sprintf( buffer, ".def _%s; .scl 2; .type 32; .endef", func ); - break; - default: - sprintf( buffer, ".type %s,@function", func ); - 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 the GNU note for non-exec stack */ -void output_gnu_stack_note(void) -{ - switch (target_platform) - { - case PLATFORM_WINDOWS: - case PLATFORM_APPLE: - break; - default: - output( "\t.section .note.GNU-stack,\"\",@progbits\n" ); - break; - } -} - -/* return a global symbol declaration for an assembly symbol */ -const char *asm_globl( const char *func ) -{ - static char buffer[256]; - - switch (target_platform) - { - case PLATFORM_APPLE: - sprintf( buffer, "\t.globl _%s\n\t.private_extern _%s\n_%s:", func, func, func ); - return buffer; - case PLATFORM_WINDOWS: - sprintf( buffer, "\t.globl _%s\n_%s:", func, func ); - return buffer; - default: - sprintf( buffer, "\t.globl %s\n\t.hidden %s\n%s:", func, func, func ); - 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_short_keyword(void) -{ - switch (target_platform) - { - default: return ".short"; - } -} - -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"; - } -} diff --git a/reactos/tools/winebuild/winebuild.man.in b/reactos/tools/winebuild/winebuild.man.in deleted file mode 100644 index d13596812fc..00000000000 --- a/reactos/tools/winebuild/winebuild.man.in +++ /dev/null @@ -1,469 +0,0 @@ -.\" -*- nroff -*- -.TH WINEBUILD 1 "October 2005" "@PACKAGE_STRING@" "Wine Developers Manual" -.SH NAME -winebuild \- Wine dll builder -.SH SYNOPSIS -.BI winebuild\ [options]\ [input\ files] -.SH DESCRIPTION -.B winebuild -generates the assembly files that are necessary to build a Wine dll, -which is basically a Win32 dll encapsulated inside a Unix library. -.PP -.B winebuild -has different modes, depending on what kind of file it is asked to -generate. The mode is specified by one of the mode options specified -below. In addition to the mode option, various other command-line -option can be specified, as described in the \fBOPTIONS\fR section. -.SH "MODE OPTIONS" -You have to specify exactly one of the following options, depending on -what you want winebuild to generate. -.TP -.BI \--dll -Build an assembly file from a .spec file (see \fBSPEC FILE SYNTAX\fR -for details), or from a standard Windows .def file. The .spec/.def -file is specified via the -E option. The resulting file must be -assembled and linked to the other object files to build a working Wine -dll. In this mode, the -.I input files -should be the list of all object files that will be linked into the -final dll, to allow -.B winebuild -to get the list of all undefined symbols that need to be imported from -other dlls. -.TP -.BI \--exe -Build an assembly file for an executable. This is basically the same as -the --dll mode except that it doesn't require a .spec/.def file as input, -since an executable need not export functions. Some executables however -do export functions, and for those a .spec/.def file can be specified via -the -E option. The executable is named from the .spec/.def file name if -present, or explicitly through the -F option. The resulting file must be -assembled and linked to the other object files to build a working Wine -executable, and all the other object files must be listed as -.I input files. -.TP -.BI \--def -Build a .def file from a spec file. The .spec file is specified via the --E option. This is used when building dlls with a PE (Win32) compiler. -.TP -.B \--relay16 -Generate the assembly code for the 16-bit relay routines. This is for -Wine internal usage only, you should never need to use this option. -.TP -.B \--relay32 -Generate the assembly code for the 32-bit relay routines. This is for -Wine internal usage only, you should never need to use this option. -.SH OPTIONS -.TP -.BI \--as-cmd= as-command -Specify the command to use to compile assembly files; the default is -\fBas\fR. -.TP -.BI \-d,\ --delay-lib= name -Set the delayed import mode for the specified library, which must be -one of the libraries imported with the \fB-l\fR option. Delayed mode -means that the library won't be loaded until a function imported from -it is actually called. -.TP -.BI \-D\ symbol -Ignored for compatibility with the C compiler. -.TP -.BI \-e,\ --entry= function -Specify the module entry point function; if not specified, the default -is -.B DllMain -for dlls, and -.B main -for executables (if the standard C -.B main -is not defined, -.B WinMain -is used instead). This is only valid for Win32 modules. -.TP -.BI \-E,\ --export= filename -Specify a .spec file (see \fBSPEC FILE SYNTAX\fR for details), -or a standard Windows .def file that defines the exports -of the DLL or executable that is being built. -.TP -.B \--external-symbols -Allow linking to external symbols directly from the spec -file. Normally symbols exported by a dll have to be defined in the dll -itself; this option makes it possible to use symbols defined in -another Unix library (for symbols defined in another dll, a -.I forward -specification must be used instead). -.TP -.BI \-f\ flags -Ignored for compatibility with the C compiler. -.TP -.BI \-F,\ --filename= filename -Set the file name of the module. The default is to use the base name -of the spec file (without any extension). -.TP -.B \-h, --help -Display a usage message and exit. -.TP -.BI \-H,\ --heap= size -Specify the size of the module local heap in bytes (only valid for -Win16 modules); default is no local heap. -.TP -.BI \-i,\ --ignore= [-]symbol[,[-]symbol] -Specify a list of symbols that should be ignored when resolving -undefined symbols against the imported libraries. This forces these -symbols to be resolved from the Unix C library (or from another Unix -library linked with the application). If a symbol is prefixed by '-' -it is removed from the list instead of being added; a stand-alone '-' -clears the whole list. -.TP -.BI \-I\ directory -Ignored for compatibility with the C compiler. -.TP -.B \-k, --kill-at -Remove the stdcall decorations from the symbol names in the -generated .def file. Only meaningful in \fB--def\fR mode. -.TP -.BI \-K\ flags -Ignored for compatibility with the C compiler. -.TP -.BI \--ld-cmd= ld-command -Specify the command to use to link the object files; the default is -\fBld\fR. -.TP -.BI \-L,\ --library-path= directory -Append the specified directory to the list of directories that are -searched for import libraries. -.TP -.BI \-l,\ --library= name -Import the specified library, looking for a corresponding -\fIlibname.def\fR file in the directories specified with the \fB-L\fR -option. -.TP -.BI \-M,\ --main-module= module -Specify that we are building a 16-bit dll, that will ultimately be -linked together with the 32-bit dll specified in \fImodule\fR. Only -meaningful in \fB--dll\fR mode. -.TP -.BI \-N,\ --dll-name= dllname -Set the internal name of the module. It is only used in Win16 -modules. The default is to use the base name of the spec file (without -any extension). This is used for KERNEL, since it lives in -KRNL386.EXE. It shouldn't be needed otherwise. -.TP -.BI \--nm-cmd= nm-command -Specify the command to use to get the list of undefined symbols; the -default is \fBnm\fR. -.TP -.BI --nxcompat= yes|no -Specify whether the module is compatible with no-exec support. The -default is yes. -.TP -.BI \-o,\ --output= file -Set the name of the output file (default is standard output). If the -output file name end in \fB.o\fR, the text output is sent to a -temporary file that is then assembled to produce the specified .o -file. -.TP -.BI \-r,\ --res= rsrc.res -Load resources from the specified binary resource file. The -\fIrsrc.res\fR file can be produced from a source resource file with -.BR wrc(1) -(or with a Windows resource compiler). -.br -This option is only necessary for Win16 resource files, the Win32 ones -can simply listed as -.I input files -and will automatically be handled correctly (though the -.B \-r -option will also work for Win32 files). -.TP -.B --save-temps -Do not delete the various temporary files that \fBwinebuild\fR generates. -.TP -.BI --subsystem= subsystem[:major[.minor]] -Set the subsystem of the executable, which can be one of the following: -.br -.B console -for a command line executable, -.br -.B windows -for a graphical executable, -.br -.B native -for a native-mode dll. -.br -The entry point of a command line executable is a normal C \fBmain\fR -function. A \fBwmain\fR function can be used instead if you need the -argument array to use Unicode strings. A graphical executable has a -\fBWinMain\fR entry point. -.br -Optionally a major and minor subsystem version can also be specified; -the default subsystem version is 4.0. -.TP -.BI --target= cpu-manufacturer[-kernel]-os -Specify the target CPU and platform on which the generated code will -be built. The target specification is in the standard autoconf format -as returned by config.sub. -.TP -.BI \-u,\ --undefined= symbol -Add \fIsymbol\fR to the list of undefined symbols when invoking the -linker. This makes it possible to force a specific module of a static -library to be included when resolving imports. -.TP -.B \-v, --verbose -Display the various subcommands being invoked by -.B winebuild. -.TP -.B \--version -Display the program version and exit. -.TP -.B \-w, --warnings -Turn on warnings. -.SH "SPEC FILE SYNTAX" -.SS "General syntax" -A spec file should contain a list of ordinal declarations. The general -syntax is the following: -.PP -.I ordinal functype -.RI [ flags ]\ exportname \ \fB(\fR\ [ args... ] \ \fB) \ [ handler ] -.br -.IB ordinal\ variable -.RI [ flags ]\ exportname \ \fB(\fR\ [ data... ] \ \fB) -.br -.IB ordinal\ extern -.RI [ flags ]\ exportname \ [ symbolname ] -.br -.IB ordinal\ stub -.RI [ flags ]\ exportname -.br -.IB ordinal\ equate -.RI [ flags ]\ exportname\ data -.br -.BI #\ comments -.PP -Declarations must fit on a single line, except if the end of line is -escaped using a backslash character. The -.B # -character anywhere in a line causes the rest of the line to be ignored -as a comment. -.PP -.I ordinal -specifies the ordinal number corresponding to the entry point, or '@' -for automatic ordinal allocation (Win32 only). -.PP -.I flags -is a series of optional flags, preceded by a '-' character. The -supported flags are: -.RS -.TP -.B -norelay -The entry point is not displayed in relay debugging traces (Win32 -only). -.TP -.B -noname -The entry point will be exported by ordinal instead of by name. The -name is still available for importing. -.TP -.B -ret16 -The function returns a 16-bit value (Win16 only). -.TP -.B -ret64 -The function returns a 64-bit value (Win32 only). -.TP -.B -i386 -The entry point is only available on i386 platforms. -.TP -.B -register -The function uses CPU register to pass arguments. -.TP -.B -private -The function cannot be imported from other dlls, it can only be -accessed through GetProcAddress. -.TP -.B -ordinal -The entry point will be imported by ordinal instead of by name. The -name is still exported. -.SS "Function ordinals" -Syntax: -.br -.I ordinal functype -.RI [ flags ]\ exportname \ \fB(\fR\ [ args... ] \ \fB) \ [ handler ] -.br - -This declaration defines a function entry point. The prototype defined by -.IR exportname \ \fB(\fR\ [ args... ] \ \fB) -specifies the name available for dynamic linking and the format of the -arguments. '@' can be used instead of -.I exportname -for ordinal-only exports. -.PP -.I functype -should be one of: -.RS -.TP -.B stdcall -for a normal Win32 function -.TP -.B pascal -for a normal Win16 function -.TP -.B cdecl -for a Win16 or Win32 function using the C calling convention -.TP -.B varargs -for a Win16 or Win32 function using the C calling convention with a -variable number of arguments -.RE -.PP -.I args -should be one or several of: -.RS -.TP -.B word -(16-bit unsigned value) -.TP -.B s_word -(16-bit signed word) -.TP -.B long -(32-bit value) -.TP -.B double -(64-bit value) -.TP -.B ptr -(linear pointer) -.TP -.B str -(linear pointer to a null-terminated ASCII string) -.TP -.B wstr -(linear pointer to a null-terminated Unicode string) -.TP -.B segptr -(segmented pointer) -.TP -.B segstr -(segmented pointer to a null-terminated ASCII string). -.HP -.RB Only\ ptr ,\ str ,\ wstr ,\ long\ and\ double -are valid for Win32 functions. -.RE -.PP -.I handler -is the name of the actual C function that will implement that entry -point in 32-bit mode. The handler can also be specified as -.IB dllname . function -to define a forwarded function (one whose implementation is in another -dll). If -.I handler -is not specified, it is assumed to be identical to -.I exportname. -.PP -This first example defines an entry point for the 32-bit GetFocus() -call: -.IP -@ stdcall GetFocus() GetFocus -.PP -This second example defines an entry point for the 16-bit -CreateWindow() call (the ordinal 100 is just an example); it also -shows how long lines can be split using a backslash: -.IP -100 pascal CreateWindow(ptr ptr long s_word s_word s_word \\ - s_word word word word ptr) WIN_CreateWindow -.PP -To declare a function using a variable number of arguments, specify -the function as -.B varargs -and declare it in the C file with a '...' parameter for a Win32 -function, or with an extra VA_LIST16 argument for a Win16 function. -See the wsprintf* functions in user.exe.spec and user32.spec for an -example. -.SS "Variable ordinals" -Syntax: -.br -.IB ordinal\ variable -.RI [ flags ]\ exportname \ \fB(\fR\ [ data... ] \ \fB) -.PP -This declaration defines data storage as 32-bit words at the ordinal -specified. -.I exportname -will be the name available for dynamic -linking. -.I data -can be a decimal number or a hex number preceded by "0x". The -following example defines the variable VariableA at ordinal 2 and -containing 4 ints: -.IP -2 variable VariableA(-1 0xff 0 0) -.PP -This declaration only works in Win16 spec files. In Win32 you should -use -.B extern -instead (see below). -.SS "Extern ordinals" -Syntax: -.br -.IB ordinal\ extern -.RI [ flags ]\ exportname \ [ symbolname ] -.PP -This declaration defines an entry that simply maps to a C symbol -(variable or function). It only works in Win32 spec files. -.I exportname -will point to the symbol -.I symbolname -that must be defined in the C code. Alternatively, it can be of the -form -.IB dllname . symbolname -to define a forwarded symbol (one whose implementation is in another -dll). If -.I symbolname -is not specified, it is assumed to be identical to -.I exportname. -.SS "Stub ordinals" -Syntax: -.br -.IB ordinal\ stub -.RI [ flags ]\ exportname -.PP -This declaration defines a stub function. It makes the name and -ordinal available for dynamic linking, but will terminate execution -with an error message if the function is ever called. -.SS "Equate ordinals" -Syntax: -.br -.IB ordinal\ equate -.RI [ flags ]\ exportname\ data -.PP -This declaration defines an ordinal as an absolute value. -.I exportname -will be the name available for dynamic linking. -.I data -can be a decimal number or a hex number preceded by "0x". -.SH AUTHORS -.B winebuild -has been worked on by many people over the years. The main authors are -Robert J. Amstadt, Alexandre Julliard, Martin von Loewis, Ulrich -Weigand and Eric Youngdale. Many other Wine developers have -contributed, please check the file Changelog in the Wine distribution -for the complete details. -.SH BUGS -It is not yet possible to use a PE-format dll in an import -specification; only Wine dlls can be imported. -.PP -If you find a bug, please submit a bug report at -.UR http://bugs.winehq.org -.B http://bugs.winehq.org. -.UE -.SH AVAILABILITY -.B winebuild -is part of the wine distribution, which is available through WineHQ, -the -.B wine -development headquarters, at -.UR http://www.winehq.org/ -.B http://www.winehq.org/. -.UE -.SH "SEE ALSO" -.BR wine (1), -.BR winegcc (1), -.BR wrc (1). diff --git a/reactos/tools/winebuild/winebuild.rbuild b/reactos/tools/winebuild/winebuild.rbuild deleted file mode 100644 index 5398fc0ff4f..00000000000 --- a/reactos/tools/winebuild/winebuild.rbuild +++ /dev/null @@ -1,16 +0,0 @@ - - - - include/reactos/wine - include/reactos - include - include - import.c - main.c - parser.c - res16.c - res32.c - spec32.c - utils.c - mkstemps.c - diff --git a/reactos/tools/winebuild/winglue.h b/reactos/tools/winebuild/winglue.h deleted file mode 100644 index 2765dfdff44..00000000000 --- a/reactos/tools/winebuild/winglue.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef _WINGLUE_H -#define _WINGLUE_H - -#include - -#define DLL_PROCESS_ATTACH 1 -#define DLL_PROCESS_DETACH 0 - -#define IMAGE_FILE_EXECUTABLE_IMAGE 2 -#define IMAGE_FILE_LARGE_ADDRESS_AWARE 32 -#define IMAGE_FILE_32BIT_MACHINE 256 -#define IMAGE_FILE_DLL 8192 -#define IMAGE_SUBSYSTEM_NATIVE 1 -#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 -#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 -#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 -#define IMAGE_FILE_MACHINE_UNKNOWN 0 -#define IMAGE_FILE_MACHINE_I386 0x014c -#define IMAGE_FILE_MACHINE_ALPHA 0x0184 -#define IMAGE_FILE_MACHINE_POWERPC 0x01f0 -#define IMAGE_FILE_MACHINE_AMD64 0x8664 -#define IMAGE_NT_SIGNATURE 0x00004550 -#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100 -#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 -#if defined(_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 - -#ifdef __GNUC__ -#ifndef NONAMELESSUNION -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) -#define _ANONYMOUS_UNION __extension__ -#define _ANONYMOUS_STRUCT __extension__ -#else -#if defined(__cplusplus) -#define _ANONYMOUS_UNION __extension__ -#endif /* __cplusplus */ -#endif /* __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) */ -#endif /* NONAMELESSUNION */ -#elif defined(__WATCOMC__) || defined(_MSC_VER) -#define _ANONYMOUS_UNION -#define _ANONYMOUS_STRUCT -#endif /* __GNUC__/__WATCOMC__ */ -#ifndef _ANONYMOUS_UNION -#define _ANONYMOUS_UNION -#define _UNION_NAME(x) x -#define DUMMYUNIONNAME u -#define DUMMYUNIONNAME2 u2 -#define DUMMYUNIONNAME3 u3 -#define DUMMYUNIONNAME4 u4 -#define DUMMYUNIONNAME5 u5 -#define DUMMYUNIONNAME6 u6 -#define DUMMYUNIONNAME7 u7 -#define DUMMYUNIONNAME8 u8 -#else -#define _UNION_NAME(x) -#define DUMMYUNIONNAME -#define DUMMYUNIONNAME2 -#define DUMMYUNIONNAME3 -#define DUMMYUNIONNAME4 -#define DUMMYUNIONNAME5 -#define DUMMYUNIONNAME6 -#define DUMMYUNIONNAME7 -#define DUMMYUNIONNAME8 -#endif -#ifndef _ANONYMOUS_STRUCT -#define _ANONYMOUS_STRUCT -#define _STRUCT_NAME(x) x -#define DUMMYSTRUCTNAME s -#define DUMMYSTRUCTNAME2 s2 -#define DUMMYSTRUCTNAME3 s3 -#else -#define _STRUCT_NAME(x) -#define DUMMYSTRUCTNAME -#define DUMMYSTRUCTNAME2 -#define DUMMYSTRUCTNAME3 -#endif - -typedef struct _IMAGE_RESOURCE_DIRECTORY { - DWORD Characteristics; - DWORD TimeDateStamp; - WORD MajorVersion; - WORD MinorVersion; - WORD NumberOfNamedEntries; - WORD NumberOfIdEntries; -} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY; -_ANONYMOUS_STRUCT typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { - _ANONYMOUS_UNION union { - _ANONYMOUS_STRUCT struct { - DWORD NameOffset:31; - DWORD NameIsString:1; - }DUMMYSTRUCTNAME; - DWORD Name; - WORD Id; - } DUMMYUNIONNAME; - _ANONYMOUS_UNION union { - DWORD OffsetToData; - _ANONYMOUS_STRUCT struct { - DWORD OffsetToDirectory:31; - DWORD DataIsDirectory:1; - } DUMMYSTRUCTNAME2; - } DUMMYUNIONNAME2; -} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY; -typedef struct _IMAGE_RESOURCE_DATA_ENTRY { - DWORD OffsetToData; - DWORD Size; - DWORD CodePage; - DWORD Reserved; -} IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY; - -#ifndef max -#define max(a,b) ((a)>(b)?(a):(b)) -#endif -#ifndef min -#define min(a,b) ((a)<(b)?(a):(b)) -#endif - -#endif /* _WINGLUE_H */ diff --git a/reactos/tools/wmc/CHANGES b/reactos/tools/wmc/CHANGES deleted file mode 100644 index bec49ca4521..00000000000 --- a/reactos/tools/wmc/CHANGES +++ /dev/null @@ -1,5 +0,0 @@ ---------------------------------------------------------------------------- -Version 1.0.0 (12-Jun-2000) - -Bertho Stultiens -- Initial release diff --git a/reactos/tools/wmc/lang.c b/reactos/tools/wmc/lang.c deleted file mode 100644 index e33a655be8d..00000000000 --- a/reactos/tools/wmc/lang.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Wine Message Compiler language and codepage support - * - * Copyright 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 - */ -#include -#include -#include -#include - -#include "wmc.h" -#include "lang.h" - - -/* - * Languages supported - * - * MUST be sorting ascending on language ID - */ -static const language_t languages[] = { - - {0x0000, 437, 1252, "Neutral", NULL}, - {0x0002, 866, 1251, "Bulgarian", NULL}, - {0x0003, 850, 1252, "Catalan", NULL}, - {0x0005, 852, 1250, "Czech", NULL}, - {0x0006, 850, 1252, "Danish", NULL}, - {0x0007, 850, 1252, "German", NULL}, - {0x0008, 737, 1253, "Greek", NULL}, - {0x0009, 437, 1252, "English", NULL}, - {0x000A, 850, 1252, "Spanish - Traditional Sort", NULL}, - {0x000B, 850, 1252, "Finnish", NULL}, - {0x000C, 850, 1252, "French", NULL}, - {0x000E, 852, 1250, "Hungarian", NULL}, - {0x000F, 850, 1252, "Icelandic", NULL}, - {0x0010, 850, 1252, "Italian", NULL}, - {0x0011, 932, 932, "Japanese", NULL}, - {0x0012, 949, 949, "Korean", NULL}, - {0x0013, 850, 1252, "Dutch", NULL}, - {0x0014, 850, 1252, "Norwegian (Bokmål)", NULL}, - {0x0015, 852, 1250, "Polish", NULL}, - {0x0016, 850, 1252, "Portuguese", NULL}, - {0x0018, 852, 1250, "Romanian", NULL}, - {0x0019, 866, 1251, "Russian", NULL}, - {0x001A, 852, 1250, "Serbian", NULL}, - {0x001B, 852, 1250, "Slovak", NULL}, - {0x001C, 852, 1250, "Albanian", NULL}, - {0x001D, 850, 1252, "Swedish", NULL}, - {0x001F, 857, 1254, "Turkish", NULL}, - {0x0021, 850, 1252, "Indonesian", NULL}, - {0x0022, 866, 1251, "Ukrainian", NULL}, - {0x0023, 866, 1251, "Belarusian", NULL}, - {0x0024, 852, 1250, "Slovene", NULL}, - {0x0025, 775, 1257, "Estonian", NULL}, - {0x0026, 775, 1257, "Latvian", NULL}, - {0x0027, 775, 1257, "Lithuanian", NULL}, - {0x002A,1258, 1258, "Vietnamese", NULL}, - {0x002D, 850, 1252, "Basque", NULL}, - {0x002F, 866, 1251, "Macedonian", NULL}, - {0x0036, 850, 1252, "Afrikaans", NULL}, - {0x0038, 852, 1252, "Faroese", NULL}, - {0x003C, 437, 1252, "Irish", NULL}, - {0x003E, 850, 1252, "Malay", NULL}, - {0x0402, 866, 1251, "Bulgarian", "Bulgaria"}, - {0x0403, 850, 1252, "Catalan", "Spain"}, - {0x0405, 852, 1250, "Czech", "Czech Republic"}, - {0x0406, 850, 1252, "Danish", "Denmark"}, - {0x0407, 850, 1252, "German", "Germany"}, - {0x0408, 737, 1253, "Greek", "Greece"}, - {0x0409, 437, 1252, "English", "United States"}, - {0x040A, 850, 1252, "Spanish - Traditional Sort", "Spain"}, - {0x040B, 850, 1252, "Finnish", "Finland"}, - {0x040C, 850, 1252, "French", "France"}, - {0x040E, 852, 1250, "Hungarian", "Hungary"}, - {0x040F, 850, 1252, "Icelandic", "Iceland"}, - {0x0410, 850, 1252, "Italian", "Italy"}, - {0x0411, 932, 932, "Japanese", "Japan"}, - {0x0412, 949, 949, "Korean", "Korea (south)"}, - {0x0413, 850, 1252, "Dutch", "Netherlands"}, - {0x0414, 850, 1252, "Norwegian (Bokmål)", "Norway"}, - {0x0415, 852, 1250, "Polish", "Poland"}, - {0x0416, 850, 1252, "Portuguese", "Brazil"}, - {0x0418, 852, 1250, "Romanian", "Romania"}, - {0x0419, 866, 1251, "Russian", "Russia"}, - {0x041A, 852, 1250, "Croatian", "Croatia"}, - {0x041B, 852, 1250, "Slovak", "Slovakia"}, - {0x041C, 852, 1250, "Albanian", "Albania"}, - {0x041D, 850, 1252, "Swedish", "Sweden"}, - {0x041F, 857, 1254, "Turkish", "Turkey"}, - {0x0421, 850, 1252, "Indonesian", "Indonesia"}, - {0x0422, 866, 1251, "Ukrainian", "Ukraine"}, - {0x0423, 866, 1251, "Belarusian", "Belarus"}, - {0x0424, 852, 1250, "Slovene", "Slovenia"}, - {0x0425, 775, 1257, "Estonian", "Estonia"}, - {0x0426, 775, 1257, "Latvian", "Latvia"}, - {0x0427, 775, 1257, "Lithuanian", "Lithuania"}, - {0x042A,1258, 1258, "Vietnamese", "Vietnam"}, - {0x042D, 850, 1252, "Basque", "Spain"}, - {0x042F, 866, 1251, "Macedonian", "Former Yugoslav Republic of Macedonia"}, - {0x0436, 850, 1252, "Afrikaans", "South Africa"}, - {0x0438, 852, 1252, "Faroese", "Faroe Islands"}, - {0x043C, 437, 1252, "Irish", "Ireland"}, - {0x043E, 850, 1252, "Malay", "Malaysia"}, -/* {0x048F, ?, ?, "Esperanto", ""},*/ - {0x0804, 936, 936, "Chinese (People's republic of China)", "People's republic of China"}, - {0x0807, 850, 1252, "German", "Switzerland"}, - {0x0809, 850, 1252, "English", "United Kingdom"}, - {0x080A, 850, 1252, "Spanish", "Mexico"}, - {0x080C, 850, 1252, "French", "Belgium"}, - {0x0810, 850, 1252, "Italian", "Switzerland"}, - {0x0813, 850, 1252, "Dutch", "Belgium"}, - {0x0814, 850, 1252, "Norwegian (Nynorsk)", "Norway"}, - {0x0816, 850, 1252, "Portuguese", "Portugal"}, - {0x081A, 852, 1250, "Serbian (latin)", "Yugoslavia"}, - {0x081D, 850, 1252, "Swedish (Finland)", "Finland"}, - {0x0C07, 850, 1252, "German", "Austria"}, - {0x0C09, 850, 1252, "English", "Australia"}, - {0x0C0A, 850, 1252, "Spanish - International Sort", "Spain"}, - {0x0C0C, 850, 1252, "French", "Canada"}, - {0x0C1A, 855, 1251, "Serbian (Cyrillic)", "Serbia"}, - {0x1007, 850, 1252, "German", "Luxembourg"}, - {0x1009, 850, 1252, "English", "Canada"}, - {0x100A, 850, 1252, "Spanish", "Guatemala"}, - {0x100C, 850, 1252, "French", "Switzerland"}, - {0x1407, 850, 1252, "German", "Liechtenstein"}, - {0x1409, 850, 1252, "English", "New Zealand"}, - {0x140A, 850, 1252, "Spanish", "Costa Rica"}, - {0x140C, 850, 1252, "French", "Luxembourg"}, - {0x1809, 850, 1252, "English", "Ireland"}, - {0x180A, 850, 1252, "Spanish", "Panama"}, - {0x1C09, 437, 1252, "English", "South Africa"}, - {0x1C0A, 850, 1252, "Spanish", "Dominican Republic"}, - {0x2009, 850, 1252, "English", "Jamaica"}, - {0x200A, 850, 1252, "Spanish", "Venezuela"}, - {0x2409, 850, 1252, "English", "Caribbean"}, - {0x240A, 850, 1252, "Spanish", "Colombia"}, - {0x2809, 850, 1252, "English", "Belize"}, - {0x280A, 850, 1252, "Spanish", "Peru"}, - {0x2C09, 437, 1252, "English", "Trinidad & Tobago"}, - {0x2C0A, 850, 1252, "Spanish", "Argentina"}, - {0x300A, 850, 1252, "Spanish", "Ecuador"}, - {0x340A, 850, 1252, "Spanish", "Chile"}, - {0x380A, 850, 1252, "Spanish", "Uruguay"}, - {0x3C0A, 850, 1252, "Spanish", "Paraguay"}, - {0x400A, 850, 1252, "Spanish", "Bolivia"}, - {0x440A, 850, 1252, "Spanish", "El Salvador"}, - {0x480A, 850, 1252, "Spanish", "Honduras"}, - {0x4C0A, 850, 1252, "Spanish", "Nicaragua"}, - {0x500A, 850, 1252, "Spanish", "Puerto Rico"} -}; - -#define NLAN (sizeof(languages)/sizeof(languages[0])) - -void show_languages(void) -{ - unsigned int i; - printf(" Code | DOS-cp | WIN-cp | Language | Country\n"); - printf("-------+--------+--------+--------------+---------\n"); - for(i = 0; i < NLAN; i++) - printf("0x%04x | %5d | %5d | %-12s | %s\n", - languages[i].id, - languages[i].doscp, - languages[i].wincp, - languages[i].name, - languages[i].country ? languages[i].country : "Neutral"); -} - -static int langcmp(const void *p1, const void *p2) -{ - return *(const unsigned *)p1 - ((const language_t *)p2)->id; -} - -const language_t *find_language(unsigned id) -{ - return (const language_t *)bsearch(&id, languages, NLAN, sizeof(languages[0]), langcmp); -} - -void show_codepages(void) -{ - unsigned i; - const union cptable *cpp; - printf("Codepages:\n"); - for(i = 0; (cpp = wine_cp_enum_table(i)); i++) - { - printf("%-5d %s\n", cpp->info.codepage, cpp->info.name); - } -} - -const union cptable *find_codepage(int id) -{ - return wine_cp_get_table(id); -} diff --git a/reactos/tools/wmc/lang.h b/reactos/tools/wmc/lang.h deleted file mode 100644 index 5a11c5ba580..00000000000 --- a/reactos/tools/wmc/lang.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Wine Message Compiler language and codepage support - * - * Copyright 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 - */ - -#ifndef __WMC_LANG_H -#define __WMC_LANG_H - -#include "wine/unicode.h" - -typedef struct language { - unsigned id; - unsigned doscp; - unsigned wincp; - const char *name; - const char *country; -} language_t; - -void show_languages(void); -const language_t *find_language(unsigned id); -void show_codepages(void); -const union cptable *find_codepage(int id); - -#endif diff --git a/reactos/tools/wmc/mcl.c b/reactos/tools/wmc/mcl.c deleted file mode 100644 index 380c06c7e34..00000000000 --- a/reactos/tools/wmc/mcl.c +++ /dev/null @@ -1,747 +0,0 @@ -/* - * Wine Message Compiler lexical scanner - * - * Copyright 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 - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "utils.h" -#include "wmc.h" -#include "lang.h" - -#include "mcy.tab.h" - -/* - * Keywords are case insenitive. All normal input is treated as - * being in codepage iso-8859-1 for ascii input files (unicode - * page 0) and as equivalent unicode if unicode input is selected. - * All normal input, which is not part of a message text, is - * enforced to be unicode page 0. Otherwise an error will be - * generated. The normal file data should only be ASCII because - * that is the basic definition of the grammar. - * - * Byteorder or unicode input is determined automatically by - * reading the first 8 bytes and checking them against unicode - * page 0 byteorder (hibyte must be 0). - * -- FIXME -- - * Alternatively, the input is checked against a special byte - * sequence to identify the file. - * -- FIXME -- - * - * - * Keywords: - * Codepages - * Facility - * FacilityNames - * LanguageNames - * MessageId - * MessageIdTypedef - * Severity - * SeverityNames - * SymbolicName - * - * Default added identifiers for classes: - * SeverityNames: - * Success = 0x0 - * Informational = 0x1 - * Warning = 0x2 - * Error = 0x3 - * FacilityNames: - * System = 0x0FF - * Application = 0xFFF - * - * The 'Codepages' keyword is a wmc extension. - */ - -static const WCHAR ustr_application[] = { 'A', 'p', 'p', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', 0 }; -static const WCHAR ustr_codepages[] = { 'C', 'o', 'd', 'e', 'p', 'a', 'g', 'e', 's', 0 }; -static const WCHAR ustr_english[] = { 'E', 'n', 'g', 'l', 'i', 's', 'h', 0 }; -static const WCHAR ustr_error[] = { 'E', 'r', 'r', 'o', 'r', 0 }; -static const WCHAR ustr_facility[] = { 'F', 'a', 'c', 'i', 'l', 'i', 't', 'y', 0 }; -static const WCHAR ustr_facilitynames[] = { 'F', 'a', 'c', 'i', 'l', 'i', 't', 'y', 'N', 'a', 'm', 'e', 's', 0 }; -static const WCHAR ustr_informational[] = { 'I', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 'a', 'l', 0 }; -static const WCHAR ustr_language[] = { 'L', 'a', 'n', 'g', 'u', 'a', 'g', 'e', 0}; -static const WCHAR ustr_languagenames[] = { 'L', 'a', 'n', 'g', 'u', 'a', 'g', 'e', 'N', 'a', 'm', 'e', 's', 0}; -static const WCHAR ustr_messageid[] = { 'M', 'e', 's', 's', 'a', 'g', 'e', 'I', 'd', 0 }; -static const WCHAR ustr_messageidtypedef[] = { 'M', 'e', 's', 's', 'a', 'g', 'e', 'I', 'd', 'T', 'y', 'p', 'e', 'd', 'e', 'f', 0 }; -static const WCHAR ustr_outputbase[] = { 'O', 'u', 't', 'p', 'u', 't', 'B', 'a', 's', 'e', 0 }; -static const WCHAR ustr_severity[] = { 'S', 'e', 'v', 'e', 'r', 'i', 't', 'y', 0 }; -static const WCHAR ustr_severitynames[] = { 'S', 'e', 'v', 'e', 'r', 'i', 't', 'y', 'N', 'a', 'm', 'e', 's', 0 }; -static const WCHAR ustr_success[] = { 'S', 'u', 'c', 'c', 'e', 's', 's', 0 }; -static const WCHAR ustr_symbolicname[] = { 'S', 'y', 'm', 'b', 'o', 'l', 'i', 'c', 'N', 'a', 'm', 'e', 0 }; -static const WCHAR ustr_system[] = { 'S', 'y', 's', 't', 'e', 'm', 0 }; -static const WCHAR ustr_warning[] = { 'W', 'a', 'r', 'n', 'i', 'n', 'g', 0 }; -static const WCHAR ustr_msg00001[] = { 'm', 's', 'g', '0', '0', '0', '0', '1', 0 }; -/* - * This table is to beat any form of "expression building" to check for - * correct filename characters. It is also used for ident checks. - * FIXME: use it more consistently. - */ - -#define CH_SHORTNAME 0x01 -#define CH_LONGNAME 0x02 -#define CH_IDENT 0x04 -#define CH_NUMBER 0x08 -/*#define CH_WILDCARD 0x10*/ -/*#define CH_DOT 0x20*/ -#define CH_PUNCT 0x40 -#define CH_INVALID 0x80 - -static const char char_table[256] = { - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x00 - 0x07 */ - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x08 - 0x0F */ - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x10 - 0x17 */ - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x18 - 0x1F */ - 0x80, 0x03, 0x80, 0x03, 0x03, 0x03, 0x03, 0x03, /* 0x20 - 0x27 " !"#$%&'" */ - 0x43, 0x43, 0x10, 0x80, 0x03, 0x03, 0x22, 0x80, /* 0x28 - 0x2F "()*+,-./" */ - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, /* 0x30 - 0x37 "01234567" */ - 0x0b, 0x0b, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x10, /* 0x38 - 0x3F "89:;<=>?" */ - 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, /* 0x40 - 0x47 "@ABCDEFG" */ - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, /* 0x48 - 0x4F "HIJKLMNO" */ - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, /* 0x50 - 0x57 "PQRSTUVW" */ - 0x07, 0x07, 0x07, 0x80, 0x80, 0x80, 0x80, 0x07, /* 0x58 - 0x5F "XYZ[\]^_" */ - 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, /* 0x60 - 0x67 "`abcdefg" */ - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, /* 0x68 - 0x6F "hijklmno" */ - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, /* 0x70 - 0x77 "pqrstuvw" */ - 0x07, 0x07, 0x07, 0x03, 0x80, 0x03, 0x03, 0x80, /* 0x78 - 0x7F "xyz{|}~ " */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0x80 - 0x87 */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0x88 - 0x8F */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0x90 - 0x97 */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0x98 - 0x9F */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xA0 - 0xA7 */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xA8 - 0xAF */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xB0 - 0xB7 */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xB8 - 0xBF */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xC0 - 0xC7 */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xC8 - 0xCF */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xD0 - 0xD7 */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xD8 - 0xDF */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xE0 - 0xE7 */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xE8 - 0xEF */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 0xF0 - 0xF7 */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x80, /* 0xF8 - 0xFF */ -}; - -static int isisochar(int ch) -{ - return !(ch & (~0xff)); -} - -static int codepage; -static const union cptable *codepage_def; - -void set_codepage(int cp) -{ - codepage = cp; - codepage_def = find_codepage(codepage); - if(!codepage_def) - xyyerror("Codepage %d not found; cannot process\n", codepage); -} - -/* - * Input functions - */ -static int nungetstack = 0; -static int allocungetstack = 0; -static char *ungetstack = NULL; -static int ninputbuffer = 0; -static WCHAR *inputbuffer = NULL; -static char *xlatebuffer = NULL; - -#define INPUTBUFFER_SIZE 2048 /* Must be larger than 4 and approx. large enough to hold a line */ - -/* - * Fill the input buffer with *one* line of input. - * The line is '\n' terminated so that scanning - * messages with translation works as expected - * (otherwise we cannot pre-translate because the - * language is first known one line before the - * actual message). - */ -static int fill_inputbuffer(void) -{ - int n; - static const char err_fatalread[] = "Fatal: reading input failed"; - static int endian = -1; - - if(!inputbuffer) - { - inputbuffer = xmalloc(INPUTBUFFER_SIZE*sizeof(WCHAR)); - xlatebuffer = xmalloc(INPUTBUFFER_SIZE); - } - -try_again: - if(!unicodein) - { - char *cptr; - cptr = fgets(xlatebuffer, INPUTBUFFER_SIZE, yyin); - if(!cptr && ferror(yyin)) - xyyerror(err_fatalread); - else if(!cptr) - return 0; - assert(codepage_def != NULL); - n = wine_cp_mbstowcs(codepage_def, 0, xlatebuffer, strlen(xlatebuffer)+1, inputbuffer, INPUTBUFFER_SIZE); - if(n < 0) - internal_error(__FILE__, __LINE__, "Could not translate to unicode (%d)\n", n); - if(n <= 1) - goto try_again; /* Should not hapen */ - n--; /* Strip added conversion '\0' from input length */ - /* - * FIXME: - * Detect UTF-8 in the first time we read some bytes by - * checking the special sequence "FE..." or something like - * that. I need to check www.unicode.org for details. - */ - } - else - { - if(endian == -1) - { - n = fread(inputbuffer, 1, 8, yyin); - if(n != 8) - { - if(!n && ferror(yyin)) - xyyerror(err_fatalread); - else - xyyerror("Fatal: file to short to determine byteorder (should never happen)\n"); - } - if(isisochar(inputbuffer[0]) && - isisochar(inputbuffer[1]) && - isisochar(inputbuffer[2]) && - isisochar(inputbuffer[3])) - { -#ifdef WORDS_BIGENDIAN - endian = WMC_BO_BIG; -#else - endian = WMC_BO_LITTLE; -#endif - } - else if(isisochar(BYTESWAP_WORD(inputbuffer[0])) && - isisochar(BYTESWAP_WORD(inputbuffer[1])) && - isisochar(BYTESWAP_WORD(inputbuffer[2])) && - isisochar(BYTESWAP_WORD(inputbuffer[3]))) - { -#ifdef WORDS_BIGENDIAN - endian = WMC_BO_LITTLE; -#else - endian = WMC_BO_BIG; -#endif - } - else - xyyerror("Fatal: cannot determine file's byteorder\n"); - /* FIXME: - * Determine the file-endian with the leader-bytes - * "FF FE..."; can't remember the exact sequence. - */ - n /= 2; -#ifdef WORDS_BIGENDIAN - if(endian == WMC_BO_LITTLE) -#else - if(endian == WMC_BO_BIG) -#endif - { - inputbuffer[0] = BYTESWAP_WORD(inputbuffer[0]); - inputbuffer[1] = BYTESWAP_WORD(inputbuffer[1]); - inputbuffer[2] = BYTESWAP_WORD(inputbuffer[2]); - inputbuffer[3] = BYTESWAP_WORD(inputbuffer[3]); - } - - } - else - { - int i; - n = 0; - for(i = 0; i < INPUTBUFFER_SIZE; i++) - { - int t; - t = fread(&inputbuffer[i], 2, 1, yyin); - if(!t && ferror(yyin)) - xyyerror(err_fatalread); - else if(!t && n) - break; - n++; -#ifdef WORDS_BIGENDIAN - if(endian == WMC_BO_LITTLE) -#else - if(endian == WMC_BO_BIG) -#endif - { - if((inputbuffer[i] = BYTESWAP_WORD(inputbuffer[i])) == '\n') - break; - } - else - { - if(inputbuffer[i] == '\n') - break; - } - } - } - - } - - if(!n) - { - mcy_warning("Re-read line (input was or converted to zilch)\n"); - goto try_again; /* Should not happen, but could be due to stdin reading and a signal */ - } - - ninputbuffer += n; - return 1; -} - -static int get_unichar(void) -{ - static WCHAR *b = NULL; - char_number++; - - if(nungetstack) - return ungetstack[--nungetstack]; - - if(!ninputbuffer) - { - if(!fill_inputbuffer()) - return EOF; - b = inputbuffer; - } - - ninputbuffer--; - return (int)(*b++ & 0xffff); -} - -static void unget_unichar(int ch) -{ - if(ch == EOF) - return; - - char_number--; - - if(nungetstack == allocungetstack) - { - allocungetstack += 32; - ungetstack = xrealloc(ungetstack, allocungetstack * sizeof(*ungetstack)); - } - - ungetstack[nungetstack++] = (WCHAR)ch; -} - - -/* - * Normal character stack. - * Used for number scanning. - */ -static int ncharstack = 0; -static int alloccharstack = 0; -static char *charstack = NULL; - -static void empty_char_stack(void) -{ - ncharstack = 0; -} - -static void push_char(int ch) -{ - if(ncharstack == alloccharstack) - { - alloccharstack += 32; - charstack = xrealloc(charstack, alloccharstack * sizeof(*charstack)); - } - charstack[ncharstack++] = (char)ch; -} - -static int tos_char_stack(void) -{ - if(!ncharstack) - return 0; - else - return (int)(charstack[ncharstack-1] & 0xff); -} - -static char *get_char_stack(void) -{ - return charstack; -} - -/* - * Unicode character stack. - * Used for general scanner. - */ -static int nunicharstack = 0; -static int allocunicharstack = 0; -static WCHAR *unicharstack = NULL; - -static void empty_unichar_stack(void) -{ - nunicharstack = 0; -} - -static void push_unichar(int ch) -{ - if(nunicharstack == allocunicharstack) - { - allocunicharstack += 128; - unicharstack = xrealloc(unicharstack, allocunicharstack * sizeof(*unicharstack)); - } - unicharstack[nunicharstack++] = (WCHAR)ch; -} - -#if 0 -static int tos_unichar_stack(void) -{ - if(!nunicharstack) - return 0; - else - return (int)(unicharstack[nunicharstack-1] & 0xffff); -} -#endif - -static WCHAR *get_unichar_stack(void) -{ - return unicharstack; -} - -/* - * Number scanner - * - * state | ch | next state - * ------+-----------------+-------------------------- - * 0 | [0] | 1 - * 0 | [1-9] | 4 - * 0 | . | error (should never occur) - * 1 | [xX] | 2 - * 1 | [0-7] | 3 - * 1 | [89a-wyzA-WYZ_] | error invalid digit - * 1 | . | return 0 - * 2 | [0-9a-fA-F] | 2 - * 2 | [g-zG-Z_] | error invalid hex digit - * 2 | . | return (hex-number) if TOS != [xX] else error - * 3 | [0-7] | 3 - * 3 | [89a-zA-Z_] | error invalid octal digit - * 3 | . | return (octal-number) - * 4 | [0-9] | 4 - * 4 | [a-zA-Z_] | error invalid decimal digit - * 4 | . | return (decimal-number) - * - * All non-identifier characters [^a-zA-Z_0-9] terminate the scan - * and return the value. This is not entirely correct, but close - * enough (should check punctuators as trailing context, but the - * char_table is not adapted to that and it is questionable whether - * it is worth the trouble). - * All non-iso-8859-1 characters are an error. - */ -static int scan_number(int ch) -{ - int state = 0; - int base = 10; - empty_char_stack(); - - while(1) - { - if(!isisochar(ch)) - xyyerror("Invalid digit\n"); - - switch(state) - { - case 0: - if(isdigit(ch)) - { - push_char(ch); - if(ch == '0') - state = 1; - else - state = 4; - } - else - internal_error(__FILE__, __LINE__, "Non-digit in first number-scanner state\n"); - break; - case 1: - if(ch == 'x' || ch == 'X') - { - push_char(ch); - state = 2; - } - else if(ch >= '0' && ch <= '7') - { - push_char(ch); - state = 3; - } - else if(isalpha(ch) || ch == '_') - xyyerror("Invalid number digit\n"); - else - { - unget_unichar(ch); - mcy_lval.num = 0; - return tNUMBER; - } - break; - case 2: - if(isxdigit(ch)) - push_char(ch); - else if(isalpha(ch) || ch == '_' || !isxdigit(tos_char_stack())) - xyyerror("Invalid hex digit\n"); - else - { - base = 16; - goto finish; - } - break; - case 3: - if(ch >= '0' && ch <= '7') - push_char(ch); - else if(isalnum(ch) || ch == '_') - xyyerror("Invalid octal digit\n"); - else - { - base = 8; - goto finish; - } - break; - case 4: - if(isdigit(ch)) - push_char(ch); - else if(isalnum(ch) || ch == '_') - xyyerror("Invalid decimal digit\n"); - else - { - base = 10; - goto finish; - } - break; - default: - internal_error(__FILE__, __LINE__, "Invalid state in number-scanner\n"); - } - ch = get_unichar(); - } -finish: - unget_unichar(ch); - push_char(0); - mcy_lval.num = strtoul(get_char_stack(), NULL, base); - return tNUMBER; -} - -static void newline(void) -{ - line_number++; - char_number = 1; -} - -static int unisort(const void *p1, const void *p2) -{ - return unistricmp(((const token_t *)p1)->name, ((const token_t *)p2)->name); -} - -static token_t *tokentable = NULL; -static int ntokentable = 0; - -token_t *lookup_token(const WCHAR *s) -{ - token_t tok; - - tok.name = s; - return (token_t *)bsearch(&tok, tokentable, ntokentable, sizeof(*tokentable), unisort); -} - -void add_token(tok_e type, const WCHAR *name, int tok, int cp, const WCHAR *alias, int fix) -{ - ntokentable++; - tokentable = xrealloc(tokentable, ntokentable * sizeof(*tokentable)); - tokentable[ntokentable-1].type = type; - tokentable[ntokentable-1].name = name; - tokentable[ntokentable-1].token = tok; - tokentable[ntokentable-1].codepage = cp; - tokentable[ntokentable-1].alias = alias; - tokentable[ntokentable-1].fixed = fix; - qsort(tokentable, ntokentable, sizeof(*tokentable), unisort); -} - -void get_tokentable(token_t **tab, int *len) -{ - assert(tab != NULL); - assert(len != NULL); - *tab = tokentable; - *len = ntokentable; -} - -/* - * The scanner - * - */ -int mcy_lex(void) -{ - static const WCHAR ustr_dot1[] = { '.', '\n', 0 }; - static const WCHAR ustr_dot2[] = { '.', '\r', '\n', 0 }; - static int isinit = 0; - int ch; - - if(!isinit) - { - isinit++; - set_codepage(WMC_DEFAULT_CODEPAGE); - add_token(tok_keyword, ustr_codepages, tCODEPAGE, 0, NULL, 0); - add_token(tok_keyword, ustr_facility, tFACILITY, 0, NULL, 1); - add_token(tok_keyword, ustr_facilitynames, tFACNAMES, 0, NULL, 1); - add_token(tok_keyword, ustr_language, tLANGUAGE, 0, NULL, 1); - add_token(tok_keyword, ustr_languagenames, tLANNAMES, 0, NULL, 1); - add_token(tok_keyword, ustr_messageid, tMSGID, 0, NULL, 1); - add_token(tok_keyword, ustr_messageidtypedef, tTYPEDEF, 0, NULL, 1); - add_token(tok_keyword, ustr_outputbase, tBASE, 0, NULL, 1); - add_token(tok_keyword, ustr_severity, tSEVERITY, 0, NULL, 1); - add_token(tok_keyword, ustr_severitynames, tSEVNAMES, 0, NULL, 1); - add_token(tok_keyword, ustr_symbolicname, tSYMNAME, 0, NULL, 1); - add_token(tok_severity, ustr_error, 0x03, 0, NULL, 0); - add_token(tok_severity, ustr_warning, 0x02, 0, NULL, 0); - add_token(tok_severity, ustr_informational, 0x01, 0, NULL, 0); - add_token(tok_severity, ustr_success, 0x00, 0, NULL, 0); - add_token(tok_facility, ustr_application, 0xFFF, 0, NULL, 0); - add_token(tok_facility, ustr_system, 0x0FF, 0, NULL, 0); - add_token(tok_language, ustr_english, 0x409, 437, ustr_msg00001, 0); - } - - empty_unichar_stack(); - - while(1) - { - if(want_line) - { - while((ch = get_unichar()) != '\n') - { - if(ch == EOF) - xyyerror("Unexpected EOF\n"); - push_unichar(ch); - } - newline(); - push_unichar(ch); - push_unichar(0); - if(!unistrcmp(ustr_dot1, get_unichar_stack()) || !unistrcmp(ustr_dot2, get_unichar_stack())) - { - want_line = 0; - /* Reset the codepage to our default after each message */ - set_codepage(WMC_DEFAULT_CODEPAGE); - return tMSGEND; - } - mcy_lval.str = xunistrdup(get_unichar_stack()); - return tLINE; - } - - ch = get_unichar(); - - if(ch == EOF) - return EOF; - - if(ch == '\n') - { - newline(); - if(want_nl) - { - want_nl = 0; - return tNL; - } - continue; - } - - if(isisochar(ch)) - { - if(want_file) - { - int n = 0; - while(n < 8 && isisochar(ch)) - { - int t = char_table[ch]; - if((t & CH_PUNCT) || !(t & CH_SHORTNAME)) - break; - - push_unichar(ch); - n++; - ch = get_unichar(); - } - unget_unichar(ch); - push_unichar(0); - want_file = 0; - mcy_lval.str = xunistrdup(get_unichar_stack()); - return tFILE; - } - - if(char_table[ch] & CH_IDENT) - { - token_t *tok; - while(isisochar(ch) && (char_table[ch] & (CH_IDENT|CH_NUMBER))) - { - push_unichar(ch); - ch = get_unichar(); - } - unget_unichar(ch); - push_unichar(0); - if(!(tok = lookup_token(get_unichar_stack()))) - { - mcy_lval.str = xunistrdup(get_unichar_stack()); - return tIDENT; - } - switch(tok->type) - { - case tok_keyword: - return tok->token; - - case tok_language: - codepage = tok->codepage; - /* Fall through */ - case tok_severity: - case tok_facility: - mcy_lval.tok = tok; - return tTOKEN; - - default: - internal_error(__FILE__, __LINE__, "Invalid token type encountered\n"); - } - } - - if(isspace(ch)) /* Ignore space */ - continue; - - if(isdigit(ch)) - return scan_number(ch); - } - - switch(ch) - { - case ':': - case '=': - case '+': - case '(': - case ')': - return ch; - case ';': - while(ch != '\n' && ch != EOF) - { - push_unichar(ch); - ch = get_unichar(); - } - newline(); - push_unichar(ch); /* Include the newline */ - push_unichar(0); - mcy_lval.str = xunistrdup(get_unichar_stack()); - return tCOMMENT; - default: - xyyerror("Invalid character '%c' (0x%04x)\n", isisochar(ch) && isprint(ch) ? ch : '.', ch); - } - } -} diff --git a/reactos/tools/wmc/mcy.tab.c b/reactos/tools/wmc/mcy.tab.c deleted file mode 100644 index 1db76c8691d..00000000000 --- a/reactos/tools/wmc/mcy.tab.c +++ /dev/null @@ -1,2435 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.1. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Written by Richard Stallman by simplifying the original so called - ``semantic'' parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.1" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* Substitute the variable and function names. */ -#define yyparse mcy_parse -#define yylex mcy_lex -#define yyerror mcy_error -#define yylval mcy_lval -#define yychar mcy_char -#define yydebug mcy_debug -#define yynerrs mcy_nerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - tSEVNAMES = 258, - tFACNAMES = 259, - tLANNAMES = 260, - tBASE = 261, - tCODEPAGE = 262, - tTYPEDEF = 263, - tNL = 264, - tSYMNAME = 265, - tMSGEND = 266, - tSEVERITY = 267, - tFACILITY = 268, - tLANGUAGE = 269, - tMSGID = 270, - tIDENT = 271, - tLINE = 272, - tFILE = 273, - tCOMMENT = 274, - tNUMBER = 275, - tTOKEN = 276 - }; -#endif -/* Tokens. */ -#define tSEVNAMES 258 -#define tFACNAMES 259 -#define tLANNAMES 260 -#define tBASE 261 -#define tCODEPAGE 262 -#define tTYPEDEF 263 -#define tNL 264 -#define tSYMNAME 265 -#define tMSGEND 266 -#define tSEVERITY 267 -#define tFACILITY 268 -#define tLANGUAGE 269 -#define tMSGID 270 -#define tIDENT 271 -#define tLINE 272 -#define tFILE 273 -#define tCOMMENT 274 -#define tNUMBER 275 -#define tTOKEN 276 - - - - -/* Copy the first part of user declarations. */ -#line 39 "tools/wmc/mcy.y" - - -#include "config.h" - -#include -#include -#include - -#include "utils.h" -#include "wmc.h" -#include "lang.h" - -static const char err_syntax[] = "Syntax error"; -static const char err_number[] = "Number expected"; -static const char err_ident[] = "Identifier expected"; -static const char err_assign[] = "'=' expected"; -static const char err_popen[] = "'(' expected"; -static const char err_pclose[] = "')' expected"; -static const char err_colon[] = "':' expected"; -static const char err_msg[] = "Message expected"; - -/* Scanner switches */ -int want_nl = 0; /* Request next newlinw */ -int want_line = 0; /* Request next complete line */ -int want_file = 0; /* Request next ident as filename */ - -node_t *nodehead = NULL; /* The list of all parsed elements */ -static node_t *nodetail = NULL; -lan_blk_t *lanblockhead; /* List of parsed elements transposed */ - -static int base = 16; /* Current printout base to use (8, 10 or 16) */ -static WCHAR *cast = NULL; /* Current typecast to use */ - -static int last_id = 0; /* The last message ID parsed */ -static int last_sev = 0; /* Last severity code parsed */ -static int last_fac = 0; /* Last facility code parsed */ -static WCHAR *last_sym = NULL;/* Last alias symbol parsed */ -static int have_sev; /* Set if severity parsed for current message */ -static int have_fac; /* Set if facility parsed for current message */ -static int have_sym; /* Set is symbol parsed for current message */ - -static cp_xlat_t *cpxlattab = NULL; /* Codepage translation table */ -static int ncpxlattab = 0; - -/* Prototypes */ -static WCHAR *merge(WCHAR *s1, WCHAR *s2); -static lanmsg_t *new_lanmsg(lan_cp_t *lcp, WCHAR *msg); -static msg_t *add_lanmsg(msg_t *msg, lanmsg_t *lanmsg); -static msg_t *complete_msg(msg_t *msg, int id); -static void add_node(node_e type, void *p); -static void do_add_token(tok_e type, token_t *tok, const char *code); -static void test_id(int id); -static int check_languages(node_t *head); -static lan_blk_t *block_messages(node_t *head); -static void add_cpxlat(int lan, int cpin, int cpout); -static cp_xlat_t *find_cpxlat(int lan); - - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 98 "tools/wmc/mcy.y" -typedef union YYSTYPE { - WCHAR *str; - unsigned num; - token_t *tok; - lanmsg_t *lmp; - msg_t *msg; - lan_cp_t lcp; -} YYSTYPE; -/* Line 196 of yacc.c. */ -#line 203 "mcy.tab.c" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - - -/* Line 219 of yacc.c. */ -#line 215 "mcy.tab.c" - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus)) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#ifndef YY_ -# if YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) -# endif -# endif -# ifndef YY_ -# define YY_(msgid) msgid -# endif -#endif - -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# else -# define YYSTACK_ALLOC alloca -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYINCLUDED_STDLIB_H -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1) -# endif -# ifdef __cplusplus -extern "C" { -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifdef __cplusplus -} -# endif -# endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short int yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined (__GNUC__) && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short int yysigned_char; -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 30 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 165 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 27 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 32 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 104 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 155 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 276 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = -{ - 0, 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, 2, 2, 2, 2, 2, 2, 2, - 23, 24, 2, 26, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 25, 2, - 2, 22, 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, 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, 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, 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, - 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, 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, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned short int yyprhs[] = -{ - 0, 0, 3, 5, 7, 10, 12, 14, 16, 18, - 24, 30, 34, 37, 43, 49, 53, 56, 62, 68, - 72, 75, 81, 87, 91, 94, 98, 102, 105, 109, - 113, 116, 118, 121, 123, 128, 132, 135, 137, 140, - 142, 147, 151, 154, 155, 158, 161, 163, 166, 168, - 176, 183, 188, 192, 195, 196, 199, 202, 204, 207, - 209, 215, 221, 226, 230, 233, 235, 237, 238, 243, - 247, 250, 251, 253, 256, 259, 260, 263, 266, 269, - 273, 277, 280, 284, 288, 291, 295, 299, 302, 304, - 307, 309, 314, 320, 326, 331, 334, 336, 339, 341, - 344, 346, 348, 349, 350 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yysigned_char yyrhs[] = -{ - 28, 0, -1, 29, -1, 30, -1, 29, 30, -1, - 31, -1, 43, -1, 19, -1, 1, -1, 3, 22, - 23, 32, 24, -1, 3, 22, 23, 32, 1, -1, - 3, 22, 1, -1, 3, 1, -1, 4, 22, 23, - 34, 24, -1, 4, 22, 23, 34, 1, -1, 4, - 22, 1, -1, 4, 1, -1, 5, 22, 23, 37, - 24, -1, 5, 22, 23, 37, 1, -1, 5, 22, - 1, -1, 5, 1, -1, 7, 22, 23, 40, 24, - -1, 7, 22, 23, 40, 1, -1, 7, 22, 1, - -1, 7, 1, -1, 8, 22, 16, -1, 8, 22, - 1, -1, 8, 1, -1, 6, 22, 20, -1, 6, - 22, 1, -1, 6, 1, -1, 33, -1, 32, 33, - -1, 1, -1, 55, 22, 20, 36, -1, 55, 22, - 1, -1, 55, 1, -1, 35, -1, 34, 35, -1, - 1, -1, 55, 22, 20, 36, -1, 55, 22, 1, - -1, 55, 1, -1, -1, 25, 16, -1, 25, 1, - -1, 38, -1, 37, 38, -1, 1, -1, 55, 22, - 20, 58, 25, 18, 39, -1, 55, 22, 20, 58, - 25, 1, -1, 55, 22, 20, 1, -1, 55, 22, - 1, -1, 55, 1, -1, -1, 25, 20, -1, 25, - 1, -1, 41, -1, 40, 41, -1, 1, -1, 42, - 22, 20, 25, 20, -1, 42, 22, 20, 25, 1, - -1, 42, 22, 20, 1, -1, 42, 22, 1, -1, - 42, 1, -1, 20, -1, 21, -1, -1, 45, 47, - 44, 51, -1, 15, 22, 46, -1, 15, 1, -1, - -1, 20, -1, 26, 20, -1, 26, 1, -1, -1, - 47, 49, -1, 47, 50, -1, 47, 48, -1, 10, - 22, 16, -1, 10, 22, 1, -1, 10, 1, -1, - 12, 22, 55, -1, 12, 22, 1, -1, 12, 1, - -1, 13, 22, 55, -1, 13, 22, 1, -1, 13, - 1, -1, 52, -1, 51, 52, -1, 1, -1, 53, - 57, 54, 11, -1, 14, 56, 22, 55, 9, -1, - 14, 56, 22, 55, 1, -1, 14, 56, 22, 1, - -1, 14, 1, -1, 17, -1, 54, 17, -1, 1, - -1, 54, 1, -1, 16, -1, 21, -1, -1, -1, - -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short int yyrline[] = -{ - 0, 123, 123, 130, 131, 134, 135, 136, 137, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 171, - 172, 178, 179, 180, 183, 190, 191, 197, 198, 199, - 202, 209, 210, 213, 214, 215, 221, 222, 223, 226, - 234, 235, 236, 237, 240, 241, 242, 248, 249, 250, - 253, 263, 264, 265, 266, 269, 270, 280, 280, 283, - 288, 291, 292, 293, 294, 297, 298, 299, 300, 303, - 304, 305, 308, 316, 317, 320, 328, 329, 335, 336, - 337, 340, 348, 377, 378, 379, 382, 383, 384, 385, - 391, 392, 395, 398, 401 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "tSEVNAMES", "tFACNAMES", "tLANNAMES", - "tBASE", "tCODEPAGE", "tTYPEDEF", "tNL", "tSYMNAME", "tMSGEND", - "tSEVERITY", "tFACILITY", "tLANGUAGE", "tMSGID", "tIDENT", "tLINE", - "tFILE", "tCOMMENT", "tNUMBER", "tTOKEN", "'='", "'('", "')'", "':'", - "'+'", "$accept", "file", "items", "decl", "global", "smaps", "smap", - "fmaps", "fmap", "alias", "lmaps", "lmap", "optcp", "cmaps", "cmap", - "clan", "msg", "@1", "msgid", "id", "sevfacsym", "sym", "sev", "fac", - "bodies", "body", "lang", "lines", "token", "setnl", "setline", - "setfile", 0 -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short int yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 61, 40, 41, 58, 43 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 27, 28, 29, 29, 30, 30, 30, 30, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, - 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, - 38, 38, 38, 38, 39, 39, 39, 40, 40, 40, - 41, 41, 41, 41, 41, 42, 42, 44, 43, 45, - 45, 46, 46, 46, 46, 47, 47, 47, 47, 48, - 48, 48, 49, 49, 49, 50, 50, 50, 51, 51, - 51, 52, 53, 53, 53, 53, 54, 54, 54, 54, - 55, 55, 56, 57, 58 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = -{ - 0, 2, 1, 1, 2, 1, 1, 1, 1, 5, - 5, 3, 2, 5, 5, 3, 2, 5, 5, 3, - 2, 5, 5, 3, 2, 3, 3, 2, 3, 3, - 2, 1, 2, 1, 4, 3, 2, 1, 2, 1, - 4, 3, 2, 0, 2, 2, 1, 2, 1, 7, - 6, 4, 3, 2, 0, 2, 2, 1, 2, 1, - 5, 5, 4, 3, 2, 1, 1, 0, 4, 3, - 2, 0, 1, 2, 2, 0, 2, 2, 2, 3, - 3, 2, 3, 3, 2, 3, 3, 2, 1, 2, - 1, 4, 5, 5, 4, 2, 1, 2, 1, 2, - 1, 1, 0, 0, 0 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const unsigned char yydefact[] = -{ - 0, 8, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 3, 5, 6, 75, 12, 0, 16, 0, - 20, 0, 30, 0, 24, 0, 27, 0, 70, 71, - 1, 4, 67, 11, 0, 15, 0, 19, 0, 29, - 28, 23, 0, 26, 25, 72, 0, 69, 0, 0, - 0, 0, 78, 76, 77, 33, 100, 101, 0, 31, - 0, 39, 0, 37, 0, 48, 0, 46, 0, 59, - 65, 66, 0, 57, 0, 74, 73, 81, 0, 84, - 0, 87, 0, 90, 0, 68, 88, 103, 10, 9, - 32, 36, 0, 14, 13, 38, 42, 0, 18, 17, - 47, 53, 0, 22, 21, 58, 64, 0, 80, 79, - 83, 82, 86, 85, 95, 0, 89, 0, 35, 43, - 41, 43, 52, 0, 63, 0, 0, 98, 96, 0, - 0, 34, 40, 51, 0, 62, 0, 94, 0, 99, - 91, 97, 45, 44, 0, 61, 60, 93, 92, 50, - 54, 0, 49, 56, 55 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const short int yydefgoto[] = -{ - -1, 10, 11, 12, 13, 58, 59, 62, 63, 131, - 66, 67, 152, 72, 73, 74, 14, 51, 15, 47, - 32, 52, 53, 54, 85, 86, 87, 129, 60, 115, - 117, 134 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -37 -static const short int yypact[] = -{ - 132, -37, 18, 44, 46, 47, 48, 49, 50, -37, - 10, 113, -37, -37, -37, -37, -37, 11, -37, 14, - -37, 19, -37, 85, -37, 20, -37, 147, -37, -13, - -37, -37, 87, -37, 66, -37, 80, -37, 82, -37, - -37, -37, 64, -37, -37, -37, 107, -37, 51, 52, - 53, 3, -37, -37, -37, -37, -37, -37, 7, -37, - 54, -37, 8, -37, 55, -37, 17, -37, 56, -37, - -37, -37, 15, -37, 57, -37, -37, -37, 148, -37, - 88, -37, 90, -37, 58, -3, -37, -37, -37, -37, - -37, -37, 109, -37, -37, -37, -37, 114, -37, -37, - -37, -37, 121, -37, -37, -37, -37, 122, -37, -37, - -37, -37, -37, -37, -37, 38, -37, 129, -37, 36, - -37, 36, -37, 0, -37, 2, 91, -37, -37, 144, - 149, -37, -37, -37, 37, -37, 123, -37, 5, -37, - -37, -37, -37, -37, 4, -37, -37, -37, -37, -37, - 39, 124, -37, -37, -37 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yysigned_char yypgoto[] = -{ - -37, -37, -37, 77, -37, -37, 35, -37, 1, -27, - -37, 29, -37, -37, 30, -37, -37, -37, -37, -37, - -37, -37, -37, -37, -37, 41, -37, -37, -36, -37, - -37, -37 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -105 -static const short int yytable[] = -{ - 64, 133, 68, 135, 83, 149, 147, 45, 88, 93, - 30, 84, 33, 46, 148, 35, 103, 84, 98, 16, - 37, 41, 150, 56, 56, -104, 64, 136, 57, 57, - 68, 89, 94, 56, 34, 70, 71, 36, 57, 104, - 17, 99, 38, 42, 111, 18, 113, 20, 22, 24, - 26, 28, 77, 79, 81, 91, 96, 101, 106, 114, - 126, 130, 144, 95, 151, 69, 19, 55, 21, 23, - 25, 27, 29, 78, 80, 82, 92, 97, 102, 107, - -102, 61, 56, 65, 70, 71, 39, 57, 31, 110, - 138, 112, 137, 90, 132, 100, 56, 48, 56, 49, - 50, 57, 105, 57, 56, 40, 56, 56, 75, 57, - 118, 57, 57, -2, 1, 120, 2, 3, 4, 5, - 6, 7, 122, 124, 145, 153, 116, 76, 8, 119, - 127, 0, 9, 1, 121, 2, 3, 4, 5, 6, - 7, 123, 125, 146, 154, 139, 128, 8, 43, 108, - 142, 9, 0, 0, 0, 140, 0, 0, 0, 0, - 0, 141, 0, 44, 109, 143 -}; - -static const yysigned_char yycheck[] = -{ - 36, 1, 38, 1, 1, 1, 1, 20, 1, 1, - 0, 14, 1, 26, 9, 1, 1, 14, 1, 1, - 1, 1, 18, 16, 16, 25, 62, 25, 21, 21, - 66, 24, 24, 16, 23, 20, 21, 23, 21, 24, - 22, 24, 23, 23, 80, 1, 82, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 22, 25, 25, 62, 25, 1, 22, 1, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 1, 16, 1, 20, 21, 1, 21, 11, 1, - 126, 1, 1, 58, 121, 66, 16, 10, 16, 12, - 13, 21, 72, 21, 16, 20, 16, 16, 1, 21, - 1, 21, 21, 0, 1, 1, 3, 4, 5, 6, - 7, 8, 1, 1, 1, 1, 85, 20, 15, 20, - 1, -1, 19, 1, 20, 3, 4, 5, 6, 7, - 8, 20, 20, 20, 20, 1, 17, 15, 1, 1, - 1, 19, -1, -1, -1, 11, -1, -1, -1, -1, - -1, 17, -1, 16, 16, 16 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 1, 3, 4, 5, 6, 7, 8, 15, 19, - 28, 29, 30, 31, 43, 45, 1, 22, 1, 22, - 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, - 0, 30, 47, 1, 23, 1, 23, 1, 23, 1, - 20, 1, 23, 1, 16, 20, 26, 46, 10, 12, - 13, 44, 48, 49, 50, 1, 16, 21, 32, 33, - 55, 1, 34, 35, 55, 1, 37, 38, 55, 1, - 20, 21, 40, 41, 42, 1, 20, 1, 22, 1, - 22, 1, 22, 1, 14, 51, 52, 53, 1, 24, - 33, 1, 22, 1, 24, 35, 1, 22, 1, 24, - 38, 1, 22, 1, 24, 41, 1, 22, 1, 16, - 1, 55, 1, 55, 1, 56, 52, 57, 1, 20, - 1, 20, 1, 20, 1, 20, 22, 1, 17, 54, - 25, 36, 36, 1, 58, 1, 25, 1, 55, 1, - 11, 17, 1, 16, 25, 1, 20, 1, 9, 1, - 18, 25, 39, 1, 20 -}; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ - -#define YYFAIL goto yyerrlab - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) - - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short int *bottom, short int *top) -#else -static void -yy_stack_print (bottom, top) - short int *bottom; - short int *top; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; -#endif -{ - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ", - yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]); -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - size_t yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -#endif /* YYERROR_VERBOSE */ - - - -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else -static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); -} - -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - -/* The look-ahead symbol. */ -int yychar; - -/* The semantic value of the look-ahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) -#else -int -yyparse () - ; -#endif -#endif -{ - - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short int yyssa[YYINITDEPTH]; - short int *yyss = yyssa; - short int *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - -#define YYPOPSTACK (yyvsp--, yyssp--) - - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; - - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short int *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - short int *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a look-ahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to look-ahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) - goto yydefault; - - /* Not known => get a look-ahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the look-ahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; - - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - yystate = yyn; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -#line 123 "tools/wmc/mcy.y" - { - if(!check_languages(nodehead)) - xyyerror("No messages defined\n"); - lanblockhead = block_messages(nodehead); - ;} - break; - - case 6: -#line 135 "tools/wmc/mcy.y" - { add_node(nd_msg, (yyvsp[0].msg)); ;} - break; - - case 7: -#line 136 "tools/wmc/mcy.y" - { add_node(nd_comment, (yyvsp[0].str)); ;} - break; - - case 8: -#line 137 "tools/wmc/mcy.y" - { xyyerror(err_syntax); /* `Catch all' error */ ;} - break; - - case 10: -#line 141 "tools/wmc/mcy.y" - { xyyerror(err_pclose); ;} - break; - - case 11: -#line 142 "tools/wmc/mcy.y" - { xyyerror(err_popen); ;} - break; - - case 12: -#line 143 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 14: -#line 145 "tools/wmc/mcy.y" - { xyyerror(err_pclose); ;} - break; - - case 15: -#line 146 "tools/wmc/mcy.y" - { xyyerror(err_popen); ;} - break; - - case 16: -#line 147 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 18: -#line 149 "tools/wmc/mcy.y" - { xyyerror(err_pclose); ;} - break; - - case 19: -#line 150 "tools/wmc/mcy.y" - { xyyerror(err_popen); ;} - break; - - case 20: -#line 151 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 22: -#line 153 "tools/wmc/mcy.y" - { xyyerror(err_pclose); ;} - break; - - case 23: -#line 154 "tools/wmc/mcy.y" - { xyyerror(err_popen); ;} - break; - - case 24: -#line 155 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 25: -#line 156 "tools/wmc/mcy.y" - { cast = (yyvsp[0].str); ;} - break; - - case 26: -#line 157 "tools/wmc/mcy.y" - { xyyerror(err_number); ;} - break; - - case 27: -#line 158 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 28: -#line 159 "tools/wmc/mcy.y" - { - switch(base) - { - case 8: - case 10: - case 16: - base = (yyvsp[0].num); - break; - default: - xyyerror("Numberbase must be 8, 10 or 16\n"); - } - ;} - break; - - case 29: -#line 171 "tools/wmc/mcy.y" - { xyyerror(err_number); ;} - break; - - case 30: -#line 172 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 33: -#line 180 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 34: -#line 183 "tools/wmc/mcy.y" - { - (yyvsp[-3].tok)->token = (yyvsp[-1].num); - (yyvsp[-3].tok)->alias = (yyvsp[0].str); - if((yyvsp[-1].num) & (~0x3)) - xyyerror("Severity value out of range (0x%08x > 0x3)\n", (yyvsp[-1].num)); - do_add_token(tok_severity, (yyvsp[-3].tok), "severity"); - ;} - break; - - case 35: -#line 190 "tools/wmc/mcy.y" - { xyyerror(err_number); ;} - break; - - case 36: -#line 191 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 39: -#line 199 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 40: -#line 202 "tools/wmc/mcy.y" - { - (yyvsp[-3].tok)->token = (yyvsp[-1].num); - (yyvsp[-3].tok)->alias = (yyvsp[0].str); - if((yyvsp[-1].num) & (~0xfff)) - xyyerror("Facility value out of range (0x%08x > 0xfff)\n", (yyvsp[-1].num)); - do_add_token(tok_facility, (yyvsp[-3].tok), "facility"); - ;} - break; - - case 41: -#line 209 "tools/wmc/mcy.y" - { xyyerror(err_number); ;} - break; - - case 42: -#line 210 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 43: -#line 213 "tools/wmc/mcy.y" - { (yyval.str) = NULL; ;} - break; - - case 44: -#line 214 "tools/wmc/mcy.y" - { (yyval.str) = (yyvsp[0].str); ;} - break; - - case 45: -#line 215 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 48: -#line 223 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 49: -#line 226 "tools/wmc/mcy.y" - { - (yyvsp[-6].tok)->token = (yyvsp[-4].num); - (yyvsp[-6].tok)->alias = (yyvsp[-1].str); - (yyvsp[-6].tok)->codepage = (yyvsp[0].num); - do_add_token(tok_language, (yyvsp[-6].tok), "language"); - if(!find_language((yyvsp[-4].num)) && !find_cpxlat((yyvsp[-4].num))) - mcy_warning("Language 0x%x not built-in, using codepage %d; use explicit codepage to override\n", (yyvsp[-4].num), WMC_DEFAULT_CODEPAGE); - ;} - break; - - case 50: -#line 234 "tools/wmc/mcy.y" - { xyyerror("Filename expected\n"); ;} - break; - - case 51: -#line 235 "tools/wmc/mcy.y" - { xyyerror(err_colon); ;} - break; - - case 52: -#line 236 "tools/wmc/mcy.y" - { xyyerror(err_number); ;} - break; - - case 53: -#line 237 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 54: -#line 240 "tools/wmc/mcy.y" - { (yyval.num) = 0; ;} - break; - - case 55: -#line 241 "tools/wmc/mcy.y" - { (yyval.num) = (yyvsp[0].num); ;} - break; - - case 56: -#line 242 "tools/wmc/mcy.y" - { xyyerror("Codepage-number expected\n"); ;} - break; - - case 59: -#line 250 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 60: -#line 253 "tools/wmc/mcy.y" - { - static const char err_nocp[] = "Codepage %d not builtin; cannot convert"; - if(find_cpxlat((yyvsp[-4].num))) - xyyerror("Codepage translation already defined for language 0x%x\n", (yyvsp[-4].num)); - if((yyvsp[-2].num) && !find_codepage((yyvsp[-2].num))) - xyyerror(err_nocp, (yyvsp[-2].num)); - if((yyvsp[0].num) && !find_codepage((yyvsp[0].num))) - xyyerror(err_nocp, (yyvsp[0].num)); - add_cpxlat((yyvsp[-4].num), (yyvsp[-2].num), (yyvsp[0].num)); - ;} - break; - - case 61: -#line 263 "tools/wmc/mcy.y" - { xyyerror(err_number); ;} - break; - - case 62: -#line 264 "tools/wmc/mcy.y" - { xyyerror(err_colon); ;} - break; - - case 63: -#line 265 "tools/wmc/mcy.y" - { xyyerror(err_number); ;} - break; - - case 64: -#line 266 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 65: -#line 269 "tools/wmc/mcy.y" - { (yyval.num) = (yyvsp[0].num); ;} - break; - - case 66: -#line 270 "tools/wmc/mcy.y" - { - if((yyvsp[0].tok)->type != tok_language) - xyyerror("Language name or code expected\n"); - (yyval.num) = (yyvsp[0].tok)->token; - ;} - break; - - case 67: -#line 280 "tools/wmc/mcy.y" - { test_id((yyvsp[-1].num)); ;} - break; - - case 68: -#line 280 "tools/wmc/mcy.y" - { (yyval.msg) = complete_msg((yyvsp[0].msg), (yyvsp[-3].num)); ;} - break; - - case 69: -#line 283 "tools/wmc/mcy.y" - { - if((yyvsp[0].num) & (~0xffff)) - xyyerror("Message ID value out of range (0x%08x > 0xffff)\n", (yyvsp[0].num)); - (yyval.num) = (yyvsp[0].num); - ;} - break; - - case 70: -#line 288 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 71: -#line 291 "tools/wmc/mcy.y" - { (yyval.num) = ++last_id; ;} - break; - - case 72: -#line 292 "tools/wmc/mcy.y" - { (yyval.num) = last_id = (yyvsp[0].num); ;} - break; - - case 73: -#line 293 "tools/wmc/mcy.y" - { (yyval.num) = last_id += (yyvsp[0].num); ;} - break; - - case 74: -#line 294 "tools/wmc/mcy.y" - { xyyerror(err_number); ;} - break; - - case 75: -#line 297 "tools/wmc/mcy.y" - { have_sev = have_fac = have_sym = 0; ;} - break; - - case 76: -#line 298 "tools/wmc/mcy.y" - { if(have_sev) xyyerror("Severity already defined\n"); have_sev = 1; ;} - break; - - case 77: -#line 299 "tools/wmc/mcy.y" - { if(have_fac) xyyerror("Facility already defined\n"); have_fac = 1; ;} - break; - - case 78: -#line 300 "tools/wmc/mcy.y" - { if(have_sym) xyyerror("Symbolname already defined\n"); have_sym = 1; ;} - break; - - case 79: -#line 303 "tools/wmc/mcy.y" - { last_sym = (yyvsp[0].str); ;} - break; - - case 80: -#line 304 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 81: -#line 305 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 82: -#line 308 "tools/wmc/mcy.y" - { - token_t *tok = lookup_token((yyvsp[0].tok)->name); - if(!tok) - xyyerror("Undefined severityname\n"); - if(tok->type != tok_severity) - xyyerror("Identifier is not of class 'severity'\n"); - last_sev = tok->token; - ;} - break; - - case 83: -#line 316 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 84: -#line 317 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 85: -#line 320 "tools/wmc/mcy.y" - { - token_t *tok = lookup_token((yyvsp[0].tok)->name); - if(!tok) - xyyerror("Undefined facilityname\n"); - if(tok->type != tok_facility) - xyyerror("Identifier is not of class 'facility'\n"); - last_fac = tok->token; - ;} - break; - - case 86: -#line 328 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 87: -#line 329 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 88: -#line 335 "tools/wmc/mcy.y" - { (yyval.msg) = add_lanmsg(NULL, (yyvsp[0].lmp)); ;} - break; - - case 89: -#line 336 "tools/wmc/mcy.y" - { (yyval.msg) = add_lanmsg((yyvsp[-1].msg), (yyvsp[0].lmp)); ;} - break; - - case 90: -#line 337 "tools/wmc/mcy.y" - { xyyerror("'Language=...' (start of message text-definition) expected\n"); ;} - break; - - case 91: -#line 340 "tools/wmc/mcy.y" - { (yyval.lmp) = new_lanmsg(&(yyvsp[-3].lcp), (yyvsp[-1].str)); ;} - break; - - case 92: -#line 348 "tools/wmc/mcy.y" - { - token_t *tok = lookup_token((yyvsp[-1].tok)->name); - cp_xlat_t *cpx; - if(!tok) - xyyerror("Undefined language\n"); - if(tok->type != tok_language) - xyyerror("Identifier is not of class 'language'\n"); - if((cpx = find_cpxlat(tok->token))) - { - set_codepage((yyval.lcp).codepage = cpx->cpin); - } - else if(!tok->codepage) - { - const language_t *lan = find_language(tok->token); - if(!lan) - { - /* Just set default; warning was given while parsing languagenames */ - set_codepage((yyval.lcp).codepage = WMC_DEFAULT_CODEPAGE); - } - else - { - /* The default seems to be to use the DOS codepage... */ - set_codepage((yyval.lcp).codepage = lan->doscp); - } - } - else - set_codepage((yyval.lcp).codepage = tok->codepage); - (yyval.lcp).language = tok->token; - ;} - break; - - case 93: -#line 377 "tools/wmc/mcy.y" - { xyyerror("Missing newline\n"); ;} - break; - - case 94: -#line 378 "tools/wmc/mcy.y" - { xyyerror(err_ident); ;} - break; - - case 95: -#line 379 "tools/wmc/mcy.y" - { xyyerror(err_assign); ;} - break; - - case 96: -#line 382 "tools/wmc/mcy.y" - { (yyval.str) = (yyvsp[0].str); ;} - break; - - case 97: -#line 383 "tools/wmc/mcy.y" - { (yyval.str) = merge((yyvsp[-1].str), (yyvsp[0].str)); ;} - break; - - case 98: -#line 384 "tools/wmc/mcy.y" - { xyyerror(err_msg); ;} - break; - - case 99: -#line 385 "tools/wmc/mcy.y" - { xyyerror(err_msg); ;} - break; - - case 100: -#line 391 "tools/wmc/mcy.y" - { (yyval.tok) = xmalloc(sizeof(token_t)); memset((yyval.tok),0,sizeof(*(yyval.tok))); (yyval.tok)->name = (yyvsp[0].str); ;} - break; - - case 101: -#line 392 "tools/wmc/mcy.y" - { (yyval.tok) = (yyvsp[0].tok); ;} - break; - - case 102: -#line 395 "tools/wmc/mcy.y" - { want_nl = 1; ;} - break; - - case 103: -#line 398 "tools/wmc/mcy.y" - { want_line = 1; ;} - break; - - case 104: -#line 401 "tools/wmc/mcy.y" - { want_file = 1; ;} - break; - - - default: break; - } - -/* Line 1126 of yacc.c. */ -#line 1890 "mcy.tab.c" - - yyvsp -= yylen; - yyssp -= yylen; - - - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - char *yymsg = 0; -# define YYERROR_VERBOSE_ARGS_MAXIMUM 5 - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; - -#if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -#endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= yysize1 < yysize; - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } - - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= yysize1 < yysize; - yysize = yysize1; - - if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM) - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yymsg; - int yyi = 0; - while ((*yyp = *yyf)) - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - { - yyerror (YY_("syntax error")); - goto yyexhaustedlab; - } - } - else -#endif /* YYERROR_VERBOSE */ - yyerror (YY_("syntax error")); - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse look-ahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse look-ahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (0) - goto yyerrorlab; - -yyvsp -= yylen; - yyssp -= yylen; - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", yystos[yystate], yyvsp); - YYPOPSTACK; - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - if (yyn == YYFINAL) - YYACCEPT; - - *++yyvsp = yylval; - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK; - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - return yyresult; -} - - -#line 404 "tools/wmc/mcy.y" - - -static WCHAR *merge(WCHAR *s1, WCHAR *s2) -{ - int l1 = unistrlen(s1); - int l2 = unistrlen(s2); - s1 = xrealloc(s1, (l1 + l2 + 1) * sizeof(*s1)); - unistrcpy(s1+l1, s2); - free(s2); - return s1; -} - -static void do_add_token(tok_e type, token_t *tok, const char *code) -{ - token_t *tp = lookup_token(tok->name); - if(tp) - { - if(tok->type != type) - mcy_warning("Type change in token\n"); - if(tp != tok) - xyyerror("Overlapping token not the same\n"); - /* else its already defined and changed */ - if(tok->fixed) - xyyerror("Redefinition of %s\n", code); - tok->fixed = 1; - } - else - { - add_token(type, tok->name, tok->token, tok->codepage, tok->alias, 1); - free(tok); - } -} - -static lanmsg_t *new_lanmsg(lan_cp_t *lcp, WCHAR *msg) -{ - lanmsg_t *lmp = xmalloc(sizeof(lanmsg_t)); - lmp->lan = lcp->language; - lmp->cp = lcp->codepage; - lmp->msg = msg; - lmp->len = unistrlen(msg) + 1; /* Include termination */ - if(lmp->len > 4096) - mcy_warning("Message exceptionally long; might be a missing termination\n"); - return lmp; -} - -static msg_t *add_lanmsg(msg_t *msg, lanmsg_t *lanmsg) -{ - int i; - if(!msg) - { - msg = xmalloc(sizeof(msg_t)); - memset( msg, 0, sizeof(*msg) ); - } - msg->msgs = xrealloc(msg->msgs, (msg->nmsgs+1) * sizeof(*(msg->msgs))); - msg->msgs[msg->nmsgs] = lanmsg; - msg->nmsgs++; - for(i = 0; i < msg->nmsgs-1; i++) - { - if(msg->msgs[i]->lan == lanmsg->lan) - xyyerror("Message for language 0x%x already defined\n", lanmsg->lan); - } - return msg; -} - -static int sort_lanmsg(const void *p1, const void *p2) -{ - return (*(const lanmsg_t * const *)p1)->lan - (*(const lanmsg_t * const*)p2)->lan; -} - -static msg_t *complete_msg(msg_t *mp, int id) -{ - assert(mp != NULL); - mp->id = id; - if(have_sym) - mp->sym = last_sym; - else - xyyerror("No symbolic name defined for message id %d\n", id); - mp->sev = last_sev; - mp->fac = last_fac; - qsort(mp->msgs, mp->nmsgs, sizeof(*(mp->msgs)), sort_lanmsg); - mp->realid = id | (last_sev << 30) | (last_fac << 16); - if(custombit) - mp->realid |= 1 << 29; - mp->base = base; - mp->cast = cast; - return mp; -} - -static void add_node(node_e type, void *p) -{ - node_t *ndp = xmalloc(sizeof(node_t)); - memset( ndp, 0, sizeof(*ndp) ); - ndp->type = type; - ndp->u.all = p; - - if(nodetail) - { - ndp->prev = nodetail; - nodetail->next = ndp; - nodetail = ndp; - } - else - { - nodehead = nodetail = ndp; - } -} - -static void test_id(int id) -{ - node_t *ndp; - for(ndp = nodehead; ndp; ndp = ndp->next) - { - if(ndp->type != nd_msg) - continue; - if(ndp->u.msg->id == id && ndp->u.msg->sev == last_sev && ndp->u.msg->fac == last_fac) - xyyerror("MessageId %d with facility 0x%x and severity 0x%x already defined\n", id, last_fac, last_sev); - } -} - -static int check_languages(node_t *head) -{ - static const char err_missing[] = "Missing definition for language 0x%x; MessageID %d, facility 0x%x, severity 0x%x"; - node_t *ndp; - int nm = 0; - msg_t *msg = NULL; - - for(ndp = head; ndp; ndp = ndp->next) - { - if(ndp->type != nd_msg) - continue; - if(!nm) - { - msg = ndp->u.msg; - } - else - { - int i; - msg_t *m1; - msg_t *m2; - if(ndp->u.msg->nmsgs > msg->nmsgs) - { - m1 = ndp->u.msg; - m2 = msg; - } - else - { - m1 = msg; - m2 = ndp->u.msg; - } - - for(i = 0; i < m1->nmsgs; i++) - { - if(i > m2->nmsgs) - error(err_missing, m1->msgs[i]->lan, m2->id, m2->fac, m2->sev); - else if(m1->msgs[i]->lan < m2->msgs[i]->lan) - error(err_missing, m1->msgs[i]->lan, m2->id, m2->fac, m2->sev); - else if(m1->msgs[i]->lan > m2->msgs[i]->lan) - error(err_missing, m2->msgs[i]->lan, m1->id, m1->fac, m1->sev); - } - } - nm++; - } - return nm; -} - -#define MSGRID(x) ((*(const msg_t * const*)(x))->realid) -static int sort_msg(const void *p1, const void *p2) -{ - return MSGRID(p1) > MSGRID(p2) ? 1 : (MSGRID(p1) == MSGRID(p2) ? 0 : -1); - /* return (*(msg_t **)p1)->realid - (*(msg_t **)p1)->realid; */ -} - -/* - * block_messages() basically transposes the messages - * from ID/language based list to a language/ID - * based list. - */ -static lan_blk_t *block_messages(node_t *head) -{ - lan_blk_t *lbp; - lan_blk_t *lblktail = NULL; - lan_blk_t *lblkhead = NULL; - msg_t **msgtab = NULL; - node_t *ndp; - int nmsg = 0; - int i; - int nl; - int factor = unicodeout ? 2 : 1; - - for(ndp = head; ndp; ndp = ndp->next) - { - if(ndp->type != nd_msg) - continue; - msgtab = xrealloc(msgtab, (nmsg+1) * sizeof(*msgtab)); - msgtab[nmsg++] = ndp->u.msg; - } - - assert(nmsg != 0); - qsort(msgtab, nmsg, sizeof(*msgtab), sort_msg); - - for(nl = 0; nl < msgtab[0]->nmsgs; nl++) /* This should be equal for all after check_languages() */ - { - lbp = xmalloc(sizeof(lan_blk_t)); - memset( lbp, 0, sizeof(*lbp) ); - if(!lblktail) - { - lblkhead = lblktail = lbp; - } - else - { - lblktail->next = lbp; - lbp->prev = lblktail; - lblktail = lbp; - } - lbp->nblk = 1; - lbp->blks = xmalloc(sizeof(*lbp->blks)); - lbp->blks[0].idlo = msgtab[0]->realid; - lbp->blks[0].idhi = msgtab[0]->realid; - /* The plus 4 is the entry header; (+3)&~3 is DWORD alignment */ - lbp->blks[0].size = ((factor * msgtab[0]->msgs[nl]->len + 3) & ~3) + 4; - lbp->blks[0].msgs = xmalloc(sizeof(*lbp->blks[0].msgs)); - lbp->blks[0].nmsg = 1; - lbp->blks[0].msgs[0] = msgtab[0]->msgs[nl]; - lbp->lan = msgtab[0]->msgs[nl]->lan; - - for(i = 1; i < nmsg; i++) - { - block_t *blk = &(lbp->blks[lbp->nblk-1]); - if(msgtab[i]->realid == blk->idhi+1) - { - blk->size += ((factor * msgtab[i]->msgs[nl]->len + 3) & ~3) + 4; - blk->idhi++; - blk->msgs = xrealloc(blk->msgs, (blk->nmsg+1) * sizeof(*blk->msgs)); - blk->msgs[blk->nmsg++] = msgtab[i]->msgs[nl]; - } - else - { - lbp->nblk++; - lbp->blks = xrealloc(lbp->blks, lbp->nblk * sizeof(*lbp->blks)); - blk = &(lbp->blks[lbp->nblk-1]); - blk->idlo = msgtab[i]->realid; - blk->idhi = msgtab[i]->realid; - blk->size = ((factor * msgtab[i]->msgs[nl]->len + 3) & ~3) + 4; - blk->msgs = xmalloc(sizeof(*blk->msgs)); - blk->nmsg = 1; - blk->msgs[0] = msgtab[i]->msgs[nl]; - } - } - } - free(msgtab); - return lblkhead; -} - -static int sc_xlat(const void *p1, const void *p2) -{ - return ((const cp_xlat_t *)p1)->lan - ((const cp_xlat_t *)p2)->lan; -} - -static void add_cpxlat(int lan, int cpin, int cpout) -{ - cpxlattab = xrealloc(cpxlattab, (ncpxlattab+1) * sizeof(*cpxlattab)); - cpxlattab[ncpxlattab].lan = lan; - cpxlattab[ncpxlattab].cpin = cpin; - cpxlattab[ncpxlattab].cpout = cpout; - ncpxlattab++; - qsort(cpxlattab, ncpxlattab, sizeof(*cpxlattab), sc_xlat); -} - -static cp_xlat_t *find_cpxlat(int lan) -{ - cp_xlat_t t; - - if(!cpxlattab) return NULL; - - t.lan = lan; - return (cp_xlat_t *)bsearch(&t, cpxlattab, ncpxlattab, sizeof(*cpxlattab), sc_xlat); -} - diff --git a/reactos/tools/wmc/mcy.tab.h b/reactos/tools/wmc/mcy.tab.h deleted file mode 100644 index 493093cb3de..00000000000 --- a/reactos/tools/wmc/mcy.tab.h +++ /dev/null @@ -1,97 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.1. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - tSEVNAMES = 258, - tFACNAMES = 259, - tLANNAMES = 260, - tBASE = 261, - tCODEPAGE = 262, - tTYPEDEF = 263, - tNL = 264, - tSYMNAME = 265, - tMSGEND = 266, - tSEVERITY = 267, - tFACILITY = 268, - tLANGUAGE = 269, - tMSGID = 270, - tIDENT = 271, - tLINE = 272, - tFILE = 273, - tCOMMENT = 274, - tNUMBER = 275, - tTOKEN = 276 - }; -#endif -/* Tokens. */ -#define tSEVNAMES 258 -#define tFACNAMES 259 -#define tLANNAMES 260 -#define tBASE 261 -#define tCODEPAGE 262 -#define tTYPEDEF 263 -#define tNL 264 -#define tSYMNAME 265 -#define tMSGEND 266 -#define tSEVERITY 267 -#define tFACILITY 268 -#define tLANGUAGE 269 -#define tMSGID 270 -#define tIDENT 271 -#define tLINE 272 -#define tFILE 273 -#define tCOMMENT 274 -#define tNUMBER 275 -#define tTOKEN 276 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 98 "tools/wmc/mcy.y" -typedef union YYSTYPE { - WCHAR *str; - unsigned num; - token_t *tok; - lanmsg_t *lmp; - msg_t *msg; - lan_cp_t lcp; -} YYSTYPE; -/* Line 1447 of yacc.c. */ -#line 89 "tools/wmc/mcy.tab.h" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -extern YYSTYPE mcy_lval; - - - diff --git a/reactos/tools/wmc/mcy.y b/reactos/tools/wmc/mcy.y deleted file mode 100644 index 2887df56b6d..00000000000 --- a/reactos/tools/wmc/mcy.y +++ /dev/null @@ -1,680 +0,0 @@ -/* - * Wine Message Compiler parser - * - * Copyright 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 - * - * NOTES: - * - * The basic grammar of the file is yet another example of, humpf, - * design. There is a mix of context-insensitive and -sensitive - * stuff, which makes it rather complicated. - * The header definitions are all context-insensitive because they have - * delimited arguments, whereas the message headers are (semi-) context- - * sensitive and the messages themselves are, well, RFC82[12] delimited. - * This mixture seems to originate from the time that ms and ibm were - * good friends and developing os/2 according to the "compatibility" - * switch and reading some comments here and there. - * - * I'll ignore most of the complications and concentrate on the concept - * which allows me to use yacc. Basically, everything is context- - * insensitive now, with the exception of the message-text itself and - * the preceding language declaration. - * - */ - -%{ - -#include "config.h" - -#include -#include -#include - -#include "utils.h" -#include "wmc.h" -#include "lang.h" - -static const char err_syntax[] = "Syntax error"; -static const char err_number[] = "Number expected"; -static const char err_ident[] = "Identifier expected"; -static const char err_assign[] = "'=' expected"; -static const char err_popen[] = "'(' expected"; -static const char err_pclose[] = "')' expected"; -static const char err_colon[] = "':' expected"; -static const char err_msg[] = "Message expected"; - -/* Scanner switches */ -int want_nl = 0; /* Request next newlinw */ -int want_line = 0; /* Request next complete line */ -int want_file = 0; /* Request next ident as filename */ - -node_t *nodehead = NULL; /* The list of all parsed elements */ -static node_t *nodetail = NULL; -lan_blk_t *lanblockhead; /* List of parsed elements transposed */ - -static int base = 16; /* Current printout base to use (8, 10 or 16) */ -static WCHAR *cast = NULL; /* Current typecast to use */ - -static int last_id = 0; /* The last message ID parsed */ -static int last_sev = 0; /* Last severity code parsed */ -static int last_fac = 0; /* Last facility code parsed */ -static WCHAR *last_sym = NULL;/* Last alias symbol parsed */ -static int have_sev; /* Set if severity parsed for current message */ -static int have_fac; /* Set if facility parsed for current message */ -static int have_sym; /* Set is symbol parsed for current message */ - -static cp_xlat_t *cpxlattab = NULL; /* Codepage translation table */ -static int ncpxlattab = 0; - -/* Prototypes */ -static WCHAR *merge(WCHAR *s1, WCHAR *s2); -static lanmsg_t *new_lanmsg(lan_cp_t *lcp, WCHAR *msg); -static msg_t *add_lanmsg(msg_t *msg, lanmsg_t *lanmsg); -static msg_t *complete_msg(msg_t *msg, int id); -static void add_node(node_e type, void *p); -static void do_add_token(tok_e type, token_t *tok, const char *code); -static void test_id(int id); -static int check_languages(node_t *head); -static lan_blk_t *block_messages(node_t *head); -static void add_cpxlat(int lan, int cpin, int cpout); -static cp_xlat_t *find_cpxlat(int lan); - -%} - -%union { - WCHAR *str; - unsigned num; - token_t *tok; - lanmsg_t *lmp; - msg_t *msg; - lan_cp_t lcp; -} - - -%token tSEVNAMES tFACNAMES tLANNAMES tBASE tCODEPAGE -%token tTYPEDEF tNL tSYMNAME tMSGEND -%token tSEVERITY tFACILITY tLANGUAGE tMSGID -%token tIDENT tLINE tFILE tCOMMENT -%token tNUMBER -%token tTOKEN - -%type alias lines -%type optcp id msgid clan -%type token -%type body -%type bodies msg -%type lang - -%% -file : items { - if(!check_languages(nodehead)) - xyyerror("No messages defined\n"); - lanblockhead = block_messages(nodehead); - } - ; - -items : decl - | items decl - ; - -decl : global - | msg { add_node(nd_msg, $1); } - | tCOMMENT { add_node(nd_comment, $1); } - | error { xyyerror(err_syntax); /* `Catch all' error */ } - ; - -global : tSEVNAMES '=' '(' smaps ')' - | tSEVNAMES '=' '(' smaps error { xyyerror(err_pclose); } - | tSEVNAMES '=' error { xyyerror(err_popen); } - | tSEVNAMES error { xyyerror(err_assign); } - | tFACNAMES '=' '(' fmaps ')' - | tFACNAMES '=' '(' fmaps error { xyyerror(err_pclose); } - | tFACNAMES '=' error { xyyerror(err_popen); } - | tFACNAMES error { xyyerror(err_assign); } - | tLANNAMES '=' '(' lmaps ')' - | tLANNAMES '=' '(' lmaps error { xyyerror(err_pclose); } - | tLANNAMES '=' error { xyyerror(err_popen); } - | tLANNAMES error { xyyerror(err_assign); } - | tCODEPAGE '=' '(' cmaps ')' - | tCODEPAGE '=' '(' cmaps error { xyyerror(err_pclose); } - | tCODEPAGE '=' error { xyyerror(err_popen); } - | tCODEPAGE error { xyyerror(err_assign); } - | tTYPEDEF '=' tIDENT { cast = $3; } - | tTYPEDEF '=' error { xyyerror(err_number); } - | tTYPEDEF error { xyyerror(err_assign); } - | tBASE '=' tNUMBER { - switch(base) - { - case 8: - case 10: - case 16: - base = $3; - break; - default: - xyyerror("Numberbase must be 8, 10 or 16\n"); - } - } - | tBASE '=' error { xyyerror(err_number); } - | tBASE error { xyyerror(err_assign); } - ; - -/*---------------------------------------------------------------------- - * SeverityNames mapping - */ -smaps : smap - | smaps smap - | error { xyyerror(err_ident); } - ; - -smap : token '=' tNUMBER alias { - $1->token = $3; - $1->alias = $4; - if($3 & (~0x3)) - xyyerror("Severity value out of range (0x%08x > 0x3)\n", $3); - do_add_token(tok_severity, $1, "severity"); - } - | token '=' error { xyyerror(err_number); } - | token error { xyyerror(err_assign); } - ; - -/*---------------------------------------------------------------------- - * FacilityNames mapping - */ -fmaps : fmap - | fmaps fmap - | error { xyyerror(err_ident); } - ; - -fmap : token '=' tNUMBER alias { - $1->token = $3; - $1->alias = $4; - if($3 & (~0xfff)) - xyyerror("Facility value out of range (0x%08x > 0xfff)\n", $3); - do_add_token(tok_facility, $1, "facility"); - } - | token '=' error { xyyerror(err_number); } - | token error { xyyerror(err_assign); } - ; - -alias : /* Empty */ { $$ = NULL; } - | ':' tIDENT { $$ = $2; } - | ':' error { xyyerror(err_ident); } - ; - -/*---------------------------------------------------------------------- - * LanguageNames mapping - */ -lmaps : lmap - | lmaps lmap - | error { xyyerror(err_ident); } - ; - -lmap : token '=' tNUMBER setfile ':' tFILE optcp { - $1->token = $3; - $1->alias = $6; - $1->codepage = $7; - do_add_token(tok_language, $1, "language"); - if(!find_language($3) && !find_cpxlat($3)) - mcy_warning("Language 0x%x not built-in, using codepage %d; use explicit codepage to override\n", $3, WMC_DEFAULT_CODEPAGE); - } - | token '=' tNUMBER setfile ':' error { xyyerror("Filename expected\n"); } - | token '=' tNUMBER error { xyyerror(err_colon); } - | token '=' error { xyyerror(err_number); } - | token error { xyyerror(err_assign); } - ; - -optcp : /* Empty */ { $$ = 0; } - | ':' tNUMBER { $$ = $2; } - | ':' error { xyyerror("Codepage-number expected\n"); } - ; - -/*---------------------------------------------------------------------- - * Codepages mapping - */ -cmaps : cmap - | cmaps cmap - | error { xyyerror(err_ident); } - ; - -cmap : clan '=' tNUMBER ':' tNUMBER { - static const char err_nocp[] = "Codepage %d not builtin; cannot convert"; - if(find_cpxlat($1)) - xyyerror("Codepage translation already defined for language 0x%x\n", $1); - if($3 && !find_codepage($3)) - xyyerror(err_nocp, $3); - if($5 && !find_codepage($5)) - xyyerror(err_nocp, $5); - add_cpxlat($1, $3, $5); - } - | clan '=' tNUMBER ':' error { xyyerror(err_number); } - | clan '=' tNUMBER error { xyyerror(err_colon); } - | clan '=' error { xyyerror(err_number); } - | clan error { xyyerror(err_assign); } - ; - -clan : tNUMBER { $$ = $1; } - | tTOKEN { - if($1->type != tok_language) - xyyerror("Language name or code expected\n"); - $$ = $1->token; - } - ; - -/*---------------------------------------------------------------------- - * Message-definition parsing - */ -msg : msgid sevfacsym { test_id($1); } bodies { $$ = complete_msg($4, $1); } - ; - -msgid : tMSGID '=' id { - if($3 & (~0xffff)) - xyyerror("Message ID value out of range (0x%08x > 0xffff)\n", $3); - $$ = $3; - } - | tMSGID error { xyyerror(err_assign); } - ; - -id : /* Empty */ { $$ = ++last_id; } - | tNUMBER { $$ = last_id = $1; } - | '+' tNUMBER { $$ = last_id += $2; } - | '+' error { xyyerror(err_number); } - ; - -sevfacsym: /* Empty */ { have_sev = have_fac = have_sym = 0; } - | sevfacsym sev { if(have_sev) xyyerror("Severity already defined\n"); have_sev = 1; } - | sevfacsym fac { if(have_fac) xyyerror("Facility already defined\n"); have_fac = 1; } - | sevfacsym sym { if(have_sym) xyyerror("Symbolname already defined\n"); have_sym = 1; } - ; - -sym : tSYMNAME '=' tIDENT { last_sym = $3; } - | tSYMNAME '=' error { xyyerror(err_ident); } - | tSYMNAME error { xyyerror(err_assign); } - ; - -sev : tSEVERITY '=' token { - token_t *tok = lookup_token($3->name); - if(!tok) - xyyerror("Undefined severityname\n"); - if(tok->type != tok_severity) - xyyerror("Identifier is not of class 'severity'\n"); - last_sev = tok->token; - } - | tSEVERITY '=' error { xyyerror(err_ident); } - | tSEVERITY error { xyyerror(err_assign); } - ; - -fac : tFACILITY '=' token { - token_t *tok = lookup_token($3->name); - if(!tok) - xyyerror("Undefined facilityname\n"); - if(tok->type != tok_facility) - xyyerror("Identifier is not of class 'facility'\n"); - last_fac = tok->token; - } - | tFACILITY '=' error { xyyerror(err_ident); } - | tFACILITY error { xyyerror(err_assign); } - ; - -/*---------------------------------------------------------------------- - * Message-text parsing - */ -bodies : body { $$ = add_lanmsg(NULL, $1); } - | bodies body { $$ = add_lanmsg($1, $2); } - | error { xyyerror("'Language=...' (start of message text-definition) expected\n"); } - ; - -body : lang setline lines tMSGEND { $$ = new_lanmsg(&$1, $3); } - ; - - /* - * The newline is to be able to set the codepage - * to the language based codepage for the next - * message to be parsed. - */ -lang : tLANGUAGE setnl '=' token tNL { - token_t *tok = lookup_token($4->name); - cp_xlat_t *cpx; - if(!tok) - xyyerror("Undefined language\n"); - if(tok->type != tok_language) - xyyerror("Identifier is not of class 'language'\n"); - if((cpx = find_cpxlat(tok->token))) - { - set_codepage($$.codepage = cpx->cpin); - } - else if(!tok->codepage) - { - const language_t *lan = find_language(tok->token); - if(!lan) - { - /* Just set default; warning was given while parsing languagenames */ - set_codepage($$.codepage = WMC_DEFAULT_CODEPAGE); - } - else - { - /* The default seems to be to use the DOS codepage... */ - set_codepage($$.codepage = lan->doscp); - } - } - else - set_codepage($$.codepage = tok->codepage); - $$.language = tok->token; - } - | tLANGUAGE setnl '=' token error { xyyerror("Missing newline\n"); } - | tLANGUAGE setnl '=' error { xyyerror(err_ident); } - | tLANGUAGE error { xyyerror(err_assign); } - ; - -lines : tLINE { $$ = $1; } - | lines tLINE { $$ = merge($1, $2); } - | error { xyyerror(err_msg); } - | lines error { xyyerror(err_msg); } - ; - -/*---------------------------------------------------------------------- - * Helper rules - */ -token : tIDENT { $$ = xmalloc(sizeof(token_t)); memset($$,0,sizeof(*$$)); $$->name = $1; } - | tTOKEN { $$ = $1; } - ; - -setnl : /* Empty */ { want_nl = 1; } - ; - -setline : /* Empty */ { want_line = 1; } - ; - -setfile : /* Empty */ { want_file = 1; } - ; - -%% - -static WCHAR *merge(WCHAR *s1, WCHAR *s2) -{ - int l1 = unistrlen(s1); - int l2 = unistrlen(s2); - s1 = xrealloc(s1, (l1 + l2 + 1) * sizeof(*s1)); - unistrcpy(s1+l1, s2); - free(s2); - return s1; -} - -static void do_add_token(tok_e type, token_t *tok, const char *code) -{ - token_t *tp = lookup_token(tok->name); - if(tp) - { - if(tok->type != type) - mcy_warning("Type change in token\n"); - if(tp != tok) - xyyerror("Overlapping token not the same\n"); - /* else its already defined and changed */ - if(tok->fixed) - xyyerror("Redefinition of %s\n", code); - tok->fixed = 1; - } - else - { - add_token(type, tok->name, tok->token, tok->codepage, tok->alias, 1); - free(tok); - } -} - -static lanmsg_t *new_lanmsg(lan_cp_t *lcp, WCHAR *msg) -{ - lanmsg_t *lmp = xmalloc(sizeof(lanmsg_t)); - lmp->lan = lcp->language; - lmp->cp = lcp->codepage; - lmp->msg = msg; - lmp->len = unistrlen(msg) + 1; /* Include termination */ - if(lmp->len > 4096) - mcy_warning("Message exceptionally long; might be a missing termination\n"); - return lmp; -} - -static msg_t *add_lanmsg(msg_t *msg, lanmsg_t *lanmsg) -{ - int i; - if(!msg) - { - msg = xmalloc(sizeof(msg_t)); - memset( msg, 0, sizeof(*msg) ); - } - msg->msgs = xrealloc(msg->msgs, (msg->nmsgs+1) * sizeof(*(msg->msgs))); - msg->msgs[msg->nmsgs] = lanmsg; - msg->nmsgs++; - for(i = 0; i < msg->nmsgs-1; i++) - { - if(msg->msgs[i]->lan == lanmsg->lan) - xyyerror("Message for language 0x%x already defined\n", lanmsg->lan); - } - return msg; -} - -static int sort_lanmsg(const void *p1, const void *p2) -{ - return (*(const lanmsg_t * const *)p1)->lan - (*(const lanmsg_t * const*)p2)->lan; -} - -static msg_t *complete_msg(msg_t *mp, int id) -{ - assert(mp != NULL); - mp->id = id; - if(have_sym) - mp->sym = last_sym; - else - xyyerror("No symbolic name defined for message id %d\n", id); - mp->sev = last_sev; - mp->fac = last_fac; - qsort(mp->msgs, mp->nmsgs, sizeof(*(mp->msgs)), sort_lanmsg); - mp->realid = id | (last_sev << 30) | (last_fac << 16); - if(custombit) - mp->realid |= 1 << 29; - mp->base = base; - mp->cast = cast; - return mp; -} - -static void add_node(node_e type, void *p) -{ - node_t *ndp = xmalloc(sizeof(node_t)); - memset( ndp, 0, sizeof(*ndp) ); - ndp->type = type; - ndp->u.all = p; - - if(nodetail) - { - ndp->prev = nodetail; - nodetail->next = ndp; - nodetail = ndp; - } - else - { - nodehead = nodetail = ndp; - } -} - -static void test_id(int id) -{ - node_t *ndp; - for(ndp = nodehead; ndp; ndp = ndp->next) - { - if(ndp->type != nd_msg) - continue; - if(ndp->u.msg->id == id && ndp->u.msg->sev == last_sev && ndp->u.msg->fac == last_fac) - xyyerror("MessageId %d with facility 0x%x and severity 0x%x already defined\n", id, last_fac, last_sev); - } -} - -static int check_languages(node_t *head) -{ - static const char err_missing[] = "Missing definition for language 0x%x; MessageID %d, facility 0x%x, severity 0x%x"; - node_t *ndp; - int nm = 0; - msg_t *msg = NULL; - - for(ndp = head; ndp; ndp = ndp->next) - { - if(ndp->type != nd_msg) - continue; - if(!nm) - { - msg = ndp->u.msg; - } - else - { - int i; - msg_t *m1; - msg_t *m2; - if(ndp->u.msg->nmsgs > msg->nmsgs) - { - m1 = ndp->u.msg; - m2 = msg; - } - else - { - m1 = msg; - m2 = ndp->u.msg; - } - - for(i = 0; i < m1->nmsgs; i++) - { - if(i > m2->nmsgs) - error(err_missing, m1->msgs[i]->lan, m2->id, m2->fac, m2->sev); - else if(m1->msgs[i]->lan < m2->msgs[i]->lan) - error(err_missing, m1->msgs[i]->lan, m2->id, m2->fac, m2->sev); - else if(m1->msgs[i]->lan > m2->msgs[i]->lan) - error(err_missing, m2->msgs[i]->lan, m1->id, m1->fac, m1->sev); - } - } - nm++; - } - return nm; -} - -#define MSGRID(x) ((*(const msg_t * const*)(x))->realid) -static int sort_msg(const void *p1, const void *p2) -{ - return MSGRID(p1) > MSGRID(p2) ? 1 : (MSGRID(p1) == MSGRID(p2) ? 0 : -1); - /* return (*(msg_t **)p1)->realid - (*(msg_t **)p1)->realid; */ -} - -/* - * block_messages() basically transposes the messages - * from ID/language based list to a language/ID - * based list. - */ -static lan_blk_t *block_messages(node_t *head) -{ - lan_blk_t *lbp; - lan_blk_t *lblktail = NULL; - lan_blk_t *lblkhead = NULL; - msg_t **msgtab = NULL; - node_t *ndp; - int nmsg = 0; - int i; - int nl; - int factor = unicodeout ? 2 : 1; - - for(ndp = head; ndp; ndp = ndp->next) - { - if(ndp->type != nd_msg) - continue; - msgtab = xrealloc(msgtab, (nmsg+1) * sizeof(*msgtab)); - msgtab[nmsg++] = ndp->u.msg; - } - - assert(nmsg != 0); - qsort(msgtab, nmsg, sizeof(*msgtab), sort_msg); - - for(nl = 0; nl < msgtab[0]->nmsgs; nl++) /* This should be equal for all after check_languages() */ - { - lbp = xmalloc(sizeof(lan_blk_t)); - memset( lbp, 0, sizeof(*lbp) ); - if(!lblktail) - { - lblkhead = lblktail = lbp; - } - else - { - lblktail->next = lbp; - lbp->prev = lblktail; - lblktail = lbp; - } - lbp->nblk = 1; - lbp->blks = xmalloc(sizeof(*lbp->blks)); - lbp->blks[0].idlo = msgtab[0]->realid; - lbp->blks[0].idhi = msgtab[0]->realid; - /* The plus 4 is the entry header; (+3)&~3 is DWORD alignment */ - lbp->blks[0].size = ((factor * msgtab[0]->msgs[nl]->len + 3) & ~3) + 4; - lbp->blks[0].msgs = xmalloc(sizeof(*lbp->blks[0].msgs)); - lbp->blks[0].nmsg = 1; - lbp->blks[0].msgs[0] = msgtab[0]->msgs[nl]; - lbp->lan = msgtab[0]->msgs[nl]->lan; - - for(i = 1; i < nmsg; i++) - { - block_t *blk = &(lbp->blks[lbp->nblk-1]); - if(msgtab[i]->realid == blk->idhi+1) - { - blk->size += ((factor * msgtab[i]->msgs[nl]->len + 3) & ~3) + 4; - blk->idhi++; - blk->msgs = xrealloc(blk->msgs, (blk->nmsg+1) * sizeof(*blk->msgs)); - blk->msgs[blk->nmsg++] = msgtab[i]->msgs[nl]; - } - else - { - lbp->nblk++; - lbp->blks = xrealloc(lbp->blks, lbp->nblk * sizeof(*lbp->blks)); - blk = &(lbp->blks[lbp->nblk-1]); - blk->idlo = msgtab[i]->realid; - blk->idhi = msgtab[i]->realid; - blk->size = ((factor * msgtab[i]->msgs[nl]->len + 3) & ~3) + 4; - blk->msgs = xmalloc(sizeof(*blk->msgs)); - blk->nmsg = 1; - blk->msgs[0] = msgtab[i]->msgs[nl]; - } - } - } - free(msgtab); - return lblkhead; -} - -static int sc_xlat(const void *p1, const void *p2) -{ - return ((const cp_xlat_t *)p1)->lan - ((const cp_xlat_t *)p2)->lan; -} - -static void add_cpxlat(int lan, int cpin, int cpout) -{ - cpxlattab = xrealloc(cpxlattab, (ncpxlattab+1) * sizeof(*cpxlattab)); - cpxlattab[ncpxlattab].lan = lan; - cpxlattab[ncpxlattab].cpin = cpin; - cpxlattab[ncpxlattab].cpout = cpout; - ncpxlattab++; - qsort(cpxlattab, ncpxlattab, sizeof(*cpxlattab), sc_xlat); -} - -static cp_xlat_t *find_cpxlat(int lan) -{ - cp_xlat_t t; - - if(!cpxlattab) return NULL; - - t.lan = lan; - return (cp_xlat_t *)bsearch(&t, cpxlattab, ncpxlattab, sizeof(*cpxlattab), sc_xlat); -} diff --git a/reactos/tools/wmc/utils.c b/reactos/tools/wmc/utils.c deleted file mode 100644 index 97fe3122630..00000000000 --- a/reactos/tools/wmc/utils.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Utility routines - * - * Copyright 1998,2000 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 - */ - -#include "config.h" -#include "wine/port.h" - -#include -#include -#include -#include -#include -#include - -#include "wmctypes.h" -#include "utils.h" -#include "wmc.h" - -#define SUPPRESS_YACC_ERROR_MESSAGE - -static void generic_msg(const char *s, const char *t, va_list ap) -{ - fprintf(stderr, "%s:%d:%d: %s: ", input_name ? input_name : "stdin", line_number, char_number, t); - vfprintf(stderr, s, ap); -} - -/* - * The yyerror routine should not exit because we use the error-token - * to determine the syntactic error in the source. However, YACC - * uses the same routine to print an error just before the error - * token is reduced. - * The extra routine 'xyyerror' is used to exit after giving a real - * message. - */ -int mcy_error(const char *s, ...) -{ -#ifndef SUPPRESS_YACC_ERROR_MESSAGE - va_list ap; - va_start(ap, s); - generic_msg(s, "Yacc error", ap); - va_end(ap); -#endif - return 1; -} - -int xyyerror(const char *s, ...) -{ - va_list ap; - va_start(ap, s); - generic_msg(s, "Error", ap); - va_end(ap); - exit(1); - return 1; -} - -int mcy_warning(const char *s, ...) -{ - va_list ap; - va_start(ap, s); - generic_msg(s, "Warning", ap); - va_end(ap); - return 0; -} - -void 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); - va_end(ap); - exit(3); -} - -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); -} - -char *dup_basename(const char *name, const char *ext) -{ - int namelen; - int extlen = strlen(ext); - char *base; - char *slash; - - if(!name) - name = "wmc.tab"; - - slash = strrchr(name, '/'); - if (slash) - name = slash + 1; - - namelen = strlen(name); - - /* +4 for later extension and +1 for '\0' */ - base = xmalloc(namelen +4 +1); - strcpy(base, name); - if(!strcasecmp(name + namelen-extlen, ext)) - { - base[namelen - extlen] = '\0'; - } - return base; -} - -void get_rcbasedir(char *basedir, const char *name) -{ - char *slash; - slash = strrchr(name, '/'); - - if (!slash) - slash = strrchr(name, '\\'); - - basedir[0] = 0; - - strncpy(basedir, name, slash - name + 1); - basedir[slash-name + 1] = '\0'; -} - -void *xmalloc(size_t size) -{ - void *res; - - assert(size > 0); - assert(size < 102400); - 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); - assert(size < 102400); - 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 unistrlen(const WCHAR *s) -{ - int n; - for(n = 0; *s; n++, s++) - ; - return n; -} - -WCHAR *unistrcpy(WCHAR *dst, const WCHAR *src) -{ - WCHAR *t = dst; - while(*src) - *t++ = *src++; - *t = 0; - return dst; -} - -WCHAR *xunistrdup(const WCHAR * str) -{ - WCHAR *s; - - assert(str != NULL); - s = xmalloc((unistrlen(str)+1) * sizeof(WCHAR)); - return unistrcpy(s, str); -} - -int unistricmp(const WCHAR *s1, const WCHAR *s2) -{ - int i; - int once = 0; - static const char warn[] = "Don't know the uppercase equivalent of non acsii characters;" - "comparison might yield wrong results"; - while(*s1 && *s2) - { - if((*s1 & 0xffff) > 0x7f || (*s2 & 0xffff) > 0x7f) - { - if(!once) - { - once++; - mcy_warning(warn); - } - i = *s1++ - *s2++; - } - else - i = toupper(*s1++) - toupper(*s2++); - if(i) - return i; - } - - if((*s1 & 0xffff) > 0x7f || (*s2 & 0xffff) > 0x7f) - { - if(!once) - mcy_warning(warn); - return *s1 - *s2; - } - else - return toupper(*s1) - toupper(*s2); -} - -int unistrcmp(const WCHAR *s1, const WCHAR *s2) -{ - int i; - while(*s1 && *s2) - { - i = *s1++ - *s2++; - if(i) - return i; - } - - return *s1 - *s2; -} diff --git a/reactos/tools/wmc/utils.h b/reactos/tools/wmc/utils.h deleted file mode 100644 index 5670b105a20..00000000000 --- a/reactos/tools/wmc/utils.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Utility routines' prototypes etc. - * - * Copyright 1998,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 - */ - -#ifndef __WMC_UTILS_H -#define __WMC_UTILS_H - -#include /* size_t */ - -#include "wmctypes.h" - -void *xmalloc(size_t); -void *xrealloc(void *, size_t); -char *xstrdup(const char *str); - -#ifndef __GNUC__ -#define __attribute__(X) -#endif - -int mcy_error(const char *s, ...) __attribute__((format (printf, 1, 2))); -int xyyerror(const char *s, ...) __attribute__((format (printf, 1, 2))); -int mcy_warning(const char *s, ...) __attribute__((format (printf, 1, 2))); -void internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4))); -void error(const char *s, ...) __attribute__((format (printf, 1, 2))); -void warning(const char *s, ...) __attribute__((format (printf, 1, 2))); - -char *dup_basename(const char *name, const char *ext); -void get_rcbasedir(char *basedir, const char *name); - -WCHAR *xunistrdup(const WCHAR * str); -WCHAR *unistrcpy(WCHAR *dst, const WCHAR *src); -int unistrlen(const WCHAR *s); -int unistricmp(const WCHAR *s1, const WCHAR *s2); -int unistrcmp(const WCHAR *s1, const WCHAR *s2); - -#endif diff --git a/reactos/tools/wmc/wmc.c b/reactos/tools/wmc/wmc.c deleted file mode 100644 index 0f077da91e9..00000000000 --- a/reactos/tools/wmc/wmc.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Wine Message Compiler main program - * - * Copyright 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 - */ - -#include "config.h" -#include "wine/port.h" - -#include -#include -#include -#include - -#include "wmc.h" -#include "utils.h" -#include "lang.h" -#include "write.h" - -static const char usage[] = - "Usage: wmc [options...] [inputfile.mc]\n" - " -B x Set output byte-order x={n[ative], l[ittle], b[ig]}\n" - " (default is n[ative] which equals " -#ifdef WORDS_BIGENDIAN - "big" -#else - "little" -#endif - "-endian)\n" - " -c Set 'custom-bit' in values\n" - " -d Use decimal values in output\n" - " -D Set debug flag\n" - " -h This message\n" - " -H file Write headerfile to file (default is inputfile.h)\n" - " -i Inline messagetable(s)\n" - " -o file Output to file (default is inputfile.rc)\n" - " -u Inputfile is in unicode\n" - " -U Output unicode messagetable(s)\n" - " -v Show supported codepages and languages\n" - " -V Print version end exit\n" - " -W Enable pedantic warnings\n" - "Input is taken from stdin if no inputfile is specified.\n" - "Byteorder of unicode input is based upon the first couple of\n" - "bytes read, which should be 0x0000..0x00ff.\n" - ; - -static const char version_string[] = - "Wine Message Compiler version " PACKAGE_VERSION "\n" - "Copyright 2000 Bertho A. Stultiens\n" - ; - -/* - * The output byte-order of resources (set with -B) - */ -int byteorder = WMC_BO_NATIVE; - -/* - * Custom bit (bit 29) in output values must be set (-c option) - */ -int custombit = 0; - -/* - * Output decimal values (-d option) - */ -int decimal = 0; - -/* - * Enable pedantic warnings; check arg references (-W option) - */ -int pedantic = 0; - -/* - * Unicode input (-u option) - */ -int unicodein = 0; - -/* - * Unicode output (-U option) - */ -int unicodeout = 0; - -/* - * Inline the messagetables (don't write *.bin files; -i option) - */ -int rcinline = 0; - -/* - * Debugging flag (-D option) - */ -int dodebug = 0; - -char *output_name = NULL; /* The name given by the -o option */ -char *input_name = NULL; /* The name given on the command-line */ -char *header_name = NULL; /* The name given by the -H option */ - -int line_number = 1; /* The current line */ -int char_number = 1; /* The current char pos within the line */ - -char *cmdline; /* The entire commandline */ -time_t now; /* The time of start of wmc */ - -int mcy_debug; - -int getopt (int argc, char *const *argv, const char *optstring); -static void segvhandler(int sig); - -static void cleanup_files(void) -{ - if (output_name) unlink( output_name ); - if (header_name) unlink( header_name ); -} - -static void exit_on_signal( int sig ) -{ - exit(1); /* this will call the atexit functions */ -} - -int main(int argc,char *argv[]) -{ - extern char* optarg; - extern int optind; - int optc; - int lose = 0; - int ret; - int i; - int cmdlen; - char rcbasedir[256]; - - atexit( cleanup_files ); - signal(SIGSEGV, segvhandler); - signal( SIGTERM, exit_on_signal ); - signal( SIGINT, exit_on_signal ); -#ifdef SIGHUP - signal( SIGHUP, exit_on_signal ); -#endif - - now = time(NULL); - - /* First rebuild the commandline to put in destination */ - /* Could be done through env[], but not all OS-es support it */ - cmdlen = 4; /* for "wmc " */ - for(i = 1; i < argc; i++) - cmdlen += strlen(argv[i]) + 1; - cmdline = (char *)xmalloc(cmdlen); - strcpy(cmdline, "wmc "); - for(i = 1; i < argc; i++) - { - strcat(cmdline, argv[i]); - if(i < argc-1) - strcat(cmdline, " "); - } - - while((optc = getopt(argc, argv, "B:cdDhH:io:p:uUvVW")) != EOF) - { - switch(optc) - { - case 'B': - switch(optarg[0]) - { - case 'n': - case 'N': - byteorder = WMC_BO_NATIVE; - break; - case 'l': - case 'L': - byteorder = WMC_BO_LITTLE; - break; - case 'b': - case 'B': - byteorder = WMC_BO_BIG; - break; - default: - fprintf(stderr, "Byteordering must be n[ative], l[ittle] or b[ig]\n"); - lose++; - } - break; - case 'c': - custombit = 1; - break; - case 'd': - decimal = 1; - break; - case 'D': - dodebug = 1; - break; - case 'h': - printf("%s", usage); - exit(0); - /* No return */ - case 'H': - header_name = xstrdup(optarg); - break; - case 'i': - rcinline = 1; - break; - case 'o': - output_name = xstrdup(optarg); - break; - case 'u': - unicodein = 1; - break; - case 'U': - unicodeout = 1; - break; - case 'v': - show_languages(); - show_codepages(); - exit(0); - /* No return */ - case 'V': - printf(version_string); - exit(0); - /* No return */ - case 'W': - pedantic = 1; - break; - default: - lose++; - break; - } - } - - if(lose) - { - fprintf(stderr, "%s", usage); - return 1; - } - - mcy_debug = dodebug; - if(dodebug) - { - setbuf(stdout, 0); - setbuf(stderr, 0); - } - - /* Check for input file on command-line */ - if(optind < argc) - { - input_name = argv[optind]; - } - - /* Generate appropriate outfile names */ - if(!output_name) - { - output_name = dup_basename(input_name, ".mc"); - strcat(output_name, ".rc"); - } - - if(!header_name) - { - header_name = dup_basename(input_name, ".mc"); - strcat(header_name, ".h"); - } - - get_rcbasedir(rcbasedir, output_name); - - if(input_name) - { - if(!(yyin = fopen(input_name, "rb"))) - error("Could not open %s for input\n", input_name); - } - else - yyin = stdin; - - ret = mcy_parse(); - - if(input_name) - fclose(yyin); - - if(ret) - { - /* Error during parse */ - exit(1); - } - - write_h_file(header_name); - write_rc_file(output_name); - if(!rcinline) - write_bin_files(rcbasedir); - output_name = NULL; - header_name = NULL; - return 0; -} - -static void segvhandler(int sig) -{ - fprintf(stderr, "\n%s:%d: Oops, segment violation\n", input_name, line_number); - fflush(stdout); - fflush(stderr); - abort(); -} diff --git a/reactos/tools/wmc/wmc.h b/reactos/tools/wmc/wmc.h deleted file mode 100644 index 86ccd6f17fb..00000000000 --- a/reactos/tools/wmc/wmc.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Main definitions and externals - * - * Copyright 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 - */ - -#ifndef __WMC_WMC_H -#define __WMC_WMC_H - -#include /* For time_t */ - -#include "wmctypes.h" - -/* - * The default codepage setting is only to - * read and convert input which is non-message - * text. It doesn't really matter that much because - * all codepages map 0x00-0x7f to 0x0000-0x007f from - * char to unicode and all non-message text should - * be plain ASCII. - * However, we do implement iso-8859-1 for 1-to-1 - * mapping for all other chars, so this is very close - * to what we really want. - */ -#define WMC_DEFAULT_CODEPAGE 28591 - -extern int pedantic; -extern int leave_case; -extern int byteorder; -extern int decimal; -extern int custombit; -extern int unicodein; -extern int unicodeout; -extern int rcinline; - -extern char *output_name; -extern char *input_name; -extern char *header_name; -extern char *cmdline; -extern time_t now; - -extern int line_number; -extern int char_number; - -int mcy_parse(void); -extern int mcy_debug; -extern int want_nl; -extern int want_line; -extern int want_file; -extern node_t *nodehead; -extern lan_blk_t *lanblockhead; - -int mcy_lex(void); -FILE *yyin; -void set_codepage(int cp); - -void add_token(tok_e type, const WCHAR *name, int tok, int cp, const WCHAR *alias, int fix); -token_t *lookup_token(const WCHAR *s); -void get_tokentable(token_t **tab, int *len); - -#endif diff --git a/reactos/tools/wmc/wmc.rbuild b/reactos/tools/wmc/wmc.rbuild deleted file mode 100644 index ef89b145008..00000000000 --- a/reactos/tools/wmc/wmc.rbuild +++ /dev/null @@ -1,17 +0,0 @@ - - - - " " - . - include/reactos/wine - include/reactos - include - include - unicode - lang.c - mcl.c - utils.c - wmc.c - write.c - mcy.tab.c - diff --git a/reactos/tools/wmc/wmctypes.h b/reactos/tools/wmc/wmctypes.h deleted file mode 100644 index 9fdb3a75b5b..00000000000 --- a/reactos/tools/wmc/wmctypes.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Main definitions and externals - * - * Copyright 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 - */ - -#ifndef __WMC_WMCTYPES_H -#define __WMC_WMCTYPES_H - -#include -#include - -/* Byteordering defines */ -#define WMC_BO_NATIVE 0x00 -#define WMC_BO_LITTLE 0x01 -#define WMC_BO_BIG 0x02 - -#define WMC_LOBYTE(w) ((WORD)(w) & 0xff) -#define WMC_HIBYTE(w) (((WORD)(w) >> 8) & 0xff) -#define WMC_LOWORD(d) ((DWORD)(d) & 0xffff) -#define WMC_HIWORD(d) (((DWORD)(d) >> 16) & 0xffff) -#define BYTESWAP_WORD(w) ((WORD)(((WORD)WMC_LOBYTE(w) << 8) + (WORD)WMC_HIBYTE(w))) -#define BYTESWAP_DWORD(d) ((DWORD)(((DWORD)BYTESWAP_WORD(WMC_LOWORD(d)) << 16) + ((DWORD)BYTESWAP_WORD(WMC_HIWORD(d))))) - -/* - * Tokenizer types - */ -typedef enum tok_enum { - tok_null = 0, - tok_keyword, - tok_severity, - tok_facility, - tok_language -} tok_e; - -typedef struct token { - tok_e type; - const WCHAR *name; /* Parsed name of token */ - int token; /* Tokenvalue or language code */ - int codepage; - const WCHAR *alias; /* Alias or filename */ - int fixed; /* Cleared if token may change */ -} token_t; - -typedef struct lan_cp { - int language; - int codepage; -} lan_cp_t; - -typedef struct cp_xlat { - int lan; - int cpin; - int cpout; -} cp_xlat_t; - -typedef struct lanmsg { - int lan; /* Language code of message */ - int cp; /* Codepage of message */ - WCHAR *msg; /* Message text */ - int len; /* Message length including trailing '\0' */ -} lanmsg_t; - -typedef struct msg { - int id; /* Message ID */ - unsigned realid; /* Combined message ID */ - WCHAR *sym; /* Symbolic name */ - int sev; /* Severity code */ - int fac; /* Facility code */ - lanmsg_t **msgs; /* Array message texts */ - int nmsgs; /* Number of message texts in array */ - int base; /* Base of number to print */ - WCHAR *cast; /* Typecase to use */ -} msg_t; - -typedef enum { - nd_msg, - nd_comment -} node_e; - -typedef struct node { - struct node *next; - struct node *prev; - node_e type; - union { - void *all; - WCHAR *comment; - msg_t *msg; - } u; -} node_t; - -typedef struct block { - unsigned idlo; /* Lowest ID in this set */ - unsigned idhi; /* Highest ID in this set */ - int size; /* Size of this set */ - lanmsg_t **msgs; /* Array of messages in this set */ - int nmsg; /* Number of array entries */ -} block_t; - -typedef struct lan_blk { - struct lan_blk *next; /* Linkage for languages */ - struct lan_blk *prev; - int lan; /* The language of this block */ - block_t *blks; /* Array of blocks for this language */ - int nblk; /* Nr of blocks in array */ -} lan_blk_t; - -#endif diff --git a/reactos/tools/wmc/write.c b/reactos/tools/wmc/write.c deleted file mode 100644 index 2e92359636b..00000000000 --- a/reactos/tools/wmc/write.c +++ /dev/null @@ -1,618 +0,0 @@ -/* - * Wine Message Compiler output generation - * - * Copyright 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 - */ - -#include "config.h" -#include "wine/port.h" - -#include -#include -#include -#include -#include - -#include "wmc.h" -#include "utils.h" -#include "lang.h" -#include "write.h" - -/* - * The binary resource layout is as follows: - * - * +===============+ - * Header | NBlocks | - * +===============+ - * Block 0 | Low ID | - * +---------------+ - * | High ID | - * +---------------+ - * | Offset |---+ - * +===============+ | - * Block 1 | Low ID | | - * +---------------+ | - * | High ID | | - * +---------------+ | - * | Offset |------+ - * +===============+ | | - * | | | | - * ... ... | | - * | | | | - * +===============+ <-+ | - * B0 LoID | Len | Flags | | - * +---+---+---+---+ | - * | b | l | a | b | | - * +---+---+---+---+ | - * | l | a | \0| \0| | - * +===============+ | - * | | | - * ... ... | - * | | | - * +===============+ | - * B0 HiID | Len | Flags | | - * +---+---+---+---+ | - * | M | o | r | e | | - * +---+---+---+---+ | - * | b | l | a | \0| | - * +===============+ <----+ - * B1 LoID | Len | Flags | - * +---+---+---+---+ - * | J | u | n | k | - * +---+---+---+---+ - * | \0| \0| \0| \0| - * +===============+ - * | | - * ... ... - * | | - * +===============+ - * - * All Fields are aligned on their natural boundaries. The length - * field (Len) covers both the length of the string and the header - * fields (Len and Flags). Strings are '\0' terminated. Flags is 0 - * for normal character strings and 1 for unicode strings. - */ - -static const char str_header[] = - "/* This file is generated with wmc version " PACKAGE_VERSION ". Do not edit! */\n" - "/* Source : %s */\n" - "/* Cmdline: %s */\n" - "/* Date : %s */\n" - "\n" - ; - -static char *dup_u2c(int cp, const WCHAR *uc) -{ - int len; - char *cptr; - const union cptable *cpdef = find_codepage(cp); - if(!cpdef) - internal_error(__FILE__, __LINE__, "Codepage %d not found (vanished?)\n", cp); - len = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, NULL, 0, NULL, NULL); - cptr = xmalloc(len); - if((len = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, cptr, len, NULL, NULL)) < 0) - internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", len); - return cptr; -} - -static void killnl(char *s, int ddd) -{ - char *tmp; - tmp = strstr(s, "\r\n"); - if(tmp) - { - if(ddd && tmp - s > 3) - { - tmp[0] = tmp[1] = tmp[2] = '.'; - tmp[3] = '\0'; - } - else - *tmp = '\0'; - } - tmp = strchr(s, '\n'); - if(tmp) - { - if(ddd && tmp - s > 3) - { - tmp[0] = tmp[1] = tmp[2] = '.'; - tmp[3] = '\0'; - } - else - *tmp = '\0'; - } -} - -static int killcomment(char *s) -{ - char *tmp = s; - int b = 0; - while((tmp = strstr(tmp, "/*"))) - { - tmp[1] = 'x'; - b++; - } - tmp = s; - while((tmp = strstr(tmp, "*/"))) - { - tmp[0] = 'x'; - b++; - } - return b; -} - -void write_h_file(const char *fname) -{ - node_t *ndp; - char *cptr; - char *cast; - FILE *fp; - token_t *ttab; - int ntab; - int i; - int once = 0; - int idx_en = 0; - - fp = fopen(fname, "w"); - if(!fp) - { - perror(fname); - exit(1); - } - cptr = ctime(&now); - killnl(cptr, 0); - fprintf(fp, str_header, input_name ? input_name : "", cmdline, cptr); - fprintf(fp, "#ifndef __WMCGENERATED_%08lx_H\n", (long)now); - fprintf(fp, "#define __WMCGENERATED_%08lx_H\n", (long)now); - fprintf(fp, "\n"); - - /* Write severity and facility aliases */ - get_tokentable(&ttab, &ntab); - fprintf(fp, "/* Severity codes */\n"); - for(i = 0; i < ntab; i++) - { - if(ttab[i].type == tok_severity && ttab[i].alias) - { - cptr = dup_u2c(WMC_DEFAULT_CODEPAGE, ttab[i].alias); - fprintf(fp, "#define %s\t0x%x\n", cptr, ttab[i].token); - free(cptr); - } - } - fprintf(fp, "\n"); - - fprintf(fp, "/* Facility codes */\n"); - for(i = 0; i < ntab; i++) - { - if(ttab[i].type == tok_facility && ttab[i].alias) - { - cptr = dup_u2c(WMC_DEFAULT_CODEPAGE, ttab[i].alias); - fprintf(fp, "#define %s\t0x%x\n", cptr, ttab[i].token); - free(cptr); - } - } - fprintf(fp, "\n"); - - /* Write the message codes */ - fprintf(fp, "/* Message definitions */\n"); - for(ndp = nodehead; ndp; ndp = ndp->next) - { - switch(ndp->type) - { - case nd_comment: - cptr = dup_u2c(WMC_DEFAULT_CODEPAGE, ndp->u.comment+1); - killnl(cptr, 0); - killcomment(cptr); - if(*cptr) - fprintf(fp, "/* %s */\n", cptr); - else - fprintf(fp, "\n"); - free(cptr); - break; - case nd_msg: - if(!once) - { - /* - * Search for an english text. - * If not found, then use the first in the list - */ - once++; - for(i = 0; i < ndp->u.msg->nmsgs; i++) - { - if(ndp->u.msg->msgs[i]->lan == 0x409) - { - idx_en = i; - break; - } - } - fprintf(fp, "\n"); - } - fprintf(fp, "/* MessageId : 0x%08x */\n", ndp->u.msg->realid); - cptr = dup_u2c(ndp->u.msg->msgs[idx_en]->cp, ndp->u.msg->msgs[idx_en]->msg); - killnl(cptr, 0); - killcomment(cptr); - fprintf(fp, "/* Approx. msg: %s */\n", cptr); - free(cptr); - cptr = dup_u2c(WMC_DEFAULT_CODEPAGE, ndp->u.msg->sym); - if(ndp->u.msg->cast) - cast = dup_u2c(WMC_DEFAULT_CODEPAGE, ndp->u.msg->cast); - else - cast = NULL; - switch(ndp->u.msg->base) - { - case 8: - if(cast) - fprintf(fp, "#define %s\t((%s)0%oL)\n\n", cptr, cast, ndp->u.msg->realid); - else - fprintf(fp, "#define %s\t0%oL\n\n", cptr, ndp->u.msg->realid); - break; - case 10: - if(cast) - fprintf(fp, "#define %s\t((%s)%dL)\n\n", cptr, cast, ndp->u.msg->realid); - else - fprintf(fp, "#define %s\t%dL\n\n", cptr, ndp->u.msg->realid); - break; - case 16: - if(cast) - fprintf(fp, "#define %s\t((%s)0x%08xL)\n\n", cptr, cast, ndp->u.msg->realid); - else - fprintf(fp, "#define %s\t0x%08xL\n\n", cptr, ndp->u.msg->realid); - break; - default: - internal_error(__FILE__, __LINE__, "Invalid base for number print\n"); - } - free(cptr); - if(cast) - free(cast); - break; - default: - internal_error(__FILE__, __LINE__, "Invalid node type %d\n", ndp->type); - } - } - fprintf(fp, "\n#endif\n"); - fclose(fp); -} - -static void write_rcbin(FILE *fp) -{ - lan_blk_t *lbp; - token_t *ttab; - int ntab; - int i; - - get_tokentable(&ttab, &ntab); - - for(lbp = lanblockhead; lbp; lbp = lbp->next) - { - char *cptr = NULL; - fprintf(fp, "LANGUAGE 0x%x, 0x%x\n", lbp->lan & 0x3ff, lbp->lan >> 10); - for(i = 0; i < ntab; i++) - { - if(ttab[i].type == tok_language && ttab[i].token == lbp->lan) - { - if(ttab[i].alias) - cptr = dup_u2c(WMC_DEFAULT_CODEPAGE, ttab[i].alias); - break; - } - } - if(!cptr) - internal_error(__FILE__, __LINE__, "Filename vanished for language 0x%0x\n", lbp->lan); - fprintf(fp, "1 MESSAGETABLE \"%s.bin\"\n", cptr); - free(cptr); - } -} - -static char *make_string(WCHAR *uc, int len, int codepage) -{ - char *str = xmalloc(7*len + 1); - char *cptr = str; - int i; - int b; - - if(!codepage) - { - *cptr++ = ' '; - *cptr++ = 'L'; - *cptr++ = '"'; - for(i = b = 0; i < len; i++, uc++) - { - switch(*uc) - { - case '\a': *cptr++ = '\\'; *cptr++ = 'a'; b += 2; break; - case '\b': *cptr++ = '\\'; *cptr++ = 'b'; b += 2; break; - case '\f': *cptr++ = '\\'; *cptr++ = 'f'; b += 2; break; - case '\n': *cptr++ = '\\'; *cptr++ = 'n'; b += 2; break; - case '\r': *cptr++ = '\\'; *cptr++ = 'r'; b += 2; break; - case '\t': *cptr++ = '\\'; *cptr++ = 't'; b += 2; break; - case '\v': *cptr++ = '\\'; *cptr++ = 'v'; b += 2; break; - case '\\': *cptr++ = '\\'; *cptr++ = '\\'; b += 2; break; - case '"': *cptr++ = '\\'; *cptr++ = '"'; b += 2; break; - default: - if (*uc < 0x100 && isprint(*uc)) - { - *cptr++ = *uc; - b++; - } - else - { - int n = sprintf(cptr, "\\x%04x", *uc & 0xffff); - cptr += n; - b += n; - } - break; - } - if(i < len-1 && b >= 72) - { - *cptr++ = '"'; - *cptr++ = ','; - *cptr++ = '\n'; - *cptr++ = ' '; - *cptr++ = 'L'; - *cptr++ = '"'; - b = 0; - } - } - if (unicodeout) - len = (len + 1) & ~1; - else - len = (len + 3) & ~3; - for(; i < len; i++) - { - *cptr++ = '\\'; - *cptr++ = 'x'; - *cptr++ = '0'; - *cptr++ = '0'; - *cptr++ = '0'; - *cptr++ = '0'; - } - *cptr++ = '"'; - *cptr = '\0'; - } - else - { - char *tmp, *cc; - int mlen; - const union cptable *cpdef = find_codepage(codepage); - - assert(cpdef != NULL); - mlen = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, NULL, 0, NULL, NULL); - cc = tmp = xmalloc(mlen); - if((i = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, tmp, mlen, NULL, NULL)) < 0) - internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", i); - *cptr++ = ' '; - *cptr++ = '"'; - for(i = b = 0; i < len; i++, cc++) - { - switch(*cc) - { - case '\a': *cptr++ = '\\'; *cptr++ = 'a'; b += 2; break; - case '\b': *cptr++ = '\\'; *cptr++ = 'b'; b += 2; break; - case '\f': *cptr++ = '\\'; *cptr++ = 'f'; b += 2; break; - case '\n': *cptr++ = '\\'; *cptr++ = 'n'; b += 2; break; - case '\r': *cptr++ = '\\'; *cptr++ = 'r'; b += 2; break; - case '\t': *cptr++ = '\\'; *cptr++ = 't'; b += 2; break; - case '\v': *cptr++ = '\\'; *cptr++ = 'v'; b += 2; break; - case '\\': *cptr++ = '\\'; *cptr++ = '\\'; b += 2; break; - case '"': *cptr++ = '\\'; *cptr++ = '"'; b += 2; break; - default: - if(isprint(*cc)) - { - *cptr++ = *cc; - b++; - } - else - { - int n = sprintf(cptr, "\\x%02x", *cc & 0xff); - cptr += n; - b += n; - } - break; - } - if(i < len-1 && b >= 72) - { - *cptr++ = '"'; - *cptr++ = ','; - *cptr++ = '\n'; - *cptr++ = ' '; - *cptr++ = '"'; - b = 0; - } - } - len = (len + 3) & ~3; - for(; i < len; i++) - { - *cptr++ = '\\'; - *cptr++ = 'x'; - *cptr++ = '0'; - *cptr++ = '0'; - } - *cptr++ = '"'; - *cptr = '\0'; - free(tmp); - } - return str; -} - -static void write_rcinline(FILE *fp) -{ - lan_blk_t *lbp; - int i; - int j; - - for(lbp = lanblockhead; lbp; lbp = lbp->next) - { - unsigned offs = 4 * (lbp->nblk * 3 + 1); - fprintf(fp, "\n1 MESSAGETABLE\n"); - fprintf(fp, "LANGUAGE 0x%x, 0x%x\n", lbp->lan & 0x3ff, lbp->lan >> 10); - fprintf(fp, "{\n"); - fprintf(fp, " /* NBlocks */ 0x%08xL,\n", lbp->nblk); - for(i = 0; i < lbp->nblk; i++) - { - fprintf(fp, " /* Lo,Hi,Offs */ 0x%08xL, 0x%08xL, 0x%08xL,\n", - lbp->blks[i].idlo, - lbp->blks[i].idhi, - offs); - offs += lbp->blks[i].size; - } - for(i = 0; i < lbp->nblk; i++) - { - block_t *blk = &lbp->blks[i]; - for(j = 0; j < blk->nmsg; j++) - { - char *cptr; - int l = blk->msgs[j]->len; - const char *comma = j == blk->nmsg-1 && i == lbp->nblk-1 ? "" : ","; - cptr = make_string(blk->msgs[j]->msg, l, unicodeout ? 0 : blk->msgs[j]->cp); - fprintf(fp, "\n /* Msg 0x%08x */ 0x%04x, 0x000%c,\n", - blk->idlo + j, - (unicodeout ? (l*2+3)&~3 : (l+3)&~3) + 4, - unicodeout ? '1' : '0'); - fprintf(fp, "%s%s\n", cptr, comma); - free(cptr); - } - } - fprintf(fp, "}\n"); - } -} - -void write_rc_file(const char *fname) -{ - FILE *fp; - char *cptr; - - fp = fopen(fname, "w"); - if(!fp) - { - perror(fname); - exit(1); - } - cptr = ctime(&now); - killnl(cptr, 0); - fprintf(fp, str_header, input_name ? input_name : "", cmdline, cptr); - - if(rcinline) - write_rcinline(fp); - else - write_rcbin(fp); - fclose(fp); -} - -static void write_bin_file(const char *fname, lan_blk_t *lbp) -{ - FILE *fp; - unsigned int offs; - unsigned short buf; - int i, j, k; - - fp = fopen(fname, "wb"); - - fwrite(&lbp->nblk, sizeof(int), 1, fp); - - offs = 4 * (lbp->nblk * 3 + 1); - for(i = 0; i < lbp->nblk; i++) - { - fwrite(&lbp->blks[i].idlo, sizeof(unsigned), 2, fp); - fwrite(&offs, sizeof(int), 1, fp); - - offs += lbp->blks[i].size; - } - - for(i = 0; i < lbp->nblk; i++) - { - block_t *blk = &lbp->blks[i]; - for(j = 0; j < blk->nmsg; j++) - { - char *cptr; - int len = blk->msgs[j]->len; - short aligned_size = (unicodeout ? (len*2+3)&~3 : (len+3)&~3) + 4; - - fwrite(&aligned_size, sizeof(short), 1, fp); - - buf = unicodeout ? 1 : 0; - fwrite(&buf, sizeof(buf), 1, fp); - - // no need to count these 4 bytes when calculating alignment - aligned_size -= 4; - - if (unicodeout) - { - fwrite(blk->msgs[j]->msg, sizeof(WCHAR), len, fp); - - // fill with nulls so it matches aligned_len - for (k=0; k<(aligned_size-(len*sizeof(WCHAR))); k++) - fputc(0, fp); - } - else - { - WCHAR *uc; - char *tmp; - int mlen, len; - const union cptable *cpdef = find_codepage(blk->msgs[j]->cp); - uc = blk->msgs[j]->msg; - - assert(cpdef != NULL); - mlen = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, NULL, 0, NULL, NULL); - tmp = xmalloc(mlen); - if((i = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, tmp, mlen, NULL, NULL)) < 0) - internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", i); - - len = strlen(tmp); - fwrite(tmp, sizeof(char), len, fp); - - // fill with nulls so it matches aligned_len - for (k=0; k<(aligned_size-len); k++) - fputc(0, fp); - - free(tmp); - } - - free(cptr); - } - } - - fclose(fp); -} - -void write_bin_files(const char *basedir) -{ - lan_blk_t *lbp; - token_t *ttab; - char fname[256]; - int ntab; - int i; - - get_tokentable(&ttab, &ntab); - - for(lbp = lanblockhead; lbp; lbp = lbp->next) - { - char *cptr = NULL; - for(i = 0; i < ntab; i++) - { - if(ttab[i].type == tok_language && ttab[i].token == lbp->lan) - { - if(ttab[i].alias) - cptr = dup_u2c(WMC_DEFAULT_CODEPAGE, ttab[i].alias); - break; - } - } - if(!cptr) - internal_error(__FILE__, __LINE__, "Filename vanished for language 0x%0x\n", lbp->lan); - - sprintf(fname, "%s%s.bin", basedir, cptr); - write_bin_file(fname, lbp); - - free(cptr); - } -} diff --git a/reactos/tools/wmc/write.h b/reactos/tools/wmc/write.h deleted file mode 100644 index d53267e02f4..00000000000 --- a/reactos/tools/wmc/write.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Wine Message Compiler outpur generation - * - * Copyright 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 - */ -#ifndef __WMC_WRITE_H -#define __WMC_WRITE_H - -void write_h_file(const char *fname); -void write_rc_file(const char *fname); -void write_bin_files(const char *basedir); - -#endif diff --git a/reactos/tools/wpp/lex.yy.c b/reactos/tools/wpp/lex.yy.c deleted file mode 100644 index 25716f55d16..00000000000 --- a/reactos/tools/wpp/lex.yy.c +++ /dev/null @@ -1,4128 +0,0 @@ -#define yy_create_buffer ppy__create_buffer -#define yy_delete_buffer ppy__delete_buffer -#define yy_scan_buffer ppy__scan_buffer -#define yy_scan_string ppy__scan_string -#define yy_scan_bytes ppy__scan_bytes -#define yy_flex_debug ppy__flex_debug -#define yy_init_buffer ppy__init_buffer -#define yy_flush_buffer ppy__flush_buffer -#define yy_load_buffer_state ppy__load_buffer_state -#define yy_switch_to_buffer ppy__switch_to_buffer -#define yyin ppy_in -#define yyleng ppy_leng -#define yylex ppy_lex -#define yyout ppy_out -#define yyrestart ppy_restart -#define yytext ppy_text -#define yywrap ppy_wrap - -#line 20 "tools\\wpp_new\\lex.yy.c" -/* A lexical scanner generated by flex */ - -/* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ - */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 - -#include - - -/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ -#ifdef c_plusplus -#ifndef __cplusplus -#define __cplusplus -#endif -#endif - - -#ifdef __cplusplus - -#include -#include - -/* Use prototypes in function declarations. */ -#define YY_USE_PROTOS - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -#if __STDC__ - -#define YY_USE_PROTOS -#define YY_USE_CONST - -#endif /* __STDC__ */ -#endif /* ! __cplusplus */ - -#ifdef __TURBOC__ - #pragma warn -rch - #pragma warn -use -#include -#include -#define YY_USE_CONST -#define YY_USE_PROTOS -#endif - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - - -#ifdef YY_USE_PROTOS -#define YY_PROTO(proto) proto -#else -#define YY_PROTO(proto) () -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yy_start = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yy_start - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#define YY_BUF_SIZE 16384 - -typedef struct yy_buffer_state *YY_BUFFER_STATE; - -extern int yyleng; -extern FILE *yyin, *yyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - -/* The funky do-while in the following #define is used to turn the definition - * int a single C statement (which needs a semi-colon terminator). This - * avoids problems with code like: - * - * if ( condition_holds ) - * yyless( 5 ); - * else - * do_something_else(); - * - * Prior to using the do-while the compiler would get upset at the - * "else" because it interpreted the "if" statement as being all - * done when it reached the ';' after the yyless() call. - */ - -/* Return all but the first 'n' matched characters back to the input stream. */ - -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - *yy_cp = yy_hold_char; \ - YY_RESTORE_YY_MORE_OFFSET \ - yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, yytext_ptr ) - -/* The following is because we cannot portably get our hands on size_t - * (without autoconf's help, which isn't available because we want - * flex-generated scanners to compile on their own). - */ -typedef unsigned int yy_size_t; - - -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - }; - -static YY_BUFFER_STATE yy_current_buffer = 0; - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - */ -#define YY_CURRENT_BUFFER yy_current_buffer - - -/* yy_hold_char holds the character lost when yytext is formed. */ -static char yy_hold_char; - -static int yy_n_chars; /* number of characters read into yy_ch_buf */ - - -int yyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 1; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow yywrap()'s to do buffer switches - * instead of setting up a fresh yyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void yyrestart YY_PROTO(( FILE *input_file )); - -void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); -void yy_load_buffer_state YY_PROTO(( void )); -YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); -void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); -void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); -void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); -#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) - -YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); -YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); -YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); - -static void *yy_flex_alloc YY_PROTO(( yy_size_t )); -static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); -static void yy_flex_free YY_PROTO(( void * )); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) - -typedef unsigned char YY_CHAR; -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; -typedef int yy_state_type; -extern char *yytext; -#define yytext_ptr yytext - -static yy_state_type yy_get_previous_state YY_PROTO(( void )); -static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); -static int yy_get_next_buffer YY_PROTO(( void )); -static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yytext_ptr = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ - yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - yy_c_buf_p = yy_cp; - -#define YY_NUM_RULES 143 -#define YY_END_OF_BUFFER 144 -static yyconst short int yy_accept[415] = - { 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 117, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 144, 133, 134, 135, 121, 142, - 122, 133, 132, 133, 134, 1, 21, 16, 18, 16, - 21, 20, 17, 17, 17, 17, 17, 17, 17, 17, - 68, 71, 69, 70, 28, 25, 26, 24, 28, 23, - 28, 28, 123, 131, 124, 142, 125, 126, 142, 127, - 128, 117, 118, 117, 77, 75, 77, 77, 74, 77, - - 78, 82, 84, 83, 142, 79, 90, 86, 90, 85, - 88, 90, 90, 87, 90, 92, 100, 102, 95, 101, - 97, 96, 93, 97, 92, 106, 106, 104, 103, 106, - 114, 113, 110, 111, 107, 108, 109, 114, 114, 133, - 134, 138, 121, 138, 122, 133, 132, 133, 53, 50, - 47, 53, 52, 53, 51, 53, 33, 35, 53, 53, - 53, 53, 49, 53, 53, 58, 55, 56, 58, 54, - 58, 62, 59, 60, 62, 62, 22, 67, 64, 67, - 65, 67, 63, 67, 29, 30, 32, 32, 32, 29, - 1, 140, 143, 141, 139, 139, 133, 134, 133, 116, - - 120, 132, 136, 137, 134, 1, 16, 17, 17, 17, - 17, 17, 17, 17, 17, 18, 19, 20, 17, 17, - 17, 17, 17, 11, 17, 17, 17, 17, 17, 68, - 69, 70, 72, 70, 25, 27, 28, 123, 130, 129, - 130, 125, 127, 117, 117, 117, 119, 75, 73, 74, - 76, 77, 78, 79, 81, 79, 86, 85, 90, 87, - 91, 90, 92, 94, 97, 96, 93, 99, 97, 92, - 106, 104, 103, 106, 105, 106, 114, 114, 112, 115, - 114, 133, 138, 138, 50, 44, 41, 33, 34, 33, - 33, 37, 35, 35, 35, 39, 45, 43, 46, 40, - - 48, 49, 132, 42, 55, 54, 57, 58, 59, 61, - 0, 22, 64, 63, 67, 66, 67, 29, 31, 32, - 29, 140, 139, 120, 120, 17, 17, 17, 17, 17, - 17, 11, 17, 17, 17, 17, 17, 17, 17, 69, - 80, 89, 98, 34, 34, 33, 33, 33, 36, 35, - 35, 35, 132, 120, 17, 12, 13, 17, 17, 17, - 17, 17, 17, 15, 17, 17, 17, 34, 34, 34, - 33, 36, 36, 35, 132, 17, 12, 13, 14, 4, - 7, 9, 17, 17, 15, 17, 8, 17, 34, 36, - 36, 36, 132, 3, 14, 4, 7, 9, 10, 17, - - 6, 8, 17, 36, 132, 3, 10, 2, 6, 5, - 38, 2, 5, 0 - } ; - -static yyconst int yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 5, 6, 7, 1, 1, 8, 9, 10, - 11, 12, 1, 13, 1, 14, 15, 16, 17, 17, - 17, 17, 17, 17, 17, 18, 18, 1, 1, 19, - 20, 21, 1, 1, 22, 22, 22, 22, 22, 22, - 23, 23, 23, 23, 23, 24, 23, 23, 23, 23, - 23, 23, 23, 23, 25, 23, 23, 26, 23, 23, - 1, 27, 1, 1, 28, 1, 29, 30, 31, 32, - - 33, 34, 35, 36, 37, 36, 36, 38, 39, 40, - 41, 42, 36, 43, 44, 45, 46, 36, 47, 48, - 36, 36, 1, 49, 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, 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, 1, 1, 1 - } ; - -static yyconst int yy_meta[50] = - { 0, - 1, 2, 3, 2, 1, 4, 5, 1, 6, 7, - 8, 9, 8, 10, 11, 12, 12, 12, 1, 1, - 13, 14, 15, 15, 15, 15, 16, 17, 14, 14, - 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 1 - } ; - -static yyconst short int yy_base[458] = - { 0, - 0, 48, 55, 0, 102, 103, 130, 0, 177, 178, - 179, 182, 186, 187, 104, 107, 214, 0, 261, 262, - 289, 0, 338, 0, 386, 389, 414, 439, 466, 0, - 515, 0, 564, 0, 399, 403, 612, 638, 665, 0, - 428, 618, 714, 763, 1132, 0, 49, 1771, 1771, 1771, - 1771, 96, 0, 109, 118, 1771, 1771, 811, 1771, 1128, - 111, 111, 858, 1097, 154, 161, 1092, 1085, 1087, 1097, - 0, 1771, 184, 124, 1771, 196, 1771, 1771, 254, 1771, - 0, 199, 0, 1771, 1771, 269, 0, 1771, 1122, 0, - 1771, 0, 1771, 263, 1771, 208, 1771, 267, 1114, 277, - - 0, 1771, 1771, 1771, 271, 281, 1771, 393, 1771, 396, - 1771, 1109, 396, 0, 406, 0, 1771, 1771, 1115, 1771, - 400, 0, 0, 418, 905, 1771, 430, 1771, 1771, 433, - 0, 1771, 1771, 1771, 1771, 1771, 1771, 432, 435, 0, - 449, 1771, 1771, 1771, 1771, 444, 0, 954, 1771, 456, - 1771, 1101, 1771, 1112, 1771, 449, 988, 714, 443, 1099, - 603, 0, 623, 1085, 1068, 1771, 615, 1771, 619, 0, - 632, 1771, 644, 1771, 635, 634, 635, 1771, 655, 1771, - 1771, 646, 0, 659, 0, 1771, 1771, 725, 738, 741, - 1771, 742, 1771, 1771, 0, 735, 0, 747, 741, 1771, - - 0, 0, 1771, 1113, 755, 1771, 0, 0, 1082, 747, - 754, 1077, 1070, 1072, 1082, 1771, 1771, 1107, 1075, 717, - 1076, 1064, 1070, 777, 1071, 1061, 1071, 1067, 1045, 0, - 0, 1771, 1771, 1081, 787, 1771, 1080, 0, 1771, 1771, - 1079, 0, 0, 0, 743, 765, 1771, 791, 1771, 1071, - 1771, 1077, 0, 1771, 794, 1076, 795, 798, 1064, 0, - 1771, 1074, 0, 1771, 789, 0, 0, 801, 1073, 0, - 804, 1771, 1771, 807, 1771, 1072, 0, 804, 1771, 1771, - 1071, 806, 1771, 0, 818, 1771, 1771, 847, 843, 874, - 799, 0, 905, 903, 800, 1771, 1771, 1771, 1771, 1771, - - 1771, 1051, 1005, 1771, 823, 0, 1771, 1029, 824, 1771, - 1021, 816, 871, 0, 1771, 1771, 1018, 0, 1771, 1013, - 872, 876, 0, 1036, 0, 974, 948, 917, 910, 903, - 874, 880, 875, 871, 864, 844, 835, 833, 799, 0, - 884, 1771, 890, 907, 845, 618, 863, 873, 910, 911, - 914, 922, 799, 1085, 795, 935, 938, 796, 786, 747, - 702, 695, 614, 974, 610, 598, 428, 938, 942, 945, - 1771, 961, 953, 1771, 406, 395, 977, 985, 986, 990, - 991, 994, 385, 372, 998, 365, 1006, 247, 1771, 972, - 977, 985, 241, 1015, 1018, 1023, 1026, 1027, 1031, 153, - - 1048, 1049, 74, 1771, 22, 1056, 1057, 1060, 1061, 1064, - 0, 1065, 1068, 1771, 1134, 1151, 1168, 1185, 1202, 1219, - 1236, 1253, 1270, 1287, 1304, 1321, 1338, 1351, 1353, 1370, - 1387, 1404, 1421, 1438, 1455, 1472, 1489, 1500, 1517, 1534, - 1540, 1557, 1574, 1591, 1597, 1614, 1631, 1648, 1654, 1660, - 1677, 1694, 1702, 1719, 1736, 1059, 1753 - } ; - -static yyconst short int yy_def[458] = - { 0, - 414, 1, 414, 3, 415, 415, 414, 7, 416, 416, - 417, 417, 418, 418, 419, 419, 414, 17, 420, 420, - 414, 21, 414, 23, 421, 421, 422, 422, 414, 29, - 414, 31, 414, 33, 423, 423, 424, 424, 414, 39, - 425, 425, 426, 426, 414, 427, 414, 414, 414, 414, - 414, 428, 429, 428, 414, 414, 414, 414, 414, 58, - 414, 414, 58, 63, 63, 63, 63, 63, 63, 63, - 430, 414, 431, 414, 414, 414, 414, 414, 414, 414, - 429, 414, 432, 414, 414, 433, 434, 414, 433, 435, - 414, 436, 414, 437, 414, 414, 414, 414, 438, 414, - - 439, 414, 414, 414, 440, 414, 414, 414, 414, 414, - 414, 414, 414, 441, 414, 442, 414, 414, 414, 414, - 443, 444, 445, 414, 445, 414, 414, 414, 414, 414, - 446, 414, 414, 414, 414, 414, 414, 447, 414, 427, - 414, 414, 414, 414, 414, 428, 429, 448, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 429, 414, 429, 414, 414, 414, 414, 414, 449, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 450, 451, 452, 414, 414, 414, 414, 452, - 414, 414, 414, 414, 453, 453, 427, 414, 428, 414, - - 454, 429, 414, 414, 414, 414, 58, 63, 63, 63, - 63, 63, 63, 63, 63, 414, 414, 414, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 430, - 455, 414, 414, 414, 414, 414, 414, 432, 414, 414, - 414, 434, 435, 436, 437, 437, 414, 414, 414, 438, - 414, 414, 439, 414, 414, 414, 414, 414, 414, 441, - 414, 414, 442, 414, 443, 444, 445, 414, 414, 125, - 414, 414, 414, 414, 414, 414, 446, 447, 414, 414, - 414, 428, 414, 448, 414, 414, 414, 414, 414, 414, - 414, 456, 414, 414, 414, 414, 414, 414, 414, 414, - - 414, 414, 429, 414, 414, 449, 414, 414, 414, 414, - 414, 414, 414, 450, 414, 414, 414, 452, 414, 414, - 452, 414, 453, 457, 454, 63, 63, 63, 63, 63, - 63, 414, 63, 63, 63, 63, 63, 63, 63, 455, - 414, 414, 414, 414, 414, 414, 414, 414, 456, 414, - 414, 414, 429, 457, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 414, 414, 414, - 414, 414, 414, 414, 429, 63, 414, 414, 63, 63, - 63, 63, 63, 63, 414, 63, 63, 63, 414, 414, - 414, 414, 429, 63, 414, 414, 414, 414, 63, 63, - - 63, 414, 63, 414, 429, 414, 414, 63, 414, 63, - 429, 414, 414, 0, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414 - } ; - -static yyconst short int yy_nxt[1821] = - { 0, - 46, 47, 48, 47, 46, 49, 50, 46, 51, 46, - 46, 46, 46, 46, 52, 46, 46, 46, 46, 46, - 46, 53, 53, 53, 53, 53, 54, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 46, 55, - 198, 55, 198, 411, 56, 57, 58, 59, 60, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 61, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 62, 57, 63, 63, 63, 64, 65, 63, 63, - 63, 66, 67, 63, 63, 63, 68, 63, 63, 63, - - 69, 70, 63, 57, 72, 72, 93, 200, 410, 93, - 201, 203, 204, 217, 218, 94, 73, 73, 94, 205, - 414, 205, 200, 414, 206, 201, 233, 234, 74, 74, - 75, 76, 77, 76, 75, 78, 75, 75, 75, 75, - 75, 75, 75, 75, 79, 75, 75, 75, 80, 75, - 75, 81, 81, 81, 81, 81, 82, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 75, 84, - 84, 84, 85, 85, 84, 408, 232, 88, 84, 84, - 88, 220, 223, 221, 224, 200, 222, 235, 201, 235, - - 225, 236, 237, 86, 86, 89, 91, 91, 89, 248, - 232, 248, 89, 89, 95, 96, 97, 96, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 98, 95, - 95, 95, 95, 95, 95, 99, 99, 99, 99, 99, - 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 95, 102, 102, 200, 103, 103, 201, 104, - 104, 240, 241, 405, 246, 105, 105, 247, 200, 251, - 252, 201, 200, 255, 256, 201, 403, 106, 106, 107, - 108, 109, 108, 107, 107, 107, 107, 107, 107, 110, - - 107, 111, 112, 113, 107, 107, 107, 107, 107, 107, - 114, 114, 114, 114, 114, 115, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 107, 116, 116, - 117, 116, 116, 118, 119, 116, 120, 116, 116, 116, - 116, 116, 121, 122, 122, 122, 116, 116, 116, 123, - 123, 123, 123, 123, 124, 125, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 116, 127, 128, 127, - 127, 128, 127, 401, 257, 129, 257, 258, 129, 258, - - 173, 174, 173, 400, 173, 174, 173, 200, 261, 262, - 201, 200, 130, 175, 201, 130, 132, 175, 399, 133, - 268, 269, 134, 135, 136, 176, 137, 394, 138, 176, - 186, 271, 272, 271, 187, 275, 276, 280, 281, 273, - 139, 132, 188, 279, 133, 393, 201, 134, 135, 136, - 198, 137, 198, 138, 189, 414, 274, 285, 414, 285, - 200, 296, 297, 201, 388, 139, 140, 141, 142, 141, - 140, 143, 144, 140, 145, 140, 140, 140, 140, 140, - 146, 140, 140, 140, 140, 140, 140, 147, 147, 147, - 147, 147, 148, 147, 147, 147, 147, 147, 147, 147, - - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 140, 149, 150, 151, 150, 152, - 153, 149, 154, 155, 149, 149, 149, 149, 149, 156, - 157, 158, 158, 159, 160, 161, 162, 162, 162, 162, - 162, 163, 162, 162, 162, 162, 164, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 165, 166, 167, 168, 167, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, 169, 166, - 166, 166, 166, 166, 166, 170, 170, 170, 170, 170, - 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, - - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 166, 76, 77, 76, 305, 78, 305, 190, - 186, 190, 299, 300, 191, 301, 302, 177, 177, 177, - 200, 387, 188, 201, 307, 308, 310, 311, 82, 76, - 77, 76, 371, 78, 189, 309, 200, 309, 386, 201, - 312, 312, 312, 177, 177, 177, 313, 200, 313, 384, - 201, 316, 317, 371, 82, 178, 179, 180, 179, 178, - 178, 178, 178, 178, 181, 181, 178, 178, 178, 182, - 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, - 183, 184, 183, 183, 183, 183, 183, 183, 183, 183, - - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 178, 50, 192, 193, 192, 50, 194, - 50, 50, 50, 50, 50, 50, 50, 383, 196, 293, - 293, 293, 50, 50, 50, 382, 200, 294, 295, 201, - 319, 320, 321, 322, 321, 322, 200, 206, 198, 324, - 198, 294, 414, 327, 414, 414, 205, 414, 205, 295, - 328, 206, 50, 50, 192, 193, 192, 50, 194, 50, - 50, 50, 50, 50, 50, 50, 246, 196, 332, 247, - 332, 50, 50, 50, 220, 223, 221, 224, 235, 222, - 235, 381, 248, 225, 248, 341, 257, 341, 257, 258, - - 414, 258, 343, 414, 343, 271, 272, 271, 333, 275, - 276, 50, 207, 273, 207, 414, 334, 414, 414, 285, - 414, 285, 348, 352, 305, 309, 305, 309, 380, 379, - 274, 312, 312, 312, 376, 375, 348, 352, 367, 208, - 208, 208, 209, 210, 208, 208, 208, 211, 212, 208, - 208, 208, 213, 208, 208, 208, 214, 215, 208, 414, - 289, 414, 288, 288, 289, 366, 344, 345, 370, 365, - 290, 291, 313, 321, 313, 321, 364, 322, 206, 322, - 344, 332, 370, 332, 290, 341, 371, 341, 345, 208, - 208, 343, 291, 343, 208, 208, 371, 346, 347, 208, - - 371, 363, 362, 208, 208, 263, 263, 361, 263, 263, - 371, 346, 263, 360, 263, 263, 263, 263, 263, 347, - 293, 293, 293, 263, 263, 263, 350, 351, 294, 295, - 368, 369, 270, 372, 373, 374, 377, 374, 377, 378, - 350, 378, 294, 359, 368, 374, 358, 372, 351, 357, - 295, 374, 369, 263, 282, 373, 374, 284, 282, 374, - 282, 282, 389, 282, 282, 389, 282, 282, 389, 282, - 282, 282, 282, 282, 282, 385, 392, 385, 377, 389, - 377, 356, 389, 389, 390, 391, 378, 395, 378, 395, - 392, 396, 397, 396, 397, 398, 404, 398, 390, 385, - - 404, 385, 282, 288, 288, 289, 391, 402, 404, 402, - 355, 290, 291, 292, 404, 319, 406, 404, 406, 395, - 316, 395, 404, 310, 396, 290, 396, 397, 398, 397, - 398, 307, 407, 291, 407, 292, 325, 325, 353, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 409, - 402, 409, 402, 301, 325, 325, 325, 406, 407, 406, - 407, 412, 409, 412, 409, 413, 412, 413, 412, 413, - 349, 413, 349, 280, 275, 268, 261, 342, 255, 251, - 249, 240, 236, 233, 325, 325, 325, 339, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 338, 337, - - 336, 335, 331, 325, 325, 325, 330, 329, 326, 217, - 229, 228, 227, 226, 219, 203, 304, 303, 298, 287, - 286, 264, 259, 249, 414, 229, 228, 227, 226, 219, - 216, 414, 414, 325, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 83, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - - 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - - 75, 75, 75, 75, 185, 185, 185, 185, 185, 185, - 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, - 185, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 197, 414, - 414, 414, 414, 414, 197, 197, 197, 197, 414, 197, - 197, 199, 414, 414, 414, 199, 414, 199, 199, 199, - 199, 199, 199, 199, 202, 414, 202, 202, 414, 202, - 230, 230, 414, 230, 230, 230, 230, 230, 230, 230, - 414, 230, 230, 230, 230, 414, 230, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - - 231, 231, 231, 231, 238, 238, 414, 414, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 414, - 238, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 242, 242, - 414, 242, 242, 414, 242, 242, 242, 242, 242, 242, - 242, 242, 242, 414, 242, 243, 243, 414, 243, 243, - 243, 243, 243, 243, 243, 243, 243, 414, 243, 243, - 414, 243, 244, 244, 414, 244, 244, 244, 244, 244, - 414, 244, 244, 244, 244, 244, 244, 244, 244, 245, - 245, 414, 245, 245, 245, 245, 245, 245, 245, 245, - - 245, 245, 245, 245, 245, 245, 250, 414, 414, 414, - 414, 250, 414, 250, 250, 414, 250, 253, 253, 414, - 414, 253, 414, 253, 253, 253, 253, 414, 253, 253, - 253, 253, 414, 253, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 260, 414, 260, 260, 414, 260, 263, 263, 414, - 414, 414, 414, 263, 263, 263, 263, 414, 414, 263, - 414, 414, 414, 263, 265, 265, 414, 414, 414, 414, - 265, 265, 265, 265, 265, 265, 265, 265, 265, 414, - 265, 266, 266, 414, 414, 414, 414, 266, 266, 266, - - 266, 414, 266, 266, 266, 266, 414, 266, 267, 414, - 267, 267, 414, 267, 277, 277, 414, 414, 277, 414, - 414, 414, 277, 277, 414, 277, 277, 277, 277, 414, - 277, 278, 278, 414, 414, 278, 414, 414, 414, 278, - 278, 278, 278, 278, 278, 278, 414, 278, 283, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 306, 414, 306, 306, 414, - 306, 314, 414, 314, 314, 414, 314, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 318, 318, 414, 318, 414, 318, - - 318, 318, 318, 318, 414, 318, 318, 318, 318, 414, - 318, 323, 323, 323, 414, 323, 323, 323, 323, 325, - 325, 414, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 340, 340, 414, 340, - 340, 340, 340, 340, 414, 340, 414, 340, 340, 340, - 340, 414, 340, 354, 354, 414, 354, 354, 354, 354, - 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - 45, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414 - } ; - -static yyconst short int yy_chk[1821] = - { 0, - 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, 2, - 47, 2, 47, 405, 2, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - - 3, 3, 3, 3, 5, 6, 15, 52, 403, 16, - 52, 54, 54, 62, 62, 15, 5, 6, 16, 55, - 54, 55, 61, 54, 55, 61, 74, 74, 5, 6, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, - 10, 11, 9, 10, 12, 400, 73, 11, 13, 14, - 12, 65, 66, 65, 66, 73, 65, 76, 73, 76, - - 66, 82, 82, 9, 10, 11, 13, 14, 12, 96, - 73, 96, 13, 14, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 19, 20, 79, 19, 20, 79, 19, - 20, 86, 86, 393, 94, 19, 20, 94, 98, 100, - 100, 98, 105, 106, 106, 105, 388, 19, 20, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 25, 25, 25, - 26, 26, 26, 386, 108, 25, 108, 110, 26, 110, - - 35, 35, 35, 384, 36, 36, 36, 113, 115, 115, - 113, 121, 25, 35, 121, 26, 27, 36, 383, 27, - 124, 124, 27, 27, 27, 35, 27, 376, 27, 36, - 41, 127, 127, 127, 41, 130, 130, 139, 139, 127, - 27, 28, 41, 138, 28, 375, 138, 28, 28, 28, - 141, 28, 141, 28, 41, 146, 127, 150, 146, 150, - 156, 159, 159, 156, 367, 28, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 37, 37, 37, 167, 37, 167, 42, - 42, 42, 161, 161, 42, 163, 163, 37, 37, 37, - 169, 366, 42, 169, 171, 171, 176, 176, 37, 38, - 38, 38, 346, 38, 42, 173, 175, 173, 365, 175, - 177, 177, 177, 38, 38, 38, 179, 182, 179, 363, - 182, 184, 184, 346, 38, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 362, 43, 158, - 158, 158, 43, 43, 43, 361, 188, 158, 158, 188, - 189, 189, 190, 192, 190, 192, 196, 190, 198, 196, - 198, 158, 199, 220, 245, 199, 205, 245, 205, 158, - 220, 205, 43, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 246, 44, 224, 246, - 224, 44, 44, 44, 210, 211, 210, 211, 235, 210, - 235, 360, 248, 211, 248, 255, 257, 255, 257, 258, - - 265, 258, 268, 265, 268, 271, 271, 271, 224, 274, - 274, 44, 58, 271, 58, 278, 224, 282, 278, 285, - 282, 285, 291, 295, 305, 309, 305, 309, 359, 358, - 271, 312, 312, 312, 355, 353, 291, 295, 339, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 63, - 289, 63, 288, 288, 288, 338, 289, 289, 345, 337, - 288, 288, 313, 321, 313, 321, 336, 322, 321, 322, - 289, 332, 345, 332, 288, 341, 347, 341, 289, 63, - 63, 343, 288, 343, 63, 63, 348, 290, 290, 63, - - 347, 335, 334, 63, 63, 125, 125, 333, 125, 125, - 348, 290, 125, 331, 125, 125, 125, 125, 125, 290, - 293, 293, 293, 125, 125, 125, 294, 294, 293, 293, - 344, 344, 125, 349, 349, 350, 356, 351, 356, 357, - 294, 357, 293, 330, 344, 352, 329, 349, 294, 328, - 293, 351, 344, 125, 148, 349, 350, 148, 148, 352, - 148, 148, 368, 148, 148, 369, 148, 148, 370, 148, - 148, 148, 148, 148, 148, 364, 373, 364, 377, 369, - 377, 327, 370, 368, 372, 372, 378, 379, 378, 379, - 373, 380, 381, 380, 381, 382, 390, 382, 372, 385, - - 391, 385, 148, 157, 157, 157, 372, 387, 392, 387, - 326, 157, 157, 157, 391, 320, 394, 390, 394, 395, - 317, 395, 392, 311, 396, 157, 396, 397, 398, 397, - 398, 308, 399, 157, 399, 157, 324, 324, 303, 324, - 324, 324, 324, 324, 324, 324, 324, 324, 324, 401, - 402, 401, 402, 302, 324, 324, 324, 406, 407, 406, - 407, 408, 409, 408, 409, 410, 412, 410, 412, 413, - 456, 413, 456, 281, 276, 269, 262, 259, 256, 252, - 250, 241, 237, 234, 324, 354, 354, 229, 354, 354, - 354, 354, 354, 354, 354, 354, 354, 354, 228, 227, - - 226, 225, 223, 354, 354, 354, 222, 221, 219, 218, - 215, 214, 213, 212, 209, 204, 165, 164, 160, 154, - 152, 119, 112, 99, 89, 70, 69, 68, 67, 64, - 60, 45, 0, 354, 415, 415, 415, 415, 415, 415, - 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, - 415, 416, 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, 417, 417, - 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, - 417, 417, 417, 417, 417, 418, 418, 418, 418, 418, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - - 418, 418, 419, 419, 419, 419, 419, 419, 419, 419, - 419, 419, 419, 419, 419, 419, 419, 419, 419, 420, - 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, - 420, 420, 420, 420, 420, 420, 421, 421, 421, 421, - 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, - 421, 421, 421, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 424, 424, 424, - 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, - - 424, 424, 424, 424, 425, 425, 425, 425, 425, 425, - 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, - 425, 426, 426, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 426, 426, 426, 427, 0, - 0, 0, 0, 0, 427, 427, 427, 427, 0, 427, - 427, 428, 0, 0, 0, 428, 0, 428, 428, 428, - 428, 428, 428, 428, 429, 0, 429, 429, 0, 429, - 430, 430, 0, 430, 430, 430, 430, 430, 430, 430, - 0, 430, 430, 430, 430, 0, 430, 431, 431, 431, - 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, - - 431, 431, 431, 431, 432, 432, 0, 0, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 432, 432, 0, - 432, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, 434, 434, - 0, 434, 434, 0, 434, 434, 434, 434, 434, 434, - 434, 434, 434, 0, 434, 435, 435, 0, 435, 435, - 435, 435, 435, 435, 435, 435, 435, 0, 435, 435, - 0, 435, 436, 436, 0, 436, 436, 436, 436, 436, - 0, 436, 436, 436, 436, 436, 436, 436, 436, 437, - 437, 0, 437, 437, 437, 437, 437, 437, 437, 437, - - 437, 437, 437, 437, 437, 437, 438, 0, 0, 0, - 0, 438, 0, 438, 438, 0, 438, 439, 439, 0, - 0, 439, 0, 439, 439, 439, 439, 0, 439, 439, - 439, 439, 0, 439, 440, 440, 440, 440, 440, 440, - 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, - 440, 441, 0, 441, 441, 0, 441, 442, 442, 0, - 0, 0, 0, 442, 442, 442, 442, 0, 0, 442, - 0, 0, 0, 442, 443, 443, 0, 0, 0, 0, - 443, 443, 443, 443, 443, 443, 443, 443, 443, 0, - 443, 444, 444, 0, 0, 0, 0, 444, 444, 444, - - 444, 0, 444, 444, 444, 444, 0, 444, 445, 0, - 445, 445, 0, 445, 446, 446, 0, 0, 446, 0, - 0, 0, 446, 446, 0, 446, 446, 446, 446, 0, - 446, 447, 447, 0, 0, 447, 0, 0, 0, 447, - 447, 447, 447, 447, 447, 447, 0, 447, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 449, 0, 449, 449, 0, - 449, 450, 0, 450, 450, 0, 450, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, - 451, 451, 451, 451, 452, 452, 0, 452, 0, 452, - - 452, 452, 452, 452, 0, 452, 452, 452, 452, 0, - 452, 453, 453, 453, 0, 453, 453, 453, 453, 454, - 454, 0, 454, 454, 454, 454, 454, 454, 454, 454, - 454, 454, 454, 454, 454, 454, 455, 455, 0, 455, - 455, 455, 455, 455, 0, 455, 0, 455, 455, 455, - 455, 0, 455, 457, 457, 0, 457, 457, 457, 457, - 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *yytext; -#line 1 "tools\\wpp_new\\ppl.l" -#define INITIAL 0 -/* -*-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. - * - */ -/* - * Special flex options and exclusive scanner start-conditions - */ -#define YY_STACK_USED 1 -#define YY_NEVER_INTERACTIVE 1 -#define YY_NO_UNPUT 1 -#define pp_pp 1 - -#define pp_eol 2 - -#define pp_inc 3 - -#define pp_dqs 4 - -#define pp_sqs 5 - -#define pp_iqs 6 - -#define pp_comment 7 - -#define pp_def 8 - -#define pp_define 9 - -#define pp_macro 10 - -#define pp_mbody 11 - -#define pp_macign 12 - -#define pp_macscan 13 - -#define pp_macexp 14 - -#define pp_if 15 - -#define pp_ifd 16 - -#define pp_endif 17 - -#define pp_line 18 - -#define pp_defined 19 - -#define pp_ignore 20 - -#define RCINCL 21 - -#line 159 "tools\\wpp_new\\ppl.l" -#include -#include -#include -#include -#include -#include - -#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 */ - 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 */ - const 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; - int pass_data; -} 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); -static int is_c_h_include(char *fname, int quoted); -/* 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; - -static int pass_data=1; - -/* - * Global variables - */ -include_state_t pp_incl_state = -{ - -1, /* state */ - NULL, /* ppp */ - 0, /* ifdepth */ - 0 /* seen_junk */ -}; - -includelogicentry_t *pp_includelogiclist = NULL; - -/* - ************************************************************************** - * The scanner starts here - ************************************************************************** - */ -#line 1234 "tools\\wpp_new\\lex.yy.c" - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap YY_PROTO(( void )); -#else -extern int yywrap YY_PROTO(( void )); -#endif -#endif - -#ifndef YY_NO_UNPUT -static void yyunput YY_PROTO(( int c, char *buf_ptr )); -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen YY_PROTO(( yyconst char * )); -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus -static int yyinput YY_PROTO(( void )); -#else -static int input YY_PROTO(( void )); -#endif -#endif - -#if YY_STACK_USED -static int yy_start_stack_ptr = 0; -static int yy_start_stack_depth = 0; -static int *yy_start_stack = 0; -#ifndef YY_NO_PUSH_STATE -static void yy_push_state YY_PROTO(( int new_state )); -#endif -#ifndef YY_NO_POP_STATE -static void yy_pop_state YY_PROTO(( void )); -#endif -#ifndef YY_NO_TOP_STATE -static int yy_top_state YY_PROTO(( void )); -#endif - -#else -#define YY_NO_PUSH_STATE 1 -#define YY_NO_POP_STATE 1 -#define YY_NO_TOP_STATE 1 -#endif - -#ifdef YY_MALLOC_DECL -YY_MALLOC_DECL -#else -#if __STDC__ -#ifndef __cplusplus -#include -#endif -#else -/* Just try to get by without declaring the routines. This will fail - * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) - * or sizeof(void*) != sizeof(int). - */ -#endif -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ - -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( yy_current_buffer->yy_is_interactive ) \ - { \ - int c = '*', n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ - && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL int yylex YY_PROTO(( void )) -#endif - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - if ( yyleng > 0 ) \ - yy_current_buffer->yy_at_bol = \ - (yytext[yyleng - 1] == '\n'); \ - YY_USER_ACTION - -YY_DECL - { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 298 "tools\\wpp_new\\ppl.l" - - /* - * 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. - */ -#line 1402 "tools\\wpp_new\\lex.yy.c" - - if ( yy_init ) - { - yy_init = 0; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! yy_start ) - yy_start = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! yy_current_buffer ) - yy_current_buffer = - yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_load_buffer_state(); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = yy_c_buf_p; - - /* Support of yytext. */ - *yy_cp = yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yy_start; - yy_current_state += YY_AT_BOL(); -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 415 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 1771 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - - -do_action: /* This label is used only to access EOF actions. */ - - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = yy_hold_char; - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - goto yy_find_action; - -case 1: -YY_RULE_SETUP -#line 311 "tools\\wpp_new\\ppl.l" -pp_incl_state.seen_junk++; yy_push_state(pp_pp); - YY_BREAK -/* - * Scan for the preprocessor directives - */ -case 2: -YY_RULE_SETUP -#line 316 "tools\\wpp_new\\ppl.l" -if(yy_top_state() != pp_ignore) {yy_pp_state(pp_inc); return tINCLUDE;} else {yy_pp_state(pp_eol);} - YY_BREAK -case 3: -YY_RULE_SETUP -#line 317 "tools\\wpp_new\\ppl.l" -yy_pp_state(yy_current_state() != pp_ignore ? pp_def : pp_eol); - YY_BREAK -case 4: -YY_RULE_SETUP -#line 318 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tERROR; - YY_BREAK -case 5: -YY_RULE_SETUP -#line 319 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tWARNING; - YY_BREAK -case 6: -YY_RULE_SETUP -#line 320 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tPRAGMA; - YY_BREAK -case 7: -YY_RULE_SETUP -#line 321 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_eol); if(yy_top_state() != pp_ignore) return tPPIDENT; - YY_BREAK -case 8: -YY_RULE_SETUP -#line 322 "tools\\wpp_new\\ppl.l" -if(yy_top_state() != pp_ignore) {yy_pp_state(pp_ifd); return tUNDEF;} else {yy_pp_state(pp_eol);} - YY_BREAK -case 9: -YY_RULE_SETUP -#line 323 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_ifd); return tIFDEF; - YY_BREAK -case 10: -YY_RULE_SETUP -#line 324 "tools\\wpp_new\\ppl.l" -pp_incl_state.seen_junk--; yy_pp_state(pp_ifd); return tIFNDEF; - YY_BREAK -case 11: -YY_RULE_SETUP -#line 325 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_if); return tIF; - YY_BREAK -case 12: -YY_RULE_SETUP -#line 326 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_if); return tELIF; - YY_BREAK -case 13: -YY_RULE_SETUP -#line 327 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_endif); return tELSE; - YY_BREAK -case 14: -YY_RULE_SETUP -#line 328 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_endif); return tENDIF; - YY_BREAK -case 15: -YY_RULE_SETUP -#line 329 "tools\\wpp_new\\ppl.l" -if(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tLINE;} else {yy_pp_state(pp_eol);} - YY_BREAK -case 16: -YY_RULE_SETUP -#line 330 "tools\\wpp_new\\ppl.l" -if(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tGCCLINE;} else {yy_pp_state(pp_eol);} - YY_BREAK -case 17: -YY_RULE_SETUP -#line 331 "tools\\wpp_new\\ppl.l" -ppy_error("Invalid preprocessor token '%s'", ppy_text); - YY_BREAK -case 18: -YY_RULE_SETUP -#line 332 "tools\\wpp_new\\ppl.l" -newline(1); yy_pop_state(); return tNL; /* This could be the null-token */ - YY_BREAK -case 19: -YY_RULE_SETUP -#line 333 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 20: -YY_RULE_SETUP -#line 334 "tools\\wpp_new\\ppl.l" -ppy_error("Preprocessor junk '%s'", ppy_text); - YY_BREAK -case 21: -YY_RULE_SETUP -#line 335 "tools\\wpp_new\\ppl.l" -return *ppy_text; - YY_BREAK -/* - * Handle #include and #line - */ -case 22: -YY_RULE_SETUP -#line 340 "tools\\wpp_new\\ppl.l" -return make_number(10, &ppy_lval, ppy_text, ppy_leng); - YY_BREAK -case 23: -YY_RULE_SETUP -#line 341 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_iqs); - YY_BREAK -case 24: -YY_RULE_SETUP -#line 342 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); - YY_BREAK -case 25: -YY_RULE_SETUP -#line 343 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 26: -YY_RULE_SETUP -#line 344 "tools\\wpp_new\\ppl.l" -newline(1); yy_pop_state(); return tNL; - YY_BREAK -case 27: -YY_RULE_SETUP -#line 345 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 28: -YY_RULE_SETUP -#line 346 "tools\\wpp_new\\ppl.l" -ppy_error(yy_current_state() == pp_inc ? "Trailing junk in #include" : "Trailing junk in #line"); - YY_BREAK -/* - * Ignore all input when a false clause is parsed - */ -case 29: -YY_RULE_SETUP -#line 351 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 30: -YY_RULE_SETUP -#line 352 "tools\\wpp_new\\ppl.l" -newline(1); - YY_BREAK -case 31: -YY_RULE_SETUP -#line 353 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 32: -YY_RULE_SETUP -#line 354 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -/* - * 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. - */ -case 33: -YY_RULE_SETUP -#line 363 "tools\\wpp_new\\ppl.l" -return make_number(8, &ppy_lval, ppy_text, ppy_leng); - YY_BREAK -case 34: -YY_RULE_SETUP -#line 364 "tools\\wpp_new\\ppl.l" -ppy_error("Invalid octal digit"); - YY_BREAK -case 35: -YY_RULE_SETUP -#line 365 "tools\\wpp_new\\ppl.l" -return make_number(10, &ppy_lval, ppy_text, ppy_leng); - YY_BREAK -case 36: -YY_RULE_SETUP -#line 366 "tools\\wpp_new\\ppl.l" -return make_number(16, &ppy_lval, ppy_text, ppy_leng); - YY_BREAK -case 37: -YY_RULE_SETUP -#line 367 "tools\\wpp_new\\ppl.l" -ppy_error("Invalid hex number"); - YY_BREAK -case 38: -YY_RULE_SETUP -#line 368 "tools\\wpp_new\\ppl.l" -yy_push_state(pp_defined); return tDEFINED; - YY_BREAK -case 39: -YY_RULE_SETUP -#line 369 "tools\\wpp_new\\ppl.l" -return tLSHIFT; - YY_BREAK -case 40: -YY_RULE_SETUP -#line 370 "tools\\wpp_new\\ppl.l" -return tRSHIFT; - YY_BREAK -case 41: -YY_RULE_SETUP -#line 371 "tools\\wpp_new\\ppl.l" -return tLOGAND; - YY_BREAK -case 42: -YY_RULE_SETUP -#line 372 "tools\\wpp_new\\ppl.l" -return tLOGOR; - YY_BREAK -case 43: -YY_RULE_SETUP -#line 373 "tools\\wpp_new\\ppl.l" -return tEQ; - YY_BREAK -case 44: -YY_RULE_SETUP -#line 374 "tools\\wpp_new\\ppl.l" -return tNE; - YY_BREAK -case 45: -YY_RULE_SETUP -#line 375 "tools\\wpp_new\\ppl.l" -return tLTE; - YY_BREAK -case 46: -YY_RULE_SETUP -#line 376 "tools\\wpp_new\\ppl.l" -return tGTE; - YY_BREAK -case 47: -YY_RULE_SETUP -#line 377 "tools\\wpp_new\\ppl.l" -newline(1); yy_pop_state(); return tNL; - YY_BREAK -case 48: -YY_RULE_SETUP -#line 378 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 49: -YY_RULE_SETUP -#line 379 "tools\\wpp_new\\ppl.l" -ppy_error("Junk in conditional expression"); - YY_BREAK -case 50: -YY_RULE_SETUP -#line 380 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 51: -YY_RULE_SETUP -#line 381 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); - YY_BREAK -case 52: -YY_RULE_SETUP -#line 382 "tools\\wpp_new\\ppl.l" -ppy_error("String constants not allowed in conditionals"); - YY_BREAK -case 53: -YY_RULE_SETUP -#line 383 "tools\\wpp_new\\ppl.l" -return *ppy_text; - YY_BREAK -/* - * Handle #ifdef, #ifndef and #undef - * to get only an untranslated/unexpanded identifier - */ -case 54: -YY_RULE_SETUP -#line 389 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; - YY_BREAK -case 55: -YY_RULE_SETUP -#line 390 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 56: -YY_RULE_SETUP -#line 391 "tools\\wpp_new\\ppl.l" -newline(1); yy_pop_state(); return tNL; - YY_BREAK -case 57: -YY_RULE_SETUP -#line 392 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 58: -YY_RULE_SETUP -#line 393 "tools\\wpp_new\\ppl.l" -ppy_error("Identifier expected"); - YY_BREAK -/* - * Handle #else and #endif. - */ -case 59: -YY_RULE_SETUP -#line 398 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 60: -YY_RULE_SETUP -#line 399 "tools\\wpp_new\\ppl.l" -newline(1); yy_pop_state(); return tNL; - YY_BREAK -case 61: -YY_RULE_SETUP -#line 400 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 62: -YY_RULE_SETUP -#line 401 "tools\\wpp_new\\ppl.l" -ppy_error("Garbage after #else or #endif."); - YY_BREAK -/* - * Handle the special 'defined' keyword. - * This is necessary to get the identifier prior to any - * substitutions. - */ -case 63: -YY_RULE_SETUP -#line 408 "tools\\wpp_new\\ppl.l" -yy_pop_state(); ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; - YY_BREAK -case 64: -YY_RULE_SETUP -#line 409 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 65: -YY_RULE_SETUP -#line 410 "tools\\wpp_new\\ppl.l" -return *ppy_text; - YY_BREAK -case 66: -YY_RULE_SETUP -#line 411 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 67: -YY_RULE_SETUP -#line 412 "tools\\wpp_new\\ppl.l" -ppy_error("Identifier expected"); - YY_BREAK -/* - * Handle #error, #warning, #pragma and #ident. - * Pass everything literally to the parser, which - * will act appropriately. - * Comments are stripped from the literal text. - */ -case 68: -YY_RULE_SETUP -#line 420 "tools\\wpp_new\\ppl.l" -if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; } - YY_BREAK -case 69: -YY_RULE_SETUP -#line 421 "tools\\wpp_new\\ppl.l" -if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; } - YY_BREAK -case 70: -YY_RULE_SETUP -#line 422 "tools\\wpp_new\\ppl.l" -if(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; } - YY_BREAK -case 71: -YY_RULE_SETUP -#line 423 "tools\\wpp_new\\ppl.l" -newline(1); yy_pop_state(); if(yy_current_state() != pp_ignore) { return tNL; } - YY_BREAK -case 72: -YY_RULE_SETUP -#line 424 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -/* - * Handle left side of #define - */ -case 73: -YY_RULE_SETUP -#line 429 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); ppy_lval.cptr[ppy_leng-1] = '\0'; yy_pp_state(pp_macro); return tMACRO; - YY_BREAK -case 74: -YY_RULE_SETUP -#line 430 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); yy_pp_state(pp_define); return tDEFINE; - YY_BREAK -case 75: -YY_RULE_SETUP -#line 431 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 76: -YY_RULE_SETUP -#line 432 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 77: -YY_RULE_SETUP -#line 433 "tools\\wpp_new\\ppl.l" -perror("Identifier expected"); - YY_BREAK -/* - * Scan the substitution of a define - */ -case 78: -YY_RULE_SETUP -#line 438 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; - YY_BREAK -case 79: -YY_RULE_SETUP -#line 439 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; - YY_BREAK -case 80: -YY_RULE_SETUP -#line 440 "tools\\wpp_new\\ppl.l" -newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL; - YY_BREAK -case 81: -YY_RULE_SETUP -#line 441 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 82: -YY_RULE_SETUP -#line 442 "tools\\wpp_new\\ppl.l" -newline(1); yy_pop_state(); return tNL; - YY_BREAK -case 83: -YY_RULE_SETUP -#line 443 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); - YY_BREAK -case 84: -YY_RULE_SETUP -#line 444 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); - YY_BREAK -/* - * Scan the definition macro arguments - */ -case 85: -YY_RULE_SETUP -#line 449 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_mbody); return tMACROEND; - YY_BREAK -case 86: -YY_RULE_SETUP -#line 450 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 87: -YY_RULE_SETUP -#line 451 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; - YY_BREAK -case 88: -YY_RULE_SETUP -#line 452 "tools\\wpp_new\\ppl.l" -return ','; - YY_BREAK -case 89: -YY_RULE_SETUP -#line 453 "tools\\wpp_new\\ppl.l" -return tELIPSIS; - YY_BREAK -case 90: -YY_RULE_SETUP -#line 454 "tools\\wpp_new\\ppl.l" -ppy_error("Argument identifier expected"); - YY_BREAK -case 91: -YY_RULE_SETUP -#line 455 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -/* - * Scan the substitution of a macro - */ -case 92: -YY_RULE_SETUP -#line 460 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; - YY_BREAK -case 93: -YY_RULE_SETUP -#line 461 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT; - YY_BREAK -case 94: -YY_RULE_SETUP -#line 462 "tools\\wpp_new\\ppl.l" -return tCONCAT; - YY_BREAK -case 95: -YY_RULE_SETUP -#line 463 "tools\\wpp_new\\ppl.l" -return tSTRINGIZE; - YY_BREAK -case 96: -YY_RULE_SETUP -#line 464 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; - YY_BREAK -case 97: -YY_RULE_SETUP -#line 465 "tools\\wpp_new\\ppl.l" -ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; - YY_BREAK -case 98: -YY_RULE_SETUP -#line 466 "tools\\wpp_new\\ppl.l" -newline(0); ppy_lval.cptr = pp_xstrdup(" "); return tLITERAL; - YY_BREAK -case 99: -YY_RULE_SETUP -#line 467 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 100: -YY_RULE_SETUP -#line 468 "tools\\wpp_new\\ppl.l" -newline(1); yy_pop_state(); return tNL; - YY_BREAK -case 101: -YY_RULE_SETUP -#line 469 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); - YY_BREAK -case 102: -YY_RULE_SETUP -#line 470 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); - YY_BREAK -/* - * 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... - */ -case 103: -*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ -yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 481 "tools\\wpp_new\\ppl.l" -yy_pp_state(pp_macscan); - YY_BREAK -case 104: -YY_RULE_SETUP -#line 482 "tools\\wpp_new\\ppl.l" -{ - if(yy_top_state() != pp_macscan) - newline(0); - } - YY_BREAK -case 105: -YY_RULE_SETUP -#line 486 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 106: -YY_RULE_SETUP -#line 487 "tools\\wpp_new\\ppl.l" -{ - 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); - } - YY_BREAK -/* - * Macro expansion argument text scanning. - * This state is active when a macro's arguments are being read for expansion. - */ -case 107: -YY_RULE_SETUP -#line 499 "tools\\wpp_new\\ppl.l" -{ - if(++MACROPARENTHESES() > 1) - add_text_to_macro(ppy_text, ppy_leng); - } - YY_BREAK -case 108: -YY_RULE_SETUP -#line 503 "tools\\wpp_new\\ppl.l" -{ - if(--MACROPARENTHESES() == 0) - { - yy_pop_state(); - macro_add_arg(1); - } - else - add_text_to_macro(ppy_text, ppy_leng); - } - YY_BREAK -case 109: -YY_RULE_SETUP -#line 512 "tools\\wpp_new\\ppl.l" -{ - if(MACROPARENTHESES() > 1) - add_text_to_macro(ppy_text, ppy_leng); - else - macro_add_arg(0); - } - YY_BREAK -case 110: -YY_RULE_SETUP -#line 518 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); - YY_BREAK -case 111: -YY_RULE_SETUP -#line 519 "tools\\wpp_new\\ppl.l" -new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); - YY_BREAK -case 112: -YY_RULE_SETUP -#line 520 "tools\\wpp_new\\ppl.l" -yy_push_state(pp_comment); add_text_to_macro(" ", 1); - YY_BREAK -case 113: -YY_RULE_SETUP -#line 521 "tools\\wpp_new\\ppl.l" -pp_status.line_number++; pp_status.char_number = 1; add_text_to_macro(ppy_text, ppy_leng); - YY_BREAK -case 114: -YY_RULE_SETUP -#line 522 "tools\\wpp_new\\ppl.l" -add_text_to_macro(ppy_text, ppy_leng); - YY_BREAK -case 115: -YY_RULE_SETUP -#line 523 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -/* - * Comment handling (almost all start-conditions) - */ -case 116: -YY_RULE_SETUP -#line 528 "tools\\wpp_new\\ppl.l" -yy_push_state(pp_comment); - YY_BREAK -case 117: -YY_RULE_SETUP -#line 529 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 118: -YY_RULE_SETUP -#line 530 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 119: -YY_RULE_SETUP -#line 531 "tools\\wpp_new\\ppl.l" -yy_pop_state(); - YY_BREAK -/* - * Remove C++ style comment (almost all start-conditions) - */ -case 120: -YY_RULE_SETUP -#line 536 "tools\\wpp_new\\ppl.l" -{ - if(ppy_text[ppy_leng-1] == '\\') - ppy_warning("C++ style comment ends with an escaped newline (escape ignored)"); - } - YY_BREAK -/* - * Single, double and <> quoted constants - */ -case 121: -YY_RULE_SETUP -#line 544 "tools\\wpp_new\\ppl.l" -pp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs); - YY_BREAK -case 122: -YY_RULE_SETUP -#line 545 "tools\\wpp_new\\ppl.l" -pp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs); - YY_BREAK -case 123: -YY_RULE_SETUP -#line 546 "tools\\wpp_new\\ppl.l" -add_string(ppy_text, ppy_leng); - YY_BREAK -case 124: -YY_RULE_SETUP -#line 547 "tools\\wpp_new\\ppl.l" -{ - 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(); - if (is_c_h_include(ppy_lval.cptr, 1)) pass_data=0; - else pass_data=1; - return tDQSTRING; - default: - put_string(); - } - } - YY_BREAK -case 125: -YY_RULE_SETUP -#line 569 "tools\\wpp_new\\ppl.l" -add_string(ppy_text, ppy_leng); - YY_BREAK -case 126: -YY_RULE_SETUP -#line 570 "tools\\wpp_new\\ppl.l" -{ - 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(); - } - } - YY_BREAK -case 127: -YY_RULE_SETUP -#line 584 "tools\\wpp_new\\ppl.l" -add_string(ppy_text, ppy_leng); - YY_BREAK -case 128: -YY_RULE_SETUP -#line 585 "tools\\wpp_new\\ppl.l" -{ - add_string(ppy_text, ppy_leng); - yy_pop_state(); - ppy_lval.cptr = get_string(); - return tIQSTRING; - } - YY_BREAK -case 129: -YY_RULE_SETUP -#line 591 "tools\\wpp_new\\ppl.l" -{ - /* - * 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); - } - } - YY_BREAK -case 130: -YY_RULE_SETUP -#line 615 "tools\\wpp_new\\ppl.l" -add_string(ppy_text, ppy_leng); - YY_BREAK -case 131: -YY_RULE_SETUP -#line 616 "tools\\wpp_new\\ppl.l" -{ - newline(1); - add_string(ppy_text, ppy_leng); - ppy_warning("Newline in string constant encounterd (started line %d)", string_start()); - } - YY_BREAK -/* - * Identifier scanning - */ -case 132: -YY_RULE_SETUP -#line 625 "tools\\wpp_new\\ppl.l" -{ - 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"); - - 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); - } - YY_BREAK -/* - * Everything else that needs to be passed and - * newline and continuation handling - */ -case 133: -YY_RULE_SETUP -#line 671 "tools\\wpp_new\\ppl.l" -pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng); - YY_BREAK -case 134: -YY_RULE_SETUP -#line 672 "tools\\wpp_new\\ppl.l" -put_buffer(ppy_text, ppy_leng); - YY_BREAK -case 135: -YY_RULE_SETUP -#line 673 "tools\\wpp_new\\ppl.l" -newline(1); - YY_BREAK -case 136: -YY_RULE_SETUP -#line 674 "tools\\wpp_new\\ppl.l" -newline(0); - YY_BREAK -case 137: -YY_RULE_SETUP -#line 675 "tools\\wpp_new\\ppl.l" -pp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng); - YY_BREAK -/* - * Special catcher for macro argmument expansion to prevent - * newlines to propagate to the output or admin. - */ -case 138: -YY_RULE_SETUP -#line 681 "tools\\wpp_new\\ppl.l" -put_buffer(ppy_text, ppy_leng); - YY_BREAK -case 139: -YY_RULE_SETUP -#line 683 "tools\\wpp_new\\ppl.l" -{ - ppy_lval.cptr=pp_xstrdup(ppy_text); - yy_pop_state(); - return tRCINCLUDEPATH; - } - YY_BREAK -case 140: -YY_RULE_SETUP -#line 689 "tools\\wpp_new\\ppl.l" -; - YY_BREAK -case 141: -YY_RULE_SETUP -#line 691 "tools\\wpp_new\\ppl.l" -{ - new_string(); add_string(ppy_text,ppy_leng);yy_push_state(pp_dqs); - } - YY_BREAK -/* - * This is a 'catch-all' rule to discover errors in the scanner - * in an orderly manner. - */ -case 142: -YY_RULE_SETUP -#line 699 "tools\\wpp_new\\ppl.l" -pp_incl_state.seen_junk++; ppy_warning("Unmatched text '%c' (0x%02x); please report\n", isprint(*ppy_text & 0xff) ? *ppy_text : ' ', *ppy_text); - YY_BREAK -case YY_STATE_EOF(INITIAL): -case YY_STATE_EOF(pp_pp): -case YY_STATE_EOF(pp_eol): -case YY_STATE_EOF(pp_inc): -case YY_STATE_EOF(pp_dqs): -case YY_STATE_EOF(pp_sqs): -case YY_STATE_EOF(pp_iqs): -case YY_STATE_EOF(pp_comment): -case YY_STATE_EOF(pp_def): -case YY_STATE_EOF(pp_define): -case YY_STATE_EOF(pp_macro): -case YY_STATE_EOF(pp_mbody): -case YY_STATE_EOF(pp_macign): -case YY_STATE_EOF(pp_macscan): -case YY_STATE_EOF(pp_macexp): -case YY_STATE_EOF(pp_if): -case YY_STATE_EOF(pp_ifd): -case YY_STATE_EOF(pp_endif): -case YY_STATE_EOF(pp_line): -case YY_STATE_EOF(pp_defined): -case YY_STATE_EOF(pp_ignore): -case YY_STATE_EOF(RCINCL): -#line 701 "tools\\wpp_new\\ppl.l" -{ - 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"); - yyterminate(); - } - else if(bep->should_pop == 2) - { - macexpstackentry_t *mac; - mac = pop_macro(); - expand_macro(mac); - } - ppy__delete_buffer(b); - } - YY_BREAK -case 143: -YY_RULE_SETUP -#line 723 "tools\\wpp_new\\ppl.l" -ECHO; - YY_BREAK -#line 2471 "tools\\wpp_new\\lex.yy.c" - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yy_hold_char; - YY_RESTORE_YY_MORE_OFFSET - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between yy_current_buffer and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yy_n_chars = yy_current_buffer->yy_n_chars; - yy_current_buffer->yy_input_file = yyin; - yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = yy_c_buf_p; - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer() ) - { - case EOB_ACT_END_OF_FILE: - { - yy_did_buffer_switch_on_eof = 0; - - if ( yywrap() ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = - yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yy_c_buf_p = - &yy_current_buffer->yy_ch_buf[yy_n_chars]; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of yylex */ - - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ - -static int yy_get_next_buffer() - { - register char *dest = yy_current_buffer->yy_ch_buf; - register char *source = yytext_ptr; - register int number_to_move, i; - int ret_val; - - if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( yy_current_buffer->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - yy_current_buffer->yy_n_chars = yy_n_chars = 0; - - else - { - int num_to_read = - yy_current_buffer->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ -#ifdef YY_USES_REJECT - YY_FATAL_ERROR( -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); -#else - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = yy_current_buffer; - - int yy_c_buf_p_offset = - (int) (yy_c_buf_p - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yy_flex_realloc( (void *) b->yy_ch_buf, - b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = yy_current_buffer->yy_buf_size - - number_to_move - 1; -#endif - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), - yy_n_chars, num_to_read ); - - yy_current_buffer->yy_n_chars = yy_n_chars; - } - - if ( yy_n_chars == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - yy_current_buffer->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - yy_n_chars += number_to_move; - yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; - yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; - - return ret_val; - } - - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -static yy_state_type yy_get_previous_state() - { - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = yy_start; - yy_current_state += YY_AT_BOL(); - - for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 415 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; - } - - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - -#ifdef YY_USE_PROTOS -static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) -#else -static yy_state_type yy_try_NUL_trans( yy_current_state ) -yy_state_type yy_current_state; -#endif - { - register int yy_is_jam; - register char *yy_cp = yy_c_buf_p; - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 415 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 414); - - return yy_is_jam ? 0 : yy_current_state; - } - - -#ifndef YY_NO_UNPUT -#ifdef YY_USE_PROTOS -static void yyunput( int c, register char *yy_bp ) -#else -static void yyunput( c, yy_bp ) -int c; -register char *yy_bp; -#endif - { - register char *yy_cp = yy_c_buf_p; - - /* undo effects of setting up yytext */ - *yy_cp = yy_hold_char; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = yy_n_chars + 2; - register char *dest = &yy_current_buffer->yy_ch_buf[ - yy_current_buffer->yy_buf_size + 2]; - register char *source = - &yy_current_buffer->yy_ch_buf[number_to_move]; - - while ( source > yy_current_buffer->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - yy_current_buffer->yy_n_chars = - yy_n_chars = yy_current_buffer->yy_buf_size; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - - yytext_ptr = yy_bp; - yy_hold_char = *yy_cp; - yy_c_buf_p = yy_cp; - } -#endif /* ifndef YY_NO_UNPUT */ - - -#ifdef __cplusplus -static int yyinput() -#else -static int input() -#endif - { - int c; - - *yy_c_buf_p = yy_hold_char; - - if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - /* This was really a NUL. */ - *yy_c_buf_p = '\0'; - - else - { /* need more input */ - int offset = yy_c_buf_p - yytext_ptr; - ++yy_c_buf_p; - - switch ( yy_get_next_buffer() ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart( yyin ); - - /* fall through */ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap() ) - return EOF; - - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = yytext_ptr + offset; - break; - } - } - } - - c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ - *yy_c_buf_p = '\0'; /* preserve yytext */ - yy_hold_char = *++yy_c_buf_p; - - yy_current_buffer->yy_at_bol = (c == '\n'); - - return c; - } - - -#ifdef YY_USE_PROTOS -void yyrestart( FILE *input_file ) -#else -void yyrestart( input_file ) -FILE *input_file; -#endif - { - if ( ! yy_current_buffer ) - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_init_buffer( yy_current_buffer, input_file ); - yy_load_buffer_state(); - } - - -#ifdef YY_USE_PROTOS -void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) -#else -void yy_switch_to_buffer( new_buffer ) -YY_BUFFER_STATE new_buffer; -#endif - { - if ( yy_current_buffer == new_buffer ) - return; - - if ( yy_current_buffer ) - { - /* Flush out information for old buffer. */ - *yy_c_buf_p = yy_hold_char; - yy_current_buffer->yy_buf_pos = yy_c_buf_p; - yy_current_buffer->yy_n_chars = yy_n_chars; - } - - yy_current_buffer = new_buffer; - yy_load_buffer_state(); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yy_did_buffer_switch_on_eof = 1; - } - - -#ifdef YY_USE_PROTOS -void yy_load_buffer_state( void ) -#else -void yy_load_buffer_state() -#endif - { - yy_n_chars = yy_current_buffer->yy_n_chars; - yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; - yyin = yy_current_buffer->yy_input_file; - yy_hold_char = *yy_c_buf_p; - } - - -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) -#else -YY_BUFFER_STATE yy_create_buffer( file, size ) -FILE *file; -int size; -#endif - { - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer( b, file ); - - return b; - } - - -#ifdef YY_USE_PROTOS -void yy_delete_buffer( YY_BUFFER_STATE b ) -#else -void yy_delete_buffer( b ) -YY_BUFFER_STATE b; -#endif - { - if ( ! b ) - return; - - if ( b == yy_current_buffer ) - yy_current_buffer = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yy_flex_free( (void *) b->yy_ch_buf ); - - yy_flex_free( (void *) b ); - } - - -#ifndef YY_ALWAYS_INTERACTIVE -#ifndef YY_NEVER_INTERACTIVE -extern int isatty YY_PROTO(( int )); -#endif -#endif - -#ifdef YY_USE_PROTOS -void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) -#else -void yy_init_buffer( b, file ) -YY_BUFFER_STATE b; -FILE *file; -#endif - - - { - yy_flush_buffer( b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - -#if YY_ALWAYS_INTERACTIVE - b->yy_is_interactive = 1; -#else -#if YY_NEVER_INTERACTIVE - b->yy_is_interactive = 0; -#else - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; -#endif -#endif - } - - -#ifdef YY_USE_PROTOS -void yy_flush_buffer( YY_BUFFER_STATE b ) -#else -void yy_flush_buffer( b ) -YY_BUFFER_STATE b; -#endif - - { - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == yy_current_buffer ) - yy_load_buffer_state(); - } - - -#ifndef YY_NO_SCAN_BUFFER -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) -#else -YY_BUFFER_STATE yy_scan_buffer( base, size ) -char *base; -yy_size_t size; -#endif - { - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer( b ); - - return b; - } -#endif - - -#ifndef YY_NO_SCAN_STRING -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str ) -#else -YY_BUFFER_STATE yy_scan_string( yy_str ) -yyconst char *yy_str; -#endif - { - int len; - for ( len = 0; yy_str[len]; ++len ) - ; - - return yy_scan_bytes( yy_str, len ); - } -#endif - - -#ifndef YY_NO_SCAN_BYTES -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) -#else -YY_BUFFER_STATE yy_scan_bytes( bytes, len ) -yyconst char *bytes; -int len; -#endif - { - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = len + 2; - buf = (char *) yy_flex_alloc( n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < len; ++i ) - buf[i] = bytes[i]; - - buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer( buf, n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; - } -#endif - - -#ifndef YY_NO_PUSH_STATE -#ifdef YY_USE_PROTOS -static void yy_push_state( int new_state ) -#else -static void yy_push_state( new_state ) -int new_state; -#endif - { - if ( yy_start_stack_ptr >= yy_start_stack_depth ) - { - yy_size_t new_size; - - yy_start_stack_depth += YY_START_STACK_INCR; - new_size = yy_start_stack_depth * sizeof( int ); - - if ( ! yy_start_stack ) - yy_start_stack = (int *) yy_flex_alloc( new_size ); - - else - yy_start_stack = (int *) yy_flex_realloc( - (void *) yy_start_stack, new_size ); - - if ( ! yy_start_stack ) - YY_FATAL_ERROR( - "out of memory expanding start-condition stack" ); - } - - yy_start_stack[yy_start_stack_ptr++] = YY_START; - - BEGIN(new_state); - } -#endif - - -#ifndef YY_NO_POP_STATE -static void yy_pop_state() - { - if ( --yy_start_stack_ptr < 0 ) - YY_FATAL_ERROR( "start-condition stack underflow" ); - - BEGIN(yy_start_stack[yy_start_stack_ptr]); - } -#endif - - -#ifndef YY_NO_TOP_STATE -static int yy_top_state() - { - return yy_start_stack[yy_start_stack_ptr - 1]; - } -#endif - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -#ifdef YY_USE_PROTOS -static void yy_fatal_error( yyconst char msg[] ) -#else -static void yy_fatal_error( msg ) -char msg[]; -#endif - { - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); - } - - - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - yytext[yyleng] = yy_hold_char; \ - yy_c_buf_p = yytext + n; \ - yy_hold_char = *yy_c_buf_p; \ - *yy_c_buf_p = '\0'; \ - yyleng = n; \ - } \ - while ( 0 ) - - -/* Internal utility routines. */ - -#ifndef yytext_ptr -#ifdef YY_USE_PROTOS -static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) -#else -static void yy_flex_strncpy( s1, s2, n ) -char *s1; -yyconst char *s2; -int n; -#endif - { - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; - } -#endif - -#ifdef YY_NEED_STRLEN -#ifdef YY_USE_PROTOS -static int yy_flex_strlen( yyconst char *s ) -#else -static int yy_flex_strlen( s ) -yyconst char *s; -#endif - { - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; - } -#endif - - -#ifdef YY_USE_PROTOS -static void *yy_flex_alloc( yy_size_t size ) -#else -static void *yy_flex_alloc( size ) -yy_size_t size; -#endif - { - return (void *) malloc( size ); - } - -#ifdef YY_USE_PROTOS -static void *yy_flex_realloc( void *ptr, yy_size_t size ) -#else -static void *yy_flex_realloc( ptr, size ) -void *ptr; -yy_size_t size; -#endif - { - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); - } - -#ifdef YY_USE_PROTOS -static void yy_flex_free( void *ptr ) -#else -static void yy_flex_free( ptr ) -void *ptr; -#endif - { - free( ptr ); - } - -#if YY_MAIN -int main() - { - yylex(); - return 0; - } -#endif -#line 723 "tools\\wpp_new\\ppl.l" - -/* - ************************************************************************** - * 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]; - - 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"); - 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) - { - val->ull = strtoull(str, NULL, radix); - return tULONGLONG; - } - else - { - val->sll = strtoll(str, NULL, radix); - return tSLONGLONG; - } -#else - pp_internal_error(__FILE__, __LINE__, "long long constants not supported on this platform"); -#endif - } - else if(is_u && is_l) - { - val->ulong = strtoul(str, NULL, radix); - return tULONG; - } - else if(!is_u && is_l) - { - val->slong = strtol(str, NULL, radix); - return tSLONG; - } - else if(is_u && !is_l) - { - val->uint = (unsigned int)strtoul(str, NULL, radix); - return tUINT; - } - - /* Else it must be an int... */ - val->sint = (int)strtol(str, NULL, radix); - return tSINT; -} - - -/* - *------------------------------------------------------------------------- - * Macro and define expansion support - * - * FIXME: Variable macro arguments. - *------------------------------------------------------------------------- - */ -static void expand_special(pp_entry_t *ppp) -{ - const char *dbgtext = "?"; - static char *buf = NULL; - - assert(ppp->type == def_special); - - if(!strcmp(ppp->ident, "__LINE__")) - { - dbgtext = "def_special(__LINE__)"; - buf = pp_xrealloc(buf, 32); - sprintf(buf, "%d", pp_status.line_number); - } - else if(!strcmp(ppp->ident, "__FILE__")) - { - dbgtext = "def_special(__FILE__)"; - buf = pp_xrealloc(buf, strlen(pp_status.input) + 3); - 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) -{ - if(len == 0) - return; - if(curdef_idx >= curdef_alloc || curdef_alloc - curdef_idx < len) - { - curdef_alloc += (len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1); - curdef_text = pp_xrealloc(curdef_text, curdef_alloc * sizeof(curdef_text[0])); - 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); - - 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) -{ - if(len == 0) - return; - if(strbuf_idx >= strbuf_alloc || strbuf_alloc - strbuf_idx < len) - { - strbuf_alloc += (len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1); - strbuffer = pp_xrealloc(strbuffer, strbuf_alloc * sizeof(strbuffer[0])); - 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); - 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].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; - bufferstack[bufferstackidx].pass_data = pass_data; - - 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 - { - pp_status.line_number = bufferstack[bufferstackidx].line_number; - pp_status.char_number = bufferstack[bufferstackidx].char_number; - pp_status.input = bufferstack[bufferstackidx].filename; - ncontinuations = bufferstack[bufferstackidx].ncontinuations; - if(!bufferstack[bufferstackidx].should_pop) - { - fclose(ppy_in); - fprintf(ppy_out, "# %d \"%s\" 2\n", pp_status.line_number, pp_status.input); - - /* 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) - { - includelogicentry_t *iep = pp_xmalloc(sizeof(includelogicentry_t)); - 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", pp_status.input, pp_status.line_number, pp_incl_state.ppp, iep->filename); - } - else - free(bufferstack[bufferstackidx].include_filename); - } - free(pp_incl_state.ppp); - pp_incl_state = bufferstack[bufferstackidx].incl; - pass_data = bufferstack[bufferstackidx].pass_data; - - } - } - - 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); - - 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"); - - macexpstack[macexpstackidx] = pp_xmalloc(sizeof(macexpstack[0][0])); - 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' */ - { - mep->curargalloc += (ALLOCBLOCKSIZE > len+1) ? ALLOCBLOCKSIZE : len+1; - mep->curarg = pp_xrealloc(mep->curarg, mep->curargalloc * sizeof(mep->curarg[0])); - } - 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; - macexpstackentry_t *mep = top_macro(); - - assert(mep->ppp->expanding == 0); - - mep->args = pp_xrealloc(mep->args, (mep->nargs+1) * sizeof(mep->args[0])); - mep->ppargs = pp_xrealloc(mep->ppargs, (mep->nargs+1) * sizeof(mep->ppargs[0])); - mep->nnls = pp_xrealloc(mep->nnls, (mep->nargs+1) * sizeof(mep->nnls[0])); - mep->args[mep->nargs] = pp_xstrdup(mep->curarg ? mep->curarg : ""); - 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]); -} - - -/* - *------------------------------------------------------------------------- - * Output management - *------------------------------------------------------------------------- - */ -static void put_buffer(const char *s, int len) -{ - if(top_macro()) - add_text_to_macro(s, len); - else { - if(pass_data) - fwrite(s, 1, len, ppy_out); - } -} - - -/* - *------------------------------------------------------------------------- - * Include management - *------------------------------------------------------------------------- - */ -static int is_c_h_include(char *fname, int quoted) -{ - int sl=strlen(fname); - if (sl < 2 + 2 * quoted) return 0; - if ((toupper(fname[sl-1-quoted])!='H') && (toupper(fname[sl-1-quoted])!='C')) return 0; - if (fname[sl-2-quoted]!='.') return 0; - return 1; -} - -void pp_do_include(char *fname, int type) -{ - char *newpath; - int n; - includelogicentry_t *iep; - - 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. - */ - return; - } - } - - n = strlen(fname); - - if(n <= 2) - ppy_error("Empty include filename"); - - /* Undo the effect of the quotation */ - fname[n-1] = '\0'; - - if((ppy_in = pp_open_include(fname+1, type ? pp_status.input : NULL, &newpath)) == NULL) - ppy_error("Unable to open include file %s", fname+1); - - 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 (is_c_h_include(newpath, 0)) pass_data=0; - else pass_data=1; - - if(pp_status.debug) - fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d ,pass_data=%d\n", - pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth, pass_data); - ppy__switch_to_buffer(ppy__create_buffer(ppy_in, YY_BUF_SIZE)); - - fprintf(ppy_out, "# 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(); -} diff --git a/reactos/tools/wpp/ppl.l b/reactos/tools/wpp/ppl.l deleted file mode 100644 index 58fda7bc30b..00000000000 --- a/reactos/tools/wpp/ppl.l +++ /dev/null @@ -1,1494 +0,0 @@ -/* -*-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. - * - */ - -/* - * Special flex options and exclusive scanner start-conditions - */ -%option stack -%option 8bit never-interactive -%option 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 "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 */ - 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 */ - const 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; - int pass_data; -} 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); -static int is_c_h_include(char *fname, int quoted); -/* 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; - -static int pass_data=1; - -/* - * Global variables - */ -include_state_t pp_incl_state = -{ - -1, /* state */ - NULL, /* ppp */ - 0, /* ifdepth */ - 0 /* seen_junk */ -}; - -includelogicentry_t *pp_includelogiclist = NULL; - -%} - -/* - ************************************************************************** - * 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); 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][^'"#/\\\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(); - if (is_c_h_include(ppy_lval.cptr, 1)) pass_data=0; - else pass_data=1; - 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 encounterd (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"); - - 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"); - 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]; - - 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"); - 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) - { - val->ull = strtoull(str, NULL, radix); - return tULONGLONG; - } - else - { - val->sll = strtoll(str, NULL, radix); - return tSLONGLONG; - } -#else - pp_internal_error(__FILE__, __LINE__, "long long constants not supported on this platform"); -#endif - } - else if(is_u && is_l) - { - val->ulong = strtoul(str, NULL, radix); - return tULONG; - } - else if(!is_u && is_l) - { - val->slong = strtol(str, NULL, radix); - return tSLONG; - } - else if(is_u && !is_l) - { - val->uint = (unsigned int)strtoul(str, NULL, radix); - return tUINT; - } - - /* Else it must be an int... */ - val->sint = (int)strtol(str, NULL, radix); - return tSINT; -} - - -/* - *------------------------------------------------------------------------- - * Macro and define expansion support - * - * FIXME: Variable macro arguments. - *------------------------------------------------------------------------- - */ -static void expand_special(pp_entry_t *ppp) -{ - const char *dbgtext = "?"; - static char *buf = NULL; - - assert(ppp->type == def_special); - - if(!strcmp(ppp->ident, "__LINE__")) - { - dbgtext = "def_special(__LINE__)"; - buf = pp_xrealloc(buf, 32); - sprintf(buf, "%d", pp_status.line_number); - } - else if(!strcmp(ppp->ident, "__FILE__")) - { - dbgtext = "def_special(__FILE__)"; - buf = pp_xrealloc(buf, strlen(pp_status.input) + 3); - 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) -{ - if(len == 0) - return; - if(curdef_idx >= curdef_alloc || curdef_alloc - curdef_idx < len) - { - curdef_alloc += (len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1); - curdef_text = pp_xrealloc(curdef_text, curdef_alloc * sizeof(curdef_text[0])); - 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); - - 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) -{ - if(len == 0) - return; - if(strbuf_idx >= strbuf_alloc || strbuf_alloc - strbuf_idx < len) - { - strbuf_alloc += (len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1); - strbuffer = pp_xrealloc(strbuffer, strbuf_alloc * sizeof(strbuffer[0])); - 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); - 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].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; - bufferstack[bufferstackidx].pass_data = pass_data; - - 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 - { - pp_status.line_number = bufferstack[bufferstackidx].line_number; - pp_status.char_number = bufferstack[bufferstackidx].char_number; - pp_status.input = bufferstack[bufferstackidx].filename; - ncontinuations = bufferstack[bufferstackidx].ncontinuations; - if(!bufferstack[bufferstackidx].should_pop) - { - fclose(ppy_in); - fprintf(ppy_out, "# %d \"%s\" 2\n", pp_status.line_number, pp_status.input); - - /* 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) - { - includelogicentry_t *iep = pp_xmalloc(sizeof(includelogicentry_t)); - 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", pp_status.input, pp_status.line_number, pp_incl_state.ppp, iep->filename); - } - else - free(bufferstack[bufferstackidx].include_filename); - } - free(pp_incl_state.ppp); - pp_incl_state = bufferstack[bufferstackidx].incl; - pass_data = bufferstack[bufferstackidx].pass_data; - - } - } - - 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); - - 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"); - - macexpstack[macexpstackidx] = pp_xmalloc(sizeof(macexpstack[0][0])); - 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' */ - { - mep->curargalloc += (ALLOCBLOCKSIZE > len+1) ? ALLOCBLOCKSIZE : len+1; - mep->curarg = pp_xrealloc(mep->curarg, mep->curargalloc * sizeof(mep->curarg[0])); - } - 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; - macexpstackentry_t *mep = top_macro(); - - assert(mep->ppp->expanding == 0); - - mep->args = pp_xrealloc(mep->args, (mep->nargs+1) * sizeof(mep->args[0])); - mep->ppargs = pp_xrealloc(mep->ppargs, (mep->nargs+1) * sizeof(mep->ppargs[0])); - mep->nnls = pp_xrealloc(mep->nnls, (mep->nargs+1) * sizeof(mep->nnls[0])); - mep->args[mep->nargs] = pp_xstrdup(mep->curarg ? mep->curarg : ""); - 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]); -} - - -/* - *------------------------------------------------------------------------- - * Output management - *------------------------------------------------------------------------- - */ -static void put_buffer(const char *s, int len) -{ - if(top_macro()) - add_text_to_macro(s, len); - else { - if(pass_data) - fwrite(s, 1, len, ppy_out); - } -} - - -/* - *------------------------------------------------------------------------- - * Include management - *------------------------------------------------------------------------- - */ -static int is_c_h_include(char *fname, int quoted) -{ - int sl=strlen(fname); - if (sl < 2 + 2 * quoted) return 0; - if ((toupper(fname[sl-1-quoted])!='H') && (toupper(fname[sl-1-quoted])!='C')) return 0; - if (fname[sl-2-quoted]!='.') return 0; - return 1; -} - -void pp_do_include(char *fname, int type) -{ - char *newpath; - int n; - includelogicentry_t *iep; - - 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. - */ - return; - } - } - - n = strlen(fname); - - if(n <= 2) - ppy_error("Empty include filename"); - - /* Undo the effect of the quotation */ - fname[n-1] = '\0'; - - if((ppy_in = pp_open_include(fname+1, type ? pp_status.input : NULL, &newpath)) == NULL) - ppy_error("Unable to open include file %s", fname+1); - - 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 (is_c_h_include(newpath, 0)) pass_data=0; - else pass_data=1; - - if(pp_status.debug) - fprintf(stderr, "pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d ,pass_data=%d\n", - pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth, pass_data); - ppy__switch_to_buffer(ppy__create_buffer(ppy_in, YY_BUF_SIZE)); - - fprintf(ppy_out, "# 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(); -} diff --git a/reactos/tools/wpp/ppy.tab.c b/reactos/tools/wpp/ppy.tab.c deleted file mode 100644 index fab635acf3c..00000000000 --- a/reactos/tools/wpp/ppy.tab.c +++ /dev/null @@ -1,2497 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.1. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Written by Richard Stallman by simplifying the original so called - ``semantic'' parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.1" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* Substitute the variable and function names. */ -#define yyparse ppy_parse -#define yylex ppy_lex -#define yyerror ppy_error -#define yylval ppy_lval -#define yychar ppy_char -#define yydebug ppy_debug -#define yynerrs ppy_nerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - tRCINCLUDE = 258, - tIF = 259, - tIFDEF = 260, - tIFNDEF = 261, - tELSE = 262, - tELIF = 263, - tENDIF = 264, - tDEFINED = 265, - tNL = 266, - tINCLUDE = 267, - tLINE = 268, - tGCCLINE = 269, - tERROR = 270, - tWARNING = 271, - tPRAGMA = 272, - tPPIDENT = 273, - tUNDEF = 274, - tMACROEND = 275, - tCONCAT = 276, - tELIPSIS = 277, - tSTRINGIZE = 278, - tIDENT = 279, - tLITERAL = 280, - tMACRO = 281, - tDEFINE = 282, - tDQSTRING = 283, - tSQSTRING = 284, - tIQSTRING = 285, - tUINT = 286, - tSINT = 287, - tULONG = 288, - tSLONG = 289, - tULONGLONG = 290, - tSLONGLONG = 291, - tRCINCLUDEPATH = 292, - tLOGOR = 293, - tLOGAND = 294, - tNE = 295, - tEQ = 296, - tGTE = 297, - tLTE = 298, - tRSHIFT = 299, - tLSHIFT = 300 - }; -#endif -/* Tokens. */ -#define tRCINCLUDE 258 -#define tIF 259 -#define tIFDEF 260 -#define tIFNDEF 261 -#define tELSE 262 -#define tELIF 263 -#define tENDIF 264 -#define tDEFINED 265 -#define tNL 266 -#define tINCLUDE 267 -#define tLINE 268 -#define tGCCLINE 269 -#define tERROR 270 -#define tWARNING 271 -#define tPRAGMA 272 -#define tPPIDENT 273 -#define tUNDEF 274 -#define tMACROEND 275 -#define tCONCAT 276 -#define tELIPSIS 277 -#define tSTRINGIZE 278 -#define tIDENT 279 -#define tLITERAL 280 -#define tMACRO 281 -#define tDEFINE 282 -#define tDQSTRING 283 -#define tSQSTRING 284 -#define tIQSTRING 285 -#define tUINT 286 -#define tSINT 287 -#define tULONG 288 -#define tSLONG 289 -#define tULONGLONG 290 -#define tSLONGLONG 291 -#define tRCINCLUDEPATH 292 -#define tLOGOR 293 -#define tLOGAND 294 -#define tNE 295 -#define tEQ 296 -#define tGTE 297 -#define tLTE 298 -#define tRSHIFT 299 -#define tLSHIFT 300 - - - - -/* Copy the first part of user declarations. */ -#line 30 "tools\\wpp_new\\ppy.y" - -#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 v2.val.ui; \ - else if(!cv_signed(v1) && cv_signed(v2)) \ - r.val.ui = 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 v2.val.ul; \ - else if(!cv_signed(v1) && cv_signed(v2)) \ - r.val.ul = 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 v2.val.ull; \ - else if(!cv_signed(v1) && cv_signed(v2)) \ - r.val.ull = 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; - - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 126 "tools\\wpp_new\\ppy.y" -typedef union YYSTYPE { - 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; -} YYSTYPE; -/* Line 196 of yacc.c. */ -#line 293 "tools\\wpp_new\\ppy.tab.c" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - - -/* Line 219 of yacc.c. */ -#line 305 "tools\\wpp_new\\ppy.tab.c" - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus)) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#ifndef YY_ -# if YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) -# endif -# endif -# ifndef YY_ -# define YY_(msgid) msgid -# endif -#endif - -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# else -# define YYSTACK_ALLOC alloca -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYINCLUDED_STDLIB_H -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1) -# endif -# ifdef __cplusplus -extern "C" { -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifdef __cplusplus -} -# endif -# endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short int yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined (__GNUC__) && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short int yysigned_char; -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 2 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 303 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 62 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 13 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 84 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 153 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 300 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = -{ - 0, 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, 58, 2, 2, 2, 2, 44, 2, - 60, 61, 55, 53, 59, 54, 2, 56, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 39, 2, - 47, 2, 48, 38, 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, 43, 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, 42, 2, 57, 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, 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, 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, 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, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 40, 41, 45, 46, 49, 50, 51, - 52 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned short int yyprhs[] = -{ - 0, 0, 3, 4, 7, 11, 15, 19, 23, 27, - 31, 34, 37, 41, 45, 52, 57, 62, 68, 75, - 83, 92, 95, 99, 103, 107, 111, 114, 117, 118, - 120, 122, 124, 126, 129, 132, 135, 136, 137, 139, - 141, 145, 149, 151, 152, 154, 156, 159, 161, 163, - 165, 167, 170, 172, 174, 176, 178, 180, 182, 184, - 187, 192, 194, 198, 202, 206, 210, 214, 218, 222, - 226, 230, 234, 238, 242, 246, 250, 254, 258, 262, - 265, 268, 271, 274, 278 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yysigned_char yyrhs[] = -{ - 63, 0, -1, -1, 63, 64, -1, 12, 28, 11, - -1, 12, 30, 11, -1, 4, 74, 11, -1, 5, - 24, 11, -1, 6, 24, 11, -1, 8, 74, 11, - -1, 7, 11, -1, 9, 11, -1, 19, 24, 11, - -1, 27, 65, 11, -1, 26, 67, 68, 20, 71, - 11, -1, 13, 32, 28, 11, -1, 14, 32, 28, - 11, -1, 14, 32, 28, 32, 11, -1, 14, 32, - 28, 32, 32, 11, -1, 14, 32, 28, 32, 32, - 32, 11, -1, 14, 32, 28, 32, 32, 32, 32, - 11, -1, 14, 11, -1, 15, 65, 11, -1, 16, - 65, 11, -1, 17, 65, 11, -1, 18, 65, 11, - -1, 3, 37, -1, 3, 28, -1, -1, 66, -1, - 25, -1, 28, -1, 29, -1, 66, 25, -1, 66, - 28, -1, 66, 29, -1, -1, -1, 69, -1, 70, - -1, 70, 59, 22, -1, 70, 59, 24, -1, 24, - -1, -1, 72, -1, 73, -1, 72, 73, -1, 25, - -1, 28, -1, 29, -1, 21, -1, 23, 24, -1, - 24, -1, 32, -1, 31, -1, 34, -1, 33, -1, - 36, -1, 35, -1, 10, 24, -1, 10, 60, 24, - 61, -1, 24, -1, 74, 40, 74, -1, 74, 41, - 74, -1, 74, 46, 74, -1, 74, 45, 74, -1, - 74, 47, 74, -1, 74, 48, 74, -1, 74, 50, - 74, -1, 74, 49, 74, -1, 74, 53, 74, -1, - 74, 54, 74, -1, 74, 43, 74, -1, 74, 44, - 74, -1, 74, 42, 74, -1, 74, 55, 74, -1, - 74, 56, 74, -1, 74, 52, 74, -1, 74, 51, - 74, -1, 53, 74, -1, 54, 74, -1, 57, 74, - -1, 58, 74, -1, 60, 74, 61, -1, 74, 38, - 74, 39, 74, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short int yyrline[] = -{ - 0, 181, 181, 182, 186, 187, 188, 189, 190, 210, - 231, 254, 269, 270, 271, 274, 275, 276, 278, 280, - 282, 284, 285, 286, 287, 288, 289, 296, 302, 303, - 306, 307, 308, 309, 310, 311, 314, 317, 318, 321, - 322, 325, 326, 330, 331, 337, 338, 341, 342, 343, - 344, 345, 351, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, 391 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "tRCINCLUDE", "tIF", "tIFDEF", "tIFNDEF", - "tELSE", "tELIF", "tENDIF", "tDEFINED", "tNL", "tINCLUDE", "tLINE", - "tGCCLINE", "tERROR", "tWARNING", "tPRAGMA", "tPPIDENT", "tUNDEF", - "tMACROEND", "tCONCAT", "tELIPSIS", "tSTRINGIZE", "tIDENT", "tLITERAL", - "tMACRO", "tDEFINE", "tDQSTRING", "tSQSTRING", "tIQSTRING", "tUINT", - "tSINT", "tULONG", "tSLONG", "tULONGLONG", "tSLONGLONG", - "tRCINCLUDEPATH", "'?'", "':'", "tLOGOR", "tLOGAND", "'|'", "'^'", "'&'", - "tNE", "tEQ", "'<'", "'>'", "tGTE", "tLTE", "tRSHIFT", "tLSHIFT", "'+'", - "'-'", "'*'", "'/'", "'~'", "'!'", "','", "'('", "')'", "$accept", - "pp_file", "preprocessor", "opt_text", "text", "res_arg", "allmargs", - "emargs", "margs", "opt_mtexts", "mtexts", "mtext", "pp_expr", 0 -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short int yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 63, 58, - 293, 294, 124, 94, 38, 295, 296, 60, 62, 297, - 298, 299, 300, 43, 45, 42, 47, 126, 33, 44, - 40, 41 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 62, 63, 63, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, - 66, 66, 66, 66, 66, 66, 67, 68, 68, 69, - 69, 70, 70, 71, 71, 72, 72, 73, 73, 73, - 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = -{ - 0, 2, 0, 2, 3, 3, 3, 3, 3, 3, - 2, 2, 3, 3, 6, 4, 4, 5, 6, 7, - 8, 2, 3, 3, 3, 3, 2, 2, 0, 1, - 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, - 3, 3, 1, 0, 1, 1, 2, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, - 4, 1, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 2, 2, 3, 5 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const unsigned char yydefact[] = -{ - 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 28, 28, 28, 0, 36, 28, - 3, 27, 26, 0, 61, 54, 53, 56, 55, 58, - 57, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 11, 0, 0, 0, 21, 0, 30, 31, 32, - 0, 29, 0, 0, 0, 0, 37, 0, 59, 0, - 79, 80, 81, 82, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 8, 9, 4, 5, 0, - 0, 22, 33, 34, 35, 23, 24, 25, 12, 42, - 0, 38, 39, 13, 0, 83, 0, 62, 63, 74, - 72, 73, 65, 64, 66, 67, 69, 68, 78, 77, - 70, 71, 75, 76, 15, 16, 0, 43, 0, 60, - 0, 17, 0, 50, 0, 52, 47, 48, 49, 0, - 44, 45, 40, 41, 84, 18, 0, 51, 14, 46, - 19, 0, 20 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const short int yydefgoto[] = -{ - -1, 1, 20, 50, 51, 56, 100, 101, 102, 139, - 140, 141, 36 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -27 -static const short int yypact[] = -{ - -27, 142, -27, -26, -3, -12, -2, 30, -3, 41, - 91, 21, 2, -19, -19, -19, -19, 32, -27, -19, - -27, -27, -27, -23, -27, -27, -27, -27, -27, -27, - -27, -3, -3, -3, -3, -3, 38, 66, 109, -27, - 85, -27, 113, 133, 115, -27, 124, -27, -27, -27, - 179, -9, 278, 280, 281, 282, 129, 283, -27, 271, - -10, -10, -27, -27, 57, -27, -3, -3, -3, -3, - -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, - -3, -3, -3, -3, -27, -27, -27, -27, -27, 285, - 3, -27, -27, -27, -27, -27, -27, -27, -27, -27, - 277, -27, 239, -27, 238, -27, 132, 167, 182, 196, - 209, 221, 231, 231, 111, 111, 111, 111, 61, 61, - -10, -10, -27, -27, -27, -27, 4, 19, 266, -27, - -3, -27, 6, -27, 276, -27, -27, -27, -27, 290, - 19, -27, -27, -27, 151, -27, 7, -27, -27, -27, - -27, 291, -27 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const short int yypgoto[] = -{ - -27, -27, -27, -11, -27, -27, -27, -27, -27, -27, - -27, 163, -8 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -1 -static const unsigned char yytable[] = -{ - 40, 58, 21, 52, 53, 54, 47, 23, 57, 48, - 49, 22, 37, 45, 125, 131, 92, 145, 150, 93, - 94, 24, 38, 60, 61, 62, 63, 64, 25, 26, - 27, 28, 29, 30, 46, 126, 132, 59, 146, 151, - 133, 39, 134, 135, 136, 82, 83, 137, 138, 65, - 31, 32, 41, 44, 33, 34, 55, 35, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 66, 84, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 66, 86, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 80, 81, 82, 83, 105, 42, - 85, 43, 144, 66, 87, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 2, 89, 88, 3, 4, 5, 6, 7, - 8, 9, 90, 99, 10, 11, 12, 13, 14, 15, - 16, 17, 78, 79, 80, 81, 82, 83, 18, 19, - 66, 130, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 66, - 91, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 142, 95, - 143, 96, 97, 98, 103, 104, 124, 127, 128, 129, - 147, 148, 152, 149 -}; - -static const unsigned char yycheck[] = -{ - 8, 24, 28, 14, 15, 16, 25, 10, 19, 28, - 29, 37, 24, 11, 11, 11, 25, 11, 11, 28, - 29, 24, 24, 31, 32, 33, 34, 35, 31, 32, - 33, 34, 35, 36, 32, 32, 32, 60, 32, 32, - 21, 11, 23, 24, 25, 55, 56, 28, 29, 11, - 53, 54, 11, 32, 57, 58, 24, 60, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 38, 11, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 38, 11, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 53, 54, 55, 56, 61, 28, - 11, 30, 130, 38, 11, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 0, 28, 11, 3, 4, 5, 6, 7, - 8, 9, 28, 24, 12, 13, 14, 15, 16, 17, - 18, 19, 51, 52, 53, 54, 55, 56, 26, 27, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 38, - 11, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 22, 11, - 24, 11, 11, 11, 11, 24, 11, 20, 59, 61, - 24, 11, 11, 140 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 63, 0, 3, 4, 5, 6, 7, 8, 9, - 12, 13, 14, 15, 16, 17, 18, 19, 26, 27, - 64, 28, 37, 10, 24, 31, 32, 33, 34, 35, - 36, 53, 54, 57, 58, 60, 74, 24, 24, 11, - 74, 11, 28, 30, 32, 11, 32, 25, 28, 29, - 65, 66, 65, 65, 65, 24, 67, 65, 24, 60, - 74, 74, 74, 74, 74, 11, 38, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 11, 11, 11, 11, 11, 28, - 28, 11, 25, 28, 29, 11, 11, 11, 11, 24, - 68, 69, 70, 11, 24, 61, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 11, 11, 32, 20, 59, 61, - 39, 11, 32, 21, 23, 24, 25, 28, 29, 71, - 72, 73, 22, 24, 74, 11, 32, 24, 11, 73, - 11, 32, 11 -}; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ - -#define YYFAIL goto yyerrlab - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) - - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short int *bottom, short int *top) -#else -static void -yy_stack_print (bottom, top) - short int *bottom; - short int *top; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; -#endif -{ - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ", - yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]); -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - size_t yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -#endif /* YYERROR_VERBOSE */ - - - -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else -static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); -} - -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - -/* The look-ahead symbol. */ -int yychar; - -/* The semantic value of the look-ahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) -#else -int -yyparse () - ; -#endif -#endif -{ - - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short int yyssa[YYINITDEPTH]; - short int *yyss = yyssa; - short int *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - -#define YYPOPSTACK (yyvsp--, yyssp--) - - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; - - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short int *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - short int *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a look-ahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to look-ahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) - goto yydefault; - - /* Not known => get a look-ahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the look-ahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; - - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - yystate = yyn; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 4: -#line 186 "tools\\wpp_new\\ppy.y" - { pp_do_include((yyvsp[-1].cptr), 1); ;} - break; - - case 5: -#line 187 "tools\\wpp_new\\ppy.y" - { pp_do_include((yyvsp[-1].cptr), 0); ;} - break; - - case 6: -#line 188 "tools\\wpp_new\\ppy.y" - { pp_next_if_state(boolean(&(yyvsp[-1].cval))); ;} - break; - - case 7: -#line 189 "tools\\wpp_new\\ppy.y" - { pp_next_if_state(pplookup((yyvsp[-1].cptr)) != NULL); free((yyvsp[-1].cptr)); ;} - break; - - case 8: -#line 190 "tools\\wpp_new\\ppy.y" - { - int t = pplookup((yyvsp[-1].cptr)) == NULL; - if(pp_incl_state.state == 0 && t && !pp_incl_state.seen_junk) - { - pp_incl_state.state = 1; - pp_incl_state.ppp = (yyvsp[-1].cptr); - pp_incl_state.ifdepth = pp_get_if_depth(); - } - else if(pp_incl_state.state != 1) - { - pp_incl_state.state = -1; - free((yyvsp[-1].cptr)); - } - else - free((yyvsp[-1].cptr)); - 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); - ;} - break; - - case 9: -#line 210 "tools\\wpp_new\\ppy.y" - { - 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(&(yyvsp[-1].cval)) ? 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"); - default: - pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #elif directive", s); - } - ;} - break; - - case 10: -#line 231 "tools\\wpp_new\\ppy.y" - { - 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"); - default: - pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #else directive", s); - } - ;} - break; - - case 11: -#line 254 "tools\\wpp_new\\ppy.y" - { - pp_pop_if(); - 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); - ;} - break; - - case 12: -#line 269 "tools\\wpp_new\\ppy.y" - { pp_del_define((yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;} - break; - - case 13: -#line 270 "tools\\wpp_new\\ppy.y" - { pp_add_define((yyvsp[-2].cptr), (yyvsp[-1].cptr)); ;} - break; - - case 14: -#line 271 "tools\\wpp_new\\ppy.y" - { - pp_add_macro((yyvsp[-5].cptr), macro_args, nmacro_args, (yyvsp[-1].mtext)); - ;} - break; - - case 15: -#line 274 "tools\\wpp_new\\ppy.y" - { fprintf(ppy_out, "# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;} - break; - - case 16: -#line 275 "tools\\wpp_new\\ppy.y" - { fprintf(ppy_out, "# %d %s\n", (yyvsp[-2].sint) , (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); ;} - break; - - case 17: -#line 277 "tools\\wpp_new\\ppy.y" - { fprintf(ppy_out, "# %d %s %d\n", (yyvsp[-3].sint), (yyvsp[-2].cptr), (yyvsp[-1].sint)); free((yyvsp[-2].cptr)); ;} - break; - - case 18: -#line 279 "tools\\wpp_new\\ppy.y" - { fprintf(ppy_out, "# %d %s %d %d\n", (yyvsp[-4].sint) ,(yyvsp[-3].cptr), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-3].cptr)); ;} - break; - - case 19: -#line 281 "tools\\wpp_new\\ppy.y" - { fprintf(ppy_out, "# %d %s %d %d %d\n", (yyvsp[-5].sint) ,(yyvsp[-4].cptr) ,(yyvsp[-3].sint) ,(yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-4].cptr)); ;} - break; - - case 20: -#line 283 "tools\\wpp_new\\ppy.y" - { fprintf(ppy_out, "# %d %s %d %d %d %d\n", (yyvsp[-6].sint) ,(yyvsp[-5].cptr) ,(yyvsp[-4].sint) ,(yyvsp[-3].sint), (yyvsp[-2].sint), (yyvsp[-1].sint)); free((yyvsp[-5].cptr)); ;} - break; - - case 22: -#line 285 "tools\\wpp_new\\ppy.y" - { ppy_error("#error directive: '%s'", (yyvsp[-1].cptr)); if((yyvsp[-1].cptr)) free((yyvsp[-1].cptr)); ;} - break; - - case 23: -#line 286 "tools\\wpp_new\\ppy.y" - { ppy_warning("#warning directive: '%s'", (yyvsp[-1].cptr)); if((yyvsp[-1].cptr)) free((yyvsp[-1].cptr)); ;} - break; - - case 24: -#line 287 "tools\\wpp_new\\ppy.y" - { fprintf(ppy_out, "#pragma %s\n", (yyvsp[-1].cptr) ? (yyvsp[-1].cptr) : ""); if ((yyvsp[-1].cptr)) free((yyvsp[-1].cptr)); ;} - break; - - case 25: -#line 288 "tools\\wpp_new\\ppy.y" - { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", (yyvsp[-1].cptr)); if((yyvsp[-1].cptr)) free((yyvsp[-1].cptr)); ;} - break; - - case 26: -#line 289 "tools\\wpp_new\\ppy.y" - { - int nl=strlen((yyvsp[0].cptr)) +3; - char *fn=pp_xmalloc(nl); - sprintf(fn,"\"%s\"",(yyvsp[0].cptr)); - free((yyvsp[0].cptr)); - pp_do_include(fn,1); - ;} - break; - - case 27: -#line 296 "tools\\wpp_new\\ppy.y" - { - pp_do_include((yyvsp[0].cptr),1); - ;} - break; - - case 28: -#line 302 "tools\\wpp_new\\ppy.y" - { (yyval.cptr) = NULL; ;} - break; - - case 29: -#line 303 "tools\\wpp_new\\ppy.y" - { (yyval.cptr) = (yyvsp[0].cptr); ;} - break; - - case 30: -#line 306 "tools\\wpp_new\\ppy.y" - { (yyval.cptr) = (yyvsp[0].cptr); ;} - break; - - case 31: -#line 307 "tools\\wpp_new\\ppy.y" - { (yyval.cptr) = (yyvsp[0].cptr); ;} - break; - - case 32: -#line 308 "tools\\wpp_new\\ppy.y" - { (yyval.cptr) = (yyvsp[0].cptr); ;} - break; - - case 33: -#line 309 "tools\\wpp_new\\ppy.y" - { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); ;} - break; - - case 34: -#line 310 "tools\\wpp_new\\ppy.y" - { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); ;} - break; - - case 35: -#line 311 "tools\\wpp_new\\ppy.y" - { (yyval.cptr) = merge_text((yyvsp[-1].cptr), (yyvsp[0].cptr)); ;} - break; - - case 36: -#line 314 "tools\\wpp_new\\ppy.y" - { macro_args = NULL; nmacro_args = 0; ;} - break; - - case 37: -#line 317 "tools\\wpp_new\\ppy.y" - { (yyval.sint) = 0; macro_args = NULL; nmacro_args = 0; ;} - break; - - case 38: -#line 318 "tools\\wpp_new\\ppy.y" - { (yyval.sint) = nmacro_args; ;} - break; - - case 39: -#line 321 "tools\\wpp_new\\ppy.y" - { (yyval.marg) = (yyvsp[0].marg); ;} - break; - - case 40: -#line 322 "tools\\wpp_new\\ppy.y" - { (yyval.marg) = add_new_marg(NULL, arg_list); nmacro_args *= -1; ;} - break; - - case 41: -#line 325 "tools\\wpp_new\\ppy.y" - { (yyval.marg) = add_new_marg((yyvsp[0].cptr), arg_single); ;} - break; - - case 42: -#line 326 "tools\\wpp_new\\ppy.y" - { (yyval.marg) = add_new_marg((yyvsp[0].cptr), arg_single); ;} - break; - - case 43: -#line 330 "tools\\wpp_new\\ppy.y" - { (yyval.mtext) = NULL; ;} - break; - - case 44: -#line 331 "tools\\wpp_new\\ppy.y" - { - for((yyval.mtext) = (yyvsp[0].mtext); (yyval.mtext) && (yyval.mtext)->prev; (yyval.mtext) = (yyval.mtext)->prev) - ; - ;} - break; - - case 45: -#line 337 "tools\\wpp_new\\ppy.y" - { (yyval.mtext) = (yyvsp[0].mtext); ;} - break; - - case 46: -#line 338 "tools\\wpp_new\\ppy.y" - { (yyval.mtext) = combine_mtext((yyvsp[-1].mtext), (yyvsp[0].mtext)); ;} - break; - - case 47: -#line 341 "tools\\wpp_new\\ppy.y" - { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); ;} - break; - - case 48: -#line 342 "tools\\wpp_new\\ppy.y" - { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); ;} - break; - - case 49: -#line 343 "tools\\wpp_new\\ppy.y" - { (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); ;} - break; - - case 50: -#line 344 "tools\\wpp_new\\ppy.y" - { (yyval.mtext) = new_mtext(NULL, 0, exp_concat); ;} - break; - - case 51: -#line 345 "tools\\wpp_new\\ppy.y" - { - int mat = marg_index((yyvsp[0].cptr)); - if(mat < 0) - ppy_error("Stringification identifier must be an argument parameter"); - (yyval.mtext) = new_mtext(NULL, mat, exp_stringize); - ;} - break; - - case 52: -#line 351 "tools\\wpp_new\\ppy.y" - { - int mat = marg_index((yyvsp[0].cptr)); - if(mat >= 0) - (yyval.mtext) = new_mtext(NULL, mat, exp_subst); - else - (yyval.mtext) = new_mtext((yyvsp[0].cptr), 0, exp_text); - ;} - break; - - case 53: -#line 360 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_sint; (yyval.cval).val.si = (yyvsp[0].sint); ;} - break; - - case 54: -#line 361 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_uint; (yyval.cval).val.ui = (yyvsp[0].uint); ;} - break; - - case 55: -#line 362 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_slong; (yyval.cval).val.sl = (yyvsp[0].slong); ;} - break; - - case 56: -#line 363 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_ulong; (yyval.cval).val.ul = (yyvsp[0].ulong); ;} - break; - - case 57: -#line 364 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_sll; (yyval.cval).val.sll = (yyvsp[0].sll); ;} - break; - - case 58: -#line 365 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_ull; (yyval.cval).val.ull = (yyvsp[0].ull); ;} - break; - - case 59: -#line 366 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_sint; (yyval.cval).val.si = pplookup((yyvsp[0].cptr)) != NULL; ;} - break; - - case 60: -#line 367 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_sint; (yyval.cval).val.si = pplookup((yyvsp[-1].cptr)) != NULL; ;} - break; - - case 61: -#line 368 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_sint; (yyval.cval).val.si = 0; ;} - break; - - case 62: -#line 369 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) || boolean(&(yyvsp[0].cval)); ;} - break; - - case 63: -#line 370 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[-2].cval)) && boolean(&(yyvsp[0].cval)); ;} - break; - - case 64: -#line 371 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), ==) ;} - break; - - case 65: -#line 372 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), !=) ;} - break; - - case 66: -#line 373 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <) ;} - break; - - case 67: -#line 374 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >) ;} - break; - - case 68: -#line 375 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <=) ;} - break; - - case 69: -#line 376 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >=) ;} - break; - - case 70: -#line 377 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), +) ;} - break; - - case 71: -#line 378 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), -) ;} - break; - - case 72: -#line 379 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), ^) ;} - break; - - case 73: -#line 380 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), &) ;} - break; - - case 74: -#line 381 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), |) ;} - break; - - case 75: -#line 382 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), *) ;} - break; - - case 76: -#line 383 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), /) ;} - break; - - case 77: -#line 384 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), <<) ;} - break; - - case 78: -#line 385 "tools\\wpp_new\\ppy.y" - { promote_equal_size(&(yyvsp[-2].cval), &(yyvsp[0].cval)); BIN_OP((yyval.cval), (yyvsp[-2].cval), (yyvsp[0].cval), >>) ;} - break; - - case 79: -#line 386 "tools\\wpp_new\\ppy.y" - { (yyval.cval) = (yyvsp[0].cval); ;} - break; - - case 80: -#line 387 "tools\\wpp_new\\ppy.y" - { UNARY_OP((yyval.cval), (yyvsp[0].cval), -) ;} - break; - - case 81: -#line 388 "tools\\wpp_new\\ppy.y" - { UNARY_OP((yyval.cval), (yyvsp[0].cval), ~) ;} - break; - - case 82: -#line 389 "tools\\wpp_new\\ppy.y" - { (yyval.cval).type = cv_sint; (yyval.cval).val.si = !boolean(&(yyvsp[0].cval)); ;} - break; - - case 83: -#line 390 "tools\\wpp_new\\ppy.y" - { (yyval.cval) = (yyvsp[-1].cval); ;} - break; - - case 84: -#line 391 "tools\\wpp_new\\ppy.y" - { (yyval.cval) = boolean(&(yyvsp[-4].cval)) ? (yyvsp[-2].cval) : (yyvsp[0].cval); ;} - break; - - - default: break; - } - -/* Line 1126 of yacc.c. */ -#line 1964 "tools\\wpp_new\\ppy.tab.c" - - yyvsp -= yylen; - yyssp -= yylen; - - - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - char *yymsg = 0; -# define YYERROR_VERBOSE_ARGS_MAXIMUM 5 - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; - -#if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -#endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= yysize1 < yysize; - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } - - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= yysize1 < yysize; - yysize = yysize1; - - if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM) - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yymsg; - int yyi = 0; - while ((*yyp = *yyf)) - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - { - yyerror (YY_("syntax error")); - goto yyexhaustedlab; - } - } - else -#endif /* YYERROR_VERBOSE */ - yyerror (YY_("syntax error")); - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse look-ahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse look-ahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (0) - goto yyerrorlab; - -yyvsp -= yylen; - yyssp -= yylen; - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", yystos[yystate], yyvsp); - YYPOPSTACK; - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - if (yyn == YYFINAL) - YYACCEPT; - - *++yyvsp = yylval; - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK; - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - return yyresult; -} - - -#line 394 "tools\\wpp_new\\ppy.y" - - -/* - ************************************************************************** - * 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)); - 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 *ma = new_marg(str, type); - nmacro_args++; - macro_args = pp_xrealloc(macro_args, nmacro_args * sizeof(macro_args[0])); - macro_args[nmacro_args-1] = ma; - return ma; -} - -static int marg_index(char *id) -{ - int t; - 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(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) - { - tail->subst.text = pp_xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1); - 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 = strlen(s1); - int l2 = strlen(s2); - s1 = pp_xrealloc(s1, l1+l2+1); - memcpy(s1+l1, s2, l2+1); - free(s2); - return s1; -} - diff --git a/reactos/tools/wpp/ppy.tab.h b/reactos/tools/wpp/ppy.tab.h deleted file mode 100644 index d152cc64534..00000000000 --- a/reactos/tools/wpp/ppy.tab.h +++ /dev/null @@ -1,150 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.1. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - tRCINCLUDE = 258, - tIF = 259, - tIFDEF = 260, - tIFNDEF = 261, - tELSE = 262, - tELIF = 263, - tENDIF = 264, - tDEFINED = 265, - tNL = 266, - tINCLUDE = 267, - tLINE = 268, - tGCCLINE = 269, - tERROR = 270, - tWARNING = 271, - tPRAGMA = 272, - tPPIDENT = 273, - tUNDEF = 274, - tMACROEND = 275, - tCONCAT = 276, - tELIPSIS = 277, - tSTRINGIZE = 278, - tIDENT = 279, - tLITERAL = 280, - tMACRO = 281, - tDEFINE = 282, - tDQSTRING = 283, - tSQSTRING = 284, - tIQSTRING = 285, - tUINT = 286, - tSINT = 287, - tULONG = 288, - tSLONG = 289, - tULONGLONG = 290, - tSLONGLONG = 291, - tRCINCLUDEPATH = 292, - tLOGOR = 293, - tLOGAND = 294, - tNE = 295, - tEQ = 296, - tGTE = 297, - tLTE = 298, - tRSHIFT = 299, - tLSHIFT = 300 - }; -#endif -/* Tokens. */ -#define tRCINCLUDE 258 -#define tIF 259 -#define tIFDEF 260 -#define tIFNDEF 261 -#define tELSE 262 -#define tELIF 263 -#define tENDIF 264 -#define tDEFINED 265 -#define tNL 266 -#define tINCLUDE 267 -#define tLINE 268 -#define tGCCLINE 269 -#define tERROR 270 -#define tWARNING 271 -#define tPRAGMA 272 -#define tPPIDENT 273 -#define tUNDEF 274 -#define tMACROEND 275 -#define tCONCAT 276 -#define tELIPSIS 277 -#define tSTRINGIZE 278 -#define tIDENT 279 -#define tLITERAL 280 -#define tMACRO 281 -#define tDEFINE 282 -#define tDQSTRING 283 -#define tSQSTRING 284 -#define tIQSTRING 285 -#define tUINT 286 -#define tSINT 287 -#define tULONG 288 -#define tSLONG 289 -#define tULONGLONG 290 -#define tSLONGLONG 291 -#define tRCINCLUDEPATH 292 -#define tLOGOR 293 -#define tLOGAND 294 -#define tNE 295 -#define tEQ 296 -#define tGTE 297 -#define tLTE 298 -#define tRSHIFT 299 -#define tLSHIFT 300 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 126 "tools\\wpp_new\\ppy.y" -typedef union YYSTYPE { - 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; -} YYSTYPE; -/* Line 1447 of yacc.c. */ -#line 142 "tools\\wpp_new\\ppy.tab.h" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -extern YYSTYPE ppy_lval; - - - diff --git a/reactos/tools/wpp/ppy.y b/reactos/tools/wpp/ppy.y deleted file mode 100644 index 3209ee2cc36..00000000000 --- a/reactos/tools/wpp/ppy.y +++ /dev/null @@ -1,658 +0,0 @@ -/* - * 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 v2.val.ui; \ - else if(!cv_signed(v1) && cv_signed(v2)) \ - r.val.ui = 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 v2.val.ul; \ - else if(!cv_signed(v1) && cv_signed(v2)) \ - r.val.ul = 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 v2.val.ull; \ - else if(!cv_signed(v1) && cv_signed(v2)) \ - r.val.ull = 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"); - 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"); - default: - pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #else directive", s); - } - } - | tENDIF tNL { - pp_pop_if(); - 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); } - | tMACRO res_arg allmargs tMACROEND opt_mtexts tNL { - pp_add_macro($1, macro_args, nmacro_args, $5); - } - | tLINE tSINT tDQSTRING tNL { fprintf(ppy_out, "# %d %s\n", $2 , $3); free($3); } - | tGCCLINE tSINT tDQSTRING tNL { fprintf(ppy_out, "# %d %s\n", $2 , $3); free($3); } - | tGCCLINE tSINT tDQSTRING tSINT tNL - { fprintf(ppy_out, "# %d %s %d\n", $2, $3, $4); free($3); } - | tGCCLINE tSINT tDQSTRING tSINT tSINT tNL - { fprintf(ppy_out, "# %d %s %d %d\n", $2 ,$3, $4, $5); free($3); } - | tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tNL - { fprintf(ppy_out, "# %d %s %d %d %d\n", $2 ,$3 ,$4 ,$5, $6); free($3); } - | tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tSINT tNL - { fprintf(ppy_out, "# %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); if($2) free($2); } - | tWARNING opt_text tNL { ppy_warning("#warning directive: '%s'", $2); if($2) free($2); } - | tPRAGMA opt_text tNL { fprintf(ppy_out, "#pragma %s\n", $2 ? $2 : ""); if ($2) free($2); } - | tPPIDENT opt_text tNL { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", $2); if($2) free($2); } - | tRCINCLUDE tRCINCLUDEPATH { - int nl=strlen($2) +3; - char *fn=pp_xmalloc(nl); - sprintf(fn,"\"%s\"",$2); - free($2); - pp_do_include(fn,1); - } - | 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"); - $$ = new_mtext(NULL, mat, exp_stringize); - } - | tIDENT { - int mat = marg_index($1); - if(mat >= 0) - $$ = new_mtext(NULL, mat, exp_subst); - else - $$ = 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)); - 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 *ma = new_marg(str, type); - nmacro_args++; - macro_args = pp_xrealloc(macro_args, nmacro_args * sizeof(macro_args[0])); - macro_args[nmacro_args-1] = ma; - return ma; -} - -static int marg_index(char *id) -{ - int t; - 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(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) - { - tail->subst.text = pp_xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1); - 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 = strlen(s1); - int l2 = strlen(s2); - s1 = pp_xrealloc(s1, l1+l2+1); - memcpy(s1+l1, s2, l2+1); - free(s2); - return s1; -} diff --git a/reactos/tools/wpp/preproc.c b/reactos/tools/wpp/preproc.c deleted file mode 100644 index 52548332292..00000000000 --- a/reactos/tools/wpp/preproc.c +++ /dev/null @@ -1,646 +0,0 @@ -/* - * 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 -#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) - { - fprintf(stderr, "Virtual memory exhausted.\n"); - exit(2); - } - return res; -} - -void *pp_xrealloc(void *p, size_t size) -{ - void *res; - - assert(size > 0); - res = realloc(p, size); - if(res == NULL) - { - fprintf(stderr, "Virtual memory exhausted.\n"); - exit(2); - } - return res; -} - -char *pp_xstrdup(const char *str) -{ - char *s; - int len; - - assert(str != NULL); - len = strlen(str)+1; - s = pp_xmalloc(len); - return memcpy(s, str, len); -} - -/* Don't comment on the hash, its 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 = pphash(ident); - pp_entry_t *ppp; - - 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 */ -void pp_push_define_state(void) -{ - pp_def_state_t *state = pp_xmalloc( sizeof(*state) ); - - memset( state->defines, 0, sizeof(state->defines) ); - state->next = pp_def_state; - pp_def_state = state; -} - -/* 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) free_pp_entry( ppp, i ); - } - state = pp_def_state; - pp_def_state = state->next; - free( state ); -} - -void pp_del_define(const char *name) -{ - pp_entry_t *ppp; - - if((ppp = pplookup(name)) == NULL) - { - if(pp_status.pedantic) - ppy_warning("%s was not defined", name); - return; - } - - free_pp_entry( ppp, pphash(name) ); - - if(pp_status.debug) - printf("Deleted (%s, %d) <%s>\n", pp_status.input, pp_status.line_number, name); -} - -pp_entry_t *pp_add_define(char *def, char *text) -{ - int len; - char *cptr; - int idx = pphash(def); - pp_entry_t *ppp; - - 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)); - memset( ppp, 0, sizeof(*ppp) ); - ppp->ident = def; - ppp->type = def_define; - ppp->subst.text = text; - ppp->filename = pp_xstrdup(pp_status.input ? pp_status.input : ""); - 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(text) - { - /* Strip trailing white space from subst text */ - len = strlen(text); - while(len && strchr(" \t\r\n", text[len-1])) - { - text[--len] = '\0'; - } - /* Strip leading white space from subst text */ - for(cptr = text; *cptr && strchr(" \t\r", *cptr); cptr++) - ; - if(text != cptr) - memmove(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, text ? text : "(null)"); - - return ppp; -} - -pp_entry_t *pp_add_macro(char *id, marg_t *args[], int nargs, mtext_t *exp) -{ - int idx = pphash(id); - pp_entry_t *ppp; - - 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)); - 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 : ""); - 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(_Windows) || defined(__MSDOS__) -#define INCLUDESEPARATOR ";" -#else -#define INCLUDESEPARATOR ":" -#endif - -static char **includepath; -static int nincludepath = 0; - -void wpp_add_include_path(const char *path) -{ - char *tok; - char *cpy = pp_xstrdup(path); - - /* check for absolute windows paths */ - if (strchr(cpy, ':') != NULL) - { - nincludepath++; - includepath = pp_xrealloc(includepath, nincludepath * sizeof(*includepath)); - includepath[nincludepath-1] = cpy; - return; - } - - tok = strtok(cpy, INCLUDESEPARATOR); - while(tok) - { - if(*tok) { - char *dir; - char *cptr; - dir = pp_xstrdup(tok); - 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 */ - nincludepath++; - includepath = pp_xrealloc(includepath, nincludepath * sizeof(*includepath)); - includepath[nincludepath-1] = dir; - } - tok = strtok(NULL, INCLUDESEPARATOR); - } - free(cpy); -} - -char *wpp_find_include(const char *name, const char *parent_name) -{ - char *cpy; - char *cptr; - char *path; - const char *ccptr; - int i, fd; - - cpy = pp_xmalloc(strlen(name)+1); - 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(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 ); - 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 < nincludepath; i++) - { - path = pp_xmalloc(strlen(includepath[i]) + strlen(cpy) + 2); - strcpy(path, includepath[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; -} - -FILE *pp_open_include(const char *name, const char *parent_name, char **newpath) -{ - char *path; - FILE *fp; - - if (!(path = wpp_find_include( name, parent_name ))) return NULL; - fp = fopen(path, "rt"); - - 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; - } -} - -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)"); - - 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; - } - - 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); - for (p = cpy; *p; p++) if(!isprint(*p)) *p = ' '; - fprintf(stderr, " near '%s'", cpy); - free(cpy); - } - } -#endif - fprintf(stderr, "\n"); -} - -int ppy_error(const char *s, ...) -{ - va_list ap; - va_start(ap, s); - generic_msg(s, "Error", ppy_text, ap); - va_end(ap); - exit(1); - return 1; -} - -int ppy_warning(const char *s, ...) -{ - va_list ap; - va_start(ap, s); - generic_msg(s, "Warning", ppy_text, 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); -} diff --git a/reactos/tools/wpp/wpp.c b/reactos/tools/wpp/wpp.c deleted file mode 100644 index 7b87c367c15..00000000000 --- a/reactos/tools/wpp/wpp.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Exported functions of the Wine preprocessor - * - * Copyrignt 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( pp_xstrdup(def->name), pp_xstrdup(def->value) ); - } -} - -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( pp_xstrdup("__DATE__"), pp_xstrdup(buf) ); - - strftime(buf, sizeof(buf), "\"%H:%M:%S\"", localtime(&now)); - pp_add_define( pp_xstrdup("__TIME__"), pp_xstrdup(buf) ); - - ppp = pp_add_define( pp_xstrdup("__FILE__"), pp_xstrdup("") ); - ppp->type = def_special; - - ppp = pp_add_define( pp_xstrdup("__LINE__"), pp_xstrdup("") ); - ppp->type = def_special; -} - - -/* add a define to the preprocessor list */ -void 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 )) - { - free( def->value ); - def->value = pp_xstrdup(value); - return; - } - } - - def = pp_xmalloc( sizeof(*def) ); - def->next = cmdline_defines; - def->name = pp_xstrdup(name); - def->value = pp_xstrdup(value); - cmdline_defines = def; -} - - -/* 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 */ -void wpp_add_cmdline_define( const char *value ) -{ - char *str = pp_xstrdup(value); - char *p = strchr( str, '=' ); - if (p) *p++ = 0; - wpp_add_define( str, p ); - free( str ); -} - - -/* 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_push_define_state(); - add_cmdline_defines(); - add_special_defines(); - - if (!input) ppy_in = stdin; - else if (!(ppy_in = fopen(input, "rt"))) - { - fprintf(stderr,"Could not open %s\n", input); - exit(2); - } - - pp_status.input = input; - - ppy_out = output; - fprintf(ppy_out, "# 1 \"%s\" 1\n", input ? input : ""); - - ret = ppy_parse(); - - if (input) fclose(ppy_in); - pp_pop_define_state(); - return ret; -} - - -/* parse into a temporary file */ -int wpp_parse_temp( const char *input, const char *output_base, char **output_name ) -{ - FILE *output; - int ret, fd; - char *temp_name; - - if (!output_base || !output_base[0]) output_base = "wpptmp"; - - temp_name = pp_xmalloc( strlen(output_base) + 8 ); - strcpy( temp_name, output_base ); - strcat( temp_name, ".XXXXXX" ); - - if((fd = mkstemps( temp_name, 0 )) == -1) - { - fprintf(stderr, "Could not generate a temp name from %s\n", temp_name); - exit(2); - } - - if (!(output = fdopen(fd, "wt"))) - { - fprintf(stderr,"Could not open fd %s for writing\n", temp_name); - exit(2); - } - - *output_name = temp_name; - ret = wpp_parse( input, output ); - fclose( output ); - return ret; -} diff --git a/reactos/tools/wpp/wpp.rbuild b/reactos/tools/wpp/wpp.rbuild deleted file mode 100644 index 8e4ca429fd2..00000000000 --- a/reactos/tools/wpp/wpp.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - - - include/reactos/wine - include/reactos - include - include - lex.yy.c - preproc.c - wpp.c - ppy.tab.c - diff --git a/reactos/tools/wpp/wpp_private.h b/reactos/tools/wpp/wpp_private.h deleted file mode 100644 index ff0fae7a2f5..00000000000 --- a/reactos/tools/wpp/wpp_private.h +++ /dev/null @@ -1,259 +0,0 @@ -/* - * 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 -} 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; /* Explicitely 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); -void pp_push_define_state(void); -void pp_pop_define_state(void); -pp_entry_t *pp_add_define(char *def, 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); -FILE *pp_open_include(const char *name, 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 - -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 -{ - const char *input; /* current input file name */ - int line_number; /* current line number */ - int char_number; /* current char number in line */ - 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); - - -/* - * From ppy.y - */ -int ppy_parse(void); -extern int ppy_debug; - -#endif /* __WINE_WPP_PRIVATE_H */ diff --git a/reactos/tools/wpp/wpp_ros.diff b/reactos/tools/wpp/wpp_ros.diff deleted file mode 100644 index 34ea9288bed..00000000000 --- a/reactos/tools/wpp/wpp_ros.diff +++ /dev/null @@ -1,20 +0,0 @@ -Index: preproc.c -=================================================================== ---- preproc.c (revision 28293) -+++ preproc.c (revision 28294) -@@ -328,6 +328,15 @@ - char *tok; - char *cpy = pp_xstrdup(path); - -+ /* check for absolute windows paths */ -+ if (strchr(cpy, ':') != NULL) -+ { -+ nincludepath++; -+ includepath = pp_xrealloc(includepath, nincludepath * sizeof(*includepath)); -+ includepath[nincludepath-1] = cpy; -+ return; -+ } -+ - tok = strtok(cpy, INCLUDESEPARATOR); - while(tok) - { diff --git a/reactos/tools/wrc/CHANGES b/reactos/tools/wrc/CHANGES deleted file mode 100644 index 766ecdab691..00000000000 --- a/reactos/tools/wrc/CHANGES +++ /dev/null @@ -1,336 +0,0 @@ ---------------------------------------------------------------------------- -Version 1.1.9 (31-Dec-2000) - -Ulrich Weigand -- Fixed a byteorder conversion problem with message tables. -- Carefully read and write (possibly) misaligned data elements - to avoid crashes on architectures where this is not allowed. - ---------------------------------------------------------------------------- -Version 1.1.8 (24-Aug-2000) - -Bertho Stultiens -- Fixed a LALR(2) problem while scanning usertype resources which - had identifiers for both name and type. - ---------------------------------------------------------------------------- -Version 1.1.7 (24-Jul-2000) - -Bertho Stultiens -- Implemented a bug-work-arround for Berkeley yacc (byacc) which - does not generate proper default transition rules for non-terminals. - See comments in parser.y how the fix works. -- Changed the error-line/char position to make emacs happy parsing - the position of the error. -- Added comments in the documentation in which order the line-numer - and character-position of the error is written. - ---------------------------------------------------------------------------- -Version 1.1.6 (05-Jun-2000) - -Bertho Stultiens -- Bugfix: Macro expansion of strings would assert an internal error - or a segfault due to a lacking '\0' in the expansion. -- Bugfix: Prevent buffer overflow in reallocation of macro expansion - buffers. -- Bugfix: Wrc's version information was not passed as numerical to the - preprocessor due to an error in the definition of the macro. -- Relaxed the newline constraint in global LANGUAGE statements, which - was introduced in version 1.1.3, so that some fancy preprocessor - constructs can work. -- Removed the gcc-style #line handling from the resource-parser to the - resource-scanner so that it is possible to include files at any stage - of the source, independent of the parser-state. -- Bugfix: Stringtables were not correctly searched for duplicates - because the language comparison disregarded the sublanguage. -- Eliminated a repetitive warning when writing stringtables with zero - length string entries. These are perfectly valid (but make no sense:-). - Warning are now only generated during parse in pedantic mode. - ---------------------------------------------------------------------------- -Version 1.1.5 (12-Jun-2000) - -Bertho Stultiens -- Bugfix: Corrected "off by one" error in the linenumber while parsing - resource. -- Bugfix: A segfault would occur if messagetables were parsed without - memory options attached. Also added buffer-overflow safeguard while - converting between byteorders. -- Finished remapping usertype resources onto standars types by tricking - the parser into accepting a different token. The remapping can be - disabled with a new commandline option '-m'. -- Resolved some warning about chars used as index on SGI O2 machine - (the ctype isXXX() routines are macros there). - ---------------------------------------------------------------------------- -Version 1.1.4 (07-Jun-2000) - -Bertho Stultiens -- Implemented MESSAGETABLE resource type. -- Usertype resources that cause a type-clash with defined resources - are now detected and a warning is generated. Some types should be - rerouted through other code so that they will be (re-)interpreted. -- Bugfix: Line-continuation in strings in resources include a newline. - This `feature' got deleted with the builtin preprocessor, but has been - put back into place (see last changes comment from version 1.1.0). -- Bugfix: The preprocessor now correctly will see "\\\r\n" as a line- - continuation. -- Bugfix: Assemblers on some platforms do not use 16bit quantities - for `.word'. This directive is now changed into `.short'. -- All types that accept inline data definitions (a la RCDATA) now - also accept a file specification. This unifies the structure a bit. - ---------------------------------------------------------------------------- -Version 1.1.3 (21-May-2000) - -Bertho Stultiens -- Implemented animated cursors and icons resource types. -- Added partial support for font resources (user supplied fontdir is - required). -- All resources with inline data (a la RCDATA) now support language, - version and characteristics data. -- Implemented resource name duplicate checks. It is now an error if - two resources of the same type have the same name. -- Bugfix: Language propagation was not correct when .res files were - generated. -- Bugfix: VERSIONINFO now handles memory options. -- Bugfix: resource names and the resource type may be equal (e.g. MENU - MENU {...}). This support was mistakingly deleted in the upgrade to - the builtin preprocessor. - The standalone LANGUAGE setting became context sensitive as a consequence - of this. Now it *must* end with a newline *after* both expressions and - no newlines are allowed within the line (the statement must fit on one - line). This is no practical problem though. - -Patrik Stridvall -- Fixed byte order on Solaris and FreeBSD. - ---------------------------------------------------------------------------- -Version 1.1.2 (08-May-2000) - -Bertho Stultiens -- Bugfix: Corrected a SEGV in the rawdata handling. Mistakingly took the - address of a pointer instead of its value. This probably slipped in - during the merge of my tree into the winetree. - Lesson learned: always double check. -- Verified most resources so that win16 compile also generates correct - output for reversed endian. - ---------------------------------------------------------------------------- -Version 1.1.1 (07-May-2000) - -Bertho Stultiens -- Implemented byte-ordering for resources. All resources can be forced - to be little-, big- or native endian with command-line option -B. -- Reading resources from .res-files are only accepted in native byte- - ordering so that no additional semantic analysis is required. -- Resource directory is still written in native-only format, including - the strings. -- Wrc is now installed through the makefile with 'make install' and also - uninstalled with 'make uninstall'. -- Wrote a man-page for better reference. The manpage also gets installed - and uninstalled. -- Cleaned up the namespace a bit by more agressive use of static. - ---------------------------------------------------------------------------- -Version 1.1.0 (01-May-2000) - -Bertho Stultiens -- Implemented a new preprocessor that is (nearly) ANSI-C compliant. The - old parser has been stripped from the old preprocessor-code which - cleaned up both resource-scanner and -parser. -- Standard defines have been introduced (see README.wrc) -- Both preprocessor- and resource-scanner have been optimized slightly - so that no backing up is required (one char lookahead is enough). -- Filename-scanning has been cleaned up, though not perfect yet. -- User-type resources are compatible now. -- Line-continuation in strings is corrected so that it does not - introduce a newline in the output. - ---------------------------------------------------------------------------- -Version 1.0.18 (28-Dec-1999) - -Bertho Stultiens -- Bugfix: The named resources were not named correctly for indirectly - addressable resources, which resulted in an undefined variable. The - previous fix was incomplete (I was probably sleeping while I made it). - ---------------------------------------------------------------------------- -Version 1.0.17 (20-Dec-1999) - -Bertho Stultiens -- Bugfix: Named resources of different types generated the same assembly- - label twice, resulting in a compile failure. - ---------------------------------------------------------------------------- -Version 1.0.16 (6-Nov-1999) - -Juergen.Schmied@debitel.net -- Bugfix: Styles were evaluated as expressions. The NOT in combination - with style flags was not overwriting the default styles like WS_VISIBLE. - Solved by introducing own rules for parsing styles. - ---------------------------------------------------------------------------- -Version 1.0.15 (13-Aug-1999) - -Bertho Stultiens -- Bugfix: IDs were not checked which resulted in numbers > 2^16-1 being - accepted as IDs. This resulted in duplicate IDs and all other sort of - trouble. - ---------------------------------------------------------------------------- -Version 1.0.14 (08-Aug-1999) - -Bertho Stultiens -- Deeply ashamed that I thought that flex had a bug. Of course my own fault - not recognizing unmatched text in start condition yyrcd and pp_strip[ps]. - There is a catch all rule now in the flexer with a warning to mark the - condition and promptly revealed errors in the wine-headers. - ---------------------------------------------------------------------------- -Version 1.0.13 (08-Aug-1999) - -Bertho Stultiens -- Fixed uppercase conversion of titles in dialog controls which was - introduced with the icon changes. -- Fixed strings longer than 1024 bytes/shorts by autosizing the array. A - warning is issued whenever more than 64k is allocated. -- Made a workarround for a flex bug where an ECHO put '\\' and '\n' - characters on the screen. - ---------------------------------------------------------------------------- -Version 1.0.12 (18-Jul-1999) - -Bertho Stultiens -- Generalized the distinction between 2 and 4 byte integers slightly through - a new parser state. The is now a warning when a 2 byte integer is larger - than 16 bit (and is truncated). -- Fixed a couple of cosmetic things in the DLGINIT stuff so that dumping of - this type will work as expected. -- Added generalized language/version/characteristics support to the DLGINIT - resource type. - -Ulrich Czekalla -- Added support for DLGINIT resource-type. -- Added string continuation and embedded quoting. -- Added numeric IDs for icons in controls. - -Eric Pouech -- Bugfix: Distinguish between 2 and 4 byte integers in RCDATA. - ---------------------------------------------------------------------------- -Version 1.0.11 (22-Apr-1999) - -Bertho Stultiens -- Fixed a counting bug in the win32 count and sort routine. -- Fixed sort order of resources (must be name before ordinal). -- Shuffled a couple of global variables so that built-in dlls now can - load resources through the proper PE interface. - ---------------------------------------------------------------------------- -Version 1.0.10 (18-Feb-1999) - -Alexandre Julliard -- Fixed the TIME_LONG ugliness. - -David Luyer -- Added string.h include in newstruc.c for compilation on 64bit platforms. -- Added TIME_LONG to support time_t==int in printf formats on alpha - platforms. - -Bertho Stultiens -- Added some more use of TIME_LONG in implicit format used in header-file - generation. -- Removed the windows.h include and replaced it with wintypes.h in - wrctypes.h and added winuser.h in two other sources. This cuts compilation - time by a factor of 2 and final executable size with debug by a factor 2.5. - ---------------------------------------------------------------------------- -Version 1.0.9 (01-Feb-1999) - -Albert den Haan : -- Fixed wrong order of res_ico and res_bmp which must be in RT_xxx order. - ---------------------------------------------------------------------------- -Version 1.0.8 (10-Jan-1999) - -Albert den Haan : -- Added TOOLBAR support. -- Buffer overflow fix in strncpyWtoA. -- Open embedded files in resource definitions through the include path from - the commandline. -- Support named icons in dialogs with unquoted names - -Bertho Stultiens -- Fixed a major bug in the language propagation in the parser. The parser - did not copy the current language while binding it to a resource structure - causing wrong sorting if multiple global languages were in use and was a - potential segfault because the pointer might not be valid. -- Added language/version/characteristics support for toolbar. -- Moved some defines from wrc.h to wrctypes.h to support in toolbars. -- Removed function stricmp from source and replaced with native function - strcasecmp. -- Allocate cursor and icon ordinals according to the language of the item to - decrease the amount of ordinals in use. This reduces the resource - directory size by reducing the tree size. -- Versions 1.0.5 through 1.0.7 were never committed to cvs but were available - for download from an alternate site for elf-dll test generation. - ---------------------------------------------------------------------------- -Version 1.0.7 (19-Dec-1998) -- Changed a couple of labels that are used by dllglue. Also reversed a patch - that made wrc's generated code dependent on dllglue's code. - ---------------------------------------------------------------------------- -Version 1.0.6 (12-Dec-1998) -- Fixed the _PEResTab table where incorrect RVA's were put in the table. - The dllglue should now be merged into wrc for correct labels and the least - number of loadtime fixups. - ---------------------------------------------------------------------------- -Version 1.0.5 (12-Dec-1998) -- Fixed an omited .globl statement for dllglue linking. - ---------------------------------------------------------------------------- -Version 1.0.4 (10-Dec-1998) -- Added a global label for elf-dll linking and a long with the resource - size and a long with the directory size. -- Killed an annoying warning since version 1.0.0 in parser.y about a - var being used before init. - ---------------------------------------------------------------------------- -Version 1.0.3 (02-Nov-1998) -- Bugfix in write_name_str() [writeres.c] where the length byte/word was - wrongly counted in the length of the string. - Thanks to Ulrich Weigand - ---------------------------------------------------------------------------- -Version 1.0.2 (20-Jun-1998) -- Started this file -- Fixed a bug in filename scanning when they are double quoted. The code now - is compatible with MS' rc and Borland's brc. There is a compromise in the - filenames because of case-sensitivity under *nix. -- Backslashes in a filepath are now converted to forward slashes and double -- Fixed a bug in printing the filename if loading of a file should fail. - backslashes are converted to single forward slash. -- Added -L option to prevent conversion to lower case for embedded filenames - in resource statements. -- Added language posibilities to icons and cursors so that the current - language is put into the .res ans .s file. -- Added character position indication of an error. -- Fixed CLASS statement so that it accepts double quoted strings as class - argument. This seems to be the correct behaviour (see SDK). The unquoted - class-name is still supported because it seems a reasonable option. -- Fixed accelerators with CONTROL option set so that they generate correct - code instead of generating an error. -- Added testing for flex version 2.5 or better because wrc needs the - yy_scan* functions to do preprocessing. - ---------------------------------------------------------------------------- -Version 1.0.1 (08-Jun-1998) -- Added -A commandline option to generate autoregister code for the winelib - programs. - ---------------------------------------------------------------------------- -Version 1.0.0 (28-May-1998) -- Initial release diff --git a/reactos/tools/wrc/dumpres.c b/reactos/tools/wrc/dumpres.c deleted file mode 100644 index fdaecb077da..00000000000 --- a/reactos/tools/wrc/dumpres.c +++ /dev/null @@ -1,1038 +0,0 @@ -/* - * 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 -#include -#include - -#include "wrc.h" -#include "dumpres.h" - -/* - ***************************************************************************** - * Function : get_typename - * Syntax : char *get_typename(resource_t* r) - * Input : - * r - Resource description - * Output : A pointer to a string representing the resource type - * Description : - * Remarks : - ***************************************************************************** -*/ -const char *get_typename(const resource_t* r) -{ - switch(r->type){ - case res_acc: return "ACCELERATOR"; - case res_bmp: return "BITMAP"; - case res_cur: return "CURSOR"; - case res_curg: return "GROUP_CURSOR"; - case res_dlg: return "DIALOG"; - case res_dlgex: return "DIALOGEX"; - case res_fnt: return "FONT"; - case res_ico: return "ICON"; - case res_icog: return "GROUP_ICON"; - case res_men: return "MENU"; - case res_menex: return "MENUEX"; - case res_rdt: return "RCDATA"; - case res_stt: return "STRINGTABLE"; - case res_usr: return "UserResource"; - case res_msg: return "MESSAGETABLE"; - case res_ver: return "VERSIONINFO"; - case res_dlginit: return "DLGINIT"; - case res_toolbar: return "TOOLBAR"; - case res_anicur: return "CURSOR (animated)"; - case res_aniico: return "ICON (animated)"; - default: return "Unknown"; - } -} - -/* - ***************************************************************************** - * Function : strncpyWtoA - * Syntax : char *strncpyWtoA(char *cs, short *ws, int maxlen) - * Input : - * cs - Pointer to buffer to receive result - * ws - Source wide-string - * maxlen - Max chars to copy - * Output : 'cs' - * Description : Copy a unicode string to ascii. Copying stops after the - * first occurring '\0' or when maxlen-1 chars are copied. The - * String is always nul terminated. - * Remarks : No codepage translation is done. - ***************************************************************************** -*/ -static char *strncpyWtoA(char *cs, const WCHAR *ws, int maxlen) -{ - char *cptr = cs; - const WCHAR *wsMax = ws + maxlen - 1; - while(*ws && ws < wsMax) - { - if(*ws > 255) - fprintf(stderr, "***Warning: Unicode string contains non-printable chars***\n"); - *cptr++ = (char)*ws++; - } - *cptr = '\0'; - return cs; -} - -/* - ***************************************************************************** - * Function : print_string - * Syntax : void print_string(string_t *str) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void print_string(const string_t *str) -{ - char buffer[512]; - if(!str) - printf(""); - else if(str->type == str_char) - printf("\"%s\"", str->str.cstr); - else - { - strncpyWtoA(buffer, str->str.wstr, sizeof(buffer)); - printf("L\"%s\"", buffer); - } -} - -/* - ***************************************************************************** - * Function : get_nameid_str - * Syntax : const char *get_nameid_str(const name_id_t *n) - * Input : - * n - nameid to convert to text - * Output : A pointer to the name. - * Description : - * Remarks : Not reentrant because of static buffer - ***************************************************************************** -*/ -const char *get_nameid_str(const name_id_t *n) -{ - static char buffer[256]; - - if(!n) - return ""; - - if(n->type == name_ord) - { - sprintf(buffer, "%d", n->name.i_name); - return buffer; - } - else if(n->type == name_str) - { - if(n->name.s_name->type == str_char) - return n->name.s_name->str.cstr; - else - { - strncpyWtoA(buffer, n->name.s_name->str.wstr, sizeof(buffer)); - return buffer; - } - } - else - return "Hoooo, report this: wrong type in nameid"; -} - -/* - ***************************************************************************** - * Function : dump_memopt - * Syntax : void dump_memopt(DWORD memopt) - * Input : - * memopt - flag bits of the options set - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_memopt(DWORD memopt) -{ - printf("Memory/load options: "); - if(memopt & 0x0040) - printf("PRELOAD "); - else - printf("LOADONCALL "); - if(memopt & 0x0010) - printf("MOVEABLE "); - else - printf("FIXED "); - if(memopt & 0x0020) - printf("PURE "); - else - printf("IMPURE "); - if(memopt & 0x1000) - printf("DISCARDABLE"); - printf("\n"); -} - -/* - ***************************************************************************** - * Function : dump_lvc - * Syntax : void dump_lvc(const lvc_t *l) - * Input : - * l - pointer to lvc structure - * Output : - * Description : Dump language, version and characteristics - * Remarks : - ***************************************************************************** -*/ -static void dump_lvc(const lvc_t *l) -{ - if(l->language) - printf("LANGUAGE %04x, %04x\n", l->language->id, l->language->sub); - else - printf("LANGUAGE \n"); - - if(l->version) - printf("VERSION %08x\n", *(l->version)); - else - printf("VERSION \n"); - - if(l->characts) - printf("CHARACTERISTICS %08x\n", *(l->characts)); - else - printf("CHARACTERISTICS \n"); -} - -/* - ***************************************************************************** - * Function : dump_raw_data - * Syntax : void dump_raw_data(const raw_data_t *d) - * Input : - * d - Raw data descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_raw_data(const raw_data_t *d) -{ - unsigned int n; - int i; - int j; - - if(!d) - { - printf(""); - return; - } - printf("Rawdata size: %d\n", d->size); - if(debuglevel < 2) - return; - - for(n = 0; n < d->size; n++) - { - if((n % 16) == 0) - { - if(n) - { - printf("- "); - for(i = 0; i < 16; i++) - printf("%c", isprint(d->data[n-16+i] & 0xff) ? d->data[n-16+i] : '.'); - printf("\n%08x: ", n); - } - else - printf("%08x: ", n); - } - printf("%02x ", d->data[n] & 0xff); - } - printf("- "); - j = d->size % 16; - if(!j) - j = 16; - for(i = 0; i < j; i++) - printf("%c", isprint(d->data[n-j+i] & 0xff) ? d->data[n-j+i] : '.'); - printf("\n"); -} - -/* - ***************************************************************************** - * Function : dump_accelerator - * Syntax : void dump_accelerator(const accelerator_t *acc) - * Input : - * acc - Accelerator resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_accelerator(const accelerator_t *acc) -{ - event_t *ev = acc->events; - - dump_memopt(acc->memopt); - dump_lvc(&(acc->lvc)); - - printf("Events: %s\n", ev ? "" : ""); - while(ev) - { - printf("Key="); - if(isprint(ev->key)) - printf("\"%c\"", ev->key); - else if(iscntrl(ev->key)) - printf("\"^%c\"", ev->key +'@'); - else - printf("\\x%02x", ev->key & 0xff); - - printf(" Id=%d flags=%04x\n", ev->id, ev->flags); - ev = ev->next; - } -} - -/* - ***************************************************************************** - * Function : dump_cursor - * Syntax : void dump_cursor(const cursor_t *cur) - * Input : - * cur - Cursor resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_cursor(const cursor_t *cur) -{ - printf("Id: %d\n", cur->id); - printf("Width: %d\n", cur->width); - printf("Height: %d\n", cur->height); - printf("X Hotspot: %d\n", cur->xhot); - printf("Y Hotspot: %d\n", cur->yhot); - dump_raw_data(cur->data); -} - -/* - ***************************************************************************** - * Function : dump_cursor_group - * Syntax : void dump_cursor_group(const cursor_group_t *cur) - * Input : - * cur - Cursor group resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_cursor_group(const cursor_group_t *curg) -{ - dump_memopt(curg->memopt); - printf("There are %d cursors in this group\n", curg->ncursor); -} - -/* - ***************************************************************************** - * Function : dump_icon - * Syntax : void dump_icon(const icon_t *ico) - * Input : - * ico - Icon resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_icon(const icon_t *ico) -{ - printf("Id: %d\n", ico->id); - printf("Width: %d\n", ico->width); - printf("Height: %d\n", ico->height); - printf("NColor: %d\n", ico->nclr); - printf("NPlanes: %d\n", ico->planes); - printf("NBits: %d\n", ico->bits); - dump_raw_data(ico->data); -} - -/* - ***************************************************************************** - * Function : dump_icon_group - * Syntax : void dump_icon_group(const icon_group_t *ico) - * Input : - * ico - Icon group resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_icon_group(const icon_group_t *icog) -{ - dump_memopt(icog->memopt); - printf("There are %d icons in this group\n", icog->nicon); -} - -/* - ***************************************************************************** - * Function : dump_ani_curico - * Syntax : void dump_ani_curico(const ani_curico_t *ani) - * Input : - * ani - Animated object resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_ani_curico(const ani_curico_t *ani) -{ - dump_memopt(ani->memopt); - dump_lvc(&ani->data->lvc); - dump_raw_data(ani->data); -} - -/* - ***************************************************************************** - * Function : dump_font - * Syntax : void dump_font(const font_t *fnt) - * Input : - * fnt - Font resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_font(const font_t *fnt) -{ - dump_memopt(fnt->memopt); - dump_lvc(&(fnt->data->lvc)); - dump_raw_data(fnt->data); -} - -/* - ***************************************************************************** - * Function : dump_bitmap - * Syntax : void dump_bitmap(const bitmap_t *bmp) - * Input : - * bmp - Bitmap resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_bitmap(const bitmap_t *bmp) -{ - dump_memopt(bmp->memopt); - dump_lvc(&(bmp->data->lvc)); - dump_raw_data(bmp->data); -} - -/* - ***************************************************************************** - * Function : dump_rcdata - * Syntax : void dump_rcdata(const rcdata_t *rdt) - * Input : - * rdt - RCData resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_rcdata(const rcdata_t *rdt) -{ - dump_memopt(rdt->memopt); - dump_lvc(&(rdt->data->lvc)); - dump_raw_data(rdt->data); -} - -/* - ***************************************************************************** - * Function : dump_user - * Syntax : void dump_user(const user_t *usr) - * Input : - * usr - User resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_user(const user_t *usr) -{ - dump_memopt(usr->memopt); - dump_lvc(&(usr->data->lvc)); - printf("Class %s\n", get_nameid_str(usr->type)); - dump_raw_data(usr->data); -} - -/* - ***************************************************************************** - * Function : dump_messagetable - * Syntax : void dump_messagetable(const messagetable_t *msg) - * Input : - * msg - Messagetable resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_messagetable(const messagetable_t *msg) -{ - dump_memopt(msg->memopt); - dump_lvc(&(msg->data->lvc)); - dump_raw_data(msg->data); -} - -/* - ***************************************************************************** - * Function : dump_stringtable - * Syntax : void dump_stringtable(const stringtable_t *stt) - * Input : - * stt - Stringtable resource descriptor - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_stringtable(const stringtable_t *stt) -{ - int i; - for(; stt; stt = stt->next) - { - printf("{\n"); - dump_memopt(stt->memopt); - dump_lvc(&(stt->lvc)); - for(i = 0; i < stt->nentries; i++) - { - printf("Id=%-5d (%d) ", stt->idbase+i, stt->entries[i].id); - if(stt->entries[i].str) - print_string(stt->entries[i].str); - else - printf(""); - printf("\n"); - } - printf("}\n"); - } -} - -/* - ***************************************************************************** - * Function : dump_control - * Syntax : void dump_control(const control_t *ctrl) - * Input : - * ctrl - Control resource descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_control(const control_t *ctrl) -{ - printf("Control {\n\tClass: %s\n", get_nameid_str(ctrl->ctlclass)); - printf("\tText: "); get_nameid_str(ctrl->title); printf("\n"); - printf("\tId: %d\n", ctrl->id); - printf("\tx, y, w, h: %d, %d, %d, %d\n", ctrl->x, ctrl->y, ctrl->width, ctrl->height); - if(ctrl->gotstyle) - { - assert(ctrl->style != NULL); - assert(ctrl->style->and_mask == 0); - printf("\tStyle: %08x\n", ctrl->style->or_mask); - } - if(ctrl->gotexstyle) - { - assert(ctrl->exstyle != NULL); - assert(ctrl->exstyle->and_mask == 0); - printf("\tExStyle: %08x\n", ctrl->exstyle->or_mask); - } - if(ctrl->gothelpid) - printf("\tHelpid: %d\n", ctrl->helpid); - if(ctrl->extra) - { - printf("\t"); - dump_raw_data(ctrl->extra); - } - printf("}\n"); -} - -/* - ***************************************************************************** - * Function : dump_dialog - * Syntax : void dump_dialog(const dialog_t *dlg) - * Input : - * dlg - Dialog resource descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_dialog(const dialog_t *dlg) -{ - control_t *c = dlg->controls; - - dump_memopt(dlg->memopt); - dump_lvc(&(dlg->lvc)); - printf("x, y, w, h: %d, %d, %d, %d\n", dlg->x, dlg->y, dlg->width, dlg->height); - if(dlg->gotstyle) - { - assert(dlg->style != NULL); - assert(dlg->style->and_mask == 0); - printf("Style: %08x\n", dlg->style->or_mask); - - } - if(dlg->gotexstyle) - { - assert(dlg->exstyle != NULL); - assert(dlg->exstyle->and_mask == 0); - printf("ExStyle: %08x\n", dlg->exstyle->or_mask); - } - printf("Menu: %s\n", get_nameid_str(dlg->menu)); - printf("Class: %s\n", get_nameid_str(dlg->dlgclass)); - printf("Title: "); print_string(dlg->title); printf("\n"); - printf("Font: "); - if(!dlg->font) - printf("\n"); - else - { - printf("%d, ", dlg->font->size); - print_string(dlg->font->name); - printf("\n"); - } - while(c) - { - dump_control(c); - c = c->next; - } -} - -/* - ***************************************************************************** - * Function : dump_dialogex - * Syntax : void dump_dialogex(const dialogex_t *dlgex) - * Input : - * dlgex - DialogEx resource descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_dialogex(const dialogex_t *dlgex) -{ - const control_t *c = dlgex->controls; - - dump_memopt(dlgex->memopt); - dump_lvc(&(dlgex->lvc)); - printf("x, y, w, h: %d, %d, %d, %d\n", dlgex->x, dlgex->y, dlgex->width, dlgex->height); - if(dlgex->gotstyle) - { - assert(dlgex->style != NULL); - assert(dlgex->style->and_mask == 0); - printf("Style: %08x\n", dlgex->style->or_mask); - } - if(dlgex->gotexstyle) - { - assert(dlgex->exstyle != NULL); - assert(dlgex->exstyle->and_mask == 0); - printf("ExStyle: %08x\n", dlgex->exstyle->or_mask); - } - if(dlgex->gothelpid) - printf("Helpid: %d\n", dlgex->helpid); - printf("Menu: %s\n", get_nameid_str(dlgex->menu)); - printf("Class: %s\n", get_nameid_str(dlgex->dlgclass)); - printf("Title: "); print_string(dlgex->title); printf("\n"); - printf("Font: "); - if(!dlgex->font) - printf("\n"); - else - { - printf("%d, ", dlgex->font->size); - print_string(dlgex->font->name); - printf(", %d, %d\n", dlgex->font->weight, dlgex->font->italic); - } - while(c) - { - dump_control(c); - c = c->next; - } -} - -/* - ***************************************************************************** - * Function : dump_menu_item - * Syntax : void dump_menu_item(const menu_item_t *item) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_menu_item(const menu_item_t *item) -{ - while(item) - { - if(item->popup) - { - printf("POPUP "); - print_string(item->name); - printf("\n"); - dump_menu_item(item->popup); - } - else - { - printf("MENUITEM "); - if(item->name) - { - print_string(item->name); - printf(", %d, %08x", item->id, item->state); - } - else - printf("SEPARATOR"); - printf("\n"); - } - item = item->next; - } -} - -/* - ***************************************************************************** - * Function : dump_menu - * Syntax : void dump_menu(const menu_t *men) - * Input : - * men - Menu resource descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_menu(const menu_t *men) -{ - dump_memopt(men->memopt); - dump_lvc(&(men->lvc)); - dump_menu_item(men->items); -} - -/* - ***************************************************************************** - * Function : dump_menuex_item - * Syntax : void dump_menuex_item(const menuex_item_t *item) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_menuex_item(const menuex_item_t *item) -{ - while(item) - { - if(item->popup) - { - printf("POPUP "); - print_string(item->name); - if(item->gotid) - printf(", Id=%d", item->id); - if(item->gottype) - printf(", Type=%d", item->type); - if(item->gotstate) - printf(", State=%08x", item->state); - if(item->gothelpid) - printf(", HelpId=%d", item->helpid); - printf("\n"); - dump_menuex_item(item->popup); - } - else - { - printf("MENUITEM "); - if(item->name) - { - print_string(item->name); - if(item->gotid) - printf(", Id=%d", item->id); - if(item->gottype) - printf(", Type=%d", item->type); - if(item->gotstate) - printf(", State=%08x", item->state); - if(item->gothelpid) - printf(", HelpId=%d", item->helpid); - } - else - printf("SEPARATOR"); - printf("\n"); - } - item = item->next; - } -} - -/* - ***************************************************************************** - * Function : dump_menuex - * Syntax : void dump_menuex(const menuex_t *menex) - * Input : - * menex - MenuEx resource descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_menuex(const menuex_t *menex) -{ - dump_memopt(menex->memopt); - dump_lvc(&(menex->lvc)); - dump_menuex_item(menex->items); -} - -/* - ***************************************************************************** - * Function : dump_ver_value - * Syntax : void dump_ver_value(const ver_value_t *val) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_ver_block(const ver_block_t *); /* Forward ref */ - -static void dump_ver_value(const ver_value_t *val) -{ - if(val->type == val_str) - { - printf("VALUE "); - print_string(val->key); - printf(" "); - print_string(val->value.str); - printf("\n"); - } - else if(val->type == val_words) - { - int i; - printf("VALUE"); - print_string(val->key); - for(i = 0; i < val->value.words->nwords; i++) - printf(" %04x", val->value.words->words[i]); - printf("\n"); - } - else if(val->type == val_block) - { - dump_ver_block(val->value.block); - } -} - -/* - ***************************************************************************** - * Function : dump_ver_block - * Syntax : void dump_ver_block(const ver_block_t *blk) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_ver_block(const ver_block_t *blk) -{ - const ver_value_t *val = blk->values; - printf("BLOCK "); - print_string(blk->name); - printf("\n{\n"); - while(val) - { - dump_ver_value(val); - val = val->next; - } - printf("}\n"); -} - -/* - ***************************************************************************** - * Function : dump_versioninfo - * Syntax : void dump_versioninfo(const versioninfo_t *ver) - * Input : - * ver - Versioninfo resource descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_versioninfo(const versioninfo_t *ver) -{ - const ver_block_t *blk = ver->blocks; - - dump_lvc(&(ver->lvc)); - - if(ver->gotit.fv) - printf("FILEVERSION %04x, %04x, %04x, %04x\n", - ver->filever_maj1, - ver->filever_maj2, - ver->filever_min1, - ver->filever_min2); - if(ver->gotit.pv) - printf("PRODUCTVERSION %04x, %04x, %04x, %04x\n", - ver->prodver_maj1, - ver->prodver_maj2, - ver->prodver_min1, - ver->prodver_min2); - if(ver->gotit.fo) - printf("FILEOS %08x\n", ver->fileos); - if(ver->gotit.ff) - printf("FILEFLAGS %08x\n", ver->fileflags); - if(ver->gotit.ffm) - printf("FILEFLAGSMASK %08x\n", ver->fileflagsmask); - if(ver->gotit.ft) - printf("FILETYPE %08x\n", ver->filetype); - if(ver->gotit.fst) - printf("FILESUBTYPE %08x\n", ver->filesubtype); - while(blk) - { - dump_ver_block(blk); - blk = blk->next; - } -} - -/* - ***************************************************************************** - * Function : dump_toolbar_item - * Syntax : void dump_toolbar_item(const toolbar_item_t *item) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_toolbar_items(const toolbar_item_t *items) -{ - while(items) - { - if(items->id) - printf(" BUTTON %d", items->id ); - else - printf(" SEPARATOR"); - - printf("\n"); - - items = items->next; - } -} - -/* - ***************************************************************************** - * Function : dump_toolbar - * Syntax : void dump_toolbar(const toolbar_t *toolbar) - * Input : - * toolbar - Toolbar resource descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_toolbar(const toolbar_t *toolbar) -{ - dump_memopt(toolbar->memopt); - dump_lvc(&(toolbar->lvc)); - dump_toolbar_items(toolbar->items); -} - -/* - ***************************************************************************** - * Function : dump_dlginit - * Syntax : void dump_dlginit(const dlginit_t *dit) - * Input : - * dit - DlgInit resource descriptor - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void dump_dlginit(const dlginit_t *dit) -{ - dump_memopt(dit->memopt); - dump_lvc(&(dit->data->lvc)); - dump_raw_data(dit->data); -} - -/* - ***************************************************************************** - * Function : dump_resources - * Syntax : void dump_resources(const resource_t *top) - * Input : - * top - Top of the resource tree - * Output : - * nop - * Description : Dump the parsed resource-tree to stdout - * Remarks : - ***************************************************************************** -*/ -void dump_resources(const resource_t *top) -{ - printf("Internal resource-tree dump:\n"); - while(top) - { - printf("Resource: %s\nId: %s\n", - get_typename(top), - get_nameid_str(top->name)); - switch(top->type) - { - case res_acc: - dump_accelerator(top->res.acc); - break; - case res_bmp: - dump_bitmap(top->res.bmp); - break; - case res_cur: - dump_cursor(top->res.cur); - break; - case res_curg: - dump_cursor_group(top->res.curg); - break; - case res_dlg: - dump_dialog(top->res.dlg); - break; - case res_dlgex: - dump_dialogex(top->res.dlgex); - break; - case res_fnt: - dump_font(top->res.fnt); - break; - case res_icog: - dump_icon_group(top->res.icog); - break; - case res_ico: - dump_icon(top->res.ico); - break; - case res_men: - dump_menu(top->res.men); - break; - case res_menex: - dump_menuex(top->res.menex); - break; - case res_rdt: - dump_rcdata(top->res.rdt); - break; - case res_stt: - dump_stringtable(top->res.stt); - break; - case res_usr: - dump_user(top->res.usr); - break; - case res_msg: - dump_messagetable(top->res.msg); - break; - case res_ver: - dump_versioninfo(top->res.ver); - break; - case res_dlginit: - dump_dlginit(top->res.dlgi); - break; - case res_toolbar: - dump_toolbar(top->res.tbt); - break; - case res_anicur: - case res_aniico: - dump_ani_curico(top->res.ani); - break; - default: - printf("Report this: Unknown resource type parsed %08x\n", top->type); - } - printf("\n"); - top = top->next; - } -} diff --git a/reactos/tools/wrc/dumpres.h b/reactos/tools/wrc/dumpres.h deleted file mode 100644 index a6c3dac3800..00000000000 --- a/reactos/tools/wrc/dumpres.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Dump resource prototypes - * - * 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 __WRC_DUMPRES_H -#define __WRC_DUMPRES_H - -#include "wrctypes.h" - -const char *get_typename(const resource_t* r); -void dump_resources(const resource_t *top); -const char *get_nameid_str(const name_id_t *n); - -#endif diff --git a/reactos/tools/wrc/genres.c b/reactos/tools/wrc/genres.c deleted file mode 100644 index 05b1dd533b7..00000000000 --- a/reactos/tools/wrc/genres.c +++ /dev/null @@ -1,2013 +0,0 @@ -/* - * Generate .res format from a resource-tree - * - * 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 - * - * History: - * 05-May-2000 BS - Added code to support endian conversions. The - * extra functions also aid unaligned access, but - * this is not yet implemented. - * 25-May-1998 BS - Added simple unicode -> char conversion for resource - * names in .s and .h files. - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include - -#include "wrc.h" -#include "genres.h" -#include "utils.h" -#include "wine/unicode.h" - -/* Fix 64-bit host, re: put_dword */ -#if defined(unix) && defined(__x86_64__) -typedef unsigned int HOST_DWORD; -#else -typedef unsigned long HOST_DWORD; -#endif - -#define SetResSize(res, tag) set_dword((res), (tag), (res)->size - get_dword((res), (tag))) - -res_t *new_res(void) -{ - res_t *r; - r = (res_t *)xmalloc(sizeof(res_t)); - r->allocsize = RES_BLOCKSIZE; - r->size = 0; - r->dataidx = 0; - r->data = xmalloc(RES_BLOCKSIZE); - return r; -} - -res_t *grow_res(res_t *r, unsigned int add) -{ - r->allocsize += add; - r->data = (char *)xrealloc(r->data, r->allocsize); - return r; -} - -/* - ***************************************************************************** - * Function : put_byte - * put_word - * put_dword - * Syntax : void put_byte(res_t *res, unsigned c) - * void put_word(res_t *res, unsigned w) - * void put_dword(res_t *res, unsigned d) - * Input : - * res - Binary resource to put the data in - * c, w, d - Data to put - * Output : nop - * Description : Put primitives that put an item in the binary resource. - * The data array grows automatically. - * Remarks : - ***************************************************************************** -*/ -void put_byte(res_t *res, unsigned c) -{ - if(res->allocsize - res->size < sizeof(char)) - grow_res(res, RES_BLOCKSIZE); - res->data[res->size] = (char)c; - res->size += sizeof(char); -} - -void put_word(res_t *res, unsigned w) -{ - if(res->allocsize - res->size < sizeof(WORD)) - grow_res(res, RES_BLOCKSIZE); - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - res->data[res->size+0] = HIBYTE(w); - res->data[res->size+1] = LOBYTE(w); - break; - -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - res->data[res->size+1] = HIBYTE(w); - res->data[res->size+0] = LOBYTE(w); - break; - } - res->size += sizeof(WORD); -} - -void put_dword(res_t *res, unsigned d) -{ - assert(sizeof(HOST_DWORD) == 4); - - if(res->allocsize - res->size < sizeof(HOST_DWORD)) - grow_res(res, RES_BLOCKSIZE); - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - res->data[res->size+0] = HIBYTE(HIWORD(d)); - res->data[res->size+1] = LOBYTE(HIWORD(d)); - res->data[res->size+2] = HIBYTE(LOWORD(d)); - res->data[res->size+3] = LOBYTE(LOWORD(d)); - break; - -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - res->data[res->size+3] = HIBYTE(HIWORD(d)); - res->data[res->size+2] = LOBYTE(HIWORD(d)); - res->data[res->size+1] = HIBYTE(LOWORD(d)); - res->data[res->size+0] = LOBYTE(LOWORD(d)); - break; - } - res->size += sizeof(HOST_DWORD); -} - -static void put_pad(res_t *res) -{ - while(res->size & 0x3) - put_byte(res, 0); -} - -/* - ***************************************************************************** - * Function : set_word - * set_dword - * Syntax : void set_word(res_t *res, int ofs, unsigned w) - * void set_dword(res_t *res, int ofs, unsigned d) - * Input : - * res - Binary resource to put the data in - * ofs - Byte offset in data-array - * w, d - Data to put - * Output : nop - * Description : Set the value of a binary resource data array to a - * specific value. - * Remarks : - ***************************************************************************** -*/ -static void set_word(res_t *res, int ofs, unsigned w) -{ - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - res->data[ofs+0] = HIBYTE(w); - res->data[ofs+1] = LOBYTE(w); - break; - -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - res->data[ofs+1] = HIBYTE(w); - res->data[ofs+0] = LOBYTE(w); - break; - } -} - -static void set_dword(res_t *res, int ofs, unsigned d) -{ - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - res->data[ofs+0] = HIBYTE(HIWORD(d)); - res->data[ofs+1] = LOBYTE(HIWORD(d)); - res->data[ofs+2] = HIBYTE(LOWORD(d)); - res->data[ofs+3] = LOBYTE(LOWORD(d)); - break; - -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - res->data[ofs+3] = HIBYTE(HIWORD(d)); - res->data[ofs+2] = LOBYTE(HIWORD(d)); - res->data[ofs+1] = HIBYTE(LOWORD(d)); - res->data[ofs+0] = LOBYTE(LOWORD(d)); - break; - } -} - -/* - ***************************************************************************** - * Function : get_dword - * Input : - * res - Binary resource to put the data in - * ofs - Byte offset in data-array - * Output : The data in native endian - * Description : Get the value of a binary resource data array in native - * endian. - * Remarks : - ***************************************************************************** -*/ -static HOST_DWORD get_dword(res_t *res, int ofs) -{ - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - return (res->data[ofs+0] << 24) - | (res->data[ofs+1] << 16) - | (res->data[ofs+2] << 8) - | res->data[ofs+3]; - -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - return (res->data[ofs+3] << 24) - | (res->data[ofs+2] << 16) - | (res->data[ofs+1] << 8) - | res->data[ofs+0]; - } -} - -/* - ***************************************************************************** - * Function : string_to_upper - * Syntax : void string_to_upper(string_t *str) - * Input : - * Output : - * Description : - * Remarks : FIXME: codepages... - ***************************************************************************** -*/ -static void string_to_upper(string_t *str) -{ - int i; - - if(str->type == str_char) - { - for (i = 0; i < str->size; i++) str->str.cstr[i] = toupper((unsigned char)str->str.cstr[i]); - } - else if(str->type == str_unicode) - { - for (i = 0; i < str->size; i++) str->str.wstr[i] = toupperW(str->str.wstr[i]); - } - else - { - internal_error(__FILE__, __LINE__, "Invalid string type %d\n", str->type); - } -} - -/* - ***************************************************************************** - * Function : put_string - * Syntax : void put_string(res_t *res, string_t *str, enum str_e type, - * int isterm, const language_t *lang) - * Input : - * res - Binary resource to put the data in - * str - String to put - * type - Data has to be written in either str_char or str_unicode - * isterm - The string is '\0' terminated (disregard the string's - * size member) - * Output : nop - * Description : - * Remarks : - ***************************************************************************** -*/ -static void put_string(res_t *res, const string_t *str, enum str_e type, int isterm, - const language_t *lang) -{ - int cnt, codepage; - string_t *newstr; - - assert(res != NULL); - assert(str != NULL); - - if (lang) codepage = get_language_codepage( lang->id, lang->sub ); - else codepage = get_language_codepage( 0, 0 ); - - assert( codepage != -1 ); - - newstr = convert_string(str, type, codepage); - if (type == str_unicode) - { - if (str->type == str_char) - { - if (!check_unicode_conversion( str, newstr, codepage )) - error( "String %s does not convert identically to Unicode and back in codepage %d. " - "Try using a Unicode string instead\n", str->str.cstr, codepage ); - } - if (!isterm) put_word(res, newstr->size); - for(cnt = 0; cnt < newstr->size; cnt++) - { - WCHAR c = newstr->str.wstr[cnt]; - if (isterm && !c) break; - put_word(res, c); - } - if (isterm) put_word(res, 0); - } - else /* str_char */ - { - if (!isterm) put_byte(res, newstr->size); - for(cnt = 0; cnt < newstr->size; cnt++) - { - char c = newstr->str.cstr[cnt]; - if (isterm && !c) break; - put_byte(res, c); - } - if (isterm) put_byte(res, 0); - } - free_string(newstr); -} - -/* - ***************************************************************************** - * Function : put_name_id - * Syntax : void put_name_id(res_t *res, name_id_t *nid, int upcase, const language_t *lang) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void put_name_id(res_t *res, name_id_t *nid, int upcase, const language_t *lang) -{ - if(nid->type == name_ord) - { - if(win32) - put_word(res, 0xffff); - else - put_byte(res, 0xff); - put_word(res, (WORD)nid->name.i_name); - } - else if(nid->type == name_str) - { - if(upcase) - string_to_upper(nid->name.s_name); - put_string(res, nid->name.s_name, win32 ? str_unicode : str_char, TRUE, lang); - } - else - { - internal_error(__FILE__, __LINE__, "Invalid name_id type %d\n", nid->type); - } -} - -/* - ***************************************************************************** - * Function : put_lvc - * Syntax : void put_lvc(res_t *res, lvc_t *lvc) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void put_lvc(res_t *res, lvc_t *lvc) -{ - if(lvc && lvc->language) - put_word(res, MAKELANGID(lvc->language->id, lvc->language->sub)); - else - put_word(res, 0); /* Neutral */ - if(lvc && lvc->version) - put_dword(res, *(lvc->version)); - else - put_dword(res, 0); - if(lvc && lvc->characts) - put_dword(res, *(lvc->characts)); - else - put_dword(res, 0); -} - -/* - ***************************************************************************** - * Function : put_raw_data - * Syntax : void put_raw_data(res_t *res, raw_data_t *raw, int offset) - * Input : - * Output : - * Description : - * Remarks : - ***************************************************************************** -*/ -static void put_raw_data(res_t *res, raw_data_t *raw, int offset) -{ - unsigned int wsize = raw->size - offset; - if(res->allocsize - res->size < wsize) - grow_res(res, wsize); - memcpy(&(res->data[res->size]), raw->data + offset, wsize); - res->size += wsize; -} - -/* - ***************************************************************************** - * Function : put_res_header - * Syntax : intput_res_header(res_t *res, int type, name_id_t *ntype, - * name_id_t *name, DWORD memopt, lvc_t *lvc) - * - * Input : - * res - Binary resource descriptor to write to - * type - Resource identifier (if ntype == NULL) - * ntype - Name id of type - * name - Resource's name - * memopt - Resource's memory options to write - * lvc - Language, version and characteristics (win32 only) - * Output : An index to the resource size field. The resource size field - * contains the header size upon exit. - * Description : - * Remarks : - ***************************************************************************** -*/ -static int put_res_header(res_t *res, int type, name_id_t *ntype, name_id_t *name, - HOST_DWORD memopt, lvc_t *lvc) -{ - if(win32) - { - put_dword(res, 0); /* We will overwrite these later */ - put_dword(res, 0); - if(!ntype) - { - put_word(res, 0xffff); /* ResType */ - put_word(res, type); - } - else - put_name_id(res, ntype, TRUE, lvc->language); - put_name_id(res, name, TRUE, lvc->language); /* ResName */ - put_pad(res); - put_dword(res, 0); /* DataVersion */ - put_word(res, memopt); /* Memory options */ - put_lvc(res, lvc); /* Language, version and characts */ - set_dword(res, 0*sizeof(HOST_DWORD), res->size); /* Set preliminary resource */ - set_dword(res, 1*sizeof(HOST_DWORD), res->size); /* Set HeaderSize */ - res->dataidx = res->size; - return 0; - } - else /* win16 */ - { - int tag; - if(!ntype) - { - put_byte(res, 0xff); /* ResType */ - put_word(res, type); - } - else - put_name_id(res, ntype, TRUE, NULL); - put_name_id(res, name, TRUE, NULL); /* ResName */ - put_word(res, memopt); /* Memory options */ - tag = res->size; - put_dword(res, 0); /* ResSize overwritten later*/ - set_dword(res, tag, res->size); - res->dataidx = res->size; - return tag; - } -} - -/* - ***************************************************************************** - * Function : accelerator2res - * Syntax : res_t *accelerator2res(name_id_t *name, accelerator_t *acc) - * Input : - * name - Name/ordinal of the resource - * acc - The accelerator descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *accelerator2res(name_id_t *name, accelerator_t *acc) -{ - int restag; - res_t *res; - event_t *ev; - assert(name != NULL); - assert(acc != NULL); - - ev = acc->events; - res = new_res(); - if(win32) - { - restag = put_res_header(res, WRC_RT_ACCELERATOR, NULL, name, acc->memopt, &(acc->lvc)); - while(ev) - { - put_word(res, ev->flags | (ev->next ? 0 : 0x80)); - put_word(res, ev->key); - put_word(res, ev->id); - put_word(res, 0); /* Padding */ - ev = ev->next; - } - put_pad(res); - } - else /* win16 */ - { - restag = put_res_header(res, WRC_RT_ACCELERATOR, NULL, name, acc->memopt, NULL); - while(ev) - { - put_byte(res, ev->flags | (ev->next ? 0 : 0x80)); - put_word(res, ev->key); - put_word(res, ev->id); - ev = ev->next; - } - } - /* Set ResourceSize */ - SetResSize(res, restag); - return res; -} - -/* - ***************************************************************************** - * Function : dialog2res - * Syntax : res_t *dialog2res(name_id_t *name, dialog_t *dlg) - * Input : - * name - Name/ordinal of the resource - * dlg - The dialog descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *dialog2res(name_id_t *name, dialog_t *dlg) -{ - int restag; - res_t *res; - control_t *ctrl; - int tag_nctrl; - int nctrl = 0; - assert(name != NULL); - assert(dlg != NULL); - - ctrl = dlg->controls; - res = new_res(); - if(win32) - { - restag = put_res_header(res, WRC_RT_DIALOG, NULL, name, dlg->memopt, &(dlg->lvc)); - - put_dword(res, dlg->style->or_mask); - put_dword(res, dlg->gotexstyle ? dlg->exstyle->or_mask : 0); - tag_nctrl = res->size; - put_word(res, 0); /* Number of controls */ - put_word(res, dlg->x); - put_word(res, dlg->y); - put_word(res, dlg->width); - put_word(res, dlg->height); - if(dlg->menu) - put_name_id(res, dlg->menu, TRUE, dlg->lvc.language); - else - put_word(res, 0); - if(dlg->dlgclass) - put_name_id(res, dlg->dlgclass, TRUE, dlg->lvc.language); - else - put_word(res, 0); - if(dlg->title) - put_string(res, dlg->title, str_unicode, TRUE, dlg->lvc.language); - else - put_word(res, 0); - if(dlg->font) - { - put_word(res, dlg->font->size); - put_string(res, dlg->font->name, str_unicode, TRUE, dlg->lvc.language); - } - - put_pad(res); - while(ctrl) - { - /* FIXME: what is default control style? */ - put_dword(res, ctrl->gotstyle ? ctrl->style->or_mask: WS_CHILD); - put_dword(res, ctrl->gotexstyle ? ctrl->exstyle->or_mask : 0); - put_word(res, ctrl->x); - put_word(res, ctrl->y); - put_word(res, ctrl->width); - put_word(res, ctrl->height); - put_word(res, ctrl->id); - if(ctrl->ctlclass) - put_name_id(res, ctrl->ctlclass, TRUE, dlg->lvc.language); - else - internal_error(__FILE__, __LINE__, "Control has no control-class\n"); - if(ctrl->title) - put_name_id(res, ctrl->title, FALSE, dlg->lvc.language); - else - put_word(res, 0); - if(ctrl->extra) - { - put_word(res, ctrl->extra->size+2); - put_pad(res); - put_raw_data(res, ctrl->extra, 0); - } - else - put_word(res, 0); - - if(ctrl->next) - put_pad(res); - nctrl++; - ctrl = ctrl->next; - } - /* Set number of controls */ - set_word(res, tag_nctrl, (WORD)nctrl); - } - else /* win16 */ - { - restag = put_res_header(res, WRC_RT_DIALOG, NULL, name, dlg->memopt, NULL); - - put_dword(res, dlg->gotstyle ? dlg->style->or_mask : WS_POPUPWINDOW); - tag_nctrl = res->size; - put_byte(res, 0); /* Number of controls */ - put_word(res, dlg->x); - put_word(res, dlg->y); - put_word(res, dlg->width); - put_word(res, dlg->height); - if(dlg->menu) - put_name_id(res, dlg->menu, TRUE, NULL); - else - put_byte(res, 0); - if(dlg->dlgclass) - put_name_id(res, dlg->dlgclass, TRUE, NULL); - else - put_byte(res, 0); - if(dlg->title) - put_string(res, dlg->title, str_char, TRUE, NULL); - else - put_byte(res, 0); - if(dlg->font) - { - put_word(res, dlg->font->size); - put_string(res, dlg->font->name, str_char, TRUE, NULL); - } - - while(ctrl) - { - put_word(res, ctrl->x); - put_word(res, ctrl->y); - put_word(res, ctrl->width); - put_word(res, ctrl->height); - put_word(res, ctrl->id); - put_dword(res, ctrl->gotstyle ? ctrl->style->or_mask: WS_CHILD); - if(ctrl->ctlclass) - { - if(ctrl->ctlclass->type == name_ord - && ctrl->ctlclass->name.i_name >= 0x80 - && ctrl->ctlclass->name.i_name <= 0x85) - put_byte(res, ctrl->ctlclass->name.i_name); - else if(ctrl->ctlclass->type == name_str) - put_name_id(res, ctrl->ctlclass, FALSE, NULL); - else - error("Unknown control-class %04x\n", ctrl->ctlclass->name.i_name); - } - else - internal_error(__FILE__, __LINE__, "Control has no control-class\n"); - if(ctrl->title) - put_name_id(res, ctrl->title, FALSE, NULL); - else - put_byte(res, 0); - - /* FIXME: What is this extra byte doing here? */ - put_byte(res, 0); - - nctrl++; - ctrl = ctrl->next; - } - /* Set number of controls */ - ((char *)res->data)[tag_nctrl] = (char)nctrl; - } - /* Set ResourceSize */ - SetResSize(res, restag); - return res; -} - -/* - ***************************************************************************** - * Function : dialogex2res - * Syntax : res_t *dialogex2res(name_id_t *name, dialogex_t *dlgex) - * Input : - * name - Name/ordinal of the resource - * dlgex - The dialogex descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *dialogex2res(name_id_t *name, dialogex_t *dlgex) -{ - int restag; - res_t *res; - control_t *ctrl; - int tag_nctrl; - int nctrl = 0; - assert(name != NULL); - assert(dlgex != NULL); - - ctrl = dlgex->controls; - res = new_res(); - if(win32) - { - restag = put_res_header(res, WRC_RT_DIALOG, NULL, name, dlgex->memopt, &(dlgex->lvc)); - - /* FIXME: MS doc says thet the first word must contain 0xffff - * and the second 0x0001 to signal a DLGTEMPLATEEX. Borland's - * compiler reverses the two words. - * I don't know which one to choose, but I write it as Mr. B - * writes it. - */ - put_word(res, 1); /* Signature */ - put_word(res, 0xffff); /* DlgVer */ - put_dword(res, dlgex->gothelpid ? dlgex->helpid : 0); - put_dword(res, dlgex->gotexstyle ? dlgex->exstyle->or_mask : 0); - put_dword(res, dlgex->gotstyle ? dlgex->style->or_mask : WS_POPUPWINDOW); - tag_nctrl = res->size; - put_word(res, 0); /* Number of controls */ - put_word(res, dlgex->x); - put_word(res, dlgex->y); - put_word(res, dlgex->width); - put_word(res, dlgex->height); - if(dlgex->menu) - put_name_id(res, dlgex->menu, TRUE, dlgex->lvc.language); - else - put_word(res, 0); - if(dlgex->dlgclass) - put_name_id(res, dlgex->dlgclass, TRUE, dlgex->lvc.language); - else - put_word(res, 0); - if(dlgex->title) - put_string(res, dlgex->title, str_unicode, TRUE, dlgex->lvc.language); - else - put_word(res, 0); - if(dlgex->font) - { - put_word(res, dlgex->font->size); - put_word(res, dlgex->font->weight); - /* FIXME: ? TRUE should be sufficient to say that its - * italic, but Borland's compiler says its 0x0101. - * I just copy it here, and hope for the best. - */ - put_word(res, dlgex->font->italic ? 0x0101 : 0); - put_string(res, dlgex->font->name, str_unicode, TRUE, dlgex->lvc.language); - } - - put_pad(res); - while(ctrl) - { - put_dword(res, ctrl->gothelpid ? ctrl->helpid : 0); - put_dword(res, ctrl->gotexstyle ? ctrl->exstyle->or_mask : 0); - /* FIXME: what is default control style? */ - put_dword(res, ctrl->gotstyle ? ctrl->style->or_mask : WS_CHILD | WS_VISIBLE); - put_word(res, ctrl->x); - put_word(res, ctrl->y); - put_word(res, ctrl->width); - put_word(res, ctrl->height); - put_dword(res, ctrl->id); - if(ctrl->ctlclass) - put_name_id(res, ctrl->ctlclass, TRUE, dlgex->lvc.language); - else - internal_error(__FILE__, __LINE__, "Control has no control-class\n"); - if(ctrl->title) - put_name_id(res, ctrl->title, FALSE, dlgex->lvc.language); - else - put_word(res, 0); - if(ctrl->extra) - { - put_pad(res); - put_word(res, ctrl->extra->size); - put_raw_data(res, ctrl->extra, 0); - } - else - put_word(res, 0); - - put_pad(res); - nctrl++; - ctrl = ctrl->next; - } - /* Set number of controls */ - set_word(res, tag_nctrl, (WORD)nctrl); - /* Set ResourceSize */ - SetResSize(res, restag); - put_pad(res); - } - else /* win16 */ - { - /* Do not generate anything in 16-bit mode */ - free(res->data); - free(res); - return NULL; - } - return res; -} - -/* - ***************************************************************************** - * Function : menuitem2res - * Syntax : void menuitem2res(res_t *res, menu_item_t *item) - * Input : - * Output : - * Description : - * Remarks : Self recursive - ***************************************************************************** -*/ -static void menuitem2res(res_t *res, menu_item_t *menitem, const language_t *lang) -{ - menu_item_t *itm = menitem; - if(win32) - { - while(itm) - { - put_word(res, itm->state | (itm->popup ? MF_POPUP : 0) | (!itm->next ? MF_END : 0)); - if(!itm->popup) - put_word(res, itm->id); - if(itm->name) - put_string(res, itm->name, str_unicode, TRUE, lang); - else - put_word(res, 0); - if(itm->popup) - menuitem2res(res, itm->popup, lang); - itm = itm->next; - } - } - else /* win16 */ - { - while(itm) - { - put_word(res, itm->state | (itm->popup ? MF_POPUP : 0) | (!itm->next ? MF_END : 0)); - if(!itm->popup) - put_word(res, itm->id); - if(itm->name) - put_string(res, itm->name, str_char, TRUE, lang); - else - put_byte(res, 0); - if(itm->popup) - menuitem2res(res, itm->popup, lang); - itm = itm->next; - } - } - -} - -/* - ***************************************************************************** - * Function : menu2res - * Syntax : res_t *menu2res(name_id_t *name, menu_t *men) - * Input : - * name - Name/ordinal of the resource - * men - The menu descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *menu2res(name_id_t *name, menu_t *men) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(men != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_MENU, NULL, name, men->memopt, win32 ? &(men->lvc) : NULL); - - put_dword(res, 0); /* Menuheader: Version and HeaderSize */ - menuitem2res(res, men->items, win32 ? men->lvc.language : NULL); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : menuexitem2res - * Syntax : void menuexitem2res(res_t *res, menuex_item_t *item) - * Input : - * Output : nop - * Description : - * Remarks : Self recursive - ***************************************************************************** -*/ -static void menuexitem2res(res_t *res, menuex_item_t *menitem, const language_t *lang) -{ - menuex_item_t *itm = menitem; - assert(win32 != 0); - while(itm) - { - put_dword(res, itm->gottype ? itm->type : 0); - put_dword(res, itm->gotstate ? itm->state : 0); - put_dword(res, itm->gotid ? itm->id : 0); /* FIXME: Docu. says word */ - put_word(res, (itm->popup ? 0x01 : 0) | (!itm->next ? MF_END : 0)); - if(itm->name) - put_string(res, itm->name, str_unicode, TRUE, lang); - else - put_word(res, 0); - put_pad(res); - if(itm->popup) - { - put_dword(res, itm->gothelpid ? itm->helpid : 0); - menuexitem2res(res, itm->popup, lang); - } - itm = itm->next; - } - -} - -/* - ***************************************************************************** - * Function : menuex2res - * Syntax : res_t *menuex2res(name_id_t *name, menuex_t *menex) - * Input : - * name - Name/ordinal of the resource - * menex - The menuex descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *menuex2res(name_id_t *name, menuex_t *menex) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(menex != NULL); - - res = new_res(); - if(win32) - { - restag = put_res_header(res, WRC_RT_MENU, NULL, name, menex->memopt, &(menex->lvc)); - - put_word(res, 1); /* Menuheader: Version */ - put_word(res, 4); /* Offset */ - put_dword(res, 0); /* HelpId */ - put_pad(res); - menuexitem2res(res, menex->items, menex->lvc.language); - /* Set ResourceSize */ - SetResSize(res, restag); - put_pad(res); - } - else /* win16 */ - { - /* Do not generate anything in 16-bit mode */ - free(res->data); - free(res); - return NULL; - } - return res; -} - -/* - ***************************************************************************** - * Function : cursorgroup2res - * Syntax : res_t *cursorgroup2res(name_id_t *name, cursor_group_t *curg) - * Input : - * name - Name/ordinal of the resource - * curg - The cursor descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *cursorgroup2res(name_id_t *name, cursor_group_t *curg) -{ - int restag; - res_t *res; - cursor_t *cur; - assert(name != NULL); - assert(curg != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_GROUP_CURSOR, NULL, name, curg->memopt, &(curg->lvc)); - if(win32) - { - put_word(res, 0); /* Reserved */ - /* FIXME: The ResType in the NEWHEADER structure should - * contain 14 according to the MS win32 doc. This is - * not the case with the BRC compiler and I really doubt - * the latter. Putting one here is compliant to win16 spec, - * but who knows the true value? - */ - put_word(res, 2); /* ResType */ - put_word(res, curg->ncursor); -#if 0 - for(cur = curg->cursorlist; cur; cur = cur->next) -#else - cur = curg->cursorlist; - while(cur->next) - cur = cur->next; - for(; cur; cur = cur->prev) -#endif - { - put_word(res, cur->width); - /* FIXME: The height of a cursor is half the size of - * the bitmap's height. BRC puts the height from the - * BITMAPINFOHEADER here instead of the cursorfile's - * height. MS doesn't seem to care... - */ - put_word(res, cur->height); - /* FIXME: The next two are reversed in BRC and I don't - * know why. Probably a bug. But, we can safely ignore - * it because win16 does not support color cursors. - * A warning should have been generated by the parser. - */ - put_word(res, cur->planes); - put_word(res, cur->bits); - /* FIXME: The +4 is the hotspot in the cursor resource. - * However, I cound not find this in the documentation. - * The hotspot bytes must either be included or MS - * doesn't care. - */ - put_dword(res, cur->data->size +4); - put_word(res, cur->id); - } - } - else /* win16 */ - { - put_word(res, 0); /* Reserved */ - put_word(res, 2); /* ResType */ - put_word(res, curg->ncursor); -#if 0 - for(cur = curg->cursorlist; cur; cur = cur->next) -#else - cur = curg->cursorlist; - while(cur->next) - cur = cur->next; - for(; cur; cur = cur->prev) -#endif - { - put_word(res, cur->width); - /* FIXME: The height of a cursor is half the size of - * the bitmap's height. BRC puts the height from the - * BITMAPINFOHEADER here instead of the cursorfile's - * height. MS doesn't seem to care... - */ - put_word(res, cur->height); - /* FIXME: The next two are reversed in BRC and I don't - * know why. Probably a bug. But, we can safely ignore - * it because win16 does not support color cursors. - * A warning should have been generated by the parser. - */ - put_word(res, cur->planes); - put_word(res, cur->bits); - /* FIXME: The +4 is the hotspot in the cursor resource. - * However, I cound not find this in the documentation. - * The hotspot bytes must either be included or MS - * doesn't care. - */ - put_dword(res, cur->data->size +4); - put_word(res, cur->id); - } - } - SetResSize(res, restag); /* Set ResourceSize */ - if(win32) - put_pad(res); - - return res; -} - -/* - ***************************************************************************** - * Function : cursor2res - * Syntax : res_t *cursor2res(cursor_t *cur) - * Input : - * cur - The cursor descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *cursor2res(cursor_t *cur) -{ - int restag; - res_t *res; - name_id_t name; - - assert(cur != NULL); - - res = new_res(); - name.type = name_ord; - name.name.i_name = cur->id; - restag = put_res_header(res, WRC_RT_CURSOR, NULL, &name, WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, &(cur->lvc)); - put_word(res, cur->xhot); - put_word(res, cur->yhot); - put_raw_data(res, cur->data, 0); - - SetResSize(res, restag); /* Set ResourceSize */ - if(win32) - put_pad(res); - - return res; -} - -/* - ***************************************************************************** - * Function : icongroup2res - * Syntax : res_t *icongroup2res(name_id_t *name, icon_group_t *icog) - * Input : - * name - Name/ordinal of the resource - * icog - The icon group descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *icongroup2res(name_id_t *name, icon_group_t *icog) -{ - int restag; - res_t *res; - icon_t *ico; - assert(name != NULL); - assert(icog != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_GROUP_ICON, NULL, name, icog->memopt, &(icog->lvc)); - if(win32) - { - put_word(res, 0); /* Reserved */ - /* FIXME: The ResType in the NEWHEADER structure should - * contain 14 according to the MS win32 doc. This is - * not the case with the BRC compiler and I really doubt - * the latter. Putting one here is compliant to win16 spec, - * but who knows the true value? - */ - put_word(res, 1); /* ResType */ - put_word(res, icog->nicon); - for(ico = icog->iconlist; ico; ico = ico->next) - { - put_byte(res, ico->width); - put_byte(res, ico->height); - put_byte(res, ico->nclr); - put_byte(res, 0); /* Reserved */ - put_word(res, ico->planes); - put_word(res, ico->bits); - put_dword(res, ico->data->size); - put_word(res, ico->id); - } - } - else /* win16 */ - { - put_word(res, 0); /* Reserved */ - put_word(res, 1); /* ResType */ - put_word(res, icog->nicon); - for(ico = icog->iconlist; ico; ico = ico->next) - { - put_byte(res, ico->width); - put_byte(res, ico->height); - put_byte(res, ico->nclr); - put_byte(res, 0); /* Reserved */ - put_word(res, ico->planes); - put_word(res, ico->bits); - put_dword(res, ico->data->size); - put_word(res, ico->id); - } - } - SetResSize(res, restag); /* Set ResourceSize */ - if(win32) - put_pad(res); - - return res; -} - -/* - ***************************************************************************** - * Function : icon2res - * Syntax : res_t *icon2res(icon_t *ico) - * Input : - * ico - The icon descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *icon2res(icon_t *ico) -{ - int restag; - res_t *res; - name_id_t name; - - assert(ico != NULL); - - res = new_res(); - name.type = name_ord; - name.name.i_name = ico->id; - restag = put_res_header(res, WRC_RT_ICON, NULL, &name, WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, &(ico->lvc)); - put_raw_data(res, ico->data, 0); - - SetResSize(res, restag); /* Set ResourceSize */ - if(win32) - put_pad(res); - - return res; -} - -/* - ***************************************************************************** - * Function : anicurico2res - * Syntax : res_t *anicurico2res(name_id_t *name, ani_curico_t *ani) - * Input : - * name - Name/ordinal of the resource - * ani - The animated object descriptor - * Output : New .res format structure - * Description : - * Remarks : The endian of the object's structures have been converted - * by the loader. - * There are rumors that win311 could handle animated stuff. - * That is why they are generated for both win16 and win32 - * compile. - ***************************************************************************** -*/ -static res_t *anicurico2res(name_id_t *name, ani_curico_t *ani, enum res_e type) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(ani != NULL); - - res = new_res(); - restag = put_res_header(res, type == res_anicur ? WRC_RT_ANICURSOR : WRC_RT_ANIICON, - NULL, name, ani->memopt, NULL); - put_raw_data(res, ani->data, 0); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : bitmap2res - * Syntax : res_t *bitmap2res(name_id_t *name, bitmap_t *bmp) - * Input : - * name - Name/ordinal of the resource - * bmp - The bitmap descriptor - * Output : New .res format structure - * Description : - * Remarks : The endian of the bitmap structures have been converted - * by the loader. - ***************************************************************************** -*/ -static res_t *bitmap2res(name_id_t *name, bitmap_t *bmp) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(bmp != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_BITMAP, NULL, name, bmp->memopt, &(bmp->data->lvc)); - if(bmp->data->data[0] == 'B' - && bmp->data->data[1] == 'M' - && ((BITMAPFILEHEADER *)bmp->data->data)->bfSize == bmp->data->size - && bmp->data->size >= sizeof(BITMAPFILEHEADER)) - { - /* The File header is still attached, don't write it */ - put_raw_data(res, bmp->data, sizeof(BITMAPFILEHEADER)); - } - else - { - put_raw_data(res, bmp->data, 0); - } - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : font2res - * Syntax : res_t *font2res(name_id_t *name, font_t *fnt) - * Input : - * name - Name/ordinal of the resource - * fnt - The font descriptor - * Output : New .res format structure - * Description : - * Remarks : The data has been prepared just after parsing. - ***************************************************************************** -*/ -static res_t *font2res(name_id_t *name, font_t *fnt) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(fnt != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_FONT, NULL, name, fnt->memopt, &(fnt->data->lvc)); - put_raw_data(res, fnt->data, 0); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : fontdir2res - * Syntax : res_t *fontdir2res(name_id_t *name, fontdir_t *fnd) - * Input : - * name - Name/ordinal of the resource - * fntdir - The fontdir descriptor - * Output : New .res format structure - * Description : - * Remarks : The data has been prepared just after parsing. - ***************************************************************************** -*/ -static res_t *fontdir2res(name_id_t *name, fontdir_t *fnd) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(fnd != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_FONTDIR, NULL, name, fnd->memopt, &(fnd->data->lvc)); - put_raw_data(res, fnd->data, 0); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : html2res - * Syntax : res_t *html2res(name_id_t *name, html_t *html) - * Input : - * name - Name/ordinal of the resource - * rdt - The html descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *html2res(name_id_t *name, html_t *html) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(html != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_HTML, NULL, name, html->memopt, &(html->data->lvc)); - put_raw_data(res, html->data, 0); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : rcdata2res - * Syntax : res_t *rcdata2res(name_id_t *name, rcdata_t *rdt) - * Input : - * name - Name/ordinal of the resource - * rdt - The rcdata descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *rcdata2res(name_id_t *name, rcdata_t *rdt) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(rdt != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_RCDATA, NULL, name, rdt->memopt, &(rdt->data->lvc)); - put_raw_data(res, rdt->data, 0); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : messagetable2res - * Syntax : res_t *messagetable2res(name_id_t *name, messagetable_t *msg) - * Input : - * name - Name/ordinal of the resource - * msg - The messagetable descriptor - * Output : New .res format structure - * Description : - * Remarks : The data has been converted to the appropriate endian - * after it was parsed. - ***************************************************************************** -*/ -static res_t *messagetable2res(name_id_t *name, messagetable_t *msg) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(msg != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_MESSAGETABLE, NULL, name, msg->memopt, &(msg->data->lvc)); - put_raw_data(res, msg->data, 0); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : stringtable2res - * Syntax : res_t *stringtable2res(stringtable_t *stt) - * Input : - * stt - The stringtable descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *stringtable2res(stringtable_t *stt) -{ - res_t *res; - name_id_t name; - int i; - int restag; - HOST_DWORD lastsize = 0; - - assert(stt != NULL); - res = new_res(); - - for(; stt; stt = stt->next) - { - if(!stt->nentries) - { - warning("Empty internal stringtable\n"); - continue; - } - name.type = name_ord; - name.name.i_name = (stt->idbase >> 4) + 1; - restag = put_res_header(res, WRC_RT_STRING, NULL, &name, stt->memopt, win32 ? &(stt->lvc) : NULL); - for(i = 0; i < stt->nentries; i++) - { - if(stt->entries[i].str && stt->entries[i].str->size) - { - put_string(res, stt->entries[i].str, win32 ? str_unicode : str_char, - FALSE, win32 ? stt->lvc.language : NULL); - } - else - { - if (win32) - put_word(res, 0); - else - put_byte(res, 0); - } - } - /* Set ResourceSize */ - SetResSize(res, restag - lastsize); - if(win32) - put_pad(res); - lastsize = res->size; - } - return res; -} - -/* - ***************************************************************************** - * Function : user2res - * Syntax : res_t *user2res(name_id_t *name, user_t *usr) - * Input : - * name - Name/ordinal of the resource - * usr - The userresource descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *user2res(name_id_t *name, user_t *usr) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(usr != NULL); - - res = new_res(); - restag = put_res_header(res, 0, usr->type, name, usr->memopt, &(usr->data->lvc)); - put_raw_data(res, usr->data, 0); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : versionblock2res - * Syntax : void versionblock2res(res_t *res, ver_block_t *blk) - * Input : - * res - Binary resource to write to - * blk - The version block to be written - * Output : - * Description : - * Remarks : Self recursive - ***************************************************************************** -*/ -static void versionblock2res(res_t *res, ver_block_t *blk, int level, const language_t *lang) -{ - ver_value_t *val; - int blksizetag; - int valblksizetag; - int valvalsizetag; - int tag; - int i; - - blksizetag = res->size; - put_word(res, 0); /* Will be overwritten later */ - put_word(res, 0); - if(win32) - put_word(res, 0); /* level ? */ - put_string(res, blk->name, win32 ? str_unicode : str_char, TRUE, lang); - put_pad(res); - for(val = blk->values; val; val = val->next) - { - if(val->type == val_str) - { - valblksizetag = res->size; - put_word(res, 0); /* Will be overwritten later */ - valvalsizetag = res->size; - put_word(res, 0); /* Will be overwritten later */ - if(win32) - { - put_word(res, level); - } - put_string(res, val->key, win32 ? str_unicode : str_char, TRUE, lang); - put_pad(res); - tag = res->size; - put_string(res, val->value.str, win32 ? str_unicode : str_char, TRUE, lang); - if(win32) - set_word(res, valvalsizetag, (WORD)((res->size - tag) >> 1)); - else - set_word(res, valvalsizetag, (WORD)(res->size - tag)); - set_word(res, valblksizetag, (WORD)(res->size - valblksizetag)); - put_pad(res); - } - else if(val->type == val_words) - { - valblksizetag = res->size; - put_word(res, 0); /* Will be overwritten later */ - valvalsizetag = res->size; - put_word(res, 0); /* Will be overwritten later */ - if(win32) - { - put_word(res, level); - } - put_string(res, val->key, win32 ? str_unicode : str_char, TRUE, lang); - put_pad(res); - tag = res->size; - for(i = 0; i < val->value.words->nwords; i++) - { - put_word(res, val->value.words->words[i]); - } - set_word(res, valvalsizetag, (WORD)(res->size - tag)); - set_word(res, valblksizetag, (WORD)(res->size - valblksizetag)); - put_pad(res); - } - else if(val->type == val_block) - { - versionblock2res(res, val->value.block, level+1, lang); - } - else - { - internal_error(__FILE__, __LINE__, "Invalid value indicator %d in VERSIONINFO\n", val->type); - } - } - - /* Set blocksize */ - set_word(res, blksizetag, (WORD)(res->size - blksizetag)); -} - -/* - ***************************************************************************** - * Function : versioninfo2res - * Syntax : res_t *versioninfo2res(name_id_t *name, versioninfo_t *ver) - * Input : - * name - Name/ordinal of the resource - * ver - The versioninfo descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *versioninfo2res(name_id_t *name, versioninfo_t *ver) -{ - int restag; - int rootblocksizetag; - int valsizetag; - int tag; - res_t *res; - string_t vsvi; - ver_block_t *blk; - - assert(name != NULL); - assert(ver != NULL); - - vsvi.type = str_char; - vsvi.str.cstr = xstrdup("VS_VERSION_INFO"); - vsvi.size = 15; /* Excl. termination */ - - res = new_res(); - restag = put_res_header(res, WRC_RT_VERSION, NULL, name, ver->memopt, &(ver->lvc)); - rootblocksizetag = res->size; - put_word(res, 0); /* BlockSize filled in later */ - valsizetag = res->size; - put_word(res, 0); /* ValueSize filled in later*/ - if(win32) - put_word(res, 0); /* Tree-level ? */ - put_string(res, &vsvi, win32 ? str_unicode : str_char, - TRUE, win32 ? ver->lvc.language : NULL); - if(win32) - put_pad(res); - tag = res->size; - put_dword(res, VS_FFI_SIGNATURE); - put_dword(res, VS_FFI_STRUCVERSION); - put_dword(res, (ver->filever_maj1 << 16) + (ver->filever_maj2 & 0xffff)); - put_dword(res, (ver->filever_min1 << 16) + (ver->filever_min2 & 0xffff)); - put_dword(res, (ver->prodver_maj1 << 16) + (ver->prodver_maj2 & 0xffff)); - put_dword(res, (ver->prodver_min1 << 16) + (ver->prodver_min2 & 0xffff)); - put_dword(res, ver->fileflagsmask); - put_dword(res, ver->fileflags); - put_dword(res, ver->fileos); - put_dword(res, ver->filetype); - put_dword(res, ver->filesubtype); - put_dword(res, 0); /* FileDateMS */ - put_dword(res, 0); /* FileDateLS */ - /* Set ValueSize */ - set_word(res, valsizetag, (WORD)(res->size - tag)); - /* Descend into the blocks */ - for(blk = ver->blocks; blk; blk = blk->next) - versionblock2res(res, blk, 0, win32 ? ver->lvc.language : NULL); - /* Set root block's size */ - set_word(res, rootblocksizetag, (WORD)(res->size - rootblocksizetag)); - - SetResSize(res, restag); - if(win32) - put_pad(res); - - free(vsvi.str.cstr); - return res; -} - -/* - ***************************************************************************** - * Function : toolbaritem2res - * Syntax : void toolbaritem2res(res_t *res, toolbar_item_t *tbitem) - * Input : - * Output : nop - * Description : - * Remarks : Self recursive - ***************************************************************************** -*/ -static void toolbaritem2res(res_t *res, toolbar_item_t *tbitem) -{ - toolbar_item_t *itm = tbitem; - assert(win32 != 0); - while(itm) - { - put_word(res, itm->id); - itm = itm->next; - } - -} - -/* - ***************************************************************************** - * Function : toolbar2res - * Syntax : res_t *toolbar2res(name_id_t *name, toolbar_t *toolbar) - * Input : - * name - Name/ordinal of the resource - * toolbar - The toolbar descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *toolbar2res(name_id_t *name, toolbar_t *toolbar) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(toolbar != NULL); - - res = new_res(); - if(win32) - { - restag = put_res_header(res, WRC_RT_TOOLBAR, NULL, name, toolbar->memopt, &(toolbar->lvc)); - - put_word(res, 1); /* Menuheader: Version */ - put_word(res, toolbar->button_width); /* (in pixels?) */ - put_word(res, toolbar->button_height); /* (in pixels?) */ - put_word(res, toolbar->nitems); - put_pad(res); - toolbaritem2res(res, toolbar->items); - /* Set ResourceSize */ - SetResSize(res, restag); - put_pad(res); - } - else /* win16 */ - { - /* Do not generate anything in 16-bit mode */ - free(res->data); - free(res); - return NULL; - } - return res; -} - -/* - ***************************************************************************** - * Function : dlginit2res - * Syntax : res_t *dlginit2res(name_id_t *name, dlginit_t *dit) - * Input : - * name - Name/ordinal of the resource - * rdt - The dlginit descriptor - * Output : New .res format structure - * Description : - * Remarks : - ***************************************************************************** -*/ -static res_t *dlginit2res(name_id_t *name, dlginit_t *dit) -{ - int restag; - res_t *res; - assert(name != NULL); - assert(dit != NULL); - - res = new_res(); - restag = put_res_header(res, WRC_RT_DLGINIT, NULL, name, dit->memopt, &(dit->data->lvc)); - put_raw_data(res, dit->data, 0); - /* Set ResourceSize */ - SetResSize(res, restag); - if(win32) - put_pad(res); - return res; -} - -/* - ***************************************************************************** - * Function : prep_nid_for_label - * Syntax : char *prep_nid_for_label(const name_id_t *nid) - * Input : - * Output : - * Description : Converts a resource name into the first 32 (or less) - * characters of the name with conversions. - * Remarks : - ***************************************************************************** -*/ -#define MAXNAMELEN 32 -char *prep_nid_for_label(const name_id_t *nid) -{ - static char buf[MAXNAMELEN+1]; - - assert(nid != NULL); - - if(nid->type == name_str && nid->name.s_name->type == str_unicode) - { - WCHAR *sptr; - int i; - sptr = nid->name.s_name->str.wstr; - buf[0] = '\0'; - for(i = 0; *sptr && i < MAXNAMELEN; i++) - { - if((unsigned)*sptr < 0x80 && isprint(*sptr & 0xff)) - buf[i] = *sptr++; - else - warning("Resourcename (str_unicode) contain unprintable characters or invalid translation, ignored\n"); - } - buf[i] = '\0'; - } - else if(nid->type == name_str && nid->name.s_name->type == str_char) - { - char *cptr; - int i; - cptr = nid->name.s_name->str.cstr; - buf[0] = '\0'; - for(i = 0; *cptr && i < MAXNAMELEN; i++) - { - if((unsigned)*cptr < 0x80 && isprint(*cptr & 0xff)) - buf[i] = *cptr++; - else - warning("Resourcename (str_char) contain unprintable characters, ignored\n"); - } - buf[i] = '\0'; - } - else if(nid->type == name_ord) - { - sprintf(buf, "%u", nid->name.i_name); - } - else - { - internal_error(__FILE__, __LINE__, "Resource name_id with invalid type %d\n", nid->type); - } - return buf; -} -#undef MAXNAMELEN - -/* - ***************************************************************************** - * Function : make_c_name - * Syntax : char *make_c_name(const char *base, const name_id_t *nid, const language_t *lan) - * Input : - * Output : - * Description : Converts a resource name into a valid c-identifier in the - * form "_base_nid". - * Remarks : - ***************************************************************************** -*/ -char *make_c_name(const char *base, const name_id_t *nid, const language_t *lan) -{ - int nlen; - char *buf; - char *ret; - char lanbuf[6]; - - sprintf(lanbuf, "%d", lan ? MAKELANGID(lan->id, lan->sub) : 0); - buf = prep_nid_for_label(nid); - nlen = strlen(buf) + strlen(lanbuf); - nlen += strlen(base) + 4; /* three time '_' and '\0' */ - ret = (char *)xmalloc(nlen); - strcpy(ret, "_"); - strcat(ret, base); - strcat(ret, "_"); - strcat(ret, buf); - strcat(ret, "_"); - strcat(ret, lanbuf); - return ret; -} - -/* - ***************************************************************************** - * Function : get_c_typename - * Syntax : const char *get_c_typename(enum res_e type) - * Input : - * Output : - * Description : Convert resource enum to char string to be used in c-name - * creation. - * Remarks : - ***************************************************************************** -*/ -const char *get_c_typename(enum res_e type) -{ - switch(type) - { - case res_acc: return "Acc"; - case res_anicur:return "AniCur"; - case res_aniico:return "AniIco"; - case res_bmp: return "Bmp"; - case res_cur: return "Cur"; - case res_curg: return "CurGrp"; - case res_dlg: - case res_dlgex: return "Dlg"; - case res_fnt: return "Fnt"; - case res_fntdir:return "FntDir"; - case res_ico: return "Ico"; - case res_icog: return "IcoGrp"; - case res_men: - case res_menex: return "Men"; - case res_rdt: return "RCDat"; - case res_stt: return "StrTab"; - case res_usr: return "Usr"; - case res_msg: return "MsgTab"; - case res_ver: return "VerInf"; - case res_toolbar: return "TlBr"; - case res_dlginit: return "DlgInit"; - default: return "Oops"; - } -} - -/* - ***************************************************************************** - * Function : resources2res - * Syntax : void resources2res(resource_t *top) - * Input : - * top - The resource-tree to convert - * Output : - * Description : Convert logical resource descriptors into binary data - * Remarks : - ***************************************************************************** -*/ -void resources2res(resource_t *top) -{ - while(top) - { - switch(top->type) - { - case res_acc: - if(!top->binres) - top->binres = accelerator2res(top->name, top->res.acc); - break; - case res_bmp: - if(!top->binres) - top->binres = bitmap2res(top->name, top->res.bmp); - break; - case res_cur: - if(!top->binres) - top->binres = cursor2res(top->res.cur); - break; - case res_curg: - if(!top->binres) - top->binres = cursorgroup2res(top->name, top->res.curg); - break; - case res_dlg: - if(!top->binres) - top->binres = dialog2res(top->name, top->res.dlg); - break; - case res_dlgex: - if(!top->binres) - top->binres = dialogex2res(top->name, top->res.dlgex); - break; - case res_fnt: - if(!top->binres) - top->binres = font2res(top->name, top->res.fnt); - break; - case res_fntdir: - if(!top->binres) - top->binres = fontdir2res(top->name, top->res.fnd); - break; - case res_ico: - if(!top->binres) - top->binres = icon2res(top->res.ico); - break; - case res_icog: - if(!top->binres) - top->binres = icongroup2res(top->name, top->res.icog); - break; - case res_men: - if(!top->binres) - top->binres = menu2res(top->name, top->res.men); - break; - case res_menex: - if(!top->binres) - top->binres = menuex2res(top->name, top->res.menex); - break; - case res_html: - if(!top->binres) - top->binres = html2res(top->name, top->res.html); - break; - case res_rdt: - if(!top->binres) - top->binres = rcdata2res(top->name, top->res.rdt); - break; - case res_stt: - if(!top->binres) - top->binres = stringtable2res(top->res.stt); - break; - case res_usr: - if(!top->binres) - top->binres = user2res(top->name, top->res.usr); - break; - case res_msg: - if(!top->binres) - top->binres = messagetable2res(top->name, top->res.msg); - break; - case res_ver: - if(!top->binres) - top->binres = versioninfo2res(top->name, top->res.ver); - break; - case res_toolbar: - if(!top->binres) - top->binres = toolbar2res(top->name, top->res.tbt); - break; - case res_dlginit: - if(!top->binres) - top->binres = dlginit2res(top->name, top->res.dlgi); - break; - case res_anicur: - case res_aniico: - if(!top->binres) - top->binres = anicurico2res(top->name, top->res.ani, top->type); - break; - default: - internal_error(__FILE__, __LINE__, "Unknown resource type encountered %d in binary res generation\n", top->type); - } - top->c_name = make_c_name(get_c_typename(top->type), top->name, top->lan); - top = top->next; - } -} diff --git a/reactos/tools/wrc/genres.h b/reactos/tools/wrc/genres.h deleted file mode 100644 index f8007d14cd9..00000000000 --- a/reactos/tools/wrc/genres.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Generate resource prototypes - * - * 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 __WRC_GENRES_H -#define __WRC_GENRES_H - -#include "wrctypes.h" - -res_t *new_res(void); -res_t *grow_res(res_t *r, unsigned int add); -void put_byte(res_t *res, unsigned c); -void put_word(res_t *res, unsigned w); -void put_dword(res_t *res, unsigned d); -void resources2res(resource_t *top); -const char *get_c_typename(enum res_e type); -char *make_c_name(const char *base, const name_id_t *nid, const language_t *lan); -char *prep_nid_for_label(const name_id_t *nid); - -#endif diff --git a/reactos/tools/wrc/lex.yy.c b/reactos/tools/wrc/lex.yy.c deleted file mode 100644 index 5e979fed17e..00000000000 --- a/reactos/tools/wrc/lex.yy.c +++ /dev/null @@ -1,2635 +0,0 @@ -#define yy_create_buffer parser__create_buffer -#define yy_delete_buffer parser__delete_buffer -#define yy_scan_buffer parser__scan_buffer -#define yy_scan_string parser__scan_string -#define yy_scan_bytes parser__scan_bytes -#define yy_flex_debug parser__flex_debug -#define yy_init_buffer parser__init_buffer -#define yy_flush_buffer parser__flush_buffer -#define yy_load_buffer_state parser__load_buffer_state -#define yy_switch_to_buffer parser__switch_to_buffer -#define yyin parser_in -#define yyleng parser_leng -#define yylex parser_lex -#define yyout parser_out -#define yyrestart parser_restart -#define yytext parser_text - -#line 19 "lex.yy.c" -/* A lexical scanner generated by flex */ - -/* Scanner skeleton version: - * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.85 95/04/24 10:48:47 vern Exp $ - */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 - -#include - - -/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ -#ifdef c_plusplus -#ifndef __cplusplus -#define __cplusplus -#endif -#endif - - -#ifdef __cplusplus - -#include -#include - -/* Use prototypes in function declarations. */ -#define YY_USE_PROTOS - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -#if __STDC__ - -#define YY_USE_PROTOS -#define YY_USE_CONST - -#endif /* __STDC__ */ -#endif /* ! __cplusplus */ - -#ifdef __TURBOC__ - #pragma warn -rch - #pragma warn -use -#include -#include -#define YY_USE_CONST -#define YY_USE_PROTOS -#endif - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - - -#ifdef YY_USE_PROTOS -#define YY_PROTO(proto) proto -#else -#define YY_PROTO(proto) () -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yy_start = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yy_start - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#define YY_BUF_SIZE 16384 - -typedef struct yy_buffer_state *YY_BUFFER_STATE; - -extern int yyleng; -extern FILE *yyin, *yyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - -/* The funky do-while in the following #define is used to turn the definition - * int a single C statement (which needs a semi-colon terminator). This - * avoids problems with code like: - * - * if ( condition_holds ) - * yyless( 5 ); - * else - * do_something_else(); - * - * Prior to using the do-while the compiler would get upset at the - * "else" because it interpreted the "if" statement as being all - * done when it reached the ';' after the yyless() call. - */ - -/* Return all but the first 'n' matched characters back to the input stream. */ - -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - *yy_cp = yy_hold_char; \ - yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, yytext_ptr ) - -/* The following is because we cannot portably get our hands on size_t - * (without autoconf's help, which isn't available because we want - * flex-generated scanners to compile on their own). - */ -typedef unsigned int yy_size_t; - - -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - }; - -static YY_BUFFER_STATE yy_current_buffer = 0; - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - */ -#define YY_CURRENT_BUFFER yy_current_buffer - - -/* yy_hold_char holds the character lost when yytext is formed. */ -static char yy_hold_char; - -static int yy_n_chars; /* number of characters read into yy_ch_buf */ - - -int yyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 1; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow yywrap()'s to do buffer switches - * instead of setting up a fresh yyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void yyrestart YY_PROTO(( FILE *input_file )); - -void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); -void yy_load_buffer_state YY_PROTO(( void )); -YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); -void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); -void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); -void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); -#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) - -YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); -YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str )); -YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); - -static void *yy_flex_alloc YY_PROTO(( yy_size_t )); -static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); -static void yy_flex_free YY_PROTO(( void * )); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) - - -#define yywrap() 1 -#define YY_SKIP_YYWRAP -typedef unsigned char YY_CHAR; -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; -typedef int yy_state_type; -extern char *yytext; -#define yytext_ptr yytext - -static yy_state_type yy_get_previous_state YY_PROTO(( void )); -static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); -static int yy_get_next_buffer YY_PROTO(( void )); -static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yytext_ptr = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ - yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - yy_c_buf_p = yy_cp; - -#define YY_NUM_RULES 80 -#define YY_END_OF_BUFFER 81 -static yyconst short int yy_accept[189] = - { 0, - 0, 0, 0, 0, 0, 0, 0, 0, 70, 70, - 0, 0, 3, 3, 5, 5, 9, 9, 81, 78, - 77, 76, 41, 63, 17, 18, 14, 14, 74, 17, - 18, 12, 13, 77, 2, 58, 62, 43, 79, 39, - 40, 21, 79, 68, 66, 67, 64, 68, 70, 72, - 71, 11, 10, 11, 11, 2, 3, 79, 5, 5, - 9, 9, 77, 17, 18, 69, 18, 14, 14, 17, - 17, 74, 19, 77, 2, 2, 0, 58, 42, 59, - 56, 48, 56, 56, 44, 47, 49, 50, 51, 52, - 53, 54, 55, 56, 39, 20, 36, 34, 26, 34, - - 34, 22, 25, 27, 28, 29, 30, 31, 32, 33, - 34, 66, 65, 70, 71, 71, 73, 0, 3, 5, - 5, 9, 9, 9, 9, 9, 75, 18, 16, 15, - 0, 61, 48, 57, 60, 44, 47, 46, 38, 26, - 35, 37, 22, 25, 24, 5, 9, 8, 9, 9, - 16, 15, 0, 44, 45, 22, 24, 5, 8, 9, - 9, 0, 22, 24, 5, 9, 9, 0, 22, 23, - 5, 9, 9, 7, 0, 22, 5, 9, 7, 1, - 5, 9, 4, 9, 6, 4, 6, 0 - } ; - -static yyconst int yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 2, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 5, 6, 1, 1, 1, 7, 8, - 9, 10, 1, 1, 1, 11, 12, 13, 14, 14, - 14, 14, 14, 14, 14, 15, 16, 1, 17, 1, - 1, 1, 1, 1, 18, 18, 18, 18, 18, 18, - 11, 11, 11, 11, 11, 19, 11, 11, 20, 11, - 11, 11, 11, 11, 11, 11, 11, 21, 11, 11, - 1, 22, 1, 1, 23, 1, 24, 25, 26, 27, - - 28, 29, 30, 11, 11, 11, 11, 31, 32, 33, - 34, 35, 11, 36, 11, 37, 38, 39, 11, 40, - 11, 11, 41, 1, 42, 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, 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, 1, 1 - } ; - -static yyconst int yy_meta[43] = - { 0, - 1, 1, 2, 1, 3, 1, 1, 1, 1, 4, - 5, 5, 6, 6, 6, 6, 1, 6, 5, 5, - 5, 7, 5, 6, 6, 6, 6, 6, 6, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 1, 1 - } ; - -static yyconst short int yy_base[222] = - { 0, - 0, 41, 41, 45, 46, 49, 70, 98, 50, 52, - 53, 126, 392, 385, 54, 55, 56, 58, 387, 608, - 74, 608, 608, 608, 57, 77, 127, 70, 0, 70, - 376, 608, 608, 113, 116, 0, 608, 104, 165, 0, - 608, 129, 203, 608, 133, 608, 608, 0, 0, 608, - 140, 608, 608, 366, 151, 152, 0, 608, 0, 341, - 0, 242, 158, 81, 363, 608, 280, 143, 153, 160, - 311, 0, 608, 182, 189, 195, 329, 0, 207, 608, - 608, 211, 361, 358, 207, 234, 608, 608, 608, 608, - 608, 608, 608, 0, 0, 229, 608, 608, 233, 358, - - 346, 238, 246, 608, 608, 608, 608, 608, 608, 608, - 0, 261, 608, 0, 254, 258, 608, 269, 0, 0, - 323, 0, 339, 376, 303, 283, 0, 392, 279, 140, - 295, 608, 270, 608, 608, 263, 289, 0, 608, 292, - 608, 608, 293, 298, 0, 272, 340, 0, 270, 266, - 154, 173, 253, 302, 608, 332, 0, 244, 0, 221, - 226, 206, 343, 0, 194, 188, 358, 201, 355, 608, - 190, 179, 370, 0, 326, 368, 173, 163, 0, 330, - 168, 401, 0, 402, 0, 0, 0, 608, 434, 441, - 448, 455, 462, 469, 476, 483, 486, 490, 497, 504, - - 510, 517, 523, 186, 530, 537, 544, 551, 558, 565, - 139, 138, 572, 130, 115, 579, 101, 64, 586, 593, - 600 - } ; - -static yyconst short int yy_def[222] = - { 0, - 188, 1, 189, 189, 190, 190, 191, 191, 192, 192, - 193, 193, 194, 194, 195, 195, 196, 196, 188, 188, - 188, 188, 188, 188, 197, 198, 197, 27, 199, 197, - 198, 188, 188, 188, 188, 200, 188, 188, 201, 202, - 188, 188, 203, 188, 188, 188, 188, 204, 205, 188, - 206, 188, 188, 188, 188, 188, 207, 188, 208, 208, - 209, 209, 188, 197, 198, 188, 210, 27, 197, 197, - 197, 199, 188, 188, 188, 188, 188, 200, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 211, 202, 188, 188, 188, 188, 188, - - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 212, 188, 188, 205, 206, 206, 188, 188, 207, 208, - 208, 209, 209, 209, 209, 209, 213, 210, 197, 71, - 188, 188, 188, 188, 188, 188, 188, 214, 188, 188, - 188, 188, 188, 188, 215, 208, 209, 216, 209, 209, - 197, 197, 188, 188, 188, 188, 217, 208, 216, 209, - 209, 188, 188, 218, 208, 209, 209, 188, 188, 188, - 208, 209, 209, 219, 188, 188, 208, 209, 219, 188, - 208, 209, 220, 209, 221, 220, 221, 0, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188 - } ; - -static yyconst short int yy_nxt[651] = - { 0, - 20, 21, 22, 21, 23, 20, 24, 20, 20, 20, - 25, 26, 27, 28, 28, 28, 29, 25, 30, 25, - 25, 31, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 32, 33, 34, 37, 34, 38, 35, 37, 41, 38, - 42, 41, 50, 42, 50, 53, 58, 58, 58, 51, - 58, 51, 39, 62, 54, 62, 39, 43, 65, 170, - 43, 45, 46, 45, 73, 63, 47, 63, 65, 60, - 60, 65, 48, 48, 48, 48, 66, 48, 67, 64, - 64, 65, 65, 48, 48, 48, 48, 48, 48, 45, - - 46, 45, 65, 64, 47, 79, 164, 79, 80, 64, - 48, 48, 48, 48, 74, 48, 74, 76, 75, 76, - 157, 48, 48, 48, 48, 48, 48, 55, 53, 55, - 96, 56, 96, 97, 112, 155, 112, 54, 65, 68, - 68, 68, 68, 145, 138, 69, 70, 71, 65, 116, - 77, 117, 118, 76, 118, 76, 75, 69, 152, 63, - 70, 63, 64, 64, 65, 65, 71, 82, 83, 84, - 152, 65, 129, 129, 65, 65, 64, 85, 85, 86, - 86, 65, 64, 74, 65, 74, 77, 75, 87, 88, - 76, 113, 76, 89, 65, 183, 76, 90, 76, 182, - - 91, 92, 181, 93, 94, 99, 100, 101, 79, 178, - 79, 132, 133, 177, 133, 102, 102, 103, 103, 136, - 136, 137, 137, 77, 175, 172, 104, 105, 171, 77, - 96, 106, 96, 139, 140, 107, 140, 168, 108, 109, - 167, 110, 111, 123, 166, 123, 137, 137, 137, 137, - 143, 143, 144, 144, 124, 124, 124, 124, 144, 144, - 144, 144, 112, 188, 112, 188, 165, 116, 125, 117, - 118, 133, 118, 133, 75, 154, 154, 137, 137, 126, - 127, 127, 162, 127, 127, 127, 127, 127, 127, 127, - 65, 129, 129, 140, 161, 140, 127, 151, 160, 158, - - 65, 137, 137, 137, 137, 156, 156, 144, 144, 151, - 144, 144, 144, 144, 137, 137, 137, 137, 153, 150, - 127, 127, 65, 130, 130, 130, 130, 180, 130, 180, - 149, 180, 65, 180, 130, 130, 130, 130, 130, 130, - 123, 147, 123, 147, 163, 163, 144, 144, 148, 146, - 142, 124, 124, 124, 124, 169, 169, 144, 144, 173, - 141, 173, 135, 134, 131, 125, 174, 176, 176, 144, - 144, 173, 188, 173, 121, 66, 126, 147, 174, 147, - 144, 144, 144, 144, 148, 188, 188, 58, 124, 124, - 124, 124, 127, 127, 58, 127, 127, 127, 127, 127, - - 127, 127, 184, 184, 184, 184, 188, 188, 127, 185, - 185, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 127, 127, 36, 36, 36, 36, 36, 36, - 36, 40, 40, 40, 40, 40, 40, 40, 44, 44, - 44, 44, 44, 44, 44, 49, 49, 49, 49, 49, - 49, 49, 52, 52, 52, 52, 52, 52, 52, 57, - 57, 57, 57, 57, 57, 57, 59, 59, 59, 59, - 59, 59, 59, 61, 61, 61, 61, 61, 61, 61, - 64, 64, 64, 65, 65, 65, 65, 72, 188, 72, - - 72, 72, 72, 72, 78, 188, 188, 78, 78, 78, - 81, 81, 81, 81, 81, 81, 81, 95, 188, 188, - 95, 95, 95, 98, 98, 98, 98, 98, 98, 98, - 114, 188, 114, 188, 114, 114, 114, 115, 188, 115, - 115, 115, 115, 115, 119, 188, 119, 119, 119, 119, - 119, 120, 188, 120, 120, 120, 120, 120, 122, 188, - 122, 122, 122, 122, 122, 128, 188, 128, 128, 128, - 128, 128, 127, 188, 127, 127, 127, 127, 127, 159, - 188, 159, 159, 159, 159, 159, 179, 188, 179, 179, - 179, 179, 179, 186, 188, 186, 186, 186, 186, 186, - - 187, 188, 187, 187, 187, 187, 187, 19, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188 - } ; - -static yyconst short int yy_chk[651] = - { 0, - 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, 2, 3, 2, 3, 2, 4, 5, 4, - 5, 6, 9, 6, 10, 11, 15, 16, 17, 9, - 18, 10, 3, 17, 11, 18, 4, 5, 25, 218, - 6, 7, 7, 7, 30, 21, 7, 21, 25, 15, - 16, 30, 7, 7, 7, 7, 26, 7, 26, 28, - 28, 30, 64, 7, 7, 7, 7, 7, 7, 8, - - 8, 8, 64, 28, 8, 38, 217, 38, 38, 28, - 8, 8, 8, 8, 34, 8, 34, 35, 34, 35, - 215, 8, 8, 8, 8, 8, 8, 12, 12, 12, - 42, 12, 42, 42, 45, 214, 45, 12, 27, 27, - 27, 27, 27, 212, 211, 27, 27, 27, 27, 51, - 35, 51, 55, 56, 55, 56, 55, 27, 130, 63, - 27, 63, 68, 68, 69, 151, 27, 39, 39, 39, - 130, 70, 70, 70, 69, 151, 68, 39, 39, 39, - 39, 70, 68, 74, 152, 74, 56, 74, 39, 39, - 75, 204, 75, 39, 152, 181, 76, 39, 76, 178, - - 39, 39, 177, 39, 39, 43, 43, 43, 79, 172, - 79, 79, 82, 171, 82, 43, 43, 43, 43, 85, - 85, 85, 85, 75, 168, 166, 43, 43, 165, 76, - 96, 43, 96, 96, 99, 43, 99, 162, 43, 43, - 161, 43, 43, 62, 160, 62, 86, 86, 86, 86, - 102, 102, 102, 102, 62, 62, 62, 62, 103, 103, - 103, 103, 112, 115, 112, 115, 158, 116, 62, 116, - 118, 133, 118, 133, 118, 136, 136, 136, 136, 62, - 67, 67, 153, 67, 67, 67, 67, 67, 67, 67, - 129, 129, 129, 140, 150, 140, 67, 129, 149, 146, - - 129, 137, 137, 137, 137, 143, 143, 143, 143, 129, - 144, 144, 144, 144, 154, 154, 154, 154, 131, 126, - 67, 67, 71, 71, 71, 71, 71, 175, 71, 175, - 125, 180, 71, 180, 71, 71, 71, 71, 71, 71, - 123, 147, 123, 147, 156, 156, 156, 156, 147, 121, - 101, 123, 123, 123, 123, 163, 163, 163, 163, 167, - 100, 167, 84, 83, 77, 123, 167, 169, 169, 169, - 169, 173, 65, 173, 60, 54, 123, 124, 173, 124, - 176, 176, 176, 176, 124, 31, 19, 14, 124, 124, - 124, 124, 128, 128, 13, 128, 128, 128, 128, 128, - - 128, 128, 182, 184, 182, 184, 0, 0, 128, 182, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 128, 128, 189, 189, 189, 189, 189, 189, - 189, 190, 190, 190, 190, 190, 190, 190, 191, 191, - 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, - 192, 192, 193, 193, 193, 193, 193, 193, 193, 194, - 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, - 195, 195, 195, 196, 196, 196, 196, 196, 196, 196, - 197, 197, 197, 198, 198, 198, 198, 199, 0, 199, - - 199, 199, 199, 199, 200, 0, 0, 200, 200, 200, - 201, 201, 201, 201, 201, 201, 201, 202, 0, 0, - 202, 202, 202, 203, 203, 203, 203, 203, 203, 203, - 205, 0, 205, 0, 205, 205, 205, 206, 0, 206, - 206, 206, 206, 206, 207, 0, 207, 207, 207, 207, - 207, 208, 0, 208, 208, 208, 208, 208, 209, 0, - 209, 209, 209, 209, 209, 210, 0, 210, 210, 210, - 210, 210, 213, 0, 213, 213, 213, 213, 213, 216, - 0, 216, 216, 216, 216, 216, 219, 0, 219, 219, - 219, 219, 219, 220, 0, 220, 220, 220, 220, 220, - - 221, 0, 221, 221, 221, 221, 221, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -char *yytext; -#line 1 "parser.l" -#define INITIAL 0 -/* -*-C-*- - * - * Copyright 1998-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: - * 21-May-2000 BS - Fixed the ident requirement of resource names - * which can be keywords. - * 30-Apr-2000 BS - Reintegration into the wine-tree - * 11-Jan-2000 BS - Very drastic cleanup because we don't have a - * preprocessor in here anymore. - * 02-Jan-2000 BS - Removed the preprocessor code - * 23-Dec-1999 BS - Removed the copyright for Martin von Loewis. - * There is really nothing left of his code in - * this parser. - * 20-Jun-1998 BS - Changed the filename conversion. Filenames are - * case-sensitive inder *nix, but not under dos. - * default behaviour is to convert to lower case. - * - All backslashes are converted to forward and - * both single and double slash is recognized as - * MS/Borland does. - * - Fixed a bug in 'yywf' case that prevented - * double quoted names to be scanned propperly. - * - * 19-May-1998 BS - Started to build a preprocessor. - * - Changed keyword processing completely to - * table-lookups. - * - * 20-Apr-1998 BS - Added ';' comment stripping - * - * 17-Apr-1998 BS - Made the win32 keywords optional when compiling in - * 16bit mode - * - * 15-Apr-1998 BS - Changed string handling to include escapes - * - Added unicode string handling (no codepage - * translation though). - * - 'Borrowed' the main idea of string scanning from - * the flex manual pages. - * - Added conditional handling of scanning depending - * on the state of the parser. This was mainly required - * to distinguish a file to load or raw data that - * follows. MS's definition of filenames is rather - * complex... It can be unquoted or double quoted. If - * double quoted, then the '\\' char is not automatically - * escaped according to Borland's rc compiler, but it - * accepts both "\\path\\file.rc" and "\path\file.rc". - * This makes life very hard! I go for the escaped - * version, as this seems to be the documented way... - * - Single quoted strings are now parsed and converted - * here. - * - Added comment stripping. The implementation is - * 'borrowed' from the flex manpages. - * - Rebuild string processing so that it may contain - * escaped '\0'. - */ -/* Exclusive string handling */ -#define tkstr 1 - -/* Exclusive unicode string handling */ -#define tklstr 2 - -/* Exclusive rcdata single quoted data handling */ -#define tkrcd 3 - -/* Exclusive comment eating... */ -#define comment 4 - -/* Set when stripping c-junk */ -#define pp_cstrip 5 - -/* Set when scanning #line style directives */ -#define pp_line 6 - -/* Set when scanning #pragma */ -#define pp_pragma 7 - -#define pp_code_page 8 - -#define YY_STACK_USED 1 -#define YY_NO_UNPUT 1 -#define YY_NO_TOP_STATE 1 -#define YY_NEVER_INTERACTIVE 1 -/* Some shortcut definitions */ -#line 96 "parser.l" - -/*#define LEX_DEBUG*/ - -#include -#include -#include -#include -#include - -#include "wine/unicode.h" -#include "wrc.h" -#include "utils.h" -#include "parser.h" -#include "newstruc.h" - -#include "parser.tab.h" - -/* Always update the current character position within a line */ -#define YY_USER_ACTION char_number+=yyleng; wanted_id = want_id; want_id = 0; - -static void addcchar(char c); -static void addwchar(WCHAR s); -static string_t *get_buffered_cstring(void); -static string_t *get_buffered_wstring(void); -static string_t *make_string(char *s); - -static char *cbuffer; /* Buffers for string collection */ -static int cbufidx; -static int cbufalloc = 0; -static WCHAR *wbuffer; -static int wbufidx; -static int wbufalloc = 0; - -static int current_codepage = -1; /* use language default */ - -/* - * This one is a bit tricky. - * We set 'want_id' in the parser to get the first - * identifier we get across in the scanner, but we - * also want it to be reset at nearly any token we - * see. Exceptions are: - * - newlines - * - comments - * - whitespace - * - * The scanner will automatically reset 'want_id' - * after *each* scanner reduction and puts is value - * into the var below. In this way we can see the - * state after the YY_RULE_SETUP (i.e. the user action; - * see above) and don't have to worry too much when - * it needs to be reset. - */ -static int wanted_id = 0; -static int save_wanted_id; /* To save across comment reductions */ - -struct keyword { - const char *keyword; - int token; - int isextension; - int needcase; - int alwayskw; -}; - -static struct keyword keywords[] = { - { "ACCELERATORS", tACCELERATORS, 0, 0, 0}, - { "ALT", tALT, 0, 0, 0}, - { "ASCII", tASCII, 0, 0, 0}, - { "AUTO3STATE", tAUTO3STATE, 1, 0, 0}, - { "AUTOCHECKBOX", tAUTOCHECKBOX, 1, 0, 0}, - { "AUTORADIOBUTTON", tAUTORADIOBUTTON, 1, 0, 0}, - { "BEGIN", tBEGIN, 0, 0, 0}, - { "BITMAP", tBITMAP, 0, 0, 0}, - { "BLOCK", tBLOCK, 0, 0, 0}, - { "BUTTON", tBUTTON, 1, 0, 0}, - { "CAPTION", tCAPTION, 0, 0, 0}, - { "CHARACTERISTICS", tCHARACTERISTICS, 1, 0, 0}, - { "CHECKBOX", tCHECKBOX, 0, 0, 0}, - { "CHECKED", tCHECKED, 0, 0, 0}, - { "CLASS", tCLASS, 0, 0, 0}, - { "COMBOBOX", tCOMBOBOX, 0, 0, 0}, - { "CONTROL", tCONTROL, 0, 0, 0}, - { "CTEXT", tCTEXT, 0, 0, 0}, - { "CURSOR", tCURSOR, 0, 0, 0}, - { "DEFPUSHBUTTON", tDEFPUSHBUTTON, 0, 0, 0}, - { "DIALOG", tDIALOG, 0, 0, 0}, - { "DIALOGEX", tDIALOGEX, 1, 0, 0}, - { "DISCARDABLE", tDISCARDABLE, 0, 0, 0}, - { "DLGINIT", tDLGINIT, 0, 0, 0}, - { "EDITTEXT", tEDITTEXT, 0, 0, 0}, - { "END", tEND, 0, 0, 0}, - { "EXSTYLE", tEXSTYLE, 0, 0, 0}, - { "FILEFLAGS", tFILEFLAGS, 0, 0, 0}, - { "FILEFLAGSMASK", tFILEFLAGSMASK, 0, 0, 0}, - { "FILEOS", tFILEOS, 0, 0, 0}, - { "FILESUBTYPE", tFILESUBTYPE, 0, 0, 0}, - { "FILETYPE", tFILETYPE, 0, 0, 0}, - { "FILEVERSION", tFILEVERSION, 0, 0, 0}, - { "FIXED", tFIXED, 0, 0, 0}, - { "FONT", tFONT, 0, 0, 0}, - { "FONTDIR", tFONTDIR, 0, 0, 0}, /* This is a Borland BRC extension */ - { "GRAYED", tGRAYED, 0, 0, 0}, - { "GROUPBOX", tGROUPBOX, 0, 0, 0}, - { "HELP", tHELP, 0, 0, 0}, - { "HTML", tHTML, 0, 0, 0}, - { "ICON", tICON, 0, 0, 0}, - { "IMPURE", tIMPURE, 0, 0, 0}, - { "INACTIVE", tINACTIVE, 0, 0, 0}, - { "LANGUAGE", tLANGUAGE, 1, 0, 1}, - { "LISTBOX", tLISTBOX, 0, 0, 0}, - { "LOADONCALL", tLOADONCALL, 0, 0, 0}, - { "LTEXT", tLTEXT, 0, 0, 0}, - { "MENU", tMENU, 0, 0, 0}, - { "MENUBARBREAK", tMENUBARBREAK, 0, 0, 0}, - { "MENUBREAK", tMENUBREAK, 0, 0, 0}, - { "MENUEX", tMENUEX, 1, 0, 0}, - { "MENUITEM", tMENUITEM, 0, 0, 0}, - { "MESSAGETABLE", tMESSAGETABLE, 1, 0, 0}, - { "MOVEABLE", tMOVEABLE, 0, 0, 0}, - { "NOINVERT", tNOINVERT, 0, 0, 0}, - { "NOT", tNOT, 0, 0, 0}, - { "POPUP", tPOPUP, 0, 0, 0}, - { "PRELOAD", tPRELOAD, 0, 0, 0}, - { "PRODUCTVERSION", tPRODUCTVERSION, 0, 0, 0}, - { "PURE", tPURE, 0, 0, 0}, - { "PUSHBUTTON", tPUSHBUTTON, 0, 0, 0}, - { "RADIOBUTTON", tRADIOBUTTON, 0, 0, 0}, - { "RCDATA", tRCDATA, 0, 0, 0}, - { "RTEXT", tRTEXT, 0, 0, 0}, - { "SCROLLBAR", tSCROLLBAR, 0, 0, 0}, - { "SEPARATOR", tSEPARATOR, 0, 0, 0}, - { "SHIFT", tSHIFT, 0, 0, 0}, - { "STATE3", tSTATE3, 1, 0, 0}, - { "STRING", tSTRING, 0, 0, 0}, - { "STRINGTABLE", tSTRINGTABLE, 0, 0, 1}, - { "STYLE", tSTYLE, 0, 0, 0}, - { "TOOLBAR", tTOOLBAR, 1, 0, 0}, - { "VALUE", tVALUE, 0, 0, 0}, - { "VERSION", tVERSION, 1, 0, 0}, - { "VERSIONINFO", tVERSIONINFO, 0, 0, 0}, - { "VIRTKEY", tVIRTKEY, 0, 0, 0} -}; - -#define NKEYWORDS (sizeof(keywords)/sizeof(keywords[0])) -#define KWP(p) ((const struct keyword *)(p)) -static int kw_cmp_func(const void *s1, const void *s2) -{ - int ret; - ret = strcasecmp(KWP(s1)->keyword, KWP(s2)->keyword); - if(!ret && (KWP(s1)->needcase || KWP(s2)->needcase)) - return strcmp(KWP(s1)->keyword, KWP(s2)->keyword); - else - return ret; -} - -#define KW_BSEARCH -#define DO_SORT -static struct keyword *iskeyword(char *kw) -{ - struct keyword *kwp; - struct keyword key; - key.keyword = kw; - key.needcase = 0; -#ifdef DO_SORT - { - /* Make sure that it is sorted for bsearsh */ - static int sorted = 0; - if(!sorted) - { - qsort(keywords, NKEYWORDS, sizeof(keywords[0]), kw_cmp_func); - sorted = 1; - } - } -#endif -#ifdef KW_BSEARCH - kwp = bsearch(&key, keywords, NKEYWORDS, sizeof(keywords[0]), kw_cmp_func); -#else - { - int i; - for(i = 0; i < NKEYWORDS; i++) - { - if(!kw_cmp_func(&key, &keywords[i])) - break; - } - if(i < NKEYWORDS) - kwp = &keywords[i]; - else - kwp = NULL; - } -#endif - - if(kwp == NULL || (kwp->isextension && !extensions)) - return NULL; - else - return kwp; -} - -/* - ************************************************************************** - * The flexer starts here - ************************************************************************** - */ -#line 891 "lex.yy.c" - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap YY_PROTO(( void )); -#else -extern int yywrap YY_PROTO(( void )); -#endif -#endif - -#ifndef YY_NO_UNPUT -static void yyunput YY_PROTO(( int c, char *buf_ptr )); -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus -static int yyinput YY_PROTO(( void )); -#else -static int input YY_PROTO(( void )); -#endif -#endif - -#if YY_STACK_USED -static int yy_start_stack_ptr = 0; -static int yy_start_stack_depth = 0; -static int *yy_start_stack = 0; -#ifndef YY_NO_PUSH_STATE -static void yy_push_state YY_PROTO(( int new_state )); -#endif -#ifndef YY_NO_POP_STATE -static void yy_pop_state YY_PROTO(( void )); -#endif -#ifndef YY_NO_TOP_STATE -static int yy_top_state YY_PROTO(( void )); -#endif - -#else -#define YY_NO_PUSH_STATE 1 -#define YY_NO_POP_STATE 1 -#define YY_NO_TOP_STATE 1 -#endif - -#ifdef YY_MALLOC_DECL -YY_MALLOC_DECL -#else -#if __STDC__ -#ifndef __cplusplus -#include -#endif -#else -/* Just try to get by without declaring the routines. This will fail - * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) - * or sizeof(void*) != sizeof(int). - */ -#endif -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ - -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( yy_current_buffer->yy_is_interactive ) \ - { \ - int c = '*', n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ - && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL int yylex YY_PROTO(( void )) -#endif - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - if ( yyleng > 0 ) \ - yy_current_buffer->yy_at_bol = \ - (yytext[yyleng - 1] == '\n'); \ - YY_USER_ACTION - -YY_DECL - { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 299 "parser.l" - - /* - * Catch the GCC-style line statements here and parse them. - * This has the advantage that you can #include at any - * stage in the resource file. - * The preprocessor generates line directives in the format: - * # "filename" - * - * Codes can be a sequence of: - * - 1 start of new file - * - 2 returning to previous - * - 3 system header - * - 4 interpret as C-code - * - * 4 is not used and 1 mutually excludes 2 - * Anyhow, we are not really interested in these at all - * because we only want to know the linenumber and - * filename. - */ -#line 1061 "lex.yy.c" - - if ( yy_init ) - { - yy_init = 0; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! yy_start ) - yy_start = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! yy_current_buffer ) - yy_current_buffer = - yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_load_buffer_state(); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = yy_c_buf_p; - - /* Support of yytext. */ - *yy_cp = yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yy_start; - yy_current_state += YY_AT_BOL(); -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 189 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 608 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - - -do_action: /* This label is used only to access EOF actions. */ - - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = yy_hold_char; - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - goto yy_find_action; - -case 1: -YY_RULE_SETUP -#line 318 "parser.l" -yy_push_state(pp_pragma); - YY_BREAK -case 2: -YY_RULE_SETUP -#line 319 "parser.l" -yy_push_state(pp_line); - YY_BREAK -case 3: -YY_RULE_SETUP -#line 320 "parser.l" -{ - int lineno, len; - char *cptr; - char *fname; - yy_pop_state(); - lineno = (int)strtol(yytext, &cptr, 10); - if(!lineno) - parser_error("Malformed '#...' line-directive; invalid linenumber\n"); - fname = strchr(cptr, '"'); - if(!fname) - parser_error("Malformed '#...' line-directive; missing filename\n"); - fname++; - cptr = strchr(fname, '"'); - if(!cptr) - parser_error("Malformed '#...' line-directive; missing terminating \""); - *cptr = '\0'; - line_number = lineno - 1; /* We didn't read the newline */ - input_name = xstrdup(fname); - /* ignore contents of C include files */ - len = strlen(input_name); - if (len > 1 && !strcasecmp( input_name + len - 2, ".h" )) - BEGIN(pp_cstrip); - else - BEGIN(INITIAL); - } - YY_BREAK -case 4: -YY_RULE_SETUP -#line 346 "parser.l" -yyless(9); yy_pop_state(); yy_push_state(pp_code_page); - YY_BREAK -case 5: -YY_RULE_SETUP -#line 347 "parser.l" -yy_pop_state(); if (pedantic) parser_warning("Unrecognized #pragma directive '%s'\n",yytext); - YY_BREAK -case 6: -YY_RULE_SETUP -#line 349 "parser.l" -current_codepage = -1; yy_pop_state(); - YY_BREAK -case 7: -YY_RULE_SETUP -#line 350 "parser.l" -current_codepage = CP_UTF8; yy_pop_state(); - YY_BREAK -case 8: -YY_RULE_SETUP -#line 351 "parser.l" -{ - char *p = yytext; - yy_pop_state(); - while (*p < '0' || *p > '9') p++; - current_codepage = strtol( p, NULL, 10 ); - if (current_codepage && current_codepage != CP_UTF8 && !wine_cp_get_table( current_codepage )) - { - parser_error("Codepage %d not supported\n", current_codepage); - current_codepage = 0; - } - } - YY_BREAK -case 9: -YY_RULE_SETUP -#line 362 "parser.l" -yy_pop_state(); parser_error("Malformed #pragma code_page directive\n"); - YY_BREAK -/* - * Strip everything until a ';' taking - * into account braces {} for structures, - * classes and enums. - */ -case 10: -YY_RULE_SETUP -#line 369 "parser.l" -line_number++; char_number = 1; - YY_BREAK -case 11: -YY_RULE_SETUP -#line 370 "parser.l" -; /* ignore */ - YY_BREAK -case 12: -YY_RULE_SETUP -#line 372 "parser.l" -return tBEGIN; - YY_BREAK -case 13: -YY_RULE_SETUP -#line 373 "parser.l" -return tEND; - YY_BREAK -case 14: -YY_RULE_SETUP -#line 375 "parser.l" -{ parser_lval.num = strtoul(yytext, 0, 10); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; } - YY_BREAK -case 15: -YY_RULE_SETUP -#line 376 "parser.l" -{ parser_lval.num = strtoul(yytext, 0, 16); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; } - YY_BREAK -case 16: -YY_RULE_SETUP -#line 377 "parser.l" -{ parser_lval.num = strtoul(yytext+2, 0, 8); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; } - YY_BREAK -/* - * The next two rules scan identifiers and filenames. - * This is achieved by using the priority ruling - * of the scanner where a '.' is valid in a filename - * and *only* in a filename. In this case, the second - * rule will be reduced because it is longer. - */ -case 17: -YY_RULE_SETUP -#line 386 "parser.l" -{ - struct keyword *tok = iskeyword(yytext); - - if(tok) - { - if(wanted_id && !tok->alwayskw) - { - parser_lval.str = make_string(yytext); - return tIDENT; - } - else - return tok->token; - } - else - { - parser_lval.str = make_string(yytext); - return tIDENT; - } - } - YY_BREAK -case 18: -YY_RULE_SETUP -#line 405 "parser.l" -parser_lval.str = make_string(yytext); return tFILENAME; - YY_BREAK -/* - * Wide string scanning - */ -case 19: -YY_RULE_SETUP -#line 410 "parser.l" -{ - yy_push_state(tklstr); - wbufidx = 0; - if(!win32) - parser_warning("16bit resource contains unicode strings\n"); - } - YY_BREAK -case 20: -#line 417 "parser.l" -case 21: -YY_RULE_SETUP -#line 417 "parser.l" -{ - yy_pop_state(); - parser_lval.str = get_buffered_wstring(); - return tSTRING; - } - YY_BREAK -case 22: -YY_RULE_SETUP -#line 422 "parser.l" -{ /* octal escape sequence */ - unsigned int result; - result = strtoul(yytext+1, 0, 8); - if ( result > 0xffff ) - parser_error("Character constant out of range\n"); - addwchar((WCHAR)result); - } - YY_BREAK -case 23: -YY_RULE_SETUP -#line 429 "parser.l" -{ /* hex escape sequence */ - unsigned int result; - result = strtoul(yytext+2, 0, 16); - addwchar((WCHAR)result); - } - YY_BREAK -case 24: -YY_RULE_SETUP -#line 434 "parser.l" -{ parser_error("Invalid hex escape sequence '%s'\n", yytext); } - YY_BREAK -case 25: -YY_RULE_SETUP -#line 436 "parser.l" -parser_error("Bad escape sequence\n"); - YY_BREAK -case 26: -YY_RULE_SETUP -#line 437 "parser.l" -line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */ - YY_BREAK -case 27: -YY_RULE_SETUP -#line 438 "parser.l" -addwchar('\a'); - YY_BREAK -case 28: -YY_RULE_SETUP -#line 439 "parser.l" -addwchar('\b'); - YY_BREAK -case 29: -YY_RULE_SETUP -#line 440 "parser.l" -addwchar('\f'); - YY_BREAK -case 30: -YY_RULE_SETUP -#line 441 "parser.l" -addwchar('\n'); - YY_BREAK -case 31: -YY_RULE_SETUP -#line 442 "parser.l" -addwchar('\r'); - YY_BREAK -case 32: -YY_RULE_SETUP -#line 443 "parser.l" -addwchar('\t'); - YY_BREAK -case 33: -YY_RULE_SETUP -#line 444 "parser.l" -addwchar('\v'); - YY_BREAK -case 34: -YY_RULE_SETUP -#line 445 "parser.l" -addwchar(yytext[1]); - YY_BREAK -case 35: -YY_RULE_SETUP -#line 446 "parser.l" -addwchar(yytext[2]); line_number++; char_number = 1; - YY_BREAK -case 36: -YY_RULE_SETUP -#line 447 "parser.l" -addwchar('\"'); /* "bla""bla" -> "bla\"bla" */ - YY_BREAK -case 37: -YY_RULE_SETUP -#line 448 "parser.l" -addwchar('\"'); /* "bla\""bla" -> "bla\"bla" */ - YY_BREAK -case 38: -YY_RULE_SETUP -#line 449 "parser.l" -; /* "bla" "bla" -> "blabla" */ - YY_BREAK -case 39: -YY_RULE_SETUP -#line 450 "parser.l" -{ - char *yptr = yytext; - while(*yptr) /* FIXME: codepage translation */ - addwchar(*yptr++ & 0xff); - } - YY_BREAK -case 40: -YY_RULE_SETUP -#line 455 "parser.l" -parser_error("Unterminated string\n"); - YY_BREAK -/* - * Normal string scanning - */ -case 41: -YY_RULE_SETUP -#line 460 "parser.l" -yy_push_state(tkstr); cbufidx = 0; - YY_BREAK -case 42: -#line 462 "parser.l" -case 43: -YY_RULE_SETUP -#line 462 "parser.l" -{ - yy_pop_state(); - parser_lval.str = get_buffered_cstring(); - return tSTRING; - } - YY_BREAK -case 44: -YY_RULE_SETUP -#line 467 "parser.l" -{ /* octal escape sequence */ - int result; - result = strtol(yytext+1, 0, 8); - if ( result > 0xff ) - parser_error("Character constant out of range\n"); - addcchar((char)result); - } - YY_BREAK -case 45: -YY_RULE_SETUP -#line 474 "parser.l" -{ /* hex escape sequence */ - int result; - result = strtol(yytext+2, 0, 16); - addcchar((char)result); - } - YY_BREAK -case 46: -YY_RULE_SETUP -#line 479 "parser.l" -{ parser_error("Invalid hex escape sequence '%s'\n", yytext); } - YY_BREAK -case 47: -YY_RULE_SETUP -#line 481 "parser.l" -parser_error("Bad escape sequence\n"); - YY_BREAK -case 48: -YY_RULE_SETUP -#line 482 "parser.l" -line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */ - YY_BREAK -case 49: -YY_RULE_SETUP -#line 483 "parser.l" -addcchar('\a'); - YY_BREAK -case 50: -YY_RULE_SETUP -#line 484 "parser.l" -addcchar('\b'); - YY_BREAK -case 51: -YY_RULE_SETUP -#line 485 "parser.l" -addcchar('\f'); - YY_BREAK -case 52: -YY_RULE_SETUP -#line 486 "parser.l" -addcchar('\n'); - YY_BREAK -case 53: -YY_RULE_SETUP -#line 487 "parser.l" -addcchar('\r'); - YY_BREAK -case 54: -YY_RULE_SETUP -#line 488 "parser.l" -addcchar('\t'); - YY_BREAK -case 55: -YY_RULE_SETUP -#line 489 "parser.l" -addcchar('\v'); - YY_BREAK -case 56: -YY_RULE_SETUP -#line 490 "parser.l" -addcchar(yytext[1]); - YY_BREAK -case 57: -YY_RULE_SETUP -#line 491 "parser.l" -addcchar(yytext[2]); line_number++; char_number = 1; - YY_BREAK -case 58: -YY_RULE_SETUP -#line 492 "parser.l" -{ - char *yptr = yytext; - while(*yptr) - addcchar(*yptr++); - } - YY_BREAK -case 59: -YY_RULE_SETUP -#line 497 "parser.l" -addcchar('\"'); /* "bla""bla" -> "bla\"bla" */ - YY_BREAK -case 60: -YY_RULE_SETUP -#line 498 "parser.l" -addcchar('\"'); /* "bla\""bla" -> "bla\"bla" */ - YY_BREAK -case 61: -YY_RULE_SETUP -#line 499 "parser.l" -; /* "bla" "bla" -> "blabla" */ - YY_BREAK -case 62: -YY_RULE_SETUP -#line 500 "parser.l" -parser_error("Unterminated string\n"); - YY_BREAK -/* - * Raw data scanning - */ -case 63: -YY_RULE_SETUP -#line 505 "parser.l" -yy_push_state(tkrcd); cbufidx = 0; - YY_BREAK -case 64: -YY_RULE_SETUP -#line 506 "parser.l" -{ - yy_pop_state(); - parser_lval.raw = new_raw_data(); - parser_lval.raw->size = cbufidx; - parser_lval.raw->data = xmalloc(parser_lval.raw->size); - memcpy(parser_lval.raw->data, cbuffer, parser_lval.raw->size); - return tRAWDATA; - } - YY_BREAK -case 65: -YY_RULE_SETUP -#line 514 "parser.l" -{ - int result; - result = strtol(yytext, 0, 16); - addcchar((char)result); - } - YY_BREAK -case 66: -YY_RULE_SETUP -#line 519 "parser.l" -; /* Ignore space */ - YY_BREAK -case 67: -YY_RULE_SETUP -#line 520 "parser.l" -line_number++; char_number = 1; - YY_BREAK -case 68: -YY_RULE_SETUP -#line 521 "parser.l" -parser_error("Malformed data-line\n"); - YY_BREAK -/* - * Comment stripping - * Should never occur after preprocessing - */ -case 69: -YY_RULE_SETUP -#line 527 "parser.l" -{ - yy_push_state(comment); - save_wanted_id = wanted_id; - if(!no_preprocess) - parser_warning("Found comments after preprocessing, please report\n"); - } - YY_BREAK -case 70: -YY_RULE_SETUP -#line 533 "parser.l" -; - YY_BREAK -case 71: -YY_RULE_SETUP -#line 534 "parser.l" -; - YY_BREAK -case 72: -YY_RULE_SETUP -#line 535 "parser.l" -line_number++; char_number = 1; - YY_BREAK -case 73: -YY_RULE_SETUP -#line 536 "parser.l" -yy_pop_state(); want_id = save_wanted_id; - YY_BREAK -case 74: -YY_RULE_SETUP -#line 538 "parser.l" -want_id = wanted_id; /* not really comment, but left-over c-junk */ - YY_BREAK -case 75: -YY_RULE_SETUP -#line 539 "parser.l" -want_id = wanted_id; if(!no_preprocess) parser_warning("Found comments after preprocessing, please report\n"); - YY_BREAK -case 76: -YY_RULE_SETUP -#line 541 "parser.l" -{ - want_id = wanted_id; - line_number++; - char_number = 1; - if(want_nl) - { - want_nl = 0; - return tNL; - } - } - YY_BREAK -case 77: -YY_RULE_SETUP -#line 551 "parser.l" -want_id = wanted_id; /* Eat whitespace */ - YY_BREAK -case 78: -YY_RULE_SETUP -#line 553 "parser.l" -return yytext[0]; - YY_BREAK -case 79: -YY_RULE_SETUP -#line 555 "parser.l" -{ - /* Catch all rule to find any unmatched text */ - if(*yytext == '\n') - { - line_number++; - char_number = 1; - } - parser_warning("Unmatched text '%c' (0x%02x) YY_START=%d\n", - isprint(*yytext & 0xff) ? *yytext : '.', *yytext, YY_START); - } - YY_BREAK -case 80: -YY_RULE_SETUP -#line 566 "parser.l" -ECHO; - YY_BREAK -#line 1691 "lex.yy.c" -case YY_STATE_EOF(INITIAL): -case YY_STATE_EOF(tkstr): -case YY_STATE_EOF(tklstr): -case YY_STATE_EOF(tkrcd): -case YY_STATE_EOF(comment): -case YY_STATE_EOF(pp_cstrip): -case YY_STATE_EOF(pp_line): -case YY_STATE_EOF(pp_pragma): -case YY_STATE_EOF(pp_code_page): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yy_hold_char; - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between yy_current_buffer and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yy_n_chars = yy_current_buffer->yy_n_chars; - yy_current_buffer->yy_input_file = yyin; - yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = yy_c_buf_p; - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer() ) - { - case EOB_ACT_END_OF_FILE: - { - yy_did_buffer_switch_on_eof = 0; - - if ( yywrap() ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = - yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yy_c_buf_p = - &yy_current_buffer->yy_ch_buf[yy_n_chars]; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of yylex */ - - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ - -static int yy_get_next_buffer() - { - register char *dest = yy_current_buffer->yy_ch_buf; - register char *source = yytext_ptr; - register int number_to_move, i; - int ret_val; - - if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( yy_current_buffer->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a singled characater, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - yy_n_chars = 0; - - else - { - int num_to_read = - yy_current_buffer->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ -#ifdef YY_USES_REJECT - YY_FATAL_ERROR( -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); -#else - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = yy_current_buffer; - - int yy_c_buf_p_offset = - (int) (yy_c_buf_p - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yy_flex_realloc( (void *) b->yy_ch_buf, - b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = yy_current_buffer->yy_buf_size - - number_to_move - 1; -#endif - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), - yy_n_chars, num_to_read ); - } - - if ( yy_n_chars == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - yy_current_buffer->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - yy_n_chars += number_to_move; - yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; - yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; - - return ret_val; - } - - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -static yy_state_type yy_get_previous_state() - { - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = yy_start; - yy_current_state += YY_AT_BOL(); - - for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 189 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; - } - - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - -#ifdef YY_USE_PROTOS -static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) -#else -static yy_state_type yy_try_NUL_trans( yy_current_state ) -yy_state_type yy_current_state; -#endif - { - register int yy_is_jam; - register char *yy_cp = yy_c_buf_p; - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 189 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 188); - - return yy_is_jam ? 0 : yy_current_state; - } - - -#ifndef YY_NO_UNPUT -#ifdef YY_USE_PROTOS -static void yyunput( int c, register char *yy_bp ) -#else -static void yyunput( c, yy_bp ) -int c; -register char *yy_bp; -#endif - { - register char *yy_cp = yy_c_buf_p; - - /* undo effects of setting up yytext */ - *yy_cp = yy_hold_char; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = yy_n_chars + 2; - register char *dest = &yy_current_buffer->yy_ch_buf[ - yy_current_buffer->yy_buf_size + 2]; - register char *source = - &yy_current_buffer->yy_ch_buf[number_to_move]; - - while ( source > yy_current_buffer->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - yy_n_chars = yy_current_buffer->yy_buf_size; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - - yytext_ptr = yy_bp; - yy_hold_char = *yy_cp; - yy_c_buf_p = yy_cp; - } -#endif /* ifndef YY_NO_UNPUT */ - - -#ifdef __cplusplus -static int yyinput() -#else -static int input() -#endif - { - int c; - - *yy_c_buf_p = yy_hold_char; - - if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - /* This was really a NUL. */ - *yy_c_buf_p = '\0'; - - else - { /* need more input */ - yytext_ptr = yy_c_buf_p; - ++yy_c_buf_p; - - switch ( yy_get_next_buffer() ) - { - case EOB_ACT_END_OF_FILE: - { - if ( yywrap() ) - { - yy_c_buf_p = - yytext_ptr + YY_MORE_ADJ; - return EOF; - } - - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; - break; - - case EOB_ACT_LAST_MATCH: -#ifdef __cplusplus - YY_FATAL_ERROR( - "unexpected last match in yyinput()" ); -#else - YY_FATAL_ERROR( - "unexpected last match in input()" ); -#endif - } - } - } - - c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ - *yy_c_buf_p = '\0'; /* preserve yytext */ - yy_hold_char = *++yy_c_buf_p; - - yy_current_buffer->yy_at_bol = (c == '\n'); - - return c; - } - - -#ifdef YY_USE_PROTOS -void yyrestart( FILE *input_file ) -#else -void yyrestart( input_file ) -FILE *input_file; -#endif - { - if ( ! yy_current_buffer ) - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_init_buffer( yy_current_buffer, input_file ); - yy_load_buffer_state(); - } - - -#ifdef YY_USE_PROTOS -void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) -#else -void yy_switch_to_buffer( new_buffer ) -YY_BUFFER_STATE new_buffer; -#endif - { - if ( yy_current_buffer == new_buffer ) - return; - - if ( yy_current_buffer ) - { - /* Flush out information for old buffer. */ - *yy_c_buf_p = yy_hold_char; - yy_current_buffer->yy_buf_pos = yy_c_buf_p; - yy_current_buffer->yy_n_chars = yy_n_chars; - } - - yy_current_buffer = new_buffer; - yy_load_buffer_state(); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yy_did_buffer_switch_on_eof = 1; - } - - -#ifdef YY_USE_PROTOS -void yy_load_buffer_state( void ) -#else -void yy_load_buffer_state() -#endif - { - yy_n_chars = yy_current_buffer->yy_n_chars; - yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; - yyin = yy_current_buffer->yy_input_file; - yy_hold_char = *yy_c_buf_p; - } - - -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) -#else -YY_BUFFER_STATE yy_create_buffer( file, size ) -FILE *file; -int size; -#endif - { - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer( b, file ); - - return b; - } - - -#ifdef YY_USE_PROTOS -void yy_delete_buffer( YY_BUFFER_STATE b ) -#else -void yy_delete_buffer( b ) -YY_BUFFER_STATE b; -#endif - { - if ( ! b ) - return; - - if ( b == yy_current_buffer ) - yy_current_buffer = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yy_flex_free( (void *) b->yy_ch_buf ); - - yy_flex_free( (void *) b ); - } - - -#ifndef YY_ALWAYS_INTERACTIVE -#ifndef YY_NEVER_INTERACTIVE -extern int isatty YY_PROTO(( int )); -#endif -#endif - -#ifdef YY_USE_PROTOS -void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) -#else -void yy_init_buffer( b, file ) -YY_BUFFER_STATE b; -FILE *file; -#endif - - - { - yy_flush_buffer( b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - -#if YY_ALWAYS_INTERACTIVE - b->yy_is_interactive = 1; -#else -#if YY_NEVER_INTERACTIVE - b->yy_is_interactive = 0; -#else - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; -#endif -#endif - } - - -#ifdef YY_USE_PROTOS -void yy_flush_buffer( YY_BUFFER_STATE b ) -#else -void yy_flush_buffer( b ) -YY_BUFFER_STATE b; -#endif - - { - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == yy_current_buffer ) - yy_load_buffer_state(); - } - - -#ifndef YY_NO_SCAN_BUFFER -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) -#else -YY_BUFFER_STATE yy_scan_buffer( base, size ) -char *base; -yy_size_t size; -#endif - { - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer( b ); - - return b; - } -#endif - - -#ifndef YY_NO_SCAN_STRING -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_string( yyconst char *str ) -#else -YY_BUFFER_STATE yy_scan_string( str ) -yyconst char *str; -#endif - { - int len; - for ( len = 0; str[len]; ++len ) - ; - - return yy_scan_bytes( str, len ); - } -#endif - - -#ifndef YY_NO_SCAN_BYTES -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) -#else -YY_BUFFER_STATE yy_scan_bytes( bytes, len ) -yyconst char *bytes; -int len; -#endif - { - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = len + 2; - buf = (char *) yy_flex_alloc( n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < len; ++i ) - buf[i] = bytes[i]; - - buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer( buf, n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; - } -#endif - - -#ifndef YY_NO_PUSH_STATE -#ifdef YY_USE_PROTOS -static void yy_push_state( int new_state ) -#else -static void yy_push_state( new_state ) -int new_state; -#endif - { - if ( yy_start_stack_ptr >= yy_start_stack_depth ) - { - yy_size_t new_size; - - yy_start_stack_depth += YY_START_STACK_INCR; - new_size = yy_start_stack_depth * sizeof( int ); - - if ( ! yy_start_stack ) - yy_start_stack = (int *) yy_flex_alloc( new_size ); - - else - yy_start_stack = (int *) yy_flex_realloc( - (void *) yy_start_stack, new_size ); - - if ( ! yy_start_stack ) - YY_FATAL_ERROR( - "out of memory expanding start-condition stack" ); - } - - yy_start_stack[yy_start_stack_ptr++] = YY_START; - - BEGIN(new_state); - } -#endif - - -#ifndef YY_NO_POP_STATE -static void yy_pop_state() - { - if ( --yy_start_stack_ptr < 0 ) - YY_FATAL_ERROR( "start-condition stack underflow" ); - - BEGIN(yy_start_stack[yy_start_stack_ptr]); - } -#endif - - -#ifndef YY_NO_TOP_STATE -static int yy_top_state() - { - return yy_start_stack[yy_start_stack_ptr - 1]; - } -#endif - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -#ifdef YY_USE_PROTOS -static void yy_fatal_error( yyconst char msg[] ) -#else -static void yy_fatal_error( msg ) -char msg[]; -#endif - { - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); - } - - - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - yytext[yyleng] = yy_hold_char; \ - yy_c_buf_p = yytext + n - YY_MORE_ADJ; \ - yy_hold_char = *yy_c_buf_p; \ - *yy_c_buf_p = '\0'; \ - yyleng = n; \ - } \ - while ( 0 ) - - -/* Internal utility routines. */ - -#ifndef yytext_ptr -#ifdef YY_USE_PROTOS -static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) -#else -static void yy_flex_strncpy( s1, s2, n ) -char *s1; -yyconst char *s2; -int n; -#endif - { - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; - } -#endif - - -#ifdef YY_USE_PROTOS -static void *yy_flex_alloc( yy_size_t size ) -#else -static void *yy_flex_alloc( size ) -yy_size_t size; -#endif - { - return (void *) malloc( size ); - } - -#ifdef YY_USE_PROTOS -static void *yy_flex_realloc( void *ptr, yy_size_t size ) -#else -static void *yy_flex_realloc( ptr, size ) -void *ptr; -yy_size_t size; -#endif - { - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); - } - -#ifdef YY_USE_PROTOS -static void yy_flex_free( void *ptr ) -#else -static void yy_flex_free( ptr ) -void *ptr; -#endif - { - free( ptr ); - } - -#if YY_MAIN -int main() - { - yylex(); - return 0; - } -#endif -#line 566 "parser.l" - - -/* These dup functions copy the enclosed '\0' from - * the resource string. - */ -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 void addwchar(WCHAR s) -{ - if(wbufidx >= wbufalloc) - { - wbufalloc += 1024; - wbuffer = xrealloc(wbuffer, wbufalloc * sizeof(wbuffer[0])); - if(wbufalloc > 65536) - parser_warning("Reallocating wide string buffer larger than 64kB\n"); - } - wbuffer[wbufidx++] = s; -} - -static string_t *get_buffered_cstring(void) -{ - string_t *str = new_string(); - - str->size = cbufidx; - str->type = str_char; - str->str.cstr = xmalloc(cbufidx+1); - memcpy(str->str.cstr, cbuffer, cbufidx); - str->str.cstr[cbufidx] = '\0'; - - if (!current_codepage || current_codepage == -1 || !win32) /* store as ANSI string */ - { - if (!current_codepage) parser_error("Codepage set to Unicode only, cannot use ASCII string here\n"); - return str; - } - else /* convert to Unicode before storing */ - { - string_t *str_w = convert_string( str, str_unicode, current_codepage ); - if (!check_unicode_conversion( str, str_w, current_codepage )) - parser_error("String %s does not convert identically to Unicode and back in codepage %d. " - "Try using a Unicode string instead\n", str->str.cstr, current_codepage ); - free_string( str ); - return str_w; - } -} - -static string_t *get_buffered_wstring(void) -{ - string_t *str = new_string(); - str->size = wbufidx; - str->type = str_unicode; - str->str.wstr = xmalloc((wbufidx+1)*sizeof(WCHAR)); - memcpy(str->str.wstr, wbuffer, wbufidx*sizeof(WCHAR)); - str->str.wstr[wbufidx] = 0; - return str; -} - -static string_t *make_string(char *s) -{ - string_t *str = new_string(); - str->size = strlen(s); - str->type = str_char; - str->str.cstr = xmalloc(str->size+1); - memcpy(str->str.cstr, s, str->size+1); - return str; -} diff --git a/reactos/tools/wrc/newstruc.c b/reactos/tools/wrc/newstruc.c deleted file mode 100644 index 88d1c7a1127..00000000000 --- a/reactos/tools/wrc/newstruc.c +++ /dev/null @@ -1,1193 +0,0 @@ -/* - * Create dynamic new structures of various types - * and some utils in that trend. - * - * 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 - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "wrc.h" -#include "newstruc.h" -#include "utils.h" -#include "parser.h" - -#include -typedef struct -{ - DWORD biSize; - WORD biWidth; - WORD biHeight; - WORD biPlanes; - WORD biBitCount; -} BITMAPOS2HEADER; -#include - -/* Generate new_* functions that have no parameters (NOTE: no ';') */ -__NEW_STRUCT_FUNC(dialog) -__NEW_STRUCT_FUNC(dialogex) -__NEW_STRUCT_FUNC(name_id) -__NEW_STRUCT_FUNC(menu) -__NEW_STRUCT_FUNC(menuex) -__NEW_STRUCT_FUNC(menu_item) -__NEW_STRUCT_FUNC(menuex_item) -__NEW_STRUCT_FUNC(control) -__NEW_STRUCT_FUNC(icon) -__NEW_STRUCT_FUNC(cursor) -__NEW_STRUCT_FUNC(versioninfo) -__NEW_STRUCT_FUNC(ver_value) -__NEW_STRUCT_FUNC(ver_block) -__NEW_STRUCT_FUNC(stt_entry) -__NEW_STRUCT_FUNC(accelerator) -__NEW_STRUCT_FUNC(event) -__NEW_STRUCT_FUNC(raw_data) -__NEW_STRUCT_FUNC(lvc) -__NEW_STRUCT_FUNC(res_count) -__NEW_STRUCT_FUNC(string) -__NEW_STRUCT_FUNC(toolbar_item) -__NEW_STRUCT_FUNC(ani_any) - -/* New instances for all types of structures */ -/* Very inefficient (in size), but very functional :-] - * Especially for type-checking. - */ -resource_t *new_resource(enum res_e t, void *res, int memopt, language_t *lan) -{ - resource_t *r = xmalloc(sizeof(resource_t)); - memset( r, 0, sizeof(*r) ); - r->type = t; - r->res.overlay = res; - r->memopt = memopt; - r->lan = lan; - return r; -} - -version_t *new_version(DWORD v) -{ - version_t *vp = (version_t *)xmalloc(sizeof(version_t)); - *vp = v; - return vp; -} - -characts_t *new_characts(DWORD c) -{ - characts_t *cp = (characts_t *)xmalloc(sizeof(characts_t)); - *cp = c; - return cp; -} - -language_t *new_language(int id, int sub) -{ - language_t *lan = (language_t *)xmalloc(sizeof(language_t)); - lan->id = id; - lan->sub = sub; - return lan; -} - -language_t *dup_language(language_t *l) -{ - if(!l) return NULL; - return new_language(l->id, l->sub); -} - -version_t *dup_version(version_t *v) -{ - if(!v) return NULL; - return new_version(*v); -} - -characts_t *dup_characts(characts_t *c) -{ - if(!c) return NULL; - return new_characts(*c); -} - -html_t *new_html(raw_data_t *rd, int *memopt) -{ - html_t *html = xmalloc(sizeof(html_t)); - html->data = rd; - if(memopt) - { - html->memopt = *memopt; - free(memopt); - } - else - html->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE; - return html; -} - -rcdata_t *new_rcdata(raw_data_t *rd, int *memopt) -{ - rcdata_t *rc = (rcdata_t *)xmalloc(sizeof(rcdata_t)); - rc->data = rd; - if(memopt) - { - rc->memopt = *memopt; - free(memopt); - } - else - rc->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE; - return rc; -} - -font_id_t *new_font_id(int size, string_t *face, int weight, int italic) -{ - font_id_t *fid = (font_id_t *)xmalloc(sizeof(font_id_t)); - fid->name = face; - fid->size = size; - fid->weight = weight; - fid->italic = italic; - return fid; -} - -user_t *new_user(name_id_t *type, raw_data_t *rd, int *memopt) -{ - user_t *usr = (user_t *)xmalloc(sizeof(user_t)); - usr->data = rd; - if(memopt) - { - usr->memopt = *memopt; - free(memopt); - } - else - usr->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE; - usr->type = type; - return usr; -} - -font_t *new_font(raw_data_t *rd, int *memopt) -{ - font_t *fnt = (font_t *)xmalloc(sizeof(font_t)); - fnt->data = rd; - if(memopt) - { - fnt->memopt = *memopt; - free(memopt); - } - else - fnt->memopt = WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE; - return fnt; -} - -fontdir_t *new_fontdir(raw_data_t *rd, int *memopt) -{ - fontdir_t *fnd = (fontdir_t *)xmalloc(sizeof(fontdir_t)); - fnd->data = rd; - if(memopt) - { - fnd->memopt = *memopt; - free(memopt); - } - else - fnd->memopt = WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE; - return fnd; -} - - -/* - * Convert bitmaps to proper endian - */ -static void convert_bitmap_swap_v3(BITMAPINFOHEADER *bih) -{ - bih->biSize = BYTESWAP_DWORD(bih->biSize); - bih->biWidth = BYTESWAP_DWORD(bih->biWidth); - bih->biHeight = BYTESWAP_DWORD(bih->biHeight); - bih->biPlanes = BYTESWAP_WORD(bih->biPlanes); - bih->biBitCount = BYTESWAP_WORD(bih->biBitCount); - bih->biCompression = BYTESWAP_DWORD(bih->biCompression); - bih->biSizeImage = BYTESWAP_DWORD(bih->biSizeImage); - bih->biXPelsPerMeter = BYTESWAP_DWORD(bih->biXPelsPerMeter); - bih->biYPelsPerMeter = BYTESWAP_DWORD(bih->biYPelsPerMeter); - bih->biClrUsed = BYTESWAP_DWORD(bih->biClrUsed); - bih->biClrImportant = BYTESWAP_DWORD(bih->biClrImportant); -} - -static void convert_bitmap_swap_v4(BITMAPV4HEADER *b4h) -{ - convert_bitmap_swap_v3((BITMAPINFOHEADER *)b4h); - b4h->bV4RedMask = BYTESWAP_DWORD(b4h->bV4RedMask); - b4h->bV4GreenMask = BYTESWAP_DWORD(b4h->bV4GreenMask); - b4h->bV4BlueMask = BYTESWAP_DWORD(b4h->bV4BlueMask); - b4h->bV4AlphaMask = BYTESWAP_DWORD(b4h->bV4AlphaMask); - b4h->bV4CSType = BYTESWAP_DWORD(b4h->bV4CSType); - b4h->bV4Endpoints.ciexyzRed.ciexyzX = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzRed.ciexyzX); - b4h->bV4Endpoints.ciexyzRed.ciexyzY = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzRed.ciexyzY); - b4h->bV4Endpoints.ciexyzRed.ciexyzZ = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzRed.ciexyzZ); - b4h->bV4Endpoints.ciexyzGreen.ciexyzX = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzGreen.ciexyzX); - b4h->bV4Endpoints.ciexyzGreen.ciexyzY = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzGreen.ciexyzY); - b4h->bV4Endpoints.ciexyzGreen.ciexyzZ = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzGreen.ciexyzZ); - b4h->bV4Endpoints.ciexyzBlue.ciexyzX = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzBlue.ciexyzX); - b4h->bV4Endpoints.ciexyzBlue.ciexyzY = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzBlue.ciexyzY); - b4h->bV4Endpoints.ciexyzBlue.ciexyzZ = BYTESWAP_DWORD(b4h->bV4Endpoints.ciexyzBlue.ciexyzZ); - b4h->bV4GammaRed = BYTESWAP_DWORD(b4h->bV4GammaRed); - b4h->bV4GammaGreen = BYTESWAP_DWORD(b4h->bV4GammaGreen); - b4h->bV4GammaBlue = BYTESWAP_DWORD(b4h->bV4GammaBlue); -} - -static void convert_bitmap_swap_os2(BITMAPOS2HEADER *boh) -{ - boh->biSize = BYTESWAP_DWORD(boh->biSize); - boh->biWidth = BYTESWAP_WORD(boh->biWidth); - boh->biHeight = BYTESWAP_WORD(boh->biHeight); - boh->biPlanes = BYTESWAP_WORD(boh->biPlanes); - boh->biBitCount = BYTESWAP_WORD(boh->biBitCount); -} - -#define FL_SIGBE 0x01 -#define FL_SIZEBE 0x02 -#define FL_V4 0x04 -#define FL_OS2 0x08 -static int convert_bitmap(char *data, int size) -{ - BITMAPINFOHEADER *bih = (BITMAPINFOHEADER *)data; - BITMAPV4HEADER *b4h = (BITMAPV4HEADER *)data; - BITMAPOS2HEADER *boh = (BITMAPOS2HEADER *)data; - int type = 0; - int returnSize = 0; /* size to be returned */ -#ifdef WORDS_BIGENDIAN - DWORD bisizel = BYTESWAP_DWORD(sizeof(BITMAPINFOHEADER)); - DWORD b4sizel = BYTESWAP_DWORD(sizeof(BITMAPV4HEADER)); - DWORD bosizel = BYTESWAP_DWORD(sizeof(BITMAPOS2HEADER)); - DWORD bisizeb = sizeof(BITMAPINFOHEADER); - DWORD b4sizeb = sizeof(BITMAPV4HEADER); - DWORD bosizeb = sizeof(BITMAPOS2HEADER); -#else - DWORD bisizel = sizeof(BITMAPINFOHEADER); - DWORD b4sizel = sizeof(BITMAPV4HEADER); - DWORD bosizel = sizeof(BITMAPOS2HEADER); - DWORD bisizeb = BYTESWAP_DWORD(sizeof(BITMAPINFOHEADER)); - DWORD b4sizeb = BYTESWAP_DWORD(sizeof(BITMAPV4HEADER)); - DWORD bosizeb = BYTESWAP_DWORD(sizeof(BITMAPOS2HEADER)); -#endif - - - /* - * Originally the bih and b4h pointers were simply incremented here, - * and memmoved at the end of the function. This causes alignment - * issues on solaris, so we do the memmove here rather than at the end. - */ - if(data[0] == 'B' && data[1] == 'M') - { - /* Little endian signature */ - memmove(data, data+sizeof(BITMAPFILEHEADER), size - sizeof(BITMAPFILEHEADER)); - returnSize = sizeof(BITMAPFILEHEADER); - } - else if(data[0] == 'M' && data[1] == 'B') - { - type |= FL_SIGBE; /* Big endian signature */ - memmove(data, data+sizeof(BITMAPFILEHEADER), size - sizeof(BITMAPFILEHEADER)); - returnSize = sizeof(BITMAPFILEHEADER); - - } - - if(bih->biSize == bisizel) - { - /* Little endian */ - } - else if(bih->biSize == bisizeb) - { - type |= FL_SIZEBE; - } - else if(bih->biSize == b4sizel) - { - type |= FL_V4; - } - else if(bih->biSize == b4sizeb) - { - type |= FL_SIZEBE | FL_V4; - } - else if(!bih->biSize || bih->biSize == bosizel) - { - type |= FL_OS2; - } - else if(bih->biSize == bosizeb) - { - type |= FL_SIZEBE | FL_OS2; - } - else - parser_error("Invalid bitmap format, bih->biSize = %d\n", bih->biSize); - - switch(type) - { - default: - break; - case FL_SIZEBE: - case FL_SIZEBE | FL_V4: - case FL_SIZEBE | FL_OS2: - parser_warning("Bitmap v%c signature little-endian, but size big-endian\n", type & FL_V4 ? '4' : '3'); - break; - case FL_SIGBE: - case FL_SIGBE | FL_V4: - case FL_SIGBE | FL_OS2: - parser_warning("Bitmap v%c signature big-endian, but size little-endian\n", type & FL_V4 ? '4' : '3'); - break; - } - - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - if(!(type & FL_SIZEBE)) - { - if(type & FL_V4) - convert_bitmap_swap_v4(b4h); - else if(type & FL_OS2) - { - convert_bitmap_swap_os2(boh); - } - else - convert_bitmap_swap_v3(bih); - } - break; -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - if(type & FL_SIZEBE) - { - if(type & FL_V4) - convert_bitmap_swap_v4(b4h); - else if(type & FL_OS2) - { - convert_bitmap_swap_os2(boh); - } - else - convert_bitmap_swap_v3(bih); - } - break; - } - - if(size && (void *)data != (void *)bih) - { - /* We have the fileheader still attached, remove it */ - memmove(data, data+sizeof(BITMAPFILEHEADER), size - sizeof(BITMAPFILEHEADER)); - return sizeof(BITMAPFILEHEADER); - } - return returnSize; -} -#undef FL_SIGBE -#undef FL_SIZEBE -#undef FL_V4 - -/* - * Cursor and icon splitter functions used when allocating - * cursor- and icon-groups. - */ -typedef struct { - language_t lan; - int id; -} id_alloc_t; - -static int get_new_id(id_alloc_t **list, int *n, language_t *lan) -{ - int i; - assert(lan != NULL); - assert(list != NULL); - assert(n != NULL); - - if(!*list) - { - *list = (id_alloc_t *)xmalloc(sizeof(id_alloc_t)); - *n = 1; - (*list)[0].lan = *lan; - (*list)[0].id = 1; - return 1; - } - - for(i = 0; i < *n; i++) - { - if((*list)[i].lan.id == lan->id && (*list)[i].lan.sub == lan->sub) - return ++((*list)[i].id); - } - - *list = (id_alloc_t *)xrealloc(*list, sizeof(id_alloc_t) * (*n+1)); - (*list)[*n].lan = *lan; - (*list)[*n].id = 1; - *n += 1; - return 1; -} - -static int alloc_icon_id(language_t *lan) -{ - static id_alloc_t *idlist = NULL; - static int nid = 0; - - return get_new_id(&idlist, &nid, lan); -} - -static int alloc_cursor_id(language_t *lan) -{ - static id_alloc_t *idlist = NULL; - static int nid = 0; - - return get_new_id(&idlist, &nid, lan); -} - -static void split_icons(raw_data_t *rd, icon_group_t *icog, int *nico) -{ - int cnt; - int i; - icon_t *ico; - icon_t *list = NULL; - icon_header_t *ih = (icon_header_t *)rd->data; - int swap = 0; - - if(ih->type == 1) - swap = 0; - else if(BYTESWAP_WORD(ih->type) == 1) - swap = 1; - else - parser_error("Icon resource data has invalid type id %d\n", ih->type); - - cnt = swap ? BYTESWAP_WORD(ih->count) : ih->count; - for(i = 0; i < cnt; i++) - { - icon_dir_entry_t ide; - BITMAPINFOHEADER info; - memcpy(&ide, rd->data + sizeof(icon_header_t) - + i*sizeof(icon_dir_entry_t), sizeof(ide)); - - ico = new_icon(); - ico->id = alloc_icon_id(icog->lvc.language); - ico->lvc = icog->lvc; - if(swap) - { - ide.offset = BYTESWAP_DWORD(ide.offset); - ide.ressize= BYTESWAP_DWORD(ide.ressize); - } - if(ide.offset > rd->size - || ide.offset + ide.ressize > rd->size) - parser_error("Icon resource data corrupt\n"); - ico->width = ide.width; - ico->height = ide.height; - ico->nclr = ide.nclr; - ico->planes = swap ? BYTESWAP_WORD(ide.planes) : ide.planes; - ico->bits = swap ? BYTESWAP_WORD(ide.bits) : ide.bits; - memcpy(&info, rd->data + ide.offset, sizeof(info)); - convert_bitmap((char *) &info, 0); - memcpy(rd->data + ide.offset, &info, sizeof(info)); - - if(!ico->planes) - { - /* Argh! They did not fill out the resdir structure */ - /* The bitmap is in destination byteorder. We want native for our structures */ - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - case WRC_BO_LITTLE: -#else - case WRC_BO_BIG: -#endif - ico->planes = BYTESWAP_WORD(info.biPlanes); - break; - default: - ico->planes = info.biPlanes; - } - } - if(!ico->bits) - { - /* Argh! They did not fill out the resdir structure */ - /* The bitmap is in destination byteorder. We want native for our structures */ - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - case WRC_BO_LITTLE: -#else - case WRC_BO_BIG: -#endif - ico->bits = BYTESWAP_WORD(info.biBitCount); - break; - default: - ico->bits = info.biBitCount; - } - } - ico->data = new_raw_data(); - copy_raw_data(ico->data, rd, ide.offset, ide.ressize); - if(!list) - { - list = ico; - } - else - { - ico->next = list; - list->prev = ico; - list = ico; - } - } - icog->iconlist = list; - *nico = cnt; -} - -static void split_cursors(raw_data_t *rd, cursor_group_t *curg, int *ncur) -{ - int cnt; - int i; - cursor_t *cur; - cursor_t *list = NULL; - cursor_header_t *ch = (cursor_header_t *)rd->data; - int swap = 0; - - if(ch->type == 2) - swap = 0; - else if(BYTESWAP_WORD(ch->type) == 2) - swap = 1; - else - parser_error("Cursor resource data has invalid type id %d\n", ch->type); - cnt = swap ? BYTESWAP_WORD(ch->count) : ch->count; - for(i = 0; i < cnt; i++) - { - cursor_dir_entry_t cde; - BITMAPINFOHEADER info; - memcpy(&cde, rd->data + sizeof(cursor_header_t) - + i*sizeof(cursor_dir_entry_t), sizeof(cde)); - - cur = new_cursor(); - cur->id = alloc_cursor_id(curg->lvc.language); - cur->lvc = curg->lvc; - if(swap) - { - cde.offset = BYTESWAP_DWORD(cde.offset); - cde.ressize= BYTESWAP_DWORD(cde.ressize); - } - if(cde.offset > rd->size - || cde.offset + cde.ressize > rd->size) - parser_error("Cursor resource data corrupt\n"); - cur->width = cde.width; - cur->height = cde.height; - cur->nclr = cde.nclr; - memcpy(&info, rd->data + cde.offset, sizeof(info)); - convert_bitmap((char *)&info, 0); - memcpy(rd->data + cde.offset, &info, sizeof(info)); - /* The bitmap is in destination byteorder. We want native for our structures */ - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - case WRC_BO_LITTLE: -#else - case WRC_BO_BIG: -#endif - cur->planes = BYTESWAP_WORD(info.biPlanes); - cur->bits = BYTESWAP_WORD(info.biBitCount); - break; - default: - cur->planes = info.biPlanes; - cur->bits = info.biBitCount; - } - if(!win32 && (cur->planes != 1 || cur->bits != 1)) - parser_warning("Win16 cursor contains colors\n"); - cur->xhot = swap ? BYTESWAP_WORD(cde.xhot) : cde.xhot; - cur->yhot = swap ? BYTESWAP_WORD(cde.yhot) : cde.yhot; - cur->data = new_raw_data(); - copy_raw_data(cur->data, rd, cde.offset, cde.ressize); - if(!list) - { - list = cur; - } - else - { - cur->next = list; - list->prev = cur; - list = cur; - } - } - curg->cursorlist = list; - *ncur = cnt; -} - - -icon_group_t *new_icon_group(raw_data_t *rd, int *memopt) -{ - icon_group_t *icog = (icon_group_t *)xmalloc(sizeof(icon_group_t)); - if(memopt) - { - icog->memopt = *memopt; - free(memopt); - } - else - icog->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE; - icog->lvc = rd->lvc; - split_icons(rd, icog, &(icog->nicon)); - free(rd->data); - free(rd); - return icog; -} - -cursor_group_t *new_cursor_group(raw_data_t *rd, int *memopt) -{ - cursor_group_t *curg = (cursor_group_t *)xmalloc(sizeof(cursor_group_t)); - if(memopt) - { - curg->memopt = *memopt; - free(memopt); - } - else - curg->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE; - curg->lvc = rd->lvc; - split_cursors(rd, curg, &(curg->ncursor)); - free(rd->data); - free(rd); - return curg; -} - -/* - * Animated cursors and icons - * - * The format of animated cursors and icons is yet another example - * of bad design by "The Company". The entire RIFF structure is - * flawed by design because it is inconsistent and single minded: - * - some tags have lengths attached, others don't. The use of these - * non-length tags is absolutely unclear; - * - the content of "icon" tags can be both icons and cursors; - * - tags lack proper alignment constraints. It seems that everything - * is 16bit aligned, but I could not find that in any docu. Just be - * prepared to eat anything; - * - there are no strict constraints on tag-nesting and the organization - * is highly illogical; - * - * Anyhow, here is the basic structure: - * "RIFF" { dword taglength } - * "ACON" // What does it do? - * "LIST" { dword taglength } - * "INFO" // And what does this do? - * "INAM" { dword taglength } // Icon/cursor name - * {inam data} - * "IART" { dword taglength } // The artist - * {iart data} - * "fram" // Is followed by "icon"s - * "icon" { dword taglength } // First frame - * { icon/cursor data } - * "icon" { dword taglength } // Second frame - * { icon/cursor data } - * ... // ... - * "anih" { dword taglength } // Header structure - * { aniheader_t structure } - * "rate" { dword taglength } // The rate for each frame - * { `steps' dwords } - * "seq " { dword taglength } // The frame blit-order - * { `steps' dwords } - * - * Tag length are bytelength without the header and length field (i.e. -8). - * The "LIST" tag may occur several times and may encapsulate different - * tags. The `steps' is the number of "icon" tags found (actually the - * number of steps specified in the aniheader_t structure). The "seq "uence - * tag can be omitted, in which case the sequence is equal to the sequence - * of "icon"s found in the file. Also "rate" may be omitted, in which case - * the default from the aniheader_t structure is used. - * - * An animated cursor puts `.cur' formatted files into each "icon" tag, - * whereas animated icons contain `.ico' formatted files. - * - * Note about the code: Yes, it can be shorter/compressed. Some tags can be - * dealt with in the same code. However, this version shows what is going on - * and is better debug-able. - */ -static const char riff[4] = "RIFF"; -static const char acon[4] = "ACON"; -static const char list[4] = "LIST"; -static const char info[4] = "INFO"; -static const char inam[4] = "INAM"; -static const char iart[4] = "IART"; -static const char fram[4] = "fram"; -static const char icon[4] = "icon"; -static const char anih[4] = "anih"; -static const char rate[4] = "rate"; -static const char seq[4] = "seq "; - -#define SKIP_TAG(p,size) ((riff_tag_t *)(((char *)p) + (size))) - -#define NEXT_TAG(p) SKIP_TAG(p,(isswapped ? BYTESWAP_DWORD(p->size) : p->size) + sizeof(*p)) - -static void handle_ani_icon(riff_tag_t *rtp, enum res_e type, int isswapped) -{ - cursor_dir_entry_t *cdp; - cursor_header_t *chp; - int count; - int ctype; - int i; - static int once = 0; /* This will trigger only once per file! */ - const char *anistr = type == res_aniico ? "icon" : "cursor"; - /* Notes: - * Both cursor and icon directories are similar - * Both cursor and icon headers are similar - */ - - chp = (cursor_header_t *)(rtp+1); - cdp = (cursor_dir_entry_t *)(chp+1); - count = isswapped ? BYTESWAP_WORD(chp->count) : chp->count; - ctype = isswapped ? BYTESWAP_WORD(chp->type) : chp->type; - chp->reserved = BYTESWAP_WORD(chp->reserved); - chp->type = BYTESWAP_WORD(chp->type); - chp->count = BYTESWAP_WORD(chp->count); - - if(type == res_anicur && ctype != 2 && !once) - { - parser_warning("Animated cursor contains invalid \"icon\" tag cursor-file (%d->%s)", - ctype, - ctype == 1 ? "icontype" : "?"); - once++; - } - else if(type == res_aniico && ctype != 1 && !once) - { - parser_warning("Animated icon contains invalid \"icon\" tag icon-file (%d->%s)", - ctype, - ctype == 2 ? "cursortype" : "?"); - once++; - } - else if(ctype != 1 && ctype != 2 && !once) - { - parser_warning("Animated %s contains invalid \"icon\" tag file-type (%d; neither icon nor cursor)", anistr, ctype); - once++; - } - - for(i = 0; i < count; i++) - { - DWORD ofs = isswapped ? BYTESWAP_DWORD(cdp[i].offset) : cdp[i].offset; - DWORD sze = isswapped ? BYTESWAP_DWORD(cdp[i].ressize) : cdp[i].ressize; - if(ofs > rtp->size || ofs+sze > rtp->size) - parser_error("Animated %s's data corrupt", anistr); - convert_bitmap((char *)chp + ofs, 0); - cdp[i].xhot = BYTESWAP_WORD(cdp->xhot); - cdp[i].yhot = BYTESWAP_WORD(cdp->yhot); - cdp[i].ressize = BYTESWAP_DWORD(cdp->ressize); - cdp[i].offset = BYTESWAP_DWORD(cdp->offset); - } -} - -static void handle_ani_list(riff_tag_t *lst, enum res_e type, int isswapped) -{ - riff_tag_t *rtp = lst+1; /* Skip the "LIST" tag */ - - while((char *)rtp < (char *)lst + lst->size + sizeof(*lst)) - { - if(!memcmp(rtp->tag, info, sizeof(info))) - { - rtp = SKIP_TAG(rtp,4); - } - else if(!memcmp(rtp->tag, inam, sizeof(inam))) - { - /* Ignore the icon/cursor name; its a string */ - rtp = NEXT_TAG(rtp); - } - else if(!memcmp(rtp->tag, iart, sizeof(iart))) - { - /* Ignore the author's name; its a string */ - rtp = NEXT_TAG(rtp); - } - else if(!memcmp(rtp->tag, fram, sizeof(fram))) - { - /* This should be followed by "icon"s, but we - * simply ignore this because it is pure - * non-information. - */ - rtp = SKIP_TAG(rtp,4); - } - else if(!memcmp(rtp->tag, icon, sizeof(icon))) - { - handle_ani_icon(rtp, type, isswapped); - rtp = NEXT_TAG(rtp); - } - else - internal_error(__FILE__, __LINE__, "Unknown tag \"%c%c%c%c\" in RIFF file", - isprint(rtp->tag[0]) ? rtp->tag[0] : '.', - isprint(rtp->tag[1]) ? rtp->tag[1] : '.', - isprint(rtp->tag[2]) ? rtp->tag[2] : '.', - isprint(rtp->tag[3]) ? rtp->tag[3] : '.'); - - if((UINT_PTR)rtp & 1) - rtp = SKIP_TAG(rtp,1); - } -} - -ani_curico_t *new_ani_curico(enum res_e type, raw_data_t *rd, int *memopt) -{ - ani_curico_t *ani = (ani_curico_t *)xmalloc(sizeof(ani_curico_t)); - riff_tag_t *rtp; - int isswapped = 0; - int doswap; - const char *anistr = type == res_aniico ? "icon" : "cursor"; - - assert(!memcmp(rd->data, riff, sizeof(riff))); - assert(type == res_anicur || type == res_aniico); - - rtp = (riff_tag_t *)rd->data; - - if(BYTESWAP_DWORD(rtp->size) + 2*sizeof(DWORD) == rd->size) - isswapped = 1; - else if(rtp->size + 2*sizeof(DWORD) == rd->size) - isswapped = 0; - else - parser_error("Animated %s has an invalid RIFF length\n", anistr); - - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - case WRC_BO_LITTLE: -#else - case WRC_BO_BIG: -#endif - doswap = !isswapped; - break; - default: - doswap = isswapped; - } - - /* - * When to swap what: - * isswapped | doswap | - * ----------+--------+--------------------------------- - * 0 | 0 | read native; don't convert - * 1 | 0 | read swapped size; don't convert - * 0 | 1 | read native; convert - * 1 | 1 | read swapped size; convert - * Reading swapped size if necessary to calculate in native - * format. E.g. a little-endian source on a big-endian - * processor. - */ - if(doswap) - { - /* We only go through the RIFF file if we need to swap - * bytes in words/dwords. Else we couldn't care less - * what the file contains. This is consistent with - * MS' rc.exe, which doesn't complain at all, even though - * the file format might not be entirely correct. - */ - rtp++; /* Skip the "RIFF" tag */ - - while((char *)rtp < (char *)rd->data + rd->size) - { - if(!memcmp(rtp->tag, acon, sizeof(acon))) - { - rtp = SKIP_TAG(rtp,4); - } - else if(!memcmp(rtp->tag, list, sizeof(list))) - { - handle_ani_list(rtp, type, isswapped); - rtp = NEXT_TAG(rtp); - } - else if(!memcmp(rtp->tag, anih, sizeof(anih))) - { - aniheader_t *ahp = (aniheader_t *)((char *)(rtp+1)); - ahp->structsize = BYTESWAP_DWORD(ahp->structsize); - ahp->frames = BYTESWAP_DWORD(ahp->frames); - ahp->steps = BYTESWAP_DWORD(ahp->steps); - ahp->cx = BYTESWAP_DWORD(ahp->cx); - ahp->cy = BYTESWAP_DWORD(ahp->cy); - ahp->bitcount = BYTESWAP_DWORD(ahp->bitcount); - ahp->planes = BYTESWAP_DWORD(ahp->planes); - ahp->rate = BYTESWAP_DWORD(ahp->rate); - ahp->flags = BYTESWAP_DWORD(ahp->flags); - rtp = NEXT_TAG(rtp); - } - else if(!memcmp(rtp->tag, rate, sizeof(rate))) - { - int cnt = rtp->size / sizeof(DWORD); - DWORD *dwp = (DWORD *)(rtp+1); - int i; - for(i = 0; i < cnt; i++) - dwp[i] = BYTESWAP_DWORD(dwp[i]); - rtp = NEXT_TAG(rtp); - } - else if(!memcmp(rtp->tag, seq, sizeof(seq))) - { - int cnt = rtp->size / sizeof(DWORD); - DWORD *dwp = (DWORD *)(rtp+1); - int i; - for(i = 0; i < cnt; i++) - dwp[i] = BYTESWAP_DWORD(dwp[i]); - rtp = NEXT_TAG(rtp); - } - else - internal_error(__FILE__, __LINE__, "Unknown tag \"%c%c%c%c\" in RIFF file", - isprint(rtp->tag[0]) ? rtp->tag[0] : '.', - isprint(rtp->tag[1]) ? rtp->tag[1] : '.', - isprint(rtp->tag[2]) ? rtp->tag[2] : '.', - isprint(rtp->tag[3]) ? rtp->tag[3] : '.'); - - if((UINT_PTR)rtp & 1) - rtp = SKIP_TAG(rtp,1); - } - - /* We must end correctly here */ - if((char *)rtp != (char *)rd->data + rd->size) - parser_error("Animated %s contains invalid field size(s)", anistr); - } - - ani->data = rd; - if(memopt) - { - ani->memopt = *memopt; - free(memopt); - } - else - ani->memopt = WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE; - return ani; -} -#undef NEXT_TAG - -/* Bitmaps */ -bitmap_t *new_bitmap(raw_data_t *rd, int *memopt) -{ - bitmap_t *bmp = (bitmap_t *)xmalloc(sizeof(bitmap_t)); - - bmp->data = rd; - if(memopt) - { - bmp->memopt = *memopt; - free(memopt); - } - else - bmp->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE; - rd->size -= convert_bitmap(rd->data, rd->size); - return bmp; -} - -ver_words_t *new_ver_words(int i) -{ - ver_words_t *w = (ver_words_t *)xmalloc(sizeof(ver_words_t)); - w->words = (WORD *)xmalloc(sizeof(WORD)); - w->words[0] = (WORD)i; - w->nwords = 1; - return w; -} - -ver_words_t *add_ver_words(ver_words_t *w, int i) -{ - w->words = (WORD *)xrealloc(w->words, (w->nwords+1) * sizeof(WORD)); - w->words[w->nwords] = (WORD)i; - w->nwords++; - return w; -} - -#define MSGTAB_BAD_PTR(p, b, l, r) (((l) - ((char *)(p) - (char *)(b))) > (r)) -messagetable_t *new_messagetable(raw_data_t *rd, int *memopt) -{ - messagetable_t *msg = (messagetable_t *)xmalloc(sizeof(messagetable_t)); - msgtab_block_t *mbp; - DWORD nblk; - DWORD i; - WORD lo; - WORD hi; - - msg->data = rd; - if(memopt) - { - msg->memopt = *memopt; - free(memopt); - } - else - msg->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE; - - if(rd->size < sizeof(DWORD)) - parser_error("Invalid messagetable, size too small\n"); - - nblk = *(DWORD *)rd->data; - lo = WRC_LOWORD(nblk); - hi = WRC_HIWORD(nblk); - - /* FIXME: - * This test will fail for all n*2^16 blocks in the messagetable. - * However, no sane person would want to have so many blocks - * and have a table of megabytes attached. - * So, I will assume that we have less than 2^16 blocks in the table - * and all will just work out fine. Otherwise, we would need to test - * the ID, offset and length (and flag) fields to be very sure. - */ - if(hi && lo) - internal_error(__FILE__, __LINE__, "Messagetable contains more than 65535 blocks; cannot determine endian\n"); - if(!hi && !lo) - parser_error("Invalid messagetable block count 0\n"); - - if(!hi && lo) /* Messagetable byteorder == native byteorder */ - { -#ifdef WORDS_BIGENDIAN - if(byteorder != WRC_BO_LITTLE) goto out; -#else - if(byteorder != WRC_BO_BIG) goto out; -#endif - /* Resource byteorder != native byteorder */ - - mbp = (msgtab_block_t *)&(((DWORD *)rd->data)[1]); - if(MSGTAB_BAD_PTR(mbp, rd->data, rd->size, nblk * sizeof(*mbp))) - parser_error("Messagetable's blocks are outside of defined data\n"); - for(i = 0; i < nblk; i++) - { - msgtab_entry_t *mep, *next_mep; - DWORD id; - - mep = (msgtab_entry_t *)(((char *)rd->data) + mbp[i].offset); - - for(id = mbp[i].idlo; id <= mbp[i].idhi; id++) - { - if(MSGTAB_BAD_PTR(mep, rd->data, rd->size, mep->length)) - parser_error("Messagetable's data for block %d, ID 0x%08x is outside of defined data\n", i, id); - if(mep->flags == 1) /* Docu says 'flags == 0x0001' for unicode */ - { - WORD *wp = (WORD *)&mep[1]; - int l = mep->length/2 - 2; /* Length included header */ - int n; - - if(mep->length & 1) - parser_error("Message 0x%08x is unicode (block %d), but has odd length (%d)\n", id, i, mep->length); - for(n = 0; n < l; n++) - wp[n] = BYTESWAP_WORD(wp[n]); - - } - next_mep = (msgtab_entry_t *)(((char *)mep) + mep->length); - mep->length = BYTESWAP_WORD(mep->length); - mep->flags = BYTESWAP_WORD(mep->flags); - mep = next_mep; - } - - mbp[i].idlo = BYTESWAP_DWORD(mbp[i].idlo); - mbp[i].idhi = BYTESWAP_DWORD(mbp[i].idhi); - mbp[i].offset = BYTESWAP_DWORD(mbp[i].offset); - } - } - if(hi && !lo) /* Messagetable byteorder != native byteorder */ - { -#ifdef WORDS_BIGENDIAN - if(byteorder == WRC_BO_LITTLE) goto out; -#else - if(byteorder == WRC_BO_BIG) goto out; -#endif - /* Resource byteorder == native byteorder */ - - mbp = (msgtab_block_t *)&(((DWORD *)rd->data)[1]); - nblk = BYTESWAP_DWORD(nblk); - if(MSGTAB_BAD_PTR(mbp, rd->data, rd->size, nblk * sizeof(*mbp))) - parser_error("Messagetable's blocks are outside of defined data\n"); - for(i = 0; i < nblk; i++) - { - msgtab_entry_t *mep; - DWORD id; - - mbp[i].idlo = BYTESWAP_DWORD(mbp[i].idlo); - mbp[i].idhi = BYTESWAP_DWORD(mbp[i].idhi); - mbp[i].offset = BYTESWAP_DWORD(mbp[i].offset); - mep = (msgtab_entry_t *)(((char *)rd->data) + mbp[i].offset); - - for(id = mbp[i].idlo; id <= mbp[i].idhi; id++) - { - mep->length = BYTESWAP_WORD(mep->length); - mep->flags = BYTESWAP_WORD(mep->flags); - - if(MSGTAB_BAD_PTR(mep, rd->data, rd->size, mep->length)) - parser_error("Messagetable's data for block %d, ID 0x%08x is outside of defined data\n", i, id); - if(mep->flags == 1) /* Docu says 'flags == 0x0001' for unicode */ - { - WORD *wp = (WORD *)&mep[1]; - int l = mep->length/2 - 2; /* Length included header */ - int n; - - if(mep->length & 1) - parser_error("Message 0x%08x is unicode (block %d), but has odd length (%d)\n", id, i, mep->length); - for(n = 0; n < l; n++) - wp[n] = BYTESWAP_WORD(wp[n]); - - } - mep = (msgtab_entry_t *)(((char *)mep) + mep->length); - } - } - } - - out: - return msg; -} -#undef MSGTAB_BAD_PTR - -void copy_raw_data(raw_data_t *dst, raw_data_t *src, unsigned int offs, int len) -{ - assert(offs <= src->size); - assert(offs + len <= src->size); - if(!dst->data) - { - dst->data = (char *)xmalloc(len); - dst->size = 0; - } - else - dst->data = (char *)xrealloc(dst->data, dst->size + len); - /* dst->size holds the offset to copy to */ - memcpy(dst->data + dst->size, src->data + offs, len); - dst->size += len; -} - -int *new_int(int i) -{ - int *ip = (int *)xmalloc(sizeof(int)); - *ip = i; - return ip; -} - -stringtable_t *new_stringtable(lvc_t *lvc) -{ - stringtable_t *stt = (stringtable_t *)xmalloc(sizeof(stringtable_t)); - - memset( stt, 0, sizeof(*stt) ); - if(lvc) - stt->lvc = *lvc; - - return stt; -} - -toolbar_t *new_toolbar(int button_width, int button_height, toolbar_item_t *items, int nitems) -{ - toolbar_t *tb = (toolbar_t *)xmalloc(sizeof(toolbar_t)); - tb->button_width = button_width; - tb->button_height = button_height; - tb->nitems = nitems; - tb->items = items; - return tb; -} - -dlginit_t *new_dlginit(raw_data_t *rd, int *memopt) -{ - dlginit_t *di = (dlginit_t *)xmalloc(sizeof(dlginit_t)); - di->data = rd; - if(memopt) - { - di->memopt = *memopt; - free(memopt); - } - else - di->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE; - - return di; -} - -style_pair_t *new_style_pair(style_t *style, style_t *exstyle) -{ - style_pair_t *sp = (style_pair_t *)xmalloc(sizeof(style_pair_t)); - sp->style = style; - sp->exstyle = exstyle; - return sp; -} - -style_t *new_style(DWORD or_mask, DWORD and_mask) -{ - style_t *st = (style_t *)xmalloc(sizeof(style_t)); - st->or_mask = or_mask; - st->and_mask = and_mask; - return st; -} diff --git a/reactos/tools/wrc/newstruc.h b/reactos/tools/wrc/newstruc.h deleted file mode 100644 index 2e46b144035..00000000000 --- a/reactos/tools/wrc/newstruc.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Create dynamic new structures of various types - * - * 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 __WRC_NEWSTRUC_H -#define __WRC_NEWSTRUC_H - -#include "wrctypes.h" - -#define __NEW_STRUCT_FUNC(p) \ - p##_t *new_##p(void)\ - {\ - p##_t * ret = xmalloc(sizeof(*ret)); \ - memset( ret, 0, sizeof(*ret) ); \ - return ret; \ - } - -#define __NEW_STRUCT_PROTO(p) p##_t *new_##p(void) - -__NEW_STRUCT_PROTO(dialog); -__NEW_STRUCT_PROTO(dialogex); -__NEW_STRUCT_PROTO(name_id); -__NEW_STRUCT_PROTO(menu); -__NEW_STRUCT_PROTO(menuex); -__NEW_STRUCT_PROTO(menu_item); -__NEW_STRUCT_PROTO(menuex_item); -__NEW_STRUCT_PROTO(control); -__NEW_STRUCT_PROTO(icon); -__NEW_STRUCT_PROTO(cursor); -__NEW_STRUCT_PROTO(versioninfo); -__NEW_STRUCT_PROTO(ver_value); -__NEW_STRUCT_PROTO(ver_block); -__NEW_STRUCT_PROTO(stt_entry); -__NEW_STRUCT_PROTO(accelerator); -__NEW_STRUCT_PROTO(event); -__NEW_STRUCT_PROTO(raw_data); -__NEW_STRUCT_PROTO(lvc); -__NEW_STRUCT_PROTO(res_count); -__NEW_STRUCT_PROTO(string); -__NEW_STRUCT_PROTO(toolbar_item); -__NEW_STRUCT_PROTO(ani_any); - -resource_t *new_resource(enum res_e t, void *res, int memopt, language_t *lan); -version_t *new_version(DWORD v); -characts_t *new_characts(DWORD c); -language_t *new_language(int id, int sub); -language_t *dup_language(language_t *l); -version_t *dup_version(version_t *v); -characts_t *dup_characts(characts_t *c); -html_t *new_html(raw_data_t *rd, int *memopt); -rcdata_t *new_rcdata(raw_data_t *rd, int *memopt); -font_id_t *new_font_id(int size, string_t *face, int weight, int italic); -user_t *new_user(name_id_t *type, raw_data_t *rd, int *memopt); -font_t *new_font(raw_data_t *rd, int *memopt); -fontdir_t *new_fontdir(raw_data_t *rd, int *memopt); -icon_group_t *new_icon_group(raw_data_t *rd, int *memopt); -cursor_group_t *new_cursor_group(raw_data_t *rd, int *memopt); -ani_curico_t *new_ani_curico(enum res_e type, raw_data_t *rd, int *memopt); -bitmap_t *new_bitmap(raw_data_t *rd, int *memopt); -ver_words_t *new_ver_words(int i); -ver_words_t *add_ver_words(ver_words_t *w, int i); -messagetable_t *new_messagetable(raw_data_t *rd, int *memopt); -dlginit_t *new_dlginit(raw_data_t *rd, int *memopt); -void copy_raw_data(raw_data_t *dst, raw_data_t *src, unsigned int offs, int len); -int *new_int(int i); -stringtable_t *new_stringtable(lvc_t *lvc); -toolbar_t *new_toolbar(int button_width, int button_Height, toolbar_item_t *items, int nitems); -style_pair_t *new_style_pair(style_t *style, style_t *exstyle); -style_t *new_style(DWORD or_mask, DWORD and_mask); - -#endif diff --git a/reactos/tools/wrc/parser.h b/reactos/tools/wrc/parser.h deleted file mode 100644 index 8be2269dc12..00000000000 --- a/reactos/tools/wrc/parser.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 1998 Bertho A. Stultiens (BS) - * - * Shared things between parser.l and parser.y and some others - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef __WRC_PARSER_H -#define __WRC_PARSER_H - -/* From parser.y */ -extern int parser_debug; -extern int want_nl; /* Set when getting line-numers */ -extern int want_id; /* Set when getting the resource name */ - -int parser_parse(void); - -/* From parser.l */ -extern FILE *parser_in; -extern char *parser_text; -extern int yy_flex_debug; - -int parser_lex(void); - -#endif - diff --git a/reactos/tools/wrc/parser.l b/reactos/tools/wrc/parser.l deleted file mode 100644 index 98f9c85d778..00000000000 --- a/reactos/tools/wrc/parser.l +++ /dev/null @@ -1,640 +0,0 @@ -/* -*-C-*- - * - * Copyright 1998-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: - * 21-May-2000 BS - Fixed the ident requirement of resource names - * which can be keywords. - * 30-Apr-2000 BS - Reintegration into the wine-tree - * 11-Jan-2000 BS - Very drastic cleanup because we don't have a - * preprocessor in here anymore. - * 02-Jan-2000 BS - Removed the preprocessor code - * 23-Dec-1999 BS - Removed the copyright for Martin von Loewis. - * There is really nothing left of his code in - * this parser. - * 20-Jun-1998 BS - Changed the filename conversion. Filenames are - * case-sensitive inder *nix, but not under dos. - * default behaviour is to convert to lower case. - * - All backslashes are converted to forward and - * both single and double slash is recognized as - * MS/Borland does. - * - Fixed a bug in 'yywf' case that prevented - * double quoted names to be scanned propperly. - * - * 19-May-1998 BS - Started to build a preprocessor. - * - Changed keyword processing completely to - * table-lookups. - * - * 20-Apr-1998 BS - Added ';' comment stripping - * - * 17-Apr-1998 BS - Made the win32 keywords optional when compiling in - * 16bit mode - * - * 15-Apr-1998 BS - Changed string handling to include escapes - * - Added unicode string handling (no codepage - * translation though). - * - 'Borrowed' the main idea of string scanning from - * the flex manual pages. - * - Added conditional handling of scanning depending - * on the state of the parser. This was mainly required - * to distinguish a file to load or raw data that - * follows. MS's definition of filenames is rather - * complex... It can be unquoted or double quoted. If - * double quoted, then the '\\' char is not automatically - * escaped according to Borland's rc compiler, but it - * accepts both "\\path\\file.rc" and "\path\file.rc". - * This makes life very hard! I go for the escaped - * version, as this seems to be the documented way... - * - Single quoted strings are now parsed and converted - * here. - * - Added comment stripping. The implementation is - * 'borrowed' from the flex manpages. - * - Rebuild string processing so that it may contain - * escaped '\0'. - */ - -/* Exclusive string handling */ -%x tkstr -/* Exclusive unicode string handling */ -%x tklstr -/* Exclusive rcdata single quoted data handling */ -%x tkrcd -/* Exclusive comment eating... */ -%x comment -/* Set when stripping c-junk */ -%x pp_cstrip -/* Set when scanning #line style directives */ -%x pp_line -/* Set when scanning #pragma */ -%x pp_pragma -%x pp_code_page - -%option stack -%option nounput noyy_top_state noyywrap -%option 8bit never-interactive -%option prefix="parser_" - -/* Some shortcut definitions */ -ws [ \f\t\r] -cident [a-zA-Z_][0-9a-zA-Z_]* - -%{ - -/*#define LEX_DEBUG*/ - -#include -#include -#include -#include -#include - -#include "wine/unicode.h" -#include "wrc.h" -#include "utils.h" -#include "parser.h" -#include "newstruc.h" - -#include "parser.tab.h" - -/* Always update the current character position within a line */ -#define YY_USER_ACTION char_number+=yyleng; wanted_id = want_id; want_id = 0; - -static void addcchar(char c); -static void addwchar(WCHAR s); -static string_t *get_buffered_cstring(void); -static string_t *get_buffered_wstring(void); -static string_t *make_string(char *s); - -static char *cbuffer; /* Buffers for string collection */ -static int cbufidx; -static int cbufalloc = 0; -static WCHAR *wbuffer; -static int wbufidx; -static int wbufalloc = 0; - -static int current_codepage = -1; /* use language default */ - -/* - * This one is a bit tricky. - * We set 'want_id' in the parser to get the first - * identifier we get across in the scanner, but we - * also want it to be reset at nearly any token we - * see. Exceptions are: - * - newlines - * - comments - * - whitespace - * - * The scanner will automatically reset 'want_id' - * after *each* scanner reduction and puts is value - * into the var below. In this way we can see the - * state after the YY_RULE_SETUP (i.e. the user action; - * see above) and don't have to worry too much when - * it needs to be reset. - */ -static int wanted_id = 0; -static int save_wanted_id; /* To save across comment reductions */ - -struct keyword { - const char *keyword; - int token; - int isextension; - int needcase; - int alwayskw; -}; - -static struct keyword keywords[] = { - { "ACCELERATORS", tACCELERATORS, 0, 0, 0}, - { "ALT", tALT, 0, 0, 0}, - { "ASCII", tASCII, 0, 0, 0}, - { "AUTO3STATE", tAUTO3STATE, 1, 0, 0}, - { "AUTOCHECKBOX", tAUTOCHECKBOX, 1, 0, 0}, - { "AUTORADIOBUTTON", tAUTORADIOBUTTON, 1, 0, 0}, - { "BEGIN", tBEGIN, 0, 0, 0}, - { "BITMAP", tBITMAP, 0, 0, 0}, - { "BLOCK", tBLOCK, 0, 0, 0}, - { "BUTTON", tBUTTON, 1, 0, 0}, - { "CAPTION", tCAPTION, 0, 0, 0}, - { "CHARACTERISTICS", tCHARACTERISTICS, 1, 0, 0}, - { "CHECKBOX", tCHECKBOX, 0, 0, 0}, - { "CHECKED", tCHECKED, 0, 0, 0}, - { "CLASS", tCLASS, 0, 0, 0}, - { "COMBOBOX", tCOMBOBOX, 0, 0, 0}, - { "CONTROL", tCONTROL, 0, 0, 0}, - { "CTEXT", tCTEXT, 0, 0, 0}, - { "CURSOR", tCURSOR, 0, 0, 0}, - { "DEFPUSHBUTTON", tDEFPUSHBUTTON, 0, 0, 0}, - { "DIALOG", tDIALOG, 0, 0, 0}, - { "DIALOGEX", tDIALOGEX, 1, 0, 0}, - { "DISCARDABLE", tDISCARDABLE, 0, 0, 0}, - { "DLGINIT", tDLGINIT, 0, 0, 0}, - { "EDITTEXT", tEDITTEXT, 0, 0, 0}, - { "END", tEND, 0, 0, 0}, - { "EXSTYLE", tEXSTYLE, 0, 0, 0}, - { "FILEFLAGS", tFILEFLAGS, 0, 0, 0}, - { "FILEFLAGSMASK", tFILEFLAGSMASK, 0, 0, 0}, - { "FILEOS", tFILEOS, 0, 0, 0}, - { "FILESUBTYPE", tFILESUBTYPE, 0, 0, 0}, - { "FILETYPE", tFILETYPE, 0, 0, 0}, - { "FILEVERSION", tFILEVERSION, 0, 0, 0}, - { "FIXED", tFIXED, 0, 0, 0}, - { "FONT", tFONT, 0, 0, 0}, - { "FONTDIR", tFONTDIR, 0, 0, 0}, /* This is a Borland BRC extension */ - { "GRAYED", tGRAYED, 0, 0, 0}, - { "GROUPBOX", tGROUPBOX, 0, 0, 0}, - { "HELP", tHELP, 0, 0, 0}, - { "HTML", tHTML, 0, 0, 0}, - { "ICON", tICON, 0, 0, 0}, - { "IMPURE", tIMPURE, 0, 0, 0}, - { "INACTIVE", tINACTIVE, 0, 0, 0}, - { "LANGUAGE", tLANGUAGE, 1, 0, 1}, - { "LISTBOX", tLISTBOX, 0, 0, 0}, - { "LOADONCALL", tLOADONCALL, 0, 0, 0}, - { "LTEXT", tLTEXT, 0, 0, 0}, - { "MENU", tMENU, 0, 0, 0}, - { "MENUBARBREAK", tMENUBARBREAK, 0, 0, 0}, - { "MENUBREAK", tMENUBREAK, 0, 0, 0}, - { "MENUEX", tMENUEX, 1, 0, 0}, - { "MENUITEM", tMENUITEM, 0, 0, 0}, - { "MESSAGETABLE", tMESSAGETABLE, 1, 0, 0}, - { "MOVEABLE", tMOVEABLE, 0, 0, 0}, - { "NOINVERT", tNOINVERT, 0, 0, 0}, - { "NOT", tNOT, 0, 0, 0}, - { "POPUP", tPOPUP, 0, 0, 0}, - { "PRELOAD", tPRELOAD, 0, 0, 0}, - { "PRODUCTVERSION", tPRODUCTVERSION, 0, 0, 0}, - { "PURE", tPURE, 0, 0, 0}, - { "PUSHBUTTON", tPUSHBUTTON, 0, 0, 0}, - { "RADIOBUTTON", tRADIOBUTTON, 0, 0, 0}, - { "RCDATA", tRCDATA, 0, 0, 0}, - { "RTEXT", tRTEXT, 0, 0, 0}, - { "SCROLLBAR", tSCROLLBAR, 0, 0, 0}, - { "SEPARATOR", tSEPARATOR, 0, 0, 0}, - { "SHIFT", tSHIFT, 0, 0, 0}, - { "STATE3", tSTATE3, 1, 0, 0}, - { "STRING", tSTRING, 0, 0, 0}, - { "STRINGTABLE", tSTRINGTABLE, 0, 0, 1}, - { "STYLE", tSTYLE, 0, 0, 0}, - { "TOOLBAR", tTOOLBAR, 1, 0, 0}, - { "VALUE", tVALUE, 0, 0, 0}, - { "VERSION", tVERSION, 1, 0, 0}, - { "VERSIONINFO", tVERSIONINFO, 0, 0, 0}, - { "VIRTKEY", tVIRTKEY, 0, 0, 0} -}; - -#define NKEYWORDS (sizeof(keywords)/sizeof(keywords[0])) -#define KWP(p) ((const struct keyword *)(p)) -static int kw_cmp_func(const void *s1, const void *s2) -{ - int ret; - ret = strcasecmp(KWP(s1)->keyword, KWP(s2)->keyword); - if(!ret && (KWP(s1)->needcase || KWP(s2)->needcase)) - return strcmp(KWP(s1)->keyword, KWP(s2)->keyword); - else - return ret; -} - -#define KW_BSEARCH -#define DO_SORT -static struct keyword *iskeyword(char *kw) -{ - struct keyword *kwp; - struct keyword key; - key.keyword = kw; - key.needcase = 0; -#ifdef DO_SORT - { - /* Make sure that it is sorted for bsearsh */ - static int sorted = 0; - if(!sorted) - { - qsort(keywords, NKEYWORDS, sizeof(keywords[0]), kw_cmp_func); - sorted = 1; - } - } -#endif -#ifdef KW_BSEARCH - kwp = bsearch(&key, keywords, NKEYWORDS, sizeof(keywords[0]), kw_cmp_func); -#else - { - int i; - for(i = 0; i < NKEYWORDS; i++) - { - if(!kw_cmp_func(&key, &keywords[i])) - break; - } - if(i < NKEYWORDS) - kwp = &keywords[i]; - else - kwp = NULL; - } -#endif - - if(kwp == NULL || (kwp->isextension && !extensions)) - return NULL; - else - return kwp; -} - -%} - -/* - ************************************************************************** - * The flexer starts here - ************************************************************************** - */ -%% - /* - * Catch the GCC-style line statements here and parse them. - * This has the advantage that you can #include at any - * stage in the resource file. - * The preprocessor generates line directives in the format: - * # "filename" - * - * Codes can be a sequence of: - * - 1 start of new file - * - 2 returning to previous - * - 3 system header - * - 4 interpret as C-code - * - * 4 is not used and 1 mutually excludes 2 - * Anyhow, we are not really interested in these at all - * because we only want to know the linenumber and - * filename. - */ -^{ws}*\#{ws}*pragma{ws}+ yy_push_state(pp_pragma); -^{ws}*\#{ws}* yy_push_state(pp_line); -[^\n]* { - int lineno, len; - char *cptr; - char *fname; - yy_pop_state(); - lineno = (int)strtol(yytext, &cptr, 10); - if(!lineno) - parser_error("Malformed '#...' line-directive; invalid linenumber\n"); - fname = strchr(cptr, '"'); - if(!fname) - parser_error("Malformed '#...' line-directive; missing filename\n"); - fname++; - cptr = strchr(fname, '"'); - if(!cptr) - parser_error("Malformed '#...' line-directive; missing terminating \""); - *cptr = '\0'; - line_number = lineno - 1; /* We didn't read the newline */ - input_name = xstrdup(fname); - /* ignore contents of C include files */ - len = strlen(input_name); - if (len > 1 && !strcasecmp( input_name + len - 2, ".h" )) - BEGIN(pp_cstrip); - else - BEGIN(INITIAL); - } - -code_page[^\n]* yyless(9); yy_pop_state(); yy_push_state(pp_code_page); -[^\n]* yy_pop_state(); if (pedantic) parser_warning("Unrecognized #pragma directive '%s'\n",yytext); - -\({ws}*default{ws}*\)[^\n]* current_codepage = -1; yy_pop_state(); -\({ws}*utf8{ws}*\)[^\n]* current_codepage = CP_UTF8; yy_pop_state(); -\({ws}*[0-9]+{ws}*\)[^\n]* { - char *p = yytext; - yy_pop_state(); - while (*p < '0' || *p > '9') p++; - current_codepage = strtol( p, NULL, 10 ); - if (current_codepage && current_codepage != CP_UTF8 && !wine_cp_get_table( current_codepage )) - { - parser_error("Codepage %d not supported\n", current_codepage); - current_codepage = 0; - } - } -[^\n]* yy_pop_state(); parser_error("Malformed #pragma code_page directive\n"); - - /* - * Strip everything until a ';' taking - * into account braces {} for structures, - * classes and enums. - */ -\n line_number++; char_number = 1; -. ; /* ignore */ - -\{ return tBEGIN; -\} return tEND; - -[0-9]+[lL]? { parser_lval.num = strtoul(yytext, 0, 10); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; } -0[xX][0-9A-Fa-f]+[lL]? { parser_lval.num = strtoul(yytext, 0, 16); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; } -0[oO][0-7]+[lL]? { parser_lval.num = strtoul(yytext+2, 0, 8); return toupper(yytext[yyleng-1]) == 'L' ? tLNUMBER : tNUMBER; } - - /* - * The next two rules scan identifiers and filenames. - * This is achieved by using the priority ruling - * of the scanner where a '.' is valid in a filename - * and *only* in a filename. In this case, the second - * rule will be reduced because it is longer. - */ -[A-Za-z_0-9.]+ { - struct keyword *tok = iskeyword(yytext); - - if(tok) - { - if(wanted_id && !tok->alwayskw) - { - parser_lval.str = make_string(yytext); - return tIDENT; - } - else - return tok->token; - } - else - { - parser_lval.str = make_string(yytext); - return tIDENT; - } - } -[A-Za-z_0-9./\\]+ parser_lval.str = make_string(yytext); return tFILENAME; - - /* - * Wide string scanning - */ -L\" { - yy_push_state(tklstr); - wbufidx = 0; - if(!win32) - parser_warning("16bit resource contains unicode strings\n"); - } -\"{ws}+ | -\" { - yy_pop_state(); - parser_lval.str = get_buffered_wstring(); - return tSTRING; - } -\\[0-7]{1,6} { /* octal escape sequence */ - unsigned int result; - result = strtoul(yytext+1, 0, 8); - if ( result > 0xffff ) - parser_error("Character constant out of range\n"); - addwchar((WCHAR)result); - } -\\x[0-9a-fA-F]{4} { /* hex escape sequence */ - unsigned int result; - result = strtoul(yytext+2, 0, 16); - addwchar((WCHAR)result); - } -\\x[0-9a-fA-F]{1,3} { parser_error("Invalid hex escape sequence '%s'\n", yytext); } - -\\[0-9]+ parser_error("Bad escape sequence\n"); -\\\n{ws}* line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */ -\\a addwchar('\a'); -\\b addwchar('\b'); -\\f addwchar('\f'); -\\n addwchar('\n'); -\\r addwchar('\r'); -\\t addwchar('\t'); -\\v addwchar('\v'); -\\. addwchar(yytext[1]); -\\\r\n addwchar(yytext[2]); line_number++; char_number = 1; -\"\" addwchar('\"'); /* "bla""bla" -> "bla\"bla" */ -\\\"\" addwchar('\"'); /* "bla\""bla" -> "bla\"bla" */ -\"{ws}+\" ; /* "bla" "bla" -> "blabla" */ -[^\\\n\"]+ { - char *yptr = yytext; - while(*yptr) /* FIXME: codepage translation */ - addwchar(*yptr++ & 0xff); - } -\n parser_error("Unterminated string\n"); - - /* - * Normal string scanning - */ -\" yy_push_state(tkstr); cbufidx = 0; -\"{ws}+ | -\" { - yy_pop_state(); - parser_lval.str = get_buffered_cstring(); - return tSTRING; - } -\\[0-7]{1,3} { /* octal escape sequence */ - int result; - result = strtol(yytext+1, 0, 8); - if ( result > 0xff ) - parser_error("Character constant out of range\n"); - addcchar((char)result); - } -\\x[0-9a-fA-F]{2} { /* hex escape sequence */ - int result; - result = strtol(yytext+2, 0, 16); - addcchar((char)result); - } -\\x[0-9a-fA-F] { parser_error("Invalid hex escape sequence '%s'\n", yytext); } - -\\[0-9]+ parser_error("Bad escape sequence\n"); -\\\n{ws}* line_number++; char_number = 1; /* backslash at EOL continues string after leading whitespace on next line */ -\\a addcchar('\a'); -\\b addcchar('\b'); -\\f addcchar('\f'); -\\n addcchar('\n'); -\\r addcchar('\r'); -\\t addcchar('\t'); -\\v addcchar('\v'); -\\. addcchar(yytext[1]); -\\\r\n addcchar(yytext[2]); line_number++; char_number = 1; -[^\\\n\"]+ { - char *yptr = yytext; - while(*yptr) - addcchar(*yptr++); - } -\"\" addcchar('\"'); /* "bla""bla" -> "bla\"bla" */ -\\\"\" addcchar('\"'); /* "bla\""bla" -> "bla\"bla" */ -\"{ws}+\" ; /* "bla" "bla" -> "blabla" */ -\n parser_error("Unterminated string\n"); - - /* - * Raw data scanning - */ -\' yy_push_state(tkrcd); cbufidx = 0; -\' { - yy_pop_state(); - parser_lval.raw = new_raw_data(); - parser_lval.raw->size = cbufidx; - parser_lval.raw->data = xmalloc(parser_lval.raw->size); - memcpy(parser_lval.raw->data, cbuffer, parser_lval.raw->size); - return tRAWDATA; - } -[0-9a-fA-F]{2} { - int result; - result = strtol(yytext, 0, 16); - addcchar((char)result); - } -{ws}+ ; /* Ignore space */ -\n line_number++; char_number = 1; -. parser_error("Malformed data-line\n"); - - /* - * Comment stripping - * Should never occur after preprocessing - */ -"/*" { - yy_push_state(comment); - save_wanted_id = wanted_id; - if(!no_preprocess) - parser_warning("Found comments after preprocessing, please report\n"); - } -[^*\n]* ; -"*"+[^*/\n]* ; -\n line_number++; char_number = 1; -"*"+"/" yy_pop_state(); want_id = save_wanted_id; - -;[^\n]* want_id = wanted_id; /* not really comment, but left-over c-junk */ -"//"[^\n]* want_id = wanted_id; if(!no_preprocess) parser_warning("Found comments after preprocessing, please report\n"); - -\n { - want_id = wanted_id; - line_number++; - char_number = 1; - if(want_nl) - { - want_nl = 0; - return tNL; - } - } -{ws}+ want_id = wanted_id; /* Eat whitespace */ - -. return yytext[0]; - -<*>.|\n { - /* Catch all rule to find any unmatched text */ - if(*yytext == '\n') - { - line_number++; - char_number = 1; - } - parser_warning("Unmatched text '%c' (0x%02x) YY_START=%d\n", - isprint(*yytext & 0xff) ? *yytext : '.', *yytext, YY_START); - } - -%% - -/* These dup functions copy the enclosed '\0' from - * the resource string. - */ -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 void addwchar(WCHAR s) -{ - if(wbufidx >= wbufalloc) - { - wbufalloc += 1024; - wbuffer = xrealloc(wbuffer, wbufalloc * sizeof(wbuffer[0])); - if(wbufalloc > 65536) - parser_warning("Reallocating wide string buffer larger than 64kB\n"); - } - wbuffer[wbufidx++] = s; -} - -static string_t *get_buffered_cstring(void) -{ - string_t *str = new_string(); - - str->size = cbufidx; - str->type = str_char; - str->str.cstr = xmalloc(cbufidx+1); - memcpy(str->str.cstr, cbuffer, cbufidx); - str->str.cstr[cbufidx] = '\0'; - - if (!current_codepage || current_codepage == -1 || !win32) /* store as ANSI string */ - { - if (!current_codepage) parser_error("Codepage set to Unicode only, cannot use ASCII string here\n"); - return str; - } - else /* convert to Unicode before storing */ - { - string_t *str_w = convert_string( str, str_unicode, current_codepage ); - if (!check_unicode_conversion( str, str_w, current_codepage )) - parser_error("String %s does not convert identically to Unicode and back in codepage %d. " - "Try using a Unicode string instead\n", str->str.cstr, current_codepage ); - free_string( str ); - return str_w; - } -} - -static string_t *get_buffered_wstring(void) -{ - string_t *str = new_string(); - str->size = wbufidx; - str->type = str_unicode; - str->str.wstr = xmalloc((wbufidx+1)*sizeof(WCHAR)); - memcpy(str->str.wstr, wbuffer, wbufidx*sizeof(WCHAR)); - str->str.wstr[wbufidx] = 0; - return str; -} - -static string_t *make_string(char *s) -{ - string_t *str = new_string(); - str->size = strlen(s); - str->type = str_char; - str->str.cstr = xmalloc(str->size+1); - memcpy(str->str.cstr, s, str->size+1); - return str; -} diff --git a/reactos/tools/wrc/parser.tab.c b/reactos/tools/wrc/parser.tab.c deleted file mode 100644 index 990cfbc1211..00000000000 --- a/reactos/tools/wrc/parser.tab.c +++ /dev/null @@ -1,5731 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.1. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Written by Richard Stallman by simplifying the original so called - ``semantic'' parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "2.1" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* Substitute the variable and function names. */ -#define yyparse parser_parse -#define yylex parser_lex -#define yyerror parser_error -#define yylval parser_lval -#define yychar parser_char -#define yydebug parser_debug -#define yynerrs parser_nerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - tNL = 258, - tNUMBER = 259, - tLNUMBER = 260, - tSTRING = 261, - tIDENT = 262, - tFILENAME = 263, - tRAWDATA = 264, - tACCELERATORS = 265, - tBITMAP = 266, - tCURSOR = 267, - tDIALOG = 268, - tDIALOGEX = 269, - tMENU = 270, - tMENUEX = 271, - tMESSAGETABLE = 272, - tRCDATA = 273, - tVERSIONINFO = 274, - tSTRINGTABLE = 275, - tFONT = 276, - tFONTDIR = 277, - tICON = 278, - tHTML = 279, - tAUTO3STATE = 280, - tAUTOCHECKBOX = 281, - tAUTORADIOBUTTON = 282, - tCHECKBOX = 283, - tDEFPUSHBUTTON = 284, - tPUSHBUTTON = 285, - tRADIOBUTTON = 286, - tSTATE3 = 287, - tGROUPBOX = 288, - tCOMBOBOX = 289, - tLISTBOX = 290, - tSCROLLBAR = 291, - tCONTROL = 292, - tEDITTEXT = 293, - tRTEXT = 294, - tCTEXT = 295, - tLTEXT = 296, - tBLOCK = 297, - tVALUE = 298, - tSHIFT = 299, - tALT = 300, - tASCII = 301, - tVIRTKEY = 302, - tGRAYED = 303, - tCHECKED = 304, - tINACTIVE = 305, - tNOINVERT = 306, - tPURE = 307, - tIMPURE = 308, - tDISCARDABLE = 309, - tLOADONCALL = 310, - tPRELOAD = 311, - tFIXED = 312, - tMOVEABLE = 313, - tCLASS = 314, - tCAPTION = 315, - tCHARACTERISTICS = 316, - tEXSTYLE = 317, - tSTYLE = 318, - tVERSION = 319, - tLANGUAGE = 320, - tFILEVERSION = 321, - tPRODUCTVERSION = 322, - tFILEFLAGSMASK = 323, - tFILEOS = 324, - tFILETYPE = 325, - tFILEFLAGS = 326, - tFILESUBTYPE = 327, - tMENUBARBREAK = 328, - tMENUBREAK = 329, - tMENUITEM = 330, - tPOPUP = 331, - tSEPARATOR = 332, - tHELP = 333, - tTOOLBAR = 334, - tBUTTON = 335, - tBEGIN = 336, - tEND = 337, - tDLGINIT = 338, - tNOT = 339, - pUPM = 340 - }; -#endif -/* Tokens. */ -#define tNL 258 -#define tNUMBER 259 -#define tLNUMBER 260 -#define tSTRING 261 -#define tIDENT 262 -#define tFILENAME 263 -#define tRAWDATA 264 -#define tACCELERATORS 265 -#define tBITMAP 266 -#define tCURSOR 267 -#define tDIALOG 268 -#define tDIALOGEX 269 -#define tMENU 270 -#define tMENUEX 271 -#define tMESSAGETABLE 272 -#define tRCDATA 273 -#define tVERSIONINFO 274 -#define tSTRINGTABLE 275 -#define tFONT 276 -#define tFONTDIR 277 -#define tICON 278 -#define tHTML 279 -#define tAUTO3STATE 280 -#define tAUTOCHECKBOX 281 -#define tAUTORADIOBUTTON 282 -#define tCHECKBOX 283 -#define tDEFPUSHBUTTON 284 -#define tPUSHBUTTON 285 -#define tRADIOBUTTON 286 -#define tSTATE3 287 -#define tGROUPBOX 288 -#define tCOMBOBOX 289 -#define tLISTBOX 290 -#define tSCROLLBAR 291 -#define tCONTROL 292 -#define tEDITTEXT 293 -#define tRTEXT 294 -#define tCTEXT 295 -#define tLTEXT 296 -#define tBLOCK 297 -#define tVALUE 298 -#define tSHIFT 299 -#define tALT 300 -#define tASCII 301 -#define tVIRTKEY 302 -#define tGRAYED 303 -#define tCHECKED 304 -#define tINACTIVE 305 -#define tNOINVERT 306 -#define tPURE 307 -#define tIMPURE 308 -#define tDISCARDABLE 309 -#define tLOADONCALL 310 -#define tPRELOAD 311 -#define tFIXED 312 -#define tMOVEABLE 313 -#define tCLASS 314 -#define tCAPTION 315 -#define tCHARACTERISTICS 316 -#define tEXSTYLE 317 -#define tSTYLE 318 -#define tVERSION 319 -#define tLANGUAGE 320 -#define tFILEVERSION 321 -#define tPRODUCTVERSION 322 -#define tFILEFLAGSMASK 323 -#define tFILEOS 324 -#define tFILETYPE 325 -#define tFILEFLAGS 326 -#define tFILESUBTYPE 327 -#define tMENUBARBREAK 328 -#define tMENUBREAK 329 -#define tMENUITEM 330 -#define tPOPUP 331 -#define tSEPARATOR 332 -#define tHELP 333 -#define tTOOLBAR 334 -#define tBUTTON 335 -#define tBEGIN 336 -#define tEND 337 -#define tDLGINIT 338 -#define tNOT 339 -#define pUPM 340 - - - - -/* Copy the first part of user declarations. */ -#line 1 "parser.y" - -/* - * Copyright 1994 Martin von Loewis - * Copyright 1998-2000 Bertho A. Stultiens (BS) - * 1999 Juergen Schmied (JS) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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-Jul-2000 BS - Made a fix for broken Berkeley yacc on - * non-terminals (see cjunk rule). - * 21-May-2000 BS - Partial implementation of font resources. - * - Corrected language propagation for binary - * resources such as bitmaps, icons, cursors, - * userres and rcdata. The language is now - * correct in .res files. - * - Fixed reading the resource name as ident, - * so that it may overlap keywords. - * 20-May-2000 BS - Implemented animated cursors and icons - * resource types. - * 30-Apr-2000 BS - Reintegration into the wine-tree - * 14-Jan-2000 BS - Redid the usertype resources so that they - * are compatible. - * 02-Jan-2000 BS - Removed the preprocessor from the grammar - * except for the # command (line numbers). - * - * 06-Nov-1999 JS - see CHANGES - * - * 29-Dec-1998 AdH - Grammar and function extensions. - * grammar: TOOLBAR resources, Named ICONs in - * DIALOGS - * functions: semantic actions for the grammar - * changes, resource files can now be anywhere - * on the include path instead of just in the - * current directory - * - * 20-Jun-1998 BS - Fixed a bug in load_file() where the name was not - * printed out correctly. - * - * 17-Jun-1998 BS - Fixed a bug in CLASS statement parsing which should - * also accept a tSTRING as argument. - * - * 25-May-1998 BS - Found out that I need to support language, version - * and characteristics in inline resources (bitmap, - * cursor, etc) but they can also be specified with - * a filename. This renders my filename-scanning scheme - * worthless. Need to build newline parsing to solve - * this one. - * It will come with version 1.1.0 (sigh). - * - * 19-May-1998 BS - Started to build a builtin preprocessor - * - * 30-Apr-1998 BS - Redid the stringtable parsing/handling. My previous - * ideas had some serious flaws. - * - * 27-Apr-1998 BS - Removed a lot of dead comments and put it in a doc - * file. - * - * 21-Apr-1998 BS - Added correct behavior for cursors and icons. - * - This file is growing too big. It is time to strip - * things and put it in a support file. - * - * 19-Apr-1998 BS - Tagged the stringtable resource so that only one - * resource will be created. This because the table - * has a different layout than other resources. The - * table has to be sorted, and divided into smaller - * resource entries (see comment in source). - * - * 17-Apr-1998 BS - Almost all strings, including identifiers, are parsed - * as string_t which include unicode strings upon - * input. - * - Parser now emits a warning when compiling win32 - * extensions in win16 mode. - * - * 16-Apr-1998 BS - Raw data elements are now *optionally* separated - * by commas. Read the comments in file sq2dq.l. - * - FIXME: there are instances in the source that rely - * on the fact that int==32bit and pointers are int size. - * - Fixed the conflict in menuex by changing a rule - * back into right recursion. See note in source. - * - UserType resources cannot have an expression as its - * typeclass. See note in source. - * - * 15-Apr-1998 BS - Changed all right recursion into left recursion to - * get reduction of the parsestack. - * This also helps communication between bison and flex. - * Main advantage is that the Empty rule gets reduced - * first, which is used to allocate/link things. - * It also added a shift/reduce conflict in the menuex - * handling, due to expression/option possibility, - * although not serious. - * - * 14-Apr-1998 BS - Redone almost the entire parser. We're not talking - * about making it more efficient, but readable (for me) - * and slightly easier to expand/change. - * This is done primarily by using more reduce states - * with many (intuitive) types for the various resource - * statements. - * - Added expression handling for all resources where a - * number is accepted (not only for win32). Also added - * multiply and division (not MS compatible, but handy). - * Unary minus introduced a shift/reduce conflict, but - * it is not serious. - * - * 13-Apr-1998 BS - Reordered a lot of things - * - Made the source more readable - * - Added Win32 resource definitions - * - Corrected syntax problems with an old yacc (;) - * - Added extra comment about grammar - */ -#include "config.h" -#include "wine/port.h" - -#include -#include -#include -#include -#include -#include -#ifdef HAVE_ALLOCA_H -#include -#endif - -#include "wrc.h" -#include "utils.h" -#include "newstruc.h" -#include "dumpres.h" -#include "wine/wpp.h" -#include "wine/unicode.h" -#include "parser.h" - -#if defined(YYBYACC) - /* Berkeley yacc (byacc) doesn't seem to know about these */ - /* Some *BSD supplied versions do define these though */ -# ifndef YYEMPTY -# define YYEMPTY (-1) /* Empty lookahead value of yychar */ -# endif -# ifndef YYLEX -# define YYLEX yylex() -# endif - -#elif defined(YYBISON) - /* Bison was used for original development */ - /* #define YYEMPTY -2 */ - /* #define YYLEX yylex() */ - -#else - /* No yacc we know yet */ -# if !defined(YYEMPTY) || !defined(YYLEX) -# error Yacc version/type unknown. This version needs to be verified for settings of YYEMPTY and YYLEX. -# elif defined(__GNUC__) /* gcc defines the #warning directive */ -# warning Yacc version/type unknown. It defines YYEMPTY and YYLEX, but is not tested - /* #else we just take a chance that it works... */ -# endif -#endif - -int want_nl = 0; /* Signal flex that we need the next newline */ -int want_id = 0; /* Signal flex that we need the next identifier */ -stringtable_t *tagstt; /* Stringtable tag. - * It is set while parsing a stringtable to one of - * the stringtables in the sttres list or a new one - * if the language was not parsed before. - */ -stringtable_t *sttres; /* Stringtable resources. This holds the list of - * stringtables with different lanuages - */ -static int dont_want_id = 0; /* See language parsing for details */ - -/* Set to the current options of the currently scanning stringtable */ -static int *tagstt_memopt; -static characts_t *tagstt_characts; -static version_t *tagstt_version; - -static const char riff[4] = "RIFF"; /* RIFF file magic for animated cursor/icon */ - -/* Prototypes of here defined functions */ -static event_t *get_event_head(event_t *p); -static control_t *get_control_head(control_t *p); -static ver_value_t *get_ver_value_head(ver_value_t *p); -static ver_block_t *get_ver_block_head(ver_block_t *p); -static resource_t *get_resource_head(resource_t *p); -static menuex_item_t *get_itemex_head(menuex_item_t *p); -static menu_item_t *get_item_head(menu_item_t *p); -static raw_data_t *merge_raw_data_str(raw_data_t *r1, string_t *str); -static raw_data_t *merge_raw_data_int(raw_data_t *r1, int i); -static raw_data_t *merge_raw_data_long(raw_data_t *r1, int i); -static raw_data_t *merge_raw_data(raw_data_t *r1, raw_data_t *r2); -static raw_data_t *str2raw_data(string_t *str); -static raw_data_t *int2raw_data(int i); -static raw_data_t *long2raw_data(int i); -static raw_data_t *load_file(string_t *name, language_t *lang); -static itemex_opt_t *new_itemex_opt(int id, int type, int state, int helpid); -static event_t *add_string_event(string_t *key, int id, int flags, event_t *prev); -static event_t *add_event(int key, int id, int flags, event_t *prev); -static dialogex_t *dialogex_version(version_t *v, dialogex_t *dlg); -static dialogex_t *dialogex_characteristics(characts_t *c, dialogex_t *dlg); -static dialogex_t *dialogex_language(language_t *l, dialogex_t *dlg); -static dialogex_t *dialogex_menu(name_id_t *m, dialogex_t *dlg); -static dialogex_t *dialogex_class(name_id_t *n, dialogex_t *dlg); -static dialogex_t *dialogex_font(font_id_t *f, dialogex_t *dlg); -static dialogex_t *dialogex_caption(string_t *s, dialogex_t *dlg); -static dialogex_t *dialogex_exstyle(style_t *st, dialogex_t *dlg); -static dialogex_t *dialogex_style(style_t *st, dialogex_t *dlg); -static name_id_t *convert_ctlclass(name_id_t *cls); -static control_t *ins_ctrl(int type, int special_style, control_t *ctrl, control_t *prev); -static dialog_t *dialog_version(version_t *v, dialog_t *dlg); -static dialog_t *dialog_characteristics(characts_t *c, dialog_t *dlg); -static dialog_t *dialog_language(language_t *l, dialog_t *dlg); -static dialog_t *dialog_menu(name_id_t *m, dialog_t *dlg); -static dialog_t *dialog_class(name_id_t *n, dialog_t *dlg); -static dialog_t *dialog_font(font_id_t *f, dialog_t *dlg); -static dialog_t *dialog_caption(string_t *s, dialog_t *dlg); -static dialog_t *dialog_exstyle(style_t * st, dialog_t *dlg); -static dialog_t *dialog_style(style_t * st, dialog_t *dlg); -static resource_t *build_stt_resources(stringtable_t *stthead); -static stringtable_t *find_stringtable(lvc_t *lvc); -static toolbar_item_t *ins_tlbr_button(toolbar_item_t *prev, toolbar_item_t *idrec); -static toolbar_item_t *get_tlbr_buttons_head(toolbar_item_t *p, int *nitems); -static string_t *make_filename(string_t *s); -static resource_t *build_fontdirs(resource_t *tail); -static resource_t *build_fontdir(resource_t **fnt, int nfnt); -static int rsrcid_to_token(int lookahead); - - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 -#endif - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 237 "parser.y" -typedef union YYSTYPE { - string_t *str; - int num; - int *iptr; - char *cptr; - resource_t *res; - accelerator_t *acc; - bitmap_t *bmp; - dialog_t *dlg; - dialogex_t *dlgex; - font_t *fnt; - fontdir_t *fnd; - menu_t *men; - menuex_t *menex; - html_t *html; - rcdata_t *rdt; - stringtable_t *stt; - stt_entry_t *stte; - user_t *usr; - messagetable_t *msg; - versioninfo_t *veri; - control_t *ctl; - name_id_t *nid; - font_id_t *fntid; - language_t *lan; - version_t *ver; - characts_t *chars; - event_t *event; - menu_item_t *menitm; - menuex_item_t *menexitm; - itemex_opt_t *exopt; - raw_data_t *raw; - lvc_t *lvc; - ver_value_t *val; - ver_block_t *blk; - ver_words_t *verw; - toolbar_t *tlbar; - toolbar_item_t *tlbarItems; - dlginit_t *dginit; - style_pair_t *styles; - style_t *style; - ani_any_t *ani; -} YYSTYPE; -/* Line 196 of yacc.c. */ -#line 544 "parser.tab.c" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - - -/* Line 219 of yacc.c. */ -#line 556 "parser.tab.c" - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus)) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#ifndef YY_ -# if YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) -# endif -# endif -# ifndef YY_ -# define YY_(msgid) msgid -# endif -#endif - -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# else -# define YYSTACK_ALLOC alloca -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYINCLUDED_STDLIB_H -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1) -# endif -# ifdef __cplusplus -extern "C" { -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifdef __cplusplus -} -# endif -# endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short int yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined (__GNUC__) && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short int yysigned_char; -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 3 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 677 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 97 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 83 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 258 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 572 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 340 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = -{ - 0, 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, 2, 2, 2, 2, 2, 86, 2, - 95, 96, 89, 87, 94, 88, 2, 90, 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, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 85, 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, 84, 2, 91, 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, 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, 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, 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, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 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, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 92, - 93 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned short int yyprhs[] = -{ - 0, 0, 3, 5, 6, 9, 12, 16, 20, 22, - 23, 29, 30, 32, 34, 36, 38, 40, 42, 44, - 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, - 66, 68, 70, 72, 74, 76, 78, 82, 86, 90, - 94, 98, 102, 106, 110, 114, 118, 120, 122, 129, - 130, 136, 142, 143, 146, 148, 152, 154, 156, 158, - 160, 162, 164, 178, 179, 183, 187, 191, 194, 198, - 202, 205, 208, 211, 212, 216, 220, 224, 228, 232, - 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, - 276, 280, 291, 304, 315, 316, 321, 328, 337, 355, - 371, 376, 377, 380, 385, 389, 393, 395, 398, 400, - 402, 417, 418, 422, 426, 430, 433, 436, 440, 444, - 447, 450, 453, 454, 458, 462, 466, 470, 474, 478, - 482, 486, 490, 494, 498, 502, 506, 510, 514, 518, - 522, 533, 553, 570, 585, 598, 599, 601, 602, 605, - 615, 616, 619, 624, 628, 629, 636, 640, 646, 647, - 651, 655, 659, 663, 667, 671, 676, 680, 681, 686, - 690, 696, 697, 700, 706, 713, 714, 717, 722, 729, - 738, 743, 747, 748, 753, 754, 756, 763, 764, 774, - 784, 788, 792, 796, 800, 804, 805, 808, 814, 815, - 818, 820, 825, 830, 832, 836, 846, 847, 851, 854, - 855, 858, 861, 863, 865, 867, 869, 871, 873, 875, - 876, 879, 882, 885, 890, 893, 896, 901, 903, 905, - 908, 910, 913, 915, 919, 923, 928, 932, 937, 941, - 943, 945, 946, 948, 950, 954, 958, 962, 966, 970, - 974, 978, 981, 984, 987, 991, 993, 996, 998 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const short int yyrhs[] = -{ - 98, 0, -1, 99, -1, -1, 99, 100, -1, 99, - 3, -1, 177, 102, 105, -1, 7, 102, 105, -1, - 153, -1, -1, 65, 101, 177, 94, 177, -1, -1, - 177, -1, 7, -1, 103, -1, 6, -1, 118, -1, - 107, -1, 108, -1, 123, -1, 134, -1, 115, -1, - 110, -1, 111, -1, 109, -1, 144, -1, 148, -1, - 112, -1, 113, -1, 114, -1, 164, -1, 116, -1, - 157, -1, 8, -1, 7, -1, 6, -1, 11, 166, - 175, -1, 12, 166, 175, -1, 23, 166, 175, -1, - 21, 166, 175, -1, 22, 166, 175, -1, 17, 166, - 175, -1, 24, 166, 175, -1, 18, 166, 175, -1, - 83, 166, 175, -1, 117, 166, 175, -1, 4, -1, - 7, -1, 10, 166, 169, 81, 119, 82, -1, -1, - 119, 6, 94, 177, 120, -1, 119, 177, 94, 177, - 120, -1, -1, 94, 121, -1, 122, -1, 121, 94, - 122, -1, 51, -1, 44, -1, 37, -1, 45, -1, - 46, -1, 47, -1, 13, 166, 177, 94, 177, 94, - 177, 94, 177, 124, 81, 125, 82, -1, -1, 124, - 63, 132, -1, 124, 62, 132, -1, 124, 60, 6, - -1, 124, 130, -1, 124, 59, 104, -1, 124, 15, - 103, -1, 124, 170, -1, 124, 171, -1, 124, 172, - -1, -1, 125, 37, 129, -1, 125, 38, 127, -1, - 125, 35, 127, -1, 125, 34, 127, -1, 125, 36, - 127, -1, 125, 28, 126, -1, 125, 29, 126, -1, - 125, 33, 126, -1, 125, 30, 126, -1, 125, 31, - 126, -1, 125, 25, 126, -1, 125, 32, 126, -1, - 125, 26, 126, -1, 125, 27, 126, -1, 125, 41, - 126, -1, 125, 40, 126, -1, 125, 39, 126, -1, - 125, 23, 104, 156, 177, 94, 177, 94, 177, 128, - -1, 104, 156, 177, 94, 177, 94, 177, 94, 177, - 94, 177, 131, -1, 177, 94, 177, 94, 177, 94, - 177, 94, 177, 131, -1, -1, 94, 177, 94, 177, - -1, 94, 177, 94, 177, 94, 132, -1, 94, 177, - 94, 177, 94, 132, 94, 132, -1, 104, 156, 177, - 94, 133, 94, 132, 94, 177, 94, 177, 94, 177, - 94, 177, 94, 132, -1, 104, 156, 177, 94, 133, - 94, 132, 94, 177, 94, 177, 94, 177, 94, 177, - -1, 21, 177, 94, 6, -1, -1, 94, 132, -1, - 94, 132, 94, 132, -1, 132, 84, 132, -1, 95, - 132, 96, -1, 179, -1, 92, 179, -1, 177, -1, - 6, -1, 14, 166, 177, 94, 177, 94, 177, 94, - 177, 141, 135, 81, 136, 82, -1, -1, 135, 63, - 132, -1, 135, 62, 132, -1, 135, 60, 6, -1, - 135, 130, -1, 135, 142, -1, 135, 59, 104, -1, - 135, 15, 103, -1, 135, 170, -1, 135, 171, -1, - 135, 172, -1, -1, 136, 37, 137, -1, 136, 38, - 139, -1, 136, 35, 139, -1, 136, 34, 139, -1, - 136, 36, 139, -1, 136, 28, 138, -1, 136, 29, - 138, -1, 136, 33, 138, -1, 136, 30, 138, -1, - 136, 31, 138, -1, 136, 25, 138, -1, 136, 32, - 138, -1, 136, 26, 138, -1, 136, 27, 138, -1, - 136, 41, 138, -1, 136, 40, 138, -1, 136, 39, - 138, -1, 136, 23, 104, 156, 177, 94, 177, 94, - 177, 128, -1, 104, 156, 177, 94, 133, 94, 132, - 94, 177, 94, 177, 94, 177, 94, 177, 94, 132, - 141, 140, -1, 104, 156, 177, 94, 133, 94, 132, - 94, 177, 94, 177, 94, 177, 94, 177, 140, -1, - 104, 156, 177, 94, 177, 94, 177, 94, 177, 94, - 177, 131, 141, 140, -1, 177, 94, 177, 94, 177, - 94, 177, 94, 177, 131, 141, 140, -1, -1, 173, - -1, -1, 94, 177, -1, 21, 177, 94, 6, 94, - 177, 94, 177, 143, -1, -1, 94, 177, -1, 15, - 166, 169, 145, -1, 81, 146, 82, -1, -1, 146, - 75, 6, 156, 177, 147, -1, 146, 75, 77, -1, - 146, 76, 6, 147, 145, -1, -1, 156, 49, 147, - -1, 156, 48, 147, -1, 156, 78, 147, -1, 156, - 50, 147, -1, 156, 73, 147, -1, 156, 74, 147, - -1, 16, 166, 169, 149, -1, 81, 150, 82, -1, - -1, 150, 75, 6, 151, -1, 150, 75, 77, -1, - 150, 76, 6, 152, 149, -1, -1, 94, 177, -1, - 94, 176, 94, 176, 147, -1, 94, 176, 94, 176, - 94, 177, -1, -1, 94, 177, -1, 94, 176, 94, - 177, -1, 94, 176, 94, 176, 94, 177, -1, 94, - 176, 94, 176, 94, 176, 94, 177, -1, 154, 81, - 155, 82, -1, 20, 166, 169, -1, -1, 155, 177, - 156, 6, -1, -1, 94, -1, 19, 166, 158, 81, - 159, 82, -1, -1, 158, 66, 177, 94, 177, 94, - 177, 94, 177, -1, 158, 67, 177, 94, 177, 94, - 177, 94, 177, -1, 158, 71, 177, -1, 158, 68, - 177, -1, 158, 69, 177, -1, 158, 70, 177, -1, - 158, 72, 177, -1, -1, 159, 160, -1, 42, 6, - 81, 161, 82, -1, -1, 161, 162, -1, 160, -1, - 43, 6, 94, 6, -1, 43, 6, 94, 163, -1, - 177, -1, 163, 94, 177, -1, 79, 166, 177, 94, - 177, 169, 81, 165, 82, -1, -1, 165, 80, 177, - -1, 165, 77, -1, -1, 166, 167, -1, 166, 168, - -1, 56, -1, 58, -1, 54, -1, 52, -1, 55, - -1, 57, -1, 53, -1, -1, 169, 170, -1, 169, - 171, -1, 169, 172, -1, 65, 177, 94, 177, -1, - 61, 177, -1, 64, 177, -1, 169, 81, 174, 82, - -1, 9, -1, 4, -1, 88, 4, -1, 5, -1, - 88, 5, -1, 6, -1, 174, 156, 9, -1, 174, - 156, 4, -1, 174, 156, 88, 4, -1, 174, 156, - 5, -1, 174, 156, 88, 5, -1, 174, 156, 6, - -1, 106, -1, 173, -1, -1, 177, -1, 178, -1, - 178, 87, 178, -1, 178, 88, 178, -1, 178, 84, - 178, -1, 178, 86, 178, -1, 178, 89, 178, -1, - 178, 90, 178, -1, 178, 85, 178, -1, 91, 178, - -1, 88, 178, -1, 87, 178, -1, 95, 178, 96, - -1, 179, -1, 92, 179, -1, 4, -1, 5, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short int yyrline[] = -{ - 0, 359, 359, 393, 394, 464, 470, 482, 492, 500, - 500, 543, 549, 556, 566, 567, 576, 577, 578, 602, - 603, 609, 610, 611, 612, 636, 637, 643, 644, 645, - 646, 647, 648, 652, 653, 654, 658, 662, 678, 700, - 710, 718, 726, 730, 734, 738, 749, 754, 763, 787, - 788, 789, 798, 799, 802, 803, 806, 807, 808, 809, - 810, 811, 816, 851, 852, 853, 854, 855, 856, 857, - 858, 859, 860, 863, 864, 865, 866, 867, 868, 869, - 870, 871, 872, 874, 875, 876, 877, 878, 879, 880, - 881, 883, 893, 916, 938, 940, 945, 952, 963, 977, - 992, 997, 998, 999, 1003, 1004, 1005, 1006, 1010, 1015, - 1023, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, - 1076, 1077, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, - 1088, 1089, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, - 1100, 1110, 1135, 1151, 1177, 1200, 1201, 1204, 1205, 1209, - 1216, 1217, 1221, 1244, 1248, 1249, 1258, 1264, 1283, 1284, - 1285, 1286, 1287, 1288, 1289, 1293, 1318, 1322, 1323, 1339, - 1345, 1365, 1366, 1370, 1378, 1389, 1390, 1394, 1400, 1408, - 1428, 1466, 1476, 1477, 1510, 1512, 1517, 1533, 1534, 1544, - 1554, 1561, 1568, 1575, 1582, 1592, 1593, 1602, 1610, 1611, - 1620, 1625, 1631, 1640, 1641, 1645, 1671, 1672, 1677, 1686, - 1687, 1697, 1712, 1713, 1714, 1715, 1718, 1719, 1720, 1724, - 1725, 1733, 1741, 1759, 1766, 1770, 1774, 1789, 1790, 1791, - 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1804, - 1805, 1812, 1813, 1817, 1820, 1821, 1822, 1823, 1824, 1825, - 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1835, 1836 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "tNL", "tNUMBER", "tLNUMBER", "tSTRING", - "tIDENT", "tFILENAME", "tRAWDATA", "tACCELERATORS", "tBITMAP", "tCURSOR", - "tDIALOG", "tDIALOGEX", "tMENU", "tMENUEX", "tMESSAGETABLE", "tRCDATA", - "tVERSIONINFO", "tSTRINGTABLE", "tFONT", "tFONTDIR", "tICON", "tHTML", - "tAUTO3STATE", "tAUTOCHECKBOX", "tAUTORADIOBUTTON", "tCHECKBOX", - "tDEFPUSHBUTTON", "tPUSHBUTTON", "tRADIOBUTTON", "tSTATE3", "tGROUPBOX", - "tCOMBOBOX", "tLISTBOX", "tSCROLLBAR", "tCONTROL", "tEDITTEXT", "tRTEXT", - "tCTEXT", "tLTEXT", "tBLOCK", "tVALUE", "tSHIFT", "tALT", "tASCII", - "tVIRTKEY", "tGRAYED", "tCHECKED", "tINACTIVE", "tNOINVERT", "tPURE", - "tIMPURE", "tDISCARDABLE", "tLOADONCALL", "tPRELOAD", "tFIXED", - "tMOVEABLE", "tCLASS", "tCAPTION", "tCHARACTERISTICS", "tEXSTYLE", - "tSTYLE", "tVERSION", "tLANGUAGE", "tFILEVERSION", "tPRODUCTVERSION", - "tFILEFLAGSMASK", "tFILEOS", "tFILETYPE", "tFILEFLAGS", "tFILESUBTYPE", - "tMENUBARBREAK", "tMENUBREAK", "tMENUITEM", "tPOPUP", "tSEPARATOR", - "tHELP", "tTOOLBAR", "tBUTTON", "tBEGIN", "tEND", "tDLGINIT", "'|'", - "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'~'", "tNOT", "pUPM", "','", - "'('", "')'", "$accept", "resource_file", "resources", "resource", "@1", - "usrcvt", "nameid", "nameid_s", "resource_definition", "filename", - "bitmap", "cursor", "icon", "font", "fontdir", "messagetable", "html", - "rcdata", "dlginit", "userres", "usertype", "accelerators", "events", - "acc_opt", "accs", "acc", "dialog", "dlg_attributes", "ctrls", - "lab_ctrl", "ctrl_desc", "iconinfo", "gen_ctrl", "opt_font", - "optional_style_pair", "style", "ctlclass", "dialogex", "dlgex_attribs", - "exctrls", "gen_exctrl", "lab_exctrl", "exctrl_desc", "opt_data", - "helpid", "opt_exfont", "opt_expr", "menu", "menu_body", - "item_definitions", "item_options", "menuex", "menuex_body", - "itemex_definitions", "itemex_options", "itemex_p_options", - "stringtable", "stt_head", "strings", "opt_comma", "versioninfo", - "fix_version", "ver_blocks", "ver_block", "ver_values", "ver_value", - "ver_words", "toolbar", "toolbar_items", "loadmemopts", "lamo", "lama", - "opt_lvc", "opt_language", "opt_characts", "opt_version", "raw_data", - "raw_elements", "file_raw", "e_expr", "expr", "xpr", "any_num", 0 -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short int yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 124, 94, 38, 43, 45, 42, - 47, 126, 339, 340, 44, 40, 41 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 97, 98, 99, 99, 99, 100, 100, 100, 101, - 100, 102, 103, 103, 104, 104, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 106, 106, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 117, 118, 119, - 119, 119, 120, 120, 121, 121, 122, 122, 122, 122, - 122, 122, 123, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 126, 127, 128, 128, 128, 128, 129, 129, - 130, 131, 131, 131, 132, 132, 132, 132, 133, 133, - 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 137, 137, 138, 139, 140, 140, 141, 141, 142, - 143, 143, 144, 145, 146, 146, 146, 146, 147, 147, - 147, 147, 147, 147, 147, 148, 149, 150, 150, 150, - 150, 151, 151, 151, 151, 152, 152, 152, 152, 152, - 153, 154, 155, 155, 156, 156, 157, 158, 158, 158, - 158, 158, 158, 158, 158, 159, 159, 160, 161, 161, - 162, 162, 162, 163, 163, 164, 165, 165, 165, 166, - 166, 166, 167, 167, 167, 167, 168, 168, 168, 169, - 169, 169, 169, 170, 171, 172, 173, 174, 174, 174, - 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, - 175, 176, 176, 177, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 179, 179 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = -{ - 0, 2, 1, 0, 2, 2, 3, 3, 1, 0, - 5, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 1, 1, 6, 0, - 5, 5, 0, 2, 1, 3, 1, 1, 1, 1, - 1, 1, 13, 0, 3, 3, 3, 2, 3, 3, - 2, 2, 2, 0, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 10, 12, 10, 0, 4, 6, 8, 17, 15, - 4, 0, 2, 4, 3, 3, 1, 2, 1, 1, - 14, 0, 3, 3, 3, 2, 2, 3, 3, 2, - 2, 2, 0, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 10, 19, 16, 14, 12, 0, 1, 0, 2, 9, - 0, 2, 4, 3, 0, 6, 3, 5, 0, 3, - 3, 3, 3, 3, 3, 4, 3, 0, 4, 3, - 5, 0, 2, 5, 6, 0, 2, 4, 6, 8, - 4, 3, 0, 4, 0, 1, 6, 0, 9, 9, - 3, 3, 3, 3, 3, 0, 2, 5, 0, 2, - 1, 4, 4, 1, 3, 9, 0, 3, 2, 0, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, - 2, 2, 2, 4, 2, 2, 4, 1, 1, 2, - 1, 2, 1, 3, 3, 4, 3, 4, 3, 1, - 1, 0, 1, 1, 3, 3, 3, 3, 3, 3, - 3, 2, 2, 2, 3, 1, 2, 1, 1 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const unsigned short int yydefact[] = -{ - 3, 0, 2, 1, 5, 257, 258, 11, 209, 9, - 0, 0, 0, 0, 0, 4, 8, 0, 11, 243, - 255, 0, 219, 0, 253, 252, 251, 256, 0, 182, - 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 209, 209, 209, 209, 209, 209, 7, 17, 18, 24, - 22, 23, 27, 28, 29, 21, 31, 209, 16, 19, - 20, 25, 26, 32, 30, 215, 218, 214, 216, 212, - 217, 213, 210, 211, 181, 0, 254, 0, 6, 246, - 250, 247, 244, 245, 248, 249, 219, 219, 219, 0, - 0, 219, 219, 219, 219, 187, 219, 219, 219, 219, - 0, 219, 219, 0, 0, 0, 220, 221, 222, 0, - 180, 184, 0, 35, 34, 33, 239, 0, 240, 36, - 37, 0, 0, 0, 0, 41, 43, 0, 39, 40, - 38, 42, 0, 44, 45, 224, 225, 0, 10, 185, - 0, 49, 0, 0, 0, 154, 152, 167, 165, 0, - 0, 0, 0, 0, 0, 0, 195, 0, 0, 183, - 0, 228, 230, 232, 227, 0, 184, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 190, 194, 0, 219, - 223, 0, 48, 0, 229, 231, 226, 0, 0, 0, - 0, 0, 153, 0, 0, 166, 0, 0, 0, 186, - 196, 0, 0, 0, 234, 236, 238, 233, 0, 0, - 0, 184, 156, 184, 171, 169, 175, 0, 0, 0, - 206, 52, 52, 235, 237, 0, 0, 0, 0, 0, - 241, 168, 241, 0, 0, 0, 198, 0, 0, 50, - 51, 63, 147, 184, 157, 184, 184, 184, 184, 184, - 184, 0, 172, 0, 176, 170, 0, 0, 0, 208, - 0, 205, 58, 57, 59, 60, 61, 56, 53, 54, - 0, 0, 111, 155, 160, 159, 162, 163, 164, 161, - 241, 241, 0, 0, 0, 197, 200, 199, 207, 0, - 0, 0, 0, 0, 0, 0, 73, 67, 70, 71, - 72, 148, 0, 184, 242, 0, 177, 188, 189, 0, - 55, 13, 69, 12, 0, 15, 14, 68, 66, 0, - 0, 65, 106, 64, 0, 0, 0, 0, 0, 0, - 0, 122, 115, 116, 119, 120, 121, 185, 173, 241, - 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 62, 118, 0, 117, 114, 113, 112, - 0, 174, 0, 178, 201, 202, 203, 100, 105, 104, - 184, 184, 84, 86, 87, 79, 80, 82, 83, 85, - 81, 77, 0, 76, 78, 184, 74, 75, 90, 89, - 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 110, 0, 0, 0, 0, 0, 0, 100, 184, 184, - 133, 135, 136, 128, 129, 131, 132, 134, 130, 126, - 0, 125, 127, 184, 123, 124, 139, 138, 137, 179, - 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 109, 0, 108, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 150, 0, 0, 0, 0, 94, - 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, - 91, 0, 0, 0, 151, 94, 0, 0, 0, 0, - 0, 101, 0, 140, 0, 0, 0, 0, 0, 0, - 93, 0, 0, 101, 0, 95, 101, 102, 0, 0, - 147, 0, 0, 92, 0, 0, 101, 145, 0, 96, - 103, 0, 147, 144, 146, 0, 0, 0, 145, 0, - 97, 99, 143, 0, 0, 145, 98, 0, 142, 147, - 145, 141 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const short int yydefgoto[] = -{ - -1, 1, 2, 15, 23, 21, 326, 391, 56, 126, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 170, 249, 278, 279, 69, 280, 334, 392, - 401, 510, 406, 307, 530, 331, 483, 70, 312, 380, - 454, 440, 449, 553, 282, 343, 504, 71, 156, 179, - 238, 72, 158, 180, 241, 243, 16, 17, 87, 239, - 73, 137, 188, 210, 268, 297, 385, 74, 247, 22, - 82, 83, 127, 116, 117, 118, 128, 176, 129, 261, - 323, 19, 20 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -535 -static const short int yypact[] = -{ - -535, 31, 12, -535, -535, -535, -535, -535, -535, -535, - 240, 240, 240, 182, 240, -535, -535, -69, -535, 577, - -535, 365, 616, 240, -535, -535, -535, -535, 564, -535, - 365, 240, 240, 240, 240, 240, 240, 240, -535, -535, - -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, - -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, - -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, - -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, - -535, -535, -535, -535, 362, -60, -535, 111, -535, 392, - 329, 363, 131, 131, -535, -535, 616, 403, 403, 84, - 84, 616, 616, 403, 403, 616, 403, 403, 403, 403, - 84, 403, 403, 240, 240, 240, -535, -535, -535, 240, - -535, -7, -6, -535, -535, -535, -535, 83, -535, -535, - -535, 0, 8, 202, 265, -535, -535, 449, -535, -535, - -535, -535, 15, -535, -535, -535, -535, 36, -535, -535, - 90, -535, 18, 240, 240, -535, -535, -535, -535, 240, - 240, 240, 240, 240, 240, 240, -535, 240, 240, -535, - 213, -535, -535, -535, -535, 318, -11, 51, 55, -46, - 211, 88, 94, -535, -535, -535, -535, -535, -28, -535, - -535, 119, -535, 134, -535, -535, -535, 40, 240, 240, - 1, 108, -535, 3, 174, -535, 240, 240, 248, -535, - -535, 290, 240, 240, -535, -535, -535, -535, 339, 162, - 175, -7, -535, -41, 188, -535, 190, 200, 203, 144, - -535, 258, 258, -535, -535, 240, 240, 240, 195, 364, - 240, -535, 240, 199, 240, 240, -535, 159, 501, -535, - -535, -535, 267, 171, -535, 133, 133, 133, 133, 133, - 133, 268, 272, 274, 272, -535, 276, 291, -32, -535, - 240, -535, -535, -535, -535, -535, -535, -535, 297, -535, - 5, 240, -535, -535, -535, -535, -535, -535, -535, -535, - 240, 240, 240, 240, 419, -535, -535, -535, -535, 501, - 219, 240, 86, 422, 37, 37, -535, -535, -535, -535, - -535, -535, 277, 227, -535, 341, 272, -535, -535, 342, - -535, -535, -535, -535, 345, -535, -535, -535, -535, 182, - 37, 212, -535, 212, 367, 219, 240, 86, 439, 37, - 37, -535, -535, -535, -535, -535, -535, 240, -535, 240, - 186, 440, -535, 71, 37, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 240, 240, 240, 86, 240, - 86, 86, 86, -535, -535, 353, -535, -535, 212, 212, - 563, -535, 360, 272, -535, 368, -535, -535, -535, -535, - -7, -7, -535, -535, -535, -535, -535, -535, -535, -535, - -535, -535, 381, -535, -535, -7, -535, -535, -535, -535, - -535, 485, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 240, 240, 240, 86, 240, 86, 86, 86, - -535, 240, 240, 240, 240, 240, 240, 398, -7, -7, - -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, - 406, -535, -535, -7, -535, -535, -535, -535, -535, -535, - -535, 408, 412, 414, 418, 240, 240, 240, 240, 240, - 240, 240, 240, 225, 420, 433, 437, 438, 441, 442, - 446, 447, -535, 448, -535, 240, 240, 240, 240, 225, - 240, 240, 240, 37, 450, 456, 457, 460, 463, 464, - 465, 466, -21, 240, -535, 240, 240, 240, 37, 240, - -535, 240, 240, 240, -535, 464, 469, 479, 11, 480, - 481, 483, 487, -535, 240, 240, 240, 240, 240, 37, - -535, 240, 488, 483, 489, 491, 483, 100, 536, 240, - 267, 240, 37, -535, 37, 240, 483, 292, 537, 101, - 212, 543, 267, -535, -535, 240, 37, 240, 292, 546, - 212, 561, -535, 240, 37, 89, 212, 37, -535, 138, - 292, -535 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const short int yypgoto[] = -{ - -535, -535, -535, -535, -535, 515, -296, -294, 504, -535, - -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, - -535, -535, -535, 324, -535, 330, -535, -535, -535, 208, - -118, 141, -535, 346, -390, -292, 168, -535, -535, -535, - -535, 207, 17, -486, -534, -535, -535, -535, 421, -535, - 2, -535, 432, -535, -535, -535, -535, -535, -535, -120, - -535, -535, -535, 409, -535, -535, -535, -535, -535, 565, - -535, -535, -20, -275, -255, -252, -358, -535, 535, -239, - -2, 462, 20 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -243 -static const short int yytable[] = -{ - 18, 150, 84, 263, 322, 308, 547, 221, 327, 224, - 208, 294, 29, 333, 208, 4, 5, 6, 558, 7, - 300, 85, 171, 172, 173, 309, 301, 174, 310, 200, - 201, 3, 8, 27, 119, 570, 202, 344, 353, 374, - -158, 5, 6, 376, 214, 215, 216, 378, 379, 217, - 295, 313, 315, 149, 209, 113, 197, 345, 114, 115, - 346, 390, 389, 354, 302, 303, 113, 304, 305, 114, - 115, 196, 562, 513, 405, 151, 122, 9, 222, 568, - 225, 133, 134, 149, 571, 121, 306, 149, 5, 6, - 5, 6, 325, 321, 153, 354, 169, 131, 132, 10, - 11, 237, 154, 12, 13, 526, 175, 14, 142, 167, - 382, 145, 146, 147, 223, 5, 6, 148, 438, 439, - 439, 439, 439, 439, 439, 439, 439, 439, 218, 329, - 168, 453, 330, 439, 439, 439, 75, 76, 77, 78, - 79, 80, 81, 540, 113, 198, 543, 114, 115, 199, - -219, 177, 178, -219, -219, 354, 552, 181, 182, 183, - 184, 185, 186, 187, 152, 189, 190, 388, 193, 211, - -219, 10, 11, 10, 11, 12, 13, 12, 13, 14, - 226, 14, 206, 567, 354, 354, 5, 6, 207, 554, - 5, 6, 384, 120, 544, 556, 219, 220, 10, 11, - 554, 502, 12, 13, 227, 228, 14, 554, -158, -158, - 231, 232, 554, 212, -158, -158, 518, 5, 6, 191, - 36, 37, 354, 5, 6, 246, 321, 149, 213, 5, - 6, 482, 281, 251, 252, 253, 269, 537, 262, 270, - 264, 271, 266, 267, 5, 6, -158, -158, 403, 404, - 549, 407, 550, -158, 229, 283, 235, 284, 285, 286, - 287, 288, 289, 113, 560, 149, 114, 115, 298, 236, - 433, 434, 566, 10, 11, 569, 155, 12, 13, 311, - 157, 14, 240, 155, 242, 436, 203, 204, 314, 316, - 317, 318, 335, 205, 244, 192, 354, 245, 336, 324, - 10, 11, -158, -158, 12, 13, 10, 11, 14, -158, - 12, 13, 10, 11, 14, 348, 12, 13, 466, 467, - 14, 347, 194, 195, 332, 332, 113, 10, 11, 114, - 115, 12, 13, 469, 375, 14, 337, 338, 113, 339, - 340, 114, 115, 233, 234, 381, 157, 383, 386, 352, - 332, 113, 248, -219, 114, 115, -219, -219, 341, 332, - 332, 281, 290, 402, 402, 402, -242, 402, 291, 38, - 292, 230, 39, -219, 332, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 293, 50, 51, 52, 53, - 355, 299, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 123, - 124, 125, 255, 256, 257, 33, 34, 35, 36, 37, - 450, 450, 450, 113, 450, 319, 114, 115, 328, 459, - 460, 461, 462, 463, 464, 349, 350, 258, 259, 351, - 451, 452, 260, 455, 54, 377, 387, 411, 55, 373, - 34, 35, 36, 37, 431, 75, 76, 77, 78, 79, - 80, 81, 432, 474, 475, 476, 477, 478, 479, 480, - 481, 484, 24, 25, 26, 435, 28, 32, 33, 34, - 35, 36, 37, 494, 495, 496, 497, 484, 499, 500, - 501, 437, 465, 89, 90, 91, 92, 93, 94, 95, - 468, 514, 470, 515, 516, 517, 471, 519, 472, 520, - 521, 522, 473, 332, 485, 159, 160, 161, 162, 163, - 164, 165, 532, 533, 534, 535, 536, 486, 332, 538, - 166, 487, 488, 30, 88, 489, 490, 546, 272, 548, - 491, 492, 493, 551, 503, 273, 274, 275, 276, 332, - 505, 506, 277, 559, 507, 561, 250, 508, 509, 511, - 512, 565, 332, 524, 332, 393, 394, 395, 396, 397, - 398, 399, 400, 525, 527, 528, 332, 529, 408, 409, - 410, 531, 539, 541, 332, 542, 412, 332, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 441, 442, 443, 444, 445, 446, 447, 448, 320, - 545, 555, 112, 130, 456, 457, 458, 557, 135, 136, - 563, 138, 139, 140, 141, 430, 143, 144, 31, 32, - 33, 34, 35, 36, 37, 564, 523, 498, 342, 254, - 86, 31, 32, 33, 34, 35, 36, 37, 75, 76, - 77, 78, 79, 80, 81, 265, 0, 296 -}; - -static const short int yycheck[] = -{ - 2, 121, 22, 242, 300, 280, 540, 6, 302, 6, - 42, 43, 81, 305, 42, 3, 4, 5, 552, 7, - 15, 23, 4, 5, 6, 280, 21, 9, 280, 75, - 76, 0, 20, 13, 94, 569, 82, 312, 330, 335, - 81, 4, 5, 337, 4, 5, 6, 339, 340, 9, - 82, 290, 291, 94, 82, 61, 176, 312, 64, 65, - 312, 355, 354, 84, 59, 60, 61, 62, 63, 64, - 65, 82, 558, 94, 368, 81, 96, 65, 77, 565, - 77, 101, 102, 94, 570, 87, 81, 94, 4, 5, - 4, 5, 6, 7, 94, 84, 6, 99, 100, 87, - 88, 221, 94, 91, 92, 94, 88, 95, 110, 94, - 349, 113, 114, 115, 6, 4, 5, 119, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 88, 92, - 94, 425, 95, 427, 428, 429, 52, 53, 54, 55, - 56, 57, 58, 533, 61, 94, 536, 64, 65, 94, - 61, 153, 154, 64, 65, 84, 546, 159, 160, 161, - 162, 163, 164, 165, 81, 167, 168, 96, 170, 189, - 81, 87, 88, 87, 88, 91, 92, 91, 92, 95, - 6, 95, 94, 94, 84, 84, 4, 5, 94, 547, - 4, 5, 6, 82, 94, 94, 198, 199, 87, 88, - 558, 493, 91, 92, 206, 207, 95, 565, 75, 76, - 212, 213, 570, 94, 81, 82, 508, 4, 5, 6, - 89, 90, 84, 4, 5, 81, 7, 94, 94, 4, - 5, 6, 94, 235, 236, 237, 77, 529, 240, 80, - 242, 82, 244, 245, 4, 5, 75, 76, 366, 367, - 542, 369, 544, 82, 6, 253, 94, 255, 256, 257, - 258, 259, 260, 61, 556, 94, 64, 65, 270, 94, - 390, 391, 564, 87, 88, 567, 81, 91, 92, 281, - 81, 95, 94, 81, 94, 405, 75, 76, 290, 291, - 292, 293, 15, 82, 94, 82, 84, 94, 21, 301, - 87, 88, 75, 76, 91, 92, 87, 88, 95, 82, - 91, 92, 87, 88, 95, 313, 91, 92, 438, 439, - 95, 94, 4, 5, 304, 305, 61, 87, 88, 64, - 65, 91, 92, 453, 336, 95, 59, 60, 61, 62, - 63, 64, 65, 4, 5, 347, 81, 349, 350, 329, - 330, 61, 94, 61, 64, 65, 64, 65, 81, 339, - 340, 94, 94, 365, 366, 367, 94, 369, 94, 4, - 94, 81, 7, 81, 354, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 94, 21, 22, 23, 24, - 23, 94, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 6, - 7, 8, 48, 49, 50, 86, 87, 88, 89, 90, - 422, 423, 424, 61, 426, 6, 64, 65, 6, 431, - 432, 433, 434, 435, 436, 94, 94, 73, 74, 94, - 423, 424, 78, 426, 79, 6, 6, 94, 83, 82, - 87, 88, 89, 90, 94, 52, 53, 54, 55, 56, - 57, 58, 94, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 10, 11, 12, 94, 14, 85, 86, 87, - 88, 89, 90, 485, 486, 487, 488, 489, 490, 491, - 492, 6, 94, 31, 32, 33, 34, 35, 36, 37, - 94, 503, 94, 505, 506, 507, 94, 509, 94, 511, - 512, 513, 94, 493, 94, 66, 67, 68, 69, 70, - 71, 72, 524, 525, 526, 527, 528, 94, 508, 531, - 81, 94, 94, 18, 30, 94, 94, 539, 37, 541, - 94, 94, 94, 545, 94, 44, 45, 46, 47, 529, - 94, 94, 51, 555, 94, 557, 232, 94, 94, 94, - 94, 563, 542, 94, 544, 357, 358, 359, 360, 361, - 362, 363, 364, 94, 94, 94, 556, 94, 370, 371, - 372, 94, 94, 94, 564, 94, 23, 567, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 414, 415, 416, 417, 418, 419, 420, 421, 299, - 94, 94, 67, 98, 427, 428, 429, 94, 103, 104, - 94, 106, 107, 108, 109, 82, 111, 112, 84, 85, - 86, 87, 88, 89, 90, 94, 515, 489, 312, 238, - 96, 84, 85, 86, 87, 88, 89, 90, 52, 53, - 54, 55, 56, 57, 58, 243, -1, 268 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 98, 99, 0, 3, 4, 5, 7, 20, 65, - 87, 88, 91, 92, 95, 100, 153, 154, 177, 178, - 179, 102, 166, 101, 178, 178, 178, 179, 178, 81, - 102, 84, 85, 86, 87, 88, 89, 90, 4, 7, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 21, 22, 23, 24, 79, 83, 105, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 123, - 134, 144, 148, 157, 164, 52, 53, 54, 55, 56, - 57, 58, 167, 168, 169, 177, 96, 155, 105, 178, - 178, 178, 178, 178, 178, 178, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 61, 64, 65, 170, 171, 172, 94, - 82, 177, 169, 6, 7, 8, 106, 169, 173, 175, - 175, 177, 177, 169, 169, 175, 175, 158, 175, 175, - 175, 175, 177, 175, 175, 177, 177, 177, 177, 94, - 156, 81, 81, 94, 94, 81, 145, 81, 149, 66, - 67, 68, 69, 70, 71, 72, 81, 94, 94, 6, - 119, 4, 5, 6, 9, 88, 174, 177, 177, 146, - 150, 177, 177, 177, 177, 177, 177, 177, 159, 177, - 177, 6, 82, 177, 4, 5, 82, 156, 94, 94, - 75, 76, 82, 75, 76, 82, 94, 94, 42, 82, - 160, 169, 94, 94, 4, 5, 6, 9, 88, 177, - 177, 6, 77, 6, 6, 77, 6, 177, 177, 6, - 81, 177, 177, 4, 5, 94, 94, 156, 147, 156, - 94, 151, 94, 152, 94, 94, 81, 165, 94, 120, - 120, 177, 177, 177, 145, 48, 49, 50, 73, 74, - 78, 176, 177, 176, 177, 149, 177, 177, 161, 77, - 80, 82, 37, 44, 45, 46, 47, 51, 121, 122, - 124, 94, 141, 147, 147, 147, 147, 147, 147, 147, - 94, 94, 94, 94, 43, 82, 160, 162, 177, 94, - 15, 21, 59, 60, 62, 63, 81, 130, 170, 171, - 172, 177, 135, 176, 177, 176, 177, 177, 177, 6, - 122, 7, 103, 177, 177, 6, 103, 104, 6, 92, - 95, 132, 179, 132, 125, 15, 21, 59, 60, 62, - 63, 81, 130, 142, 170, 171, 172, 94, 147, 94, - 94, 94, 179, 132, 84, 23, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 82, 103, 177, 104, 6, 132, 132, - 136, 177, 176, 177, 6, 163, 177, 6, 96, 132, - 104, 104, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 127, 177, 127, 127, 104, 129, 127, 126, 126, - 126, 94, 23, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 82, 94, 94, 156, 156, 94, 156, 6, 104, 104, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, - 177, 139, 139, 104, 137, 139, 138, 138, 138, 177, - 177, 177, 177, 177, 177, 94, 156, 156, 94, 156, - 94, 94, 94, 94, 177, 177, 177, 177, 177, 177, - 177, 177, 6, 133, 177, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 177, 177, 177, 177, 133, 177, - 177, 177, 132, 94, 143, 94, 94, 94, 94, 94, - 128, 94, 94, 94, 177, 177, 177, 177, 132, 177, - 177, 177, 177, 128, 94, 94, 94, 94, 94, 94, - 131, 94, 177, 177, 177, 177, 177, 132, 177, 94, - 131, 94, 94, 131, 94, 94, 177, 141, 177, 132, - 132, 177, 131, 140, 173, 94, 94, 94, 141, 177, - 132, 177, 140, 94, 94, 177, 132, 94, 140, 132, - 141, 140 -}; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ - -#define YYFAIL goto yyerrlab - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) - - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) -#endif - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short int *bottom, short int *top) -#else -static void -yy_stack_print (bottom, top) - short int *bottom; - short int *top; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; -#endif -{ - int yyi; - unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ", - yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]); -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - size_t yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -#endif /* YYERROR_VERBOSE */ - - - -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else -static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); -} - -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - switch (yytype) - { - - default: - break; - } -} - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - -/* The look-ahead symbol. */ -int yychar; - -/* The semantic value of the look-ahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) -#else -int -yyparse () - ; -#endif -#endif -{ - - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short int yyssa[YYINITDEPTH]; - short int *yyss = yyssa; - short int *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - - - -#define YYPOPSTACK (yyvsp--, yyssp--) - - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; - - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short int *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - short int *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a look-ahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to look-ahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) - goto yydefault; - - /* Not known => get a look-ahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the look-ahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; - - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - yystate = yyn; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -#line 359 "parser.y" - { - resource_t *rsc; - /* First add stringtables to the resource-list */ - rsc = build_stt_resources(sttres); - /* 'build_stt_resources' returns a head and $1 is a tail */ - if((yyvsp[0].res)) - { - (yyvsp[0].res)->next = rsc; - if(rsc) - rsc->prev = (yyvsp[0].res); - } - else - (yyvsp[0].res) = rsc; - /* Find the tail again */ - while((yyvsp[0].res) && (yyvsp[0].res)->next) - (yyvsp[0].res) = (yyvsp[0].res)->next; - /* Now add any fontdirecory */ - rsc = build_fontdirs((yyvsp[0].res)); - /* 'build_fontdir' returns a head and $1 is a tail */ - if((yyvsp[0].res)) - { - (yyvsp[0].res)->next = rsc; - if(rsc) - rsc->prev = (yyvsp[0].res); - } - else - (yyvsp[0].res) = rsc; - /* Final statement before were done */ - resource_top = get_resource_head((yyvsp[0].res)); - ;} - break; - - case 3: -#line 393 "parser.y" - { (yyval.res) = NULL; want_id = 1; ;} - break; - - case 4: -#line 394 "parser.y" - { - if((yyvsp[0].res)) - { - resource_t *tail = (yyvsp[0].res); - resource_t *head = (yyvsp[0].res); - while(tail->next) - tail = tail->next; - while(head->prev) - head = head->prev; - head->prev = (yyvsp[-1].res); - if((yyvsp[-1].res)) - (yyvsp[-1].res)->next = head; - (yyval.res) = tail; - /* Check for duplicate identifiers */ - while((yyvsp[-1].res) && head) - { - resource_t *rsc = (yyvsp[-1].res); - while(rsc) - { - if(rsc->type == head->type - && rsc->lan->id == head->lan->id - && rsc->lan->sub == head->lan->sub - && !compare_name_id(rsc->name, head->name)) - { - parser_error("Duplicate resource name '%s'\n", get_nameid_str(rsc->name)); - } - rsc = rsc->prev; - } - head = head->next; - } - } - else if((yyvsp[-1].res)) - { - resource_t *tail = (yyvsp[-1].res); - while(tail->next) - tail = tail->next; - (yyval.res) = tail; - } - else - (yyval.res) = NULL; - - if(!dont_want_id) /* See comments in language parsing below */ - want_id = 1; - dont_want_id = 0; - ;} - break; - - case 6: -#line 470 "parser.y" - { - (yyval.res) = (yyvsp[0].res); - if((yyval.res)) - { - if((yyvsp[-2].num) > 65535 || (yyvsp[-2].num) < -32768) - parser_error("Resource's ID out of range (%d)\n", (yyvsp[-2].num)); - (yyval.res)->name = new_name_id(); - (yyval.res)->name->type = name_ord; - (yyval.res)->name->name.i_name = (yyvsp[-2].num); - chat("Got %s (%d)\n", get_typename((yyvsp[0].res)), (yyval.res)->name->name.i_name); - } - ;} - break; - - case 7: -#line 482 "parser.y" - { - (yyval.res) = (yyvsp[0].res); - if((yyval.res)) - { - (yyval.res)->name = new_name_id(); - (yyval.res)->name->type = name_str; - (yyval.res)->name->name.s_name = (yyvsp[-2].str); - chat("Got %s (%s)\n", get_typename((yyvsp[0].res)), (yyval.res)->name->name.s_name->str.cstr); - } - ;} - break; - - case 8: -#line 492 "parser.y" - { - /* Don't do anything, stringtables are converted to - * resource_t structures when we are finished parsing and - * the final rule of the parser is reduced (see above) - */ - (yyval.res) = NULL; - chat("Got STRINGTABLE\n"); - ;} - break; - - case 9: -#line 500 "parser.y" - {want_nl = 1; ;} - break; - - case 10: -#line 500 "parser.y" - { - /* We *NEED* the newline to delimit the expression. - * Otherwise, we would not be able to set the next - * want_id anymore because of the token-lookahead. - * - * However, we can test the lookahead-token for - * being "non-expression" type, in which case we - * continue. Fortunately, tNL is the only token that - * will break expression parsing and is implicitely - * void, so we just remove it. This scheme makes it - * possible to do some (not all) fancy preprocessor - * stuff. - * BTW, we also need to make sure that the next - * reduction of 'resources' above will *not* set - * want_id because we already have a lookahead that - * cannot be undone. - */ - if(yychar != YYEMPTY && yychar != tNL) - dont_want_id = 1; - - if(yychar == tNL) - yychar = YYEMPTY; /* Could use 'yyclearin', but we already need the*/ - /* direct access to yychar in rule 'usrcvt' below. */ - else if(yychar == tIDENT) - parser_warning("LANGUAGE statement not delimited with newline; next identifier might be wrong\n"); - - want_nl = 0; /* We don't want it anymore if we didn't get it */ - - if(!win32) - parser_warning("LANGUAGE not supported in 16-bit mode\n"); - free(currentlanguage); - if (get_language_codepage((yyvsp[-2].num), (yyvsp[0].num)) == -1) - parser_error( "Language %04x is not supported\n", ((yyvsp[0].num)<<10) + (yyvsp[-2].num)); - currentlanguage = new_language((yyvsp[-2].num), (yyvsp[0].num)); - (yyval.res) = NULL; - chat("Got LANGUAGE %d,%d (0x%04x)\n", (yyvsp[-2].num), (yyvsp[0].num), ((yyvsp[0].num)<<10) + (yyvsp[-2].num)); - ;} - break; - - case 11: -#line 543 "parser.y" - { yychar = rsrcid_to_token(yychar); ;} - break; - - case 12: -#line 549 "parser.y" - { - if((yyvsp[0].num) > 65535 || (yyvsp[0].num) < -32768) - parser_error("Resource's ID out of range (%d)\n", (yyvsp[0].num)); - (yyval.nid) = new_name_id(); - (yyval.nid)->type = name_ord; - (yyval.nid)->name.i_name = (yyvsp[0].num); - ;} - break; - - case 13: -#line 556 "parser.y" - { - (yyval.nid) = new_name_id(); - (yyval.nid)->type = name_str; - (yyval.nid)->name.s_name = (yyvsp[0].str); - ;} - break; - - case 14: -#line 566 "parser.y" - { (yyval.nid) = (yyvsp[0].nid); ;} - break; - - case 15: -#line 567 "parser.y" - { - (yyval.nid) = new_name_id(); - (yyval.nid)->type = name_str; - (yyval.nid)->name.s_name = (yyvsp[0].str); - ;} - break; - - case 16: -#line 576 "parser.y" - { (yyval.res) = new_resource(res_acc, (yyvsp[0].acc), (yyvsp[0].acc)->memopt, (yyvsp[0].acc)->lvc.language); ;} - break; - - case 17: -#line 577 "parser.y" - { (yyval.res) = new_resource(res_bmp, (yyvsp[0].bmp), (yyvsp[0].bmp)->memopt, (yyvsp[0].bmp)->data->lvc.language); ;} - break; - - case 18: -#line 578 "parser.y" - { - resource_t *rsc; - if((yyvsp[0].ani)->type == res_anicur) - { - (yyval.res) = rsc = new_resource(res_anicur, (yyvsp[0].ani)->u.ani, (yyvsp[0].ani)->u.ani->memopt, (yyvsp[0].ani)->u.ani->data->lvc.language); - } - else if((yyvsp[0].ani)->type == res_curg) - { - cursor_t *cur; - (yyval.res) = rsc = new_resource(res_curg, (yyvsp[0].ani)->u.curg, (yyvsp[0].ani)->u.curg->memopt, (yyvsp[0].ani)->u.curg->lvc.language); - for(cur = (yyvsp[0].ani)->u.curg->cursorlist; cur; cur = cur->next) - { - rsc->prev = new_resource(res_cur, cur, (yyvsp[0].ani)->u.curg->memopt, (yyvsp[0].ani)->u.curg->lvc.language); - rsc->prev->next = rsc; - rsc = rsc->prev; - rsc->name = new_name_id(); - rsc->name->type = name_ord; - rsc->name->name.i_name = cur->id; - } - } - else - internal_error(__FILE__, __LINE__, "Invalid top-level type %d in cursor resource\n", (yyvsp[0].ani)->type); - free((yyvsp[0].ani)); - ;} - break; - - case 19: -#line 602 "parser.y" - { (yyval.res) = new_resource(res_dlg, (yyvsp[0].dlg), (yyvsp[0].dlg)->memopt, (yyvsp[0].dlg)->lvc.language); ;} - break; - - case 20: -#line 603 "parser.y" - { - if(win32) - (yyval.res) = new_resource(res_dlgex, (yyvsp[0].dlgex), (yyvsp[0].dlgex)->memopt, (yyvsp[0].dlgex)->lvc.language); - else - (yyval.res) = NULL; - ;} - break; - - case 21: -#line 609 "parser.y" - { (yyval.res) = new_resource(res_dlginit, (yyvsp[0].dginit), (yyvsp[0].dginit)->memopt, (yyvsp[0].dginit)->data->lvc.language); ;} - break; - - case 22: -#line 610 "parser.y" - { (yyval.res) = new_resource(res_fnt, (yyvsp[0].fnt), (yyvsp[0].fnt)->memopt, (yyvsp[0].fnt)->data->lvc.language); ;} - break; - - case 23: -#line 611 "parser.y" - { (yyval.res) = new_resource(res_fntdir, (yyvsp[0].fnd), (yyvsp[0].fnd)->memopt, (yyvsp[0].fnd)->data->lvc.language); ;} - break; - - case 24: -#line 612 "parser.y" - { - resource_t *rsc; - if((yyvsp[0].ani)->type == res_aniico) - { - (yyval.res) = rsc = new_resource(res_aniico, (yyvsp[0].ani)->u.ani, (yyvsp[0].ani)->u.ani->memopt, (yyvsp[0].ani)->u.ani->data->lvc.language); - } - else if((yyvsp[0].ani)->type == res_icog) - { - icon_t *ico; - (yyval.res) = rsc = new_resource(res_icog, (yyvsp[0].ani)->u.icog, (yyvsp[0].ani)->u.icog->memopt, (yyvsp[0].ani)->u.icog->lvc.language); - for(ico = (yyvsp[0].ani)->u.icog->iconlist; ico; ico = ico->next) - { - rsc->prev = new_resource(res_ico, ico, (yyvsp[0].ani)->u.icog->memopt, (yyvsp[0].ani)->u.icog->lvc.language); - rsc->prev->next = rsc; - rsc = rsc->prev; - rsc->name = new_name_id(); - rsc->name->type = name_ord; - rsc->name->name.i_name = ico->id; - } - } - else - internal_error(__FILE__, __LINE__, "Invalid top-level type %d in icon resource\n", (yyvsp[0].ani)->type); - free((yyvsp[0].ani)); - ;} - break; - - case 25: -#line 636 "parser.y" - { (yyval.res) = new_resource(res_men, (yyvsp[0].men), (yyvsp[0].men)->memopt, (yyvsp[0].men)->lvc.language); ;} - break; - - case 26: -#line 637 "parser.y" - { - if(win32) - (yyval.res) = new_resource(res_menex, (yyvsp[0].menex), (yyvsp[0].menex)->memopt, (yyvsp[0].menex)->lvc.language); - else - (yyval.res) = NULL; - ;} - break; - - case 27: -#line 643 "parser.y" - { (yyval.res) = new_resource(res_msg, (yyvsp[0].msg), WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, (yyvsp[0].msg)->data->lvc.language); ;} - break; - - case 28: -#line 644 "parser.y" - { (yyval.res) = new_resource(res_html, (yyvsp[0].html), (yyvsp[0].html)->memopt, (yyvsp[0].html)->data->lvc.language); ;} - break; - - case 29: -#line 645 "parser.y" - { (yyval.res) = new_resource(res_rdt, (yyvsp[0].rdt), (yyvsp[0].rdt)->memopt, (yyvsp[0].rdt)->data->lvc.language); ;} - break; - - case 30: -#line 646 "parser.y" - { (yyval.res) = new_resource(res_toolbar, (yyvsp[0].tlbar), (yyvsp[0].tlbar)->memopt, (yyvsp[0].tlbar)->lvc.language); ;} - break; - - case 31: -#line 647 "parser.y" - { (yyval.res) = new_resource(res_usr, (yyvsp[0].usr), (yyvsp[0].usr)->memopt, (yyvsp[0].usr)->data->lvc.language); ;} - break; - - case 32: -#line 648 "parser.y" - { (yyval.res) = new_resource(res_ver, (yyvsp[0].veri), WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE, (yyvsp[0].veri)->lvc.language); ;} - break; - - case 33: -#line 652 "parser.y" - { (yyval.str) = make_filename((yyvsp[0].str)); ;} - break; - - case 34: -#line 653 "parser.y" - { (yyval.str) = make_filename((yyvsp[0].str)); ;} - break; - - case 35: -#line 654 "parser.y" - { (yyval.str) = make_filename((yyvsp[0].str)); ;} - break; - - case 36: -#line 658 "parser.y" - { (yyval.bmp) = new_bitmap((yyvsp[0].raw), (yyvsp[-1].iptr)); ;} - break; - - case 37: -#line 662 "parser.y" - { - (yyval.ani) = new_ani_any(); - if((yyvsp[0].raw)->size > 4 && !memcmp((yyvsp[0].raw)->data, riff, sizeof(riff))) - { - (yyval.ani)->type = res_anicur; - (yyval.ani)->u.ani = new_ani_curico(res_anicur, (yyvsp[0].raw), (yyvsp[-1].iptr)); - } - else - { - (yyval.ani)->type = res_curg; - (yyval.ani)->u.curg = new_cursor_group((yyvsp[0].raw), (yyvsp[-1].iptr)); - } - ;} - break; - - case 38: -#line 678 "parser.y" - { - (yyval.ani) = new_ani_any(); - if((yyvsp[0].raw)->size > 4 && !memcmp((yyvsp[0].raw)->data, riff, sizeof(riff))) - { - (yyval.ani)->type = res_aniico; - (yyval.ani)->u.ani = new_ani_curico(res_aniico, (yyvsp[0].raw), (yyvsp[-1].iptr)); - } - else - { - (yyval.ani)->type = res_icog; - (yyval.ani)->u.icog = new_icon_group((yyvsp[0].raw), (yyvsp[-1].iptr)); - } - ;} - break; - - case 39: -#line 700 "parser.y" - { (yyval.fnt) = new_font((yyvsp[0].raw), (yyvsp[-1].iptr)); ;} - break; - - case 40: -#line 710 "parser.y" - { (yyval.fnd) = new_fontdir((yyvsp[0].raw), (yyvsp[-1].iptr)); ;} - break; - - case 41: -#line 718 "parser.y" - { - if(!win32) - parser_warning("MESSAGETABLE not supported in 16-bit mode\n"); - (yyval.msg) = new_messagetable((yyvsp[0].raw), (yyvsp[-1].iptr)); - ;} - break; - - case 42: -#line 726 "parser.y" - { (yyval.html) = new_html((yyvsp[0].raw), (yyvsp[-1].iptr)); ;} - break; - - case 43: -#line 730 "parser.y" - { (yyval.rdt) = new_rcdata((yyvsp[0].raw), (yyvsp[-1].iptr)); ;} - break; - - case 44: -#line 734 "parser.y" - { (yyval.dginit) = new_dlginit((yyvsp[0].raw), (yyvsp[-1].iptr)); ;} - break; - - case 45: -#line 738 "parser.y" - { -#ifdef WORDS_BIGENDIAN - if(pedantic && byteorder != WRC_BO_LITTLE) -#else - if(pedantic && byteorder == WRC_BO_BIG) -#endif - parser_warning("Byteordering is not little-endian and type cannot be interpreted\n"); - (yyval.usr) = new_user((yyvsp[-2].nid), (yyvsp[0].raw), (yyvsp[-1].iptr)); - ;} - break; - - case 46: -#line 749 "parser.y" - { - (yyval.nid) = new_name_id(); - (yyval.nid)->type = name_ord; - (yyval.nid)->name.i_name = (yyvsp[0].num); - ;} - break; - - case 47: -#line 754 "parser.y" - { - (yyval.nid) = new_name_id(); - (yyval.nid)->type = name_str; - (yyval.nid)->name.s_name = (yyvsp[0].str); - ;} - break; - - case 48: -#line 763 "parser.y" - { - (yyval.acc) = new_accelerator(); - if((yyvsp[-4].iptr)) - { - (yyval.acc)->memopt = *((yyvsp[-4].iptr)); - free((yyvsp[-4].iptr)); - } - else - { - (yyval.acc)->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE; - } - if(!(yyvsp[-1].event)) - parser_error("Accelerator table must have at least one entry\n"); - (yyval.acc)->events = get_event_head((yyvsp[-1].event)); - if((yyvsp[-3].lvc)) - { - (yyval.acc)->lvc = *((yyvsp[-3].lvc)); - free((yyvsp[-3].lvc)); - } - if(!(yyval.acc)->lvc.language) - (yyval.acc)->lvc.language = dup_language(currentlanguage); - ;} - break; - - case 49: -#line 787 "parser.y" - { (yyval.event)=NULL; ;} - break; - - case 50: -#line 788 "parser.y" - { (yyval.event)=add_string_event((yyvsp[-3].str), (yyvsp[-1].num), (yyvsp[0].num), (yyvsp[-4].event)); ;} - break; - - case 51: -#line 789 "parser.y" - { (yyval.event)=add_event((yyvsp[-3].num), (yyvsp[-1].num), (yyvsp[0].num), (yyvsp[-4].event)); ;} - break; - - case 52: -#line 798 "parser.y" - { (yyval.num) = 0; ;} - break; - - case 53: -#line 799 "parser.y" - { (yyval.num) = (yyvsp[0].num); ;} - break; - - case 54: -#line 802 "parser.y" - { (yyval.num) = (yyvsp[0].num); ;} - break; - - case 55: -#line 803 "parser.y" - { (yyval.num) = (yyvsp[-2].num) | (yyvsp[0].num); ;} - break; - - case 56: -#line 806 "parser.y" - { (yyval.num) = WRC_AF_NOINVERT; ;} - break; - - case 57: -#line 807 "parser.y" - { (yyval.num) = WRC_AF_SHIFT; ;} - break; - - case 58: -#line 808 "parser.y" - { (yyval.num) = WRC_AF_CONTROL; ;} - break; - - case 59: -#line 809 "parser.y" - { (yyval.num) = WRC_AF_ALT; ;} - break; - - case 60: -#line 810 "parser.y" - { (yyval.num) = WRC_AF_ASCII; ;} - break; - - case 61: -#line 811 "parser.y" - { (yyval.num) = WRC_AF_VIRTKEY; ;} - break; - - case 62: -#line 817 "parser.y" - { - if((yyvsp[-11].iptr)) - { - (yyvsp[-3].dlg)->memopt = *((yyvsp[-11].iptr)); - free((yyvsp[-11].iptr)); - } - else - (yyvsp[-3].dlg)->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE; - (yyvsp[-3].dlg)->x = (yyvsp[-10].num); - (yyvsp[-3].dlg)->y = (yyvsp[-8].num); - (yyvsp[-3].dlg)->width = (yyvsp[-6].num); - (yyvsp[-3].dlg)->height = (yyvsp[-4].num); - (yyvsp[-3].dlg)->controls = get_control_head((yyvsp[-1].ctl)); - (yyval.dlg) = (yyvsp[-3].dlg); - if(!(yyval.dlg)->gotstyle) - { - (yyval.dlg)->style = new_style(0,0); - (yyval.dlg)->style->or_mask = WS_POPUP; - (yyval.dlg)->gotstyle = TRUE; - } - if((yyval.dlg)->title) - (yyval.dlg)->style->or_mask |= WS_CAPTION; - if((yyval.dlg)->font) - (yyval.dlg)->style->or_mask |= DS_SETFONT; - - (yyval.dlg)->style->or_mask &= ~((yyval.dlg)->style->and_mask); - (yyval.dlg)->style->and_mask = 0; - - if(!(yyval.dlg)->lvc.language) - (yyval.dlg)->lvc.language = dup_language(currentlanguage); - ;} - break; - - case 63: -#line 851 "parser.y" - { (yyval.dlg)=new_dialog(); ;} - break; - - case 64: -#line 852 "parser.y" - { (yyval.dlg)=dialog_style((yyvsp[0].style),(yyvsp[-2].dlg)); ;} - break; - - case 65: -#line 853 "parser.y" - { (yyval.dlg)=dialog_exstyle((yyvsp[0].style),(yyvsp[-2].dlg)); ;} - break; - - case 66: -#line 854 "parser.y" - { (yyval.dlg)=dialog_caption((yyvsp[0].str),(yyvsp[-2].dlg)); ;} - break; - - case 67: -#line 855 "parser.y" - { (yyval.dlg)=dialog_font((yyvsp[0].fntid),(yyvsp[-1].dlg)); ;} - break; - - case 68: -#line 856 "parser.y" - { (yyval.dlg)=dialog_class((yyvsp[0].nid),(yyvsp[-2].dlg)); ;} - break; - - case 69: -#line 857 "parser.y" - { (yyval.dlg)=dialog_menu((yyvsp[0].nid),(yyvsp[-2].dlg)); ;} - break; - - case 70: -#line 858 "parser.y" - { (yyval.dlg)=dialog_language((yyvsp[0].lan),(yyvsp[-1].dlg)); ;} - break; - - case 71: -#line 859 "parser.y" - { (yyval.dlg)=dialog_characteristics((yyvsp[0].chars),(yyvsp[-1].dlg)); ;} - break; - - case 72: -#line 860 "parser.y" - { (yyval.dlg)=dialog_version((yyvsp[0].ver),(yyvsp[-1].dlg)); ;} - break; - - case 73: -#line 863 "parser.y" - { (yyval.ctl) = NULL; ;} - break; - - case 74: -#line 864 "parser.y" - { (yyval.ctl)=ins_ctrl(-1, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 75: -#line 865 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_EDIT, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 76: -#line 866 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_LISTBOX, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 77: -#line 867 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_COMBOBOX, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 78: -#line 868 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_SCROLLBAR, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 79: -#line 869 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_CHECKBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 80: -#line 870 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_DEFPUSHBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 81: -#line 871 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_GROUPBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl));;} - break; - - case 82: -#line 872 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_PUSHBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 83: -#line 874 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_RADIOBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 84: -#line 875 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTO3STATE, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 85: -#line 876 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_3STATE, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 86: -#line 877 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTOCHECKBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 87: -#line 878 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTORADIOBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 88: -#line 879 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_STATIC, SS_LEFT, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 89: -#line 880 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_STATIC, SS_CENTER, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 90: -#line 881 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_STATIC, SS_RIGHT, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 91: -#line 883 "parser.y" - { - (yyvsp[0].ctl)->title = (yyvsp[-7].nid); - (yyvsp[0].ctl)->id = (yyvsp[-5].num); - (yyvsp[0].ctl)->x = (yyvsp[-3].num); - (yyvsp[0].ctl)->y = (yyvsp[-1].num); - (yyval.ctl) = ins_ctrl(CT_STATIC, SS_ICON, (yyvsp[0].ctl), (yyvsp[-9].ctl)); - ;} - break; - - case 92: -#line 893 "parser.y" - { - (yyval.ctl)=new_control(); - (yyval.ctl)->title = (yyvsp[-11].nid); - (yyval.ctl)->id = (yyvsp[-9].num); - (yyval.ctl)->x = (yyvsp[-7].num); - (yyval.ctl)->y = (yyvsp[-5].num); - (yyval.ctl)->width = (yyvsp[-3].num); - (yyval.ctl)->height = (yyvsp[-1].num); - if((yyvsp[0].styles)) - { - (yyval.ctl)->style = (yyvsp[0].styles)->style; - (yyval.ctl)->gotstyle = TRUE; - if ((yyvsp[0].styles)->exstyle) - { - (yyval.ctl)->exstyle = (yyvsp[0].styles)->exstyle; - (yyval.ctl)->gotexstyle = TRUE; - } - free((yyvsp[0].styles)); - } - ;} - break; - - case 93: -#line 916 "parser.y" - { - (yyval.ctl) = new_control(); - (yyval.ctl)->id = (yyvsp[-9].num); - (yyval.ctl)->x = (yyvsp[-7].num); - (yyval.ctl)->y = (yyvsp[-5].num); - (yyval.ctl)->width = (yyvsp[-3].num); - (yyval.ctl)->height = (yyvsp[-1].num); - if((yyvsp[0].styles)) - { - (yyval.ctl)->style = (yyvsp[0].styles)->style; - (yyval.ctl)->gotstyle = TRUE; - if ((yyvsp[0].styles)->exstyle) - { - (yyval.ctl)->exstyle = (yyvsp[0].styles)->exstyle; - (yyval.ctl)->gotexstyle = TRUE; - } - free((yyvsp[0].styles)); - } - ;} - break; - - case 94: -#line 938 "parser.y" - { (yyval.ctl) = new_control(); ;} - break; - - case 95: -#line 940 "parser.y" - { - (yyval.ctl) = new_control(); - (yyval.ctl)->width = (yyvsp[-2].num); - (yyval.ctl)->height = (yyvsp[0].num); - ;} - break; - - case 96: -#line 945 "parser.y" - { - (yyval.ctl) = new_control(); - (yyval.ctl)->width = (yyvsp[-4].num); - (yyval.ctl)->height = (yyvsp[-2].num); - (yyval.ctl)->style = (yyvsp[0].style); - (yyval.ctl)->gotstyle = TRUE; - ;} - break; - - case 97: -#line 952 "parser.y" - { - (yyval.ctl) = new_control(); - (yyval.ctl)->width = (yyvsp[-6].num); - (yyval.ctl)->height = (yyvsp[-4].num); - (yyval.ctl)->style = (yyvsp[-2].style); - (yyval.ctl)->gotstyle = TRUE; - (yyval.ctl)->exstyle = (yyvsp[0].style); - (yyval.ctl)->gotexstyle = TRUE; - ;} - break; - - case 98: -#line 963 "parser.y" - { - (yyval.ctl)=new_control(); - (yyval.ctl)->title = (yyvsp[-16].nid); - (yyval.ctl)->id = (yyvsp[-14].num); - (yyval.ctl)->ctlclass = convert_ctlclass((yyvsp[-12].nid)); - (yyval.ctl)->style = (yyvsp[-10].style); - (yyval.ctl)->gotstyle = TRUE; - (yyval.ctl)->x = (yyvsp[-8].num); - (yyval.ctl)->y = (yyvsp[-6].num); - (yyval.ctl)->width = (yyvsp[-4].num); - (yyval.ctl)->height = (yyvsp[-2].num); - (yyval.ctl)->exstyle = (yyvsp[0].style); - (yyval.ctl)->gotexstyle = TRUE; - ;} - break; - - case 99: -#line 977 "parser.y" - { - (yyval.ctl)=new_control(); - (yyval.ctl)->title = (yyvsp[-14].nid); - (yyval.ctl)->id = (yyvsp[-12].num); - (yyval.ctl)->ctlclass = convert_ctlclass((yyvsp[-10].nid)); - (yyval.ctl)->style = (yyvsp[-8].style); - (yyval.ctl)->gotstyle = TRUE; - (yyval.ctl)->x = (yyvsp[-6].num); - (yyval.ctl)->y = (yyvsp[-4].num); - (yyval.ctl)->width = (yyvsp[-2].num); - (yyval.ctl)->height = (yyvsp[0].num); - ;} - break; - - case 100: -#line 992 "parser.y" - { (yyval.fntid) = new_font_id((yyvsp[-2].num), (yyvsp[0].str), 0, 0); ;} - break; - - case 101: -#line 997 "parser.y" - { (yyval.styles) = NULL; ;} - break; - - case 102: -#line 998 "parser.y" - { (yyval.styles) = new_style_pair((yyvsp[0].style), 0); ;} - break; - - case 103: -#line 999 "parser.y" - { (yyval.styles) = new_style_pair((yyvsp[-2].style), (yyvsp[0].style)); ;} - break; - - case 104: -#line 1003 "parser.y" - { (yyval.style) = new_style((yyvsp[-2].style)->or_mask | (yyvsp[0].style)->or_mask, (yyvsp[-2].style)->and_mask | (yyvsp[0].style)->and_mask); free((yyvsp[-2].style)); free((yyvsp[0].style));;} - break; - - case 105: -#line 1004 "parser.y" - { (yyval.style) = (yyvsp[-1].style); ;} - break; - - case 106: -#line 1005 "parser.y" - { (yyval.style) = new_style((yyvsp[0].num), 0); ;} - break; - - case 107: -#line 1006 "parser.y" - { (yyval.style) = new_style(0, (yyvsp[0].num)); ;} - break; - - case 108: -#line 1010 "parser.y" - { - (yyval.nid) = new_name_id(); - (yyval.nid)->type = name_ord; - (yyval.nid)->name.i_name = (yyvsp[0].num); - ;} - break; - - case 109: -#line 1015 "parser.y" - { - (yyval.nid) = new_name_id(); - (yyval.nid)->type = name_str; - (yyval.nid)->name.s_name = (yyvsp[0].str); - ;} - break; - - case 110: -#line 1024 "parser.y" - { - if(!win32) - parser_warning("DIALOGEX not supported in 16-bit mode\n"); - if((yyvsp[-12].iptr)) - { - (yyvsp[-3].dlgex)->memopt = *((yyvsp[-12].iptr)); - free((yyvsp[-12].iptr)); - } - else - (yyvsp[-3].dlgex)->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE; - (yyvsp[-3].dlgex)->x = (yyvsp[-11].num); - (yyvsp[-3].dlgex)->y = (yyvsp[-9].num); - (yyvsp[-3].dlgex)->width = (yyvsp[-7].num); - (yyvsp[-3].dlgex)->height = (yyvsp[-5].num); - if((yyvsp[-4].iptr)) - { - (yyvsp[-3].dlgex)->helpid = *((yyvsp[-4].iptr)); - (yyvsp[-3].dlgex)->gothelpid = TRUE; - free((yyvsp[-4].iptr)); - } - (yyvsp[-3].dlgex)->controls = get_control_head((yyvsp[-1].ctl)); - (yyval.dlgex) = (yyvsp[-3].dlgex); - - assert((yyval.dlgex)->style != NULL); - if(!(yyval.dlgex)->gotstyle) - { - (yyval.dlgex)->style->or_mask = WS_POPUP; - (yyval.dlgex)->gotstyle = TRUE; - } - if((yyval.dlgex)->title) - (yyval.dlgex)->style->or_mask |= WS_CAPTION; - if((yyval.dlgex)->font) - (yyval.dlgex)->style->or_mask |= DS_SETFONT; - - (yyval.dlgex)->style->or_mask &= ~((yyval.dlgex)->style->and_mask); - (yyval.dlgex)->style->and_mask = 0; - - if(!(yyval.dlgex)->lvc.language) - (yyval.dlgex)->lvc.language = dup_language(currentlanguage); - ;} - break; - - case 111: -#line 1067 "parser.y" - { (yyval.dlgex)=new_dialogex(); ;} - break; - - case 112: -#line 1068 "parser.y" - { (yyval.dlgex)=dialogex_style((yyvsp[0].style),(yyvsp[-2].dlgex)); ;} - break; - - case 113: -#line 1069 "parser.y" - { (yyval.dlgex)=dialogex_exstyle((yyvsp[0].style),(yyvsp[-2].dlgex)); ;} - break; - - case 114: -#line 1070 "parser.y" - { (yyval.dlgex)=dialogex_caption((yyvsp[0].str),(yyvsp[-2].dlgex)); ;} - break; - - case 115: -#line 1071 "parser.y" - { (yyval.dlgex)=dialogex_font((yyvsp[0].fntid),(yyvsp[-1].dlgex)); ;} - break; - - case 116: -#line 1072 "parser.y" - { (yyval.dlgex)=dialogex_font((yyvsp[0].fntid),(yyvsp[-1].dlgex)); ;} - break; - - case 117: -#line 1073 "parser.y" - { (yyval.dlgex)=dialogex_class((yyvsp[0].nid),(yyvsp[-2].dlgex)); ;} - break; - - case 118: -#line 1074 "parser.y" - { (yyval.dlgex)=dialogex_menu((yyvsp[0].nid),(yyvsp[-2].dlgex)); ;} - break; - - case 119: -#line 1075 "parser.y" - { (yyval.dlgex)=dialogex_language((yyvsp[0].lan),(yyvsp[-1].dlgex)); ;} - break; - - case 120: -#line 1076 "parser.y" - { (yyval.dlgex)=dialogex_characteristics((yyvsp[0].chars),(yyvsp[-1].dlgex)); ;} - break; - - case 121: -#line 1077 "parser.y" - { (yyval.dlgex)=dialogex_version((yyvsp[0].ver),(yyvsp[-1].dlgex)); ;} - break; - - case 122: -#line 1080 "parser.y" - { (yyval.ctl) = NULL; ;} - break; - - case 123: -#line 1081 "parser.y" - { (yyval.ctl)=ins_ctrl(-1, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 124: -#line 1082 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_EDIT, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 125: -#line 1083 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_LISTBOX, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 126: -#line 1084 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_COMBOBOX, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 127: -#line 1085 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_SCROLLBAR, 0, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 128: -#line 1086 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_CHECKBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 129: -#line 1087 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_DEFPUSHBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 130: -#line 1088 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_GROUPBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl));;} - break; - - case 131: -#line 1089 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_PUSHBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 132: -#line 1091 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_RADIOBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 133: -#line 1092 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTO3STATE, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 134: -#line 1093 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_3STATE, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 135: -#line 1094 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTOCHECKBOX, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 136: -#line 1095 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_BUTTON, BS_AUTORADIOBUTTON, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 137: -#line 1096 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_STATIC, SS_LEFT, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 138: -#line 1097 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_STATIC, SS_CENTER, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 139: -#line 1098 "parser.y" - { (yyval.ctl)=ins_ctrl(CT_STATIC, SS_RIGHT, (yyvsp[0].ctl), (yyvsp[-2].ctl)); ;} - break; - - case 140: -#line 1100 "parser.y" - { - (yyvsp[0].ctl)->title = (yyvsp[-7].nid); - (yyvsp[0].ctl)->id = (yyvsp[-5].num); - (yyvsp[0].ctl)->x = (yyvsp[-3].num); - (yyvsp[0].ctl)->y = (yyvsp[-1].num); - (yyval.ctl) = ins_ctrl(CT_STATIC, SS_ICON, (yyvsp[0].ctl), (yyvsp[-9].ctl)); - ;} - break; - - case 141: -#line 1111 "parser.y" - { - (yyval.ctl)=new_control(); - (yyval.ctl)->title = (yyvsp[-18].nid); - (yyval.ctl)->id = (yyvsp[-16].num); - (yyval.ctl)->ctlclass = convert_ctlclass((yyvsp[-14].nid)); - (yyval.ctl)->style = (yyvsp[-12].style); - (yyval.ctl)->gotstyle = TRUE; - (yyval.ctl)->x = (yyvsp[-10].num); - (yyval.ctl)->y = (yyvsp[-8].num); - (yyval.ctl)->width = (yyvsp[-6].num); - (yyval.ctl)->height = (yyvsp[-4].num); - if((yyvsp[-2].style)) - { - (yyval.ctl)->exstyle = (yyvsp[-2].style); - (yyval.ctl)->gotexstyle = TRUE; - } - if((yyvsp[-1].iptr)) - { - (yyval.ctl)->helpid = *((yyvsp[-1].iptr)); - (yyval.ctl)->gothelpid = TRUE; - free((yyvsp[-1].iptr)); - } - (yyval.ctl)->extra = (yyvsp[0].raw); - ;} - break; - - case 142: -#line 1135 "parser.y" - { - (yyval.ctl)=new_control(); - (yyval.ctl)->title = (yyvsp[-15].nid); - (yyval.ctl)->id = (yyvsp[-13].num); - (yyval.ctl)->style = (yyvsp[-9].style); - (yyval.ctl)->gotstyle = TRUE; - (yyval.ctl)->ctlclass = convert_ctlclass((yyvsp[-11].nid)); - (yyval.ctl)->x = (yyvsp[-7].num); - (yyval.ctl)->y = (yyvsp[-5].num); - (yyval.ctl)->width = (yyvsp[-3].num); - (yyval.ctl)->height = (yyvsp[-1].num); - (yyval.ctl)->extra = (yyvsp[0].raw); - ;} - break; - - case 143: -#line 1151 "parser.y" - { - (yyval.ctl)=new_control(); - (yyval.ctl)->title = (yyvsp[-13].nid); - (yyval.ctl)->id = (yyvsp[-11].num); - (yyval.ctl)->x = (yyvsp[-9].num); - (yyval.ctl)->y = (yyvsp[-7].num); - (yyval.ctl)->width = (yyvsp[-5].num); - (yyval.ctl)->height = (yyvsp[-3].num); - if((yyvsp[-2].styles)) - { - (yyval.ctl)->style = (yyvsp[-2].styles)->style; - (yyval.ctl)->gotstyle = TRUE; - - if ((yyvsp[-2].styles)->exstyle) - { - (yyval.ctl)->exstyle = (yyvsp[-2].styles)->exstyle; - (yyval.ctl)->gotexstyle = TRUE; - } - free((yyvsp[-2].styles)); - } - - (yyval.ctl)->extra = (yyvsp[0].raw); - ;} - break; - - case 144: -#line 1177 "parser.y" - { - (yyval.ctl) = new_control(); - (yyval.ctl)->id = (yyvsp[-11].num); - (yyval.ctl)->x = (yyvsp[-9].num); - (yyval.ctl)->y = (yyvsp[-7].num); - (yyval.ctl)->width = (yyvsp[-5].num); - (yyval.ctl)->height = (yyvsp[-3].num); - if((yyvsp[-2].styles)) - { - (yyval.ctl)->style = (yyvsp[-2].styles)->style; - (yyval.ctl)->gotstyle = TRUE; - - if ((yyvsp[-2].styles)->exstyle) - { - (yyval.ctl)->exstyle = (yyvsp[-2].styles)->exstyle; - (yyval.ctl)->gotexstyle = TRUE; - } - free((yyvsp[-2].styles)); - } - (yyval.ctl)->extra = (yyvsp[0].raw); - ;} - break; - - case 145: -#line 1200 "parser.y" - { (yyval.raw) = NULL; ;} - break; - - case 146: -#line 1201 "parser.y" - { (yyval.raw) = (yyvsp[0].raw); ;} - break; - - case 147: -#line 1204 "parser.y" - { (yyval.iptr) = NULL; ;} - break; - - case 148: -#line 1205 "parser.y" - { (yyval.iptr) = new_int((yyvsp[0].num)); ;} - break; - - case 149: -#line 1209 "parser.y" - { (yyval.fntid) = new_font_id((yyvsp[-7].num), (yyvsp[-5].str), (yyvsp[-3].num), (yyvsp[-1].num)); ;} - break; - - case 150: -#line 1216 "parser.y" - { (yyval.fntid) = NULL; ;} - break; - - case 151: -#line 1217 "parser.y" - { (yyval.fntid) = NULL; ;} - break; - - case 152: -#line 1221 "parser.y" - { - if(!(yyvsp[0].menitm)) - parser_error("Menu must contain items\n"); - (yyval.men) = new_menu(); - if((yyvsp[-2].iptr)) - { - (yyval.men)->memopt = *((yyvsp[-2].iptr)); - free((yyvsp[-2].iptr)); - } - else - (yyval.men)->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE; - (yyval.men)->items = get_item_head((yyvsp[0].menitm)); - if((yyvsp[-1].lvc)) - { - (yyval.men)->lvc = *((yyvsp[-1].lvc)); - free((yyvsp[-1].lvc)); - } - if(!(yyval.men)->lvc.language) - (yyval.men)->lvc.language = dup_language(currentlanguage); - ;} - break; - - case 153: -#line 1244 "parser.y" - { (yyval.menitm) = (yyvsp[-1].menitm); ;} - break; - - case 154: -#line 1248 "parser.y" - {(yyval.menitm) = NULL;;} - break; - - case 155: -#line 1249 "parser.y" - { - (yyval.menitm)=new_menu_item(); - (yyval.menitm)->prev = (yyvsp[-5].menitm); - if((yyvsp[-5].menitm)) - (yyvsp[-5].menitm)->next = (yyval.menitm); - (yyval.menitm)->id = (yyvsp[-1].num); - (yyval.menitm)->state = (yyvsp[0].num); - (yyval.menitm)->name = (yyvsp[-3].str); - ;} - break; - - case 156: -#line 1258 "parser.y" - { - (yyval.menitm)=new_menu_item(); - (yyval.menitm)->prev = (yyvsp[-2].menitm); - if((yyvsp[-2].menitm)) - (yyvsp[-2].menitm)->next = (yyval.menitm); - ;} - break; - - case 157: -#line 1264 "parser.y" - { - (yyval.menitm) = new_menu_item(); - (yyval.menitm)->prev = (yyvsp[-4].menitm); - if((yyvsp[-4].menitm)) - (yyvsp[-4].menitm)->next = (yyval.menitm); - (yyval.menitm)->popup = get_item_head((yyvsp[0].menitm)); - (yyval.menitm)->name = (yyvsp[-2].str); - ;} - break; - - case 158: -#line 1283 "parser.y" - { (yyval.num) = 0; ;} - break; - - case 159: -#line 1284 "parser.y" - { (yyval.num) = (yyvsp[0].num) | MF_CHECKED; ;} - break; - - case 160: -#line 1285 "parser.y" - { (yyval.num) = (yyvsp[0].num) | MF_GRAYED; ;} - break; - - case 161: -#line 1286 "parser.y" - { (yyval.num) = (yyvsp[0].num) | MF_HELP; ;} - break; - - case 162: -#line 1287 "parser.y" - { (yyval.num) = (yyvsp[0].num) | MF_DISABLED; ;} - break; - - case 163: -#line 1288 "parser.y" - { (yyval.num) = (yyvsp[0].num) | MF_MENUBARBREAK; ;} - break; - - case 164: -#line 1289 "parser.y" - { (yyval.num) = (yyvsp[0].num) | MF_MENUBREAK; ;} - break; - - case 165: -#line 1293 "parser.y" - { - if(!win32) - parser_warning("MENUEX not supported in 16-bit mode\n"); - if(!(yyvsp[0].menexitm)) - parser_error("MenuEx must contain items\n"); - (yyval.menex) = new_menuex(); - if((yyvsp[-2].iptr)) - { - (yyval.menex)->memopt = *((yyvsp[-2].iptr)); - free((yyvsp[-2].iptr)); - } - else - (yyval.menex)->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE; - (yyval.menex)->items = get_itemex_head((yyvsp[0].menexitm)); - if((yyvsp[-1].lvc)) - { - (yyval.menex)->lvc = *((yyvsp[-1].lvc)); - free((yyvsp[-1].lvc)); - } - if(!(yyval.menex)->lvc.language) - (yyval.menex)->lvc.language = dup_language(currentlanguage); - ;} - break; - - case 166: -#line 1318 "parser.y" - { (yyval.menexitm) = (yyvsp[-1].menexitm); ;} - break; - - case 167: -#line 1322 "parser.y" - {(yyval.menexitm) = NULL; ;} - break; - - case 168: -#line 1323 "parser.y" - { - (yyval.menexitm) = new_menuex_item(); - (yyval.menexitm)->prev = (yyvsp[-3].menexitm); - if((yyvsp[-3].menexitm)) - (yyvsp[-3].menexitm)->next = (yyval.menexitm); - (yyval.menexitm)->name = (yyvsp[-1].str); - (yyval.menexitm)->id = (yyvsp[0].exopt)->id; - (yyval.menexitm)->type = (yyvsp[0].exopt)->type; - (yyval.menexitm)->state = (yyvsp[0].exopt)->state; - (yyval.menexitm)->helpid = (yyvsp[0].exopt)->helpid; - (yyval.menexitm)->gotid = (yyvsp[0].exopt)->gotid; - (yyval.menexitm)->gottype = (yyvsp[0].exopt)->gottype; - (yyval.menexitm)->gotstate = (yyvsp[0].exopt)->gotstate; - (yyval.menexitm)->gothelpid = (yyvsp[0].exopt)->gothelpid; - free((yyvsp[0].exopt)); - ;} - break; - - case 169: -#line 1339 "parser.y" - { - (yyval.menexitm) = new_menuex_item(); - (yyval.menexitm)->prev = (yyvsp[-2].menexitm); - if((yyvsp[-2].menexitm)) - (yyvsp[-2].menexitm)->next = (yyval.menexitm); - ;} - break; - - case 170: -#line 1345 "parser.y" - { - (yyval.menexitm) = new_menuex_item(); - (yyval.menexitm)->prev = (yyvsp[-4].menexitm); - if((yyvsp[-4].menexitm)) - (yyvsp[-4].menexitm)->next = (yyval.menexitm); - (yyval.menexitm)->popup = get_itemex_head((yyvsp[0].menexitm)); - (yyval.menexitm)->name = (yyvsp[-2].str); - (yyval.menexitm)->id = (yyvsp[-1].exopt)->id; - (yyval.menexitm)->type = (yyvsp[-1].exopt)->type; - (yyval.menexitm)->state = (yyvsp[-1].exopt)->state; - (yyval.menexitm)->helpid = (yyvsp[-1].exopt)->helpid; - (yyval.menexitm)->gotid = (yyvsp[-1].exopt)->gotid; - (yyval.menexitm)->gottype = (yyvsp[-1].exopt)->gottype; - (yyval.menexitm)->gotstate = (yyvsp[-1].exopt)->gotstate; - (yyval.menexitm)->gothelpid = (yyvsp[-1].exopt)->gothelpid; - free((yyvsp[-1].exopt)); - ;} - break; - - case 171: -#line 1365 "parser.y" - { (yyval.exopt) = new_itemex_opt(0, 0, 0, 0); ;} - break; - - case 172: -#line 1366 "parser.y" - { - (yyval.exopt) = new_itemex_opt((yyvsp[0].num), 0, 0, 0); - (yyval.exopt)->gotid = TRUE; - ;} - break; - - case 173: -#line 1370 "parser.y" - { - (yyval.exopt) = new_itemex_opt((yyvsp[-3].iptr) ? *((yyvsp[-3].iptr)) : 0, (yyvsp[-1].iptr) ? *((yyvsp[-1].iptr)) : 0, (yyvsp[0].num), 0); - (yyval.exopt)->gotid = TRUE; - (yyval.exopt)->gottype = TRUE; - (yyval.exopt)->gotstate = TRUE; - free((yyvsp[-3].iptr)); - free((yyvsp[-1].iptr)); - ;} - break; - - case 174: -#line 1378 "parser.y" - { - (yyval.exopt) = new_itemex_opt((yyvsp[-4].iptr) ? *((yyvsp[-4].iptr)) : 0, (yyvsp[-2].iptr) ? *((yyvsp[-2].iptr)) : 0, (yyvsp[0].num), 0); - (yyval.exopt)->gotid = TRUE; - (yyval.exopt)->gottype = TRUE; - (yyval.exopt)->gotstate = TRUE; - free((yyvsp[-4].iptr)); - free((yyvsp[-2].iptr)); - ;} - break; - - case 175: -#line 1389 "parser.y" - { (yyval.exopt) = new_itemex_opt(0, 0, 0, 0); ;} - break; - - case 176: -#line 1390 "parser.y" - { - (yyval.exopt) = new_itemex_opt((yyvsp[0].num), 0, 0, 0); - (yyval.exopt)->gotid = TRUE; - ;} - break; - - case 177: -#line 1394 "parser.y" - { - (yyval.exopt) = new_itemex_opt((yyvsp[-2].iptr) ? *((yyvsp[-2].iptr)) : 0, (yyvsp[0].num), 0, 0); - free((yyvsp[-2].iptr)); - (yyval.exopt)->gotid = TRUE; - (yyval.exopt)->gottype = TRUE; - ;} - break; - - case 178: -#line 1400 "parser.y" - { - (yyval.exopt) = new_itemex_opt((yyvsp[-4].iptr) ? *((yyvsp[-4].iptr)) : 0, (yyvsp[-2].iptr) ? *((yyvsp[-2].iptr)) : 0, (yyvsp[0].num), 0); - free((yyvsp[-4].iptr)); - free((yyvsp[-2].iptr)); - (yyval.exopt)->gotid = TRUE; - (yyval.exopt)->gottype = TRUE; - (yyval.exopt)->gotstate = TRUE; - ;} - break; - - case 179: -#line 1408 "parser.y" - { - (yyval.exopt) = new_itemex_opt((yyvsp[-6].iptr) ? *((yyvsp[-6].iptr)) : 0, (yyvsp[-4].iptr) ? *((yyvsp[-4].iptr)) : 0, (yyvsp[-2].iptr) ? *((yyvsp[-2].iptr)) : 0, (yyvsp[0].num)); - free((yyvsp[-6].iptr)); - free((yyvsp[-4].iptr)); - free((yyvsp[-2].iptr)); - (yyval.exopt)->gotid = TRUE; - (yyval.exopt)->gottype = TRUE; - (yyval.exopt)->gotstate = TRUE; - (yyval.exopt)->gothelpid = TRUE; - ;} - break; - - case 180: -#line 1428 "parser.y" - { - if(!(yyvsp[-1].stt)) - { - parser_error("Stringtable must have at least one entry\n"); - } - else - { - stringtable_t *stt; - /* Check if we added to a language table or created - * a new one. - */ - for(stt = sttres; stt; stt = stt->next) - { - if(stt == tagstt) - break; - } - if(!stt) - { - /* It is a new one */ - if(sttres) - { - sttres->prev = tagstt; - tagstt->next = sttres; - sttres = tagstt; - } - else - sttres = tagstt; - } - /* Else were done */ - } - free(tagstt_memopt); - tagstt_memopt = NULL; - - (yyval.stt) = tagstt; - ;} - break; - - case 181: -#line 1466 "parser.y" - { - if((tagstt = find_stringtable((yyvsp[0].lvc))) == NULL) - tagstt = new_stringtable((yyvsp[0].lvc)); - tagstt_memopt = (yyvsp[-1].iptr); - tagstt_version = (yyvsp[0].lvc)->version; - tagstt_characts = (yyvsp[0].lvc)->characts; - free((yyvsp[0].lvc)); - ;} - break; - - case 182: -#line 1476 "parser.y" - { (yyval.stt) = NULL; ;} - break; - - case 183: -#line 1477 "parser.y" - { - int i; - assert(tagstt != NULL); - if((yyvsp[-2].num) > 65535 || (yyvsp[-2].num) < -32768) - parser_error("Stringtable entry's ID out of range (%d)\n", (yyvsp[-2].num)); - /* Search for the ID */ - for(i = 0; i < tagstt->nentries; i++) - { - if(tagstt->entries[i].id == (yyvsp[-2].num)) - parser_error("Stringtable ID %d already in use\n", (yyvsp[-2].num)); - } - /* If we get here, then we have a new unique entry */ - tagstt->nentries++; - tagstt->entries = xrealloc(tagstt->entries, sizeof(tagstt->entries[0]) * tagstt->nentries); - tagstt->entries[tagstt->nentries-1].id = (yyvsp[-2].num); - tagstt->entries[tagstt->nentries-1].str = (yyvsp[0].str); - if(tagstt_memopt) - tagstt->entries[tagstt->nentries-1].memopt = *tagstt_memopt; - else - tagstt->entries[tagstt->nentries-1].memopt = WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE | WRC_MO_PURE; - tagstt->entries[tagstt->nentries-1].version = tagstt_version; - tagstt->entries[tagstt->nentries-1].characts = tagstt_characts; - - if(pedantic && !(yyvsp[0].str)->size) - parser_warning("Zero length strings make no sense\n"); - if(!win32 && (yyvsp[0].str)->size > 254) - parser_error("Stringtable entry more than 254 characters\n"); - if(win32 && (yyvsp[0].str)->size > 65534) /* Hmm..., does this happen? */ - parser_error("Stringtable entry more than 65534 characters (probably something else that went wrong)\n"); - (yyval.stt) = tagstt; - ;} - break; - - case 186: -#line 1517 "parser.y" - { - (yyval.veri) = (yyvsp[-3].veri); - if((yyvsp[-4].iptr)) - { - (yyval.veri)->memopt = *((yyvsp[-4].iptr)); - free((yyvsp[-4].iptr)); - } - else - (yyval.veri)->memopt = WRC_MO_MOVEABLE | (win32 ? WRC_MO_PURE : 0); - (yyval.veri)->blocks = get_ver_block_head((yyvsp[-1].blk)); - /* Set language; there is no version or characteristics */ - (yyval.veri)->lvc.language = dup_language(currentlanguage); - ;} - break; - - case 187: -#line 1533 "parser.y" - { (yyval.veri) = new_versioninfo(); ;} - break; - - case 188: -#line 1534 "parser.y" - { - if((yyvsp[-8].veri)->gotit.fv) - parser_error("FILEVERSION already defined\n"); - (yyval.veri) = (yyvsp[-8].veri); - (yyval.veri)->filever_maj1 = (yyvsp[-6].num); - (yyval.veri)->filever_maj2 = (yyvsp[-4].num); - (yyval.veri)->filever_min1 = (yyvsp[-2].num); - (yyval.veri)->filever_min2 = (yyvsp[0].num); - (yyval.veri)->gotit.fv = 1; - ;} - break; - - case 189: -#line 1544 "parser.y" - { - if((yyvsp[-8].veri)->gotit.pv) - parser_error("PRODUCTVERSION already defined\n"); - (yyval.veri) = (yyvsp[-8].veri); - (yyval.veri)->prodver_maj1 = (yyvsp[-6].num); - (yyval.veri)->prodver_maj2 = (yyvsp[-4].num); - (yyval.veri)->prodver_min1 = (yyvsp[-2].num); - (yyval.veri)->prodver_min2 = (yyvsp[0].num); - (yyval.veri)->gotit.pv = 1; - ;} - break; - - case 190: -#line 1554 "parser.y" - { - if((yyvsp[-2].veri)->gotit.ff) - parser_error("FILEFLAGS already defined\n"); - (yyval.veri) = (yyvsp[-2].veri); - (yyval.veri)->fileflags = (yyvsp[0].num); - (yyval.veri)->gotit.ff = 1; - ;} - break; - - case 191: -#line 1561 "parser.y" - { - if((yyvsp[-2].veri)->gotit.ffm) - parser_error("FILEFLAGSMASK already defined\n"); - (yyval.veri) = (yyvsp[-2].veri); - (yyval.veri)->fileflagsmask = (yyvsp[0].num); - (yyval.veri)->gotit.ffm = 1; - ;} - break; - - case 192: -#line 1568 "parser.y" - { - if((yyvsp[-2].veri)->gotit.fo) - parser_error("FILEOS already defined\n"); - (yyval.veri) = (yyvsp[-2].veri); - (yyval.veri)->fileos = (yyvsp[0].num); - (yyval.veri)->gotit.fo = 1; - ;} - break; - - case 193: -#line 1575 "parser.y" - { - if((yyvsp[-2].veri)->gotit.ft) - parser_error("FILETYPE already defined\n"); - (yyval.veri) = (yyvsp[-2].veri); - (yyval.veri)->filetype = (yyvsp[0].num); - (yyval.veri)->gotit.ft = 1; - ;} - break; - - case 194: -#line 1582 "parser.y" - { - if((yyvsp[-2].veri)->gotit.fst) - parser_error("FILESUBTYPE already defined\n"); - (yyval.veri) = (yyvsp[-2].veri); - (yyval.veri)->filesubtype = (yyvsp[0].num); - (yyval.veri)->gotit.fst = 1; - ;} - break; - - case 195: -#line 1592 "parser.y" - { (yyval.blk) = NULL; ;} - break; - - case 196: -#line 1593 "parser.y" - { - (yyval.blk) = (yyvsp[0].blk); - (yyval.blk)->prev = (yyvsp[-1].blk); - if((yyvsp[-1].blk)) - (yyvsp[-1].blk)->next = (yyval.blk); - ;} - break; - - case 197: -#line 1602 "parser.y" - { - (yyval.blk) = new_ver_block(); - (yyval.blk)->name = (yyvsp[-3].str); - (yyval.blk)->values = get_ver_value_head((yyvsp[-1].val)); - ;} - break; - - case 198: -#line 1610 "parser.y" - { (yyval.val) = NULL; ;} - break; - - case 199: -#line 1611 "parser.y" - { - (yyval.val) = (yyvsp[0].val); - (yyval.val)->prev = (yyvsp[-1].val); - if((yyvsp[-1].val)) - (yyvsp[-1].val)->next = (yyval.val); - ;} - break; - - case 200: -#line 1620 "parser.y" - { - (yyval.val) = new_ver_value(); - (yyval.val)->type = val_block; - (yyval.val)->value.block = (yyvsp[0].blk); - ;} - break; - - case 201: -#line 1625 "parser.y" - { - (yyval.val) = new_ver_value(); - (yyval.val)->type = val_str; - (yyval.val)->key = (yyvsp[-2].str); - (yyval.val)->value.str = (yyvsp[0].str); - ;} - break; - - case 202: -#line 1631 "parser.y" - { - (yyval.val) = new_ver_value(); - (yyval.val)->type = val_words; - (yyval.val)->key = (yyvsp[-2].str); - (yyval.val)->value.words = (yyvsp[0].verw); - ;} - break; - - case 203: -#line 1640 "parser.y" - { (yyval.verw) = new_ver_words((yyvsp[0].num)); ;} - break; - - case 204: -#line 1641 "parser.y" - { (yyval.verw) = add_ver_words((yyvsp[-2].verw), (yyvsp[0].num)); ;} - break; - - case 205: -#line 1645 "parser.y" - { - int nitems; - toolbar_item_t *items = get_tlbr_buttons_head((yyvsp[-1].tlbarItems), &nitems); - (yyval.tlbar) = new_toolbar((yyvsp[-6].num), (yyvsp[-4].num), items, nitems); - if((yyvsp[-7].iptr)) - { - (yyval.tlbar)->memopt = *((yyvsp[-7].iptr)); - free((yyvsp[-7].iptr)); - } - else - { - (yyval.tlbar)->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE; - } - if((yyvsp[-3].lvc)) - { - (yyval.tlbar)->lvc = *((yyvsp[-3].lvc)); - free((yyvsp[-3].lvc)); - } - if(!(yyval.tlbar)->lvc.language) - { - (yyval.tlbar)->lvc.language = dup_language(currentlanguage); - } - ;} - break; - - case 206: -#line 1671 "parser.y" - { (yyval.tlbarItems) = NULL; ;} - break; - - case 207: -#line 1672 "parser.y" - { - toolbar_item_t *idrec = new_toolbar_item(); - idrec->id = (yyvsp[0].num); - (yyval.tlbarItems) = ins_tlbr_button((yyvsp[-2].tlbarItems), idrec); - ;} - break; - - case 208: -#line 1677 "parser.y" - { - toolbar_item_t *idrec = new_toolbar_item(); - idrec->id = 0; - (yyval.tlbarItems) = ins_tlbr_button((yyvsp[-1].tlbarItems), idrec); - ;} - break; - - case 209: -#line 1686 "parser.y" - { (yyval.iptr) = NULL; ;} - break; - - case 210: -#line 1687 "parser.y" - { - if((yyvsp[-1].iptr)) - { - *((yyvsp[-1].iptr)) |= *((yyvsp[0].iptr)); - (yyval.iptr) = (yyvsp[-1].iptr); - free((yyvsp[0].iptr)); - } - else - (yyval.iptr) = (yyvsp[0].iptr); - ;} - break; - - case 211: -#line 1697 "parser.y" - { - if((yyvsp[-1].iptr)) - { - *((yyvsp[-1].iptr)) &= *((yyvsp[0].iptr)); - (yyval.iptr) = (yyvsp[-1].iptr); - free((yyvsp[0].iptr)); - } - else - { - *(yyvsp[0].iptr) &= WRC_MO_MOVEABLE | WRC_MO_DISCARDABLE | WRC_MO_PURE; - (yyval.iptr) = (yyvsp[0].iptr); - } - ;} - break; - - case 212: -#line 1712 "parser.y" - { (yyval.iptr) = new_int(WRC_MO_PRELOAD); ;} - break; - - case 213: -#line 1713 "parser.y" - { (yyval.iptr) = new_int(WRC_MO_MOVEABLE); ;} - break; - - case 214: -#line 1714 "parser.y" - { (yyval.iptr) = new_int(WRC_MO_DISCARDABLE); ;} - break; - - case 215: -#line 1715 "parser.y" - { (yyval.iptr) = new_int(WRC_MO_PURE); ;} - break; - - case 216: -#line 1718 "parser.y" - { (yyval.iptr) = new_int(~WRC_MO_PRELOAD); ;} - break; - - case 217: -#line 1719 "parser.y" - { (yyval.iptr) = new_int(~WRC_MO_MOVEABLE); ;} - break; - - case 218: -#line 1720 "parser.y" - { (yyval.iptr) = new_int(~WRC_MO_PURE); ;} - break; - - case 219: -#line 1724 "parser.y" - { (yyval.lvc) = new_lvc(); ;} - break; - - case 220: -#line 1725 "parser.y" - { - if(!win32) - parser_warning("LANGUAGE not supported in 16-bit mode\n"); - if((yyvsp[-1].lvc)->language) - parser_error("Language already defined\n"); - (yyval.lvc) = (yyvsp[-1].lvc); - (yyvsp[-1].lvc)->language = (yyvsp[0].lan); - ;} - break; - - case 221: -#line 1733 "parser.y" - { - if(!win32) - parser_warning("CHARACTERISTICS not supported in 16-bit mode\n"); - if((yyvsp[-1].lvc)->characts) - parser_error("Characteristics already defined\n"); - (yyval.lvc) = (yyvsp[-1].lvc); - (yyvsp[-1].lvc)->characts = (yyvsp[0].chars); - ;} - break; - - case 222: -#line 1741 "parser.y" - { - if(!win32) - parser_warning("VERSION not supported in 16-bit mode\n"); - if((yyvsp[-1].lvc)->version) - parser_error("Version already defined\n"); - (yyval.lvc) = (yyvsp[-1].lvc); - (yyvsp[-1].lvc)->version = (yyvsp[0].ver); - ;} - break; - - case 223: -#line 1759 "parser.y" - { (yyval.lan) = new_language((yyvsp[-2].num), (yyvsp[0].num)); - if (get_language_codepage((yyvsp[-2].num), (yyvsp[0].num)) == -1) - parser_error( "Language %04x is not supported\n", ((yyvsp[0].num)<<10) + (yyvsp[-2].num)); - ;} - break; - - case 224: -#line 1766 "parser.y" - { (yyval.chars) = new_characts((yyvsp[0].num)); ;} - break; - - case 225: -#line 1770 "parser.y" - { (yyval.ver) = new_version((yyvsp[0].num)); ;} - break; - - case 226: -#line 1774 "parser.y" - { - if((yyvsp[-3].lvc)) - { - (yyvsp[-1].raw)->lvc = *((yyvsp[-3].lvc)); - free((yyvsp[-3].lvc)); - } - - if(!(yyvsp[-1].raw)->lvc.language) - (yyvsp[-1].raw)->lvc.language = dup_language(currentlanguage); - - (yyval.raw) = (yyvsp[-1].raw); - ;} - break; - - case 227: -#line 1789 "parser.y" - { (yyval.raw) = (yyvsp[0].raw); ;} - break; - - case 228: -#line 1790 "parser.y" - { (yyval.raw) = int2raw_data((yyvsp[0].num)); ;} - break; - - case 229: -#line 1791 "parser.y" - { (yyval.raw) = int2raw_data(-((yyvsp[0].num))); ;} - break; - - case 230: -#line 1792 "parser.y" - { (yyval.raw) = long2raw_data((yyvsp[0].num)); ;} - break; - - case 231: -#line 1793 "parser.y" - { (yyval.raw) = long2raw_data(-((yyvsp[0].num))); ;} - break; - - case 232: -#line 1794 "parser.y" - { (yyval.raw) = str2raw_data((yyvsp[0].str)); ;} - break; - - case 233: -#line 1795 "parser.y" - { (yyval.raw) = merge_raw_data((yyvsp[-2].raw), (yyvsp[0].raw)); free((yyvsp[0].raw)->data); free((yyvsp[0].raw)); ;} - break; - - case 234: -#line 1796 "parser.y" - { (yyval.raw) = merge_raw_data_int((yyvsp[-2].raw), (yyvsp[0].num)); ;} - break; - - case 235: -#line 1797 "parser.y" - { (yyval.raw) = merge_raw_data_int((yyvsp[-3].raw), -((yyvsp[0].num))); ;} - break; - - case 236: -#line 1798 "parser.y" - { (yyval.raw) = merge_raw_data_long((yyvsp[-2].raw), (yyvsp[0].num)); ;} - break; - - case 237: -#line 1799 "parser.y" - { (yyval.raw) = merge_raw_data_long((yyvsp[-3].raw), -((yyvsp[0].num))); ;} - break; - - case 238: -#line 1800 "parser.y" - { (yyval.raw) = merge_raw_data_str((yyvsp[-2].raw), (yyvsp[0].str)); ;} - break; - - case 239: -#line 1804 "parser.y" - { (yyval.raw) = load_file((yyvsp[0].str),dup_language(currentlanguage)); ;} - break; - - case 240: -#line 1805 "parser.y" - { (yyval.raw) = (yyvsp[0].raw); ;} - break; - - case 241: -#line 1812 "parser.y" - { (yyval.iptr) = 0; ;} - break; - - case 242: -#line 1813 "parser.y" - { (yyval.iptr) = new_int((yyvsp[0].num)); ;} - break; - - case 243: -#line 1817 "parser.y" - { (yyval.num) = ((yyvsp[0].num)); ;} - break; - - case 244: -#line 1820 "parser.y" - { (yyval.num) = ((yyvsp[-2].num)) + ((yyvsp[0].num)); ;} - break; - - case 245: -#line 1821 "parser.y" - { (yyval.num) = ((yyvsp[-2].num)) - ((yyvsp[0].num)); ;} - break; - - case 246: -#line 1822 "parser.y" - { (yyval.num) = ((yyvsp[-2].num)) | ((yyvsp[0].num)); ;} - break; - - case 247: -#line 1823 "parser.y" - { (yyval.num) = ((yyvsp[-2].num)) & ((yyvsp[0].num)); ;} - break; - - case 248: -#line 1824 "parser.y" - { (yyval.num) = ((yyvsp[-2].num)) * ((yyvsp[0].num)); ;} - break; - - case 249: -#line 1825 "parser.y" - { (yyval.num) = ((yyvsp[-2].num)) / ((yyvsp[0].num)); ;} - break; - - case 250: -#line 1826 "parser.y" - { (yyval.num) = ((yyvsp[-2].num)) ^ ((yyvsp[0].num)); ;} - break; - - case 251: -#line 1827 "parser.y" - { (yyval.num) = ~((yyvsp[0].num)); ;} - break; - - case 252: -#line 1828 "parser.y" - { (yyval.num) = -((yyvsp[0].num)); ;} - break; - - case 253: -#line 1829 "parser.y" - { (yyval.num) = (yyvsp[0].num); ;} - break; - - case 254: -#line 1830 "parser.y" - { (yyval.num) = (yyvsp[-1].num); ;} - break; - - case 255: -#line 1831 "parser.y" - { (yyval.num) = (yyvsp[0].num); ;} - break; - - case 256: -#line 1832 "parser.y" - { (yyval.num) = ~((yyvsp[0].num)); ;} - break; - - case 257: -#line 1835 "parser.y" - { (yyval.num) = (yyvsp[0].num); ;} - break; - - case 258: -#line 1836 "parser.y" - { (yyval.num) = (yyvsp[0].num); ;} - break; - - - default: break; - } - -/* Line 1126 of yacc.c. */ -#line 4265 "parser.tab.c" - - yyvsp -= yylen; - yyssp -= yylen; - - - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - char *yymsg = 0; -# define YYERROR_VERBOSE_ARGS_MAXIMUM 5 - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; - -#if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -#endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= yysize1 < yysize; - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } - - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= yysize1 < yysize; - yysize = yysize1; - - if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM) - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yymsg; - int yyi = 0; - while ((*yyp = *yyf)) - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - { - yyerror (YY_("syntax error")); - goto yyexhaustedlab; - } - } - else -#endif /* YYERROR_VERBOSE */ - yyerror (YY_("syntax error")); - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse look-ahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse look-ahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (0) - goto yyerrorlab; - -yyvsp -= yylen; - yyssp -= yylen; - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", yystos[yystate], yyvsp); - YYPOPSTACK; - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - if (yyn == YYFINAL) - YYACCEPT; - - *++yyvsp = yylval; - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK; - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - return yyresult; -} - - -#line 1839 "parser.y" - -/* Dialog specific functions */ -static dialog_t *dialog_style(style_t * st, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->style == NULL) - { - dlg->style = new_style(0,0); - } - - if(dlg->gotstyle) - { - parser_warning("Style already defined, or-ing together\n"); - } - else - { - dlg->style->or_mask = 0; - dlg->style->and_mask = 0; - } - dlg->style->or_mask |= st->or_mask; - dlg->style->and_mask |= st->and_mask; - dlg->gotstyle = TRUE; - free(st); - return dlg; -} - -static dialog_t *dialog_exstyle(style_t *st, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->exstyle == NULL) - { - dlg->exstyle = new_style(0,0); - } - - if(dlg->gotexstyle) - { - parser_warning("ExStyle already defined, or-ing together\n"); - } - else - { - dlg->exstyle->or_mask = 0; - dlg->exstyle->and_mask = 0; - } - dlg->exstyle->or_mask |= st->or_mask; - dlg->exstyle->and_mask |= st->and_mask; - dlg->gotexstyle = TRUE; - free(st); - return dlg; -} - -static dialog_t *dialog_caption(string_t *s, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->title) - parser_error("Caption already defined\n"); - dlg->title = s; - return dlg; -} - -static dialog_t *dialog_font(font_id_t *f, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->font) - parser_error("Font already defined\n"); - dlg->font = f; - return dlg; -} - -static dialog_t *dialog_class(name_id_t *n, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->dlgclass) - parser_error("Class already defined\n"); - dlg->dlgclass = n; - return dlg; -} - -static dialog_t *dialog_menu(name_id_t *m, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->menu) - yyerror("Menu already defined"); - dlg->menu = m; - return dlg; -} - -static dialog_t *dialog_language(language_t *l, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->lvc.language) - yyerror("Language already defined"); - dlg->lvc.language = l; - return dlg; -} - -static dialog_t *dialog_characteristics(characts_t *c, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->lvc.characts) - yyerror("Characteristics already defined"); - dlg->lvc.characts = c; - return dlg; -} - -static dialog_t *dialog_version(version_t *v, dialog_t *dlg) -{ - assert(dlg != NULL); - if(dlg->lvc.version) - yyerror("Version already defined"); - dlg->lvc.version = v; - return dlg; -} - -/* Controls specific functions */ -static control_t *ins_ctrl(int type, int special_style, control_t *ctrl, control_t *prev) -{ - /* Hm... this seems to be jammed in at all time... */ - int defaultstyle = WS_CHILD | WS_VISIBLE; - - assert(ctrl != NULL); - ctrl->prev = prev; - - if(prev) - prev->next = ctrl; - - if(type != -1) - { - ctrl->ctlclass = new_name_id(); - ctrl->ctlclass->type = name_ord; - ctrl->ctlclass->name.i_name = type; - } - - switch(type) - { - case CT_BUTTON: - if(special_style != BS_GROUPBOX && special_style != BS_RADIOBUTTON) - defaultstyle |= WS_TABSTOP; - break; - case CT_EDIT: - defaultstyle |= WS_TABSTOP | WS_BORDER; - break; - case CT_LISTBOX: - defaultstyle |= LBS_NOTIFY | WS_BORDER; - break; - case CT_COMBOBOX: - if (!(ctrl->style->or_mask & (CBS_SIMPLE | CBS_DROPDOWN | CBS_DROPDOWNLIST))) - defaultstyle |= CBS_SIMPLE; - break; - case CT_STATIC: - if(special_style == SS_CENTER || special_style == SS_LEFT || special_style == SS_RIGHT) - defaultstyle |= WS_GROUP; - break; - } - - if(!ctrl->gotstyle) /* Handle default style setting */ - { - switch(type) - { - case CT_EDIT: - defaultstyle |= ES_LEFT; - break; - case CT_LISTBOX: - defaultstyle |= LBS_NOTIFY; - break; - case CT_COMBOBOX: - defaultstyle |= CBS_SIMPLE | WS_TABSTOP; - break; - case CT_SCROLLBAR: - defaultstyle |= SBS_HORZ; - break; - case CT_BUTTON: - switch(special_style) - { - case BS_CHECKBOX: - case BS_DEFPUSHBUTTON: - case BS_PUSHBUTTON: -/* case BS_PUSHBOX: */ - case BS_AUTORADIOBUTTON: - case BS_AUTO3STATE: - case BS_3STATE: - case BS_AUTOCHECKBOX: - defaultstyle |= WS_TABSTOP; - break; - default: - parser_warning("Unknown default button control-style 0x%08x\n", special_style); - case BS_GROUPBOX: - case BS_RADIOBUTTON: - break; - } - break; - - case CT_STATIC: - switch(special_style) - { - case SS_LEFT: - case SS_RIGHT: - case SS_CENTER: - defaultstyle |= WS_GROUP; - break; - case SS_ICON: /* Special case */ - break; - default: - parser_warning("Unknown default static control-style 0x%08x\n", special_style); - break; - } - break; - case -1: /* Generic control */ - goto byebye; - - default: - yyerror("Internal error (report this): Got weird control type 0x%08x", type); - } - } - - /* The SS_ICON flag is always forced in for icon controls */ - if(type == CT_STATIC && special_style == SS_ICON) - defaultstyle |= SS_ICON; - - if (!ctrl->gotstyle) - ctrl->style = new_style(0,0); - - /* combine all styles */ - ctrl->style->or_mask = ctrl->style->or_mask | defaultstyle | special_style; - ctrl->gotstyle = TRUE; -byebye: - /* combine with NOT mask */ - if (ctrl->gotstyle) - { - ctrl->style->or_mask &= ~(ctrl->style->and_mask); - ctrl->style->and_mask = 0; - } - if (ctrl->gotexstyle) - { - ctrl->exstyle->or_mask &= ~(ctrl->exstyle->and_mask); - ctrl->exstyle->and_mask = 0; - } - return ctrl; -} - -static name_id_t *convert_ctlclass(name_id_t *cls) -{ - char *cc = NULL; - int iclass; - - if(cls->type == name_ord) - return cls; - assert(cls->type == name_str); - if(cls->type == str_unicode) - { - yyerror("Don't yet support unicode class comparison"); - } - else - cc = cls->name.s_name->str.cstr; - - if(!strcasecmp("BUTTON", cc)) - iclass = CT_BUTTON; - else if(!strcasecmp("COMBOBOX", cc)) - iclass = CT_COMBOBOX; - else if(!strcasecmp("LISTBOX", cc)) - iclass = CT_LISTBOX; - else if(!strcasecmp("EDIT", cc)) - iclass = CT_EDIT; - else if(!strcasecmp("STATIC", cc)) - iclass = CT_STATIC; - else if(!strcasecmp("SCROLLBAR", cc)) - iclass = CT_SCROLLBAR; - else - return cls; /* No default, return user controlclass */ - - free(cls->name.s_name->str.cstr); - free(cls->name.s_name); - cls->type = name_ord; - cls->name.i_name = iclass; - return cls; -} - -/* DialogEx specific functions */ -static dialogex_t *dialogex_style(style_t * st, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->style == NULL) - { - dlg->style = new_style(0,0); - } - - if(dlg->gotstyle) - { - parser_warning("Style already defined, or-ing together\n"); - } - else - { - dlg->style->or_mask = 0; - dlg->style->and_mask = 0; - } - dlg->style->or_mask |= st->or_mask; - dlg->style->and_mask |= st->and_mask; - dlg->gotstyle = TRUE; - free(st); - return dlg; -} - -static dialogex_t *dialogex_exstyle(style_t * st, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->exstyle == NULL) - { - dlg->exstyle = new_style(0,0); - } - - if(dlg->gotexstyle) - { - parser_warning("ExStyle already defined, or-ing together\n"); - } - else - { - dlg->exstyle->or_mask = 0; - dlg->exstyle->and_mask = 0; - } - dlg->exstyle->or_mask |= st->or_mask; - dlg->exstyle->and_mask |= st->and_mask; - dlg->gotexstyle = TRUE; - free(st); - return dlg; -} - -static dialogex_t *dialogex_caption(string_t *s, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->title) - yyerror("Caption already defined"); - dlg->title = s; - return dlg; -} - -static dialogex_t *dialogex_font(font_id_t *f, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->font) - yyerror("Font already defined"); - dlg->font = f; - return dlg; -} - -static dialogex_t *dialogex_class(name_id_t *n, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->dlgclass) - yyerror("Class already defined"); - dlg->dlgclass = n; - return dlg; -} - -static dialogex_t *dialogex_menu(name_id_t *m, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->menu) - yyerror("Menu already defined"); - dlg->menu = m; - return dlg; -} - -static dialogex_t *dialogex_language(language_t *l, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->lvc.language) - yyerror("Language already defined"); - dlg->lvc.language = l; - return dlg; -} - -static dialogex_t *dialogex_characteristics(characts_t *c, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->lvc.characts) - yyerror("Characteristics already defined"); - dlg->lvc.characts = c; - return dlg; -} - -static dialogex_t *dialogex_version(version_t *v, dialogex_t *dlg) -{ - assert(dlg != NULL); - if(dlg->lvc.version) - yyerror("Version already defined"); - dlg->lvc.version = v; - return dlg; -} - -/* Accelerator specific functions */ -static event_t *add_event(int key, int id, int flags, event_t *prev) -{ - event_t *ev = new_event(); - - if((flags & (WRC_AF_VIRTKEY | WRC_AF_ASCII)) == (WRC_AF_VIRTKEY | WRC_AF_ASCII)) - yyerror("Cannot use both ASCII and VIRTKEY"); - - ev->key = key; - ev->id = id; - ev->flags = flags & ~WRC_AF_ASCII; - ev->prev = prev; - if(prev) - prev->next = ev; - return ev; -} - -static event_t *add_string_event(string_t *key, int id, int flags, event_t *prev) -{ - int keycode = 0, keysym = 0; - event_t *ev = new_event(); - - if(key->type == str_char) - keysym = key->str.cstr[0]; - else - keysym = key->str.wstr[0]; - - if((flags & WRC_AF_VIRTKEY) && (!isupper(keysym & 0xff) && !isdigit(keysym & 0xff))) - yyerror("VIRTKEY code is not equal to ascii value"); - - if(keysym == '^' && (flags & WRC_AF_CONTROL) != 0) - { - yyerror("Cannot use both '^' and CONTROL modifier"); - } - else if(keysym == '^') - { - if(key->type == str_char) - keycode = toupper(key->str.cstr[1]) - '@'; - else - keycode = toupper(key->str.wstr[1]) - '@'; - if(keycode >= ' ') - yyerror("Control-code out of range"); - } - else - keycode = keysym; - ev->key = keycode; - ev->id = id; - ev->flags = flags & ~WRC_AF_ASCII; - ev->prev = prev; - if(prev) - prev->next = ev; - return ev; -} - -/* MenuEx specific functions */ -static itemex_opt_t *new_itemex_opt(int id, int type, int state, int helpid) -{ - itemex_opt_t *opt = xmalloc(sizeof(itemex_opt_t)); - memset( opt, 0, sizeof(*opt) ); - opt->id = id; - opt->type = type; - opt->state = state; - opt->helpid = helpid; - return opt; -} - -/* Raw data functions */ -static raw_data_t *load_file(string_t *filename, language_t *lang) -{ - FILE *fp = NULL; - char *path; - raw_data_t *rd; - string_t *name; - int codepage = get_language_codepage(lang->id, lang->sub); - - /* FIXME: we may want to use utf-8 here */ - if (codepage <= 0 && filename->type != str_char) - yyerror("Cannot convert filename to ASCII string"); - name = convert_string( filename, str_char, codepage ); - if (!(path = wpp_find_include(name->str.cstr, input_name))) - yyerror("Cannot open file %s", name->str.cstr); - if (!(fp = fopen( path, "rb" ))) - yyerror("Cannot open file %s", name->str.cstr); - free( path ); - rd = new_raw_data(); - fseek(fp, 0, SEEK_END); - rd->size = ftell(fp); - fseek(fp, 0, SEEK_SET); - if (rd->size) - { - rd->data = xmalloc(rd->size); - fread(rd->data, rd->size, 1, fp); - } - else rd->data = NULL; - fclose(fp); - rd->lvc.language = lang; - free_string(name); - return rd; -} - -static raw_data_t *int2raw_data(int i) -{ - raw_data_t *rd; - - if( ( i >= 0 && (int)((unsigned short)i) != i) || - ( i < 0 && (int)((short)i) != i) ) - parser_warning("Integer constant out of 16bit range (%d), truncated to %d\n", i, (short)i); - - rd = new_raw_data(); - rd->size = sizeof(short); - rd->data = xmalloc(rd->size); - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - rd->data[0] = HIBYTE(i); - rd->data[1] = LOBYTE(i); - break; - -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - rd->data[1] = HIBYTE(i); - rd->data[0] = LOBYTE(i); - break; - } - return rd; -} - -static raw_data_t *long2raw_data(int i) -{ - raw_data_t *rd; - rd = new_raw_data(); - rd->size = sizeof(int); - rd->data = xmalloc(rd->size); - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - rd->data[0] = HIBYTE(HIWORD(i)); - rd->data[1] = LOBYTE(HIWORD(i)); - rd->data[2] = HIBYTE(LOWORD(i)); - rd->data[3] = LOBYTE(LOWORD(i)); - break; - -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - rd->data[3] = HIBYTE(HIWORD(i)); - rd->data[2] = LOBYTE(HIWORD(i)); - rd->data[1] = HIBYTE(LOWORD(i)); - rd->data[0] = LOBYTE(LOWORD(i)); - break; - } - return rd; -} - -static raw_data_t *str2raw_data(string_t *str) -{ - raw_data_t *rd; - rd = new_raw_data(); - rd->size = str->size * (str->type == str_char ? 1 : 2); - rd->data = xmalloc(rd->size); - if(str->type == str_char) - memcpy(rd->data, str->str.cstr, rd->size); - else if(str->type == str_unicode) - { - int i; - switch(byteorder) - { -#ifdef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_BIG: - for(i = 0; i < str->size; i++) - { - rd->data[2*i + 0] = HIBYTE((WORD)str->str.wstr[i]); - rd->data[2*i + 1] = LOBYTE((WORD)str->str.wstr[i]); - } - break; -#ifndef WORDS_BIGENDIAN - default: -#endif - case WRC_BO_LITTLE: - for(i = 0; i < str->size; i++) - { - rd->data[2*i + 1] = HIBYTE((WORD)str->str.wstr[i]); - rd->data[2*i + 0] = LOBYTE((WORD)str->str.wstr[i]); - } - break; - } - } - else - internal_error(__FILE__, __LINE__, "Invalid stringtype\n"); - return rd; -} - -static raw_data_t *merge_raw_data(raw_data_t *r1, raw_data_t *r2) -{ - r1->data = xrealloc(r1->data, r1->size + r2->size); - memcpy(r1->data + r1->size, r2->data, r2->size); - r1->size += r2->size; - return r1; -} - -static raw_data_t *merge_raw_data_int(raw_data_t *r1, int i) -{ - raw_data_t *t = int2raw_data(i); - merge_raw_data(r1, t); - free(t->data); - free(t); - return r1; -} - -static raw_data_t *merge_raw_data_long(raw_data_t *r1, int i) -{ - raw_data_t *t = long2raw_data(i); - merge_raw_data(r1, t); - free(t->data); - free(t); - return r1; -} - -static raw_data_t *merge_raw_data_str(raw_data_t *r1, string_t *str) -{ - raw_data_t *t = str2raw_data(str); - merge_raw_data(r1, t); - free(t->data); - free(t); - return r1; -} - -/* Function the go back in a list to get the head */ -static menu_item_t *get_item_head(menu_item_t *p) -{ - if(!p) - return NULL; - while(p->prev) - p = p->prev; - return p; -} - -static menuex_item_t *get_itemex_head(menuex_item_t *p) -{ - if(!p) - return NULL; - while(p->prev) - p = p->prev; - return p; -} - -static resource_t *get_resource_head(resource_t *p) -{ - if(!p) - return NULL; - while(p->prev) - p = p->prev; - return p; -} - -static ver_block_t *get_ver_block_head(ver_block_t *p) -{ - if(!p) - return NULL; - while(p->prev) - p = p->prev; - return p; -} - -static ver_value_t *get_ver_value_head(ver_value_t *p) -{ - if(!p) - return NULL; - while(p->prev) - p = p->prev; - return p; -} - -static control_t *get_control_head(control_t *p) -{ - if(!p) - return NULL; - while(p->prev) - p = p->prev; - return p; -} - -static event_t *get_event_head(event_t *p) -{ - if(!p) - return NULL; - while(p->prev) - p = p->prev; - return p; -} - -/* Find a stringtable with given language */ -static stringtable_t *find_stringtable(lvc_t *lvc) -{ - stringtable_t *stt; - - assert(lvc != NULL); - - if(!lvc->language) - lvc->language = dup_language(currentlanguage); - - for(stt = sttres; stt; stt = stt->next) - { - if(stt->lvc.language->id == lvc->language->id - && stt->lvc.language->sub == lvc->language->sub) - { - /* Found a table with the same language */ - /* The version and characteristics are now handled - * in the generation of the individual stringtables. - * This enables localized analysis. - if((stt->lvc.version && lvc->version && *(stt->lvc.version) != *(lvc->version)) - || (!stt->lvc.version && lvc->version) - || (stt->lvc.version && !lvc->version)) - parser_warning("Stringtable's versions are not the same, using first definition\n"); - - if((stt->lvc.characts && lvc->characts && *(stt->lvc.characts) != *(lvc->characts)) - || (!stt->lvc.characts && lvc->characts) - || (stt->lvc.characts && !lvc->characts)) - parser_warning("Stringtable's characteristics are not the same, using first definition\n"); - */ - return stt; - } - } - return NULL; -} - -/* qsort sorting function for string table entries */ -#define STE(p) ((const stt_entry_t *)(p)) -static int sort_stt_entry(const void *e1, const void *e2) -{ - return STE(e1)->id - STE(e2)->id; -} -#undef STE - -static resource_t *build_stt_resources(stringtable_t *stthead) -{ - stringtable_t *stt; - stringtable_t *newstt; - resource_t *rsc; - resource_t *rsclist = NULL; - resource_t *rsctail = NULL; - int i; - int j; - DWORD andsum; - DWORD orsum; - characts_t *characts; - version_t *version; - - if(!stthead) - return NULL; - - /* For all languages defined */ - for(stt = stthead; stt; stt = stt->next) - { - assert(stt->nentries > 0); - - /* Sort the entries */ - if(stt->nentries > 1) - qsort(stt->entries, stt->nentries, sizeof(stt->entries[0]), sort_stt_entry); - - for(i = 0; i < stt->nentries; ) - { - newstt = new_stringtable(&stt->lvc); - newstt->entries = xmalloc(16 * sizeof(stt_entry_t)); - memset( newstt->entries, 0, 16 * sizeof(stt_entry_t) ); - newstt->nentries = 16; - newstt->idbase = stt->entries[i].id & ~0xf; - for(j = 0; j < 16 && i < stt->nentries; j++) - { - if(stt->entries[i].id - newstt->idbase == j) - { - newstt->entries[j] = stt->entries[i]; - i++; - } - } - andsum = ~0; - orsum = 0; - characts = NULL; - version = NULL; - /* Check individual memory options and get - * the first characteristics/version - */ - for(j = 0; j < 16; j++) - { - if(!newstt->entries[j].str) - continue; - andsum &= newstt->entries[j].memopt; - orsum |= newstt->entries[j].memopt; - if(!characts) - characts = newstt->entries[j].characts; - if(!version) - version = newstt->entries[j].version; - } - if(andsum != orsum) - { - warning("Stringtable's memory options are not equal (idbase: %d)\n", newstt->idbase); - } - /* Check version and characteristics */ - for(j = 0; j < 16; j++) - { - if(characts - && newstt->entries[j].characts - && *newstt->entries[j].characts != *characts) - warning("Stringtable's characteristics are not the same (idbase: %d)\n", newstt->idbase); - if(version - && newstt->entries[j].version - && *newstt->entries[j].version != *version) - warning("Stringtable's versions are not the same (idbase: %d)\n", newstt->idbase); - } - rsc = new_resource(res_stt, newstt, newstt->memopt, newstt->lvc.language); - rsc->name = new_name_id(); - rsc->name->type = name_ord; - rsc->name->name.i_name = (newstt->idbase >> 4) + 1; - rsc->memopt = andsum; /* Set to least common denominator */ - newstt->memopt = andsum; - newstt->lvc.characts = characts; - newstt->lvc.version = version; - if(!rsclist) - { - rsclist = rsc; - rsctail = rsc; - } - else - { - rsctail->next = rsc; - rsc->prev = rsctail; - rsctail = rsc; - } - } - } - return rsclist; -} - - -static toolbar_item_t *ins_tlbr_button(toolbar_item_t *prev, toolbar_item_t *idrec) -{ - idrec->prev = prev; - if(prev) - prev->next = idrec; - - return idrec; -} - -static toolbar_item_t *get_tlbr_buttons_head(toolbar_item_t *p, int *nitems) -{ - if(!p) - { - *nitems = 0; - return NULL; - } - - *nitems = 1; - - while(p->prev) - { - (*nitems)++; - p = p->prev; - } - - return p; -} - -static string_t *make_filename(string_t *str) -{ - if(str->type == str_char) - { - char *cptr; - - /* Remove escaped backslash and convert to forward */ - for(cptr = str->str.cstr; (cptr = strchr(cptr, '\\')) != NULL; cptr++) - { - if(cptr[1] == '\\') - { - memmove(cptr, cptr+1, strlen(cptr)); - str->size--; - } - *cptr = '/'; - } - } - else - { - WCHAR *wptr; - - /* Remove escaped backslash and convert to forward */ - for(wptr = str->str.wstr; (wptr = strchrW(wptr, '\\')) != NULL; wptr++) - { - if(wptr[1] == '\\') - { - memmove(wptr, wptr+1, strlenW(wptr)); - str->size--; - } - *wptr = '/'; - } - } - return str; -} - -/* - * Process all resources to extract fonts and build - * a fontdir resource. - * - * Note: MS' resource compiler (build 1472) does not - * handle font resources with different languages. - * The fontdir is generated in the last active language - * and font identifiers must be unique across the entire - * source. - * This is not logical considering the localization - * constraints of all other resource types. MS has, - * most probably, never testet localized fonts. However, - * using fontresources is rare, so it might not occur - * in normal applications. - * Wine does require better localization because a lot - * of languages are coded into the same executable. - * Therefore, I will generate fontdirs for *each* - * localized set of fonts. - */ -static resource_t *build_fontdir(resource_t **fnt, int nfnt) -{ - static int once = 0; - if(!once) - { - warning("Need to parse fonts, not yet implemented (fnt: %p, nfnt: %d)\n", fnt, nfnt); - once++; - } - return NULL; -} - -static resource_t *build_fontdirs(resource_t *tail) -{ - resource_t *rsc; - resource_t *lst = NULL; - resource_t **fnt = NULL; /* List of all fonts */ - int nfnt = 0; - resource_t **fnd = NULL; /* List of all fontdirs */ - int nfnd = 0; - resource_t **lanfnt = NULL; - int nlanfnt = 0; - int i; - name_id_t nid; - string_t str; - int fntleft; - - nid.type = name_str; - nid.name.s_name = &str; - str.type = str_char; - str.str.cstr = xstrdup("FONTDIR"); - str.size = 7; - - /* Extract all fonts and fontdirs */ - for(rsc = tail; rsc; rsc = rsc->prev) - { - if(rsc->type == res_fnt) - { - nfnt++; - fnt = xrealloc(fnt, nfnt * sizeof(*fnt)); - fnt[nfnt-1] = rsc; - } - else if(rsc->type == res_fntdir) - { - nfnd++; - fnd = xrealloc(fnd, nfnd * sizeof(*fnd)); - fnd[nfnd-1] = rsc; - } - } - - /* Verify the name of the present fontdirs */ - for(i = 0; i < nfnd; i++) - { - if(compare_name_id(&nid, fnd[i]->name)) - { - warning("User supplied FONTDIR entry has an invalid name '%s', ignored\n", - get_nameid_str(fnd[i]->name)); - fnd[i] = NULL; - } - } - - /* Sanity check */ - if(nfnt == 0) - { - if(nfnd != 0) - warning("Found %d FONTDIR entries without any fonts present\n", nfnd); - goto clean; - } - - /* Copy space */ - lanfnt = xmalloc(nfnt * sizeof(*lanfnt)); - memset( lanfnt, 0, nfnt * sizeof(*lanfnt)); - - /* Get all fonts covered by fontdirs */ - for(i = 0; i < nfnd; i++) - { - int j; - WORD cnt; - int isswapped = 0; - - if(!fnd[i]) - continue; - for(j = 0; j < nfnt; j++) - { - if(!fnt[j]) - continue; - if(fnt[j]->lan->id == fnd[i]->lan->id && fnt[j]->lan->sub == fnd[i]->lan->sub) - { - lanfnt[nlanfnt] = fnt[j]; - nlanfnt++; - fnt[j] = NULL; - } - } - - cnt = *(WORD *)fnd[i]->res.fnd->data->data; - if(nlanfnt == cnt) - isswapped = 0; - else if(nlanfnt == BYTESWAP_WORD(cnt)) - isswapped = 1; - else - error("FONTDIR for language %d,%d has wrong count (%d, expected %d)\n", - fnd[i]->lan->id, fnd[i]->lan->sub, cnt, nlanfnt); -#ifdef WORDS_BIGENDIAN - if((byteorder == WRC_BO_LITTLE && !isswapped) || (byteorder != WRC_BO_LITTLE && isswapped)) -#else - if((byteorder == WRC_BO_BIG && !isswapped) || (byteorder != WRC_BO_BIG && isswapped)) -#endif - { - internal_error(__FILE__, __LINE__, "User supplied FONTDIR needs byteswapping\n"); - } - } - - /* We now have fonts left where we need to make a fontdir resource */ - for(i = fntleft = 0; i < nfnt; i++) - { - if(fnt[i]) - fntleft++; - } - while(fntleft) - { - /* Get fonts of same language in lanfnt[] */ - for(i = nlanfnt = 0; i < nfnt; i++) - { - if(fnt[i]) - { - if(!nlanfnt) - { - addlanfnt: - lanfnt[nlanfnt] = fnt[i]; - nlanfnt++; - fnt[i] = NULL; - fntleft--; - } - else if(fnt[i]->lan->id == lanfnt[0]->lan->id && fnt[i]->lan->sub == lanfnt[0]->lan->sub) - goto addlanfnt; - } - } - /* and build a fontdir */ - rsc = build_fontdir(lanfnt, nlanfnt); - if(rsc) - { - if(lst) - { - lst->next = rsc; - rsc->prev = lst; - } - lst = rsc; - } - } - - free(lanfnt); -clean: - free(fnt); - free(fnd); - free(str.str.cstr); - return lst; -} - -/* - * This gets invoked to determine whether the next resource - * is to be of a standard-type (e.g. bitmaps etc.), or should - * be a user-type resource. This function is required because - * there is the _possibility_ of a lookahead token in the - * parser, which is generated from the "expr" state in the - * "nameid" parsing. - * - * The general resource format is: - * - * - * The can either be tIDENT or "expr". The latter - * will always generate a lookahead, which is the of the - * resource to parse. Otherwise, we need to get a new token from - * the scanner to determine the next step. - * - * The problem arrises when is numerical. This case should - * map onto default resource-types and be parsed as such instead - * of being mapped onto user-type resources. - * - * The trick lies in the fact that yacc (bison) doesn't care about - * intermediate changes of the lookahead while reducing a rule. We - * simply replace the lookahead with a token that will result in - * a shift to the appropriate rule for the specific resource-type. - */ -static int rsrcid_to_token(int lookahead) -{ - int token; - const char *type = "?"; - - /* Get a token if we don't have one yet */ - if(lookahead == YYEMPTY) - lookahead = YYLEX; - - /* Only numbers are possibly interesting */ - switch(lookahead) - { - case tNUMBER: - case tLNUMBER: - break; - default: - return lookahead; - } - - token = lookahead; - - switch(yylval.num) - { - case WRC_RT_CURSOR: - type = "CURSOR"; - token = tCURSOR; - break; - case WRC_RT_ICON: - type = "ICON"; - token = tICON; - break; - case WRC_RT_BITMAP: - type = "BITMAP"; - token = tBITMAP; - break; - case WRC_RT_FONT: - type = "FONT"; - token = tFONT; - break; - case WRC_RT_FONTDIR: - type = "FONTDIR"; - token = tFONTDIR; - break; - case WRC_RT_RCDATA: - type = "RCDATA"; - token = tRCDATA; - break; - case WRC_RT_MESSAGETABLE: - type = "MESSAGETABLE"; - token = tMESSAGETABLE; - break; - case WRC_RT_DLGINIT: - type = "DLGINIT"; - token = tDLGINIT; - break; - case WRC_RT_ACCELERATOR: - type = "ACCELERATOR"; - token = tACCELERATORS; - break; - case WRC_RT_MENU: - type = "MENU"; - token = tMENU; - break; - case WRC_RT_DIALOG: - type = "DIALOG"; - token = tDIALOG; - break; - case WRC_RT_VERSION: - type = "VERSION"; - token = tVERSIONINFO; - break; - case WRC_RT_TOOLBAR: - type = "TOOLBAR"; - token = tTOOLBAR; - break; - case WRC_RT_HTML: - type = "HTML"; - token = tHTML; - break; - - case WRC_RT_STRING: - type = "STRINGTABLE"; - break; - - case WRC_RT_ANICURSOR: - case WRC_RT_ANIICON: - case WRC_RT_GROUP_CURSOR: - case WRC_RT_GROUP_ICON: - parser_warning("Usertype uses reserved type ID %d, which is auto-generated\n", yylval.num); - return lookahead; - - case WRC_RT_DLGINCLUDE: - case WRC_RT_PLUGPLAY: - case WRC_RT_VXD: - parser_warning("Usertype uses reserved type ID %d, which is not supported by wrc yet\n", yylval.num); - default: - return lookahead; - } - - return token; -} - diff --git a/reactos/tools/wrc/parser.tab.h b/reactos/tools/wrc/parser.tab.h deleted file mode 100644 index 6eeddcc86bb..00000000000 --- a/reactos/tools/wrc/parser.tab.h +++ /dev/null @@ -1,260 +0,0 @@ -/* A Bison parser, made by GNU Bison 2.1. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - 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, 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. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - tNL = 258, - tNUMBER = 259, - tLNUMBER = 260, - tSTRING = 261, - tIDENT = 262, - tFILENAME = 263, - tRAWDATA = 264, - tACCELERATORS = 265, - tBITMAP = 266, - tCURSOR = 267, - tDIALOG = 268, - tDIALOGEX = 269, - tMENU = 270, - tMENUEX = 271, - tMESSAGETABLE = 272, - tRCDATA = 273, - tVERSIONINFO = 274, - tSTRINGTABLE = 275, - tFONT = 276, - tFONTDIR = 277, - tICON = 278, - tHTML = 279, - tAUTO3STATE = 280, - tAUTOCHECKBOX = 281, - tAUTORADIOBUTTON = 282, - tCHECKBOX = 283, - tDEFPUSHBUTTON = 284, - tPUSHBUTTON = 285, - tRADIOBUTTON = 286, - tSTATE3 = 287, - tGROUPBOX = 288, - tCOMBOBOX = 289, - tLISTBOX = 290, - tSCROLLBAR = 291, - tCONTROL = 292, - tEDITTEXT = 293, - tRTEXT = 294, - tCTEXT = 295, - tLTEXT = 296, - tBLOCK = 297, - tVALUE = 298, - tSHIFT = 299, - tALT = 300, - tASCII = 301, - tVIRTKEY = 302, - tGRAYED = 303, - tCHECKED = 304, - tINACTIVE = 305, - tNOINVERT = 306, - tPURE = 307, - tIMPURE = 308, - tDISCARDABLE = 309, - tLOADONCALL = 310, - tPRELOAD = 311, - tFIXED = 312, - tMOVEABLE = 313, - tCLASS = 314, - tCAPTION = 315, - tCHARACTERISTICS = 316, - tEXSTYLE = 317, - tSTYLE = 318, - tVERSION = 319, - tLANGUAGE = 320, - tFILEVERSION = 321, - tPRODUCTVERSION = 322, - tFILEFLAGSMASK = 323, - tFILEOS = 324, - tFILETYPE = 325, - tFILEFLAGS = 326, - tFILESUBTYPE = 327, - tMENUBARBREAK = 328, - tMENUBREAK = 329, - tMENUITEM = 330, - tPOPUP = 331, - tSEPARATOR = 332, - tHELP = 333, - tTOOLBAR = 334, - tBUTTON = 335, - tBEGIN = 336, - tEND = 337, - tDLGINIT = 338, - tNOT = 339, - pUPM = 340 - }; -#endif -/* Tokens. */ -#define tNL 258 -#define tNUMBER 259 -#define tLNUMBER 260 -#define tSTRING 261 -#define tIDENT 262 -#define tFILENAME 263 -#define tRAWDATA 264 -#define tACCELERATORS 265 -#define tBITMAP 266 -#define tCURSOR 267 -#define tDIALOG 268 -#define tDIALOGEX 269 -#define tMENU 270 -#define tMENUEX 271 -#define tMESSAGETABLE 272 -#define tRCDATA 273 -#define tVERSIONINFO 274 -#define tSTRINGTABLE 275 -#define tFONT 276 -#define tFONTDIR 277 -#define tICON 278 -#define tHTML 279 -#define tAUTO3STATE 280 -#define tAUTOCHECKBOX 281 -#define tAUTORADIOBUTTON 282 -#define tCHECKBOX 283 -#define tDEFPUSHBUTTON 284 -#define tPUSHBUTTON 285 -#define tRADIOBUTTON 286 -#define tSTATE3 287 -#define tGROUPBOX 288 -#define tCOMBOBOX 289 -#define tLISTBOX 290 -#define tSCROLLBAR 291 -#define tCONTROL 292 -#define tEDITTEXT 293 -#define tRTEXT 294 -#define tCTEXT 295 -#define tLTEXT 296 -#define tBLOCK 297 -#define tVALUE 298 -#define tSHIFT 299 -#define tALT 300 -#define tASCII 301 -#define tVIRTKEY 302 -#define tGRAYED 303 -#define tCHECKED 304 -#define tINACTIVE 305 -#define tNOINVERT 306 -#define tPURE 307 -#define tIMPURE 308 -#define tDISCARDABLE 309 -#define tLOADONCALL 310 -#define tPRELOAD 311 -#define tFIXED 312 -#define tMOVEABLE 313 -#define tCLASS 314 -#define tCAPTION 315 -#define tCHARACTERISTICS 316 -#define tEXSTYLE 317 -#define tSTYLE 318 -#define tVERSION 319 -#define tLANGUAGE 320 -#define tFILEVERSION 321 -#define tPRODUCTVERSION 322 -#define tFILEFLAGSMASK 323 -#define tFILEOS 324 -#define tFILETYPE 325 -#define tFILEFLAGS 326 -#define tFILESUBTYPE 327 -#define tMENUBARBREAK 328 -#define tMENUBREAK 329 -#define tMENUITEM 330 -#define tPOPUP 331 -#define tSEPARATOR 332 -#define tHELP 333 -#define tTOOLBAR 334 -#define tBUTTON 335 -#define tBEGIN 336 -#define tEND 337 -#define tDLGINIT 338 -#define tNOT 339 -#define pUPM 340 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 237 "parser.y" -typedef union YYSTYPE { - string_t *str; - int num; - int *iptr; - char *cptr; - resource_t *res; - accelerator_t *acc; - bitmap_t *bmp; - dialog_t *dlg; - dialogex_t *dlgex; - font_t *fnt; - fontdir_t *fnd; - menu_t *men; - menuex_t *menex; - html_t *html; - rcdata_t *rdt; - stringtable_t *stt; - stt_entry_t *stte; - user_t *usr; - messagetable_t *msg; - versioninfo_t *veri; - control_t *ctl; - name_id_t *nid; - font_id_t *fntid; - language_t *lan; - version_t *ver; - characts_t *chars; - event_t *event; - menu_item_t *menitm; - menuex_item_t *menexitm; - itemex_opt_t *exopt; - raw_data_t *raw; - lvc_t *lvc; - ver_value_t *val; - ver_block_t *blk; - ver_words_t *verw; - toolbar_t *tlbar; - toolbar_item_t *tlbarItems; - dlginit_t *dginit; - style_pair_t *styles; - style_t *style; - ani_any_t *ani; -} YYSTYPE; -/* Line 1447 of yacc.c. */ -#line 252 "parser.tab.h" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - -extern YYSTYPE parser_lval; - - - diff --git a/reactos/tools/wrc/parser.y b/reactos/tools/wrc/parser.y deleted file mode 100644 index 63c63a12a19..00000000000 --- a/reactos/tools/wrc/parser.y +++ /dev/null @@ -1,3031 +0,0 @@ -%{ -/* - * Copyright 1994 Martin von Loewis - * Copyright 1998-2000 Bertho A. Stultiens (BS) - * 1999 Juergen Schmied (JS) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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-Jul-2000 BS - Made a fix for broken Berkeley yacc on - * non-terminals (see cjunk rule). - * 21-May-2000 BS - Partial implementation of font resources. - * - Corrected language propagation for binary - * resources such as bitmaps, icons, cursors, - * userres and rcdata. The language is now - * correct in .res files. - * - Fixed reading the resource name as ident, - * so that it may overlap keywords. - * 20-May-2000 BS - Implemented animated cursors and icons - * resource types. - * 30-Apr-2000 BS - Reintegration into the wine-tree - * 14-Jan-2000 BS - Redid the usertype resources so that they - * are compatible. - * 02-Jan-2000 BS - Removed the preprocessor from the grammar - * except for the # command (line numbers). - * - * 06-Nov-1999 JS - see CHANGES - * - * 29-Dec-1998 AdH - Grammar and function extensions. - * grammar: TOOLBAR resources, Named ICONs in - * DIALOGS - * functions: semantic actions for the grammar - * changes, resource files can now be anywhere - * on the include path instead of just in the - * current directory - * - * 20-Jun-1998 BS - Fixed a bug in load_file() where the name was not - * printed out correctly. - * - * 17-Jun-1998 BS - Fixed a bug in CLASS statement parsing which should - * also accept a tSTRING as argument. - * - * 25-May-1998 BS - Found out that I need to support language, version - * and characteristics in inline resources (bitmap, - * cursor, etc) but they can also be specified with - * a filename. This renders my filename-scanning scheme - * worthless. Need to build newline parsing to solve - * this one. - * It will come with version 1.1.0 (sigh). - * - * 19-May-1998 BS - Started to build a builtin preprocessor - * - * 30-Apr-1998 BS - Redid the stringtable parsing/handling. My previous - * ideas had some serious flaws. - * - * 27-Apr-1998 BS - Removed a lot of dead comments and put it in a doc - * file. - * - * 21-Apr-1998 BS - Added correct behavior for cursors and icons. - * - This file is growing too big. It is time to strip - * things and put it in a support file. - * - * 19-Apr-1998 BS - Tagged the stringtable resource so that only one - * resource will be created. This because the table - * has a different layout than other resources. The - * table has to be sorted, and divided into smaller - * resource entries (see comment in source). - * - * 17-Apr-1998 BS - Almost all strings, including identifiers, are parsed - * as string_t which include unicode strings upon - * input. - * - Parser now emits a warning when compiling win32 - * extensions in win16 mode. - * - * 16-Apr-1998 BS - Raw data elements are now *optionally* separated - * by commas. Read the comments in file sq2dq.l. - * - FIXME: there are instances in the source that rely - * on the fact that int==32bit and pointers are int size. - * - Fixed the conflict in menuex by changing a rule - * back into right recursion. See note in source. - * - UserType resources cannot have an expression as its - * typeclass. See note in source. - * - * 15-Apr-1998 BS - Changed all right recursion into left recursion to - * get reduction of the parsestack. - * This also helps communication between bison and flex. - * Main advantage is that the Empty rule gets reduced - * first, which is used to allocate/link things. - * It also added a shift/reduce conflict in the menuex - * handling, due to expression/option possibility, - * although not serious. - * - * 14-Apr-1998 BS - Redone almost the entire parser. We're not talking - * about making it more efficient, but readable (for me) - * and slightly easier to expand/change. - * This is done primarily by using more reduce states - * with many (intuitive) types for the various resource - * statements. - * - Added expression handling for all resources where a - * number is accepted (not only for win32). Also added - * multiply and division (not MS compatible, but handy). - * Unary minus introduced a shift/reduce conflict, but - * it is not serious. - * - * 13-Apr-1998 BS - Reordered a lot of things - * - Made the source more readable - * - Added Win32 resource definitions - * - Corrected syntax problems with an old yacc (;) - * - Added extra comment about grammar - */ -#include "config.h" -#include "wine/port.h" - -#include -#include -#include -#include -#include -#include -#ifdef HAVE_ALLOCA_H -#include -#endif - -#include "wrc.h" -#include "utils.h" -#include "newstruc.h" -#include "dumpres.h" -#include "wine/wpp.h" -#include "wine/unicode.h" -#include "parser.h" - -#if defined(YYBYACC) - /* Berkeley yacc (byacc) doesn't seem to know about these */ - /* Some *BSD supplied versions do define these though */ -# ifndef YYEMPTY -# define YYEMPTY (-1) /* Empty lookahead value of yychar */ -# endif -# ifndef YYLEX -# define YYLEX yylex() -# endif - -#elif defined(YYBISON) - /* Bison was used for original development */ - /* #define YYEMPTY -2 */ - /* #define YYLEX yylex() */ - -#else - /* No yacc we know yet */ -# if !defined(YYEMPTY) || !defined(YYLEX) -# error Yacc version/type unknown. This version needs to be verified for settings of YYEMPTY and YYLEX. -# elif defined(__GNUC__) /* gcc defines the #warning directive */ -# warning Yacc version/type unknown. It defines YYEMPTY and YYLEX, but is not tested - /* #else we just take a chance that it works... */ -# endif -#endif - -int want_nl = 0; /* Signal flex that we need the next newline */ -int want_id = 0; /* Signal flex that we need the next identifier */ -stringtable_t *tagstt; /* Stringtable tag. - * It is set while parsing a stringtable to one of - * the stringtables in the sttres list or a new one - * if the language was not parsed before. - */ -stringtable_t *sttres; /* Stringtable resources. This holds the list of - * stringtables with different lanuages - */ -static int dont_want_id = 0; /* See language parsing for details */ - -/* Set to the current options of the currently scanning stringtable */ -static int *tagstt_memopt; -static characts_t *tagstt_characts; -static version_t *tagstt_version; - -static const char riff[4] = "RIFF"; /* RIFF file magic for animated cursor/icon */ - -/* Prototypes of here defined functions */ -static event_t *get_event_head(event_t *p); -static control_t *get_control_head(control_t *p); -static ver_value_t *get_ver_value_head(ver_value_t *p); -static ver_block_t *get_ver_block_head(ver_block_t *p); -static resource_t *get_resource_head(resource_t *p); -static menuex_item_t *get_itemex_head(menuex_item_t *p); -static menu_item_t *get_item_head(menu_item_t *p); -static raw_data_t *merge_raw_data_str(raw_data_t *r1, string_t *str); -static raw_data_t *merge_raw_data_int(raw_data_t *r1, int i); -static raw_data_t *merge_raw_data_long(raw_data_t *r1, int i); -static raw_data_t *merge_raw_data(raw_data_t *r1, raw_data_t *r2); -static raw_data_t *str2raw_data(string_t *str); -static raw_data_t *int2raw_data(int i); -static raw_data_t *long2raw_data(int i); -static raw_data_t *load_file(string_t *name, language_t *lang); -static itemex_opt_t *new_itemex_opt(int id, int type, int state, int helpid); -static event_t *add_string_event(string_t *key, int id, int flags, event_t *prev); -static event_t *add_event(int key, int id, int flags, event_t *prev); -static dialogex_t *dialogex_version(version_t *v, dialogex_t *dlg); -static dialogex_t *dialogex_characteristics(characts_t *c, dialogex_t *dlg); -static dialogex_t *dialogex_language(language_t *l, dialogex_t *dlg); -static dialogex_t *dialogex_menu(name_id_t *m, dialogex_t *dlg); -static dialogex_t *dialogex_class(name_id_t *n, dialogex_t *dlg); -static dialogex_t *dialogex_font(font_id_t *f, dialogex_t *dlg); -static dialogex_t *dialogex_caption(string_t *s, dialogex_t *dlg); -static dialogex_t *dialogex_exstyle(style_t *st, dialogex_t *dlg); -static dialogex_t *dialogex_style(style_t *st, dialogex_t *dlg); -static name_id_t *convert_ctlclass(name_id_t *cls); -static control_t *ins_ctrl(int type, int special_style, control_t *ctrl, control_t *prev); -static dialog_t *dialog_version(version_t *v, dialog_t *dlg); -static dialog_t *dialog_characteristics(characts_t *c, dialog_t *dlg); -static dialog_t *dialog_language(language_t *l, dialog_t *dlg); -static dialog_t *dialog_menu(name_id_t *m, dialog_t *dlg); -static dialog_t *dialog_class(name_id_t *n, dialog_t *dlg); -static dialog_t *dialog_font(font_id_t *f, dialog_t *dlg); -static dialog_t *dialog_caption(string_t *s, dialog_t *dlg); -static dialog_t *dialog_exstyle(style_t * st, dialog_t *dlg); -static dialog_t *dialog_style(style_t * st, dialog_t *dlg); -static resource_t *build_stt_resources(stringtable_t *stthead); -static stringtable_t *find_stringtable(lvc_t *lvc); -static toolbar_item_t *ins_tlbr_button(toolbar_item_t *prev, toolbar_item_t *idrec); -static toolbar_item_t *get_tlbr_buttons_head(toolbar_item_t *p, int *nitems); -static string_t *make_filename(string_t *s); -static resource_t *build_fontdirs(resource_t *tail); -static resource_t *build_fontdir(resource_t **fnt, int nfnt); -static int rsrcid_to_token(int lookahead); - -%} -%union{ - string_t *str; - int num; - int *iptr; - char *cptr; - resource_t *res; - accelerator_t *acc; - bitmap_t *bmp; - dialog_t *dlg; - dialogex_t *dlgex; - font_t *fnt; - fontdir_t *fnd; - menu_t *men; - menuex_t *menex; - html_t *html; - rcdata_t *rdt; - stringtable_t *stt; - stt_entry_t *stte; - user_t *usr; - messagetable_t *msg; - versioninfo_t *veri; - control_t *ctl; - name_id_t *nid; - font_id_t *fntid; - language_t *lan; - version_t *ver; - characts_t *chars; - event_t *event; - menu_item_t *menitm; - menuex_item_t *menexitm; - itemex_opt_t *exopt; - raw_data_t *raw; - lvc_t *lvc; - ver_value_t *val; - ver_block_t *blk; - ver_words_t *verw; - toolbar_t *tlbar; - toolbar_item_t *tlbarItems; - dlginit_t *dginit; - style_pair_t *styles; - style_t *style; - ani_any_t *ani; -} - -%token tNL -%token tNUMBER tLNUMBER -%token tSTRING tIDENT tFILENAME -%token tRAWDATA -%token tACCELERATORS tBITMAP tCURSOR tDIALOG tDIALOGEX tMENU tMENUEX tMESSAGETABLE -%token tRCDATA tVERSIONINFO tSTRINGTABLE tFONT tFONTDIR tICON tHTML -%token tAUTO3STATE tAUTOCHECKBOX tAUTORADIOBUTTON tCHECKBOX tDEFPUSHBUTTON -%token tPUSHBUTTON tRADIOBUTTON tSTATE3 /* PUSHBOX */ -%token tGROUPBOX tCOMBOBOX tLISTBOX tSCROLLBAR -%token tCONTROL tEDITTEXT -%token tRTEXT tCTEXT tLTEXT -%token tBLOCK tVALUE -%token tSHIFT tALT tASCII tVIRTKEY tGRAYED tCHECKED tINACTIVE tNOINVERT -%token tPURE tIMPURE tDISCARDABLE tLOADONCALL tPRELOAD tFIXED tMOVEABLE -%token tCLASS tCAPTION tCHARACTERISTICS tEXSTYLE tSTYLE tVERSION tLANGUAGE -%token tFILEVERSION tPRODUCTVERSION tFILEFLAGSMASK tFILEOS tFILETYPE tFILEFLAGS tFILESUBTYPE -%token tMENUBARBREAK tMENUBREAK tMENUITEM tPOPUP tSEPARATOR -%token tHELP -%token tTOOLBAR tBUTTON -%token tBEGIN tEND -%token tDLGINIT -%left '|' -%left '^' -%left '&' -%left '+' '-' -%left '*' '/' -%right '~' tNOT -%left pUPM - -%type resource_file resource resources resource_definition -%type stringtable strings -%type font -%type fontdir -%type accelerators -%type events -%type bitmap -%type cursor icon -%type dialog dlg_attributes -%type ctrls gen_ctrl lab_ctrl ctrl_desc iconinfo -%type helpid -%type dialogex dlgex_attribs -%type exctrls gen_exctrl lab_exctrl exctrl_desc -%type html -%type rcdata -%type raw_data raw_elements opt_data file_raw -%type versioninfo fix_version -%type ver_words -%type ver_blocks ver_block -%type ver_values ver_value -%type menu -%type item_definitions menu_body -%type menuex -%type itemex_definitions menuex_body -%type itemex_p_options itemex_options -%type messagetable -%type userres -%type item_options -%type nameid nameid_s ctlclass usertype -%type acc_opt acc accs -%type loadmemopts lamo lama -%type opt_font opt_exfont opt_expr -%type opt_lvc -%type opt_language -%type opt_characts -%type opt_version -%type expr xpr -%type e_expr -%type toolbar -%type toolbar_items -%type dlginit -%type optional_style_pair -%type any_num -%type \n" - "\n" - "\n"; -const char szTableHeader[] = ""; -const char szFileFooter[] = "
        FunctionStatusTests (all/passed/failed)Regressions
        "; - -void -OutputUsage(LPWSTR pszName) -{ - printf("\nUsage:\n\n"); - printf("%ls.exe - Perform individual test\n", pszName); - printf("%ls.exe all - Perform all tests\n", pszName); - printf("%ls.exe tests - List the valid test names\n", pszName); - printf("%ls.exe status - Create api status file\n", pszName); - printf("%ls.exe -r ... - Perform regression testing\n", pszName); - printf("\n"); -} - -BOOL -WriteFileHeader(HANDLE hFile, LPDWORD lpdwBytesWritten, LPWSTR pszModule) -{ - char szHeader[100]; - - WriteFile(hFile, szFileHeader1, strlen(szFileHeader1), lpdwBytesWritten, NULL); - sprintf(szHeader, "%ls Test results", pszModule); - WriteFile(hFile, szHeader, strlen(szHeader), lpdwBytesWritten, NULL); - WriteFile(hFile, szFileHeader2, strlen(szFileHeader2), lpdwBytesWritten, NULL); - - sprintf(szHeader, "

        Test results for %ls

        ", pszModule); - WriteFile(hFile, szHeader, strlen(szHeader), lpdwBytesWritten, NULL); - - WriteFile(hFile, szTableHeader, strlen(szTableHeader), lpdwBytesWritten, NULL); - - return TRUE; -} - -BOOL -WriteRow(HANDLE hFile, LPDWORD lpdwBytesWritten, LPWSTR pszFunction, PTESTINFO pti) -{ - char szLine[500]; - - sprintf(szLine, "%ls", pszFunction); - - switch(pti->nApiStatus) - { - case APISTATUS_NOT_FOUND: - strcat(szLine, "not found"); - break; - case APISTATUS_UNIMPLEMENTED: - strcat(szLine, "unimplemented"); - break; - case APISTATUS_ASSERTION_FAILED: - strcat(szLine, "assertion failed"); - break; - case APISTATUS_REGRESSION: - strcat(szLine, "Regression!"); - break; - case APISTATUS_NORMAL: - strcat(szLine, "Implemented"); - break; - } - - sprintf(szLine + strlen(szLine), "%d / %d / %d%d\n", - pti->passed+pti->failed, pti->passed, pti->failed, pti->rfailed); - - WriteFile(hFile, szLine, strlen(szLine), lpdwBytesWritten, NULL); - - return TRUE; -} - -int -TestMain(LPWSTR pszName, LPWSTR pszModule) -{ - INT argc, i, j; - LPWSTR *argv; - TESTINFO ti; - INT opassed, ofailed, orfailed; - BOOL bAll, bStatus; - HANDLE hFile = NULL; - DWORD dwBytesWritten; - - ti.bRegress = FALSE; - bAll = FALSE; - bStatus = FALSE; - opassed = ofailed = orfailed = 0; - - argv = CommandLineToArgvW(GetCommandLineW(), &argc); - - if (argc < 2) - { - OutputUsage(pszName); - return 0; - } - - /* Get options */ - for (i = 1; i < argc; i++) - { - if (_wcsicmp(argv[i], L"-r") == 0) - { - ti.bRegress = TRUE; - } - else if (_wcsicmp(argv[i], L"all") == 0) - { - bAll = TRUE; - } - else if (_wcsicmp(argv[i], L"status") == 0) - { - bAll = TRUE; - bStatus = TRUE; - } - else if (_wcsicmp(argv[i], L"tests") == 0) - { - /* List all the tests and exit */ - printf("Valid test names:\n\n"); - - for (i = 0; i < NumTests(); i++) - printf("%ls\n", TestList[i].Test); - - return 0; - } - } - - if (bStatus) - { - WCHAR szOutputFile[MAX_PATH]; - - ti.bRegress = TRUE; - wcscpy(szOutputFile, pszName); - wcscat(szOutputFile, L".html"); - hFile = CreateFileW(szOutputFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - if (hFile == INVALID_HANDLE_VALUE) - { - printf("Could not create output file.\n"); - return 0; - } - - WriteFileHeader(hFile, &dwBytesWritten, pszModule); - } - - for (i = 0; i < NumTests(); i++) - { - for (j = 1; j < argc; j++) - { - if (bAll || _wcsicmp(argv[j], TestList[i].Test) == 0) - { - ti.passed = 0; - ti.failed = 0; - ti.rfailed = 0; - if (!IsFunctionPresent(TestList[i].Test)) - { - printf("Function %ls was not found!\n", TestList[i].Test); - ti.nApiStatus = APISTATUS_NOT_FOUND; - } - else - { - printf("Executing test: %ls\n", TestList[i].Test); - ti.nApiStatus = TestList[i].Proc(&ti); - opassed += ti.passed; - ofailed += ti.failed; - orfailed += ti.rfailed; - printf(" tests: %d, passed: %d, failed: %d\n\n", ti.passed+ti.failed, ti.passed, ti.failed); - } - if (bStatus) - { - if (ti.rfailed > 0) - ti.nApiStatus = APISTATUS_REGRESSION; - WriteRow(hFile, &dwBytesWritten, TestList[i].Test, &ti); - } - break; - } - } - } - - printf("Overall:\n"); - printf(" tests: %d, passed: %d, failed: %d\n\n", opassed+ofailed, opassed, ofailed); - if (ti.bRegress) - { - printf(" regressions: %d\n", orfailed); - } - - if (bStatus) - { - WriteFile(hFile, szFileFooter, strlen(szFileFooter), &dwBytesWritten, NULL); - CloseHandle(hFile); - } - - if (ti.bRegress) - return ti.rfailed; - - return ti.failed; -} diff --git a/rostests/apitests/apitest.h b/rostests/apitests/apitest.h deleted file mode 100644 index 6900789c9a3..00000000000 --- a/rostests/apitests/apitest.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef _APITEST_H -#define _APITEST_H - -#include -#include -#include -#include - -#define APISTATUS_NORMAL 0 -#define APISTATUS_NOT_FOUND 1 -#define APISTATUS_UNIMPLEMENTED 2 -#define APISTATUS_ASSERTION_FAILED 3 -#define APISTATUS_REGRESSION 4 - -/* type definitions */ - -typedef struct tagTESTINFO -{ - INT passed; - INT failed; - INT rfailed; - BOOL bRegress; - INT nApiStatus; -} TESTINFO, *PTESTINFO; - -typedef INT (*TESTPROC)(PTESTINFO); - -typedef struct tagTEST -{ - WCHAR* Test; - TESTPROC Proc; -} TESTENTRY, *PTESTENTRY; - - -/* macros */ - -#define TEST(x) \ - if (pti->bRegress) \ - { \ - if (x)\ - {\ - (pti->passed)++;\ - printf("non-rtest succeeded in %s:%d (%s)\n", __FILE__, __LINE__, #x);\ - } else {\ - (pti->failed)++;\ - } \ - } \ - else \ - { \ - if (x)\ - {\ - (pti->passed)++;\ - } else {\ - (pti->failed)++;\ - printf("test failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\ - } \ - } - -#define RTEST(x) \ - if (pti->bRegress) \ - { \ - if (x)\ - {\ - (pti->passed)++;\ - } else {\ - (pti->failed)++;\ - (pti->rfailed)++;\ - printf("rtest failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\ - } \ - } \ - else \ - { \ - if (x)\ - {\ - (pti->passed)++;\ - } else {\ - (pti->failed)++;\ - printf("test failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\ - } \ - } - -#undef ASSERT -#define ASSERT(x) \ - if (!(x)) \ - { \ - printf("Assertion failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\ - return APISTATUS_ASSERTION_FAILED; \ - } - -int TestMain(LPWSTR pszExe, LPWSTR pszModule); -extern TESTENTRY TestList[]; -INT NumTests(void); -BOOL IsFunctionPresent(LPWSTR lpszFunction); - -#endif /* _APITEST_H */ diff --git a/rostests/apitests/dciman32api/dciman32api.c b/rostests/apitests/dciman32api/dciman32api.c deleted file mode 100644 index f01aa41a64d..00000000000 --- a/rostests/apitests/dciman32api/dciman32api.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "dciman32api.h" - -HINSTANCE g_hInstance; - -BOOL -IsFunctionPresent(LPWSTR lpszFunction) -{ - return TRUE; -} - -int APIENTRY -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nCmdShow) -{ - g_hInstance = hInstance; - return TestMain(L"dciman32api", L"dciman32.dll"); -} diff --git a/rostests/apitests/dciman32api/dciman32api.h b/rostests/apitests/dciman32api/dciman32api.h deleted file mode 100644 index 658e6bdd6b1..00000000000 --- a/rostests/apitests/dciman32api/dciman32api.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0501 -#endif - -#define WIN32_NO_STATUS -#include -#include -#include -#include -#include -#include -#include - -/* Public Win32K Headers */ -#include -#include -#include - -#include "../apitest.h" - - - diff --git a/rostests/apitests/dciman32api/dciman32api.rbuild b/rostests/apitests/dciman32api/dciman32api.rbuild deleted file mode 100644 index f333e806aa0..00000000000 --- a/rostests/apitests/dciman32api/dciman32api.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - . - - 0x0501 - apitest - kernel32 - user32 - gdi32 - shell32 - dciman32api.c - testlist.c - diff --git a/rostests/apitests/dciman32api/testlist.c b/rostests/apitests/dciman32api/testlist.c deleted file mode 100644 index 2726bb7352a..00000000000 --- a/rostests/apitests/dciman32api/testlist.c +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _DCIMAN32TESTLIST_H -#define _DCIMAN32TESTLIST_H - -#include "dciman32api.h" - -/* include the tests */ -#include "tests/DCICreatePrimary.c" - - - - - - - - - - -/* The List of tests */ -TESTENTRY TestList[] = -{ - { L"DCICreatePrimary", Test_DCICreatePrimary } -}; - -/* The function that gives us the number of tests */ -INT NumTests(void) -{ - return sizeof(TestList) / sizeof(TESTENTRY); -} - -#endif - -/* EOF */ diff --git a/rostests/apitests/dciman32api/tests/DCICreatePrimary.c b/rostests/apitests/dciman32api/tests/DCICreatePrimary.c deleted file mode 100644 index 2590158c5e9..00000000000 --- a/rostests/apitests/dciman32api/tests/DCICreatePrimary.c +++ /dev/null @@ -1,8 +0,0 @@ - -INT -Test_DCICreatePrimary(PTESTINFO pti) -{ - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/directory.rbuild b/rostests/apitests/directory.rbuild deleted file mode 100644 index 64c7c035739..00000000000 --- a/rostests/apitests/directory.rbuild +++ /dev/null @@ -1,34 +0,0 @@ - - - - - . - - 0x0501 - apitest.c - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rostests/apitests/gdi32api/Notes.txt b/rostests/apitests/gdi32api/Notes.txt deleted file mode 100644 index 15b8934f4ab..00000000000 --- a/rostests/apitests/gdi32api/Notes.txt +++ /dev/null @@ -1,7 +0,0 @@ -AddFontResource -it seam any type of pfm/pfb/fon/fnt been genreate by fontforge -does not be accpected by Windows - -Notes Loading two font same times does not working -as msdn desc how todo it - diff --git a/rostests/apitests/gdi32api/gdi.h b/rostests/apitests/gdi32api/gdi.h deleted file mode 100644 index 72fd7a126de..00000000000 --- a/rostests/apitests/gdi32api/gdi.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0501 -#endif - - -typedef PGDI_TABLE_ENTRY (CALLBACK * GDIQUERYPROC) (void); - -/* GDI handle table can hold 0x4000 handles */ -#define GDI_HANDLE_COUNT 0x10000 -#define GDI_GLOBAL_PROCESS (0x0) - -/* Handle Masks and shifts */ -#define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1) -#define GDI_HANDLE_TYPE_MASK 0x007f0000 -#define GDI_HANDLE_STOCK_MASK 0x00800000 -#define GDI_HANDLE_REUSE_MASK 0xff000000 -#define GDI_HANDLE_REUSECNT_SHIFT 24 - - -#define GDI_OBJECT_TYPE_DC 0x00010000 -#define GDI_OBJECT_TYPE_REGION 0x00040000 -#define GDI_OBJECT_TYPE_BITMAP 0x00050000 -#define GDI_OBJECT_TYPE_PALETTE 0x00080000 -#define GDI_OBJECT_TYPE_FONT 0x000a0000 -#define GDI_OBJECT_TYPE_BRUSH 0x00100000 -#define GDI_OBJECT_TYPE_EMF 0x00210000 -#define GDI_OBJECT_TYPE_PEN 0x00300000 -#define GDI_OBJECT_TYPE_EXTPEN 0x00500000 -#define GDI_OBJECT_TYPE_COLORSPACE 0x00090000 -#define GDI_OBJECT_TYPE_METADC 0x00660000 -#define GDI_OBJECT_TYPE_METAFILE 0x00260000 -#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000 -/* Following object types made up for ROS */ -#define GDI_OBJECT_TYPE_ENHMETADC 0x00740000 -#define GDI_OBJECT_TYPE_MEMDC 0x00750000 -#define GDI_OBJECT_TYPE_DCE 0x00770000 -#define GDI_OBJECT_TYPE_DONTCARE 0x007f0000 -/** Not really an object type. Forces GDI_FreeObj to be silent. */ -#define GDI_OBJECT_TYPE_SILENT 0x80000000 - - - -/* Number Representation */ - -typedef LONG FIX; - - - - -HDC WINAPI GdiConvertBitmap(HDC hdc); -HBRUSH WINAPI GdiConvertBrush(HBRUSH hbr); -HDC WINAPI GdiConvertDC(HDC hdc); -HFONT WINAPI GdiConvertFont(HFONT hfont); -HPALETTE WINAPI GdiConvertPalette(HPALETTE hpal); -HRGN WINAPI GdiConvertRegion(HRGN hregion); -HBRUSH WINAPI GdiGetLocalBrush(HBRUSH hbr); -HDC WINAPI GdiGetLocalDC(HDC hdc); -BOOL WINAPI GdiDeleteLocalDC(HDC hdc); -BOOL WINAPI GdiReleaseLocalDC(HDC hdc); -BOOL WINAPI GdiSetAttrs(HDC hdc); - - - diff --git a/rostests/apitests/gdi32api/gdi32api.c b/rostests/apitests/gdi32api/gdi32api.c deleted file mode 100644 index ab8889503a5..00000000000 --- a/rostests/apitests/gdi32api/gdi32api.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "gdi32api.h" - -HINSTANCE g_hInstance; -PGDI_TABLE_ENTRY GdiHandleTable; - -BOOL -IsFunctionPresent(LPWSTR lpszFunction) -{ - return TRUE; -} - -static -PGDI_TABLE_ENTRY -MyGdiQueryTable() -{ - PTEB pTeb = NtCurrentTeb(); - PPEB pPeb = pTeb->ProcessEnvironmentBlock; - return pPeb->GdiSharedHandleTable; -} - -int APIENTRY -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nCmdShow) -{ - g_hInstance = hInstance; - - GdiHandleTable = MyGdiQueryTable(); - if(!GdiHandleTable) - { - return -1; - } - - return TestMain(L"gdi32api", L"gdi32.dll"); -} diff --git a/rostests/apitests/gdi32api/gdi32api.h b/rostests/apitests/gdi32api/gdi32api.h deleted file mode 100644 index 73ec2a95a5b..00000000000 --- a/rostests/apitests/gdi32api/gdi32api.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _GDITEST_H -#define _GDITEST_H - -#define WIN32_NO_STATUS -#include -#include -#include -#include -#include -#include -#include - -/* Public Win32K Headers */ -#include -#include -#include - -#include "../apitest.h" -#include "gdi.h" - -extern HINSTANCE g_hInstance; -extern PGDI_TABLE_ENTRY GdiHandleTable; - -#endif /* _GDITEST_H */ - -/* EOF */ diff --git a/rostests/apitests/gdi32api/gdi32api.rbuild b/rostests/apitests/gdi32api/gdi32api.rbuild deleted file mode 100644 index a045a7965ff..00000000000 --- a/rostests/apitests/gdi32api/gdi32api.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - . - - 0x0501 - apitest - kernel32 - user32 - gdi32 - shell32 - gdi32api.c - testlist.c - diff --git a/rostests/apitests/gdi32api/testlist.c b/rostests/apitests/gdi32api/testlist.c deleted file mode 100644 index 53d40c3a265..00000000000 --- a/rostests/apitests/gdi32api/testlist.c +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef _GDITESTLIST_H -#define _GDITESTLIST_H - -#include "gdi32api.h" - -/* include the tests */ -#include "tests/AddFontResource.c" -#include "tests/AddFontResourceEx.c" -#include "tests/BeginPath.c" -#include "tests/CreateBitmapIndirect.c" -#include "tests/CreateCompatibleDC.c" -#include "tests/CreateFont.c" -#include "tests/CreatePen.c" -#include "tests/CreateRectRgn.c" -#include "tests/EngCreateSemaphore.c" -#include "tests/EngAcquireSemaphore.c" -#include "tests/EngDeleteSemaphore.c" -#include "tests/EngReleaseSemaphore.c" -#include "tests/ExtCreatePen.c" -#include "tests/GdiConvertBitmap.c" -#include "tests/GdiConvertBrush.c" -#include "tests/GdiConvertDC.c" -#include "tests/GdiConvertFont.c" -#include "tests/GdiConvertPalette.c" -#include "tests/GdiConvertRegion.c" -#include "tests/GdiDeleteLocalDC.c" -#include "tests/GdiGetCharDimensions.c" -#include "tests/GdiGetLocalBrush.c" -#include "tests/GdiGetLocalDC.c" -#include "tests/GdiReleaseLocalDC.c" -#include "tests/GdiSetAttrs.c" -#include "tests/GetClipRgn.c" -#include "tests/GetCurrentObject.c" -#include "tests/GetDIBits.c" -#include "tests/GetObject.c" -#include "tests/GetStockObject.c" -#include "tests/GetTextFace.c" -#include "tests/SelectObject.c" -#include "tests/SetDCPenColor.c" -#include "tests/SetMapMode.c" -#include "tests/SetSysColors.c" -#include "tests/SetWorldTransform.c" - - -/* The List of tests */ -TESTENTRY TestList[] = -{ - { L"AddFontResourceA", Test_AddFontResourceA }, - { L"AddFontResourceEx", Test_AddFontResourceEx }, - { L"BeginPath", Test_BeginPath }, - { L"CreateBitmapIndirect", Test_CreateBitmapIndirect }, - { L"CreateCompatibleDC", Test_CreateCompatibleDC }, - { L"CreateFont", Test_CreateFont }, - { L"CreatePen", Test_CreatePen }, - { L"EngCreateSemaphore", Test_EngCreateSemaphore }, - { L"EngAcquireSemaphore", Test_EngAcquireSemaphore }, - { L"EngDeleteSemaphore", Test_EngDeleteSemaphore }, - { L"EngReleaseSemaphore", Test_EngReleaseSemaphore }, - { L"CreateRectRgn", Test_CreateRectRgn }, - { L"ExtCreatePen", Test_ExtCreatePen }, - { L"GdiConvertBitmap", Test_GdiConvertBitmap }, - { L"GdiConvertBrush", Test_GdiConvertBrush }, - { L"GdiConvertDC", Test_GdiConvertDC }, - { L"GdiConvertFont", Test_GdiConvertFont }, - { L"GdiConvertPalette", Test_GdiConvertPalette }, - { L"GdiConvertRegion", Test_GdiConvertRegion }, - { L"GdiDeleteLocalDC", Test_GdiDeleteLocalDC }, - { L"GdiGetCharDimensions", Test_GdiGetCharDimensions }, - { L"GdiGetLocalBrush", Test_GdiGetLocalBrush }, - { L"GdiGetLocalDC", Test_GdiGetLocalDC }, - { L"GdiReleaseLocalDC", Test_GdiReleaseLocalDC }, - { L"GdiSetAttrs", Test_GdiSetAttrs }, - { L"GetClipRgn", Test_GetClipRgn }, - { L"GetCurrentObject", Test_GetCurrentObject }, - { L"GetDIBits", Test_GetDIBits }, - { L"GetObject", Test_GetObject }, - { L"GetStockObject", Test_GetStockObject }, - { L"GetTextFace", Test_GetTextFace }, - { L"SelectObject", Test_SelectObject }, - { L"SetDCPenColor", Test_SetDCPenColor }, - { L"SetMapMode", Test_SetMapMode }, - { L"SetSysColors", Test_SetSysColors }, - { L"SetWorldTransform", Test_SetWorldTransform }, -}; - -/* The function that gives us the number of tests */ -INT NumTests(void) -{ - return sizeof(TestList) / sizeof(TESTENTRY); -} - -#endif /* _GDITESTLIST_H */ - -/* EOF */ diff --git a/rostests/apitests/gdi32api/tests/AddFontResource.c b/rostests/apitests/gdi32api/tests/AddFontResource.c deleted file mode 100644 index 9b200556309..00000000000 --- a/rostests/apitests/gdi32api/tests/AddFontResource.c +++ /dev/null @@ -1,74 +0,0 @@ - -INT -Test_AddFontResourceA(PTESTINFO pti) -{ - CHAR szFileNameA[MAX_PATH]; - CHAR szFileNameFont1A[MAX_PATH]; - CHAR szFileNameFont2A[MAX_PATH]; - - GetCurrentDirectoryA(MAX_PATH,szFileNameA); - - memcpy(szFileNameFont1A,szFileNameA,MAX_PATH ); - strcat(szFileNameFont1A, "\\testdata\\test.ttf"); - - memcpy(szFileNameFont2A,szFileNameA,MAX_PATH ); - strcat(szFileNameFont2A, "\\testdata\\test.otf"); - - RtlZeroMemory(szFileNameA,MAX_PATH); - - /* - * Start testing Ansi version - * - */ - - /* Testing NULL pointer */ - SetLastError(ERROR_SUCCESS); - RTEST(AddFontResourceA(NULL) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Testing -1 pointer */ - SetLastError(ERROR_SUCCESS); - RTEST(AddFontResourceA((CHAR*)-1) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Testing address 1 pointer */ - SetLastError(ERROR_SUCCESS); - RTEST(AddFontResourceA((CHAR*)1) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Testing address empty string */ - SetLastError(ERROR_SUCCESS); - RTEST(AddFontResourceA("") == 0); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Testing one ttf font */ - SetLastError(ERROR_SUCCESS); - TEST(AddFontResourceA(szFileNameFont1A) == 1); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Testing one otf font */ - SetLastError(ERROR_SUCCESS); - TEST(AddFontResourceA(szFileNameFont2A) == 1); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Testing two fonts */ - SetLastError(ERROR_SUCCESS); - sprintf(szFileNameA,"%s|%s",szFileNameFont1A, szFileNameFont2A); - TEST(AddFontResourceA(szFileNameA) == 0); - TEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - sprintf(szFileNameA,"%s |%s",szFileNameFont1A, szFileNameFont2A); - TEST(AddFontResourceA(szFileNameA) == 0); - TEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - sprintf(szFileNameA,"%s | %s",szFileNameFont1A, szFileNameFont2A); - TEST(AddFontResourceA(szFileNameA) == 0); - TEST(GetLastError() == ERROR_FILE_NOT_FOUND); - - return APISTATUS_NORMAL; -} - - - diff --git a/rostests/apitests/gdi32api/tests/AddFontResourceEx.c b/rostests/apitests/gdi32api/tests/AddFontResourceEx.c deleted file mode 100644 index 7b6f52b9d35..00000000000 --- a/rostests/apitests/gdi32api/tests/AddFontResourceEx.c +++ /dev/null @@ -1,36 +0,0 @@ -#define STAMP_DESIGNVECTOR (0x8000000 + 'd' + ('v' << 8)) - -INT -Test_AddFontResourceEx(PTESTINFO pti) -{ - WCHAR szFileName[MAX_PATH]; - - /* Test NULL filename */ - SetLastError(ERROR_SUCCESS); - /* Windows crashes, would need SEH here */ -// TEST(AddFontResourceExW(NULL, 0, 0) != 0); -// TEST(GetLastError() == ERROR_SUCCESS); - - /* Test "" filename */ - SetLastError(ERROR_SUCCESS); - RTEST(AddFontResourceExW(L"", 0, 0) == 0); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - GetEnvironmentVariableW(L"systemroot", szFileName, MAX_PATH); - wcscat(szFileName, L"\\Fonts\\cour.ttf"); - - /* Test flags = 0 */ - SetLastError(ERROR_SUCCESS); - TEST(AddFontResourceExW(szFileName, 0, 0) != 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - RTEST(AddFontResourceExW(szFileName, 256, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test invalid pointer as last parameter */ - TEST(AddFontResourceExW(szFileName, 0, (void*)-1) != 0); - - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/BeginPath.c b/rostests/apitests/gdi32api/tests/BeginPath.c deleted file mode 100644 index f4671207dfe..00000000000 --- a/rostests/apitests/gdi32api/tests/BeginPath.c +++ /dev/null @@ -1,24 +0,0 @@ - - -INT -Test_BeginPath(PTESTINFO pti) -{ - HDC hDC; - BOOL ret; - - SetLastError(0); - ret = BeginPath(0); - TEST(ret == 0); - TEST(GetLastError() == ERROR_INVALID_HANDLE); - - hDC = CreateCompatibleDC(NULL); - - SetLastError(0); - ret = BeginPath(hDC); - TEST(ret == 1); - TEST(GetLastError() == 0); - - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/CreateBitmapIndirect.c b/rostests/apitests/gdi32api/tests/CreateBitmapIndirect.c deleted file mode 100644 index c2d9ea95c4a..00000000000 --- a/rostests/apitests/gdi32api/tests/CreateBitmapIndirect.c +++ /dev/null @@ -1,58 +0,0 @@ - - - -INT -Test_CreateBitmapIndirect(PTESTINFO pti) -{ - HBITMAP win_hBmp; - BITMAP win_bitmap; - - win_bitmap.bmBits = 0; - win_bitmap.bmBitsPixel = 1; - win_bitmap.bmHeight = 0; - win_bitmap.bmPlanes = 1; - win_bitmap.bmType = 1; - win_bitmap.bmWidth = 0; - win_bitmap.bmWidthBytes = 2; - win_hBmp = CreateBitmapIndirect(&win_bitmap); - RTEST(win_hBmp != 0); - - DeleteObject(win_hBmp); - - RtlZeroMemory(&win_bitmap,sizeof(BITMAP)); - win_bitmap.bmBits = 0; - win_bitmap.bmBitsPixel = 1; - win_bitmap.bmHeight = 0; - win_bitmap.bmPlanes = 1; - win_bitmap.bmType = 1; - win_bitmap.bmWidth = 0; - win_bitmap.bmWidthBytes = 1; - win_hBmp = CreateBitmapIndirect(&win_bitmap); - RTEST(win_hBmp == 0); - - RtlZeroMemory(&win_bitmap,sizeof(BITMAP)); - win_bitmap.bmBits = 0; - win_bitmap.bmBitsPixel = 1; - win_bitmap.bmHeight = 0; - win_bitmap.bmPlanes = 1; - win_bitmap.bmType = 1; - win_bitmap.bmWidth = 0; - win_bitmap.bmWidthBytes = 3; - win_hBmp = CreateBitmapIndirect(&win_bitmap); - RTEST(win_hBmp == 0); - - RtlZeroMemory(&win_bitmap,sizeof(BITMAP)); - win_bitmap.bmBits = 0; - win_bitmap.bmBitsPixel = 1; - win_bitmap.bmHeight = 0; - win_bitmap.bmPlanes = 1; - win_bitmap.bmType = 1; - win_bitmap.bmWidth = 0; - win_bitmap.bmWidthBytes = 4; - win_hBmp = CreateBitmapIndirect(&win_bitmap); - RTEST(win_hBmp != 0); - - DeleteObject(win_hBmp); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/CreateCompatibleDC.c b/rostests/apitests/gdi32api/tests/CreateCompatibleDC.c deleted file mode 100644 index 2cbae85b0b7..00000000000 --- a/rostests/apitests/gdi32api/tests/CreateCompatibleDC.c +++ /dev/null @@ -1,47 +0,0 @@ -INT -Test_CreateCompatibleDC(PTESTINFO pti) -{ - HDC hDCScreen, hOldDC, hDC, hDC2; - - /* Get screen DC */ - hDCScreen = GetDC(NULL); - ASSERT(hDCScreen != NULL); - - /* Test NULL DC handle */ - SetLastError(ERROR_SUCCESS); - hDC = CreateCompatibleDC(NULL); - RTEST(hDC != NULL); - RTEST(GetLastError() == ERROR_SUCCESS); - if(hDC) DeleteDC(hDC); - - /* Test invalid DC handle */ - SetLastError(ERROR_SUCCESS); - hDC = CreateCompatibleDC((HDC)0x123456); - RTEST(hDC == NULL); - RTEST(GetLastError() == ERROR_SUCCESS); - if(hDC) DeleteDC(hDC); - - hDC = CreateCompatibleDC(hDCScreen); - RTEST(hDC != NULL); - - // Test if first selected pen is BLACK_PEN (? or same as screen DC's pen?) - RTEST(SelectObject(hDC, GetStockObject(DC_PEN)) == GetStockObject(BLACK_PEN)); - RTEST(SelectObject(hDC, GetStockObject(BLACK_PEN)) == GetStockObject(DC_PEN)); - - // Test for the starting Color == RGB(0,0,0) - RTEST(SetDCPenColor(hDC, RGB(1,2,3)) == RGB(0,0,0)); - - // Check for reuse counter - hOldDC = hDC; - DeleteDC(hDC); - hDC = CreateCompatibleDC(hDCScreen); - hDC2 = CreateCompatibleDC(hOldDC); - RTEST(hDC2 == NULL); - if (hDC2 != NULL) DeleteDC(hDC2); - - // cleanup - DeleteDC(hDC); - - ReleaseDC(NULL, hDCScreen); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/CreateFont.c b/rostests/apitests/gdi32api/tests/CreateFont.c deleted file mode 100644 index cb70720b9bd..00000000000 --- a/rostests/apitests/gdi32api/tests/CreateFont.c +++ /dev/null @@ -1,22 +0,0 @@ -#define INVALIDFONT "ThisFontDoesNotExist" - -INT -Test_CreateFont(PTESTINFO pti) -{ - HFONT hFont; - LOGFONTA logfonta; - - /* Test invalid font name */ - hFont = CreateFontA(15, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, - DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, DEFAULT_PITCH, INVALIDFONT); - RTEST(hFont); - RTEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); - RTEST(memcmp(logfonta.lfFaceName, INVALIDFONT, strlen(INVALIDFONT)) == 0); - RTEST(logfonta.lfWeight == FW_DONTCARE); - - - return APISTATUS_NORMAL; -} - - diff --git a/rostests/apitests/gdi32api/tests/CreatePen.c b/rostests/apitests/gdi32api/tests/CreatePen.c deleted file mode 100644 index bb1cc4476fa..00000000000 --- a/rostests/apitests/gdi32api/tests/CreatePen.c +++ /dev/null @@ -1,56 +0,0 @@ -INT -Test_CreatePen(PTESTINFO pti) -{ - HPEN hPen; - LOGPEN logpen; - - SetLastError(ERROR_SUCCESS); - hPen = CreatePen(PS_DASHDOT, 5, RGB(1,2,3)); - RTEST(hPen); - - /* Test if we have a PEN */ - RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_PEN); - - GetObject(hPen, sizeof(logpen), &logpen); - RTEST(logpen.lopnStyle == PS_DASHDOT); - RTEST(logpen.lopnWidth.x == 5); - RTEST(logpen.lopnColor == RGB(1,2,3)); - DeleteObject(hPen); - - /* PS_GEOMETRIC | PS_DASHDOT = 0x00001011 will become PS_SOLID */ - logpen.lopnStyle = 22; - hPen = CreatePen(PS_GEOMETRIC | PS_DASHDOT, 5, RGB(1,2,3)); - RTEST(hPen); - GetObject(hPen, sizeof(logpen), &logpen); - RTEST(logpen.lopnStyle == PS_SOLID); - DeleteObject(hPen); - - /* PS_USERSTYLE will become PS_SOLID */ - logpen.lopnStyle = 22; - hPen = CreatePen(PS_USERSTYLE, 5, RGB(1,2,3)); - RTEST(hPen); - GetObject(hPen, sizeof(logpen), &logpen); - RTEST(logpen.lopnStyle == PS_SOLID); - DeleteObject(hPen); - - /* PS_ALTERNATE will become PS_SOLID */ - logpen.lopnStyle = 22; - hPen = CreatePen(PS_ALTERNATE, 5, RGB(1,2,3)); - RTEST(hPen); - GetObject(hPen, sizeof(logpen), &logpen); - RTEST(logpen.lopnStyle == PS_SOLID); - DeleteObject(hPen); - - /* PS_INSIDEFRAME is ok */ - logpen.lopnStyle = 22; - hPen = CreatePen(PS_INSIDEFRAME, 5, RGB(1,2,3)); - RTEST(hPen); - GetObject(hPen, sizeof(logpen), &logpen); - RTEST(logpen.lopnStyle == PS_INSIDEFRAME); - DeleteObject(hPen); - - RTEST(GetLastError() == ERROR_SUCCESS); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/CreateRectRgn.c b/rostests/apitests/gdi32api/tests/CreateRectRgn.c deleted file mode 100644 index 879ac0204bc..00000000000 --- a/rostests/apitests/gdi32api/tests/CreateRectRgn.c +++ /dev/null @@ -1,8 +0,0 @@ -INT -Test_CreateRectRgn(PTESTINFO pti) -{ -// HRGN hRgn; - -// hRgn = CreateRectRgn( - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/EngAcquireSemaphore.c b/rostests/apitests/gdi32api/tests/EngAcquireSemaphore.c deleted file mode 100644 index 3648c278137..00000000000 --- a/rostests/apitests/gdi32api/tests/EngAcquireSemaphore.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Simple test of EngAcquireSemaphore only check if we got a lock or not */ -INT -Test_EngAcquireSemaphore(PTESTINFO pti) -{ - - HSEMAPHORE hsem; - PRTL_CRITICAL_SECTION lpcrit; - - hsem = EngCreateSemaphore(); - RTEST ( hsem != NULL ); - ASSERT(hsem != NULL); - lpcrit = (PRTL_CRITICAL_SECTION) hsem; - - /* real data test */ - EngAcquireSemaphore(hsem); -// RTEST (lpcrit->LockCount == -2); doesn't work on XP - RTEST (lpcrit->RecursionCount == 1); - RTEST (lpcrit->OwningThread != 0); - RTEST (lpcrit->LockSemaphore == 0); - RTEST (lpcrit->SpinCount == 0); - - ASSERT(lpcrit->DebugInfo != NULL); - RTEST (lpcrit->DebugInfo->Type == 0); - RTEST (lpcrit->DebugInfo->CreatorBackTraceIndex == 0); - RTEST (lpcrit->DebugInfo->EntryCount == 0); - RTEST (lpcrit->DebugInfo->ContentionCount == 0); - - EngReleaseSemaphore(hsem); - EngDeleteSemaphore(hsem); - - /* NULL pointer test */ - // Note NULL pointer test crash in Vista */ - // EngAcquireSemaphore(NULL); - - /* negtive pointer test */ - // Note negtive pointer test crash in Vista */ - // EngAcquireSemaphore((HSEMAPHORE)-1); - - /* try with deleted Semaphore */ - // Note deleted Semaphore pointer test does freze the whole program in Vista */ - // EngAcquireSemaphore(hsem); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/EngCreateSemaphore.c b/rostests/apitests/gdi32api/tests/EngCreateSemaphore.c deleted file mode 100644 index 23a1d9a48c7..00000000000 --- a/rostests/apitests/gdi32api/tests/EngCreateSemaphore.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Simple test of EngAcquireSemaphore only check if we got a lock or not */ -INT -Test_EngCreateSemaphore(PTESTINFO pti) -{ - - HSEMAPHORE hsem; - PRTL_CRITICAL_SECTION lpcrit; - - hsem = EngCreateSemaphore(); - RTEST ( hsem != NULL ); - ASSERT(hsem != NULL); - - lpcrit = (PRTL_CRITICAL_SECTION) hsem; - RTEST ( lpcrit->DebugInfo != NULL); - RTEST (lpcrit->LockCount == -1); - RTEST (lpcrit->RecursionCount == 0); - RTEST (lpcrit->OwningThread == 0); - RTEST (lpcrit->LockSemaphore == 0); - RTEST (lpcrit->SpinCount == 0); - - ASSERT(lpcrit->DebugInfo != NULL); - RTEST (lpcrit->DebugInfo->Type == 0); - RTEST (lpcrit->DebugInfo->CreatorBackTraceIndex == 0); - RTEST (lpcrit->DebugInfo->EntryCount == 0); - RTEST (lpcrit->DebugInfo->ContentionCount == 0); - - EngDeleteSemaphore(hsem); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/EngDeleteSemaphore.c b/rostests/apitests/gdi32api/tests/EngDeleteSemaphore.c deleted file mode 100644 index a8c35dc84f4..00000000000 --- a/rostests/apitests/gdi32api/tests/EngDeleteSemaphore.c +++ /dev/null @@ -1,51 +0,0 @@ - -INT -Test_EngDeleteSemaphore(PTESTINFO pti) -{ - - HSEMAPHORE hsem; - PRTL_CRITICAL_SECTION lpcrit; - - /* test Create then delete */ - hsem = EngCreateSemaphore(); - ASSERT(hsem != NULL); - lpcrit = (PRTL_CRITICAL_SECTION) hsem; - EngDeleteSemaphore(hsem); - -// RTEST (lpcrit->LockCount > 0); doesn't work on XP - RTEST (lpcrit->RecursionCount == 0); - RTEST (lpcrit->OwningThread == 0); - RTEST (lpcrit->LockSemaphore == 0); - RTEST (lpcrit->SpinCount == 0); - -// ASSERT(lpcrit->DebugInfo != NULL); doesn't work on XP - RTEST (lpcrit->DebugInfo->Type != 0); - RTEST (lpcrit->DebugInfo->CreatorBackTraceIndex != 0); - RTEST (lpcrit->DebugInfo->EntryCount != 0); - RTEST (lpcrit->DebugInfo->ContentionCount != 0); - - - /* test EngAcquireSemaphore and release it, then delete it */ - hsem = EngCreateSemaphore(); - ASSERT(hsem != NULL); - lpcrit = (PRTL_CRITICAL_SECTION) hsem; - - EngAcquireSemaphore(hsem); - EngReleaseSemaphore(hsem); - EngDeleteSemaphore(hsem); - - RTEST (lpcrit->LockCount > 0); - RTEST (lpcrit->RecursionCount == 0); - RTEST (lpcrit->OwningThread == 0); - RTEST (lpcrit->LockSemaphore == 0); - RTEST (lpcrit->SpinCount == 0); - - ASSERT(lpcrit->DebugInfo != NULL); - RTEST (lpcrit->DebugInfo->Type != 0); - RTEST (lpcrit->DebugInfo->CreatorBackTraceIndex != 0); - RTEST (lpcrit->DebugInfo->EntryCount != 0); - RTEST (lpcrit->DebugInfo->ContentionCount != 0); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/EngReleaseSemaphore.c b/rostests/apitests/gdi32api/tests/EngReleaseSemaphore.c deleted file mode 100644 index 05a9f528c2e..00000000000 --- a/rostests/apitests/gdi32api/tests/EngReleaseSemaphore.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Simple test of EngAcquireSemaphore only check if we got a lock or not */ -INT -Test_EngReleaseSemaphore(PTESTINFO pti) -{ - - HSEMAPHORE hsem; - PRTL_CRITICAL_SECTION lpcrit; - - hsem = EngCreateSemaphore(); - ASSERT(hsem != NULL); - - lpcrit = (PRTL_CRITICAL_SECTION) hsem; - - EngAcquireSemaphore(hsem); - EngReleaseSemaphore(hsem); - - RTEST (lpcrit->LockCount != 0); - RTEST (lpcrit->RecursionCount == 0); - RTEST (lpcrit->OwningThread == 0); - RTEST (lpcrit->LockSemaphore == 0); - RTEST (lpcrit->SpinCount == 0); - - ASSERT(lpcrit->DebugInfo != NULL); - RTEST (lpcrit->DebugInfo->Type == 0); - RTEST (lpcrit->DebugInfo->CreatorBackTraceIndex == 0); - RTEST (lpcrit->DebugInfo->EntryCount == 0); - RTEST (lpcrit->DebugInfo->ContentionCount == 0); - - EngDeleteSemaphore(hsem); - - /* try with deleted Semaphore */ -// EngReleaseSemaphore(hsem); -> this leads to heap correuption -// RTEST (lpcrit->LockCount > 0); -// RTEST (lpcrit->RecursionCount != 0); -// RTEST (lpcrit->OwningThread == 0); -// RTEST (lpcrit->LockSemaphore == 0); -// RTEST (lpcrit->SpinCount == 0); - -// ASSERT(lpcrit->DebugInfo != NULL); -// RTEST (lpcrit->DebugInfo->Type != 0); -// RTEST (lpcrit->DebugInfo->CreatorBackTraceIndex != 0); -// RTEST (lpcrit->DebugInfo->EntryCount != 0); -// RTEST (lpcrit->DebugInfo->ContentionCount != 0); - - /* NULL pointer test */ - // Note NULL pointer test crash in Vista */ - // EngReleaseSemaphore(NULL); - - /* negtive pointer test */ - // Note negtive pointer test crash in Vista */ - // EngReleaseSemaphore((HSEMAPHORE)-1); - - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/ExtCreatePen.c b/rostests/apitests/gdi32api/tests/ExtCreatePen.c deleted file mode 100644 index 1507e95401d..00000000000 --- a/rostests/apitests/gdi32api/tests/ExtCreatePen.c +++ /dev/null @@ -1,29 +0,0 @@ -INT -Test_ExtCreatePen(PTESTINFO pti) -{ - HPEN hPen; - LOGBRUSH logbrush; - DWORD dwStyles[17] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; - - logbrush.lbStyle = BS_SOLID; - logbrush.lbColor = RGB(1,2,3); - logbrush.lbHatch = 0; - hPen = ExtCreatePen(PS_COSMETIC, 1,&logbrush, 0, 0); - if (!hPen) return FALSE; - - /* Test if we have an EXTPEN */ - RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN); - DeleteObject(hPen); - - /* test userstyles */ - hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 17, (CONST DWORD*)&dwStyles); - RTEST(hPen == 0); - hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles); - RTEST(hPen != 0); - - DeleteObject(hPen); - - return APISTATUS_NORMAL; -} - - diff --git a/rostests/apitests/gdi32api/tests/GdiConvertBitmap.c b/rostests/apitests/gdi32api/tests/GdiConvertBitmap.c deleted file mode 100644 index bdbd4f9ab46..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiConvertBitmap.c +++ /dev/null @@ -1,10 +0,0 @@ -INT -Test_GdiConvertBitmap(PTESTINFO pti) -{ - RTEST(GdiConvertBitmap((HDC)-1) == (HDC)-1); - RTEST(GdiConvertBitmap((HDC)0) == (HDC)0); - RTEST(GdiConvertBitmap((HDC)1) == (HDC)1); - RTEST(GdiConvertBitmap((HDC)2) == (HDC)2); - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/GdiConvertBrush.c b/rostests/apitests/gdi32api/tests/GdiConvertBrush.c deleted file mode 100644 index 20ea326e47e..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiConvertBrush.c +++ /dev/null @@ -1,9 +0,0 @@ -INT -Test_GdiConvertBrush(PTESTINFO pti) -{ - RTEST(GdiConvertBrush((HBRUSH)-1) == (HBRUSH)-1); - RTEST(GdiConvertBrush((HBRUSH)0) == (HBRUSH)0); - RTEST(GdiConvertBrush((HBRUSH)1) == (HBRUSH)1); - RTEST(GdiConvertBrush((HBRUSH)2) == (HBRUSH)2); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GdiConvertDC.c b/rostests/apitests/gdi32api/tests/GdiConvertDC.c deleted file mode 100644 index 302d1cb8b16..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiConvertDC.c +++ /dev/null @@ -1,10 +0,0 @@ -INT -Test_GdiConvertDC(PTESTINFO pti) -{ - RTEST(GdiConvertDC((HDC)-1) == (HDC)-1); - RTEST(GdiConvertDC((HDC)0) == (HDC)0); - RTEST(GdiConvertDC((HDC)1) == (HDC)1); - RTEST(GdiConvertDC((HDC)2) == (HDC)2); - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/GdiConvertFont.c b/rostests/apitests/gdi32api/tests/GdiConvertFont.c deleted file mode 100644 index 7bb778d62a7..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiConvertFont.c +++ /dev/null @@ -1,9 +0,0 @@ -INT -Test_GdiConvertFont(PTESTINFO pti) -{ - RTEST(GdiConvertFont((HFONT)-1) == (HFONT)-1); - RTEST(GdiConvertFont((HFONT)0) == (HFONT)0); - RTEST(GdiConvertFont((HFONT)1) == (HFONT)1); - RTEST(GdiConvertFont((HFONT)2) == (HFONT)2); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GdiConvertPalette.c b/rostests/apitests/gdi32api/tests/GdiConvertPalette.c deleted file mode 100644 index 5ccec307571..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiConvertPalette.c +++ /dev/null @@ -1,9 +0,0 @@ -INT -Test_GdiConvertPalette(PTESTINFO pti) -{ - RTEST(GdiConvertPalette((HPALETTE)-1) == (HPALETTE)-1); - RTEST(GdiConvertPalette((HPALETTE)0) == (HPALETTE)0); - RTEST(GdiConvertPalette((HPALETTE)1) == (HPALETTE)1); - RTEST(GdiConvertPalette((HPALETTE)2) == (HPALETTE)2); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GdiConvertRegion.c b/rostests/apitests/gdi32api/tests/GdiConvertRegion.c deleted file mode 100644 index 34f1081b238..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiConvertRegion.c +++ /dev/null @@ -1,12 +0,0 @@ -INT -Test_GdiConvertRegion(PTESTINFO pti) -{ - RTEST(GdiConvertRegion((HRGN)-1) == (HRGN)-1); - RTEST(GdiConvertRegion((HRGN)0) == (HRGN)0); - RTEST(GdiConvertRegion((HRGN)1) == (HRGN)1); - RTEST(GdiConvertRegion((HRGN)2) == (HRGN)2); - RTEST(GdiConvertRegion((HRGN)3) == (HRGN)3); - RTEST(GdiConvertRegion((HRGN)4) == (HRGN)4); - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/GdiDeleteLocalDC.c b/rostests/apitests/gdi32api/tests/GdiDeleteLocalDC.c deleted file mode 100644 index efeb214c35a..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiDeleteLocalDC.c +++ /dev/null @@ -1,9 +0,0 @@ -INT -Test_GdiDeleteLocalDC(PTESTINFO pti) -{ - RTEST(GdiDeleteLocalDC((HDC)-1) == TRUE); - RTEST(GdiDeleteLocalDC((HDC)0) == TRUE); - RTEST(GdiDeleteLocalDC((HDC)1) == TRUE); - RTEST(GdiDeleteLocalDC((HDC)2) == TRUE); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GdiGetCharDimensions.c b/rostests/apitests/gdi32api/tests/GdiGetCharDimensions.c deleted file mode 100644 index 6a8856eaad5..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiGetCharDimensions.c +++ /dev/null @@ -1,27 +0,0 @@ -LONG STDCALL GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *); - -INT -Test_GdiGetCharDimensions(PTESTINFO pti) -{ - LOGFONT logfont = {-11, 0, 0, 0, 400, - 0, 0, 0, 0, 0, 0, 0, 0, - "MS Shell Dlg 2"}; - HFONT hFont, hOldFont; - HDC hDC; - LONG x,y; - TEXTMETRICW tm; - - hFont = CreateFontIndirect(&logfont); - hDC = CreateCompatibleDC(NULL); - hOldFont = SelectObject(hDC, hFont); - - x = GdiGetCharDimensions(hDC, &tm, &y); - - RTEST(y == tm.tmHeight); - - SelectObject(hDC, hOldFont); - DeleteObject(hFont); - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GdiGetLocalBrush.c b/rostests/apitests/gdi32api/tests/GdiGetLocalBrush.c deleted file mode 100644 index 45b134b1e66..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiGetLocalBrush.c +++ /dev/null @@ -1,11 +0,0 @@ -INT -Test_GdiGetLocalBrush(PTESTINFO pti) -{ - RTEST(GdiGetLocalBrush((HBRUSH)-1) == (HBRUSH)-1); - RTEST(GdiGetLocalBrush((HBRUSH)0) == (HBRUSH)0); - RTEST(GdiGetLocalBrush((HBRUSH)1) == (HBRUSH)1); - RTEST(GdiGetLocalBrush((HBRUSH)2) == (HBRUSH)2); - RTEST(GdiGetLocalBrush((HBRUSH)3) == (HBRUSH)3); - RTEST(GdiGetLocalBrush((HBRUSH)4) == (HBRUSH)4); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GdiGetLocalDC.c b/rostests/apitests/gdi32api/tests/GdiGetLocalDC.c deleted file mode 100644 index ca62675c44d..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiGetLocalDC.c +++ /dev/null @@ -1,11 +0,0 @@ -INT -Test_GdiGetLocalDC(PTESTINFO pti) -{ - RTEST(GdiGetLocalDC((HDC)-1) == (HDC)-1); - RTEST(GdiGetLocalDC((HDC)0) == (HDC)0); - RTEST(GdiGetLocalDC((HDC)1) == (HDC)1); - RTEST(GdiGetLocalDC((HDC)2) == (HDC)2); - RTEST(GdiGetLocalDC((HDC)3) == (HDC)3); - RTEST(GdiGetLocalDC((HDC)4) == (HDC)4); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GdiReleaseLocalDC.c b/rostests/apitests/gdi32api/tests/GdiReleaseLocalDC.c deleted file mode 100644 index 5c4196c1a29..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiReleaseLocalDC.c +++ /dev/null @@ -1,9 +0,0 @@ -INT -Test_GdiReleaseLocalDC(PTESTINFO pti) -{ - RTEST(GdiReleaseLocalDC((HDC)-1) == TRUE); - RTEST(GdiReleaseLocalDC((HDC)0) == TRUE); - RTEST(GdiReleaseLocalDC((HDC)1) == TRUE); - RTEST(GdiReleaseLocalDC((HDC)2) == TRUE); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GdiSetAttrs.c b/rostests/apitests/gdi32api/tests/GdiSetAttrs.c deleted file mode 100644 index 9e534d5285d..00000000000 --- a/rostests/apitests/gdi32api/tests/GdiSetAttrs.c +++ /dev/null @@ -1,9 +0,0 @@ -INT -Test_GdiSetAttrs(PTESTINFO pti) -{ - RTEST(GdiSetAttrs((HDC)-1) == TRUE); - RTEST(GdiSetAttrs((HDC)0) == TRUE); - RTEST(GdiSetAttrs((HDC)1) == TRUE); - RTEST(GdiSetAttrs((HDC)2) == TRUE); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GetClipRgn.c b/rostests/apitests/gdi32api/tests/GetClipRgn.c deleted file mode 100644 index 5f583ca154a..00000000000 --- a/rostests/apitests/gdi32api/tests/GetClipRgn.c +++ /dev/null @@ -1,31 +0,0 @@ -INT -Test_GetClipRgn(PTESTINFO pti) -{ - HWND hWnd; - HDC hDC; - HRGN hrgn;//, hrgn2; - - /* Create a window */ - hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, - NULL, NULL, g_hInstance, 0); - - hDC = GetDC(hWnd); - hrgn = CreateRectRgn(0,0,0,0); - - /* Test invalid DC */ - SetLastError(ERROR_SUCCESS); - RTEST(GetClipRgn((HDC)0x12345, hrgn) == -1); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test invalid hrgn */ - SetLastError(ERROR_SUCCESS); - RTEST(GetClipRgn(hDC, (HRGN)0x12345) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - ReleaseDC(hWnd, hDC); - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/GetCurrentObject.c b/rostests/apitests/gdi32api/tests/GetCurrentObject.c deleted file mode 100644 index e41a46897f4..00000000000 --- a/rostests/apitests/gdi32api/tests/GetCurrentObject.c +++ /dev/null @@ -1,139 +0,0 @@ - -INT -Test_GetCurrentObject(PTESTINFO pti) -{ - HWND hWnd; - HDC hDC; - - /* Create a window */ - hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, - NULL, NULL, g_hInstance, 0); - /* Get the DC */ - hDC = GetDC(hWnd); - - /* Test NULL DC */ - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(NULL, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(NULL, OBJ_BITMAP) == 0); - RTEST(GetCurrentObject(NULL, OBJ_BRUSH) == 0); - RTEST(GetCurrentObject(NULL, OBJ_COLORSPACE) == 0); - RTEST(GetCurrentObject(NULL, OBJ_FONT) == 0); - RTEST(GetCurrentObject(NULL, OBJ_PAL) == 0); - RTEST(GetCurrentObject(NULL, OBJ_PEN) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid DC handle */ - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject((HDC)-123, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject((HDC)-123, OBJ_BITMAP) == 0); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid types */ - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, 3) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, 4) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, 8) == 0); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, 9) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, 10) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, 12) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, 13) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Default bitmap */ - SetLastError(ERROR_SUCCESS); - HBITMAP hBmp; - hBmp = GetCurrentObject(hDC, OBJ_BITMAP); - RTEST(GDI_HANDLE_GET_TYPE(hBmp) == GDI_OBJECT_TYPE_BITMAP); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Other bitmap */ - SetLastError(ERROR_SUCCESS); - SelectObject(hDC, GetStockObject(21)); - RTEST(hBmp == GetCurrentObject(hDC, OBJ_BITMAP)); - RTEST(GDI_HANDLE_GET_TYPE(hBmp) == GDI_OBJECT_TYPE_BITMAP); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Default brush */ - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, OBJ_BRUSH) == GetStockObject(WHITE_BRUSH)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Other brush */ - SetLastError(ERROR_SUCCESS); - SelectObject(hDC, GetStockObject(BLACK_BRUSH)); - RTEST(GetCurrentObject(hDC, OBJ_BRUSH) == GetStockObject(BLACK_BRUSH)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Default colorspace */ - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, OBJ_COLORSPACE) == GetStockObject(20)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Default font */ - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, OBJ_FONT) == GetStockObject(SYSTEM_FONT)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Other font */ - SetLastError(ERROR_SUCCESS); - SelectObject(hDC, GetStockObject(DEFAULT_GUI_FONT)); - RTEST(GetCurrentObject(hDC, OBJ_FONT) == GetStockObject(DEFAULT_GUI_FONT)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Default palette */ - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, OBJ_PAL) == GetStockObject(DEFAULT_PALETTE)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Default pen */ - SetLastError(ERROR_SUCCESS); - RTEST(GetCurrentObject(hDC, OBJ_PEN) == GetStockObject(BLACK_PEN)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Other pen */ - SetLastError(ERROR_SUCCESS); - SelectObject(hDC, GetStockObject(WHITE_PEN)); - RTEST(GetCurrentObject(hDC, OBJ_PEN) == GetStockObject(WHITE_PEN)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* DC pen */ - SetLastError(ERROR_SUCCESS); - SelectObject(hDC, GetStockObject(DC_PEN)); - RTEST(GetCurrentObject(hDC, OBJ_PEN) == GetStockObject(DC_PEN)); - RTEST(GetLastError() == ERROR_SUCCESS); - - ReleaseDC(hWnd, hDC); - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/GetDIBits.c b/rostests/apitests/gdi32api/tests/GetDIBits.c deleted file mode 100644 index 3ed96bc233a..00000000000 --- a/rostests/apitests/gdi32api/tests/GetDIBits.c +++ /dev/null @@ -1,89 +0,0 @@ -INT -Test_GetDIBits(PTESTINFO pti) -{ - HDC hDCScreen; - HBITMAP hBitmap; - BITMAPINFO bi; - INT ScreenBpp; - - hDCScreen = GetDC(NULL); - if (hDCScreen == NULL) - { - return FALSE; - } - - hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16); - RTEST(hBitmap != NULL); - - /* misc */ - SetLastError(ERROR_SUCCESS); - RTEST(GetDIBits(0, 0, 0, 0, NULL, NULL, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetDIBits((HDC)2345, 0, 0, 0, NULL, NULL, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetDIBits((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - RTEST(GetDIBits((HDC)2345, hBitmap, 0, 15, NULL, &bi, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - - - /* null hdc */ - SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(NULL, hBitmap, 0, 15, NULL, &bi, DIB_RGB_COLORS) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* null bitmap */ - SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(hDCScreen, NULL, 0, 15, NULL, &bi, DIB_RGB_COLORS) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* 0 scan lines */ - SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(hDCScreen, hBitmap, 0, 0, NULL, &bi, DIB_RGB_COLORS) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* null bitmap info - crashes XP*/ - //SetLastError(ERROR_SUCCESS); - //RTEST(GetDIBits(hDCScreen, NULL, 0, 15, NULL, NULL, DIB_RGB_COLORS) == 0); - //RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* bad bmi colours (uUsage) */ - SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(hDCScreen, hBitmap, 0, 15, NULL, &bi, 100) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - RTEST(bi.bmiHeader.biWidth == 0); - RTEST(bi.bmiHeader.biHeight == 0); - RTEST(bi.bmiHeader.biBitCount == 0); - RTEST(bi.bmiHeader.biSizeImage == 0); - - /* basic call */ - SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(hDCScreen, hBitmap, 0, 15, NULL, &bi, DIB_RGB_COLORS) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); - ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL); - RTEST(bi.bmiHeader.biWidth == 16); - RTEST(bi.bmiHeader.biHeight == 16); - RTEST(bi.bmiHeader.biBitCount == ScreenBpp); - RTEST(bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8)); - - DeleteObject(hBitmap); - ReleaseDC(NULL, hDCScreen); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GetObject.c b/rostests/apitests/gdi32api/tests/GetObject.c deleted file mode 100644 index c295e1c6612..00000000000 --- a/rostests/apitests/gdi32api/tests/GetObject.c +++ /dev/null @@ -1,444 +0,0 @@ -static INT -Test_General(PTESTINFO pti) -{ - struct - { - LOGBRUSH logbrush; - BYTE additional[5]; - } TestStruct; - PLOGBRUSH plogbrush; - HBRUSH hBrush; - - /* Test null pointer and invalid handles */ - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA(0, 0, NULL) == 0); - RTEST(GetObjectA((HANDLE)-1, 0, NULL) == 0); - RTEST(GetObjectA((HANDLE)0x00380000, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - /* Test need of alignment */ - hBrush = GetStockObject(WHITE_BRUSH); - plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush); - RTEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH)); - plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 2); - RTEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH)); - plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 1); - RTEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == 0); - - return TRUE; -} - -static INT -Test_Bitmap(PTESTINFO pti) -{ - HBITMAP hBitmap; - BITMAP bitmap; - DIBSECTION dibsection; - BYTE bData[100] = {0}; - BYTE Buffer[100] = {48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0}; - - FillMemory(&bitmap, sizeof(BITMAP), 0x77); - hBitmap = CreateBitmap(10,10,1,8,bData); - if (!hBitmap) return FALSE; - - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP)); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP)); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, sizeof(BITMAP), NULL) == sizeof(BITMAP)); - RTEST(GetObjectA(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP)); - RTEST(GetObjectA(hBitmap, 0, NULL) == sizeof(BITMAP)); - RTEST(GetObjectA((HANDLE)((UINT)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP)); - RTEST(GetObjectA(hBitmap, 5, NULL) == sizeof(BITMAP)); - RTEST(GetObjectA(hBitmap, -5, NULL) == sizeof(BITMAP)); - RTEST(GetObjectA(hBitmap, 0, Buffer) == 0); - RTEST(GetObjectA(hBitmap, 5, Buffer) == 0); - RTEST(GetObjectA(hBitmap, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - RTEST(GetObjectA(hBitmap, sizeof(BITMAP)+2, &bitmap) == sizeof(BITMAP)); - RTEST(GetObjectA(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(BITMAP)); - RTEST(GetObjectA(hBitmap, -5, &bitmap) == sizeof(BITMAP)); - RTEST(GetLastError() == ERROR_SUCCESS); - - // todo: test invalid handle + buffer - - DeleteObject(hBitmap); - return TRUE; -} - -static INT -Test_Dibsection(PTESTINFO pti) -{ - BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER), 10, 10, 1, 8, BI_RGB, 0, 10, 10, 0,0}}; - HBITMAP hBitmap; - DIBSECTION dibsection; - PVOID pData; - - FillMemory(&dibsection, sizeof(DIBSECTION), 0x77); - HDC hDC = GetDC(0); - hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pData, NULL, 0); - if(!hBitmap) return FALSE; - - SetLastError(ERROR_SUCCESS); - RTEST(GetObject(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP)); - RTEST(GetObject(hBitmap, 0, NULL) == sizeof(BITMAP)); - RTEST(GetObject(hBitmap, 5, NULL) == sizeof(BITMAP)); - RTEST(GetObject(hBitmap, -5, NULL) == sizeof(BITMAP)); - RTEST(GetObject(hBitmap, 0, &dibsection) == 0); - RTEST(GetObject(hBitmap, 5, &dibsection) == 0); - RTEST(GetObject(hBitmap, sizeof(BITMAP), &dibsection) == sizeof(BITMAP)); - RTEST(GetObject(hBitmap, sizeof(BITMAP)+2, &dibsection) == sizeof(BITMAP)); - RTEST(GetObject(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(DIBSECTION)); - RTEST(GetObject(hBitmap, sizeof(DIBSECTION)+2, &dibsection) == sizeof(DIBSECTION)); - RTEST(GetObject(hBitmap, -5, &dibsection) == sizeof(DIBSECTION)); - RTEST(GetLastError() == ERROR_SUCCESS); - DeleteObject(hBitmap); - ReleaseDC(0, hDC); - - return TRUE; -} - -static INT -Test_Palette(PTESTINFO pti) -{ - LOGPALETTE logpal; - HPALETTE hPalette; - WORD wPalette; - - FillMemory(&wPalette, sizeof(WORD), 0x77); - logpal.palVersion = 0x0300; - logpal.palNumEntries = 1; - logpal.palPalEntry[0].peRed = 0; - logpal.palPalEntry[0].peGreen = 0; - logpal.palPalEntry[0].peBlue = 0; - logpal.palPalEntry[0].peFlags = PC_EXPLICIT; - hPalette = CreatePalette(&logpal); - if (!hPalette) return FALSE; - - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD)); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD)); - RTEST(GetObject(hPalette, sizeof(WORD), NULL) == sizeof(WORD)); - RTEST(GetObject(hPalette, 0, NULL) == sizeof(WORD)); - RTEST(GetObject(hPalette, 5, NULL) == sizeof(WORD)); - RTEST(GetObject(hPalette, -5, NULL) == sizeof(WORD)); - RTEST(GetObject(hPalette, sizeof(WORD), &wPalette) == sizeof(WORD)); - RTEST(GetObject(hPalette, sizeof(WORD)+2, &wPalette) == sizeof(WORD)); - RTEST(GetObject(hPalette, 0, &wPalette) == 0); - RTEST(GetObject(hPalette, 1, &wPalette) == 0); - RTEST(GetObject(hPalette, -1, &wPalette) == sizeof(WORD)); - RTEST(GetLastError() == ERROR_SUCCESS); - DeleteObject(hPalette); - return TRUE; -} - -static INT -Test_Brush(PTESTINFO pti) -{ - LOGBRUSH logbrush; - HBRUSH hBrush; - - FillMemory(&logbrush, sizeof(LOGBRUSH), 0x77); - hBrush = CreateSolidBrush(RGB(1,2,3)); - if (!hBrush) return FALSE; - - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH)); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH)); - RTEST(GetObject(hBrush, sizeof(WORD), NULL) == sizeof(LOGBRUSH)); - RTEST(GetObject(hBrush, 0, NULL) == sizeof(LOGBRUSH)); - RTEST(GetObject(hBrush, 5, NULL) == sizeof(LOGBRUSH)); - RTEST(GetObject(hBrush, -5, NULL) == sizeof(LOGBRUSH)); - - RTEST(GetObject(hBrush, 0, &logbrush) == 0); - RTEST(logbrush.lbStyle == 0x77777777); - RTEST(GetObject(hBrush, 5, &logbrush) == sizeof(LOGBRUSH)); - RTEST(logbrush.lbStyle == 0); - RTEST(logbrush.lbColor == 0x77777701); - - RTEST(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH)); - RTEST(GetObject(hBrush, sizeof(LOGBRUSH)+2, &logbrush) == sizeof(LOGBRUSH)); - RTEST(GetObject(hBrush, -1, &logbrush) == sizeof(LOGBRUSH)); - // TODO: test all members - - RTEST(GetLastError() == ERROR_SUCCESS); - DeleteObject(hBrush); - return TRUE; -} - -static INT -Test_Pen(PTESTINFO pti) -{ - LOGPEN logpen; - HPEN hPen; - - FillMemory(&logpen, sizeof(LOGPEN), 0x77); - hPen = CreatePen(PS_SOLID, 3, RGB(4,5,6)); - if (!hPen) return FALSE; - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN)); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN)); - RTEST(GetObject(hPen, sizeof(BITMAP), NULL) == sizeof(LOGPEN)); - RTEST(GetObject(hPen, 0, NULL) == sizeof(LOGPEN)); - RTEST(GetObject(hPen, 5, NULL) == sizeof(LOGPEN)); - RTEST(GetObject(hPen, -5, NULL) == sizeof(LOGPEN)); - RTEST(GetObject(hPen, sizeof(LOGPEN), &logpen) == sizeof(LOGPEN)); - RTEST(GetObject(hPen, sizeof(LOGPEN)-1, &logpen) == 0); - RTEST(GetObject(hPen, sizeof(LOGPEN)+2, &logpen) == sizeof(LOGPEN)); - RTEST(GetObject(hPen, 0, &logpen) == 0); - RTEST(GetObject(hPen, -5, &logpen) == sizeof(LOGPEN)); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* test if the fields are filled correctly */ - RTEST(logpen.lopnStyle == PS_SOLID); - - - DeleteObject(hPen); - return TRUE; -} - -static INT -Test_ExtPen(PTESTINFO pti) -{ - HPEN hPen; - EXTLOGPEN extlogpen; - LOGBRUSH logbrush; - DWORD dwStyles[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; - struct - { - EXTLOGPEN extlogpen; - DWORD dwStyles[50]; - } elpUserStyle; - - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - FillMemory(&extlogpen, sizeof(EXTLOGPEN), 0x77); - logbrush.lbStyle = BS_SOLID; - logbrush.lbColor = RGB(1,2,3); - logbrush.lbHatch = 22; - hPen = ExtCreatePen(PS_GEOMETRIC | PS_DASH, 5, &logbrush, 0, NULL); - - RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN); - RTEST(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0); - RTEST(GetObject(hPen, sizeof(EXTLOGPEN), NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - RTEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - RTEST(GetObject((HANDLE)GDI_HANDLE_GET_INDEX(hPen), 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - RTEST(GetObject(hPen, 5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - RTEST(GetObject(hPen, -5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - RTEST(GetObject(hPen, 0, &extlogpen) == 0); - RTEST(GetObject(hPen, 4, &extlogpen) == 0); - - /* Nothing should be filled */ - RTEST(extlogpen.elpPenStyle == 0x77777777); - RTEST(extlogpen.elpWidth == 0x77777777); - - RTEST(GetObject(hPen, sizeof(EXTLOGPEN), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - RTEST(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - RTEST(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD)-1, &extlogpen) == 0); - RTEST(GetObject(hPen, sizeof(EXTLOGPEN)+2, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - RTEST(GetObject(hPen, -5, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD)); - - /* test if the fields are filled correctly */ - RTEST(extlogpen.elpPenStyle == (PS_GEOMETRIC | PS_DASH)); - RTEST(extlogpen.elpWidth == 5); - RTEST(extlogpen.elpBrushStyle == 0); - RTEST(extlogpen.elpColor == RGB(1,2,3)); - RTEST(extlogpen.elpHatch == 22); - RTEST(extlogpen.elpNumEntries == 0); - DeleteObject(hPen); - - /* A maximum of 16 Styles is allowed */ - hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles); - RTEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD)); - RTEST(GetObject(hPen, sizeof(EXTLOGPEN) + 15*sizeof(DWORD), &elpUserStyle) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD)); - RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[0] == 0); - RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[1] == 1); - RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[15] == 15); - DeleteObject(hPen); - - return TRUE; -} - -static INT -Test_Font(PTESTINFO pti) -{ - HFONT hFont; - LOGFONTA logfonta; - LOGFONTW logfontw; - EXTLOGFONTA extlogfonta; - EXTLOGFONTW extlogfontw; - ENUMLOGFONTEXA enumlogfontexa; - ENUMLOGFONTEXW enumlogfontexw; - ENUMLOGFONTEXDVA enumlogfontexdva; - ENUMLOGFONTEXDVW enumlogfontexdvw; - ENUMLOGFONTA enumlogfonta; - ENUMLOGFONTW enumlogfontw; - BYTE bData[270]; - - FillMemory(&logfonta, sizeof(LOGFONTA), 0x77); - hFont = CreateFontA(8, 8, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, - ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, - ANTIALIASED_QUALITY, DEFAULT_PITCH, "testfont"); - RTEST(hFont); - - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTA)); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTW)); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA)); // 60 - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTA), NULL) == sizeof(LOGFONTA)); // 156 - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXA), NULL) == sizeof(LOGFONTA)); // 188 - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTA), NULL) == sizeof(LOGFONTA)); // 192 - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA), NULL) == sizeof(LOGFONTA)); // 260 - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA)+1, NULL) == sizeof(LOGFONTA)); // 260 - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW)); // 92 - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTW), NULL) == sizeof(LOGFONTW)); // 284 - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTW), NULL) == sizeof(LOGFONTW)); // 320 - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXW), NULL) == sizeof(LOGFONTW)); // 348 - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW), NULL) == sizeof(LOGFONTW)); // 420 - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW)+1, NULL) == sizeof(LOGFONTW)); // 356! - - RTEST(GetObjectA(hFont, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA)); - RTEST(GetObjectA(hFont, 0, NULL) == sizeof(LOGFONTA)); - RTEST(GetObjectA(hFont, 5, NULL) == sizeof(LOGFONTA)); - RTEST(GetObjectA(hFont, -5, NULL) == sizeof(LOGFONTA)); - RTEST(GetObjectA(hFont, 0, &logfonta) == 0); - RTEST(logfonta.lfHeight == 0x77777777); - - TEST(GetObjectA(hFont, 5, &logfonta) == 5); - TEST(logfonta.lfHeight == 8); - TEST(logfonta.lfWidth == 0x77777708); - - RTEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60 - TEST(GetObjectA(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTA)); // 92 - RTEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA)); // 192 - TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA)+1, &extlogfonta) == sizeof(EXTLOGFONTA)+1); // 192 - TEST(GetObjectA(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(ENUMLOGFONTEXDVA)); // 320 - - TEST(GetObjectA(hFont, 261, &bData) == 260); // no - - /* LOGFONT / GetObjectW */ - FillMemory(&logfontw, sizeof(LOGFONTW), 0x77); - - RTEST(GetObjectW(hFont, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW)); - RTEST(GetObjectW(hFont, 0, NULL) == sizeof(LOGFONTW)); - RTEST(GetObjectW(hFont, 5, NULL) == sizeof(LOGFONTW)); - RTEST(GetObjectW(hFont, -5, NULL) == sizeof(LOGFONTW)); - RTEST(GetObjectW(hFont, 0, &logfontw) == 0); - RTEST(logfontw.lfHeight == 0x77777777); - - TEST(GetObjectW(hFont, 5, &logfontw) == 5); - TEST(logfontw.lfHeight == 8); - TEST(logfontw.lfWidth == 0x77777708); - - RTEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60 - RTEST(logfonta.lfHeight == 8); - RTEST(GetObjectA(hFont, sizeof(ENUMLOGFONTA), &enumlogfonta) == sizeof(ENUMLOGFONTA)); // 156 - RTEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXA), &enumlogfontexa) == sizeof(ENUMLOGFONTEXA)); // 188 - RTEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA)); // 192 - RTEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA), &enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA)); // 260 - TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA)+1, &enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA)); // 260 - - RTEST(GetObjectW(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTW)); // 92 - RTEST(GetObjectW(hFont, sizeof(ENUMLOGFONTW), &enumlogfontw) == sizeof(ENUMLOGFONTW)); // 284 - RTEST(GetObjectW(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(EXTLOGFONTW)); // 320 - RTEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXW), &enumlogfontexw) == sizeof(ENUMLOGFONTEXW)); // 348 - TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW), &enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 420 - TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW)+1, &enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 356! - - TEST(GetObjectW(hFont, 356, &bData) == 356); - TEST(GetLastError() == ERROR_SUCCESS); - - DeleteObject(hFont); - - return TRUE; -} - -static INT -Test_Colorspace(PTESTINFO pti) -{ - SetLastError(ERROR_SUCCESS); - TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 60);// FIXME: what structure? - TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 0); - TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER); - - return TRUE; -} - -static INT -Test_MetaDC(PTESTINFO pti) -{ - /* Windows does not SetLastError() on a metadc, but it doesn't seem to do anything with it */ - HDC hMetaDC; - BYTE buffer[100]; - - hMetaDC = CreateMetaFile(NULL); - if(!hMetaDC) return FALSE; - if(((UINT)hMetaDC & GDI_HANDLE_TYPE_MASK) != GDI_OBJECT_TYPE_METADC) return FALSE; - - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 0, NULL) == 0); - RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 100, &buffer) == 0); - RTEST(GetObjectA(hMetaDC, 0, NULL) == 0); - RTEST(GetObjectA(hMetaDC, 100, &buffer) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - return TRUE; -} - -INT -Test_GetObject(PTESTINFO pti) -{ - - HRGN hRgn; - hRgn = CreateRectRgn(0,0,5,5); - SetLastError(ERROR_SUCCESS); - RTEST(GetObjectW(hRgn, 0, NULL) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - DeleteObject(hRgn); - - Test_Font(pti); - Test_Colorspace(pti); - Test_General(pti); - Test_Bitmap(pti); - Test_Dibsection(pti); - Test_Palette(pti); - Test_Brush(pti); - Test_Pen(pti); - Test_ExtPen(pti); // not implemented yet in ROS - Test_MetaDC(pti); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GetStockObject.c b/rostests/apitests/gdi32api/tests/GetStockObject.c deleted file mode 100644 index 02ceccf0920..00000000000 --- a/rostests/apitests/gdi32api/tests/GetStockObject.c +++ /dev/null @@ -1,41 +0,0 @@ -INT -Test_GetStockObject(PTESTINFO pti) -{ - /* Test limits and error */ - SetLastError(ERROR_SUCCESS); - RTEST(GetStockObject(0) != NULL); - TEST(GetStockObject(20) != NULL); - RTEST(GetStockObject(21) != NULL); - RTEST(GetStockObject(-1) == NULL); - RTEST(GetStockObject(9) == NULL); - RTEST(GetStockObject(22) == NULL); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test for the stock bit */ - RTEST((UINT)GetStockObject(WHITE_BRUSH) && GDI_HANDLE_STOCK_MASK); - - /* Test for correct types */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(WHITE_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 0 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(LTGRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(GRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(DKGRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(BLACK_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(NULL_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(WHITE_PEN)) == GDI_OBJECT_TYPE_PEN); /* 6 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(BLACK_PEN)) == GDI_OBJECT_TYPE_PEN); /* 7 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(NULL_PEN)) == GDI_OBJECT_TYPE_PEN); /* 8 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(OEM_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 10 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(ANSI_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 11 */ - TEST(GDI_HANDLE_GET_TYPE(GetStockObject(ANSI_VAR_FONT)) == GDI_OBJECT_TYPE_FONT); /* 12 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(SYSTEM_FONT)) == GDI_OBJECT_TYPE_FONT); /* 13 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEVICE_DEFAULT_FONT)) == GDI_OBJECT_TYPE_FONT); /* 14 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEFAULT_PALETTE)) == GDI_OBJECT_TYPE_PALETTE); /* 15 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(SYSTEM_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 16 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEFAULT_GUI_FONT)) == GDI_OBJECT_TYPE_FONT); /* 17 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(DC_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 18 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(DC_PEN)) == GDI_OBJECT_TYPE_PEN); /* 19 */ - TEST(GDI_HANDLE_GET_TYPE(GetStockObject(20)) == GDI_OBJECT_TYPE_COLORSPACE); /* 20 */ - RTEST(GDI_HANDLE_GET_TYPE(GetStockObject(21)) == GDI_OBJECT_TYPE_BITMAP); /* 21 */ - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/GetTextFace.c b/rostests/apitests/gdi32api/tests/GetTextFace.c deleted file mode 100644 index 4063784fac7..00000000000 --- a/rostests/apitests/gdi32api/tests/GetTextFace.c +++ /dev/null @@ -1,68 +0,0 @@ - -INT -Test_GetTextFace(PTESTINFO pti) -{ - HDC hDC; - INT ret; - INT ret2; - WCHAR Buffer[20]; - - hDC = CreateCompatibleDC(NULL); - ASSERT(hDC); - - /* Whether asking for the string size (NULL buffer) ignores the size argument */ - SetLastError(0xE000BEEF); - ret = GetTextFaceW(hDC, 0, NULL); - TEST(ret != 0); - TEST(GetLastError() == 0xE000BEEF); - ret2 = ret; - - SetLastError(0xE000BEEF); - ret = GetTextFaceW(hDC, -1, NULL); - TEST(ret != 0); - TEST(ret == ret2); - TEST(GetLastError() == 0xE000BEEF); - ret2 = ret; - - SetLastError(0xE000BEEF); - ret = GetTextFaceW(hDC, 10000, NULL); - TEST(ret != 0); - TEST(ret == ret2); - TEST(GetLastError() == 0xE000BEEF); - ret2 = ret; - - /* Whether the buffer is correctly filled */ - SetLastError(0xE000BEEF); - ret = GetTextFaceW(hDC, 20, Buffer); - TEST(ret != 0); - TEST(ret <= 20); - TEST(Buffer[ret - 1] == 0); - TEST(GetLastError() == 0xE000BEEF); - - SetLastError(0xE000BEEF); - ret = GetTextFaceW(hDC, 1, Buffer); - TEST(ret == 1); - TEST(Buffer[ret - 1] == 0); - TEST(GetLastError() == 0xE000BEEF); - - SetLastError(0xE000BEEF); - ret = GetTextFaceW(hDC, 2, Buffer); - TEST(ret == 2); - TEST(Buffer[ret - 1] == 0); - TEST(GetLastError() == 0xE000BEEF); - - /* Whether invalid buffer sizes are correctly ignored */ - SetLastError(0xE000BEEF); - ret = GetTextFaceW(hDC, 0, Buffer); - TEST(ret == 0); - TEST(GetLastError() == 0xE000BEEF); - - SetLastError(0xE000BEEF); - ret = GetTextFaceW(hDC, -1, Buffer); - TEST(ret == 0); - TEST(GetLastError() == 0xE000BEEF); - - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/SelectObject.c b/rostests/apitests/gdi32api/tests/SelectObject.c deleted file mode 100644 index 0df71e9837c..00000000000 --- a/rostests/apitests/gdi32api/tests/SelectObject.c +++ /dev/null @@ -1,152 +0,0 @@ -INT -Test_SelectObject(PTESTINFO pti) -{ - HGDIOBJ hOldObj, hNewObj; - HDC hScreenDC, hDC, hDC2; - PGDI_TABLE_ENTRY pEntry; - PDC_ATTR pDc_Attr; - HANDLE hcmXform; - BYTE bmBits[4] = {0}; - - hScreenDC = GetDC(NULL); - ASSERT (hScreenDC != NULL); - hDC = CreateCompatibleDC(hScreenDC); - ASSERT (hDC != NULL); - - /* Get the Dc_Attr for later testing */ - pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hDC)]; - ASSERT(pEntry); - pDc_Attr = pEntry->UserData; - ASSERT(pDc_Attr); - - /* Test incomplete dc handle doesn't work */ - SetLastError(ERROR_SUCCESS); - hNewObj = GetStockObject(GRAY_BRUSH); - hOldObj = SelectObject((HDC)GDI_HANDLE_GET_INDEX(hDC), hNewObj); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - RTEST(hOldObj == NULL); - RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH)); - SelectObject(hDC, hOldObj); - - /* Test incomplete hobj handle works */ - hNewObj = GetStockObject(GRAY_BRUSH); - hOldObj = SelectObject(hDC, (HGDIOBJ)GDI_HANDLE_GET_INDEX(hNewObj)); - RTEST(hOldObj == GetStockObject(WHITE_BRUSH)); - RTEST(pDc_Attr->hbrush == hNewObj); - SelectObject(hDC, hOldObj); - - /* Test wrong hDC handle type */ - SetLastError(ERROR_SUCCESS); - hNewObj = GetStockObject(GRAY_BRUSH); - hDC2 = (HDC)((UINT_PTR)hDC & ~GDI_HANDLE_TYPE_MASK); - hDC2 = (HDC)((UINT_PTR)hDC2 | GDI_OBJECT_TYPE_PEN); - hOldObj = SelectObject(hDC2, hNewObj); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - RTEST(hOldObj == NULL); - RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH)); - - /* Test wrong hobj handle type */ - SetLastError(ERROR_SUCCESS); - hNewObj = GetStockObject(GRAY_BRUSH); - hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj & ~GDI_HANDLE_TYPE_MASK); - hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj | GDI_OBJECT_TYPE_PEN); - hOldObj = SelectObject(hDC, hNewObj); - RTEST(GetLastError() == ERROR_SUCCESS); - RTEST(hOldObj == NULL); - RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH)); - - SetLastError(ERROR_SUCCESS); - hNewObj = (HGDIOBJ)0x00761234; - hOldObj = SelectObject(hDC, hNewObj); - RTEST(hOldObj == NULL); - RTEST(GetLastError() == ERROR_SUCCESS); - SelectObject(hDC, hOldObj); - - /* Test DC */ - SetLastError(ERROR_SUCCESS); - hOldObj = SelectObject(hDC, hScreenDC); - RTEST(hOldObj == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test REGION */ - SetLastError(ERROR_SUCCESS); - hNewObj = CreateRectRgn(0,0,0,0); - hOldObj = SelectObject(hDC, hNewObj); - RTEST((UINT_PTR)hOldObj == NULLREGION); - DeleteObject(hNewObj); - - hNewObj = CreateRectRgn(0,0,10,10); - RTEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION); - hOldObj = CreateRectRgn(5,5,20,20); - RTEST(CombineRgn(hNewObj, hNewObj, hOldObj, RGN_OR) == COMPLEXREGION); - DeleteObject(hOldObj); - RTEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION); // ??? Why this? - DeleteObject(hNewObj); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test BITMAP */ - hNewObj = CreateBitmap(2, 2, 1, 1, &bmBits); - ASSERT(hNewObj != NULL); - hOldObj = SelectObject(hDC, hNewObj); - RTEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BITMAP); - hOldObj = SelectObject(hDC, hOldObj); - RTEST(hOldObj == hNewObj); - - /* Test CLIOBJ */ - - /* Test PATH */ - - /* Test PALETTE */ - SetLastError(ERROR_SUCCESS); - hNewObj = GetStockObject(DEFAULT_PALETTE); - hOldObj = SelectObject(hDC, hNewObj); - RTEST(hOldObj == NULL); - RTEST(GetLastError() == ERROR_INVALID_FUNCTION); - - /* Test COLORSPACE */ - - /* Test FONT */ - - /* Test PFE */ - - /* Test BRUSH */ - hNewObj = GetStockObject(GRAY_BRUSH); - hOldObj = SelectObject(hDC, hNewObj); - RTEST(hOldObj == GetStockObject(WHITE_BRUSH)); - RTEST(pDc_Attr->hbrush == hNewObj); - RTEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH); - SelectObject(hDC, hOldObj); - - /* Test DC_BRUSH */ - hNewObj = GetStockObject(DC_BRUSH); - hOldObj = SelectObject(hDC, hNewObj); - RTEST(pDc_Attr->hbrush == hNewObj); - SelectObject(hDC, hOldObj); - - /* Test BRUSH color xform */ - hcmXform = (HANDLE)pDc_Attr->hcmXform; - - - /* Test EMF */ - - /* test METAFILE */ - - /* Test ENHMETAFILE */ - - /* Test PEN */ - hNewObj = GetStockObject(GRAY_BRUSH); - hOldObj = SelectObject(hDC, hNewObj); - RTEST(hOldObj == GetStockObject(WHITE_BRUSH)); - RTEST(pDc_Attr->hbrush == hNewObj); - RTEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH); - SelectObject(hDC, hOldObj); - - - /* Test EXTPEN */ - - /* Test METADC */ - - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/gdi32api/tests/SetDCPenColor.c b/rostests/apitests/gdi32api/tests/SetDCPenColor.c deleted file mode 100644 index 32cc26a124c..00000000000 --- a/rostests/apitests/gdi32api/tests/SetDCPenColor.c +++ /dev/null @@ -1,40 +0,0 @@ -INT -Test_SetDCPenColor(PTESTINFO pti) -{ - HDC hScreenDC, hDC; - - // Test an incorrect DC - SetLastError(ERROR_SUCCESS); - RTEST(SetDCPenColor(0, RGB(0,0,0)) == CLR_INVALID); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); - - // Get the Screen DC - hScreenDC = GetDC(NULL); - if (hScreenDC == NULL) return FALSE; - - // Test the screen DC - SetDCPenColor(hScreenDC, RGB(1,2,3)); - RTEST(SetDCPenColor(hScreenDC, RGB(4,5,6)) == RGB(1,2,3)); - - // Create a new DC - hDC = CreateCompatibleDC(hScreenDC); - ReleaseDC(0, hScreenDC); - ASSERT(hDC); - - // Select the DC_PEN and check if the pen returned by a new call is DC_PEN - SelectObject(hDC, GetStockObject(DC_PEN)); - RTEST(SelectObject(hDC, GetStockObject(BLACK_PEN)) == GetStockObject(DC_PEN)); - - // Test an incorrect color, yes windows sets the color! - SetDCPenColor(hDC, 0x21123456); - RTEST(SetDCPenColor(hDC, RGB(0,0,0)) == 0x21123456); - - // Test CLR_INVALID, it sets CLR_INVALID! - SetDCPenColor(hDC, CLR_INVALID); - RTEST(SetDCPenColor(hDC, RGB(0,0,0)) == CLR_INVALID); - - // Delete the DC - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/SetMapMode.c b/rostests/apitests/gdi32api/tests/SetMapMode.c deleted file mode 100644 index 79ce7497bc3..00000000000 --- a/rostests/apitests/gdi32api/tests/SetMapMode.c +++ /dev/null @@ -1,34 +0,0 @@ - - - -INT -Test_SetMapMode(PTESTINFO pti) -{ - HDC hDC; - SIZE WindowExt, ViewportExt; - - hDC = CreateCompatibleDC(NULL); - ASSERT(hDC); - - GetWindowExtEx(hDC, &WindowExt); - GetViewportExtEx(hDC, &ViewportExt); - - ASSERT(WindowExt.cx == 1); - ASSERT(WindowExt.cy == 1); - ASSERT(ViewportExt.cx == 1); - ASSERT(ViewportExt.cy == 1); - - SetMapMode(hDC, MM_ISOTROPIC); - - GetWindowExtEx(hDC, &WindowExt); - GetViewportExtEx(hDC, &ViewportExt); - - TEST(WindowExt.cx == 3600); - TEST(WindowExt.cy == 2700); - TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), HORZRES)); - TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); - - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/SetSysColors.c b/rostests/apitests/gdi32api/tests/SetSysColors.c deleted file mode 100644 index 64e3e27e222..00000000000 --- a/rostests/apitests/gdi32api/tests/SetSysColors.c +++ /dev/null @@ -1,29 +0,0 @@ -#define NUM_SYSCOLORS 31 - -INT -Test_SetSysColors(PTESTINFO pti) -{ - INT i; - INT nElements[NUM_SYSCOLORS]; - COLORREF crOldColors[NUM_SYSCOLORS]; - COLORREF crColors[3] = {RGB(212, 208, 200),2,3}; - - /* First save the Old colors */ - for (i = 0; i < NUM_SYSCOLORS; i++) - { - nElements[i] = i; - crOldColors[i] = GetSysColor(i); - } - - TEST((UINT)SetSysColors(0, nElements, crColors) == 1); - RTEST((UINT)SetSysColors(1, nElements, crColors) == 1); - RTEST((UINT)SetSysColors(2, nElements, crColors) == 1); - - /* try more than NUM_SYSCOLORS */ - RTEST((UINT)SetSysColors(55, nElements, crColors) == 1); - - /* restore old SysColors */ - SetSysColors(NUM_SYSCOLORS, nElements, crOldColors); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/gdi32api/tests/SetWorldTransform.c b/rostests/apitests/gdi32api/tests/SetWorldTransform.c deleted file mode 100644 index 7aa79d5cdea..00000000000 --- a/rostests/apitests/gdi32api/tests/SetWorldTransform.c +++ /dev/null @@ -1,20 +0,0 @@ -INT -Test_SetWorldTransform(PTESTINFO pti) -{ - PGDI_TABLE_ENTRY pEntry; - HDC hScreenDC, hDC; - DC_ATTR* pDC_Attr; - - /* Create a DC */ - hScreenDC = GetDC(NULL); - hDC = CreateCompatibleDC(hScreenDC); - ReleaseDC(NULL, hScreenDC); - SetGraphicsMode(hDC, GM_ADVANCED); - - pEntry = GdiHandleTable + GDI_HANDLE_GET_INDEX(hDC); - pDC_Attr = pEntry->UserData; - - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/testdata/ReadMe.txt b/rostests/apitests/testdata/ReadMe.txt deleted file mode 100644 index 2c6129599f2..00000000000 --- a/rostests/apitests/testdata/ReadMe.txt +++ /dev/null @@ -1,21 +0,0 @@ -We can not test follow format yet. - - -Follow format need be genreted to complete all test -*.fon : Font resource file. -*.fnt : Raw bitmap font file. -*.ttc : East Asian Windows: TrueType font collection. -*.fot : TrueType resource file. -*.mmm : multiple master Type1 font resource file. It must be used with .pfm and .pfb files. - -Follow format have been genrate from test.std with fontforge in cygwin -test.otf -test.pfb -test.pfm -test.ttf - - -How to setup test data -Copy this folder to same folder as gdi32api.exe - - diff --git a/rostests/apitests/testdata/test.otf b/rostests/apitests/testdata/test.otf deleted file mode 100644 index 4dbc7d634ce4be6364b2005c0faf3b697a555863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266784 zcmeFacYGYx**`if`AEkj6EJ3sfCZLfz!-Pai|NH++925{>N;4?%qrHFJ^RIsCXSopgLOOdap;5hOx zcwfV*5}R_|$+`otWL*2izqz!;VQ}0Vv+fN4_?q;v5ZL(Q>~CP1a!HA`@DDyS`x_yk zD&K5KEN*;pVo!T!WW(Z}+z-<}82><3KKq-mN?09==3%ZgPDxr%p(y=N!M=03d9a5Z*lsqIcy29xDu3d;f81U(xt#c>qKRX?x(5xn z8a}7xvf#5TxHa&NYhk$(mhxfCov>Uuahw|1s}|NIe&f|WXTcE^!*LZ&d~f2Ib0^M4 zqQpH{k)y53$=2+s(=6BSEUB*4tSG9?DbXxiu;5`$ZGKgr=Ec&IsuxQucIIdn&0CuYxD9eHHq~acr7g{s)L0J&FUO&R@I6%nzcEV zRrw`5HHG@ErV0+*OIEda`zJP1MMV zWBT4dzg4T@kf<1 zc|-osn*T!~DR~M>Nu^Wyv}xD;?Aq(5Uq9mpVdjnLH{CqB?JeqCZ@XP{$DMcGJ?ox( z@0)%9oCoI4o4;V;qQy(DZt&nk4?ptgV~;=aIqKCmMEj*!V zPyCx~x4!4Ni?Eb9xBsty&=gJKR4Nsjs8Fgz>r*jyEjMaE<;2ivb1dtWUC)Ei$?&;D<6#Xt7!t@Tpf zd$)3I=Y^l$3g5luTKLOx*TLVU)6)~>1-Ej^ziPjpo0|Au%3aINXLk@I146To_T)a<=I77Ulw0|dGPAXqyIm;M-%7q>dnci9MFX%b5o#)N#RnV9h(X* zPa4$eYoK4amb;Fd&Rx&V;BMdq_}w>h>D*1+&CsXZ1!rIucMo?jw3xHG`{8Un0C(v; zXfYRX3*l~E%q`&_R6n+(GUbT)`vU zQLZ_09k~e9S$&o_pz2ZuwSj^&h#7JGgCs;j;3$ zyuWiLC0ylyadlOkLFTOWoa;NzYvjVoT(h0)oXYJIx#4TMeF5&Uz@3P3=WgLHv~w5l z;C|7|{pMcovmx%!bGa|~asOD%eRG%_dzAa`q$+u-ik?^f>;=_~cT_jMs=Dpxs=HUI zX8%exe}ihtZ&iW@cM ze|b#x)hX3KpH}_*4VCg@68COW%4b{3&TscGAON zCOuh@^z1*9UM@>o{@+P!YLYfyPTJm>l=VYWzB#FsBvm<+>eG^%q$Jz)BzGvucVkkx zIjQB=q|VNyzPpl!`;tayCmkM1Iypb--2SAuA56M< z_*XS`s{3zFft6#=3$O{ir@nk$>d(|d2sWJ|Yn7GoOoB2eYqMpoOV+NEwen6`dwHf@ z;FEKddoMpZ{-LaWLf)v{0h`_p&$aM;2A-?s9m-3x_Pm^_EP+MXle{T-y}Vl1UVnKy zEc{K*ynF%n`RSDbuR3+1tX&~zz(K0%QCT|{fKNOnXI>eWweLtC*hNOWoLKjoyiq-+ z0X}_R)&}GZdT^V2d|#hr%ruFxRbxS$)a@4U6aK}(lvKa z7MG-JW=$3s#5DIz78j;#?wu^c$K(-ZzHr}9Z_WPk14lLYPZnV}b0&+h^9Lr2@Y%V% z`jf9t2=n-*vPYQD&#+D&?E-#=`J<^52fmQMy!3m$u!vVLcujq!P*}{5-=LoIrm%#+ zeCcvPm|=Z$I&8O5^B{bBqWFmBA^x)FyCmV^#G1sf->7+nSATgzow`n#VLS(G_N8kc zg@ZV+y7XCDy5=!{hVQItqWCyJ<1FmtGdN*Szy|NY22gwwif@vM;!}y@)QRHKL{W9= zAF#8h`G}k;JOeAvl1mq1m(M1OaQskw4tDwO)wR!G{i4L$7hnVU`oxjE2*q=-0Tf^2 z$FtS{t`c5Od|Y+u>jmkWSFRQlhp~)T-?o0NTX^;As*4M5(Y(g1&mB_}pRk;l?>Z^G zKJm`iiR-cz-RN;j_sT#dZ7))8yLq{N+c# z|C6wR|Bk515@BOvBh|!4oA?>F$?Z4ux!Z&-{P^HjVJok!%@elq%0r4)*v_j{m#VK+ z2pPP7W+wmLSMpTB}nBn)r4qiPr|H?`si&vAOvFn6vUMpWCG6Dufz7t}GU6dFAQx9|Rq*PB|#QFVyjQ8A3h3UrrSo_|7Sfyjt0!zEURW z|EI=w8vdu4*~EXVCSk!iaWN8gxYNX|Kbxbd1@qNaKZoCBxmx@HidJ6PDc>a6etOf+ zkDa>wt>Az)6BRgJfm1%+t)fyiN*3pp?#G2IZ>z5y6`FZ9Z*~bSe4~6!Xoai%?DxME z+IaQigYx4-JHJ^e5<1{+KlVK*bn@!kd(NY>A^HTn5GBQ^kAAE%#;SXmmqB!W=hjwrZmiyhMCeZQyM0#)L^noOjeo5i8vjT zRYG_KY1}YbCFTphi1~sOc^c55j0R=Q7Yy+M8kEtXj0R;iD5F6c4a#UxMuRdMlyTOK zbTlZVK^YCoXi!FjG8&Z8po|7(G$?}!1Luyzx#Mu|IGj5Ur|-n+J8}9>oW2tc$~c4a zMVvu-VlrhkD5F6c4azu!GEQQTlh}j04kxk4N$hbF`=e-3MuRdMl+mD!24yrTqe1zs z>C$IFqoF|=4a#UxMuRdMl+mCJ=3LdKuK_T4CE?S>8I*6lf-@-N49YlzGR~lk24(0K za0X?ZK^YCoH=;oq4a#UxMuRdMl+mD!2IYM?gEG#bj0R;iD5F6c4a#UxMuRdMl+mD! z24zrIpg|c8%4kqVgEAVF(V&b5Wi%+GK^YCoXiz3-Q0CQR^RJ*m84b#4P)36?8k9j< zh6ZIcD5F6c4ayocD5F6c4a#UxMuRdMl+mF4uf!~o>v=RNqd^%B%4kqVgEAVF^Kb@b z2b_X8aR%j?a)D3I!5Nfs2IWgQgL3jjsEh_>G$^A%84bz;8kEtXj0R;iD5F6c4a#Ux z#u=1x24w*a%4kqVgEAVF(V&b5Wi%+GK^YCoynZGcl+mD!24yrTqd^%B%4kqVgEAVF z(V&b5|gUY~<7 z8Hz9Q&Lo_Z>|C$Yy&X_zSuGo@jsG|ZHSnbJ0VBLsOR1v8~#rZmiyhMCeZQyOMU z(_*HygrIlUkNkT~bI)XPVY=qt$>Ji+5dm1j(|knE6rM?(ldHrV(s4L(5xV2h9f$5X zbjP7P4&8C+jzf1Gy5mrkhN3hSrJ*S8P86jH;DP||5wL?t0W~d zuP-i0*Ti|H`*GpQ+v+PvF=acZY=00_wquS6%n^Y(A}~h;=7<1z8AWL*N<&c^iqcS& zhN3hSrJ*PdMQJEXLs1%v(omF!qBInxp(t$~iqgQpHz7a6Olg=Y4Kt--rZmiy1`1_N z*)HVr>T3e(Z$B1xCfN4re@U?IC`v<78j8|Tlm^}nXbn)5maf^v&#<8=4Ml06p(st( zDv!z98`b0oD6N#U)G1SC?UkERl!l@-oVe%|iqcS&hN3hSrJ*Q|*Uv;z8j8|Tl!l@- z6s4gk4Mk}vN<&c^iqcS&hN3hSrJ*PdMQJEXOC*&?QQEaaC9g(N8j8|Tl!l@-6s2v$ z={s@yPMp3Ir|-mk!I&=?^95tRV9Xb6Jqx`7C~+6?Gt3`NohUBkFE9OGFD&BK3tm%S zDHIm-<2R_MyeTZy!pjqr)L!};LTbj{B#asisKBAsvTw9MW+}$H_>?AsvTw9MW+}#~~eu zbR5!gNXOyyofs7^m;7=l9DveJ4)exfrMK#7t=@ zO1nDGeIYL|`YtLI@#=5xA2SNYJc`m#l!l_Tbj*}imacg=(Mm$HO(;Ic&p7)oiqcS& zhN3hSrJ*PdMQJEXLs1%v(zGk&3>2kZ6=BTf)t`KILYT)dl|90Ieg@KUNXH=^hjg5* zb;;UQ;A`6{YcJ1~3w&~pa_{9Q$3K*{PskgUI{>odXO)z4?E{~w)#|*z05DP{u7_nf) zf)NWwEEut1#DWnE{wab+EI3{BBAkwMAejJ6;w63@v0%i45er5vSc5=><_TyS-$82z zS~KMLg*rYjLqKbW`pj2X(3*kP44lLs^94@^%4p3{U;p@JNnnXth)h6$->gAv1}Y-Z znvvk((3+9SfA^ID>O?{bxcBw~iViQ-=q#e9DJ#w)#oI%T2UA`~R@lV9BgQ?{c!4&8C+jzf2xu#HC` z!obg%l=EaZ@!zURSU?~Gfr!gXWGw_0kd+pJ2wwf=33Vz05eP&e5P?7h0ucyApgRuT zaTC$e2M`^hI}Y7(=#E2o9J=GG(H)2GICRIMI}Y7(NXMZ&4&8C+jzf1Gy5oL8cbsxk z{x2bd?l^SEeXkc5@#+Pyp*wE!cH(<*CaExO~- z9f$5XbjQK;a0o;o5YZ`DD_Ncca=w~ug3jS#S&Kjf0ug-iMqw5IrA=6kK*acOa6uHF_u2gu3JkDa>wt>Az)6J$oZ#>ro{E7JrQ zta%54h&v$0L`B3;%_u4&P!WNO2m~S!h(I6$V2A0Te|SXm5PwVk3B45Z`6Ka{mk$Qu=;;})iC?nOFo=~ccOb-}0$ zMqThxp&98oq~nl|dwrr~{5mm9$_idm(u9?$3m*Rf={SkM>>bY)yhz6lc-5&3Wz+@# z6hWgd7fK#2zQH$4TskF8*g~Ap{g0(s7V` z2@?O_HQ6*mD|z>1aY?#n)?{%(OoKp#<|#NEZ%& zsm};^PBx7QM0^G<Thv#|1U=GmNXKQVQ>Mz=D@ey7 z9e3ABq~m0yxmaDhM2QaFz zV!mKBD1*lmb-_r-AstsC)bMd-u~5q^Pmd!Vhjbj$aY)C#ay44Qe8EV^AsvTw9MW+} z#~~fpIi(TlxT}ds;=F=%9MW-DbMtIOIu7YL{uI)2i5WW49fx#WLdkk@0n%}aggnnd z+KG1w(s8_cZ2lFb;}W;V&tWKmbX>~s(H)2GICRG)=DT0V&oG@O|4J0m9fx$BlJc?; z;y+Xxg)q`_NXJ2|fbKYS$DupU$zQf39fx!r(s4+~L8plBIHco{j=ND!evq|b13@|t z={Pm<3CnpI={Th0G$PV*iDnV$IHcneYTl_6930Yd{FveQ!VaY4)Pnh{$Q$W6_3b@s zq~p}Hkd8w-4(YfVou4Pgjzc;Q-Erxfe5B)$ zj#KWv{3OzGNXH=^hjbje;}Y|IOia^_?l`350>b3X_2`a6I<6S$IHcp2OsEu)jzc;Q z={WwoujHwM%Ohx!jx+J<&*msd$MNb_o!leKA5%LSPa1*6lhQF9AsaONaV#l6l& zxL)p;++UOIN%5q&lDK;_!s%F(=w*rIqldr71s=0 zv+r8hbuV3)cb)6H%h$KfNS<-;jE8QxUFa0{3V)jU$jql_?wYy##^pE0ZakSz(jQ1) zpWc>!G5rrW58v|HEq_)2O8w8+n>69=k3k6zj^zAYi`i2)9lk6*8JxkH{F?f z=j^*G?%p`dG;9B?FYmeYp0ay-?)miIDfh0p&pdm{{a?(vXU_IHjydr;znb&I1E~*G zKd|Qkc`liI)7(4eE}pw`Zr4e z1zovfUY#=a)hD$tDJtr;*VdEl0`sQc?Y$YtbthY>{LDEL^M?JA(B46(@$f#szpdRD zh_?7!#15L)TKv{)Y&mndP0T^l+)n0ZPPdD>-43@)WKNq+Z?DZOwpcCJCJSvalEUi7 z0x6pgEB_{GqDeAKX6kv#|1xoz-Dc55)6S`{WD-lAOXsbnM-(RsZQfUS%1Px)6B%^( zgt|KAIr1!dibb9$-$a|^MDj|K#lb_T_>V370Dyo!9R%@+oq)jF=-afuq4$IrdPbmk@ z_I&-0&33EB+|)pwHaA=Iu+vWRL;2>ia(Qgr;_#|X$aN(8W^>N ziNojcI=n8gQ*wG;@N@*2$LVu>EUm^7+d1cuzPF~8)?LXZtk2xt&`RYS)l;*G*zAhi zV>GmvhBTZ|rXx_k{qPA3*a#xiy#i*reaOtefOy{PS*4G!i^JtUu z55f!{qtry5E>hQ|H(PAl0@M1wZ8VL2Sp8<@5ueZJ_XcPzKu!(C-!3{uD-QbQWh8B+ zt!kYZ3a-yqYTM>TgBjDvXwP)Y8`P%ZQlWQ8-v1$_6(Z8-IT}|DNULQRjBJwp|az?fM$d@$YCnrkZhz=j8Z+(99 zS0oe)hJ6t#dPpSZ6@%Wfi}Fb&q--1O7+XRQvyZovQ$=sbhECISeXwX|4 zltR8*1uB|Fm%4l&)tvJj1bXQfN+Ery% zuG!Y#w!FI9Qe`UBH5jYvcIG)92BY0cO;)qh?5ecan;Pn<(LnT#)&@r{EmoE(ud9_L zqO;c-8yl#@UR_0;PRUbma=M!AZg-PI@2F$cnNkidYQ5Jf8YQP#?`!fm`Dte7k+H=j z(i~`$I_O7Zr%1pT@cRSZyMjZOJ(gi-2aB;TUteoibEm)4-3vE63lPs9r!UeLh)6ER zV!@#UfjDKUqQ~PCJ(P)}$QWrm+9O}P?_JU33wk`!Hh&xIqVh+n>_o}v));JE6RDKS zZBAx%I^ERZbTZPwEUZy7z@eFa4$&r=1J$kNfiefRr_`}BvB;8PY_gSC+3k(>c6;eg zXJci#$=GDlG3rjSu`ht=oV?3a>E6(y>pAP zIJ+pDZ63;|auQTk(c-a478 zni-W+K4lk&&b+m2ple^WMH0Qx#0MOHXTaH~Z*dG-qt2Lf$W4`HsaqbYySHwg)8T?g zWsR=FVa~(Q7%VE^Uo?&DQt94g9a~-AT@+PO-=CnJjq!;3=7~PzrXC>|?w?dj;eWhR{O>;Wj ziRi%YW_CwqePflQ#BFoeGAnhZvf^+>SB=*hHhG-~a^7$s+DF@4NsGC|A8H9T+d3LT z&^q{`@$l^>fg`&8S)J7CCEIpwFcv~L1U-}^;MmpB=Nt&_iyUZ<`sIbc|03|!`yFwI zV{o9QCD1N))6-)X0@uLr4pL_~vHXWop2Ot(SvzB5KN~dl)O1kgT4?BOK}*o=xBH-G zdgnRr44Lm#+2rcTp(AzSH$KrE}j~=Z&_vjIuwfEs4MEC zN3EpU&~E95;OUDj5^;sah=-=N=sKHrIY#XLp`Nah;zK)rzSHl3F4eV1&)hwB$sKa} z+|&y%VW;GlnAc6iZsK)&nUB%#l>Yj??vYk1iJvj@20I85=gHo-v$d!EF2CFFroVoU z*$7i^2`TfU3P(l5w(;d;P2mGo%8jp7$IJaCHmb}kQd)+IK2jg3mFPXqq|s{^n}VAM zUi*_?7U=QIeA_TdYp77pSV?tjiNDy|;B2%unW>_;le(ZTSmke$ysnI(#bfh2M60Cp z!7VA)OLj)>BC#AP8q5f83+~WWYiaQslG9MNQ`Ayr+6ss3HAYruWUjoOt=O=d0a)ONxL=RJ+hkU`l5#{7A8W2f`tJB*a zrn>{=Y{VYatnh{l>pTYIRB?V{0?A+{^h(Je_H zcu;xzd!!>Ak3~9Y%MeM_J)cO!9wI^O=3!xXGeqfZWh zw|HO#6Dn`j^)%76y$*2^VKu(`aD%DAUdL)_;QN0PRuC`ktKC&QWE&3c4UdLTvh(b{ z#*gzuj-V^zqG^MUZy5|N(%xe7tY3eT=zaXG-5GXu7{kt>eLy$t9F9?u^*%uYwULIF zCJ3IPOQD`p!XR>m@sMOBc9YZSGFVm>KcPHYTk0%z*Rhw`8vpB(37Tq?i#`FZi30{* zbfc9t`SemF3_n(^Vxj>qWdh154Beua%Z#O-1fW%^}?_3M>Km3zl;P=ZR6*=)7gnrOyiV%0nJZauZx2n-v{HY1FfNR!iOGg_Wr zJIDSE%V1l@4Wd%+d+;v>r>R>~(&a4DJ1iZo8r65rmG842rS)Tv5Z9rqk*t=i=4?w* zG0n+Q1Z6t0x}4UHTj=slq*`aFfUti3%s0h6nPq@&^a^eez*E7K-~J9`m&a-w2#7KDHsgpr_of%!*8mN1-=i%PKb1 znjKcB#Rg~AR`0U0sCxzU%_-~Il3*TN!Iqkog&V0mHEm1X3mM8xIE~wa+AdlZWd}*( z{&GWro_M8c-qctq5)CzfB|j=Z6_<@eeUe=Mu3W-;*=hF)Gfk6kE&HwY7<-3>ql1hw zyT|YDw8xwwXOFc<>a$3FlcC;HMHeX^tBojkE4MuL?8{0jt<(~81JndK-+AA!B5s|xF<3vmqI+fcx~{cv zRGsglCp#cYkyB6f$65fJh{R|(Li|Br&>Nz||3SL#ol-|wg66^_MjQ~~u^xB3s|}7b z=8lPy#cTFkXiP^WhtngvVmte*_gP16BhlW0bMHD#?LCs@4@y4x8@{E+g_L0J4R_b??VMkxEr>mzk(&rwg)nmtr>r}z$ zmQe5`|Gy>qIq^{So}AX4wk&&LsoAPGRV1Qe8>@vV+68CR#f;vfxY4W3zo=Z-{`7|~ zSmX54+FisY!I(Gdh(UD=Q3&=tgtdvmP+QCHBZuDJ-x-Uy273H%A2f~-2|0rV}JcpevL|gkJsz(-bXs9cvYnE8dq@m7S$#~#ZJF&4?J7OEIliryZjO^REgMSe z*3!C_P$_hcwRQ0$`a=b~w*T|tODoP(c`EcIhpKmHw`R9xS&K@jzKP`R-Y98HXjOwl zBqmRZ1f%}6O{~aJ%PQE5KIMj9n)Yh!WlsT9JWO%E%$V|6wX)x&Jg(^0*|T@BHI%*V zc9Hsgac65OU6abP+Y9&T=qEeKXBodYe!%3DEaSs|7GWVzM3V16c~siN_OM@=f58AS z`T%Nk+%xJs53ym%ntMa)VMw?I!4eT@JU6R=sL*y$~dsz8sw{ zpBi1;hRD{T)#kkIbk$SDVzXN8<|0R_uAzu3w<|Gd{T(Kkkt+OmWyG?%M|)5=qRf0( zSvkB;bV0P_djDSe%6QS(FRQ4mOX*|Xp^kQ%_Ln~rIT|kij4}G2NOp-`p^i5C@BfR0 zd?BAtq5(G7C5){W>NW7 z<$%XYF3ytgRc?|`+0MF-v*S#Df_*u1Vb4+X;m)qZwEqpb1-d#TyWB(W5Olji8fYeR zi|m!>j!k_>etxL6V+0T#_Di2(EL0XMeaZ~wHU&m7*DQNn ze&l(1w^>axNGlug?19Gh`jn2QZu>4T{VMh~BMD&7$4)!XI)2W&;R5dW$(6gll~ec2 zH^iVmhnnNNq&`zWwYSE7LT6AyU|v<m zO+AJlnzsAOt&t9L>htsGX>SjSMT1d)3q2sG`s+xjBvK!%^I4l~{Z^l~t3PS?g;y7UKfvARs7;!Fjyk_4{n`RN~%F)el!;rT~DmPcx z(6s6rW4TyN*(=OJN^Dj2jisyZR^}^DGG!iB2ELPsvCv!CUfN#L-?-aNTT^^22JMKC zwE$2A_ttU$?&07uDnB7Nl9(8UCU$RI$B6qN8;0@xFpZ>&UG5X@d%Xd#e*#NPpo#MK zu@n+&^R~D_ZQJtR}!$f=Nb*9x)i-p)H!f9%1AWaRnxNf9OZNUedqM zbF_Tal^D7DsXahk5JlQU)Da+-m^o|=mJjAcvW(jerFpKcv?(?1K+4;P4_~^L5hpbu+W;dyXpuuf_^7Ct~(JQINX28etPF#>XJxpM`gGq0Vr)` z*#)LercFKDkLv)V2$8N;G;H)7<^3<3;=Rdwy~Y%jT!ok zn09X|?Pw$&4PDk=4~?g^i@*bf0nKxhkS%NvJ85BR0uk~VD(V`F*-q+61z_K0a=P6B zYQacf2e1)Mt9Lg#4A$Dt(ntZ|E-#v)mbzg(Cw+;%=mY>45D7-d_ofuGGDB?zbvj6O zc|~n;tqFJptBIE7lA2O`VWc2X8!QTM@KuF%%?9d#Fu}#(0gw!H6^!4`lw!h~JSJ~b z0yVlwe2oEPw2A&^sbnFN)mPn{H;{EQV<49{H-_qo-xLIVjdo>_fIeuBm@ck6y#2Qm zQGM7=#|B>{oz7ON9s0qL$HV-d9ucnX@swk%kF~q|T|L3hHv0EJkf7h^_Xj_hXUM8^ z-<%t0ZtL+6`}(9|aa25Aw10DyDut(r&R6f&*&6Ki4vV`!F}$_VXBr?pwYe-#Ixmwr zT`spX@qkxqcM)S$A8H5yz~*sy>)V|kd!Q+12siqv{6cqXltnxdFO?0Slg^4hMh{NXBh{0jD8!el&Jj~?=CPQa;Q8n8Nv3#d#@vBfMAW0;O-jy*n4zMts3Yg;P()VZ6uTkUakoX(eL6MGPP z1V4536M!2exNjvG+<9r9?3#1=uEaR9i}ldfRMx|yQYVZA1KvpVcx;znev0mLlP=co zYlBhvU4JEA@pxOH7jCO?;^_%70L-BG3sGN~ggd2nM^`B55BVWjt86DhK#~HUQ}I?` zOCSP>SpX<5z)^#39WHm==k+v89%$vn9w1PD={#s1wgg>4Hvp;j07SaI=7Ib{G3tl| z>`&vSHmNm2d)?6e#37`IQL5D9>j|{QVr{L4E(^4l^0WlQ!m0u_&GqiWcyWJ?2k>dp z-CI3i8Gx7@DlGgHr`?%$EcHU>;T5+%k)roDvPLI$CJ4RL1^YLJHifrW>b6kjXUb{f z4BI2tNcm`H^L7JWR!g+O^?_v)^g=pT>j+^v|IoiHQZSVkIsnD}?}7Vl}Ir+_GEBEC%{J5O4N9sR+sHW+RILSPG6 z>DVjd_pk=C;&A4L+XhocbfavjonA~ylLsDkEgRFap^1h)5lu4UhoIIEZA1`8L@@Lh zTf9E84d|;2LtW91w%$%E-*b$F8SoGuDi@z4ozMU^x6pyz-b6^#MsuDF=7Z)W#*Tp=}=DpRz~Zi#2hvQUqF?c50ip$k-e<8rqQ6Y zSC?5UETtA(%na4HWLK^~*FcqjDAP57A!TN)ynQ?^m95*SJ!7Z3N^%vM9?Cx6bQF$m z>8GT_-sR~E^@iJ8!<}?@%fGrwT#EW40orXRPi=na<>zP7HCvant-vX;T!-ET<6C&p zapU`>ELPw0>RD=PCzeiY%+y9JP7q^HT}y4aWT>>y(B=Zf!yci=A!2W~M2%6p^fz8TIs~a#M6-sN(ccHxOyS#Q;D9`~uW*fb<#D z$BaQMRQj^+Jb#{Xdt>=dwv|4e%CaE%uG^#A=Naju`+CUf-I4cpo=kL#&Y&Y?4^oGZ znB#B-fjk1h1dw>Rq-&(ilioL^H%=aY!wJJ482rG151J1urkpX1Y&5SkZ_Uo%<^&$$ zp_C2!!gcZW@%85l&&H`w3j3i&@33`Q&YRDShR%o1=bl*`g3;|mDQDS%-N7@VGi66N zwd{y*im&pPiPhHH2D8;{2TI4`B-%<{Ms#az>uAXdsHtIzoM|3BZa!;1r`^5QMU5#t zU8VK9VqLMTpt*pGF4DF6MD>|CP3uS*^z=sCyE}RUyBvd5N(C6Nr@XDKwbWZ|p*kB` z-&nFOv@W>*aNaoydQ}%0-Eq-*aP-iqbTQ{p;&f&meqGAQ%E)rPzCV+uZD%{Jg{E!# z(rnKbar4m5XnjV|h-x%0UX8<&AY^ z4Hfn>e<|EG50S!}`a(~(C#R!mcRh{R$)37>p5bn|e-*7IHO-xp$?~civg)&fI|hpq z0asUbuW85w7wC{@q`Ub*%K`KL;z8QbIuW4&vz8`_WH{E@9U2LZ*oLb662VK!UTrk9 zF|z@x%614TSRUZ8wF9-oj*%z?w$SW&>izn#p0-tx;qB*|j`vYHQ%)t#!EiVnA2`zA z_4U_O@{-ZoqyCZM-6L|U%%2!ZfUh79kax)k$j}H73j3&>C2u6dwfo#7ZB+i5aQRD&s1@1$a&k(naxFr`rsm$Z@F%NZyfdO(stdNL5 zLvdf5*e;$CgA!0nQcUzhz$1zf)Vkdsi7~T2+)P_~ovt{JE?20zGhPvI%>ga5t zUdiVpU;X+Y@^twoxtPkO@*@P!w%6;U2al3~Cjg;)$P09qp9Wn7ct3zMsJwv5dtM^_ zwq4%tIBeqyNVLsF+Ksym9eOxKkRr6`+pHZf+BTm^^?}B4Q)#t6&!6qF01s(oSq-%& zlfKbh=hRW96E2F~39-3Dd0I(VxXOIHoizcqr_9@Mui;Tf3sP2iwr8@}DN{0-lK=?o z@Yv`d#vdZVoSw2_z<+%pEb)5j0S`GU?&*sii67P<+Sx}nzbln*Bc?MuM%FuNuA7v$ zl{V{xbj}%4)KVap8LFfzdyT;f9HP@nl`SWT1q2Be2!|H3huTPSpv+cLm*`|{mGre2 zlp5tJl7QT;Mrx`jcPLLkq9nbtqS8`ZZ>Tf?6K`s8yIs(9=9bmhRAf6HR)fn90kK^V z`?mw23S4Uiu*mhM#`=;%o3pql^^oOqQL zgUip~Pme3BNSduus)*JkVrBT%|Dk+n*OThCJ!{TYx78)a zN_3ZrykEZ85w_8RIs#Fgz12O|imGqUIVmX)C4wnt)M(8s6H|#IuZvk1=CEs#Pez0GD z;M-4tg#ClOiX7-}J77K7GT40BdxoZ2R}ssK{V>e+0=VjBr<@1-<0okIDbjMb;`D}2 zS{Wim(PEHUl+;7>SO8iXJsBw5YuOhYjrH{V_fuaV^OC?}-Dpl%PM6l1SLSq@Z4PI- zPG8|FbQMI(da8k->j?BZ`Uy`^omI!x2P;`a^)7$vGR+ zW{p^Xy(PFo=I8FJ?Y9mGh6CO0%>%S~2uAO6!PxUBKMI5!^E!^o4P!PXI$k?wxRU#o zyf(!8k9z&VPQZ+rDF1fsGZO9ecH6tDJY^q=LLeKKLQZJaMV}QEOg0FMT%tQ-h*(;z zbjU#5&@?l50#1N?eCr*|MPL93LqVl$Tqj>6&s2_&&rqIHDwNXirYkQgf7dA5Hdwx0 zxt(s?2HUz^Ak1(&iOrsXDGW{K2D^^hsuKHkxnZFF;P~H(IX_U?SwUARQ(O@3%J z?oG&57(JcR4tO^7YA|k0$VC!=;iiZ>M6uOOV>Xgj?x=36uc5C!xh;c~mzxTGMJtqh zr1f2ZZUDbzGUyzZ`qILuYBp1ymE<;76*;qLqw*{%scp#fX37He8-1-z~3{kBnXS$g^_e*b`l?(H>7f9k@s!QXjSM zr>zG_&-to1*Y*^~Kw=@$SNn3_A_XT`L^l`ECJU*SY8>?@s9r7@ZzzS&lhwMiwe4$Y zEJt)J?~I?EK&)Lh3Wxx-81CB|D{AWQQnJSN-{;DXvGq#vc>cOaA{$L_#Zcv5+umjx_L8<>EF5itQ2RjL?!1n?jvRM>jmcVC;AqMzv99aS9mqLn**5^~ z=s9Wse(5~4aZ=bD3ec=g1hiC9PmHD+BLw6zfjS>;^pc`bv8}uo?lHrM5V3?-q{3IuwX9Cq7+_fdemYjG_JbS3}po4Zh$$9&+ z-Qn}$^F=4t!O%fs0l=MT+9>;#XOF*CiuvO}%=lSMgkiInkwfm?U2UUu?7quC5Flt{ zK+s-F^}QDv3HG$UQF?Z58&#VBY>AVCH}02-qK!fPQ^u+-KxirtEBBIz9s@v~XUbY; z7Ar(EaCCN$9pt^wbtoxJS;6Mo=2;$hR(Wed)>O7(B>S{!*w$m~ zb+kL$#5O>j*QA_h2lx5U`_2^{T_36PH3S+0m5~a-B^{y}lmt#VnF+YlxMzYxD34ma zpyZWGI}7~0|ZDUhmrf{r;S@&i5Qcjx&t5rFb*0?~YuEM5wbx$T zYp?BYZP&5g+O6ICW#7jj8ykZS<}{iZCD9Nw_(>9DVle7q9yERq{sw=um*#$Hn&-KD z?mq9&`~7H#VaQQt^5I$gSi*JX;bzgno1JFKn_BacOLrm&L*a&EJ z9AQx07Wc%0xX&oT%iopsA3%DW$xInBStXAlJ>5>3jVB9=XqC(2v3QL>24E@%ilG;J zQz;^bw|iA@rM&?Xu}$PTC}@m>p?89g-%oZJ$$mgJLoCD#CU~|QZ7nU<25c%Px(C~l zjds|bl+9pwx%XoGdN3xHY$K~@E6sJVdQ5J>STK2=)F9f%*ceJ*aJb-A$>H9^7Ih!G zjDHYwAVlV%Il*G)uLuGgk!Qml;xqR|*-dd>xHs6t#_&8a$=@6YhQuR&ic7~39RQHR zk892&$?K5%D`^h6LO^e2-r!ziaVb!6W|xJ*r-OjcFtE_@hhFfxDHd!}*$F1kvX6b2 z&5xC=xWU{7Rp4_0+k%}TsX2s8+%|t|P;SS&&8uIaDAbD%P;=cTCDt-%NwIib zi+4zj^SKENdYcRR$9hmf)~R5+)?tA$ARNB&PbAad~dI`Jb` z+#;@75H~~IC;Cx;)<0p)28R42>@+*-9$|Zd-~m4c)(z(eHb?TA@8`o-4bbY`g&Ef} zcHRR~3u7U<>=yp6xJksniQDn*+i1vn-kX-PXh`2uL2*OycQF^=Un@R|5}iVKqz?;0 zbX^!+)GvVsmm@l6?KX7b{OiaXHH8fwc;6zDJUXQgx>b-x7N5r31~Ae(id92Adc;IF ze?oF7Dkx8o%`AC^B{@Z(l&L?j`u5n5*d!o2Lx54O*UV>H^y zC8B%)`+!bH0j?|T=lXghF)j(S1O`9ijkvq$tJPyA5J9*+&<#TiPfK7jlGRe6_G&4p ztwUNIv7)qQ(molT?1tq%jb-&7bktQ{lkC&=#i9B8gLv1phx%#|ch8pQ1Pb~sc6r@&>d=TU=KYdPDDWgQ>}bXUUJDIW(nh)YedvziIb zM0r~#@O88s&ZEf%CS~J`@n7v(^P{n?ROpis53q*j`uRD}FfYD~5R?F^eN{lz^X9WGb?s zF*UVVuSZQfs-Caom2uq&6t& Fe*xr-bddl6 diff --git a/rostests/apitests/testdata/test.sfd b/rostests/apitests/testdata/test.sfd deleted file mode 100644 index 67355df2cb4..00000000000 --- a/rostests/apitests/testdata/test.sfd +++ /dev/null @@ -1,6612 +0,0 @@ -SplineFontDB: 2.0 -FontName: Test -FullName: Test -FamilyName: Test -Weight: Medium -Copyright: Created by Magnus Olsen 2007 with FontForge 2.0 (http://fontforge.sf.net).\nThis font is only for ReactOS Testing kit \nand is complete free -Comments: 2007-9-30: Created. -Version: 001.000 -ItalicAngle: 0 -UnderlinePosition: -409.6 -UnderlineWidth: 204.8 -Ascent: 3277 -Descent: 819 -XUID: [1021 430 2056157642 9136070] -FSType: 0 -OS2Version: 0 -OS2_WeightWidthSlopeOnly: 0 -OS2_UseTypoMetrics: 1 -CreationTime: 1191142788 -ModificationTime: 1191145913 -PfmFamily: 17 -TTFWeight: 500 -TTFWidth: 5 -LineGap: 369 -VLineGap: 369 -OS2TypoAscent: 0 -OS2TypoAOffset: 1 -OS2TypoDescent: 0 -OS2TypoDOffset: 1 -OS2TypoLinegap: 369 -OS2WinAscent: 0 -OS2WinAOffset: 1 -OS2WinDescent: 0 -OS2WinDOffset: 1 -HheadAscent: 0 -HheadAOffset: 1 -HheadDescent: 0 -HheadDOffset: 1 -OS2Vendor: 'PfEd' -TtfTable: cvt 8 -!$MDh!/Lt+ -EndTtf -LangName: 1033 -Encoding: ISO8859-1 -UnicodeInterp: none -NameList: Adobe Glyph List -DisplaySize: -24 -AntiAlias: 1 -FitToEm: 1 -WinInfo: 0 56 20 -BeginChars: 256 177 -StartChar: A -Encoding: 65 65 0 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Back -Image: 403 117 2 1209 0 ffffffff 4003.26 11345.9 56.5031 54.5608 0 -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,dmHsK8o)Jais8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s15eQVl-H=cd2Xks8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Fcd./nJV/T- -_o'Cls8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -OcbcLG'9XUU]:Aos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8U!S_fU!BP*2!nlK\ELs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s7#OI`PogEdaJ0qs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W+aQ'H9+Dm-@Js8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8TmM^l"#,WMulss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s3oHGF)uDJH$S6%h>dNTs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,)ZEe[uGGqI=s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8S+>NaZ@)R@0KCs8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!Y-+pNG':$kY5eP%s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!`5KT1Ci!p(Ct[Lps8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s.Q-[E,]d$Z*F?/s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VKRm;[,cB4kkUW2Tars8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s7#OIp\4F^s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8S[^Sn`"T -X/i<$s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+]Oc`aJ=Fl$S -qYL'gs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,Pg"F<^`9-4Es8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W+^P*0?dA?`;Bs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4,ZM -?=$rH@:@:"aoDD@s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s7Q'XZ*CR4W2Sb:j8]/Zs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s7#OIG'8%>A7XLV'Ms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,<`PmObKr:iHs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+rVP[$\9Q>&ls8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s*fEG;c?VWOcf\Ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!Yct?ZI!iE4\,ZL. -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!S=H*@8P+8UHiO-Gs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,6^Vs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s.5gR -8kM][>?g"BhuE`Vs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8UHmd'U0eUnjfKOcbBQL3\&iE,]c/B4kacA8>sr -EcQ2CF`hhLF`hhLFEDVFEcQAJGCP*lPEV3?\@Cbdkl:\_s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8U!S_dd1dKnY6\s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s,W5%5!D/JDJoLSs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,np\/93Ajo-WPa%F4s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V$8i3KYoOH>Q=C2-^I<(]bT84Z9B84Z@8'?g;c?V%?XIYeD0^DP -NfK-jSXlpdY-bRC[^NWS\@B/_]=u"n^:q=q^:qCu^r+(-_o'C0_o'."]Y;+obfn;ag"GlanGiOg -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!KnY4j@q30a]`8$3 -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+:DJhX%5(\B^RVs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8UX"eVAp8H[C*tMi3FKM2I1J -O,o@5]"7qAs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,lp%<$ -9MA.Sp\4^fs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4Q)Y91qoO9ME@A_uKc:s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+tW2P#gHCC:k -kih6(TqRX4P.\H?rVc]ps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!jlPTp&G'ls8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s4,ZMAnGXtF`m`as8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!TV.r>4$-YN>Q=a's8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8Vlhq#CBos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r;?Ih:f'PJ7'Eet -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s.Z6^JqATWY-+:bS;E)Zbfn<2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!qYL'RlK[Bgio8tWg=k9(bKIQ2]Y(ni\@B&\]=ZkRh#IES -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8UQsdpccqF`hj,s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s.H$X3B9*'>$Ct+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!q"XXGjlP(Ef#u7[_83t"]=YYc]"5Ja -\$riR['[*CZ*CR=XK8M(X/i_=\(9-]p\4F^s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s+uSh -5!D/ahu$6 -X/i;,ZEiTRjo>A\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Je'hc8@Wcg9s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8S^`T.r&T=BJ]*s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s7>jRi8EPgSXl=>R@0A,QC4//VP^63aN4;Wr;Zfss8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8QV?A3E(=S"#oIs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8SX\SPrHc?XI0bc-?:gs8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VrlqW$Vre'ldlcd0hZbgY%ih;-oHio9:ilhC/J -s8W-!s8W-!s3K$;Unjft]"7h;r;Zfss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!q"XXZq"XXZq"XXZp\4FVp\4FVp](9ns8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!e'lcT@UaJ&FoVLA -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+9D/Cs\0PG-5s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s7lBa -q"XXYp\4@Rp%.eHoCMSFoCMSFoCDJCo()ABo()ABo'>W-c-=M@[C)X!T9#%oNfK-fR@1e'^?t=T -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!Y-+or77C0T<:0)?s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rVc\cSXj1t@;0FiY-+r+rVccrs8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qqYKUHmHEctoCMSHp%A@bs8W-! -s8W-!s8W-!s8W-!s8W-!s8VrlqQ$ZtVP^6Vlg+TNs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -r;?Kcp%@Y:leL:NaiVZ;]Y(VY[&Bq%T:_aGS=H(KmHsrRs8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s3oHG -@U`eiG'E5X7SbJ:R\"s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s2DsrKnY5UUSF3DR%U+F -o()AOs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,trVccrs8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TaE]U+tOc-=N5s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -qYL'VmdA]Yf>GMD\@B&PYHOt+Wi2kpVP^5iWMuYfUS"0NS=H+>S=H"8R?j/)Ocbc[KnXr'I=-Ei -N/W_>bfp+es8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8UQsdpccqG'8'/s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VNTmQa$& -6:+#jf@U'&s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W#pr79HMR@0IgH$OmhJ%3"us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Fcd,'M7SHKLio8tts8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,_kieS.SW8_j -bKJ)0X/hYVRGZoZs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,@aiT[-Of,+Ts8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -rVc]YkigXMf?DI__83t"]=Y\e]>24t^qdb-aiW#\e)0'?lK[[-p%A+Tq"XXZq"XXYp\4FVp\4FV -io8t3^:oepPBM+mH$O\E\$uD;s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,Je'hc8@Wcg9s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,Mf%)Z71e'r(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!ZEgccIt)T`Fh"rks8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!G'8$m5!Ek%DZBb:s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -^:q=;Lkqq*VZ6\rYHP-rQ^?=UfDkmNs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!o()@9Pa%8kOR;H& -s8W-!s8W-!s8W-!s8W-!s8W-!s7Q'Xp%A"Np%@qJoDejjs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,oq"X"6k0qf.`Pog7`5KaAdX*&Q-I!g=^a2e5[s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!e'lcS@:=;$FoVLAs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!I!g;m/1ae$R@0KCs8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s3f?D?XI/\EcV3[s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s%uWj/1`?$IX_=ss8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!WMuk7DJjcHHKF8M -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+_PES!e3F#fo -lK[[7s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8T'tWK`X3hr!>ks8U$U`/ft?['[4?s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s.5gRKnY69gt_r0s8W-!g=k8]X/g\uIW07FG'8%XIXZ`pIX6q"XXas8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,dmHo[aLP:G9g=k9\s8T^C]7Y`gH[C*rM2A74Wp&[1p%A"Np%A"NouG+n -SXl=FTqTQKaRf#ps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!c-=LrP*1QSL4t>8JqAT*JUrc=N0p!"U8"C*bKKDEnGiOgs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r;?K[mHs<.mJm4ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!H[C*@='),jUAt8n -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Gd*Q'(?#ak( -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W*\4$,;W29jCjs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s5iA(J:N/fDJm%s])Vg1s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s2iC) -]=Y\e]=Xc1TlG'l=]nm(:f'k\9hJ#M:f'uLO,s>@s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8SX\SN8em9he@LmHsrRs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!WMuk\PEY4okl:\_q"XWUSt;F@S+udR -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!^:q=,H$PO7Oh/-8S"#miF`hqRGb1Luj5]2"s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,?aN0'hKi_>W7Rfj<84Z0<76s4*5X7S#5s[q.779O377BXE<)eX.L[+0i -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rVc]ps8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TO9[TZj< -AnGZ1gt_r0s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -d*U-F?!VGiEW?(=s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s5iA(3B9)X2E'^[k5YJ] -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s0Ar9AS#G2Mi7W8s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4>lS -JqASY>?a]l8k)9>6psF.5X7Iq4[VS(9MA,S9he2N8OZ':FEDWaio:"L5(G:KnY,1Jq8K(H[C*^F`hS>DH'S7 -5!D.j3B;J7I/j6Hs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -mdBLcF`gtq?'q"Hs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+TLko&2$Ct+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s.Q-[='&IGF`m9Go)Jais8W-!s8W-!s8W-!s8W-!s8W-!s5iA(@q0!o,U=W\,We(L -@q0"uIt*!!J:W9&J:N0!IXZ!FBeM+m3]]2`F2q7^'#!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8SX\SS)SJQ^='=s8W-!s8W-! -s8W-!s8W-!s)W7&5X7S!5N]9!X:JXdds8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,np\1YdWJldpc-=Mqk2qS[MjKcsoCMSRs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-![C*DL?XHW+:l'p` -bfn<2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s*8m87RfjG;cC*3[K$:,s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8T:+Yo&eYfi -',)#n'GM5q'GV>t'bqH!()@l0*$QRN.Olo+2E"B.:p@1.s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!jlPS`3&iiU2s'/_s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4Z2\D/F,f;Gp@h;,C(c:JXb]:/3c.3%?C- -/1`>74?Pnq5uLTY@U`e]C2.KuC1h0lA7T4W?=$H):d70/.Olni+!3*f/p2;Zs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Th;)dZBmb;U -o()AOs8W-!s8W-!lK[YUF)sc=77Tjg7U9;*daHSDs8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!TqS/V:f'JF6@OB4s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!H?sm@>$?5uHMm^=s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W&rrQrp<[C*E)Oca?lBi@r/<)cgq;c?Rl;H$Lm1,:Tq%hB0]%j<)>+X&!P+X%sN+<_mO -+X&!O+ks8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s5iA(3&ilV2`Kj[jo>A\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+rVP[m7A5Z<'@:rVuots8W-!s8W-!s8W-!s8W-!s8W-!s5rJ+<`W6G,9nBV,$S8U -nF5rIs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W+DG^+%@CsC5Ls8W-!s8W-!s)`@)5!D/6>$A29Z2ak(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!8P)K;5!ITMfDkmN -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!q"XWXTqR9uLkgb@O,o@Kd*Vgms8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -q"XX1cd,Zo=&2Uf[C*FBs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s0&W0:JXb\9hh^jXT/># -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Fcd-TNECi_n6psF]Df=1Vec5[Ls8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TjK^KOfEAS#H,g=lT,s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s1Z4]6UO4::J\I/\$riU -[^NWO['[Q]^=(HXg"G'?cf8L&ClHs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,dmHn4d?;=6j -MMd;ks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VZ\nt`(W@:$>*):/7=LSH&Wh -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8VENlZ.#dAS#Gb]=\+Cs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -R@0I;9hfMCDYNo"s8W-!s8W-!s8W-!s8W-!s8W-!s45cPS"#maD/E9Q$>*?A7Wp.bl@_C -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,Je'hT.?#Xb%s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!jlPS_2`EZS2s'/_ -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -PEV2)9hfSGE<#tt0"&*ps8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Rb*KOA1q_83tfs8TL7[7!DN9he@Bj5^1>s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s.lHdEH,u#=BJL#;d*@.?XI/WD/GQ'Q2:@Rs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s*oNJ1c.$k=BPV's8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TaE]Q8.8 -?=$s0St>fTqZ$Tqs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,emd>(7EHQDHmHs<@s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s(Q1]8kM^VX/l:#s8W-!s8W-!s8W-!s7c9^]Y(n*I=5I0?W^E4>?bA\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s+Q/\[0NZ5^n02 -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!r;?J/Chu*l3AE6C1G^gB1,:U?1,:U?1,:UD2`F,m6ud3d_83tfs8W-!s8W-! -s8W-!s8W-!s8W-!s8W,_kib;u5rq%fSt;PRs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -q"XWUSt;12Pa%DsKnY5i\$uD;s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Vlhpu:;m_o'BtZEgdAZELI8MMd:=I!g9fH\6s' -R@0J2R@1_#]_D0ps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!aiVY:AnHUFJcGcMs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,Yio3j6;H$Lmc-=N5s8W-!s8W-!k2tg#U7us[H=LGp>?bPEV)iOF;P*>$>)u77Bd>8R>_0 -J:N1AoCN"^s8W-!s8W-!s8W-!s8W-!MMd9K2)SH:=9&=#s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s6f=CS"#n(M2A[L[Z?K1P*2!chr"J6s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!bfn:uR$`8KHuX.G?XI/591q3&2_H^8 -0JG1:1G^pI2F9_s?XI09Unm&2j8]/Zs8W-!s8W-!s8W-!s8W-!s8W-!s.#UL@U`f;SXof\s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!PEV2)9hfkWGk:Ouio8t/]"42nQ?mk'B4kjlC2/3HI\s!> -gt^]bs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s)iI,<)chLK7j4(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8UQsdp66bE,]drs8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,\jlJ?W2)R6KjlPV(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+/@q/SA=45OFs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s#)bn -,U=XtOcf\Ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Up2h/I=P -GB\8slg'IeMa'EjH[C,>s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!kih5EBk]Od3'BDf['[4?s8W-!s8W-!s8W-!s8W-!s7Q'X -\@B&5Pa#Tb@:?b<-:JXMP84lKHAS#H$daJ0qs8W-!s8W-!s8W-!s8W-!s8W-!s8Rb*KP+q1 -bfn<2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s'B#<1,:Up@q1(@JTZ*XD/F-(Bk_[2FGYj2 -^V@P`s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,%Y-(l/=CGWHe'leGs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,IdaD?(>AnFus8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!jlPS\1c.'I2%H(LV!mdBNCs8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+rVP[U'>Zk34 -IXZa$LPM:cRC0H1cd0qnh;-f=g=k97bKJ)#St9G%@o,uuK7egAlK\ELs8W-!s8W-!s8W-!s8W-! -s8W+FH?s7A\s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8SX\SQ/ZiJUrCPs8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W*q:f&l$0q"Gts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!St;NW>$@2VQ%+:577BXN?!Zd^li7"bs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Q8+=u8&mM2@)hs8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8T:+YBbD=I!g=M[^Q59s8W-!EcQ1U1,[2,_D:$YV -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -p%A!i]=YJY[EHb:oCMSRs8W-!s8W-!s8W-!s8W-!s8W-!s8W,/\@>pS?u9at^qdb^qYL6ls8W-! -s8W-!s8W-!s8W-!E,]c4Ci&+jirB&Ys8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s52_kO,o>X1G_*S435La -oCMSFoCN"^s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s6]4@f@SX'e'lq#f@ns4i8EP_nF5l6mUTj=@:?b[Us8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V3BjYf"T2E!JTjlQOBs8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+ZNfI4D=Il"R -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!:JXbC1c286X8i5"s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s*]$>*eMMb2*:J+5O\$rjHs8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!aiVXd4$,Sg4jVI# -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TmM^kdf&R[T\ld*Vgms&W9' -2)R7oY-.g)s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VZ\o"MiP -DJj>k<)es@OT5@\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!WMukGIXZj!J[)Jb -j5]2"s8W-!s8W-!s8W-!s8UX"eS&W0G'8'/s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TpO_2=,- -6UO4=;Gu<*h#IESs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,Yio7kn_nNk!`5KU9aiVfPc.1@plK[Zjh;)@B?"[e_s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8UNqdT]p[Df9Ros8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,\jlJ?W2)R6K -jlPV(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -LPLXe=BMGtVZ6\rs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s$fII2E!J+]Y+:Es8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,lp%<*9CM%0j6s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Vlhpf1jRaN2H;^VAU\h=0q'o()ACoCMSFoD8=[g"G%_>?biWCB+>6 -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,Gd*Q!$>AnFus8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -jlPS]2)R6K25s.7le^`4Ms8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!f@SVZ>[0op90ba-7n6(kaiXS_s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W+lTV+P85Y=X@k2th+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8V]^oBkr4It)r.3B:GR?iU0+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W#pr,m.):JXc7I=8]<])Vg1s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,Zj5YiIKp7gdbKJ)<\$tAVirB&Ys8W-!s8W-!s8W-!PEV2:?='>!U&Y/ms8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!jlPUKc-99i<_lLegt^]bs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!K7eeuFEG@8_>jQ8 -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8Ug,g:tD;f%/FPs8W-!s8W-!s8W-!s8W-!s4Q)Y ->$>*DBkdVIs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!daHQJ>?bu_DZBb:s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s5iA(2E!HL1Ge.Sjo>A\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8Rk0LKIY\VP^6js8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!e^`234$,_o621-J -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s1H"W='&HZ1G_0W4aha, -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!A7T454?SR]N;rqXs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s'fGH2)R7HLPPp0s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TU=\8?)"?=$s&Pa'##_>jQ8s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!aiVYTJ:ODiUV+7P]=Y]EnF6JXs8W-!s8W-!s8W-!s+uSh@q0#a^qg!Ms8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!p%@u^>?am!:Yaa\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,dmHnCn@m)t< -[1N@?XNj5s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s$T7C0/"uf\$uD;s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+UM2>A<=f/'ns8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s,iG+ -1c.$h$>*-;Gu6&gAh3Qs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -GB\6k3B9Dm6Cj[%q\bs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VAB`9As8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8VKRm9X+*9he@'aN4D]s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8U-[a$;mT5!D0'TV2>bs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8U$>WSC&e55s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8RLqI8a'C -St;PRs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+YNK#>7-q-Qns8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s+cAb=BJ\&VPaCns8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W+!lE<#t$>*EC23eKs8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W+oUSCdf<.]^Rs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!aN2FQ.k(_H[^:q>]s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8T:+YBtVCKS5$?jlP+Gf<;B] -d*U/>s8W-!s8W-!s8W-!s8W-!s*fEG@U`fjbfp+es8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,3]Y%$9:NU]#s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s/Dus84Z9A7n:YAaT);?s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8;fm`5KU1_86!EqZ$Tqs8W-!s8W-!s8W-!s8W-!s8Ud*fiqZbC2.M`s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-![^NVE`b&/s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s$8q:0ekD`X/l:#s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+'>?_m[(Gdj'lg*m:s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,&YHKrH3DraQ -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -Pa%Cg1G`A@nf -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s2;jo<`W7;Ci'.Os8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8V->j"N/@1c.&Lj5^1>s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!a2c5-?XIu"G5qUBs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Le^ZQ92Ea2dgt^]bs8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s/`<'.Olnb(`7(*D#aP8s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -G^+Hf0em?TB`J,4s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s%cEd1,:V;K7j4(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s7#OIP*1u.j+Du: -H$O\8WiH+!s7Q'X[^NWMZEiKLirB&Ys8W-!s8W-!s8W-!s8W+@FECnu@+EfXs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s7>jR?!U`-8P-1lZ2ak(s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s0fAE?biWCB+>6s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8UNqdTBURBP;)Zs8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,Zj5VmM1,(C9j5]2"s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s5W/"@U`eV@q5B3qZ$Tqs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!PEV1d1G`*6=9&=# -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8R:eG8D&3,pak'QBqRNs8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s&2ip1c.%IMi7W8s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,Gd*O[/2E3ZU\@B'Ks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s5iA(N/W]m;,L7j;l?Ok -p%A"Xs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -i8EOHKS45\DPW-`PogmqYL6ls8W-!s8W-!s8W-!s4>lSB4kjoD/Je3nGiOg -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s,;nq91qp*I!ktos8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+_PESX491)'6FEDX)s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!r;?K%\$s)c^ARp,s8W-!s8W-!s8W-! -s8W-!s8W-!s4Q)Y>?bAmdBN2mdBN;p\4+Dmf3=es8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,trVa+1["aSpZ'UfDUSFU7e^a^"s8W-!s8W-!s8W-!s8W-! -s8W+_PESmB;Nd3+s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Dc-9JUpQk:.e,N -N/W_qs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8UA7ecs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s3f?D -<`W75AnM)Cs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!g=k9=i8FY8s8W-!s8W-!s8W-!s8W-!s8W-!s8V->j"`AF1,:WFj5^1>s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Fcd-$.@:H&@K:PEV2qQ'IJoOcYZd -OH>QdOcbusQ]R;jI!g$+m/C2.LGOcd,^\$WNLT:_a>PEVl@VVKt^s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!MMd9j<)ffpW;lnts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -jlPT4@:<)5;q9FKs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s*oNJ -5s[e8;cB<\TE"rks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,2]=Y#?W8lpus8W-!s8W-!s8W-!s8W-!s8W-!s8W-!g"G%_>?biWCB+>6s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8UNqdT9LOAnGZTs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8T!pVfm6,Vl-Hms8W-!s8W-!s8W-!s8W-!s8W-!s8W,Zj5VpO1G^gC -j5]2"s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W+JIXY6q<2caos8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s*]$>)^/hVR#IK0?I -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s7Q'X\@B&5Pa$WGIX$*^GB\7ZI=6NlI=Qiu -FEDVHFEDMBEH,ugt_r0s8W-!s8W,Je'hN*>?kE@V/QnF5rFr;?Tps8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s/2cm8P)KjD/K=Qs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s1uOf;GpC[6UQZcM#[MTs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s0&W0UnjgWo()h\s8W-!s8W-!s8W-!s8W-!s8W-!s8U9cb?7tN -DJj@ls8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,#XK4iZ7:0D/e'leGs8W-!s8W-!mdBLTAnFh7:Vjl`s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!?=$r39ME^Uc2[hDs8W-!s8W-!s8W-! -s8W-!s8W-!s5W/"1,:U>0eq_Kj8]/Zs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,io($C)Ak>Qc@:FBP;)Wr;?Tps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8T+!Wh?#XnF5rIs8W-!s8W-!s8W-!s8W-!s8W-! -s8W,Cbfj9q>@:iHs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!?!U_g/hU[FAH2]0s8W-!s8W-!s8W-!KS5"N8kP5.OoPI]s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8T^C]1l!o=BJ\ro()h\s8W-! -s8W-!s8W-!s8W-!s8W-!s8V->j"W8C0JG3@j5^1>s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8V->j+`;C6UO3j.Om831hgZ< -R@0JHYHPm_`9ZaTs8W-!s8W-!s8W-!s8W-!s8W-!s/N*!:f'u&Bkd)+nGiOgs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8RRuIm?7a:JXd>g"HE*s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!XK8K:',)N4+n"dds8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s&N0$3]]=/[']l5s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!>?b;\.4Hi#/UD_h_o'Cls8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s-K(=;,L2-D/IPBc1gu, -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Fcd,Qi<)cgrs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s.5gR:f'tP5!Ee!D"[Jos8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,(Z*BghSE&Yis8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!p\4E"DJiHS4?PaA^qg!Ms8W-!s8W-!s8W-!s.>pU9MA-1J:R\"s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+[O,l^u7A6V -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+eR@-T:85)]NIt)tEqYL6ls8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!_83sSQ^>\1`W,u< -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!L5(F];cBKfV#UJps8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -rVc\uYHPRM]C,+Ts8W-!s8W-!s8W-!p%@uZ='%:<2Jd2Gs8W-!s8W-!s8W-!s8W-!s8T'tWD-)] -F`hj,s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -Ci!o[8kPP@RfEEfs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!j5]/T1,:XA1Zd`[s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+tW2N0T7Ofl; -.Olo45K;( -G'8'/s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+&>$?b=slK\ELs8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8VNTmeHSPs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -LkpjY8P+bqM?!VUs8W-!s8W-!s8W-!s8W-!s8W-!s,E"t84Z9>6pu`_L&_2Qs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4lDb -Q^=&DZ*F?/s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s.,^O;,L28G^08gs8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s08i6I=6O:TV28^rVuots8W-!s8Ud*fj%ce3]];p92!jef)PdMs8W-!s8W-!s8W-! -s8W,,[C&b):2F`_s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8V!6hc3ZV<`W8Oe^a^"s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s5W/"1G^gD1c4=Ujo>A\ -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,sr;:PSECrhq -/hSb+.Om>72JQuAg=k9\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8TpO_.7(e9he>j@:>^tSbMmQs8W-!s8W-!s8W-!s8W-!s8W-!s4Z2\]Y(n,It(X*>"D1T -5s[e)6ptEj@'?c;s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! ->?b;D&J696,fdsGs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!H?sls3&l#%FT;C@s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s+Q/\)]K_,%hCTX2oWbTs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s/W3$8kM]]?![L1s8W-!s8W-!s8W-!s8W-!s8W+NJq?6Q5Xe+1Mi3Mns8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8VTXn>)kUTV.t?k2u^Ds8W-!s8W-!s8W-!s8W-!s8W-!s8U3_a]VbL@q0$9mHsrRs8W-! -s8W-!s8W-!s8W-!s8W,Mf%+JHB5DC#aN2I&s8W-!s8W-!`Poerj"iJI -1G^iIj5^1>s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s.Z6^ -6psEj-RU8h-T3k@?smBqg"HE*s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8UNqdW'8H<)cgsR -77BX:8P*,j>D7cb`Pogrs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8V*Mb8P)Ld]Y+:Es8W-!s8W-!s8UHmctmN77n6'B91t2$MuWhW -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8TR;[uZT2YctA3s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8R1_FAPe1 -Vl-Hms8W-!s8W-!s8W-!s8W-!s8W-!KS5"W;cAI,L]@DSs8W-!s8T:+Y=hM]4Ztr5>[5t8g&M*P -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!?!U`09ME+3]`8$3s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8;fm@:&6=bKJ*/s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W+bQBj9]1+Ok*5!D/aKn\aSkl:\_s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s/rN-Df9Pt>$=g%;GBk[91qoO9MA,R9MJ5U -:JXbg=BKHYDMO"&ZEge9s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W+QKnU?\(`XM8\@B'Ks8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s']>E -4$,NLH$TGis8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!f%/D"-RT90$SsRp -kih71s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8RRuImZRjH?so;s8W-!s8W-!S"#m?91qN85ZLfa -USFUas8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,]k2q_cO-c3"kih71s8W-!s8W-!s8W-!s8W-!s8W-! -s8W+kT:\kR:4%>7s8W-!s8W-!s8W-!s8W-!s8S=JPZV$iBP;)=io:"5aiU]gY+_P_ -T:_aDR@05$P-D0pp\4F^s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!>?b;Q*ZdR35l^las8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8TmM^d:@S91qqQq"Xmhs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s(>tW -%hB0_&J9&(ErZ1>s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,Cbfj!a;b]t\KnY5h[^L!gCe@;l -5X7STEcTsjh#IESs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+nU8!9mK;trOs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!mHs:K?sm5E>g:O?b=D]=\+Cs8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W,oq"S9+@6?Y7KnY6\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8O)[*=3#Y0ekEZqYL6ls8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+cQ^:KD:In#I -5X7S$6:+RJ;M9^Vp\4F^s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!g"G&@Ocb?OKttL> -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!MMd9l<`XZuIfKHJs8W-!s8U[$em;Zh9he?:L5,a.s3T-> -?XI/,6:+C@9q.WAs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+lTV,"R9m_56 -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s.H$X8kM]W=',7pqZ$Tq -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s.c?a/1`>G9MGKds8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8SLTR6X#&0/"tD5X:KqP5kR^s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s45cPs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+mTqO\85=%S$g=k9\s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!6psEM$47=U&=oA_s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,"X/gAcF]qsPF`hiMbKKqcs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -]"5J(JUrT3LVq$Is8W-!s8W-!s8W-!s8W-!s8W-!s4lDb?!U`;=')T/YQ+Y&p\4DuChuX589Arq -p\4EZVP[Er=$T#9;c?W#ZEjN1s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -_83ra:f(Y3A,lT/s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,oq"S3'?V*g\ -R$a9@s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TU=\1K9a6:+$=s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!F`hg\0JG%//58i5^:q>]s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!p%@uiAnEqZ2KNq\s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8T+!WYcQi$k*P15sbPNs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8VENli7"bs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8Dop[C*DpK7eo5L=";os8W-!s8W-!s8W-!s8W-!s8W-!s.>pU>$>*8?!XhE["O*c -:JXbp@:?[U\9)h777BX-4?RM!DW'I2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!>$>*+:f,Kaci=%Fs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -MMd9\7Rgfp@JKWms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,BbKDLj/j2?\ -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W,>a2_+W;_0IN/hSbrEH2$Ys8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-![C*D277B[87]*&[ -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!`Poeb77A4;*B,o9s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!ZEgcdJ:NN7MSR$Cs8W-!s8W-!s8W-!s8W-!s8W-!s+Q/\ -9MA,81,:(!,:kAs<)cgr<)c:T78?TQJUrCMr;?Tps8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s(Z:`9he?h[']l5s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8T=-YY%M[;,L2nY-.g)s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -bfn9f1c-[3.\<6's8W-!s8W-!s8W-!s8W-!s8Vlhpk4l@q30a]`8$3s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8R@iGtUe'TV.tXs8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!p%@ub?XH/f6]-bYs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!BP;'3/hSn7107OYNK&q#Y-,RU^t72iP*1tq6UNCU/1iG*8kM^[Yd"0-s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!EcQ1a5!D;"6=shAKnY5JR$a8.R!sL5>$>)n5!D7u6"ahCi8EPns8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!^V@ODNfJI5H[gNp -R$a8HZEgpI[]6@-J:N/Q=]nBj92/,TB4kkHS"#V*PJP)Os8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+mTqP+P96to1s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s*K*>6UO4H?![L1s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!BP;'81G^F--nHo#2)R6M2`EWQ2DR$C2E!Hc8kOASH0+/L -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!G^+I!5s[Fg2`EZS4$,Mc4$,Mc4$>_i;,L2QOcf\Ds8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -lg*l6VP\ZcH>ID6Bk_9mAS#7W?sR&DAS#G/LksF)d/X.Gs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!hr!Yaq>UPEV2qQ'J&:U#"P\s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -H[C*7:/6k2O8o7[s8W-!s8W-!s8W-!s8W-!s8W-!s52_k>$>)t6puQUJH,ZLs8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -mHs<@s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s15eQ:/4Pg>?gmtq#CBos8W-!s8W-!s8W-!s8W,\jlL,fB0\^IB4kl;j5^1>s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8VrlqJ9ta9MA-@O,s>@s8W-!s8W-!s8W-!s8;fmF)uCk77C9Z=2D_h -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8TjK^K"96:JXd-aN4D]s8W-!s8W,emd=b%BL>-S -=BJ\:]"7qAs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8RV"J4W=(DJj@ZmHsrRs0Ar9 -@:?:ICR ->$>*2='%p`845j6?XI0U^qg!Ms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W,(Z*A%YC0OnH=BJ[;AnHdPL>UnGs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8V$8i6p'%mdBNCs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! -s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!rr<$! -EndImage -Fore -885 8945 m 0x80c001e4cc301820 - 886 8976 899 9000 922 9019 c 0 - 946 9039 972 9046 1002 9041 c 2 - 1018 9039 l 2 - 1062 9032 1094 9003 1103 8959 c 0 - 1107 8939 1112 8913 1119 8877 c 2 - 1129 8821 l 2 - 1131 8812 1131 8804 1131 8794 c 2 - 1112 8567 l 2 - 1107 8513 1067 8475 1013 8473 c 0 - 958 8471 916 8507 908 8561 c 2 - 880 8757 l 2 - 876 8779 880 8800 890 8819 c 1 - 887 8868 l 2 - 885 8900 885 8919 885 8932 c 0 - 885 8934 885 8942 885 8945 c 0x80c001e4cc301820 -3277 7293 m 2 - 3276 7273 3270 7257 3258 7241 c 0 - 3253 7234 3235 7215 3229 7209 c 0 - 3186 7172 3189 7183 3153 7153 c 0 - 3142 7144 3132 7138 3119 7134 c 2 - 2946 7080 l 2 - 2897 7064 2850 7083 2825 7127 c 0 - 2800 7172 2809 7222 2848 7255 c 2 - 2868 7272 l 1 - 2871 7277 l 2 - 2939 7386 3017 7428 3134 7492 c 0 - 3169 7510 3206 7509 3239 7487 c 0 - 3272 7466 3288 7433 3285 7394 c 2 - 3277 7293 l 2 -12915 9150 m 0 - 12888 9196 12898 9249 12940 9282 c 0 - 12948 9288 12962 9297 12980 9309 c 2 - 12983 9311 l 1 - 12980 9323 12978 9334 12978 9347 c 2 - 12990 9692 l 2 - 12991 9727 13008 9757 13036 9774 c 1 - 13036 9868 l 2x80c001e4cc311820 - 13036 9877 13037 9884 13039 9893 c 0 - 13050 9935 13073 10047 13075 10190 c 2 - 13075 10196 l 2x80c001e4cc309820 - 13075 10273 13060 10325 13045 10350 c 0 - 13039 10361 13033 10368 13028 10373 c 0 - 13019 10383 13013 10387 13011 10388 c 0 - 13004 10392 12998 10399 12993 10404 c 0 - 12990 10407 12988 10408 12987 10408 c 0 - 12980 10413 12977 10414 12975 10414 c 0 - 12973 10415 12957 10419 12944 10422 c 2 - 12942 10422 l 1 - 12938 10422 12936 10422 12934 10422 c 0 - 12924 10421 12924 10420 12908 10415 c 2 - 12881 10405 l 1 - 12882 10358 l 1 - 12882 10350 l 2 - 12882 10235 12856 10139 12823 10002 c 0 - 12820 9991 12816 9981 12811 9972 c 1 - 12810 9955 l 2 - 12810 9949 12809 9943 12808 9937 c 2 - 12799 9901 l 1 - 12804 9888 12806 9874 12805 9859 c 2 - 12674 7456 l 1 - 12690 7439 12699 7416 12699 7389 c 2 - 12717 6411 l 1 - 12738 6394 12752 6369 12755 6338 c 0 - 12761 6284 12772 6251 12780 6234 c 0 - 12781 6232 12784 6227 12784 6225 c 0 - 12788 6218 12791 6214 12793 6211 c 0 - 12796 6207 12799 6204 12801 6200 c 0 - 12805 6196 12809 6192 12813 6187 c 2 - 12821 6177 l 1 - 12837 6177 12854 6172 12870 6163 c 2 - 12989 6095 l 1 - 13004 6098 l 2 - 13134 6121 13326 6109 13430 6167 c 0 - 13447 6176 13458 6186 13467 6194 c 0 - 13494 6220 13528 6229 13562 6220 c 1 - 13565 6225 l 1 - 13621 6309 l 2 - 13621 6309 13621 6309 13622 6309 c 0 - 13625 6315 l 0 - 13637 6331 13645 6340 13650 6347 c 0 - 13691 6396 13725 6410 13734 6415 c 0 - 14287 6703 14030 6502 14552 6917 c 2 - 14564 6927 l 2 - 14584 6942 14604 6949 14628 6949 c 2 - 14737 6949 l 2 - 14757 6949 14774 6944 14791 6933 c 2 - 14801 6927 l 1 - 14808 6939 14815 6953 14821 6968 c 0 - 14834 7002 14833 7023 14834 7042 c 0 - 14834 7045 14833 7053 14833 7056 c 0 - 14832 7059 14831 7071 14830 7074 c 0 - 14829 7078 14826 7089 14825 7092 c 0 - 14814 7130 14802 7146 14779 7179 c 2 - 14768 7193 l 1 - 14749 7193 l 2 - 14742 7193 14736 7193 14729 7194 c 2 - 14723 7193 14716 7193 14709 7193 c 2 - 14702 7193 l 1 - 14687 7157 14652 7133 14609 7133 c 2 - 14526 7133 l 2 - 14510 7133 14496 7136 14484 7141 c 1 - 14474 7137 14465 7135 14455 7134 c 1 - 14446 7122 14435 7111 14422 7103 c 2 - 14280 7018 l 1 - 14232 6971 l 2 - 14227 6965 14222 6961 14215 6957 c 2 - 13928 6776 l 2 - 13910 6764 13892 6759 13873 6759 c 1 - 13853 6738 l 1 - 13833 6718 l 2 - 13829 6715 13826 6712 13822 6709 c 0 - 13819 6705 13816 6702 13813 6698 c 2 - 13798 6684 l 2 - 13644 6551 13532 6559 13381 6414 c 0 - 13359 6393 13335 6384 13305 6385 c 2 - 13082 6395 l 2 - 13032 6398 12995 6430 12986 6479 c 2 - 12942 6723 l 2 - 12938 6743 12940 6762 12948 6780 c 1x80c001e4cc341820 - 12894 8220 l 2 - 12893 8230 12894 8239 12896 8248 c 1 - 12890 8315 l 1 - 12888 8383 l 1x80c001e4cc381820 - 12885 8392 12882 8401 12881 8411 c 2 - 12849 8764 l 2 - 12846 8803 12861 8836 12893 8858 c 2 - 12909 8869 l 2 - 12921 8877 12929 8884 12937 8891 c 0 - 12972 8921 12977 8941 12983 8955 c 0 - 12986 8961 12985 8961 12986 8963 c 0 - 12987 8967 12987 8968 12988 8970 c 0x80c001e4cc321820 - 12988 8973 12988 8974 12989 8977 c 0 - 12989 8981 12990 8991 12990 8995 c 2 - 12990 9057 12932 9120 12915 9150 c 0 -13195 8995 m 2x80c001e4cc321820 - 13195 8994 l 2x80c001e4cc321820 - 13194 8986 13193 8961 13192 8952 c 0 - 13192 8948 13189 8933 13188 8928 c 0 - 13187 8923 13183 8908 13182 8903 c 0 - 13180 8897 13175 8882 13172 8876 c 0 - 13163 8854 13142 8799 13074 8738 c 2 - 13059 8725 l 1 - 13082 8464 l 1 - 13087 8452 13090 8439 13091 8424 c 2x80c001e4cc381820 - 13095 8329 l 1 - 13103 8233 l 2 - 13105 8219 13103 8205 13100 8193 c 1 - 13154 6745 l 2x80c001e4cc341820 - 13154 6735 13153 6725 13151 6716 c 1 - 13173 6596 l 1 - 13272 6592 l 1 - 13438 6741 13519 6720 13644 6821 c 1 - 13652 6837 13665 6851 13682 6862 c 2 - 13696 6871 l 1 - 13708 6883 l 1 - 13780 6955 l 2 - 13807 6983 13842 6992 13875 6984 c 1 - 14096 7124 l 1 - 14144 7172 l 2 - 14150 7178 14156 7183 14164 7187 c 2 - 14267 7249 l 1 - 14274 7301 14314 7338 14369 7338 c 2 - 14415 7338 l 1 - 14451 7360 l 2 - 14479 7377 14510 7380 14537 7370 c 1 - 14555 7387 14580 7397 14609 7397 c 2 - 14668 7397 l 1 - 14705 7426 14753 7397 14790 7397 c 2 - 14818 7397 l 2 - 14851 7397 14878 7384 14898 7358 c 2 - 14942 7302 l 2 - 14982 7246 15003 7213 15022 7151 c 0 - 15024 7144 15029 7122 15031 7115 c 0 - 15032 7107 15036 7084 15036 7077 c 0 - 15037 7070 15039 7049 15039 7042 c 0 - 15039 7040 15038 7032 15038 7029 c 0 - 15037 7000 15037 6959 15013 6896 c 0 - 15002 6866 14988 6840 14974 6818 c 2 - 14920 6732 l 2 - 14889 6681 14829 6668 14779 6699 c 2 - 14707 6744 l 1 - 14664 6744 l 1 - 14141 6328 14397 6529 13829 6233 c 0 - 13821 6229 13817 6228 13806 6215 c 2 - 13805 6213 l 1 - 13800 6202 13792 6192 13783 6183 c 1 - 13734 6110 l 1 - 13676 6025 l 2 - 13644 5978 13588 5966 13540 5994 c 1 - 13529 5988 l 2 - 13365 5896 13162 5918 13041 5896 c 2 - 12990 5887 l 2 - 12965 5882 12942 5886 12920 5898 c 2 - 12829 5951 l 1 - 12816 5946 12802 5944 12787 5945 c 0 - 12756 5947 12731 5960 12712 5984 c 2 - 12664 6045 l 1 - 12657 6049 l 2 - 12626 6067 12607 6096 12605 6127 c 1 - 12604 6128 l 2 - 12602 6132 12596 6144 12594 6148 c 0 - 12583 6172 12573 6201 12564 6238 c 1 - 12534 6255 12514 6287 12513 6326 c 2 - 12496 7314 l 1 - 12476 7334 12464 7362 12466 7394 c 2 - 12598 9814 l 1 - 12584 9836 12580 9863 12587 9891 c 2 - 12606 9975 l 1 - 12609 10032 l 2 - 12611 10058 12620 10080 12635 10097 c 1 - 12662 10209 12677 10278 12677 10349 c 2 - 12677 10356 l 1 - 12676 10448 l 1 - 12662 10499 12687 10548 12738 10569 c 2 - 12833 10606 l 2 - 12883 10620 12883 10623 12917 10626 c 0 - 12922 10626 12937 10627 12942 10627 c 2 - 12955 10627 l 2 - 12965 10627 12972 10626 12981 10624 c 2 - 12992 10621 l 2 - 13004 10618 13023 10615 13031 10612 c 0 - 13076 10593 13078 10595 13105 10576 c 0 - 13108 10573 13118 10566 13122 10563 c 0 - 13124 10561 13128 10556 13133 10552 c 0 - 13152 10537 13161 10531 13178 10513 c 0 - 13193 10496 13209 10476 13222 10452 c 0 - 13235 10431 13280 10349 13280 10196 c 2 - 13280 10188 l 2x80c001e4cc30b820 - 13278 10036 13255 9916 13241 9856 c 1 - 13241 9642 l 2x80c001e4cc311820 - 13241 9603 13223 9571 13190 9553 c 1 - 13184 9371 l 1 - 13209 9330 l 2 - 13240 9280 13226 9220 13176 9189 c 2 - 13163 9182 l 1 - 13159 9175 13154 9169 13149 9164 c 1 - 13173 9120 13195 9063 13195 8995 c 2x80c001e4cc321820 -3188 9045 m 0 - 3189 9044 3189 9043 3190 9041 c 2 - 3203 9000 l 1 - 3221 8947 l 2 - 3223 8941 3225 8934 3226 8927 c 1 - 3232 8925 3239 8922 3245 8918 c 0 - 3247 8917 3250 8915 3252 8914 c 0 - 3281 8901 3326 8899 3334 8899 c 2 - 3335 8899 l 2 - 3354 8899 3366 8909 3376 8920 c 0 - 3400 8946 3403 8961 3431 8997 c 0 - 3436 9002 3451 9019 3456 9024 c 0 - 3482 9047 3494 9053 3538 9064 c 0 - 3569 9072 3596 9071 3614 9071 c 2 - 3619 9071 l 1 - 3646 9075 3672 9068 3694 9051 c 0 - 3703 9044 3709 9041 3713 9040 c 0 - 3722 9035 3725 9034 3738 9031 c 0 - 3753 9028 3761 9028 3777 9028 c 2 - 3780 9028 l 2 - 3793 9031 l 2 - 3796 9032 3807 9035 3810 9035 c 0 - 3836 9041 3860 9038 3881 9027 c 1 - 3881 9027 l 2 - 3928 9014 3957 8976 3957 8928 c 2 - 3957 8612 l 2 - 3957 8590 3951 8572 3939 8554 c 0 - 3937 8552 3932 8544 3931 8542 c 0 - 3894 8480 3870 8357 3852 8312 c 2 - 3852 8312 l 1 - 3851 8311 l 1 - 3851 8310 l 2 - 3850 8308 3848 8303 3847 8301 c 1 - 3847 8301 l 0 - 3840 8287 3809 8247 3796 8239 c 1 - 3796 8239 3793 8241 3786 8230 c 0 - 3775 8212 3778 8207 3776 8172 c 0 - 3776 8171 3776 8167 3776 8165 c 0 - 3776 8164 3776 8159 3776 8157 c 0 - 3777 8132 3771 8111 3756 8090 c 0 - 3739 8068 3734 8041 3734 8019 c 0 - 3734 8006 3737 7986 3745 7954 c 0 - 3753 7919 3745 7888 3722 7862 c 0 - 3716 7855 3709 7849 3702 7844 c 1 - 3633 7291 l 2 - 3630 7271 3623 7253 3612 7238 c 1 - 3568 6823 l 1 - 3611 6802 l 2 - 3623 6796 3635 6790 3652 6785 c 0 - 3655 6784 3666 6781 3669 6780 c 0 - 3686 6776 3687 6776 3713 6776 c 0 - 3714 6776 3716 6776 3716 6776 c 0 - 3734 6776 3748 6780 3760 6784 c 0 - 3761 6785 3773 6790 3776 6792 c 0 - 3793 6802 3790 6800 3793 6803 c 0 - 3798 6808 3810 6821 3815 6826 c 2 - 3819 6831 l 2 - 3834 6847 3852 6858 3871 6863 c 1 - 4057 8141 l 1 - 4087 8323 l 2 - 4091 8343 4098 8359 4112 8374 c 2 - 4123 8387 l 2 - 4139 8405 4156 8415 4180 8420 c 0 - 4189 8422 4198 8425 4208 8432 c 0 - 4213 8435 4226 8446 4229 8450 c 0 - 4265 8485 4288 8503 4304 8514 c 0 - 4331 8533 4354 8543 4376 8551 c 0 - 4438 8573 4410 8555 4531 8601 c 0 - 4554 8610 4576 8612 4599 8605 c 0 - 4674 8583 4776 8586 4796 8585 c 2 - 4826 8585 l 2 - 4854 8585 4877 8576 4895 8558 c 0 - 4909 8548 4916 8546 4937 8544 c 0 - 4938 8544 4940 8544 4941 8544 c 0 - 4946 8544 4946 8544 4948 8544 c 0 - 4958 8545 4965 8549 4972 8552 c 2 - 5018 8571 l 1 - 5007 8579 l 2 - 4976 8601 4961 8634 4965 8672 c 2 - 4974 8766 l 2 - 4975 8771 4975 8776 4977 8781 c 2 - 4985 8813 l 1 - 4905 8833 l 1 - 4394 8814 l 1 - 4354 8796 l 2 - 4321 8782 4289 8784 4259 8802 c 0 - 4229 8820 4212 8848 4210 8883 c 2 - 4204 8969 l 1 - 4201 8975 l 2 - 4191 8994 4164 9096 4107 9172 c 0 - 4099 9182 4105 9175 4094 9188 c 0 - 4085 9198 4077 9206 4072 9210 c 0 - 4068 9213 4067 9214 4065 9215 c 0 - 4058 9220 4053 9223 4048 9226 c 0 - 4031 9236 4023 9238 3998 9239 c 0 - 3937 9239 3890 9239 3852 9239 c 0 - 3851 9239 3848 9239 3846 9239 c 2 - 3772 9239 l 2 - 3727 9239 3716 9238 3707 9237 c 0 - 3697 9236 3686 9234 3674 9228 c 0 - 3669 9226 3655 9219 3650 9217 c 0 - 3646 9215 3636 9211 3632 9210 c 0 - 3623 9207 3594 9203 3585 9203 c 0 - 3583 9203 l 0 - 3537 9203 3474 9220 3426 9220 c 0 - 3407 9220 3377 9220 3377 9220 c 0 - 3373 9220 3350 9220 3343 9219 c 0 - 3316 9216 3292 9203 3278 9171 c 0 - 3264 9139 3271 9149 3258 9118 c 0 - 3245 9087 3221 9066 3192 9058 c 1 - 3192 9053 3191 9048 3189 9042 c 0 -3112 9294 m 1 - 3145 9345 3209 9411 3322 9423 c 0 - 3334 9424 3363 9425 3377 9425 c 0 - 3392 9425 3407 9425 3426 9425 c 0 - 3484 9425 3554 9411 3577 9408 c 1 - 3582 9411 3588 9414 3591 9415 c 0 - 3617 9427 3645 9436 3682 9440 c 0 - 3704 9443 3724 9444 3772 9444 c 2 - 3846 9444 l 2 - 3847 9444 3851 9444 3852 9444 c 0 - 3890 9444 3939 9444 4000 9443 c 0 - 4064 9443 4106 9429 4152 9402 c 0 - 4173 9390 4179 9385 4186 9381 c 0 - 4190 9378 4201 9369 4205 9366 c 0 - 4219 9354 4232 9341 4248 9323 c 0 - 4267 9301 4262 9307 4270 9295 c 0 - 4359 9177 4383 9068 4383 9068 c 2 - 4397 9042 l 2 - 4400 9034 4403 9027 4405 9020 c 1 - 4912 9038 l 2 - 4922 9039 4931 9038 4941 9035 c 2 - 5134 8987 l 2 - 5191 8973 5223 8920 5208 8863 c 2 - 5177 8738 l 1 - 5174 8711 l 1 - 5452 8512 l 2 - 5493 8482 5507 8434 5486 8387 c 0 - 5466 8341 5422 8318 5372 8328 c 2 - 5100 8383 l 1 - 5053 8363 l 2 - 5015 8350 5007 8345 4975 8341 c 0 - 4968 8340 4948 8339 4941 8339 c 0 - 4937 8339 4924 8339 4920 8340 c 0 - 4867 8344 4829 8357 4792 8380 c 1 - 4747 8381 4660 8381 4576 8400 c 1 - 4481 8365 4476 8370 4444 8358 c 0 - 4436 8355 4429 8352 4422 8346 c 0 - 4412 8339 4396 8326 4373 8304 c 0 - 4369 8299 4344 8276 4322 8262 c 0 - 4309 8253 4295 8245 4281 8239 c 1 - 4259 8109 l 1 - 4060 6739 l 2 - 4052 6680 4003 6643 3944 6652 c 2 - 3933 6654 l 1 - 3914 6635 3900 6627 3875 6613 c 0 - 3863 6606 3841 6596 3832 6593 c 0 - 3789 6576 3751 6571 3716 6571 c 0 - 3714 6571 3708 6571 3706 6571 c 0 - 3698 6571 3673 6570 3625 6580 c 0 - 3618 6582 3598 6587 3591 6589 c 0 - 3569 6596 3546 6605 3519 6619 c 2 - 3460 6648 l 1x82d009e4cc301820 - 3447 6650 l 2x84c001e4cc301820 - 3388 6656 3349 6703 3356 6762 c 2 - 3414 7316 l 2 - 3416 7338 3424 7357 3437 7372 c 1 - 3495 7841 l 1 - 3495 7842 l 2 - 3473 7884 3480 7929 3511 7960 c 1 - 3515 7975 3521 7989 3530 8000 c 1 - 3530 8007 3529 8013 3529 8019 c 0 - 3529 8088 3550 8143 3571 8181 c 1 - 3571 8184 l 0 - 3574 8228 3575 8279 3614 8340 c 0 - 3618 8347 3637 8372 3661 8393 c 1 - 3663 8397 3665 8401 3668 8405 c 0 - 3686 8459 3704 8559 3752 8642 c 1 - 3752 8824 l 1 - 3721 8825 3708 8828 3696 8831 c 0 - 3666 8838 3650 8842 3623 8856 c 0 - 3616 8859 3610 8862 3603 8866 c 1 - 3596 8866 3592 8866 3589 8865 c 1 - 3577 8849 3555 8812 3529 8783 c 0 - 3477 8725 3412 8694 3334 8694 c 2 - 3331 8694 l 2 - 3316 8694 3246 8696 3182 8721 c 1 - 3027 8675 l 2 - 2981 8661 2937 8678 2911 8718 c 0 - 2886 8759 2889 8806 2921 8841 c 2 - 3008 8938 l 1 - 3004 8951 l 1 - 2990 8968 2983 8989 2984 9011 c 1 - 2977 9033 l 2 - 2974 9041 2972 9049 2971 9057 c 1 - 2861 9197 l 2 - 2830 9236 2830 9285 2861 9324 c 0 - 2891 9363 2939 9374 2984 9353 c 2 - 3112 9294 l 1 -3795 8293 m 0 - 3827 8335 3879 8346 3925 8320 c 2 - 3932 8316 l 2 - 3972 8295 3991 8256 3984 8212 c 2 - 3979 8176 l 2 - 3978 8168 3977 8162 3974 8155 c 1 - 3990 8146 3996 8126 3987 8111 c 0 - 3978 8095 3958 8089 3942 8098 c 1 - 3923 8081 l 2 - 3881 8044 3825 8045 3785 8083 c 0 - 3781 8086 3771 8096 3767 8099 c 0 - 3745 8120 3735 8145 3735 8175 c 2 - 3735 8177 l 2 - 3735 8184 3736 8204 3737 8210 c 0 - 3741 8239 3756 8262 3780 8279 c 0 - 3785 8283 3786 8283 3790 8288 c 0 - 3791 8289 3792 8289 3795 8293 c 0 -16159 6864 m 1 - 16071 6846 l 2 - 16060 6844 16050 6843 16039 6845 c 2 - 15704 6885 l 2 - 15681 6888 15662 6896 15647 6909 c 1 - 15602 6916 l 2 - 15590 6918 15552 6920 15494 6955 c 0 - 15365 7034 15284 7198 15269 7364 c 0 - 15268 7370 15268 7375 15269 7381 c 2 - 15318 8043 l 2 - 15320 8059 15324 8072 15332 8086 c 2 - 15385 8179 l 2 - 15400 8206 15423 8222 15454 8229 c 2 - 15719 8281 l 2 - 15738 8285 15756 8284 15772 8279 c 1 - 15796 8293 15825 8296 15854 8287 c 0 - 15861 8285 15882 8276 15888 8272 c 0 - 15970 8228 15994 8174 16076 8129 c 0 - 16079 8128 16087 8123 16091 8121 c 0 - 16094 8121 16095 8118 16112 8114 c 0 - 16115 8113 16123 8112 16128 8110 c 0 - 16133 8109 16138 8108 16146 8106 c 2 - 16207 8106 l 2 - 16213 8106 16218 8106 16223 8105 c 0 - 16228 8106 16233 8106 16238 8106 c 2 - 16253 8106 l 1 - 16256 8111 16259 8116 16263 8121 c 1 - 16252 8144 l 2 - 16244 8159 16241 8173 16241 8190 c 2 - 16241 8247 l 2 - 16241 8299 16274 8338 16325 8348 c 2 - 16330 8349 l 1 - 16334 8362 16342 8373 16354 8382 c 0 - 16385 8407 16431 8402 16456 8371 c 1 - 16457 8371 16460 8370 16461 8370 c 0 - 16468 8369 16473 8368 16479 8366 c 2 - 16524 8353 l 2 - 16532 8351 16539 8348 16546 8344 c 2 - 16595 8315 l 2 - 16602 8311 16608 8307 16613 8302 c 0 - 16622 8296 16630 8288 16636 8280 c 2 - 16759 8160 l 2 - 16780 8140 16790 8116 16790 8086 c 0 - 16789 8058 16789 8058 16789 8039 c 0 - 16789 7889 16800 7738 16808 7663 c 2 - 16811 7640 l 2 - 16812 7632 16812 7626 16811 7618 c 2 - 16760 7123 l 2 - 16757 7100 16750 7081 16734 7065 c 0 - 16704 7036 16708 7040 16688 7026 c 0 - 16593 6962 16505 6955 16348 6873 c 0 - 16336 6867 16296 6852 16259 6841 c 0 - 16230 6832 16203 6835 16177 6851 c 0 - 16170 6855 16164 6859 16159 6864 c 1 -15687 8066 m 1 - 15539 8037 l 1 - 15521 8005 l 1 - 15474 7375 l 1 - 15488 7246 15551 7160 15600 7131 c 0 - 15612 7123 15617 7122 15632 7118 c 2 - 15733 7103 l 2 - 15753 7100 15770 7093 15784 7082 c 1 - 16047 7050 l 1 - 16201 7081 l 2 - 16230 7087 16256 7081 16278 7067 c 1 - 16409 7133 16504 7156 16560 7188 c 1 - 16606 7629 l 1 - 16605 7642 l 2 - 16593 7750 16584 7904 16584 8039 c 2 - 16584 8045 l 1 - 16510 8117 l 1 - 16504 8118 16498 8119 16492 8121 c 1 - 16512 8071 16494 8018 16445 7993 c 1 - 16440 7939 16399 7901 16343 7901 c 2 - 16262 7901 l 1 - 16259 7900 l 2 - 16226 7883 16190 7884 16162 7901 c 1 - 16139 7901 l 2 - 16134 7901 16130 7901 16126 7902 c 2 - 16116 7903 l 2 - 16112 7904 16109 7904 16106 7905 c 0 - 16096 7908 16087 7910 16083 7911 c 0 - 16078 7912 16069 7914 16066 7915 c 0 - 16042 7920 16042 7921 16007 7935 c 0 - 16001 7937 15983 7946 15977 7950 c 0 - 15910 7986 15868 8027 15835 8057 c 1 - 15811 8035 15783 8026 15750 8031 c 0 - 15724 8035 15703 8047 15687 8066 c 1 -16387 8803 m 2 - 16419 8852 16479 8865 16528 8833 c 2 - 17039 8501 l 2 - 17066 8484 17081 8459 17085 8428 c 2 - 17087 8407 l 1 - 17093 8399 17100 8387 17106 8376 c 1 - 17149 8354 l 1 - 17162 8353 l 2 - 17220 8347 17259 8299 17252 8240 c 2 - 17204 7807 l 1 - 17143 7226 l 1 - 17186 7194 17196 7139 17167 7092 c 2 - 17121 7016 l 1 - 17120 7006 l 2 - 17116 6968 17094 6938 17064 6924 c 1 - 16957 6750 l 2 - 16953 6743 16949 6738 16943 6732 c 2 - 16803 6592 l 1 - 16806 6541 16773 6498 16720 6488 c 2 - 16686 6481 l 1 - 16667 6471 16646 6467 16626 6469 c 1 - 16619 6468 l 2 - 16508 6446 16405 6445 16317 6445 c 1 - 16312 6443 l 1 - 16300 6400 16262 6371 16214 6371 c 2 - 16170 6371 l 1 - 16130 6351 l 2 - 16086 6330 16039 6339 16009 6373 c 1 - 15657 6400 l 1 - 15637 6389 15612 6386 15587 6392 c 2 - 15494 6412 l 1 - 15438 6417 l 2 - 15400 6420 15371 6439 15355 6468 c 2 - 15157 6580 15137 6757 15088 6838 c 1 - 15062 6854 l 2 - 15043 6865 15030 6879 15021 6899 c 2 - 14795 7402 l 2 - 14773 7451 14789 7503 14832 7530 c 1x84c411e4cc303820 - 14828 7629 14815 7731 14815 7861 c 0 - 14815 7986 14830 8131 14895 8275 c 1 - 14859 8315 14859 8372 14896 8413 c 2 - 14948 8470 l 1 - 14948 8530 l 2 - 14948 8589 14992 8632 15051 8632 c 2 - 15114 8632 l 1 - 15118 8634 l 1 - 15238 8694 l 1 - 15237 8736 15260 8772 15298 8788 c 1 - 15328 8844 l 2 - 15350 8886 15391 8905 15437 8897 c 0 - 15481 8889 15512 8859 15520 8815 c 1 - 15525 8814 l 2 - 15530 8814 15547 8811 15553 8810 c 0 - 15559 8809 15578 8804 15585 8801 c 0 - 15589 8800 15595 8796 15603 8794 c 0 - 15647 8786 15643 8788 15655 8785 c 0 - 15678 8779 15697 8771 15715 8763 c 1 - 15948 8768 l 1 - 15960 8777 15975 8784 15991 8787 c 0 - 16021 8794 16050 8788 16072 8771 c 1 - 16371 8778 l 1x84c411e4cc305820 - 16387 8803 l 2 -17039 8181 m 1 - 16982 8209 l 2 - 16958 8221 16941 8240 16932 8266 c 0 - 16932 8267 16930 8270 16930 8271 c 0 - 16929 8273 16922 8286 16920 8289 c 0 - 16918 8291 16914 8298 16912 8300 c 0 - 16898 8316 16890 8334 16887 8355 c 1 - 16501 8606 l 1 - 16483 8586 16459 8575 16430 8575 c 2 - 16028 8565 l 1 - 16020 8565 l 2 - 16011 8565 l 2 - 15691 8557 l 2 - 15670 8557 15652 8562 15634 8573 c 0 - 15619 8583 15612 8584 15606 8586 c 0 - 15597 8588 15592 8589 15558 8594 c 0 - 15546 8596 15537 8599 15526 8605 c 0 - 15513 8611 15521 8607 15520 8607 c 0 - 15513 8609 15514 8609 15512 8609 c 0 - 15506 8610 15505 8610 15502 8611 c 0 - 15496 8611 15481 8612 15471 8613 c 0 - 15469 8613 15462 8612 15459 8611 c 2 - 15449 8609 l 2 - 15444 8608 15439 8608 15435 8608 c 1 - 15419 8577 l 2 - 15408 8557 15394 8544 15374 8534 c 2 - 15249 8471 l 1 - 15247 8468 15245 8465 15242 8462 c 0 - 15222 8439 15196 8428 15165 8428 c 2 - 15153 8428 l 1 - 15153 8402 15144 8380 15126 8361 c 2 - 15113 8346 l 1 - 15129 8315 15129 8279 15110 8247 c 0 - 15038 8122 15020 7990 15020 7861 c 0x84c401e4cc305820 - 15020 7727 15039 7597 15039 7472 c 2 - 15039 7465 l 2 - 15039 7442 15032 7421 15019 7404 c 1 - 15195 7013 l 1 - 15206 7006 l 2 - 15232 6990 15248 6968 15258 6953 c 0 - 15332 6838 15324 6703 15488 6631 c 0 - 15497 6627 15505 6622 15512 6616 c 1 - 15517 6616 l 2 - 15522 6616 15527 6615 15532 6614 c 2 - 15578 6604 l 1 - 15591 6608 15605 6609 15620 6608 c 2 - 16037 6576 l 1 - 16069 6576 l 2 - 16083 6576 16096 6574 16108 6569 c 1 - 16117 6573 16127 6575 16137 6576 c 1 - 16145 6585 16156 6593 16168 6600 c 2 - 16247 6639 l 2 - 16262 6647 16276 6650 16293 6650 c 2 - 16300 6650 l 2 - 16392 6650 16485 6651 16580 6669 c 2 - 16601 6673 l 1 - 16606 6682 16612 6691 16620 6699 c 2 - 16789 6868 l 1 - 16915 7072 l 2 - 16918 7077 16922 7082 16926 7087 c 2 - 16928 7092 16931 7098 16934 7103 c 2 - 16945 7121 l 1 - 16934 7140 16930 7161 16932 7184 c 2 - 17000 7829 l 1 - 17039 8181 l 1 -10755 10087 m 0 - 10753 10087 10745 10087 10742 10086 c 0 - 10729 10085 10717 10086 10705 10089 c 1 - 10697 10079 10687 10069 10675 10062 c 0 - 10672 10060 10664 10054 10661 10052 c 0 - 10648 10043 10637 10033 10623 10018 c 0 - 10612 10007 10600 9999 10588 9994 c 1 - 10565 9958 l 1 - 10561 9952 l 1 - 10559 9948 l 2 - 10556 9942 l 0 - 10464 9758 10465 9164 10465 8841 c 0 - 10465 8795 10465 8752 10465 8712 c 2 - 10465 8679 l 2 - 10465 8631 10437 8593 10391 8580 c 2 - 10387 8579 l 2 - 10377 8576 10369 8575 10359 8575 c 0 - 10315 8575 10226 8575 10189 8577 c 0 - 10171 8578 10157 8582 10141 8591 c 0 - 10113 8609 10080 8625 9970 8657 c 0 - 9962 8659 9955 8662 9949 8666 c 1 - 9943 8666 9938 8667 9932 8668 c 1 - 9925 8644 9911 8627 9890 8614 c 0 - 9830 8575 9786 8533 9770 8499 c 0 - 9761 8481 9760 8473 9760 8455 c 0 - 9760 8453 l 0 - 9760 8449 9760 8448 9760 8446 c 0 - 9761 8437 9761 8437 9765 8424 c 0 - 9769 8412 9771 8410 9773 8407 c 0 - 9777 8402 9789 8386 9793 8381 c 0 - 9796 8377 9798 8377 9800 8375 c 0 - 9875 8307 9999 8288 10154 8223 c 0 - 10165 8219 10196 8205 10207 8201 c 0 - 10209 8201 10214 8199 10216 8199 c 0 - 10219 8198 10239 8195 10245 8195 c 2 - 10246 8195 l 2 - 10271 8195 10285 8205 10294 8212 c 0 - 10326 8240 10366 8245 10404 8227 c 0 - 10442 8210 10464 8175 10463 8133 c 0 - 10460 7958 10454 7852 10446 7783 c 1 - 10494 7774 10527 7736 10529 7686 c 2 - 10551 7136 l 2 - 10552 7104 10541 7077 10517 7056 c 0 - 10493 7034 10466 7026 10434 7030 c 2 - 10428 7031 l 2 - 10382 7038 10349 7070 10342 7115 c 1 - 10215 7115 l 1 - 10204 7106 10191 7100 10176 7096 c 1 - 10128 7051 l 2 - 10107 7031 10082 7022 10052 7023 c 2 - 10013 7026 l 1 - 10013 7025 l 2 - 10012 7004 10007 6981 9995 6956 c 0 - 9992 6948 9986 6939 9984 6936 c 0 - 9981 6930 9975 6921 9972 6918 c 0 - 9969 6913 9963 6905 9960 6902 c 0 - 9941 6878 9945 6888 9891 6826 c 0 - 9866 6797 9833 6785 9795 6791 c 0 - 9758 6798 9730 6820 9717 6856 c 0 - 9716 6858 9719 6856 9716 6860 c 2 - 9703 6879 l 2 - 9697 6887 9693 6896 9690 6904 c 1 - 9677 6903 9664 6904 9651 6907 c 0 - 9633 6912 9614 6914 9590 6915 c 0 - 9577 6915 9565 6918 9554 6922 c 1 - 9552 6921 9550 6921 9547 6920 c 1 - 9527 6910 9506 6907 9483 6912 c 1 - 9451 6837 l 2 - 9447 6828 9442 6820 9436 6812 c 2 - 9426 6801 l 2 - 9415 6788 9404 6779 9388 6773 c 0 - 9360 6760 9245 6712 9245 6712 c 1 - 9196 6692 l 2 - 9141 6670 9085 6693 9063 6748 c 0 - 9040 6802 9017 6861 8985 6921 c 0 - 8977 6938 8973 6953 8974 6972 c 2x80c401e4edb01820 - 9009 7929 l 2 - 9010 7947 9014 7961 9023 7977 c 2 - 9047 8019 l 2 - 9114 8134 9191 8207 9335 8342 c 2 - 9342 8348 l 1 - 9431 8597 l 2 - 9439 8620 9452 8637 9469 8649 c 1 - 9483 8689 l 2 - 9483 8690 9486 8701 9486 8705 c 0 - 9486 8706 9485 8711 9485 8712 c 0 - 9484 8714 9484 8716 9484 8717 c 0 - 9481 8726 l 0 - 9462 8786 9397 8873 9303 8951 c 0 - 9284 8966 9273 8984 9268 9006 c 1 - 9266 9006 l 2 - 9237 9008 9213 9021 9195 9044 c 1 - 9173 9034 9149 9033 9125 9040 c 0 - 9116 9043 9103 9046 9082 9051 c 0 - 9076 9052 9081 9050 9081 9050 c 0 - 9051 9050 9041 9038 8980 9038 c 0x80c409e4dc301820 - 8934 9038 8855 9045 8718 9072 c 0 - 8670 9081 8619 9082 8594 9082 c 0 - 8376 9082 8155 9020 8128 9017 c 0 - 7892 8986 7722 8972 7627 8807 c 0 - 7618 8792 7607 8780 7594 8771 c 1x80c405e4dc301820 - 7594 8767 l 2 - 7594 8762 7594 8757 7593 8752 c 0 - 7594 8747 7594 8742 7594 8737 c 2 - 7594 8696 l 1 - 7617 8684 l 2 - 7659 8662 7705 8654 7749 8654 c 0x80c801e4dc301820 - 7879 8654 7949 8698 7997 8716 c 1 - 7997 8717 l 1 - 8154 8768 8230 8778 8290 8778 c 0 - 8325 8778 8412 8770 8465 8770 c 2 - 8471 8770 l 2 - 8531 8770 8519 8771 8525 8771 c 0 - 8542 8773 8555 8779 8565 8786 c 0 - 8573 8792 8580 8795 8589 8799 c 0 - 8641 8819 8706 8844 8767 8844 c 0 - 8770 8844 8778 8844 8781 8843 c 0 - 8926 8832 8952 8837 9043 8813 c 0 - 9095 8799 9125 8753 9118 8700 c 0 - 9110 8644 9105 8625 9099 8607 c 0 - 9093 8589 9084 8575 9070 8562 c 0 - 8993 8494 8952 8457 8778 8144 c 2 - 8777 8142 l 1 - 8738 8032 l 2 - 8726 7998 8700 7975 8665 7967 c 2 - 8585 7948 l 2 - 8573 7946 8563 7945 8550 7946 c 2 - 8537 7948 l 1 - 8525 7938 8510 7931 8493 7927 c 2 - 8379 7900 l 2 - 8350 7893 8323 7898 8298 7915 c 2 - 8295 7917 l 1 - 8283 7902 l 2 - 8282 7900 l 1 - 8237 7840 l 2 - 8222 7821 8203 7808 8183 7803 c 1 - 8087 7623 l 1 - 7985 6992 l 1 - 7999 6977 8008 6959 8012 6937 c 0 - 8042 6777 8126 6569 8130 6563 c 0 - 8130 6562 8131 6561 8131 6561 c 0 - 8202 6451 8501 6078 8958 6060 c 2 - 8962 6060 l 1 - 9142 6060 l 1xc0c411e4dc301820 - 9231 6143 l 2 - 9251 6161 9273 6170 9300 6171 c 0 - 9443 6172 9516 6263 9574 6263 c 2 - 9595 6263 l 1 - 9683 6345 l 2 - 9690 6352 9698 6357 9707 6362 c 2 - 9710 6364 l 1 - 9730 6397 9768 6416 9811 6410 c 2 - 9826 6408 l 1 - 9972 6527 l 2 - 9983 6537 9994 6543 10009 6547 c 2 - 10061 6562 l 1 - 10063 6588 10076 6613 10098 6632 c 2 - 10160 6682 l 2 - 10211 6730 10214 6737 10221 6739 c 1 - 10350 6864 l 1 - 10388 6902 l 2 - 10419 6932 10458 6940 10498 6925 c 0 - 10538 6909 10561 6876 10563 6834 c 2 - 10580 6414 l 2 - 10587 6369 10681 6221 10695 6199 c 0 - 10718 6161 10715 6116 10690 6084 c 1 - 10822 5877 l 1 - 10823 5874 l 2 - 10856 5823 10942 5733 11163 5728 c 0 - 11215 5727 11262 5726 11306 5726 c 0 - 11380 5726 11476 5731 11551 5786 c 0 - 11562 5794 11573 5800 11585 5803 c 1 - 11588 5809 l 2 - 11594 5820 11600 5829 11609 5837 c 2 - 11615 5843 l 1 - 11616 5857 11620 5871 11627 5885 c 2 - 11671 5973 l 2 - 11677 5985 11684 5993 11693 6002 c 0 - 11948 6237 12095 6621 12148 6786 c 0 - 12153 6800 12160 6813 12169 6823 c 1 - 12169 6833 l 2 - 12169 6847 12171 6857 12175 6870 c 2 - 12177 6875 l 1 - 12172 6888 12169 6902 12169 6918 c 2 - 12169 7177 l 1 - 12140 7187 12118 7210 12109 7240 c 1 - 12097 7234 12084 7230 12069 7229 c 0 - 11992 7224 11983 7171 11983 7162 c 0 - 11983 7159 11983 7151 11983 7149 c 0 - 11984 7139 11983 7130 11981 7121 c 1 - 11999 7103 12010 7078 12010 7048 c 2 - 12010 6823 l 2 - 12010 6808 12007 6794 12000 6780 c 0 - 11891 6547 11585 6427 11473 6185 c 0 - 11464 6163 11449 6148 11428 6137 c 2 - 11295 6067 l 1 - 11290 6051 11281 6038 11268 6025 c 2 - 11224 5985 l 2 - 11199 5962 11169 5953 11136 5959 c 0 - 11103 5966 11078 5984 11063 6015 c 2 - 10913 6321 l 2 - 10910 6328 10908 6334 10906 6341 c 2 - 10829 6645 l 2 - 10827 6653 10826 6661 10826 6669 c 2 - 10817 8173 l 2 - 10817 8206 10829 8232 10854 8253 c 0 - 10879 8273 10907 8281 10939 8274 c 0 - 10970 8268 11003 8263 11019 8263 c 0 - 11028 8263 11046 8264 11065 8269 c 0 - 11074 8271 11082 8272 11091 8272 c 2 - 11281 8272 l 2 - 11296 8272 11310 8269 11322 8264 c 1 - 11373 8271 l 2 - 11377 8272 11381 8272 11386 8272 c 2 - 11465 8272 l 1 - 11475 8274 11485 8275 11495 8274 c 0 - 11556 8271 11612 8265 11679 8265 c 0 - 11697 8265 11725 8266 11753 8269 c 0 - 11918 8289 11948 8368 11956 8426 c 0 - 11958 8439 11961 8450 11966 8460 c 1 - 11963 8471 l 2 - 11960 8480 11958 8487 11958 8496 c 2 - 11956 8524 l 2 - 11956 8531 11956 8537 11957 8544 c 1 - 11941 8556 11930 8572 11923 8592 c 2 - 11898 8671 l 1 - 11897 8671 l 2 - 11865 8658 11833 8661 11804 8680 c 0 - 11796 8685 11786 8688 11766 8699 c 1 - 11756 8701 11737 8704 11731 8704 c 2 - 11728 8704 l 2x90c081e4dc701820 - 11640 8704 11495 8630 11437 8630 c 0x80c201e4dc701820 - 11421 8630 11314 8630 11284 8634 c 0 - 11273 8636 11265 8638 11256 8642 c 0 - 11184 8676 11121 8691 11066 8691 c 0 - 11017 8691 10979 8681 10943 8671 c 0 - 10911 8662 10880 8668 10854 8688 c 0 - 10827 8708 10813 8736 10813 8769 c 2 - 10806 9885 l 2 - 10806 9905 10811 9923 10821 9939 c 1 - 10811 9955 10806 9972 10806 9993 c 2 - 10805 10082 l 1x80c101e4ccb01820 - 10769 10086 l 2 - 10764 10086 10758 10087 10755 10087 c 0 -10780 10290 m 2 - 10784 10290 10787 10290 10791 10290 c 2 - 10918 10276 l 2 - 10972 10270 11009 10229 11009 10174 c 2 - 11010 10037 l 1 - 11103 9946 l 2 - 11135 9914 11143 9871 11124 9830 c 0 - 11105 9788 11067 9767 11021 9771 c 2 - 11012 9772 l 1 - 11017 8894 l 1 - 11033 8895 11049 8896 11066 8896 c 0x80c105e4ccb01820 - 11153 8896 11239 8874 11325 8836 c 1 - 11352 8835 11416 8835 11437 8835 c 0x80c201e4ccb01820 - 11466 8835 11571 8909 11729 8909 c 2 - 11733 8909 l 2 - 11764 8908 11817 8898 11837 8891 c 0 - 11844 8889 11849 8887 11855 8883 c 0 - 11858 8882 11861 8880 11865 8878 c 1 - 11924 8902 l 2 - 11951 8912 11978 8912 12005 8899 c 0 - 12032 8886 12050 8866 12059 8838 c 2 - 12103 8701 l 1 - 12194 8664 l 2 - 12235 8647 12258 8612 12258 8568 c 0 - 12258 8524 12234 8490 12193 8473 c 2 - 12179 8468 l 1 - 12184 8451 l 2 - 12194 8423 12191 8396 12177 8370 c 0 - 12168 8355 12158 8343 12145 8335 c 1 - 12106 8207 11999 8092 11776 8066 c 0 - 11737 8061 11702 8061 11679 8061 c 0 - 11612 8061 11559 8065 11508 8068 c 0 - 11503 8068 11497 8067 11490 8067 c 2 - 11393 8067 l 1 - 11298 8054 l 2 - 11272 8050 11249 8055 11229 8067 c 1 - 11103 8067 l 1 - 11068 8060 11039 8058 11022 8058 c 1 - 11031 6683 l 1 - 11102 6402 l 1 - 11182 6238 l 1 - 11303 6303 l 1 - 11441 6564 11715 6691 11805 6848 c 1 - 11805 6948 l 1 - 11733 6949 l 2 - 11686 6950 11649 6978 11636 7024 c 0 - 11623 7069 11640 7112 11680 7138 c 2 - 11783 7204 l 1 - 11799 7290 11865 7394 11999 7425 c 1 - 12120 7624 l 2 - 12145 7665 12188 7683 12235 7670 c 0 - 12281 7657 12310 7619 12310 7571 c 2 - 12310 7368 l 1 - 12348 7354 12374 7318 12374 7272 c 2 - 12374 6982 l 1 - 12381 6974 12387 6966 12392 6956 c 0 - 12405 6929 12407 6902 12396 6873 c 2 - 12374 6815 l 1 - 12374 6754 l 2 - 12374 6715 12354 6682 12323 6665 c 1 - 12262 6489 12109 6116 11846 5865 c 1 - 11839 5850 l 1 - 11841 5842 11842 5833 11843 5824 c 0 - 11844 5793 11833 5767 11811 5746 c 2 - 11763 5701 l 1 - 11735 5645 l 2 - 11713 5602 11670 5581 11625 5590 c 1 - 11566 5555 11474 5522 11306 5522 c 0 - 11259 5522 11212 5522 11159 5524 c 0 - 10862 5530 10715 5663 10650 5765 c 2 - 10648 5768 l 1 - 10465 6055 l 2 - 10440 6095 10443 6141 10471 6174 c 1 - 10408 6280 10386 6332 10378 6382 c 2 - 10377 6388 l 2 - 10376 6392 10376 6396 10376 6400 c 2 - 10374 6439 l 1 - 10369 6437 10364 6435 10358 6434 c 2 - 10085 6356 l 1 - 9922 6222 l 2 - 9899 6203 9873 6195 9843 6199 c 2 - 9836 6200 l 1 - 9831 6197 9822 6192 9813 6187 c 1 - 9707 6087 l 2 - 9687 6069 9665 6060 9639 6059 c 2 - 9576 6058 l 1 - 9576 6058 9602 5977 9343 5967 c 1x90c081e4cc701820 - 9253 5883 l 2 - 9233 5864 9210 5855 9183 5855 c 2 - 8955 5855 l 2 - 8381 5878 8023 6350 7959 6450 c 0 - 7958 6452 7954 6457 7953 6459 c 0 - 7921 6513 7859 6701 7826 6831 c 1 - 7785 6850 7761 6892 7769 6941 c 2 - 7887 7673 l 2 - 7889 7684 7893 7694 7898 7704 c 2 - 8037 7964 l 2 - 8053 7995 8081 8014 8112 8018 c 1 - 8117 8027 8124 8035 8132 8041 c 1 - 8190 8118 l 2 - 8225 8163 8282 8172 8329 8141 c 2 - 8375 8110 l 1 - 8386 8112 l 1 - 8405 8146 8443 8165 8486 8160 c 2 - 8556 8152 l 1 - 8564 8154 l 1 - 8587 8218 l 2 - 8588 8224 8590 8228 8593 8233 c 2 - 8598 8243 l 2 - 8726 8472 8794 8571 8849 8633 c 1 - 8827 8635 8800 8637 8765 8639 c 0 - 8746 8638 8710 8626 8674 8612 c 1 - 8632 8585 8588 8573 8550 8568 c 0 - 8536 8566 8538 8565 8472 8565 c 2 - 8465 8565 l 2 - 8395 8565 8325 8574 8290 8574 c 0 - 8255 8574 8210 8571 8060 8522 c 0 - 8049 8519 8040 8517 8029 8517 c 0 - 8001 8517 8045 8449 7749 8449 c 0 - 7683 8449 7601 8460 7520 8504 c 2 - 7443 8545 l 2 - 7408 8564 7389 8596 7389 8635 c 2 - 7389 8691 l 1 - 7372 8719 7371 8755 7388 8789 c 2 - 7389 8791 l 1 - 7389 8858 l 2 - 7389 8914 7428 8955 7482 8960 c 1 - 7649 9188 7935 9198 8101 9220 c 0 - 8101 9220 8345 9287 8594 9287 c 0xc0c905e4cc701820 - 8627 9287 8694 9285 8758 9272 c 0 - 8886 9247 8955 9242 8980 9242 c 0x80c009e4cc701820 - 9000 9242 9031 9255 9081 9255 c 0 - 9091 9255 9120 9252 9130 9250 c 2 - 9134 9249 l 1 - 9157 9265 l 2 - 9199 9294 9250 9291 9285 9257 c 1 - 9299 9269 l 2 - 9330 9298 9370 9305 9409 9287 c 0x80c005e4cc701820 - 9448 9270 9470 9236 9470 9194 c 2 - 9470 9077 l 1 - 9530 9022 9614 8933 9659 8832 c 1 - 9692 8806 9706 8764 9692 8720 c 1 - 9712 8738 9731 8753 9748 8765 c 1 - 9766 8824 l 2 - 9784 8879 9836 8908 9892 8892 c 2 - 9941 8878 l 1 - 9987 8898 10036 8884 10064 8843 c 1 - 10149 8817 10192 8798 10223 8780 c 1 - 10234 8780 10246 8780 10260 8780 c 1 - 10260 8800 10260 8820 10260 8841 c 0 - 10260 9359 10271 9785 10357 9998 c 2 - 10359 10020 10368 10041 10384 10059 c 2 - 10392 10068 l 1 - 10448 10155 l 2 - 10466 10181 10491 10197 10518 10201 c 1 - 10517 10313 l 2 - 10517 10358 10541 10393 10583 10409 c 0 - 10624 10425 10666 10415 10696 10382 c 2 - 10778 10290 l 1 - 10780 10290 l 2 -10327 7590 m 1 - 10322 7590 l 2 - 10262 7596 10224 7645 10231 7704 c 2 - 10243 7806 l 2 - 10248 7851 10252 7914 10255 7990 c 1 - 10246 7990 l 2 - 10243 7990 l 2 - 10219 7990 10179 7997 10163 8001 c 0 - 10160 8002 10148 8005 10145 8006 c 0 - 10116 8015 10117 8017 10075 8034 c 0 - 9927 8096 9772 8123 9661 8225 c 0 - 9655 8230 9637 8248 9632 8255 c 0 - 9626 8262 9611 8282 9606 8289 c 0 - 9593 8307 9582 8324 9573 8353 c 2 - 9567 8371 l 1 - 9527 8256 l 2 - 9521 8240 9513 8228 9500 8216 c 2 - 9475 8192 l 2 - 9329 8055 9274 8001 9224 7916 c 2 - 9213 7896 l 1x80c001e4dc301820 - 9179 6991 l 1x80c001e4ec301820 - 9192 6967 9202 6943 9212 6920 c 1 - 9275 6947 l 1 - 9331 7078 l 2 - 9350 7121 9389 7145 9433 7140 c 1 - 9443 7154 9457 7166 9474 7174 c 0 - 9512 7192 9552 7186 9584 7159 c 2 - 9634 7117 l 1 - 9644 7116 9655 7115 9667 7113 c 1 - 9716 7134 l 2 - 9733 7141 9750 7144 9767 7142 c 1 - 9819 7164 l 1 - 9832 7209 9873 7239 9924 7236 c 2 - 10020 7230 l 1 - 10036 7245 l 1 - 10042 7262 10054 7277 10071 7290 c 2 - 10085 7300 l 2 - 10107 7316 10131 7322 10156 7320 c 2 - 10159 7320 l 1 - 10338 7320 l 1 - 10327 7590 l 1 -18088 8116 m 2 - 18139 8112 l 2 - 18152 8111 18163 8108 18175 8102 c 2 - 18201 8089 l 2 - 18256 8063 18276 8002 18247 7948 c 0 - 18217 7893 18190 7823 18190 7739 c 0 - 18190 7736 18190 7725 18191 7721 c 2 - 18194 7643 l 2 - 18195 7623 18191 7607 18182 7589 c 2 - 17980 7219 l 2 - 17976 7212 17972 7206 17967 7200 c 0 - 17962 7195 17958 7189 17954 7182 c 0 - 17935 7146 17936 7098 17935 7076 c 0 - 17935 7074 17935 7068 17935 7065 c 0 - 17935 7033 17937 7018 17937 6986 c 0 - 17938 6945 17918 6912 17882 6894 c 0 - 17869 6888 17857 6884 17844 6883 c 1 - 17676 6651 l 1 - 17668 6605 17634 6573 17587 6567 c 0 - 17585 6567 17581 6567 17580 6567 c 0 - 17575 6566 17559 6565 17554 6565 c 0 - 17549 6565 17536 6566 17531 6566 c 0 - 17528 6566 17518 6566 17514 6566 c 0 - 17480 6567 17452 6582 17433 6611 c 0 - 17414 6639 17410 6671 17421 6703 c 2 - 17697 7465 l 1 - 17697 7619 17852 7788 17910 7891 c 0 - 17925 7919 17948 7936 17977 7942 c 1 - 17977 7946 l 2 - 17977 8012 l 0x80c001e4cc301b20 - 17976 8042 17987 8068 18009 8089 c 0 - 18031 8110 18057 8119 18088 8116 c 2 -2196 9536 m 0 - 2197 9554 2203 9572 2215 9588 c 2 - 2225 9604 l 2 - 2229 9609 2233 9614 2238 9619 c 2 - 2246 9627 l 2 - 2288 9669 2349 9669 2391 9627 c 2 - 2402 9617 l 1 - 2421 9611 2438 9599 2450 9583 c 1 - 2475 9561 2487 9529 2483 9493 c 0 - 2476 9442 2438 9407 2386 9404 c 2 - 2377 9404 l 1 - 2355 9395 2333 9394 2311 9401 c 2 - 2284 9401 2260 9411 2240 9431 c 2 - 2224 9447 l 2 - 2200 9472 2190 9504 2196 9536 c 0 -2339 9585 m 1 - 2339 9595 l 1 - 2339 9607 l 2 - 2341 9654 2369 9689 2414 9702 c 0 - 2454 9713 2492 9702 2518 9672 c 1 - 2529 9664 2538 9654 2546 9641 c 2 - 2550 9634 l 2 - 2555 9625 2559 9617 2561 9608 c 1 - 2566 9601 l 2 - 2570 9595 2574 9588 2576 9582 c 0 - 2602 9544 2600 9499 2572 9462 c 2 - 2568 9458 l 2 - 2568 9458 2568 9458 2568 9457 c 0 - 2567 9457 2567 9456 2566 9455 c 0 - 2560 9448 l 2 - 2541 9424 2516 9411 2485 9409 c 2x80c001eccc301820 - 2446 9407 l 2 - 2440 9407 l 0 - 2437 9407 2435 9407 2433 9406 c 2 - 2428 9406 l 2 - 2387 9404 2353 9423 2333 9460 c 2 - 2327 9470 l 2 - 2309 9503 2310 9539 2329 9571 c 0 - 2332 9576 2335 9581 2339 9585 c 1 -2342 9476 m 2 - 2298 9476 2264 9499 2247 9539 c 0 - 2230 9579 2239 9620 2269 9650 c 2 - 2310 9691 l 2 - 2341 9722 2381 9730 2422 9713 c 0 - 2462 9697 2485 9662 2485 9619 c 2 - 2485 9578 l 2 - 2485 9519 2442 9476 2382 9476 c 2 - 2342 9476 l 2 -2312 9425 m 2 - 2265 9444 2241 9489 2251 9539 c 0 - 2261 9589 2300 9622 2351 9622 c 2 - 2354 9622 l 2 - 2383 9622 2407 9612 2427 9592 c 2 - 2429 9589 l 2 - 2465 9553 2470 9502 2442 9460 c 0 - 2413 9417 2365 9403 2318 9422 c 2 - 2312 9425 l 2 -2404 9419 m 2 - 2388 9409 2372 9403 2353 9402 c 2 - 2339 9402 l 2 - 2314 9400 2292 9407 2272 9423 c 2 - 2252 9438 l 2 - 2216 9466 2203 9508 2217 9552 c 0 - 2232 9596 2268 9622 2314 9622 c 2 - 2351 9622 l 2 - 2365 9622 2377 9619 2390 9614 c 2 - 2396 9611 l 2 - 2409 9606 2419 9599 2429 9589 c 2 - 2433 9586 l 2 - 2456 9563 2465 9535 2462 9503 c 0 - 2459 9471 2444 9446 2417 9428 c 2 - 2404 9419 l 2 -2492 9488 m 1 - 2463 9483 2434 9491 2409 9513 c 0 - 2408 9514 2404 9517 2402 9518 c 0 - 2374 9539 2360 9569 2361 9601 c 1 - 2346 9618 2339 9639 2339 9662 c 1 - 2337 9662 l 1 - 2217 9662 l 2 - 2193 9662 2171 9670 2154 9683 c 1 - 2141 9665 2123 9652 2099 9645 c 0 - 2083 9640 2076 9637 2073 9636 c 0 - 2058 9629 2044 9625 2027 9625 c 2 - 2002 9626 l 1 - 1985 9615 1967 9612 1953 9622 c 1 - 1939 9620 1925 9621 1913 9625 c 2 - 1883 9624 1854 9658 1829 9667 c 0 - 1820 9670 1813 9673 1806 9678 c 1 - 1798 9678 1790 9679 1782 9681 c 0 - 1750 9689 1709 9696 1638 9699 c 0 - 1632 9699 1608 9698 1605 9697 c 0 - 1603 9697 1588 9694 1584 9692 c 0 - 1570 9687 1572 9688 1554 9668 c 0 - 1547 9660 1540 9655 1530 9649 c 0 - 1523 9645 1515 9640 1504 9636 c 0 - 1488 9629 1471 9624 1421 9610 c 0 - 1414 9608 1408 9607 1400 9606 c 2 - 1177 9587 l 1 - 1171 9578 1165 9569 1156 9561 c 1 - 1160 9539 1157 9520 1147 9499 c 2 - 1142 9489 l 2 - 1137 9480 1132 9471 1125 9464 c 1 - 1125 9454 1123 9445 1119 9435 c 0 - 1118 9431 1114 9421 1113 9417 c 0 - 1106 9392 1092 9374 1070 9360 c 2 - 927 9269 l 2 - 909 9258 890 9253 868 9253 c 2 - 842 9254 l 1 - 836 9084 823 9058 811 9011 c 0 - 807 9000 806 8993 806 8988 c 0 - 803 8967 803 8955 803 8931 c 2 - 803 8914 l 2 - 803 8890 796 8868 783 8851 c 1 - 879 8196 l 1 - 914 7951 l 2 - 915 7947 915 7944 915 7941 c 0 - 916 7937 917 7934 917 7930 c 2 - 921 7902 l 1 - 928 7896 934 7888 939 7880 c 2 - 1031 7731 l 2 - 1040 7717 1045 7703 1046 7686 c 2 - 1049 7652 l 1 - 1074 7646 1094 7630 1108 7607 c 2 - 1201 7457 l 1 - 1661 7034 l 2 - 1672 7024 1680 7013 1686 7000 c 1 - 1803 7000 l 2x81c005f4cc301820 - 1813 7000 1822 6999 1831 6996 c 0 - 2135 6908 2090 6853 2523 6853 c 0 - 2562 6853 2585 6851 2601 6851 c 2 - 2603 6851 l 1 - 2610 6851 l 2 - 2612 6851 2618 6851 2621 6851 c 0 - 2629 6852 2629 6852 2631 6852 c 2 - 2633 6853 l 2 - 2638 6854 2672 6873 2681 6878 c 0 - 2683 6879 2681 6879 2730 6919 c 0 - 2741 6927 2750 6932 2763 6936 c 2 - 2961 6999 l 2 - 2975 7003 2989 7005 3002 7003 c 1 - 3154 7041 l 1 - 3162 7051 l 2 - 3238 7136 3309 7132 3354 7247 c 2 - 3356 7253 l 1 - 3412 7960 l 1 - 3399 7964 3386 7970 3374 7980 c 0 - 3349 7999 3336 8024 3335 8055 c 1 - 3211 8143 l 2 - 3206 8147 3200 8151 3196 8156 c 2 - 3190 8159 3184 8162 3179 8166 c 2 - 3140 8194 l 1 - 3123 8177 3099 8166 3072 8165 c 0 - 2984 8160 2957 8119 2781 8111 c 0 - 2748 8110 2721 8121 2700 8146 c 1 - 2466 8061 l 2 - 2455 8057 2444 8055 2432 8055 c 2 - 2409 8055 l 1 - 2409 7878 l 1 - 2424 7872 2437 7862 2449 7849 c 0 - 2454 7842 2457 7840 2474 7821 c 0 - 2478 7817 2484 7815 2488 7814 c 0 - 2504 7807 2518 7798 2529 7786 c 1 - 2534 7788 l 2 - 2536 7789 2539 7791 2542 7792 c 0 - 2545 7793 2547 7794 2550 7796 c 2 - 2643 7839 l 2 - 2651 7842 2657 7844 2664 7846 c 2 - 2738 7862 l 1 - 2750 7870 2765 7877 2782 7880 c 0 - 2790 7881 2807 7885 2823 7890 c 0 - 2842 7896 2859 7897 2878 7892 c 2 - 3093 7842 l 2 - 3142 7830 3173 7791 3172 7740 c 0 - 3171 7702 3168 7670 3163 7643 c 0 - 3157 7611 3139 7587 3110 7572 c 0 - 3007 7518 2898 7464 2813 7337 c 0 - 2807 7329 2802 7323 2794 7317 c 2 - 2698 7234 l 2 - 2677 7216 2653 7208 2625 7210 c 0 - 2606 7211 2579 7211 2533 7211 c 2 - 2486 7211 l 2 - 2483 7211 2459 7210 2453 7208 c 0 - 2451 7208 2442 7206 2436 7203 c 0 - 2417 7195 2400 7192 2379 7195 c 2 - 1846 7264 l 2 - 1836 7265 1828 7267 1819 7271 c 0 - 1740 7305 1697 7350 1632 7404 c 0 - 1621 7414 1613 7423 1606 7437 c 2 - 1584 7481 l 2 - 1579 7493 1571 7510 1565 7520 c 2 - 1556 7537 l 1 - 1541 7552 l 0 - 1512 7589 1463 7633 1434 7673 c 0 - 1409 7708 1404 7730 1401 7737 c 2 - 1398 7745 l 1 - 1322 7821 l 2 - 1310 7833 1303 7844 1298 7859 c 2 - 1188 8171 l 2 - 1184 8183 1182 8193 1182 8205 c 2 - 1182 8422 l 1 - 1215 8817 l 2 - 1215 8817 1215 8818 1215 8819 c 2 - 1215 8820 l 1 - 1215 8822 1215 8824 1216 8826 c 2 - 1220 8884 l 1 - 1205 8897 1195 8916 1190 8939 c 0 - 1180 8991 1172 9022 1165 9042 c 0 - 1154 9075 1159 9107 1180 9135 c 2 - 1207 9172 l 2 - 1214 9182 1222 9189 1232 9196 c 0 - 1262 9216 1287 9236 1309 9262 c 2 - 1312 9266 l 2 - 1332 9291 1359 9304 1391 9304 c 2 - 1930 9304 l 2 - 1940 9304 1949 9303 1958 9301 c 1 - 2027 9304 l 1 - 2095 9304 l 1x82c003f4cc301820 - 2104 9307 2113 9308 2123 9309 c 2 - 2301 9318 l 2 - 2334 9319 2362 9308 2382 9287 c 1x80c005f4cc301820 - 2395 9294 2410 9298 2427 9299 c 2 - 2430 9299 2449 9302 2455 9303 c 0 - 2456 9304 2461 9305 2462 9306 c 0 - 2472 9309 2481 9311 2490 9312 c 1 - 2490 9316 l 2 - 2490 9352 2506 9382 2531 9400 c 1 - 2526 9413 2523 9426 2523 9441 c 2 - 2523 9473 l 1 - 2513 9476 2503 9481 2494 9487 c 2 - 2492 9488 l 1 -3168 8387 m 2 - 3169 8387 l 1 - 3168 8387 3168 8387 3168 8387 c 2 -2544 9719 m 1 - 2551 9714 2562 9706 2576 9693 c 0 - 2576 9693 2577 9692 2577 9691 c 0 - 2578 9691 2578 9691 2578 9690 c 0 - 2580 9689 2581 9688 2583 9686 c 0 - 2584 9685 l 0 - 2587 9683 2589 9681 2591 9678 c 2 - 2601 9666 l 1 - 2669 9692 l 2 - 2713 9709 2757 9697 2786 9660 c 0 - 2816 9623 2817 9577 2790 9538 c 2 - 2736 9459 l 1 - 2755 9432 l 2 - 2788 9382 2776 9322 2726 9290 c 2 - 2725 9288 l 1 - 2720 9269 2709 9252 2695 9239 c 1 - 2695 9235 2694 9231 2694 9227 c 1 - 2709 9154 l 2 - 2718 9112 2702 9073 2666 9048 c 0 - 2629 9024 2587 9024 2551 9049 c 2 - 2484 9094 l 1 - 2391 8958 l 2 - 2364 8919 2321 8904 2276 8918 c 0 - 2231 8932 2204 8969 2204 9016 c 2 - 2204 9108 l 1 - 2167 9106 l 1 - 2155 9102 2142 9099 2128 9099 c 2 - 2032 9099 l 1 - 2026 9099 l 1 - 2004 9057 1961 9037 1914 9048 c 0 - 1882 9055 1858 9074 1845 9099 c 1 - 1437 9099 l 1 - 1417 9079 1396 9062 1377 9047 c 1 - 1413 9030 1435 8992 1431 8947 c 2 - 1421 8822 l 1 - 1423 8805 1422 8789 1417 8774 c 1 - 1386 8413 l 1 - 1387 8223 l 1 - 1483 7950 l 1 - 1559 7874 l 2 - 1570 7862 1578 7850 1583 7835 c 2 - 1594 7804 l 2 - 1599 7793 1599 7794 1601 7792 c 0 - 1614 7774 1642 7747 1671 7716 c 1 - 1691 7706 1709 7690 1720 7666 c 2 - 1745 7618 l 2 - 1755 7600 1762 7587 1770 7566 c 2 - 1780 7547 l 1 - 1844 7494 1861 7478 1888 7465 c 1 - 2380 7401 l 1 - 2391 7404 2402 7407 2414 7410 c 0 - 2428 7412 2465 7416 2486 7416 c 2 - 2533 7416 l 2 - 2559 7416 2578 7416 2595 7416 c 1 - 2651 7463 l 1 - 2722 7565 2807 7632 2884 7681 c 1 - 2861 7686 l 1 - 2850 7679 2838 7674 2824 7671 c 2 - 2719 7648 l 1 - 2685 7632 l 1 - 2675 7611 2657 7594 2632 7584 c 0 - 2610 7575 2588 7573 2568 7578 c 1 - 2397 7500 l 2 - 2352 7479 2305 7491 2274 7530 c 0 - 2243 7569 2243 7618 2274 7657 c 2 - 2293 7681 l 1 - 2241 7686 2204 7728 2204 7782 c 2 - 2204 8157 l 2 - 2204 8216 2247 8260 2306 8260 c 2 - 2413 8260 l 1 - 2758 8385 l 2 - 2795 8398 2832 8392 2861 8366 c 0 - 2872 8356 2881 8345 2887 8332 c 1 - 2915 8340 2940 8348 2967 8355 c 1 - 2972 8377 2985 8396 3006 8411 c 0 - 3033 8431 3064 8436 3097 8426 c 2 - 3231 8383 l 2 - 3236 8381 3245 8374 3254 8364 c 1 - 3271 8352 l 1 - 3318 8352 3356 8324 3368 8282 c 1 - 3498 8190 l 2 - 3511 8180 3522 8169 3529 8156 c 1 - 3530 8156 l 2 - 3589 8151 3629 8104 3624 8045 c 2 - 3559 7222 l 2 - 3558 7211 3556 7203 3553 7193 c 2 - 3545 7173 l 2 - 3475 6993 3362 6967 3316 6916 c 2 - 3287 6882 l 2 - 3272 6866 3256 6856 3235 6850 c 2 - 3018 6796 l 2 - 3008 6794 2999 6793 2989 6793 c 1 - 2843 6747 l 1 - 2818 6726 2798 6708 2776 6696 c 0 - 2717 6665 2708 6661 2690 6656 c 0 - 2685 6655 2669 6651 2664 6650 c 0x85c003f4cc301820 - 2660 6650 2648 6648 2640 6647 c 0 - 2634 6647 2616 6646 2610 6646 c 2 - 2604 6646 l 1 - 2601 6646 l 2 - 2586 6646 2554 6648 2523 6648 c 0x82c001f4cc301820 - 2062 6648 2064 6713 1788 6795 c 1 - 1723 6795 l 1 - 1692 6776 1654 6776 1621 6795 c 1 - 1591 6795 l 2 - 1532 6795 1489 6838 1489 6898 c 2 - 1489 6914 l 1 - 1052 7316 l 2 - 1045 7323 1040 7329 1034 7337 c 2 - 1034 7338 l 1 - 1012 7320 984 7312 952 7316 c 0 - 903 7323 870 7359 865 7409 c 2 - 844 7644 l 1 - 794 7725 l 1 - 759 7737 734 7767 728 7808 c 2 - 716 7892 l 2 - 712 7903 710 7913 710 7924 c 2 - 710 7929 l 1 - 676 8167 l 1 - 569 8894 l 2 - 564 8931 576 8963 599 8985 c 1 - 600 8995 601 9005 603 9018 c 0 - 605 9032 608 9047 613 9066 c 0 - 623 9103 632 9104 637 9262 c 2 - 641 9364 l 2 - 643 9423 688 9465 747 9463 c 2 - 844 9459 l 1 - 917 9505 l 1 - 915 9520 l 2 - 915 9521 915 9522 915 9522 c 0 - 912 9553 921 9581 939 9602 c 1 - 938 9607 l 2 - 929 9653 948 9694 984 9715 c 2 - 996 9753 1030 9781 1074 9784 c 2 - 1373 9809 l 1 - 1390 9814 1408 9819 1419 9823 c 1 - 1446 9850 1469 9867 1509 9883 c 0 - 1528 9890 1562 9898 1575 9900 c 0 - 1588 9902 1619 9904 1638 9904 c 2 - 1642 9904 l 2 - 1707 9901 1760 9894 1802 9886 c 1 - 1867 9906 l 2 - 1912 9919 1955 9904 1981 9866 c 0 - 1988 9855 1993 9844 1996 9834 c 1 - 2118 10132 l 2 - 2137 10180 2182 10204 2232 10194 c 0 - 2282 10185 2315 10146 2315 10095 c 2 - 2318 9868 l 1 - 2333 9871 2348 9871 2362 9867 c 1 - 2441 9867 l 2 - 2501 9867 2544 9824 2544 9765 c 2 - 2544 9719 l 1 -2507 9673 m 0 - 2520 9665 2531 9654 2540 9640 c 2 - 2544 9635 l 2 - 2549 9627 2553 9618 2556 9610 c 1 - 2561 9603 l 2 - 2597 9554 2586 9491 2535 9457 c 2 - 2498 9433 l 2 - 2465 9411 2428 9409 2393 9428 c 0 - 2358 9446 2339 9478 2339 9518 c 2 - 2339 9593 l 2 - 2339 9640 2365 9676 2410 9691 c 0 - 2445 9702 2480 9696 2507 9673 c 0 -1974 9626 m 0 - 2020 9629 2059 9663 2068 9710 c 0 - 2077 9764 2044 9815 1992 9828 c 0 - 1991 9828 1991 9828 1991 9828 c 1 - 1988 9829 1986 9829 1984 9829 c 0 - 1979 9830 1973 9831 1967 9831 c 0 - 1911 9834 1862 9791 1859 9735 c 0 - 1855 9679 1898 9630 1954 9627 c 2 - 1955 9627 l 2 - 1961 9626 1968 9626 1974 9626 c 0 -1782 9591 m 1 - 1837 9582 1874 9530 1865 9475 c 0 - 1856 9420 1804 9382 1749 9391 c 1 - 1727 9399 1707 9405 1686 9408 c 1 - 1676 9402 l 1 - 1671 9399 l 1 - 1618 9385 1564 9417 1550 9470 c 0 - 1536 9523 1568 9577 1620 9591 c 1 - 1782 9591 l 1 -1620 9386 m 2 - 1572 9386 1534 9415 1521 9462 c 0 - 1509 9509 1528 9553 1570 9577 c 2 - 1574 9580 l 2 - 1579 9583 1588 9588 1597 9595 c 0 - 1617 9611 1639 9618 1666 9617 c 0 - 1724 9613 1774 9599 1815 9585 c 0 - 1865 9569 1892 9524 1883 9472 c 0 - 1875 9420 1835 9386 1782 9386 c 2 - 1620 9386 l 2 -3475 7964 m 2 - 3423 7950 3375 7972 3353 8021 c 2 - 3352 8023 l 2 - 3337 8056 3339 8089 3358 8119 c 0 - 3377 8149 3405 8166 3441 8168 c 2 - 3452 8168 l 2 - 3507 8170 3549 8136 3558 8082 c 0 - 3567 8029 3537 7982 3485 7967 c 2 - 3475 7964 l 2 -3461 7964 m 2 - 3407 7961 3364 7996 3356 8049 c 0 - 3347 8103 3376 8149 3429 8164 c 2 - 3448 8170 l 2 - 3478 8178 3506 8174 3533 8157 c 0 - 3559 8139 3574 8115 3578 8084 c 0 - 3578 8081 l 0 - 3582 8051 3575 8025 3555 8001 c 0 - 3536 7978 3511 7966 3481 7964 c 2 - 3461 7964 l 2 -2607 8081 m 1 - 2607 8081 l 1 -2605 8083 m 0 - 2566 8126 2568 8187 2612 8227 c 0 - 2656 8267 2717 8264 2757 8221 c 2 - 2758 8220 l 2 - 2796 8178 2793 8113 2751 8075 c 0 - 2710 8037 2645 8040 2607 8081 c 1 - 2605 8083 l 0 -3095 8165 m 0 - 3107 8165 3145 8158 3157 8153 c 0 - 3161 8151 3175 8152 3196 8144 c 0 - 3209 8142 3220 8136 3232 8128 c 2 - 3275 8097 l 2 - 3309 8073 3324 8035 3316 7993 c 0 - 3310 7965 3295 7943 3273 7928 c 1 - 3248 7905 3216 7897 3181 7905 c 2 - 2989 7950 l 2 - 2942 7962 2911 7998 2910 8047 c 0 - 2908 8095 2936 8134 2982 8148 c 0 - 3014 8158 3050 8165 3095 8165 c 0 -1094 9121 m 1 - 1062 9098 1025 9096 990 9114 c 2 - 979 9119 l 2 - 945 9136 925 9167 923 9205 c 0 - 921 9244 938 9276 970 9297 c 2 - 1104 9382 l 1 - 1098 9410 1103 9437 1119 9462 c 0 - 1137 9489 1163 9504 1196 9507 c 2 - 1254 9511 l 2 - 1289 9514 1319 9501 1342 9474 c 0 - 1364 9446 1370 9413 1360 9379 c 2 - 1344 9327 l 2 - 1335 9299 1323 9279 1309 9263 c 0 - 1304 9257 1291 9239 1257 9214 c 0 - 1250 9209 1243 9204 1240 9202 c 0 - 1210 9183 1175 9166 1149 9144 c 0 - 1133 9130 1115 9123 1094 9121 c 1 -2544 9501 m 1 - 2339 9501 l 1 - 2339 9509 l 1 - 2544 9509 l 1 - 2544 9501 l 1 -2297 9622 m 2 - 2325 9622 2349 9612 2369 9592 c 2 - 2385 9575 l 2 - 2415 9545 2424 9506 2408 9466 c 0 - 2393 9426 2360 9403 2318 9401 c 2 - 2317 9401 l 2 - 2286 9399 2261 9409 2239 9431 c 2 - 2223 9447 l 2 - 2193 9478 2185 9519 2202 9559 c 0 - 2218 9599 2253 9622 2296 9622 c 2 - 2297 9622 l 2 -2498 9407 m 2 - 2465 9395 2433 9399 2404 9419 c 0 - 2375 9439 2359 9468 2359 9503 c 2 - 2359 9507 l 2 - 2359 9552 2385 9588 2428 9604 c 0 - 2471 9619 2513 9607 2542 9571 c 2 - 2544 9568 l 2 - 2566 9541 2572 9510 2563 9477 c 0 - 2554 9444 2533 9421 2501 9408 c 2 - 2498 9407 l 2 -5972 7058 m 1 - 5940 7070 5916 7097 5908 7135 c 2 - 5825 7553 l 2 - 5823 7559 5823 7563 5823 7569 c 2 - 5823 7572 l 1 - 5823 7775 l 2 - 5823 7836 5868 7879 5928 7877 c 0 - 5935 7877 5954 7877 5961 7877 c 0 - 6043 7877 6143 7890 6297 7942 c 0 - 6301 7944 6313 7947 6318 7947 c 0 - 6352 7952 6460 7976 6632 8108 c 0 - 6637 8112 6641 8115 6646 8118 c 2 - 6914 8270 l 1 - 6917 8289 6926 8307 6940 8322 c 0 - 6950 8332 6966 8352 6966 8392 c 0 - 6966 8403 6966 8411 6964 8419 c 0 - 6958 8458 6972 8493 7000 8515 c 1 - 6990 8527 6983 8542 6980 8559 c 2 - 6962 8651 l 1 - 6942 8653 6924 8660 6908 8674 c 0 - 6906 8675 6901 8679 6899 8681 c 0 - 6879 8695 6853 8708 6834 8719 c 2 - 6816 8729 l 1 - 6809 8726 6802 8724 6795 8722 c 2 - 6772 8708 6746 8704 6718 8710 c 2 - 6436 8778 l 1 - 6280 8778 l 2 - 6273 8778 6266 8778 6259 8780 c 2 - 6251 8782 l 1 - 6244 8776 6237 8770 6228 8766 c 0 - 6221 8762 6214 8758 6207 8756 c 1 - 6166 8711 l 2 - 6162 8706 6157 8702 6152 8698 c 2 - 5933 8534 l 1 - 5800 8317 5702 8192 5607 8118 c 0 - 5605 8116 5604 8115 5602 8113 c 2 - 5598 8110 l 2 - 5577 8094 5584 8098 5585 8098 c 1 - 5576 8075 5561 8058 5539 8046 c 0 - 5537 8045 5531 8041 5529 8039 c 0 - 5515 8030 5518 8032 5502 8007 c 0 - 5492 7992 5501 8006 5501 8006 c 0 - 5499 8003 5500 8004 5499 8002 c 0 - 5498 8000 5498 7999 5497 7996 c 0 - 5496 7992 5493 7979 5493 7975 c 0 - 5490 7962 5489 7954 5488 7902 c 0 - 5487 7883 5482 7865 5473 7851 c 1 - 5477 7844 l 2 - 5480 7838 5482 7832 5484 7825 c 2 - 5487 7815 l 2 - 5487 7813 5489 7808 5489 7806 c 0 - 5489 7803 5491 7797 5492 7794 c 0 - 5500 7761 5513 7747 5515 7742 c 0 - 5516 7741 5517 7740 5518 7740 c 0 - 5519 7738 5523 7734 5524 7733 c 0 - 5534 7724 5541 7715 5547 7703 c 2 - 5568 7661 l 2 - 5575 7646 5579 7633 5579 7616 c 2 - 5579 7612 l 2x80c011e6cc301820 - 5580 7445 5599 7422 5648 7333 c 0 - 5653 7325 5656 7317 5658 7308 c 2 - 5717 7073 l 2 - 5718 7070 5719 7066 5719 7063 c 0 - 5720 7060 5721 7057 5722 7053 c 2 - 5722 7052 l 2x80c011e5cc301820 - 5725 7043 5726 7035 5725 7025 c 0 - 5725 7017 5724 7001 5724 6985 c 2 - 5724 6983 l 2 - 5724 6979 5724 6967 5725 6964 c 0 - 5725 6954 5727 6944 5731 6932 c 0 - 5734 6921 5740 6909 5750 6898 c 0 - 5764 6884 5772 6870 5777 6851 c 2 - 5865 6479 l 2 - 5865 6478 5866 6476 5866 6475 c 1 - 5881 6469 l 2 - 5937 6446 5985 6440 6022 6416 c 2 - 6030 6411 l 1 - 6243 6392 l 1 - 6243 6395 l 2 - 6245 6421 6256 6443 6276 6461 c 0 - 6334 6514 6406 6565 6505 6599 c 1 - 6595 6689 l 2 - 6620 6714 6652 6724 6683 6719 c 1 - 6687 6725 l 2 - 6729 6793 6745 6796 6854 6908 c 0 - 6860 6915 6866 6919 6873 6924 c 2 - 7117 7076 l 1 - 7109 7106 7115 7140 7136 7167 c 0 - 7146 7179 7170 7216 7188 7258 c 0 - 7194 7271 7201 7282 7212 7292 c 2 - 7464 7528 l 1 - 7464 7540 l 0 - 7465 7571 7478 7596 7502 7616 c 2 - 7623 7713 l 1 - 7501 7847 l 1 - 7468 7829 7431 7830 7399 7850 c 1 - 7192 7654 l 1 - 7211 7617 7204 7573 7173 7540 c 2 - 6900 7253 l 2 - 6895 7247 6890 7243 6884 7239 c 0 - 6836 7206 6721 7088 6687 7055 c 0 - 6654 7023 6609 7017 6571 7037 c 1 - 6568 7033 l 2 - 6471 6936 6443 6914 6414 6870 c 0 - 6404 6856 6394 6846 6379 6838 c 2 - 6175 6723 l 2 - 6128 6696 6074 6708 6042 6753 c 2 - 6024 6778 l 2 - 6014 6792 6008 6806 6006 6823 c 2 - 5972 7058 l 1 -5585 8098 m 1 - 5585 8098 l 1 -7170 8361 m 1 - 7166 8309 7151 8266 7135 8236 c 1 - 7142 8195 7124 8155 7084 8132 c 2 - 6754 7943 l 2 - 6677 7884 6525 7777 6364 7749 c 2 - 6229 7703 6120 7681 6027 7674 c 1 - 6027 7584 l 1 - 6092 7261 l 1 - 6129 7250 6156 7220 6162 7177 c 2 - 6192 6967 l 1 - 6258 7005 l 1 - 6301 7064 6342 7097 6422 7177 c 2 - 6494 7250 l 2 - 6527 7283 6573 7290 6612 7271 c 1 - 6655 7314 6710 7366 6759 7401 c 1 - 6959 7612 l 1 - 6936 7652 6943 7700 6979 7734 c 2 - 7327 8063 l 2 - 7365 8099 7417 8102 7457 8072 c 1 - 7500 8101 7552 8094 7588 8055 c 2 - 7848 7771 l 2 - 7868 7749 7877 7724 7875 7694 c 0 - 7873 7664 7860 7640 7837 7622 c 2 - 7696 7509 l 1 - 7696 7480 7685 7455 7664 7435 c 2 - 7367 7157 l 1 - 7355 7132 7342 7108 7329 7087 c 1 - 7329 6994 l 2 - 7329 6935 7286 6892 7227 6892 c 2 - 7209 6892 l 1 - 6992 6757 l 1 - 6875 6637 6887 6659 6862 6618 c 2 - 6808 6531 l 2 - 6781 6485 6730 6469 6684 6488 c 1 - 6632 6437 l 2 - 6621 6425 6609 6418 6593 6412 c 2 - 6570 6405 l 2 - 6556 6400 6508 6386 6443 6335 c 1 - 6438 6271 l 2 - 6432 6213 6385 6173 6326 6179 c 2 - 6259 6185 l 1 - 6245 6183 6231 6184 6218 6189 c 1 - 5988 6210 l 2 - 5971 6211 5957 6216 5943 6225 c 2 - 5914 6243 l 2 - 5904 6249 5868 6253 5804 6279 c 2 - 5778 6289 l 1 - 5751 6289 5727 6299 5709 6317 c 1 - 5655 6339 5631 6395 5653 6450 c 2 - 5658 6464 l 1 - 5583 6779 l 1 - 5564 6803 5548 6833 5536 6869 c 0 - 5529 6891 5523 6915 5520 6947 c 0 - 5520 6954 5519 6974 5519 6981 c 2 - 5519 6985 l 1 - 5519 6986 l 1x88c011e5cc301820 - 5507 7007 5504 7032 5510 7056 c 1 - 5463 7245 l 1 - 5408 7342 5378 7404 5374 7591 c 1 - 5371 7597 l 2 - 5367 7601 5363 7606 5361 7608 c 0 - 5355 7615 5339 7637 5335 7645 c 0 - 5330 7655 5309 7682 5293 7744 c 0 - 5292 7747 5290 7756 5289 7760 c 2 - 5289 7761 l 1 - 5229 7882 l 2 - 5209 7922 5215 7964 5244 7996 c 0 - 5259 8013 5276 8023 5295 8028 c 1 - 5297 8038 5299 8048 5300 8053 c 0 - 5302 8057 5306 8070 5308 8075 c 0 - 5310 8079 5315 8093 5318 8097 c 0 - 5320 8102 5327 8115 5330 8119 c 0 - 5355 8158 5372 8179 5409 8206 c 0 - 5409 8206 5411 8207 5412 8208 c 1 - 5422 8224 5434 8238 5447 8250 c 1 - 5460 8274 5480 8291 5504 8299 c 1 - 5570 8359 5653 8469 5759 8641 c 2 - 5769 8658 l 2 - 5776 8669 5784 8678 5795 8686 c 2 - 6021 8856 l 1 - 6084 8926 l 1 - 6090 8950 6103 8969 6124 8984 c 0 - 6149 9002 6176 9008 6206 9001 c 2 - 6291 8983 l 1 - 6448 8983 l 2 - 6456 8983 6463 8982 6471 8980 c 2 - 6670 8932 l 1 - 6673 8935 6677 8937 6680 8939 c 0 - 6701 8952 6724 8957 6747 8954 c 1 - 6774 8967 6807 8966 6838 8950 c 2 - 6934 8898 l 2 - 6948 8890 6976 8875 7004 8857 c 1 - 7041 8858 l 2 - 7094 8861 7135 8828 7145 8776 c 2 - 7173 8638 l 1 - 7280 8558 l 2 - 7316 8531 7330 8489 7316 8446 c 0 - 7303 8402 7268 8375 7223 8374 c 2 - 7183 8372 l 1 - 7179 8368 7175 8364 7170 8361 c 1 -7328 7590 m 2 - 7333 7623 7349 7648 7378 7665 c 0 - 7406 7682 7436 7685 7467 7673 c 2 - 7491 7664 l 2 - 7543 7643 7568 7592 7552 7539 c 2 - 7537 7489 l 2 - 7523 7441 7482 7413 7432 7416 c 0 - 7428 7416 7416 7417 7412 7417 c 0 - 7352 7423 7313 7472 7321 7532 c 2 - 7328 7590 l 2 -3786 8082 m 2 - 3762 8104 3751 8131 3753 8164 c 0 - 3755 8196 3769 8221 3795 8240 c 0 - 3799 8243 3808 8249 3811 8252 c 0 - 3846 8279 3888 8282 3926 8260 c 0 - 3964 8238 3983 8200 3976 8157 c 2 - 3976 8153 l 1 - 3971 8126 l 2 - 3965 8087 3941 8059 3903 8046 c 0 - 3866 8033 3830 8041 3801 8068 c 2 - 3786 8082 l 2 -3836 8193 m 1 -10285 7100 m 1 - 10282 7085 10276 7071 10266 7057 c 0 - 10245 7028 10214 7014 10178 7016 c 2 - 10176 7016 l 2 - 10133 7019 10101 7043 10086 7083 c 2 - 10069 7129 l 2 - 10052 7175 10066 7220 10106 7248 c 2 - 10122 7259 l 2 - 10157 7284 10199 7285 10236 7262 c 2 - 10258 7248 l 2 - 10286 7230 10302 7205 10305 7172 c 0 - 10308 7145 10301 7120 10285 7100 c 1 -10209 7259 m 0 - 10213 7259 10217 7259 10220 7258 c 0 - 10221 7258 l 1 - 10229 7257 10237 7255 10244 7253 c 0 - 10282 7240 10307 7209 10311 7169 c 0 - 10311 7160 l 0 - 10312 7155 10311 7150 10311 7145 c 0 - 10310 7137 10308 7130 10306 7123 c 0 - 10294 7084 10262 7059 10221 7055 c 0 - 10218 7054 10216 7054 10213 7054 c 0 - 10208 7054 10202 7054 10197 7055 c 2 - 10196 7055 l 2 - 10141 7061 10105 7104 10106 7157 c 0 - 10106 7161 10106 7165 10107 7169 c 0 - 10113 7223 10155 7260 10209 7259 c 0 -9087 6690 m 0 - 9072 6723 9075 6757 9095 6787 c 0 - 9114 6818 9144 6834 9181 6834 c 2 - 9235 6834 l 2 - 9277 6834 9310 6813 9328 6775 c 0 - 9345 6737 9340 6698 9313 6666 c 2 - 9279 6625 l 2 - 9256 6598 9225 6585 9190 6589 c 0 - 9155 6593 9127 6611 9110 6642 c 0 - 9101 6659 9093 6676 9087 6690 c 0 -9115 6634 m 0 - 9099 6663 9097 6692 9109 6722 c 0 - 9120 6752 9142 6772 9172 6782 c 2 - 9218 6797 l 2 - 9259 6810 9300 6798 9328 6765 c 0 - 9356 6731 9360 6690 9339 6651 c 0 - 9333 6639 9322 6618 9313 6602 c 0 - 9294 6571 9266 6553 9230 6551 c 0 - 9194 6549 9164 6563 9142 6592 c 0 - 9133 6604 9124 6617 9115 6634 c 0 -8536 6768 m 0 - 8549 6731 8557 6711 8564 6698 c 0 - 8574 6679 8580 6671 8602 6659 c 0 - 8611 6653 8619 6649 8627 6645 c 1 - 8566 6889 8531 7140 8516 7389 c 1 - 8485 7330 8464 7252 8464 7147 c 0 - 8464 6996 8511 6840 8536 6768 c 0 -8259 7147 m 0 - 8259 7361 8328 7575 8556 7712 c 0 - 8589 7732 8625 7733 8658 7714 c 0 - 8692 7696 8710 7665 8711 7627 c 0 - 8718 7240 8768 6845 8886 6482 c 0 - 8900 6440 8888 6400 8855 6372 c 0 - 8821 6344 8779 6340 8740 6360 c 0 - 8597 6437 8545 6455 8499 6482 c 0 - 8440 6516 8409 6551 8382 6603 c 0 - 8367 6632 8355 6664 8342 6702 c 0 - 8298 6831 8259 6989 8259 7147 c 0 -20240 8223 m 2 - 20167 8259 l 1 - 20154 8265 l 2 - 20137 8274 20136 8273 20124 8277 c 0 - 20123 8277 20122 8277 20122 8277 c 0 - 20120 8277 20116 8278 20115 8279 c 0 - 20113 8279 20109 8280 20108 8280 c 0 - 20099 8281 20089 8281 20070 8281 c 0 - 20060 8281 20035 8281 20019 8281 c 0 - 20019 8281 20018 8281 20014 8280 c 0 - 19976 8266 19735 8104 19654 8049 c 0 - 19644 8040 19634 8033 19623 8028 c 1 - 19588 7985 l 2 - 19585 7982 19583 7980 19580 7977 c 2 - 19569 7966 l 1 - 19567 7961 19565 7955 19563 7949 c 0 - 19539 7894 19474 7657 19474 7657 c 2 - 19473 7656 l 2 - 19471 7654 19465 7646 19464 7645 c 0 - 19446 7614 19414 7521 19383 7466 c 0 - 19372 7445 19356 7431 19335 7422 c 1 - 19320 7240 l 2 - 19318 7216 19309 7195 19294 7179 c 1 - 19373 6523 l 1 - 19395 6514 l 2 - 19453 6492 19468 6437 19472 6426 c 0 - 19482 6401 19496 6348 19505 6321 c 0 - 19517 6286 19528 6267 19537 6255 c 0 - 19557 6228 19579 6222 19585 6220 c 0 - 19604 6213 19619 6202 19631 6187 c 1 - 19668 6165 l 2 - 19677 6161 19683 6156 19689 6150 c 2 - 19701 6138 l 1 - 19713 6137 19726 6134 19738 6128 c 0 - 19829 6085 19897 6077 19937 6077 c 0xa0e001e4cc301820 - 19955 6077 19973 6078 19982 6078 c 0 - 20162 6078 20241 6215 20277 6260 c 0 - 20312 6303 20309 6283 20359 6313 c 1 - 20365 6315 l 2 - 20370 6315 20374 6316 20379 6316 c 1 - 20384 6325 20390 6334 20398 6342 c 2 - 20399 6343 l 2 - 20464 6406 20487 6450 20560 6501 c 2 - 20569 6507 l 1 - 20757 6912 l 1 - 20815 7024 l 1 - 20794 7049 20787 7081 20796 7115 c 2 - 20957 7714 l 1 - 20958 7715 20958 7717 20959 7718 c 2 - 20965 7741 l 2 - 20970 7760 20979 7776 20992 7788 c 0 - 20996 7793 21001 7798 21007 7803 c 2 - 21010 7806 l 2 - 21013 7807 21015 7809 21017 7811 c 2 - 21063 7857 l 2 - 21202 7996 21184 8166 21291 8371 c 0 - 21470 8714 21689 9351 21859 9573 c 0 - 22153 9956 22032 9826 22301 10310 c 0 - 22302 10313 22303 10315 22305 10317 c 2 - 22305 10319 l 1 - 22352 10425 l 2 - 22354 10430 22357 10435 22360 10440 c 0 - 22360 10441 22360 10442 22361 10443 c 1 - 22330 10456 l 2 - 22314 10463 22303 10471 22292 10484 c 0 - 22291 10485 22290 10487 22289 10487 c 0 - 22284 10493 22280 10497 22275 10504 c 1 - 22265 10503 22255 10503 22246 10506 c 1 - 22236 10503 22231 10502 22219 10498 c 2 - 22107 10461 l 1 - 22112 10438 22108 10415 22096 10394 c 2 - 21770 9810 l 1 - 21770 9809 l 2 - 21767 9803 21759 9782 21755 9776 c 0 - 21727 9731 21718 9731 21623 9539 c 0 - 21133 8561 21392 9044 21161 8547 c 0 - 21141 8502 21156 8537 21149 8527 c 0 - 21100 8458 20886 8026 20885 8025 c 2 - 20870 7994 l 2 - 20855 7965 20832 7946 20800 7939 c 0 - 20768 7932 20740 7939 20714 7959 c 0 - 20596 8053 20588 8105 20514 8153 c 0 - 20503 8160 20490 8167 20477 8172 c 0 - 20438 8187 20415 8187 20368 8191 c 0 - 20362 8192 20345 8192 20340 8192 c 2 - 20329 8192 l 2 - 20312 8192 20298 8195 20282 8203 c 0 - 20274 8207 20260 8214 20240 8223 c 2 -19561 8234 m 1 - 19647 8292 19882 8449 19942 8471 c 0 - 19956 8477 19993 8486 20019 8486 c 0 - 20043 8486 20054 8486 20070 8486 c 0 - 20108 8486 20127 8484 20133 8483 c 0 - 20137 8482 20147 8481 20151 8480 c 0 - 20155 8480 20165 8477 20169 8476 c 0 - 20174 8475 20187 8472 20192 8470 c 0 - 20235 8455 20225 8459 20246 8448 c 2 - 20258 8442 l 1 - 20328 8408 l 1 - 20353 8396 l 1 - 20364 8396 20378 8396 20384 8395 c 0 - 20451 8390 20489 8387 20551 8363 c 0 - 20578 8352 20603 8339 20625 8325 c 0 - 20682 8288 20714 8250 20749 8211 c 1 - 20813 8339 20922 8552 20976 8634 c 1 - 21193 9103 20950 8653 21439 9631 c 0 - 21543 9838 21564 9856 21579 9881 c 0 - 21580 9881 21578 9881 21578 9881 c 1 - 21580 9887 l 2 - 21582 9893 21584 9897 21587 9902 c 2 - 21895 10454 l 1 - 21894 10455 l 1 - 21881 10493 l 2 - 21862 10549 21889 10604 21946 10623 c 2 - 22161 10694 l 2 - 22172 10697 22177 10699 22182 10701 c 0 - 22199 10711 22220 10715 22242 10712 c 1 - 22254 10720 l 2 - 22303 10753 22363 10741 22396 10692 c 2 - 22434 10634 l 1 - 22498 10607 l 1 - 22498 10604 22503 10605 22535 10592 c 0 - 22590 10568 22613 10511 22589 10456 c 2 - 22572 10416 l 1 - 22579 10377 22563 10339 22527 10314 c 1 - 22498 10249 l 1 - 22496 10221 22484 10197 22462 10180 c 1 - 22230 9756 22313 9829 22022 9449 c 0 - 21878 9261 21644 8604 21473 8276 c 0 - 21379 8097 21390 7895 21208 7713 c 2 - 21155 7659 l 1 - 21015 7141 l 1 - 21053 7111 21064 7061 21040 7016 c 2 - 20941 6822 l 1 - 20743 6395 l 2 - 20735 6378 20724 6365 20708 6354 c 2 - 20677 6332 l 2 - 20637 6305 20620 6278 20579 6234 c 1 - 20582 6182 20548 6138 20494 6129 c 2 - 20469 6125 l 1 - 20451 6108 20431 6098 20409 6096 c 1 - 20349 6016 20224 5874 19982 5874 c 0 - 19960 5874 19973 5872 19937 5872 c 0 - 19875 5872 19797 5884 19706 5919 c 1 - 19672 5908 19634 5917 19605 5945 c 2 - 19556 5994 l 1 - 19495 6029 l 2 - 19484 6035 19475 6042 19468 6050 c 2 - 19430 6070 19401 6094 19372 6133 c 0 - 19347 6167 19328 6207 19311 6255 c 0 - 19302 6282 19294 6310 19288 6331 c 1 - 19246 6328 19210 6347 19192 6381 c 1 - 19161 6409 19151 6452 19168 6494 c 2 - 19170 6497 l 1 - 19081 7233 l 2 - 19077 7273 19093 7308 19122 7328 c 1 - 19137 7502 l 2 - 19140 7542 19163 7573 19200 7588 c 2 - 19219 7595 l 1 - 19240 7644 19272 7721 19289 7749 c 0 - 19293 7757 19306 7776 19315 7786 c 0 - 19321 7792 l 1 - 19299 7787 19296 7840 19356 7986 c 1 - 19351 8017 19361 8049 19387 8075 c 2 - 19433 8119 l 1 - 19496 8197 l 2 - 19513 8218 19535 8230 19561 8234 c 1 -19575 8075 m 2 - 19606 8045 19614 8005 19598 7965 c 0 - 19591 7946 19584 7927 19581 7918 c 0 - 19571 7887 19551 7865 19521 7854 c 0 - 19490 7842 19461 7844 19432 7861 c 2 - 19427 7864 l 2 - 19402 7878 19386 7899 19379 7926 c 2 - 19367 7972 l 2 - 19361 7996 19362 8017 19372 8039 c 0 - 19373 8041 19370 8039 19372 8049 c 0 - 19378 8089 19403 8118 19441 8130 c 0 - 19480 8143 19517 8134 19545 8105 c 2 - 19575 8075 l 2 -19403 7456 m 0 - 19391 7440 19378 7430 19360 7422 c 2 - 19350 7418 l 2 - 19314 7403 19278 7409 19247 7433 c 0 - 19217 7458 19204 7492 19210 7531 c 2 - 19215 7559 l 2 - 19222 7599 19247 7627 19286 7639 c 0 - 19324 7651 19361 7642 19389 7613 c 2 - 19402 7601 l 2 - 19436 7566 19442 7519 19417 7477 c 0 - 19414 7472 19406 7460 19403 7456 c 0 -21119 7767 m 2 - 21116 7712 21077 7673 21023 7670 c 2 - 21022 7670 l 1 - 20985 7641 20931 7649 20902 7687 c 0 - 20874 7724 20881 7778 20919 7807 c 1 - 20923 7819 20951 7852 20961 7859 c 0 - 20995 7880 21033 7881 21068 7861 c 0 - 21103 7841 21121 7807 21119 7767 c 2 -21084 7723 m 1 - 21082 7710 21079 7698 21072 7687 c 1 - 21076 7692 21112 7737 21112 7737 c 1 - 21103 7730 21093 7726 21084 7723 c 1 -21123 7838 m 2 - 21156 7806 21164 7763 21144 7722 c 0 - 21125 7680 21087 7658 21041 7663 c 2 - 21008 7666 l 2 - 20967 7671 20937 7694 20922 7733 c 2 - 20921 7737 l 2 - 20903 7784 20919 7831 20961 7859 c 0 - 20962 7859 20964 7861 20965 7861 c 0 - 20991 7881 21021 7887 21052 7878 c 2 - 21067 7874 l 2 - 21085 7869 21099 7862 21112 7849 c 2 - 21123 7838 l 2 -21123 7859 m 2 - 21177 7845 21208 7797 21198 7742 c 0 - 21188 7687 21142 7653 21087 7658 c 2 - 21064 7661 l 2 - 21023 7665 20992 7689 20978 7728 c 0 - 20964 7766 20972 7804 21001 7834 c 2 - 21004 7837 l 2 - 21031 7865 21066 7875 21104 7865 c 2 - 21123 7859 l 2 -19934 6435 m 0 - 19915 6433 19899 6435 19882 6444 c 0 - 19874 6447 19866 6450 19846 6464 c 0 - 19841 6467 19836 6470 19834 6472 c 0 - 19803 6494 19760 6531 19693 6596 c 0 - 19686 6603 19681 6609 19676 6617 c 2 - 19601 6743 l 2 - 19588 6764 19584 6784 19587 6807 c 0 - 19595 6887 19601 6980 19601 7074 c 0x84c001e4cc301860 - 19601 7261 19581 7375 19564 7447 c 0 - 19562 7452 19562 7457 19561 7462 c 0 - 19560 7471 19559 7496 19559 7505 c 0 - 19559 7697 19686 7815 19771 7896 c 2 - 19934 8043 l 2 - 19954 8061 19976 8069 20003 8069 c 2 - 20036 8069 l 2 - 20241 8056 20338 7943 20371 7887 c 2 - 20379 7873 l 1 - 20641 7786 l 2 - 20696 7768 20724 7715 20707 7659 c 0 - 20699 7635 20688 7602 20683 7539 c 2 - 20683 7450 l 2 - 20683 7435 20680 7422 20673 7408 c 2 - 20269 6533 l 2 - 20251 6495 20217 6473 20175 6474 c 2 - 20171 6474 l 2 - 20170 6474 20168 6474 20168 6474 c 0 - 20155 6473 20149 6473 20136 6464 c 0 - 20122 6454 20109 6448 20092 6445 c 0x84c001e4cc3018a0 - 20057 6439 19984 6437 19946 6437 c 0 - 19944 6437 19937 6435 19934 6435 c 0 -20041 7864 m 1 - 19910 7745 l 2 - 19822 7662 19764 7598 19764 7505 c 0x80c001e4cc3018a0 - 19764 7502 19763 7494 19765 7488 c 0 - 19802 7327 19806 7157 19806 7074 c 0 - 19806 6985 19801 6899 19794 6820 c 1 - 19845 6734 l 1 - 19896 6685 19930 6656 19949 6642 c 1 - 19986 6642 20020 6644 20041 6646 c 1 - 20064 6659 20087 6667 20107 6672 c 1 - 20478 7473 l 1 - 20478 7548 l 2 - 20480 7570 20483 7597 20487 7621 c 1 - 20278 7691 l 2 - 20253 7700 20235 7714 20222 7737 c 2 - 20194 7783 l 2 - 20165 7834 20106 7857 20041 7864 c 1 -10737 7609 m 2 - 10738 7552 10693 7506 10637 7504 c 0 - 10580 7503 10533 7548 10532 7604 c 2x80c001e4cd301820 - 10531 7791 l 2x80c001e4ce301820 - 10533 7847 10581 7891 10638 7888 c 0 - 10694 7886 10738 7838 10735 7782 c 0 - 10735 7776 10733 7758 10732 7752 c 2 - 10731 7742 l 1 - 10737 7609 l 2 -10526 7742 m 2 - 10526 7747 10526 7752 10527 7757 c 2 - 10529 7774 l 2 - 10529 7779 10531 7795 10531 7801 c 0x80c001e4ce301820 - 10537 7858 10581 7896 10638 7893 c 0 - 10695 7891 10735 7849 10736 7792 c 2 - 10737 7605 l 2 - 10737 7547 10695 7504 10637 7502 c 0 - 10578 7501 10534 7542 10532 7601 c 2 - 10526 7742 l 2 -11079 8608 m 0 - 11082 8608 11091 8607 11094 8607 c 0 - 11097 8607 11106 8605 11110 8604 c 0 - 11143 8597 11168 8586 11192 8575 c 0 - 11208 8568 11224 8561 11247 8556 c 0 - 11300 8545 11333 8500 11328 8446 c 0 - 11322 8391 11281 8354 11226 8354 c 2 - 11035 8354 l 1 - 11017 8347 10999 8346 10980 8350 c 0 - 10955 8354 10931 8360 10899 8366 c 0 - 10848 8376 10815 8415 10815 8467 c 0 - 10815 8469 10815 8473 10815 8474 c 0 - 10815 8526 10848 8566 10899 8575 c 0x80c401e4cc301820 - 10957 8586 11012 8609 11067 8609 c 0 - 11069 8609 11077 8608 11079 8608 c 0 -11833 8488 m 2 - 11835 8482 11836 8477 11837 8471 c 0 - 11841 8453 11839 8434 11832 8415 c 0 - 11820 8387 11800 8368 11772 8357 c 0 - 11755 8351 11763 8350 11682 8347 c 0 - 11678 8347 11667 8347 11664 8347 c 0 - 11612 8347 11581 8351 11518 8355 c 0 - 11465 8358 11426 8396 11422 8449 c 0x80c801e4cc301820 - 11417 8502 11449 8545 11500 8557 c 0 - 11553 8570 11625 8599 11662 8610 c 0 - 11695 8620 11727 8614 11755 8593 c 0 - 11758 8590 11761 8587 11769 8583 c 0 - 11795 8571 11813 8551 11822 8523 c 2 - 11833 8488 l 2 -11737 8453 m 1 -16404 9215 m 1 - 16397 9200 16386 9187 16372 9176 c 2 - 16289 9114 l 1 - 16373 9127 l 2 - 16425 9135 16469 9108 16486 9058 c 0 - 16486 9057 16487 9054 16487 9053 c 0 - 16488 9051 16491 9045 16492 9043 c 0 - 16493 9041 16496 9035 16498 9033 c 0 - 16498 9032 16503 9025 16505 9023 c 0 - 16559 8962 16634 8941 16719 8941 c 0x80c041e4cc301a20 - 16792 8941 16872 8953 16922 8957 c 0 - 16932 8957 16942 8957 16951 8955 c 2 - 17023 8954 l 2 - 17028 8954 17032 8954 17037 8953 c 2 - 17076 8947 l 1 - 17088 8951 17101 8954 17115 8954 c 0 - 17144 8954 17153 8954 17163 8954 c 0 - 17260 8954 17352 8951 17442 8920 c 2 - 17485 8901 l 2 - 17486 8900 17488 8900 17489 8899 c 0 - 17490 8899 17492 8898 17493 8897 c 2 - 17531 8881 l 2 - 17538 8877 17544 8874 17551 8869 c 2 - 17599 8833 l 2 - 17845 8648 17896 8262 17896 7946 c 2 - 17896 7896 l 2 - 17896 7875 17890 7858 17879 7840 c 0 - 17806 7726 17704 7607 17697 7479 c 0 - 17697 7468 17695 7460 17691 7450 c 2 - 17413 6679 l 2 - 17409 6670 17406 6663 17400 6655 c 2 - 17323 6547 l 1 - 17390 6499 17448 6484 17531 6484 c 0 - 17539 6484 17561 6484 17568 6484 c 0 - 17667 6484 17731 6545 17750 6606 c 0 - 17754 6616 17758 6625 17765 6634 c 2 - 17917 6843 l 1x88c021e4cc301c20 - 17916 6857 17918 6872 17924 6886 c 0 - 17937 6922 17937 6964 17937 6983 c 0 - 17937 7013 17935 7048 17935 7071 c 0 - 17935 7072 17935 7078 17935 7079 c 0 - 17937 7161 17945 7164 17954 7182 c 0 - 17959 7192 17965 7200 17974 7207 c 1 - 18195 7612 l 1 - 18209 7657 l 2 - 18220 7689 18243 7712 18273 7721 c 1 - 18272 7725 l 2 - 18272 7728 18272 7736 18272 7739 c 0 - 18272 7769 18273 7759 18273 7764 c 0 - 18289 7940 18465 8091 18554 8223 c 0 - 18558 8230 18562 8236 18568 8241 c 2 - 18699 8373 l 2 - 18731 8404 18773 8412 18814 8394 c 2 - 18814 8394 18815 8393 18817 8393 c 0 - 18821 8391 18820 8392 18822 8391 c 0 - 18826 8390 18827 8390 18831 8389 c 0 - 18847 8387 18859 8386 18871 8387 c 0 - 18905 8390 18963 8397 19012 8458 c 0 - 19025 8474 19040 8484 19059 8491 c 2 - 19389 8600 l 1 - 19399 8616 19413 8629 19432 8638 c 1 - 19409 8707 l 1 - 19337 8761 l 1 - 19333 8764 l 1 - 19329 8766 l 1 - 19309 8782 l 1 - 19288 8776 19266 8777 19244 8786 c 2 - 19232 8790 l 2 - 19230 8791 19218 8795 19215 8795 c 0 - 19212 8795 19191 8796 19185 8796 c 2 - 19153 8796 l 2 - 19152 8796 19149 8796 19148 8795 c 0 - 19072 8778 18958 8713 18799 8702 c 0 - 18799 8702 18795 8702 18794 8702 c 0 - 18790 8702 18776 8703 18772 8704 c 0x88c081e4cc301a20 - 18747 8707 18686 8734 18601 8734 c 0 - 18462 8734 18383 8651 18368 8636 c 2 - 18363 8631 l 1 - 18345 8594 l 2 - 18326 8554 18289 8533 18245 8537 c 0 - 18201 8540 18168 8567 18155 8610 c 0 - 18141 8657 18099 8767 17988 8928 c 2 - 17984 8932 l 1 - 17796 9069 l 2 - 17786 9076 17777 9085 17771 9094 c 1 - 17769 9095 17768 9095 17766 9096 c 1 - 17764 9095 17761 9094 17758 9093 c 2 - 17752 9091 l 2 - 17749 9090 17741 9088 17738 9088 c 0 - 17718 9084 17719 9081 17709 9070 c 0 - 17675 9034 17627 9026 17583 9051 c 0 - 17388 9160 17230 9298 17055 9312 c 2 - 17050 9313 l 1 - 16580 9241 l 2 - 16546 9236 16516 9246 16494 9268 c 1 - 16448 9234 l 2 - 16434 9223 16420 9217 16404 9215 c 1 -17167 8749 m 1 - 17148 8738 17124 8733 17098 8737 c 2 - 17013 8749 l 1 - 16928 8750 l 2 - 16924 8750 16921 8751 16918 8751 c 1x88c025e4cc301c20 - 16859 8746 16798 8736 16719 8736 c 0 - 16573 8736 16447 8780 16352 8887 c 0 - 16346 8894 16337 8905 16331 8914 c 1 - 15917 8851 l 2 - 15869 8843 15826 8867 15807 8912 c 0 - 15788 8958 15801 9004 15840 9034 c 2 - 16189 9296 l 1 - 16188 9315 16193 9333 16203 9351 c 0 - 16219 9380 16244 9397 16277 9402 c 2 - 16346 9413 l 1 - 16452 9492 l 2 - 16499 9528 16560 9519 16595 9472 c 2 - 16609 9453 l 1 - 17032 9517 l 2 - 17040 9518 17047 9518 17055 9518 c 2 - 17072 9516 l 2 - 17282 9499 17461 9364 17625 9264 c 1 - 17638 9270 17651 9276 17666 9280 c 1 - 17671 9287 l 2 - 17706 9334 17766 9344 17814 9309 c 2 - 17834 9295 l 1 - 17858 9295 l 2 - 17913 9294 17953 9256 17958 9204 c 1 - 18118 9088 l 2 - 18127 9081 18134 9075 18141 9065 c 2 - 18155 9046 l 2 - 18211 8965 18252 8894 18283 8834 c 1 - 18346 8881 18454 8939 18601 8939 c 0 - 18737 8939 18789 8914 18799 8908 c 1 - 18907 8918 19043 8981 19102 8995 c 0 - 19112 8997 19143 9001 19153 9001 c 2 - 19185 9001 l 2 - 19202 9001 19231 9000 19243 8998 c 0 - 19244 8998 19245 8998 19246 8997 c 1 - 19281 9023 19328 9023 19366 8995 c 2 - 19439 8940 l 1 - 19457 8933 19471 8922 19482 8908 c 1 - 19557 8851 l 2 - 19575 8838 19586 8823 19593 8802 c 2 - 19658 8607 l 2 - 19677 8551 19650 8496 19593 8477 c 2 - 19574 8471 l 1 - 19562 8451 19543 8436 19518 8427 c 2 - 19150 8305 l 1 - 19045 8195 18924 8189 18895 8183 c 0 - 18889 8182 18883 8182 18877 8182 c 0 - 18847 8183 18831 8182 18803 8187 c 1 - 18719 8103 l 1 - 18616 7954 18485 7838 18477 7746 c 0 - 18477 7746 18477 7856 18477 7739 c 0 - 18477 7739 18477 7736 18477 7735 c 2 - 18482 7633 l 2 - 18485 7574 18444 7528 18385 7525 c 2 - 18380 7525 l 1 - 18379 7522 l 1 - 18145 7094 l 2 - 18143 7090 18141 7087 18138 7083 c 1 - 18139 7082 18140 7080 18140 7077 c 0 - 18140 7075 18140 7071 18140 7070 c 0 - 18140 7052 18142 7018 18142 6983 c 0 - 18142 6941 18138 6907 18133 6879 c 1 - 18149 6847 18145 6809 18122 6777 c 2 - 17939 6526 l 1 - 17887 6390 17749 6279 17568 6279 c 0 - 17561 6279 17539 6279 17531 6279 c 0x88c045e4cc301c20 - 17401 6279 17310 6305 17204 6380 c 2 - 17121 6440 l 2 - 17072 6474 17062 6534 17097 6582 c 2 - 17225 6762 l 1 - 17494 7506 l 1 - 17508 7675 17604 7796 17691 7926 c 1 - 17691 7946 l 2 - 17691 8410 17573 8596 17476 8669 c 2 - 17439 8696 l 1 - 17410 8696 17383 8708 17362 8731 c 1 - 17325 8743 17284 8749 17167 8749 c 1 -18748 8499 m 2 - 18789 8511 18829 8499 18856 8466 c 0 - 18884 8432 18888 8391 18867 8352 c 2 - 18863 8344 l 2 - 18844 8310 18813 8291 18775 8290 c 0 - 18736 8289 18704 8307 18684 8340 c 2 - 18681 8346 l 2 - 18664 8375 18661 8405 18673 8436 c 0 - 18685 8467 18708 8487 18740 8497 c 2 - 18748 8499 l 2 -18943 8602 m 2 - 18999 8592 19033 8545 19025 8489 c 2 - 19025 8488 l 2 - 19021 8455 19005 8430 18977 8413 c 0 - 18949 8396 18919 8394 18888 8405 c 2 - 18885 8406 l 2 - 18832 8426 18806 8476 18821 8530 c 0 - 18836 8584 18884 8613 18939 8603 c 2 - 18943 8602 l 2 -18829 8535 m 2 - 18847 8585 18893 8612 18945 8602 c 2 - 18981 8595 l 2 - 19019 8588 19046 8564 19059 8528 c 0 - 19071 8492 19065 8457 19040 8428 c 0 - 19038 8426 19033 8420 19031 8418 c 0 - 19002 8387 18962 8378 18922 8393 c 2 - 18890 8404 l 2 - 18835 8425 18809 8479 18829 8534 c 2 - 18829 8535 l 2 -18897 8303 m 2 - 18850 8292 18808 8312 18785 8353 c 0 - 18762 8395 18768 8441 18802 8475 c 2 - 18810 8483 l 2 - 18838 8511 18873 8520 18911 8509 c 0 - 18948 8499 18974 8472 18982 8434 c 2 - 18984 8428 l 2 - 18997 8370 18964 8318 18906 8305 c 2 - 18897 8303 l 2 -18601 8652 m 0 - 18605 8652 18617 8652 18621 8652 c 0 - 18680 8648 18721 8602 18717 8543 c 2 - 18717 8542 l 2 - 18715 8516 18706 8495 18687 8476 c 2 - 18520 8309 l 2 - 18483 8272 18431 8268 18388 8298 c 0 - 18346 8328 18332 8379 18355 8426 c 2 - 18423 8566 l 2 - 18430 8580 18438 8591 18450 8601 c 0 - 18462 8610 18510 8652 18601 8652 c 0 -19027 8503 m 2 - 19024 8477 19012 8456 18992 8438 c 0 - 18988 8435 18975 8424 18970 8421 c 2 - 18969 8420 l 1 - 18967 8419 l 2 - 18959 8414 18934 8400 18925 8397 c 0 - 18890 8383 18856 8389 18825 8411 c 0 - 18817 8417 18816 8416 18815 8416 c 0 - 18813 8417 18812 8418 18807 8419 c 0 - 18773 8429 18750 8451 18738 8484 c 0 - 18727 8517 18732 8549 18753 8578 c 2 - 18754 8580 l 2 - 18773 8605 18798 8619 18829 8622 c 0 - 18855 8624 18881 8628 18907 8633 c 0 - 18941 8640 18972 8632 18997 8608 c 0 - 19023 8584 19034 8554 19029 8520 c 2 - 19027 8503 l 2 -2621 9599 m 1 - 2617 9557 2594 9525 2555 9510 c 0 - 2516 9496 2477 9504 2447 9533 c 2 - 2435 9544 l 2 - 2407 9571 2397 9606 2407 9644 c 0x80c001eccc301820 - 2417 9681 2443 9707 2480 9717 c 2 - 2493 9720 l 2 - 2500 9721 2506 9721 2511 9721 c 1 - 2515 9723 2518 9724 2520 9724 c 0 - 2574 9724 2614 9688 2621 9635 c 0 - 2623 9622 2622 9610 2620 9598 c 1 - 2621 9599 l 1 -2351 9519 m 1 -3426 8167 m 2 - 3484 8169 3529 8129 3532 8070 c 2 - 3533 8066 l 2 - 3534 8035 3524 8009 3502 7987 c 0 - 3480 7966 3453 7956 3422 7959 c 2 - 3389 7961 l 2 - 3333 7966 3294 8008 3295 8065 c 0 - 3296 8122 3336 8163 3393 8166 c 2 - 3426 8167 l 2 -6116 8165 m 1 - 6070 8136 6009 8149 5980 8195 c 0 - 5951 8241 5964 8301 6010 8331 c 1 - 6139 8369 6277 8416 6324 8459 c 1 - 6373 8477 6427 8451 6445 8402 c 0 - 6463 8353 6438 8298 6389 8280 c 1 - 6223 8286 l 1 - 6116 8165 l 1 -6101 8458 m 2 - 6123 8482 6150 8494 6182 8493 c 2 - 6396 8485 l 2 - 6440 8483 6474 8459 6489 8418 c 0 - 6504 8377 6494 8336 6461 8307 c 0 - 6369 8224 6193 8172 6068 8135 c 0 - 6022 8121 5979 8137 5953 8177 c 0 - 5927 8218 5931 8264 5962 8300 c 2 - 6101 8458 l 2 -7447 7372 m 2 - 7411 7392 7392 7427 7394 7469 c 0 - 7397 7510 7421 7542 7459 7558 c 2 - 7473 7563 l 2 - 7518 7580 7563 7567 7592 7529 c 0 - 7621 7491 7621 7444 7592 7406 c 0 - 7590 7403 7585 7397 7583 7394 c 0 - 7551 7354 7500 7343 7454 7369 c 2 - 7447 7372 l 2 -20683 7539 m 2 - 20687 7589 20694 7650 20754 7790 c 0 - 20771 7830 20805 7852 20848 7852 c 2 - 20851 7852 l 2 - 20884 7852 20912 7839 20932 7812 c 0 - 20952 7786 20958 7756 20950 7724 c 2 - 20884 7474 l 2 - 20870 7422 20826 7392 20772 7399 c 0 - 20719 7406 20683 7446 20683 7500 c 2 - 20683 7539 l 2 -20634 7323 m 2 - 20658 7374 20710 7395 20762 7377 c 0 - 20814 7358 20840 7308 20826 7254 c 2 - 20807 7181 l 2 - 20799 7150 20780 7127 20750 7114 c 0 - 20721 7101 20691 7101 20662 7116 c 2 - 20650 7122 l 2 - 20599 7148 20579 7204 20603 7256 c 2 - 20634 7323 l 2 -10579 6447 m 2 - 10577 6502 10613 6545 10668 6553 c 0 - 10723 6560 10769 6527 10781 6473 c 2 - 10790 6435 l 2 - 10801 6383 10775 6336 10725 6317 c 0 - 10675 6298 10625 6317 10599 6365 c 0 - 10597 6369 10589 6385 10587 6390 c 0 - 10582 6401 10580 6411 10580 6424 c 2 - 10579 6447 l 2 -18678 8204 m 2 - 18644 8217 18622 8243 18614 8278 c 0 - 18606 8314 18616 8347 18641 8373 c 2 - 18660 8392 l 2 - 18698 8429 18751 8433 18794 8401 c 0 - 18837 8370 18848 8318 18823 8271 c 2 - 18811 8249 l 2 - 18786 8202 18736 8183 18685 8201 c 2 - 18678 8204 l 2 -EndSplineSet -EndChar -StartChar: B -Encoding: 66 66 1 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: C -Encoding: 67 67 2 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: D -Encoding: 68 68 3 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: E -Encoding: 69 69 4 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: F -Encoding: 70 70 5 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: G -Encoding: 71 71 6 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: H -Encoding: 72 72 7 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: I -Encoding: 73 73 8 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: J -Encoding: 74 74 9 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: K -Encoding: 75 75 10 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: L -Encoding: 76 76 11 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: a -Encoding: 97 97 12 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: b -Encoding: 98 98 13 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: c -Encoding: 99 99 14 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: d -Encoding: 100 100 15 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: e -Encoding: 101 101 16 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: f -Encoding: 102 102 17 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: g -Encoding: 103 103 18 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: h -Encoding: 104 104 19 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: i -Encoding: 105 105 20 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: j -Encoding: 106 106 21 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: k -Encoding: 107 107 22 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: l -Encoding: 108 108 23 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: m -Encoding: 109 109 24 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: n -Encoding: 110 110 25 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: o -Encoding: 111 111 26 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: p -Encoding: 112 112 27 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: q -Encoding: 113 113 28 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: r -Encoding: 114 114 29 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: s -Encoding: 115 115 30 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: t -Encoding: 116 116 31 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: u -Encoding: 117 117 32 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: v -Encoding: 118 118 33 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: w -Encoding: 119 119 34 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: x -Encoding: 120 120 35 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: y -Encoding: 121 121 36 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: z -Encoding: 122 122 37 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: M -Encoding: 77 77 38 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: N -Encoding: 78 78 39 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: O -Encoding: 79 79 40 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: P -Encoding: 80 80 41 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Q -Encoding: 81 81 42 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: R -Encoding: 82 82 43 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: S -Encoding: 83 83 44 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: T -Encoding: 84 84 45 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: U -Encoding: 85 85 46 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: V -Encoding: 86 86 47 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: W -Encoding: 87 87 48 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: X -Encoding: 88 88 49 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Y -Encoding: 89 89 50 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Z -Encoding: 90 90 51 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: zero -Encoding: 48 48 52 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: one -Encoding: 49 49 53 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: two -Encoding: 50 50 54 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: three -Encoding: 51 51 55 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: four -Encoding: 52 52 56 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: five -Encoding: 53 53 57 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: six -Encoding: 54 54 58 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: seven -Encoding: 55 55 59 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: eight -Encoding: 56 56 60 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: nine -Encoding: 57 57 61 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: braceleft -Encoding: 123 123 62 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: bar -Encoding: 124 124 63 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: braceright -Encoding: 125 125 64 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: asciitilde -Encoding: 126 126 65 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: dieresis -Encoding: 168 168 66 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: copyright -Encoding: 169 169 67 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ordfeminine -Encoding: 170 170 68 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: guillemotleft -Encoding: 171 171 69 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: logicalnot -Encoding: 172 172 70 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: uni00AD -Encoding: 173 173 71 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: registered -Encoding: 174 174 72 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: macron -Encoding: 175 175 73 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: degree -Encoding: 176 176 74 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: plusminus -Encoding: 177 177 75 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: uni00B2 -Encoding: 178 178 76 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: uni00B3 -Encoding: 179 179 77 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: acute -Encoding: 180 180 78 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: uni00B5 -Encoding: 181 181 79 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: paragraph -Encoding: 182 182 80 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: periodcentered -Encoding: 183 183 81 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: cedilla -Encoding: 184 184 82 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: uni00B9 -Encoding: 185 185 83 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ordmasculine -Encoding: 186 186 84 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: guillemotright -Encoding: 187 187 85 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: onequarter -Encoding: 188 188 86 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: onehalf -Encoding: 189 189 87 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: threequarters -Encoding: 190 190 88 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: questiondown -Encoding: 191 191 89 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Agrave -Encoding: 192 192 90 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Aacute -Encoding: 193 193 91 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Acircumflex -Encoding: 194 194 92 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Atilde -Encoding: 195 195 93 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Adieresis -Encoding: 196 196 94 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Aring -Encoding: 197 197 95 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: AE -Encoding: 198 198 96 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Ccedilla -Encoding: 199 199 97 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Egrave -Encoding: 200 200 98 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Eacute -Encoding: 201 201 99 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Ecircumflex -Encoding: 202 202 100 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Edieresis -Encoding: 203 203 101 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Igrave -Encoding: 204 204 102 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Iacute -Encoding: 205 205 103 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Icircumflex -Encoding: 206 206 104 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Idieresis -Encoding: 207 207 105 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Eth -Encoding: 208 208 106 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Ntilde -Encoding: 209 209 107 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Ograve -Encoding: 210 210 108 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Oacute -Encoding: 211 211 109 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Ocircumflex -Encoding: 212 212 110 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Otilde -Encoding: 213 213 111 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Odieresis -Encoding: 214 214 112 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: multiply -Encoding: 215 215 113 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Oslash -Encoding: 216 216 114 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Ugrave -Encoding: 217 217 115 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Uacute -Encoding: 218 218 116 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Ucircumflex -Encoding: 219 219 117 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Udieresis -Encoding: 220 220 118 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Yacute -Encoding: 221 221 119 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: Thorn -Encoding: 222 222 120 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: germandbls -Encoding: 223 223 121 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: agrave -Encoding: 224 224 122 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: aacute -Encoding: 225 225 123 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: acircumflex -Encoding: 226 226 124 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: atilde -Encoding: 227 227 125 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: adieresis -Encoding: 228 228 126 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: aring -Encoding: 229 229 127 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ae -Encoding: 230 230 128 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ccedilla -Encoding: 231 231 129 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: egrave -Encoding: 232 232 130 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: eacute -Encoding: 233 233 131 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ecircumflex -Encoding: 234 234 132 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: edieresis -Encoding: 235 235 133 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: igrave -Encoding: 236 236 134 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: iacute -Encoding: 237 237 135 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: icircumflex -Encoding: 238 238 136 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: idieresis -Encoding: 239 239 137 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: eth -Encoding: 240 240 138 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ntilde -Encoding: 241 241 139 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ograve -Encoding: 242 242 140 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: oacute -Encoding: 243 243 141 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ocircumflex -Encoding: 244 244 142 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: otilde -Encoding: 245 245 143 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: odieresis -Encoding: 246 246 144 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: divide -Encoding: 247 247 145 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: oslash -Encoding: 248 248 146 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ugrave -Encoding: 249 249 147 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: uacute -Encoding: 250 250 148 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ucircumflex -Encoding: 251 251 149 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: udieresis -Encoding: 252 252 150 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: yacute -Encoding: 253 253 151 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: thorn -Encoding: 254 254 152 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ydieresis -Encoding: 255 255 153 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: exclamdown -Encoding: 161 161 154 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: cent -Encoding: 162 162 155 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: sterling -Encoding: 163 163 156 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: currency -Encoding: 164 164 157 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: yen -Encoding: 165 165 158 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: brokenbar -Encoding: 166 166 159 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: section -Encoding: 167 167 160 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: exclam -Encoding: 33 33 161 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: quotedbl -Encoding: 34 34 162 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: numbersign -Encoding: 35 35 163 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: dollar -Encoding: 36 36 164 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: percent -Encoding: 37 37 165 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: ampersand -Encoding: 38 38 166 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: quotesingle -Encoding: 39 39 167 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: parenleft -Encoding: 40 40 168 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: parenright -Encoding: 41 41 169 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: asterisk -Encoding: 42 42 170 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: plus -Encoding: 43 43 171 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: comma -Encoding: 44 44 172 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: hyphen -Encoding: 45 45 173 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: period -Encoding: 46 46 174 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: slash -Encoding: 47 47 175 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -StartChar: uni0000 -Encoding: 0 0 176 -Width: 23166 -VWidth: 0 -Flags: W -HStem: 5524 204<10875.6 11159 11159 11440.1> 5855 205<8611.46 8955 8955 9142> 5872 205<19847.1 20196.2> 5967 204<9343 9556.62> 6279 205<17427.3 17730.8> 6445 205<16317 16535.6 19949 20040> 6648 205<1997.88 2631> 6795 205<1686 1830.58 2961.66 3017.53> 7211 205<2436.28 2595> 8058 214<2409 2413 11022 11064.1 11065.4 11321.4 11322 11751.7> 8277 209<20014.2 20132.7 20133.2 20153.2> 8339 681<4405 4941> 8449 205<7648.98 8011.24> 8575 196<8197.19 8471 10223 10259.3 16072 16371> 8630 205<11325 11472.6> 8691 205<11017.4 11167.2> 8704 205<11439.8 11765.5> 8736 205<16682.5 16884.8 18379.9 18720.9> 8751 206<16798.7 17036.8 17163 17340.3> 8778 205<6259.33 6470.63> 9038 204<8861.17 9058.92> 9082 205<8115.29 8729.36> 9099 205<1437 1845 2026 2045.56 2045.56 2122.53> 9501 8<2339 2483> 9699 205<1584.2 1755.98> -VStem: 637 205<9067.71 9254> 1182 204<8223 8556.1> 2204 205<7878 8055> 2407 78<9604.43 9611 9617 9668.32> 3529 4<8012.31 8070> 5374 205<7337.12 7591 7591 7597> 5519 203<6932.56 7054.87> 5823 204<7569 7674> 8259 205<6745.88 7328.77> 8974 205<6972 7307.99> 9009 204<7593.01 7916> 10260 205<7833.93 7990 8780 9457.91> 10526 3<7604 7686 7742 7756.77> 10531 204.145<7547 7604 7604 7609 7686 7817 7817 7849> 10532 19<7136 7601 7601 7604> 10805 205<8894 9772 10037 10082> 10826 196<6648.38 6669 6669 8058> 12169 205<6966.1 7177> 12676 205<10230.8 10405> 12888 203<7892.32 8232.34 8233 8247.58 8248 8410.53> 12948 206<6720.18 7091.09> 12988 207<8963.19 9080.48 9371 9553> 13036 205<9774 9892.58> 13075 205<10023.4 10304.1> 14815 205<7620.78 8026.91> 14832 207<7530 7699.73> 16584 205<7737.41 8039 8039 8045> 17691 205<7926 8494.48> 17917 225<6843 6983> 17935 2<6986 7065 7065 7071> 17977 213<7739 8012> 19559 205<7475.36 7687.1> 19601 205<6825.98 7303.62> 20478 205<7473 7539 7548 7618.88> -Refer: 0 65 N 1 0 0 1 0 0 2 -EndChar -EndChars -EndSplineFont diff --git a/rostests/apitests/testdata/test.ttf b/rostests/apitests/testdata/test.ttf deleted file mode 100644 index 6d5cb677a9bb2f543d5c9ce211e5c0cbc4b4f053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19388 zcmeIad9)nWc`sUf*F0BORaf;`RXxw$r@K#gpLxU#wLRu$c>GCllu%#>|i^C<2VVNO2Jsh52 zdE=qsAMW)jiv0ye&3*Im!Tp!b3|@Q)zWYAB`-h?7j?eAB18CWBoZA%pMMwV-v{T1uiAgZarAHjXrnRc9~|3%)xl4F_j^B}sO3Kbp1k8% zpE!9kH})-x+VDf@^CgPN2Jf3Metha;ed?E#Y(N7=eXWo^?^pYKC~DXG%Fp3kpfG8L zKe&dpp!e-QMNW6E4=Ituvwuw3@&)q?)VbsxUWvlCIjRYJ*mj>nzo1x(k`BpTio(;Y zd;S^fn@k?gDNZ~~jA-mX{7r(Z?y3waB9B7K0Pdv>3~1Hu{EzqkGG z)IewzVjc2Mh4!VWJ#a>lm7*AG4)#ij90rcYsom5m>Rs>w@|U6Jsr}Ta;0(R{x9@)M z-S52ng*6J{*W?3nzcMU^2>Q+<@N5q<4$ZI}FNl(?sG4p>Ov{csZY-Wiu60VKJwM1~ zbNNECRIXHO^+vNb((ZIed#fG#gR$|6$*Jj?*}3_Jb&E^O>sK~x+_d?eEnBypyZt=s z`WtTgz@7I#@S7j`=x;sr@FS0Y{IO4b^0z)il&Zj@~yPyBuGrvb2IDhAE>d1rp z_fVH#MBVry3edUha7cRZRn*5md(DoE$;rNB6m{Y{@TS$jr>W=89v+2*Yi~Yz>ixIg zcKa=Ne~`NC!}o(bQ(n=?{{y1P-&6lW{en83d?EQ#^5x{WlCLG-Nd7qaX7a7%FvX>` zl#}vO#Z)uZPtBy3Q(ICyQ~OefQpZx)rB0>pPTik+DD{cdQ>kZCFQi^dy`1`1>b2Ax zsUN4_OudyFrn$71cG6zDm~N)~>6!F$dP{m|dSCib`dIq9^r`gS>HE_Ur9Y8=D*a6Q zh4f45m($-$zm|R@{p0kT>9^8DkMlIo@jS2SHNCz!<1Kqzyq(@Y?~r%QyUsi1-R<4) zJ>-4Dd&+ypd%=6jd)fPz_nP;H_hau(?=5fWbH3&~zULSHrr-Bx{AGWOzti96AM%g+ z*ZHUXyZ!t9hx||YPx;UIFZeI{FZNy(2A@wXxnpx8P9M93Gr=CNk zy&K6y3Ykde9`^iqy3Eo$FG^4Ua_2qbBNPB1526o}Xliia9q*n0|4bj$xo7P|#lg$o zLeJpibc`OOKTf~SEHTe=_wrxn&j@{Ct8k5QtMKc>Q{q>|m!vZi3`+AnokPw92NtuO04^au2( z^%wPT>pwFTLp5HGJQw++$hRXuiu{|2P2cRAqvksETywv9jd{EI8|D)x1P|07^nK(Z zA3ITALp)b(q2i!a>>-Zl!Ui32#Zs|9i)Zkl?>amx!X>k)*t7bB-spgQl%NCIa(pzFGVZLk@~)9?x}3W)Wk%wt6L3c!!h6k43jOw`|P>Rmw+0u?4fQ*b`p2o z4v<}yGsK!(=o8fGnDq$5r2?S?Mkd4w3RgEB(L~MR8L@m5*lFP=8UXaH9>F2O$mpQA ziX{Rm0vFh_V2O~i5+FL%dWoPK_#Xu=x?lrfhG=JseP=@O%c^1??Hi~u`ggR_7s6#=z0&x-oVM?l!5S3ROX z0Dl@C6h~)a2W*2E6P81d1X(~JkAQ@zz%3A6gO{(W00`yS8e&&11Yfws)w886=r9-J zpJ+RDb`aJ~gPU1ISA<-bxU!hkYfwZf`z5YU2dL7x_YokW6Cju2=e;_Bf>Pz5R+ZTE>T$YB_FJ_%zP=!mEuOqm6Q0F@kfE_b$H*hq+g1_uBLV4>I}vJ%t*U*IFK zK{GfPym<)2Aj#?mL-JwB1>1(ofbJwnN4d3V0m(J=?vPF3lQ<7e9E$FDL)QRN36r2b zJc}$C1$ZYPs|YI*n?_e9gg$H9fD8Mf9E1x}CIA~H&>rE9#P|^BK!>CipasE_1|(Pz z%)y_CfIul6wwnQW>4pq|n}$uK{2{O@p)Ro7iFU%#L;OQ(14EL*NV!2WFaZDzHVwNP z!E~{dApt8ak6ehAp=H+Ohv3G-sFS2ZDuu-k2hueOPY}Q(By>YEa!AftMG<72kU$p< zMiZQY^N_(IG{Xi?3~$KT0C>P7zybg?jezkUVTn{K1pXj7AqQEM;1k3s^+?VP>#_p* z0yg5|#2p|U0ffO{-9Fd}N=Gt0yjIm4rcst~S1gg5FjoXNz@QEY9EuLCfol7MXqN0k z6$8l-Z8`V~*y)3=y-3t$EYCW1oTCuJ51`=Q}L9D%G@ye5LC3lumB$tIN$)p z(Gk|^Npb?{*6Fas~C{%GFqX2e~36G!{28nC}e;0~0qEqM$TJUiX#v`nU zVVNY!@Vp0YB|rkC0T>9J2y{tyWPGBtk_gT4B`jn>#DMY^;vT&kYk&q+H6-ddP&<$- zY(fL7S%}F5Erisn9AU);)K=?hQgqEi;02*aK`8(T01U~m;5iVHAwd#O!PF2qSD9Yh zk(k)`A&mOOfm}Fr2y#ftO`;$NB^q%B41}8>xe?^Zd1eyxuLdV5m9=l|OE@YB|0c0XCxP;6g zz&jv(L5*x7REkh|6DeIn4>V06u^M)X+HxGw3gbwhTr}VY1O%%WLNEn=h3Fu` zf#^R>MXM$xOh6OyKG^j}iGIPx9_=GCb07!?9FsXGVI`O4EFes#JkSnm0skGq1aMW$ zEVu^olQ3}cP@Lo-p2Ea1JO@W5-762Qn4)PiJ7O_c=RIC6b z+(Ik|z7A26Bm_v?BvrGk779HO17IM(K!wM+1hZgB7&YYDaRKIG+97@h1^t=>z?WnU zp4HeK2UQQz&$Qj{wR_`CbR0$7WJ^~_0h=S!AW~-#69FW{IXzf~;EYJ!8-+{^C1$C} z0>na8f`GsWn41*yq$gO6Cu|X05U(U{1DA+EbVPW92uX5b6u8nt(x5KzWzaRO9Dr(o z$JO3Mk3fasC&U>L=z@%dGK)g-&JHQe6Sn3vd74#loz7y9mt>Ar87we#3JYvBiA2LuSRP@K zM|Z@{EW?`&=6NJALM(p0UVrhUO(R#HejZhnbndEjT#`i@BZO%z zAHFU2rmtPlt|k)<}v1w-aWbVechn`gJPGjb4niwLTkXb4JEKS z1|y)9Y$69?29_p*1>F@8BhXx*b`FePwP9~XNodMSrT;f0l5{ycR%zyIwRCOLsCAW8 z$E#^}+GalUAu4wo zO`4-|yc$Qbd?9-6XEJL3u4F9b)=4f_=SsDBArop1936^K% zU>foYw@{a@l53AmNyQqSq6@i6wLZ#D(DsBOy1as_n6^zV!_Z7Jhz7AnN|I!niMqpese-`GjHxn?0=I0CNQakDR;9QisoG z-Nw|&zUvi)+O*trT1ZUA3k_SV9Iaqzlq96kk}xf^tfX^{EH{fRXS!1s#z^KHvfNfU zReHaVEU-+MjVA2QcQ+P2Ok{Y|qaZLG@CgI*Nzk5qH(UyL%~Ce)^C!Q| zioJZjoSAorpY%(6$Ho&&2dWJvky8KGhz7{mmQ0OK)@PX;P>}X=8<$mWXvcU$&EzqoN(2M{0af!A} z%|Hq=ZNqXIOa~R6E@v54zpIdNnl~#Vt4P7caS1UrYl9o2%)zJnT$KeLln6>VovE~s z7&Q+rj`O(@F4tslG29WqQNji-aPTJt>Egtsg)l@C+j5H$3w+DZ1gs=Qq7Sqyn~m|P zf^tZWHBX-6FNAnNVg{}6TS^MJp3D@49FoVf7k<9Ce$(epUdnd&?A)|C(X~|@Ceh=Y z8ao^F{8x_Xcci&!j0Iquf^qG%Oka9*qEul;NwizND|euh)!$|rs+qW^R-_fwaQ#aT zMLBD?h|JO5hwl5xm-aEwUzjep_l!@N(OrT;XV>Wu8qrZYJ7Xk8j=rrpGBZO*_$wo{ zbtk&$-w&6b*lrp$1YRW9d42b9A76?KD&V83S=Ni?{1VSSx&p zq0gbkLa904bXD~w$LccT)`e<9-tN=}kqsj6zbARVu>GzjW}+$c(qy$%QR^4Y&1D?sVnvultAJfBJ?a z0~0aG-IDMF?mAldP`o236NxRkrmXdYWx+)(`}l?Vk@!M?IXcdl-mk9zZByk$r}e(` zZasKTKbb(I74Mw&`_~=q9o7~X-@1DD#zz*pg>)>=xc>Tt)}EgJU_Wk3sg$WLSKGOD z(JMv^#Ys9Qj3sMmVSZ%$aGGs&S%qgsI$uWyViqc2yR~CUlHp2RSv2F<@6X9u*_j>F z1{oth2}OY1PQ*v0@!}3q%)3ar2aW1a~?7>9*;(TmmA6Pl7US+ z(o3Zy$liF1;xteu^Ct-$kpxxVqf~j)w$pan#r-tc9tvD+tbXH)Py|T11>gtJ9^7TRuAwjH5KZf9MbI_;I6Ct{L??v`1Se^6ebd2q--<^HhV0M&u|jNlVopsv-e2k3gKcv@3I>Y74MC1( z$0ARD|G;w_=i5E6J~7-RirJAulZkf5MTN^=!51*p4y-6(22I!ZZ@_FC@rk53l0mf+ zU+x6iM1k44aXve3N$gG9OtILYWA@g@M8Se}UzSbk#X`5=Uq2W|bE7<8FCm(d`05;{ z$Et|?LZz)OR`N-SEicPbrIhbUVj^G+K3!hgRw(k^pv*m1T4x}4qAyn_v`Q&fp5*v) z*=m$a9G6ZtPd|jy^ul&nxMgQ{q|r|@X_Qb5yVh65Y_b1G`6@2v`v2F__CW5@H0ULk z>`e4>8QoA^H?7f9$x~eR*Is?~zgInDB<`+5jf^ppj4%Cpr`}jvY~qZjw$%qlmGkga zBlEx?OY&`h00oZ%sT+$8gE4)VVd)u@*K*b2j~~@|L4#7J!bsnH=^mB=^Q#$-kr)+j zr!x#B8HS;uTx28>k_f8{QJLXo-Bx&d5`r3oAg{8T&F@0GbucP?hxQKNyt~+8bT76L zu-Y%wAQ_jm)2MLcO{1M}Ymz(s87FxkvE#ETdU@W`?QiBb#!Q_aUc|Lok4<>P7ryiC zix16Di{64>@TQ!V*nE1|PB-)c&@q(2kVmzA8eK;7tZrT%d^RM#bx+3-MS3Dhx8kR;vWk@GuiVvZQg$l;4bcEYt-8#FAW{ z)}nUd;3JZ(|Lv^k7whLgCM&NXG04?ME*aAbQ1zv*m~f@m!dcB#g z4_LKc)O5~kzPdq`Yz!%nrp0uZtqs3s=s7{gj9w_f7>qC$F#?@-w>qP7E=KDSE1fb6 zvZUCND=(4)y0&$6+^HbNloAF9HH|1iLC_AwuS{gLPl2HY3#w_FX^zaM``Pi|x%1J9 zD=#Zub1tG=Fh%iQomP=4W0OBFSi>(P1xqtipM6*wUy+e>$Jju3_m!qE&s+IyCdN5( zynbd0P0i=3-G+%Z#xVH2sVv9iT%|nbm9vHyb8Y#FxpiaOqfh4tF&Ab&m_?&V)$+C1 zWhs$W3ftnvxkAM^Bl1|9&aAt-aqNnjum5Nv-OKNo?cJBw%mXhgu5Tu*GH#XQso>MY z)1qNtbud#TRldot?18G%>=7JR6S+rRHqBKN5#EzDBdg7Gy=# z5E7@R>i0(yQor34S^0*Vnh-3W`#kPdP-@wUN-5eGdRG={u`ESMpf zE7S7~Z7Wf?bpVM+?%2GHDoS@L*Qt7Wbb?|3qG+Z{-|M5vY7N$>@l35c4nh1?qOr+Z zt&h-Hy*`C-7Au%ha;?BEH-z!ZA12aTUoAG9Md{`Y!e?OmDVtSZ@yn)ts@$WQdeOg8 z>eM))te$U9O3ryZO4BNW|GD8ed^p&Au4aoXB3p`@BhMdztOlbM4Q2#YBI?d!4Rgbv z^4vM?i{}cr*7)J2`6*2U@_UgU>nt73ZHKb>(}EtEy7u-BAG0CRCeF>< zvC4q?q%LS11|NR*!O^*&vR*VOn;0b)QX3MHO$lipz-O7o;jhOhngg$dIb}SuBY)>I z!{R}mML(q(jKxIZi(fb%XtMgaVt`}+3n5Zx}{2?5sa~q&)4c1COtXj(}{fh z8`UPqRVyQOIp-`?j%l-{{Df^4VK&g54JtW(F*g+{^o82QB)C((KK!;_AJBC2)2Wp? zGqNZfi|7pFOCl&Dsdw8@@6uf}5};HoSL+qZ!XN&Go0@JZHQg9jd6}cjV=z}7{+#L7 zry!gM*=DBN!~L4{M0Q)<%px>iSWaaMPu-Lmd2QK^jaDB$df|p@rNh2DMzd4eO3QJ8 zv)FR3`*~qDu}F74Pg#(sx3$~m`Yk!hQW}k#QcRlP{VwiQDzl;}$(JX;+3Bv!=0qC6UQ4#Ut$K zwrVAn38uO4XE(&@7`6>`;UKwBQE&YWcetZU3QemFSt#M8mQXo=+n$c0MK~pIxo%gA7Kz!snP0-g_X94B-|+c!b`HBRP}X>riAuSXJjFjFa(;+HW?bo zq$cNn3o%&%Rz2t_w{=n-zGFHUUt&6M@6xp!n9gFlory(6Wu>a#HzKh!rH+#@lB!x7 zYfjf`kH(N5VSQV|8z)Ppoki1a2+E&sZEn1nm$9yII6oJOa+RzMam(z%(oTMwNp+B2 z98FEp-_NwfliAvi@lxWME&QJ1I-?*7Bt0MwD~f^?Ij#lieUA&j_t!W2!IP<#i4EIMBmLwjAMk3stiwVr|1>aT^JR=BF)p2w_lF%egz)1xo-V(Bt`}DxJ z%xE&z+sV-zF31`N%-dN`f#|{`5kVClL2NA&)mthro<0G~h!R+bWl)7zkse7z5?4 z>9k?I^Zh`xn9TaTD)0#z7H1+UxKFPkzk#DlEy2-mA2(@SW-Tb)Cw_3NAmWE&*4~ml z$_b7J)3*Z-pa)zPq=qFL){Vx;OML-Zngyje#wyLFc}`Ss@aie+<>y>k9!3h$xRyD$ zq?uZbXTFpU&ivYix5wcY3~L0w=;qgJ=nvGd{ugcq7rx`YzHMB6#E7%sa_%_ zWq1w`3z69H`S?gwiaLm$s}HxHc`>#rw^^EWpAp6TN)tS<)5yiJ+GZ$;WJI)CwpluU z;V~OlPSAfZthe2tZ2s40y>tBWsrm$-^1I5|f~qcoFK`?|9sovXbw*C|XFi)UOCX@a zfnnX?9bXa*9?E;DJjjX#hOhjTKFiVBVp{LCAN}#-@bomFOAK%1Bl+wV8@Iwqq^PnjOxuy5a#uMKr@xwTs#{N8$NhW8D#Pj}=mFDW^QLhp zL+5mv1{SlD?ZPUWY*=2gpL11)EH_mY&(PBtO+)NbIKF{6QI}@Rvw-i)c+nDde-ol9*8hz&%1y~gR4bVpB$EV{Ya zbmI%dJ&mW+GqG>e_i=a%VyG!`(daHsKktYC@bnf}lOi??K%kA5gm4fORaH;df8^S8 zHy=52+d4n8?AYa;C^t|?l+lQyus>}3J}lzU0)!$YGJJNVny@ulmr^Pp@weJ(3`^@9 zVezXCOYUBm+2h4x-h~YMh6an(_g>V!okOP|#8a?@1M6KZ8#64sa&IBIw3uWgm2ylz z`Wq&!!>gPnzWu4;KR!9Xa_{B)E~#CHPCzs#>W|Oi!oI z{ro@t!!BJgn?YkN@c2cHo0~S(Xykiy@q5>Ej8J0Gmb=q{PwBEGnPJD{QF=#;o!)ir zRVP+b5Ex4Tcu1Sd#O=vSNzru6&v?`56u(2JmE%S#}7~0r?0oW$vc89<0z?G72~K( zJJ~Yac#YeVOVcR^iK@M=a`=eGY)K}E_sasOq|cF!mNA!-&`+`rm@nX3t&QJadgS+= zs>m!f0-wDHN>hmyz?Nb>J63FCP4GkDhfrjvrZI2|Ugba;?Zag1NNtmH!WWgO{ zRHj*u))>q(;LD;!3*d&9N!Wn-D%{k?`RGLk+HzSjsfp2iq>woCzF#t&K&J%lqtRGa z%s(`|P`8-)LK@}^2*v1VL}6!nx+n#Mi7tn~#;d8;E{W!tR0`o1iwoy-&kE5Li{%I` z7tl3^Heh%`M=c{8|OJzL)aXNqA}C> zEA%0l590|dzntk-3#tqzDbnERBF+%oL8wJc-;3G-BfaxHJE~~FArNICicY5H(_52; zb7MFa#RA^2P%f4l_slp_FSiHtK~j(^j;HoBHz%XR-+F2Iv(1+6i!{4Fk{R(FD-oF7 z97l7loAytM}%Z7X6vW_vufBg z`>G8s>xzB4S&_1k;t@{xi}2fkiH3n56cv=>*iP}E&$Z@u7zX<$etnR)RVNX3wrx06 zA45!2$E^&ToiNfx99MAJR=|3iEjcN}K-GK}3ismQvD`#`j}m2NjW6to$Fk|v%%+X8 z$adVyl@}qj;IS&Ku%H~jxV^(e7^0<085USxt>khuCJh-7u}Nj7RBF9_jqDe2XAg}> zw#~^jOzbMNGN;6oO}dfG(%0f(`xFx(f9DwO?@*vF*Zkr_)y*jladf3GN9eEQQfy*s zGIM^lSY{cvS{ofLCQ?zjOW|6Qjcyd)=S4=QXJ|TOv}b2uH$A_{tWU(o>2kMizx9{a z1bUp4=x;P9@H}hX&oK|D-9+6Irt(&N58T;eabAMEHX_6r1%g9^6`maa`B9cuvL?-N zY!oq^!A8csD901TlTr0wl%}`;?v(%a)O39KBc6}mAB~ARv$!th zNGEI~8;{1AcM!ic=8r|b`h-6x?;d{DT=>gkw3425HpCSDg4%!e*2U3=Bo!=!M^OX8tOh=BobAShIAm93VO1Oi8154)7rhgS$WJfloup*aBZz~P6CVvk zgd3$_+g4x96cH9qzuk!^Owm{>ck(5u5O!tO#?ubRKd$Gf@_pa`(*3-DYcYs$HpaTq_pT8g)aD_IlIt*a%J6 zokvE^gvtppSNza{2R`>XbjNdkIyrUb)KG-wn4q>O$H&UKxt}w`JjX&ZN62_x<7&XoE0It0I?GAd;!F;mEEN za}>06>4P6?p+$85%AryQZYm47jEdEb+IkuaLm_SyCX%{&PNh6sny<&-|Hh6dKD2$f z<;8U1N)89S{g_FkN z+=Y^S%FEt&%Xc5s&G_Kx`kjURM-pshvYXH@(AHPSXD@W@(;uD2SkS?3*^geoa(GUo zpZk~VKe%%t!9+wlv#IJYYe94A=QWr+PgY-qH5NQmg~c+7jbMkabuk*Ry;z&Tu-ZcZ z4AH!!vBLEBE>x&s_I`;k4R{>f$V&;Y5`n}3YmTGk@}wwKX+7W=v$~Amb|Nz>S13Z| z3-dIZ-_C&(z)}gHwV=Q>;10|W&K&NfQuZx#M;e-b`ivo5nMB1 zxmSkV1dHexmcx^>mHPM!hgJl*moluGFcX7yF!r|$c^3ZdDL3aLE|~)CZ%ryWYYx_N zg89mRMPc}y3M(w#(n&?OjvhVYbK4MP78^wek~403Uju-_Pta~kRAMIl(+Q?`jQ;kK z3dgb}V}kg=IB~51?|%|=s6GR096O*ChkpT>vf+QqyYF0aUt?@4es2DG{F5z@T(@lh z4&s03fS=5nZ(F0iX<-!OQLes6Kf=#dQ70acAbn|DMOZB6d0rkHtHT_k9g~d>m46hH z{vs^LM2tzUwk)BG=$Sey!Ey}OT+ZDW)w&-oqy!QYB5X7Vg_Yjv)Nv62D(4GbX0YHo z4Y@ioZb05|myPJwx4#7IMocpkFqj$NIR>t3E^c!+kE)rCD=PQ7JQC=+`DSrLF5%40 zPn^EQUzm%t$?5b0{96k4H0$Xj56+ZJ?YB!6Sk8R5=%p4b8%E&YAvt?f>GbQBNsg^o ziluo?OXO`Kf`GJQd_5d|pNc@DPj};qx45xtuyiT}z#Sv#s#VixcquF*xo}Bd`tN=z8i1Ty+?Z zmZ_`ZyOZJm8o2IY*slrw0;&u>PQrGanxI;+9a`&4_N#rHK>H9pqvjY~cao~WkpxfL zI1JRu*k}6(Yv*L7D?=VvDFoDZxNbjn0IuCiod;L!fb$b@b_9A}4(C^ddet_;T|JRb^mL5`?(*Bsn`^5A8`r8frW?7#fjwI_nDSDrX{Ea;4k41(*A zoID&XUw!Q4^3~T|elX}XM}qRccx1;!z!Is(SI3Qi7QcH~;vFaN*TU;-pLdu;&v52!BKqybNbY5dBL)PKk^5i%1@ z1l^Iwc!Nm#KMlPThQ0>0dn6n!2(i!xixEr^Yg0Q9UUTBe)yIO7k#=)rWaNKl{#Q?w z8B*}X6aX{4|DS(ffJO{Y1YzJ=MI1a0M4&{loeWR4QNgox%Ag{YNm-OlMJb1JsTe#v zB0(jgmd#TIsz{Xpa}}ye)!^AJ4dAT>oV7vTE<9nPNA&@_W1xWvY7(C6G7ZmlSpway zr&g#9)JAF(JmuvaY6~D~8$3g4JK$*tbw0I|x`5h6T?o(8xd@&BvzOXOT})j9XnF#k z0&^GjRq7$?C)C~4{nUr3$EeRxPa>N7HR`XaJE)Jq5->}B7@nzf5A`+b4a8HQpq{3F z3D1Xli+Y^;JoTTcS0GYc3fTR1Fz7cxw|_?cIrVMO%d6D4sDA=H{#WY1P=7)F9^m-j zsNbMogD1><2R!4Sseh&JrH+CXt^f#J38?-g*yDYGWn!Ca0sGg1cm9;Rfw~Di<^9yn z@VuHYQJVBcKw(qX(du#h~FcN|%2a)Fi Vg*N+>;l_X%?rQ~yS>0#H{|7;j1AG7g diff --git a/rostests/apitests/user32api/testlist.c b/rostests/apitests/user32api/testlist.c deleted file mode 100644 index a76a7d361b8..00000000000 --- a/rostests/apitests/user32api/testlist.c +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _USER32TESTLIST_H -#define _USER32TESTLIST_H - -#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) - -#include "user32api.h" - -/* include the tests */ -#include "tests/InitializeLpkHooks.c" -#include "tests/ScrollDC.c" -#include "tests/ScrollWindowEx.c" -#include "tests/RealGetWindowClass.c" - -/* The List of tests */ -TESTENTRY TestList[] = -{ - { L"InitializeLpkHooks", Test_InitializeLpkHooks }, - { L"ScrollDC", Test_ScrollDC }, - { L"ScrollWindowEx", Test_ScrollWindowEx }, - { L"RealGetWindowClass", Test_RealGetWindowClass }, -}; - -/* The function that gives us the number of tests */ -INT NumTests(void) -{ - return ARRAY_SIZE(TestList); -} - -#endif /* _USER32TESTLIST_H */ - -/* EOF */ diff --git a/rostests/apitests/user32api/tests/InitializeLpkHooks.c b/rostests/apitests/user32api/tests/InitializeLpkHooks.c deleted file mode 100644 index bdfe900cdce..00000000000 --- a/rostests/apitests/user32api/tests/InitializeLpkHooks.c +++ /dev/null @@ -1,96 +0,0 @@ - -typedef struct _LPK_LPEDITCONTROL_LIST -{ - PVOID EditCreate; - PVOID EditIchToXY; - PVOID EditMouseToIch; - PVOID EditCchInWidth; - PVOID EditGetLineWidth; - PVOID EditDrawText; - PVOID EditHScroll; - PVOID EditMoveSelection; - PVOID EditVerifyText; - PVOID EditNextWord; - PVOID EditSetMenu; - PVOID EditProcessMenu; - PVOID EditCreateCaret; - PVOID EditAdjustCaret; -} LPK_LPEDITCONTROL_LIST, *PLPK_LPEDITCONTROL_LIST; - - -DWORD (APIENTRY *fpLpkTabbedTextOut) (LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID); -DWORD (APIENTRY *fpLpkPSMTextOut) (LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID); -DWORD (APIENTRY *fpLpkDrawTextEx) (LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID); -PLPK_LPEDITCONTROL_LIST (APIENTRY *fpLpkEditControl) (); - -int Count_myLpkTabbedTextOut = 0; -int Count_myLpkPSMTextOut = 0; -int Count_myLpkDrawTextEx = 0; - -DWORD STDCALL myLpkTabbedTextOut (LPVOID x1,LPVOID x2,LPVOID x3, LPVOID x4, LPVOID x5, LPVOID x6, LPVOID x7, LPVOID x8, - LPVOID x9, LPVOID x10, LPVOID x11, LPVOID x12) -{ - Count_myLpkTabbedTextOut++; - return fpLpkTabbedTextOut(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12); -} - -DWORD myLpkPSMTextOut (LPVOID x1,LPVOID x2,LPVOID x3,LPVOID x4,LPVOID x5,LPVOID x6) -{ - Count_myLpkPSMTextOut++; - return fpLpkPSMTextOut ( x1, x2, x3, x4, x5, x6); -} - -DWORD myLpkDrawTextEx(LPVOID x1,LPVOID x2,LPVOID x3,LPVOID x4,LPVOID x5, LPVOID x6, LPVOID x7, LPVOID x8, LPVOID x9,LPVOID x10) -{ - Count_myLpkDrawTextEx++; - return fpLpkDrawTextEx(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10); -} - - -typedef struct _USER32_INTERN_INITALIZEHOOKS -{ - PVOID fpLpkTabbedTextOut; - PVOID fpLpkPSMTextOut; - PVOID fpLpkDrawTextEx; - PLPK_LPEDITCONTROL_LIST fpListLpkEditControl; -} USER32_INTERN_INITALIZEHOOKS, *PUSER32_INTERN_INITALIZEHOOKS; - -VOID STDCALL InitializeLpkHooks (PUSER32_INTERN_INITALIZEHOOKS); - -INT -Test_InitializeLpkHooks(PTESTINFO pti) -{ - USER32_INTERN_INITALIZEHOOKS setup; - HMODULE lib = LoadLibrary("LPK.DLL"); - - TEST(lib != NULL); - if (lib != NULL) - { - fpLpkTabbedTextOut = (DWORD (APIENTRY *) (LPVOID,LPVOID,LPVOID,LPVOID,LPVOID, LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID)) GetProcAddress(lib, "LpkTabbedTextOut"); - fpLpkPSMTextOut = (DWORD (APIENTRY *) (LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID)) GetProcAddress(lib, "fpLpkPSMTextOut"); - fpLpkDrawTextEx = (DWORD (APIENTRY *) (LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID,LPVOID)) GetProcAddress(lib, "LpkDrawTextEx"); - fpLpkEditControl = (PLPK_LPEDITCONTROL_LIST (APIENTRY *) (VOID)) GetProcAddress(lib, "LpkEditControl"); - - setup.fpLpkTabbedTextOut = myLpkTabbedTextOut; - setup.fpLpkPSMTextOut = myLpkPSMTextOut; - setup.fpLpkDrawTextEx = myLpkDrawTextEx; - - /* we have not add any test to this api */ - setup.fpListLpkEditControl = (PLPK_LPEDITCONTROL_LIST)fpLpkEditControl; - - /* use our own api that we just made */ - InitializeLpkHooks(&setup); - - /* FIXME add test now */ - - /* restore */ - setup.fpLpkTabbedTextOut = fpLpkTabbedTextOut; - setup.fpLpkPSMTextOut = fpLpkPSMTextOut; - setup.fpLpkDrawTextEx = fpLpkDrawTextEx; - setup.fpListLpkEditControl = (PLPK_LPEDITCONTROL_LIST)fpLpkEditControl; - InitializeLpkHooks(&setup); - } - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/user32api/tests/RealGetWindowClass.c b/rostests/apitests/user32api/tests/RealGetWindowClass.c deleted file mode 100644 index 25d94dc74b9..00000000000 --- a/rostests/apitests/user32api/tests/RealGetWindowClass.c +++ /dev/null @@ -1,119 +0,0 @@ -#include "../user32api.h" - -typedef struct _TestData -{ - BOOL OverrideWndProc; /* TRUE if lpfnWndProc should be overridden */ - LPCSTR ClassName; /* Name of the new class to register */ - DWORD WndExtra; /* Remove these WNDCLASS::cbWndExtra flags */ - BOOL ExpectsHwnd; /* TRUE if a HWND should be created to run tests on */ - LPCSTR ExpectedClassNameBefore; /* Expected class name before any dialog function is called */ - LPCSTR ExpectedClassNameAfter; /* Expected class name after any dialog function is called */ -} TestData; - -static TestData RealClassTestData[] = -{ - { - TRUE, - "OverrideWndProc_with_DLGWINDOWEXTRA_TRUE", - 0, - TRUE, - "OverrideWndProc_with_DLGWINDOWEXTRA_TRUE", - "#32770", - }, - { - TRUE, - "OverrideWndProc_without_DLGWINDOWEXTRA_TRUE", - DLGWINDOWEXTRA, - TRUE, - "OverrideWndProc_without_DLGWINDOWEXTRA_TRUE", - "OverrideWndProc_without_DLGWINDOWEXTRA_TRUE", - }, - { - FALSE, - "DefaultWndProc_with_DLGWINDOWEXTRA_FALSE", - 0, - TRUE, - "#32770", - "#32770", - }, - { - FALSE, - "DefaultWndProc_without_DLGWINDOWEXTRA_FALSE", - DLGWINDOWEXTRA, - FALSE, - "N/A", - "N/A", - }, -}; - -INT -Test_RealGetWindowClass(PTESTINFO pti) -{ - int testNo; - UINT Result; - CHAR Buffer[1024]; - - Result = RealGetWindowClass( NULL, Buffer, ARRAY_SIZE(Buffer) ); - TEST(Result == 0); - TEST(GetLastError() == ERROR_INVALID_WINDOW_HANDLE); - - for (testNo = 0; testNo < ARRAY_SIZE(RealClassTestData); testNo++) - { - ATOM atom; - WNDCLASSA cls; - HWND hWnd; - - /* Register classes, "derived" from built-in dialog, with and without the DLGWINDOWEXTRA flag set */ - GetClassInfoA(0, "#32770", &cls); - if (RealClassTestData[testNo].OverrideWndProc) - cls.lpfnWndProc = DefWindowProcA; - cls.lpszClassName = RealClassTestData[testNo].ClassName; - cls.cbWndExtra &= ~RealClassTestData[testNo].WndExtra; - atom = RegisterClassA (&cls); - ASSERT(atom != 0); - - /* Create a window */ - hWnd = CreateWindowEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | - WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT | WS_EX_APPWINDOW, - RealClassTestData[testNo].ClassName, - RealClassTestData[testNo].ClassName, - WS_POPUPWINDOW | WS_CLIPSIBLINGS | WS_DLGFRAME | WS_OVERLAPPED | - WS_MINIMIZEBOX | WS_MAXIMIZEBOX | DS_3DLOOK | DS_SETFONT | DS_MODALFRAME, - CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, - NULL, NULL, g_hInstance, 0); - - /* Do we expect a HWND at all? */ - if (RealClassTestData[testNo].ExpectsHwnd) - { - TEST(hWnd != NULL); - - if (hWnd != NULL) - { - /* Get the "real" class name */ - Result = RealGetWindowClass( hWnd, Buffer, ARRAY_SIZE(Buffer) ); - printf("Buffer: %s\nExpectedClassNameBefore(%d): %s\n", Buffer, testNo, RealClassTestData[testNo].ExpectedClassNameBefore); - TEST( Result != 0 ); - TEST( strcmp( Buffer, RealClassTestData[testNo].ExpectedClassNameBefore ) == 0 ); - - /* Call a function that requires a dialog window */ - DefDlgProcA( hWnd, DM_SETDEFID, IDCANCEL, 0 ); - - /* Get the "real" class name again */ - Result = RealGetWindowClass( hWnd, Buffer, ARRAY_SIZE(Buffer) ); - printf("Buffer: %s\nExpectedClassNameAfter(%d): %s\n", Buffer, testNo, RealClassTestData[testNo].ExpectedClassNameAfter); - TEST( Result != 0 ); - TEST( strcmp( Buffer, RealClassTestData[testNo].ExpectedClassNameAfter ) == 0 ); - } - } - else - { - TEST(hWnd == NULL); - } - - /* Cleanup */ - DestroyWindow(hWnd); - UnregisterClass(RealClassTestData[testNo].ClassName, g_hInstance); - } - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/user32api/tests/ScrollDC.c b/rostests/apitests/user32api/tests/ScrollDC.c deleted file mode 100644 index 88be15372ac..00000000000 --- a/rostests/apitests/user32api/tests/ScrollDC.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "../user32api.h" - -INT -Test_ScrollDC(PTESTINFO pti) -{ - HWND hWnd, hWnd2; - HDC hDC; - HRGN hrgn; - RECT rcClip; - - /* Create a window */ - hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 100, 100, 100, 100, - NULL, NULL, g_hInstance, 0); - UpdateWindow(hWnd); - hDC = GetDC(hWnd); - - /* Assert that no update region is there */ - hrgn = CreateRectRgn(0,0,0,0); - ASSERT(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION); - - /* Test normal scrolling */ - TEST(ScrollDC(hDC, 0, 0, NULL, NULL, hrgn, NULL) == TRUE); - - /* Scroll with invalid update region */ - DeleteObject(hrgn); - TEST(ScrollDC(hDC, 50, 0, NULL, NULL, hrgn, NULL) == FALSE); - hrgn = CreateRectRgn(0,0,0,0); - TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION); - - /* Scroll with invalid update rect pointer */ - TEST(ScrollDC(hDC, 50, 0, NULL, NULL, NULL, (PRECT)1) == 0); - TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION); - - /* Scroll with a clip rect */ - rcClip.left = 50; rcClip.top = 0; rcClip.right = 100; rcClip.bottom = 100; - TEST(ScrollDC(hDC, 50, 0, NULL, &rcClip, hrgn, NULL) == TRUE); - TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION); - - /* Scroll with a clip rect */ - rcClip.left = 50; rcClip.top = 0; rcClip.right = 100; rcClip.bottom = 100; - TEST(ScrollDC(hDC, 50, 50, NULL, &rcClip, hrgn, NULL) == TRUE); - TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION); - - /* Overlap with another window */ - hWnd2 = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 30, 160, 100, 100, - NULL, NULL, g_hInstance, 0); - UpdateWindow(hWnd2); - - /* Cleanup */ - ReleaseDC(hWnd, hDC); - DestroyWindow(hWnd); - DestroyWindow(hWnd2); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/user32api/tests/ScrollWindowEx.c b/rostests/apitests/user32api/tests/ScrollWindowEx.c deleted file mode 100644 index 2a6ed38dd0a..00000000000 --- a/rostests/apitests/user32api/tests/ScrollWindowEx.c +++ /dev/null @@ -1,47 +0,0 @@ -#include "../user32api.h" - -INT -Test_ScrollWindowEx(PTESTINFO pti) -{ - HWND hWnd; - HRGN hrgn; - int Result; - - /* Create a window */ - hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, - NULL, NULL, g_hInstance, 0); - UpdateWindow(hWnd); - - /* Assert that no update region is there */ - hrgn = CreateRectRgn(0,0,0,0); - ASSERT(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION); - - Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, NULL, 0); - TEST(Result == SIMPLEREGION); - TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION); - - Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE); - TEST(Result == SIMPLEREGION); - TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == SIMPLEREGION); - UpdateWindow(hWnd); - - // test invalid update region - DeleteObject(hrgn); - Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, hrgn, NULL, SW_INVALIDATE); - TEST(Result == ERROR); - hrgn = CreateRectRgn(0,0,0,0); - UpdateWindow(hWnd); - - // Test invalid updaterect pointer - Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, (LPRECT)1, SW_INVALIDATE); - TEST(Result == ERROR); - TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == SIMPLEREGION); - -// test for alignment of rects - - DeleteObject(hrgn); - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/user32api/user32api.c b/rostests/apitests/user32api/user32api.c deleted file mode 100644 index b17e3aabc0c..00000000000 --- a/rostests/apitests/user32api/user32api.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "user32api.h" - -HINSTANCE g_hInstance; - -BOOL -IsFunctionPresent(LPWSTR lpszFunction) -{ - return TRUE; -} - -int APIENTRY WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nCmdShow) -{ - g_hInstance = hInstance; - return TestMain(L"user32api", L"user32.dll"); -} diff --git a/rostests/apitests/user32api/user32api.h b/rostests/apitests/user32api/user32api.h deleted file mode 100644 index 00115ac6351..00000000000 --- a/rostests/apitests/user32api/user32api.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _USER32TEST_H -#define _USER32TEST_H - -#include "../apitest.h" - -extern HINSTANCE g_hInstance; - -#endif /* _USER32TEST_H */ - -/* EOF */ diff --git a/rostests/apitests/user32api/user32api.rbuild b/rostests/apitests/user32api/user32api.rbuild deleted file mode 100644 index 646eeda53c5..00000000000 --- a/rostests/apitests/user32api/user32api.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - . - - 0x0501 - apitest - kernel32 - user32 - gdi32 - shell32 - user32api.c - testlist.c - diff --git a/rostests/apitests/w32kdll/directory.rbuild b/rostests/apitests/w32kdll/directory.rbuild deleted file mode 100644 index 5b9662bbf2d..00000000000 --- a/rostests/apitests/w32kdll/directory.rbuild +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/main.c b/rostests/apitests/w32kdll/w32kdll_2k3sp2/main.c deleted file mode 100644 index ea545d282a5..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_2k3sp2/main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include - -#ifdef BUILD_DLL - #define DLL_EXPORT __declspec(dllexport) -#else - #define DLL_EXPORT -#endif - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - // attach to process - // return FALSE to fail DLL load - break; - - case DLL_PROCESS_DETACH: - // detach from process - break; - - case DLL_THREAD_ATTACH: - // attach to thread - break; - - case DLL_THREAD_DETACH: - // detach from thread - break; - } - return TRUE; // succesful -} diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.S b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.S deleted file mode 100644 index 0206219b29c..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.S +++ /dev/null @@ -1,4665 +0,0 @@ -/* FILE: System Call Stubs for Native API - * COPYRIGHT: See COPYING in the top level directory - * PURPOSE: obj-i386\lib\win32ksys\win32k.S - * PROGRAMMER: Computer Generated File. See tools/nci/ncitool.c - * REMARK: DO NOT EDIT OR COMMIT MODIFICATIONS TO THIS FILE - */ - - -#include - -.global _NtGdiAbortDoc@4 -_NtGdiAbortDoc@4: - movl $0x1000, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiAbortPath@4 -_NtGdiAbortPath@4: - movl $0x1001, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiAddFontResourceW@24 -_NtGdiAddFontResourceW@24: - movl $0x1002, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiAddRemoteFontToDC@16 -_NtGdiAddRemoteFontToDC@16: - movl $0x1003, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiAddFontMemResourceEx@20 -_NtGdiAddFontMemResourceEx@20: - movl $0x1004, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiRemoveMergeFont@8 -_NtGdiRemoveMergeFont@8: - movl $0x1005, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiAddRemoteMMInstanceToDC@12 -_NtGdiAddRemoteMMInstanceToDC@12: - movl $0x1006, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiAlphaBlend@48 -_NtGdiAlphaBlend@48: - movl $0x1007, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtGdiAngleArc@24 -_NtGdiAngleArc@24: - movl $0x1008, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiAnyLinkedFonts@0 -_NtGdiAnyLinkedFonts@0: - movl $0x1009, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiFontIsLinked@4 -_NtGdiFontIsLinked@4: - movl $0x100a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiArcInternal@40 -_NtGdiArcInternal@40: - movl $0x100b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiBeginPath@4 -_NtGdiBeginPath@4: - movl $0x100c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBitBlt@44 -_NtGdiBitBlt@44: - movl $0x100d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiCancelDC@4 -_NtGdiCancelDC@4: - movl $0x100e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCheckBitmapBits@32 -_NtGdiCheckBitmapBits@32: - movl $0x100f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiCloseFigure@4 -_NtGdiCloseFigure@4: - movl $0x1010, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiClearBitmapAttributes@8 -_NtGdiClearBitmapAttributes@8: - movl $0x1011, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiClearBrushAttributes@8 -_NtGdiClearBrushAttributes@8: - movl $0x1012, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiColorCorrectPalette@24 -_NtGdiColorCorrectPalette@24: - movl $0x1013, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCombineRgn@16 -_NtGdiCombineRgn@16: - movl $0x1014, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCombineTransform@12 -_NtGdiCombineTransform@12: - movl $0x1015, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiComputeXformCoefficients@4 -_NtGdiComputeXformCoefficients@4: - movl $0x1016, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiConsoleTextOut@16 -_NtGdiConsoleTextOut@16: - movl $0x1017, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiConvertMetafileRect@8 -_NtGdiConvertMetafileRect@8: - movl $0x1018, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiCreateBitmap@20 -_NtGdiCreateBitmap@20: - movl $0x1019, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiCreateClientObj@4 -_NtGdiCreateClientObj@4: - movl $0x101a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateColorSpace@4 -_NtGdiCreateColorSpace@4: - movl $0x101b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateColorTransform@32 -_NtGdiCreateColorTransform@32: - movl $0x101c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiCreateCompatibleBitmap@12 -_NtGdiCreateCompatibleBitmap@12: - movl $0x101d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreateCompatibleDC@4 -_NtGdiCreateCompatibleDC@4: - movl $0x101e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateDIBBrush@24 -_NtGdiCreateDIBBrush@24: - movl $0x101f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateDIBitmapInternal@44 -_NtGdiCreateDIBitmapInternal@44: - movl $0x1020, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiCreateDIBSection@36 -_NtGdiCreateDIBSection@36: - movl $0x1021, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiCreateEllipticRgn@16 -_NtGdiCreateEllipticRgn@16: - movl $0x1022, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateHalftonePalette@4 -_NtGdiCreateHalftonePalette@4: - movl $0x1023, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateHatchBrushInternal@12 -_NtGdiCreateHatchBrushInternal@12: - movl $0x1024, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreateMetafileDC@4 -_NtGdiCreateMetafileDC@4: - movl $0x1025, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreatePaletteInternal@8 -_NtGdiCreatePaletteInternal@8: - movl $0x1026, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiCreatePatternBrushInternal@12 -_NtGdiCreatePatternBrushInternal@12: - movl $0x1027, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreatePen@16 -_NtGdiCreatePen@16: - movl $0x1028, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateRectRgn@16 -_NtGdiCreateRectRgn@16: - movl $0x1029, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateRoundRectRgn@24 -_NtGdiCreateRoundRectRgn@24: - movl $0x102a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateServerMetaFile@24 -_NtGdiCreateServerMetaFile@24: - movl $0x102b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateSolidBrush@8 -_NtGdiCreateSolidBrush@8: - movl $0x102c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiD3dContextCreate@16 -_NtGdiD3dContextCreate@16: - movl $0x102d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiD3dContextDestroy@4 -_NtGdiD3dContextDestroy@4: - movl $0x102e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dContextDestroyAll@4 -_NtGdiD3dContextDestroyAll@4: - movl $0x102f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dValidateTextureStageState@4 -_NtGdiD3dValidateTextureStageState@4: - movl $0x1030, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dDrawPrimitives2@28 -_NtGdiD3dDrawPrimitives2@28: - movl $0x1031, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiDdGetDriverState@4 -_NtGdiDdGetDriverState@4: - movl $0x1032, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdAddAttachedSurface@12 -_NtGdiDdAddAttachedSurface@12: - movl $0x1033, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdAlphaBlt@12 -_NtGdiDdAlphaBlt@12: - movl $0x1034, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdAttachSurface@8 -_NtGdiDdAttachSurface@8: - movl $0x1035, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdBeginMoCompFrame@8 -_NtGdiDdBeginMoCompFrame@8: - movl $0x1036, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdBlt@12 -_NtGdiDdBlt@12: - movl $0x1037, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdCanCreateSurface@8 -_NtGdiDdCanCreateSurface@8: - movl $0x1038, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCanCreateD3DBuffer@8 -_NtGdiDdCanCreateD3DBuffer@8: - movl $0x1039, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdColorControl@8 -_NtGdiDdColorControl@8: - movl $0x103a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCreateDirectDrawObject@4 -_NtGdiDdCreateDirectDrawObject@4: - movl $0x103b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdCreateSurface@32 -_NtGdiDdCreateSurface@32: - movl $0x103c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiDdCreateD3DBuffer@32 -_NtGdiDdCreateD3DBuffer@32: - movl $0x103d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiDdCreateMoComp@8 -_NtGdiDdCreateMoComp@8: - movl $0x103e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCreateSurfaceObject@24 -_NtGdiDdCreateSurfaceObject@24: - movl $0x103f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDdDeleteDirectDrawObject@4 -_NtGdiDdDeleteDirectDrawObject@4: - movl $0x1040, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDeleteSurfaceObject@4 -_NtGdiDdDeleteSurfaceObject@4: - movl $0x1041, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDestroyMoComp@8 -_NtGdiDdDestroyMoComp@8: - movl $0x1042, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDestroySurface@8 -_NtGdiDdDestroySurface@8: - movl $0x1043, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDestroyD3DBuffer@4 -_NtGdiDdDestroyD3DBuffer@4: - movl $0x1044, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdEndMoCompFrame@8 -_NtGdiDdEndMoCompFrame@8: - movl $0x1045, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdFlip@20 -_NtGdiDdFlip@20: - movl $0x1046, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiDdFlipToGDISurface@8 -_NtGdiDdFlipToGDISurface@8: - movl $0x1047, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetAvailDriverMemory@8 -_NtGdiDdGetAvailDriverMemory@8: - movl $0x1048, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetBltStatus@8 -_NtGdiDdGetBltStatus@8: - movl $0x1049, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDC@8 -_NtGdiDdGetDC@8: - movl $0x104a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDriverInfo@8 -_NtGdiDdGetDriverInfo@8: - movl $0x104b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDxHandle@12 -_NtGdiDdGetDxHandle@12: - movl $0x104c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdGetFlipStatus@8 -_NtGdiDdGetFlipStatus@8: - movl $0x104d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetInternalMoCompInfo@8 -_NtGdiDdGetInternalMoCompInfo@8: - movl $0x104e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompBuffInfo@8 -_NtGdiDdGetMoCompBuffInfo@8: - movl $0x104f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompGuids@8 -_NtGdiDdGetMoCompGuids@8: - movl $0x1050, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompFormats@8 -_NtGdiDdGetMoCompFormats@8: - movl $0x1051, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetScanLine@8 -_NtGdiDdGetScanLine@8: - movl $0x1052, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdLock@12 -_NtGdiDdLock@12: - movl $0x1053, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdLockD3D@8 -_NtGdiDdLockD3D@8: - movl $0x1054, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdQueryDirectDrawObject@44 -_NtGdiDdQueryDirectDrawObject@44: - movl $0x1055, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiDdQueryMoCompStatus@8 -_NtGdiDdQueryMoCompStatus@8: - movl $0x1056, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdReenableDirectDrawObject@8 -_NtGdiDdReenableDirectDrawObject@8: - movl $0x1057, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdReleaseDC@4 -_NtGdiDdReleaseDC@4: - movl $0x1058, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdRenderMoComp@8 -_NtGdiDdRenderMoComp@8: - movl $0x1059, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdResetVisrgn@8 -_NtGdiDdResetVisrgn@8: - movl $0x105a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetColorKey@8 -_NtGdiDdSetColorKey@8: - movl $0x105b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetExclusiveMode@8 -_NtGdiDdSetExclusiveMode@8: - movl $0x105c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetGammaRamp@12 -_NtGdiDdSetGammaRamp@12: - movl $0x105d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdCreateSurfaceEx@12 -_NtGdiDdCreateSurfaceEx@12: - movl $0x105e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdSetOverlayPosition@12 -_NtGdiDdSetOverlayPosition@12: - movl $0x105f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdUnattachSurface@8 -_NtGdiDdUnattachSurface@8: - movl $0x1060, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUnlock@8 -_NtGdiDdUnlock@8: - movl $0x1061, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUnlockD3D@8 -_NtGdiDdUnlockD3D@8: - movl $0x1062, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUpdateOverlay@12 -_NtGdiDdUpdateOverlay@12: - movl $0x1063, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdWaitForVerticalBlank@8 -_NtGdiDdWaitForVerticalBlank@8: - movl $0x1064, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpCanCreateVideoPort@8 -_NtGdiDvpCanCreateVideoPort@8: - movl $0x1065, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpColorControl@8 -_NtGdiDvpColorControl@8: - movl $0x1066, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpCreateVideoPort@8 -_NtGdiDvpCreateVideoPort@8: - movl $0x1067, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpDestroyVideoPort@8 -_NtGdiDvpDestroyVideoPort@8: - movl $0x1068, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpFlipVideoPort@16 -_NtGdiDvpFlipVideoPort@16: - movl $0x1069, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDvpGetVideoPortBandwidth@8 -_NtGdiDvpGetVideoPortBandwidth@8: - movl $0x106a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortField@8 -_NtGdiDvpGetVideoPortField@8: - movl $0x106b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortFlipStatus@8 -_NtGdiDvpGetVideoPortFlipStatus@8: - movl $0x106c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortInputFormats@8 -_NtGdiDvpGetVideoPortInputFormats@8: - movl $0x106d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortLine@8 -_NtGdiDvpGetVideoPortLine@8: - movl $0x106e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortOutputFormats@8 -_NtGdiDvpGetVideoPortOutputFormats@8: - movl $0x106f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortConnectInfo@8 -_NtGdiDvpGetVideoPortConnectInfo@8: - movl $0x1070, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoSignalStatus@8 -_NtGdiDvpGetVideoSignalStatus@8: - movl $0x1071, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpUpdateVideoPort@16 -_NtGdiDvpUpdateVideoPort@16: - movl $0x1072, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDvpWaitForVideoPortSync@8 -_NtGdiDvpWaitForVideoPortSync@8: - movl $0x1073, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpAcquireNotification@12 -_NtGdiDvpAcquireNotification@12: - movl $0x1074, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDvpReleaseNotification@8 -_NtGdiDvpReleaseNotification@8: - movl $0x1075, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDxgGenericThunk@24 -_NtGdiDxgGenericThunk@24: - movl $0x1076, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDeleteClientObj@4 -_NtGdiDeleteClientObj@4: - movl $0x1077, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDeleteColorSpace@4 -_NtGdiDeleteColorSpace@4: - movl $0x1078, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDeleteColorTransform@8 -_NtGdiDeleteColorTransform@8: - movl $0x1079, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDeleteObjectApp@4 -_NtGdiDeleteObjectApp@4: - movl $0x107a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDescribePixelFormat@16 -_NtGdiDescribePixelFormat@16: - movl $0x107b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPerBandInfo@8 -_NtGdiGetPerBandInfo@8: - movl $0x107c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDoBanding@16 -_NtGdiDoBanding@16: - movl $0x107d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDoPalette@24 -_NtGdiDoPalette@24: - movl $0x107e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDrawEscape@16 -_NtGdiDrawEscape@16: - movl $0x107f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEllipse@20 -_NtGdiEllipse@20: - movl $0x1080, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEnableEudc@4 -_NtGdiEnableEudc@4: - movl $0x1081, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndDoc@4 -_NtGdiEndDoc@4: - movl $0x1082, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndPage@4 -_NtGdiEndPage@4: - movl $0x1083, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndPath@4 -_NtGdiEndPath@4: - movl $0x1084, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEnumFontChunk@20 -_NtGdiEnumFontChunk@20: - movl $0x1085, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEnumFontClose@4 -_NtGdiEnumFontClose@4: - movl $0x1086, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEnumFontOpen@28 -_NtGdiEnumFontOpen@28: - movl $0x1087, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEnumObjects@16 -_NtGdiEnumObjects@16: - movl $0x1088, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEqualRgn@8 -_NtGdiEqualRgn@8: - movl $0x1089, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiEudcLoadUnloadLink@28 -_NtGdiEudcLoadUnloadLink@28: - movl $0x108a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiExcludeClipRect@20 -_NtGdiExcludeClipRect@20: - movl $0x108b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiExtCreatePen@44 -_NtGdiExtCreatePen@44: - movl $0x108c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiExtCreateRegion@12 -_NtGdiExtCreateRegion@12: - movl $0x108d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtEscape@32 -_NtGdiExtEscape@32: - movl $0x108e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiExtFloodFill@20 -_NtGdiExtFloodFill@20: - movl $0x108f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiExtGetObjectW@12 -_NtGdiExtGetObjectW@12: - movl $0x1090, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtSelectClipRgn@12 -_NtGdiExtSelectClipRgn@12: - movl $0x1091, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtTextOutW@36 -_NtGdiExtTextOutW@36: - movl $0x1092, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiFillPath@4 -_NtGdiFillPath@4: - movl $0x1093, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFillRgn@12 -_NtGdiFillRgn@12: - movl $0x1094, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiFlattenPath@4 -_NtGdiFlattenPath@4: - movl $0x1095, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFlush@0 -_NtGdiFlush@0: - movl $0x1096, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiForceUFIMapping@8 -_NtGdiForceUFIMapping@8: - movl $0x1097, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFrameRgn@20 -_NtGdiFrameRgn@20: - movl $0x1098, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiFullscreenControl@20 -_NtGdiFullscreenControl@20: - movl $0x1099, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetAndSetDCDword@16 -_NtGdiGetAndSetDCDword@16: - movl $0x109a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetAppClipBox@8 -_NtGdiGetAppClipBox@8: - movl $0x109b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetBitmapBits@12 -_NtGdiGetBitmapBits@12: - movl $0x109c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetBitmapDimension@8 -_NtGdiGetBitmapDimension@8: - movl $0x109d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetBoundsRect@12 -_NtGdiGetBoundsRect@12: - movl $0x109e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetCharABCWidthsW@24 -_NtGdiGetCharABCWidthsW@24: - movl $0x109f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharacterPlacementW@24 -_NtGdiGetCharacterPlacementW@24: - movl $0x10a0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharSet@4 -_NtGdiGetCharSet@4: - movl $0x10a1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetCharWidthW@24 -_NtGdiGetCharWidthW@24: - movl $0x10a2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharWidthInfo@8 -_NtGdiGetCharWidthInfo@8: - movl $0x10a3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetColorAdjustment@8 -_NtGdiGetColorAdjustment@8: - movl $0x10a4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetColorSpaceforBitmap@4 -_NtGdiGetColorSpaceforBitmap@4: - movl $0x10a5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetDCDword@12 -_NtGdiGetDCDword@12: - movl $0x10a6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDCforBitmap@4 -_NtGdiGetDCforBitmap@4: - movl $0x10a7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetDCObject@8 -_NtGdiGetDCObject@8: - movl $0x10a8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDCPoint@12 -_NtGdiGetDCPoint@12: - movl $0x10a9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDeviceCaps@8 -_NtGdiGetDeviceCaps@8: - movl $0x10aa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDeviceGammaRamp@8 -_NtGdiGetDeviceGammaRamp@8: - movl $0x10ab, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDeviceCapsAll@8 -_NtGdiGetDeviceCapsAll@8: - movl $0x10ac, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDIBitsInternal@36 -_NtGdiGetDIBitsInternal@36: - movl $0x10ad, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiGetETM@8 -_NtGdiGetETM@8: - movl $0x10ae, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetEudcTimeStampEx@12 -_NtGdiGetEudcTimeStampEx@12: - movl $0x10af, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetFontData@20 -_NtGdiGetFontData@20: - movl $0x10b0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetFontResourceInfoInternalW@28 -_NtGdiGetFontResourceInfoInternalW@28: - movl $0x10b1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetGlyphIndicesW@20 -_NtGdiGetGlyphIndicesW@20: - movl $0x10b2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetGlyphIndicesWInternal@24 -_NtGdiGetGlyphIndicesWInternal@24: - movl $0x10b3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetGlyphOutline@32 -_NtGdiGetGlyphOutline@32: - movl $0x10b4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiGetKerningPairs@12 -_NtGdiGetKerningPairs@12: - movl $0x10b5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetLinkedUFIs@12 -_NtGdiGetLinkedUFIs@12: - movl $0x10b6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetMiterLimit@8 -_NtGdiGetMiterLimit@8: - movl $0x10b7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetMonitorID@12 -_NtGdiGetMonitorID@12: - movl $0x10b8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetNearestColor@8 -_NtGdiGetNearestColor@8: - movl $0x10b9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetNearestPaletteIndex@8 -_NtGdiGetNearestPaletteIndex@8: - movl $0x10ba, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetObjectBitmapHandle@8 -_NtGdiGetObjectBitmapHandle@8: - movl $0x10bb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetOutlineTextMetricsInternalW@16 -_NtGdiGetOutlineTextMetricsInternalW@16: - movl $0x10bc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPath@16 -_NtGdiGetPath@16: - movl $0x10bd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPixel@12 -_NtGdiGetPixel@12: - movl $0x10be, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRandomRgn@12 -_NtGdiGetRandomRgn@12: - movl $0x10bf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRasterizerCaps@8 -_NtGdiGetRasterizerCaps@8: - movl $0x10c0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetRealizationInfo@12 -_NtGdiGetRealizationInfo@12: - movl $0x10c1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRegionData@12 -_NtGdiGetRegionData@12: - movl $0x10c2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRgnBox@8 -_NtGdiGetRgnBox@8: - movl $0x10c3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetServerMetaFileBits@28 -_NtGdiGetServerMetaFileBits@28: - movl $0x10c4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetSpoolMessage@16 -_NtGdiGetSpoolMessage@16: - movl $0x10c5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetStats@20 -_NtGdiGetStats@20: - movl $0x10c6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetStockObject@4 -_NtGdiGetStockObject@4: - movl $0x10c7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetStringBitmapW@20 -_NtGdiGetStringBitmapW@20: - movl $0x10c8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetSystemPaletteUse@4 -_NtGdiGetSystemPaletteUse@4: - movl $0x10c9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetTextCharsetInfo@12 -_NtGdiGetTextCharsetInfo@12: - movl $0x10ca, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetTextExtent@20 -_NtGdiGetTextExtent@20: - movl $0x10cb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetTextExtentExW@32 -_NtGdiGetTextExtentExW@32: - movl $0x10cc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiGetTextFaceW@16 -_NtGdiGetTextFaceW@16: - movl $0x10cd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetTextMetricsW@12 -_NtGdiGetTextMetricsW@12: - movl $0x10ce, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetTransform@12 -_NtGdiGetTransform@12: - movl $0x10cf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetUFI@24 -_NtGdiGetUFI@24: - movl $0x10d0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetEmbUFI@28 -_NtGdiGetEmbUFI@28: - movl $0x10d1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetUFIPathname@40 -_NtGdiGetUFIPathname@40: - movl $0x10d2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiGetEmbedFonts@0 -_NtGdiGetEmbedFonts@0: - movl $0x10d3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiChangeGhostFont@8 -_NtGdiChangeGhostFont@8: - movl $0x10d4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiAddEmbFontToDC@8 -_NtGdiAddEmbFontToDC@8: - movl $0x10d5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetFontUnicodeRanges@8 -_NtGdiGetFontUnicodeRanges@8: - movl $0x10d6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetWidthTable@28 -_NtGdiGetWidthTable@28: - movl $0x10d7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGradientFill@24 -_NtGdiGradientFill@24: - movl $0x10d8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiHfontCreate@20 -_NtGdiHfontCreate@20: - movl $0x10d9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiIcmBrushInfo@32 -_NtGdiIcmBrushInfo@32: - movl $0x10da, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiInit@0 -_NtGdiInit@0: - movl $0x10db, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiInitSpool@0 -_NtGdiInitSpool@0: - movl $0x10dc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiIntersectClipRect@20 -_NtGdiIntersectClipRect@20: - movl $0x10dd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiInvertRgn@8 -_NtGdiInvertRgn@8: - movl $0x10de, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiLineTo@12 -_NtGdiLineTo@12: - movl $0x10df, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiMakeFontDir@20 -_NtGdiMakeFontDir@20: - movl $0x10e0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiMakeInfoDC@8 -_NtGdiMakeInfoDC@8: - movl $0x10e1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiMaskBlt@52 -_NtGdiMaskBlt@52: - movl $0x10e2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x34 - -.global _NtGdiModifyWorldTransform@12 -_NtGdiModifyWorldTransform@12: - movl $0x10e3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiMonoBitmap@4 -_NtGdiMonoBitmap@4: - movl $0x10e4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiMoveTo@16 -_NtGdiMoveTo@16: - movl $0x10e5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiOffsetClipRgn@12 -_NtGdiOffsetClipRgn@12: - movl $0x10e6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiOffsetRgn@12 -_NtGdiOffsetRgn@12: - movl $0x10e7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiOpenDCW@28 -_NtGdiOpenDCW@28: - movl $0x10e8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiPatBlt@24 -_NtGdiPatBlt@24: - movl $0x10e9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiPolyPatBlt@20 -_NtGdiPolyPatBlt@20: - movl $0x10ea, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiPathToRegion@4 -_NtGdiPathToRegion@4: - movl $0x10eb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPlgBlt@44 -_NtGdiPlgBlt@44: - movl $0x10ec, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiPolyDraw@16 -_NtGdiPolyDraw@16: - movl $0x10ed, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPolyPolyDraw@20 -_NtGdiPolyPolyDraw@20: - movl $0x10ee, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiPolyTextOutW@16 -_NtGdiPolyTextOutW@16: - movl $0x10ef, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPtInRegion@12 -_NtGdiPtInRegion@12: - movl $0x10f0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiPtVisible@12 -_NtGdiPtVisible@12: - movl $0x10f1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiQueryFonts@12 -_NtGdiQueryFonts@12: - movl $0x10f2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiQueryFontAssocInfo@4 -_NtGdiQueryFontAssocInfo@4: - movl $0x10f3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiRectangle@20 -_NtGdiRectangle@20: - movl $0x10f4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiRectInRegion@8 -_NtGdiRectInRegion@8: - movl $0x10f5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRectVisible@8 -_NtGdiRectVisible@8: - movl $0x10f6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRemoveFontResourceW@24 -_NtGdiRemoveFontResourceW@24: - movl $0x10f7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiRemoveFontMemResourceEx@4 -_NtGdiRemoveFontMemResourceEx@4: - movl $0x10f8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiResetDC@20 -_NtGdiResetDC@20: - movl $0x10f9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiResizePalette@8 -_NtGdiResizePalette@8: - movl $0x10fa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRestoreDC@8 -_NtGdiRestoreDC@8: - movl $0x10fb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRoundRect@28 -_NtGdiRoundRect@28: - movl $0x10fc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiSaveDC@4 -_NtGdiSaveDC@4: - movl $0x10fd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiScaleViewportExtEx@24 -_NtGdiScaleViewportExtEx@24: - movl $0x10fe, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiScaleWindowExtEx@24 -_NtGdiScaleWindowExtEx@24: - movl $0x10ff, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiSelectBitmap@8 -_NtGdiSelectBitmap@8: - movl $0x1100, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectBrush@8 -_NtGdiSelectBrush@8: - movl $0x1101, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectClipPath@8 -_NtGdiSelectClipPath@8: - movl $0x1102, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectFont@8 -_NtGdiSelectFont@8: - movl $0x1103, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectPen@8 -_NtGdiSelectPen@8: - movl $0x1104, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBitmapAttributes@8 -_NtGdiSetBitmapAttributes@8: - movl $0x1105, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBitmapBits@12 -_NtGdiSetBitmapBits@12: - movl $0x1106, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetBitmapDimension@16 -_NtGdiSetBitmapDimension@16: - movl $0x1107, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetBoundsRect@12 -_NtGdiSetBoundsRect@12: - movl $0x1108, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetBrushAttributes@8 -_NtGdiSetBrushAttributes@8: - movl $0x1109, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBrushOrg@16 -_NtGdiSetBrushOrg@16: - movl $0x110a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetColorAdjustment@8 -_NtGdiSetColorAdjustment@8: - movl $0x110b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetColorSpace@8 -_NtGdiSetColorSpace@8: - movl $0x110c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetDeviceGammaRamp@8 -_NtGdiSetDeviceGammaRamp@8: - movl $0x110d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetDIBitsToDeviceInternal@64 -_NtGdiSetDIBitsToDeviceInternal@64: - movl $0x110e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x40 - -.global _NtGdiSetFontEnumeration@4 -_NtGdiSetFontEnumeration@4: - movl $0x110f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetFontXform@12 -_NtGdiSetFontXform@12: - movl $0x1110, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetIcmMode@12 -_NtGdiSetIcmMode@12: - movl $0x1111, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetLinkedUFIs@12 -_NtGdiSetLinkedUFIs@12: - movl $0x1112, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetMagicColors@12 -_NtGdiSetMagicColors@12: - movl $0x1113, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetMetaRgn@4 -_NtGdiSetMetaRgn@4: - movl $0x1114, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetMiterLimit@12 -_NtGdiSetMiterLimit@12: - movl $0x1115, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDeviceWidth@4 -_NtGdiGetDeviceWidth@4: - movl $0x1116, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiMirrorWindowOrg@4 -_NtGdiMirrorWindowOrg@4: - movl $0x1117, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetLayout@12 -_NtGdiSetLayout@12: - movl $0x1118, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetPixel@16 -_NtGdiSetPixel@16: - movl $0x1119, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetPixelFormat@8 -_NtGdiSetPixelFormat@8: - movl $0x111a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetRectRgn@20 -_NtGdiSetRectRgn@20: - movl $0x111b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiSetSystemPaletteUse@8 -_NtGdiSetSystemPaletteUse@8: - movl $0x111c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetTextJustification@12 -_NtGdiSetTextJustification@12: - movl $0x111d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetupPublicCFONT@12 -_NtGdiSetupPublicCFONT@12: - movl $0x111e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetVirtualResolution@20 -_NtGdiSetVirtualResolution@20: - movl $0x111f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiSetSizeDevice@12 -_NtGdiSetSizeDevice@12: - movl $0x1120, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiStartDoc@16 -_NtGdiStartDoc@16: - movl $0x1121, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiStartPage@4 -_NtGdiStartPage@4: - movl $0x1122, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiStretchBlt@48 -_NtGdiStretchBlt@48: - movl $0x1123, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtGdiStretchDIBitsInternal@64 -_NtGdiStretchDIBitsInternal@64: - movl $0x1124, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x40 - -.global _NtGdiStrokeAndFillPath@4 -_NtGdiStrokeAndFillPath@4: - movl $0x1125, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiStrokePath@4 -_NtGdiStrokePath@4: - movl $0x1126, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSwapBuffers@4 -_NtGdiSwapBuffers@4: - movl $0x1127, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiTransformPoints@20 -_NtGdiTransformPoints@20: - movl $0x1128, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiTransparentBlt@44 -_NtGdiTransparentBlt@44: - movl $0x1129, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiUnloadPrinterDriver@8 -_NtGdiUnloadPrinterDriver@8: - movl $0x112a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiUnmapMemFont@4 -_NtGdiUnmapMemFont@4: - movl $0x112b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiUnrealizeObject@4 -_NtGdiUnrealizeObject@4: - movl $0x112c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiUpdateColors@4 -_NtGdiUpdateColors@4: - movl $0x112d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiWidenPath@4 -_NtGdiWidenPath@4: - movl $0x112e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserActivateKeyboardLayout@8 -_NtUserActivateKeyboardLayout@8: - movl $0x112f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserAlterWindowStyle@12 -_NtUserAlterWindowStyle@12: - movl $0x1130, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserAssociateInputContext@12 -_NtUserAssociateInputContext@12: - movl $0x1131, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserAttachThreadInput@12 -_NtUserAttachThreadInput@12: - movl $0x1132, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserBeginPaint@8 -_NtUserBeginPaint@8: - movl $0x1133, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserBitBltSysBmp@32 -_NtUserBitBltSysBmp@32: - movl $0x1134, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserBlockInput@4 -_NtUserBlockInput@4: - movl $0x1135, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserBuildHimcList@16 -_NtUserBuildHimcList@16: - movl $0x1136, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserBuildHwndList@28 -_NtUserBuildHwndList@28: - movl $0x1137, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserBuildNameList@16 -_NtUserBuildNameList@16: - movl $0x1138, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserBuildPropList@16 -_NtUserBuildPropList@16: - movl $0x1139, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCallHwnd@8 -_NtUserCallHwnd@8: - movl $0x113a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndLock@8 -_NtUserCallHwndLock@8: - movl $0x113b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndOpt@8 -_NtUserCallHwndOpt@8: - movl $0x113c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndParam@12 -_NtUserCallHwndParam@12: - movl $0x113d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCallHwndParamLock@12 -_NtUserCallHwndParamLock@12: - movl $0x113e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCallMsgFilter@8 -_NtUserCallMsgFilter@8: - movl $0x113f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallNextHookEx@16 -_NtUserCallNextHookEx@16: - movl $0x1140, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCallNoParam@4 -_NtUserCallNoParam@4: - movl $0x1141, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCallOneParam@8 -_NtUserCallOneParam@8: - movl $0x1142, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallTwoParam@12 -_NtUserCallTwoParam@12: - movl $0x1143, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserChangeClipboardChain@8 -_NtUserChangeClipboardChain@8: - movl $0x1144, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserChangeDisplaySettings@16 -_NtUserChangeDisplaySettings@16: - movl $0x1145, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCheckImeHotKey@8 -_NtUserCheckImeHotKey@8: - movl $0x1146, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCheckMenuItem@12 -_NtUserCheckMenuItem@12: - movl $0x1147, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserChildWindowFromPointEx@16 -_NtUserChildWindowFromPointEx@16: - movl $0x1148, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserClipCursor@4 -_NtUserClipCursor@4: - movl $0x1149, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCloseClipboard@0 -_NtUserCloseClipboard@0: - movl $0x114a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCloseDesktop@4 -_NtUserCloseDesktop@4: - movl $0x114b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCloseWindowStation@4 -_NtUserCloseWindowStation@4: - movl $0x114c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserConsoleControl@12 -_NtUserConsoleControl@12: - movl $0x114d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserConvertMemHandle@8 -_NtUserConvertMemHandle@8: - movl $0x114e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCopyAcceleratorTable@12 -_NtUserCopyAcceleratorTable@12: - movl $0x114f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCountClipboardFormats@0 -_NtUserCountClipboardFormats@0: - movl $0x1150, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCreateAcceleratorTable@8 -_NtUserCreateAcceleratorTable@8: - movl $0x1151, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCreateCaret@16 -_NtUserCreateCaret@16: - movl $0x1152, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCreateDesktop@20 -_NtUserCreateDesktop@20: - movl $0x1153, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserCreateInputContext@4 -_NtUserCreateInputContext@4: - movl $0x1154, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCreateLocalMemHandle@16 -_NtUserCreateLocalMemHandle@16: - movl $0x1155, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCreateWindowEx@60 -_NtUserCreateWindowEx@60: - movl $0x1156, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x3c - -.global _NtUserCreateWindowStation@28 -_NtUserCreateWindowStation@28: - movl $0x1157, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserDdeGetQualityOfService@12 -_NtUserDdeGetQualityOfService@12: - movl $0x1158, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDdeInitialize@20 -_NtUserDdeInitialize@20: - movl $0x1159, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserDdeSetQualityOfService@12 -_NtUserDdeSetQualityOfService@12: - movl $0x115a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDeferWindowPos@32 -_NtUserDeferWindowPos@32: - movl $0x115b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserDefSetText@8 -_NtUserDefSetText@8: - movl $0x115c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserDeleteMenu@12 -_NtUserDeleteMenu@12: - movl $0x115d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDestroyAcceleratorTable@4 -_NtUserDestroyAcceleratorTable@4: - movl $0x115e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyCursor@8 -_NtUserDestroyCursor@8: - movl $0x115f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserDestroyInputContext@4 -_NtUserDestroyInputContext@4: - movl $0x1160, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyMenu@4 -_NtUserDestroyMenu@4: - movl $0x1161, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyWindow@4 -_NtUserDestroyWindow@4: - movl $0x1162, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDisableThreadIme@4 -_NtUserDisableThreadIme@4: - movl $0x1163, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDispatchMessage@4 -_NtUserDispatchMessage@4: - movl $0x1164, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDragDetect@12 -_NtUserDragDetect@12: - movl $0x1165, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDragObject@20 -_NtUserDragObject@20: - movl $0x1166, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserDrawAnimatedRects@16 -_NtUserDrawAnimatedRects@16: - movl $0x1167, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserDrawCaption@16 -_NtUserDrawCaption@16: - movl $0x1168, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserDrawCaptionTemp@28 -_NtUserDrawCaptionTemp@28: - movl $0x1169, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserDrawIconEx@44 -_NtUserDrawIconEx@44: - movl $0x116a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtUserDrawMenuBarTemp@20 -_NtUserDrawMenuBarTemp@20: - movl $0x116b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserEmptyClipboard@0 -_NtUserEmptyClipboard@0: - movl $0x116c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserEnableMenuItem@12 -_NtUserEnableMenuItem@12: - movl $0x116d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserEnableScrollBar@12 -_NtUserEnableScrollBar@12: - movl $0x116e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserEndDeferWindowPosEx@8 -_NtUserEndDeferWindowPosEx@8: - movl $0x116f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserEndMenu@0 -_NtUserEndMenu@0: - movl $0x1170, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserEndPaint@8 -_NtUserEndPaint@8: - movl $0x1171, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserEnumDisplayDevices@16 -_NtUserEnumDisplayDevices@16: - movl $0x1172, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEnumDisplayMonitors@16 -_NtUserEnumDisplayMonitors@16: - movl $0x1173, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEnumDisplaySettings@16 -_NtUserEnumDisplaySettings@16: - movl $0x1174, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEvent@4 -_NtUserEvent@4: - movl $0x1175, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserExcludeUpdateRgn@8 -_NtUserExcludeUpdateRgn@8: - movl $0x1176, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserFillWindow@16 -_NtUserFillWindow@16: - movl $0x1177, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserFindExistingCursorIcon@12 -_NtUserFindExistingCursorIcon@12: - movl $0x1178, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserFindWindowEx@20 -_NtUserFindWindowEx@20: - movl $0x1179, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserFlashWindowEx@4 -_NtUserFlashWindowEx@4: - movl $0x117a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetAltTabInfo@24 -_NtUserGetAltTabInfo@24: - movl $0x117b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserGetAncestor@8 -_NtUserGetAncestor@8: - movl $0x117c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetAppImeLevel@4 -_NtUserGetAppImeLevel@4: - movl $0x117d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetAsyncKeyState@4 -_NtUserGetAsyncKeyState@4: - movl $0x117e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetAtomName@8 -_NtUserGetAtomName@8: - movl $0x117f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetCaretBlinkTime@0 -_NtUserGetCaretBlinkTime@0: - movl $0x1180, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetCaretPos@4 -_NtUserGetCaretPos@4: - movl $0x1181, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetClassInfoEx@20 -_NtUserGetClassInfoEx@20: - movl $0x1182, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetClassName@12 -_NtUserGetClassName@12: - movl $0x1183, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetClipboardData@8 -_NtUserGetClipboardData@8: - movl $0x1184, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetClipboardFormatName@12 -_NtUserGetClipboardFormatName@12: - movl $0x1185, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetClipboardOwner@0 -_NtUserGetClipboardOwner@0: - movl $0x1186, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipboardSequenceNumber@0 -_NtUserGetClipboardSequenceNumber@0: - movl $0x1187, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipboardViewer@0 -_NtUserGetClipboardViewer@0: - movl $0x1188, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipCursor@4 -_NtUserGetClipCursor@4: - movl $0x1189, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetComboBoxInfo@8 -_NtUserGetComboBoxInfo@8: - movl $0x118a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetControlBrush@12 -_NtUserGetControlBrush@12: - movl $0x118b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetControlColor@16 -_NtUserGetControlColor@16: - movl $0x118c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetCPD@12 -_NtUserGetCPD@12: - movl $0x118d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetCursorFrameInfo@16 -_NtUserGetCursorFrameInfo@16: - movl $0x118e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetCursorInfo@4 -_NtUserGetCursorInfo@4: - movl $0x118f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetDC@4 -_NtUserGetDC@4: - movl $0x1190, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetDCEx@12 -_NtUserGetDCEx@12: - movl $0x1191, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetDoubleClickTime@0 -_NtUserGetDoubleClickTime@0: - movl $0x1192, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetForegroundWindow@0 -_NtUserGetForegroundWindow@0: - movl $0x1193, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetGuiResources@8 -_NtUserGetGuiResources@8: - movl $0x1194, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetGUIThreadInfo@8 -_NtUserGetGUIThreadInfo@8: - movl $0x1195, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetIconInfo@24 -_NtUserGetIconInfo@24: - movl $0x1196, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserGetIconSize@16 -_NtUserGetIconSize@16: - movl $0x1197, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetImeHotKey@16 -_NtUserGetImeHotKey@16: - movl $0x1198, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetImeInfoEx@8 -_NtUserGetImeInfoEx@8: - movl $0x1199, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetInternalWindowPos@12 -_NtUserGetInternalWindowPos@12: - movl $0x119a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetKeyboardLayoutList@8 -_NtUserGetKeyboardLayoutList@8: - movl $0x119b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetKeyboardLayoutName@4 -_NtUserGetKeyboardLayoutName@4: - movl $0x119c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetKeyboardState@4 -_NtUserGetKeyboardState@4: - movl $0x119d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetKeyNameText@12 -_NtUserGetKeyNameText@12: - movl $0x119e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetKeyState@4 -_NtUserGetKeyState@4: - movl $0x119f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetListBoxInfo@4 -_NtUserGetListBoxInfo@4: - movl $0x11a0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetMenuBarInfo@16 -_NtUserGetMenuBarInfo@16: - movl $0x11a1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMenuIndex@8 -_NtUserGetMenuIndex@8: - movl $0x11a2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetMenuItemRect@16 -_NtUserGetMenuItemRect@16: - movl $0x11a3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMessage@16 -_NtUserGetMessage@16: - movl $0x11a4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMouseMovePointsEx@20 -_NtUserGetMouseMovePointsEx@20: - movl $0x11a5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetObjectInformation@20 -_NtUserGetObjectInformation@20: - movl $0x11a6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetOpenClipboardWindow@0 -_NtUserGetOpenClipboardWindow@0: - movl $0x11a7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetPriorityClipboardFormat@8 -_NtUserGetPriorityClipboardFormat@8: - movl $0x11a8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetProcessWindowStation@0 -_NtUserGetProcessWindowStation@0: - movl $0x11a9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetRawInputBuffer@12 -_NtUserGetRawInputBuffer@12: - movl $0x11aa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetRawInputData@20 -_NtUserGetRawInputData@20: - movl $0x11ab, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetRawInputDeviceInfo@16 -_NtUserGetRawInputDeviceInfo@16: - movl $0x11ac, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetRawInputDeviceList@12 -_NtUserGetRawInputDeviceList@12: - movl $0x11ad, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetRegisteredRawInputDevices@12 -_NtUserGetRegisteredRawInputDevices@12: - movl $0x11ae, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetScrollBarInfo@12 -_NtUserGetScrollBarInfo@12: - movl $0x11af, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetSystemMenu@8 -_NtUserGetSystemMenu@8: - movl $0x11b0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetThreadDesktop@8 -_NtUserGetThreadDesktop@8: - movl $0x11b1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetThreadState@4 -_NtUserGetThreadState@4: - movl $0x11b2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetTitleBarInfo@8 -_NtUserGetTitleBarInfo@8: - movl $0x11b3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetUpdateRect@12 -_NtUserGetUpdateRect@12: - movl $0x11b4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetUpdateRgn@12 -_NtUserGetUpdateRgn@12: - movl $0x11b5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetWindowDC@4 -_NtUserGetWindowDC@4: - movl $0x11b6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetWindowPlacement@8 -_NtUserGetWindowPlacement@8: - movl $0x11b7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetWOWClass@8 -_NtUserGetWOWClass@8: - movl $0x11b8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserHardErrorControl@12 -_NtUserHardErrorControl@12: - movl $0x11b9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserHideCaret@4 -_NtUserHideCaret@4: - movl $0x11ba, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserHiliteMenuItem@16 -_NtUserHiliteMenuItem@16: - movl $0x11bb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserImpersonateDdeClientWindow@8 -_NtUserImpersonateDdeClientWindow@8: - movl $0x11bc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserInitialize@12 -_NtUserInitialize@12: - movl $0x11bd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserInitializeClientPfnArrays@16 -_NtUserInitializeClientPfnArrays@16: - movl $0x11be, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserInitTask@48 -_NtUserInitTask@48: - movl $0x11bf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtUserInternalGetWindowText@12 -_NtUserInternalGetWindowText@12: - movl $0x11c0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserInvalidateRect@12 -_NtUserInvalidateRect@12: - movl $0x11c1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserInvalidateRgn@12 -_NtUserInvalidateRgn@12: - movl $0x11c2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserIsClipboardFormatAvailable@4 -_NtUserIsClipboardFormatAvailable@4: - movl $0x11c3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserKillTimer@8 -_NtUserKillTimer@8: - movl $0x11c4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserLoadKeyboardLayoutEx@28 -_NtUserLoadKeyboardLayoutEx@28: - movl $0x11c5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserLockWindowStation@4 -_NtUserLockWindowStation@4: - movl $0x11c6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserLockWindowUpdate@4 -_NtUserLockWindowUpdate@4: - movl $0x11c7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserLockWorkStation@0 -_NtUserLockWorkStation@0: - movl $0x11c8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserMapVirtualKeyEx@16 -_NtUserMapVirtualKeyEx@16: - movl $0x11c9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserMenuItemFromPoint@16 -_NtUserMenuItemFromPoint@16: - movl $0x11ca, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserMessageCall@28 -_NtUserMessageCall@28: - movl $0x11cb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserMinMaximize@12 -_NtUserMinMaximize@12: - movl $0x11cc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserMNDragLeave@0 -_NtUserMNDragLeave@0: - movl $0x11cd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserMNDragOver@8 -_NtUserMNDragOver@8: - movl $0x11ce, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserModifyUserStartupInfoFlags@8 -_NtUserModifyUserStartupInfoFlags@8: - movl $0x11cf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserMoveWindow@24 -_NtUserMoveWindow@24: - movl $0x11d0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserNotifyIMEStatus@12 -_NtUserNotifyIMEStatus@12: - movl $0x11d1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserNotifyProcessCreate@16 -_NtUserNotifyProcessCreate@16: - movl $0x11d2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserNotifyWinEvent@16 -_NtUserNotifyWinEvent@16: - movl $0x11d3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserOpenClipboard@8 -_NtUserOpenClipboard@8: - movl $0x11d4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserOpenDesktop@12 -_NtUserOpenDesktop@12: - movl $0x11d5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserOpenInputDesktop@12 -_NtUserOpenInputDesktop@12: - movl $0x11d6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserOpenWindowStation@8 -_NtUserOpenWindowStation@8: - movl $0x11d7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserPaintDesktop@4 -_NtUserPaintDesktop@4: - movl $0x11d8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserPeekMessage@20 -_NtUserPeekMessage@20: - movl $0x11d9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserPostMessage@16 -_NtUserPostMessage@16: - movl $0x11da, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserPostThreadMessage@16 -_NtUserPostThreadMessage@16: - movl $0x11db, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserPrintWindow@12 -_NtUserPrintWindow@12: - movl $0x11dc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserProcessConnect@12 -_NtUserProcessConnect@12: - movl $0x11dd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserQueryInformationThread@16 -_NtUserQueryInformationThread@16: - movl $0x11de, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserQueryInputContext@8 -_NtUserQueryInputContext@8: - movl $0x11df, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserQuerySendMessage@4 -_NtUserQuerySendMessage@4: - movl $0x11e0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserQueryWindow@8 -_NtUserQueryWindow@8: - movl $0x11e1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserRealChildWindowFromPoint@12 -_NtUserRealChildWindowFromPoint@12: - movl $0x11e2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRealInternalGetMessage@24 -_NtUserRealInternalGetMessage@24: - movl $0x11e3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserRealWaitMessageEx@8 -_NtUserRealWaitMessageEx@8: - movl $0x11e4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserRedrawWindow@16 -_NtUserRedrawWindow@16: - movl $0x11e5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRegisterClassExWOW@28 -_NtUserRegisterClassExWOW@28: - movl $0x11e6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserRegisterUserApiHook@16 -_NtUserRegisterUserApiHook@16: - movl $0x11e7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRegisterHotKey@16 -_NtUserRegisterHotKey@16: - movl $0x11e8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRegisterRawInputDevices@12 -_NtUserRegisterRawInputDevices@12: - movl $0x11e9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRegisterTasklist@4 -_NtUserRegisterTasklist@4: - movl $0x11ea, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserRegisterWindowMessage@4 -_NtUserRegisterWindowMessage@4: - movl $0x11eb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserRemoveMenu@12 -_NtUserRemoveMenu@12: - movl $0x11ec, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRemoveProp@8 -_NtUserRemoveProp@8: - movl $0x11ed, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserResolveDesktop@16 -_NtUserResolveDesktop@16: - movl $0x11ee, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserResolveDesktopForWOW@4 -_NtUserResolveDesktopForWOW@4: - movl $0x11ef, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSBGetParms@16 -_NtUserSBGetParms@16: - movl $0x11f0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserScrollDC@28 -_NtUserScrollDC@28: - movl $0x11f1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserScrollWindowEx@32 -_NtUserScrollWindowEx@32: - movl $0x11f2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserSelectPalette@12 -_NtUserSelectPalette@12: - movl $0x11f3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSendInput@12 -_NtUserSendInput@12: - movl $0x11f4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetActiveWindow@4 -_NtUserSetActiveWindow@4: - movl $0x11f5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetAppImeLevel@8 -_NtUserSetAppImeLevel@8: - movl $0x11f6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCapture@4 -_NtUserSetCapture@4: - movl $0x11f7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetClassLong@16 -_NtUserSetClassLong@16: - movl $0x11f8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetClassWord@12 -_NtUserSetClassWord@12: - movl $0x11f9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetClipboardData@12 -_NtUserSetClipboardData@12: - movl $0x11fa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetClipboardViewer@4 -_NtUserSetClipboardViewer@4: - movl $0x11fb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetConsoleReserveKeys@8 -_NtUserSetConsoleReserveKeys@8: - movl $0x11fc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCursor@4 -_NtUserSetCursor@4: - movl $0x11fd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetCursorContents@8 -_NtUserSetCursorContents@8: - movl $0x11fe, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCursorIconData@16 -_NtUserSetCursorIconData@16: - movl $0x11ff, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetFocus@4 -_NtUserSetFocus@4: - movl $0x1200, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetImeHotKey@20 -_NtUserSetImeHotKey@20: - movl $0x1201, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserSetImeInfoEx@4 -_NtUserSetImeInfoEx@4: - movl $0x1202, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetImeOwnerWindow@8 -_NtUserSetImeOwnerWindow@8: - movl $0x1203, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetInformationProcess@16 -_NtUserSetInformationProcess@16: - movl $0x1204, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetInformationThread@16 -_NtUserSetInformationThread@16: - movl $0x1205, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetInternalWindowPos@16 -_NtUserSetInternalWindowPos@16: - movl $0x1206, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetKeyboardState@4 -_NtUserSetKeyboardState@4: - movl $0x1207, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetLogonNotifyWindow@4 -_NtUserSetLogonNotifyWindow@4: - movl $0x1208, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetMenu@12 -_NtUserSetMenu@12: - movl $0x1209, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetMenuContextHelpId@8 -_NtUserSetMenuContextHelpId@8: - movl $0x120a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetMenuDefaultItem@12 -_NtUserSetMenuDefaultItem@12: - movl $0x120b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetMenuFlagRtoL@4 -_NtUserSetMenuFlagRtoL@4: - movl $0x120c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetObjectInformation@16 -_NtUserSetObjectInformation@16: - movl $0x120d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetParent@8 -_NtUserSetParent@8: - movl $0x120e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetProcessWindowStation@4 -_NtUserSetProcessWindowStation@4: - movl $0x120f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetProp@12 -_NtUserSetProp@12: - movl $0x1210, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetScrollInfo@16 -_NtUserSetScrollInfo@16: - movl $0x1211, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetShellWindowEx@8 -_NtUserSetShellWindowEx@8: - movl $0x1212, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSysColors@16 -_NtUserSetSysColors@16: - movl $0x1213, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetSystemCursor@8 -_NtUserSetSystemCursor@8: - movl $0x1214, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSystemMenu@8 -_NtUserSetSystemMenu@8: - movl $0x1215, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSystemTimer@16 -_NtUserSetSystemTimer@16: - movl $0x1216, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetThreadDesktop@4 -_NtUserSetThreadDesktop@4: - movl $0x1217, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetThreadLayoutHandles@8 -_NtUserSetThreadLayoutHandles@8: - movl $0x1218, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetThreadState@8 -_NtUserSetThreadState@8: - movl $0x1219, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetTimer@16 -_NtUserSetTimer@16: - movl $0x121a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetWindowFNID@8 -_NtUserSetWindowFNID@8: - movl $0x121b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetWindowLong@16 -_NtUserSetWindowLong@16: - movl $0x121c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetWindowPlacement@8 -_NtUserSetWindowPlacement@8: - movl $0x121d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetWindowPos@28 -_NtUserSetWindowPos@28: - movl $0x121e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserSetWindowRgn@12 -_NtUserSetWindowRgn@12: - movl $0x121f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWindowsHookAW@12 -_NtUserSetWindowsHookAW@12: - movl $0x1220, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWindowsHookEx@24 -_NtUserSetWindowsHookEx@24: - movl $0x1221, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserSetWindowStationUser@16 -_NtUserSetWindowStationUser@16: - movl $0x1222, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetWindowWord@12 -_NtUserSetWindowWord@12: - movl $0x1223, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWinEventHook@32 -_NtUserSetWinEventHook@32: - movl $0x1224, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserShowCaret@4 -_NtUserShowCaret@4: - movl $0x1225, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserShowScrollBar@12 -_NtUserShowScrollBar@12: - movl $0x1226, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserShowWindow@8 -_NtUserShowWindow@8: - movl $0x1227, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserShowWindowAsync@8 -_NtUserShowWindowAsync@8: - movl $0x1228, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSoundSentry@0 -_NtUserSoundSentry@0: - movl $0x1229, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserSwitchDesktop@4 -_NtUserSwitchDesktop@4: - movl $0x122a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSystemParametersInfo@16 -_NtUserSystemParametersInfo@16: - movl $0x122b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserTestForInteractiveUser@4 -_NtUserTestForInteractiveUser@4: - movl $0x122c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserThunkedMenuInfo@8 -_NtUserThunkedMenuInfo@8: - movl $0x122d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserThunkedMenuItemInfo@24 -_NtUserThunkedMenuItemInfo@24: - movl $0x122e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserToUnicodeEx@28 -_NtUserToUnicodeEx@28: - movl $0x122f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserTrackMouseEvent@4 -_NtUserTrackMouseEvent@4: - movl $0x1230, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserTrackPopupMenuEx@24 -_NtUserTrackPopupMenuEx@24: - movl $0x1231, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserCalcMenuBar@20 -_NtUserCalcMenuBar@20: - movl $0x1232, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserPaintMenuBar@24 -_NtUserPaintMenuBar@24: - movl $0x1233, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserTranslateAccelerator@12 -_NtUserTranslateAccelerator@12: - movl $0x1234, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserTranslateMessage@8 -_NtUserTranslateMessage@8: - movl $0x1235, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserUnhookWindowsHookEx@4 -_NtUserUnhookWindowsHookEx@4: - movl $0x1236, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnhookWinEvent@4 -_NtUserUnhookWinEvent@4: - movl $0x1237, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnloadKeyboardLayout@4 -_NtUserUnloadKeyboardLayout@4: - movl $0x1238, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnlockWindowStation@4 -_NtUserUnlockWindowStation@4: - movl $0x1239, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnregisterClass@12 -_NtUserUnregisterClass@12: - movl $0x123a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUnregisterUserApiHook@0 -_NtUserUnregisterUserApiHook@0: - movl $0x123b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserUnregisterHotKey@8 -_NtUserUnregisterHotKey@8: - movl $0x123c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserUpdateInputContext@12 -_NtUserUpdateInputContext@12: - movl $0x123d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUpdateInstance@12 -_NtUserUpdateInstance@12: - movl $0x123e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUpdateLayeredWindow@40 -_NtUserUpdateLayeredWindow@40: - movl $0x123f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtUserGetLayeredWindowAttributes@16 -_NtUserGetLayeredWindowAttributes@16: - movl $0x1240, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetLayeredWindowAttributes@16 -_NtUserSetLayeredWindowAttributes@16: - movl $0x1241, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserUpdatePerUserSystemParameters@8 -_NtUserUpdatePerUserSystemParameters@8: - movl $0x1242, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserUserHandleGrantAccess@12 -_NtUserUserHandleGrantAccess@12: - movl $0x1243, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserValidateHandleSecure@4 -_NtUserValidateHandleSecure@4: - movl $0x1244, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserValidateRect@8 -_NtUserValidateRect@8: - movl $0x1245, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserValidateTimerCallback@4 -_NtUserValidateTimerCallback@4: - movl $0x1246, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserVkKeyScanEx@12 -_NtUserVkKeyScanEx@12: - movl $0x1247, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserWaitForInputIdle@12 -_NtUserWaitForInputIdle@12: - movl $0x1248, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserWaitForMsgAndEvent@4 -_NtUserWaitForMsgAndEvent@4: - movl $0x1249, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserWaitMessage@0 -_NtUserWaitMessage@0: - movl $0x124a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserWin32PoolAllocationStats@24 -_NtUserWin32PoolAllocationStats@24: - movl $0x124b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserWindowFromPoint@8 -_NtUserWindowFromPoint@8: - movl $0x124c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserYieldTask@0 -_NtUserYieldTask@0: - movl $0x124d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserRemoteConnect@12 -_NtUserRemoteConnect@12: - movl $0x124e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRemoteRedrawRectangle@16 -_NtUserRemoteRedrawRectangle@16: - movl $0x124f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRemoteRedrawScreen@0 -_NtUserRemoteRedrawScreen@0: - movl $0x1250, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserRemoteStopScreenUpdates@0 -_NtUserRemoteStopScreenUpdates@0: - movl $0x1251, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCtxDisplayIOCtl@12 -_NtUserCtxDisplayIOCtl@12: - movl $0x1252, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngAssociateSurface@12 -_NtGdiEngAssociateSurface@12: - movl $0x1253, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngCreateBitmap@24 -_NtGdiEngCreateBitmap@24: - movl $0x1254, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngCreateDeviceSurface@16 -_NtGdiEngCreateDeviceSurface@16: - movl $0x1255, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEngCreateDeviceBitmap@16 -_NtGdiEngCreateDeviceBitmap@16: - movl $0x1256, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEngCreatePalette@24 -_NtGdiEngCreatePalette@24: - movl $0x1257, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngComputeGlyphSet@12 -_NtGdiEngComputeGlyphSet@12: - movl $0x1258, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngCopyBits@24 -_NtGdiEngCopyBits@24: - movl $0x1259, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngDeletePalette@4 -_NtGdiEngDeletePalette@4: - movl $0x125a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngDeleteSurface@4 -_NtGdiEngDeleteSurface@4: - movl $0x125b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngEraseSurface@12 -_NtGdiEngEraseSurface@12: - movl $0x125c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngUnlockSurface@4 -_NtGdiEngUnlockSurface@4: - movl $0x125d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngLockSurface@4 -_NtGdiEngLockSurface@4: - movl $0x125e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngBitBlt@44 -_NtGdiEngBitBlt@44: - movl $0x125f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngStretchBlt@44 -_NtGdiEngStretchBlt@44: - movl $0x1260, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngPlgBlt@44 -_NtGdiEngPlgBlt@44: - movl $0x1261, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngMarkBandingSurface@4 -_NtGdiEngMarkBandingSurface@4: - movl $0x1262, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngStrokePath@32 -_NtGdiEngStrokePath@32: - movl $0x1263, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiEngFillPath@28 -_NtGdiEngFillPath@28: - movl $0x1264, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEngStrokeAndFillPath@40 -_NtGdiEngStrokeAndFillPath@40: - movl $0x1265, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngPaint@20 -_NtGdiEngPaint@20: - movl $0x1266, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEngLineTo@36 -_NtGdiEngLineTo@36: - movl $0x1267, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiEngAlphaBlend@28 -_NtGdiEngAlphaBlend@28: - movl $0x1268, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEngGradientFill@40 -_NtGdiEngGradientFill@40: - movl $0x1269, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngTransparentBlt@32 -_NtGdiEngTransparentBlt@32: - movl $0x126a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiEngTextOut@40 -_NtGdiEngTextOut@40: - movl $0x126b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngStretchBltROP@52 -_NtGdiEngStretchBltROP@52: - movl $0x126c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x34 - -.global _NtGdiXLATEOBJ_cGetPalette@16 -_NtGdiXLATEOBJ_cGetPalette@16: - movl $0x126d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiXLATEOBJ_iXlate@8 -_NtGdiXLATEOBJ_iXlate@8: - movl $0x126e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiXLATEOBJ_hGetColorTransform@4 -_NtGdiXLATEOBJ_hGetColorTransform@4: - movl $0x126f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCLIPOBJ_bEnum@12 -_NtGdiCLIPOBJ_bEnum@12: - movl $0x1270, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCLIPOBJ_cEnumStart@20 -_NtGdiCLIPOBJ_cEnumStart@20: - movl $0x1271, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiCLIPOBJ_ppoGetPath@4 -_NtGdiCLIPOBJ_ppoGetPath@4: - movl $0x1272, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngDeletePath@4 -_NtGdiEngDeletePath@4: - movl $0x1273, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngCreateClip@0 -_NtGdiEngCreateClip@0: - movl $0x1274, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiEngDeleteClip@4 -_NtGdiEngDeleteClip@4: - movl $0x1275, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_ulGetBrushColor@4 -_NtGdiBRUSHOBJ_ulGetBrushColor@4: - movl $0x1276, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_pvAllocRbrush@8 -_NtGdiBRUSHOBJ_pvAllocRbrush@8: - movl $0x1277, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiBRUSHOBJ_pvGetRbrush@4 -_NtGdiBRUSHOBJ_pvGetRbrush@4: - movl $0x1278, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_hGetColorTransform@4 -_NtGdiBRUSHOBJ_hGetColorTransform@4: - movl $0x1279, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiXFORMOBJ_bApplyXform@20 -_NtGdiXFORMOBJ_bApplyXform@20: - movl $0x127a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiXFORMOBJ_iGetXform@8 -_NtGdiXFORMOBJ_iGetXform@8: - movl $0x127b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_vGetInfo@12 -_NtGdiFONTOBJ_vGetInfo@12: - movl $0x127c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiFONTOBJ_pxoGetXform@4 -_NtGdiFONTOBJ_pxoGetXform@4: - movl $0x127d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_cGetGlyphs@20 -_NtGdiFONTOBJ_cGetGlyphs@20: - movl $0x127e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiFONTOBJ_pifi@4 -_NtGdiFONTOBJ_pifi@4: - movl $0x127f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_pfdg@4 -_NtGdiFONTOBJ_pfdg@4: - movl $0x1280, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_pQueryGlyphAttrs@8 -_NtGdiFONTOBJ_pQueryGlyphAttrs@8: - movl $0x1281, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_pvTrueTypeFontFile@8 -_NtGdiFONTOBJ_pvTrueTypeFontFile@8: - movl $0x1282, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_cGetAllGlyphHandles@8 -_NtGdiFONTOBJ_cGetAllGlyphHandles@8: - movl $0x1283, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSTROBJ_bEnum@12 -_NtGdiSTROBJ_bEnum@12: - movl $0x1284, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSTROBJ_bEnumPositionsOnly@12 -_NtGdiSTROBJ_bEnumPositionsOnly@12: - movl $0x1285, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSTROBJ_bGetAdvanceWidths@16 -_NtGdiSTROBJ_bGetAdvanceWidths@16: - movl $0x1286, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSTROBJ_vEnumStart@4 -_NtGdiSTROBJ_vEnumStart@4: - movl $0x1287, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSTROBJ_dwGetCodePage@4 -_NtGdiSTROBJ_dwGetCodePage@4: - movl $0x1288, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPATHOBJ_vGetBounds@8 -_NtGdiPATHOBJ_vGetBounds@8: - movl $0x1289, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiPATHOBJ_bEnum@8 -_NtGdiPATHOBJ_bEnum@8: - movl $0x128a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiPATHOBJ_vEnumStart@4 -_NtGdiPATHOBJ_vEnumStart@4: - movl $0x128b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPATHOBJ_vEnumStartClipLines@16 -_NtGdiPATHOBJ_vEnumStartClipLines@16: - movl $0x128c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPATHOBJ_bEnumClipLines@12 -_NtGdiPATHOBJ_bEnumClipLines@12: - movl $0x128d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDhpdev@4 -_NtGdiGetDhpdev@4: - movl $0x128e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngCheckAbort@4 -_NtGdiEngCheckAbort@4: - movl $0x128f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiHT_Get8BPPFormatPalette@16 -_NtGdiHT_Get8BPPFormatPalette@16: - movl $0x1290, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiHT_Get8BPPMaskPalette@24 -_NtGdiHT_Get8BPPMaskPalette@24: - movl $0x1291, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiUpdateTransform@4 -_NtGdiUpdateTransform@4: - movl $0x1292, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetPUMPDOBJ@16 -_NtGdiSetPUMPDOBJ@16: - movl $0x1293, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiBRUSHOBJ_DeleteRbrush@8 -_NtGdiBRUSHOBJ_DeleteRbrush@8: - movl $0x1294, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiUMPDEngFreeUserMem@4 -_NtGdiUMPDEngFreeUserMem@4: - movl $0x1295, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDrawStream@12 -_NtGdiDrawStream@12: - movl $0x1296, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiMakeObjectXferable@8 -_NtGdiMakeObjectXferable@8: - movl $0x1297, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiMakeObjectUnXferable@4 -_NtGdiMakeObjectUnXferable@4: - movl $0x1298, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.def b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.def deleted file mode 100644 index b590c508295..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.def +++ /dev/null @@ -1,674 +0,0 @@ -; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ -; -; ReactOS Operating System -; -; This file contains all win32k native api functions from win 2k3 sp 2 -; -LIBRARY w32kdll.dll - -EXPORTS -NtGdiAbortDoc@4 -NtGdiAbortPath@4 -NtGdiAddFontResourceW@24 -NtGdiAddRemoteFontToDC@16 -NtGdiAddFontMemResourceEx@20 -NtGdiRemoveMergeFont@8 -NtGdiAddRemoteMMInstanceToDC@12 -NtGdiAlphaBlend@48 -NtGdiAngleArc@24 -NtGdiAnyLinkedFonts@0 -NtGdiFontIsLinked@4 -NtGdiArcInternal@40 -NtGdiBeginPath@4 -NtGdiBitBlt@44 -NtGdiCancelDC@4 -NtGdiCheckBitmapBits@32 -NtGdiCloseFigure@4 -NtGdiClearBitmapAttributes@8 -NtGdiClearBrushAttributes@8 -NtGdiColorCorrectPalette@24 -NtGdiCombineRgn@16 -NtGdiCombineTransform@12 -NtGdiComputeXformCoefficients@4 -NtGdiConsoleTextOut@16 -NtGdiConvertMetafileRect@8 -NtGdiCreateBitmap@20 -NtGdiCreateClientObj@4 -NtGdiCreateColorSpace@4 -NtGdiCreateColorTransform@32 -NtGdiCreateCompatibleBitmap@12 -NtGdiCreateCompatibleDC@4 -NtGdiCreateDIBBrush@24 -NtGdiCreateDIBitmapInternal@44 -NtGdiCreateDIBSection@36 -NtGdiCreateEllipticRgn@16 -NtGdiCreateHalftonePalette@4 -NtGdiCreateHatchBrushInternal@12 -NtGdiCreateMetafileDC@4 -NtGdiCreatePaletteInternal@8 -NtGdiCreatePatternBrushInternal@12 -NtGdiCreatePen@16 -NtGdiCreateRectRgn@16 -NtGdiCreateRoundRectRgn@24 -NtGdiCreateServerMetaFile@24 -NtGdiCreateSolidBrush@8 -NtGdiD3dContextCreate@16 -NtGdiD3dContextDestroy@4 -NtGdiD3dContextDestroyAll@4 -NtGdiD3dValidateTextureStageState@4 -NtGdiD3dDrawPrimitives2@28 -NtGdiDdGetDriverState@4 -NtGdiDdAddAttachedSurface@12 -NtGdiDdAlphaBlt@12 -NtGdiDdAttachSurface@8 -NtGdiDdBeginMoCompFrame@8 -NtGdiDdBlt@12 -NtGdiDdCanCreateSurface@8 -NtGdiDdCanCreateD3DBuffer@8 -NtGdiDdColorControl@8 -NtGdiDdCreateDirectDrawObject@4 -NtGdiDdCreateSurface@32 -NtGdiDdCreateD3DBuffer@32 -NtGdiDdCreateMoComp@8 -NtGdiDdCreateSurfaceObject@24 -NtGdiDdDeleteDirectDrawObject@4 -NtGdiDdDeleteSurfaceObject@4 -NtGdiDdDestroyMoComp@8 -NtGdiDdDestroySurface@8 -NtGdiDdDestroyD3DBuffer@4 -NtGdiDdEndMoCompFrame@8 -NtGdiDdFlip@20 -NtGdiDdFlipToGDISurface@8 -NtGdiDdGetAvailDriverMemory@8 -NtGdiDdGetBltStatus@8 -NtGdiDdGetDC@8 -NtGdiDdGetDriverInfo@8 -NtGdiDdGetDxHandle@12 -NtGdiDdGetFlipStatus@8 -NtGdiDdGetInternalMoCompInfo@8 -NtGdiDdGetMoCompBuffInfo@8 -NtGdiDdGetMoCompGuids@8 -NtGdiDdGetMoCompFormats@8 -NtGdiDdGetScanLine@8 -NtGdiDdLock@12 -NtGdiDdLockD3D@8 -NtGdiDdQueryDirectDrawObject@44 -NtGdiDdQueryMoCompStatus@8 -NtGdiDdReenableDirectDrawObject@8 -NtGdiDdReleaseDC@4 -NtGdiDdRenderMoComp@8 -NtGdiDdResetVisrgn@8 -NtGdiDdSetColorKey@8 -NtGdiDdSetExclusiveMode@8 -NtGdiDdSetGammaRamp@12 -NtGdiDdCreateSurfaceEx@12 -NtGdiDdSetOverlayPosition@12 -NtGdiDdUnattachSurface@8 -NtGdiDdUnlock@8 -NtGdiDdUnlockD3D@8 -NtGdiDdUpdateOverlay@12 -NtGdiDdWaitForVerticalBlank@8 -NtGdiDvpCanCreateVideoPort@8 -NtGdiDvpColorControl@8 -NtGdiDvpCreateVideoPort@8 -NtGdiDvpDestroyVideoPort@8 -NtGdiDvpFlipVideoPort@16 -NtGdiDvpGetVideoPortBandwidth@8 -NtGdiDvpGetVideoPortField@8 -NtGdiDvpGetVideoPortFlipStatus@8 -NtGdiDvpGetVideoPortInputFormats@8 -NtGdiDvpGetVideoPortLine@8 -NtGdiDvpGetVideoPortOutputFormats@8 -NtGdiDvpGetVideoPortConnectInfo@8 -NtGdiDvpGetVideoSignalStatus@8 -NtGdiDvpUpdateVideoPort@16 -NtGdiDvpWaitForVideoPortSync@8 -NtGdiDvpAcquireNotification@12 -NtGdiDvpReleaseNotification@8 -NtGdiDxgGenericThunk@24 -NtGdiDeleteClientObj@4 -NtGdiDeleteColorSpace@4 -NtGdiDeleteColorTransform@8 -NtGdiDeleteObjectApp@4 -NtGdiDescribePixelFormat@16 -NtGdiGetPerBandInfo@8 -NtGdiDoBanding@16 -NtGdiDoPalette@24 -NtGdiDrawEscape@16 -NtGdiEllipse@20 -NtGdiEnableEudc@4 -NtGdiEndDoc@4 -NtGdiEndPage@4 -NtGdiEndPath@4 -NtGdiEnumFontChunk@20 -NtGdiEnumFontClose@4 -NtGdiEnumFontOpen@28 -NtGdiEnumObjects@16 -NtGdiEqualRgn@8 -NtGdiEudcLoadUnloadLink@28 -NtGdiExcludeClipRect@20 -NtGdiExtCreatePen@44 -NtGdiExtCreateRegion@12 -NtGdiExtEscape@32 -NtGdiExtFloodFill@20 -NtGdiExtGetObjectW@12 -NtGdiExtSelectClipRgn@12 -NtGdiExtTextOutW@36 -NtGdiFillPath@4 -NtGdiFillRgn@12 -NtGdiFlattenPath@4 -NtGdiFlush@0 -NtGdiForceUFIMapping@8 -NtGdiFrameRgn@20 -NtGdiFullscreenControl@20 -NtGdiGetAndSetDCDword@16 -NtGdiGetAppClipBox@8 -NtGdiGetBitmapBits@12 -NtGdiGetBitmapDimension@8 -NtGdiGetBoundsRect@12 -NtGdiGetCharABCWidthsW@24 -NtGdiGetCharacterPlacementW@24 -NtGdiGetCharSet@4 -NtGdiGetCharWidthW@24 -NtGdiGetCharWidthInfo@8 -NtGdiGetColorAdjustment@8 -NtGdiGetColorSpaceforBitmap@4 -NtGdiGetDCDword@12 -NtGdiGetDCforBitmap@4 -NtGdiGetDCObject@8 -NtGdiGetDCPoint@12 -NtGdiGetDeviceCaps@8 -NtGdiGetDeviceGammaRamp@8 -NtGdiGetDeviceCapsAll@8 -NtGdiGetDIBitsInternal@36 -NtGdiGetETM@8 -NtGdiGetEudcTimeStampEx@12 -NtGdiGetFontData@20 -NtGdiGetFontResourceInfoInternalW@28 -NtGdiGetGlyphIndicesW@20 -NtGdiGetGlyphIndicesWInternal@24 -NtGdiGetGlyphOutline@32 -NtGdiGetKerningPairs@12 -NtGdiGetLinkedUFIs@12 -NtGdiGetMiterLimit@8 -NtGdiGetMonitorID@12 -NtGdiGetNearestColor@8 -NtGdiGetNearestPaletteIndex@8 -NtGdiGetObjectBitmapHandle@8 -NtGdiGetOutlineTextMetricsInternalW@16 -NtGdiGetPath@16 -NtGdiGetPixel@12 -NtGdiGetRandomRgn@12 -NtGdiGetRasterizerCaps@8 -NtGdiGetRealizationInfo@12 -NtGdiGetRegionData@12 -NtGdiGetRgnBox@8 -NtGdiGetServerMetaFileBits@28 -NtGdiGetSpoolMessage@16 -NtGdiGetStats@20 -NtGdiGetStockObject@4 -NtGdiGetStringBitmapW@20 -NtGdiGetSystemPaletteUse@4 -NtGdiGetTextCharsetInfo@12 -NtGdiGetTextExtent@20 -NtGdiGetTextExtentExW@32 -NtGdiGetTextFaceW@16 -NtGdiGetTextMetricsW@12 -NtGdiGetTransform@12 -NtGdiGetUFI@24 -NtGdiGetEmbUFI@28 -NtGdiGetUFIPathname@40 -NtGdiGetEmbedFonts@0 -NtGdiChangeGhostFont@8 -NtGdiAddEmbFontToDC@8 -NtGdiGetFontUnicodeRanges@8 -NtGdiGetWidthTable@28 -NtGdiGradientFill@24 -NtGdiHfontCreate@20 -NtGdiIcmBrushInfo@32 -NtGdiInit@0 -NtGdiInitSpool@0 -NtGdiIntersectClipRect@20 -NtGdiInvertRgn@8 -NtGdiLineTo@12 -NtGdiMakeFontDir@20 -NtGdiMakeInfoDC@8 -NtGdiMaskBlt@52 -NtGdiModifyWorldTransform@12 -NtGdiMonoBitmap@4 -NtGdiMoveTo@16 -NtGdiOffsetClipRgn@12 -NtGdiOffsetRgn@12 -NtGdiOpenDCW@28 -NtGdiPatBlt@24 -NtGdiPolyPatBlt@20 -NtGdiPathToRegion@4 -NtGdiPlgBlt@44 -NtGdiPolyDraw@16 -NtGdiPolyPolyDraw@20 -NtGdiPolyTextOutW@16 -NtGdiPtInRegion@12 -NtGdiPtVisible@12 -NtGdiQueryFonts@12 -NtGdiQueryFontAssocInfo@4 -NtGdiRectangle@20 -NtGdiRectInRegion@8 -NtGdiRectVisible@8 -NtGdiRemoveFontResourceW@24 -NtGdiRemoveFontMemResourceEx@4 -NtGdiResetDC@20 -NtGdiResizePalette@8 -NtGdiRestoreDC@8 -NtGdiRoundRect@28 -NtGdiSaveDC@4 -NtGdiScaleViewportExtEx@24 -NtGdiScaleWindowExtEx@24 -NtGdiSelectBitmap@8 -NtGdiSelectBrush@8 -NtGdiSelectClipPath@8 -NtGdiSelectFont@8 -NtGdiSelectPen@8 -NtGdiSetBitmapAttributes@8 -NtGdiSetBitmapBits@12 -NtGdiSetBitmapDimension@16 -NtGdiSetBoundsRect@12 -NtGdiSetBrushAttributes@8 -NtGdiSetBrushOrg@16 -NtGdiSetColorAdjustment@8 -NtGdiSetColorSpace@8 -NtGdiSetDeviceGammaRamp@8 -NtGdiSetDIBitsToDeviceInternal@64 -NtGdiSetFontEnumeration@4 -NtGdiSetFontXform@12 -NtGdiSetIcmMode@12 -NtGdiSetLinkedUFIs@12 -NtGdiSetMagicColors@12 -NtGdiSetMetaRgn@4 -NtGdiSetMiterLimit@12 -NtGdiGetDeviceWidth@4 -NtGdiMirrorWindowOrg@4 -NtGdiSetLayout@12 -NtGdiSetPixel@16 -NtGdiSetPixelFormat@8 -NtGdiSetRectRgn@20 -NtGdiSetSystemPaletteUse@8 -NtGdiSetTextJustification@12 -NtGdiSetupPublicCFONT@12 -NtGdiSetVirtualResolution@20 -NtGdiSetSizeDevice@12 -NtGdiStartDoc@16 -NtGdiStartPage@4 -NtGdiStretchBlt@48 -NtGdiStretchDIBitsInternal@64 -NtGdiStrokeAndFillPath@4 -NtGdiStrokePath@4 -NtGdiSwapBuffers@4 -NtGdiTransformPoints@20 -NtGdiTransparentBlt@44 -NtGdiUnloadPrinterDriver@8 -NtGdiUnmapMemFont@4 -NtGdiUnrealizeObject@4 -NtGdiUpdateColors@4 -NtGdiWidenPath@4 -NtUserActivateKeyboardLayout@8 -NtUserAlterWindowStyle@12 -NtUserAssociateInputContext@12 -NtUserAttachThreadInput@12 -NtUserBeginPaint@8 -NtUserBitBltSysBmp@32 -NtUserBlockInput@4 -NtUserBuildHimcList@16 -NtUserBuildHwndList@28 -NtUserBuildNameList@16 -NtUserBuildPropList@16 -NtUserCallHwnd@8 -NtUserCallHwndLock@8 -NtUserCallHwndOpt@8 -NtUserCallHwndParam@12 -NtUserCallHwndParamLock@12 -NtUserCallMsgFilter@8 -NtUserCallNextHookEx@16 -NtUserCallNoParam@4 -NtUserCallOneParam@8 -NtUserCallTwoParam@12 -NtUserChangeClipboardChain@8 -NtUserChangeDisplaySettings@16 -NtUserCheckImeHotKey@8 -NtUserCheckMenuItem@12 -NtUserChildWindowFromPointEx@16 -NtUserClipCursor@4 -NtUserCloseClipboard@0 -NtUserCloseDesktop@4 -NtUserCloseWindowStation@4 -NtUserConsoleControl@12 -NtUserConvertMemHandle@8 -NtUserCopyAcceleratorTable@12 -NtUserCountClipboardFormats@0 -NtUserCreateAcceleratorTable@8 -NtUserCreateCaret@16 -NtUserCreateDesktop@20 -NtUserCreateInputContext@4 -NtUserCreateLocalMemHandle@16 -NtUserCreateWindowEx@60 -NtUserCreateWindowStation@28 -NtUserDdeGetQualityOfService@12 -NtUserDdeInitialize@20 -NtUserDdeSetQualityOfService@12 -NtUserDeferWindowPos@32 -NtUserDefSetText@8 -NtUserDeleteMenu@12 -NtUserDestroyAcceleratorTable@4 -NtUserDestroyCursor@8 -NtUserDestroyInputContext@4 -NtUserDestroyMenu@4 -NtUserDestroyWindow@4 -NtUserDisableThreadIme@4 -NtUserDispatchMessage@4 -NtUserDragDetect@12 -NtUserDragObject@20 -NtUserDrawAnimatedRects@16 -NtUserDrawCaption@16 -NtUserDrawCaptionTemp@28 -NtUserDrawIconEx@44 -NtUserDrawMenuBarTemp@20 -NtUserEmptyClipboard@0 -NtUserEnableMenuItem@12 -NtUserEnableScrollBar@12 -NtUserEndDeferWindowPosEx@8 -NtUserEndMenu@0 -NtUserEndPaint@8 -NtUserEnumDisplayDevices@16 -NtUserEnumDisplayMonitors@16 -NtUserEnumDisplaySettings@16 -NtUserEvent@4 -NtUserExcludeUpdateRgn@8 -NtUserFillWindow@16 -NtUserFindExistingCursorIcon@12 -NtUserFindWindowEx@20 -NtUserFlashWindowEx@4 -NtUserGetAltTabInfo@24 -NtUserGetAncestor@8 -NtUserGetAppImeLevel@4 -NtUserGetAsyncKeyState@4 -NtUserGetAtomName@8 -NtUserGetCaretBlinkTime@0 -NtUserGetCaretPos@4 -NtUserGetClassInfoEx@20 -NtUserGetClassName@12 -NtUserGetClipboardData@8 -NtUserGetClipboardFormatName@12 -NtUserGetClipboardOwner@0 -NtUserGetClipboardSequenceNumber@0 -NtUserGetClipboardViewer@0 -NtUserGetClipCursor@4 -NtUserGetComboBoxInfo@8 -NtUserGetControlBrush@12 -NtUserGetControlColor@16 -NtUserGetCPD@12 -NtUserGetCursorFrameInfo@16 -NtUserGetCursorInfo@4 -NtUserGetDC@4 -NtUserGetDCEx@12 -NtUserGetDoubleClickTime@0 -NtUserGetForegroundWindow@0 -NtUserGetGuiResources@8 -NtUserGetGUIThreadInfo@8 -NtUserGetIconInfo@24 -NtUserGetIconSize@16 -NtUserGetImeHotKey@16 -NtUserGetImeInfoEx@8 -NtUserGetInternalWindowPos@12 -NtUserGetKeyboardLayoutList@8 -NtUserGetKeyboardLayoutName@4 -NtUserGetKeyboardState@4 -NtUserGetKeyNameText@12 -NtUserGetKeyState@4 -NtUserGetListBoxInfo@4 -NtUserGetMenuBarInfo@16 -NtUserGetMenuIndex@8 -NtUserGetMenuItemRect@16 -NtUserGetMessage@16 -NtUserGetMouseMovePointsEx@20 -NtUserGetObjectInformation@20 -NtUserGetOpenClipboardWindow@0 -NtUserGetPriorityClipboardFormat@8 -NtUserGetProcessWindowStation@0 -NtUserGetRawInputBuffer@12 -NtUserGetRawInputData@20 -NtUserGetRawInputDeviceInfo@16 -NtUserGetRawInputDeviceList@12 -NtUserGetRegisteredRawInputDevices@12 -NtUserGetScrollBarInfo@12 -NtUserGetSystemMenu@8 -NtUserGetThreadDesktop@8 -NtUserGetThreadState@4 -NtUserGetTitleBarInfo@8 -NtUserGetUpdateRect@12 -NtUserGetUpdateRgn@12 -NtUserGetWindowDC@4 -NtUserGetWindowPlacement@8 -NtUserGetWOWClass@8 -NtUserHardErrorControl@12 -NtUserHideCaret@4 -NtUserHiliteMenuItem@16 -NtUserImpersonateDdeClientWindow@8 -NtUserInitialize@12 -NtUserInitializeClientPfnArrays@16 -NtUserInitTask@48 -NtUserInternalGetWindowText@12 -NtUserInvalidateRect@12 -NtUserInvalidateRgn@12 -NtUserIsClipboardFormatAvailable@4 -NtUserKillTimer@8 -NtUserLoadKeyboardLayoutEx@28 -NtUserLockWindowStation@4 -NtUserLockWindowUpdate@4 -NtUserLockWorkStation@0 -NtUserMapVirtualKeyEx@16 -NtUserMenuItemFromPoint@16 -NtUserMessageCall@28 -NtUserMinMaximize@12 -NtUserMNDragLeave@0 -NtUserMNDragOver@8 -NtUserModifyUserStartupInfoFlags@8 -NtUserMoveWindow@24 -NtUserNotifyIMEStatus@12 -NtUserNotifyProcessCreate@16 -NtUserNotifyWinEvent@16 -NtUserOpenClipboard@8 -NtUserOpenDesktop@12 -NtUserOpenInputDesktop@12 -NtUserOpenWindowStation@8 -NtUserPaintDesktop@4 -NtUserPeekMessage@20 -NtUserPostMessage@16 -NtUserPostThreadMessage@16 -NtUserPrintWindow@12 -NtUserProcessConnect@12 -NtUserQueryInformationThread@16 -NtUserQueryInputContext@8 -NtUserQuerySendMessage@4 -NtUserQueryWindow@8 -NtUserRealChildWindowFromPoint@12 -NtUserRealInternalGetMessage@24 -NtUserRealWaitMessageEx@8 -NtUserRedrawWindow@16 -NtUserRegisterClassExWOW@28 -NtUserRegisterUserApiHook@16 -NtUserRegisterHotKey@16 -NtUserRegisterRawInputDevices@12 -NtUserRegisterTasklist@4 -NtUserRegisterWindowMessage@4 -NtUserRemoveMenu@12 -NtUserRemoveProp@8 -NtUserResolveDesktop@16 -NtUserResolveDesktopForWOW@4 -NtUserSBGetParms@16 -NtUserScrollDC@28 -NtUserScrollWindowEx@32 -NtUserSelectPalette@12 -NtUserSendInput@12 -NtUserSetActiveWindow@4 -NtUserSetAppImeLevel@8 -NtUserSetCapture@4 -NtUserSetClassLong@16 -NtUserSetClassWord@12 -NtUserSetClipboardData@12 -NtUserSetClipboardViewer@4 -NtUserSetConsoleReserveKeys@8 -NtUserSetCursor@4 -NtUserSetCursorContents@8 -NtUserSetCursorIconData@16 -NtUserSetFocus@4 -NtUserSetImeHotKey@20 -NtUserSetImeInfoEx@4 -NtUserSetImeOwnerWindow@8 -NtUserSetInformationProcess@16 -NtUserSetInformationThread@16 -NtUserSetInternalWindowPos@16 -NtUserSetKeyboardState@4 -NtUserSetLogonNotifyWindow@4 -NtUserSetMenu@12 -NtUserSetMenuContextHelpId@8 -NtUserSetMenuDefaultItem@12 -NtUserSetMenuFlagRtoL@4 -NtUserSetObjectInformation@16 -NtUserSetParent@8 -NtUserSetProcessWindowStation@4 -NtUserSetProp@12 -NtUserSetScrollInfo@16 -NtUserSetShellWindowEx@8 -NtUserSetSysColors@16 -NtUserSetSystemCursor@8 -NtUserSetSystemMenu@8 -NtUserSetSystemTimer@16 -NtUserSetThreadDesktop@4 -NtUserSetThreadLayoutHandles@8 -NtUserSetThreadState@8 -NtUserSetTimer@16 -NtUserSetWindowFNID@8 -NtUserSetWindowLong@16 -NtUserSetWindowPlacement@8 -NtUserSetWindowPos@28 -NtUserSetWindowRgn@12 -NtUserSetWindowsHookAW@12 -NtUserSetWindowsHookEx@24 -NtUserSetWindowStationUser@16 -NtUserSetWindowWord@12 -NtUserSetWinEventHook@32 -NtUserShowCaret@4 -NtUserShowScrollBar@12 -NtUserShowWindow@8 -NtUserShowWindowAsync@8 -NtUserSoundSentry@0 -NtUserSwitchDesktop@4 -NtUserSystemParametersInfo@16 -NtUserTestForInteractiveUser@4 -NtUserThunkedMenuInfo@8 -NtUserThunkedMenuItemInfo@24 -NtUserToUnicodeEx@28 -NtUserTrackMouseEvent@4 -NtUserTrackPopupMenuEx@24 -NtUserCalcMenuBar@20 -NtUserPaintMenuBar@24 -NtUserTranslateAccelerator@12 -NtUserTranslateMessage@8 -NtUserUnhookWindowsHookEx@4 -NtUserUnhookWinEvent@4 -NtUserUnloadKeyboardLayout@4 -NtUserUnlockWindowStation@4 -NtUserUnregisterClass@12 -NtUserUnregisterUserApiHook@0 -NtUserUnregisterHotKey@8 -NtUserUpdateInputContext@12 -NtUserUpdateInstance@12 -NtUserUpdateLayeredWindow@40 -NtUserGetLayeredWindowAttributes@16 -NtUserSetLayeredWindowAttributes@16 -NtUserUpdatePerUserSystemParameters@8 -NtUserUserHandleGrantAccess@12 -NtUserValidateHandleSecure@4 -NtUserValidateRect@8 -NtUserValidateTimerCallback@4 -NtUserVkKeyScanEx@12 -NtUserWaitForInputIdle@12 -NtUserWaitForMsgAndEvent@4 -NtUserWaitMessage@0 -NtUserWin32PoolAllocationStats@24 -NtUserWindowFromPoint@8 -NtUserYieldTask@0 -NtUserRemoteConnect@12 -NtUserRemoteRedrawRectangle@16 -NtUserRemoteRedrawScreen@0 -NtUserRemoteStopScreenUpdates@0 -NtUserCtxDisplayIOCtl@12 -NtGdiEngAssociateSurface@12 -NtGdiEngCreateBitmap@24 -NtGdiEngCreateDeviceSurface@16 -NtGdiEngCreateDeviceBitmap@16 -NtGdiEngCreatePalette@24 -NtGdiEngComputeGlyphSet@12 -NtGdiEngCopyBits@24 -NtGdiEngDeletePalette@4 -NtGdiEngDeleteSurface@4 -NtGdiEngEraseSurface@12 -NtGdiEngUnlockSurface@4 -NtGdiEngLockSurface@4 -NtGdiEngBitBlt@44 -NtGdiEngStretchBlt@44 -NtGdiEngPlgBlt@44 -NtGdiEngMarkBandingSurface@4 -NtGdiEngStrokePath@32 -NtGdiEngFillPath@28 -NtGdiEngStrokeAndFillPath@40 -NtGdiEngPaint@20 -NtGdiEngLineTo@36 -NtGdiEngAlphaBlend@28 -NtGdiEngGradientFill@40 -NtGdiEngTransparentBlt@32 -NtGdiEngTextOut@40 -NtGdiEngStretchBltROP@52 -NtGdiXLATEOBJ_cGetPalette@16 -NtGdiXLATEOBJ_iXlate@8 -NtGdiXLATEOBJ_hGetColorTransform@4 -NtGdiCLIPOBJ_bEnum@12 -NtGdiCLIPOBJ_cEnumStart@20 -NtGdiCLIPOBJ_ppoGetPath@4 -NtGdiEngDeletePath@4 -NtGdiEngCreateClip@0 -NtGdiEngDeleteClip@4 -NtGdiBRUSHOBJ_ulGetBrushColor@4 -NtGdiBRUSHOBJ_pvAllocRbrush@8 -NtGdiBRUSHOBJ_pvGetRbrush@4 -NtGdiBRUSHOBJ_hGetColorTransform@4 -NtGdiXFORMOBJ_bApplyXform@20 -NtGdiXFORMOBJ_iGetXform@8 -NtGdiFONTOBJ_vGetInfo@12 -NtGdiFONTOBJ_pxoGetXform@4 -NtGdiFONTOBJ_cGetGlyphs@20 -NtGdiFONTOBJ_pifi@4 -NtGdiFONTOBJ_pfdg@4 -NtGdiFONTOBJ_pQueryGlyphAttrs@8 -NtGdiFONTOBJ_pvTrueTypeFontFile@8 -NtGdiFONTOBJ_cGetAllGlyphHandles@8 -NtGdiSTROBJ_bEnum@12 -NtGdiSTROBJ_bEnumPositionsOnly@12 -NtGdiSTROBJ_bGetAdvanceWidths@16 -NtGdiSTROBJ_vEnumStart@4 -NtGdiSTROBJ_dwGetCodePage@4 -NtGdiPATHOBJ_vGetBounds@8 -NtGdiPATHOBJ_bEnum@8 -NtGdiPATHOBJ_vEnumStart@4 -NtGdiPATHOBJ_vEnumStartClipLines@16 -NtGdiPATHOBJ_bEnumClipLines@12 -NtGdiGetDhpdev@4 -NtGdiEngCheckAbort@4 -NtGdiHT_Get8BPPFormatPalette@16 -NtGdiHT_Get8BPPMaskPalette@24 -NtGdiUpdateTransform@4 -NtGdiSetPUMPDOBJ@16 -NtGdiBRUSHOBJ_DeleteRbrush@8 -NtGdiUMPDEngFreeUserMem@4 -NtGdiDrawStream@12 -NtGdiMakeObjectXferable@8 -NtGdiMakeObjectUnXferable@4 diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild deleted file mode 100644 index 2c08116d2ec..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - 0x0502 - w32kdll_2k3sp2.S - main.c - diff --git a/rostests/apitests/w32kdll/w32kdll_2ksp4/main.c b/rostests/apitests/w32kdll/w32kdll_2ksp4/main.c deleted file mode 100644 index 13a149cc27e..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_2ksp4/main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include - -#ifdef BUILD_DLL - #define DLL_EXPORT __declspec(dllexport) -#else - #define DLL_EXPORT -#endif - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - // attach to process - // return FALSE to fail DLL load - break; - - case DLL_PROCESS_DETACH: - // detach from process - break; - - case DLL_THREAD_ATTACH: - // attach to thread - break; - - case DLL_THREAD_DETACH: - // detach from thread - break; - } - return TRUE; // succesful -} diff --git a/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.S b/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.S deleted file mode 100644 index 974ff626e5b..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.S +++ /dev/null @@ -1,4483 +0,0 @@ -/* FILE: System Call Stubs for Native API for Win 2000 SP4 - * COPYRIGHT: See COPYING in the top level directory - */ - -.global _NtGdiAbortDoc@4 -_NtGdiAbortDoc@4: - movl $0x1000, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiAbortPath@4 -_NtGdiAbortPath@4: - movl $0x1001, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiAddFontResourceW@24 -_NtGdiAddFontResourceW@24: - movl $0x1002, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiAddRemoteFontToDC@16 -_NtGdiAddRemoteFontToDC@16: - movl $0x1003, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiAddFontMemResourceEx@20 -_NtGdiAddFontMemResourceEx@20: - movl $0x1004, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiRemoveMergeFont@8 -_NtGdiRemoveMergeFont@8: - movl $0x1005, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiAddRemoteMMInstanceToDC@12 -_NtGdiAddRemoteMMInstanceToDC@12: - movl $0x1006, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiAlphaBlend@48 -_NtGdiAlphaBlend@48: - movl $0x1007, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x30 - -.global _NtGdiAngleArc@24 -_NtGdiAngleArc@24: - movl $0x1008, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiAnyLinkedFonts@0 -_NtGdiAnyLinkedFonts@0: - movl $0x1009, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtGdiFontIsLinked@4 -_NtGdiFontIsLinked@4: - movl $0x100a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiArcInternal@40 -_NtGdiArcInternal@40: - movl $0x100b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x28 - -.global _NtGdiBeginPath@4 -_NtGdiBeginPath@4: - movl $0x100c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiBitBlt@44 -_NtGdiBitBlt@44: - movl $0x100d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiCancelDC@4 -_NtGdiCancelDC@4: - movl $0x100e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiCheckBitmapBits@32 -_NtGdiCheckBitmapBits@32: - movl $0x100f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiCloseFigure@4 -_NtGdiCloseFigure@4: - movl $0x1010, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiColorCorrectPalette@24 -_NtGdiColorCorrectPalette@24: - movl $0x1011, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiCombineRgn@16 -_NtGdiCombineRgn@16: - movl $0x1012, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiCombineTransform@12 -_NtGdiCombineTransform@12: - movl $0x1013, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiComputeXformCoefficients@4 -_NtGdiComputeXformCoefficients@4: - movl $0x1014, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiConsoleTextOut@16 -_NtGdiConsoleTextOut@16: - movl $0x1015, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiConvertMetafileRect@8 -_NtGdiConvertMetafileRect@8: - movl $0x1016, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiCreateBitmap@20 -_NtGdiCreateBitmap@20: - movl $0x1017, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiCreateClientObj@4 -_NtGdiCreateClientObj@4: - movl $0x1018, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiCreateColorSpace@4 -_NtGdiCreateColorSpace@4: - movl $0x1019, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiCreateColorTransform@32 -_NtGdiCreateColorTransform@32: - movl $0x101a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiCreateCompatibleBitmap@12 -_NtGdiCreateCompatibleBitmap@12: - movl $0x101b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiCreateCompatibleDC@4 -_NtGdiCreateCompatibleDC@4: - movl $0x101c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiCreateDIBBrush@24 -_NtGdiCreateDIBBrush@24: - movl $0x101d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiCreateDIBitmapInternal@44 -_NtGdiCreateDIBitmapInternal@44: - movl $0x101e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiCreateDIBSection@36 -_NtGdiCreateDIBSection@36: - movl $0x101f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x24 - -.global _NtGdiCreateEllipticRgn@16 -_NtGdiCreateEllipticRgn@16: - movl $0x1020, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiCreateHalftonePalette@4 -_NtGdiCreateHalftonePalette@4: - movl $0x1021, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiCreateHatchBrushInternal@12 -_NtGdiCreateHatchBrushInternal@12: - movl $0x1022, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiCreateMetafileDC@4 -_NtGdiCreateMetafileDC@4: - movl $0x1023, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiCreatePaletteInternal@8 -_NtGdiCreatePaletteInternal@8: - movl $0x1024, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiCreatePatternBrushInternal@12 -_NtGdiCreatePatternBrushInternal@12: - movl $0x1025, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiCreatePen@16 -_NtGdiCreatePen@16: - movl $0x1026, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiCreateRectRgn@16 -_NtGdiCreateRectRgn@16: - movl $0x1027, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiCreateRoundRectRgn@24 -_NtGdiCreateRoundRectRgn@24: - movl $0x1028, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiCreateServerMetaFile@24 -_NtGdiCreateServerMetaFile@24: - movl $0x1029, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiCreateSolidBrush@8 -_NtGdiCreateSolidBrush@8: - movl $0x102a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiD3dContextCreate@16 -_NtGdiD3dContextCreate@16: - movl $0x102b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiD3dContextDestroy@4 -_NtGdiD3dContextDestroy@4: - movl $0x102c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiD3dContextDestroyAll@4 -_NtGdiD3dContextDestroyAll@4: - movl $0x102d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiD3dValidateTextureStageState@4 -_NtGdiD3dValidateTextureStageState@4: - movl $0x102e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiD3dDrawPrimitives2@28 -_NtGdiD3dDrawPrimitives2@28: - movl $0x102f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiDdGetDriverState@4 -_NtGdiDdGetDriverState@4: - movl $0x1030, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDdAddAttachedSurface@12 -_NtGdiDdAddAttachedSurface@12: - movl $0x1031, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdAlphaBlt@12 -_NtGdiDdAlphaBlt@12: - movl $0x1032, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdAttachSurface@8 -_NtGdiDdAttachSurface@8: - movl $0x1033, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdBeginMoCompFrame@8 -_NtGdiDdBeginMoCompFrame@8: - movl $0x1034, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdBlt@12 -_NtGdiDdBlt@12: - movl $0x1035, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdCanCreateSurface@8 -_NtGdiDdCanCreateSurface@8: - movl $0x1036, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdCanCreateD3DBuffer@8 -_NtGdiDdCanCreateD3DBuffer@8: - movl $0x1037, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdColorControl@8 -_NtGdiDdColorControl@8: - movl $0x1038, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdCreateDirectDrawObject@4 -_NtGdiDdCreateDirectDrawObject@4: - movl $0x1039, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDdCreateSurface@32 -_NtGdiDdCreateSurface@32: - movl $0x103a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiDdCreateD3DBuffer@32 -_NtGdiDdCreateD3DBuffer@32: - movl $0x103b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiDdCreateMoComp@8 -_NtGdiDdCreateMoComp@8: - movl $0x103c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdCreateSurfaceObject@24 -_NtGdiDdCreateSurfaceObject@24: - movl $0x103d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiDdDeleteDirectDrawObject@4 -_NtGdiDdDeleteDirectDrawObject@4: - movl $0x103e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDdDeleteSurfaceObject@4 -_NtGdiDdDeleteSurfaceObject@4: - movl $0x103f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDdDestroyMoComp@8 -_NtGdiDdDestroyMoComp@8: - movl $0x1040, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdDestroySurface@8 -_NtGdiDdDestroySurface@8: - movl $0x1041, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdDestroyD3DBuffer@4 -_NtGdiDdDestroyD3DBuffer@4: - movl $0x1042, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDdEndMoCompFrame@8 -_NtGdiDdEndMoCompFrame@8: - movl $0x1043, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdFlip@20 -_NtGdiDdFlip@20: - movl $0x1044, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiDdFlipToGDISurface@8 -_NtGdiDdFlipToGDISurface@8: - movl $0x1045, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetAvailDriverMemory@8 -_NtGdiDdGetAvailDriverMemory@8: - movl $0x1046, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetBltStatus@8 -_NtGdiDdGetBltStatus@8: - movl $0x1047, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetDC@8 -_NtGdiDdGetDC@8: - movl $0x1048, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetDriverInfo@8 -_NtGdiDdGetDriverInfo@8: - movl $0x1049, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetDxHandle@12 -_NtGdiDdGetDxHandle@12: - movl $0x104a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdGetFlipStatus@8 -_NtGdiDdGetFlipStatus@8: - movl $0x104b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetInternalMoCompInfo@8 -_NtGdiDdGetInternalMoCompInfo@8: - movl $0x104c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetMoCompBuffInfo@8 -_NtGdiDdGetMoCompBuffInfo@8: - movl $0x104d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetMoCompGuids@8 -_NtGdiDdGetMoCompGuids@8: - movl $0x104e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetMoCompFormats@8 -_NtGdiDdGetMoCompFormats@8: - movl $0x104f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdGetScanLine@8 -_NtGdiDdGetScanLine@8: - movl $0x1050, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdLock@12 -_NtGdiDdLock@12: - movl $0x1051, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdLockD3D@8 -_NtGdiDdLockD3D@8: - movl $0x1052, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdQueryDirectDrawObject@44 -_NtGdiDdQueryDirectDrawObject@44: - movl $0x1053, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiDdQueryMoCompStatus@8 -_NtGdiDdQueryMoCompStatus@8: - movl $0x1054, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdReenableDirectDrawObject@8 -_NtGdiDdReenableDirectDrawObject@8: - movl $0x1055, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdReleaseDC@4 -_NtGdiDdReleaseDC@4: - movl $0x1056, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDdRenderMoComp@8 -_NtGdiDdRenderMoComp@8: - movl $0x1057, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdResetVisrgn@8 -_NtGdiDdResetVisrgn@8: - movl $0x1058, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdSetColorKey@8 -_NtGdiDdSetColorKey@8: - movl $0x1059, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdSetExclusiveMode@8 -_NtGdiDdSetExclusiveMode@8: - movl $0x105a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdSetGammaRamp@12 -_NtGdiDdSetGammaRamp@12: - movl $0x105b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdCreateSurfaceEx@12 -_NtGdiDdCreateSurfaceEx@12: - movl $0x105c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdSetOverlayPosition@12 -_NtGdiDdSetOverlayPosition@12: - movl $0x105d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdUnattachSurface@8 -_NtGdiDdUnattachSurface@8: - movl $0x105e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdUnlock@8 -_NtGdiDdUnlock@8: - movl $0x105f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdUnlockD3D@8 -_NtGdiDdUnlockD3D@8: - movl $0x1060, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDdUpdateOverlay@12 -_NtGdiDdUpdateOverlay@12: - movl $0x1061, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiDdWaitForVerticalBlank@8 -_NtGdiDdWaitForVerticalBlank@8: - movl $0x1062, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpCanCreateVideoPort@8 -_NtGdiDvpCanCreateVideoPort@8: - movl $0x1063, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpColorControl@8 -_NtGdiDvpColorControl@8: - movl $0x1064, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpCreateVideoPort@8 -_NtGdiDvpCreateVideoPort@8: - movl $0x1065, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpDestroyVideoPort@8 -_NtGdiDvpDestroyVideoPort@8: - movl $0x1066, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpFlipVideoPort@16 -_NtGdiDvpFlipVideoPort@16: - movl $0x1067, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiDvpGetVideoPortBandwidth@8 -_NtGdiDvpGetVideoPortBandwidth@8: - movl $0x1068, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpGetVideoPortField@8 -_NtGdiDvpGetVideoPortField@8: - movl $0x1069, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpGetVideoPortFlipStatus@8 -_NtGdiDvpGetVideoPortFlipStatus@8: - movl $0x106a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpGetVideoPortInputFormats@8 -_NtGdiDvpGetVideoPortInputFormats@8: - movl $0x106b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpGetVideoPortLine@8 -_NtGdiDvpGetVideoPortLine@8: - movl $0x106c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpGetVideoPortOutputFormats@8 -_NtGdiDvpGetVideoPortOutputFormats@8: - movl $0x106d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpGetVideoPortConnectInfo@8 -_NtGdiDvpGetVideoPortConnectInfo@8: - movl $0x106e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpGetVideoSignalStatus@8 -_NtGdiDvpGetVideoSignalStatus@8: - movl $0x106f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDvpUpdateVideoPort@16 -_NtGdiDvpUpdateVideoPort@16: - movl $0x1070, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiDvpWaitForVideoPortSync@8 -_NtGdiDvpWaitForVideoPortSync@8: - movl $0x1071, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDeleteClientObj@4 -_NtGdiDeleteClientObj@4: - movl $0x1072, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDeleteColorSpace@4 -_NtGdiDeleteColorSpace@4: - movl $0x1073, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDeleteColorTransform@8 -_NtGdiDeleteColorTransform@8: - movl $0x1074, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDeleteObjectApp@4 -_NtGdiDeleteObjectApp@4: - movl $0x1075, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiDescribePixelFormat@16 -_NtGdiDescribePixelFormat@16: - movl $0x1076, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiGetPerBandInfo@8 -_NtGdiGetPerBandInfo@8: - movl $0x1077, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiDoBanding@16 -_NtGdiDoBanding@16: - movl $0x1078, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiDoPalette@24 -_NtGdiDoPalette@24: - movl $0x1079, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiDrawEscape@16 -_NtGdiDrawEscape@16: - movl $0x107a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiEllipse@20 -_NtGdiEllipse@20: - movl $0x107b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiEnableEudc@4 -_NtGdiEnableEudc@4: - movl $0x107c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEndDoc@4 -_NtGdiEndDoc@4: - movl $0x107d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEndPage@4 -_NtGdiEndPage@4: - movl $0x107e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEndPath@4 -_NtGdiEndPath@4: - movl $0x107f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEnumFontChunk@20 -_NtGdiEnumFontChunk@20: - movl $0x1080, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiEnumFontClose@4 -_NtGdiEnumFontClose@4: - movl $0x1081, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEnumFontOpen@28 -_NtGdiEnumFontOpen@28: - movl $0x1082, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiEnumObjects@16 -_NtGdiEnumObjects@16: - movl $0x1083, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiEqualRgn@8 -_NtGdiEqualRgn@8: - movl $0x1084, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiEudcEnumFaceNameLinkW@16 -_NtGdiEudcEnumFaceNameLinkW@16: - movl $0x1085, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiEudcLoadUnloadLink@28 -_NtGdiEudcLoadUnloadLink@28: - movl $0x1086, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiExcludeClipRect@20 -_NtGdiExcludeClipRect@20: - movl $0x1087, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiExtCreatePen@44 -_NtGdiExtCreatePen@44: - movl $0x1088, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiExtCreateRegion@12 -_NtGdiExtCreateRegion@12: - movl $0x1089, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiExtEscape@32 -_NtGdiExtEscape@32: - movl $0x108a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiExtFloodFill@20 -_NtGdiExtFloodFill@20: - movl $0x108b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiExtGetObjectW@12 -_NtGdiExtGetObjectW@12: - movl $0x108c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiExtSelectClipRgn@12 -_NtGdiExtSelectClipRgn@12: - movl $0x108d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiExtTextOutW@36 -_NtGdiExtTextOutW@36: - movl $0x108e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x24 - -.global _NtGdiFillPath@4 -_NtGdiFillPath@4: - movl $0x108f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiFillRgn@12 -_NtGdiFillRgn@12: - movl $0x1090, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiFlattenPath@4 -_NtGdiFlattenPath@4: - movl $0x1091, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiFlushUserBatch@0 -_NtGdiFlushUserBatch@0: - movl $0x1092, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtGdiFlush@0 -_NtGdiFlush@0: - movl $0x1093, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtGdiForceUFIMapping@8 -_NtGdiForceUFIMapping@8: - movl $0x1094, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiFrameRgn@20 -_NtGdiFrameRgn@20: - movl $0x1095, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiFullscreenControl@20 -_NtGdiFullscreenControl@20: - movl $0x1096, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiGetAndSetDCDword@16 -_NtGdiGetAndSetDCDword@16: - movl $0x1097, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiGetAppClipBox@8 -_NtGdiGetAppClipBox@8: - movl $0x1098, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetBitmapBits@12 -_NtGdiGetBitmapBits@12: - movl $0x1099, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetBitmapDimension@8 -_NtGdiGetBitmapDimension@8: - movl $0x109a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetBoundsRect@12 -_NtGdiGetBoundsRect@12: - movl $0x109b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetCharABCWidthsW@24 -_NtGdiGetCharABCWidthsW@24: - movl $0x109c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiGetCharacterPlacementW@24 -_NtGdiGetCharacterPlacementW@24: - movl $0x109d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiGetCharSet@4 -_NtGdiGetCharSet@4: - movl $0x109e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiGetCharWidthW@24 -_NtGdiGetCharWidthW@24: - movl $0x109f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiGetCharWidthInfo@8 -_NtGdiGetCharWidthInfo@8: - movl $0x10a0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetColorAdjustment@8 -_NtGdiGetColorAdjustment@8: - movl $0x10a1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetColorSpaceforBitmap@4 -_NtGdiGetColorSpaceforBitmap@4: - movl $0x10a2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiGetDCDword@12 -_NtGdiGetDCDword@12: - movl $0x10a3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetDCforBitmap@4 -_NtGdiGetDCforBitmap@4: - movl $0x10a4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiGetDCObject@8 -_NtGdiGetDCObject@8: - movl $0x10a5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetDCPoint@12 -_NtGdiGetDCPoint@12: - movl $0x10a6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetDeviceCaps@8 -_NtGdiGetDeviceCaps@8: - movl $0x10a7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetDeviceGammaRamp@8 -_NtGdiGetDeviceGammaRamp@8: - movl $0x10a8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetDeviceCapsAll@8 -_NtGdiGetDeviceCapsAll@8: - movl $0x10a9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetDIBitsInternal@36 -_NtGdiGetDIBitsInternal@36: - movl $0x10aa, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x24 - -.global _NtGdiGetETM@8 -_NtGdiGetETM@8: - movl $0x10ab, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetEudcTimeStampEx@12 -_NtGdiGetEudcTimeStampEx@12: - movl $0x10ac, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetFontData@20 -_NtGdiGetFontData@20: - movl $0x10ad, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiGetFontResourceInfoInternalW@28 -_NtGdiGetFontResourceInfoInternalW@28: - movl $0x10ae, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiGetGlyphIndicesW@20 -_NtGdiGetGlyphIndicesW@20: - movl $0x10af, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiGetGlyphIndicesWInternal@24 -_NtGdiGetGlyphIndicesWInternal@24: - movl $0x10b0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiGetGlyphOutline@32 -_NtGdiGetGlyphOutline@32: - movl $0x10b1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiGetKerningPairs@12 -_NtGdiGetKerningPairs@12: - movl $0x10b2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetLinkedUFIs@12 -_NtGdiGetLinkedUFIs@12: - movl $0x10b3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetMiterLimit@8 -_NtGdiGetMiterLimit@8: - movl $0x10b4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetMonitorID@12 -_NtGdiGetMonitorID@12: - movl $0x10b5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetNearestColor@8 -_NtGdiGetNearestColor@8: - movl $0x10b6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetNearestPaletteIndex@8 -_NtGdiGetNearestPaletteIndex@8: - movl $0x10b7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetObjectBitmapHandle@8 -_NtGdiGetObjectBitmapHandle@8: - movl $0x10b8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetOutlineTextMetricsInternalW@16 -_NtGdiGetOutlineTextMetricsInternalW@16: - movl $0x10b9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiGetPath@16 -_NtGdiGetPath@16: - movl $0x10ba, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiGetPixel@12 -_NtGdiGetPixel@12: - movl $0x10bb, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetRandomRgn@12 -_NtGdiGetRandomRgn@12: - movl $0x10bc, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetRasterizerCaps@8 -_NtGdiGetRasterizerCaps@8: - movl $0x10bd, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetRealizationInfo@8 -_NtGdiGetRealizationInfo@8: - movl $0x10be, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetRegionData@12 -_NtGdiGetRegionData@12: - movl $0x10bf, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetRgnBox@8 -_NtGdiGetRgnBox@8: - movl $0x10c0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetServerMetaFileBits@28 -_NtGdiGetServerMetaFileBits@28: - movl $0x10c1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiGetSpoolMessage@16 -_NtGdiGetSpoolMessage@16: - movl $0x10c2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiGetStats@20 -_NtGdiGetStats@20: - movl $0x10c3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiGetStockObject@4 -_NtGdiGetStockObject@4: - movl $0x10c4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiGetStringBitmapW@20 -_NtGdiGetStringBitmapW@20: - movl $0x10c5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiGetSystemPaletteUse@4 -_NtGdiGetSystemPaletteUse@4: - movl $0x10c6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiGetTextCharsetInfo@12 -_NtGdiGetTextCharsetInfo@12: - movl $0x10c7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetTextExtent@20 -_NtGdiGetTextExtent@20: - movl $0x10c8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiGetTextExtentExW@32 -_NtGdiGetTextExtentExW@32: - movl $0x10c9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiGetTextFaceW@16 -_NtGdiGetTextFaceW@16: - movl $0x10ca, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiGetTextMetricsW@12 -_NtGdiGetTextMetricsW@12: - movl $0x10cb, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetTransform@12 -_NtGdiGetTransform@12: - movl $0x10cc, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetUFI@24 -_NtGdiGetUFI@24: - movl $0x10cd, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiGetUFIPathname@40 -_NtGdiGetUFIPathname@40: - movl $0x10ce, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x28 - -.global _NtGdiGetFontUnicodeRanges@8 -_NtGdiGetFontUnicodeRanges@8: - movl $0x10cf, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiGetWidthTable@28 -_NtGdiGetWidthTable@28: - movl $0x10d0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiGradientFill@24 -_NtGdiGradientFill@24: - movl $0x10d1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiHfontCreate@20 -_NtGdiHfontCreate@20: - movl $0x10d2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiIcmBrushInfo@32 -_NtGdiIcmBrushInfo@32: - movl $0x10d3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiInit@0 -_NtGdiInit@0: - movl $0x10d4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtGdiInitSpool@0 -_NtGdiInitSpool@0: - movl $0x10d5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtGdiIntersectClipRect@20 -_NtGdiIntersectClipRect@20: - movl $0x10d6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiInvertRgn@8 -_NtGdiInvertRgn@8: - movl $0x10d7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiLineTo@12 -_NtGdiLineTo@12: - movl $0x10d8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiMakeFontDir@20 -_NtGdiMakeFontDir@20: - movl $0x10d9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiMakeInfoDC@8 -_NtGdiMakeInfoDC@8: - movl $0x10da, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiMaskBlt@52 -_NtGdiMaskBlt@52: - movl $0x10db, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x34 - -.global _NtGdiModifyWorldTransform@12 -_NtGdiModifyWorldTransform@12: - movl $0x10dc, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiMonoBitmap@4 -_NtGdiMonoBitmap@4: - movl $0x10dd, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiMoveTo@16 -_NtGdiMoveTo@16: - movl $0x10de, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiOffsetClipRgn@12 -_NtGdiOffsetClipRgn@12: - movl $0x10df, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiOffsetRgn@12 -_NtGdiOffsetRgn@12: - movl $0x10e0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiOpenDCW@28 -_NtGdiOpenDCW@28: - movl $0x10e1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiPatBlt@24 -_NtGdiPatBlt@24: - movl $0x10e2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiPolyPatBlt@20 -_NtGdiPolyPatBlt@20: - movl $0x10e3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiPathToRegion@4 -_NtGdiPathToRegion@4: - movl $0x10e4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiPlgBlt@44 -_NtGdiPlgBlt@44: - movl $0x10e5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiPolyDraw@16 -_NtGdiPolyDraw@16: - movl $0x10e6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiPolyPolyDraw@20 -_NtGdiPolyPolyDraw@20: - movl $0x10e7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiPolyTextOutW@16 -_NtGdiPolyTextOutW@16: - movl $0x10e8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiPtInRegion@12 -_NtGdiPtInRegion@12: - movl $0x10e9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiPtVisible@12 -_NtGdiPtVisible@12: - movl $0x10ea, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiQueryFonts@12 -_NtGdiQueryFonts@12: - movl $0x10eb, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiQueryFontAssocInfo@4 -_NtGdiQueryFontAssocInfo@4: - movl $0x10ec, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiRectangle@20 -_NtGdiRectangle@20: - movl $0x10ed, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiRectInRegion@8 -_NtGdiRectInRegion@8: - movl $0x10ee, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiRectVisible@8 -_NtGdiRectVisible@8: - movl $0x10ef, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiRemoveFontResourceW@24 -_NtGdiRemoveFontResourceW@24: - movl $0x10f0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiRemoveFontMemResourceEx@4 -_NtGdiRemoveFontMemResourceEx@4: - movl $0x10f1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiResetDC@20 -_NtGdiResetDC@20: - movl $0x10f2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiResizePalette@8 -_NtGdiResizePalette@8: - movl $0x10f3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiRestoreDC@8 -_NtGdiRestoreDC@8: - movl $0x10f4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiRoundRect@28 -_NtGdiRoundRect@28: - movl $0x10f5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiSaveDC@4 -_NtGdiSaveDC@4: - movl $0x10f6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiScaleViewportExtEx@24 -_NtGdiScaleViewportExtEx@24: - movl $0x10f7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiScaleWindowExtEx@24 -_NtGdiScaleWindowExtEx@24: - movl $0x10f8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiSelectBitmap@8 -_NtGdiSelectBitmap@8: - movl $0x10f9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSelectBrush@8 -_NtGdiSelectBrush@8: - movl $0x10fa, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSelectClipPath@8 -_NtGdiSelectClipPath@8: - movl $0x10fb, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSelectFont@8 -_NtGdiSelectFont@8: - movl $0x10fc, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSelectPen@8 -_NtGdiSelectPen@8: - movl $0x10fd, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSetBitmapBits@12 -_NtGdiSetBitmapBits@12: - movl $0x10fe, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetBitmapDimension@16 -_NtGdiSetBitmapDimension@16: - movl $0x10ff, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiSetBoundsRect@12 -_NtGdiSetBoundsRect@12: - movl $0x1100, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetBrushOrg@16 -_NtGdiSetBrushOrg@16: - movl $0x1101, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiSetColorAdjustment@8 -_NtGdiSetColorAdjustment@8: - movl $0x1102, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSetColorSpace@8 -_NtGdiSetColorSpace@8: - movl $0x1103, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSetDeviceGammaRamp@8 -_NtGdiSetDeviceGammaRamp@8: - movl $0x1104, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSetDIBitsToDeviceInternal@64 -_NtGdiSetDIBitsToDeviceInternal@64: - movl $0x1105, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x40 - -.global _NtGdiSetFontEnumeration@4 -_NtGdiSetFontEnumeration@4: - movl $0x1106, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiSetFontXform@12 -_NtGdiSetFontXform@12: - movl $0x1107, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetIcmMode@12 -_NtGdiSetIcmMode@12: - movl $0x1108, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetLinkedUFIs@12 -_NtGdiSetLinkedUFIs@12: - movl $0x1109, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetMagicColors@12 -_NtGdiSetMagicColors@12: - movl $0x110a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetMetaRgn@4 -_NtGdiSetMetaRgn@4: - movl $0x110b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiSetMiterLimit@12 -_NtGdiSetMiterLimit@12: - movl $0x110c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetDeviceWidth@4 -_NtGdiGetDeviceWidth@4: - movl $0x110d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiMirrorWindowOrg@4 -_NtGdiMirrorWindowOrg@4: - movl $0x110e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiSetLayout@12 -_NtGdiSetLayout@12: - movl $0x110f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetPixel@16 -_NtGdiSetPixel@16: - movl $0x1110, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiSetPixelFormat@8 -_NtGdiSetPixelFormat@8: - movl $0x1111, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSetRectRgn@20 -_NtGdiSetRectRgn@20: - movl $0x1112, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiSetSystemPaletteUse@8 -_NtGdiSetSystemPaletteUse@8: - movl $0x1113, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSetTextJustification@12 -_NtGdiSetTextJustification@12: - movl $0x1114, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetupPublicCFONT@12 -_NtGdiSetupPublicCFONT@12: - movl $0x1115, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSetVirtualResolution@20 -_NtGdiSetVirtualResolution@20: - movl $0x1116, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiSetSizeDevice@12 -_NtGdiSetSizeDevice@12: - movl $0x1117, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiStartDoc@16 -_NtGdiStartDoc@16: - movl $0x1118, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiStartPage@4 -_NtGdiStartPage@4: - movl $0x1119, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiStretchBlt@48 -_NtGdiStretchBlt@48: - movl $0x111a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x30 - -.global _NtGdiStretchDIBitsInternal@64 -_NtGdiStretchDIBitsInternal@64: - movl $0x111b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x40 - -.global _NtGdiStrokeAndFillPath@4 -_NtGdiStrokeAndFillPath@4: - movl $0x111c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiStrokePath@4 -_NtGdiStrokePath@4: - movl $0x111d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiSwapBuffers@4 -_NtGdiSwapBuffers@4: - movl $0x111e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiTransformPoints@20 -_NtGdiTransformPoints@20: - movl $0x111f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiTransparentBlt@44 -_NtGdiTransparentBlt@44: - movl $0x1120, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiUnloadPrinterDriver@8 -_NtGdiUnloadPrinterDriver@8: - movl $0x1121, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiUnmapMemFont@4 -_NtGdiUnmapMemFont@4: - movl $0x1122, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiUnrealizeObject@4 -_NtGdiUnrealizeObject@4: - movl $0x1123, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiUpdateColors@4 -_NtGdiUpdateColors@4: - movl $0x1124, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiWidenPath@4 -_NtGdiWidenPath@4: - movl $0x1125, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserActivateKeyboardLayout@8 -_NtUserActivateKeyboardLayout@8: - movl $0x1126, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserAlterWindowStyle@12 -_NtUserAlterWindowStyle@12: - movl $0x1127, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserAssociateInputContext@12 -_NtUserAssociateInputContext@12: - movl $0x1128, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserAttachThreadInput@12 -_NtUserAttachThreadInput@12: - movl $0x1129, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserBeginPaint@8 -_NtUserBeginPaint@8: - movl $0x112a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserBitBltSysBmp@32 -_NtUserBitBltSysBmp@32: - movl $0x112b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtUserBlockInput@4 -_NtUserBlockInput@4: - movl $0x112c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserBuildHimcList@16 -_NtUserBuildHimcList@16: - movl $0x112d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserBuildHwndList@28 -_NtUserBuildHwndList@28: - movl $0x112e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtUserBuildNameList@16 -_NtUserBuildNameList@16: - movl $0x112f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserBuildPropList@16 -_NtUserBuildPropList@16: - movl $0x1130, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserCallHwnd@8 -_NtUserCallHwnd@8: - movl $0x1131, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserCallHwndLock@8 -_NtUserCallHwndLock@8: - movl $0x1132, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserCallHwndOpt@8 -_NtUserCallHwndOpt@8: - movl $0x1133, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserCallHwndParam@12 -_NtUserCallHwndParam@12: - movl $0x1134, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserCallHwndParamLock@12 -_NtUserCallHwndParamLock@12: - movl $0x1135, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserCallMsgFilter@8 -_NtUserCallMsgFilter@8: - movl $0x1136, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserCallNextHookEx@16 -_NtUserCallNextHookEx@16: - movl $0x1137, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserCallNoParam@4 -_NtUserCallNoParam@4: - movl $0x1138, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserCallOneParam@4 -_NtUserCallOneParam@4: - movl $0x1139, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserCallTwoParam@12 -_NtUserCallTwoParam@12: - movl $0x113a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserChangeClipboardChain@8 -_NtUserChangeClipboardChain@8: - movl $0x113b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserChangeDisplaySettings@20 -_NtUserChangeDisplaySettings@20: - movl $0x113c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserCheckImeHotKey@12 -_NtUserCheckImeHotKey@12: - movl $0x113d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserCheckMenuItem@12 -_NtUserCheckMenuItem@12: - movl $0x113e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserChildWindowFromPointEx@16 -_NtUserChildWindowFromPointEx@16: - movl $0x113f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserClipCursor@4 -_NtUserClipCursor@4: - movl $0x1140, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserCloseClipboard@0 -_NtUserCloseClipboard@0: - movl $0x1141, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserCloseDesktop@4 -_NtUserCloseDesktop@4: - movl $0x1142, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserCloseWindowStation@4 -_NtUserCloseWindowStation@4: - movl $0x1143, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserConsoleControl@12 -_NtUserConsoleControl@12: - movl $0x1144, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserConvertMemHandle@8 -_NtUserConvertMemHandle@8: - movl $0x1145, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserCopyAcceleratorTable@12 -_NtUserCopyAcceleratorTable@12: - movl $0x1146, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserCountClipboardFormats@4 -_NtUserCountClipboardFormats@4: - movl $0x1147, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserCreateAcceleratorTable@8 -_NtUserCreateAcceleratorTable@8: - movl $0x1148, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserCreateCaret@16 -_NtUserCreateCaret@16: - movl $0x1149, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserCreateDesktop@20 -_NtUserCreateDesktop@20: - movl $0x114a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserCreateInputContext@4 -_NtUserCreateInputContext@4: - movl $0x114b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserCreateLocalMemHandle@16 -_NtUserCreateLocalMemHandle@16: - movl $0x114c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserCreateWindowEx@52 -_NtUserCreateWindowEx@52: - movl $0x114d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x34 - -.global _NtUserCreateWindowStation@24 -_NtUserCreateWindowStation@24: - movl $0x114e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserDdeGetQualityOfService@12 -_NtUserDdeGetQualityOfService@12: - movl $0x114f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserDdeInitialize@20 -_NtUserDdeInitialize@20: - movl $0x1150, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserDdeSetQualityOfService@12 -_NtUserDdeSetQualityOfService@12: - movl $0x1151, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserDeferWindowPos@32 -_NtUserDeferWindowPos@32: - movl $0x1152, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtUserDefSetText@8 -_NtUserDefSetText@8: - movl $0x1153, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserDeleteMenu@12 -_NtUserDeleteMenu@12: - movl $0x1154, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserDestroyAcceleratorTable@4 -_NtUserDestroyAcceleratorTable@4: - movl $0x1155, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserDestroyCursor@8 -_NtUserDestroyCursor@8: - movl $0x1156, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserDestroyInputContext@4 -_NtUserDestroyInputContext@4: - movl $0x1157, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserDestroyMenu@4 -_NtUserDestroyMenu@4: - movl $0x1158, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserDestroyWindow@4 -_NtUserDestroyWindow@4: - movl $0x1159, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserDisableThreadIme@4 -_NtUserDisableThreadIme@4: - movl $0x115a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserDispatchMessage@4 -_NtUserDispatchMessage@4: - movl $0x115b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserDragDetect@12 -_NtUserDragDetect@12: - movl $0x115c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserDragObject@20 -_NtUserDragObject@20: - movl $0x115d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserDrawAnimatedRects@16 -_NtUserDrawAnimatedRects@16: - movl $0x115e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserDrawCaption@16 -_NtUserDrawCaption@16: - movl $0x115f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserDrawCaptionTemp@28 -_NtUserDrawCaptionTemp@28: - movl $0x1160, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtUserDrawIconEx@44 -_NtUserDrawIconEx@44: - movl $0x1161, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtUserDrawMenuBarTemp@20 -_NtUserDrawMenuBarTemp@20: - movl $0x1162, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserEmptyClipboard@0 -_NtUserEmptyClipboard@0: - movl $0x1163, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserEnableMenuItem@12 -_NtUserEnableMenuItem@12: - movl $0x1164, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserEnableScrollBar@12 -_NtUserEnableScrollBar@12: - movl $0x1165, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserEndDeferWindowPosEx@8 -_NtUserEndDeferWindowPosEx@8: - movl $0x1166, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserEndMenu@0 -_NtUserEndMenu@0: - movl $0x1167, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserEndPaint@8 -_NtUserEndPaint@8: - movl $0x1168, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserEnumDisplayDevices@16 -_NtUserEnumDisplayDevices@16: - movl $0x1169, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserEnumDisplayMonitors@16 -_NtUserEnumDisplayMonitors@16: - movl $0x116a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserEnumDisplaySettings@16 -_NtUserEnumDisplaySettings@16: - movl $0x116b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserEvent@4 -_NtUserEvent@4: - movl $0x116c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserExcludeUpdateRgn@8 -_NtUserExcludeUpdateRgn@8: - movl $0x116d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserFillWindow@16 -_NtUserFillWindow@16: - movl $0x116e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserFindExistingCursorIcon@12 -_NtUserFindExistingCursorIcon@12: - movl $0x116f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserFindWindowEx@20 -_NtUserFindWindowEx@20: - movl $0x1170, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserFlashWindowEx@4 -_NtUserFlashWindowEx@4: - movl $0x1171, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetAltTabInfo@24 -_NtUserGetAltTabInfo@24: - movl $0x1172, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserGetAncestor@8 -_NtUserGetAncestor@8: - movl $0x1173, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetAppImeLevel@4 -_NtUserGetAppImeLevel@4: - movl $0x1174, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetAsyncKeyState@4 -_NtUserGetAsyncKeyState@4: - movl $0x1175, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetCaretBlinkTime@0 -_NtUserGetCaretBlinkTime@0: - movl $0x1176, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserGetCaretPos@4 -_NtUserGetCaretPos@4: - movl $0x1177, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetClassInfo@20 -_NtUserGetClassInfo@20: - movl $0x1178, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserGetClassName@12 -_NtUserGetClassName@12: - movl $0x1179, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetClipboardData@8 -_NtUserGetClipboardData@8: - movl $0x117a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetClipboardFormatName@12 -_NtUserGetClipboardFormatName@12: - movl $0x117b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetClipboardOwner@0 -_NtUserGetClipboardOwner@0: - movl $0x117c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserGetClipboardSequenceNumber@0 -_NtUserGetClipboardSequenceNumber@0: - movl $0x117d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserGetClipboardViewer@0 -_NtUserGetClipboardViewer@0: - movl $0x117e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserGetClipCursor@4 -_NtUserGetClipCursor@4: - movl $0x117f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetComboBoxInfo@8 -_NtUserGetComboBoxInfo@8: - movl $0x1180, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetControlBrush@12 -_NtUserGetControlBrush@12: - movl $0x1181, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetControlColor@16 -_NtUserGetControlColor@16: - movl $0x1182, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserGetCPD@12 -_NtUserGetCPD@12: - movl $0x1183, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetCursorFrameInfo@16 -_NtUserGetCursorFrameInfo@16: - movl $0x1184, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserGetCursorInfo@4 -_NtUserGetCursorInfo@4: - movl $0x1185, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetDC@4 -_NtUserGetDC@4: - movl $0x1186, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetDCEx@12 -_NtUserGetDCEx@12: - movl $0x1187, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetDoubleClickTime@0 -_NtUserGetDoubleClickTime@0: - movl $0x1188, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserGetForegroundWindow@0 -_NtUserGetForegroundWindow@0: - movl $0x1189, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserGetGuiResources@8 -_NtUserGetGuiResources@8: - movl $0x118a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetGUIThreadInfo@8 -_NtUserGetGUIThreadInfo@8: - movl $0x118b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetIconInfo@24 -_NtUserGetIconInfo@24: - movl $0x118c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserGetIconSize@16 -_NtUserGetIconSize@16: - movl $0x118d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserGetImeHotKey@16 -_NtUserGetImeHotKey@16: - movl $0x118e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserGetImeInfoEx@8 -_NtUserGetImeInfoEx@8: - movl $0x118f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetInternalWindowPos@12 -_NtUserGetInternalWindowPos@12: - movl $0x1190, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetKeyboardLayoutList@8 -_NtUserGetKeyboardLayoutList@8: - movl $0x1191, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetKeyboardLayoutName@4 -_NtUserGetKeyboardLayoutName@4: - movl $0x1192, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetKeyboardState@4 -_NtUserGetKeyboardState@4: - movl $0x1193, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetKeyNameText@12 -_NtUserGetKeyNameText@12: - movl $0x1194, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetKeyState@4 -_NtUserGetKeyState@4: - movl $0x1195, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetListBoxInfo@4 -_NtUserGetListBoxInfo@4: - movl $0x1196, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetMenuBarInfo@16 -_NtUserGetMenuBarInfo@16: - movl $0x1197, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserGetMenuIndex@8 -_NtUserGetMenuIndex@8: - movl $0x1198, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetMenuItemRect@16 -_NtUserGetMenuItemRect@16: - movl $0x1199, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserGetMessage@16 -_NtUserGetMessage@16: - movl $0x119a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserGetMouseMovePointsEx@20 -_NtUserGetMouseMovePointsEx@20: - movl $0x119b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserGetObjectInformation@20 -_NtUserGetObjectInformation@20: - movl $0x119c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserGetOpenClipboardWindow@0 -_NtUserGetOpenClipboardWindow@0: - movl $0x119d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserGetPriorityClipboardFormat@8 -_NtUserGetPriorityClipboardFormat@8: - movl $0x119e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetProcessWindowStation@0 -_NtUserGetProcessWindowStation@0: - movl $0x119f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserGetScrollBarInfo@12 -_NtUserGetScrollBarInfo@12: - movl $0x11a0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetSystemMenu@8 -_NtUserGetSystemMenu@8: - movl $0x11a1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetThreadDesktop@8 -_NtUserGetThreadDesktop@8: - movl $0x11a2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetThreadState@4 -_NtUserGetThreadState@4: - movl $0x11a3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetTitleBarInfo@8 -_NtUserGetTitleBarInfo@8: - movl $0x11a4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetUpdateRect@12 -_NtUserGetUpdateRect@12: - movl $0x11a5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetUpdateRgn@12 -_NtUserGetUpdateRgn@12: - movl $0x11a6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserGetWindowDC@4 -_NtUserGetWindowDC@4: - movl $0x11a7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserGetWindowPlacement@8 -_NtUserGetWindowPlacement@8: - movl $0x11a8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserGetWOWClass@8 -_NtUserGetWOWClass@8: - movl $0x11a9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserHardErrorControl@12 -_NtUserHardErrorControl@12: - movl $0x11aa, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserHideCaret@4 -_NtUserHideCaret@4: - movl $0x11ab, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserHiliteMenuItem@16 -_NtUserHiliteMenuItem@16: - movl $0x11ac, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserImpersonateDdeClientWindow@8 -_NtUserImpersonateDdeClientWindow@8: - movl $0x11ad, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserInitialize@12 -_NtUserInitialize@12: - movl $0x11ae, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserInitializeClientPfnArrays@16 -_NtUserInitializeClientPfnArrays@16: - movl $0x11af, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserInitTask@44 -_NtUserInitTask@44: - movl $0x11b0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtUserInternalGetWindowText@12 -_NtUserInternalGetWindowText@12: - movl $0x11b1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserInvalidateRect@12 -_NtUserInvalidateRect@12: - movl $0x11b2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserInvalidateRgn@12 -_NtUserInvalidateRgn@12: - movl $0x11b3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserIsClipboardFormatAvailable@4 -_NtUserIsClipboardFormatAvailable@4: - movl $0x11b4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserKillTimer@8 -_NtUserKillTimer@8: - movl $0x11b5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserLoadKeyboardLayoutEx@24 -_NtUserLoadKeyboardLayoutEx@24: - movl $0x11b6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserLockWindowStation@4 -_NtUserLockWindowStation@4: - movl $0x11b7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserLockWindowUpdate@4 -_NtUserLockWindowUpdate@4: - movl $0x11b8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserLockWorkStation@0 -_NtUserLockWorkStation@0: - movl $0x11b9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserMapVirtualKeyEx@16 -_NtUserMapVirtualKeyEx@16: - movl $0x11ba, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserMenuItemFromPoint@16 -_NtUserMenuItemFromPoint@16: - movl $0x11bb, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserMessageCall@28 -_NtUserMessageCall@28: - movl $0x11bc, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtUserMinMaximize@12 -_NtUserMinMaximize@12: - movl $0x11bd, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserMNDragLeave@4 -_NtUserMNDragLeave@4: - movl $0x11be, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserMNDragOver@8 -_NtUserMNDragOver@8: - movl $0x11bf, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserModifyUserStartupInfoFlags@8 -_NtUserModifyUserStartupInfoFlags@8: - movl $0x11c0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserMoveWindow@24 -_NtUserMoveWindow@24: - movl $0x11c1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserNotifyIMEStatus@12 -_NtUserNotifyIMEStatus@12: - movl $0x11c2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserNotifyProcessCreate@16 -_NtUserNotifyProcessCreate@16: - movl $0x11c3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserNotifyWinEvent@16 -_NtUserNotifyWinEvent@16: - movl $0x11c4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserOpenClipboard@8 -_NtUserOpenClipboard@8: - movl $0x11c5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserOpenDesktop@12 -_NtUserOpenDesktop@12: - movl $0x11c6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserOpenInputDesktop@12 -_NtUserOpenInputDesktop@12: - movl $0x11c7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserOpenWindowStation@8 -_NtUserOpenWindowStation@8: - movl $0x11c8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserPaintDesktop@4 -_NtUserPaintDesktop@4: - movl $0x11c9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserPeekMessage@20 -_NtUserPeekMessage@20: - movl $0x11ca, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserPostMessage@16 -_NtUserPostMessage@16: - movl $0x11cb, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserPostThreadMessage@16 -_NtUserPostThreadMessage@16: - movl $0x11cc, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserProcessConnect@12 -_NtUserProcessConnect@12: - movl $0x11cd, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserQueryInformationThread@20 -_NtUserQueryInformationThread@20: - movl $0x11ce, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserQueryInputContext@8 -_NtUserQueryInputContext@8: - movl $0x11cf, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserQuerySendMessage@4 -_NtUserQuerySendMessage@4: - movl $0x11d0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserQueryUserCounters@20 -_NtUserQueryUserCounters@20: - movl $0x11d1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserQueryWindow@8 -_NtUserQueryWindow@8: - movl $0x11d2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserRealChildWindowFromPoint@12 -_NtUserRealChildWindowFromPoint@12: - movl $0x11d3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserRedrawWindow@16 -_NtUserRedrawWindow@16: - movl $0x11d4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserRegisterClassExWOW@24 -_NtUserRegisterClassExWOW@24: - movl $0x11d5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserRegisterHotKey@16 -_NtUserRegisterHotKey@16: - movl $0x11d6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserRegisterTasklist@4 -_NtUserRegisterTasklist@4: - movl $0x11d7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserRegisterWindowMessage@4 -_NtUserRegisterWindowMessage@4: - movl $0x11d8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserRemoveMenu@12 -_NtUserRemoveMenu@12: - movl $0x11d9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserRemoveProp@8 -_NtUserRemoveProp@8: - movl $0x11da, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserResolveDesktop@16 -_NtUserResolveDesktop@16: - movl $0x11db, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserResolveDesktopForWOW@4 -_NtUserResolveDesktopForWOW@4: - movl $0x11dc, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSBGetParms@16 -_NtUserSBGetParms@16: - movl $0x11dd, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserScrollDC@28 -_NtUserScrollDC@28: - movl $0x11de, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtUserScrollWindowEx@32 -_NtUserScrollWindowEx@32: - movl $0x11df, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtUserSelectPalette@12 -_NtUserSelectPalette@12: - movl $0x11e0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSendInput@12 -_NtUserSendInput@12: - movl $0x11e1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSendMessageCallback@24 -_NtUserSendMessageCallback@24: - movl $0x11e2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserSendNotifyMessage@16 -_NtUserSendNotifyMessage@16: - movl $0x11e3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetActiveWindow@4 -_NtUserSetActiveWindow@4: - movl $0x11e4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetAppImeLevel@8 -_NtUserSetAppImeLevel@8: - movl $0x11e5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetCapture@4 -_NtUserSetCapture@4: - movl $0x11e6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetClassLong@16 -_NtUserSetClassLong@16: - movl $0x11e7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetClassWord@12 -_NtUserSetClassWord@12: - movl $0x11e8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSetClipboardData@12 -_NtUserSetClipboardData@12: - movl $0x11e9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSetClipboardViewer@4 -_NtUserSetClipboardViewer@4: - movl $0x11ea, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetConsoleReserveKeys@8 -_NtUserSetConsoleReserveKeys@8: - movl $0x11eb, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetCursor@4 -_NtUserSetCursor@4: - movl $0x11ec, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetCursorContents@8 -_NtUserSetCursorContents@8: - movl $0x11ed, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetCursorIconData@16 -_NtUserSetCursorIconData@16: - movl $0x11ee, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetDbgTag@8 -_NtUserSetDbgTag@8: - movl $0x11ef, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetFocus@4 -_NtUserSetFocus@4: - movl $0x11f0, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetImeHotKey@20 -_NtUserSetImeHotKey@20: - movl $0x11f1, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserSetImeInfoEx@4 -_NtUserSetImeInfoEx@4: - movl $0x11f2, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetImeOwnerWindow@8 -_NtUserSetImeOwnerWindow@8: - movl $0x11f3, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetInformationProcess@16 -_NtUserSetInformationProcess@16: - movl $0x11f4, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetInformationThread@20 -_NtUserSetInformationThread@20: - movl $0x11f5, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtUserSetInternalWindowPos@16 -_NtUserSetInternalWindowPos@16: - movl $0x11f6, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetKeyboardState@4 -_NtUserSetKeyboardState@4: - movl $0x11f7, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetLogonNotifyWindow@4 -_NtUserSetLogonNotifyWindow@4: - movl $0x11f8, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetMenu@12 -_NtUserSetMenu@12: - movl $0x11f9, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSetMenuContextHelpId@8 -_NtUserSetMenuContextHelpId@8: - movl $0x11fa, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetMenuDefaultItem@12 -_NtUserSetMenuDefaultItem@12: - movl $0x11fb, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSetMenuFlagRtoL@4 -_NtUserSetMenuFlagRtoL@4: - movl $0x11fc, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetObjectInformation@16 -_NtUserSetObjectInformation@16: - movl $0x11fd, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetParent@8 -_NtUserSetParent@8: - movl $0x11fe, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetProcessWindowStation@4 -_NtUserSetProcessWindowStation@4: - movl $0x11ff, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetProp@12 -_NtUserSetProp@12: - movl $0x1200, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSetRipFlags@8 -_NtUserSetRipFlags@8: - movl $0x1201, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetScrollInfo@16 -_NtUserSetScrollInfo@16: - movl $0x1202, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetShellWindowEx@8 -_NtUserSetShellWindowEx@8: - movl $0x1203, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetSysColors@16 -_NtUserSetSysColors@16: - movl $0x1204, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetSystemCursor@8 -_NtUserSetSystemCursor@8: - movl $0x1205, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetSystemMenu@8 -_NtUserSetSystemMenu@8: - movl $0x1206, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetSystemTimer@16 -_NtUserSetSystemTimer@16: - movl $0x1207, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetThreadDesktop@4 -_NtUserSetThreadDesktop@4: - movl $0x1208, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSetThreadLayoutHandles@8 -_NtUserSetThreadLayoutHandles@8: - movl $0x1209, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetThreadState@8 -_NtUserSetThreadState@8: - movl $0x120a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetTimer@16 -_NtUserSetTimer@16: - movl $0x120b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetWindowFNID@8 -_NtUserSetWindowFNID@8: - movl $0x120c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetWindowLong@16 -_NtUserSetWindowLong@16: - movl $0x120d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetWindowPlacement@8 -_NtUserSetWindowPlacement@8: - movl $0x120e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSetWindowPos@28 -_NtUserSetWindowPos@28: - movl $0x120f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtUserSetWindowRgn@12 -_NtUserSetWindowRgn@12: - movl $0x1210, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSetWindowsHookAW@12 -_NtUserSetWindowsHookAW@12: - movl $0x1211, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSetWindowsHookEx@24 -_NtUserSetWindowsHookEx@24: - movl $0x1212, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserSetWindowStationUser@16 -_NtUserSetWindowStationUser@16: - movl $0x1213, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserSetWindowWord@12 -_NtUserSetWindowWord@12: - movl $0x1214, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserSetWinEventHook@32 -_NtUserSetWinEventHook@32: - movl $0x1215, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtUserShowCaret@4 -_NtUserShowCaret@4: - movl $0x1216, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserShowScrollBar@12 -_NtUserShowScrollBar@12: - movl $0x1217, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserShowWindow@8 -_NtUserShowWindow@8: - movl $0x1218, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserShowWindowAsync@8 -_NtUserShowWindowAsync@8: - movl $0x1219, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserSoundSentry@0 -_NtUserSoundSentry@0: - movl $0x121a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserSwitchDesktop@4 -_NtUserSwitchDesktop@4: - movl $0x121b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserSystemParametersInfo@16 -_NtUserSystemParametersInfo@16: - movl $0x121c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserTestForInteractiveUser@4 -_NtUserTestForInteractiveUser@4: - movl $0x121d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserThunkedMenuInfo@8 -_NtUserThunkedMenuInfo@8: - movl $0x121e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserThunkedMenuItemInfo@24 -_NtUserThunkedMenuItemInfo@24: - movl $0x121f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserToUnicodeEx@28 -_NtUserToUnicodeEx@28: - movl $0x1220, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtUserTrackMouseEvent@4 -_NtUserTrackMouseEvent@4: - movl $0x1221, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserTrackPopupMenuEx@24 -_NtUserTrackPopupMenuEx@24: - movl $0x1222, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserTranslateAccelerator@12 -_NtUserTranslateAccelerator@12: - movl $0x1223, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserTranslateMessage@8 -_NtUserTranslateMessage@8: - movl $0x1224, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserUnhookWindowsHookEx@4 -_NtUserUnhookWindowsHookEx@4: - movl $0x1225, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserUnhookWinEvent@4 -_NtUserUnhookWinEvent@4: - movl $0x1226, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserUnloadKeyboardLayout@4 -_NtUserUnloadKeyboardLayout@4: - movl $0x1227, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserUnlockWindowStation@4 -_NtUserUnlockWindowStation@4: - movl $0x1228, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserUnregisterClass@12 -_NtUserUnregisterClass@12: - movl $0x1229, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserUnregisterHotKey@8 -_NtUserUnregisterHotKey@8: - movl $0x122a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserUpdateInputContext@12 -_NtUserUpdateInputContext@12: - movl $0x122b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserUpdateInstance@12 -_NtUserUpdateInstance@12: - movl $0x122c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserUpdateLayeredWindow@36 -_NtUserUpdateLayeredWindow@36: - movl $0x122d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x24 - -.global _NtUserSetLayeredWindowAttributes@16 -_NtUserSetLayeredWindowAttributes@16: - movl $0x122e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserUpdatePerUserSystemParameters@8 -_NtUserUpdatePerUserSystemParameters@8: - movl $0x122f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserUserHandleGrantAccess@12 -_NtUserUserHandleGrantAccess@12: - movl $0x1230, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserValidateHandleSecure@4 -_NtUserValidateHandleSecure@4: - movl $0x1231, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserValidateRect@8 -_NtUserValidateRect@8: - movl $0x1232, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserVkKeyScanEx@12 -_NtUserVkKeyScanEx@12: - movl $0x1233, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserWaitForInputIdle@12 -_NtUserWaitForInputIdle@12: - movl $0x1234, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserWaitForMsgAndEvent@4 -_NtUserWaitForMsgAndEvent@4: - movl $0x1235, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserWaitMessage@0 -_NtUserWaitMessage@0: - movl $0x1236, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserWin32PoolAllocationStats@24 -_NtUserWin32PoolAllocationStats@24: - movl $0x1237, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtUserWindowFromPoint@8 -_NtUserWindowFromPoint@8: - movl $0x1238, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtUserYieldTask@0 -_NtUserYieldTask@0: - movl $0x1239, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserRemoteConnect@12 -_NtUserRemoteConnect@12: - movl $0x123a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtUserRemoteRedrawRectangle@16 -_NtUserRemoteRedrawRectangle@16: - movl $0x123b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtUserRemoteRedrawScreen@0 -_NtUserRemoteRedrawScreen@0: - movl $0x123c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserRemoteStopScreenUpdates@0 -_NtUserRemoteStopScreenUpdates@0: - movl $0x123d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtUserCtxDisplayIOCtl@12 -_NtUserCtxDisplayIOCtl@12: - movl $0x123e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiEngAssociateSurface@12 -_NtGdiEngAssociateSurface@12: - movl $0x123f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiEngCreateBitmap@24 -_NtGdiEngCreateBitmap@24: - movl $0x1240, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiEngCreateDeviceSurface@16 -_NtGdiEngCreateDeviceSurface@16: - movl $0x1241, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiEngCreateDeviceBitmap@16 -_NtGdiEngCreateDeviceBitmap@16: - movl $0x1242, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiEngCreatePalette@24 -_NtGdiEngCreatePalette@24: - movl $0x1243, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiEngComputeGlyphSet@12 -_NtGdiEngComputeGlyphSet@12: - movl $0x1244, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiEngCopyBits@24 -_NtGdiEngCopyBits@24: - movl $0x1245, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiEngDeletePalette@4 -_NtGdiEngDeletePalette@4: - movl $0x1246, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEngDeleteSurface@4 -_NtGdiEngDeleteSurface@4: - movl $0x1247, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEngEraseSurface@12 -_NtGdiEngEraseSurface@12: - movl $0x1248, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiEngUnlockSurface@4 -_NtGdiEngUnlockSurface@4: - movl $0x1249, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEngLockSurface@4 -_NtGdiEngLockSurface@4: - movl $0x124a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEngBitBlt@44 -_NtGdiEngBitBlt@44: - movl $0x124b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiEngStretchBlt@44 -_NtGdiEngStretchBlt@44: - movl $0x124c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiEngPlgBlt@44 -_NtGdiEngPlgBlt@44: - movl $0x124d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x2c - -.global _NtGdiEngMarkBandingSurface@4 -_NtGdiEngMarkBandingSurface@4: - movl $0x124e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEngStrokePath@32 -_NtGdiEngStrokePath@32: - movl $0x124f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiEngFillPath@28 -_NtGdiEngFillPath@28: - movl $0x1250, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiEngStrokeAndFillPath@40 -_NtGdiEngStrokeAndFillPath@40: - movl $0x1251, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x28 - -.global _NtGdiEngPaint@20 -_NtGdiEngPaint@20: - movl $0x1252, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiEngLineTo@36 -_NtGdiEngLineTo@36: - movl $0x1253, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x24 - -.global _NtGdiEngAlphaBlend@28 -_NtGdiEngAlphaBlend@28: - movl $0x1254, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x1c - -.global _NtGdiEngGradientFill@40 -_NtGdiEngGradientFill@40: - movl $0x1255, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x28 - -.global _NtGdiEngTransparentBlt@32 -_NtGdiEngTransparentBlt@32: - movl $0x1256, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x20 - -.global _NtGdiEngTextOut@40 -_NtGdiEngTextOut@40: - movl $0x1257, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x28 - -.global _NtGdiEngStretchBltROP@52 -_NtGdiEngStretchBltROP@52: - movl $0x1258, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x34 - -.global _NtGdiXLATEOBJ_cGetPalette@16 -_NtGdiXLATEOBJ_cGetPalette@16: - movl $0x1259, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiXLATEOBJ_iXlate@8 -_NtGdiXLATEOBJ_iXlate@8: - movl $0x125a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiXLATEOBJ_hGetColorTransform@4 -_NtGdiXLATEOBJ_hGetColorTransform@4: - movl $0x125b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiCLIPOBJ_bEnum@12 -_NtGdiCLIPOBJ_bEnum@12: - movl $0x125c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiCLIPOBJ_cEnumStart@20 -_NtGdiCLIPOBJ_cEnumStart@20: - movl $0x125d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiCLIPOBJ_ppoGetPath@4 -_NtGdiCLIPOBJ_ppoGetPath@4: - movl $0x125e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEngDeletePath@4 -_NtGdiEngDeletePath@4: - movl $0x125f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEngCreateClip@0 -_NtGdiEngCreateClip@0: - movl $0x1260, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x0 - -.global _NtGdiEngDeleteClip@4 -_NtGdiEngDeleteClip@4: - movl $0x1261, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiBRUSHOBJ_ulGetBrushColor@4 -_NtGdiBRUSHOBJ_ulGetBrushColor@4: - movl $0x1262, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiBRUSHOBJ_pvAllocRbrush@8 -_NtGdiBRUSHOBJ_pvAllocRbrush@8: - movl $0x1263, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiBRUSHOBJ_pvGetRbrush@4 -_NtGdiBRUSHOBJ_pvGetRbrush@4: - movl $0x1264, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiBRUSHOBJ_hGetColorTransform@4 -_NtGdiBRUSHOBJ_hGetColorTransform@4: - movl $0x1265, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiXFORMOBJ_bApplyXform@20 -_NtGdiXFORMOBJ_bApplyXform@20: - movl $0x1266, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiXFORMOBJ_iGetXform@8 -_NtGdiXFORMOBJ_iGetXform@8: - movl $0x1267, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiFONTOBJ_vGetInfo@12 -_NtGdiFONTOBJ_vGetInfo@12: - movl $0x1268, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiFONTOBJ_pxoGetXform@4 -_NtGdiFONTOBJ_pxoGetXform@4: - movl $0x1269, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiFONTOBJ_cGetGlyphs@20 -_NtGdiFONTOBJ_cGetGlyphs@20: - movl $0x126a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x14 - -.global _NtGdiFONTOBJ_pifi@4 -_NtGdiFONTOBJ_pifi@4: - movl $0x126b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiFONTOBJ_pfdg@4 -_NtGdiFONTOBJ_pfdg@4: - movl $0x126c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiFONTOBJ_pQueryGlyphAttrs@8 -_NtGdiFONTOBJ_pQueryGlyphAttrs@8: - movl $0x126d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiFONTOBJ_pvTrueTypeFontFile@8 -_NtGdiFONTOBJ_pvTrueTypeFontFile@8: - movl $0x126e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiFONTOBJ_cGetAllGlyphHandles@8 -_NtGdiFONTOBJ_cGetAllGlyphHandles@8: - movl $0x126f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiSTROBJ_bEnum@12 -_NtGdiSTROBJ_bEnum@12: - movl $0x1270, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSTROBJ_bEnumPositionsOnly@12 -_NtGdiSTROBJ_bEnumPositionsOnly@12: - movl $0x1271, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiSTROBJ_bGetAdvanceWidths@16 -_NtGdiSTROBJ_bGetAdvanceWidths@16: - movl $0x1272, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiSTROBJ_vEnumStart@4 -_NtGdiSTROBJ_vEnumStart@4: - movl $0x1273, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiSTROBJ_dwGetCodePage@4 -_NtGdiSTROBJ_dwGetCodePage@4: - movl $0x1274, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiPATHOBJ_vGetBounds@8 -_NtGdiPATHOBJ_vGetBounds@8: - movl $0x1275, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiPATHOBJ_bEnum@8 -_NtGdiPATHOBJ_bEnum@8: - movl $0x1276, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x8 - -.global _NtGdiPATHOBJ_vEnumStart@4 -_NtGdiPATHOBJ_vEnumStart@4: - movl $0x1277, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiPATHOBJ_vEnumStartClipLines@16 -_NtGdiPATHOBJ_vEnumStartClipLines@16: - movl $0x1278, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiPATHOBJ_bEnumClipLines@12 -_NtGdiPATHOBJ_bEnumClipLines@12: - movl $0x1279, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc - -.global _NtGdiGetDhpdev@4 -_NtGdiGetDhpdev@4: - movl $0x127a, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiEngCheckAbort@4 -_NtGdiEngCheckAbort@4: - movl $0x127b, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtGdiHT_Get8BPPFormatPalette@16 -_NtGdiHT_Get8BPPFormatPalette@16: - movl $0x127c, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x10 - -.global _NtGdiHT_Get8BPPMaskPalette@24 -_NtGdiHT_Get8BPPMaskPalette@24: - movl $0x127d, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x18 - -.global _NtGdiUpdateTransform@4 -_NtGdiUpdateTransform@4: - movl $0x127e, %eax - leal 4(%esp),%edx - int $0x2e - ret $0x4 - -.global _NtUserValidateTimerCallback@12 -_NtUserValidateTimerCallback@12: - movl $0x127f, %eax - leal 4(%esp),%edx - int $0x2e - ret $0xc diff --git a/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.def b/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.def deleted file mode 100644 index ab461784fd4..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.def +++ /dev/null @@ -1,649 +0,0 @@ -; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ -; -; ReactOS Operating System -; -; This file contains all win32k native api functions from win 2000 sp4 -; -LIBRARY w32kdll.dll - -EXPORTS -NtGdiAbortDoc@4 -NtGdiAbortPath@4 -NtGdiAddFontResourceW@24 -NtGdiAddRemoteFontToDC@16 -NtGdiAddFontMemResourceEx@20 -NtGdiRemoveMergeFont@8 -NtGdiAddRemoteMMInstanceToDC@12 -NtGdiAlphaBlend@48 -NtGdiAngleArc@24 -NtGdiAnyLinkedFonts@0 -NtGdiFontIsLinked@4 -NtGdiArcInternal@40 -NtGdiBeginPath@4 -NtGdiBitBlt@44 -NtGdiCancelDC@4 -NtGdiCheckBitmapBits@32 -NtGdiCloseFigure@4 -NtGdiColorCorrectPalette@24 -NtGdiCombineRgn@16 -NtGdiCombineTransform@12 -NtGdiComputeXformCoefficients@4 -NtGdiConsoleTextOut@16 -NtGdiConvertMetafileRect@8 -NtGdiCreateBitmap@20 -NtGdiCreateClientObj@4 -NtGdiCreateColorSpace@4 -NtGdiCreateColorTransform@32 -NtGdiCreateCompatibleBitmap@12 -NtGdiCreateCompatibleDC@4 -NtGdiCreateDIBBrush@24 -NtGdiCreateDIBitmapInternal@44 -NtGdiCreateDIBSection@36 -NtGdiCreateEllipticRgn@16 -NtGdiCreateHalftonePalette@4 -NtGdiCreateHatchBrushInternal@12 -NtGdiCreateMetafileDC@4 -NtGdiCreatePaletteInternal@8 -NtGdiCreatePatternBrushInternal@12 -NtGdiCreatePen@16 -NtGdiCreateRectRgn@16 -NtGdiCreateRoundRectRgn@24 -NtGdiCreateServerMetaFile@24 -NtGdiCreateSolidBrush@8 -NtGdiD3dContextCreate@16 -NtGdiD3dContextDestroy@4 -NtGdiD3dContextDestroyAll@4 -NtGdiD3dValidateTextureStageState@4 -NtGdiD3dDrawPrimitives2@28 -NtGdiDdGetDriverState@4 -NtGdiDdAddAttachedSurface@12 -NtGdiDdAlphaBlt@12 -NtGdiDdAttachSurface@8 -NtGdiDdBeginMoCompFrame@8 -NtGdiDdBlt@12 -NtGdiDdCanCreateSurface@8 -NtGdiDdCanCreateD3DBuffer@8 -NtGdiDdColorControl@8 -NtGdiDdCreateDirectDrawObject@4 -NtGdiDdCreateSurface@32 -NtGdiDdCreateD3DBuffer@32 -NtGdiDdCreateMoComp@8 -NtGdiDdCreateSurfaceObject@24 -NtGdiDdDeleteDirectDrawObject@4 -NtGdiDdDeleteSurfaceObject@4 -NtGdiDdDestroyMoComp@8 -NtGdiDdDestroySurface@8 -NtGdiDdDestroyD3DBuffer@4 -NtGdiDdEndMoCompFrame@8 -NtGdiDdFlip@20 -NtGdiDdFlipToGDISurface@8 -NtGdiDdGetAvailDriverMemory@8 -NtGdiDdGetBltStatus@8 -NtGdiDdGetDC@8 -NtGdiDdGetDriverInfo@8 -NtGdiDdGetDxHandle@12 -NtGdiDdGetFlipStatus@8 -NtGdiDdGetInternalMoCompInfo@8 -NtGdiDdGetMoCompBuffInfo@8 -NtGdiDdGetMoCompGuids@8 -NtGdiDdGetMoCompFormats@8 -NtGdiDdGetScanLine@8 -NtGdiDdLock@12 -NtGdiDdLockD3D@8 -NtGdiDdQueryDirectDrawObject@44 -NtGdiDdQueryMoCompStatus@8 -NtGdiDdReenableDirectDrawObject@8 -NtGdiDdReleaseDC@4 -NtGdiDdRenderMoComp@8 -NtGdiDdResetVisrgn@8 -NtGdiDdSetColorKey@8 -NtGdiDdSetExclusiveMode@8 -NtGdiDdSetGammaRamp@12 -NtGdiDdCreateSurfaceEx@12 -NtGdiDdSetOverlayPosition@12 -NtGdiDdUnattachSurface@8 -NtGdiDdUnlock@8 -NtGdiDdUnlockD3D@8 -NtGdiDdUpdateOverlay@12 -NtGdiDdWaitForVerticalBlank@8 -NtGdiDvpCanCreateVideoPort@8 -NtGdiDvpColorControl@8 -NtGdiDvpCreateVideoPort@8 -NtGdiDvpDestroyVideoPort@8 -NtGdiDvpFlipVideoPort@16 -NtGdiDvpGetVideoPortBandwidth@8 -NtGdiDvpGetVideoPortField@8 -NtGdiDvpGetVideoPortFlipStatus@8 -NtGdiDvpGetVideoPortInputFormats@8 -NtGdiDvpGetVideoPortLine@8 -NtGdiDvpGetVideoPortOutputFormats@8 -NtGdiDvpGetVideoPortConnectInfo@8 -NtGdiDvpGetVideoSignalStatus@8 -NtGdiDvpUpdateVideoPort@16 -NtGdiDvpWaitForVideoPortSync@8 -NtGdiDeleteClientObj@4 -NtGdiDeleteColorSpace@4 -NtGdiDeleteColorTransform@8 -NtGdiDeleteObjectApp@4 -NtGdiDescribePixelFormat@16 -NtGdiGetPerBandInfo@8 -NtGdiDoBanding@16 -NtGdiDoPalette@24 -NtGdiDrawEscape@16 -NtGdiEllipse@20 -NtGdiEnableEudc@4 -NtGdiEndDoc@4 -NtGdiEndPage@4 -NtGdiEndPath@4 -NtGdiEnumFontChunk@20 -NtGdiEnumFontClose@4 -NtGdiEnumFontOpen@28 -NtGdiEnumObjects@16 -NtGdiEqualRgn@8 -NtGdiEudcEnumFaceNameLinkW@16 -NtGdiEudcLoadUnloadLink@28 -NtGdiExcludeClipRect@20 -NtGdiExtCreatePen@44 -NtGdiExtCreateRegion@12 -NtGdiExtEscape@32 -NtGdiExtFloodFill@20 -NtGdiExtGetObjectW@12 -NtGdiExtSelectClipRgn@12 -NtGdiExtTextOutW@36 -NtGdiFillPath@4 -NtGdiFillRgn@12 -NtGdiFlattenPath@4 -NtGdiFlushUserBatch@0 -NtGdiFlush@0 -NtGdiForceUFIMapping@8 -NtGdiFrameRgn@20 -NtGdiFullscreenControl@20 -NtGdiGetAndSetDCDword@16 -NtGdiGetAppClipBox@8 -NtGdiGetBitmapBits@12 -NtGdiGetBitmapDimension@8 -NtGdiGetBoundsRect@12 -NtGdiGetCharABCWidthsW@24 -NtGdiGetCharacterPlacementW@24 -NtGdiGetCharSet@4 -NtGdiGetCharWidthW@24 -NtGdiGetCharWidthInfo@8 -NtGdiGetColorAdjustment@8 -NtGdiGetColorSpaceforBitmap@4 -NtGdiGetDCDword@12 -NtGdiGetDCforBitmap@4 -NtGdiGetDCObject@8 -NtGdiGetDCPoint@12 -NtGdiGetDeviceCaps@8 -NtGdiGetDeviceGammaRamp@8 -NtGdiGetDeviceCapsAll@8 -NtGdiGetDIBitsInternal@36 -NtGdiGetETM@8 -NtGdiGetEudcTimeStampEx@12 -NtGdiGetFontData@20 -NtGdiGetFontResourceInfoInternalW@28 -NtGdiGetGlyphIndicesW@20 -NtGdiGetGlyphIndicesWInternal@24 -NtGdiGetGlyphOutline@32 -NtGdiGetKerningPairs@12 -NtGdiGetLinkedUFIs@12 -NtGdiGetMiterLimit@8 -NtGdiGetMonitorID@12 -NtGdiGetNearestColor@8 -NtGdiGetNearestPaletteIndex@8 -NtGdiGetObjectBitmapHandle@8 -NtGdiGetOutlineTextMetricsInternalW@16 -NtGdiGetPath@16 -NtGdiGetPixel@12 -NtGdiGetRandomRgn@12 -NtGdiGetRasterizerCaps@8 -NtGdiGetRealizationInfo@8 -NtGdiGetRegionData@12 -NtGdiGetRgnBox@8 -NtGdiGetServerMetaFileBits@28 -NtGdiGetSpoolMessage@16 -NtGdiGetStats@20 -NtGdiGetStockObject@4 -NtGdiGetStringBitmapW@20 -NtGdiGetSystemPaletteUse@4 -NtGdiGetTextCharsetInfo@12 -NtGdiGetTextExtent@20 -NtGdiGetTextExtentExW@32 -NtGdiGetTextFaceW@16 -NtGdiGetTextMetricsW@12 -NtGdiGetTransform@12 -NtGdiGetUFI@24 -NtGdiGetUFIPathname@40 -NtGdiGetFontUnicodeRanges@8 -NtGdiGetWidthTable@28 -NtGdiGradientFill@24 -NtGdiHfontCreate@20 -NtGdiIcmBrushInfo@32 -NtGdiInit@0 -NtGdiInitSpool@0 -NtGdiIntersectClipRect@20 -NtGdiInvertRgn@8 -NtGdiLineTo@12 -NtGdiMakeFontDir@20 -NtGdiMakeInfoDC@8 -NtGdiMaskBlt@52 -NtGdiModifyWorldTransform@12 -NtGdiMonoBitmap@4 -NtGdiMoveTo@16 -NtGdiOffsetClipRgn@12 -NtGdiOffsetRgn@12 -NtGdiOpenDCW@28 -NtGdiPatBlt@24 -NtGdiPolyPatBlt@20 -NtGdiPathToRegion@4 -NtGdiPlgBlt@44 -NtGdiPolyDraw@16 -NtGdiPolyPolyDraw@20 -NtGdiPolyTextOutW@16 -NtGdiPtInRegion@12 -NtGdiPtVisible@12 -NtGdiQueryFonts@12 -NtGdiQueryFontAssocInfo@4 -NtGdiRectangle@20 -NtGdiRectInRegion@8 -NtGdiRectVisible@8 -NtGdiRemoveFontResourceW@24 -NtGdiRemoveFontMemResourceEx@4 -NtGdiResetDC@20 -NtGdiResizePalette@8 -NtGdiRestoreDC@8 -NtGdiRoundRect@28 -NtGdiSaveDC@4 -NtGdiScaleViewportExtEx@24 -NtGdiScaleWindowExtEx@24 -NtGdiSelectBitmap@8 -NtGdiSelectBrush@8 -NtGdiSelectClipPath@8 -NtGdiSelectFont@8 -NtGdiSelectPen@8 -NtGdiSetBitmapBits@12 -NtGdiSetBitmapDimension@16 -NtGdiSetBoundsRect@12 -NtGdiSetBrushOrg@16 -NtGdiSetColorAdjustment@8 -NtGdiSetColorSpace@8 -NtGdiSetDeviceGammaRamp@8 -NtGdiSetDIBitsToDeviceInternal@64 -NtGdiSetFontEnumeration@4 -NtGdiSetFontXform@12 -NtGdiSetIcmMode@12 -NtGdiSetLinkedUFIs@12 -NtGdiSetMagicColors@12 -NtGdiSetMetaRgn@4 -NtGdiSetMiterLimit@12 -NtGdiGetDeviceWidth@4 -NtGdiMirrorWindowOrg@4 -NtGdiSetLayout@12 -NtGdiSetPixel@16 -NtGdiSetPixelFormat@8 -NtGdiSetRectRgn@20 -NtGdiSetSystemPaletteUse@8 -NtGdiSetTextJustification@12 -NtGdiSetupPublicCFONT@12 -NtGdiSetVirtualResolution@20 -NtGdiSetSizeDevice@12 -NtGdiStartDoc@16 -NtGdiStartPage@4 -NtGdiStretchBlt@48 -NtGdiStretchDIBitsInternal@64 -NtGdiStrokeAndFillPath@4 -NtGdiStrokePath@4 -NtGdiSwapBuffers@4 -NtGdiTransformPoints@20 -NtGdiTransparentBlt@44 -NtGdiUnloadPrinterDriver@8 -NtGdiUnmapMemFont@4 -NtGdiUnrealizeObject@4 -NtGdiUpdateColors@4 -NtGdiWidenPath@4 -NtUserActivateKeyboardLayout@8 -NtUserAlterWindowStyle@12 -NtUserAssociateInputContext@12 -NtUserAttachThreadInput@12 -NtUserBeginPaint@8 -NtUserBitBltSysBmp@32 -NtUserBlockInput@4 -NtUserBuildHimcList@16 -NtUserBuildHwndList@28 -NtUserBuildNameList@16 -NtUserBuildPropList@16 -NtUserCallHwnd@8 -NtUserCallHwndLock@8 -NtUserCallHwndOpt@8 -NtUserCallHwndParam@12 -NtUserCallHwndParamLock@12 -NtUserCallMsgFilter@8 -NtUserCallNextHookEx@16 -NtUserCallNoParam@4 -NtUserCallOneParam@4 -NtUserCallTwoParam@12 -NtUserChangeClipboardChain@8 -NtUserChangeDisplaySettings@20 -NtUserCheckImeHotKey@12 -NtUserCheckMenuItem@12 -NtUserChildWindowFromPointEx@16 -NtUserClipCursor@4 -NtUserCloseClipboard@0 -NtUserCloseDesktop@4 -NtUserCloseWindowStation@4 -NtUserConsoleControl@12 -NtUserConvertMemHandle@8 -NtUserCopyAcceleratorTable@12 -NtUserCountClipboardFormats@4 -NtUserCreateAcceleratorTable@8 -NtUserCreateCaret@16 -NtUserCreateDesktop@20 -NtUserCreateInputContext@4 -NtUserCreateLocalMemHandle@16 -NtUserCreateWindowEx@52 -NtUserCreateWindowStation@24 -NtUserDdeGetQualityOfService@12 -NtUserDdeInitialize@20 -NtUserDdeSetQualityOfService@12 -NtUserDeferWindowPos@32 -NtUserDefSetText@8 -NtUserDeleteMenu@12 -NtUserDestroyAcceleratorTable@4 -NtUserDestroyCursor@8 -NtUserDestroyInputContext@4 -NtUserDestroyMenu@4 -NtUserDestroyWindow@4 -NtUserDisableThreadIme@4 -NtUserDispatchMessage@4 -NtUserDragDetect@12 -NtUserDragObject@20 -NtUserDrawAnimatedRects@16 -NtUserDrawCaption@16 -NtUserDrawCaptionTemp@28 -NtUserDrawIconEx@44 -NtUserDrawMenuBarTemp@20 -NtUserEmptyClipboard@0 -NtUserEnableMenuItem@12 -NtUserEnableScrollBar@12 -NtUserEndDeferWindowPosEx@8 -NtUserEndMenu@0 -NtUserEndPaint@8 -NtUserEnumDisplayDevices@16 -NtUserEnumDisplayMonitors@16 -NtUserEnumDisplaySettings@16 -NtUserEvent@4 -NtUserExcludeUpdateRgn@8 -NtUserFillWindow@16 -NtUserFindExistingCursorIcon@12 -NtUserFindWindowEx@20 -NtUserFlashWindowEx@4 -NtUserGetAltTabInfo@24 -NtUserGetAncestor@8 -NtUserGetAppImeLevel@4 -NtUserGetAsyncKeyState@4 -NtUserGetCaretBlinkTime@0 -NtUserGetCaretPos@4 -NtUserGetClassInfo@20 -NtUserGetClassName@12 -NtUserGetClipboardData@8 -NtUserGetClipboardFormatName@12 -NtUserGetClipboardOwner@0 -NtUserGetClipboardSequenceNumber@0 -NtUserGetClipboardViewer@0 -NtUserGetClipCursor@4 -NtUserGetComboBoxInfo@8 -NtUserGetControlBrush@12 -NtUserGetControlColor@16 -NtUserGetCPD@12 -NtUserGetCursorFrameInfo@16 -NtUserGetCursorInfo@4 -NtUserGetDC@4 -NtUserGetDCEx@12 -NtUserGetDoubleClickTime@0 -NtUserGetForegroundWindow@0 -NtUserGetGuiResources@8 -NtUserGetGUIThreadInfo@8 -NtUserGetIconInfo@24 -NtUserGetIconSize@16 -NtUserGetImeHotKey@16 -NtUserGetImeInfoEx@8 -NtUserGetInternalWindowPos@12 -NtUserGetKeyboardLayoutList@8 -NtUserGetKeyboardLayoutName@4 -NtUserGetKeyboardState@4 -NtUserGetKeyNameText@12 -NtUserGetKeyState@4 -NtUserGetListBoxInfo@4 -NtUserGetMenuBarInfo@16 -NtUserGetMenuIndex@8 -NtUserGetMenuItemRect@16 -NtUserGetMessage@16 -NtUserGetMouseMovePointsEx@20 -NtUserGetObjectInformation@20 -NtUserGetOpenClipboardWindow@0 -NtUserGetPriorityClipboardFormat@8 -NtUserGetProcessWindowStation@0 -NtUserGetScrollBarInfo@12 -NtUserGetSystemMenu@8 -NtUserGetThreadDesktop@8 -NtUserGetThreadState@4 -NtUserGetTitleBarInfo@8 -NtUserGetUpdateRect@12 -NtUserGetUpdateRgn@12 -NtUserGetWindowDC@4 -NtUserGetWindowPlacement@8 -NtUserGetWOWClass@8 -NtUserHardErrorControl@12 -NtUserHideCaret@4 -NtUserHiliteMenuItem@16 -NtUserImpersonateDdeClientWindow@8 -NtUserInitialize@12 -NtUserInitializeClientPfnArrays@16 -NtUserInitTask@44 -NtUserInternalGetWindowText@12 -NtUserInvalidateRect@12 -NtUserInvalidateRgn@12 -NtUserIsClipboardFormatAvailable@4 -NtUserKillTimer@8 -NtUserLoadKeyboardLayoutEx@24 -NtUserLockWindowStation@4 -NtUserLockWindowUpdate@4 -NtUserLockWorkStation@0 -NtUserMapVirtualKeyEx@16 -NtUserMenuItemFromPoint@16 -NtUserMessageCall@28 -NtUserMinMaximize@12 -NtUserMNDragLeave@4 -NtUserMNDragOver@8 -NtUserModifyUserStartupInfoFlags@8 -NtUserMoveWindow@24 -NtUserNotifyIMEStatus@12 -NtUserNotifyProcessCreate@16 -NtUserNotifyWinEvent@16 -NtUserOpenClipboard@8 -NtUserOpenDesktop@12 -NtUserOpenInputDesktop@12 -NtUserOpenWindowStation@8 -NtUserPaintDesktop@4 -NtUserPeekMessage@20 -NtUserPostMessage@16 -NtUserPostThreadMessage@16 -NtUserProcessConnect@12 -NtUserQueryInformationThread@20 -NtUserQueryInputContext@8 -NtUserQuerySendMessage@4 -NtUserQueryUserCounters@20 -NtUserQueryWindow@8 -NtUserRealChildWindowFromPoint@12 -NtUserRedrawWindow@16 -NtUserRegisterClassExWOW@24 -NtUserRegisterHotKey@16 -NtUserRegisterTasklist@4 -NtUserRegisterWindowMessage@4 -NtUserRemoveMenu@12 -NtUserRemoveProp@8 -NtUserResolveDesktop@16 -NtUserResolveDesktopForWOW@4 -NtUserSBGetParms@16 -NtUserScrollDC@28 -NtUserScrollWindowEx@32 -NtUserSelectPalette@12 -NtUserSendInput@12 -NtUserSendMessageCallback@24 -NtUserSendNotifyMessage@16 -NtUserSetActiveWindow@4 -NtUserSetAppImeLevel@8 -NtUserSetCapture@4 -NtUserSetClassLong@16 -NtUserSetClassWord@12 -NtUserSetClipboardData@12 -NtUserSetClipboardViewer@4 -NtUserSetConsoleReserveKeys@8 -NtUserSetCursor@4 -NtUserSetCursorContents@8 -NtUserSetCursorIconData@16 -NtUserSetDbgTag@8 -NtUserSetFocus@4 -NtUserSetImeHotKey@20 -NtUserSetImeInfoEx@4 -NtUserSetImeOwnerWindow@8 -NtUserSetInformationProcess@16 -NtUserSetInformationThread@20 -NtUserSetInternalWindowPos@16 -NtUserSetKeyboardState@4 -NtUserSetLogonNotifyWindow@4 -NtUserSetMenu@12 -NtUserSetMenuContextHelpId@8 -NtUserSetMenuDefaultItem@12 -NtUserSetMenuFlagRtoL@4 -NtUserSetObjectInformation@16 -NtUserSetParent@8 -NtUserSetProcessWindowStation@4 -NtUserSetProp@12 -NtUserSetRipFlags@8 -NtUserSetScrollInfo@16 -NtUserSetShellWindowEx@8 -NtUserSetSysColors@16 -NtUserSetSystemCursor@8 -NtUserSetSystemMenu@8 -NtUserSetSystemTimer@16 -NtUserSetThreadDesktop@4 -NtUserSetThreadLayoutHandles@8 -NtUserSetThreadState@8 -NtUserSetTimer@16 -NtUserSetWindowFNID@8 -NtUserSetWindowLong@16 -NtUserSetWindowPlacement@8 -NtUserSetWindowPos@28 -NtUserSetWindowRgn@12 -NtUserSetWindowsHookAW@12 -NtUserSetWindowsHookEx@24 -NtUserSetWindowStationUser@16 -NtUserSetWindowWord@12 -NtUserSetWinEventHook@32 -NtUserShowCaret@4 -NtUserShowScrollBar@12 -NtUserShowWindow@8 -NtUserShowWindowAsync@8 -NtUserSoundSentry@0 -NtUserSwitchDesktop@4 -NtUserSystemParametersInfo@16 -NtUserTestForInteractiveUser@4 -NtUserThunkedMenuInfo@8 -NtUserThunkedMenuItemInfo@24 -NtUserToUnicodeEx@28 -NtUserTrackMouseEvent@4 -NtUserTrackPopupMenuEx@24 -NtUserTranslateAccelerator@12 -NtUserTranslateMessage@8 -NtUserUnhookWindowsHookEx@4 -NtUserUnhookWinEvent@4 -NtUserUnloadKeyboardLayout@4 -NtUserUnlockWindowStation@4 -NtUserUnregisterClass@12 -NtUserUnregisterHotKey@8 -NtUserUpdateInputContext@12 -NtUserUpdateInstance@12 -NtUserUpdateLayeredWindow@36 -NtUserSetLayeredWindowAttributes@16 -NtUserUpdatePerUserSystemParameters@8 -NtUserUserHandleGrantAccess@12 -NtUserValidateHandleSecure@4 -NtUserValidateRect@8 -NtUserVkKeyScanEx@12 -NtUserWaitForInputIdle@12 -NtUserWaitForMsgAndEvent@4 -NtUserWaitMessage@0 -NtUserWin32PoolAllocationStats@24 -NtUserWindowFromPoint@8 -NtUserYieldTask@0 -NtUserRemoteConnect@12 -NtUserRemoteRedrawRectangle@16 -NtUserRemoteRedrawScreen@0 -NtUserRemoteStopScreenUpdates@0 -NtUserCtxDisplayIOCtl@12 -NtGdiEngAssociateSurface@12 -NtGdiEngCreateBitmap@24 -NtGdiEngCreateDeviceSurface@16 -NtGdiEngCreateDeviceBitmap@16 -NtGdiEngCreatePalette@24 -NtGdiEngComputeGlyphSet@12 -NtGdiEngCopyBits@24 -NtGdiEngDeletePalette@4 -NtGdiEngDeleteSurface@4 -NtGdiEngEraseSurface@12 -NtGdiEngUnlockSurface@4 -NtGdiEngLockSurface@4 -NtGdiEngBitBlt@44 -NtGdiEngStretchBlt@44 -NtGdiEngPlgBlt@44 -NtGdiEngMarkBandingSurface@4 -NtGdiEngStrokePath@32 -NtGdiEngFillPath@28 -NtGdiEngStrokeAndFillPath@40 -NtGdiEngPaint@20 -NtGdiEngLineTo@36 -NtGdiEngAlphaBlend@28 -NtGdiEngGradientFill@40 -NtGdiEngTransparentBlt@32 -NtGdiEngTextOut@40 -NtGdiEngStretchBltROP@52 -NtGdiXLATEOBJ_cGetPalette@16 -NtGdiXLATEOBJ_iXlate@8 -NtGdiXLATEOBJ_hGetColorTransform@4 -NtGdiCLIPOBJ_bEnum@12 -NtGdiCLIPOBJ_cEnumStart@20 -NtGdiCLIPOBJ_ppoGetPath@4 -NtGdiEngDeletePath@4 -NtGdiEngCreateClip@0 -NtGdiEngDeleteClip@4 -NtGdiBRUSHOBJ_ulGetBrushColor@4 -NtGdiBRUSHOBJ_pvAllocRbrush@8 -NtGdiBRUSHOBJ_pvGetRbrush@4 -NtGdiBRUSHOBJ_hGetColorTransform@4 -NtGdiXFORMOBJ_bApplyXform@20 -NtGdiXFORMOBJ_iGetXform@8 -NtGdiFONTOBJ_vGetInfo@12 -NtGdiFONTOBJ_pxoGetXform@4 -NtGdiFONTOBJ_cGetGlyphs@20 -NtGdiFONTOBJ_pifi@4 -NtGdiFONTOBJ_pfdg@4 -NtGdiFONTOBJ_pQueryGlyphAttrs@8 -NtGdiFONTOBJ_pvTrueTypeFontFile@8 -NtGdiFONTOBJ_cGetAllGlyphHandles@8 -NtGdiSTROBJ_bEnum@12 -NtGdiSTROBJ_bEnumPositionsOnly@12 -NtGdiSTROBJ_bGetAdvanceWidths@16 -NtGdiSTROBJ_vEnumStart@4 -NtGdiSTROBJ_dwGetCodePage@4 -NtGdiPATHOBJ_vGetBounds@8 -NtGdiPATHOBJ_bEnum@8 -NtGdiPATHOBJ_vEnumStart@4 -NtGdiPATHOBJ_vEnumStartClipLines@16 -NtGdiPATHOBJ_bEnumClipLines@12 -NtGdiGetDhpdev@4 -NtGdiEngCheckAbort@4 -NtGdiHT_Get8BPPFormatPalette@16 -NtGdiHT_Get8BPPMaskPalette@24 -NtGdiUpdateTransform@4 -NtUserValidateTimerCallback@12 diff --git a/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.rbuild b/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.rbuild deleted file mode 100644 index 2531c46ca48..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_2ksp4/w32kdll_2ksp4.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - 0x0502 - w32kdll_2ksp4.S - main.c - diff --git a/rostests/apitests/w32kdll/w32kdll_ros/main.c b/rostests/apitests/w32kdll/w32kdll_ros/main.c deleted file mode 100644 index 13a149cc27e..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_ros/main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include - -#ifdef BUILD_DLL - #define DLL_EXPORT __declspec(dllexport) -#else - #define DLL_EXPORT -#endif - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - // attach to process - // return FALSE to fail DLL load - break; - - case DLL_PROCESS_DETACH: - // detach from process - break; - - case DLL_THREAD_ATTACH: - // attach to thread - break; - - case DLL_THREAD_DETACH: - // detach from thread - break; - } - return TRUE; // succesful -} diff --git a/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.def b/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.def deleted file mode 100644 index ec3c7cc0805..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.def +++ /dev/null @@ -1,679 +0,0 @@ -; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ -; -; ReactOS Operating System -; -; This file contains all win32k native api functions from win xp -; unsupported functions are commented out. -; -LIBRARY w32kdll.dll - -EXPORTS -NtGdiAbortDoc@4 -NtGdiAbortPath@4 -NtGdiAddFontResourceW@24 -NtGdiAddRemoteFontToDC@16 -NtGdiAddFontMemResourceEx@20 -NtGdiRemoveMergeFont@8 -NtGdiAddRemoteMMInstanceToDC@12 -NtGdiAlphaBlend@48 -NtGdiAngleArc@24 -NtGdiAnyLinkedFonts@0 -NtGdiFontIsLinked@4 -NtGdiArcInternal@40 -NtGdiBeginPath@4 -NtGdiBitBlt@44 -NtGdiCancelDC@4 -NtGdiCheckBitmapBits@32 -NtGdiCloseFigure@4 -NtGdiClearBitmapAttributes@8 -NtGdiClearBrushAttributes@8 -NtGdiColorCorrectPalette@24 -NtGdiCombineRgn@16 -NtGdiCombineTransform@12 -NtGdiComputeXformCoefficients@4 -NtGdiConsoleTextOut@16 -NtGdiConvertMetafileRect@8 -NtGdiCreateBitmap@20 -NtGdiCreateClientObj@4 -NtGdiCreateColorSpace@4 -NtGdiCreateColorTransform@32 -NtGdiCreateCompatibleBitmap@12 -NtGdiCreateCompatibleDC@4 -NtGdiCreateDIBBrush@24 -NtGdiCreateDIBitmapInternal@44 -NtGdiCreateDIBSection@36 -NtGdiCreateEllipticRgn@16 -NtGdiCreateHalftonePalette@4 -NtGdiCreateHatchBrushInternal@12 -NtGdiCreateMetafileDC@4 -NtGdiCreatePaletteInternal@8 -NtGdiCreatePatternBrushInternal@12 -NtGdiCreatePen@16 -NtGdiCreateRectRgn@16 -NtGdiCreateRoundRectRgn@24 -NtGdiCreateServerMetaFile@24 -NtGdiCreateSolidBrush@8 -NtGdiD3dContextCreate@16 -NtGdiD3dContextDestroy@4 -NtGdiD3dContextDestroyAll@4 -NtGdiD3dValidateTextureStageState@4 -NtGdiD3dDrawPrimitives2@28 -NtGdiDdGetDriverState@4 -NtGdiDdAddAttachedSurface@12 -NtGdiDdAlphaBlt@12 -NtGdiDdAttachSurface@8 -NtGdiDdBeginMoCompFrame@8 -NtGdiDdBlt@12 -NtGdiDdCanCreateSurface@8 -NtGdiDdCanCreateD3DBuffer@8 -NtGdiDdColorControl@8 -NtGdiDdCreateDirectDrawObject@4 -NtGdiDdCreateSurface@32 -NtGdiDdCreateD3DBuffer@32 -NtGdiDdCreateMoComp@8 -NtGdiDdCreateSurfaceObject@24 -NtGdiDdDeleteDirectDrawObject@4 -NtGdiDdDeleteSurfaceObject@4 -NtGdiDdDestroyMoComp@8 -NtGdiDdDestroySurface@8 -NtGdiDdDestroyD3DBuffer@4 -NtGdiDdEndMoCompFrame@8 -NtGdiDdFlip@20 -NtGdiDdFlipToGDISurface@8 -NtGdiDdGetAvailDriverMemory@8 -NtGdiDdGetBltStatus@8 -NtGdiDdGetDC@8 -NtGdiDdGetDriverInfo@8 -NtGdiDdGetDxHandle@12 -NtGdiDdGetFlipStatus@8 -NtGdiDdGetInternalMoCompInfo@8 -NtGdiDdGetMoCompBuffInfo@8 -NtGdiDdGetMoCompGuids@8 -NtGdiDdGetMoCompFormats@8 -NtGdiDdGetScanLine@8 -NtGdiDdLock@12 -NtGdiDdLockD3D@8 -NtGdiDdQueryDirectDrawObject@44 -NtGdiDdQueryMoCompStatus@8 -NtGdiDdReenableDirectDrawObject@8 -NtGdiDdReleaseDC@4 -NtGdiDdRenderMoComp@8 -NtGdiDdResetVisrgn@8 -NtGdiDdSetColorKey@8 -NtGdiDdSetExclusiveMode@8 -NtGdiDdSetGammaRamp@12 -NtGdiDdCreateSurfaceEx@12 -NtGdiDdSetOverlayPosition@12 -NtGdiDdUnattachSurface@8 -NtGdiDdUnlock@8 -NtGdiDdUnlockD3D@8 -NtGdiDdUpdateOverlay@12 -NtGdiDdWaitForVerticalBlank@8 -NtGdiDvpCanCreateVideoPort@8 -NtGdiDvpColorControl@8 -NtGdiDvpCreateVideoPort@8 -NtGdiDvpDestroyVideoPort@8 -NtGdiDvpFlipVideoPort@16 -NtGdiDvpGetVideoPortBandwidth@8 -NtGdiDvpGetVideoPortField@8 -NtGdiDvpGetVideoPortFlipStatus@8 -NtGdiDvpGetVideoPortInputFormats@8 -NtGdiDvpGetVideoPortLine@8 -NtGdiDvpGetVideoPortOutputFormats@8 -NtGdiDvpGetVideoPortConnectInfo@8 -NtGdiDvpGetVideoSignalStatus@8 -NtGdiDvpUpdateVideoPort@16 -NtGdiDvpWaitForVideoPortSync@8 -NtGdiDvpAcquireNotification@12 -NtGdiDvpReleaseNotification@8 -NtGdiDxgGenericThunk@24 -NtGdiDeleteClientObj@4 -NtGdiDeleteColorSpace@4 -NtGdiDeleteColorTransform@8 -NtGdiDeleteObjectApp@4 -NtGdiDescribePixelFormat@16 -NtGdiGetPerBandInfo@8 -NtGdiDoBanding@16 -NtGdiDoPalette@24 -NtGdiDrawEscape@16 -NtGdiEllipse@20 -NtGdiEnableEudc@4 -NtGdiEndDoc@4 -NtGdiEndPage@4 -NtGdiEndPath@4 -NtGdiEnumFontChunk@20 -NtGdiEnumFontClose@4 -NtGdiEnumFontOpen@28 -NtGdiEnumObjects@16 -NtGdiEqualRgn@8 -NtGdiEudcLoadUnloadLink@28 -NtGdiExcludeClipRect@20 -NtGdiExtCreatePen@44 -NtGdiExtCreateRegion@12 -NtGdiExtEscape@32 -NtGdiExtFloodFill@20 -NtGdiExtGetObjectW@12 -NtGdiExtSelectClipRgn@12 -NtGdiExtTextOutW@36 -NtGdiFillPath@4 -NtGdiFillRgn@12 -NtGdiFlattenPath@4 -NtGdiFlushUserBatch@0 -NtGdiFlush@0 -NtGdiForceUFIMapping@8 -NtGdiFrameRgn@20 -NtGdiFullscreenControl@20 -NtGdiGetAndSetDCDword@16 -NtGdiGetAppClipBox@8 -NtGdiGetBitmapBits@12 -NtGdiGetBitmapDimension@8 -NtGdiGetBoundsRect@12 -NtGdiGetCharABCWidthsW@24 -NtGdiGetCharacterPlacementW@24 -NtGdiGetCharSet@4 -NtGdiGetCharWidthW@24 -NtGdiGetCharWidthInfo@8 -NtGdiGetColorAdjustment@8 -NtGdiGetColorSpaceforBitmap@4 -NtGdiGetDCDword@12 -NtGdiGetDCforBitmap@4 -NtGdiGetDCObject@8 -NtGdiGetDCPoint@12 -NtGdiGetDeviceCaps@8 -NtGdiGetDeviceGammaRamp@8 -NtGdiGetDeviceCapsAll@8 -NtGdiGetDIBitsInternal@36 -NtGdiGetETM@8 -NtGdiGetEudcTimeStampEx@12 -NtGdiGetFontData@20 -NtGdiGetFontResourceInfoInternalW@28 -NtGdiGetGlyphIndicesW@20 -NtGdiGetGlyphIndicesWInternal@24 -NtGdiGetGlyphOutline@32 -NtGdiGetKerningPairs@12 -NtGdiGetLinkedUFIs@12 -NtGdiGetMiterLimit@8 -NtGdiGetMonitorID@12 -NtGdiGetNearestColor@8 -NtGdiGetNearestPaletteIndex@8 -NtGdiGetObjectBitmapHandle@8 -NtGdiGetOutlineTextMetricsInternalW@16 -NtGdiGetPath@16 -NtGdiGetPixel@12 -NtGdiGetRandomRgn@12 -NtGdiGetRasterizerCaps@8 -NtGdiGetRealizationInfo@12 -NtGdiGetRegionData@12 -NtGdiGetRgnBox@8 -NtGdiGetServerMetaFileBits@28 -NtGdiGetSpoolMessage@16 -NtGdiGetStats@20 -NtGdiGetStockObject@4 -NtGdiGetStringBitmapW@20 -NtGdiGetSystemPaletteUse@4 -NtGdiGetTextCharsetInfo@12 -NtGdiGetTextExtent@20 -NtGdiGetTextExtentExW@32 -NtGdiGetTextFaceW@16 -NtGdiGetTextMetricsW@12 -NtGdiGetTransform@12 -NtGdiGetUFI@24 -NtGdiGetEmbUFI@28 -NtGdiGetUFIPathname@40 -NtGdiGetEmbedFonts@0 -NtGdiChangeGhostFont@8 -NtGdiAddEmbFontToDC@8 -NtGdiGetFontUnicodeRanges@8 -NtGdiGetWidthTable@28 -NtGdiGradientFill@24 -NtGdiHfontCreate@20 -NtGdiIcmBrushInfo@32 -NtGdiInit@0 -NtGdiInitSpool@0 -NtGdiIntersectClipRect@20 -NtGdiInvertRgn@8 -NtGdiLineTo@12 -NtGdiMakeFontDir@20 -NtGdiMakeInfoDC@8 -NtGdiMaskBlt@52 -NtGdiModifyWorldTransform@12 -NtGdiMonoBitmap@4 -NtGdiMoveTo@16 -NtGdiOffsetClipRgn@12 -NtGdiOffsetRgn@12 -NtGdiOpenDCW@28 -NtGdiPatBlt@24 -NtGdiPolyPatBlt@20 -NtGdiPathToRegion@4 -NtGdiPlgBlt@44 -NtGdiPolyDraw@16 -NtGdiPolyPolyDraw@20 -NtGdiPolyTextOutW@16 -NtGdiPtInRegion@12 -NtGdiPtVisible@12 -NtGdiQueryFonts@12 -NtGdiQueryFontAssocInfo@4 -NtGdiRectangle@20 -NtGdiRectInRegion@8 -NtGdiRectVisible@8 -NtGdiRemoveFontResourceW@24 -NtGdiRemoveFontMemResourceEx@4 -NtGdiResetDC@20 -NtGdiResizePalette@8 -NtGdiRestoreDC@8 -NtGdiRoundRect@28 -NtGdiSaveDC@4 -NtGdiScaleViewportExtEx@24 -NtGdiScaleWindowExtEx@24 -NtGdiSelectBitmap@8 -NtGdiSelectBrush@8 -NtGdiSelectClipPath@8 -NtGdiSelectFont@8 -NtGdiSelectPen@8 -NtGdiSetBitmapAttributes@8 -NtGdiSetBitmapBits@12 -NtGdiSetBitmapDimension@16 -NtGdiSetBoundsRect@12 -NtGdiSetBrushAttributes@8 -NtGdiSetBrushOrg@16 -NtGdiSetColorAdjustment@8 -NtGdiSetColorSpace@8 -NtGdiSetDeviceGammaRamp@8 -NtGdiSetDIBitsToDeviceInternal@64 -NtGdiSetFontEnumeration@4 -NtGdiSetFontXform@12 -NtGdiSetIcmMode@12 -NtGdiSetLinkedUFIs@12 -NtGdiSetMagicColors@12 -NtGdiSetMetaRgn@4 -NtGdiSetMiterLimit@12 -NtGdiGetDeviceWidth@4 -NtGdiMirrorWindowOrg@4 -NtGdiSetLayout@12 -NtGdiSetPixel@16 -NtGdiSetPixelFormat@8 -NtGdiSetRectRgn@20 -NtGdiSetSystemPaletteUse@8 -NtGdiSetTextJustification@12 -NtGdiSetupPublicCFONT@12 -NtGdiSetVirtualResolution@20 -NtGdiSetSizeDevice@12 -NtGdiStartDoc@16 -NtGdiStartPage@4 -NtGdiStretchBlt@48 -NtGdiStretchDIBitsInternal@64 -NtGdiStrokeAndFillPath@4 -NtGdiStrokePath@4 -NtGdiSwapBuffers@4 -NtGdiTransformPoints@20 -NtGdiTransparentBlt@44 -NtGdiUnloadPrinterDriver@8 -NtGdiUnmapMemFont@4 -NtGdiUnrealizeObject@4 -NtGdiUpdateColors@4 -NtGdiWidenPath@4 -NtUserActivateKeyboardLayout@8 -NtUserAlterWindowStyle@12 -NtUserAssociateInputContext@12 -NtUserAttachThreadInput@12 -NtUserBeginPaint@8 -NtUserBitBltSysBmp@32 -NtUserBlockInput@4 -NtUserBuildHimcList@16 -NtUserBuildHwndList@28 -NtUserBuildNameList@16 -NtUserBuildPropList@16 -NtUserCallHwnd@8 -NtUserCallHwndLock@8 -NtUserCallHwndOpt@8 -NtUserCallHwndParam@12 -NtUserCallHwndParamLock@12 -NtUserCallMsgFilter@8 -NtUserCallNextHookEx@16 -NtUserCallNoParam@4 -NtUserCallOneParam@8 -NtUserCallTwoParam@12 -NtUserChangeClipboardChain@8 -NtUserChangeDisplaySettings@20 -NtUserCheckImeHotKey@8 -NtUserCheckMenuItem@12 -NtUserChildWindowFromPointEx@16 -NtUserClipCursor@4 -NtUserCloseClipboard@0 -NtUserCloseDesktop@4 -NtUserCloseWindowStation@4 -NtUserConsoleControl@12 -NtUserConvertMemHandle@8 -NtUserCopyAcceleratorTable@12 -NtUserCountClipboardFormats@0 -NtUserCreateAcceleratorTable@8 -NtUserCreateCaret@16 -NtUserCreateDesktop@20 -NtUserCreateInputContext@4 -NtUserCreateLocalMemHandle@16 -NtUserCreateWindowEx@60 -NtUserCreateWindowStation@28 -NtUserDdeGetQualityOfService@12 -NtUserDdeInitialize@20 -NtUserDdeSetQualityOfService@12 -NtUserDeferWindowPos@32 -NtUserDefSetText@8 -NtUserDeleteMenu@12 -NtUserDestroyAcceleratorTable@4 -NtUserDestroyCursor@8 -NtUserDestroyInputContext@4 -NtUserDestroyMenu@4 -NtUserDestroyWindow@4 -NtUserDisableThreadIme@4 -NtUserDispatchMessage@4 -NtUserDragDetect@12 -NtUserDragObject@20 -NtUserDrawAnimatedRects@16 -NtUserDrawCaption@16 -NtUserDrawCaptionTemp@28 -NtUserDrawIconEx@44 -NtUserDrawMenuBarTemp@20 -NtUserEmptyClipboard@0 -NtUserEnableMenuItem@12 -NtUserEnableScrollBar@12 -NtUserEndDeferWindowPosEx@8 -NtUserEndMenu@0 -NtUserEndPaint@8 -NtUserEnumDisplayDevices@16 -;NtUserEnumDisplayMonitors@16 -NtUserEnumDisplaySettings@16 -NtUserEvent@4 -NtUserExcludeUpdateRgn@8 -NtUserFillWindow@16 -;NtUserFindExistingCursorIcon@12 -NtUserFindWindowEx@20 -NtUserFlashWindowEx@4 -NtUserGetAltTabInfo@24 -NtUserGetAncestor@8 -;NtUserGetAppImeLevel@4 -NtUserGetAsyncKeyState@4 -NtUserGetAtomName@8 -NtUserGetCaretBlinkTime@0 -NtUserGetCaretPos@4 -;NtUserGetClassInfo@20 -NtUserGetClassName@12 -NtUserGetClipboardData@8 -NtUserGetClipboardFormatName@12 -NtUserGetClipboardOwner@0 -NtUserGetClipboardSequenceNumber@0 -NtUserGetClipboardViewer@0 -NtUserGetClipCursor@4 -NtUserGetComboBoxInfo@8 -NtUserGetControlBrush@12 -NtUserGetControlColor@16 -NtUserGetCPD@12 -NtUserGetCursorFrameInfo@16 -NtUserGetCursorInfo@4 -NtUserGetDC@4 -NtUserGetDCEx@12 -NtUserGetDoubleClickTime@0 -NtUserGetForegroundWindow@0 -NtUserGetGuiResources@8 -NtUserGetGUIThreadInfo@8 -NtUserGetIconInfo@24 -NtUserGetIconSize@16 -NtUserGetImeHotKey@16 -NtUserGetImeInfoEx@8 -NtUserGetInternalWindowPos@12 -NtUserGetKeyboardLayoutList@8 -NtUserGetKeyboardLayoutName@4 -NtUserGetKeyboardState@4 -NtUserGetKeyNameText@12 -NtUserGetKeyState@4 -NtUserGetListBoxInfo@4 -NtUserGetMenuBarInfo@16 -NtUserGetMenuIndex@8 -NtUserGetMenuItemRect@16 -NtUserGetMessage@16 -NtUserGetMouseMovePointsEx@20 -NtUserGetObjectInformation@20 -NtUserGetOpenClipboardWindow@0 -NtUserGetPriorityClipboardFormat@8 -NtUserGetProcessWindowStation@0 -NtUserGetRawInputBuffer@12 -NtUserGetRawInputData@20 -NtUserGetRawInputDeviceInfo@16 -NtUserGetRawInputDeviceList@12 -NtUserGetRegisteredRawInputDevices@12 -NtUserGetScrollBarInfo@12 -NtUserGetSystemMenu@8 -NtUserGetThreadDesktop@8 -NtUserGetThreadState@4 -NtUserGetTitleBarInfo@8 -NtUserGetUpdateRect@12 -NtUserGetUpdateRgn@12 -NtUserGetWindowDC@4 -NtUserGetWindowPlacement@8 -NtUserGetWOWClass@8 -NtUserHardErrorControl@12 -NtUserHideCaret@4 -NtUserHiliteMenuItem@16 -NtUserImpersonateDdeClientWindow@8 -NtUserInitialize@12 -NtUserInitializeClientPfnArrays@16 -;NtUserInitTask@48 -NtUserInternalGetWindowText@12 -NtUserInvalidateRect@12 -NtUserInvalidateRgn@12 -NtUserIsClipboardFormatAvailable@4 -NtUserKillTimer@8 -NtUserLoadKeyboardLayoutEx@28 -NtUserLockWindowStation@4 -NtUserLockWindowUpdate@4 -NtUserLockWorkStation@0 -NtUserMapVirtualKeyEx@16 -NtUserMenuItemFromPoint@16 -NtUserMessageCall@28 -NtUserMinMaximize@12 -NtUserMNDragLeave@0 -NtUserMNDragOver@8 -NtUserModifyUserStartupInfoFlags@8 -NtUserMoveWindow@24 -NtUserNotifyIMEStatus@12 -NtUserNotifyProcessCreate@16 -NtUserNotifyWinEvent@16 -NtUserOpenClipboard@8 -NtUserOpenDesktop@12 -NtUserOpenInputDesktop@12 -NtUserOpenWindowStation@8 -NtUserPaintDesktop@4 -NtUserPeekMessage@20 -NtUserPostMessage@16 -NtUserPostThreadMessage@16 -NtUserPrintWindow@12 -NtUserProcessConnect@12 -NtUserQueryInformationThread@20 -NtUserQueryInputContext@8 -NtUserQuerySendMessage@4 -NtUserQueryUserCounters@20 -NtUserQueryWindow@8 -NtUserRealChildWindowFromPoint@12 -NtUserRealInternalGetMessage@24 -NtUserRealWaitMessageEx@8 -NtUserRedrawWindow@16 -NtUserRegisterClassExWOW@28 -NtUserRegisterUserApiHook@8 -NtUserRegisterHotKey@16 -NtUserRegisterRawInputDevices@12 -NtUserRegisterTasklist@4 -NtUserRegisterWindowMessage@4 -NtUserRemoveMenu@12 -NtUserRemoveProp@8 -NtUserResolveDesktop@16 -NtUserResolveDesktopForWOW@4 -NtUserSBGetParms@16 -NtUserScrollDC@28 -NtUserScrollWindowEx@32 -NtUserSelectPalette@12 -NtUserSendInput@12 -NtUserSetActiveWindow@4 -NtUserSetAppImeLevel@8 -NtUserSetCapture@4 -NtUserSetClassLong@16 -NtUserSetClassWord@12 -NtUserSetClipboardData@12 -NtUserSetClipboardViewer@4 -NtUserSetConsoleReserveKeys@8 -NtUserSetCursor@4 -NtUserSetCursorContents@8 -;NtUserSetCursorIconData@16 -NtUserSetDbgTag@8 -NtUserSetFocus@4 -NtUserSetImeHotKey@20 -NtUserSetImeInfoEx@4 -NtUserSetImeOwnerWindow@8 -NtUserSetInformationProcess@16 -NtUserSetInformationThread@16 -NtUserSetInternalWindowPos@16 -NtUserSetKeyboardState@4 -NtUserSetLogonNotifyWindow@4 -NtUserSetMenu@12 -NtUserSetMenuContextHelpId@8 -NtUserSetMenuDefaultItem@12 -NtUserSetMenuFlagRtoL@4 -NtUserSetObjectInformation@16 -NtUserSetParent@8 -NtUserSetProcessWindowStation@4 -NtUserSetProp@12 -NtUserSetRipFlags@8 -NtUserSetScrollInfo@16 -NtUserSetShellWindowEx@8 -NtUserSetSysColors@16 -NtUserSetSystemCursor@8 -NtUserSetSystemMenu@8 -NtUserSetSystemTimer@16 -NtUserSetThreadDesktop@4 -NtUserSetThreadLayoutHandles@8 -NtUserSetThreadState@8 -NtUserSetTimer@16 -NtUserSetWindowFNID@8 -NtUserSetWindowLong@16 -NtUserSetWindowPlacement@8 -NtUserSetWindowPos@28 -NtUserSetWindowRgn@12 -NtUserSetWindowsHookAW@12 -NtUserSetWindowsHookEx@24 -NtUserSetWindowStationUser@16 -NtUserSetWindowWord@12 -NtUserSetWinEventHook@32 -NtUserShowCaret@4 -NtUserShowScrollBar@12 -NtUserShowWindow@8 -NtUserShowWindowAsync@8 -NtUserSoundSentry@0 -NtUserSwitchDesktop@4 -NtUserSystemParametersInfo@16 -NtUserTestForInteractiveUser@4 -NtUserThunkedMenuInfo@8 -NtUserThunkedMenuItemInfo@24 -NtUserToUnicodeEx@28 -NtUserTrackMouseEvent@4 -NtUserTrackPopupMenuEx@24 -NtUserCalcMenuBar@20 -NtUserPaintMenuBar@24 -NtUserTranslateAccelerator@12 -NtUserTranslateMessage@8 -NtUserUnhookWindowsHookEx@4 -NtUserUnhookWinEvent@4 -NtUserUnloadKeyboardLayout@4 -NtUserUnlockWindowStation@4 -;NtUserUnregisterClass@12 -NtUserUnregisterUserApiHook@0 -NtUserUnregisterHotKey@8 -NtUserUpdateInputContext@12 -NtUserUpdateInstance@12 -NtUserUpdateLayeredWindow@36 -NtUserGetLayeredWindowAttributes@16 -NtUserSetLayeredWindowAttributes@16 -NtUserUpdatePerUserSystemParameters@8 -NtUserUserHandleGrantAccess@12 -NtUserValidateHandleSecure@8 -NtUserValidateRect@8 -NtUserValidateTimerCallback@12 -NtUserVkKeyScanEx@12 -NtUserWaitForInputIdle@12 -NtUserWaitForMsgAndEvent@4 -NtUserWaitMessage@0 -NtUserWin32PoolAllocationStats@24 -NtUserWindowFromPoint@8 -NtUserYieldTask@0 -NtUserRemoteConnect@12 -NtUserRemoteRedrawRectangle@16 -NtUserRemoteRedrawScreen@0 -NtUserRemoteStopScreenUpdates@0 -NtUserCtxDisplayIOCtl@12 -NtGdiEngAssociateSurface@12 -NtGdiEngCreateBitmap@24 -NtGdiEngCreateDeviceSurface@16 -NtGdiEngCreateDeviceBitmap@16 -NtGdiEngCreatePalette@24 -NtGdiEngComputeGlyphSet@12 -NtGdiEngCopyBits@24 -NtGdiEngDeletePalette@4 -NtGdiEngDeleteSurface@4 -NtGdiEngEraseSurface@12 -NtGdiEngUnlockSurface@4 -NtGdiEngLockSurface@4 -NtGdiEngBitBlt@44 -NtGdiEngStretchBlt@44 -NtGdiEngPlgBlt@44 -NtGdiEngMarkBandingSurface@4 -NtGdiEngStrokePath@32 -NtGdiEngFillPath@28 -NtGdiEngStrokeAndFillPath@40 -NtGdiEngPaint@20 -NtGdiEngLineTo@36 -NtGdiEngAlphaBlend@28 -NtGdiEngGradientFill@40 -NtGdiEngTransparentBlt@32 -NtGdiEngTextOut@40 -NtGdiEngStretchBltROP@52 -NtGdiXLATEOBJ_cGetPalette@16 -NtGdiXLATEOBJ_iXlate@8 -NtGdiXLATEOBJ_hGetColorTransform@4 -NtGdiCLIPOBJ_bEnum@12 -NtGdiCLIPOBJ_cEnumStart@20 -NtGdiCLIPOBJ_ppoGetPath@4 -NtGdiEngDeletePath@4 -NtGdiEngCreateClip@0 -NtGdiEngDeleteClip@4 -NtGdiBRUSHOBJ_ulGetBrushColor@4 -NtGdiBRUSHOBJ_pvAllocRbrush@8 -NtGdiBRUSHOBJ_pvGetRbrush@4 -NtGdiBRUSHOBJ_hGetColorTransform@4 -NtGdiXFORMOBJ_bApplyXform@20 -NtGdiXFORMOBJ_iGetXform@8 -NtGdiFONTOBJ_vGetInfo@12 -NtGdiFONTOBJ_pxoGetXform@4 -NtGdiFONTOBJ_cGetGlyphs@20 -NtGdiFONTOBJ_pifi@4 -NtGdiFONTOBJ_pfdg@4 -NtGdiFONTOBJ_pQueryGlyphAttrs@8 -NtGdiFONTOBJ_pvTrueTypeFontFile@8 -NtGdiFONTOBJ_cGetAllGlyphHandles@8 -NtGdiSTROBJ_bEnum@12 -NtGdiSTROBJ_bEnumPositionsOnly@12 -NtGdiSTROBJ_bGetAdvanceWidths@16 -NtGdiSTROBJ_vEnumStart@4 -NtGdiSTROBJ_dwGetCodePage@4 -NtGdiPATHOBJ_vGetBounds@8 -NtGdiPATHOBJ_bEnum@8 -NtGdiPATHOBJ_vEnumStart@4 -NtGdiPATHOBJ_vEnumStartClipLines@16 -NtGdiPATHOBJ_bEnumClipLines@12 -NtGdiGetDhpdev@4 -NtGdiEngCheckAbort@4 -NtGdiHT_Get8BPPFormatPalette@16 -NtGdiHT_Get8BPPMaskPalette@24 -NtGdiUpdateTransform@4 -NtGdiSetPUMPDOBJ@16 -NtGdiBRUSHOBJ_DeleteRbrush@8 -NtGdiUMPDEngFreeUserMem@4 -NtGdiUnmapMemFont@4 -NtGdiDrawStream@12 - diff --git a/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.rbuild b/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.rbuild deleted file mode 100644 index 1cd91ce10a9..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - 0x0502 - win32ksys - main.c - diff --git a/rostests/apitests/w32kdll/w32kdll_vista/main.c b/rostests/apitests/w32kdll/w32kdll_vista/main.c deleted file mode 100644 index ea545d282a5..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_vista/main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include - -#ifdef BUILD_DLL - #define DLL_EXPORT __declspec(dllexport) -#else - #define DLL_EXPORT -#endif - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - // attach to process - // return FALSE to fail DLL load - break; - - case DLL_PROCESS_DETACH: - // detach from process - break; - - case DLL_THREAD_ATTACH: - // attach to thread - break; - - case DLL_THREAD_DETACH: - // detach from thread - break; - } - return TRUE; // succesful -} diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.S b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.S deleted file mode 100644 index 728252b3ad8..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.S +++ /dev/null @@ -1,5414 +0,0 @@ -/* FILE: System Call Stubs for Native API - * COPYRIGHT: See COPYING in the top level directory - * PURPOSE: obj-i386\lib\win32ksys\win32k.S - * PROGRAMMER: Computer Generated File. See tools/nci/ncitool.c - * REMARK: DO NOT EDIT OR COMMIT MODIFICATIONS TO THIS FILE - */ - - -#include - -.global _NtGdiAbortDoc@4 -_NtGdiAbortDoc@4: - movl $0x1000, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiAbortPath@4 -_NtGdiAbortPath@4: - movl $0x1001, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiAddFontResourceW@24 -_NtGdiAddFontResourceW@24: - movl $0x1002, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiAddRemoteFontToDC@16 -_NtGdiAddRemoteFontToDC@16: - movl $0x1003, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiAddFontMemResourceEx@20 -_NtGdiAddFontMemResourceEx@20: - movl $0x1004, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiRemoveMergeFont@8 -_NtGdiRemoveMergeFont@8: - movl $0x1005, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiAddRemoteMMInstanceToDC@12 -_NtGdiAddRemoteMMInstanceToDC@12: - movl $0x1006, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiAlphaBlend@48 -_NtGdiAlphaBlend@48: - movl $0x1007, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtGdiAngleArc@24 -_NtGdiAngleArc@24: - movl $0x1008, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiAnyLinkedFonts@0 -_NtGdiAnyLinkedFonts@0: - movl $0x1009, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiFontIsLinked@4 -_NtGdiFontIsLinked@4: - movl $0x100a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiArcInternal@40 -_NtGdiArcInternal@40: - movl $0x100b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiBeginPath@4 -_NtGdiBeginPath@4: - movl $0x100c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBitBlt@44 -_NtGdiBitBlt@44: - movl $0x100d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiCancelDC@4 -_NtGdiCancelDC@4: - movl $0x100e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCheckBitmapBits@32 -_NtGdiCheckBitmapBits@32: - movl $0x100f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiCloseFigure@4 -_NtGdiCloseFigure@4: - movl $0x1010, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiClearBitmapAttributes@8 -_NtGdiClearBitmapAttributes@8: - movl $0x1011, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiClearBrushAttributes@8 -_NtGdiClearBrushAttributes@8: - movl $0x1012, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiColorCorrectPalette@24 -_NtGdiColorCorrectPalette@24: - movl $0x1013, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCombineRgn@16 -_NtGdiCombineRgn@16: - movl $0x1014, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCombineTransform@12 -_NtGdiCombineTransform@12: - movl $0x1015, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiComputeXformCoefficients@4 -_NtGdiComputeXformCoefficients@4: - movl $0x1016, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiConfigureOPMProtectedOutput@16 -_NtGdiConfigureOPMProtectedOutput@16: - movl $0x1017, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiConsoleTextOut@16 -_NtGdiConsoleTextOut@16: - movl $0x1018, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiConvertMetafileRect@8 -_NtGdiConvertMetafileRect@8: - movl $0x1019, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiCreateBitmap@20 -_NtGdiCreateBitmap@20: - movl $0x101a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiCreateClientObj@4 -_NtGdiCreateClientObj@4: - movl $0x101b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateColorSpace@4 -_NtGdiCreateColorSpace@4: - movl $0x101c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateColorTransform@32 -_NtGdiCreateColorTransform@32: - movl $0x101d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiCreateCompatibleBitmap@12 -_NtGdiCreateCompatibleBitmap@12: - movl $0x101e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreateCompatibleDC@4 -_NtGdiCreateCompatibleDC@4: - movl $0x101f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateDIBBrush@24 -_NtGdiCreateDIBBrush@24: - movl $0x1020, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateDIBitmapInternal@44 -_NtGdiCreateDIBitmapInternal@44: - movl $0x1021, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiCreateDIBSection@36 -_NtGdiCreateDIBSection@36: - movl $0x1022, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiCreateEllipticRgn@16 -_NtGdiCreateEllipticRgn@16: - movl $0x1023, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateHalftonePalette@4 -_NtGdiCreateHalftonePalette@4: - movl $0x1024, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateHatchBrushInternal@12 -_NtGdiCreateHatchBrushInternal@12: - movl $0x1025, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreateMetafileDC@4 -_NtGdiCreateMetafileDC@4: - movl $0x1026, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateOPMProtectedOutputs@20 -_NtGdiCreateOPMProtectedOutputs@20: - movl $0x1027, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiCreatePaletteInternal@8 -_NtGdiCreatePaletteInternal@8: - movl $0x1028, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiCreatePatternBrushInternal@12 -_NtGdiCreatePatternBrushInternal@12: - movl $0x1029, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreatePen@16 -_NtGdiCreatePen@16: - movl $0x102a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateRectRgn@16 -_NtGdiCreateRectRgn@16: - movl $0x102b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateRoundRectRgn@24 -_NtGdiCreateRoundRectRgn@24: - movl $0x102c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateServerMetaFile@24 -_NtGdiCreateServerMetaFile@24: - movl $0x102d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateSolidBrush@8 -_NtGdiCreateSolidBrush@8: - movl $0x102e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiD3dContextCreate@16 -_NtGdiD3dContextCreate@16: - movl $0x102f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiD3dContextDestroy@4 -_NtGdiD3dContextDestroy@4: - movl $0x1030, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dContextDestroyAll@4 -_NtGdiD3dContextDestroyAll@4: - movl $0x1031, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dValidateTextureStageState@4 -_NtGdiD3dValidateTextureStageState@4: - movl $0x1032, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dDrawPrimitives2@28 -_NtGdiD3dDrawPrimitives2@28: - movl $0x1033, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiDdGetDriverState@4 -_NtGdiDdGetDriverState@4: - movl $0x1034, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdAddAttachedSurface@12 -_NtGdiDdAddAttachedSurface@12: - movl $0x1035, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdAlphaBlt@12 -_NtGdiDdAlphaBlt@12: - movl $0x1036, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdAttachSurface@8 -_NtGdiDdAttachSurface@8: - movl $0x1037, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdBeginMoCompFrame@8 -_NtGdiDdBeginMoCompFrame@8: - movl $0x1038, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdBlt@12 -_NtGdiDdBlt@12: - movl $0x1039, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdCanCreateSurface@8 -_NtGdiDdCanCreateSurface@8: - movl $0x103a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCanCreateD3DBuffer@8 -_NtGdiDdCanCreateD3DBuffer@8: - movl $0x103b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdColorControl@8 -_NtGdiDdColorControl@8: - movl $0x103c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCreateDirectDrawObject@4 -_NtGdiDdCreateDirectDrawObject@4: - movl $0x103d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdCreateSurface@32 -_NtGdiDdCreateSurface@32: - movl $0x103e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiDdCreateD3DBuffer@32 -_NtGdiDdCreateD3DBuffer@32: - movl $0x103f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiDdCreateMoComp@8 -_NtGdiDdCreateMoComp@8: - movl $0x1040, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCreateSurfaceObject@24 -_NtGdiDdCreateSurfaceObject@24: - movl $0x1041, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDdDeleteDirectDrawObject@4 -_NtGdiDdDeleteDirectDrawObject@4: - movl $0x1042, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDeleteSurfaceObject@4 -_NtGdiDdDeleteSurfaceObject@4: - movl $0x1043, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDestroyMoComp@8 -_NtGdiDdDestroyMoComp@8: - movl $0x1044, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDestroySurface@8 -_NtGdiDdDestroySurface@8: - movl $0x1045, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDestroyD3DBuffer@4 -_NtGdiDdDestroyD3DBuffer@4: - movl $0x1046, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdEndMoCompFrame@8 -_NtGdiDdEndMoCompFrame@8: - movl $0x1047, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdFlip@20 -_NtGdiDdFlip@20: - movl $0x1048, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiDdFlipToGDISurface@8 -_NtGdiDdFlipToGDISurface@8: - movl $0x1049, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetAvailDriverMemory@8 -_NtGdiDdGetAvailDriverMemory@8: - movl $0x104a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetBltStatus@8 -_NtGdiDdGetBltStatus@8: - movl $0x104b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDC@8 -_NtGdiDdGetDC@8: - movl $0x104c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDriverInfo@8 -_NtGdiDdGetDriverInfo@8: - movl $0x104d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDxHandle@12 -_NtGdiDdGetDxHandle@12: - movl $0x104e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdGetFlipStatus@8 -_NtGdiDdGetFlipStatus@8: - movl $0x104f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetInternalMoCompInfo@8 -_NtGdiDdGetInternalMoCompInfo@8: - movl $0x1050, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompBuffInfo@8 -_NtGdiDdGetMoCompBuffInfo@8: - movl $0x1051, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompGuids@8 -_NtGdiDdGetMoCompGuids@8: - movl $0x1052, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompFormats@8 -_NtGdiDdGetMoCompFormats@8: - movl $0x1053, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetScanLine@8 -_NtGdiDdGetScanLine@8: - movl $0x1054, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdLock@12 -_NtGdiDdLock@12: - movl $0x1055, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdLockD3D@8 -_NtGdiDdLockD3D@8: - movl $0x1056, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdQueryDirectDrawObject@44 -_NtGdiDdQueryDirectDrawObject@44: - movl $0x1057, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiDdQueryMoCompStatus@8 -_NtGdiDdQueryMoCompStatus@8: - movl $0x1058, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdReenableDirectDrawObject@8 -_NtGdiDdReenableDirectDrawObject@8: - movl $0x1059, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdReleaseDC@4 -_NtGdiDdReleaseDC@4: - movl $0x105a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdRenderMoComp@8 -_NtGdiDdRenderMoComp@8: - movl $0x105b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdResetVisrgn@8 -_NtGdiDdResetVisrgn@8: - movl $0x105c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetColorKey@8 -_NtGdiDdSetColorKey@8: - movl $0x105d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetExclusiveMode@8 -_NtGdiDdSetExclusiveMode@8: - movl $0x105e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetGammaRamp@12 -_NtGdiDdSetGammaRamp@12: - movl $0x105f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdCreateSurfaceEx@12 -_NtGdiDdCreateSurfaceEx@12: - movl $0x1060, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdSetOverlayPosition@12 -_NtGdiDdSetOverlayPosition@12: - movl $0x1061, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdUnattachSurface@8 -_NtGdiDdUnattachSurface@8: - movl $0x1062, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUnlock@8 -_NtGdiDdUnlock@8: - movl $0x1063, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUnlockD3D@8 -_NtGdiDdUnlockD3D@8: - movl $0x1064, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUpdateOverlay@12 -_NtGdiDdUpdateOverlay@12: - movl $0x1065, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdWaitForVerticalBlank@8 -_NtGdiDdWaitForVerticalBlank@8: - movl $0x1066, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpCanCreateVideoPort@8 -_NtGdiDvpCanCreateVideoPort@8: - movl $0x1067, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpColorControl@8 -_NtGdiDvpColorControl@8: - movl $0x1068, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpCreateVideoPort@8 -_NtGdiDvpCreateVideoPort@8: - movl $0x1069, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpDestroyVideoPort@8 -_NtGdiDvpDestroyVideoPort@8: - movl $0x106a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpFlipVideoPort@16 -_NtGdiDvpFlipVideoPort@16: - movl $0x106b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDvpGetVideoPortBandwidth@8 -_NtGdiDvpGetVideoPortBandwidth@8: - movl $0x106c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortField@8 -_NtGdiDvpGetVideoPortField@8: - movl $0x106d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortFlipStatus@8 -_NtGdiDvpGetVideoPortFlipStatus@8: - movl $0x106e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortInputFormats@8 -_NtGdiDvpGetVideoPortInputFormats@8: - movl $0x106f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortLine@8 -_NtGdiDvpGetVideoPortLine@8: - movl $0x1070, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortOutputFormats@8 -_NtGdiDvpGetVideoPortOutputFormats@8: - movl $0x1071, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortConnectInfo@8 -_NtGdiDvpGetVideoPortConnectInfo@8: - movl $0x1072, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoSignalStatus@8 -_NtGdiDvpGetVideoSignalStatus@8: - movl $0x1073, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpUpdateVideoPort@16 -_NtGdiDvpUpdateVideoPort@16: - movl $0x1074, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDvpWaitForVideoPortSync@8 -_NtGdiDvpWaitForVideoPortSync@8: - movl $0x1075, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpAcquireNotification@12 -_NtGdiDvpAcquireNotification@12: - movl $0x1076, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDvpReleaseNotification@8 -_NtGdiDvpReleaseNotification@8: - movl $0x1077, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDxgGenericThunk@24 -_NtGdiDxgGenericThunk@24: - movl $0x1078, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDeleteClientObj@4 -_NtGdiDeleteClientObj@4: - movl $0x1079, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDeleteColorSpace@4 -_NtGdiDeleteColorSpace@4: - movl $0x107a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDeleteColorTransform@8 -_NtGdiDeleteColorTransform@8: - movl $0x107b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDeleteObjectApp@4 -_NtGdiDeleteObjectApp@4: - movl $0x107c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDescribePixelFormat@16 -_NtGdiDescribePixelFormat@16: - movl $0x107d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDestroyOPMProtectedOutput@4 -_NtGdiDestroyOPMProtectedOutput@4: - movl $0x107e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetPerBandInfo@8 -_NtGdiGetPerBandInfo@8: - movl $0x107f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDoBanding@16 -_NtGdiDoBanding@16: - movl $0x1080, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDoPalette@24 -_NtGdiDoPalette@24: - movl $0x1081, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDrawEscape@16 -_NtGdiDrawEscape@16: - movl $0x1082, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEllipse@20 -_NtGdiEllipse@20: - movl $0x1083, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEnableEudc@4 -_NtGdiEnableEudc@4: - movl $0x1084, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndDoc@4 -_NtGdiEndDoc@4: - movl $0x1085, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndPage@4 -_NtGdiEndPage@4: - movl $0x1086, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndPath@4 -_NtGdiEndPath@4: - movl $0x1087, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEnumFontChunk@20 -_NtGdiEnumFontChunk@20: - movl $0x1088, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEnumFontClose@4 -_NtGdiEnumFontClose@4: - movl $0x1089, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEnumFontOpen@28 -_NtGdiEnumFontOpen@28: - movl $0x108a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEnumObjects@16 -_NtGdiEnumObjects@16: - movl $0x108b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEqualRgn@8 -_NtGdiEqualRgn@8: - movl $0x108c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiEudcLoadUnloadLink@28 -_NtGdiEudcLoadUnloadLink@28: - movl $0x108d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiExcludeClipRect@20 -_NtGdiExcludeClipRect@20: - movl $0x108e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiExtCreatePen@44 -_NtGdiExtCreatePen@44: - movl $0x108f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiExtCreateRegion@12 -_NtGdiExtCreateRegion@12: - movl $0x1090, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtEscape@32 -_NtGdiExtEscape@32: - movl $0x1091, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiExtFloodFill@20 -_NtGdiExtFloodFill@20: - movl $0x1092, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiExtGetObjectW@12 -_NtGdiExtGetObjectW@12: - movl $0x1093, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtSelectClipRgn@12 -_NtGdiExtSelectClipRgn@12: - movl $0x1094, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtTextOutW@36 -_NtGdiExtTextOutW@36: - movl $0x1095, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiFillPath@4 -_NtGdiFillPath@4: - movl $0x1096, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFillRgn@12 -_NtGdiFillRgn@12: - movl $0x1097, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiFlattenPath@4 -_NtGdiFlattenPath@4: - movl $0x1098, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFlush@0 -_NtGdiFlush@0: - movl $0x1099, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiForceUFIMapping@8 -_NtGdiForceUFIMapping@8: - movl $0x109a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFrameRgn@20 -_NtGdiFrameRgn@20: - movl $0x109b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiFullscreenControl@20 -_NtGdiFullscreenControl@20: - movl $0x109c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetAndSetDCDword@16 -_NtGdiGetAndSetDCDword@16: - movl $0x109d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetAppClipBox@8 -_NtGdiGetAppClipBox@8: - movl $0x109e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetBitmapBits@12 -_NtGdiGetBitmapBits@12: - movl $0x109f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetBitmapDimension@8 -_NtGdiGetBitmapDimension@8: - movl $0x10a0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetBoundsRect@12 -_NtGdiGetBoundsRect@12: - movl $0x10a1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetCertificate@16 -_NtGdiGetCertificate@16: - movl $0x10a2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetCertificateSize@12 -_NtGdiGetCertificateSize@12: - movl $0x10a3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetCharABCWidthsW@24 -_NtGdiGetCharABCWidthsW@24: - movl $0x10a4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharacterPlacementW@24 -_NtGdiGetCharacterPlacementW@24: - movl $0x10a5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharSet@4 -_NtGdiGetCharSet@4: - movl $0x10a6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetCharWidthW@24 -_NtGdiGetCharWidthW@24: - movl $0x10a7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharWidthInfo@8 -_NtGdiGetCharWidthInfo@8: - movl $0x10a8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetColorAdjustment@8 -_NtGdiGetColorAdjustment@8: - movl $0x10a9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetColorSpaceforBitmap@4 -_NtGdiGetColorSpaceforBitmap@4: - movl $0x10aa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetCOPPCompatibleOPMInformation@12 -_NtGdiGetCOPPCompatibleOPMInformation@12: - movl $0x10ab, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDCDword@12 -_NtGdiGetDCDword@12: - movl $0x10ac, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDCforBitmap@4 -_NtGdiGetDCforBitmap@4: - movl $0x10ad, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetDCObject@8 -_NtGdiGetDCObject@8: - movl $0x10ae, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDCPoint@12 -_NtGdiGetDCPoint@12: - movl $0x10af, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDeviceCaps@8 -_NtGdiGetDeviceCaps@8: - movl $0x10b0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDeviceGammaRamp@8 -_NtGdiGetDeviceGammaRamp@8: - movl $0x10b1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDeviceCapsAll@8 -_NtGdiGetDeviceCapsAll@8: - movl $0x10b2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDIBitsInternal@36 -_NtGdiGetDIBitsInternal@36: - movl $0x10b3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiGetETM@8 -_NtGdiGetETM@8: - movl $0x10b4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetEudcTimeStampEx@12 -_NtGdiGetEudcTimeStampEx@12: - movl $0x10b5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetFontData@20 -_NtGdiGetFontData@20: - movl $0x10b6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetFontResourceInfoInternalW@28 -_NtGdiGetFontResourceInfoInternalW@28: - movl $0x10b7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetGlyphIndicesW@20 -_NtGdiGetGlyphIndicesW@20: - movl $0x10b8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetGlyphIndicesWInternal@24 -_NtGdiGetGlyphIndicesWInternal@24: - movl $0x10b9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetGlyphOutline@32 -_NtGdiGetGlyphOutline@32: - movl $0x10ba, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiGetOPMInformation@12 -_NtGdiGetOPMInformation@12: - movl $0x10bb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetKerningPairs@12 -_NtGdiGetKerningPairs@12: - movl $0x10bc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetLinkedUFIs@12 -_NtGdiGetLinkedUFIs@12: - movl $0x10bd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetMiterLimit@8 -_NtGdiGetMiterLimit@8: - movl $0x10be, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetMonitorID@12 -_NtGdiGetMonitorID@12: - movl $0x10bf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetNearestColor@8 -_NtGdiGetNearestColor@8: - movl $0x10c0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetNearestPaletteIndex@8 -_NtGdiGetNearestPaletteIndex@8: - movl $0x10c1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetObjectBitmapHandle@8 -_NtGdiGetObjectBitmapHandle@8: - movl $0x10c2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetOPMRandomNumber@8 -_NtGdiGetOPMRandomNumber@8: - movl $0x10c3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetOutlineTextMetricsInternalW@16 -_NtGdiGetOutlineTextMetricsInternalW@16: - movl $0x10c4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPath@16 -_NtGdiGetPath@16: - movl $0x10c5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPixel@12 -_NtGdiGetPixel@12: - movl $0x10c6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRandomRgn@12 -_NtGdiGetRandomRgn@12: - movl $0x10c7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRasterizerCaps@8 -_NtGdiGetRasterizerCaps@8: - movl $0x10c8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetRealizationInfo@12 -_NtGdiGetRealizationInfo@12: - movl $0x10c9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRegionData@12 -_NtGdiGetRegionData@12: - movl $0x10ca, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRgnBox@8 -_NtGdiGetRgnBox@8: - movl $0x10cb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetServerMetaFileBits@28 -_NtGdiGetServerMetaFileBits@28: - movl $0x10cc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetSpoolMessage@16 -_NtGdiGetSpoolMessage@16: - movl $0x10cd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetStats@20 -_NtGdiGetStats@20: - movl $0x10ce, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetStockObject@4 -_NtGdiGetStockObject@4: - movl $0x10cf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetStringBitmapW@20 -_NtGdiGetStringBitmapW@20: - movl $0x10d0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetSuggestedOPMProtectedOutputArraySize@8 -_NtGdiGetSuggestedOPMProtectedOutputArraySize@8: - movl $0x10d1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetSystemPaletteUse@4 -_NtGdiGetSystemPaletteUse@4: - movl $0x10d2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetTextCharsetInfo@12 -_NtGdiGetTextCharsetInfo@12: - movl $0x10d3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetTextExtent@20 -_NtGdiGetTextExtent@20: - movl $0x10d4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetTextExtentExW@32 -_NtGdiGetTextExtentExW@32: - movl $0x10d5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiGetTextFaceW@16 -_NtGdiGetTextFaceW@16: - movl $0x10d6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetTextMetricsW@12 -_NtGdiGetTextMetricsW@12: - movl $0x10d7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetTransform@12 -_NtGdiGetTransform@12: - movl $0x10d8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetUFI@24 -_NtGdiGetUFI@24: - movl $0x10d9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetEmbUFI@28 -_NtGdiGetEmbUFI@28: - movl $0x10da, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetUFIPathname@40 -_NtGdiGetUFIPathname@40: - movl $0x10db, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiGetEmbedFonts@0 -_NtGdiGetEmbedFonts@0: - movl $0x10dc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiChangeGhostFont@8 -_NtGdiChangeGhostFont@8: - movl $0x10dd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiAddEmbFontToDC@8 -_NtGdiAddEmbFontToDC@8: - movl $0x10de, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetFontUnicodeRanges@8 -_NtGdiGetFontUnicodeRanges@8: - movl $0x10df, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetWidthTable@28 -_NtGdiGetWidthTable@28: - movl $0x10e0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGradientFill@24 -_NtGdiGradientFill@24: - movl $0x10e1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiHfontCreate@20 -_NtGdiHfontCreate@20: - movl $0x10e2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiIcmBrushInfo@32 -_NtGdiIcmBrushInfo@32: - movl $0x10e3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiInit@0 -_NtGdiInit@0: - movl $0x10e4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiInitSpool@0 -_NtGdiInitSpool@0: - movl $0x10e5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiIntersectClipRect@20 -_NtGdiIntersectClipRect@20: - movl $0x10e6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiInvertRgn@8 -_NtGdiInvertRgn@8: - movl $0x10e7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiLineTo@12 -_NtGdiLineTo@12: - movl $0x10e8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiMakeFontDir@20 -_NtGdiMakeFontDir@20: - movl $0x10e9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiMakeInfoDC@8 -_NtGdiMakeInfoDC@8: - movl $0x10ea, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiMaskBlt@52 -_NtGdiMaskBlt@52: - movl $0x10eb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x34 - -.global _NtGdiModifyWorldTransform@12 -_NtGdiModifyWorldTransform@12: - movl $0x10ec, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiMonoBitmap@4 -_NtGdiMonoBitmap@4: - movl $0x10ed, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiMoveTo@16 -_NtGdiMoveTo@16: - movl $0x10ee, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiOffsetClipRgn@12 -_NtGdiOffsetClipRgn@12: - movl $0x10ef, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiOffsetRgn@12 -_NtGdiOffsetRgn@12: - movl $0x10f0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiOpenDCW@32 -_NtGdiOpenDCW@32: - movl $0x10f1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiPatBlt@24 -_NtGdiPatBlt@24: - movl $0x10f2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiPolyPatBlt@20 -_NtGdiPolyPatBlt@20: - movl $0x10f3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiPathToRegion@4 -_NtGdiPathToRegion@4: - movl $0x10f4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPlgBlt@44 -_NtGdiPlgBlt@44: - movl $0x10f5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiPolyDraw@16 -_NtGdiPolyDraw@16: - movl $0x10f6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPolyPolyDraw@20 -_NtGdiPolyPolyDraw@20: - movl $0x10f7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiPolyTextOutW@16 -_NtGdiPolyTextOutW@16: - movl $0x10f8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPtInRegion@12 -_NtGdiPtInRegion@12: - movl $0x10f9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiPtVisible@12 -_NtGdiPtVisible@12: - movl $0x10fa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiQueryFonts@12 -_NtGdiQueryFonts@12: - movl $0x10fb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiQueryFontAssocInfo@4 -_NtGdiQueryFontAssocInfo@4: - movl $0x10fc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiRectangle@20 -_NtGdiRectangle@20: - movl $0x10fd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiRectInRegion@8 -_NtGdiRectInRegion@8: - movl $0x10fe, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRectVisible@8 -_NtGdiRectVisible@8: - movl $0x10ff, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRemoveFontResourceW@24 -_NtGdiRemoveFontResourceW@24: - movl $0x1100, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiRemoveFontMemResourceEx@4 -_NtGdiRemoveFontMemResourceEx@4: - movl $0x1101, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiResetDC@20 -_NtGdiResetDC@20: - movl $0x1102, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiResizePalette@8 -_NtGdiResizePalette@8: - movl $0x1103, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRestoreDC@8 -_NtGdiRestoreDC@8: - movl $0x1104, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRoundRect@28 -_NtGdiRoundRect@28: - movl $0x1105, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiSaveDC@4 -_NtGdiSaveDC@4: - movl $0x1106, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiScaleViewportExtEx@24 -_NtGdiScaleViewportExtEx@24: - movl $0x1107, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiScaleWindowExtEx@24 -_NtGdiScaleWindowExtEx@24: - movl $0x1108, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiSelectBitmap@8 -_NtGdiSelectBitmap@8: - movl $0x1109, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectBrush@8 -_NtGdiSelectBrush@8: - movl $0x110a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectClipPath@8 -_NtGdiSelectClipPath@8: - movl $0x110b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectFont@8 -_NtGdiSelectFont@8: - movl $0x110c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectPen@8 -_NtGdiSelectPen@8: - movl $0x110d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBitmapAttributes@8 -_NtGdiSetBitmapAttributes@8: - movl $0x110e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBitmapBits@12 -_NtGdiSetBitmapBits@12: - movl $0x110f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetBitmapDimension@16 -_NtGdiSetBitmapDimension@16: - movl $0x1110, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetBoundsRect@12 -_NtGdiSetBoundsRect@12: - movl $0x1111, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetBrushAttributes@8 -_NtGdiSetBrushAttributes@8: - movl $0x1112, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBrushOrg@16 -_NtGdiSetBrushOrg@16: - movl $0x1113, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetColorAdjustment@8 -_NtGdiSetColorAdjustment@8: - movl $0x1114, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetColorSpace@8 -_NtGdiSetColorSpace@8: - movl $0x1115, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetDeviceGammaRamp@8 -_NtGdiSetDeviceGammaRamp@8: - movl $0x1116, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetDIBitsToDeviceInternal@64 -_NtGdiSetDIBitsToDeviceInternal@64: - movl $0x1117, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x40 - -.global _NtGdiSetFontEnumeration@4 -_NtGdiSetFontEnumeration@4: - movl $0x1118, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetFontXform@12 -_NtGdiSetFontXform@12: - movl $0x1119, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetIcmMode@12 -_NtGdiSetIcmMode@12: - movl $0x111a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetLinkedUFIs@12 -_NtGdiSetLinkedUFIs@12: - movl $0x111b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetMagicColors@12 -_NtGdiSetMagicColors@12: - movl $0x111c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetMetaRgn@4 -_NtGdiSetMetaRgn@4: - movl $0x111d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetMiterLimit@12 -_NtGdiSetMiterLimit@12: - movl $0x111e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDeviceWidth@4 -_NtGdiGetDeviceWidth@4: - movl $0x111f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiMirrorWindowOrg@4 -_NtGdiMirrorWindowOrg@4: - movl $0x1120, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetLayout@12 -_NtGdiSetLayout@12: - movl $0x1121, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetOPMSigningKeyAndSequenceNumbers@8 -_NtGdiSetOPMSigningKeyAndSequenceNumbers@8: - movl $0x1122, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetPixel@16 -_NtGdiSetPixel@16: - movl $0x1123, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetPixelFormat@8 -_NtGdiSetPixelFormat@8: - movl $0x1124, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetRectRgn@20 -_NtGdiSetRectRgn@20: - movl $0x1125, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiSetSystemPaletteUse@8 -_NtGdiSetSystemPaletteUse@8: - movl $0x1126, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetTextJustification@12 -_NtGdiSetTextJustification@12: - movl $0x1127, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetupPublicCFONT@12 -_NtGdiSetupPublicCFONT@12: - movl $0x1128, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetVirtualResolution@20 -_NtGdiSetVirtualResolution@20: - movl $0x1129, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiSetSizeDevice@12 -_NtGdiSetSizeDevice@12: - movl $0x112a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiStartDoc@16 -_NtGdiStartDoc@16: - movl $0x112b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiStartPage@4 -_NtGdiStartPage@4: - movl $0x112c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiStretchBlt@48 -_NtGdiStretchBlt@48: - movl $0x112d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtGdiStretchDIBitsInternal@64 -_NtGdiStretchDIBitsInternal@64: - movl $0x112e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x40 - -.global _NtGdiStrokeAndFillPath@4 -_NtGdiStrokeAndFillPath@4: - movl $0x112f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiStrokePath@4 -_NtGdiStrokePath@4: - movl $0x1130, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSwapBuffers@4 -_NtGdiSwapBuffers@4: - movl $0x1131, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiTransformPoints@20 -_NtGdiTransformPoints@20: - movl $0x1132, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiTransparentBlt@44 -_NtGdiTransparentBlt@44: - movl $0x1133, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiUnloadPrinterDriver@8 -_NtGdiUnloadPrinterDriver@8: - movl $0x1134, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiUnmapMemFont@4 -_NtGdiUnmapMemFont@4: - movl $0x1135, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiUnrealizeObject@4 -_NtGdiUnrealizeObject@4: - movl $0x1136, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiUpdateColors@4 -_NtGdiUpdateColors@4: - movl $0x1137, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiWidenPath@4 -_NtGdiWidenPath@4: - movl $0x1138, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserActivateKeyboardLayout@8 -_NtUserActivateKeyboardLayout@8: - movl $0x1139, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserAddClipboardFormatListener@4 -_NtUserAddClipboardFormatListener@4: - movl $0x113a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserAlterWindowStyle@12 -_NtUserAlterWindowStyle@12: - movl $0x113b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserAssociateInputContext@12 -_NtUserAssociateInputContext@12: - movl $0x113c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserAttachThreadInput@12 -_NtUserAttachThreadInput@12: - movl $0x113d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserBeginPaint@8 -_NtUserBeginPaint@8: - movl $0x113e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserBitBltSysBmp@32 -_NtUserBitBltSysBmp@32: - movl $0x113f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserBlockInput@4 -_NtUserBlockInput@4: - movl $0x1140, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserBuildHimcList@16 -_NtUserBuildHimcList@16: - movl $0x1141, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserBuildHwndList@28 -_NtUserBuildHwndList@28: - movl $0x1142, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserBuildNameList@16 -_NtUserBuildNameList@16: - movl $0x1143, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserBuildPropList@16 -_NtUserBuildPropList@16: - movl $0x1144, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCallHwnd@8 -_NtUserCallHwnd@8: - movl $0x1145, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndLock@8 -_NtUserCallHwndLock@8: - movl $0x1146, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndOpt@8 -_NtUserCallHwndOpt@8: - movl $0x1147, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndParam@12 -_NtUserCallHwndParam@12: - movl $0x1148, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCallHwndParamLock@12 -_NtUserCallHwndParamLock@12: - movl $0x1149, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCallMsgFilter@8 -_NtUserCallMsgFilter@8: - movl $0x114a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallNextHookEx@16 -_NtUserCallNextHookEx@16: - movl $0x114b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCallNoParam@4 -_NtUserCallNoParam@4: - movl $0x114c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCallOneParam@8 -_NtUserCallOneParam@8: - movl $0x114d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallTwoParam@12 -_NtUserCallTwoParam@12: - movl $0x114e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserChangeClipboardChain@8 -_NtUserChangeClipboardChain@8: - movl $0x114f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserChangeDisplaySettings@16 -_NtUserChangeDisplaySettings@16: - movl $0x1150, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCheckAccessForIntegrityLevel@12 -_NtUserCheckAccessForIntegrityLevel@12: - movl $0x1151, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCheckDesktopByThreadId@4 -_NtUserCheckDesktopByThreadId@4: - movl $0x1152, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCheckWindowThreadDesktop@12 -_NtUserCheckWindowThreadDesktop@12: - movl $0x1153, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCheckImeHotKey@8 -_NtUserCheckImeHotKey@8: - movl $0x1154, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCheckMenuItem@12 -_NtUserCheckMenuItem@12: - movl $0x1155, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserChildWindowFromPointEx@16 -_NtUserChildWindowFromPointEx@16: - movl $0x1156, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserClipCursor@4 -_NtUserClipCursor@4: - movl $0x1157, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCloseClipboard@0 -_NtUserCloseClipboard@0: - movl $0x1158, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCloseDesktop@4 -_NtUserCloseDesktop@4: - movl $0x1159, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCloseWindowStation@4 -_NtUserCloseWindowStation@4: - movl $0x115a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserConsoleControl@12 -_NtUserConsoleControl@12: - movl $0x115b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserConvertMemHandle@8 -_NtUserConvertMemHandle@8: - movl $0x115c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCopyAcceleratorTable@12 -_NtUserCopyAcceleratorTable@12: - movl $0x115d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCountClipboardFormats@0 -_NtUserCountClipboardFormats@0: - movl $0x115e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCreateAcceleratorTable@8 -_NtUserCreateAcceleratorTable@8: - movl $0x115f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCreateCaret@16 -_NtUserCreateCaret@16: - movl $0x1160, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCreateDesktopEx@24 -_NtUserCreateDesktopEx@24: - movl $0x1161, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserCreateInputContext@4 -_NtUserCreateInputContext@4: - movl $0x1162, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCreateLocalMemHandle@16 -_NtUserCreateLocalMemHandle@16: - movl $0x1163, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCreateWindowEx@60 -_NtUserCreateWindowEx@60: - movl $0x1164, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x3c - -.global _NtUserCreateWindowStation@28 -_NtUserCreateWindowStation@28: - movl $0x1165, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserDdeInitialize@20 -_NtUserDdeInitialize@20: - movl $0x1166, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserDeferWindowPos@32 -_NtUserDeferWindowPos@32: - movl $0x1167, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserDefSetText@8 -_NtUserDefSetText@8: - movl $0x1168, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserDeleteMenu@12 -_NtUserDeleteMenu@12: - movl $0x1169, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDestroyAcceleratorTable@4 -_NtUserDestroyAcceleratorTable@4: - movl $0x116a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyCursor@8 -_NtUserDestroyCursor@8: - movl $0x116b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserDestroyInputContext@4 -_NtUserDestroyInputContext@4: - movl $0x116c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyMenu@4 -_NtUserDestroyMenu@4: - movl $0x116d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyWindow@4 -_NtUserDestroyWindow@4: - movl $0x116e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDisableThreadIme@4 -_NtUserDisableThreadIme@4: - movl $0x116f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDispatchMessage@4 -_NtUserDispatchMessage@4: - movl $0x1170, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDoSoundConnect@0 -_NtUserDoSoundConnect@0: - movl $0x1171, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserDoSoundDisconnect@0 -_NtUserDoSoundDisconnect@0: - movl $0x1172, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserDragDetect@12 -_NtUserDragDetect@12: - movl $0x1173, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDragObject@20 -_NtUserDragObject@20: - movl $0x1174, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserDrawAnimatedRects@16 -_NtUserDrawAnimatedRects@16: - movl $0x1175, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserDrawCaption@16 -_NtUserDrawCaption@16: - movl $0x1176, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserDrawCaptionTemp@28 -_NtUserDrawCaptionTemp@28: - movl $0x1177, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserDrawIconEx@44 -_NtUserDrawIconEx@44: - movl $0x1178, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtUserDrawMenuBarTemp@20 -_NtUserDrawMenuBarTemp@20: - movl $0x1179, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserEmptyClipboard@0 -_NtUserEmptyClipboard@0: - movl $0x117a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserEnableMenuItem@12 -_NtUserEnableMenuItem@12: - movl $0x117b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserEnableScrollBar@12 -_NtUserEnableScrollBar@12: - movl $0x117c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserEndDeferWindowPosEx@8 -_NtUserEndDeferWindowPosEx@8: - movl $0x117d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserEndMenu@0 -_NtUserEndMenu@0: - movl $0x117e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserEndPaint@8 -_NtUserEndPaint@8: - movl $0x117f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserEnumDisplayDevices@16 -_NtUserEnumDisplayDevices@16: - movl $0x1180, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEnumDisplayMonitors@16 -_NtUserEnumDisplayMonitors@16: - movl $0x1181, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEnumDisplaySettings@16 -_NtUserEnumDisplaySettings@16: - movl $0x1182, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEvent@4 -_NtUserEvent@4: - movl $0x1183, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserExcludeUpdateRgn@8 -_NtUserExcludeUpdateRgn@8: - movl $0x1184, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserFillWindow@16 -_NtUserFillWindow@16: - movl $0x1185, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserFindExistingCursorIcon@12 -_NtUserFindExistingCursorIcon@12: - movl $0x1186, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserFindWindowEx@20 -_NtUserFindWindowEx@20: - movl $0x1187, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserFlashWindowEx@4 -_NtUserFlashWindowEx@4: - movl $0x1188, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserFrostCrashedWindow@8 -_NtUserFrostCrashedWindow@8: - movl $0x1189, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetAltTabInfo@24 -_NtUserGetAltTabInfo@24: - movl $0x118a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserGetAncestor@8 -_NtUserGetAncestor@8: - movl $0x118b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetAppImeLevel@4 -_NtUserGetAppImeLevel@4: - movl $0x118c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetAsyncKeyState@4 -_NtUserGetAsyncKeyState@4: - movl $0x118d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetAtomName@8 -_NtUserGetAtomName@8: - movl $0x118e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetCaretBlinkTime@0 -_NtUserGetCaretBlinkTime@0: - movl $0x118f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetCaretPos@4 -_NtUserGetCaretPos@4: - movl $0x1190, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetClassInfoEx@20 -_NtUserGetClassInfoEx@20: - movl $0x1191, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetClassName@12 -_NtUserGetClassName@12: - movl $0x1192, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetClipboardData@8 -_NtUserGetClipboardData@8: - movl $0x1193, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetClipboardFormatName@12 -_NtUserGetClipboardFormatName@12: - movl $0x1194, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetClipboardOwner@0 -_NtUserGetClipboardOwner@0: - movl $0x1195, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipboardSequenceNumber@0 -_NtUserGetClipboardSequenceNumber@0: - movl $0x1196, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipboardViewer@0 -_NtUserGetClipboardViewer@0: - movl $0x1197, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipCursor@4 -_NtUserGetClipCursor@4: - movl $0x1198, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetComboBoxInfo@8 -_NtUserGetComboBoxInfo@8: - movl $0x1199, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetControlBrush@12 -_NtUserGetControlBrush@12: - movl $0x119a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetControlColor@16 -_NtUserGetControlColor@16: - movl $0x119b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetCPD@12 -_NtUserGetCPD@12: - movl $0x119c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetCursorFrameInfo@16 -_NtUserGetCursorFrameInfo@16: - movl $0x119d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetCursorInfo@4 -_NtUserGetCursorInfo@4: - movl $0x119e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetDC@4 -_NtUserGetDC@4: - movl $0x119f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetDCEx@12 -_NtUserGetDCEx@12: - movl $0x11a0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetDoubleClickTime@0 -_NtUserGetDoubleClickTime@0: - movl $0x11a1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetForegroundWindow@0 -_NtUserGetForegroundWindow@0: - movl $0x11a2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetGuiResources@8 -_NtUserGetGuiResources@8: - movl $0x11a3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetGUIThreadInfo@8 -_NtUserGetGUIThreadInfo@8: - movl $0x11a4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetIconInfo@24 -_NtUserGetIconInfo@24: - movl $0x11a5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserGetIconSize@16 -_NtUserGetIconSize@16: - movl $0x11a6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetImeHotKey@16 -_NtUserGetImeHotKey@16: - movl $0x11a7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetImeInfoEx@8 -_NtUserGetImeInfoEx@8: - movl $0x11a8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetInternalWindowPos@12 -_NtUserGetInternalWindowPos@12: - movl $0x11a9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetKeyboardLayoutList@8 -_NtUserGetKeyboardLayoutList@8: - movl $0x11aa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetKeyboardLayoutName@4 -_NtUserGetKeyboardLayoutName@4: - movl $0x11ab, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetKeyboardState@4 -_NtUserGetKeyboardState@4: - movl $0x11ac, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetKeyNameText@12 -_NtUserGetKeyNameText@12: - movl $0x11ad, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetKeyState@4 -_NtUserGetKeyState@4: - movl $0x11ae, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetListBoxInfo@4 -_NtUserGetListBoxInfo@4: - movl $0x11af, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetMenuBarInfo@16 -_NtUserGetMenuBarInfo@16: - movl $0x11b0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMenuIndex@8 -_NtUserGetMenuIndex@8: - movl $0x11b1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetMenuItemRect@16 -_NtUserGetMenuItemRect@16: - movl $0x11b2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMessage@16 -_NtUserGetMessage@16: - movl $0x11b3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMouseMovePointsEx@20 -_NtUserGetMouseMovePointsEx@20: - movl $0x11b4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetObjectInformation@20 -_NtUserGetObjectInformation@20: - movl $0x11b5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetOpenClipboardWindow@0 -_NtUserGetOpenClipboardWindow@0: - movl $0x11b6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetPriorityClipboardFormat@8 -_NtUserGetPriorityClipboardFormat@8: - movl $0x11b7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetProcessWindowStation@0 -_NtUserGetProcessWindowStation@0: - movl $0x11b8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetRawInputBuffer@12 -_NtUserGetRawInputBuffer@12: - movl $0x11b9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetRawInputData@20 -_NtUserGetRawInputData@20: - movl $0x11ba, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetRawInputDeviceInfo@16 -_NtUserGetRawInputDeviceInfo@16: - movl $0x11bb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetRawInputDeviceList@12 -_NtUserGetRawInputDeviceList@12: - movl $0x11bc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetRegisteredRawInputDevices@12 -_NtUserGetRegisteredRawInputDevices@12: - movl $0x11bd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetScrollBarInfo@12 -_NtUserGetScrollBarInfo@12: - movl $0x11be, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetSystemMenu@8 -_NtUserGetSystemMenu@8: - movl $0x11bf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetThreadDesktop@8 -_NtUserGetThreadDesktop@8: - movl $0x11c0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetThreadState@4 -_NtUserGetThreadState@4: - movl $0x11c1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetTitleBarInfo@8 -_NtUserGetTitleBarInfo@8: - movl $0x11c2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetUpdatedClipboardFormats@12 -_NtUserGetUpdatedClipboardFormats@12: - movl $0x11c3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetUpdateRect@12 -_NtUserGetUpdateRect@12: - movl $0x11c4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetUpdateRgn@12 -_NtUserGetUpdateRgn@12: - movl $0x11c5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetWindowDC@4 -_NtUserGetWindowDC@4: - movl $0x11c6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetWindowPlacement@8 -_NtUserGetWindowPlacement@8: - movl $0x11c7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetWOWClass@8 -_NtUserGetWOWClass@8: - movl $0x11c8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGhostWindowFromHungWindow@4 -_NtUserGhostWindowFromHungWindow@4: - movl $0x11c9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserHardErrorControl@12 -_NtUserHardErrorControl@12: - movl $0x11ca, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserHideCaret@4 -_NtUserHideCaret@4: - movl $0x11cb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserHiliteMenuItem@16 -_NtUserHiliteMenuItem@16: - movl $0x11cc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserHungWindowFromGhostWindow@4 -_NtUserHungWindowFromGhostWindow@4: - movl $0x11cd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserImpersonateDdeClientWindow@8 -_NtUserImpersonateDdeClientWindow@8: - movl $0x11ce, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserInitialize@8 -_NtUserInitialize@8: - movl $0x11cf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserInitializeClientPfnArrays@16 -_NtUserInitializeClientPfnArrays@16: - movl $0x11d0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserInitTask@48 -_NtUserInitTask@48: - movl $0x11d1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtUserInternalGetWindowText@12 -_NtUserInternalGetWindowText@12: - movl $0x11d2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserInternalGetWindowIcon@8 -_NtUserInternalGetWindowIcon@8: - movl $0x11d3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserInvalidateRect@12 -_NtUserInvalidateRect@12: - movl $0x11d4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserInvalidateRgn@12 -_NtUserInvalidateRgn@12: - movl $0x11d5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserIsClipboardFormatAvailable@4 -_NtUserIsClipboardFormatAvailable@4: - movl $0x11d6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserKillTimer@8 -_NtUserKillTimer@8: - movl $0x11d7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserLoadKeyboardLayoutEx@28 -_NtUserLoadKeyboardLayoutEx@28: - movl $0x11d8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserLockWindowStation@4 -_NtUserLockWindowStation@4: - movl $0x11d9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserLockWindowUpdate@4 -_NtUserLockWindowUpdate@4: - movl $0x11da, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserLockWorkStation@0 -_NtUserLockWorkStation@0: - movl $0x11db, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserLogicalToPhysicalPoint@8 -_NtUserLogicalToPhysicalPoint@8: - movl $0x11dc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserMapVirtualKeyEx@16 -_NtUserMapVirtualKeyEx@16: - movl $0x11dd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserMenuItemFromPoint@16 -_NtUserMenuItemFromPoint@16: - movl $0x11de, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserMessageCall@28 -_NtUserMessageCall@28: - movl $0x11df, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserMinMaximize@12 -_NtUserMinMaximize@12: - movl $0x11e0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserMNDragLeave@0 -_NtUserMNDragLeave@0: - movl $0x11e1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserMNDragOver@8 -_NtUserMNDragOver@8: - movl $0x11e2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserModifyUserStartupInfoFlags@8 -_NtUserModifyUserStartupInfoFlags@8: - movl $0x11e3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserMoveWindow@24 -_NtUserMoveWindow@24: - movl $0x11e4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserNotifyIMEStatus@12 -_NtUserNotifyIMEStatus@12: - movl $0x11e5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserNotifyProcessCreate@16 -_NtUserNotifyProcessCreate@16: - movl $0x11e6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserNotifyWinEvent@16 -_NtUserNotifyWinEvent@16: - movl $0x11e7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserOpenClipboard@8 -_NtUserOpenClipboard@8: - movl $0x11e8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserOpenDesktop@12 -_NtUserOpenDesktop@12: - movl $0x11e9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserOpenInputDesktop@12 -_NtUserOpenInputDesktop@12: - movl $0x11ea, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserOpenThreadDesktop@20 -_NtUserOpenThreadDesktop@20: - movl $0x11eb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserOpenWindowStation@8 -_NtUserOpenWindowStation@8: - movl $0x11ec, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserPaintDesktop@4 -_NtUserPaintDesktop@4: - movl $0x11ed, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserPaintMonitor@12 -_NtUserPaintMonitor@12: - movl $0x11ee, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserPeekMessage@20 -_NtUserPeekMessage@20: - movl $0x11ef, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserPhysicalToLogicalPoint@8 -_NtUserPhysicalToLogicalPoint@8: - movl $0x11f0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserPostMessage@16 -_NtUserPostMessage@16: - movl $0x11f1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserPostThreadMessage@16 -_NtUserPostThreadMessage@16: - movl $0x11f2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserPrintWindow@12 -_NtUserPrintWindow@12: - movl $0x11f3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserProcessConnect@8 -_NtUserProcessConnect@8: - movl $0x11f4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserQueryInformationThread@16 -_NtUserQueryInformationThread@16: - movl $0x11f5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserQueryInputContext@8 -_NtUserQueryInputContext@8: - movl $0x11f6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserQuerySendMessage@4 -_NtUserQuerySendMessage@4: - movl $0x11f7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserQueryWindow@8 -_NtUserQueryWindow@8: - movl $0x11f8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserRealChildWindowFromPoint@12 -_NtUserRealChildWindowFromPoint@12: - movl $0x11f9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRealInternalGetMessage@24 -_NtUserRealInternalGetMessage@24: - movl $0x11fa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserRealWaitMessageEx@8 -_NtUserRealWaitMessageEx@8: - movl $0x11fb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserRedrawWindow@16 -_NtUserRedrawWindow@16: - movl $0x11fc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRegisterClassExWOW@28 -_NtUserRegisterClassExWOW@28: - movl $0x11fd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserRegisterErrorReportingDialog@8 -_NtUserRegisterErrorReportingDialog@8: - movl $0x11fe, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserRegisterUserApiHook@16 -_NtUserRegisterUserApiHook@16: - movl $0x11ff, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRegisterHotKey@16 -_NtUserRegisterHotKey@16: - movl $0x1200, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRegisterRawInputDevices@12 -_NtUserRegisterRawInputDevices@12: - movl $0x1201, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRegisterTasklist@4 -_NtUserRegisterTasklist@4: - movl $0x1202, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserRegisterWindowMessage@4 -_NtUserRegisterWindowMessage@4: - movl $0x1203, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserRemoveClipboardFormatListener@4 -_NtUserRemoveClipboardFormatListener@4: - movl $0x1204, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserRemoveMenu@12 -_NtUserRemoveMenu@12: - movl $0x1205, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRemoveProp@8 -_NtUserRemoveProp@8: - movl $0x1206, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserResolveDesktop@16 -_NtUserResolveDesktop@16: - movl $0x1207, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserResolveDesktopForWOW@4 -_NtUserResolveDesktopForWOW@4: - movl $0x1208, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSBGetParms@16 -_NtUserSBGetParms@16: - movl $0x1209, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserScrollDC@28 -_NtUserScrollDC@28: - movl $0x120a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserScrollWindowEx@32 -_NtUserScrollWindowEx@32: - movl $0x120b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserSelectPalette@12 -_NtUserSelectPalette@12: - movl $0x120c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSendInput@12 -_NtUserSendInput@12: - movl $0x120d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetActiveWindow@4 -_NtUserSetActiveWindow@4: - movl $0x120e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetAppImeLevel@8 -_NtUserSetAppImeLevel@8: - movl $0x120f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCapture@4 -_NtUserSetCapture@4: - movl $0x1210, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetClassLong@16 -_NtUserSetClassLong@16: - movl $0x1211, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetClassWord@12 -_NtUserSetClassWord@12: - movl $0x1212, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetClipboardData@12 -_NtUserSetClipboardData@12: - movl $0x1213, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetClipboardViewer@4 -_NtUserSetClipboardViewer@4: - movl $0x1214, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetConsoleReserveKeys@8 -_NtUserSetConsoleReserveKeys@8: - movl $0x1215, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCursor@4 -_NtUserSetCursor@4: - movl $0x1216, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetCursorContents@8 -_NtUserSetCursorContents@8: - movl $0x1217, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCursorIconData@16 -_NtUserSetCursorIconData@16: - movl $0x1218, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetFocus@4 -_NtUserSetFocus@4: - movl $0x1219, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetImeHotKey@20 -_NtUserSetImeHotKey@20: - movl $0x121a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserSetImeInfoEx@4 -_NtUserSetImeInfoEx@4: - movl $0x121b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetImeOwnerWindow@8 -_NtUserSetImeOwnerWindow@8: - movl $0x121c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetInformationProcess@16 -_NtUserSetInformationProcess@16: - movl $0x121d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetInformationThread@16 -_NtUserSetInformationThread@16: - movl $0x121e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetInternalWindowPos@16 -_NtUserSetInternalWindowPos@16: - movl $0x121f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetKeyboardState@4 -_NtUserSetKeyboardState@4: - movl $0x1220, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetMenu@12 -_NtUserSetMenu@12: - movl $0x1221, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetMenuContextHelpId@8 -_NtUserSetMenuContextHelpId@8: - movl $0x1222, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetMenuDefaultItem@12 -_NtUserSetMenuDefaultItem@12: - movl $0x1223, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetMenuFlagRtoL@4 -_NtUserSetMenuFlagRtoL@4: - movl $0x1224, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetObjectInformation@16 -_NtUserSetObjectInformation@16: - movl $0x1225, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetParent@8 -_NtUserSetParent@8: - movl $0x1226, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetProcessWindowStation@4 -_NtUserSetProcessWindowStation@4: - movl $0x1227, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetProp@8 -_NtUserGetProp@8: - movl $0x1228, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetProp@12 -_NtUserSetProp@12: - movl $0x1229, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetScrollInfo@16 -_NtUserSetScrollInfo@16: - movl $0x122a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetShellWindowEx@8 -_NtUserSetShellWindowEx@8: - movl $0x122b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSysColors@16 -_NtUserSetSysColors@16: - movl $0x122c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetSystemCursor@8 -_NtUserSetSystemCursor@8: - movl $0x122d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSystemMenu@8 -_NtUserSetSystemMenu@8: - movl $0x122e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSystemTimer@12 -_NtUserSetSystemTimer@12: - movl $0x122f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetThreadDesktop@4 -_NtUserSetThreadDesktop@4: - movl $0x1230, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetThreadLayoutHandles@8 -_NtUserSetThreadLayoutHandles@8: - movl $0x1231, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetThreadState@8 -_NtUserSetThreadState@8: - movl $0x1232, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetTimer@16 -_NtUserSetTimer@16: - movl $0x1233, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetProcessDPIAware@0 -_NtUserSetProcessDPIAware@0: - movl $0x1234, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserSetWindowFNID@8 -_NtUserSetWindowFNID@8: - movl $0x1235, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetWindowLong@16 -_NtUserSetWindowLong@16: - movl $0x1236, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetWindowPlacement@8 -_NtUserSetWindowPlacement@8: - movl $0x1237, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetWindowPos@28 -_NtUserSetWindowPos@28: - movl $0x1238, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserSetWindowRgn@12 -_NtUserSetWindowRgn@12: - movl $0x1239, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetWindowRgnEx@12 -_NtUserGetWindowRgnEx@12: - movl $0x123a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWindowRgnEx@12 -_NtUserSetWindowRgnEx@12: - movl $0x123b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWindowsHookAW@12 -_NtUserSetWindowsHookAW@12: - movl $0x123c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWindowsHookEx@24 -_NtUserSetWindowsHookEx@24: - movl $0x123d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserSetWindowStationUser@16 -_NtUserSetWindowStationUser@16: - movl $0x123e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetWindowWord@12 -_NtUserSetWindowWord@12: - movl $0x123f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWinEventHook@32 -_NtUserSetWinEventHook@32: - movl $0x1240, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserShowCaret@4 -_NtUserShowCaret@4: - movl $0x1241, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserShowScrollBar@12 -_NtUserShowScrollBar@12: - movl $0x1242, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserShowWindow@8 -_NtUserShowWindow@8: - movl $0x1243, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserShowWindowAsync@8 -_NtUserShowWindowAsync@8: - movl $0x1244, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSoundSentry@0 -_NtUserSoundSentry@0: - movl $0x1245, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserSwitchDesktop@8 -_NtUserSwitchDesktop@8: - movl $0x1246, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSystemParametersInfo@16 -_NtUserSystemParametersInfo@16: - movl $0x1247, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserTestForInteractiveUser@4 -_NtUserTestForInteractiveUser@4: - movl $0x1248, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserThunkedMenuInfo@8 -_NtUserThunkedMenuInfo@8: - movl $0x1249, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserThunkedMenuItemInfo@24 -_NtUserThunkedMenuItemInfo@24: - movl $0x124a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserToUnicodeEx@28 -_NtUserToUnicodeEx@28: - movl $0x124b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserTrackMouseEvent@4 -_NtUserTrackMouseEvent@4: - movl $0x124c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserTrackPopupMenuEx@24 -_NtUserTrackPopupMenuEx@24: - movl $0x124d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserCalcMenuBar@20 -_NtUserCalcMenuBar@20: - movl $0x124e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserPaintMenuBar@24 -_NtUserPaintMenuBar@24: - movl $0x124f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserTranslateAccelerator@12 -_NtUserTranslateAccelerator@12: - movl $0x1250, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserTranslateMessage@8 -_NtUserTranslateMessage@8: - movl $0x1251, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserUnhookWindowsHookEx@4 -_NtUserUnhookWindowsHookEx@4: - movl $0x1252, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnhookWinEvent@4 -_NtUserUnhookWinEvent@4: - movl $0x1253, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnloadKeyboardLayout@4 -_NtUserUnloadKeyboardLayout@4: - movl $0x1254, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnlockWindowStation@4 -_NtUserUnlockWindowStation@4: - movl $0x1255, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnregisterClass@12 -_NtUserUnregisterClass@12: - movl $0x1256, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUnregisterUserApiHook@0 -_NtUserUnregisterUserApiHook@0: - movl $0x1257, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserUnregisterHotKey@8 -_NtUserUnregisterHotKey@8: - movl $0x1258, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserUpdateInputContext@12 -_NtUserUpdateInputContext@12: - movl $0x1259, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUpdateInstance@12 -_NtUserUpdateInstance@12: - movl $0x125a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUpdateLayeredWindow@40 -_NtUserUpdateLayeredWindow@40: - movl $0x125b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtUserGetLayeredWindowAttributes@16 -_NtUserGetLayeredWindowAttributes@16: - movl $0x125c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetLayeredWindowAttributes@16 -_NtUserSetLayeredWindowAttributes@16: - movl $0x125d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserUpdatePerUserSystemParameters@4 -_NtUserUpdatePerUserSystemParameters@4: - movl $0x125e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUserHandleGrantAccess@12 -_NtUserUserHandleGrantAccess@12: - movl $0x125f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserValidateHandleSecure@4 -_NtUserValidateHandleSecure@4: - movl $0x1260, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserValidateRect@8 -_NtUserValidateRect@8: - movl $0x1261, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserValidateTimerCallback@4 -_NtUserValidateTimerCallback@4: - movl $0x1262, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserVkKeyScanEx@12 -_NtUserVkKeyScanEx@12: - movl $0x1263, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserWaitForInputIdle@12 -_NtUserWaitForInputIdle@12: - movl $0x1264, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserWaitForMsgAndEvent@4 -_NtUserWaitForMsgAndEvent@4: - movl $0x1265, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserWaitMessage@0 -_NtUserWaitMessage@0: - movl $0x1266, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserWin32PoolAllocationStats@24 -_NtUserWin32PoolAllocationStats@24: - movl $0x1267, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserWindowFromPhysicalPoint@8 -_NtUserWindowFromPhysicalPoint@8: - movl $0x1268, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserWindowFromPoint@8 -_NtUserWindowFromPoint@8: - movl $0x1269, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserYieldTask@0 -_NtUserYieldTask@0: - movl $0x126a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserRemoteConnect@12 -_NtUserRemoteConnect@12: - movl $0x126b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRemoteRedrawRectangle@16 -_NtUserRemoteRedrawRectangle@16: - movl $0x126c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRemoteRedrawScreen@0 -_NtUserRemoteRedrawScreen@0: - movl $0x126d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserRemoteStopScreenUpdates@0 -_NtUserRemoteStopScreenUpdates@0: - movl $0x126e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCtxDisplayIOCtl@12 -_NtUserCtxDisplayIOCtl@12: - movl $0x126f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRegisterSessionPort@4 -_NtUserRegisterSessionPort@4: - movl $0x1270, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnregisterSessionPort@0 -_NtUserUnregisterSessionPort@0: - movl $0x1271, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserUpdateWindowTransform@12 -_NtUserUpdateWindowTransform@12: - movl $0x1272, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDwmStartRedirection@4 -_NtUserDwmStartRedirection@4: - movl $0x1273, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDwmStopRedirection@0 -_NtUserDwmStopRedirection@0: - movl $0x1274, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserDwmHintDxUpdate@8 -_NtUserDwmHintDxUpdate@8: - movl $0x1275, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserDwmGetDxRgn@12 -_NtUserDwmGetDxRgn@12: - movl $0x1276, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetWindowMinimizeRect@8 -_NtUserGetWindowMinimizeRect@8: - movl $0x1277, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiEngAssociateSurface@12 -_NtGdiEngAssociateSurface@12: - movl $0x1278, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngCreateBitmap@24 -_NtGdiEngCreateBitmap@24: - movl $0x1279, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngCreateDeviceSurface@16 -_NtGdiEngCreateDeviceSurface@16: - movl $0x127a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEngCreateDeviceBitmap@16 -_NtGdiEngCreateDeviceBitmap@16: - movl $0x127b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEngCreatePalette@24 -_NtGdiEngCreatePalette@24: - movl $0x127c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngComputeGlyphSet@12 -_NtGdiEngComputeGlyphSet@12: - movl $0x127d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngCopyBits@24 -_NtGdiEngCopyBits@24: - movl $0x127e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngDeletePalette@4 -_NtGdiEngDeletePalette@4: - movl $0x127f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngDeleteSurface@4 -_NtGdiEngDeleteSurface@4: - movl $0x1280, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngEraseSurface@12 -_NtGdiEngEraseSurface@12: - movl $0x1281, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngUnlockSurface@4 -_NtGdiEngUnlockSurface@4: - movl $0x1282, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngLockSurface@4 -_NtGdiEngLockSurface@4: - movl $0x1283, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngBitBlt@44 -_NtGdiEngBitBlt@44: - movl $0x1284, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngStretchBlt@44 -_NtGdiEngStretchBlt@44: - movl $0x1285, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngPlgBlt@44 -_NtGdiEngPlgBlt@44: - movl $0x1286, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngMarkBandingSurface@4 -_NtGdiEngMarkBandingSurface@4: - movl $0x1287, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngStrokePath@32 -_NtGdiEngStrokePath@32: - movl $0x1288, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiEngFillPath@28 -_NtGdiEngFillPath@28: - movl $0x1289, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEngStrokeAndFillPath@40 -_NtGdiEngStrokeAndFillPath@40: - movl $0x128a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngPaint@20 -_NtGdiEngPaint@20: - movl $0x128b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEngLineTo@36 -_NtGdiEngLineTo@36: - movl $0x128c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiEngAlphaBlend@28 -_NtGdiEngAlphaBlend@28: - movl $0x128d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEngGradientFill@40 -_NtGdiEngGradientFill@40: - movl $0x128e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngTransparentBlt@32 -_NtGdiEngTransparentBlt@32: - movl $0x128f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiEngTextOut@40 -_NtGdiEngTextOut@40: - movl $0x1290, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngStretchBltROP@52 -_NtGdiEngStretchBltROP@52: - movl $0x1291, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x34 - -.global _NtGdiXLATEOBJ_cGetPalette@16 -_NtGdiXLATEOBJ_cGetPalette@16: - movl $0x1292, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiXLATEOBJ_iXlate@8 -_NtGdiXLATEOBJ_iXlate@8: - movl $0x1293, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiXLATEOBJ_hGetColorTransform@4 -_NtGdiXLATEOBJ_hGetColorTransform@4: - movl $0x1294, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCLIPOBJ_bEnum@12 -_NtGdiCLIPOBJ_bEnum@12: - movl $0x1295, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCLIPOBJ_cEnumStart@20 -_NtGdiCLIPOBJ_cEnumStart@20: - movl $0x1296, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiCLIPOBJ_ppoGetPath@4 -_NtGdiCLIPOBJ_ppoGetPath@4: - movl $0x1297, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngDeletePath@4 -_NtGdiEngDeletePath@4: - movl $0x1298, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngCreateClip@0 -_NtGdiEngCreateClip@0: - movl $0x1299, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiEngDeleteClip@4 -_NtGdiEngDeleteClip@4: - movl $0x129a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_ulGetBrushColor@4 -_NtGdiBRUSHOBJ_ulGetBrushColor@4: - movl $0x129b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_pvAllocRbrush@8 -_NtGdiBRUSHOBJ_pvAllocRbrush@8: - movl $0x129c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiBRUSHOBJ_pvGetRbrush@4 -_NtGdiBRUSHOBJ_pvGetRbrush@4: - movl $0x129d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_hGetColorTransform@4 -_NtGdiBRUSHOBJ_hGetColorTransform@4: - movl $0x129e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiXFORMOBJ_bApplyXform@20 -_NtGdiXFORMOBJ_bApplyXform@20: - movl $0x129f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiXFORMOBJ_iGetXform@8 -_NtGdiXFORMOBJ_iGetXform@8: - movl $0x12a0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_vGetInfo@12 -_NtGdiFONTOBJ_vGetInfo@12: - movl $0x12a1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiFONTOBJ_pxoGetXform@4 -_NtGdiFONTOBJ_pxoGetXform@4: - movl $0x12a2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_cGetGlyphs@20 -_NtGdiFONTOBJ_cGetGlyphs@20: - movl $0x12a3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiFONTOBJ_pifi@4 -_NtGdiFONTOBJ_pifi@4: - movl $0x12a4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_pfdg@4 -_NtGdiFONTOBJ_pfdg@4: - movl $0x12a5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_pQueryGlyphAttrs@8 -_NtGdiFONTOBJ_pQueryGlyphAttrs@8: - movl $0x12a6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_pvTrueTypeFontFile@8 -_NtGdiFONTOBJ_pvTrueTypeFontFile@8: - movl $0x12a7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_cGetAllGlyphHandles@8 -_NtGdiFONTOBJ_cGetAllGlyphHandles@8: - movl $0x12a8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSTROBJ_bEnum@12 -_NtGdiSTROBJ_bEnum@12: - movl $0x12a9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSTROBJ_bEnumPositionsOnly@12 -_NtGdiSTROBJ_bEnumPositionsOnly@12: - movl $0x12aa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSTROBJ_bGetAdvanceWidths@16 -_NtGdiSTROBJ_bGetAdvanceWidths@16: - movl $0x12ab, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSTROBJ_vEnumStart@4 -_NtGdiSTROBJ_vEnumStart@4: - movl $0x12ac, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSTROBJ_dwGetCodePage@4 -_NtGdiSTROBJ_dwGetCodePage@4: - movl $0x12ad, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPATHOBJ_vGetBounds@8 -_NtGdiPATHOBJ_vGetBounds@8: - movl $0x12ae, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiPATHOBJ_bEnum@8 -_NtGdiPATHOBJ_bEnum@8: - movl $0x12af, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiPATHOBJ_vEnumStart@4 -_NtGdiPATHOBJ_vEnumStart@4: - movl $0x12b0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPATHOBJ_vEnumStartClipLines@16 -_NtGdiPATHOBJ_vEnumStartClipLines@16: - movl $0x12b1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPATHOBJ_bEnumClipLines@12 -_NtGdiPATHOBJ_bEnumClipLines@12: - movl $0x12b2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDhpdev@4 -_NtGdiGetDhpdev@4: - movl $0x12b3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngCheckAbort@4 -_NtGdiEngCheckAbort@4: - movl $0x12b4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiHT_Get8BPPFormatPalette@16 -_NtGdiHT_Get8BPPFormatPalette@16: - movl $0x12b5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiHT_Get8BPPMaskPalette@24 -_NtGdiHT_Get8BPPMaskPalette@24: - movl $0x12b6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiUpdateTransform@4 -_NtGdiUpdateTransform@4: - movl $0x12b7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetPUMPDOBJ@16 -_NtGdiSetPUMPDOBJ@16: - movl $0x12b8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiBRUSHOBJ_DeleteRbrush@8 -_NtGdiBRUSHOBJ_DeleteRbrush@8: - movl $0x12b9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiUMPDEngFreeUserMem@4 -_NtGdiUMPDEngFreeUserMem@4: - movl $0x12ba, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDrawStream@12 -_NtGdiDrawStream@12: - movl $0x12bb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDwmGetDirtyRgn@20 -_NtGdiDwmGetDirtyRgn@20: - movl $0x12bc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiDwmGetSurfaceData@8 -_NtGdiDwmGetSurfaceData@8: - movl $0x12bd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDDICreateAllocation@4 -_NtGdiDdDDICreateAllocation@4: - movl $0x12be, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIQueryResourceInfo@4 -_NtGdiDdDDIQueryResourceInfo@4: - movl $0x12bf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIOpenResource@4 -_NtGdiDdDDIOpenResource@4: - movl $0x12c0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIDestroyAllocation@4 -_NtGdiDdDDIDestroyAllocation@4: - movl $0x12c1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISetAllocationPriority@4 -_NtGdiDdDDISetAllocationPriority@4: - movl $0x12c2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIQueryAllocationResidency@4 -_NtGdiDdDDIQueryAllocationResidency@4: - movl $0x12c3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICreateDevice@4 -_NtGdiDdDDICreateDevice@4: - movl $0x12c4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIDestroyDevice@4 -_NtGdiDdDDIDestroyDevice@4: - movl $0x12c5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICreateContext@4 -_NtGdiDdDDICreateContext@4: - movl $0x12c6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIDestroyContext@4 -_NtGdiDdDDIDestroyContext@4: - movl $0x12c7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICreateSynchronizationObject@4 -_NtGdiDdDDICreateSynchronizationObject@4: - movl $0x12c8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIDestroySynchronizationObject@4 -_NtGdiDdDDIDestroySynchronizationObject@4: - movl $0x12c9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIWaitForSynchronizationObject@4 -_NtGdiDdDDIWaitForSynchronizationObject@4: - movl $0x12ca, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISignalSynchronizationObject@4 -_NtGdiDdDDISignalSynchronizationObject@4: - movl $0x12cb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIGetRuntimeData@4 -_NtGdiDdDDIGetRuntimeData@4: - movl $0x12cc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIQueryAdapterInfo@4 -_NtGdiDdDDIQueryAdapterInfo@4: - movl $0x12cd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDILock@4 -_NtGdiDdDDILock@4: - movl $0x12ce, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIUnlock@4 -_NtGdiDdDDIUnlock@4: - movl $0x12cf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIGetDisplayModeList@4 -_NtGdiDdDDIGetDisplayModeList@4: - movl $0x12d0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISetDisplayMode@4 -_NtGdiDdDDISetDisplayMode@4: - movl $0x12d1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIGetMultisampleMethodList@4 -_NtGdiDdDDIGetMultisampleMethodList@4: - movl $0x12d2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIPresent@4 -_NtGdiDdDDIPresent@4: - movl $0x12d3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIRender@4 -_NtGdiDdDDIRender@4: - movl $0x12d4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIOpenAdapterFromDeviceName@4 -_NtGdiDdDDIOpenAdapterFromDeviceName@4: - movl $0x12d5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIOpenAdapterFromHdc@4 -_NtGdiDdDDIOpenAdapterFromHdc@4: - movl $0x12d6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICloseAdapter@4 -_NtGdiDdDDICloseAdapter@4: - movl $0x12d7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIGetSharedPrimaryHandle@4 -_NtGdiDdDDIGetSharedPrimaryHandle@4: - movl $0x12d8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIEscape@4 -_NtGdiDdDDIEscape@4: - movl $0x12d9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIQueryStatistics@4 -_NtGdiDdDDIQueryStatistics@4: - movl $0x12da, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISetVidPnSourceOwner@4 -_NtGdiDdDDISetVidPnSourceOwner@4: - movl $0x12db, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIGetPresentHistory@4 -_NtGdiDdDDIGetPresentHistory@4: - movl $0x12dc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICreateOverlay@4 -_NtGdiDdDDICreateOverlay@4: - movl $0x12dd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIUpdateOverlay@4 -_NtGdiDdDDIUpdateOverlay@4: - movl $0x12de, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIFlipOverlay@4 -_NtGdiDdDDIFlipOverlay@4: - movl $0x12df, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIDestroyOverlay@4 -_NtGdiDdDDIDestroyOverlay@4: - movl $0x12e0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIWaitForVerticalBlankEvent@4 -_NtGdiDdDDIWaitForVerticalBlankEvent@4: - movl $0x12e1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISetGammaRamp@4 -_NtGdiDdDDISetGammaRamp@4: - movl $0x12e2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIGetDeviceState@4 -_NtGdiDdDDIGetDeviceState@4: - movl $0x12e3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICreateDCFromMemory@4 -_NtGdiDdDDICreateDCFromMemory@4: - movl $0x12e4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIDestroyDCFromMemory@4 -_NtGdiDdDDIDestroyDCFromMemory@4: - movl $0x12e5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISetContextSchedulingPriority@4 -_NtGdiDdDDISetContextSchedulingPriority@4: - movl $0x12e6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIGetContextSchedulingPriority@4 -_NtGdiDdDDIGetContextSchedulingPriority@4: - movl $0x12e7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISetProcessSchedulingPriorityClass@8 -_NtGdiDdDDISetProcessSchedulingPriorityClass@8: - movl $0x12e8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDDIGetProcessSchedulingPriorityClass@8 -_NtGdiDdDDIGetProcessSchedulingPriorityClass@8: - movl $0x12e9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDDIReleaseProcessVidPnSourceOwners@4 -_NtGdiDdDDIReleaseProcessVidPnSourceOwners@4: - movl $0x12ea, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIGetScanLine@4 -_NtGdiDdDDIGetScanLine@4: - movl $0x12eb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISetQueuedLimit@4 -_NtGdiDdDDISetQueuedLimit@4: - movl $0x12ec, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIPollDisplayChildren@4 -_NtGdiDdDDIPollDisplayChildren@4: - movl $0x12ed, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIInvalidateActiveVidPn@4 -_NtGdiDdDDIInvalidateActiveVidPn@4: - movl $0x12ee, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICheckOcclusion@4 -_NtGdiDdDDICheckOcclusion@4: - movl $0x12ef, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDIWaitForIdle@4 -_NtGdiDdDDIWaitForIdle@4: - movl $0x12f0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICheckMonitorPowerState@4 -_NtGdiDdDDICheckMonitorPowerState@4: - movl $0x12f1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDICheckExclusiveOwnership@0 -_NtGdiDdDDICheckExclusiveOwnership@0: - movl $0x12f2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiDdDDISetDisplayPrivateDriverFormat@4 -_NtGdiDdDDISetDisplayPrivateDriverFormat@4: - movl $0x12f3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISharedPrimaryLockNotification@4 -_NtGdiDdDDISharedPrimaryLockNotification@4: - movl $0x12f4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDDISharedPrimaryUnLockNotification@4 -_NtGdiDdDDISharedPrimaryUnLockNotification@4: - movl $0x12f5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiMakeObjectXferable@8 -_NtGdiMakeObjectXferable@8: - movl $0x12f6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiMakeObjectUnXferable@4 -_NtGdiMakeObjectUnXferable@4: - movl $0x12f7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetNumberOfPhysicalMonitors@8 -_NtGdiGetNumberOfPhysicalMonitors@8: - movl $0x12f8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetPhysicalMonitors@16 -_NtGdiGetPhysicalMonitors@16: - movl $0x12f9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPhysicalMonitorDescription@12 -_NtGdiGetPhysicalMonitorDescription@12: - movl $0x12fa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDestroyPhysicalMonitor@4 -_NtGdiDestroyPhysicalMonitor@4: - movl $0x12fb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDDCCIGetVCPFeature@20 -_NtGdiDDCCIGetVCPFeature@20: - movl $0x12fc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiDDCCISetVCPFeature@12 -_NtGdiDDCCISetVCPFeature@12: - movl $0x12fd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDDCCISaveCurrentSettings@4 -_NtGdiDDCCISaveCurrentSettings@4: - movl $0x12fe, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDDCCIGetCapabilitiesStringLength@8 -_NtGdiDDCCIGetCapabilitiesStringLength@8: - movl $0x12ff, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDDCCIGetCapabilitiesString@12 -_NtGdiDDCCIGetCapabilitiesString@12: - movl $0x1300, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDDCCIGetTimingReport@8 -_NtGdiDDCCIGetTimingReport@8: - movl $0x1301, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetMirrorRendering@8 -_NtUserSetMirrorRendering@8: - movl $0x1302, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserShowSystemCursor@4 -_NtUserShowSystemCursor@4: - movl $0x1303, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.def b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.def deleted file mode 100644 index ccf98a7ed26..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.def +++ /dev/null @@ -1,781 +0,0 @@ -; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ -; -; ReactOS Operating System -; -; This file contains all win32k native api functions from win 2k3 sp 2 -; -LIBRARY w32kdll.dll - -EXPORTS -NtGdiAbortDoc@4 -NtGdiAbortPath@4 -NtGdiAddFontResourceW@24 -NtGdiAddRemoteFontToDC@16 -NtGdiAddFontMemResourceEx@20 -NtGdiRemoveMergeFont@8 -NtGdiAddRemoteMMInstanceToDC@12 -NtGdiAlphaBlend@48 -NtGdiAngleArc@24 -NtGdiAnyLinkedFonts@0 -NtGdiFontIsLinked@4 -NtGdiArcInternal@40 -NtGdiBeginPath@4 -NtGdiBitBlt@44 -NtGdiCancelDC@4 -NtGdiCheckBitmapBits@32 -NtGdiCloseFigure@4 -NtGdiClearBitmapAttributes@8 -NtGdiClearBrushAttributes@8 -NtGdiColorCorrectPalette@24 -NtGdiCombineRgn@16 -NtGdiCombineTransform@12 -NtGdiComputeXformCoefficients@4 -NtGdiConfigureOPMProtectedOutput@16 -NtGdiConsoleTextOut@16 -NtGdiConvertMetafileRect@8 -NtGdiCreateBitmap@20 -NtGdiCreateClientObj@4 -NtGdiCreateColorSpace@4 -NtGdiCreateColorTransform@32 -NtGdiCreateCompatibleBitmap@12 -NtGdiCreateCompatibleDC@4 -NtGdiCreateDIBBrush@24 -NtGdiCreateDIBitmapInternal@44 -NtGdiCreateDIBSection@36 -NtGdiCreateEllipticRgn@16 -NtGdiCreateHalftonePalette@4 -NtGdiCreateHatchBrushInternal@12 -NtGdiCreateMetafileDC@4 -NtGdiCreateOPMProtectedOutputs@20 -NtGdiCreatePaletteInternal@8 -NtGdiCreatePatternBrushInternal@12 -NtGdiCreatePen@16 -NtGdiCreateRectRgn@16 -NtGdiCreateRoundRectRgn@24 -NtGdiCreateServerMetaFile@24 -NtGdiCreateSolidBrush@8 -NtGdiD3dContextCreate@16 -NtGdiD3dContextDestroy@4 -NtGdiD3dContextDestroyAll@4 -NtGdiD3dValidateTextureStageState@4 -NtGdiD3dDrawPrimitives2@28 -NtGdiDdGetDriverState@4 -NtGdiDdAddAttachedSurface@12 -NtGdiDdAlphaBlt@12 -NtGdiDdAttachSurface@8 -NtGdiDdBeginMoCompFrame@8 -NtGdiDdBlt@12 -NtGdiDdCanCreateSurface@8 -NtGdiDdCanCreateD3DBuffer@8 -NtGdiDdColorControl@8 -NtGdiDdCreateDirectDrawObject@4 -NtGdiDdCreateSurface@32 -NtGdiDdCreateD3DBuffer@32 -NtGdiDdCreateMoComp@8 -NtGdiDdCreateSurfaceObject@24 -NtGdiDdDeleteDirectDrawObject@4 -NtGdiDdDeleteSurfaceObject@4 -NtGdiDdDestroyMoComp@8 -NtGdiDdDestroySurface@8 -NtGdiDdDestroyD3DBuffer@4 -NtGdiDdEndMoCompFrame@8 -NtGdiDdFlip@20 -NtGdiDdFlipToGDISurface@8 -NtGdiDdGetAvailDriverMemory@8 -NtGdiDdGetBltStatus@8 -NtGdiDdGetDC@8 -NtGdiDdGetDriverInfo@8 -NtGdiDdGetDxHandle@12 -NtGdiDdGetFlipStatus@8 -NtGdiDdGetInternalMoCompInfo@8 -NtGdiDdGetMoCompBuffInfo@8 -NtGdiDdGetMoCompGuids@8 -NtGdiDdGetMoCompFormats@8 -NtGdiDdGetScanLine@8 -NtGdiDdLock@12 -NtGdiDdLockD3D@8 -NtGdiDdQueryDirectDrawObject@44 -NtGdiDdQueryMoCompStatus@8 -NtGdiDdReenableDirectDrawObject@8 -NtGdiDdReleaseDC@4 -NtGdiDdRenderMoComp@8 -NtGdiDdResetVisrgn@8 -NtGdiDdSetColorKey@8 -NtGdiDdSetExclusiveMode@8 -NtGdiDdSetGammaRamp@12 -NtGdiDdCreateSurfaceEx@12 -NtGdiDdSetOverlayPosition@12 -NtGdiDdUnattachSurface@8 -NtGdiDdUnlock@8 -NtGdiDdUnlockD3D@8 -NtGdiDdUpdateOverlay@12 -NtGdiDdWaitForVerticalBlank@8 -NtGdiDvpCanCreateVideoPort@8 -NtGdiDvpColorControl@8 -NtGdiDvpCreateVideoPort@8 -NtGdiDvpDestroyVideoPort@8 -NtGdiDvpFlipVideoPort@16 -NtGdiDvpGetVideoPortBandwidth@8 -NtGdiDvpGetVideoPortField@8 -NtGdiDvpGetVideoPortFlipStatus@8 -NtGdiDvpGetVideoPortInputFormats@8 -NtGdiDvpGetVideoPortLine@8 -NtGdiDvpGetVideoPortOutputFormats@8 -NtGdiDvpGetVideoPortConnectInfo@8 -NtGdiDvpGetVideoSignalStatus@8 -NtGdiDvpUpdateVideoPort@16 -NtGdiDvpWaitForVideoPortSync@8 -NtGdiDvpAcquireNotification@12 -NtGdiDvpReleaseNotification@8 -NtGdiDxgGenericThunk@24 -NtGdiDeleteClientObj@4 -NtGdiDeleteColorSpace@4 -NtGdiDeleteColorTransform@8 -NtGdiDeleteObjectApp@4 -NtGdiDescribePixelFormat@16 -NtGdiDestroyOPMProtectedOutput@4 -NtGdiGetPerBandInfo@8 -NtGdiDoBanding@16 -NtGdiDoPalette@24 -NtGdiDrawEscape@16 -NtGdiEllipse@20 -NtGdiEnableEudc@4 -NtGdiEndDoc@4 -NtGdiEndPage@4 -NtGdiEndPath@4 -NtGdiEnumFontChunk@20 -NtGdiEnumFontClose@4 -NtGdiEnumFontOpen@28 -NtGdiEnumObjects@16 -NtGdiEqualRgn@8 -NtGdiEudcLoadUnloadLink@28 -NtGdiExcludeClipRect@20 -NtGdiExtCreatePen@44 -NtGdiExtCreateRegion@12 -NtGdiExtEscape@32 -NtGdiExtFloodFill@20 -NtGdiExtGetObjectW@12 -NtGdiExtSelectClipRgn@12 -NtGdiExtTextOutW@36 -NtGdiFillPath@4 -NtGdiFillRgn@12 -NtGdiFlattenPath@4 -NtGdiFlush@0 -NtGdiForceUFIMapping@8 -NtGdiFrameRgn@20 -NtGdiFullscreenControl@20 -NtGdiGetAndSetDCDword@16 -NtGdiGetAppClipBox@8 -NtGdiGetBitmapBits@12 -NtGdiGetBitmapDimension@8 -NtGdiGetBoundsRect@12 -NtGdiGetCertificate@16 -NtGdiGetCertificateSize@12 -NtGdiGetCharABCWidthsW@24 -NtGdiGetCharacterPlacementW@24 -NtGdiGetCharSet@4 -NtGdiGetCharWidthW@24 -NtGdiGetCharWidthInfo@8 -NtGdiGetColorAdjustment@8 -NtGdiGetColorSpaceforBitmap@4 -NtGdiGetCOPPCompatibleOPMInformation@12 -NtGdiGetDCDword@12 -NtGdiGetDCforBitmap@4 -NtGdiGetDCObject@8 -NtGdiGetDCPoint@12 -NtGdiGetDeviceCaps@8 -NtGdiGetDeviceGammaRamp@8 -NtGdiGetDeviceCapsAll@8 -NtGdiGetDIBitsInternal@36 -NtGdiGetETM@8 -NtGdiGetEudcTimeStampEx@12 -NtGdiGetFontData@20 -NtGdiGetFontResourceInfoInternalW@28 -NtGdiGetGlyphIndicesW@20 -NtGdiGetGlyphIndicesWInternal@24 -NtGdiGetGlyphOutline@32 -NtGdiGetOPMInformation@12 -NtGdiGetKerningPairs@12 -NtGdiGetLinkedUFIs@12 -NtGdiGetMiterLimit@8 -NtGdiGetMonitorID@12 -NtGdiGetNearestColor@8 -NtGdiGetNearestPaletteIndex@8 -NtGdiGetObjectBitmapHandle@8 -NtGdiGetOPMRandomNumber@8 -NtGdiGetOutlineTextMetricsInternalW@16 -NtGdiGetPath@16 -NtGdiGetPixel@12 -NtGdiGetRandomRgn@12 -NtGdiGetRasterizerCaps@8 -NtGdiGetRealizationInfo@12 -NtGdiGetRegionData@12 -NtGdiGetRgnBox@8 -NtGdiGetServerMetaFileBits@28 -NtGdiGetSpoolMessage@16 -NtGdiGetStats@20 -NtGdiGetStockObject@4 -NtGdiGetStringBitmapW@20 -NtGdiGetSuggestedOPMProtectedOutputArraySize@8 -NtGdiGetSystemPaletteUse@4 -NtGdiGetTextCharsetInfo@12 -NtGdiGetTextExtent@20 -NtGdiGetTextExtentExW@32 -NtGdiGetTextFaceW@16 -NtGdiGetTextMetricsW@12 -NtGdiGetTransform@12 -NtGdiGetUFI@24 -NtGdiGetEmbUFI@28 -NtGdiGetUFIPathname@40 -NtGdiGetEmbedFonts@0 -NtGdiChangeGhostFont@8 -NtGdiAddEmbFontToDC@8 -NtGdiGetFontUnicodeRanges@8 -NtGdiGetWidthTable@28 -NtGdiGradientFill@24 -NtGdiHfontCreate@20 -NtGdiIcmBrushInfo@32 -NtGdiInit@0 -NtGdiInitSpool@0 -NtGdiIntersectClipRect@20 -NtGdiInvertRgn@8 -NtGdiLineTo@12 -NtGdiMakeFontDir@20 -NtGdiMakeInfoDC@8 -NtGdiMaskBlt@52 -NtGdiModifyWorldTransform@12 -NtGdiMonoBitmap@4 -NtGdiMoveTo@16 -NtGdiOffsetClipRgn@12 -NtGdiOffsetRgn@12 -NtGdiOpenDCW@32 -NtGdiPatBlt@24 -NtGdiPolyPatBlt@20 -NtGdiPathToRegion@4 -NtGdiPlgBlt@44 -NtGdiPolyDraw@16 -NtGdiPolyPolyDraw@20 -NtGdiPolyTextOutW@16 -NtGdiPtInRegion@12 -NtGdiPtVisible@12 -NtGdiQueryFonts@12 -NtGdiQueryFontAssocInfo@4 -NtGdiRectangle@20 -NtGdiRectInRegion@8 -NtGdiRectVisible@8 -NtGdiRemoveFontResourceW@24 -NtGdiRemoveFontMemResourceEx@4 -NtGdiResetDC@20 -NtGdiResizePalette@8 -NtGdiRestoreDC@8 -NtGdiRoundRect@28 -NtGdiSaveDC@4 -NtGdiScaleViewportExtEx@24 -NtGdiScaleWindowExtEx@24 -NtGdiSelectBitmap@8 -NtGdiSelectBrush@8 -NtGdiSelectClipPath@8 -NtGdiSelectFont@8 -NtGdiSelectPen@8 -NtGdiSetBitmapAttributes@8 -NtGdiSetBitmapBits@12 -NtGdiSetBitmapDimension@16 -NtGdiSetBoundsRect@12 -NtGdiSetBrushAttributes@8 -NtGdiSetBrushOrg@16 -NtGdiSetColorAdjustment@8 -NtGdiSetColorSpace@8 -NtGdiSetDeviceGammaRamp@8 -NtGdiSetDIBitsToDeviceInternal@64 -NtGdiSetFontEnumeration@4 -NtGdiSetFontXform@12 -NtGdiSetIcmMode@12 -NtGdiSetLinkedUFIs@12 -NtGdiSetMagicColors@12 -NtGdiSetMetaRgn@4 -NtGdiSetMiterLimit@12 -NtGdiGetDeviceWidth@4 -NtGdiMirrorWindowOrg@4 -NtGdiSetLayout@12 -NtGdiSetOPMSigningKeyAndSequenceNumbers@8 -NtGdiSetPixel@16 -NtGdiSetPixelFormat@8 -NtGdiSetRectRgn@20 -NtGdiSetSystemPaletteUse@8 -NtGdiSetTextJustification@12 -NtGdiSetupPublicCFONT@12 -NtGdiSetVirtualResolution@20 -NtGdiSetSizeDevice@12 -NtGdiStartDoc@16 -NtGdiStartPage@4 -NtGdiStretchBlt@48 -NtGdiStretchDIBitsInternal@64 -NtGdiStrokeAndFillPath@4 -NtGdiStrokePath@4 -NtGdiSwapBuffers@4 -NtGdiTransformPoints@20 -NtGdiTransparentBlt@44 -NtGdiUnloadPrinterDriver@8 -NtGdiUnmapMemFont@4 -NtGdiUnrealizeObject@4 -NtGdiUpdateColors@4 -NtGdiWidenPath@4 -NtUserActivateKeyboardLayout@8 -NtUserAddClipboardFormatListener@4 -NtUserAlterWindowStyle@12 -NtUserAssociateInputContext@12 -NtUserAttachThreadInput@12 -NtUserBeginPaint@8 -NtUserBitBltSysBmp@32 -NtUserBlockInput@4 -NtUserBuildHimcList@16 -NtUserBuildHwndList@28 -NtUserBuildNameList@16 -NtUserBuildPropList@16 -NtUserCallHwnd@8 -NtUserCallHwndLock@8 -NtUserCallHwndOpt@8 -NtUserCallHwndParam@12 -NtUserCallHwndParamLock@12 -NtUserCallMsgFilter@8 -NtUserCallNextHookEx@16 -NtUserCallNoParam@4 -NtUserCallOneParam@8 -NtUserCallTwoParam@12 -NtUserChangeClipboardChain@8 -NtUserChangeDisplaySettings@16 -NtUserCheckAccessForIntegrityLevel@12 -NtUserCheckDesktopByThreadId@4 -NtUserCheckWindowThreadDesktop@12 -NtUserCheckImeHotKey@8 -NtUserCheckMenuItem@12 -NtUserChildWindowFromPointEx@16 -NtUserClipCursor@4 -NtUserCloseClipboard@0 -NtUserCloseDesktop@4 -NtUserCloseWindowStation@4 -NtUserConsoleControl@12 -NtUserConvertMemHandle@8 -NtUserCopyAcceleratorTable@12 -NtUserCountClipboardFormats@0 -NtUserCreateAcceleratorTable@8 -NtUserCreateCaret@16 -NtUserCreateDesktopEx@24 -NtUserCreateInputContext@4 -NtUserCreateLocalMemHandle@16 -NtUserCreateWindowEx@60 -NtUserCreateWindowStation@28 -NtUserDdeInitialize@20 -NtUserDeferWindowPos@32 -NtUserDefSetText@8 -NtUserDeleteMenu@12 -NtUserDestroyAcceleratorTable@4 -NtUserDestroyCursor@8 -NtUserDestroyInputContext@4 -NtUserDestroyMenu@4 -NtUserDestroyWindow@4 -NtUserDisableThreadIme@4 -NtUserDispatchMessage@4 -NtUserDoSoundConnect@0 -NtUserDoSoundDisconnect@0 -NtUserDragDetect@12 -NtUserDragObject@20 -NtUserDrawAnimatedRects@16 -NtUserDrawCaption@16 -NtUserDrawCaptionTemp@28 -NtUserDrawIconEx@44 -NtUserDrawMenuBarTemp@20 -NtUserEmptyClipboard@0 -NtUserEnableMenuItem@12 -NtUserEnableScrollBar@12 -NtUserEndDeferWindowPosEx@8 -NtUserEndMenu@0 -NtUserEndPaint@8 -NtUserEnumDisplayDevices@16 -NtUserEnumDisplayMonitors@16 -NtUserEnumDisplaySettings@16 -NtUserEvent@4 -NtUserExcludeUpdateRgn@8 -NtUserFillWindow@16 -NtUserFindExistingCursorIcon@12 -NtUserFindWindowEx@20 -NtUserFlashWindowEx@4 -NtUserFrostCrashedWindow@8 -NtUserGetAltTabInfo@24 -NtUserGetAncestor@8 -NtUserGetAppImeLevel@4 -NtUserGetAsyncKeyState@4 -NtUserGetAtomName@8 -NtUserGetCaretBlinkTime@0 -NtUserGetCaretPos@4 -NtUserGetClassInfoEx@20 -NtUserGetClassName@12 -NtUserGetClipboardData@8 -NtUserGetClipboardFormatName@12 -NtUserGetClipboardOwner@0 -NtUserGetClipboardSequenceNumber@0 -NtUserGetClipboardViewer@0 -NtUserGetClipCursor@4 -NtUserGetComboBoxInfo@8 -NtUserGetControlBrush@12 -NtUserGetControlColor@16 -NtUserGetCPD@12 -NtUserGetCursorFrameInfo@16 -NtUserGetCursorInfo@4 -NtUserGetDC@4 -NtUserGetDCEx@12 -NtUserGetDoubleClickTime@0 -NtUserGetForegroundWindow@0 -NtUserGetGuiResources@8 -NtUserGetGUIThreadInfo@8 -NtUserGetIconInfo@24 -NtUserGetIconSize@16 -NtUserGetImeHotKey@16 -NtUserGetImeInfoEx@8 -NtUserGetInternalWindowPos@12 -NtUserGetKeyboardLayoutList@8 -NtUserGetKeyboardLayoutName@4 -NtUserGetKeyboardState@4 -NtUserGetKeyNameText@12 -NtUserGetKeyState@4 -NtUserGetListBoxInfo@4 -NtUserGetMenuBarInfo@16 -NtUserGetMenuIndex@8 -NtUserGetMenuItemRect@16 -NtUserGetMessage@16 -NtUserGetMouseMovePointsEx@20 -NtUserGetObjectInformation@20 -NtUserGetOpenClipboardWindow@0 -NtUserGetPriorityClipboardFormat@8 -NtUserGetProcessWindowStation@0 -NtUserGetRawInputBuffer@12 -NtUserGetRawInputData@20 -NtUserGetRawInputDeviceInfo@16 -NtUserGetRawInputDeviceList@12 -NtUserGetRegisteredRawInputDevices@12 -NtUserGetScrollBarInfo@12 -NtUserGetSystemMenu@8 -NtUserGetThreadDesktop@8 -NtUserGetThreadState@4 -NtUserGetTitleBarInfo@8 -NtUserGetUpdatedClipboardFormats@12 -NtUserGetUpdateRect@12 -NtUserGetUpdateRgn@12 -NtUserGetWindowDC@4 -NtUserGetWindowPlacement@8 -NtUserGetWOWClass@8 -NtUserGhostWindowFromHungWindow@4 -NtUserHardErrorControl@12 -NtUserHideCaret@4 -NtUserHiliteMenuItem@16 -NtUserHungWindowFromGhostWindow@4 -NtUserImpersonateDdeClientWindow@8 -NtUserInitialize@8 -NtUserInitializeClientPfnArrays@16 -NtUserInitTask@48 -NtUserInternalGetWindowText@12 -NtUserInternalGetWindowIcon@8 -NtUserInvalidateRect@12 -NtUserInvalidateRgn@12 -NtUserIsClipboardFormatAvailable@4 -NtUserKillTimer@8 -NtUserLoadKeyboardLayoutEx@28 -NtUserLockWindowStation@4 -NtUserLockWindowUpdate@4 -NtUserLockWorkStation@0 -NtUserLogicalToPhysicalPoint@8 -NtUserMapVirtualKeyEx@16 -NtUserMenuItemFromPoint@16 -NtUserMessageCall@28 -NtUserMinMaximize@12 -NtUserMNDragLeave@0 -NtUserMNDragOver@8 -NtUserModifyUserStartupInfoFlags@8 -NtUserMoveWindow@24 -NtUserNotifyIMEStatus@12 -NtUserNotifyProcessCreate@16 -NtUserNotifyWinEvent@16 -NtUserOpenClipboard@8 -NtUserOpenDesktop@12 -NtUserOpenInputDesktop@12 -NtUserOpenThreadDesktop@20 -NtUserOpenWindowStation@8 -NtUserPaintDesktop@4 -NtUserPaintMonitor@12 -NtUserPeekMessage@20 -NtUserPhysicalToLogicalPoint@8 -NtUserPostMessage@16 -NtUserPostThreadMessage@16 -NtUserPrintWindow@12 -NtUserProcessConnect@8 -NtUserQueryInformationThread@16 -NtUserQueryInputContext@8 -NtUserQuerySendMessage@4 -NtUserQueryWindow@8 -NtUserRealChildWindowFromPoint@12 -NtUserRealInternalGetMessage@24 -NtUserRealWaitMessageEx@8 -NtUserRedrawWindow@16 -NtUserRegisterClassExWOW@28 -NtUserRegisterErrorReportingDialog@8 -NtUserRegisterUserApiHook@16 -NtUserRegisterHotKey@16 -NtUserRegisterRawInputDevices@12 -NtUserRegisterTasklist@4 -NtUserRegisterWindowMessage@4 -NtUserRemoveClipboardFormatListener@4 -NtUserRemoveMenu@12 -NtUserRemoveProp@8 -NtUserResolveDesktop@16 -NtUserResolveDesktopForWOW@4 -NtUserSBGetParms@16 -NtUserScrollDC@28 -NtUserScrollWindowEx@32 -NtUserSelectPalette@12 -NtUserSendInput@12 -NtUserSetActiveWindow@4 -NtUserSetAppImeLevel@8 -NtUserSetCapture@4 -NtUserSetClassLong@16 -NtUserSetClassWord@12 -NtUserSetClipboardData@12 -NtUserSetClipboardViewer@4 -NtUserSetConsoleReserveKeys@8 -NtUserSetCursor@4 -NtUserSetCursorContents@8 -NtUserSetCursorIconData@16 -NtUserSetFocus@4 -NtUserSetImeHotKey@20 -NtUserSetImeInfoEx@4 -NtUserSetImeOwnerWindow@8 -NtUserSetInformationProcess@16 -NtUserSetInformationThread@16 -NtUserSetInternalWindowPos@16 -NtUserSetKeyboardState@4 -NtUserSetMenu@12 -NtUserSetMenuContextHelpId@8 -NtUserSetMenuDefaultItem@12 -NtUserSetMenuFlagRtoL@4 -NtUserSetObjectInformation@16 -NtUserSetParent@8 -NtUserSetProcessWindowStation@4 -NtUserGetProp@8 -NtUserSetProp@12 -NtUserSetScrollInfo@16 -NtUserSetShellWindowEx@8 -NtUserSetSysColors@16 -NtUserSetSystemCursor@8 -NtUserSetSystemMenu@8 -NtUserSetSystemTimer@12 -NtUserSetThreadDesktop@4 -NtUserSetThreadLayoutHandles@8 -NtUserSetThreadState@8 -NtUserSetTimer@16 -NtUserSetProcessDPIAware@0 -NtUserSetWindowFNID@8 -NtUserSetWindowLong@16 -NtUserSetWindowPlacement@8 -NtUserSetWindowPos@28 -NtUserSetWindowRgn@12 -NtUserGetWindowRgnEx@12 -NtUserSetWindowRgnEx@12 -NtUserSetWindowsHookAW@12 -NtUserSetWindowsHookEx@24 -NtUserSetWindowStationUser@16 -NtUserSetWindowWord@12 -NtUserSetWinEventHook@32 -NtUserShowCaret@4 -NtUserShowScrollBar@12 -NtUserShowWindow@8 -NtUserShowWindowAsync@8 -NtUserSoundSentry@0 -NtUserSwitchDesktop@8 -NtUserSystemParametersInfo@16 -NtUserTestForInteractiveUser@4 -NtUserThunkedMenuInfo@8 -NtUserThunkedMenuItemInfo@24 -NtUserToUnicodeEx@28 -NtUserTrackMouseEvent@4 -NtUserTrackPopupMenuEx@24 -NtUserCalcMenuBar@20 -NtUserPaintMenuBar@24 -NtUserTranslateAccelerator@12 -NtUserTranslateMessage@8 -NtUserUnhookWindowsHookEx@4 -NtUserUnhookWinEvent@4 -NtUserUnloadKeyboardLayout@4 -NtUserUnlockWindowStation@4 -NtUserUnregisterClass@12 -NtUserUnregisterUserApiHook@0 -NtUserUnregisterHotKey@8 -NtUserUpdateInputContext@12 -NtUserUpdateInstance@12 -NtUserUpdateLayeredWindow@40 -NtUserGetLayeredWindowAttributes@16 -NtUserSetLayeredWindowAttributes@16 -NtUserUpdatePerUserSystemParameters@4 -NtUserUserHandleGrantAccess@12 -NtUserValidateHandleSecure@4 -NtUserValidateRect@8 -NtUserValidateTimerCallback@4 -NtUserVkKeyScanEx@12 -NtUserWaitForInputIdle@12 -NtUserWaitForMsgAndEvent@4 -NtUserWaitMessage@0 -NtUserWin32PoolAllocationStats@24 -NtUserWindowFromPhysicalPoint@8 -NtUserWindowFromPoint@8 -NtUserYieldTask@0 -NtUserRemoteConnect@12 -NtUserRemoteRedrawRectangle@16 -NtUserRemoteRedrawScreen@0 -NtUserRemoteStopScreenUpdates@0 -NtUserCtxDisplayIOCtl@12 -NtUserRegisterSessionPort@4 -NtUserUnregisterSessionPort@0 -NtUserUpdateWindowTransform@12 -NtUserDwmStartRedirection@4 -NtUserDwmStopRedirection@0 -NtUserDwmHintDxUpdate@8 -NtUserDwmGetDxRgn@12 -NtUserGetWindowMinimizeRect@8 -NtGdiEngAssociateSurface@12 -NtGdiEngCreateBitmap@24 -NtGdiEngCreateDeviceSurface@16 -NtGdiEngCreateDeviceBitmap@16 -NtGdiEngCreatePalette@24 -NtGdiEngComputeGlyphSet@12 -NtGdiEngCopyBits@24 -NtGdiEngDeletePalette@4 -NtGdiEngDeleteSurface@4 -NtGdiEngEraseSurface@12 -NtGdiEngUnlockSurface@4 -NtGdiEngLockSurface@4 -NtGdiEngBitBlt@44 -NtGdiEngStretchBlt@44 -NtGdiEngPlgBlt@44 -NtGdiEngMarkBandingSurface@4 -NtGdiEngStrokePath@32 -NtGdiEngFillPath@28 -NtGdiEngStrokeAndFillPath@40 -NtGdiEngPaint@20 -NtGdiEngLineTo@36 -NtGdiEngAlphaBlend@28 -NtGdiEngGradientFill@40 -NtGdiEngTransparentBlt@32 -NtGdiEngTextOut@40 -NtGdiEngStretchBltROP@52 -NtGdiXLATEOBJ_cGetPalette@16 -NtGdiXLATEOBJ_iXlate@8 -NtGdiXLATEOBJ_hGetColorTransform@4 -NtGdiCLIPOBJ_bEnum@12 -NtGdiCLIPOBJ_cEnumStart@20 -NtGdiCLIPOBJ_ppoGetPath@4 -NtGdiEngDeletePath@4 -NtGdiEngCreateClip@0 -NtGdiEngDeleteClip@4 -NtGdiBRUSHOBJ_ulGetBrushColor@4 -NtGdiBRUSHOBJ_pvAllocRbrush@8 -NtGdiBRUSHOBJ_pvGetRbrush@4 -NtGdiBRUSHOBJ_hGetColorTransform@4 -NtGdiXFORMOBJ_bApplyXform@20 -NtGdiXFORMOBJ_iGetXform@8 -NtGdiFONTOBJ_vGetInfo@12 -NtGdiFONTOBJ_pxoGetXform@4 -NtGdiFONTOBJ_cGetGlyphs@20 -NtGdiFONTOBJ_pifi@4 -NtGdiFONTOBJ_pfdg@4 -NtGdiFONTOBJ_pQueryGlyphAttrs@8 -NtGdiFONTOBJ_pvTrueTypeFontFile@8 -NtGdiFONTOBJ_cGetAllGlyphHandles@8 -NtGdiSTROBJ_bEnum@12 -NtGdiSTROBJ_bEnumPositionsOnly@12 -NtGdiSTROBJ_bGetAdvanceWidths@16 -NtGdiSTROBJ_vEnumStart@4 -NtGdiSTROBJ_dwGetCodePage@4 -NtGdiPATHOBJ_vGetBounds@8 -NtGdiPATHOBJ_bEnum@8 -NtGdiPATHOBJ_vEnumStart@4 -NtGdiPATHOBJ_vEnumStartClipLines@16 -NtGdiPATHOBJ_bEnumClipLines@12 -NtGdiGetDhpdev@4 -NtGdiEngCheckAbort@4 -NtGdiHT_Get8BPPFormatPalette@16 -NtGdiHT_Get8BPPMaskPalette@24 -NtGdiUpdateTransform@4 -NtGdiSetPUMPDOBJ@16 -NtGdiBRUSHOBJ_DeleteRbrush@8 -NtGdiUMPDEngFreeUserMem@4 -NtGdiDrawStream@12 -NtGdiDwmGetDirtyRgn@20 -NtGdiDwmGetSurfaceData@8 -NtGdiDdDDICreateAllocation@4 -NtGdiDdDDIQueryResourceInfo@4 -NtGdiDdDDIOpenResource@4 -NtGdiDdDDIDestroyAllocation@4 -NtGdiDdDDISetAllocationPriority@4 -NtGdiDdDDIQueryAllocationResidency@4 -NtGdiDdDDICreateDevice@4 -NtGdiDdDDIDestroyDevice@4 -NtGdiDdDDICreateContext@4 -NtGdiDdDDIDestroyContext@4 -NtGdiDdDDICreateSynchronizationObject@4 -NtGdiDdDDIDestroySynchronizationObject@4 -NtGdiDdDDIWaitForSynchronizationObject@4 -NtGdiDdDDISignalSynchronizationObject@4 -NtGdiDdDDIGetRuntimeData@4 -NtGdiDdDDIQueryAdapterInfo@4 -NtGdiDdDDILock@4 -NtGdiDdDDIUnlock@4 -NtGdiDdDDIGetDisplayModeList@4 -NtGdiDdDDISetDisplayMode@4 -NtGdiDdDDIGetMultisampleMethodList@4 -NtGdiDdDDIPresent@4 -NtGdiDdDDIRender@4 -NtGdiDdDDIOpenAdapterFromDeviceName@4 -NtGdiDdDDIOpenAdapterFromHdc@4 -NtGdiDdDDICloseAdapter@4 -NtGdiDdDDIGetSharedPrimaryHandle@4 -NtGdiDdDDIEscape@4 -NtGdiDdDDIQueryStatistics@4 -NtGdiDdDDISetVidPnSourceOwner@4 -NtGdiDdDDIGetPresentHistory@4 -NtGdiDdDDICreateOverlay@4 -NtGdiDdDDIUpdateOverlay@4 -NtGdiDdDDIFlipOverlay@4 -NtGdiDdDDIDestroyOverlay@4 -NtGdiDdDDIWaitForVerticalBlankEvent@4 -NtGdiDdDDISetGammaRamp@4 -NtGdiDdDDIGetDeviceState@4 -NtGdiDdDDICreateDCFromMemory@4 -NtGdiDdDDIDestroyDCFromMemory@4 -NtGdiDdDDISetContextSchedulingPriority@4 -NtGdiDdDDIGetContextSchedulingPriority@4 -NtGdiDdDDISetProcessSchedulingPriorityClass@8 -NtGdiDdDDIGetProcessSchedulingPriorityClass@8 -NtGdiDdDDIReleaseProcessVidPnSourceOwners@4 -NtGdiDdDDIGetScanLine@4 -NtGdiDdDDISetQueuedLimit@4 -NtGdiDdDDIPollDisplayChildren@4 -NtGdiDdDDIInvalidateActiveVidPn@4 -NtGdiDdDDICheckOcclusion@4 -NtGdiDdDDIWaitForIdle@4 -NtGdiDdDDICheckMonitorPowerState@4 -NtGdiDdDDICheckExclusiveOwnership@0 -NtGdiDdDDISetDisplayPrivateDriverFormat@4 -NtGdiDdDDISharedPrimaryLockNotification@4 -NtGdiDdDDISharedPrimaryUnLockNotification@4 -NtGdiMakeObjectXferable@8 -NtGdiMakeObjectUnXferable@4 -NtGdiGetNumberOfPhysicalMonitors@8 -NtGdiGetPhysicalMonitors@16 -NtGdiGetPhysicalMonitorDescription@12 -NtGdiDestroyPhysicalMonitor@4 -NtGdiDDCCIGetVCPFeature@20 -NtGdiDDCCISetVCPFeature@12 -NtGdiDDCCISaveCurrentSettings@4 -NtGdiDDCCIGetCapabilitiesStringLength@8 -NtGdiDDCCIGetCapabilitiesString@12 -NtGdiDDCCIGetTimingReport@8 -NtUserSetMirrorRendering@8 -NtUserShowSystemCursor@4 diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild deleted file mode 100644 index a504093c201..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - 0x0502 - w32kdll_vista.S - main.c - diff --git a/rostests/apitests/w32kdll/w32kdll_xpsp2/main.c b/rostests/apitests/w32kdll/w32kdll_xpsp2/main.c deleted file mode 100644 index 13a149cc27e..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_xpsp2/main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include - -#ifdef BUILD_DLL - #define DLL_EXPORT __declspec(dllexport) -#else - #define DLL_EXPORT -#endif - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - // attach to process - // return FALSE to fail DLL load - break; - - case DLL_PROCESS_DETACH: - // detach from process - break; - - case DLL_THREAD_ATTACH: - // attach to thread - break; - - case DLL_THREAD_DETACH: - // detach from thread - break; - } - return TRUE; // succesful -} diff --git a/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.S b/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.S deleted file mode 100644 index 8657456a0d8..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.S +++ /dev/null @@ -1,4675 +0,0 @@ -/* FILE: System Call Stubs for Windows XP SP2 Build 2600 32Bit Native API - * COPYRIGHT: See COPYING in the top level directory - */ - -#define KUSER_SHARED_SYSCALL 0x7FFE0300 - -.global _NtGdiAbortDoc@4 -_NtGdiAbortDoc@4: - movl $0x1000, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiAbortPath@4 -_NtGdiAbortPath@4: - movl $0x1001, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiAddFontResourceW@24 -_NtGdiAddFontResourceW@24: - movl $0x1002, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiAddRemoteFontToDC@16 -_NtGdiAddRemoteFontToDC@16: - movl $0x1003, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiAddFontMemResourceEx@20 -_NtGdiAddFontMemResourceEx@20: - movl $0x1004, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiRemoveMergeFont@8 -_NtGdiRemoveMergeFont@8: - movl $0x1005, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiAddRemoteMMInstanceToDC@12 -_NtGdiAddRemoteMMInstanceToDC@12: - movl $0x1006, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiAlphaBlend@48 -_NtGdiAlphaBlend@48: - movl $0x1007, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtGdiAngleArc@24 -_NtGdiAngleArc@24: - movl $0x1008, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiAnyLinkedFonts@0 -_NtGdiAnyLinkedFonts@0: - movl $0x1009, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiFontIsLinked@4 -_NtGdiFontIsLinked@4: - movl $0x100a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiArcInternal@40 -_NtGdiArcInternal@40: - movl $0x100b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiBeginPath@4 -_NtGdiBeginPath@4: - movl $0x100c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBitBlt@44 -_NtGdiBitBlt@44: - movl $0x100d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiCancelDC@4 -_NtGdiCancelDC@4: - movl $0x100e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCheckBitmapBits@32 -_NtGdiCheckBitmapBits@32: - movl $0x100f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiCloseFigure@4 -_NtGdiCloseFigure@4: - movl $0x1010, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiClearBitmapAttributes@8 -_NtGdiClearBitmapAttributes@8: - movl $0x1011, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiClearBrushAttributes@8 -_NtGdiClearBrushAttributes@8: - movl $0x1012, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiColorCorrectPalette@24 -_NtGdiColorCorrectPalette@24: - movl $0x1013, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCombineRgn@16 -_NtGdiCombineRgn@16: - movl $0x1014, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCombineTransform@12 -_NtGdiCombineTransform@12: - movl $0x1015, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiComputeXformCoefficients@4 -_NtGdiComputeXformCoefficients@4: - movl $0x1016, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiConsoleTextOut@16 -_NtGdiConsoleTextOut@16: - movl $0x1017, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiConvertMetafileRect@8 -_NtGdiConvertMetafileRect@8: - movl $0x1018, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiCreateBitmap@20 -_NtGdiCreateBitmap@20: - movl $0x1019, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiCreateClientObj@4 -_NtGdiCreateClientObj@4: - movl $0x101a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateColorSpace@4 -_NtGdiCreateColorSpace@4: - movl $0x101b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateColorTransform@32 -_NtGdiCreateColorTransform@32: - movl $0x101c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiCreateCompatibleBitmap@12 -_NtGdiCreateCompatibleBitmap@12: - movl $0x101d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreateCompatibleDC@4 -_NtGdiCreateCompatibleDC@4: - movl $0x101e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateDIBBrush@24 -_NtGdiCreateDIBBrush@24: - movl $0x101f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateDIBitmapInternal@44 -_NtGdiCreateDIBitmapInternal@44: - movl $0x1020, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiCreateDIBSection@36 -_NtGdiCreateDIBSection@36: - movl $0x1021, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiCreateEllipticRgn@16 -_NtGdiCreateEllipticRgn@16: - movl $0x1022, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateHalftonePalette@4 -_NtGdiCreateHalftonePalette@4: - movl $0x1023, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreateHatchBrushInternal@12 -_NtGdiCreateHatchBrushInternal@12: - movl $0x1024, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreateMetafileDC@4 -_NtGdiCreateMetafileDC@4: - movl $0x1025, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCreatePaletteInternal@8 -_NtGdiCreatePaletteInternal@8: - movl $0x1026, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiCreatePatternBrushInternal@12 -_NtGdiCreatePatternBrushInternal@12: - movl $0x1027, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCreatePen@16 -_NtGdiCreatePen@16: - movl $0x1028, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateRectRgn@16 -_NtGdiCreateRectRgn@16: - movl $0x1029, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiCreateRoundRectRgn@24 -_NtGdiCreateRoundRectRgn@24: - movl $0x102a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateServerMetaFile@24 -_NtGdiCreateServerMetaFile@24: - movl $0x102b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiCreateSolidBrush@8 -_NtGdiCreateSolidBrush@8: - movl $0x102c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiD3dContextCreate@16 -_NtGdiD3dContextCreate@16: - movl $0x102d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiD3dContextDestroy@4 -_NtGdiD3dContextDestroy@4: - movl $0x102e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dContextDestroyAll@4 -_NtGdiD3dContextDestroyAll@4: - movl $0x102f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dValidateTextureStageState@4 -_NtGdiD3dValidateTextureStageState@4: - movl $0x1030, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiD3dDrawPrimitives2@28 -_NtGdiD3dDrawPrimitives2@28: - movl $0x1031, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiDdGetDriverState@4 -_NtGdiDdGetDriverState@4: - movl $0x1032, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdAddAttachedSurface@12 -_NtGdiDdAddAttachedSurface@12: - movl $0x1033, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdAlphaBlt@12 -_NtGdiDdAlphaBlt@12: - movl $0x1034, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdAttachSurface@8 -_NtGdiDdAttachSurface@8: - movl $0x1035, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdBeginMoCompFrame@8 -_NtGdiDdBeginMoCompFrame@8: - movl $0x1036, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdBlt@12 -_NtGdiDdBlt@12: - movl $0x1037, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdCanCreateSurface@8 -_NtGdiDdCanCreateSurface@8: - movl $0x1038, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCanCreateD3DBuffer@8 -_NtGdiDdCanCreateD3DBuffer@8: - movl $0x1039, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdColorControl@8 -_NtGdiDdColorControl@8: - movl $0x103a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCreateDirectDrawObject@4 -_NtGdiDdCreateDirectDrawObject@4: - movl $0x103b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdCreateSurface@32 -_NtGdiDdCreateSurface@32: - movl $0x103c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiDdCreateD3DBuffer@32 -_NtGdiDdCreateD3DBuffer@32: - movl $0x103d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiDdCreateMoComp@8 -_NtGdiDdCreateMoComp@8: - movl $0x103e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdCreateSurfaceObject@24 -_NtGdiDdCreateSurfaceObject@24: - movl $0x103f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDdDeleteDirectDrawObject@4 -_NtGdiDdDeleteDirectDrawObject@4: - movl $0x1040, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDeleteSurfaceObject@4 -_NtGdiDdDeleteSurfaceObject@4: - movl $0x1041, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdDestroyMoComp@8 -_NtGdiDdDestroyMoComp@8: - movl $0x1042, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDestroySurface@8 -_NtGdiDdDestroySurface@8: - movl $0x1043, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdDestroyD3DBuffer@4 -_NtGdiDdDestroyD3DBuffer@4: - movl $0x1044, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdEndMoCompFrame@8 -_NtGdiDdEndMoCompFrame@8: - movl $0x1045, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdFlip@20 -_NtGdiDdFlip@20: - movl $0x1046, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiDdFlipToGDISurface@8 -_NtGdiDdFlipToGDISurface@8: - movl $0x1047, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetAvailDriverMemory@8 -_NtGdiDdGetAvailDriverMemory@8: - movl $0x1048, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetBltStatus@8 -_NtGdiDdGetBltStatus@8: - movl $0x1049, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDC@8 -_NtGdiDdGetDC@8: - movl $0x104a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDriverInfo@8 -_NtGdiDdGetDriverInfo@8: - movl $0x104b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetDxHandle@12 -_NtGdiDdGetDxHandle@12: - movl $0x104c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdGetFlipStatus@8 -_NtGdiDdGetFlipStatus@8: - movl $0x104d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetInternalMoCompInfo@8 -_NtGdiDdGetInternalMoCompInfo@8: - movl $0x104e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompBuffInfo@8 -_NtGdiDdGetMoCompBuffInfo@8: - movl $0x104f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompGuids@8 -_NtGdiDdGetMoCompGuids@8: - movl $0x1050, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetMoCompFormats@8 -_NtGdiDdGetMoCompFormats@8: - movl $0x1051, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdGetScanLine@8 -_NtGdiDdGetScanLine@8: - movl $0x1052, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdLock@12 -_NtGdiDdLock@12: - movl $0x1053, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdLockD3D@8 -_NtGdiDdLockD3D@8: - movl $0x1054, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdQueryDirectDrawObject@44 -_NtGdiDdQueryDirectDrawObject@44: - movl $0x1055, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiDdQueryMoCompStatus@8 -_NtGdiDdQueryMoCompStatus@8: - movl $0x1056, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdReenableDirectDrawObject@8 -_NtGdiDdReenableDirectDrawObject@8: - movl $0x1057, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdReleaseDC@4 -_NtGdiDdReleaseDC@4: - movl $0x1058, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDdRenderMoComp@8 -_NtGdiDdRenderMoComp@8: - movl $0x1059, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdResetVisrgn@8 -_NtGdiDdResetVisrgn@8: - movl $0x105a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetColorKey@8 -_NtGdiDdSetColorKey@8: - movl $0x105b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetExclusiveMode@8 -_NtGdiDdSetExclusiveMode@8: - movl $0x105c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdSetGammaRamp@12 -_NtGdiDdSetGammaRamp@12: - movl $0x105d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdCreateSurfaceEx@12 -_NtGdiDdCreateSurfaceEx@12: - movl $0x105e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdSetOverlayPosition@12 -_NtGdiDdSetOverlayPosition@12: - movl $0x105f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdUnattachSurface@8 -_NtGdiDdUnattachSurface@8: - movl $0x1060, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUnlock@8 -_NtGdiDdUnlock@8: - movl $0x1061, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUnlockD3D@8 -_NtGdiDdUnlockD3D@8: - movl $0x1062, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDdUpdateOverlay@12 -_NtGdiDdUpdateOverlay@12: - movl $0x1063, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDdWaitForVerticalBlank@8 -_NtGdiDdWaitForVerticalBlank@8: - movl $0x1064, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpCanCreateVideoPort@8 -_NtGdiDvpCanCreateVideoPort@8: - movl $0x1065, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpColorControl@8 -_NtGdiDvpColorControl@8: - movl $0x1066, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpCreateVideoPort@8 -_NtGdiDvpCreateVideoPort@8: - movl $0x1067, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpDestroyVideoPort@8 -_NtGdiDvpDestroyVideoPort@8: - movl $0x1068, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpFlipVideoPort@16 -_NtGdiDvpFlipVideoPort@16: - movl $0x1069, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDvpGetVideoPortBandwidth@8 -_NtGdiDvpGetVideoPortBandwidth@8: - movl $0x106a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortField@8 -_NtGdiDvpGetVideoPortField@8: - movl $0x106b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortFlipStatus@8 -_NtGdiDvpGetVideoPortFlipStatus@8: - movl $0x106c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortInputFormats@8 -_NtGdiDvpGetVideoPortInputFormats@8: - movl $0x106d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortLine@8 -_NtGdiDvpGetVideoPortLine@8: - movl $0x106e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortOutputFormats@8 -_NtGdiDvpGetVideoPortOutputFormats@8: - movl $0x106f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoPortConnectInfo@8 -_NtGdiDvpGetVideoPortConnectInfo@8: - movl $0x1070, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpGetVideoSignalStatus@8 -_NtGdiDvpGetVideoSignalStatus@8: - movl $0x1071, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpUpdateVideoPort@16 -_NtGdiDvpUpdateVideoPort@16: - movl $0x1072, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDvpWaitForVideoPortSync@8 -_NtGdiDvpWaitForVideoPortSync@8: - movl $0x1073, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDvpAcquireNotification@12 -_NtGdiDvpAcquireNotification@12: - movl $0x1074, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiDvpReleaseNotification@8 -_NtGdiDvpReleaseNotification@8: - movl $0x1075, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDxgGenericThunk@24 -_NtGdiDxgGenericThunk@24: - movl $0x1076, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDeleteClientObj@4 -_NtGdiDeleteClientObj@4: - movl $0x1077, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDeleteColorSpace@4 -_NtGdiDeleteColorSpace@4: - movl $0x1078, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDeleteColorTransform@8 -_NtGdiDeleteColorTransform@8: - movl $0x1079, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDeleteObjectApp@4 -_NtGdiDeleteObjectApp@4: - movl $0x107a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDescribePixelFormat@16 -_NtGdiDescribePixelFormat@16: - movl $0x107b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPerBandInfo@8 -_NtGdiGetPerBandInfo@8: - movl $0x107c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiDoBanding@16 -_NtGdiDoBanding@16: - movl $0x107d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiDoPalette@24 -_NtGdiDoPalette@24: - movl $0x107e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiDrawEscape@16 -_NtGdiDrawEscape@16: - movl $0x107f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEllipse@20 -_NtGdiEllipse@20: - movl $0x1080, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEnableEUDC@4 -_NtGdiEnableEUDC@4: - movl $0x1081, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndDoc@4 -_NtGdiEndDoc@4: - movl $0x1082, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndPage@4 -_NtGdiEndPage@4: - movl $0x1083, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEndPath@4 -_NtGdiEndPath@4: - movl $0x1084, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEnumFontChunk@20 -_NtGdiEnumFontChunk@20: - movl $0x1085, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEnumFontClose@4 -_NtGdiEnumFontClose@4: - movl $0x1086, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEnumFontOpen@28 -_NtGdiEnumFontOpen@28: - movl $0x1087, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEnumObjects@16 -_NtGdiEnumObjects@16: - movl $0x1088, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEqualRgn@8 -_NtGdiEqualRgn@8: - movl $0x1089, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiEudcLoadUnloadLink@28 -_NtGdiEudcLoadUnloadLink@28: - movl $0x108a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiExcludeClipRect@20 -_NtGdiExcludeClipRect@20: - movl $0x108b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiExtCreatePen@44 -_NtGdiExtCreatePen@44: - movl $0x108c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiExtCreateRegion@12 -_NtGdiExtCreateRegion@12: - movl $0x108d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtEscape@32 -_NtGdiExtEscape@32: - movl $0x108e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiExtFloodFill@20 -_NtGdiExtFloodFill@20: - movl $0x108f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiExtGetObjectW@12 -_NtGdiExtGetObjectW@12: - movl $0x1090, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtSelectClipRgn@12 -_NtGdiExtSelectClipRgn@12: - movl $0x1091, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiExtTextOutW@36 -_NtGdiExtTextOutW@36: - movl $0x1092, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiFillPath@4 -_NtGdiFillPath@4: - movl $0x1093, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFillRgn@12 -_NtGdiFillRgn@12: - movl $0x1094, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiFlattenPath@4 -_NtGdiFlattenPath@4: - movl $0x1095, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFlushUserBatch@0 -_NtGdiFlushUserBatch@0: - movl $0x1096, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiFlush@0 -_NtGdiFlush@0: - movl $0x1097, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiForceUFIMapping@8 -_NtGdiForceUFIMapping@8: - movl $0x1098, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFrameRgn@20 -_NtGdiFrameRgn@20: - movl $0x1099, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiFullscreenControl@20 -_NtGdiFullscreenControl@20: - movl $0x109a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetAndSetDCDword@16 -_NtGdiGetAndSetDCDword@16: - movl $0x109b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetAppClipBox@8 -_NtGdiGetAppClipBox@8: - movl $0x109c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetBitmapBits@12 -_NtGdiGetBitmapBits@12: - movl $0x109d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetBitmapDimension@8 -_NtGdiGetBitmapDimension@8: - movl $0x109e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetBoundsRect@12 -_NtGdiGetBoundsRect@12: - movl $0x109f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetCharABCWidthsW@24 -_NtGdiGetCharABCWidthsW@24: - movl $0x10a0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharacterPlacementW@24 -_NtGdiGetCharacterPlacementW@24: - movl $0x10a1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharSet@4 -_NtGdiGetCharSet@4: - movl $0x10a2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetCharWidthW@24 -_NtGdiGetCharWidthW@24: - movl $0x10a3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetCharWidthInfo@8 -_NtGdiGetCharWidthInfo@8: - movl $0x10a4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetColorAdjustment@8 -_NtGdiGetColorAdjustment@8: - movl $0x10a5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetColorSpaceforBitmap@4 -_NtGdiGetColorSpaceforBitmap@4: - movl $0x10a6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetDCDword@12 -_NtGdiGetDCDword@12: - movl $0x10a7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDCforBitmap@4 -_NtGdiGetDCforBitmap@4: - movl $0x10a8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetDCObject@8 -_NtGdiGetDCObject@8: - movl $0x10a9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDCPoint@12 -_NtGdiGetDCPoint@12: - movl $0x10aa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDeviceCaps@8 -_NtGdiGetDeviceCaps@8: - movl $0x10ab, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDeviceGammaRamp@8 -_NtGdiGetDeviceGammaRamp@8: - movl $0x10ac, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDeviceCapsAll@8 -_NtGdiGetDeviceCapsAll@8: - movl $0x10ad, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetDIBitsInternal@36 -_NtGdiGetDIBitsInternal@36: - movl $0x10ae, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiGetETM@8 -_NtGdiGetETM@8: - movl $0x10af, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetEudcTimeStampEx@12 -_NtGdiGetEudcTimeStampEx@12: - movl $0x10b0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetFontData@20 -_NtGdiGetFontData@20: - movl $0x10b1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetFontResourceInfoInternalW@28 -_NtGdiGetFontResourceInfoInternalW@28: - movl $0x10b2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetGlyphIndicesW@20 -_NtGdiGetGlyphIndicesW@20: - movl $0x10b3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetGlyphIndicesWInternal@24 -_NtGdiGetGlyphIndicesWInternal@24: - movl $0x10b4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetGlyphOutline@32 -_NtGdiGetGlyphOutline@32: - movl $0x10b5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiGetKerningPairs@12 -_NtGdiGetKerningPairs@12: - movl $0x10b6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetLinkedUFIs@12 -_NtGdiGetLinkedUFIs@12: - movl $0x10b7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetMiterLimit@8 -_NtGdiGetMiterLimit@8: - movl $0x10b8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetMonitorID@12 -_NtGdiGetMonitorID@12: - movl $0x10b9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetNearestColor@8 -_NtGdiGetNearestColor@8: - movl $0x10ba, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetNearestPaletteIndex@8 -_NtGdiGetNearestPaletteIndex@8: - movl $0x10bb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetObjectBitmapHandle@8 -_NtGdiGetObjectBitmapHandle@8: - movl $0x10bc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetOutlineTextMetricsInternalW@16 -_NtGdiGetOutlineTextMetricsInternalW@16: - movl $0x10bd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPath@16 -_NtGdiGetPath@16: - movl $0x10be, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetPixel@12 -_NtGdiGetPixel@12: - movl $0x10bf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRandomRgn@12 -_NtGdiGetRandomRgn@12: - movl $0x10c0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRasterizerCaps@8 -_NtGdiGetRasterizerCaps@8: - movl $0x10c1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetRealizationInfo@12 -_NtGdiGetRealizationInfo@12: - movl $0x10c2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRegionData@12 -_NtGdiGetRegionData@12: - movl $0x10c3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetRgnBox@8 -_NtGdiGetRgnBox@8: - movl $0x10c4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetServerMetaFileBits@28 -_NtGdiGetServerMetaFileBits@28: - movl $0x10c5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetSpoolMessage@16 -_NtGdiGetSpoolMessage@16: - movl $0x10c6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetStats@20 -_NtGdiGetStats@20: - movl $0x10c7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetStockObject@4 -_NtGdiGetStockObject@4: - movl $0x10c8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetStringBitmapW@20 -_NtGdiGetStringBitmapW@20: - movl $0x10c9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetSystemPaletteUse@4 -_NtGdiGetSystemPaletteUse@4: - movl $0x10ca, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiGetTextCharsetInfo@12 -_NtGdiGetTextCharsetInfo@12: - movl $0x10cb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetTextExtent@20 -_NtGdiGetTextExtent@20: - movl $0x10cc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiGetTextExtentExW@32 -_NtGdiGetTextExtentExW@32: - movl $0x10cd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiGetTextFaceW@16 -_NtGdiGetTextFaceW@16: - movl $0x10ce, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiGetTextMetricsW@12 -_NtGdiGetTextMetricsW@12: - movl $0x10cf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetTransform@12 -_NtGdiGetTransform@12: - movl $0x10d0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetUFI@24 -_NtGdiGetUFI@24: - movl $0x10d1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiGetEmbUFI@28 -_NtGdiGetEmbUFI@28: - movl $0x10d2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGetUFIPathname@40 -_NtGdiGetUFIPathname@40: - movl $0x10d3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiGetEmbedFonts@0 -_NtGdiGetEmbedFonts@0: - movl $0x10d4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiChangeGhostFont@8 -_NtGdiChangeGhostFont@8: - movl $0x10d5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiAddEmbFontToDC@8 -_NtGdiAddEmbFontToDC@8: - movl $0x10d6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetFontUnicodeRanges@8 -_NtGdiGetFontUnicodeRanges@8: - movl $0x10d7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiGetWidthTable@28 -_NtGdiGetWidthTable@28: - movl $0x10d8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiGradientFill@24 -_NtGdiGradientFill@24: - movl $0x10d9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiHfontCreate@20 -_NtGdiHfontCreate@20: - movl $0x10da, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiIcmBrushInfo@32 -_NtGdiIcmBrushInfo@32: - movl $0x10db, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiInit@0 -_NtGdiInit@0: - movl $0x10dc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiInitSpool@0 -_NtGdiInitSpool@0: - movl $0x10dd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiIntersectClipRect@20 -_NtGdiIntersectClipRect@20: - movl $0x10de, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiInvertRgn@8 -_NtGdiInvertRgn@8: - movl $0x10df, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiLineTo@12 -_NtGdiLineTo@12: - movl $0x10e0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiMakeFontDir@20 -_NtGdiMakeFontDir@20: - movl $0x10e1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiMakeInfoDC@8 -_NtGdiMakeInfoDC@8: - movl $0x10e2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiMaskBlt@52 -_NtGdiMaskBlt@52: - movl $0x10e3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x34 - -.global _NtGdiModifyWorldTransform@12 -_NtGdiModifyWorldTransform@12: - movl $0x10e4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiMonoBitmap@4 -_NtGdiMonoBitmap@4: - movl $0x10e5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiMoveTo@16 -_NtGdiMoveTo@16: - movl $0x10e6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiOffsetClipRgn@12 -_NtGdiOffsetClipRgn@12: - movl $0x10e7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiOffsetRgn@12 -_NtGdiOffsetRgn@12: - movl $0x10e8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiOpenDCW@28 -_NtGdiOpenDCW@28: - movl $0x10e9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiPatBlt@24 -_NtGdiPatBlt@24: - movl $0x10ea, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiPolyPatBlt@20 -_NtGdiPolyPatBlt@20: - movl $0x10eb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiPathToRegion@4 -_NtGdiPathToRegion@4: - movl $0x10ec, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPlgBlt@44 -_NtGdiPlgBlt@44: - movl $0x10ed, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiPolyDraw@16 -_NtGdiPolyDraw@16: - movl $0x10ee, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPolyPolyDraw@20 -_NtGdiPolyPolyDraw@20: - movl $0x10ef, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiPolyTextOutW@16 -_NtGdiPolyTextOutW@16: - movl $0x10f0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPtInRegion@12 -_NtGdiPtInRegion@12: - movl $0x10f1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiPtVisible@12 -_NtGdiPtVisible@12: - movl $0x10f2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiQueryFonts@12 -_NtGdiQueryFonts@12: - movl $0x10f3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiQueryFontAssocInfo@4 -_NtGdiQueryFontAssocInfo@4: - movl $0x10f4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiRectangle@20 -_NtGdiRectangle@20: - movl $0x10f5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiRectInRegion@8 -_NtGdiRectInRegion@8: - movl $0x10f6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRectVisible@8 -_NtGdiRectVisible@8: - movl $0x10f7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRemoveFontResourceW@24 -_NtGdiRemoveFontResourceW@24: - movl $0x10f8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiRemoveFontMemResourceEx@4 -_NtGdiRemoveFontMemResourceEx@4: - movl $0x10f9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiResetDC@20 -_NtGdiResetDC@20: - movl $0x10fa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiResizePalette@8 -_NtGdiResizePalette@8: - movl $0x10fb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRestoreDC@8 -_NtGdiRestoreDC@8: - movl $0x10fc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiRoundRect@28 -_NtGdiRoundRect@28: - movl $0x10fd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiSaveDC@4 -_NtGdiSaveDC@4: - movl $0x10fe, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiScaleViewportExtEx@24 -_NtGdiScaleViewportExtEx@24: - movl $0x10ff, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiScaleWindowExtEx@24 -_NtGdiScaleWindowExtEx@24: - movl $0x1100, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiSelectBitmap@8 -_NtGdiSelectBitmap@8: - movl $0x1101, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectBrush@8 -_NtGdiSelectBrush@8: - movl $0x1102, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectClipPath@8 -_NtGdiSelectClipPath@8: - movl $0x1103, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectFont@8 -_NtGdiSelectFont@8: - movl $0x1104, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSelectPen@8 -_NtGdiSelectPen@8: - movl $0x1105, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBitmapAttributes@8 -_NtGdiSetBitmapAttributes@8: - movl $0x1106, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBitmapBits@12 -_NtGdiSetBitmapBits@12: - movl $0x1107, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetBitmapDimension@16 -_NtGdiSetBitmapDimension@16: - movl $0x1108, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetBoundsRect@12 -_NtGdiSetBoundsRect@12: - movl $0x1109, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetBrushAttributes@8 -_NtGdiSetBrushAttributes@8: - movl $0x110a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetBrushOrg@16 -_NtGdiSetBrushOrg@16: - movl $0x110b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetColorAdjustment@8 -_NtGdiSetColorAdjustment@8: - movl $0x110c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetColorSpace@8 -_NtGdiSetColorSpace@8: - movl $0x110d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetDeviceGammaRamp@8 -_NtGdiSetDeviceGammaRamp@8: - movl $0x110e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetDIBitsToDeviceInternal@64 -_NtGdiSetDIBitsToDeviceInternal@64: - movl $0x110f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x40 - -.global _NtGdiSetFontEnumeration@4 -_NtGdiSetFontEnumeration@4: - movl $0x1110, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetFontXform@12 -_NtGdiSetFontXform@12: - movl $0x1111, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetIcmMode@12 -_NtGdiSetIcmMode@12: - movl $0x1112, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetLinkedUFIs@12 -_NtGdiSetLinkedUFIs@12: - movl $0x1113, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetMagicColors@12 -_NtGdiSetMagicColors@12: - movl $0x1114, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetMetaRgn@4 -_NtGdiSetMetaRgn@4: - movl $0x1115, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetMiterLimit@12 -_NtGdiSetMiterLimit@12: - movl $0x1116, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDeviceWidth@4 -_NtGdiGetDeviceWidth@4: - movl $0x1117, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiMirrorWindowOrg@4 -_NtGdiMirrorWindowOrg@4: - movl $0x1118, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetLayout@12 -_NtGdiSetLayout@12: - movl $0x1119, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetPixel@16 -_NtGdiSetPixel@16: - movl $0x111a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSetPixelFormat@8 -_NtGdiSetPixelFormat@8: - movl $0x111b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetRectRgn@20 -_NtGdiSetRectRgn@20: - movl $0x111c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiSetSystemPaletteUse@8 -_NtGdiSetSystemPaletteUse@8: - movl $0x111d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSetTextJustification@12 -_NtGdiSetTextJustification@12: - movl $0x111e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetupPublicCFONT@12 -_NtGdiSetupPublicCFONT@12: - movl $0x111f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSetVirtualResolution@20 -_NtGdiSetVirtualResolution@20: - movl $0x1120, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiSetSizeDevice@12 -_NtGdiSetSizeDevice@12: - movl $0x1121, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiStartDoc@16 -_NtGdiStartDoc@16: - movl $0x1122, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiStartPage@4 -_NtGdiStartPage@4: - movl $0x1123, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiStretchBlt@48 -_NtGdiStretchBlt@48: - movl $0x1124, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtGdiStretchDIBitsInternal@64 -_NtGdiStretchDIBitsInternal@64: - movl $0x1125, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x40 - -.global _NtGdiStrokeAndFillPath@4 -_NtGdiStrokeAndFillPath@4: - movl $0x1126, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiStrokePath@4 -_NtGdiStrokePath@4: - movl $0x1127, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSwapBuffers@4 -_NtGdiSwapBuffers@4: - movl $0x1128, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiTransformPoints@20 -_NtGdiTransformPoints@20: - movl $0x1129, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiTransparentBlt@44 -_NtGdiTransparentBlt@44: - movl $0x112a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiUnloadPrinterDriver@8 -_NtGdiUnloadPrinterDriver@8: - movl $0x112b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiUnmapMemFont@4 -_NtGdiUnmapMemFont@4: - movl $0x112c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiUnrealizeObject@4 -_NtGdiUnrealizeObject@4: - movl $0x112d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiUpdateColors@4 -_NtGdiUpdateColors@4: - movl $0x112e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiWidenPath@4 -_NtGdiWidenPath@4: - movl $0x112f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserActivateKeyboardLayout@8 -_NtUserActivateKeyboardLayout@8: - movl $0x1130, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserAlterWindowStyle@12 -_NtUserAlterWindowStyle@12: - movl $0x1131, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserAssociateInputContext@12 -_NtUserAssociateInputContext@12: - movl $0x1132, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserAttachThreadInput@12 -_NtUserAttachThreadInput@12: - movl $0x1133, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserBeginPaint@8 -_NtUserBeginPaint@8: - movl $0x1134, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserBitBltSysBmp@32 -_NtUserBitBltSysBmp@32: - movl $0x1135, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserBlockInput@4 -_NtUserBlockInput@4: - movl $0x1136, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserBuildHimcList@16 -_NtUserBuildHimcList@16: - movl $0x1137, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserBuildHwndList@28 -_NtUserBuildHwndList@28: - movl $0x1138, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserBuildNameList@16 -_NtUserBuildNameList@16: - movl $0x1139, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserBuildPropList@16 -_NtUserBuildPropList@16: - movl $0x113a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCallHwnd@8 -_NtUserCallHwnd@8: - movl $0x113b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndLock@8 -_NtUserCallHwndLock@8: - movl $0x113c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndOpt@8 -_NtUserCallHwndOpt@8: - movl $0x113d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallHwndParam@12 -_NtUserCallHwndParam@12: - movl $0x113e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCallHwndParamLock@12 -_NtUserCallHwndParamLock@12: - movl $0x113f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCallMsgFilter@8 -_NtUserCallMsgFilter@8: - movl $0x1140, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallNextHookEx@16 -_NtUserCallNextHookEx@16: - movl $0x1141, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCallNoParam@4 -_NtUserCallNoParam@4: - movl $0x1142, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCallOneParam@8 -_NtUserCallOneParam@8: - movl $0x1143, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCallTwoParam@12 -_NtUserCallTwoParam@12: - movl $0x1144, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserChangeClipboardChain@8 -_NtUserChangeClipboardChain@8: - movl $0x1145, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserChangeDisplaySettings@20 -_NtUserChangeDisplaySettings@20: - movl $0x1146, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserCheckImeHotKey@8 -_NtUserCheckImeHotKey@8: - movl $0x1147, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCheckMenuItem@12 -_NtUserCheckMenuItem@12: - movl $0x1148, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserChildWindowFromPointEx@16 -_NtUserChildWindowFromPointEx@16: - movl $0x1149, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserClipCursor@4 -_NtUserClipCursor@4: - movl $0x114a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCloseClipboard@0 -_NtUserCloseClipboard@0: - movl $0x114b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCloseDesktop@4 -_NtUserCloseDesktop@4: - movl $0x114c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCloseWindowStation@4 -_NtUserCloseWindowStation@4: - movl $0x114d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserConsoleControl@12 -_NtUserConsoleControl@12: - movl $0x114e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserConvertMemHandle@8 -_NtUserConvertMemHandle@8: - movl $0x114f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCopyAcceleratorTable@12 -_NtUserCopyAcceleratorTable@12: - movl $0x1150, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserCountClipboardFormats@0 -_NtUserCountClipboardFormats@0: - movl $0x1151, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCreateAcceleratorTable@8 -_NtUserCreateAcceleratorTable@8: - movl $0x1152, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserCreateCaret@16 -_NtUserCreateCaret@16: - movl $0x1153, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCreateDesktop@20 -_NtUserCreateDesktop@20: - movl $0x1154, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserCreateInputContext@4 -_NtUserCreateInputContext@4: - movl $0x1155, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserCreateLocalMemHandle@16 -_NtUserCreateLocalMemHandle@16: - movl $0x1156, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserCreateWindowEx@60 -_NtUserCreateWindowEx@60: - movl $0x1157, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x3c - -.global _NtUserCreateWindowStation@28 -_NtUserCreateWindowStation@28: - movl $0x1158, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserDdeGetQualityOfService@12 -_NtUserDdeGetQualityOfService@12: - movl $0x1159, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDdeInitialize@20 -_NtUserDdeInitialize@20: - movl $0x115a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserDdeSetQualityOfService@12 -_NtUserDdeSetQualityOfService@12: - movl $0x115b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDeferWindowPos@32 -_NtUserDeferWindowPos@32: - movl $0x115c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserDefSetText@8 -_NtUserDefSetText@8: - movl $0x115d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserDeleteMenu@12 -_NtUserDeleteMenu@12: - movl $0x115e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDestroyAcceleratorTable@4 -_NtUserDestroyAcceleratorTable@4: - movl $0x115f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyCursor@8 -_NtUserDestroyCursor@8: - movl $0x1160, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserDestroyInputContext@4 -_NtUserDestroyInputContext@4: - movl $0x1161, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyMenu@4 -_NtUserDestroyMenu@4: - movl $0x1162, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDestroyWindow@4 -_NtUserDestroyWindow@4: - movl $0x1163, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDisableThreadIme@4 -_NtUserDisableThreadIme@4: - movl $0x1164, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDispatchMessage@4 -_NtUserDispatchMessage@4: - movl $0x1165, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserDragDetect@12 -_NtUserDragDetect@12: - movl $0x1166, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserDragObject@20 -_NtUserDragObject@20: - movl $0x1167, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserDrawAnimatedRects@16 -_NtUserDrawAnimatedRects@16: - movl $0x1168, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserDrawCaption@16 -_NtUserDrawCaption@16: - movl $0x1169, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserDrawCaptionTemp@28 -_NtUserDrawCaptionTemp@28: - movl $0x116a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserDrawIconEx@44 -_NtUserDrawIconEx@44: - movl $0x116b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtUserDrawMenuBarTemp@20 -_NtUserDrawMenuBarTemp@20: - movl $0x116c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserEmptyClipboard@0 -_NtUserEmptyClipboard@0: - movl $0x116d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserEnableMenuItem@12 -_NtUserEnableMenuItem@12: - movl $0x116e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserEnableScrollBar@12 -_NtUserEnableScrollBar@12: - movl $0x116f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserEndDeferWindowPosEx@8 -_NtUserEndDeferWindowPosEx@8: - movl $0x1170, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserEndMenu@0 -_NtUserEndMenu@0: - movl $0x1171, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserEndPaint@8 -_NtUserEndPaint@8: - movl $0x1172, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserEnumDisplayDevices@16 -_NtUserEnumDisplayDevices@16: - movl $0x1173, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEnumDisplayMonitors@16 -_NtUserEnumDisplayMonitors@16: - movl $0x1174, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEnumDisplaySettings@16 -_NtUserEnumDisplaySettings@16: - movl $0x1175, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserEvent@4 -_NtUserEvent@4: - movl $0x1176, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserExcludeUpdateRgn@8 -_NtUserExcludeUpdateRgn@8: - movl $0x1177, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserFillWindow@16 -_NtUserFillWindow@16: - movl $0x1178, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserFindExistingCursorIcon@12 -_NtUserFindExistingCursorIcon@12: - movl $0x1179, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserFindWindowEx@20 -_NtUserFindWindowEx@20: - movl $0x117a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserFlashWindowEx@4 -_NtUserFlashWindowEx@4: - movl $0x117b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetAltTabInfo@24 -_NtUserGetAltTabInfo@24: - movl $0x117c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserGetAncestor@8 -_NtUserGetAncestor@8: - movl $0x117d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetAppImeLevel@4 -_NtUserGetAppImeLevel@4: - movl $0x117e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetAsyncKeyState@4 -_NtUserGetAsyncKeyState@4: - movl $0x117f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetAtomName@8 -_NtUserGetAtomName@8: - movl $0x1180, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetCaretBlinkTime@0 -_NtUserGetCaretBlinkTime@0: - movl $0x1181, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetCaretPos@4 -_NtUserGetCaretPos@4: - movl $0x1182, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetClassInfo@20 -_NtUserGetClassInfo@20: - movl $0x1183, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetClassName@12 -_NtUserGetClassName@12: - movl $0x1184, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetClipboardData@8 -_NtUserGetClipboardData@8: - movl $0x1185, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetClipboardFormatName@12 -_NtUserGetClipboardFormatName@12: - movl $0x1186, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetClipboardOwner@0 -_NtUserGetClipboardOwner@0: - movl $0x1187, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipboardSequenceNumber@0 -_NtUserGetClipboardSequenceNumber@0: - movl $0x1188, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipboardViewer@0 -_NtUserGetClipboardViewer@0: - movl $0x1189, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetClipCursor@4 -_NtUserGetClipCursor@4: - movl $0x118a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetComboBoxInfo@8 -_NtUserGetComboBoxInfo@8: - movl $0x118b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetControlBrush@12 -_NtUserGetControlBrush@12: - movl $0x118c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetControlColor@16 -_NtUserGetControlColor@16: - movl $0x118d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetCPD@12 -_NtUserGetCPD@12: - movl $0x118e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetCursorFrameInfo@16 -_NtUserGetCursorFrameInfo@16: - movl $0x118f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetCursorInfo@4 -_NtUserGetCursorInfo@4: - movl $0x1190, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetDC@4 -_NtUserGetDC@4: - movl $0x1191, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetDCEx@12 -_NtUserGetDCEx@12: - movl $0x1192, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetDoubleClickTime@0 -_NtUserGetDoubleClickTime@0: - movl $0x1193, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetForegroundWindow@0 -_NtUserGetForegroundWindow@0: - movl $0x1194, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetGuiResources@8 -_NtUserGetGuiResources@8: - movl $0x1195, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetGUIThreadInfo@8 -_NtUserGetGUIThreadInfo@8: - movl $0x1196, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetIconInfo@24 -_NtUserGetIconInfo@24: - movl $0x1197, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserGetIconSize@16 -_NtUserGetIconSize@16: - movl $0x1198, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetImeHotKey@16 -_NtUserGetImeHotKey@16: - movl $0x1199, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetImeInfoEx@8 -_NtUserGetImeInfoEx@8: - movl $0x119a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetInternalWindowPos@12 -_NtUserGetInternalWindowPos@12: - movl $0x119b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetKeyboardLayoutList@8 -_NtUserGetKeyboardLayoutList@8: - movl $0x119c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetKeyboardLayoutName@4 -_NtUserGetKeyboardLayoutName@4: - movl $0x119d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetKeyboardState@4 -_NtUserGetKeyboardState@4: - movl $0x119e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetKeyNameText@12 -_NtUserGetKeyNameText@12: - movl $0x119f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetKeyState@4 -_NtUserGetKeyState@4: - movl $0x11a0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetListBoxInfo@4 -_NtUserGetListBoxInfo@4: - movl $0x11a1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetMenuBarInfo@16 -_NtUserGetMenuBarInfo@16: - movl $0x11a2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMenuIndex@8 -_NtUserGetMenuIndex@8: - movl $0x11a3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetMenuItemRect@16 -_NtUserGetMenuItemRect@16: - movl $0x11a4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMessage@16 -_NtUserGetMessage@16: - movl $0x11a5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetMouseMovePointsEx@20 -_NtUserGetMouseMovePointsEx@20: - movl $0x11a6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetObjectInformation@20 -_NtUserGetObjectInformation@20: - movl $0x11a7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetOpenClipboardWindow@0 -_NtUserGetOpenClipboardWindow@0: - movl $0x11a8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetPriorityClipboardFormat@8 -_NtUserGetPriorityClipboardFormat@8: - movl $0x11a9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetProcessWindowStation@0 -_NtUserGetProcessWindowStation@0: - movl $0x11aa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserGetRawInputBuffer@12 -_NtUserGetRawInputBuffer@12: - movl $0x11ab, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetRawInputData@20 -_NtUserGetRawInputData@20: - movl $0x11ac, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserGetRawInputDeviceInfo@16 -_NtUserGetRawInputDeviceInfo@16: - movl $0x11ad, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserGetRawInputDeviceList@12 -_NtUserGetRawInputDeviceList@12: - movl $0x11ae, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetRegisteredRawInputDevices@12 -_NtUserGetRegisteredRawInputDevices@12: - movl $0x11af, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetScrollBarInfo@12 -_NtUserGetScrollBarInfo@12: - movl $0x11b0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetSystemMenu@8 -_NtUserGetSystemMenu@8: - movl $0x11b1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetThreadDesktop@8 -_NtUserGetThreadDesktop@8: - movl $0x11b2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetThreadState@4 -_NtUserGetThreadState@4: - movl $0x11b3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetTitleBarInfo@8 -_NtUserGetTitleBarInfo@8: - movl $0x11b4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetUpdateRect@12 -_NtUserGetUpdateRect@12: - movl $0x11b5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetUpdateRgn@12 -_NtUserGetUpdateRgn@12: - movl $0x11b6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserGetWindowDC@4 -_NtUserGetWindowDC@4: - movl $0x11b7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserGetWindowPlacement@8 -_NtUserGetWindowPlacement@8: - movl $0x11b8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserGetWOWClass@8 -_NtUserGetWOWClass@8: - movl $0x11b9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserHardErrorControl@12 -_NtUserHardErrorControl@12: - movl $0x11ba, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserHideCaret@4 -_NtUserHideCaret@4: - movl $0x11bb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserHiliteMenuItem@16 -_NtUserHiliteMenuItem@16: - movl $0x11bc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserImpersonateDdeClientWindow@8 -_NtUserImpersonateDdeClientWindow@8: - movl $0x11bd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserInitialize@12 -_NtUserInitialize@12: - movl $0x11be, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserInitializeClientPfnArrays@16 -_NtUserInitializeClientPfnArrays@16: - movl $0x11bf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserInitTask@48 -_NtUserInitTask@48: - movl $0x11c0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x30 - -.global _NtUserInternalGetWindowText@12 -_NtUserInternalGetWindowText@12: - movl $0x11c1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserInvalidateRect@12 -_NtUserInvalidateRect@12: - movl $0x11c2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserInvalidateRgn@12 -_NtUserInvalidateRgn@12: - movl $0x11c3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserIsClipboardFormatAvailable@4 -_NtUserIsClipboardFormatAvailable@4: - movl $0x11c4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserKillTimer@8 -_NtUserKillTimer@8: - movl $0x11c5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserLoadKeyboardLayoutEx@28 -_NtUserLoadKeyboardLayoutEx@28: - movl $0x11c6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserLockWindowStation@4 -_NtUserLockWindowStation@4: - movl $0x11c7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserLockWindowUpdate@4 -_NtUserLockWindowUpdate@4: - movl $0x11c8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserLockWorkStation@0 -_NtUserLockWorkStation@0: - movl $0x11c9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserMapVirtualKeyEx@16 -_NtUserMapVirtualKeyEx@16: - movl $0x11ca, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserMenuItemFromPoint@16 -_NtUserMenuItemFromPoint@16: - movl $0x11cb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserMessageCall@28 -_NtUserMessageCall@28: - movl $0x11cc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserMinMaximize@12 -_NtUserMinMaximize@12: - movl $0x11cd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserMNDragLeave@0 -_NtUserMNDragLeave@0: - movl $0x11ce, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserMNDragOver@8 -_NtUserMNDragOver@8: - movl $0x11cf, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserModifyUserStartupInfoFlags@8 -_NtUserModifyUserStartupInfoFlags@8: - movl $0x11d0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserMoveWindow@24 -_NtUserMoveWindow@24: - movl $0x11d1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserNotifyIMEStatus@12 -_NtUserNotifyIMEStatus@12: - movl $0x11d2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserNotifyProcessCreate@16 -_NtUserNotifyProcessCreate@16: - movl $0x11d3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserNotifyWinEvent@16 -_NtUserNotifyWinEvent@16: - movl $0x11d4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserOpenClipboard@8 -_NtUserOpenClipboard@8: - movl $0x11d5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserOpenDesktop@12 -_NtUserOpenDesktop@12: - movl $0x11d6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserOpenInputDesktop@12 -_NtUserOpenInputDesktop@12: - movl $0x11d7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserOpenWindowStation@8 -_NtUserOpenWindowStation@8: - movl $0x11d8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserPaintDesktop@4 -_NtUserPaintDesktop@4: - movl $0x11d9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserPeekMessage@20 -_NtUserPeekMessage@20: - movl $0x11da, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserPostMessage@16 -_NtUserPostMessage@16: - movl $0x11db, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserPostThreadMessage@16 -_NtUserPostThreadMessage@16: - movl $0x11dc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserPrintWindow@12 -_NtUserPrintWindow@12: - movl $0x11dd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserProcessConnect@12 -_NtUserProcessConnect@12: - movl $0x11de, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserQueryInformationThread@20 -_NtUserQueryInformationThread@20: - movl $0x11df, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserQueryInputContext@8 -_NtUserQueryInputContext@8: - movl $0x11e0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserQuerySendMessage@4 -_NtUserQuerySendMessage@4: - movl $0x11e1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserQueryUserCounters@20 -_NtUserQueryUserCounters@20: - movl $0x11e2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserQueryWindow@8 -_NtUserQueryWindow@8: - movl $0x11e3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserRealChildWindowFromPoint@12 -_NtUserRealChildWindowFromPoint@12: - movl $0x11e4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRealInternalGetMessage@24 -_NtUserRealInternalGetMessage@24: - movl $0x11e5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserRealWaitMessageEx@8 -_NtUserRealWaitMessageEx@8: - movl $0x11e6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserRedrawWindow@16 -_NtUserRedrawWindow@16: - movl $0x11e7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRegisterClassExWOW@28 -_NtUserRegisterClassExWOW@28: - movl $0x11e8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserRegisterUserApiHook@8 -_NtUserRegisterUserApiHook@8: - movl $0x11e9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserRegisterHotKey@16 -_NtUserRegisterHotKey@16: - movl $0x11ea, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRegisterRawInputDevices@12 -_NtUserRegisterRawInputDevices@12: - movl $0x11eb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRegisterTasklist@4 -_NtUserRegisterTasklist@4: - movl $0x11ec, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserRegisterWindowMessage@4 -_NtUserRegisterWindowMessage@4: - movl $0x11ed, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserRemoveMenu@12 -_NtUserRemoveMenu@12: - movl $0x11ee, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRemoveProp@8 -_NtUserRemoveProp@8: - movl $0x11ef, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserResolveDesktop@16 -_NtUserResolveDesktop@16: - movl $0x11f0, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserResolveDesktopForWOW@4 -_NtUserResolveDesktopForWOW@4: - movl $0x11f1, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSBGetParms@16 -_NtUserSBGetParms@16: - movl $0x11f2, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserScrollDC@28 -_NtUserScrollDC@28: - movl $0x11f3, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserScrollWindowEx@32 -_NtUserScrollWindowEx@32: - movl $0x11f4, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserSelectPalette@12 -_NtUserSelectPalette@12: - movl $0x11f5, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSendInput@12 -_NtUserSendInput@12: - movl $0x11f6, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetActiveWindow@4 -_NtUserSetActiveWindow@4: - movl $0x11f7, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetAppImeLevel@8 -_NtUserSetAppImeLevel@8: - movl $0x11f8, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCapture@4 -_NtUserSetCapture@4: - movl $0x11f9, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetClassLong@16 -_NtUserSetClassLong@16: - movl $0x11fa, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetClassWord@12 -_NtUserSetClassWord@12: - movl $0x11fb, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetClipboardData@12 -_NtUserSetClipboardData@12: - movl $0x11fc, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetClipboardViewer@4 -_NtUserSetClipboardViewer@4: - movl $0x11fd, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetConsoleReserveKeys@8 -_NtUserSetConsoleReserveKeys@8: - movl $0x11fe, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCursor@4 -_NtUserSetCursor@4: - movl $0x11ff, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetCursorContents@8 -_NtUserSetCursorContents@8: - movl $0x1200, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetCursorIconData@16 -_NtUserSetCursorIconData@16: - movl $0x1201, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetDbgTag@8 -_NtUserSetDbgTag@8: - movl $0x1202, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetFocus@4 -_NtUserSetFocus@4: - movl $0x1203, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetImeHotKey@20 -_NtUserSetImeHotKey@20: - movl $0x1204, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserSetImeInfoEx@4 -_NtUserSetImeInfoEx@4: - movl $0x1205, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetImeOwnerWindow@8 -_NtUserSetImeOwnerWindow@8: - movl $0x1206, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetInformationProcess@16 -_NtUserSetInformationProcess@16: - movl $0x1207, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetInformationThread@16 -_NtUserSetInformationThread@16: - movl $0x1208, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetInternalWindowPos@16 -_NtUserSetInternalWindowPos@16: - movl $0x1209, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetKeyboardState@4 -_NtUserSetKeyboardState@4: - movl $0x120a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetLogonNotifyWindow@4 -_NtUserSetLogonNotifyWindow@4: - movl $0x120b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetMenu@12 -_NtUserSetMenu@12: - movl $0x120c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetMenuContextHelpId@8 -_NtUserSetMenuContextHelpId@8: - movl $0x120d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetMenuDefaultItem@12 -_NtUserSetMenuDefaultItem@12: - movl $0x120e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetMenuFlagRtoL@4 -_NtUserSetMenuFlagRtoL@4: - movl $0x120f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetObjectInformation@16 -_NtUserSetObjectInformation@16: - movl $0x1210, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetParent@8 -_NtUserSetParent@8: - movl $0x1211, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetProcessWindowStation@4 -_NtUserSetProcessWindowStation@4: - movl $0x1212, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetProp@12 -_NtUserSetProp@12: - movl $0x1213, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetRipFlags@8 -_NtUserSetRipFlags@8: - movl $0x1214, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetScrollInfo@16 -_NtUserSetScrollInfo@16: - movl $0x1215, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetShellWindowEx@8 -_NtUserSetShellWindowEx@8: - movl $0x1216, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSysColors@16 -_NtUserSetSysColors@16: - movl $0x1217, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetSystemCursor@8 -_NtUserSetSystemCursor@8: - movl $0x1218, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSystemMenu@8 -_NtUserSetSystemMenu@8: - movl $0x1219, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetSystemTimer@16 -_NtUserSetSystemTimer@16: - movl $0x121a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetThreadDesktop@4 -_NtUserSetThreadDesktop@4: - movl $0x121b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSetThreadLayoutHandles@8 -_NtUserSetThreadLayoutHandles@8: - movl $0x121c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetThreadState@8 -_NtUserSetThreadState@8: - movl $0x121d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetTimer@16 -_NtUserSetTimer@16: - movl $0x121e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetWindowFNID@8 -_NtUserSetWindowFNID@8: - movl $0x121f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetWindowLong@16 -_NtUserSetWindowLong@16: - movl $0x1220, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetWindowPlacement@8 -_NtUserSetWindowPlacement@8: - movl $0x1221, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSetWindowPos@28 -_NtUserSetWindowPos@28: - movl $0x1222, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserSetWindowRgn@12 -_NtUserSetWindowRgn@12: - movl $0x1223, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWindowsHookAW@12 -_NtUserSetWindowsHookAW@12: - movl $0x1224, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWindowsHookEx@24 -_NtUserSetWindowsHookEx@24: - movl $0x1225, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserSetWindowStationUser@16 -_NtUserSetWindowStationUser@16: - movl $0x1226, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetWindowWord@12 -_NtUserSetWindowWord@12: - movl $0x1227, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserSetWinEventHook@32 -_NtUserSetWinEventHook@32: - movl $0x1228, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtUserShowCaret@4 -_NtUserShowCaret@4: - movl $0x1229, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserShowScrollBar@12 -_NtUserShowScrollBar@12: - movl $0x122a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserShowWindow@8 -_NtUserShowWindow@8: - movl $0x122b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserShowWindowAsync@8 -_NtUserShowWindowAsync@8: - movl $0x122c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserSoundSentry@0 -_NtUserSoundSentry@0: - movl $0x122d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserSwitchDesktop@4 -_NtUserSwitchDesktop@4: - movl $0x122e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserSystemParametersInfo@16 -_NtUserSystemParametersInfo@16: - movl $0x122f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserTestForInteractiveUser@4 -_NtUserTestForInteractiveUser@4: - movl $0x1230, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserThunkedMenuInfo@8 -_NtUserThunkedMenuInfo@8: - movl $0x1231, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserThunkedMenuItemInfo@24 -_NtUserThunkedMenuItemInfo@24: - movl $0x1232, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserToUnicodeEx@28 -_NtUserToUnicodeEx@28: - movl $0x1233, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtUserTrackMouseEvent@4 -_NtUserTrackMouseEvent@4: - movl $0x1234, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserTrackPopupMenuEx@24 -_NtUserTrackPopupMenuEx@24: - movl $0x1235, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserCalcMenuBar@20 -_NtUserCalcMenuBar@20: - movl $0x1236, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtUserPaintMenuBar@24 -_NtUserPaintMenuBar@24: - movl $0x1237, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserTranslateAccelerator@12 -_NtUserTranslateAccelerator@12: - movl $0x1238, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserTranslateMessage@8 -_NtUserTranslateMessage@8: - movl $0x1239, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserUnhookWindowsHookEx@4 -_NtUserUnhookWindowsHookEx@4: - movl $0x123a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnhookWinEvent@4 -_NtUserUnhookWinEvent@4: - movl $0x123b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnloadKeyboardLayout@4 -_NtUserUnloadKeyboardLayout@4: - movl $0x123c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnlockWindowStation@4 -_NtUserUnlockWindowStation@4: - movl $0x123d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserUnregisterClass@12 -_NtUserUnregisterClass@12: - movl $0x123e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUnregisterUserApiHook@0 -_NtUserUnregisterUserApiHook@0: - movl $0x123f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserUnregisterHotKey@8 -_NtUserUnregisterHotKey@8: - movl $0x1240, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserUpdateInputContext@12 -_NtUserUpdateInputContext@12: - movl $0x1241, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUpdateInstance@12 -_NtUserUpdateInstance@12: - movl $0x1242, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserUpdateLayeredWindow@36 -_NtUserUpdateLayeredWindow@36: - movl $0x1243, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtUserGetLayeredWindowAttributes@16 -_NtUserGetLayeredWindowAttributes@16: - movl $0x1244, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserSetLayeredWindowAttributes@16 -_NtUserSetLayeredWindowAttributes@16: - movl $0x1245, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserUpdatePerUserSystemParameters@8 -_NtUserUpdatePerUserSystemParameters@8: - movl $0x1246, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserUserHandleGrantAccess@12 -_NtUserUserHandleGrantAccess@12: - movl $0x1247, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserValidateHandleSecure@8 -_NtUserValidateHandleSecure@8: - movl $0x1248, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserValidateRect@8 -_NtUserValidateRect@8: - movl $0x1249, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserValidateTimerCallback@12 -_NtUserValidateTimerCallback@12: - movl $0x124a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserVkKeyScanEx@12 -_NtUserVkKeyScanEx@12: - movl $0x124b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserWaitForInputIdle@12 -_NtUserWaitForInputIdle@12: - movl $0x124c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserWaitForMsgAndEvent@4 -_NtUserWaitForMsgAndEvent@4: - movl $0x124d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtUserWaitMessage@0 -_NtUserWaitMessage@0: - movl $0x124e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserWin32PoolAllocationStats@24 -_NtUserWin32PoolAllocationStats@24: - movl $0x124f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtUserWindowFromPoint@8 -_NtUserWindowFromPoint@8: - movl $0x1250, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtUserYieldTask@0 -_NtUserYieldTask@0: - movl $0x1251, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserRemoteConnect@12 -_NtUserRemoteConnect@12: - movl $0x1252, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtUserRemoteRedrawRectangle@16 -_NtUserRemoteRedrawRectangle@16: - movl $0x1253, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtUserRemoteRedrawScreen@0 -_NtUserRemoteRedrawScreen@0: - movl $0x1254, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserRemoteStopScreenUpdates@0 -_NtUserRemoteStopScreenUpdates@0: - movl $0x1255, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtUserCtxDisplayIOCtl@12 -_NtUserCtxDisplayIOCtl@12: - movl $0x1256, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngAssociateSurface@12 -_NtGdiEngAssociateSurface@12: - movl $0x1257, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngCreateBitmap@24 -_NtGdiEngCreateBitmap@24: - movl $0x1258, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngCreateDeviceSurface@16 -_NtGdiEngCreateDeviceSurface@16: - movl $0x1259, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEngCreateDeviceBitmap@16 -_NtGdiEngCreateDeviceBitmap@16: - movl $0x125a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiEngCreatePalette@24 -_NtGdiEngCreatePalette@24: - movl $0x125b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngComputeGlyphSet@12 -_NtGdiEngComputeGlyphSet@12: - movl $0x125c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngCopyBits@24 -_NtGdiEngCopyBits@24: - movl $0x125d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiEngDeletePalette@4 -_NtGdiEngDeletePalette@4: - movl $0x125e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngDeleteSurface@4 -_NtGdiEngDeleteSurface@4: - movl $0x125f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngEraseSurface@12 -_NtGdiEngEraseSurface@12: - movl $0x1260, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiEngUnlockSurface@4 -_NtGdiEngUnlockSurface@4: - movl $0x1261, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngLockSurface@4 -_NtGdiEngLockSurface@4: - movl $0x1262, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngBitBlt@44 -_NtGdiEngBitBlt@44: - movl $0x1263, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngStretchBlt@44 -_NtGdiEngStretchBlt@44: - movl $0x1264, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngPlgBlt@44 -_NtGdiEngPlgBlt@44: - movl $0x1265, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x2c - -.global _NtGdiEngMarkBandingSurface@4 -_NtGdiEngMarkBandingSurface@4: - movl $0x1266, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngStrokePath@32 -_NtGdiEngStrokePath@32: - movl $0x1267, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiEngFillPath@28 -_NtGdiEngFillPath@28: - movl $0x1268, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEngStrokeAndFillPath@40 -_NtGdiEngStrokeAndFillPath@40: - movl $0x1269, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngPaint@20 -_NtGdiEngPaint@20: - movl $0x126a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiEngLineTo@36 -_NtGdiEngLineTo@36: - movl $0x126b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x24 - -.global _NtGdiEngAlphaBlend@28 -_NtGdiEngAlphaBlend@28: - movl $0x126c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x1c - -.global _NtGdiEngGradientFill@40 -_NtGdiEngGradientFill@40: - movl $0x126d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngTransparentBlt@32 -_NtGdiEngTransparentBlt@32: - movl $0x126e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x20 - -.global _NtGdiEngTextOut@40 -_NtGdiEngTextOut@40: - movl $0x126f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x28 - -.global _NtGdiEngStretchBltROP@52 -_NtGdiEngStretchBltROP@52: - movl $0x1270, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x34 - -.global _NtGdiXLATEOBJ_cGetPalette@16 -_NtGdiXLATEOBJ_cGetPalette@16: - movl $0x1271, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiXLATEOBJ_iXlate@8 -_NtGdiXLATEOBJ_iXlate@8: - movl $0x1272, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiXLATEOBJ_hGetColorTransform@4 -_NtGdiXLATEOBJ_hGetColorTransform@4: - movl $0x1273, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiCLIPOBJ_bEnum@12 -_NtGdiCLIPOBJ_bEnum@12: - movl $0x1274, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiCLIPOBJ_cEnumStart@20 -_NtGdiCLIPOBJ_cEnumStart@20: - movl $0x1275, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiCLIPOBJ_ppoGetPath@4 -_NtGdiCLIPOBJ_ppoGetPath@4: - movl $0x1276, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngDeletePath@4 -_NtGdiEngDeletePath@4: - movl $0x1277, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngCreateClip@0 -_NtGdiEngCreateClip@0: - movl $0x1278, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x0 - -.global _NtGdiEngDeleteClip@4 -_NtGdiEngDeleteClip@4: - movl $0x1279, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_ulGetBrushColor@4 -_NtGdiBRUSHOBJ_ulGetBrushColor@4: - movl $0x127a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_pvAllocRbrush@8 -_NtGdiBRUSHOBJ_pvAllocRbrush@8: - movl $0x127b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiBRUSHOBJ_pvGetRbrush@4 -_NtGdiBRUSHOBJ_pvGetRbrush@4: - movl $0x127c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiBRUSHOBJ_hGetColorTransform@4 -_NtGdiBRUSHOBJ_hGetColorTransform@4: - movl $0x127d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiXFORMOBJ_bApplyXform@20 -_NtGdiXFORMOBJ_bApplyXform@20: - movl $0x127e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiXFORMOBJ_iGetXform@8 -_NtGdiXFORMOBJ_iGetXform@8: - movl $0x127f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_vGetInfo@12 -_NtGdiFONTOBJ_vGetInfo@12: - movl $0x1280, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiFONTOBJ_pxoGetXform@4 -_NtGdiFONTOBJ_pxoGetXform@4: - movl $0x1281, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_cGetGlyphs@20 -_NtGdiFONTOBJ_cGetGlyphs@20: - movl $0x1282, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x14 - -.global _NtGdiFONTOBJ_pifi@4 -_NtGdiFONTOBJ_pifi@4: - movl $0x1283, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_pfdg@4 -_NtGdiFONTOBJ_pfdg@4: - movl $0x1284, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiFONTOBJ_pQueryGlyphAttrs@8 -_NtGdiFONTOBJ_pQueryGlyphAttrs@8: - movl $0x1285, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_pvTrueTypeFontFile@8 -_NtGdiFONTOBJ_pvTrueTypeFontFile@8: - movl $0x1286, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiFONTOBJ_cGetAllGlyphHandles@8 -_NtGdiFONTOBJ_cGetAllGlyphHandles@8: - movl $0x1287, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiSTROBJ_bEnum@12 -_NtGdiSTROBJ_bEnum@12: - movl $0x1288, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSTROBJ_bEnumPositionsOnly@12 -_NtGdiSTROBJ_bEnumPositionsOnly@12: - movl $0x1289, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiSTROBJ_bGetAdvanceWidths@16 -_NtGdiSTROBJ_bGetAdvanceWidths@16: - movl $0x128a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiSTROBJ_vEnumStart@4 -_NtGdiSTROBJ_vEnumStart@4: - movl $0x128b, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSTROBJ_dwGetCodePage@4 -_NtGdiSTROBJ_dwGetCodePage@4: - movl $0x128c, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPATHOBJ_vGetBounds@8 -_NtGdiPATHOBJ_vGetBounds@8: - movl $0x128d, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiPATHOBJ_bEnum@8 -_NtGdiPATHOBJ_bEnum@8: - movl $0x128e, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiPATHOBJ_vEnumStart@4 -_NtGdiPATHOBJ_vEnumStart@4: - movl $0x128f, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiPATHOBJ_vEnumStartClipLines@16 -_NtGdiPATHOBJ_vEnumStartClipLines@16: - movl $0x1290, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiPATHOBJ_bEnumClipLines@12 -_NtGdiPATHOBJ_bEnumClipLines@12: - movl $0x1291, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - -.global _NtGdiGetDhpdev@4 -_NtGdiGetDhpdev@4: - movl $0x1292, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiEngCheckAbort@4 -_NtGdiEngCheckAbort@4: - movl $0x1293, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiHT_Get8BPPFormatPalette@16 -_NtGdiHT_Get8BPPFormatPalette@16: - movl $0x1294, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiHT_Get8BPPMaskPalette@24 -_NtGdiHT_Get8BPPMaskPalette@24: - movl $0x1295, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x18 - -.global _NtGdiUpdateTransform@4 -_NtGdiUpdateTransform@4: - movl $0x1296, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiSetPUMPDOBJ@16 -_NtGdiSetPUMPDOBJ@16: - movl $0x1297, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x10 - -.global _NtGdiBRUSHOBJ_DeleteRbrush@8 -_NtGdiBRUSHOBJ_DeleteRbrush@8: - movl $0x1298, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x8 - -.global _NtGdiUMPDEngFreeUserMem@4 -_NtGdiUMPDEngFreeUserMem@4: - movl $0x1299, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0x4 - -.global _NtGdiDrawStream@12 -_NtGdiDrawStream@12: - movl $0x129a, %eax - movl $KUSER_SHARED_SYSCALL, %ecx - call *(%ecx) - ret $0xc - diff --git a/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.def b/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.def deleted file mode 100644 index 2dfd2ebce1f..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.def +++ /dev/null @@ -1,678 +0,0 @@ -; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ -; -; ReactOS Operating System -; -; This file contains all win32k native api functions from win xp -; -LIBRARY w32kdll.dll - -EXPORTS -NtGdiAbortDoc@4 -NtGdiAbortPath@4 -NtGdiAddFontResourceW@24 -NtGdiAddRemoteFontToDC@16 -NtGdiAddFontMemResourceEx@20 -NtGdiRemoveMergeFont@8 -NtGdiAddRemoteMMInstanceToDC@12 -NtGdiAlphaBlend@48 -NtGdiAngleArc@24 -NtGdiAnyLinkedFonts@0 -NtGdiFontIsLinked@4 -NtGdiArcInternal@40 -NtGdiBeginPath@4 -NtGdiBitBlt@44 -NtGdiCancelDC@4 -NtGdiCheckBitmapBits@32 -NtGdiCloseFigure@4 -NtGdiClearBitmapAttributes@8 -NtGdiClearBrushAttributes@8 -NtGdiColorCorrectPalette@24 -NtGdiCombineRgn@16 -NtGdiCombineTransform@12 -NtGdiComputeXformCoefficients@4 -NtGdiConsoleTextOut@16 -NtGdiConvertMetafileRect@8 -NtGdiCreateBitmap@20 -NtGdiCreateClientObj@4 -NtGdiCreateColorSpace@4 -NtGdiCreateColorTransform@32 -NtGdiCreateCompatibleBitmap@12 -NtGdiCreateCompatibleDC@4 -NtGdiCreateDIBBrush@24 -NtGdiCreateDIBitmapInternal@44 -NtGdiCreateDIBSection@36 -NtGdiCreateEllipticRgn@16 -NtGdiCreateHalftonePalette@4 -NtGdiCreateHatchBrushInternal@12 -NtGdiCreateMetafileDC@4 -NtGdiCreatePaletteInternal@8 -NtGdiCreatePatternBrushInternal@12 -NtGdiCreatePen@16 -NtGdiCreateRectRgn@16 -NtGdiCreateRoundRectRgn@24 -NtGdiCreateServerMetaFile@24 -NtGdiCreateSolidBrush@8 -NtGdiD3dContextCreate@16 -NtGdiD3dContextDestroy@4 -NtGdiD3dContextDestroyAll@4 -NtGdiD3dValidateTextureStageState@4 -NtGdiD3dDrawPrimitives2@28 -NtGdiDdGetDriverState@4 -NtGdiDdAddAttachedSurface@12 -NtGdiDdAlphaBlt@12 -NtGdiDdAttachSurface@8 -NtGdiDdBeginMoCompFrame@8 -NtGdiDdBlt@12 -NtGdiDdCanCreateSurface@8 -NtGdiDdCanCreateD3DBuffer@8 -NtGdiDdColorControl@8 -NtGdiDdCreateDirectDrawObject@4 -NtGdiDdCreateSurface@32 -NtGdiDdCreateD3DBuffer@32 -NtGdiDdCreateMoComp@8 -NtGdiDdCreateSurfaceObject@24 -NtGdiDdDeleteDirectDrawObject@4 -NtGdiDdDeleteSurfaceObject@4 -NtGdiDdDestroyMoComp@8 -NtGdiDdDestroySurface@8 -NtGdiDdDestroyD3DBuffer@4 -NtGdiDdEndMoCompFrame@8 -NtGdiDdFlip@20 -NtGdiDdFlipToGDISurface@8 -NtGdiDdGetAvailDriverMemory@8 -NtGdiDdGetBltStatus@8 -NtGdiDdGetDC@8 -NtGdiDdGetDriverInfo@8 -NtGdiDdGetDxHandle@12 -NtGdiDdGetFlipStatus@8 -NtGdiDdGetInternalMoCompInfo@8 -NtGdiDdGetMoCompBuffInfo@8 -NtGdiDdGetMoCompGuids@8 -NtGdiDdGetMoCompFormats@8 -NtGdiDdGetScanLine@8 -NtGdiDdLock@12 -NtGdiDdLockD3D@8 -NtGdiDdQueryDirectDrawObject@44 -NtGdiDdQueryMoCompStatus@8 -NtGdiDdReenableDirectDrawObject@8 -NtGdiDdReleaseDC@4 -NtGdiDdRenderMoComp@8 -NtGdiDdResetVisrgn@8 -NtGdiDdSetColorKey@8 -NtGdiDdSetExclusiveMode@8 -NtGdiDdSetGammaRamp@12 -NtGdiDdCreateSurfaceEx@12 -NtGdiDdSetOverlayPosition@12 -NtGdiDdUnattachSurface@8 -NtGdiDdUnlock@8 -NtGdiDdUnlockD3D@8 -NtGdiDdUpdateOverlay@12 -NtGdiDdWaitForVerticalBlank@8 -NtGdiDvpCanCreateVideoPort@8 -NtGdiDvpColorControl@8 -NtGdiDvpCreateVideoPort@8 -NtGdiDvpDestroyVideoPort@8 -NtGdiDvpFlipVideoPort@16 -NtGdiDvpGetVideoPortBandwidth@8 -NtGdiDvpGetVideoPortField@8 -NtGdiDvpGetVideoPortFlipStatus@8 -NtGdiDvpGetVideoPortInputFormats@8 -NtGdiDvpGetVideoPortLine@8 -NtGdiDvpGetVideoPortOutputFormats@8 -NtGdiDvpGetVideoPortConnectInfo@8 -NtGdiDvpGetVideoSignalStatus@8 -NtGdiDvpUpdateVideoPort@16 -NtGdiDvpWaitForVideoPortSync@8 -NtGdiDvpAcquireNotification@12 -NtGdiDvpReleaseNotification@8 -NtGdiDxgGenericThunk@24 -NtGdiDeleteClientObj@4 -NtGdiDeleteColorSpace@4 -NtGdiDeleteColorTransform@8 -NtGdiDeleteObjectApp@4 -NtGdiDescribePixelFormat@16 -NtGdiGetPerBandInfo@8 -NtGdiDoBanding@16 -NtGdiDoPalette@24 -NtGdiDrawEscape@16 -NtGdiEllipse@20 -NtGdiEnableEUDC@4 -NtGdiEndDoc@4 -NtGdiEndPage@4 -NtGdiEndPath@4 -NtGdiEnumFontChunk@20 -NtGdiEnumFontClose@4 -NtGdiEnumFontOpen@28 -NtGdiEnumObjects@16 -NtGdiEqualRgn@8 -NtGdiEudcLoadUnloadLink@28 -NtGdiExcludeClipRect@20 -NtGdiExtCreatePen@44 -NtGdiExtCreateRegion@12 -NtGdiExtEscape@32 -NtGdiExtFloodFill@20 -NtGdiExtGetObjectW@12 -NtGdiExtSelectClipRgn@12 -NtGdiExtTextOutW@36 -NtGdiFillPath@4 -NtGdiFillRgn@12 -NtGdiFlattenPath@4 -NtGdiFlushUserBatch@0 -NtGdiFlush@0 -NtGdiForceUFIMapping@8 -NtGdiFrameRgn@20 -NtGdiFullscreenControl@20 -NtGdiGetAndSetDCDword@16 -NtGdiGetAppClipBox@8 -NtGdiGetBitmapBits@12 -NtGdiGetBitmapDimension@8 -NtGdiGetBoundsRect@12 -NtGdiGetCharABCWidthsW@24 -NtGdiGetCharacterPlacementW@24 -NtGdiGetCharSet@4 -NtGdiGetCharWidthW@24 -NtGdiGetCharWidthInfo@8 -NtGdiGetColorAdjustment@8 -NtGdiGetColorSpaceforBitmap@4 -NtGdiGetDCDword@12 -NtGdiGetDCforBitmap@4 -NtGdiGetDCObject@8 -NtGdiGetDCPoint@12 -NtGdiGetDeviceCaps@8 -NtGdiGetDeviceGammaRamp@8 -NtGdiGetDeviceCapsAll@8 -NtGdiGetDIBitsInternal@36 -NtGdiGetETM@8 -NtGdiGetEudcTimeStampEx@12 -NtGdiGetFontData@20 -NtGdiGetFontResourceInfoInternalW@28 -NtGdiGetGlyphIndicesW@20 -NtGdiGetGlyphIndicesWInternal@24 -NtGdiGetGlyphOutline@32 -NtGdiGetKerningPairs@12 -NtGdiGetLinkedUFIs@12 -NtGdiGetMiterLimit@8 -NtGdiGetMonitorID@12 -NtGdiGetNearestColor@8 -NtGdiGetNearestPaletteIndex@8 -NtGdiGetObjectBitmapHandle@8 -NtGdiGetOutlineTextMetricsInternalW@16 -NtGdiGetPath@16 -NtGdiGetPixel@12 -NtGdiGetRandomRgn@12 -NtGdiGetRasterizerCaps@8 -NtGdiGetRealizationInfo@12 -NtGdiGetRegionData@12 -NtGdiGetRgnBox@8 -NtGdiGetServerMetaFileBits@28 -NtGdiGetSpoolMessage@16 -NtGdiGetStats@20 -NtGdiGetStockObject@4 -NtGdiGetStringBitmapW@20 -NtGdiGetSystemPaletteUse@4 -NtGdiGetTextCharsetInfo@12 -NtGdiGetTextExtent@20 -NtGdiGetTextExtentExW@32 -NtGdiGetTextFaceW@16 -NtGdiGetTextMetricsW@12 -NtGdiGetTransform@12 -NtGdiGetUFI@24 -NtGdiGetEmbUFI@28 -NtGdiGetUFIPathname@40 -NtGdiGetEmbedFonts@0 -NtGdiChangeGhostFont@8 -NtGdiAddEmbFontToDC@8 -NtGdiGetFontUnicodeRanges@8 -NtGdiGetWidthTable@28 -NtGdiGradientFill@24 -NtGdiHfontCreate@20 -NtGdiIcmBrushInfo@32 -NtGdiInit@0 -NtGdiInitSpool@0 -NtGdiIntersectClipRect@20 -NtGdiInvertRgn@8 -NtGdiLineTo@12 -NtGdiMakeFontDir@20 -NtGdiMakeInfoDC@8 -NtGdiMaskBlt@52 -NtGdiModifyWorldTransform@12 -NtGdiMonoBitmap@4 -NtGdiMoveTo@16 -NtGdiOffsetClipRgn@12 -NtGdiOffsetRgn@12 -NtGdiOpenDCW@28 -NtGdiPatBlt@24 -NtGdiPolyPatBlt@20 -NtGdiPathToRegion@4 -NtGdiPlgBlt@44 -NtGdiPolyDraw@16 -NtGdiPolyPolyDraw@20 -NtGdiPolyTextOutW@16 -NtGdiPtInRegion@12 -NtGdiPtVisible@12 -NtGdiQueryFonts@12 -NtGdiQueryFontAssocInfo@4 -NtGdiRectangle@20 -NtGdiRectInRegion@8 -NtGdiRectVisible@8 -NtGdiRemoveFontResourceW@24 -NtGdiRemoveFontMemResourceEx@4 -NtGdiResetDC@20 -NtGdiResizePalette@8 -NtGdiRestoreDC@8 -NtGdiRoundRect@28 -NtGdiSaveDC@4 -NtGdiScaleViewportExtEx@24 -NtGdiScaleWindowExtEx@24 -NtGdiSelectBitmap@8 -NtGdiSelectBrush@8 -NtGdiSelectClipPath@8 -NtGdiSelectFont@8 -NtGdiSelectPen@8 -NtGdiSetBitmapAttributes@8 -NtGdiSetBitmapBits@12 -NtGdiSetBitmapDimension@16 -NtGdiSetBoundsRect@12 -NtGdiSetBrushAttributes@8 -NtGdiSetBrushOrg@16 -NtGdiSetColorAdjustment@8 -NtGdiSetColorSpace@8 -NtGdiSetDeviceGammaRamp@8 -NtGdiSetDIBitsToDeviceInternal@64 -NtGdiSetFontEnumeration@4 -NtGdiSetFontXform@12 -NtGdiSetIcmMode@12 -NtGdiSetLinkedUFIs@12 -NtGdiSetMagicColors@12 -NtGdiSetMetaRgn@4 -NtGdiSetMiterLimit@12 -NtGdiGetDeviceWidth@4 -NtGdiMirrorWindowOrg@4 -NtGdiSetLayout@12 -NtGdiSetPixel@16 -NtGdiSetPixelFormat@8 -NtGdiSetRectRgn@20 -NtGdiSetSystemPaletteUse@8 -NtGdiSetTextJustification@12 -NtGdiSetupPublicCFONT@12 -NtGdiSetVirtualResolution@20 -NtGdiSetSizeDevice@12 -NtGdiStartDoc@16 -NtGdiStartPage@4 -NtGdiStretchBlt@48 -NtGdiStretchDIBitsInternal@64 -NtGdiStrokeAndFillPath@4 -NtGdiStrokePath@4 -NtGdiSwapBuffers@4 -NtGdiTransformPoints@20 -NtGdiTransparentBlt@44 -NtGdiUnloadPrinterDriver@8 -NtGdiUnmapMemFont@4 -NtGdiUnrealizeObject@4 -NtGdiUpdateColors@4 -NtGdiWidenPath@4 -NtUserActivateKeyboardLayout@8 -NtUserAlterWindowStyle@12 -NtUserAssociateInputContext@12 -NtUserAttachThreadInput@12 -NtUserBeginPaint@8 -NtUserBitBltSysBmp@32 -NtUserBlockInput@4 -NtUserBuildHimcList@16 -NtUserBuildHwndList@28 -NtUserBuildNameList@16 -NtUserBuildPropList@16 -NtUserCallHwnd@8 -NtUserCallHwndLock@8 -NtUserCallHwndOpt@8 -NtUserCallHwndParam@12 -NtUserCallHwndParamLock@12 -NtUserCallMsgFilter@8 -NtUserCallNextHookEx@16 -NtUserCallNoParam@4 -NtUserCallOneParam@8 -NtUserCallTwoParam@12 -NtUserChangeClipboardChain@8 -NtUserChangeDisplaySettings@20 -NtUserCheckImeHotKey@8 -NtUserCheckMenuItem@12 -NtUserChildWindowFromPointEx@16 -NtUserClipCursor@4 -NtUserCloseClipboard@0 -NtUserCloseDesktop@4 -NtUserCloseWindowStation@4 -NtUserConsoleControl@12 -NtUserConvertMemHandle@8 -NtUserCopyAcceleratorTable@12 -NtUserCountClipboardFormats@0 -NtUserCreateAcceleratorTable@8 -NtUserCreateCaret@16 -NtUserCreateDesktop@20 -NtUserCreateInputContext@4 -NtUserCreateLocalMemHandle@16 -NtUserCreateWindowEx@60 -NtUserCreateWindowStation@28 -NtUserDdeGetQualityOfService@12 -NtUserDdeInitialize@20 -NtUserDdeSetQualityOfService@12 -NtUserDeferWindowPos@32 -NtUserDefSetText@8 -NtUserDeleteMenu@12 -NtUserDestroyAcceleratorTable@4 -NtUserDestroyCursor@8 -NtUserDestroyInputContext@4 -NtUserDestroyMenu@4 -NtUserDestroyWindow@4 -NtUserDisableThreadIme@4 -NtUserDispatchMessage@4 -NtUserDragDetect@12 -NtUserDragObject@20 -NtUserDrawAnimatedRects@16 -NtUserDrawCaption@16 -NtUserDrawCaptionTemp@28 -NtUserDrawIconEx@44 -NtUserDrawMenuBarTemp@20 -NtUserEmptyClipboard@0 -NtUserEnableMenuItem@12 -NtUserEnableScrollBar@12 -NtUserEndDeferWindowPosEx@8 -NtUserEndMenu@0 -NtUserEndPaint@8 -NtUserEnumDisplayDevices@16 -NtUserEnumDisplayMonitors@16 -NtUserEnumDisplaySettings@16 -NtUserEvent@4 -NtUserExcludeUpdateRgn@8 -NtUserFillWindow@16 -NtUserFindExistingCursorIcon@12 -NtUserFindWindowEx@20 -NtUserFlashWindowEx@4 -NtUserGetAltTabInfo@24 -NtUserGetAncestor@8 -NtUserGetAppImeLevel@4 -NtUserGetAsyncKeyState@4 -NtUserGetAtomName@8 -NtUserGetCaretBlinkTime@0 -NtUserGetCaretPos@4 -NtUserGetClassInfo@20 -NtUserGetClassName@12 -NtUserGetClipboardData@8 -NtUserGetClipboardFormatName@12 -NtUserGetClipboardOwner@0 -NtUserGetClipboardSequenceNumber@0 -NtUserGetClipboardViewer@0 -NtUserGetClipCursor@4 -NtUserGetComboBoxInfo@8 -NtUserGetControlBrush@12 -NtUserGetControlColor@16 -NtUserGetCPD@12 -NtUserGetCursorFrameInfo@16 -NtUserGetCursorInfo@4 -NtUserGetDC@4 -NtUserGetDCEx@12 -NtUserGetDoubleClickTime@0 -NtUserGetForegroundWindow@0 -NtUserGetGuiResources@8 -NtUserGetGUIThreadInfo@8 -NtUserGetIconInfo@24 -NtUserGetIconSize@16 -NtUserGetImeHotKey@16 -NtUserGetImeInfoEx@8 -NtUserGetInternalWindowPos@12 -NtUserGetKeyboardLayoutList@8 -NtUserGetKeyboardLayoutName@4 -NtUserGetKeyboardState@4 -NtUserGetKeyNameText@12 -NtUserGetKeyState@4 -NtUserGetListBoxInfo@4 -NtUserGetMenuBarInfo@16 -NtUserGetMenuIndex@8 -NtUserGetMenuItemRect@16 -NtUserGetMessage@16 -NtUserGetMouseMovePointsEx@20 -NtUserGetObjectInformation@20 -NtUserGetOpenClipboardWindow@0 -NtUserGetPriorityClipboardFormat@8 -NtUserGetProcessWindowStation@0 -NtUserGetRawInputBuffer@12 -NtUserGetRawInputData@20 -NtUserGetRawInputDeviceInfo@16 -NtUserGetRawInputDeviceList@12 -NtUserGetRegisteredRawInputDevices@12 -NtUserGetScrollBarInfo@12 -NtUserGetSystemMenu@8 -NtUserGetThreadDesktop@8 -NtUserGetThreadState@4 -NtUserGetTitleBarInfo@8 -NtUserGetUpdateRect@12 -NtUserGetUpdateRgn@12 -NtUserGetWindowDC@4 -NtUserGetWindowPlacement@8 -NtUserGetWOWClass@8 -NtUserHardErrorControl@12 -NtUserHideCaret@4 -NtUserHiliteMenuItem@16 -NtUserImpersonateDdeClientWindow@8 -NtUserInitialize@12 -NtUserInitializeClientPfnArrays@16 -NtUserInitTask@48 -NtUserInternalGetWindowText@12 -NtUserInvalidateRect@12 -NtUserInvalidateRgn@12 -NtUserIsClipboardFormatAvailable@4 -NtUserKillTimer@8 -NtUserLoadKeyboardLayoutEx@28 -NtUserLockWindowStation@4 -NtUserLockWindowUpdate@4 -NtUserLockWorkStation@0 -NtUserMapVirtualKeyEx@16 -NtUserMenuItemFromPoint@16 -NtUserMessageCall@28 -NtUserMinMaximize@12 -NtUserMNDragLeave@0 -NtUserMNDragOver@8 -NtUserModifyUserStartupInfoFlags@8 -NtUserMoveWindow@24 -NtUserNotifyIMEStatus@12 -NtUserNotifyProcessCreate@16 -NtUserNotifyWinEvent@16 -NtUserOpenClipboard@8 -NtUserOpenDesktop@12 -NtUserOpenInputDesktop@12 -NtUserOpenWindowStation@8 -NtUserPaintDesktop@4 -NtUserPeekMessage@20 -NtUserPostMessage@16 -NtUserPostThreadMessage@16 -NtUserPrintWindow@12 -NtUserProcessConnect@12 -NtUserQueryInformationThread@20 -NtUserQueryInputContext@8 -NtUserQuerySendMessage@4 -NtUserQueryUserCounters@20 -NtUserQueryWindow@8 -NtUserRealChildWindowFromPoint@12 -NtUserRealInternalGetMessage@24 -NtUserRealWaitMessageEx@8 -NtUserRedrawWindow@16 -NtUserRegisterClassExWOW@28 -NtUserRegisterUserApiHook@8 -NtUserRegisterHotKey@16 -NtUserRegisterRawInputDevices@12 -NtUserRegisterTasklist@4 -NtUserRegisterWindowMessage@4 -NtUserRemoveMenu@12 -NtUserRemoveProp@8 -NtUserResolveDesktop@16 -NtUserResolveDesktopForWOW@4 -NtUserSBGetParms@16 -NtUserScrollDC@28 -NtUserScrollWindowEx@32 -NtUserSelectPalette@12 -NtUserSendInput@12 -NtUserSetActiveWindow@4 -NtUserSetAppImeLevel@8 -NtUserSetCapture@4 -NtUserSetClassLong@16 -NtUserSetClassWord@12 -NtUserSetClipboardData@12 -NtUserSetClipboardViewer@4 -NtUserSetConsoleReserveKeys@8 -NtUserSetCursor@4 -NtUserSetCursorContents@8 -NtUserSetCursorIconData@16 -NtUserSetDbgTag@8 -NtUserSetFocus@4 -NtUserSetImeHotKey@20 -NtUserSetImeInfoEx@4 -NtUserSetImeOwnerWindow@8 -NtUserSetInformationProcess@16 -NtUserSetInformationThread@16 -NtUserSetInternalWindowPos@16 -NtUserSetKeyboardState@4 -NtUserSetLogonNotifyWindow@4 -NtUserSetMenu@12 -NtUserSetMenuContextHelpId@8 -NtUserSetMenuDefaultItem@12 -NtUserSetMenuFlagRtoL@4 -NtUserSetObjectInformation@16 -NtUserSetParent@8 -NtUserSetProcessWindowStation@4 -NtUserSetProp@12 -NtUserSetRipFlags@8 -NtUserSetScrollInfo@16 -NtUserSetShellWindowEx@8 -NtUserSetSysColors@16 -NtUserSetSystemCursor@8 -NtUserSetSystemMenu@8 -NtUserSetSystemTimer@16 -NtUserSetThreadDesktop@4 -NtUserSetThreadLayoutHandles@8 -NtUserSetThreadState@8 -NtUserSetTimer@16 -NtUserSetWindowFNID@8 -NtUserSetWindowLong@16 -NtUserSetWindowPlacement@8 -NtUserSetWindowPos@28 -NtUserSetWindowRgn@12 -NtUserSetWindowsHookAW@12 -NtUserSetWindowsHookEx@24 -NtUserSetWindowStationUser@16 -NtUserSetWindowWord@12 -NtUserSetWinEventHook@32 -NtUserShowCaret@4 -NtUserShowScrollBar@12 -NtUserShowWindow@8 -NtUserShowWindowAsync@8 -NtUserSoundSentry@0 -NtUserSwitchDesktop@4 -NtUserSystemParametersInfo@16 -NtUserTestForInteractiveUser@4 -NtUserThunkedMenuInfo@8 -NtUserThunkedMenuItemInfo@24 -NtUserToUnicodeEx@28 -NtUserTrackMouseEvent@4 -NtUserTrackPopupMenuEx@24 -NtUserCalcMenuBar@20 -NtUserPaintMenuBar@24 -NtUserTranslateAccelerator@12 -NtUserTranslateMessage@8 -NtUserUnhookWindowsHookEx@4 -NtUserUnhookWinEvent@4 -NtUserUnloadKeyboardLayout@4 -NtUserUnlockWindowStation@4 -NtUserUnregisterClass@12 -NtUserUnregisterUserApiHook@0 -NtUserUnregisterHotKey@8 -NtUserUpdateInputContext@12 -NtUserUpdateInstance@12 -NtUserUpdateLayeredWindow@36 -NtUserGetLayeredWindowAttributes@16 -NtUserSetLayeredWindowAttributes@16 -NtUserUpdatePerUserSystemParameters@8 -NtUserUserHandleGrantAccess@12 -NtUserValidateHandleSecure@8 -NtUserValidateRect@8 -NtUserValidateTimerCallback@12 -NtUserVkKeyScanEx@12 -NtUserWaitForInputIdle@12 -NtUserWaitForMsgAndEvent@4 -NtUserWaitMessage@0 -NtUserWin32PoolAllocationStats@24 -NtUserWindowFromPoint@8 -NtUserYieldTask@0 -NtUserRemoteConnect@12 -NtUserRemoteRedrawRectangle@16 -NtUserRemoteRedrawScreen@0 -NtUserRemoteStopScreenUpdates@0 -NtUserCtxDisplayIOCtl@12 -NtGdiEngAssociateSurface@12 -NtGdiEngCreateBitmap@24 -NtGdiEngCreateDeviceSurface@16 -NtGdiEngCreateDeviceBitmap@16 -NtGdiEngCreatePalette@24 -NtGdiEngComputeGlyphSet@12 -NtGdiEngCopyBits@24 -NtGdiEngDeletePalette@4 -NtGdiEngDeleteSurface@4 -NtGdiEngEraseSurface@12 -NtGdiEngUnlockSurface@4 -NtGdiEngLockSurface@4 -NtGdiEngBitBlt@44 -NtGdiEngStretchBlt@44 -NtGdiEngPlgBlt@44 -NtGdiEngMarkBandingSurface@4 -NtGdiEngStrokePath@32 -NtGdiEngFillPath@28 -NtGdiEngStrokeAndFillPath@40 -NtGdiEngPaint@20 -NtGdiEngLineTo@36 -NtGdiEngAlphaBlend@28 -NtGdiEngGradientFill@40 -NtGdiEngTransparentBlt@32 -NtGdiEngTextOut@40 -NtGdiEngStretchBltROP@52 -NtGdiXLATEOBJ_cGetPalette@16 -NtGdiXLATEOBJ_iXlate@8 -NtGdiXLATEOBJ_hGetColorTransform@4 -NtGdiCLIPOBJ_bEnum@12 -NtGdiCLIPOBJ_cEnumStart@20 -NtGdiCLIPOBJ_ppoGetPath@4 -NtGdiEngDeletePath@4 -NtGdiEngCreateClip@0 -NtGdiEngDeleteClip@4 -NtGdiBRUSHOBJ_ulGetBrushColor@4 -NtGdiBRUSHOBJ_pvAllocRbrush@8 -NtGdiBRUSHOBJ_pvGetRbrush@4 -NtGdiBRUSHOBJ_hGetColorTransform@4 -NtGdiXFORMOBJ_bApplyXform@20 -NtGdiXFORMOBJ_iGetXform@8 -NtGdiFONTOBJ_vGetInfo@12 -NtGdiFONTOBJ_pxoGetXform@4 -NtGdiFONTOBJ_cGetGlyphs@20 -NtGdiFONTOBJ_pifi@4 -NtGdiFONTOBJ_pfdg@4 -NtGdiFONTOBJ_pQueryGlyphAttrs@8 -NtGdiFONTOBJ_pvTrueTypeFontFile@8 -NtGdiFONTOBJ_cGetAllGlyphHandles@8 -NtGdiSTROBJ_bEnum@12 -NtGdiSTROBJ_bEnumPositionsOnly@12 -NtGdiSTROBJ_bGetAdvanceWidths@16 -NtGdiSTROBJ_vEnumStart@4 -NtGdiSTROBJ_dwGetCodePage@4 -NtGdiPATHOBJ_vGetBounds@8 -NtGdiPATHOBJ_bEnum@8 -NtGdiPATHOBJ_vEnumStart@4 -NtGdiPATHOBJ_vEnumStartClipLines@16 -NtGdiPATHOBJ_bEnumClipLines@12 -NtGdiGetDhpdev@4 -NtGdiEngCheckAbort@4 -NtGdiHT_Get8BPPFormatPalette@16 -NtGdiHT_Get8BPPMaskPalette@24 -NtGdiUpdateTransform@4 -NtGdiSetPUMPDOBJ@16 -NtGdiBRUSHOBJ_DeleteRbrush@8 -NtGdiUMPDEngFreeUserMem@4 -NtGdiUnmapMemFont@4 -NtGdiDrawStream@12 - diff --git a/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.rbuild b/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.rbuild deleted file mode 100644 index 06798204580..00000000000 --- a/rostests/apitests/w32kdll/w32kdll_xpsp2/w32kdll_xpsp2.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - 0x0502 - w32kdll_xpsp2.S - main.c - diff --git a/rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c b/rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c deleted file mode 100644 index 311dc0601d4..00000000000 --- a/rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c +++ /dev/null @@ -1,18 +0,0 @@ - -INT -Test_NtGdiDdCreateDirectDrawObject(PTESTINFO pti) -{ - HANDLE hDirectDraw; - HDC hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL); - ASSERT(hdc != NULL); - - /* Test ReactX */ - RTEST(NtGdiDdCreateDirectDrawObject(NULL) == NULL); - RTEST((hDirectDraw=NtGdiDdCreateDirectDrawObject(hdc)) != NULL); - - /* Cleanup ReactX setup */ - DeleteDC(hdc); - NtGdiDdDeleteDirectDrawObject(hDirectDraw); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c b/rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c deleted file mode 100644 index 8db518d29cc..00000000000 --- a/rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c +++ /dev/null @@ -1,20 +0,0 @@ - -INT -Test_NtGdiDdDeleteDirectDrawObject(PTESTINFO pti) -{ - HANDLE hDirectDraw; - HDC hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL); - ASSERT(hdc != NULL); - - /* Test ReactX */ - RTEST(NtGdiDdDeleteDirectDrawObject(NULL) == FALSE); - RTEST((hDirectDraw=NtGdiDdCreateDirectDrawObject(hdc)) != NULL); - ASSERT(hDirectDraw != NULL); - RTEST(NtGdiDdDeleteDirectDrawObject(hDirectDraw) == TRUE); - - /* Cleanup ReactX setup */ - DeleteDC(hdc); - Syscall(L"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDraw); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c b/rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c deleted file mode 100644 index 77476a6d19a..00000000000 --- a/rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c +++ /dev/null @@ -1,791 +0,0 @@ - -/* Note : OsThunkDdQueryDirectDrawObject is the usermode name of NtGdiDdQueryDirectDrawObject - * it lives in d3d8thk.dll and in windows 2000 it doing syscall direcly to win32k.sus - * in windows xp and higher it call to gdi32.dll to DdEntry41 and it doing the syscall - */ -INT -Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti) -{ - HANDLE hDirectDraw = NULL; - DD_HALINFO *pHalInfo = NULL; - DWORD *pCallBackFlags = NULL; - LPD3DNTHAL_CALLBACKS puD3dCallbacks = NULL; - LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData = NULL; - PDD_D3DBUFCALLBACKS puD3dBufferCallbacks = NULL; - LPDDSURFACEDESC puD3dTextureFormats = NULL; - DWORD *puNumHeaps = NULL; - VIDEOMEMORY *puvmList = NULL; - DWORD *puNumFourCC = NULL; - DWORD *puFourCC = NULL; - - DD_HALINFO HalInfo; - DD_HALINFO oldHalInfo; - DWORD CallBackFlags[4]; - - D3DNTHAL_CALLBACKS D3dCallbacks; - D3DNTHAL_CALLBACKS oldD3dCallbacks; - - D3DNTHAL_GLOBALDRIVERDATA D3dDriverData; - D3DNTHAL_GLOBALDRIVERDATA oldD3dDriverData; - - DD_D3DBUFCALLBACKS D3dBufferCallbacks; - DD_D3DBUFCALLBACKS oldD3dBufferCallbacks; - - DDSURFACEDESC2 D3dTextureFormats[100]; - DWORD NumHeaps = 0; - VIDEOMEMORY vmList; - //DWORD NumFourCC = 0; - //DWORD FourCC = 0; - DEVMODE devmode; - HDC hdc; - - DWORD dwTextureCounter = 0; - DDSURFACEDESC *myDesc = NULL; - - /* clear data */ - memset(&vmList,0,sizeof(VIDEOMEMORY)); - memset(&D3dTextureFormats,0,sizeof(DDSURFACEDESC)); - memset(&D3dBufferCallbacks,0,sizeof(DD_D3DBUFCALLBACKS)); - memset(&D3dDriverData,0,sizeof(D3DNTHAL_GLOBALDRIVERDATA)); - memset(&D3dCallbacks,0,sizeof(D3DNTHAL_CALLBACKS)); - memset(&HalInfo,0,sizeof(DD_HALINFO)); - memset(CallBackFlags,0,sizeof(DWORD)*3); - - /* Get currenet display mode */ - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode); - - /* Create hdc that we can use */ - hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL); - ASSERT(hdc != NULL); - - - /* Create ReactX handle */ - hDirectDraw = (HANDLE) NtGdiDdCreateDirectDrawObject(hdc); - ASSERT(hDirectDraw != NULL); - - /* Start Test ReactX NtGdiDdQueryDirectDrawObject function */ - - /* testing OsThunkDdQueryDirectDrawObject( NULL, .... */ - RTEST(NtGdiDdQueryDirectDrawObject( NULL, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC) == FALSE); - - RTEST(pHalInfo == NULL); - RTEST(pCallBackFlags == NULL); - RTEST(puD3dCallbacks == NULL); - RTEST(puD3dDriverData == NULL); - RTEST(puD3dBufferCallbacks == NULL); - RTEST(puD3dTextureFormats == NULL); - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - RTEST(puNumHeaps == NULL); - RTEST(puvmList == NULL); - - /* testing NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, NULL, .... */ - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC) == FALSE); - - RTEST(pHalInfo == NULL); - RTEST(pCallBackFlags == NULL); - RTEST(puD3dCallbacks == NULL); - RTEST(puD3dDriverData == NULL); - RTEST(puD3dBufferCallbacks == NULL); - RTEST(puD3dTextureFormats == NULL); - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - RTEST(puNumHeaps == NULL); - RTEST(puvmList == NULL); - - /* testing NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, NULL, .... */ - pHalInfo = &HalInfo; - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC)== FALSE); - - RTEST(pHalInfo != NULL); - ASSERT(pHalInfo != NULL); - - RTEST(pCallBackFlags == NULL); - RTEST(puD3dCallbacks == NULL); - RTEST(puD3dDriverData == NULL); - RTEST(puD3dBufferCallbacks == NULL); - RTEST(puD3dTextureFormats == NULL); - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - RTEST(puNumHeaps == NULL); - RTEST(puvmList == NULL); - - if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) && - (pHalInfo->dwSize != sizeof(DD_HALINFO_V4))) - { - RTEST(pHalInfo->dwSize != sizeof(DD_HALINFO)); - ASSERT(pHalInfo->dwSize != sizeof(DD_HALINFO)); - } - - if (pHalInfo->dwSize == sizeof(DD_HALINFO)) - { - /*the offset, in bytes, to primary surface in the display memory */ - /* some graphic card like sis 760 GX, Nvida GF7900GS does not set any offset at all */ - // RTEST(pHalInfo->vmiData.fpPrimary != 0 ); - - /* unsuse always 0 */ - RTEST(pHalInfo->vmiData.dwFlags == 0 ); - - /* Check the res */ - RTEST(pHalInfo->vmiData.dwDisplayWidth == devmode.dmPelsWidth ); - RTEST(pHalInfo->vmiData.dwDisplayHeight == devmode.dmPelsHeight ); - - /* This can never be test for it is who big the line is after it been align displayPitch */ - RTEST(pHalInfo->vmiData.lDisplayPitch != 0); - - RTEST(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT) ); - ASSERT(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT)); - - /* We can not check if it DDPF_RGB flags been set for primary surface - * for it can be DDPF_PALETTEINDEXED1,DDPF_PALETTEINDEXED2,DDPF_PALETTEINDEXED4,DDPF_PALETTEINDEXED8, DDPF_PALETTEINDEXEDTO8, DDPF_RGB, DDPF_YUV - */ - RTEST( (pHalInfo->vmiData.ddpfDisplay.dwFlags & (DDPF_PALETTEINDEXED1 | DDPF_PALETTEINDEXED2 | DDPF_PALETTEINDEXED4 | - DDPF_PALETTEINDEXED8 | DDPF_PALETTEINDEXEDTO8 | DDPF_RGB | DDPF_YUV)) != 0); - - - /* No fourcc are use on primary screen */ - RTEST(pHalInfo->vmiData.ddpfDisplay.dwFourCC == 0 ); - - /* Count RGB Bits 8/16/24/32 */ - RTEST(pHalInfo->vmiData.ddpfDisplay.dwRGBBitCount == devmode.dmBitsPerPel ); - - /* The rgb mask can not be detected in user mode, for it can be 15Bpp convert to 16Bpp mode, so we have no way detect correct mask - * But the mask can never be Zero - */ - RTEST(pHalInfo->vmiData.ddpfDisplay.dwRBitMask != 0 ); - RTEST(pHalInfo->vmiData.ddpfDisplay.dwGBitMask != 0 ); - RTEST(pHalInfo->vmiData.ddpfDisplay.dwBBitMask != 0 ); - - /* primary never set the alpha blend mask */ - RTEST(pHalInfo->vmiData.ddpfDisplay.dwRGBAlphaBitMask == 0 ); - - /* This can not be test at usermode it is each hardware drv that fill in it, - * only way to found them is to use this call */ - // pHalInfo->vmiData->dwOffscreenAlign - // pHalInfo->vmiData->dwOverlayAlign - // pHalInfo->vmiData->dwTextureAlign - // pHalInfo->vmiData->dwZBufferAlign - // pHalInfo->vmiData->dwAlphaAlign - - /* the primary display address */ - RTEST( ( (DWORD)pHalInfo->vmiData.pvPrimary & (~0x80000000)) != 0 ); - - /* test see if we got back the pvmList here - * acording msdn vmiData.dwNumHeaps and vmiData.pvmList - * exists for _VIDEOMEMORYINFO but they do not, it reviews - * in ddk and wdk and own testcase - */ - // RTEST(pHalInfo->vmiData.dwNumHeaps != 0 ); - // RTEST(pHalInfo->vmiData.pvmList != 0 ); - - /* Test see if we got any hardware acclartions for 2d or 3d, this always fill in - * that mean we found a bugi drv and dx does not work on this drv - */ - - /* the SIS 760 GX will never fill it in, it is a bugi drv */ - RTEST(pHalInfo->ddCaps.dwSize == sizeof(DDCORECAPS)); - - /* Testing see if we got any hw support for - * This test can fail on video card that does not support 2d/overlay/3d - */ - RTEST( pHalInfo->ddCaps.dwCaps != 0); - RTEST( pHalInfo->ddCaps.ddsCaps.dwCaps != 0); - - /* This flags is obsolete and should not be used by the driver */ - RTEST( pHalInfo->ddCaps.dwFXAlphaCaps == 0); - - - /* basic dx 2 is found if this flags not set - * if this fail we do not have a dx driver install acodring ms, some version of windows it - * is okay this fail and drv does then only support basic dx - * - */ - if (pHalInfo->dwFlags != 0) - { - RTEST( (pHalInfo->dwFlags & (DDHALINFO_GETDRIVERINFOSET | DDHALINFO_GETDRIVERINFO2)) != 0 ); - RTEST( ( (DWORD)pHalInfo->GetDriverInfo & 0x80000000) != 0 ); - ASSERT( ((DWORD)pHalInfo->GetDriverInfo & 0x80000000) != 0 ); - } - - /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/ - - - /* the pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE will be ignore, only way detect it proper follow code, - * this will be fill in of all drv, it is not only for 3d stuff, this always fill by win32k.sys or dxg.sys depns - * if it windows 2000 or windows xp/2003 - * - * point to kmode direcly to the win32k.sys, win32k.sys is kmode and it is kmode address we getting back - */ - RTEST( ( (DWORD)pHalInfo->lpD3DGlobalDriverData & (~0x80000000)) != 0 ); - RTEST( ( (DWORD)pHalInfo->lpD3DHALCallbacks & (~0x80000000)) != 0 ); - RTEST( ( (DWORD)pHalInfo->lpD3DHALCallbacks & (~0x80000000)) != 0 ); - } - - /* Backup DD_HALINFO so we do not need resting it */ - RtlCopyMemory(&oldHalInfo, &HalInfo, sizeof(DD_HALINFO)); - - /* testing NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, .... */ - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC)== FALSE); - RTEST(pHalInfo != NULL); - ASSERT(pHalInfo != NULL); - - RTEST(pCallBackFlags != NULL); - ASSERT(pCallBackFlags != NULL); - - RTEST(puD3dCallbacks == NULL); - RTEST(puD3dDriverData == NULL); - RTEST(puD3dBufferCallbacks == NULL); - RTEST(puD3dTextureFormats == NULL); - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - RTEST(puNumHeaps == NULL); - RTEST(puvmList == NULL); - - /* We do not retesting DD_HALINFO, instead we compare it */ - RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0); - - /* Rember on some nivida drv the pCallBackFlags will not be set even they api exists in the drv - * known workaround is to check if the drv really return a kmode pointer for the drv functions - * we want to use. - */ - RTEST(pCallBackFlags[0] != 0); - RTEST(pCallBackFlags[1] != 0); - RTEST(pCallBackFlags[2] == 0); - - /* testing NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, D3dCallbacks, NULL, .... */ - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC)== FALSE); - RTEST(pHalInfo != NULL); - ASSERT(pHalInfo != NULL); - - RTEST(pCallBackFlags != NULL); - ASSERT(pCallBackFlags != NULL); - - /* rember puD3dCallbacks shall never return NULL */ - RTEST(puD3dCallbacks != NULL); - ASSERT(puD3dCallbacks != NULL); - - /* the pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE will be ignore, only way detect it proper follow code, - * this will be fill in of all drv, it is not only for 3d stuff, this always fill by win32k.sys or dxg.sys depns - * if it windows 2000 or windows xp/2003 - */ - RTEST(puD3dCallbacks->dwSize == sizeof(D3DNTHAL_CALLBACKS)); - - /* Nivda like GF7900GS will not follow ms design rule here, - * ContextDestroyAll must alwyas be NULL for it is not longer inuse in windows 2000 and higher - */ - RTEST(puD3dCallbacks->ContextDestroyAll == NULL); - - /* Nivda like GF7900GS will not follow ms design rule here, - * SceneCapture must alwyas be NULL for it is not longer inuse in windows 2000 and higher - */ - RTEST(puD3dCallbacks->SceneCapture == NULL); - RTEST(puD3dCallbacks->dwReserved10 == 0); - RTEST(puD3dCallbacks->dwReserved11 == 0); - RTEST(puD3dCallbacks->dwReserved22 == 0); - RTEST(puD3dCallbacks->dwReserved23 == 0); - RTEST(puD3dCallbacks->dwReserved == 0); - RTEST(puD3dCallbacks->TextureCreate == NULL); - RTEST(puD3dCallbacks->TextureDestroy == NULL); - RTEST(puD3dCallbacks->TextureSwap == NULL); - RTEST(puD3dCallbacks->TextureGetSurf == NULL); - RTEST(puD3dCallbacks->dwReserved12 == 0); - RTEST(puD3dCallbacks->dwReserved13 == 0); - RTEST(puD3dCallbacks->dwReserved14 == 0); - RTEST(puD3dCallbacks->dwReserved15 == 0); - RTEST(puD3dCallbacks->dwReserved16 == 0); - RTEST(puD3dCallbacks->dwReserved17 == 0); - RTEST(puD3dCallbacks->dwReserved18 == 0); - RTEST(puD3dCallbacks->dwReserved19 == 0); - RTEST(puD3dCallbacks->dwReserved20 == 0); - RTEST(puD3dCallbacks->dwReserved21 == 0); - RTEST(puD3dCallbacks->dwReserved24 == 0); - RTEST(puD3dCallbacks->dwReserved0 == 0); - RTEST(puD3dCallbacks->dwReserved1 == 0); - RTEST(puD3dCallbacks->dwReserved2 == 0); - RTEST(puD3dCallbacks->dwReserved3 == 0); - RTEST(puD3dCallbacks->dwReserved4 == 0); - RTEST(puD3dCallbacks->dwReserved5 == 0); - RTEST(puD3dCallbacks->dwReserved6 == 0); - RTEST(puD3dCallbacks->dwReserved7 == 0); - RTEST(puD3dCallbacks->dwReserved8 == 0); - RTEST(puD3dCallbacks->dwReserved9 == 0); - - /* how detect puD3dCallbacks->ContextCreate and puD3dCallbacks->ContextDestroy shall be set for bugi drv like nivda ? */ - /* pointer direcly to the graphic drv, it is kmode pointer */ - // RTEST( ( (DWORD)puD3dCallbacks->ContextCreate & (~0x80000000)) != 0 ); - // RTEST( ( (DWORD)puD3dCallbacks->ContextDestroy & (~0x80000000)) != 0 ); - - RTEST(puD3dDriverData == NULL); - RTEST(puD3dBufferCallbacks == NULL); - RTEST(puD3dTextureFormats == NULL); - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - RTEST(puNumHeaps == NULL); - RTEST(puvmList == NULL); - - /* We do not retesting DD_HALINFO, instead we compare it */ - RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0); - RTEST(pCallBackFlags[0] != 0); - RTEST(pCallBackFlags[1] != 0); - RTEST(pCallBackFlags[2] == 0); - - /* Backup D3DNTHAL_CALLBACKS so we do not need resting it */ - RtlCopyMemory(&oldD3dCallbacks, &D3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)); - - -/* testing NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, */ - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - puD3dDriverData = &D3dDriverData; - - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS)); - - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC)== FALSE); - RTEST(pHalInfo != NULL); - ASSERT(pHalInfo != NULL); - - RTEST(pCallBackFlags != NULL); - ASSERT(pCallBackFlags != NULL); - - RTEST(puD3dCallbacks != NULL); - ASSERT(puD3dCallbacks != NULL); - - RTEST(puD3dDriverData != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dBufferCallbacks == NULL); - RTEST(puD3dTextureFormats == NULL); - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - RTEST(puNumHeaps == NULL); - RTEST(puvmList == NULL); - - /* We retesting pCallBackFlags */ - RTEST(pCallBackFlags[0] != 0); - RTEST(pCallBackFlags[1] != 0); - RTEST(pCallBackFlags[2] == 0); - - /* We do not retesting instead we compare it */ - RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0); - RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0); - - /* start test of puD3dDriverData */ - - RTEST(puD3dDriverData->dwSize == sizeof(D3DNTHAL_GLOBALDRIVERDATA)); - RTEST(puD3dDriverData->hwCaps.dwSize == sizeof(D3DNTHALDEVICEDESC_V1)); - RTEST(puD3dDriverData->hwCaps.dtcTransformCaps.dwSize == sizeof(D3DTRANSFORMCAPS)); - RTEST(puD3dDriverData->hwCaps.dlcLightingCaps.dwSize == sizeof(D3DLIGHTINGCAPS)); - RTEST(puD3dDriverData->hwCaps.dpcLineCaps.dwSize == sizeof(D3DPRIMCAPS)); - RTEST(puD3dDriverData->hwCaps.dpcTriCaps.dwSize == sizeof(D3DPRIMCAPS)); - RTEST(puD3dDriverData->hwCaps.dwMaxBufferSize == 0); - RTEST(puD3dDriverData->hwCaps.dwMaxVertexCount == 0); - - /* Backup D3DHAL_GLOBALDRIVERDATA so we do not need resting it */ - RtlCopyMemory(&oldD3dDriverData, &D3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)); - -/* testing NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, */ - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - puD3dDriverData = &D3dDriverData; - puD3dBufferCallbacks = &D3dBufferCallbacks; - - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS)); - RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_CALLBACKS)); - - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC)== FALSE); - RTEST(pHalInfo != NULL); - RTEST(pCallBackFlags != NULL); - - if (pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE ) - { - RTEST(puD3dCallbacks != NULL); - RTEST(puD3dDriverData != NULL); - RTEST(puD3dBufferCallbacks != NULL); - } - - RTEST(pHalInfo != NULL); - ASSERT(pHalInfo != NULL); - - RTEST(pCallBackFlags != NULL); - ASSERT(pCallBackFlags != NULL); - - RTEST(puD3dCallbacks != NULL); - ASSERT(puD3dCallbacks != NULL); - - RTEST(puD3dDriverData != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dBufferCallbacks != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dTextureFormats == NULL); - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - RTEST(puNumHeaps == NULL); - RTEST(puvmList == NULL); - - /* We retesting the flags */ - RTEST(pCallBackFlags[0] != 0); - RTEST(pCallBackFlags[1] != 0); - RTEST(pCallBackFlags[2] == 0); - - /* We do not retesting instead we compare it */ - RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0); - RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0); - RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0); - - /* start test of puD3dBufferCallbacks */ - RTEST(puD3dBufferCallbacks->dwSize == sizeof(DD_D3DBUFCALLBACKS)); - if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_CANCREATED3DBUF) - { - /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/ - RTEST( ( (DWORD)puD3dBufferCallbacks->CanCreateD3DBuffer & (~0x80000000)) != 0 ); - } - else - { - RTEST( puD3dBufferCallbacks->CanCreateD3DBuffer == NULL); - } - - if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_CREATED3DBUF) - { - /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/ - RTEST( ( (DWORD)puD3dBufferCallbacks->CreateD3DBuffer & (~0x80000000)) != 0 ); - } - else - { - RTEST( puD3dBufferCallbacks->CreateD3DBuffer == NULL); - } - - if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_DESTROYD3DBUF) - { - /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/ - RTEST( ( (DWORD)puD3dBufferCallbacks->DestroyD3DBuffer & (~0x80000000)) != 0 ); - } - else - { - RTEST( puD3dBufferCallbacks->DestroyD3DBuffer == NULL); - } - - if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_LOCKD3DBUF) - { - /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/ - RTEST( ( (DWORD)puD3dBufferCallbacks->LockD3DBuffer & (~0x80000000)) != 0 ); - } - else - { - RTEST( puD3dBufferCallbacks->LockD3DBuffer == NULL); - } - - if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_UNLOCKD3DBUF) - { - /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/ - RTEST( ( (DWORD)puD3dBufferCallbacks->UnlockD3DBuffer & (~0x80000000)) != 0 ); - } - else - { - RTEST( puD3dBufferCallbacks->UnlockD3DBuffer == NULL); - } - - /* Backup DD_D3DBUFCALLBACKS so we do not need resting it */ - RtlCopyMemory(&oldD3dBufferCallbacks, &D3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)); - - -/* testing NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, */ - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - puD3dDriverData = &D3dDriverData; - puD3dBufferCallbacks = &D3dBufferCallbacks; - - /* It is forbein to return a DDSURFACEDESC2 it should always be DDSURFACEDESC - This is only for detected bad drivers that does not follow the rules, if they - does not follow tthe rules, not everthing being copy then in gdi32.dll - gdi32.dll always assume it is DDSURFACEDESC size - */ - if (puD3dDriverData->dwNumTextureFormats != 0) - { - puD3dTextureFormats = malloc (puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2)); - } - - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS)); - RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA)); - RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS)); - - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC)== FALSE); - - RTEST(pHalInfo != NULL); - ASSERT(pHalInfo != NULL); - - RTEST(pCallBackFlags != NULL); - ASSERT(pCallBackFlags != NULL); - - RTEST(puD3dCallbacks != NULL); - ASSERT(puD3dCallbacks != NULL); - - RTEST(puD3dDriverData != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dBufferCallbacks != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dTextureFormats != NULL); - ASSERT(puD3dTextureFormats != NULL); - - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - RTEST(puNumHeaps == NULL); - RTEST(puvmList == NULL); - - /* We retesting the flags */ - RTEST(pCallBackFlags[0] != 0); - RTEST(pCallBackFlags[1] != 0); - RTEST(pCallBackFlags[2] == 0); - - /* We do not retesting instead we compare it */ - RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0); - RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0); - RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0); - RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0); - - /* start test of dwNumTextureFormats */ - if (puD3dDriverData->dwNumTextureFormats != 0) - { - myDesc = puD3dTextureFormats; - for (dwTextureCounter=0;dwTextureCounterdwNumTextureFormats;dwTextureCounter++) - { - RTEST(myDesc->dwSize == sizeof(DDSURFACEDESC)) - ASSERT(myDesc->dwSize == sizeof(DDSURFACEDESC)); - - RTEST( (myDesc->dwFlags & (~(DDSD_CAPS|DDSD_PIXELFORMAT))) == 0); - RTEST(myDesc->dwHeight == 0); - RTEST(myDesc->dwWidth == 0); - RTEST(myDesc->dwLinearSize == 0); - RTEST(myDesc->dwBackBufferCount == 0); - RTEST(myDesc->dwZBufferBitDepth == 0); - RTEST(myDesc->dwAlphaBitDepth == 0); - RTEST(myDesc->dwReserved == 0); - RTEST(myDesc->lpSurface == 0); - RTEST(myDesc->ddckCKDestOverlay.dwColorSpaceLowValue == 0); - RTEST(myDesc->ddckCKDestOverlay.dwColorSpaceHighValue == 0); - RTEST(myDesc->ddckCKDestBlt.dwColorSpaceLowValue == 0); - RTEST(myDesc->ddckCKDestBlt.dwColorSpaceHighValue == 0); - RTEST(myDesc->ddckCKSrcOverlay.dwColorSpaceLowValue == 0); - RTEST(myDesc->ddckCKSrcOverlay.dwColorSpaceHighValue == 0); - RTEST(myDesc->ddckCKSrcBlt.dwColorSpaceLowValue == 0); - RTEST(myDesc->ddckCKSrcBlt.dwColorSpaceHighValue == 0); - RTEST(myDesc->ddpfPixelFormat.dwSize == sizeof(DDPIXELFORMAT)); - RTEST(myDesc->ddpfPixelFormat.dwFlags != 0); - if (myDesc->ddpfPixelFormat.dwFlags & DDPF_FOURCC) - { - RTEST(myDesc->ddpfPixelFormat.dwFourCC != 0); - } - RTEST(myDesc->ddsCaps.dwCaps == DDSCAPS_TEXTURE); - - myDesc = (DDSURFACEDESC *) (((DWORD) myDesc) + sizeof(DDSURFACEDESC)); - } - } - - - /* testing NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, puNumHeaps, NULL, */ - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - puD3dDriverData = &D3dDriverData; - puD3dBufferCallbacks = &D3dBufferCallbacks; - puNumHeaps = &NumHeaps; - - if (puD3dDriverData->dwNumTextureFormats != 0) - { - RtlZeroMemory(puD3dTextureFormats, puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2)); - } - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS)); - RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA)); - RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS)); - - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC)== FALSE); - - RTEST(pHalInfo != NULL); - ASSERT(pHalInfo != NULL); - - RTEST(pCallBackFlags != NULL); - ASSERT(pCallBackFlags != NULL); - - RTEST(puD3dCallbacks != NULL); - ASSERT(puD3dCallbacks != NULL); - - RTEST(puD3dDriverData != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dBufferCallbacks != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dTextureFormats != NULL); - ASSERT(puD3dTextureFormats != NULL); - - RTEST(puNumHeaps != NULL); - ASSERT(puNumHeaps != NULL); - RTEST(NumHeaps == 0); - - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - - RTEST(puvmList == NULL); - - /* We retesting the flags */ - RTEST(pCallBackFlags[0] != 0); - RTEST(pCallBackFlags[1] != 0); - RTEST(pCallBackFlags[2] == 0); - - /* We do not retesting instead we compare it */ - RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0); - RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0); - RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0); - RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0); - /* we skip resting texture */ - - - /* testing NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, puNumHeaps, puvmList, NULL, */ - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - puD3dDriverData = &D3dDriverData; - puD3dBufferCallbacks = &D3dBufferCallbacks; - puNumHeaps = &NumHeaps; - puvmList = &vmList; - - if (puD3dDriverData->dwNumTextureFormats != 0) - { - RtlZeroMemory(puD3dTextureFormats, puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2)); - } - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS)); - RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA)); - RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS)); - - RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC)== FALSE); - - RTEST(pHalInfo != NULL); - ASSERT(pHalInfo != NULL); - - RTEST(pCallBackFlags != NULL); - ASSERT(pCallBackFlags != NULL); - - RTEST(puD3dCallbacks != NULL); - ASSERT(puD3dCallbacks != NULL); - - RTEST(puD3dDriverData != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dBufferCallbacks != NULL); - ASSERT(puD3dDriverData != NULL); - - RTEST(puD3dTextureFormats != NULL); - ASSERT(puD3dTextureFormats != NULL); - - RTEST(puNumHeaps != NULL); - ASSERT(puNumHeaps != NULL); - RTEST(NumHeaps == 0); - - RTEST(puvmList != NULL); - - RTEST(puNumFourCC == NULL); - RTEST(puFourCC == NULL); - - - - /* We retesting the flags */ - RTEST(pCallBackFlags[0] != 0); - RTEST(pCallBackFlags[1] != 0); - RTEST(pCallBackFlags[2] == 0); - - /* We do not retesting instead we compare it */ - RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0); - RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0); - RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0); - RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0); - /* we skip resting texture */ - - /* Todo - * adding test for - * puNumFourCC - * puFourCC - */ - - /* Cleanup ReactX setup */ - DeleteDC(hdc); - Syscall(L"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDraw); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c b/rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c deleted file mode 100644 index 81c0bde21aa..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c +++ /dev/null @@ -1,36 +0,0 @@ -INT -Test_NtGdiArcInternal(PTESTINFO pti) -{ - HDC hDC = CreateDCW(L"Display",NULL,NULL,NULL); - - SetLastError(ERROR_SUCCESS); - TEST(NtGdiArcInternal(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE); - TEST(GetLastError() == ERROR_INVALID_HANDLE); - - SetLastError(ERROR_SUCCESS); - TEST(NtGdiArcInternal(0, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE); - TEST(NtGdiArcInternal(1, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE); - TEST(NtGdiArcInternal(2, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE); - TEST(NtGdiArcInternal(3, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - TEST(NtGdiArcInternal(4, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - SetLastError(ERROR_SUCCESS); - TEST(NtGdiArcInternal(4, (HDC)10, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE); - TEST(GetLastError() == ERROR_INVALID_HANDLE); - - SetLastError(ERROR_SUCCESS); - TEST(NtGdiArcInternal(0, hDC, 10, 10, 0, 0, 0, 0, 0, 0) == TRUE); - TEST(NtGdiArcInternal(0, hDC, 10, 10, -10, -10, 0, 0, 0, 0) == TRUE); - TEST(NtGdiArcInternal(0, hDC, 0, 0, 0, 0, 10, 0, -10, 0) == TRUE); - -// was passiert, wenn left > right ? einfach tauschen? - - - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiBitBlt.c b/rostests/apitests/w32knapi/ntgdi/NtGdiBitBlt.c deleted file mode 100644 index 14b911457e7..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiBitBlt.c +++ /dev/null @@ -1,20 +0,0 @@ - -INT -Test_NtGdiBitBlt(PTESTINFO pti) -{ - BOOL bRet; - - /* Test NULL dc */ - SetLastError(ERROR_SUCCESS); - bRet = NtGdiBitBlt((HDC)0, 0, 0, 10, 10, (HDC)0, 10, 10, SRCCOPY, 0, 0); - TEST(bRet == FALSE); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid dc */ - SetLastError(ERROR_SUCCESS); - bRet = NtGdiBitBlt((HDC)0x123456, 0, 0, 10, 10, (HDC)0x123456, 10, 10, SRCCOPY, 0, 0); - TEST(bRet == FALSE); - TEST(GetLastError() == ERROR_SUCCESS); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiCreateBitmap.c b/rostests/apitests/w32knapi/ntgdi/NtGdiCreateBitmap.c deleted file mode 100644 index 6018855ffca..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiCreateBitmap.c +++ /dev/null @@ -1,196 +0,0 @@ -INT -Test_NtGdiCreateBitmap_Params(PTESTINFO pti) -{ - HBITMAP hBmp; - BITMAP bitmap; - BYTE BitmapData[10] = {0x11, 0x22, 0x33}; - - /* Test simple params */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, NULL)) != NULL); - TEST(GetLastError() == ERROR_SUCCESS); - DeleteObject(hBmp); - - /* Test all zero */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(0, 0, 0, 0, NULL) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test cx == 0 */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(0, 1, 1, 1, NULL) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test negative cx */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(-10, 1, 1, 1, NULL) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test cy == 0 */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(1, 0, 1, 1, NULL) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test negative cy */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(1, -2, 1, 1, NULL) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test negative cy */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(1, -2, 1, 1, BitmapData) == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test huge size */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(100000, 100000, 1, 1, NULL) == NULL); - TEST(GetLastError() == ERROR_NOT_ENOUGH_MEMORY); - - /* Test cPlanes == 0 */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(1, 1, 0, 1, NULL)) != NULL); - TEST(GetLastError() == ERROR_SUCCESS); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmType == 0); - TEST(bitmap.bmWidth == 1); - TEST(bitmap.bmHeight == 1); - TEST(bitmap.bmWidthBytes == 2); - TEST(bitmap.bmPlanes == 1); - TEST(bitmap.bmBitsPixel == 1); - DeleteObject(hBmp); - - /* Test big cPlanes */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(1, 1, 32, 1, NULL)) != NULL); - TEST(GetLastError() == ERROR_SUCCESS); - DeleteObject(hBmp); - - TEST(NtGdiCreateBitmap(1, 1, 33, 1, NULL) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test cBPP == 0 */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 0, NULL)) != NULL); - TEST(GetLastError() == ERROR_SUCCESS); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmType == 0); - TEST(bitmap.bmWidth == 1); - TEST(bitmap.bmHeight == 1); - TEST(bitmap.bmWidthBytes == 2); - TEST(bitmap.bmPlanes == 1); - TEST(bitmap.bmBitsPixel == 1); - DeleteObject(hBmp); - - /* Test negative cBPP */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(1, 1, 1, -1, NULL) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test bad cBPP */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 3, NULL)) != NULL); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmBitsPixel == 4); - DeleteObject(hBmp); - - TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 6, NULL)) != NULL); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmBitsPixel == 8); - DeleteObject(hBmp); - - TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 15, NULL)) != NULL); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmBitsPixel == 16); - DeleteObject(hBmp); - - TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 17, NULL)) != NULL); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmBitsPixel == 24); - DeleteObject(hBmp); - - TEST((hBmp = NtGdiCreateBitmap(1, 1, 3, 7, NULL)) != NULL); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmBitsPixel == 24); - DeleteObject(hBmp); - - TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 25, NULL)) != NULL); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmBitsPixel == 32); - DeleteObject(hBmp); - - TEST(GetLastError() == ERROR_SUCCESS); - - TEST(NtGdiCreateBitmap(1, 1, 1, 33, NULL) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test bad pointer */ - SetLastError(ERROR_SUCCESS); - TEST(NtGdiCreateBitmap(1, 1, 1, 1, (BYTE*)0x80001234) == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test pointer alignment */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, &BitmapData[1])) != NULL); - TEST(GetLastError() == ERROR_SUCCESS); - DeleteObject(hBmp); - - /* Test normal params */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(5, 7, 2, 4, NULL)) != NULL); - TEST(GetLastError() == ERROR_SUCCESS); - ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - TEST(bitmap.bmType == 0); - TEST(bitmap.bmWidth == 5); - TEST(bitmap.bmHeight == 7); - TEST(bitmap.bmWidthBytes == 6); - TEST(bitmap.bmPlanes == 1); - TEST(bitmap.bmBitsPixel == 8); - DeleteObject(hBmp); - - - /* Test height 0 params */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(1, 0, 1, 1, NULL)) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test height -1 params */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(1, -1, 1, 1, NULL)) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test witdth 0 params */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(0, 1, 1, 1, NULL)) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test witdth -1 params */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(-1, 0, 1, 1, NULL)) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - - /* Test witdth -1 params */ - SetLastError(ERROR_SUCCESS); - TEST((hBmp = NtGdiCreateBitmap(0, 0, 1, 1, NULL)) == NULL); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - - return APISTATUS_NORMAL; -} - -INT -Test_NtGdiCreateBitmap(PTESTINFO pti) -{ - INT ret; - - ret = Test_NtGdiCreateBitmap_Params(pti); - if (ret != APISTATUS_NORMAL) - return ret; - -// ret = Test_NtGdiCreateBitmap_Pixel(pti); -// if (ret != APISTATUS_NORMAL) -// return ret; - - return APISTATUS_NORMAL; - -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiCreateCompatibleBitmap.c b/rostests/apitests/w32knapi/ntgdi/NtGdiCreateCompatibleBitmap.c deleted file mode 100644 index a7315c97a20..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiCreateCompatibleBitmap.c +++ /dev/null @@ -1,6 +0,0 @@ - -INT -Test_NtGdiCreateCompatibleBitmap(PTESTINFO pti) -{ - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiDoPalette.c b/rostests/apitests/w32knapi/ntgdi/NtGdiDoPalette.c deleted file mode 100644 index a172554b9c1..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiDoPalette.c +++ /dev/null @@ -1,247 +0,0 @@ -HPALETTE -CreateTestPalette() -{ - struct - { - LOGPALETTE logpal; - PALETTEENTRY entry[5]; - } palstruct = - { {0x300,5, - { {1,2,3,0} }}, - { {22,33,44,PC_RESERVED}, - {11,55,77,PC_EXPLICIT}, - {00,77,66,PC_RESERVED | PC_NOCOLLAPSE}, - {12,34,56,78}} }; - - return CreatePalette((LOGPALETTE*)&palstruct); -} - -INT -Test_NtGdiDoPalette_GdiPalAnimate(PTESTINFO pti) -{ - HPALETTE hPal; - PALETTEENTRY palEntries[5] = { - {0,0,0,0}, - {0xff,0xff,0xff,0}, - {0x33,0x66,0x99,0}, - {0x25,0x84,0x14,0}, - {0x12,0x34,0x56,0x11}}; - PALETTEENTRY palEntries2[5]; - - /* Test stock palette */ - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiDoPalette(GetStockObject(DEFAULT_PALETTE), 0, 1, palEntries, GdiPalAnimate, FALSE) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - - /* Test pEntries = NULL */ - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalAnimate, TRUE) == 0); - RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalAnimate, FALSE) == 0); - DeleteObject(hPal); - - /* Test PC_RESERVED */ - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, TRUE) == 2); - DeleteObject(hPal); - - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 1, 5, palEntries, GdiPalAnimate, TRUE) == 2); - DeleteObject(hPal); - - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 2, 5, palEntries, GdiPalAnimate, TRUE) == 1); - DeleteObject(hPal); - - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 3, 5, palEntries, GdiPalAnimate, TRUE) == 1); - DeleteObject(hPal); - - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 4, 5, palEntries, GdiPalAnimate, TRUE) == 0); - DeleteObject(hPal); - - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 5, 5, palEntries, GdiPalAnimate, TRUE) == 0); - DeleteObject(hPal); - - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, FALSE) == 2); - DeleteObject(hPal); - - hPal = CreateTestPalette(); - RTEST(NtGdiDoPalette(hPal, 3, 5, palEntries, GdiPalAnimate, FALSE) == 1); - DeleteObject(hPal); - - /* Test if entries are set correctly */ - hPal = CreateTestPalette(); - NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, TRUE); - NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE); - RTEST(palEntries2[0].peRed == 1); - RTEST(palEntries2[0].peGreen == 2); - RTEST(palEntries2[0].peBlue == 3); - RTEST(palEntries2[0].peFlags == 0); - RTEST(palEntries2[1].peRed == palEntries[1].peRed); - RTEST(palEntries2[1].peGreen == palEntries[1].peGreen); - RTEST(palEntries2[1].peBlue == palEntries[1].peBlue); - RTEST(palEntries2[1].peFlags == palEntries[1].peFlags); - RTEST(palEntries2[2].peRed == 11); - RTEST(palEntries2[2].peGreen == 55); - RTEST(palEntries2[2].peBlue == 77); - TEST(palEntries2[2].peFlags == PC_EXPLICIT); - RTEST(palEntries2[3].peRed == palEntries[3].peRed); - RTEST(palEntries2[3].peGreen == palEntries[3].peGreen); - RTEST(palEntries2[3].peBlue == palEntries[3].peBlue); - RTEST(palEntries2[3].peFlags == palEntries[3].peFlags); - DeleteObject(hPal); - - - return APISTATUS_NORMAL; -} - -INT -Test_NtGdiDoPalette_GdiPalSetEntries(PTESTINFO pti) -{ - HPALETTE hPal; - PALETTEENTRY palEntries[5] = { - {0,0,0,0}, - {0xff,0xff,0xff,0}, - {0x33,0x66,0x99,0}, - {0x25,0x84,0x14,0}, - {0x12,0x34,0x56,0x11}}; - PALETTEENTRY palEntries2[5]; - - hPal = CreateTestPalette(); - - /* Test invalid handle */ - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiDoPalette((HPALETTE)23, 0, 1, palEntries, GdiPalSetEntries, TRUE) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test system palette */ - RTEST(NtGdiDoPalette(GetStockObject(DEFAULT_PALETTE), 0, 1, palEntries, GdiPalSetEntries, TRUE) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - RTEST(NtGdiDoPalette(hPal, 0, 1, palEntries, GdiPalSetEntries, TRUE) == 1); - RTEST(NtGdiDoPalette(hPal, 0, 2, palEntries, GdiPalSetEntries, TRUE) == 2); - RTEST(NtGdiDoPalette(hPal, 0, 3, palEntries, GdiPalSetEntries, TRUE) == 3); - RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE) == 5); - RTEST(NtGdiDoPalette(hPal, 0, 6, palEntries, GdiPalSetEntries, TRUE) == 5); - RTEST(NtGdiDoPalette(hPal, 3, 6, palEntries, GdiPalSetEntries, TRUE) == 2); -// TEST(NtGdiDoPalette(hPal, 4, 23247, palEntries, GdiPalSetEntries, TRUE) == 0); - - /* Test bInbound == FALSE */ - NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE); - ZeroMemory(palEntries2, sizeof(palEntries2)); - RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalSetEntries, FALSE) == 5); - /* we should get the old values returned in our buffer! */ - TEST(memcmp(palEntries2, palEntries, sizeof(palEntries)) == 0); - - /* check what we have in our palette now */ - ZeroMemory(palEntries2, sizeof(palEntries2)); - RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE) == 5); - TEST(memcmp(palEntries2, palEntries, sizeof(palEntries)) == 0); - - RTEST(NtGdiDoPalette(hPal, 0, 4, palEntries2, GdiPalSetEntries, TRUE) == 4); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test if entries are set correctly */ - hPal = CreateTestPalette(); - NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE); - NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE); - RTEST(palEntries2[0].peRed == 0); - RTEST(palEntries2[0].peGreen == 0); - RTEST(palEntries2[0].peBlue == 0); - RTEST(palEntries2[0].peFlags == 0); - - /* Test that the buffer was not changed */ - - /* Test pEntries = NULL */ - RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, TRUE) == 0); - - return APISTATUS_NORMAL; -} - -INT -Test_NtGdiDoPalette_GdiPalGetEntries(PTESTINFO pti) -{ - HPALETTE hPal; - - hPal = CreateTestPalette(); - - /* Test pEntries = NULL */ - RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, TRUE) == 0); - RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, FALSE) == 5); - RTEST(NtGdiDoPalette(hPal, 2, 1, NULL, GdiPalGetEntries, FALSE) == 5); - RTEST(NtGdiDoPalette(hPal, 20, 1, NULL, GdiPalGetEntries, FALSE) == 5); - RTEST(NtGdiDoPalette(hPal, -20, 1, NULL, GdiPalGetEntries, FALSE) == 5); - RTEST(NtGdiDoPalette(hPal, 2, 0, NULL, GdiPalGetEntries, FALSE) == 5); - - -// Test flags 0xf0 - - return APISTATUS_NORMAL; -} - -INT -Test_NtGdiDoPalette_GetSystemPalette(PTESTINFO pti) -{ - return APISTATUS_NORMAL; -} - -INT -Test_NtGdiDoPalette_GetBIBColorTable(PTESTINFO pti) -{ - return APISTATUS_NORMAL; -} - -INT -Test_NtGdiDoPalette_SetDIBColorTable(PTESTINFO pti) -{ - return APISTATUS_NORMAL; -} - - -INT -Test_NtGdiDoPalette(PTESTINFO pti) -{ - INT ret; - - ret = Test_NtGdiDoPalette_GdiPalAnimate(pti); - if (ret != APISTATUS_NORMAL) - { - return ret; - } - - ret = Test_NtGdiDoPalette_GdiPalSetEntries(pti); - if (ret != APISTATUS_NORMAL) - { - return ret; - } - - ret = Test_NtGdiDoPalette_GdiPalGetEntries(pti); - if (ret != APISTATUS_NORMAL) - { - return ret; - } - - ret = Test_NtGdiDoPalette_GetSystemPalette(pti); - if (ret != APISTATUS_NORMAL) - { - return ret; - } - - ret = Test_NtGdiDoPalette_GetBIBColorTable(pti); - if (ret != APISTATUS_NORMAL) - { - return ret; - } - - ret = Test_NtGdiDoPalette_SetDIBColorTable(pti); - if (ret != APISTATUS_NORMAL) - { - return ret; - } - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiEngCreatePalette.c b/rostests/apitests/w32knapi/ntgdi/NtGdiEngCreatePalette.c deleted file mode 100644 index 5e2183cdbfa..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiEngCreatePalette.c +++ /dev/null @@ -1,20 +0,0 @@ - -INT -Test_NtGdiEngCreatePalette(PTESTINFO pti) -{ - HPALETTE hPal; - ULONG Colors[3] = {1,2,3}; - PGDI_TABLE_ENTRY pEntry; - - hPal = NtGdiEngCreatePalette(PAL_RGB, 3, Colors, 0xff000000, 0x00ff0000, 0x0000ff00); - - TEST(hPal != 0); - TEST(GDI_HANDLE_GET_TYPE(hPal) == GDI_OBJECT_TYPE_PALETTE); - pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hPal)]; - TEST(pEntry->KernelData != NULL); - TEST(pEntry->ProcessId == GetCurrentProcessId()); - TEST(pEntry->UserData == 0); - TEST(pEntry->Type == (((UINT)hPal >> 16) | GDI_OBJECT_TYPE_PALETTE)); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiEnumFontOpen.c b/rostests/apitests/w32knapi/ntgdi/NtGdiEnumFontOpen.c deleted file mode 100644 index c95749348bd..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiEnumFontOpen.c +++ /dev/null @@ -1,36 +0,0 @@ - -INT -Test_NtGdiEnumFontOpen(PTESTINFO pti) -{ - HDC hDC; - ULONG_PTR idEnum; - ULONG ulCount; - PGDI_TABLE_ENTRY pEntry; - - hDC = CreateDCW(L"DISPLAY",NULL,NULL,NULL); - - // FIXME: We should load the font first - - idEnum = NtGdiEnumFontOpen(hDC, 2, 0, 32, L"Courier", ANSI_CHARSET, &ulCount); - ASSERT(idEnum != 0); - - /* we should have a gdi handle here */ - TEST(GDI_HANDLE_GET_TYPE(idEnum) == GDI_OBJECT_TYPE_ENUMFONT); - pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(idEnum)]; - TEST(pEntry->KernelData != NULL); - TEST(pEntry->ProcessId == GetCurrentProcessId()); - TEST(pEntry->UserData == 0); - TEST(pEntry->Type == ((idEnum >> 16) | GDI_OBJECT_TYPE_ENUMFONT)); - - /* We should not be able to use DeleteObject() on the handle */ - TEST(DeleteObject((HGDIOBJ)idEnum) == FALSE); - - NtGdiEnumFontClose(idEnum); - - // Test no logfont (NULL): should word - // Test empty lfFaceName string: should not work - - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c b/rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c deleted file mode 100644 index 06c2b08f1d5..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c +++ /dev/null @@ -1,62 +0,0 @@ -INT -Test_NtGdiGetBitmapBits(PTESTINFO pti) -{ - BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9}; - HBITMAP hBitmap; - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetBitmapBits(0, 0, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - /* Test NULL bitmap handle */ - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetBitmapBits(0, 5, Bits) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - /* Test invalid bitmap handle */ - hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3)); - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetBitmapBits(hBitmap, 5, Bits) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - DeleteObject(hBitmap); - - hBitmap = CreateBitmap(3, 3, 1, 8, NULL); - SetLastError(ERROR_SUCCESS); - - /* test NULL pointer and count buffer size != 0 */ - RTEST(NtGdiGetBitmapBits(hBitmap, 5, NULL) == 12); - - /* test NULL pointer and buffer size == 0*/ - RTEST(NtGdiGetBitmapBits(hBitmap, 0, NULL) == 12); - - /* test bad pointer */ - RTEST(NtGdiGetBitmapBits(hBitmap, 5, (PBYTE)0x500) == 0); - - /* Test if we can set a number of bytes between lines */ - RTEST(NtGdiGetBitmapBits(hBitmap, 5, Bits) == 5); - - /* Test alignment */ - RTEST(NtGdiGetBitmapBits(hBitmap, 4, Bits+1) == 4); - - /* Test 1 byte too much */ - RTEST(NtGdiGetBitmapBits(hBitmap, 10, Bits) == 10); - - /* Test one row too much */ - RTEST(NtGdiGetBitmapBits(hBitmap, 12, Bits) == 12); - - RTEST(NtGdiGetBitmapBits(hBitmap, 13, Bits) == 12); - - RTEST(NtGdiGetBitmapBits(hBitmap, 100, Bits) == 12); - - /* Test huge bytes count */ - RTEST(NtGdiGetBitmapBits(hBitmap, 12345678, Bits) == 12); - - /* Test negative bytes count */ - RTEST(NtGdiGetBitmapBits(hBitmap, -5, Bits) == 12); - - RTEST(GetLastError() == ERROR_SUCCESS); - - DeleteObject(hBitmap); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiGetDIBits.c b/rostests/apitests/w32knapi/ntgdi/NtGdiGetDIBits.c deleted file mode 100644 index 960b0d49fdf..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiGetDIBits.c +++ /dev/null @@ -1,131 +0,0 @@ -/* taken from gdi32, bitmap.c */ -UINT -FASTCALL -DIB_BitmapMaxBitsSize( PBITMAPINFO Info, UINT ScanLines ) -{ - UINT MaxBits = 0; - - if (Info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER)) - { - PBITMAPCOREHEADER Core = (PBITMAPCOREHEADER)Info; - MaxBits = Core->bcBitCount * Core->bcPlanes * Core->bcWidth; - } - else /* assume BITMAPINFOHEADER */ - { - if ((Info->bmiHeader.biCompression) && (Info->bmiHeader.biCompression != BI_BITFIELDS)) - return Info->bmiHeader.biSizeImage; - // Planes are over looked by Yuan. I guess assumed always 1. - MaxBits = Info->bmiHeader.biBitCount * Info->bmiHeader.biPlanes * Info->bmiHeader.biWidth; - } - MaxBits = ((MaxBits + 31) & ~31 ) / 8; // From Yuan, ScanLineSize = (Width * bitcount + 31)/32 - return (MaxBits * ScanLines); // ret the full Size. -} - - -INT -Test_NtGdiGetDIBitsInternal(PTESTINFO pti) -{ - HBITMAP hBitmap; - struct - { - BITMAPINFO bi; - RGBQUAD Colors[20]; - } bmp; -// BITMAPINFO bi; - INT ScreenBpp; - BITMAPCOREINFO bic; - DWORD data[20*16]; - - HDC hDCScreen = GetDC(NULL); - ASSERT(hDCScreen != NULL); - - hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16); - ASSERT(hBitmap != NULL); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetDIBitsInternal(0, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetDIBitsInternal((HDC)2345, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, NULL, 0, 0, 0) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - ZeroMemory(&bmp, sizeof(bmp)); - bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetDIBitsInternal((HDC)0, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); - TEST(bmp.Colors[0].rgbRed == 0x44); - - ZeroMemory(&bmp, sizeof(bmp)); - bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); - TEST(bmp.Colors[0].rgbRed == 0x44); - - ZeroMemory(&bmp, sizeof(bmp)); - bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, &bmp.bi, DIB_RGB_COLORS, - DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL); - - RTEST(bmp.bi.bmiHeader.biWidth == 16); - RTEST(bmp.bi.bmiHeader.biHeight == 16); - RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp); - RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8)); - - TEST(bmp.Colors[0].rgbRed == 0x44); - - /* Test with pointer */ -// ZeroMemory(&bmp.bi, sizeof(BITMAPINFO)); - bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); -// FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x11223344); - - SetLastError(ERROR_SUCCESS); - TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, (void*)data, &bmp.bi, DIB_RGB_COLORS, - DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - RTEST(bmp.bi.bmiHeader.biWidth == 16); - RTEST(bmp.bi.bmiHeader.biHeight == 16); - RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp); - RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8)); - - TEST(bmp.Colors[0].rgbRed != 0x44); - - /* Test a BITMAPCOREINFO structure */ - SetLastError(ERROR_SUCCESS); - ZeroMemory(&bic, sizeof(BITMAPCOREINFO)); - bic.bmciHeader.bcSize = sizeof(BITMAPCOREHEADER); - TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, (PBITMAPINFO)&bic, DIB_RGB_COLORS, - DIB_BitmapMaxBitsSize((PBITMAPINFO)&bic, 15), 0) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - - ReleaseDC(NULL, hDCScreen); - DeleteObject(hBitmap); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiGetFontResourceInfoInternalW.c b/rostests/apitests/w32knapi/ntgdi/NtGdiGetFontResourceInfoInternalW.c deleted file mode 100644 index 0effcc8b247..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiGetFontResourceInfoInternalW.c +++ /dev/null @@ -1,43 +0,0 @@ - -INT -Test_NtGdiGetFontResourceInfoInternalW(PTESTINFO pti) -{ - WCHAR szFullFileName[MAX_PATH+1]; - BOOL bRet; - DWORD dwBufSize; - LOGFONTW logfont; - UNICODE_STRING NtFileName; - - GetCurrentDirectoryW(MAX_PATH, szFullFileName); - wcscat(szFullFileName, L"\\test.otf"); - - ASSERT(AddFontResourceW(szFullFileName) != 0); - - ASSERT(RtlDosPathNameToNtPathName_U(szFullFileName, - &NtFileName, - NULL, - NULL)); - - dwBufSize = sizeof(logfont); - memset(&logfont, 0x0, dwBufSize); - - bRet = NtGdiGetFontResourceInfoInternalW( - NtFileName.Buffer, - (NtFileName.Length / sizeof(WCHAR)) +1, - 1, - dwBufSize, - &dwBufSize, - &logfont, - 2); - - TEST(bRet != FALSE); - - printf("lfHeight = %ld\n", logfont.lfHeight); - printf("lfWidth = %ld\n", logfont.lfWidth); - printf("lfFaceName = %ls\n", logfont.lfFaceName); - - RemoveFontResourceW(szFullFileName); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiGetRandomRgn.c b/rostests/apitests/w32knapi/ntgdi/NtGdiGetRandomRgn.c deleted file mode 100644 index a666a194c07..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiGetRandomRgn.c +++ /dev/null @@ -1,80 +0,0 @@ -INT -Test_NtGdiGetRandomRgn(PTESTINFO pti) -{ - HWND hWnd; - HDC hDC; - HRGN hrgn, hrgn2; - - /* Create a window */ - hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, - NULL, NULL, g_hInstance, 0); -// UpdateWindow(hWnd); - hDC = GetDC(hWnd); - - ASSERT(hDC != NULL); - - hrgn = CreateRectRgn(0,0,0,0); - hrgn2 = CreateRectRgn(3,3,10,10); - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetRandomRgn(0, hrgn, 0) == -1); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 1) == -1); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 10) == -1); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetRandomRgn((HDC)2345, (HRGN)10, 10) == -1); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetRandomRgn((HDC)2345, 0, 1) == -1); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiGetRandomRgn(hDC, 0, 0) == 0); - RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == 0); - RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 0) == 0); - RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 1) == 0); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 0) == 0); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0); - TEST(NtGdiGetRandomRgn(hDC, hrgn, 2) == 0); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 3) == 0); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 5) == 0); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 10) == 0); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, -10) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - SelectClipRgn(hDC, hrgn2); - RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == -1); - RTEST(GetLastError() == ERROR_SUCCESS); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1); - RTEST(CombineRgn(hrgn, hrgn, hrgn, RGN_OR) == SIMPLEREGION); - RTEST(CombineRgn(hrgn, hrgn, hrgn2, RGN_XOR) == NULLREGION); - - SetRectRgn(hrgn2,0,0,0,0); - SelectClipRgn(hDC, hrgn2); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1); - - RTEST(CombineRgn(hrgn2, hrgn, hrgn2, RGN_XOR) == NULLREGION); - RTEST(CombineRgn(hrgn2, hrgn, hrgn, RGN_OR) == NULLREGION); - - SelectClipRgn(hDC, NULL); - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0); - - - RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1); - - RTEST(GetLastError() == ERROR_SUCCESS); - - ReleaseDC(hWnd, hDC); - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiGetStockObject.c b/rostests/apitests/w32knapi/ntgdi/NtGdiGetStockObject.c deleted file mode 100644 index 9773ef5c381..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiGetStockObject.c +++ /dev/null @@ -1,137 +0,0 @@ - -INT -Test_NtGdiGetStockObject(PTESTINFO pti) -{ - HANDLE handle = NULL; - BITMAP bitmap; - - /* BRUSH testing */ - handle = (HANDLE) NtGdiGetStockObject(WHITE_BRUSH); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_BRUSH); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(LTGRAY_BRUSH); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_BRUSH); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(GRAY_BRUSH); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_BRUSH); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(DKGRAY_BRUSH); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_BRUSH); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(BLACK_BRUSH); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_BRUSH); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(NULL_BRUSH); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_BRUSH); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - /* PEN testing */ - handle = (HANDLE) NtGdiGetStockObject(WHITE_PEN); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_PEN); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) != 0); - - handle = (HANDLE) NtGdiGetStockObject(BLACK_PEN); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_PEN); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) != 0); - - handle = (HANDLE) NtGdiGetStockObject(NULL_PEN); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_PEN); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - /* Not inuse ? */ - RTEST(NtGdiGetStockObject(9) == 0); - - /* FONT testing */ - handle = (HANDLE) NtGdiGetStockObject(OEM_FIXED_FONT); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_FONT); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) != 0); - - handle = (HANDLE) NtGdiGetStockObject(ANSI_FIXED_FONT); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_FONT); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(ANSI_VAR_FONT); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_FONT); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(SYSTEM_FONT); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_FONT); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(DEVICE_DEFAULT_FONT); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_FONT); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(SYSTEM_FIXED_FONT); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_FONT); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(DEFAULT_GUI_FONT); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_FONT); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - /* PALETTE testing */ - handle = (HANDLE) NtGdiGetStockObject(DEFAULT_PALETTE); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_PALETTE); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - /* DC testing */ - handle = (HANDLE) NtGdiGetStockObject(DC_BRUSH); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_BRUSH); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - handle = (HANDLE) NtGdiGetStockObject(DC_PEN); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_PEN); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - - /* ? testing */ - handle = (HANDLE) NtGdiGetStockObject(20); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_COLORSPACE); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - /* value 21 is getting back 1x1 1Bpp Bitmap */ - handle = (HANDLE) NtGdiGetStockObject(21); - RTEST(handle != 0); - RTEST(GDI_HANDLE_GET_TYPE(handle) == GDI_OBJECT_TYPE_BITMAP); - RTEST(GDI_HANDLE_IS_STOCKOBJ(handle) == TRUE); - - RTEST(GetObject(handle, sizeof(BITMAP), &bitmap) == sizeof(BITMAP)); - RTEST(bitmap.bmType == 0); - RTEST(bitmap.bmWidth == 1); - RTEST(bitmap.bmHeight == 1); - RTEST(bitmap.bmWidthBytes == 2); - RTEST(bitmap.bmPlanes == 1); - RTEST(bitmap.bmBitsPixel == 1); - RTEST(bitmap.bmBits == 0); - - - RTEST(NtGdiGetStockObject(22) == 0); - RTEST(NtGdiGetStockObject(23) == 0); - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiSelectBitmap.c b/rostests/apitests/w32knapi/ntgdi/NtGdiSelectBitmap.c deleted file mode 100644 index 2e99071dcf7..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiSelectBitmap.c +++ /dev/null @@ -1,49 +0,0 @@ -INT -Test_NtGdiSelectBitmap(PTESTINFO pti) -{ - HDC hDC; - HBITMAP hBmp, hOldBmp; - - hDC = CreateCompatibleDC(GetDC(NULL)); - ASSERT(hDC); - - hBmp = CreateBitmap(2,2,1,1,NULL); - - /* Test NULL DC */ - SetLastError(ERROR_SUCCESS); - hOldBmp = NtGdiSelectBitmap(NULL, hBmp); - TEST(hOldBmp == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid DC */ - SetLastError(ERROR_SUCCESS); - hOldBmp = NtGdiSelectBitmap((HDC)((ULONG_PTR)hDC & 0x0000ffff), hBmp); - TEST(hOldBmp == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test NULL bitmap */ - SetLastError(ERROR_SUCCESS); - hOldBmp = NtGdiSelectBitmap(hDC, NULL); - TEST(hOldBmp == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test NULL bitmap */ - SetLastError(ERROR_SUCCESS); - hOldBmp = NtGdiSelectBitmap(hDC, (HBITMAP)((ULONG_PTR)hBmp & 0x0000ffff)); - TEST(hOldBmp == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid bitmap */ - SetLastError(ERROR_SUCCESS); - hOldBmp = NtGdiSelectBitmap(hDC, hBmp); - TEST(hOldBmp != NULL); - hOldBmp = NtGdiSelectBitmap(hDC, hOldBmp); - TEST(hOldBmp == hBmp); - TEST(GetLastError() == ERROR_SUCCESS); - - DeleteObject(hBmp); - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiSelectBrush.c b/rostests/apitests/w32knapi/ntgdi/NtGdiSelectBrush.c deleted file mode 100644 index d332e9af39f..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiSelectBrush.c +++ /dev/null @@ -1,47 +0,0 @@ -INT -Test_NtGdiSelectBrush(PTESTINFO pti) -{ - HDC hDC; - HBRUSH hBrush, hOldBrush; - - hDC = CreateDCW(L"DISPLAY", NULL, NULL, NULL); - - hBrush = GetStockObject(GRAY_BRUSH); - - /* Test NULL DC */ - SetLastError(ERROR_SUCCESS); - hOldBrush = NtGdiSelectBrush(NULL, hBrush); - TEST(hOldBrush == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid DC */ - SetLastError(ERROR_SUCCESS); - hOldBrush = NtGdiSelectBrush((HDC)((ULONG_PTR)hDC & 0x0000ffff), hBrush); - TEST(hOldBrush == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test NULL brush */ - SetLastError(ERROR_SUCCESS); - hOldBrush = NtGdiSelectBrush(hDC, NULL); - TEST(hOldBrush == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid brush */ - SetLastError(ERROR_SUCCESS); - hOldBrush = NtGdiSelectBrush(hDC, (HBRUSH)((ULONG_PTR)hBrush & 0x0000ffff)); - TEST(hOldBrush == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - hOldBrush = NtGdiSelectBrush(hDC, hBrush); - TEST(hOldBrush != NULL); - hOldBrush = NtGdiSelectBrush(hDC, hOldBrush); - TEST(hOldBrush == hBrush); - TEST(GetLastError() == ERROR_SUCCESS); - - - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiSelectFont.c b/rostests/apitests/w32knapi/ntgdi/NtGdiSelectFont.c deleted file mode 100644 index acba727e60e..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiSelectFont.c +++ /dev/null @@ -1,47 +0,0 @@ -INT -Test_NtGdiSelectFont(PTESTINFO pti) -{ - HDC hDC; - HFONT hFont, hOldFont; - - hDC = CreateDCW(L"DISPLAY", NULL, NULL, NULL); - - hFont = GetStockObject(DEFAULT_GUI_FONT); - - /* Test NULL DC */ - SetLastError(ERROR_SUCCESS); - hOldFont = NtGdiSelectFont(NULL, hFont); - TEST(hOldFont == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid DC */ - SetLastError(ERROR_SUCCESS); - hOldFont = NtGdiSelectFont((HDC)((ULONG_PTR)hDC & 0x0000ffff), hFont); - TEST(hOldFont == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test NULL font */ - SetLastError(ERROR_SUCCESS); - hOldFont = NtGdiSelectFont(hDC, NULL); - TEST(hOldFont == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid font */ - SetLastError(ERROR_SUCCESS); - hOldFont = NtGdiSelectFont(hDC, (HFONT)((ULONG_PTR)hFont & 0x0000ffff)); - TEST(hOldFont == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - hOldFont = NtGdiSelectFont(hDC, hFont); - TEST(hOldFont != NULL); - hOldFont = NtGdiSelectFont(hDC, hOldFont); - TEST(hOldFont == hFont); - TEST(GetLastError() == ERROR_SUCCESS); - - - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiSelectPen.c b/rostests/apitests/w32knapi/ntgdi/NtGdiSelectPen.c deleted file mode 100644 index 7731dc62b32..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiSelectPen.c +++ /dev/null @@ -1,46 +0,0 @@ -INT -Test_NtGdiSelectPen(PTESTINFO pti) -{ - HDC hDC; - HPEN hPen, hOldPen; - - hDC = CreateDCW(L"DISPLAY", NULL, NULL, NULL); - - hPen = GetStockObject(WHITE_PEN); - - /* Test NULL DC */ - SetLastError(ERROR_SUCCESS); - hOldPen = NtGdiSelectPen(NULL, hPen); - TEST(hOldPen == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid DC */ - SetLastError(ERROR_SUCCESS); - hOldPen = NtGdiSelectPen((HDC)((ULONG_PTR)hDC & 0x0000ffff), hPen); - TEST(hOldPen == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test NULL pen */ - SetLastError(ERROR_SUCCESS); - hOldPen = NtGdiSelectPen(hDC, NULL); - TEST(hOldPen == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test NULL pen */ - SetLastError(ERROR_SUCCESS); - hOldPen = NtGdiSelectPen(hDC, (HPEN)((ULONG_PTR)hPen & 0x0000ffff)); - TEST(hOldPen == NULL); - TEST(GetLastError() == ERROR_SUCCESS); - - SetLastError(ERROR_SUCCESS); - hOldPen = NtGdiSelectPen(hDC, hPen); - TEST(hOldPen != NULL); - hOldPen = NtGdiSelectPen(hDC, hOldPen); - TEST(hOldPen == hPen); - TEST(GetLastError() == ERROR_SUCCESS); - - - DeleteDC(hDC); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c b/rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c deleted file mode 100644 index 466cfcb2885..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c +++ /dev/null @@ -1,62 +0,0 @@ -INT -Test_NtGdiSetBitmapBits(PTESTINFO pti) -{ - BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9}; - HBITMAP hBitmap; - - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiSetBitmapBits(0, 0, 0) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test NULL bitnap handle */ - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiSetBitmapBits(0, 5, Bits) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - - /* Test invalid bitmap handle */ - hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3)); - SetLastError(ERROR_SUCCESS); - RTEST(NtGdiSetBitmapBits(hBitmap, 5, Bits) == 0); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - DeleteObject(hBitmap); - - hBitmap = CreateBitmap(3, 3, 1, 8, NULL); - SetLastError(ERROR_SUCCESS); - - /* test NULL pointer and count buffer size != 0 */ - RTEST(NtGdiSetBitmapBits(hBitmap, 5, NULL) == 0); - - /* test NULL pointer and buffer size == 0*/ - RTEST(NtGdiSetBitmapBits(hBitmap, 0, NULL) == 0); - - /* test bad pointer */ - RTEST(NtGdiSetBitmapBits(hBitmap, 5, (PBYTE)0x500) == 0); - - /* Test if we can set a number of bytes between lines */ - RTEST(NtGdiSetBitmapBits(hBitmap, 5, Bits) == 5); - - /* Test alignment */ - RTEST(NtGdiSetBitmapBits(hBitmap, 4, Bits+1) == 4); - - /* Test 1 byte too much */ - RTEST(NtGdiSetBitmapBits(hBitmap, 10, Bits) == 10); - - /* Test one row too much */ - RTEST(NtGdiSetBitmapBits(hBitmap, 12, Bits) == 12); - - RTEST(NtGdiSetBitmapBits(hBitmap, 13, Bits) == 12); - - RTEST(NtGdiSetBitmapBits(hBitmap, 100, Bits) == 12); - - /* Test huge bytes count */ - TEST(NtGdiSetBitmapBits(hBitmap, 12345678, Bits) == 0); - - /* Test negative bytes count */ - RTEST(NtGdiSetBitmapBits(hBitmap, -5, Bits) == 0); - - RTEST(GetLastError() == ERROR_SUCCESS); - - DeleteObject(hBitmap); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiSetDIBitsToDeviceInternal.c b/rostests/apitests/w32knapi/ntgdi/NtGdiSetDIBitsToDeviceInternal.c deleted file mode 100644 index e172815437e..00000000000 --- a/rostests/apitests/w32knapi/ntgdi/NtGdiSetDIBitsToDeviceInternal.c +++ /dev/null @@ -1,52 +0,0 @@ -INT -Test_NtGdiSetDIBitsToDeviceInternal(PTESTINFO pti) -{ - static const DWORD InBits[8] = { 0x81, 0x7E, 0x5A, 0x7E, 0x7E, 0x42, 0x7E, 0x81 }; - DWORD OutBits[8]; - - HWND hWnd = CreateWindowW(L"Static", NULL, WS_VISIBLE, - 100, 100, 200, 200, - NULL, NULL, NULL, NULL); - /* This DC has an nonzero origin */ - HDC hDC = GetDC(hWnd); - struct - { - BITMAPINFOHEADER bmiHeader; - RGBQUAD bmiColors[2]; - } bmi; - int x, y; - - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biWidth = 8; - bmi.bmiHeader.biHeight = -8; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = 1; - bmi.bmiHeader.biCompression = 0; - bmi.bmiHeader.biSizeImage = 0; - bmi.bmiHeader.biXPelsPerMeter = 0; - bmi.bmiHeader.biYPelsPerMeter = 0; - bmi.bmiHeader.biClrUsed = 0; - bmi.bmiHeader.biClrImportant = 0; - *(DWORD *)&bmi.bmiColors[0] = 0x000000; - *(DWORD *)&bmi.bmiColors[1] = 0xFFFFFF; - - /* The destination coordinates are relative to the DC origin */ - TEST(NtGdiSetDIBitsToDeviceInternal(hDC, 2, 3, 8, 8, 0, 0, 0, 8, - (PVOID)InBits, (BITMAPINFO *)&bmi, DIB_RGB_COLORS, - sizeof(InBits), sizeof(bmi), TRUE, NULL)); - - /* Now get the data from the screen, and see if it matches */ - for (y = 0; y < 8; y++) - { - DWORD Row = 0; - for (x = 0; x < 8; x++) - Row |= (0x80 & GetPixel(hDC, 2 + x, 3 + y)) >> x; - OutBits[y] = Row; - } - TEST(memcmp(InBits, OutBits, sizeof(InBits)) == 0); - - ReleaseDC(hWnd, hDC); - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwnd.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwnd.c deleted file mode 100644 index 012dc62cfe9..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserCallHwnd.c +++ /dev/null @@ -1,56 +0,0 @@ - -INT -Test_HwndRoutine_DeregisterShellHookWindow(PTESTINFO pti, HWND hWnd) -{ - TEST(NtUserCallHwnd(hWnd, _HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW) == TRUE); - return APISTATUS_NORMAL; -} - -INT -Test_HwndRoutine_GetWindowContextHelpId (PTESTINFO pti, HWND hWnd) -{ - TEST(NtUserCallHwndParam(hWnd, 0xbadb00b, _HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID) == TRUE); - TEST(NtUserCallHwnd(hWnd, _HWND_ROUTINE_GETWNDCONTEXTHLPID) == 0xbadb00b); - return APISTATUS_NORMAL; -} - -INT -Test_HwndRoutine_SetMsgBox(PTESTINFO pti, HWND hWnd) -{ - TEST(NtUserCallHwnd(hWnd, 0x49) != FALSE); - return APISTATUS_NORMAL; -} - - - -INT -Test_NtUserCallHwnd(PTESTINFO pti) -{ - HWND hWnd; - - hWnd = CreateWindowA("BUTTON", - "Test", - BS_PUSHBUTTON | WS_VISIBLE, - 0, - 0, - 50, - 30, - NULL, - NULL, - g_hInstance, - 0); - ASSERT(hWnd); - - SetLastError(ERROR_SUCCESS); - TEST(NtUserCallHwnd(hWnd, 0x44) == FALSE); - Test_HwndRoutine_DeregisterShellHookWindow(pti, hWnd); /* 0x45 */ - TEST(NtUserCallHwnd(hWnd, 0x46) == FALSE); // DWP_GetEnabledPopup - Test_HwndRoutine_GetWindowContextHelpId (pti, hWnd); /* 0x47 */ - TEST(NtUserCallHwnd(hWnd, 0x48) == TRUE); - Test_HwndRoutine_SetMsgBox(pti, hWnd); /* 0x49 */ - TEST(GetLastError() == ERROR_SUCCESS); - - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndLock.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndLock.c deleted file mode 100644 index 0178346b7ab..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndLock.c +++ /dev/null @@ -1,100 +0,0 @@ - - -HMENU g_hMenu; - -INT -Test_HwndLockRoutine_WindowHasShadow (PTESTINFO pti, HWND hWnd) /* 0x53 */ -{ -// TEST(NtUserCallHwndLock(hWnd, 0x53) == 0); - return APISTATUS_NORMAL; -} - - -INT -Test_HwndLockRoutine_ArrangeIconicWindows(PTESTINFO pti, HWND hWnd) /* 0x54 */ -{ -// TEST(NtUserCallHwndLock(hWnd, _HWNDLOCK_ROUTINE_ARRANGEICONICWINDOWS) == 0); - return APISTATUS_NORMAL; -} - -INT -Test_HwndLockRoutine_DrawMenuBar(PTESTINFO pti, HWND hWnd) /* 0x55 */ -{ - TEST(NtUserCallHwndLock(hWnd, 0x55) == 1); - return APISTATUS_NORMAL; -} - -INT -Test_HwndLockRoutine_CheckImeShowStatusInThread(PTESTINFO pti, HWND hWnd) /* 0x56 */ -{ - TEST(NtUserCallHwndLock(hWnd, 0x56) != 0); - return APISTATUS_NORMAL; -} - -INT -Test_HwndLockRoutine_GetSysMenuHandle(PTESTINFO pti, HWND hWnd) /* 0x57 */ -{ - NtUserCallHwndLock(hWnd, 0x5c); -// HMENU hMenu = (HMENU)NtUserCallHwndLock(hWnd, 0x57); -// TEST(hMenu != 0); - return APISTATUS_NORMAL; -} - -INT -Test_HwndLockRoutine_RedrawFrame(PTESTINFO pti, HWND hWnd) /* 0x58 */ -{ -// TEST(NtUserCallHwndLock(hWnd, 0x68) != 0); - return APISTATUS_NORMAL; -} - -INT -Test_HwndLockRoutine_UpdateWindow(PTESTINFO pti, HWND hWnd) /* 0x5e */ -{ - TEST(NtUserCallHwndLock(hWnd, 0x5e) == 1); - return APISTATUS_NORMAL; -} - -INT -Test_NtUserCallHwndLock(PTESTINFO pti) -{ - HWND hWnd; - g_hMenu = CreateMenu(); - - hWnd = CreateWindowA("BUTTON", - "Test", - BS_PUSHBUTTON | WS_VISIBLE, - 0, - 0, - 50, - 30, - NULL, - g_hMenu, - g_hInstance, - 0); - ASSERT(hWnd); - - SetLastError(ERROR_SUCCESS); - TEST(NtUserCallHwndLock((HWND)-22, 999) == 0); - TEST(GetLastError() == ERROR_INVALID_WINDOW_HANDLE); - - SetLastError(ERROR_SUCCESS); - TEST(NtUserCallHwndLock((HWND)0, 0x55) == 0); - TEST(GetLastError() == ERROR_INVALID_WINDOW_HANDLE); - - SetLastError(ERROR_SUCCESS); - TEST(NtUserCallHwndLock(hWnd, 999) == 0); - TEST(GetLastError() == ERROR_SUCCESS); - - Test_HwndLockRoutine_WindowHasShadow (pti, hWnd); /* 0x53 */ - Test_HwndLockRoutine_ArrangeIconicWindows(pti, hWnd); - Test_HwndLockRoutine_DrawMenuBar(pti, hWnd); - Test_HwndLockRoutine_CheckImeShowStatusInThread(pti, hWnd); - Test_HwndLockRoutine_GetSysMenuHandle(pti, hWnd); - Test_HwndLockRoutine_RedrawFrame(pti, hWnd); - - Test_HwndLockRoutine_UpdateWindow(pti, hWnd); - - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndOpt.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndOpt.c deleted file mode 100644 index 078e626e08a..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndOpt.c +++ /dev/null @@ -1,25 +0,0 @@ - - -INT -Test_HwndOptRoutine_SetProgmanWindow(PTESTINFO pti) /* 0x4a */ -{ -// NtUserCallHwndOpt(hWnd, HWNDOPT_ROUTINE_SETPROGMANWINDOW); - return APISTATUS_NORMAL; -} - -INT -Test_HwndOptRoutine_SetTaskmanWindow (PTESTINFO pti) /* 0x4b */ -{ -// NtUserCallHwndOpt(hWnd, HWNDOPT_ROUTINE_SETTASKMANWINDOW); - return APISTATUS_NORMAL; -} - -INT -Test_NtUserCallHwndOpt(PTESTINFO pti) -{ - - Test_HwndOptRoutine_SetProgmanWindow(pti); /* 0x4a */ - Test_HwndOptRoutine_SetTaskmanWindow (pti); /* 0x4b */ - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParam.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParam.c deleted file mode 100644 index 36a4fb493f4..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParam.c +++ /dev/null @@ -1,34 +0,0 @@ - -INT -Test_HwndParamRoutine_SetWindowContextHelpId (PTESTINFO pti, HWND hWnd) -{ - TEST(NtUserCallHwndParam(hWnd, 12345, _HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID) == TRUE); - TEST(NtUserCallHwnd(hWnd, _HWND_ROUTINE_GETWNDCONTEXTHLPID) == 12345); - return APISTATUS_NORMAL; -} - - -INT -Test_NtUserCallHwndParam(PTESTINFO pti) -{ - HWND hWnd; - - hWnd = CreateWindowA("BUTTON", - "Test", - BS_PUSHBUTTON | WS_VISIBLE, - 0, - 0, - 50, - 30, - NULL, - NULL, - g_hInstance, - 0); - ASSERT(hWnd); - - Test_HwndParamRoutine_SetWindowContextHelpId (pti, hWnd); - - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParamLock.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParamLock.c deleted file mode 100644 index 9d12583b719..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParamLock.c +++ /dev/null @@ -1,7 +0,0 @@ - - -INT -Test_NtUserCallHwndParamLock(PTESTINFO pti) -{ - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallNoParam.c b/rostests/apitests/w32knapi/ntuser/NtUserCallNoParam.c deleted file mode 100644 index c282f1db859..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserCallNoParam.c +++ /dev/null @@ -1,69 +0,0 @@ - -INT -Test_NoParamRoutine_CreateMenu(PTESTINFO pti) /* 0 */ -{ - HMENU hMenu; - - hMenu = (HMENU)NtUserCallNoParam(_NOPARAM_ROUTINE_CREATEMENU); - TEST(IsMenu(hMenu) == TRUE); - DestroyMenu(hMenu); - - return APISTATUS_NORMAL; -} - -INT -Test_NoParamRoutine_CreatePopupMenu(PTESTINFO pti) /* 1 */ -{ - HMENU hMenu; - - hMenu = (HMENU)NtUserCallNoParam(_NOPARAM_ROUTINE_CREATEMENUPOPUP); - TEST(IsMenu(hMenu) == TRUE); - DestroyMenu(hMenu); - - return APISTATUS_NORMAL; -} - -INT -Test_NoParamRoutine_DisableProcessWindowsGhosting(PTESTINFO pti) /* 2 */ -{ - return APISTATUS_NORMAL; -} - -INT -Test_NoParamRoutine_ClearWakeMask(PTESTINFO pti) /* 3 */ -{ - return APISTATUS_NORMAL; -} - -INT -Test_NoParamRoutine_AllowForegroundActivation(PTESTINFO pti) /* 4 */ -{ - return APISTATUS_NORMAL; -} - -INT -Test_NoParamRoutine_DestroyCaret(PTESTINFO pti) /* 5 */ -{ - return APISTATUS_NORMAL; -} - -INT -Test_NoParamRoutine_LoadUserApiHook(PTESTINFO pti) /* 0x1d */ -{ - DWORD dwRet; - dwRet = NtUserCallNoParam(_NOPARAM_ROUTINE_LOADUSERAPIHOOK); - -// TEST(dwRet != 0); - return APISTATUS_NORMAL; -} - - -INT -Test_NtUserCallNoParam(PTESTINFO pti) -{ - Test_NoParamRoutine_CreateMenu(pti); - Test_NoParamRoutine_CreatePopupMenu(pti); - Test_NoParamRoutine_LoadUserApiHook(pti); /* 0x1d */ - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallOneParam.c b/rostests/apitests/w32knapi/ntuser/NtUserCallOneParam.c deleted file mode 100644 index 2e62315750b..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserCallOneParam.c +++ /dev/null @@ -1,73 +0,0 @@ - -INT -Test_OneParamRoutine_BeginDeferWindowPos(PTESTINFO pti) /* 0x1e */ -{ - HDWP hWinPosInfo; - - hWinPosInfo = (HDWP)NtUserCallOneParam(5, 0x1e); - TEST(hWinPosInfo != 0); - TEST(EndDeferWindowPos(hWinPosInfo) != 0); - - return APISTATUS_NORMAL; -} - -INT -Test_OneParamRoutine_WindowFromDC(PTESTINFO pti) /* 0x1f */ -{ - HDC hDC = GetDC(NULL); - HWND hWnd; - - hWnd = (HWND)NtUserCallOneParam((DWORD)hDC, 0x1f); - TEST(hWnd != 0); - TEST(IsWindow(hWnd)); - TEST(hWnd == GetDesktopWindow()); - - return APISTATUS_NORMAL; -} - -INT -Test_OneParamRoutine_MapDesktopObject(PTESTINFO pti) /* 0x30 */ -{ - DWORD pObject; - HWND hWnd; - HMENU hMenu; - - hWnd = GetDesktopWindow(); - pObject = NtUserCallOneParam((DWORD)hWnd, _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT); - TEST(pObject > 0); - TEST(pObject < 0x80000000); - - hMenu = CreateMenu(); - pObject = NtUserCallOneParam((DWORD)hMenu, _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT); - TEST(pObject > 0); - TEST(pObject < 0x80000000); - - return APISTATUS_NORMAL; -} - -INT -Test_OneParamRoutine_SwapMouseButtons(PTESTINFO pti) /* 0x42 */ -{ - BOOL bInverse; - - NtUserCallOneParam(TRUE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON); - bInverse = (BOOL)NtUserCallOneParam(FALSE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON); - TEST(bInverse == TRUE); - bInverse = (BOOL)NtUserCallOneParam(FALSE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON); - TEST(bInverse == FALSE); - - // TODO: test other values - return APISTATUS_NORMAL; -} - -INT -Test_NtUserCallOneParam(PTESTINFO pti) -{ - Test_OneParamRoutine_BeginDeferWindowPos(pti); /* 0x1e */ - Test_OneParamRoutine_WindowFromDC(pti); /* 0x1f */ - Test_OneParamRoutine_MapDesktopObject(pti); /* 0x30 */ - - Test_OneParamRoutine_SwapMouseButtons(pti); /* 0x42 */ - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c b/rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c deleted file mode 100644 index 98a45a44af4..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c +++ /dev/null @@ -1,15 +0,0 @@ -/* First the call stub */ -DWORD STDCALL -NtUserCountClipboardFormats(VOID) -{ - DWORD p; - return Syscall(L"NtUserCountClipboardFormats", 0, &p); -} - -INT -Test_NtUserCountClipboardFormats(PTESTINFO pti) -{ - RTEST(NtUserCountClipboardFormats() < 1000); - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntuser/NtUserEnumDisplaySettings.c b/rostests/apitests/w32knapi/ntuser/NtUserEnumDisplaySettings.c deleted file mode 100644 index 2b741277599..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserEnumDisplaySettings.c +++ /dev/null @@ -1,99 +0,0 @@ - -static struct -{ - DEVMODEW devmode; - CHAR buffer[0xffff]; -} data; - -INT -TEST_NtUserEnumDisplaySettings(PTESTINFO pti) -{ - UNICODE_STRING usDeviceName; - WCHAR szName[] = L"DISPLAY"; - NTSTATUS Status; - INT i; - - SetLastError(ERROR_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, 0, 0, 0); - TEST(Status == STATUS_ACCESS_VIOLATION); - TEST(GetLastError() == ERROR_SUCCESS); - - data.devmode.dmDriverExtra = 0; - for (i = 0; i < 2 * sizeof(DEVMODEW); i++) - { - data.devmode.dmSize = i; - Status = NtUserEnumDisplaySettings(NULL, 1000, (DEVMODEW*)&data, 0); - if (i != sizeof(DEVMODEW)) - { - TEST(Status == STATUS_BUFFER_TOO_SMALL); - } - } - TEST(GetLastError() == ERROR_SUCCESS); - - usDeviceName.Buffer = NULL; - usDeviceName.Length = 0; - usDeviceName.MaximumLength = 0; - Status = NtUserEnumDisplaySettings(&usDeviceName, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_BUFFER_TOO_SMALL); - Status = NtUserEnumDisplaySettings(&usDeviceName, -4, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_BUFFER_TOO_SMALL); - - data.devmode.dmSize = sizeof(DEVMODEW); - data.devmode.dmDriverExtra = 0xffff; - Status = NtUserEnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - - data.devmode.dmSize = sizeof(DEVMODEW); - data.devmode.dmDriverExtra = 0; - Status = NtUserEnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - - usDeviceName.Buffer = NULL; - usDeviceName.Length = 0; - usDeviceName.MaximumLength = 0; - Status = NtUserEnumDisplaySettings(&usDeviceName, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_INVALID_PARAMETER_1); - Status = NtUserEnumDisplaySettings(&usDeviceName, -4, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_INVALID_PARAMETER_1); - - Status = NtUserEnumDisplaySettings(NULL, 0, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, 1, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, 2, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, 4, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, 8, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - - Status = NtUserEnumDisplaySettings(NULL, 247, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, 248, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_INVALID_PARAMETER_2); - - Status = NtUserEnumDisplaySettings(NULL, -1, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, -2, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, -3, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_SUCCESS); - Status = NtUserEnumDisplaySettings(NULL, -4, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_INVALID_PARAMETER_2); - - Status = NtUserEnumDisplaySettings(&usDeviceName, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_INVALID_PARAMETER_1); - - usDeviceName.Buffer = szName; - usDeviceName.Length = wcslen(szName); - usDeviceName.MaximumLength = usDeviceName.Length; - Status = NtUserEnumDisplaySettings(&usDeviceName, ENUM_CURRENT_SETTINGS, (DEVMODEW*)&data, 0); - TEST(Status == STATUS_INVALID_PARAMETER_1); - - Status = NtUserEnumDisplaySettings(&usDeviceName, 1000, (DEVMODEW*)&data, 123456); - TEST(Status == STATUS_INVALID_PARAMETER_1); - - TEST(GetLastError() == ERROR_SUCCESS); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserFindExistingCursorIcon.c b/rostests/apitests/w32knapi/ntuser/NtUserFindExistingCursorIcon.c deleted file mode 100644 index f6ba4f9f100..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserFindExistingCursorIcon.c +++ /dev/null @@ -1,7 +0,0 @@ -INT -Test_NtUserFindExistingCursoricon(PTESTINFO pti) -{ - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntuser/NtUserGetTitleBarInfo.c b/rostests/apitests/w32knapi/ntuser/NtUserGetTitleBarInfo.c deleted file mode 100644 index 3980680fd7d..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserGetTitleBarInfo.c +++ /dev/null @@ -1,40 +0,0 @@ -INT -Test_NtUserGetTitleBarInfo(PTESTINFO pti) -{ - HWND hWnd; - TITLEBARINFO tbi; - - hWnd = CreateWindowA("BUTTON", - "Test", - BS_PUSHBUTTON | WS_VISIBLE, - 0, - 0, - 50, - 30, - NULL, - NULL, - g_hInstance, - 0); - - ASSERT(hWnd); - - /* FALSE case */ - /* no windows handle */ - TEST(NtUserGetTitleBarInfo(NULL, &tbi) == FALSE); - /* no TITLEBARINFO struct */ - TEST(NtUserGetTitleBarInfo(hWnd, NULL) == FALSE); - /* nothing */ - TEST(NtUserGetTitleBarInfo(NULL, NULL) == FALSE); - /* wrong size */ - tbi.cbSize = 0; - TEST(NtUserGetTitleBarInfo(hWnd, &tbi) == FALSE); - - /* TRUE case */ - tbi.cbSize = sizeof(TITLEBARINFO); - TEST(NtUserGetTitleBarInfo(hWnd, &tbi) == TRUE); - - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntuser/NtUserRedrawWindow.c b/rostests/apitests/w32knapi/ntuser/NtUserRedrawWindow.c deleted file mode 100644 index 5284e13d510..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserRedrawWindow.c +++ /dev/null @@ -1,30 +0,0 @@ -INT -Test_NtUserRedrawWindow(PTESTINFO pti) -{ - HWND hWnd; - RECT rect; - - hWnd = CreateWindowA("BUTTON", - "Test", - BS_PUSHBUTTON | WS_VISIBLE, - 0, - 0, - 50, - 30, - NULL, - NULL, - g_hInstance, - 0); - ASSERT(hWnd); - - rect.left = 0; - rect.top = 0; - rect.right = 10; - rect.bottom = 10; - - TEST(NtUserRedrawWindow(hWnd, &rect, NULL, RDW_VALIDATE) == TRUE); - - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserScrollDC.c b/rostests/apitests/w32knapi/ntuser/NtUserScrollDC.c deleted file mode 100644 index 7c1b48d7f6e..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserScrollDC.c +++ /dev/null @@ -1,111 +0,0 @@ - - -INT -Test_NtUserScrollDC(PTESTINFO pti) -{ - HWND hWnd; - HDC hDC; - HRGN hRgn, hTmpRgn; - RECT rcScroll, rcClip, rcUpdate; - RECT rect = {0,0,100,100}; - INT Result; - - hWnd = CreateWindowA("BUTTON", - "Test", - BS_PUSHBUTTON | WS_VISIBLE, - 0, - 0, - 50, - 100, - NULL, - NULL, - g_hInstance, - 0); - ASSERT(hWnd); - RedrawWindow(hWnd, &rect, NULL, RDW_UPDATENOW); - - hDC = GetDC(hWnd); - ASSERT(hDC); - - hRgn = CreateRectRgn(0,0,10,10); - - - /* Test inverted clip rect */ - rcScroll.left = 0; - rcScroll.top = 25; - rcScroll.right = 100; - rcScroll.bottom = 40; - rcClip.left = 0; - rcClip.top = 35; - rcClip.right = -70; - rcClip.bottom = -1000; - SetLastError(ERROR_SUCCESS); - Result = NtUserScrollDC(hDC, 10, 20, &rcScroll, &rcClip, hRgn, &rcUpdate); - RTEST(Result == 1); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test inverted scroll rect */ - rcScroll.left = 0; - rcScroll.top = 25; - rcScroll.right = -100; - rcScroll.bottom = -40; - rcClip.left = 0; - rcClip.top = 35; - rcClip.right = 70; - rcClip.bottom = 1000; - SetLastError(ERROR_SUCCESS); - Result = NtUserScrollDC(hDC, 10, 20, &rcScroll, &rcClip, hRgn, &rcUpdate); - RTEST(Result == 1); - RTEST(GetLastError() == ERROR_SUCCESS); - - rcScroll.left = 0; - rcScroll.top = 25; - rcScroll.right = 100; - rcScroll.bottom = 40; - - /* Test invalid update region */ - SetLastError(ERROR_SUCCESS); - Result = NtUserScrollDC(hDC, 10, 20, &rcScroll, &rcClip, (HRGN)0x123456, &rcUpdate); - RTEST(Result == 0); - TEST(GetLastError() == ERROR_INVALID_HANDLE); - - /* Test invalid dc */ - SetLastError(ERROR_SUCCESS); - Result = NtUserScrollDC((HDC)0x123456, 10, 20, &rcScroll, &rcClip, hRgn, &rcUpdate); - RTEST(Result == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid update rect */ - SetLastError(ERROR_SUCCESS); - Result = NtUserScrollDC(hDC, 10, 20, &rcScroll, &rcClip, hRgn, (PVOID)0x80001000); - RTEST(Result == 0); - RTEST(GetLastError() == ERROR_NOACCESS); - - Result = NtUserScrollDC(hDC, 10, 20, &rcScroll, &rcClip, hRgn, &rcUpdate); - - RTEST(Result == TRUE); - RTEST(rcUpdate.left == 0); - RTEST(rcUpdate.top == 35); - RTEST(rcUpdate.right == 70); - RTEST(rcUpdate.bottom == 55); - - hTmpRgn = CreateRectRgn(10,45,70,55); - Result = CombineRgn(hRgn, hRgn, hTmpRgn, RGN_XOR); - RTEST(Result == SIMPLEREGION); - - SetRectRgn(hTmpRgn,0,35,70,40); - Result = CombineRgn(hRgn, hRgn, hTmpRgn, RGN_XOR); - RTEST(Result == NULLREGION); - - DeleteObject(hTmpRgn); - - /* TODO: Test with another window in front */ - /* TODO: Test with different viewport extension */ - - ReleaseDC(hWnd, hDC); - DestroyWindow(hWnd); - DeleteObject(hRgn); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/ntuser/NtUserSystemParametersInfo.c b/rostests/apitests/w32knapi/ntuser/NtUserSystemParametersInfo.c deleted file mode 100644 index 03c7af6350f..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserSystemParametersInfo.c +++ /dev/null @@ -1,359 +0,0 @@ - -LONG -QueryUserRegValueW(LPWSTR pszSubKey, LPWSTR pszValueName, PVOID pData, LPDWORD cbSize, LPDWORD pType) -{ - HKEY hKey; - LONG ret; - - RegOpenKeyExW(HKEY_CURRENT_USER, pszSubKey, 0, KEY_QUERY_VALUE, &hKey); - ret = RegQueryValueExW(hKey, pszValueName, NULL, pType, (LPBYTE)pData, cbSize); - RegCloseKey(hKey); - return ret; -} - - -HWND -CreateTestWindow() -{ - WNDCLASSA wc; - - wc.style = 0; - wc.lpfnWndProc = DefWindowProcA; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = g_hInstance; - wc.hIcon = NULL; - wc.hCursor = NULL; - wc.hbrBackground = NULL; - wc.lpszMenuName = NULL; - wc.lpszClassName = "testclass"; - - RegisterClassA(&wc); - return CreateWindowA("testclass", - "testwnd", - WS_VISIBLE, - 0, - 0, - 50, - 30, - NULL, - NULL, - g_hInstance, - 0); - -} - -void -Test_SPI_87_88(PTESTINFO pti) -{ - DWORD dwRet = 0xdeadbeef; - - TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE); - TEST(dwRet == 0xdeadbeef); - dwRet++; - TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE); - - - dwRet--; - TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE); - - -} - -void -Test_NtUserSystemParametersInfo_Params(PTESTINFO pti) -{ -// UINT uint; - DWORD data[1000]; - UINT i, uint; -#if 1 - /* Test normal */ - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, &uint, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - - /* Test invalid SPI code */ - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(7, 0, &data, 0) == FALSE); - TEST(GetLastError() == ERROR_INVALID_PARAMETER); - - /* Test wrong cbSize member */ - ACCESSTIMEOUT ato; - ato.cbSize = 1; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &ato, 0) == FALSE); - TEST(GetLastError() == ERROR_SUCCESS); -#endif - /* Test undocumented, but valid SPI codes */ - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4112, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] <= 1); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4113, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - data[0] = 0; - NtUserSystemParametersInfo(4112, 0, &data, 0); - TEST(data[0] == 1); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4136, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4137, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4138, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4139, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4140, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4141, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4142, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4143, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4144, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4145, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4146, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4147, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4148, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4149, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4150, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4151, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4152, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4153, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4154, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4155, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4156, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] != 0xdeadbeef); - TEST(data[1] == 0xdeadbeef); - - for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(4157, 0, &data, 0) == TRUE); - TEST(GetLastError() == ERROR_SUCCESS); - TEST(data[0] == 0xbeefdead); - TEST(data[1] == 0xbeefdead); - - /* Test invalid pointer */ - SetLastError(ERROR_SUCCESS); - TEST(NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, (PVOID)0x80000000, 0) == FALSE); - TEST(GetLastError() == ERROR_NOACCESS); - for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; - - /* test wrong bools */ -} - -void -Test_NtUserSystemParametersInfo_fWinIni(PTESTINFO pti) -{ - ACCESSTIMEOUT ato; -// UINT uFocusBorderHeight; - WCHAR Buffer[6]; - DWORD cbSize; - - ato.cbSize = sizeof(ato); - NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &ato, 0); - ato.iTimeOutMSec++; - NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, 0, &ato, 0); - ato.iTimeOutMSec--; - -// NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, &uFocusBorderHeight, 0); -// NtUserSystemParametersInfo(SPI_SETFOCUSBORDERHEIGHT, 0, &uFocusBorderHeight, SPIF_UPDATEINIFILE); - - NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, 0, &ato, 0); - - cbSize = 6; - QueryUserRegValueW(L"Control Panel\\Accessibility\\TimeOut", L"TimeToWait", &Buffer, &cbSize, NULL); - -} - -void -Test_SPI_GETSETBEEP(PTESTINFO pti) -{ - BOOL bOrig, bTemp = 0; - WCHAR szReg[10]; - DWORD cbSize; - - /* Get original value */ - NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bOrig, 0); - - /* Value 0 */ - NtUserSystemParametersInfo(SPI_SETBEEP, 0, NULL, SPIF_UPDATEINIFILE); - NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); - TEST(bTemp == 0); - cbSize = sizeof(szReg); - TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS); - TEST(wcscmpi(szReg, L"No") == 0); - - /* Value 1 */ - NtUserSystemParametersInfo(SPI_SETBEEP, 1, NULL, SPIF_UPDATEINIFILE); - NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); - TEST(bTemp == 1); - cbSize = sizeof(szReg); - TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS); - TEST(wcscmpi(szReg, L"Yes") == 0); - - /* Value 2 */ - NtUserSystemParametersInfo(SPI_SETBEEP, 2, NULL, SPIF_UPDATEINIFILE); - NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); - TEST(bTemp == 1); - cbSize = sizeof(szReg); - TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS); - TEST(wcscmpi(szReg, L"Yes") == 0); - - /* Restore original value */ - NtUserSystemParametersInfo(SPI_SETBEEP, 0, &bOrig, SPIF_UPDATEINIFILE); -} - -INT -Test_SPI_SETDESKWALLPAPER(PTESTINFO pti) -{ - /* Get old Wallpaper */ -// NtUserSystemParametersInfo(SPI_GET_DESKWALLPAPER, 0, - -// TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &hNewWallPaper, 0) == 0); - return 0; -} - -INT -Test_NtUserSystemParametersInfo(PTESTINFO pti) -{ - HWND hWnd; - - hWnd = CreateTestWindow(); -// ASSERT(hWnd); - Test_NtUserSystemParametersInfo_Params(pti); - - Test_NtUserSystemParametersInfo_fWinIni(pti); - - Test_SPI_GETSETBEEP(pti); - Test_SPI_SETDESKWALLPAPER(pti); - - Test_SPI_87_88(pti); - - DestroyWindow(hWnd); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserToUnicodeEx.c b/rostests/apitests/w32knapi/ntuser/NtUserToUnicodeEx.c deleted file mode 100644 index fd129dc61c2..00000000000 --- a/rostests/apitests/w32knapi/ntuser/NtUserToUnicodeEx.c +++ /dev/null @@ -1,438 +0,0 @@ - -INT -Test_NtUserToUnicodeEx(PTESTINFO pti) -{ - BYTE KeyState[256] = {0}; - WCHAR Buffer[10]; - HKL hkl = LoadKeyboardLayoutW(L"00000409", KLF_NOTELLSHELL); - - TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, 0) == 1); - - /* Test with no key pressed */ - ZeroMemory(KeyState, 256); - TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 27); - TEST(NtUserToUnicodeEx(49, 2, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '1'); - TEST(NtUserToUnicodeEx(50, 3, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '2'); - TEST(NtUserToUnicodeEx(51, 4, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '3'); - TEST(NtUserToUnicodeEx(52, 5, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '4'); - TEST(NtUserToUnicodeEx(53, 6, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '5'); - TEST(NtUserToUnicodeEx(54, 7, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '6'); - TEST(NtUserToUnicodeEx(55, 8, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '7'); - TEST(NtUserToUnicodeEx(56, 9, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '8'); - TEST(NtUserToUnicodeEx(57, 10, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '9'); - TEST(NtUserToUnicodeEx(48, 11, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '0'); - TEST(NtUserToUnicodeEx(189, 12, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '-'); - TEST(NtUserToUnicodeEx(187, 13, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '='); - TEST(NtUserToUnicodeEx(8, 14, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 8); - TEST(NtUserToUnicodeEx(9, 15, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 9); - TEST(NtUserToUnicodeEx(81, 16, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'q'); - TEST(NtUserToUnicodeEx(87, 17, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'w'); - TEST(NtUserToUnicodeEx(69, 18, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'e'); - TEST(NtUserToUnicodeEx(82, 19, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'r'); - TEST(NtUserToUnicodeEx(84, 20, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 't'); - TEST(NtUserToUnicodeEx(89, 21, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'y'); - TEST(NtUserToUnicodeEx(85, 22, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'u'); - TEST(NtUserToUnicodeEx(73, 23, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'i'); - TEST(NtUserToUnicodeEx(79, 24, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'o'); - TEST(NtUserToUnicodeEx(80, 25, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'p'); - TEST(NtUserToUnicodeEx(219, 26, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '['); - TEST(NtUserToUnicodeEx(221, 27, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ']'); - TEST(NtUserToUnicodeEx(13, 28, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 13); - TEST(NtUserToUnicodeEx(65, 30, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'a'); - TEST(NtUserToUnicodeEx(83, 31, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 's'); - TEST(NtUserToUnicodeEx(68, 32, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'd'); - TEST(NtUserToUnicodeEx(70, 33, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'f'); - TEST(NtUserToUnicodeEx(71, 34, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'g'); - TEST(NtUserToUnicodeEx(72, 35, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'h'); - TEST(NtUserToUnicodeEx(74, 36, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'j'); - TEST(NtUserToUnicodeEx(75, 37, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'k'); - TEST(NtUserToUnicodeEx(76, 38, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'l'); - TEST(NtUserToUnicodeEx(186, 39, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ';'); - TEST(NtUserToUnicodeEx(222, 40, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '\''); - TEST(NtUserToUnicodeEx(192, 41, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '`'); - TEST(NtUserToUnicodeEx(220, 43, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '\\'); - TEST(NtUserToUnicodeEx(90, 44, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'z'); - TEST(NtUserToUnicodeEx(88, 45, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'x'); - TEST(NtUserToUnicodeEx(67, 46, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'c'); - TEST(NtUserToUnicodeEx(86, 47, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'v'); - TEST(NtUserToUnicodeEx(66, 48, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'b'); - TEST(NtUserToUnicodeEx(78, 49, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'n'); - TEST(NtUserToUnicodeEx(77, 50, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'm'); - TEST(NtUserToUnicodeEx(188, 51, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ','); - TEST(NtUserToUnicodeEx(190, 52, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '.'); - TEST(NtUserToUnicodeEx(191, 53, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '/'); - TEST(NtUserToUnicodeEx(106, 55, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '*'); - TEST(NtUserToUnicodeEx(32, 57, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ' '); - TEST(NtUserToUnicodeEx(109, 74, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '-'); - TEST(NtUserToUnicodeEx(107, 78, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '+'); - TEST(NtUserToUnicodeEx(226, 86, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '\\'); - TEST(NtUserToUnicodeEx(9, 124, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 9); - - /* Test with shift key pressed */ - ZeroMemory(KeyState, 256); - KeyState[VK_SHIFT] = 0xff; - TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 27); - TEST(NtUserToUnicodeEx(49, 2, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '!'); - TEST(NtUserToUnicodeEx(50, 3, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '@'); - TEST(NtUserToUnicodeEx(51, 4, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '#'); - TEST(NtUserToUnicodeEx(52, 5, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '$'); - TEST(NtUserToUnicodeEx(53, 6, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '\%'); - TEST(NtUserToUnicodeEx(54, 7, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '^'); - TEST(NtUserToUnicodeEx(55, 8, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '&'); - TEST(NtUserToUnicodeEx(56, 9, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '*'); - TEST(NtUserToUnicodeEx(57, 10, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '('); - TEST(NtUserToUnicodeEx(48, 11, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ')'); - TEST(NtUserToUnicodeEx(189, 12, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '_'); - TEST(NtUserToUnicodeEx(187, 13, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '+'); - TEST(NtUserToUnicodeEx(8, 14, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 8); - TEST(NtUserToUnicodeEx(9, 15, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 9); - TEST(NtUserToUnicodeEx(81, 16, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'Q'); - TEST(NtUserToUnicodeEx(87, 17, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'W'); - TEST(NtUserToUnicodeEx(69, 18, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'E'); - TEST(NtUserToUnicodeEx(82, 19, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'R'); - TEST(NtUserToUnicodeEx(84, 20, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'T'); - TEST(NtUserToUnicodeEx(89, 21, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'Y'); - TEST(NtUserToUnicodeEx(85, 22, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'U'); - TEST(NtUserToUnicodeEx(73, 23, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'I'); - TEST(NtUserToUnicodeEx(79, 24, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'O'); - TEST(NtUserToUnicodeEx(80, 25, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'P'); - TEST(NtUserToUnicodeEx(219, 26, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '{'); - TEST(NtUserToUnicodeEx(221, 27, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '}'); - TEST(NtUserToUnicodeEx(13, 28, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 13); - TEST(NtUserToUnicodeEx(65, 30, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'A'); - TEST(NtUserToUnicodeEx(83, 31, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'S'); - TEST(NtUserToUnicodeEx(68, 32, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'D'); - TEST(NtUserToUnicodeEx(70, 33, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'F'); - TEST(NtUserToUnicodeEx(71, 34, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'G'); - TEST(NtUserToUnicodeEx(72, 35, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'H'); - TEST(NtUserToUnicodeEx(74, 36, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'J'); - TEST(NtUserToUnicodeEx(75, 37, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'K'); - TEST(NtUserToUnicodeEx(76, 38, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'L'); - TEST(NtUserToUnicodeEx(186, 39, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ':'); - TEST(NtUserToUnicodeEx(222, 40, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '"'); - TEST(NtUserToUnicodeEx(192, 41, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '~'); - TEST(NtUserToUnicodeEx(220, 43, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '|'); - TEST(NtUserToUnicodeEx(90, 44, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'Z'); - TEST(NtUserToUnicodeEx(88, 45, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'X'); - TEST(NtUserToUnicodeEx(67, 46, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'C'); - TEST(NtUserToUnicodeEx(86, 47, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'V'); - TEST(NtUserToUnicodeEx(66, 48, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'B'); - TEST(NtUserToUnicodeEx(78, 49, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'N'); - TEST(NtUserToUnicodeEx(77, 50, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'M'); - TEST(NtUserToUnicodeEx(188, 51, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '<'); - TEST(NtUserToUnicodeEx(190, 52, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '>'); - TEST(NtUserToUnicodeEx(191, 53, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '?'); - TEST(NtUserToUnicodeEx(106, 55, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '*'); - TEST(NtUserToUnicodeEx(32, 57, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ' '); - TEST(NtUserToUnicodeEx(109, 74, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '-'); - TEST(NtUserToUnicodeEx(107, 78, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '+'); - TEST(NtUserToUnicodeEx(226, 86, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '|'); - TEST(NtUserToUnicodeEx(9, 124, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 9); - - /* Test with ctrl key pressed */ - ZeroMemory(KeyState, 256); - KeyState[VK_CONTROL] = 0xff; -// TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, hkl) == 1); -// TEST(Buffer[0] == 27); -// TEST(NtUserToUnicodeEx(8, 14, KeyState, Buffer, 10, 0, hkl) == 1); -// TEST(Buffer[0] == 127); - TEST(NtUserToUnicodeEx(81, 16, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 17); - TEST(NtUserToUnicodeEx(87, 17, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 23); - TEST(NtUserToUnicodeEx(69, 18, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 5); - TEST(NtUserToUnicodeEx(82, 19, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 18); - TEST(NtUserToUnicodeEx(84, 20, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 20); - TEST(NtUserToUnicodeEx(89, 21, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 25); - TEST(NtUserToUnicodeEx(85, 22, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 21); - TEST(NtUserToUnicodeEx(73, 23, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 9); - TEST(NtUserToUnicodeEx(79, 24, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 15); - TEST(NtUserToUnicodeEx(80, 25, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 16); - TEST(NtUserToUnicodeEx(219, 26, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 27); - TEST(NtUserToUnicodeEx(221, 27, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 29); - TEST(NtUserToUnicodeEx(13, 28, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 10); - TEST(NtUserToUnicodeEx(65, 30, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 1); - TEST(NtUserToUnicodeEx(83, 31, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 19); - TEST(NtUserToUnicodeEx(68, 32, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 4); - TEST(NtUserToUnicodeEx(70, 33, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 6); - TEST(NtUserToUnicodeEx(71, 34, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 7); - TEST(NtUserToUnicodeEx(72, 35, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 8); - TEST(NtUserToUnicodeEx(74, 36, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 10); - TEST(NtUserToUnicodeEx(75, 37, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 11); - TEST(NtUserToUnicodeEx(76, 38, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 12); - TEST(NtUserToUnicodeEx(220, 43, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 28); - TEST(NtUserToUnicodeEx(90, 44, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 26); - TEST(NtUserToUnicodeEx(88, 45, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 24); - TEST(NtUserToUnicodeEx(67, 46, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 3); - TEST(NtUserToUnicodeEx(86, 47, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 22); - TEST(NtUserToUnicodeEx(66, 48, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 2); - TEST(NtUserToUnicodeEx(78, 49, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 14); - TEST(NtUserToUnicodeEx(77, 50, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 13); -// TEST(NtUserToUnicodeEx(32, 57, KeyState, Buffer, 10, 0, hkl) == 1); -// TEST(Buffer[0] == 32); - TEST(NtUserToUnicodeEx(226, 86, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 28); - - /* Test with VK_CAPITAL key pressed */ - ZeroMemory(KeyState, 256); - KeyState[VK_CAPITAL] = 0xff; - TEST(NtUserToUnicodeEx(27, 1, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 27); - TEST(NtUserToUnicodeEx(49, 2, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '1'); - TEST(NtUserToUnicodeEx(50, 3, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '2'); - TEST(NtUserToUnicodeEx(51, 4, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '3'); - TEST(NtUserToUnicodeEx(52, 5, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '4'); - TEST(NtUserToUnicodeEx(53, 6, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '5'); - TEST(NtUserToUnicodeEx(54, 7, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '6'); - TEST(NtUserToUnicodeEx(55, 8, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '7'); - TEST(NtUserToUnicodeEx(56, 9, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '8'); - TEST(NtUserToUnicodeEx(57, 10, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '9'); - TEST(NtUserToUnicodeEx(48, 11, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '0'); - TEST(NtUserToUnicodeEx(189, 12, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '-'); - TEST(NtUserToUnicodeEx(187, 13, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '='); - TEST(NtUserToUnicodeEx(8, 14, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 8); - TEST(NtUserToUnicodeEx(9, 15, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 9); - TEST(NtUserToUnicodeEx(81, 16, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'Q'); - TEST(NtUserToUnicodeEx(87, 17, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'W'); - TEST(NtUserToUnicodeEx(69, 18, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'E'); - TEST(NtUserToUnicodeEx(82, 19, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'R'); - TEST(NtUserToUnicodeEx(84, 20, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'T'); - TEST(NtUserToUnicodeEx(89, 21, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'Y'); - TEST(NtUserToUnicodeEx(85, 22, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'U'); - TEST(NtUserToUnicodeEx(73, 23, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'I'); - TEST(NtUserToUnicodeEx(79, 24, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'O'); - TEST(NtUserToUnicodeEx(80, 25, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'P'); - TEST(NtUserToUnicodeEx(219, 26, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '['); - TEST(NtUserToUnicodeEx(221, 27, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ']'); - TEST(NtUserToUnicodeEx(13, 28, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 13); - TEST(NtUserToUnicodeEx(65, 30, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'A'); - TEST(NtUserToUnicodeEx(83, 31, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'S'); - TEST(NtUserToUnicodeEx(68, 32, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'D'); - TEST(NtUserToUnicodeEx(70, 33, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'F'); - TEST(NtUserToUnicodeEx(71, 34, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'G'); - TEST(NtUserToUnicodeEx(72, 35, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'H'); - TEST(NtUserToUnicodeEx(74, 36, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'J'); - TEST(NtUserToUnicodeEx(75, 37, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'K'); - TEST(NtUserToUnicodeEx(76, 38, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'L'); - TEST(NtUserToUnicodeEx(186, 39, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ';'); - TEST(NtUserToUnicodeEx(222, 40, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '\''); - TEST(NtUserToUnicodeEx(192, 41, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '`'); - TEST(NtUserToUnicodeEx(220, 43, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '\\'); - TEST(NtUserToUnicodeEx(90, 44, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'Z'); - TEST(NtUserToUnicodeEx(88, 45, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'X'); - TEST(NtUserToUnicodeEx(67, 46, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'C'); - TEST(NtUserToUnicodeEx(86, 47, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'V'); - TEST(NtUserToUnicodeEx(66, 48, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'B'); - TEST(NtUserToUnicodeEx(78, 49, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'N'); - TEST(NtUserToUnicodeEx(77, 50, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 'M'); - TEST(NtUserToUnicodeEx(188, 51, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ','); - TEST(NtUserToUnicodeEx(190, 52, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '.'); - TEST(NtUserToUnicodeEx(191, 53, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '/'); - TEST(NtUserToUnicodeEx(106, 55, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '*'); - TEST(NtUserToUnicodeEx(32, 57, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == ' '); - TEST(NtUserToUnicodeEx(109, 74, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '-'); - TEST(NtUserToUnicodeEx(107, 78, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '+'); - TEST(NtUserToUnicodeEx(226, 86, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == '\\'); - TEST(NtUserToUnicodeEx(9, 124, KeyState, Buffer, 10, 0, hkl) == 1); - TEST(Buffer[0] == 9); - - return APISTATUS_NORMAL; -} - diff --git a/rostests/apitests/w32knapi/osver.c b/rostests/apitests/w32knapi/osver.c deleted file mode 100644 index d9639b1f197..00000000000 --- a/rostests/apitests/w32knapi/osver.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "w32knapi.h" - -OSVERSIONINFOW g_OsVer; -UINT g_OsIdx; - -ASPI gNOPARAM_ROUTINE_CREATEMENU = {-1,-1,0x00,-1,0x00}; -ASPI gNOPARAM_ROUTINE_CREATEMENUPOPUP = {-1,-1,0x01,-1,0x01}; -ASPI gNOPARAM_ROUTINE_LOADUSERAPIHOOK = {-1,-1,0x1d,-1,0x0e}; -ASPI gONEPARAM_ROUTINE_MAPDEKTOPOBJECT = {-1,-1,0x30,-1,0x31}; -ASPI gONEPARAM_ROUTINE_SWAPMOUSEBUTTON = {-1,-1,0x42,-1,0x44}; - -ASPI gHWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW = {-1,-1,0x45,-1,0x46}; -ASPI gHWND_ROUTINE_GETWNDCONTEXTHLPID = {-1,-1,0x47,-1,0x48}; -ASPI gHWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID = {-1,-1,0x51,-1,0x52}; - -BOOL InitOsVersion() -{ - g_OsVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); - GetVersionExW((LPOSVERSIONINFOW)&g_OsVer); - if (g_OsVer.dwMajorVersion == 4) - { - g_OsIdx = 0; - return TRUE; - } - else if (g_OsVer.dwMajorVersion == 5) - { - if (g_OsVer.dwMinorVersion == 0) - { - g_OsIdx = 1; - return TRUE; - } - else if (g_OsVer.dwMinorVersion == 1) - { - g_OsIdx = 2; - return TRUE; - } - else if (g_OsVer.dwMinorVersion == 2) - { - g_OsIdx = 3; - return TRUE; - } - } - else if (g_OsVer.dwMajorVersion == 6) - { - g_OsIdx = 4; - return TRUE; - } - return FALSE; -} diff --git a/rostests/apitests/w32knapi/resource.h b/rostests/apitests/w32knapi/resource.h deleted file mode 100644 index b4e9b8b5159..00000000000 --- a/rostests/apitests/w32knapi/resource.h +++ /dev/null @@ -1,2 +0,0 @@ - -#define IDI_ICON 1000 diff --git a/rostests/apitests/w32knapi/resource/system.ico b/rostests/apitests/w32knapi/resource/system.ico deleted file mode 100644 index 2d8f32231876693215bd45c8337bda2995625556..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29926 zcmeI534CN#ndooQX{tJ@q*AG_bkgaU4x2awDk#ij?^eLkdE*Q`eY^n`6cHHlNee;; zR659#C_-FO0TE>p7ZeczK_m!@0*V`ph|+8#$kMDGpsViu|L5LYsdOj3BJaK5uMeEu z<(%`KZ~wk??nyd|nxaCq?Y5m1lFTuf_0Rh{9v;aL)6f8a1Q2nca?rUO_z=gV;VBm&4Fy2Mi$_5xPG(yo zu7frVj-oDcJd$+sH4TdwMKHlx$HUktrH;v#jN5%Y?(C(2;~0X6 z#W|roycea>@sYuVlmOB9P~!|B%YUPzb^b?#00Jpr^I!daz=Ai)h>7=TIAl7)F{7FK z2*!y6*)*iAg&6vWA|y&Wfnd;2H6jMr2?Cakjx5UiVsvCMza(QJ^p3!gyd${gCg_bc zhX}R?Oa|-t`!?{hj$!g9`I#GUfY8u@?o8bubQ-$VZ}W@MntDkn48Dll#_Nh=@|<1A z)93MA@;<%ZI-aXKF1K{XxYwqkXz3DsxHBx6xY87!;~}oJhbu4RF`mrl8x zxn;?~_T(Bzj4uirc)*E=W{jot_%h%T<_Dh) zkL;Sv4_=H5bY<5CjDy}Gp5qgj&R80Ay>(gfNw0C8Um4$4zRs7A#+d=?LTVOgB4Xs! zWr(0c3vne}_{r@{8D|!+4aIW0-IfL;umBk>NdhApZfU?hScia2^4B&yXQi z$9uGV2=}kLk&-ysh&mJi*c=mL)3_R14p1{W4{<+r8A@cpVn|4;-|j5wuHJMik6nCGpOj0 z^~CF`W7O+-1}Wd!{s1+MVVr!@7T!g5of8Uck$TZKQu{dm_~WCGee7e=$tRy2ef;Ae zk4`)7wCK~H{&e*D&woDp(wDvzoqhJ%(O19v)#!o?E{MMIjc-KX`ObHu?|tuk(GPy` zgXo7p{9$y>HP=MfU3Xpd)1Uq{`o%AP5&iO)zl?tKo8LsY-F92_hd=xw`qQ8O6y1C8 zz0rdYJ{Udx@Wat#k3AMW`Q($)v(G*oJ^%dkb(A*VY~;X34!nFE&{zNeQJR`5Eo+Z! zuF~CINxj=zjB0Kx7mJl?v*J}CG!;tp&*660t~AlTSe~`|37RLGo6E&Qu~e8Kc;YUb zu#oF5r32thrC2PKN_7r3Hw;Y&g6 z4xB8PB%n|#SBfpU=C$B zV+Ol-S1ODM0~k>(J5{MtV2^H6$$?P--_3|@hGKyc_FoAdMivY6oFN%fpQ4nESeaaB zYVM=I1G)oF^(jEA+*X)`OL%CT=LG2#Oe0napNdm~Z|UvN2F#n+T`HEk=XGafmsX)R zirVZRX6Uc9w3VXLtX!q9lJaR)U2UuM_a`Iziy5nPrM{Gka%1EV*tg81za#n^+FB~T zi73j&#sP&{&9jOFN&o(Nje^hhrLwCu7fLCMnv0d*{{Df1WI%s~MRC2%>h5(wxzt@Q zw#{m37Sk4ys1F#JB=>TW3Bm{ladqyTY!R6-#XuvXQB;`Ms2+h$El4RD0ZIdt;YY=J z2pbJd_!Q*U(rxz?r~ZLbMwdjiRp!-Iwo zL)+3RiW3ZKEA=Nz-dlk;lXR|7&T#6Vm0{F|jwA}$S0F{4TxMlt5A+v;LX=ucDu^oE z*Eiv7vQdytNr>nx&dRlw`rvUopfm}WWXLQile3v9l(#rKLn9Be37WO`R1}IX)elFM zCis%|jtYgo?l2&kA{#JIZJ7#wt{0!5O_AV~PQifgRS;?^chkQkPfcmO@mR zr5t)!>W9dFVE+Yle-Z(t!v|SKAJqZ%+oej{VsFnPb4t?eJ z*7iyTEQCJ+KC1MY!1jeP5DOREyC%?&^8NjE=ubg*l5~Sb`qbXa0w4(voq2EvM2b<= z6`WSh;qIicJ?(8&|dMO zGtVS_?NZ&^Ga13OZx?fGIPx3Q<{y*`3 zDM4;w<0`5lPdV|#6T?3GCqMbg`ab%ZXPz0Eqnvy0xnUpuo8SCq^it+1tMYK;n~faU z$bpxW18bS5w6rvY{096Ar72gyGYW;3R=Tr7zot^5gAaZz>@yg%duF$^bja0-P|4|_pruq{+(gHJ0>0GSuhn^#FDD~K0`ox7gUP=6ora;K}*QF8kvfjV2f zT2qFEAw4#95Xr+$0+n8jsLbvGv7WvO?n#%hC^Tf-Xi;lrb|o}`7Y)fw&OCc|hrH|S zi~D9XEMr8goQ1re9zYlRW+#*KGt5*-F{y(|n>#9%2~6rkxM^+80P~;@y?o!#(;(ZJ z>Ndo&>^rb)Y`+12?Q36)F1+x<$k_GmZ+|?swrE z@LhM^75(|of1dUma3eD|-f!f#YGOUrAiuc2;3{RgTvN!x#;_EM!q z`6wIZygqa|#J=ML1J zsp7pS^-a`&*?H%k&$-}&3*w*s>}S>QfB*Y2wF)gYWx>YC+v)RW>R!~>Q>FW#sLD=x zG}53)m3Q(`-CbK6Ij?*ak2g~P2lZd~-h1zB$PMFbue~Jyv(5VIftX?s@2;hyLM5Kl)M3*~Y4LKtuJ$8*i*ClU;Y+^=$fx_Zz6< zz7tg)(jL@FbyM8snffFD-#+`AY9C5@Er+(^FpNjwTm%qfExs5qzTHR%rU5=)4HdQ+0)n;37 zz4iO{+i$-ge)OXseTMzBn6*RD8~M+9Q)LnK>6l}Vd2XM5_PL1dQE?k+sD0d*kk64P zope%-bxHh*PkbVN_q*TyAG}|$0v<=R28uba8gqWN%K6opv#hnxeeQGdd*A!sF=Vmj zPCM=NA$axhXFvPdfG=lXYj@sxXUw(A`Pg8;>JPlH@-9XWwTmvgDAvC&TD0hnZMNBF ze~@c!X=#~r&_M@%-!s_4&~NFp^u5rdzO7T?Tj_4-LHzjRj|bl0bI(2E9(#S{kw;?r z^WhJFIM}3kL0^2w9e2bx-+XhBllp)4)mO(?UU_BctL~^vS6p$0ektaBZ+!XXm&fdJ z#)lnt*p>L!2hKb1yja>f2OP#?Gx06A+!7oqyaNm9RRmBk+s@8`d zddO?+mGx!dEoYB|o!)T64e?KY@{=n5r<&QZvXExj95jZ@sk& zzpBs?eE;>=Utg7e&R2_1Reno{`lKwdi(u2n31|+wMxQD&t12gaZfO6=M?P}%y5gSo zC+6&<4nFnNQ}R5%|Ni@>qY6!d|MDK0hd3)8zy9^FgDh^k>883Y^gTcR@sF$O6L?8S zz)QcRZF^NN>X`Idr5jzWp#v|%M{Rq(3$}39`RAV>KmGL6u{I11p{h^H;O@Kcjyb1p zo)Bwy>Vfe}TfmP7eMVP;|B(iDL;j}v6#SF&&{s)=?}ek!CWm^@dLy0=#8+%`(Kej zHxzfrbFJG=*2cM#! z(Fdtt*iek!$Jn)TAjT%N?MeEi3~XnAO}{y|p~%Dg{mwe;toVf&UZ@(!)E_G`AlS41 zQ+<*?`>69LoN$73--z806GM+84xWD8amU?eJVg#Q$Lrgbg*jeo+xi`KKiIeSWBkGI zZ?+*cVES8XP$YcD*n{!vSrJv*g{qOl?Sq^9eeDt_BZEUV3V_Jo%AtwgnUC?mgluvO}(gUkK#`ab7uG}2YiygQJp`x z4sb1Q;L$IQ7uvIa7Q3mYu|hv94cdx!QZsJrPhI~=H@ww0{*X;WjF@AL73WMh^fllq z-obB5gZ|SPX4RM2uHKt>VViHw;H}LS|F}fF^kMKhCie)uOLGrxJLr>oq~Db`^F(8# zSLE$lIuztFA72}A(wAtD+86o}bVYo%-;@URMOg%WQbu3+!WZ<_uA|nvU|R=&>s#Ln zc5L2}<{m*7Y3`v7)MJG?U6yx1YYq85lT8M!UgaV`jWxz3*DLxKeVsBf|B()8kdA=A z&y?yp=bU3c@A`7B3;aLYb+LYcyu0cig*I*6Hg8LFkC4};vBH>bZmPVrx5u){(4BT{ zBg7wlqPmmmQR?%XklKU2`1c?`oU}`@0C4+|K*uu8riWxfC#J>bmhtf1~Z{gED=>W{hh!{On_=pMH9C zBh2aUi34+)M|-Lnzlqyba}RP^b$(yj+rNh-#?lTKDyk;9RG}5 zjyUS5qsEnix+JgECw*t5KB+^lLC}dar-Rw}9zOldxT_7BcbE%GgLt~GkOuvdx};vy zU!U_w;9rEUFQ)DVZthF0u_$N#qxP&{HUE(g^-FzHHrlntc!3r_T)4^Mt_t5%3U9YP*!q>LVL6wJc$@EDY^hL^-`1&C8 z4l;H}>K53>8<6*@o>g5^7R(cThA|1h>>kGk73O_Z+mcW6$9d$P zb88b>tk9ki!k*K!Vw;{1b=|M^vUi`Z*W0x+tG=d zeomjjHTVnjedW%)!M4#S=?HNx^-uNOgIJ->hd7ebAfJN{ioaDk=oef+qC3<2mvtow z8@||BsovTPD*>V&$XZ8zi|)s%*M?qRz$C=X?k>5}hVuVHt~ zupjsT*Q?-T%fNV6y!FM#KV!T1<}3O+_fGWL=JNUt{fBz2K7dcK3w1*M(MM&uhjHBZ z$|=KNzQg}8PFl_H@VD!&N9fJfu1Dpw>kMPLd5Q5`-BJJ5S?}%Re%!j~6YI^mTCIk> zS2_Yz}{^|_l!#auhrhmVhwerr!cw@Kv56^?$*cYE# zlRoD08_9YV;^zm=L9{33fGlHRUcfrmZyWW3jqixe&iK%WKJ>WqP><9nbK5v@{fMJZFRt)?KJI9-kXO> zgECVujK_@MeY)}Fl@)Te8|=sRd2ru(y1wiB9{hKMZ+_QYZ6SYq2j{$k{+kD@zxpR^ zvql^jf4}dpwxCysqnCbXd)W*6wzWBrI-|W9@6#%| zyiossvmW4H_95VTr|Um$K>NiOYv!Nm;MZSvWY%Ls?Bvtf-_!VynzG zxYZ7c5wNa?dkK94{++mMfm-@8x+AV1T-i+7#}f zt&@lKFHjlIS$O`y@80EniQn>tXH1r*+1ZNi`5ymS*ZZ!kIXfKhx#yl|(e7CV ztNpg3Zc3d?6^`(PyQU%!#k-p-O`eAk-VW4Vse4fW`7LjG%T@X!_eP_9p6T3+GWza-Y~-jr{X*&SdP(fUeoI zXTK4?e~Z13C(TLaz3T|~=dB<3zz6QwVTT=t=&Qa|(9KObPw^A+Bp-d^o$q|-8uJu< z^t=47X3px`$voZtLe8k&B&~jbv&wU0Px_rRe2a5m(s%3+Jhj_yyM37JGWYj9H{jkS zx#fepDb_e<9p|^J9L(pn0ly`H@nce=Q!-EZM*m39)WAsbRQ((A&<#5 zkDCfc_U<#E`OIVPd8u>KEiaUZ&)T2+mGJ8>Y~fPo)laz|zrj5i>6Bjg!rW)c_QvG7 zdt}OyvHJ9B3p8G!-D)55K^)XgWz+c0P5q?r8wEt{xWRR>c&lrU7Z2wYFZm!pq=UZ3 z;b{vn&lQ&XlYOtz_qcw}W701U@_Z&9w@P!y2YF#duh;6V9y(bD-{sP+E~~fRt4qdU?P_ISD38on zsDH{szKDms5Knmt4ky)#oaTl;d%GWJfAb4@Z!Up6eyxudm(0GzNu7|_(r?Vr*5UQT z#(we0WTJea?Y?QIo%9<1A89@%t>{k8oX`%yosV9gjt_juHsv8tkj8_EWDcmKfeYpcQb!i zW7~$@18-Av8}lP|R2eYOw>AXkx{l@BV@*Aje(```C#)-s4e5`Zuk{?46+ieqJbBCd zz>CM4V)h&su>ZnFNR-QJZcepu;llH1 zbIlj<-fp|?j=)d-9z3Lf%0e!5gmy&?55IHpp7*@xO7#6M{ju=~{5=z1BL@g`kXygV zJSQD+zyaUR`mlz*4c|2-fAFI_n4jYtYvw2BD%!Fi4 zcGi8@1M@}aa*g5I#dBz`+sVhCSsi@VSIyA7jF??BPcT;^R*R>&Hm}^jL!Y1a|pdoyBcRdWgtHes@!AD)Am_UK0vPa1IDd_7k^{_ zM(GeQ^8@*$ok7D_;pvv(RHh!tI_x?1%r@sRr_#QdS3fjuq5a>bRlb_*qeJ0LglhoT z;L1?FQpePVbWIR+7`a|GE#S0)HO`jW7yB#WObmF{oI`#g_bTV}f)1z)=&*1->r!*Q zf`2=1P4HQV-(}t)4d&L)BQ4@7-^d&5=Q`w%d8G50%gP^kzV&o-F#ku?XLUfm(a$Jv z`6Pbw8lD8(Q0~H(U-C})>Knh;@Zfat*-PofJ|5J^;0K;Wo(rjal3!klFOUw;9|m5q zM}9XlKbrQ}0`pJiqOOI>4c|E(eBaaF2_0u~owQ#G->%W0QiK1b&!l#2@Kfmc+g1mA zb#074P5Ah=8Zm6W&Nr+MK74qaYk&7j;n&#e`Zl)JNCEu!MwSxttt;P$e|v=O^`$+z zXh;w04m{QSq|&)9-$ezFt12{E4ErCrRk-w)Jr_u3}Om}kq3O*h^2Ke%pAb^MNe zi+N7pzsDYXoWryE($@Tn=k{F9$(pG3f)0PgbsYZdx9pXlOb+ok?aFl&ad@0>59e>S z)m8`Llb^?bUsoTP-ms6dpS~*fTS2GIDU5^0aATBl(JQ|4kpmArP+m+b|101IvTU}?n2Tktf z_pN$i?%(NqvTp_Egz)h~zO8J7?q3XD_c*t{M;Oq!Pd1ouCLQD%E6mBvnOtj<3%h>( zKUp8*ahJX`+v5O-7x4{4&~Z5YyHD84MxTc--#;7Ictz&7XzS)^`aON2MY{CC@)lm! z8pmY!%=5pEt~4JA(df*5!Vw1X_9^mL zWpuN!VAqecagA5T)z^IdK5*F_L|q^^s>>U>)#chacB*^MYCq||{o#inzDhjL`Y%I^ h$FS%ztSP%L^_ki)`6J}=Gsa{nk_5B)cP{tI-%*slNp diff --git a/rostests/apitests/w32knapi/testlist.c b/rostests/apitests/w32knapi/testlist.c deleted file mode 100644 index 987f90366ec..00000000000 --- a/rostests/apitests/w32knapi/testlist.c +++ /dev/null @@ -1,102 +0,0 @@ -#include "w32knapi.h" - -/* include the tests */ - -#include "ntdd/NtGdiDdCreateDirectDrawObject.c" -#include "ntdd/NtGdiDdDeleteDirectDrawObject.c" -#include "ntdd/NtGdiDdQueryDirectDrawObject.c" - -#include "ntgdi/NtGdiArcInternal.c" -#include "ntgdi/NtGdiBitBlt.c" -#include "ntgdi/NtGdiCreateBitmap.c" -#include "ntgdi/NtGdiCreateCompatibleBitmap.c" -#include "ntgdi/NtGdiDoPalette.c" -#include "ntgdi/NtGdiEngCreatePalette.c" -//#include "ntgdi/NtGdiEnumFontChunk.c" -#include "ntgdi/NtGdiEnumFontOpen.c" -#include "ntgdi/NtGdiGetBitmapBits.c" -#include "ntgdi/NtGdiGetFontResourceInfoInternalW.c" -#include "ntgdi/NtGdiGetRandomRgn.c" -#include "ntgdi/NtGdiSelectBitmap.c" -#include "ntgdi/NtGdiSelectBrush.c" -#include "ntgdi/NtGdiSelectFont.c" -#include "ntgdi/NtGdiSelectPen.c" -#include "ntgdi/NtGdiSetBitmapBits.c" -#include "ntgdi/NtGdiSetDIBitsToDeviceInternal.c" -//#include "ntgdi/NtGdiSTROBJ_vEnumStart.c" -#include "ntgdi/NtGdiGetDIBits.c" -#include "ntgdi/NtGdiGetStockObject.c" - -#include "ntuser/NtUserCallHwnd.c" -#include "ntuser/NtUserCallHwndLock.c" -#include "ntuser/NtUserCallHwndOpt.c" -#include "ntuser/NtUserCallHwndParam.c" -#include "ntuser/NtUserCallHwndParamLock.c" -#include "ntuser/NtUserCallNoParam.c" -#include "ntuser/NtUserCallOneParam.c" -#include "ntuser/NtUserCountClipboardFormats.c" -//#include "ntuser/NtUserCreateWindowEx.c" -#include "ntuser/NtUserEnumDisplaySettings.c" -#include "ntuser/NtUserFindExistingCursorIcon.c" -#include "ntuser/NtUserRedrawWindow.c" -#include "ntuser/NtUserScrollDC.c" -#include "ntuser/NtUserSystemParametersInfo.c" -#include "ntuser/NtUserToUnicodeEx.c" -#include "ntuser/NtUserGetTitleBarInfo.c" - -/* The List of tests */ -TESTENTRY TestList[] = -{ - /* DirectDraw */ - { L"NtGdiDdCreateDirectDrawObject", Test_NtGdiDdCreateDirectDrawObject }, - { L"NtGdiDdQueryDirectDrawObject", Test_NtGdiDdQueryDirectDrawObject }, - { L"NtGdiDdDeleteDirectDrawObject", Test_NtGdiDdDeleteDirectDrawObject }, - - /* ntgdi */ - { L"NtGdiArcInternal", Test_NtGdiArcInternal }, - { L"NtGdiBitBlt", Test_NtGdiBitBlt }, - { L"NtGdiCreateBitmap", Test_NtGdiCreateBitmap }, - { L"NtGdiCreateCompatibleBitmap", Test_NtGdiCreateCompatibleBitmap }, - { L"NtGdiDoPalette", Test_NtGdiDoPalette }, - { L"NtGdiEngCreatePalette", Test_NtGdiEngCreatePalette }, -// { L"NtGdiEnumFontChunk", Test_NtGdiEnumFontChunk }, - { L"NtGdiEnumFontOpen", Test_NtGdiEnumFontOpen }, - { L"NtGdiGetBitmapBits", Test_NtGdiGetBitmapBits }, - { L"NtGdiGetFontResourceInfoInternalW", Test_NtGdiGetFontResourceInfoInternalW }, - { L"NtGdiGetRandomRgn", Test_NtGdiGetRandomRgn }, - { L"NtGdiSetBitmapBits", Test_NtGdiSetBitmapBits }, - { L"NtGdiSetDIBitsToDeviceInternal", Test_NtGdiSetDIBitsToDeviceInternal }, - { L"NtGdiSelectBitmap", Test_NtGdiSelectBitmap }, - { L"NtGdiSelectBrush", Test_NtGdiSelectBrush }, - { L"NtGdiSelectFont", Test_NtGdiSelectFont }, - { L"NtGdiSelectPen", Test_NtGdiSelectPen }, -// { L"NtGdiSTROBJ_vEnumStart", Test_NtGdiSTROBJ_vEnumStart }, - { L"NtGdiGetDIBitsInternal", Test_NtGdiGetDIBitsInternal }, - { L"NtGdiGetStockObject", Test_NtGdiGetStockObject }, - - /* ntuser */ - { L"NtUserCallHwnd", Test_NtUserCallHwnd }, - { L"NtUserCallHwndLock", Test_NtUserCallHwndLock }, - { L"NtUserCallHwndOpt", Test_NtUserCallHwndOpt }, - { L"NtUserCallHwndParam", Test_NtUserCallHwndParam }, - { L"NtUserCallHwndParamLock", Test_NtUserCallHwndParamLock }, - { L"NtUserCallNoParam", Test_NtUserCallNoParam }, - { L"NtUserCallOneParam", Test_NtUserCallOneParam }, - { L"NtUserCountClipboardFormats", Test_NtUserCountClipboardFormats }, -// { L"NtUserCreateWindowEx", Test_NtUserCreateWindowEx }, - { L"NtUserEnumDisplaySettings", TEST_NtUserEnumDisplaySettings }, - { L"NtUserFindExistingCursorIcon", Test_NtUserFindExistingCursoricon }, - { L"NtUserRedrawWindow", Test_NtUserRedrawWindow }, - { L"NtUserScrollDC", Test_NtUserScrollDC }, - { L"NtUserSystemParametersInfo", Test_NtUserSystemParametersInfo }, - { L"NtUserToUnicodeEx", Test_NtUserToUnicodeEx }, - { L"NtUserGetTitleBarInfo", Test_NtUserGetTitleBarInfo } -}; - -/* The function that gives us the number of tests */ -INT NumTests(void) -{ - return sizeof(TestList) / sizeof(TESTENTRY); -} - - diff --git a/rostests/apitests/w32knapi/w32knapi.c b/rostests/apitests/w32knapi/w32knapi.c deleted file mode 100644 index fa20eefcde7..00000000000 --- a/rostests/apitests/w32knapi/w32knapi.c +++ /dev/null @@ -1,98 +0,0 @@ -#include "w32knapi.h" - -HINSTANCE g_hInstance; -HMODULE g_hModule = NULL; -PGDI_TABLE_ENTRY GdiHandleTable; - -static -PGDI_TABLE_ENTRY -MyGdiQueryTable() -{ - PTEB pTeb = NtCurrentTeb(); - PPEB pPeb = pTeb->ProcessEnvironmentBlock; - return pPeb->GdiSharedHandleTable; -} - -static DWORD STDCALL -IntSyscall(FARPROC proc, UINT cParams, PVOID pFirstParam) -{ - DWORD ret; - - asm volatile - ( - "pushfl;" // Save flags - "movl %%ecx, %%eax;" - "shl $2, %%eax;" // Calculate param size - "subl %%eax, %%esp;" // Calculate new stack pos - "movl %%esp, %%edi;" // Destination is stackpointer - "cld;" // Clear direction flag - "rep movsd;" // Copy params to the stack - "call *%%edx;" // Call function - "popfl;" // Restore flags - : "=a" (ret) - : "S" (pFirstParam), "c" (cParams), "d"(proc) - : "%edi" - ); - - return ret; -} - -DWORD -Syscall(LPWSTR pszFunction, int cParams, void* pParams) -{ - char szFunctionName[MAX_PATH]; - - sprintf(szFunctionName, "%ls", pszFunction); - FARPROC proc = (FARPROC)GetProcAddress(g_hModule, szFunctionName); - if (!proc) - { - printf("Couldn't find proc: %s\n", szFunctionName); - return FALSE; - } - - return IntSyscall(proc, cParams, pParams); -} - -BOOL -IsFunctionPresent(LPWSTR lpszFunction) -{ - char szFunctionName[MAX_PATH]; - sprintf(szFunctionName, "%ls", lpszFunction); - return (GetProcAddress(g_hModule, szFunctionName) != NULL); -} - -int APIENTRY -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nCmdShow) -{ - g_hInstance = hInstance; - - printf("Win32k native API test\n"); - - /* Convert to gui thread */ - // IsGUIThread(TRUE); <- does not exists on win2k - - InitOsVersion(); - printf("g_OsIdx = %d\n", g_OsIdx); - - g_hModule = LoadLibraryW(L"w32kdll.dll"); - if (!g_hModule) - { - printf("w32kdll.dll not found!\n"); - return -1; - } - - GdiHandleTable = MyGdiQueryTable(); - if(!GdiHandleTable) - { - FreeLibrary(g_hModule); - printf("GdiHandleTable not found!\n"); - return -1; - } - - printf("\n"); - - return TestMain(L"w32knapi", L"win32k.sys Nt-Api"); -} diff --git a/rostests/apitests/w32knapi/w32knapi.h b/rostests/apitests/w32knapi/w32knapi.h deleted file mode 100644 index 4463015e162..00000000000 --- a/rostests/apitests/w32knapi/w32knapi.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef _W32KNAPI_H -#define _W32KNAPI_H - -/* SDK/NDK Headers */ -#define NTOS_MODE_USER -#define WIN32_NO_STATUS -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Public Win32K Headers */ -#include -#include -#include -#include -#include -#include - -#include "../apitest.h" -#include "resource.h" - -typedef struct -{ - LPWSTR lpszFunction; - INT nSyscallNum; - INT nParams; -} SYCALL_ENTRY, *PSYSCALL_ENTRY; - -extern HINSTANCE g_hInstance; -extern HMODULE g_hModule; -extern PGDI_TABLE_ENTRY GdiHandleTable; - -DWORD Syscall(LPWSTR lpszFunction, int cParams, void* pParams); -BOOL InitOsVersion(); -extern UINT g_OsIdx; - -typedef UINT ASPI[5]; -extern ASPI gNOPARAM_ROUTINE_CREATEMENU; -extern ASPI gNOPARAM_ROUTINE_CREATEMENUPOPUP; -extern ASPI gNOPARAM_ROUTINE_LOADUSERAPIHOOK; -extern ASPI gONEPARAM_ROUTINE_MAPDEKTOPOBJECT; -extern ASPI gONEPARAM_ROUTINE_SWAPMOUSEBUTTON; -extern ASPI gHWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW; -extern ASPI gHWND_ROUTINE_GETWNDCONTEXTHLPID; -extern ASPI gHWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID; - -#define _NOPARAM_ROUTINE_CREATEMENU gNOPARAM_ROUTINE_CREATEMENU[g_OsIdx] -#define _NOPARAM_ROUTINE_CREATEMENUPOPUP gNOPARAM_ROUTINE_CREATEMENUPOPUP[g_OsIdx] -#define _NOPARAM_ROUTINE_LOADUSERAPIHOOK gNOPARAM_ROUTINE_LOADUSERAPIHOOK[g_OsIdx] -#define _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT gONEPARAM_ROUTINE_MAPDEKTOPOBJECT[g_OsIdx] -#define _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON gONEPARAM_ROUTINE_SWAPMOUSEBUTTON[g_OsIdx] -#define _HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW gHWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW[g_OsIdx] -#define _HWND_ROUTINE_GETWNDCONTEXTHLPID gHWND_ROUTINE_GETWNDCONTEXTHLPID[g_OsIdx] -#define _HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID gHWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID[g_OsIdx] - - - -#endif /* _W32KNAPI_H */ diff --git a/rostests/apitests/w32knapi/w32knapi.rbuild b/rostests/apitests/w32knapi/w32knapi.rbuild deleted file mode 100644 index 948fedc33d2..00000000000 --- a/rostests/apitests/w32knapi/w32knapi.rbuild +++ /dev/null @@ -1,19 +0,0 @@ - - . - - 0x0501 - 0x501 - apitest - ntdll - kernel32 - user32 - gdi32 - shell32 - advapi32 - w32kdll - dbghelp - w32knapi.c - osver.c - testlist.c - w32knapi.rc - diff --git a/rostests/apitests/w32knapi/w32knapi.rc b/rostests/apitests/w32knapi/w32knapi.rc deleted file mode 100644 index 4e631d954c6..00000000000 --- a/rostests/apitests/w32knapi/w32knapi.rc +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include "resource.h" - -IDI_ICON ICON "resource/system.ico" - diff --git a/rostests/apitests/ws2_32/helpers.c b/rostests/apitests/ws2_32/helpers.c deleted file mode 100644 index 9033aed184f..00000000000 --- a/rostests/apitests/ws2_32/helpers.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * PROJECT: ws2_32.dll API tests - * LICENSE: GPLv2 or any later version - * FILE: apitests/ws2_32/helpers.c - * PURPOSE: Helper functions for the socket tests - * COPYRIGHT: Copyright 2008 Colin Finck - */ - -#include "ws2_32.h" - -int CreateSocket(PTESTINFO pti, SOCKET* psck) -{ - /* Create the socket */ - *psck = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - TEST(*psck != INVALID_SOCKET); - - if(*psck == INVALID_SOCKET) - { - printf("Winsock error code is %u\n", WSAGetLastError()); - WSACleanup(); - return APISTATUS_ASSERTION_FAILED; - } - - return APISTATUS_NORMAL; -} - -int ConnectToReactOSWebsite(PTESTINFO pti, SOCKET sck) -{ - int iResult; - struct hostent* host; - struct sockaddr_in sa; - - /* Connect to "www.reactos.org" */ - host = gethostbyname("www.reactos.org"); - - sa.sin_family = AF_INET; - sa.sin_addr.s_addr = *(u_long*)host->h_addr_list[0]; - sa.sin_port = htons(80); - - SCKTEST(connect(sck, (struct sockaddr *)&sa, sizeof(sa))); - - return APISTATUS_NORMAL; -} - -int GetRequestAndWait(PTESTINFO pti, SOCKET sck) -{ - const char szGetRequest[] = "GET / HTTP/1.0\r\n\r\n"; - int iResult; - struct fd_set readable; - - /* Send the GET request */ - SCKTEST(send(sck, szGetRequest, strlen(szGetRequest), 0)); - TEST(iResult == strlen(szGetRequest)); - - /* Shutdown the SEND connection */ - SCKTEST(shutdown(sck, SD_SEND)); - - /* Wait until we're ready to read */ - FD_ZERO(&readable); - FD_SET(sck, &readable); - - SCKTEST(select(0, &readable, NULL, NULL, NULL)); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/ws2_32/testlist.c b/rostests/apitests/ws2_32/testlist.c deleted file mode 100644 index fa579807f3f..00000000000 --- a/rostests/apitests/ws2_32/testlist.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * PROJECT: ws2_32.dll API tests - * LICENSE: GPLv2 or any later version - * FILE: apitests/ws2_32/testlist.c - * PURPOSE: Test list file - * COPYRIGHT: Copyright 2008 Colin Finck - */ - -#ifndef _WS2_32_TESTLIST_H -#define _WS2_32_TESTLIST_H - -#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) - -#include "ws2_32.h" - -/* include the tests */ -#include "tests/ioctlsocket.c" -#include "tests/recv.c" - -/* The List of tests */ -TESTENTRY TestList[] = -{ - { L"ioctlsocket", Test_ioctlsocket }, - { L"recv", Test_recv } -}; - -/* The function that gives us the number of tests */ -INT NumTests(void) -{ - return ARRAY_SIZE(TestList); -} - -#endif diff --git a/rostests/apitests/ws2_32/tests/ioctlsocket.c b/rostests/apitests/ws2_32/tests/ioctlsocket.c deleted file mode 100644 index 2d291f7eb4e..00000000000 --- a/rostests/apitests/ws2_32/tests/ioctlsocket.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * PROJECT: ws2_32.dll API tests - * LICENSE: GPLv2 or any later version - * FILE: apitests/ws2_32/tests/ioctlsocket.c - * PURPOSE: Tests for the ioctlsocket function - * COPYRIGHT: Copyright 2008 Colin Finck - */ - -#include "../ws2_32.h" - -/* For valid test results, the ReactOS Website needs to return at least 2 bytes on a "GET / HTTP/1.0" request. */ -INT -Test_ioctlsocket(PTESTINFO pti) -{ - LPSTR pszBuf; - int iResult; - SOCKET sck; - ULONG BytesAvailable; - ULONG BytesToRead; - WSADATA wdata; - - /* Start up Winsock */ - TEST(WSAStartup(MAKEWORD(2, 2), &wdata) == 0); - - /* If we call ioctlsocket without a socket, it should return with an error and do nothing. */ - BytesAvailable = 0xdeadbeef; - TEST(ioctlsocket(0, FIONREAD, &BytesAvailable) == SOCKET_ERROR); - TEST(BytesAvailable == 0xdeadbeef); - - /* Create the socket */ - iResult = CreateSocket(pti, &sck); - if(iResult != APISTATUS_NORMAL) - return iResult; - - /* Now we can pass at least a socket, but we have no connection yet. The function should return 0. */ - BytesAvailable = 0xdeadbeef; - TEST(ioctlsocket(sck, FIONREAD, &BytesAvailable) == 0); - TEST(BytesAvailable == 0); - - /* Connect to "www.reactos.org" */ - iResult = ConnectToReactOSWebsite(pti, sck); - if(iResult != APISTATUS_NORMAL) - return iResult; - - /* Even with a connection, there shouldn't be any bytes available. */ - TEST(ioctlsocket(sck, FIONREAD, &BytesAvailable) == 0); - TEST(BytesAvailable == 0); - - /* Send the GET request */ - iResult = GetRequestAndWait(pti, sck); - if(iResult != APISTATUS_NORMAL) - return iResult; - - /* Try ioctlsocket with FIONREAD. There should be bytes available now. */ - SCKTEST(ioctlsocket(sck, FIONREAD, &BytesAvailable)); - TEST(BytesAvailable != 0); - - /* Get half of the data */ - BytesToRead = BytesAvailable / 2; - pszBuf = (LPSTR) HeapAlloc(g_hHeap, 0, BytesToRead); - SCKTEST(recv(sck, pszBuf, BytesToRead, 0)); - HeapFree(g_hHeap, 0, pszBuf); - - BytesToRead = BytesAvailable - BytesToRead; - - /* Now try ioctlsocket again. BytesAvailable should be at the value saved in BytesToRead now. */ - SCKTEST(ioctlsocket(sck, FIONREAD, &BytesAvailable)); - TEST(BytesAvailable == BytesToRead); - - /* Read those bytes */ - pszBuf = (LPSTR) HeapAlloc(g_hHeap, 0, BytesToRead); - SCKTEST(recv(sck, pszBuf, BytesToRead, 0)); - HeapFree(g_hHeap, 0, pszBuf); - - /* Try it for the last time. BytesAvailable should be at 0 now. */ - SCKTEST(ioctlsocket(sck, FIONREAD, &BytesAvailable)); - TEST(BytesAvailable == 0); - - closesocket(sck); - WSACleanup(); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/ws2_32/tests/recv.c b/rostests/apitests/ws2_32/tests/recv.c deleted file mode 100644 index 4df6c0ecabd..00000000000 --- a/rostests/apitests/ws2_32/tests/recv.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * PROJECT: ws2_32.dll API tests - * LICENSE: GPLv2 or any later version - * FILE: apitests/ws2_32/tests/recv.c - * PURPOSE: Tests for the recv function - * COPYRIGHT: Copyright 2008 Colin Finck - */ - -#include "../ws2_32.h" - -#define RECV_BUF 4 - -/* For valid test results, the ReactOS Website needs to return at least 8 bytes on a "GET / HTTP/1.0" request. - Also the first 4 bytes and the last 4 bytes need to be different. - Both factors usually apply on standard HTTP responses. */ -INT -Test_recv(PTESTINFO pti) -{ - const char szDummyBytes[RECV_BUF] = {0xFF, 0x00, 0xFF, 0x00}; - - char szBuf1[RECV_BUF]; - char szBuf2[RECV_BUF]; - int iResult; - SOCKET sck; - WSADATA wdata; - - /* Start up Winsock */ - TEST(WSAStartup(MAKEWORD(2, 2), &wdata) == 0); - - /* If we call recv without a socket, it should return with an error and do nothing. */ - memcpy(szBuf1, szDummyBytes, RECV_BUF); - TEST(recv(0, szBuf1, RECV_BUF, 0) == SOCKET_ERROR); - TEST(!memcmp(szBuf1, szDummyBytes, RECV_BUF)); - - /* Create the socket */ - iResult = CreateSocket(pti, &sck); - if(iResult != APISTATUS_NORMAL) - return iResult; - - /* Now we can pass at least a socket, but we have no connection yet. Should return with an error and do nothing. */ - memcpy(szBuf1, szDummyBytes, RECV_BUF); - TEST(recv(sck, szBuf1, RECV_BUF, 0) == SOCKET_ERROR); - TEST(!memcmp(szBuf1, szDummyBytes, RECV_BUF)); - - /* Connect to "www.reactos.org" */ - iResult = ConnectToReactOSWebsite(pti, sck); - if(iResult != APISTATUS_NORMAL) - return iResult; - - /* Send the GET request */ - iResult = GetRequestAndWait(pti, sck); - if(iResult != APISTATUS_NORMAL) - return iResult; - - /* Receive the data. - MSG_PEEK will not change the internal number of bytes read, so that a subsequent request should return the same bytes again. */ - SCKTEST(recv(sck, szBuf1, RECV_BUF, MSG_PEEK)); - SCKTEST(recv(sck, szBuf2, RECV_BUF, 0)); - TEST(!memcmp(szBuf1, szBuf2, RECV_BUF)); - - /* The last recv() call moved the internal file pointer, so that the next request should return different data. */ - SCKTEST(recv(sck, szBuf1, RECV_BUF, 0)); - TEST(memcmp(szBuf1, szBuf2, RECV_BUF)); - - closesocket(sck); - WSACleanup(); - - return APISTATUS_NORMAL; -} diff --git a/rostests/apitests/ws2_32/ws2_32.c b/rostests/apitests/ws2_32/ws2_32.c deleted file mode 100644 index 42e8a9b68eb..00000000000 --- a/rostests/apitests/ws2_32/ws2_32.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * PROJECT: ws2_32.dll API tests - * LICENSE: GPLv2 or any later version - * FILE: apitests/ws2_32/ws2_32.c - * PURPOSE: Program entry point - * COPYRIGHT: Copyright 2008 Colin Finck - */ - -#include "ws2_32.h" - -HANDLE g_hHeap; - -BOOL -IsFunctionPresent(LPWSTR lpszFunction) -{ - return TRUE; -} - -int wmain() -{ - g_hHeap = GetProcessHeap(); - - return TestMain(L"ws2_32_apitests", L"ws2_32.dll"); -} diff --git a/rostests/apitests/ws2_32/ws2_32.h b/rostests/apitests/ws2_32/ws2_32.h deleted file mode 100644 index 6fe52408fe8..00000000000 --- a/rostests/apitests/ws2_32/ws2_32.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * PROJECT: ws2_32.dll API tests - * LICENSE: GPLv2 or any later version - * FILE: apitests/ws2_32/ws2_32.h - * PURPOSE: Main header file - * COPYRIGHT: Copyright 2008 Colin Finck - */ - -#ifndef _WS2_32_APITESTS_H -#define _WS2_32_APITESTS_H - -#include - -#include "../apitest.h" - -/* Simple macro for executing a socket command and doing cleanup operations in case of a failure */ -#define SCKTEST(_cmd_) \ - iResult = _cmd_; \ - TEST(iResult != SOCKET_ERROR); \ - if(iResult == SOCKET_ERROR) \ - { \ - printf("Winsock error code is %u\n", WSAGetLastError()); \ - closesocket(sck); \ - WSACleanup(); \ - return APISTATUS_ASSERTION_FAILED; \ - } - -/* helpers.c */ -int CreateSocket(PTESTINFO pti, SOCKET* sck); -int ConnectToReactOSWebsite(PTESTINFO pti, SOCKET sck); -int GetRequestAndWait(PTESTINFO pti, SOCKET sck); - -/* ws2_32.c */ -extern HANDLE g_hHeap; - -#endif diff --git a/rostests/apitests/ws2_32/ws2_32.rbuild b/rostests/apitests/ws2_32/ws2_32.rbuild deleted file mode 100644 index e86f3cc04f8..00000000000 --- a/rostests/apitests/ws2_32/ws2_32.rbuild +++ /dev/null @@ -1,11 +0,0 @@ - - 0x0501 - apitest - kernel32 - user32 - shell32 - ws2_32 - helpers.c - testlist.c - ws2_32.c - diff --git a/rostests/copying b/rostests/copying deleted file mode 100644 index dc63aaca038..00000000000 --- a/rostests/copying +++ /dev/null @@ -1,340 +0,0 @@ - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, 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 - - Appendix: 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., 675 Mass Ave, Cambridge, MA 02139, 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. diff --git a/rostests/directory.rbuild b/rostests/directory.rbuild deleted file mode 100644 index 4ac30a12cf2..00000000000 --- a/rostests/directory.rbuild +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rostests/drivers/csqtest/SOURCES b/rostests/drivers/csqtest/SOURCES deleted file mode 100644 index 57f9e156818..00000000000 --- a/rostests/drivers/csqtest/SOURCES +++ /dev/null @@ -1,5 +0,0 @@ -TARGETNAME=csqtest -TARGETTYPE=DRIVER -TARGETPATH=obj -TARGETLIBS= csq.lib -SOURCES= csqtest.c diff --git a/rostests/drivers/csqtest/csqtest.c b/rostests/drivers/csqtest/csqtest.c deleted file mode 100644 index de65afdc749..00000000000 --- a/rostests/drivers/csqtest/csqtest.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * CSQ Test Driver - * Copyright (c) 2004, Vizzini (vizzini@plasmic.com) - * Released under the GNU GPL for the ReactOS project - * - * This driver is designed to exercise the cancel-safe IRP queue logic. - * Please refer to reactos/include/ddk/csq.h and reactos/drivers/lib/csq. - */ -#include -#include - -/* XXX shortcomings in our headers... */ -#define assert(x) -#ifndef KdPrint -#define KdPrint(x) DbgPrint x -#endif - -/* Device name */ -#define NT_DEVICE_NAME L"\\Device\\csqtest" - -/* DosDevices name */ -#define DOS_DEVICE_NAME L"\\??\\csqtest" - -/* Global CSQ struct that the CSQ functions init */ -IO_CSQ Csq; - -/* List and lock for the actual IRP queue */ -LIST_ENTRY IrpQueue; -KSPIN_LOCK IrpQueueLock; - -/* Device object */ -PDEVICE_OBJECT DeviceObject; - -/* - * CSQ Callbacks - */ -VOID NTAPI CsqInsertIrp(PIO_CSQ Csq, PIRP Irp) -{ - KdPrint(("Inserting IRP 0x%x into CSQ\n", Irp)); - InsertTailList(&IrpQueue, &Irp->Tail.Overlay.ListEntry); -} - -VOID NTAPI CsqRemoveIrp(PIO_CSQ Csq, PIRP Irp) -{ - KdPrint(("Removing IRP 0x%x from CSQ\n", Irp)); - RemoveEntryList(&Irp->Tail.Overlay.ListEntry); -} - -PIRP NTAPI CsqPeekNextIrp(PIO_CSQ Csq, PIRP Irp, PVOID PeekContext) -{ - KdPrint(("Peeking for next IRP\n")); - - if(Irp) - return CONTAINING_RECORD(&Irp->Tail.Overlay.ListEntry.Flink, IRP, Tail.Overlay.ListEntry); - - if(IsListEmpty(&IrpQueue)) - return NULL; - - return CONTAINING_RECORD(IrpQueue.Flink, IRP, Tail.Overlay.ListEntry); -} - -VOID NTAPI CsqAcquireLock(PIO_CSQ Csq, PKIRQL Irql) -{ - KdPrint(("Acquiring spin lock\n")); - KeAcquireSpinLock(&IrpQueueLock, Irql); -} - -VOID NTAPI CsqReleaseLock(PIO_CSQ Csq, KIRQL Irql) -{ - KdPrint(("Releasing spin lock\n")); - KeReleaseSpinLock(&IrpQueueLock, Irql); -} - -VOID NTAPI CsqCompleteCancelledIrp(PIO_CSQ Csq, PIRP Irp) -{ - KdPrint(("cancelling irp 0x%x\n", Irp)); - Irp->IoStatus.Status = STATUS_CANCELLED; - Irp->IoStatus.Information = 0; - IoCompleteRequest(Irp, IO_NO_INCREMENT); -} - -NTSTATUS NTAPI CsqInsertIrpEx(PIO_CSQ Csq, PIRP Irp, PVOID InsertContext) -/* - * FUNCTION: Insert into IRP queue, with extra context - * - * NOTE: Switch call in DriverEntry to IoCsqInitializeEx to use this - */ -{ - CsqInsertIrp(Csq, Irp); - return STATUS_PENDING; -} - -/* - * DISPATCH ROUTINES - */ - -NTSTATUS NTAPI DispatchCreateCloseCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp); - - if(StackLocation->MajorFunction == IRP_MJ_CLEANUP) - { - /* flush the irp queue */ - PIRP CurrentIrp; - - KdPrint(("csqtest: Cleanup received; flushing the IRP queue with cancel\n")); - - while((CurrentIrp = IoCsqRemoveNextIrp(&Csq, 0))) - { - CurrentIrp->IoStatus.Status = STATUS_CANCELLED; - CurrentIrp->IoStatus.Information = 0; - - IoCompleteRequest(CurrentIrp, IO_NO_INCREMENT); - } - } - - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - - return STATUS_SUCCESS; -} - -NTSTATUS NTAPI DispatchReadWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp) -{ - /* According to the cancel sample in the DDK, IoCsqInsertIrp() marks the irp pending */ - /* However, I think it's wrong. */ - IoMarkIrpPending(Irp); - IoCsqInsertIrp(&Csq, Irp, 0); - - return STATUS_PENDING; -} - -NTSTATUS NTAPI DispatchIoctl(PDEVICE_OBJECT DeviceObject, PIRP Irp) -/* - * all IOCTL requests flush the irp queue - */ -{ - PIRP CurrentIrp; - - KdPrint(("csqtest: Ioctl received; flushing the IRP queue with success\n")); - - while((CurrentIrp = IoCsqRemoveNextIrp(&Csq, 0))) - { - CurrentIrp->IoStatus.Status = STATUS_SUCCESS; - CurrentIrp->IoStatus.Information = 0; - - IoCompleteRequest(CurrentIrp, IO_NO_INCREMENT); - } - - Irp->IoStatus.Status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - - IoCompleteRequest(Irp, IO_NO_INCREMENT); - - return STATUS_SUCCESS; -} - -VOID NTAPI Unload(PDRIVER_OBJECT DriverObject) -/* - * Function: called by the OS to release resources before unload - */ -{ - UNICODE_STRING LinkName; - - RtlInitUnicodeString(&LinkName, DOS_DEVICE_NAME); - - IoDeleteSymbolicLink(&LinkName); - - if(DeviceObject) - IoDeleteDevice(DeviceObject); -} - -/* - * DriverEntry - */ - -NTSTATUS NTAPI DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) -{ - NTSTATUS Status; - UNICODE_STRING NtName; - UNICODE_STRING DosName; - - DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreateCloseCleanup; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchCreateCloseCleanup; - DriverObject->MajorFunction[IRP_MJ_CLEANUP] = DispatchCreateCloseCleanup; - DriverObject->MajorFunction[IRP_MJ_READ] = DispatchReadWrite; - DriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchReadWrite; - DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl; - DriverObject->DriverUnload = Unload; - - Status = IoCsqInitialize(&Csq, CsqInsertIrp, CsqRemoveIrp, CsqPeekNextIrp, - CsqAcquireLock, CsqReleaseLock, CsqCompleteCancelledIrp); - - if(Status != STATUS_SUCCESS) - KdPrint(("csqtest: IoCsqInitalize failed: 0x%x\n", Status)); - else - KdPrint(("csqtest: IoCsqInitalize succeeded\n")); - - InitializeListHead(&IrpQueue); - KeInitializeSpinLock(&IrpQueueLock); - - /* Set up a device */ - RtlInitUnicodeString(&NtName, NT_DEVICE_NAME); - Status = IoCreateDevice(DriverObject, 0, &NtName, FILE_DEVICE_UNKNOWN, 0, 0, &DeviceObject); - - if(!NT_SUCCESS(Status)) - { - KdPrint(("csqtest: Unable to create device: 0x%x\n", Status)); - return Status; - } - - RtlInitUnicodeString(&DosName, DOS_DEVICE_NAME); - Status = IoCreateSymbolicLink(&DosName, &NtName); - - if(!NT_SUCCESS(Status)) - { - KdPrint(("csqtest: Unable to create link: 0x%x\n", Status)); - return Status; - } - - DeviceObject->Flags |= DO_BUFFERED_IO; - - return STATUS_SUCCESS; -} - diff --git a/rostests/drivers/csqtest/csqtest.rbuild b/rostests/drivers/csqtest/csqtest.rbuild deleted file mode 100644 index 4dd069c942c..00000000000 --- a/rostests/drivers/csqtest/csqtest.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - - include/reactos/drivers - ntoskrnl - hal - csqtest.c - csqtest.rc - diff --git a/rostests/drivers/csqtest/csqtest.rc b/rostests/drivers/csqtest/csqtest.rc deleted file mode 100644 index b0f70095537..00000000000 --- a/rostests/drivers/csqtest/csqtest.rc +++ /dev/null @@ -1,7 +0,0 @@ -/* $Id$ */ - -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "CSQ Test\0" -#define REACTOS_STR_INTERNAL_NAME "csqtest\0" -#define REACTOS_STR_ORIGINAL_FILENAME "csqtest.sys\0" -#include diff --git a/rostests/drivers/directory.rbuild b/rostests/drivers/directory.rbuild deleted file mode 100644 index f989e45510e..00000000000 --- a/rostests/drivers/directory.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/rostests/drivers/kmtest/deviface.c b/rostests/drivers/kmtest/deviface.c deleted file mode 100644 index a3011f3d141..00000000000 --- a/rostests/drivers/kmtest/deviface.c +++ /dev/null @@ -1,545 +0,0 @@ -/* - * PnP Test - * ReactOS Device Interface functions implementation - * - * Copyright 2003, 2004 Filip Navara - * Copyright 2003, 2004 Matthew Brace - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include "kmtest.h" - -//#define NDEBUG -#include "debug.h" - -/* PUBLIC FUNCTIONS ***********************************************************/ - -/* - * IoGetDeviceInterfaces - * - * Returns a list of device interfaces of a particular device interface class. - * - * Parameters - * InterfaceClassGuid - * Points to a class GUID specifying the device interface class. - * - * PhysicalDeviceObject - * Points to an optional PDO that narrows the search to only the - * device interfaces of the device represented by the PDO. - * - * Flags - * Specifies flags that modify the search for device interfaces. The - * DEVICE_INTERFACE_INCLUDE_NONACTIVE flag specifies that the list of - * returned symbolic links should contain also disabled device - * interfaces in addition to the enabled ones. - * - * SymbolicLinkList - * Points to a character pointer that is filled in on successful return - * with a list of unicode strings identifying the device interfaces - * that match the search criteria. The newly allocated buffer contains - * a list of symbolic link names. Each unicode string in the list is - * null-terminated; the end of the whole list is marked by an additional - * NULL. The caller is responsible for freeing the buffer (ExFreePool) - * when it is no longer needed. - * If no device interfaces match the search criteria, this routine - * returns STATUS_SUCCESS and the string contains a single NULL - * character. - * - * Status - * @unimplemented - * - * The parameters PhysicalDeviceObject and Flags aren't correctly - * processed. Rest of the cases was tested under Win XP and the - * function worked correctly. - */ - -NTSTATUS NTAPI -ReactOS_IoGetDeviceInterfaces( - IN CONST GUID *InterfaceClassGuid, - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN ULONG Flags, - OUT PWSTR *SymbolicLinkList) -{ - PWCHAR BaseKeyString = L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\DeviceClasses\\"; - PWCHAR BaseInterfaceString = L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"; - UNICODE_STRING GuidString; - UNICODE_STRING BaseKeyName; - UNICODE_STRING AliasKeyName; - UNICODE_STRING SymbolicLink; - UNICODE_STRING Control; - UNICODE_STRING SubKeyName; - UNICODE_STRING SymbolicLinkKeyName; - UNICODE_STRING ControlKeyName; - UNICODE_STRING TempString; - HANDLE InterfaceKey; - HANDLE SubKey; - HANDLE SymbolicLinkKey; - PKEY_FULL_INFORMATION fip; - PKEY_FULL_INFORMATION bfip=NULL; - PKEY_BASIC_INFORMATION bip; - PKEY_VALUE_PARTIAL_INFORMATION vpip=NULL; - PWCHAR SymLinkList = NULL; - ULONG SymLinkListSize = 0; - NTSTATUS Status; - ULONG Size = 0; - ULONG i = 0; - ULONG j = 0; - OBJECT_ATTRIBUTES ObjectAttributes; - - Status = RtlStringFromGUID(InterfaceClassGuid, &GuidString); - if (!NT_SUCCESS(Status)) - { - DPRINT("RtlStringFromGUID() Failed.\n"); - return STATUS_INVALID_HANDLE; - } - - RtlInitUnicodeString(&AliasKeyName, BaseInterfaceString); - RtlInitUnicodeString(&SymbolicLink, L"SymbolicLink"); - RtlInitUnicodeString(&Control, L"\\Control"); - BaseKeyName.Length = wcslen(BaseKeyString) * sizeof(WCHAR); - BaseKeyName.MaximumLength = BaseKeyName.Length + (38 * sizeof(WCHAR)); - BaseKeyName.Buffer = ExAllocatePool( - NonPagedPool, - BaseKeyName.MaximumLength); - ASSERT(BaseKeyName.Buffer != NULL); - wcscpy(BaseKeyName.Buffer, BaseKeyString); - RtlAppendUnicodeStringToString(&BaseKeyName, &GuidString); - - if (PhysicalDeviceObject) - { - WCHAR GuidBuffer[40]; - UNICODE_STRING PdoGuidString; - - RtlFreeUnicodeString(&BaseKeyName); - - IoGetDeviceProperty( - PhysicalDeviceObject, - DevicePropertyClassGuid, - sizeof(GuidBuffer), - GuidBuffer, - &Size); - - RtlInitUnicodeString(&PdoGuidString, GuidBuffer); - if (RtlCompareUnicodeString(&GuidString, &PdoGuidString, TRUE)) - { - DPRINT("Inconsistent Guid's asked for in IoGetDeviceInterfaces()\n"); - return STATUS_INVALID_HANDLE; - } - - DPRINT("IoGetDeviceInterfaces() called with PDO, not implemented.\n"); - return STATUS_NOT_IMPLEMENTED; - } - else - { - InitializeObjectAttributes( - &ObjectAttributes, - &BaseKeyName, - OBJ_CASE_INSENSITIVE, - NULL, - NULL); - - Status = ZwOpenKey( - &InterfaceKey, - KEY_READ, - &ObjectAttributes); - - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwOpenKey() Failed. (0x%X)\n", Status); - RtlFreeUnicodeString(&BaseKeyName); - return Status; - } - - Status = ZwQueryKey( - InterfaceKey, - KeyFullInformation, - NULL, - 0, - &Size); - - if (Status != STATUS_BUFFER_TOO_SMALL) - { - DPRINT("ZwQueryKey() Failed. (0x%X)\n", Status); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(InterfaceKey); - return Status; - } - - fip = (PKEY_FULL_INFORMATION)ExAllocatePool(NonPagedPool, Size); - ASSERT(fip != NULL); - - Status = ZwQueryKey( - InterfaceKey, - KeyFullInformation, - fip, - Size, - &Size); - - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwQueryKey() Failed. (0x%X)\n", Status); - ExFreePool(fip); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(InterfaceKey); - return Status; - } - - for (; i < fip->SubKeys; i++) - { - Status = ZwEnumerateKey( - InterfaceKey, - i, - KeyBasicInformation, - NULL, - 0, - &Size); - - if (Status != STATUS_BUFFER_TOO_SMALL) - { - DPRINT("ZwEnumerateKey() Failed.(0x%X)\n", Status); - ExFreePool(fip); - if (SymLinkList != NULL) - ExFreePool(SymLinkList); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(InterfaceKey); - return Status; - } - - bip = (PKEY_BASIC_INFORMATION)ExAllocatePool(NonPagedPool, Size); - ASSERT(bip != NULL); - - Status = ZwEnumerateKey( - InterfaceKey, - i, - KeyBasicInformation, - bip, - Size, - &Size); - - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwEnumerateKey() Failed.(0x%X)\n", Status); - ExFreePool(fip); - ExFreePool(bip); - if (SymLinkList != NULL) - ExFreePool(SymLinkList); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(InterfaceKey); - return Status; - } - - SubKeyName.Length = 0; - SubKeyName.MaximumLength = BaseKeyName.Length + bip->NameLength + sizeof(WCHAR); - SubKeyName.Buffer = ExAllocatePool(NonPagedPool, SubKeyName.MaximumLength); - ASSERT(SubKeyName.Buffer != NULL); - TempString.Length = TempString.MaximumLength = bip->NameLength; - TempString.Buffer = bip->Name; - RtlCopyUnicodeString(&SubKeyName, &BaseKeyName); - RtlAppendUnicodeToString(&SubKeyName, L"\\"); - RtlAppendUnicodeStringToString(&SubKeyName, &TempString); - - ExFreePool(bip); - - InitializeObjectAttributes( - &ObjectAttributes, - &SubKeyName, - OBJ_CASE_INSENSITIVE, - NULL, - NULL); - - Status = ZwOpenKey( - &SubKey, - KEY_READ, - &ObjectAttributes); - - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwOpenKey() Failed. (0x%X)\n", Status); - ExFreePool(fip); - if (SymLinkList != NULL) - ExFreePool(SymLinkList); - RtlFreeUnicodeString(&SubKeyName); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(InterfaceKey); - return Status; - } - - Status = ZwQueryKey( - SubKey, - KeyFullInformation, - NULL, - 0, - &Size); - - if (Status != STATUS_BUFFER_TOO_SMALL) - { - DPRINT("ZwQueryKey() Failed. (0x%X)\n", Status); - ExFreePool(fip); - RtlFreeUnicodeString(&BaseKeyName); - RtlFreeUnicodeString(&SubKeyName); - ZwClose(SubKey); - ZwClose(InterfaceKey); - return Status; - } - - bfip = (PKEY_FULL_INFORMATION)ExAllocatePool(NonPagedPool, Size); - ASSERT(bfip != NULL); - - Status = ZwQueryKey( - SubKey, - KeyFullInformation, - bfip, - Size, - &Size); - - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwQueryKey() Failed. (0x%X)\n", Status); - ExFreePool(fip); - RtlFreeUnicodeString(&SubKeyName); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(SubKey); - ZwClose(InterfaceKey); - return Status; - } - - for(j = 0; j < bfip->SubKeys; j++) - { - Status = ZwEnumerateKey( - SubKey, - j, - KeyBasicInformation, - NULL, - 0, - &Size); - - if (Status == STATUS_NO_MORE_ENTRIES) - continue; - - if (Status != STATUS_BUFFER_TOO_SMALL) - { - DPRINT("ZwEnumerateKey() Failed.(0x%X)\n", Status); - ExFreePool(bfip); - ExFreePool(fip); - if (SymLinkList != NULL) - ExFreePool(SymLinkList); - RtlFreeUnicodeString(&SubKeyName); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(SubKey); - ZwClose(InterfaceKey); - return Status; - } - - bip = (PKEY_BASIC_INFORMATION)ExAllocatePool(NonPagedPool, Size); - ASSERT(bip != NULL); - - Status = ZwEnumerateKey( - SubKey, - j, - KeyBasicInformation, - bip, - Size, - &Size); - - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwEnumerateKey() Failed.(0x%X)\n", Status); - ExFreePool(fip); - ExFreePool(bfip); - ExFreePool(bip); - if (SymLinkList != NULL) - ExFreePool(SymLinkList); - RtlFreeUnicodeString(&SubKeyName); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(SubKey); - ZwClose(InterfaceKey); - return Status; - } - - if (!wcsncmp(bip->Name, L"Control", bip->NameLength)) - { - continue; - } - - SymbolicLinkKeyName.Length = 0; - SymbolicLinkKeyName.MaximumLength = SubKeyName.Length + bip->NameLength + sizeof(WCHAR); - SymbolicLinkKeyName.Buffer = ExAllocatePool(NonPagedPool, SymbolicLinkKeyName.MaximumLength); - ASSERT(SymbolicLinkKeyName.Buffer != NULL); - TempString.Length = TempString.MaximumLength = bip->NameLength; - TempString.Buffer = bip->Name; - RtlCopyUnicodeString(&SymbolicLinkKeyName, &SubKeyName); - RtlAppendUnicodeToString(&SymbolicLinkKeyName, L"\\"); - RtlAppendUnicodeStringToString(&SymbolicLinkKeyName, &TempString); - - ControlKeyName.Length = 0; - ControlKeyName.MaximumLength = SymbolicLinkKeyName.Length + Control.Length + sizeof(WCHAR); - ControlKeyName.Buffer = ExAllocatePool(NonPagedPool, ControlKeyName.MaximumLength); - ASSERT(ControlKeyName.Buffer != NULL); - RtlCopyUnicodeString(&ControlKeyName, &SymbolicLinkKeyName); - RtlAppendUnicodeStringToString(&ControlKeyName, &Control); - - ExFreePool(bip); - - InitializeObjectAttributes( - &ObjectAttributes, - &SymbolicLinkKeyName, - OBJ_CASE_INSENSITIVE, - NULL, - NULL); - - Status = ZwOpenKey( - &SymbolicLinkKey, - KEY_READ, - &ObjectAttributes); - - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwOpenKey() Failed. (0x%X)\n", Status); - ExFreePool(fip); - ExFreePool(bfip); - if (SymLinkList != NULL) - ExFreePool(SymLinkList); - RtlFreeUnicodeString(&SymbolicLinkKeyName); - RtlFreeUnicodeString(&SubKeyName); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(SubKey); - ZwClose(InterfaceKey); - return Status; - } - - Status = ZwQueryValueKey( - SymbolicLinkKey, - &SymbolicLink, - KeyValuePartialInformation, - NULL, - 0, - &Size); - - if (Status == STATUS_OBJECT_NAME_NOT_FOUND) - continue; - - if (Status != STATUS_BUFFER_TOO_SMALL) - { - DPRINT("ZwQueryValueKey() Failed.(0x%X)\n", Status); - ExFreePool(fip); - ExFreePool(bfip); - if (SymLinkList != NULL) - ExFreePool(SymLinkList); - RtlFreeUnicodeString(&SymbolicLinkKeyName); - RtlFreeUnicodeString(&SubKeyName); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(SymbolicLinkKey); - ZwClose(SubKey); - ZwClose(InterfaceKey); - return Status; - } - - vpip = (PKEY_VALUE_PARTIAL_INFORMATION)ExAllocatePool(NonPagedPool, Size); - ASSERT(vpip != NULL); - - Status = ZwQueryValueKey( - SymbolicLinkKey, - &SymbolicLink, - KeyValuePartialInformation, - vpip, - Size, - &Size); - - if (!NT_SUCCESS(Status)) - { - DPRINT("ZwQueryValueKey() Failed.(0x%X)\n", Status); - ExFreePool(fip); - ExFreePool(bfip); - ExFreePool(vpip); - if (SymLinkList != NULL) - ExFreePool(SymLinkList); - RtlFreeUnicodeString(&SymbolicLinkKeyName); - RtlFreeUnicodeString(&SubKeyName); - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(SymbolicLinkKey); - ZwClose(SubKey); - ZwClose(InterfaceKey); - return Status; - } - - Status = RtlCheckRegistryKey(RTL_REGISTRY_ABSOLUTE, ControlKeyName.Buffer); - - if (NT_SUCCESS(Status)) - { - /* Put the name in the string here */ - if (SymLinkList == NULL) - { - SymLinkListSize = vpip->DataLength; - SymLinkList = ExAllocatePool(NonPagedPool, SymLinkListSize + sizeof(WCHAR)); - ASSERT(SymLinkList != NULL); - RtlCopyMemory(SymLinkList, vpip->Data, vpip->DataLength); - SymLinkList[vpip->DataLength / sizeof(WCHAR)] = 0; - SymLinkList[1] = '?'; - } - else - { - PWCHAR OldSymLinkList; - ULONG OldSymLinkListSize; - PWCHAR SymLinkListPtr; - - OldSymLinkList = SymLinkList; - OldSymLinkListSize = SymLinkListSize; - SymLinkListSize += vpip->DataLength; - SymLinkList = ExAllocatePool(NonPagedPool, SymLinkListSize + sizeof(WCHAR)); - ASSERT(SymLinkList != NULL); - RtlCopyMemory(SymLinkList, OldSymLinkList, OldSymLinkListSize); - ExFreePool(OldSymLinkList); - SymLinkListPtr = SymLinkList + (OldSymLinkListSize / sizeof(WCHAR)); - RtlCopyMemory(SymLinkListPtr, vpip->Data, vpip->DataLength); - SymLinkListPtr[vpip->DataLength / sizeof(WCHAR)] = 0; - SymLinkListPtr[1] = '?'; - } - } - - RtlFreeUnicodeString(&SymbolicLinkKeyName); - RtlFreeUnicodeString(&ControlKeyName); - ZwClose(SymbolicLinkKey); - } - - ExFreePool(vpip); - RtlFreeUnicodeString(&SubKeyName); - ZwClose(SubKey); - } - - if (SymLinkList != NULL) - { - SymLinkList[SymLinkListSize / sizeof(WCHAR)] = 0; - } - else - { - SymLinkList = ExAllocatePool(NonPagedPool, 2 * sizeof(WCHAR)); - SymLinkList[0] = 0; - } - - *SymbolicLinkList = SymLinkList; - - RtlFreeUnicodeString(&BaseKeyName); - ZwClose(InterfaceKey); - ExFreePool(bfip); - ExFreePool(fip); - } - - return STATUS_SUCCESS; -} diff --git a/rostests/drivers/kmtest/deviface_test.c b/rostests/drivers/kmtest/deviface_test.c deleted file mode 100644 index 3dcb580528a..00000000000 --- a/rostests/drivers/kmtest/deviface_test.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * PnP Test - * Device Interface functions test - * - * Copyright 2004 Filip Navara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include -#include "kmtest.h" - -//#define NDEBUG -#include "debug.h" - -/* PRIVATE FUNCTIONS **********************************************************/ - -NTSTATUS NTAPI -(*IoGetDeviceInterfaces_Func)( - IN CONST GUID *InterfaceClassGuid, - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN ULONG Flags, - OUT PWSTR *SymbolicLinkList); - -NTSTATUS NTAPI -ReactOS_IoGetDeviceInterfaces( - IN CONST GUID *InterfaceClassGuid, - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN ULONG Flags, - OUT PWSTR *SymbolicLinkList); - -VOID DeviceInterfaceTest_Func() -{ - NTSTATUS Status; - PWSTR SymbolicLinkList; - PWSTR SymbolicLinkListPtr; - GUID Guid = {0x378de44c, 0x56ef, 0x11d1, {0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd}}; - - Status = IoGetDeviceInterfaces_Func( - &Guid, - NULL, - 0, - &SymbolicLinkList); - - if (!NT_SUCCESS(Status)) - { - DPRINT( - "[PnP Test] IoGetDeviceInterfaces failed with status 0x%X\n", - Status); - return; - } - - DPRINT("[PnP Test] IoGetDeviceInterfaces results:\n"); - for (SymbolicLinkListPtr = SymbolicLinkList; - SymbolicLinkListPtr[0] != 0 && SymbolicLinkListPtr[1] != 0; - SymbolicLinkListPtr += wcslen(SymbolicLinkListPtr) + 1) - { - DPRINT("[PnP Test] %S\n", SymbolicLinkListPtr); - } - -#if 0 - DPRINT("[PnP Test] Trying to get aliases\n"); - - for (SymbolicLinkListPtr = SymbolicLinkList; - SymbolicLinkListPtr[0] != 0 && SymbolicLinkListPtr[1] != 0; - SymbolicLinkListPtr += wcslen(SymbolicLinkListPtr) + 1) - { - UNICODE_STRING SymbolicLink; - UNICODE_STRING AliasSymbolicLink; - - SymbolicLink.Buffer = SymbolicLinkListPtr; - SymbolicLink.Length = SymbolicLink.MaximumLength = wcslen(SymbolicLinkListPtr); - RtlInitUnicodeString(&AliasSymbolicLink, NULL); - IoGetDeviceInterfaceAlias( - &SymbolicLink, - &AliasGuid, - &AliasSymbolicLink); - if (AliasSymbolicLink.Buffer != NULL) - { - DPRINT("[PnP Test] Original: %S\n", SymbolicLinkListPtr); - DPRINT("[PnP Test] Alias: %S\n", AliasSymbolicLink.Buffer); - } - } -#endif - - ExFreePool(SymbolicLinkList); -} - -VOID RegisterDI_Test() -{ - GUID Guid = {0x378de44c, 0x56ef, 0x11d1, {0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd}}; - DEVICE_OBJECT DeviceObject; - EXTENDED_DEVOBJ_EXTENSION DeviceObjectExtension; - DEVICE_NODE DeviceNode; - UNICODE_STRING SymbolicLinkName; - NTSTATUS Status; - - RtlInitUnicodeString(&SymbolicLinkName, L""); - - // Prepare our surrogate of a Device Object - DeviceObject.DeviceObjectExtension = (PDEVOBJ_EXTENSION)&DeviceObjectExtension; - - // 1. DeviceNode = NULL - DeviceObjectExtension.DeviceNode = NULL; - Status = IoRegisterDeviceInterface(&DeviceObject, &Guid, NULL, - &SymbolicLinkName); - - ok(Status == STATUS_INVALID_DEVICE_REQUEST, - "IoRegisterDeviceInterface returned 0x%08lX\n", Status); - - // 2. DeviceNode->InstancePath is of a null length - DeviceObjectExtension.DeviceNode = &DeviceNode; - DeviceNode.InstancePath.Length = 0; - Status = IoRegisterDeviceInterface(&DeviceObject, &Guid, NULL, - &SymbolicLinkName); - - ok(Status == STATUS_INVALID_DEVICE_REQUEST, - "IoRegisterDeviceInterface returned 0x%08lX\n", Status); -} - -VOID NtoskrnlIoDeviceInterface() -{ - StartTest(); - - // Test IoRegisterDeviceInterface() failures now - RegisterDI_Test(); - -/* - DPRINT("Calling DeviceInterfaceTest_Func with native functions\n"); - IoGetDeviceInterfaces_Func = IoGetDeviceInterfaces; - DeviceInterfaceTest_Func(); - DPRINT("Calling DeviceInterfaceTest_Func with ReactOS functions\n"); - IoGetDeviceInterfaces_Func = ReactOS_IoGetDeviceInterfaces; - DeviceInterfaceTest_Func(); -*/ - - FinishTest("NTOSKRNL Io Device Interface Test"); -} diff --git a/rostests/drivers/kmtest/kmtest.c b/rostests/drivers/kmtest/kmtest.c deleted file mode 100644 index d30f3486752..00000000000 --- a/rostests/drivers/kmtest/kmtest.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Kernel Mode regression Test - * Driver Core - * - * Copyright 2004 Filip Navara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include "kmtest.h" - -LONG successes; -LONG failures; -tls_data glob_data; - -/* PRIVATE FUNCTIONS ***********************************************************/ -VOID -StartTest() -{ - successes = 0; - failures = 0; -} - -VOID -FinishTest(LPSTR TestName) -{ - DbgPrint("Test %s finished with %d succeses and %d failures\n", TestName, successes, failures); -} - -void kmtest_set_location(const char* file, int line) -{ - glob_data.current_file=strrchr(file,'/'); - if (glob_data.current_file==NULL) - glob_data.current_file=strrchr(file,'\\'); - if (glob_data.current_file==NULL) - glob_data.current_file=file; - else - glob_data.current_file++; - glob_data.current_line=line; -} - -/* - * Checks condition. - * Parameters: - * - condition - condition to check; - * - msg test description; - * - file - test application source code file name of the check - * - line - test application source code file line number of the check - * Return: - * 0 if condition does not have the expected value, 1 otherwise - */ -int kmtest_ok(int condition, const char *msg, ... ) -{ - va_list valist; - - if (!condition) - { - if (msg[0]) - { - char string[1024]; - va_start(valist, msg); - vsprintf(string, msg, valist); - DbgPrint( "%s:%d: Test failed: %s\n", - glob_data.current_file, glob_data.current_line, string ); - va_end(valist); - } - else - { - DbgPrint( "%s:%d: Test failed\n", - glob_data.current_file, glob_data.current_line ); - } - InterlockedIncrement(&failures); - return 0; - } - else - {/* - if (report_success) - fprintf( stdout, "%s:%d: Test succeeded\n", - glob_data.current_file, glob_data.current_line);*/ - InterlockedIncrement(&successes); - } - return 1; -} - -/* PUBLIC FUNCTIONS ***********************************************************/ - -/* - * Test Declarations - */ -VOID NtoskrnlIoTests(); -VOID NtoskrnlObTest(); -VOID NtoskrnlExecutiveTests(); -VOID NtoskrnlPoolsTest(); - -/* - * KmtestUnload - */ -VOID -NTAPI -KmtestUnload(IN PDRIVER_OBJECT DriverObject) -{ - /* Nothing to do here */ -} - -/* - * DriverEntry - */ -NTSTATUS -NTAPI -DriverEntry(PDRIVER_OBJECT DriverObject, - PUNICODE_STRING RegistryPath) -{ - DbgPrint("\n===============================================\nKernel Mode Regression Test driver starting...\n"); - - /* Set necessary routines */ - DriverObject->DriverUnload = KmtestUnload; - - NtoskrnlExecutiveTests(); - NtoskrnlIoTests(); - NtoskrnlObTest(); - NtoskrnlPoolsTest(); - - return STATUS_SUCCESS; -} diff --git a/rostests/drivers/kmtest/kmtest.h b/rostests/drivers/kmtest/kmtest.h deleted file mode 100644 index 658bf8b513b..00000000000 --- a/rostests/drivers/kmtest/kmtest.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef PNPTEST_H -#define PNPTEST_H - -#include -#include -#include - -/* - Some macros, structs, and vars are based or inspired from the great - Wine regression tests Copyright (C) 2002 Alexandre Julliard. - Everything else is done by Aleksey Bragin based on PnPTest by Filip Navara -*/ - -extern LONG successes; /* number of successful tests */ -extern LONG failures; /* number of failures */ -//static ULONG todo_successes; /* number of successful tests inside todo block */ -//static ULONG todo_failures; /* number of failures inside todo block */ - -// We don't do multithreading, so we just keep this struct in a global var -typedef struct -{ - const char* current_file; /* file of current check */ - int current_line; /* line of current check */ - int todo_level; /* current todo nesting level */ - int todo_do_loop; -} tls_data; - -extern tls_data glob_data; - -VOID StartTest(); -VOID FinishTest(LPSTR TestName); -void kmtest_set_location(const char* file, int line); - -#ifdef __GNUC__ - -extern int kmtest_ok( int condition, const char *msg, ... ) __attribute__((format (printf,2,3) )); - -#else /* __GNUC__ */ - -extern int kmtest_ok( int condition, const char *msg, ... ); - -#endif /* __GNUC__ */ - - -#define ok_(file, line) (kmtest_set_location(file, line), 0) ? 0 : kmtest_ok -#define ok ok_(__FILE__, __LINE__) - -#endif /* PNPTEST_H */ diff --git a/rostests/drivers/kmtest/kmtest.rbuild b/rostests/drivers/kmtest/kmtest.rbuild deleted file mode 100644 index 23a65549f62..00000000000 --- a/rostests/drivers/kmtest/kmtest.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - include/reactos/drivers - ntoskrnl - hal - kmtest.c - deviface.c - deviface_test.c - ntos_ex.c - ntos_io.c - ntos_ob.c - ntos_pools.c - kmtest.rc - diff --git a/rostests/drivers/kmtest/kmtest.rc b/rostests/drivers/kmtest/kmtest.rc deleted file mode 100644 index fa44c9352c1..00000000000 --- a/rostests/drivers/kmtest/kmtest.rc +++ /dev/null @@ -1,7 +0,0 @@ -/* $Id: csqtest.rc 21842 2006-05-07 19:16:11Z ion $ */ - -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Kernel Mode Regression Tests\0" -#define REACTOS_STR_INTERNAL_NAME "kmtest\0" -#define REACTOS_STR_ORIGINAL_FILENAME "kmtest.sys\0" -#include diff --git a/rostests/drivers/kmtest/ntos_ex.c b/rostests/drivers/kmtest/ntos_ex.c deleted file mode 100644 index 73f47c65f66..00000000000 --- a/rostests/drivers/kmtest/ntos_ex.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * NTOSKRNL Executive Regressions KM-Test - * ReactOS Kernel Mode Regression Testing framework - * - * Copyright 2006 Aleksey Bragin - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include -#include -#include "kmtest.h" - -//#define NDEBUG -#include "debug.h" - -/* PRIVATE FUNCTIONS ***********************************************************/ - -VOID -NTAPI -TestTimerApcRoutine(IN PVOID TimerContext, - IN ULONG TimerLowValue, - IN LONG TimerHighValue) - -{ - DPRINT("Timer Apc called!\n"); - ULONG *ApcCount = (ULONG *)TimerContext; - (*ApcCount)++; -} - - -VOID -ExTimerTest() -{ - UNICODE_STRING TimerName; - OBJECT_ATTRIBUTES ObjectAttributes; - HANDLE TimerHandle; - HANDLE HandleOpened; - LARGE_INTEGER DueTime; - BOOLEAN PreviousState, CurrentState; - NTSTATUS Status; - ULONG ApcCount; - - StartTest(); - - // Create the timer - RtlInitUnicodeString(&TimerName, L"\\TestTimer"); - InitializeObjectAttributes(&ObjectAttributes, &TimerName, 0, NULL, NULL); - Status = ZwCreateTimer(&TimerHandle, TIMER_ALL_ACCESS, - &ObjectAttributes, NotificationTimer); - ok(Status == STATUS_SUCCESS, "ZwCreateTimer failed with Status=0x%08lX", Status); - - // Open the timer - Status = ZwOpenTimer(&HandleOpened, TIMER_ALL_ACCESS, &ObjectAttributes); - ok(Status == STATUS_SUCCESS, "ZwOpenTimer failed with Status=0x%08lX", Status); - - // Set the timer, to some rather high value so it doesn't expire - DPRINT("Set timer 1\n"); - DueTime.LowPart = -10000; - DueTime.HighPart = -10; - PreviousState = TRUE; - Status = ZwSetTimer(HandleOpened, &DueTime, NULL, NULL, FALSE, 0L, &PreviousState); - ok(Status == STATUS_SUCCESS, "ZwSetTimer failed with Status=0x%08lX", Status); - ok(PreviousState == FALSE, "Incorrect PreviousState returned when setting the timer"); - - // Cancel the timer - CurrentState = TRUE; - Status = ZwCancelTimer(HandleOpened, &CurrentState); - ok(Status == STATUS_SUCCESS, "ZwCancelTimer failed with Status=0x%08lX", Status); - ok(CurrentState == FALSE, "Incorrect CurrentState returned when canceling the timer"); - - // Set the timer to some small value, because we'll wait for it to expire - DPRINT("Set timer 2\n"); - DueTime.LowPart = -100; - DueTime.HighPart = -1; - PreviousState = TRUE; - Status = ZwSetTimer(HandleOpened, &DueTime, NULL, NULL, FALSE, 0L, &PreviousState); - ok(Status == STATUS_SUCCESS, "ZwSetTimer failed with Status=0x%08lX", Status); - ok(PreviousState == FALSE, "Incorrect PreviousState returned when setting the timer"); - - // Wait until it expires - DPRINT("Wait till timer expires\n"); - Status = ZwWaitForSingleObject(HandleOpened, FALSE, NULL); - ok(Status == STATUS_SUCCESS, "ZwWaitForSingleObject failed with Status=0x%08lX", Status); - - // And cancel it - DPRINT("Cancel it\n"); - CurrentState = FALSE; - Status = ZwCancelTimer(HandleOpened, &CurrentState); - ok(Status == STATUS_SUCCESS, "ZwCancelTimer failed with Status=0x%08lX", Status); - ok(CurrentState == TRUE, "Incorrect CurrentState returned when setting the timer"); - - // Test it with APC: Set, Cancel, check if APC has been called - DPRINT("Set timer with Apc (3)\n"); - ApcCount = 0; - DueTime.LowPart = -10000; - DueTime.HighPart = -10; - PreviousState = FALSE; - Status = ZwSetTimer(HandleOpened, &DueTime, - (PTIMER_APC_ROUTINE)TestTimerApcRoutine, &ApcCount, FALSE, - 0L, &PreviousState); - - ok(Status == STATUS_SUCCESS, "ZwSetTimer failed with Status=0x%08lX", Status); - ok(PreviousState == TRUE, "Incorrect PreviousState returned when setting the timer"); - - DPRINT("Cancel it\n"); - CurrentState = TRUE; - Status = ZwCancelTimer(HandleOpened, &CurrentState); - ok(Status == STATUS_SUCCESS, "ZwCancelTimer failed with Status=0x%08lX", Status); - ok(CurrentState == FALSE, "Incorrect CurrentState returned when cancelling the timer"); - ok(ApcCount == 0, "Incorrect count of TimerApcRoutine calls: %ld, should be 0\n", ApcCount); - - // Test setting the timer two times in a row, APC routine must not be called - DPRINT("Set timer with Apc (4)\n"); - ApcCount = 0; - DueTime.LowPart = -10000; - DueTime.HighPart = -10; - PreviousState = TRUE; - Status = ZwSetTimer(HandleOpened, &DueTime, - (PTIMER_APC_ROUTINE)TestTimerApcRoutine, &ApcCount, FALSE, - 0L, &PreviousState); - ok(Status == STATUS_SUCCESS, "ZwSetTimer failed with Status=0x%08lX", Status); - ok(PreviousState == FALSE, "Incorrect PreviousState returned when setting the timer"); - - // Set small due time, since we have to wait for timer to finish - DPRINT("Set timer with Apc (5)\n"); - DueTime.LowPart = -10; - DueTime.HighPart = -1; - PreviousState = TRUE; - Status = ZwSetTimer(HandleOpened, &DueTime, - (PTIMER_APC_ROUTINE)TestTimerApcRoutine, &ApcCount, FALSE, - 0L, &PreviousState); - ok(Status == STATUS_SUCCESS, "ZwSetTimer failed with Status=0x%08lX", Status); - ok(PreviousState == FALSE, "Incorrect PreviousState returned when setting the timer"); - - // Now wait till it's finished, and then check APC call - DPRINT("Wait for it\n"); - Status = ZwWaitForSingleObject(HandleOpened, FALSE, NULL); - ok(Status == STATUS_SUCCESS, "ZwWaitForSingleObject failed with Status=0x%08lX", Status); - - CurrentState = FALSE; - Status = ZwCancelTimer(HandleOpened, &CurrentState); - ok(Status == STATUS_SUCCESS, "ZwCancelTimer failed with Status=0x%08lX", Status); - ok(CurrentState == TRUE, "Incorrect CurrentState returned when cancelling the timer"); - ok(ApcCount == 1, "Incorrect count of TimerApcRoutine calls: %ld, should be 1\n", ApcCount); - - // Cleanup... - Status = ZwClose(HandleOpened); - ok(Status == STATUS_SUCCESS, "ZwClose failed with Status=0x%08lX", Status); - - Status = ZwClose(TimerHandle); - ok(Status == STATUS_SUCCESS, "ZwClose failed with Status=0x%08lX", Status); - - FinishTest("NTOSKRNL Executive Timer"); -} - -/* PUBLIC FUNCTIONS ***********************************************************/ - -VOID -NtoskrnlExecutiveTests() -{ - ExTimerTest(); -} diff --git a/rostests/drivers/kmtest/ntos_io.c b/rostests/drivers/kmtest/ntos_io.c deleted file mode 100644 index 55d6ff20fd5..00000000000 --- a/rostests/drivers/kmtest/ntos_io.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - * NTOSKRNL Io Regressions KM-Test - * ReactOS Kernel Mode Regression Testing framework - * - * Copyright 2006 Aleksey Bragin - * Copyright 2008 Etersoft (Alexander Morozov) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include "kmtest.h" - -#define NDEBUG -#include "debug.h" - -VOID NtoskrnlIoDeviceInterface(); - - -/* PUBLIC FUNCTIONS ***********************************************************/ - -VOID NtoskrnlIoMdlTest() -{ - PMDL Mdl; - PIRP Irp; - PVOID VirtualAddress; - ULONG MdlSize = 2*4096+184; // 2 pages and some random value - - StartTest(); - - // Try to alloc 2Gb MDL - Mdl = IoAllocateMdl(NULL, 2048UL*0x100000, FALSE, FALSE, NULL); - - ok(Mdl == NULL, - "IoAllocateMdl should fail allocation of 2Gb or more, but got Mdl=0x%X", - (UINT)Mdl); - - if (Mdl) - IoFreeMdl(Mdl); - - // Now create a valid MDL - VirtualAddress = ExAllocatePool(NonPagedPool, MdlSize); - Mdl = IoAllocateMdl(VirtualAddress, MdlSize, FALSE, FALSE, NULL); - ok(Mdl != NULL, "Mdl allocation failed"); - // Check fields of the allocated struct - ok(Mdl->Next == NULL, "Mdl->Next should be NULL, but is 0x%X", - (UINT)Mdl->Next); - ok(Mdl->ByteCount == MdlSize, - "Mdl->ByteCount should be equal to MdlSize, but is 0x%X", - (UINT)Mdl->ByteCount); - // TODO: Check other fields of MDL struct - - IoFreeMdl(Mdl); - // Allocate now with pointer to an Irp - Irp = IoAllocateIrp(1, FALSE); - ok(Irp != NULL, "IRP allocation failed"); - Mdl = IoAllocateMdl(VirtualAddress, MdlSize, FALSE, FALSE, Irp); - ok(Mdl != NULL, "Mdl allocation failed"); - ok(Irp->MdlAddress == Mdl, "Irp->MdlAddress should be 0x%X, but is 0x%X", - (UINT)Mdl, (UINT)Irp->MdlAddress); - - IoFreeMdl(Mdl); - - // TODO: Check a case when SecondaryBuffer == TRUE - - IoFreeIrp(Irp); - ExFreePool(VirtualAddress); - - FinishTest("NTOSKRNL Io Mdl"); -} - -VOID NtoskrnlIoIrpTest() -{ - USHORT size; - IRP *iorp; - - StartTest(); - - // 1st test - size = sizeof(IRP) + 5 * sizeof(IO_STACK_LOCATION); - iorp = ExAllocatePool(NonPagedPool, size); - - if (NULL != iorp) - { - IoInitializeIrp(iorp, size, 5); - - ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type); - ok(iorp->Size == size, "Irp size should be %d, but got %d\n", - iorp->Size, size); - ok(5 == iorp->StackCount, "Irp StackCount should be 5, but got %d\n", - iorp->StackCount); - ok(6 == iorp->CurrentLocation, "Irp CurrentLocation should be 6, but got %d\n", - iorp->CurrentLocation); - ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n"); - ok ((PIO_STACK_LOCATION)(iorp + 1) + 5 == - iorp->Tail.Overlay.CurrentStackLocation, - "CurrentStackLocation mismatch\n"); - - ExFreePool(iorp); - } - - // 2nd test - size = sizeof(IRP) + 2 * sizeof(IO_STACK_LOCATION); - iorp = IoAllocateIrp(2, FALSE); - - if (NULL != iorp) - { - ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type); - ok(iorp->Size >= size, - "Irp size should be more or equal to %d, but got %d\n", - iorp->Size, size); - ok(2 == iorp->StackCount, "Irp StackCount should be 2, but got %d\n", - iorp->StackCount); - ok(3 == iorp->CurrentLocation, "Irp CurrentLocation should be 3, but got %d\n", - iorp->CurrentLocation); - ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n"); - ok ((PIO_STACK_LOCATION)(iorp + 1) + 2 == - iorp->Tail.Overlay.CurrentStackLocation, - "CurrentStackLocation mismatch\n"); - ok((IRP_ALLOCATED_FIXED_SIZE & iorp->AllocationFlags), - "IRP Allocation flags lack fixed size attribute\n"); - ok(!(IRP_LOOKASIDE_ALLOCATION & iorp->AllocationFlags), - "IRP Allocation flags should not have lookaside allocation\n"); - - IoFreeIrp(iorp); - } - - // 3rd test - size = sizeof(IRP) + 2 * sizeof(IO_STACK_LOCATION); - iorp = IoAllocateIrp(2, TRUE); - - if (NULL != iorp) - { - ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type); - ok(iorp->Size >= size, - "Irp size should be more or equal to %d, but got %d\n", - iorp->Size, size); - ok(2 == iorp->StackCount, "Irp StackCount should be 2, but got %d\n", - iorp->StackCount); - ok(3 == iorp->CurrentLocation, "Irp CurrentLocation should be 3, but got %d\n", - iorp->CurrentLocation); - ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n"); - ok ((PIO_STACK_LOCATION)(iorp + 1) + 2 == - iorp->Tail.Overlay.CurrentStackLocation, - "CurrentStackLocation mismatch\n"); - ok((IRP_ALLOCATED_FIXED_SIZE & iorp->AllocationFlags), - "IRP Allocation flags lack fixed size attribute\n"); - ok((IRP_LOOKASIDE_ALLOCATION & iorp->AllocationFlags), - "IRP Allocation flags lack lookaside allocation\n"); - - IoFreeIrp(iorp); - } - - FinishTest("NTOSKRNL Io Irp"); -} - -VOID NtoskrnlIoTests() -{ - NtoskrnlIoMdlTest(); - NtoskrnlIoDeviceInterface(); - NtoskrnlIoIrpTest(); -} diff --git a/rostests/drivers/kmtest/ntos_ob.c b/rostests/drivers/kmtest/ntos_ob.c deleted file mode 100644 index a7c62fa5641..00000000000 --- a/rostests/drivers/kmtest/ntos_ob.c +++ /dev/null @@ -1,519 +0,0 @@ -/* - * NTOSKRNL Ob Regressions KM-Test - * ReactOS Kernel Mode Regression Testing framework - * - * Copyright 2006 Aleksey Bragin - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include -#include "kmtest.h" - -//#define NDEBUG -#include "debug.h" - -#include "ntndk.h" - -// I ment to make this test scalable, but for now -// we work with two object types only -#define NUM_OBTYPES 2 - -typedef struct _MY_OBJECT1 -{ - ULONG Something1; -} MY_OBJECT1, *PMY_OBJECT1; - -typedef struct _MY_OBJECT2 -{ - ULONG Something1; - ULONG SomeLong[10]; -} MY_OBJECT2, *PMY_OBJECT2; - -POBJECT_TYPE ObTypes[NUM_OBTYPES]; -UNICODE_STRING ObTypeName[NUM_OBTYPES]; -UNICODE_STRING ObName[NUM_OBTYPES]; -OBJECT_TYPE_INITIALIZER ObTypeInitializer[NUM_OBTYPES]; -UNICODE_STRING ObDirectoryName; -OBJECT_ATTRIBUTES ObDirectoryAttributes; -OBJECT_ATTRIBUTES ObAttributes[NUM_OBTYPES]; -PVOID ObBody[NUM_OBTYPES]; -PMY_OBJECT1 ObObject1; -PMY_OBJECT2 ObObject2; -HANDLE ObHandle1[NUM_OBTYPES]; -HANDLE ObHandle2[NUM_OBTYPES]; -HANDLE DirectoryHandle; - -USHORT DumpCount, OpenCount, CloseCount, DeleteCount, - ParseCount, OkayToCloseCount, QueryNameCount; - -/* PRIVATE FUNCTIONS **********************************************************/ - -VOID -NTAPI -DumpProc(IN PVOID Object, - IN POB_DUMP_CONTROL DumpControl) -{ - DbgPrint("DumpProc() called\n"); - DumpCount++; -} - -// Tested in Win2k3 -VOID -NTAPI -OpenProc(IN OB_OPEN_REASON OpenReason, - IN PEPROCESS Process, - IN PVOID Object, - IN ACCESS_MASK GrantedAccess, - IN ULONG HandleCount) -{ - DbgPrint("OpenProc() 0x%p, OpenReason %d, HC %d, AM 0x%X\n", - Object, OpenReason, HandleCount, GrantedAccess); - OpenCount++; -} - -// Tested in Win2k3 -VOID -NTAPI -CloseProc(IN PEPROCESS Process, - IN PVOID Object, - IN ACCESS_MASK GrantedAccess, - IN ULONG ProcessHandleCount, - IN ULONG SystemHandleCount) -{ - DbgPrint("CloseProc() 0x%p, PHC %d, SHC %d, AM 0x%X\n", Object, - ProcessHandleCount, SystemHandleCount, GrantedAccess); - CloseCount++; -} - -// Tested in Win2k3 -VOID -NTAPI -DeleteProc(IN PVOID Object) -{ - DbgPrint("DeleteProc() 0x%p\n", Object); - DeleteCount++; -} - -NTSTATUS -NTAPI -ParseProc(IN PVOID ParseObject, - IN PVOID ObjectType, - IN OUT PACCESS_STATE AccessState, - IN KPROCESSOR_MODE AccessMode, - IN ULONG Attributes, - IN OUT PUNICODE_STRING CompleteName, - IN OUT PUNICODE_STRING RemainingName, - IN OUT PVOID Context OPTIONAL, - IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, - OUT PVOID *Object) -{ - DbgPrint("ParseProc() called\n"); - *Object = NULL; - - ParseCount++; - return STATUS_OBJECT_NAME_NOT_FOUND;//STATUS_SUCCESS; -} - -// Tested in Win2k3 -NTSTATUS -NTAPI -OkayToCloseProc(IN PEPROCESS Process OPTIONAL, - IN PVOID Object, - IN HANDLE Handle, - IN KPROCESSOR_MODE AccessMode) -{ - DbgPrint("OkayToCloseProc() 0x%p, H 0x%p, AM 0x%X\n", Object, Handle, - AccessMode); - OkayToCloseCount++; - return STATUS_SUCCESS; -} - -NTSTATUS -NTAPI -QueryNameProc(IN PVOID Object, - IN BOOLEAN HasObjectName, - OUT POBJECT_NAME_INFORMATION ObjectNameInfo, - IN ULONG Length, - OUT PULONG ReturnLength, - IN KPROCESSOR_MODE AccessMode) -{ - DbgPrint("QueryNameProc() 0x%p, HON %d, Len %d, AM 0x%X\n", - Object, HasObjectName, Length, AccessMode); - QueryNameCount++; - - ObjectNameInfo = NULL; - ReturnLength = 0; - return STATUS_OBJECT_NAME_NOT_FOUND; -} - - -VOID -ObtCreateObjectTypes() -{ - USHORT i; - NTSTATUS Status; - WCHAR Name[15]; - - for (i=0; i - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include -#include -#include "kmtest.h" - -//#define NDEBUG -#include "debug.h" - -#define TAG_POOLTEST TAG('P','t','s','t') - -/* PRIVATE FUNCTIONS ***********************************************************/ - -VOID -PoolsTest() -{ - PVOID Ptr; - ULONG AllocSize, i, AllocNumber; - PVOID *Allocs; - - StartTest(); - - // Stress-test nonpaged pool - for (i=1; i<10000; i++) - { - // make up some increasing, a bit irregular size - AllocSize = i*10; - - if (i % 10) - AllocSize++; - - if (i % 25) - AllocSize += 13; - - // start with non-paged pool - Ptr = ExAllocatePoolWithTag(NonPagedPool, AllocSize, TAG_POOLTEST); - - // it may fail due to no-memory condition - if (!Ptr) break; - - // try to fully fill it - RtlFillMemory(Ptr, AllocSize, 0xAB); - - // free it - ExFreePoolWithTag(Ptr, TAG_POOLTEST); - } - - // now paged one - for (i=1; i<10000; i++) - { - // make up some increasing, a bit irregular size - AllocSize = i*50; - - if (i % 10) - AllocSize++; - - if (i % 25) - AllocSize += 13; - - // start with non-paged pool - Ptr = ExAllocatePoolWithTag(PagedPool, AllocSize, TAG_POOLTEST); - - // it may fail due to no-memory condition - if (!Ptr) break; - - // try to fully fill it - RtlFillMemory(Ptr, AllocSize, 0xAB); - - // free it - ExFreePoolWithTag(Ptr, TAG_POOLTEST); - } - - // test super-big allocations - /*AllocSize = 2UL * 1024 * 1024 * 1024; - Ptr = ExAllocatePoolWithTag(NonPagedPool, AllocSize, TAG_POOLTEST); - ok(Ptr == NULL, "Allocating 2Gb of nonpaged pool should fail\n"); - - Ptr = ExAllocatePoolWithTag(PagedPool, AllocSize, TAG_POOLTEST); - ok(Ptr == NULL, "Allocating 2Gb of paged pool should fail\n");*/ - - // now test allocating lots of small/medium blocks - AllocNumber = 100000; - Allocs = ExAllocatePoolWithTag(PagedPool, sizeof(Allocs) * AllocNumber, TAG_POOLTEST); - - // alloc blocks - for (i=0; i - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include "memtest.h" - -//#define NDEBUG -#include - -HANDLE MonitorThreadHandle; - -/* FUNCTIONS ***********************************************************/ - -static VOID NTAPI -MonitorThread(PVOID Ignored) -{ - SYSTEM_PERFORMANCE_INFORMATION PerformanceInfo; - ULONG Length; - LARGE_INTEGER Interval, SystemTime; - - /* Main loop */ - while (TRUE) - { - Interval.QuadPart = -300 * 10000; // 300 ms - - /* Query information */ - if (ZwQuerySystemInformation(SystemPerformanceInformation, - (PVOID) &PerformanceInfo, - sizeof(SYSTEM_PERFORMANCE_INFORMATION), - &Length) != NO_ERROR) - { - break; - } - - /* Query current system time */ - KeQuerySystemTime(&SystemTime); - - - DbgPrint("%I64d;%d;%d\n", SystemTime.QuadPart, - PerformanceInfo.CommittedPages, PerformanceInfo.AvailablePages); - - /* Wait for a bit. */ - KeDelayExecutionThread(KernelMode, FALSE, &Interval); - } - - DPRINT("Finishing monitoring thread.\n"); - - PsTerminateSystemThread(0); -} - - -VOID -StartMemoryMonitor() -{ - NTSTATUS Status; - - Status = PsCreateSystemThread( - &MonitorThreadHandle, - THREAD_ALL_ACCESS, - NULL, - NULL, - NULL, - MonitorThread, - NULL); - - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed to start a monitoring thread\n"); - return; - } -} - -/* PUBLIC FUNCTIONS ***********************************************************/ - -/* - * DriverEntry - */ -NTSTATUS -NTAPI -DriverEntry(PDRIVER_OBJECT DriverObject, - PUNICODE_STRING RegistryPath) -{ - DbgPrint("\n===============================================\n Memory Manager Information and Test driver\n"); - DbgPrint("Time;Memory pages allocated;Memory pages free\n"); - - - StartMemoryMonitor(); - - return STATUS_SUCCESS; -} diff --git a/rostests/drivers/memtest/memtest.h b/rostests/drivers/memtest/memtest.h deleted file mode 100644 index f165f4c2ca5..00000000000 --- a/rostests/drivers/memtest/memtest.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef MEMTEST_H -#define MEMTEST_H - -#include -#include -#include - -// Class 2 -typedef struct _SYSTEM_PERFORMANCE_INFORMATION -{ - LARGE_INTEGER IdleProcessTime; - LARGE_INTEGER IoReadTransferCount; - LARGE_INTEGER IoWriteTransferCount; - LARGE_INTEGER IoOtherTransferCount; - ULONG IoReadOperationCount; - ULONG IoWriteOperationCount; - ULONG IoOtherOperationCount; - ULONG AvailablePages; - ULONG CommittedPages; - ULONG CommitLimit; - ULONG PeakCommitment; - ULONG PageFaultCount; - ULONG CopyOnWriteCount; - ULONG TransitionCount; - ULONG CacheTransitionCount; - ULONG DemandZeroCount; - ULONG PageReadCount; - ULONG PageReadIoCount; - ULONG CacheReadCount; - ULONG CacheIoCount; - ULONG DirtyPagesWriteCount; - ULONG DirtyWriteIoCount; - ULONG MappedPagesWriteCount; - ULONG MappedWriteIoCount; - ULONG PagedPoolPages; - ULONG NonPagedPoolPages; - ULONG PagedPoolAllocs; - ULONG PagedPoolFrees; - ULONG NonPagedPoolAllocs; - ULONG NonPagedPoolFrees; - ULONG FreeSystemPtes; - ULONG ResidentSystemCodePage; - ULONG TotalSystemDriverPages; - ULONG TotalSystemCodePages; - ULONG NonPagedPoolLookasideHits; - ULONG PagedPoolLookasideHits; - ULONG Spare3Count; - ULONG ResidentSystemCachePage; - ULONG ResidentPagedPoolPage; - ULONG ResidentSystemDriverPage; - ULONG CcFastReadNoWait; - ULONG CcFastReadWait; - ULONG CcFastReadResourceMiss; - ULONG CcFastReadNotPossible; - ULONG CcFastMdlReadNoWait; - ULONG CcFastMdlReadWait; - ULONG CcFastMdlReadResourceMiss; - ULONG CcFastMdlReadNotPossible; - ULONG CcMapDataNoWait; - ULONG CcMapDataWait; - ULONG CcMapDataNoWaitMiss; - ULONG CcMapDataWaitMiss; - ULONG CcPinMappedDataCount; - ULONG CcPinReadNoWait; - ULONG CcPinReadWait; - ULONG CcPinReadNoWaitMiss; - ULONG CcPinReadWaitMiss; - ULONG CcCopyReadNoWait; - ULONG CcCopyReadWait; - ULONG CcCopyReadNoWaitMiss; - ULONG CcCopyReadWaitMiss; - ULONG CcMdlReadNoWait; - ULONG CcMdlReadWait; - ULONG CcMdlReadNoWaitMiss; - ULONG CcMdlReadWaitMiss; - ULONG CcReadAheadIos; - ULONG CcLazyWriteIos; - ULONG CcLazyWritePages; - ULONG CcDataFlushes; - ULONG CcDataPages; - ULONG ContextSwitches; - ULONG FirstLevelTbFills; - ULONG SecondLevelTbFills; - ULONG SystemCalls; -} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; - -#define SystemPerformanceInformation 2 - - -LONG -NTAPI -ZwQuerySystemInformation( - IN ULONG SystemInformationClass, - OUT PVOID SystemInformation, - IN ULONG Length, - OUT PULONG ResultLength -); - - -#endif /* MEMTEST_H */ diff --git a/rostests/drivers/memtest/memtest.rbuild b/rostests/drivers/memtest/memtest.rbuild deleted file mode 100644 index e2f9bef5347..00000000000 --- a/rostests/drivers/memtest/memtest.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - - include/reactos/drivers - ntoskrnl - hal - memtest.c - memtest.rc - diff --git a/rostests/drivers/memtest/memtest.rc b/rostests/drivers/memtest/memtest.rc deleted file mode 100644 index ab1afb56063..00000000000 --- a/rostests/drivers/memtest/memtest.rc +++ /dev/null @@ -1,7 +0,0 @@ -/* $Id: csqtest.rc 21842 2006-05-07 19:16:11Z ion $ */ - -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Memory Manager Information and Testing\0" -#define REACTOS_STR_INTERNAL_NAME "memtest\0" -#define REACTOS_STR_ORIGINAL_FILENAME "memtest.sys\0" -#include diff --git a/rostests/drivers/ntoskrnl/IoEaTest.cpp b/rostests/drivers/ntoskrnl/IoEaTest.cpp deleted file mode 100644 index 4bd18e5e959..00000000000 --- a/rostests/drivers/ntoskrnl/IoEaTest.cpp +++ /dev/null @@ -1,507 +0,0 @@ -// IoEaTest.cpp : Defines the entry point for the console application. -// - -#include "stdafx.h" - -#include -#include - -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; - -#define ULONG_PTR unsigned char* - -#define NTSTATUS unsigned int - -#define STATUS_EA_LIST_INCONSISTENT 0x80000014L -#define STATUS_SUCCESS 0x00000000L - -/* - * @implemented - */ -NTSTATUS -NTAPI -IoCheckEaBufferValidityROS(IN PFILE_FULL_EA_INFORMATION EaBuffer, - IN ULONG EaLength, - OUT PULONG ErrorOffset) -{ - PFILE_FULL_EA_INFORMATION EaBufferEnd; - ULONG NextEaBufferOffset; - UINT IntEaLength; - - /* Lenght of the rest. Inital equal to EaLength */ - IntEaLength = EaLength; - /* Inital EaBuffer equal to EaBuffer */ - EaBufferEnd = EaBuffer; - - /* The rest length of the buffer */ - /* 8 = sizeof(ULONG) + sizeof(UCHAR) + sizeof(UCHAR) + sizeof(USHORT) */ - while (IntEaLength >= 8) - { - /* rest of buffer must greater then the sizeof(FILE_FULL_EA_INFORMATION) + buffer */ - NextEaBufferOffset = EaBufferEnd->EaNameLength+EaBufferEnd->EaValueLength + 9; - if (IntEaLength >= NextEaBufferOffset) - { - /* is the EaBufferName terminated with zero? */ - if (EaBufferEnd->EaName[EaBufferEnd->EaNameLength]==0) - { - /* more EaBuffers ahead */ - if (EaBufferEnd->NextEntryOffset == 0) - { - /* test the rest buffersize */ - IntEaLength = IntEaLength - NextEaBufferOffset; - if (IntEaLength>=0) - { - return STATUS_SUCCESS; - } - } - else - { - /* - From the MSDN (http://msdn2.microsoft.com/en-us/library/ms795740.aspx). - For all entries except the last, the value of NextEntryOffset must be greater - than zero and must fall on a ULONG boundary. - */ - NextEaBufferOffset = ((NextEaBufferOffset + 3) & 0xFFFFFFFC); - if ((EaBufferEnd->NextEntryOffset == NextEaBufferOffset) && (EaBufferEnd->NextEntryOffset>0)) - { - /* rest of buffer must be greater then the next offset */ - IntEaLength = IntEaLength - EaBufferEnd->NextEntryOffset; - if (IntEaLength>=0) - { - EaBufferEnd = (PFILE_FULL_EA_INFORMATION)((ULONG_PTR)EaBufferEnd + EaBufferEnd->NextEntryOffset); - continue; - } - } - } - } - } - break; - } - - if (ErrorOffset != NULL) - { - /* calculate the error offset. Or in */ - *ErrorOffset = (ULONG)((ULONG_PTR)EaBufferEnd - (ULONG_PTR)EaBuffer); - } - - return STATUS_EA_LIST_INCONSISTENT; -} - - - - - -void CheckROSAgainstWinAndPrintResult(PFILE_FULL_EA_INFORMATION WinEaBuffer,PFILE_FULL_EA_INFORMATION ROSEaBuffer,NTSTATUS WinStatus,NTSTATUS ROSStatus,ULONG WinErrorOffset,ULONG ROSErrorOffset,int iBufferLength,int iTestCount,ULONG TestEaLength) -{ - printf("Subtest:%i Status:%x EaErrorOffset:%x TestEaLength:%i passed - ",iTestCount,WinStatus,WinErrorOffset,TestEaLength); - if (memcmp(WinEaBuffer,ROSEaBuffer,iBufferLength)==0) - { - if (WinStatus == ROSStatus) - { - if (WinErrorOffset == ROSErrorOffset) - { - printf("okay\n"); - return; - } - } - } - printf("*failed*\n"); -} - -typedef NTSTATUS (*NTAPI pIoCheckEaBufferValidity) (IN PFILE_FULL_EA_INFORMATION EaBuffer,IN ULONG EaLength,OUT PULONG ErrorOffset); - -typedef PVOID (*NTAPI pMmPageEntireDriver) (IN PVOID AddressWithinSection); - -#define RANDOM_INIT_ERROR 0xDEADBAD0 -#define TEST_BUFFER_LEN 256 - -int _tmain(int argc, _TCHAR* argv[]) -{ - void *pFunction; - pIoCheckEaBufferValidity IoCheckEaBufferValidity; - - HMODULE hKrnlMod = LoadLibrary(L"ntoskrnl.exe"); - if (hKrnlMod) - { - pFunction = GetProcAddress(hKrnlMod,"IoCheckEaBufferValidity"); - IoCheckEaBufferValidity = (pIoCheckEaBufferValidity)pFunction; - if (IoCheckEaBufferValidity!=NULL) - { - /* Check tes Windows Function */ - ULONG ulWinError; - ULONG ulROSError; - NTSTATUS WinStatus; - NTSTATUS ROSStatus; - PFILE_FULL_EA_INFORMATION WinEaBuffer; - PFILE_FULL_EA_INFORMATION ROSEaBuffer; - char szTest[100] = "FltMgr"; - int iTestCount,i; - ULONG TestEaLength; - UCHAR TestEaBufferFlags; - - // Test the flag - TestEaBufferFlags = 0; - - iTestCount = 1; - WinEaBuffer = (PFILE_FULL_EA_INFORMATION)malloc(TEST_BUFFER_LEN); - ROSEaBuffer = (PFILE_FULL_EA_INFORMATION)malloc(TEST_BUFFER_LEN); - - - printf("1.) Test : *********************\n"); - - /* Check EaLength calculation */ - /* Here all zero : only i>9 pass the test with STATUS_SUCCESS */ - - for (i=0;iFlags = TestEaBufferFlags; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - printf("2.) Test : *********************\n"); - - /* Here all zero but EaBuffer::EaName is set : will allways end in STATUS_EA_LIST_INCONSISTENT */ - /* There must a link to EaBuffer::EaName */ - for (i=0;iEaName,"%x",RANDOM_INIT_ERROR); - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - ulROSError = RANDOM_INIT_ERROR; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - printf("3.) Test : *********************\n"); - - /* Here EaBuffer::EaName is set and EaBuffer::EaNameLength is count up. EaLength is maxbuffer: STATUS_SUCCESS when EaBuffer::EaNameLength>strlen(EaBuffer::EaName) */ - TestEaLength = TEST_BUFFER_LEN; - for (i=0;iEaName,"%x",RANDOM_INIT_ERROR); - WinEaBuffer->EaNameLength = i; - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - ROSEaBuffer->EaNameLength = i; - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - printf("4.) Test : *********************\n"); - - /* Here EaBuffer::EaName is set and EaBuffer::EaNameLength is strlen(EaBuffer::EaName). EaLength is count: STATUS_SUCCESS when EaLength>=17 (EaBuffer::EaNameLength+9) */ - for (i=0;iEaName,"%x",RANDOM_INIT_ERROR); - WinEaBuffer->EaNameLength = (UCHAR)strlen(WinEaBuffer->EaName); - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - ROSEaBuffer->EaNameLength = (UCHAR)strlen(ROSEaBuffer->EaName); - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - printf("5.) Test : *********************\n"); - - /* Here EaBuffer::EaName is set and EaBuffer::EaNameLength is strlen(EaBuffer::EaName) EaBuffer::EaValueLength is strlen(EaBuffer::EaName)+1. EaLength is count: STATUS_SUCCESS when EaLength>=26 (EaBuffer::EaNameLength+EaBuffer::EaValueLength+9) */ - for (i=0;iEaName,"%x",RANDOM_INIT_ERROR); - WinEaBuffer->EaNameLength = (UCHAR)strlen(WinEaBuffer->EaName); - WinEaBuffer->EaValueLength = (UCHAR)strlen(WinEaBuffer->EaName)+1; - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - ROSEaBuffer->EaNameLength = (UCHAR)strlen(ROSEaBuffer->EaName); - ROSEaBuffer->EaValueLength = (UCHAR)strlen(ROSEaBuffer->EaName)+1; - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - - printf("6.) Test : *********************\n"); - - /* The same test like 5.) but more data in the buffer*/ - /* Here EaBuffer::EaName is set and EaBuffer::EaNameLength is strlen(EaBuffer::EaName) EaBuffer::EaValueLength is strlen(EaBuffer::EaName)+1. EaLength is count: STATUS_SUCCESS when EaLength>=26 (EaBuffer::EaNameLength+EaBuffer::EaValueLength+9) */ - - for (i=0;iEaName,"%x%x%x",RANDOM_INIT_ERROR,RANDOM_INIT_ERROR,RANDOM_INIT_ERROR); - sprintf(WinEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - WinEaBuffer->EaNameLength = (UCHAR)strlen(WinEaBuffer->EaName); - WinEaBuffer->EaValueLength = (UCHAR)strlen(WinEaBuffer->EaName)+1; - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x%x%x",RANDOM_INIT_ERROR,RANDOM_INIT_ERROR,RANDOM_INIT_ERROR); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - ROSEaBuffer->EaNameLength = (UCHAR)strlen(ROSEaBuffer->EaName); - ROSEaBuffer->EaValueLength = (UCHAR)strlen(ROSEaBuffer->EaName)+1; - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - printf("7.) Test : *********************\n"); - - /* The same test like 6.) but wrong strlen */ - /* Here EaBuffer::EaName is set and EaBuffer::EaNameLength is strlen(EaBuffer::EaName) EaBuffer::EaValueLength is strlen(EaBuffer::EaName)+1. EaLength is count: will allways end in STATUS_EA_LIST_INCONSISTENT */ - for (i=0;iEaName,"%x%x%x",RANDOM_INIT_ERROR,RANDOM_INIT_ERROR,RANDOM_INIT_ERROR); - sprintf(WinEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - WinEaBuffer->EaNameLength = (UCHAR)strlen(WinEaBuffer->EaName)-1; - WinEaBuffer->EaValueLength = (UCHAR)strlen(WinEaBuffer->EaName)+2; - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x%x%x",RANDOM_INIT_ERROR,RANDOM_INIT_ERROR,RANDOM_INIT_ERROR); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - ROSEaBuffer->EaNameLength = (UCHAR)strlen(ROSEaBuffer->EaName)-1; - ROSEaBuffer->EaValueLength = (UCHAR)strlen(ROSEaBuffer->EaName)+2; - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - - printf("8.) Test : *********************\n"); - - /* Here WinEaBuffer->NextEntryOffset test : STATUS_SUCCESS when NextEntryOffset=0 else STATUS_EA_LIST_INCONSISTENT when NextEntryOffset = 28 = 8+8+9 ((WinEaBuffer->EaNameLength+WinEaBuffer->EaNameLength+9)+3)&0xFFFFFFFC then ErrorOffset 28 */ - /* From the MSDN (http://msdn2.microsoft.com/en-us/library/ms795740.aspx). For all entries except the last, the value of NextEntryOffset must be greater than zero and must fall on a ULONG boundary.*/ - for (i=0;iEaName,"%x%x%x",RANDOM_INIT_ERROR,RANDOM_INIT_ERROR,RANDOM_INIT_ERROR); - sprintf(WinEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - WinEaBuffer->EaNameLength = (UCHAR)strlen(WinEaBuffer->EaName); - WinEaBuffer->EaValueLength = (UCHAR)strlen(WinEaBuffer->EaName); - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinEaBuffer->NextEntryOffset = i; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x%x%x",RANDOM_INIT_ERROR,RANDOM_INIT_ERROR,RANDOM_INIT_ERROR); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - ROSEaBuffer->EaNameLength = (UCHAR)strlen(ROSEaBuffer->EaName); - ROSEaBuffer->EaValueLength = (UCHAR)strlen(ROSEaBuffer->EaName); - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSEaBuffer->NextEntryOffset = i; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - printf("%i-",ROSEaBuffer->NextEntryOffset); - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - printf("9.) Test : *********************\n"); - - /* Here WinEaBuffer->NextEntryOffset test wrong strlen: STATUS_SUCCESS NextEntryOffset=0 & NextEntryOffset = 28 = 8+8+9 ((WinEaBuffer->EaNameLength+WinEaBuffer->EaNameLength+9)+3)&0xFFFFFFFC */ - /* From the MSDN (http://msdn2.microsoft.com/en-us/library/ms795740.aspx). For all entries except the last, the value of NextEntryOffset must be greater than zero and must fall on a ULONG boundary.*/ - for (i=0;iEaName,"%x",RANDOM_INIT_ERROR); - - WinEaBuffer->EaNameLength = (UCHAR)strlen(WinEaBuffer->EaName)-1; - WinEaBuffer->EaValueLength = (UCHAR)strlen(WinEaBuffer->EaName); - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinEaBuffer->NextEntryOffset = i; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - - ROSEaBuffer->EaNameLength = (UCHAR)strlen(ROSEaBuffer->EaName)-1; - ROSEaBuffer->EaValueLength = (UCHAR)strlen(ROSEaBuffer->EaName); - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSEaBuffer->NextEntryOffset = i; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - printf("%i-",ROSEaBuffer->NextEntryOffset); - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - printf("10.) Test : *********************\n"); - - /* Here WinEaBuffer->NextEntryOffset test wrong strlen: STATUS_SUCCESS NextEntryOffset=0 & NextEntryOffset = 28 = 8+8+9 ((WinEaBuffer->EaNameLength+WinEaBuffer->EaNameLength+9)+3)&0xFFFFFFFC */ - /* From the MSDN (http://msdn2.microsoft.com/en-us/library/ms795740.aspx). For all entries except the last, the value of NextEntryOffset must be greater than zero and must fall on a ULONG boundary.*/ - for (i=0;iEaName,"%x",RANDOM_INIT_ERROR); - - WinEaBuffer->EaNameLength = (UCHAR)strlen(WinEaBuffer->EaName)+1; - WinEaBuffer->EaValueLength = (UCHAR)strlen(WinEaBuffer->EaName)+1; - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinEaBuffer->NextEntryOffset = i; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR); - - ROSEaBuffer->EaNameLength = (UCHAR)strlen(ROSEaBuffer->EaName)+1; - ROSEaBuffer->EaValueLength = (UCHAR)strlen(ROSEaBuffer->EaName)+1; - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSEaBuffer->NextEntryOffset = i; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - printf("%i-",ROSEaBuffer->NextEntryOffset); - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - printf("11.) Test : *********************\n"); - - /* Here WinEaBuffer->NextEntryOffset : */ - for (i=0;iEaName,"%x",RANDOM_INIT_ERROR,RANDOM_INIT_ERROR); - - WinEaBuffer->EaNameLength = (UCHAR)strlen(WinEaBuffer->EaName); - WinEaBuffer->EaValueLength = (UCHAR)strlen(WinEaBuffer->EaName); - ulWinError = RANDOM_INIT_ERROR; - WinEaBuffer->Flags = TestEaBufferFlags; - WinEaBuffer->NextEntryOffset = ((WinEaBuffer->EaNameLength+WinEaBuffer->EaNameLength+9)+3)&0xFFFFFFFC; - WinStatus = IoCheckEaBufferValidity(WinEaBuffer,TestEaLength,&ulWinError); - - // ROS - memset(ROSEaBuffer,0,TEST_BUFFER_LEN); - sprintf(ROSEaBuffer->EaName,"%x",RANDOM_INIT_ERROR,RANDOM_INIT_ERROR); - - ROSEaBuffer->EaNameLength = (UCHAR)strlen(ROSEaBuffer->EaName); - ROSEaBuffer->EaValueLength = (UCHAR)strlen(ROSEaBuffer->EaName); - ulROSError = RANDOM_INIT_ERROR; - ROSEaBuffer->Flags = TestEaBufferFlags; - ROSEaBuffer->NextEntryOffset = ((ROSEaBuffer->EaNameLength+ROSEaBuffer->EaNameLength+9)+3)&0xFFFFFFFC;; - ROSStatus = IoCheckEaBufferValidityROS(ROSEaBuffer,TestEaLength,&ulROSError); - - printf("%i-",ROSEaBuffer->NextEntryOffset); - CheckROSAgainstWinAndPrintResult(WinEaBuffer,ROSEaBuffer,WinStatus,ROSStatus,ulWinError,ulWinError,TEST_BUFFER_LEN,iTestCount,TestEaLength); - iTestCount++; - } - - - free(WinEaBuffer); - free(ROSEaBuffer); - } - - FreeLibrary(hKrnlMod); - } - else - { - DWORD dwLastError = GetLastError(); - switch (dwLastError) - { - case ERROR_MOD_NOT_FOUND: - printf("ERROR_MOD_NOT_FOUND\n"); - break; - case ERROR_BAD_EXE_FORMAT: - printf("ERROR_BAD_EXE_FORMAT\n"); - break; - } - } - return 0; -} - diff --git a/rostests/dxtest/ddraw/DDraw/available_mem.cpp b/rostests/dxtest/ddraw/DDraw/available_mem.cpp deleted file mode 100644 index 6a93fb956c7..00000000000 --- a/rostests/dxtest/ddraw/DDraw/available_mem.cpp +++ /dev/null @@ -1,269 +0,0 @@ - -BOOL Test_GetAvailableVidMem (INT* passed, INT* failed) -{ - LPDIRECTDRAW7 DirectDraw; - - /* Preparations */ - if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - printf("ERROR: Failed to set up ddraw\n"); - return FALSE; - } - - /* Here we go */ - DWORD Total, Free; - DDSCAPS2 Caps = { 0 }; - - TEST (DirectDraw->GetAvailableVidMem(&Caps, NULL, NULL) == DDERR_INVALIDPARAMS); - TEST (DirectDraw->GetAvailableVidMem(NULL, &Total, &Free) == DDERR_INVALIDPARAMS); - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - /* testing caps */ - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_RESERVED1; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_ALPHA; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_BACKBUFFER; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_COMPLEX; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_FLIP; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_FRONTBUFFER; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_OFFSCREENPLAIN; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_OVERLAY; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_PALETTE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_PRIMARYSURFACE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_RESERVED3; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_SYSTEMMEMORY; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_TEXTURE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_3DDEVICE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_VIDEOMEMORY; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_VISIBLE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_WRITEONLY; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_ZBUFFER; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_OWNDC; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_LIVEVIDEO; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_HWCODEC; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_MODEX; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_MIPMAP; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_RESERVED2; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_ALLOCONLOAD; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_VIDEOPORT; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_LOCALVIDMEM; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps = DDSCAPS_NONLOCALVIDMEM; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = 0x01; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDCAPS); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_RESERVED4; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_HINTDYNAMIC; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_HINTSTATIC; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_RESERVED1; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_RESERVED2; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_OPAQUE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_HINTANTIALIASING; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_CUBEMAP; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_CUBEMAP_POSITIVEX; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_CUBEMAP_NEGATIVEX; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_CUBEMAP_POSITIVEY; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_CUBEMAP_NEGATIVEY; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_CUBEMAP_POSITIVEZ; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_CUBEMAP_NEGATIVEZ; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_MIPMAPSUBLEVEL; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_D3DTEXTUREMANAGE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_DONOTPERSIST; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_STEREOSURFACELEFT; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_VOLUME; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_NOTUSERLOCKABLE; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_POINTS; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_RTPATCHES; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_NPATCHES; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_RESERVED3; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_DISCARDBACKBUFFER; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_ENABLEALPHACHANNEL; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_EXTENDEDFORMATPRIMARY; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps2 = DDSCAPS2_ADDITIONALPRIMARY; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps3 = ~(DDSCAPS3_MULTISAMPLE_QUALITY_MASK | DDSCAPS3_MULTISAMPLE_MASK | DDSCAPS3_RESERVED1 | DDSCAPS3_RESERVED2 | DDSCAPS3_LIGHTWEIGHTMIPMAP | DDSCAPS3_AUTOGENMIPMAP | DDSCAPS3_DMAP); - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDCAPS); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps3 = (DDSCAPS3_MULTISAMPLE_QUALITY_MASK | DDSCAPS3_MULTISAMPLE_MASK | DDSCAPS3_RESERVED1 | DDSCAPS3_RESERVED2 | DDSCAPS3_LIGHTWEIGHTMIPMAP | DDSCAPS3_AUTOGENMIPMAP | DDSCAPS3_DMAP); - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); - - memset(&Caps,0,sizeof(DDSCAPS2)); - Caps.dwCaps4 = 1; - TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDCAPS ); - - DirectDraw->Release(); - - return TRUE; -} diff --git a/rostests/dxtest/ddraw/DDraw/create.cpp b/rostests/dxtest/ddraw/DDraw/create.cpp deleted file mode 100644 index ffa612b18c6..00000000000 --- a/rostests/dxtest/ddraw/DDraw/create.cpp +++ /dev/null @@ -1,157 +0,0 @@ -#include "ddrawtest.h" - -HWND CreateBasicWindow (VOID); - -BOOL Test_CreateDDraw (INT* passed, INT* failed) -{ - LPDIRECTDRAW7 DirectDraw; - IDirectDraw* DirectDraw2; - - /*** FIXME: Test first parameter using EnumDisplayDrivers ***/ - DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL); - - TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, (IUnknown*)0xdeadbeef) == CLASS_E_NOAGGREGATION); - TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw4, NULL) == DDERR_INVALIDPARAMS); - TEST (DirectDrawCreateEx(NULL, NULL, IID_IDirectDraw7, NULL) == DDERR_INVALIDPARAMS); - - DirectDraw = NULL; - TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) == DD_OK); - if(DirectDraw) - { - TEST (DirectDraw->Initialize(NULL) == DDERR_ALREADYINITIALIZED); - TEST (DirectDraw->Release() == 0); - } - - DirectDraw2 = NULL; - TEST (DirectDrawCreate(NULL ,&DirectDraw2, NULL) == DD_OK); - if(DirectDraw2) - { - TEST (DirectDraw2->QueryInterface(IID_IDirectDraw7, (PVOID*)&DirectDraw) == 0); - TEST (DirectDraw2->AddRef() == 2); - TEST (DirectDraw->AddRef() == 2); - TEST (DirectDraw->Release() == 1); - TEST (DirectDraw->Release() == 0); - TEST (DirectDraw2->Release() == 1); - TEST (DirectDraw2->Release() == 0); - } - - return TRUE; -} - -BOOL Test_SetCooperativeLevel (INT* passed, INT* failed) -{ - HWND hwnd; - LPDIRECTDRAW7 DirectDraw; - - /* Preparations */ - if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - printf("ERROR: Failed to set up ddraw\n"); - return FALSE; - } - - if(!( hwnd = CreateBasicWindow() )) - { - printf("ERROR: Failed to create window\n"); - DirectDraw->Release(); - return FALSE; - } - - /* The Test */ - TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_FULLSCREEN) == DDERR_INVALIDPARAMS ); - TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN) == DDERR_INVALIDPARAMS ); - - TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL) == DD_OK ); - TEST ( DirectDraw->Compact() == DDERR_NOEXCLUSIVEMODE ); - - - TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE) == DDERR_INVALIDPARAMS ); - TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN) == DDERR_INVALIDPARAMS); - TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL | DDSCL_ALLOWMODEX) == DDERR_INVALIDPARAMS ); - TEST ( DirectDraw->SetCooperativeLevel ((HWND)0xdeadbeef, DDSCL_NORMAL) == DDERR_INVALIDPARAMS); - - TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE) == DD_OK); - TEST ( DirectDraw->Compact() == DD_OK ); - TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWMODEX) == DD_OK); - TEST ( DirectDraw->Compact() == DD_OK ); - TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_NORMAL) == DD_OK ); - TEST ( DirectDraw->Compact() == DDERR_NOEXCLUSIVEMODE ); - TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL) == DD_OK ); - TEST ( DirectDraw->Compact() == DDERR_NOEXCLUSIVEMODE ); - - TEST ( DirectDraw->TestCooperativeLevel() == DD_OK ); // I do not get what this API does it always seems to return DD_OK - - DirectDraw->Release(); - - return TRUE; -} - -BOOL Test_GetFourCCCodes (INT* passed, INT* failed) -{ - LPDIRECTDRAW7 DirectDraw; - - /* Preparations */ - if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - printf("ERROR: Failed to set up ddraw\n"); - return FALSE; - } - - /* Here we go */ - DWORD dwNumCodes, *lpCodes; - TEST (DirectDraw->GetFourCCCodes(NULL, (PDWORD)0xdeadbeef) == DDERR_INVALIDPARAMS); - - TEST (DirectDraw->GetFourCCCodes(&dwNumCodes, NULL) == DD_OK && dwNumCodes); - lpCodes = (PDWORD)HeapAlloc(GetProcessHeap(), 0, sizeof(DWORD)*dwNumCodes); - *lpCodes = 0; - TEST ( DirectDraw->GetFourCCCodes(NULL, lpCodes) == DDERR_INVALIDPARAMS ); - TEST (DirectDraw->GetFourCCCodes(&dwNumCodes, lpCodes) == DD_OK && *lpCodes ); - - DirectDraw->Release(); - - return TRUE; -} - -BOOL Test_GetDeviceIdentifier (INT* passed, INT* failed) -{ - LPDIRECTDRAW7 DirectDraw; - DDDEVICEIDENTIFIER2 pDDDI; - //OLECHAR GuidStr[100]; - - /* Preparations */ - if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - printf("ERROR: Failed to set up ddraw\n"); - return FALSE; - } - - TEST ( DirectDraw->GetDeviceIdentifier(NULL, 0) == DDERR_INVALIDPARAMS ); - TEST ( DirectDraw->GetDeviceIdentifier(NULL, ~DDGDI_GETHOSTIDENTIFIER) == DDERR_INVALIDPARAMS ); - TEST ( DirectDraw->GetDeviceIdentifier(NULL, DDGDI_GETHOSTIDENTIFIER) == DDERR_INVALIDPARAMS ); - - memset(&pDDDI,0,sizeof(DDDEVICEIDENTIFIER2)); - TEST ( DirectDraw->GetDeviceIdentifier(&pDDDI, 0) == DD_OK ); - -/* - StringFromGUID2(pDDDI.guidDeviceIdentifier, GuidStr, 100); - printf("1. \n"); - printf("szDriver : %s\n",pDDDI.szDriver); - printf("szDescription : %s\n",pDDDI.szDescription); - printf("liDriverVersion : 0x%08x . 0x%08x\n", pDDDI.liDriverVersion.HighPart, pDDDI.liDriverVersion.LowPart); - printf("dwVendorId : 0x%08x\n",pDDDI.dwVendorId); - printf("dwDeviceId : 0x%08x\n",pDDDI.dwDeviceId); - printf("dwSubSysId : 0x%08x\n",pDDDI.dwSubSysId); - printf("dwRevision : 0x%08x\n",pDDDI.dwRevision); - printf("guidDeviceIdentifier : %ls\n",GuidStr); - printf("dwWHQLLevel : 0x%08x\n",pDDDI.dwWHQLLevel); -*/ - - memset(&pDDDI,0,sizeof(DDDEVICEIDENTIFIER2)); - TEST ( DirectDraw->GetDeviceIdentifier(&pDDDI, DDGDI_GETHOSTIDENTIFIER) == DD_OK ); - memset(&pDDDI,0,sizeof(DDDEVICEIDENTIFIER2)); - TEST ( DirectDraw->GetDeviceIdentifier(&pDDDI, ~DDGDI_GETHOSTIDENTIFIER) == DDERR_INVALIDPARAMS ); - - DirectDraw->Release(); - - return TRUE; -} diff --git a/rostests/dxtest/ddraw/DDraw/display_modes.cpp b/rostests/dxtest/ddraw/DDraw/display_modes.cpp deleted file mode 100644 index 9915af2e374..00000000000 --- a/rostests/dxtest/ddraw/DDraw/display_modes.cpp +++ /dev/null @@ -1,127 +0,0 @@ -typedef struct -{ - INT* passed; - INT* failed; - LPDIRECTDRAW7 DirectDraw; -} ENUMCONTEXT; - -BOOL Test_GetMonitorFrequency (INT* passed, INT* failed); - -HRESULT CALLBACK DummyEnumDisplayModes( LPDDSURFACEDESC2 pDDSD, ENUMCONTEXT* Context ) -{ - return DDENUMRET_OK; -} - -HRESULT CALLBACK EnumDisplayModes( LPDDSURFACEDESC2 pDDSD, ENUMCONTEXT* Context ) -{ - static int setcout = 0; - if(setcout >= 5) - return DDENUMRET_OK; - - DWORD lpdwFrequency = 0; - INT* passed = Context->passed; - INT* failed = Context->failed; - DDSURFACEDESC2 DisplayMode = {0}; - DisplayMode.dwSize = sizeof(DDSURFACEDESC2); - - TEST ( pDDSD->dwFlags == DDSD_HEIGHT | DDSD_WIDTH | DDSD_PITCH | DDSD_PIXELFORMAT | DDSD_REFRESHRATE); - TEST ( pDDSD->ddpfPixelFormat.dwFlags == DDPF_RGB | DDPF_PALETTEINDEXED8 || pDDSD->ddpfPixelFormat.dwFlags == DDPF_RGB ); - TEST ( Context->DirectDraw->SetDisplayMode (pDDSD->dwWidth, pDDSD->dwHeight, pDDSD->ddpfPixelFormat.dwRGBBitCount, pDDSD->dwRefreshRate, 0) == DD_OK); - TEST ( Context->DirectDraw->GetMonitorFrequency (&lpdwFrequency) == DD_OK && lpdwFrequency == pDDSD->dwRefreshRate); - TEST ( Context->DirectDraw->GetDisplayMode (&DisplayMode) == DD_OK - && pDDSD->dwHeight == DisplayMode.dwHeight - && pDDSD->dwWidth == DisplayMode.dwWidth - && pDDSD->dwRefreshRate == DisplayMode.dwRefreshRate - && pDDSD->ddpfPixelFormat.dwRGBBitCount == DisplayMode.ddpfPixelFormat.dwRGBBitCount - && DisplayMode.dwFlags == DDSD_HEIGHT | DDSD_WIDTH | DDSD_PITCH | DDSD_PIXELFORMAT | DDSD_REFRESHRATE ); - - setcout++; - return DDENUMRET_OK; -} - -BOOL Test_DisplayModes (INT* passed, INT* failed) -{ - /*** FIXME: Also test with surface as parameter; try busy/locked surface as well ***/ - LPDIRECTDRAW7 DirectDraw; - - /* Preparations */ - if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - printf("ERROR: Failed to set up ddraw\n"); - return FALSE; - } - - ENUMCONTEXT Context = {passed, failed, DirectDraw}; - - /* The Test */ - - Test_GetMonitorFrequency(passed, failed); - - /* First try with some generic display modes */ - TEST ( DirectDraw->SetDisplayMode (1586, 895, 0, 0, 0) == DDERR_UNSUPPORTED ); - TEST ( DirectDraw->SetDisplayMode (0, 0, 0, 0, 0x123) == DDERR_INVALIDPARAMS ); - - // does this change the display mode to DDSCL_EXCLUSIVE ? - TEST ( DirectDraw->SetDisplayMode (0, 0, 0, 0, 0) == DD_OK ); - TEST ( DirectDraw->SetDisplayMode (800, 600, 0, 0, 0) == DD_OK ); - TEST ( DirectDraw->SetDisplayMode (0, 0, 16, 0, 0) == DD_OK ); - - TEST ( DirectDraw->GetDisplayMode (NULL) == DDERR_INVALIDPARAMS ); - DDSURFACEDESC2 DisplayMode = {0}; - TEST ( DirectDraw->GetDisplayMode (&DisplayMode) == DDERR_INVALIDPARAMS ); - - //* Now try getting vaild modes from drive */ - TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES, NULL, (PVOID)&Context, NULL) == DDERR_INVALIDPARAMS); - TEST (DirectDraw->EnumDisplayModes(0, NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK ); - TEST (DirectDraw->EnumDisplayModes(DDEDM_REFRESHRATES, NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK ); - TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES, NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK ); - TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES|DDEDM_REFRESHRATES, NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)EnumDisplayModes) == DD_OK); - - TEST (DirectDraw->RestoreDisplayMode() == DD_OK); - - DirectDraw->Release(); - - return TRUE; -} - -BOOL Test_GetMonitorFrequency (INT* passed, INT* failed) -{ - LPDIRECTDRAW7 DirectDraw; - LPDDRAWI_DIRECTDRAW_INT This; - - /* Preparations */ - if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - printf("ERROR: Failed to set up ddraw\n"); - return FALSE; - } - This = (LPDDRAWI_DIRECTDRAW_INT)DirectDraw; - - /* Here we go */ - DWORD lpFreq; - DWORD temp; - HRESULT retVal; - TEST (DirectDraw->GetMonitorFrequency((PDWORD)0xdeadbeef) == DDERR_INVALIDPARAMS); - TEST (DirectDraw->GetMonitorFrequency(NULL) == DDERR_INVALIDPARAMS); - - // result depends on our graphices card - retVal = DirectDraw->GetMonitorFrequency((PDWORD)&lpFreq); - TEST ( retVal == DD_OK || retVal == DDERR_UNSUPPORTED); - - /* Test by hacking interal structures */ - - // should return DDERR_UNSUPPORTED - This->lpLcl->lpGbl->dwMonitorFrequency = 0; - TEST (DirectDraw->GetMonitorFrequency(&temp) == DDERR_UNSUPPORTED); - - // should return DD_OK - This->lpLcl->lpGbl->dwMonitorFrequency = 85; - TEST (DirectDraw->GetMonitorFrequency(&temp) == DD_OK); - - /* Restore */ - This->lpLcl->lpGbl->dwMonitorFrequency = lpFreq; - - DirectDraw->Release(); - - return TRUE; -} \ No newline at end of file diff --git a/rostests/dxtest/ddraw/Surface/blt.cpp b/rostests/dxtest/ddraw/Surface/blt.cpp deleted file mode 100644 index ed3024fc0f5..00000000000 --- a/rostests/dxtest/ddraw/Surface/blt.cpp +++ /dev/null @@ -1,157 +0,0 @@ - -DWORD GetPixel (LPDIRECTDRAWSURFACE7 Surface, UINT x, UINT y) -{ - DWORD ret; - RECT rect = {x, y, x+1, y+1}; - DDSURFACEDESC2 desc = {0}; - desc.dwSize = sizeof(DDSURFACEDESC2); - - if(Surface->Lock(&rect, &desc, DDLOCK_READONLY | DDLOCK_WAIT, NULL)) - { - printf("ERROR: Unable to lock surface\n"); - return 0xdeadbeef; - } - - ret = *((DWORD *)desc.lpSurface); - - if(Surface->Unlock (&rect) != DD_OK) - { - printf("ERROR: Unable to unlock surface ?!\n"); - } - - return ret; -} - -VOID Blt_Test (LPDIRECTDRAWSURFACE7 Surface, INT* passed, INT* failed) -{ - LPDIRECTDRAWSURFACE7 Source; - if(!CreateSurface(&Source)) - return; - - // The following has been tested with Nvidea hardware - // the results might differently with other graphic - // card drivers. - mbosma - - // FIXME: Test Color Key (DDBLT_KEYDEST / DDBLT_KEYSRC / DDBLT_KEYDESTOVERRIDE / DDBLT_KEYSRCOVERRIDE) - - // General Tests - DDBLTFX bltfx; - TEST (Surface->Blt(NULL, NULL, NULL, 0, NULL) == DDERR_INVALIDPARAMS); - TEST (Surface->Blt(NULL, Surface, NULL, 0, NULL) == DD_OK ); // blting to itself - - TEST (Surface->Blt(NULL, NULL, NULL, DDBLT_WAIT|DDBLT_DDFX, &bltfx) == DDERR_INVALIDPARAMS); - bltfx.dwDDFX = DDBLTFX_NOTEARING; - TEST (Surface->Blt(NULL, NULL, NULL, DDBLT_WAIT|DDBLT_DDFX, &bltfx) == DDERR_INVALIDPARAMS); - bltfx.dwSize = sizeof(DDBLTFX); - TEST (Surface->Blt(NULL, NULL, NULL, DDBLT_WAIT, &bltfx) == DDERR_INVALIDPARAMS); - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_WAIT|DDBLT_DDFX, &bltfx) == DD_OK); // don't know why this works on a offscreen surfaces - - // Test color filling - bltfx.dwFillColor = RGB(0, 255, 0); - TEST (Source->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &bltfx) == DD_OK); - RECT rect = {100, 100, 200, 200}; - bltfx.dwFillColor = RGB(255, 255, 0); - TEST (Source->Blt(&rect, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &bltfx) == DD_OK); - TEST (GetPixel(Source, 0, 0) == RGB(0, 255, 0)); - TEST (GetPixel(Source, 100, 100) == RGB(255, 255, 0)); - - // Test DestRect and SrcRect - RECT SourceRect = {100, 100, 200, 200}; - RECT DestRect = {0, 0, 200, 100}; - - TEST (Surface->Blt(&SourceRect, Source, &DestRect, 0, NULL) == DD_OK); - TEST (GetPixel(Surface, 100, 100) == RGB(0, 255, 0)); // Src bigger: normal blt - - TEST (Surface->Blt(&DestRect, Source, &SourceRect, 0, NULL) == DD_OK); - TEST (GetPixel(Surface, 0, 0) == 0x00ffbf); // Dest bigger: wtf ?? - - DestRect.right = 100; // both are same size now - TEST (Surface->Blt(&DestRect, Source, &SourceRect, 0, NULL) == DD_OK); - TEST (GetPixel(Surface, 0, 0) == RGB(255, 255, 0)); - - RECT TooBig = {100, 100, 200, 250}; - TEST (Surface->Blt(&TooBig, Source, &SourceRect, 0, NULL) == DDERR_INVALIDRECT); - TEST (Surface->Blt(&DestRect, Source, &TooBig, 0, NULL) == DDERR_INVALIDRECT); - - // Test Rotation - bltfx.dwDDFX = DDBLTFX_MIRRORLEFTRIGHT|DDBLTFX_MIRRORUPDOWN; - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_WAIT|DDBLT_DDFX, &bltfx) == DD_OK); - TEST (GetPixel(Surface, 0, 0) == RGB(255, 255, 0)); - - bltfx.dwDDFX = DDBLTFX_ROTATE180; - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_DDFX, &bltfx) == DDERR_NOROTATIONHW); - - //bltfx.dwRotationAngle = - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_ROTATIONANGLE, &bltfx) == DDERR_NOROTATIONHW); - - // Test Raster Operations - bltfx.dwROP = BLACKNESS; - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_WAIT|DDBLT_ROP, &bltfx) == DD_OK); - TEST(GetPixel(Surface, 0, 0) == RGB(0, 0, 0)); - bltfx.dwROP = WHITENESS; - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_WAIT|DDBLT_ROP, &bltfx) == DD_OK); - TEST(GetPixel(Surface, 0, 0) == RGB(255, 255, 255)); - bltfx.dwROP = SRCCOPY; // this flag actually does nothing - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_WAIT|DDBLT_ROP, &bltfx) == DD_OK); - TEST(GetPixel(Surface, 0, 0) == RGB(0, 255, 0)); - bltfx.dwROP = SRCAND; - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_WAIT|DDBLT_ROP, &bltfx) == DDERR_NORASTEROPHW); - - // Test Direct Draw Raster Operations - bltfx.dwDDROP = 0x123; - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_WAIT|DDBLT_DDROPS, &bltfx) == DDERR_NODDROPSHW); - - // Streching - bltfx.dwDDFX = DDBLTFX_ARITHSTRETCHY; - TEST (Surface->Blt(NULL, Source, NULL, DDBLT_WAIT|DDBLT_DDFX, &bltfx) == DDERR_NOSTRETCHHW); -} - -VOID GetBltStatus_Test (LPDIRECTDRAWSURFACE7 Surface, INT* passed, INT* failed) -{ - TEST (Surface->GetBltStatus(0) == DDERR_INVALIDPARAMS); - TEST (Surface->GetBltStatus(DDGBS_CANBLT) == DD_OK); - //TEST (Surface->GetBltStatus(DDGBS_ISBLTDONE) == DD_OK); - - // Lock Surface - DDSURFACEDESC2 desc = {0}; - desc.dwSize = sizeof(DDSURFACEDESC2); - Surface->Lock(NULL, &desc, DDLOCK_WAIT, NULL); - TEST (Surface->GetBltStatus(DDGBS_ISBLTDONE) == DD_OK); - TEST (Surface->GetBltStatus(DDGBS_CANBLT) == DD_OK); // does not return DDERR_SURFACEBUSY for me as msdn says (xp,nvidea) - Surface->Unlock (NULL); - - // Try to produce busy surface by filling it 500 times - DDBLTFX bltfx; - bltfx.dwSize = sizeof(DDBLTFX); - bltfx.dwFillColor = RGB(0, 0, 0); - - int i; - for(i=0; i<500; i++) - Surface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL, &bltfx); - - TEST (Surface->GetBltStatus(DDGBS_ISBLTDONE) == DDERR_WASSTILLDRAWING); - TEST (Surface->GetBltStatus(DDGBS_CANBLT) == DD_OK); -} - -BOOL Test_Blt (INT* passed, INT* failed) -{ - LPDIRECTDRAWSURFACE7 Surface; - if(!CreateSurface(&Surface)) - return FALSE; - - // Test GetPixel (needs Lock API) - DDBLTFX bltfx; - bltfx.dwSize = sizeof(DDBLTFX); - bltfx.dwFillColor = RGB(0, 0, 0); - Surface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &bltfx); - if(GetPixel(Surface, 0, 0) != RGB(0, 0, 0)) - return FALSE; - - // The tests - TEST(Surface->BltBatch(NULL, 0, 0) == DDERR_UNSUPPORTED); - Blt_Test (Surface, passed, failed); - GetBltStatus_Test (Surface, passed, failed); - - Surface->Release(); - return TRUE; -} \ No newline at end of file diff --git a/rostests/dxtest/ddraw/Surface/caps_tests.h b/rostests/dxtest/ddraw/Surface/caps_tests.h deleted file mode 100644 index 0a1394f6582..00000000000 --- a/rostests/dxtest/ddraw/Surface/caps_tests.h +++ /dev/null @@ -1,2311 +0,0 @@ -/* - * The following test cases have been generated automatically. Many of them might be - * redundant. Also some of them might fail on other other machines then the one I - * used (win xp, nvidea, 32 bit color deepth) - mbosma - * - */ - -TEST(TestCaps("0", 0x0, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN", 0x40, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY", 0x80, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE", 0x200, DD_OK, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_SYSTEMMEMORY", 0x800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0xa00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_TEXTURE", 0x1000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE", 0x2000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN", 0x2040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY", 0x2080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE", 0x2200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY", 0x2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_TEXTURE", 0x3000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_VIDEOMEMORY", 0x4000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x4040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x4080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x4200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x5000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY", 0x6000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x6040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x6080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x6200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x7000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x40800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x40840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x40880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x40a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x41800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x42800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x42840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x42880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x42a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x43800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO", 0x80000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN", 0x80040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY", 0x80080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE", 0x80200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY", 0x80800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x80840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x80880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x80a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE", 0x81000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x81800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO", 0x82000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN", 0x82040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY", 0x82080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE", 0x82200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY", 0x82800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x82840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x82880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x82a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE", 0x83000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x83800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOMEMORY", 0x84000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x84040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x84080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x84200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x85000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOMEMORY", 0x86000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x86040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x86080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x86200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x87000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0xc0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0xc0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0xc0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0xc0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0xc1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0xc2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0xc2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0xc2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0xc2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0xc3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC", 0x100000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN", 0x100040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY", 0x100080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE", 0x100200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY", 0x100800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x100840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x100880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x100a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_TEXTURE", 0x101000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x101800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC", 0x102000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN", 0x102040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY", 0x102080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE", 0x102200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY", 0x102800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x102840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x102880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x102a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE", 0x103000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x103800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_VIDEOMEMORY", 0x104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_VIDEOMEMORY", 0x106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x140800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x140840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x140880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x140a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x141800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x142800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x142840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x142880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x142a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x143800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO", 0x180000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN", 0x180040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY", 0x180080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE", 0x180200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY", 0x180800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x180840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x180880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x180a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE", 0x181000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x181800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO", 0x182000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN", 0x182040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY", 0x182080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE", 0x182200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY", 0x182800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x182840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x182880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x182a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE", 0x183000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x183800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOMEMORY", 0x184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOMEMORY", 0x186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x1c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x1c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x1c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x1c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x1c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x1c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x1c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x1c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x1c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x1c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX", 0x200000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN", 0x200040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY", 0x200080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE", 0x200200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY", 0x200800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x200840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x200880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x200a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x201000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x201800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX", 0x202000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN", 0x202040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY", 0x202080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE", 0x202200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY", 0x202800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x202840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x202880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x202a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x203000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x203800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x240800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x240840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x240880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x240a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x241800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x242800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x242840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x242880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x242a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x243800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX", 0x280000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN", 0x280040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY", 0x280080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE", 0x280200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY", 0x280800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x280840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x280880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x280a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x281000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x281800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX", 0x282000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN", 0x282040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY", 0x282080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE", 0x282200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY", 0x282800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x282840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x282880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x282a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x283000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x283800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x2c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x2c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x2c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x2c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x2c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x2c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x2c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x2c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x2c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x2c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX", 0x300000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN", 0x300040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY", 0x300080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE", 0x300200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY", 0x300800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x300840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x300880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x300a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x301000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x301800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX", 0x302000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN", 0x302040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY", 0x302080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE", 0x302200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY", 0x302800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x302840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x302880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x302a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x303000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x303800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x340800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x340840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x340880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x340a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x341800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x342800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x342840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x342880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x342a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x343800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX", 0x380000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN", 0x380040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY", 0x380080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE", 0x380200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY", 0x380800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x380840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x380880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x380a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x381000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x381800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX", 0x382000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN", 0x382040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY", 0x382080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE", 0x382200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY", 0x382800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY", 0x382840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY", 0x382880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x382a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x383000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x383800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x3c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x3c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x3c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x3c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x3c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x3c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x3c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY", 0x3c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY", 0x3c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x3c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_TEXTURE", 0x4001000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4001800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_TEXTURE", 0x4003000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4003800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4041800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4043800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE", 0x4081000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4081800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE", 0x4083000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4083800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE", 0x4101000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4101800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE", 0x4103000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4103800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4141800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4143800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE", 0x4181000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4181800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE", 0x4183000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4183800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x41c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x41c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x4201000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4201800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x4203000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4203800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4241800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4243800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x4281000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4281800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x4283000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4283800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x42c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x42c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x4301000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4301800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x4303000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4303800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4341800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4343800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x4381000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4381800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE", 0x4383000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x4383800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x4387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x43c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x43c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_VIDEOPORT", 0x8000000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8000040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8000080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8000200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8000800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8000840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8000880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8000a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8001000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8001800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_VIDEOPORT", 0x8002000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8002040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8002080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8002200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8002800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8002840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8002880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8002a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8003000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8003800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8040800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8040840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8040880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8040a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8041800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8042800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8042840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8042880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8042a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8043800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOPORT", 0x8080000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8080040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8080080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8080200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8080800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8080840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8080880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8080a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8081000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8081800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOPORT", 0x8082000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8082040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8082080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8082200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8082800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8082840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8082880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8082a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8083000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8083800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x80c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x80c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x80c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x80c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x80c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x80c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x80c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x80c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x80c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x80c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_VIDEOPORT", 0x8100000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8100040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8100080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8100200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8100800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8100840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8100880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8100a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8101000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8101800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_VIDEOPORT", 0x8102000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8102040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8102080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8102200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8102800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8102840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8102880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8102a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8103000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8103800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8140800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8140840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8140880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8140a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8141800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8142800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8142840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8142880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8142a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8143800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOPORT", 0x8180000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8180040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8180080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8180200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8180800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8180840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8180880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8180a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8181000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8181800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOPORT", 0x8182000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8182040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8182080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8182200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8182800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8182840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8182880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8182a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8183000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8183800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x81c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x81c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x81c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x81c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x81c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x81c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x81c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x81c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x81c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x81c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_VIDEOPORT", 0x8200000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8200040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8200080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8200200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8200800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8200840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8200880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8200a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8201000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8201800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_VIDEOPORT", 0x8202000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8202040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8202080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8202200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8202800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8202840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8202880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8202a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8203000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8203800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8240800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8240840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8240880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8240a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8241800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8242800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8242840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8242880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8242a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8243800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOPORT", 0x8280000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8280040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8280080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8280200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8280800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8280840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8280880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8280a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8281000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8281800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOPORT", 0x8282000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8282040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8282080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8282200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8282800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8282840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8282880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8282a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8283000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8283800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x82c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x82c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x82c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x82c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x82c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x82c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x82c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x82c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x82c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x82c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_VIDEOPORT", 0x8300000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8300040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8300080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8300200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8300800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8300840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8300880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8300a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8301000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8301800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_VIDEOPORT", 0x8302000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8302040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8302080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8302200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8302800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8302840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8302880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8302a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8303000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8303800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8340800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8340840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8340880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8340a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8341800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8342800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8342840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8342880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8342a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8343800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOPORT", 0x8380000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8380040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8380080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8380200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8380800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8380840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8380880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8380a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8381000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8381800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOPORT", 0x8382000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOPORT", 0x8382040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOPORT", 0x8382080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOPORT", 0x8382200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8382800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8382840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8382880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x8382a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8383000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x8383800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x8387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x83c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x83c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x83c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x83c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x83c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x83c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x83c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x83c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x83c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x83c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc001000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc001800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc003000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc003800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc041800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc043800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc081000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc081800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc083000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc083800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc0c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc0c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc101000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc101800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc103000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc103800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc141800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc143800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc181000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc181800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc183000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc183800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc1c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc1c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc201000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc201800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc203000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc203800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc241800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc243800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc281000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc281800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc283000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc283800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc2c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc2c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc301000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc301800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc303000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc303800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc341800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc343800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc381000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc381800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc383000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc383800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0xc387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc3c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0xc3c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x10004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x10006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x10084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x10086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x10104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x10106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x10184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x10186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x10204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x10206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x10284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x10286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x10304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x10306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x10384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY", 0x10386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x10386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x10386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x10386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x10387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x14387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x18387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x1c387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY", 0x20386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY", 0x20386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY", 0x20386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY", 0x20386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x20387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x24387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x28387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x2c387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE", 0x40000000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40000040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40000080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40000200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40000800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40000840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40000880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40000a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40001000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40001800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE", 0x40002000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40002040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40002080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40002200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40002800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40002840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40002880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40002a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40003000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40003800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40040800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40040840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40040880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40040a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40041800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40042800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40042840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40042880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40042a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40043800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE", 0x40080000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40080040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40080080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40080200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40080800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40080840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40080880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40080a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40081000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40081800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE", 0x40082000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40082040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40082080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40082200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40082800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40082840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40082880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40082a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40083000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40083800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x400c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x400c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x400c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x400c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x400c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x400c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x400c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x400c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x400c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x400c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE", 0x40100000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40100040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40100080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40100200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40100800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40100840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40100880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40100a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40101000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40101800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE", 0x40102000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40102040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40102080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40102200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40102800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40102840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40102880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40102a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40103000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40103800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40140800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40140840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40140880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40140a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40141800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40142800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40142840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40142880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40142a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40143800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE", 0x40180000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40180040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40180080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40180200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40180800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40180840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40180880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40180a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40181000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40181800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE", 0x40182000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40182040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40182080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40182200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40182800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40182840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40182880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40182a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40183000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40183800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x401c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x401c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x401c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x401c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x401c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x401c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x401c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x401c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x401c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x401c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE", 0x40200000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40200040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40200080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40200200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40200800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40200840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40200880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40200a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40201000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40201800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE", 0x40202000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40202040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40202080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40202200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40202800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40202840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40202880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40202a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40203000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40203800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40240800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40240840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40240880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40240a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40241800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40242800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40242840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40242880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40242a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40243800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE", 0x40280000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40280040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40280080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40280200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40280800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40280840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40280880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40280a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40281000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40281800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE", 0x40282000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40282040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40282080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40282200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40282800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40282840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40282880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40282a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40283000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40283800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x402c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x402c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x402c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x402c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x402c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x402c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x402c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x402c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x402c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x402c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE", 0x40300000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40300040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40300080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40300200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40300800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40300840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40300880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40300a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40301000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40301800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE", 0x40302000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40302040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40302080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40302200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40302800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40302840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40302880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40302a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40303000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40303800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40340800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40340840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40340880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40340a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40341800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40342800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40342840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40342880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40342a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40343800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE", 0x40380000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40380040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40380080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40380200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40380800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40380840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40380880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40380a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40381000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40381800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE", 0x40382000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE", 0x40382040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE", 0x40382080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE", 0x40382200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40382800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40382840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40382880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x40382a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x40383000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x40383800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x40386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x40387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x403c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x403c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x403c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x403c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x403c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x403c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x403c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x403c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY", 0x403c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x403c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44001000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44001800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44003000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44003800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44041800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44043800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44081000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44081800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44083000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44083800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x440c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x440c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44101000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44101800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44103000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44103800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44141800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44143800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44181000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44181800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44183000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44183800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x441c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x441c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44201000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44201800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44203000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44203800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44241800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44243800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44281000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44281800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44283000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44283800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x442c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x442c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44301000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44301800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44303000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44303800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44341800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44343800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44381000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44381800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE", 0x44383000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x44383800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x44387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x443c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE", 0x443c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48000000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48000040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48000080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48000200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48000800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48000840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48000880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48000a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48001000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48001800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48002000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48002040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48002080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48002200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48002800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48002840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48002880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48002a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48003000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48003800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48040800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48040840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48040880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48040a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48041800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48042800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48042840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48042880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48042a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48043800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48080000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48080040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48080080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48080200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48080800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48080840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48080880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48080a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48081000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48081800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48082000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48082040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48082080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48082200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48082800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48082840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48082880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48082a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48083000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48083800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x480c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x480c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x480c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x480c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x480c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x480c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x480c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x480c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x480c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x480c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48100000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48100040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48100080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48100200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48100800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48100840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48100880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48100a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48101000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48101800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48102000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48102040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48102080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48102200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48102800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48102840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48102880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48102a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48103000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48103800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48140800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48140840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48140880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48140a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48141800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48142800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48142840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48142880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48142a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48143800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48180000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48180040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48180080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48180200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48180800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48180840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48180880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48180a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48181000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48181800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48182000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48182040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48182080, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48182200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48182800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48182840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48182880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48182a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48183000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48183800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x481c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x481c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x481c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x481c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x481c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x481c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x481c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x481c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x481c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x481c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48200000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48200040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48200080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48200200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48200800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48200840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48200880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48200a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48201000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48201800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48202000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48202040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48202080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48202200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48202800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48202840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48202880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48202a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48203000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48203800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48240800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48240840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48240880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48240a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48241800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48242800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48242840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48242880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48242a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48243800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48280000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48280040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48280080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48280200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48280800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48280840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48280880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48280a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48281000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48281800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48282000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48282040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48282080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48282200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48282800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48282840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48282880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48282a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48283000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48283800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x482c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x482c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x482c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x482c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x482c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x482c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x482c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x482c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x482c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x482c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48300000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48300040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48300080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48300200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48300800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48300840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48300880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48300a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48301000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48301800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48302000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48302040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48302080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48302200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48302800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48302840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48302880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48302a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48303000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48303800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48340800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48340840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48340880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48340a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48341800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48342800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48342840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48342880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48342a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48343800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48380000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48380040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48380080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48380200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48380800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48380840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48380880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48380a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48381000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48381800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48382000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48382040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48382080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOPORT", 0x48382200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48382800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48382840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48382880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x48382a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48383000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x48383800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x48387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x483c0800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x483c0840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x483c0880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x483c0a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x483c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x483c2800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x483c2840, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x483c2880, DDERR_INVALIDPARAMS, DDERR_NOOVERLAYHW)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOPORT", 0x483c2a00, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x483c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c001000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c001800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c003000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c003800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c041800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c043800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c081000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c081800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c083000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c083800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c0c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c0c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c101000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c101800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c103000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c103800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c141800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c143800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c181000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c181800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c183000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c183800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c1c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c1c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c201000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c201800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c203000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c203800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c241800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c243800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c281000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c281800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c283000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c283800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c2c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c2c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c301000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c301800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c303000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c303800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c341800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c343800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c381000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c381800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c383000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c383800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x4c387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c3c1800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_OWNDC | DDSCAPS_STANDARDVGAMODE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_TEXTURE | DDSCAPS_VIDEOPORT", 0x4c3c3800, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x50386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x50387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x54387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x58387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_LOCALVIDMEM | DDSCAPS_MODEX | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x5c387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY", 0x60386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x60387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY", 0x64387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68004000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68004040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68004080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68004200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68006000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68006040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68006080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68006200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68084000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68084040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68084080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68084200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68086000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68086040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68086080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68086200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68104000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68104040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68104080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68104200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68106000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68106040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68106080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68106200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68184000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68184040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68184080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68184200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68186000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68186040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68186080, DDERR_INVALIDPARAMS, DDERR_INVALIDPIXELFORMAT)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68186200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68204000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68204040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68204080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68204200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68206000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68206040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68206080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68206200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68284000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68284040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68284080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68284200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68286000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68286040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68286080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68286200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68304000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68304040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68304080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68304200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68306000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68306040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68306080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68306200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68384000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68384040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68384080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68384200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68386000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OFFSCREENPLAIN | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68386040, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_OVERLAY | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68386080, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_PRIMARYSURFACE | DDSCAPS_STANDARDVGAMODE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68386200, DDERR_PRIMARYSURFACEALREADYEXISTS, DDERR_INVALIDPARAMS)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x68387000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c005000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c007000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c085000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c087000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c105000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c107000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c185000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c187000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c205000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c207000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c285000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c287000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c305000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c307000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c385000, DDERR_INVALIDPARAMS, DD_OK)); -TEST(TestCaps("DDSCAPS_3DDEVICE | DDSCAPS_ALLOCONLOAD | DDSCAPS_HWCODEC | DDSCAPS_LIVEVIDEO | DDSCAPS_MODEX | DDSCAPS_NONLOCALVIDMEM | DDSCAPS_STANDARDVGAMODE | DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VIDEOPORT", 0x6c387000, DDERR_INVALIDPARAMS, DD_OK)); diff --git a/rostests/dxtest/ddraw/Surface/create.cpp b/rostests/dxtest/ddraw/Surface/create.cpp deleted file mode 100644 index 7ad5cb5068c..00000000000 --- a/rostests/dxtest/ddraw/Surface/create.cpp +++ /dev/null @@ -1,71 +0,0 @@ -HWND CreateBasicWindow (VOID); - -LPDIRECTDRAW7 DirectDraw; - -BOOL TestCaps (char* dummy, DWORD Caps, HRESULT test1, HRESULT test2) -{ - LPDIRECTDRAWSURFACE7 Surface = NULL; - DDSURFACEDESC2 Desc = { 0 }; - Desc.dwHeight = 200; - Desc.dwWidth = 200; - Desc.dwSize = sizeof (DDSURFACEDESC2); - Desc.ddsCaps.dwCaps = Caps; - - Desc.dwFlags = DDSD_CAPS; - BOOL ret = DirectDraw->CreateSurface(&Desc, &Surface, NULL) == test1; - - Desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - ret = ret && DirectDraw->CreateSurface(&Desc, &Surface, NULL) == test2; - - if ( Surface ) - Surface->Release(); - - return ret; -} - -BOOL Test_CreateSurface (INT* passed, INT* failed) -{ - LPDIRECTDRAWSURFACE7 Surface = NULL; - HWND hwnd; - - /* Preparations */ - if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - printf("ERROR: Failed to set up ddraw\n"); - return FALSE; - } - - TEST ( DirectDraw->CreateSurface(NULL, NULL, NULL) == DDERR_NOCOOPERATIVELEVELSET); - - if(!( hwnd = CreateBasicWindow() )) - { - printf("ERROR: Failed to create window\n"); - DirectDraw->Release(); - return FALSE; - } - - if (DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL) != DD_OK) - { - printf("ERROR: Could not set cooperative level\n"); - DirectDraw->Release(); - return 0; - } - - /* The Test */ - DDSURFACEDESC2 Desc = { 0 }; - Desc.dwSize = sizeof (DDSURFACEDESC2); - Desc.dwHeight = 200; - Desc.dwWidth = 200; - - TEST ( DirectDraw->CreateSurface(&Desc, &Surface, (IUnknown*)0xdeadbeef) == CLASS_E_NOAGGREGATION ); - TEST ( DirectDraw->CreateSurface(NULL, &Surface, NULL) == DDERR_INVALIDPARAMS ); - TEST ( DirectDraw->CreateSurface(&Desc, NULL, NULL) == DDERR_INVALIDPARAMS ); - TEST ( DirectDraw->CreateSurface(&Desc, &Surface, NULL) == DDERR_INVALIDPARAMS ); - - // Test (nearly) all possible cap combinations - #include "caps_tests.h" - - DirectDraw->Release(); - - return TRUE; -} diff --git a/rostests/dxtest/ddraw/Surface/misc.cpp b/rostests/dxtest/ddraw/Surface/misc.cpp deleted file mode 100644 index 41c13c02f35..00000000000 --- a/rostests/dxtest/ddraw/Surface/misc.cpp +++ /dev/null @@ -1,64 +0,0 @@ -BOOL CreateSurface(LPDIRECTDRAWSURFACE7* pSurface); - -BOOL Test_Misc (INT* passed, INT* failed) -{ - LPDIRECTDRAWSURFACE7 Surface; - if(!CreateSurface(&Surface)) - return FALSE; - - TEST (Surface->Initialize(NULL, NULL) == DDERR_ALREADYINITIALIZED); - - // GetCaps - DDSCAPS2 Caps; - TEST (Surface->GetCaps((DDSCAPS2*)0xdeadbeef) == DDERR_INVALIDPARAMS); - TEST (Surface->GetCaps(&Caps) == DD_OK && Caps.dwCaps == 0x10004040 - && Caps.dwCaps2 == Caps.dwCaps3 == Caps.dwCaps4 == 0); // FIXME: Replace 0x10004040 - - // GetDC / ReleaseDC - HDC hdc; - TEST (Surface->GetDC((HDC*)0xdeadbeef) == DDERR_INVALIDPARAMS); - TEST (Surface->ReleaseDC((HDC)0xdeadbeef) == DDERR_NODC); - TEST (Surface->ReleaseDC(GetDC(NULL)) == DDERR_NODC); - - TEST (Surface->GetDC(&hdc) == DD_OK); - TEST (MoveToEx(hdc, 0, 0, NULL) == TRUE); // validate hdc - TEST (Surface->Blt(NULL, NULL, NULL, 0, NULL) == DDERR_SURFACEBUSY); // check lock - TEST (Surface->ReleaseDC(hdc) == DD_OK); - - // ChangeUniquenessValue / GetUniquenessValue - DWORD Value; - // FIXME: find out other apis which increases the uniqueness value - TEST (Surface->GetUniquenessValue(&Value) == DD_OK && Value == 2); - TEST (Surface->Blt(NULL, NULL, NULL, 0, NULL) == DDERR_INVALIDPARAMS); // Even this increases the uniqueness value - TEST (Surface->GetUniquenessValue(&Value) == DD_OK && Value == 3); - TEST (Surface->ChangeUniquenessValue() == DD_OK); - TEST (Surface->GetUniquenessValue(&Value) == DD_OK && Value == 4); - - // GetPixelFormat - DDPIXELFORMAT PixelFormat = {0}; - // FIXME: Produce DDERR_INVALIDSURFACETYPE - TEST (Surface->GetPixelFormat((LPDDPIXELFORMAT)0xdeadbeef) == DDERR_INVALIDPARAMS); - TEST (Surface->GetPixelFormat(&PixelFormat)); - PixelFormat.dwSize = sizeof(DDPIXELFORMAT); - TEST (Surface->GetPixelFormat(&PixelFormat) == DD_OK && PixelFormat.dwFlags == 0x40); // FIXME: Find out what 0x40 is - - // GetSurfaceDesc / SetSurfaceDesc - DDSURFACEDESC2 Desc = {0}; - // FIXME: Produce DDERR_INVALIDSURFACETYPE - TEST (Surface->GetSurfaceDesc((LPDDSURFACEDESC2)0xdeadbeef) == DDERR_INVALIDPARAMS); - TEST (Surface->GetSurfaceDesc(&Desc)); - Desc.dwSize = sizeof(DDSURFACEDESC2); - TEST (Surface->GetSurfaceDesc(&Desc) == DD_OK && Desc.dwFlags == 0x100f); // FIXME: Find out what 0x100f is - TEST (memcmp ((PVOID)&Desc.ddpfPixelFormat, (PVOID)&PixelFormat, sizeof(DDPIXELFORMAT)) == 0); - // FIXME: Test SetSurfaceDesc - - // GetDDInterface - IUnknown* iface; - TEST(Surface->GetDDInterface((LPVOID*)0xdeadbeef) == DDERR_INVALIDPARAMS); - TEST(Surface->GetDDInterface((LPVOID*)&iface) == DD_OK && iface); - TEST(iface->Release() == 1); // FIXME: Test the interface further - - Surface->Release(); - - return TRUE; -} diff --git a/rostests/dxtest/ddraw/Surface/private_data.cpp b/rostests/dxtest/ddraw/Surface/private_data.cpp deleted file mode 100644 index e9839af7e05..00000000000 --- a/rostests/dxtest/ddraw/Surface/private_data.cpp +++ /dev/null @@ -1,49 +0,0 @@ -BOOL CreateSurface(LPDIRECTDRAWSURFACE7* pSurface); - -BOOL Test_PrivateData (INT* passed, INT* failed) -{ - LPDIRECTDRAWSURFACE7 Surface; - DWORD size, dummy = 0xBAADF00D; - GUID guid = { 0 }; - GUID guid2 = { 0x1 }; - - if(!CreateSurface(&Surface)) - return FALSE; - - // General test - TEST(Surface->SetPrivateData(guid, NULL, 0, 0) == DDERR_INVALIDPARAMS); - TEST(Surface->SetPrivateData(guid, (LPVOID)&dummy, 0, 0) == DDERR_INVALIDPARAMS); - TEST(Surface->SetPrivateData(guid, (LPVOID)0xdeadbeef, sizeof(DWORD), 0) == DDERR_INVALIDPARAMS); - TEST(Surface->SetPrivateData(guid, (LPVOID)&dummy, sizeof(DWORD), 0) == DD_OK); - - TEST(Surface->GetPrivateData(guid, NULL, 0) == DDERR_INVALIDPARAMS); - TEST(Surface->GetPrivateData(guid, &dummy, 0) == DDERR_INVALIDPARAMS); - size = 0; - TEST(Surface->GetPrivateData(guid, &dummy, &size) == DDERR_MOREDATA && size == sizeof(DWORD)); - size = 2; - TEST(Surface->GetPrivateData(guid, NULL, &size) == DDERR_MOREDATA && size == sizeof(DWORD)); - TEST(Surface->GetPrivateData(guid, NULL, &size) == DDERR_INVALIDPARAMS); - TEST(Surface->GetPrivateData(guid, &dummy, &size) == DD_OK && dummy == 0xBAADF00D); - TEST(Surface->GetPrivateData(guid2, NULL, 0) == DDERR_NOTFOUND); - - TEST(Surface->FreePrivateData(guid) == DD_OK); - TEST(Surface->FreePrivateData(guid) == DDERR_NOTFOUND); - - // Test for DDSPD_VOLATILE flag - TEST(Surface->SetPrivateData(guid, (LPVOID)&dummy, sizeof(DWORD), DDSPD_VOLATILE) == DD_OK); - size = 0; - TEST(Surface->GetPrivateData(guid, NULL, &size) == DDERR_MOREDATA && size == sizeof(DWORD)); - TEST(Surface->GetPrivateData(guid, &dummy, &size) == DD_OK && dummy == 0xBAADF00D); - - DDBLTFX bltfx; - bltfx.dwSize = sizeof(DDBLTFX); - bltfx.dwFillColor = RGB(0, 0, 0); - if(Surface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &bltfx) != DD_OK) - printf("ERROR: Failed to draw to surface !"); - TEST(Surface->GetPrivateData(guid, &dummy, &size) == DDERR_EXPIRED); - - // TODO: Test for DDSPD_IUNKNOWNPOINTER (see http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/ddraw7/directdraw7/ddref_5qyf.asp) - - Surface->Release(); - return TRUE; -} diff --git a/rostests/dxtest/ddraw/ddraw.rbuild b/rostests/dxtest/ddraw/ddraw.rbuild deleted file mode 100644 index dcc87186f24..00000000000 --- a/rostests/dxtest/ddraw/ddraw.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - . - - kernel32 - user32 - gdi32 - ole32 - ddraw - dxguid - ddraw_test.cpp - helper.cpp - testlist.cpp - diff --git a/rostests/dxtest/ddraw/ddraw_test.cpp b/rostests/dxtest/ddraw/ddraw_test.cpp deleted file mode 100644 index ba6a03df302..00000000000 --- a/rostests/dxtest/ddraw/ddraw_test.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include - -#include "ddrawtest.h" - -INT NumTests(void); - -int main(int argc, char *argv[]) -{ - INT Num = NumTests(); - INT i, j; - INT passed, failed, opassed, ofailed; - - opassed = 0; - ofailed = 0; - printf("DirectDraw tests\n"); - if (argc > 1) - { - for (i = 1; i < argc; i++) - { - for (j = 0; j < NumTests(); j++) - { - if (_stricmp(argv[i], TestList[j].Test) == 0) - { - passed = 0; - failed = 0; - TestList[j].Proc(&passed, &failed); - opassed += passed; - ofailed += failed; - printf(" tests: %d, passed: %d, failed: %d\n\n", passed+failed, passed, failed); - } - } - } - } - else - { - for (i = 0; i < Num; i++) - { - passed = 0; - failed = 0; - printf("Test: %s\n", TestList[i].Test); - TestList[i].Proc(&passed, &failed); - opassed += passed; - ofailed += failed; - printf(" tests: %d, passed: %d, failed: %d\n\n", passed+failed, passed, failed); - } - } - printf("\nOverall tests: %d, passed: %d, failed: %d\n", opassed+ofailed, opassed, ofailed); - - return ofailed; -} diff --git a/rostests/dxtest/ddraw/ddrawtest.h b/rostests/dxtest/ddraw/ddrawtest.h deleted file mode 100644 index 78f3190170f..00000000000 --- a/rostests/dxtest/ddraw/ddrawtest.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef _DDRAWTEST_H -#define _DDRAWTEST_H - -#define WINVER 0x501 - -#include -#include -#include -#include -#include -#include -#include - -#define TEST(x) \ - if (x)\ - {\ - (*passed)++;\ - } else {\ - (*failed)++;\ - printf("Test failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\ - }; - - -/* The type definitions */ -typedef BOOL (*TESTPROC)(INT*, INT*); - -typedef struct tagTEST -{ - CHAR* Test; - TESTPROC Proc; -} TEST, *PTEST; - - -extern TEST TestList[]; - -#endif /* _DDRAWTEST_H */ - -/* EOF */ diff --git a/rostests/dxtest/ddraw/debug.cpp b/rostests/dxtest/ddraw/debug.cpp deleted file mode 100644 index 8744547ca50..00000000000 --- a/rostests/dxtest/ddraw/debug.cpp +++ /dev/null @@ -1,111 +0,0 @@ - -#define GetCode(X) printf("%s\n", DDErrorString(X)); - -PCHAR DDErrorString (HRESULT hResult) -{ - switch (hResult) - { - case DD_OK: return "DD_OK"; - case DDERR_ALREADYINITIALIZED: return "DDERR_ALREADYINITIALIZED"; - case DDERR_CANNOTATTACHSURFACE: return "DDERR_CANNOTATTACHSURFACE"; - case DDERR_CANNOTDETACHSURFACE: return "DDERR_CANNOTDETACHSURFACE"; - case DDERR_CURRENTLYNOTAVAIL: return "DDERR_CURRENTLYNOTAVAIL"; - case DDERR_EXCEPTION: return "DDERR_EXCEPTION"; - case DDERR_GENERIC: return "DDERR_GENERIC"; - case DDERR_HEIGHTALIGN: return "DDERR_HEIGHTALIGN"; - case DDERR_INCOMPATIBLEPRIMARY: return "DDERR_INCOMPATIBLEPRIMARY"; - case DDERR_INVALIDCAPS: return "DDERR_INVALIDCAPS"; - case DDERR_INVALIDCLIPLIST: return "DDERR_INVALIDCLIPLIST"; - case DDERR_INVALIDMODE: return "DDERR_INVALIDMODE"; - case DDERR_INVALIDOBJECT: return "DDERR_INVALIDOBJECT"; - case DDERR_INVALIDPARAMS: return "DDERR_INVALIDPARAMS"; - case DDERR_INVALIDPIXELFORMAT: return "DDERR_INVALIDPIXELFORMAT"; - case DDERR_INVALIDRECT: return "DDERR_INVALIDRECT"; - case DDERR_LOCKEDSURFACES: return "DDERR_LOCKEDSURFACES"; - case DDERR_NO3D: return "DDERR_NO3D"; - case DDERR_NOALPHAHW: return "DDERR_NOALPHAHW"; - case DDERR_NOCLIPLIST: return "DDERR_NOCLIPLIST"; - case DDERR_NOCOLORCONVHW: return "DDERR_NOCOLORCONVHW"; - case DDERR_NOCOOPERATIVELEVELSET: return "DDERR_NOCOOPERATIVELEVELSET"; - case DDERR_NOCOLORKEY: return "DDERR_NOCOLORKEY"; - case DDERR_NOCOLORKEYHW: return "DDERR_NOCOLORKEYHW"; - case DDERR_NODIRECTDRAWSUPPORT: return "DDERR_NODIRECTDRAWSUPPORT"; - case DDERR_NOEXCLUSIVEMODE: return "DDERR_NOEXCLUSIVEMODE"; - case DDERR_NOFLIPHW: return "DDERR_NOFLIPHW"; - case DDERR_NOGDI: return "DDERR_NOGDI"; - case DDERR_NOMIRRORHW: return "DDERR_NOMIRRORHW"; - case DDERR_NOTFOUND: return "DDERR_NOTFOUND"; - case DDERR_NOOVERLAYHW: return "DDERR_NOOVERLAYHW"; - case DDERR_NORASTEROPHW: return "DDERR_NORASTEROPHW"; - case DDERR_NOROTATIONHW: return "DDERR_NOROTATIONHW"; - case DDERR_NOSTRETCHHW: return "DDERR_NOSTRETCHHW"; - case DDERR_NOT4BITCOLOR: return "DDERR_NOT4BITCOLOR"; - case DDERR_NOT4BITCOLORINDEX: return "DDERR_NOT4BITCOLORINDEX"; - case DDERR_NOT8BITCOLOR: return "DDERR_NOT8BITCOLOR"; - case DDERR_NOTEXTUREHW: return "DDERR_NOTEXTUREHW"; - case DDERR_NOVSYNCHW: return "DDERR_NOVSYNCHW"; - case DDERR_NOZBUFFERHW: return "DDERR_NOZBUFFERHW"; - case DDERR_NOZOVERLAYHW: return "DDERR_NOZOVERLAYHW"; - case DDERR_OUTOFCAPS: return "DDERR_OUTOFCAPS"; - case DDERR_OUTOFMEMORY: return "DDERR_OUTOFMEMORY"; - case DDERR_OUTOFVIDEOMEMORY: return "DDERR_OUTOFVIDEOMEMORY"; - case DDERR_OVERLAYCANTCLIP: return "DDERR_OVERLAYCANTCLIP"; - case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: return "DDERR_OVERLAYCOLORKEYONLYONEACTIVE"; - case DDERR_PALETTEBUSY: return "DDERR_PALETTEBUSY"; - case DDERR_COLORKEYNOTSET: return "DDERR_COLORKEYNOTSET"; - case DDERR_SURFACEALREADYATTACHED: return "DDERR_SURFACEALREADYATTACHED"; - case DDERR_SURFACEALREADYDEPENDENT: return "DDERR_SURFACEALREADYDEPENDENT"; - case DDERR_SURFACEBUSY: return "DDERR_SURFACEBUSY"; - case DDERR_CANTLOCKSURFACE: return "DDERR_CANTLOCKSURFACE"; - case DDERR_SURFACEISOBSCURED: return "DDERR_SURFACEISOBSCURED"; - case DDERR_SURFACELOST: return "DDERR_SURFACELOST"; - case DDERR_SURFACENOTATTACHED: return "DDERR_SURFACENOTATTACHED"; - case DDERR_TOOBIGHEIGHT: return "DDERR_TOOBIGHEIGHT"; - case DDERR_TOOBIGSIZE: return "DDERR_TOOBIGSIZE"; - case DDERR_TOOBIGWIDTH: return "DDERR_TOOBIGWIDTH"; - case DDERR_UNSUPPORTED: return "DDERR_UNSUPPORTED"; - case DDERR_UNSUPPORTEDFORMAT: return "DDERR_UNSUPPORTEDFORMAT"; - case DDERR_UNSUPPORTEDMASK: return "DDERR_UNSUPPORTEDMASK"; - case DDERR_VERTICALBLANKINPROGRESS: return "DDERR_VERTICALBLANKINPROGRESS"; - case DDERR_WASSTILLDRAWING: return "DDERR_WASSTILLDRAWING"; - case DDERR_XALIGN: return "DDERR_XALIGN"; - case DDERR_INVALIDDIRECTDRAWGUID: return "DDERR_INVALIDDIRECTDRAWGUID"; - case DDERR_DIRECTDRAWALREADYCREATED: return "DDERR_DIRECTDRAWALREADYCREATED"; - case DDERR_NODIRECTDRAWHW: return "DDERR_NODIRECTDRAWHW"; - case DDERR_PRIMARYSURFACEALREADYEXISTS: return "DDERR_PRIMARYSURFACEALREADYEXISTS"; - case DDERR_NOEMULATION: return "DDERR_NOEMULATION"; - case DDERR_REGIONTOOSMALL: return "DDERR_REGIONTOOSMALL"; - case DDERR_CLIPPERISUSINGHWND: return "DDERR_CLIPPERISUSINGHWND"; - case DDERR_NOCLIPPERATTACHED: return "DDERR_NOCLIPPERATTACHED"; - case DDERR_NOHWND: return "DDERR_NOHWND"; - case DDERR_HWNDSUBCLASSED: return "DDERR_HWNDSUBCLASSED"; - case DDERR_HWNDALREADYSET: return "DDERR_HWNDALREADYSET"; - case DDERR_NOPALETTEATTACHED: return "DDERR_NOPALETTEATTACHED"; - case DDERR_NOPALETTEHW: return "DDERR_NOPALETTEHW"; - case DDERR_BLTFASTCANTCLIP: return "DDERR_BLTFASTCANTCLIP"; - case DDERR_NOBLTHW: return "DDERR_NOBLTHW"; - case DDERR_NODDROPSHW: return "DDERR_NODDROPSHW"; - case DDERR_OVERLAYNOTVISIBLE: return "DDERR_OVERLAYNOTVISIBLE"; - case DDERR_NOOVERLAYDEST: return "DDERR_NOOVERLAYDEST"; - case DDERR_INVALIDPOSITION: return "DDERR_INVALIDPOSITION"; - case DDERR_NOTAOVERLAYSURFACE: return "DDERR_NOTAOVERLAYSURFACE"; - case DDERR_EXCLUSIVEMODEALREADYSET: return "DDERR_EXCLUSIVEMODEALREADYSET"; - case DDERR_NOTFLIPPABLE: return "DDERR_NOTFLIPPABLE"; - case DDERR_CANTDUPLICATE: return "DDERR_CANTDUPLICATE"; - case DDERR_NOTLOCKED: return "DDERR_NOTLOCKED"; - case DDERR_CANTCREATEDC: return "DDERR_CANTCREATEDC"; - case DDERR_NODC: return "DDERR_NODC"; - case DDERR_WRONGMODE: return "DDERR_WRONGMODE"; - case DDERR_IMPLICITLYCREATED: return "DDERR_IMPLICITLYCREATED"; - case DDERR_NOTPALETTIZED: return "DDERR_NOTPALETTIZED"; - case DDERR_UNSUPPORTEDMODE: return "DDERR_UNSUPPORTEDMODE"; - case DDERR_NOMIPMAPHW: return "DDERR_NOMIPMAPHW"; - case DDERR_INVALIDSURFACETYPE: return "DDERR_INVALIDSURFACETYPE"; - case DDERR_DCALREADYCREATED: return "DDERR_DCALREADYCREATED"; - case DDERR_CANTPAGELOCK: return "DDERR_CANTPAGELOCK"; - case DDERR_CANTPAGEUNLOCK: return "DDERR_CANTPAGEUNLOCK"; - case DDERR_NOTPAGELOCKED: return "DDERR_NOTPAGELOCKED"; - case DDERR_NOTINITIALIZED: return "DDERR_NOTINITIALIZED"; - } - return "Unknown Error"; -} diff --git a/rostests/dxtest/ddraw/helper.cpp b/rostests/dxtest/ddraw/helper.cpp deleted file mode 100644 index 92bf3aa64d7..00000000000 --- a/rostests/dxtest/ddraw/helper.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include "ddrawtest.h" - -LONG WINAPI BasicWindowProc (HWND hwnd, UINT message, UINT wParam, LONG lParam) -{ - switch (message) - { - case WM_DESTROY: - { - PostQuitMessage (0); - return 0; - } break; - } - - return DefWindowProc (hwnd, message, wParam, lParam); -} - -HWND CreateBasicWindow (VOID) -{ - WNDCLASS wndclass = {0}; - wndclass.lpfnWndProc = BasicWindowProc; - wndclass.hInstance = GetModuleHandle(NULL); - wndclass.lpszClassName = "DDrawTest"; - RegisterClass(&wndclass); - - return CreateWindow("DDrawTest", "ReactOS DirectDraw Test", WS_POPUP, 0, 0, 10, 10, NULL, NULL, GetModuleHandle(NULL), NULL); -} - -BOOL CreateSurface(LPDIRECTDRAWSURFACE7* pSurface) -{ - LPDIRECTDRAW7 DirectDraw; - LPDIRECTDRAWSURFACE7 Surface; - HWND hwnd; - - // Create DDraw Object - if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) - { - printf("ERROR: Failed to set up ddraw\n"); - return FALSE; - } - - if(!( hwnd = CreateBasicWindow() )) - { - printf("ERROR: Failed to create window\n"); - DirectDraw->Release(); - return FALSE; - } - - if (DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL) != DD_OK) - { - printf("ERROR: Could not set cooperative level\n"); - DirectDraw->Release(); - return 0; - } - - // Creat Surface - DDSURFACEDESC2 Desc = { 0 }; - Desc.dwHeight = 200; - Desc.dwWidth = 200; - Desc.dwSize = sizeof (DDSURFACEDESC2); - Desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; - Desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; - - if(DirectDraw->CreateSurface(&Desc, &Surface, NULL) != DD_OK) - { - printf("ERROR: Faild to create Surface\n"); - return FALSE; - } - - DirectDraw->Release(); - - *pSurface = Surface; - return TRUE; -} diff --git a/rostests/dxtest/ddraw/testlist.cpp b/rostests/dxtest/ddraw/testlist.cpp deleted file mode 100644 index 3884961d370..00000000000 --- a/rostests/dxtest/ddraw/testlist.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _DDRAWTESTLIST_H -#define _DDRAWTESTLIST_H - -#include "ddrawtest.h" -#include "debug.cpp" - -/* include the tests */ -#include "DDraw/create.cpp" -#include "DDraw/display_modes.cpp" -#include "DDraw/available_mem.cpp" -#include "Surface/create.cpp" -#include "Surface/private_data.cpp" -#include "Surface/blt.cpp" -#include "Surface/misc.cpp" - -/* The List of tests */ -TEST TestList[] = -{ - { "IDirectDraw: COM Stuff", Test_CreateDDraw }, - { "IDirectDraw: GetDeviceIdentifier", Test_GetDeviceIdentifier }, - { "IDirectDraw: Display Modes", Test_DisplayModes }, - { "IDirectDraw: Available Video Memory", Test_GetAvailableVidMem }, - { "IDirectDraw: GetFourCC", Test_GetFourCCCodes }, - { "IDirectDraw: Cooperative Levels", Test_SetCooperativeLevel }, - { "IDirectDrawSurface: Creation", Test_CreateSurface }, - { "IDirectDrawSurface: Blting", Test_Blt }, - { "IDirectDrawSurface: Private Data", Test_PrivateData }, - { "IDirectDrawSurface: Miscellaneous Tests", Test_Misc }, -}; - -/* The function that gives us the number of tests */ -INT NumTests(void) -{ - return sizeof(TestList) / sizeof(TEST); -} - -#endif /* _DDRAWTESTLIST_H */ - -/* EOF */ diff --git a/rostests/dxtest/directory.rbuild b/rostests/dxtest/directory.rbuild deleted file mode 100644 index 5c8daf9beb1..00000000000 --- a/rostests/dxtest/directory.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/rostests/dxtest/win32kdxtest/NtGdiDdCanCreateSurface.c b/rostests/dxtest/win32kdxtest/NtGdiDdCanCreateSurface.c deleted file mode 100644 index 0bc6e4c27eb..00000000000 --- a/rostests/dxtest/win32kdxtest/NtGdiDdCanCreateSurface.c +++ /dev/null @@ -1,45 +0,0 @@ - -#include -/* SDK/DDK/NDK Headers. */ -#include -#include -#include -#include -#include -#include -#include "test.h" - -/* - * Test see if we can delete a DirectDrawObject from win32k - * - */ -void -test_NtGdiDdCanCreateSurface(HANDLE hDirectDrawLocal) -{ - int fails=0; - BOOL retValue=FALSE; - DDHAL_CANCREATESURFACEDATA pCanCreateSurface; - DDSURFACEDESC2 desc; - - RtlZeroMemory(&pCanCreateSurface,sizeof(DDHAL_CANCREATESURFACEDATA)); - RtlZeroMemory(&desc,sizeof(DDSURFACEDESC2)); - - /* crash in windows 2000 */ - retValue = OsThunkDdCanCreateSurface(NULL,NULL); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"1. NtGdiDdCanCreateSurface(NULL,NULL);\0"); - - retValue = OsThunkDdCanCreateSurface(hDirectDrawLocal,NULL); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"2. NtGdiDdCanCreateSurface(hDirectDrawLocal,NULL);\0"); - - retValue = OsThunkDdCanCreateSurface(hDirectDrawLocal,(PDD_CANCREATESURFACEDATA)&pCanCreateSurface); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"3. NtGdiDdCanCreateSurface(hDirectDrawLocal,pCanCreateSurface);\0"); - - pCanCreateSurface.lpDDSurfaceDesc = &desc; - desc.dwSize = sizeof(DDSURFACEDESC2); - - retValue = OsThunkDdCanCreateSurface(hDirectDrawLocal,(PDD_CANCREATESURFACEDATA)&pCanCreateSurface); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"4. NtGdiDdCanCreateSurface(hDirectDrawLocal,pCanCreateSurface);\0"); - -} - - diff --git a/rostests/dxtest/win32kdxtest/NtGdiDdCreateDirectDrawObject.c b/rostests/dxtest/win32kdxtest/NtGdiDdCreateDirectDrawObject.c deleted file mode 100644 index 28943ce76bd..00000000000 --- a/rostests/dxtest/win32kdxtest/NtGdiDdCreateDirectDrawObject.c +++ /dev/null @@ -1,50 +0,0 @@ -#include -/* SDK/DDK/NDK Headers. */ -#include -#include -#include -#include -#include -#include "test.h" - - -/* - * Test see if we getting a DirectDrawObject from win32k - * - */ -HANDLE -test_NtGdiDdCreateDirectDrawObject() -{ - HANDLE retValue=0; - int fails=0; - HDC hdc=CreateDCW(L"Display",NULL,NULL,NULL); - - if (hdc == NULL) - { - printf("No hdc was created with Display, trying now with DISPLAY\n"); - hdc=CreateDCW(L"DISPLAY",NULL,NULL,NULL); - if (hdc == NULL) - { - printf("No hdc was created with DISPLAY, trying now with NULL\n"); - hdc=CreateDCW(NULL,NULL,NULL,NULL); - } - } - - if (hdc == NULL) - { - printf("No hdc was created at all perpare all test will fail\n"); - return NULL; - } - - printf("Start testing of NtGdiDdCreateDirectDrawObject\n"); - - retValue = OsThunkDdCreateDirectDrawObject(NULL); - testing_noteq(retValue,NULL,fails,"NtGdiDdCreateDirectDrawObject(NULL);\0"); - - retValue = OsThunkDdCreateDirectDrawObject(hdc); - testing_eq(retValue,NULL,fails,"NtGdiDdCreateDirectDrawObject(hdc);\0"); - - show_status(fails, "NtGdiDdCreateDirectDrawObject\0"); - - return retValue; -} diff --git a/rostests/dxtest/win32kdxtest/NtGdiDdDeleteDirectDrawObject.c b/rostests/dxtest/win32kdxtest/NtGdiDdDeleteDirectDrawObject.c deleted file mode 100644 index 0fd1e47f5db..00000000000 --- a/rostests/dxtest/win32kdxtest/NtGdiDdDeleteDirectDrawObject.c +++ /dev/null @@ -1,29 +0,0 @@ -#include -/* SDK/DDK/NDK Headers. */ -#include -#include -#include -#include -#include -#include "test.h" - -/* - * Test see if we can delete a DirectDrawObject from win32k - * - */ -void -test_NtGdiDdDeleteDirectDrawObject(HANDLE hDirectDrawLocal) -{ - int fails=0; - BOOL retValue=FALSE; - printf("Start testing of NtGdiDdDeleteDirectDrawObject\n"); - - retValue = OsThunkDdDeleteDirectDrawObject(hDirectDrawLocal); - testing_eq(retValue,FALSE,fails,"NtGdiDdDeleteDirectDrawObject(hDirectDrawLocal);\0"); - - retValue = OsThunkDdDeleteDirectDrawObject(NULL); - testing_eq(retValue,TRUE,fails,"NtGdiDdDeleteDirectDrawObject(NULL);\0"); - - show_status(fails, "NtGdiDdDeleteDirectDrawObject\0"); -} - diff --git a/rostests/dxtest/win32kdxtest/NtGdiDdGetScanLine.c b/rostests/dxtest/win32kdxtest/NtGdiDdGetScanLine.c deleted file mode 100644 index cc13bdb2235..00000000000 --- a/rostests/dxtest/win32kdxtest/NtGdiDdGetScanLine.c +++ /dev/null @@ -1,40 +0,0 @@ -#include -/* SDK/DDK/NDK Headers. */ -#include -#include -#include -#include -#include -#include "test.h" - -/* - * Test see if we can delete a DirectDrawObject from win32k - * - */ -void -test_NtGdiDdGetScanLine(HANDLE hDirectDrawLocal) -{ - int fails=0; - BOOL retValue=FALSE; - DD_GETSCANLINEDATA puGetScanLineData; - - printf("Start testing of NtGdiDdGetScanLine\n"); - RtlZeroMemory(&puGetScanLineData,sizeof(DD_GETSCANLINEDATA)); - - retValue = OsThunkDdGetScanLine(NULL,NULL); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"1. NtGdiDdGetScanLine(NULL,NULL);\0"); - - retValue = OsThunkDdGetScanLine(hDirectDrawLocal,NULL); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"2. NtGdiDdGetScanLine(hDirectDrawLocal,NULL);\0"); - - puGetScanLineData.ddRVal = DDERR_GENERIC; - retValue = OsThunkDdGetScanLine(hDirectDrawLocal,&puGetScanLineData); - testing_eq(retValue,DDHAL_DRIVER_NOTHANDLED,fails,"3. NtGdiDdGetScanLine(hDirectDrawLocal,puGetScanLineData);\0"); - testing_noteq(puGetScanLineData.ddRVal,DD_OK,fails,"4. NtGdiDdGetScanLine(hDirectDrawLocal,puGetScanLineData);\0"); - testing_eq(puGetScanLineData.dwScanLine,0,fails,"4. NtGdiDdGetScanLine(hDirectDrawLocal,puGetScanLineData);\0"); - - - /* FIXME DDERR_VERTICALBLANKINPROGRESS test */ - - show_status(fails, "NtGdiDdGetScanLine\0"); -} diff --git a/rostests/dxtest/win32kdxtest/NtGdiDdQueryDirectDrawObject.c b/rostests/dxtest/win32kdxtest/NtGdiDdQueryDirectDrawObject.c deleted file mode 100644 index 1b6960890bd..00000000000 --- a/rostests/dxtest/win32kdxtest/NtGdiDdQueryDirectDrawObject.c +++ /dev/null @@ -1,423 +0,0 @@ -#include -/* SDK/DDK/NDK Headers. */ -#include -#include -#include -#include -#include -#include "test.h" - -extern BOOL dumping_on; - -/* my struct */ -struct -{ - DWORD pos; -} *mytest; - -/* - * Test see if we can setup DirectDrawObject - * - */ - -/* - * ToDO - * 1. add more testcase it is only some, but we do not test for all case - * that happen only some - * - * 2.Fixed the false alaret for drivers only support 2d dx interface - * - * 3. fixed the dumping of d3d struct. - * - */ - -void -test_NtGdiDdQueryDirectDrawObject( HANDLE hDirectDrawLocal) -{ - int fails=0; - BOOL retValue=FALSE; - - DD_HALINFO *pHalInfo = NULL; - DWORD *pCallBackFlags = NULL; - LPD3DNTHAL_CALLBACKS puD3dCallbacks = NULL; - LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData = NULL; - PDD_D3DBUFCALLBACKS puD3dBufferCallbacks = NULL; - LPDDSURFACEDESC puD3dTextureFormats = NULL; - DWORD *puNumHeaps = NULL; - VIDEOMEMORY *puvmList = NULL; - DWORD *puNumFourCC = NULL; - DWORD *puFourCC = NULL; - - DD_HALINFO HalInfo; - DWORD CallBackFlags[4]; - D3DNTHAL_CALLBACKS D3dCallbacks; - D3DNTHAL_GLOBALDRIVERDATA D3dDriverData; - DD_D3DBUFCALLBACKS D3dBufferCallbacks; - DDSURFACEDESC2 D3dTextureFormats[100]; - DWORD NumHeaps = 0; - VIDEOMEMORY vmList; - DWORD NumFourCC = 0; - DWORD FourCC = 0; - - /* clear data */ - memset(&vmList,0,sizeof(VIDEOMEMORY)); - memset(&D3dTextureFormats,0,sizeof(DDSURFACEDESC)); - memset(&D3dBufferCallbacks,0,sizeof(DD_D3DBUFCALLBACKS)); - memset(&D3dDriverData,0,sizeof(D3DNTHAL_GLOBALDRIVERDATA)); - memset(&D3dCallbacks,0,sizeof(D3DNTHAL_CALLBACKS)); - memset(&HalInfo,0,sizeof(DD_HALINFO)); - memset(CallBackFlags,0,sizeof(DWORD)*3); - - printf("Start testing of NtGdiDdQueryDirectDrawObject\n"); - - /* testing OsThunkDdQueryDirectDrawObject( NULL, .... */ - printf("testing DdQueryDirectDrawObject( NULL, ....)\n"); - - retValue = OsThunkDdQueryDirectDrawObject( NULL, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC); - - testing_noteq(retValue,FALSE,fails,"1. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - testing_noteq(pHalInfo,NULL,fails,"2. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - testing_noteq(pCallBackFlags,NULL,fails,"3. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - testing_noteq(puD3dCallbacks,NULL,fails,"4. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - testing_noteq(puD3dDriverData,NULL,fails,"5. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - testing_noteq(puD3dBufferCallbacks,NULL,fails,"6. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - testing_noteq(puD3dTextureFormats,NULL,fails,"7. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - testing_noteq(puNumFourCC,NULL,fails,"8. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - testing_noteq(puFourCC,NULL,fails,"9. NtGdiDdQueryDirectDrawObject(NULL, ...);\0"); - - /* testing OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, NULL, .... */ - printf("testing DdQueryDirectDrawObject( hDD, NULL, ....)\n"); - - retValue = OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC); - - testing_noteq(retValue,FALSE,fails,"10. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - testing_noteq(pHalInfo,NULL,fails,"11. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - testing_noteq(pCallBackFlags,NULL,fails,"12. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - testing_noteq(puD3dCallbacks,NULL,fails,"13. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - testing_noteq(puD3dDriverData,NULL,fails,"14. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - testing_noteq(puD3dBufferCallbacks,NULL,fails,"15. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - testing_noteq(puD3dTextureFormats,NULL,fails,"16. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - testing_noteq(puNumFourCC,NULL,fails,"17. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - testing_noteq(puFourCC,NULL,fails,"18. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, NULL, ...);\0"); - - /* testing OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, NULL, .... */ - printf("testing DdQueryDirectDrawObject( hDD, pHalInfo, NULL, ....)\n"); - - pHalInfo = &HalInfo; - retValue = OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC); - - testing_noteq(retValue,FALSE,fails,"19. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - testing_eq(pHalInfo,NULL,fails,"20. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - testing_noteq(pCallBackFlags,NULL,fails,"21. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - testing_noteq(puD3dCallbacks,NULL,fails,"22. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - testing_noteq(puD3dDriverData,NULL,fails,"23. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - testing_noteq(puD3dBufferCallbacks,NULL,fails,"24. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - testing_noteq(puD3dTextureFormats,NULL,fails,"25. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - testing_noteq(puNumFourCC,NULL,fails,"26. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - testing_noteq(puFourCC,NULL,fails,"27. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\0"); - - /* - if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) && - (pHalInfo->dwSize != sizeof(DD_HALINFO_V4))) - { - printf("28. if this show for NT 2000/XP/2003 ignore it, NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...);\n"); - fails++; - } - */ - - if (dumping_on == TRUE) - { - dump_halinfo(pHalInfo,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, NULL, ...)"); - } - - - - - - - - - - - - - - /* testing OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, .... */ - printf("testing DdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, NULL, ....)\n"); - - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - - retValue = OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC); - - testing_noteq(retValue,FALSE,fails,"29. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - testing_eq(pHalInfo,NULL,fails,"30. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - testing_eq(pCallBackFlags,NULL,fails,"31. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - testing_noteq(puD3dCallbacks,NULL,fails,"32. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - testing_noteq(puD3dDriverData,NULL,fails,"33. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - testing_noteq(puD3dBufferCallbacks,NULL,fails,"34. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - testing_noteq(puD3dTextureFormats,NULL,fails,"35. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - testing_noteq(puNumFourCC,NULL,fails,"36. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - testing_noteq(puFourCC,NULL,fails,"37. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\0"); - /* - if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) && - (pHalInfo->dwSize != sizeof(DD_HALINFO_V4))) - { - printf("38. if this show for NT 2000/XP/2003 ignore it, NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...);\n"); - fails++; - } - */ - - if (dumping_on == TRUE) - { - dump_halinfo(pHalInfo,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...)"); - dump_CallBackFlags(pCallBackFlags,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ...)"); - } - - /* testing OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, D3dCallbacks, .... */ - printf("testing DdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ....)\n"); - - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - - retValue = OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC); - - testing_noteq(retValue,FALSE,fails,"39. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - testing_eq(pHalInfo,NULL,fails,"40. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - testing_eq(pCallBackFlags,NULL,fails,"41. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - - - testing_noteq(puD3dCallbacks->dwSize,sizeof(D3DNTHAL_CALLBACKS),fails,"42. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - - testing_noteq(puD3dDriverData,NULL,fails,"43. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - testing_noteq(puD3dBufferCallbacks,NULL,fails,"44. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - testing_noteq(puD3dTextureFormats,NULL,fails,"45. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - testing_noteq(puNumFourCC,NULL,fails,"46. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - testing_noteq(puFourCC,NULL,fails,"47. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - /* - if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) && - (pHalInfo->dwSize != sizeof(DD_HALINFO_V4))) - { - printf("48. if this show for NT 2000/XP/2003 ignore it, NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\n"); - fails++; - } - */ - - if (dumping_on == TRUE) - { - dump_halinfo(pHalInfo,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...)"); - dump_CallBackFlags(pCallBackFlags,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...)"); - dump_D3dCallbacks(puD3dCallbacks,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...)"); - } - - /* testing OsThunkDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, */ - printf("testing DdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ....)\n"); - - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - puD3dDriverData = &D3dDriverData; - - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS)); - - retValue = OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC); - - testing_noteq(retValue,FALSE,fails,"49. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\0"); - testing_eq(pHalInfo,NULL,fails,"50. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\0"); - testing_eq(pCallBackFlags,NULL,fails,"51. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\0"); - testing_noteq(puD3dCallbacks->dwSize,sizeof(D3DNTHAL_CALLBACKS),fails,"52. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\0"); - - testing_noteq(puD3dDriverData->dwSize,sizeof(D3DNTHAL_GLOBALDRIVERDATA),fails,"53. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, NULL, ...);\0"); - - testing_noteq(puD3dBufferCallbacks,NULL,fails,"54. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\0"); - testing_noteq(puD3dTextureFormats,NULL,fails,"55. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\0"); - testing_noteq(puNumFourCC,NULL,fails,"56. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\0"); - testing_noteq(puFourCC,NULL,fails,"57. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\0"); - /* - if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) && - (pHalInfo->dwSize != sizeof(DD_HALINFO_V4))) - { - printf("58. if this show for NT 2000/XP/2003 ignore it, NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...);\n"); - fails++; - } - */ - - if (dumping_on == TRUE) - { - dump_halinfo(pHalInfo,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...)"); - dump_CallBackFlags(pCallBackFlags,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...)"); - dump_D3dCallbacks(puD3dCallbacks,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...)"); - dump_D3dDriverData(puD3dDriverData,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, ...)"); - } - -/* testing OsThunkDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, D3dBufferCallbacks, NULL, */ - printf("testing DdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, D3dBufferCallbacks, NULL, ....)\n"); - - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - puD3dDriverData = &D3dDriverData; - puD3dBufferCallbacks = &D3dBufferCallbacks; - - RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO)); - RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3); - RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS)); - RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_CALLBACKS)); - - retValue = OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC); - - testing_noteq(retValue,FALSE,fails,"59. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...);\0"); - testing_eq(pHalInfo,NULL,fails,"60. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...);\0"); - testing_eq(pCallBackFlags,NULL,fails,"61. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...);\0"); - testing_noteq(puD3dCallbacks->dwSize,sizeof(D3DNTHAL_CALLBACKS),fails,"62. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...);\0"); - - testing_noteq(puD3dDriverData->dwSize,sizeof(D3DNTHAL_GLOBALDRIVERDATA),fails,"63. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dBufferCallbacks, NULL, ...);\0"); - - testing_noteq(puD3dTextureFormats,NULL,fails,"64. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...);\0"); - testing_noteq(puNumFourCC,NULL,fails,"65. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...);\0"); - testing_noteq(puFourCC,NULL,fails,"66. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...);\0"); - /* - if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) && - (pHalInfo->dwSize != sizeof(DD_HALINFO_V4))) - { - printf("67. if this show for NT 2000/XP/2003 ignore it, NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...);\n"); - fails++; - } - */ - - if (puD3dBufferCallbacks) - { - testing_noteq(puD3dBufferCallbacks->dwSize,sizeof(DD_D3DBUFCALLBACKS),fails,"68. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL...);\0"); - } - - if (dumping_on == TRUE) - { - dump_halinfo(pHalInfo,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...)"); - dump_CallBackFlags(pCallBackFlags,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...)"); - dump_D3dCallbacks(puD3dCallbacks,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...)"); - dump_D3dDriverData(puD3dDriverData, "NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...)"); - dump_D3dBufferCallbacks(puD3dBufferCallbacks, "NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, ...)"); - } - -/* testing OsThunkDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, D3dBufferCallbacks, puD3dTextureFormats, NULL, */ - printf("testing DdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, D3dBufferCallbacks, puD3dTextureFormats, NULL, ....)\n"); - - pHalInfo = &HalInfo; - pCallBackFlags = CallBackFlags; - puD3dCallbacks = &D3dCallbacks; - puD3dDriverData = &D3dDriverData; - puD3dBufferCallbacks = &D3dBufferCallbacks; - - if (puD3dDriverData) - { - puD3dTextureFormats = malloc (puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2)); - if (!puD3dTextureFormats) - printf("Waring Out of memory\n"); - - RtlZeroMemory(puD3dTextureFormats, puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2)); - } - - retValue = OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, - pCallBackFlags, puD3dCallbacks, - puD3dDriverData, puD3dBufferCallbacks, - puD3dTextureFormats, puNumHeaps, - puvmList, puNumFourCC, - puFourCC); - - - - - - testing_noteq(retValue,FALSE,fails,"69. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...);\0"); - testing_eq(pHalInfo,NULL,fails,"70. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...);\0"); - testing_eq(pCallBackFlags,NULL,fails,"71. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...);\0"); - - /* does not work nice in xp */ - // testing_noteq(puD3dCallbacks->dwSize,sizeof(D3DNTHAL_CALLBACKS),fails,"72. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...);\0"); - - testing_noteq(puD3dDriverData->dwSize,sizeof(D3DNTHAL_GLOBALDRIVERDATA),fails,"73. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...);\0"); - - testing_noteq(puNumFourCC,NULL,fails,"74. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...);\0"); - testing_noteq(puFourCC,NULL,fails,"75. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...);\0"); - -// /* -// if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) && -// (pHalInfo->dwSize != sizeof(DD_HALINFO_V4))) -// { -// printf("8. if this show for NT 2000/XP/2003 ignore it, NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...);\n"); -// fails++; -// } -// */ -// - if (puD3dBufferCallbacks) - { - - testing_noteq(puD3dBufferCallbacks->dwSize,sizeof(DD_D3DBUFCALLBACKS),fails,"76. NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL...);\0"); - } - - if (puD3dTextureFormats) - { - /* fixme test case for it */ - } - - if (dumping_on == TRUE) - { - dump_halinfo(pHalInfo,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...)"); - dump_CallBackFlags(pCallBackFlags,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...)"); - dump_D3dCallbacks(puD3dCallbacks,"NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...)"); - dump_D3dDriverData(puD3dDriverData, "NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...)"); - dump_D3dBufferCallbacks(puD3dBufferCallbacks, "NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...)"); - dump_D3dTextureFormats(puD3dTextureFormats, puD3dDriverData->dwNumTextureFormats, "NtGdiDdQueryDirectDrawObject(hDirectDrawLocal, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, ...)"); - } - - - - - - if (puD3dTextureFormats) - free (puD3dTextureFormats); - show_status(fails, "NtGdiDdQueryDirectDrawObject\0"); -} diff --git a/rostests/dxtest/win32kdxtest/NtGdiDdWaitForVerticalBlank.c b/rostests/dxtest/win32kdxtest/NtGdiDdWaitForVerticalBlank.c deleted file mode 100644 index 2f7eae7ace1..00000000000 --- a/rostests/dxtest/win32kdxtest/NtGdiDdWaitForVerticalBlank.c +++ /dev/null @@ -1,46 +0,0 @@ -#include -/* SDK/DDK/NDK Headers. */ -#include -#include -#include -#include -#include - -#include -#include "test.h" - -/* - * Test see if we can delete a DirectDrawObject from win32k - * - */ -void -test_NtGdiDdWaitForVerticalBlank(HANDLE hDirectDrawLocal) -{ - int fails=0; - BOOL retValue=FALSE; - DDHAL_WAITFORVERTICALBLANKDATA pDdWaitForVerticalBlankData; - - RtlZeroMemory(&pDdWaitForVerticalBlankData,sizeof(DDHAL_WAITFORVERTICALBLANKDATA)); - - retValue = OsThunkDdWaitForVerticalBlank(NULL,NULL); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"1. NtGdiDdWaitForVerticalBlank(NULL,NULL);\0"); - - retValue = OsThunkDdWaitForVerticalBlank(hDirectDrawLocal,NULL); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"2. NtGdiDdWaitForVerticalBlank(hDirectDrawLocal,NULL);\0"); - - retValue = OsThunkDdWaitForVerticalBlank(hDirectDrawLocal,(PDD_WAITFORVERTICALBLANKDATA)&pDdWaitForVerticalBlankData); - testing_eq(retValue, DDHAL_DRIVER_HANDLED,fails,"3. NtGdiDdWaitForVerticalBlank(hDirectDrawLocal,NULL);\0"); - testing_eq(pDdWaitForVerticalBlankData.ddRVal, DD_OK,fails,"4. NtGdiDdWaitForVerticalBlank(hDirectDrawLocal,NULL);\0"); - - RtlZeroMemory(&pDdWaitForVerticalBlankData,sizeof(DDHAL_WAITFORVERTICALBLANKDATA)); - pDdWaitForVerticalBlankData.dwFlags = DDWAITVB_I_TESTVB; - retValue = OsThunkDdWaitForVerticalBlank(hDirectDrawLocal,(PDD_WAITFORVERTICALBLANKDATA)&pDdWaitForVerticalBlankData); - - testing_eq(retValue, DDHAL_DRIVER_NOTHANDLED,fails,"5. NtGdiDdWaitForVerticalBlank(hDirectDrawLocal,NULL);\0"); - testing_noteq(pDdWaitForVerticalBlankData.ddRVal, DD_OK,fails,"6. NtGdiDdWaitForVerticalBlank(hDirectDrawLocal,NULL);\0"); - - retValue = OsThunkDdWaitForVerticalBlank(hDirectDrawLocal,(PDD_WAITFORVERTICALBLANKDATA)&pDdWaitForVerticalBlankData); - - show_status(fails, "NtGdiDdWaitForVerticalBlank\0"); -} - diff --git a/rostests/dxtest/win32kdxtest/dump.c b/rostests/dxtest/win32kdxtest/dump.c deleted file mode 100644 index 9598030d2a8..00000000000 --- a/rostests/dxtest/win32kdxtest/dump.c +++ /dev/null @@ -1,1436 +0,0 @@ -/* All testcase are base how windows 2000 sp4 acting */ - - -#include -#include -#include -#include -#include - -#include "test.h" - -/* this flag are only set for dx5 and lower but we need check see if we getting it back from win32k or not */ -#define D3DLIGHTCAPS_GLSPOT 0x00000010 - -/* this flag are only set for dx6 and lower but we need check see if we getting it back from win32k or not */ -#define D3DLIGHTCAPS_PARALLELPOINT 0x00000008 - -#define checkflag(dwflag,dwvalue,text) \ - if (dwflag & dwvalue) \ - { \ - if (count!=0) \ - { \ - printf("| "); \ - } \ - dwflag = (ULONG)dwflag - (ULONG)dwvalue; \ - printf("%s ",text); \ - count++; \ - } - -#define endcheckflag(dwflag,text) \ - if (count==0) \ - printf("0x%08lx\n", (ULONG) dwflag);\ - else \ - printf("\n");\ - if (flag != 0) \ - printf("undoc value in %s flags value %08lx\n",text, (ULONG) dwflag); - - - -void -dump_CallBackFlags(DWORD *pCallBackFlags, char *text) -{ - UINT flag; - INT count; - - printf("dumping the CallBackFlags from %s\n",text); - printf("pCallBackFlags[0] : "); - - flag=pCallBackFlags[0]; - count=0; - checkflag(flag,DDHAL_CB32_CANCREATESURFACE,"DDHAL_CB32_CANCREATESURFACE"); - checkflag(flag,DDHAL_CB32_CREATEPALETTE,"DDHAL_CB32_CREATEPALETTE"); - checkflag(flag,DDHAL_CB32_CREATESURFACE,"DDHAL_CB32_CREATESURFACE"); - checkflag(flag,DDHAL_CB32_GETSCANLINE,"DDHAL_CB32_GETSCANLINE"); - checkflag(flag,DDHAL_CB32_MAPMEMORY,"DDHAL_CB32_MAPMEMORY"); - checkflag(flag,DDHAL_CB32_SETCOLORKEY,"DDHAL_CB32_SETCOLORKEY"); - checkflag(flag,DDHAL_CB32_SETMODE,"DDHAL_CB32_SETMODE"); - checkflag(flag,DDHAL_CB32_WAITFORVERTICALBLANK,"DDHAL_CB32_WAITFORVERTICALBLANK"); - endcheckflag(flag,"pCallBackFlags[0]"); - - /* SURFACE callback */ - printf("pCallBackFlags[1] : "); - flag = pCallBackFlags[1]; - count = 0; - checkflag(flag,DDHAL_SURFCB32_ADDATTACHEDSURFACE,"DDHAL_SURFCB32_ADDATTACHEDSURFACE"); - checkflag(flag,DDHAL_SURFCB32_BLT,"DDHAL_SURFCB32_BLT"); - checkflag(flag,DDHAL_SURFCB32_DESTROYSURFACE,"DDHAL_SURFCB32_DESTROYSURFACE"); - checkflag(flag,DDHAL_SURFCB32_FLIP,"DDHAL_SURFCB32_FLIP"); - checkflag(flag,DDHAL_SURFCB32_GETBLTSTATUS,"DDHAL_SURFCB32_GETBLTSTATUS"); - checkflag(flag,DDHAL_SURFCB32_GETFLIPSTATUS,"DDHAL_SURFCB32_GETFLIPSTATUS"); - checkflag(flag,DDHAL_SURFCB32_LOCK,"DDHAL_SURFCB32_LOCK"); - checkflag(flag,DDHAL_SURFCB32_RESERVED4,"DDHAL_SURFCB32_RESERVED4"); - checkflag(flag,DDHAL_SURFCB32_SETCLIPLIST,"DDHAL_SURFCB32_SETCLIPLIST"); - checkflag(flag,DDHAL_SURFCB32_SETCOLORKEY,"DDHAL_SURFCB32_SETCOLORKEY"); - checkflag(flag,DDHAL_SURFCB32_SETOVERLAYPOSITION,"DDHAL_SURFCB32_SETOVERLAYPOSITION"); - checkflag(flag,DDHAL_SURFCB32_SETPALETTE,"DDHAL_SURFCB32_SETPALETTE"); - checkflag(flag,DDHAL_SURFCB32_UNLOCK,"DDHAL_SURFCB32_UNLOCK"); - checkflag(flag,DDHAL_SURFCB32_UPDATEOVERLAY,"DDHAL_SURFCB32_UPDATEOVERLAY"); - endcheckflag(flag,"pCallBackFlags[1]"); - - - /* palleted */ - printf("pCallBackFlags[2] : "); - flag = pCallBackFlags[2]; - count = 0; - checkflag(flag,DDHAL_PALCB32_DESTROYPALETTE,"DDHAL_PALCB32_DESTROYPALETTE"); - checkflag(flag,DDHAL_PALCB32_SETENTRIES,"DDHAL_PALCB32_SETENTRIES"); - endcheckflag(flag,"pCallBackFlags[2]"); -} - -void -dump_halinfo(DD_HALINFO *pHalInfo, char *text) -{ - printf("dumping the DD_HALINFO from %s\n",text); - - if (pHalInfo->dwSize == sizeof(DD_HALINFO_V4)) - { - DD_HALINFO_V4 *pHalInfo4 = (DD_HALINFO_V4 *) pHalInfo; - int t; - - printf("DD_HALINFO Version NT4 found \n"); - printf(" pHalInfo4->dwSize : 0x%08lx\n",(long)pHalInfo4->dwSize); - printf(" pHalInfo4->vmiData->fpPrimary : 0x%08lx\n",(long)pHalInfo4->vmiData.fpPrimary); - printf(" pHalInfo4->vmiData->dwFlags : 0x%08lx\n",(long)pHalInfo4->vmiData.dwFlags); - printf(" pHalInfo4->vmiData->dwDisplayWidth : 0x%08lx\n",(long)pHalInfo4->vmiData.dwDisplayWidth); - printf(" pHalInfo4->vmiData->dwDisplayHeight : 0x%08lx\n",(long)pHalInfo4->vmiData.dwDisplayHeight); - printf(" pHalInfo4->vmiData->lDisplayPitch : 0x%08lx\n",(long)pHalInfo4->vmiData.lDisplayPitch); - - printf(" pHalInfo4->vmiData->ddpfDisplay.dwSize : 0x%08lx\n",(long)pHalInfo4->vmiData.ddpfDisplay.dwSize); - printf(" pHalInfo4->vmiData->ddpfDisplay.dwFlags : 0x%08lx\n",(long)pHalInfo4->vmiData.ddpfDisplay.dwFlags); - printf(" pHalInfo4->vmiData->ddpfDisplay.dwFourCC : 0x%08lx\n",(long)pHalInfo4->vmiData.ddpfDisplay.dwFourCC); - printf(" pHalInfo4->vmiData->ddpfDisplay.dwRGBBitCount : 0x%08lx\n",(long)pHalInfo4->vmiData.ddpfDisplay.dwRGBBitCount); - printf(" pHalInfo4->vmiData->ddpfDisplay.dwRBitMask : 0x%08lx\n",(long)pHalInfo4->vmiData.ddpfDisplay.dwRBitMask); - printf(" pHalInfo4->vmiData->ddpfDisplay.dwGBitMask : 0x%08lx\n",(long)pHalInfo4->vmiData.ddpfDisplay.dwGBitMask); - printf(" pHalInfo4->vmiData->ddpfDisplay.dwBBitMask : 0x%08lx\n",(long)pHalInfo4->vmiData.ddpfDisplay.dwBBitMask); - printf(" pHalInfo4->vmiData->ddpfDisplay.dwRGBAlphaBitMask : 0x%08lx\n",(long)pHalInfo4->vmiData.ddpfDisplay.dwRGBAlphaBitMask); - - printf(" pHalInfo4->vmiData->dwOffscreenAlign : 0x%08lx\n",(long)pHalInfo4->vmiData.dwOffscreenAlign); - printf(" pHalInfo4->vmiData->dwOverlayAlign : 0x%08lx\n",(long)pHalInfo4->vmiData.dwOverlayAlign); - printf(" pHalInfo4->vmiData->dwTextureAlign : 0x%08lx\n",(long)pHalInfo4->vmiData.dwTextureAlign); - printf(" pHalInfo4->vmiData->dwZBufferAlign : 0x%08lx\n",(long)pHalInfo4->vmiData.dwZBufferAlign); - printf(" pHalInfo4->vmiData->dwAlphaAlign : 0x%08lx\n",(long)pHalInfo4->vmiData.dwAlphaAlign); - printf(" pHalInfo4->vmiData->pvPrimary : 0x%08lx\n",(long)pHalInfo4->vmiData.pvPrimary); - - printf(" pHalInfo4->ddCaps.dwSize : 0x%08lx\n",pHalInfo4->ddCaps.dwSize); - printf(" pHalInfo4->ddCaps.dwCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwCaps); - printf(" pHalInfo4->ddCaps.dwCaps2 : 0x%08lx\n",pHalInfo4->ddCaps.dwCaps2); - printf(" pHalInfo4->ddCaps.dwCKeyCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwCKeyCaps); - printf(" pHalInfo4->ddCaps.dwFXCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwFXCaps); - printf(" pHalInfo4->ddCaps.dwFXAlphaCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwFXAlphaCaps); - printf(" pHalInfo4->ddCaps.dwPalCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwPalCaps); - printf(" pHalInfo4->ddCaps.dwSVCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwSVCaps); - printf(" pHalInfo4->ddCaps.dwAlphaBltConstBitDepths : 0x%08lx\n",pHalInfo4->ddCaps.dwAlphaBltConstBitDepths); - printf(" pHalInfo4->ddCaps.dwAlphaBltPixelBitDepths : 0x%08lx\n",pHalInfo4->ddCaps.dwAlphaBltPixelBitDepths); - printf(" pHalInfo4->ddCaps.dwAlphaBltSurfaceBitDepths : 0x%08lx\n",pHalInfo4->ddCaps.dwAlphaBltSurfaceBitDepths); - printf(" pHalInfo4->ddCaps.dwAlphaOverlayConstBitDepths : 0x%08lx\n",pHalInfo4->ddCaps.dwAlphaOverlayConstBitDepths); - printf(" pHalInfo4->ddCaps.dwAlphaOverlayPixelBitDepths : 0x%08lx\n",pHalInfo4->ddCaps.dwAlphaOverlayPixelBitDepths); - printf(" pHalInfo4->ddCaps.dwAlphaOverlaySurfaceBitDepths : 0x%08lx\n",pHalInfo4->ddCaps.dwAlphaOverlaySurfaceBitDepths); - printf(" pHalInfo4->ddCaps.dwZBufferBitDepths : 0x%08lx\n",pHalInfo4->ddCaps.dwZBufferBitDepths); - printf(" pHalInfo4->ddCaps.dwVidMemTotal : 0x%08lx\n",pHalInfo4->ddCaps.dwVidMemTotal); - printf(" pHalInfo4->ddCaps.dwVidMemFree : 0x%08lx\n",pHalInfo4->ddCaps.dwVidMemFree); - printf(" pHalInfo4->ddCaps.dwMaxVisibleOverlays : 0x%08lx\n",pHalInfo4->ddCaps.dwMaxVisibleOverlays); - printf(" pHalInfo4->ddCaps.dwCurrVisibleOverlays : 0x%08lx\n",pHalInfo4->ddCaps.dwCurrVisibleOverlays); - printf(" pHalInfo4->ddCaps.dwNumFourCCCodes : 0x%08lx\n",pHalInfo4->ddCaps.dwNumFourCCCodes); - printf(" pHalInfo4->ddCaps.dwAlignBoundarySrc : 0x%08lx\n",pHalInfo4->ddCaps.dwAlignBoundarySrc); - printf(" pHalInfo4->ddCaps.dwAlignSizeSrc : 0x%08lx\n",pHalInfo4->ddCaps.dwAlignSizeSrc); - printf(" pHalInfo4->ddCaps.dwAlignBoundaryDes : 0x%08lx\n",pHalInfo4->ddCaps.dwAlignBoundaryDest); - printf(" pHalInfo4->ddCaps.dwAlignSizeDest : 0x%08lx\n",pHalInfo4->ddCaps.dwAlignSizeDest); - printf(" pHalInfo4->ddCaps.dwAlignStrideAlign : 0x%08lx\n",pHalInfo4->ddCaps.dwAlignStrideAlign); - for (t=0;tddCaps.dwRops[0x%04x] : 0x%08lx\n",t,pHalInfo4->ddCaps.dwRops[t]); - } - printf(" pHalInfo4->ddCaps.ddsCaps.dwCaps : 0x%08lx\n",pHalInfo4->ddCaps.ddsCaps.dwCaps); - printf(" pHalInfo4->ddCaps.dwMinOverlayStretch : 0x%08lx\n",pHalInfo4->ddCaps.dwMinOverlayStretch); - printf(" pHalInfo4->ddCaps.dwMaxOverlayStretch : 0x%08lx\n",pHalInfo4->ddCaps.dwMaxOverlayStretch); - printf(" pHalInfo4->ddCaps.dwMinLiveVideoStretch : 0x%08lx\n",pHalInfo4->ddCaps.dwMinLiveVideoStretch); - printf(" pHalInfo4->ddCaps.dwMaxLiveVideoStretch : 0x%08lx\n",pHalInfo4->ddCaps.dwMaxLiveVideoStretch); - printf(" pHalInfo4->ddCaps.dwMinHwCodecStretch : 0x%08lx\n",pHalInfo4->ddCaps.dwMinHwCodecStretch); - printf(" pHalInfo4->ddCaps.dwMaxHwCodecStretch : 0x%08lx\n",pHalInfo4->ddCaps.dwMaxHwCodecStretch); - printf(" pHalInfo4->ddCaps.dwReserved1 : 0x%08lx\n",pHalInfo4->ddCaps.dwReserved1); - printf(" pHalInfo4->ddCaps.dwReserved2 : 0x%08lx\n",pHalInfo4->ddCaps.dwReserved2); - printf(" pHalInfo4->ddCaps.dwReserved3 : 0x%08lx\n",pHalInfo4->ddCaps.dwReserved3); - printf(" pHalInfo4->ddCaps.dwSVBCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwSVBCaps); - printf(" pHalInfo4->ddCaps.dwSVBCKeyCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwSVBCKeyCaps); - printf(" pHalInfo4->ddCaps.dwSVBFXCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwSVBFXCaps); - for (t=0;tddCaps.dwSVBRops[0x%04x] : 0x%08lx\n",t,pHalInfo4->ddCaps.dwSVBRops[t]); - } - printf(" pHalInfo4->ddCaps.dwVSBCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwVSBCaps); - printf(" pHalInfo4->ddCaps.dwVSBCKeyCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwVSBCKeyCaps); - printf(" pHalInfo4->ddCaps.dwVSBFXCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwVSBFXCaps); - for (t=0;tddCaps.dwVSBRops[0x%04x] : 0x%08lx\n",t,pHalInfo4->ddCaps.dwVSBRops[t]); - } - printf(" pHalInfo4->ddCaps.dwSSBCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwSSBCaps); - printf(" pHalInfo4->ddCaps.dwSSBCKeyCa : 0x%08lx\n",pHalInfo4->ddCaps.dwSSBCKeyCaps); - printf(" pHalInfo4->ddCaps.dwSSBFXCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwSSBFXCaps); - for (t=0;tddCaps.dwSSBRops[0x%04x] : 0x%08lx\n",t,pHalInfo4->ddCaps.dwSSBRops[t]); - } - - printf(" pHalInfo4->ddCaps.dwMaxVideoPorts : 0x%08lx\n",pHalInfo4->ddCaps.dwMaxVideoPorts); - printf(" pHalInfo4->ddCaps.dwCurrVideoPorts : 0x%08lx\n",pHalInfo4->ddCaps.dwCurrVideoPorts); - printf(" pHalInfo4->ddCaps.dwSVBCaps2 : 0x%08lx\n",pHalInfo4->ddCaps.dwSVBCaps2); - - - printf(" pHalInfo4->GetDriverInfo : 0x%08lx\n",(long)pHalInfo4->GetDriverInfo); - printf(" pHalInfo4->dwFlags : 0x%08lx\n",(long)pHalInfo4->dwFlags); - - } - else if (pHalInfo->dwSize == sizeof(DD_HALINFO)) - { - int t; - UINT flag; - INT count=0; - - printf("DD_HALINFO Version NT 2000/XP/2003 found \n"); - printf(" pHalInfo->dwSize : 0x%08lx\n",(long)pHalInfo->dwSize); - - printf(" pHalInfo->vmiData->fpPrimary : 0x%08lx\n",(long)pHalInfo->vmiData.fpPrimary); - printf(" pHalInfo->vmiData->dwFlags : 0x%08lx\n",(long)pHalInfo->vmiData.dwFlags); - printf(" pHalInfo->vmiData->dwDisplayWidth : 0x%08lx\n",(long)pHalInfo->vmiData.dwDisplayWidth); - printf(" pHalInfo->vmiData->dwDisplayHeight : 0x%08lx\n",(long)pHalInfo->vmiData.dwDisplayHeight); - printf(" pHalInfo->vmiData->lDisplayPitch : 0x%08lx\n",(long)pHalInfo->vmiData.lDisplayPitch); - - printf(" pHalInfo->vmiData->ddpfDisplay.dwSize : 0x%08lx\n",(long)pHalInfo->vmiData.ddpfDisplay.dwSize); - printf(" pHalInfo->vmiData->ddpfDisplay.dwFlags : 0x%08lx\n",(long)pHalInfo->vmiData.ddpfDisplay.dwFlags); - printf(" pHalInfo->vmiData->ddpfDisplay.dwFourCC : 0x%08lx\n",(long)pHalInfo->vmiData.ddpfDisplay.dwFourCC); - printf(" pHalInfo->vmiData->ddpfDisplay.dwRGBBitCount : 0x%08lx\n",(long)pHalInfo->vmiData.ddpfDisplay.dwRGBBitCount); - printf(" pHalInfo->vmiData->ddpfDisplay.dwRBitMask : 0x%08lx\n",(long)pHalInfo->vmiData.ddpfDisplay.dwRBitMask); - printf(" pHalInfo->vmiData->ddpfDisplay.dwGBitMask : 0x%08lx\n",(long)pHalInfo->vmiData.ddpfDisplay.dwGBitMask); - printf(" pHalInfo->vmiData->ddpfDisplay.dwBBitMask : 0x%08lx\n",(long)pHalInfo->vmiData.ddpfDisplay.dwBBitMask); - printf(" pHalInfo->vmiData->ddpfDisplay.dwRGBAlphaBitMask : 0x%08lx\n",(long)pHalInfo->vmiData.ddpfDisplay.dwRGBAlphaBitMask); - - - printf(" pHalInfo->vmiData->dwOffscreenAlign : 0x%08lx\n",(long)pHalInfo->vmiData.dwOffscreenAlign); - printf(" pHalInfo->vmiData->dwOverlayAlign : 0x%08lx\n",(long)pHalInfo->vmiData.dwOverlayAlign); - printf(" pHalInfo->vmiData->dwTextureAlign : 0x%08lx\n",(long)pHalInfo->vmiData.dwTextureAlign); - printf(" pHalInfo->vmiData->dwZBufferAlign : 0x%08lx\n",(long)pHalInfo->vmiData.dwZBufferAlign); - printf(" pHalInfo->vmiData->dwAlphaAlign : 0x%08lx\n",(long)pHalInfo->vmiData.dwAlphaAlign); - printf(" pHalInfo->vmiData->pvPrimary : 0x%08lx\n",(long)pHalInfo->vmiData.pvPrimary); - - printf(" pHalInfo->ddCaps.dwSize : 0x%08lx\n",pHalInfo->ddCaps.dwSize); - printf(" pHalInfo->ddCaps.dwCaps : "); - flag = pHalInfo->ddCaps.dwCaps; - count = 0; - checkflag(flag,DDCAPS_3D,"DDCAPS_3D"); - checkflag(flag,DDCAPS_ALIGNBOUNDARYDEST,"DDCAPS_ALIGNBOUNDARYDEST"); - checkflag(flag,DDCAPS_ALIGNBOUNDARYSRC,"DDCAPS_ALIGNBOUNDARYSRC"); - checkflag(flag,DDCAPS_ALIGNSIZEDEST,"DDCAPS_ALIGNSIZEDEST"); - checkflag(flag,DDCAPS_ALIGNSIZESRC,"DDCAPS_ALIGNSIZESRC"); - checkflag(flag,DDCAPS_ALIGNSTRIDE,"DDCAPS_ALIGNSTRIDE"); - checkflag(flag,DDCAPS_ALPHA,"DDCAPS_ALPHA"); - checkflag(flag,DDCAPS_BANKSWITCHED,"DDCAPS_BANKSWITCHED"); - checkflag(flag,DDCAPS_BLT,"DDCAPS_BLT"); - checkflag(flag,DDCAPS_BLTCOLORFILL,"DDCAPS_BLTCOLORFILL"); - checkflag(flag,DDCAPS_BLTDEPTHFILL,"DDCAPS_BLTDEPTHFILL"); - checkflag(flag,DDCAPS_BLTFOURCC,"DDCAPS_BLTFOURCC"); - checkflag(flag,DDCAPS_BLTQUEUE,"DDCAPS_BLTQUEUE"); - checkflag(flag,DDCAPS_BLTSTRETCH,"DDCAPS_BLTSTRETCH"); - checkflag(flag,DDCAPS_CANBLTSYSMEM,"DDCAPS_CANBLTSYSMEM"); - checkflag(flag,DDCAPS_CANCLIP,"DDCAPS_CANCLIP"); - checkflag(flag,DDCAPS_CANCLIPSTRETCHED,"DDCAPS_CANCLIPSTRETCHED"); - checkflag(flag,DDCAPS_COLORKEY,"DDCAPS_COLORKEY"); - checkflag(flag,DDCAPS_COLORKEYHWASSIST,"DDCAPS_COLORKEYHWASSIST"); - checkflag(flag,DDCAPS_GDI,"DDCAPS_GDI"); - checkflag(flag,DDCAPS_NOHARDWARE,"DDCAPS_NOHARDWARE"); - checkflag(flag,DDCAPS_OVERLAY,"DDCAPS_OVERLAY"); - checkflag(flag,DDCAPS_OVERLAYCANTCLIP,"DDCAPS_OVERLAYCANTCLIP"); - checkflag(flag,DDCAPS_OVERLAYFOURCC,"DDCAPS_OVERLAYFOURCC"); - checkflag(flag,DDCAPS_OVERLAYSTRETCH,"DDCAPS_OVERLAYSTRETCH"); - checkflag(flag,DDCAPS_PALETTE,"DDCAPS_PALETTE"); - checkflag(flag,DDCAPS_PALETTEVSYNC,"DDCAPS_PALETTEVSYNC"); - checkflag(flag,DDCAPS_READSCANLINE,"DDCAPS_READSCANLINE"); - checkflag(flag,DDCAPS_STEREOVIEW,"DDCAPS_STEREOVIEW"); - checkflag(flag,DDCAPS_VBI,"DDCAPS_VBI"); - checkflag(flag,DDCAPS_ZBLTS,"DDCAPS_ZBLTS"); - checkflag(flag,DDCAPS_ZOVERLAYS,"DDCAPS_ZOVERLAYS"); - endcheckflag(flag,"pHalInfo->ddCaps.dwCaps"); - - printf(" pHalInfo->ddCaps.dwCaps2 : "); - flag = pHalInfo->ddCaps.dwCaps2; - count = 0; - checkflag(flag,DDCAPS2_AUTOFLIPOVERLAY,"DDCAPS2_AUTOFLIPOVERLAY"); - checkflag(flag,DDCAPS2_CANAUTOGENMIPMAP,"DDCAPS2_CANAUTOGENMIPMAP"); - checkflag(flag,DDCAPS2_CANBOBHARDWARE,"DDCAPS2_CANBOBHARDWARE"); - checkflag(flag,DDCAPS2_CANBOBINTERLEAVED,"DDCAPS2_CANBOBINTERLEAVED"); - checkflag(flag,DDCAPS2_CANBOBNONINTERLEAVED,"DDCAPS2_CANBOBNONINTERLEAVED"); - checkflag(flag,DDCAPS2_CANCALIBRATEGAMMA,"DDCAPS2_CANCALIBRATEGAMMA"); - checkflag(flag,DDCAPS2_CANDROPZ16BIT,"DDCAPS2_CANDROPZ16BIT"); - checkflag(flag,DDCAPS2_CANFLIPODDEVEN,"DDCAPS2_CANFLIPODDEVEN"); - checkflag(flag,DDCAPS2_CANMANAGERESOURCE,"DDCAPS2_CANMANAGERESOURCE"); - checkflag(flag,DDCAPS2_CANMANAGETEXTURE,"DDCAPS2_CANMANAGETEXTURE"); - - checkflag(flag,DDCAPS2_CANRENDERWINDOWED,"DDCAPS2_CANRENDERWINDOWED"); - checkflag(flag,DDCAPS2_CERTIFIED,"DDCAPS2_CERTIFIED"); - checkflag(flag,DDCAPS2_COLORCONTROLOVERLAY,"DDCAPS2_COLORCONTROLOVERLAY"); - checkflag(flag,DDCAPS2_COLORCONTROLPRIMARY,"DDCAPS2_COLORCONTROLPRIMARY"); - checkflag(flag,DDCAPS2_COPYFOURCC,"DDCAPS2_COPYFOURCC"); - checkflag(flag,DDCAPS2_FLIPINTERVAL,"DDCAPS2_FLIPINTERVAL"); - checkflag(flag,DDCAPS2_FLIPNOVSYNC,"DDCAPS2_FLIPNOVSYNC"); - checkflag(flag,DDCAPS2_NO2DDURING3DSCENE,"DDCAPS2_NO2DDURING3DSCENE"); - checkflag(flag,DDCAPS2_NONLOCALVIDMEM,"DDCAPS2_NONLOCALVIDMEM"); - checkflag(flag,DDCAPS2_NONLOCALVIDMEMCAPS,"DDCAPS2_NONLOCALVIDMEMCAPS"); - checkflag(flag,DDCAPS2_NOPAGELOCKREQUIRED,"DDCAPS2_NOPAGELOCKREQUIRED"); - checkflag(flag,DDCAPS2_PRIMARYGAMMA,"DDCAPS2_PRIMARYGAMMA"); - checkflag(flag,DDCAPS2_VIDEOPORT,"DDCAPS2_VIDEOPORT"); - checkflag(flag,DDCAPS2_WIDESURFACES,"DDCAPS2_WIDESURFACES"); - endcheckflag(flag,"pHalInfo->ddCaps.dwCaps2"); - - printf(" pHalInfo->ddCaps.dwCKeyCaps : "); - flag = pHalInfo->ddCaps.dwCKeyCaps; - count = 0; - checkflag(flag,DDCKEYCAPS_DESTBLT,"DDCKEYCAPS_DESTBLT"); - checkflag(flag,DDCKEYCAPS_DESTBLTCLRSPACE,"DDCKEYCAPS_DESTBLTCLRSPACE"); - checkflag(flag,DDCKEYCAPS_DESTBLTCLRSPACEYUV,"DDCKEYCAPS_DESTBLTCLRSPACEYUV"); - checkflag(flag,DDCKEYCAPS_DESTBLTYUV,"DDCKEYCAPS_DESTBLTYUV"); - checkflag(flag,DDCKEYCAPS_DESTOVERLAY,"DDCKEYCAPS_DESTOVERLAY"); - checkflag(flag,DDCKEYCAPS_DESTOVERLAYCLRSPACE,"DDCKEYCAPS_DESTOVERLAYCLRSPACE"); - checkflag(flag,DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV,"DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV"); - checkflag(flag,DDCKEYCAPS_DESTOVERLAYONEACTIVE,"DDCKEYCAPS_DESTOVERLAYONEACTIVE"); - checkflag(flag,DDCKEYCAPS_DESTOVERLAYYUV,"DDCKEYCAPS_DESTOVERLAYYUV"); - checkflag(flag,DDCKEYCAPS_NOCOSTOVERLAY,"DDCKEYCAPS_NOCOSTOVERLAY"); - checkflag(flag,DDCKEYCAPS_SRCBLT,"DDCKEYCAPS_SRCBLT"); - checkflag(flag,DDCKEYCAPS_SRCBLTCLRSPACE,"DDCKEYCAPS_SRCBLTCLRSPACE"); - checkflag(flag,DDCKEYCAPS_SRCBLTCLRSPACEYUV,"DDCKEYCAPS_SRCBLTCLRSPACEYUV"); - checkflag(flag,DDCKEYCAPS_SRCBLTYUV,"DDCKEYCAPS_SRCBLTYUV"); - checkflag(flag,DDCKEYCAPS_SRCOVERLAY,"DDCKEYCAPS_SRCOVERLAY"); - checkflag(flag,DDCKEYCAPS_SRCOVERLAYCLRSPACE,"DDCKEYCAPS_SRCOVERLAYCLRSPACE"); - checkflag(flag,DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV,"DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV"); - checkflag(flag,DDCKEYCAPS_SRCOVERLAYONEACTIVE,"DDCKEYCAPS_SRCOVERLAYONEACTIVE"); - checkflag(flag,DDCKEYCAPS_SRCOVERLAYYUV,"DDCKEYCAPS_SRCOVERLAYYUV"); - endcheckflag(flag,"pHalInfo->ddCaps.dwCKeyCaps"); - - printf(" pHalInfo->ddCaps.dwFXCaps : "); - flag = pHalInfo->ddCaps.dwFXCaps; - count = 0; - checkflag(flag,DDFXCAPS_BLTARITHSTRETCHY,"DDFXCAPS_BLTARITHSTRETCHY"); - checkflag(flag,DDFXCAPS_BLTARITHSTRETCHYN,"DDFXCAPS_BLTARITHSTRETCHYN"); - checkflag(flag,DDFXCAPS_BLTMIRRORLEFTRIGHT,"DDFXCAPS_BLTMIRRORLEFTRIGHT"); - checkflag(flag,DDFXCAPS_BLTMIRRORUPDOWN,"DDFXCAPS_BLTMIRRORUPDOWN"); - checkflag(flag,DDFXCAPS_BLTROTATION,"DDFXCAPS_BLTROTATION"); - checkflag(flag,DDFXCAPS_BLTROTATION90,"DDFXCAPS_BLTROTATION90"); - checkflag(flag,DDFXCAPS_BLTSHRINKX,"DDFXCAPS_BLTSHRINKX"); - checkflag(flag,DDFXCAPS_BLTSHRINKXN,"DDFXCAPS_BLTSHRINKXN"); - checkflag(flag,DDFXCAPS_BLTSHRINKY,"DDFXCAPS_BLTSHRINKY"); - checkflag(flag,DDFXCAPS_BLTSHRINKYN,"DDFXCAPS_BLTSHRINKYN"); - checkflag(flag,DDFXCAPS_BLTSTRETCHX,"DDFXCAPS_BLTSTRETCHX"); - checkflag(flag,DDFXCAPS_BLTSTRETCHXN,"DDFXCAPS_BLTSTRETCHXN"); - checkflag(flag,DDFXCAPS_BLTSTRETCHY,"DDFXCAPS_BLTSTRETCHY"); - checkflag(flag,DDFXCAPS_BLTSTRETCHYN,"DDFXCAPS_BLTSTRETCHYN"); - checkflag(flag,DDFXCAPS_OVERLAYARITHSTRETCHY,"DDFXCAPS_OVERLAYARITHSTRETCHY"); - checkflag(flag,DDFXCAPS_OVERLAYARITHSTRETCHYN,"DDFXCAPS_OVERLAYARITHSTRETCHYN"); - checkflag(flag,DDFXCAPS_OVERLAYMIRRORLEFTRIGHT,"DDFXCAPS_OVERLAYMIRRORLEFTRIGHT"); - checkflag(flag,DDFXCAPS_OVERLAYMIRRORUPDOWN,"DDFXCAPS_OVERLAYMIRRORUPDOWN"); - checkflag(flag,DDFXCAPS_OVERLAYSHRINKX,"DDFXCAPS_OVERLAYSHRINKX"); - checkflag(flag,DDFXCAPS_OVERLAYSHRINKXN,"DDFXCAPS_OVERLAYSHRINKXN"); - checkflag(flag,DDFXCAPS_OVERLAYSHRINKY,"DDFXCAPS_OVERLAYSHRINKY"); - checkflag(flag,DDFXCAPS_OVERLAYSHRINKYN,"DDFXCAPS_OVERLAYSHRINKYN"); - checkflag(flag,DDFXCAPS_OVERLAYSTRETCHX,"DDFXCAPS_OVERLAYSTRETCHX"); - checkflag(flag,DDFXCAPS_OVERLAYSTRETCHX,"DDFXCAPS_OVERLAYSTRETCHX"); - checkflag(flag,DDFXCAPS_OVERLAYSTRETCHY,"DDFXCAPS_OVERLAYSTRETCHY"); - checkflag(flag,DDFXCAPS_OVERLAYSTRETCHYN,"DDFXCAPS_OVERLAYSTRETCHYN"); - endcheckflag(flag,"pHalInfo->ddCaps.dwFXCaps"); - - printf(" pHalInfo->ddCaps.dwFXAlphaCaps : 0x%08lx\n",pHalInfo->ddCaps.dwFXAlphaCaps); - printf(" pHalInfo->ddCaps.dwPalCaps : 0x%08lx\n",pHalInfo->ddCaps.dwPalCaps); - - printf(" pHalInfo->ddCaps.dwSVCaps : "); - flag = pHalInfo->ddCaps.dwSVCaps; - count = 0; - checkflag(flag,DDSVCAPS_ENIGMA,"DDSVCAPS_ENIGMA"); - checkflag(flag,DDSVCAPS_FLICKER,"DDSVCAPS_FLICKER"); - checkflag(flag,DDSVCAPS_REDBLUE,"DDSVCAPS_REDBLUE"); - checkflag(flag,DDSVCAPS_SPLIT,"DDSVCAPS_SPLIT"); - endcheckflag(flag,"pHalInfo->ddCaps.dwSVCaps"); - - printf(" pHalInfo->ddCaps.dwAlphaBltConstBitDepths : 0x%08lx\n",pHalInfo->ddCaps.dwAlphaBltConstBitDepths); - printf(" pHalInfo->ddCaps.dwAlphaBltPixelBitDepths : 0x%08lx\n",pHalInfo->ddCaps.dwAlphaBltPixelBitDepths); - printf(" pHalInfo->ddCaps.dwAlphaBltSurfaceBitDepths : 0x%08lx\n",pHalInfo->ddCaps.dwAlphaBltSurfaceBitDepths); - printf(" pHalInfo->ddCaps.dwAlphaOverlayConstBitDepths : 0x%08lx\n",pHalInfo->ddCaps.dwAlphaOverlayConstBitDepths); - printf(" pHalInfo->ddCaps.dwAlphaOverlayPixelBitDepths : 0x%08lx\n",pHalInfo->ddCaps.dwAlphaOverlayPixelBitDepths); - printf(" pHalInfo->ddCaps.dwAlphaOverlaySurfaceBitDepths : 0x%08lx\n",pHalInfo->ddCaps.dwAlphaOverlaySurfaceBitDepths); - printf(" pHalInfo->ddCaps.dwZBufferBitDepths : 0x%08lx\n",pHalInfo->ddCaps.dwZBufferBitDepths); - printf(" pHalInfo->ddCaps.dwVidMemTotal : 0x%08lx\n",pHalInfo->ddCaps.dwVidMemTotal); - printf(" pHalInfo->ddCaps.dwVidMemFree : 0x%08lx\n",pHalInfo->ddCaps.dwVidMemFree); - printf(" pHalInfo->ddCaps.dwMaxVisibleOverlays : 0x%08lx\n",pHalInfo->ddCaps.dwMaxVisibleOverlays); - printf(" pHalInfo->ddCaps.dwCurrVisibleOverlays : 0x%08lx\n",pHalInfo->ddCaps.dwCurrVisibleOverlays); - printf(" pHalInfo->ddCaps.dwNumFourCCCodes : 0x%08lx\n",pHalInfo->ddCaps.dwNumFourCCCodes); - printf(" pHalInfo->ddCaps.dwAlignBoundarySrc : 0x%08lx\n",pHalInfo->ddCaps.dwAlignBoundarySrc); - printf(" pHalInfo->ddCaps.dwAlignSizeSrc : 0x%08lx\n",pHalInfo->ddCaps.dwAlignSizeSrc); - printf(" pHalInfo->ddCaps.dwAlignBoundaryDes : 0x%08lx\n",pHalInfo->ddCaps.dwAlignBoundaryDest); - printf(" pHalInfo->ddCaps.dwAlignSizeDest : 0x%08lx\n",pHalInfo->ddCaps.dwAlignSizeDest); - printf(" pHalInfo->ddCaps.dwAlignStrideAlign : 0x%08lx\n",pHalInfo->ddCaps.dwAlignStrideAlign); - for (t=0;tddCaps.dwRops[0x%04x] : 0x%08lx\n",t,pHalInfo->ddCaps.dwRops[t]); - } - printf(" pHalInfo->ddCaps.ddsCaps.dwCaps : "); - flag = pHalInfo->ddCaps.ddsCaps.dwCaps; - count = 0; - checkflag(flag,DDSCAPS_3DDEVICE,"DDSCAPS_3DDEVICE"); - checkflag(flag,DDSCAPS_ALLOCONLOAD,"DDSCAPS_ALLOCONLOAD"); - checkflag(flag,DDSCAPS_ALPHA,"DDSCAPS_ALPHA"); - checkflag(flag,DDSCAPS_BACKBUFFER,"DDSCAPS_BACKBUFFER"); - checkflag(flag,DDSCAPS_COMPLEX,"DDSCAPS_COMPLEX"); - checkflag(flag,DDSCAPS_EXECUTEBUFFER,"DDSCAPS_EXECUTEBUFFER"); - checkflag(flag,DDSCAPS_FLIP,"DDSCAPS_FLIP"); - checkflag(flag,DDSCAPS_FRONTBUFFER,"DDSCAPS_FRONTBUFFER"); - checkflag(flag,DDSCAPS_HWCODEC,"DDSCAPS_HWCODEC"); - checkflag(flag,DDSCAPS_LIVEVIDEO,"DDSCAPS_LIVEVIDEO"); - checkflag(flag,DDSCAPS_LOCALVIDMEM,"DDSCAPS_LOCALVIDMEM"); - checkflag(flag,DDSCAPS_MIPMAP,"DDSCAPS_MIPMAP"); - checkflag(flag,DDSCAPS_MODEX,"DDSCAPS_MODEX"); - checkflag(flag,DDSCAPS_NONLOCALVIDMEM,"DDSCAPS_NONLOCALVIDMEM"); - checkflag(flag,DDSCAPS_OFFSCREENPLAIN,"DDSCAPS_OFFSCREENPLAIN"); - checkflag(flag,DDSCAPS_OVERLAY,"DDSCAPS_OVERLAY"); - checkflag(flag,DDSCAPS_OPTIMIZED,"DDSCAPS_OPTIMIZED"); - checkflag(flag,DDSCAPS_OWNDC,"DDSCAPS_OWNDC"); - checkflag(flag,DDSCAPS_PALETTE,"DDSCAPS_PALETTE"); - checkflag(flag,DDSCAPS_PRIMARYSURFACE,"DDSCAPS_PRIMARYSURFACE"); - checkflag(flag,DDSCAPS_PRIMARYSURFACELEFT,"DDSCAPS_PRIMARYSURFACELEFT"); - checkflag(flag,DDSCAPS_STANDARDVGAMODE,"DDSCAPS_STANDARDVGAMODE"); - checkflag(flag,DDSCAPS_SYSTEMMEMORY,"DDSCAPS_SYSTEMMEMORY"); - checkflag(flag,DDSCAPS_TEXTURE,"DDSCAPS_TEXTURE"); - checkflag(flag,DDSCAPS_VIDEOMEMORY,"DDSCAPS_VIDEOMEMORY"); - checkflag(flag,DDSCAPS_VIDEOPORT,"DDSCAPS_VIDEOPORT"); - checkflag(flag,DDSCAPS_VISIBLE,"DDSCAPS_VISIBLE"); - checkflag(flag,DDSCAPS_WRITEONLY,"DDSCAPS_WRITEONLY"); - checkflag(flag,DDSCAPS_ZBUFFER,"DDSCAPS_ZBUFFER"); - endcheckflag(flag,"pHalInfo->ddCaps.ddsCaps.dwCaps"); - - printf(" pHalInfo->ddCaps.dwMinOverlayStretch : 0x%08lx\n",pHalInfo->ddCaps.dwMinOverlayStretch); - printf(" pHalInfo->ddCaps.dwMaxOverlayStretch : 0x%08lx\n",pHalInfo->ddCaps.dwMaxOverlayStretch); - printf(" pHalInfo->ddCaps.dwMinLiveVideoStretch : 0x%08lx\n",pHalInfo->ddCaps.dwMinLiveVideoStretch); - printf(" pHalInfo->ddCaps.dwMaxLiveVideoStretch : 0x%08lx\n",pHalInfo->ddCaps.dwMaxLiveVideoStretch); - printf(" pHalInfo->ddCaps.dwMinHwCodecStretch : 0x%08lx\n",pHalInfo->ddCaps.dwMinHwCodecStretch); - printf(" pHalInfo->ddCaps.dwMaxHwCodecStretch : 0x%08lx\n",pHalInfo->ddCaps.dwMaxHwCodecStretch); - printf(" pHalInfo->ddCaps.dwReserved1 : 0x%08lx\n",pHalInfo->ddCaps.dwReserved1); - printf(" pHalInfo->ddCaps.dwReserved2 : 0x%08lx\n",pHalInfo->ddCaps.dwReserved2); - printf(" pHalInfo->ddCaps.dwReserved3 : 0x%08lx\n",pHalInfo->ddCaps.dwReserved3); - - printf(" pHalInfo->ddCaps.dwSVBCaps : "); - flag = pHalInfo->ddCaps.dwSVBCaps; - count = 0; - checkflag(flag,DDCAPS_3D,"DDCAPS_3D"); - checkflag(flag,DDCAPS_ALIGNBOUNDARYDEST,"DDCAPS_ALIGNBOUNDARYDEST"); - checkflag(flag,DDCAPS_ALIGNBOUNDARYSRC,"DDCAPS_ALIGNBOUNDARYSRC"); - checkflag(flag,DDCAPS_ALIGNSIZEDEST,"DDCAPS_ALIGNSIZEDEST"); - checkflag(flag,DDCAPS_ALIGNSIZESRC,"DDCAPS_ALIGNSIZESRC"); - checkflag(flag,DDCAPS_ALIGNSTRIDE,"DDCAPS_ALIGNSTRIDE"); - checkflag(flag,DDCAPS_ALPHA,"DDCAPS_ALPHA"); - checkflag(flag,DDCAPS_BANKSWITCHED,"DDCAPS_BANKSWITCHED"); - checkflag(flag,DDCAPS_BLT,"DDCAPS_BLT"); - checkflag(flag,DDCAPS_BLTCOLORFILL,"DDCAPS_BLTCOLORFILL"); - checkflag(flag,DDCAPS_BLTDEPTHFILL,"DDCAPS_BLTDEPTHFILL"); - checkflag(flag,DDCAPS_BLTFOURCC,"DDCAPS_BLTFOURCC"); - checkflag(flag,DDCAPS_BLTQUEUE,"DDCAPS_BLTQUEUE"); - checkflag(flag,DDCAPS_BLTSTRETCH,"DDCAPS_BLTSTRETCH"); - checkflag(flag,DDCAPS_CANBLTSYSMEM,"DDCAPS_CANBLTSYSMEM"); - checkflag(flag,DDCAPS_CANCLIP,"DDCAPS_CANCLIP"); - checkflag(flag,DDCAPS_CANCLIPSTRETCHED,"DDCAPS_CANCLIPSTRETCHED"); - checkflag(flag,DDCAPS_COLORKEY,"DDCAPS_COLORKEY"); - checkflag(flag,DDCAPS_COLORKEYHWASSIST,"DDCAPS_COLORKEYHWASSIST"); - checkflag(flag,DDCAPS_GDI,"DDCAPS_GDI"); - checkflag(flag,DDCAPS_NOHARDWARE,"DDCAPS_NOHARDWARE"); - checkflag(flag,DDCAPS_OVERLAY,"DDCAPS_OVERLAY"); - checkflag(flag,DDCAPS_OVERLAYCANTCLIP,"DDCAPS_OVERLAYCANTCLIP"); - checkflag(flag,DDCAPS_OVERLAYFOURCC,"DDCAPS_OVERLAYFOURCC"); - checkflag(flag,DDCAPS_OVERLAYSTRETCH,"DDCAPS_OVERLAYSTRETCH"); - checkflag(flag,DDCAPS_PALETTE,"DDCAPS_PALETTE"); - checkflag(flag,DDCAPS_PALETTEVSYNC,"DDCAPS_PALETTEVSYNC"); - checkflag(flag,DDCAPS_READSCANLINE,"DDCAPS_READSCANLINE"); - checkflag(flag,DDCAPS_STEREOVIEW,"DDCAPS_STEREOVIEW"); - checkflag(flag,DDCAPS_VBI,"DDCAPS_VBI"); - checkflag(flag,DDCAPS_ZBLTS,"DDCAPS_ZBLTS"); - checkflag(flag,DDCAPS_ZOVERLAYS,"DDCAPS_ZOVERLAYS"); - endcheckflag(flag,"pHalInfo->ddCaps.dwSVBCaps"); - - printf(" pHalInfo->ddCaps.dwSVBCKeyCaps : 0x%08lx\n",pHalInfo->ddCaps.dwSVBCKeyCaps); - printf(" pHalInfo->ddCaps.dwSVBFXCaps : 0x%08lx\n",pHalInfo->ddCaps.dwSVBFXCaps); - for (t=0;tddCaps.dwSVBRops[0x%04x] : 0x%08lx\n",t,pHalInfo->ddCaps.dwSVBRops[t]); - } - - printf(" pHalInfo->ddCaps.dwVSBCaps : "); - flag = pHalInfo->ddCaps.dwVSBCaps; - count = 0; - checkflag(flag,DDCAPS_3D,"DDCAPS_3D"); - checkflag(flag,DDCAPS_ALIGNBOUNDARYDEST,"DDCAPS_ALIGNBOUNDARYDEST"); - checkflag(flag,DDCAPS_ALIGNBOUNDARYSRC,"DDCAPS_ALIGNBOUNDARYSRC"); - checkflag(flag,DDCAPS_ALIGNSIZEDEST,"DDCAPS_ALIGNSIZEDEST"); - checkflag(flag,DDCAPS_ALIGNSIZESRC,"DDCAPS_ALIGNSIZESRC"); - checkflag(flag,DDCAPS_ALIGNSTRIDE,"DDCAPS_ALIGNSTRIDE"); - checkflag(flag,DDCAPS_ALPHA,"DDCAPS_ALPHA"); - checkflag(flag,DDCAPS_BANKSWITCHED,"DDCAPS_BANKSWITCHED"); - checkflag(flag,DDCAPS_BLT,"DDCAPS_BLT"); - checkflag(flag,DDCAPS_BLTCOLORFILL,"DDCAPS_BLTCOLORFILL"); - checkflag(flag,DDCAPS_BLTDEPTHFILL,"DDCAPS_BLTDEPTHFILL"); - checkflag(flag,DDCAPS_BLTFOURCC,"DDCAPS_BLTFOURCC"); - checkflag(flag,DDCAPS_BLTQUEUE,"DDCAPS_BLTQUEUE"); - checkflag(flag,DDCAPS_BLTSTRETCH,"DDCAPS_BLTSTRETCH"); - checkflag(flag,DDCAPS_CANBLTSYSMEM,"DDCAPS_CANBLTSYSMEM"); - checkflag(flag,DDCAPS_CANCLIP,"DDCAPS_CANCLIP"); - checkflag(flag,DDCAPS_CANCLIPSTRETCHED,"DDCAPS_CANCLIPSTRETCHED"); - checkflag(flag,DDCAPS_COLORKEY,"DDCAPS_COLORKEY"); - checkflag(flag,DDCAPS_COLORKEYHWASSIST,"DDCAPS_COLORKEYHWASSIST"); - checkflag(flag,DDCAPS_GDI,"DDCAPS_GDI"); - checkflag(flag,DDCAPS_NOHARDWARE,"DDCAPS_NOHARDWARE"); - checkflag(flag,DDCAPS_OVERLAY,"DDCAPS_OVERLAY"); - checkflag(flag,DDCAPS_OVERLAYCANTCLIP,"DDCAPS_OVERLAYCANTCLIP"); - checkflag(flag,DDCAPS_OVERLAYFOURCC,"DDCAPS_OVERLAYFOURCC"); - checkflag(flag,DDCAPS_OVERLAYSTRETCH,"DDCAPS_OVERLAYSTRETCH"); - checkflag(flag,DDCAPS_PALETTE,"DDCAPS_PALETTE"); - checkflag(flag,DDCAPS_PALETTEVSYNC,"DDCAPS_PALETTEVSYNC"); - checkflag(flag,DDCAPS_READSCANLINE,"DDCAPS_READSCANLINE"); - checkflag(flag,DDCAPS_STEREOVIEW,"DDCAPS_STEREOVIEW"); - checkflag(flag,DDCAPS_VBI,"DDCAPS_VBI"); - checkflag(flag,DDCAPS_ZBLTS,"DDCAPS_ZBLTS"); - checkflag(flag,DDCAPS_ZOVERLAYS,"DDCAPS_ZOVERLAYS"); - endcheckflag(flag,"pHalInfo->ddCaps.dwVSBCaps"); - - printf(" pHalInfo->ddCaps.dwVSBCKeyCaps : 0x%08lx\n",pHalInfo->ddCaps.dwVSBCKeyCaps); - printf(" pHalInfo->ddCaps.dwVSBFXCaps : 0x%08lx\n",pHalInfo->ddCaps.dwVSBFXCaps); - for (t=0;tddCaps.dwVSBRops[0x%04x] : 0x%08lx\n",t,pHalInfo->ddCaps.dwVSBRops[t]); - } - printf(" pHalInfo->ddCaps.dwSSBCaps : 0x%08lx\n",pHalInfo->ddCaps.dwSSBCaps); - printf(" pHalInfo->ddCaps.dwSSBCKeyCa : 0x%08lx\n",pHalInfo->ddCaps.dwSSBCKeyCaps); - printf(" pHalInfo->ddCaps.dwSSBFXCaps : 0x%08lx\n",pHalInfo->ddCaps.dwSSBFXCaps); - for (t=0;tddCaps.dwSSBRops[0x%04x] : 0x%08lx\n",t,pHalInfo->ddCaps.dwSSBRops[t]); - } - - printf(" pHalInfo->GetDriverInfo : 0x%08lx\n",(long)pHalInfo->GetDriverInfo); - printf(" pHalInfo->dwFlags : "); - - flag = pHalInfo->dwFlags; - count = 0; - checkflag(flag,DDHALINFO_ISPRIMARYDISPLAY,"DDHALINFO_ISPRIMARYDISPLAY"); - checkflag(flag,DDHALINFO_MODEXILLEGAL,"DDHALINFO_MODEXILLEGAL"); - checkflag(flag,DDHALINFO_GETDRIVERINFOSET,"DDHALINFO_GETDRIVERINFOSET"); - checkflag(flag,DDHALINFO_GETDRIVERINFO2,"DDHALINFO_GETDRIVERINFO2"); - endcheckflag(flag,"pHalInfo->dwFlags"); - - printf(" pHalInfo->lpD3DGlobalDriverData : 0x%08lx\n",(long)pHalInfo->lpD3DGlobalDriverData); - printf(" pHalInfo->lpD3DHALCallbacks : 0x%08lx\n",(long)pHalInfo->lpD3DHALCallbacks); - printf(" pHalInfo->lpD3DBufCallbacks : 0x%08lx\n",(long)pHalInfo->lpD3DBufCallbacks); - } - else - { - if (pHalInfo->dwSize !=0) - { - printf("unkonwn dwSize DD_HALINFO : the size found is 0x%08lx\n",pHalInfo->dwSize); - } - else - { - printf("none pHalInfo from the driver 0x%08lx\n",pHalInfo->dwSize); - } - } -} - - -void -dump_D3dCallbacks(D3DNTHAL_CALLBACKS *puD3dCallbacks, char *text) -{ - printf("dumping the D3DNTHAL_CALLBACKS from %s\n",text); - if (puD3dCallbacks->dwSize == sizeof(D3DNTHAL_CALLBACKS)) - { - printf(" puD3dCallbacks->dwSize : 0x%08lx\n",(long)puD3dCallbacks->dwSize); - printf(" puD3dCallbacks->ContextCreate : 0x%08lx\n",(long)puD3dCallbacks->ContextCreate); - printf(" puD3dCallbacks->ContextDestroy : 0x%08lx\n",(long)puD3dCallbacks->ContextDestroy); - printf(" puD3dCallbacks->ContextDestroyAll : 0x%08lx\n",(long)puD3dCallbacks->ContextDestroyAll); - printf(" puD3dCallbacks->SceneCapture : 0x%08lx\n",(long)puD3dCallbacks->SceneCapture); - printf(" puD3dCallbacks->dwReserved10 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved10); - printf(" puD3dCallbacks->dwReserved11 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved11); - printf(" puD3dCallbacks->dwReserved22 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved22); - printf(" puD3dCallbacks->dwReserved23 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved23); - printf(" puD3dCallbacks->dwReserved : 0x%08lx\n",(long)puD3dCallbacks->dwReserved); - printf(" puD3dCallbacks->TextureCreate : 0x%08lx\n",(long)puD3dCallbacks->TextureCreate); - printf(" puD3dCallbacks->TextureDestroy : 0x%08lx\n",(long)puD3dCallbacks->TextureDestroy); - printf(" puD3dCallbacks->TextureSwap : 0x%08lx\n",(long)puD3dCallbacks->TextureSwap); - printf(" puD3dCallbacks->TextureGetSurf : 0x%08lx\n",(long)puD3dCallbacks->TextureGetSurf); - printf(" puD3dCallbacks->dwReserved12 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved12); - printf(" puD3dCallbacks->dwReserved13 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved13); - printf(" puD3dCallbacks->dwReserved14 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved14); - printf(" puD3dCallbacks->dwReserved15 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved15); - printf(" puD3dCallbacks->dwReserved16 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved16); - printf(" puD3dCallbacks->dwReserved17 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved17); - printf(" puD3dCallbacks->dwReserved18 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved18); - printf(" puD3dCallbacks->dwReserved19 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved19); - printf(" puD3dCallbacks->dwReserved20 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved20); - printf(" puD3dCallbacks->dwReserved21 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved21); - printf(" puD3dCallbacks->dwReserved24 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved24); - printf(" puD3dCallbacks->dwReserved0 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved0); - printf(" puD3dCallbacks->dwReserved1 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved1); - printf(" puD3dCallbacks->dwReserved2 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved2); - printf(" puD3dCallbacks->dwReserved3 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved3); - printf(" puD3dCallbacks->dwReserved4 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved4); - printf(" puD3dCallbacks->dwReserved5 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved5); - printf(" puD3dCallbacks->dwReserved6 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved6); - printf(" puD3dCallbacks->dwReserved7 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved7); - printf(" puD3dCallbacks->dwReserved8 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved8); - printf(" puD3dCallbacks->dwReserved9 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved9); - } - else - { - printf("none puD3dCallbacks from the driver 0x%08lx\n",puD3dCallbacks->dwSize); - } -} - - -void -dump_D3dDriverData(D3DNTHAL_GLOBALDRIVERDATA *puD3dDriverData, char *text) -{ - UINT flag = 0; - INT count = 0; - - printf("dumping the D3DNTHAL_GLOBALDRIVERDATA from %s\n",text); - if (puD3dDriverData->dwSize == sizeof(D3DNTHAL_GLOBALDRIVERDATA)) - { - printf(" puD3dDriverData->dwSize : 0x%08lx\n",(long)puD3dDriverData->dwSize); - if (puD3dDriverData->hwCaps.dwSize == sizeof(D3DNTHALDEVICEDESC_V1)) - { - printf(" puD3dDriverData->hwCaps.dwSize : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dwSize); - printf(" puD3dDriverData->hwCaps.dwFlags : "); - - flag = puD3dDriverData->hwCaps.dwFlags; - checkflag(flag,D3DDD_BCLIPPING,"D3DDD_BCLIPPING"); - checkflag(flag,D3DDD_COLORMODEL,"D3DDD_COLORMODEL"); - checkflag(flag,D3DDD_DEVCAPS,"D3DDD_DEVCAPS"); - checkflag(flag,D3DDD_DEVICERENDERBITDEPTH,"D3DDD_DEVICERENDERBITDEPTH"); - checkflag(flag,D3DDD_DEVICEZBUFFERBITDEPTH,"D3DDD_DEVICEZBUFFERBITDEPTH"); - checkflag(flag,D3DDD_LIGHTINGCAPS,"D3DDD_LIGHTINGCAPS"); - checkflag(flag,D3DDD_LINECAPS,"D3DDD_LINECAPS"); - checkflag(flag,D3DDD_MAXBUFFERSIZE,"D3DDD_MAXBUFFERSIZE"); - checkflag(flag,D3DDD_MAXVERTEXCOUNT,"D3DDD_MAXVERTEXCOUNT"); - checkflag(flag,D3DDD_TRANSFORMCAPS,"D3DDD_TRANSFORMCAPS"); - checkflag(flag,D3DDD_TRICAPS,"D3DDD_TRICAPS"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dwFlags "); - - printf(" puD3dDriverData->hwCaps.dcmColorModel : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dcmColorModel); - printf(" puD3dDriverData->hwCaps.dwDevCaps : "); - - count = 0; - flag = puD3dDriverData->hwCaps.dwDevCaps; - checkflag(flag,D3DDEVCAPS_CANBLTSYSTONONLOCAL,"D3DDEVCAPS_CANBLTSYSTONONLOCAL"); - checkflag(flag,D3DDEVCAPS_CANRENDERAFTERFLIP,"D3DDEVCAPS_CANRENDERAFTERFLIP"); - checkflag(flag,D3DDEVCAPS_DRAWPRIMITIVES2,"D3DDEVCAPS_DRAWPRIMITIVES2"); - checkflag(flag,D3DDEVCAPS_DRAWPRIMITIVES2EX,"D3DDEVCAPS_DRAWPRIMITIVES2EX"); - checkflag(flag,D3DDEVCAPS_DRAWPRIMTLVERTEX,"D3DDEVCAPS_DRAWPRIMTLVERTEX"); - checkflag(flag,D3DDEVCAPS_EXECUTESYSTEMMEMORY,"D3DDEVCAPS_EXECUTESYSTEMMEMORY"); - checkflag(flag,D3DDEVCAPS_EXECUTEVIDEOMEMORY,"D3DDEVCAPS_EXECUTEVIDEOMEMORY"); - checkflag(flag,D3DDEVCAPS_FLOATTLVERTEX,"D3DDEVCAPS_FLOATTLVERTEX"); - checkflag(flag,D3DDEVCAPS_HWRASTERIZATION,"D3DDEVCAPS_HWRASTERIZATION"); - checkflag(flag,D3DDEVCAPS_HWTRANSFORMANDLIGHT,"D3DDEVCAPS_HWTRANSFORMANDLIGHT"); - checkflag(flag,D3DDEVCAPS_SEPARATETEXTUREMEMORIES,"D3DDEVCAPS_SEPARATETEXTUREMEMORIES"); - checkflag(flag,D3DDEVCAPS_SORTDECREASINGZ,"D3DDEVCAPS_SORTDECREASINGZ"); - checkflag(flag,D3DDEVCAPS_SORTEXACT,"D3DDEVCAPS_SORTEXACT"); - checkflag(flag,D3DDEVCAPS_SORTINCREASINGZ,"D3DDEVCAPS_SORTINCREASINGZ"); - // not in ddk or dxsdk I have but it is msdn checkflag(flag,D3DDEVCAPS_TEXTURENONLOCALVIDEOMEMORY,"D3DDEVCAPS_TEXTURENONLOCALVIDEOMEMORY"); - checkflag(flag,D3DDEVCAPS_TLVERTEXSYSTEMMEMORY,"D3DDEVCAPS_TLVERTEXSYSTEMMEMORY"); - checkflag(flag,D3DDEVCAPS_TLVERTEXVIDEOMEMORY,"D3DDEVCAPS_TLVERTEXVIDEOMEMORY"); - checkflag(flag,D3DDEVCAPS_TEXTURESYSTEMMEMORY,"D3DDEVCAPS_TEXTURESYSTEMMEMORY"); - checkflag(flag,D3DDEVCAPS_TEXTUREVIDEOMEMORY,"D3DDEVCAPS_TEXTUREVIDEOMEMORY"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dwDevCaps"); - - if (puD3dDriverData->hwCaps.dtcTransformCaps.dwSize == sizeof(D3DTRANSFORMCAPS)) - { - printf(" puD3dDriverData->hwCaps.dtcTransformCaps.dwSize : 0x%08lx\n",(long) puD3dDriverData->hwCaps.dtcTransformCaps.dwSize); - printf(" puD3dDriverData->hwCaps.dtcTransformCaps.dwCaps : "); - - count = 0; - flag = puD3dDriverData->hwCaps.dtcTransformCaps.dwCaps; - checkflag(flag,D3DTRANSFORMCAPS_CLIP,"D3DTRANSFORMCAPS_CLIP"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dtcTransformCaps.dwCaps"); - } - else - { - printf("none puD3dDriverData->hwCaps.dtcTransformCaps.dwSize from the driver 0x%08lx\n",puD3dDriverData->hwCaps.dtcTransformCaps.dwSize); - } - - if (puD3dDriverData->hwCaps.dlcLightingCaps.dwSize == sizeof(D3DLIGHTINGCAPS)) - { - printf(" puD3dDriverData->hwCaps.dlcLightingCaps.dwSize : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dlcLightingCaps.dwSize); - printf(" puD3dDriverData->hwCaps.dlcLightingCaps.dwCaps : "); - - count = 0; - flag = puD3dDriverData->hwCaps.dlcLightingCaps.dwCaps; - - checkflag(flag,D3DLIGHTCAPS_DIRECTIONAL,"D3DLIGHTCAPS_DIRECTIONAL"); - checkflag(flag,D3DLIGHTCAPS_GLSPOT,"D3DLIGHTCAPS_GLSPOT"); - checkflag(flag,D3DLIGHTCAPS_PARALLELPOINT,"D3DLIGHTCAPS_PARALLELPOINT"); - checkflag(flag,D3DLIGHTCAPS_POINT,"D3DLIGHTCAPS_POINT"); - checkflag(flag,D3DLIGHTCAPS_SPOT,"D3DLIGHTCAPS_SPOT"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dlcLightingCaps.dwCaps"); - - printf(" puD3dDriverData->hwCaps.dlcLightingCaps.dwLightingModel : "); - - count = 0; - flag = puD3dDriverData->hwCaps.dlcLightingCaps.dwLightingModel; - - checkflag(flag,D3DLIGHTINGMODEL_MONO,"D3DLIGHTINGMODEL_MONO"); - checkflag(flag,D3DLIGHTINGMODEL_RGB,"D3DLIGHTINGMODEL_RGB"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dlcLightingCaps.dwLightingModel"); - - printf(" puD3dDriverData->hwCaps.dlcLightingCaps.dwNumLights : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dlcLightingCaps.dwNumLights); - } - else - { - printf("none puD3dDriverData->hwCaps.dlcLightingCaps.dwSize from the driver 0x%08lx\n",puD3dDriverData->hwCaps.dlcLightingCaps.dwSize); - } - - - if (puD3dDriverData->hwCaps.dpcLineCaps.dwSize == sizeof(D3DPRIMCAPS)) - { - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwSize : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dpcLineCaps.dwSize); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwMiscCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwMiscCaps; - checkflag(flag,D3DPMISCCAPS_CONFORMANT,"D3DPMISCCAPS_CONFORMANT"); - checkflag(flag,D3DPMISCCAPS_CULLCCW,"D3DPMISCCAPS_CULLCCW"); - checkflag(flag,D3DPMISCCAPS_CULLCW,"D3DPMISCCAPS_CULLCW"); - checkflag(flag,D3DPMISCCAPS_CULLNONE,"D3DPMISCCAPS_CULLNONE"); - checkflag(flag,D3DPMISCCAPS_LINEPATTERNREP,"D3DPMISCCAPS_LINEPATTERNREP"); - checkflag(flag,D3DPMISCCAPS_MASKPLANES,"D3DPMISCCAPS_MASKPLANES"); - checkflag(flag,D3DPMISCCAPS_MASKZ,"D3DPMISCCAPS_MASKZ"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwMiscCaps"); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwRasterCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwRasterCaps; - checkflag(flag,D3DPRASTERCAPS_ANISOTROPY,"D3DPRASTERCAPS_ANISOTROPY"); - checkflag(flag,D3DPRASTERCAPS_ANTIALIASEDGES,"D3DPRASTERCAPS_ANTIALIASEDGES"); - checkflag(flag,D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT,"D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT"); - checkflag(flag,D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT,"D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT"); - checkflag(flag,D3DPRASTERCAPS_DITHER,"D3DPRASTERCAPS_DITHER"); - checkflag(flag,D3DPRASTERCAPS_FOGRANGE,"D3DPRASTERCAPS_FOGRANGE"); - checkflag(flag,D3DPRASTERCAPS_FOGTABLE,"D3DPRASTERCAPS_FOGTABLE"); - checkflag(flag,D3DPRASTERCAPS_FOGVERTEX,"D3DPRASTERCAPS_FOGVERTEX"); - checkflag(flag,D3DPRASTERCAPS_PAT,"D3DPRASTERCAPS_PAT"); - checkflag(flag,D3DPRASTERCAPS_ROP2,"D3DPRASTERCAPS_ROP2"); - checkflag(flag,D3DPRASTERCAPS_STIPPLE,"D3DPRASTERCAPS_STIPPLE"); - checkflag(flag,D3DPRASTERCAPS_SUBPIXEL,"D3DPRASTERCAPS_SUBPIXEL"); - checkflag(flag,D3DPRASTERCAPS_SUBPIXELX,"D3DPRASTERCAPS_SUBPIXELX"); - checkflag(flag,D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT,"D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT"); - checkflag(flag,D3DPRASTERCAPS_WBUFFER,"D3DPRASTERCAPS_WBUFFER"); - checkflag(flag,D3DPRASTERCAPS_WFOG,"D3DPRASTERCAPS_WFOG"); - checkflag(flag,D3DPRASTERCAPS_XOR,"D3DPRASTERCAPS_XOR"); - checkflag(flag,D3DPRASTERCAPS_ZBIAS,"D3DPRASTERCAPS_ZBIAS"); - checkflag(flag,D3DPRASTERCAPS_ZBUFFERLESSHSR,"D3DPRASTERCAPS_ZBUFFERLESSHSR"); - checkflag(flag,D3DPRASTERCAPS_ZFOG,"D3DPRASTERCAPS_ZFOG"); - checkflag(flag,D3DPRASTERCAPS_ZTEST,"D3DPRASTERCAPS_ZTEST"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwRasterCaps"); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwZCmpCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwZCmpCaps; - checkflag(flag,D3DPCMPCAPS_ALWAYS,"D3DPCMPCAPS_ALWAYS"); - checkflag(flag,D3DPCMPCAPS_EQUAL,"D3DPCMPCAPS_EQUAL"); - checkflag(flag,D3DPCMPCAPS_GREATER,"D3DPCMPCAPS_GREATER"); - checkflag(flag,D3DPCMPCAPS_GREATEREQUAL,"D3DPCMPCAPS_GREATEREQUAL"); - checkflag(flag,D3DPCMPCAPS_LESS,"D3DPCMPCAPS_LESS"); - checkflag(flag,D3DPCMPCAPS_LESSEQUAL,"D3DPCMPCAPS_LESSEQUAL"); - checkflag(flag,D3DPCMPCAPS_NEVER,"D3DPCMPCAPS_NEVER"); - checkflag(flag,D3DPCMPCAPS_NOTEQUAL,"D3DPCMPCAPS_NOTEQUAL"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwZCmpCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwSrcBlendCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwSrcBlendCaps; - checkflag(flag,D3DPBLENDCAPS_BOTHINVSRCALPHA,"D3DPBLENDCAPS_BOTHINVSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_BOTHSRCALPHA,"D3DPBLENDCAPS_BOTHSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_DESTALPHA,"D3DPBLENDCAPS_DESTALPHA"); - checkflag(flag,D3DPBLENDCAPS_DESTCOLOR,"D3DPBLENDCAPS_DESTCOLOR"); - checkflag(flag,D3DPBLENDCAPS_INVDESTALPHA,"D3DPBLENDCAPS_INVDESTALPHA"); - checkflag(flag,D3DPBLENDCAPS_INVDESTCOLOR,"D3DPBLENDCAPS_INVDESTCOLOR"); - checkflag(flag,D3DPBLENDCAPS_INVSRCALPHA,"D3DPBLENDCAPS_INVSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_INVSRCCOLOR,"D3DPBLENDCAPS_INVSRCCOLOR"); - checkflag(flag,D3DPBLENDCAPS_ONE,"D3DPBLENDCAPS_ONE"); - checkflag(flag,D3DPBLENDCAPS_SRCALPHA,"D3DPBLENDCAPS_SRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_SRCALPHASAT,"D3DPBLENDCAPS_SRCALPHASAT"); - checkflag(flag,D3DPBLENDCAPS_SRCCOLOR,"D3DPBLENDCAPS_SRCCOLOR"); - checkflag(flag,D3DPBLENDCAPS_ZERO,"D3DPBLENDCAPS_ZERO"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwSrcBlendCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwDestBlendCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwDestBlendCaps; - checkflag(flag,D3DPBLENDCAPS_BOTHINVSRCALPHA,"D3DPBLENDCAPS_BOTHINVSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_BOTHSRCALPHA,"D3DPBLENDCAPS_BOTHSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_DESTALPHA,"D3DPBLENDCAPS_DESTALPHA"); - checkflag(flag,D3DPBLENDCAPS_DESTCOLOR,"D3DPBLENDCAPS_DESTCOLOR"); - checkflag(flag,D3DPBLENDCAPS_INVDESTALPHA,"D3DPBLENDCAPS_INVDESTALPHA"); - checkflag(flag,D3DPBLENDCAPS_INVDESTCOLOR,"D3DPBLENDCAPS_INVDESTCOLOR"); - checkflag(flag,D3DPBLENDCAPS_INVSRCALPHA,"D3DPBLENDCAPS_INVSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_INVSRCCOLOR,"D3DPBLENDCAPS_INVSRCCOLOR"); - checkflag(flag,D3DPBLENDCAPS_ONE,"D3DPBLENDCAPS_ONE"); - checkflag(flag,D3DPBLENDCAPS_SRCALPHA,"D3DPBLENDCAPS_SRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_SRCALPHASAT,"D3DPBLENDCAPS_SRCALPHASAT"); - checkflag(flag,D3DPBLENDCAPS_SRCCOLOR,"D3DPBLENDCAPS_SRCCOLOR"); - checkflag(flag,D3DPBLENDCAPS_ZERO,"D3DPBLENDCAPS_ZERO"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwDestBlendCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwAlphaCmpCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwAlphaCmpCaps; - checkflag(flag,D3DPCMPCAPS_ALWAYS,"D3DPCMPCAPS_ALWAYS"); - checkflag(flag,D3DPCMPCAPS_EQUAL,"D3DPCMPCAPS_EQUAL"); - checkflag(flag,D3DPCMPCAPS_GREATER,"D3DPCMPCAPS_GREATER"); - checkflag(flag,D3DPCMPCAPS_GREATEREQUAL,"D3DPCMPCAPS_GREATEREQUAL"); - checkflag(flag,D3DPCMPCAPS_LESS,"D3DPCMPCAPS_LESS"); - checkflag(flag,D3DPCMPCAPS_LESSEQUAL,"D3DPCMPCAPS_LESSEQUAL"); - checkflag(flag,D3DPCMPCAPS_NEVER,"D3DPCMPCAPS_NEVER"); - checkflag(flag,D3DPCMPCAPS_NOTEQUAL,"D3DPCMPCAPS_NOTEQUAL"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwAlphaCmpCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwShadeCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwShadeCaps; - checkflag(flag,D3DPSHADECAPS_ALPHAFLATBLEND,"D3DPSHADECAPS_ALPHAFLATBLEND"); - checkflag(flag,D3DPSHADECAPS_ALPHAFLATSTIPPLED,"D3DPSHADECAPS_ALPHAFLATSTIPPLED"); - checkflag(flag,D3DPSHADECAPS_ALPHAGOURAUDBLEND,"D3DPSHADECAPS_ALPHAGOURAUDBLEND"); - checkflag(flag,D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED,"D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED"); - checkflag(flag,D3DPSHADECAPS_ALPHAPHONGBLEND,"D3DPSHADECAPS_ALPHAPHONGBLEND"); - checkflag(flag,D3DPSHADECAPS_ALPHAPHONGSTIPPLED,"D3DPSHADECAPS_ALPHAPHONGSTIPPLED"); - checkflag(flag,D3DPSHADECAPS_COLORFLATMONO,"D3DPSHADECAPS_COLORFLATMONO"); - checkflag(flag,D3DPSHADECAPS_COLORFLATRGB,"D3DPSHADECAPS_COLORFLATRGB"); - checkflag(flag,D3DPSHADECAPS_COLORGOURAUDMONO,"D3DPSHADECAPS_COLORGOURAUDMONO"); - checkflag(flag,D3DPSHADECAPS_COLORGOURAUDRGB,"D3DPSHADECAPS_COLORGOURAUDRGB"); - checkflag(flag,D3DPSHADECAPS_COLORPHONGMONO,"D3DPSHADECAPS_COLORPHONGMONO"); - checkflag(flag,D3DPSHADECAPS_COLORPHONGRGB,"D3DPSHADECAPS_COLORPHONGRGB"); - checkflag(flag,D3DPSHADECAPS_FOGFLAT,"D3DPSHADECAPS_FOGFLAT"); - checkflag(flag,D3DPSHADECAPS_FOGGOURAUD,"D3DPSHADECAPS_FOGGOURAUD"); - checkflag(flag,D3DPSHADECAPS_FOGPHONG,"D3DPSHADECAPS_FOGPHONG"); - checkflag(flag,D3DPSHADECAPS_SPECULARFLATMONO,"D3DPSHADECAPS_SPECULARFLATMONO"); - checkflag(flag,D3DPSHADECAPS_SPECULARFLATRGB,"D3DPSHADECAPS_SPECULARFLATRGB"); - checkflag(flag,D3DPSHADECAPS_SPECULARGOURAUDMONO,"D3DPSHADECAPS_SPECULARGOURAUDMONO"); - checkflag(flag,D3DPSHADECAPS_SPECULARGOURAUDRGB,"D3DPSHADECAPS_SPECULARGOURAUDRGB"); - checkflag(flag,D3DPSHADECAPS_SPECULARPHONGMONO,"D3DPSHADECAPS_SPECULARPHONGMONO"); - checkflag(flag,D3DPSHADECAPS_SPECULARPHONGRGB,"D3DPSHADECAPS_SPECULARPHONGRGB"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwShadeCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwTextureCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwTextureCaps; - checkflag(flag,D3DPTEXTURECAPS_ALPHA,"D3DPTEXTURECAPS_ALPHA"); - checkflag(flag,D3DPTEXTURECAPS_ALPHAPALETTE,"D3DPTEXTURECAPS_ALPHAPALETTE"); - checkflag(flag,D3DPTEXTURECAPS_BORDER,"D3DPTEXTURECAPS_BORDER"); - checkflag(flag,D3DPTEXTURECAPS_COLORKEYBLEND,"D3DPTEXTURECAPS_COLORKEYBLEND"); - checkflag(flag,D3DPTEXTURECAPS_CUBEMAP,"D3DPTEXTURECAPS_CUBEMAP"); - checkflag(flag,D3DPTEXTURECAPS_PERSPECTIVE,"D3DPTEXTURECAPS_PERSPECTIVE"); - checkflag(flag,D3DPTEXTURECAPS_POW2,"D3DPTEXTURECAPS_POW2"); - checkflag(flag,D3DPTEXTURECAPS_PROJECTED,"D3DPTEXTURECAPS_PROJECTED"); - checkflag(flag,D3DPTEXTURECAPS_NONPOW2CONDITIONAL,"D3DPTEXTURECAPS_NONPOW2CONDITIONAL"); - checkflag(flag,D3DPTEXTURECAPS_SQUAREONLY,"D3DPTEXTURECAPS_SQUAREONLY"); - // not in ddk or dxsdk but it is in msdn checkflag(flag,D3DPTEXTURECAPS_TEXREPEATNOTSCALESBYSIZE,"D3DPTEXTURECAPS_TEXREPEATNOTSCALESBYSIZE"); - // not in ddk or dxsdk but it is in msdn checkflag(flag,D3DPTEXTURECAPS_TEXTURETRANSFORM,"D3DPTEXTURECAPS_TEXTURETRANSFORM"); - checkflag(flag,D3DPTEXTURECAPS_TRANSPARENCY,"D3DPTEXTURECAPS_TRANSPARENCY"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwTextureCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwTextureFilterCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwTextureFilterCaps; - checkflag(flag,D3DPTFILTERCAPS_LINEAR,"D3DPTFILTERCAPS_LINEAR"); - checkflag(flag,D3DPTFILTERCAPS_LINEARMIPLINEAR,"D3DPTFILTERCAPS_LINEARMIPLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_LINEARMIPNEAREST,"D3DPTFILTERCAPS_LINEARMIPNEAREST"); - checkflag(flag,D3DPTFILTERCAPS_MAGFAFLATCUBIC,"D3DPTFILTERCAPS_MAGFAFLATCUBIC"); - checkflag(flag,D3DPTFILTERCAPS_MAGFANISOTROPIC,"D3DPTFILTERCAPS_MAGFANISOTROPIC"); - checkflag(flag,D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC,"D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC"); - checkflag(flag,D3DPTFILTERCAPS_MAGFLINEAR,"D3DPTFILTERCAPS_MAGFLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_MAGFPOINT,"D3DPTFILTERCAPS_MAGFPOINT"); - checkflag(flag,D3DPTFILTERCAPS_MINFANISOTROPIC,"D3DPTFILTERCAPS_MINFANISOTROPIC"); - checkflag(flag,D3DPTFILTERCAPS_MINFLINEAR,"D3DPTFILTERCAPS_MINFLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_MINFPOINT,"D3DPTFILTERCAPS_MINFPOINT"); - checkflag(flag,D3DPTFILTERCAPS_MIPFLINEAR,"D3DPTFILTERCAPS_MIPFLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_MIPFPOINT,"D3DPTFILTERCAPS_MIPFPOINT"); - checkflag(flag,D3DPTFILTERCAPS_MIPLINEAR,"D3DPTFILTERCAPS_MIPLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_MIPNEAREST,"D3DPTFILTERCAPS_MIPNEAREST"); - checkflag(flag,D3DPTFILTERCAPS_NEAREST,"D3DPTFILTERCAPS_NEAREST"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwTextureFilterCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwTextureBlendCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwTextureBlendCaps; - checkflag(flag,D3DPTBLENDCAPS_ADD,"D3DPTBLENDCAPS_ADD"); - checkflag(flag,D3DPTBLENDCAPS_COPY,"D3DPTBLENDCAPS_COPY"); - checkflag(flag,D3DPTBLENDCAPS_DECAL,"D3DPTBLENDCAPS_DECAL"); - checkflag(flag,D3DPTBLENDCAPS_DECALALPHA,"D3DPTBLENDCAPS_DECALALPHA"); - checkflag(flag,D3DPTBLENDCAPS_DECALMASK,"D3DPTBLENDCAPS_DECALMASK"); - checkflag(flag,D3DPTBLENDCAPS_MODULATE,"D3DPTBLENDCAPS_MODULATE"); - checkflag(flag,D3DPTBLENDCAPS_MODULATEALPHA,"D3DPTBLENDCAPS_MODULATEALPHA"); - checkflag(flag,D3DPTBLENDCAPS_MODULATEMASK,"D3DPTBLENDCAPS_MODULATEMASK"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwTextureBlendCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwTextureAddressCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcLineCaps.dwTextureAddressCaps; - checkflag(flag,D3DPTADDRESSCAPS_BORDER,"D3DPTADDRESSCAPS_BORDER"); - checkflag(flag,D3DPTADDRESSCAPS_CLAMP,"D3DPTADDRESSCAPS_CLAMP"); - checkflag(flag,D3DPTADDRESSCAPS_INDEPENDENTUV,"D3DPTADDRESSCAPS_INDEPENDENTUV"); - checkflag(flag,D3DPTADDRESSCAPS_MIRROR,"D3DPTADDRESSCAPS_MIRROR"); - checkflag(flag,D3DPTADDRESSCAPS_WRAP,"D3DPTADDRESSCAPS_WRAP"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcLineCaps.dwTextureAddressCaps "); - - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwStippleWidth : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dpcLineCaps.dwStippleWidth); - printf(" puD3dDriverData->hwCaps.dpcLineCaps.dwStippleHeight : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dpcLineCaps.dwStippleHeight); - } - else - { - printf("none puD3dDriverData->hwCaps.dpcLineCaps.dwSize from the driver 0x%08lx\n",puD3dDriverData->hwCaps.dpcLineCaps.dwSize); - } - - if (puD3dDriverData->hwCaps.dpcTriCaps.dwSize == sizeof(D3DPRIMCAPS)) - { - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwSize : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dpcTriCaps.dwSize); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwMiscCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwMiscCaps; - checkflag(flag,D3DPMISCCAPS_CONFORMANT,"D3DPMISCCAPS_CONFORMANT"); - checkflag(flag,D3DPMISCCAPS_CULLCCW,"D3DPMISCCAPS_CULLCCW"); - checkflag(flag,D3DPMISCCAPS_CULLCW,"D3DPMISCCAPS_CULLCW"); - checkflag(flag,D3DPMISCCAPS_CULLNONE,"D3DPMISCCAPS_CULLNONE"); - checkflag(flag,D3DPMISCCAPS_LINEPATTERNREP,"D3DPMISCCAPS_LINEPATTERNREP"); - checkflag(flag,D3DPMISCCAPS_MASKPLANES,"D3DPMISCCAPS_MASKPLANES"); - checkflag(flag,D3DPMISCCAPS_MASKZ,"D3DPMISCCAPS_MASKZ"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwMiscCaps"); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwRasterCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwRasterCaps; - checkflag(flag,D3DPRASTERCAPS_ANISOTROPY,"D3DPRASTERCAPS_ANISOTROPY"); - checkflag(flag,D3DPRASTERCAPS_ANTIALIASEDGES,"D3DPRASTERCAPS_ANTIALIASEDGES"); - checkflag(flag,D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT,"D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT"); - checkflag(flag,D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT,"D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT"); - checkflag(flag,D3DPRASTERCAPS_DITHER,"D3DPRASTERCAPS_DITHER"); - checkflag(flag,D3DPRASTERCAPS_FOGRANGE,"D3DPRASTERCAPS_FOGRANGE"); - checkflag(flag,D3DPRASTERCAPS_FOGTABLE,"D3DPRASTERCAPS_FOGTABLE"); - checkflag(flag,D3DPRASTERCAPS_FOGVERTEX,"D3DPRASTERCAPS_FOGVERTEX"); - checkflag(flag,D3DPRASTERCAPS_PAT,"D3DPRASTERCAPS_PAT"); - checkflag(flag,D3DPRASTERCAPS_ROP2,"D3DPRASTERCAPS_ROP2"); - checkflag(flag,D3DPRASTERCAPS_STIPPLE,"D3DPRASTERCAPS_STIPPLE"); - checkflag(flag,D3DPRASTERCAPS_SUBPIXEL,"D3DPRASTERCAPS_SUBPIXEL"); - checkflag(flag,D3DPRASTERCAPS_SUBPIXELX,"D3DPRASTERCAPS_SUBPIXELX"); - checkflag(flag,D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT,"D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT"); - checkflag(flag,D3DPRASTERCAPS_WBUFFER,"D3DPRASTERCAPS_WBUFFER"); - checkflag(flag,D3DPRASTERCAPS_WFOG,"D3DPRASTERCAPS_WFOG"); - checkflag(flag,D3DPRASTERCAPS_XOR,"D3DPRASTERCAPS_XOR"); - checkflag(flag,D3DPRASTERCAPS_ZBIAS,"D3DPRASTERCAPS_ZBIAS"); - checkflag(flag,D3DPRASTERCAPS_ZBUFFERLESSHSR,"D3DPRASTERCAPS_ZBUFFERLESSHSR"); - checkflag(flag,D3DPRASTERCAPS_ZFOG,"D3DPRASTERCAPS_ZFOG"); - checkflag(flag,D3DPRASTERCAPS_ZTEST,"D3DPRASTERCAPS_ZTEST"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwRasterCaps"); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwZCmpCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwZCmpCaps; - checkflag(flag,D3DPCMPCAPS_ALWAYS,"D3DPCMPCAPS_ALWAYS"); - checkflag(flag,D3DPCMPCAPS_EQUAL,"D3DPCMPCAPS_EQUAL"); - checkflag(flag,D3DPCMPCAPS_GREATER,"D3DPCMPCAPS_GREATER"); - checkflag(flag,D3DPCMPCAPS_GREATEREQUAL,"D3DPCMPCAPS_GREATEREQUAL"); - checkflag(flag,D3DPCMPCAPS_LESS,"D3DPCMPCAPS_LESS"); - checkflag(flag,D3DPCMPCAPS_LESSEQUAL,"D3DPCMPCAPS_LESSEQUAL"); - checkflag(flag,D3DPCMPCAPS_NEVER,"D3DPCMPCAPS_NEVER"); - checkflag(flag,D3DPCMPCAPS_NOTEQUAL,"D3DPCMPCAPS_NOTEQUAL"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwZCmpCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwSrcBlendCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwSrcBlendCaps; - checkflag(flag,D3DPBLENDCAPS_BOTHINVSRCALPHA,"D3DPBLENDCAPS_BOTHINVSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_BOTHSRCALPHA,"D3DPBLENDCAPS_BOTHSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_DESTALPHA,"D3DPBLENDCAPS_DESTALPHA"); - checkflag(flag,D3DPBLENDCAPS_DESTCOLOR,"D3DPBLENDCAPS_DESTCOLOR"); - checkflag(flag,D3DPBLENDCAPS_INVDESTALPHA,"D3DPBLENDCAPS_INVDESTALPHA"); - checkflag(flag,D3DPBLENDCAPS_INVDESTCOLOR,"D3DPBLENDCAPS_INVDESTCOLOR"); - checkflag(flag,D3DPBLENDCAPS_INVSRCALPHA,"D3DPBLENDCAPS_INVSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_INVSRCCOLOR,"D3DPBLENDCAPS_INVSRCCOLOR"); - checkflag(flag,D3DPBLENDCAPS_ONE,"D3DPBLENDCAPS_ONE"); - checkflag(flag,D3DPBLENDCAPS_SRCALPHA,"D3DPBLENDCAPS_SRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_SRCALPHASAT,"D3DPBLENDCAPS_SRCALPHASAT"); - checkflag(flag,D3DPBLENDCAPS_SRCCOLOR,"D3DPBLENDCAPS_SRCCOLOR"); - checkflag(flag,D3DPBLENDCAPS_ZERO,"D3DPBLENDCAPS_ZERO"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwSrcBlendCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwDestBlendCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwDestBlendCaps; - checkflag(flag,D3DPBLENDCAPS_BOTHINVSRCALPHA,"D3DPBLENDCAPS_BOTHINVSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_BOTHSRCALPHA,"D3DPBLENDCAPS_BOTHSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_DESTALPHA,"D3DPBLENDCAPS_DESTALPHA"); - checkflag(flag,D3DPBLENDCAPS_DESTCOLOR,"D3DPBLENDCAPS_DESTCOLOR"); - checkflag(flag,D3DPBLENDCAPS_INVDESTALPHA,"D3DPBLENDCAPS_INVDESTALPHA"); - checkflag(flag,D3DPBLENDCAPS_INVDESTCOLOR,"D3DPBLENDCAPS_INVDESTCOLOR"); - checkflag(flag,D3DPBLENDCAPS_INVSRCALPHA,"D3DPBLENDCAPS_INVSRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_INVSRCCOLOR,"D3DPBLENDCAPS_INVSRCCOLOR"); - checkflag(flag,D3DPBLENDCAPS_ONE,"D3DPBLENDCAPS_ONE"); - checkflag(flag,D3DPBLENDCAPS_SRCALPHA,"D3DPBLENDCAPS_SRCALPHA"); - checkflag(flag,D3DPBLENDCAPS_SRCALPHASAT,"D3DPBLENDCAPS_SRCALPHASAT"); - checkflag(flag,D3DPBLENDCAPS_SRCCOLOR,"D3DPBLENDCAPS_SRCCOLOR"); - checkflag(flag,D3DPBLENDCAPS_ZERO,"D3DPBLENDCAPS_ZERO"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwDestBlendCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwAlphaCmpCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwAlphaCmpCaps; - checkflag(flag,D3DPCMPCAPS_ALWAYS,"D3DPCMPCAPS_ALWAYS"); - checkflag(flag,D3DPCMPCAPS_EQUAL,"D3DPCMPCAPS_EQUAL"); - checkflag(flag,D3DPCMPCAPS_GREATER,"D3DPCMPCAPS_GREATER"); - checkflag(flag,D3DPCMPCAPS_GREATEREQUAL,"D3DPCMPCAPS_GREATEREQUAL"); - checkflag(flag,D3DPCMPCAPS_LESS,"D3DPCMPCAPS_LESS"); - checkflag(flag,D3DPCMPCAPS_LESSEQUAL,"D3DPCMPCAPS_LESSEQUAL"); - checkflag(flag,D3DPCMPCAPS_NEVER,"D3DPCMPCAPS_NEVER"); - checkflag(flag,D3DPCMPCAPS_NOTEQUAL,"D3DPCMPCAPS_NOTEQUAL"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwAlphaCmpCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwShadeCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwShadeCaps; - checkflag(flag,D3DPSHADECAPS_ALPHAFLATBLEND,"D3DPSHADECAPS_ALPHAFLATBLEND"); - checkflag(flag,D3DPSHADECAPS_ALPHAFLATSTIPPLED,"D3DPSHADECAPS_ALPHAFLATSTIPPLED"); - checkflag(flag,D3DPSHADECAPS_ALPHAGOURAUDBLEND,"D3DPSHADECAPS_ALPHAGOURAUDBLEND"); - checkflag(flag,D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED,"D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED"); - checkflag(flag,D3DPSHADECAPS_ALPHAPHONGBLEND,"D3DPSHADECAPS_ALPHAPHONGBLEND"); - checkflag(flag,D3DPSHADECAPS_ALPHAPHONGSTIPPLED,"D3DPSHADECAPS_ALPHAPHONGSTIPPLED"); - checkflag(flag,D3DPSHADECAPS_COLORFLATMONO,"D3DPSHADECAPS_COLORFLATMONO"); - checkflag(flag,D3DPSHADECAPS_COLORFLATRGB,"D3DPSHADECAPS_COLORFLATRGB"); - checkflag(flag,D3DPSHADECAPS_COLORGOURAUDMONO,"D3DPSHADECAPS_COLORGOURAUDMONO"); - checkflag(flag,D3DPSHADECAPS_COLORGOURAUDRGB,"D3DPSHADECAPS_COLORGOURAUDRGB"); - checkflag(flag,D3DPSHADECAPS_COLORPHONGMONO,"D3DPSHADECAPS_COLORPHONGMONO"); - checkflag(flag,D3DPSHADECAPS_COLORPHONGRGB,"D3DPSHADECAPS_COLORPHONGRGB"); - checkflag(flag,D3DPSHADECAPS_FOGFLAT,"D3DPSHADECAPS_FOGFLAT"); - checkflag(flag,D3DPSHADECAPS_FOGGOURAUD,"D3DPSHADECAPS_FOGGOURAUD"); - checkflag(flag,D3DPSHADECAPS_FOGPHONG,"D3DPSHADECAPS_FOGPHONG"); - checkflag(flag,D3DPSHADECAPS_SPECULARFLATMONO,"D3DPSHADECAPS_SPECULARFLATMONO"); - checkflag(flag,D3DPSHADECAPS_SPECULARFLATRGB,"D3DPSHADECAPS_SPECULARFLATRGB"); - checkflag(flag,D3DPSHADECAPS_SPECULARGOURAUDMONO,"D3DPSHADECAPS_SPECULARGOURAUDMONO"); - checkflag(flag,D3DPSHADECAPS_SPECULARGOURAUDRGB,"D3DPSHADECAPS_SPECULARGOURAUDRGB"); - checkflag(flag,D3DPSHADECAPS_SPECULARPHONGMONO,"D3DPSHADECAPS_SPECULARPHONGMONO"); - checkflag(flag,D3DPSHADECAPS_SPECULARPHONGRGB,"D3DPSHADECAPS_SPECULARPHONGRGB"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwShadeCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwTextureCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwTextureCaps; - checkflag(flag,D3DPTEXTURECAPS_ALPHA,"D3DPTEXTURECAPS_ALPHA"); - checkflag(flag,D3DPTEXTURECAPS_ALPHAPALETTE,"D3DPTEXTURECAPS_ALPHAPALETTE"); - checkflag(flag,D3DPTEXTURECAPS_BORDER,"D3DPTEXTURECAPS_BORDER"); - checkflag(flag,D3DPTEXTURECAPS_COLORKEYBLEND,"D3DPTEXTURECAPS_COLORKEYBLEND"); - checkflag(flag,D3DPTEXTURECAPS_CUBEMAP,"D3DPTEXTURECAPS_CUBEMAP"); - checkflag(flag,D3DPTEXTURECAPS_PERSPECTIVE,"D3DPTEXTURECAPS_PERSPECTIVE"); - checkflag(flag,D3DPTEXTURECAPS_POW2,"D3DPTEXTURECAPS_POW2"); - checkflag(flag,D3DPTEXTURECAPS_PROJECTED,"D3DPTEXTURECAPS_PROJECTED"); - checkflag(flag,D3DPTEXTURECAPS_NONPOW2CONDITIONAL,"D3DPTEXTURECAPS_NONPOW2CONDITIONAL"); - checkflag(flag,D3DPTEXTURECAPS_SQUAREONLY,"D3DPTEXTURECAPS_SQUAREONLY"); - //not in ddk or dxsdk but it is in msdn checkflag(flag,D3DPTEXTURECAPS_TEXREPEATNOTSCALESBYSIZE,"D3DPTEXTURECAPS_TEXREPEATNOTSCALESBYSIZE"); - //not in ddk or dxsdk but it is in msdn checkflag(flag,D3DPTEXTURECAPS_TEXTURETRANSFORM,"D3DPTEXTURECAPS_TEXTURETRANSFORM"); - checkflag(flag,D3DPTEXTURECAPS_TRANSPARENCY,"D3DPTEXTURECAPS_TRANSPARENCY"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwTextureCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwTextureFilterCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwTextureFilterCaps; - checkflag(flag,D3DPTFILTERCAPS_LINEAR,"D3DPTFILTERCAPS_LINEAR"); - checkflag(flag,D3DPTFILTERCAPS_LINEARMIPLINEAR,"D3DPTFILTERCAPS_LINEARMIPLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_LINEARMIPNEAREST,"D3DPTFILTERCAPS_LINEARMIPNEAREST"); - checkflag(flag,D3DPTFILTERCAPS_MAGFAFLATCUBIC,"D3DPTFILTERCAPS_MAGFAFLATCUBIC"); - checkflag(flag,D3DPTFILTERCAPS_MAGFANISOTROPIC,"D3DPTFILTERCAPS_MAGFANISOTROPIC"); - checkflag(flag,D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC,"D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC"); - checkflag(flag,D3DPTFILTERCAPS_MAGFLINEAR,"D3DPTFILTERCAPS_MAGFLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_MAGFPOINT,"D3DPTFILTERCAPS_MAGFPOINT"); - checkflag(flag,D3DPTFILTERCAPS_MINFANISOTROPIC,"D3DPTFILTERCAPS_MINFANISOTROPIC"); - checkflag(flag,D3DPTFILTERCAPS_MINFLINEAR,"D3DPTFILTERCAPS_MINFLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_MINFPOINT,"D3DPTFILTERCAPS_MINFPOINT"); - checkflag(flag,D3DPTFILTERCAPS_MIPFLINEAR,"D3DPTFILTERCAPS_MIPFLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_MIPFPOINT,"D3DPTFILTERCAPS_MIPFPOINT"); - checkflag(flag,D3DPTFILTERCAPS_MIPLINEAR,"D3DPTFILTERCAPS_MIPLINEAR"); - checkflag(flag,D3DPTFILTERCAPS_MIPNEAREST,"D3DPTFILTERCAPS_MIPNEAREST"); - checkflag(flag,D3DPTFILTERCAPS_NEAREST,"D3DPTFILTERCAPS_NEAREST"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwTextureFilterCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwTextureBlendCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwTextureBlendCaps; - checkflag(flag,D3DPTBLENDCAPS_ADD,"D3DPTBLENDCAPS_ADD"); - checkflag(flag,D3DPTBLENDCAPS_COPY,"D3DPTBLENDCAPS_COPY"); - checkflag(flag,D3DPTBLENDCAPS_DECAL,"D3DPTBLENDCAPS_DECAL"); - checkflag(flag,D3DPTBLENDCAPS_DECALALPHA,"D3DPTBLENDCAPS_DECALALPHA"); - checkflag(flag,D3DPTBLENDCAPS_DECALMASK,"D3DPTBLENDCAPS_DECALMASK"); - checkflag(flag,D3DPTBLENDCAPS_MODULATE,"D3DPTBLENDCAPS_MODULATE"); - checkflag(flag,D3DPTBLENDCAPS_MODULATEALPHA,"D3DPTBLENDCAPS_MODULATEALPHA"); - checkflag(flag,D3DPTBLENDCAPS_MODULATEMASK,"D3DPTBLENDCAPS_MODULATEMASK"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwTextureBlendCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwTextureAddressCaps : "); - count = 0; - flag = puD3dDriverData->hwCaps.dpcTriCaps.dwTextureAddressCaps; - checkflag(flag,D3DPTADDRESSCAPS_BORDER,"D3DPTADDRESSCAPS_BORDER"); - checkflag(flag,D3DPTADDRESSCAPS_CLAMP,"D3DPTADDRESSCAPS_CLAMP"); - checkflag(flag,D3DPTADDRESSCAPS_INDEPENDENTUV,"D3DPTADDRESSCAPS_INDEPENDENTUV"); - checkflag(flag,D3DPTADDRESSCAPS_MIRROR,"D3DPTADDRESSCAPS_MIRROR"); - checkflag(flag,D3DPTADDRESSCAPS_WRAP,"D3DPTADDRESSCAPS_WRAP"); - endcheckflag(flag,"puD3dDriverData->hwCaps.dpcTriCaps.dwTextureAddressCaps "); - - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwStippleWidth : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dpcTriCaps.dwStippleWidth); - printf(" puD3dDriverData->hwCaps.dpcTriCaps.dwStippleHeight : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dpcTriCaps.dwStippleHeight); - } - else - { - printf("none puD3dDriverData->hwCaps.dpcTriCaps.dwSize from the driver 0x%08lx\n",puD3dDriverData->hwCaps.dpcTriCaps.dwSize); - } - - printf(" puD3dDriverData->hwCaps.dwDeviceRenderBitDepth : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dwDeviceRenderBitDepth); - printf(" puD3dDriverData->hwCaps.dwDeviceZBufferBitDepth : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dwDeviceZBufferBitDepth); - printf(" puD3dDriverData->hwCaps.dwMaxBufferSize : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dwMaxBufferSize); - printf(" puD3dDriverData->hwCaps.dwMaxVertexCount : 0x%08lx\n",(long)puD3dDriverData->hwCaps.dwMaxVertexCount); - } - else - { - printf("none puD3dDriverData->hwCaps.dwSize from the driver 0x%08lx\n",puD3dDriverData->hwCaps.dwSize); - } - - printf(" puD3dDriverData->dwNumVertices : 0x%08lx\n",(long)puD3dDriverData->dwNumVertices); - printf(" puD3dDriverData->dwNumClipVertices : 0x%08lx\n",(long)puD3dDriverData->dwNumClipVertices); - printf(" puD3dDriverData->dwNumTextureFormats : 0x%08lx\n",(long)puD3dDriverData->dwNumTextureFormats); - printf(" puD3dDriverData->lpTextureFormats : 0x%08lx\n",(long)puD3dDriverData->lpTextureFormats); - printf(" puD3dDriverData->lpTextureFormats : 0x%08lx\n",(long)puD3dDriverData->lpTextureFormats); - } - else - { - printf("none puD3dDriverData from the driver 0x%08lx\n",puD3dDriverData->dwSize); - } -} - - -void -dump_D3dBufferCallbacks(DD_D3DBUFCALLBACKS *puD3dBufferCallbacks, char *text) -{ - int count = 0; - DWORD flag = 0; - - printf("dumping the DD_D3DBUFCALLBACKS from %s\n",text); - - if (puD3dBufferCallbacks->dwSize == sizeof(DD_D3DBUFCALLBACKS)) - { - printf(" puD3dBufferCallbacks->dwSize : 0x%08lx\n",(long)puD3dBufferCallbacks->dwSize); - printf(" puD3dBufferCallbacks->dwFlags : "); - - /* rember this flags are not in msdn only in ms ddk */ - count = 0; - flag = puD3dBufferCallbacks->dwFlags; - checkflag(flag,DDHAL_D3DBUFCB32_CANCREATED3DBUF,"DDHAL_D3DBUFCB32_CANCREATED3DBUF"); - checkflag(flag,DDHAL_D3DBUFCB32_CREATED3DBUF,"DDHAL_D3DBUFCB32_CREATED3DBUF"); - - checkflag(flag,DDHAL_D3DBUFCB32_DESTROYD3DBUF,"DDHAL_D3DBUFCB32_DESTROYD3DBUF"); - - checkflag(flag,DDHAL_D3DBUFCB32_LOCKD3DBUF,"DDHAL_D3DBUFCB32_LOCKD3DBUF"); - checkflag(flag,DDHAL_D3DBUFCB32_UNLOCKD3DBUF,"DDHAL_D3DBUFCB32_UNLOCKD3DBUF"); - endcheckflag(flag,"puD3dBufferCallbacks->dwFlags"); - - printf(" puD3dBufferCallbacks->CanCreateD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->CanCreateD3DBuffer); - printf(" puD3dBufferCallbacks->CreateD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->CreateD3DBuffer); - printf(" puD3dBufferCallbacks->DestroyD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->DestroyD3DBuffer); - printf(" puD3dBufferCallbacks->LockD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->LockD3DBuffer); - printf(" puD3dBufferCallbacks->UnlockD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->UnlockD3DBuffer); - } - else - { - printf("none puD3dBufferCallbacks from the driver 0x%08lx\n",puD3dBufferCallbacks->dwSize); - } - -} - -void -dump_D3dTextureFormats(DDSURFACEDESC *puD3dTextureFormats, int dwNum, char *text) -{ - int t=0; - int count = 0; - DWORD flag = 0; - DDSURFACEDESC * myTextureFormats = puD3dTextureFormats; - - printf("dumping the DDSURFACEDESC/DDSURFACEDESC2 from %s\n",text); - - for (t=0;tdwSize == sizeof(DDSURFACEDESC)) - { - printf(" puD3dTextureFormats->dwSize : 0x%08lx\n",(long)myTextureFormats->dwSize); - - printf(" puD3dTextureFormats->dwFlags : "); - count = 0; - flag = myTextureFormats->dwFlags; - checkflag(flag,DDSD_ALPHABITDEPTH,"DDSD_ALPHABITDEPTH"); - checkflag(flag,DDSD_BACKBUFFERCOUNT ,"DDSD_BACKBUFFERCOUNT"); - checkflag(flag,DDSD_CAPS,"DDSD_CAPS "); - checkflag(flag,DDSD_CKDESTBLT,"DDSD_CKDESTBLT"); - checkflag(flag,DDSD_CKDESTOVERLAY,"DDSD_CKDESTOVERLAY"); - checkflag(flag,DDSD_CKSRCBLT,"DDSD_CKSRCBLT"); - checkflag(flag,DDSD_CKSRCOVERLAY,"DDSD_CKSRCOVERLAY"); - checkflag(flag,DDSD_HEIGHT,"DDSD_HEIGHT"); - checkflag(flag,DDSD_LINEARSIZE,"DDSD_LINEARSIZE"); - checkflag(flag,DDSD_LPSURFACE,"DDSD_LPSURFACE"); - checkflag(flag,DDSD_MIPMAPCOUNT,"DDSD_MIPMAPCOUNT"); - checkflag(flag,DDSD_PITCH,"DDSD_PITCH"); - checkflag(flag,DDSD_PIXELFORMAT,"DDSD_PIXELFORMAT"); - checkflag(flag,DDSD_REFRESHRATE,"DDSD_REFRESHRATE"); - checkflag(flag,DDSD_WIDTH,"DDSD_WIDTH"); - checkflag(flag,DDSD_ZBUFFERBITDEPTH,"DDSD_ZBUFFERBITDEPTH"); - endcheckflag(flag,"puD3dTextureFormats->dwFlags"); - - printf(" puD3dTextureFormats->dwHeight : 0x%08lx\n",(long)myTextureFormats->dwHeight); - printf(" puD3dTextureFormats->dwWidth : 0x%08lx\n",(long)myTextureFormats->dwWidth); - printf(" puD3dTextureFormats->dwLinearSize : 0x%08lx\n",(long)myTextureFormats->dwLinearSize); - printf(" puD3dTextureFormats->dwBackBufferCount : 0x%08lx\n",(long)myTextureFormats->dwBackBufferCount); - printf(" puD3dTextureFormats->dwZBufferBitDepth : 0x%08lx\n",(long)myTextureFormats->dwZBufferBitDepth); - printf(" puD3dTextureFormats->dwAlphaBitDepth : 0x%08lx\n",(long)myTextureFormats->dwAlphaBitDepth); - printf(" puD3dTextureFormats->dwReserved : 0x%08lx\n",(long)myTextureFormats->dwReserved); - printf(" puD3dTextureFormats->lpSurface : 0x%08lx\n",(long)myTextureFormats->lpSurface); - printf(" puD3dTextureFormats->ddckCKDestOverlay.dwColorSpaceLowValue : 0x%08lx\n",(long)myTextureFormats->ddckCKDestOverlay.dwColorSpaceLowValue); - printf(" puD3dTextureFormats->ddckCKDestOverlay.dwColorSpaceHighValue : 0x%08lx\n",(long)myTextureFormats->ddckCKDestOverlay.dwColorSpaceHighValue); - printf(" puD3dTextureFormats->ddckCKDestBlt.dwColorSpaceLowValue : 0x%08lx\n",(long)myTextureFormats->ddckCKDestBlt.dwColorSpaceLowValue); - printf(" puD3dTextureFormats->ddckCKDestBlt : 0x%08lx\n",(long)myTextureFormats->ddckCKDestBlt.dwColorSpaceHighValue); - printf(" puD3dTextureFormats->ddckCKSrcOverlay.dwColorSpaceLowValue : 0x%08lx\n",(long)myTextureFormats->ddckCKSrcOverlay.dwColorSpaceLowValue); - printf(" puD3dTextureFormats->ddckCKSrcOverlay.dwColorSpaceHighValue : 0x%08lx\n",(long)myTextureFormats->ddckCKSrcOverlay.dwColorSpaceHighValue); - printf(" puD3dTextureFormats->ddckCKSrcBlt.dwColorSpaceLowValue : 0x%08lx\n",(long)myTextureFormats->ddckCKSrcBlt.dwColorSpaceLowValue); - printf(" puD3dTextureFormats->ddckCKSrcBlt.dwColorSpaceHighValue : 0x%08lx\n",(long)myTextureFormats->ddckCKSrcBlt.dwColorSpaceHighValue); - - // DDPIXELFORMAT - printf(" puD3dTextureFormats->ddpfPixelFormat.dwSize : 0x%08lx\n",(long)myTextureFormats->ddpfPixelFormat.dwSize); - if (puD3dTextureFormats->ddpfPixelFormat.dwSize == sizeof(DDPIXELFORMAT)) - { - printf(" puD3dTextureFormats->ddpfPixelFormat.dwFlags : "); - count = 0; - flag = myTextureFormats->ddpfPixelFormat.dwFlags; - checkflag(flag,DDPF_ALPHA,"DDPF_ALPHA"); - checkflag(flag,DDPF_ALPHAPIXELS ,"DDPF_ALPHAPIXELS"); - checkflag(flag,DDPF_ALPHAPREMULT,"DDPF_ALPHAPREMULT"); - checkflag(flag,DDPF_BUMPLUMINANCE ,"DDPF_BUMPLUMINANCE"); - checkflag(flag,DDPF_BUMPDUDV,"DDPF_BUMPDUDV"); - checkflag(flag,DDPF_COMPRESSED,"DDPF_COMPRESSED"); - checkflag(flag,DDPF_FOURCC,"DDPF_FOURCC"); - checkflag(flag,DDPF_LUMINANCE,"DDPF_LUMINANCE"); - checkflag(flag,DDPF_PALETTEINDEXED1,"DDPF_PALETTEINDEXED1"); - checkflag(flag,DDPF_PALETTEINDEXED2,"DDPF_PALETTEINDEXED2"); - checkflag(flag,DDPF_PALETTEINDEXED4,"DDPF_PALETTEINDEXED4"); - checkflag(flag,DDPF_PALETTEINDEXED8,"DDPF_PALETTEINDEXED8"); - checkflag(flag,DDPF_PALETTEINDEXEDTO8,"DDPF_PALETTEINDEXEDTO8"); - checkflag(flag,DDPF_RGB ,"DDPF_RGB"); - checkflag(flag,DDPF_RGBTOYUV,"DDPF_RGBTOYUV"); - checkflag(flag,DDPF_STENCILBUFFER,"DDPF_STENCILBUFFER"); - checkflag(flag,DDPF_YUV,"DDPF_YUV"); - checkflag(flag,DDPF_ZBUFFER,"DDPF_ZBUFFER"); - checkflag(flag,DDPF_ZPIXELS,"DDPF_ZPIXELS"); - endcheckflag(flag,"puD3dTextureFormats->ddpfPixelFormat.dwFlags"); - - - if (myTextureFormats->ddpfPixelFormat.dwFlags & DDPF_FOURCC) - { - printf(" puD3dTextureFormats->ddpfPixelFormat.dwFourCC : "); - switch(myTextureFormats->ddpfPixelFormat.dwFourCC) - { - case MAKEFOURCC('A','U','R','2'): - printf("AUR2\n"); - break; - - case MAKEFOURCC('A','U','R','A'): - printf("AURA\n"); - break; - - case MAKEFOURCC('C','H','A','M'): - printf("CHAM\n"); - break; - - case MAKEFOURCC('C','V','I','D'): - printf("CVID\n"); - break; - - case MAKEFOURCC('D','X','T','1'): - printf("DXT1\n"); - break; - - case MAKEFOURCC('D','X','T','2'): - printf("DXT2\n"); - break; - - case MAKEFOURCC('D','X','T','3'): - printf("DXT3\n"); - break; - - case MAKEFOURCC('D','X','T','4'): - printf("DXT4\n"); - break; - - case MAKEFOURCC('D','X','T','5'): - printf("DXT5\n"); - break; - - case MAKEFOURCC('F','V','F','1'): - printf("FVF1\n"); - break; - - case MAKEFOURCC('I','F','0','9'): - printf("IF09\n"); - break; - - case MAKEFOURCC('I','V','3','1'): - printf("IV31\n"); - break; - - case MAKEFOURCC('J','P','E','G'): - printf("JPEG\n"); - break; - - case MAKEFOURCC('M','J','P','G'): - printf("MJPG\n"); - break; - - case MAKEFOURCC('M','R','L','E'): - printf("MRLE\n"); - break; - - case MAKEFOURCC('M','S','V','C'): - printf("MSVC\n"); - break; - - case MAKEFOURCC('P','H','M','O'): - printf("PHMO\n"); - break; - - case MAKEFOURCC('R','T','2','1'): - printf("RT21\n"); - break; - - case MAKEFOURCC('U','L','T','I'): - printf("ULTI\n"); - break; - - case MAKEFOURCC('V','4','2','2'): - printf("V422\n"); - break; - - case MAKEFOURCC('V','6','5','5'): - printf("V655\n"); - break; - - case MAKEFOURCC('V','D','C','T'): - printf("VDCT\n"); - break; - - case MAKEFOURCC('V','I','D','S'): - printf("VIDS\n"); - break; - - case MAKEFOURCC('Y','U','9','2'): - printf("YU92\n"); - break; - - case MAKEFOURCC('Y','U','V','8'): - printf("YUV8\n"); - break; - - case MAKEFOURCC('Y','U','V','9'): - printf("YUV9\n"); - break; - - case MAKEFOURCC('Y','U','Y','V'): - printf("YUYV\n"); - break; - - case MAKEFOURCC('Z','P','E','G'): - printf("ZPEG\n"); - break; - - default: - printf("0x%08lx\n",(long)myTextureFormats->ddpfPixelFormat.dwFourCC); - break; - } - } - else - { - printf(" puD3dTextureFormats->ddpfPixelFormat.dwFourCC : 0x%08lx\n",(long)myTextureFormats->ddpfPixelFormat.dwFourCC); - } - printf(" puD3dTextureFormats->ddpfPixelFormat.dwRGBBitCount : 0x%08lx\n",(long)myTextureFormats->ddpfPixelFormat.dwRGBBitCount); - printf(" puD3dTextureFormats->ddpfPixelFormat.dwRBitMask : 0x%08lx\n",(long)myTextureFormats->ddpfPixelFormat.dwRBitMask); - printf(" puD3dTextureFormats->ddpfPixelFormat.dwGBitMask : 0x%08lx\n",(long)myTextureFormats->ddpfPixelFormat.dwGBitMask); - printf(" puD3dTextureFormats->ddpfPixelFormat.dwBBitMask : 0x%08lx\n",(long)myTextureFormats->ddpfPixelFormat.dwBBitMask); - printf(" puD3dTextureFormats->ddpfPixelFormat.dwRGBAlphaBitMask : 0x%08lx\n",(long)myTextureFormats->ddpfPixelFormat.dwRGBAlphaBitMask); - } - else - { - printf("none uD3dTextureFormats->ddpfPixelFormat from the driver 0x%08lx\n",myTextureFormats->ddpfPixelFormat.dwSize); - } - - printf(" puD3dTextureFormats->ddsCaps.dwCaps : "); - count = 0; - flag = myTextureFormats->ddsCaps.dwCaps; - // not in use longer acoing msdn checkflag(flag,DDSCAPS_3D,"DDSCAPS_3D"); - checkflag(flag,DDSCAPS_3DDEVICE ,"DDSCAPS_3DDEVICE"); - checkflag(flag,DDSCAPS_ALLOCONLOAD,"DDSCAPS_ALLOCONLOAD "); - checkflag(flag,DDSCAPS_ALPHA,"DDSCAPS_ALPHA"); - checkflag(flag,DDSCAPS_BACKBUFFER,"DDSCAPS_BACKBUFFER"); - checkflag(flag,DDSCAPS_FLIP,"DDSCAPS_FLIP"); - checkflag(flag,DDSCAPS_FRONTBUFFER,"DDSCAPS_FRONTBUFFER"); - checkflag(flag,DDSCAPS_HWCODEC,"DDSCAPS_HWCODEC"); - checkflag(flag,DDSCAPS_LIVEVIDEO ,"DDSCAPS_LIVEVIDEO"); - checkflag(flag,DDSCAPS_LOCALVIDMEM,"DDSCAPS_LOCALVIDMEM"); - checkflag(flag,DDSCAPS_MIPMAP,"DDSCAPS_MIPMAP"); - checkflag(flag,DDSCAPS_MODEX,"DDSCAPS_MODEX"); - checkflag(flag,DDSCAPS_NONLOCALVIDMEM,"DDSCAPS_NONLOCALVIDMEM"); - checkflag(flag,DDSCAPS_OFFSCREENPLAIN,"DDSCAPS_OFFSCREENPLAIN"); - checkflag(flag,DDSCAPS_OPTIMIZED,"DDSCAPS_OPTIMIZED"); - checkflag(flag,DDSCAPS_OVERLAY,"DDSCAPS_OVERLAY"); - checkflag(flag,DDSCAPS_OWNDC,"DDSCAPS_OWNDC"); - checkflag(flag,DDSCAPS_PALETTE,"DDSCAPS_PALETTE"); - checkflag(flag,DDSCAPS_PRIMARYSURFACE ,"DDSCAPS_PRIMARYSURFACE"); - checkflag(flag,DDSCAPS_STANDARDVGAMODE,"DDSCAPS_STANDARDVGAMODE"); - checkflag(flag,DDSCAPS_SYSTEMMEMORY,"DDSCAPS_SYSTEMMEMORY"); - checkflag(flag,DDSCAPS_TEXTURE,"DDSCAPS_TEXTURE"); - checkflag(flag,DDSCAPS_VIDEOMEMORY,"DDSCAPS_VIDEOMEMORY"); - checkflag(flag,DDSCAPS_VIDEOPORT,"DDSCAPS_VIDEOPORT"); - checkflag(flag,DDSCAPS_VISIBLE,"DDSCAPS_VISIBLE"); - checkflag(flag,DDSCAPS_WRITEONLY ,"DDSCAPS_WRITEONLY"); - checkflag(flag,DDSCAPS_ZBUFFER,"DDSCAPS_ZBUFFER"); - endcheckflag(flag,"puD3dTextureFormats->ddsCaps.dwCaps"); - - - myTextureFormats = (DDSURFACEDESC *) (((DWORD) myTextureFormats) + sizeof(DDSURFACEDESC)); - } - else - { - printf("error this should not happen : puD3dTextureFormats from the driver 0x%08lx\n",myTextureFormats->dwSize); - break; - } - } - - - - - - - - - - - -} diff --git a/rostests/dxtest/win32kdxtest/main.c b/rostests/dxtest/win32kdxtest/main.c deleted file mode 100644 index fe23dc231b9..00000000000 --- a/rostests/dxtest/win32kdxtest/main.c +++ /dev/null @@ -1,91 +0,0 @@ - - -/* All testcase are base how windows 2000 sp4 acting */ - - -#include -/* SDK/DDK/NDK Headers. */ -#include -#include -#include -#include -#include -#include "test.h" - -BOOL dumping_on =FALSE; -FILE *fs_file; - -/* we using d3d8thk.dll it is doing the real syscall in windows 2000 - * in ReactOS and Windows XP and higher d3d8thk.dll it linking to - * gdi32.dll instead doing syscall, gdi32.dll export DdEntry1-56 - * and doing the syscall direcly. I did forget about it, This - * test program are now working on any Windows and ReactOS - * that got d3d8thk.dll - */ - -int main(int argc, char **argv) -{ - HANDLE hDirectDrawLocal; - - if (argc == 2) - { - if (stricmp(argv[1],"-dump")==0) - { - dumping_on = TRUE; - } - - if ( (stricmp(argv[1],"-help")==0) || - (stricmp(argv[1],"-?")==0) || - (stricmp(argv[1],"/help")==0) || - (stricmp(argv[1],"/?")==0) ) - { - printf("the %s support follow param \n",argv[0]); - printf("-dump : It dump all data it resvie to screen \n"); - printf("-dumpfile filename : It dump all data it resvie to file \n"); - printf("\nrember u can only use one of them at time \n"); - exit(1); - } - } - - if (argc == 3) - { - if (stricmp(argv[1],"-dumpfile")==0) - { - /* create or over write a file in binary mode, and redirect printf to the file */ - if ( (fs_file = freopen(argv[2], "wb", stdout)) != NULL) - { - dumping_on = TRUE; - } - } - } - - hDirectDrawLocal = test_NtGdiDdCreateDirectDrawObject(); - - test_NtGdiDdQueryDirectDrawObject(hDirectDrawLocal); - - test_NtGdiDdGetScanLine(hDirectDrawLocal); - - test_NtGdiDdWaitForVerticalBlank(hDirectDrawLocal); - - test_NtGdiDdCanCreateSurface(hDirectDrawLocal); - - test_NtGdiDdDeleteDirectDrawObject(hDirectDrawLocal); - - if (fs_file != NULL) - { - fclose(fs_file); - } - return 0; -} - - - - - - - - - - - - diff --git a/rostests/dxtest/win32kdxtest/test.h b/rostests/dxtest/win32kdxtest/test.h deleted file mode 100644 index 7180ad6c689..00000000000 --- a/rostests/dxtest/win32kdxtest/test.h +++ /dev/null @@ -1,61 +0,0 @@ - - -HANDLE test_NtGdiDdCreateDirectDrawObject(); -void test_NtGdiDdDeleteDirectDrawObject(HANDLE hDirectDrawLocal); -void test_NtGdiDdQueryDirectDrawObject( HANDLE hDirectDrawLocal); -void test_NtGdiDdGetScanLine(HANDLE hDirectDrawLocal); -void test_NtGdiDdWaitForVerticalBlank(HANDLE hDirectDrawLocal); -void test_NtGdiDdCanCreateSurface(HANDLE hDirectDrawLocal); - - -void dump_halinfo(DD_HALINFO *pHalInfo, char *text); -void dump_CallBackFlags(DWORD *pCallBackFlags, char *text); -void dump_D3dCallbacks(D3DNTHAL_CALLBACKS *puD3dCallbacks, char *text); -void dump_D3dDriverData(D3DNTHAL_GLOBALDRIVERDATA *puD3dDriverData, char *text); -void dump_D3dBufferCallbacks(DD_D3DBUFCALLBACKS *puD3dCallbacks, char *text); -void dump_D3dTextureFormats(DDSURFACEDESC *puD3dTextureFormats, int dwNum, char *text); - - - - - - - -#define testing_eq(input,value,counter,text) \ - if (input == value) \ - { \ - counter++; \ - printf("FAIL ret=%s, %d != %d )\n",text,(int)input,(int)value); \ - } - - -#define testing_noteq(input,value,counter,text) \ - if (input != value) \ - { \ - counter++; \ - printf("FAIL ret=%s, %d == %d )\n",text,(int)input,(int)value); \ - } - - -#define show_status(counter, text) \ - if (counter == 0) \ - { \ - printf("End testing of %s Status : ok\n\n",text); \ - } \ - else \ - { \ - printf("End testing of %s Status : fail\n\n",text); \ - } - - -#if !defined(__REACTOS__) - -#define win_syscall(inValue,outValue,syscallid) \ - __asm { mov eax, syscallid }; \ - __asm { lea edx, [inValue] }; \ - __asm { int 0x2E }; \ - __asm { mov outValue,eax}; - - - -#endif diff --git a/rostests/dxtest/win32kdxtest/win32kdxtest.rbuild b/rostests/dxtest/win32kdxtest/win32kdxtest.rbuild deleted file mode 100644 index ed1253bb8e8..00000000000 --- a/rostests/dxtest/win32kdxtest/win32kdxtest.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - . - kernel32 - user32 - gdi32 - d3d8thk - main.c - NtGdiDdCreateDirectDrawObject.c - NtGdiDdDeleteDirectDrawObject.c - NtGdiDdQueryDirectDrawObject.c - NtGdiDdGetScanLine.c - NtGdiDdWaitForVerticalBlank.c - NtGdiDdCanCreateSurface.c - dump.c - \ No newline at end of file diff --git a/rostests/readme.txt b/rostests/readme.txt deleted file mode 100644 index 2b10c84a0ff..00000000000 --- a/rostests/readme.txt +++ /dev/null @@ -1,9 +0,0 @@ -$Id: readme.txt 21229 2006-03-05 13:57:35Z frik85 $ - -==================== -ReactOS Tests -==================== - -This directory contains various tests for ReactOS. -Make sure you also have a copy of the rest of the ReactOS -source before you attempt to build anything in this module. \ No newline at end of file diff --git a/rostests/regtests_by_casper/directory.rbuild b/rostests/regtests_by_casper/directory.rbuild deleted file mode 100644 index 55fd1e14efa..00000000000 --- a/rostests/regtests_by_casper/directory.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/rostests/regtests_by_casper/regtests/regtests.c b/rostests/regtests_by_casper/regtests/regtests.c deleted file mode 100644 index ccda2f93d66..00000000000 --- a/rostests/regtests_by_casper/regtests/regtests.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * PROJECT: ReactOS kernel - * FILE: regtests/regtests/regtests.c - * PURPOSE: Regression testing framework - * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) - * UPDATE HISTORY: - * 23-10-2004 CSH Created - */ -#include - -HMODULE STDCALL -_GetModuleHandleA(LPCSTR lpModuleName) -{ - return GetModuleHandleA(lpModuleName); -} - -FARPROC STDCALL -_GetProcAddress(HMODULE hModule, - LPCSTR lpProcName) -{ - return GetProcAddress(hModule, lpProcName); -} - -HINSTANCE STDCALL -_LoadLibraryA(LPCSTR lpLibFileName) -{ - return LoadLibraryA(lpLibFileName); -} - -VOID STDCALL -_ExitProcess(UINT uExitCode) -{ - ExitProcess(uExitCode); -} - -HANDLE STDCALL -_CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, - LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, - DWORD dwCreationFlags, LPDWORD lpThreadId) -{ - return CreateThread(lpThreadAttributes, dwStackSize, lpStartAddress, - lpParameter, dwCreationFlags, lpThreadId); -} - -WINBOOL STDCALL -_TerminateThread(HANDLE hThread, DWORD dwExitCode) -{ - return TerminateThread(hThread, dwExitCode); -} - -DWORD STDCALL -_WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds) -{ - return WaitForSingleObject(hHandle, dwMilliseconds); -} - -DWORD STDCALL -_GetLastError() -{ - return GetLastError(); -} - -VOID STDCALL -_CloseHandle(HANDLE handle) -{ - CloseHandle (handle); -} - -BOOL STDCALL -_GetThreadTimes(HANDLE hThread, LPFILETIME lpCreationTime, - LPFILETIME lpExitTime, LPFILETIME lpKernelTime, - LPFILETIME lpUserTime) -{ - return GetThreadTimes(hThread, lpCreationTime, lpExitTime, - lpKernelTime, lpUserTime); -} - -BOOL STDCALL -_SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass) -{ - return SetPriorityClass(hProcess, dwPriorityClass); -} - -BOOL STDCALL -_SetThreadPriority(HANDLE hThread, int nPriority) -{ - return SetThreadPriority(hThread, nPriority); -} - -HANDLE STDCALL -_GetCurrentProcess() -{ - return GetCurrentProcess(); -} - -HANDLE STDCALL -_GetCurrentThread() -{ - return GetCurrentThread(); -} - -VOID STDCALL -_Sleep(DWORD dwMilliseconds) -{ - return Sleep(dwMilliseconds); -} diff --git a/rostests/regtests_by_casper/regtests/regtests.def b/rostests/regtests_by_casper/regtests/regtests.def deleted file mode 100644 index cd492c37c75..00000000000 --- a/rostests/regtests_by_casper/regtests/regtests.def +++ /dev/null @@ -1,17 +0,0 @@ -LIBRARY REGTESTS.DLL -EXPORTS -_ExitProcess@4 -_GetModuleHandleA@4 -_GetProcAddress@8 -_LoadLibraryA@4 -_CreateThread@24 -_TerminateThread@8 -_WaitForSingleObject@8 -_GetLastError@0 -_CloseHandle@4 -_GetThreadTimes@20 -_SetPriorityClass@8 -_SetThreadPriority@8 -_GetCurrentProcess@0 -_GetCurrentThread@0 -_Sleep@4 diff --git a/rostests/regtests_by_casper/regtests/regtests.rbuild b/rostests/regtests_by_casper/regtests/regtests.rbuild deleted file mode 100644 index 1822536009f..00000000000 --- a/rostests/regtests_by_casper/regtests/regtests.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - . - - kernel32 - regtests.c - diff --git a/rostests/regtests_by_casper/shared/regtests.c b/rostests/regtests_by_casper/shared/regtests.c deleted file mode 100644 index 3513911b600..00000000000 --- a/rostests/regtests_by_casper/shared/regtests.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * PROJECT: ReactOS kernel - * FILE: regtests/shared/regtests.c - * PURPOSE: Regression testing framework - * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) - * UPDATE HISTORY: - * 06-07-2003 CSH Created - */ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include -#include "regtests.h" - -#define NDEBUG -#include - -typedef struct _PERFORM_TEST_ARGS -{ - TestOutputRoutine OutputRoutine; - _PTEST Test; - LPSTR TestName; - DWORD Result; - char Buffer[5000]; - DWORD Time; -} PERFORM_TEST_ARGS; - -int _Result; -char *_Buffer; - -static LIST_ENTRY AllTests; - -VOID -InitializeTests() -{ - InitializeListHead(&AllTests); -} - -char* -FormatExecutionTime(char *buffer, ULONG milliseconds) -{ - sprintf(buffer, - "%ldms", - milliseconds); - return buffer; -} - -DWORD WINAPI -PerformTest(PVOID _arg) -{ - PERFORM_TEST_ARGS *Args = (PERFORM_TEST_ARGS *)_arg; - _PTEST Test = Args->Test; - - _SetThreadPriority(_GetCurrentThread(), THREAD_PRIORITY_IDLE); - - memset(Args->Buffer, 0, sizeof(Args->Buffer)); - - _SEH_TRY { - _Result = TS_OK; - _Buffer = Args->Buffer; - (Test->Routine)(TESTCMD_RUN); - Args->Result = _Result; - } _SEH_HANDLE { - Args->Result = TS_FAILED; - sprintf(Args->Buffer, "due to exception 0x%lx", _SEH_GetExceptionCode()); - } _SEH_END; - return 1; -} - -VOID -ControlNormalTest(HANDLE hThread, - PERFORM_TEST_ARGS *Args, - DWORD TimeOut) -{ - _FILETIME time; - _FILETIME executionTime; - DWORD status; - - status = _WaitForSingleObject(hThread, TimeOut); - if (status == WAIT_TIMEOUT) - { - _TerminateThread(hThread, 0); - Args->Result = TS_TIMEDOUT; - } - status = _GetThreadTimes(hThread, - &time, - &time, - &time, - &executionTime); - Args->Time = executionTime.dwLowDateTime / 10000; -} - -VOID -DisplayResult(PERFORM_TEST_ARGS* Args, - LPSTR OutputBuffer) -{ - char Format[100]; - - if (Args->Result == TS_OK) - { - sprintf(OutputBuffer, - "[%s] Success [%s]\n", - Args->TestName, - FormatExecutionTime(Format, - Args->Time)); - } - else if (Args->Result == TS_TIMEDOUT) - { - sprintf(OutputBuffer, - "[%s] Timed out [%s]\n", - Args->TestName, - FormatExecutionTime(Format, - Args->Time)); - } - else - sprintf(OutputBuffer, "[%s] Failed (%s)\n", Args->TestName, Args->Buffer); - - if (Args->OutputRoutine != NULL) - (*Args->OutputRoutine)(OutputBuffer); - else - DbgPrint(OutputBuffer); -} - -VOID -ControlTest(HANDLE hThread, - PERFORM_TEST_ARGS *Args, - DWORD TestType, - DWORD TimeOut) -{ - switch (TestType) - { - case TT_NORMAL: - ControlNormalTest(hThread, Args, TimeOut); - break; - default: - printf("Unknown test type %ld\n", TestType); - break; - } -} - -VOID -PerformTests(TestOutputRoutine OutputRoutine, LPSTR TestName) -{ - PLIST_ENTRY CurrentEntry; - PLIST_ENTRY NextEntry; - _PTEST Current; - PERFORM_TEST_ARGS Args; - HANDLE hThread; - char OutputBuffer[1024]; - char Name[200]; - DWORD TestType; - DWORD TimeOut; - - Args.OutputRoutine = OutputRoutine; - Args.TestName = Name; - Args.Time = 0; - - CurrentEntry = AllTests.Flink; - for (; CurrentEntry != &AllTests; CurrentEntry = NextEntry) - { - NextEntry = CurrentEntry->Flink; - Current = CONTAINING_RECORD(CurrentEntry, _TEST, ListEntry); - Args.Test = Current; - - /* Get name of test */ - memset(Name, 0, sizeof(Name)); - - _Result = TS_OK; - _Buffer = Name; - (Current->Routine)(TESTCMD_TESTNAME); - if (_Result != TS_OK) - { - if (TestName != NULL) - continue; - strcpy(Name, "Unnamed"); - } - - if ((TestName != NULL) && (_stricmp(Name, TestName) != 0)) - continue; - - TestType = TT_NORMAL; - _Result = TS_OK; - _Buffer = (char *)&TestType; - (Current->Routine)(TESTCMD_TESTTYPE); - if (_Result != TS_OK) - TestType = TT_NORMAL; - - /* Get timeout for test */ - TimeOut = 0; - _Result = TS_OK; - _Buffer = (char *)&TimeOut; - (Current->Routine)(TESTCMD_TIMEOUT); - if (_Result != TS_OK || TimeOut == INFINITE) - TimeOut = 5000; - - /* Run test in a separate thread */ - hThread = _CreateThread(NULL, 0, PerformTest, (PVOID)&Args, 0, NULL); - if (hThread == NULL) - { - printf("[%s] Failed (CreateThread() failed: %ld)\n", - Name, - _GetLastError()); - Args.Result = TS_FAILED; - } - else - ControlTest(hThread, &Args, TestType, TimeOut); - - DisplayResult(&Args, OutputBuffer); - } -} - -VOID -AddTest(TestRoutine Routine) -{ - _PTEST Test; - - Test = (_PTEST) malloc(sizeof(_TEST)); - if (Test == NULL) - { - DbgPrint("Out of memory"); - return; - } - - Test->Routine = Routine; - - InsertTailList(&AllTests, &Test->ListEntry); -} - -PVOID STDCALL -FrameworkGetHook(ULONG index) -{ - return FrameworkGetHookInternal(index); -} diff --git a/rostests/regtests_by_casper/shared/regtests.h b/rostests/regtests_by_casper/shared/regtests.h deleted file mode 100644 index eeca12f68e1..00000000000 --- a/rostests/regtests_by_casper/shared/regtests.h +++ /dev/null @@ -1,384 +0,0 @@ -/* - * PROJECT: ReactOS kernel - * FILE: regtests/shared/regtests.h - * PURPOSE: Regression testing - * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) - * UPDATE HISTORY: - * 06-07-2003 CSH Created - */ -#ifndef __REGTESTS_H -#define __REGTESTS_H -#include -#include - -typedef DWORD (STDCALL _LPTHREAD_START_ROUTINE)(LPVOID lpParameter); - -typedef struct __FILETIME -{ - DWORD dwLowDateTime; - DWORD dwHighDateTime; -} _FILETIME, *_PFILETIME, *_LPFILETIME; - -extern void SetupOnce(); - -#define _SetupOnce() \ -void SetupOnce() - -/* Valid values for Command parameter of TestRoutine */ -#define TESTCMD_RUN 0 /* Buffer contains information about what failed */ -#define TESTCMD_TESTTYPE 1 /* Buffer contains type of test */ -#define TESTCMD_TESTNAME 2 /* Buffer contains description of test */ -#define TESTCMD_TIMEOUT 3 /* Buffer contains timeout for test (DWORD, default is 5000 ms) */ - -/* Test types */ -#define TT_NORMAL 0 - -/* Valid values for return values of TestRoutine */ -#define TS_TIMEDOUT ((DWORD)-2) -#define TS_EXCEPTION ((DWORD)-1) -#define TS_OK 0 -#define TS_FAILED 1 - -extern int _Result; -extern char *_Buffer; - -/* Macros to simplify tests */ -#define _DispatcherTypeTimeout(FunctionName, TestName, TestType, TimeOut) \ -void \ -FunctionName(int Command) \ -{ \ - switch (Command) \ - { \ - case TESTCMD_RUN: \ - RunTest(); \ - break; \ - case TESTCMD_TESTTYPE: \ - *(PDWORD)_Buffer = (DWORD)TestType; \ - break; \ - case TESTCMD_TESTNAME: \ - strcpy(_Buffer, TestName); \ - break; \ - case TESTCMD_TIMEOUT: \ - *(PDWORD)_Buffer = (DWORD)TimeOut; \ - break; \ - default: \ - _Result = TS_FAILED; \ - break; \ - } \ -} - -#define _DispatcherTimeout(FunctionName, TestName, TimeOut) \ - _DispatcherTypeTimeout(FunctionName, TestName, TT_NORMAL, TimeOut) - -#define _DispatcherType(FunctionName, TestName, TestType) \ - _DispatcherTypeTimeout(FunctionName, TestName, TestType, 5000) - -#define _Dispatcher(FunctionName, TestName) \ - _DispatcherTimeout(FunctionName, TestName, 5000) - -static __inline void -AppendAssertion(char *message) -{ - if (strlen(_Buffer) != 0) - strcat(_Buffer, "\n"); - strcat(_Buffer, message); - _Result = TS_FAILED; -} - -#define _AssertTrue(_Condition) \ -{ \ - if (!(_Condition)) \ - { \ - char _message[100]; \ - sprintf(_message, "Condition was not true at %s:%d", \ - __FILE__, __LINE__); \ - AppendAssertion(_message); \ - } \ -} - -#define _AssertFalse(_Condition) \ -{ \ - if (_Condition) \ - { \ - char _message[100]; \ - sprintf(_message, "Condition was not false at %s:%d", \ - __FILE__, __LINE__); \ - AppendAssertion(_message); \ - } \ -} - -#define _AssertEqualValue(_Expected, _Actual) \ -{ \ - ULONG __Expected = (ULONG) (_Expected); \ - ULONG __Actual = (ULONG) (_Actual); \ - if ((__Expected) != (__Actual)) \ - { \ - char _message[100]; \ - sprintf(_message, "Expected %ld/0x%.08lx was %ld/0x%.08lx at %s:%d", \ - (__Expected), (__Expected), (__Actual), (__Actual), __FILE__, __LINE__); \ - AppendAssertion(_message); \ - } \ -} - -#define _AssertEqualWideString(_Expected, _Actual) \ -{ \ - LPWSTR __Expected = (LPWSTR) (_Expected); \ - LPWSTR __Actual = (LPWSTR) (_Actual); \ - if (wcscmp((__Expected), (__Actual)) != 0) \ - { \ - char _message[100]; \ - sprintf(_message, "Expected %S was %S at %s:%d", \ - (__Expected), (__Actual), __FILE__, __LINE__); \ - AppendAssertion(_message); \ - } \ -} - -#define _AssertNotEqualValue(_Expected, _Actual) \ -{ \ - ULONG __Expected = (ULONG) (_Expected); \ - ULONG __Actual = (ULONG) (_Actual); \ - if ((__Expected) == (__Actual)) \ - { \ - char _message[100]; \ - sprintf(_message, "Actual value expected to be different from %ld/0x%.08lx at %s:%d", \ - (__Expected), (__Expected), __FILE__, __LINE__); \ - AppendAssertion(_message); \ - } \ -} - - -/* - * Test routine prototype - * Command - The command to process - */ -typedef void (*TestRoutine)(int Command); - -/* - * Test output routine prototype - * Buffer - Address of buffer with text to output - */ -typedef void (*TestOutputRoutine)(char *Buffer); - -/* - * Test driver entry routine. -* OutputRoutine - Output routine. - * TestName - If NULL all tests are run. If non-NULL specifies the test to be run - */ -typedef void (STDCALL *TestDriverMain)(TestOutputRoutine OutputRoutine, char *TestName); - -typedef struct __TEST -{ - LIST_ENTRY ListEntry; - TestRoutine Routine; -} _TEST, *_PTEST; - -extern VOID InitializeTests(); -extern VOID RegisterTests(); -extern VOID PerformTests(TestOutputRoutine OutputRoutine, LPSTR TestName); - - -typedef struct __API_DESCRIPTION -{ - PCHAR FileName; - PCHAR FunctionName; - PCHAR ForwardedFunctionName; - PVOID FunctionAddress; - PVOID MockFunctionAddress; -} _API_DESCRIPTION, *_PAPI_DESCRIPTION; - -extern _API_DESCRIPTION ExternalDependencies[]; -extern ULONG MaxExternalDependency; - -HANDLE STDCALL -_GetModuleHandleA(LPCSTR lpModuleName); - -PVOID STDCALL -_GetProcAddress(HANDLE hModule, - LPCSTR lpProcName); - -HANDLE STDCALL -_LoadLibraryA(LPCSTR lpLibFileName); - -VOID STDCALL -_ExitProcess(UINT uExitCode); - -HANDLE STDCALL -_CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, - _LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, - DWORD dwCreationFlags, LPDWORD lpThreadId); - -BOOL STDCALL -_TerminateThread(HANDLE hThread, DWORD dwExitCode); - -DWORD STDCALL -_WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); - -DWORD STDCALL -_GetLastError(); - -VOID STDCALL -_CloseHandle(HANDLE handle); - -BOOL STDCALL -_GetThreadTimes(HANDLE hThread, - _LPFILETIME lpCreationTime, - _LPFILETIME lpExitTime, - _LPFILETIME lpKernelTime, - _LPFILETIME lpUserTime); - -BOOL STDCALL -_SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass); - -BOOL STDCALL -_SetThreadPriority(HANDLE hThread, int nPriority); - -HANDLE STDCALL -_GetCurrentProcess(); - -HANDLE STDCALL -_GetCurrentThread(); - -VOID STDCALL -_Sleep(DWORD dwMilliseconds); - - -static __inline PCHAR -FrameworkGetExportedFunctionNameInternal(_PAPI_DESCRIPTION ApiDescription) -{ - if (ApiDescription->ForwardedFunctionName != NULL) - { - return ApiDescription->ForwardedFunctionName; - } - else - { - return ApiDescription->FunctionName; - } -} - -static __inline PVOID -FrameworkGetFunction(_PAPI_DESCRIPTION ApiDescription) -{ - HANDLE hModule; - PVOID function = NULL; - PCHAR exportedFunctionName; - - exportedFunctionName = FrameworkGetExportedFunctionNameInternal(ApiDescription); - - hModule = _GetModuleHandleA(ApiDescription->FileName); - if (hModule != NULL) - { - function = _GetProcAddress(hModule, exportedFunctionName); - } - else - { - hModule = _LoadLibraryA(ApiDescription->FileName); - if (hModule != NULL) - { - function = _GetProcAddress(hModule, exportedFunctionName); - //FreeLibrary(hModule); - } - } - return function; -} - -static __inline PVOID -FrameworkGetHookInternal(ULONG index) -{ - PVOID address; - PCHAR exportedFunctionName; - - if (index > MaxExternalDependency) - return NULL; - - if (ExternalDependencies[index].MockFunctionAddress != NULL) - return ExternalDependencies[index].MockFunctionAddress; - - if (ExternalDependencies[index].FunctionAddress != NULL) - return ExternalDependencies[index].FunctionAddress; - - exportedFunctionName = FrameworkGetExportedFunctionNameInternal(&ExternalDependencies[index]); - - printf("Calling function '%s' in DLL '%s'.\n", - exportedFunctionName, - ExternalDependencies[index].FileName); - - address = FrameworkGetFunction(&ExternalDependencies[index]); - - if (address == NULL) - { - printf("Function '%s' not found in DLL '%s'.\n", - exportedFunctionName, - ExternalDependencies[index].FileName); - } - ExternalDependencies[index].FunctionAddress = address; - - return address; -} - - -static __inline VOID -_SetHook(PCHAR name, - PVOID address) -{ - _PAPI_DESCRIPTION api; - ULONG index; - - for (index = 0; index <= MaxExternalDependency; index++) - { - api = &ExternalDependencies[index]; - if (strcmp(api->FunctionName, name) == 0) - { - api->MockFunctionAddress = address; - return; - } - } -} - -typedef struct __HOOK -{ - PCHAR FunctionName; - PVOID FunctionAddress; -} _HOOK, *_PHOOK; - -static __inline VOID -_SetHooks(_PHOOK hookTable) -{ - _PHOOK hook; - - hook = &hookTable[0]; - while (hook->FunctionName != NULL) - { - _SetHook(hook->FunctionName, - hook->FunctionAddress); - hook++; - } -} - -static __inline VOID -_UnsetHooks(_PHOOK hookTable) -{ - _PHOOK hook; - - hook = &hookTable[0]; - while (hook->FunctionName != NULL) - { - _SetHook(hook->FunctionName, - NULL); - hook++; - } -} - -static __inline VOID -_UnsetAllHooks() -{ - _PAPI_DESCRIPTION api; - ULONG index; - - for (index = 0; index <= MaxExternalDependency; index++) - { - api = &ExternalDependencies[index]; - api->MockFunctionAddress = NULL; - } -} - -#endif /* __REGTESTS_H */ diff --git a/rostests/regtests_by_casper/shared/rtshared.rbuild b/rostests/regtests_by_casper/shared/rtshared.rbuild deleted file mode 100644 index 0fa7e5c8cdd..00000000000 --- a/rostests/regtests_by_casper/shared/rtshared.rbuild +++ /dev/null @@ -1,5 +0,0 @@ - - . - - regtests.c - diff --git a/rostests/tests/D3DParseUnknownCommand_show/D3DParseUnknownCommand_show.rbuild b/rostests/tests/D3DParseUnknownCommand_show/D3DParseUnknownCommand_show.rbuild deleted file mode 100644 index 633b3566d53..00000000000 --- a/rostests/tests/D3DParseUnknownCommand_show/D3DParseUnknownCommand_show.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - kernel32 - gdi32 - ddraw - user32 - main.c - diff --git a/rostests/tests/D3DParseUnknownCommand_show/main.c b/rostests/tests/D3DParseUnknownCommand_show/main.c deleted file mode 100644 index 84a8142341d..00000000000 --- a/rostests/tests/D3DParseUnknownCommand_show/main.c +++ /dev/null @@ -1,49 +0,0 @@ - -#include -#include - -#include -#include - -/* Black Box program for D3DParseUnknownCommand in ddraw.dll - * - * This program scaning all return valu that D3DParseUnknownCommand have in ddraw.dll - * This command is not 100% document in MSDN so I using ddk kit doc and WinCE document - * and ms ddk / ms sdk to figout the basic. and MSDN was unclare what this command support for - * D3DHAL_DP2COMMAND dp2command->bCommand so I wrote this small scanner - * - * it will show D3DParseUnknownCommand dp2command->bCommand support follow command - * command hex dec - * D3DDP2OP_VIEWPORTINFO (aka 0x1c) 28 - * D3DDP2OP_WINFO (aka 0x1d) 29 - * Unknown (aka 0x0d) 13 - * - * no doc in msdn about command 13 (dec) I will exaime it later - * - */ - -INT main(INT argc, TCHAR *argv[]); -VOID BuildReturnCode(DWORD * ReturnCode); - -INT main(INT argc, TCHAR *argv[]) -{ - DWORD ReturnCode[256]; - - BuildReturnCode(ReturnCode); - - return 0; -} - -VOID BuildReturnCode(DWORD * ReturnCode) -{ - INT t; - D3DHAL_DP2COMMAND dp2command; - DWORD lplpvReturnedCommand[2]; - - for (t=0;t<256;t++) - { - dp2command.bCommand = t; - ReturnCode[t] = D3DParseUnknownCommand ( (LPVOID) &dp2command, (LPVOID *) lplpvReturnedCommand) ; - printf("D3DParseUnknownCommand return code = %x command %d \n", (UINT)ReturnCode[t], t); - } -} diff --git a/rostests/tests/DxHalTest/DxHalTest.rbuild b/rostests/tests/DxHalTest/DxHalTest.rbuild deleted file mode 100644 index 6241a30e627..00000000000 --- a/rostests/tests/DxHalTest/DxHalTest.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - main.c - diff --git a/rostests/tests/DxHalTest/main.c b/rostests/tests/DxHalTest/main.c deleted file mode 100644 index af89cd9f4c9..00000000000 --- a/rostests/tests/DxHalTest/main.c +++ /dev/null @@ -1,665 +0,0 @@ -#include -#include "main.h" - - -// TODO: -// -// - free memory -// - Check if we ran out of memory (HeapAlloc == NULL) - HDC hdc; - DDRAWI_DIRECTDRAW_GBL mDDrawGlobal; - DDRAWI_DIRECTDRAW_LCL mDDrawLocal; - DDHALINFO mHALInfo; - - DDHAL_CALLBACKS mCallbacks; - DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks; - D3DHAL_CALLBACKS mD3dCallbacks; - D3DHAL_GLOBALDRIVERDATA mD3dDriverData; - - UINT mcModeInfos; - DDHALMODEINFO *mpModeInfos; - - UINT mcvmList; - VIDMEM *mpvmList; - - UINT mcFourCC; - DWORD *mpFourCC; - - UINT mcTextures; - DDSURFACEDESC *mpTextures; - - /* Surface */ - DDRAWI_DDRAWSURFACE_GBL mPrimaryGlobal; - DDRAWI_DDRAWSURFACE_MORE mPrimaryMore; - DDRAWI_DDRAWSURFACE_LCL mPrimaryLocal; - DDRAWI_DDRAWSURFACE_LCL *mpPrimaryLocals[1]; - DDRAWI_DDRAWCLIPPER_LCL mPrimaryClipperLocal; - DDRAWI_DDRAWCLIPPER_GBL mPrimaryClipperGlobal; - //DDRAWI_DDRAWCLIPPER_INT mPrimaryClipperInterface; - DDSURFACEDESC mddsdPrimary; - DDSURFACEDESC mddsdOverlay; - - DDRAWI_DDRAWSURFACE_GBL mOverlayGlobal; - DDRAWI_DDRAWSURFACE_LCL mOverlayLocal[6]; - DDRAWI_DDRAWSURFACE_LCL *mpOverlayLocals[6]; - DDRAWI_DDRAWSURFACE_MORE mOverlayMore[6]; - - DDHAL_BLTDATA mDdBlt; - - -typedef struct _DD_GETDRIVERINFODATA { - VOID *dhpdev; - DWORD dwSize; - DWORD dwFlags; - GUID guidInfo; - DWORD dwExpectedSize; - PVOID lpvData; - DWORD dwActualSize; - HRESULT ddRVal; - ULONG_PTR dwContext; -} DD_GETDRIVERINFODATA, *PDD_GETDRIVERINFODATA; - - -typedef struct _DD_MISCELLANEOUSCALLBACKS { - DWORD dwSize; - DWORD dwFlags; - PVOID GetAvailDriverMemory; -} DD_MISCELLANEOUSCALLBACKS; - - -int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, - LPSTR lpCmdLine, int nCmdShow) -{ - /* get the functions we need */ -// DD_GETDRIVERINFODATA drv; - HMODULE lib = LoadLibrary("gdi32.dll"); - DdCreateDirectDrawObject = (BOOL (APIENTRY*)(LPDDRAWI_DIRECTDRAW_GBL, HDC))GetProcAddress(lib, "GdiEntry1"); - DdQueryDirectDrawObject = (BOOL (APIENTRY*)(LPDDRAWI_DIRECTDRAW_GBL, LPDDHALINFO,LPDDHAL_DDCALLBACKS,LPDDHAL_DDSURFACECALLBACKS,LPDDHAL_DDPALETTECALLBACKS,LPD3DHAL_CALLBACKS,LPD3DHAL_GLOBALDRIVERDATA,LPDDHAL_DDEXEBUFCALLBACKS,LPDDSURFACEDESC,LPDWORD,LPVIDMEM))GetProcAddress(lib, "GdiEntry2"); - DdAttachSurface = (BOOL (APIENTRY*)(LPDDRAWI_DDRAWSURFACE_LCL, LPDDRAWI_DDRAWSURFACE_LCL))GetProcAddress(lib, "GdiEntry11"); - DdResetVisrgn = (BOOL (APIENTRY*)(LPDDRAWI_DDRAWSURFACE_LCL, HWND))GetProcAddress(lib, "GdiEntry6"); - - /* HAL Startup process */ - DEVMODE devmode; - HBITMAP hbmp; - const UINT bmiSize = sizeof(BITMAPINFOHEADER) + 0x10; - UCHAR *pbmiData; - BITMAPINFO *pbmi; - - DWORD *pMasks; - //BOOL newmode = FALSE; - //DWORD Status; /* for create surface */ - UINT i; - UINT j; - - - printf("This apps showing how to start up directx draw/d3d interface and some other as well\n"); - printf("This code have been releae to some close applactons with my premtions, if any company\n"); - printf("want use part or whole code, you need contact the orginal author to ask for premtions\n"); - printf("This code are release under alot of diffent licen\n"); - printf("All GPL and LGPL project have right use and studing this code.\n"); - printf("This code maybe need more comment to known how stuff working and maybe looking bit mesy\n"); - printf("Bestreagds Magnus Olsen magnus@greatlord.com or greatlord@reactos.org\n"); - printf("Copyright 2006 by Magnus Olsen\n\n"); - printf("This demo showing how to start dx draw hal and create a primary surface,\n"); - printf("and a overlay sufrace and blt to the primary surface\n"); - - - /* - Get and Create mode info - */ - mcModeInfos = 1; - mpModeInfos = (DDHALMODEINFO*)HeapAlloc(GetProcessHeap(), - HEAP_ZERO_MEMORY, - mcModeInfos * sizeof(DDHALMODEINFO)); - - if (mpModeInfos == NULL) - { - printf("Fail to alloc mpModeInfos\n"); - return DD_FALSE; - } - - - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode); - - mpModeInfos[0].dwWidth = devmode.dmPelsWidth; - mpModeInfos[0].dwHeight = devmode.dmPelsHeight; - mpModeInfos[0].dwBPP = devmode.dmBitsPerPel; - mpModeInfos[0].lPitch = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8; - mpModeInfos[0].wRefreshRate = (WORD)devmode.dmDisplayFrequency; - - /* - Setup HDC and mDDrawGlobal right - */ - hdc = CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL); - - if (hdc == NULL) - { - printf("Fail to create HDC\n"); - return DD_FALSE; - } - - /* - Dectect RGB bit mask - */ - hbmp = CreateCompatibleBitmap(hdc, 1, 1); - if (hbmp==NULL) - { - HeapFree(GetProcessHeap(), 0, mpModeInfos); - DeleteDC(hdc); - printf("Fail to Create Compatible Bitmap\n"); - return DD_FALSE; - } - - pbmiData = (UCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, bmiSize); - pbmi = (BITMAPINFO*)pbmiData; - - if (pbmiData==NULL) - { - HeapFree(GetProcessHeap(), 0, mpModeInfos); - free(mpModeInfos); - DeleteDC(hdc); - DeleteObject(hbmp); - printf("Fail to Alloc pbmiData\n"); - return DDERR_UNSUPPORTED; - } - - pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - pbmi->bmiHeader.biBitCount = (WORD)devmode.dmBitsPerPel; - pbmi->bmiHeader.biCompression = BI_BITFIELDS; - pbmi->bmiHeader.biWidth = 1; - pbmi->bmiHeader.biHeight = 1; - - GetDIBits(hdc, hbmp, 0, 0, NULL, pbmi, 0); - DeleteObject(hbmp); - - pMasks = (DWORD*)(pbmiData + sizeof(BITMAPINFOHEADER)); - mpModeInfos[0].dwRBitMask = pMasks[0]; - mpModeInfos[0].dwGBitMask = pMasks[1]; - mpModeInfos[0].dwBBitMask = pMasks[2]; - mpModeInfos[0].dwAlphaBitMask = pMasks[3]; - - HeapFree(GetProcessHeap(), 0, pbmiData); - - /* - prepare start up the DX Draw HAL interface now - */ - - memset(&mDDrawGlobal, 0, sizeof(DDRAWI_DIRECTDRAW_GBL)); - memset(&mHALInfo, 0, sizeof(DDHALINFO)); - memset(&mCallbacks, 0, sizeof(DDHAL_CALLBACKS)); - - /* - Startup DX HAL step one of three - */ - if (!DdCreateDirectDrawObject(&mDDrawGlobal, hdc)) - { - HeapFree(GetProcessHeap(), 0, mpModeInfos); - DeleteDC(hdc); - DeleteObject(hbmp); - printf("Fail to Create Direct DrawObject\n"); - return DD_FALSE; - } - - mDDrawGlobal.dwRefCnt = 1; //addref / remove ref - - // Do not relase HDC it have been map in kernel mode - // DeleteDC(hdc); - - /* we need reanable it if screen res have changes, and some bad drv need be reanble very few - to contiune */ - /* - if (!DdReenableDirectDrawObject(&mDDrawGlobal, &newmode)) - { - HeapFree(GetProcessHeap(), 0, mpModeInfos); - DeleteDC(hdc); - DeleteObject(hbmp); - return DD_FALSE; - }*/ - - /* - Setup the DirectDraw Local - */ - - mDDrawLocal.lpDDCB = &mCallbacks; - mDDrawLocal.lpGbl = &mDDrawGlobal; - mDDrawLocal.dwProcessId = GetCurrentProcessId(); - - mDDrawGlobal.lpDDCBtmp = &mCallbacks; - mDDrawGlobal.lpExclusiveOwner = &mDDrawLocal; - //mDDrawLocal.dwLocalFlags = DDRAWILCL_DIRECTDRAW7; - - - /* - Startup DX HAL step two of three - */ - - if (!DdQueryDirectDrawObject(&mDDrawGlobal, - &mHALInfo, - &mCallbacks.HALDD, - &mCallbacks.HALDDSurface, - &mCallbacks.HALDDPalette, - &mD3dCallbacks, - &mD3dDriverData, - &mD3dBufferCallbacks, - NULL, - NULL, - NULL)) - { - HeapFree(GetProcessHeap(), 0, mpModeInfos); - DeleteDC(hdc); - DeleteObject(hbmp); - // FIXME Close DX fristcall and second call - return DD_FALSE; - } - - mcvmList = mHALInfo.vmiData.dwNumHeaps; - mpvmList = (VIDMEM*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(VIDMEM) * mcvmList); - if (mpvmList == NULL) - { - HeapFree(GetProcessHeap(), 0, mpModeInfos); - DeleteDC(hdc); - DeleteObject(hbmp); - // FIXME Close DX fristcall and second call - printf("Fail to QueryDirect Draw Object frist pass\n"); - return DD_FALSE; - } - - mcFourCC = mHALInfo.ddCaps.dwNumFourCCCodes; - mpFourCC = (DWORD *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DWORD) * mcFourCC); - if (mpFourCC == NULL) - { - HeapFree(GetProcessHeap(), 0, mpvmList); - HeapFree(GetProcessHeap(), 0, mpModeInfos); - DeleteDC(hdc); - DeleteObject(hbmp); - // FIXME Close DX fristcall and second call - return DD_FALSE; - } - - mcTextures = mD3dDriverData.dwNumTextureFormats; - mpTextures = (DDSURFACEDESC*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DDSURFACEDESC) * mcTextures); - if (mpTextures == NULL) - { - HeapFree(GetProcessHeap(), 0, mpFourCC); - HeapFree(GetProcessHeap(), 0, mpvmList); - HeapFree(GetProcessHeap(), 0, mpModeInfos); - DeleteDC(hdc); - DeleteObject(hbmp); - // FIXME Close DX fristcall and second call - printf("Fail QueryDirect Draw Object to Alloc mpTextures \n"); - return DD_FALSE; - } - - mHALInfo.vmiData.pvmList = mpvmList; - mHALInfo.lpdwFourCC = mpFourCC; - mD3dDriverData.lpTextureFormats = mpTextures; - - if (!DdQueryDirectDrawObject( - &mDDrawGlobal, - &mHALInfo, - &mCallbacks.HALDD, - &mCallbacks.HALDDSurface, - &mCallbacks.HALDDPalette, - &mD3dCallbacks, - &mD3dDriverData, - &mCallbacks.HALDDExeBuf, - mpTextures, - mpFourCC, - mpvmList)) - - { - HeapFree(GetProcessHeap(), 0, mpTextures); - HeapFree(GetProcessHeap(), 0, mpFourCC); - HeapFree(GetProcessHeap(), 0, mpvmList); - HeapFree(GetProcessHeap(), 0, mpModeInfos); - DeleteDC(hdc); - DeleteObject(hbmp); - printf("Fail to QueryDirect Draw Object second pass\n"); - return DD_FALSE; - } - - /* - Copy over from HalInfo to DirectDrawGlobal - */ - - // this is wrong, cDriverName need be in ASC code not UNICODE - //memcpy(mDDrawGlobal.cDriverName, mDisplayAdapter, sizeof(wchar)*MAX_DRIVER_NAME); - - memcpy(&mDDrawGlobal.vmiData, &mHALInfo.vmiData,sizeof(VIDMEMINFO)); - memcpy(&mDDrawGlobal.ddCaps, &mHALInfo.ddCaps,sizeof(DDCORECAPS)); - - mHALInfo.dwNumModes = mcModeInfos; - mHALInfo.lpModeInfo = mpModeInfos; - mHALInfo.dwMonitorFrequency = mpModeInfos[0].wRefreshRate; - - mDDrawGlobal.dwMonitorFrequency = mHALInfo.dwMonitorFrequency; - mDDrawGlobal.dwModeIndex = mHALInfo.dwModeIndex; - mDDrawGlobal.dwNumModes = mHALInfo.dwNumModes; - mDDrawGlobal.lpModeInfo = mHALInfo.lpModeInfo; - mDDrawGlobal.hInstance = mHALInfo.hInstance; - - mDDrawGlobal.lp16DD = &mDDrawGlobal; - - - - /* Hal insate is down now */ - - /* cleare surface code now*/ - - // memset(&mGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL)); - // memset(&mMore, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); - - /* mLocal.lpSurfMore = &mMore; - memset(mMore, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); - mMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);*/ - - mPrimaryLocal.lpSurfMore = &mPrimaryMore; - - /* cleare surface ends now */ - - /* create primare surface now */ - - memset(&mddsdPrimary, 0, sizeof(DDSURFACEDESC)); - mddsdPrimary.dwSize = sizeof(DDSURFACEDESC); - mddsdPrimary.dwFlags = DDSD_CAPS; - mddsdPrimary.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VISIBLE; - - DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; - mDdCanCreateSurface.lpDD = &mDDrawGlobal; - mDdCanCreateSurface.CanCreateSurface = mCallbacks.HALDD.CanCreateSurface; - mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; //isDifferentPixelFormat; - mDdCanCreateSurface.lpDDSurfaceDesc = &mddsdPrimary; // pDDSD; - - if (mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) - { - printf("Fail to mDdCanCreateSurface DDHAL_DRIVER_NOTHANDLED\n"); - return DDERR_NOTINITIALIZED; - } - - if (mDdCanCreateSurface.ddRVal != DD_OK) - { - printf("Fail to mDdCanCreateSurface mDdCanCreateSurface.ddRVal = %d:%s\n",(int)mDdCanCreateSurface.ddRVal,DDErrorString(mDdCanCreateSurface.ddRVal)); - return DDERR_NOTINITIALIZED; - } - - memset(&mPrimaryGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL)); - mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE; - mPrimaryGlobal.lpDD = &mDDrawGlobal; - mPrimaryGlobal.lpDDHandle = &mDDrawGlobal; - mPrimaryGlobal.wWidth = (WORD)mpModeInfos[0].dwWidth; - mPrimaryGlobal.wHeight = (WORD)mpModeInfos[0].dwHeight; - mPrimaryGlobal.lPitch = mpModeInfos[0].lPitch; - - memset(&mPrimaryMore, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); - mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); - - - //mPrimaryMore. = mpr - - memset(&mPrimaryLocal, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL)); - mPrimaryLocal.lpGbl = &mPrimaryGlobal; - mPrimaryLocal.lpSurfMore = &mPrimaryMore; - mPrimaryLocal.dwProcessId = GetCurrentProcessId(); - mPrimaryLocal.dwFlags = DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA; - mPrimaryLocal.ddsCaps.dwCaps = mddsdPrimary.ddsCaps.dwCaps; - - mpPrimaryLocals[0] = &mPrimaryLocal; - - DDHAL_CREATESURFACEDATA mDdCreateSurface; - mDdCreateSurface.lpDD = &mDDrawGlobal; - mDdCreateSurface.CreateSurface = mCallbacks.HALDD.CreateSurface; - mDdCreateSurface.lpDDSurfaceDesc = &mddsdPrimary;//pDDSD; - mDdCreateSurface.lplpSList = mpPrimaryLocals; //cSurfaces; - mDdCreateSurface.dwSCnt = 1 ; //ppSurfaces; - - if (mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED) - { - printf("Fail to mDdCreateSurface DDHAL_DRIVER_NOTHANDLED \n"); - return DDERR_NOTINITIALIZED; - } - - - if (mDdCreateSurface.ddRVal != DD_OK) - { - printf("Fail to mDdCanCreateSurface mDdCreateSurface.ddRVal = %d:%s\n",(int)mDdCreateSurface.ddRVal,DDErrorString(mDdCreateSurface.ddRVal)); - return mDdCreateSurface.ddRVal; - } - - // -- Setup Clipper --------------------------------------------------------- - memset(&mPrimaryClipperGlobal, 0, sizeof(DDRAWI_DDRAWCLIPPER_GBL)); - mPrimaryClipperGlobal.dwFlags = DDRAWICLIP_ISINITIALIZED; - mPrimaryClipperGlobal.dwProcessId = GetCurrentProcessId(); - //mPrimaryClipperGlobal.hWnd = (ULONG_PTR)hwnd; - mPrimaryClipperGlobal.hWnd = (ULONG_PTR)GetDesktopWindow(); - mPrimaryClipperGlobal.lpDD = &mDDrawGlobal; - mPrimaryClipperGlobal.lpStaticClipList = NULL; - - memset(&mPrimaryClipperLocal, 0, sizeof(DDRAWI_DDRAWCLIPPER_LCL)); - mPrimaryClipperLocal.lpGbl = &mPrimaryClipperGlobal; - - //memset(&mPrimaryClipperInterface, 0, sizeof(DDRAWI_DDRAWCLIPPER_INT)); - //mPrimaryClipperInterface.lpLcl = &mPrimaryClipperLocal; - //mPrimaryClipperInterface.dwIntRefCnt = 1; - //mPrimaryClipperInterface.lpLink = null; - //mPrimaryClipperInterface.lpVtbl = null; - - mPrimaryLocal.lpDDClipper = &mPrimaryClipperLocal; - //mPrimaryMore.lpDDIClipper = &mPrimaryClipperInterface; - - mDdBlt.lpDDDestSurface = mpPrimaryLocals[0]; - - - /* create primare surface is down now */ - - /* create overlay surface now */ - - memset(&mddsdOverlay, 0, sizeof(DDSURFACEDESC)); - mddsdOverlay.dwSize = sizeof(DDSURFACEDESC); - mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT; - - mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP; - - mddsdOverlay.dwWidth = 100; //pels; - mddsdOverlay.dwHeight = 100; // lines; - mddsdOverlay.dwBackBufferCount = 1; //cBuffers; - - mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); - mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB; - mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32; - - - //DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; - mDdCanCreateSurface.lpDD = &mDDrawGlobal; - mDdCanCreateSurface.CanCreateSurface = mCallbacks.HALDD.CanCreateSurface; - mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat; - mDdCanCreateSurface.lpDDSurfaceDesc = &mddsdOverlay; // pDDSD; - - - if (mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) - { - // derr(L"DirectDrawImpl[%08x]::__createPrimary Cannot create primary [%08x]", this, rv); - - printf("Fail to mDdCanCreateSurface DDHAL_DRIVER_NOTHANDLED \n"); - return DDERR_NOTINITIALIZED; - } - - if (mDdCanCreateSurface.ddRVal != DD_OK) - { - printf("Fail to mDdCanCreateSurface mDdCanCreateSurface.ddRVal = %d:%s\n",(int)mDdCanCreateSurface.ddRVal,DDErrorString(mDdCanCreateSurface.ddRVal)); - return DDERR_NOTINITIALIZED; - } - - - memset(&mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL)); - mOverlayGlobal.dwGlobalFlags = 0; - mOverlayGlobal.lpDD = &mDDrawGlobal; - mOverlayGlobal.lpDDHandle = &mDDrawGlobal; - mOverlayGlobal.wWidth = (WORD)mddsdOverlay.dwWidth; - mOverlayGlobal.wHeight = (WORD)mddsdOverlay.dwHeight; - mOverlayGlobal.lPitch = -1; - mOverlayGlobal.ddpfSurface = mddsdOverlay.ddpfPixelFormat; - - // setup front- and backbuffer surfaces - UINT cSurfaces = mddsdOverlay.dwBackBufferCount + 1; - for ( i = 0; i < cSurfaces; i++) - { - memset(&mOverlayMore[i], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); - mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); - - memset(&mOverlayLocal[i], 0, sizeof(DDRAWI_DDRAWSURFACE_LCL)); - mOverlayLocal[i].lpGbl = &mOverlayGlobal; - mOverlayLocal[i].lpSurfMore = &mOverlayMore[i]; - mOverlayLocal[i].dwProcessId = GetCurrentProcessId(); - mOverlayLocal[i].dwFlags = (i == 0) ? - (DDRAWISURF_IMPLICITROOT|DDRAWISURF_FRONTBUFFER): - (DDRAWISURF_IMPLICITCREATE|DDRAWISURF_BACKBUFFER); - - mOverlayLocal[i].dwFlags |= - DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| - DDRAWISURF_HASPIXELFORMAT| - DDRAWISURF_HASOVERLAYDATA; - - mOverlayLocal[i].ddsCaps.dwCaps = mddsdOverlay.ddsCaps.dwCaps; - mpOverlayLocals[i] = &mOverlayLocal[i]; - } - - for ( i = 0; i < cSurfaces; i++) - { - j = (i + 1) % cSurfaces; - - - /*if (!mHALInfo.lpDDSurfaceCallbacks->AddAttachedSurface(mpOverlayLocals[i], mpOverlayLocals[j])) - { - // derr(L"DirectDrawImpl[%08x]::__setupDevice DdAttachSurface(%d, %d) failed", this, i, j); - return DD_FALSE; - }*/ - - if (!DdAttachSurface(mpOverlayLocals[i], mpOverlayLocals[j])) - { - // derr(L"DirectDrawImpl[%08x]::__setupDevice DdAttachSurface(%d, %d) failed", this, i, j); - printf("Fail to DdAttachSurface (%d:%d)\n", i, j); - return DD_FALSE; - } - - } - - - // DDHAL_CREATESURFACEDATA mDdCreateSurface; - mDdCreateSurface.lpDD = &mDDrawGlobal; - mDdCreateSurface.CreateSurface = mCallbacks.HALDD.CreateSurface; - mDdCreateSurface.lpDDSurfaceDesc = &mddsdOverlay;//pDDSD; - mDdCreateSurface.lplpSList = mpOverlayLocals; //cSurfaces; - mDdCreateSurface.dwSCnt = 1 ; //ppSurfaces; - - if (mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED) - { - printf("Fail to mDdCreateSurface = DDHAL_DRIVER_HANDLED\n"); - return DDERR_NOTINITIALIZED; - } - - - if (mDdCreateSurface.ddRVal != DD_OK) - { - printf("Fail to mDdCreateSurface mDdCreateSurface.ddRVal = %d:%s\n",(int)mDdCreateSurface.ddRVal,DDErrorString(mDdCreateSurface.ddRVal)); - return mDdCreateSurface.ddRVal; - } - - - DDHAL_UPDATEOVERLAYDATA mDdUpdateOverlay; - mDdUpdateOverlay.lpDD = &mDDrawGlobal; - mDdUpdateOverlay.UpdateOverlay = mCallbacks.HALDDSurface.UpdateOverlay; - mDdUpdateOverlay.lpDDDestSurface = mpPrimaryLocals[0]; - mDdUpdateOverlay.lpDDSrcSurface = mpOverlayLocals[0];//pDDSurface; - mDdUpdateOverlay.dwFlags = DDOVER_SHOW; - - /* if (flags & DDOVER_DDFX) - mDdUpdateOverlay.overlayFX = *pFx; - copyRect(&mDdUpdateOverlay.rDest, pdst); - copyRect(&mDdUpdateOverlay.rSrc, psrc); -*/ - - mDdUpdateOverlay.rDest.top = 0; - mDdUpdateOverlay.rDest.left = 0; - mDdUpdateOverlay.rDest.right = 50; - mDdUpdateOverlay.rDest.bottom = 50; - - mDdUpdateOverlay.rSrc.top = 0; - mDdUpdateOverlay.rSrc.left = 0; - mDdUpdateOverlay.rSrc.right = 50; - mDdUpdateOverlay.rSrc.bottom = 50; - - - - - if ( mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) == DDHAL_DRIVER_NOTHANDLED) - { - printf("Fail to mDdBlt = DDHAL_DRIVER_HANDLED\n"); - return DDERR_NOTINITIALIZED; - } - - - if (mDdUpdateOverlay.ddRVal != DD_OK) - { - printf("Fail to mDdUpdateOverlay mDdUpdateOverlay.ddRVal = %d:%s\n",(int)mDdUpdateOverlay.ddRVal,DDErrorString(mDdUpdateOverlay.ddRVal)); - return mDdUpdateOverlay.ddRVal; - } - - /* blt */ - - - DDRAWI_DDRAWSURFACE_LCL *pDDSurface = mpPrimaryLocals[0]; - - if (!DdResetVisrgn(pDDSurface, NULL)) - { - // derr(L"DirectDrawImpl[%08x]::_clear DdResetVisrgn failed", this); - } - - - memset(&mDdBlt, 0, sizeof(DDHAL_BLTDATA)); - memset(&mDdBlt.bltFX, 0, sizeof(DDBLTFX)); - mDdBlt.bltFX.dwSize = sizeof(DDBLTFX); - - mDdBlt.lpDD = &mDDrawGlobal; - mDdBlt.Blt = mCallbacks.HALDDSurface.Blt; - mDdBlt.lpDDDestSurface = mpPrimaryLocals[0]; - - mpPrimaryLocals[0]->hDC = (ULONG_PTR)GetDC(GetDesktopWindow()); - mDdBlt.rDest.top = 50; - mDdBlt.rDest.bottom = 100; - mDdBlt.rDest.left = 0; - mDdBlt.rDest.right = 100; - mDdBlt.lpDDSrcSurface = NULL; - mDdBlt.IsClipped = FALSE; - mDdBlt.bltFX.dwFillColor = 0xFFFF00; - mDdBlt.dwFlags = DDBLT_COLORFILL | DDBLT_WAIT; - // mDdBlt.IsClipped = TRUE; - - if (mDdBlt.Blt(&mDdBlt) != DDHAL_DRIVER_HANDLED) - { - printf("Fail to mDdBlt = DDHAL_DRIVER_HANDLED\n"); - return DDHAL_DRIVER_HANDLED; - } - - - - if (mDdBlt.ddRVal!=DD_OK) - { - printf("Fail to mDdBlt mDdBlt.ddRVal = %d:%s\n",(int)mDdBlt.ddRVal,DDErrorString(mDdBlt.ddRVal)); - return mDdBlt.ddRVal; - } - - mDdUpdateOverlay.rDest.right = 100; - if ( mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) == DDHAL_DRIVER_NOTHANDLED) - { - printf("Fail to mDdUpdateOverlay = DDERR_NOTINITIALIZED\n"); - return DDERR_NOTINITIALIZED; - } - - while(TRUE); - - return DD_OK; - - -} - - diff --git a/rostests/tests/DxHalTest/main.h b/rostests/tests/DxHalTest/main.h deleted file mode 100644 index f431388ae1a..00000000000 --- a/rostests/tests/DxHalTest/main.h +++ /dev/null @@ -1,267 +0,0 @@ -#include -#include -#include - - -int StartupHAL (); -extern HDC hdc; -extern DDRAWI_DIRECTDRAW_GBL mDDrawGlobal; - extern DDRAWI_DIRECTDRAW_LCL mDDrawLocal; - extern DDHALINFO mHALInfo; - - extern DDHAL_CALLBACKS mCallbacks; - extern DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks; - extern D3DHAL_CALLBACKS mD3dCallbacks; - extern D3DHAL_GLOBALDRIVERDATA mD3dDriverData; - - extern UINT mcModeInfos; - extern DDHALMODEINFO *mpModeInfos; - - extern UINT mcvmList; - extern VIDMEM *mpvmList; - - extern UINT mcFourCC; - extern DWORD *mpFourCC; - - extern UINT mcTextures; - extern DDSURFACEDESC *mpTextures; - - - -BOOL (APIENTRY *DdCreateDirectDrawObject) ( - LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal, - HDC hdc -); - -BOOL (APIENTRY *DdQueryDirectDrawObject) ( - LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal, - LPDDHALINFO pHalInfo, - LPDDHAL_DDCALLBACKS pDDCallbacks, - LPDDHAL_DDSURFACECALLBACKS pDDSurfaceCallbacks, - LPDDHAL_DDPALETTECALLBACKS pDDPaletteCallbacks, - LPD3DHAL_CALLBACKS pD3dCallbacks, - LPD3DHAL_GLOBALDRIVERDATA pD3dDriverData, - LPDDHAL_DDEXEBUFCALLBACKS pD3dBufferCallbacks, - LPDDSURFACEDESC pD3dTextureFormats, - LPDWORD pdwFourCC, - LPVIDMEM pvmList -); - -BOOL -APIENTRY -DdDeleteDirectDrawObject( - LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal -); - -BOOL -APIENTRY -DdCreateSurfaceObject( - LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal, - BOOL bPrimarySurface -); - -BOOL -APIENTRY -DdDeleteSurfaceObject( - LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal -); - -//BOOL -//APIENTRY -//DdResetVisrgn( -// LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal, -// HWND hWnd -//); -BOOL (APIENTRY *DdResetVisrgn) ( - LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal, - HWND hWnd -); - -HDC -APIENTRY -DdGetDC( - LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal, - LPPALETTEENTRY pColorTable -); - -BOOL -APIENTRY -DdReleaseDC( - LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal -); - -HBITMAP -APIENTRY -DdCreateDIBSection( - HDC hdc, - CONST BITMAPINFO *pbmi, - UINT iUsage, - VOID **ppvBits, - HANDLE hSectionApp, - DWORD dwOffset -); - -BOOL -APIENTRY -DdReenableDirectDrawObject( - LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal, - BOOL *pbNewMode -); - -//BOOL -//APIENTRY -//DdAttachSurface( -// LPDDRAWI_DDRAWSURFACE_LCL pSurfaceFrom, -// LPDDRAWI_DDRAWSURFACE_LCL pSurfaceTo -//); - -BOOL (APIENTRY *DdAttachSurface) ( - LPDDRAWI_DDRAWSURFACE_LCL pSurfaceFrom, - LPDDRAWI_DDRAWSURFACE_LCL pSurfaceTo -); - -VOID -APIENTRY -DdUnattachSurface( - LPDDRAWI_DDRAWSURFACE_LCL pSurface, - LPDDRAWI_DDRAWSURFACE_LCL pSurfaceAttached -); - -ULONG -APIENTRY -DdQueryDisplaySettingsUniqueness(VOID); - -HANDLE -APIENTRY -DdGetDxHandle( - LPDDRAWI_DIRECTDRAW_LCL pDDraw, - LPDDRAWI_DDRAWSURFACE_LCL pSurface, - BOOL bRelease -); - -BOOL -APIENTRY -DdSetGammaRamp( - LPDDRAWI_DIRECTDRAW_LCL pDDraw, - HDC hdc, - LPVOID lpGammaRamp -); - -DWORD -APIENTRY -DdSwapTextureHandles( - LPDDRAWI_DIRECTDRAW_LCL pDDraw, - LPDDRAWI_DDRAWSURFACE_LCL pDDSLcl1, - LPDDRAWI_DDRAWSURFACE_LCL pDDSLcl2 -); - -char* DDErrorString (HRESULT hr) -{ - switch (hr) - { - case DD_OK: return "DD_OK"; - case DDERR_ALREADYINITIALIZED: return "DDERR_ALREADYINITIALIZED"; - case DDERR_CANNOTATTACHSURFACE: return "DDERR_CANNOTATTACHSURFACE"; - case DDERR_CANNOTDETACHSURFACE: return "DDERR_CANNOTDETACHSURFACE"; - case DDERR_CURRENTLYNOTAVAIL: return "DDERR_CURRENTLYNOTAVAIL"; - case DDERR_EXCEPTION: return "DDERR_EXCEPTION"; - case DDERR_GENERIC: return "DDERR_GENERIC"; - case DDERR_HEIGHTALIGN: return "DDERR_HEIGHTALIGN"; - case DDERR_INCOMPATIBLEPRIMARY: return "DDERR_INCOMPATIBLEPRIMARY"; - case DDERR_INVALIDCAPS: return "DDERR_INVALIDCAPS"; - case DDERR_INVALIDCLIPLIST: return "DDERR_INVALIDCLIPLIST"; - case DDERR_INVALIDMODE: return "DDERR_INVALIDMODE"; - case DDERR_INVALIDOBJECT: return "DDERR_INVALIDOBJECT"; - case DDERR_INVALIDPARAMS: return "DDERR_INVALIDPARAMS"; - case DDERR_INVALIDPIXELFORMAT: return "DDERR_INVALIDPIXELFORMAT"; - case DDERR_INVALIDRECT: return "DDERR_INVALIDRECT"; - case DDERR_LOCKEDSURFACES: return "DDERR_LOCKEDSURFACES"; - case DDERR_NO3D: return "DDERR_NO3D"; - case DDERR_NOALPHAHW: return "DDERR_NOALPHAHW"; - case DDERR_NOCLIPLIST: return "DDERR_NOCLIPLIST"; - case DDERR_NOCOLORCONVHW: return "DDERR_NOCOLORCONVHW"; - case DDERR_NOCOOPERATIVELEVELSET: return "DDERR_NOCOOPERATIVELEVELSET"; - case DDERR_NOCOLORKEY: return "DDERR_NOCOLORKEY"; - case DDERR_NOCOLORKEYHW: return "DDERR_NOCOLORKEYHW"; - case DDERR_NODIRECTDRAWSUPPORT: return "DDERR_NODIRECTDRAWSUPPORT"; - case DDERR_NOEXCLUSIVEMODE: return "DDERR_NOEXCLUSIVEMODE"; - case DDERR_NOFLIPHW: return "DDERR_NOFLIPHW"; - case DDERR_NOGDI: return "DDERR_NOGDI"; - case DDERR_NOMIRRORHW: return "DDERR_NOMIRRORHW"; - case DDERR_NOTFOUND: return "DDERR_NOTFOUND"; - case DDERR_NOOVERLAYHW: return "DDERR_NOOVERLAYHW"; - case DDERR_NORASTEROPHW: return "DDERR_NORASTEROPHW"; - case DDERR_NOROTATIONHW: return "DDERR_NOROTATIONHW"; - case DDERR_NOSTRETCHHW: return "DDERR_NOSTRETCHHW"; - case DDERR_NOT4BITCOLOR: return "DDERR_NOT4BITCOLOR"; - case DDERR_NOT4BITCOLORINDEX: return "DDERR_NOT4BITCOLORINDEX"; - case DDERR_NOT8BITCOLOR: return "DDERR_NOT8BITCOLOR"; - case DDERR_NOTEXTUREHW: return "DDERR_NOTEXTUREHW"; - case DDERR_NOVSYNCHW: return "DDERR_NOVSYNCHW"; - case DDERR_NOZBUFFERHW: return "DDERR_NOZBUFFERHW"; - case DDERR_NOZOVERLAYHW: return "DDERR_NOZOVERLAYHW"; - case DDERR_OUTOFCAPS: return "DDERR_OUTOFCAPS"; - case DDERR_OUTOFMEMORY: return "DDERR_OUTOFMEMORY"; - case DDERR_OUTOFVIDEOMEMORY: return "DDERR_OUTOFVIDEOMEMORY"; - case DDERR_OVERLAYCANTCLIP: return "DDERR_OVERLAYCANTCLIP"; - case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: return "DDERR_OVERLAYCOLORKEYONLYONEACTIVE"; - case DDERR_PALETTEBUSY: return "DDERR_PALETTEBUSY"; - case DDERR_COLORKEYNOTSET: return "DDERR_COLORKEYNOTSET"; - case DDERR_SURFACEALREADYATTACHED: return "DDERR_SURFACEALREADYATTACHED"; - case DDERR_SURFACEALREADYDEPENDENT: return "DDERR_SURFACEALREADYDEPENDENT"; - case DDERR_SURFACEBUSY: return "DDERR_SURFACEBUSY"; - case DDERR_CANTLOCKSURFACE: return "DDERR_CANTLOCKSURFACE"; - case DDERR_SURFACEISOBSCURED: return "DDERR_SURFACEISOBSCURED"; - case DDERR_SURFACELOST: return "DDERR_SURFACELOST"; - case DDERR_SURFACENOTATTACHED: return "DDERR_SURFACENOTATTACHED"; - case DDERR_TOOBIGHEIGHT: return "DDERR_TOOBIGHEIGHT"; - case DDERR_TOOBIGSIZE: return "DDERR_TOOBIGSIZE"; - case DDERR_TOOBIGWIDTH: return "DDERR_TOOBIGWIDTH"; - case DDERR_UNSUPPORTED: return "DDERR_UNSUPPORTED"; - case DDERR_UNSUPPORTEDFORMAT: return "DDERR_UNSUPPORTEDFORMAT"; - case DDERR_UNSUPPORTEDMASK: return "DDERR_UNSUPPORTEDMASK"; - case DDERR_VERTICALBLANKINPROGRESS: return "DDERR_VERTICALBLANKINPROGRESS"; - case DDERR_WASSTILLDRAWING: return "DDERR_WASSTILLDRAWING"; - case DDERR_XALIGN: return "DDERR_XALIGN"; - case DDERR_INVALIDDIRECTDRAWGUID: return "DDERR_INVALIDDIRECTDRAWGUID"; - case DDERR_DIRECTDRAWALREADYCREATED: return "DDERR_DIRECTDRAWALREADYCREATED"; - case DDERR_NODIRECTDRAWHW: return "DDERR_NODIRECTDRAWHW"; - case DDERR_PRIMARYSURFACEALREADYEXISTS: return "DDERR_PRIMARYSURFACEALREADYEXISTS"; - case DDERR_NOEMULATION: return "DDERR_NOEMULATION"; - case DDERR_REGIONTOOSMALL: return "DDERR_REGIONTOOSMALL"; - case DDERR_CLIPPERISUSINGHWND: return "DDERR_CLIPPERISUSINGHWND"; - case DDERR_NOCLIPPERATTACHED: return "DDERR_NOCLIPPERATTACHED"; - case DDERR_NOHWND: return "DDERR_NOHWND"; - case DDERR_HWNDSUBCLASSED: return "DDERR_HWNDSUBCLASSED"; - case DDERR_HWNDALREADYSET: return "DDERR_HWNDALREADYSET"; - case DDERR_NOPALETTEATTACHED: return "DDERR_NOPALETTEATTACHED"; - case DDERR_NOPALETTEHW: return "DDERR_NOPALETTEHW"; - case DDERR_BLTFASTCANTCLIP: return "DDERR_BLTFASTCANTCLIP"; - case DDERR_NOBLTHW: return "DDERR_NOBLTHW"; - case DDERR_NODDROPSHW: return "DDERR_NODDROPSHW"; - case DDERR_OVERLAYNOTVISIBLE: return "DDERR_OVERLAYNOTVISIBLE"; - case DDERR_NOOVERLAYDEST: return "DDERR_NOOVERLAYDEST"; - case DDERR_INVALIDPOSITION: return "DDERR_INVALIDPOSITION"; - case DDERR_NOTAOVERLAYSURFACE: return "DDERR_NOTAOVERLAYSURFACE"; - case DDERR_EXCLUSIVEMODEALREADYSET: return "DDERR_EXCLUSIVEMODEALREADYSET"; - case DDERR_NOTFLIPPABLE: return "DDERR_NOTFLIPPABLE"; - case DDERR_CANTDUPLICATE: return "DDERR_CANTDUPLICATE"; - case DDERR_NOTLOCKED: return "DDERR_NOTLOCKED"; - case DDERR_CANTCREATEDC: return "DDERR_CANTCREATEDC"; - case DDERR_NODC: return "DDERR_NODC"; - case DDERR_WRONGMODE: return "DDERR_WRONGMODE"; - case DDERR_IMPLICITLYCREATED: return "DDERR_IMPLICITLYCREATED"; - case DDERR_NOTPALETTIZED: return "DDERR_NOTPALETTIZED"; - case DDERR_UNSUPPORTEDMODE: return "DDERR_UNSUPPORTEDMODE"; - case DDERR_NOMIPMAPHW: return "DDERR_NOMIPMAPHW"; - case DDERR_INVALIDSURFACETYPE: return "DDERR_INVALIDSURFACETYPE"; - case DDERR_DCALREADYCREATED: return "DDERR_DCALREADYCREATED"; - case DDERR_CANTPAGELOCK: return "DDERR_CANTPAGELOCK"; - case DDERR_CANTPAGEUNLOCK: return "DDERR_CANTPAGEUNLOCK"; - case DDERR_NOTPAGELOCKED: return "DDERR_NOTPAGELOCKED"; - case DDERR_NOTINITIALIZED: return "DDERR_NOTINITIALIZED"; - } - - return "Unknown Error "; -} - diff --git a/rostests/tests/Imagelistviewer/imagelistviewer.rbuild b/rostests/tests/Imagelistviewer/imagelistviewer.rbuild deleted file mode 100644 index 7abf5feafd1..00000000000 --- a/rostests/tests/Imagelistviewer/imagelistviewer.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - . - kernel32 - user32 - setupapi - comctl32 - main.c - res.rc - diff --git a/rostests/tests/Imagelistviewer/main.c b/rostests/tests/Imagelistviewer/main.c deleted file mode 100644 index 043171b786f..00000000000 --- a/rostests/tests/Imagelistviewer/main.c +++ /dev/null @@ -1,145 +0,0 @@ -#include -#include -#include -#include "resource.h" - -typedef BOOL (WINAPI * SH_GIL_PROC)(HIMAGELIST *phLarge, HIMAGELIST *phSmall); -typedef BOOL (WINAPI * FII_PROC)(BOOL fFullInit); - -/*** Shell32 undoc'd functions ***/ - /* Shell_GetImageLists @71 */ - /* FileIconInit @660 */ - -BOOL -DisplayImageList(HWND hwnd, - UINT uID) -{ - HWND hLV; - SP_CLASSIMAGELIST_DATA ImageListData; - LV_ITEM lvItem; - TCHAR Buf[6]; - INT ImageListCount = -1; - INT i = 0; - - hLV = GetDlgItem(hwnd, IDC_LSTVIEW); - (void)ListView_DeleteAllItems(hLV); - - if (uID == IDC_SYSTEM) - { - HIMAGELIST hLarge, hSmall; - HMODULE hShell32; - SH_GIL_PROC Shell_GetImageLists; - FII_PROC FileIconInit; - - hShell32 = LoadLibrary(_T("shell32.dll")); - if(hShell32 == NULL) - return FALSE; - - Shell_GetImageLists = (SH_GIL_PROC)GetProcAddress(hShell32, (LPCSTR)71); - FileIconInit = (FII_PROC)GetProcAddress(hShell32, (LPCSTR)660); - - if(Shell_GetImageLists == NULL || FileIconInit == NULL) - { - FreeLibrary(hShell32); - return FALSE; - } - - FileIconInit(TRUE); - - Shell_GetImageLists(&hLarge, &hSmall); - - ImageListCount = ImageList_GetImageCount(hSmall); - - (void)ListView_SetImageList(hLV, - hSmall, - LVSIL_SMALL); - - FreeLibrary(hShell32); - } - else if (uID == IDC_DEVICE) - { - ImageListData.cbSize = sizeof(SP_CLASSIMAGELIST_DATA); - SetupDiGetClassImageList(&ImageListData); - - ImageListCount = ImageList_GetImageCount(ImageListData.ImageList); - - (void)ListView_SetImageList(hLV, - ImageListData.ImageList, - LVSIL_SMALL); - } - else - return FALSE; - - lvItem.mask = LVIF_TEXT | LVIF_IMAGE; - - while (i <= ImageListCount) - { - lvItem.iItem = i; - lvItem.iSubItem = 0; - lvItem.pszText = _itot(i, Buf, 10); - lvItem.iImage = i; - - (void)ListView_InsertItem(hLV, &lvItem); - - i++; - } - - return TRUE; -} - - -BOOL CALLBACK -DlgProc(HWND hwnd, - UINT message, - WPARAM wParam, - LPARAM lParam) -{ - switch (message) - { - case WM_INITDIALOG: - DisplayImageList(hwnd, IDC_SYSTEM); - return TRUE; - - case WM_CLOSE: - EndDialog(hwnd, 0); - return TRUE; - - case WM_COMMAND: - { - switch(LOWORD(wParam)) - { - case IDOK: - EndDialog(hwnd, 0); - return TRUE; - - case IDC_SYSTEM: - DisplayImageList(hwnd, IDC_SYSTEM); - return TRUE; - - case IDC_DEVICE: - DisplayImageList(hwnd, IDC_DEVICE); - return TRUE; - } - } - } - - return FALSE; -} - -int WINAPI -WinMain(HINSTANCE hThisInstance, - HINSTANCE hPrevInstance, - LPSTR lpszArgument, - int nCmdShow) -{ - INITCOMMONCONTROLSEX icex; - - icex.dwSize = sizeof(INITCOMMONCONTROLSEX); - icex.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES; - InitCommonControlsEx(&icex); - - return DialogBox(hThisInstance, - MAKEINTRESOURCE(IDD_IMGLST), - NULL, - (DLGPROC)DlgProc); -} diff --git a/rostests/tests/Imagelistviewer/res.rc b/rostests/tests/Imagelistviewer/res.rc deleted file mode 100644 index 5a56f984e6e..00000000000 --- a/rostests/tests/Imagelistviewer/res.rc +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include "resource.h" - -IDD_IMGLST DIALOGEX 6,6,303,216 -CAPTION "Imagelist Viewer" -FONT 8, "MS Sans Serif", 0, 0 -STYLE WS_BORDER | WS_VISIBLE | WS_SYSMENU -BEGIN - CONTROL "", IDC_LSTVIEW, "SysListView32", WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_LIST | LVS_SMALLICON | LVS_SHAREIMAGELISTS, 0, 0, 302, 200 - DEFPUSHBUTTON "System IL", IDC_SYSTEM, 2, 202, 54, 13 - PUSHBUTTON "Device IL", IDC_DEVICE, 60, 202, 54, 13 - PUSHBUTTON "Close", IDOK, 248, 202, 54, 13 -END diff --git a/rostests/tests/Imagelistviewer/resource.h b/rostests/tests/Imagelistviewer/resource.h deleted file mode 100644 index 6875d1deb5a..00000000000 --- a/rostests/tests/Imagelistviewer/resource.h +++ /dev/null @@ -1,4 +0,0 @@ -#define IDD_IMGLST 1000 -#define IDC_LSTVIEW 1001 -#define IDC_SYSTEM 1002 -#define IDC_DEVICE 1003 diff --git a/rostests/tests/README.txt b/rostests/tests/README.txt deleted file mode 100644 index 86aa8cae584..00000000000 --- a/rostests/tests/README.txt +++ /dev/null @@ -1,4 +0,0 @@ -This folder contains tests that are not merged in to -the new regression testing system. - -Please DO NOT add new tests here. \ No newline at end of file diff --git a/rostests/tests/accelerator/accelerator.c b/rostests/tests/accelerator/accelerator.c deleted file mode 100644 index 590cfe81880..00000000000 --- a/rostests/tests/accelerator/accelerator.c +++ /dev/null @@ -1,165 +0,0 @@ -#include -#include -#include - -#define ID_ACCEL1 0x100 -#define ID_ACCEL2 0x101 -#define ID_ACCEL3 0x102 -#define ID_ACCEL4 0x103 - -#ifndef VK_A -#define VK_A 0x41 -#endif - -/* - * {fVirt, key, cmd} - * fVirt |= FVIRTKEY | FCONTROL | FALT | FSHIFT - */ -//static HFONT tf; -static ACCEL Accelerators[4] = { - { FVIRTKEY, VK_A, ID_ACCEL1}, - { FVIRTKEY | FSHIFT, VK_A, ID_ACCEL2}, - { FVIRTKEY | FCONTROL, VK_A, ID_ACCEL3}, - { FVIRTKEY | FALT, VK_A, ID_ACCEL4}}; -static HACCEL hAcceleratorTable; -static char Event[200]; - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = "AcceleratorTest"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("AcceleratorTest", - "Accelerator Test", - WS_OVERLAPPEDWINDOW, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - /*tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons");*/ - - Event[0] = 0; - - ShowWindow(hWnd, nCmdShow); - - hAcceleratorTable = CreateAcceleratorTable(Accelerators, - sizeof(Accelerators)/sizeof(Accelerators[1])); - if (hAcceleratorTable == NULL) - { - fprintf(stderr, "CreateAcceleratorTable failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - while(GetMessage(&msg, NULL, 0, 0)) - { - if (!TranslateAccelerator(hWnd, hAcceleratorTable, &msg)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - - if (!DestroyAcceleratorTable(hAcceleratorTable)) - { - fprintf(stderr, "DestroyAcceleratorTable failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - //DeleteObject(tf); - - return msg.wParam; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - char buf[200]; - - switch(msg) - { - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - //SelectObject(hDC, tf); - sprintf(buf, "Event: '%s'", Event); - TextOut(hDC, 10, 10, buf, strlen(buf)); - EndPaint(hWnd, &ps); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - case WM_COMMAND: - - switch (LOWORD(wParam)) - { - case ID_ACCEL1: - strcpy(Event, "A"); - break; - - case ID_ACCEL2: - strcpy(Event, "SHIFT+A"); - break; - - case ID_ACCEL3: - strcpy(Event, "CTRL+A"); - break; - - case ID_ACCEL4: - strcpy(Event, "ALT+A"); - break; - - default: - sprintf(Event, "%d", LOWORD(wParam)); - break; - } - - InvalidateRect(hWnd, NULL, TRUE); - UpdateWindow(hWnd); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/accelerator/accelerator.rbuild b/rostests/tests/accelerator/accelerator.rbuild deleted file mode 100644 index 370a2576d72..00000000000 --- a/rostests/tests/accelerator/accelerator.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - accelerator.c - diff --git a/rostests/tests/alive/alive.c b/rostests/tests/alive/alive.c deleted file mode 100644 index 5c99760069d..00000000000 --- a/rostests/tests/alive/alive.c +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id$ - * - */ -#include -#include - -HANDLE StandardOutput = INVALID_HANDLE_VALUE; -CHAR Message [80]; -DWORD CharactersToWrite = 0; -DWORD WrittenCharacters = 0; -INT d = 0, h = 0, m = 0, s = 0; - -int -main (int argc, char * argv []) -{ - StandardOutput = GetStdHandle (STD_OUTPUT_HANDLE); - if (INVALID_HANDLE_VALUE == StandardOutput) - { - return (EXIT_FAILURE); - } - while (TRUE) - { - /* Prepare the message and update it */ - CharactersToWrite = - wsprintf ( - Message, - "Alive for %dd %dh %d' %d\" \r", - d, h, m, s - ); - WriteConsole ( - StandardOutput, - Message, - CharactersToWrite, - & WrittenCharacters, - NULL - ); - /* suspend the execution for 1s */ - Sleep (1000); - /* increment seconds */ - ++ s; - if (60 == s) { s = 0; ++ m; } - if (60 == m) { m = 0; ++ h; } - if (24 == h) { h = 0; ++ d; } - } - return (EXIT_SUCCESS); -} - -/* EOF */ diff --git a/rostests/tests/alive/alive.rbuild b/rostests/tests/alive/alive.rbuild deleted file mode 100644 index 8a7c2a3020c..00000000000 --- a/rostests/tests/alive/alive.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - alive.c - diff --git a/rostests/tests/alphablend/alphablend.c b/rostests/tests/alphablend/alphablend.c deleted file mode 100644 index aea5d40e6b6..00000000000 --- a/rostests/tests/alphablend/alphablend.c +++ /dev/null @@ -1,212 +0,0 @@ -#include -#include - -BOOL WINAPI GdiAlphaBlend(HDC hdcDst, int xDst, int yDst, int widthDst, int heightDst, - HDC hdcSrc, int xSrc, int ySrc, int widthSrc, int heightSrc, - BLENDFUNCTION blendFunction); - -#ifndef AC_SRC_ALPHA -#define AC_SRC_ALPHA (0x1) -#endif - -HINSTANCE HInst; -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam); - -int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, - LPTSTR lpCmdLine, int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - - HInst = HInstance; - - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = HInstance; - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - /* wc.hbrBackground = reinterpret_cast(COLOR_BTNFACE + 1); */ - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.lpszClassName = WndClassName; - - if (RegisterClass(&wc)) - { - HWND HWnd = - CreateWindow( - WndClassName, TEXT("AlphaBlend Rendering Demo"), - WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | - WS_VISIBLE | WS_CLIPSIBLINGS, - 0, 0, 320, 430, - NULL, NULL, HInst, NULL - ); - - if (HWnd) - { - ShowWindow(HWnd, nCmdShow); - UpdateWindow(HWnd); - - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} - -/* image related */ -BITMAP bmp; -LPCSTR filename = TEXT("lena.bmp"); -HDC HMemDC = NULL, HMemDC2 = NULL; -HBITMAP HOldBmp = NULL; -PVOID pBmpBits = NULL; -HBITMAP H32BppBitmap = NULL; -BITMAPINFO bmpi; - -BOOL ConvertBitmapTo32Bpp(HDC hDC, BITMAP *bmp) -{ - ZeroMemory(&bmpi, sizeof(BITMAPINFO)); - bmpi.bmiHeader.biSize = sizeof(BITMAPINFO); - bmpi.bmiHeader.biWidth = bmp->bmWidth; - bmpi.bmiHeader.biHeight = bmp->bmHeight; - bmpi.bmiHeader.biPlanes = 1; - bmpi.bmiHeader.biBitCount = 32; - bmpi.bmiHeader.biCompression = BI_RGB; - bmpi.bmiHeader.biSizeImage = 4 * bmpi.bmiHeader.biWidth * bmpi.bmiHeader.biHeight; - H32BppBitmap = CreateDIBSection(hDC, &bmpi, DIB_RGB_COLORS, &pBmpBits, 0, 0); - if(H32BppBitmap) - { - HBITMAP bmpalpha; - SelectObject(hDC, H32BppBitmap); - BitBlt(hDC, 0, 0, bmp->bmWidth, bmp->bmHeight, HMemDC, 0, 0, SRCCOPY); - - /* load and apply alpha channel */ - bmpalpha = LoadImage(HInst, MAKEINTRESOURCE(2000), IMAGE_BITMAP, - 0, 0, 0); - if(bmpalpha) - { - COLORREF *col = pBmpBits; - int x, y; - HDC hdcTemp = CreateCompatibleDC(NULL); - if(!hdcTemp) - { - DeleteObject(bmpalpha); - return FALSE; - } - SelectObject(hdcTemp, bmpalpha); - - for(y = 0; y < bmp->bmHeight; y++) - { - for(x = 0; x < bmp->bmWidth; x++) - { - COLORREF Color = (COLORREF)GetRValue(GetPixel(hdcTemp, x, y)) << 24; - *col++ |= Color; - } - } - - DeleteObject(bmpalpha); - DeleteDC(hdcTemp); - return TRUE; - } - return FALSE; - } - return FALSE; -} - -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam) -{ - switch (Msg) - { - case WM_CREATE: - { - /* create a memory DC */ - HMemDC = CreateCompatibleDC(NULL); - if (HMemDC) - { - /* load a bitmap from file */ - HBITMAP HBmp = - /* static_cast */( - LoadImage(HInst, MAKEINTRESOURCE(1000), IMAGE_BITMAP, - 0, 0, 0) - ); - if (HBmp) - { - /* extract dimensions of the bitmap */ - GetObject(HBmp, sizeof(BITMAP), &bmp); - - /* associate the bitmap with the memory DC */ - /* HOldBmp = static_cast */ - (SelectObject(HMemDC, HBmp) - ); - HMemDC2 = CreateCompatibleDC(NULL); - if(!ConvertBitmapTo32Bpp(HMemDC2, &bmp)) - { - PostQuitMessage(0); - return 0; - } - } - } - } - case WM_PAINT: - { - PAINTSTRUCT ps; - BLENDFUNCTION BlendFunc; - HDC Hdc = BeginPaint(HWnd, &ps); -#if 0 - try -#endif - { - - BlendFunc.BlendOp = AC_SRC_OVER; - BlendFunc.BlendFlags = 0; - BlendFunc.SourceConstantAlpha = 128; - BlendFunc.AlphaFormat = 0; - - BitBlt(Hdc, 100, 90, - bmp.bmWidth, bmp.bmHeight, - HMemDC2, 0, 0, - SRCCOPY); - GdiAlphaBlend(Hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, - HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight, - BlendFunc); - GdiAlphaBlend(Hdc, bmp.bmWidth - 15, 10, bmp.bmWidth / 2, bmp.bmHeight / 2, - HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight, - BlendFunc); - - BlendFunc.SourceConstantAlpha = 255; - BlendFunc.AlphaFormat = AC_SRC_ALPHA; - - GdiAlphaBlend(Hdc, 140, 200, bmp.bmWidth, bmp.bmHeight, - HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight, - BlendFunc); - GdiAlphaBlend(Hdc, 20, 210, (bmp.bmWidth / 3) * 2, (bmp.bmHeight / 3) * 2, - HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight, - BlendFunc); - } -#if 0 - catch (...) - { - EndPaint(HWnd, &ps); - } -#endif - EndPaint(HWnd, &ps); - break; - } - case WM_DESTROY: - { - /* clean up */ - DeleteObject(SelectObject(HMemDC, HOldBmp)); - DeleteDC(HMemDC); - DeleteDC(HMemDC2); - - PostQuitMessage(0); - return 0; - } - } - return DefWindowProc(HWnd, Msg, WParam, LParam); -} diff --git a/rostests/tests/alphablend/alphablend.rbuild b/rostests/tests/alphablend/alphablend.rbuild deleted file mode 100644 index 180b301b928..00000000000 --- a/rostests/tests/alphablend/alphablend.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - . - kernel32 - user32 - gdi32 - alphablend.c - alphablend.rc - diff --git a/rostests/tests/alphablend/alphablend.rc b/rostests/tests/alphablend/alphablend.rc deleted file mode 100644 index b51fd156496..00000000000 --- a/rostests/tests/alphablend/alphablend.rc +++ /dev/null @@ -1,3 +0,0 @@ - -1000 BITMAP MOVEABLE PURE "lena.bmp" -2000 BITMAP MOVEABLE PURE "lenaalpha.bmp" diff --git a/rostests/tests/alphablend/lena.bmp b/rostests/tests/alphablend/lena.bmp deleted file mode 100644 index e9916963852a9748baf1b9ac6093fb3b9179dbbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89322 zcma&vKawKP@-6s!8<;{I4aBE`G%DEWW8?zHjNC!81K0uV0Q9jj5Jsnj(W`b)EkC7u z2R)zTkx*23-}jro@#QATpUMnBas0T4NASP@AOGY3{BJM$_rLk?zx(h1^56gMzyJ2~ zzj}Om`G36r|Nbv8^iTRl^JZ=GI$bT-i}|u!d0Z^#%T3qMr@m;u znlBH-cC}cp{cpb94ZHnzKb_3Hc|KdbzD{!ivt>2kznnWiUrr`Ix}MEe_w%mP`EIt@ z%~$({wmvRaCvDlC=BtCRs#mwm^>MX1uR86r+PLMb$3L2ry5iohOK-ckyt7Z!UF-gq zHr(`{KHNODe)rz*--rFj_VBSge(X=52ko48JpVXdTKjpr{5)NMp05smc)Y#;?uX-a z-gm>b8!n6WuIu+*e^~d&?yGrvSZ~I*8V~mC&2H80)}6=wsyi$@w|QD_PV@C~>3+Aj zHM<`^kJq0K16?ri-t9jc05*$( z1%sgR^>sFx%)C0Atv8#!$3n$o;si9!*VFj`NAvZLt(Pm^s2`5=)o~H!zaQFm(-SM+wfc5X~vtTfq{(*tFkKY0I zyl1|3e`eoqII{TN(9Q15U9CTWM=YMFyEGWcBMj_eU{P%~T!!Q4aQe|5K6+Pj`B4~n z-|RkIr`Bz6kAwB#mM^`(zTQ^PvuRrOe+~?1$8B_b%2JLOdVaQQW0rl}$-C{wZ-575 zA4pg{%+L@rVU^|3^&2qQ^xble2fB5?T&!#C&tTx?Wipxg#L~fRzM0N8^Z91GzjeUB z?&tH6z%=*_Khyz3Zy0*P=<9Px00z4Ae0`cNdepI8Zk8+k0~-PSx&wnt2%*?u9QbAT z=i?CuHSq5YF!Deb5*VqVVDKIWs5b218wot|KrryI{;|e>o?b%&m$%=}yu7?Fmi>Bj zS@q{O-n;&^8OBln82%#+I@W)@6w_A=AuPMYVtrWk0l@b1b9epKpMPwQKX#Xq2Vj8p zHFmEC&j5c}bm#SI-}i?i*s|bbbl12x29f-F)xiMkFza%@X0_#fWtbOWJT{|z15dCq zft3}HFf(SWVViBg-EViBRkz*reb+DZY8Yd+1g%BBdD(9^yM8!z-OhzASN(2#SmeBG zSUwuihOfdK2K%r;{wprv6ds77&rVLJ%jKe5u295zQB=RK$L18q;a{BZc*H>Yi)SkM zasi_k2mtgUBK?Me0>Cyr5E2Lv+(}@>!1X7KJANR6BiIb*U|_*d76vwZXorEggD+b@ zj*AVR&VR>1sKAA7Pe1q9-@EJY;rw%R`mt?1!29n|LF0iE1609qgK#_m1ItCPGufJn z8KQWAXAdMEoWQ2q>+6J>3|_}~{osYwVqt{Vo9k2U%`EG{tG*Kkmh;61bM;$P&||S- zJ8YsufMf_T_8iCMbUhy~kkfTrULb_tkuRr_KXMg-L zoXZ!C7ytvR021EGgJ58|!9dp?m&-wiXH2ybO}W7X3NLpMRFsQnBZRP=QF0xt#ORZU z2yE|Xk^86O3xa_~zIILz001vQBCeM!Fxd73kH8&lhg~qB6L0V9`RXPAe6R0c#^cBO z;fiMr6azT#qy~OquwAWBgdcMg13bcFxtmTS7#0-o>Nt-Wh!<#&&m;Yt{QCm{o<0O& zlY-RXvmpG_5q!r$0Pv*)BLk|PuRpGDzqFT0+$(WQ4-l>efM6gd?*AhO?!eeLB@jnI z4s|dv|mi5O#pu&M-004*{h^!J6JOSWu9*7!zVBm5mfl(5K1a^nZ%Zu(^==@bw{UzZ* zG$9OltoAP|cwpem7u+$x9c+)EhuiP{?H5(R9cTtsjeUCHfq{?0z#D`c9h?4aq)aLh zXasBUHv5)M1Bo)hIO@0EFmywEPvlx(`a0e34hUgw3;OnBhqegeW%GXY1eN!Loj1g8(40K!pP$g7@K&sBl|R;g=W~9YNUO zLIjQ^@CzZlfBYtOUS5K8H@eyc10D+l#Q27#OI;ZjW{2mrBTmz%hA5U`U{>Tx{TKU#FX8w;x1v;Q<(+ z1ZV~y$!G8RgnWuGC-LS<0!Rh0tl`fKEDHv50(iig)BXS(Gy}Kt`ZB=`!*)j|=@ws} zZ(eNX-1@950Jy400}Ra2@ag1Agf(046BVwGBL=2%BC92}uv>JrV#7cH&@k|fgytRo z=7cXz*usH7asmkn$Fx8N1x*l^7`PCDCz_=UytIGwJi6RLE>&-{gf>%-{5#$Vw;EK=Ga7%1!C+2AQPG^Pat zgL_o?FAOv_c=>U;Vt`*@00W2P4GHKdU8LWZ>wW&v=F|lP5)p&>%{H-8q6!RB*ZdyxgJ&XY-E#Ef@nTQP>OXk|~NBqz~l@?-*!=5ON3=G%@f1 zL&-vSy~P6y?tn1x+1+g$H7GXx`NRXw^xrUm_hyvRdVjinaJzc4>=+uak<~Cz-9C=B zAi;lYp_}B7QQ8uQO*&4A|BjV8eUH36{%7%(Eb+R-{K3F%*>MXlbl5{44A2S7#d@{u z03aCXpyIgSoduz}7^aRLSM$ma!9ZPDE+go0GQd~{8>I{diCn)_bOHhSfk|FUnrOLi z7$BP$1%|RdR7lOW@g593TEfOZF+dDFM+B5W>47+cz~HV2K4BorysRHz&|-mL;Kvyi z+~Npy_{$3<=i&oYJh0qswyuHogMo;{KQK@L_y-0y4=TU|fx(1QCLl0*rZLLykbw__#j|!(Id@RoHI^c-Rhy zdlo&-gjXSR7n4UeZJbaTc=UW;!V<)Qct7Uml*1nE!P6VdKIYVlI|xNoo)8%L1xldA z;fnVM1E`Q30K3C>-*0w$gCP9%gMytN<%pL3OA;1yT)-F9U~vu5*si25qc9L)z(B4% z0f)a++W3@&;c`gK7%dTBfE08egzJM;Vqo@Teb(1V#+RDLnDOJs!L(fiWU@ z%Oueu4DbgDGz>I%Fh+>Q2J%85KYo*5Nq|Jatm@W+0XI7AZZII_Tkast|5rOac;G8_ zOeHova0lz{nlF$nN`P=AffjggbN&khqcDI02_pTl+g<0g4h}Pv47_;uVBy~38R?A{ z8Y(=t0iHJ@0oOl?cZe{c2^}x_{*EtbAb|nqfeNYs7044x1Uv3KXy6Wp#bPb7KWw(= zqpO`VD)xK?Gp|AhNI|0RVu3CK!Bs|D}T~9p}Q9@>dyp^Rr z!~+csUl@ol2oE$E>|lvI04jdrfq@njBs)|QVlW^8*<9Yo=#lkda>wN zLdARDpmK)Cv7DgQ5{!Z20|xD&s36vFtsFtc0uKRDV&LuzLIUA|F(|kQ4PyG%Dk=1{ z%P5=F@ORmI8%kYpVZhWmN=MG!aU(W-)`WK$L=W8Kg3%X55H=aG;|1zV2^;&A3gEh^1#d8Y3;?U;Ec2t48_a~!zLyq02re+s`FK6-PSrWf%n?YP8(J`cOPT3XXA2%@)ZH z1rN*3ZMr;l^Zs!Dn2}8L&8yKqU%XB;W5n%}c&uzrM_P{`r|VFy`5lI4V%pCzhZb?% zTJ+ZqGj#DXA@3y+V!ddCqzB!wq|jz9OCTvEMcDVN)h3xzPG@yJ-HHuf_uGTh{%E{p zqW)aKa?#DEp2p~{HD}ZqX*?Oucga4I!L?X!5JJHQunEF}CKNNWyB@}Vq*o-9e6p$Y za{Z5}@CyJX6umm?0UEmqVc5S(#-{Bh1b)Z~IBo?4`{R$p>F43}!3*rqKM$8*&YK>3 z`}n!(F@Q8cf|MHjF3$xA1I1l(BN&r9W)y%lM2?9L*xlnO2JTAW9uX80iUdjn$j3(v ztlVtxmWBKLpZ)HKfip>WGvFfjuK)oI!uAxJ zS)5Gz#GvKeg?SqU?hR9pV492&+UM(s8uFfc2@+BFluG4eM^(ZCGk0iGMgH zNjRDJN=0_Z9HW0;GLk+XAs849`oKUt@P_e>g9He746u6%tw18tA`B#86g2S&VS^B0 zO)V7+gyfgVgTGpX2d4=JW{6raxIH8#XkH)(9-9nkH3Mh9pa4+C1CB459Q?6LZHyap zwdl0>hydgME|U^u$r&=h9RraKW(14|1I2zk z!WRZoEv6a%VE}TWr2-ZB_t4GP#)hXL$)vg1qdOK;0V|!s&9eG6$fS#fnAaS#TzaB@7FUp zFkiT$30c3V9TxNfJSaRJk$;cc(JCA@SLmciL#eXC zKWJWe)O1d+yduFT48XaY4GC!J;n{k-e>X6V_m(2KD?nEZ41C#cd>oSiv3ps+kM-44 zRU5w$Ap{$mj(uq*PdF{KHj=>Atqr@k^X1oUagJ7Tg_GrEKHHyu#|`WKVt7`Ty9+3C z7YqOI%vx#L)M$?wn7cRAGrPS<4G&}*$Q+cit>bCCF&8jRXt3l6xazg!FwMYCm@|?g zWINR($HUQJDd5Gp(Sb?vH4LP$?i%132IDc9XoZ}H0pAcHl}}4hAnHj;VTOF^0oIQ% z2n>`LW_Bh37%`Bs{|yYG2+jp!PXj`{uUG4ia%}-; zc)*Ot&_tktQU@E}DhJ*$U2gYpMb7&MgAoj2g95;4`m(H1Z$4B3RmT3txb(=IWSTX{ z^)wTv-mt!7KxotQ19;#aDqy<}gtzO*didd*IV6>09w$?Z&Oh#epl=Y3=$e}+s=`0k zZ${znJKks`@k`@%l74g}TEGU*lL5!wZdD|J^E;rV6lexT=4!=XQ&9~t=Kw$)SgD3& zp7DTgVbJISPO2R{ESKsH-`X<)ox znO4$W0&}(fEn6GIFHrYD!7u?62LsqWOvN;M82hi9j{pO2pbw4ujUaQ_cFUDB-X{6K zk~)|zoK!)IAJ#NkWe9~8%OzxTAN$+ocHHi!uk=JDfzSH?h5=Mi7y!vH4E$mJ_Oy{e z1zZJy27`Q+3+8G!=9DvU7#VQNkgr5>!9Z^Z6=`t|4FJ~;^Cwuy@Yf(AJkZ?1HW=8A z7_f-oLxr$uAQQnLPuRGxN$vq$4WnSS=m-zQ7r+2tP$41yU%~cb9t;3O@$do%66Z0U zoel?&TcvW~u<0p(2oXAn2-G9tA7A1Px@=O+^Bn{Jq`uOJW0yK^eOr$?uI^pJK(WLF z20A|&2oES8$b5mp6&Q3fz?B&o^8>~Fv32|cbB`EkNFbS-^_eD;V0()rsA8c?{(PDP zpQIB0Re&7Z=Z@WXt|wPG>Q!KH{mTai97OXZGl04`U=YduIvaKop8^2|4>7l7R~=;d zgF%E1zm|jXxPn0zmn3X+MubGILCDiCOAod}hVa0>a$ux_$DC1O!&A+#tg6v42vdncLFH^%uMgYp zcG!Bl-wfB|`5+%iFuzU{6x8?Ez{wviZ*IuwA`wTruG!sRZ14R3m{%K4>Vr9Mf>8J( zF>bp}x z)yXp}TH952Xy1&^?p2EHX|)O)3mC~B{|5|=HKi%2UhP~%Ze+@H_k8i>wNcsJl_v%S zgV7y?5M<|=Lv!bI$zk~~^};n_)!`atrv=6^^|Ti25rJ zrg~7*crRZ4;(6+h{nQ<}Jn}o0G?pPTB+-6e9<2WS?*2UZU*0F-{p3%KZ zEeHq5KWB1MM`wy~vrH;!z;d--Y^OK47}AMx7m=4nkB=Ipp&d_04BY*D!$2HRjkxcR z)x#P1%>#D2D$+(GuUhL zs2Td$j;%*)V?PVi9>+xs1&{hv^9XqagZP3!05DD)B~RG&z>b$JNW4*F%n*YD*NB0KW6hiY0f0McR6lz|Fwl&CKMt@fj2f~uHN*dW4+=~i7}S(M z(<>Dy3{+Zp*nRZd_h0}LSRW@0RKdH9$|j!T+$qR67xUWKuYvG>7b7Rc^mV~G(7oR< zVBW1L%e7V5=qYzR#{+}Kl>;|~3Tm)hbCmW4gF6xeiSa#8?x5HJ3|N0`_~fAnYWDCw zlLZf7P#B0W&`aq$$)D|Nx#baDVKKw1cp&!@#|;F90Y1V3yHkBU{(1=nV*g%*2m`#p z#!Lc)m_(jT`;B8OiQW{9Ot=}L!=itC`%pAdb4I+(oMUZN;14_ob^7h!!@uDned{{E z-k&}%3>2a1+uT=zXx87hxWEi@6_MVppT#D@z!wR?KurIhnt}U)aNyBc2LLo)8^BA_ zr0X(1a={~popDEBkEw?-D|6?82L>unSge(4qlN)I;IFi@(gMH;gJ$&ab}yWa^GczG zVvjEXK*AFSQc{=zp{+A&Yt5nuPK)J!HtQ-yuf}V?TnupscOIw%jGYl0!|U{gkrhZp z56l;*-Ja~<7~2TJcToofVUo#94UOQ0Zbf65E+H7ylgJS(u6|$dJ`^VFL&KioVJcJ* zU+^$-x^x`-kAu8Az9B$u7#NAy({&B2jD4jm0Khe6_*X4i0FYDw00aY#1oGJ20XEot z%@U%85d%>LXd#jN7$-)volu8TRRqrTE~EMf5+0Z5WMSaWR8JV-FuVGQffh#~H1PC0 z2Ixjq`z{3=9ts<=ep3r28Vd#y5|NR29(e!q2!Hax4hFbRvoqV_)O>;A z9|1t-%~$IcmT+tA59HH`f2U0^7~`w;?Rcd6Omx9L0BEbZyzojYcrg`JtOi-Hg<0vD zIR*THUbfrg_3}QPf14(gA4otFl8Gw#GWtlQ>C$v&Vc@BU!vL-2QVF1YR zFB!kD3Zmn3B}X?<2C8*YBjW^qmnsDbVZqC4l_1)f}D!bd9 zBUB0lP+WxXMgq}1e#1a`Ah98E5>3eufX#@3;C2=ahzsPP$`=F!lwoEM8|T9Sk5EXs zV*?2^ijefU69NfQrhoDUhX)46S>sSa-Bf==gDpQW3#Um7Z??lxZQ&y8H+PIxH#k!d zkStbi%}m0S=3nUcN#X)tz(OI@!N8%@RR?)hnutwhd=P?(@Qo-zVsqwW{aV6&zT54u zTPq4pGMslD;U}BTA0cT8KQn1~Egm&G?qG3QH0tONqSa0$T1H8{Evq-5qub0|m7AXfO zccFN!Y7>tKEkNqNFi>8=YNIST!U@51swiwN?mj!}ClpIY0>{QD81W-lQaArTnB0QaZR^C?Cm7NCqb?mpeJA%jF&X46D=a z*Nd7T*os3nSdhQ==*eZE*lgW8bA0-Qfl>wfv)q~f1jfNMHNO-RsPv%lziP>d`O`=O zv3pD$B~XtK0Nk_3&~j3VYEo;q*k^N_d+hDWn7A%GobU_)S3ZV0rp56< zr3V`iRB9+NPMlbnfq}k1N)-lmqv~kG-0*i03=}7{lTR>s=z+5P_sWxiq47XlYt~@k zm@p{Cd&6c%y{V$uHp6;zJiIqI+O4<61BR{@B^z0+<`Hn5GbWCM0Sr>>#gP2A&+1VK zfrq6*XgT?I@0~*ysG2MoPN(a(KTj9OZoU6}|9G7av( zu=wV)JxPLuHoyx2r9w|4s*wb0_=hM)U_9{vNZbq0T5bUbYTz6DqabXl;}k_?wdrxA z#BMRfmnD1CDNXGAv(Y3*fC>yu^&7|mz?33bsv{x`VZfP?;9|iY4C@Vb#7C@BC&2EK z2AMd>?ej7QWM-Bqg4^rjvRa*feEeV?EIM6pRo#Q7dNcxKGV{-;(kFFEc`PXAOtrB~ z<4*~~ba*hp*Hlu7zM=z1{x^{|>cCVD6$3;Gq#6FTHxV9Cx^uJUj(32HB+V>D%JO8s zGVfV;Z`!7R*Sh{Ki`KoWWzso%GL>noo%JkrdCwS#%Ke4`*O^iO7Y1~GVPKGj-p2J5 z1_Fi*{4Wv+0~9dsNEn^M7$oM+vHqjQ9eDbMfeH#59+LQqgS#wO2ZGKL0}KEIA=24q z7%mdJ0)(WFo1ru0n=qS`ZaFFAL6uSS^SR02&T7F|_m-$oPyh+5L>4QOZzE#xMVsUa zm;L)}{We`5HmmLB@-bcXFT~qwdq`2%Pt!@0LGP~BS)sGZxfMKayhLV!OopzGE;uy~+hpsN(zM!F+1Amnf0KbihfJZvD3Nul&W ziGd7f4B&idAq$b1*!M*gun!Ce zv^BsRXoG<;z$S^onkR~P2s0pC?+k(Lb{Cb;BL;Gjgu!{l02ow^P)08?Q10N%*3Bt= zk-&ou!UIMAS!9` zfUDExmsAs3aEC!Tf>8a4hwwlnfsFc$BmLGG0E*JR6Mo)0=?Fjqt{?O}G662EjnQ*aHJ#@W4RO zqSHhmd$ME?16eVOlp+i9Kyw7~3zZ-E3j-qnoc|j8&#oaD7;A?T5;kR+*l^sV@>Fqj zpDUcI@-hUrYJ}(W%=ve#fzdgA+&Jzg}|GIy^KoQP6;}J__u#<&d?+ug8 z1EsWas1*m(*B4*at#Bj;yjt*jl*QN1rL2F!omsD+0Gh`5LXDw1;?_2?#5S*0R#~c8y*;M z#5+~i>9~z?VXcsezLWp}fNNo33=AU`9(v$0_D4zZV1s8WC{#2Iuz1xKH(yZ8&F=e@ z%A*?l8BL+ne!IOe$82W4cfYZMmG+b8o@d{Hq=o{CSef-1v>x*m28?}g@XkOY5^)L% z*Z@UjE#a%!NB2NQ?(}%LsXbv|QzUW)-B#~yL?wD=ceu`0CxFS^LP81`!`$h{c94_t zr-gxBOkuz(V|k%DF_3)V7X}dB9Ro43!BvJXFc1Sx{0Az<3?&tiaCrEZ#9$udG)F`g zv{Yv1WOwnZX$2_)mgC%5uPwmDT04u;K>&}Q$gd0rU}1zV8lQrKXYp}3U-kJ$q#f0SuV$}05Cu&Q1W<~ zp_#S6FDP>+=0*U81jp-$!&o0Y0s!Z$f`|)PGvPRkcz&I79ejOm)|eF~!Jb){|f^#E-z4y zpzu&n%kE|IN6M%PMUTON$)l<&S4V1Ho@Vbs(#5KxR$8poBx@F`P`UCgwYR_*31pb# zOBWpVR7yZ^Hw?Jh!gi7aqH;U&tm7*OOrBEbCk!-6@E>^KI|iERACKQKfC}FJ(1evM z-m^tvV3S0_e6!im?HJq2!R^vD8@t(0W+Uwr!B!0bIEcVt1VgyOpiNaFR4|4mW$Vor z4AvbIATn!LkeLp7jp|!31ra72vk%YVu)m(KLdC7f&c$rjo89T>>q`KWUV_82c-g&S zVD-QN6|qhY?Y1I`FxqwWlZg2x<^(*#d!)%@xa`tn%(O$ z!^#nTQX7^_d+=am%15bJ&6UR>&5D*m)z<^S#w0Xa@YgB*E7A1?An}1&x z44Av`$;Gab18jJSnbxaytiMXl*fOM{mMqC4EpsJsf=mEpb*MQqj1lt@jovuaN?Qw& zk0+gZOu`Tsbz3X-3;{4$rm!T)xwi&@FAU%l5dj{M(yyRETA(6=27rcvhuz168v9KD z)QtC*Hu)liki$q3+ub`Cz!8KKj-SWV2R5)=E0SQ$5}*P`r0r?NTwX8$sA(`e&Gb~76uY0{(*sW0{}4G@$el6&tQm8sXXCddf-u8UcMka5TzG`Pi{5K?_ZaeLvOE750BWSO{@cAp3O<_mH)de#qisL!@Uyw>jz3OTmK6rT z=8l02N8nFGLV9x4FkC=jaHp?`nSwL`Gz^r~A%;~D*;1@9;HA+Q{Qt$k=^iFHxF0|B zK&>#!+;KLi`q=Ep330w4`}Ww$t?_`25CGJe5)>?!hsAto)NQbH1T~hk`j{`bbqo^F zg#Rmg&{r(i6rkgcl*;bF9ncT6xc)%sm4nIB-FFz6*oT(&ad-ld*=v}>XZw7j-&x0J zXDzb90=T^`)82o-yujPbodh18nIVRwh!$JYmB`$+%m6Foz8=Yer?{X7buci(pzM1$ z{fGgjBRTWL4>iBQp(w-5WC$IXp4L$OA1iaCZlMK`vWT z^dgiN+X_{TccB^d@?~tHLZ(YyS#O*wAfybnH7B2h%*tW}Bc0xZie)L7S3xoR1e2DG1u#> z%kx1)CK$-DLP~k+vRv)JeT)lBD`Rty1qed?Jn}$u{eO_a!xxknXuco=KNv8t6q_2? zSH&_ld34ib0zkE1`@FOxa1l_snv>>*qU)Hv9Y}IvmdbIMCkP{mUik;6GPm+X}=ok@NAYTU2jf2Oa{v-&| z5Ws{;&{y1tx&l?!fx-T|KVD_&lSo7q$-2y{KQpX6b=j40aOGPuPL07};7Jyi4EO^B z{b=;kfei@)KnIWjEyV!KBOU+)i@;u9Rxctxp;OY)haiNMeJBJ;T@o(JFtX66f&@FJ z)@GyygCMpnzA9g!8^Z&d{*WM&B-!q-95GE;LPAF^GxIxK>_{MWoB}h`%5emb1|fg6 zCl^qaMU56m(#jkSgPW`?S?+?R7Zo%6UXarh~2l_1P7u4j3jrPGn1flWB5G_;G zq+s#DoeCbKKC}?Kr;!0Uh+>rXIoqFyt$BaKDUu+mgAAPbP%fswZA~fKj`H*)Q%<77 zz@WJU$T`XyNx13T!Ywuk4DNd1fq^tf!y6(%2}Lf?88-lprk*;K+*+I zRPYxDK*D8wZ{-Wd8N(>U_sS7P9wa}IdpQXKQcISU1vXIVbzIxIg({efyLT`Et9-$7 zE-nx;q6h~mB0_P<9}GBs2pKr{>Flg_$ctj&uT*-3tKm1qp0|Ry(rUQIQl64v2K=QuYyqR)JlPKPP><*vik!|cISg-?F(g=+W z{FFw@mb8PStWpKJ+Kl>8qONnN#RFsPuo4(bk{I~pc5@%x0e*{>bwZi779IRY5=gz- zpS0kTv_p76IPf5W?|Pu(f+4Y3E~ztH#2ruqEF$3QGn2S;B-frNw&1C0kNM^yDQ=EaVQ ztO-BeIHBXVm;_O;<{N7RN$y%CNR#_@!a-a>3W5O>fB{1<*}Z~6Pkpk>E(AN|&vNnF zd^Zw+{3hmEjcc&*1dZ1em1HRi#Ba(AQ6L9V;XG`=;4&=ej!;y}aLbI$dUw9rQp(@L&UJzQ$1Wh8o_4KGwQYA0SxL_^YUYGg@NPo-R_!r z08P;hnOP`3S-eqiP9?*EtE!Ne_4$IoFfbJW>{JlxHn%1+h5@~zuX3;)0DvB_&)7F# zFsgzl805@fV7Ox--alg>^^LOzj&(~F(VbF_uMb72rtmfgz96~c_2IZX?o@-TIGxM) z+Bo86MG1*vTd1gnqvF2g3~Pl55=b%0(hQ>j!PpN8AdKd?0U&3pv96D#f-(6bUS_>s z_xt@DA~nV*i=C{j?xHUIQ>3Tvak|{C=%&;A^>W4ruS+rS#8>+_Pcg|#8Dzx;`&5xd zlb0_j{Z;^ooNKKcu;M#kPzN97D0Ais3F#ayqN2F~<2pn8++q!ofFFBQp3k2j@4w#O ze#Zp_0HYtdyMsm@2azsZhxVfhgM>s$p|4eSh($MNgCYgm!?BS-hE8^A1B5kTm`cV% zOswLRJBUXJ8$>E3U@X&fl&y_Ocv6P+Krz6b2bvyGJWxE4LdslBFu)^c0A?0`2(J== z>;2C5A)6frpz2+c8e@xyIrp`Mv7(WTYd7VJmryG(><9+i&As6L7}`ti4dLy)QztlZ zYdk)`&?1H40quk{=N*MW9oZ2jq~UEAq$zIPoRst^EjV7@ZTNP!Dq#YIule$EUOpJ8 zg#fxsnvTgbew#I0W*|IYe!p3~-G~tWkl_dh>_@9+s>{>55p{vnf?U zY(ziHl?4DTXQV5NH;6_jmFN&BL-v5We3(wkw*2*{t4rZW(wn@I){FH=3|w2F_aFfW zkig>oHl}aQa>AUcj2~YR7*vGVU=VK-HHZWXU15d{d4lkE`}O|*%Vu=QU#dzJS zzAzA3n25V3!Q&3TVZi;b_J>;lU>Q*b1?jhjfdoEsZ94vxs*>)QQ6IaH;;=mhfCn3l zB#`&ROtmpjn9M*5O8?Y^mk|TapTam%GS(CyMg!F*WAZ*X| zYZ=#eJFUg$D>>lN2jmTH$QKww0^xx&YsHE5q|fHHw^erI1$wf3f|w;8-GX=wneE0gCc=v46OE{*6$cFT>=l2+#|nx zizC=x1ZX7~U;tO7MO7JeWlat`V0d8QOB|j?*HBL33kL1!*L*=`24J9C@j(1tX4$H2 z0|}5WG+ikxJb(eVwff*JStOcsDNLr;2oC^2^d3V61|48H-~}jw%^I0_brkIk)a?F9 z??VM8i3d0rw_kLJ4RV`SNyjUNEA4Ax{>>BbaT8Un&z-mrLpYKkV*4@H}zuPp}P3q%L3Pck(O zZ~4(f_*1=31F;Q)$ORZ32e0vwzAoO~^oZo)QRjV-|Xfa9pJZYS;af3ljnYcKXjo-h+ zfZ-k(Xv1I1*BMax;(?-(jOhBdz@TAZ_sRM&014(b+Tu-AP#9$7B$N>wrr52n;c9V)e>{g`)SxTl0y~`fU9HN4L z-LvoX1>bF!wcTig3Jd^%tb#1iZrJVp;t8$`k1uIKtY}b7$xEZ4A_!n;AIzEHVJ=+2 zU>0`_+~WSNKU{aa_v`uHR^c!9zMfDbJA)1ktO6J@fSfb2iwABQ`xP5HXwB0BB&vBs zV*ns&ZaqM{=l?6xyn2KIubL^i_<^d=->35j^F^udq6aEb;8O$%1~?S}OlR+FAx~GH zE(07DM8_rrpbBTFM#7v?W$H%j7Y~feu(^-5eMdJ31Jiu(ft907|r4CH{I&5uPMhrw+Ahb*GfO>F-%UA&MlfIt$uCmG}n-o%4c zzA=ssHWCR-z=%g%q_P@B#1uq)>WeleA!j5e_hBpZjgN;YvXg_aYo`AKK%Gq2Q6sCY zasQB8-tNy-B44ckKi;!p_{+-@L~FKAjxK2;+AI#8JE*`d1HX8{s5fAn(QP#J@C8Nb zA%{=_y+m7%lLc%Vby3Y2yzTZM0z=s$!K`0_No8qmO5mk9BY(Z>O9fWt2zFdp$z41U zU+-REpt3+SC3Y}S3;ovRCLS=*1JMuTD9ZpkNEp&ZBL>Dek*#CyhxH$(e<0y+474?; z!9Z3@;sKX8^1w3&YU}%*c>oi*U3VJnb3UB8hK>Cjmwl}naVI7Y)=Bvq!S0R#@B`Lc zTNK%pW*E9uma}Ym4XP0a7QJ&UKPM>p4@;2pGnZZF91~zZVL(TXtp-Joeb40e#g&`Y zwcT;%9R04Vg5<;P!*1cbcQDY~7&z7bMcN!eFi`P++d>2$P(%SE`mMDJ?tpSHFhs=K_4pNPOEMIUDCswFf7`O|AKQMqI{>A`zP_<;a;ED~OFd#Mz z59~72u{>BcSXs)g#O%t_0r5+a5RqekxwC1f5=7URVGh{A0D}&jVTviF6;|Lu7P4%d zg=VlzEAa&!N56uG6drRQ8`&p*VS)nKI!I_vp~0YGKrf^elPg-1$?wyNkm|h30ubv! z75ct^y#GM^FR!>~8vw+EvtWchi+g0FI(cGZ6k)Ui0KjC}W~Eq$lC5IhvO(=V&I>l% z_mmQdBXEE&tU-Qz%dD|K?IYgoZ;kvPL86QHgjPk|-0OfEi|W7eKpA%?BH&Q;EfNre zJ6X41{SaM5IV6m79!}UdrMZa^%L~B3Q-bJ01rG*j{P4iQJvxXUxW|U)Y_-wygqd^c zd1e?86r{xw$WmS?{g>>>Y^0NLG?isyM;_U_06*Vj&QyGt5q6cE%ZeVd&?)q8Q z0TO61C^pE`9gna|1VJKl5HQeCG-9BTQy55}Xx>rbGd6f(CVQgOoRom2J$691JmGYD zyS!OWdzri<9~~7KROQEzlGXa@#5me6YMK2j$jceCXSQbl%x0r@er z9x#v|OI#fNGkT3g$_cauM6AyjWS5~*hT(z2z~6e{!3GY#Fpwl+X~LR6s@M<)4!J@F z7~e1u7zo!is57j*Dl|*=*HXDa&jjk|6x$2v{BC2n|IE7G>{l;YH1ki6$nnNzR;rN! zTL9#f3)O}lBzQ>_AUs@3p`wB+NXu=GC2Md2{mx zF>Z!7D~ALc27v$l!w=W~@R3aCWfA(xu}5Kk;+L@wr_Y)rQ9w4DSTX(I81Vk%={<~U z`Yc&EZwux%7$^<|m_Q=4Dx!n@uEF7p3K|BUVuXkFA8c^PKuZ+=i2;NUsBu-+7ucGz z@`Q~F+P&{r*e4+hU!F5j1)E)T*RrDqvp7z8 zWyia~;KQU+CgP)S_iYqILISsJGO&+4n-6S6-dF*rNjYAxpK?ChLBgk25F6BnKch!7 zq_{#y>VgtcLk!ZA;Tw`&$9kE4A9TT1Genjs+7Am zPk{%XG0Hb03#vsVRE)D* zEfdiU!$BRmA~f^4!%=v}lfJcj2{*!;3!_%?KLX2sR-T3jfEfvRbW<<{6&|5t9Q8Hi z+c5wv+fw&7BG6;1j^&_%B%=uqWrtjYKCx`sxX_s-`sE~dbUj}2!!=$w4e}ho0)QV7(gbdCL9|WBX*Cuat$#)Fd#{2-ms>>^KmyG)AI$n(=-R}TBnghS-_Ws z;X%T%VW6xWTYojC|K7p_$bT##$>fpaID!&Iwmr}lK75m|Gc5i?d}7mAUBt-Apr$QMmlm>Ep>>wu$gC@1dm`prjGOG z+c{k8T- z-2rC|lt1l~Fwf5YM!#gaL?>foqU!zax0(>s!Kwl#6C+|sVQ_Y~Ilx2l0Pn!3+(eGs zR1$tFXaSh4k#t{mBjBX2s9O86@bt<2!f21jde&&Wx|# z-ydfRJk>wO1$P7R_^-;$$Xd-{Ps-@w1@0%uS4Up}1AN?=AfgFXI}pY}d-;Mp2AV2p zFer033^Xw0n6{a245;Jn_xAil*|Sg}ezTEne|??O_-CbJh-+RI#fr}Gf!RXY$)mUP6gC%|_qR{Gr(Vt^Bg(-V^Z-`QqWq`NrUzyT-zM4PH?i2`8Dhzbq0|V`y zjS3#`PY(n$WY&=aj5|oF;YqHb(nMq0u<#I}_=JaZHTDcHX8x#9vTqxz*DY;f}v z-iITORd)0)#KQ)pN9vQ4u@4*LBFJn#tlL-1?)~k}UKv!G-`ewcO-jRn+ex4|CZE4B zV6sVgsHm7Qkf%b7U?AI{FP}<{^)kS_-APbiro>voh7Nhy)Pa|xXZAN+06pKXz-Uu?kZoOJQrP1 z9T-T1bDApf`Qn&fX>@ln9=E$sgK@wAl$y)vrZ=o%*S)Xq#HxhAKrb^lHfR`NaVB12 z>9ULC=%~Vmlirh2uW_bffWW{&)+CVaXrvC@1Vn%QSSjb&UDS1)&+^+6zvqEMxTqAm zDNv2>4GcDM)3dcHhGK@G0#{H4HI|VEF@R>t8*yJU#=$^x&TmzPA~~ENH*7y{m4kyI z@r`CCgn&Qsps$($n7=4C3=I6a^mAa)Fr0aoV8AcpS?3#77EHoGYvbGMPV3mE<|Dqr z3?p{{1C=*EMG4#s%<4E}|G9++zF{B%LaQltYhOIz8vc@n4>1ty-@#xrE-=t?%e6R> zHkK#B$pZ7)`Z63oOA>4Z3kpJw(;*S`!Dz;f3r3VZAp~k+0$Uqzz+iwo0}_qr<3ws% z3O(R_-eA!42|6&xfrq~GaSN0d3v+HCrjKohyOslyKsK{1Wpw$pEJaKW6>rMVhHKC` z->t-Yazu9|Po^MhqJg&Q=@bjTBn|AqT{`g8LW9BpihI*_O%ulS^~0uS8!bgQ2Q6OU zIP7I@n+3TGLaTBD?B2Pyc%m5k3j;v1UYj%o9)s%(18f~(@azQwn_!?E1aCSdDMS)j zpXjGdf&ut63>|#4enUd@1z&n#tRu2N=k+@V$`?oxR2fOApjMuGEDaC_NYcAnNWkt- zwH-8J>#4kPTxZ8G;Li(z#5Avy$&1u&3JQ)^j|nJo4#O?Wz6}HH>M2N|g`wZl)$H4h z8$y^Stl$?MOlOE84mVqP%}iTv)*MPHx`|Q81?z{^kaU4uO|nL})7kv;EwefH0k#$1 z)sK_Di56XR(R*e9#d;Qyde83g!$}e={Fa%%U2=T}wLR$8##(9*G(DLjg#CvsS$^sG z(0=q*ZE9B5OCXrqmiz!Dv%OhBZCRo`)gq9qI1wbunnmp0CQ)SL0pzA(w%EE{NxjpX z+xr_TavX`>)|6#!TBeZjK(#vnzMuJqfkcSkc|eZzD>g(0!9a>hf`M543j+lPC#TNi z1jS||rfQ-md;*hBZgy8qj%@G-)Ix5z8IX5Y?JxR%YJ*f+A1DlUH|}knr9E>8rHnQtP~UDm)ocy(Z($U+bueudo~5_I)xP`flhCAFG~nvqJ60 zYuB$%oa}t1_Rl70)~Xn!?k)_L8KP6lB-}E?P1Y1|a{f?lCPJZ6ejj{nRfilr822`Kw>%b$RYe#*+>V5R*2p>p<%$xQ20u21v*x z1rK-!Kx9B+U|s8WpLrlDf;$f+HiUs1m8F!rB#Rz7qHzN8j)8`U$ilLIJsK&-zAw>S zjO-=9nHlHB0Uu_=Rm+NZAN%X?6vQf$Ck*ntjk;PI_83$r=rgFp0}DwUL1MZndd~q* z5jB{6PUC^rE#8oW5)$i$fy0$7JJs((=gI49XGgF8&C}!YQjYH?S(NRb?DQ)$zn3>q z^$~tBQ{&Mfa!Ia-j%~BRv3{#FtWv{2Fc4rg9yl8Bp#rS|poNN-8~7Pqxg$t8R`94d zqP_1E2kjowAa}FhpQX5?6@!6*q)|jL@HFu2Bf0Usr-nmVw5Ac0#j-q5!h8%3GW;K{ zA>j)H$r1en1J67F2IU2~fI-isW$bHAKOP_i6dE3Yfm(wA44Un0@SgLCG?4JqZzk`! zLNnvpTjnUEz9o~g-$i|Srp3(&%h8oVCGT)TBY_&`?U;RWzIOsf4UKe#GYta}Qk86( zTrjgNdgOrYgRKUh_SnkQk@5X0(E&~vNCH#;Hl0q2Uf75ec6Lm);5XBMvVXBYd7qX- z)8+y~{#ug(n4ydw0Hi$u;Ba;Z2>^giEc56XFenYbExu4r5Ez6C+PxG8F8=znOe(Gj z57awH^7oN@iV%BserGs7H7}q=$-;2kw>9wjcjI8aBCw+CfyolwSmrbqf_o3_wmzCwVDnqC72_rziD|839=W^-{xYp#S%>ni?EbL>hHDZmDH~7>KqcNs@zmP-mSf{i>r><$TO4K@!9j0aqywcw=;@c@a~ zEUwNl?Fj=E+xk|P7unT+=*CD5#|e;Q^M z5F`xA0@Wm(x0}wrU~EBpzuEPBc~LW)oB}U^|49OK3K!v|^?f{o>E@PXgVG8l1BQl& z$bc$8Zd6bh_$UnAVbJi9@g4>U|5vMBZ9Nq^zN;=Eh9iM0ED8Y1)>6v!iQujnY{Wq0 zf%b;~fC0crFHu2!YomhvidiH!~m$|JPEKXs=i5u5jC@yGDz0@A_*CQ^S=0&QDkk5J(n&||!0 z){*7niv&DUbvrx&v%x@6fgf_dd3?kFUl<5ixN$r}LMZX7M1cV%iXjP}G0;3hZt8&n zp7AaSA8|opAnH24;LZaDfKdkAHQ^ltlt7CRnKhFFC{Bu?oI z*qrl$0d{W~Xt(L{$u)#1v+H-NF=7s2~HshJO)4QUs|XQ9YPBBf0Ku zM4(9y+(hviu#{f;f&xHE0{q;3LCAj?a{_k^Jd`2r*O-$*n<^-4${8~BmIk*; zh5^Z?7DvP{q-X>iRDy_K2nHeoM=>x`K{)~zmz%mr1kr@_p{$Xihiv7Y7DP@Bb5{=4 zENDLks8esi71p>83Al1^Yvz8Ug2x%}Y`|y?Ictf6R&!1j6b1x|O%R?E4SlUU1^@{n zt&q^>j1tNvW7BwGl!cWfwBU3Ug!eSjSFWG}ghU4!!sY7|Bt{Sh0BUto9&&j5{H?}d zzPZHiG@-$sb}+vt4I3CF%M@lv{jG^ek!kj(US)uTgz1!o3GoY&h((q2TCLz!ZbDZC z5|w#gl*JjoXV%&ytKL5|zBmOtJgkRzl^%zkJ!a(tDd)EgdF5ya6^5!0j`>lo;34`j zk3|SoA7~t9DkLF8d_e_<6$=1BaYBvvxQ2v;1V9`?;)0(r06b!F61DCThUErh=z;;k zdi1w=tE9)>VEMaT`Is(_t-mZj0;4))gn{oQdJwmzGf6&}>mh|KE30`g&yLeF2pz~O;7!Cdek z82H;4_?{gNjp8UASjLy`tnU2u8(b-e!EU4CxQzs$Qyo(CRzPYH&UrwR`b000T_Q1ZZW+AIuz zr~Mic%>@(y+<)plbV578|MWoP1Z=P$pond|;t=KTx_$K`k34zh?(Hr`bs6J+BV(oC zbkO<3z;B_VvL6{FM$upfi^4`$0_G%<03IR>lCq|XT3X=van}Qph$RUE2@NWc1`d%l z<6CX>;`+xPwvxshY@lGP>|tW?tl&Z}3&Eo}oI5NNCdm#glcv zbtV{)Pwod~^#fn|fhPsDi%rfee1mM-oa;x!% zhrpnGfdje3iX(Co2E>mV>WHmJ7Z3nEFwl<8Qo#TTQM2=$W*@5os`80NS7nfcZJiXN zGgc(DT-h}4?_u009%$qJ>9GO3C}Ph3{N&6OQlESg4A^NrKOO?Zk%cWlXc(xt;BO3w z3+@=;5&p!$zW~q(A@YC)k^gA@P(hxGfHnf&>-+EH_4jc69F9LcN*1AgQZODNo~8Fr z+2csW(b43k1_m<2oO`cMM%T5xL8SsRU09~a3}Dbuq3c2jI>Ac`A7XuvNL80c59nB< zZ{mEsEq@Viv9;O+Z*0tC5r#O^0FP4;Gafv~^bd2hzVm63i(0a~sbj|*B?S$CMh^)% zILIKS!2mHJUap^G*tn$NcC~5pTjpw$p9(+f1Op*qV=Sw=$e6plm>bEx{MF2-mphP$`0zE565uLj{J0yw=13 zRBX!^IMXmtvM>P10hb~5?bhCZ_zhF*S>CqCA66lyx**H(7(LN}H&+pw9#9MuY$Obs z$1iw~1wQBVs9zpLhTw(#{BL-}S)Aqg81J!jYNLw$~a>WIbgk5@%QqZaSY}GG0 zvs@T20ZeDUWnr2U26}9~-Chm{PT`H+0U%ps7cJ<+GCBe2Ad0bpq|G%LVwH6qEzam6 zfe`~?23aOzK;=v`F{1;3&G$M>r#Cx1VB!yRrb{Eq3bZMe2@(q7|HgoU@2)|m;oJ>+ zvyMtl5e(#KeFjAZQ6E*;sqAiAdTI<*%*n6 z2vp3n-~<_D`GljzWt$zU$%L|klZ1!w<`)QnQV3xNJ|feOjR(RHK|-aNgbWVaQ*)8; zvA!zP{3A8Lc&QRGg#iHAM_f;K0^VX{g@O%u`Kp8l#Rg^NcrkuI zu0Q0!)^%%*C<-&*Kw_GV=~2OAJuKH-U!G~uWIIP5_y-1BjtIB6xZp_-6bAa}z-sq_ z|A2w}Dqql~V8H-FAVFcR?rIp2Rg+Z7x{uROB^=pw#LqFvB35dM-Sd%}tVacDtG$WE z&SaCvoH@7*HQU}s8`!)K57Yoj)j@<}>8Q9-GYbnvr$ZcWF=sSG+(*)h)o-ix?L>@` zrEN-Ey2Tm>yyv(*E`??@Kb7G+#d_~*)KwRlS!i0Z>49F0&3?w4ZOzuDOg#W@oO&=Et++pw(7mV(pcmNwP zrAOA>shPAJ=k4?N*7htXGT?`~LWL`GWvS_%VBZ~;!tWa(Z3&MEDaZMZ$V8VZQPx)G z`}hbR;h4Zvpkbfti4ndILzbayTzeWrXVhEMvX)}X@X;GEpsx@@>#jf|!jhBC!j?eA zMkw2Tic#fo2Oe44s#jIwht>AVOYC@dyzNeJLzNk1)Hg$C$CyzrHdJsNUV?}Cj>MRp zh`>Qq_{J8E!KgKs^8GRuveTXYhy7HK}V!*rRhqbR;-&!8Aw7!LMXek%IV_f#5LH~>QGJbkA55>yJTdvillnK^E=(VzDxpxkbg7oLmvE1 z4$m0yW>iqMthGM91%`JF)NIi+25LS2e~E!-(>FXs(SZ%yl{+XT#77_jk?D;TBmfSd zy)vq-0er&%U_hPH{4zzt!@z*W{f4-FrgFGi!^n^5x1tEIp6ZukaK%{$DV|8Iks2fg zy2k9rol3T_HK#yoha8NTsV)mV?qh^*pdvyYc>_mmjF5ub+81&Y6YQMt@dqpk+P_&U zrOadKEu8sD$yBLHvInC8Xp(?Ch&*8EXag-2k&?wUt^snwAz_1e6{8fOA!gvS>3(7smsYNho$)dXc5ee9!JjLT4+j&ph88oN}yN52; z*U7rHMF+(L|8op<2@N8iH}@J6B+$p`UpjE)1bp6rk@uSNO18HfrnPvhMm9VIO)U{AA0F+{*bbNKpIeMO)jvz zcp<}_m9c0uw?1)?!R0m&h`#}ev> z$!hz)%+6`rl_K@Sj)sr@oMjRi{SIt!ZRY+11CUTSuXq7f`f}qdJsDqfy2plpVW9ND zod;k*7}foOfsq8hMFfS45(xm%ECnY~0@E(Z;p?vs30QP<{JFH33zM~kuz~^Qjy4am z@ISlYlCLKjsuU7P4Vh8Ox9NNsI7KKXW<2o-90ZSG`XfuN*LWi+f*gd9ZFQADMJ^{; zSZ0E$Iw!s$eImq$fxa_?(2Xz%8?3d(j8g~<3^wpU5ghjG%Zoh^JC!FU<-5T$I)q?Q zSDr9DZ@d@bCw^?hKPL+e&KD0v8#s_*R+@4+y_rcw2yi}|lQc^hSS}6JEn&b+RRx-5 zl2il|SSFDR=dzJ+=l9<$+ZB#!WWK;nHF?kg(7@niYYhYAu`v>kMFo{Erop~=pv@XT zX~H`O^d1)NlB9hqD>b@{_P1e!;)Hgl9zy~x+3Tfdm+R;6jrARpLWiGVAYnZB<34G! z!RI+@Qm-WqnCatChvgXAR5q1G@DLJ+Bq+Iv_LDaVDk2Ojf9O4760#Fx*duFW$pBe( z-{(YctoV9vSAD6ZP|`srpsjC51y-tJgPcJEn_7|p0GstD{@Q;!&qTA$)?Q!aoB8Ew zavgqCL2ZfYp$~em>Q90PCQgeBpcWbf1RH!u0MHKVJGE;3m+9$~xRtats9lmj z0`r`s)VkZOC_dGUT*D&Tz;>W#lke0WHi$O3W1v-`6xyHJAYYr7DG6do)M@w|Uq}@R zHw?%THBCqsW1qE;t*B}*;=>sGX0JK(ALn?$8vf3*f zkN7NiAhD1oXOhUn+r4$+!82(IO0JtCI%$te=n4#F^ z+zbIz>TU$m#@IX|OZo}`Y`@7tSR-@HYSydOva$q|VmWDomOJIb7`=GFWdnd4$^8O3 z_aRa6|5bK2R*fsc622MS&0seJ$Y99;GJp&q1IPepfHN=|m<%8T$N)0f_kC3}vJC8f z?{Vhn2w9eGb#--h&yT2Ndf(FI0pkvmG32BJW`#Tv`2Llo0Bu8u$*Ehf-KV&C6}&!XFr z<&{{TodI|#isX#^EQ-U!<%59+2rk8s^|y!tKH!+Q7h|0y8_ZU?+R-u|7RS000trBdW>+JS3EH0$H>(LkR9FA;JKJ zNN6xVo)h@C!NUe_;cK@E21CFW&H>V4jK{zLJHn_?!S)R`qR^Aa2 zxDgooH>JfB;=$!P(owHxEIJS&hq}b>fCN_}OtV9Y#(&wO;{N?fjCkDB-|?!5WtP32 zL}@nhobIpP1A~Et!2>Zp0GRF7H$FZi`50sZj}b#ff?^CFzMQ?Zk^^9d%+U#V ztg^LFrtmM{jW5NQlXuKi@25)7CbRTGXcjObgp*ewnNe~Q4jL0L((C^HzKqs7D z`HZCGVoY?!#HfWUYO_{mt}oA!V%LFz{VcSz-&PB`liWS%^tTIMnSjT?oNq||_LAim z?_c@aRJNI`$ULyryS7= zW0WSCb)9gG6)p(qHo9r3nX^>dh9t$RMIMMlyy6e{rwtf@fuH^>20#c5$PrQ}ZVthP z8)z(;;|W_M`h)>vK|72l2Bsc}(WmKaeSvX6!VM5&i4i)gb}wQeS>YQ1fNjzxAr%mJ zob1LlXN!L7e{LyOhO7Vs7sS4JI*mBoWC8R#$gM*TA_buZQw(*&0|^4FAvGwRQ5a`5 zHE)NJs0GnGKnMK~*z)Z3r%`|*gOu+WEObpec78<}{RT}=wc$jHKs45yPE9Z`ev@S2 zRzFTr7>YozCBA^`!3LS>e1UZ3hwv}=iady9lOY*QnK39}?~_nLG9Zx9hGtM0B(xC` zxC6XV7)%T#93&7lFR(^5cmNEf9e7}3Kyzc|#pnTmc1O)F`(S{&==P<85KZ{T_%Ui< zV1V)$V=|eL&Q6AiMC2#^Phk+#!v?nmg*Y1V3+`$Ndq5>Ro`evPh=w*GcTQ-yXK?@t zf%U1E) zJk!P<-*`*i-~#I4w6lxbn_KVXuXD!|TyGf~#E{gi2DU*A81&8l!UG8k`ByeL2tuR4 z#K3l70GSbf;9tVMumK677qdu|GhbQHasefLlYn)Ji{Z||;Q9HD+vos^pZGch5{C8H z7+@b5z!JPl2O{4bRUi)>It{HAAM=3Z`5zb%0EZS-P{2<_C?|jc3R4RPR03$uw203g zv;V+=vA_qaUgOb;?`DED$dG`G$i&K!Jake002KfULjX@Sg9?yI42*G281hF{#3PU( zOk-cZ9?K6vp04P^Lq(;;^Rtu7YbJZ9f0m)4bm)+hV^GGBWI0L(7(cQUA>x@T@!16m zXGKtc9p%TFBpzT8 zO$!gGaBLAa8K$ypEKm)$CK(Jks6!sOvx_jX;G5iVA%SHlfdBx|rZBjn<_ZsNo)v^D zfxDOU+h?eNyr8K8pUXOU02pi14~X3{G+sRV1%Lta)v+b9wYkjBzD4o{RiaV>>BtF~ zPgLXkgbdOsW(Qv}((n0}5x;~6jGG>r3)Vom*jyV5;SGrN4(Ui1#%y<-`+oCI+J)-2 zX64XvO4f9)VQBhpxSC&##F=Z}@ca(f7~}|@un?4zfU$@~bB2=gi@*jM0T|GoLkJd* z)CnUNurnor7?3C?5|9?Gth*HhJk@=_+p>t(69*snALu}_&F~MF*>oL)3-!s*Gq6e| zdZilgSaAl+Vd%x&Fn?(Q+@47Vri~n-G)lcF7%&~MyU->E{F%lAW{E~bWf%#cH8f!z ze?)-;2}lTr?{pUUYQR9DgFt!zgcx|cWC0?Vg3;(M>3}0+N{U5x3*KW&$^wqGcQzuS zf5Ue$aiC1Z+R+&|;-U(cm5>L@Kfu7h)B*Tht^gh|lhHo`g8hz@0T`?t&cDzCD-7JY zqVkT>g9!?bMqnHxUy{3#M!(OKZ*&qOrspDn!Lfo4AdzBiH6zKSk0tp9)eO%xh42152fm^kxboS6m|mO^ z7s3G90a1Jqrj!%dM^}IWSXx)TxQ7HXt5kTsBhOX{8!WSU4Q8nU?BnZL4uyw7kN=&jaVL)i0ogXye zq6a1hu*-r0slc@KzyqJHKlvfR7#M)np$j^UzyLi3V4yvr$PXC4VI4Pz#{H}eS8i^o z6yfPqIBa;hgis5@{9IFSl?w1O12?P^>+6{8G>&5|V8F!_$_b+ur3v>gHE{Rrq*0qN zh=Al$dRE;($8m6CmcBns@2j>D0%%c8LL>GU$N>J^0i|(sFv<7dHZ*7>rlpu80F0N1 zM>2ZlqK#lNYKapDC4^9cqP9q!Riw=e@43J8Q-s4}_s9VqyD zW=t3iu*SpKFBpz7pfDgnR}&TkSRWopIH(>NvEUmFg#6>t!GJNEN)fW~V)OLDYO&{* z2UQ&k!b&@p=VoHSOfw|{H69IAAQCW5Jo*9M2z!JafB~_Fm$Z@M&FT<=!;pc!=38(^ z6vE!bfq;Ier_=KS3^2M@)~Pudo9e}CKaTSj4ssoA-Al2h&HxYK^7VReK8uz-y!2n+ z8%P8U^c!*o9CK^7f>^!Tk|tn!1{-*tSp4BZVrN<7ipB^7iwVI)bfZX65=<(P5Wv6& zVX%AQOjH3#;Da(L1}?qf`x9cQFOiFd3eHw+@CgI_t1zG)VIbo0TMSTVBO65)Vwdlg zKt!M<&oHwWtKfV-r#EZ#*c6P!}k0$THd`bfBm^aq$yo>Y8|KiFi zB%;D`BMt)5qXmEiMOeBd*bqe-Oqi}BUJ?moYSISlJU&tLdFd!4XrCyMOpq!u&Q5@^ z!Ym935Q`G9b`&tQTrfDn&INj`2s+#!cK9+XqD$&jkAQ@DL3R)ZSa{&{XHvq(g#`eF zg98RqB_Lj(B`?503l9uUc$^m;cmVz1KoEI=hYEw3vYfz-!p;8uYWqPfpg6!%r6>Vo zfl*+C^C}SWiWuN!ULF$No4FZ2boT13K1j@^gM1K1|bj{8Z~^E z1q5S3AYlQ49hO=4X)Ie2vfID$aUnW6N~J-hp!*=ollm3U7@A@LHdu_l>?9VH2RhR* zy#}ohWa5uhOkY*Rz|;eS3L**ClMNS0BqGGD_8H;bn2$C6wqW4#{WmohiUU6KL-z+Z zG{j6g&9VD!T^RAN>9Y_VN67d2w-sZI-l~EX1J2Re_p$*GMo$ta|6gq_t0pes^_YHf zZ5TlDpOh0GV9Eg2$J4=yDWu6h{2&$dEs{ogKGC21ETWiL>UCrTOrU`><&bST0lSNk zPC3a?B58pg`GFY3cP1^p!}RC@@WYw-G62KwczRSHYn8m^$`CsP+HrqV3Hq05vVmZz zHc%K4TmTHr05%8&k90H`GG6~-4NNp4GZBva4pw;h{cDARxdw$bBJy{W_vQudFk0n? z9pqqF=BG9zLW$j!KP7$g0`BDI`Oo>S15_dd#6Y5nB%s#^Fm59TFntnUV+4S)=97G% ze-#7P18L-XaKZ*lUD7#7;86KL5+m?mBEI%jGWbjS^wc{nva6+#rE{qJUMw0>EKKV1Pn|MM8%f-fmeu z|Bkte#&KBv&EQVFFoKvGKnpxu!3qO?h^B-XRAp$3=@$%`Tr?O79!p6e0Sxf={nMY{ z=QrkvmW5S-E7KpSfaB_cu0m5bNS$zvfhh)3A6R(cZzK>NPzKCKWJgAtA_W5#1DJJX z`T+orcraxmWq-5*Tira&05H7l*&SAp=Tk5wG_Zrc00XCKyIW)@zQ#Q#-!A}+>~Oo= z$h?|3EIN)D?s5NWgPapz#(YnFdBV35pGS&hjk16TTN{zd$P@rg@zin#ZXprVfCK;_ zNU|eiP%eh~=_$V30tvd)_$^@X`GtimUl5$Y6+B>W42tS7Iz%U^AyZEPY()jYP$Z0M zgA7m%unapGcz*pu(D^45lxEFvG5xZ$@PK1V54B=*!@&ba{}u_$0}BSUbz7o&)L@H3 zF>Wvr5-0|6d8QXJgzSW8CQcbpC4g(YTE!fCWHE5eO*1s0^RX;2C=xglkg(`tq`ndV zF{K7nqK*%`cuNfm0OHHfY`L+p0Xt9xTTX!0F{L#|O+X0H!M*>+h>$~`e*|)Xfyb49 z-0;`#vn9$*)00!|f`pnoNC-<509Jv*;p|Xb1`qf5TVOye;G3`n9knvP6&Bn*y;1eQ z@ib@w&fjwmao?2CvXU^+^a%$XF;WNvU-BUE;3AJN6czW+AB-?z)Kk*KZ}oskfFc$i z7#Khhnt~lLu+$074XqKSOe6rx;ckZu=LoKqB-&VyYpwm)6Cl7os0 z^Z+Nfjf+_B5C-J|g+Y1@MM4@!dS-lCMVI~^vqeii85Dtpz`1zI!rgFc?TF(G14urT zf;kdr7aqy@JcpMI0lte80agYNVneU5S>bB(`o}knj>gmF>x}VzjS|z;DDKY)&JNc1 z2;&4E9*Ny#aAdV6J4`*JUV27NiJJd2-GAWCIBUcApvAd@`mlXK_&Aw@gph|xv2sPp9QRN0nS7IbXe^*>m8|)O`cJqW zqsQF(K4gwf@jm1wJ6Kks=+jF#oWr_9)blYtFyQ0@fGzt&0Nh8w+r8@;53KLRJ(n)g z^szghm~kM(UL6zigxv)L%8lTzu;0_a1Kwaohttq9eZZ85g^_UJ=QmbqKo2l>6c{i$ z1w!C0k&y@Y4-AX~3PMVV#lYh;;eg>N+x;7BE-`p)#)9uv!Q=tUcWIw6KwStW&~}7@ z2)P3lOkD>jsO!Q5^;`=+jE2J3SaX2-188^I!wx=d5OJ##pf(t`*UFkZ7;xWamw^ur z$xEp%+%lYo(lKcrRG<{B^)DZ8DFqW3c+}=p`1*CcJ4WYKShCnU|C_Xr&jF6Cl8D-1NJz=aUR@;EaYGM z4yf>FN>T;DHyCIvz=@c`;HaLjJmC1H^Dp6`xgmzjPWp!A=fv~`f~g533BUk+LSge^ z|A!$2S#{)=5k8IscjOq`8wn?aNMmAUKvp8U$0-;SQZP_42nMVK+EQB}LXklb1sK^& zoreIyKC-_NpHxwCc#ns^4mKc@n%2kAn0ujmkN^fIy}$A*uz@9bFBni3&PpAA$K6Kn zF?ta7&J~~n(toI+7FV0q`q}E9>;wZmDT603zrFoofVb7}OU6}}2b5%^Nb5+;`=3sL z`hh85-u_^B*1cg48bBh@Z-GIyVm<{7P^0iGffh6*fq;iJ@kZw$oHMrnXZi(z!8aIa zEC2(9fB}FchD-X!9nQGcvy5D#N&ppHPGK;WK;>MK5O+4dEAM3h;yBEJ&Sw?k%?s(_ zv&)A2_~6SEXIpccNT5V4czAmPft+AjSTO)9#6V;NL_x#{7?u!|=5w5Y0u1nUtqj|z z{=;eD0VMRek=+FR1uG{U=;m5k$Jgr#>usKpo|jr2vr?Af#wIV|K6~@w3KV{0f&7na zKfP-LI{~?lT!GKhFd2%@e_`e=86W!pjflW6{dIbe#c7Sdi3o6lN34U9o1>$6P72dg zPk%o?y}Z2tA$g?6h5mecerGKgz7_i4ERxae6sgQg>|V?lW>o6i)APs0<&6t9AI6n^ z1B1qb1q1Am6nw(K*P%psv0h&dAO_~Y8Zj+4#dg5J=+D8^tE2{Rrx$xM@cW7uyGLH8 zwj6)2*Ao{ce+gj)13{G@0ZE|q)H41M81N~Iy;OS$3dDkNf~j9&5N}2Hs{t@{CIMlu zD7|1HVDMF}&j~H@QE7>HgCA@y6)5#PKq!7!e?%gx*%FZr+4v(dx*{!9Ky{ZRPy5%` z*LQd|qvohl=z0vK2@E6wDqt4DQb)y!phrgj(EIbxKmXp|ZQeh4e(qbBl6c;~U}9$Q zQG->Z!UM8_amUXEa=T}S6@dZXK6#)K;q!K4ps}EsJi-9qVPatL0I5MR&_M8I8(`FJ zO9df(#))0vi7Z5Ra`EV+GtDdp2C5}O8u52!fTF^;Cq2aFiv<34-3jZ)4lgNJ7(Oyh zo-4$53F47|R)cK>dJo3It-}l$Kmw`!M5A2^_-{1dSGNt{;89xnYCoGo#O%2kUCI*HNK7>NA z8M%=;Xs7@F^UvwYZ_G+#VKf$$;QC|`Ec8b_;wxDfdh{zXOdUM%aWAj(fCb}k3dIK` z3{6NlP!D{Afe{P7j3gOJVx}87@pnV|(jgPjq9f$_p-A(6gjGR+&r9s|Y%15|IX3i;sZ>~G+9l*f!w1~Z^vcLe-<9&_A_~2~S>XGZ) zXW0Ao^@EIn0iR3_z`l@e9ex2iRf7%xV2}xsXJdy{HD~4JGfK&6Nf}`vp z<2@1rt{i8Q=D(>M$ovZiEEMR}E^)@pET$gcz7Pv|ycf5E(_(!AgIR?^c53AwiJQ0c z2sUu^ATVeK!An8HPC^*(H%CBvu!LXl=3gCu2=bV_R4@hxTezb^0?*IyGzR&TtO3*o14LeKxDI%X0Z{Et z<|4$46fMNg@N7L)E;LHogPHZ|vf_B%wq4W|v!@z!8C1ASQ51wel_ziybAP)91IY`(VUQ3WV2nq5_9b~oBZmi^13Lh)X8uJRu*0vz zuLrS91)+B_!2Ug`CLHk0f?re%$pnJ|?G@6<79QwZ*c#>aml(RnMHNH_C={vc#QNFK zEp5(-`!Keg?*Jiy2g*JG0E)M$14lft#(;Vt(;i1Gm^|=_ z1p2RdIAB17O3@PoSckC$w-4{9R11Rvj!f7H7%a|KclKS?02Z182DO3FVXRHzkfFds z$4?=V;i=XQC=v<=I~u4)UQu?g(b>ZMxH(`jOauuKLJ*SiKSq2DK}3XR0eC%m7LP-v zVez%OL-GK|G!SOM`ZR7n|C$vhK-h%`4E8TLEOi@{fV1|P_9#mEwj}{aSsM!k09G(G zL>49%uqXjfK{Xu1=OjR zP$8DurXGkUOuCxfaEA%7Mf3pi=saKkKmuO_!2uHW>%spR)TVE0$_-00Qo~{1G|z2w zlIei~z`$rRG+^*w_8a;|0xhZH;Qt!B@xtTST^QIDihLXc(iD(f2LX^2;3W)TDS-N( zFfcE0+y%-I$EOPbgNE(#XyO87uJw%zkZt;Ist2&I=GNB0Mv;IfU?#bGVgKRNhdX9RWm-yF)gVWkmpeiUT3=LwS zFvt!nf|C`EUdKtSTc|z^fT59pa)K@|KTyO29^gR@Kq~{(`XGT(9OmGT|7_?lFq{G= z=aZU^9t5kkmV+qW$N+E9#mnm-W`yx*W2~vH$}C!Yy5Rwh9tJKFiUD)O9V2auffQ+> zVq{^b3hKgmH@AA>6Lp1|vd9MjN_vXw)fg=D@Qan!zyQ`41I|Vq1;arF!9c6TZmCm= zf#`u4=xUHa`;Myy8~2+Ae%?;kE)T!}BfeukF#uwnGOTr!aKa$9!4O3Q$3TKVu&Bt+ zV*O=DF>utP5+#9x0jMNQxG)7r_;ldJ5R?ayV8h>0{%E}L0NCIlrDGLfa)Gb`em(ph z<0=e-gu(eCe^bIRKXwNpFoX4c3q%~ZN<+3zP-aORGX2aMM+``43kD_(s1YrJfNl|D z!M&=6H$wh)@=gq>5-)Qzy@>XrqoGv=bSC(T+T;jxx*2kV3-C}~r%THr!N3?+^aTU6 zzu@l}0LBdm-?~2sWq@v{Ut`d?Z~{Rnnh@iWxUJzPrde6P7HH0NKFOvABXyxZvnJwzFVj zz_&YSGkSo;zha={KST`(BquLc6fc*AhlUg!KI#v0`ULa`yaZ1E$XNPkpaVfWW0d^13_Ezf{_#q zJs=g|1p|Wz;>8$_t6lR_ei!5IQ4|Y%pojU@xIY*$@nqDN8;0|SKb!QN-+G42MPs`*h2MrAzJ0{iZ0J};iQkjv&%6y!b52QLoopAEN7YwYu7%R_q?^-cQ+4SNxej^9*-@w2ep`5_B zz^J(mpd$Y+i_e4v6Z za{DW3W>Q5lK+pA}2lx(L|FjI~mI#8F3`=1B$ER0@^8P-% zrdyD^AzNzw=`7wK@0F5xr3aK@=_yG3!loevMg9XnGqJ$>a8k=l2^Rdw02UTNjuxMG zPY4*Cup)tRDp^2lnbf{ex8H}o|bXN0|SW#eh2%EM-{@t+uwEE zK*eA5z?6cTFA*WCpyYtYLoL+4az0o}I51yO2eO?QC;-@YCqAV_oHgWzgXn|^LdGw} z`V1+F^&MMiAjm*sdk;HKjH(eBaG*GY|F;9KnmGNvDAVX5y~t- zhel|6%zbooa%a>7#Xv&#&;wD1k%+2-$IP1u28_jEKq+VxkPnePV!*dFB^-gEG5{Bz z5kZPj7=RP$B5wgX+({5sRbXDg`m0@+EPs`E3~KlZN} zkO%6&0|rKR%xB1!-|~26Z&6}FLO=je47g?;;0Xf+LY|p_+l?p{C=`1s_rntRU6+Q@ zj1>cpBqTd%4?;*l7&!Qc!66n0C>3^Km}Me|aYiaQcFVlL`he8{ic73Mxo_&0MyHQ`7NI+jU#AwON!iofH5uv|#5ELWW8=Ns8;qc7VP z3sNY@e>L1D1;8mC|= zA%FoII}{Bp6tl8imI`4sFO9?yuZQX}J>+lOTO6KXV2~%>0e|SzM+agr01)9<0IaqP zVRC1p2cTS2!o-5?sN9BkD+b^J?gp9=Do{@32l8|Bt}wuafk>D#U@-q;_tj20fs>y= z3*P-hHGn=`cz~HZtrjx0H6dnV;7AV)g=4Ub-6es!-zd;+Fu;%ftOr5`2R0A`tT+S= z5QhjDMt?2+3t}KZ8YWISD2#S_}-%Um5)q9w-_-svEfi z1K1dmWkg`8Vf6qNDlh;Q*nJ!fh(o@uNzI}O)dr)`5lvV%C=C2*V^m=eev1J!M2#3G zU&H_mAm;V%`^*Gnd7=`2s31R|J5WA}n`3m|qWc#BDHE9#a8R#L;iyAR_*WQY6^rnI zOG%6=26i1jCJJOIQ6d5*0!hF!vgHCAE)O}-okVBc?d?NW6WuW!h~7X<|HLeS$CtBn zdiRh_@z(KGhr|UE0kii=aC$yiYUXO35f;G4T}M*j%y4o>yS(g=>8SGV>`r;Kl6J% zFsK_d@r&AGM@gU&0n^u5V9yXR?e0yR|7!GDU%R`1SAS1p=n;2P9t;=)2@A!x4j?HT zKm~LaWkdl{Ks|uD2Oh!<{+l)kAtMH<5)c~Fqx48nV1x#BU`p{M0szt=I03*8ze1M} zl}#ip%(gNp7zhJ9u6SxZ%6;Ru=r!J-@J6LzX}{Lbw%NhT;sXPb2c-og1>K0^&GZu_ zhY&}O!~M7Qol6Jq`3hH_T{Kkv!G?gs$OU)LYY&qNb) zJ{By6*6!j&$FXru{w)UBveaskkgabN4~2m{B#g#_nx4*rDgmq?CBU#@dy@e`{$(oh z5f~;UL;}g96VRd?JJ5)^8!qYQpzkY9e;#w&#S_yrZb5(dpsyAQb1N|TQH=!)4_GH0 zJb=BjRF@(-))xT90OpIE3xfk2m>>*b2FZc+;!G`U?0Mqu*x6KQjVB+wh zRlng%6WZ5oM^$sf#sYr$5QGrIXhym+UeUg|z>;PLz;z>;@_!>j2pnVzZ@`064?|?XKz#(PiF|2);<=D87Pvyo0Rv49w3@9Z#(%Bt z*kb)r@TqRhnF$J0KrU8Zb_@g~aDa_QknDJUuZFo#=|Q;Mv2f_=%{#eaFks4%+;GpT z@~gan+~hosPQ${Wm4U!u0RTInF|gbatv~Jl1p^U;T0e~d#5#3O8oGOif@GBx3cA&` zn;q2L(teN-oP4%^XaN#f0s;OWDj+vR@MClx-}mRx<}hM{c#WQ|rld84h`+DwyBK}h>D!Be!+x${ zcTxb5lef-uynf`7(>zzA7--t~83Wd-5(|XE(s4X7Fzg;4knwB__2pL&(|eb~05V&6 zAc8PFfFKOfu>}So->C;ozvX$*ErwYBMkkm%V153@{r~-mBi!(bHGO{0_?de5AiBO< zcuZC_G#q0frqTBY!>i(I@tSF|Y#G2%Ua=P+H^i4cR@+=*0BK-A<`+f2ceXAKdUgN8 zV-p#QoElLQ!*6*YeaD{}U~&K9`@mpeUNWjpC{j41~2q72{4?6o25gbCC zkpmP1Us)>#@=qPxh!(jH1wACG8K$2ADDMrB#QlXqyd!$am>A?Q7?|!KW{ACl3Je#! zuSj4TG}inE0}E`v?r^DM0KpFlP#L}p2|Vrx29&0Y9$3eMZ!jS3>+&o9pBUiB@{;(+ z(+2?R_-k_?_SHPqgwa3Ry+M$BTNo5A^aOzckbp;H?nwxA6dL#2AOT*b-piKbHrzi) zYI-aV33R16_KEKk0}=vMKej9o7cdY4SVoDW0Y9qbpD*L@>em*l?jN=M>IDGoa5okV z5ELQ?iUC-Cc&HJf2KvkcqmI-xFo9#`^?8>__?8fQ!DX8(`-xzHD8Qq8A%VNckL}Y( zcp&Ksxe4mj`oKyL7z+{wW>y$0A7h|wQ0ve5$eo$@2c>Tv`l zh=+_Z?kWWK3lKF}i;M-S=nRUvYxja-NI@4d4kTC#%tG-404V#u&ni_K5_d-e^ZUArXO_L-Wi=KrB-03xL{a<-d~<)P5`L zv)_NeO9wB_ho>k zWjJX5mFpsqB!Pto;v-^UO1>{4ASMnf)B}G1AVD@*b^?#S3MA}Lab+_!zjKa=1q`O8 zuLnaL6kNeo5~vc0<706rkdg^vXd08mZ7deYs!(}4Z6RSHsDlhyM)GC{^OHWuppmQ- z$^9*C!vnk&n;yuGe*=Rf42*i$AW7aba>L00i}qW)dCmQ4%LyK_xRe6XK+yu8&lso% z$lCA5S*76qW{dUz007pH-F%0ER;!8uN&!`ajv!iOKt_QsNbq;fM0iR;U@$ln`yOFn zxP0zv?pw29jINcjdjYJi2Q4%xX#I9-pYKj>z6u*)cQ6nb7zH$ap4`V4yJKQ@$^ZoS zVxVgWUEQD(x0ZrU`fz-;A7CJ+@Y5RlDM)H-n@p8&D2$_6^yQP!0N~Yufl$X16jnU2 z=mCDI1}d4$1L+HxE+0c%MxI7@f2I%FKZ3y;1Ksydu40XS>i~~uOmE&o0%Cx5q_@Gq z09AUi1wdi}HyOVsL0d9{6$Z=&1|bv}Q3ySf2-x3Fc_;T|;sKMzMZzc~YV^@0ImFnItZaIZA? zffj~J?D0sTH3n+&PlP#Ou)1|$VDJ?K{JJ9K%hqp;vC{Q`A<}=8qOqmIjeWrpgb;!| zLmV;~kGIgp!*6LI8&ZGT^wU>5Kz9XzVSV1R95j6V2L=*T{2@v478o4#K&(IV!3_1E zP8tjZ20em|U%fO4q!^f&6$9)S6&I|6NcrX?!mxgG~q8+I)QC28%XHUizj9WV2kY- zJ^Q3Em~Zu#75UUseRZ`xm>auKz#I;Gq||rJ0~G^-$B`z~Uif=5!J2+$+3D;Cf-JwKvk)&N4h56g3<92QCZ})Rf`uf)x2#^XV zFFRXR$9bcGxxl+paQ{IRxZZxyoqE6kSIhXuH3mZXqo1hc9}FZ5_?`!v4i6sqgn{0o z)s3p}VESd}7zW2i=l*}S&T?d0N1JNdvxm0D${I8lpF5v{vBJst8lE{Jv3j*{9AD;p z4E%)$#6V>v7>FPY28P}B#I%Fmld|>Sc>REfjIH(CJXquis;USHfgU1h0YS?$)Rzy5 z0{f2#a{(|w6mW?!x_P| zK?3SPQ$m!$2X!HyGmeSHKwvXIsNrC0LQYu545YtUPfskq2%ifukYib`OQ~BMH{o zL9l@!v_ECZ3v#RD6zdx`_7``{ogbdK9F&=l@A(l49PAQ=2oKtD+qIJ(K&9yyThIM| z%KV^lf))=F{FI!TtzZ~O!d>HFEuJ$yGQy3HFg0PMU`vHz$WYc)0wLi~=Kk*AgVBBU zsl2_$M%g2#WU8q!00WeT$p>k5f9u0fe{Og0zpoy6BqBYbm~6y?Wef=gA^?yvB&JRW z3@l}V8TS`SV3jzbA^jsA0@psHV!jv{caOU?@8`kX%e~D@^UP`79*igI?_b+^dto3F zmNu-mIQ?)~C+|1$-#VBii6j4>n`UY^ei z3_kNfF#wwl421t18kVhGC*zG+z)g^HNeNpJ9=Ei&acuRtZ`<13-m%&KhJi099AEY; z48Hx`*n0Wsxx=N7zvuDQ5^mc|lK=n! diff --git a/rostests/tests/alphablend/lenaalpha.bmp b/rostests/tests/alphablend/lenaalpha.bmp deleted file mode 100644 index 71982ce8b062acb7bb115e84d4490815f4a8936b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89322 zcmeI*3*2^XS`P59BuUzcls3vl*%Xmd*=BDVLI~MpQ+5fVq7*gz3+Elzu))F^WOJb*Sgkq9M^Fk=ee%+ z%)3AD>)z+pp1RZC$$xL_zZdxLGyL~zPrb39Pd)WnzJKxSK6Uu-@WJ)Rbq208aGinc z3|wd6*){{OcCYQ(Hc?N^{TA?7zuCUS-L#vhzIyw7VrJKIjCj zB3P(j>t_4Tx3!yxzgGKc&$&=88a`af@MsuS=riqG+yhn-EYz=kvwfG_+RejXyZyB1 zTqu;-<-=7O9xNpay|o7Y1^S75z$$`;`gKP8u9vlO#_P17_M8ia66M1}hO06>5E>Ny zF8r$f0)5a4Sb?ulzwWWU-d=nCW83@k^^T{$ZhK4Txlk^O52wh`FmaWId*H)FzY9Ow z3w?7wmpnu!?g1{C9ua>1HyG`^-PXpjZ_pmnVLA^b%7>C6d@#a>iFyXIaAm@UOjyvL z3qQ-vJe%__`M^=!16e>U)Ngof-~Ddd@uW9wKj}7?K#7G96^E$|$j}%;7OqSq+gm!vit?fQP;o$pDg)j|7OqSl8X*nxF?+ z5NmI7Y~TB`c0Bwoa(cQ7D@qAh%%$-m;;<+~$WU3>Wx})BB+TW1e(g{6P4a}kOCBx( z2v|W4h(Y@;kL|6F?fcx;jt9Qg@zl3WSNbd^$_K=o;xNgO7;#rj*j+47tp-Ax3%MeZ=Dm6mR+JLq1LBnoBE^MF*qVe?5_rWYm1LB<`!x>GOCSmIppGX?a+`r~O z;=e5ay1uFW3;NW!t3J@fWx+ilLN*}(kVAWi(SGP&8{fY}PRZ%|Nrx!00aahL_gua=v$119xl)UQcR)6L<9>ISf5qR7@mFRq%3t(N@?7{6`UQ6g22E(c)1kfdvHghK+VQ}5&WUln!5@4(UG5@>EKc2sFKgwV9qxnHU zQlBLco!~w}58ChYF7NWL$M$Z=_9OS&@ymBR9{#S*O(%#kDN#OD9HuPLsL6yzhd9P$ zk-LImX+#hj7am_4oFTxX|H=9-jpX|g|G2(W=tuJ{d`ohH9#SAH=r9e`KkCqa^r8Kj z+gc9GDLGv~VMQnrK13f%hJ*=Yi($akT_()X;I88kR6Z?-B`!SHG$;X@0<``U0w}7x z<=8*VA<=&>f8w9GALY;5Z^ZAyC(&8;6Z+r|!6N=+5ADYt+PfdykKb#@FW)@}=R}k# zD^MbQ*peY(!q{RUjaDjACd4PyBrJk3;{t^=OSK2BBRxjR!YKkw1CWA$?O&sRm%kY! z{&9U~(#p!(5Bk;o1^VEgRSrHl!Zc9-ghTs@hxU_hYdI{ZnPRvE;g#0ctyr3(`Xf;%E>TR}+5Fyq4G zOM?=Cjfn|N2&e+Y0U`j}#{g9SEsaKh%fI3u*JnPn_Je-Hy~)qQ-$D;H@WBzFLHoJS zeeQc4+w+d?r{8SHkDqru@I9QB)Age_eTEMRHpviKFdm#VwuK4t2{Sa1xMU6P8u=R+ z%!!#XKeY#2HF$beOCR%y`V!D)Ia0U z-t*Xg=IM4k{Xkcc{k6Ahu6p}Eud}QXI32G1BR1judm^7$8I7Ne5J_-%U@6%3$ z5P%365*vV}c@h)?@VD$uOyEKQp^!t40hs!q=-=f}{LQ50FEyjLW;j6~`eHQnv+%9Z zta?aI+@T5F;QWgZ?Ux+dFFoCIKn~7{de9F_Og<2YkRf3rvS3tYg3%hYksE(Z!XgOb z-HZ!nBlaLJaiKvoh0?%moAYNv(I7UU1ds?s0Tep!lK|W0FYcS+iGE@|II`-yV54+$FQ-J@i=r2jF|fyKM*%947%{{^@6<|6Km!uX#4x(2wjV)<^Iy*g#+0 z13I*S^`ZTmL;JOd_UraqzRF=a#kq(PN`wz3117j`VnhssQH2S{DO4piEP{}@Ak&%l zU^gfvQ;;yGd}KcROu;;hxzis$dSeg*oU#FV7O)UN9e@d(9zeca0xSk#M*q3|iN7dp z-I;UfTli3j=4aJs$p?BMLKCb(`vX4U1AhIXec-YEhMVp9@dxHG$LB;n=tpmp3{eKG zbM+Vo<1s2@GeYA`XxIwEVh@rw#wGGa$r;VkOc=K`V7Ev?XfPwfqf`UeY81dmx@1V( zM8M!x0#gV|7BEfVmH^5ALVz>Np8{KbL4Pj%E%d=1xX}KMhxVHe?Sqc(Hy_*agAd99 zIoMgwMTziXA;Xk~Fu|ydjX<3egc%noUhF|>Fx5aIaiPIBTTDcVF?hrgVTl3=fRKp- zyFM@q;HKoltpc4QK(fCOz#@wC&+<376MbvY+9&%0H}oU;S@lpW?l6TfsDI0${nkVK z;L$$hLq25u>w|MZ4tADv^?(xP195N_vfzq|5yoI7)r2x(5d?;|ae>uA_%k$^b%Slu zz&ytonE4n3wj2!}SwwK5B?=%wMIbg{$pk|Hxp33Kcz}d}qyVNR1Yo72|1hxXe~w;bTeoZ?(PphWmkGDI0%cguu0#)O6`2#pKL z7eWK~KGmQWv2}x`XduGY7?|@KgBcMXwmFDKF|mB0RCYg_F*6X;UE4x4(%gOw;bR|$LB<> z(9a}8lmXusCK#2m2~Q0TbqK6%j3Rm?`J}<32BCqu3JqE`5LHhZgGd1yJc5XDVHB7) zpoxH+QVMp19t4PhTrvKiA;6;l%kpQ>s4-2>+AsPG^u-WU@HO(0h$aNYN9}FKzyK^;sa9(4gqA!iw7_{lK?`h z38bqC5bu}eFZ6SLOj?v57DYd5pCw=1Aq()|e`p{5(I5RW$My$qw&TYiM$r)bc+L7py|D>IgCG5)Z|;Cw`QsOB&t;1c3a zL|``;Xfl{6P#fT;*Z?=k2YQC$mSxJ)K#?&fa7%z>e=+}!{uO_&k5v<&ii3luFz_3Mu#RfDH2m$2F z(j~%(0AgiBfaxj$=qdtK|L5}GqHn==)q@X?!5zK;|G1C)xIc1eAAf9r^w^Fce0&aY zq~o2165)g1h(pNWDwwt~p`pPD5j76M$c-P3w=}3XFaxO@n3I_%Y>mMZ5tbYwV&z5N2FBPXqU!x`Ej+CwZn|mRP15 zgKb1;j*zV;(;Pk|DY#VxY6VjgJQW2NALw~X2_SWn28x)A0!#xyX%QgNzv3@O(`U+W zg$8|KS-)BGKn(6shV>smv_ElZe{!$os~i??poAVuhA0D$g$b_f>c$`pB{Xm*MwqxT z?ZH+J+;0-b(7YZGfjLDuE>c{~QxY zJWW~&Ajl#B6K;B=|CU~t{}%nMdhiwc0RBmz^huxm$)EhE4((6xwS46mN9GiKC>f#* z*tIZW3PK!0;zH~}U1DkA9+N4A24=uKq-d}h14(ovLUV-096kamxCaqPMTmkm7ocp3 z0zzJ+Kx}|Sz_T`wS{4Gt1DL=PAoef%-{mhxi_}7P)_&2?s)u87hxw;`%BTF9L;JIb z_UCT4e3%0q>3EbVA3_GanoMxr_=E~V;sT-?Ez(XJ%%Bh&xNG;`Y%#{b{L~mEA~Z*6 z)hOkHMlC6g;R}L7xun zR))7uV2S`8Ye|q5OfHaQa7KYs1Q1UX0<5VLAoef%KbL>dw_1aKR(+udF|_~Uq5Y*p z`^$SRU*#~zJF8@fGT@c|s|jQ$p}|Pv5E2&>JRthAE z5WJrxv4Nl>AOZ2js?P^ci9nwVFg6u|-6&8W=t+=DpjxY^FcPa%1c?2M{&)F{`xAYO z7y4QCfgZRp|MXA)^cTF~1%KtxK4Y)tE5|s}@y@~rJrD=IMHaBDOmJP|6G2E^Ku#k> z)Lk05FL&o2-KqPP|E6fL8xitgvF4Bzq+CE|&r1P}y0w55+~>o@Q*N-kL{bxIIAhudlrqsli02CMjEJLO};xFz~Y^ycsXW<9>;12W8 z{LIh%tB3a24(+esZ22$;IMVSb;oOj+vY`J&2UkpJNaB#VfSd~rj6az|>IUx4Jud$6 zR76loOV#LBDQK;r&y*ijl88cxq~@>$g6SufA;a$&&pShairt%A!LX$=rfw&Dy~&Q zh(kzRK+aofpx(7a1oN4H8CTwbJ z0!atr1a?J0NpR)@^srIDM;kk`8P|fcnJ> zDx$U;u-JeL3DD&)cGGQ0W$i;ht3J>N_s{v9&-vWX{oKzxw!eLB#}7Www~j%O@WHv5 zpdY#eQ(+cv*Nd{*WkO-)}DFi9RNxQgirYj!6ilYEA03m>d z83KslkecWhdME?@?;P6afBxtH-M!}X9Njuw=fMU2hSn|OZ1X>boEZRJ8O=x5bKHn@Mm7kt6rJG8%lX#e2Y^3Qzb7z7C) zFhLKIg)l+?uHst!hU+FS7|EgrrNK-S+*cz)bA&umG8>Ts^HV7>Z|9{z2%hz#IK$m= za1YtR3l5oi>cK2RoZdP@Kz90dpgqW=K0{AoDUU>EcYJOe&IjaYd+5bjw~4_6ZEYA(7+WZ4H^`T&^V2jcWs)`h>%pV<}l@gNWtO?)Y4l$ zKI05`!@)K?xZ7gUnLxmKHY1p2f!#nb3xkNQBHBj-NeAKtrU)b#XfU~EQcoJK26*hYlp2&o}YDTpg*f{^O*e2_FBCZ=>8XE?*b`Rw4X!a)LooTBBy zn1NFnLCON#Ku|ZB$3sLw7TlUZ(g6!$R|M!M5oi>s50sTl%6M`nP(%hn6aXmE{}6zZ zNA`<8d;tyfFaF{${uhV#FK@Pd=v&7)((z?NG(n%Gfon|~7)de(V>80~!$t)6;*Met zw^ERjQ63_+R=_`-w@SOxWQV^aDNEU-FWd{HsIz*Ed@} z^sQs?!SQ8+ej*5Z7GGQ?Mlm#qMNFn(Z1smTA`moplp69P1xXN6JFJ*xSf@~Ct8%#===Yz;EM`n+c4ooL7MS!A4 z1ZEU4;mHDG0*NzFN&w3?%b%*lG3W<+uz$&ye922+`qF>1*L?0<$KZqG%LM%-H0XKK zpx&S~U{S=WM1-b_F^8w5ptXWLPn=H>;tbVSv#($Y2MpMJgw$eDA0sXq;$2w+9M}c| z99XhK5+oQcrJ-&W*bM};F2oI{FsP6&J~GTn2P~Fd5oi=(#rZ&W0BKrGU_5{o3ZM`m z%b%*l(Yl6dp?}%SUiPJ5`lbJNuld}!*by=~E1IC6ga*_q4eAYy!AOk9sEkdVN<>)9 zVWl9I!z2jqy=BAc3{yHj6%Lf(7E6$DkR1i*GsH`DfL!cy;6gJn>%++iW?7(tpl&eF z2W8Ev38W}gClC>c6-+fi#hwVn2B-r_)_C=LfGq(mXX`o(KhS^Kmwnm4JG6g)v*knI zVuvHc1m{K&wls)0aCKualB5a7W`v0dF^8!dRSJ?IcnX$UfgorGnj{L5+i;NVz?y1y zaL<+ivX_Jd#}JLF1FZ~PXa@4~2s4m}L^C5GblX6X=Yz^0TPbiy?#tbI{NYYpHWUiC;UI;AnH{uPWR)$C5zkwK`5YOtmvi9O%7F6J zVhHCmf|!AnhEgAHMvw;tyMaJTXqgBEc{apUPbXk;Sz^rvEWO$Qi5pPZHc^{s18Wk% zqMqnO{wu!XE57n8zw$rbY(DY1Z;_!)h#)L9aFtj@*Ns0kl1hOQMhd1Ya4)G9xI6dg zP6fU*;UL)o6J_>NH{M!;?kWifAi@&NokjO-3-8ttE|r1q8%%kySz$^;gsvGu%K|eH z)D6n41p--iibBZ;;{;|dU>ULj>Hwku_s+Z_01prYKmja&B5!F!w$OjoSAErgKD7UG zZ270p@gih!ytACE2mOQwde*eoJsA47~AdG5*M3Pjd zE+i17GA!3lQD|`jiwGnN$O6D5f`hCCu&A^4;R|K3fAv>?_17HR%U}NT0ug~m z0coHpz{nv083$hoU}%x+&VnX0Ff#(8Is-v!0-|uz0dd)qv@k8t83pPAqW=hxwIAre;Tyi;zu#;= z!3f`y2S++SG!PWx4QdQrrBdMPO%PHtnn|LO%V=6Ca9{4uJ-So(>#p6q888oKL$$=r zm>;&;dRc5?Dn;F0c57;&m;*J~sq@d&;1UijiJ>0CfhLB`C%#>t6yz}hlfw|YJNKwW z%n%BK;ebrJW}sOiGmwoU%m7g(t^9WCLJ0(F0tp0L5un>dfQEyQ2O#W|073s7zwsOY z$Ia#wr10&efphhsAHC^Q&s!--I53_hi3taJf?(vvpT`I8D3+iZqPyN!3Bmz$WyV@5 zx-d0>OHu>%e0c40;MVkz4mgG(tRL7G2V7+)hRfzLk2cuXGf4s4!w`l8HH57UFobfb znH4evc|ybtBqLY?LDPXc0Sh)FkSHL&3jtO)a6ugOzv-L4>6^d#oB!vr`Q0Z-;oH){ zSHf|(uQ;miHzE>hz=|q*lr`d9}Y;6Jw4fSKz((W12ZwagagS4 zb~!)+P~h9Y{oDQYJ67y+Ko7WdIR}hzmjl^WwB>*qcz_&$&aICOZmkg|H=Leu;lS1p z+z$s*DBg15ssqm`9pEdP8(#guv(pdU4+rG7@r2jB;EBl#&eVvm^#K`cH!*+=9h zlwA%e6XAeeYToEI`vo=+ zJhJx-F5gCS`IbUki?8n)Jx1>tg#$A+@bGcjR(d8iUW90~{5zdv9bVc#(7wt>7^;O(2dSul5%o4xIyquK5xl%{3pfW+;7UNVXfgadbF z3+-(tO0|Wl6frP;)5M!HecNa^9AuNZrNJ%dWs^9=N`bxEq=3!t*0O9fzWyB&e*?ry zyl@8*g)hqIe>r6fg#$axZ><)lN^t#qM5zsWuY?J zlp}Dn2i`;z$3=5nK!tU$iHYx;Er_$_L*F{ak%|7!)q{TYmJQ_kcNKe^?HP03*nqrM zWK@i+5$46ByiialkoU{-ZV?Ym`rNfYM3X&)0zqFh?CV9lf#9Caz=eh|`f$n?W>cAP z<7Jar0ur>f1Rf$U;Q*QEUn9wWlIaXnC=egJy-?irGLGfreeKo?Vh$S-Y~Yt8Od2TE zlm=c$wcQtX_I{TMp7a4%gR%zhwEQz)IR5BmDin?Cide^;pjOajPUjLlZq83l|# zJIVQ+T@f$?(+%eRGIM3dvY&jua(?PnQ=2>?f&+rJjen5ZZYRFn3{(orf$QHZhJN&4 zDjEWKn~eUH07(W*0F`0!D^Va%3G+9I?4ZuypNSKw2zd3TFBJ5B^Soy|%Y%aKZXify zKt{l-$=!tPa3CU}=6}g+hEoB`0koNwqEi{-`EYQ`8A^ZnpD6|2w2Bn;Pt(|Jyp0Hg ztQ^5wiyD~xyon|vCsXj$#@k-B+JY6eVHZuH3 zp7o#C30*NEU=kqjmMRE{UrQ8F{YXt9PQd*Vz>0v`FegNyFBVNVsO+}9XFA_0xG*cc zt3VJMgah;85qX*W%(vmd-$Up##5lvea)Qi~-2OQNRObvOiO649AV=m3^72vtIt~34 z5jg5;3_=6GYX$|+>Acs21|Hk-X|#GWA<;oJ2dfr70D5V`-2sk_@?%lakN)f5Rb0yz z^BPe?Kz-mOfRU#tBnss9Qbkes=uX}5bOL6>oJ0h?Xj~CkUM{nZ-wd1QzH3YbmOucb zB@o06Y*+fNpP)^{!SWYt2@cs=o+B@Rtg_B9Qs7T0Aa>qD-MWIlh?+l2z#R4u)KF25 zT1c%iFv*J=@CL~gKogg^FoA|g7LXyz0AdZ+Y5Aw0zI9BXcNRUtrJ^7G4*^`!b?X7D z07(X81B`qd1^U;A-1V*#$RD3EWBtP;yCU$M=REZPACqukHym&s%?^+-;Xu_o#iF^T zL`r)~3K-xf2(n|UXlclm8WEBsMj|9 zwR{hO;7mAZb})-Yb4!Ug;Fg-NFKVVw+?zHb8XS zMuGhKss7oS{HcLkMPT~}hy-O=oXQC9IS_;c4F}7!gA|JpPdHc#1(!%cY6Z*>3uFn@ z93~=g%hMQ~qCtuV95@K%GF3)*L8JcNEWaqfRQ&Dj15RG z&?vB2!C4a^o=Z9qH)w{`@5g3D0 zG>A7yrXUBWz?LC3wj?JLq6wlyd_u?&K7^0-#Cd9hsLi<{gH;?pgc4x|Vzl{0^R4Dc$2-fpdcY_OleMq^*uN})S2qSDF`lG> zF@X&MXj}zYY{1L~W)v_>6@e56yJhIEL?CVuf;+h0Q^6&$Z%S==FnF6Mf?2 ziiD{8Z#>x?VuZ#?yHK|T*!n>CdnyXZrl%D&heXwU#tE3=Q%+!}g!k_TCr$1_3Q{X* z+0ee1Su)y21Zj~8Y4I>M3>Qkld<7|GL;H(TGNNfUhbb2%B1na%G1$_eLBW)!lC0Q5X=4wjAaDp} zg6I&R0JxCBDh?k)3HYW3>*K%ftar_kS@nTFd7nPJ_FXIXFUz0)#{n8!>HsBx@izpN z08291=YwWuMgbC%P=Z8gfKJOl{q(KoNXKW@ z2l~W)9GmEO`B(pqEsq0?Hd(+K0!WZ+17@k~PEJm&%MepHB&A zI`F_npfpI5c*+&fr9MHJ)#D{1bZfyh2BsnvgIyY=gebF4`6$VPgL7yY!anddgk}1fhO{ND5 z0&DGo7#S z!svnIg8_Z{xlIsUT0SzX$A-tQ&@0}x5n*c#;t%si(v}AC2FVoAAmt;)WV$*9VV4P% z8Aco$us~+bPCkSZVFh9=&F7k9wBoLZK(9|d>p!UU1vDxVp*cb}oqCoOW5DMK zc5aq2aN}oakc3eoB~?Trm9AP`6@)kh`IitpH9>R+(LnuKdcAIat;_k!=y`H1| zMc>sM{mE38zi}EZ0vNgRHw`>PfcQW&V}80zBo(0)1VR9FdnyVLXSh665hxS50vB3J zMhgv?mP7=JOpQSvDZ0Uh2C|`TP)Ndv2Da8vQIjd8(p8IV3WCtEFo9115XT6tl0o3s zq7RV>;O;ixYEgTqWYq_Hed<~N_=a^8{Y3vRf8#V-V>WW*cNY}E9n}O@0g?$W1dvdh zD+FjVcq$jz7KQHr=|F)#^UH-1p)?Q?gfq8Oe~1SB;TbiMFQ;zcNeTx=MQ2=yAZ(ey zE{YDI;myDlGEnUDA(V(j05>f_AOCen=QT%aSmfMjexQ%*OWcq1pXhh_PyIK3cYy%z z$bE4>B>)Yige5={0R*TI+}eO_5}3Kbql^NR6*D5(b!-^Z912y2x)_7dfH81`Zu1Nc zS~oCh9;MMwi>QJiw#FeeG{hvtE+%mx&LM-v+DJ! zXH0XIRDPHfSC9FR_y_&D{EgpTgaGOx?vDSd2iPTmS+Zn80Jdte0UpyZ;e|52)j*1rx`FAk4V8DIpBB*+ggAtRhN%hh2^J=R z7BUcr@FA3-5*mnS%ZGkCMhosvT%gx~;(nArYro>3=uf!1{Ga3d?An0l0;vj$0&potkKmWkfC(`G<`5g3BQ#Z9Xuufohm!_V4Y=YYjG=+Yi!_sR zCNAs>LQDedg$eNqmLzB_PcW4XMBC!ktYQtO8gREQU*)iz;@qtIK;MNQ+n=?c&`+RF zE&u4hJ1PO(X|ezTafW~pz$}@oQv{HO)dpmf02CfQ0m3mfAO!|Mi<%>BQ^gvC_`@v? zY7s*NkId>46Bo9E(9jS~NOXu}v@ih_GEj!{p_G8B2Hb7SSAJ3w$7{Hx2mPRyKJ~1B zd~+?_bKN-qqJL`nNB`ZIyPE_^77!0G31F`314Y%v1|$lY^QR>WEDD2uGa}R&EER)G zXrM5nJfeyyMAFI7z{1%TgocJ>4VVz0U`c{zl40^8ln5(;yW4!LIZ`X`3-qp%xbM0_ zzv4fm|6KkIKvMwsm_pD!5MZ$ZjRFfUkMf_12$KdPLX83YT7P&CG+>((7c8PF2=$6# zLNr0*01iyBFacCDBurSj)~^Ol&5AzNazGAtmZpcS`arM$$i6Ek@5|aR`aDddzmZq} zV*u`%0QG@SyA9Y9EHqe*L21Cmo}xiA1qoxyM=2)PB`$Gc3PM6dm=L>|#KB?&O2`mp zn0$ynKoh2IK{-J8L&s>2*Cy^+^?}~CaL;w|&=}(UgZ_5;FZ%BuIY9TTXx2J_+28?o zL%>V~LV%~;2JF%x#$fS>ge(4VOM_+#sT(XbSmFXfs6%LIC=-%6Sca8_Ne1E&K13qI z3PKUB0C8JB^wTk#tnKJ;B38yEB&{aXR(@;^lYRTOiw^#CQn)(4t%3vdg^ z)AdP=!Ssh1YuKk~Am?3Zz!9}{AW)(~ibxRzLYmN!iei|M{88cn0$5m#KnWSFP)J#- z;Y0Kx5&=*RxZ9Sm{B)$|EG_*LC$MzbwY6f_}5VY5&~OVgP91QU_36 z6*OxC7Xq+b(+8UKrwi^=*S#wm%;!o=&PX8}7b*x14ZBPrzf%@UhRKIe0xLoc$nLfr z;HTrY;y$6D3m*@+=vVxAmp`h{6d($aLeOJP0K}+2yhIK9T#5QMXPj{%wL}Z24#9j% z8LTWbTqeXPaEyQeN5~LmfK5U?%0g+t7_?|GgF-WfmXG>qsgD&}M5-W| z!-j@3A<=8BowhoXiAReG0pqbz^mH;8cg)~Sp8SRrZ)*du2BwvU_NN8A?P@fQ4h-tJW zL8DDRL?0p%VFg&vG{nnJoEqo`oOiT^$<}_q+Bd`l@;G7x7-Y2iaC z5tRU_7I2rJ`N~g6YR=O1kgg*53-qpT4A3_o%3t)A!HqfMpXk3V|HS~94ReA3<|l<9 z`uW%?z-~~eH^>8p(qQI{OI%345J8ATFo$JAH6cF1%nQ39*ph)h!wVlmiOGsA=Tkq6 zctCf0aMxj1eW7>tpl>|*8Reho$NbObp9FBx|D*tu0A_5-0-oU^U=mOtRl z@be7%)BeT(SN}@@Gh>-hfG2KgE0+=z&MAD9`004fxte~oF8OHwT=+rXsEiF)F?OO~@jtcvrvWfOQmQA0 z03}1qN1=f*=T1X|T|pp{5d@)OVM3!rm=LQFSwM!#hw4KlA|WGa`WbMSpZzw72lTFY z9Ts;NS{8oMH^Q#{iM~5>Uu^L1@}K%Y3D7xw0)D9=Od3QGLIZYaI)tPQXP982B|uCv zkm4;LA`uYOEaBPUn>Ii6dk*%~xmp7K#J!qd=#A$L`YHZEU-sANZ~41-=vV)v08fDa zpJHrjup1Y`1T=_4Fjr=5%LGx?;%a~}?F$(Qa>OBg2qh9Sq7neTwK-CAmZk?yZ(3sg zqWKH-iTf0c^3Tv8^xfTz{w2T@ssFo7*wP?zVe1esXF}XU$xv~KK7OvA^H$X z@M#cC!;16mc;Fp(r|Ch{o2F;2;oe1ep>N!uYd`3_J7ze`Kk5IB{$^%7T~F#KyEK?7 z!-Y(sxABe0u;l}=4xrun5fJ?hre}Wk$eyboE$h9wyBxn7&9CfVh`u|0mJ=YvMgwg( zWjL=1wF;GmsSI#A(BY14&_JevFD+=^`tx}BoxEO4SLs&&TEl%J{)GPg+CPQ9sd!S? z`>ppiX;81Yn1pIVa)%ip;u}MThKYzn^Z{PM&d)%({4B)F=RNCy`5n+TJ!`?;>N}$25OkkzT1gp%1n|96o144s{C8@zE z4JFEofLKgV{gT7-Gp8RryHnoLg1gHFcLNCYbKy7XYusPZceAIa;#vOrfe1HD!qkLm z8W%Ez4|i7M;KQ9&dSnIc3gsog9MFCh;_2tWvKvc&fqpLhsr*;;?}60|6Y3LYfQWCb zG9*ky9Hu@@Rs_TVdgf;in~3Y=pf`8cyXGpID{8?#tA6JDt@%vlzpnkeCBtNb@@be* zS%_PxGK35f2hap2KZBZ|0de^mh7{uE+n(Fr4zSf3>63H1SvlQTz(eK^S{hf+Rp*=SK)pJ`YwC}&fw?mTz|ix87LVnF3nVHWFg9s zFi~-cK0rzkM3H;5q}>8Mw~Cbq208@JyJ2{|6jJ B;)?(P diff --git a/rostests/tests/apc/apc.c b/rostests/tests/apc/apc.c deleted file mode 100644 index 8ff1c00b6c6..00000000000 --- a/rostests/tests/apc/apc.c +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include - -HANDLE OutputHandle; -HANDLE InputHandle; - -VOID STDCALL -ApcRoutine(PVOID Context, - PIO_STATUS_BLOCK IoStatus, - ULONG Reserved) -{ - printf("(apc.exe) ApcRoutine(Context %p)\n", Context); -} - - -int main(int argc, char* argv[]) -{ - NTSTATUS Status; - HANDLE FileHandle; - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING FileName = RTL_CONSTANT_STRING(L"\\C:\\a.txt"); - IO_STATUS_BLOCK IoStatus; - CHAR Buffer[256]; - HANDLE EventHandle; - LARGE_INTEGER off; - - AllocConsole(); - InputHandle = GetStdHandle(STD_INPUT_HANDLE); - OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE); - - printf("APC test program\n"); - - EventHandle = CreateEventW(NULL, - FALSE, - FALSE, - NULL); - if (EventHandle == INVALID_HANDLE_VALUE) - { - printf("Failed to create event\n"); - return 0; - } - - printf("Opening file\n"); - InitializeObjectAttributes(&ObjectAttributes, - &FileName, - 0, - NULL, - NULL); - - printf("Creating file\n"); - FileHandle = CreateFileW(L"C:\\a.txt", - FILE_GENERIC_READ | FILE_GENERIC_WRITE, - 0, - NULL, - OPEN_EXISTING, - FILE_FLAG_OVERLAPPED, - NULL); - - if (FileHandle == INVALID_HANDLE_VALUE) - { - - printf("Open failed last err 0x%lu\n",GetLastError()); - return 0; - } - - off.QuadPart = 0; - - printf("Reading file\n"); - Status = ZwReadFile(FileHandle, - NULL, - (PIO_APC_ROUTINE)ApcRoutine, - (PVOID) 0xdeadbeef, - &IoStatus, - Buffer, - 256,//len - &off ,//offset must exist if file was opened for asynch. i/o aka. OVERLAPPED - NULL); - - if (!NT_SUCCESS(Status)) - { - printf("Read failed status 0x%lu\n",Status); - } - printf("Waiting\n"); - WaitForSingleObjectEx(EventHandle, INFINITE, TRUE); - printf("Returned from wait\n"); - ZwClose(FileHandle); - printf("Program finished\n"); - return 0; -} - diff --git a/rostests/tests/apc/apc.rbuild b/rostests/tests/apc/apc.rbuild deleted file mode 100644 index 084fb179292..00000000000 --- a/rostests/tests/apc/apc.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - ntdll - apc.c - diff --git a/rostests/tests/apc2/apc2.c b/rostests/tests/apc2/apc2.c deleted file mode 100644 index 163806259cd..00000000000 --- a/rostests/tests/apc2/apc2.c +++ /dev/null @@ -1,53 +0,0 @@ - -#include -#include - -VOID CALLBACK TimerApcProc( - LPVOID lpArg, - DWORD dwTimerLowValue, - DWORD dwTimerHighValue ) -{ - printf("APC Callback %lu\n", *(PDWORD)lpArg); -} - - -int main() -{ - HANDLE hTimer; - BOOL bSuccess; - LARGE_INTEGER DueTime; - DWORD value = 1; - - hTimer = CreateWaitableTimer(NULL, FALSE, NULL ); - - if (!hTimer) - { - printf("CreateWaitableTimer failed!\n"); - return 0; - } - - DueTime.QuadPart = -(LONGLONG)(5 * 10000000); - - bSuccess = SetWaitableTimer( - hTimer, - &DueTime, - 2001 /*interval (using an odd number to be able to find it easy in kmode) */, - TimerApcProc, - &value /*callback argument*/, - FALSE ); - - if (!bSuccess) - { - printf("SetWaitableTimer failed!\n"); - return 0; - } - - for (;value <= 10; value++ ) - { - SleepEx(INFINITE, TRUE /*alertable*/ ); - } - - CloseHandle( hTimer ); - return 0; -} - diff --git a/rostests/tests/apc2/apc2.rbuild b/rostests/tests/apc2/apc2.rbuild deleted file mode 100644 index 8f7b7652e02..00000000000 --- a/rostests/tests/apc2/apc2.rbuild +++ /dev/null @@ -1,5 +0,0 @@ - - - kernel32 - apc2.c - diff --git a/rostests/tests/args/args.c b/rostests/tests/args/args.c deleted file mode 100644 index 91b0d0eb406..00000000000 --- a/rostests/tests/args/args.c +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include -#include -#include - -HANDLE OutputHandle; -HANDLE InputHandle; - -void debug_printf(char* fmt, ...) -{ - va_list args; - char buffer[255]; - - va_start(args,fmt); - vsprintf(buffer,fmt,args); - WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL); - va_end(args); -} - - -int main(int argc, char* argv[]) -{ - int i; - - AllocConsole(); - InputHandle = GetStdHandle(STD_INPUT_HANDLE); - OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE); - - printf("GetCommandLineA() %s\n",GetCommandLineA()); - debug_printf("GetCommandLineA() %s\n",GetCommandLineA()); - debug_printf("argc %d\n", argc); - for (i=0; i - - kernel32 - args.c -
        diff --git a/rostests/tests/atomtest/atomtest.c b/rostests/tests/atomtest/atomtest.c deleted file mode 100644 index 740e13a133e..00000000000 --- a/rostests/tests/atomtest/atomtest.c +++ /dev/null @@ -1,116 +0,0 @@ -#include -#include -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include - -#define BUFFER_SIZE 256 - -int main(int argc, char* argv[]) -{ - PRTL_ATOM_TABLE AtomTable = NULL; - RTL_ATOM AtomA = -1, AtomB = -1, AtomC = -1; - NTSTATUS Status; - WCHAR Buffer[BUFFER_SIZE]; - ULONG NameLength, Data1, Data2; - - printf("Atom table test app\n\n"); - - printf("RtlCreateAtomTable()\n"); - Status = RtlCreateAtomTable(37, - &AtomTable); - printf(" Status 0x%08lx\n", Status); - - if (NT_SUCCESS(Status)) - { - printf(" AtomTable %p\n", AtomTable); - - printf("RtlAddAtomToAtomTable()\n"); - Status = RtlAddAtomToAtomTable(AtomTable, - L"TestAtomA", - &AtomA); - printf(" Status 0x%08lx\n", Status); - if (NT_SUCCESS(Status)) - { - printf(" AtomA 0x%x\n", AtomA); - } - - printf("RtlAddAtomToAtomTable()\n"); - Status = RtlAddAtomToAtomTable(AtomTable, - L"TestAtomB", - &AtomB); - printf(" Status 0x%08lx\n", Status); - if (NT_SUCCESS(Status)) - { - printf(" AtomB 0x%x\n", AtomB); - } - - - printf("RtlLookupAtomInAtomTable()\n"); - Status = RtlLookupAtomInAtomTable(AtomTable, - L"TestAtomA", - &AtomC); - printf(" Status 0x%08lx\n", Status); - if (NT_SUCCESS(Status)) - { - printf(" AtomC 0x%x\n", AtomC); - } - - - printf("RtlPinAtomInAtomTable()\n"); - Status = RtlPinAtomInAtomTable(AtomTable, - AtomC); - printf(" Status 0x%08lx\n", Status); - - printf("RtlPinAtomInAtomTable()\n"); - Status = RtlPinAtomInAtomTable(AtomTable, - AtomC); - printf(" Status 0x%08lx\n", Status); - - -// printf("RtlDeleteAtomFromAtomTable()\n"); -// Status = RtlDeleteAtomFromAtomTable(AtomTable, -// AtomC); -// printf(" Status 0x%08lx\n", Status); - - -// printf("RtlEmptyAtomTable()\n"); -// Status = RtlEmptyAtomTable(AtomTable, -// TRUE); -// printf(" Status 0x%08lx\n", Status); - - -// printf("RtlLookupAtomInAtomTable()\n"); -// Status = RtlLookupAtomInAtomTable(AtomTable, -// L"TestAtomA", -// &AtomC); -// printf(" Status 0x%08lx\n", Status); - - - printf("RtlQueryAtomInAtomTable()\n"); - NameLength = sizeof(WCHAR) * BUFFER_SIZE; - Status = RtlQueryAtomInAtomTable(AtomTable, - AtomC, - &Data1, - &Data2, - Buffer, - &NameLength); - printf(" Status 0x%08lx\n", Status); - if (NT_SUCCESS(Status)) - { - printf(" RefCount %ld\n", Data1); - printf(" PinCount %ld\n", Data2); - printf(" NameLength %lu\n", NameLength); - printf(" AtomName: %S\n", Buffer); - } - - printf("RtlDestroyAtomTable()\n"); - RtlDestroyAtomTable(AtomTable); - - - printf("Atom table test app finished\n"); - } - - return(0); -} diff --git a/rostests/tests/atomtest/atomtest.rbuild b/rostests/tests/atomtest/atomtest.rbuild deleted file mode 100644 index 21c9de6bd4c..00000000000 --- a/rostests/tests/atomtest/atomtest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - ntdll - atomtest.c - diff --git a/rostests/tests/bench/bench-syscall.c b/rostests/tests/bench/bench-syscall.c deleted file mode 100644 index 621b3a15b21..00000000000 --- a/rostests/tests/bench/bench-syscall.c +++ /dev/null @@ -1,8 +0,0 @@ -/* - * - */ - -int main(int argc, char* argv[]) -{ - -} diff --git a/rostests/tests/bench/bench-thread.c b/rostests/tests/bench/bench-thread.c deleted file mode 100644 index 6a8e4b95956..00000000000 --- a/rostests/tests/bench/bench-thread.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include - -#define NR_THREADS (30) - - -DWORD WINAPI -thread_main1(LPVOID param) -{ - printf("Thread 1 running (Counter %lu)\n", (DWORD)param); - SleepEx(INFINITE, TRUE); - return 0; -} - - -DWORD WINAPI -thread_main2(LPVOID param) -{ - printf("Thread 2 running (Counter %lu)\n", (DWORD)param); - Sleep(INFINITE); - return 0; -} - - -int main (void) -{ - DWORD i=0; - DWORD id; - -#if 1 - printf("Creating %d threads...\n",NR_THREADS*2); - for (i=0;i - - kernel32 - gdi32 - bench-thread.c -
        diff --git a/rostests/tests/bitblt/bitblt.c b/rostests/tests/bitblt/bitblt.c deleted file mode 100644 index 2a2c3dda85b..00000000000 --- a/rostests/tests/bitblt/bitblt.c +++ /dev/null @@ -1,139 +0,0 @@ - -/* - * Windows 2000 Graphics API Black Book - * (BitBlt Bitmap Rendering Demo) - * - * Created by Damon Chandler - * Updates can be downloaded at: - * - * Please do not hesistate to e-mail me at dmc27@ee.cornell.edu - * if you have any questions about this code. - */ - - -#include -#include - -HINSTANCE HInst; -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam); - - -int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, - LPTSTR lpCmdLine, int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - - HInst = HInstance; - - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = HInstance; - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - /* wc.hbrBackground = reinterpret_cast(COLOR_BTNFACE + 1); */ - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.lpszClassName = WndClassName; - - if (RegisterClass(&wc)) - { - HWND HWnd = - CreateWindow( - WndClassName, TEXT("BitBlt Bitmap Rendering Demo"), - WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | - WS_VISIBLE | WS_CLIPSIBLINGS, - 0, 0, 220, 230, - NULL, NULL, HInst, NULL - ); - - if (HWnd) - { - ShowWindow(HWnd, nCmdShow); - UpdateWindow(HWnd); - - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} - -/* image related */ -BITMAP bmp; -LPCSTR filename = TEXT("lena.bmp"); -HDC HMemDC = NULL; -HBITMAP HOldBmp = NULL; - -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam) -{ - switch (Msg) - { - case WM_CREATE: - { - /* create a memory DC */ - HMemDC = CreateCompatibleDC(NULL); - if (HMemDC) - { - /* load a bitmap from file */ - HBITMAP HBmp = - /* static_cast */( - LoadImage(HInst, MAKEINTRESOURCE(1000), IMAGE_BITMAP, - 0, 0, 0) - ); - if (HBmp) - { - /* extract dimensions of the bitmap */ - GetObject(HBmp, sizeof(BITMAP), &bmp); - - /* associate the bitmap with the memory DC */ - /* HOldBmp = static_cast */ - (SelectObject(HMemDC, HBmp) - ); - } - } - } - case WM_PAINT: - { - PAINTSTRUCT ps; - const HDC Hdc = BeginPaint(HWnd, &ps); -#if 0 - try -#endif - { - - /* TODO: add palette support (see Chapter 9)... */ - - - BitBlt(Hdc, 20, 15, - bmp.bmWidth, bmp.bmHeight, - HMemDC, 0, 0, - SRCCOPY); - } -#if 0 - catch (...) -#endif - { - EndPaint(HWnd, &ps); - } - EndPaint(HWnd, &ps); - break; - } - case WM_DESTROY: - { - /* clean up */ - DeleteObject(SelectObject(HMemDC, HOldBmp)); - DeleteDC(HMemDC); - - PostQuitMessage(0); - return 0; - } - } - return DefWindowProc(HWnd, Msg, WParam, LParam); -} diff --git a/rostests/tests/bitblt/bitblt.rbuild b/rostests/tests/bitblt/bitblt.rbuild deleted file mode 100644 index b73af244acb..00000000000 --- a/rostests/tests/bitblt/bitblt.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - . - kernel32 - user32 - gdi32 - bitblt.c - bitblt.rc - diff --git a/rostests/tests/bitblt/bitblt.rc b/rostests/tests/bitblt/bitblt.rc deleted file mode 100644 index 25d17abdb36..00000000000 --- a/rostests/tests/bitblt/bitblt.rc +++ /dev/null @@ -1,2 +0,0 @@ -1000 BITMAP MOVEABLE PURE "lena.bmp" - diff --git a/rostests/tests/bitblt/lena.bmp b/rostests/tests/bitblt/lena.bmp deleted file mode 100644 index e9916963852a9748baf1b9ac6093fb3b9179dbbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89322 zcma&vKawKP@-6s!8<;{I4aBE`G%DEWW8?zHjNC!81K0uV0Q9jj5Jsnj(W`b)EkC7u z2R)zTkx*23-}jro@#QATpUMnBas0T4NASP@AOGY3{BJM$_rLk?zx(h1^56gMzyJ2~ zzj}Om`G36r|Nbv8^iTRl^JZ=GI$bT-i}|u!d0Z^#%T3qMr@m;u znlBH-cC}cp{cpb94ZHnzKb_3Hc|KdbzD{!ivt>2kznnWiUrr`Ix}MEe_w%mP`EIt@ z%~$({wmvRaCvDlC=BtCRs#mwm^>MX1uR86r+PLMb$3L2ry5iohOK-ckyt7Z!UF-gq zHr(`{KHNODe)rz*--rFj_VBSge(X=52ko48JpVXdTKjpr{5)NMp05smc)Y#;?uX-a z-gm>b8!n6WuIu+*e^~d&?yGrvSZ~I*8V~mC&2H80)}6=wsyi$@w|QD_PV@C~>3+Aj zHM<`^kJq0K16?ri-t9jc05*$( z1%sgR^>sFx%)C0Atv8#!$3n$o;si9!*VFj`NAvZLt(Pm^s2`5=)o~H!zaQFm(-SM+wfc5X~vtTfq{(*tFkKY0I zyl1|3e`eoqII{TN(9Q15U9CTWM=YMFyEGWcBMj_eU{P%~T!!Q4aQe|5K6+Pj`B4~n z-|RkIr`Bz6kAwB#mM^`(zTQ^PvuRrOe+~?1$8B_b%2JLOdVaQQW0rl}$-C{wZ-575 zA4pg{%+L@rVU^|3^&2qQ^xble2fB5?T&!#C&tTx?Wipxg#L~fRzM0N8^Z91GzjeUB z?&tH6z%=*_Khyz3Zy0*P=<9Px00z4Ae0`cNdepI8Zk8+k0~-PSx&wnt2%*?u9QbAT z=i?CuHSq5YF!Deb5*VqVVDKIWs5b218wot|KrryI{;|e>o?b%&m$%=}yu7?Fmi>Bj zS@q{O-n;&^8OBln82%#+I@W)@6w_A=AuPMYVtrWk0l@b1b9epKpMPwQKX#Xq2Vj8p zHFmEC&j5c}bm#SI-}i?i*s|bbbl12x29f-F)xiMkFza%@X0_#fWtbOWJT{|z15dCq zft3}HFf(SWVViBg-EViBRkz*reb+DZY8Yd+1g%BBdD(9^yM8!z-OhzASN(2#SmeBG zSUwuihOfdK2K%r;{wprv6ds77&rVLJ%jKe5u295zQB=RK$L18q;a{BZc*H>Yi)SkM zasi_k2mtgUBK?Me0>Cyr5E2Lv+(}@>!1X7KJANR6BiIb*U|_*d76vwZXorEggD+b@ zj*AVR&VR>1sKAA7Pe1q9-@EJY;rw%R`mt?1!29n|LF0iE1609qgK#_m1ItCPGufJn z8KQWAXAdMEoWQ2q>+6J>3|_}~{osYwVqt{Vo9k2U%`EG{tG*Kkmh;61bM;$P&||S- zJ8YsufMf_T_8iCMbUhy~kkfTrULb_tkuRr_KXMg-L zoXZ!C7ytvR021EGgJ58|!9dp?m&-wiXH2ybO}W7X3NLpMRFsQnBZRP=QF0xt#ORZU z2yE|Xk^86O3xa_~zIILz001vQBCeM!Fxd73kH8&lhg~qB6L0V9`RXPAe6R0c#^cBO z;fiMr6azT#qy~OquwAWBgdcMg13bcFxtmTS7#0-o>Nt-Wh!<#&&m;Yt{QCm{o<0O& zlY-RXvmpG_5q!r$0Pv*)BLk|PuRpGDzqFT0+$(WQ4-l>efM6gd?*AhO?!eeLB@jnI z4s|dv|mi5O#pu&M-004*{h^!J6JOSWu9*7!zVBm5mfl(5K1a^nZ%Zu(^==@bw{UzZ* zG$9OltoAP|cwpem7u+$x9c+)EhuiP{?H5(R9cTtsjeUCHfq{?0z#D`c9h?4aq)aLh zXasBUHv5)M1Bo)hIO@0EFmywEPvlx(`a0e34hUgw3;OnBhqegeW%GXY1eN!Loj1g8(40K!pP$g7@K&sBl|R;g=W~9YNUO zLIjQ^@CzZlfBYtOUS5K8H@eyc10D+l#Q27#OI;ZjW{2mrBTmz%hA5U`U{>Tx{TKU#FX8w;x1v;Q<(+ z1ZV~y$!G8RgnWuGC-LS<0!Rh0tl`fKEDHv50(iig)BXS(Gy}Kt`ZB=`!*)j|=@ws} zZ(eNX-1@950Jy400}Ra2@ag1Agf(046BVwGBL=2%BC92}uv>JrV#7cH&@k|fgytRo z=7cXz*usH7asmkn$Fx8N1x*l^7`PCDCz_=UytIGwJi6RLE>&-{gf>%-{5#$Vw;EK=Ga7%1!C+2AQPG^Pat zgL_o?FAOv_c=>U;Vt`*@00W2P4GHKdU8LWZ>wW&v=F|lP5)p&>%{H-8q6!RB*ZdyxgJ&XY-E#Ef@nTQP>OXk|~NBqz~l@?-*!=5ON3=G%@f1 zL&-vSy~P6y?tn1x+1+g$H7GXx`NRXw^xrUm_hyvRdVjinaJzc4>=+uak<~Cz-9C=B zAi;lYp_}B7QQ8uQO*&4A|BjV8eUH36{%7%(Eb+R-{K3F%*>MXlbl5{44A2S7#d@{u z03aCXpyIgSoduz}7^aRLSM$ma!9ZPDE+go0GQd~{8>I{diCn)_bOHhSfk|FUnrOLi z7$BP$1%|RdR7lOW@g593TEfOZF+dDFM+B5W>47+cz~HV2K4BorysRHz&|-mL;Kvyi z+~Npy_{$3<=i&oYJh0qswyuHogMo;{KQK@L_y-0y4=TU|fx(1QCLl0*rZLLykbw__#j|!(Id@RoHI^c-Rhy zdlo&-gjXSR7n4UeZJbaTc=UW;!V<)Qct7Uml*1nE!P6VdKIYVlI|xNoo)8%L1xldA z;fnVM1E`Q30K3C>-*0w$gCP9%gMytN<%pL3OA;1yT)-F9U~vu5*si25qc9L)z(B4% z0f)a++W3@&;c`gK7%dTBfE08egzJM;Vqo@Teb(1V#+RDLnDOJs!L(fiWU@ z%Oueu4DbgDGz>I%Fh+>Q2J%85KYo*5Nq|Jatm@W+0XI7AZZII_Tkast|5rOac;G8_ zOeHova0lz{nlF$nN`P=AffjggbN&khqcDI02_pTl+g<0g4h}Pv47_;uVBy~38R?A{ z8Y(=t0iHJ@0oOl?cZe{c2^}x_{*EtbAb|nqfeNYs7044x1Uv3KXy6Wp#bPb7KWw(= zqpO`VD)xK?Gp|AhNI|0RVu3CK!Bs|D}T~9p}Q9@>dyp^Rr z!~+csUl@ol2oE$E>|lvI04jdrfq@njBs)|QVlW^8*<9Yo=#lkda>wN zLdARDpmK)Cv7DgQ5{!Z20|xD&s36vFtsFtc0uKRDV&LuzLIUA|F(|kQ4PyG%Dk=1{ z%P5=F@ORmI8%kYpVZhWmN=MG!aU(W-)`WK$L=W8Kg3%X55H=aG;|1zV2^;&A3gEh^1#d8Y3;?U;Ec2t48_a~!zLyq02re+s`FK6-PSrWf%n?YP8(J`cOPT3XXA2%@)ZH z1rN*3ZMr;l^Zs!Dn2}8L&8yKqU%XB;W5n%}c&uzrM_P{`r|VFy`5lI4V%pCzhZb?% zTJ+ZqGj#DXA@3y+V!ddCqzB!wq|jz9OCTvEMcDVN)h3xzPG@yJ-HHuf_uGTh{%E{p zqW)aKa?#DEp2p~{HD}ZqX*?Oucga4I!L?X!5JJHQunEF}CKNNWyB@}Vq*o-9e6p$Y za{Z5}@CyJX6umm?0UEmqVc5S(#-{Bh1b)Z~IBo?4`{R$p>F43}!3*rqKM$8*&YK>3 z`}n!(F@Q8cf|MHjF3$xA1I1l(BN&r9W)y%lM2?9L*xlnO2JTAW9uX80iUdjn$j3(v ztlVtxmWBKLpZ)HKfip>WGvFfjuK)oI!uAxJ zS)5Gz#GvKeg?SqU?hR9pV492&+UM(s8uFfc2@+BFluG4eM^(ZCGk0iGMgH zNjRDJN=0_Z9HW0;GLk+XAs849`oKUt@P_e>g9He746u6%tw18tA`B#86g2S&VS^B0 zO)V7+gyfgVgTGpX2d4=JW{6raxIH8#XkH)(9-9nkH3Mh9pa4+C1CB459Q?6LZHyap zwdl0>hydgME|U^u$r&=h9RraKW(14|1I2zk z!WRZoEv6a%VE}TWr2-ZB_t4GP#)hXL$)vg1qdOK;0V|!s&9eG6$fS#fnAaS#TzaB@7FUp zFkiT$30c3V9TxNfJSaRJk$;cc(JCA@SLmciL#eXC zKWJWe)O1d+yduFT48XaY4GC!J;n{k-e>X6V_m(2KD?nEZ41C#cd>oSiv3ps+kM-44 zRU5w$Ap{$mj(uq*PdF{KHj=>Atqr@k^X1oUagJ7Tg_GrEKHHyu#|`WKVt7`Ty9+3C z7YqOI%vx#L)M$?wn7cRAGrPS<4G&}*$Q+cit>bCCF&8jRXt3l6xazg!FwMYCm@|?g zWINR($HUQJDd5Gp(Sb?vH4LP$?i%132IDc9XoZ}H0pAcHl}}4hAnHj;VTOF^0oIQ% z2n>`LW_Bh37%`Bs{|yYG2+jp!PXj`{uUG4ia%}-; zc)*Ot&_tktQU@E}DhJ*$U2gYpMb7&MgAoj2g95;4`m(H1Z$4B3RmT3txb(=IWSTX{ z^)wTv-mt!7KxotQ19;#aDqy<}gtzO*didd*IV6>09w$?Z&Oh#epl=Y3=$e}+s=`0k zZ${znJKks`@k`@%l74g}TEGU*lL5!wZdD|J^E;rV6lexT=4!=XQ&9~t=Kw$)SgD3& zp7DTgVbJISPO2R{ESKsH-`X<)ox znO4$W0&}(fEn6GIFHrYD!7u?62LsqWOvN;M82hi9j{pO2pbw4ujUaQ_cFUDB-X{6K zk~)|zoK!)IAJ#NkWe9~8%OzxTAN$+ocHHi!uk=JDfzSH?h5=Mi7y!vH4E$mJ_Oy{e z1zZJy27`Q+3+8G!=9DvU7#VQNkgr5>!9Z^Z6=`t|4FJ~;^Cwuy@Yf(AJkZ?1HW=8A z7_f-oLxr$uAQQnLPuRGxN$vq$4WnSS=m-zQ7r+2tP$41yU%~cb9t;3O@$do%66Z0U zoel?&TcvW~u<0p(2oXAn2-G9tA7A1Px@=O+^Bn{Jq`uOJW0yK^eOr$?uI^pJK(WLF z20A|&2oES8$b5mp6&Q3fz?B&o^8>~Fv32|cbB`EkNFbS-^_eD;V0()rsA8c?{(PDP zpQIB0Re&7Z=Z@WXt|wPG>Q!KH{mTai97OXZGl04`U=YduIvaKop8^2|4>7l7R~=;d zgF%E1zm|jXxPn0zmn3X+MubGILCDiCOAod}hVa0>a$ux_$DC1O!&A+#tg6v42vdncLFH^%uMgYp zcG!Bl-wfB|`5+%iFuzU{6x8?Ez{wviZ*IuwA`wTruG!sRZ14R3m{%K4>Vr9Mf>8J( zF>bp}x z)yXp}TH952Xy1&^?p2EHX|)O)3mC~B{|5|=HKi%2UhP~%Ze+@H_k8i>wNcsJl_v%S zgV7y?5M<|=Lv!bI$zk~~^};n_)!`atrv=6^^|Ti25rJ zrg~7*crRZ4;(6+h{nQ<}Jn}o0G?pPTB+-6e9<2WS?*2UZU*0F-{p3%KZ zEeHq5KWB1MM`wy~vrH;!z;d--Y^OK47}AMx7m=4nkB=Ipp&d_04BY*D!$2HRjkxcR z)x#P1%>#D2D$+(GuUhL zs2Td$j;%*)V?PVi9>+xs1&{hv^9XqagZP3!05DD)B~RG&z>b$JNW4*F%n*YD*NB0KW6hiY0f0McR6lz|Fwl&CKMt@fj2f~uHN*dW4+=~i7}S(M z(<>Dy3{+Zp*nRZd_h0}LSRW@0RKdH9$|j!T+$qR67xUWKuYvG>7b7Rc^mV~G(7oR< zVBW1L%e7V5=qYzR#{+}Kl>;|~3Tm)hbCmW4gF6xeiSa#8?x5HJ3|N0`_~fAnYWDCw zlLZf7P#B0W&`aq$$)D|Nx#baDVKKw1cp&!@#|;F90Y1V3yHkBU{(1=nV*g%*2m`#p z#!Lc)m_(jT`;B8OiQW{9Ot=}L!=itC`%pAdb4I+(oMUZN;14_ob^7h!!@uDned{{E z-k&}%3>2a1+uT=zXx87hxWEi@6_MVppT#D@z!wR?KurIhnt}U)aNyBc2LLo)8^BA_ zr0X(1a={~popDEBkEw?-D|6?82L>unSge(4qlN)I;IFi@(gMH;gJ$&ab}yWa^GczG zVvjEXK*AFSQc{=zp{+A&Yt5nuPK)J!HtQ-yuf}V?TnupscOIw%jGYl0!|U{gkrhZp z56l;*-Ja~<7~2TJcToofVUo#94UOQ0Zbf65E+H7ylgJS(u6|$dJ`^VFL&KioVJcJ* zU+^$-x^x`-kAu8Az9B$u7#NAy({&B2jD4jm0Khe6_*X4i0FYDw00aY#1oGJ20XEot z%@U%85d%>LXd#jN7$-)volu8TRRqrTE~EMf5+0Z5WMSaWR8JV-FuVGQffh#~H1PC0 z2Ixjq`z{3=9ts<=ep3r28Vd#y5|NR29(e!q2!Hax4hFbRvoqV_)O>;A z9|1t-%~$IcmT+tA59HH`f2U0^7~`w;?Rcd6Omx9L0BEbZyzojYcrg`JtOi-Hg<0vD zIR*THUbfrg_3}QPf14(gA4otFl8Gw#GWtlQ>C$v&Vc@BU!vL-2QVF1YR zFB!kD3Zmn3B}X?<2C8*YBjW^qmnsDbVZqC4l_1)f}D!bd9 zBUB0lP+WxXMgq}1e#1a`Ah98E5>3eufX#@3;C2=ahzsPP$`=F!lwoEM8|T9Sk5EXs zV*?2^ijefU69NfQrhoDUhX)46S>sSa-Bf==gDpQW3#Um7Z??lxZQ&y8H+PIxH#k!d zkStbi%}m0S=3nUcN#X)tz(OI@!N8%@RR?)hnutwhd=P?(@Qo-zVsqwW{aV6&zT54u zTPq4pGMslD;U}BTA0cT8KQn1~Egm&G?qG3QH0tONqSa0$T1H8{Evq-5qub0|m7AXfO zccFN!Y7>tKEkNqNFi>8=YNIST!U@51swiwN?mj!}ClpIY0>{QD81W-lQaArTnB0QaZR^C?Cm7NCqb?mpeJA%jF&X46D=a z*Nd7T*os3nSdhQ==*eZE*lgW8bA0-Qfl>wfv)q~f1jfNMHNO-RsPv%lziP>d`O`=O zv3pD$B~XtK0Nk_3&~j3VYEo;q*k^N_d+hDWn7A%GobU_)S3ZV0rp56< zr3V`iRB9+NPMlbnfq}k1N)-lmqv~kG-0*i03=}7{lTR>s=z+5P_sWxiq47XlYt~@k zm@p{Cd&6c%y{V$uHp6;zJiIqI+O4<61BR{@B^z0+<`Hn5GbWCM0Sr>>#gP2A&+1VK zfrq6*XgT?I@0~*ysG2MoPN(a(KTj9OZoU6}|9G7av( zu=wV)JxPLuHoyx2r9w|4s*wb0_=hM)U_9{vNZbq0T5bUbYTz6DqabXl;}k_?wdrxA z#BMRfmnD1CDNXGAv(Y3*fC>yu^&7|mz?33bsv{x`VZfP?;9|iY4C@Vb#7C@BC&2EK z2AMd>?ej7QWM-Bqg4^rjvRa*feEeV?EIM6pRo#Q7dNcxKGV{-;(kFFEc`PXAOtrB~ z<4*~~ba*hp*Hlu7zM=z1{x^{|>cCVD6$3;Gq#6FTHxV9Cx^uJUj(32HB+V>D%JO8s zGVfV;Z`!7R*Sh{Ki`KoWWzso%GL>noo%JkrdCwS#%Ke4`*O^iO7Y1~GVPKGj-p2J5 z1_Fi*{4Wv+0~9dsNEn^M7$oM+vHqjQ9eDbMfeH#59+LQqgS#wO2ZGKL0}KEIA=24q z7%mdJ0)(WFo1ru0n=qS`ZaFFAL6uSS^SR02&T7F|_m-$oPyh+5L>4QOZzE#xMVsUa zm;L)}{We`5HmmLB@-bcXFT~qwdq`2%Pt!@0LGP~BS)sGZxfMKayhLV!OopzGE;uy~+hpsN(zM!F+1Amnf0KbihfJZvD3Nul&W ziGd7f4B&idAq$b1*!M*gun!Ce zv^BsRXoG<;z$S^onkR~P2s0pC?+k(Lb{Cb;BL;Gjgu!{l02ow^P)08?Q10N%*3Bt= zk-&ou!UIMAS!9` zfUDExmsAs3aEC!Tf>8a4hwwlnfsFc$BmLGG0E*JR6Mo)0=?Fjqt{?O}G662EjnQ*aHJ#@W4RO zqSHhmd$ME?16eVOlp+i9Kyw7~3zZ-E3j-qnoc|j8&#oaD7;A?T5;kR+*l^sV@>Fqj zpDUcI@-hUrYJ}(W%=ve#fzdgA+&Jzg}|GIy^KoQP6;}J__u#<&d?+ug8 z1EsWas1*m(*B4*at#Bj;yjt*jl*QN1rL2F!omsD+0Gh`5LXDw1;?_2?#5S*0R#~c8y*;M z#5+~i>9~z?VXcsezLWp}fNNo33=AU`9(v$0_D4zZV1s8WC{#2Iuz1xKH(yZ8&F=e@ z%A*?l8BL+ne!IOe$82W4cfYZMmG+b8o@d{Hq=o{CSef-1v>x*m28?}g@XkOY5^)L% z*Z@UjE#a%!NB2NQ?(}%LsXbv|QzUW)-B#~yL?wD=ceu`0CxFS^LP81`!`$h{c94_t zr-gxBOkuz(V|k%DF_3)V7X}dB9Ro43!BvJXFc1Sx{0Az<3?&tiaCrEZ#9$udG)F`g zv{Yv1WOwnZX$2_)mgC%5uPwmDT04u;K>&}Q$gd0rU}1zV8lQrKXYp}3U-kJ$q#f0SuV$}05Cu&Q1W<~ zp_#S6FDP>+=0*U81jp-$!&o0Y0s!Z$f`|)PGvPRkcz&I79ejOm)|eF~!Jb){|f^#E-z4y zpzu&n%kE|IN6M%PMUTON$)l<&S4V1Ho@Vbs(#5KxR$8poBx@F`P`UCgwYR_*31pb# zOBWpVR7yZ^Hw?Jh!gi7aqH;U&tm7*OOrBEbCk!-6@E>^KI|iERACKQKfC}FJ(1evM z-m^tvV3S0_e6!im?HJq2!R^vD8@t(0W+Uwr!B!0bIEcVt1VgyOpiNaFR4|4mW$Vor z4AvbIATn!LkeLp7jp|!31ra72vk%YVu)m(KLdC7f&c$rjo89T>>q`KWUV_82c-g&S zVD-QN6|qhY?Y1I`FxqwWlZg2x<^(*#d!)%@xa`tn%(O$ z!^#nTQX7^_d+=am%15bJ&6UR>&5D*m)z<^S#w0Xa@YgB*E7A1?An}1&x z44Av`$;Gab18jJSnbxaytiMXl*fOM{mMqC4EpsJsf=mEpb*MQqj1lt@jovuaN?Qw& zk0+gZOu`Tsbz3X-3;{4$rm!T)xwi&@FAU%l5dj{M(yyRETA(6=27rcvhuz168v9KD z)QtC*Hu)liki$q3+ub`Cz!8KKj-SWV2R5)=E0SQ$5}*P`r0r?NTwX8$sA(`e&Gb~76uY0{(*sW0{}4G@$el6&tQm8sXXCddf-u8UcMka5TzG`Pi{5K?_ZaeLvOE750BWSO{@cAp3O<_mH)de#qisL!@Uyw>jz3OTmK6rT z=8l02N8nFGLV9x4FkC=jaHp?`nSwL`Gz^r~A%;~D*;1@9;HA+Q{Qt$k=^iFHxF0|B zK&>#!+;KLi`q=Ep330w4`}Ww$t?_`25CGJe5)>?!hsAto)NQbH1T~hk`j{`bbqo^F zg#Rmg&{r(i6rkgcl*;bF9ncT6xc)%sm4nIB-FFz6*oT(&ad-ld*=v}>XZw7j-&x0J zXDzb90=T^`)82o-yujPbodh18nIVRwh!$JYmB`$+%m6Foz8=Yer?{X7buci(pzM1$ z{fGgjBRTWL4>iBQp(w-5WC$IXp4L$OA1iaCZlMK`vWT z^dgiN+X_{TccB^d@?~tHLZ(YyS#O*wAfybnH7B2h%*tW}Bc0xZie)L7S3xoR1e2DG1u#> z%kx1)CK$-DLP~k+vRv)JeT)lBD`Rty1qed?Jn}$u{eO_a!xxknXuco=KNv8t6q_2? zSH&_ld34ib0zkE1`@FOxa1l_snv>>*qU)Hv9Y}IvmdbIMCkP{mUik;6GPm+X}=ok@NAYTU2jf2Oa{v-&| z5Ws{;&{y1tx&l?!fx-T|KVD_&lSo7q$-2y{KQpX6b=j40aOGPuPL07};7Jyi4EO^B z{b=;kfei@)KnIWjEyV!KBOU+)i@;u9Rxctxp;OY)haiNMeJBJ;T@o(JFtX66f&@FJ z)@GyygCMpnzA9g!8^Z&d{*WM&B-!q-95GE;LPAF^GxIxK>_{MWoB}h`%5emb1|fg6 zCl^qaMU56m(#jkSgPW`?S?+?R7Zo%6UXarh~2l_1P7u4j3jrPGn1flWB5G_;G zq+s#DoeCbKKC}?Kr;!0Uh+>rXIoqFyt$BaKDUu+mgAAPbP%fswZA~fKj`H*)Q%<77 zz@WJU$T`XyNx13T!Ywuk4DNd1fq^tf!y6(%2}Lf?88-lprk*;K+*+I zRPYxDK*D8wZ{-Wd8N(>U_sS7P9wa}IdpQXKQcISU1vXIVbzIxIg({efyLT`Et9-$7 zE-nx;q6h~mB0_P<9}GBs2pKr{>Flg_$ctj&uT*-3tKm1qp0|Ry(rUQIQl64v2K=QuYyqR)JlPKPP><*vik!|cISg-?F(g=+W z{FFw@mb8PStWpKJ+Kl>8qONnN#RFsPuo4(bk{I~pc5@%x0e*{>bwZi779IRY5=gz- zpS0kTv_p76IPf5W?|Pu(f+4Y3E~ztH#2ruqEF$3QGn2S;B-frNw&1C0kNM^yDQ=EaVQ ztO-BeIHBXVm;_O;<{N7RN$y%CNR#_@!a-a>3W5O>fB{1<*}Z~6Pkpk>E(AN|&vNnF zd^Zw+{3hmEjcc&*1dZ1em1HRi#Ba(AQ6L9V;XG`=;4&=ej!;y}aLbI$dUw9rQp(@L&UJzQ$1Wh8o_4KGwQYA0SxL_^YUYGg@NPo-R_!r z08P;hnOP`3S-eqiP9?*EtE!Ne_4$IoFfbJW>{JlxHn%1+h5@~zuX3;)0DvB_&)7F# zFsgzl805@fV7Ox--alg>^^LOzj&(~F(VbF_uMb72rtmfgz96~c_2IZX?o@-TIGxM) z+Bo86MG1*vTd1gnqvF2g3~Pl55=b%0(hQ>j!PpN8AdKd?0U&3pv96D#f-(6bUS_>s z_xt@DA~nV*i=C{j?xHUIQ>3Tvak|{C=%&;A^>W4ruS+rS#8>+_Pcg|#8Dzx;`&5xd zlb0_j{Z;^ooNKKcu;M#kPzN97D0Ais3F#ayqN2F~<2pn8++q!ofFFBQp3k2j@4w#O ze#Zp_0HYtdyMsm@2azsZhxVfhgM>s$p|4eSh($MNgCYgm!?BS-hE8^A1B5kTm`cV% zOswLRJBUXJ8$>E3U@X&fl&y_Ocv6P+Krz6b2bvyGJWxE4LdslBFu)^c0A?0`2(J== z>;2C5A)6frpz2+c8e@xyIrp`Mv7(WTYd7VJmryG(><9+i&As6L7}`ti4dLy)QztlZ zYdk)`&?1H40quk{=N*MW9oZ2jq~UEAq$zIPoRst^EjV7@ZTNP!Dq#YIule$EUOpJ8 zg#fxsnvTgbew#I0W*|IYe!p3~-G~tWkl_dh>_@9+s>{>55p{vnf?U zY(ziHl?4DTXQV5NH;6_jmFN&BL-v5We3(wkw*2*{t4rZW(wn@I){FH=3|w2F_aFfW zkig>oHl}aQa>AUcj2~YR7*vGVU=VK-HHZWXU15d{d4lkE`}O|*%Vu=QU#dzJS zzAzA3n25V3!Q&3TVZi;b_J>;lU>Q*b1?jhjfdoEsZ94vxs*>)QQ6IaH;;=mhfCn3l zB#`&ROtmpjn9M*5O8?Y^mk|TapTam%GS(CyMg!F*WAZ*X| zYZ=#eJFUg$D>>lN2jmTH$QKww0^xx&YsHE5q|fHHw^erI1$wf3f|w;8-GX=wneE0gCc=v46OE{*6$cFT>=l2+#|nx zizC=x1ZX7~U;tO7MO7JeWlat`V0d8QOB|j?*HBL33kL1!*L*=`24J9C@j(1tX4$H2 z0|}5WG+ikxJb(eVwff*JStOcsDNLr;2oC^2^d3V61|48H-~}jw%^I0_brkIk)a?F9 z??VM8i3d0rw_kLJ4RV`SNyjUNEA4Ax{>>BbaT8Un&z-mrLpYKkV*4@H}zuPp}P3q%L3Pck(O zZ~4(f_*1=31F;Q)$ORZ32e0vwzAoO~^oZo)QRjV-|Xfa9pJZYS;af3ljnYcKXjo-h+ zfZ-k(Xv1I1*BMax;(?-(jOhBdz@TAZ_sRM&014(b+Tu-AP#9$7B$N>wrr52n;c9V)e>{g`)SxTl0y~`fU9HN4L z-LvoX1>bF!wcTig3Jd^%tb#1iZrJVp;t8$`k1uIKtY}b7$xEZ4A_!n;AIzEHVJ=+2 zU>0`_+~WSNKU{aa_v`uHR^c!9zMfDbJA)1ktO6J@fSfb2iwABQ`xP5HXwB0BB&vBs zV*ns&ZaqM{=l?6xyn2KIubL^i_<^d=->35j^F^udq6aEb;8O$%1~?S}OlR+FAx~GH zE(07DM8_rrpbBTFM#7v?W$H%j7Y~feu(^-5eMdJ31Jiu(ft907|r4CH{I&5uPMhrw+Ahb*GfO>F-%UA&MlfIt$uCmG}n-o%4c zzA=ssHWCR-z=%g%q_P@B#1uq)>WeleA!j5e_hBpZjgN;YvXg_aYo`AKK%Gq2Q6sCY zasQB8-tNy-B44ckKi;!p_{+-@L~FKAjxK2;+AI#8JE*`d1HX8{s5fAn(QP#J@C8Nb zA%{=_y+m7%lLc%Vby3Y2yzTZM0z=s$!K`0_No8qmO5mk9BY(Z>O9fWt2zFdp$z41U zU+-REpt3+SC3Y}S3;ovRCLS=*1JMuTD9ZpkNEp&ZBL>Dek*#CyhxH$(e<0y+474?; z!9Z3@;sKX8^1w3&YU}%*c>oi*U3VJnb3UB8hK>Cjmwl}naVI7Y)=Bvq!S0R#@B`Lc zTNK%pW*E9uma}Ym4XP0a7QJ&UKPM>p4@;2pGnZZF91~zZVL(TXtp-Joeb40e#g&`Y zwcT;%9R04Vg5<;P!*1cbcQDY~7&z7bMcN!eFi`P++d>2$P(%SE`mMDJ?tpSHFhs=K_4pNPOEMIUDCswFf7`O|AKQMqI{>A`zP_<;a;ED~OFd#Mz z59~72u{>BcSXs)g#O%t_0r5+a5RqekxwC1f5=7URVGh{A0D}&jVTviF6;|Lu7P4%d zg=VlzEAa&!N56uG6drRQ8`&p*VS)nKI!I_vp~0YGKrf^elPg-1$?wyNkm|h30ubv! z75ct^y#GM^FR!>~8vw+EvtWchi+g0FI(cGZ6k)Ui0KjC}W~Eq$lC5IhvO(=V&I>l% z_mmQdBXEE&tU-Qz%dD|K?IYgoZ;kvPL86QHgjPk|-0OfEi|W7eKpA%?BH&Q;EfNre zJ6X41{SaM5IV6m79!}UdrMZa^%L~B3Q-bJ01rG*j{P4iQJvxXUxW|U)Y_-wygqd^c zd1e?86r{xw$WmS?{g>>>Y^0NLG?isyM;_U_06*Vj&QyGt5q6cE%ZeVd&?)q8Q z0TO61C^pE`9gna|1VJKl5HQeCG-9BTQy55}Xx>rbGd6f(CVQgOoRom2J$691JmGYD zyS!OWdzri<9~~7KROQEzlGXa@#5me6YMK2j$jceCXSQbl%x0r@er z9x#v|OI#fNGkT3g$_cauM6AyjWS5~*hT(z2z~6e{!3GY#Fpwl+X~LR6s@M<)4!J@F z7~e1u7zo!is57j*Dl|*=*HXDa&jjk|6x$2v{BC2n|IE7G>{l;YH1ki6$nnNzR;rN! zTL9#f3)O}lBzQ>_AUs@3p`wB+NXu=GC2Md2{mx zF>Z!7D~ALc27v$l!w=W~@R3aCWfA(xu}5Kk;+L@wr_Y)rQ9w4DSTX(I81Vk%={<~U z`Yc&EZwux%7$^<|m_Q=4Dx!n@uEF7p3K|BUVuXkFA8c^PKuZ+=i2;NUsBu-+7ucGz z@`Q~F+P&{r*e4+hU!F5j1)E)T*RrDqvp7z8 zWyia~;KQU+CgP)S_iYqILISsJGO&+4n-6S6-dF*rNjYAxpK?ChLBgk25F6BnKch!7 zq_{#y>VgtcLk!ZA;Tw`&$9kE4A9TT1Genjs+7Am zPk{%XG0Hb03#vsVRE)D* zEfdiU!$BRmA~f^4!%=v}lfJcj2{*!;3!_%?KLX2sR-T3jfEfvRbW<<{6&|5t9Q8Hi z+c5wv+fw&7BG6;1j^&_%B%=uqWrtjYKCx`sxX_s-`sE~dbUj}2!!=$w4e}ho0)QV7(gbdCL9|WBX*Cuat$#)Fd#{2-ms>>^KmyG)AI$n(=-R}TBnghS-_Ws z;X%T%VW6xWTYojC|K7p_$bT##$>fpaID!&Iwmr}lK75m|Gc5i?d}7mAUBt-Apr$QMmlm>Ep>>wu$gC@1dm`prjGOG z+c{k8T- z-2rC|lt1l~Fwf5YM!#gaL?>foqU!zax0(>s!Kwl#6C+|sVQ_Y~Ilx2l0Pn!3+(eGs zR1$tFXaSh4k#t{mBjBX2s9O86@bt<2!f21jde&&Wx|# z-ydfRJk>wO1$P7R_^-;$$Xd-{Ps-@w1@0%uS4Up}1AN?=AfgFXI}pY}d-;Mp2AV2p zFer033^Xw0n6{a245;Jn_xAil*|Sg}ezTEne|??O_-CbJh-+RI#fr}Gf!RXY$)mUP6gC%|_qR{Gr(Vt^Bg(-V^Z-`QqWq`NrUzyT-zM4PH?i2`8Dhzbq0|V`y zjS3#`PY(n$WY&=aj5|oF;YqHb(nMq0u<#I}_=JaZHTDcHX8x#9vTqxz*DY;f}v z-iITORd)0)#KQ)pN9vQ4u@4*LBFJn#tlL-1?)~k}UKv!G-`ewcO-jRn+ex4|CZE4B zV6sVgsHm7Qkf%b7U?AI{FP}<{^)kS_-APbiro>voh7Nhy)Pa|xXZAN+06pKXz-Uu?kZoOJQrP1 z9T-T1bDApf`Qn&fX>@ln9=E$sgK@wAl$y)vrZ=o%*S)Xq#HxhAKrb^lHfR`NaVB12 z>9ULC=%~Vmlirh2uW_bffWW{&)+CVaXrvC@1Vn%QSSjb&UDS1)&+^+6zvqEMxTqAm zDNv2>4GcDM)3dcHhGK@G0#{H4HI|VEF@R>t8*yJU#=$^x&TmzPA~~ENH*7y{m4kyI z@r`CCgn&Qsps$($n7=4C3=I6a^mAa)Fr0aoV8AcpS?3#77EHoGYvbGMPV3mE<|Dqr z3?p{{1C=*EMG4#s%<4E}|G9++zF{B%LaQltYhOIz8vc@n4>1ty-@#xrE-=t?%e6R> zHkK#B$pZ7)`Z63oOA>4Z3kpJw(;*S`!Dz;f3r3VZAp~k+0$Uqzz+iwo0}_qr<3ws% z3O(R_-eA!42|6&xfrq~GaSN0d3v+HCrjKohyOslyKsK{1Wpw$pEJaKW6>rMVhHKC` z->t-Yazu9|Po^MhqJg&Q=@bjTBn|AqT{`g8LW9BpihI*_O%ulS^~0uS8!bgQ2Q6OU zIP7I@n+3TGLaTBD?B2Pyc%m5k3j;v1UYj%o9)s%(18f~(@azQwn_!?E1aCSdDMS)j zpXjGdf&ut63>|#4enUd@1z&n#tRu2N=k+@V$`?oxR2fOApjMuGEDaC_NYcAnNWkt- zwH-8J>#4kPTxZ8G;Li(z#5Avy$&1u&3JQ)^j|nJo4#O?Wz6}HH>M2N|g`wZl)$H4h z8$y^Stl$?MOlOE84mVqP%}iTv)*MPHx`|Q81?z{^kaU4uO|nL})7kv;EwefH0k#$1 z)sK_Di56XR(R*e9#d;Qyde83g!$}e={Fa%%U2=T}wLR$8##(9*G(DLjg#CvsS$^sG z(0=q*ZE9B5OCXrqmiz!Dv%OhBZCRo`)gq9qI1wbunnmp0CQ)SL0pzA(w%EE{NxjpX z+xr_TavX`>)|6#!TBeZjK(#vnzMuJqfkcSkc|eZzD>g(0!9a>hf`M543j+lPC#TNi z1jS||rfQ-md;*hBZgy8qj%@G-)Ix5z8IX5Y?JxR%YJ*f+A1DlUH|}knr9E>8rHnQtP~UDm)ocy(Z($U+bueudo~5_I)xP`flhCAFG~nvqJ60 zYuB$%oa}t1_Rl70)~Xn!?k)_L8KP6lB-}E?P1Y1|a{f?lCPJZ6ejj{nRfilr822`Kw>%b$RYe#*+>V5R*2p>p<%$xQ20u21v*x z1rK-!Kx9B+U|s8WpLrlDf;$f+HiUs1m8F!rB#Rz7qHzN8j)8`U$ilLIJsK&-zAw>S zjO-=9nHlHB0Uu_=Rm+NZAN%X?6vQf$Ck*ntjk;PI_83$r=rgFp0}DwUL1MZndd~q* z5jB{6PUC^rE#8oW5)$i$fy0$7JJs((=gI49XGgF8&C}!YQjYH?S(NRb?DQ)$zn3>q z^$~tBQ{&Mfa!Ia-j%~BRv3{#FtWv{2Fc4rg9yl8Bp#rS|poNN-8~7Pqxg$t8R`94d zqP_1E2kjowAa}FhpQX5?6@!6*q)|jL@HFu2Bf0Usr-nmVw5Ac0#j-q5!h8%3GW;K{ zA>j)H$r1en1J67F2IU2~fI-isW$bHAKOP_i6dE3Yfm(wA44Un0@SgLCG?4JqZzk`! zLNnvpTjnUEz9o~g-$i|Srp3(&%h8oVCGT)TBY_&`?U;RWzIOsf4UKe#GYta}Qk86( zTrjgNdgOrYgRKUh_SnkQk@5X0(E&~vNCH#;Hl0q2Uf75ec6Lm);5XBMvVXBYd7qX- z)8+y~{#ug(n4ydw0Hi$u;Ba;Z2>^giEc56XFenYbExu4r5Ez6C+PxG8F8=znOe(Gj z57awH^7oN@iV%BserGs7H7}q=$-;2kw>9wjcjI8aBCw+CfyolwSmrbqf_o3_wmzCwVDnqC72_rziD|839=W^-{xYp#S%>ni?EbL>hHDZmDH~7>KqcNs@zmP-mSf{i>r><$TO4K@!9j0aqywcw=;@c@a~ zEUwNl?Fj=E+xk|P7unT+=*CD5#|e;Q^M z5F`xA0@Wm(x0}wrU~EBpzuEPBc~LW)oB}U^|49OK3K!v|^?f{o>E@PXgVG8l1BQl& z$bc$8Zd6bh_$UnAVbJi9@g4>U|5vMBZ9Nq^zN;=Eh9iM0ED8Y1)>6v!iQujnY{Wq0 zf%b;~fC0crFHu2!YomhvidiH!~m$|JPEKXs=i5u5jC@yGDz0@A_*CQ^S=0&QDkk5J(n&||!0 z){*7niv&DUbvrx&v%x@6fgf_dd3?kFUl<5ixN$r}LMZX7M1cV%iXjP}G0;3hZt8&n zp7AaSA8|opAnH24;LZaDfKdkAHQ^ltlt7CRnKhFFC{Bu?oI z*qrl$0d{W~Xt(L{$u)#1v+H-NF=7s2~HshJO)4QUs|XQ9YPBBf0Ku zM4(9y+(hviu#{f;f&xHE0{q;3LCAj?a{_k^Jd`2r*O-$*n<^-4${8~BmIk*; zh5^Z?7DvP{q-X>iRDy_K2nHeoM=>x`K{)~zmz%mr1kr@_p{$Xihiv7Y7DP@Bb5{=4 zENDLks8esi71p>83Al1^Yvz8Ug2x%}Y`|y?Ictf6R&!1j6b1x|O%R?E4SlUU1^@{n zt&q^>j1tNvW7BwGl!cWfwBU3Ug!eSjSFWG}ghU4!!sY7|Bt{Sh0BUto9&&j5{H?}d zzPZHiG@-$sb}+vt4I3CF%M@lv{jG^ek!kj(US)uTgz1!o3GoY&h((q2TCLz!ZbDZC z5|w#gl*JjoXV%&ytKL5|zBmOtJgkRzl^%zkJ!a(tDd)EgdF5ya6^5!0j`>lo;34`j zk3|SoA7~t9DkLF8d_e_<6$=1BaYBvvxQ2v;1V9`?;)0(r06b!F61DCThUErh=z;;k zdi1w=tE9)>VEMaT`Is(_t-mZj0;4))gn{oQdJwmzGf6&}>mh|KE30`g&yLeF2pz~O;7!Cdek z82H;4_?{gNjp8UASjLy`tnU2u8(b-e!EU4CxQzs$Qyo(CRzPYH&UrwR`b000T_Q1ZZW+AIuz zr~Mic%>@(y+<)plbV578|MWoP1Z=P$pond|;t=KTx_$K`k34zh?(Hr`bs6J+BV(oC zbkO<3z;B_VvL6{FM$upfi^4`$0_G%<03IR>lCq|XT3X=van}Qph$RUE2@NWc1`d%l z<6CX>;`+xPwvxshY@lGP>|tW?tl&Z}3&Eo}oI5NNCdm#glcv zbtV{)Pwod~^#fn|fhPsDi%rfee1mM-oa;x!% zhrpnGfdje3iX(Co2E>mV>WHmJ7Z3nEFwl<8Qo#TTQM2=$W*@5os`80NS7nfcZJiXN zGgc(DT-h}4?_u009%$qJ>9GO3C}Ph3{N&6OQlESg4A^NrKOO?Zk%cWlXc(xt;BO3w z3+@=;5&p!$zW~q(A@YC)k^gA@P(hxGfHnf&>-+EH_4jc69F9LcN*1AgQZODNo~8Fr z+2csW(b43k1_m<2oO`cMM%T5xL8SsRU09~a3}Dbuq3c2jI>Ac`A7XuvNL80c59nB< zZ{mEsEq@Viv9;O+Z*0tC5r#O^0FP4;Gafv~^bd2hzVm63i(0a~sbj|*B?S$CMh^)% zILIKS!2mHJUap^G*tn$NcC~5pTjpw$p9(+f1Op*qV=Sw=$e6plm>bEx{MF2-mphP$`0zE565uLj{J0yw=13 zRBX!^IMXmtvM>P10hb~5?bhCZ_zhF*S>CqCA66lyx**H(7(LN}H&+pw9#9MuY$Obs z$1iw~1wQBVs9zpLhTw(#{BL-}S)Aqg81J!jYNLw$~a>WIbgk5@%QqZaSY}GG0 zvs@T20ZeDUWnr2U26}9~-Chm{PT`H+0U%ps7cJ<+GCBe2Ad0bpq|G%LVwH6qEzam6 zfe`~?23aOzK;=v`F{1;3&G$M>r#Cx1VB!yRrb{Eq3bZMe2@(q7|HgoU@2)|m;oJ>+ zvyMtl5e(#KeFjAZQ6E*;sqAiAdTI<*%*n6 z2vp3n-~<_D`GljzWt$zU$%L|klZ1!w<`)QnQV3xNJ|feOjR(RHK|-aNgbWVaQ*)8; zvA!zP{3A8Lc&QRGg#iHAM_f;K0^VX{g@O%u`Kp8l#Rg^NcrkuI zu0Q0!)^%%*C<-&*Kw_GV=~2OAJuKH-U!G~uWIIP5_y-1BjtIB6xZp_-6bAa}z-sq_ z|A2w}Dqql~V8H-FAVFcR?rIp2Rg+Z7x{uROB^=pw#LqFvB35dM-Sd%}tVacDtG$WE z&SaCvoH@7*HQU}s8`!)K57Yoj)j@<}>8Q9-GYbnvr$ZcWF=sSG+(*)h)o-ix?L>@` zrEN-Ey2Tm>yyv(*E`??@Kb7G+#d_~*)KwRlS!i0Z>49F0&3?w4ZOzuDOg#W@oO&=Et++pw(7mV(pcmNwP zrAOA>shPAJ=k4?N*7htXGT?`~LWL`GWvS_%VBZ~;!tWa(Z3&MEDaZMZ$V8VZQPx)G z`}hbR;h4Zvpkbfti4ndILzbayTzeWrXVhEMvX)}X@X;GEpsx@@>#jf|!jhBC!j?eA zMkw2Tic#fo2Oe44s#jIwht>AVOYC@dyzNeJLzNk1)Hg$C$CyzrHdJsNUV?}Cj>MRp zh`>Qq_{J8E!KgKs^8GRuveTXYhy7HK}V!*rRhqbR;-&!8Aw7!LMXek%IV_f#5LH~>QGJbkA55>yJTdvillnK^E=(VzDxpxkbg7oLmvE1 z4$m0yW>iqMthGM91%`JF)NIi+25LS2e~E!-(>FXs(SZ%yl{+XT#77_jk?D;TBmfSd zy)vq-0er&%U_hPH{4zzt!@z*W{f4-FrgFGi!^n^5x1tEIp6ZukaK%{$DV|8Iks2fg zy2k9rol3T_HK#yoha8NTsV)mV?qh^*pdvyYc>_mmjF5ub+81&Y6YQMt@dqpk+P_&U zrOadKEu8sD$yBLHvInC8Xp(?Ch&*8EXag-2k&?wUt^snwAz_1e6{8fOA!gvS>3(7smsYNho$)dXc5ee9!JjLT4+j&ph88oN}yN52; z*U7rHMF+(L|8op<2@N8iH}@J6B+$p`UpjE)1bp6rk@uSNO18HfrnPvhMm9VIO)U{AA0F+{*bbNKpIeMO)jvz zcp<}_m9c0uw?1)?!R0m&h`#}ev> z$!hz)%+6`rl_K@Sj)sr@oMjRi{SIt!ZRY+11CUTSuXq7f`f}qdJsDqfy2plpVW9ND zod;k*7}foOfsq8hMFfS45(xm%ECnY~0@E(Z;p?vs30QP<{JFH33zM~kuz~^Qjy4am z@ISlYlCLKjsuU7P4Vh8Ox9NNsI7KKXW<2o-90ZSG`XfuN*LWi+f*gd9ZFQADMJ^{; zSZ0E$Iw!s$eImq$fxa_?(2Xz%8?3d(j8g~<3^wpU5ghjG%Zoh^JC!FU<-5T$I)q?Q zSDr9DZ@d@bCw^?hKPL+e&KD0v8#s_*R+@4+y_rcw2yi}|lQc^hSS}6JEn&b+RRx-5 zl2il|SSFDR=dzJ+=l9<$+ZB#!WWK;nHF?kg(7@niYYhYAu`v>kMFo{Erop~=pv@XT zX~H`O^d1)NlB9hqD>b@{_P1e!;)Hgl9zy~x+3Tfdm+R;6jrARpLWiGVAYnZB<34G! z!RI+@Qm-WqnCatChvgXAR5q1G@DLJ+Bq+Iv_LDaVDk2Ojf9O4760#Fx*duFW$pBe( z-{(YctoV9vSAD6ZP|`srpsjC51y-tJgPcJEn_7|p0GstD{@Q;!&qTA$)?Q!aoB8Ew zavgqCL2ZfYp$~em>Q90PCQgeBpcWbf1RH!u0MHKVJGE;3m+9$~xRtats9lmj z0`r`s)VkZOC_dGUT*D&Tz;>W#lke0WHi$O3W1v-`6xyHJAYYr7DG6do)M@w|Uq}@R zHw?%THBCqsW1qE;t*B}*;=>sGX0JK(ALn?$8vf3*f zkN7NiAhD1oXOhUn+r4$+!82(IO0JtCI%$te=n4#F^ z+zbIz>TU$m#@IX|OZo}`Y`@7tSR-@HYSydOva$q|VmWDomOJIb7`=GFWdnd4$^8O3 z_aRa6|5bK2R*fsc622MS&0seJ$Y99;GJp&q1IPepfHN=|m<%8T$N)0f_kC3}vJC8f z?{Vhn2w9eGb#--h&yT2Ndf(FI0pkvmG32BJW`#Tv`2Llo0Bu8u$*Ehf-KV&C6}&!XFr z<&{{TodI|#isX#^EQ-U!<%59+2rk8s^|y!tKH!+Q7h|0y8_ZU?+R-u|7RS000trBdW>+JS3EH0$H>(LkR9FA;JKJ zNN6xVo)h@C!NUe_;cK@E21CFW&H>V4jK{zLJHn_?!S)R`qR^Aa2 zxDgooH>JfB;=$!P(owHxEIJS&hq}b>fCN_}OtV9Y#(&wO;{N?fjCkDB-|?!5WtP32 zL}@nhobIpP1A~Et!2>Zp0GRF7H$FZi`50sZj}b#ff?^CFzMQ?Zk^^9d%+U#V ztg^LFrtmM{jW5NQlXuKi@25)7CbRTGXcjObgp*ewnNe~Q4jL0L((C^HzKqs7D z`HZCGVoY?!#HfWUYO_{mt}oA!V%LFz{VcSz-&PB`liWS%^tTIMnSjT?oNq||_LAim z?_c@aRJNI`$ULyryS7= zW0WSCb)9gG6)p(qHo9r3nX^>dh9t$RMIMMlyy6e{rwtf@fuH^>20#c5$PrQ}ZVthP z8)z(;;|W_M`h)>vK|72l2Bsc}(WmKaeSvX6!VM5&i4i)gb}wQeS>YQ1fNjzxAr%mJ zob1LlXN!L7e{LyOhO7Vs7sS4JI*mBoWC8R#$gM*TA_buZQw(*&0|^4FAvGwRQ5a`5 zHE)NJs0GnGKnMK~*z)Z3r%`|*gOu+WEObpec78<}{RT}=wc$jHKs45yPE9Z`ev@S2 zRzFTr7>YozCBA^`!3LS>e1UZ3hwv}=iady9lOY*QnK39}?~_nLG9Zx9hGtM0B(xC` zxC6XV7)%T#93&7lFR(^5cmNEf9e7}3Kyzc|#pnTmc1O)F`(S{&==P<85KZ{T_%Ui< zV1V)$V=|eL&Q6AiMC2#^Phk+#!v?nmg*Y1V3+`$Ndq5>Ro`evPh=w*GcTQ-yXK?@t zf%U1E) zJk!P<-*`*i-~#I4w6lxbn_KVXuXD!|TyGf~#E{gi2DU*A81&8l!UG8k`ByeL2tuR4 z#K3l70GSbf;9tVMumK677qdu|GhbQHasefLlYn)Ji{Z||;Q9HD+vos^pZGch5{C8H z7+@b5z!JPl2O{4bRUi)>It{HAAM=3Z`5zb%0EZS-P{2<_C?|jc3R4RPR03$uw203g zv;V+=vA_qaUgOb;?`DED$dG`G$i&K!Jake002KfULjX@Sg9?yI42*G281hF{#3PU( zOk-cZ9?K6vp04P^Lq(;;^Rtu7YbJZ9f0m)4bm)+hV^GGBWI0L(7(cQUA>x@T@!16m zXGKtc9p%TFBpzT8 zO$!gGaBLAa8K$ypEKm)$CK(Jks6!sOvx_jX;G5iVA%SHlfdBx|rZBjn<_ZsNo)v^D zfxDOU+h?eNyr8K8pUXOU02pi14~X3{G+sRV1%Lta)v+b9wYkjBzD4o{RiaV>>BtF~ zPgLXkgbdOsW(Qv}((n0}5x;~6jGG>r3)Vom*jyV5;SGrN4(Ui1#%y<-`+oCI+J)-2 zX64XvO4f9)VQBhpxSC&##F=Z}@ca(f7~}|@un?4zfU$@~bB2=gi@*jM0T|GoLkJd* z)CnUNurnor7?3C?5|9?Gth*HhJk@=_+p>t(69*snALu}_&F~MF*>oL)3-!s*Gq6e| zdZilgSaAl+Vd%x&Fn?(Q+@47Vri~n-G)lcF7%&~MyU->E{F%lAW{E~bWf%#cH8f!z ze?)-;2}lTr?{pUUYQR9DgFt!zgcx|cWC0?Vg3;(M>3}0+N{U5x3*KW&$^wqGcQzuS zf5Ue$aiC1Z+R+&|;-U(cm5>L@Kfu7h)B*Tht^gh|lhHo`g8hz@0T`?t&cDzCD-7JY zqVkT>g9!?bMqnHxUy{3#M!(OKZ*&qOrspDn!Lfo4AdzBiH6zKSk0tp9)eO%xh42152fm^kxboS6m|mO^ z7s3G90a1Jqrj!%dM^}IWSXx)TxQ7HXt5kTsBhOX{8!WSU4Q8nU?BnZL4uyw7kN=&jaVL)i0ogXye zq6a1hu*-r0slc@KzyqJHKlvfR7#M)np$j^UzyLi3V4yvr$PXC4VI4Pz#{H}eS8i^o z6yfPqIBa;hgis5@{9IFSl?w1O12?P^>+6{8G>&5|V8F!_$_b+ur3v>gHE{Rrq*0qN zh=Al$dRE;($8m6CmcBns@2j>D0%%c8LL>GU$N>J^0i|(sFv<7dHZ*7>rlpu80F0N1 zM>2ZlqK#lNYKapDC4^9cqP9q!Riw=e@43J8Q-s4}_s9VqyD zW=t3iu*SpKFBpz7pfDgnR}&TkSRWopIH(>NvEUmFg#6>t!GJNEN)fW~V)OLDYO&{* z2UQ&k!b&@p=VoHSOfw|{H69IAAQCW5Jo*9M2z!JafB~_Fm$Z@M&FT<=!;pc!=38(^ z6vE!bfq;Ier_=KS3^2M@)~Pudo9e}CKaTSj4ssoA-Al2h&HxYK^7VReK8uz-y!2n+ z8%P8U^c!*o9CK^7f>^!Tk|tn!1{-*tSp4BZVrN<7ipB^7iwVI)bfZX65=<(P5Wv6& zVX%AQOjH3#;Da(L1}?qf`x9cQFOiFd3eHw+@CgI_t1zG)VIbo0TMSTVBO65)Vwdlg zKt!M<&oHwWtKfV-r#EZ#*c6P!}k0$THd`bfBm^aq$yo>Y8|KiFi zB%;D`BMt)5qXmEiMOeBd*bqe-Oqi}BUJ?moYSISlJU&tLdFd!4XrCyMOpq!u&Q5@^ z!Ym935Q`G9b`&tQTrfDn&INj`2s+#!cK9+XqD$&jkAQ@DL3R)ZSa{&{XHvq(g#`eF zg98RqB_Lj(B`?503l9uUc$^m;cmVz1KoEI=hYEw3vYfz-!p;8uYWqPfpg6!%r6>Vo zfl*+C^C}SWiWuN!ULF$No4FZ2boT13K1j@^gM1K1|bj{8Z~^E z1q5S3AYlQ49hO=4X)Ie2vfID$aUnW6N~J-hp!*=ollm3U7@A@LHdu_l>?9VH2RhR* zy#}ohWa5uhOkY*Rz|;eS3L**ClMNS0BqGGD_8H;bn2$C6wqW4#{WmohiUU6KL-z+Z zG{j6g&9VD!T^RAN>9Y_VN67d2w-sZI-l~EX1J2Re_p$*GMo$ta|6gq_t0pes^_YHf zZ5TlDpOh0GV9Eg2$J4=yDWu6h{2&$dEs{ogKGC21ETWiL>UCrTOrU`><&bST0lSNk zPC3a?B58pg`GFY3cP1^p!}RC@@WYw-G62KwczRSHYn8m^$`CsP+HrqV3Hq05vVmZz zHc%K4TmTHr05%8&k90H`GG6~-4NNp4GZBva4pw;h{cDARxdw$bBJy{W_vQudFk0n? z9pqqF=BG9zLW$j!KP7$g0`BDI`Oo>S15_dd#6Y5nB%s#^Fm59TFntnUV+4S)=97G% ze-#7P18L-XaKZ*lUD7#7;86KL5+m?mBEI%jGWbjS^wc{nva6+#rE{qJUMw0>EKKV1Pn|MM8%f-fmeu z|Bkte#&KBv&EQVFFoKvGKnpxu!3qO?h^B-XRAp$3=@$%`Tr?O79!p6e0Sxf={nMY{ z=QrkvmW5S-E7KpSfaB_cu0m5bNS$zvfhh)3A6R(cZzK>NPzKCKWJgAtA_W5#1DJJX z`T+orcraxmWq-5*Tira&05H7l*&SAp=Tk5wG_Zrc00XCKyIW)@zQ#Q#-!A}+>~Oo= z$h?|3EIN)D?s5NWgPapz#(YnFdBV35pGS&hjk16TTN{zd$P@rg@zin#ZXprVfCK;_ zNU|eiP%eh~=_$V30tvd)_$^@X`GtimUl5$Y6+B>W42tS7Iz%U^AyZEPY()jYP$Z0M zgA7m%unapGcz*pu(D^45lxEFvG5xZ$@PK1V54B=*!@&ba{}u_$0}BSUbz7o&)L@H3 zF>Wvr5-0|6d8QXJgzSW8CQcbpC4g(YTE!fCWHE5eO*1s0^RX;2C=xglkg(`tq`ndV zF{K7nqK*%`cuNfm0OHHfY`L+p0Xt9xTTX!0F{L#|O+X0H!M*>+h>$~`e*|)Xfyb49 z-0;`#vn9$*)00!|f`pnoNC-<509Jv*;p|Xb1`qf5TVOye;G3`n9knvP6&Bn*y;1eQ z@ib@w&fjwmao?2CvXU^+^a%$XF;WNvU-BUE;3AJN6czW+AB-?z)Kk*KZ}oskfFc$i z7#Khhnt~lLu+$074XqKSOe6rx;ckZu=LoKqB-&VyYpwm)6Cl7os0 z^Z+Nfjf+_B5C-J|g+Y1@MM4@!dS-lCMVI~^vqeii85Dtpz`1zI!rgFc?TF(G14urT zf;kdr7aqy@JcpMI0lte80agYNVneU5S>bB(`o}knj>gmF>x}VzjS|z;DDKY)&JNc1 z2;&4E9*Ny#aAdV6J4`*JUV27NiJJd2-GAWCIBUcApvAd@`mlXK_&Aw@gph|xv2sPp9QRN0nS7IbXe^*>m8|)O`cJqW zqsQF(K4gwf@jm1wJ6Kks=+jF#oWr_9)blYtFyQ0@fGzt&0Nh8w+r8@;53KLRJ(n)g z^szghm~kM(UL6zigxv)L%8lTzu;0_a1Kwaohttq9eZZ85g^_UJ=QmbqKo2l>6c{i$ z1w!C0k&y@Y4-AX~3PMVV#lYh;;eg>N+x;7BE-`p)#)9uv!Q=tUcWIw6KwStW&~}7@ z2)P3lOkD>jsO!Q5^;`=+jE2J3SaX2-188^I!wx=d5OJ##pf(t`*UFkZ7;xWamw^ur z$xEp%+%lYo(lKcrRG<{B^)DZ8DFqW3c+}=p`1*CcJ4WYKShCnU|C_Xr&jF6Cl8D-1NJz=aUR@;EaYGM z4yf>FN>T;DHyCIvz=@c`;HaLjJmC1H^Dp6`xgmzjPWp!A=fv~`f~g533BUk+LSge^ z|A!$2S#{)=5k8IscjOq`8wn?aNMmAUKvp8U$0-;SQZP_42nMVK+EQB}LXklb1sK^& zoreIyKC-_NpHxwCc#ns^4mKc@n%2kAn0ujmkN^fIy}$A*uz@9bFBni3&PpAA$K6Kn zF?ta7&J~~n(toI+7FV0q`q}E9>;wZmDT603zrFoofVb7}OU6}}2b5%^Nb5+;`=3sL z`hh85-u_^B*1cg48bBh@Z-GIyVm<{7P^0iGffh6*fq;iJ@kZw$oHMrnXZi(z!8aIa zEC2(9fB}FchD-X!9nQGcvy5D#N&ppHPGK;WK;>MK5O+4dEAM3h;yBEJ&Sw?k%?s(_ zv&)A2_~6SEXIpccNT5V4czAmPft+AjSTO)9#6V;NL_x#{7?u!|=5w5Y0u1nUtqj|z z{=;eD0VMRek=+FR1uG{U=;m5k$Jgr#>usKpo|jr2vr?Af#wIV|K6~@w3KV{0f&7na zKfP-LI{~?lT!GKhFd2%@e_`e=86W!pjflW6{dIbe#c7Sdi3o6lN34U9o1>$6P72dg zPk%o?y}Z2tA$g?6h5mecerGKgz7_i4ERxae6sgQg>|V?lW>o6i)APs0<&6t9AI6n^ z1B1qb1q1Am6nw(K*P%psv0h&dAO_~Y8Zj+4#dg5J=+D8^tE2{Rrx$xM@cW7uyGLH8 zwj6)2*Ao{ce+gj)13{G@0ZE|q)H41M81N~Iy;OS$3dDkNf~j9&5N}2Hs{t@{CIMlu zD7|1HVDMF}&j~H@QE7>HgCA@y6)5#PKq!7!e?%gx*%FZr+4v(dx*{!9Ky{ZRPy5%` z*LQd|qvohl=z0vK2@E6wDqt4DQb)y!phrgj(EIbxKmXp|ZQeh4e(qbBl6c;~U}9$Q zQG->Z!UM8_amUXEa=T}S6@dZXK6#)K;q!K4ps}EsJi-9qVPatL0I5MR&_M8I8(`FJ zO9df(#))0vi7Z5Ra`EV+GtDdp2C5}O8u52!fTF^;Cq2aFiv<34-3jZ)4lgNJ7(Oyh zo-4$53F47|R)cK>dJo3It-}l$Kmw`!M5A2^_-{1dSGNt{;89xnYCoGo#O%2kUCI*HNK7>NA z8M%=;Xs7@F^UvwYZ_G+#VKf$$;QC|`Ec8b_;wxDfdh{zXOdUM%aWAj(fCb}k3dIK` z3{6NlP!D{Afe{P7j3gOJVx}87@pnV|(jgPjq9f$_p-A(6gjGR+&r9s|Y%15|IX3i;sZ>~G+9l*f!w1~Z^vcLe-<9&_A_~2~S>XGZ) zXW0Ao^@EIn0iR3_z`l@e9ex2iRf7%xV2}xsXJdy{HD~4JGfK&6Nf}`vp z<2@1rt{i8Q=D(>M$ovZiEEMR}E^)@pET$gcz7Pv|ycf5E(_(!AgIR?^c53AwiJQ0c z2sUu^ATVeK!An8HPC^*(H%CBvu!LXl=3gCu2=bV_R4@hxTezb^0?*IyGzR&TtO3*o14LeKxDI%X0Z{Et z<|4$46fMNg@N7L)E;LHogPHZ|vf_B%wq4W|v!@z!8C1ASQ51wel_ziybAP)91IY`(VUQ3WV2nq5_9b~oBZmi^13Lh)X8uJRu*0vz zuLrS91)+B_!2Ug`CLHk0f?re%$pnJ|?G@6<79QwZ*c#>aml(RnMHNH_C={vc#QNFK zEp5(-`!Keg?*Jiy2g*JG0E)M$14lft#(;Vt(;i1Gm^|=_ z1p2RdIAB17O3@PoSckC$w-4{9R11Rvj!f7H7%a|KclKS?02Z182DO3FVXRHzkfFds z$4?=V;i=XQC=v<=I~u4)UQu?g(b>ZMxH(`jOauuKLJ*SiKSq2DK}3XR0eC%m7LP-v zVez%OL-GK|G!SOM`ZR7n|C$vhK-h%`4E8TLEOi@{fV1|P_9#mEwj}{aSsM!k09G(G zL>49%uqXjfK{Xu1=OjR zP$8DurXGkUOuCxfaEA%7Mf3pi=saKkKmuO_!2uHW>%spR)TVE0$_-00Qo~{1G|z2w zlIei~z`$rRG+^*w_8a;|0xhZH;Qt!B@xtTST^QIDihLXc(iD(f2LX^2;3W)TDS-N( zFfcE0+y%-I$EOPbgNE(#XyO87uJw%zkZt;Ist2&I=GNB0Mv;IfU?#bGVgKRNhdX9RWm-yF)gVWkmpeiUT3=LwS zFvt!nf|C`EUdKtSTc|z^fT59pa)K@|KTyO29^gR@Kq~{(`XGT(9OmGT|7_?lFq{G= z=aZU^9t5kkmV+qW$N+E9#mnm-W`yx*W2~vH$}C!Yy5Rwh9tJKFiUD)O9V2auffQ+> zVq{^b3hKgmH@AA>6Lp1|vd9MjN_vXw)fg=D@Qan!zyQ`41I|Vq1;arF!9c6TZmCm= zf#`u4=xUHa`;Myy8~2+Ae%?;kE)T!}BfeukF#uwnGOTr!aKa$9!4O3Q$3TKVu&Bt+ zV*O=DF>utP5+#9x0jMNQxG)7r_;ldJ5R?ayV8h>0{%E}L0NCIlrDGLfa)Gb`em(ph z<0=e-gu(eCe^bIRKXwNpFoX4c3q%~ZN<+3zP-aORGX2aMM+``43kD_(s1YrJfNl|D z!M&=6H$wh)@=gq>5-)Qzy@>XrqoGv=bSC(T+T;jxx*2kV3-C}~r%THr!N3?+^aTU6 zzu@l}0LBdm-?~2sWq@v{Ut`d?Z~{Rnnh@iWxUJzPrde6P7HH0NKFOvABXyxZvnJwzFVj zz_&YSGkSo;zha={KST`(BquLc6fc*AhlUg!KI#v0`ULa`yaZ1E$XNPkpaVfWW0d^13_Ezf{_#q zJs=g|1p|Wz;>8$_t6lR_ei!5IQ4|Y%pojU@xIY*$@nqDN8;0|SKb!QN-+G42MPs`*h2MrAzJ0{iZ0J};iQkjv&%6y!b52QLoopAEN7YwYu7%R_q?^-cQ+4SNxej^9*-@w2ep`5_B zz^J(mpd$Y+i_e4v6Z za{DW3W>Q5lK+pA}2lx(L|FjI~mI#8F3`=1B$ER0@^8P-% zrdyD^AzNzw=`7wK@0F5xr3aK@=_yG3!loevMg9XnGqJ$>a8k=l2^Rdw02UTNjuxMG zPY4*Cup)tRDp^2lnbf{ex8H}o|bXN0|SW#eh2%EM-{@t+uwEE zK*eA5z?6cTFA*WCpyYtYLoL+4az0o}I51yO2eO?QC;-@YCqAV_oHgWzgXn|^LdGw} z`V1+F^&MMiAjm*sdk;HKjH(eBaG*GY|F;9KnmGNvDAVX5y~t- zhel|6%zbooa%a>7#Xv&#&;wD1k%+2-$IP1u28_jEKq+VxkPnePV!*dFB^-gEG5{Bz z5kZPj7=RP$B5wgX+({5sRbXDg`m0@+EPs`E3~KlZN} zkO%6&0|rKR%xB1!-|~26Z&6}FLO=je47g?;;0Xf+LY|p_+l?p{C=`1s_rntRU6+Q@ zj1>cpBqTd%4?;*l7&!Qc!66n0C>3^Km}Me|aYiaQcFVlL`he8{ic73Mxo_&0MyHQ`7NI+jU#AwON!iofH5uv|#5ELWW8=Ns8;qc7VP z3sNY@e>L1D1;8mC|= zA%FoII}{Bp6tl8imI`4sFO9?yuZQX}J>+lOTO6KXV2~%>0e|SzM+agr01)9<0IaqP zVRC1p2cTS2!o-5?sN9BkD+b^J?gp9=Do{@32l8|Bt}wuafk>D#U@-q;_tj20fs>y= z3*P-hHGn=`cz~HZtrjx0H6dnV;7AV)g=4Ub-6es!-zd;+Fu;%ftOr5`2R0A`tT+S= z5QhjDMt?2+3t}KZ8YWISD2#S_}-%Um5)q9w-_-svEfi z1K1dmWkg`8Vf6qNDlh;Q*nJ!fh(o@uNzI}O)dr)`5lvV%C=C2*V^m=eev1J!M2#3G zU&H_mAm;V%`^*Gnd7=`2s31R|J5WA}n`3m|qWc#BDHE9#a8R#L;iyAR_*WQY6^rnI zOG%6=26i1jCJJOIQ6d5*0!hF!vgHCAE)O}-okVBc?d?NW6WuW!h~7X<|HLeS$CtBn zdiRh_@z(KGhr|UE0kii=aC$yiYUXO35f;G4T}M*j%y4o>yS(g=>8SGV>`r;Kl6J% zFsK_d@r&AGM@gU&0n^u5V9yXR?e0yR|7!GDU%R`1SAS1p=n;2P9t;=)2@A!x4j?HT zKm~LaWkdl{Ks|uD2Oh!<{+l)kAtMH<5)c~Fqx48nV1x#BU`p{M0szt=I03*8ze1M} zl}#ip%(gNp7zhJ9u6SxZ%6;Ru=r!J-@J6LzX}{Lbw%NhT;sXPb2c-og1>K0^&GZu_ zhY&}O!~M7Qol6Jq`3hH_T{Kkv!G?gs$OU)LYY&qNb) zJ{By6*6!j&$FXru{w)UBveaskkgabN4~2m{B#g#_nx4*rDgmq?CBU#@dy@e`{$(oh z5f~;UL;}g96VRd?JJ5)^8!qYQpzkY9e;#w&#S_yrZb5(dpsyAQb1N|TQH=!)4_GH0 zJb=BjRF@(-))xT90OpIE3xfk2m>>*b2FZc+;!G`U?0Mqu*x6KQjVB+wh zRlng%6WZ5oM^$sf#sYr$5QGrIXhym+UeUg|z>;PLz;z>;@_!>j2pnVzZ@`064?|?XKz#(PiF|2);<=D87Pvyo0Rv49w3@9Z#(%Bt z*kb)r@TqRhnF$J0KrU8Zb_@g~aDa_QknDJUuZFo#=|Q;Mv2f_=%{#eaFks4%+;GpT z@~gan+~hosPQ${Wm4U!u0RTInF|gbatv~Jl1p^U;T0e~d#5#3O8oGOif@GBx3cA&` zn;q2L(teN-oP4%^XaN#f0s;OWDj+vR@MClx-}mRx<}hM{c#WQ|rld84h`+DwyBK}h>D!Be!+x${ zcTxb5lef-uynf`7(>zzA7--t~83Wd-5(|XE(s4X7Fzg;4knwB__2pL&(|eb~05V&6 zAc8PFfFKOfu>}So->C;ozvX$*ErwYBMkkm%V153@{r~-mBi!(bHGO{0_?de5AiBO< zcuZC_G#q0frqTBY!>i(I@tSF|Y#G2%Ua=P+H^i4cR@+=*0BK-A<`+f2ceXAKdUgN8 zV-p#QoElLQ!*6*YeaD{}U~&K9`@mpeUNWjpC{j41~2q72{4?6o25gbCC zkpmP1Us)>#@=qPxh!(jH1wACG8K$2ADDMrB#QlXqyd!$am>A?Q7?|!KW{ACl3Je#! zuSj4TG}inE0}E`v?r^DM0KpFlP#L}p2|Vrx29&0Y9$3eMZ!jS3>+&o9pBUiB@{;(+ z(+2?R_-k_?_SHPqgwa3Ry+M$BTNo5A^aOzckbp;H?nwxA6dL#2AOT*b-piKbHrzi) zYI-aV33R16_KEKk0}=vMKej9o7cdY4SVoDW0Y9qbpD*L@>em*l?jN=M>IDGoa5okV z5ELQ?iUC-Cc&HJf2KvkcqmI-xFo9#`^?8>__?8fQ!DX8(`-xzHD8Qq8A%VNckL}Y( zcp&Ksxe4mj`oKyL7z+{wW>y$0A7h|wQ0ve5$eo$@2c>Tv`l zh=+_Z?kWWK3lKF}i;M-S=nRUvYxja-NI@4d4kTC#%tG-404V#u&ni_K5_d-e^ZUArXO_L-Wi=KrB-03xL{a<-d~<)P5`L zv)_NeO9wB_ho>k zWjJX5mFpsqB!Pto;v-^UO1>{4ASMnf)B}G1AVD@*b^?#S3MA}Lab+_!zjKa=1q`O8 zuLnaL6kNeo5~vc0<706rkdg^vXd08mZ7deYs!(}4Z6RSHsDlhyM)GC{^OHWuppmQ- z$^9*C!vnk&n;yuGe*=Rf42*i$AW7aba>L00i}qW)dCmQ4%LyK_xRe6XK+yu8&lso% z$lCA5S*76qW{dUz007pH-F%0ER;!8uN&!`ajv!iOKt_QsNbq;fM0iR;U@$ln`yOFn zxP0zv?pw29jINcjdjYJi2Q4%xX#I9-pYKj>z6u*)cQ6nb7zH$ap4`V4yJKQ@$^ZoS zVxVgWUEQD(x0ZrU`fz-;A7CJ+@Y5RlDM)H-n@p8&D2$_6^yQP!0N~Yufl$X16jnU2 z=mCDI1}d4$1L+HxE+0c%MxI7@f2I%FKZ3y;1Ksydu40XS>i~~uOmE&o0%Cx5q_@Gq z09AUi1wdi}HyOVsL0d9{6$Z=&1|bv}Q3ySf2-x3Fc_;T|;sKMzMZzc~YV^@0ImFnItZaIZA? zffj~J?D0sTH3n+&PlP#Ou)1|$VDJ?K{JJ9K%hqp;vC{Q`A<}=8qOqmIjeWrpgb;!| zLmV;~kGIgp!*6LI8&ZGT^wU>5Kz9XzVSV1R95j6V2L=*T{2@v478o4#K&(IV!3_1E zP8tjZ20em|U%fO4q!^f&6$9)S6&I|6NcrX?!mxgG~q8+I)QC28%XHUizj9WV2kY- zJ^Q3Em~Zu#75UUseRZ`xm>auKz#I;Gq||rJ0~G^-$B`z~Uif=5!J2+$+3D;Cf-JwKvk)&N4h56g3<92QCZ})Rf`uf)x2#^XV zFFRXR$9bcGxxl+paQ{IRxZZxyoqE6kSIhXuH3mZXqo1hc9}FZ5_?`!v4i6sqgn{0o z)s3p}VESd}7zW2i=l*}S&T?d0N1JNdvxm0D${I8lpF5v{vBJst8lE{Jv3j*{9AD;p z4E%)$#6V>v7>FPY28P}B#I%Fmld|>Sc>REfjIH(CJXquis;USHfgU1h0YS?$)Rzy5 z0{f2#a{(|w6mW?!x_P| zK?3SPQ$m!$2X!HyGmeSHKwvXIsNrC0LQYu545YtUPfskq2%ifukYib`OQ~BMH{o zL9l@!v_ECZ3v#RD6zdx`_7``{ogbdK9F&=l@A(l49PAQ=2oKtD+qIJ(K&9yyThIM| z%KV^lf))=F{FI!TtzZ~O!d>HFEuJ$yGQy3HFg0PMU`vHz$WYc)0wLi~=Kk*AgVBBU zsl2_$M%g2#WU8q!00WeT$p>k5f9u0fe{Og0zpoy6BqBYbm~6y?Wef=gA^?yvB&JRW z3@l}V8TS`SV3jzbA^jsA0@psHV!jv{caOU?@8`kX%e~D@^UP`79*igI?_b+^dto3F zmNu-mIQ?)~C+|1$-#VBii6j4>n`UY^ei z3_kNfF#wwl421t18kVhGC*zG+z)g^HNeNpJ9=Ei&acuRtZ`<13-m%&KhJi099AEY; z48Hx`*n0Wsxx=N7zvuDQ5^mc|lK=n! diff --git a/rostests/tests/button/button.rbuild b/rostests/tests/button/button.rbuild deleted file mode 100644 index a86fb193d6a..00000000000 --- a/rostests/tests/button/button.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - buttontst.c - diff --git a/rostests/tests/button/buttontst.c b/rostests/tests/button/buttontst.c deleted file mode 100644 index c12887b6aee..00000000000 --- a/rostests/tests/button/buttontst.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Based on Radoslaw Sokol's static control test. */ -#include - -static LPSTR BUTTON_CLASS = "BUTTON"; -static LPSTR TEST_WND_CLASS = "TESTWND"; - -#ifdef NDEBUG - #define DPRINT(s) (void)0 -#else - #define DPRINT(s) OutputDebugStringA("BUTTONTEST: " s "\n") -#endif - -HINSTANCE AppInstance = NULL; - -LRESULT WmCreate( - HWND Wnd) -{ - DPRINT("WM_CREATE (enter)."); - DPRINT("test 1"); - CreateWindowEx(0, BUTTON_CLASS, "PushButton", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, - 10, 10, 150, 30, Wnd, NULL, AppInstance, NULL); - DPRINT("test 2"); - CreateWindowEx(0, BUTTON_CLASS, "DefPushButton", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE, - 10, 40, 150, 30, Wnd, NULL, AppInstance, NULL); - DPRINT("test 3"); - CreateWindowEx(0, BUTTON_CLASS, "AutoRadioButton", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, - 10, 70, 150, 30, Wnd, NULL, AppInstance, NULL); - DPRINT("test 4"); - CreateWindowEx(0, BUTTON_CLASS, "AutoCheckBox", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, - 10, 100, 150, 30, Wnd, NULL, AppInstance, NULL); - - DPRINT("WM_CREATE (leave)."); - return 0; -} - -LRESULT CALLBACK TestWndProc( - HWND Wnd, - UINT Msg, - WPARAM wParam, - LPARAM lParam) -{ - switch (Msg) { - case WM_CREATE: - return WmCreate(Wnd); - case WM_DESTROY: - PostQuitMessage(0); - return 0; - default: - return DefWindowProc(Wnd, Msg, wParam, lParam); - } -} - -int STDCALL WinMain( - HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nShowCmd) -{ - ATOM Result; - MSG Msg; - HWND MainWindow; - WNDCLASSEX TestWndClass = {0}; - DPRINT("Application starting up."); - // Remember instance handle. - AppInstance = GetModuleHandle(NULL); - // Register test window class. - TestWndClass.cbSize = sizeof(WNDCLASSEX); - TestWndClass.lpfnWndProc = &TestWndProc; - TestWndClass.hInstance = AppInstance; - TestWndClass.hCursor = LoadCursor(0, (LPCTSTR)IDC_ARROW); - TestWndClass.hbrBackground = CreateSolidBrush(RGB(255,255,230)); - TestWndClass.lpszClassName = TEST_WND_CLASS; - Result = RegisterClassEx(&TestWndClass); - if (Result == 0) { - DPRINT("Error registering class."); - MessageBox(0, "Error registering test window class.", - "Button control test", MB_ICONSTOP | MB_OK); - ExitProcess(0); - } - // Create main window. - DPRINT("Creating main window."); - MainWindow = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE, - TEST_WND_CLASS, "Button test", - WS_OVERLAPPEDWINDOW, 50, 50, 180, 365, - NULL, NULL, AppInstance, NULL); - if (MainWindow == 0) { - DPRINT("Error creating main window."); - UnregisterClass(TEST_WND_CLASS, AppInstance); - MessageBox(0, "Error creating test window.", - "Static control test", MB_ICONSTOP | MB_OK); - ExitProcess(0); - } - DPRINT("Showing main window."); - ShowWindow(MainWindow, SW_SHOWNORMAL); - UpdateWindow(MainWindow); - // Run message loop. - DPRINT("Entering message loop."); - while (GetMessage(&Msg, NULL, 0, 0) > 0) { - TranslateMessage(&Msg); - DispatchMessage(&Msg); - } - // Unregister window class. - UnregisterClass(TEST_WND_CLASS, AppInstance); - DPRINT("Exiting."); - - return Msg.wParam; -} diff --git a/rostests/tests/button2/button2.rbuild b/rostests/tests/button2/button2.rbuild deleted file mode 100644 index 01c0b917f46..00000000000 --- a/rostests/tests/button2/button2.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - buttontst2.c - diff --git a/rostests/tests/button2/buttontst2.c b/rostests/tests/button2/buttontst2.c deleted file mode 100644 index 0fa4ed74208..00000000000 --- a/rostests/tests/button2/buttontst2.c +++ /dev/null @@ -1,219 +0,0 @@ -#include -#include - -HFONT tf; -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - HWND hbtn[26]; - - wc.lpszClassName = "ButtonTest"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("ButtonTest", - "Button Test", - WS_OVERLAPPEDWINDOW, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); - - ShowWindow(hWnd, nCmdShow); - - hbtn[0] = CreateWindow( - "BUTTON","BS_DEFPUSHBUTTON",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, - 10, 10, 200, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[1] = CreateWindow( - "BUTTON","BS_3STATE",WS_VISIBLE | WS_CHILD | BS_3STATE, - 10, 60, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[2] = CreateWindow( - "BUTTON","BS_AUTO3STATE",WS_VISIBLE | WS_CHILD | BS_AUTO3STATE, - 10, 90, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[3] = CreateWindow( - "BUTTON","BS_AUTOCHECKBOX",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, - 10, 120, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[4] = CreateWindow( - "BUTTON","BS_AUTORADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON, - 10, 150, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[5] = CreateWindow( - "BUTTON","BS_CHECKBOX",WS_VISIBLE | WS_CHILD | BS_CHECKBOX, - 10, 180, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[6] = CreateWindow( - "BUTTON","BS_GROUPBOX",WS_VISIBLE | WS_CHILD | BS_GROUPBOX, - 10, 210, 200, 80, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[7] = CreateWindow( - "BUTTON","BS_PUSHBUTTON",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, - 20, 230, 180, 30, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[8] = CreateWindow( - "BUTTON","BS_RADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON, - 10, 300, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[9] = CreateWindow( - "BUTTON","BS_AUTORADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON, - 220, 160, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[10] = CreateWindow( - "BUTTON","BS_DEFPUSHBUTTON|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_BOTTOM, - 220, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[11] = CreateWindow( - "BUTTON","BS_DEFPUSHBUTTON|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_LEFT, - 480, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[12] = CreateWindow( - "BUTTON","BS_DEFPUSHBUTTON|BS_RIGHT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_RIGHT |BS_MULTILINE, - 740, 10, 150, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[13] = CreateWindow( - "BUTTON","BS_AUTORADIOBUTTON|BS_TOP",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_TOP, - 220, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - // Other Combinations - - hbtn[14] = CreateWindow( - "BUTTON","BS_AUTORADIOBUTTON|BS_BOTTOM|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_BOTTOM | BS_MULTILINE, - 480, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[15] = CreateWindow( - "BUTTON","BS_AUTORADIOBUTTON|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_LEFT, - 740, 80, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[16] = CreateWindow( - "BUTTON","BS_AUTORADIOBUTTON|BS_RIGHT|BS_TOP",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_RIGHT | BS_TOP, - 220, 130, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[17] = CreateWindow( - "BUTTON","BS_AUTORADIOBUTTON|BS_TOP|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_TOP| BS_MULTILINE, - 480, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[18] = CreateWindow( - "BUTTON","BS_AUTOCHECKBOX|BS_BOTTOM|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_BOTTOM | BS_MULTILINE, - 740, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[19] = CreateWindow( - "BUTTON","BS_AUTOCHECKBOX|BS_TOP|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE, - 480, 190, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[20] = CreateWindow( - "BUTTON","BS_AUTOCHECKBOX|BS_LEFT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE, - 220, 230, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[21] = CreateWindow( - "BUTTON","BS_AUTOCHECKBOX|BS_RIGHT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_RIGHT | BS_MULTILINE, - 480, 240, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[22] = CreateWindow( - "BUTTON","BS_GROUPBOX|BS_TOP",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_TOP, - 10, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[23] = CreateWindow( - "BUTTON","BS_GROUPBOX|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_BOTTOM, - 10, 410, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[24] = CreateWindow( - "BUTTON","BS_GROUPBOXBOX|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_LEFT, - 520, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - hbtn[25] = CreateWindow( - "BUTTON","BS_GROUPBOX|BS_RIGHT|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_BOTTOM | BS_RIGHT, - 300, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - DeleteObject(tf); - - return msg.wParam; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - - switch(msg) - { - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - SelectObject(hDC, tf); - EndPaint(hWnd, &ps); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - case WM_COMMAND: - switch(HIWORD(wParam)) - { - case BN_CLICKED: - printf("BUTTON CLICKED !\n"); - break; - case BN_DBLCLK: - printf("BUTTON DOUBLE-CLICKED !\n"); - break; - case BN_PUSHED: - printf("BUTTON PUSHED !\n"); - break; - case BN_PAINT: - printf("BUTTON PAINTED !\n"); - break; - case BN_UNPUSHED: - printf("BUTTON UNPUSHED !\n"); - break; - - } - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/capclock/capclock.c b/rostests/tests/capclock/capclock.c deleted file mode 100644 index 326da118b13..00000000000 --- a/rostests/tests/capclock/capclock.c +++ /dev/null @@ -1,70 +0,0 @@ -/* $Id$ - * - * DESCRIPTION: Simple Win32 Caption Clock - * PROJECT : ReactOS (test applications) - * AUTHOR : Emanuele Aliberti - * DATE : 2003-09-03 - * LICENSE : GNU GPL v2.0 - */ -#include -#include - -UINT Timer = 1; - -static BOOL CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM); -static VOID CALLBACK TimerProc(HWND,UINT,UINT,DWORD); - - -INT STDCALL WinMain (HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, INT nCmdShow) -{ - WNDCLASS wc; - - ZeroMemory (& wc, sizeof wc); - wc.lpfnWndProc = DefDlgProc; - wc.cbWndExtra = DLGWINDOWEXTRA; - wc.hInstance = hinst; - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); - wc.lpszClassName = "CapClock"; - RegisterClass (& wc); - return DialogBox(hinst, MAKEINTRESOURCE(2), NULL, DialogFunc); - -} -static int InitializeApp (HWND hDlg,WPARAM wParam, LPARAM lParam) -{ - Timer = SetTimer (hDlg,Timer,1000,TimerProc); - TimerProc (hDlg,0,0,0); - return 1; -} -static INT_PTR CALLBACK DialogFunc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) - { - case WM_INITDIALOG: - InitializeApp(hwndDlg,wParam,lParam); - return TRUE; - case WM_CLOSE: - KillTimer (hwndDlg,Timer); - EndDialog(hwndDlg,0); - return TRUE; - } - return FALSE; -} -static VOID CALLBACK TimerProc (HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) -{ - CHAR text [20]; - SYSTEMTIME lt; - - GetLocalTime (& lt); - wsprintf ( - text, - "%d-%02d-%02d %02d:%02d:%02d", - lt.wYear, - lt.wMonth, - lt.wDay, - lt.wHour, - lt.wMinute, - lt.wSecond); - SetWindowText (hwnd, text); -} -/* EOF */ diff --git a/rostests/tests/capclock/capclock.ico b/rostests/tests/capclock/capclock.ico deleted file mode 100644 index 0b52fb0ccde9b5887ef492e7c6639565f413d9ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 766 zcmd5%!3_f;3^S)bn4oW-9iyY=88%=X#b>UCvhA>0tB9v9xyu(;K}$R z67ePiTm!Z5CIBx)JkT>G1hrNQtzWce8Np*EbDKrIm<(RBmw)h_H+?=b`|ra`DI7)s uRZcC@HxnDsx$BEt!hR1r_xU#;->v^P&LwOM&J}yedgZ&`o6K?Vd)Wv5PX!48 diff --git a/rostests/tests/capclock/capclock.rbuild b/rostests/tests/capclock/capclock.rbuild deleted file mode 100644 index afe112f8809..00000000000 --- a/rostests/tests/capclock/capclock.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - . - kernel32 - user32 - gdi32 - capclock.c - capclock.rc - diff --git a/rostests/tests/capclock/capclock.rc b/rostests/tests/capclock/capclock.rc deleted file mode 100644 index e046542ec50..00000000000 --- a/rostests/tests/capclock/capclock.rc +++ /dev/null @@ -1,20 +0,0 @@ -/* $Id$ */ - -#include - -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS W32 Caption Clock\0" -#define REACTOS_STR_INTERNAL_NAME "capclock\0" -#define REACTOS_STR_ORIGINAL_FILENAME "capclock.exe\0" -#include - -/* Icons */ - -1 ICON "capclock.ico" - -/* Dialogs */ - -2 DIALOG 6, 18, 132, 0 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -FONT 8, "Microsoft Sans Serif" -BEGIN -END diff --git a/rostests/tests/carets/caret.bmp b/rostests/tests/carets/caret.bmp deleted file mode 100644 index 5082a5b71a56e8187732c0b1e70c34bec9f3d599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106 zcmZ?r&0>H6J0PV2#Oy%K4aAH<2m(4_5|jA<|36sJ0Z1kQaRCrl0C5eJ2JsVs*a3(^ F004le2q^#n diff --git a/rostests/tests/carets/carets.c b/rostests/tests/carets/carets.c deleted file mode 100644 index e18a2b1fa93..00000000000 --- a/rostests/tests/carets/carets.c +++ /dev/null @@ -1,152 +0,0 @@ -#include -#include -#include "resource.h" - -static int CaretWidth = 2; -static int CaretHeight = 16; -static int CharWidth = 10; -static int CharHeight = 16; -static HBITMAP CaretBitmap; - -ULONG __cdecl DbgPrint(IN PCH Format, IN ...); - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - CaretBitmap = LoadBitmap(hInstance, (LPCTSTR)IDB_CARET); - - wc.lpszClassName = "CaretTestClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)COLOR_WINDOW; - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow(wc.lpszClassName, - "Caret Test", - WS_OVERLAPPEDWINDOW, - 0, - 0, - 200, - 250, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return msg.wParam; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - POINT pt; - switch(msg) - { - case WM_ACTIVATE: - switch(LOWORD(wParam)) - { - case WA_ACTIVE: - case WA_CLICKACTIVE: - if(!ShowCaret(hWnd)) - DbgPrint("ShowCaret(0x%x)\n", hWnd); - break; - case WA_INACTIVE: - if(!HideCaret(hWnd)) - DbgPrint("HideCaret(0x%x)\n", hWnd); - break; - } - break; - - case WM_KEYDOWN: - if(!GetCaretPos(&pt)) - { - DbgPrint("GetCaretPos() failed!\n"); - break; - } - switch(wParam) - { - case VK_LEFT: - pt.x -= CharWidth; - break; - case VK_UP: - pt.y -= CharHeight; - break; - case VK_RIGHT: - pt.x += CharWidth; - break; - case VK_DOWN: - pt.y += CharHeight; - break; - } - if(!SetCaretPos(pt.x, pt.y)) - DbgPrint("SetCaretPos() failed!\n"); - break; - - case WM_RBUTTONDOWN: - if(!CreateCaret(hWnd, CaretBitmap, 0, 0)) - DbgPrint("CreateCaret() for window 0x%x failed!\n", hWnd); - else - if(!ShowCaret(hWnd)) - DbgPrint("ShowCaret(0x%x)\n", hWnd); - break; - - case WM_LBUTTONDOWN: - if(!CreateCaret(hWnd, (HBITMAP)0, CaretWidth, CaretHeight)) - DbgPrint("CreateCaret() for window 0x%x failed!\n", hWnd); - else - if(!ShowCaret(hWnd)) - DbgPrint("ShowCaret(0x%x)\n", hWnd); - break; - - case WM_CREATE: - if(!CreateCaret(hWnd, (HBITMAP)0, CaretWidth, CaretHeight)) - DbgPrint("CreateCaret() for window 0x%x failed!\n", hWnd); - else - if(!SetCaretPos(1, 1)) - DbgPrint("SetCaretPos(%i, %i) failed!\n", 1, 1); - break; - - case WM_DESTROY: - if(!DestroyCaret()) - DbgPrint("DestroyCaret() failed!\n"); - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/carets/carets.rbuild b/rostests/tests/carets/carets.rbuild deleted file mode 100644 index 064735cd71b..00000000000 --- a/rostests/tests/carets/carets.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - . - kernel32 - user32 - gdi32 - ntdll - carets.c - carets.rc - diff --git a/rostests/tests/carets/carets.rc b/rostests/tests/carets/carets.rc deleted file mode 100644 index b269d709790..00000000000 --- a/rostests/tests/carets/carets.rc +++ /dev/null @@ -1,3 +0,0 @@ -#include - -1 BITMAP DISCARDABLE "caret.bmp" diff --git a/rostests/tests/carets/resource.h b/rostests/tests/carets/resource.h deleted file mode 100644 index 4550828495a..00000000000 --- a/rostests/tests/carets/resource.h +++ /dev/null @@ -1 +0,0 @@ -#define IDB_CARET 101 diff --git a/rostests/tests/combotst/combotst.c b/rostests/tests/combotst/combotst.c deleted file mode 100644 index db6effa3cfc..00000000000 --- a/rostests/tests/combotst/combotst.c +++ /dev/null @@ -1,687 +0,0 @@ -/* ComboBox Control Test for ReactOS. - -* This is a test program. Not made to be fast, small -* easy to mantain, or portable. - -* I'm not erasing text because I don't want to use other functions from the API -* or make this more complex. Also Fonts are not heavily used. - -* This source code is in the PUBLIC DOMAIN and has NO WARRANTY. -* by Waldo Alvarez Cañizares , started July 11, 2003. */ - -//#define WIN32_LEAN_AND_MEAN -#include -#include "utils.h" - -#define CONTROLCLASS "COMBOBOX" /* the class name */ -#define CONTROLCLASSW L"COMBOBOX" /* the class name in unicode*/ - -#define WINDOWWIDTH 560 -#define WINDOWHEIGHT 350 - -/* --- Command IDs of some buttons --- */ -#define CREATEWINDOW_ID 106 -#define CREATEWINDOWEX_ID 107 -#define CREATEWINDOWW_ID 108 -#define INITPAGE_ID 400 -#define SECONDPAGE_ID 401 -#define BACKFIRSTPAGE_ID 402 - -/* --- Position where the result text goes --- */ -#define ResultX 0 -#define ResultY 305 - -/* --- Position where the notify text goes --- */ -#define NOTIFYX 390 -#define NOTIFYY 285 - -/* --- The width of most buttons --- */ -#define CHECKBUTWIDTH 190 -#define SCROLLAMOUNT -15 - -/* Size of buffer to hold resulting strings from conversion -and returned by messages */ -#define BUFFERLEN 80 -char TextBuffer[BUFFERLEN]={'R','e','s','u','l','t',':',' '}; - -HWND g_hwnd = NULL; -HINSTANCE g_hInst = NULL; - -int pos = 10; -int n = 0; -int yButPos = 10; -int xButPos = 0; - -DWORD ComboStyle = 0; - -/* --- Control coordinates --- */ -#define CONTROLPOSX 390 -#define CONTROLPOSY 10 -DWORD ControlWidth = 160; -DWORD ControlHeight = 150; - -static RECT srect = {CONTROLPOSX,CONTROLPOSY,WINDOWWIDTH,WINDOWHEIGHT}; - -HWND hwndEdit = NULL; - -RECT rect; -DWORD StartP,EndP; -HWND hwnd; /* main window handle */ - -char AddString[] = "string added"; - -typedef void FunctionHandler(HWND,DWORD,WPARAM,LPARAM); -typedef FunctionHandler* LPFUNCTIONHANDLER; - -void PrintTextXY(char* Text,int x,int y,int len, RECT rect) - { - HDC hdc; - hdc = GetDC (g_hwnd); - SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); - - TextOut (hdc, x,y,Text,len); - ReleaseDC (g_hwnd, hdc); - - ValidateRect (g_hwnd, &rect); - } - -static -VOID -HandlePrintReturnHex(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) - { - LRESULT ret; - RECT rect; - ret = SendMessage(handle,Msg,wParam,lParam); - htoa((unsigned int)ret,&TextBuffer[8]); - GetWindowRect(g_hwnd,&rect); - PrintTextXY(TextBuffer,ResultX,ResultY,16,rect); - } - - -static -VOID -HandlePrintReturnStr(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) - { - LRESULT ret; - RECT rect; - - TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */ - ret = SendMessage(handle,Msg,wParam,lParam); - GetWindowRect(g_hwnd,&rect); - PrintTextXY(TextBuffer,ResultX,ResultY,8+(int)ret,rect); - } - -static -VOID -HandlePrintRect(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) - { - RECT rect; - TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */ - SendMessage(handle,Msg,wParam,lParam); - - htoa(rect.top,&TextBuffer[8]); - TextBuffer[8+8] = ' '; - htoa(rect.bottom,&TextBuffer[8+8+1]); - TextBuffer[8+8+8+1] = ' '; - htoa(rect.left,&TextBuffer[8+8+8+1+1]); - TextBuffer[8+8+8+8+1+1] = ' '; - htoa(rect.right,&TextBuffer[8+8+8+8+1+1+1]); - - GetWindowRect(g_hwnd,&rect); - PrintTextXY(TextBuffer,ResultX,ResultY,8+4*9-1,rect); - } - -struct - { - char* Text; /* Text for the button */ - DWORD MsgCode; /* Message Code */ - WPARAM wParam; /* Well hope you can understand this */ - LPARAM lParam; /* ditto */ - LPFUNCTIONHANDLER Handler; /* Funtion called to handle the result of each message */ - } -Msg[] = - { - {"CB_ADDSTRING",CB_ADDSTRING,0,(LPARAM)&AddString,&HandlePrintReturnHex}, - {"CB_ADDSTRING - long",CB_ADDSTRING,0,(LPARAM)"very loooooooooong striiinnnnnnnnnggg",&HandlePrintReturnHex}, - {"CB_DELETESTRING",CB_DELETESTRING,2,0,&HandlePrintReturnHex}, /* remember to catch WM_DELETEITEM*/ - - /* What a message, why M$ decided to implement his thing ? */ - {"CB_DIR - drives",CB_DIR,DDL_DRIVES, - /* Hoping that most machines have this */ - (LPARAM)"C:\\", - &HandlePrintReturnHex}, - - {"CB_DIR - dirs",CB_DIR,DDL_DIRECTORY,(LPARAM)"C:\\*",&HandlePrintReturnHex}, - - {"CB_DIR - files",CB_DIR, - DDL_ARCHIVE | DDL_EXCLUSIVE | DDL_HIDDEN | DDL_READONLY | DDL_READWRITE | DDL_SYSTEM, - (LPARAM)"C:\\*",&HandlePrintReturnHex}, - - /* Do not forget WM_COMPAREITEM */ - - {"CB_FINDSTRING",CB_FINDSTRING,1,(LPARAM)"str",&HandlePrintReturnHex}, - {"CB_FINDSTRINGEXACT(-1)",CB_FINDSTRINGEXACT,-1,(LPARAM)&AddString,&HandlePrintReturnHex}, - {"CB_FINDSTRINGEXACT(2)",CB_FINDSTRINGEXACT,2,(LPARAM)&AddString,&HandlePrintReturnHex}, - - /* "CB_GETCOMBOBOXINFO",CB_GETCOMBOBOXINFO,0,0,&HandlePrintReturnHex, winXP & .net server remember to handle the struct */ - - {"CB_GETCOUNT",CB_GETCOUNT,0,0,&HandlePrintReturnHex}, - - {"CB_GETCURSEL",CB_GETCURSEL,0,0,&HandlePrintReturnHex}, - - /* To implement "CB_GETEDITSEL - vars",CB_GETEDITSEL,,,&HandlePrintReturnHex, */ - - {"CB_GETEXTENDEDUI",CB_GETEXTENDEDUI,0,0,&HandlePrintReturnHex}, - {"CB_GETHORIZONTALEXTENT",CB_GETHORIZONTALEXTENT,0,0,&HandlePrintReturnHex}, - - - - {"CB_GETLBTEXT",CB_GETLBTEXT,1,(LPARAM)&TextBuffer[8],&HandlePrintReturnStr}, - {"CB_GETLBTEXTLEN",CB_GETLBTEXTLEN,1,0,&HandlePrintReturnHex}, - {"CB_GETLOCALE",CB_GETLOCALE,0,0,&HandlePrintReturnHex}, - - /* "CB_GETMINVISIBLE",CB_GETMINVISIBLE,0,0,&HandlePrintReturnHex, Included in Windows XP and Windows .NET Server. */ - - {"CB_GETTOPINDEX",CB_GETTOPINDEX,0,0,&HandlePrintReturnHex}, - - {"CB_INITSTORAGE",CB_INITSTORAGE,10,200,&HandlePrintReturnHex}, - {"CB_INSERTSTRING",CB_INSERTSTRING,2,(LPARAM)"inserted string",&HandlePrintReturnHex}, - - {"CB_LIMITTEXT",CB_LIMITTEXT,10,0,&HandlePrintReturnHex}, - {"CB_RESETCONTENT",CB_RESETCONTENT ,0,0,&HandlePrintReturnHex}, - {"CB_SELECTSTRING",CB_SELECTSTRING,2,(LPARAM)"str",&HandlePrintReturnHex}, - {"CB_SETCURSEL",CB_SETCURSEL,1,0,&HandlePrintReturnHex}, - - {"CB_SETDROPPEDWIDTH",CB_SETDROPPEDWIDTH,250,0,&HandlePrintReturnHex}, - - {"CB_SETEXTENDEDUI - set",CB_SETEXTENDEDUI,TRUE,0,&HandlePrintReturnHex}, - {"CB_SETEXTENDEDUI - clear",CB_SETEXTENDEDUI,FALSE,0,&HandlePrintReturnHex}, - - /* - * win2k have a small bug with this ^ , if you press F4 while it is cleared, - * the combobox is using style cbs_dropdown - * and the pointer is over the edit box then the mouse pointer is not changed - * to an arrow - */ - - {"CB_SETHORIZONTALEXTENT",CB_SETHORIZONTALEXTENT,500,0,&HandlePrintReturnHex}, - - {"CB_GETITEMDATA",CB_GETITEMDATA,1,0,&HandlePrintReturnHex}, - {"CB_SETITEMDATA",CB_SETITEMDATA,1,0x791031,&HandlePrintReturnHex}, - - {"CB_SETITEMHEIGHT",CB_SETITEMHEIGHT,-1,30,&HandlePrintReturnHex}, - {"CB_GETITEMHEIGHT",CB_GETITEMHEIGHT,2,0,&HandlePrintReturnHex}, - - /* "CB_SETMINVISIBLE",CB_SETMINVISIBLE,4,0,&HandlePrintReturnHex, Included in Windows XP and Windows .NET Server */ - - {"CB_GETEDITSEL",CB_GETEDITSEL,(WPARAM)NULL,(LPARAM)NULL,&HandlePrintReturnHex}, - {"CB_SETEDITSEL",CB_SETEDITSEL,0,0x00020005,&HandlePrintReturnHex}, - {"CB_SETEDITSEL - clear",CB_SETEDITSEL,0,0xFFFFFFFF,&HandlePrintReturnHex}, - - {"CB_SETTOPINDEX",CB_SETTOPINDEX,3,0,&HandlePrintReturnHex}, - - {"CB_SHOWDROPDOWN - true",CB_SHOWDROPDOWN,TRUE,0,&HandlePrintReturnHex}, - {"CB_SHOWDROPDOWN - false",CB_SHOWDROPDOWN,FALSE,0,&HandlePrintReturnHex}, - - {"CB_GETDROPPEDCONTROLRECT",CB_GETDROPPEDCONTROLRECT,0,(LPARAM)&rect,&HandlePrintRect}, - {"CB_GETDROPPEDSTATE",CB_GETDROPPEDSTATE,0,0,&HandlePrintReturnHex}, - {"CB_GETDROPPEDWIDTH",CB_GETDROPPEDWIDTH,0,0,&HandlePrintReturnHex}, - - {"WM_PASTE",WM_PASTE,0,0,&HandlePrintReturnHex}, - }; - -#define MAXMESSAGEBUTTONS 40 - -struct - { - char* Name; /* Text for the button */ - DWORD Code; /* Style Code */ - } -Styles[] = { - {"WS_DISABLED",WS_DISABLED}, - {"CBS_AUTOHSCROLL",CBS_AUTOHSCROLL}, - {"CBS_DISABLENOSCROLL",CBS_DISABLENOSCROLL}, - {"CBS_DROPDOWN",CBS_DROPDOWN}, - {"CBS_DROPDOWNLIST",CBS_DROPDOWNLIST}, - {"CBS_HASSTRINGS",CBS_HASSTRINGS}, - {"CBS_LOWERCASE",CBS_LOWERCASE}, - {"CBS_NOINTEGRALHEIGHT",CBS_NOINTEGRALHEIGHT}, - {"CBS_OEMCONVERT",CBS_OEMCONVERT}, - {"CBS_OWNERDRAWFIXED",CBS_OWNERDRAWFIXED}, - {"CBS_OWNERDRAWVARIABLE",CBS_OWNERDRAWVARIABLE}, - {"CBS_SIMPLE",CBS_SIMPLE}, - {"CBS_SORT",CBS_SORT}, - {"CBS_UPPERCASE",CBS_UPPERCASE}, - {"CBS_DISABLENOSCROLL",CBS_DISABLENOSCROLL}, - {"WS_HSCROLL",WS_HSCROLL}, - {"WS_VSCROLL",WS_VSCROLL} - }; - -/* The number of check buttons we have. -* Maybe some calculations at compile time would be better -*/ - -#define NUMBERCHECKS 17 - -#define NUMBERBUTTONS NUMBERCHECKS + 7 -HWND Buttons[NUMBERBUTTONS]; -HWND MessageButtons[MAXMESSAGEBUTTONS]; -HWND Back1But,Back2But; -HWND NextBut; - -HWND -CreateCheckButton(const char* lpWindowName, DWORD xSize, DWORD id) - { - HWND h; - h = CreateWindowEx(0, - "BUTTON", - lpWindowName, - WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, - xButPos, /* x */ - yButPos, /* y */ - xSize, /* nWidth */ - 20, /* nHeight */ - g_hwnd, - (HMENU) id, - g_hInst, - NULL - ); - yButPos += 21; - return h; - } - -HWND -CreatePushButton(const char* lpWindowName, DWORD xSize, DWORD id,DWORD Style) - { - - HWND h = CreateWindow("BUTTON", - lpWindowName, - WS_CHILD | BS_PUSHBUTTON | Style, - xButPos, /* x */ - yButPos, /* y */ - xSize, /* nWidth */ - 20, /* nHeight */ - g_hwnd, - (HMENU) id, - g_hInst, - NULL - ); - - yButPos += 21; - return h; - } - -VOID -ReadNHide() - { - int i; - ComboStyle = 0; - for (i=0 ; i< NUMBERCHECKS ; i++) - { - if(BST_CHECKED == SendMessage(Buttons[i],BM_GETCHECK,0,0)) - ComboStyle |= Styles[i].Code; - ShowWindow(Buttons[i],SW_HIDE); - } - - for (; i< NUMBERBUTTONS ; i++)ShowWindow(Buttons[i],SW_HIDE); - for (i=0 ; i< 26 ; i++) ShowWindow(MessageButtons[i],SW_SHOW); - - ShowWindow(Back1But,SW_SHOW); - ShowWindow(NextBut,SW_SHOW); - } - -VOID -ForwardToSecondPage() - { - int i; - for (i=0;i<26;i++)ShowWindow(MessageButtons[i],SW_HIDE); - for(;i= 600) - { - Msg[LOWORD(wParam)-600].Handler(hwndEdit, - Msg[LOWORD(wParam)-600].MsgCode, - Msg[LOWORD(wParam)-600].wParam, - Msg[LOWORD(wParam)-600].lParam); - break; - } - - switch(LOWORD(wParam)){ - - case 100: - ControlWidth += 10; - break; - - case 101: - ControlWidth -= 10; - break; - - case 102: - ControlHeight += 10; - break; - - case 103: - ControlHeight -= 10; - break; - - case INITPAGE_ID: - BackToInitialPage(); - break; - - case SECONDPAGE_ID: - ForwardToSecondPage(); - break; - - case BACKFIRSTPAGE_ID: - BackToFirstPage(); - break; - - case CREATEWINDOW_ID: - ReadNHide(); - srect.top = CONTROLPOSY + ControlHeight; - hwndEdit = CreateWindow(CONTROLCLASS, - NULL, - ComboStyle | WS_CHILD | WS_VISIBLE, - CONTROLPOSX, - CONTROLPOSY, - ControlWidth, - ControlHeight, - g_hwnd, - NULL, - g_hInst, - NULL); - break; - - case CREATEWINDOWEX_ID: - ReadNHide(); - srect.top = CONTROLPOSY + ControlHeight; - hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, - CONTROLCLASS, - NULL, - ComboStyle | WS_CHILD | WS_VISIBLE , - CONTROLPOSX, - CONTROLPOSY, - ControlWidth, - ControlHeight, - g_hwnd, - NULL, - g_hInst, - NULL); - break; - - case CREATEWINDOWW_ID: - ReadNHide(); - srect.top = CONTROLPOSY + ControlHeight; - hwndEdit = CreateWindowExW(WS_EX_CLIENTEDGE, - CONTROLCLASSW, - NULL, - ComboStyle | WS_CHILD | WS_VISIBLE , - CONTROLPOSX, - CONTROLPOSY, - ControlWidth, - ControlHeight, - g_hwnd, - NULL, - g_hInst, - NULL); - break; - } - - if (lParam == (LPARAM)hwndEdit) - switch(HIWORD(wParam)) - { - case CBN_DROPDOWN: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_DROPDOWN notification",NOTIFYX,NOTIFYY,25,srect); - break; - - case CBN_CLOSEUP: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_CLOSEUP notification",NOTIFYX,NOTIFYY,24,srect); - break; - - case CBN_DBLCLK: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_DBLCLK notification",NOTIFYX,NOTIFYY,23,srect); - break; - - case CBN_EDITCHANGE: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_EDITCHANGE notification",NOTIFYX,NOTIFYY,27,srect); - break; - - case (WORD)CBN_ERRSPACE: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_ERRSPACE notification",NOTIFYX,NOTIFYY,25,srect); - break; - - case CBN_KILLFOCUS: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_KILLFOCUS notification",NOTIFYX,NOTIFYY,26,srect); - break; - - case CBN_EDITUPDATE: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_EDITUPDATE notification",NOTIFYX,NOTIFYY,27,srect); - break; - - case CBN_SELCHANGE: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_SELCHANGE notification",NOTIFYX,NOTIFYY,26,srect); - break; - - case CBN_SELENDCANCEL: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_SELENDCANCEL notification",NOTIFYX,NOTIFYY,29,srect); - break; - - case CBN_SETFOCUS: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_SETFOCUS notification",NOTIFYX,NOTIFYY,25,srect); - break; - - case CBN_SELENDOK: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("CBN_SELENDOK notification",NOTIFYX,NOTIFYY,25,srect); - break; - } - - return DefWindowProc ( hwnd, msg, wParam, lParam ); - - case WM_MEASUREITEM: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("WM_MEASUREITEM called",NOTIFYX,NOTIFYY,21,srect); - break; - - case WM_COMPAREITEM: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("WM_COMPAREITEM called",NOTIFYX,NOTIFYY,21,srect); - break; - - case WM_DRAWITEM: - ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect); - PrintTextXY("WM_DRAWITEM called",NOTIFYX,NOTIFYY,18,srect); - break; - - case WM_SIZE : - return 0; - - case WM_CLOSE: - DestroyWindow (g_hwnd); - return 0; - - case WM_QUERYENDSESSION: - return 0; - - case WM_DESTROY: - PostQuitMessage(0); - return 0; - } - return DefWindowProc ( hwnd, msg, wParam, lParam ); - } - - -HWND -RegisterAndCreateWindow (HINSTANCE hInst, - const char* className, - const char* title) - { - WNDCLASSEX wc; - - - g_hInst = hInst; - - wc.cbSize = sizeof (WNDCLASSEX); - - wc.lpfnWndProc = WndProc; /* window procedure */ - wc.hInstance = hInst; /* owner of the class */ - - wc.lpszClassName = className; - wc.hCursor = LoadCursor ( 0, (LPCTSTR)IDC_ARROW ); - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hIcon = 0; - wc.hIconSm = 0; - wc.lpszMenuName = 0; - - if ( !RegisterClassEx ( &wc ) ) - return NULL; - - hwnd = CreateWindowEx ( - 0, /* dwStyleEx */ - className, /* class name */ - title, /* window title */ - - WS_OVERLAPPEDWINDOW, /* dwStyle */ - - 1, /* x */ - 1, /* y */ - WINDOWWIDTH, /* width */ - WINDOWHEIGHT, /* height */ - NULL, /* hwndParent */ - NULL, /* hMenu */ - hInst, - 0 - ); - - if (!hwnd) return NULL; - - ShowWindow (hwnd, SW_SHOW); - UpdateWindow (hwnd); - - return hwnd; - } - -int -WINAPI -WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow ) - { - char className [] = "ComboBox Control Test"; - MSG msg; - - RegisterAndCreateWindow ( hInst, className, "ComboBox Control Test" ); - - while (GetMessage (&msg, NULL, 0, 0)) - { - TranslateMessage (&msg); - DispatchMessage (&msg); - } - return (int)msg.wParam; - } diff --git a/rostests/tests/combotst/combotst.rbuild b/rostests/tests/combotst/combotst.rbuild deleted file mode 100644 index 1daa2728c1b..00000000000 --- a/rostests/tests/combotst/combotst.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - kernel32 - user32 - gdi32 - combotst.c - utils.c - diff --git a/rostests/tests/combotst/utils.c b/rostests/tests/combotst/utils.c deleted file mode 100644 index 563191e9531..00000000000 --- a/rostests/tests/combotst/utils.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Edit Control Test for ReactOS, quick n' dirty. There you go - * This source code is in the PUBLIC DOMAIN and has NO WARRANTY. - * by Waldo Alvarez Cañizares , June 22, 2003. - */ - -#include - -static const char hexvals[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; -VOID htoa (unsigned int val, char *buf) -{ - int i; - buf += 7; - - for (i=0;i<8;i++) - { - *buf-- = hexvals[val & 0x0000000F]; - val = val >> 4; - } -} - - -VOID strcpy_(char *dst, const char *src) -{ - const char* p = src; - while ((*dst++ = *p++)) {} -} - -VOID strcpyw_(wchar_t* dst,wchar_t* src) -{ - const wchar_t* p = src; - while ((*dst++ = *p++)) {} -} diff --git a/rostests/tests/combotst/utils.h b/rostests/tests/combotst/utils.h deleted file mode 100644 index f6a12649c1e..00000000000 --- a/rostests/tests/combotst/utils.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ -VOID htoa (unsigned int, char *); -VOID strcpy_(char *, const char *); -VOID strcpyw_(wchar_t*,wchar_t*); -#ifdef __cplusplus - } -#endif diff --git a/rostests/tests/consume/consume.c b/rostests/tests/consume/consume.c deleted file mode 100644 index 5ff2203dfcb..00000000000 --- a/rostests/tests/consume/consume.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include - -#define SIZE (65*1024*1024) - -ULONG x[SIZE / 4096]; - -int main() -{ - int i; - PUCHAR BaseAddress; - - BaseAddress = VirtualAlloc(NULL, - SIZE, - MEM_COMMIT, - PAGE_READONLY); - if (BaseAddress == NULL) - { - printf("Failed to allocate virtual memory"); - return(1); - } - printf("BaseAddress %p\n", BaseAddress); - for (i = 0; i < (SIZE / 4096); i++) - { - printf("%.8x ", i*4096); - x[i] = BaseAddress[i*4096]; - } - - return(0); -} diff --git a/rostests/tests/consume/consume.rbuild b/rostests/tests/consume/consume.rbuild deleted file mode 100644 index b515f419f2e..00000000000 --- a/rostests/tests/consume/consume.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - gdi32 - consume.c - - diff --git a/rostests/tests/copymove/copymove.c b/rostests/tests/copymove/copymove.c deleted file mode 100644 index de7df8560da..00000000000 --- a/rostests/tests/copymove/copymove.c +++ /dev/null @@ -1,303 +0,0 @@ -/* - * CopyFile, MoveFile and related routines test - */ - -#include -#include -#include -#include -#include - -static TCHAR -FindOtherDrive() -{ - DWORD drives = GetLogicalDrives(); - BOOL found = FALSE; - TCHAR drive; - TCHAR rootdir[] = _T( "?:\\" ); - TCHAR currentdir[MAX_PATH + 1]; - - if (0 != GetCurrentDirectory(MAX_PATH + 1, currentdir)) { - for (drive = _T('A'); ! found && drive <= _T('Z'); drive++) { - if (0 != (drives & (1 << (drive - _T('A'))))&& - drive != _totupper(currentdir[0])) { - rootdir[0] = drive; - found = (DRIVE_FIXED == GetDriveType(rootdir)); - } - } - } - - return found ? drive - 1 : _T( ' ' ); -} - -static void -DeleteTestFile(LPCTSTR filename) -{ - SetFileAttributes(filename, FILE_ATTRIBUTE_NORMAL); - DeleteFile(filename); -} - -static void -CreateTestFile(LPCTSTR filename, DWORD attributes) -{ - HANDLE file; - char buffer[4096]; - DWORD wrote; - int c; - - DeleteTestFile(filename); - file = CreateFile(filename, - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - CREATE_ALWAYS, - 0, - 0); - - if (INVALID_HANDLE_VALUE == file) { - fprintf(stderr, "CreateFile failed with code %lu\n", GetLastError()); - exit(1); - } - for(c = 0; c < sizeof(buffer); c++) { - buffer[c] = (char) c; - } - if (! WriteFile(file, buffer, sizeof(buffer), &wrote, NULL)) { - fprintf(stderr, "WriteFile failed with code %lu\n", GetLastError()); - exit(1); - } - CloseHandle(file); - - if (! SetFileAttributes(filename, attributes)) { - fprintf(stderr, "SetFileAttributes failed with code %lu\n", GetLastError()); - exit(1); - } -} - -static void -DeleteTestDir(LPCTSTR dirname) -{ - RemoveDirectory(dirname); -} - -static void -CreateTestDir(LPCTSTR dirname) -{ - if (! CreateDirectory(dirname, NULL)) { - fprintf(stderr, "CreateDirectory failed with code %lu\n", GetLastError()); - exit(1); - } -} - -static void -CheckTestFile(LPCTSTR filename, DWORD attributes) -{ - HANDLE file; - char buffer[4096]; - DWORD read; - int c; - DWORD diskattr; - - file = CreateFile(filename, - GENERIC_READ, - 0, - NULL, - OPEN_EXISTING, - 0, - 0); - - if (INVALID_HANDLE_VALUE == file) { - fprintf(stderr, "CreateFile failed with code %lu\n", GetLastError()); - exit(1); - } - - if (! ReadFile(file, buffer, sizeof(buffer), &read, NULL)) { - fprintf(stderr, "ReadFile failed with code %lu\n", GetLastError()); - exit(1); - } - if (read != sizeof(buffer)) { - fprintf(stderr, "Trying to read %u bytes but got %lu bytes\n", sizeof(buffer), read); - exit(1); - } - for(c = 0; c < sizeof(buffer); c++) { - if (buffer[c] != (char) c) { - fprintf(stderr, "File contents changed at position %u\n", c); - exit(1); - } - } - - CloseHandle(file); - - diskattr = GetFileAttributes(filename); - if (INVALID_FILE_ATTRIBUTES == diskattr) { - fprintf(stderr, "GetFileAttributes failed with code %lu\n", GetLastError()); - exit(1); - } - if (diskattr != attributes) { - fprintf(stderr, "Attribute mismatch, expected 0x%08lx found 0x%08lx\n", attributes, diskattr); - exit(1); - } -} - -int -main(int argc, char *argv[]) -{ - TCHAR otherdrive; - TCHAR otherfile[ ] = _T("?:\\other.dat"); - - otherdrive = FindOtherDrive(); - - printf("Testing simple move\n"); - CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE); - DeleteTestFile(_T("end.dat")); - if (! MoveFile(_T("begin.dat"), _T("end.dat"))) { - fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError()); - exit(1); - } - CheckTestFile(_T("end.dat"), FILE_ATTRIBUTE_ARCHIVE); - DeleteTestFile(_T("end.dat")); - - printf("Testing move of non-existing file\n"); - DeleteTestFile(_T("begin.dat")); - DeleteTestFile(_T("end.dat")); - if (MoveFile(_T("begin.dat"), _T("end.dat"))) { - fprintf(stderr, "MoveFile succeeded but shouldn't have\n"); - exit(1); - } else if (ERROR_FILE_NOT_FOUND != GetLastError()) { - fprintf(stderr, "MoveFile failed with unexpected code %lu\n", GetLastError()); - exit(1); - } - DeleteTestFile(_T("end.dat")); - -/* Not correctly implemented in ros, destination file is kept open after this */ -#if 0 - printf("Testing move to existing file\n"); - CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE); - CreateTestFile(_T("end.dat"), FILE_ATTRIBUTE_ARCHIVE); - if (MoveFile(_T("begin.dat"), _T("end.dat"))) { - fprintf(stderr, "MoveFile succeeded but shouldn't have\n"); - exit(1); - } else if (ERROR_ALREADY_EXISTS != GetLastError()) { - fprintf(stderr, "MoveFile failed with unexpected code %lu\n", GetLastError()); - exit(1); - } - DeleteTestFile(_T("begin.dat")); - DeleteTestFile(_T("end.dat")); -#endif - -/* Not implemented yet in ros */ -#if 0 - printf("Testing directory move\n"); - CreateTestDir(_T("begin")); - CreateTestFile(_T("begin\\file.dat"), FILE_ATTRIBUTE_NORMAL); - DeleteTestDir(_T("end")); - if (! MoveFile(_T("begin"), _T("end"))) { - fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError()); - exit(1); - } - CheckTestFile(_T("end\\file.dat"), FILE_ATTRIBUTE_NORMAL); - DeleteTestFile(_T("end\\file.dat")); - DeleteTestDir(_T("end")); -#endif - - printf("Testing file move to different directory\n"); - CreateTestFile(_T("file.dat"), FILE_ATTRIBUTE_NORMAL); - CreateTestDir(_T("end")); - if (! MoveFile(_T("file.dat"), _T("end\\file.dat"))) { - fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError()); - exit(1); - } - CheckTestFile(_T("end\\file.dat"), FILE_ATTRIBUTE_ARCHIVE); - DeleteTestFile(_T("end\\file.dat")); - DeleteTestDir(_T("end")); - - printf("Testing move of read-only file\n"); - CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_READONLY); - DeleteTestFile(_T("end.dat")); - if (! MoveFile(_T("begin.dat"), _T("end.dat"))) { - fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError()); - exit(1); - } - CheckTestFile(_T("end.dat"), FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_READONLY); - DeleteTestFile(_T("end.dat")); - - printf("Testing move to different drive\n"); - if (_T(' ') != otherdrive) { - otherfile[0] = otherdrive; - CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE); - DeleteTestFile(otherfile); - if (! MoveFile(_T("begin.dat"), otherfile)) { - fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError()); - exit(1); - } - CheckTestFile(otherfile, FILE_ATTRIBUTE_ARCHIVE); - DeleteTestFile(otherfile); - } else { - printf(" Test skipped, no other drive available\n"); - } - - printf("Testing move/overwrite of existing file\n"); - CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE); - CreateTestFile(_T("end.dat"), FILE_ATTRIBUTE_ARCHIVE); - if (! MoveFileEx(_T("begin.dat"), _T("end.dat"), MOVEFILE_REPLACE_EXISTING)) { - fprintf(stderr, "MoveFileEx failed with code %lu\n", GetLastError()); - exit(1); - } - DeleteTestFile(_T("begin.dat")); - DeleteTestFile(_T("end.dat")); - -/* Not (correctly) implemented in ros yet */ -#if 0 - printf("Testing move/overwrite of existing readonly file\n"); - CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE); - CreateTestFile(_T("end.dat"), FILE_ATTRIBUTE_READONLY); - if (MoveFileEx(_T("begin.dat"), _T("end.dat"), MOVEFILE_REPLACE_EXISTING)) { - fprintf(stderr, "MoveFileEx succeeded but shouldn't have\n"); - exit(1); - } else if (ERROR_ALREADY_EXISTS != GetLastError() && - ERROR_ACCESS_DENIED != GetLastError()) { - fprintf(stderr, "MoveFileEx failed with unexpected code %lu\n", GetLastError()); - exit(1); - } - DeleteTestFile(_T("begin.dat")); - DeleteTestFile(_T("end.dat")); -#endif - -/* Not implemented in ros yet */ -#if 0 - printf("Testing move to different drive without COPY_ALLOWED\n"); - if (_T(' ') != otherdrive) { - otherfile[0] = otherdrive; - CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE); - DeleteTestFile(otherfile); - if (MoveFileEx(_T("begin.dat"), otherfile, 0)) { - fprintf(stderr, "MoveFileEx succeeded but shouldn't have\n"); - exit(1); - } else if (ERROR_NOT_SAME_DEVICE != GetLastError()) { - fprintf(stderr, "MoveFileEx failed with unexpected code %lu\n", GetLastError()); - exit(1); - } - DeleteTestFile(otherfile); - } else { - printf(" Test skipped, no other drive available\n"); - } -#endif - - printf("Testing move to different drive with COPY_ALLOWED\n"); - if (_T(' ') != otherdrive) { - otherfile[0] = otherdrive; - CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE); - DeleteTestFile(otherfile); - if (! MoveFileEx(_T("begin.dat"), otherfile, MOVEFILE_COPY_ALLOWED)) { - fprintf(stderr, "MoveFileEx failed with code %lu\n", GetLastError()); - exit(1); - } - CheckTestFile(otherfile, FILE_ATTRIBUTE_ARCHIVE); - DeleteTestFile(otherfile); - } else { - printf(" Test skipped, no other drive available\n"); - } - - printf("All tests successfully completed\n"); - - return 0; -} diff --git a/rostests/tests/copymove/copymove.rbuild b/rostests/tests/copymove/copymove.rbuild deleted file mode 100644 index 9613bd182ca..00000000000 --- a/rostests/tests/copymove/copymove.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - copymove.c - diff --git a/rostests/tests/count/count.c b/rostests/tests/count/count.c deleted file mode 100644 index f1295691e7f..00000000000 --- a/rostests/tests/count/count.c +++ /dev/null @@ -1,15 +0,0 @@ -/* $Id$ - * - */ -#include - -int n = 0; - -int -main (int argc, char * argv []) -{ - while (1) printf ("%d ", n ++ ); - return (0); -} - -/* EOF */ diff --git a/rostests/tests/count/count.rbuild b/rostests/tests/count/count.rbuild deleted file mode 100644 index a85863971b5..00000000000 --- a/rostests/tests/count/count.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - count.c - diff --git a/rostests/tests/create-links/create-links.c b/rostests/tests/create-links/create-links.c deleted file mode 100644 index a2b4ce0523a..00000000000 --- a/rostests/tests/create-links/create-links.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - - compile via: - gcc -o create-links -D_WIN32_IE=0x400 create-links.c -lole32 -luuid -lshell32 -lshlwapi - - Martin Fuchs, 27.12.2003 - -*/ - -#define WIN32_LEAN_AND_MEAN -#include - -#include -#include -#include - -#include - -HRESULT CreateShellLink(LPCSTR linkPath, LPCSTR cmd, LPCSTR arg, LPCSTR dir, LPCSTR iconPath, int icon_nr, LPCSTR comment) -{ - IShellLinkA* psl; - IPersistFile* ppf; - WCHAR buffer[MAX_PATH]; - - HRESULT hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, (LPVOID*)&psl); - - printf("creating shortcut file '%s' to %s...\n", linkPath, cmd); - - if (SUCCEEDED(hr)) { - hr = psl->lpVtbl->SetPath(psl, cmd); - - if (arg) - hr = psl->lpVtbl->SetArguments(psl, arg); - - if (dir) - hr = psl->lpVtbl->SetWorkingDirectory(psl, dir); - - if (iconPath) - hr = psl->lpVtbl->SetIconLocation(psl, iconPath, icon_nr); - - if (comment) - hr = psl->lpVtbl->SetDescription(psl, comment); - - hr = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, (LPVOID*)&ppf); - - if (SUCCEEDED(hr)) { - MultiByteToWideChar(CP_ACP, 0, linkPath, -1, buffer, MAX_PATH); - - hr = ppf->lpVtbl->Save(ppf, buffer, TRUE); - - ppf->lpVtbl->Release(ppf); - } - - psl->lpVtbl->Release(psl); - } - - if (SUCCEEDED(hr)) - printf("OK\n\n"); - else - printf("error %08x\n\n", (int) hr); - - return hr; -} - - -int main() -{ - char path[MAX_PATH]; - LPSTR p; - - CoInitialize(NULL); - - /* create some shortcuts in the start menu "programs" folder */ - SHGetSpecialFolderPathA(0, path, CSIDL_PROGRAMS, TRUE); - p = PathAddBackslash(path); - - strcpy(p, "start-cmd.lnk"); - CreateShellLink(path, "cmd.exe", "", NULL, NULL, 0, "open console window"); - - strcpy(p, "start-winhello.lnk"); - CreateShellLink(path, "winhello.exe", "", NULL, NULL, 0, "launch winhello"); - - - /* create some shortcuts on the desktop */ - SHGetSpecialFolderPathA(0, path, CSIDL_DESKTOP, TRUE); - p = PathAddBackslash(path); - - strcpy(p, "start-wcmd.lnk"); - CreateShellLink(path, "cmd.exe", "", NULL, NULL, 0, "open console window"); - - strcpy(p, "start-winemine.lnk"); - CreateShellLink(path, "winemine.exe", "", NULL, NULL, 0, "launch winemine"); - - CoUninitialize(); - - return 0; -} diff --git a/rostests/tests/create-links/create-links.rbuild b/rostests/tests/create-links/create-links.rbuild deleted file mode 100644 index 6e9ba0d5a3a..00000000000 --- a/rostests/tests/create-links/create-links.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - kernel32 - gdi32 - ole32 - uuid - shell32 - shlwapi - create-links.c - diff --git a/rostests/tests/dibtest/dibtest.c b/rostests/tests/dibtest/dibtest.c deleted file mode 100644 index 3db6168f0c2..00000000000 --- a/rostests/tests/dibtest/dibtest.c +++ /dev/null @@ -1,196 +0,0 @@ -#include -#include -#include - -#define CELL_SIZE 10 - -static RGBQUAD Colors[] = -{ - { 0x00, 0x00, 0x00, 0x00 }, // black - { 0x00, 0x00, 0x80, 0x00 }, // red - { 0x00, 0x80, 0x00, 0x00 }, // green - { 0x00, 0x80, 0x80, 0x00 }, // brown - { 0x80, 0x00, 0x00, 0x00 }, // blue - { 0x80, 0x00, 0x80, 0x00 }, // magenta - { 0x80, 0x80, 0x00, 0x00 }, // cyan - { 0x80, 0x80, 0x80, 0x00 }, // dark gray - { 0xc0, 0xc0, 0xc0, 0x00 }, // light gray - { 0x00, 0x00, 0xFF, 0x00 }, // bright red - { 0x00, 0xFF, 0x00, 0x00 }, // bright green - { 0x00, 0xFF, 0xFF, 0x00 }, // bright yellow - { 0xFF, 0x00, 0x00, 0x00 }, // bright blue - { 0xFF, 0x00, 0xFF, 0x00 }, // bright magenta - { 0xFF, 0xFF, 0x00, 0x00 }, // bright cyan - { 0xFF, 0xFF, 0xFF, 0x00 } // bright white -}; - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = "DibTestClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("DibTestClass", - "DIB Test", - WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, - CW_USEDEFAULT, - 25 * CELL_SIZE + 5, - 25 * CELL_SIZE + 20, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return msg.wParam; -} - -static void PaintCells(HDC WindowDC, WORD BitCount1, WORD BitCount2, - int XDest, int YDest) -{ - HBRUSH Brush; - RECT Rect; - UINT row, col; - BITMAPINFO *BitmapInfo; - HBITMAP DIB1, DIB2; - HDC DC1, DC2; - - BitmapInfo = malloc(sizeof(BITMAPINFO) + 15 * sizeof(RGBQUAD)); - BitmapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - BitmapInfo->bmiHeader.biWidth = 4 * CELL_SIZE + 9; - BitmapInfo->bmiHeader.biHeight = -(4 * CELL_SIZE + 9); // it's top down (since BI_RGB is used, the sign is operative of direction) - BitmapInfo->bmiHeader.biPlanes = 1; - BitmapInfo->bmiHeader.biBitCount = BitCount1; - BitmapInfo->bmiHeader.biCompression = BI_RGB; - BitmapInfo->bmiHeader.biSizeImage = 0; - BitmapInfo->bmiHeader.biXPelsPerMeter = 0; - BitmapInfo->bmiHeader.biYPelsPerMeter = 0; - BitmapInfo->bmiHeader.biClrUsed = 16; - BitmapInfo->bmiHeader.biClrImportant = 16; - for (col = 0; col < 16; col++) { - BitmapInfo->bmiColors[col] = Colors[col]; - } - DIB1 = CreateDIBSection(NULL, BitmapInfo, DIB_RGB_COLORS, NULL, NULL, 0); - DC1 = CreateCompatibleDC(NULL); - SelectObject(DC1, DIB1); - - BitmapInfo->bmiHeader.biBitCount = BitCount2; - DIB2 = CreateDIBSection(NULL, BitmapInfo, DIB_RGB_COLORS, NULL, NULL, 0); - DC2 = CreateCompatibleDC(NULL); - SelectObject(DC2, DIB2); - free(BitmapInfo); - - /* Now paint on the first bitmap */ - for (row = 0; row < 4; row++) - { - for (col = 0; col < 4; col++) - { - Brush = CreateSolidBrush(RGB(Colors[4 * row + col].rgbRed, - Colors[4 * row + col].rgbGreen, - Colors[4 * row + col].rgbBlue)); - Rect.left = CELL_SIZE * col + 5; - Rect.top = CELL_SIZE * row + 5; - Rect.right = Rect.left + CELL_SIZE; - Rect.bottom = Rect.top + CELL_SIZE; - FillRect(DC1, &Rect, Brush); - DeleteObject(Brush); - } - } - - /* Copy the first bitmap to the second */ - BitBlt(DC2, 4, 4, 4 * CELL_SIZE, 4 * CELL_SIZE, DC1, 5, 5, SRCCOPY); - - /* Show results on screen */ - BitBlt(WindowDC, XDest, YDest, 4 * CELL_SIZE, 4 * CELL_SIZE, DC2, 4, 4, SRCCOPY); -} - -LRESULT CALLBACK MainWndProc(HWND Wnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC WindowDC; - - switch(msg) - { - case WM_PAINT: - WindowDC = BeginPaint(Wnd, &ps); - - PaintCells(WindowDC, 4, 4, 0, 0); - PaintCells(WindowDC, 4, 8, 5 * CELL_SIZE, 0); - PaintCells(WindowDC, 4, 16, 10 * CELL_SIZE, 0); - PaintCells(WindowDC, 4, 24, 15 * CELL_SIZE, 0); - PaintCells(WindowDC, 4, 32, 20 * CELL_SIZE, 0); - - PaintCells(WindowDC, 8, 4, 0, 5 * CELL_SIZE); - PaintCells(WindowDC, 8, 8, 5 * CELL_SIZE, 5 * CELL_SIZE); - PaintCells(WindowDC, 8, 16, 10 * CELL_SIZE, 5 * CELL_SIZE); - PaintCells(WindowDC, 8, 24, 15 * CELL_SIZE, 5 * CELL_SIZE); - PaintCells(WindowDC, 8, 32, 20 * CELL_SIZE, 5 * CELL_SIZE); - - PaintCells(WindowDC, 16, 4, 0, 10 * CELL_SIZE); - PaintCells(WindowDC, 16, 8, 5 * CELL_SIZE, 10 * CELL_SIZE); - PaintCells(WindowDC, 16, 16, 10 * CELL_SIZE, 10 * CELL_SIZE); - PaintCells(WindowDC, 16, 24, 15 * CELL_SIZE, 10 * CELL_SIZE); - PaintCells(WindowDC, 16, 32, 20 * CELL_SIZE, 10 * CELL_SIZE); - - PaintCells(WindowDC, 24, 4, 0, 15 * CELL_SIZE); - PaintCells(WindowDC, 24, 8, 5 * CELL_SIZE, 15 * CELL_SIZE); - PaintCells(WindowDC, 24, 16, 10 * CELL_SIZE, 15 * CELL_SIZE); - PaintCells(WindowDC, 24, 24, 15 * CELL_SIZE, 15 * CELL_SIZE); - PaintCells(WindowDC, 24, 32, 20 * CELL_SIZE, 15 * CELL_SIZE); - - PaintCells(WindowDC, 32, 4, 0, 20 * CELL_SIZE); - PaintCells(WindowDC, 32, 8, 5 * CELL_SIZE, 20 * CELL_SIZE); - PaintCells(WindowDC, 32, 16, 10 * CELL_SIZE, 20 * CELL_SIZE); - PaintCells(WindowDC, 32, 24, 15 * CELL_SIZE, 20 * CELL_SIZE); - PaintCells(WindowDC, 32, 32, 20 * CELL_SIZE, 20 * CELL_SIZE); - - EndPaint(Wnd, &ps); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(Wnd, msg, wParam, lParam); - } - - return 0; -} diff --git a/rostests/tests/dibtest/dibtest.rbuild b/rostests/tests/dibtest/dibtest.rbuild deleted file mode 100644 index 48653d8e47a..00000000000 --- a/rostests/tests/dibtest/dibtest.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - dibtest.c - diff --git a/rostests/tests/dirdlg/dirdlg.c b/rostests/tests/dirdlg/dirdlg.c deleted file mode 100644 index 932a0988cf7..00000000000 --- a/rostests/tests/dirdlg/dirdlg.c +++ /dev/null @@ -1,115 +0,0 @@ -#include -#include -#include -#include -#include "resource.h" - -static char selected[MAX_PATH + 1]; - -INT_PTR -CALLBACK -DlgMainProc( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -) -{ - char dir[MAX_PATH + 1]; - - switch(uMsg) - { - case WM_COMMAND: - { - switch(HIWORD(wParam)) - { - case LBN_DBLCLK: - { - switch(LOWORD(wParam)) - { - case IDC_DIRS: - { - if(DlgDirSelectEx(hwndDlg, dir, MAX_PATH, IDC_DIRS)) - { - chdir(dir); - GetCurrentDirectory(MAX_PATH, dir); - DlgDirList(hwndDlg, dir, IDC_DIRS, IDC_DIREDIT, DDL_DIRECTORY | DDL_DRIVES); - } - else - { - SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_OK, 0), 0); - } - break; - } - } - break; - } - default: - { - switch(LOWORD(wParam)) - { - case IDC_OK: - { - char file[MAX_PATH + 1]; - int len; - - if(!DlgDirSelectEx(hwndDlg, file, MAX_PATH, IDC_DIRS)) - { - GetCurrentDirectory(MAX_PATH, selected); - len = strlen(selected); - if(strlen(file)) - { - if(selected[len - 1] != '\\') - { - lstrcat(selected, "\\"); - } - lstrcat(selected, file); - EndDialog(hwndDlg, IDC_OK); - } - } - break; - } - case IDC_CANCEL: - { - EndDialog(hwndDlg, IDC_CANCEL); - break; - } - } - break; - } - } - break; - } - case WM_INITDIALOG: - { - SendDlgItemMessage(hwndDlg, IDC_DIRS, LB_SETCOLUMNWIDTH, 150, 0); - GetCurrentDirectory(MAX_PATH, dir); - DlgDirList(hwndDlg, dir, IDC_DIRS, IDC_DIREDIT, DDL_DIRECTORY | DDL_DRIVES); - SetFocus(GetDlgItem(hwndDlg, IDC_DIRS)); - break; - } - case WM_CLOSE: - { - EndDialog(hwndDlg, IDC_CANCEL); - return TRUE; - } - } - return FALSE; -} - -int WINAPI -WinMain( - HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - char str[MAX_PATH + 32]; - if(DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), 0, DlgMainProc) == IDC_OK) - { - sprintf(str, "You selected \"%s\"", selected); - MessageBox(0, str, "Selected file", MB_ICONINFORMATION); - } - return 0; -} - diff --git a/rostests/tests/dirdlg/dirdlg.rbuild b/rostests/tests/dirdlg/dirdlg.rbuild deleted file mode 100644 index e80909ba03c..00000000000 --- a/rostests/tests/dirdlg/dirdlg.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - . - kernel32 - user32 - gdi32 - dirdlg.c - dirdlg.rc - diff --git a/rostests/tests/dirdlg/dirdlg.rc b/rostests/tests/dirdlg/dirdlg.rc deleted file mode 100644 index bd48b635794..00000000000 --- a/rostests/tests/dirdlg/dirdlg.rc +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "resource.h" - -IDD_MAIN DIALOG DISCARDABLE 20, 20, 220, 140 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -FONT 8, "MS Sans Serif" -CAPTION "Select a file" -BEGIN - EDITTEXT IDC_DIREDIT, 5, 5, 210, 13, ES_READONLY | ES_LEFT | WS_CHILD | WS_VISIBLE | WS_TABSTOP - LISTBOX IDC_DIRS, 5, 23, 210, 92, LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL - PUSHBUTTON "&OK", IDC_OK, 60, 120, 40, 15, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP - PUSHBUTTON "&Cancel", IDC_CANCEL, 120, 120, 40, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP -END diff --git a/rostests/tests/dirdlg/resource.h b/rostests/tests/dirdlg/resource.h deleted file mode 100644 index 7a1063b932e..00000000000 --- a/rostests/tests/dirdlg/resource.h +++ /dev/null @@ -1,6 +0,0 @@ -#define IDD_MAIN 101 - -#define IDC_OK 1 -#define IDC_CANCEL 2 -#define IDC_DIRS 100 -#define IDC_DIREDIT 101 diff --git a/rostests/tests/directory.rbuild b/rostests/tests/directory.rbuild deleted file mode 100644 index 92bca8df9cf..00000000000 --- a/rostests/tests/directory.rbuild +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rostests/tests/diskspeed/diskspeed.c b/rostests/tests/diskspeed/diskspeed.c deleted file mode 100644 index acb83c8d386..00000000000 --- a/rostests/tests/diskspeed/diskspeed.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (C) 2004 ReactOS Team - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS diskspeed.exe - * FILE: apps/tests/diskspeed/diskspeed.c - * PURPOSE: Determines disk transfer rates - * PROGRAMMER: - */ - -#include -#include -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include - -#define _NTSCSI_USER_MODE_ -#include -#include - -BOOL GetInquiryData(HANDLE hDevice, PINQUIRYDATA InquiryData) -{ - BOOL Result; - DWORD dwReturned; - SCSI_ADDRESS ScsiAddress; - PSCSI_ADAPTER_BUS_INFO AdapterInfo; - PSCSI_INQUIRY_DATA InquiryBuffer; - BYTE Buffer[4096]; - int i; - - Result = DeviceIoControl(hDevice, - IOCTL_SCSI_GET_ADDRESS, - NULL, - 0, - &ScsiAddress, - sizeof(ScsiAddress), - &dwReturned, - FALSE); - if (Result == FALSE) - { - return FALSE; - } - Result = DeviceIoControl(hDevice, - IOCTL_SCSI_GET_INQUIRY_DATA, - NULL, - 0, - Buffer, - sizeof(Buffer), - &dwReturned, - FALSE); - if (Result) - { - AdapterInfo = (PSCSI_ADAPTER_BUS_INFO)Buffer; - for (i = 0; i < AdapterInfo->NumberOfBuses; i++) - { - InquiryBuffer = (PSCSI_INQUIRY_DATA) (Buffer + AdapterInfo->BusData[i].InquiryDataOffset); - if (AdapterInfo->BusData[i].InquiryDataOffset) - { - while (1) - { - if (InquiryBuffer->PathId == ScsiAddress.PathId && - InquiryBuffer->TargetId == ScsiAddress.TargetId && - InquiryBuffer->Lun == ScsiAddress.Lun) - { - memcpy(InquiryData, InquiryBuffer->InquiryData, sizeof(INQUIRYDATA)); - return TRUE; - } - if (InquiryBuffer->NextInquiryDataOffset == 0) - { - break; - } - InquiryBuffer = (PSCSI_INQUIRY_DATA) (Buffer + InquiryBuffer->NextInquiryDataOffset); - } - } - } - } - return FALSE; -} - - - -int main(void) -{ - HANDLE hDevice; - OVERLAPPED ov; - - PBYTE Buffer = NULL ; - DWORD Start; - DWORD dwReturned; - DWORD dwReadTotal; - DWORD Size; - BOOL Result; - ULONG Drive; - CHAR Name[20]; - - INQUIRYDATA InquiryData; - - - Drive = 0; - while (1) - { - sprintf(Name, "\\\\.\\PHYSICALDRIVE%ld", Drive); - hDevice = CreateFile(Name, - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - 0, - NULL); - if (hDevice == INVALID_HANDLE_VALUE) - { - if (Drive > 0) - { - VirtualFree(Buffer, 512 * 1024, MEM_RELEASE); - } - else - { - printf("Cannot open '%s'\n", Name); - } - break; - } - if (Drive == 0) - { - printf("Transfer Size (kB) 1 2 4 8 16 32 64 128 256\n"); - printf("Transfer Rate (MB/s)\n"); - printf("-------------------------------------------------------------------------------\n"); - - Buffer = VirtualAlloc(NULL, 512 * 1024, MEM_COMMIT, PAGE_READWRITE); - } - Result = GetInquiryData(hDevice, &InquiryData); - if (Result) - { - printf("%.24s ", InquiryData.VendorId); - } - else - { - printf("Disk %ld ", Drive + 1); - } - Size = 1024; - memset(&ov, 0, sizeof(OVERLAPPED)); - while (Size <= 256 * 1024) - { - memset(Buffer, 0, Size); - dwReadTotal = 0; - - Start = GetTickCount() + 2000; - while (Start > GetTickCount()) - { - Result = ReadFile(hDevice, Buffer, Size, &dwReturned, &ov); - if (Result) - { - dwReadTotal += dwReturned; - ov.Offset += dwReturned; - } - } - dwReadTotal /= 2048; - printf("%3ld.%ld ", dwReadTotal / 1024, (dwReadTotal % 1024) * 10 / 1024); - Size *= 2; - } - printf("\n"); - CloseHandle(hDevice); - Drive++; - } - printf("\n"); - - - return 0; -} diff --git a/rostests/tests/diskspeed/diskspeed.rbuild b/rostests/tests/diskspeed/diskspeed.rbuild deleted file mode 100644 index b119d6699fc..00000000000 --- a/rostests/tests/diskspeed/diskspeed.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - diskspeed.c - diff --git a/rostests/tests/dnsapi/dnsapi.c b/rostests/tests/dnsapi/dnsapi.c deleted file mode 100644 index e82dbd35a80..00000000000 --- a/rostests/tests/dnsapi/dnsapi.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include -#include -#include -#include - -int main( int argc, char **argv ) { - PDNS_RECORD QueryReply, AddrResponse; - DWORD Addr; - - assert (DnsValidateName( "||||", DnsNameDomain ) == DNS_ERROR_INVALID_NAME_CHAR); - assert (DnsValidateName( "a.b.c", DnsNameDomainLabel ) == DNS_ERROR_INVALID_NAME); - assert (DnsValidateName( "1234", DnsNameDomainLabel ) == ERROR_SUCCESS); - assert (DnsValidateName( "fubar", DnsNameDomain ) == ERROR_SUCCESS); - assert (DnsQuery ("www.reactos.com", DNS_TYPE_A, DNS_QUERY_STANDARD, - NULL, &QueryReply, NULL) == ERROR_SUCCESS); - AddrResponse = QueryReply; - while( AddrResponse ) { - if( AddrResponse->wType == DNS_TYPE_A ) { - Addr = ntohl( AddrResponse->Data.A.IpAddress ); - printf( "www.reactos.com == %d.%d.%d.%d\n", - (int)(Addr >> 24) & 0xff, - (int)(Addr >> 16) & 0xff, - (int)(Addr >> 8) & 0xff, - (int)Addr & 0xff ); - } - AddrResponse = AddrResponse->pNext; - } - DnsRecordListFree( QueryReply, DnsFreeRecordList ); - - return 0; -} diff --git a/rostests/tests/dnsapi/dnsapi.rbuild b/rostests/tests/dnsapi/dnsapi.rbuild deleted file mode 100644 index ddc3e90eb01..00000000000 --- a/rostests/tests/dnsapi/dnsapi.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - dnsapi - ws2_32 - dnsapi.c - diff --git a/rostests/tests/dnsquery/dnsquery.c b/rostests/tests/dnsquery/dnsquery.c deleted file mode 100644 index 7ceaaf3ee5f..00000000000 --- a/rostests/tests/dnsquery/dnsquery.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include -#include -#include - -int main( int argc, char **argv ) { - PDNS_RECORD QueryReply, AddrResponse; - DWORD Addr; - - assert (DnsQuery ("www.reactos.com", DNS_TYPE_A, DNS_QUERY_STANDARD, - NULL, &QueryReply, NULL) == ERROR_SUCCESS); - AddrResponse = QueryReply; - while( AddrResponse ) { - if( AddrResponse->wType == DNS_TYPE_A ) { - Addr = ntohl( AddrResponse->Data.A.IpAddress ); - printf( "www.reactos.com == %d.%d.%d.%d\n", - (int)(Addr >> 24) & 0xff, - (int)(Addr >> 16) & 0xff, - (int)(Addr >> 8) & 0xff, - (int)Addr & 0xff ); - } - AddrResponse = AddrResponse->pNext; - } - DnsRecordListFree( QueryReply, DnsFreeRecordList ); - - return 0; -} diff --git a/rostests/tests/dnsquery/dnsquery.rbuild b/rostests/tests/dnsquery/dnsquery.rbuild deleted file mode 100644 index 506e29d2d73..00000000000 --- a/rostests/tests/dnsquery/dnsquery.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - dnsapi - ws2_32 - dnsquery.c - diff --git a/rostests/tests/edit/edit.rbuild b/rostests/tests/edit/edit.rbuild deleted file mode 100644 index 62b0d26dfb1..00000000000 --- a/rostests/tests/edit/edit.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - kernel32 - user32 - gdi32 - edittest.c - utils.c - diff --git a/rostests/tests/edit/edittest.c b/rostests/tests/edit/edittest.c deleted file mode 100644 index 35ab9b5b4e4..00000000000 --- a/rostests/tests/edit/edittest.c +++ /dev/null @@ -1,649 +0,0 @@ -/* Edit Control Test for ReactOS, quick n' dirty. Very rigid too. - * There you go, is only a test program. Not made to be fast, small - * easy to mantain, or portable. Lots of duplicated code too. - - * I'm not erasing text because I don't want to use other functions from th API - * or make this more complex. - - * This source code is in the PUBLIC DOMAIN and has NO WARRANTY. - * by Waldo Alvarez Cañizares , June 22, 2003. */ - -//#define WIN32_LEAN_AND_MEAN -#include -#include "utils.h" - -#define CREATEWINDOW 106 -#define CREATEWINDOWEX 107 -#define CREATEWINDOWW 108 - -#define ResultX 0 -#define ResultY 305 - -#define NOTIFYX 350 -#define NOTIFYY 285 - -#define BUFFERLEN 80 /* Size of buffer to hold result strings */ - -/* Edit is created with this text */ -#define TestStr "The quick brown fox jumps over the lazy dog" - -#define TestStrW L"This is a WCHAR string" /* Wide to support unicode edits */ - -#define MAXMESSAGEBUTTONS 42 - -HWND g_hwnd = NULL; -HINSTANCE g_hInst = NULL; - -int pos = 10; -int n = 0; -int yButPos = 10; -int xButPos = 10; - -DWORD EditStyle = 0; -DWORD EditWidth = 240; -DWORD EditHeight = 250; - -BOOL UnicodeUsed = FALSE; - -HWND hwndEdit = NULL; - -POINTL point={10,3}; -RECT rect = {0,0,20,20},rect2; -DWORD StartP,EndP; - -#define ReplaceTextStr "->> Replaced!! <<-" - -char* AllocatedText; /* Buffer in the heap to feed it to the edit control */ -char* NewText = "New text for the edit control"; -wchar_t* NewTextW = L"New text for the edit control in UNICODE"; // Wide - -char TextBuffer[BUFFERLEN]={'R','e','s','u','l','t',':',' '}; - -typedef void FunctionHandler(HWND,DWORD,WPARAM,LPARAM); -typedef FunctionHandler* LPFUNCTIONHANDLER; - -VOID -PrintTextXY(char* Text,int x,int y,int len) -{ - HDC hdc; - hdc = GetDC (g_hwnd); - SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); - - TextOut (hdc, x,y,Text,len); - ReleaseDC (g_hwnd, hdc); - ValidateRect (g_hwnd, &rect); -} - -static -VOID -HandlePrintReturnHex(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) - { - int ret; - ret = SendMessage(handle,Msg,wParam,lParam); - htoa(ret,&TextBuffer[8]); - PrintTextXY(TextBuffer,ResultX,ResultY,16); - } - -static -VOID -HandleSetHandlePrintHex(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) - { - LPVOID pMem; - HANDLE hNewBuffer; - int ret; - - LocalFree((HLOCAL)SendMessage(handle, EM_GETHANDLE, 0, 0L)); - if (UnicodeUsed) - { - hNewBuffer = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT, 100); - pMem = LocalLock(hNewBuffer); - strcpyw_((wchar_t*)pMem,NewTextW); - } - else - { - hNewBuffer = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT,50); - pMem = LocalLock(hNewBuffer); - strcpy_((char*)pMem,NewText); - } - - LocalUnlock(pMem); - hNewBuffer = LocalHandle(pMem); - - /* Updates the buffer and displays new buffer */ - ret = SendMessage(handle, EM_SETHANDLE, (WPARAM)hNewBuffer, 0L); - - htoa(ret,&TextBuffer[8]); - PrintTextXY(TextBuffer,ResultX,ResultY,16); - } - -static -VOID -HandlePrintReturnStr(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) - { - int ret; - TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */ - ret = SendMessage(handle,Msg,wParam,lParam); - PrintTextXY(TextBuffer,ResultX,ResultY,8+ret); - } - -static -VOID -HandlePrintRect(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) - { - TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */ - SendMessage(handle,Msg,wParam,lParam); - - htoa(rect.top,&TextBuffer[8]); - TextBuffer[8+8] = ' '; - htoa(rect.bottom,&TextBuffer[8+8+1]); - TextBuffer[8+8+8+1] = ' '; - htoa(rect.left,&TextBuffer[8+8+8+1+1]); - TextBuffer[8+8+8+8+1+1] = ' '; - htoa(rect.right,&TextBuffer[8+8+8+8+1+1+1]); - - PrintTextXY(TextBuffer,ResultX,ResultY,8+4*9-1); - } - -static -VOID -HandlePrintPasswdChar(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam) - { - HDC hdc; - int ret = SendMessage(handle,Msg,wParam,lParam); - - int s; - - if (ret) - { - s = 1; - TextBuffer[8] = (char)(ret); - } - else - { - TextBuffer[8] = 'N'; - TextBuffer[9] = 'U'; - TextBuffer[10] = 'L'; - TextBuffer[11] = 'L'; - s = 4; - } - - hdc = GetDC (g_hwnd); - SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); - - TextOut (hdc,ResultX ,ResultY,TextBuffer,8+s); - ReleaseDC (g_hwnd, hdc); - ValidateRect (g_hwnd, &rect); - } - - -struct -{ - char* Text; /* Text for the button */ - DWORD MsgCode; /* Message Code */ - WPARAM wParam; /* Well hope you can understand this */ - LPARAM lParam; /* ditto */ - LPFUNCTIONHANDLER Handler; /* Funtion called to handle the result of each message */ -} -Msg[] = -{ - {"EM_CANUNDO",EM_CANUNDO,0,0,&HandlePrintReturnHex}, - {"EM_CHARFROMPOS",EM_CHARFROMPOS,(WPARAM)&point,0,&HandlePrintReturnHex}, - {"EM_EMPTYUNDOBUFFER",EM_EMPTYUNDOBUFFER,0,0,&HandlePrintReturnHex}, - {"EM_FMTLINES",EM_FMTLINES,TRUE,0,&HandlePrintReturnHex}, - {"EM_GETFIRSTVISIBLELINE",EM_GETFIRSTVISIBLELINE,0,0,&HandlePrintReturnHex}, - - {"EM_GETLIMITTEXT",EM_GETLIMITTEXT,0,0,&HandlePrintReturnHex}, - {"EM_GETLINE",EM_GETLINE,2,(WPARAM)&TextBuffer[8],&HandlePrintReturnStr}, - {"EM_GETLINECOUNT",EM_GETLINECOUNT,0,0,&HandlePrintReturnHex}, - {"EM_GETMARGINS",EM_GETMARGINS,0,0,&HandlePrintReturnHex}, - {"EM_SETMARGINS",EM_SETMARGINS,EC_LEFTMARGIN,10,&HandlePrintReturnHex}, - - {"EM_GETMODIFY",EM_GETMODIFY,0,0,&HandlePrintReturnHex}, - {"EM_SETMODIFY",EM_SETMODIFY,TRUE,0,&HandlePrintReturnHex}, - - {"EM_GETSEL",EM_GETSEL,(WPARAM)&StartP,(LPARAM)&EndP,&HandlePrintReturnHex}, - - {"EM_GETTHUMB",EM_GETTHUMB,0,0,&HandlePrintReturnHex}, - - {"EM_LIMITTEXT",EM_LIMITTEXT,10,0,&HandlePrintReturnHex}, - {"EM_LINEFROMCHAR",EM_LINEFROMCHAR,-1,0,&HandlePrintReturnHex}, - {"EM_POSFROMCHAR",EM_POSFROMCHAR,10,0,&HandlePrintReturnHex}, - {"EM_LINEINDEX",EM_LINEINDEX,2,0,&HandlePrintReturnHex}, - {"EM_LINELENGTH",EM_LINELENGTH,-1,0,&HandlePrintReturnHex}, - - {"EM_GETWORDBREAKPROC",EM_GETWORDBREAKPROC,0,0,&HandlePrintReturnHex}, - {"EM_REPLACESEL",EM_REPLACESEL,TRUE,(LPARAM)&ReplaceTextStr,&HandlePrintReturnHex}, - - {"EM_LINESCROLL",EM_LINESCROLL,5,1,&HandlePrintReturnHex}, - {"EM_SCROLL",EM_SCROLL,SB_LINEDOWN,0,&HandlePrintReturnHex}, - {"EM_SCROLLCARET",EM_SCROLLCARET,0,0,&HandlePrintReturnHex}, - - {"EM_SETHANDLE",EM_SETHANDLE,0,0,&HandleSetHandlePrintHex}, - {"EM_GETHANDLE",EM_GETHANDLE,0,0,&HandlePrintReturnHex}, - {"EM_GETPASSWORDCHAR",EM_GETPASSWORDCHAR,0,0,&HandlePrintPasswdChar}, - {"EM_SETPASSWORDCHAR - clear",EM_SETPASSWORDCHAR,0,0,&HandlePrintReturnHex}, - {"EM_SETPASSWORDCHAR - x",EM_SETPASSWORDCHAR,'x',0,&HandlePrintReturnHex}, - - {"EM_SETREADONLY - set",EM_SETREADONLY,TRUE,0,&HandlePrintReturnHex}, - {"EM_SETREADONLY - clear",EM_SETREADONLY,FALSE,0,&HandlePrintReturnHex}, - - {"EM_GETRECT",EM_GETRECT,0,(LPARAM)&rect2,&HandlePrintRect}, - {"EM_SETRECT",EM_SETRECT,0,(LPARAM)&rect,&HandlePrintReturnHex}, - {"EM_SETRECTNP",EM_SETRECTNP,0,(LPARAM)&rect,&HandlePrintReturnHex}, - {"EM_SETSEL",EM_SETSEL,1,3,&HandlePrintReturnHex}, - - {"EM_SETSEL - all",EM_SETSEL,0,-1,&HandlePrintReturnHex}, - {"EM_SETSEL - remove",EM_SETSEL,-1,0,&HandlePrintReturnHex}, - {"EM_UNDO",EM_UNDO,0,0,&HandlePrintReturnHex}, - {"WM_UNDO",WM_UNDO,0,0,&HandlePrintReturnHex}, - {"WM_PASTE",WM_PASTE,0,0,&HandlePrintReturnHex}, - - {"WM_CUT",WM_CUT,0,0,&HandlePrintReturnHex}, - {"WM_COPY",WM_COPY,0,0,&HandlePrintReturnHex} - -}; - -DWORD EditStyles[] = { - WS_THICKFRAME,WS_DISABLED,WS_BORDER,ES_LOWERCASE,ES_UPPERCASE,ES_NUMBER,ES_AUTOVSCROLL, - ES_AUTOHSCROLL,ES_LEFT,ES_CENTER,ES_RIGHT,ES_MULTILINE, - ES_NOHIDESEL,ES_OEMCONVERT,ES_PASSWORD,ES_READONLY,ES_WANTRETURN, - WS_HSCROLL,WS_VSCROLL - }; - -char* StyleNames[] = { - "WS_THICKFRAME","WS_DISABLED","WS_BORDER","ES_LOWERCASE","ES_UPPERCASE","ES_NUMBER","ES_AUTOVSCROLL", - "ES_AUTOHSCROLL","ES_LEFT","ES_CENTER","ES_RIGHT","ES_MULTILINE", - "ES_NOHIDESEL","ES_OEMCONVERT","ES_PASSWORD","ES_READONLY","ES_WANTRETURN", - "WS_HSCROLL","WS_VSCROLL" - }; - -#define NUMBERBUTTONS 26 -HWND Buttons[NUMBERBUTTONS]; -HWND MessageButtons[MAXMESSAGEBUTTONS]; -HWND Back1But,Back2But; -HWND NextBut; - - -HWND -CreateCheckButton(const char* lpWindowName, DWORD xSize, DWORD id) - { - HWND h; - h = CreateWindowEx(0, - "BUTTON", - lpWindowName, - WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, - xButPos, /* x */ - yButPos, /* y */ - xSize, /* nWidth */ - 20, /* nHeight */ - g_hwnd, - (HMENU) id, - g_hInst, - NULL - ); - yButPos += 21; - return h; - } - -HWND -CreatePushButton(const char* lpWindowName, DWORD xSize, DWORD id,DWORD Style) - { - - HWND h = CreateWindow("BUTTON", - lpWindowName, - WS_CHILD | BS_PUSHBUTTON | Style, - xButPos, // x - yButPos, // y - xSize, // nWidth - 20, // nHeight - g_hwnd, - (HMENU) id, - g_hInst, - NULL - ); - - yButPos += 21; - return h; - } - -VOID -ReadNHide() - { - int i; - EditStyle = 0; - for (i=0 ; i< 19 ; i++) - { - if(BST_CHECKED == SendMessage(Buttons[i],BM_GETCHECK,0,0)) - EditStyle |= EditStyles[i]; - ShowWindow(Buttons[i],SW_HIDE); - } - - for (; i< NUMBERBUTTONS ; i++)ShowWindow(Buttons[i],SW_HIDE); - for (i=0 ; i< 26 ; i++) ShowWindow(MessageButtons[i],SW_SHOW); - - ShowWindow(Back1But,SW_SHOW); - ShowWindow(NextBut,SW_SHOW); - } - -VOID -ForwardToSecondPage() - { - int i; - for (i=0;i<26;i++)ShowWindow(MessageButtons[i],SW_HIDE); - for(;i= 600) - { - Msg[LOWORD(wParam)-600].Handler(hwndEdit, - Msg[LOWORD(wParam)-600].MsgCode, - Msg[LOWORD(wParam)-600].wParam, - Msg[LOWORD(wParam)-600].lParam); - break; - } - - switch(LOWORD(wParam)){ - - case 100: - EditWidth += 10; - break; - - case 101: - EditWidth -= 10; - break; - - case 102: - EditHeight += 10; - break; - - case 103: - EditHeight -= 10; - break; - - case 400: - BackToInitialPage(); - break; - - case 401: - ForwardToSecondPage(); - break; - - case 402: - BackToFirstPage(); - break; - - case CREATEWINDOW: - UnicodeUsed = FALSE; - ReadNHide(); - hwndEdit = CreateWindow("EDIT", - TestStr, - EditStyle | WS_CHILD | WS_VISIBLE, - 350, - 10, - EditWidth, - EditHeight, - g_hwnd, - NULL, - g_hInst, - NULL); - break; - - case CREATEWINDOWEX: - UnicodeUsed = FALSE; - ReadNHide(); - hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, - "EDIT", - TestStr, - EditStyle | WS_CHILD | WS_VISIBLE , - 350, - 10, - EditWidth, - EditHeight, - g_hwnd, - NULL, - g_hInst, - NULL); - break; - - case CREATEWINDOWW: - UnicodeUsed = TRUE; - ReadNHide(); - hwndEdit = CreateWindowExW(WS_EX_CLIENTEDGE, - L"EDIT", - TestStrW, - EditStyle | WS_CHILD | WS_VISIBLE , - 350, - 10, - EditWidth, - EditHeight, - g_hwnd, - NULL, - g_hInst, - NULL); - break; - } - - if (lParam == (LPARAM)hwndEdit) - switch(HIWORD(wParam)) - { - case EN_CHANGE: - PrintTextXY("EN_CHANGE notification",NOTIFYX,NOTIFYY,22); - break; - - case EN_ERRSPACE: - PrintTextXY("EN_ERRSPACE notification",NOTIFYX,NOTIFYY,24); - break; - - /* --- FIXME not defined in w32api-2.3 headers - case H_SCROLL: - PrintTextXY("H_SCROLL notification",NOTIFYX,NOTIFYY,21); - break; */ - - /* --- FIXME not defined in w32api-2.3 headers - case KILL_FOCUS: - PrintTextXY("KILL_FOCUS notification",NOTIFYX,NOTIFYY,23); - break; */ - - /* --- FIXME not defined in w32api-2.3 headers - case EN_MAXTEST: - PrintTextXY("EN_MAXTEXT notification",NOTIFYX,NOTIFYY,23); - break; */ - - case EN_SETFOCUS: - PrintTextXY("EN_SETFOCUS notification",NOTIFYX,NOTIFYY,24); - break; - - case EN_UPDATE: - PrintTextXY("EN_UPDATE notification",NOTIFYX,NOTIFYY + 20,22); - break; - - case EN_VSCROLL: - PrintTextXY("EN_VSCROLL notification",NOTIFYX,NOTIFYY,23); - break; - - } - - break; - - case WM_SIZE : - return 0; - - case WM_CLOSE: - DestroyWindow (g_hwnd); - return 0; - - case WM_QUERYENDSESSION: - return 0; - - case WM_DESTROY: - PostQuitMessage(0); - return 0; - } - return DefWindowProc ( hwnd, msg, wParam, lParam ); -} - -HWND -RegisterAndCreateWindow (HINSTANCE hInst, - const char* className, - const char* title) -{ - WNDCLASSEX wc; - HWND hwnd; - - g_hInst = hInst; - - wc.cbSize = sizeof (WNDCLASSEX); - - wc.lpfnWndProc = WndProc; /* window procedure */ - wc.hInstance = hInst; /* owner of the class */ - - wc.lpszClassName = className; - wc.hCursor = LoadCursor ( 0, (LPCTSTR)IDC_ARROW ); - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hIcon = 0; - wc.hIconSm = 0; - wc.lpszMenuName = 0; - - if ( !RegisterClassEx ( &wc ) ) - return NULL; - - hwnd = CreateWindowEx ( - 0, /* dwStyleEx */ - className, /* class name */ - title, /* window title */ - - WS_OVERLAPPEDWINDOW, /* dwStyle */ - - 1, /* x */ - 1, /* y */ - 560, /* width */ - 350, /* height */ - NULL, /* hwndParent */ - NULL, /* hMenu */ - hInst, - 0 - ); - - if (!hwnd) return NULL; - - ShowWindow (hwnd, SW_SHOW); - UpdateWindow (hwnd); - - return hwnd; -} - -int -WINAPI -WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow ) -{ - char className [] = "Edit Control Test"; - MSG msg; - - RegisterAndCreateWindow ( hInst, className, "Edit Control Styles Test" ); - - // Message loop - while (GetMessage (&msg, NULL, 0, 0)) - { - TranslateMessage (&msg); - DispatchMessage (&msg); - } - return msg.wParam; - -} diff --git a/rostests/tests/edit/utils.c b/rostests/tests/edit/utils.c deleted file mode 100644 index 563191e9531..00000000000 --- a/rostests/tests/edit/utils.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Edit Control Test for ReactOS, quick n' dirty. There you go - * This source code is in the PUBLIC DOMAIN and has NO WARRANTY. - * by Waldo Alvarez Cañizares , June 22, 2003. - */ - -#include - -static const char hexvals[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; -VOID htoa (unsigned int val, char *buf) -{ - int i; - buf += 7; - - for (i=0;i<8;i++) - { - *buf-- = hexvals[val & 0x0000000F]; - val = val >> 4; - } -} - - -VOID strcpy_(char *dst, const char *src) -{ - const char* p = src; - while ((*dst++ = *p++)) {} -} - -VOID strcpyw_(wchar_t* dst,wchar_t* src) -{ - const wchar_t* p = src; - while ((*dst++ = *p++)) {} -} diff --git a/rostests/tests/edit/utils.h b/rostests/tests/edit/utils.h deleted file mode 100644 index f6a12649c1e..00000000000 --- a/rostests/tests/edit/utils.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ -VOID htoa (unsigned int, char *); -VOID strcpy_(char *, const char *); -VOID strcpyw_(wchar_t*,wchar_t*); -#ifdef __cplusplus - } -#endif diff --git a/rostests/tests/enhmetafile/enhmetafile.c b/rostests/tests/enhmetafile/enhmetafile.c deleted file mode 100644 index ff41e5677d7..00000000000 --- a/rostests/tests/enhmetafile/enhmetafile.c +++ /dev/null @@ -1,123 +0,0 @@ -#include -#include -#include - -//HFONT tf; -HENHMETAFILE EnhMetafile; -SIZE EnhMetafileSize; -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - ENHMETAHEADER emh; - - EnhMetafile = GetEnhMetaFile("test.emf"); - if(!EnhMetafile) - { - fprintf(stderr, "GetEnhMetaFile failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - GetEnhMetaFileHeader(EnhMetafile, sizeof(ENHMETAHEADER), &emh); - EnhMetafileSize.cx = emh.rclBounds.right - emh.rclBounds.left; - EnhMetafileSize.cy = emh.rclBounds.bottom - emh.rclBounds.top; - - wc.lpszClassName = "EnhMetaFileClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - DeleteEnhMetaFile(EnhMetafile); - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("EnhMetaFileClass", - "Enhanced Metafile test", - WS_OVERLAPPEDWINDOW, - 0, - 0, - EnhMetafileSize.cx + (2 * GetSystemMetrics(SM_CXSIZEFRAME)) + 2, - EnhMetafileSize.cy + (2 * GetSystemMetrics(SM_CYSIZEFRAME)) + GetSystemMetrics(SM_CYCAPTION) + 2, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - DeleteEnhMetaFile(EnhMetafile); - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - //tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - // ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - // DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); - - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - DeleteEnhMetaFile(EnhMetafile); - - //DeleteObject(tf); - UnregisterClass("EnhMetaFileClass", hInstance); - - return msg.wParam; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) - { - - case WM_PAINT: - { - PAINTSTRUCT ps; - RECT rc; - HDC hDC; - int bk; - - GetClientRect(hWnd, &rc); - hDC = BeginPaint(hWnd, &ps); - rc.left = (rc.right / 2) - (EnhMetafileSize.cx / 2); - rc.top = (rc.bottom / 2) - (EnhMetafileSize.cy / 2); - rc.right = rc.left + EnhMetafileSize.cx; - rc.bottom = rc.top + EnhMetafileSize.cy; - bk = SetBkMode(hDC, TRANSPARENT); - Rectangle(hDC, rc.left - 1, rc.top - 1, rc.right + 1, rc.bottom + 1); - SetBkMode(hDC, bk); - PlayEnhMetaFile(hDC, EnhMetafile, &rc); - EndPaint(hWnd, &ps); - break; - } - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/enhmetafile/enhmetafile.rbuild b/rostests/tests/enhmetafile/enhmetafile.rbuild deleted file mode 100644 index ef26fa7f107..00000000000 --- a/rostests/tests/enhmetafile/enhmetafile.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - enhmetafile.c - diff --git a/rostests/tests/enhmetafile/test.emf b/rostests/tests/enhmetafile/test.emf deleted file mode 100644 index d056e2070df42f2bc1dba9539d22e13042c74239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120908 zcmeI5Z-`V?7>CcgR=VrIT`e|+cFawK5-Ujb+q#rdC}c=weMv~sWh*Ol{Sx%e-9AKM z1W8&SA`(I(aFIfkf?U#~#3+$OA`~JdBN0)0`<**G+qmPR?#`JxXXZJ~yL0Ex+;i`J z?!$ZT-hZdTIk!nsD2FuQqfk2Ao%4}}+uE zufoKI_unSEH+Jg>DlLjBib;wl#SBHEOxA$^JUA51BRY6vh|oeOx2%R%}%qJeHp>=Z*}|*MC>|ZG&smr~iMKeHi*<6bL{70uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZafx0Jf^r#IC)b&dQC}k(m-*26rb^Q_nO4$kE z6<(EHDpiPAc!gIXnrytnE4&KfK!`eN2gz4>MZOB*K!`fYSL7?aB434YAVi(yEAkay zk*`8H5TZ`<75NIU$X6j82vH~bihPAvL^v+vD5G22!0`rPbCv(si5#ymUn zRo&z(Npd0+={2(@X0y$vnl+fYlGnuStGQ-fX4}l9nH;-xLyqB9t$QUOq|;8b<(W%Y z6{%FM;xW=pj;%4VIvxAurN=;+XsaUQ2umtNcd)e%m*){CKt6KCb zZ`4y}(@NU7Qd`C_X3jP3!mFC|>Q}S%!Hg=FPjw&{4 zc(~E*5wmYfn?<~;6|c^iyTsGVPoX+j2t#H=A`A zw~2U_zE}Gz+xCs-o7%+3%(Qps3tpw{)n&82X7j4i_Kjwj4yF1Veeo(;uO!vGW-T#E zm6vV4*?zoA)+?RY(}|eT@tWtTU`}@C0$bk@xnxI!Y zq|h0&R9d#az7Ildtc2=J%`5FzZK>)Zh3jfz`}=n# z(#TuD{NmwNI$r70l&$f%fOwT}RnzfGr+0NGZe)uS=NR%;B3_-#t{g~1DyfcFiFl5P75PfLSSfh*WtA?h8hd)A9gNy;mo) z`?K&WnLVpSjx*@izp~t=RZ%m^S8?YnHG-?E(vXdFrg#;%S4lR4{684||AQZ;*a+fP z^j>WoXM0qw$!P~8ZU_H1TU;$M#yMZSirA~4&1Q~s`&Mgmyo%T>J$OowaH;6=fpX0b zuOjwJcibc?l@=SXBKAsG@!?fshuQN7+vEO!a4lX9Z>Ho1BF|c?u zLa2pTc!gIXcHZy`ukb2_10m|99VB1j75OTJ10m`pUqzg+dO~dR%G8Nh5qq_xG7f~8 z3tmO+mF{s)?~aMQrFa#wS3gvwJCY!$w(%-rul_WuhbN(Z^6X&-tj7WuhbNNoZO9sc$I=z>JA{W1EhGBf>%meZ>4pv5U&#P z>UXn63GHR!RU%#~W$jMrsmOShj#n4Wo=GKT;Z-_bDP^fk?mLrE3$K#$N@~5AM29AL zm6}&NO!{Q}DGRSs^GYe}xY@$U)xxU;y^>n{BkzyCuWum4O?e5`nWk4#OHcEg8f(^? z*Vp$)LJovj)MUL<$Mm|IG(xrJDV+`s_>R)*`6U9$mI&4IQYFii1s^7mSF0tC25~-8 z4R4tA2c*_sGbM`ZUZd5O9kxv$Cu?v8fx+xb_^R9=t&XSlDAZF|EDj%Phk!2A+EVfR zcXVD!rvP-cmQuq6)F$pTTUwEewUnlGJrmH&7zFb-Di3%32CZM zj4EDDT?&}DtBjrOG!=|GS3D<%>yLnP*Pg6L``P2T`C^h;huMo}2h1?4{v;Z8jnz-| z$xJYHl({(Te(st{OfE@99X(JtJv!8R+Dy+Op+I0X0_rYPJsYYMx^3C<0UaV3@mgoL zJ#$GaUKp(w#zO!C5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_P|pNzbIwgsv?-oY zY-(^$FE>X~T;BF0Rc=u%bFa9KZmsLd#*F1pcjJ=7t?tyKS?;s1Tiu%8)4h|m5EExO z_vu%yZfA4D;UgX0jlSml-2?7Hg)cjr=jQyopY}$}nGJ_}KUDa-oojV1svvjp+wAjw zy(=d8^}SVbv%=5VuWqwqnWC`n&uQ3)bC<2%<+367`r&hJFKs(;hqdPhwJr+pX67`--Uwzt-<4?p5UL z&2>4K>+;_%Q26&1isDjmdxJ) -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -#include - - -#ifndef SNDMSG -#define SNDMSG ::SendMessage -#endif /* ifndef SNDMSG */ - - -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - -HWND hListBox = NULL; -const int ID_LISTBOX = 101; - -HINSTANCE hInst; -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, - LPARAM lParam); - - -int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, - int nCmdShow) -{ - hInst = hInstance; - - WNDCLASS wc; - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.lpszClassName = WndClassName; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = hInstance; - wc.hCursor = NULL; //LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = reinterpret_cast( - COLOR_BTNFACE + 1 - ); - - if (RegisterClass(&wc)) - { - HWND hWnd = - CreateWindow( - WndClassName, TEXT("Font Enumeration Demo"), - WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | - WS_VISIBLE | WS_CLIPCHILDREN, - CW_USEDEFAULT, CW_USEDEFAULT, 295, 285, - NULL, NULL, hInst, NULL - ); - - if (hWnd) - { - ShowWindow(hWnd, nCmdShow); - UpdateWindow(hWnd); - - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} -//------------------------------------------------------------------------- - - -int CALLBACK MyEnumFontFamExProc(ENUMLOGFONTEX *lpelfe, - NEWTEXTMETRICEX* lpntme, int FontType, LPARAM lParam) -{ - if (FontType == TRUETYPE_FONTTYPE) - { - // if the typeface name is not already in the list - LPARAM name = reinterpret_cast(lpelfe->elfFullName); - if (SNDMSG(hListBox, LB_FINDSTRINGEXACT, (ULONG)-1, name) == LB_ERR) - { - // add each font to the list box - int index = SNDMSG(hListBox, LB_ADDSTRING, 0, name); - - // fix the size of the font - lpelfe->elfLogFont.lfHeight = -20; - lpelfe->elfLogFont.lfWidth = 0; - - // create a new font and store its handle - // as the data of the newly added item - HFONT hFont = CreateFontIndirect(&lpelfe->elfLogFont); - SNDMSG(hListBox, LB_SETITEMDATA, index, - reinterpret_cast(hFont)); - } - } - return TRUE; -} -//------------------------------------------------------------------------- - - -void AddScreenFonts() -{ - // grab a handle to the screen's DC - HDC hScreenDC = GetDC(NULL); - try - { - // - // NOTE: Windows 95, 98 and Me requires that the lpLogfont - // (second) parameter of the EnumFontFamiliesEx function is - // non-NULL. This parameter can be NULL on Windows NT/2000. - // - LOGFONT lf = {0}; - lf.lfCharSet = DEFAULT_CHARSET; - - // enumerate the current screen fonts - EnumFontFamiliesEx( - hScreenDC, &lf, - (FONTENUMPROC)MyEnumFontFamExProc, - 0, 0 - ); - } - catch (...) - { - // release the screen's DC - ReleaseDC(NULL, hScreenDC); - } - // release the screen's DC - ReleaseDC(NULL, hScreenDC); -} -//------------------------------------------------------------------------- - - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, - LPARAM lParam) -{ - switch (msg) - { - case WM_CREATE: - { - hListBox = - CreateWindowEx( - WS_EX_CLIENTEDGE, TEXT("LISTBOX"), TEXT(""), - WS_CHILD | WS_VISIBLE | LBS_STANDARD | - LBS_HASSTRINGS | LBS_OWNERDRAWFIXED, - 20, 10, 250, 250, - hWnd, reinterpret_cast(ID_LISTBOX), - hInst, NULL - ); - if (hListBox) - { - AddScreenFonts(); - } - } - case WM_MEASUREITEM: - { - // grab a pointer to the MEASUREITEMSTRUCT structure - LPMEASUREITEMSTRUCT lpmis = - reinterpret_cast(lParam); - - // test the identifier of the control that - // the message is meant for - if ((int)lpmis->CtlID == ID_LISTBOX) - { - // adjust the height - lpmis->itemHeight = 25; - - return TRUE; - } - break; - } - case WM_DRAWITEM: - { - // grab a pointer to the DRAWITEMSTRUCT structure - LPDRAWITEMSTRUCT lpdis = - reinterpret_cast(lParam); - - // test the identifier of the control that - // the message is meant for - if ((int)lpdis->CtlID == ID_LISTBOX) - { - COLORREF OldColor = GetTextColor(lpdis->hDC); - int stock = WHITE_BRUSH; - - // if the item is currently selected - if (lpdis->itemState & ODS_SELECTED) - { - // set the text color to white and - // the background color to black - COLORREF clrWhite = PALETTERGB(255, 255, 255); - OldColor = SetTextColor(lpdis->hDC, clrWhite); - stock = BLACK_BRUSH; - } - FillRect( - lpdis->hDC, &lpdis->rcItem, - static_cast(GetStockObject(stock)) - ); - - if ((int)lpdis->itemID != -1) - { - // extract the item's text - char text[MAX_PATH]; - SNDMSG(hListBox, LB_GETTEXT, lpdis->itemID, - reinterpret_cast(text)); - - // extract the corresponding font handle - DWORD value = - SNDMSG(hListBox, LB_GETITEMDATA, lpdis->itemID, 0); - HFONT hFont = reinterpret_cast(value); - - // select the corresponding font - // into the device context - HFONT HOldFont = static_cast( - SelectObject(lpdis->hDC, hFont) - ); - - // render the text transparently - SetBkMode(lpdis->hDC, TRANSPARENT); - - // render the text - RECT RText = lpdis->rcItem; - InflateRect(&RText, -2, -2); - DrawText(lpdis->hDC, text, strlen(text), &RText, - DT_LEFT | DT_VCENTER | DT_SINGLELINE); - - // restore the previous font - SelectObject(lpdis->hDC, HOldFont); - } - - // render the focus rectangle - if (lpdis->itemState & ODS_FOCUS) - { - DrawFocusRect(lpdis->hDC, &lpdis->rcItem); - } - - // restore the previous color/mode - SetTextColor(lpdis->hDC, OldColor); - SetBkMode(lpdis->hDC, OPAQUE); - - return TRUE; - } - break; - } - case WM_DESTROY: - { - // delete each created font object - int count = SNDMSG(hListBox, LB_GETCOUNT, 0, 0); - for (int index = 0; index < count; ++index) - { - DWORD value = SNDMSG(hListBox, LB_GETITEMDATA, index, 0); - DeleteObject(reinterpret_cast(value)); - } - - PostQuitMessage(0); - break; - } - } - return DefWindowProc(hWnd, msg, wParam, lParam); -} -//------------------------------------------------------------------------- - - - diff --git a/rostests/tests/enumfonts/enumfonts.rbuild b/rostests/tests/enumfonts/enumfonts.rbuild deleted file mode 100644 index 5f424301184..00000000000 --- a/rostests/tests/enumfonts/enumfonts.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - enumfonts.cpp - diff --git a/rostests/tests/enumwnd/enumwnd.c b/rostests/tests/enumwnd/enumwnd.c deleted file mode 100644 index f1d1acc1a0a..00000000000 --- a/rostests/tests/enumwnd/enumwnd.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - * enumwnd.c - * - * application to test the various Window Enumeration functions - */ - -//#define WIN32_LEAN_AND_MEAN -#include -#include -#include - -HBRUSH hbrBackground; -HFONT tf; -int test = 0; -const TCHAR* APP_NAME = "EnumWnd Test"; -const TCHAR* CLASS_NAME = "EnumWndTestClass"; - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = CLASS_NAME; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - _ftprintf ( stderr, _T("RegisterClass failed (last error 0x%lX)\n"), - GetLastError()); - return(1); - } - - hWnd = CreateWindow(CLASS_NAME, - APP_NAME, - WS_OVERLAPPEDWINDOW, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - _ftprintf ( stderr, _T("CreateWindow failed (last error 0x%lX)\n"), - GetLastError()); - return(1); - } - - tf = CreateFont (14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, _T("Timmons")); - - hbrBackground = CreateSolidBrush ( RGB(192,192,192) ); - - ShowWindow ( hWnd, nCmdShow ); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - DeleteObject(hbrBackground); - - DeleteObject(tf); - - return msg.wParam; -} - -void MyTextOut ( HDC hdc, int x, int y, const TCHAR* text ) -{ - TextOut ( hdc, x, y, text, _tcslen(text) ); -} - -typedef struct _EnumData -{ - HDC hdc; - int x; - int y; -} EnumData; - -BOOL CALLBACK MyWindowEnumProc ( HWND hwnd, LPARAM lParam ) -{ - TCHAR wndcaption[1024], buf[1024]; - EnumData* ped = (EnumData*)lParam; - GetWindowText ( hwnd, wndcaption, sizeof(wndcaption)/sizeof(*wndcaption) ); - _sntprintf ( buf, sizeof(buf)/sizeof(*buf), _T("%x - %s"), hwnd, wndcaption ); - MyTextOut ( ped->hdc, ped->x, ped->y, buf ); - ped->y += 13; - return TRUE; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - RECT rect; - TCHAR buf[100]; - EnumData ed; - - switch(msg) - { - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - SelectObject(hDC, tf); - - GetClientRect ( hWnd, &rect ); - FillRect ( hDC, &rect, hbrBackground ); - - MyTextOut ( hDC, 10, 10, "EnumWnd Test" ); - - _sntprintf ( buf, sizeof(buf)/sizeof(*buf), _T("My HWND: %x"), hWnd ); - MyTextOut ( hDC, 10, 30, buf ); - - ed.hdc = hDC; - ed.x = 10; - ed.y = 70; - - switch ( test ) - { - case 1: - MyTextOut ( hDC, 10, 50, _T("Test #1: EnumWindows()") ); - EnumWindows ( MyWindowEnumProc, (LPARAM)&ed ); - break; - case 2: - MyTextOut ( hDC, 10, 50, _T("Test #2: EnumChildWindows()") ); - EnumChildWindows ( hWnd, MyWindowEnumProc, (LPARAM)&ed ); - break; - case 3: - MyTextOut ( hDC, 10, 50, _T("Test #3: EnumDesktopWindows") ); - EnumDesktopWindows ( NULL, MyWindowEnumProc, (LPARAM)&ed ); - break; - case 4: - MyTextOut ( hDC, 10, 50, _T("Test #4: EnumThreadWindows") ); - EnumThreadWindows ( GetCurrentThreadId(), MyWindowEnumProc, (LPARAM)&ed ); - break; - default: - MyTextOut ( hDC, 10, 50, _T("Press any of the number keys from 1 to 4 to run a test") ); - MyTextOut ( hDC, 10, 70, _T("Press the left and right mouse buttons to cycle through the tests") ); - break; - } - - EndPaint(hWnd, &ps); - break; - - case WM_CHAR: - test = (TCHAR)wParam - '1' + 1; - RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); - break; - - case WM_LBUTTONDOWN: - if ( ++test > 4 ) - test = 1; - RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); - break; - - case WM_RBUTTONDOWN: - if ( !--test ) - test = 4; - RedrawWindow ( hWnd, NULL, NULL, RDW_INVALIDATE ); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/enumwnd/enumwnd.dsp b/rostests/tests/enumwnd/enumwnd.dsp deleted file mode 100644 index b18de899a0c..00000000000 --- a/rostests/tests/enumwnd/enumwnd.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="enumwnd" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=enumwnd - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "enumwnd.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "enumwnd.mak" CFG="enumwnd - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "enumwnd - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "enumwnd - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "enumwnd - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "enumwnd - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "enumwnd - Win32 Release" -# Name "enumwnd - Win32 Debug" -# Begin Source File - -SOURCE=.\enumwnd.c -# End Source File -# End Target -# End Project diff --git a/rostests/tests/enumwnd/enumwnd.rbuild b/rostests/tests/enumwnd/enumwnd.rbuild deleted file mode 100644 index 6e2613f3a6f..00000000000 --- a/rostests/tests/enumwnd/enumwnd.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - enumwnd.c - diff --git a/rostests/tests/enumws/enumws.c b/rostests/tests/enumws/enumws.c deleted file mode 100644 index 93d5a216bb2..00000000000 --- a/rostests/tests/enumws/enumws.c +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include - -BOOL CALLBACK -EnumDesktopProc(LPWSTR lpszWindowStation, LPARAM lParam) -{ - printf("\t%S\n", lpszWindowStation); - - return TRUE; -} - -BOOL CALLBACK -EnumWindowStationProc(LPWSTR lpszWindowStation, LPARAM lParam) -{ - HWINSTA hWinSta; - - printf("%S\n", lpszWindowStation); - hWinSta = OpenWindowStationW(lpszWindowStation, FALSE, - WINSTA_ENUMDESKTOPS); - if (hWinSta == NULL) - { - printf("\tCan't open window station.\n"); - return TRUE; - } - EnumDesktopsW(hWinSta, EnumDesktopProc, 0xdede); - - return TRUE; -} - -int main() -{ - EnumWindowStationsW(EnumWindowStationProc, 0xbadbed); - - return 0; -} diff --git a/rostests/tests/enumws/enumws.rbuild b/rostests/tests/enumws/enumws.rbuild deleted file mode 100644 index f36710ad0d3..00000000000 --- a/rostests/tests/enumws/enumws.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - enumws.c - diff --git a/rostests/tests/event/event.c b/rostests/tests/event/event.c deleted file mode 100644 index 9942bea0745..00000000000 --- a/rostests/tests/event/event.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -HANDLE events[2]; - -DWORD WINAPI thread( LPVOID crap ) -{ - SetEvent( events[0] ); - if( crap ) - SetEvent( events[1] ); - return 1; -} - -int main( void ) -{ - DWORD id, Status; - printf( "Creating events\n" ); - events[0] = CreateEvent( 0, TRUE, FALSE, 0 ); - events[1] = CreateEvent( 0, TRUE, FALSE, 0 ); - printf( "Created events\n" ); - CreateThread( 0, 0, thread, 0, 0, &id ); - printf( "WaitForSingleObject %s\n", ( WaitForSingleObject( events[0], INFINITE ) == WAIT_OBJECT_0 ? "worked" : "failed" ) ); - ResetEvent( events[0] ); - CreateThread( 0, 0, thread, 0, 0, &id ); - printf( "WaitForMultipleObjects with waitall = FALSE %s\n", ( WaitForMultipleObjects( 2, events, FALSE, INFINITE ) == WAIT_OBJECT_0 ? "worked" : "failed" ) ); - ResetEvent( events[0] ); - CreateThread( 0, 0, thread, (void *)1, 0, &id ); - Status = WaitForMultipleObjects( 2, events, TRUE, INFINITE ); - printf( "WaitForMultipleObjects with waitall = TRUE %s\n", ( Status == WAIT_OBJECT_0 || Status == WAIT_OBJECT_0 + 1 ? "worked" : "failed" ) ); - ResetEvent( events[0] ); - printf( "WaitForSingleObject with timeout %s\n", ( WaitForSingleObject( events[0], 100 ) == WAIT_TIMEOUT ? "worked" : "failed" ) ); - return 0; -} diff --git a/rostests/tests/event/event.rbuild b/rostests/tests/event/event.rbuild deleted file mode 100644 index f1d9211b71b..00000000000 --- a/rostests/tests/event/event.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - event.c - diff --git a/rostests/tests/fiber/fiber.c b/rostests/tests/fiber/fiber.c deleted file mode 100644 index 9aee0ec543e..00000000000 --- a/rostests/tests/fiber/fiber.c +++ /dev/null @@ -1,446 +0,0 @@ -/* $Id$ -*/ - -#include -#include -#include -#include -#include - -#include -#include - -#ifndef InitializeListHead -#define InitializeListHead(PLH__) ((PLH__)->Flink = (PLH__)->Blink = (PLH__)) -#endif - -#ifndef IsListEmpty -#define IsListEmpty(PLH__) ((PLH__)->Flink == (PVOID)(PLH__)) -#endif - -#ifndef RemoveEntryList - -#define RemoveEntryList(PLE__) \ -{ \ - PLIST_ENTRY pleBack__ = (PLIST_ENTRY)((PLE__)->Blink); \ - PLIST_ENTRY pleForward__ = (PLIST_ENTRY)((PLE__)->Flink); \ - \ - pleBack__->Flink = pleForward__; \ - pleForward__->Blink = pleBack__; \ -} - -#endif - -#ifndef InsertTailList - -#define InsertTailList(PLH__, PLE__) \ -{ \ - PLIST_ENTRY pleListHead__ = (PLH__); \ - PLIST_ENTRY pleBlink__ = (PLIST_ENTRY)((PLH__)->Blink); \ - \ - (PLE__)->Flink = pleListHead__; \ - (PLE__)->Blink = pleBlink__; \ - pleBlink__->Flink = (PLE__); \ - pleListHead__->Blink = (PLE__); \ -} - -#endif - -#ifndef RemoveHeadList - -#define RemoveHeadList(PLH__) \ - (PLIST_ENTRY)((PLH__)->Flink); \ - RemoveEntryList((PLIST_ENTRY)((PLH__)->Flink)); - -#endif - -#define FIBERTEST_COUNT 500 - -struct FiberData -{ - unsigned nMagic; - unsigned nId; - unsigned nPrio; - unsigned nRealPrio; - PVOID pFiber; - LIST_ENTRY leQueue; - int nQuantumQueued; - int nBoost; - struct FiberData * pfdPrev; - int bExitPrev; -}; - -static LIST_ENTRY a_leQueues[32]; -static unsigned nQuantum = 0; -static struct FiberData * pfdLastStarveScan = NULL; - -void Fbt_Create(int); -void Fbt_Exit(void); -void Fbt_Yield(void); - -struct FiberData * Fbt_GetCurrent(void); -unsigned Fbt_GetCurrentId(void); -VOID CALLBACK Fbt_Startup(PVOID); -void Fbt_Dispatch(struct FiberData *, int); -void Fbt_AfterSwitch(struct FiberData *); - -void DoStuff(void); - -struct FiberData * Fbt_GetCurrent(VOID) -{ - return GetFiberData(); -} - -unsigned Fbt_GetCurrentId(VOID) -{ - return Fbt_GetCurrent()->nId; -} - -void Fbt_Yield(VOID) -{ - struct FiberData * pfdCur; - - pfdCur = Fbt_GetCurrent(); - - if(pfdCur->nBoost) - { - -- pfdCur->nBoost; - - if(!pfdCur->nBoost) - pfdCur->nPrio = pfdCur->nRealPrio; - } - else if((rand() % 100) > 50 - (45 * pfdCur->nPrio) / 32) - Fbt_Dispatch(pfdCur, 0); -} - -void Fbt_AfterSwitch(struct FiberData * pfdCur) -{ - struct FiberData * pfdPrev; - - pfdPrev = pfdCur->pfdPrev; - - /* The previous fiber left some homework for us */ - if(pfdPrev) - { - /* Kill the predecessor */ - if(pfdCur->bExitPrev) - { - if(pfdLastStarveScan == pfdPrev) - pfdLastStarveScan = 0; - - DeleteFiber(pfdPrev->pFiber); - free(pfdPrev); - } - /* Enqueue the previous fiber in the correct ready queue */ - else - { - /* Remember the quantum in which the previous fiber was queued */ - pfdPrev->nQuantumQueued = nQuantum; - - /* Disable the anti-starvation boost */ - if(pfdPrev->nBoost) - { - pfdPrev->nBoost = 0; - pfdPrev->nPrio = pfdPrev->nRealPrio; - } - - /* Enqueue the previous fiber */ - InsertTailList - ( - &a_leQueues[pfdPrev->nPrio], - &pfdPrev->leQueue - ); - } - } -} - -VOID CALLBACK Fbt_Startup(PVOID pParam) -{ - assert(pParam == GetFiberData()); - Fbt_AfterSwitch(pParam); - DoStuff(); - Fbt_Exit(); -} - -void Fbt_Dispatch(struct FiberData * pfdCur, int bExit) -{ - UCHAR i; - UCHAR n; - struct FiberData * pfdNext; - - assert(pfdCur == GetFiberData()); - - ++ nQuantum; - - /* Every ten quantums check for starving threads */ - /* FIXME: this implementation of starvation prevention isn't that great */ - if(nQuantum % 10 == 0) - { - int j; - int k; - int b; - int bResume; - PLIST_ENTRY ple = NULL; - - bResume = 0; - i = 0; - - /* Pick up from where we left last time */ - if(pfdLastStarveScan) - { - unsigned nPrio; - - nPrio = pfdLastStarveScan->nPrio; - - /* The last fiber we scanned for starvation isn't queued anymore */ - if(IsListEmpty(&pfdLastStarveScan->leQueue)) - /* Scan the ready queue for its priority */ - i = nPrio; - /* Last fiber for its priority level */ - else if(pfdLastStarveScan->leQueue.Flink == &a_leQueues[nPrio]) - /* Scan the ready queue for the next priority level */ - i = nPrio + 1; - /* Scan the next fiber in the ready queue */ - else - { - i = nPrio; - ple = pfdLastStarveScan->leQueue.Flink; - bResume = 1; - } - - /* Priority levels 15-31 are never checked for starvation */ - if(i >= 15) - { - if(bResume) - bResume = 0; - - i = 0; - } - } - - /* - Scan at most 16 threads, in the priority range 0-14, applying in total at - most 10 boosts. This loop scales O(1) - */ - for(j = 0, k = 0, b = 0; j < 16 && k < 15 && b < 10; ++ j) - { - unsigned nDiff; - - /* No previous state to resume from */ - if(!bResume) - { - int nQueue; - - /* Get the first element in the current queue */ - nQueue = (k + i) % 15; - - if(IsListEmpty(&a_leQueues[nQueue])) - { - ++ k; - continue; - } - - ple = (PLIST_ENTRY)a_leQueues[nQueue].Flink; - } - else - bResume = 0; - - /* Get the current fiber */ - pfdLastStarveScan = CONTAINING_RECORD(ple, struct FiberData, leQueue); - assert(pfdLastStarveScan->nMagic == 0x12345678); - assert(pfdLastStarveScan != pfdCur); - - /* Calculate the number of quantums the fiber has been in the queue */ - if(nQuantum > pfdLastStarveScan->nQuantumQueued) - nDiff = nQuantum - pfdLastStarveScan->nQuantumQueued; - else - nDiff = UINT_MAX - pfdLastStarveScan->nQuantumQueued + nQuantum; - - /* The fiber has been ready for more than 30 quantums: it's starving */ - if(nDiff > 30) - { - /* Plus one boost applied */ - ++ b; - - /* Apply the boost */ - pfdLastStarveScan->nBoost = 1; - pfdLastStarveScan->nRealPrio = pfdLastStarveScan->nPrio; - pfdLastStarveScan->nPrio = 15; - - /* Re-enqueue the fiber in the correct priority queue */ - RemoveEntryList(&pfdLastStarveScan->leQueue); - InsertTailList(&a_leQueues[15], &pfdLastStarveScan->leQueue); - } - } - } - - pfdNext = NULL; - - /* This fiber is going to die: scan all ready queues */ - if(bExit) - n = 1; - /* - Scan only ready queues for priorities greater than or equal to the priority of - the current thread (round-robin) - */ - else - n = pfdCur->nPrio + 1; - - /* This loop scales O(1) */ - for(i = 32; i >= n; -- i) - { - PLIST_ENTRY pleNext; - - /* No fiber ready for this priority level */ - if(IsListEmpty(&a_leQueues[i - 1])) - continue; - - /* Get the next ready fiber */ - pleNext = RemoveHeadList(&a_leQueues[i - 1]); - InitializeListHead(pleNext); - pfdNext = CONTAINING_RECORD(pleNext, struct FiberData, leQueue); - assert(pfdNext->pFiber != GetCurrentFiber()); - assert(pfdNext->nMagic == 0x12345678); - break; - } - - /* Next fiber chosen */ - if(pfdNext) - { - /* Give some homework to the next fiber */ - pfdNext->pfdPrev = pfdCur; - pfdNext->bExitPrev = bExit; - - /* Switch to the next fiber */ - SwitchToFiber(pfdNext->pFiber); - - /* Complete the switch back to this fiber */ - Fbt_AfterSwitch(pfdCur); - } - /* No next fiber, and current fiber exiting */ - else if(bExit) - { - PVOID pCurFiber; - - /* Delete the current fiber. This kills the thread and stops the simulation */ - if(pfdLastStarveScan == pfdCur) - pfdLastStarveScan = NULL; - - pCurFiber = pfdCur->pFiber; - free(pfdCur); - DeleteFiber(pCurFiber); - } - /* No next fiber: continue running the current one */ -} - -void Fbt_Exit(VOID) -{ - Fbt_Dispatch(GetFiberData(), 1); -} - -void Fbt_CreateFiber(int bInitial) -{ - PVOID pFiber; - struct FiberData * pData; - static int s_bFiberPrioSeeded = 0; - static LONG s_nFiberIdSeed = 0; - - pData = malloc(sizeof(struct FiberData)); - - assert(pData); - - if(bInitial) - pFiber = ConvertThreadToFiber(pData); - else - pFiber = CreateFiber(0, Fbt_Startup, pData); - - if(!s_bFiberPrioSeeded) - { - unsigned nFiberPrioSeed; - time_t tCurTime; - - tCurTime = time(NULL); - memcpy(&nFiberPrioSeed, &tCurTime, sizeof(nFiberPrioSeed)); - srand(nFiberPrioSeed); - s_bFiberPrioSeeded = 1; - } - - assert(pFiber); - - pData->nMagic = 0x12345678; - pData->nId = InterlockedIncrement(&s_nFiberIdSeed); - pData->nPrio = rand() % 32; - pData->pFiber = pFiber; - pData->nQuantumQueued = 0; - pData->nBoost = 0; - pData->nRealPrio = pData->nPrio; - pData->pfdPrev = NULL; - pData->bExitPrev = 0; - - if(bInitial) - { - InitializeListHead(&pData->leQueue); - } - else - { - InsertTailList - ( - &a_leQueues[pData->nPrio], - &pData->leQueue - ); - } -} - -void DoStuff(void) -{ - unsigned i; - unsigned n; - unsigned nId; - - n = rand() % 1000; - nId = Fbt_GetCurrentId(); - - _ftprintf(stderr, _T("[%u] BEGIN\n"), nId); - - for(i = 0; i < n; ++ i) - { - unsigned j; - unsigned m; - - _ftprintf(stderr, _T("[%u] [%u/%u]\n"), nId, i + 1, n); - - m = rand() % 1000; - - for(j = 0; j < m; ++ j) - Sleep(0); - - Fbt_Yield(); - } - - _ftprintf(stderr, _T("[%u] END\n"), nId); -} - -int _tmain(int argc, _TCHAR const * const * argv) -{ - unsigned i; - unsigned nFibers; - - if(argc > 1) - nFibers = _tcstoul(argv[1], NULL, 0); - else - nFibers = FIBERTEST_COUNT; - - for(i = 0; i < 32; ++ i) - { - InitializeListHead(&a_leQueues[i]); - } - - for(i = 0; i < nFibers; ++ i) - Fbt_CreateFiber(i == 0); - - Fbt_Startup(GetFiberData()); - - return 0; -} - -/* EOF */ diff --git a/rostests/tests/fiber/fiber.rbuild b/rostests/tests/fiber/fiber.rbuild deleted file mode 100644 index e63868204e3..00000000000 --- a/rostests/tests/fiber/fiber.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - fiber.c - diff --git a/rostests/tests/gethostbyname/gethostbyname.c b/rostests/tests/gethostbyname/gethostbyname.c deleted file mode 100644 index 9a42c4dedda..00000000000 --- a/rostests/tests/gethostbyname/gethostbyname.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -int main( int argc, char **argv ) { - WSADATA wdata; - - WSAStartup( 0x0101, &wdata ); - - if( argc > 1 ) { - struct hostent *he = gethostbyname( argv[1] ); - if( !he ) { - printf( "lookup of host %s failed: %d\n", argv[1], WSAGetLastError() ); - return 1; - } else { - printf( "Lookup of host %s returned %s\n", - argv[1], inet_ntoa(*((struct in_addr *)he->h_addr_list[0])) ); - return 0; - } - } else - return 1; -} diff --git a/rostests/tests/gethostbyname/gethostbyname.rbuild b/rostests/tests/gethostbyname/gethostbyname.rbuild deleted file mode 100644 index 252d4eb8eaa..00000000000 --- a/rostests/tests/gethostbyname/gethostbyname.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - ws2_32 - gethostbyname.c - diff --git a/rostests/tests/global_mem/global_mem.c b/rostests/tests/global_mem/global_mem.c deleted file mode 100644 index 9d5ba22d9eb..00000000000 --- a/rostests/tests/global_mem/global_mem.c +++ /dev/null @@ -1,1062 +0,0 @@ -/* File: global_mem.c -** -** This program is a test application used for testing correctness of the -** GlobalXXX memory API implementation. -** -** Programmer: Mark Tempel -*/ -#include -#include -#include - -/* -** All output is line wrapped to fit a 80 column screen. -** these defines control that formatting. To shrink the -** screen columns, just change the DISPLAY_COMUMNS macro. -*/ -#define DISPLAY_COLUMNS 78 -#define LINE_BUFFER_SIZE DISPLAY_COLUMNS + 2 - -/* -** This define controls the size of a memory allocation request. -** For this test suite to really be comprehensive, we should -** probably be testing many different block sizes. -*/ -#define MEM_BLOCK_SIZE 0x80000 - -/* -** This enumeration is really the return value for the program. -** All test return a TestStatus and test statuses can be combined -** with the relation TEST_CombineStatus. -*/ -typedef enum TestStatus -{ - FAILED = 0, - PASSED = 1, - SKIPPED = -1 -} TEST_STATUS; - -/*--------------------------------------------------------------------------- -** This is a relation used to combine two test statuses. -** The combine rules are as follows: -** FAIL & Anything == FAIL -** SKIPPED & Anything == Anything -** -*/ -TEST_STATUS TEST_CombineStatus(TEST_STATUS a, TEST_STATUS b) -{ - TEST_STATUS result = a; - - switch (a) - { - case PASSED: result = (PASSED == b || SKIPPED == b) ? (PASSED) : (FAILED); break; - case FAILED: result = FAILED; break; - case SKIPPED: result = b; break; - } - - return result; -} - -/*--------------------------------------------------------------------------- -** This outputs the banner border lines. -*/ -void OUTPUT_BannerLine() -{ - int c = 0; - printf("+"); - for (c = 1; c < DISPLAY_COLUMNS; c++) - { - printf("-"); - } - printf("\n"); -} - - -/*--------------------------------------------------------------------------- -** This method prints a line that has a | on the left, and is line wrapped -** to be no more that DISPLAY_COLUMNS +2 wide. -*/ -void OUTPUT_Line(const char *szLine) -{ - int spaceIndex = 0; - char output[LINE_BUFFER_SIZE]; - - memset(output, 0, DISPLAY_COLUMNS + 2); - - /*If this line is longer than DISPLAY_COLUMNS, - * break it at the first space. - */ - if (DISPLAY_COLUMNS - 2 < strlen(szLine)) - { - for (spaceIndex = DISPLAY_COLUMNS / 2; spaceIndex < DISPLAY_COLUMNS - 2; spaceIndex++) - { - if (' ' == szLine[spaceIndex]) - { - break; - } - } - - memcpy(output + 2, szLine, spaceIndex + 1); - output[0] = '|'; - output[1] = ' '; - output[strlen(output)] = '\n'; - printf(output); - - OUTPUT_Line(szLine + spaceIndex + 1); - } - else - { - sprintf(output,"| %s\n", szLine); - printf(output); - } - -} - -/*--------------------------------------------------------------------------- -** -*/ -void OUTPUT_Banner(const char *szBanner) -{ - OUTPUT_BannerLine(); - OUTPUT_Line(szBanner); - OUTPUT_BannerLine(); -} - -/*--------------------------------------------------------------------------- -** -*/ -void OUTPUT_Result(TEST_STATUS status) -{ - switch (status) - { - case PASSED: OUTPUT_Line("==> PASSED"); break; - case FAILED: OUTPUT_Line("*** FAILED"); break; - case SKIPPED: OUTPUT_Line("==> SKIPPED"); break; - } - OUTPUT_Line(""); -} - -/*--------------------------------------------------------------------------- -** -*/ -void OUTPUT_HexDword(DWORD dw) -{ - char buffer[32]; - sprintf(buffer, "0x%lX",dw); - OUTPUT_Line(buffer); -} - -/*--------------------------------------------------------------------------- -** -*/ -void OutputAllocFlags(UINT pFlags) -{ - if (pFlags & GMEM_MOVEABLE) - { - OUTPUT_Line("Movable Memory"); - } - else - { - OUTPUT_Line("Fixed Memory"); - } - - if (pFlags & GMEM_ZEROINIT) - { - OUTPUT_Line("Zero Initialized Memory"); - } -} - -/*--------------------------------------------------------------------------- -** -*/ -void OutputErrorCode() -{ - char buffer[256]; - - sprintf(buffer,"GetLastError() returned %lu", GetLastError()); - - OUTPUT_Line(buffer); -} -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TEST_MemoryWrite(LPVOID mem, DWORD cbSize) -{ - TEST_STATUS result = FAILED; - - if (0 == IsBadWritePtr(mem, cbSize)) - { - result = PASSED; - } - return result; -} - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TEST_MemoryRead(LPVOID mem, DWORD cbSize) -{ - TEST_STATUS result = FAILED; - - if (0 == IsBadReadPtr(mem, cbSize)) - { - result = PASSED; - } - return result; -} - -/*--------------------------------------------------------------------------- -** This method tests to see if a block of global memory is movable -** by seeing if the value returned from GlobalLock is different from -** the passed in value. -*/ -int IsMovable(HGLOBAL hMem) -{ - LPVOID pMem = 0; - int rc = 0; - - pMem = GlobalLock(hMem); - if (pMem != hMem) - { - rc = 1; - } - GlobalUnlock(hMem); - - return rc; -} - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalAllocNFree(UINT allocFlags) -{ - TEST_STATUS status = SKIPPED; - HGLOBAL hTest = 0; - OUTPUT_Banner("Testing the GlobalAlloc and GlobalFree calls"); - OUTPUT_Line("Allocate a buffer"); - - OutputAllocFlags(allocFlags); - - status = FAILED; - hTest = GlobalAlloc(allocFlags, MEM_BLOCK_SIZE); - if (0 != hTest) - { - if (0 == GlobalFree(hTest)); - { - status = PASSED; - } - } - - OUTPUT_Line("Result for this run:"); - OUTPUT_Result(status); - OUTPUT_Line(""); - - return status; -} - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalLockNUnlock(UINT allocFlags) -{ - HGLOBAL hMem = 0; - LPVOID pMem = 0; - TEST_STATUS subtest = SKIPPED; - TEST_STATUS result = FAILED; - - OUTPUT_Banner("Testing the GlobalLock/Unlock functions."); - OutputAllocFlags(allocFlags); - OUTPUT_Line(""); - - hMem = GlobalAlloc(allocFlags, MEM_BLOCK_SIZE); - if (0 != hMem) - { - OUTPUT_Line("Allocated a memory block"); - - OUTPUT_Line("Testing Lock"); - pMem = GlobalLock(hMem); - if (0 != pMem) - { - OUTPUT_Result(PASSED); - - OUTPUT_Line("Testing memory for read."); - subtest = TEST_MemoryRead(pMem, MEM_BLOCK_SIZE); - OUTPUT_Result(subtest); - result = TEST_CombineStatus(PASSED, subtest); - - - OUTPUT_Line("Testing memory for write."); - subtest = TEST_MemoryRead(pMem, MEM_BLOCK_SIZE); - OUTPUT_Result(subtest); - result = TEST_CombineStatus(result, subtest); - - - OUTPUT_Line("Unlocking memory"); - if (GlobalUnlock(hMem)) - { - OUTPUT_Result(PASSED); - result = TEST_CombineStatus(result, PASSED); - } - else - { - if (NO_ERROR == GetLastError()) - { - OUTPUT_Result(PASSED); - result = TEST_CombineStatus(result, PASSED); - } - else - { - OutputErrorCode(); - OUTPUT_Result(FAILED); - result = TEST_CombineStatus(result, FAILED); - } - } - } - - OUTPUT_Line("Freeing memory"); - if (0 == GlobalFree(hMem)) - { - OUTPUT_Result(PASSED); - result = TEST_CombineStatus(result, PASSED); - } - else - { - OutputErrorCode(); - OUTPUT_Result(FAILED); - result = TEST_CombineStatus(result, FAILED); - } - } - return result; -} - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalReAllocFixed() -{ - HGLOBAL hMem = 0; - HGLOBAL hReAlloced = 0; - LPVOID pMem = 0; - TEST_STATUS subtest = SKIPPED; - TEST_STATUS result = SKIPPED; - - OUTPUT_Line("Testing GlobalReAlloc() on memory allocated as GMEM_FIXED"); - - /* Case 1: convert a fixed block to a movable block. */ - OUTPUT_Line("Allocating buffer"); - hMem = GlobalAlloc(GMEM_FIXED, MEM_BLOCK_SIZE); - if (0 != hMem) - { - OUTPUT_Line("Testing to see if this is converted into a movable block"); - hReAlloced = GlobalReAlloc(hMem, MEM_BLOCK_SIZE + 100, GMEM_MOVEABLE | GMEM_MODIFY); - if (0 == hReAlloced) - { - OUTPUT_Line("GlobalReAlloc failed-- returned NULL"); - subtest = TEST_CombineStatus(subtest, FAILED); - OUTPUT_Result(subtest); - } - else - { - hMem = hReAlloced; - if (0 == IsMovable(hMem)) - { - OUTPUT_Line("GlobalReAlloc returned a fixed pointer."); - subtest = TEST_CombineStatus(subtest, FAILED); - OUTPUT_Result(subtest); - } - else - { - pMem = GlobalLock(hMem); - subtest = TEST_CombineStatus(subtest, PASSED); - subtest = TEST_CombineStatus(subtest, TEST_MemoryRead(pMem, MEM_BLOCK_SIZE + 100)); - if (FAILED == subtest) - { - OUTPUT_Line("Memory Read failed."); - } - subtest = TEST_CombineStatus(subtest, TEST_MemoryWrite(pMem, MEM_BLOCK_SIZE + 100)); - if (FAILED == subtest) - { - OUTPUT_Line("Memory Write failed."); - } - GlobalUnlock(hMem); - } - } - - GlobalFree(hMem); - } - else - { - OUTPUT_Line("Global Alloc Failed."); - subtest = TEST_CombineStatus(subtest, FAILED); - } - OUTPUT_Line("Subtest result:"); - OUTPUT_Result(subtest); - OUTPUT_Line(""); - - result = TEST_CombineStatus(result, subtest); - subtest = SKIPPED; - - /* case 2 only move a fixed block */ - OUTPUT_Line("Allocating buffer"); - hMem = GlobalAlloc(GMEM_FIXED, MEM_BLOCK_SIZE); - if (0 != hMem) - { - OUTPUT_Line("Testing to see if a new fixed block is returned."); - hReAlloced = GlobalReAlloc(hMem, MEM_BLOCK_SIZE - 100, GMEM_MOVEABLE); - if (0 == hReAlloced) - { - OUTPUT_Line("GlobalReAlloc failed-- returned NULL"); - subtest = TEST_CombineStatus(subtest, FAILED); - OUTPUT_Result(subtest); - } - else - { - OUTPUT_Line("Alloced Handle: "); - OUTPUT_HexDword((DWORD)hMem); - OUTPUT_Line("ReAlloced Handle: "); - OUTPUT_HexDword((DWORD)hReAlloced); - if (hMem == hReAlloced) - { - OUTPUT_Line("GlobalReAlloc returned the same pointer. The documentation states that this is wrong, but Windows NT works this way."); - } - - hMem = hReAlloced; - subtest = TEST_CombineStatus(subtest, PASSED); - subtest = TEST_CombineStatus(subtest, TEST_MemoryRead((LPVOID)hMem, MEM_BLOCK_SIZE - 100)); - subtest = TEST_CombineStatus(subtest, TEST_MemoryWrite((LPVOID)hMem, MEM_BLOCK_SIZE - 100)); - } - - GlobalFree(hMem); - } - else - { - subtest = TEST_CombineStatus(subtest, FAILED); - } - OUTPUT_Line("Subtest result:"); - OUTPUT_Result(subtest); - OUTPUT_Line(""); - - result = TEST_CombineStatus(result, subtest); - subtest = SKIPPED; - - /* Case 3: re-allocate a fixed block in place */ - OUTPUT_Line("Allocating buffer"); - hMem = GlobalAlloc(GMEM_FIXED, MEM_BLOCK_SIZE); - if (0 != hMem) - { - OUTPUT_Line("Testing to see if a fixed pointer is reallocated in place."); - hReAlloced = GlobalReAlloc(hMem, MEM_BLOCK_SIZE - 100, 0); - if (0 == hReAlloced) - { - OUTPUT_Line("GlobalReAlloc failed-- returned NULL"); - subtest = TEST_CombineStatus(subtest, FAILED); - OUTPUT_Result(subtest); - } - else - { - OUTPUT_Line("Alloced Handle: "); - OUTPUT_HexDword((DWORD)hMem); - OUTPUT_Line("ReAlloced Handle: "); - OUTPUT_HexDword((DWORD)hReAlloced); - if (hMem != hReAlloced) - { - OUTPUT_Line("GlobalReAlloc returned a different."); - subtest = TEST_CombineStatus(subtest, FAILED); - OUTPUT_Result(subtest); - } - else - { - subtest = TEST_CombineStatus(subtest, PASSED); - subtest = TEST_CombineStatus(subtest, TEST_MemoryRead((LPVOID)hMem, MEM_BLOCK_SIZE - 100)); - subtest = TEST_CombineStatus(subtest, TEST_MemoryWrite((LPVOID)hMem, MEM_BLOCK_SIZE - 100)); - } - } - - GlobalFree(hMem); - } - else - { - subtest = TEST_CombineStatus(subtest, FAILED); - } - OUTPUT_Line("Subtest result:"); - OUTPUT_Result(subtest); - OUTPUT_Line(""); - - result = TEST_CombineStatus(result, subtest); - - OUTPUT_Line(""); - return result; -} -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalReAllocMovable() -{ - HGLOBAL hMem = 0; - HGLOBAL hReAlloced = 0; - LPVOID pMem = 0; - TEST_STATUS subtest = SKIPPED; - TEST_STATUS result = SKIPPED; - - OUTPUT_Line("Testing GlobalReAlloc() on memory allocated as GMGM_MOVEABLE"); - - /* case 1 test reallocing a movable block that is unlocked. */ - OUTPUT_Line("Allocating buffer"); - hMem = GlobalAlloc(GMEM_MOVEABLE, MEM_BLOCK_SIZE); - if (0 != hMem) - { - OUTPUT_Line("Testing GlobalReAlloc on a unlocked block."); - hReAlloced = GlobalReAlloc(hMem, MEM_BLOCK_SIZE - 100, 0); - if (0 == hReAlloced) - { - OUTPUT_Line("GlobalReAlloc failed-- returned NULL"); - subtest = TEST_CombineStatus(subtest, FAILED); - OUTPUT_Result(subtest); - } - else - { - OUTPUT_Line("Alloced Handle: "); - OUTPUT_HexDword((DWORD)hMem); - OUTPUT_Line("ReAlloced Handle: "); - OUTPUT_HexDword((DWORD)hReAlloced); - - pMem = GlobalLock(hReAlloced); - hMem = hReAlloced; - subtest = TEST_CombineStatus(subtest, PASSED); - subtest = TEST_CombineStatus(subtest, TEST_MemoryRead(pMem, MEM_BLOCK_SIZE - 100)); - subtest = TEST_CombineStatus(subtest, TEST_MemoryWrite(pMem, MEM_BLOCK_SIZE - 100)); - GlobalUnlock(hReAlloced); - } - - GlobalFree(hMem); - } - else - { - subtest = TEST_CombineStatus(subtest, FAILED); - } - OUTPUT_Line("Subtest result:"); - OUTPUT_Result(subtest); - OUTPUT_Line(""); - - result = TEST_CombineStatus(result, subtest); - subtest = SKIPPED; - - /* Case 2: re-allocate a moveable block that is locked */ - OUTPUT_Line("Allocating buffer"); - hMem = GlobalAlloc(GMEM_MOVEABLE, MEM_BLOCK_SIZE); - if (0 != hMem) - { - - OUTPUT_Line("Testing GlobalReAlloc on a locked block."); - pMem = GlobalLock(hMem); - hReAlloced = GlobalReAlloc(hMem, MEM_BLOCK_SIZE - 100, 0); - if (0 == hReAlloced) - { - OUTPUT_Line("GlobalReAlloc failed-- returned NULL"); - subtest = TEST_CombineStatus(subtest, FAILED); - OUTPUT_Result(subtest); - } - else - { - OUTPUT_Line("Alloced Handle: "); - OUTPUT_HexDword((DWORD)hMem); - OUTPUT_Line("ReAlloced Handle: "); - OUTPUT_HexDword((DWORD)hReAlloced); - if (hMem != hReAlloced) - { - OUTPUT_Line("GlobalReAlloc returned a different block."); - } - pMem = GlobalLock(hReAlloced); - subtest = TEST_CombineStatus(subtest, PASSED); - subtest = TEST_CombineStatus(subtest, TEST_MemoryRead(pMem, MEM_BLOCK_SIZE - 100)); - subtest = TEST_CombineStatus(subtest, TEST_MemoryWrite(pMem , MEM_BLOCK_SIZE - 100)); - GlobalUnlock(hReAlloced); - - } - - GlobalUnlock(hMem); - - GlobalFree(hMem); - } - else - { - subtest = TEST_CombineStatus(subtest, FAILED); - } - OUTPUT_Line("Subtest result:"); - OUTPUT_Result(subtest); - OUTPUT_Line(""); - - result = TEST_CombineStatus(result, subtest); - - OUTPUT_Line(""); - return result; -} - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalReAlloc() -{ - OUTPUT_Banner("Testing GlobalReAlloc()"); - TEST_STATUS result = SKIPPED; - - result = TEST_CombineStatus(result, TestGlobalReAllocFixed()); - result = TEST_CombineStatus(result, TestGlobalReAllocMovable()); - - OUTPUT_Line("GlobalReAlloc test result:"); - OUTPUT_Result(result); - return result; -} - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalFlagsMoveable() -{ - HGLOBAL hMem = 0; - UINT uFlags = 0; - TEST_STATUS result = SKIPPED; - - OUTPUT_Line("Test for the proper lock count"); - - hMem = GlobalAlloc(GMEM_MOVEABLE, MEM_BLOCK_SIZE); - if (0 != hMem) - { - - OUTPUT_Line("Testing initial allocation"); - - OUTPUT_Line("Testing for a lock of 0"); - uFlags = GlobalFlags(hMem); - if (((GMEM_LOCKCOUNT & uFlags) == 0)) /*no locks*/ - { - result = TEST_CombineStatus(result, PASSED); - } - else - { - result = TEST_CombineStatus(result, FAILED); - } - OUTPUT_Result(result); - - OUTPUT_Line("Pointer from handle: "); - OUTPUT_HexDword((DWORD)GlobalLock(hMem)); - - OUTPUT_Line("Testing after a lock"); - OUTPUT_Line("Testing for a lock of 1"); - uFlags = GlobalFlags(hMem); - if (((GMEM_LOCKCOUNT & uFlags) == 1)) /*no locks*/ - { - result = TEST_CombineStatus(result, PASSED); - } - else - { - result = TEST_CombineStatus(result, FAILED); - } - OUTPUT_Result(result); - - GlobalUnlock(hMem); - OUTPUT_Line("Testing after an unlock"); - OUTPUT_Line("Testing for a lock of 0"); - uFlags = GlobalFlags(hMem); - if (((GMEM_LOCKCOUNT & uFlags) == 0)) /*no locks*/ - { - result = TEST_CombineStatus(result, PASSED); - } - else - { - result = TEST_CombineStatus(result, FAILED); - } - OUTPUT_Result(result); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - result = TEST_CombineStatus(result, FAILED); - } - - OUTPUT_Line("Test for discarded memory"); - OUTPUT_Line("Allocating an empty moveable block---automatically marked as discarded"); - hMem = GlobalAlloc(GMEM_MOVEABLE, 0); /*allocate a discarded block*/ - if (0 != hMem) - { - OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); - OUTPUT_Line("Testing for a discarded flag"); - uFlags = GlobalFlags(hMem); - if (0 != (uFlags & GMEM_DISCARDED)) /*discarded*/ - { - result = TEST_CombineStatus(result, PASSED); - } - else - { - result = TEST_CombineStatus(result, FAILED); - } - OUTPUT_Line("Flags:"); - OUTPUT_HexDword(uFlags); - OUTPUT_Result(result); - - GlobalFree(hMem); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - result = TEST_CombineStatus(result, FAILED); - } - return result; -} - - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalFlagsFixed() -{ - HGLOBAL hMem = 0; - UINT uFlags = 0; - TEST_STATUS result = SKIPPED; - - OUTPUT_Line("Testing for correct handling of GMEM_FIXED memory"); - hMem = GlobalAlloc(GMEM_FIXED, MEM_BLOCK_SIZE); - if (0 != hMem) - { - - OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); - - OUTPUT_Line("Testing initial allocation"); - OUTPUT_Line("Testing for non-discarded and lock of 0"); - uFlags = GlobalFlags(hMem); - if (((GMEM_LOCKCOUNT & uFlags) == 0) && /*no locks*/ - (((uFlags >> 8) & 0xff) == 0 )) /*not discarded*/ - { - result = TEST_CombineStatus(result, PASSED); - } - else - { - result = TEST_CombineStatus(result, FAILED); - } - OUTPUT_Result(result); - - OUTPUT_Line("Pointer from handle: "); - OUTPUT_HexDword((DWORD)GlobalLock(hMem)); - OUTPUT_Line("Testing after a lock"); - OUTPUT_Line("Testing for non-discarded and lock of 0"); - uFlags = GlobalFlags(hMem); - if (((GMEM_LOCKCOUNT & uFlags) == 0) && /*no locks*/ - (((uFlags >> 8) & 0xff) == 0 )) /*not discarded*/ - { - result = TEST_CombineStatus(result, PASSED); - } - else - { - result = TEST_CombineStatus(result, FAILED); - } - OUTPUT_Result(result); - - GlobalFree(hMem); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - result = TEST_CombineStatus(result, FAILED); - } - - return result; -} -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalFlags() -{ - OUTPUT_Banner("Testing GlobalFlags()"); - TEST_STATUS result = SKIPPED; - - result = TEST_CombineStatus(result, TestGlobalFlagsFixed()); - result = TEST_CombineStatus(result, TestGlobalFlagsMoveable()); - - OUTPUT_Line("GlobalFlags result:"); - OUTPUT_Result(result); - return result; -} -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalHandle() -{ - HGLOBAL hMem = 0; - HGLOBAL hTest = 0; - PVOID pMem = 0; - TEST_STATUS subtest = SKIPPED; - TEST_STATUS result = SKIPPED; - - OUTPUT_Banner("Testing GlobalHandle()"); - - OUTPUT_Line("Testing GlobalHandle with a block of GMEM_FIXED memory"); - hMem = GlobalAlloc(GMEM_FIXED, MEM_BLOCK_SIZE); - if (0 != hMem) - { - - OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); - - hTest = GlobalHandle(hMem); - if (hMem == hTest) - { - subtest = TEST_CombineStatus(subtest, PASSED); - } - else - { - OUTPUT_Line("GlobalHandle returned:"); - OUTPUT_HexDword((DWORD)hTest); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - GlobalFree(hMem); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - OUTPUT_Line("Result from subtest:"); - OUTPUT_Result(subtest); - result = TEST_CombineStatus(result, subtest); - - - subtest = SKIPPED; - OUTPUT_Line("Testing GlobalHandle with a block of GMEM_MOVEABLE memory"); - hMem = GlobalAlloc(GMEM_MOVEABLE, MEM_BLOCK_SIZE); - if (0 != hMem) - { - - OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); - pMem = GlobalLock(hMem); - hTest = GlobalHandle(pMem); - if (hMem == hTest) - { - subtest = TEST_CombineStatus(subtest, PASSED); - } - else - { - OUTPUT_Line("GlobalHandle returned:"); - OUTPUT_HexDword((DWORD)hTest); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - GlobalUnlock(hMem); - GlobalFree(hMem); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - OUTPUT_Line("Result from subtest:"); - OUTPUT_Result(subtest); - result = TEST_CombineStatus(result, subtest); - - - OUTPUT_Line("Global Handle test results:"); - OUTPUT_Result(result); - return result; -} - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalSize() -{ - HGLOBAL hMem = 0; - SIZE_T size = 0; - TEST_STATUS subtest = SKIPPED; - TEST_STATUS result = SKIPPED; - OUTPUT_Banner("Testing GlobalSize()"); - - OUTPUT_Line("Testing GlobalSize with a block of GMEM_FIXED memory"); - hMem = GlobalAlloc(GMEM_FIXED, MEM_BLOCK_SIZE); - if (0 != hMem) - { - size = GlobalSize(hMem); - if (MEM_BLOCK_SIZE <= size) - { - subtest = TEST_CombineStatus(subtest, PASSED); - } - else - { - OUTPUT_Line("GlobalSize returned:"); - OUTPUT_HexDword(size); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - GlobalFree(hMem); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - OUTPUT_Line("Result from subtest:"); - OUTPUT_Result(subtest); - result = TEST_CombineStatus(result, subtest); - - OUTPUT_Line("Testing GlobalSize with a block of GMEM_MOVEABLE memory"); - hMem = GlobalAlloc(GMEM_MOVEABLE, MEM_BLOCK_SIZE); - if (0 != hMem) - { - size = GlobalSize(hMem); - if (MEM_BLOCK_SIZE <= size) - { - subtest = TEST_CombineStatus(subtest, PASSED); - } - else - { - OUTPUT_Line("GlobalSize returned:"); - OUTPUT_HexDword(size); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - GlobalFree(hMem); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - OUTPUT_Line("Result from subtest:"); - OUTPUT_Result(subtest); - result = TEST_CombineStatus(result, subtest); - - OUTPUT_Line("Testing GlobalSize with discarded memory"); - hMem = GlobalAlloc(GMEM_MOVEABLE, 0); - if (0 != hMem) - { - size = GlobalSize(hMem); - if (0 == size) - { - subtest = TEST_CombineStatus(subtest, PASSED); - } - else - { - OUTPUT_Line("GlobalSize returned:"); - OUTPUT_HexDword(size); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - GlobalFree(hMem); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - OUTPUT_Line("Result from subtest:"); - OUTPUT_Result(subtest); - result = TEST_CombineStatus(result, subtest); - - OUTPUT_Line("Test result:"); - OUTPUT_Result(result); - return result; -} - -/*--------------------------------------------------------------------------- -** -*/ -TEST_STATUS TestGlobalDiscard() -{ - HGLOBAL hMem = 0; - HGLOBAL hTest = 0; - DWORD uFlags = 0; - TEST_STATUS subtest = SKIPPED; - TEST_STATUS result = SKIPPED; - - OUTPUT_Banner("Testing GlobalDiscard()"); - hMem = GlobalAlloc(GMEM_MOVEABLE, MEM_BLOCK_SIZE); - if (0 != hMem) - { - OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); - - hTest = GlobalDiscard(hMem); - if (0 == hTest) - { - OUTPUT_Line("GlobalDiscard returned NULL"); - subtest = TEST_CombineStatus(subtest, FAILED); - } - else - { - uFlags = GlobalFlags(hTest); - OUTPUT_Line("Flags from the new memory block."); - OUTPUT_HexDword(uFlags); - if (0 != (uFlags & GMEM_DISCARDED)) - { - subtest = TEST_CombineStatus(subtest, PASSED); - } - else - { - OUTPUT_Line("Block is not marked as discardable."); - subtest = TEST_CombineStatus(subtest, FAILED); - } - } - - GlobalFree(hTest); - } - else - { - OUTPUT_Line("GlobalAlloc failed!"); - subtest = TEST_CombineStatus(subtest, FAILED); - } - - OUTPUT_Line("Result from subtest:"); - OUTPUT_Result(subtest); - - result = TEST_CombineStatus(result, subtest); - - OUTPUT_Result(result); - return result; -} - -/*--------------------------------------------------------------------------- -** -*/ -int main(int argc, char ** argv) -{ - TEST_STATUS test_set = SKIPPED; - OUTPUT_Banner("Testing GlobalXXX memory management functions."); - - test_set = TEST_CombineStatus(test_set, TestGlobalAllocNFree(GPTR)); - test_set = TEST_CombineStatus(test_set, TestGlobalAllocNFree(GHND)); - test_set = TEST_CombineStatus(test_set, TestGlobalAllocNFree(GMEM_FIXED)); - test_set = TEST_CombineStatus(test_set, TestGlobalAllocNFree(GMEM_MOVEABLE)); - - if (FAILED == test_set) - { - OUTPUT_Line("Skipping any further tests. GlobalAlloc/Free fails."); - OUTPUT_Result(test_set); - return test_set; - } - - test_set = TEST_CombineStatus(test_set, TestGlobalLockNUnlock(GPTR)); - test_set = TEST_CombineStatus(test_set, TestGlobalLockNUnlock(GHND)); - test_set = TEST_CombineStatus(test_set, TestGlobalLockNUnlock(GMEM_FIXED)); - test_set = TEST_CombineStatus(test_set, TestGlobalLockNUnlock(GMEM_MOVEABLE)); - - test_set = TEST_CombineStatus(test_set, TestGlobalReAlloc()); - - test_set = TEST_CombineStatus(test_set, TestGlobalFlags()); - - test_set = TEST_CombineStatus(test_set, TestGlobalHandle()); - - test_set = TEST_CombineStatus(test_set, TestGlobalSize()); - - test_set = TEST_CombineStatus(test_set, TestGlobalDiscard()); - - /* output the result for the entire set of tests*/ - OUTPUT_Banner("Test suite result"); - OUTPUT_Result(test_set); - return test_set; -} diff --git a/rostests/tests/global_mem/global_mem.rbuild b/rostests/tests/global_mem/global_mem.rbuild deleted file mode 100644 index 7dda70dfc7e..00000000000 --- a/rostests/tests/global_mem/global_mem.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - global_mem.c - diff --git a/rostests/tests/gradient/gradient.c b/rostests/tests/gradient/gradient.c deleted file mode 100644 index 107b0ae9cde..00000000000 --- a/rostests/tests/gradient/gradient.c +++ /dev/null @@ -1,184 +0,0 @@ -#include -#include -#include - -BOOL WINAPI GdiGradientFill( HDC hdc, TRIVERTEX *vert_array, ULONG nvert, - void * grad_array, ULONG ngrad, ULONG mode ); - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = "GradientClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("GradientClass", - "GradientFill Test", - WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - //tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - // ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - // DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); - - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - //DeleteObject(tf); - - return msg.wParam; -} -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - HDC hDC; - - switch(msg) - { - case WM_PAINT: - { - PAINTSTRUCT ps; - TRIVERTEX vert [5] ; - GRADIENT_TRIANGLE gTRi[3]; - GRADIENT_RECT gRect[2]; - hDC = BeginPaint(hWnd, &ps); - - vert [0] .x = 0; - vert [0] .y = 0; - vert [0] .Red = 0xff00; - vert [0] .Green = 0xff00; - vert [0] .Blue = 0xff00; - vert [0] .Alpha = 0x0000; - - vert [1] .x = 300; - vert [1] .y = 20; - vert [1] .Red = 0x0000; - vert [1] .Green = 0x0000; - vert [1] .Blue = 0xff00; - vert [1] .Alpha = 0x0000; - - vert [2] .x = 100; - vert [2] .y = 200; - vert [2] .Red = 0xff00; - vert [2] .Green = 0x0000; - vert [2] .Blue = 0x0000; - vert [2] .Alpha = 0x0000; - - vert [3] .x = 250; - vert [3] .y = 300; - vert [3] .Red = 0x8000; - vert [3] .Green = 0x8000; - vert [3] .Blue = 0x0000; - vert [3] .Alpha = 0x0000; - - vert [4] .x = 325; - vert [4] .y = 300; - vert [4] .Red = 0x0000; - vert [4] .Green = 0xff00; - vert [4] .Blue = 0x0000; - vert [4] .Alpha = 0x0000; - - gTRi[0].Vertex1 = 0; - gTRi[0].Vertex2 = 1; - gTRi[0].Vertex3 = 2; - - gTRi[1].Vertex1 = 1; - gTRi[1].Vertex2 = 2; - gTRi[1].Vertex3 = 3; - - gTRi[2].Vertex1 = 1; - gTRi[2].Vertex2 = 3; - gTRi[2].Vertex3 = 4; - - GdiGradientFill(hDC,vert,5,&gTRi,3,GRADIENT_FILL_TRIANGLE); - - - vert [0] .x = 5; - vert [0] .y = 200; - vert [0] .Red = 0x0000; - vert [0] .Green = 0x0000; - vert [0] .Blue = 0x0000; - vert [0] .Alpha = 0x0000; - - vert [1] .x = 90; - vert [1] .y = 240; - vert [1] .Red = 0x0000; - vert [1] .Green = 0x0000; - vert [1] .Blue = 0xff00; - vert [1] .Alpha = 0x0000; - - vert [2] .x = 5; - vert [2] .y = 245; - vert [2] .Red = 0x0000; - vert [2] .Green = 0x0000; - vert [2] .Blue = 0x0000; - vert [2] .Alpha = 0x0000; - - vert [3] .x = 90; - vert [3] .y = 300; - vert [3] .Red = 0x0000; - vert [3] .Green = 0x0000; - vert [3] .Blue = 0xff00; - vert [3] .Alpha = 0x0000; - - gRect[0].UpperLeft = 0; - gRect[0].LowerRight = 1; - - gRect[1].UpperLeft = 2; - gRect[1].LowerRight = 3; - - GdiGradientFill(hDC,vert,4,&gRect[0],1,GRADIENT_FILL_RECT_H); - GdiGradientFill(hDC,vert,4,&gRect[1],1,GRADIENT_FILL_RECT_V); - - EndPaint(hWnd, &ps); - break; - } - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/gradient/gradient.rbuild b/rostests/tests/gradient/gradient.rbuild deleted file mode 100644 index e89f12414df..00000000000 --- a/rostests/tests/gradient/gradient.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - gradient.c - diff --git a/rostests/tests/guithreadinfo/guithreadinfo.c b/rostests/tests/guithreadinfo/guithreadinfo.c deleted file mode 100644 index 6a0cce69279..00000000000 --- a/rostests/tests/guithreadinfo/guithreadinfo.c +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include -#include - -static GUITHREADINFO gti; -//HFONT tf; -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = "GuiThreadInfoClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("GuiThreadInfoClass", - "GetGUIThreadInfo", - WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - //tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - // ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - // DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); - - gti.cbSize = sizeof(GUITHREADINFO); - GetGUIThreadInfo(0, >i); - - SetTimer(hWnd, 1, 1000, NULL); - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - //DeleteObject(tf); - - return msg.wParam; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - char str[255]; - - switch(msg) - { - - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - wsprintf(str, "flags: "); - if(gti.flags & GUI_16BITTASK) lstrcat(str, "GUI_16BITTASK "); - if(gti.flags & GUI_CARETBLINKING) lstrcat(str, "GUI_CARETBLINKING "); - if(gti.flags & GUI_INMENUMODE) lstrcat(str, "GUI_INMENUMODE "); - if(gti.flags & GUI_INMOVESIZE) lstrcat(str, "GUI_INMOVESIZE "); - if(gti.flags & GUI_POPUPMENUMODE) lstrcat(str, "GUI_POPUPMENUMODE "); - if(gti.flags & GUI_SYSTEMMENUMODE) lstrcat(str, "GUI_SYSTEMMENUMODE "); - TextOut(hDC, 10, 10, str, strlen(str)); - - wsprintf(str, "hwndActive == %08X", gti.hwndActive); - TextOut(hDC, 10, 30, str, strlen(str)); - wsprintf(str, "hwndFocus == %08X", gti.hwndFocus); - TextOut(hDC, 10, 50, str, strlen(str)); - wsprintf(str, "hwndCapture == %08X", gti.hwndCapture); - TextOut(hDC, 10, 70, str, strlen(str)); - wsprintf(str, "hwndMenuOwner == %08X", gti.hwndMenuOwner); - TextOut(hDC, 10, 90, str, strlen(str)); - wsprintf(str, "hwndMoveSize == %08X", gti.hwndMoveSize); - TextOut(hDC, 10, 110, str, strlen(str)); - wsprintf(str, "hwndCaret == %08X", gti.hwndCaret); - TextOut(hDC, 10, 130, str, strlen(str)); - wsprintf(str, "rcCaret == (%lu, %lu, %lu, %lu)", gti.rcCaret.left, gti.rcCaret.top, gti.rcCaret.right, gti.rcCaret.bottom); - TextOut(hDC, 10, 150, str, strlen(str)); - - wsprintf(str, "GetGuiResources for the current process: %08X", GetCurrentProcess()); - TextOut(hDC, 10, 180, str, strlen(str)); - wsprintf(str, "GetGuiResources: GR_GDIOBJECTS == %04X", GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS)); - TextOut(hDC, 10, 200, str, strlen(str)); - wsprintf(str, "GetGuiResources: GR_USEROBJECTS == %04x", GetGuiResources(GetCurrentProcess(), GR_USEROBJECTS)); - TextOut(hDC, 10, 220, str, strlen(str)); - EndPaint(hWnd, &ps); - break; - - case WM_TIMER: - GetGUIThreadInfo(0, >i); - InvalidateRect(hWnd, NULL, TRUE); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/guithreadinfo/guithreadinfo.rbuild b/rostests/tests/guithreadinfo/guithreadinfo.rbuild deleted file mode 100644 index ee7ed42f310..00000000000 --- a/rostests/tests/guithreadinfo/guithreadinfo.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - guithreadinfo.c - diff --git a/rostests/tests/hello/hello.c b/rostests/tests/hello/hello.c deleted file mode 100644 index bba959ab8f9..00000000000 --- a/rostests/tests/hello/hello.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include - -int main(int argc, char* argv[]) -{ - printf("Hello world\n"); - return(0); -} diff --git a/rostests/tests/hello/hello.rbuild b/rostests/tests/hello/hello.rbuild deleted file mode 100644 index 918d5901844..00000000000 --- a/rostests/tests/hello/hello.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - hello.c - diff --git a/rostests/tests/hivetest/hivetest.c b/rostests/tests/hivetest/hivetest.c deleted file mode 100644 index 5d13432aec2..00000000000 --- a/rostests/tests/hivetest/hivetest.c +++ /dev/null @@ -1,1031 +0,0 @@ -#include -#include -#include -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include - -#define RtlRosInitUnicodeStringFromLiteral(__Name__, __Value__) \ - { \ - (__Name__)->Buffer = (__Value__); \ - (__Name__)->Length = sizeof(__Value__) - sizeof(WCHAR); \ - (__Name__)->MaximumLength = sizeof(__Value__); \ - } - -HANDLE OutputHandle; -HANDLE InputHandle; - -void dprintf(char* fmt, ...) -{ - va_list args; - char buffer[255]; - - va_start(args,fmt); - vsprintf(buffer,fmt,args); - WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL); - va_end(args); -} - -void do_enumeratekey(PWSTR Name) -{ - ULONG Index,Length,i; - KEY_BASIC_INFORMATION KeyInformation[5]; - NTSTATUS Status; - OBJECT_ATTRIBUTES ObjectAttributes; - HANDLE hKey1; - UNICODE_STRING KeyName; - - RtlInitUnicodeString(&KeyName, Name); - InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE - , NULL, NULL); - Status=NtOpenKey( &hKey1, MAXIMUM_ALLOWED, &ObjectAttributes); - dprintf("NtEnumerateKey : \n"); - Index=0; - while(Status == STATUS_SUCCESS) - { - Status=NtEnumerateKey(hKey1,Index++,KeyBasicInformation - ,&KeyInformation[0], sizeof(KeyInformation) - ,&Length); - if(Status== STATUS_SUCCESS) - { - dprintf("\tSubKey Name = "); - for (i=0;i - - kernel32 - user32 - ntdll - advapi32 - hivetest.c -
        diff --git a/rostests/tests/icontest/icon.ico b/rostests/tests/icontest/icon.ico deleted file mode 100644 index 746b9be45a057fa2c0111e079955a733c655d4e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 766 zcmZ{iv2uej5JZ=d88S9APLcn%QsOz)*{@oMAe>gRuof_QZ+nnN<^C^zT3p{YL8!w!v!|~LxQ1AyP zTijSt@0`ov%z|(n$B7$5Nm|&@I?n!n=t?gHs2{FFmjV#mm7D@%+dF#z{2`)z1p*mF zX9mcQ&I}Ntc;Z&}iaTK{s9)D6RtM(^)l$45H^U!VIq~}xW61qF`~a6P;P?rgsLPF4 qB)GC@$f<%l@X{O=W0#7$593vx6@Xm20R?*ea{OajUp8X31aqG$e diff --git a/rostests/tests/icontest/icontest.c b/rostests/tests/icontest/icontest.c deleted file mode 100644 index a5761bc3816..00000000000 --- a/rostests/tests/icontest/icontest.c +++ /dev/null @@ -1,208 +0,0 @@ -#include -#include "resource.h" -#include -#include - -ULONG __cdecl DbgPrint(IN PCH Format, IN ...); - -const char titleDrwIco[] = "DrawIcon Output"; -const char titleMask[] = "Mask(AND image)"; -const char titleXor[] = "XOR(color image)"; -const char file[] = "Icon from file:"; -const char res[] = "Icon from Resorce:"; -const char cursor[] = "Current Cursor:"; -const char cursormask[] = "Cursor Mask Bitmap"; -const char cursorcolor[] = "Cursor Color Bitmap"; - -HFONT tf; -HINSTANCE hInst; - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - hInst = hInstance; - - #ifdef _GetCursorInfo - GetCursorInfo = (GETCURSORINFO)GetProcAddress(GetModuleHandleW(L"user32.dll"), "GetCursorInfo"); - #endif - - wc.lpszClassName = "IconTestClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - DbgPrint("RegisterClass failed (last error 0x%X)\n", GetLastError()); - return(1); - } - - hWnd = CreateWindow("IconTestClass", - "Icon Test", - WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, - CW_USEDEFAULT, - CW_USEDEFAULT, - 480, - 480, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - DbgPrint("CreateWindow failed (last error 0x%X)\n", GetLastError()); - return(1); - } - - tf = CreateFontA(14,0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); - - ShowWindow(hWnd, nCmdShow); - - SetTimer(hWnd, 1, 1000, NULL); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return msg.wParam; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - HICON hIcon; - HGDIOBJ hOld; - HDC hMemDC; - CURSORINFO cursorinfo; - ICONINFO iconinfo; - BITMAP bmp; - RECT rc; - CHAR str[20]; - - switch(msg) - { - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - SelectObject(hDC, tf); - SetBkMode(hDC, TRANSPARENT); - - TextOut(hDC, 160, 10, file, strlen(file)); - TextOut(hDC, 15, 85, titleDrwIco, strlen(titleDrwIco)); - TextOut(hDC, 160, 85, titleMask, strlen(titleMask)); - TextOut(hDC, 300, 85, titleXor, strlen(titleXor)); - - hIcon = LoadImage(NULL, "icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE); - DrawIcon(hDC,50,50,hIcon); - - hMemDC = CreateCompatibleDC(hDC); - GetIconInfo(hIcon, &iconinfo); - DestroyIcon(hIcon); - - hOld = SelectObject(hMemDC, iconinfo.hbmMask); - BitBlt(hDC, 200, 50, 32, 32, hMemDC, 0, 0, SRCCOPY); - SelectObject(hMemDC, iconinfo.hbmColor); - BitBlt(hDC, 350, 50, 32, 32, hMemDC, 0, 0, SRCCOPY); - - DeleteObject(iconinfo.hbmMask); - DeleteObject(iconinfo.hbmColor); - - TextOut(hDC, 145, 150, res, strlen(res)); - TextOut(hDC, 15, 225, titleDrwIco, strlen(titleDrwIco)); - TextOut(hDC, 160, 225, titleMask, strlen(titleMask)); - TextOut(hDC, 300, 225, titleXor, strlen(titleXor)); - - hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE); - DrawIcon(hDC,50,190,hIcon); - - GetIconInfo(hIcon, &iconinfo); - DestroyIcon(hIcon); - - SelectObject(hMemDC, iconinfo.hbmMask); - BitBlt(hDC, 200, 190, 32, 32, hMemDC, 0, 0, SRCCOPY); - SelectObject(hMemDC, iconinfo.hbmColor); - BitBlt(hDC, 350, 190, 32, 32, hMemDC, 0, 0, SRCCOPY); - - DeleteObject(iconinfo.hbmMask); - DeleteObject(iconinfo.hbmColor); - - cursorinfo.cbSize = sizeof(CURSORINFO); - if(GetCursorInfo(&cursorinfo)) - { - if(cursorinfo.hCursor && cursorinfo.flags) - { - TextOut(hDC, 160, 290, cursor, strlen(cursor)); - DrawIcon(hDC, 50, 330, cursorinfo.hCursor); - GetIconInfo(cursorinfo.hCursor, &iconinfo); - TextOut(hDC, 15, 365, titleDrwIco, strlen(titleDrwIco)); - - sprintf(str, "Hotspot: %ld; %ld", iconinfo.xHotspot, iconinfo.yHotspot); - TextOut(hDC, 15, 380, str, strlen(str)); - - if(iconinfo.hbmMask) - { - GetObjectW(iconinfo.hbmMask, sizeof(BITMAP), &bmp); - SelectObject(hMemDC, iconinfo.hbmMask); - BitBlt(hDC, 200, 330, bmp.bmWidth, bmp.bmHeight, hMemDC, 0, 0, SRCCOPY); - DeleteObject(iconinfo.hbmMask); - TextOut(hDC, 160, 365 - 32 + bmp.bmHeight, cursormask, strlen(cursormask)); - - sprintf(str, "%dBPP", bmp.bmBitsPixel); - TextOut(hDC, 160, 380 - 32 + bmp.bmHeight, str, strlen(str)); - } - - if(iconinfo.hbmColor) - { - GetObjectW(iconinfo.hbmColor, sizeof(BITMAP), &bmp); - SelectObject(hMemDC, iconinfo.hbmColor); - BitBlt(hDC, 350, 330, bmp.bmWidth, bmp.bmHeight, hMemDC, 0, 0, SRCCOPY); - DeleteObject(iconinfo.hbmColor); - TextOut(hDC, 300, 365 - 32 + bmp.bmHeight, cursorcolor, strlen(cursorcolor)); - - sprintf(str, "%dBPP", bmp.bmBitsPixel); - TextOut(hDC, 300, 380 - 32 + bmp.bmHeight, str, strlen(str)); - } - } - } - - SelectObject(hMemDC, hOld); - - DeleteObject(hMemDC); - EndPaint(hWnd, &ps); - break; - - case WM_TIMER: - rc.left = 0; - rc.top = 330; - rc.right = 480; - rc.bottom = 480; - InvalidateRect(hWnd, &rc, TRUE); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/icontest/icontest.rbuild b/rostests/tests/icontest/icontest.rbuild deleted file mode 100644 index 37c01a5827b..00000000000 --- a/rostests/tests/icontest/icontest.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - . - kernel32 - user32 - gdi32 - ntdll - icontest.c - icontest.rc - diff --git a/rostests/tests/icontest/icontest.rc b/rostests/tests/icontest/icontest.rc deleted file mode 100644 index 68c787a9de3..00000000000 --- a/rostests/tests/icontest/icontest.rc +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include "resource.h" - -IDI_ICON ICON DISCARDABLE "icon.ico" diff --git a/rostests/tests/icontest/resource.h b/rostests/tests/icontest/resource.h deleted file mode 100644 index 5d9eb75e1c4..00000000000 --- a/rostests/tests/icontest/resource.h +++ /dev/null @@ -1 +0,0 @@ -#define IDI_ICON 101 diff --git a/rostests/tests/iptest/iptest.cpp b/rostests/tests/iptest/iptest.cpp deleted file mode 100644 index 8d67a7cd086..00000000000 --- a/rostests/tests/iptest/iptest.cpp +++ /dev/null @@ -1,476 +0,0 @@ -#include -#include -#include -#include -extern "C" { - typedef unsigned short u_short; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -}; - -/* Undis */ -extern "C" VOID ExpInitLookasideLists(); - -std::list output_packets; -DWORD DebugTraceLevel = 0x7fffffff; -PVOID GlobalBufferPool, GlobalPacketPool; - -#define MAX_DG_SIZE 16384 - -char hwaddr[6] = { 0x08, 0x00, 0x20, 0x0b, 0xb7, 0xbb }; - -char hdr[14] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00 }; - -#define STRINGIFY(x) #x - -void display_row( char *data, int off, int len ) { - int i; - - printf( "%08x:", off ); - for( i = off; i < len && i < off + 16; i++ ) { - printf( " %02x", data[i] & 0xff ); - } - - printf( " -- " ); - - for( i = off; i < len && i < off + 16; i++ ) { - printf( "%c", (data[i] >= ' ') ? data[i] : '.' ); - } - - printf( "\n" ); -} - -void connect_complete( void *context, NTSTATUS status, unsigned long count ) { - printf( "Connection: status %x\n", status ); -} - -void receive_complete( void *context, NTSTATUS status, unsigned long count ) { - printf( "Receive: status %s (bytes %d)\n", status, count ); - if( !status && count ) { - for( int off = 0; off < count; off += 16 ) { - display_row( (char *)context, off, count ); - } - printf( "\n" ); - } -} - -class SocketObject { -public: - virtual ~SocketObject() { } - virtual int send( char *buf, int len, int *bytes, - struct sockaddr_in *si ) = 0; - virtual int recv( char *buf, int len, int *bytes, - struct sockaddr_in *si ) = 0; -}; - -UINT TdiAddressSizeFromType( UINT AddressType ) { - switch( AddressType ) { - case TDI_ADDRESS_TYPE_IP: - return sizeof(TA_IP_ADDRESS); - default: - KeBugCheck( 0 ); - } - return 0; -} - -NTSTATUS TdiBuildNullConnectionInfoInPlace -( PTDI_CONNECTION_INFORMATION ConnInfo, - ULONG Type ) -/* - * FUNCTION: Builds a NULL TDI connection information structure - * ARGUMENTS: - * ConnectionInfo = Address of buffer to place connection information - * Type = TDI style address type (TDI_ADDRESS_TYPE_XXX). - * RETURNS: - * Status of operation - */ -{ - ULONG TdiAddressSize; - - TdiAddressSize = TdiAddressSizeFromType(Type); - - RtlZeroMemory(ConnInfo, - sizeof(TDI_CONNECTION_INFORMATION) + - TdiAddressSize); - - ConnInfo->OptionsLength = sizeof(ULONG); - ConnInfo->RemoteAddressLength = 0; - ConnInfo->RemoteAddress = NULL; - - return STATUS_SUCCESS; -} - -NTSTATUS TdiBuildNullConnectionInfo -( PTDI_CONNECTION_INFORMATION *ConnectionInfo, - ULONG Type ) -/* - * FUNCTION: Builds a NULL TDI connection information structure - * ARGUMENTS: - * ConnectionInfo = Address of buffer pointer to allocate connection - * information in - * Type = TDI style address type (TDI_ADDRESS_TYPE_XXX). - * RETURNS: - * Status of operation - */ -{ - PTDI_CONNECTION_INFORMATION ConnInfo; - ULONG TdiAddressSize; - NTSTATUS Status; - - TdiAddressSize = TdiAddressSizeFromType(Type); - - ConnInfo = (PTDI_CONNECTION_INFORMATION) - ExAllocatePool(NonPagedPool, - sizeof(TDI_CONNECTION_INFORMATION) + - TdiAddressSize); - if (!ConnInfo) - return STATUS_INSUFFICIENT_RESOURCES; - - Status = TdiBuildNullConnectionInfoInPlace( ConnInfo, Type ); - - if (!NT_SUCCESS(Status)) - ExFreePool( ConnInfo ); - else - *ConnectionInfo = ConnInfo; - - ConnInfo->RemoteAddress = (PTA_ADDRESS)&ConnInfo[1]; - ConnInfo->RemoteAddressLength = TdiAddressSize; - - return Status; -} - - -UINT TaLengthOfTransportAddress( PTRANSPORT_ADDRESS Addr ) { - UINT AddrLen = 2 * sizeof( ULONG ) + Addr->Address[0].AddressLength; - printf("AddrLen %x\n", AddrLen); - return AddrLen; -} - -NTSTATUS -TdiBuildConnectionInfoInPlace -( PTDI_CONNECTION_INFORMATION ConnectionInfo, - PTA_ADDRESS Address ) { - NTSTATUS Status = STATUS_SUCCESS; - - RtlCopyMemory( ConnectionInfo->RemoteAddress, - Address, - ConnectionInfo->RemoteAddressLength ); - - return Status; -} - -NTSTATUS -TdiBuildConnectionInfo -( PTDI_CONNECTION_INFORMATION *ConnectionInfo, - PTA_ADDRESS Address ) { - NTSTATUS Status = TdiBuildNullConnectionInfo( ConnectionInfo, - Address->AddressType ); - - if( NT_SUCCESS(Status) ) - TdiBuildConnectionInfoInPlace( *ConnectionInfo, Address ); - - return Status; -} - -class TCPSocketObject : public SocketObject { -public: - TCPSocketObject( std::string host, int port, NTSTATUS *status ) { - TA_IP_ADDRESS ConnectTo; - PTDI_CONNECTION_INFORMATION ConnInfo; - - ConnectTo.TAAddressCount = 1; - ConnectTo.Address[0].AddressLength = sizeof(TDI_ADDRESS_IP); - ConnectTo.Address[0].AddressType = TDI_ADDRESS_TYPE_IP; - ConnectTo.Address[0].Address[0].sin_port = htons(port); - ConnectTo.Address[0].Address[0].in_addr = 0x6a020a0a; - - TdiBuildConnectionInfo( &ConnInfo, (PTA_ADDRESS)&ConnectTo ); - - Connection = TCPAllocateConnectionEndpoint( NULL ); - *status = TCPSocket( Connection, - AF_INET, - SOCK_STREAM, IPPROTO_TCP ); - if( !*status ) - *status = TCPConnect( Connection, - ConnInfo, - NULL, - connect_complete, - NULL ); - } - - ~TCPSocketObject() { - TCPClose( Connection ); - if( Connection ) TCPFreeConnectionEndpoint( Connection ); - } - - int send( char *buf, int len, int *bytes, struct sockaddr_in *si ) { - NTSTATUS Status = STATUS_UNSUCCESSFUL; - - if( Connection ) - Status = TCPSendData( Connection, - buf, - len, - (PULONG)bytes, - 0 ); - return Status; - } - - int recv( char *buf, int len, int *bytes, struct sockaddr_in *si ) { - NTSTATUS Status = STATUS_UNSUCCESSFUL; - - if( Connection ) - Status = TCPSendData( Connection, - buf, - len, - (PULONG)bytes, - 0 ); - return Status; - } - -private: - PCONNECTION_ENDPOINT Connection; -}; - -VOID SendPacket( PVOID Context, - PNDIS_PACKET NdisPacket, - UINT Offset, - PVOID LinkAddress, - USHORT Type ) { - PCHAR DataOut; - PUCHAR Addr = (PUCHAR)LinkAddress; - UINT Size; - std::string output_packet; - - printf( "Sending packet: %02x:%02x:%02x:%02x:%02x:%02x\n", - Addr[0], Addr[1], Addr[2], Addr[3], Addr[4], Addr[5] ); - - GetDataPtr( NdisPacket, Offset, &DataOut, &Size ); - for( int off = 0; off < Size; off += 16 ) { - display_row( DataOut, off, Size ); - } - printf( "\n" ); - - output_packet += std::string( hwaddr, sizeof(hwaddr) ); - output_packet += std::string( (char *)LinkAddress, sizeof(hwaddr) ); - output_packet += (char)(Type >> 8); - output_packet += (char)Type; - output_packet += std::string( DataOut + Offset, Size - Offset ); - - output_packets.push_back( output_packet ); -} - -#if 0 -UINT CopyBufferToBufferChain -( PNDIS_BUFFER DstBuffer, UINT DstOffset, PCHAR SrcData, UINT Length ) { - assert( 0 ); -} -#endif - -int main( int argc, char **argv ) { - int asock = INVALID_SOCKET, selret, dgrecv, fromsize, err, port = 5001; - int bytes, adapter_id, mtu, speed; - char datagram[MAX_DG_SIZE]; - struct fd_set readf; - struct timeval tv; - struct sockaddr_in addr_from = { AF_INET }, addr_to; - std::string word, cmdin, host; - std::list::iterator i; - WSADATA wsadata; - NTSTATUS Status; - UNICODE_STRING RegistryUnicodePath; - PCONNECTION_ENDPOINT Connection; - PIP_INTERFACE Interface; - IP_PACKET IPPacket; - LLIP_BIND_INFO BindInfo; - SocketObject *S = NULL; - - RtlInitUnicodeString - ( &RegistryUnicodePath, - L"\\SYSTEM\\CurrentControlSet\\Services" - L"\\Tcpip" ); - - ExpInitLookasideLists(); - - WSAStartup( 0x101, &wsadata ); - - if( argc > 1 ) port = atoi(argv[1]); - - IPStartup( &RegistryUnicodePath ); - - BindInfo.Context = NULL; - BindInfo.HeaderSize = sizeof(ETH_HEADER); - BindInfo.MTU = 1500; /* MTU for ethernet */ - BindInfo.Address = (PUCHAR)hwaddr; - BindInfo.AddressLength = sizeof(hwaddr); - BindInfo.Transmit = SendPacket; - - IPCreateInterface( &BindInfo ); - - asock = socket( AF_INET, SOCK_DGRAM, 0 ); - - addr_from.sin_port = htons( port ); - - if( bind( asock, (struct sockaddr *)&addr_from, sizeof( addr_from ) ) ) { - printf( "Bind error\n" ); - return 0; - } - - while( true ) { - FD_ZERO( &readf ); - FD_SET( asock, &readf ); - tv.tv_sec = 0; - tv.tv_usec = 10000; - selret = select( asock + 1, &readf, NULL, NULL, &tv ); - - if( FD_ISSET( asock, &readf ) ) { - fromsize = sizeof( addr_from ); - dgrecv = recvfrom( asock, datagram, sizeof(datagram), 0, - (struct sockaddr *)&addr_from, &fromsize ); - - if( datagram[0] == 'C' && datagram[1] == 'M' && - datagram[2] == 'D' && datagram[3] == ' ' ) { - int theport, bytes, recvret, off, bytin; - struct sockaddr_in nam; - std::string faddr, word; - std::istringstream - cmdin( std::string( datagram + 4, dgrecv - 4 ) ); - - cmdin >> word; - -/* UDP Section */ - if( word == "udpsocket" ) { -/* TCP Section */ - } else if( word == "tcpsocket" ) { - cmdin >> host >> port; - S = new TCPSocketObject( host, port, &Status ); - fprintf( stderr, "Socket: Result %x\n", Status ); - } else if( word == "close" ) { - TCPClose( Connection ); - TCPFreeConnectionEndpoint( Connection ); - } else if( word == "type" ) { - std::string therest = &cmdin.str()[word.size()]; - char* p = &therest[0]; - p += strspn ( p, " \t" ); - char* src = p; - char* dst = p; - while ( *src ) - { - char c = *src++; - if ( c == '\r' || c == '\n' ) break; - if ( c == '\\' ) - { - c = *src++; - switch ( c ) - { - case 'b': c = '\b'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - case 'v': c = '\v'; break; - } - } - *dst++ = c; - } - *dst = '\0'; - if( S ) - err = S->send( p, strlen(p), &bytes, NULL ); - if( err > 0 ) { bytin = err; err = 0; } - - if( err ) - fprintf ( stderr, "OskitTCPConnect: error %d\n", - err ); - else { - printf ( "wrote %d bytes\n", bytin ); - } - } else if( word == "send" ) { - off = 0; - while( cmdin >> word ) { - datagram[off++] = - atoi( (std::string("0x") + word).c_str() ); - } - - if( (err = S->send( datagram, off, &bytin, NULL )) != 0 ) { - fprintf( stderr, "OskitTCPConnect: error %d\n", err ); - } else { - printf( "wrote %d bytes\n", bytin ); - } - } else if( word == "recv" ) { - cmdin >> bytes; - - if( (err = S->recv( datagram, - sizeof(datagram), - &bytes, - NULL )) != 0 ) { - fprintf( stderr, "OskitTCPRecv: error %d\n", err ); - } - -/* Misc section */ - } else if( word == "end" ) { - return 0; - } - } else if( dgrecv > 14 ) { - addr_to = addr_from; - - if( datagram[12] == 8 && datagram[13] == 6 ) { - /* Answer arp query */ - char laddr[4]; - /* Mark patch as to the previous sender */ - memcpy( datagram + 32, datagram + 6, 6 ); - memcpy( datagram, datagram + 6, 6 ); - /* Mark packet as from us */ - memcpy( datagram + 22, hwaddr, 6 ); - memcpy( datagram + 6, hwaddr, 6 ); - /* Swap inet addresses */ - memcpy( laddr, datagram + 28, 4 ); - memcpy( datagram + 28, datagram + 38, 4 ); - memcpy( datagram + 38, laddr, 4 ); - /* Set reply opcode */ - datagram[21] = 2; - - err = sendto( asock, datagram, dgrecv, 0, - (struct sockaddr *)&addr_to, - sizeof(addr_to) ); - - if( err != 0 ) - printf( "sendto: %d\n", err ); - } else { - memcpy( hdr, datagram + 6, 6 ); - memcpy( hdr + 6, datagram, 6 ); - memcpy( hdr + 12, datagram + 12, 2 ); - IPPacket.Header = datagram; - IPPacket.Data = datagram + 14; - IPPacket.TotalSize = dgrecv; - IPReceive( Interface, &IPPacket ); - } - } - } - - IPTimeout(NULL, NULL, NULL, NULL); - - for( i = output_packets.begin(); i != output_packets.end(); i++ ) { - err = sendto( asock, i->c_str(), i->size(), 0, - (struct sockaddr *)&addr_to, sizeof(addr_to) ); - - fprintf( stderr, "** SENDING PACKET %d bytes **\n", i->size() ); - - if( err != 0 ) - printf( "sendto: %d\n", err ); - } - - output_packets.clear(); - } -} - diff --git a/rostests/tests/iptest/iptest.rbuild b/rostests/tests/iptest/iptest.rbuild deleted file mode 100644 index bbf7bd433de..00000000000 --- a/rostests/tests/iptest/iptest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - iptest.cpp - diff --git a/rostests/tests/isotest/isotest.c b/rostests/tests/isotest/isotest.c deleted file mode 100644 index a0c4921e5e3..00000000000 --- a/rostests/tests/isotest/isotest.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * isotest - display cdrom information - */ - -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include - -#include -#include -#include -#include -#include - - -void HexDump(char *buffer, ULONG size) -{ - ULONG offset = 0; - unsigned char *ptr; - - while (offset < (size & ~15)) - { - ptr = (unsigned char*)((ULONG)buffer + offset); - printf("%08lx %02hx %02hx %02hx %02hx %02hx %02hx %02hx %02hx-%02hx %02hx %02hx %02hx %02hx %02hx %02hx %02hx", - offset, - ptr[0], - ptr[1], - ptr[2], - ptr[3], - ptr[4], - ptr[5], - ptr[6], - ptr[7], - ptr[8], - ptr[9], - ptr[10], - ptr[11], - ptr[12], - ptr[13], - ptr[14], - ptr[15]); - - printf(" %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", - isprint(ptr[0])?ptr[0]:'.', - isprint(ptr[1])?ptr[1]:'.', - isprint(ptr[2])?ptr[2]:'.', - isprint(ptr[3])?ptr[3]:'.', - isprint(ptr[4])?ptr[4]:'.', - isprint(ptr[5])?ptr[5]:'.', - isprint(ptr[6])?ptr[6]:'.', - isprint(ptr[7])?ptr[7]:'.', - isprint(ptr[8])?ptr[8]:'.', - isprint(ptr[9])?ptr[9]:'.', - isprint(ptr[10])?ptr[10]:'.', - isprint(ptr[11])?ptr[11]:'.', - isprint(ptr[12])?ptr[12]:'.', - isprint(ptr[13])?ptr[13]:'.', - isprint(ptr[14])?ptr[14]:'.', - isprint(ptr[15])?ptr[15]:'.'); - - offset += 16; - } - - ptr = (unsigned char*)((ULONG)buffer + offset); - if (offset < size) - { - printf("%08lx ", offset); - while (offset < size) - { - printf(" %02hx", *ptr); - offset++; - ptr++; - } - } - - printf("\n\n"); -} - - -#ifndef EVENT_ALL_ACCESS -#define EVENT_ALL_ACCESS (0x1f0003L) -#endif - -BOOL -ReadBlock(HANDLE FileHandle, - PVOID Buffer, - PLARGE_INTEGER Offset, - ULONG Length, - PULONG BytesRead) -{ - IO_STATUS_BLOCK IoStatusBlock; - OBJECT_ATTRIBUTES ObjectAttributes; - NTSTATUS Status; - HANDLE EventHandle; - - InitializeObjectAttributes(&ObjectAttributes, - NULL, 0, NULL, NULL); - - Status = NtCreateEvent(&EventHandle, - EVENT_ALL_ACCESS, - &ObjectAttributes, - TRUE, - FALSE); - if (!NT_SUCCESS(Status)) - { - printf("NtCreateEvent() failed\n"); - return(FALSE); - } - - Status = NtReadFile(FileHandle, - EventHandle, - NULL, - NULL, - &IoStatusBlock, - Buffer, - Length, - Offset, - NULL); - if (Status == STATUS_PENDING) - { - NtWaitForSingleObject(EventHandle, FALSE, NULL); - Status = IoStatusBlock.Status; - } - - NtClose(EventHandle); - - if (Status != STATUS_PENDING && BytesRead != NULL) - { - *BytesRead = IoStatusBlock.Information; - } - if (!NT_SUCCESS(Status) && Status != STATUS_END_OF_FILE) - { - printf("ReadBlock() failed (Status: %lx)\n", Status); - return(FALSE); - } - - return(TRUE); -} - - - -int main (int argc, char *argv[]) -{ - HANDLE hDisk; - DWORD dwRead; - char *Buffer; - CHAR Filename[80]; - LARGE_INTEGER FilePosition; - - if (argc != 2) - { - printf("Usage: isotest [Drive:]\n"); - return 0; - } - - strcpy(Filename, "\\\\.\\"); - strcat(Filename, argv[1]); - - hDisk = CreateFile(Filename, - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - 0, - NULL); - if (hDisk == INVALID_HANDLE_VALUE) - { - printf("CreateFile(): Invalid disk handle!\n"); - return 0; - } - - Buffer = (char*)malloc(2048); - if (Buffer == NULL) - { - CloseHandle(hDisk); - printf("Out of memory!\n"); - return 0; - } - memset(Buffer, 0, 2048); - - - FilePosition.QuadPart = 16 * 2048; -#if 0 - SetLastError(NO_ERROR); - SetFilePointer(hDisk, - FilePosition.u.LowPart, - &FilePosition.u.HighPart, - FILE_BEGIN); - if (GetLastError() != NO_ERROR) - { - CloseHandle(hDisk); - free(Buffer); - printf("SetFilePointer() failed!\n"); - return 0; - } - - if (ReadFile(hDisk, - Buffer, - 2048, - &dwRead, - NULL) == FALSE) - { - CloseHandle(hDisk); - free(Buffer); - printf("ReadFile() failed!\n"); - return 0; - } -#endif - - if (ReadBlock(hDisk, - Buffer, - &FilePosition, - 2048, - &dwRead) == FALSE) - { - CloseHandle(hDisk); - free(Buffer); -#if 0 - printf("ReadBlock() failed!\n"); -#endif - return 0; - } - - HexDump(Buffer, 128); - - CloseHandle(hDisk); - - free(Buffer); - - return 0; -} - -/* EOF */ diff --git a/rostests/tests/isotest/isotest.rbuild b/rostests/tests/isotest/isotest.rbuild deleted file mode 100644 index 5b4cbb82832..00000000000 --- a/rostests/tests/isotest/isotest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - ntdll - isotest.c - diff --git a/rostests/tests/lantst/lantest.cpp b/rostests/tests/lantst/lantest.cpp deleted file mode 100644 index 6b678a244bd..00000000000 --- a/rostests/tests/lantst/lantest.cpp +++ /dev/null @@ -1,218 +0,0 @@ -#include -#include -#include -#include -#include -#include - -using std::string; -using std::cin; -using std::cout; -using std::cerr; -using std::endl; - -void display_row( char *data, int off, int len ) { - int i; - - printf( "%08x:", off ); - for( i = off; i < len && i < off + 16; i++ ) { - printf( " %02x", data[i] & 0xff ); - } - - for( ; i < off + 16; i++ ) - printf(" "); - - printf( " -- " ); - - for( i = off; i < len && i < off + 16; i++ ) { - printf( "%c", (data[i] >= ' ' && data[i] <= '~') ? data[i] : '.' ); - } - - printf( "\n" ); -} - -void display_buffer( char *Packet, int ReadLen ) { - UINT PktLen; - for( PktLen = 0; PktLen < ReadLen; PktLen += 16 ) - display_row( Packet, PktLen, ReadLen ); -} - -int byte_till_end( char *Packet, int PktLen ) { - int byte; - std::string word; - - cin >> word; - while( word != "end" ) { - byte = strtoul( (string("0x") + word).c_str(), 0, 0 ); - fprintf( stderr, "Byte[%d]: %x\n", PktLen, byte & 0xff ); - Packet[PktLen++] = byte; - cin >> word; - } - - return PktLen; -} - -/* Ethernet types. We swap constants so we can compare values at runtime - without swapping them there */ -#define ETYPE_IPv4 WH2N(0x0800) -#define ETYPE_IPv6 WH2N(0x86DD) -#define ETYPE_ARP WH2N(0x0806) - -extern "C" -NTSTATUS STDCALL NtCreateFile( - PHANDLE FileHandle, - ACCESS_MASK DesiredAccess, - POBJECT_ATTRIBUTES ObjectAttributes, - PIO_STATUS_BLOCK IoStatusBlock, - PLARGE_INTEGER AllocationSize, - ULONG FileAttributes, - ULONG ShareAccess, - ULONG CreateDisposition, - ULONG CreateOptions, - PVOID EaBuffer, - ULONG EaLength); - -int main( int argc, char **argv ) { - string word; - HANDLE LanFile; - OBJECT_ATTRIBUTES Attributes; - UNICODE_STRING LanDevice; - IO_STATUS_BLOCK Iosb; - HANDLE Event; - PFILE_FULL_EA_INFORMATION EaBuffer; - NTSTATUS Status; - DWORD On = 1, PktLen; - CHAR Packet[1600]; - PLAN_PACKET_HEADER Hdr = (PLAN_PACKET_HEADER)Packet; - PLAN_ADDRESS Addr = (PLAN_ADDRESS)Packet; - USHORT TypesToListen[] = { ETYPE_IPv4, ETYPE_IPv6, ETYPE_ARP }; - UINT EaLength = LAN_EA_INFO_SIZE(sizeof(TypesToListen)/sizeof(USHORT)); - - Status = NtCreateEvent(&Event, - EVENT_ALL_ACCESS, - NULL, - 0, - 0 ); - - RtlInitUnicodeString( &LanDevice, L"\\Device\\Lan" ); - - InitializeObjectAttributes( &Attributes, - &LanDevice, - OBJ_CASE_INSENSITIVE, - NULL, - NULL ); - - EaBuffer = (PFILE_FULL_EA_INFORMATION)calloc( EaLength, 1 ); - LAN_FILL_EA_INFO(EaBuffer,sizeof(TypesToListen)/sizeof(USHORT), - TypesToListen); - - Status = ZwCreateFile( &LanFile, - SYNCHRONIZE | GENERIC_READ | GENERIC_WRITE | - GENERIC_EXECUTE, - &Attributes, - &Iosb, - NULL, - FILE_ATTRIBUTE_NORMAL, - FILE_SHARE_READ | FILE_SHARE_WRITE, - FILE_OPEN_IF, - FILE_SYNCHRONOUS_IO_NONALERT, - EaBuffer, - EaLength ); - - if( !NT_SUCCESS(Status) ) { - cerr << "Could not open lan device " << Status << "\n"; - return 1; - } - - Status = DeviceIoControl( LanFile, - IOCTL_IF_BUFFERED_MODE, - &On, - sizeof(On), - 0, - 0, - &PktLen, - NULL ); - - if( !Status ) { - cerr << "Could not turn on buffered mode " << Status << "\n"; - return 1; - } - - while( cin >> word ) { - if( word == "end" ) { - NtClose( LanFile ); - return 0; - } else if( word == "enum" ) { - Status = DeviceIoControl( LanFile, - IOCTL_IF_ENUM_ADAPTERS, - NULL, - 0, - Packet, - sizeof(Packet), - &PktLen, - NULL ); - - cout << "EnumAdapters: " << Status << "\n"; - if( Status ) - display_buffer( Packet, PktLen ); - } else if( word == "query" ) { - cin >> PktLen; - - Status = DeviceIoControl( LanFile, - IOCTL_IF_ADAPTER_INFO, - &PktLen, - sizeof(PktLen), - Packet, - sizeof(Packet), - &PktLen, - NULL ); - - cout << "QueryAdapterInfo: " << Status << "\n"; - if( Status ) - display_buffer( Packet, PktLen ); - } else if( word == "send" ) { - cin >> Hdr->Fixed.Adapter - >> Hdr->Fixed.AddressType - >> Hdr->Fixed.AddressLen - >> Hdr->Fixed.PacketType; - Hdr->Fixed.Mdl = NULL; - PktLen = byte_till_end( Packet, Hdr->Address - (PCHAR)Hdr ); - Status = NtWriteFile( LanFile, - NULL, - NULL, - NULL, - &Iosb, - Packet, - PktLen, - NULL, - NULL ); - - cout << "NtWriteFile: " << Status << "\n"; - } else if( word == "recv" ) { - ULONG ReadLen; - Status = NtReadFile( LanFile, - Event, - NULL, - NULL, - &Iosb, - Packet, - sizeof(Packet), - NULL, - NULL ); - cout << "NtReadFile: " << Status << "\n"; - if( Status == STATUS_PENDING ) { - LARGE_INTEGER Timeout = { 0 }; - Status = NtWaitForSingleObject( Event, 1, &Timeout ); - } - - ReadLen = Iosb.Information; - - if( Status == STATUS_SUCCESS ) { - cout << "Read " << ReadLen << " bytes\n"; - display_buffer( Packet, ReadLen ); - } - } - } - - return 0; -} diff --git a/rostests/tests/lantst/lantest.rbuild b/rostests/tests/lantst/lantest.rbuild deleted file mode 100644 index 919afc885d8..00000000000 --- a/rostests/tests/lantst/lantest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - lantest.cpp - diff --git a/rostests/tests/lineclip/lineclip.c b/rostests/tests/lineclip/lineclip.c deleted file mode 100644 index 113125f4358..00000000000 --- a/rostests/tests/lineclip/lineclip.c +++ /dev/null @@ -1,166 +0,0 @@ -#include -#include - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = "ClipClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("ClipClass", - "Line clipping test", - WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return msg.wParam; -} - -static void -DrawLines(HDC hDC) -{ - static struct - { - int fromx; - int fromy; - int tox; - int toy; - } - points[ ] = - { - { 50, 99, 125, 99 }, - { 160, 99, 190, 99 }, - { 300, 99, 225, 99 }, - { 50, 100, 125, 100 }, - { 160, 100, 190, 100 }, - { 300, 100, 225, 100 }, - { 50, 125, 300, 125 }, - { 50, 149, 125, 149 }, - { 160, 149, 190, 149 }, - { 300, 149, 225, 149 }, - { 50, 150, 125, 150 }, - { 160, 150, 190, 150 }, - { 300, 150, 225, 150 }, - { 160, 249, 190, 249 }, - { 160, 250, 190, 250 }, - { 149, 50, 149, 125 }, - { 149, 160, 149, 190 }, - { 149, 300, 149, 225 }, - { 150, 50, 150, 125 }, - { 150, 160, 150, 190 }, - { 150, 300, 150, 225 }, - { 199, 50, 199, 125 }, - { 199, 160, 199, 190 }, - { 199, 300, 199, 225 }, - { 200, 50, 200, 125 }, - { 200, 160, 200, 190 }, - { 200, 300, 200, 225 }, - { 175, 50, 175, 300 }, - { 50, 55, 300, 290 }, - { 300, 295, 50, 60 }, - { 50, 290, 300, 55 }, - { 300, 60, 50, 295 }, - { 55, 50, 290, 300 }, - { 295, 300, 60, 50 }, - { 55, 300, 290, 50 }, - { 295, 50, 60, 300 } - }; - int i; - - for (i = 0; i < sizeof(points) / sizeof(points[0]); i++) - { - MoveToEx(hDC, points[i].fromx, points[i].fromy, NULL); - LineTo(hDC, points[i].tox, points[i].toy); - } -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - RECT clr; - HRGN ClipRgn, ExcludeRgn; - RECT Rect; - - switch(msg) - { - case WM_PAINT: - GetClientRect(hWnd, &clr); - ClipRgn = CreateRectRgnIndirect(&clr); - hDC = BeginPaint(hWnd, &ps); - Rect.left = 100; - Rect.top = 100; - Rect.right = 250; - Rect.bottom = 150; - FillRect(hDC, &Rect, CreateSolidBrush(RGB(0xFF, 0x00, 0x00))); - ExcludeRgn = CreateRectRgnIndirect(&Rect); - CombineRgn(ClipRgn, ClipRgn, ExcludeRgn, RGN_DIFF); - DeleteObject(ExcludeRgn); - Rect.left = 150; - Rect.top = 150; - Rect.right = 200; - Rect.bottom = 250; - FillRect(hDC, &Rect, CreateSolidBrush(RGB(0xFF, 0x00, 0x00))); - SelectObject(hDC, CreatePen(PS_SOLID, 0, RGB(0xFF, 0xFF, 0x00))); - DrawLines(hDC); - SelectObject(hDC, CreatePen(PS_SOLID, 0, RGB(0x00, 0x00, 0xFF))); - ExcludeRgn = CreateRectRgnIndirect(&Rect); - CombineRgn(ClipRgn, ClipRgn, ExcludeRgn, RGN_DIFF); - DeleteObject(ExcludeRgn); - SelectClipRgn(hDC, ClipRgn); - DrawLines(hDC); - EndPaint(hWnd, &ps); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/lineclip/lineclip.rbuild b/rostests/tests/lineclip/lineclip.rbuild deleted file mode 100644 index c1824d10239..00000000000 --- a/rostests/tests/lineclip/lineclip.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - lineclip.c - diff --git a/rostests/tests/linetest/linetest.c b/rostests/tests/linetest/linetest.c deleted file mode 100644 index fdfd3a40511..00000000000 --- a/rostests/tests/linetest/linetest.c +++ /dev/null @@ -1,184 +0,0 @@ - -#include -#include - -#include - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -const TCHAR* CLASS_NAME = _T("LineTestClass"); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = CLASS_NAME; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow(CLASS_NAME, - _T("Line drawing test"), - WS_OVERLAPPEDWINDOW, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return msg.wParam; -} - -#define red RGB(255,0,0) -#define grn RGB(0,255,0) -#define blu RGB(0,0,255) -#define blk RGB(0,0,0) - -static void -DrawLines(HDC hDC) -{ - static struct - { - int fromx; - int fromy; - int tox; - int toy; - COLORREF clr; - } - points[ ] = - { - { 10, 10, 19, 10, red }, - { 20, 10, 20, 19, grn }, - { 20, 20, 11, 20, blu }, - { 10, 20, 10, 11, blk }, - { 12, 12, 15, 15, red }, - { 18, 12, 15, 15, grn }, - { 18, 18, 15, 15, blu }, - { 12, 18, 15, 15, blk }, - - { 35, 10, 39, 14, red }, - { 40, 15, 36, 19, grn }, - { 35, 20, 31, 16, blu }, - { 30, 15, 34, 11, blk }, - - { 2, 1, 5, 2, red }, - { 6, 2, 5, 5, grn }, - { 5, 6, 2, 5, blu }, - { 1, 5, 2, 2, blk }, - - { 50, 1, 51, 1, red }, - { 50, 2, 52, 2, grn }, - { 50, 3, 53, 3, blu }, - { 50, 4, 54, 4, blk }, - { 50, 5, 55, 5, red }, - { 50, 6, 56, 6, grn }, - { 50, 7, 57, 7, blu }, - { 50, 8, 58, 8, blk }, - { 50, 9, 59, 9, red }, - { 50, 10, 60, 10, grn }, - { 50, 11, 61, 11, blu }, - { 50, 12, 62, 12, blk }, - - { 50, 14, 62, 14, red }, - { 51, 15, 62, 15, grn }, - { 52, 16, 62, 16, blu }, - { 53, 17, 62, 17, blk }, - { 54, 18, 62, 18, red }, - { 55, 19, 62, 19, grn }, - { 56, 20, 62, 20, blu }, - { 57, 21, 62, 21, blk }, - { 58, 22, 62, 22, red }, - { 59, 23, 62, 23, grn }, - { 60, 24, 62, 24, blu }, - { 61, 25, 62, 25, blk }, - }; - int i; - - for (i = 0; i < sizeof(points) / sizeof(points[0]); i++) - { - HPEN hpen, hpenold; - hpen = CreatePen ( PS_SOLID, 0, points[i].clr ); - hpenold = (HPEN)SelectObject ( hDC, hpen ); - MoveToEx ( hDC, points[i].fromx, points[i].fromy, NULL ); - LineTo ( hDC, points[i].tox, points[i].toy ); - SelectObject ( hDC, hpenold ); - DeleteObject ( hpen ); - } -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - RECT clr; - HBRUSH hbr; - - switch(msg) - { - case WM_PAINT: - GetClientRect(hWnd, &clr); - //ClipRgn = CreateRectRgnIndirect(&clr); - hDC = BeginPaint(hWnd, &ps); - //Rect.left = 100; - //Rect.top = 100; - //Rect.right = 250; - //Rect.bottom = 150; - //FillRect(hDC, &Rect, CreateSolidBrush(RGB(0xFF, 0x00, 0x00))); - //ExcludeRgn = CreateRectRgnIndirect(&Rect); - //CombineRgn(ClipRgn, ClipRgn, ExcludeRgn, RGN_DIFF); - //DeleteObject(ExcludeRgn); - //Rect.left = 150; - //Rect.top = 150; - //Rect.right = 200; - //Rect.bottom = 250; - hbr = CreateSolidBrush(RGB(255, 255, 255)); - FillRect ( hDC, &clr, hbr ); - DeleteObject ( hbr ); - DrawLines(hDC); - EndPaint(hWnd, &ps); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/linetest/linetest.rbuild b/rostests/tests/linetest/linetest.rbuild deleted file mode 100644 index 255bdaf1c34..00000000000 --- a/rostests/tests/linetest/linetest.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - 0x0501 - - kernel32 - user32 - gdi32 - linetest.c - diff --git a/rostests/tests/lpctst/conport.c b/rostests/tests/lpctst/conport.c deleted file mode 100644 index a3d310136cb..00000000000 --- a/rostests/tests/lpctst/conport.c +++ /dev/null @@ -1,205 +0,0 @@ -/* $Id$ - * - * reactos/apps/lpc/conport.c - * - * To be run in a real WNT 4.0 system with - * "\SmApiPort" as argument. Do not try to - * connect to "\Windows\ApiPort" since that - * reboots immeditely. - * - * Use Russinovich' HandleEx to verify - * conport.exe owns two unnamed LPC ports: - * the one created by kernel32.dll connecting - * to csrss.exe, and one connected to here. - * - * 19990627 (Emanuele Aliberti) - * Initial implementation. - * 19990704 (EA) - * Dump object's attributes moved in dumpinfo.c. - */ -#include -#include -#include -#define PROTO_LPC -#include -#include "dumpinfo.h" - -#define LPC_CONNECT_FLAG1 0x00000001 -#define LPC_CONNECT_FLAG2 0x00000010 -#define LPC_CONNECT_FLAG3 0x00000100 -#define LPC_CONNECT_FLAG4 0x00001000 -#define LPC_CONNECT_FLAG5 0x00010000 - -NTSTATUS -(STDCALL * ConnectPort)( - OUT PHANDLE PortHandle, - IN PUNICODE_STRING PortName, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN DWORD Unknown3, - IN DWORD Unknown4, - IN DWORD Unknown5, - IN DWORD Unknown6, - IN ULONG Flags - ); - -NTSTATUS -(STDCALL * QueryObject)( - IN HANDLE ObjectHandle, - IN CINT ObjectInformationClass, - OUT PVOID ObjectInformation, - IN ULONG Length, - OUT PULONG ResultLength - ); - -NTSTATUS -(STDCALL * YieldExecution)(VOID); - -#define BUF_SIZE 1024 -#define MAXARG 1000000 - - -VOID -TryConnectPort(char *port_name) -{ - DWORD Status = 0; - HANDLE Port = 0; - int i; - UNICODE_STRING PortName; - OBJECT_ATTRIBUTES ObjectAttributes; - WORD Name [BUF_SIZE] = {0}; - int dwx = 0; - char * port_name_save = port_name; - - /* - * Convert the port's name to Unicode. - */ - for ( - PortName.Length = 0; - ( *port_name - && (PortName.Length < BUF_SIZE) - ); - ) - { - Name[PortName.Length++] = (WORD) *port_name++; - } - Name[PortName.Length] = 0; - - PortName.Length = PortName.Length * sizeof (WORD); - PortName.MaximumLength = PortName.Length + sizeof (WORD); - PortName.Buffer = (PWSTR) Name; - /* - * Prepare the port object attributes. - */ - ObjectAttributes.Length = - sizeof (OBJECT_ATTRIBUTES); - ObjectAttributes.RootDirectory = - NULL; - ObjectAttributes.ObjectName = - NULL /*& PortName */; - ObjectAttributes.Attributes = - OBJ_CASE_INSENSITIVE; - ObjectAttributes.SecurityDescriptor = - NULL; - ObjectAttributes.SecurityQualityOfService = - NULL; - /* - * Try to issue a connection request. - */ - Port = 0; - Status = ConnectPort( - & Port, /* & PortHandle */ - & PortName, /* & PortName */ - & ObjectAttributes, /* & PortAttributes */ - NULL, /* & SecurityQos */ - NULL, /* & SectionInfo */ - NULL, /* & MapInfo */ - NULL, /* & MaxMessageSize */ - LPC_CONNECT_FLAG5 /* & ConnectInfoLength */ - ); - if (Status == STATUS_SUCCESS) - { - DumpInfo( - Name, - Status, - "connected", - Port - ); - /* Hot waiting */ - for (dwx=0; dwx -#include -#include -#define PROTO_LPC -#include -#include "dumpinfo.h" - -#define LPC_CONNECT_FLAG1 0x00000001 -#define LPC_CONNECT_FLAG2 0x00000010 -#define LPC_CONNECT_FLAG3 0x00000100 -#define LPC_CONNECT_FLAG4 0x00001000 -#define LPC_CONNECT_FLAG5 0x00010000 - -NTSTATUS -(STDCALL * CreatePort)( - /*OUT PHANDLE PortHandle,*/ - PVOID Buffer, - IN POBJECT_ATTRIBUTES PortAttributes OPTIONAL, - IN ACCESS_MASK DesiredAccess, - IN DWORD Unknown3, - IN ULONG Flags - ); - -NTSTATUS -(STDCALL * QueryObject)( - IN HANDLE ObjectHandle, - IN CINT ObjectInformationClass, - OUT PVOID ObjectInformation, - IN ULONG Length, - OUT PULONG ResultLength - ); - -NTSTATUS -(STDCALL * YieldExecution)(VOID); - -#define BUF_SIZE 1024 -#define MAXARG 5000000 - - -VOID -TryCreatePort(char *port_name) -{ - DWORD Status = 0; - HANDLE Port = 0; - int i; - UNICODE_STRING PortName; - OBJECT_ATTRIBUTES ObjectAttributes; - WORD Name [BUF_SIZE] = {0}; - int dwx = 0; - char * port_name_save = port_name; - - /* - * Convert the port's name to Unicode. - */ - for ( - PortName.Length = 0; - ( *port_name - && (PortName.Length < BUF_SIZE) - ); - ) - { - Name[PortName.Length++] = (WORD) *port_name++; - } - Name[PortName.Length] = 0; - - PortName.Length = PortName.Length * sizeof (WORD); - PortName.MaximumLength = PortName.Length + sizeof (WORD); - PortName.Buffer = (PWSTR) Name; - /* - * Prepare the port object attributes. - */ - ObjectAttributes.Length = - sizeof (OBJECT_ATTRIBUTES); - ObjectAttributes.RootDirectory = - NULL; - ObjectAttributes.ObjectName = - & PortName; - ObjectAttributes.Attributes = - 0; //OBJ_CASE_INSENSITIVE --> STATUS_INVALID_PARAMETER ==> case sensitive!; - ObjectAttributes.SecurityDescriptor = - NULL; - ObjectAttributes.SecurityQualityOfService = - NULL; - /* - * Try to issue a connection request. - */ - Port = 0; - Status = CreatePort( - & Port, - & ObjectAttributes, - 0, /* ACCESS_MASK? */ - 0, /* Unknown3 */ - LPC_CONNECT_FLAG5 - ); - if (Status == STATUS_SUCCESS) - { - DumpInfo( - Name, - Status, - "created", - Port - ); - /* Hot waiting */ - for (dwx=0; dwx -#include -#include -#include - -#define BUF_SIZE 1024 -#define MAX_BASIC_INFO_SIZE 512 - - -extern -NTSTATUS -(STDCALL * QueryObject)( - IN HANDLE ObjectHandle, - IN CINT ObjectInformationClass, - OUT PVOID ObjectInformation, - IN ULONG Length, - OUT PULONG ResultLength - ); - -extern -NTSTATUS -(STDCALL * QueryInformationPort)( - IN HANDLE PortHandle, - IN CINT PortInformationClass, /* guess */ - OUT PVOID PortInformation, /* guess */ - IN ULONG PortInformationLength, /* guess */ - OUT PULONG ReturnLength /* guess */ - ); - - -/* -static -VOID -DumpBuffer( - char *Name, - BYTE *buffer, - ULONG size - ) -{ - register ULONG i = 0; - - printf("%s [%d] = ",Name,size); - for ( i = 0; - i != size; - ++i - ) - { - printf("%02X",buffer[i]); - } - printf("\n"); -} -*/ - -VOID -DumpInfo ( - LPCWSTR Name, - NTSTATUS Status, - LPCWSTR Comment, - HANDLE Port - ) -{ - BYTE ObjectInformation [BUF_SIZE] = {0}; - ULONG ResultLength; - - wprintf( - L"Port \"%s\" %s:\n", - Name, - Comment - ); - - printf("\tStatus = %08X\n",Status); - printf("\tPort = %08X\n\n",Port); - /* - * Query object information. - */ - printf("Basic Information:\n"); - Status = QueryObject( - Port, - ObjectBasicInformation, - ObjectInformation, - sizeof (LPC_PORT_BASIC_INFORMATION), - & ResultLength - ); - if (Status == STATUS_SUCCESS) - { - PLPC_PORT_BASIC_INFORMATION i; - - i = (PLPC_PORT_BASIC_INFORMATION) ObjectInformation; - - printf( "\tUnknown01 = 0x%08X\n", i->Unknown0 ); - printf( "\tUnknown02 = 0x%08X\n", i->Unknown1 ); - printf( "\tUnknown03 = 0x%08X\n", i->Unknown2 ); - printf( "\tUnknown04 = 0x%08X\n", i->Unknown3 ); - printf( "\tUnknown05 = 0x%08X\n", i->Unknown4 ); - printf( "\tUnknown06 = 0x%08X\n", i->Unknown5 ); - printf( "\tUnknown07 = 0x%08X\n", i->Unknown6 ); - printf( "\tUnknown08 = 0x%08X\n", i->Unknown7 ); - printf( "\tUnknown09 = 0x%08X\n", i->Unknown8 ); - printf( "\tUnknown10 = 0x%08X\n", i->Unknown9 ); - printf( "\tUnknown11 = 0x%08X\n", i->Unknown10 ); - printf( "\tUnknown12 = 0x%08X\n", i->Unknown11 ); - printf( "\tUnknown13 = 0x%08X\n", i->Unknown12 ); - printf( "\tUnknown14 = 0x%08X\n", i->Unknown13 ); - } - else - { - printf("\tStatus = %08X\n",Status); - } - printf("Type Information:\n"); - Status = QueryObject( - Port, - ObjectTypeInformation, - ObjectInformation, - sizeof ObjectInformation, - & ResultLength - ); - if (Status == STATUS_SUCCESS) - { - OBJECT_TYPE_INFORMATION * i; - - i = (OBJECT_TYPE_INFORMATION *) ObjectInformation; - - wprintf( - L"\tName: \"%s\"\n", - (i->Name.Length ? i->Name.Buffer : L"") - ); -/* -FIXME: why this always raise an access violation exception? - wprintf( - L"\tType: \"%s\"\n", - (i->Type.Length ? i->Type.Buffer : L"") - ); -/**/ - printf( - "\tTotal Handles: %d\n", - i->TotalHandles - ); - printf( - "\tReference Count: %d\n", - i->ReferenceCount - ); - } - else - { - printf("\tStatus = %08X\n",Status); - } - printf("Name Information:\n"); - Status = QueryObject( - Port, - ObjectNameInformation, - ObjectInformation, - sizeof ObjectInformation, - & ResultLength - ); - if (Status == STATUS_SUCCESS) - { - OBJECT_NAME_INFORMATION * i; - - i = (OBJECT_NAME_INFORMATION *) ObjectInformation; - wprintf( - L"\tName: \"%s\"\n", - (i->Name.Length ? i->Name.Buffer : L"") - ); - } - else - { - printf("\tStatus = %08X\n",Status); - } - printf("Data Information:\n"); - Status = QueryObject( - Port, - ObjectDataInformation, - ObjectInformation, - sizeof ObjectInformation, - & ResultLength - ); - if (Status == STATUS_SUCCESS) - { - OBJECT_DATA_INFORMATION * i; - - i = (OBJECT_DATA_INFORMATION *) ObjectInformation; - printf( - "\tInherit Handle: %s\n", - (i->bInheritHandle ? "TRUE" : "FALSE") - ); - printf( - "\tProtect from Close: %s\n", - (i->bProtectFromClose ? "TRUE" : "FALSE") - ); - } - else - { - printf("\tStatus = %08X\n",Status); - } -//--- - printf("Port Information:\n"); -/* Status = QueryInformationPort( - Port, - 1, /* info class * / - ObjectInformation, - sizeof ObjectInformation, - & ResultLength - ); - if (Status == STATUS_SUCCESS) - { - DWORD * i = ObjectInformation; - int j = 0; - - while (j < ResultLength / sizeof (DWORD)) - { - printf("\t%08X\n",i[j]); - ++j; - } - } - else - { - printf("\tStatus = %08X\n",Status); - } -*/ -} - - -/* EOF */ diff --git a/rostests/tests/lpctst/dumpinfo.h b/rostests/tests/lpctst/dumpinfo.h deleted file mode 100644 index 51e78736e07..00000000000 --- a/rostests/tests/lpctst/dumpinfo.h +++ /dev/null @@ -1,8 +0,0 @@ -VOID -DumpInfo ( - LPCWSTR Name, - NTSTATUS Status, - LPCWSTR Comment, - HANDLE Port - ); - diff --git a/rostests/tests/lpctst/lpcclt.c b/rostests/tests/lpctst/lpcclt.c deleted file mode 100644 index ecf102d4ece..00000000000 --- a/rostests/tests/lpctst/lpcclt.c +++ /dev/null @@ -1,92 +0,0 @@ -/* $Id$ - * - * DESCRIPTION: Simple LPC Client - * PROGRAMMER: David Welch - */ -#include -#include -#include -#include -#include -#include -#include - -#include "lpctest.h" - -const char * MyName = "LPC-CLI"; -HANDLE OutputHandle; -HANDLE InputHandle; - -void debug_printf(char* fmt, ...) -{ - va_list args; - char buffer[255]; - - va_start(args,fmt); - vsprintf(buffer,fmt,args); - WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL); - va_end(args); -} - - -int main(int argc, char* argv[]) -{ - UNICODE_STRING PortName = ROS_STRING_INITIALIZER(TEST_PORT_NAME_U); - NTSTATUS Status; - HANDLE PortHandle; - LPC_MAX_MESSAGE Request; - ULONG ConnectInfo; - ULONG ConnectInfoLength = 0; - SECURITY_QUALITY_OF_SERVICE Sqos; - - printf("%s: Lpc test client\n", MyName); - - printf("%s: Connecting to port \"%s\"...\n", MyName, TEST_PORT_NAME); - ConnectInfoLength = 0; - ZeroMemory (& Sqos, sizeof Sqos); - Status = NtConnectPort(&PortHandle, - &PortName, - & Sqos, - 0, - 0, - 0, - NULL, - &ConnectInfoLength); - if (!NT_SUCCESS(Status)) - { - printf("%s: NtConnectPort() failed with status = 0x%08X.\n", MyName, Status); - return EXIT_FAILURE; - } - - printf("%s: Connected to \"%s\" with anonymous port 0x%x.\n", MyName, TEST_PORT_NAME, PortHandle); - - ZeroMemory(& Request, sizeof Request); - strcpy(Request.Data, GetCommandLineA()); - Request.Header.DataSize = strlen(Request.Data); - Request.Header.MessageSize = sizeof(LPC_MESSAGE) + - Request.Header.DataSize; - - printf("%s: Sending to port 0x%x message \"%s\"...\n", - MyName, - PortHandle, - (char *) Request.Data); - Status = NtRequestPort(PortHandle, - &Request.Header); - if (!NT_SUCCESS(Status)) - { - printf("%s: NtRequestPort(0x%x) failed with status = 0x%8X.\n", - MyName, - PortHandle, - Status); - return EXIT_FAILURE; - } - - printf("%s: Sending datagram to port 0x%x succeeded.\n", MyName, PortHandle); - - Sleep(2000); - - printf("%s: Disconnecting...", MyName); - NtClose (PortHandle); - - return EXIT_SUCCESS; -} diff --git a/rostests/tests/lpctst/lpcsrv.c b/rostests/tests/lpctst/lpcsrv.c deleted file mode 100644 index 6af9a2057c8..00000000000 --- a/rostests/tests/lpctst/lpcsrv.c +++ /dev/null @@ -1,139 +0,0 @@ -/* $Id$ - * - * DESCRIPTION: Simple LPC Server - * PROGRAMMER: David Welch - */ -#include -#include -#include -#include -#include -#include -#include - -#include "lpctest.h" - -static const char * MyName = "LPC-SRV"; - -HANDLE OutputHandle; -HANDLE InputHandle; - -void debug_printf(char* fmt, ...) -{ - va_list args; - char buffer[255]; - - va_start(args,fmt); - vsprintf(buffer,fmt,args); - WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL); - va_end(args); -} - - -int main(int argc, char* argv[]) -{ - UNICODE_STRING PortName = ROS_STRING_INITIALIZER(TEST_PORT_NAME_U); - OBJECT_ATTRIBUTES ObjectAttributes; - NTSTATUS Status; - HANDLE NamedPortHandle; - HANDLE PortHandle; - LPC_MAX_MESSAGE ConnectMsg; - - printf("%s: Lpc test server\n", MyName); - - InitializeObjectAttributes(&ObjectAttributes, - &PortName, - 0, - NULL, - NULL); - - printf("%s: Creating port \"%s\"...\n", MyName, TEST_PORT_NAME); - Status = NtCreatePort(&NamedPortHandle, - &ObjectAttributes, - 0, - 0, - 0); - if (!NT_SUCCESS(Status)) - { - printf("%s: NtCreatePort() failed with status = 0x%08lX.\n", MyName, Status); - return EXIT_FAILURE; - } - printf("%s: Port \"%s\" created (0x%x).\n\n", MyName, TEST_PORT_NAME, NamedPortHandle); - - for (;;) - { - printf("%s: Listening for connections requests on port 0x%x...\n", MyName, NamedPortHandle); - Status = NtListenPort(NamedPortHandle, - &ConnectMsg.Header); - if (!NT_SUCCESS(Status)) - { - printf("%s: NtListenPort() failed with status = 0x%08lX.\n", MyName, Status); - return EXIT_FAILURE; - } - - printf("%s: Received connection request 0x%08x on port 0x%x.\n", MyName, - ConnectMsg.Header.MessageId, NamedPortHandle); - printf("%s: Request from: PID=%x, TID=%x.\n", MyName, - ConnectMsg.Header.ClientId.UniqueProcess, ConnectMsg.Header.ClientId.UniqueThread); - - printf("%s: Accepting connection request 0x%08x...\n", MyName, - ConnectMsg.Header.MessageId); - Status = NtAcceptConnectPort(&PortHandle, - NamedPortHandle, - & ConnectMsg.Header, - TRUE, - 0, - NULL); - if (!NT_SUCCESS(Status)) - { - printf("%s: NtAcceptConnectPort() failed with status = 0x%08lX.\n", MyName, Status); - return EXIT_FAILURE; - } - printf("%s: Connection request 0x%08x accepted as port 0x%x.\n", MyName, - ConnectMsg.Header.MessageId, PortHandle); - - printf("%s: Completing connection for port 0x%x (0x%08x).\n", MyName, - PortHandle, ConnectMsg.Header.MessageId); - Status = NtCompleteConnectPort(PortHandle); - if (!NT_SUCCESS(Status)) - { - printf("%s: NtCompleteConnectPort() failed with status = 0x%08lX.\n", MyName, Status); - return EXIT_FAILURE; - } - - printf("%s: Entering server loop for port 0x%x...\n", MyName, PortHandle); - for(;;) - { - LPC_MAX_MESSAGE Request; - - Status = NtReplyWaitReceivePort(PortHandle, - 0, - NULL, - &Request.Header); - if (!NT_SUCCESS(Status)) - { - printf("%s: NtReplyWaitReceivePort() failed with status = 0x%08lX.\n", MyName, Status); - return EXIT_FAILURE; - } - - if (LPC_DATAGRAM == PORT_MESSAGE_TYPE(Request)) - { - printf("%s: Datagram message contents are <%s>.\n", - MyName, - Request.Data); - } - else - { - printf("%s: Message with type %d received on port 0x%x.\n", MyName, - PORT_MESSAGE_TYPE(Request), PortHandle); - NtClose(PortHandle); - printf("%s: Connected port 0x%x closed.\n\n", MyName, PortHandle); - break; - } - } - } - return EXIT_SUCCESS; -} - - -/* EOF */ diff --git a/rostests/tests/lpctst/lpctest.h b/rostests/tests/lpctst/lpctest.h deleted file mode 100644 index 6e6520844e8..00000000000 --- a/rostests/tests/lpctst/lpctest.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef _LPCTEST_H -#define _LPCTEST_H -#define TEST_PORT_NAME "\\TestPort" -#define TEST_PORT_NAME_U L"\\TestPort" -#endif diff --git a/rostests/tests/lpctst/lpctst.rbuild b/rostests/tests/lpctst/lpctst.rbuild deleted file mode 100644 index c6ccf3c9956..00000000000 --- a/rostests/tests/lpctst/lpctst.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - lpctst.c - diff --git a/rostests/tests/map_dup_inherit/map_dup_inherit.c b/rostests/tests/map_dup_inherit/map_dup_inherit.c deleted file mode 100644 index 59077fd19fc..00000000000 --- a/rostests/tests/map_dup_inherit/map_dup_inherit.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include - -/* This tests the ability of the target win32 to create an anonymous file - * mapping, create a mapping view with MapViewOfFile, and then realize the - * pages with VirtualAlloc. - */ - -int main( int argc, char **argv ) { - HANDLE file_view; - void *file_map; - int *x; - - fprintf( stderr, "%lu: Starting\n", GetCurrentProcessId() ); - - if( argc == 2 ) { - #ifdef WIN64 - file_map = (void *)atoi64(argv[1]); - #else - file_map = (void *)UlongToPtr(atoi(argv[1])); - #endif - } else { - file_map = CreateFileMapping( INVALID_HANDLE_VALUE, - NULL, - PAGE_READWRITE | SEC_RESERVE, - 0, 0x1000, NULL ); - if( !SetHandleInformation( file_map, - HANDLE_FLAG_INHERIT, - HANDLE_FLAG_INHERIT ) ) { - fprintf( stderr, "%lu: Could not make handle inheritable.\n", - GetCurrentProcessId() ); - return 100; - } - } - - if( !file_map ) { - fprintf( stderr, "%lu: Could not create anonymous file map.\n", - GetCurrentProcessId() ); - return 1; - } - - file_view = MapViewOfFile( file_map, - FILE_MAP_WRITE, - 0, - 0, - 0x1000 ); - - if( !file_view ) { - fprintf( stderr, "%lu: Could not map view of file.\n", - GetCurrentProcessId() ); - if (file_map != INVALID_HANDLE_VALUE) - CloseHandle(file_map); - return 2; - } - - if( !VirtualAlloc( file_view, 0x1000, MEM_COMMIT, PAGE_READWRITE ) ) { - fprintf( stderr, "%lu: VirtualAlloc failed to realize the page.\n", - GetCurrentProcessId() ); - if (file_map != INVALID_HANDLE_VALUE) - CloseHandle(file_map); - return 3; - } - - x = (int *)file_view; - x[0] = 0x12345678; - - if( x[0] != 0x12345678 ) { - fprintf( stderr, "%lu: Can't write to the memory (%08x != 0x12345678)\n", - GetCurrentProcessId(), x[0] ); - return 4; - } - - if( argc == 1 ) { - STARTUPINFO si; - PROCESS_INFORMATION pi; - char cmdline[1000]; - - memset( &si, 0, sizeof( si ) ); - memset( &pi, 0, sizeof( pi ) ); - - sprintf(cmdline,"%s %p", argv[0], file_map); - CloseHandle(file_map); - - if( !CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL, - &si, &pi ) ) { - fprintf( stderr, "%lu: Could not create child process.\n", - GetCurrentProcessId() ); - if (pi.hProcess != INVALID_HANDLE_VALUE) - CloseHandle(pi.hProcess); - - return 5; - } - - if( WaitForSingleObject( pi.hThread, INFINITE ) != WAIT_OBJECT_0 ) { - fprintf( stderr, "%lu: Failed to wait for child process to terminate.\n", - GetCurrentProcessId() ); - if (pi.hProcess != INVALID_HANDLE_VALUE) - CloseHandle(pi.hProcess); - return 6; - } - - if (pi.hProcess != INVALID_HANDLE_VALUE) - CloseHandle(pi.hProcess); - - } - - return 0; -} diff --git a/rostests/tests/map_dup_inherit/map_dup_inherit.rbuild b/rostests/tests/map_dup_inherit/map_dup_inherit.rbuild deleted file mode 100644 index 7f0ec15dbfc..00000000000 --- a/rostests/tests/map_dup_inherit/map_dup_inherit.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - map_dup_inherit.c - diff --git a/rostests/tests/mdi/mdi.c b/rostests/tests/mdi/mdi.c deleted file mode 100644 index d3f2aaf7bea..00000000000 --- a/rostests/tests/mdi/mdi.c +++ /dev/null @@ -1,523 +0,0 @@ -/* - Thanks to theForger from winprog.org -*/ -#include -#include - -#include -#include "resource.h" - -const char g_szClassName[] = "myWindowClass"; -const char g_szChildClassName[] = "myMDIChildWindowClass"; - -#define IDC_MAIN_MDI 101 -#define IDC_MAIN_TOOL 102 -#define IDC_MAIN_STATUS 103 - -#define IDC_CHILD_EDIT 101 - -#define ID_MDI_FIRSTCHILD 50000 - -HWND g_hMDIClient = NULL; -HWND g_hMainWindow = NULL; - -BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR pszFileName) -{ - HANDLE hFile; - BOOL bSuccess = FALSE; - - hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, 0, NULL); - if(hFile != INVALID_HANDLE_VALUE) - { - DWORD dwFileSize; - - dwFileSize = GetFileSize(hFile, NULL); - if(dwFileSize != 0xFFFFFFFF) - { - LPSTR pszFileText; - - pszFileText = GlobalAlloc(GPTR, dwFileSize + 1); - if(pszFileText != NULL) - { - DWORD dwRead; - - if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL)) - { - pszFileText[dwFileSize] = 0; // Add null terminator - if(SetWindowText(hEdit, pszFileText)) - bSuccess = TRUE; // It worked! - } - GlobalFree(pszFileText); - } - } - CloseHandle(hFile); - } - return bSuccess; -} - -BOOL SaveTextFileFromEdit(HWND hEdit, LPCTSTR pszFileName) -{ - HANDLE hFile; - BOOL bSuccess = FALSE; - - hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if(hFile != INVALID_HANDLE_VALUE) - { - DWORD dwTextLength; - - dwTextLength = GetWindowTextLength(hEdit); - // No need to bother if there's no text. - if(dwTextLength > 0) - { - LPSTR pszText; - DWORD dwBufferSize = dwTextLength + 1; - - pszText = GlobalAlloc(GPTR, dwBufferSize); - if(pszText != NULL) - { - if(GetWindowText(hEdit, pszText, dwBufferSize)) - { - DWORD dwWritten; - - if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL)) - bSuccess = TRUE; - } - GlobalFree(pszText); - } - } - CloseHandle(hFile); - } - return bSuccess; -} - -void DoFileOpen(HWND hwnd) -{ - OPENFILENAME ofn; - char szFileName[MAX_PATH] = ""; - - ZeroMemory(&ofn, sizeof(ofn)); - - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = hwnd; - ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"; - ofn.lpstrFile = szFileName; - ofn.nMaxFile = MAX_PATH; - ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; - ofn.lpstrDefExt = "txt"; - - if(GetOpenFileName(&ofn)) - { - HWND hEdit = GetDlgItem(hwnd, IDC_CHILD_EDIT); - if(LoadTextFileToEdit(hEdit, szFileName)) - { - SendDlgItemMessage(g_hMainWindow, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM)"Opened..."); - SendDlgItemMessage(g_hMainWindow, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM)szFileName); - - SetWindowText(hwnd, szFileName); - } - } -} - -void DoFileSave(HWND hwnd) -{ - OPENFILENAME ofn; - char szFileName[MAX_PATH] = ""; - - ZeroMemory(&ofn, sizeof(ofn)); - - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = hwnd; - ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"; - ofn.lpstrFile = szFileName; - ofn.nMaxFile = MAX_PATH; - ofn.lpstrDefExt = "txt"; - ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; - - if(GetSaveFileName(&ofn)) - { - HWND hEdit = GetDlgItem(hwnd, IDC_CHILD_EDIT); - if(SaveTextFileFromEdit(hEdit, szFileName)) - { - SendDlgItemMessage(g_hMainWindow, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM)"Saved..."); - SendDlgItemMessage(g_hMainWindow, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM)szFileName); - - SetWindowText(hwnd, szFileName); - } - } -} - -HWND CreateNewMDIChild(HWND hMDIClient) -{ - MDICREATESTRUCT mcs; - HWND hChild; - - mcs.szTitle = "[Untitled]"; - mcs.szClass = g_szChildClassName; - mcs.hOwner = GetModuleHandle(NULL); - mcs.x = mcs.cx = CW_USEDEFAULT; - mcs.y = mcs.cy = CW_USEDEFAULT; - mcs.style = MDIS_ALLCHILDSTYLES; - - hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs); - if(!hChild) - { - MessageBox(hMDIClient, "MDI Child creation failed.", "Oh Oh...", - MB_ICONEXCLAMATION | MB_OK); - } - return hChild; -} - -LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) - { - case WM_CREATE: - { - HWND hTool; - TBBUTTON tbb[3]; - TBADDBITMAP tbab; - - HWND hStatus; - int statwidths[] = {100, -1}; - - CLIENTCREATESTRUCT ccs; - - // Create MDI Client - - // Find window menu where children will be listed - ccs.hWindowMenu = GetSubMenu(GetMenu(hwnd), 2); - ccs.idFirstChild = ID_MDI_FIRSTCHILD; - - g_hMDIClient = CreateWindowEx(WS_EX_CLIENTEDGE, "mdiclient", NULL, - WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - hwnd, (HMENU)IDC_MAIN_MDI, GetModuleHandle(NULL), (LPVOID)&ccs); - - if(g_hMDIClient == NULL) - MessageBox(hwnd, "Could not create MDI client.", "Error", MB_OK | MB_ICONERROR); - - // Create Toolbar - - hTool = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, - hwnd, (HMENU)IDC_MAIN_TOOL, GetModuleHandle(NULL), NULL); - if(hTool == NULL) - MessageBox(hwnd, "Could not create tool bar.", "Error", MB_OK | MB_ICONERROR); - - // Send the TB_BUTTONSTRUCTSIZE message, which is required for - // backward compatibility. - SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); - - tbab.hInst = HINST_COMMCTRL; - tbab.nID = IDB_STD_SMALL_COLOR; - SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tbab); - - ZeroMemory(tbb, sizeof(tbb)); - tbb[0].iBitmap = STD_FILENEW; - tbb[0].fsState = TBSTATE_ENABLED; - tbb[0].fsStyle = TBSTYLE_BUTTON; - tbb[0].idCommand = ID_FILE_NEW; - - tbb[1].iBitmap = STD_FILEOPEN; - tbb[1].fsState = TBSTATE_ENABLED; - tbb[1].fsStyle = TBSTYLE_BUTTON; - tbb[1].idCommand = ID_FILE_OPEN; - - tbb[2].iBitmap = STD_FILESAVE; - tbb[2].fsState = TBSTATE_ENABLED; - tbb[2].fsStyle = TBSTYLE_BUTTON; - tbb[2].idCommand = ID_FILE_SAVEAS; - - SendMessage(hTool, TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb); - - // Create Status bar - - hStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL, - WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0, - hwnd, (HMENU)IDC_MAIN_STATUS, GetModuleHandle(NULL), NULL); - - SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM)statwidths); - SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Hi there :)"); - } - break; - case WM_SIZE: - { - HWND hTool; - RECT rcTool; - int iToolHeight; - - HWND hStatus; - RECT rcStatus; - int iStatusHeight; - - HWND hMDI; - int iMDIHeight; - RECT rcClient; - - // Size toolbar and get height - - hTool = GetDlgItem(hwnd, IDC_MAIN_TOOL); - SendMessage(hTool, TB_AUTOSIZE, 0, 0); - - GetWindowRect(hTool, &rcTool); - iToolHeight = rcTool.bottom - rcTool.top; - - // Size status bar and get height - - hStatus = GetDlgItem(hwnd, IDC_MAIN_STATUS); - SendMessage(hStatus, WM_SIZE, 0, 0); - - GetWindowRect(hStatus, &rcStatus); - iStatusHeight = rcStatus.bottom - rcStatus.top; - - // Calculate remaining height and size edit - - GetClientRect(hwnd, &rcClient); - - iMDIHeight = rcClient.bottom - iToolHeight - iStatusHeight; - - hMDI = GetDlgItem(hwnd, IDC_MAIN_MDI); - SetWindowPos(hMDI, NULL, 0, iToolHeight, rcClient.right, iMDIHeight, SWP_NOZORDER); - } - break; - case WM_CLOSE: - DestroyWindow(hwnd); - break; - case WM_DESTROY: - PostQuitMessage(0); - break; - case WM_COMMAND: - switch(LOWORD(wParam)) - { - case ID_FILE_EXIT: - PostMessage(hwnd, WM_CLOSE, 0, 0); - break; - case ID_FILE_NEW: - CreateNewMDIChild(g_hMDIClient); - break; - case ID_FILE_OPEN: - { - HWND hChild = CreateNewMDIChild(g_hMDIClient); - if(hChild) - { - DoFileOpen(hChild); - } - } - break; - case ID_FILE_CLOSE: - { - HWND hChild = (HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE,0,0); - if(hChild) - { - SendMessage(hChild, WM_CLOSE, 0, 0); - } - } - break; - case ID_WINDOW_TILE: - SendMessage(g_hMDIClient, WM_MDITILE, 0, 0); - break; - case ID_WINDOW_CASCADE: - SendMessage(g_hMDIClient, WM_MDICASCADE, 0, 0); - break; - default: - { - if(LOWORD(wParam) >= ID_MDI_FIRSTCHILD) - { - DefFrameProc(hwnd, g_hMDIClient, WM_COMMAND, wParam, lParam); - } - else - { - HWND hChild = (HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE,0,0); - if(hChild) - { - SendMessage(hChild, WM_COMMAND, wParam, lParam); - } - } - } - } - break; - default: - return DefFrameProc(hwnd, g_hMDIClient, msg, wParam, lParam); - } - return 0; -} - -LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) - { - case WM_CREATE: - { - HFONT hfDefault; - HWND hEdit; - - // Create Edit Control - - hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", - WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, - 0, 0, 100, 100, hwnd, (HMENU)IDC_CHILD_EDIT, GetModuleHandle(NULL), NULL); - if(hEdit == NULL) - MessageBox(hwnd, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR); - - hfDefault = GetStockObject(DEFAULT_GUI_FONT); - SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0)); - } - break; - case WM_MDIACTIVATE: - { - HMENU hMenu, hFileMenu; - UINT EnableFlag; - - hMenu = GetMenu(g_hMainWindow); - if(hwnd == (HWND)lParam) - { //being activated, enable the menus - EnableFlag = MF_ENABLED; - } - else - { //being de-activated, gray the menus - EnableFlag = MF_GRAYED; - } - - EnableMenuItem(hMenu, 1, MF_BYPOSITION | EnableFlag); - EnableMenuItem(hMenu, 2, MF_BYPOSITION | EnableFlag); - - hFileMenu = GetSubMenu(hMenu, 0); - EnableMenuItem(hFileMenu, ID_FILE_SAVEAS, MF_BYCOMMAND | EnableFlag); - - EnableMenuItem(hFileMenu, ID_FILE_CLOSE, MF_BYCOMMAND | EnableFlag); - EnableMenuItem(hFileMenu, ID_FILE_CLOSEALL, MF_BYCOMMAND | EnableFlag); - - DrawMenuBar(g_hMainWindow); - } - break; - case WM_COMMAND: - switch(LOWORD(wParam)) - { - case ID_FILE_OPEN: - DoFileOpen(hwnd); - break; - case ID_FILE_SAVEAS: - DoFileSave(hwnd); - break; - case ID_EDIT_CUT: - SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_CUT, 0, 0); - break; - case ID_EDIT_COPY: - SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_COPY, 0, 0); - break; - case ID_EDIT_PASTE: - SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_PASTE, 0, 0); - break; - } - break; - case WM_SIZE: - { - HWND hEdit; - RECT rcClient; - - // Calculate remaining height and size edit - - GetClientRect(hwnd, &rcClient); - - hEdit = GetDlgItem(hwnd, IDC_CHILD_EDIT); - SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER); - } - return DefMDIChildProc(hwnd, msg, wParam, lParam); - default: - return DefMDIChildProc(hwnd, msg, wParam, lParam); - - } - return 0; -} - -BOOL SetUpMDIChildWindowClass(HINSTANCE hInstance) -{ - WNDCLASSEX wc; - - wc.cbSize = sizeof(WNDCLASSEX); - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = MDIChildWndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_3DFACE+1); - wc.lpszMenuName = NULL; - wc.lpszClassName = g_szChildClassName; - wc.hIconSm = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - - if(!RegisterClassEx(&wc)) - { - MessageBox(0, "Could Not Register Child Window", "Oh Oh...", - MB_ICONEXCLAMATION | MB_OK); - return FALSE; - } - else - return TRUE; -} - - -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, - LPSTR lpCmdLine, int nCmdShow) -{ - WNDCLASSEX wc; - HWND hwnd; - MSG Msg; - - InitCommonControls(); - - wc.cbSize = sizeof(WNDCLASSEX); - wc.style = 0; - wc.lpfnWndProc = WndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); - wc.lpszMenuName = MAKEINTRESOURCE(IDR_MAINMENU); - wc.lpszClassName = g_szClassName; - wc.hIconSm = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - - if(!RegisterClassEx(&wc)) - { - MessageBox(NULL, "Window Registration Failed!", "Error!", - MB_ICONEXCLAMATION | MB_OK); - return 0; - } - - if(!SetUpMDIChildWindowClass(hInstance)) - return 0; - - hwnd = CreateWindowEx( - 0, - g_szClassName, - "MDI Test Application", - WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, - CW_USEDEFAULT, CW_USEDEFAULT, 480, 320, - NULL, NULL, hInstance, NULL); - - if(hwnd == NULL) - { - MessageBox(NULL, "Window Creation Failed!", "Error!", - MB_ICONEXCLAMATION | MB_OK); - return 0; - } - - g_hMainWindow = hwnd; - - ShowWindow(hwnd, nCmdShow); - UpdateWindow(hwnd); - - while(GetMessage(&Msg, NULL, 0, 0) > 0) - { - if (!TranslateMDISysAccel(g_hMDIClient, &Msg)) - { - TranslateMessage(&Msg); - DispatchMessage(&Msg); - } - } - return Msg.wParam; -} diff --git a/rostests/tests/mdi/mdi.rbuild b/rostests/tests/mdi/mdi.rbuild deleted file mode 100644 index f1ef0757623..00000000000 --- a/rostests/tests/mdi/mdi.rbuild +++ /dev/null @@ -1,11 +0,0 @@ - - - . - kernel32 - user32 - gdi32 - comctl32 - comdlg32 - mdi.c - mdi.rc - diff --git a/rostests/tests/mdi/mdi.rc b/rostests/tests/mdi/mdi.rc deleted file mode 100644 index fa5b4a5416b..00000000000 --- a/rostests/tests/mdi/mdi.rc +++ /dev/null @@ -1,27 +0,0 @@ -#include -#include "resource.h" - -IDR_MAINMENU MENU DISCARDABLE -BEGIN - POPUP "&File" - BEGIN - MENUITEM "&New", ID_FILE_NEW - MENUITEM "&Open...", ID_FILE_OPEN - MENUITEM "Save &As...", ID_FILE_SAVEAS, GRAYED - MENUITEM SEPARATOR - MENUITEM "&Close", ID_FILE_CLOSE, GRAYED - MENUITEM SEPARATOR - MENUITEM "E&xit", ID_FILE_EXIT - END - POPUP "&Edit", GRAYED - BEGIN - MENUITEM "C&ut", ID_EDIT_CUT - MENUITEM "&Copy", ID_EDIT_COPY - MENUITEM "&Paste", ID_EDIT_PASTE - END - POPUP "&Window", GRAYED - BEGIN - MENUITEM "&Tile", ID_WINDOW_TILE - MENUITEM "&Cascade", ID_WINDOW_CASCADE - END -END diff --git a/rostests/tests/mdi/resource.h b/rostests/tests/mdi/resource.h deleted file mode 100644 index 548807bd8d0..00000000000 --- a/rostests/tests/mdi/resource.h +++ /dev/null @@ -1,27 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by app_four.rc -// -#define IDR_MAINMENU 102 -#define ID_FILE_EXIT 40001 -#define ID_FILE_NEW 40002 -#define ID_FILE_OPEN 40003 -#define ID_FILE_SAVEAS 40005 -#define ID_WINDOW_CASCADE 40008 -#define ID_WINDOW_TILE 40009 -#define ID_FILE_CLOSE 40010 -#define ID_FILE_CLOSEALL 40011 -#define ID_EDIT_CUT 40015 -#define ID_EDIT_COPY 40016 -#define ID_EDIT_PASTE 40017 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40020 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/rostests/tests/miditest/miditest.c b/rostests/tests/miditest/miditest.c deleted file mode 100644 index 1310be32569..00000000000 --- a/rostests/tests/miditest/miditest.c +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include -#include - -// WINE's mmsystem.h doesn't seem to define these properly: - -#define MIDIOUTCAPS MIDIOUTCAPSA -#define MIDIINCAPS MIDIINCAPSA -#undef midiOutGetDevCaps -#define midiOutGetDevCaps midiOutGetDevCapsA -#undef midiInGetDevCaps -#define midiInGetDevCaps midiInGetDevCapsA - - -int main() -{ - UINT outs = midiOutGetNumDevs(); -// UINT ins = midiInGetNumDevs(); - - MIDIOUTCAPS outcaps; -// MIDIINCAPS incaps; - - int c; - - printf("MIDI output devices: %d\n", outs); - - for (c = 0; c < outs; c ++) - { - if (midiOutGetDevCaps(c, &outcaps, sizeof(MIDIOUTCAPS)) == MMSYSERR_NOERROR) - printf("Device #%d: %s\n", c, outcaps.szPname); - } - - printf("Opening MIDI output #0\n"); - - HMIDIOUT Handle = NULL; - UINT Result = midiOutOpen(&Handle, 0, 0, 0, CALLBACK_NULL); - printf("Result == %d Handle == %d\n", Result, (int)Handle); - - // play something: - midiOutShortMsg(Handle, 0x007f3090); - -/* - printf("\nMIDI input devices: %d\n", ins); - - for (c = 0; c < ins; c ++) - { - midiInGetDevCaps(c, &incaps, sizeof(incaps)); - printf("Device #%d: %s\n", c, incaps.szPname); - } -*/ - return 0; -} diff --git a/rostests/tests/miditest/miditest.rbuild b/rostests/tests/miditest/miditest.rbuild deleted file mode 100644 index 18bdd93f29b..00000000000 --- a/rostests/tests/miditest/miditest.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - . - kernel32 - user32 - winmm - miditest.c - diff --git a/rostests/tests/miditest/miditest.rc b/rostests/tests/miditest/miditest.rc deleted file mode 100644 index 5174d310d99..00000000000 --- a/rostests/tests/miditest/miditest.rc +++ /dev/null @@ -1,26 +0,0 @@ -#include - -IDR_MAINMENU MENU DISCARDABLE -BEGIN - POPUP "&File" - BEGIN - MENUITEM "&New", ID_FILE_NEW - MENUITEM "&Open...", ID_FILE_OPEN - MENUITEM "Save &As...", ID_FILE_SAVEAS, GRAYED - MENUITEM SEPARATOR - MENUITEM "&Close", ID_FILE_CLOSE, GRAYED - MENUITEM SEPARATOR - MENUITEM "E&xit", ID_FILE_EXIT - END - POPUP "&Edit", GRAYED - BEGIN - MENUITEM "C&ut", ID_EDIT_CUT - MENUITEM "&Copy", ID_EDIT_COPY - MENUITEM "&Paste", ID_EDIT_PASTE - END - POPUP "&Window", GRAYED - BEGIN - MENUITEM "&Tile", ID_WINDOW_TILE - MENUITEM "&Cascade", ID_WINDOW_CASCADE - END -END diff --git a/rostests/tests/mktime/mktime.c b/rostests/tests/mktime/mktime.c deleted file mode 100644 index f5cf40bb2a9..00000000000 --- a/rostests/tests/mktime/mktime.c +++ /dev/null @@ -1,29 +0,0 @@ - -#include -#include - -struct tm time_str; - -char daybuf[20]; - -int main(void) -{ - printf("Testing mktime() by asking\n"); - printf("What day of the week is July 4, 2001?\n"); - - time_str.tm_year = 2001 - 1900; - time_str.tm_mon = 7 - 1; - time_str.tm_mday = 4; - time_str.tm_hour = 0; - time_str.tm_min = 0; - time_str.tm_sec = 1; - time_str.tm_isdst = -1; - if (mktime(&time_str) == -1) - (void)puts("-unknown-"); - else { - (void)strftime(daybuf, sizeof(daybuf), "%A", &time_str); - (void)puts(daybuf); - } - return 0; -} - diff --git a/rostests/tests/mktime/mktime.rbuild b/rostests/tests/mktime/mktime.rbuild deleted file mode 100644 index c257236950d..00000000000 --- a/rostests/tests/mktime/mktime.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - mktime.c - diff --git a/rostests/tests/moztest/moztest.c b/rostests/tests/moztest/moztest.c deleted file mode 100644 index 3680acb7214..00000000000 --- a/rostests/tests/moztest/moztest.c +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Mozilla Test - * Copyright (C) 2004 Filip Navara - */ - -#include -#include - -ULONG DbgPrint(PCH Format,...); - -#undef DBG -#define DBG(x) \ - printf("%s:%i - %s", __FILE__, __LINE__, x); \ - DbgPrint("%s:%i - %s", __FILE__, __LINE__, x); - -int SocketTest() -{ - /* - * A socket pair is often used for interprocess communication, - * so we need to make sure neither socket is associated with - * the I/O completion port; otherwise it can't be used by a - * child process. - * - * The default implementation below cannot be used for NT - * because PR_Accept would have associated the I/O completion - * port with the listening and accepted sockets. - */ - SOCKET listenSock; - SOCKET osfd[2]; - struct sockaddr_in selfAddr, peerAddr; - int addrLen; - WORD wVersionRequested; - WSADATA wsaData; - int err; - - /* - * Initialization. - */ - - wVersionRequested = MAKEWORD( 2, 2 ); - - DBG("Calling WSAStartup\n"); - err = WSAStartup( wVersionRequested, &wsaData ); - if ( err != 0 ) { - /* Tell the user that we could not find a usable */ - /* WinSock DLL. */ - DBG("WSAStartup failed\n"); - return 1; - } - - /* Confirm that the WinSock DLL supports 2.2.*/ - /* Note that if the DLL supports versions greater */ - /* than 2.2 in addition to 2.2, it will still return */ - /* 2.2 in wVersion since that is the version we */ - /* requested. */ - - if ( LOBYTE( wsaData.wVersion ) != 2 || - HIBYTE( wsaData.wVersion ) != 2 ) { - /* Tell the user that we could not find a usable */ - /* WinSock DLL. */ - DBG("WSAStartup version unacceptable\n"); - WSACleanup( ); - return 1; - } - - /* The WinSock DLL is acceptable. Proceed. */ - - DBG("Calling socket\n"); - osfd[0] = osfd[1] = INVALID_SOCKET; - listenSock = socket(AF_INET, SOCK_STREAM, 0); - if (listenSock == INVALID_SOCKET) { - DBG("socket failed\n"); - goto failed; - } - - selfAddr.sin_family = AF_INET; - selfAddr.sin_port = 0; - selfAddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); /* BugZilla: 35408 */ - addrLen = sizeof(selfAddr); - DBG("Calling bind\n"); - if (bind(listenSock, (struct sockaddr *) &selfAddr, - addrLen) == SOCKET_ERROR) { - DBG("bind failed\n"); - goto failed; - } - - DBG("Calling getsockname\n"); - if (getsockname(listenSock, (struct sockaddr *) &selfAddr, - &addrLen) == SOCKET_ERROR) { - DBG("getsockname failed\n"); - goto failed; - } - - DBG("Calling listen\n"); - if (listen(listenSock, 5) == SOCKET_ERROR) { - DBG("listen failed\n"); - goto failed; - } - - DBG("Calling socket\n"); - osfd[0] = socket(AF_INET, SOCK_STREAM, 0); - if (osfd[0] == INVALID_SOCKET) { - DBG("socket failed\n"); - goto failed; - } - selfAddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - - /* - * Only a thread is used to do the connect and accept. - * I am relying on the fact that connect returns - * successfully as soon as the connect request is put - * into the listen queue (but before accept is called). - * This is the behavior of the BSD socket code. If - * connect does not return until accept is called, we - * will need to create another thread to call connect. - */ - DBG("Calling connect\n"); - if (connect(osfd[0], (struct sockaddr *) &selfAddr, - addrLen) == SOCKET_ERROR) { - DBG("connect failed\n"); - goto failed; - } - - /* - * A malicious local process may connect to the listening - * socket, so we need to verify that the accepted connection - * is made from our own socket osfd[0]. - */ - DBG("Calling getsockname\n"); - if (getsockname(osfd[0], (struct sockaddr *) &selfAddr, - &addrLen) == SOCKET_ERROR) { - DBG("getsockname failed\n"); - goto failed; - } - - DBG("Calling accept\n"); - osfd[1] = accept(listenSock, (struct sockaddr *) &peerAddr, &addrLen); - if (osfd[1] == INVALID_SOCKET) { - DBG("accept failed\n"); - goto failed; - } - if (peerAddr.sin_port != selfAddr.sin_port) { - /* the connection we accepted is not from osfd[0] */ - DBG("peerAddr.sin_port != selfAddr.sin_port\n"); - goto failed; - } - - DBG("Hurray!\n"); - - closesocket(listenSock); - - closesocket(osfd[0]); - closesocket(osfd[1]); - - WSACleanup(); - - return 0; - -failed: - if (listenSock != INVALID_SOCKET) { - closesocket(listenSock); - } - if (osfd[0] != INVALID_SOCKET) { - closesocket(osfd[0]); - } - if (osfd[1] != INVALID_SOCKET) { - closesocket(osfd[1]); - } - - WSACleanup(); - - return 1; -} - -int VirtualTest() -{ - DWORD dwErr; - SYSTEM_INFO si; - HANDLE hMap; - PBYTE pBufferStart; - PCHAR pszFileName = "test.txt"; - ULONG dwMaxSize = strlen(pszFileName); - - DBG("Calling CreateFileMappingA\n"); - hMap = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, - PAGE_READWRITE | SEC_RESERVE, 0, dwMaxSize, pszFileName); - if (!hMap) - { - DBG("CreateFileMappingA failed\n"); - return 1; - } - - dwErr = GetLastError(); - DBG("Calling MapViewOfFile\n"); - pBufferStart = (BYTE *)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); - if (!pBufferStart) - { - DBG("MapViewOfFile failed\n"); - return 1; - } - - GetSystemInfo(&si); - - if (dwErr == ERROR_ALREADY_EXISTS) - { - DBG("MapViewOfFile returned ERROR_ALREADY_EXISTS\n"); - DBG("This really shouldn't happen, but it's not fatal.\n"); - UnmapViewOfFile(pBufferStart); - CloseHandle(hMap); - return 1; - } - else - { - DBG("Calling VirtualAlloc\n"); - if (!VirtualAlloc(pBufferStart, si.dwPageSize, MEM_COMMIT, PAGE_READWRITE)) - { - DBG("VirtualAlloc failed\n"); - UnmapViewOfFile(pBufferStart); - CloseHandle(hMap); - return 1; - } - } - - DBG("Hurray!\n"); - - UnmapViewOfFile(pBufferStart); - CloseHandle(hMap); - - return 0; -} - -int main(int argc, char **argv) -{ - if (argc != 2) - { - printf("Usage: %s test_name\n\n", argv[0]); - printf("Valid test names:\n"); - printf("\tsocket\n"); - printf("\tvirtual\n"); - return 0; - } - - if (!stricmp(argv[1], "socket")) - return SocketTest(); - if (!stricmp(argv[1], "virtual")) - return VirtualTest(); - - printf("Test '%s' doesn't exist\n", argv[1]); - - return 0; -} diff --git a/rostests/tests/moztest/moztest.rbuild b/rostests/tests/moztest/moztest.rbuild deleted file mode 100644 index 1c8fee634ba..00000000000 --- a/rostests/tests/moztest/moztest.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - ntdll - ws2_32 - moztest.c - diff --git a/rostests/tests/mstest/msclient.c b/rostests/tests/mstest/msclient.c deleted file mode 100644 index 15551c4a09b..00000000000 --- a/rostests/tests/mstest/msclient.c +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include -#include -#include -#include - -#define BUFSIZE 1024 -#define MAILSLOT_TIMEOUT 1000 - - -int main(int argc, char *argv[]) -{ - HANDLE hMailslot; - LPSTR lpszMailslotName = "\\\\.\\MAILSLOT\\mymailslot"; - LPSTR lpszTestMessage = "Mailslot test message!"; - DWORD cbLength, cbWritten; - - hMailslot = CreateFile(lpszMailslotName, - GENERIC_WRITE, - FILE_SHARE_READ, - (LPSECURITY_ATTRIBUTES)NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - (HANDLE)NULL); - printf("hMailslot %x\n", (DWORD)hMailslot); - if (hMailslot == INVALID_HANDLE_VALUE) - { - printf("CreateFile() failed\n"); - return 0; - } - - cbLength = (ULONG)strlen(lpszTestMessage)+1; - - WriteFile(hMailslot, - lpszTestMessage, - cbLength, - &cbWritten, - NULL); - - CloseHandle(hMailslot); - - return 0; -} - -/* EOF */ - diff --git a/rostests/tests/mstest/msserver.c b/rostests/tests/mstest/msserver.c deleted file mode 100644 index 939c0aa93e9..00000000000 --- a/rostests/tests/mstest/msserver.c +++ /dev/null @@ -1,40 +0,0 @@ - - -#include - - -int main(int argc, char *argv[]) -{ - HANDLE hMailslot; - CHAR chBuf[512]; - BOOL fResult; - DWORD cbRead; - LPTSTR lpszMailslotName = "\\\\.\\mailslot\\mymailslot"; - - hMailslot = CreateMailslot(lpszMailslotName, - 512, - MAILSLOT_WAIT_FOREVER, - NULL); -for (;;) -{ - fResult = ReadFile(hMailslot, - chBuf, - 512, - &cbRead, - NULL); - if (fResult == FALSE) - { - printf("ReadFile() failed!\n"); - CloseHandle(hMailslot); - return 0; - } - - printf("Data read: %s\n", chBuf); -} - - CloseHandle(hMailslot); - - return 0; -} - -/* EOF */ diff --git a/rostests/tests/mstest/mstest.rbuild b/rostests/tests/mstest/mstest.rbuild deleted file mode 100644 index 1c27f59ed8b..00000000000 --- a/rostests/tests/mstest/mstest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - mstest.c - diff --git a/rostests/tests/multithrdwin/multithrdwin.c b/rostests/tests/multithrdwin/multithrdwin.c deleted file mode 100644 index e0f885355c5..00000000000 --- a/rostests/tests/multithrdwin/multithrdwin.c +++ /dev/null @@ -1,238 +0,0 @@ -#include -#include - -ULONG DbgPrint(PCH Format,...); - -typedef struct _THRDCREATEWIN -{ - HANDLE hThread; - DWORD ThreadId; - LPSTR Caption; - HWND *Parent; - HWND Window; - DWORD Style; - POINT Position; - SIZE Size; -} THRDCREATEWIN, *PTHRDCREATEWIN; - -static HINSTANCE hAppInstance; -static HANDLE WinCreatedEvent; -static THRDCREATEWIN wnds[3]; - -LRESULT WINAPI MultiWndProc(HWND, UINT, WPARAM, LPARAM); - -DWORD WINAPI -WindowThreadProc(LPVOID lpParameter) -{ - MSG msg; - char caption[64]; - PTHRDCREATEWIN cw = (PTHRDCREATEWIN)lpParameter; - - sprintf(caption, cw->Caption, GetCurrentThreadId()); - - cw->Window = CreateWindow("MultiClass", - caption, - cw->Style | WS_VISIBLE, - cw->Position.x, - cw->Position.y, - cw->Size.cx, - cw->Size.cy, - (cw->Parent ? *(cw->Parent) : 0), - NULL, - hAppInstance, - NULL); - - SetEvent(WinCreatedEvent); - - if(!cw->Window) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return 1; - } - CreateWindow("BUTTON","Sleep",WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_PUSHBUTTON, 10, 10, 70, 23, cw->Window, (PVOID)1, hAppInstance, NULL); - CreateWindow("BUTTON","1",WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_PUSHBUTTON, 83, 10, 20, 23, cw->Window, (PVOID)2, hAppInstance, NULL); - CreateWindow("BUTTON","2",WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_PUSHBUTTON, 105, 10, 20, 23, cw->Window, (PVOID)3, hAppInstance, NULL); - CreateWindow("BUTTON","3",WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_PUSHBUTTON, 127, 10, 20, 23, cw->Window, (PVOID)4, hAppInstance, NULL); - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return 0; -} - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - int i; - HANDLE Threads[3]; - - hAppInstance = hInstance; - - WinCreatedEvent = CreateEvent(NULL, - FALSE, - FALSE, - NULL); - - if(!WinCreatedEvent) - { - fprintf(stderr, "Failed to create event (last error 0x%lX)\n", - GetLastError()); - return 1; - } - - wc.lpszClassName = "MultiClass"; - wc.lpfnWndProc = MultiWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR) IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR) IDC_ARROW); - wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - wnds[0].Caption = "TopLevel1 (ThreadID: %d)"; - wnds[0].Parent = NULL; - wnds[0].Style = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; - wnds[0].Position.x = wnds[0].Position.y = 0; - wnds[0].Size.cx = 320; - wnds[0].Size.cy = 240; - - wnds[1].Caption = "Child1 of TopLevel1 (ThreadID: %d)"; - wnds[1].Parent = &wnds[0].Window; - wnds[1].Style = WS_CHILD | WS_BORDER | WS_CAPTION | WS_VISIBLE | WS_SYSMENU | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; - wnds[1].Position.x = 20; - wnds[1].Position.y = 120; - wnds[1].Size.cx = wnds[1].Size.cy = 240; - - wnds[2].Caption = "TopLevel2 (ThreadID: %d)"; - wnds[2].Parent = NULL; - wnds[2].Style = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; - wnds[2].Position.x = 400; - wnds[2].Position.y = 0; - wnds[2].Size.cx = 160; - wnds[2].Size.cy = 490; - - for(i = 0; i < (sizeof(wnds) / sizeof(THRDCREATEWIN)); i++) - { - wnds[i].hThread = CreateThread(NULL, - 0, - WindowThreadProc, - &wnds[i], - 0, - &wnds[i].ThreadId); - Threads[i] = wnds[i].hThread; - if(!wnds[i].hThread) - { - fprintf(stderr, "CreateThread #%i failed (last error 0x%lX)\n", - i, GetLastError()); - return 1; - } - WaitForSingleObject(WinCreatedEvent, INFINITE); - } - - WaitForMultipleObjects(sizeof(Threads) / sizeof(HANDLE), &Threads[0], TRUE, INFINITE); - - UnregisterClass("MultiClass", hInstance); - - return 0; -} - -LRESULT CALLBACK MultiWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - RECT Client; - HBRUSH Brush; - DWORD Ret; - - static COLORREF Colors[] = - { - RGB(0x00, 0x00, 0x00), - RGB(0x80, 0x00, 0x00), - RGB(0x00, 0x80, 0x00), - RGB(0x00, 0x00, 0x80), - RGB(0x80, 0x80, 0x00), - RGB(0x80, 0x00, 0x80), - RGB(0x00, 0x80, 0x80), - RGB(0x80, 0x80, 0x80), - RGB(0xff, 0x00, 0x00), - RGB(0x00, 0xff, 0x00), - RGB(0x00, 0x00, 0xff), - RGB(0xff, 0xff, 0x00), - RGB(0xff, 0x00, 0xff), - RGB(0x00, 0xff, 0xff), - RGB(0xff, 0xff, 0xff) - }; - static unsigned CurrentColor = 0; - - switch(msg) - { - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - GetClientRect(hWnd, &Client); - Brush = CreateSolidBrush(Colors[CurrentColor]); - FillRect(hDC, &Client, Brush); - DeleteObject(Brush); - CurrentColor++; - if (sizeof(Colors) / sizeof(Colors[0]) <= CurrentColor) - { - CurrentColor = 0; - } - EndPaint(hWnd, &ps); - break; - - case WM_COMMAND: - switch(LOWORD(wParam)) - { - case 1: - Sleep(20000); - break; - case 2: - case 3: - case 4: - if(SendMessageTimeout(wnds[LOWORD(wParam) - 2].Window, WM_NULL, 0, 0, SMTO_ABORTIFHUNG, 1000, &Ret)) - { - DbgPrint("SendMessageTimeout() OK"); - MessageBox(hWnd, "SendMessageTimeout() OK", NULL, 0); - } - else - { - if(GetLastError() == ERROR_TIMEOUT) - { - DbgPrint("SendMessageTimeout() Timeout"); - MessageBox(hWnd, "SendMessageTimeout() Timeout", NULL, 0); - } - else - { - DbgPrint("SendMessageTimeout() Failed"); - MessageBox(hWnd, "SendMessageTimeout() Failed", NULL, 0); - } - } - break; - } - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - - return 0; -} diff --git a/rostests/tests/multithrdwin/multithrdwin.rbuild b/rostests/tests/multithrdwin/multithrdwin.rbuild deleted file mode 100644 index 2f6bcfa9173..00000000000 --- a/rostests/tests/multithrdwin/multithrdwin.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - kernel32 - user32 - gdi32 - ntdll - multithrdwin.c - diff --git a/rostests/tests/multiwin/multiwin.c b/rostests/tests/multiwin/multiwin.c deleted file mode 100644 index 73f8f672cef..00000000000 --- a/rostests/tests/multiwin/multiwin.c +++ /dev/null @@ -1,147 +0,0 @@ -#include -#include - -static UINT WindowCount; -LRESULT WINAPI MultiWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd1; - HWND hWnd2; - HWND hWndChild; - - wc.lpszClassName = "MultiClass"; - wc.lpfnWndProc = MultiWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR) IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR) IDC_ARROW); - wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd1 = CreateWindow("MultiClass", - "TopLevel1", - WS_OVERLAPPEDWINDOW, - 0, - 0, - 320, - 240, - NULL, - NULL, - hInstance, - NULL); - - hWndChild = CreateWindow("MultiClass", - "Child1 of TopLevel1", - WS_CHILD | WS_BORDER | WS_CAPTION | WS_VISIBLE | WS_SYSMENU, - 20, - 120, - 200, - 200, - hWnd1, - NULL, - hInstance, - NULL); - - hWnd2 = CreateWindow("MultiClass", - "TopLevel2", - WS_OVERLAPPEDWINDOW, - 400, - 0, - 160, - 490, - NULL, - NULL, - hInstance, - NULL); - - if (! hWnd1 || ! hWnd2 || ! hWndChild) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - WindowCount = 2; - - ShowWindow(hWnd1, SW_NORMAL); - ShowWindow(hWnd2, SW_NORMAL); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - return msg.wParam; -} - -LRESULT CALLBACK MultiWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - LONG Style; - RECT Client; - HBRUSH Brush; - static COLORREF Colors[] = - { - RGB(0x00, 0x00, 0x00), - RGB(0x80, 0x00, 0x00), - RGB(0x00, 0x80, 0x00), - RGB(0x00, 0x00, 0x80), - RGB(0x80, 0x80, 0x00), - RGB(0x80, 0x00, 0x80), - RGB(0x00, 0x80, 0x80), - RGB(0x80, 0x80, 0x80), - RGB(0xff, 0x00, 0x00), - RGB(0x00, 0xff, 0x00), - RGB(0x00, 0x00, 0xff), - RGB(0xff, 0xff, 0x00), - RGB(0xff, 0x00, 0xff), - RGB(0x00, 0xff, 0xff), - RGB(0xff, 0xff, 0xff) - }; - static unsigned CurrentColor = 0; - - switch(msg) - { - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - GetClientRect(hWnd, &Client); - Brush = CreateSolidBrush(Colors[CurrentColor]); - FillRect(hDC, &Client, Brush); - DeleteObject(Brush); - CurrentColor++; - if (sizeof(Colors) / sizeof(Colors[0]) <= CurrentColor) - { - CurrentColor = 0; - } - EndPaint(hWnd, &ps); - break; - - case WM_DESTROY: - Style = GetWindowLong(hWnd, GWL_STYLE); - if (0 == (Style & WS_CHILD) && 0 == --WindowCount) - { - PostQuitMessage(0); - } - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - - return 0; -} diff --git a/rostests/tests/multiwin/multiwin.rbuild b/rostests/tests/multiwin/multiwin.rbuild deleted file mode 100644 index 355f8860180..00000000000 --- a/rostests/tests/multiwin/multiwin.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - multiwin.c - diff --git a/rostests/tests/mutex/mutex.c b/rostests/tests/mutex/mutex.c deleted file mode 100644 index c6d6afddad1..00000000000 --- a/rostests/tests/mutex/mutex.c +++ /dev/null @@ -1,121 +0,0 @@ -#include -#include -#include - - -HANDLE OutputHandle; -HANDLE InputHandle; - -HANDLE hThread[2]; -DWORD dwCounter = 0; -HANDLE hMutex; - - -void dprintf(char* fmt, ...) -{ - va_list args; - char buffer[255]; - - va_start(args,fmt); - vsprintf(buffer,fmt,args); - WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL); - va_end(args); -} - - -DWORD WINAPI thread1(LPVOID crap) -{ - DWORD dwError = 0; - DWORD i; - - dprintf("Thread 1 running!\n"); - - for (i = 0; i < 10; i++) - { - dwError = WaitForSingleObject(hMutex, INFINITE); - if (dwError == WAIT_FAILED) - { - dprintf("Thread2: WaitForSingleObject failed!\n"); - return 1; - } - else if (dwError == WAIT_ABANDONED_0) - { - dprintf("Thread2: WaitForSingleObject returned WAIT_ABANDONED_0\n"); - } - - dprintf("Thread1: dwCounter : %lu -->", dwCounter); - dwCounter++; - dprintf(" %lu\n", dwCounter); - ReleaseMutex(hMutex); - } - - dprintf("Thread 1 done!\n"); - - return 1; -} - -DWORD WINAPI thread2(LPVOID crap) -{ - DWORD dwError = 0; - DWORD i; - dprintf("Thread 2 running!\n"); - - for (i = 0; i < 10; i++) - { - dwError = WaitForSingleObject(hMutex, INFINITE); - if (dwError == WAIT_FAILED) - { - dprintf("Thread2: WaitForSingleObject failed!\n"); - return 1; - } - else if (dwError == WAIT_ABANDONED_0) - { - dprintf("Thread2: WaitForSingleObject returned WAIT_ABANDONED_0\n"); - } - - dprintf("Thread2: dwCounter : %lu -->", dwCounter); - dwCounter++; - dprintf(" %lu\n", dwCounter); - ReleaseMutex(hMutex); - } - - dprintf("Thread 2 done!\n"); - - return 1; -} - - -int main(int argc, char* argv[]) -{ - DWORD dwError; - DWORD id1,id2; - - AllocConsole(); - InputHandle = GetStdHandle(STD_INPUT_HANDLE); - OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE); - - dprintf("Calling CreateMutex()\n"); - hMutex = CreateMutexW(NULL, FALSE, L"TestMutex"); - if (hMutex == INVALID_HANDLE_VALUE) - { - dprintf("CreateMutex() failed! Error: %lu\n", GetLastError()); - return 0; - } - dprintf("CreateMutex() succeeded!\n"); - - hThread[0] = CreateThread(0, 0, thread1, 0, 0, &id1); - hThread[1] = CreateThread(0, 0, thread2, 0, 0, &id2); - - dprintf("Calling WaitForMultipleObject()\n"); - dwError = WaitForMultipleObjects(2, hThread, TRUE, INFINITE); - dprintf("WaitForMultipleObject() Error: %lu\n", dwError); - - CloseHandle(hThread[0]); - CloseHandle(hThread[1]); - - CloseHandle(hMutex); - - dprintf("Main thread done!\n"); - - return 0; -} diff --git a/rostests/tests/mutex/mutex.rbuild b/rostests/tests/mutex/mutex.rbuild deleted file mode 100644 index 1000ad3dce8..00000000000 --- a/rostests/tests/mutex/mutex.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - mutex.c - diff --git a/rostests/tests/nameserverlist/nameserverlist.c b/rostests/tests/nameserverlist/nameserverlist.c deleted file mode 100644 index 2f7f9238072..00000000000 --- a/rostests/tests/nameserverlist/nameserverlist.c +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include -#include - -int main( int argc, char **argv ) { - ULONG OutBufLen = 0; - PFIXED_INFO pFixedInfo; - PIP_ADDR_STRING Addr; - - GetNetworkParams(NULL, &OutBufLen); - pFixedInfo = malloc(OutBufLen); - if (!pFixedInfo) { - printf( "Failed to alloc %d bytes.\n", (int)OutBufLen ); - return 1; - } - - printf( "%d Bytes allocated\n", (int)OutBufLen ); - - GetNetworkParams(pFixedInfo,&OutBufLen); - - for( Addr = &pFixedInfo->DnsServerList; - Addr; - Addr = Addr->Next ) { - printf( "%c%s\n", - Addr == pFixedInfo->CurrentDnsServer ? '*' : ' ', - Addr->IpAddress.String ); - } - - free( pFixedInfo ); - return 0; -} diff --git a/rostests/tests/nameserverlist/nameserverlist.rbuild b/rostests/tests/nameserverlist/nameserverlist.rbuild deleted file mode 100644 index 49323bd46a1..00000000000 --- a/rostests/tests/nameserverlist/nameserverlist.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - iphlpapi - nameserverlist.c - diff --git a/rostests/tests/noexecute/noexecute.c b/rostests/tests/noexecute/noexecute.c deleted file mode 100644 index 8cc997795e3..00000000000 --- a/rostests/tests/noexecute/noexecute.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * $Id$ - */ - -#include -#include -#include -#include - -#include - -int test(int x) -{ - return x+1; -} - -void execute(char* message, int(*func)(int)) -{ - ULONG status = 0; - ULONG result; - - printf("%s ... ", message); - - _SEH_TRY - { - result = func(1); - } - _SEH_HANDLE - { - status = _SEH_GetExceptionCode(); - } - _SEH_END; - if (status == 0) - { - printf("OK.\n"); - } - else - { - printf("Error, status=%lx.\n", status); - } -} - -char data[100]; - -int main(void) -{ - unsigned char stack[100]; - void* heap; - ULONG protection; - - printf("NoExecute\n"); - - execute("Executing within the code segment", test); - memcpy(data, test, 100); - execute("Executing within the data segment", (int(*)(int))data); - memcpy(stack, test, 100); - execute("Executing on stack segment", (int(*)(int))stack); - heap = VirtualAlloc(NULL, 100, MEM_COMMIT, PAGE_READWRITE); - memcpy(heap, test, 100); - execute("Executing on the heap with protection PAGE_READWRITE", (int(*)(int))heap); - VirtualProtect(heap, 100, PAGE_EXECUTE, &protection); - execute("Executing on the heap with protection PAGE_EXECUTE", (int(*)(int))heap); - - return 0; -} diff --git a/rostests/tests/noexecute/noexecute.rbuild b/rostests/tests/noexecute/noexecute.rbuild deleted file mode 100644 index 1cdee3b21f5..00000000000 --- a/rostests/tests/noexecute/noexecute.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - pseh - kernel32 - user32 - noexecute.c - diff --git a/rostests/tests/nptest/npclient.c b/rostests/tests/nptest/npclient.c deleted file mode 100644 index 6d93f3a1acd..00000000000 --- a/rostests/tests/nptest/npclient.c +++ /dev/null @@ -1,100 +0,0 @@ -#include - -VOID MyErrExit(LPTSTR Message) -{ -// MessageBox(NULL, Message, NULL, MB_OK); - puts(Message); - ExitProcess(0); -} - -int main(int argc, char *argv[]) -{ - HANDLE hPipe; - LPVOID lpvMessage; - CHAR chBuf[512]; - BOOL fSuccess; - DWORD cbRead, cbWritten, dwMode; - LPTSTR lpszPipename = "\\\\.\\pipe\\mynamedpipe"; - -// Try to open a named pipe; wait for it, if necessary. - - while (1) - { - hPipe = CreateFile( - lpszPipename, // pipe name - GENERIC_READ | // read and write access - GENERIC_WRITE, - 0, // no sharing - NULL, // no security attributes - OPEN_EXISTING, // opens existing pipe - 0, // default attributes - NULL); // no template file - - // Break if the pipe handle is valid. - - if (hPipe != INVALID_HANDLE_VALUE) - break; - - // Exit if an error other than ERROR_PIPE_BUSY occurs. - - if (GetLastError() != ERROR_PIPE_BUSY) - MyErrExit("Could not open pipe"); - - // All pipe instances are busy, so wait for 20 seconds. - - if (! WaitNamedPipe(lpszPipename, 20000) ) - MyErrExit("Could not open pipe"); - } - -// The pipe connected; change to message-read mode. - - dwMode = PIPE_READMODE_MESSAGE; - fSuccess = SetNamedPipeHandleState( - hPipe, // pipe handle - &dwMode, // new pipe mode - NULL, // don't set maximum bytes - NULL); // don't set maximum time - if (!fSuccess) - MyErrExit("SetNamedPipeHandleState"); - -// Send a message to the pipe server. - - lpvMessage = (argc > 1) ? argv[1] : "default message"; - - fSuccess = WriteFile( - hPipe, // pipe handle - lpvMessage, // message - strlen(lpvMessage) + 1, // message length - &cbWritten, // bytes written - NULL); // not overlapped - if (! fSuccess) - MyErrExit("WriteFile"); - - do - { - // Read from the pipe. - - fSuccess = ReadFile( - hPipe, // pipe handle - chBuf, // buffer to receive reply - 512, // size of buffer - &cbRead, // number of bytes read - NULL); // not overlapped - - if (! fSuccess && GetLastError() != ERROR_MORE_DATA) - break; - - // Reply from the pipe is written to STDOUT. - - if (! WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), - chBuf, cbRead, &cbWritten, NULL)) - { - break; - } - - } while (! fSuccess); // repeat loop if ERROR_MORE_DATA - - CloseHandle(hPipe); - - return 0; -} diff --git a/rostests/tests/nptest/npserver.c b/rostests/tests/nptest/npserver.c deleted file mode 100644 index 70ed6d5a2a2..00000000000 --- a/rostests/tests/nptest/npserver.c +++ /dev/null @@ -1,120 +0,0 @@ -#include -#include -#include -#include -#include - -#define BUFSIZE 1024 -#define PIPE_TIMEOUT 1000 - -VOID InstanceThread (LPVOID); - -VOID -GetAnswerToRequest(LPTSTR lpRequest, - LPTSTR lpReply, - LPDWORD lpcbReplyBytes) -{ -} - -VOID MyErrExit(LPTSTR Message) -{ -// MessageBox(NULL, Message, NULL, MB_OK); - puts(Message); - ExitProcess(0); -} - - - - -int xx = 0; - -int main(int argc, char *argv[]) -{ - BOOL fConnected; - DWORD dwThreadId; - HANDLE hPipe, hThread; - LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\mynamedpipe"); - -// for (;;) -// { - hPipe = CreateNamedPipe(lpszPipename, - PIPE_ACCESS_DUPLEX, - PIPE_TYPE_MESSAGE | - PIPE_READMODE_MESSAGE | - PIPE_WAIT, - PIPE_UNLIMITED_INSTANCES, - BUFSIZE, - BUFSIZE, - PIPE_TIMEOUT, - NULL); - if (hPipe == INVALID_HANDLE_VALUE) - { - printf("CreateNamedPipe() failed\n"); - return 0; - } - - fConnected = ConnectNamedPipe(hPipe, - NULL) ? TRUE : (GetLastError () == - ERROR_PIPE_CONNECTED); - if (fConnected) - { - printf("Pipe connected!\n"); - - DisconnectNamedPipe(hPipe); - -#if 0 - hThread = CreateThread(NULL, - 0, - (LPTHREAD_START_ROUTINE) InstanceThread, - (LPVOID) hPipe, - 0, - &dwThreadId); - if (hThread == NULL) - MyErrExit("CreateThread"); -#endif - } - else - { -// CloseHandle(hPipe); - } -// } - - CloseHandle(hPipe); - - return 0; -} - -VOID InstanceThread (LPVOID lpvParam) -{ - CHAR chRequest[BUFSIZE]; - CHAR chReply[BUFSIZE]; - DWORD cbBytesRead, cbReplyBytes, cbWritten; - BOOL fSuccess; - HANDLE hPipe; - - hPipe = (HANDLE)lpvParam; - while (1) - { - fSuccess = ReadFile(hPipe, - chRequest, - BUFSIZE, - &cbBytesRead, - NULL); - if (!fSuccess || cbBytesRead == 0) - break; - - GetAnswerToRequest(chRequest, chReply, &cbReplyBytes); - - fSuccess = WriteFile(hPipe, - chReply, - cbReplyBytes, - &cbWritten, - NULL); - if (!fSuccess || cbReplyBytes != cbWritten) - break; - } - - FlushFileBuffers(hPipe); - DisconnectNamedPipe(hPipe); - CloseHandle(hPipe); -} diff --git a/rostests/tests/nptest/nptest.rbuild b/rostests/tests/nptest/nptest.rbuild deleted file mode 100644 index 84d3318fd65..00000000000 --- a/rostests/tests/nptest/nptest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - nptest.c - diff --git a/rostests/tests/oskittcp/cmd_oskit.py b/rostests/tests/oskittcp/cmd_oskit.py deleted file mode 100644 index e1fac177519..00000000000 --- a/rostests/tests/oskittcp/cmd_oskit.py +++ /dev/null @@ -1,10 +0,0 @@ -from socket import * -import sys - -s = socket(AF_INET,SOCK_DGRAM,0) -s.connect(('localhost',5001)) - -while 1: - sys.stdout.write('>> ') - line = sys.stdin.readline() - s.send('CMD ' + line) \ No newline at end of file diff --git a/rostests/tests/oskittcp/oskittcp.rbuild b/rostests/tests/oskittcp/oskittcp.rbuild deleted file mode 100644 index 8ec4cd64970..00000000000 --- a/rostests/tests/oskittcp/oskittcp.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - tcptest.cpp - diff --git a/rostests/tests/oskittcp/tcptest.cpp b/rostests/tests/oskittcp/tcptest.cpp deleted file mode 100644 index e1985a41b6f..00000000000 --- a/rostests/tests/oskittcp/tcptest.cpp +++ /dev/null @@ -1,380 +0,0 @@ -#ifdef _MSC_VER -#pragma warning ( disable : 4786 ) -#endif//_MSC_VER - -#include -#include -#include -#include -extern "C" { - typedef unsigned short u_short; -#include -#include -#include -#ifndef _MSC_VER -#include -#endif//_MSC_VER -}; - -unsigned char hwaddr[6] = { 0x08, 0x00, 0x20, 0x0b, 0xb7, 0xbb }; - -#undef malloc -#undef free - -unsigned long TCP_IPIdentification; - -#define MAX_DG_SIZE 0x10000 -#define TI_DbgPrint(x,y) printf y - -std::list output_packets; - -typedef struct _CONNECTION_ENDPOINT { - OSK_UINT State; -} CONNECTION_ENDPOINT, *PCONNECTION_ENDPOINT; - -extern "C" int is_stack_ptr ( const void* p ) -{ - MEMORY_BASIC_INFORMATION mbi1, mbi2; - VirtualQuery ( p, &mbi1, sizeof(mbi1) ); - VirtualQuery ( _alloca(1), &mbi2, sizeof(mbi2) ); - return mbi1.AllocationBase == mbi2.AllocationBase; -} - -int TCPSocketState(void *ClientData, - void *WhichSocket, - void *WhichConnection, - OSK_UINT NewState ) { - PCONNECTION_ENDPOINT Connection = (PCONNECTION_ENDPOINT)WhichConnection; - //PLIST_ENTRY Entry; - - TI_DbgPrint(MID_TRACE,("Called: NewState %x\n", NewState)); - - if( !Connection ) { - TI_DbgPrint(MID_TRACE,("Socket closing.\n")); - return 0; - } - - if( (NewState & SEL_CONNECT) && - !(Connection->State & SEL_CONNECT) ) { - } else if( (NewState & SEL_READ) || (NewState & SEL_FIN) ) { - } - - return 0; -} - -#define STRINGIFY(x) #x - -char hdr[14] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00 }; - -int TCPPacketSend(void *ClientData, OSK_PCHAR data, OSK_UINT len ) { - output_packets.push_back( std::string( hdr, 14 ) + - std::string( (char *)data, (int)len ) ); - return 0; -} - -struct ifaddr *TCPFindInterface( void *ClientData, - OSK_UINT AddrType, - OSK_UINT FindType, - struct sockaddr *ReqAddr ) { - static struct sockaddr_in ifa = { AF_INET }, nm = { AF_INET }; - static struct ifaddr a = { - (struct sockaddr *)&ifa, - NULL, - (struct sockaddr *)&nm, - 0, - 0, - 1, - 1500 - }; - ifa.sin_addr.s_addr = inet_addr( "10.10.2.115" ); - nm.sin_addr.s_addr = inet_addr( "255.255.255.0" ); - return &a; -} - -void *TCPMalloc( void *ClientData, - OSK_UINT Bytes, OSK_PCHAR File, OSK_UINT Line ) { - void *v = malloc( Bytes ); - fprintf( stderr, "(%s:%d) malloc( %d ) => %x\n", File, Line, Bytes, v ); - return v; -} - -void TCPFree( void *ClientData, - void *data, OSK_PCHAR File, OSK_UINT Line ) { - fprintf( stderr, "(%s:%d) free( %x )\n", File, Line, data ); - free( data ); -} - -int TCPSleep( void *ClientData, void *token, int priority, char *msg, - int tmio ) { -#if 0 - PSLEEPING_THREAD SleepingThread; - - TI_DbgPrint(MID_TRACE, - ("Called TSLEEP: tok = %x, pri = %d, wmesg = %s, tmio = %x\n", - token, priority, msg, tmio)); - - SleepingThread = ExAllocatePool( NonPagedPool, sizeof( *SleepingThread ) ); - if( SleepingThread ) { - KeInitializeEvent( &SleepingThread->Event, NotificationEvent, FALSE ); - SleepingThread->SleepToken = token; - - ExAcquireFastMutex( &SleepingThreadsLock ); - InsertTailList( &SleepingThreadsList, &SleepingThread->Entry ); - ExReleaseFastMutex( &SleepingThreadsLock ); - - TI_DbgPrint(MID_TRACE,("Waiting on %x\n", token)); - KeWaitForSingleObject( &SleepingThread->Event, - WrSuspended, - KernelMode, - TRUE, - NULL ); - - ExAcquireFastMutex( &SleepingThreadsLock ); - RemoveEntryList( &SleepingThread->Entry ); - ExReleaseFastMutex( &SleepingThreadsLock ); - - ExFreePool( SleepingThread ); - } - TI_DbgPrint(MID_TRACE,("Waiting finished: %x\n", token)); -#endif - return 0; -} - -void TCPWakeup( void *ClientData, void *token ) { -#if 0 - PLIST_ENTRY Entry; - PSLEEPING_THREAD SleepingThread; - - ExAcquireFastMutex( &SleepingThreadsLock ); - Entry = SleepingThreadsList.Flink; - while( Entry != &SleepingThreadsList ) { - SleepingThread = CONTAINING_RECORD(Entry, SLEEPING_THREAD, Entry); - TI_DbgPrint(MID_TRACE,("Sleeper @ %x\n", SleepingThread)); - if( SleepingThread->SleepToken == token ) { - TI_DbgPrint(MID_TRACE,("Setting event to wake %x\n", token)); - KeSetEvent( &SleepingThread->Event, IO_NETWORK_INCREMENT, FALSE ); - } - Entry = Entry->Flink; - } - ExReleaseFastMutex( &SleepingThreadsLock ); -#endif -} - -OSKITTCP_EVENT_HANDLERS EventHandlers = { - NULL, - TCPSocketState, - TCPPacketSend, - TCPFindInterface, - TCPMalloc, - TCPFree, - TCPSleep, - TCPWakeup -}; - -void display_row( char *data, int off, int len ) { - int i; - - printf( "%08x:", off ); - for( i = off; i < len && i < off + 16; i++ ) { - printf( " %02x", data[i] & 0xff ); - } - - printf( " -- " ); - - for( i = off; i < len && i < off + 16; i++ ) { - printf( "%c", (data[i] >= ' ') ? data[i] : '.' ); - } - - printf( "\n" ); -} - -int main( int argc, char **argv ) { - int asock = INVALID_SOCKET, selret, dgrecv, fromsize, err, port = 5001; - char datagram[MAX_DG_SIZE]; - void *conn = 0; - struct fd_set readf; - struct timeval tv; - struct sockaddr_in addr_from = { AF_INET }, addr_to = { AF_INET }; - std::list::iterator i; - WSADATA wsadata; - - WSAStartup( 0x101, &wsadata ); - - if( argc > 1 ) port = atoi(argv[1]); - - RegisterOskitTCPEventHandlers( &EventHandlers ); - InitOskitTCP(); - - asock = socket( AF_INET, SOCK_DGRAM, 0 ); - - addr_from.sin_port = htons( port ); - - if( bind( asock, (struct sockaddr *)&addr_from, sizeof( addr_from ) ) ) { - printf( "Bind error\n" ); - return 0; - } - - addr_to.sin_port = htons( port & (~1) ); - addr_to.sin_addr.s_addr = inet_addr("127.0.0.1"); - - while( true ) { - FD_ZERO( &readf ); - FD_SET( asock, &readf ); - tv.tv_sec = 0; - tv.tv_usec = 10000; - selret = select( asock + 1, &readf, NULL, NULL, &tv ); - - if( FD_ISSET( asock, &readf ) ) { - fromsize = sizeof( addr_from ); - dgrecv = recvfrom( asock, datagram, sizeof(datagram), 0, - (struct sockaddr *)&addr_from, &fromsize ); - - if( datagram[0] == 'C' && datagram[1] == 'M' && - datagram[2] == 'D' && datagram[3] == ' ' ) { - int theport, bytes, /*recvret,*/ off, bytin; - struct sockaddr_in nam; - std::string faddr, word; - std::istringstream - cmdin( std::string( datagram + 4, dgrecv - 4 ) ); - - cmdin >> word; - - if( word == "socket" ) { - cmdin >> faddr >> theport; - - nam.sin_family = AF_INET; - nam.sin_addr.s_addr = inet_addr(faddr.c_str()); - nam.sin_port = htons(theport); - - if( (err = OskitTCPSocket( NULL, &conn, AF_INET, - SOCK_STREAM, 0 )) != 0 ) { - fprintf( stderr, "OskitTCPSocket: error %d\n", err ); - } - - if( (err = OskitTCPConnect( conn, NULL, &nam, - sizeof(nam) )) != 0 ) { - fprintf( stderr, "OskitTCPConnect: error %d\n", err ); - } else { - printf( "Socket created\n" ); - } - } - - /* The rest of the commands apply only to an open socket */ - if( !conn ) continue; - - if( word == "recv" ) { - cmdin >> bytes; - - if( (err = OskitTCPRecv( conn, (OSK_PCHAR)datagram, - sizeof(datagram), - (unsigned int *)&bytin, 0 )) != 0 ) { - fprintf( stderr, "OskitTCPRecv: error %d\n", err ); - } else { - for( off = 0; off < bytin; off += 16 ) { - display_row( datagram, off, bytin ); - } - printf( "\n" ); - } - } else if ( word == "type" ) { - std::string therest = &cmdin.str()[word.size()]; - char* p = &therest[0]; - p += strspn ( p, " \t" ); - char* src = p; - char* dst = p; - while ( *src ) - { - char c = *src++; - if ( c == '\r' || c == '\n' ) break; - if ( c == '\\' ) - { - c = *src++; - switch ( c ) - { - case 'b': c = '\b'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - case 'v': c = '\v'; break; - } - } - *dst++ = c; - } - *dst = '\0'; - if ( (err = OskitTCPSend ( conn, (OSK_PCHAR)p, strlen(p), (OSK_UINT*)&bytin, 0 )) - != 0 ) { - fprintf ( stderr, "OskitTCPConnect: error %d\n", err ); - } else { - printf ( "wrote %d bytes\n", bytin ); - } - } else if( word == "send" ) { - off = 0; - while( cmdin >> word ) { - datagram[off++] = - atoi( (std::string("0x") + word).c_str() ); - } - - if( (err = OskitTCPSend( conn, (OSK_PCHAR)datagram, - off, (OSK_UINT *)&bytin, 0 )) - != 0 ) { - fprintf( stderr, "OskitTCPConnect: error %d\n", err ); - } else { - printf( "wrote %d bytes\n", bytin ); - } - } else if( word == "close" ) { - OskitTCPClose( conn ); - conn = NULL; - } - } else if( dgrecv > 14 ) { - addr_to = addr_from; - - if( datagram[12] == 8 && datagram[13] == 6 ) { - /* Answer arp query */ - char laddr[4]; - /* Mark patch as to the previous sender */ - memcpy( datagram + 32, datagram + 6, 6 ); - memcpy( datagram, datagram + 6, 6 ); - /* Mark packet as from us */ - memcpy( datagram + 22, hwaddr, 6 ); - memcpy( datagram + 6, hwaddr, 6 ); - /* Swap inet addresses */ - memcpy( laddr, datagram + 28, 4 ); - memcpy( datagram + 28, datagram + 38, 4 ); - memcpy( datagram + 38, laddr, 4 ); - /* Set reply opcode */ - datagram[21] = 2; - - err = sendto( asock, datagram, dgrecv, 0, - (struct sockaddr *)&addr_to, - sizeof(addr_to) ); - - if( err != 0 ) - printf( "sendto: %d\n", err ); - } else { - memcpy( hdr, datagram + 6, 6 ); - memcpy( hdr + 6, datagram, 6 ); - memcpy( hdr + 12, datagram + 12, 2 ); - OskitTCPReceiveDatagram - ( (unsigned char *)datagram + 14, - dgrecv - 14, 20 ); - } - } - } - - TimerOskitTCP(); - - for( i = output_packets.begin(); i != output_packets.end(); i++ ) { - err = sendto( asock, i->c_str(), i->size(), 0, - (struct sockaddr *)&addr_to, sizeof(addr_to) ); - - fprintf( stderr, "** SENDING PACKET %d bytes **\n", i->size() ); - - if( err != 0 ) - printf( "sendto: %d\n", err ); - } - - output_packets.clear(); - } -} - diff --git a/rostests/tests/oskittcp/tcptest.dsp b/rostests/tests/oskittcp/tcptest.dsp deleted file mode 100644 index fd5f9039a4e..00000000000 --- a/rostests/tests/oskittcp/tcptest.dsp +++ /dev/null @@ -1,434 +0,0 @@ -# Microsoft Developer Studio Project File - Name="tcptest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tcptest - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "tcptest.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "tcptest.mak" CFG="tcptest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tcptest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tcptest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tcptest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tcptest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../drivers/lib/oskittcp/include" /I "../../../drivers\lib\oskittcp\include\freebsd\src\sys" /I "../../../drivers\lib\oskittcp\include\freebsd\dev\include" /I "../../../drivers\lib\oskittcp\include\freebsd\net\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "KERNEL" /D __REACTOS__=1 /D "FREEZAP" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tcptest - Win32 Release" -# Name "tcptest - Win32 Debug" -# Begin Group "tcptest" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\tcptest.cpp - -!IF "$(CFG)" == "tcptest - Win32 Release" - -!ELSEIF "$(CFG)" == "tcptest - Win32 Debug" - -# SUBTRACT CPP /D "KERNEL" - -!ENDIF - -# End Source File -# End Group -# Begin Group "oskittcp" - -# PROP Default_Filter "" -# Begin Group "src" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\defaults.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\in.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\in_cksum.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\in_pcb.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\in_proto.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\in_rmx.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\inet_ntoa.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\interface.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\ip_input.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\ip_output.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\kern_clock.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\kern_subr.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\param.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\radix.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\random.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\raw_cb.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\raw_ip.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\raw_usrreq.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\route.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\rtsock.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\scanc.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\sleep.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\tcp_debug.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\tcp_input.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\tcp_output.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\tcp_subr.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\tcp_timer.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\tcp_usrreq.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\uipc_domain.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\uipc_mbuf.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\uipc_socket.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\oskittcp\uipc_socket2.c -# End Source File -# End Group -# Begin Group "include" - -# PROP Default_Filter "" -# Begin Group "freebsd" - -# PROP Default_Filter "" -# Begin Group "src No. 1" - -# PROP Default_Filter "" -# Begin Group "sys" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\buf.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\callout.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\cdefs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\domain.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\errno.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\fcntl.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\file.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\filedesc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\filio.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\ioccom.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\ioctl.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\kernel.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\libkern.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\malloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\mbuf.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\param.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\proc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\protosw.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\queue.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\resource.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\resourcevar.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\rtprio.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\select.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\signal.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\signalvar.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\socket.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\socketvar.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\sockio.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\stat.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\sysctl.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\syslimits.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\syslog.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\systm.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\time.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\ttycom.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\types.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\ucred.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\uio.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\freebsd\src\sys\sys\unistd.h -# End Source File -# End Group -# End Group -# End Group -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\memtrack.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\oskitdebug.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\oskiterrno.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\oskitfreebsd.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\oskittcp.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\drivers\lib\oskittcp\include\oskittypes.h -# End Source File -# End Group -# End Group -# End Target -# End Project diff --git a/rostests/tests/oskittcp/tcptest.dsw b/rostests/tests/oskittcp/tcptest.dsw deleted file mode 100644 index a00140eb137..00000000000 --- a/rostests/tests/oskittcp/tcptest.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "tcptest"=.\tcptest.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/rostests/tests/p_dup_handle/p_dup_handle.c b/rostests/tests/p_dup_handle/p_dup_handle.c deleted file mode 100644 index 6aa5f7d1c05..00000000000 --- a/rostests/tests/p_dup_handle/p_dup_handle.c +++ /dev/null @@ -1,69 +0,0 @@ -#include -#include -#include -#include - -/* This tests the ability of the target win32 to duplicate a process handle, - * spawn a child, and have the child dup it's own handle back into the parent - * using the duplicated handle. - */ - -int main( int argc, char **argv ) { - HANDLE h_process; - HANDLE h_process_in_parent; - - fprintf( stderr, "%lu: Starting\n", GetCurrentProcessId() ); - - if( argc == 2 ) { - h_process = (HANDLE)atoi(argv[1]); - } else { - if( !DuplicateHandle( GetCurrentProcess(), - GetCurrentProcess(), - GetCurrentProcess(), - &h_process, - 0, - TRUE, - DUPLICATE_SAME_ACCESS) ) { - fprintf( stderr, "%lu: Could not duplicate my own process handle.\n", - GetCurrentProcessId() ); - return 101; - } - } - - if( argc == 1 ) { - STARTUPINFO si; - PROCESS_INFORMATION pi; - char cmdline[1000]; - - memset( &si, 0, sizeof( si ) ); - memset( &pi, 0, sizeof( pi ) ); - - sprintf( cmdline, "%s %lu", argv[0], (DWORD)h_process ); - if( !CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL, - &si, &pi ) ) { - fprintf( stderr, "%lu: Could not create child process.\n", - GetCurrentProcessId() ); - return 5; - } - - if( WaitForSingleObject( pi.hThread, INFINITE ) != WAIT_OBJECT_0 ) { - fprintf( stderr, "%lu: Failed to wait for child process to terminate.\n", - GetCurrentProcessId() ); - return 6; - } - } else { - if( !DuplicateHandle( GetCurrentProcess(), - GetCurrentProcess(), - h_process, - &h_process_in_parent, - 0, - TRUE, - DUPLICATE_SAME_ACCESS) ) { - fprintf( stderr, "%lu: Could not duplicate my handle into the parent.\n", - GetCurrentProcessId() ); - return 102; - } - } - - return 0; -} diff --git a/rostests/tests/p_dup_handle/p_dup_handle.rbuild b/rostests/tests/p_dup_handle/p_dup_handle.rbuild deleted file mode 100644 index ba5d384e699..00000000000 --- a/rostests/tests/p_dup_handle/p_dup_handle.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - p_dup_handle.c - diff --git a/rostests/tests/palbitblt/pal.c b/rostests/tests/palbitblt/pal.c deleted file mode 100644 index 786eb301872..00000000000 --- a/rostests/tests/palbitblt/pal.c +++ /dev/null @@ -1,201 +0,0 @@ -/* The idea of this test app is inspired from tutorial * - * found at http://www.theparticle.com/pgraph.html * - * * - * Developed by: Aleksey Bragin * - * Version: 1.0 */ - -#include -#include - -#define W_WIDTH 320 -#define W_HEIGHT 240 - -// special version of BITMAPINFO and LOGPALETTE for max of 256 palette entries -typedef struct -{ - BITMAPINFOHEADER bmiHeader; - RGBQUAD bmiColors[256]; -} BITMAPINFO256; - -typedef struct { - WORD palVersion; - WORD palNumEntries; - PALETTEENTRY palPalEntry[256]; -} LOGPALETTE256; - -// The only global variable --- contents of the DIBitmap -BYTE* dibits; - -void GeneratePalette(RGBQUAD* p) -{ - int i; - for(i=0;i<256;i++) - { - p[i].rgbRed = i; - p[i].rgbGreen = i; - p[i].rgbBlue = i; - p[i].rgbReserved = 0; - } -} - -void DoBlt(HBITMAP hBM) -{ - HDC hDC,Context; - HWND ActiveWindow; - RECT dest; - HBITMAP dflBmp; - - if((ActiveWindow = GetActiveWindow()) == NULL) - return; - - hDC = GetDC(ActiveWindow); - GetClientRect(ActiveWindow,&dest); - - Context = CreateCompatibleDC(0); - dflBmp = SelectObject(Context, hBM); - BitBlt(hDC, 0, 0, dest.right, dest.bottom, Context, 0, 0, SRCCOPY); - SelectObject(Context, dflBmp); - DeleteDC(Context); - DeleteObject(dflBmp); - ReleaseDC(ActiveWindow, hDC); -} - -void UpdatePalette(HBITMAP hBM){ - int i,y; - static unsigned int c=0; - - for(i=0;i 512) - c = 0; - else - c++; // It's operation of incrementing of c variable, not reference of a cool OO language :-) - } - - DoBlt(hBM); -} - -void InitBitmap(HANDLE *hBM){ - HPALETTE PalHan; - HWND ActiveWindow; - HDC hDC; - RGBQUAD palette[256]; - int i; - BITMAPINFO256 bmInf; - LOGPALETTE256 palInf; - - ActiveWindow = GetActiveWindow(); - hDC = GetDC(ActiveWindow); - - bmInf.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmInf.bmiHeader.biWidth = W_WIDTH; - bmInf.bmiHeader.biHeight = -abs(W_HEIGHT); - bmInf.bmiHeader.biPlanes = 1; - bmInf.bmiHeader.biBitCount = 8; - bmInf.bmiHeader.biCompression = BI_RGB; - bmInf.bmiHeader.biSizeImage = 0; - bmInf.bmiHeader.biXPelsPerMeter = 0; - bmInf.bmiHeader.biYPelsPerMeter = 0; - bmInf.bmiHeader.biClrUsed = 256; - bmInf.bmiHeader.biClrImportant = 256; - - GeneratePalette(palette); - - for(i=0;i<256;i++) - bmInf.bmiColors[i] = palette[i]; - - palInf.palVersion = 0x300; - palInf.palNumEntries = 256; - for(i=0;i<256;i++){ - palInf.palPalEntry[i].peRed = palette[i].rgbRed; - palInf.palPalEntry[i].peGreen = palette[i].rgbGreen; - palInf.palPalEntry[i].peBlue = palette[i].rgbBlue; - palInf.palPalEntry[i].peFlags = PC_NOCOLLAPSE; - } - - // Create palette - PalHan = CreatePalette((LOGPALETTE*)&palInf); - - // Select it into hDC - SelectPalette(hDC,PalHan,FALSE); - - // Realize palette in hDC - RealizePalette(hDC); - - // Delete handle to palette - DeleteObject(PalHan); - - // Create dib section - *hBM = CreateDIBSection(hDC,(BITMAPINFO*)&bmInf, - DIB_RGB_COLORS,(void**)&dibits,0,0); - - // Release dc - ReleaseDC(ActiveWindow,hDC); -} - -LRESULT CALLBACK WndProc(HWND hWnd,UINT msg, WPARAM wParam,LPARAM lParam) -{ - switch(msg){ - case WM_DESTROY: - PostQuitMessage(0); - return 0; - default: - return DefWindowProc(hWnd,msg,wParam,lParam); - } -} - - - -int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpszCmdParam,int nCmdShow) -{ - WNDCLASS WndClass; - HWND hWnd; - MSG msg; - char szName[] = "Palette BitBlt test"; - BOOL exit = FALSE; - HBITMAP hBM; - - // Create and register window class (not modified!!!!!!!!!!!1) - WndClass.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC; - WndClass.lpfnWndProc = WndProc; - WndClass.cbClsExtra = 0; - WndClass.cbWndExtra = 0; - WndClass.hbrBackground = NULL;//GetStockObject(BLACK_BRUSH); - WndClass.hIcon = NULL;//LoadIcon(hInstance,NULL); - WndClass.hCursor = NULL;//LoadCursor(NULL,IDC_ARROW); - WndClass.hInstance = hInstance; - WndClass.lpszClassName = szName; - WndClass.lpszMenuName = 0; - - RegisterClass(&WndClass); - - // Create and show window (change styles !!!!!!!!) - hWnd = CreateWindow(szName, "ReactOS palette bitblt test", - WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU, - CW_USEDEFAULT,CW_USEDEFAULT,W_WIDTH,W_HEIGHT, - 0,0,hInstance,0); - ShowWindow(hWnd,nCmdShow); - - // Prepare bitmap to be bitblt - InitBitmap(&hBM); - - // Main message loop - while (!exit) - { - UpdatePalette(hBM); - Sleep(200); - - if(PeekMessage(&msg,0,0,0,PM_NOREMOVE) == TRUE) - { - if (!GetMessage(&msg,0,0,0)) - exit = TRUE; - - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - - return msg.wParam; -} diff --git a/rostests/tests/palbitblt/palbitblt.rbuild b/rostests/tests/palbitblt/palbitblt.rbuild deleted file mode 100644 index 8364b438788..00000000000 --- a/rostests/tests/palbitblt/palbitblt.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - pal.c - diff --git a/rostests/tests/patblt/Penguin.bmp b/rostests/tests/patblt/Penguin.bmp deleted file mode 100644 index ec4e1daaf93a7a27636f529bba69807356f3aff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106226 zcmb@vy|o@mwrz*!LQ6ED1P&Mg11J>)ijZIfY&bRm22g@R7yyX|K;;-E0X9IP19)rB zwRdEG2dAq0@;-ESR%B%S?zQ$$MCO<0|M)-uzyIrhyyD-R{QrN?|Nrm&|NqVZ|HrHU zE$3IS{-3$;#hiZq_?hFcA3u8h`uXFppFjWl`QytEjwCGbBl*9QLq3HmwpB>4 z$-&^K*(R8ycia1%zdD$0u$f=d4vl|Hf?6KTvFS9P{ER9E%uM=M(q3Bl8|`d)2eXrE z74Np>uOHu1w_Qx{x9-x&im_$VOUIK-j&wQ+x@(yf_+~9GlbPdHv7fdAl^7SxWES!n zM5lCh{1a$@{!E#f|8?sU&1uR;V8--CVu&&lDV)NCXaY$lEbvN7{K&C83Xnbm?HH_R z-EY507e%VjTFWpJ8}V{zQKAgb2IgsB_8>dN+Pe1M0dP*HgxDP6H=i+BF|#)9WvkQF zl!PK=E-=&`-rR>hy$_t=r&Jx)rjdy~dT#Gb96qH-i?z*SUp%7jXgoSC1AgUFcm}Y` z7^pfl#KEir7%F~_&|-2Ju4Sf?s+|BAfH|jFg=P6p(pzFC50s7)Ov#mgwQbJL3=FEE zYO(?+fsX3buWItY^xEb_?9C}=w$nQap z68s4g4Emfc++z349o(?wYRY!5@<^fRMuKCFVN%-9tsCSA?7Q^EMlcQ}1tWL}2`zZ+ zc&_d`+BR#Olsvr*z_cdbw11I+#@oJk)A*EM)O(4|{~;cNksdi9uA0gOlOw&7LuPQ| z%-Ae51!Pa#Yzv+#%rSMps@ctiIyo4a=bb(|Q!Cj2`UTQxJh^j>kLMC9U=M@3{9ss* z$1_|{fhKxRnJXVbEQfBwO0$$%Eu88|N{cF}GykUd403zi(`1f(X_@1G*>ujWYvOtJ zZPqdu_NP0I0sJ^EGYea0*d!Jn5%pFfQH&Nq(ZMex9N>Yi*k=IARH0kf2FWah&a1Ub zvgChFT`-~rC{?^F&!&5RCA1p(s(#L6@HGab)&o`QlmYi9ihY}QC_|2>PtHRD=1DOp zJmA#>U@)RcVyBM;gy)7mlJT;LQb7B$K(6~(?17d>gglAldyaUUw!v#8 zgHCF_LZ<_RmS4A>OOBg1Z|MiUf3Op@P%Ih8L;8iw%)FBy%^0L__Ez~K){(5JG`*RT z{-*-4IS09*!jZeV1?0D*jTFwFTiwEgXe&Nz_Ew;c&+xYT^bW4!K{dX3j{!h3apcj? zDNwxxDg?5Mt^m!6F`zs^TEK+yzcf0~ZeJP?gilj;iX|xFJU=%8!G67a^*)tN4E8v9 z41S8~hMz-zC~~yFon2IjEMx=unM1X(hN##VV6?&cKgcxY&+%0(7rX)Z+->3j7N}BQ z)SLLUmxl_cKy%6!=#t~B#QOU5_3IPG$ehIIA5Wj;R)_ud$I}cr130~dW#$V2&Ryw6 zfG8rFkYg<~Vu293i+q$4;H5P!1o$Z&1$$v>Q{XMY=(_FW>D#G^=1T~9KrMzuJ7OQh zuHGN~)cdIZAf0?>ayuM{fx=QJcc=Qdi87Kij6N0NFE(%n+60qCSmY}{P4uMADXulJ zN4_RL2a;;}h5gf~Z|`z^`26m}r>CdSPn@6Lefm6X_-rER7W3hdrQiHmdpm;|jg@5pn3ZuT)t#46BiXBb;q*4a3r?2lme0}SKv z=d|$d)7N)TpWi(_luvaJcq4mAe3>>aY=iHfLNB=z@}j9fOh~aN*1yTB*T8?}48`N`4T&Y`tQTj^FIp5P!I4%`&6HTLtU!R_U{OQ9t zj=hoGL~re0`4o_5! z>V7LtwW_{$-gT!=2r5iBGl3d_odZ-5VCP&BJV#ds1pC6@yGdh0126(r&=_;{vZ{&p zAN)k9x+|hpM4SSFx~MzaELa@O@*q*$r(c2p3kT}HM-a{N1FQbl#8cq^sg@sW|EXHe z@KpDAZ{r|j4<3OK0lok5A<@Q~x>~qmKl%U_szrGMxCvcSVU?9&`d*^wtFv;LJwKE&-| z(x+cvo*)6-QomLGAFto1sgwyt=;HO;ar5tzsLL<#up~KQq4`7rvHVY9kLnlo#r}SI zvjm!`GGl${Wwa6a(1Oej2u8VwABp)l>@NzOZ{|FN0N+;VtpJ(fyWovX4& zW@HB|#U9BH%MfugkF3GFdf)S11g6D43uO+YGZgLyXOI~EP9|D~slOF~CCR^MqJ;rI zHshe)jbz4l9kq4?e|S*ykTX0;!~hS(5*L#(gaHd}twJzP?@1>l{KUZmA*;#_`oj1G zD6TWVe9Btm(-{8)e6*Zn%B(xXo1V8+L{4$NRb+^x!SRu!+r!F~$g)pet{lnM3$ zTO)4?R(e{3N2XlFNl)d}pey!{rYfG2ur+522s!>~X6Pi(w1GTjI(ZjeqiQHOKt`-$ zJbqmU6!JkjkiVA=hY*k;c(@)*G?xKXQV=3xRA#e6 zweASM{rH7sVV{F=Oc~jbS9HaGgS!EH_?}5dGa}QNXw~@SYtW5A{1!c_8Y^DJ_2d(ydAn_>sbK2l@-lK;n!6H5iNZXE3hAB9Tse z>;!X*O$f`dJo)_er0)+6KF0uTv3o7#CiXdlE(9GlTWH7C&X$otmJJI~l~YV}7hE_B zx#?Q>uJO?I82_Mquy?m-#I&ui-x3)noKQ zp($Y`seKxZ!J;`UaAXd^sN7xS7qta`)qT_$z5n&oBk`Tq{zUlh^xeslwoVWLAL$a9 zJ2K>3d65HQM+qdsq+vRom;;4SaS4fU8vOq2tGC&SWBo1C)$Azry5VRcBL3lqt}uIP zv%OX9LD5n1=GNMLpVO~e{}s)~)EDn03Uf#Rp_yYUrf}PzxwMPS<<9AIdEej7hNJuj zel{Q3T^4&tp!Q3b*4^_V!J1Ws473A3uXF9;Bfi02fF|ZIa8y~d&5ZUkdY?n=-P0ZH zNvDtzK$ie(?bFa5du1vsBcL=|Nnt;QcE+s%NX|&D!dmRn30-MdP_gQS@#YvSp~Mk7 z5jZ91vM^ldV&684%CL|TjvhA$)K{&UAZcC~Fx@kTq4_hZ!|5jA&>W}7Yf^@*DbOKJ zNp~hvCYPA~cX9kVFaYm`KYPrdi~tt<;|q=!9TF5j@_kEZ3yko&dsP3y)QhPzk_s63 zV2^EA<30b1`~Q`HKSTTmeXan3KM4mywV0F5v&$(cG-u%&T4O^y3n^d1ND1Anf!c2U+`@Pc+ zDFwtBbx+PrbLQ1s$<*2x`|eH}#3kC#qQCZ^ou5y6!lV-!?cccgW;i1~q>6HP;u(Cz zevENRP@S%Mr*Lh);#&Kk$tM3NHb3D1^^3h7@z(uAjk^C>g52*V6)KTbZudDC`*y4j z&B(Cxp@k9OPyqo&vJr%mn#)C93~Gl5=H#TzoC^}Dh}K|cdchM{BDlqJ6BOv-__sWn z+s=6U`h{lR&a40<^eNoQ(qO0Hbnx8gl7!QY0gI`J0nH)q%Vk%62T85GnjAze-#S%i*1p5Dts&V_Rl*ryDy6ybdC9{7`B zf>W{MY$MF8hr*?Is;BGB!YOYp!UB645(8(B6-xn==u3jdUQ3WAV%CRo{1f&|0)4^Q z{{?=0Kd3Lv*z=Vn?`NI?pTPr%rvCX^8^GL61bhCW+>u)TVe|dxsxMO|%RABj)DdPZ zMCUoEBQj=wx|gIv+Xz7NUZP1!twLXs9tEnsMckQN+P@B)?d1ihz@+3s7sxXa_5NU= zp_=Y?jaULFiA=}=LsK!H9%*pPq@+}KNIN^nP&<+Q5*__s?2}W*lK?i#;NZd!%|4f) zn^=$a9!C;SU-F+%PYL}Ve1B?TDQ8hF1MDcqz$N}sxg*}p>y8D}EENp#1RnUsKJpsu z3$l1e?;(hEC@sLAO!#q_QSsf*nJ3_7dOahBy>v_+7SiDo;d;Krt>{}lncS_=TkK2R zlbYSZ)K%qH)t!O81fe=w$frPhNm$dt6zMc;-9&%gA%FGsbU%;V$L`{YLs$tVweT@L(4p{iHD{zbd z!CoHl2!|)R*Z{3UB;T%KfFuwL@fL+blk=E54FG$(IDkcW0L~>Uo-1TJ2O%LB$0>+h zibZ^&nDRM`S&k&)Y_BA5@;Lf zV#Z_sHrQH9!8YlaF604KSn&fSIk!eEW4=9l3tAUcC(GR)0cp&@gaW-B|1E^o{yY?T z`{CW&x9{G+XT`q}K#YGvzitQ)xEUEtFNp|qg@L+x@unVJu@lv?a5@1aa%a%+A=1%;Tid_UrlfGe7zi;^A4HQIA=q2E-cSj=|6!76#2QVwi>?{YqPNS9(?VBCrT#S}}$7EXb!f@TBl?CI+J z+hES{c*aTHp%k{X6Pd0%D$GN0O|gV~nYGPA8Xy6cCU%XN9Bv7`=j`-7J-vSW{`K3p zo|6Fh*D(g!`-{!5U8$RQ3=AWg6$n#6_0LLs@`LoP0Oc*_lr7IY+Erf=<=+K)E`n?S zjo#m|CqI_A|BwY%0ff+gIw)abfZAUkAiI<~V2luxNedPC$QtEK4rXRaD_}dFGV+>f&IJ{fG+hYU=2}+$>3x{DlMG;VGN=DB3O~b=_w|7JLu6syUfaCq?3x z1K#fBRCl!masN^JcgA{2lgR5T@1I`3dHe1UjwDI~&hOvP%U(fum40Uj*inOOLeEOz z1awTH;u>&4nV_u-pIDCzvgXEvx~HbVd#^y}%+)<-TtLW?riSK9f&3>%F}8lZY?s9^XF+V!)*H z#z&0kN~}hXVIYU|uW3RtRTO)PT~=8|ozRVOk90wRBC~Pr{616 zuITLBU=0AZ)T(1$oSm(~gYssu@s=1f-y{HD`#-ARIA9{UF7xXCd8LO}fZXlL_Wn7t z&;R}V8r=tJ|2Hqz=KnXF+3IW>56p)FBx2vlhy*gdK~l63VkPU{U)j<*#T0jn z75*?rsD>yh#t|Ftv#287rlwOEW{>UkjH=D9#?!uOYE7FB2{XZg{A$OXP8ps}(3b=} z(D+?qF#sgg?^^$aglzP>%bN|pyx+yqSNwR&_v8D@_i)~_5-%Gsy1pg!?fjJrjw11FihbQ<$f=@*0|I0w1 zhW-wFwC2CuSDbF=d_O-EM0L*ST7V;2k(LLOM#^PIGz>^Yj*=c#_vDWrUzxEDZZwJg zjTX~IL{DF#OS`_Er1o4Xj$$H5+u(5eaX2Akr_*#>thUtd67j_pFTEZ7WnN7A}nK49spZ>b4yQgI46 zDNM-p%j`NfC%BJxg#2#pa~Ff}!TaM4@=<-adb;rQ6)pn3vHSynTs~(1fbmi={u?O2 zapj@J4f}`u=NJFjiUYzzMnFh`$(%VWWx)oXJ(_M6AyLYKVNLENtcWh|f!sGub<+>p zd?=y;U<+zNf;|~ws(__+&v=MNH6a&KIwJ-qaZ}zkr$aJRDoCR;Ccd#on`vel({+zOH_3K9)ZL|F`GBc>Oy%x12+lsd{exTkOy7{fnJmR;Xe% zzTG8F;4j!H4WYhrM<`?Su>|5F@Z#a!3*CBsa1s*qtcMiQ4BXWE+&zx~>c54#Ix1#% z2Lm_+X%c95vCqJ`JMgppw_`|o%Q&5#AS2ndL{tYNjY|iH2g88sIxyn`aP~a4%O0Qh zpXEMLUhvNQJjQx@{g{VAZUGG)AOGe0dDdfr>#FZ+o@;6zUYy*AL|gu?i()@|kJ2CD zYx+=~NbN{`;2&~WhP#tczPTK*gGa5m)gx%++on!_E>HQrby*Sb9{g%2h7AWc6XF_l z8EuPAM-HjLw;g8Gk@S``IyTIS^nH!SePVAMF#f*qkL70zi0Du3v+X1HID6jZsu>{h z`SZ=}-(mT8cpubml^*o|kyE$kZpmBSTQd65h^E>g>z4-@I&>m0IFPU4BH5PFO}0P* zTSZLC0Y3Tb2rjg4=mw!X6@aShOF}}h0r1!w3xUh(bW{$qI(@Sx8IP@%0Xu$*fqf}> z1{3%>W{#P%S{^k}zXy2sbgTW%Z@^#FyX4aV_!B-};`WzZfj>5%psyhtvaiekx7gfZ zdQ5`-KPviv)bwB9GYyYExjEPu|<; zt8TuM3idrJ7v{M+=QX$70&m1R-V~xJ(9I7*!k}6=XrJ&Z@Q8;PTkHZ-%)n-`$1rSq zGMi&GkXt=UIFK&(;|pdY)51mo87HHfV|kFvw7K~S>+)0ZKFvZg#=O_Zi@kRK5JIo7 z<%bh|55~^~iG0m|-sFE5vwx}nh0tT_5w8c(uZv*6yYw%_2v<3po(4B_|C@Y&TiT6G zF$UKPku$&#_Nx;hcMgPALFc?t6#%Rdca=XNf#2SBDL-qulMjlEU%(jHvL|mxZFVxZ z*a4DJg$;cy=BPU6Q=p?wU$n5pNam@?t)cbNfie40=n#SjIm)EQ|F*Mhpf_9`zFGTU?>t;wIQ|>GKebN6#%?~s8$W+BKEXx=CvniN2!KCwv_Q*D z$st7HzZH1EUf3e;M~P!0x|4I=8sNLZ2RwR;F$0HE+Ya&C=_u*L8^%faHgu%?a&Z$( zXVX(r8>4NT@@b*GuTLDauYW`(8u!5o3Nz?W zd%KRHY7KsqlZ5+v)S_8{1VRuJ$ef#RM;S@pD4#Md+;O&WD|Sd!q!F+`O>wL2yjWtJ z5V}YY14Me#0UpO+$T=JBV;&6dqWTT@4g+Fk{{yrC0`y%YoRz{qWB+eZpXQ_YF-jNq zH{}-oOO-)-fd~GE2oYK2sQwu)6(QpAyQ&3#5jET^gu(#!@kd>Y4@jvP>9oxZa`6Dp zMdbjtT?=8Obo;$=VlYmFh1>x%HD`Lrlo>hTbT_?p`Zv6JrG-l@zmWU0!@wNueRq3E zU<}B200o|C9|ByD^$vb7Abe1{Iq{pRJ~hsMeo_ASL4-9a%>O6Q`~EYpom>E`Ub#fi z3btp(sugW!^6#1n;pTga|+-0~T+ff)*e|cZVNW z0T`KM3RsNS_06#hCUqdU7=?R_mfI#dEtUxm%_?-z(%U${ zHXpse;d;P)F>mh{;Jxy{+1q)zzAj$Oe}ol_2u<7-4O?nZ-V`IQ*zs z=RDE`p+W0;j!_{RR_v?XTiEbW2f-@^^jL&WLO7+u-s*D00&8+)i5yauy`+G>G{4O< zwk=GK>D}`GAeHKh;z5-P!~GkDs1lKS~IA|It2w zQGRaoZG{J77YRt;FS#=|#B8xw??-7OoobJXTe_-0NCfhhKLv6bsU?5UNu;oXt~87E z(bx21&fq#i*JkYFJM>-)M4JQ20CQB+>UHzR1h%8yS~v+8cG%qQz$S-FhT$=kBHg_# z@D9KkDsOO*)~?*v_ZkLX5T9 zTD@>TZiyilLS&Q`?K<-6^mPjXDbOVcNQVTzk2dcA+^RI^Tn1pnCyqnUJaFd~eGI_r zA3?x?VR;#F5W*n)a##_C9Cz%u*|Xrx7+SI|OfB2&jH>hw6&GN|vH65`b?u&g!dVBe z&ClF%_M#5_d_pF_(lyl2CD5bw-Q3jx;Pt=!{QvbD&z&C|=O?e(T8w*%V*Pv0jRP2^ z{EF-w53M2fG2`Jr(Dp2%C`T7gNZ(r~WPlpKVl5{q-{S~3Z&WU*wZrx6DHe=j#sRp_ z-T_<|dpo7sl-%w}B!}~1QZFZe#?x8UkWAsFU|ZgH0Nw_p@hZK6t^*``F&-a7aAQwIK^-g9jLf&IGt$vK1=%g+KYukZEkP2T44 z$zI4n;P>0Z+($^N$E*_ro<2T({D_#Co+xI{ooXj92>`gdUY3mU z2f2$MWy9VwnyX<4gMy@TgZljFBKc}Ov0f5zMb+n*QvnHsagKxK=HxEg@40n>Hbb>Q z=3-M682gkqDd0H&VnxdMIZ~yOW2c<6?J(=E=yEymCqa-8#+-YYIm9ouU~nGoDHeYjXAr6T^?k5$M+|P zy9&3mQ`I1Zl3MxZGNM%IsX}=UPz2gJ$SmYW0BBwd)C>$}WDYh~ES7C#h&XK?ij1Ku z#tdnCPonlIZH5Y&OKCy=jGRfyZ>QtDoEq3Wk>rn9o&ldre!+t=Xv9~4@77*oso-tI z$L=2K9ACdKQUVvy+iiO|w0Y0y3aMz_rTgEU5SkA>hXZPpZj-;t7Q^37H zIx3c<@u16*0%&~BCU%awtUITpLxK)FIVFcY$gF`}fe3sw-cQ3t>CX<2*t@=8V=w{W zK|S$Z(}sS5{~x#Z{tm2#u(tf)+x#tm`|qvkzrKIxcS8-)5B8mKG@b;qlNJbNcp2=)OV#z1wCFptMS z6r1T}JYIG%K%PT%C(#@-z2zly@t~0a?=d{cLN1a~IBWJHMD6^9dx-(_4v#LMNFN^` z>}R2$$Um$9yJ}wG+^}gf=Ud+082p#8Kh4;fr@uab&2NZ+HdC#znBh(}>Ehj6cSKPp zfEf+*kC&obIgsy&TZKy*EZZG>(sB6(ULey{CW#H;K*c$xi=|E>w-;M(u@c3u0oB4C z_6#ON%0yBi8qC0QK&EY{InJ~rw{T^G#uK;ivpa2oJG))(hXmdV6$tgm=4<(rj*sV~ zEdJBl`)G%Ud-tuq8@3k-ntJJ0^2~mY{hb%j+IjI-0zDS@oo4|)=~5dYOABPW0!mIL zcnJ{+UQU#JMVtg-{9rGf=7TGV+$z#o0y9A!49bti5<*yjTide57D9WRW*ukIjhjD1 zEibv;79h7lz63SjyQ>M2Mie0C9k)2|ZVwN*br1Id{+*wYECamUUuorsdC{>a-`$SD zKR#W0UwjwQXQ=(d<#X(Pi@W=RXRUt{zqOO6IDfu>onWN?4D4&?H&NCj5yU+rD;q|= z1n;_gBzWKfjN(@~SLo%0hyuSFua*P66u~LjOR9wFqhH2AZxSJc_$!Bk-L`z4OoZ{FnKgAAI1 z*n@c67x1`el@s@z$MkR5Ki=-uP2;nW`?fy~O!_N77|sJ+jA3|;_J zh-`8gAZpEB02n+-BYG}tsK-Z$pAU0^6PPC_br;|a0|<#|M4ihNj@PjLqPv4>CS7-s zj?;dZBJR$LHxo=Eg+b8-Q{K350Ul;>3$PK$B^=l=PxJ8l!f#|p5P;dIFlYXl*I=Jt zp$M~`wTqRi^~r`GQs&r;s#T$&MlL@y5*(Be}sM8|Lc4HL{xqx{08cMO!u)u z@A=huE;7jhyVxJ?_fnVc*bD~J!ivit=cTC^`;^zh18||0E3^YG zd~YXa0EQt20fSgzHt50(tJ6jN&W>lmlM|+yW)iX_hys5PnZaGBc4bPDmSjKQVup3a z*dJ;UNkjdbGE~H43O^w{OQ+V-n^YpMSPr3OF-}(cM^cH@?zRmrU=UfB36Nd z!RW4mI)pGE)E7=jGw@gocmib6%~{)Efyv}n{Fmp2)+s&1en&;!vcUu+)crHsV-FsX z&b$~E27d~7`s8y^y%e8(Rlf%RVL4aTSJ$!g>U|639Gf3c|F1W%{}ssx`@+w+IoR+? z{QvPD^gTek7k~TT)%&#u0lSO8%VuN&{qbqP2Z5r`r$LekB{Q=7;{L}vGepqW6wwB) zBEnTzfLalcV+Q8nRG+=rLxN&}=`KiA++tQqgMbA5B?rn4>M$d-Zh|WCAZ7OTJ+awl zTi2$BZS8I#v{-T&|7<^q_kj94Iqo_zs;_c4zk4_VTkB|?U(4_78|LfpV+`2L$(NX7 z?K%E<^{+RtAi*D)+Z=qE!9T;}yE6;&V!79U_us|-@9zKn$)2L>p6>Y?OdyZy`+<ta^8tSl3Jj_{3_xpv76{FU3goNw z8FE|TlBVF3#0B_rm%6k-M>%Xc)mJZXx7t2s=(nm&N3ENRwjg*l-H_WhQSO#3pJ;sS z9}XgAxE$<>gwX7X_z>5(ceAwfDLw|@KgW?ows?bmbp4giUIrlZ1bx8*1{nPX{uqFK zjq`V_PftP*43cjS~8-7)Fz0@02z=T;AJZ86Ts2SsBf9emD65@wiC^?6hK&7ZGh z^8>kOum=d>#}Yt=asP1ve2?`71}MOR{fYoCf6x8Hj>zukk3<;-9*q44P*9g~=?~S9 zzt7#q%F+(OpQ#BOp_0zSu#1O{=%O! zI{sPR%_V;=3V&Y)@LY#CINtrK&BxjU|0tpGLx?}#CZ}sZ+&?RT{$h90ykS}job!X; z;~@PP%ZaH^Kmo1P?^Sw8V3)}k`>gLjI)|mXq#n%%=18p)#M+~3o~Hnxi2}1oRux1G zN8;2?Isj<5vG9}`;7tgyJXpXoa?tf`*8ql{=s&P8uI&_NJZZXansOVwNSb}*Q zr!!(A!ffwAe&vv+k>;TErf=|{m7daz#`~@gHvi$k-~TH%{||r%dlfHm;CYkA3=seS z`Ci})|8Fn$tN=z1{^tSvb0giO^t$;2|JoUC0PttI8N-lpFQ0#$Al9k&^D;orB|=1w z-crzHj#wjHZi)RkW`t!XvZGk?y;ZdQXkvA`&8EzlaST3bB0E@LAZcMDJ_Eq2{xHC< z+g--Mz*KHV%dx{tVrFqZrtWk)!A_x^CI{{^i&lwB2t10OG$!4gV*`TpZu+vs&!Os< z0mS)FukrU_9}>9CQ~efrRS^=f!5Y=q_eT^5&A&^$ggv`;*qJf-rP%Pm55N`pzQ$SqyO!T=pPGGK;IZXp!2R-u{SpPG zw}ZuA9}mj_KDT0a2r@f}d=D;rJIo=|bB38JvMB47V?>tA%A&V87ycWf+5l8-ZV9I! zy&UaFr>9mBO(q&Pnkv94kl6}t5N$1>9V(O}78o`pC*$lnEmOeWTavzP#4b)kqMp|PQL)mI2{Ysz+paOHtHPQ*^r;5FY8rTIgMlwAEbCvb)YSoJRF zh7;rj=30BOuihue=Xd~5gipA~{_Y?Gpi&U-tUzJq-e=kkU9tcVE^hBa4h!PW`G!6dJAKmCq1})4u8OP z;JzpLJ>J8=ycIym;DJd|(X}o5mC<;*=fK(U@o&bR$#ZDjBAS`GnZ2xZGJhme_(|M8 zpc|2yk9 zGhov8dl)>bZzk+vJZT{k=ozrt?#$WGXGcVfFw{?SCXHySIxd!0#1vSZl)k7O5hGTVZ-PD&<`jvZtxl(> zspKpkqr0*8+oLEhTFs<8bEe1w(}^>EbRdTk0BLP|R3*kg z=fYe?$0XF{Prkpu&tLX_s;!OKa~OLmc`ZK>kRRY{o^#7$1pGvNUGm+RcBAXOqrEI> z7Ci|kQT!CII9-~+LqHebnO02Y_o;Ya-ne{X@v zsJ>?Zh3CAW{-F1{=H1JZDA$t(KIEfWsvFnylo$IwMa zQFL`(@hKD#y^OQ+iYNi2*jLcaU%Sn3q0x0QE(Vrgwceco!4Q~1t9aO>PQjg@!F6po z?71pt7}+BlAWwphSW^t@mM`$aTuVkHQ?Z;-^$CL_ma6q6A~8|FMR^q9h|khI=_*(SB9k^I(5$!e8IM6DSJyU_YEP z!t8#ssJGXYRPW!jdSQARw_$yyS#!7f5lwx;ku~D0o?R#^zEMiBN1;*2C3{LOVczmR>Xb>OVb1>RD_6=pBW7gfIoAmLH78# zL?Cy__4_RKY28E8OZir`Bl!2yM*-EqM3dV+W5j zT4=A{Q+TR$Mx*^=ui3{6$^a4s{6u_{dFegAznP5#V)pqhCj7{%TR7rp@xScuVQ~wP zrv6+u(QUpz_}xT*(-W_MKFA67izgZReXh09t2>i5QSkO*H5Y5u}?7Q z?{M?RX5NAyAOwC;KX|L|{{o<*6UgEY5+CqjcT_(fdG~kK`<|-zLj>Ue`W+*q&42gi zLGOKz1RK&vu!n;jTxRbH2ajl=_8?s?;fyAs1b|JVB3?n?%NH|?QBtsJP!b5UBxr+^ zDYP_VgC)Vi8$7P}aNvPYgo8b+J8VYzl)AV0Kbbx3h?d2hkw`U-O{clWKzkMrWwJdc z%5&nzK)?^=`@8F;b2Q*L{@3#Ji6s&e0`_Fb1#NU+k5zuPpSZ8W4+?1Ja)Mo%C}il8 zzqHs@{?musZ?-S+pWFQWu{GWT3-<2W8BplaZ%7}dw?Cc2pC54cGecki>4zh-yX7On z2zNwjBKp@$#4U=T^6W6bnG}A!oSd84n35^B+q$XZ@Aq)$54})^Lzo5rG~Qb{7f5^! z(y{F&lchU;oZEEH@!u88ytq-r{^RKr>dxJq?*~Zpjvg;)(O2ppF~?SSd${imysDs)I_=x?^uTC9B_@ z3#9693mIy1c+^*sKoZi~ahD;d=5h015^I7K2GhD6mumNjN5OxDzd(0Xy+xq-|J1eg{_N(~kJ6oH< z$8)kxi_z#_0ni?Mk~Ce)!4qY~!uYeS0?#~|Au=t}UEoDbRR}Tx>0sGJF))AOp-O?I z?qFOt*tnVADxzt2kPvJjZ1CR(%YdjmO{w>7c2IxB-nz6PT?Y8!K?b}?UoA9%ok?9Y zts2a$%mX}viimhaOV!W0NAlzQ*(B8fjA2MlfJEk(il4=v8c*~W&0M872ul_Iv@W53 zwsmiDzW&`4v0h2hb66t4U_2(>AafuG_*j?{FabY2NS84cOaq(Gtdi#G&gjQ7AaV@A z2V<3~l3n!*Dyv?LtI`jmMHg4CxbH9zJPYumMHNV97uftXl1DhWd12mj8+%o~ zT}?vAU`ZBrT@c=8bfyLa%Ff(nu_yKt!bKfIh!+5RjeIf}?_`3#K|mhEXanZ;4g7B- ze9quqReZO*Jwnsyn=?P7NSv?g|EK=`^&eg13IB880b3(O7CADjR5bk=oi-}&$JST9+5cLRHV+58hjmTSO& z2$-QTnsk$~`WZ2ShvRJUDTtN3g1GRm_y7;j3Xla=ISwjr z11(IK1gL(rvHo6{e_q}y1q|ww9KDwjzRmLOdsdS!5Q+7OF7S~Ofl>7vf6sFN zx}1-0Xb&hBh3xMk!Jbz+jQNG8W*^N&Edv=Fx&(To_b)p8=z-Xe+QW(nrH^q%UHAuY z+70g@!~q`F*X!>Z?>xeh>=n?F_@V{UYJ4SF;44bRm-2Y%LM6u20>Syp_c!b=2ArIze)_@yT)=l21L4(I2W&6%k*(xhF@MXST9P2MEA}z(PF(Dl0o>KL z;}@FgG7lzDmKFzfF@ z8obk`2iti=h{Oc-Jz-gXf=|d=2cP)_p*auU>QK_$id)I00!=Y6?%fq}FXt>m2YaX~ zLde(hz_!QGg)XGXcDj90vST1;@9GX@TekmFz!0yjbt1Gj1E9JC9#7AuGyR&E^}Gc+ zrWPfSD3S>F(QFcT;7!+Lc8OH&N8NGxFn}*G;PUxZ9-2KXJ%umo?y=_bz!aNrpts-b z;M>bD{JYzH^*(#L{2~ViNuotP*r$)aGjw~L0|Oqg@5)|5jG!a#bF5s<0ldfp0Z~9K zFGNwtOZ&$$S36r+yPb-QJ>`?8wOdo9y=*V{yTgEKQ=8YqH?SFA*NWSbJ%a1b@#y_z zrVA$}-klm}G`q)Pzyx~D*J*au=fZF7Kf8Nu_<#7wBmA0r&HiYkkQa5e6x$pg@am3% z9!vb^*jM*|duQwR9IyIKTOKEo%b^8*6nlS~qv{t+=Z^>mhMVA4WYwpJ%EfOKr9>%^ z!wKNgCbL?*2vJ;*g(wN|+;-P?+5((de=%(iMez5wNz1hm7RX@I4(ARyGfE>~HV4-B z?$sTED)CCEAH0RR^uCr`rPd7icG1RZ29pKS;!R|Si z0EAWUn^b3w7fsF=Z_nGh4>tdHQM4Qo@efoDhFVF)?5ish8q9*ZlJ3N!42y6S@qVBXHlA5h|MXc43v(kH=I4_v|i zYwGJ7U;tlK!{*1|gKKR*U?&V8`0)j(I|d+TnAO>SpCL>9Pfss>oM+?w``Ulr&%ePh z322=tug1UK*i*XnCwUvoFforZVBl9eND9f`3REwS0n%{qS_`k(^ z{umDzuJxeZ3HmVg&`OunE*VYM8zE!9z*8c_Wo_Eu0AGo$`Bgd)C6ZFCi_NNgfe&UN zl%rteGCCTGn~#*6@SG>M)Jn-lZC06_!LoqC!qY4T+J0(Tky~577`IG^y5_35(hlR{ z7^HjY)R>?oI4&TUNC~~~GOuCX27_$tihbYS@ljs(+9PMT^j8&yLnTZO8c4d!a#cSY zZZ7k(yAyH!hW&5;p6_Jl1+jYckf_apI>)8@u|EQz917=W*qsjy=u~eqs#r%qDkfzy z%AJyvIapd!@W@{PS_V8k(n1qdudCi$tz}671_oZSngMuOoM>SR+giJzz^!qd&gyXs z&^1TGKwiw6E}TW@)$%DL_B94c$J(E@z8XS=Bm-R0eMW!C?-sAOP7&N)aFN&U>_tlpgU3)enUSn zL&`#X^$5TkfAFx!EpQ;;MBC5w3vGYCa~n@7;>($FQtiko*ze|S*F)T4NxBZqd_0+a zp6L~Ph9v3-du|cuAK;trJ3QIeRqwI+G4DLZA@o}wNC-#})bqv;F1sIM$$C%Cl#D=!IQNp9Gun_3w9)8%_E_P(o`nH1VgwTVHLXvmn^C@HrFjEZkB%}g-_ zO+}AMq)eB5qh45ej)Q&gb`@uX)#<^$Zv>?-$a!x2ZH;sr#FpgM?D^GBDaF~N%&>ZB z!J@wfLWQy+?KFHL!7R$8s`vx&m_VI&Hh_H_`z7~ zt^~D?zuMCYD>7z|j0AY{7i=z@4;~{ya*_{D&78BNJrQ4syI`EUrwTb^&%px*2p9$Q z9p|pDUB(nqD-QNzN%h5*M#$9gn0D~N?_!ulBqxc^4!a26$ssYZ-bQ&~&%^uV$MVAi z*L!gR`K??b&l$bvnO?LX6&^z$giQ*UVdUq~Y7P$o1UJeg5uoe0uhxo)y$E>GXz1IvZ zHoJ#XN4M~6KJ2hvS-TmDGzBd2Wn?JDmsy;r#8bAwq4$aQV`PGTzOH$IN8QCf7B8Yna9g}%Dv^k{a;E%< zRb?{W9M7Xn$l4Z?P~sqDCc~Br!hDb9tBzs`oW+K-$Eb4K!Qijm7JGu$Uk~?O}j6AZ*C) zF+ax?d*0sZF~pAuZaKxivbbR%NR%dQSR{~awNnLBl!$oM9qChe6www&;s)x~Y3mN; zn?B${i^4pd(4K&$UAN^cy@=K}ba+IFS9u!@IWo0tc1wcFr}?$~Y~a9#;H|D#^>c~Y zCnq+a!#|i67p^vK!M8M7=81isI%ko# z1D@rC3hfNDLtyC=f1|vBotJj>YIm4N>5myuC=1>NaAc=St?0P~ayS&&3K+f_bZfTX@OmuZT7%<%L(vU4xC{7lKrTLoS0$Auv2RiC1@KT_SDU1sF@~ME(2yw|BHY> zFn?}-W22mR8>e8y1FGu_>JflHdXF(j=7e&I^^!J${P(D-_J^2R6Z&@-_*-iT>GyxX z@9jh!*?IoJE>a^#O?rE!V~->*n}gm5`=|V=Ea#Re?0)Ezbqx$#vcFqqo#2&jh|4zac#ZmD|)W^is(339>qVcc{T;Q7%7zzm>i2)Q5ze?XTmcN%J5Vcydux)wDlrhth zx*i^Q39-gvhcs84GhhO*q2P3+$~zu^dd(A8d5KW{w$%K#H-8d)9JC?~~XE zIl>PEB!MoUA7$3nV(qV^41fw`;;jFecQt)==jm_$!bbG|(GYN%4_5s&+HVKl(auZ!X)H@X#xn5>$%znUFzv13I$^!y+b&889DE#6AD5LkjtC^>NsQ!ni@4KJ>2sJi;0-WA3&|_Cf ze_y;`XD8oPelNwI*K=hbFO$$EkMO_y6knUqJQW!XSTiv2R8vQ$6}sknL=0v`aA^Mm z26bkCx0-sH+}zq?gYlB-p@lTwHk&8|=%R6hHf9E}={9>B=dPor9a>xCvD`8 z57G>tzRIDTr=7ISEx_h((s*}^C0(#{PG;JSe12RHa&oEm2X7B8d}a70Z}j#uXT5%u zm@gkR;;ZWOI3ETWlbL8515oVQ;Ysy+^V=Ex2m4X|u>rq$BRKrRfDlU90T#xk1-$dg zy?T$$kp%JggL<_*lPvJL^Z@M4znK+^W%g}|72gyqgq)F}fZ2VC6y~#hFS@iKU(2>qtvpCR*gK>a^UNC0wNI(QrPdz2 zn?Ub_kQyJPlgZoMgm}r<@n>T{p*|Srl}RE#NHD+;Ko<|N$5))s@9~~#d@sl5XY&1r z6vBY~5)&$)kjqX1XSKSB6(@d2z#S z-KVDn#e?qSf9`tkoyLuTw_&iM`I+PaFJT@LzsGJ7DiO)?mi4qp$9$(0*GH%U`h3^071UE`P^`(4!?O z^ENw({m5d?+QQ!ze^Jjl^PEE}AfSkEaaB!oS;>yUr~JKG3(r|RXd%?e(tjcG7j$@8 zFm4y1JKAr8MV&~u_u0;a1X<~b?&%2X>?&Yxl?QZ(LxGF!eFt#Ez5^Ho;8Xm5Qjy3G zX~bT}=JPx(M=e2skDd2ZIjjYET{C|~0kPjg{T2S@^~FA$`B~j%V~2i zTq^OZ-AH_C5m^U-!rXTSc%zb)x2B~O2{4Ny7F!ihJJuQ-aC)b}c1JCFV@^rqINNN; zYG_4ge0`(-CfJYmr~CAz z_ZoxWC=V$d8?cVQnTlg&G|;L&2laIgLx@PTUZ6Ig^pSpyga{QpO9q2{(|&Y)?xxHZ z6J1q&NE0J}8HO3pI-uTacNz@XFqdKv^K6+OVPt97-`_XRm+|rF4d_Nn$s`9w*9Pzr zp8Ou8!M_j3WBk#^d{5Ucyt;WH7yh&N8kg^SJ75KSHg@ujHNL4Ts*k7JcQx1GTOeQA zd-sONIfYz|)4}`z*udV!2H~DYCIoEZyd_eTwM^H0MJSoxI)d^5DI87l=w9t)+NeAr^TLV!oc1|9pT30NCmM^xcA17Fckhm+j$o6 zA;hi%fd2rDe)mY`D&OP;-Cy+%<0C58J<7q31HljA zz13Q>!660pLlI=w%(P5{xh(dylVX?wCs^CwM_hTV1si7bZr62DaSXc~qdD{7j>9)} zi2%r{7ao5f&32_Xde3j@0>LrQ^MSQ23-f~Z?a$^G=b^wo)*Aw#2fu#ieUB{LqW5BN z)5ZRZ?T;Cd4bl4$6I0`>CV~Ip9mq>?6qEytmqdXl!4YApvbhDQs8lpedw@pfkR005 zLA_--Q%vlsRW~tZ=!F3k`(`#hQ66f6ilfKsdR5le#IgW$wpb!Q{#ibm695)?UiZTi zq$K@17zdy<%Jq&1RmPHI7oEQLlEpnFFu0=tY|t0@1%~~dWHCnXJ=}(=k9IfqUB0fC z9X&s=7K3q~-?)pjk8iN~ornKf=Kjd@`z|GGNsi@DPu21eqBh5zWTN-HM;zcY;>CF2 z?i5<~xRL;L0hp5hMW!_sV>6}}Y?vvvhxE`L_VeyGR4~Y|#)GuGJz@|1V*l>X{-rb}A1ns@VBvw$?fVwG=_-AK z{O7;Gb)I{=)_C{%=Pr+NvH4?I*7DO+;4k*5yVzTdTUq9%Kl~F@T8v4+^qW19_#hV) z6-3f=s9s2o{KothVlb=2o?4^*mZT|rq`@IjY90L}O?mLhOwX$<=y6q6TnBzRVfBUF zGK)RJYe`b-40g3mwF`zi*fWMogR$}Uj^>@P&io)9aiR3t$TK~we2st7cztYY^{pz0 zDlYIz)ZjOfGl3ovek^}>YlMzkU3Cv zut(z~E~$XaAAirw`3a-|ySDZOVGr;ZFWfYb?}9zA>^=OYG^e)16#JVjPX4biAM!%D zO{cBy8wkJH_uY+nng{GP3G;Up+`-LX!`9U;>bt}92t4pdQbj9?y(BZ~!lva{?@|5A zv0#I@Rfq&9(OTLGs#8Tp48yO2VW>KET5U`VB@4?UT zE<>nRfbkgoI{SF^9AUsN_Snql<2(ckY_X$<0FTiie&;|IjtMfiTzDL5Y=pL{q z#0Gw>^6NK$8s%y2pPv5mHNBnd{l54=|!W=egYVJ+~75@|R|WTol3nehIoqlqLkYEGgI!C8m{%+myZ*OVGl)?S=4~ zEZBQ6^O48^zgn9cQ~rj17IF}xm280qs`@ep>PS`xma%ns#{B9xiUI1JW8|as*}uy{ zpeF+enUUc)BmBfzSlQ!wukYvy5b)!p^P|{#c89gUW1msY03E5Ly}qeBc}k#Zp5$i9 z-j}t-RR+ZDjJ21BN%IVM(%Jh96Z=y5fOL)*>UwcRlYhB&%tKnJRcMu)4XFL69rgyw9>axY zOn_$qkTQlx;4^(-zTV1hNF@Ah+GE=n^-_V@NTpxJtJxnr&tJmjW!lj_JVKC4Sm1kF zIiFWFXKI~b=V|z2-V^%+gL5vHrFqk_ zeg~}!vxEAP9ZFwxFXW zfXgOg`2)O@ScyQl;i53dH@txK_&@zsBF*Fa7WA^v%4k85PGaQS( zWDiI<`=pyM*iTi9K#L%v9|!nbv6P%*7ql>dI6%dkTIGQo!0QHc6@Q<$+}5Sn^hCJP zz#i&(K*{8X5NdqOyvf%Yd1*7K0CuVEt`^pQ^|HTJ$R))tK^$v;qk>f=!KL>^c{#Fb zhcROql>61fRMB(;t@c@r2We(0#w2e4%7C8DuCP+}s@SxxjW?;CcY;I%8UPreatBWI z7=q2gpa~tR>2mQUPI}AQwQyn2Ie*>(lyPG)^kR>PKJxjY_pIGl>yw#b{4E|j2 zyl(q?=N^pC&@%|$72%Bx*La%xYClmP*z**5a%%0h6Sw!b4yY=+FssM7KsgcQF#fCP zClM5Rv8SM-ta!2pEer_MOOn!^s*Th6Rab`UIDt+J|Ka{}{0bqIb_avU&)vu91 zz#nLnz!$8yy9yiwpwv$JwWY*O6kawM$@7c{9<0k~<6I_F01A(IBLruMdnR8V$Obr3 z8KnT}N@jdPJ;Ftrt)lcOGr;4#a>V#I1lbvd84N6ze-?GwsMi3*+4ECNOoAKu*&O2t zT|$Cv=V5UV_88!RO`zwpzV`SPYkFSA2Y7yPzxZ`JXHxge^PVn+DgV6A{0Wtsmum!& zKsLYwfj^tOhI_s*wy)(MoxT*k+7NXwyAcXzU<;HA2RtrCvFGMbI{A9mV0?0t82G*Q z9AE=-VOC`a{z?F7A7v0Z){)2e7x;*&37tq>#_R-S0NVL8l5&y3T!xLo%X_!&2=CDW zMdV5krO)rK^$P;u=QqJVqJ{*<_5|QPz`h3mDE;o?%j22Mi)_H(R|I!XP;EtU``li; zN4YQU*9=tS=iT89r62sryL;|t2<;=xz=;&VKJx_o&VTY%S;bT!Ex&Po@|CY(uUj3D zP%5lKX7=IpFT8Wu)A-Yxt`GR@q+0DgxpQwwtj8AU%6WaRGH z#G_xpOL{FoPwm{*@6X}_t;QAX5qo5dh2Pa(bTXpuMqc7O|G~)nzsIZI>5Mkkvjn2) zza%&k=KhKe(dPJ}J^C*8JDTBRGI0lTLJyQ-`RmM*`kH*CaCZc-UhWGdQSOMWY|t1e zudP-2Mz}H{w~m)>8q;c-YGI~vK%Lp~p8}7~XNQ0O6+9-+yvH7-WQbxT-QDxT(`h-7 zF9SM$?M;V$=QMM75syc&@h{gC4{HBe0pjL)OUJ)n5?xp0?@C|n-(vs@d_28wKJR9| zsNXw3G36qo=ijS?H@d$6Nb|uho*!_)FB8F@O~hDu&&vbINLp61!Ibqzp6BLSzU$h< z`jZH9nIXmyJ@D`{`KQcS!c}qdMY?e!NP9Wh?_HIzwii5raEv@tcGhKmjro~AQ_tNR z_RvLZ@e3M}CZCqa0HkH{=F+X3j-*5CdHBb4j)NzWOP<#$nG(f_BoDxH#;4*viqx8F?BS?Jdfer92l)&15 zruOoBPxpZ)dppkKOa2~fda41)I5HXs)G?iH2dK&|qrZHWBb3aWrr=tWE(1E@NCXH` zaW;HRjDQ{>hZ!Dg8z@|<4fbMyy)6kyXd5Wc%WXQyn9M$COOVTz+Df|gHPY#i5rVhYU^&&8Taq4o8F8pDv|O7BU!z_7<0iN$Ti5xDJ`(T?(@VN$2}9G zKUnphUH+SjaE15aqFw;Z`-UE`P`-oum0+vG*O%`^G1}r486o#Mve;jdX?%SDREivR zMGE%x9>>Ze9%2>y;62z^#dFC^5}E;>x<;P8`UETg&3~7_M;vWzXn<-oC+9xWRo4@3 z2L3|67HNTRI9emY9C(c>{(S}jNwGE(r}jREwNr68i4tg+1THAFw*b$MfIaB7bB;g`@W? z7X_3;H+8Xi1f6&B@;X4aAU^mj-3*K2>W$QO2~n5tIWmoKqY$9AFeg2Sz5o(D9(l!h=1UG>2;KYUc{%m&VZ(ZR)X_yzv~cdp@X}$b;Hi z`!lrwd8HTKD+i#T|I6L+_qTFvR$K*7GKr@1afUyQ|4|pU9~;14<6I^kGlj{5>}*=q z{{fi6-MM7`3w%(?k;~?sTfO9NHQQpjoNy^%7v@Xp`Kf)Ec^Z6FEroqJ*4>h|*o%Gj z7=VLT;7>k&cSxWO;FqSG(_4f6az&M`%NP#n9mcK@n#m#H%#nq7{$OI}7`Dp-%yNt1cfy#jlrZ z-m%!D#|v=q!)}4S0Eg3K28#FVKboJj4k9EdIXcR7#Zl+0DDW9npnra12I0Oc%?-bh8As(v*Cm4XfW&Yd8`NO9DvPF60fJaBea#G+8|Z29U&3A<LD1VH8>{djay zpl#6cTc*W8T8|EmObqtNB-8+C30mdz*H=VyXe5V26^RVBpaK#F+>&}#6%Y196c`{C zs_RRLp-37@b(G%2yM5LY7cRgpkbX&QTxrOx2^oIChRBd&FvEv(cXfYE|Gu;fJ}BpZ z@!t)5>)vV7rV9L>FYSiVDP4a4mJu5O^0|f~z7%%0Jlff4|6oigClwyC4_d*pEJ>O} zGf))El{;gM^;%`4yz%`RIgxx8r3g1tMyDfF#A+<2pw-KuJ_pK88HgL?I4Fz(OBpaW zZ6h@aG{voVZ}=(#je{S}B8RGb5p5>AUZvk*4CGc3_+Zaa^Z0J?*74sWzJLC?#orO2 zAU@;94g0zC8-4Ja>kh_fq-giZTtIkfUJWbRfat zK|(W5rYerm0b5TjT_gm>Jh+SM=Lp6v3B|P#s5=H9o)!CBU(9{!>$c34^%N1=5 zmvHD<_?x;X(+?x(**yOSMbo#_-@rx*Z?S^A%3N{&@6A1SLp5`F^)dgGfLBAmzGrVT ztN;CI1A2fsT%lsYSnLHDj>0c^2g|^QW~<6I4-NPs#OnQ+4U6UHZGF_8yM1rs<5$!O z`9_F5?#!i1k2MBz6XpMHP}UfCy?~{N+7haoVyH8 zBRxjTOA)lf{PFQqM%9n`{F|j6*zdFX!TTou8v_>U&H5eL-nsVkA;i6{dwN^xf6IV- z;nR8&uB82|AK4P`3kBhCX8S%{8+nWLSo>hF>emv0boE=L&wCu@M9 z{jw}Ozx^C>>rjCZ<|+38L#F;4Xa%(jm-HS$KH6V}PBD!EMn2=u-u@?49~DoI6~Ugu zV4wCmn=|>`qC0x5`=^VPoK9yj)EcIyBsLON`Q7FxColG_s7DV$B-;F_(3g3>Z`BAM z)fd@={UCo27q=TMj4q!twrlNMyVlw!?IS1L@CP3OC>ktnNRX$Eg?WsBwLf@wS-+|u zuxkSj_OrS>Aw46>$7CYMCqD3$Pm**Wtw;+zsEh$n{}uqS(G3esFvF^kRp@SvYdk;~6Ytap&MoMl_#R&C2npf~NMfLj8k#TfyN$%BfK zuP+hvh>XuX<_Ch$!44H>T^H0t2+e?*mpGa{W{m9cwUHp`R*eRX zWNH95vpR?J2{{rcAW-vwt^QbMh*|#LOh)_b>FLM25BV%X&NAS=5A?7Bnv?WSMMFq{ z)Zft>dcTd=2ITjOv48%V(?m%8ZE4u)Vd5o?Hv)L?i+BgZ>ru|0Z@-rC&= zU(_$iqv#R6$Bi0oLMqHSqMH7-y+9IKV-S}L6rsnJjBq!u&Sl!y7!1-k$jSMeyZB>b zw^(U_fBoUd>nDzUB4NAHb(J3XpD?*{K*ay}?}B-7oc|22TmjZ|y??RI>2d-JkvOec z0rr#`T?_PX&w23A@=t{mfYA?Vp1^fu_+np)EFsvazdeJ`FgRjM@@z1?$&PoRQm2p3 zaaovmafPuF5=5-+5&Id>{ceh-!2tg%do{7`Pd_;V@Q0u8KIQ93dDi|b*njzyAIau* zCXO%3q(GkAetrG^GoQV~<tnYj|z zu_>3xC=!YL@BWPDJx;yGU|-1T<`Uzvqck1^ki}%y4oA3=b<+xw^d0+0@BaJUSZQgL zgy6Lg@p!iq5UiJ}-!_5AX>Be&QEC ze1kE-A1}b`U%Y9h#lx03Xf%_3l#u24il;<^TBg^qtETGe2DM=n7EF-^Yf1X+2}efVENvgN$t! zc!4~Mo)=-X0a*vVZ0$>h$G>|ry81gnzvG7rrCiV6R;9^Y?C+Jptj2&oz^P>+uX-KS5{a>0%PsOl5*_sF|U z1wQ920lNH)%U~mjp=L0=QJK#eFe+E`U_T!)$iOnwwfXbY`76+Se;I(kS=j^4i~oQ^ zq@LYv{@yy+7uCnIr|3iWDfxJNATK4`yahb@(Kg)kgu&I?h^Bg9)$c-_kHqoXkC0bE zE#}ALgcjs9rzWQ4#1P^g#fpfd?wrBCjA<{_4cHTYN`+YatmV}5zz_B)eNm4ADE6U3 zayS?Gfj+SYcUSpI}OMFPuwBqB(GvxnONAy)wrn-p~ zARUa0{W1WJ@74|5b{P*u4E8@?7kkfv{L8saLXCeS=+idzRviTCWAK{@_E{!;d!4X9 zPaHnD0X$^Q2>YRe4Dt;w?EMGVdwItF^rGIInV0+i>8)ImyPYcbTgEN9yK|N~Hh;8v z1A)78Kh!NP%%Xwoa=Ofa(gA(Io0CYIZLI9MjsYJMgaI5t1sgzu93fFaTJIb7$ZjmB zB>`IxO2kC)d|^*ty9xk%yD0Ft2H*0@O2YM6`yT7g#|&ud%Yd9y^3yMg5>p>4{9vo+ zGXAmi!9F{_*%u1%A%Q_mMwm5yhS#0^a5u5-$4{*8lJhpM{Uz-EO?4>p^p9_3SIHKL z<8u#0ql8=FLKB-$?jXkv6<6dI+Q$NyPAC6xA@-BKyQqqjUik<{oCKR<-eNK^<&?7tg)X7xHe;MhXX|9k2Et4+S#Hr)R)G1{@L2od zQ!Z;rV2?ej^jaV~O&AfIpN-q1o^#B2LVA5XkYneG`x@&>g4qVZ0D%2&?6|~7@1yZ5 z{d=GK2imWnzhoOf%U7O3f6e1ZxXZHs4WCU2@J0GWdGYkk`OGgmsys~a*+29);{C7w zn<~$+Z!6w=sm+=M3*|N?h7e?-=;Q47)~G)D(_A7x&2O+*%L}<0nH)4eLK%ceXetQV zRDI)r9t-g_jP2e9-k*%+PYY=CHTwa$rXnqLV?UQJBhw~^$Gd4ZEW<)9e6ngATb1mKlA2IbJ_I|l&4 zx>vSlJ$--ms#qWZvTy*9_4hFeU=fd*$qfs8qFnK<>jb3zUvCD{8taE%M1DCHjURa@?qruQx>D=UkL5hxc+(BfRD5dc(;UqP zCeKeH@GC_;v;79B(b=?JcKu&_M$Yk;P!~tcg{F3kwH*MmPhtlW{q{PQRJ9ua??s6Met~G)QLud%_%3dfXPn7tCN&7h#TzgVRA*pdIa$xcr`bO!(F6PIzm zXa?}@&p&kE2n{4yO{zbC)?7(%kOhehF|4iaW1hsyl{f;oumpHtqEB$k6?6lan|KWN z!{g8w47Lf=#RK_doNnCBW3x z{v_=LjRQq-qZ}^GuqN>928lmBA)R`FN9IoQ`0pEWwx=WC4j;!I!?ZB&QD%Pz`8HY`7AS&9EI39^#jIVsD+dC@sp`T0=qr$#!#a9}uC0$U{78pBLk7h5 z8)}P9{GR+bzb5LuKjlm)qwK6Gq#JM9s}=?YhSGmBA~N06v)#3P~XjO8G}-f1dg=GaxzZtxev)uN>a_z@z>h<#rByB0P9ZF4C29$33IZ zIUJG=$C&7U8}v23_hT#vC(QVRUsrhBs6BX_2l6S4S<7H=nbaO01YVVf5_yZUV)qub ztVmg?Jv_tdO0IJ$Tgo~zR;>ZU<<6WLJBfSIb$a$$Grk)2zv+!IZi@VpU(WZ)_W!Gg zVwFF2O36qO>*GTV9QP9VMI?pb2XaS}!B^fRbLbP<{s5D|#N?+184i4{MuQ7kgmK;Q zt8C}XA*?lX`^OY-N4$nWt^i&(kF{fATN~SjI8~WZl@ z>GM3RzVZURos@0bu&egjmoM$2o{I_3U?{l%dN`O`>ojJheCaVMi<%yGvVILPMAPwNK&g^BcYRf zO^tc4Ll1fbxjsp&SvUVJo~eG}RDuD?$OSNYK!8;El3?01R4aM`FDX)jv_S-Bt|$a= zr;YeZAV;~KphkDRgsb{D@ZO!c_oe&t;1@eJ3a6qe3prW;r*lTc@A1Bs2dV>DfmGGq za9p7rBbyd9=Zst3L)ErylS-w1NRQ|09+xinYOIw9aIr5QVB2Bn-fhnakTt89A9xWw zdImm_BhpJS4oDaF_KyM{X7T}O1$%V5Y3N$;Av54HE{Ev2FA8qq`Fwjx1OIk!!tjkI%*oX^^PHA$SKf6DG2Y<}B@2aexeyCv0gv#yPlZL;Z2o4vAA?Uz-(m$Hkk z!Db%OQ*bc9#Qj!%OO^*nZ1Jc(o*@`d^VY6ipV8q@i%oqvD(aMPr!3v<(K&YoH`$d@ zz_DluF{^InX|Y=bLUM!g0NO5Jg+|oiRb)ptIX~HcqFGg7Z>g;95OTO=dwNC3>?JhX zh4_IedLSpSS?O+UPww)S#NMrGsWFM^Y^Z~gN})qKHtTXIULUqgIy)`d+fdJVzY$fP zbv5q;@78{|7iPiVQq4wBMT5Mm9Q4v~l++ku9+h=&rqdxVz;UsbHL>Ugi<1vF_O||k zKf76LsJ2@O!qz~cfCnT-`UNvL-?YdNiYRfPzu|V>XnbfOkI1NXpM4&`@_dGTtuxqb zRe!gZ5+0EfYZKfS?P~W zdmd*2M}UjIJlV}6_>~@ZRmtNSGmBMF20f7yNA%)pJ zNaY!ADvtKUR;{;2?W%4^_7=orwig$i&KXT#s?n5_1r_XV?gQPpyY2*_Q-2TqhStb| zUm$cKP81HVk3f9xHvGXm=!$1@z9OE5b}K^^z?A^vk%K)KYu&_enrbAz?>wJtI9ltR zL{}jEno-$zHp@JsmD#7Z3OAF980|;Du-n?jVv0m+yf5Kf?FzxFxZ1dxchh1!oXsZq zD_e+ip^GTBFq9M6YrCvkf5jWLxO8vG8FUMkLXr4mF};zHNN0uSPm+)lafXe=t^}a7 zyJQQmeJbAylL->s7xrd=uGYy+Z!g>V{TrdK3-!N$)nxWheM8{HrES$#TI8`P_F~5w zF*dY$x6G8`JI3EYj6Unq>SeBXanuf2b_Xc8_U=J?md=?k%mz}-qtdeF7Rc&gP968IT+4IZu#bXnsTSv)_75+ZP(Gjd^EbO&n&^*Bwc;siRoqrl(-KV<{& ztnOXwY1AjOs~|sM(JOcQ47IK>66>!{Z$!^AzZfA^56f)+AD73tQ#ia*_!sZxY=N@= z5sf!^Ki$%Lmd#e>_$)h8MTmRt%4sJ-&n~s{j8{wPV+D=G47UL|XcbYA7}Ro+LI__G zTOlo?cZb5RDFt)qeBF|XTS#ZJ2pUwTCp@0Tb60CZH{X=|%9qFW4=Vf@YCXX%>?!c^$X|5_*%Nr8-1iiCE?Y*3Pjis6TMv9sSIBXWVa;v+ zNYy?YTe!B_D;vesxYSE7S>mVo2K!Sgg#+g8;otgY0JmslvA&2Lh5X}y2Hs$Hp7F-^mVRLo{rW$&|cVLDN4 z+MMWzg_vHw8Gehas%noum=96f^sbXk4`v>NGu8JMUk2mGKH1)Z3-He89p80!(5DXx z^qDS<2S}SPH8QSe28R>i2b{#~nc6>$x`5BGj?~$XgP%~#QQJPy{hLA)yd9BsycfgS zxfEpQA`NG&s@gl}i4v1O-8u(flL18Tv7#i)%LwnU_K z7l2n@h&RVhxchBZ@h9;PMPUr77Xb$fQ zJUyiEy*$eFFu&99SheYwLl4n~BeLla@m;0zV9|wG^{MKb=Z{9)x-)Q#P}}8c%p!-H z#>y7sM@-Wqp^f_Cofc|bTRDS8`dW=xCxYE*bu80`CT6Sm@lGb-G|v+PyrJ&>Fmi*g zy#b#v(ltO#S$H#!WFDuh@n7{JTRkS!_hTIT$~U^>&iyySee95ekC6@!J;v~^yPBh! z!(x}C&VryB4u4aY9ju4dL)Xx|kb3Veh2MEMqxWGcU|P!CBWh*?b7;d_;;jw(QeLg3 zws{=cFh-VA{hTu*zLmJPI?xXKrayR(zQn`}?#k7~eVvj8U7ew6q9C^*tY=~3#^SM@ z7vlZlZy@(qpauU2{}dhua*Sqn8sOFQ>Z(0*%%VaT_1MHdXL0e^vZIZECfq z@X8aEpE>_Tp@d4ddOunQ3miBK=gxCh7)L&+c_`iKZ5Zjh!$b2r$SikA7}df z&GUI8-YJSc@Jm0kwMUlStAFC4+r5lPD5*8^?^gCUH`6UjVil`Di{je7PZPqvdbt`5 z5YTWvbyJ&G{AJ=*41tz02Y zct)Hf=(>y>@d|*?*7{fso4)~uc%ORUnyq&VO>j5d4qei3)+rpmluYfa(N?k-GfZL7 zdKR;^eDjYU2)1VwR@|2sA5V!K4X5Kwd!KltVL4cl;1Zr)T?j=MeZ69Md2Ac!`4WLlcPG~ zr_X4KhM|cKnaifQZx+r_wBR7ZhJ zZRfbV;3mx+p7f@uZPixQ%-#+s`isJL=uatIZ&Vz%AzcO6OJw3+ge(`^U+mQJH%FVp z`%g`7jhc4b-PWo!%j}DNthR}1LaMx2tAhrMc!4=(D-1u4JKR+@+EUQEI_9J3MiH{h$t2v@oov``V|9vMKpzS7o?<>i{ziT+eb&?>U{AQTZ8~`y~d` zK4yA6)m4b1Y6IUN6BMo6u&&T7dJ7h_Hch|uM@dyx%?0*IQHXx|N;rk+U+9@;oc;V~<;u5x2uht{6%~tMV4Lo%vPTK!)C}n( -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - -HINSTANCE HInst; -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam); - - -int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE, LPTSTR, - int nCmdShow) -{ - HInst = HInstance; - - WNDCLASS wc; - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.lpszClassName = WndClassName; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = HInstance; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = static_cast( - GetStockObject(BLACK_BRUSH) - ); - - if (RegisterClass(&wc)) - { - HWND HWnd = - CreateWindow(WndClassName, - TEXT("PatBlt Tracking Rect Demo"), - WS_OVERLAPPEDWINDOW | WS_CAPTION | - WS_VISIBLE | WS_CLIPCHILDREN, - CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, - NULL, NULL, HInst, NULL); - - if (HWnd) - { - ShowWindow(HWnd, nCmdShow); - UpdateWindow(HWnd); - - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} -//------------------------------------------------------------------ - - -// image related -HDC HMemDC = NULL; -HBITMAP HOldBmp = NULL; -const char* filename = "PENGUIN.BMP"; -RECT RImage = {225, 110, 225, 110}; - -// tracking related -bool is_tracking = false; -HDC HScreenDC = NULL; -POINT PMouse = {0, 0}; -RECT RTrack = {0, 0, 0, 0}; -const int line_width = 5; - - -// utility function to map to/from window coordinates -void MapRect(IN HWND HWndFrom, IN HWND HWndTo, IN OUT RECT& RMap) -{ - MapWindowPoints( - HWndFrom, HWndTo, - reinterpret_cast(&RMap), 2 - ); -} -//------------------------------------------------------------------ - - -// utility function that uses the PatBlt function to -// render a tracking rectangle -void RenderTrackingRect(IN HDC HDestDC, IN const RECT& RRender) -{ - const int width = RRender.right - RRender.left; - const int height = RRender.bottom - RRender.top; - const DWORD dwROP3 = DSTINVERT; // experiment with others - - // render top bar - PatBlt(HDestDC, - RRender.left, RRender.top, - width, line_width, - dwROP3); - // render bottom bar - PatBlt(HDestDC, - RRender.left, RRender.bottom - line_width, - width, line_width, - dwROP3); - // render left bar - PatBlt(HDestDC, - RRender.left, RRender.top + line_width, - line_width, height - (2 * line_width), - dwROP3); - // render right bar - PatBlt(HDestDC, - RRender.right - line_width, RRender.top + line_width, - line_width, height - (2 * line_width), - dwROP3); - -} -//------------------------------------------------------------------ - - -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam) -{ - switch (Msg) - { - case WM_CREATE: - { - // create a memory DC - HMemDC = CreateCompatibleDC(NULL); - if (HMemDC) - { - // load the penguin bitmap - HBITMAP HBmp = static_cast( - LoadImage(HInst, filename, IMAGE_BITMAP, 0, 0, - LR_LOADFROMFILE | LR_DEFAULTSIZE) - ); - if (HBmp) - { - // get the bitmap's dimensions - BITMAP bmp; - if (GetObject(HBmp, sizeof(BITMAP), &bmp)) - { - RImage.right += bmp.bmWidth; - RImage.bottom += bmp.bmHeight; - - // realize the bitmap - HOldBmp = static_cast( - SelectObject(HMemDC, HBmp) - ); - } - else DeleteObject(HBmp); - } - } - break; - } - case WM_LBUTTONDOWN: - { - PMouse.x = LOWORD(LParam); - PMouse.y = HIWORD(LParam); - - RECT RClient; - if (PtInRect(&RImage, PMouse) && - GetClientRect(HWnd, &RClient)) - { - MapRect(HWnd, HWND_DESKTOP, RClient); - ClipCursor(&RClient); - - // grab a handle to the screen DC and clip - // all output to the client area of our window - HScreenDC = GetDC(NULL); - HRGN HClipRgn = CreateRectRgnIndirect(&RClient); - SelectClipRgn(HScreenDC, HClipRgn); - DeleteObject(HClipRgn); - - CopyRect(&RTrack, &RImage); - MapRect(HWnd, HWND_DESKTOP, RTrack); - - // render the first tracking rect - RenderTrackingRect(HScreenDC, RTrack); - is_tracking = true; - } - break; - } - case WM_MOUSEMOVE: - { - if (HScreenDC && is_tracking) - { - POINT PCurrent = {LOWORD(LParam), HIWORD(LParam)}; - const int dX = PCurrent.x - PMouse.x; - const int dY = PCurrent.y - PMouse.y; - - // erase the previous rectangle - RenderTrackingRect(HScreenDC, RTrack); - // update the postion - OffsetRect(&RTrack, dX, dY); - // render the new tracking rectangle - RenderTrackingRect(HScreenDC, RTrack); - - // update the mouse position - memcpy(&PMouse, &PCurrent, sizeof(POINT)); - } - break; - } - case WM_LBUTTONUP: - { - // clean up - if (is_tracking) - { - is_tracking = false; - SelectClipRgn(HScreenDC, NULL); - ReleaseDC(NULL, HScreenDC); - - InvalidateRect(HWnd, &RImage, true); - CopyRect(&RImage, &RTrack); - MapRect(HWND_DESKTOP, HWnd, RImage); - InvalidateRect(HWnd, &RImage, true); - - ClipCursor(NULL); - } - break; - } - case WM_PAINT: - { - PAINTSTRUCT ps; - HDC Hdc = BeginPaint(HWnd, &ps); - try - { - // - // TODO: Add palette support... - // - - // render the penguin - BitBlt(Hdc, RImage.left, RImage.top, - RImage.right - RImage.left, - RImage.bottom - RImage.top, - HMemDC, 0, 0, - SRCCOPY); - } - catch (...) - { - EndPaint(HWnd, &ps); - } - EndPaint(HWnd, &ps); - break; - } - case WM_DESTROY: - { - // clean up - if (HOldBmp) - { - DeleteObject(SelectObject(HMemDC, HOldBmp)); - } - if (HMemDC) - { - DeleteDC(HMemDC); - } - PostQuitMessage(0); - return 0; - } - } - return DefWindowProc(HWnd, Msg, WParam, LParam); -} -//------------------------------------------------------------------ diff --git a/rostests/tests/patblt/patblt.rbuild b/rostests/tests/patblt/patblt.rbuild deleted file mode 100644 index 339b2fceb6e..00000000000 --- a/rostests/tests/patblt/patblt.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - patblt.cpp - diff --git a/rostests/tests/polytest/polytest.cpp b/rostests/tests/polytest/polytest.cpp deleted file mode 100644 index c05293f3df5..00000000000 --- a/rostests/tests/polytest/polytest.cpp +++ /dev/null @@ -1,874 +0,0 @@ -// this is a little 'sandbox' application I put together that duplicates -// the 'guts' of the Polygon algorithm. It allows for quick turn-around -// in testing the algorithm to see what effect your changes have. -// -// Royce3 - -// the stuff immediately following is support so that the sandbox code -// is nearly identical to the real thing. -// search for the _tagFILL_EDGE struct to find the beginning of the -// real stuff. - -#include -#include -#include -#include -#include -#include - -#define FASTCALL -#define STDCALL -#define INT int -#define CLIPOBJ int -#define SURFOBJ int -#define PBRUSHOBJ int -#define MIX char -#define BOOL bool -#define TRUE true -#define FALSE false -#define CONST const -#define MmCopyFromCaller memmove -#define ALTERNATE 0 -#define WINDING 1 - -#define ASSERT assert - -typedef struct W -{ - int polyFillMode; -} W; - -typedef struct DC -{ - CLIPOBJ CombinedClip; - W w; -} DC, *PDC; - -typedef struct tagPOINT -{ - long x, y; -} POINT, *PPOINT, *LPPOINT; - -typedef struct RECTL -{ - long left, top, right, bottom; -} RECTL, *PRECTL; - -#define EngFreeMem free - -#define FL_ZERO_MEMORY 1 - -#define DPRINT1 printf("%i:",__LINE__);printf -inline void DPRINT(...){} - -#define SCREENX 25 -#define SCREENY 15 -char screen[SCREENY][SCREENX]; - -#define EDGE_CHAR '*' -#define FILL_CHAR 'o' - -void* EngAllocMem ( int zero, unsigned long size, int tag=0 ) -{ - void* p = malloc ( size ); - if ( zero ) - memset ( p, 0, size ); - return p; -} - -template -inline T MIN ( T a, T b ) -{ - return a < b ? a : b; -} - -template -inline T MAX ( T a, T b ) -{ - return a > b ? a : b; -} - -template -inline T abs ( T t ) -{ - return t < 0 ? -t : t; -} - -void putpixel ( int x, int y, char c ) -{ - ASSERT( x >= 0 && x < SCREENX && y >= 0 && y < SCREENY ); - if ( screen[y][x] == c ) - return; - if ( screen[y][x] == ' ' ) - screen[y][x] = c; - else - screen[y][x] = '#'; -} - -void IntEngLineTo ( - SURFOBJ*, - CLIPOBJ, - PBRUSHOBJ, - int x1, int y1, int x2, int y2, - RECTL*, - MIX mix ) -{ - int dx = x2 - x1; - int dy = y2 - y1; - int absdx = abs(dx); - int absdy = abs(dy); - int EMax = MAX(absdx,absdy); - int E = EMax/2; - int xinc = dx < 0 ? -1 : 1, - yinc = dy < 0 ? -1 : 1; - if ( !dy ) - { - while ( x1 != x2 ) - { - putpixel ( x1, y1, mix ); - x1 += xinc; - } - return; - } - if ( !dx ) - { - while ( y1 != y2 ) - { - putpixel ( x1, y1, mix ); - y1 += yinc; - } - return; - } - for ( int i = 0; i < EMax; i++ ) - { - putpixel ( x1, y1, mix ); - if ( absdy > absdx ) - { - y1 += yinc; - E += absdx; - if ( E >= EMax ) - { - E -= absdy; - x1 += xinc; - } - } - else - { - x1 += xinc; - E += absdy; - if ( E >= EMax ) - { - E -= absdx; - y1 += yinc; - } - } - } -} - -#define FILL_EDGE_ALLOC_TAG 0x45465044 - -/* -** This struct is used for book keeping during polygon filling routines. -*/ -typedef struct _tagFILL_EDGE -{ - /*Basic line information*/ - int FromX; - int FromY; - int ToX; - int ToY; - int dx; - int dy; - int absdx, absdy; - int x, y; - int xmajor; - - /*Active Edge List information*/ - int XIntercept[2]; - int Error; - int ErrorMax; - int XDirection, YDirection; - - /* The next edge in the active Edge List*/ - struct _tagFILL_EDGE * pNext; -} FILL_EDGE; - -typedef struct _FILL_EDGE_LIST -{ - int Count; - FILL_EDGE** Edges; -} FILL_EDGE_LIST; - -#if 0 -static -void -DEBUG_PRINT_ACTIVE_EDGELIST ( FILL_EDGE* list ) -{ - FILL_EDGE* pThis = list; - if (0 == list) - { - DPRINT1("List is NULL\n"); - return; - } - - while(0 != pThis) - { - //DPRINT1("EDGE: (%d, %d) to (%d, %d)\n", pThis->FromX, pThis->FromY, pThis->ToX, pThis->ToY); - DPRINT1("EDGE: [%d,%d]\n", pThis->XIntercept[0], pThis->XIntercept[1] ); - pThis = pThis->pNext; - } -} -#else -#define DEBUG_PRINT_ACTIVE_EDGELIST(x) -#endif - -/* -** Hide memory clean up. -*/ -static -void -FASTCALL -POLYGONFILL_DestroyEdgeList(FILL_EDGE_LIST* list) -{ - int i; - if ( list ) - { - if ( list->Edges ) - { - for ( i = 0; i < list->Count; i++ ) - { - if ( list->Edges[i] ) - EngFreeMem ( list->Edges[i] ); - } - EngFreeMem ( list->Edges ); - } - EngFreeMem ( list ); - } -} - -/* -** This makes and initiaizes an Edge struct for a line between two points. -*/ -static -FILL_EDGE* -FASTCALL -POLYGONFILL_MakeEdge(POINT From, POINT To) -{ - FILL_EDGE* rc = (FILL_EDGE*)EngAllocMem(FL_ZERO_MEMORY, sizeof(FILL_EDGE), FILL_EDGE_ALLOC_TAG); - - if (0 == rc) - return NULL; - - //DPRINT1("Making Edge: (%d, %d) to (%d, %d)\n", From.x, From.y, To.x, To.y); - //Now Fill the struct. - if ( To.y < From.y ) - { - rc->FromX = To.x; - rc->FromY = To.y; - rc->ToX = From.x; - rc->ToY = From.y; - rc->YDirection = -1; - - // lines that go up get walked backwards, so need to be offset - // by -1 in order to make the walk identically on a pixel-level - rc->Error = -1; - } - else - { - rc->FromX = From.x; - rc->FromY = From.y; - rc->ToX = To.x; - rc->ToY = To.y; - rc->YDirection = 1; - - rc->Error = 0; - } - - rc->x = rc->FromX; - rc->y = rc->FromY; - rc->dx = rc->ToX - rc->FromX; - rc->dy = rc->ToY - rc->FromY; - rc->absdx = abs(rc->dx); - rc->absdy = abs(rc->dy); - - rc->xmajor = rc->absdx > rc->absdy; - - rc->ErrorMax = MAX(rc->absdx,rc->absdy); - - rc->Error += rc->ErrorMax / 2; - - rc->XDirection = (rc->dx < 0)?(-1):(1); - - rc->pNext = 0; - - DPRINT("MakeEdge (%i,%i)->(%i,%i) d=(%i,%i) dir=(%i,%i) err=%i max=%i\n", - From.x, From.y, To.x, To.y, rc->dx, rc->dy, rc->XDirection, rc->YDirection, rc->Error, rc->ErrorMax ); - - return rc; -} -/* -** My Edge comparison routine. -** This is for scan converting polygon fill. -** First sort by MinY, then Minx, then slope. -** -** This comparison will help us determine which -** lines will become active first when scanning from -** top (min y) to bottom (max y). -** -** Return Value Meaning -** Negative integer element1 < element2 -** Zero element1 = element2 -** Positive integer element1 > element2 -*/ -static -INT -FASTCALL -FILL_EDGE_Compare(FILL_EDGE* Edge1, FILL_EDGE* Edge2) -{ - int e1 = Edge1->XIntercept[0] + Edge1->XIntercept[1]; - int e2 = Edge2->XIntercept[0] + Edge2->XIntercept[1]; - - return e1 - e2; -} - - -/* -** Insert an edge into a list keeping the list in order. -*/ -static -void -FASTCALL -POLYGONFILL_ActiveListInsert(FILL_EDGE** activehead, FILL_EDGE* NewEdge ) -{ - FILL_EDGE *pPrev, *pThis; - //DPRINT1("In POLYGONFILL_ActiveListInsert()\n"); - ASSERT ( activehead && NewEdge ); - if ( !*activehead ) - { - NewEdge->pNext = NULL; - *activehead = NewEdge; - return; - } - /* - ** First lets check to see if we have a new smallest value. - */ - if (FILL_EDGE_Compare(NewEdge, *activehead) <= 0) - { - NewEdge->pNext = *activehead; - *activehead = NewEdge; - return; - } - /* - ** Ok, now scan to the next spot to put this item. - */ - pThis = *activehead; - pPrev = NULL; - while ( pThis && FILL_EDGE_Compare(pThis, NewEdge) < 0 ) - { - pPrev = pThis; - pThis = pThis->pNext; - } - - ASSERT(pPrev); - NewEdge->pNext = pPrev->pNext; - pPrev->pNext = NewEdge; - //DEBUG_PRINT_ACTIVE_EDGELIST(*activehead); -} - -/* -** Create a list of edges for a list of points. -*/ -static -FILL_EDGE_LIST* -FASTCALL -POLYGONFILL_MakeEdgeList(PPOINT Points, int Count) -{ - int CurPt = 0; - FILL_EDGE_LIST* list = 0; - FILL_EDGE* e = 0; - - if ( 0 == Points || 2 > Count ) - return 0; - - list = (FILL_EDGE_LIST*)EngAllocMem(FL_ZERO_MEMORY, sizeof(FILL_EDGE_LIST), FILL_EDGE_ALLOC_TAG); - if ( 0 == list ) - goto fail; - list->Count = 0; - list->Edges = (FILL_EDGE**)EngAllocMem(FL_ZERO_MEMORY, Count*sizeof(FILL_EDGE*), FILL_EDGE_ALLOC_TAG); - if ( !list->Edges ) - goto fail; - memset ( list->Edges, 0, Count * sizeof(FILL_EDGE*) ); - - for ( CurPt = 1; CurPt < Count; ++CurPt ) - { - e = POLYGONFILL_MakeEdge ( Points[CurPt-1], Points[CurPt] ); - if ( !e ) - goto fail; - // if a straight horizontal line - who cares? - if ( !e->absdy ) - EngFreeMem ( e ); - else - list->Edges[list->Count++] = e; - } - e = POLYGONFILL_MakeEdge ( Points[CurPt-1], Points[0] ); - if ( !e ) - goto fail; - if ( !e->absdy ) - EngFreeMem ( e ); - else - list->Edges[list->Count++] = e; - return list; - -fail: - DPRINT1("Out Of MEMORY!!\n"); - POLYGONFILL_DestroyEdgeList ( list ); - return 0; -} - - -/* -** This slow routine uses the data stored in the edge list to -** calculate the x intercepts for each line in the edge list -** for scanline Scanline. -**TODO: Get rid of this floating point arithmetic -*/ -static -void -FASTCALL -POLYGONFILL_UpdateScanline(FILL_EDGE* pEdge, int Scanline) -{ - if ( 0 == pEdge->dy ) - return; - - ASSERT ( pEdge->FromY <= Scanline && pEdge->ToY > Scanline ); - - if ( pEdge->xmajor ) - { - int steps; - - ASSERT ( pEdge->y == Scanline ); - - // now shoot to end of scanline collision - steps = (pEdge->ErrorMax-pEdge->Error-1)/pEdge->absdy; - if ( steps ) - { - // record first collision with scanline - int x1 = pEdge->x; - pEdge->x += steps * pEdge->XDirection; - pEdge->Error += steps * pEdge->absdy; - ASSERT ( pEdge->Error < pEdge->ErrorMax ); - pEdge->XIntercept[0] = MIN(x1,pEdge->x); - pEdge->XIntercept[1] = MAX(x1,pEdge->x); - } - else - { - pEdge->XIntercept[0] = pEdge->x; - pEdge->XIntercept[1] = pEdge->x; - } - - // we should require exactly 1 step to step onto next scanline... - ASSERT ( (pEdge->ErrorMax-pEdge->Error-1) / pEdge->absdy == 0 ); - pEdge->x += pEdge->XDirection; - pEdge->Error += pEdge->absdy; - ASSERT ( pEdge->Error >= pEdge->ErrorMax ); - - // now step onto next scanline... - pEdge->Error -= pEdge->absdx; - pEdge->y++; - } - else // then this is a y-major line - { - pEdge->XIntercept[0] = pEdge->x; - pEdge->XIntercept[1] = pEdge->x; - - pEdge->Error += pEdge->absdx; - pEdge->y++; - - if ( pEdge->Error >= pEdge->ErrorMax ) - { - pEdge->Error -= pEdge->ErrorMax; - pEdge->x += pEdge->XDirection; - ASSERT ( pEdge->Error < pEdge->ErrorMax ); - } - } - - DPRINT("Line (%d, %d) to (%d, %d) intersects scanline %d at (%d,%d)\n", - pEdge->FromX, pEdge->FromY, pEdge->ToX, pEdge->ToY, Scanline, pEdge->XIntercept[0], pEdge->XIntercept[1] ); -} - -/* -** This method updates the Active edge collection for the scanline Scanline. -*/ -static -void -STDCALL -POLYGONFILL_BuildActiveList ( int Scanline, FILL_EDGE_LIST* list, FILL_EDGE** ActiveHead ) -{ - int i; - - ASSERT ( list && ActiveHead ); - *ActiveHead = 0; - for ( i = 0; i < list->Count; i++ ) - { - FILL_EDGE* pEdge = list->Edges[i]; - ASSERT(pEdge); - if ( pEdge->FromY <= Scanline && pEdge->ToY > Scanline ) - { - POLYGONFILL_UpdateScanline ( pEdge, Scanline ); - POLYGONFILL_ActiveListInsert ( ActiveHead, pEdge ); - } - } -} - -/* -** This method fills the portion of the polygon that intersects with the scanline -** Scanline. -*/ -static -void -STDCALL -POLYGONFILL_FillScanLineAlternate( - PDC dc, - int ScanLine, - FILL_EDGE* ActiveHead, - SURFOBJ *SurfObj, - PBRUSHOBJ BrushObj, - MIX RopMode ) -{ - FILL_EDGE *pLeft, *pRight; - - if ( !ActiveHead ) - return; - - pLeft = ActiveHead; - pRight = pLeft->pNext; - ASSERT(pRight); - - while ( NULL != pRight ) - { - int x1 = pLeft->XIntercept[0]; - int x2 = pRight->XIntercept[1]; - if ( x2 > x1 ) - { - RECTL BoundRect; - BoundRect.top = ScanLine; - BoundRect.bottom = ScanLine + 1; - BoundRect.left = x1; - BoundRect.right = x2; - - DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine); - IntEngLineTo( SurfObj, - dc->CombinedClip, - BrushObj, - x1, - ScanLine, - x2, - ScanLine, - &BoundRect, // Bounding rectangle - RopMode); // MIX - } - pLeft = pRight->pNext; - pRight = pLeft ? pLeft->pNext : NULL; - } -} - -static -void -STDCALL -POLYGONFILL_FillScanLineWinding( - PDC dc, - int ScanLine, - FILL_EDGE* ActiveHead, - SURFOBJ *SurfObj, - PBRUSHOBJ BrushObj, - MIX RopMode ) -{ - FILL_EDGE *pLeft, *pRight; - int x1, x2, winding = 0; - RECTL BoundRect; - - if ( !ActiveHead ) - return; - - BoundRect.top = ScanLine; - BoundRect.bottom = ScanLine + 1; - - pLeft = ActiveHead; - winding = pLeft->YDirection; - pRight = pLeft->pNext; - ASSERT(pRight); - - // setup first line... - x1 = pLeft->XIntercept[0]; - x2 = pRight->XIntercept[1]; - - pLeft = pRight; - pRight = pLeft->pNext; - winding += pLeft->YDirection; - - while ( NULL != pRight ) - { - int newx1 = pLeft->XIntercept[0]; - int newx2 = pRight->XIntercept[1]; - if ( winding ) - { - // check and see if this new line touches the previous... - if ( (newx1 >= x1 && newx1 <= x2) - || (newx2 >= x1 && newx2 <= x2) - || (x1 >= newx1 && x1 <= newx2) - || (x2 >= newx2 && x2 <= newx2) - ) - { - // yup, just tack it on to our existing line - x1 = MIN(x1,newx1); - x2 = MAX(x2,newx2); - } - else - { - // nope - render the old line.. - BoundRect.left = x1; - BoundRect.right = x2; - - DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine); - IntEngLineTo( SurfObj, - dc->CombinedClip, - BrushObj, - x1, - ScanLine, - x2, - ScanLine, - &BoundRect, // Bounding rectangle - RopMode); // MIX - - x1 = newx1; - x2 = newx2; - } - } - pLeft = pRight; - pRight = pLeft->pNext; - winding += pLeft->YDirection; - } - // there will always be a line left-over, render it now... - BoundRect.left = x1; - BoundRect.right = x2; - - DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine); - IntEngLineTo( SurfObj, - dc->CombinedClip, - BrushObj, - x1, - ScanLine, - x2, - ScanLine, - &BoundRect, // Bounding rectangle - RopMode); // MIX -} - -//When the fill mode is ALTERNATE, GDI fills the area between odd-numbered and -//even-numbered polygon sides on each scan line. That is, GDI fills the area between the -//first and second side, between the third and fourth side, and so on. - -//WINDING Selects winding mode (fills any region with a nonzero winding value). -//When the fill mode is WINDING, GDI fills any region that has a nonzero winding value. -//This value is defined as the number of times a pen used to draw the polygon would go around the region. -//The direction of each edge of the polygon is important. - -BOOL -STDCALL -FillPolygon( - PDC dc, - SURFOBJ *SurfObj, - PBRUSHOBJ BrushObj, - MIX RopMode, - CONST PPOINT Points, - int Count, - RECTL BoundRect ) -{ - FILL_EDGE_LIST *list = 0; - FILL_EDGE *ActiveHead = 0; - int ScanLine; - - void - STDCALL - (*FillScanLine)( - PDC dc, - int ScanLine, - FILL_EDGE* ActiveHead, - SURFOBJ *SurfObj, - PBRUSHOBJ BrushObj, - MIX RopMode ); - - DPRINT("FillPolygon\n"); - - /* Create Edge List. */ - list = POLYGONFILL_MakeEdgeList(Points, Count); - /* DEBUG_PRINT_EDGELIST(list); */ - if (NULL == list) - return FALSE; - - if ( WINDING == dc->w.polyFillMode ) - FillScanLine = POLYGONFILL_FillScanLineWinding; - else /* default */ - FillScanLine = POLYGONFILL_FillScanLineAlternate; - - /* For each Scanline from BoundRect.bottom to BoundRect.top, - * determine line segments to draw - */ - for ( ScanLine = BoundRect.top; ScanLine < BoundRect.bottom; ++ScanLine ) - { - POLYGONFILL_BuildActiveList(ScanLine, list, &ActiveHead); - //DEBUG_PRINT_ACTIVE_EDGELIST(ActiveHead); - FillScanLine ( dc, ScanLine, ActiveHead, SurfObj, BrushObj, RopMode ); - } - - /* Free Edge List. If any are left. */ - POLYGONFILL_DestroyEdgeList(list); - - return TRUE; -} - - - - - -// this is highly hacked from W32kPolygon... -BOOL -Polygon ( CONST PPOINT UnsafePoints, int Count, int polyFillMode ) -{ - BOOL ret; - RECTL DestRect; - int CurrentPoint; - PPOINT Points; - SURFOBJ* SurfObj = 0; - DC dc; - PBRUSHOBJ OutBrushObj = 0; - - dc.CombinedClip = 0; - dc.w.polyFillMode = polyFillMode; - - DPRINT1("In W32kPolygon()\n"); - - if ( NULL == UnsafePoints || Count < 2) - { - DPRINT1("ERROR_INVALID_PARAMETER\n"); - return FALSE; - } - - /* Copy points from userspace to kernelspace */ - Points = (PPOINT)EngAllocMem(0, Count * sizeof(POINT)); - if (NULL == Points) - { - DPRINT1("ERROR_NOT_ENOUGH_MEMORY\n"); - return FALSE; - } - MmCopyFromCaller(Points, UnsafePoints, Count * sizeof(POINT)); - if ( memcmp ( Points, UnsafePoints, Count * sizeof(POINT) ) ) - { - free(Points); - return FALSE; - } - - DestRect.left = Points[0].x; - DestRect.right = Points[0].x; - DestRect.top = Points[0].y; - DestRect.bottom = Points[0].y; - - for (CurrentPoint = 1; CurrentPoint < Count; ++CurrentPoint) - { - DestRect.left = MIN(DestRect.left, Points[CurrentPoint].x); - DestRect.right = MAX(DestRect.right, Points[CurrentPoint].x); - DestRect.top = MIN(DestRect.top, Points[CurrentPoint].y); - DestRect.bottom = MAX(DestRect.bottom, Points[CurrentPoint].y); - } - - // Draw the Polygon Edges with the current pen - for (CurrentPoint = 0; CurrentPoint < Count; ++CurrentPoint) - { - POINT To, From; //, Next; - - /* Let CurrentPoint be i - * if i+1 > Count, Draw a line from Points[i] to Points[0] - * Draw a line from Points[i] to Points[i+1] - */ - From = Points[CurrentPoint]; - if ( CurrentPoint + 1 >= Count) - { - To = Points[0]; - } - else - { - To = Points[CurrentPoint + 1]; - } - - DPRINT1("Polygon Making line from (%d,%d) to (%d,%d)\n", From.x, From.y, To.x, To.y ); - IntEngLineTo(SurfObj, - dc.CombinedClip, - OutBrushObj, - From.x, - From.y, - To.x, - To.y, - &DestRect, - EDGE_CHAR); /* MIX */ - } - /* determine the fill mode to fill the polygon. */ - ret = FillPolygon(&dc, SurfObj, OutBrushObj, FILL_CHAR, Points, Count, DestRect ); - free(Points); - - return ret; -} - - -int main() -{ - memset ( screen, ' ', sizeof(screen) ); - POINT pts[] = - { -#if 0 - { 0, 0 }, - { 12, 4 }, - { 4, 8 }, -#elif 0 - { 3, 0 }, - { 0, 3 }, - { 3, 6 }, -#elif 0 - { 1, 1 }, - { 3, 1 }, - { 3, 3 }, - { 1, 3 } -#elif 0 - { 0, 0 }, - { 4, 0 }, - { 4, 4 }, - { 8, 4 }, - { 8, 8 }, - { 4, 8 }, - { 4, 4 }, - { 0, 4 }, -#else - { 4, 12 }, - { 12, 0 }, - { 18, 12 }, - { 4, 4 }, - { 20, 4 } -#endif - }; - const int pts_count = sizeof(pts)/sizeof(pts[0]); - - // use ALTERNATE or WINDING for 3rd param - Polygon ( pts, pts_count, ALTERNATE ); - - // print out our "screen" - for ( int y = 0; y < SCREENY; y++ ) - { - for ( int x = 0; x < SCREENX; x++ ) - { - printf("%c", screen[y][x] ); - } - printf("\n"); - } - DPRINT1("Done!\n"); - (void)getch(); -} -/* EOF */ diff --git a/rostests/tests/polytest/polytest.dsp b/rostests/tests/polytest/polytest.dsp deleted file mode 100644 index 8151a7c682e..00000000000 --- a/rostests/tests/polytest/polytest.dsp +++ /dev/null @@ -1,88 +0,0 @@ -# Microsoft Developer Studio Project File - Name="polytest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=polytest - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "polytest.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "polytest.mak" CFG="polytest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "polytest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "polytest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "polytest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "polytest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "polytest - Win32 Release" -# Name "polytest - Win32 Debug" -# Begin Source File - -SOURCE=.\polytest.cpp -# End Source File -# End Target -# End Project diff --git a/rostests/tests/polytest/polytest.dsw b/rostests/tests/polytest/polytest.dsw deleted file mode 100644 index c09be21753b..00000000000 --- a/rostests/tests/polytest/polytest.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "polytest"=".\polytest.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/rostests/tests/polytest/polytest.rbuild b/rostests/tests/polytest/polytest.rbuild deleted file mode 100644 index 03fb4728def..00000000000 --- a/rostests/tests/polytest/polytest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - polytest.cpp - diff --git a/rostests/tests/popupmenu/popupmenu.c b/rostests/tests/popupmenu/popupmenu.c deleted file mode 100644 index 5fc41f3c061..00000000000 --- a/rostests/tests/popupmenu/popupmenu.c +++ /dev/null @@ -1,102 +0,0 @@ -#include -#include -#include -#include "resource.h" - -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = "MenuTestClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.lpszMenuName = (LPCTSTR)IDM_MAINMENU; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("MenuTestClass", - "PopupMenu Test", - WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return msg.wParam; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) - { - case WM_COMMAND: - { - switch(LOWORD(wParam)) - { - case IDM_EXIT: - PostQuitMessage(0); - break; - } - break; - } - case WM_RBUTTONUP: - { - POINT pos; - HMENU Menu; - - pos.x = LOWORD(lParam); - pos.y = HIWORD(lParam); - ClientToScreen(hWnd, &pos); - - if((Menu = GetMenu(hWnd)) && (Menu = GetSubMenu(Menu, 1))) - { - TrackPopupMenu(Menu, 0, pos.x, pos.y, 0, hWnd, NULL); - } - break; - } - case WM_DESTROY: - { - PostQuitMessage(0); - break; - } - default: - { - return DefWindowProc(hWnd, msg, wParam, lParam); - } - } - return 0; -} diff --git a/rostests/tests/popupmenu/popupmenu.rbuild b/rostests/tests/popupmenu/popupmenu.rbuild deleted file mode 100644 index 0373de58978..00000000000 --- a/rostests/tests/popupmenu/popupmenu.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - . - kernel32 - user32 - gdi32 - popupmenu.c - popupmenu.rc - diff --git a/rostests/tests/popupmenu/popupmenu.rc b/rostests/tests/popupmenu/popupmenu.rc deleted file mode 100644 index 75256967add..00000000000 --- a/rostests/tests/popupmenu/popupmenu.rc +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include "resource.h" - -IDM_MAINMENU MENU LOADONCALL MOVEABLE DISCARDABLE -{ - POPUP "&File" - { - MENUITEM "&New\tCtrl+N", 1 - MENUITEM "&Open\tCtrl+O", 2 - POPUP "Open &Recent" - { - MENUITEM "&1", 11 - MENUITEM "&2", 12 - MENUITEM "&3", 13 - MENUITEM "&4", 14 - MENUITEM "&5", 15 - MENUITEM "&6", 16 - MENUITEM "&7", 17 - MENUITEM "&8", 18 - MENUITEM "&9", 19 - } - MENUITEM SEPARATOR - MENUITEM "&Save\tCtrl+S", 3 - MENUITEM "Save &as...", 4 - MENUITEM SEPARATOR - MENUITEM "E&xit\tAlt-F4", IDM_EXIT - } - POPUP "&Edit" - { - MENUITEM "&Undo\tCtrl+Z", 20 - MENUITEM "&Redo\tShift+Ctrl+Z", 21 - MENUITEM SEPARATOR - MENUITEM "&Cut\tCtrl+X", 22 - MENUITEM "&Copy\tCtrl+C", 23 - MENUITEM "&Paste\tCtrl+V", 24 - MENUITEM SEPARATOR - MENUITEM "Select &all", 25 - MENUITEM "&Delete\tDel", 26 - } - POPUP "&Help" - { - MENUITEM "&Help Topics\tF1", 30 - MENUITEM SEPARATOR - MENUITEM "&About...", 31 - } -} diff --git a/rostests/tests/popupmenu/resource.h b/rostests/tests/popupmenu/resource.h deleted file mode 100644 index b4929dbf2d2..00000000000 --- a/rostests/tests/popupmenu/resource.h +++ /dev/null @@ -1,2 +0,0 @@ -#define IDM_MAINMENU 101 -#define IDM_EXIT 199 diff --git a/rostests/tests/primitives/mk_font.cpp b/rostests/tests/primitives/mk_font.cpp deleted file mode 100644 index 650fdfe4277..00000000000 --- a/rostests/tests/primitives/mk_font.cpp +++ /dev/null @@ -1,69 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 4 - Utility functions -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -#include - -#include "mk_font.h" -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - -namespace font { - -// creates a logical font -HFONT MakeFont( - IN HDC hDestDC, // handle to target DC - IN LPCSTR typeface_name, // font's typeface name - IN int point_size, // font's point size - IN const BYTE charset, // font's character set - IN const DWORD style // font's styles - ) -{ - // - // NOTE: On Windows 9x/Me, GetWorldTransform is not - // supported. For compatibility with these platforms you - // should initialize the XFORM::eM22 data member to 1.0. - // - XFORM xf = {0, 0, 0, 1.0, 0, 0}; - GetWorldTransform(hDestDC, &xf); - int pixels_per_inch = GetDeviceCaps(hDestDC, LOGPIXELSY); - - POINT PSize = { - 0, - -MulDiv(static_cast(xf.eM22 * point_size + 0.5), - pixels_per_inch, 72) - }; - - HFONT hResult = NULL; - if (DPtoLP(hDestDC, &PSize, 1)) - { - LOGFONT lf; - memset(&lf, 0, sizeof(LOGFONT)); - - lf.lfHeight = PSize.y; - lf.lfCharSet = charset; - lstrcpyn(reinterpret_cast(&lf.lfFaceName), - typeface_name, LF_FACESIZE); - - lf.lfWeight = (style & FS_BOLD) ? FW_BOLD : FW_DONTCARE; - lf.lfItalic = (style & FS_ITALIC) ? true : false; - lf.lfUnderline = (style & FS_UNDERLINE) ? true : false; - lf.lfStrikeOut = (style & FS_STRIKEOUT) ? true : false; - - // create the logical font - hResult = CreateFontIndirect(&lf); - } - return hResult; -} -//------------------------------------------------------------------------- - -} // namespace font diff --git a/rostests/tests/primitives/mk_font.h b/rostests/tests/primitives/mk_font.h deleted file mode 100644 index b84f8942f65..00000000000 --- a/rostests/tests/primitives/mk_font.h +++ /dev/null @@ -1,39 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 4 - Utility functions -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#ifndef CH4_UTILS_H -#define CH4_UTILS_H - -#include -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - -// change namespace name appropriately to suit your needs -namespace font { - -// font options -static const ULONG FS_NONE = 0x00000000; -static const ULONG FS_BOLD = 0x00000001; -static const ULONG FS_ITALIC = 0x00000002; -static const ULONG FS_UNDERLINE = 0x00000004; -static const ULONG FS_STRIKEOUT = 0x00000008; - -// creates a logical font -HFONT MakeFont(IN HDC hDestDC, IN LPCSTR typeface_name, - IN int point_size, IN const BYTE charset = ANSI_CHARSET, - IN const DWORD style = FS_NONE); - -} - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#endif // CH4_UTILS_H -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< diff --git a/rostests/tests/primitives/primitives.cpp b/rostests/tests/primitives/primitives.cpp deleted file mode 100644 index df617568aa9..00000000000 --- a/rostests/tests/primitives/primitives.cpp +++ /dev/null @@ -1,351 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 5 - Listing 5.1 (Output Primitives Demo) -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -#include - -// for the MakeFont() function... -#include "mk_font.h" -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - -HINSTANCE hInst; -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam); - - -int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, - int nCmdShow) -{ - hInst = hInstance; - - WNDCLASS wc; - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.lpszClassName = WndClassName; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = hInst; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = reinterpret_cast( - COLOR_BTNFACE + 1 - ); - - if (RegisterClass(&wc)) - { - HWND hWnd = - CreateWindow( - WndClassName, TEXT("Output Primitives Demo"), - WS_OVERLAPPEDWINDOW | WS_CAPTION | - WS_VISIBLE | WS_CLIPCHILDREN, - CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, - NULL, NULL, hInst, NULL - ); - - if (hWnd) - { - ShowWindow(hWnd, nCmdShow); - UpdateWindow(hWnd); - - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} -//------------------------------------------------------------------ - - -enum OutPrimitive { - opLine, opBezier, opRectangle, opRoundRect, - opEllipse, opArc, opPie, opChord, opCustom - }; - -void DrawPrimitive(IN HDC hDC, IN const RECT& RPrimitive, - IN OutPrimitive PrimitiveID) -{ - RECT R = RPrimitive; - InflateRect(&R, -10, -10); - - switch (PrimitiveID) - { - case opLine: - { - const POINT PLine[] = {{R.left, R.top}, {R.right, R.bottom}}; - Polyline(hDC, PLine, 2); - break; - } - case opBezier: - { - const POINT PControlPoints[] = { - {R.left, R.top}, - {(R.right - R.left) / 2, R.top}, - {(R.right - R.left) / 2, R.bottom}, - {R.right, R.bottom} - }; - PolyBezier(hDC, PControlPoints, 4); - break; - } - case opRectangle: - { - Rectangle(hDC, R.left, R.top, R.right, R.bottom); - break; - } - case opRoundRect: - { - RoundRect(hDC, R.left, R.top, R.right, R.bottom, 20, 20); - break; - } - case opEllipse: - { - Ellipse(hDC, R.left, R.top, R.right, R.bottom); - break; - } - case opArc: - { - const POINT PRads[] = { - {(R.right - R.left) / 3 + R.left, R.top}, - {(R.right - R.left) / 3 + R.left, R.bottom} - }; - Arc(hDC, R.left, R.top, R.right, R.bottom, - PRads[0].x, PRads[0].y, PRads[1].x, PRads[1].y); - break; - } - case opPie: - { - const POINT PRads[] = { - {(R.right - R.left) / 3 + R.left, R.top}, - {(R.right - R.left) / 3 + R.left, R.bottom} - }; - Pie(hDC, R.left, R.top, R.right, R.bottom, - PRads[0].x, PRads[0].y, PRads[1].x, PRads[1].y); - break; - } - case opChord: - { - const POINT PRads[] = { - {(R.right - R.left) / 3 + R.left, R.top}, - {(R.right - R.left) / 3 + R.left, R.bottom} - }; - Chord(hDC, R.left, R.top, R.right, R.bottom, - PRads[0].x, PRads[0].y, PRads[1].x, PRads[1].y); - break; - } - case opCustom: - { - const POINT PVertices[] = { - {R.left, (R.bottom - R.top) / 2 + R.top}, - {(R.right - R.left) / 2 + R.left, R.top}, - {R.right, (R.bottom - R.top) / 2 + R.top}, - {(R.right - R.left) / 2 + R.left, R.bottom} - }; - Polygon(hDC, PVertices, 4); - break; - } - } -} -//------------------------------------------------------------------ - - -HWND hListBox = NULL; // handle to the list box -HBRUSH hListBrush = NULL; // handle to the list box brush -HPEN hListPen = NULL; // handle to the list box pen -HFONT hListFont = NULL; // handle to the list box font - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, - LPARAM lParam) -{ - switch (msg) - { - case WM_CREATE: - { - hListBox = - CreateWindowEx( - WS_EX_CLIENTEDGE, TEXT("LISTBOX"), TEXT(""), - WS_CHILD | WS_VISIBLE | WS_VSCROLL | - LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | - LBS_OWNERDRAWFIXED, - 0, 0, 640, 480, - hWnd, NULL, hInst, NULL - ); - assert(hListBox != NULL); - - SetWindowLong( - hListBox, GWL_ID, reinterpret_cast(hListBox) - ); - - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Line"))); - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Bezier Curve"))); - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Rectangle"))); - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Rounded Rectangle"))); - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Ellipse"))); - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Arc"))); - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Pie Slice"))); - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Chord"))); - SNDMSG(hListBox, LB_ADDSTRING, 0, - reinterpret_cast(TEXT("Custom"))); - - hListBrush = CreateSolidBrush(PALETTERGB(64, 192, 64)); - hListPen = CreatePen(PS_SOLID, 3, PALETTERGB(0, 0, 0)); - HDC hScreenDC = GetDC(NULL); -#if 0 - try -#endif - { - // MakeFont() from Chapter 4 - hListFont = font::MakeFont( - hScreenDC, "Impact", 20, ANSI_CHARSET, - font::FS_BOLD | font::FS_UNDERLINE - ); - } -#if 0 - catch (...) -#endif - { - ReleaseDC(NULL, hScreenDC); - } - ReleaseDC(NULL, hScreenDC); - - break; - } - case WM_MEASUREITEM: - { - LPMEASUREITEMSTRUCT lpmis = - reinterpret_cast(lParam); - assert(lpmis != NULL); - - if (lpmis->CtlID == reinterpret_cast(hListBox)) - { - lpmis->itemHeight = 150; - return TRUE; - } - break; - } - case WM_DRAWITEM: - { - LPDRAWITEMSTRUCT lpdis = - reinterpret_cast(lParam); - assert(lpdis != NULL); - - if (lpdis->CtlID == reinterpret_cast(hListBox)) - { - SaveDC(lpdis->hDC); -#if 0 - try -#endif - { - SelectObject(lpdis->hDC, hListBrush); - SelectObject(lpdis->hDC, hListPen); - SelectObject(lpdis->hDC, hListFont); - - bool selected = (lpdis->itemState & ODS_SELECTED); - COLORREF clrText = GetSysColor( - selected ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT - ); - HBRUSH hListBrush = GetSysColorBrush( - selected ? COLOR_HIGHLIGHT : COLOR_WINDOW - ); - - // fill the background - FillRect(lpdis->hDC, &lpdis->rcItem, hListBrush); - - // render the output primitive - RECT RPrimitive = lpdis->rcItem; - InflateRect(&RPrimitive, -5, -5); - RPrimitive.right = static_cast( - 0.6 * lpdis->rcItem.right + 0.5 - ); - FillRect( - lpdis->hDC, &RPrimitive, - reinterpret_cast(COLOR_BTNFACE + 1) - ); - DrawPrimitive( - lpdis->hDC, RPrimitive, - static_cast(lpdis->itemID) - ); - if (selected) InvertRect(lpdis->hDC, &RPrimitive); - DrawEdge(lpdis->hDC, &RPrimitive, EDGE_SUNKEN, BF_RECT); - - // render the text - TCHAR text[13]; - if (SNDMSG(hListBox, LB_GETTEXT, lpdis->itemID, - reinterpret_cast(&text)) != LB_ERR) - { - RECT RText = RPrimitive; - RText.left = RPrimitive.right; - RText.right = lpdis->rcItem.right; - - SelectObject(lpdis->hDC, hListFont); - SetBkMode(lpdis->hDC, TRANSPARENT); - SetTextColor(lpdis->hDC, clrText); - - DrawText(lpdis->hDC, text, -1, &RText, - DT_CENTER | DT_VCENTER | DT_SINGLELINE); - } - - // indicate keyboard focus - if (lpdis->itemState & ODS_FOCUS) - { - RECT RFocus = lpdis->rcItem; - InflateRect(&RFocus, -1, -1); - DrawFocusRect(lpdis->hDC, &RFocus); - } - } -#if 0 - catch (...) -#endif - { - RestoreDC(lpdis->hDC, -1); - } - RestoreDC(lpdis->hDC, -1); - return TRUE; - } - break; - } - case WM_SIZE: - { - MoveWindow( - hListBox, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE - ); - return 0; - } - case WM_DESTROY: - { - if (hListBrush) DeleteObject(hListBrush); - if (hListPen) DeleteObject(hListPen); - if (hListFont) DeleteObject(hListFont); - - PostQuitMessage(0); - return 0; - } - } - return DefWindowProc(hWnd, msg, wParam, lParam); -} -//------------------------------------------------------------------------- - - - diff --git a/rostests/tests/primitives/primitives.rbuild b/rostests/tests/primitives/primitives.rbuild deleted file mode 100644 index 7299fa6fad5..00000000000 --- a/rostests/tests/primitives/primitives.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - kernel32 - user32 - gdi32 - primitives.cpp - mk_font.cpp - diff --git a/rostests/tests/pteb/pteb.c b/rostests/tests/pteb/pteb.c deleted file mode 100644 index 23cf8e48477..00000000000 --- a/rostests/tests/pteb/pteb.c +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include - - -int main(int argc, char* argv[]) -{ - int x; - PTEB Teb; - - printf("TEB dumpper\n"); - __asm__("movl %%fs:0x18, %0\n\t" - : "=a" (x) - : /* no inputs */); - printf("fs[0x18] %x\n", x); - - Teb = (PTEB)x; - - printf("StackBase: 0x%08lX\n", (DWORD)Teb->Tib.StackBase); - printf("StackLimit: 0x%08lX\n", (DWORD)Teb->Tib.StackLimit); - printf("DeallocationStack: 0x%08lX\n", (DWORD)Teb->DeallocationStack); - - return(0); -} diff --git a/rostests/tests/pteb/pteb.rbuild b/rostests/tests/pteb/pteb.rbuild deleted file mode 100644 index fd303843aea..00000000000 --- a/rostests/tests/pteb/pteb.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - pteb.c - diff --git a/rostests/tests/readconsole/main.c b/rostests/tests/readconsole/main.c deleted file mode 100644 index bc33134a942..00000000000 --- a/rostests/tests/readconsole/main.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include - -int main() -{ - TCHAR Buffer = 0; - DWORD Count = 0; - - // - // We clear the mode, most importantly turn off ENABLE_ECHO_INPUT and ENABLE_LINE_INPUT - // This is the same mode as that is set up by getch() when trying to get a char - // - SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),0); - - // - // We read one char from the input and then return - // - ReadConsole(GetStdHandle(STD_INPUT_HANDLE),&Buffer,1,&Count,NULL); - - // - // We print out this char as an int to show that infact a backspace does count as input - // - _tprintf(TEXT("You printed %c :: "), Buffer); - _tprintf(TEXT("With a value %d :: "), Buffer); - _tprintf(TEXT("Number of chars recieved %lu :: "), Count); - _tprintf(TEXT("Char equal to backspace %d \n"), (Buffer == TEXT('\b'))); - - // - // :) - // - return 0; -} diff --git a/rostests/tests/readconsole/readconsole.rbuild b/rostests/tests/readconsole/readconsole.rbuild deleted file mode 100644 index 2a1512e5e37..00000000000 --- a/rostests/tests/readconsole/readconsole.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - - kernel32 - main.c - diff --git a/rostests/tests/regdump/main.c b/rostests/tests/regdump/main.c deleted file mode 100644 index dd474c39743..00000000000 --- a/rostests/tests/regdump/main.c +++ /dev/null @@ -1,45 +0,0 @@ -// main.c : -// -#include -#include -#include "regdump.h" - - -HANDLE OutputHandle; -HANDLE InputHandle; - - -DWORD GetInput(char* Buffer, int buflen) -{ - DWORD Result; - - ReadConsoleA(InputHandle, Buffer, buflen, &Result, NULL); - return Result; -} - -int __cdecl main(int argc, char* argv[]) -{ - //AllocConsole(); - InputHandle = GetStdHandle(STD_INPUT_HANDLE); - OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE); - //return regmain(argc, argv); - return regdump(argc, argv); -} - - -#ifndef __GNUC__ - -//__declspec(dllimport) int __stdcall DllMain(void* hinstDll, unsigned long dwReason, void* reserved); - -char* args[] = { "regdump.exe", "0", "ansi", "verbose"}; - -int __cdecl mainCRTStartup(void) -{ - - //DllMain(NULL, DLL_PROCESS_ATTACH, NULL); - - main(1, args); - return 0; -} - -#endif /*__GNUC__*/ diff --git a/rostests/tests/regdump/regcmds.c b/rostests/tests/regdump/regcmds.c deleted file mode 100644 index 13ea7a12646..00000000000 --- a/rostests/tests/regdump/regcmds.c +++ /dev/null @@ -1,224 +0,0 @@ -/* $Id$ - * - * ReactOS regedit - * - * regcmds.c - * - * Copyright (C) 2002 Robert Dickenson - * - * Original Work 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers -#include -#include -#include - -#ifdef WIN32_REGDBG -#else -#include -#endif - -#include "regproc.h" - - -//////////////////////////////////////////////////////////////////////////////// -// Global Variables: -// - -static char *usage = -"Usage:\n" -" regedit filename\n" -" regedit /E filename [regpath]\n" -" regedit /D regpath\n" -"\n" -"filename - registry file name\n" -"regpath - name of the registry key\n" -"\n" -"When is called without any switches adds contents of the specified\n" -"registry file to the registry\n" -"\n" -"Switches:\n" -" /E - exports contents of the specified registry key to the specified\n" -" file. Exports the whole registry if no key is specified.\n" -" /D - deletes specified registry key\n" -" /S - silent execution, can be used with any other switch.\n" -" The only existing mode, exists for compatibility with Windows regedit.\n" -" /V - advanced mode, can be used with any other switch.\n" -" Ignored, exists for compatibility with Windows regedit.\n" -" /L - location of system.dat file. Can be used with any other switch.\n" -" Ignored. Exists for compatibility with Windows regedit.\n" -" /R - location of user.dat file. Can be used with any other switch.\n" -" Ignored. Exists for compatibility with Windows regedit.\n" -" /? - print this help. Any other switches are ignored.\n" -" /C - create registry from. Not implemented.\n" -"\n" -"The switches are case-insensitive, can be prefixed either by '-' or '/'.\n" -"This program is command-line compatible with Microsoft Windows\n" -"regedit. The difference with Windows regedit - this application has\n" -"command-line interface only.\n"; - -typedef enum { - ACTION_UNDEF, ACTION_ADD, ACTION_EXPORT, ACTION_DELETE, ACTION_VIEW -} REGEDIT_ACTION; - -/** - * Process unknown switch. - * - * Params: - * chu - the switch character in upper-case. - * s - the command line string where s points to the switch character. - */ -void error_unknown_switch(char chu, char *s) -{ - if (isalpha(chu)) { - printf("Undefined switch /%c!\n", chu); - } else { - printf("Alphabetic character is expected after '%c' " - "in switch specification\n", *(s - 1)); - } - //exit(1); -} - -BOOL PerformRegAction(REGEDIT_ACTION action, LPSTR s) -{ - TCHAR filename[MAX_PATH]; - TCHAR reg_key_name[KEY_MAX_LEN]; - - switch (action) { - case ACTION_ADD: - get_file_name(&s, filename, MAX_PATH); - if (!filename[0]) { - printf("No file name is specified\n%s", usage); - return FALSE; - //exit(1); - } - while (filename[0]) { - if (!import_registry_file(filename)) { - perror(""); - printf("Can't open file \"%s\"\n", filename); - return FALSE; - //exit(1); - } - get_file_name(&s, filename, MAX_PATH); - } - break; - case ACTION_DELETE: - get_file_name(&s, reg_key_name, KEY_MAX_LEN); - if (!reg_key_name[0]) { - printf("No registry key is specified for removal\n%s", usage); - return FALSE; - //exit(1); - } - delete_registry_key(reg_key_name); - break; - case ACTION_EXPORT: - filename[0] = '\0'; - get_file_name(&s, filename, MAX_PATH); - if (!filename[0]) { - printf("No file name is specified\n%s", usage); - return FALSE; - //exit(1); - } - if (s[0]) { - get_file_name(&s, reg_key_name, KEY_MAX_LEN); - export_registry_key(filename, reg_key_name); - } else { - export_registry_key(filename, NULL); - } - break; - default: - printf("Unhandled action!\n"); - return FALSE; - } - return TRUE; -} - -BOOL ProcessCmdLine(LPSTR lpCmdLine) -{ - REGEDIT_ACTION action = ACTION_UNDEF; - LPSTR s = lpCmdLine; /* command line pointer */ - CHAR ch = *s; /* current character */ - - 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 { - switch (chu) { - case 'D': - action = ACTION_DELETE; - break; - case 'E': - action = ACTION_EXPORT; - break; - case 'V': - action = ACTION_VIEW; - break; - case '?': - printf(usage); - return FALSE; - //exit(0); - break; - default: - error_unknown_switch(chu, s); - return FALSE; - break; - } - } - s++; - } else { - if (ch2 == ':') { - switch (chu) { - case 'L': - /* fall through */ - case 'R': - s += 2; - while (*s && !isspace(*s)) { - s++; - } - break; - default: - error_unknown_switch(chu, s); - return FALSE; - break; - } - } else { - /* this is a file name, starting from '/' */ - s--; - break; - } - } - /* skip spaces to the next parameter */ - ch = *s; - while (ch && isspace(ch)) { - s++; - ch = *s; - } - } - if (action == ACTION_UNDEF) { - action = ACTION_ADD; - } - return PerformRegAction(action, s); -} diff --git a/rostests/tests/regdump/regdump.c b/rostests/tests/regdump/regdump.c deleted file mode 100644 index d13395893c3..00000000000 --- a/rostests/tests/regdump/regdump.c +++ /dev/null @@ -1,167 +0,0 @@ -/* $Id$ - * - * ReactOS regedit - * - * regdump.c - * - * Copyright (C) 2002 Robert Dickenson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should 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 "regdump.h" - - -#ifdef UNICODE -//#define dprintf _tprintf -#define dprintf printf -#else -#define dprintf printf -#endif - -void RegKeyPrint(int which); - - - -const char* default_cmd_line1 = "/E HKLM_EXPORT.TXT HKEY_LOCAL_MACHINE"; -const char* default_cmd_line2 = "TEST_IMPORT.TXT"; -const char* default_cmd_line3 = "/P HKEY_LOCAL_MACHINE\\SYSTEM"; -const char* default_cmd_line4 = "/P HKEY_LOCAL_MACHINE\\SOFTWARE"; -const char* default_cmd_line5 = "/P HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes"; -const char* default_cmd_line6 = "/E HKCR_EXPORT.TXT HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes"; -const char* default_cmd_line7 = "/D HKEY_LOCAL_MACHINE\\SYSTEM"; -const char* default_cmd_line8 = "/D HKEY_LOCAL_MACHINE\\SOFTWARE"; -const char* default_cmd_line9 = "/D HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes"; - -/* Show usage */ -void usage(const char* appName) -{ - fprintf(stderr, "%s: Dump registry key to console\n", appName); - fprintf(stderr, "%s HKCR | HKCU | HKLM | HKU | HKCC | HKRR\n", appName); -} - -void show_menu(void) -{ - _tprintf(_T("\nchoose test :\n")); - _tprintf(_T(" 0 = Exit\n")); - printf(" 1 = %s\n", default_cmd_line1); - printf(" 2 = %s\n", default_cmd_line2); - printf(" 3 = %s\n", default_cmd_line3); - printf(" 4 = %s\n", default_cmd_line4); - printf(" 5 = %s\n", default_cmd_line5); - printf(" 6 = %s\n", default_cmd_line6); - printf(" 7 = %s\n", default_cmd_line7); - printf(" 8 = %s\n", default_cmd_line8); - printf(" 9 = %s\n", default_cmd_line9); -/* - _tprintf(_T(" 1 = %s\n"), default_cmd_line1); - _tprintf(_T(" 2 = %s\n"), default_cmd_line2); - _tprintf(_T(" 3 = %s\n"), default_cmd_line3); - _tprintf(_T(" 4 = %s\n"), default_cmd_line4); - _tprintf(_T(" 5 = %s\n"), default_cmd_line5); - _tprintf(_T(" 6 = %s\n"), default_cmd_line6); - _tprintf(_T(" 7 = %s\n"), default_cmd_line7); - _tprintf(_T(" 8 = %s\n"), default_cmd_line8); - _tprintf(_T(" 9 = %s\n"), default_cmd_line9); - */ -// _tprintf(_T(" A = HKEY_CLASSES_ROOT\n")); -// _tprintf(_T(" B = HKEY_CURRENT_USER\n")); -// _tprintf(_T(" C = HKEY_LOCAL_MACHINE\n")); -// _tprintf(_T(" D = HKEY_USERS\n")); -// _tprintf(_T(" E = HKEY_CURRENT_CONFIG\n")); -// _tprintf(_T(" F = REGISTRY ROOT\n")); -} - -int regdump(int argc, char* argv[]) -{ - char Buffer[500]; - - if (argc > 1) { -// if (0 == _tcsstr(argv[1], _T("HKLM"))) { - if (strstr(argv[1], "help")) { - usage(argv[0]); - } else if (strstr(argv[1], "HKCR")) { - RegKeyPrint('1'); - } else if (strstr(argv[1], "HKCU")) { - RegKeyPrint('2'); - } else if (strstr(argv[1], "HKLM")) { - RegKeyPrint('3'); - } else if (strstr(argv[1], "HKU")) { - RegKeyPrint('4'); - } else if (strstr(argv[1], "HKCC")) { - RegKeyPrint('5'); - } else if (strstr(argv[1], "HKRR")) { - RegKeyPrint('6'); - } else { - dprintf("started with argc = %d, argv[1] = %s (unknown?)\n", argc, argv[1]); - } - return 0; - } - show_menu(); - while (1) { - GetInput(Buffer, sizeof(Buffer)); - switch (toupper(Buffer[0])) { - case '0': - return(0); - case '1': - strcpy(Buffer, default_cmd_line1); - goto doit; - case '2': - strcpy(Buffer, default_cmd_line2); - goto doit; - case '3': - strcpy(Buffer, default_cmd_line3); - goto doit; - case '4': - strcpy(Buffer, default_cmd_line4); - goto doit; - case '5': - strcpy(Buffer, default_cmd_line5); - goto doit; - case '6': - strcpy(Buffer, default_cmd_line6); - goto doit; - case '7': - strcpy(Buffer, default_cmd_line7); - goto doit; - case '8': - strcpy(Buffer, default_cmd_line8); - goto doit; - case '9': - strcpy(Buffer, default_cmd_line9); - goto doit; - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - RegKeyPrint(toupper(Buffer[0]) - 'A' + 1); - break; - default: doit: - if (!ProcessCmdLine(Buffer)) { - dprintf("invalid input.\n"); - show_menu(); - } else { - dprintf("done.\n"); - } - break; - } - } - return 0; -} diff --git a/rostests/tests/regdump/regdump.h b/rostests/tests/regdump/regdump.h deleted file mode 100644 index be2c895817c..00000000000 --- a/rostests/tests/regdump/regdump.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * ReactOS - * - * regdump.h - * - * Copyright (C) 2002 Robert Dickenson - * - * 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. - */ - -#ifndef __REGDUMP_H__ -#define __REGDUMP_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -extern HANDLE OutputHandle; -extern HANDLE InputHandle; - -DWORD GetInput(char* Buffer, int buflen); -//void dprintf(char* fmt, ...); -int regdump(int argc, char* argv[]); -BOOL ProcessCmdLine(LPSTR lpCmdLine); - - -#ifdef __cplusplus -}; -#endif - -#endif // __REGDUMP_H__ diff --git a/rostests/tests/regdump/regdump.rbuild b/rostests/tests/regdump/regdump.rbuild deleted file mode 100644 index 9778749b99f..00000000000 --- a/rostests/tests/regdump/regdump.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - kernel32 - advapi32 - gdi32 - main.c - regdump.c - regcmds.c - regproc.c - diff --git a/rostests/tests/regdump/regproc.c b/rostests/tests/regdump/regproc.c deleted file mode 100644 index 56832b90031..00000000000 --- a/rostests/tests/regdump/regproc.c +++ /dev/null @@ -1,1491 +0,0 @@ -/* - * Registry processing routines. Routines, common for registry - * processing frontends. - * - * Copyright 1999 Sylvain St-Germain - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifdef WIN32_REGDBG -#include -#include -#ifndef __GNUC__ -#include -#else -#include -#endif -#include -#include -#include -#include -//#include -#include "regdump.h" -#else - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#endif - -#include "regproc.h" - - -#define REG_VAL_BUF_SIZE 4096 - -/* Delimiters used to parse the "value" to query queryValue*/ -#define QUERY_VALUE_MAX_ARGS 1 - -/* maximal number of characters in hexadecimal data line, - not including '\' character */ -#define REG_FILE_HEX_LINE_LEN 76 - -/* Globals used by the api setValue, queryValue */ -static LPTSTR currentKeyName = NULL; -static HKEY currentKeyClass = 0; -static HKEY currentKeyHandle = 0; -static BOOL bTheKeyIsOpen = FALSE; - -static TCHAR *reg_class_names[] = { - _T("HKEY_LOCAL_MACHINE"), - _T("HKEY_USERS"), - _T("HKEY_CLASSES_ROOT"), - _T("HKEY_CURRENT_CONFIG"), - _T("HKEY_CURRENT_USER") -}; - -#define REG_CLASS_NUMBER (sizeof(reg_class_names) / sizeof(reg_class_names[0])) - -static HKEY reg_class_keys[REG_CLASS_NUMBER] = { - HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, - HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER -}; - -/* return values */ -#define NOT_ENOUGH_MEMORY 1 -#define IO_ERROR 2 - -/* processing macros */ - -/* common check of memory allocation results */ -#ifdef UNICODE -#define CHECK_ENOUGH_MEMORY(p) \ - if (!(p)) \ - { \ - _tprintf(_T("file %S, line %d: Not enough memory"), __FILE__, __LINE__); \ - assert(0);\ - exit(NOT_ENOUGH_MEMORY); \ - } -#else -#define CHECK_ENOUGH_MEMORY(p) \ - if (!(p)) \ - { \ - _tprintf(_T("file %s, line %d: Not enough memory"), __FILE__, __LINE__); \ - assert(0);\ - exit(NOT_ENOUGH_MEMORY); \ - } -#endif - -#ifdef UNICODE -#define _TEOF WEOF -#else -#define _TEOF EOF -#endif - -/****************************************************************************** - * This is a replacement for strsep which is not portable (missing on Solaris). - */ -#if 0 -/* DISABLED */ -char* getToken(char** str, const char* delims) -{ - char* token; - - if (*str==NULL) { - /* No more tokens */ - return NULL; - } - - token=*str; - while (**str!='\0') { - if (strchr(delims,**str)!=NULL) { - **str='\0'; - (*str)++; - return token; - } - (*str)++; - } - /* There is no other token */ - *str=NULL; - return token; -} -#endif - -/****************************************************************************** - * 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_nameA(CHAR **command_line, CHAR *file_name, int max_filename) -{ - 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]) { - _tprintf(_T("Unexpected end of file name!\n")); - assert(0); - //exit(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; -} - -void get_file_nameW(CHAR** command_line, WCHAR* filename, int max_filename) -{ - CHAR filenameA[_MAX_PATH]; - int len; - - get_file_nameA(command_line, filenameA, _MAX_PATH); - len = strlen(filenameA); - OemToCharBuffW(filenameA, filename, max_filename); - filename[len] = _T('\0'); -/* - UNICODE_STRING UnicodeString; - ANSI_STRING AnsiString; - CHAR filenameA[_MAX_PATH]; - - get_file_nameA(command_line, filenameA, _MAX_PATH); - - //RtlInitAnsiString(&AnsiString, filenameA); - UnicodeString.Buffer = filename; - UnicodeString.MaximumLength = max_filename;//MAX_PATH; - RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE); - */ -} - -/****************************************************************************** - * Converts a hex representation of a DWORD into a DWORD. - */ -DWORD convertHexToDWord(TCHAR* str, BYTE* buf) -{ - DWORD dw; - TCHAR xbuf[9]; - - memcpy(xbuf, str, 8 * sizeof(TCHAR)); - xbuf[88 * sizeof(TCHAR)] = '\0'; - _stscanf(xbuf, _T("%08lx"), &dw); - memcpy(buf, &dw, sizeof(DWORD)); - return sizeof(DWORD); -} - -/****************************************************************************** - * Converts a hex buffer into a hex comma separated values - */ -TCHAR* convertHexToHexCSV(BYTE* buf, ULONG bufLen) -{ - TCHAR* str; - TCHAR* ptrStr; - BYTE* ptrBuf; - - ULONG current = 0; - str = HeapAlloc(GetProcessHeap(), 0, (bufLen+1)*2*sizeof(TCHAR)); - memset(str, 0, (bufLen+1)*2); - ptrStr = str; /* Pointer to result */ - ptrBuf = buf; /* Pointer to current */ - while (current < bufLen) { - BYTE bCur = ptrBuf[current++]; - TCHAR res[3]; - _stprintf(res, _T("%02x"), (unsigned int)*&bCur); - _tcscat(str, res); - _tcscat(str, _T(",")); - } - /* Get rid of the last comma */ - str[_tcslen(str)-1] = _T('\0'); - return str; -} - -/****************************************************************************** - * Converts a hex buffer into a DWORD string - */ -TCHAR* convertHexToDWORDStr(BYTE* buf, ULONG bufLen) -{ - TCHAR* str; - DWORD dw; - - if (bufLen != sizeof(DWORD)) return NULL; - str = HeapAlloc(GetProcessHeap(), 0, ((bufLen*2)+1)*sizeof(TCHAR)); - memcpy(&dw, buf, sizeof(DWORD)); - _stprintf(str, _T("%08lx"), dw); - /* Get rid of the last comma */ - return str; -} - -/****************************************************************************** - * Converts a hex comma separated values list into a hex list. - * The Hex input string must be in exactly the correct form. - */ -DWORD convertHexCSVToHex(TCHAR* str, BYTE* buf, ULONG bufLen) -{ - TCHAR* s = str; /* Pointer to current */ - CHAR* b = buf; /* Pointer to result */ - ULONG strLen = _tcslen(str); - ULONG strPos = 0; - DWORD byteCount = 0; - - memset(buf, 0, bufLen); - /* - * warn the user if we are here with a string longer than 2 bytes that does - * not contains ",". It is more likely because the data is invalid. - */ - if ((strLen > 2) && (_tcschr(str, _T(',')) == NULL)) { - _tprintf(_T("WARNING converting CSV hex stream with no comma, ") \ - _T("input data seems invalid.\n")); - } - if (strLen > 3*bufLen) { - _tprintf(_T("ERROR converting CSV hex stream. Too long\n")); - } - while (strPos < strLen) { - TCHAR xbuf[3]; - TCHAR wc; - memcpy(xbuf, s, 2); - xbuf[3] = _T('\0'); - _stscanf(xbuf, _T("%02x"), (UINT*)&wc); - if (byteCount < bufLen) - *b++ = (unsigned char)wc; - s += 3; - strPos += 3; - ++byteCount; - } - return byteCount; -} - -/****************************************************************************** - * This function returns the HKEY associated with the data type encoded in the - * value. It modifies the input parameter (key value) in order to skip this - * "now useless" data type information. - * - * Note: Updated based on the algorithm used in 'server/registry.c' - */ -DWORD getDataType(LPTSTR* lpValue, DWORD* parse_type) -{ - struct data_type { const TCHAR *tag; int len; int type; int parse_type; }; - - static const struct data_type data_types[] = - { /* actual type */ /* type to assume for parsing */ - { _T("\""), 1, REG_SZ, REG_SZ }, - { _T("str:\""), 5, REG_SZ, REG_SZ }, -// { _T("str(2):\""), 8, REG_EXPAND_SZ, REG_SZ }, - { _T("expand:\""), 8, REG_EXPAND_SZ, REG_EXPAND_SZ }, - { _T("hex:"), 4, REG_BINARY, REG_BINARY }, - { _T("dword:"), 6, REG_DWORD, REG_DWORD }, - { _T("hex("), 4, -1, REG_BINARY }, - { NULL, 0, 0, 0 } - }; - - const struct data_type *ptr; - int type; - - for (ptr = data_types; ptr->tag; ptr++) { - if (memcmp(ptr->tag, *lpValue, ptr->len)) - continue; - - /* Found! */ - *parse_type = ptr->parse_type; - type = ptr->type; - *lpValue += ptr->len; - if (type == -1) { - TCHAR* end; - /* "hex(xx):" is special */ - type = (int)_tcstoul(*lpValue , &end, 16); - if (**lpValue == _T('\0') || *end != _T(')') || *(end+1) != _T(':')) { - type = REG_NONE; - } else { - *lpValue = end + 2; - } - } - return type; - } - return (**lpValue == _T('\0') ? REG_SZ : REG_NONE); -} - -/****************************************************************************** - * Returns an allocated buffer with a cleaned copy (removed the surrounding - * dbl quotes) of the passed value. - */ -LPTSTR getArg(LPTSTR arg) -{ - LPTSTR tmp = NULL; - ULONG len; - - if (arg == NULL) return NULL; - - // Get rid of surrounding quotes - len = _tcslen(arg); - if (arg[len-1] == _T('\"')) arg[len-1] = _T('\0'); - if (arg[0] == _T('\"')) arg++; - tmp = HeapAlloc(GetProcessHeap(), 0, (_tcslen(arg)+1) * sizeof(TCHAR)); - _tcscpy(tmp, arg); - return tmp; -} - -/****************************************************************************** - * Replaces escape sequences with the characters. - */ -void REGPROC_unescape_string(LPTSTR str) -{ - int str_idx = 0; /* current character under analysis */ - int val_idx = 0; /* the last character of the unescaped string */ - int len = _tcslen(str); - for (str_idx = 0; str_idx < len; str_idx++, val_idx++) { - if (str[str_idx] == _T('\\')) { - str_idx++; - switch (str[str_idx]) { - case _T('n'): - str[val_idx] = _T('\n'); - break; - case _T('\\'): - case _T('"'): - str[val_idx] = str[str_idx]; - break; - default: - _tprintf(_T("Warning! Unrecognized escape sequence: \\%c'\n"), str[str_idx]); - str[val_idx] = str[str_idx]; - break; - } - } else { - str[val_idx] = str[str_idx]; - } - } - str[val_idx] = _T('\0'); -} - -/****************************************************************************** - * Sets the value with name val_name to the data in val_data for the currently - * opened key. - * - * Parameters: - * val_name - name of the registry value - * val_data - registry value data - */ -HRESULT setValue(LPTSTR val_name, LPTSTR val_data) -{ - HRESULT hRes; - DWORD dwDataType, dwParseType; - LPBYTE lpbData; - BYTE convert[KEY_MAX_LEN]; - BYTE *bBigBuffer = 0; - DWORD dwLen; - - if ((val_name == NULL) || (val_data == NULL)) - return ERROR_INVALID_PARAMETER; - - /* Get the data type stored into the value field */ - dwDataType = getDataType(&val_data, &dwParseType); - -// if (dwParseType == REG_EXPAND_SZ) { -// } -// if (dwParseType == REG_SZ || dwParseType == REG_EXPAND_SZ) { /* no conversion for string */ - - if (dwParseType == REG_SZ) { /* no conversion for string */ - dwLen = _tcslen(val_data); - if (dwLen > 0 && val_data[dwLen-1] == _T('"')) { - dwLen--; - val_data[dwLen] = _T('\0'); - } - dwLen++; - dwLen *= sizeof(TCHAR); - REGPROC_unescape_string(val_data); - lpbData = val_data; - } else if (dwParseType == REG_DWORD) { /* Convert the dword types */ - dwLen = convertHexToDWord(val_data, convert); - lpbData = convert; - } else { /* Convert the hexadecimal types */ - int b_len = _tcslen(val_data)+2/3; - if (b_len > KEY_MAX_LEN) { - bBigBuffer = HeapAlloc (GetProcessHeap(), 0, b_len * sizeof(TCHAR)); - if (bBigBuffer == NULL) { - return ERROR_REGISTRY_IO_FAILED; - } - CHECK_ENOUGH_MEMORY(bBigBuffer); - dwLen = convertHexCSVToHex(val_data, bBigBuffer, b_len); - lpbData = bBigBuffer; - } else { - dwLen = convertHexCSVToHex(val_data, convert, KEY_MAX_LEN); - lpbData = convert; - } - } - hRes = RegSetValueEx(currentKeyHandle, val_name, - 0, /* Reserved */dwDataType, lpbData, dwLen); - - _tprintf(_T(" Value: %s, Data: %s\n"), val_name, lpbData); - - - if (bBigBuffer) - HeapFree(GetProcessHeap(), 0, bBigBuffer); - return hRes; -} - - -/****************************************************************************** - * Open the key - */ -HRESULT openKey(LPTSTR stdInput) -{ - DWORD dwDisp; - HRESULT hRes; - - /* Sanity checks */ - if (stdInput == NULL) - return ERROR_INVALID_PARAMETER; - - /* Get the registry class */ - currentKeyClass = getRegClass(stdInput); /* Sets global variable */ - if (currentKeyClass == (HKEY)ERROR_INVALID_PARAMETER) - return (HRESULT)ERROR_INVALID_PARAMETER; - - /* Get the key name */ - currentKeyName = getRegKeyName(stdInput); /* Sets global variable */ - if (currentKeyName == NULL) - return ERROR_INVALID_PARAMETER; - - hRes = RegCreateKeyEx( - currentKeyClass, /* Class */ - currentKeyName, /* Sub Key */ - 0, /* MUST BE 0 */ - NULL, /* object type */ - REG_OPTION_NON_VOLATILE, /* option, REG_OPTION_NON_VOLATILE ... */ - KEY_ALL_ACCESS, /* access mask, KEY_ALL_ACCESS */ - NULL, /* security attribute */ - ¤tKeyHandle, /* result */ - &dwDisp); /* disposition, REG_CREATED_NEW_KEY or - REG_OPENED_EXISTING_KEY */ - - if (hRes == ERROR_SUCCESS) - bTheKeyIsOpen = TRUE; - - return hRes; - -} - -/****************************************************************************** - * Extracts from [HKEY\some\key\path] or HKEY\some\key\path types of line - * the key name (what starts after the first '\') - */ -LPTSTR getRegKeyName(LPTSTR lpLine) -{ - LPTSTR keyNameBeg; - TCHAR lpLineCopy[KEY_MAX_LEN]; - - if (lpLine == NULL) - return NULL; - - _tcscpy(lpLineCopy, lpLine); - keyNameBeg = _tcschr(lpLineCopy, _T('\\')); /* The key name start by '\' */ - if (keyNameBeg) { - LPTSTR keyNameEnd; - - keyNameBeg++; /* is not part of the name */ - keyNameEnd = _tcschr(lpLineCopy, _T(']')); - if (keyNameEnd) { - *keyNameEnd = _T('\0'); /* remove ']' from the key name */ - } - } else { - keyNameBeg = lpLineCopy + _tcslen(lpLineCopy); /* branch - empty string */ - } - currentKeyName = HeapAlloc(GetProcessHeap(), 0, (_tcslen(keyNameBeg)+1)*sizeof(TCHAR)); - CHECK_ENOUGH_MEMORY(currentKeyName); - _tcscpy(currentKeyName, keyNameBeg); - return currentKeyName; -} - -/****************************************************************************** - * Extracts from [HKEY\some\key\path] or HKEY\some\key\path types of line - * the key class (what ends before the first '\') - */ -HKEY getRegClass(LPTSTR lpClass) -{ - LPTSTR classNameEnd; - LPTSTR classNameBeg; - int i; - - TCHAR lpClassCopy[KEY_MAX_LEN]; - - if (lpClass == NULL) - return (HKEY)ERROR_INVALID_PARAMETER; - - _tcsncpy(lpClassCopy, lpClass, KEY_MAX_LEN); - - classNameEnd = _tcschr(lpClassCopy, _T('\\')); /* The class name ends by '\' */ - if (!classNameEnd) { /* or the whole string */ - classNameEnd = lpClassCopy + _tcslen(lpClassCopy); - if (classNameEnd[-1] == _T(']')) { - classNameEnd--; - } - } - *classNameEnd = _T('\0'); /* Isolate the class name */ - if (lpClassCopy[0] == _T('[')) { - classNameBeg = lpClassCopy + 1; - } else { - classNameBeg = lpClassCopy; - } - for (i = 0; i < REG_CLASS_NUMBER; i++) { - if (!_tcscmp(classNameBeg, reg_class_names[i])) { - return reg_class_keys[i]; - } - } - return (HKEY)ERROR_INVALID_PARAMETER; -} - -/****************************************************************************** - * Close the currently opened key. - */ -void closeKey(VOID) -{ - RegCloseKey(currentKeyHandle); - HeapFree(GetProcessHeap(), 0, currentKeyName); /* Allocated by getKeyName */ - bTheKeyIsOpen = FALSE; - currentKeyName = NULL; - currentKeyClass = 0; - currentKeyHandle = 0; -} - -/****************************************************************************** - * This function is the main entry point to the setValue type of action. It - * receives the currently read line and dispatch the work depending on the - * context. - */ -void doSetValue(LPTSTR stdInput) -{ - /* - * We encountered the end of the file, make sure we - * close the opened key and exit - */ - if (stdInput == NULL) { - if (bTheKeyIsOpen != FALSE) - closeKey(); - return; - } - - if (stdInput[0] == _T('[')) { /* We are reading a new key */ - if (bTheKeyIsOpen != FALSE) { - closeKey(); /* Close the previous key before */ - } - if (openKey(stdInput) != ERROR_SUCCESS) { - _tprintf(_T("doSetValue failed to open key %s\n"), stdInput); - } - } else if ((bTheKeyIsOpen) && - ((stdInput[0] == _T('@')) || /* reading a default @=data pair */ - (stdInput[0] == _T('\"')))) { /* reading a new value=data pair */ - processSetValue(stdInput); - } else { /* since we are assuming that the file format is */ - if (bTheKeyIsOpen) /* valid we must be reading a blank line which */ - closeKey(); /* indicate end of this key processing */ - } -} - -/****************************************************************************** - * This funtion is the main entry point to the queryValue type of action. It - * receives the currently read line and dispatch the work depending on the - * context. - */ -void doQueryValue(LPTSTR stdInput) { - /* - * We encoutered the end of the file, make sure we - * close the opened key and exit - */ - if (stdInput == NULL) { - if (bTheKeyIsOpen != FALSE) - closeKey(); - return; - } - - if (stdInput[0] == _T('[')) { /* We are reading a new key */ - if (bTheKeyIsOpen != FALSE) - closeKey(); /* Close the previous key before */ - if (openKey(stdInput) != ERROR_SUCCESS ) { - _tprintf(_T("doQueryValue failed to open key %s\n"), stdInput); - } - } - else if( (bTheKeyIsOpen) && - ((stdInput[0] == _T('@')) || /* reading a default @=data pair */ - (stdInput[0] == _T('\"')))) { /* reading a new value=data pair */ - processQueryValue(stdInput); - } else { /* since we are assuming that the file format is */ - if (bTheKeyIsOpen) /* valid we must be reading a blank line which */ - closeKey(); /* indicate end of this key processing */ - } -} - -/****************************************************************************** - * This funtion is the main entry point to the deletetValue type of action. It - * receives the currently read line and dispatch the work depending on the - * context. - */ -void doDeleteValue(LPTSTR line) { - _tprintf(_T("deleteValue not yet implemented\n")); -} - -/****************************************************************************** - * This funtion is the main entry point to the deleteKey type of action. It - * receives the currently read line and dispatch the work depending on the - * context. - */ -void doDeleteKey(LPTSTR line) { - _tprintf(_T("deleteKey not yet implemented\n")); -} - -/****************************************************************************** - * This funtion is the main entry point to the createKey type of action. It - * receives the currently read line and dispatch the work depending on the - * context. - */ -void doCreateKey(LPTSTR line) { - _tprintf(_T("createKey not yet implemented\n")); -} - -/****************************************************************************** - * This function is a wrapper for the setValue function. It prepares the - * land and clean the area once completed. - * Note: this function modifies the line parameter. - * - * line - registry file unwrapped line. Should have the registry value name and - * complete registry value data. - */ -void processSetValue(LPTSTR line) -{ - LPTSTR val_name; /* registry value name */ - LPTSTR val_data; /* registry value data */ - - int line_idx = 0; /* current character under analysis */ - HRESULT hRes = 0; - - /* get value name */ - if (line[line_idx] == _T('@') && line[line_idx + 1] == _T('=')) { - line[line_idx] = _T('\0'); - val_name = line; - line_idx++; - } else if (line[line_idx] == _T('\"')) { - line_idx++; - val_name = line + line_idx; - while (TRUE) { - if (line[line_idx] == _T('\\')) { /* skip escaped character */ - line_idx += 2; - } else { - if (line[line_idx] == _T('\"')) { - line[line_idx] = _T('\0'); - line_idx++; - break; - } else { - line_idx++; - } - } - } - if (line[line_idx] != _T('=')) { - line[line_idx] = _T('\"'); - _tprintf(_T("Warning! uncrecognized line:\n%s\n"), line); - return; - } - } else { - _tprintf(_T("Warning! unrecognized line:\n%s\n"), line); - return; - } - line_idx++; /* skip the '=' character */ - val_data = line + line_idx; - REGPROC_unescape_string(val_name); - - _tprintf(_T("Key: %s, Value: %s, Data: %s\n"), currentKeyName, val_name, val_data); - - hRes = setValue(val_name, val_data); - if (hRes != ERROR_SUCCESS) { - _tprintf(_T("ERROR Key %s not created. Value: %s, Data: %s\n"), currentKeyName, val_name, val_data); - } -} - -/****************************************************************************** - * This function is a wrapper for the queryValue function. It prepares the - * land and clean the area once completed. - */ -void processQueryValue(LPTSTR cmdline) -{ - _tprintf(_T("ERROR!!! - temporary disabled")); - //exit(1); - return; -#if 0 - LPSTR argv[QUERY_VALUE_MAX_ARGS];/* args storage */ - LPSTR token = NULL; /* current token analized */ - ULONG argCounter = 0; /* counter of args */ - INT counter; - HRESULT hRes = 0; - LPSTR keyValue = NULL; - LPSTR lpsRes = NULL; - - /* - * Init storage and parse the line - */ - for (counter = 0; counter < QUERY_VALUE_MAX_ARGS; counter++) - argv[counter] = NULL; - - while ((token = getToken(&cmdline, queryValueDelim[argCounter])) != NULL) { - argv[argCounter++] = getArg(token); - if (argCounter == QUERY_VALUE_MAX_ARGS) - break; /* Stop processing args no matter what */ - } - - /* The value we look for is the first token on the line */ - if (argv[0] == NULL) - return; /* SHOULD NOT HAPPEN */ - else - keyValue = argv[0]; - - if ((keyValue[0] == '@') && (_tcslen(keyValue) == 1)) { - LONG lLen = KEY_MAX_LEN; - TCHAR* lpsData = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,KEY_MAX_LEN); - /* - * We need to query the key default value - */ - hRes = RegQueryValue(currentKeyHandle, currentKeyName, (LPBYTE)lpsData, &lLen); - if (hRes == ERROR_MORE_DATA) { - lpsData = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lpsData, lLen); - hRes = RegQueryValue(currentKeyHandle, currentKeyName, (LPBYTE)lpsData, &lLen); - } - if (hRes == ERROR_SUCCESS) { - lpsRes = HeapAlloc(GetProcessHeap(), 0, lLen); - strncpy(lpsRes, lpsData, lLen); - lpsRes[lLen-1]='\0'; - } - } else { - DWORD dwLen = KEY_MAX_LEN; - BYTE* lpbData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, KEY_MAX_LEN); - DWORD dwType; - /* - * We need to query a specific value for the key - */ - hRes = RegQueryValueEx( - currentKeyHandle, - keyValue, - 0, - &dwType, - (LPBYTE)lpbData, - &dwLen); - - if (hRes == ERROR_MORE_DATA) { - lpbData = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lpbData, dwLen * sizeof(TCHAR)); - hRes = RegQueryValueEx(currentKeyHandle, keyValue, NULL, &dwType, (LPBYTE)lpbData, &dwLen); - } - - if (hRes == ERROR_SUCCESS) { - /* - * Convert the returned data to a displayable format - */ - switch (dwType) { - case REG_SZ: - case REG_EXPAND_SZ: - lpsRes = HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(TCHAR)); - strncpy(lpsRes, lpbData, dwLen); - lpsRes[dwLen-1] = '\0'; - break; - case REG_DWORD: - lpsRes = convertHexToDWORDStr(lpbData, dwLen); - break; - default: - lpsRes = convertHexToHexCSV(lpbData, dwLen); - break; - } - } - - HeapFree(GetProcessHeap(), 0, lpbData); - } - if (hRes == ERROR_SUCCESS) { - _tprintf(_T("Value \"%s\" = \"%s\" in key [%s]\n"), keyValue, lpsRes, currentKeyName); - - } else { - _tprintf(_T("ERROR Value \"%s\" not found. for key \"%s\"\n"), keyValue, currentKeyName); - } - - /* - * Do some cleanup - */ - for (counter=0; counter= line && s <= line + lineSize); - size_remaining = lineSize - (s-line); - if (size_remaining < 2) { /* room for 1 character and the \0 */ - TCHAR *new_buffer; - size_t new_size = lineSize + REG_VAL_BUF_SIZE; - if (new_size > lineSize) /* no arithmetic overflow */ - new_buffer = HeapReAlloc (GetProcessHeap(), 0, line, new_size * sizeof(TCHAR)); - else - new_buffer = NULL; - CHECK_ENOUGH_MEMORY(new_buffer); - line = new_buffer; - s = line + lineSize - size_remaining; - lineSize = new_size; - size_remaining = lineSize - (s-line); - } - - /* Get as much as possible into the buffer, terminated either by - * eof, error, eol or getting the maximum amount. Abort on error. - */ -// -// This line is surely foobar, don't want to read INT_MAX in buffer at s, it's never going to be that big... -// size_to_get = (size_remaining > INT_MAX ? INT_MAX : size_remaining); -// -// Looks as if 'lineSize' contains the number of characters of buffer size -// - size_to_get = (size_remaining > lineSize ? lineSize : size_remaining); - - if (NULL == _fgetts(s, size_to_get, in)) { - if (ferror(in)) { - //_tperror(_T("While reading input")); - perror ("While reading input"); - //exit(IO_ERROR); - return; - } else { - assert (feof(in)); - *s = _T('\0'); - /* It is not clear to me from the definition that the - * contents of the buffer are well defined on detecting - * an eof without managing to read anything. - */ - } - } - - /* If we didn't read the eol nor the eof go around for the rest */ - s_eol = _tcschr (s, _T('\n')); - if (!feof (in) && !s_eol) { - s = _tcschr (s, _T('\0')); - /* It should be s + size_to_get - 1 but this is safer */ - continue; - } - - /* If it is a comment line then discard it and go around again */ - if (line [0] == _T('#')) { - s = line; - continue; - } - - /* Remove any line feed. Leave s_eol on the \0 */ - if (s_eol) { - *s_eol = _T('\0'); - if (s_eol > line && *(s_eol-1) == _T('\r')) - *--s_eol = _T('\0'); - } else { - s_eol = _tcschr (s, _T('\0')); - } - /* If there is a concatenating \\ then go around again */ - if (s_eol > line && *(s_eol-1) == _T('\\')) { - int c; - s = s_eol-1; - /* The following error protection could be made more self- - * correcting but I thought it not worth trying. - */ - - if ((c = _fgettc(in)) == _TEOF || c != _T(' ') || - (c = _fgettc(in)) == _TEOF || c != _T(' ')) - _tprintf(_T("ERROR - invalid continuation.\n")); - continue; - } - break; /* That is the full virtual line */ - } - command(line); - } - command(NULL); - HeapFree(GetProcessHeap(), 0, line); -} - -/****************************************************************************** - * This funtion is the main entry point to the registerDLL action. It - * receives the currently read line, then loads and registers the requested DLLs - */ -void doRegisterDLL(LPTSTR stdInput) -{ - HMODULE theLib = 0; - UINT retVal = 0; - - /* Check for valid input */ - if (stdInput == NULL) return; - - /* Load and register the library, then free it */ - theLib = LoadLibrary(stdInput); - if (theLib) { - FARPROC lpfnDLLRegProc = GetProcAddress(theLib, "DllRegisterServer"); - if (lpfnDLLRegProc) { - retVal = (*lpfnDLLRegProc)(); - } else { - _tprintf(_T("Couldn't find DllRegisterServer proc in '%s'.\n"), stdInput); - } - if (retVal != S_OK) { - _tprintf(_T("Couldn't find DllRegisterServer proc in '%s'.\n"), stdInput); - } - FreeLibrary(theLib); - } else { - _tprintf(_T("Could not load DLL '%s'.\n"), stdInput); - } -} - -/****************************************************************************** - * This funtion is the main entry point to the unregisterDLL action. It - * receives the currently read line, then loads and unregisters the requested DLLs - */ -void doUnregisterDLL(LPTSTR stdInput) -{ - HMODULE theLib = 0; - UINT retVal = 0; - - /* Check for valid input */ - if (stdInput == NULL) return; - - /* Load and unregister the library, then free it */ - theLib = LoadLibrary(stdInput); - if (theLib) { - FARPROC lpfnDLLRegProc = GetProcAddress(theLib, "DllUnregisterServer"); - if (lpfnDLLRegProc) { - retVal = (*lpfnDLLRegProc)(); - } else { - _tprintf(_T("Couldn't find DllUnregisterServer proc in '%s'.\n"), stdInput); - } - if (retVal != S_OK) { - _tprintf(_T("DLLUnregisterServer error 0x%x in '%s'.\n"), retVal, stdInput); - } - FreeLibrary(theLib); - } else { - _tprintf(_T("Could not load DLL '%s'.\n"), stdInput); - } -} - -/**************************************************************************** - * REGPROC_print_error - * - * Print the message for GetLastError - */ - -void REGPROC_print_error(VOID) -{ - LPVOID lpMsgBuf; - DWORD error_code; - int status; - - error_code = GetLastError (); - status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, error_code, 0, (LPTSTR) &lpMsgBuf, 0, NULL); - if (!status) { - _tprintf(_T("Cannot display message for error %ld, status %ld\n"), error_code, GetLastError()); - } else { - _tprintf(_T("REGPROC_print_error() - ")); - puts(lpMsgBuf); - LocalFree((HLOCAL)lpMsgBuf); - } - //exit(1); -} - -/****************************************************************************** - * Checks whether the buffer has enough room for the string or required size. - * Resizes the buffer if necessary. - * - * Parameters: - * buffer - pointer to a buffer for string - * len - current length of the buffer in characters. - * required_len - length of the string to place to the buffer in characters. - * The length does not include the terminating null character. - */ -void REGPROC_resize_char_buffer(TCHAR **buffer, DWORD *len, DWORD required_len) -{ - required_len++; - if (required_len > *len) { - *len = required_len; - *buffer = HeapReAlloc(GetProcessHeap(), 0, *buffer, *len * sizeof(**buffer)); - CHECK_ENOUGH_MEMORY(*buffer); - } -} - -/****************************************************************************** - * Prints string str to file - */ -void REGPROC_export_string(FILE *file, TCHAR *str) -{ - size_t len = _tcslen(str); - size_t i; - - /* escaping characters */ - for (i = 0; i < len; i++) { - TCHAR c = str[i]; - switch (c) { - //case _T('\\'): _fputts(_T("\\\\"), file); break; - case _T('\"'): _fputts(_T("\\\""), file); break; - case _T('\n'): _fputts(_T("\\\n"), file); break; - default: _fputtc(c, file); break; - } - } -} - -/****************************************************************************** - * Writes contents of the registry key to the specified file stream. - * - * Parameters: - * file - writable file stream to export registry branch to. - * key - registry branch to export. - * reg_key_name_buf - name of the key with registry class. - * Is resized if necessary. - * reg_key_name_len - length of the buffer for the registry class in characters. - * val_name_buf - buffer for storing value name. - * Is resized if necessary. - * val_name_len - length of the buffer for storing value names in characters. - * val_buf - buffer for storing values while extracting. - * Is resized if necessary. - * val_size - size of the buffer for storing values in bytes. - */ -void export_hkey(FILE *file, HKEY key, - TCHAR **reg_key_name_buf, DWORD *reg_key_name_len, - TCHAR **val_name_buf, DWORD *val_name_len, - BYTE **val_buf, DWORD *val_size) -{ - DWORD max_sub_key_len; - DWORD max_val_name_len; - DWORD max_val_size; - DWORD curr_len; - DWORD i; - BOOL more_data; - LONG ret; - - /* get size information and resize the buffers if necessary */ - if (RegQueryInfoKey(key, NULL, NULL, NULL, NULL, &max_sub_key_len, NULL, - NULL, &max_val_name_len, &max_val_size, NULL, NULL) != ERROR_SUCCESS) { - REGPROC_print_error(); - } - curr_len = _tcslen(*reg_key_name_buf); - REGPROC_resize_char_buffer(reg_key_name_buf, reg_key_name_len, max_sub_key_len + curr_len + 1); - REGPROC_resize_char_buffer(val_name_buf, val_name_len, max_val_name_len); - if (max_val_size > *val_size) { - *val_size = max_val_size; - *val_buf = HeapReAlloc(GetProcessHeap(), 0, *val_buf, *val_size * sizeof(TCHAR)); - CHECK_ENOUGH_MEMORY(val_buf); - } - /* output data for the current key */ - _fputts(_T("\n["), file); - _fputts(*reg_key_name_buf, file); - _fputts(_T("]\n"), file); - /* print all the values */ - i = 0; - more_data = TRUE; - while (more_data) { - DWORD value_type; - DWORD val_name_len1 = *val_name_len; - DWORD val_size1 = *val_size; - ret = RegEnumValue(key, i, *val_name_buf, &val_name_len1, NULL, &value_type, *val_buf, &val_size1); - if (ret != ERROR_SUCCESS) { - more_data = FALSE; - if (ret != ERROR_NO_MORE_ITEMS) { - REGPROC_print_error(); - } - } else { - i++; - if ((*val_name_buf)[0]) { - _fputts(_T("\""), file); - REGPROC_export_string(file, *val_name_buf); - _fputts(_T("\"="), file); - } else { - _fputts(_T("@="), file); - } - switch (value_type) { - case REG_EXPAND_SZ: - _fputts(_T("expand:"), file); - case REG_SZ: - _fputts(_T("\""), file); - REGPROC_export_string(file, *val_buf); - _fputts(_T("\"\n"), file); - break; - case REG_DWORD: - _ftprintf(file, _T("dword:%08lx\n"), *((DWORD *)*val_buf)); - break; - default: -/* - _tprintf(_T("warning - unsupported registry format '%ld', ") \ - _T("treating as binary\n"), value_type); - _tprintf(_T("key name: \"%s\"\n"), *reg_key_name_buf); - _tprintf(_T("value name:\"%s\"\n\n"), *val_name_buf); - */ - /* falls through */ - case REG_MULTI_SZ: - /* falls through */ - case REG_BINARY: - { - DWORD i1; - TCHAR *hex_prefix; - TCHAR buf[20]; - int cur_pos; - - if (value_type == REG_BINARY) { - hex_prefix = _T("hex:"); - } else { - hex_prefix = buf; - _stprintf(buf, _T("hex(%ld):"), value_type); - } - /* position of where the next character will be printed */ - /* NOTE: yes, _tcslen("hex:") is used even for hex(x): */ - cur_pos = _tcslen(_T("\"\"=")) + _tcslen(_T("hex:")) + - _tcslen(*val_name_buf); - _fputts(hex_prefix, file); - for (i1 = 0; i1 < val_size1; i1++) { - _ftprintf(file, _T("%02x"), (unsigned int)(*val_buf)[i1]); - if (i1 + 1 < val_size1) { - _fputts(_T(","), file); - } - cur_pos += 3; - /* wrap the line */ - if (cur_pos > REG_FILE_HEX_LINE_LEN) { - _fputts(_T("\\\n "), file); - cur_pos = 2; - } - } - _fputts(_T("\n"), file); - break; - } - } - } - } - i = 0; - more_data = TRUE; - (*reg_key_name_buf)[curr_len] = _T('\\'); - while (more_data) { - DWORD buf_len = *reg_key_name_len - curr_len; - ret = RegEnumKeyEx(key, i, *reg_key_name_buf + curr_len + 1, &buf_len, NULL, NULL, NULL, NULL); - if (ret != ERROR_SUCCESS && ret != ERROR_MORE_DATA) { - more_data = FALSE; - if (ret != ERROR_NO_MORE_ITEMS) { - REGPROC_print_error(); - } - } else { - HKEY subkey; - - i++; - if (RegOpenKey(key, *reg_key_name_buf + curr_len + 1, &subkey) == ERROR_SUCCESS) { - export_hkey(file, subkey, reg_key_name_buf, reg_key_name_len, val_name_buf, val_name_len, val_buf, val_size); - RegCloseKey(subkey); - } else { - REGPROC_print_error(); - } - } - } - (*reg_key_name_buf)[curr_len] = _T('\0'); -} -/* -#define REG_NONE ( 0 ) // No value type -#define REG_SZ ( 1 ) // Unicode nul terminated string -#define REG_EXPAND_SZ ( 2 ) // Unicode nul terminated string - // (with environment variable references) -#define REG_BINARY ( 3 ) // Free form binary -#define REG_DWORD ( 4 ) // 32-bit number -#define REG_DWORD_LITTLE_ENDIAN ( 4 ) // 32-bit number (same as REG_DWORD) -#define REG_DWORD_BIG_ENDIAN ( 5 ) // 32-bit number -#define REG_LINK ( 6 ) // Symbolic Link (unicode) -#define REG_MULTI_SZ ( 7 ) // Multiple Unicode strings -#define REG_RESOURCE_LIST ( 8 ) // Resource list in the resource map -#define REG_FULL_RESOURCE_DESCRIPTOR ( 9 ) // Resource list in the hardware description -#define REG_RESOURCE_REQUIREMENTS_LIST ( 10 ) - - */ -/****************************************************************************** - * Open file for export. - */ -FILE *REGPROC_open_export_file(TCHAR *file_name) -{ -//_CRTIMP FILE * __cdecl _wfopen(const wchar_t *, const wchar_t *); - -//FILE* fopen (const char* szFileName, const char* szMode); -//FILE* _wfopen(const wchar_t *file, const wchar_t *mode); - - FILE *file = _tfopen(file_name, _T("w")); - if (!file) { - perror(""); - _tprintf(_T("REGPROC_open_export_file(%s) - Can't open file.\n"), file_name); - //exit(1); - return NULL; - } - _fputts(_T("REGEDIT4\n"), file); - return file; -} - -/****************************************************************************** - * Writes contents of the registry key to the specified file stream. - * - * Parameters: - * file_name - name of a file to export registry branch to. - * reg_key_name - registry branch to export. The whole registry is exported if - * reg_key_name is NULL or contains an empty string. - */ -BOOL export_registry_key(TCHAR* file_name, TCHAR* reg_key_name) -{ - HKEY reg_key_class; - - TCHAR *reg_key_name_buf; - TCHAR *val_name_buf; - BYTE *val_buf; - DWORD reg_key_name_len = KEY_MAX_LEN; - DWORD val_name_len = KEY_MAX_LEN; - DWORD val_size = REG_VAL_BUF_SIZE; - FILE *file = NULL; - - //_tprintf(_T("export_registry_key(%s, %s)\n"), reg_key_name, file_name); - - reg_key_name_buf = HeapAlloc(GetProcessHeap(), 0, reg_key_name_len * sizeof(*reg_key_name_buf)); - val_name_buf = HeapAlloc(GetProcessHeap(), 0, val_name_len * sizeof(*val_name_buf)); - val_buf = HeapAlloc(GetProcessHeap(), 0, val_size); - CHECK_ENOUGH_MEMORY(reg_key_name_buf && val_name_buf && val_buf); - - if (reg_key_name && reg_key_name[0]) { - TCHAR *branch_name; - HKEY key; - - REGPROC_resize_char_buffer(®_key_name_buf, ®_key_name_len, - _tcslen(reg_key_name)); - _tcscpy(reg_key_name_buf, reg_key_name); - - /* open the specified key */ - reg_key_class = getRegClass(reg_key_name); - if (reg_key_class == (HKEY)ERROR_INVALID_PARAMETER) { - _tprintf(_T("Incorrect registry class specification in '%s\n"), reg_key_name); - //exit(1); - return FALSE; - } - branch_name = getRegKeyName(reg_key_name); - CHECK_ENOUGH_MEMORY(branch_name); - if (!branch_name[0]) { - /* no branch - registry class is specified */ - file = REGPROC_open_export_file(file_name); - export_hkey(file, reg_key_class, - ®_key_name_buf, ®_key_name_len, - &val_name_buf, &val_name_len, - &val_buf, &val_size); - } else if (RegOpenKey(reg_key_class, branch_name, &key) == ERROR_SUCCESS) { - file = REGPROC_open_export_file(file_name); - export_hkey(file, key, - ®_key_name_buf, ®_key_name_len, - &val_name_buf, &val_name_len, - &val_buf, &val_size); - RegCloseKey(key); - } else { - _tprintf(_T("Can't export. Registry key '%s does not exist!\n"), reg_key_name); - REGPROC_print_error(); - } - HeapFree(GetProcessHeap(), 0, branch_name); - } else { - int i; - - /* export all registry classes */ - file = REGPROC_open_export_file(file_name); - for (i = 0; i < REG_CLASS_NUMBER; i++) { - /* do not export HKEY_CLASSES_ROOT */ - if (reg_class_keys[i] != HKEY_CLASSES_ROOT && - reg_class_keys[i] != HKEY_CURRENT_USER && - reg_class_keys[i] != HKEY_CURRENT_CONFIG) { - _tcscpy(reg_key_name_buf, reg_class_names[i]); - export_hkey(file, reg_class_keys[i], - ®_key_name_buf, ®_key_name_len, - &val_name_buf, &val_name_len, - &val_buf, &val_size); - } - } - } - if (file) { - fclose(file); - } -// HeapFree(GetProcessHeap(), 0, reg_key_name); - HeapFree(GetProcessHeap(), 0, val_buf); - HeapFree(GetProcessHeap(), 0, val_name_buf); - HeapFree(GetProcessHeap(), 0, reg_key_name_buf); - return TRUE; -} - -/****************************************************************************** - * Reads contents of the specified file into the registry. - */ -BOOL import_registry_file(LPTSTR filename) -{ - FILE* reg_file = _tfopen(filename, _T("r")); - - if (reg_file) { - processRegLines(reg_file, doSetValue); - return TRUE; - } - return FALSE; -} - -/****************************************************************************** - * Recursive function which removes the registry key with all subkeys. - */ -BOOL delete_branch(HKEY key, TCHAR** reg_key_name_buf, DWORD* reg_key_name_len) -{ - HKEY branch_key; - DWORD max_sub_key_len; - DWORD subkeys; - DWORD curr_len; - LONG ret; - long int i; - - if (RegOpenKey(key, *reg_key_name_buf, &branch_key) != ERROR_SUCCESS) { - REGPROC_print_error(); - return FALSE; - } - - /* get size information and resize the buffers if necessary */ - if (RegQueryInfoKey(branch_key, NULL, NULL, NULL, &subkeys, &max_sub_key_len, - NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) { - REGPROC_print_error(); - RegCloseKey(branch_key); - return FALSE; - } - curr_len = _tcslen(*reg_key_name_buf); - REGPROC_resize_char_buffer(reg_key_name_buf, reg_key_name_len, max_sub_key_len + curr_len + 1); - - (*reg_key_name_buf)[curr_len] = '\\'; - for (i = subkeys - 1; i >= 0; i--) { - DWORD buf_len = *reg_key_name_len - curr_len; - ret = RegEnumKeyEx(branch_key, i, *reg_key_name_buf + curr_len + 1, &buf_len, NULL, NULL, NULL, NULL); - if (ret != ERROR_SUCCESS && ret != ERROR_MORE_DATA && ret != ERROR_NO_MORE_ITEMS) { - REGPROC_print_error(); - RegCloseKey(branch_key); - return FALSE; - } else { - delete_branch(key, reg_key_name_buf, reg_key_name_len); - } - } - (*reg_key_name_buf)[curr_len] = '\0'; - RegCloseKey(branch_key); - RegDeleteKey(key, *reg_key_name_buf); - return TRUE; -} - -/****************************************************************************** - * Removes the registry key with all subkeys. Parses full key name. - * - * Parameters: - * reg_key_name - full name of registry branch to delete. Ignored if is NULL, - * empty, points to register key class, does not exist. - */ -void delete_registry_key(TCHAR* reg_key_name) -{ - TCHAR* branch_name; - DWORD branch_name_len; - HKEY reg_key_class; - HKEY branch_key; - - if (!reg_key_name || !reg_key_name[0]) { - return; - } - /* open the specified key */ - reg_key_class = getRegClass(reg_key_name); - if (reg_key_class == (HKEY)ERROR_INVALID_PARAMETER) { - _tprintf(_T("Incorrect registry class specification in '%s'\n"), reg_key_name); - //exit(1); - return; - } - branch_name = getRegKeyName(reg_key_name); - CHECK_ENOUGH_MEMORY(branch_name); - branch_name_len = _tcslen(branch_name); - if (!branch_name[0]) { - _tprintf(_T("Can't delete registry class '%s'\n"), reg_key_name); - //exit(1); - return; - } - if (RegOpenKey(reg_key_class, branch_name, &branch_key) == ERROR_SUCCESS) { - /* check whether the key exists */ - RegCloseKey(branch_key); - delete_branch(reg_key_class, &branch_name, &branch_name_len); - } - HeapFree(GetProcessHeap(), 0, branch_name); -} - diff --git a/rostests/tests/regdump/regproc.h b/rostests/tests/regdump/regproc.h deleted file mode 100644 index 70215a1ead4..00000000000 --- a/rostests/tests/regdump/regproc.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 1999 Sylvain St-Germain - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/****************************************************************************** - * Defines and consts - */ -#define KEY_MAX_LEN 1024 - -/* Return values */ -#define SUCCESS 0 -#define KEY_VALUE_ALREADY_SET 2 - -typedef void (*CommandAPI)(LPTSTR lpsLine); - -void doSetValue(LPTSTR lpsLine); -void doDeleteValue(LPTSTR lpsLine); -void doCreateKey(LPTSTR lpsLine); -void doDeleteKey(LPTSTR lpsLine); -void doQueryValue(LPTSTR lpsLine); -void doRegisterDLL(LPTSTR lpsLine); -void doUnregisterDLL(LPTSTR lpsLine); - -BOOL export_registry_key(TCHAR* file_name, TCHAR* reg_key_name); -BOOL import_registry_file(LPTSTR filename); -void delete_registry_key(TCHAR* reg_key_name); - -void processRegLines(FILE* in, CommandAPI command); - -/* - * Generic prototypes - */ -#ifdef _UNICODE -#define get_file_name get_file_nameW -#else -#define get_file_name get_file_nameA -#endif - -char* getToken(char** str, const char* delims); -void get_file_nameA(CHAR** command_line, CHAR* filename, int max_filename); -void get_file_nameW(CHAR** command_line, WCHAR* filename, int max_filename); -DWORD convertHexToDWord(TCHAR* str, BYTE* buf); -DWORD convertHexCSVToHex(TCHAR* str, BYTE* buf, ULONG bufLen); -LPTSTR convertHexToHexCSV(BYTE* buf, ULONG len); -LPTSTR convertHexToDWORDStr(BYTE* buf, ULONG len); -LPTSTR getRegKeyName(LPTSTR lpLine); -HKEY getRegClass(LPTSTR lpLine); -DWORD getDataType(LPTSTR* lpValue, DWORD* parse_type); -LPTSTR getArg(LPTSTR arg); -HRESULT openKey(LPTSTR stdInput); -void closeKey(VOID); - -/* - * api setValue prototypes - */ -void processSetValue(LPTSTR cmdline); -HRESULT setValue(LPTSTR val_name, LPTSTR val_data); - -/* - * api queryValue prototypes - */ -void processQueryValue(LPTSTR cmdline); - -#ifdef __GNUC__ -#ifdef WIN32_REGDBG -//typedef UINT_PTR SIZE_T, *PSIZE_T; -//#define _MAX_PATH 260 /* max. length of full pathname */ -#endif /*WIN32_REGDBG*/ - -#ifdef UNICODE -#define _tfopen _wfopen -#else -#define _tfopen fopen -#endif - -#endif /*__GNUC__*/ - -LPVOID RegHeapAlloc( - HANDLE hHeap, // handle to private heap block - DWORD dwFlags, // heap allocation control - SIZE_T dwBytes // number of bytes to allocate -); - -LPVOID RegHeapReAlloc( - HANDLE hHeap, // handle to heap block - DWORD dwFlags, // heap reallocation options - LPVOID lpMem, // pointer to memory to reallocate - SIZE_T dwBytes // number of bytes to reallocate -); - -BOOL RegHeapFree( - HANDLE hHeap, // handle to heap - DWORD dwFlags, // heap free options - LPVOID lpMem // pointer to memory -); diff --git a/rostests/tests/regqueryvalue/regqueryvalue.c b/rostests/tests/regqueryvalue/regqueryvalue.c deleted file mode 100644 index b482cd30276..00000000000 --- a/rostests/tests/regqueryvalue/regqueryvalue.c +++ /dev/null @@ -1,69 +0,0 @@ -#define _DISABLE_TIDENTS -#include -#include -#include -#include -#include - -int main( int argc, char **argv ) { - ULONG ResultSize; - PWCHAR WcharResult; - WCHAR ValueNameWC[100]; - PCHAR CharResult; - HANDLE RegKey; - int i; - - if( argc < 2 ) { - printf( "Usage: regqueryvalue [key] [value]\n" ); - printf( "Returns an HKEY_LOCAL_MACHINE value from the given key.\n" ); - return 1; - } - - if ( RegOpenKeyExA( HKEY_LOCAL_MACHINE, argv[1], 0, KEY_READ, &RegKey ) - != 0 ) { - printf( "Could not open key %s\n", argv[1] ); - return 2; - } - - for( i = 0; argv[2][i]; i++ ) ValueNameWC[i] = argv[2][i]; - ValueNameWC[i] = 0; - - if(RegQueryValueExW( RegKey, ValueNameWC, NULL, NULL, NULL, &ResultSize ) - != 0) { - printf( "The value %S does not exist.\n", ValueNameWC ); - return 5; - } - - WcharResult = malloc( (ResultSize + 1) * sizeof(WCHAR) ); - - if( !WcharResult ) { - printf( "Could not alloc %d wchars\n", (int)(ResultSize + 1) ); - return 6; - } - - RegQueryValueExW( RegKey, ValueNameWC, NULL, NULL, (LPBYTE)WcharResult, - &ResultSize ); - - printf( "wchar Value: %S\n", WcharResult ); - fflush( stdout ); - - RegQueryValueExA( RegKey, argv[2], NULL, NULL, NULL, &ResultSize ); - - CharResult = malloc( ResultSize + 1 ); - - if( !CharResult ) { - printf( "Could not alloc %d chars\n", (int)(ResultSize + 1) ); - return 7; - } - - RegQueryValueExA( RegKey, argv[2], NULL, NULL, CharResult, &ResultSize ); - - printf( " char Value: %s\n", CharResult ); - fflush( stdout ); - - free( WcharResult ); - free( CharResult ); - free( ValueNameWC ); - - return 0; -} diff --git a/rostests/tests/regqueryvalue/regqueryvalue.rbuild b/rostests/tests/regqueryvalue/regqueryvalue.rbuild deleted file mode 100644 index 047d85610c1..00000000000 --- a/rostests/tests/regqueryvalue/regqueryvalue.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - kernel32 - user32 - advapi32 - gdi32 - regqueryvalue.c - diff --git a/rostests/tests/regtest/regtest.c b/rostests/tests/regtest/regtest.c deleted file mode 100644 index 5f93fd303a7..00000000000 --- a/rostests/tests/regtest/regtest.c +++ /dev/null @@ -1,995 +0,0 @@ -#include -#include -#include -#include -#include -#include - -HANDLE OutputHandle; -HANDLE InputHandle; - -void dprintf(char* fmt, ...) -{ - va_list args; - char buffer[255]; - - va_start(args,fmt); - vsprintf(buffer,fmt,args); - WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL); - va_end(args); -} - -void do_enumeratekey(PWSTR Name) -{ - ULONG Index,Length,i; - KEY_BASIC_INFORMATION KeyInformation[5]; - NTSTATUS Status; - OBJECT_ATTRIBUTES ObjectAttributes; - HANDLE hKey1; - UNICODE_STRING KeyName; - - RtlInitUnicodeString(&KeyName, Name); - InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE - , NULL, NULL); - Status=NtOpenKey( &hKey1, MAXIMUM_ALLOWED, &ObjectAttributes); - dprintf("NtEnumerateKey : \n"); - Index=0; - while(Status == STATUS_SUCCESS) - { - Status=NtEnumerateKey(hKey1,Index++,KeyBasicInformation - ,&KeyInformation[0], sizeof(KeyInformation) - ,&Length); - if(Status== STATUS_SUCCESS) - { - dprintf("\tSubKey Name = "); - for (i=0;i - - kernel32 - gdi32 - regtest.c - diff --git a/rostests/tests/sectest/sectest.c b/rostests/tests/sectest/sectest.c deleted file mode 100644 index afb9d3bea20..00000000000 --- a/rostests/tests/sectest/sectest.c +++ /dev/null @@ -1,75 +0,0 @@ -/* $Id$ */ -#define UNICODE -#define _UNICODE -#include -#include -#include - -#include - -int main(int argc, char* argv[]) -{ - HANDLE hFile; - HANDLE Section; - PVOID BaseAddress; - - printf("Section Test\n"); - - hFile = CreateFile(_T("sectest.txt"), - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - CREATE_ALWAYS, - 0, - 0); - if (hFile == INVALID_HANDLE_VALUE) - { - printf("Failed to create file (err=%ld)", GetLastError()); - return 1; - } - - Section = CreateFileMapping(hFile, - NULL, - PAGE_READWRITE, - 0, - 4096, - NULL); - if (Section == NULL) - { - printf("Failed to create section (err=%ld)", GetLastError()); - return 1; - } - - printf("Mapping view of section\n"); - BaseAddress = MapViewOfFile(Section, - FILE_MAP_ALL_ACCESS, - 0, - 0, - 4096); - printf("BaseAddress %x\n", (UINT) BaseAddress); - if (BaseAddress == NULL) - { - printf("Failed to map section (%ld)\n", GetLastError()); - return 1; - } - - printf("Clearing section\n"); - FillMemory(BaseAddress, 4096, ' '); - printf("Copying test data to section\n"); - strcpy(BaseAddress, "test data"); - - if (!UnmapViewOfFile(BaseAddress)) - { - printf("Failed to unmap view of file (%ld)\n", GetLastError()); - return 1; - } - - if (!CloseHandle(hFile)) - { - printf("Failed to close file (%ld)\n", GetLastError()); - return 1; - } - - return 0; -} - diff --git a/rostests/tests/sectest/sectest.rbuild b/rostests/tests/sectest/sectest.rbuild deleted file mode 100644 index 8013b9cebed..00000000000 --- a/rostests/tests/sectest/sectest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - sectest.c - diff --git a/rostests/tests/sertest/sertest.c b/rostests/tests/sertest/sertest.c deleted file mode 100644 index ea5cdbe379a..00000000000 --- a/rostests/tests/sertest/sertest.c +++ /dev/null @@ -1,133 +0,0 @@ -#include -#include - -#include - -#define BUFSIZE 128 -#define MAX_PORTNAME_LEN 20 -#define APP_VERSION_STR "0.01" - -int main(int argc, char *argv[]) -{ - CHAR txBuffer[BUFSIZE]; - CHAR rxBuffer[BUFSIZE]; - DWORD dwBaud = 9600; - DWORD dwNumWritten; - DWORD dwErrors; - DCB dcb; - BOOL bResult; - HANDLE hPort; - int i; - int j; - int k; - int nPortNum = 1; - - TCHAR szPortName[MAX_PORTNAME_LEN]; - - if (argc > 1) { - //sscanf(argv[1], "%d", &dwBaud); - sscanf(argv[1], "%d", &nPortNum); - } - sprintf(szPortName, _T("COM%d"), nPortNum); - - printf("Serial Port Test Application Version %s\n", APP_VERSION_STR); - printf("Attempting to open serial port %d - %s\n", nPortNum, szPortName); - hPort = CreateFile(szPortName, - GENERIC_READ|GENERIC_WRITE, - 0, // exclusive - NULL, // sec attr - OPEN_EXISTING, - 0, // no attributes - NULL); // no template - - if (hPort == (HANDLE)-1) { - printf("ERROR: CreateFile() failed with result: %lx\n", (DWORD)hPort); - return 1; - } - printf("CreateFile() returned: %lx\n", (DWORD)hPort); - - printf("Fiddling with DTR and RTS control lines...\n"); - for (i = 0; i < 100; i++) { - bResult = EscapeCommFunction(hPort, SETDTR); - if (!bResult) { - printf("WARNING: EscapeCommFunction(SETDTR) failed: %lx\n", (DWORD)bResult); - } - bResult = EscapeCommFunction(hPort, SETRTS); - if (!bResult) { - printf("WARNING: EscapeCommFunction(SETRTS) failed: %lx\n", (DWORD)bResult); - } - for (j = 0; j < 1000; j++) { - k *= j; - } -/* -#define CLRDTR (6) -#define CLRRTS (4) -#define SETDTR (5) -#define SETRTS (3) -#define SETXOFF (1) -#define SETXON (2) -#define SETBREAK (8) -#define CLRBREAK (9) - */ - bResult = EscapeCommFunction(hPort, CLRDTR); - if (!bResult) { - printf("WARNING: EscapeCommFunction(CLRDTR) failed: %lx\n", (DWORD)bResult); - } - bResult = EscapeCommFunction(hPort, CLRRTS); - if (!bResult) { - printf("WARNING: EscapeCommFunction(CLRRTS) failed: %lx\n", (DWORD)bResult); - } - } - printf("Getting the default line characteristics...\n"); - dcb.DCBlength = sizeof(DCB); - if (!GetCommState(hPort, &dcb)) { - printf("ERROR: failed to get the dcb: %ld\n", GetLastError()); - return 2; - } - printf("Setting the line characteristics to 9600,8,N,1\n"); - dcb.BaudRate = dwBaud; - dcb.ByteSize = 8; - dcb.Parity = NOPARITY; - dcb.StopBits = ONESTOPBIT; - - bResult = SetCommState(hPort, &dcb); - if (!bResult) { - printf("ERROR: failed to set the comm state: %lx\n", (DWORD)bResult); - return 3; - } - for (i = 0; i < BUFSIZE; i++) { - txBuffer[i] = (CHAR)i; - //printf(" %d ", txBuffer[i]); - rxBuffer[i] = 0xFF; - } - printf("\n"); - printf("Writting transmit buffer to the serial port\n"); - bResult = WriteFile(hPort, txBuffer, BUFSIZE, &dwNumWritten, NULL); - if (!bResult) { - printf("ERROR: failed to write to the serial port: %lx\n", (DWORD)bResult); - return 4; - } - printf("WriteFile() returned: %lx, byteswritten: %lx\n", (DWORD)bResult, dwNumWritten); -#if 0 - printf("Attempting to read %d bytes from the serial port\n", BUFSIZE); - bResult = ReadFile(hPort, rxBuffer, BUFSIZE, &dwNumRead, NULL); - if (!bResult) { - printf("ERROR: failed to read from the serial port: %lx\n", (DWORD)bResult); - return 5; - } - printf("ReadFile() returned: %lx, bytesread: %lx\n", (DWORD)bResult, dwNumRead); - for (i = 0; i < BUFSIZE; i++) { - printf(" %d ",rxBuffer[i]); - } -#endif - printf("Attempting to close the serial port\n"); - bResult = ClearCommError(hPort, &dwErrors, NULL); - printf("ClearCommError returned: %lx, dwErrors: %lx\n", (DWORD)bResult, dwErrors); - bResult = CloseHandle(hPort); - if (!bResult) { - printf("ERROR: failed to close the serial port: %lx\n", (DWORD)bResult); - return 6; - } - printf("Finished\n"); - return 0; -} diff --git a/rostests/tests/sertest/sertest.rbuild b/rostests/tests/sertest/sertest.rbuild deleted file mode 100644 index 63d92bb5691..00000000000 --- a/rostests/tests/sertest/sertest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - sertest.c - diff --git a/rostests/tests/shaptest/shaptest.c b/rostests/tests/shaptest/shaptest.c deleted file mode 100644 index 8400a4c8906..00000000000 --- a/rostests/tests/shaptest/shaptest.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * AUTHOR: See gditest-- (initial changes by Mark Tempel) - * shaptest - * - * This is a windowed application that should draw two polygons. One - * is drawn with ALTERNATE fill, the other is drawn with WINDING fill. - * This is used to test out the Polygon() implementation. - */ - -#include -#include -#include - -#ifndef ASSERT -#define ASSERT assert -#endif - -#define nelem(x) (sizeof (x) / sizeof *(x)) - -HFONT tf; -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); - -void PolygonTest ( HDC hdc ) -{ - HPEN Pen, OldPen; - HBRUSH RedBrush, OldBrush; - DWORD Mode; - POINT PointsAlternate[] = - { - { 20, 80 }, - { 60, 20 }, - { 90, 80 }, - { 20, 40 }, - { 100, 40 } - }; - POINT PointsWinding[] = - { - { 130, 80 }, - { 170, 20 }, - { 200, 80 }, - { 130, 40 }, - { 210, 40 } - }; - POINT Tri1[] = - { - { 3, 3 }, - { 5, 3 }, - { 3, 5 } - }; - POINT Tri2[] = - { - { 7, 3 }, - { 7, 7 }, - { 3, 7 }, - }; - POINT Square1[] = - { - { 1, 15 }, - { 3, 15 }, - { 3, 17 }, - { 1, 17 } - }; - POINT Square2[] = - { - { 5, 15 }, - { 7, 15 }, - { 7, 17 }, - { 5, 17 } - }; - POINT Square3[] = - { - { 1, 23 }, - { 3, 23 }, - { 3, 25 }, - { 1, 25 } - }; - POINT Square4[] = - { - { 5, 23 }, - { 7, 23 }, - { 7, 25 }, - { 5, 25 } - }; - POINT Square5[] = - { - { 1, 31 }, - { 3, 31 }, - { 3, 33 }, - { 1, 33 } - }; - POINT Square6[] = - { - { 5, 31 }, - { 7, 31 }, - { 7, 33 }, - { 5, 33 } - }; - - //create a pen to draw the shape - Pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0xff)); - ASSERT(Pen); - RedBrush = CreateSolidBrush(RGB(0xff, 0, 0)); - ASSERT(RedBrush); - - OldPen = (HPEN)SelectObject(hdc, Pen); - OldBrush = (HBRUSH)SelectObject(hdc, RedBrush); - - Mode = GetPolyFillMode(hdc); - - RoundRect ( hdc, 32, 8, 48, 24, 8, 8 ); - - SetPolyFillMode(hdc, ALTERNATE); - Polygon(hdc,PointsAlternate,nelem(PointsAlternate)); - - SetPolyFillMode(hdc, WINDING); - Polygon(hdc,PointsWinding,nelem(PointsWinding)); - - Rectangle ( hdc, 1, 1, 10, 10 ); - Polygon(hdc,Tri1,nelem(Tri1)); - Polygon(hdc,Tri2,nelem(Tri2)); - - Rectangle ( hdc, 1, 11, 4, 14 ); - Rectangle ( hdc, 5, 11, 8, 14 ); - Rectangle ( hdc, 9, 11, 12, 14 ); - Rectangle ( hdc, 13, 11, 16, 14 ); - Polygon(hdc,Square1,nelem(Square1)); - Polygon(hdc,Square2,nelem(Square2)); - Rectangle ( hdc, 1, 19, 4, 22 ); - Rectangle ( hdc, 5, 19, 8, 22 ); - Rectangle ( hdc, 9, 19, 12, 22 ); - Rectangle ( hdc, 13, 19, 16, 22 ); - Polygon(hdc,Square3,nelem(Square3)); - Polygon(hdc,Square4,nelem(Square4)); - Rectangle ( hdc, 1, 27, 4, 30 ); - Rectangle ( hdc, 5, 27, 8, 30 ); - Rectangle ( hdc, 9, 27, 12, 30 ); - Rectangle ( hdc, 13, 27, 16, 30 ); - - // switch to null pen to make surey they display correctly - DeleteObject ( SelectObject(hdc, OldPen) ); - Pen = CreatePen ( PS_NULL, 0, 0 ); - ASSERT(Pen); - OldPen = (HPEN)SelectObject(hdc, Pen); - - Polygon(hdc,Square5,nelem(Square5)); - Polygon(hdc,Square6,nelem(Square6)); - Rectangle ( hdc, 1, 35, 4, 38 ); - Rectangle ( hdc, 5, 35, 8, 38 ); - Rectangle ( hdc, 9, 35, 12, 38 ); - Rectangle ( hdc, 13, 35, 16, 38 ); - - //cleanup - SetPolyFillMode(hdc, Mode); - DeleteObject ( SelectObject(hdc, OldPen) ); - DeleteObject ( SelectObject(hdc, OldBrush) ); -} - - -void shaptest( HDC hdc ) -{ - //Test the Polygon routine. - PolygonTest(hdc); -} - - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - - wc.lpszClassName = "ShapTestClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = (HICON)LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = (HCURSOR)LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%X)\n", - (unsigned int)GetLastError()); - return(1); - } - - hWnd = CreateWindow("ShapTestClass", - "Shaptest", - WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%X)\n", - (unsigned int)GetLastError()); - return(1); - } - - tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); - - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - DeleteObject(tf); - - return msg.wParam; -} - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hDC; - - switch(msg) - { - - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - shaptest( hDC ); - EndPaint(hWnd, &ps); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} - diff --git a/rostests/tests/shaptest/shaptest.rbuild b/rostests/tests/shaptest/shaptest.rbuild deleted file mode 100644 index a06bf5c3882..00000000000 --- a/rostests/tests/shaptest/shaptest.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - shaptest.c - diff --git a/rostests/tests/shm/shm.rbuild b/rostests/tests/shm/shm.rbuild deleted file mode 100644 index 0f4efd937f6..00000000000 --- a/rostests/tests/shm/shm.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - shm.c - diff --git a/rostests/tests/shm/shmclt.c b/rostests/tests/shm/shmclt.c deleted file mode 100644 index f7ff5ac70a1..00000000000 --- a/rostests/tests/shm/shmclt.c +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include -#include -#include -#include - -HANDLE OutputHandle; -HANDLE InputHandle; - -void debug_printf(char* fmt, ...) -{ - va_list args; - char buffer[255]; - - va_start(args,fmt); - vsprintf(buffer,fmt,args); - WriteConsoleA(OutputHandle, buffer, strlen(buffer), NULL, NULL); - va_end(args); -} - - -int -main(int argc, char* argv[]) -{ - HANDLE Section; - PVOID BaseAddress; - char buffer[256]; - - printf("Shm test server\n"); - - Section = OpenFileMappingW ( -// PAGE_EXECUTE_READWRITE, invalid parameter - FILE_MAP_WRITE, - FALSE, - L"TestSection" - ); - if (Section == NULL) - { - printf("Failed to open section (err=%d)", GetLastError()); - return 1; - } - - BaseAddress = MapViewOfFile(Section, - FILE_MAP_ALL_ACCESS, - 0, - 0, - 8192); - if (BaseAddress == NULL) - { - printf("Failed to map section (err=%d)\n", GetLastError()); - return 1; - } - printf("BaseAddress %x\n", (UINT) BaseAddress); - printf("Copying from section\n"); - strcpy(buffer, BaseAddress); - printf("Copyed <%s>\n", buffer); - -// for(;;); - return 0; -} - diff --git a/rostests/tests/shm/shmsrv.c b/rostests/tests/shm/shmsrv.c deleted file mode 100644 index 79527ea231d..00000000000 --- a/rostests/tests/shm/shmsrv.c +++ /dev/null @@ -1,53 +0,0 @@ -/* $Id$ - * - * FILE : reactos/apps/shm/shmsrv.c - * AUTHOR: David Welch - */ -#include -#include -#include -#include -#include - -int main(int argc, char* argv[]) -{ - HANDLE Section; - PVOID BaseAddress; - - printf("Shm test server\n"); - - Section = CreateFileMappingW ( - (HANDLE) 0xFFFFFFFF, - NULL, - PAGE_READWRITE, - 0, - 8192, - L"TestSection" - ); - if (Section == NULL) - { - printf("Failed to create section (err=%d)", GetLastError()); - return 1; - } - - printf("Mapping view of section\n"); - BaseAddress = MapViewOfFile(Section, - FILE_MAP_ALL_ACCESS, - 0, - 0, - 8192); - printf("BaseAddress %x\n", (UINT) BaseAddress); - if (BaseAddress == NULL) - { - printf("Failed to map section\n"); - } - - printf("Copying to section\n"); - printf("Copying %s\n", GetCommandLineA()); - strcpy(BaseAddress, GetCommandLineA()); - - Sleep(INFINITE); - - return 0; -} - diff --git a/rostests/tests/statst/statst.c b/rostests/tests/statst/statst.c deleted file mode 100644 index 080b77baddb..00000000000 --- a/rostests/tests/statst/statst.c +++ /dev/null @@ -1,165 +0,0 @@ -//#define WIN32_LEAN_AND_MEAN -#include - -static LPSTR STATIC_CLASS = "STATIC"; -static LPSTR TEST_WND_CLASS = "TESTWND"; - -#ifdef NDEBUG - #define DPRINT(s) (void)0 -#else - #define DPRINT(s) OutputDebugStringA("STATICTEST: " s "\n") -#endif - -HINSTANCE AppInstance = NULL; - -LRESULT WmCreate( - HWND Wnd) -{ - UCHAR i; - DPRINT("WM_CREATE (enter)."); - // Test 1 - black rectangle. - DPRINT("test 1"); - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_BLACKRECT, - 10, 10, 100, 20, Wnd, NULL, AppInstance, NULL); - // Test 2 - black frame. - DPRINT("test 2"); - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_BLACKFRAME, - 10, 40, 100, 20, Wnd, NULL, AppInstance, NULL); - // Test 3 - gray rectangle. - DPRINT("test 3"); - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_GRAYRECT, - 10, 70, 100, 20, Wnd, NULL, AppInstance, NULL); - // Test 4 - gray frame. - DPRINT("test 4"); - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_GRAYFRAME, - 10, 100, 100, 20, Wnd, NULL, AppInstance, NULL); - // Test 5 - left-aligned text. - DPRINT("test 5"); - CreateWindowEx(0, STATIC_CLASS, - "&Left-aligned text &static control window", - WS_CHILD | WS_VISIBLE | SS_LEFT, - 10, 130, 100, 50, Wnd, NULL, AppInstance, NULL); - // Test 6 - right-aligned text. - DPRINT("test 6"); - CreateWindowEx(0, STATIC_CLASS, - "&Right-aligned text &static control window", - WS_CHILD | WS_VISIBLE | SS_RIGHT, - 10, 185, 100, 50, Wnd, NULL, AppInstance, NULL); - // Test 7 - centered text. - DPRINT("test 7"); - CreateWindowEx(0, STATIC_CLASS, - "&Centered text &static control window", - WS_CHILD | WS_VISIBLE | SS_CENTER, - 10, 240, 100, 50, Wnd, NULL, AppInstance, NULL); - // Test 8 - left-aligned text with no word wrap and no prefixes. - DPRINT("test 8"); - CreateWindowEx(0, STATIC_CLASS, - "&No prefix and no word wrapping", - WS_CHILD | WS_VISIBLE | SS_LEFTNOWORDWRAP | SS_NOPREFIX, - 10, 295, 100, 20, Wnd, NULL, AppInstance, NULL); - // Test 9 - white rectangle. - DPRINT("test 9"); - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_WHITERECT, - 120, 10, 100, 20, Wnd, NULL, AppInstance, NULL); - // Test 10 - white frame. - DPRINT("test 10"); - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_WHITEFRAME, - 120, 40, 100, 20, Wnd, NULL, AppInstance, NULL); - // Test 11 - etched frame. - DPRINT("test 11"); - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE - | SS_ETCHEDFRAME, 120, 70, 100, 20, Wnd, NULL, AppInstance, NULL); - // Test 12 - etched horizontal lines. - DPRINT("test 12"); - for (i = 0; i < 5; ++i) - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE - | SS_ETCHEDHORZ, 120, 100 + (4L * i), 100, 4, Wnd, - NULL, AppInstance, NULL); - // Test 13 - etched vertical lines. - DPRINT("test 13"); - for (i = 0; i < 25; ++i) - CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE - | SS_ETCHEDVERT, 120 + (4L * i), 130, 4, 20, Wnd, - NULL, AppInstance, NULL); - // Test 14 - sunken border. - DPRINT("test 14"); - CreateWindowEx(0, STATIC_CLASS, - "Sunken frame and word ellipsis", - WS_CHILD | WS_VISIBLE | SS_SUNKEN | SS_WORDELLIPSIS, - 120, 160, 100, 20, Wnd, NULL, AppInstance, NULL); - DPRINT("WM_CREATE (leave)."); - return 0; -} - -LRESULT CALLBACK TestWndProc( - HWND Wnd, - UINT Msg, - WPARAM wParam, - LPARAM lParam) -{ - switch (Msg) { - case WM_CREATE: - return WmCreate(Wnd); - case WM_DESTROY: - PostQuitMessage(0); - return 0; - default: - return DefWindowProc(Wnd, Msg, wParam, lParam); - } -} - -int STDCALL WinMain( - HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nShowCmd) -{ - ATOM Result; - MSG Msg; - HWND MainWindow; - WNDCLASSEX TestWndClass = {0}; - DPRINT("Application starting up."); - // Remember instance handle. - AppInstance = GetModuleHandle(NULL); - // Register test window class. - TestWndClass.cbSize = sizeof(WNDCLASSEX); - TestWndClass.lpfnWndProc = &TestWndProc; - TestWndClass.hInstance = AppInstance; - TestWndClass.hCursor = LoadCursor(0, (LPCTSTR)IDC_ARROW); - TestWndClass.hbrBackground = CreateSolidBrush(RGB(255,255,230)); - TestWndClass.lpszClassName = TEST_WND_CLASS; - Result = RegisterClassEx(&TestWndClass); - if (Result == 0) { - DPRINT("Error registering class."); - MessageBox(0, "Error registering test window class.", - "Static control test", MB_ICONSTOP | MB_OK); - ExitProcess(0); - } - // Create main window. - DPRINT("Creating main window."); - MainWindow = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE, - TEST_WND_CLASS, "Static control test", - WS_OVERLAPPEDWINDOW, 50, 50, 245, 365, - NULL, NULL, AppInstance, NULL); - if (MainWindow == 0) { - DPRINT("Error creating main window."); - UnregisterClass(TEST_WND_CLASS, AppInstance); - MessageBox(0, "Error creating test window.", - "Static control test", MB_ICONSTOP | MB_OK); - ExitProcess(0); - } - DPRINT("Showing main window."); - ShowWindow(MainWindow, SW_SHOWNORMAL); - UpdateWindow(MainWindow); - // Run message loop. - DPRINT("Entering message loop."); - while (GetMessage(&Msg, NULL, 0, 0) > 0) { - TranslateMessage(&Msg); - DispatchMessage(&Msg); - } - // Unregister window class. - UnregisterClass(TEST_WND_CLASS, AppInstance); - DPRINT("Exiting."); - - return Msg.wParam; -} diff --git a/rostests/tests/statst/statst.rbuild b/rostests/tests/statst/statst.rbuild deleted file mode 100644 index 07da4d0541d..00000000000 --- a/rostests/tests/statst/statst.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - statst.c - diff --git a/rostests/tests/statst2/statst2.c b/rostests/tests/statst2/statst2.c deleted file mode 100644 index 6ac769ed38b..00000000000 --- a/rostests/tests/statst2/statst2.c +++ /dev/null @@ -1,180 +0,0 @@ -// Static Control Test.c - -//#define WIN32_LEAN_AND_MEAN -#include -#include - -#ifndef SS_ENDELLIPSIS -#define SS_ENDELLIPSIS 0x00004000L -#endif /* SS_ENDELLIPSIS */ - - -#define nMaxCtrls 32 -#define nStaticWidth 384 -#define nStaticHeight 18 - -HWND g_hwnd = NULL; -HINSTANCE g_hInst = 0; -int nNextCtrl = 0; -HWND g_hwndCtrl[nMaxCtrls]; - -static void CreateStatic ( const char* lpWindowName, DWORD dwStyle ) -{ - int n = nNextCtrl++; - assert ( n < nMaxCtrls ); - g_hwndCtrl[n] = CreateWindow ( - "STATIC", // lpClassName - lpWindowName, // lpWindowName - WS_VISIBLE|WS_CHILD|dwStyle, // dwStyle - n+2, // x - nStaticHeight*n+1, // y - nStaticWidth, // nWidth - nStaticHeight-1, // nHeight - g_hwnd, // hWndParent - NULL, // hMenu - g_hInst, // hInstance - NULL ); // lParam -} - -LRESULT CALLBACK WndProc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) -{ - int i; - switch ( msg ) - { - case WM_CREATE: - g_hwnd = hwnd; - for ( i = 0; i < nMaxCtrls; i++ ) - g_hwndCtrl[i] = NULL; - - CreateStatic ( "SS_NOTIFY test (click/double-click here)", SS_NOTIFY ); - - CreateStatic ( "SS_ENDELLIPSIS test test test test test test test test test test test", SS_ENDELLIPSIS ); - - CreateStatic ( "SS_CENTER test", SS_CENTER ); - - CreateStatic ( "SS_RIGHT test", SS_RIGHT ); - - CreateStatic ( "SS_BLACKFRAME test:", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_BLACKFRAME ); - - CreateStatic ( "SS_BLACKRECT test:", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_BLACKRECT ); - - CreateStatic ( "SS_ETCHEDFRAME test:", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDFRAME ); - - CreateStatic ( "SS_ETCHEDHORZ test:", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDHORZ ); - - CreateStatic ( "SS_ETCHEDVERT test", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDVERT ); - - CreateStatic ( "SS_GRAYFRAME test", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_GRAYFRAME ); - - CreateStatic ( "SS_GRAYRECT test", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_GRAYRECT ); - - CreateStatic ( "SS_NOPREFIX &test", SS_NOPREFIX ); - - CreateStatic ( "SS_OWNERDRAW test", SS_OWNERDRAW ); - - CreateStatic ( "SS_SUNKEN test", SS_SUNKEN ); - - CreateStatic ( "SS_WHITEFRAME test:", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_WHITEFRAME ); - - CreateStatic ( "SS_WHITERECT test:", 0 ); - CreateStatic ( "this text shouldn't be visible!", SS_WHITERECT ); - - //if ( creation fails ) - // return 0; - break; - - case WM_COMMAND: - if ( HIWORD(wParam) == STN_CLICKED ) - SetWindowText ( (HWND)lParam, "SS_NOTIFY:STN_CLICKED!" ); - if ( HIWORD(wParam) == STN_DBLCLK ) - SetWindowText ( (HWND)lParam, "SS_NOTIFY:STN_DBLCLK!" ); - break; - - case WM_DRAWITEM: - { - LPDRAWITEMSTRUCT lpDrawItem = (LPDRAWITEMSTRUCT) lParam; - DrawText ( lpDrawItem->hDC, "SS_DRAWITEM test successful!", 28, &(lpDrawItem->rcItem), 0 ); - } - break; - - case WM_DESTROY: - PostQuitMessage(0); - return 0; - } - return DefWindowProc ( hwnd, msg, wParam, lParam ); -} - -HWND RegisterAndCreateWindow ( - HINSTANCE hInst, - const char* className, - const char* title ) -{ - WNDCLASSEX wc; - HWND hwnd; - - g_hInst = hInst; - - wc.cbSize = sizeof (WNDCLASSEX); - wc.lpfnWndProc = WndProc; // window procedure: mandatory - wc.hInstance = hInst; // owner of the class: mandatory - wc.lpszClassName = className; // mandatory - wc.hCursor = LoadCursor ( 0, (LPCTSTR)IDC_ARROW ); // optional - wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // optional - wc.style = 0; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hIcon = 0; - wc.hIconSm = 0; - wc.lpszMenuName = 0; - if ( !RegisterClassEx ( &wc ) ) - return NULL; - - hwnd = CreateWindowEx ( - 0, // dwStyleEx - className, // class name - title, // window title - WS_OVERLAPPEDWINDOW, // dwStyle - CW_USEDEFAULT, // x - CW_USEDEFAULT, // y - CW_USEDEFAULT, // width - CW_USEDEFAULT, // height - NULL, // hwndParent - NULL, // hMenu - hInst, // hInstance - 0 ); // lParam - - if ( !hwnd ) - return NULL; - - ShowWindow ( hwnd, SW_SHOW ); - UpdateWindow ( hwnd ); - - return hwnd; -} - -int WINAPI WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow ) -{ - char className [] = "Static Control Test"; - HWND hwnd; - MSG msg; - int status; - - hwnd = RegisterAndCreateWindow ( hInst, className, "Static Control Test" ); - - // Message loop - while ((status = GetMessage (& msg, 0, 0, 0)) != 0) - { - if (status == -1) - return -1; - DispatchMessage ( &msg ); - } - return msg.wParam; -} diff --git a/rostests/tests/statst2/statst2.rbuild b/rostests/tests/statst2/statst2.rbuild deleted file mode 100644 index 55abda20797..00000000000 --- a/rostests/tests/statst2/statst2.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - statst2.c - diff --git a/rostests/tests/stretchblt/lena.bmp b/rostests/tests/stretchblt/lena.bmp deleted file mode 100644 index e9916963852a9748baf1b9ac6093fb3b9179dbbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89322 zcma&vKawKP@-6s!8<;{I4aBE`G%DEWW8?zHjNC!81K0uV0Q9jj5Jsnj(W`b)EkC7u z2R)zTkx*23-}jro@#QATpUMnBas0T4NASP@AOGY3{BJM$_rLk?zx(h1^56gMzyJ2~ zzj}Om`G36r|Nbv8^iTRl^JZ=GI$bT-i}|u!d0Z^#%T3qMr@m;u znlBH-cC}cp{cpb94ZHnzKb_3Hc|KdbzD{!ivt>2kznnWiUrr`Ix}MEe_w%mP`EIt@ z%~$({wmvRaCvDlC=BtCRs#mwm^>MX1uR86r+PLMb$3L2ry5iohOK-ckyt7Z!UF-gq zHr(`{KHNODe)rz*--rFj_VBSge(X=52ko48JpVXdTKjpr{5)NMp05smc)Y#;?uX-a z-gm>b8!n6WuIu+*e^~d&?yGrvSZ~I*8V~mC&2H80)}6=wsyi$@w|QD_PV@C~>3+Aj zHM<`^kJq0K16?ri-t9jc05*$( z1%sgR^>sFx%)C0Atv8#!$3n$o;si9!*VFj`NAvZLt(Pm^s2`5=)o~H!zaQFm(-SM+wfc5X~vtTfq{(*tFkKY0I zyl1|3e`eoqII{TN(9Q15U9CTWM=YMFyEGWcBMj_eU{P%~T!!Q4aQe|5K6+Pj`B4~n z-|RkIr`Bz6kAwB#mM^`(zTQ^PvuRrOe+~?1$8B_b%2JLOdVaQQW0rl}$-C{wZ-575 zA4pg{%+L@rVU^|3^&2qQ^xble2fB5?T&!#C&tTx?Wipxg#L~fRzM0N8^Z91GzjeUB z?&tH6z%=*_Khyz3Zy0*P=<9Px00z4Ae0`cNdepI8Zk8+k0~-PSx&wnt2%*?u9QbAT z=i?CuHSq5YF!Deb5*VqVVDKIWs5b218wot|KrryI{;|e>o?b%&m$%=}yu7?Fmi>Bj zS@q{O-n;&^8OBln82%#+I@W)@6w_A=AuPMYVtrWk0l@b1b9epKpMPwQKX#Xq2Vj8p zHFmEC&j5c}bm#SI-}i?i*s|bbbl12x29f-F)xiMkFza%@X0_#fWtbOWJT{|z15dCq zft3}HFf(SWVViBg-EViBRkz*reb+DZY8Yd+1g%BBdD(9^yM8!z-OhzASN(2#SmeBG zSUwuihOfdK2K%r;{wprv6ds77&rVLJ%jKe5u295zQB=RK$L18q;a{BZc*H>Yi)SkM zasi_k2mtgUBK?Me0>Cyr5E2Lv+(}@>!1X7KJANR6BiIb*U|_*d76vwZXorEggD+b@ zj*AVR&VR>1sKAA7Pe1q9-@EJY;rw%R`mt?1!29n|LF0iE1609qgK#_m1ItCPGufJn z8KQWAXAdMEoWQ2q>+6J>3|_}~{osYwVqt{Vo9k2U%`EG{tG*Kkmh;61bM;$P&||S- zJ8YsufMf_T_8iCMbUhy~kkfTrULb_tkuRr_KXMg-L zoXZ!C7ytvR021EGgJ58|!9dp?m&-wiXH2ybO}W7X3NLpMRFsQnBZRP=QF0xt#ORZU z2yE|Xk^86O3xa_~zIILz001vQBCeM!Fxd73kH8&lhg~qB6L0V9`RXPAe6R0c#^cBO z;fiMr6azT#qy~OquwAWBgdcMg13bcFxtmTS7#0-o>Nt-Wh!<#&&m;Yt{QCm{o<0O& zlY-RXvmpG_5q!r$0Pv*)BLk|PuRpGDzqFT0+$(WQ4-l>efM6gd?*AhO?!eeLB@jnI z4s|dv|mi5O#pu&M-004*{h^!J6JOSWu9*7!zVBm5mfl(5K1a^nZ%Zu(^==@bw{UzZ* zG$9OltoAP|cwpem7u+$x9c+)EhuiP{?H5(R9cTtsjeUCHfq{?0z#D`c9h?4aq)aLh zXasBUHv5)M1Bo)hIO@0EFmywEPvlx(`a0e34hUgw3;OnBhqegeW%GXY1eN!Loj1g8(40K!pP$g7@K&sBl|R;g=W~9YNUO zLIjQ^@CzZlfBYtOUS5K8H@eyc10D+l#Q27#OI;ZjW{2mrBTmz%hA5U`U{>Tx{TKU#FX8w;x1v;Q<(+ z1ZV~y$!G8RgnWuGC-LS<0!Rh0tl`fKEDHv50(iig)BXS(Gy}Kt`ZB=`!*)j|=@ws} zZ(eNX-1@950Jy400}Ra2@ag1Agf(046BVwGBL=2%BC92}uv>JrV#7cH&@k|fgytRo z=7cXz*usH7asmkn$Fx8N1x*l^7`PCDCz_=UytIGwJi6RLE>&-{gf>%-{5#$Vw;EK=Ga7%1!C+2AQPG^Pat zgL_o?FAOv_c=>U;Vt`*@00W2P4GHKdU8LWZ>wW&v=F|lP5)p&>%{H-8q6!RB*ZdyxgJ&XY-E#Ef@nTQP>OXk|~NBqz~l@?-*!=5ON3=G%@f1 zL&-vSy~P6y?tn1x+1+g$H7GXx`NRXw^xrUm_hyvRdVjinaJzc4>=+uak<~Cz-9C=B zAi;lYp_}B7QQ8uQO*&4A|BjV8eUH36{%7%(Eb+R-{K3F%*>MXlbl5{44A2S7#d@{u z03aCXpyIgSoduz}7^aRLSM$ma!9ZPDE+go0GQd~{8>I{diCn)_bOHhSfk|FUnrOLi z7$BP$1%|RdR7lOW@g593TEfOZF+dDFM+B5W>47+cz~HV2K4BorysRHz&|-mL;Kvyi z+~Npy_{$3<=i&oYJh0qswyuHogMo;{KQK@L_y-0y4=TU|fx(1QCLl0*rZLLykbw__#j|!(Id@RoHI^c-Rhy zdlo&-gjXSR7n4UeZJbaTc=UW;!V<)Qct7Uml*1nE!P6VdKIYVlI|xNoo)8%L1xldA z;fnVM1E`Q30K3C>-*0w$gCP9%gMytN<%pL3OA;1yT)-F9U~vu5*si25qc9L)z(B4% z0f)a++W3@&;c`gK7%dTBfE08egzJM;Vqo@Teb(1V#+RDLnDOJs!L(fiWU@ z%Oueu4DbgDGz>I%Fh+>Q2J%85KYo*5Nq|Jatm@W+0XI7AZZII_Tkast|5rOac;G8_ zOeHova0lz{nlF$nN`P=AffjggbN&khqcDI02_pTl+g<0g4h}Pv47_;uVBy~38R?A{ z8Y(=t0iHJ@0oOl?cZe{c2^}x_{*EtbAb|nqfeNYs7044x1Uv3KXy6Wp#bPb7KWw(= zqpO`VD)xK?Gp|AhNI|0RVu3CK!Bs|D}T~9p}Q9@>dyp^Rr z!~+csUl@ol2oE$E>|lvI04jdrfq@njBs)|QVlW^8*<9Yo=#lkda>wN zLdARDpmK)Cv7DgQ5{!Z20|xD&s36vFtsFtc0uKRDV&LuzLIUA|F(|kQ4PyG%Dk=1{ z%P5=F@ORmI8%kYpVZhWmN=MG!aU(W-)`WK$L=W8Kg3%X55H=aG;|1zV2^;&A3gEh^1#d8Y3;?U;Ec2t48_a~!zLyq02re+s`FK6-PSrWf%n?YP8(J`cOPT3XXA2%@)ZH z1rN*3ZMr;l^Zs!Dn2}8L&8yKqU%XB;W5n%}c&uzrM_P{`r|VFy`5lI4V%pCzhZb?% zTJ+ZqGj#DXA@3y+V!ddCqzB!wq|jz9OCTvEMcDVN)h3xzPG@yJ-HHuf_uGTh{%E{p zqW)aKa?#DEp2p~{HD}ZqX*?Oucga4I!L?X!5JJHQunEF}CKNNWyB@}Vq*o-9e6p$Y za{Z5}@CyJX6umm?0UEmqVc5S(#-{Bh1b)Z~IBo?4`{R$p>F43}!3*rqKM$8*&YK>3 z`}n!(F@Q8cf|MHjF3$xA1I1l(BN&r9W)y%lM2?9L*xlnO2JTAW9uX80iUdjn$j3(v ztlVtxmWBKLpZ)HKfip>WGvFfjuK)oI!uAxJ zS)5Gz#GvKeg?SqU?hR9pV492&+UM(s8uFfc2@+BFluG4eM^(ZCGk0iGMgH zNjRDJN=0_Z9HW0;GLk+XAs849`oKUt@P_e>g9He746u6%tw18tA`B#86g2S&VS^B0 zO)V7+gyfgVgTGpX2d4=JW{6raxIH8#XkH)(9-9nkH3Mh9pa4+C1CB459Q?6LZHyap zwdl0>hydgME|U^u$r&=h9RraKW(14|1I2zk z!WRZoEv6a%VE}TWr2-ZB_t4GP#)hXL$)vg1qdOK;0V|!s&9eG6$fS#fnAaS#TzaB@7FUp zFkiT$30c3V9TxNfJSaRJk$;cc(JCA@SLmciL#eXC zKWJWe)O1d+yduFT48XaY4GC!J;n{k-e>X6V_m(2KD?nEZ41C#cd>oSiv3ps+kM-44 zRU5w$Ap{$mj(uq*PdF{KHj=>Atqr@k^X1oUagJ7Tg_GrEKHHyu#|`WKVt7`Ty9+3C z7YqOI%vx#L)M$?wn7cRAGrPS<4G&}*$Q+cit>bCCF&8jRXt3l6xazg!FwMYCm@|?g zWINR($HUQJDd5Gp(Sb?vH4LP$?i%132IDc9XoZ}H0pAcHl}}4hAnHj;VTOF^0oIQ% z2n>`LW_Bh37%`Bs{|yYG2+jp!PXj`{uUG4ia%}-; zc)*Ot&_tktQU@E}DhJ*$U2gYpMb7&MgAoj2g95;4`m(H1Z$4B3RmT3txb(=IWSTX{ z^)wTv-mt!7KxotQ19;#aDqy<}gtzO*didd*IV6>09w$?Z&Oh#epl=Y3=$e}+s=`0k zZ${znJKks`@k`@%l74g}TEGU*lL5!wZdD|J^E;rV6lexT=4!=XQ&9~t=Kw$)SgD3& zp7DTgVbJISPO2R{ESKsH-`X<)ox znO4$W0&}(fEn6GIFHrYD!7u?62LsqWOvN;M82hi9j{pO2pbw4ujUaQ_cFUDB-X{6K zk~)|zoK!)IAJ#NkWe9~8%OzxTAN$+ocHHi!uk=JDfzSH?h5=Mi7y!vH4E$mJ_Oy{e z1zZJy27`Q+3+8G!=9DvU7#VQNkgr5>!9Z^Z6=`t|4FJ~;^Cwuy@Yf(AJkZ?1HW=8A z7_f-oLxr$uAQQnLPuRGxN$vq$4WnSS=m-zQ7r+2tP$41yU%~cb9t;3O@$do%66Z0U zoel?&TcvW~u<0p(2oXAn2-G9tA7A1Px@=O+^Bn{Jq`uOJW0yK^eOr$?uI^pJK(WLF z20A|&2oES8$b5mp6&Q3fz?B&o^8>~Fv32|cbB`EkNFbS-^_eD;V0()rsA8c?{(PDP zpQIB0Re&7Z=Z@WXt|wPG>Q!KH{mTai97OXZGl04`U=YduIvaKop8^2|4>7l7R~=;d zgF%E1zm|jXxPn0zmn3X+MubGILCDiCOAod}hVa0>a$ux_$DC1O!&A+#tg6v42vdncLFH^%uMgYp zcG!Bl-wfB|`5+%iFuzU{6x8?Ez{wviZ*IuwA`wTruG!sRZ14R3m{%K4>Vr9Mf>8J( zF>bp}x z)yXp}TH952Xy1&^?p2EHX|)O)3mC~B{|5|=HKi%2UhP~%Ze+@H_k8i>wNcsJl_v%S zgV7y?5M<|=Lv!bI$zk~~^};n_)!`atrv=6^^|Ti25rJ zrg~7*crRZ4;(6+h{nQ<}Jn}o0G?pPTB+-6e9<2WS?*2UZU*0F-{p3%KZ zEeHq5KWB1MM`wy~vrH;!z;d--Y^OK47}AMx7m=4nkB=Ipp&d_04BY*D!$2HRjkxcR z)x#P1%>#D2D$+(GuUhL zs2Td$j;%*)V?PVi9>+xs1&{hv^9XqagZP3!05DD)B~RG&z>b$JNW4*F%n*YD*NB0KW6hiY0f0McR6lz|Fwl&CKMt@fj2f~uHN*dW4+=~i7}S(M z(<>Dy3{+Zp*nRZd_h0}LSRW@0RKdH9$|j!T+$qR67xUWKuYvG>7b7Rc^mV~G(7oR< zVBW1L%e7V5=qYzR#{+}Kl>;|~3Tm)hbCmW4gF6xeiSa#8?x5HJ3|N0`_~fAnYWDCw zlLZf7P#B0W&`aq$$)D|Nx#baDVKKw1cp&!@#|;F90Y1V3yHkBU{(1=nV*g%*2m`#p z#!Lc)m_(jT`;B8OiQW{9Ot=}L!=itC`%pAdb4I+(oMUZN;14_ob^7h!!@uDned{{E z-k&}%3>2a1+uT=zXx87hxWEi@6_MVppT#D@z!wR?KurIhnt}U)aNyBc2LLo)8^BA_ zr0X(1a={~popDEBkEw?-D|6?82L>unSge(4qlN)I;IFi@(gMH;gJ$&ab}yWa^GczG zVvjEXK*AFSQc{=zp{+A&Yt5nuPK)J!HtQ-yuf}V?TnupscOIw%jGYl0!|U{gkrhZp z56l;*-Ja~<7~2TJcToofVUo#94UOQ0Zbf65E+H7ylgJS(u6|$dJ`^VFL&KioVJcJ* zU+^$-x^x`-kAu8Az9B$u7#NAy({&B2jD4jm0Khe6_*X4i0FYDw00aY#1oGJ20XEot z%@U%85d%>LXd#jN7$-)volu8TRRqrTE~EMf5+0Z5WMSaWR8JV-FuVGQffh#~H1PC0 z2Ixjq`z{3=9ts<=ep3r28Vd#y5|NR29(e!q2!Hax4hFbRvoqV_)O>;A z9|1t-%~$IcmT+tA59HH`f2U0^7~`w;?Rcd6Omx9L0BEbZyzojYcrg`JtOi-Hg<0vD zIR*THUbfrg_3}QPf14(gA4otFl8Gw#GWtlQ>C$v&Vc@BU!vL-2QVF1YR zFB!kD3Zmn3B}X?<2C8*YBjW^qmnsDbVZqC4l_1)f}D!bd9 zBUB0lP+WxXMgq}1e#1a`Ah98E5>3eufX#@3;C2=ahzsPP$`=F!lwoEM8|T9Sk5EXs zV*?2^ijefU69NfQrhoDUhX)46S>sSa-Bf==gDpQW3#Um7Z??lxZQ&y8H+PIxH#k!d zkStbi%}m0S=3nUcN#X)tz(OI@!N8%@RR?)hnutwhd=P?(@Qo-zVsqwW{aV6&zT54u zTPq4pGMslD;U}BTA0cT8KQn1~Egm&G?qG3QH0tONqSa0$T1H8{Evq-5qub0|m7AXfO zccFN!Y7>tKEkNqNFi>8=YNIST!U@51swiwN?mj!}ClpIY0>{QD81W-lQaArTnB0QaZR^C?Cm7NCqb?mpeJA%jF&X46D=a z*Nd7T*os3nSdhQ==*eZE*lgW8bA0-Qfl>wfv)q~f1jfNMHNO-RsPv%lziP>d`O`=O zv3pD$B~XtK0Nk_3&~j3VYEo;q*k^N_d+hDWn7A%GobU_)S3ZV0rp56< zr3V`iRB9+NPMlbnfq}k1N)-lmqv~kG-0*i03=}7{lTR>s=z+5P_sWxiq47XlYt~@k zm@p{Cd&6c%y{V$uHp6;zJiIqI+O4<61BR{@B^z0+<`Hn5GbWCM0Sr>>#gP2A&+1VK zfrq6*XgT?I@0~*ysG2MoPN(a(KTj9OZoU6}|9G7av( zu=wV)JxPLuHoyx2r9w|4s*wb0_=hM)U_9{vNZbq0T5bUbYTz6DqabXl;}k_?wdrxA z#BMRfmnD1CDNXGAv(Y3*fC>yu^&7|mz?33bsv{x`VZfP?;9|iY4C@Vb#7C@BC&2EK z2AMd>?ej7QWM-Bqg4^rjvRa*feEeV?EIM6pRo#Q7dNcxKGV{-;(kFFEc`PXAOtrB~ z<4*~~ba*hp*Hlu7zM=z1{x^{|>cCVD6$3;Gq#6FTHxV9Cx^uJUj(32HB+V>D%JO8s zGVfV;Z`!7R*Sh{Ki`KoWWzso%GL>noo%JkrdCwS#%Ke4`*O^iO7Y1~GVPKGj-p2J5 z1_Fi*{4Wv+0~9dsNEn^M7$oM+vHqjQ9eDbMfeH#59+LQqgS#wO2ZGKL0}KEIA=24q z7%mdJ0)(WFo1ru0n=qS`ZaFFAL6uSS^SR02&T7F|_m-$oPyh+5L>4QOZzE#xMVsUa zm;L)}{We`5HmmLB@-bcXFT~qwdq`2%Pt!@0LGP~BS)sGZxfMKayhLV!OopzGE;uy~+hpsN(zM!F+1Amnf0KbihfJZvD3Nul&W ziGd7f4B&idAq$b1*!M*gun!Ce zv^BsRXoG<;z$S^onkR~P2s0pC?+k(Lb{Cb;BL;Gjgu!{l02ow^P)08?Q10N%*3Bt= zk-&ou!UIMAS!9` zfUDExmsAs3aEC!Tf>8a4hwwlnfsFc$BmLGG0E*JR6Mo)0=?Fjqt{?O}G662EjnQ*aHJ#@W4RO zqSHhmd$ME?16eVOlp+i9Kyw7~3zZ-E3j-qnoc|j8&#oaD7;A?T5;kR+*l^sV@>Fqj zpDUcI@-hUrYJ}(W%=ve#fzdgA+&Jzg}|GIy^KoQP6;}J__u#<&d?+ug8 z1EsWas1*m(*B4*at#Bj;yjt*jl*QN1rL2F!omsD+0Gh`5LXDw1;?_2?#5S*0R#~c8y*;M z#5+~i>9~z?VXcsezLWp}fNNo33=AU`9(v$0_D4zZV1s8WC{#2Iuz1xKH(yZ8&F=e@ z%A*?l8BL+ne!IOe$82W4cfYZMmG+b8o@d{Hq=o{CSef-1v>x*m28?}g@XkOY5^)L% z*Z@UjE#a%!NB2NQ?(}%LsXbv|QzUW)-B#~yL?wD=ceu`0CxFS^LP81`!`$h{c94_t zr-gxBOkuz(V|k%DF_3)V7X}dB9Ro43!BvJXFc1Sx{0Az<3?&tiaCrEZ#9$udG)F`g zv{Yv1WOwnZX$2_)mgC%5uPwmDT04u;K>&}Q$gd0rU}1zV8lQrKXYp}3U-kJ$q#f0SuV$}05Cu&Q1W<~ zp_#S6FDP>+=0*U81jp-$!&o0Y0s!Z$f`|)PGvPRkcz&I79ejOm)|eF~!Jb){|f^#E-z4y zpzu&n%kE|IN6M%PMUTON$)l<&S4V1Ho@Vbs(#5KxR$8poBx@F`P`UCgwYR_*31pb# zOBWpVR7yZ^Hw?Jh!gi7aqH;U&tm7*OOrBEbCk!-6@E>^KI|iERACKQKfC}FJ(1evM z-m^tvV3S0_e6!im?HJq2!R^vD8@t(0W+Uwr!B!0bIEcVt1VgyOpiNaFR4|4mW$Vor z4AvbIATn!LkeLp7jp|!31ra72vk%YVu)m(KLdC7f&c$rjo89T>>q`KWUV_82c-g&S zVD-QN6|qhY?Y1I`FxqwWlZg2x<^(*#d!)%@xa`tn%(O$ z!^#nTQX7^_d+=am%15bJ&6UR>&5D*m)z<^S#w0Xa@YgB*E7A1?An}1&x z44Av`$;Gab18jJSnbxaytiMXl*fOM{mMqC4EpsJsf=mEpb*MQqj1lt@jovuaN?Qw& zk0+gZOu`Tsbz3X-3;{4$rm!T)xwi&@FAU%l5dj{M(yyRETA(6=27rcvhuz168v9KD z)QtC*Hu)liki$q3+ub`Cz!8KKj-SWV2R5)=E0SQ$5}*P`r0r?NTwX8$sA(`e&Gb~76uY0{(*sW0{}4G@$el6&tQm8sXXCddf-u8UcMka5TzG`Pi{5K?_ZaeLvOE750BWSO{@cAp3O<_mH)de#qisL!@Uyw>jz3OTmK6rT z=8l02N8nFGLV9x4FkC=jaHp?`nSwL`Gz^r~A%;~D*;1@9;HA+Q{Qt$k=^iFHxF0|B zK&>#!+;KLi`q=Ep330w4`}Ww$t?_`25CGJe5)>?!hsAto)NQbH1T~hk`j{`bbqo^F zg#Rmg&{r(i6rkgcl*;bF9ncT6xc)%sm4nIB-FFz6*oT(&ad-ld*=v}>XZw7j-&x0J zXDzb90=T^`)82o-yujPbodh18nIVRwh!$JYmB`$+%m6Foz8=Yer?{X7buci(pzM1$ z{fGgjBRTWL4>iBQp(w-5WC$IXp4L$OA1iaCZlMK`vWT z^dgiN+X_{TccB^d@?~tHLZ(YyS#O*wAfybnH7B2h%*tW}Bc0xZie)L7S3xoR1e2DG1u#> z%kx1)CK$-DLP~k+vRv)JeT)lBD`Rty1qed?Jn}$u{eO_a!xxknXuco=KNv8t6q_2? zSH&_ld34ib0zkE1`@FOxa1l_snv>>*qU)Hv9Y}IvmdbIMCkP{mUik;6GPm+X}=ok@NAYTU2jf2Oa{v-&| z5Ws{;&{y1tx&l?!fx-T|KVD_&lSo7q$-2y{KQpX6b=j40aOGPuPL07};7Jyi4EO^B z{b=;kfei@)KnIWjEyV!KBOU+)i@;u9Rxctxp;OY)haiNMeJBJ;T@o(JFtX66f&@FJ z)@GyygCMpnzA9g!8^Z&d{*WM&B-!q-95GE;LPAF^GxIxK>_{MWoB}h`%5emb1|fg6 zCl^qaMU56m(#jkSgPW`?S?+?R7Zo%6UXarh~2l_1P7u4j3jrPGn1flWB5G_;G zq+s#DoeCbKKC}?Kr;!0Uh+>rXIoqFyt$BaKDUu+mgAAPbP%fswZA~fKj`H*)Q%<77 zz@WJU$T`XyNx13T!Ywuk4DNd1fq^tf!y6(%2}Lf?88-lprk*;K+*+I zRPYxDK*D8wZ{-Wd8N(>U_sS7P9wa}IdpQXKQcISU1vXIVbzIxIg({efyLT`Et9-$7 zE-nx;q6h~mB0_P<9}GBs2pKr{>Flg_$ctj&uT*-3tKm1qp0|Ry(rUQIQl64v2K=QuYyqR)JlPKPP><*vik!|cISg-?F(g=+W z{FFw@mb8PStWpKJ+Kl>8qONnN#RFsPuo4(bk{I~pc5@%x0e*{>bwZi779IRY5=gz- zpS0kTv_p76IPf5W?|Pu(f+4Y3E~ztH#2ruqEF$3QGn2S;B-frNw&1C0kNM^yDQ=EaVQ ztO-BeIHBXVm;_O;<{N7RN$y%CNR#_@!a-a>3W5O>fB{1<*}Z~6Pkpk>E(AN|&vNnF zd^Zw+{3hmEjcc&*1dZ1em1HRi#Ba(AQ6L9V;XG`=;4&=ej!;y}aLbI$dUw9rQp(@L&UJzQ$1Wh8o_4KGwQYA0SxL_^YUYGg@NPo-R_!r z08P;hnOP`3S-eqiP9?*EtE!Ne_4$IoFfbJW>{JlxHn%1+h5@~zuX3;)0DvB_&)7F# zFsgzl805@fV7Ox--alg>^^LOzj&(~F(VbF_uMb72rtmfgz96~c_2IZX?o@-TIGxM) z+Bo86MG1*vTd1gnqvF2g3~Pl55=b%0(hQ>j!PpN8AdKd?0U&3pv96D#f-(6bUS_>s z_xt@DA~nV*i=C{j?xHUIQ>3Tvak|{C=%&;A^>W4ruS+rS#8>+_Pcg|#8Dzx;`&5xd zlb0_j{Z;^ooNKKcu;M#kPzN97D0Ais3F#ayqN2F~<2pn8++q!ofFFBQp3k2j@4w#O ze#Zp_0HYtdyMsm@2azsZhxVfhgM>s$p|4eSh($MNgCYgm!?BS-hE8^A1B5kTm`cV% zOswLRJBUXJ8$>E3U@X&fl&y_Ocv6P+Krz6b2bvyGJWxE4LdslBFu)^c0A?0`2(J== z>;2C5A)6frpz2+c8e@xyIrp`Mv7(WTYd7VJmryG(><9+i&As6L7}`ti4dLy)QztlZ zYdk)`&?1H40quk{=N*MW9oZ2jq~UEAq$zIPoRst^EjV7@ZTNP!Dq#YIule$EUOpJ8 zg#fxsnvTgbew#I0W*|IYe!p3~-G~tWkl_dh>_@9+s>{>55p{vnf?U zY(ziHl?4DTXQV5NH;6_jmFN&BL-v5We3(wkw*2*{t4rZW(wn@I){FH=3|w2F_aFfW zkig>oHl}aQa>AUcj2~YR7*vGVU=VK-HHZWXU15d{d4lkE`}O|*%Vu=QU#dzJS zzAzA3n25V3!Q&3TVZi;b_J>;lU>Q*b1?jhjfdoEsZ94vxs*>)QQ6IaH;;=mhfCn3l zB#`&ROtmpjn9M*5O8?Y^mk|TapTam%GS(CyMg!F*WAZ*X| zYZ=#eJFUg$D>>lN2jmTH$QKww0^xx&YsHE5q|fHHw^erI1$wf3f|w;8-GX=wneE0gCc=v46OE{*6$cFT>=l2+#|nx zizC=x1ZX7~U;tO7MO7JeWlat`V0d8QOB|j?*HBL33kL1!*L*=`24J9C@j(1tX4$H2 z0|}5WG+ikxJb(eVwff*JStOcsDNLr;2oC^2^d3V61|48H-~}jw%^I0_brkIk)a?F9 z??VM8i3d0rw_kLJ4RV`SNyjUNEA4Ax{>>BbaT8Un&z-mrLpYKkV*4@H}zuPp}P3q%L3Pck(O zZ~4(f_*1=31F;Q)$ORZ32e0vwzAoO~^oZo)QRjV-|Xfa9pJZYS;af3ljnYcKXjo-h+ zfZ-k(Xv1I1*BMax;(?-(jOhBdz@TAZ_sRM&014(b+Tu-AP#9$7B$N>wrr52n;c9V)e>{g`)SxTl0y~`fU9HN4L z-LvoX1>bF!wcTig3Jd^%tb#1iZrJVp;t8$`k1uIKtY}b7$xEZ4A_!n;AIzEHVJ=+2 zU>0`_+~WSNKU{aa_v`uHR^c!9zMfDbJA)1ktO6J@fSfb2iwABQ`xP5HXwB0BB&vBs zV*ns&ZaqM{=l?6xyn2KIubL^i_<^d=->35j^F^udq6aEb;8O$%1~?S}OlR+FAx~GH zE(07DM8_rrpbBTFM#7v?W$H%j7Y~feu(^-5eMdJ31Jiu(ft907|r4CH{I&5uPMhrw+Ahb*GfO>F-%UA&MlfIt$uCmG}n-o%4c zzA=ssHWCR-z=%g%q_P@B#1uq)>WeleA!j5e_hBpZjgN;YvXg_aYo`AKK%Gq2Q6sCY zasQB8-tNy-B44ckKi;!p_{+-@L~FKAjxK2;+AI#8JE*`d1HX8{s5fAn(QP#J@C8Nb zA%{=_y+m7%lLc%Vby3Y2yzTZM0z=s$!K`0_No8qmO5mk9BY(Z>O9fWt2zFdp$z41U zU+-REpt3+SC3Y}S3;ovRCLS=*1JMuTD9ZpkNEp&ZBL>Dek*#CyhxH$(e<0y+474?; z!9Z3@;sKX8^1w3&YU}%*c>oi*U3VJnb3UB8hK>Cjmwl}naVI7Y)=Bvq!S0R#@B`Lc zTNK%pW*E9uma}Ym4XP0a7QJ&UKPM>p4@;2pGnZZF91~zZVL(TXtp-Joeb40e#g&`Y zwcT;%9R04Vg5<;P!*1cbcQDY~7&z7bMcN!eFi`P++d>2$P(%SE`mMDJ?tpSHFhs=K_4pNPOEMIUDCswFf7`O|AKQMqI{>A`zP_<;a;ED~OFd#Mz z59~72u{>BcSXs)g#O%t_0r5+a5RqekxwC1f5=7URVGh{A0D}&jVTviF6;|Lu7P4%d zg=VlzEAa&!N56uG6drRQ8`&p*VS)nKI!I_vp~0YGKrf^elPg-1$?wyNkm|h30ubv! z75ct^y#GM^FR!>~8vw+EvtWchi+g0FI(cGZ6k)Ui0KjC}W~Eq$lC5IhvO(=V&I>l% z_mmQdBXEE&tU-Qz%dD|K?IYgoZ;kvPL86QHgjPk|-0OfEi|W7eKpA%?BH&Q;EfNre zJ6X41{SaM5IV6m79!}UdrMZa^%L~B3Q-bJ01rG*j{P4iQJvxXUxW|U)Y_-wygqd^c zd1e?86r{xw$WmS?{g>>>Y^0NLG?isyM;_U_06*Vj&QyGt5q6cE%ZeVd&?)q8Q z0TO61C^pE`9gna|1VJKl5HQeCG-9BTQy55}Xx>rbGd6f(CVQgOoRom2J$691JmGYD zyS!OWdzri<9~~7KROQEzlGXa@#5me6YMK2j$jceCXSQbl%x0r@er z9x#v|OI#fNGkT3g$_cauM6AyjWS5~*hT(z2z~6e{!3GY#Fpwl+X~LR6s@M<)4!J@F z7~e1u7zo!is57j*Dl|*=*HXDa&jjk|6x$2v{BC2n|IE7G>{l;YH1ki6$nnNzR;rN! zTL9#f3)O}lBzQ>_AUs@3p`wB+NXu=GC2Md2{mx zF>Z!7D~ALc27v$l!w=W~@R3aCWfA(xu}5Kk;+L@wr_Y)rQ9w4DSTX(I81Vk%={<~U z`Yc&EZwux%7$^<|m_Q=4Dx!n@uEF7p3K|BUVuXkFA8c^PKuZ+=i2;NUsBu-+7ucGz z@`Q~F+P&{r*e4+hU!F5j1)E)T*RrDqvp7z8 zWyia~;KQU+CgP)S_iYqILISsJGO&+4n-6S6-dF*rNjYAxpK?ChLBgk25F6BnKch!7 zq_{#y>VgtcLk!ZA;Tw`&$9kE4A9TT1Genjs+7Am zPk{%XG0Hb03#vsVRE)D* zEfdiU!$BRmA~f^4!%=v}lfJcj2{*!;3!_%?KLX2sR-T3jfEfvRbW<<{6&|5t9Q8Hi z+c5wv+fw&7BG6;1j^&_%B%=uqWrtjYKCx`sxX_s-`sE~dbUj}2!!=$w4e}ho0)QV7(gbdCL9|WBX*Cuat$#)Fd#{2-ms>>^KmyG)AI$n(=-R}TBnghS-_Ws z;X%T%VW6xWTYojC|K7p_$bT##$>fpaID!&Iwmr}lK75m|Gc5i?d}7mAUBt-Apr$QMmlm>Ep>>wu$gC@1dm`prjGOG z+c{k8T- z-2rC|lt1l~Fwf5YM!#gaL?>foqU!zax0(>s!Kwl#6C+|sVQ_Y~Ilx2l0Pn!3+(eGs zR1$tFXaSh4k#t{mBjBX2s9O86@bt<2!f21jde&&Wx|# z-ydfRJk>wO1$P7R_^-;$$Xd-{Ps-@w1@0%uS4Up}1AN?=AfgFXI}pY}d-;Mp2AV2p zFer033^Xw0n6{a245;Jn_xAil*|Sg}ezTEne|??O_-CbJh-+RI#fr}Gf!RXY$)mUP6gC%|_qR{Gr(Vt^Bg(-V^Z-`QqWq`NrUzyT-zM4PH?i2`8Dhzbq0|V`y zjS3#`PY(n$WY&=aj5|oF;YqHb(nMq0u<#I}_=JaZHTDcHX8x#9vTqxz*DY;f}v z-iITORd)0)#KQ)pN9vQ4u@4*LBFJn#tlL-1?)~k}UKv!G-`ewcO-jRn+ex4|CZE4B zV6sVgsHm7Qkf%b7U?AI{FP}<{^)kS_-APbiro>voh7Nhy)Pa|xXZAN+06pKXz-Uu?kZoOJQrP1 z9T-T1bDApf`Qn&fX>@ln9=E$sgK@wAl$y)vrZ=o%*S)Xq#HxhAKrb^lHfR`NaVB12 z>9ULC=%~Vmlirh2uW_bffWW{&)+CVaXrvC@1Vn%QSSjb&UDS1)&+^+6zvqEMxTqAm zDNv2>4GcDM)3dcHhGK@G0#{H4HI|VEF@R>t8*yJU#=$^x&TmzPA~~ENH*7y{m4kyI z@r`CCgn&Qsps$($n7=4C3=I6a^mAa)Fr0aoV8AcpS?3#77EHoGYvbGMPV3mE<|Dqr z3?p{{1C=*EMG4#s%<4E}|G9++zF{B%LaQltYhOIz8vc@n4>1ty-@#xrE-=t?%e6R> zHkK#B$pZ7)`Z63oOA>4Z3kpJw(;*S`!Dz;f3r3VZAp~k+0$Uqzz+iwo0}_qr<3ws% z3O(R_-eA!42|6&xfrq~GaSN0d3v+HCrjKohyOslyKsK{1Wpw$pEJaKW6>rMVhHKC` z->t-Yazu9|Po^MhqJg&Q=@bjTBn|AqT{`g8LW9BpihI*_O%ulS^~0uS8!bgQ2Q6OU zIP7I@n+3TGLaTBD?B2Pyc%m5k3j;v1UYj%o9)s%(18f~(@azQwn_!?E1aCSdDMS)j zpXjGdf&ut63>|#4enUd@1z&n#tRu2N=k+@V$`?oxR2fOApjMuGEDaC_NYcAnNWkt- zwH-8J>#4kPTxZ8G;Li(z#5Avy$&1u&3JQ)^j|nJo4#O?Wz6}HH>M2N|g`wZl)$H4h z8$y^Stl$?MOlOE84mVqP%}iTv)*MPHx`|Q81?z{^kaU4uO|nL})7kv;EwefH0k#$1 z)sK_Di56XR(R*e9#d;Qyde83g!$}e={Fa%%U2=T}wLR$8##(9*G(DLjg#CvsS$^sG z(0=q*ZE9B5OCXrqmiz!Dv%OhBZCRo`)gq9qI1wbunnmp0CQ)SL0pzA(w%EE{NxjpX z+xr_TavX`>)|6#!TBeZjK(#vnzMuJqfkcSkc|eZzD>g(0!9a>hf`M543j+lPC#TNi z1jS||rfQ-md;*hBZgy8qj%@G-)Ix5z8IX5Y?JxR%YJ*f+A1DlUH|}knr9E>8rHnQtP~UDm)ocy(Z($U+bueudo~5_I)xP`flhCAFG~nvqJ60 zYuB$%oa}t1_Rl70)~Xn!?k)_L8KP6lB-}E?P1Y1|a{f?lCPJZ6ejj{nRfilr822`Kw>%b$RYe#*+>V5R*2p>p<%$xQ20u21v*x z1rK-!Kx9B+U|s8WpLrlDf;$f+HiUs1m8F!rB#Rz7qHzN8j)8`U$ilLIJsK&-zAw>S zjO-=9nHlHB0Uu_=Rm+NZAN%X?6vQf$Ck*ntjk;PI_83$r=rgFp0}DwUL1MZndd~q* z5jB{6PUC^rE#8oW5)$i$fy0$7JJs((=gI49XGgF8&C}!YQjYH?S(NRb?DQ)$zn3>q z^$~tBQ{&Mfa!Ia-j%~BRv3{#FtWv{2Fc4rg9yl8Bp#rS|poNN-8~7Pqxg$t8R`94d zqP_1E2kjowAa}FhpQX5?6@!6*q)|jL@HFu2Bf0Usr-nmVw5Ac0#j-q5!h8%3GW;K{ zA>j)H$r1en1J67F2IU2~fI-isW$bHAKOP_i6dE3Yfm(wA44Un0@SgLCG?4JqZzk`! zLNnvpTjnUEz9o~g-$i|Srp3(&%h8oVCGT)TBY_&`?U;RWzIOsf4UKe#GYta}Qk86( zTrjgNdgOrYgRKUh_SnkQk@5X0(E&~vNCH#;Hl0q2Uf75ec6Lm);5XBMvVXBYd7qX- z)8+y~{#ug(n4ydw0Hi$u;Ba;Z2>^giEc56XFenYbExu4r5Ez6C+PxG8F8=znOe(Gj z57awH^7oN@iV%BserGs7H7}q=$-;2kw>9wjcjI8aBCw+CfyolwSmrbqf_o3_wmzCwVDnqC72_rziD|839=W^-{xYp#S%>ni?EbL>hHDZmDH~7>KqcNs@zmP-mSf{i>r><$TO4K@!9j0aqywcw=;@c@a~ zEUwNl?Fj=E+xk|P7unT+=*CD5#|e;Q^M z5F`xA0@Wm(x0}wrU~EBpzuEPBc~LW)oB}U^|49OK3K!v|^?f{o>E@PXgVG8l1BQl& z$bc$8Zd6bh_$UnAVbJi9@g4>U|5vMBZ9Nq^zN;=Eh9iM0ED8Y1)>6v!iQujnY{Wq0 zf%b;~fC0crFHu2!YomhvidiH!~m$|JPEKXs=i5u5jC@yGDz0@A_*CQ^S=0&QDkk5J(n&||!0 z){*7niv&DUbvrx&v%x@6fgf_dd3?kFUl<5ixN$r}LMZX7M1cV%iXjP}G0;3hZt8&n zp7AaSA8|opAnH24;LZaDfKdkAHQ^ltlt7CRnKhFFC{Bu?oI z*qrl$0d{W~Xt(L{$u)#1v+H-NF=7s2~HshJO)4QUs|XQ9YPBBf0Ku zM4(9y+(hviu#{f;f&xHE0{q;3LCAj?a{_k^Jd`2r*O-$*n<^-4${8~BmIk*; zh5^Z?7DvP{q-X>iRDy_K2nHeoM=>x`K{)~zmz%mr1kr@_p{$Xihiv7Y7DP@Bb5{=4 zENDLks8esi71p>83Al1^Yvz8Ug2x%}Y`|y?Ictf6R&!1j6b1x|O%R?E4SlUU1^@{n zt&q^>j1tNvW7BwGl!cWfwBU3Ug!eSjSFWG}ghU4!!sY7|Bt{Sh0BUto9&&j5{H?}d zzPZHiG@-$sb}+vt4I3CF%M@lv{jG^ek!kj(US)uTgz1!o3GoY&h((q2TCLz!ZbDZC z5|w#gl*JjoXV%&ytKL5|zBmOtJgkRzl^%zkJ!a(tDd)EgdF5ya6^5!0j`>lo;34`j zk3|SoA7~t9DkLF8d_e_<6$=1BaYBvvxQ2v;1V9`?;)0(r06b!F61DCThUErh=z;;k zdi1w=tE9)>VEMaT`Is(_t-mZj0;4))gn{oQdJwmzGf6&}>mh|KE30`g&yLeF2pz~O;7!Cdek z82H;4_?{gNjp8UASjLy`tnU2u8(b-e!EU4CxQzs$Qyo(CRzPYH&UrwR`b000T_Q1ZZW+AIuz zr~Mic%>@(y+<)plbV578|MWoP1Z=P$pond|;t=KTx_$K`k34zh?(Hr`bs6J+BV(oC zbkO<3z;B_VvL6{FM$upfi^4`$0_G%<03IR>lCq|XT3X=van}Qph$RUE2@NWc1`d%l z<6CX>;`+xPwvxshY@lGP>|tW?tl&Z}3&Eo}oI5NNCdm#glcv zbtV{)Pwod~^#fn|fhPsDi%rfee1mM-oa;x!% zhrpnGfdje3iX(Co2E>mV>WHmJ7Z3nEFwl<8Qo#TTQM2=$W*@5os`80NS7nfcZJiXN zGgc(DT-h}4?_u009%$qJ>9GO3C}Ph3{N&6OQlESg4A^NrKOO?Zk%cWlXc(xt;BO3w z3+@=;5&p!$zW~q(A@YC)k^gA@P(hxGfHnf&>-+EH_4jc69F9LcN*1AgQZODNo~8Fr z+2csW(b43k1_m<2oO`cMM%T5xL8SsRU09~a3}Dbuq3c2jI>Ac`A7XuvNL80c59nB< zZ{mEsEq@Viv9;O+Z*0tC5r#O^0FP4;Gafv~^bd2hzVm63i(0a~sbj|*B?S$CMh^)% zILIKS!2mHJUap^G*tn$NcC~5pTjpw$p9(+f1Op*qV=Sw=$e6plm>bEx{MF2-mphP$`0zE565uLj{J0yw=13 zRBX!^IMXmtvM>P10hb~5?bhCZ_zhF*S>CqCA66lyx**H(7(LN}H&+pw9#9MuY$Obs z$1iw~1wQBVs9zpLhTw(#{BL-}S)Aqg81J!jYNLw$~a>WIbgk5@%QqZaSY}GG0 zvs@T20ZeDUWnr2U26}9~-Chm{PT`H+0U%ps7cJ<+GCBe2Ad0bpq|G%LVwH6qEzam6 zfe`~?23aOzK;=v`F{1;3&G$M>r#Cx1VB!yRrb{Eq3bZMe2@(q7|HgoU@2)|m;oJ>+ zvyMtl5e(#KeFjAZQ6E*;sqAiAdTI<*%*n6 z2vp3n-~<_D`GljzWt$zU$%L|klZ1!w<`)QnQV3xNJ|feOjR(RHK|-aNgbWVaQ*)8; zvA!zP{3A8Lc&QRGg#iHAM_f;K0^VX{g@O%u`Kp8l#Rg^NcrkuI zu0Q0!)^%%*C<-&*Kw_GV=~2OAJuKH-U!G~uWIIP5_y-1BjtIB6xZp_-6bAa}z-sq_ z|A2w}Dqql~V8H-FAVFcR?rIp2Rg+Z7x{uROB^=pw#LqFvB35dM-Sd%}tVacDtG$WE z&SaCvoH@7*HQU}s8`!)K57Yoj)j@<}>8Q9-GYbnvr$ZcWF=sSG+(*)h)o-ix?L>@` zrEN-Ey2Tm>yyv(*E`??@Kb7G+#d_~*)KwRlS!i0Z>49F0&3?w4ZOzuDOg#W@oO&=Et++pw(7mV(pcmNwP zrAOA>shPAJ=k4?N*7htXGT?`~LWL`GWvS_%VBZ~;!tWa(Z3&MEDaZMZ$V8VZQPx)G z`}hbR;h4Zvpkbfti4ndILzbayTzeWrXVhEMvX)}X@X;GEpsx@@>#jf|!jhBC!j?eA zMkw2Tic#fo2Oe44s#jIwht>AVOYC@dyzNeJLzNk1)Hg$C$CyzrHdJsNUV?}Cj>MRp zh`>Qq_{J8E!KgKs^8GRuveTXYhy7HK}V!*rRhqbR;-&!8Aw7!LMXek%IV_f#5LH~>QGJbkA55>yJTdvillnK^E=(VzDxpxkbg7oLmvE1 z4$m0yW>iqMthGM91%`JF)NIi+25LS2e~E!-(>FXs(SZ%yl{+XT#77_jk?D;TBmfSd zy)vq-0er&%U_hPH{4zzt!@z*W{f4-FrgFGi!^n^5x1tEIp6ZukaK%{$DV|8Iks2fg zy2k9rol3T_HK#yoha8NTsV)mV?qh^*pdvyYc>_mmjF5ub+81&Y6YQMt@dqpk+P_&U zrOadKEu8sD$yBLHvInC8Xp(?Ch&*8EXag-2k&?wUt^snwAz_1e6{8fOA!gvS>3(7smsYNho$)dXc5ee9!JjLT4+j&ph88oN}yN52; z*U7rHMF+(L|8op<2@N8iH}@J6B+$p`UpjE)1bp6rk@uSNO18HfrnPvhMm9VIO)U{AA0F+{*bbNKpIeMO)jvz zcp<}_m9c0uw?1)?!R0m&h`#}ev> z$!hz)%+6`rl_K@Sj)sr@oMjRi{SIt!ZRY+11CUTSuXq7f`f}qdJsDqfy2plpVW9ND zod;k*7}foOfsq8hMFfS45(xm%ECnY~0@E(Z;p?vs30QP<{JFH33zM~kuz~^Qjy4am z@ISlYlCLKjsuU7P4Vh8Ox9NNsI7KKXW<2o-90ZSG`XfuN*LWi+f*gd9ZFQADMJ^{; zSZ0E$Iw!s$eImq$fxa_?(2Xz%8?3d(j8g~<3^wpU5ghjG%Zoh^JC!FU<-5T$I)q?Q zSDr9DZ@d@bCw^?hKPL+e&KD0v8#s_*R+@4+y_rcw2yi}|lQc^hSS}6JEn&b+RRx-5 zl2il|SSFDR=dzJ+=l9<$+ZB#!WWK;nHF?kg(7@niYYhYAu`v>kMFo{Erop~=pv@XT zX~H`O^d1)NlB9hqD>b@{_P1e!;)Hgl9zy~x+3Tfdm+R;6jrARpLWiGVAYnZB<34G! z!RI+@Qm-WqnCatChvgXAR5q1G@DLJ+Bq+Iv_LDaVDk2Ojf9O4760#Fx*duFW$pBe( z-{(YctoV9vSAD6ZP|`srpsjC51y-tJgPcJEn_7|p0GstD{@Q;!&qTA$)?Q!aoB8Ew zavgqCL2ZfYp$~em>Q90PCQgeBpcWbf1RH!u0MHKVJGE;3m+9$~xRtats9lmj z0`r`s)VkZOC_dGUT*D&Tz;>W#lke0WHi$O3W1v-`6xyHJAYYr7DG6do)M@w|Uq}@R zHw?%THBCqsW1qE;t*B}*;=>sGX0JK(ALn?$8vf3*f zkN7NiAhD1oXOhUn+r4$+!82(IO0JtCI%$te=n4#F^ z+zbIz>TU$m#@IX|OZo}`Y`@7tSR-@HYSydOva$q|VmWDomOJIb7`=GFWdnd4$^8O3 z_aRa6|5bK2R*fsc622MS&0seJ$Y99;GJp&q1IPepfHN=|m<%8T$N)0f_kC3}vJC8f z?{Vhn2w9eGb#--h&yT2Ndf(FI0pkvmG32BJW`#Tv`2Llo0Bu8u$*Ehf-KV&C6}&!XFr z<&{{TodI|#isX#^EQ-U!<%59+2rk8s^|y!tKH!+Q7h|0y8_ZU?+R-u|7RS000trBdW>+JS3EH0$H>(LkR9FA;JKJ zNN6xVo)h@C!NUe_;cK@E21CFW&H>V4jK{zLJHn_?!S)R`qR^Aa2 zxDgooH>JfB;=$!P(owHxEIJS&hq}b>fCN_}OtV9Y#(&wO;{N?fjCkDB-|?!5WtP32 zL}@nhobIpP1A~Et!2>Zp0GRF7H$FZi`50sZj}b#ff?^CFzMQ?Zk^^9d%+U#V ztg^LFrtmM{jW5NQlXuKi@25)7CbRTGXcjObgp*ewnNe~Q4jL0L((C^HzKqs7D z`HZCGVoY?!#HfWUYO_{mt}oA!V%LFz{VcSz-&PB`liWS%^tTIMnSjT?oNq||_LAim z?_c@aRJNI`$ULyryS7= zW0WSCb)9gG6)p(qHo9r3nX^>dh9t$RMIMMlyy6e{rwtf@fuH^>20#c5$PrQ}ZVthP z8)z(;;|W_M`h)>vK|72l2Bsc}(WmKaeSvX6!VM5&i4i)gb}wQeS>YQ1fNjzxAr%mJ zob1LlXN!L7e{LyOhO7Vs7sS4JI*mBoWC8R#$gM*TA_buZQw(*&0|^4FAvGwRQ5a`5 zHE)NJs0GnGKnMK~*z)Z3r%`|*gOu+WEObpec78<}{RT}=wc$jHKs45yPE9Z`ev@S2 zRzFTr7>YozCBA^`!3LS>e1UZ3hwv}=iady9lOY*QnK39}?~_nLG9Zx9hGtM0B(xC` zxC6XV7)%T#93&7lFR(^5cmNEf9e7}3Kyzc|#pnTmc1O)F`(S{&==P<85KZ{T_%Ui< zV1V)$V=|eL&Q6AiMC2#^Phk+#!v?nmg*Y1V3+`$Ndq5>Ro`evPh=w*GcTQ-yXK?@t zf%U1E) zJk!P<-*`*i-~#I4w6lxbn_KVXuXD!|TyGf~#E{gi2DU*A81&8l!UG8k`ByeL2tuR4 z#K3l70GSbf;9tVMumK677qdu|GhbQHasefLlYn)Ji{Z||;Q9HD+vos^pZGch5{C8H z7+@b5z!JPl2O{4bRUi)>It{HAAM=3Z`5zb%0EZS-P{2<_C?|jc3R4RPR03$uw203g zv;V+=vA_qaUgOb;?`DED$dG`G$i&K!Jake002KfULjX@Sg9?yI42*G281hF{#3PU( zOk-cZ9?K6vp04P^Lq(;;^Rtu7YbJZ9f0m)4bm)+hV^GGBWI0L(7(cQUA>x@T@!16m zXGKtc9p%TFBpzT8 zO$!gGaBLAa8K$ypEKm)$CK(Jks6!sOvx_jX;G5iVA%SHlfdBx|rZBjn<_ZsNo)v^D zfxDOU+h?eNyr8K8pUXOU02pi14~X3{G+sRV1%Lta)v+b9wYkjBzD4o{RiaV>>BtF~ zPgLXkgbdOsW(Qv}((n0}5x;~6jGG>r3)Vom*jyV5;SGrN4(Ui1#%y<-`+oCI+J)-2 zX64XvO4f9)VQBhpxSC&##F=Z}@ca(f7~}|@un?4zfU$@~bB2=gi@*jM0T|GoLkJd* z)CnUNurnor7?3C?5|9?Gth*HhJk@=_+p>t(69*snALu}_&F~MF*>oL)3-!s*Gq6e| zdZilgSaAl+Vd%x&Fn?(Q+@47Vri~n-G)lcF7%&~MyU->E{F%lAW{E~bWf%#cH8f!z ze?)-;2}lTr?{pUUYQR9DgFt!zgcx|cWC0?Vg3;(M>3}0+N{U5x3*KW&$^wqGcQzuS zf5Ue$aiC1Z+R+&|;-U(cm5>L@Kfu7h)B*Tht^gh|lhHo`g8hz@0T`?t&cDzCD-7JY zqVkT>g9!?bMqnHxUy{3#M!(OKZ*&qOrspDn!Lfo4AdzBiH6zKSk0tp9)eO%xh42152fm^kxboS6m|mO^ z7s3G90a1Jqrj!%dM^}IWSXx)TxQ7HXt5kTsBhOX{8!WSU4Q8nU?BnZL4uyw7kN=&jaVL)i0ogXye zq6a1hu*-r0slc@KzyqJHKlvfR7#M)np$j^UzyLi3V4yvr$PXC4VI4Pz#{H}eS8i^o z6yfPqIBa;hgis5@{9IFSl?w1O12?P^>+6{8G>&5|V8F!_$_b+ur3v>gHE{Rrq*0qN zh=Al$dRE;($8m6CmcBns@2j>D0%%c8LL>GU$N>J^0i|(sFv<7dHZ*7>rlpu80F0N1 zM>2ZlqK#lNYKapDC4^9cqP9q!Riw=e@43J8Q-s4}_s9VqyD zW=t3iu*SpKFBpz7pfDgnR}&TkSRWopIH(>NvEUmFg#6>t!GJNEN)fW~V)OLDYO&{* z2UQ&k!b&@p=VoHSOfw|{H69IAAQCW5Jo*9M2z!JafB~_Fm$Z@M&FT<=!;pc!=38(^ z6vE!bfq;Ier_=KS3^2M@)~Pudo9e}CKaTSj4ssoA-Al2h&HxYK^7VReK8uz-y!2n+ z8%P8U^c!*o9CK^7f>^!Tk|tn!1{-*tSp4BZVrN<7ipB^7iwVI)bfZX65=<(P5Wv6& zVX%AQOjH3#;Da(L1}?qf`x9cQFOiFd3eHw+@CgI_t1zG)VIbo0TMSTVBO65)Vwdlg zKt!M<&oHwWtKfV-r#EZ#*c6P!}k0$THd`bfBm^aq$yo>Y8|KiFi zB%;D`BMt)5qXmEiMOeBd*bqe-Oqi}BUJ?moYSISlJU&tLdFd!4XrCyMOpq!u&Q5@^ z!Ym935Q`G9b`&tQTrfDn&INj`2s+#!cK9+XqD$&jkAQ@DL3R)ZSa{&{XHvq(g#`eF zg98RqB_Lj(B`?503l9uUc$^m;cmVz1KoEI=hYEw3vYfz-!p;8uYWqPfpg6!%r6>Vo zfl*+C^C}SWiWuN!ULF$No4FZ2boT13K1j@^gM1K1|bj{8Z~^E z1q5S3AYlQ49hO=4X)Ie2vfID$aUnW6N~J-hp!*=ollm3U7@A@LHdu_l>?9VH2RhR* zy#}ohWa5uhOkY*Rz|;eS3L**ClMNS0BqGGD_8H;bn2$C6wqW4#{WmohiUU6KL-z+Z zG{j6g&9VD!T^RAN>9Y_VN67d2w-sZI-l~EX1J2Re_p$*GMo$ta|6gq_t0pes^_YHf zZ5TlDpOh0GV9Eg2$J4=yDWu6h{2&$dEs{ogKGC21ETWiL>UCrTOrU`><&bST0lSNk zPC3a?B58pg`GFY3cP1^p!}RC@@WYw-G62KwczRSHYn8m^$`CsP+HrqV3Hq05vVmZz zHc%K4TmTHr05%8&k90H`GG6~-4NNp4GZBva4pw;h{cDARxdw$bBJy{W_vQudFk0n? z9pqqF=BG9zLW$j!KP7$g0`BDI`Oo>S15_dd#6Y5nB%s#^Fm59TFntnUV+4S)=97G% ze-#7P18L-XaKZ*lUD7#7;86KL5+m?mBEI%jGWbjS^wc{nva6+#rE{qJUMw0>EKKV1Pn|MM8%f-fmeu z|Bkte#&KBv&EQVFFoKvGKnpxu!3qO?h^B-XRAp$3=@$%`Tr?O79!p6e0Sxf={nMY{ z=QrkvmW5S-E7KpSfaB_cu0m5bNS$zvfhh)3A6R(cZzK>NPzKCKWJgAtA_W5#1DJJX z`T+orcraxmWq-5*Tira&05H7l*&SAp=Tk5wG_Zrc00XCKyIW)@zQ#Q#-!A}+>~Oo= z$h?|3EIN)D?s5NWgPapz#(YnFdBV35pGS&hjk16TTN{zd$P@rg@zin#ZXprVfCK;_ zNU|eiP%eh~=_$V30tvd)_$^@X`GtimUl5$Y6+B>W42tS7Iz%U^AyZEPY()jYP$Z0M zgA7m%unapGcz*pu(D^45lxEFvG5xZ$@PK1V54B=*!@&ba{}u_$0}BSUbz7o&)L@H3 zF>Wvr5-0|6d8QXJgzSW8CQcbpC4g(YTE!fCWHE5eO*1s0^RX;2C=xglkg(`tq`ndV zF{K7nqK*%`cuNfm0OHHfY`L+p0Xt9xTTX!0F{L#|O+X0H!M*>+h>$~`e*|)Xfyb49 z-0;`#vn9$*)00!|f`pnoNC-<509Jv*;p|Xb1`qf5TVOye;G3`n9knvP6&Bn*y;1eQ z@ib@w&fjwmao?2CvXU^+^a%$XF;WNvU-BUE;3AJN6czW+AB-?z)Kk*KZ}oskfFc$i z7#Khhnt~lLu+$074XqKSOe6rx;ckZu=LoKqB-&VyYpwm)6Cl7os0 z^Z+Nfjf+_B5C-J|g+Y1@MM4@!dS-lCMVI~^vqeii85Dtpz`1zI!rgFc?TF(G14urT zf;kdr7aqy@JcpMI0lte80agYNVneU5S>bB(`o}knj>gmF>x}VzjS|z;DDKY)&JNc1 z2;&4E9*Ny#aAdV6J4`*JUV27NiJJd2-GAWCIBUcApvAd@`mlXK_&Aw@gph|xv2sPp9QRN0nS7IbXe^*>m8|)O`cJqW zqsQF(K4gwf@jm1wJ6Kks=+jF#oWr_9)blYtFyQ0@fGzt&0Nh8w+r8@;53KLRJ(n)g z^szghm~kM(UL6zigxv)L%8lTzu;0_a1Kwaohttq9eZZ85g^_UJ=QmbqKo2l>6c{i$ z1w!C0k&y@Y4-AX~3PMVV#lYh;;eg>N+x;7BE-`p)#)9uv!Q=tUcWIw6KwStW&~}7@ z2)P3lOkD>jsO!Q5^;`=+jE2J3SaX2-188^I!wx=d5OJ##pf(t`*UFkZ7;xWamw^ur z$xEp%+%lYo(lKcrRG<{B^)DZ8DFqW3c+}=p`1*CcJ4WYKShCnU|C_Xr&jF6Cl8D-1NJz=aUR@;EaYGM z4yf>FN>T;DHyCIvz=@c`;HaLjJmC1H^Dp6`xgmzjPWp!A=fv~`f~g533BUk+LSge^ z|A!$2S#{)=5k8IscjOq`8wn?aNMmAUKvp8U$0-;SQZP_42nMVK+EQB}LXklb1sK^& zoreIyKC-_NpHxwCc#ns^4mKc@n%2kAn0ujmkN^fIy}$A*uz@9bFBni3&PpAA$K6Kn zF?ta7&J~~n(toI+7FV0q`q}E9>;wZmDT603zrFoofVb7}OU6}}2b5%^Nb5+;`=3sL z`hh85-u_^B*1cg48bBh@Z-GIyVm<{7P^0iGffh6*fq;iJ@kZw$oHMrnXZi(z!8aIa zEC2(9fB}FchD-X!9nQGcvy5D#N&ppHPGK;WK;>MK5O+4dEAM3h;yBEJ&Sw?k%?s(_ zv&)A2_~6SEXIpccNT5V4czAmPft+AjSTO)9#6V;NL_x#{7?u!|=5w5Y0u1nUtqj|z z{=;eD0VMRek=+FR1uG{U=;m5k$Jgr#>usKpo|jr2vr?Af#wIV|K6~@w3KV{0f&7na zKfP-LI{~?lT!GKhFd2%@e_`e=86W!pjflW6{dIbe#c7Sdi3o6lN34U9o1>$6P72dg zPk%o?y}Z2tA$g?6h5mecerGKgz7_i4ERxae6sgQg>|V?lW>o6i)APs0<&6t9AI6n^ z1B1qb1q1Am6nw(K*P%psv0h&dAO_~Y8Zj+4#dg5J=+D8^tE2{Rrx$xM@cW7uyGLH8 zwj6)2*Ao{ce+gj)13{G@0ZE|q)H41M81N~Iy;OS$3dDkNf~j9&5N}2Hs{t@{CIMlu zD7|1HVDMF}&j~H@QE7>HgCA@y6)5#PKq!7!e?%gx*%FZr+4v(dx*{!9Ky{ZRPy5%` z*LQd|qvohl=z0vK2@E6wDqt4DQb)y!phrgj(EIbxKmXp|ZQeh4e(qbBl6c;~U}9$Q zQG->Z!UM8_amUXEa=T}S6@dZXK6#)K;q!K4ps}EsJi-9qVPatL0I5MR&_M8I8(`FJ zO9df(#))0vi7Z5Ra`EV+GtDdp2C5}O8u52!fTF^;Cq2aFiv<34-3jZ)4lgNJ7(Oyh zo-4$53F47|R)cK>dJo3It-}l$Kmw`!M5A2^_-{1dSGNt{;89xnYCoGo#O%2kUCI*HNK7>NA z8M%=;Xs7@F^UvwYZ_G+#VKf$$;QC|`Ec8b_;wxDfdh{zXOdUM%aWAj(fCb}k3dIK` z3{6NlP!D{Afe{P7j3gOJVx}87@pnV|(jgPjq9f$_p-A(6gjGR+&r9s|Y%15|IX3i;sZ>~G+9l*f!w1~Z^vcLe-<9&_A_~2~S>XGZ) zXW0Ao^@EIn0iR3_z`l@e9ex2iRf7%xV2}xsXJdy{HD~4JGfK&6Nf}`vp z<2@1rt{i8Q=D(>M$ovZiEEMR}E^)@pET$gcz7Pv|ycf5E(_(!AgIR?^c53AwiJQ0c z2sUu^ATVeK!An8HPC^*(H%CBvu!LXl=3gCu2=bV_R4@hxTezb^0?*IyGzR&TtO3*o14LeKxDI%X0Z{Et z<|4$46fMNg@N7L)E;LHogPHZ|vf_B%wq4W|v!@z!8C1ASQ51wel_ziybAP)91IY`(VUQ3WV2nq5_9b~oBZmi^13Lh)X8uJRu*0vz zuLrS91)+B_!2Ug`CLHk0f?re%$pnJ|?G@6<79QwZ*c#>aml(RnMHNH_C={vc#QNFK zEp5(-`!Keg?*Jiy2g*JG0E)M$14lft#(;Vt(;i1Gm^|=_ z1p2RdIAB17O3@PoSckC$w-4{9R11Rvj!f7H7%a|KclKS?02Z182DO3FVXRHzkfFds z$4?=V;i=XQC=v<=I~u4)UQu?g(b>ZMxH(`jOauuKLJ*SiKSq2DK}3XR0eC%m7LP-v zVez%OL-GK|G!SOM`ZR7n|C$vhK-h%`4E8TLEOi@{fV1|P_9#mEwj}{aSsM!k09G(G zL>49%uqXjfK{Xu1=OjR zP$8DurXGkUOuCxfaEA%7Mf3pi=saKkKmuO_!2uHW>%spR)TVE0$_-00Qo~{1G|z2w zlIei~z`$rRG+^*w_8a;|0xhZH;Qt!B@xtTST^QIDihLXc(iD(f2LX^2;3W)TDS-N( zFfcE0+y%-I$EOPbgNE(#XyO87uJw%zkZt;Ist2&I=GNB0Mv;IfU?#bGVgKRNhdX9RWm-yF)gVWkmpeiUT3=LwS zFvt!nf|C`EUdKtSTc|z^fT59pa)K@|KTyO29^gR@Kq~{(`XGT(9OmGT|7_?lFq{G= z=aZU^9t5kkmV+qW$N+E9#mnm-W`yx*W2~vH$}C!Yy5Rwh9tJKFiUD)O9V2auffQ+> zVq{^b3hKgmH@AA>6Lp1|vd9MjN_vXw)fg=D@Qan!zyQ`41I|Vq1;arF!9c6TZmCm= zf#`u4=xUHa`;Myy8~2+Ae%?;kE)T!}BfeukF#uwnGOTr!aKa$9!4O3Q$3TKVu&Bt+ zV*O=DF>utP5+#9x0jMNQxG)7r_;ldJ5R?ayV8h>0{%E}L0NCIlrDGLfa)Gb`em(ph z<0=e-gu(eCe^bIRKXwNpFoX4c3q%~ZN<+3zP-aORGX2aMM+``43kD_(s1YrJfNl|D z!M&=6H$wh)@=gq>5-)Qzy@>XrqoGv=bSC(T+T;jxx*2kV3-C}~r%THr!N3?+^aTU6 zzu@l}0LBdm-?~2sWq@v{Ut`d?Z~{Rnnh@iWxUJzPrde6P7HH0NKFOvABXyxZvnJwzFVj zz_&YSGkSo;zha={KST`(BquLc6fc*AhlUg!KI#v0`ULa`yaZ1E$XNPkpaVfWW0d^13_Ezf{_#q zJs=g|1p|Wz;>8$_t6lR_ei!5IQ4|Y%pojU@xIY*$@nqDN8;0|SKb!QN-+G42MPs`*h2MrAzJ0{iZ0J};iQkjv&%6y!b52QLoopAEN7YwYu7%R_q?^-cQ+4SNxej^9*-@w2ep`5_B zz^J(mpd$Y+i_e4v6Z za{DW3W>Q5lK+pA}2lx(L|FjI~mI#8F3`=1B$ER0@^8P-% zrdyD^AzNzw=`7wK@0F5xr3aK@=_yG3!loevMg9XnGqJ$>a8k=l2^Rdw02UTNjuxMG zPY4*Cup)tRDp^2lnbf{ex8H}o|bXN0|SW#eh2%EM-{@t+uwEE zK*eA5z?6cTFA*WCpyYtYLoL+4az0o}I51yO2eO?QC;-@YCqAV_oHgWzgXn|^LdGw} z`V1+F^&MMiAjm*sdk;HKjH(eBaG*GY|F;9KnmGNvDAVX5y~t- zhel|6%zbooa%a>7#Xv&#&;wD1k%+2-$IP1u28_jEKq+VxkPnePV!*dFB^-gEG5{Bz z5kZPj7=RP$B5wgX+({5sRbXDg`m0@+EPs`E3~KlZN} zkO%6&0|rKR%xB1!-|~26Z&6}FLO=je47g?;;0Xf+LY|p_+l?p{C=`1s_rntRU6+Q@ zj1>cpBqTd%4?;*l7&!Qc!66n0C>3^Km}Me|aYiaQcFVlL`he8{ic73Mxo_&0MyHQ`7NI+jU#AwON!iofH5uv|#5ELWW8=Ns8;qc7VP z3sNY@e>L1D1;8mC|= zA%FoII}{Bp6tl8imI`4sFO9?yuZQX}J>+lOTO6KXV2~%>0e|SzM+agr01)9<0IaqP zVRC1p2cTS2!o-5?sN9BkD+b^J?gp9=Do{@32l8|Bt}wuafk>D#U@-q;_tj20fs>y= z3*P-hHGn=`cz~HZtrjx0H6dnV;7AV)g=4Ub-6es!-zd;+Fu;%ftOr5`2R0A`tT+S= z5QhjDMt?2+3t}KZ8YWISD2#S_}-%Um5)q9w-_-svEfi z1K1dmWkg`8Vf6qNDlh;Q*nJ!fh(o@uNzI}O)dr)`5lvV%C=C2*V^m=eev1J!M2#3G zU&H_mAm;V%`^*Gnd7=`2s31R|J5WA}n`3m|qWc#BDHE9#a8R#L;iyAR_*WQY6^rnI zOG%6=26i1jCJJOIQ6d5*0!hF!vgHCAE)O}-okVBc?d?NW6WuW!h~7X<|HLeS$CtBn zdiRh_@z(KGhr|UE0kii=aC$yiYUXO35f;G4T}M*j%y4o>yS(g=>8SGV>`r;Kl6J% zFsK_d@r&AGM@gU&0n^u5V9yXR?e0yR|7!GDU%R`1SAS1p=n;2P9t;=)2@A!x4j?HT zKm~LaWkdl{Ks|uD2Oh!<{+l)kAtMH<5)c~Fqx48nV1x#BU`p{M0szt=I03*8ze1M} zl}#ip%(gNp7zhJ9u6SxZ%6;Ru=r!J-@J6LzX}{Lbw%NhT;sXPb2c-og1>K0^&GZu_ zhY&}O!~M7Qol6Jq`3hH_T{Kkv!G?gs$OU)LYY&qNb) zJ{By6*6!j&$FXru{w)UBveaskkgabN4~2m{B#g#_nx4*rDgmq?CBU#@dy@e`{$(oh z5f~;UL;}g96VRd?JJ5)^8!qYQpzkY9e;#w&#S_yrZb5(dpsyAQb1N|TQH=!)4_GH0 zJb=BjRF@(-))xT90OpIE3xfk2m>>*b2FZc+;!G`U?0Mqu*x6KQjVB+wh zRlng%6WZ5oM^$sf#sYr$5QGrIXhym+UeUg|z>;PLz;z>;@_!>j2pnVzZ@`064?|?XKz#(PiF|2);<=D87Pvyo0Rv49w3@9Z#(%Bt z*kb)r@TqRhnF$J0KrU8Zb_@g~aDa_QknDJUuZFo#=|Q;Mv2f_=%{#eaFks4%+;GpT z@~gan+~hosPQ${Wm4U!u0RTInF|gbatv~Jl1p^U;T0e~d#5#3O8oGOif@GBx3cA&` zn;q2L(teN-oP4%^XaN#f0s;OWDj+vR@MClx-}mRx<}hM{c#WQ|rld84h`+DwyBK}h>D!Be!+x${ zcTxb5lef-uynf`7(>zzA7--t~83Wd-5(|XE(s4X7Fzg;4knwB__2pL&(|eb~05V&6 zAc8PFfFKOfu>}So->C;ozvX$*ErwYBMkkm%V153@{r~-mBi!(bHGO{0_?de5AiBO< zcuZC_G#q0frqTBY!>i(I@tSF|Y#G2%Ua=P+H^i4cR@+=*0BK-A<`+f2ceXAKdUgN8 zV-p#QoElLQ!*6*YeaD{}U~&K9`@mpeUNWjpC{j41~2q72{4?6o25gbCC zkpmP1Us)>#@=qPxh!(jH1wACG8K$2ADDMrB#QlXqyd!$am>A?Q7?|!KW{ACl3Je#! zuSj4TG}inE0}E`v?r^DM0KpFlP#L}p2|Vrx29&0Y9$3eMZ!jS3>+&o9pBUiB@{;(+ z(+2?R_-k_?_SHPqgwa3Ry+M$BTNo5A^aOzckbp;H?nwxA6dL#2AOT*b-piKbHrzi) zYI-aV33R16_KEKk0}=vMKej9o7cdY4SVoDW0Y9qbpD*L@>em*l?jN=M>IDGoa5okV z5ELQ?iUC-Cc&HJf2KvkcqmI-xFo9#`^?8>__?8fQ!DX8(`-xzHD8Qq8A%VNckL}Y( zcp&Ksxe4mj`oKyL7z+{wW>y$0A7h|wQ0ve5$eo$@2c>Tv`l zh=+_Z?kWWK3lKF}i;M-S=nRUvYxja-NI@4d4kTC#%tG-404V#u&ni_K5_d-e^ZUArXO_L-Wi=KrB-03xL{a<-d~<)P5`L zv)_NeO9wB_ho>k zWjJX5mFpsqB!Pto;v-^UO1>{4ASMnf)B}G1AVD@*b^?#S3MA}Lab+_!zjKa=1q`O8 zuLnaL6kNeo5~vc0<706rkdg^vXd08mZ7deYs!(}4Z6RSHsDlhyM)GC{^OHWuppmQ- z$^9*C!vnk&n;yuGe*=Rf42*i$AW7aba>L00i}qW)dCmQ4%LyK_xRe6XK+yu8&lso% z$lCA5S*76qW{dUz007pH-F%0ER;!8uN&!`ajv!iOKt_QsNbq;fM0iR;U@$ln`yOFn zxP0zv?pw29jINcjdjYJi2Q4%xX#I9-pYKj>z6u*)cQ6nb7zH$ap4`V4yJKQ@$^ZoS zVxVgWUEQD(x0ZrU`fz-;A7CJ+@Y5RlDM)H-n@p8&D2$_6^yQP!0N~Yufl$X16jnU2 z=mCDI1}d4$1L+HxE+0c%MxI7@f2I%FKZ3y;1Ksydu40XS>i~~uOmE&o0%Cx5q_@Gq z09AUi1wdi}HyOVsL0d9{6$Z=&1|bv}Q3ySf2-x3Fc_;T|;sKMzMZzc~YV^@0ImFnItZaIZA? zffj~J?D0sTH3n+&PlP#Ou)1|$VDJ?K{JJ9K%hqp;vC{Q`A<}=8qOqmIjeWrpgb;!| zLmV;~kGIgp!*6LI8&ZGT^wU>5Kz9XzVSV1R95j6V2L=*T{2@v478o4#K&(IV!3_1E zP8tjZ20em|U%fO4q!^f&6$9)S6&I|6NcrX?!mxgG~q8+I)QC28%XHUizj9WV2kY- zJ^Q3Em~Zu#75UUseRZ`xm>auKz#I;Gq||rJ0~G^-$B`z~Uif=5!J2+$+3D;Cf-JwKvk)&N4h56g3<92QCZ})Rf`uf)x2#^XV zFFRXR$9bcGxxl+paQ{IRxZZxyoqE6kSIhXuH3mZXqo1hc9}FZ5_?`!v4i6sqgn{0o z)s3p}VESd}7zW2i=l*}S&T?d0N1JNdvxm0D${I8lpF5v{vBJst8lE{Jv3j*{9AD;p z4E%)$#6V>v7>FPY28P}B#I%Fmld|>Sc>REfjIH(CJXquis;USHfgU1h0YS?$)Rzy5 z0{f2#a{(|w6mW?!x_P| zK?3SPQ$m!$2X!HyGmeSHKwvXIsNrC0LQYu545YtUPfskq2%ifukYib`OQ~BMH{o zL9l@!v_ECZ3v#RD6zdx`_7``{ogbdK9F&=l@A(l49PAQ=2oKtD+qIJ(K&9yyThIM| z%KV^lf))=F{FI!TtzZ~O!d>HFEuJ$yGQy3HFg0PMU`vHz$WYc)0wLi~=Kk*AgVBBU zsl2_$M%g2#WU8q!00WeT$p>k5f9u0fe{Og0zpoy6BqBYbm~6y?Wef=gA^?yvB&JRW z3@l}V8TS`SV3jzbA^jsA0@psHV!jv{caOU?@8`kX%e~D@^UP`79*igI?_b+^dto3F zmNu-mIQ?)~C+|1$-#VBii6j4>n`UY^ei z3_kNfF#wwl421t18kVhGC*zG+z)g^HNeNpJ9=Ei&acuRtZ`<13-m%&KhJi099AEY; z48Hx`*n0Wsxx=N7zvuDQ5^mc|lK=n! diff --git a/rostests/tests/stretchblt/stretchblt.cpp b/rostests/tests/stretchblt/stretchblt.cpp deleted file mode 100644 index 68b9b7a76bd..00000000000 --- a/rostests/tests/stretchblt/stretchblt.cpp +++ /dev/null @@ -1,380 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 1 - Listing 1.5 (StretchBlt Zooming Demo) -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - -// Modified by Aleksey Bragin (aleksey at studiocerebral.com) -// to support non-uniform scaling, and output via sretchdibits -// (type something in the command line to invoke this mode, -// in future it will be source BPP) - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -#include -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - -HWND HListBox = NULL; -HWND VListBox = NULL; -const int ID_LISTBOX = 101; -const int ID_LISTBOX2 = 102; -BOOL useDIBits=FALSE; // How to display the image - via StretchDIBits - -HINSTANCE HInst; -HINSTANCE HPrevInst; -TCHAR *cmdline; -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam); - - -int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, - LPTSTR lpCmdLine, int nCmdShow) -{ - HInst = HInstance; - HPrevInst = HPrevInstance; - cmdline = lpCmdLine; - - WNDCLASS wc; - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = HInstance; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = reinterpret_cast(COLOR_BTNFACE + 1); - wc.lpszClassName = WndClassName; - - if (RegisterClass(&wc)) - { - HWND HWnd = - CreateWindow(WndClassName, TEXT("StretchBlt NonUniform Zooming Demo"), - WS_OVERLAPPEDWINDOW | WS_CAPTION | - WS_VISIBLE | WS_CLIPSIBLINGS, - 0, 0, 675, 560, - NULL, NULL, HInst, NULL); - - if (HWnd) - { - HListBox = - CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", - LBS_NOTIFY | WS_CHILD | WS_VISIBLE, - 530, 5, 130, 150, HWnd, - reinterpret_cast(ID_LISTBOX), - HInst, NULL); - VListBox = - CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", - LBS_NOTIFY | WS_CHILD | WS_VISIBLE, - 530, 5+170, 130, 150, HWnd, - reinterpret_cast(ID_LISTBOX2), - HInst, NULL); - - if (HListBox && VListBox) - { -// horizontal zoom - SNDMSG(HListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 25%")); - SNDMSG(HListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 50%")); - SNDMSG(HListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 75%")); - SNDMSG(HListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 100%")); - SNDMSG(HListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 125%")); - SNDMSG(HListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 150%")); - SNDMSG(HListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 200%")); - SNDMSG(HListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 300%")); -// vertical zoom - SNDMSG(VListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 25%")); - SNDMSG(VListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 50%")); - SNDMSG(VListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 75%")); - SNDMSG(VListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 100%")); - SNDMSG(VListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 125%")); - SNDMSG(VListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 150%")); - SNDMSG(VListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 200%")); - SNDMSG(VListBox, LB_ADDSTRING, 0, - reinterpret_cast("Zoom 300%")); - - } - - ShowWindow(HWnd, nCmdShow); - UpdateWindow(HWnd); - - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} -//------------------------------------------------------------------ - - -// image related -BITMAP bmp; -BITMAPINFO bmInfo; -char *bbits = NULL; // bitmap bits -const char* filename = "LENA.BMP"; -HDC HMemDC = NULL; -HBITMAP HOldBmp = NULL; - -// zooming related -float zoom_factor_h = 0.5; -float zoom_factor_v = 0.5; -RECT RDest = {5, 5, 0, 0}; -enum {ID_ZOOM25, ID_ZOOM50, ID_ZOOM75, ID_ZOOM100, - ID_ZOOM125, ID_ZOOM150, ID_ZOOM200, ID_ZOOM300}; - -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam) -{ - switch (Msg) - { - case WM_CREATE: - { - // check commandline - if (strlen(cmdline) != 0) - { - - useDIBits = TRUE; - } - else - useDIBits = FALSE; - - // create a memory DC - HMemDC = CreateCompatibleDC(NULL); - if (HMemDC) - { - // load a bitmap from file - HBITMAP HBmp = - static_cast( - LoadImage(HInst, filename, IMAGE_BITMAP, - 0, 0, LR_LOADFROMFILE) - ); - if (HBmp) - { - // extract dimensions of the bitmap - GetObject(HBmp, sizeof(BITMAP), &bmp); - - // fill the BITMAPINFO stucture for further use by StretchDIBits - bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmInfo.bmiHeader.biWidth = bmp.bmWidth; - bmInfo.bmiHeader.biHeight = bmp.bmHeight; - bmInfo.bmiHeader.biPlanes = 1;//bmp.bmPlanes; - bmInfo.bmiHeader.biBitCount = bmp.bmBitsPixel; - bmInfo.bmiHeader.biCompression = BI_RGB; - bmInfo.bmiHeader.biSizeImage = 0; - bmInfo.bmiHeader.biXPelsPerMeter = 0; - bmInfo.bmiHeader.biClrImportant = 0; - bmInfo.bmiHeader.biClrUsed = 0; - - // associate the bitmap with the memory DC - HOldBmp = static_cast( - SelectObject(HMemDC, HBmp) - ); - - if (useDIBits) - { - bbits = new char[bmp.bmHeight*bmp.bmWidthBytes*(bmp.bmBitsPixel / 8)]; - //GetDIBits(HMemDC, HBmp, 0, bmp.bmHeight, bbits, &bmInfo, DIB_RGB_COLORS); - - // Here goes a temp hack, since GetDIBits doesn't exist in ReactOS yet - FILE *f = fopen(filename, "rb"); - BITMAPFILEHEADER bmpHeader; - - fread(&bmpHeader, sizeof(BITMAPFILEHEADER), 1, f); - fread(&bmInfo, sizeof(BITMAPINFO), 1, f); - fseek(f, bmpHeader.bfOffBits, SEEK_SET); - fread(bbits, bmp.bmHeight*bmp.bmWidthBytes*(bmp.bmBitsPixel / 8), 1, f); - - fclose(f); - } - } - } - } - case WM_COMMAND: - { - if (WParam == MAKEWPARAM(ID_LISTBOX, LBN_SELCHANGE) || - WParam == MAKEWPARAM(ID_LISTBOX2, LBN_SELCHANGE)) - { - switch (SNDMSG(HListBox, LB_GETCURSEL, 0, 0)) - { - case ID_ZOOM25: zoom_factor_h = 0.25; break; - case ID_ZOOM50: zoom_factor_h = 0.50; break; - case ID_ZOOM75: zoom_factor_h = 0.75; break; - case ID_ZOOM100: zoom_factor_h = 1.00; break; - case ID_ZOOM125: zoom_factor_h = 1.25; break; - case ID_ZOOM150: zoom_factor_h = 1.50; break; - case ID_ZOOM200: zoom_factor_h = 2.00; break; - case ID_ZOOM300: zoom_factor_h = 3.00; break; - } - - switch (SNDMSG(VListBox, LB_GETCURSEL, 0, 0)) - { - case ID_ZOOM25: zoom_factor_v = 0.25; break; - case ID_ZOOM50: zoom_factor_v = 0.50; break; - case ID_ZOOM75: zoom_factor_v = 0.75; break; - case ID_ZOOM100: zoom_factor_v = 1.00; break; - case ID_ZOOM125: zoom_factor_v = 1.25; break; - case ID_ZOOM150: zoom_factor_v = 1.50; break; - case ID_ZOOM200: zoom_factor_v = 2.00; break; - case ID_ZOOM300: zoom_factor_v = 3.00; break; - } - - // calculate the new width and height - const int new_width = - static_cast(zoom_factor_h * bmp.bmWidth); - const int new_height = - static_cast(zoom_factor_v * bmp.bmHeight); - - // is zooming in? - bool zoom_in = (new_width > RDest.right - RDest.left); - - // caculate the area that needs to be updated - RECT RUpdate = { - RDest.left, RDest.top, - RDest.left + max(new_width, RDest.right - RDest.left), - RDest.top + max(new_height, RDest.bottom - RDest.top) - }; - - // adjust the dimenstions of the - // destination rectangle - RDest.right = RDest.left + new_width; - RDest.bottom = RDest.top + new_height; - - // create an update region from the XOR combination - // of the update and destination rectangles - HRGN HUpdateRgn = CreateRectRgnIndirect(&RUpdate); - HRGN HDestRgn = CreateRectRgnIndirect(&RDest); - int result = - CombineRgn(HUpdateRgn, HUpdateRgn, HDestRgn, RGN_XOR); - - // incite a repaint - if (result != NULLREGION && result != ERROR) - { - InvalidateRgn(HWnd, HUpdateRgn, true); - RedrawWindow(HWnd, &RDest, NULL, RDW_NOERASE | RDW_INVALIDATE); - } - else if (result == NULLREGION) - { - InvalidateRect(HWnd, &RUpdate, zoom_in ? false : true); - } - - // clean up - DeleteObject(HUpdateRgn); - DeleteObject(HDestRgn); - } - break; - } - case WM_PAINT: - { - PAINTSTRUCT ps; - const HDC Hdc = BeginPaint(HWnd, &ps); -#if 0 - try -#endif - { - // - // TODO: add palette support (see Chapter 9)... - // - if (useDIBits) - { - if (RDest.right - RDest.left > 0) - { - if (zoom_factor_h < 1.0 || zoom_factor_v < 1.0) - { - SetStretchBltMode(Hdc, COLORONCOLOR); - } - - // render the zoomed image - StretchDIBits(Hdc, RDest.left, RDest.top, - RDest.right - RDest.left, - RDest.bottom - RDest.top, - 0, 0, - bmp.bmWidth, bmp.bmHeight, - bbits, &bmInfo, - DIB_RGB_COLORS, - SRCCOPY); - } - } - else - { - if (RDest.right - RDest.left > 0) - { - - // use BitBlt when not zooming - if (zoom_factor_h == 1.0 && zoom_factor_v == 1.0) - { - BitBlt(Hdc, RDest.left, RDest.top, - RDest.right - RDest.left, - RDest.bottom - RDest.top, - HMemDC, 0, 0, - SRCCOPY); - } - else - { - if (zoom_factor_h < 1.0 || zoom_factor_v < 1.0) - { - SetStretchBltMode(Hdc, COLORONCOLOR); - } - - // render the zoomed image - StretchBlt(Hdc, RDest.left, RDest.top, - RDest.right - RDest.left, - RDest.bottom - RDest.top, - HMemDC, 0, 0, - bmp.bmWidth, bmp.bmHeight, - SRCCOPY); - } - } - } - } -#if 0 - catch (...) -#endif - { - EndPaint(HWnd, &ps); - } - EndPaint(HWnd, &ps); - break; - } - case WM_DESTROY: - { - // clean up - DeleteObject(SelectObject(HMemDC, HOldBmp)); - DeleteDC(HMemDC); - - if (bbits) - delete[] bbits; - - PostQuitMessage(0); - return 0; - } - } - return DefWindowProc(HWnd, Msg, WParam, LParam); -} -//------------------------------------------------------------------ - - - diff --git a/rostests/tests/stretchblt/stretchblt.rbuild b/rostests/tests/stretchblt/stretchblt.rbuild deleted file mode 100644 index 18031d10c5b..00000000000 --- a/rostests/tests/stretchblt/stretchblt.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - stretchblt.cpp - diff --git a/rostests/tests/subclass/subclass.c b/rostests/tests/subclass/subclass.c deleted file mode 100644 index db299a440c5..00000000000 --- a/rostests/tests/subclass/subclass.c +++ /dev/null @@ -1,173 +0,0 @@ -#include -#include - -LRESULT WINAPI UnicodeWndProc(HWND, UINT, WPARAM, LPARAM); -LRESULT WINAPI UnicodeSubclassProc(HWND, UINT, WPARAM, LPARAM); -LRESULT WINAPI AnsiSubclassProc(HWND, UINT, WPARAM, LPARAM); - -static WNDPROC SavedWndProcW; -static WNDPROC SavedWndProcA; - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASSW wc; - MSG msg; - HWND hWnd; - WCHAR WindowTextW[256]; - char WindowTextA[256]; - - wc.lpszClassName = L"UnicodeClass"; - wc.lpfnWndProc = UnicodeWndProc; - wc.style = 0; - wc.hInstance = hInstance; - wc.hIcon = NULL; - wc.hCursor = NULL; - wc.hbrBackground = NULL; - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClassW(&wc) == 0) - { - fprintf(stderr, "RegisterClassW failed (last error 0x%X)\n", - GetLastError()); - return 1; - } - printf("Unicode class registered, WndProc = 0x%08x\n", wc.lpfnWndProc); - - hWnd = CreateWindowA("UnicodeClass", - "Unicode Window", - WS_OVERLAPPEDWINDOW, - 0, - 0, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindowA failed (last error 0x%X)\n", - GetLastError()); - return 1; - } - - printf("Window created, IsWindowUnicode returns %s\n", IsWindowUnicode(hWnd) ? "TRUE" : "FALSE"); - - printf("Calling GetWindowTextW\n"); - if (! GetWindowTextW(hWnd, WindowTextW, sizeof(WindowTextW) / sizeof(WindowTextW[0]))) - { - fprintf(stderr, "GetWindowTextW failed (last error 0x%X)\n", GetLastError()); - return 1; - } - printf("GetWindowTextW returned Unicode string \"%S\"\n", WindowTextW); - - printf("Calling GetWindowTextA\n"); - if (! GetWindowTextA(hWnd, WindowTextA, sizeof(WindowTextA) / sizeof(WindowTextA[0]))) - { - fprintf(stderr, "GetWindowTextA failed (last error 0x%X)\n", GetLastError()); - return 1; - } - printf("GetWindowTextA returned Ansi string \"%s\"\n", WindowTextA); - printf("\n"); - - SavedWndProcW = (WNDPROC) GetWindowLongW(hWnd, GWL_WNDPROC); - printf("GetWindowLongW returned 0x%08x\n", SavedWndProcW); - SavedWndProcA = (WNDPROC) GetWindowLongA(hWnd, GWL_WNDPROC); - printf("GetWindowLongA returned 0x%08x\n", SavedWndProcA); - printf("\n"); - - printf("Subclassing window using SetWindowLongW, new WndProc 0x%08x\n", UnicodeSubclassProc); - SetWindowLongW(hWnd, GWL_WNDPROC, (LONG) UnicodeSubclassProc); - printf("After subclass, IsWindowUnicode %s, WndProcA 0x%08x, WndProcW 0x%08x\n", - IsWindowUnicode(hWnd) ? "TRUE" : "FALSE", GetWindowLongA(hWnd, GWL_WNDPROC), - GetWindowLongW(hWnd, GWL_WNDPROC)); - - printf("Calling GetWindowTextW\n"); - if (! GetWindowTextW(hWnd, WindowTextW, sizeof(WindowTextW) / sizeof(WindowTextW[0]))) - { - fprintf(stderr, "GetWindowTextW failed (last error 0x%X)\n", GetLastError()); - return 1; - } - printf("GetWindowTextW returned Unicode string \"%S\"\n", WindowTextW); - printf("\n"); - - printf("Subclassing window using SetWindowLongA, new WndProc 0x%08x\n", AnsiSubclassProc); - SetWindowLongA(hWnd, GWL_WNDPROC, (LONG) AnsiSubclassProc); - printf("After subclass, IsWindowUnicode %s, WndProcA 0x%08x, WndProcW 0x%08x\n", - IsWindowUnicode(hWnd) ? "TRUE" : "FALSE", GetWindowLongA(hWnd, GWL_WNDPROC), - GetWindowLongW(hWnd, GWL_WNDPROC)); - - printf("Calling GetWindowTextW\n"); - if (! GetWindowTextW(hWnd, WindowTextW, sizeof(WindowTextW) / sizeof(WindowTextW[0]))) - { - fprintf(stderr, "GetWindowTextW failed (last error 0x%X)\n", GetLastError()); - return 1; - } - printf("GetWindowTextW returned Unicode string \"%S\"\n", WindowTextW); - - DestroyWindow(hWnd); - - return 0; -} - -LRESULT CALLBACK UnicodeWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - LRESULT Result; - - switch(msg) - { - case WM_GETTEXT: - printf("UnicodeWndProc calling DefWindowProcW\n"); - Result = DefWindowProcW(hWnd, msg, wParam, lParam); - printf("UnicodeWndProc Unicode window text \"%S\"\n", (LPWSTR) lParam); - break; - default: - Result = DefWindowProcW(hWnd, msg, wParam, lParam); - break; - } - - return Result; -} - -LRESULT CALLBACK UnicodeSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - LRESULT Result; - - switch(msg) - { - case WM_GETTEXT: - printf("UnicodeSubclassProc calling SavedWindowProc\n"); - Result = CallWindowProcW(SavedWndProcW, hWnd, msg, wParam, lParam); - printf("UnicodeSubclassProc Unicode window text \"%S\"\n", (LPWSTR) lParam); - break; - default: - Result = CallWindowProcW(SavedWndProcW, hWnd, msg, wParam, lParam); - break; - } - - return Result; -} - -LRESULT CALLBACK AnsiSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - LRESULT Result; - - switch(msg) - { - case WM_GETTEXT: - printf("AnsiSubclassProc calling SavedWindowProcA\n"); - Result = CallWindowProcA(SavedWndProcA, hWnd, msg, wParam, lParam); - printf("AnsiSubclassProc Ansi window text \"%s\"\n", (LPSTR) lParam); - break; - default: - Result = CallWindowProcA(SavedWndProcA, hWnd, msg, wParam, lParam); - break; - } - - return Result; -} diff --git a/rostests/tests/subclass/subclass.rbuild b/rostests/tests/subclass/subclass.rbuild deleted file mode 100644 index b8fcd0f0657..00000000000 --- a/rostests/tests/subclass/subclass.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - subclass.c - diff --git a/rostests/tests/suspend/suspend.c b/rostests/tests/suspend/suspend.c deleted file mode 100644 index a1f8a0697b7..00000000000 --- a/rostests/tests/suspend/suspend.c +++ /dev/null @@ -1,73 +0,0 @@ -#define UNICODE -#define WIN32_NO_STATUS -#include -#include -#define NTOS_MODE_USER -#include - -#define NDEBUG -#include - -static volatile DWORD z; -static volatile DWORD x=0; - -static NTSTATUS STDCALL -thread_1(PVOID Param) -{ - DWORD y=0; - - for(;;) - { - z++; - if(x>50) - { - printf("I should have been suspended for years :-)\n"); - Sleep(100); - x=0;y++; - if(y==3) ExitProcess(0); - } - } -} - -int -main(int argc, char *argv[]) -{ - HANDLE thread; - DWORD thread_id; - CONTEXT context; - - context.ContextFlags=CONTEXT_CONTROL; - - z=0; - thread=CreateThread(NULL, - 0x1000, - (LPTHREAD_START_ROUTINE)thread_1, - NULL, - 0, - &thread_id); - - if(!thread) - { - printf("Error: could not create thread ...\n"); - ExitProcess(0); - } - - Sleep(1000); - - SuspendThread(thread); - - for(;;) - { - printf("%lx ", z); - Sleep(100);x++; - if(x>100 && GetThreadContext(thread, &context)) - { - printf("EIP: %lx\n", context.Eip); - printf("Calling resumethread ... \n"); - ResumeThread(thread); - } - } - - ExitProcess(0); - return(0); -} diff --git a/rostests/tests/suspend/suspend.rbuild b/rostests/tests/suspend/suspend.rbuild deleted file mode 100644 index 185f63a8350..00000000000 --- a/rostests/tests/suspend/suspend.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - suspend.c - diff --git a/rostests/tests/tcpsvr/tcpsvr.c b/rostests/tests/tcpsvr/tcpsvr.c deleted file mode 100644 index 8f1d6b8c13b..00000000000 --- a/rostests/tests/tcpsvr/tcpsvr.c +++ /dev/null @@ -1,175 +0,0 @@ -/* tcpServer.c - * - * Simple Winsock TCP server test. - * Later will be used as base for ReactOS telnetd - * - * HISTORY: - * 6-15-02 - Added Winsock support to UNIX tcp test - * 6-16-02 - Removed Unix support - * 6-17-02 - Added extra comments to code - * - */ - -#include -#include -#include -#include - -#undef ERROR -#define SUCCESS 0 -#define ERROR 1 - -#define END_LINE 0x0A -#define SERVER_PORT 23 -#define MAX_MSG 100 - -/* function readline */ -int read_line(); - -int main (int argc, char *argv[]) { - - WORD wVersionRequested; - WSADATA WsaData; - INT Status; - int sd, newSd, cliLen; - - struct sockaddr_in cliAddr, servAddr; - char line[MAX_MSG]; - - wVersionRequested = MAKEWORD(2, 2); - - Status = WSAStartup(wVersionRequested, &WsaData); - if (Status != 0) { - printf("Could not initialize winsock dll.\n"); - return FALSE; - } - - /* create socket */ - sd = socket(AF_INET, SOCK_STREAM, 0); - if(sd<0) { - perror("cannot open socket "); - WSACleanup(); - return ERROR; - } - - /* bind server port */ - servAddr.sin_family = AF_INET; - servAddr.sin_addr.s_addr = htonl(INADDR_ANY); - servAddr.sin_port = htons(SERVER_PORT); - - if(bind(sd, (struct sockaddr *) &servAddr, sizeof(servAddr))<0) { - perror("cannot bind port "); - WSACleanup(); - return ERROR; - } - - listen(sd,5); - - while(1) { - - printf("%s: \n" - "To start test, Please telnet to localhost (127.0.0.1) port 23 \n" - "When connected input raw data followed by End of Line\n" - "Test is now running on TCP port %u\n",argv[0],SERVER_PORT); - - cliLen = sizeof(cliAddr); - newSd = accept(sd, (struct sockaddr *) &cliAddr, &cliLen); - if(newSd<0) { - perror("cannot accept connection "); - WSACleanup(); - return ERROR; - } - - /* init line */ - memset(line,0x0,MAX_MSG); - - /* receive segments */ - while(read_line(newSd,line)!=ERROR) { - - printf("%s: received from %s:TCP%d : %s\n", argv[0], - inet_ntoa(cliAddr.sin_addr), - ntohs(cliAddr.sin_port), line); - /* init line */ - memset(line,0x0,MAX_MSG); - - } /* while(read_line) */ - - } /* while (1) */ - -} - - -/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING */ -/* this function is experimental.. I don't know yet if it works */ -/* correctly or not. Use Steven's readline() function to have */ -/* something robust. */ -/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING */ - -/* rcv_line is my function readline(). Data is read from the socket when */ -/* needed, but not byte after bytes. All the received data is read. */ -/* This means only one call to recv(), instead of one call for */ -/* each received byte. */ -/* You can set END_CHAR to whatever means endofline for you. (0x0A is \n)*/ -/* read_lin returns the number of bytes returned in line_to_return */ -int read_line(int newSd, char *line_to_return) { - - static int rcv_ptr=0; - static char rcv_msg[MAX_MSG]; - static int n; - int offset; - - offset=0; - - while(1) { - if(rcv_ptr==0) { - /* read data from socket */ - memset(rcv_msg,0x0,MAX_MSG); /* init buffer */ - n = recv(newSd, rcv_msg, MAX_MSG, 0); /* wait for data */ - if (n<0) { - perror(" cannot receive data "); - return ERROR; - } else if (n==0) { - printf(" connection closed by client\n"); - close(newSd); - WSACleanup(); - return ERROR; - } - } - - /* if new data read on socket */ - /* OR */ - /* if another line is still in buffer */ - - /* copy line into 'line_to_return' */ - while(*(rcv_msg+rcv_ptr)!=END_LINE && rcv_ptr return line */ - if(rcv_ptr==n-1) { - /* set last byte to END_LINE */ - *(line_to_return+offset)=END_LINE; - rcv_ptr=0; - return ++offset; - } - - /* end of line but still some data in buffer => return line */ - if(rcv_ptr */ - /* wait for more data to arrive on socket */ - if(rcv_ptr == n) { - rcv_ptr = 0; - } - - } /* while */ -} - - diff --git a/rostests/tests/tcpsvr/tcpsvr.rbuild b/rostests/tests/tcpsvr/tcpsvr.rbuild deleted file mode 100644 index 58bf684d29a..00000000000 --- a/rostests/tests/tcpsvr/tcpsvr.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - ws2_32 - tcpsvr.c - diff --git a/rostests/tests/terminate/terminate.c b/rostests/tests/terminate/terminate.c deleted file mode 100644 index 7fd749f6b89..00000000000 --- a/rostests/tests/terminate/terminate.c +++ /dev/null @@ -1,75 +0,0 @@ -#define UNICODE -#define WIN32_NO_STATUS -#include -#include -#define NTOS_MODE_USER -#include - -#define NDEBUG -#include - -static volatile DWORD z; -static volatile DWORD x=0; - -static NTSTATUS STDCALL -thread_1(PVOID Param) -{ - DWORD y=0; - - for(;;) - { - z++; - if(x>50) - { - Sleep(100); - x=0;y++; - if(y==3) return(0); - } - } -} - -int -main(int argc, char *argv[]) -{ - HANDLE thread; - DWORD thread_id; - CONTEXT context; - DWORD z = 0; - - context.ContextFlags=CONTEXT_CONTROL; - - while (z < 50) - { - z++; - thread=CreateThread(NULL, - 0x1000, - (LPTHREAD_START_ROUTINE)thread_1, - NULL, - 0, - &thread_id); - - if(!thread) - { - printf("Error: could not create thread ...\n"); - ExitProcess(0); - } - - Sleep(1000); - - printf("T"); - if ((z % 5) == 0) - { - TerminateThread(thread, 0); - } - printf("C"); - GetThreadContext(thread, &context); - printf("S"); - SuspendThread(thread); - printf("R"); - ResumeThread(thread); - TerminateThread(thread, 0); - } - - ExitProcess(0); - return(0); -} diff --git a/rostests/tests/terminate/terminate.rbuild b/rostests/tests/terminate/terminate.rbuild deleted file mode 100644 index cde579a053c..00000000000 --- a/rostests/tests/terminate/terminate.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - terminate.c - diff --git a/rostests/tests/thread/thread.c b/rostests/tests/thread/thread.c deleted file mode 100644 index d9062645be7..00000000000 --- a/rostests/tests/thread/thread.c +++ /dev/null @@ -1,88 +0,0 @@ -/* $Id$ - * - * - * - * - */ - -#include -#include -#include - -#define NR_THREADS (10) - -ULONG nr; - -DWORD WINAPI thread_main1(LPVOID param) -{ - ULONG s; - - printf("Thread %ld running\n", (DWORD)param); - s = nr = ((nr * 1103515245) + 12345) & 0x7fffffff; - s = s % 10; - printf("s %ld\n", s); - Sleep(s); - printf("Thread %ld finished\n", (DWORD)param); - return 0; -} - -// Shows the help on how to use these program to the user -void showHelp(void) -{ - -printf("\nReactOS threads test program (built on %s).\n\n", __DATE__); -printf("syntax:\tthread.exe \n"); -printf("\twhere is an integer number\n"); -printf("\texample: thread.exe 100\n"); - - -} - -int main (int argc, char* argv[]) -{ - DWORD i=0; - DWORD id; - ULONG nr; - HANDLE ThreadHandle[NR_THREADS]; - - // The user must supply one argument (the seed). if he/she doesn't - // then we show the help. - // if(argc < 2) { - // showHelp(); - // return 1; - // } - - // nr = atoi(argv[1]); - nr = 500; - printf("Seed %ld\n", nr); - - printf("Creating %d threads...\n",NR_THREADS*2); - for (i=0;i - - kernel32 - gdi32 - thread.c - diff --git a/rostests/tests/thread_msg/thread_msg.c b/rostests/tests/thread_msg/thread_msg.c deleted file mode 100644 index cbb22213ac0..00000000000 --- a/rostests/tests/thread_msg/thread_msg.c +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Test case for PostThreadMessage - * (C) 2003 ReactOS - * License: LGPL - * See: LGPL.txt in top directory. - * Author: arty - * - * Windows thread message queue test case. - * Derived from ../event/event.c in part. - */ - -#include -#include -#include - -HANDLE hWaitForFailure; -HANDLE hOkToPostThreadMessage; -HANDLE hOkToTerminate; - -DWORD WINAPI thread( LPVOID crap ) -{ - MSG msg; - - /* Failure case ... Wait for the parent to try to post a message - before queue creation */ - printf( "Waiting to create the message queue.\n" ); - - WaitForSingleObject(hWaitForFailure,INFINITE); - - printf( "Creating message queue.\n" ); - - /* "Create" a message queue */ - PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ); - - printf( "Signalling the parent that we're ready.\n" ); - - /* Signal that it's ok to post */ - SetEvent( hOkToPostThreadMessage ); - - printf( "Listening messages.\n" ); - - /* Now read some messages */ - while( GetMessage( &msg, 0,0,0 ) ) { - printf( "Received message: %04x %04x %08lx\n", - (msg.message & 0xffff), - (msg.wParam & 0xffff), - msg.lParam ); - assert( !msg.hwnd ); - } - - printf( "Finished receiving messages.\n" ); - SetEvent( hOkToTerminate ); - - return 0; -} - -int main( int argc, char **argv ) -{ - DWORD id; - - printf( "Creating events\n" ); - - hOkToPostThreadMessage = CreateEvent( NULL, FALSE, FALSE, NULL ); - hOkToTerminate = CreateEvent( NULL, FALSE, FALSE, NULL ); - hWaitForFailure = CreateEvent( NULL, FALSE, FALSE, NULL ); - - printf( "Created events\n" ); - - if( CreateThread( 0, 0, thread, 0, 0, &id ) == NULL ) { - printf( "Couldn't create one thread.\n" ); - return 0; - } - - printf( "Posting to non-existent queue\n" ); - - /* Check failure case */ - assert( PostThreadMessage( id, WM_USER + 0, 1, 2 ) == FALSE ); - - printf( "Signalling thread to advance.\n" ); - - SetEvent( hWaitForFailure ); - - printf( "Waiting for signal from thread.\n" ); - WaitForSingleObject( hOkToPostThreadMessage, INFINITE ); - - printf( "Sending three messages, then quit.\n" ); - assert( PostThreadMessage( id, WM_USER + 0, 1, 2 ) ); - assert( PostThreadMessage( id, WM_USER + 1, 3, 4 ) ); - Sleep( 500 ); /* Sleep a bit, so that the queue is empty for a bit. */ - assert( PostThreadMessage( id, WM_USER + 2, 5, 6 ) ); - assert( PostThreadMessage( id, WM_QUIT, 0,0 ) ); - - WaitForSingleObject( hOkToTerminate, INFINITE ); - printf( "Test complete.\n" ); - - return 0; -} diff --git a/rostests/tests/thread_msg/thread_msg.rbuild b/rostests/tests/thread_msg/thread_msg.rbuild deleted file mode 100644 index 44ff078ae6f..00000000000 --- a/rostests/tests/thread_msg/thread_msg.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - thread_msg.c - diff --git a/rostests/tests/threadwait/threadwait.c b/rostests/tests/threadwait/threadwait.c deleted file mode 100644 index 06c20c4259d..00000000000 --- a/rostests/tests/threadwait/threadwait.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Author: Skywing (skywing@valhallalegends.com) - * Date: 09/09/2003 - * Purpose: Probe for PsUnblockThread crash due to double-acquire spin lock. - */ - -#define WIN32_NO_STATUS -#include -#include - -#define NTOS_MODE_USER -#include - -DWORD __stdcall threadfunc(void* UNREFERENCED) -{ - printf("Thread: Initialized\n"); - Sleep(2500); - printf("Thread: Terminating...\n"); - return 0; -} - -int main(int ac, char **av) -{ - DWORD id; - HANDLE Thread; - - Thread = CreateThread(0, 0, threadfunc, 0, 0, &id); - printf("Main: ThreadId for new thread is %08lx\n", id); - printf("Main: Waiting on thread...\n"); - WaitForSingleObject(Thread, INFINITE); - printf("Main: OK, somebody fixed the PsUnblockThread spinlock double-acquire crash\n"); - NtClose(Thread); - printf("Main: Terminating...\n"); - return 0; -} diff --git a/rostests/tests/threadwait/threadwait.rbuild b/rostests/tests/threadwait/threadwait.rbuild deleted file mode 100644 index ed50113bc3c..00000000000 --- a/rostests/tests/threadwait/threadwait.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - ntdll - threadwait.c - diff --git a/rostests/tests/tmrqueue/tmrqueue.c b/rostests/tests/tmrqueue/tmrqueue.c deleted file mode 100644 index d7c4f4b59e1..00000000000 --- a/rostests/tests/tmrqueue/tmrqueue.c +++ /dev/null @@ -1,365 +0,0 @@ -#include -#include -#include - -#define N_TIMEOUT 3 - -/*******************************************************************************/ - -typedef struct _TEST *PTEST; - -typedef VOID (*PFNTEST)(PTEST Test, HANDLE hEvent); - -typedef struct _TEST -{ - TCHAR *description; - BOOL Result; - PFNTEST Routine; - int id; -} TEST; - -static TEST Tests[3]; - -VOID RunTests(VOID) -{ - int i, nTests; - static HANDLE hEvent; - - hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - if(hEvent == NULL) - { - _tprintf(_T("Unable to create event!")); - return; - } - - nTests = sizeof(Tests) / sizeof(TEST); - - for(i = 0; i < nTests; i++) - { - Tests[i].id = i + 1; - - if(Tests[i].Routine == NULL) - { - continue; - } - - _tprintf(_T("+++ TEST %d: %s\n"), Tests[i].id, Tests[i].description); - - Tests[i].Routine(&Tests[i], hEvent); - - WaitForSingleObject(hEvent, INFINITE); - - _tprintf(_T("\n\n")); - } - - CloseHandle(hEvent); -} - -VOID PrintTestResults(VOID) -{ - int i, nTests, nsuccess = 0, nfailed = 0; - TCHAR *status; - - nTests = sizeof(Tests) / sizeof(TEST); - - for(i = 0; i < nTests; i++) - { - if(Tests[i].Routine == NULL) - { - status = _T("SKIPPED"); - } - else if(Tests[i].Result == TRUE) - { - status = _T("SUCCESS"); - nsuccess++; - } - else - { - status = _T("FAILED "); - nfailed++; - } - - _tprintf(_T("Test %d: %s %s\n"), i, status, Tests[i].description); - } - - _tprintf(_T("\nTests succeeded: %d, failed: %d\n"), nsuccess, nfailed); - if(nfailed == 0) - { - _tprintf(_T(" ALL TESTS SUCCESSFUL!\n")); - } -} - -/*******************************************************************************/ - -typedef struct _TESTINFO -{ - PTEST Test; - int secsleft; - HANDLE hTimer; - HANDLE hEvent; - /* additional stuff */ - union - { - struct - { - /* nothing */ - } Test1; - struct - { - HANDLE hWaitEvent; - } Test2; - struct - { - HANDLE hWaitEvent; - HANDLE hNotification; - } Test3; - }; -} TESTINFO, *PTESTINFO; - -VOID CALLBACK TimerCallback1(PVOID Param, BOOLEAN Fired) -{ - PTESTINFO Info = (PTESTINFO)Param; - - _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, (int)Info->hTimer, (int)Fired, --Info->secsleft); - - if(Info->secsleft == 0) - { - BOOL stat; - - _tprintf(_T("[%d]Timout finished, delete timer queue..."), (int)Info->Test->id); - stat = DeleteTimerQueueTimer(NULL, Info->hTimer, NULL); - if(stat) - _tprintf(_T("returned OK -> test FAILED!\n")); - else - { - int error = GetLastError(); - - switch(error) - { - case ERROR_IO_PENDING: - _tprintf(_T("OK, Overlapped I/O operation in progress\n")); - /* this test is only successful in this case */ - Info->Test->Result = TRUE; - break; - default: - _tprintf(_T("Failed, LastError: %d\n"), (int)GetLastError()); - break; - } - } - - /* set the event to continue tests */ - SetEvent(Info->hEvent); - } -} - -VOID Test1(PTEST Test, HANDLE hEvent) -{ - static TESTINFO Info; - - Info.Test = Test; - Info.hEvent = hEvent; - Info.secsleft = N_TIMEOUT; - - if(!CreateTimerQueueTimer(&Info.hTimer, NULL, TimerCallback1, &Info, 1000, 1000, 0)) - { - _tprintf(_T("[%d]CreateTimerQueueTimer() failed, LastError: %d!"), (int)Info.Test->id, (int)GetLastError()); - /* we failed, set the event to continue tests */ - SetEvent(hEvent); - return; - } - - _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Info.Test->id, (int)Info.hTimer, (int)Info.secsleft); -} - -/*******************************************************************************/ - -VOID CALLBACK TimerCallback2(PVOID Param, BOOLEAN Fired) -{ - PTESTINFO Info = (PTESTINFO)Param; - - _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, (int)Info->hTimer, (int)Fired, --Info->secsleft); - - if(Info->secsleft == 0) - { - /* set the event to continue tests */ - SetEvent(Info->Test2.hWaitEvent); - - /* sleep a bit */ - Sleep(1500); - } -} - -VOID Test2(PTEST Test, HANDLE hEvent) -{ - static TESTINFO Info; - BOOL stat; - - Info.Test = Test; - Info.hEvent = hEvent; - Info.secsleft = N_TIMEOUT; - - Info.Test2.hWaitEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - if(Info.Test2.hWaitEvent == NULL) - { - _tprintf(_T("[%d]Unable to create event!\n"), (int)Info.Test->id); - return; - } - - if(!CreateTimerQueueTimer(&Info.hTimer, NULL, TimerCallback2, &Info, 1000, 1000, 0)) - { - _tprintf(_T("[%d]CreateTimerQueueTimer() failed, LastError: %d!"), (int)Info.Test->id, (int)GetLastError()); - - CloseHandle(Info.Test2.hWaitEvent); - /* we failed, set the event to continue tests */ - SetEvent(hEvent); - return; - } - - _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Test->id, (int)Info.hTimer, (int)Info.secsleft); - - WaitForSingleObject(Info.Test2.hWaitEvent, INFINITE); - - _tprintf(_T("[%d]Timout finished, delete timer queue..."), (int)Test->id); - stat = DeleteTimerQueueTimer(NULL, Info.hTimer, INVALID_HANDLE_VALUE); - if(stat) - { - _tprintf(_T("OK\n")); - /* this test is only successful in this case */ - Test->Result = TRUE; - } - else - { - int error = GetLastError(); - - switch(error) - { - case ERROR_IO_PENDING: - _tprintf(_T("FAILED, Overlapped I/O operation in progress\n")); - break; - default: - _tprintf(_T("Failed, LastError: %d\n"), (int)GetLastError()); - break; - } - } - - SetEvent(Info.hEvent); -} - -/*******************************************************************************/ - -VOID CALLBACK TimerCallback3(PVOID Param, BOOLEAN Fired) -{ - PTESTINFO Info = (PTESTINFO)Param; - - _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, (int)Info->hTimer, (int)Fired, --Info->secsleft); - - if(Info->secsleft == 0) - { - /* set the event to continue tests */ - SetEvent(Info->Test3.hWaitEvent); - - /* sleep a bit */ - Sleep(1500); - } -} - -VOID Test3(PTEST Test, HANDLE hEvent) -{ - static TESTINFO Info; - BOOL stat; - - Info.Test = Test; - Info.hEvent = hEvent; - Info.secsleft = N_TIMEOUT; - - Info.Test3.hWaitEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - if(Info.Test3.hWaitEvent == NULL) - { - _tprintf(_T("[%d]Unable to create event!\n"), (int)Info.Test->id); - return; - } - - Info.Test3.hNotification = CreateEvent(NULL, FALSE, FALSE, NULL); - if(Info.Test3.hNotification == NULL) - { - _tprintf(_T("[%d]Unable to create notification event!\n"), (int)Info.Test->id); - return; - } - - if(!CreateTimerQueueTimer(&Info.hTimer, NULL, TimerCallback3, &Info, 1000, 1000, 0)) - { - _tprintf(_T("[%d]CreateTimerQueueTimer() failed, LastError: %d!"), (int)Info.Test->id, (int)GetLastError()); - - CloseHandle(Info.Test3.hWaitEvent); - CloseHandle(Info.Test3.hNotification); - /* we failed, set the event to continue tests */ - SetEvent(hEvent); - return; - } - - _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Test->id, (int)Info.hTimer, (int)Info.secsleft); - - WaitForSingleObject(Info.Test3.hWaitEvent, INFINITE); - - _tprintf(_T("[%d]Timout finished, delete timer queue..."), (int)Test->id); - stat = DeleteTimerQueueTimer(NULL, Info.hTimer, Info.Test3.hNotification); - if(stat) - { - _tprintf(_T("returned OK -> test FAILED!\n")); - } - else - { - int error = GetLastError(); - - switch(error) - { - case ERROR_IO_PENDING: - _tprintf(_T("OK, Overlapped I/O operation in progress\n")); - /* this test is only successful in this case */ - Test->Result = TRUE; - break; - default: - _tprintf(_T("Failed, LastError: %d\n"), (int)GetLastError()); - break; - } - } - - WaitForSingleObject(Info.Test3.hNotification, INFINITE); - - CloseHandle(Info.Test3.hWaitEvent); - CloseHandle(Info.Test3.hNotification); - - SetEvent(Info.hEvent); -} - -/*******************************************************************************/ - -VOID -InitTests(VOID) -{ - ZeroMemory(Tests, sizeof(Tests)); - - Tests[0].description = _T("non-blocking DeleteTimerQueueTimer() call from callback"); - Tests[0].Routine = Test1; - - Tests[1].description = _T("blocking DeleteTimerQueueTimer() call"); - Tests[1].Routine = Test2; - - Tests[2].description = _T("blocking DeleteTimerQueueTimer() call with specified event"); - Tests[2].Routine = Test3; -} - -int main(int argc, char* argv[]) -{ - _tprintf(_T("+++ TimerQueue test running +++\n\n")); - - InitTests(); - - RunTests(); - - _tprintf(_T("\n+++ RESULTS +++\n")); - - PrintTestResults(); - - return 0; -} diff --git a/rostests/tests/tmrqueue/tmrqueue.rbuild b/rostests/tests/tmrqueue/tmrqueue.rbuild deleted file mode 100644 index ea448810aa1..00000000000 --- a/rostests/tests/tmrqueue/tmrqueue.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - tmrqueue.c - diff --git a/rostests/tests/tokentest/tokentest.c b/rostests/tests/tokentest/tokentest.c deleted file mode 100644 index 7c042821ee0..00000000000 --- a/rostests/tests/tokentest/tokentest.c +++ /dev/null @@ -1,524 +0,0 @@ -#define UNICODE -#define _UNICODE - -#define ANONYMOUSUNIONS -#include -#include - -#define NTOS_MODE_USER -#include - - -#define INCLUDE_THE_DDK_HEADERS -#ifdef INCLUDE_THE_DDK_HEADERS -#include -#define ROS_ACE_HEADER ACE_HEADER -#define ROS_ACE ACE - -#else -typedef LONG NTSTATUS, *PNTSTATUS; - -typedef struct _UNICODE_STRING -{ - USHORT Length; - USHORT MaximumLength; - PWSTR Buffer; -} UNICODE_STRING, *PUNICODE_STRING; - -typedef struct _OBJECT_ATTRIBUTES { - ULONG Length; - HANDLE RootDirectory; - PUNICODE_STRING ObjectName; - ULONG Attributes; - PVOID SecurityDescriptor; // Points to type SECURITY_DESCRIPTOR - PVOID SecurityQualityOfService; // Points to type SECURITY_QUALITY_OF_SERVICE -} OBJECT_ATTRIBUTES; -typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES; - -typedef struct _ROS_ACE_HEADER -{ - CHAR AceType; - CHAR AceFlags; - USHORT AceSize; -} ROS_ACE_HEADER, *PROS_ACE_HEADER; - -typedef struct -{ - ACE_HEADER Header; - ACCESS_MASK AccessMask; -} ROS_ACE, *PROS_ACE; - -NTSYSAPI -NTSTATUS -NTAPI -RtlConvertSidToUnicodeString ( - IN OUT PUNICODE_STRING String, - IN PSID Sid, - IN BOOLEAN AllocateString - ); - -NTSYSAPI -NTSTATUS -NTAPI -RtlCreateAcl( - PACL Acl, - ULONG AclSize, - ULONG AclRevision); - -NTSYSAPI -NTSTATUS -NTAPI -RtlAddAccessAllowedAce ( - PACL Acl, - ULONG Revision, - ACCESS_MASK AccessMask, - PSID Sid - ); - -NTSYSAPI -NTSTATUS -NTAPI -RtlGetAce ( - PACL Acl, - ULONG AceIndex, - PROS_ACE *Ace - ); - -NTSYSAPI -NTSTATUS -NTAPI -ZwAllocateLocallyUniqueId( - OUT PLUID Luid - ); - -NTSYSAPI -NTSTATUS -NTAPI -ZwCreateToken( - OUT PHANDLE TokenHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN TOKEN_TYPE TokenType, - IN PLUID AuthenticationId, - IN PLARGE_INTEGER ExpirationTime, - IN PTOKEN_USER TokenUser, - IN PTOKEN_GROUPS TokenGroups, - IN PTOKEN_PRIVILEGES TokenPrivileges, - IN PTOKEN_OWNER TokenOwner, - IN PTOKEN_PRIMARY_GROUP TokenPrimaryGroup, - IN PTOKEN_DEFAULT_DACL TokenDefaultDacl, - IN PTOKEN_SOURCE TokenSource - ); -#define NT_SUCCESS(StatCode) ((NTSTATUS)(StatCode) >= 0) -#endif - -#include - -#define INITIAL_PRIV_ENABLED SE_PRIVILEGE_ENABLED_BY_DEFAULT|SE_PRIVILEGE_ENABLED -#define INITIAL_PRIV_DISABLED 0 -LUID_AND_ATTRIBUTES InitialPrivilegeSet[] = -{ - { { 0x00000007, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeTcbPrivilege - { { 0x00000002, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeCreateTokenPrivilege - { { 0x00000009, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeTakeOwnershipPrivilege - { { 0x0000000f, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeCreatePagefilePrivilege - { { 0x00000004, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeLockMemoryPrivilege - { { 0x00000003, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeAssignPrimaryTokenPrivilege - { { 0x00000005, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeIncreaseQuotaPrivilege - { { 0x0000000e, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeIncreaseBasePriorityPrivilege - { { 0x00000010, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeCreatePermanentPrivilege - { { 0x00000014, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeDebugPrivilege - { { 0x00000015, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeAuditPrivilege - { { 0x00000008, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeSecurityPrivilege - { { 0x00000016, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeSystemEnvironmentPrivilege - { { 0x00000017, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeChangeNotifyPrivilege - { { 0x00000011, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeBackupPrivilege - { { 0x00000012, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeRestorePrivilege - { { 0x00000013, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeShutdownPrivilege - { { 0x0000000a, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeLoadDriverPrivilege - { { 0x0000000d, 0x00000000 }, INITIAL_PRIV_ENABLED }, // SeProfileSingleProcessPrivilege - { { 0x0000000c, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeSystemtimePrivilege - { { 0x00000019, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeUndockPrivilege - { { 0x0000001c, 0x00000000 }, INITIAL_PRIV_DISABLED }, // SeManageVolumePrivilege -}; - -typedef struct _SID_2 -{ - UCHAR Revision; - UCHAR SubAuthorityCount; - SID_IDENTIFIER_AUTHORITY IdentifierAuthority; - ULONG SubAuthority[2]; -} SID_2; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -void -PrintSid(SID_AND_ATTRIBUTES* pSid, TOKEN_OWNER* pOwner, TOKEN_PRIMARY_GROUP* pPrimary) -{ - UNICODE_STRING scSid; - - RtlConvertSidToUnicodeString(&scSid, pSid->Sid, TRUE); - printf("%wZ [", &scSid); - LocalFree(scSid.Buffer); - - if ( EqualSid(pSid->Sid, pOwner->Owner) ) - printf("owner,"); - - if ( EqualSid(pSid->Sid, pPrimary->PrimaryGroup) ) - printf("primary,"); - - if ( pSid->Attributes & SE_GROUP_ENABLED ) - { - if ( pSid->Attributes & SE_GROUP_ENABLED_BY_DEFAULT ) - printf("enabled-default,"); - else - printf("enabled,"); - } - - if ( pSid->Attributes & SE_GROUP_LOGON_ID ) - printf("logon,"); - - - if ( pSid->Attributes & SE_GROUP_MANDATORY ) - printf("mandatory,"); - - printf("]\n"); -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -void -DisplayTokenSids(TOKEN_USER* pUser, - TOKEN_GROUPS* pGroups, - TOKEN_OWNER* pOwner, - TOKEN_PRIMARY_GROUP* pPrimary) -{ - DWORD i; - - printf("\nSids:\n"); - PrintSid(&pUser->User, pOwner, pPrimary); - printf("\nGroups:\n"); - for (i = 0; i < pGroups->GroupCount; i++) - PrintSid(&pGroups->Groups[i], pOwner, pPrimary); -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -void -DisplayTokenPrivileges(TOKEN_PRIVILEGES* pPriv) -{ - WCHAR buffer[256]; - DWORD i; - - printf("\nprivileges:\n"); - for (i = 0; i < pPriv->PrivilegeCount; i++) - { - DWORD cbName = sizeof(buffer) / sizeof(buffer[0]); - LookupPrivilegeName(0, &pPriv->Privileges[i].Luid, buffer, &cbName); - - printf("%S{0x%08x, 0x%08x} [", buffer, pPriv->Privileges[i].Luid.HighPart, pPriv->Privileges[i].Luid.LowPart); - - if ( pPriv->Privileges[i].Attributes & SE_PRIVILEGE_ENABLED ) - printf("enabled,"); - if ( pPriv->Privileges[i].Attributes & SE_PRIVILEGE_ENABLED_BY_DEFAULT ) - printf("default,"); - if ( pPriv->Privileges[i].Attributes & SE_PRIVILEGE_USED_FOR_ACCESS ) - printf("used"); - - printf("]\n"); - } -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -void -DisplayDacl(PACL pAcl) -{ - DWORD i; - NTSTATUS status; - - if ( ! pAcl ) - { - printf("\nNo Default Dacl.\n"); - return; - } - - printf("\nDacl:\n"); - for (i = 0; i < pAcl->AceCount; i++) - { - UNICODE_STRING scSid; - ROS_ACE* pAce; - LPWSTR wszType = 0; - PSID pSid; - - status = RtlGetAce(pAcl, i, (ROS_ACE**) &pAce); - if ( ! NT_SUCCESS(status) ) - { - printf("RtlGetAce(): status = 0x%08x\n", status); - break; - } - - pSid = (PSID) (pAce + 1); - if ( pAce->Header.AceType == ACCESS_ALLOWED_ACE_TYPE ) - wszType = L"allow"; - if ( pAce->Header.AceType == ACCESS_DENIED_ACE_TYPE ) - wszType = L"deny "; - - status = RtlConvertSidToUnicodeString(&scSid, pSid, TRUE); - if ( ! NT_SUCCESS(status) ) - { - printf("RtlConvertSidToUnicodeString(): status = 0x%08x\n", status); - break; - } - - printf("%d.) %S %wZ 0x%08x\n", i, wszType, &scSid, pAce->AccessMask); - LocalFree(scSid.Buffer); - } -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -PVOID -GetFromToken(HANDLE hToken, TOKEN_INFORMATION_CLASS tic) -{ - BOOL bResult; - DWORD n; - PBYTE p = 0; - - bResult = GetTokenInformation(hToken, tic, 0, 0, &n); - if ( ! bResult && GetLastError() != ERROR_INSUFFICIENT_BUFFER) - return 0; - - p = (PBYTE) malloc(n); - if ( ! GetTokenInformation(hToken, tic, p, n, &n) ) - { - printf("GetFromToken() failed for TOKEN_INFORMATION_CLASS(%d): %d\n", tic, GetLastError()); - free(p); - return 0; - } - - return p; -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -void -DisplayToken(HANDLE hTokenSource) -{ - TOKEN_USER* pTokenUser = (PTOKEN_USER) GetFromToken(hTokenSource, TokenUser); - TOKEN_GROUPS* pTokenGroups = (PTOKEN_GROUPS) GetFromToken(hTokenSource, TokenGroups); - TOKEN_OWNER* pTokenOwner = (PTOKEN_OWNER) GetFromToken(hTokenSource, TokenOwner); - TOKEN_PRIMARY_GROUP* pTokenPrimaryGroup = (PTOKEN_PRIMARY_GROUP) GetFromToken(hTokenSource, TokenPrimaryGroup); - TOKEN_PRIVILEGES* pTokenPrivileges = (PTOKEN_PRIVILEGES) GetFromToken(hTokenSource, TokenPrivileges); - TOKEN_DEFAULT_DACL* pTokenDefaultDacl = (PTOKEN_DEFAULT_DACL) GetFromToken(hTokenSource, TokenDefaultDacl); - - DisplayTokenSids(pTokenUser, pTokenGroups, pTokenOwner, pTokenPrimaryGroup); - // DisplayTokenPrivileges(pTokenPrivileges); - DisplayDacl(pTokenDefaultDacl->DefaultDacl); - - free(pTokenUser); - free(pTokenGroups); - free(pTokenOwner); - free(pTokenPrimaryGroup); - free(pTokenPrivileges); - free(pTokenDefaultDacl); -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -BOOL -EnablePrivilege(LPWSTR wszName) -{ - HANDLE hToken; - TOKEN_PRIVILEGES priv = {1, {{{0, 0}, SE_PRIVILEGE_ENABLED}}}; - BOOL bResult; - - LookupPrivilegeValue(0, wszName, &priv.Privileges[0].Luid); - - OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken); - - AdjustTokenPrivileges(hToken, FALSE, &priv, sizeof priv, 0, 0); - bResult = GetLastError() == ERROR_SUCCESS; - - CloseHandle(hToken); - return bResult; -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -NTSTATUS -CreateInitialSystemToken(HANDLE* phSystemToken) -{ - static SID sidSystem = { 1, 1, {SECURITY_NT_AUTHORITY}, {SECURITY_LOCAL_SYSTEM_RID} }; - static SID sidEveryone = { 1, 1, {SECURITY_WORLD_SID_AUTHORITY}, {SECURITY_WORLD_RID} }; - static SID sidAuthenticatedUser = { 1, 1, {SECURITY_NT_AUTHORITY}, {SECURITY_AUTHENTICATED_USER_RID} }; - static SID_2 sidAdministrators = { 1, 2, {SECURITY_NT_AUTHORITY}, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS} }; - static const int nGroupCount = 3; - - NTSTATUS status; - ULONG uSize; - DWORD i; - - TOKEN_USER tkUser; - TOKEN_OWNER tkDefaultOwner; - TOKEN_PRIMARY_GROUP tkPrimaryGroup; - - TOKEN_GROUPS* ptkGroups = 0; - TOKEN_PRIVILEGES* ptkPrivileges = 0; - TOKEN_DEFAULT_DACL tkDefaultDacl = { 0 }; - - LARGE_INTEGER tkExpiration; - - LUID authId = SYSTEM_LUID; - - TOKEN_SOURCE source = - { - { '*', '*', 'A', 'N', 'O', 'N', '*', '*' }, - {0, 0} - }; - - SECURITY_QUALITY_OF_SERVICE sqos = - { - sizeof(sqos), - SecurityAnonymous, - SECURITY_STATIC_TRACKING, - FALSE - }; - - OBJECT_ATTRIBUTES oa = - { - sizeof(oa), - 0, - 0, - 0, - 0, - &sqos - }; - - tkExpiration.QuadPart = -1; - status = ZwAllocateLocallyUniqueId(&source.SourceIdentifier); - if ( status != 0 ) - return status; - - tkUser.User.Sid = &sidSystem; - tkUser.User.Attributes = 0; - - // Under WinXP (the only MS OS I've tested) ZwCreateToken() - // squawks if we use sidAdministrators here -- though running - // a progrem under AT and using the DisplayToken() function - // shows that the system token does default ownership to - // Administrator. - - // For now, default ownership to system, since that works - tkDefaultOwner.Owner = &sidSystem; - tkPrimaryGroup.PrimaryGroup = &sidSystem; - - uSize = sizeof(TOKEN_GROUPS) - sizeof(ptkGroups->Groups); - uSize += sizeof(SID_AND_ATTRIBUTES) * nGroupCount; - - ptkGroups = (TOKEN_GROUPS*) malloc(uSize); - ptkGroups->GroupCount = nGroupCount; - - ptkGroups->Groups[0].Sid = (SID*) &sidAdministrators; - ptkGroups->Groups[0].Attributes = SE_GROUP_ENABLED; - - ptkGroups->Groups[1].Sid = &sidEveryone; - ptkGroups->Groups[1].Attributes = SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY; - - ptkGroups->Groups[2].Sid = &sidAuthenticatedUser; - ptkGroups->Groups[2].Attributes = SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY; - - uSize = sizeof(TOKEN_PRIVILEGES) - sizeof(ptkPrivileges->Privileges); - uSize += sizeof(LUID_AND_ATTRIBUTES) * sizeof(InitialPrivilegeSet) / sizeof(InitialPrivilegeSet[0]); - ptkPrivileges = (TOKEN_PRIVILEGES*) malloc(uSize); - ptkPrivileges->PrivilegeCount = sizeof(InitialPrivilegeSet) / sizeof(InitialPrivilegeSet[0]); - for (i = 0; i < ptkPrivileges->PrivilegeCount; i++) - { - ptkPrivileges->Privileges[i].Luid.HighPart = InitialPrivilegeSet[i].Luid.HighPart; - ptkPrivileges->Privileges[i].Luid.LowPart = InitialPrivilegeSet[i].Luid.LowPart; - ptkPrivileges->Privileges[i].Attributes = InitialPrivilegeSet[i].Attributes; - } - - // Calculate the length needed for the ACL - uSize = sizeof(ACL); - uSize += sizeof(ACE) + sizeof(sidSystem); - uSize += sizeof(ACE) + sizeof(sidAdministrators); - uSize = (uSize & (~3)) + 8; - tkDefaultDacl.DefaultDacl = (PACL) malloc(uSize); - - status = RtlCreateAcl(tkDefaultDacl.DefaultDacl, uSize, ACL_REVISION); - if ( ! NT_SUCCESS(status) ) - printf("RtlCreateAcl() failed: 0x%08x\n", status); - - status = RtlAddAccessAllowedAce(tkDefaultDacl.DefaultDacl, ACL_REVISION, GENERIC_ALL, &sidSystem); - if ( ! NT_SUCCESS(status) ) - printf("RtlAddAccessAllowedAce() failed: 0x%08x\n", status); - - status = RtlAddAccessAllowedAce(tkDefaultDacl.DefaultDacl, ACL_REVISION, GENERIC_READ|GENERIC_EXECUTE|READ_CONTROL, (PSID) &sidAdministrators); - if ( ! NT_SUCCESS(status) ) - printf("RtlAddAccessAllowedAce() failed: 0x%08x\n", status); - - printf("Parameters being passed into ZwCreateToken:\n\n"); - DisplayTokenSids(&tkUser, ptkGroups, &tkDefaultOwner, &tkPrimaryGroup); - DisplayDacl(tkDefaultDacl.DefaultDacl); - - printf("Calling ZwCreateToken()...\n"); - status = ZwCreateToken(phSystemToken, - TOKEN_ALL_ACCESS, - &oa, - TokenPrimary, - &authId, - &tkExpiration, - &tkUser, - ptkGroups, - ptkPrivileges, - &tkDefaultOwner, - &tkPrimaryGroup, - &tkDefaultDacl, - &source); - - // Cleanup - free(ptkGroups); - free(ptkPrivileges); - free(tkDefaultDacl.DefaultDacl); - - return status; -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int -main(int argc, char* argv[]) -{ - NTSTATUS Status; - HANDLE hSystemToken; - CHAR buffer[512]; - HANDLE hOurToken; - - printf("Current process Token:\n"); - - Status=ZwOpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_QUERY_SOURCE, &hOurToken); - if ( NT_SUCCESS(Status) ) - { - DisplayToken(hOurToken); - CloseHandle(hOurToken); - } - else - { - printf("ZwOpenProcessToken() failed: 0x%08x\n", Status); - } - -//#define ENABLE_PRIVILEGE -#ifdef ENABLE_PRIVILEGE - EnablePrivilege(SE_CREATE_TOKEN_NAME); -#endif - - // Now do the other one - Status = CreateInitialSystemToken(&hSystemToken); - if ( NT_SUCCESS(Status) ) - { - printf("System Token: 0x%08x\n", hSystemToken); - DisplayToken(hSystemToken); - CloseHandle(hSystemToken); - } - else - { - printf("CreateInitialSystemToken() return: 0x%08x\n", Status); - } - - printf("press return"); - gets(buffer); - - return 0; -} diff --git a/rostests/tests/tokentest/tokentest.rbuild b/rostests/tests/tokentest/tokentest.rbuild deleted file mode 100644 index 8674629f706..00000000000 --- a/rostests/tests/tokentest/tokentest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - tokentest.c - diff --git a/rostests/tests/txtscale/mk_font.cpp b/rostests/tests/txtscale/mk_font.cpp deleted file mode 100644 index 650fdfe4277..00000000000 --- a/rostests/tests/txtscale/mk_font.cpp +++ /dev/null @@ -1,69 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 4 - Utility functions -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -#include - -#include "mk_font.h" -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - -namespace font { - -// creates a logical font -HFONT MakeFont( - IN HDC hDestDC, // handle to target DC - IN LPCSTR typeface_name, // font's typeface name - IN int point_size, // font's point size - IN const BYTE charset, // font's character set - IN const DWORD style // font's styles - ) -{ - // - // NOTE: On Windows 9x/Me, GetWorldTransform is not - // supported. For compatibility with these platforms you - // should initialize the XFORM::eM22 data member to 1.0. - // - XFORM xf = {0, 0, 0, 1.0, 0, 0}; - GetWorldTransform(hDestDC, &xf); - int pixels_per_inch = GetDeviceCaps(hDestDC, LOGPIXELSY); - - POINT PSize = { - 0, - -MulDiv(static_cast(xf.eM22 * point_size + 0.5), - pixels_per_inch, 72) - }; - - HFONT hResult = NULL; - if (DPtoLP(hDestDC, &PSize, 1)) - { - LOGFONT lf; - memset(&lf, 0, sizeof(LOGFONT)); - - lf.lfHeight = PSize.y; - lf.lfCharSet = charset; - lstrcpyn(reinterpret_cast(&lf.lfFaceName), - typeface_name, LF_FACESIZE); - - lf.lfWeight = (style & FS_BOLD) ? FW_BOLD : FW_DONTCARE; - lf.lfItalic = (style & FS_ITALIC) ? true : false; - lf.lfUnderline = (style & FS_UNDERLINE) ? true : false; - lf.lfStrikeOut = (style & FS_STRIKEOUT) ? true : false; - - // create the logical font - hResult = CreateFontIndirect(&lf); - } - return hResult; -} -//------------------------------------------------------------------------- - -} // namespace font diff --git a/rostests/tests/txtscale/mk_font.h b/rostests/tests/txtscale/mk_font.h deleted file mode 100644 index b84f8942f65..00000000000 --- a/rostests/tests/txtscale/mk_font.h +++ /dev/null @@ -1,39 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 4 - Utility functions -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#ifndef CH4_UTILS_H -#define CH4_UTILS_H - -#include -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - -// change namespace name appropriately to suit your needs -namespace font { - -// font options -static const ULONG FS_NONE = 0x00000000; -static const ULONG FS_BOLD = 0x00000001; -static const ULONG FS_ITALIC = 0x00000002; -static const ULONG FS_UNDERLINE = 0x00000004; -static const ULONG FS_STRIKEOUT = 0x00000008; - -// creates a logical font -HFONT MakeFont(IN HDC hDestDC, IN LPCSTR typeface_name, - IN int point_size, IN const BYTE charset = ANSI_CHARSET, - IN const DWORD style = FS_NONE); - -} - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#endif // CH4_UTILS_H -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< diff --git a/rostests/tests/txtscale/txtscale.cpp b/rostests/tests/txtscale/txtscale.cpp deleted file mode 100644 index 8c86dc29c98..00000000000 --- a/rostests/tests/txtscale/txtscale.cpp +++ /dev/null @@ -1,266 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 8 - Listing 8.1 (Scaled Text Demo) -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -#include -#include - -// for the MakeFont() function... -#include "mk_font.h" -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - -HINSTANCE hInst; -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam); - - -int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, - int nCmdShow) -{ - hInst = hInstance; - - WNDCLASS wc; - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpszClassName = WndClassName; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = hInst; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = reinterpret_cast( - COLOR_BTNFACE + 1 - ); - - if (RegisterClass(&wc)) - { - HWND hWnd = - CreateWindow( - WndClassName, TEXT("Scaled Text Demo"), - WS_OVERLAPPEDWINDOW | WS_CAPTION | - WS_VISIBLE | WS_CLIPCHILDREN, - CW_USEDEFAULT, CW_USEDEFAULT, 800, 300, - NULL, NULL, hInst, NULL - ); - - if (hWnd) - { - ShowWindow(hWnd, nCmdShow); - UpdateWindow(hWnd); - - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} -//------------------------------------------------------------------------- - - -HWND hTrackBar = NULL; -HFONT hTTFont = NULL; -double scale = 0.0; -LPCSTR pText = TEXT("The Scaled Text!"); - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, - LPARAM lParam) -{ - switch (msg) - { - case WM_CREATE: - { - INITCOMMONCONTROLSEX icx; - icx.dwSize = sizeof(INITCOMMONCONTROLSEX); - icx.dwICC = ICC_BAR_CLASSES; - - InitCommonControlsEx(&icx); - - hTrackBar = - CreateWindow( - TRACKBAR_CLASS, "", - TBS_HORZ | TBS_BOTH | TBS_AUTOTICKS | - TBS_FIXEDLENGTH | TBS_ENABLESELRANGE | - WS_CHILD | WS_VISIBLE, - 10, 260, 375, 40, - hWnd, NULL, hInst, NULL - ); - - assert(hTrackBar != NULL); - SNDMSG(hTrackBar, TBM_SETTHUMBLENGTH, 20, 0); - SNDMSG(hTrackBar, TBM_SETRANGEMAX, TRUE, 100); - - // create the TrueType (scalable) font - HDC hDC = GetDC(hWnd); - try - { - // see Chapter 4 for the definition of MakeFont - hTTFont = font::MakeFont(hDC, "Impact", 72); - if (!hTTFont) throw; - } - catch (...) - { - ReleaseDC(hWnd, hDC); - } - ReleaseDC(hWnd, hDC); - break; - } - case WM_HSCROLL: - { - if (reinterpret_cast(lParam) == hTrackBar) - { - // - // adjust the scaling factor according to - // the position of the trackbar's slider - // - scale = static_cast( - (SNDMSG(hTrackBar, TBM_GETPOS, 0, 0) + 1) / 50.0 - ); - InvalidateRect(hWnd, NULL, true); - } - break; - } - case WM_ERASEBKGND: - { - LRESULT res = DefWindowProc(hWnd, msg, wParam, lParam); - - HDC hDC = reinterpret_cast(wParam); - HFONT hOldFont = static_cast( - SelectObject(hDC, hTTFont) - ); - try - { - SetBkMode(hDC, TRANSPARENT); - - // open a path bracket - if (!BeginPath(hDC)) throw; - - // record the text to the path - TextOut(hDC, 10, 10, pText, lstrlen(pText)); - - // close the path bracket and - // select the path into hDC - EndPath(hDC); - - // determine the number of endpoints in the path - const int num_points = GetPath(hDC, NULL, NULL, 0); - if (num_points > 0) - { - // make room for the POINTs and vertex types - POINT* pPEnds = new POINT[num_points]; - unsigned char* pTypes = new unsigned char[num_points]; - try - { - // get the path's description - int num_got = GetPath(hDC, pPEnds, pTypes, num_points); - if (num_got > 0) - { - // start a new path bracket - if (!BeginPath(hDC)) throw; - - // scale each point in the description - int iPoint; - for (iPoint = 0; iPoint < num_got; ++iPoint) - { - pPEnds[iPoint].x = static_cast( - scale * pPEnds[iPoint].x + 0.5 - ); - pPEnds[iPoint].y = static_cast( - scale * pPEnds[iPoint].y + 0.5 - ); - } - - for (iPoint = 0; iPoint < num_points; ++iPoint) - { - // handle the MoveToEx case - if (pTypes[iPoint] == PT_MOVETO) - { - MoveToEx( - hDC, pPEnds[iPoint].x, pPEnds[iPoint].y, NULL - ); - } - // handle the LineTo case - else if ( - pTypes[iPoint] == PT_LINETO || - pTypes[iPoint] == (PT_LINETO | PT_CLOSEFIGURE) - ) - { - LineTo(hDC, pPEnds[iPoint].x, pPEnds[iPoint].y); - } - // handle the PolyBezierTo case - else if ( - pTypes[iPoint] == PT_BEZIERTO || - pTypes[iPoint] == (PT_BEZIERTO | PT_CLOSEFIGURE) - ) - { - PolyBezierTo(hDC, pPEnds + iPoint, 3); - iPoint += 2; - } - } - - // close the new path bracket - EndPath(hDC); - - // stroke and fill the new path - StrokeAndFillPath(hDC); - } - } - catch (...) - { - // clean up - delete [] pTypes; - delete [] pPEnds; - throw; - } - // clean up - delete [] pTypes; - delete [] pPEnds; - } - // ... - } - catch (...) - { - SelectObject(hDC, hOldFont); - } - SelectObject(hDC, hOldFont); - return res; - } - case WM_SIZE: - { - MoveWindow( - hTrackBar, - 0, HIWORD(lParam) - 40, LOWORD(lParam), 40, - false - ); - break; - } - case WM_DESTROY: - { - // clean up - DeleteObject(hTTFont); - PostQuitMessage(0); - break; - } - } - return DefWindowProc(hWnd, msg, wParam, lParam); -} -//------------------------------------------------------------------------- - - - - diff --git a/rostests/tests/txtscale/txtscale.rbuild b/rostests/tests/txtscale/txtscale.rbuild deleted file mode 100644 index 7b7fd829232..00000000000 --- a/rostests/tests/txtscale/txtscale.rbuild +++ /dev/null @@ -1,9 +0,0 @@ - - - kernel32 - user32 - gdi32 - comctl32 - txtscale.cpp - mk_font.cpp - diff --git a/rostests/tests/vmtest/vmtest.c b/rostests/tests/vmtest/vmtest.c deleted file mode 100644 index 95a8aa01399..00000000000 --- a/rostests/tests/vmtest/vmtest.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include - -int main() -{ - PVOID Base; - PVOID Ret; - - Base = VirtualAlloc(NULL, - 1048576, - MEM_RESERVE, - PAGE_READWRITE); - if (Base == NULL) - { - printf("VirtualAlloc failed 1\n"); - } - - Ret = VirtualAlloc(Base + 4096, - 4096, - MEM_COMMIT, - PAGE_READWRITE); - if (Ret == NULL) - { - printf("VirtualAlloc failed 2\n"); - } - - Ret = VirtualAlloc(Base + 12288, - 4096, - MEM_COMMIT, - PAGE_READWRITE); - if (Ret == NULL) - { - printf("VirtualAlloc failed 3\n"); - } - - Ret = VirtualAlloc(Base + 20480, - 4096, - MEM_COMMIT, - PAGE_READWRITE); - if (Ret == NULL) - { - printf("VirtualAlloc failed 4\n"); - } - - Ret = VirtualAlloc(Base + 4096, - 28672, - MEM_RESERVE, - PAGE_READWRITE); - if (Ret == NULL) - { - printf("VirtualAlloc failed 5\n"); - } - return 0; -} - diff --git a/rostests/tests/vmtest/vmtest.rbuild b/rostests/tests/vmtest/vmtest.rbuild deleted file mode 100644 index 7993de4ab71..00000000000 --- a/rostests/tests/vmtest/vmtest.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - vmtest.c - diff --git a/rostests/tests/wclickat/wclickat.c b/rostests/tests/wclickat/wclickat.c deleted file mode 100644 index 22e2f97735b..00000000000 --- a/rostests/tests/wclickat/wclickat.c +++ /dev/null @@ -1,686 +0,0 @@ -/*---------------------------------------------------------------------------- -** wclickat.c -** Utilty to send clicks to Wine Windows -** -** See usage() for usage instructions. -** -**--------------------------------------------------------------------------- -** Copyright 2004 Jozef Stefanka for CodeWeavers, Inc. -** Copyright 2005 Dmitry Timoshkov for CodeWeavers, Inc. -** Copyright 2005 Francois Gouget for CodeWeavers, Inc. -** -** 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 -** -**--------------------------------------------------------------------------*/ - - -#include -#include -#include -#include - - -#define APP_NAME "wclickat" -#define DEFAULT_DELAY 500 -#define DEFAULT_REPEAT 1000 - -#define ARRAY_LENGTH(array) (sizeof(array)/sizeof((array)[0])) - -static const WCHAR STATIC_CLASS[]={'s','t','a','t','i','c','\0'}; - -/*---------------------------------------------------------------------------- -** Global variables -**--------------------------------------------------------------------------*/ - -#define RC_RUNNING -1 -#define RC_SUCCESS 0 -#define RC_INVALID_ARGUMENTS 1 -#define RC_NODISPLAY 2 -#define RC_TIMEOUT 3 -static int status; - -typedef enum -{ - ACTION_INVALID, - ACTION_FIND, - ACTION_LCLICK, - ACTION_MCLICK, - ACTION_RCLICK -} action_type; -static action_type g_action = ACTION_INVALID; - -static WCHAR* g_window_class = NULL; -static WCHAR* g_window_title = NULL; -static long g_control_id = 0; -static WCHAR* g_control_class = NULL; -static WCHAR* g_control_caption = NULL; -static long g_x = -1; -static long g_y = -1; -static long g_dragto_x = -1; -static long g_dragto_y = -1; -static long g_disabled = 0; - -static long g_delay = DEFAULT_DELAY; -static long g_timeout = 0; -static long g_repeat = 0; -static long g_untildeath = 0; -static UINT timer_id; - - -/* - * Provide some basic debugging support. - */ -#ifdef __GNUC__ -#define __PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args))) -#else -#define __PRINTF_ATTR(fmt,args) -#endif -static int debug_on=0; -static int init_debug() -{ - char* str=getenv("CXTEST_DEBUG"); - if (str && strstr(str, "+wclickat")) - debug_on=1; - return debug_on; -} - -static void cxlog(const char* format, ...) __PRINTF_ATTR(1,2); -static void cxlog(const char* format, ...) -{ - va_list valist; - - if (debug_on) - { - va_start(valist, format); - vfprintf(stderr, format, valist); - va_end(valist); - } -} - -/*---------------------------------------------------------------------------- -** usage -**--------------------------------------------------------------------------*/ -static void usage(void) -{ - fprintf(stderr, "%s - Utility to send clicks to Wine Windows.\n", APP_NAME); - fprintf(stderr, "----------------------------------------------\n"); - fprintf(stderr, "Usage:\n"); - fprintf(stderr, " %s action --winclass class --wintitle title [--timeout ms]\n",APP_NAME); - fprintf(stderr, " %*.*s [--ctrlclas class] [--ctrlcaption caption] [--ctrlid id]\n", strlen(APP_NAME) + 3, strlen(APP_NAME) + 3, ""); - fprintf(stderr, " %*.*s [--position XxY] [--delay ms] [--untildeath] [--repeat ms]\n", strlen(APP_NAME) + 3, strlen(APP_NAME) + 3, ""); - fprintf(stderr, "Where action can be one of:\n"); - fprintf(stderr, " find Find the specified window or control\n"); - fprintf(stderr, " button Send a click with the given X button number\n"); - fprintf(stderr, " click|lclick Synonym for button1 (left click)\n"); - fprintf(stderr, " mclick Synonym for button2 (middle click)\n"); - fprintf(stderr, " rclick Synonym for button3 (right click)\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "The options are as follows:\n"); - fprintf(stderr, " --timeout ms How long to wait before failing with a code of %d\n", RC_TIMEOUT); - fprintf(stderr, " --winclass class Class name of the top-level window of interest\n"); - fprintf(stderr, " --wintitle title Title of the top-level window of interest\n"); - fprintf(stderr, " --ctrlclass name Class name of the control of interest, if any\n"); - fprintf(stderr, " --ctrlcaption cap A substring of the control's caption\n"); - fprintf(stderr, " --ctrlid id Id of the control\n"); - fprintf(stderr, " --position XxY Coordinates for the click, relative to the window / control\n"); - fprintf(stderr, " --dragto If given, then position specifies start click, and\n"); - fprintf(stderr, " dragto specifies release coords.\n"); - fprintf(stderr, " --allow-disabled Match the window or control even hidden or disabled\n"); - fprintf(stderr, " --delay ms Wait ms milliseconds before clicking. The default is %d\n", DEFAULT_DELAY); - fprintf(stderr, " --untildeath Wait until the window disappears\n"); - fprintf(stderr, " --repeat ms Click every ms milliseconds. The default is %d\n", DEFAULT_REPEAT); - fprintf(stderr, "\n"); - fprintf(stderr, "%s returns %d on success\n", APP_NAME, RC_SUCCESS); - fprintf(stderr, "\n"); - fprintf(stderr, "Environment variable overrides:\n"); - fprintf(stderr, " CXTEST_TIME_MULTIPLE Specifies a floating multiplier applied to any\n"); - fprintf(stderr, " delay and timeout parameters.\n"); -} - -static const WCHAR* my_strstriW(const WCHAR* haystack, const WCHAR* needle) -{ - const WCHAR *h,*n; - WCHAR first; - - if (!*needle) - return haystack; - - /* Special case the first character because - * we will be doing a lot of comparisons with it. - */ - first=towlower(*needle); - needle++; - while (*haystack) - { - while (towlower(*haystack)!=first && *haystack) - haystack++; - - h=haystack+1; - n=needle; - while (towlower(*h)==towlower(*n) && *h) - { - h++; - n++; - } - if (!*n) - return haystack; - haystack++; - } - return NULL; -} - -static BOOL CALLBACK find_control(HWND hwnd, LPARAM lParam) -{ - WCHAR str[1024]; - HWND* pcontrol; - - if (!GetClassNameW(hwnd, str, ARRAY_LENGTH(str)) || - lstrcmpiW(str, g_control_class)) - return TRUE; - - if (g_control_caption) - { - if (!GetWindowTextW(hwnd, str, ARRAY_LENGTH(str)) || - !my_strstriW(str, g_control_caption)) - return TRUE; - } - if (g_control_id && g_control_id != GetWindowLong(hwnd, GWL_ID)) - return TRUE; - - /* Check that the control is visible and active */ - if (!g_disabled) - { - DWORD style = GetWindowStyle(hwnd); - if (!(style & WS_VISIBLE) || (style & WS_DISABLED)) - return TRUE; - } - - pcontrol = (HWND*)lParam; - *pcontrol = hwnd; - return FALSE; -} - -static BOOL CALLBACK find_top_window(HWND hwnd, LPARAM lParam) -{ - WCHAR str[1024]; - HWND* pwindow; - - if (!GetClassNameW(hwnd, str, ARRAY_LENGTH(str)) || - lstrcmpiW(str, g_window_class)) - return TRUE; - - if (!GetWindowTextW(hwnd, str, ARRAY_LENGTH(str)) || - lstrcmpiW(str, g_window_title)) - return TRUE; - - /* Check that the window is visible and active */ - if (!g_disabled) - { - DWORD style = GetWindowStyle(hwnd); - if (!(style & WS_VISIBLE) || (style & WS_DISABLED)) - return TRUE; - } - - /* See if we find the control we want */ - if (g_control_class) - { - HWND control = NULL; - EnumChildWindows(hwnd, find_control, (LPARAM)&control); - if (!control) - return TRUE; - hwnd=control; - } - - pwindow = (HWND*)lParam; - *pwindow = hwnd; - return FALSE; -} - -static HWND find_window() -{ - HWND hwnd; - - hwnd=NULL; - EnumWindows(find_top_window, (LPARAM)&hwnd); - return hwnd; -} - -static void do_click(HWND window, DWORD down, DWORD up) -{ - WINDOWINFO window_info; - long x, y; - - SetForegroundWindow(GetParent(window)); - window_info.cbSize=sizeof(window_info); - GetWindowInfo(window, &window_info); - - /* The calculations below convert the coordinates so they are absolute - * screen coordinates in 'Mickeys' as required by mouse_event. - * In mickeys the screen size is always 65535x65535. - */ - x=window_info.rcWindow.left+g_x; - if (x=window_info.rcWindow.right) - x=(window_info.rcWindow.right+window_info.rcWindow.left)/2; - x=(x << 16)/GetSystemMetrics(SM_CXSCREEN); - - y=window_info.rcWindow.top+g_y; - if (y=window_info.rcWindow.bottom) - y=(window_info.rcWindow.bottom+window_info.rcWindow.top)/2; - y=(y << 16)/GetSystemMetrics(SM_CYSCREEN); - - mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x, y, 0, 0); - if (down) { - mouse_event(MOUSEEVENTF_ABSOLUTE | down, x, y, 0, 0); - if ((g_dragto_x > 0) && (g_dragto_y > 0)) { - int i; - long dx, dy; - long step_per_x, step_per_y; - long dragto_x, dragto_y; - - dragto_x=window_info.rcWindow.left+g_dragto_x; - if (dragto_x=window_info.rcWindow.right) - dragto_x=(window_info.rcWindow.right+window_info.rcWindow.left)/2; - dragto_x=(dragto_x << 16)/GetSystemMetrics(SM_CXSCREEN); - - dragto_y=window_info.rcWindow.top+g_dragto_y; - if (dragto_y=window_info.rcWindow.bottom) - dragto_y=(window_info.rcWindow.bottom+window_info.rcWindow.top)/2; - dragto_y=(dragto_y << 16)/GetSystemMetrics(SM_CYSCREEN); - - dx = g_dragto_x - g_x; - dy = g_dragto_y - g_y; - step_per_x = dx / 4; - step_per_y = dy / 4; - for (i = 0; i < 4; i++) { - mouse_event(MOUSEEVENTF_MOVE, step_per_x, step_per_y, 0, 0); - } - x=dragto_x; - y=dragto_y; - } - } - if (up) - mouse_event(MOUSEEVENTF_ABSOLUTE | up, x, y, 0, 0); -} - -static void CALLBACK ClickProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) -{ - HWND window = find_window(); - - if (!window) - { - if (g_untildeath) - { - /* FIXME: The window / control might just be disabled and if - * that's the case we should not exit yet. But I don't expect - * --untildeath to be used at all anyway so fixing this can - * wait until it becomes necessary. - */ - status=RC_SUCCESS; - } - else - cxlog("The window has disappeared!\n"); - return; - } - - switch (g_action) - { - case ACTION_FIND: - /* Nothing to do */ - break; - case ACTION_LCLICK: - cxlog("Sending left click\n"); - do_click(window, MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP); - break; - case ACTION_MCLICK: - cxlog("Sending middle click\n"); - do_click(window, MOUSEEVENTF_MIDDLEDOWN, MOUSEEVENTF_MIDDLEUP); - break; - case ACTION_RCLICK: - cxlog("Sending right click\n"); - do_click(window, MOUSEEVENTF_RIGHTDOWN, MOUSEEVENTF_RIGHTUP); - default: - fprintf(stderr, "error: unknown action %d\n", g_action); - break; - } - if (!g_repeat) - status=RC_SUCCESS; -} - -static void CALLBACK DelayProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) -{ - KillTimer(NULL, timer_id); - timer_id=0; - if (g_repeat) - { - cxlog("Setting up a timer for --repeat\n"); - timer_id=SetTimer(NULL, 0, g_repeat, ClickProc); - } - - ClickProc(NULL, 0, 0, 0); -} - -static void CALLBACK FindWindowProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) -{ - HWND window = find_window(); - if (!window) - return; - - cxlog("Found the window\n"); - if (g_delay) - { - cxlog("Waiting for a bit\n"); - KillTimer(NULL, timer_id); - timer_id=SetTimer(NULL, 0, g_delay, DelayProc); - do_click(window, 0,0); - } - else - { - DelayProc(NULL, 0, 0, 0); - } -} - -static void CALLBACK TimeoutProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) -{ - status = RC_TIMEOUT; -} - -/*---------------------------------------------------------------------------- -** parse_arguments -**--------------------------------------------------------------------------*/ -static int arg_get_long(const char** *argv, const char* name, long* value) -{ - if (!**argv) - { - fprintf(stderr, "error: missing argument for '%s'\n", name); - return 1; - } - - *value=atol(**argv); - if (*value < 0) - { - fprintf(stderr, "error: invalid argument '%s' for '%s'\n", - **argv, name); - (*argv)++; - return 1; - } - (*argv)++; - return 0; -} - -static int arg_get_utf8(const char** *argv, const char* name, WCHAR* *value) -{ - int len; - - if (!**argv) - { - fprintf(stderr, "error: missing argument for '%s'\n", name); - return 1; - } - - len = MultiByteToWideChar(CP_UTF8, 0, **argv, -1, NULL, 0); - *value = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); - if (!*value) - { - fprintf(stderr, "error: memory allocation error\n"); - (*argv)++; - return 1; - } - MultiByteToWideChar(CP_UTF8, 0, **argv, -1, *value, len); - (*argv)++; - return 0; -} - -static int parse_arguments(int argc, const char** argv) -{ - int rc; - const char* arg; - char* p; - - rc=0; - argv++; - while (*argv) - { - arg=*argv++; - if (*arg!='-') - { - if (g_action != ACTION_INVALID) - { - fprintf(stderr, "error: '%s' an action has already been specified\n", arg); - rc=1; - } - else if (strcmp(arg, "click") == 0 || strcmp(arg, "lclick") == 0) - { - g_action = ACTION_LCLICK; - } - else if (strcmp(arg, "mclick") == 0) - { - g_action = ACTION_MCLICK; - } - else if (strcmp(arg, "rclick") == 0) - { - g_action = ACTION_RCLICK; - } - else if (strncmp(arg, "button", 6) == 0) - { - int button; - char extra='\0'; - int r=sscanf(arg, "button%d%c", &button, &extra); - /* We should always get r==1 but due to a bug in Wine's - * msvcrt.dll implementation (at least up to 20050127) - * we may also get r==2 and extra=='\0'. - */ - if (r!=1 && (r!=2 || extra!='\0')) - { - fprintf(stderr, "error: invalid argument '%s' for '%s'\n", - *argv, arg); - rc=1; - } - else if (button<1 || button>3) - { - fprintf(stderr, "error: unknown button '%s'\n", arg); - rc=1; - } - else - { - /* Just to remain compatible with the enum */ - g_action=button+ACTION_LCLICK-1; - } - } - else if (strcmp(arg, "find") == 0) - { - g_action = ACTION_FIND; - } - else - { - fprintf(stderr, "error: unknown action '%s'\n", arg); - rc=1; - } - } - else if (strcmp(arg, "--winclass") == 0) - { - rc|=arg_get_utf8(&argv, arg, &g_window_class); - } - else if (strcmp(arg, "--wintitle") == 0) - { - rc|=arg_get_utf8(&argv,arg, &g_window_title); - } - else if (strcmp(arg, "--ctrlclass") == 0) - { - rc|=arg_get_utf8(&argv, arg, &g_control_class); - } - else if (strcmp(arg, "--ctrlid") == 0) - { - rc|=arg_get_long(&argv, arg, &g_control_id); - } - else if (strcmp(arg, "--ctrlcaption") == 0) - { - rc|=arg_get_utf8(&argv, arg, &g_control_caption); - } - else if (strcmp(arg, "--position") == 0) - { - if (!*argv) - { - fprintf(stderr, "error: missing argument for '%s'\n", arg); - rc=1; - } - else - { - char extra='\0'; - int r=sscanf(*argv, "%ldx%ld%c", &g_x, &g_y, &extra); - /* We should always get r==2 but due to a bug in Wine's - * msvcrt.dll implementation (at least up to 20050127) - * we may also get r==3 and extra=='\0'. - */ - if (r!=2 && (r!=3 || extra!='\0')) - { - fprintf(stderr, "error: invalid argument '%s' for '%s'\n", - *argv, arg); - rc=1; - } - argv++; - } - } - else if (strcmp(arg, "--dragto") == 0) - { - if (!*argv) - { - fprintf(stderr, "error: missing argument for '%s'\n", arg); - rc=1; - } - else - { - char extra='\0'; - int r=sscanf(*argv, "%ldx%ld%c", &g_dragto_x, &g_dragto_y, &extra); - /* We should always get r==2 but due to a bug in Wine's - * * msvcrt.dll implementation (at least up to 20050127) - * * we may also get r==3 and extra=='\0'. - * */ - if (r!=2 && (r!=3 || extra!='\0')) - { - fprintf(stderr, "error: invalid argument '%s' for '%s'\n", - *argv, arg); - rc=1; - } - argv++; - } - } - else if (strcmp(arg, "--allow-disabled") == 0) - { - g_disabled = 1; - } - else if (strcmp(arg, "--delay") == 0) - { - rc|=arg_get_long(&argv, arg, &g_delay); - } - else if (strcmp(arg, "--timeout") == 0) - { - rc|=arg_get_long(&argv, arg, &g_timeout); - } - else if (strcmp(arg, "--repeat") == 0) - { - rc|=arg_get_long(&argv, arg, &g_repeat); - } - else if (strcmp(arg, "--untildeath") == 0) - { - g_untildeath=1; - } - else if (strcmp(arg, "--help") == 0) - { - rc=2; - } - } - - if (g_action == ACTION_INVALID) - { - fprintf(stderr, "error: you must specify an action type\n"); - rc=1; - } - else - { - /* Adjust the default delay and repeat parameters depending on - * the operating mode so less needs to be specified on the command - * line, and so we can assume them to be set right. - */ - if (g_action == ACTION_FIND) - g_delay=0; - if (!g_untildeath) - g_repeat=0; - else if (!g_repeat) - g_repeat=DEFAULT_REPEAT; - } - - if (!g_window_class) - { - fprintf(stderr, "error: you must specify a --winclass parameter\n"); - rc=1; - } - if (!g_window_title) - { - fprintf(stderr, "error: you must specify a --wintitle parameter\n"); - rc=1; - } - if (g_control_class) - { - if (!g_control_id && !g_control_caption) - { - fprintf(stderr, "error: you must specify either the control id or its caption\n"); - rc=1; - } - } - - /*------------------------------------------------------------------------ - ** Process environment variables - **----------------------------------------------------------------------*/ - p = getenv("CXTEST_TIME_MULTIPLE"); - if (p) - { - float g_multiple = atof(p); - g_delay = (long) (((float) g_delay) * g_multiple); - g_timeout = (long) (((float) g_timeout) * g_multiple); - } - - return rc; -} - -int main(int argc, const char** argv) -{ - MSG msg; - - init_debug(); - - status = parse_arguments(argc, argv); - if (status) - { - if (status == 2) - usage(); - else - fprintf(stderr, "Issue %s --help for usage.\n", *argv); - return RC_INVALID_ARGUMENTS; - } - cxlog("Entering message loop. action=%d\n", g_action); - - if (g_timeout>0) - SetTimer(NULL, 0, g_timeout, TimeoutProc); - timer_id=SetTimer(NULL, 0, 100, FindWindowProc); - - status=RC_RUNNING; - while (status==RC_RUNNING && GetMessage(&msg, NULL, 0, 0)!=0) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return status; -} diff --git a/rostests/tests/wclickat/wclickat.rbuild b/rostests/tests/wclickat/wclickat.rbuild deleted file mode 100644 index 0aeb7fe20cf..00000000000 --- a/rostests/tests/wclickat/wclickat.rbuild +++ /dev/null @@ -1,8 +0,0 @@ - - - kernel32 - user32 - gdi32 - wclickat.c - - diff --git a/rostests/tests/wcstombs-tests/wcstombs-tests.c b/rostests/tests/wcstombs-tests/wcstombs-tests.c deleted file mode 100644 index 4e24143b38a..00000000000 --- a/rostests/tests/wcstombs-tests/wcstombs-tests.c +++ /dev/null @@ -1,336 +0,0 @@ -/* - * PROJECT: ReactOS wcstombs Test Suite - * LICENSE: GPL v2 or any later version - * FILE: tests/wcstombs-tests/wcstombs-tests.c - * PURPOSE: Application for testing the CRT API's (wcstombs and wctomb) and the Win32 API WideCharToMultiByte for the Unicode to MultiByte string conversion - * COPYRIGHT: Copyright 2008 Colin Finck - */ - -#include -#include -#include -#include -#include - -/* Macros for simplification */ -#define SETLOCALE(locale) \ - loc = setlocale(LC_ALL, locale); \ - if(!loc) \ - { \ - puts("setlocale failed for " locale ", this locale is probably not installed on your system"); \ - return; \ - } - -#define OK(condition, fail_message, ...) \ - if(!(condition)) \ - printf("%d: " fail_message "\n", __LINE__, ##__VA_ARGS__); - -/* Global variables for easier handling */ -char mbc; -char mbs[5]; -int ret; -wchar_t wc1 = 228; /* Western Windows-1252 character */ -wchar_t wc2 = 1088; /* Russian Windows-1251 character not displayable for Windows-1252 */ -wchar_t wcs[5] = {'T', 'h', 1088, 'i', 0}; /* String with ASCII characters and a Russian character */ -wchar_t dbwcs[3] = {28953, 25152, 0}; /* String with Chinese (codepage 950) characters */ - - -void CRT_Tests() -{ - char* loc; - - puts("CRT-Tests"); - puts("---------"); - - /* Current locale is "C", wcstombs should return the length of the input buffer without the terminating null character */ - ret = wcstombs(NULL, dbwcs, 0); - OK(ret == 2, "ret is %d", ret); - - ret = wcstombs(mbs, dbwcs, ret); - OK(ret == -1, "ret is %d", ret); - OK(mbs[0] == 0, "mbs[0] is %d", mbs[0]); - OK(errno == EILSEQ, "errno is %d", errno); - - ret = wcstombs(NULL, wcs, 0); - OK(ret == 4, "ret is %d", ret); - - ret = wcstombs(mbs, wcs, ret); - OK(ret == -1, "ret is %d", ret); - OK(!strcmp(mbs, "Th"), "mbs is %s", mbs); - OK(errno == EILSEQ, "errno is %d", errno); - - ret = wctomb(&mbc, wcs[0]); - OK(ret == 1, "ret is %d", ret); - OK(mbc == 84, "mbc is %d", mbc); - - mbc = 84; - ret = wcstombs(&mbc, &dbwcs[0], 1); - OK(ret == -1, "ret is %d", ret); - OK(mbc == 84, "mbc is %d", mbc); - - ret = wcstombs(mbs, wcs, 0); - OK(ret == 0, "ret is %d", ret); - - /* The length for the null character (in any locale) is 0, but if you pass a variable, it will be set to 0 and wctomb returns 1 */ - ret = wctomb(NULL, 0); - OK(ret == 0, "ret is %d", ret); - - ret = wctomb(&mbc, 0); - OK(ret == 1, "ret is %d", ret); - OK(mbc == 0, "mbc is %d", mbc); - - /* msvcr80.dll changes mbc in the following call back to 0, msvcrt.dll from WinXP SP2 leaves it untouched */ - mbc = 84; - ret = wctomb(&mbc, dbwcs[0]); - OK(ret == -1, "ret is %d", ret); - OK(errno == EILSEQ, "errno is %d", errno); - OK(mbc == 84, "mbc is %d", mbc); - - /* With a real locale, -1 also becomes a possible return value in case of an invalid character */ - SETLOCALE("German"); - ret = wcstombs(NULL, dbwcs, 0); - OK(ret == -1, "ret is %d", ret); - OK(errno == EILSEQ, "errno is %d", errno); - - ret = wcstombs(NULL, wcs, 2); - OK(ret == -1, "ret is %d", ret); - OK(errno == EILSEQ, "errno is %d", errno); - - /* Test if explicitly setting the locale back to "C" also leads to the same results as above */ - SETLOCALE("C"); - - ret = wcstombs(NULL, dbwcs, 0); - OK(ret == 2, "ret is %d", ret); - - ret = wcstombs(NULL, wcs, 0); - OK(ret == 4, "ret is %d", ret); - - /* Test wctomb() as well */ - SETLOCALE("English"); - - ret = wctomb(&mbc, wc1); - OK(ret == 1, "ret is %d", ret); - OK(mbc == -28, "mbc is %d", mbc); - - ret = wctomb(&mbc, wc2); - OK(ret == -1, "ret is %d", ret); - OK(errno == EILSEQ, "errno is %d", errno); - OK(mbc == 63, "mbc is %d", mbc); - - SETLOCALE("Russian"); - - ret = wcstombs(mbs, wcs, sizeof(mbs)); - OK(ret == 4, "ret is %d", ret); - OK(!strcmp(mbs, "Thði"), "mbs is %s", mbs); - - ret = wctomb(&mbc, wc2); - OK(ret == 1, "ret is %d", ret); - OK(mbc == -16, "mbc is %d", mbc); - - ret = wctomb(&mbc, wc1); - OK(ret == 1, "ret is %d", ret); - OK(mbc == 97, "mbc is %d", mbc); - - SETLOCALE("English"); - - ret = wcstombs(&mbc, wcs, 1); - OK(ret == 1, "ret is %d", ret); - OK(mbc == 84, "mbc is %d", mbc); - - ZeroMemory(mbs, sizeof(mbs)); - ret = wcstombs(mbs, wcs, sizeof(mbs)); - OK(ret == -1, "ret is %d", ret); - OK(errno == EILSEQ, "errno is %d", errno); - OK(!strcmp(mbs, "Th?i"), "mbs is %s", mbs); - mbs[0] = 0; - - /* wcstombs mustn't add any null character automatically. - So in this case, we should get the same string again, even if we only copied the first three bytes. */ - ret = wcstombs(mbs, wcs, 3); - OK(ret == -1, "ret is %d", ret); - OK(errno == EILSEQ, "errno is %d", errno); - OK(!strcmp(mbs, "Th?i"), "mbs is %s", mbs); - ZeroMemory(mbs, 5); - - /* Now this shouldn't be the case like above as we zeroed the complete string buffer. */ - ret = wcstombs(mbs, wcs, 3); - OK(ret == -1, "ret is %d", ret); - OK(errno == EILSEQ, "errno is %d", errno); - OK(!strcmp(mbs, "Th?"), "mbs is %s", mbs); - - /* Double-byte tests */ - SETLOCALE("Chinese"); - ret = wcstombs(mbs, dbwcs, sizeof(mbs)); - OK(ret == 4, "ret is %d", ret); - OK(!strcmp(mbs, "µH©Ò"), "mbs is %s", mbs); - ZeroMemory(mbs, 5); - - /* Length-only tests */ - SETLOCALE("English"); - ret = wcstombs(NULL, wcs, 0); - OK(ret == -1, "ret is %d", ret); - OK(errno == EILSEQ, "errno is %d", errno); - - SETLOCALE("Chinese"); - ret = wcstombs(NULL, dbwcs, 0); - OK(ret == 4, "ret is %d", ret); - - /* This call causes an ERROR_INSUFFICIENT_BUFFER in the called WideCharToMultiByte function. - For some reason, wcstombs under Windows doesn't reset the last error to the previous value here, so we can check for ERROR_INSUFFICIENT_BUFFER with GetLastError(). - This could also be seen as an indication that Windows uses WideCharToMultiByte internally for wcstombs. */ - ret = wcstombs(mbs, dbwcs, 1); - OK(ret == 0, "ret is %d", ret); - OK(mbs[0] == 0, "mbs[0] is %d", mbs[0]); - - /* ERROR_INSUFFICIENT_BUFFER is also the result of this call with SBCS characters. WTF?! - Anyway this is a Win32 error not related to the CRT, so we leave out this criteria. */ - ret = wcstombs(mbs, wcs, 1); - OK(ret == 1, "ret is %d", ret); - OK(mbs[0] == 84, "mbs[0] is %d", mbs[0]); - - putchar('\n'); -} - -void Win32_Tests(LPBOOL bUsedDefaultChar) -{ - /*int i;*/ - - SetLastError(0xdeadbeef); - - puts("Win32-Tests"); - puts("-----------"); - - ret = WideCharToMultiByte(1252, 0, &wc1, 1, &mbc, 1, NULL, bUsedDefaultChar); - OK(ret == 1, "ret is %d", ret); - OK(mbc == -28, "mbc is %d", mbc); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - ret = WideCharToMultiByte(1252, 0, &wc2, 1, &mbc, 1, NULL, bUsedDefaultChar); - OK(ret == 1, "ret is %d", ret); - OK(mbc == 63, "mbc is %d", mbc); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == TRUE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - ret = WideCharToMultiByte(1251, 0, &wc2, 1, &mbc, 1, NULL, bUsedDefaultChar); - OK(ret == 1, "ret is %d", ret); - OK(mbc == -16, "mbc is %d", mbc); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - ret = WideCharToMultiByte(1251, 0, &wc1, 1, &mbc, 1, NULL, bUsedDefaultChar); - OK(ret == 1, "ret is %d", ret); - OK(mbc == 97, "mbc is %d", mbc); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - /* This call triggers the last Win32 error */ - ret = WideCharToMultiByte(1252, 0, wcs, -1, &mbc, 1, NULL, bUsedDefaultChar); - OK(ret == 0, "ret is %d", ret); - OK(mbc == 84, "mbc is %d", mbc); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetLastError() is %lu", GetLastError()); - SetLastError(0xdeadbeef); - - ret = WideCharToMultiByte(1252, 0, wcs, -1, mbs, sizeof(mbs), NULL, bUsedDefaultChar); - OK(ret == 5, "ret is %d", ret); - OK(!strcmp(mbs, "Th?i"), "mbs is %s", mbs); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == TRUE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - mbs[0] = 0; - - /* WideCharToMultiByte mustn't add any null character automatically. - So in this case, we should get the same string again, even if we only copied the first three bytes. */ - ret = WideCharToMultiByte(1252, 0, wcs, 3, mbs, sizeof(mbs), NULL, bUsedDefaultChar); - OK(ret == 3, "ret is %d", ret); - OK(!strcmp(mbs, "Th?i"), "mbs is %s", mbs); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == TRUE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - ZeroMemory(mbs, 5); - - /* Now this shouldn't be the case like above as we zeroed the complete string buffer. */ - ret = WideCharToMultiByte(1252, 0, wcs, 3, mbs, sizeof(mbs), NULL, bUsedDefaultChar); - OK(ret == 3, "ret is %d", ret); - OK(!strcmp(mbs, "Th?"), "mbs is %s", mbs); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == TRUE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - /* Double-byte tests */ - ret = WideCharToMultiByte(950, 0, dbwcs, -1, mbs, sizeof(mbs), NULL, bUsedDefaultChar); - OK(ret == 5, "ret is %d", ret); - OK(!strcmp(mbs, "µH©Ò"), "mbs is %s", mbs); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - ret = WideCharToMultiByte(950, 0, dbwcs, 1, &mbc, 1, NULL, bUsedDefaultChar); - OK(ret == 0, "ret is %d", ret); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar == FALSE"); - OK(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetLastError() is %lu", GetLastError()); - SetLastError(0xdeadbeef); - ZeroMemory(mbs, 5); - - ret = WideCharToMultiByte(950, 0, dbwcs, 1, mbs, sizeof(mbs), NULL, bUsedDefaultChar); - OK(ret == 2, "ret is %d", ret); - OK(!strcmp(mbs, "µH"), "mbs is %s", mbs); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - /* Length-only tests */ - ret = WideCharToMultiByte(1252, 0, &wc2, 1, NULL, 0, NULL, bUsedDefaultChar); - OK(ret == 1, "ret is %d", ret); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == TRUE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - ret = WideCharToMultiByte(1252, 0, wcs, -1, NULL, 0, NULL, bUsedDefaultChar); - OK(ret == 5, "ret is %d", ret); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == TRUE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - ret = WideCharToMultiByte(950, 0, dbwcs, 1, NULL, 0, NULL, bUsedDefaultChar); - OK(ret == 2, "ret is %d", ret); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - ret = WideCharToMultiByte(950, 0, dbwcs, -1, NULL, 0, NULL, bUsedDefaultChar); - OK(ret == 5, "ret is %d", ret); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == 0xdeadbeef, "GetLastError() is %lu", GetLastError()); - - /* Abnormal uses of WideCharToMultiByte */ - ret = WideCharToMultiByte(1252, 0, NULL, 5, mbs, sizeof(mbs), NULL, bUsedDefaultChar); - OK(ret == 0, "ret is %d", ret); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == FALSE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - OK(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError() is %lu", GetLastError()); - SetLastError(0xdeadbeef); - - ret = WideCharToMultiByte(0, 0, dbwcs, 5, mbs, sizeof(mbs), NULL, bUsedDefaultChar); - OK(ret == 5, "ret is %d", ret); - OK(!strcmp(mbs, "??"), "mbs is %s", mbs); - if(bUsedDefaultChar) OK(*bUsedDefaultChar == TRUE, "bUsedDefaultChar is %d", *bUsedDefaultChar); - - ret = WideCharToMultiByte(1252, 0, wcs, -1, (LPSTR)wcs, 5, NULL, bUsedDefaultChar); - OK(ret == 0, "ret is %d", ret); - OK(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError() is %lu", GetLastError()); - SetLastError(0xdeadbeef); - - ret = WideCharToMultiByte(1252, 0, wcs, -1, mbs, -1, NULL, bUsedDefaultChar); - OK(ret == 0, "ret is %d", ret); - OK(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError() is %lu", GetLastError()); - SetLastError(0xdeadbeef); - - putchar('\n'); -} - -int main() -{ - BOOL UsedDefaultChar; - - CRT_Tests(); - - /* There are two code pathes in WideCharToMultiByte, one when Flags || DefaultChar || UsedDefaultChar is set and one when it's not. - Test both here. */ - Win32_Tests(NULL); - Win32_Tests(&UsedDefaultChar); - - return 0; -} diff --git a/rostests/tests/wcstombs-tests/wcstombs-tests.rbuild b/rostests/tests/wcstombs-tests/wcstombs-tests.rbuild deleted file mode 100644 index e7b407e1d30..00000000000 --- a/rostests/tests/wcstombs-tests/wcstombs-tests.rbuild +++ /dev/null @@ -1,4 +0,0 @@ - - kernel32 - wcstombs-tests.c - diff --git a/rostests/tests/winhello/winhello.c b/rostests/tests/winhello/winhello.c deleted file mode 100644 index 02037cfffb2..00000000000 --- a/rostests/tests/winhello/winhello.c +++ /dev/null @@ -1,707 +0,0 @@ -/* - * ReactOS Winhello - Not So Simple Win32 Windowing test - * - * 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. - */ - -/* What do we test with this app? - * - Windows and Class creation - * - A Simple Button - * - Some font rendering in the Window - * - Scrollbar support - * - Hotkeys - * - Messageboxes - * ???????? - */ - -#ifndef VK_C -#define VK_C 'C' -#endif - -#include -#include -#include - -HFONT tf; -LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); -BOOLEAN bolWM_CHAR; -BOOLEAN bolWM_KEYDOWN; - -int WINAPI -WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpszCmdLine, - int nCmdShow) -{ - WNDCLASS wc; - MSG msg; - HWND hWnd; - bolWM_CHAR = 0; - bolWM_KEYDOWN = 0; - - wc.lpszClassName = "HelloClass"; - wc.lpfnWndProc = MainWndProc; - wc.style = CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wc.lpszMenuName = NULL; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - if (RegisterClass(&wc) == 0) - { - fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - hWnd = CreateWindow("HelloClass", - "Hello World", - WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, - 0, //Position; you can use CW_USEDEFAULT, too - 0, - 600, //height - 400, - NULL, - NULL, - hInstance, - NULL); - if (hWnd == NULL) - { - fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n", - GetLastError()); - return(1); - } - - tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE, - ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons"); - - ShowWindow(hWnd, nCmdShow); - - while(GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - DeleteObject(tf); - - return msg.wParam; -} - -#define CTRLC 1 /* Define our HotKeys */ -#define ALTF1 2 /* Define our HotKeys */ - -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; /* Also used during window drawing */ - HDC hDC; /* A device context used for drawing */ - RECT rc, clr, wir; /* A rectangle used during drawing */ - char spr[100], sir[100]; - static HBRUSH hbrWhite=NULL, hbrGray=NULL, hbrBlack=NULL, hbrRed=NULL, hbrBlue=NULL, hbrYellow=NULL; - - /* The window handle for the "Click Me" button. */ - static HWND hwndButton = 0; - static int cx, cy; /* Height and width of our button. */ - - switch(msg) - { - - case WM_CHAR: - { - - hDC = GetDC(hWnd); - TCHAR text[2]; - text[0] = (TCHAR)wParam; - text[1] = _T('\0'); - - //Write in window - if( bolWM_KEYDOWN ) - { - TextOut(hDC, 400, 10, "WM CHAR:", strlen("WM CHAR:")); - bolWM_KEYDOWN = 0; - } - else - { - TextOut(hDC, 400, 10, "WM_CHAR:", strlen("WM_CHAR:")); - bolWM_KEYDOWN = 1; - } - TextOut(hDC, 530, 10, text, strlen(text)); - -#if 0 - // Make a line depending on the typed key - Rect.left = 10; - Rect.top = 75; - Rect.right = 610; - Rect.bottom = 85; - FillRect(hDC, &Rect, hbrWhite); - - Rect.left=308; - Rect.right=312; - FillRect(hDC, &Rect, hbrRed); - - Rect.left = 310; - Rect.top = 75; - Rect.right = 310 +text[0]*2; - Rect.bottom = 85; - HBRUSH hbrCustom = CreateSolidBrush ( RGB(text[0], text[0], text[0])); - FillRect(hDC, &Rect, hbrCustom); - DeleteObject ( hbrCustom ); - -#endif - - ReleaseDC(hWnd, hDC); - return 0; - } - - case WM_KEYDOWN: - { - - hDC = GetDC(hWnd); - RECT Rect; - TCHAR text[2]; - text[0] = (TCHAR)wParam; - text[1] = _T('\0'); - - - /* Write in window */ - Rect.left = 400; - Rect.top = 50; - Rect.right = 550; - Rect.bottom = 70; - FillRect(hDC, &Rect, hbrWhite); - if( bolWM_CHAR ) - { - TextOut(hDC, 400, 30, "WM KEYDOWN:", strlen("WM KEYDOWN:")); - bolWM_CHAR = 0; - } - else - { - TextOut(hDC, 400, 30, "WM_KEYDOWN:", strlen("WM_KEYDOWN:")); - bolWM_CHAR = 1; - } - TextOut(hDC, 530, 30, text, strlen(text)); - ReleaseDC(hWnd, hDC); - return 0; - } - - case WM_KEYUP: - { - - hDC = GetDC(hWnd); - RECT Rect; - TCHAR text[2]; - text[0] = (TCHAR)wParam; - text[1] = _T('\0'); - - - /* Write in window */ - Rect.left = 400; - Rect.top = 10; - Rect.right = 550; - Rect.bottom = 70; - FillRect(hDC, &Rect, hbrWhite); - TextOut(hDC, 400, 50, "WM_KEYUP:", strlen("WM_KEYUP:")); - TextOut(hDC, 530, 50, text, strlen(text)); - ReleaseDC(hWnd, hDC); - return 0; - } - - - case WM_LBUTTONDOWN: - { - ULONG x, y; - RECT Rect; - hDC = GetDC(hWnd); - x = LOWORD(lParam); - y = HIWORD(lParam); - - Rect.left = x - 5; - Rect.top = y - 5; - Rect.right = x + 5; - Rect.bottom = y + 5; - FillRect(hDC, &Rect, hbrRed); - - Rect.left = x - 3; - Rect.top = y - 3; - Rect.right = x + 3; - Rect.bottom = y + 3; - FillRect(hDC, &Rect, hbrBlack); - - ReleaseDC(hWnd, hDC); - break; - } - case WM_LBUTTONUP: - { - ULONG x, y; - RECT Rect; - hDC = GetDC(hWnd); - x = LOWORD(lParam); - y = HIWORD(lParam); - - Rect.left = x - 5; - Rect.top = y - 5; - Rect.right = x + 5; - Rect.bottom = y + 5; - FillRect(hDC, &Rect, hbrRed); - - Rect.left = x - 3; - Rect.top = y - 3; - Rect.right = x + 3; - Rect.bottom = y + 3; - FillRect(hDC, &Rect, hbrGray); - - ReleaseDC(hWnd, hDC); - break; - } - case WM_MBUTTONDOWN: - { - ULONG x, y; - RECT Rect; - hDC = GetDC(hWnd); - x = LOWORD(lParam); - y = HIWORD(lParam); - - Rect.left = x - 5; - Rect.top = y - 5; - Rect.right = x + 5; - Rect.bottom = y + 5; - FillRect(hDC, &Rect, hbrBlue); - - Rect.left = x - 3; - Rect.top = y - 3; - Rect.right = x + 3; - Rect.bottom = y + 3; - FillRect(hDC, &Rect, hbrBlack); - - ReleaseDC(hWnd, hDC); - break; - } - case WM_MBUTTONUP: - { - ULONG x, y; - RECT Rect; - hDC = GetDC(hWnd); - x = LOWORD(lParam); - y = HIWORD(lParam); - - Rect.left = x - 5; - Rect.top = y - 5; - Rect.right = x + 5; - Rect.bottom = y + 5; - FillRect(hDC, &Rect, hbrBlue); - - Rect.left = x - 3; - Rect.top = y - 3; - Rect.right = x + 3; - Rect.bottom = y + 3; - FillRect(hDC, &Rect, hbrGray); - - ReleaseDC(hWnd, hDC); - break; - } - case WM_RBUTTONDOWN: - { - ULONG x, y; - RECT Rect; - hDC = GetDC(hWnd); - x = LOWORD(lParam); - y = HIWORD(lParam); - - Rect.left = x - 5; - Rect.top = y - 5; - Rect.right = x + 5; - Rect.bottom = y + 5; - FillRect(hDC, &Rect, hbrYellow); - - Rect.left = x - 3; - Rect.top = y - 3; - Rect.right = x + 3; - Rect.bottom = y + 3; - FillRect(hDC, &Rect, hbrBlack); - - ReleaseDC(hWnd, hDC); - break; - } - case WM_RBUTTONUP: - { - ULONG x, y; - RECT Rect; - hDC = GetDC(hWnd); - x = LOWORD(lParam); - y = HIWORD(lParam); - - Rect.left = x - 5; - Rect.top = y - 5; - Rect.right = x + 5; - Rect.bottom = y + 5; - FillRect(hDC, &Rect, hbrYellow); - - Rect.left = x - 3; - Rect.top = y - 3; - Rect.right = x + 3; - Rect.bottom = y + 3; - FillRect(hDC, &Rect, hbrGray); - - ReleaseDC(hWnd, hDC); - break; - } - - case WM_MOUSEMOVE: - { - int fwKeys; - int x; - int y; - RECT Rect; - int temp; - TCHAR text[256]; - - hDC = GetDC(hWnd); - fwKeys = wParam; // key flags - x = LOWORD(lParam); // horizontal position of cursor - y = HIWORD(lParam); // vertical position of cursor - - Rect.left = 10; - Rect.top = 100; - Rect.right = 160; - Rect.bottom = 300; - FillRect(hDC, &Rect, hbrWhite); - - temp = _sntprintf ( text, sizeof(text)/sizeof(*text), _T("x: %d"), x ); - TextOut(hDC,10,100,text,strlen(text)); - temp = _sntprintf ( text, sizeof(text)/sizeof(*text), _T("y: %d"), y ); - TextOut(hDC,10,120,text,strlen(text)); - - Rect.left = x - 2; - Rect.top = y - 2; - Rect.right = x + 2; - Rect.bottom = y + 2; - - switch ( fwKeys ) - { - case MK_CONTROL: - TextOut(hDC,10,140,"Control",strlen("Control")); - break; - case MK_SHIFT: - TextOut(hDC,10,160,"Shift",strlen("Shift")); - break; - case MK_LBUTTON: - TextOut(hDC,10,180,"Left",strlen("Left")); - FillRect(hDC, &Rect, hbrRed); - break; - case MK_MBUTTON: - TextOut(hDC,10,200,"Middle",strlen("Middle")); - FillRect(hDC, &Rect, hbrBlue); - break; - case MK_RBUTTON: - TextOut(hDC,10,220,"Right",strlen("Right")); - FillRect(hDC, &Rect, hbrYellow); - break; - } - ReleaseDC(hWnd, hDC); - break; - } - - case WM_HSCROLL: - { - int nPos; - int temp; - RECT Rect; - int nScrollCode; - HWND hwndScrollBar; - TCHAR text[256]; - SCROLLINFO Scrollparameter; - nScrollCode = (int) LOWORD(wParam); // scroll bar value - nPos = (short int) HIWORD(wParam); // scroll box position - hwndScrollBar = (HWND) lParam; // handle to scroll bar - hDC = GetDC(hWnd); - - Scrollparameter.cbSize = sizeof(Scrollparameter); - Scrollparameter.fMask = SIF_ALL; - GetScrollInfo ( hWnd, SB_HORZ, &Scrollparameter ); - - Rect.left = 200; - Rect.top = 100; - Rect.right = 350; - Rect.bottom = 300; - FillRect(hDC, &Rect, hbrWhite); - - switch ( nScrollCode ) - { - case SB_ENDSCROLL: //Ends scroll. - TextOut(hDC,200,120,"SB_ENDSCROLL ",16); - Scrollparameter.nPos = Scrollparameter.nPos; - break; - case SB_LEFT: //Scrolls to the upper left. - TextOut(hDC,200,140,"SB_LEFT ",16); - Scrollparameter.nPos = Scrollparameter.nMin; - break; - case SB_RIGHT: //Scrolls to the lower right. - TextOut(hDC,200,160,"SB_RIGHT ",16); - Scrollparameter.nPos = Scrollparameter.nMax; - break; - case SB_LINELEFT: //Scrolls left by one unit. - TextOut(hDC,200,180,"SB_LINELEFT ",16); - Scrollparameter.nPos--; - break; - case SB_LINERIGHT: //Scrolls right by one unit. - TextOut(hDC,200,200,"SB_LINERIGHT ",16); - Scrollparameter.nPos++; - break; - case SB_PAGELEFT: //Scrolls left by the width of the window. - TextOut(hDC,200,220,"SB_PAGELEFT ",16); - Scrollparameter.nPos -= Scrollparameter.nPage; - break; - case SB_PAGERIGHT: //Scrolls right by the width of the window. - TextOut(hDC,200,240,"PAGERIGHT ",16); - Scrollparameter.nPos += Scrollparameter.nPage; - break; - case SB_THUMBPOSITION: //The user has dragged the scroll box (thumb) and released the mouse button. The nPos parameter indicates the position of the scroll box at the end of the drag operation. - TextOut(hDC,200,260,"SB_THUMBPOSITION",16); - Scrollparameter.nPos = Scrollparameter.nTrackPos; - break; - case SB_THUMBTRACK: // - TextOut(hDC,200,280,"SB_THUMBTRACK ",16); - Scrollparameter.nPos = Scrollparameter.nTrackPos; - break; - } - - SetScrollInfo( - hWnd, // handle to window with scroll bar - SB_HORZ, // scroll bar flag - &Scrollparameter, // pointer to structure with scroll parameters - 1 // redraw flag - ); - temp = _sntprintf ( text, sizeof(text)/sizeof(*text), _T("Horizontal: %d"), Scrollparameter.nPos ); - TextOut(hDC,200,100,text,strlen(text)); - ReleaseDC(hWnd, hDC); - return 0; - } - - case WM_VSCROLL: - { - int nPos; - int temp; - RECT Rect; - int nScrollCode; - HWND hwndScrollBar; - TCHAR text[256]; - SCROLLINFO Scrollparameter; - nScrollCode = (int) LOWORD(wParam); // scroll bar value - nPos = (short int) HIWORD(wParam); // scroll box position - hwndScrollBar = (HWND) lParam; // handle to scroll bar - hDC = GetDC(hWnd); - - Scrollparameter.cbSize = sizeof(Scrollparameter); - Scrollparameter.fMask = SIF_ALL; - GetScrollInfo ( hWnd, SB_VERT, &Scrollparameter ); - - Rect.left = 400; - Rect.top = 100; - Rect.right = 550; - Rect.bottom = 300; - FillRect(hDC, &Rect, hbrWhite); - - switch ( nScrollCode ) - { - case SB_ENDSCROLL: //Ends scroll. - TextOut(hDC,400,120,"SB_ENDSCROLL ",16); - Scrollparameter.nPos = Scrollparameter.nPos; - break; - case SB_LEFT: //Scrolls to the upper left. - TextOut(hDC,400,140,"SB_LEFT ",16); - Scrollparameter.nPos = Scrollparameter.nMin; - break; - case SB_RIGHT: //Scrolls to the lower right. - TextOut(hDC,400,160,"SB_RIGHT ",16); - Scrollparameter.nPos = Scrollparameter.nMax; - break; - case SB_LINELEFT: //Scrolls left by one unit. - TextOut(hDC,400,180,"SB_LINELEFT ",16); - Scrollparameter.nPos--; - break; - case SB_LINERIGHT: //Scrolls right by one unit. - TextOut(hDC,400,200,"SB_LINERIGHT ",16); - Scrollparameter.nPos++; - break; - case SB_PAGELEFT: //Scrolls left by the width of the window. - TextOut(hDC,400,220,"SB_PAGELEFT ",16); - Scrollparameter.nPos -= Scrollparameter.nPage; - break; - case SB_PAGERIGHT: //Scrolls right by the width of the window. - TextOut(hDC,400,240,"PAGERIGHT ",16); - Scrollparameter.nPos += Scrollparameter.nPage; - break; - case SB_THUMBPOSITION: //The user has dragged the scroll box (thumb) and released the mouse button. The nPos parameter indicates the position of the scroll box at the end of the drag operation. - TextOut(hDC,400,260,"SB_THUMBPOSITION",16); - Scrollparameter.nPos = Scrollparameter.nTrackPos; - break; - case SB_THUMBTRACK: // - TextOut(hDC,400,280,"SB_THUMBTRACK ",16); - Scrollparameter.nPos = Scrollparameter.nTrackPos; - break; - } - - SetScrollInfo( - hWnd, // handle to window with scroll bar - SB_VERT, // scroll bar flag - &Scrollparameter, // pointer to structure with scroll parameters - 1 // redraw flag - ); - temp = _sntprintf ( text, sizeof(text)/sizeof(*text), _T("Vertical: %d"), Scrollparameter.nPos ); - TextOut(hDC,400,100,text,strlen(text)); - ReleaseDC(hWnd, hDC); - return 0; - } - - case WM_HOTKEY: - switch(wParam) - { - case CTRLC: - MessageBox(hWnd, "You just pressed Ctrl+C", "Hotkey", MB_OK | MB_ICONINFORMATION); - break; - case ALTF1: - MessageBox(hWnd, "You just pressed Ctrl+Alt+F1", "Hotkey", MB_OK | MB_ICONINFORMATION); - break; - } - break; - - case WM_DESTROY: - UnregisterHotKey(hWnd, CTRLC); - UnregisterHotKey(hWnd, ALTF1); - PostQuitMessage(0); - DeleteObject ( hbrWhite ); - DeleteObject ( hbrGray ); - DeleteObject ( hbrBlack ); - DeleteObject ( hbrRed ); - DeleteObject ( hbrBlue ); - DeleteObject ( hbrYellow ); - break; - - case WM_CREATE: - { - /* Register a Ctrl+Alt+C hotkey*/ - RegisterHotKey(hWnd, CTRLC, MOD_CONTROL, VK_C); - RegisterHotKey(hWnd, ALTF1, MOD_CONTROL | MOD_ALT, VK_F1); - - hbrWhite = CreateSolidBrush ( RGB(0xFF, 0xFF, 0xFF)); - hbrGray = CreateSolidBrush ( RGB(0xAF, 0xAF, 0xAF)); - hbrBlack = CreateSolidBrush ( RGB(0x00, 0x00, 0x00)); - hbrRed = CreateSolidBrush ( RGB(0xFF, 0x00, 0x00)); - hbrBlue = CreateSolidBrush ( RGB(0x00, 0x00, 0xFF)); - hbrYellow = CreateSolidBrush ( RGB(0xFF, 0xFF, 0x00)); - - SCROLLINFO si; - si.cbSize = sizeof(si); - si.fMask = SIF_ALL; - si.nMin = 0; - si.nMax = 100; - si.nPage = 5; - si.nPos = 0; - - SetScrollInfo ( hWnd, SB_HORZ, &si, FALSE ); - SetScrollInfo ( hWnd, SB_VERT, &si, FALSE ); - - - /* The window is being created. Create our button - * window now. */ - TEXTMETRIC tm; - - /* First we use the system fixed font size to choose - * a nice button size. */ - hDC = GetDC (hWnd); - SelectObject (hDC, GetStockObject (SYSTEM_FIXED_FONT)); - GetTextMetrics (hDC, &tm); - cx = tm.tmAveCharWidth * 30; - cy = (tm.tmHeight + tm.tmExternalLeading) * 2; - ReleaseDC (hWnd, hDC); - - /* Now create the button */ - hwndButton = CreateWindow ( - "button", /* Builtin button class */ - "Click Here", - WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, - 0, 0, cx, cy, - hWnd, /* Parent is this window. */ - (HMENU) 1, /* Control ID: 1 */ - ((LPCREATESTRUCT) lParam)->hInstance, - NULL - ); - - return 0; - break; - } - - case WM_PAINT: - hDC = BeginPaint(hWnd, &ps); - TextOut(hDC, 10, 10, "Hello World from ReactOS!", - strlen("Hello World from ReactOS!")); - TextOut(hDC, 10, 80, "Press Ctrl+C or Ctrl+Alt+F1 to test Hotkey support.", - strlen("Press Ctrl+C or Ctrl+Alt+F1 to test Hotkey support.")); - GetClientRect(hWnd, &clr); - GetWindowRect(hWnd, &wir); - sprintf(spr, "%lu,%lu,%lu,%lu ", clr.left, clr.top, clr.right, clr.bottom); - sprintf(sir, "%lu,%lu,%lu,%lu ", wir.left, wir.top, wir.right, wir.bottom); - TextOut(hDC, 10, 30, spr, 20); - TextOut(hDC, 10, 50, sir, 20); - - /* Draw "Hello, World" in the middle of the upper - * half of the window. */ - rc.bottom = rc.bottom / 2; - DrawText (hDC, "Hello, World", -1, &rc, - DT_SINGLELINE | DT_CENTER | DT_VCENTER); - - EndPaint (hWnd, &ps); - return 0; - break; - - case WM_SIZE: - /* The window size is changing. If the button exists - * then place it in the center of the bottom half of - * the window. */ - if (hwndButton && - (wParam == SIZEFULLSCREEN || - wParam == SIZENORMAL) - ) - { - rc.left = (LOWORD(lParam) - cx) / 2; - rc.top = HIWORD(lParam) * 3 / 4 - cy / 2; - MoveWindow ( - hwndButton, - rc.left, rc.top, cx, cy, TRUE); - } - break; - - case WM_COMMAND: - /* Check the control ID, notification code and - * control handle to see if this is a button click - * message from our child button. */ - if (LOWORD(wParam) == 1 && - HIWORD(wParam) == BN_CLICKED && - (HWND) lParam == hwndButton) - { - /* Our button was clicked. Close the window. */ - DestroyWindow (hWnd); - } - return 0; - break; - - default: - return DefWindowProc(hWnd, msg, wParam, lParam); - } - return 0; -} diff --git a/rostests/tests/winhello/winhello.rbuild b/rostests/tests/winhello/winhello.rbuild deleted file mode 100644 index a18c739e0f4..00000000000 --- a/rostests/tests/winhello/winhello.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - winhello.c - diff --git a/rostests/tests/wm_erasebkgnd/BACKBITMAP.BMP b/rostests/tests/wm_erasebkgnd/BACKBITMAP.BMP deleted file mode 100644 index 38bc9716b64d087a7db51da3369be7766d930d30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26566 zcmXZF<(nK=mhQWQBLfp7l9@A$OQkBYO3Y}I*)q%6vYXW0YF4wlhdewU_OORNbI^zT z(7kaa^Tj?pcRHdxUh#hM$c-LC*+P!<>!xz-z>qA4SF+csvKmO5_yLeqa zt5n|q=+FPhEAr>P4?k3Q-?^{uzxS?spP%o&`;L15CqLo!5BUC}dguN3)SdhH)Vm*i zpx)!pyC1yId)`&|7N2=feZYI~^80uA{JVVS_Px96KG%5n{rCCo`&^sr@%lZ!zsvRC z<$CY&`g^Adq=&`&mVBj+jsA>uJ_bEUcWE*<>&YL{4L(|;o>^1jnCeF_dd_?p}Nmn z?!Nb)dUtW(yXqbO{SIrq%e_DNho7o@tmVUh_y^v1pY^}1Zr#4aweIp9teNj0^33nc zv)#YTbG)x^-nzx-KU6pG+-9xss9SvhfX{!(n%`kfw|LGELr?(-fpeTUa?@t(W)k)x~`IlL$LW9?UO z+)z8aXIbaFteL&Nb64HuK0je?Kl$(fUEO4zcaX>J+qcv%_rA$GuHL+%&fd7G&hqnZ z`8V&mednIK$9itd`nk_p-h1ob9o~CO-Q>MHySwbsKd9Zs{jRDt?s+guH(e>LR zGuHf5WciNBk!#%N`wp+&VxLZxB5jiEXUw*#FLkuCspTfQcB!OknyE$dU*zWVdH3O^ zeE#*Qo6&NSrtR?!D?40ujEdVIr5A?BEjy`J{gJn+veq{pt6~Ic5TtoGam`#S=f-Ya zGRtMXIxgwDR?1~UU2BIyW!+Yutt{pF+WCWC!}#a_@s0D^)tDyX_|UaX#`67shSrq zRt>Mv`1`wO{>dcQTJC2undM?Dr|~@(>88e7GsR5XENQu14w0E1Q)`<@s+?g-s#Qyo9WuNyu)wxLnM9hXrO@t-ZzZi{n;CYik;cmPcAzIb!*2d}NmQm!qnAD#w18 zHO;N5)xc~)MN3&6>lZV{HSGlQ${#iL zlJ1&Oj>VW7`!nfI_*N<%)L8zcSKBvG14C7YA~`m>*&OgSB=*@#&6MrBi_PsNL7<0W zDJ+%rs+O5N_F`Y_n0g$V<`O@crBYrmYnL*0&&NnuT6R|Pyg)f#C-d}mkzapp`K;FJ zwnMXB9X~T}6*V){?Q130*U`&4R1Uq&tjV+RL~TSWf4j=CrvAVh9(M+oGh}5>%~DgA zy4$R&2Uk~=ZCEJ29qe&=P(G!{?8Ff+k?Ciyx5Kb(b|?JFRq++NJM!nrJie+1R>iCP zeoYy9u~KA)IjxPgt`?rw?%eCQL)Nm!j+aa}Im)#01Z;ceh*qjb7zg5f1x<9_>4V#Y zxoXa~nhy@A!=cr56bk4MnrdGbd0Lji&Zj{yNZpa_Z#k@TyD^HJZ|&u2#v+UQnyHqf3bI2)o+Kpk7g~o9UK+FYFfi5H>QwQcz^9hvlLS z`^_qDtAoeF=a_2S%339RHqBbj6!Vx_E7za!pK!oA1It#c&Wf>WzZtW%xQ_hrsIis{ zGvy6jOcHSmb|EunqsEhdrmTBB(R8Jr)`HXzj6!M~L7{$djLxkJ4+=tS~n-YqXxmYvDtJGlx1ZdwRO8@UuAX8 z=00m`*-kU-2ks#^bYoqwnhQ5$R>L@Eh4tK#RouK)8om=!-tC7yjXF3?02}5 zDAhEKTE*?*g|#CYM53{laX*(?KC}1C1NY9br5FqAmshpck+Qj@qeUjhi`ko#P>+>i z_)n^Ac3@eKp{9nlH9UUOPy-y!@u@N@GZnZ!H;wfX25c^wqd45J$9hW?n4;00u+2U#`A7LD# zr2E}E;iOb5J&eD`XLnsgHHWLpD%6f=S>(_dG-}rN@vSX2m~rt{#MjBcFxyP{uTCc#4>3PQ;z%Ub)mN zvZeTIj6=IL>2~o38b%zIQEc=t)cX^5X(?}Ja+r>8vnA72uhR3aAvSDVD&3sV)jqXV zDAZ6vyP=11NX#XK<;`mBnyux`9{!C#8IQ{tZN54w2RCXy!8b@ZHw(1}pHeJ%MSc1z zQOT04{Ed!~&E*zftTOY!pXM^%%>JlKpu=8>YO?rTPP}$;$z9Kj32Rv0rF_DYY`ZdZ z1}v{)tUlk-wDf0G?Oi`e4Zr63U)4G>8#-b|=ta~m5)+BRVM*)u`{hh`y%FsXhcnBs zOtV=$voTYH3i8V;_E#xmux0tGk(d2j_z+-1=Cw!4ZM-}dHy&dp6C4-2o69^>B$9OW zd>){a>rMy-xLe#c`WpnqU672nGpgpjTBT;AnX|+jjjLwbOW0qX=r+;zo*$d}ZZ{;Z z5dga5$;7SafdZ$FQu5Pb5|i`(bPx<(hOeMQkIdbzeN2`OaBB zZbr*{*NA}8esPekdHx^{+OlSj zm!?KNth>ZFH&2*&tYoe&w~D6z;uwsim%Ed3zg#Sa>y=8a0eDf)@vV#5smiX{vPfqJ z+_D-g*y37i+&!ReZ(C}(a#|~C(pZKAjh%&A7Ew%;a6*n;Hu8qgJ z{b6|7v7B9H)e&_7C z4`vj{+>)j7$HbkOIfR8*?B}|~fN1Fz`E8~+?zXXN&`lW|El1_@p=w#Tjt{q{O0CxC zb`sc$8;{a?+Os9Txuqxym!fkCOjSbm)l>Ru;IWLGdz_$_Hu*-#rd$sTDje6W8erf zbj_Fue0bjg1Tt;((iJ~;ld@}gsq2Cp^*wpQk3N|o_Wjr(KmjPCyO@Ju9{Ye_@KmMA z&q>d#d6zn2Ugt)|;@aAo?|<^%wKZ-6;O6f#Ys(bR6Hjtcdw-4v^3U(R+|Nv^QN%SP z?G=ui*AltRz?m5|J9D!6>ii zdB99x+t5e0XZx0O&arELV9WCCnX%$j@oXA+nOHk6E?@cnr>~WfLuPF}DNoAXab^wu z03Yxkth$O8W(efk{#SCDmvj50sH;r?(PuMZyVd7+U69R&{#jQ~ddk`QK+mZ{c|mWrQl4ZPv^7v!yRf_7Ih|E&)ng8&^x+{bjJHKs=C2 z;Y}Y247VQK!ZHlPlhw#qR6`YlbvIZ~o|5(H0S+WBfoxnm2*`%2vB1588qSA~K_=%F zEaMXxk3iG!++h>@s4LGxMu|4|32(*!>G5m)LR3WC4>Cm5{VsNaD37t(Y`5(13uUZJ z11Jz8;&8(SB`aqzd(gm3OasJF%PLH=VS65loa+W3tFyYaQ3I@ip4is|b~3+y=>DeT z6>KHB0jg-&t@5tnf?359o;ibBu?kV~ZkLz1dtcUg@f*+?Ut;fmb%TImGCDbT&&S&vB z;8}WGf=sb^1jtgBbSR^ZGu$6YK%SoIqgIGl zeutPdvV5LKjGeVE!i`un0lpjowA>gW9zta9;N;1Z!{ZNTFIWW}TGDY;J*hVm<-3K( zjT?=pSd{`v%nWSS08aS_OMYSWiQZ_%P`Gqlr?>Mvr@e|NKu!e660|nr(X&3ev|1+wrz&7KzKcl-JUmm=)o*lW^*V(4qb8#-_P1B zhVPL4*s~iqZreVN7!eMK+h7VTf_3?acjC^R6|dN~s#Vme?j?dp`Kp$yC|DKo5pvAx z;!j7H5GxCizr@HED=d?v%S#`v4|ivhnUt1Lx_I411KDNQ&Q6CXhhM^77z4)#=@&4C znGtyP#A^`1E*O5JCgCM(-FzrJbehwfWLPWJ^sl4(Tsd}HAZy9q$_5?WkldGjYnQ8S zZdU5#L-|$)hyyrSA*<=`2MhFZCg3djl5b)h?6;t4NhS7-Fy7eByVN~Gc9_hS@C2Sw zqGZi|;LMfh@h+Pl*5WzhJiHVe75nCA2MaP9rBR0m@qPD6UU6=18{8j{Rc;fp!s7XsUSR3opV~PWO3(e|cy}bg`lT5Qh zEkQl`IZq{?*BBj4(!|Gui1Z3*najuUGAQZd4@>lY!$?xeK`h1gn&_MW<1SuBmT30( zQmA2hsT;4yW@m%s_aoK&NHxnC4;KHC0_G;=@Q|1+_}xX`abBk^R|3O;V|s<{>6E?m z@VNDU%|I$?QjfhG$_;$*I{BHU8mTw4rUS=rQeLteL4&;>P^L?~nlqcRBdkzXM?P8X zPrBOvwjOqnMcv&~NBusbArF!x)Q@rjzY1}8lhbBdOh%$vdxM=7x#=knl?R|iOJO_8 zl-c)}Q1X?bvqHcZc=hLZpYRfQ6NP)ypNY!VB)!0rvbYzi-q?eO@HprNw&8aQ=xqmU zr2r}SqTEu{_GhlMx%|&{lOW-TjT5Ene##DQFp)@U@i5wc1S+mYoMagCX6%USnR~jI zxJ#i)=3dr&^*AP4sN;mNo*G)Vzw^7l<&E6*$vN^o_k;urqd7eJ+%PK{hUF1+afGu0 zB_)E73cgewb(+o+C2q?&{DaE78~8WzLv%&6QJ zASzym+754fT@>)d`D5f1xXewrs*?+mz*2BV1N{Q-*>IfacXqm`aWj>K08;_5)YGH~ zjG^+Znfb;=%UR9Zb!+CY;xe&lYHPOd*b&ul;)c2RP>h>6B+fNY8Nzkz{KslooEdJ& zGFakB&%{_1Sv3xZID#hZ0TZ)q?jd?hN{fT07K!?%J$EV29v{tvicQE$l6nWHY#%7} zq@0+*QzkVK+sfNMPn6waznc>Oa71nu5Vya|l@|)etwhuL2g{Ra#p1&7 zC0WAaStFL*7XQ-4&n(oEwqdoP5p}t3t^Ko9#V^A0Q z$+|l@eO|{($+!?G(Rtx8QCf+C$QrxZU@_Qk98=8o5*~8x8`tA@%<8z66V7d;={R0u zcVAL|p2Q>U@ceal1&fo+|I(%koPw%YUX94B3KZD~YSoylX~jg%SrImiu4A7~LY|sg{Xa7XJ zs+%1+Qv)n&R9;Pj`sumvH}Xq|JQtbqd?-eQSHpp650@miH42hL37TP1PGxB9G(;7g%49tALV7MOQmXzS;knn7*PnCp}8W!f@ruDhUUR4IEcDB%R>*u z?7w{_6GfSEOvj-~jp+49?OL!I*S(6JlA5}`PD!d??2ukw*cl;Ae7h*R9;i*j zl_(zT%Y06B1*5^0lvxk&La zuQVPD!*;hd?w|jHWLR2j5-q<5h9A*i1$MkvJf!c536DWf>br%bWJz!3GCG0c<^( zPSpyAUm!(3s3$eaqp}owsk$XPJu(!IK((jTrkEqpQ~tt5ceHC~G6W9(Db9p=jWodz zK-!?wi}QeX-yUHt`Jh1?+oMn+|5?^*eNW(4Zd4LL6XnDg!H>(2FTYGhTk2y}PXyNC zvy&jjhr1z=+Tv0kojCP+(bsGEZR-h~0b!3FC6AK~1pDZ)5@e~HSa3bfA3O8n3#DpR zfFI>2Vg?3*>*28hCCS6ViZuWe8z7i^lvElETlD7heE|*xrG1!i+SZmNDHU}tE>mgJ zs`vzO$WopvHLwC(+taJy+JoNn`@jtYheUcXpv~afy{y%6LqVcEPQE0ML}bJDvA@W( zp5J>mW5ypja$Yv6nu-Yb(7JCw+6!VkJIKB@yfDbBLAFu>w7J;0K^_!mRso8c zu7n;<-zXo+y)5OODww;v(P@Y4JY_GSX>9DnrL6c#pa_qSF>^>$vW_t~K(j%*Czi-d zIPkSRS(s-T0d;cOM+0Tl!P z!>8B!JxRy9V;Tyy22aOn_(Jh)OOLge=^l|+5KlJrdMwZ!`UjqHJ< zvIZ;|I@WN-uLS9w4oK4NdXAgYK9-^g8EdtjS-#f7S8cS%FHl+zrHaEg;Kx|wB73(m zRMJfWt4={2wBc-9zT^1p+9LLf+SO4TceFu2Gz4;y6?+ng(L_lh2}c4?C4%Txd5)k_ z2Nx|0DlF2P&SpOGlTLl*Q=_I)SH!5|+F16s+iIQHTy!qf+XPCK3AoFS5I**7_Ih@W zWg)d;#cCp-$xvN-y&nynl#2cN!=7Yt#k?hw%dOkznCs z^7VS+rh*(wNUw1j;E1zmV;DT^o&fp9M=9O7Pc`ZR>j3$(N-3bALX@ahv0?VurkDWE z_X!tEc}@BXWr2{Oh2sy#MpU)vgX$*m7*fbs@3)hPFJ?4vOcbv zoWg7H8w$QwSdA+6%y{jYAAMs|s*38-mhWoqP8DP0Z_11>B9!*Sibe*!dc*q8gOhtd7 z!se=fxxiN2hBS3;Y?%6hHOnUJptZ7Ad}i;J&k^U^W9{ij?(BU8+gRccv49$<9`Gb^ z1uCTQv+S%ulhAKmRzpADVZ+chA_uA}w{&}#{Wo3sKl!MGhkAZSqW8{v4SaM!&s@DTF^zvxG z7(f3+gaECAwQuH9Xld`y;~?AuzoBXc52}W$q1Ip{p5J*jj@eM)8om0zvz%Jum+K*36F~kEfN7tO_tYG+Mf{*Fw_dMe+a{Eg7ZD4-d7tt{1A}IzS^3my zMN19rHq0VWlrT_%o-avynjwnxPmyKi>+a5#ci#9>M*MSNtqpu~LKi9@x=R|j$7+EFE(#_L2X-}_OD(ZkNr1wFaYP%CA601=wvVj_ z!>#QV1jQ9sFyt((4t9t?w5`gt3(X$lU?>9lwO!Arw?!{AYh1U!X*IS^PSv_z60Fzn{|SZS9C;OwAFZvOJ*xxI zc|i8lR}|eard7l19{cHbGh-9>u$K0(>;yLc$9`z0|U=X zJ9}MUah0YsSm(kUdj9AViwn)`?KlW&wKxWT4+h3L$OFQ@f>893Weuknttp8O>!$4V zQ9<_TQeHpoo>(RWF4d#|x(xbxQvwaop514C4ZFad?{u_-2d}G-7bsv_E9o5HK_GDJ zqxHB-6$+?@`@4L3At8cAte@XCcA?VI0Hs$IY3x3DZc*_V)q?rlXf^@7)^Gr!fhtc$ zoESmQ&JtD#o@f#R*G>SmOq`g(Cg|t88;2>6o$9$kgOtrv2j*bziYiFpS-mKs;+*Io z8BAlx_v=Sp_H)UM_t454wpd7fWeDO8M$B|Tl= zGr~m(*-Q8Aop|0`DL55$86p9&NY$LrR;2yG!;9asA>D8rb=8mo@qtLxP; zUtc1baY0Qmg_f4`4LbluLC2FS6KgPLejz!$LqI3H)Z8AFDe^4BxuN#eZdxdxQv4+T9%^ShMYBqdpTkb|pGO(YjHv-atgeDiLlnNJV8ZZl|iBSC{Nh@B{ z+4+D?z^&C?RDJ`_X}pw+mXHtutwD`~@&IzTXdY+DS=0e|k-!=lOHr7hY0a5{0IOzn zdWZlT%dAFrt?azPXAO+X^AIe?QBem5xNLwJE@WUhLxTAxPY0&OJL7`LJ{C{wtlD@e zh$={&BFqZ#k-aFnfv!JHWk_fi(4i5dPPIWQbLc6T;VRfLm2SgdN>&poB0KgBJWu8} zScD?p#zO20Tb>oTMLo}{e0tZw@3K@;Pt@1RQt@pl>w*e4>4psGBH>kx!s_A%fofRB zYPK@WI>%?ypD=u~qo9C@ub&C+n_2tKi;cW~Fly%y2fj~PzyTlu(zCmrcmi^^FK))J5AO$zDSwZGL zbZ0>+&8D=EE+Pa!2J6`NIpm3t;ohDxt!0f>>YXdEjn`7DoM7FLl}aJF5*849F|VsF z_|{tnI$#*a>QPar!iit}t(af)1~N)^9ab2!lU-sTNvBgR!wZtD5||C!mDuw1FaGwT z$Ux0VRnUL_hxUn#oVwp6$KZ>Ov9yhejt@zmBnZm@ppwfN!LiSGs?{DC(`kMzp5gf= z#?Q#Kt<@m`z;?cwT~J0~?H{s!is5vk>;BGvc*%DCn}iudovRbZ@J0q)EfPs%1thK1XjdSs z{QA$8t36ayR!)+*E%i24D9B?SkcTOZ4*d+>XR><3INIqLO#_!(!|Dh~A{1mtsHUMi zKl=7WK9$sWYfS@nG|maH`BSg4-DtC2n=60kkH7L;wdsIIbds4-w~%*bRjtA>q0YkX zK|M#2egio>s3xVl$#jIGB`gq?z~Ow<^6{Ppb@&Ir_ycqu1z!o0gJBPK zDzKuOy~|J1zf!4RBkR>WZ+HJWTbZR@Nrr@TAr9O2oMxdqQ1cCzR0)3n?k9hxW;J0X z!nVS7H4XdRAdB#>8f+F18;md?|0-|BFAY~zHaT{B)3^M&eSp$2PifSArXD+8M#%}2Oz1^fk{tU2}$^ovA$A-S^bv|)SLv^?@zvNO*r6A-MMKxN& zAg(Vd{@kaJok=}=hVI%D%piKtFnVZ&vZ-jDRIGd>JKe^eW)V0~N|BAYWJ7;cbQ>Wu z_yziDv`s27Dmq_(`jw+26unkR>BZxR9VJ)C+h;B8tcEDKzW7#p1!78+CCirZp1K9^ zCHeyuRCL8SNA~M9SOHFiLb5eH`OCKkJR8sRrC)sfoyW(XpA>v&RC5q5yzC(Hl9ZV6 zs>h?IJgrYK@!%CgN8+MS(BedockPtt;vwR4oE$=!wga0UF;nIgKf+B5X~S`5U;y}% zlC)0Yt~Fx+oPD5iuwtBJvt)zOM8lY_CTyW&uhNnO`SW?vlZX7Xzj^1NTe0n=U002U z?5w&NP+mih_3kE!47COf2-^3ty)x5^K=`D@u#P+;ozC$2N z*y4f(oT$fs?P(30p~z#h;V1>ZQJn*Z2>y4zddP2Pw{Iu7-K--2NYr6`FLpy@8;agp z7q}gsT|$lHpZ5C6x@S|mrQaJi&^9*pu(CTpm)NxxByX)q>vej8`aL{pJP+O<-2yPB zIM_6OvK_7jjk${+tbk5LG1S|SQYj(BDb<5Fg9J+=An;s#Q5nPYXNNQARauINjK^nh zjI@(r-cwi+uxCl02>!M=uQ}7kqk&xs=mybh=%Qc74SUr#R_ZE*!Nnsy|DT$}?1N&K zwEw+?MW(yn{3=cCxgVW&Qvmp@`~utZ1fT@3CcAzu4dK^)9$?)FysO^DdMY6fHK8~O zoF5v~?SF;$6bH&qZW31;r2d$?IM;1iHQ$ZV2-cMq-yb&`G`5$@IY^k`dhtkp!8maE z`XNA!u*jz;v*b(%D6?YJ0XatDzaC0yO$Fz}{3uB-I=nQ65s#VsiCy0*xZO#{ER*nr zc_>0`{tk*wEM==#(Km0!+O~~zSe=*wB0;UPw^u0SZAo@}&JZ}mj{EhLz*Y5Ulqv#U z>r)ieku9o06De@h!wb~Nw(KjAgE6Xx{-kjTQ$P8PhClV}kEQ-6|D|jb?!7_8a4@W- z09KQA7bU^OIun616 z4lA!A>LetThExGIXx?S2kO5dBnl=)TEXK>G#bE)&S_7v0>?bjcKo2*QCpYYm3tHMH z7O2mR_=!Nd!t9j3aZuYoqBH?YWG2Kd=~O5e6k-2=e&Nh_e~Oot7|)ypPd9vsP=`gZ zt8z!SmoUqZ^uPqU8^$_iz%b~PP57@S4>W^4z4Q8`Lbj1nzRn7ivlH2CeSGU0UK&wuzkKR#_F zJ>WSxk3_EQ7IuLu9>5Vw&_huf^;n@|&Gp$d8{>#+lF}N6x~#)UB+e zUM1Q{k}4vh6JL#OU^JyW3PVyF+F~S27}q0NEm1V9f*vR|_2TGEhNdui=8oH8Y6CX? z{?gGdv6U4b`|*!|_(g0M+Gje-GY3(hukgfNA&}++kcE})gO$w1JPHU0h1dJy@}*^H zlrJwAVRWeJi^*&?Onn!>2yU@_EQFei- zPvwo?oDg(*ZVbX^Zp!xcYIod6dh$Ugey|NzTYUO^k88`z87#kX@Wiq1j~SaPvp_q+ z3ggai{^sBQ+JE+Rtc1Xk1hbL9X|rQnH9 z7bumNtCCT7V&*4)mMN6dTMxl5YK>ve=S*+?B!orW@3Udj|Z+W8c>G%qp}YUB{beh zyiO+`_0&AEdnnC;orPM_-pO<)(lY14DIRNA+9h~)4E0hAHlwd!qTZN;rb_=xr*<~S z1MibKPtM|dZ~QNCM-~v(`4qiApvSp94WRWr1dcAe^(EmZjlb~t^4_y+dkK0=5>q6F-X07eyfrio94G3>mkeWf z@x&UYAa>#;RnrGbfw_Ds8O}NEF-wD?<);FfK;3)hZ{&xRYZd8aGi`GJd$04Eeng+n%QF@7u#DImZXHJ+pWr-A};Bt0b z{RggmA)*gR=lj%;A3-QFP8$`36wKTqWzxVpKAS23)BhT{3>mb>u9zBr6z2(@fms_F zrC~n1D7!x4>M}eJg?oIA5maJDL(Ix6I6mo+K{$gsM@U*RDgY8MNPB?0Kqiyvxj}G- zRE5Ss`gc2UC*Tt2a{VfOVVrAEufh`#nJblXnM@pyC$x98dSF~ojihrX>5(}|kTaRx zf-1lw7@p#rh*4&@axXBtG^W67?mxj!A7N5X$gu~Y`{6jLQmr)J*(9)8D?XJ-?*NrA z3dB7d`w1g$e^_ELG*cDzVC+hUIQS7RICN|b`w$Yuz1Cg!2i_)IpJU|hSj708E{{m! zO!luRVY)~RONR~0pp9ssj14g*EOLX5!`4b@L6}GQt=?fJ%H9@Yvv2>G*B_Kqt~)u1kx0l#{7zr+_Qy&w`HCqf(zB(xI1>OkgQxrJO^#NVz3gKRhXv5tu}yCE68T z7KqPkXS9;ZL}fpB=9A;H@S=EI{luX(1zDsp(}RRQIyIq9Iz%!&b8LBeje%vvH(|_& z*(oNg8O<(2077w!t>q%K)}rY+Krj)_LGqC75OmJBMROPlvh5;AQWbzJ9R)L9qQ6*W zyh;v&=#=p|NPs>dJEG~CE5-8<9DD2ynd!-J*hMbC`TQoMY3I+*twIIHBgN0T?dlsW z9o(|E_6v_d=tiH%*vVqJE7K>CM{A6yVbJ|n@dXsUB#7*sZ4B%rrNoq{cn`Nh_7~2* z0u=)7kRAED$IhTz%%z1L23q++ix^oGOEIAqnXlxEx#dUx&9jU&p3j&v4oPJ^@$R2F zA(;aMsDMe8>h%#_8th)oIFot#*|W&5|NZYWxhGb9$}GJ|j68w^#0$ZBI0a~wQ4YoI zV2_=}>04|j#YcPe>tHVB&!q%mD3~-*<};e`FeBvFj=sS@v$paP_9Oz2*V&HcN7@>( zVDDOn`OhPxG-&+O{-^)#RjG>;?;N8bTwA#eGyJSaYd!PEwSIB@G|{c95p~6U9*Y=r zFqx@>d=ugXy%mtRoiyrSDv(r3HExxRmPD98Y9$bi3Rxn@W?;T_%A}czg~CXvhMY)( zE#%r=4og{P+d#0Hy~VX(;IIDjvwO#<xLeg^i z49KJ^V?Hgy9JBKrJL=}~1=a3M^+QWJxnoM3s&U)Z}WW5UdBGSXT+kJjPTA)|9u=!bR4Wu4BU{0@Br z$-$9X@+dYk7>+inWU^wi5#AgL_J*&F>}6;i1`zYK1jz1JQ%1IWdK>FPkr zrCSX*ZxoDr3OzkH9hoKo?W)}N`t>(L-eP!eJ>A|q3# zg4qGAagmvHuo39!rD~^RLXH4#@6cykB-Gd%Skj&Mdhuw^Y$vU8cX{tMnIzr2eEzl8 zTILAg`#b3Ea*IZ_>A^OFx4_QoFzabQAJRvma{+C;|9Jn?cc1;r56@DXuz>mxouqc) z_K>5j@1p#TGEy+eW(?AkI7Dh6|-m^@cB6(N6;U4@VEYNsl&!CpGI$7td1WR}! z1T0X9e&&HQ4?K?GUgQ)44%}(|Ea!4)N4iXXnHms}CL**1`mpt&@w}9+>(Zl8fBwDi z{@~uP{<}~A>TgqG<@|~v70N-QS7+2N%5-xkgH3>$wjObYiOE0(T!t!~IiZ1rRu&C< z=r_>g;7(I43n;%zAV=+BtqdvpGRst}H})DRms0 z;CLd6S*5_P155+jAWD5=-~F@C{NR}%{^0KBK$s6ml%lE)&6OAdU4*g*IhJ;cXB2gu zFtgKU*&Nx!NhHXTxTk3)l0q1CBM3Zh9%0d8mI66+Xq0&%1v|K;NBW{`IYy68K=5yC zoN>a8D=_8+e!&%w)=L;UXXuR@`-=M{w5y+?oA|_QpMK_#Ui(n`LnSZPHz4Yok?w{QW@kZL3B6Sc zJUVrlMgNKMM9N~8RgWX^FZ!5A_m(r4mqtz3UUCkT=9!d;;KN#PBZleKOQ zpIel1E9AT1{=@Heb~=A~V*Z(A=lNumdhn5j_sbq=r5MqffW9gY54bP3Qr0Ig67@|s`5+}k z@DX<0FCGD2;Ze_;8=N%5R}v79L#-dC0ZIy0Fd-pAwF5j0H5V@}c$IHIW(oo^1dS7f zM9SFA=;ci2QcGhJgVLI5G6qqgl8Eio{(@%*pY^2m@m`M#gp|QoM#nhk>Z?zBPln~* zs06el`_;qTk(>-!pomqi#festNy6}jvy0;|fcO0zvx((gb#iIb_FI|j0aKCo(eNd@ z^2}h({j+D?SG~fh!A$G{OC3(x3#6APgw|9Cwkx@&$<#uXQx`nvz;DySl2(e5%;|hd zNk|wRq~pv)T&*2&KK`kt5FsY_$9`|PGg8Mm@J<&kXYPFS;*eUd&3 z9`V3AvX7YK3P?HXZU;yOm>A(o1XZ-b;b-<BMq6qJ zW*XEFimBqTafvv@juhQ-J+uV)mRno?8(g*&M)+!S%og$oCC+Vby;qRjv*0d@@q=pMNJ5cW=()1BQ)Aj@8afHjzI>#J5 zlhmqta`>&cp8M8we>W7u;-xRjv=fw{RNIk?mMzT%up@_lmB1N z)e~%NW3JTK&Pk(i0Eb~vKxHX?KDa&1J~SNQNIx|S`~#~@LAyP+3nOA0e+j-ZfwPml zL>YRLSu*S{zWWsjsz5^yS2T4f5>5lblq%F?C-~7X zy#6=8=Z+337&6ccgw94LDco*Y7_h0h?_sMpbY z<$o-{$+3!{tA&`e-~1-Kj$^De8fm@M&Sg+Hj<{s_g&#N`PBl7G-=^oq=onX~d%}}( z&d8%FZi|*H8V2Pg$meZi)Cn6@?vB3yx4-s3f~6|-TWXtFIV|0T?V+(q?nsr2b!4+m zfGA&6wa-WyRLmZqT1~w`7ncpjbodPo2g^9Vz5P~mdUE+0cPCY!`N>ay=`Vhpt!XrR9&TtC zJY2J(q+Ko4639nTTT^ zjUbfaZXpA4w&E7hmA&OC*MT83i|CS&61SXBjc!7X0E6tlz_K z0*ZCzjTmHYj^-9{URRs;zp^YD8VpajDanE9OL$R7_;B$3Z`hT~jS8ou?ej4yY`*S$ zvj?q*vIcx&VlUT1h%^~|=o(E3+7?ZH_V*(%0~?OwMDh|ov}RlTIEIwX+6^P%A5}%1 zU`)~C^SB{OU6n#ge5NkU;ZMLOk6}7!@^X5IsuUIni;}{SPeGX1mfK8HVK`fyU%;AR zrJ`b2ao|iEY$KlRVBj1lI^G=kg-W64JK5W?FRWo>fmjR96z(0SjZeofd90n97G>7L zfy6T!vSXh?f!s$dxlFsSHZ7fSk9~ zvt{NE-~ifZ)CB?7Xm#vjS>9E8PC`9^_%fwTO4#OfMoGuPF$)-o#~b}ML0#%?1fT|< zk+;Exrvpy%>~Ug6o1PMzHHK~B8wGTQVj=Z^EFQCfQZgq@5f6Aq)E@XmhAI`k94B|~ zeV`a^aP;oN-`jQQ?G)PJzGx6;hrRTL_q&Kp$q!DZCmF2e68J zq=Hi%lY&z$kdu;1`Stom3Zg_KpPG#f|BxKp(sVvpKGqMIVhq%PCM_M+!L0{R3Z=-q z2&YKSG(dR{?;QQam$5w(D0rox!n`0gh@?lm2$cWzfI`i{A(LPR*c+8nVjpHC6e2F= z7kbcY_z^d+DmBMbd`XVyI`vq-{;{VjHnX(;o{C=I!;!;acR^E?ah9{2;-$TSDMcBaKN#Pg#(~j6J&gIqxV1f_0@N4YUsJ9t-oH2`! zs-O%5XO^T-9zB!@@7s7%9tlUOteeoG*)2$35Png_fEotP=vJ=Hq`lsG7``@x+l&gj z!R7TBDghJ8g?&O^HCB3u4<35^acwR~9@27irs`(Uq}#z`BSmOq_^yi=!7AKs`y`#x z8BjrdHPFKFlNI43S2%W8=E31nJF}I=})@Hp?5mt3{`!99oID07EbAO~@qxHkZ}cdqjp6fo6k%<_ zP6oRpXHg?3*jR_;Te%F;XpeAJ8+7kLI8-4>7uuzzu&zfOhI(`fmU(s3-6)-k9$s$* zOg})vPCl`@@_NrV>?fE%U{4)Ctucrd;ENlaJ(Q}!Tf?EU9^&MeIRM=HCdQ5%v$Ct( zRwM1OrI;I)b5fZaI~_o~lxkPDP?2FjG~Kb|QvKq(eYtWm;IsrY-c?jH!PsO{n)U!n zXzE8vRyQ7w_Je@rDA{~;s_x>;@&A=4s(E!$k`h=wjE^^m^`pC(3g;DEfOJ$Rf|3hR zEjJpY^h*Wkzsdow4y_85Sfg=t(_kn^Tu-Hvkb)(ITZ;Vn2g|rv;|SVyy~ilvy1Nln zDo;^|rVic@%!m`0=|HePN)6g;r1kWAOC3(B)~@4k^5~-rH(I(I4uFzSOk^ly*fry7`znrKcK~0j2rUDQaF_^NVtnGRFdzv|~TKat#K@(G8AL z#A3``TjnO^JS&MqNq8tdv`N2-FNf2MRdVRo-{H-+oz+!VnO%ns!zMG&6jqtf)wKzu zikA@@{S~UMMhb1+$btbvd+75mRP) z3_6h9Dr&v)^H=V0!a4JJ^f0w(nd)X9x)t_Sn0xgTCTFNTAE=K}b$}D^+v!b?>lv_# zLJcDY67FIpdN?0(47`3=YvG^PnSF)&fRz)LNJ9%#R0F)ge2>r-NIYP(fSx$6kwQxa%PsynVdpLjmqtiwOU39c(fAkDTvhon}PfAa@rTkOwWvGp+))-Ygk1e<3 z#+NyZ6W|Z2C$8HD$cpJQVD$mUq8{c<_6B9EhnGwa_xZ#n_*6l;R2u0c7!{ncr!F_i zO&(&-Yym{;$)iW3$K<>`?iNw}D{)|q9zKjue(I?@y0tXo$oFNii=5L+x#KI zNTDhYp29Vq{8hV4b6y(DYpwo^ zFTQwIJ5nlLx$^8k(du~)Ou&4h9kjmiG>vC^;|Q8@BgD5ve|oXtewU+Z^-5N%1IcH# zd^mDAaUl7ye-;BFjhy;0@5ut2*;V-YL|miv@X_;l&Z;zGPU(r>rg>7;8O_PwG6u&n zriX@vG9kIGlDO6a&e4?eqcx8h4@_A1FVjsQ3hYug^9E?9ZI`PS;3F&HZ>-bxK5AHTV-MEp>K6F9O zuPrS}7lxgoCniV7U+I^1Sh~bC)DP+`gbc{y%w6O3;(GK7-O>qN=_9P~(xqtWF-<@E zolibHdBp^qE~tkSzDs`$cRi6lK5T|1_mspvUL*MF0aIZZgwMd<(W6nBxx3N6EvGs_{=x_FOZ!Z@a?jy}fVXqT&nX-D2F06D5lFq;X zyk@p8Mdl?r6+6mpn8Z^8ZSMQO5i$FlXCG)#X#Afyz?zW|3=fGYEcFmMHj8tgg)A28 zjp;VXp2L9ahx4D+{oCI>3GDOKU(Z!`*S1$zsTwk%OA!D}ORufEREFJz2=i-?EtQTv r!WsMWf4xE2%Bthcfm1eozTN*BH~25V`}kPe4W~+4vCAT&XzBk40w4U` diff --git a/rostests/tests/wm_erasebkgnd/wm_erasebkgnd.cpp b/rostests/tests/wm_erasebkgnd/wm_erasebkgnd.cpp deleted file mode 100644 index b964bdf4658..00000000000 --- a/rostests/tests/wm_erasebkgnd/wm_erasebkgnd.cpp +++ /dev/null @@ -1,179 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 2 - CD-ROM (WM_ERASEBKGND Demo) -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - -//*********************************************************// -// // -// SYNOPSIS: // -// This sample project demonstrates how to render // -// a background image in response to the WM_ERASEBKGND // -// message. It also shows how to create a transparent // -// static (text) control by handling the // -// WM_CTLCOLORSTATIC message. // -// // -//*********************************************************// - - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - -HINSTANCE HInst; -HINSTANCE HPrevInst; -TCHAR *cmdline; -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam); - - -int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, - LPTSTR lpCmdLine, int nCmdShow) -{ - HInst = HInstance; - HPrevInst = HPrevInstance; - cmdline = lpCmdLine; - - WNDCLASS wc; - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = HInstance; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = - reinterpret_cast(COLOR_BTNFACE + 1); - wc.lpszClassName = WndClassName; - - if (RegisterClass(&wc)) - { - HWND HWnd = - CreateWindow(WndClassName, - TEXT("WM_ERASEBKGND Demo"), - WS_OVERLAPPEDWINDOW | WS_CAPTION | - WS_VISIBLE | WS_CLIPSIBLINGS, - CW_USEDEFAULT, CW_USEDEFAULT, 205, 85, - NULL, NULL, HInstance, NULL); - - if (HWnd) - { - ShowWindow(HWnd, nCmdShow); - UpdateWindow(HWnd); - - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} -//------------------------------------------------------------------ - - -// static text and bitmap-related variables -HWND HStatic; -HDC HMemDC; -HBITMAP HBmp, HOldBmp; -const char* filename = "BACKBITMAP.BMP"; - -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam) -{ - switch (Msg) - { - case WM_CREATE: - { - HStatic = - CreateWindow(TEXT("STATIC"), TEXT("Static Text"), - WS_CHILD | WS_VISIBLE | SS_CENTER, - 10, 20, 175, 30, - HWnd, NULL, HInst, NULL); - - // create a memory DC compatible with the screen - HMemDC = CreateCompatibleDC(NULL); - if (HMemDC) - { - // load a DDB from file - HBmp = static_cast( - LoadImage(HInst, filename, IMAGE_BITMAP, - 0, 0, LR_LOADFROMFILE) - ); - if (HBmp) - { - // associate the DDB with the memory DC - HOldBmp = static_cast( - SelectObject(HMemDC, HBmp) - ); - } - } - } - case WM_CTLCOLORSTATIC: - { - if (reinterpret_cast(LParam) == HStatic) - { - HDC HStaticDC = reinterpret_cast(WParam); - SetBkMode(HStaticDC, TRANSPARENT); - - return reinterpret_cast( - GetStockObject(NULL_BRUSH) - ); - } - break; - } - case WM_ERASEBKGND: - { - BITMAP bmp; - if (GetObject(HBmp, sizeof(BITMAP), &bmp)) - { - RECT RClient; - GetClientRect(HWnd, &RClient); - - HDC Hdc = reinterpret_cast(WParam); - SetStretchBltMode(Hdc, COLORONCOLOR); - - // - // TODO: add palette handling code for - // palettized displays (see Chapter 9)... - // - - // render the background image - StretchBlt(Hdc, 0, 0, - RClient.right - RClient.left, - RClient.bottom - RClient.top, - HMemDC, 0, 0, bmp.bmWidth, bmp.bmHeight, - SRCCOPY); - return TRUE; - } - break; - } - case WM_DESTROY: - { - if (HBmp) - { - // free the bitmap - DeleteObject(SelectObject(HMemDC, HOldBmp)); - } - // free the memory DC - DeleteDC(HMemDC); - - PostQuitMessage(0); - return 0; - } - } - return DefWindowProc(HWnd, Msg, WParam, LParam); -} -//------------------------------------------------------------------ - - - diff --git a/rostests/tests/wm_erasebkgnd/wm_erasebkgnd.rbuild b/rostests/tests/wm_erasebkgnd/wm_erasebkgnd.rbuild deleted file mode 100644 index b37d116e302..00000000000 --- a/rostests/tests/wm_erasebkgnd/wm_erasebkgnd.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - wm_erasebkgnd.cpp - diff --git a/rostests/tests/wm_paint/wm_paint.c b/rostests/tests/wm_paint/wm_paint.c deleted file mode 100644 index 24f00aa5b9c..00000000000 --- a/rostests/tests/wm_paint/wm_paint.c +++ /dev/null @@ -1,131 +0,0 @@ - -// ------------------------------------------------------------------ -// Windows 2000 Graphics API Black Book -// Chapter 1 - Listing 1.1 (WM_PAINT Demo) -// -// Created by Damon Chandler -// Updates can be downloaded at: -// -// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu -// if you have any questions about this code. -// ------------------------------------------------------------------ - - -//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -#include -#include -//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - - -const char* WndClassName = "GMainWnd"; -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam); - - -int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance, - LPTSTR lpCmdLine, int nCmdShow) -{ - MSG msg; - WNDCLASS wc; - memset(&wc, 0, sizeof(WNDCLASS)); - - wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; - wc.lpfnWndProc = MainWndProc; - wc.hInstance = HInstance; - wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - wc.lpszClassName = WndClassName; - - if (RegisterClass(&wc)) - { - HWND HWnd = - CreateWindow(WndClassName, TEXT("WM_PAINT Demo"), - WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, 200, 150, - NULL, NULL, HInstance, NULL); - - if (HWnd) - { - ShowWindow(HWnd, nCmdShow); - UpdateWindow(HWnd); - - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - return 0; -} -//------------------------------------------------------------------ - - -LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam, - LPARAM LParam) -{ - const char* text = "Persistent Text"; - - switch (Msg) - { - case WM_PAINT: - { - // determine the invalidated area of the window - RECT RUpdate; - HDC Hdc; - GetUpdateRect(HWnd, &RUpdate, FALSE); - - // grab a handle to our window's - // common display device context - Hdc = GetDC(HWnd); -#if 0 - try -#endif - { - RECT RClient; - GetClientRect(HWnd, &RClient); - - // set the clipping region - IntersectClipRect(Hdc, RUpdate.left, RUpdate.top, - RUpdate.right, RUpdate.bottom); - - // fill the client area with the background brush - /*HBRUSH HBrush = - reinterpret_cast - (HBRUSH)(GetClassLong(HWnd, GCL_HBRBACKGROUND) - );*/ - FillRect(Hdc, &RClient, NULL); - - // render the persistent text - SetTextColor(Hdc, PALETTERGB(0, 0, 255)); - DrawText(Hdc, text, strlen(text), &RClient, - DT_CENTER | DT_VCENTER | DT_SINGLELINE); - } -#if 0 - catch (...) -#endif - { - // release the device context - ReleaseDC(HWnd, Hdc); - - // validate the update area - ValidateRect(HWnd, &RUpdate); - } - // release the device context - ReleaseDC(HWnd, Hdc); - - // validate the update area - ValidateRect(HWnd, &RUpdate); - - break; - } - case WM_DESTROY: - { - PostQuitMessage(0); - return 0; - } - } - return DefWindowProc(HWnd, Msg, WParam, LParam); -} -//------------------------------------------------------------------ - diff --git a/rostests/tests/wm_paint/wm_paint.rbuild b/rostests/tests/wm_paint/wm_paint.rbuild deleted file mode 100644 index 66e9e590f51..00000000000 --- a/rostests/tests/wm_paint/wm_paint.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - kernel32 - user32 - gdi32 - wm_paint.c - diff --git a/rostests/tests/wpickclick/wpickclick.c b/rostests/tests/wpickclick/wpickclick.c deleted file mode 100644 index 7277aeacfaf..00000000000 --- a/rostests/tests/wpickclick/wpickclick.c +++ /dev/null @@ -1,219 +0,0 @@ -/*---------------------------------------------------------------------------- -** wpickclick.c -** Utilty to pick clicks posted to Wine Windows -** -** -**--------------------------------------------------------------------------- -** Copyright 2004 Jozef Stefanka for CodeWeavers, Inc. -** Copyright 2005 Francois Gouget for CodeWeavers, Inc. -** Copyright 2005 Dmitry Timoshkov for CodeWeavers, Inc. -** -** 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 -** -**--------------------------------------------------------------------------*/ -#include -#include -#include -#include - -#include "hook.h" - - -#define APP_NAME "wpickclick.exe" - - -static BOOL (WINAPI *pInstallHooks)(HMODULE hdll); -static void (WINAPI *pRemoveHooks)(); -static action_t* (WINAPI *pGetAction)(); -static void (WINAPI *pFreeAction)(action_t* action); - - -/* - * Provide some basic debugging support. - */ -#ifdef __GNUC__ -#define __PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args))) -#else -#define __PRINTF_ATTR(fmt,args) -#endif -static int debug_on=0; -static int init_debug() -{ - char* str=getenv("CXTEST_DEBUG"); - if (str && strstr(str, "+hook")) - debug_on=1; - return debug_on; -} - -static void cxlog(const char* format, ...) __PRINTF_ATTR(1,2); -static void cxlog(const char* format, ...) -{ - va_list valist; - - if (debug_on) - { - va_start(valist, format); - vfprintf(stderr, format, valist); - va_end(valist); - } -} - -static HINSTANCE load_hook_dll() -{ - HINSTANCE hinstDll; - char dllpath[MAX_PATH]; - char* p; - - hinstDll=LoadLibrary("hook.dll"); - if (hinstDll != NULL) - return hinstDll; - - if (!GetModuleFileName(NULL,dllpath,sizeof(dllpath))) - return NULL; - - p=strrchr(dllpath,'\\'); - if (!p) - return NULL; - *p='\0'; - p=strrchr(dllpath,'\\'); - if (!p) - return NULL; - *p='\0'; - strcat(dllpath,"\\hookdll\\hook.dll"); - hinstDll=LoadLibrary(dllpath); - return hinstDll; -} - -char* cleanup(char* str) -{ - char* s; - - while (*str==' ' || *str=='\t' || *str=='\r' || *str=='\n') - str++; - s=strchr(str,'\n'); - if (!s) - s=str+strlen(str)-1; - while (s>str && (*s==' ' || *s=='\t' || *s=='\r' || *s=='\n')) - s--; - *(s+1)='\0'; - return str; -} - -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, - LPSTR lpCmdLine, int nCmdShow) -{ - HINSTANCE hDll; - action_t* action; - - init_debug(); - - /* Our scripts expect Unix-style line ends */ - _setmode(1,_O_BINARY); - _setmode(2,_O_BINARY); - - if (strstr(lpCmdLine,"--help")) - { - fprintf(stderr,"%s - Utility to print coordinates, component, window title, component class and window class name of a click\n", APP_NAME); - fprintf(stderr,"----------------------------------------------\n"); - fprintf(stderr,"Usage: %s\n",APP_NAME); - fprintf(stderr,"The options are as follows:\n"); - fprintf(stderr,"After starting you can\n"); - fprintf(stderr,"select where to click. If we properly track the click, it will be reported\n"); - fprintf(stderr,"in the following format:\n"); - fprintf(stderr," button-name x y component_name window_name component_class_name window_class_name\n"); - fprintf(stderr,"Note that x and y can be negative; this typically happens if you click within the\n"); - fprintf(stderr,"window manager decorations of a given window.\n"); - fprintf(stderr,"On success, %s returns 0, non zero on some failure\n",APP_NAME); - exit(0); - }; - - /* Load the hook library */ - hDll = load_hook_dll(); - if (!hDll) - { - fprintf(stderr, "Error: Unable to load 'hook.dll'\n"); - printf("failed\n"); - return 1; - } - - pInstallHooks=(void*)GetProcAddress(hDll, "InstallHooks"); - pRemoveHooks=(void*)GetProcAddress(hDll, "RemoveHooks"); - pGetAction=(void*)GetProcAddress(hDll, "GetAction"); - pFreeAction=(void*)GetProcAddress(hDll, "FreeAction"); - if (!pInstallHooks || !pRemoveHooks || !pGetAction) - { - fprintf(stderr, "Error: Unable to get the hook.dll functions (%ld)\n", - GetLastError()); - printf("failed\n"); - return 1; - } - - if (!pInstallHooks(hDll)) - { - fprintf(stderr, "Error: Unable to install the hooks (%ld)\n", - GetLastError()); - printf("failed\n"); - return 1; - } - - fprintf(stderr, "Ready for capture...\n"); - action=pGetAction(); - if (!action) - { - fprintf(stderr, "Error: GetAction() failed\n"); - printf("failed\n"); - return 1; - } - - switch (action->action) - { - case ACTION_FAILED: - printf("failed\n"); - break; - case ACTION_NONE: - printf("none\n"); - break; - case ACTION_FIND: - printf("find\n"); - break; - case ACTION_BUTTON1: - case ACTION_BUTTON2: - case ACTION_BUTTON3: - printf("button%d %ld %ld\n", action->action-ACTION_BUTTON1+1, - action->x, action->y); - break; - default: - fprintf(stderr, "Error: Unknown action %d\n",action->action); - printf("%d\n", action->action); - break; - } - printf("%s\n", action->window_class); - printf("%s\n", action->window_title); - printf("%ld\n", action->control_id); - printf("%s\n", action->control_class); - printf("%s\n", cleanup(action->control_caption)); - - cxlog("\n%s: action=%d x=%ld y=%ld\n", __FILE__, action->action, - action->x, action->y); - cxlog("window_class='%s'\n", action->window_class); - cxlog("window_title='%s'\n", action->window_title); - cxlog("control_id=%ld\n", action->control_id); - cxlog("control_class='%s'\n", action->control_class); - cxlog("control_caption='%s'\n", action->control_caption); - - pFreeAction(action); - pRemoveHooks(); - return 0; -} diff --git a/rostests/tests/wpickclick/wpickclick.rbuild b/rostests/tests/wpickclick/wpickclick.rbuild deleted file mode 100644 index a7e15426d1d..00000000000 --- a/rostests/tests/wpickclick/wpickclick.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - wpickclick.c - diff --git a/rostests/tests/zwcontinue/i386/zwcontinue.asm b/rostests/tests/zwcontinue/i386/zwcontinue.asm deleted file mode 100644 index 829fd24285b..00000000000 --- a/rostests/tests/zwcontinue/i386/zwcontinue.asm +++ /dev/null @@ -1,48 +0,0 @@ -; cpu 486 -segment .text use32 - -extern _check - -global _continuePoint -_continuePoint: - push ss - push dword 0 - pushfd - push cs - push dword _continuePoint - push ebp - - push eax - push ecx - push edx - push ebx - push esi - push edi - - push ds - push es - push fs - push gs - - ; TODO: floating point state - sub esp, 70h - - ; Debug registers - sub esp, 18h - - push dword 00010007h - - ; Fill the Esp field - lea eax, [esp+0CCh] - lea ecx, [esp+0C4h] - mov [ecx], eax - - ; Call the function that will compare the current context with the expected one - cld - push esp - call _check - - ; check() must not return - int 3 - -; EOF diff --git a/rostests/tests/zwcontinue/zwcontinue.c b/rostests/tests/zwcontinue/zwcontinue.c deleted file mode 100644 index 0b1aebaae4b..00000000000 --- a/rostests/tests/zwcontinue/zwcontinue.c +++ /dev/null @@ -1,185 +0,0 @@ -#define WIN32_LEAN_AND_MEAN -#define STRICT -#include - -#include -#include -#include -#include -#include -#include -#include - -static unsigned int nRandBytes; - -static int initrand(void) -{ - unsigned int nRandMax; - unsigned int nRandMaxBits; - time_t tLoc; - - nRandMax = RAND_MAX; - - for(nRandMaxBits = 0; nRandMax != 0; nRandMax >>= 1, ++ nRandMaxBits); - - nRandBytes = nRandMaxBits / CHAR_BIT; - - assert(nRandBytes != 0); - - srand((unsigned)(time(&tLoc) & UINT_MAX)); - - return 1; -} - -static void randbytes(void * p, size_t n) -{ - unsigned char * b; - size_t i; - int r = rand(); - - b = (unsigned char *)p; - - for(i = 0; i < n; ++ i) - { - if(i % nRandBytes == 0) - r = rand(); - - b[i] = (unsigned char)(r & UCHAR_MAX); - r >>= CHAR_BIT; - } -} - -static ULONG randULONG(void) -{ - ULONG n; - randbytes(&n, sizeof(n)); - return n; -} - -#ifdef _M_IX86 -#define ZWC_SEGMENT_BITS (0xFFFF) -#define ZWC_EFLAGS_BITS (0x3C0CD5) -#endif - -static jmp_buf jmpbuf; -static CONTEXT continueContext; - -extern void continuePoint(void); -extern void check(CONTEXT *); -extern LONG NTAPI ZwContinue(IN CONTEXT *, IN BOOLEAN); - -void check(CONTEXT * actualContext) -{ -#ifdef _M_IX86 - assert(actualContext->ContextFlags == CONTEXT_FULL); - - /* Random data segments */ - assert - ( - (actualContext->SegGs & ZWC_SEGMENT_BITS) == - (continueContext.SegGs & ZWC_SEGMENT_BITS) - ); - - assert - ( - (actualContext->SegFs & ZWC_SEGMENT_BITS) == - (continueContext.SegFs & ZWC_SEGMENT_BITS) - ); - - assert - ( - (actualContext->SegEs & ZWC_SEGMENT_BITS) == - (continueContext.SegEs & ZWC_SEGMENT_BITS) - ); - - assert - ( - (actualContext->SegDs & ZWC_SEGMENT_BITS) == - (continueContext.SegDs & ZWC_SEGMENT_BITS) - ); - - /* Integer registers */ - assert(actualContext->Edi == continueContext.Edi); - assert(actualContext->Esi == continueContext.Esi); - assert(actualContext->Ebx == continueContext.Ebx); - printf("%s %lX : %lX\n", "Edx", actualContext->Edx, continueContext.Edx); - //assert(actualContext->Edx == continueContext.Edx); - assert(actualContext->Ecx == continueContext.Ecx); - assert(actualContext->Eax == continueContext.Eax); - - /* Control registers and segments */ - assert(actualContext->Ebp == continueContext.Ebp); - assert(actualContext->Eip == continueContext.Eip); - - assert - ( - (actualContext->SegCs & ZWC_SEGMENT_BITS) == - (continueContext.SegCs & ZWC_SEGMENT_BITS) - ); - - assert - ( - (actualContext->EFlags & ZWC_EFLAGS_BITS) == - (continueContext.EFlags & ZWC_EFLAGS_BITS) - ); - - assert(actualContext->Esp == continueContext.Esp); - - assert - ( - (actualContext->SegSs & ZWC_SEGMENT_BITS) == - (continueContext.SegSs & ZWC_SEGMENT_BITS) - ); -#endif - - longjmp(jmpbuf, 1); -} - -int main(void) -{ - initrand(); - - /* First time */ - if(setjmp(jmpbuf) == 0) - { - CONTEXT bogus; - - continueContext.ContextFlags = CONTEXT_FULL; - GetThreadContext(GetCurrentThread(), &continueContext); - -#ifdef _M_IX86 - continueContext.ContextFlags = CONTEXT_FULL; - - /* Fill the integer registers with random values */ - continueContext.Edi = randULONG(); - continueContext.Esi = randULONG(); - continueContext.Ebx = randULONG(); - continueContext.Edx = randULONG(); - continueContext.Ecx = randULONG(); - continueContext.Eax = randULONG(); - continueContext.Ebp = randULONG(); - - /* Randomize all the allowed flags (determined experimentally with WinDbg) */ - continueContext.EFlags = randULONG() & 0x3C0CD5; - - /* Randomize the stack pointer as much as possible */ - continueContext.Esp = - (ULONG)(((ULONG_PTR)&bogus) & 0xFFFFFFFF) + - sizeof(bogus) - - (randULONG() & 0xF) * 4; - - /* continuePoint() is implemented in assembler */ - continueContext.Eip = (ULONG)((ULONG_PTR)continuePoint & 0xFFFFFFF); - - /* Can't do a lot about segments */ -#endif - - ZwContinue(&continueContext, FALSE); - } - /* Second time */ - else - return 0; - - assert(0); - return 1; -} diff --git a/rostests/tests/zwcontinue/zwcontinue.rbuild b/rostests/tests/zwcontinue/zwcontinue.rbuild deleted file mode 100644 index fb58880840c..00000000000 --- a/rostests/tests/zwcontinue/zwcontinue.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - gdi32 - zwcontinue.c - diff --git a/rostests/win32/DriverLoading/Application/Application.vcproj b/rostests/win32/DriverLoading/Application/Application.vcproj deleted file mode 100644 index be8af33fd0c..00000000000 --- a/rostests/win32/DriverLoading/Application/Application.vcproj +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rostests/win32/DriverLoading/Application/DriverTester.h b/rostests/win32/DriverLoading/Application/DriverTester.h deleted file mode 100644 index b5cca46b092..00000000000 --- a/rostests/win32/DriverLoading/Application/DriverTester.h +++ /dev/null @@ -1,72 +0,0 @@ -#define _WIN32_WINNT 0x0500 -#include -#include -#include - -#define DRIVER_NAME L"TestDriver" - -#define STATUS_SUCCESS ((NTSTATUS)0x00000000L) -#define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS)0xC0000061L) - -typedef LONG NTSTATUS; - -// -// umode methods -// -BOOL RegisterDriver(LPCWSTR lpDriverName, LPCWSTR lpPathName); -BOOL StartDriver(LPCWSTR lpDriverName); -BOOL StopDriver(LPCWSTR lpDriverName); -BOOL UnregisterDriver(LPCWSTR lpDriverName); - -// -// undoc methods -// -BOOL ConvertPath(LPCWSTR lpPath, LPWSTR lpDevice); -BOOL LoadVia_SystemLoadGdiDriverInformation(LPWSTR lpDriverPath); -BOOL LoadVia_SystemExtendServiceTableInformation(LPWSTR lpDriverPath); -BOOL NtStartDriver(LPCWSTR lpService); -BOOL NtStopDriver(LPCWSTR lpService); - - -// -// undocumented stuff -// -#define SystemLoadGdiDriverInformation 26 -#define SystemExtendServiceTableInformation 38 -NTSYSAPI NTSTATUS NTAPI -NtSetSystemInformation(IN INT SystemInformationClass, - IN PVOID SystemInformation, - IN ULONG SystemInformationLength ); -NTSTATUS -NtUnloadDriver(IN PUNICODE_STRING DriverServiceName); - -typedef struct _SYSTEM_GDI_DRIVER_INFORMATION -{ - UNICODE_STRING DriverName; - PVOID ImageAddress; - PVOID SectionPointer; - PVOID EntryPoint; - PIMAGE_EXPORT_DIRECTORY ExportSectionPointer; - ULONG ImageLength; -} SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION; - -typedef enum _OBJECT_INFORMATION_CLASS { - ObjectBasicInformation, - ObjectNameInformation, - ObjectTypeInformation, - ObjectAllTypesInformation, - ObjectHandleInformation -} OBJECT_INFO_CLASS; - -NTSTATUS NtQueryObject(IN HANDLE Handle, - IN OBJECT_INFO_CLASS ObjectInformationClass, - OUT PVOID ObjectInformation, - IN ULONG ObjectInformationLength, - OUT PULONG ReturnLength); - - -typedef struct _OBJECT_NAME_INFORMATION { - UNICODE_STRING Name; -} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; - - diff --git a/rostests/win32/DriverLoading/Application/main.c b/rostests/win32/DriverLoading/Application/main.c deleted file mode 100644 index 01d856a66df..00000000000 --- a/rostests/win32/DriverLoading/Application/main.c +++ /dev/null @@ -1,157 +0,0 @@ -#include "DriverTester.h" - -static BOOL -Initialize(LPCWSTR lpDriverPath) -{ - if (!RegisterDriver(DRIVER_NAME, lpDriverPath)) - { - wprintf(L"[%lu] Failed to install %s\n", GetLastError(), DRIVER_NAME); - return FALSE; - } - - return TRUE; -} - -static BOOL -Uninitialize(LPCWSTR lpDriverPath) -{ - if (!UnregisterDriver(DRIVER_NAME)) - { - wprintf(L"[%lu] Failed to unregister %s\n", GetLastError(), DRIVER_NAME); - return FALSE; - } - - return TRUE; -} - -static BOOL -UsermodeMethod(LPCWSTR lpDriverPath) -{ - wprintf(L"\nStarting %s.sys via the SCM\n", DRIVER_NAME); - - if (!StartDriver(DRIVER_NAME)) - { - wprintf(L"[%lu] Failed to start %s\n", GetLastError(), DRIVER_NAME); - UnregisterDriver(DRIVER_NAME); - return FALSE; - } - - wprintf(L"\tStarted\n"); - - wprintf(L"Stopping %s.sys via the SCM\n", DRIVER_NAME); - - if (!StopDriver(DRIVER_NAME)) - { - wprintf(L"[%lu] Failed to stop %s\n", GetLastError(), DRIVER_NAME); - UnregisterDriver(DRIVER_NAME); - return FALSE; - } - - wprintf(L"\tStopped\n"); - - return TRUE; -} - -static BOOL -UndocumentedMethod(LPCWSTR lpDriverPath) -{ - wprintf(L"\nStarting %s.sys via native API\n", DRIVER_NAME); - - if (!NtStartDriver(DRIVER_NAME)) - { - wprintf(L"[%lu] Failed to start %s\n", GetLastError(), DRIVER_NAME); - UnregisterDriver(DRIVER_NAME); - return FALSE; - } - - wprintf(L"\tStarted\n"); - - wprintf(L"Stopping %s.sys via native API\n", DRIVER_NAME); - - if (!NtStopDriver(DRIVER_NAME)) - { - wprintf(L"[%lu] Failed to stop %s\n", GetLastError(), DRIVER_NAME); - UnregisterDriver(DRIVER_NAME); - return FALSE; - } - - wprintf(L"\tStopped\n"); - - return TRUE; -} - - -static BOOL -SneakyUndocumentedMethods(LPCWSTR lpDriverPath) -{ - WCHAR szDevice[MAX_PATH]; - - if (ConvertPath(lpDriverPath, szDevice)) - { - wprintf(L"\nStarting %s.sys via NtSetSystemInformation with SystemLoadGdiDriverInformation\n", DRIVER_NAME); - if (LoadVia_SystemLoadGdiDriverInformation(szDevice)) - { - wprintf(L"\tStarted\n"); - - NtStopDriver(DRIVER_NAME); - } - - wprintf(L"\nStarting %s.sys via NtSetSystemInformation with SystemExtendServiceTableInformation\n", DRIVER_NAME); - if (LoadVia_SystemExtendServiceTableInformation(szDevice)) - { - wprintf(L"\tStarted\n"); - - NtStopDriver(DRIVER_NAME); - } - - return TRUE; - } - - return FALSE; -} - - -int __cdecl wmain(int argc, wchar_t *argv[]) -{ - WCHAR buf[MAX_PATH]; - - if (argc != 2) - { - wprintf(L"Usage: DriverTester.exe "); - return -1; - } - - if (!SearchPathW(NULL, - argv[1], - L".sys", - MAX_PATH, - buf, - NULL)) - { - wprintf(L"%s does not exist", argv[1]); - return -1; - } - - if (Initialize(argv[1])) - { - // - // Load using conventional SCM methods - // - UsermodeMethod(argv[1]); - - // - // Load using undocumented NtLoad/UnloadDriver - // - UndocumentedMethod(argv[1]); - - // - // Load using hidden unknown methods - // - SneakyUndocumentedMethods(argv[1]); - - Uninitialize(argv[1]); - } - - return 0; -} - diff --git a/rostests/win32/DriverLoading/Application/umode.c b/rostests/win32/DriverLoading/Application/umode.c deleted file mode 100644 index 9bf10580b4c..00000000000 --- a/rostests/win32/DriverLoading/Application/umode.c +++ /dev/null @@ -1,162 +0,0 @@ -#include "DriverTester.h" - - -BOOL -RegisterDriver(LPCWSTR lpDriverName, - LPCWSTR lpPathName) -{ - SC_HANDLE hSCManager; - SC_HANDLE hService; - - hSCManager = OpenSCManagerW(NULL, - NULL, - SC_MANAGER_ALL_ACCESS); - if (!hSCManager) - return FALSE; - -retry: - hService = CreateServiceW(hSCManager, - lpDriverName, - lpDriverName, - SERVICE_ALL_ACCESS, - SERVICE_KERNEL_DRIVER, - SERVICE_DEMAND_START, - SERVICE_ERROR_NORMAL, - lpPathName, - NULL, - NULL, - NULL, - NULL, - NULL); - - if (hService) - { - CloseServiceHandle(hService); - CloseServiceHandle(hSCManager); - return TRUE; - } - else - { - DWORD err = GetLastError(); - - if (err == ERROR_SERVICE_MARKED_FOR_DELETE) - { - StopDriver(DRIVER_NAME); - goto retry; - } - - CloseServiceHandle(hSCManager); - - // return TRUE if the driver is already registered - return (err == ERROR_SERVICE_EXISTS); - } -} - -BOOL -StartDriver(LPCWSTR lpDriverName) -{ - SC_HANDLE hSCManager; - SC_HANDLE hService; - BOOL bRet; - - hSCManager = OpenSCManagerW(NULL, - NULL, - SC_MANAGER_ALL_ACCESS); - if (!hSCManager) - return FALSE; - - hService = OpenServiceW(hSCManager, - lpDriverName, - SERVICE_ALL_ACCESS); - if (!hService) - { - CloseServiceHandle(hSCManager); - return FALSE; - } - - bRet = StartServiceW(hService, 0, NULL); - if (!bRet) - { - if (GetLastError() == ERROR_SERVICE_ALREADY_RUNNING) - { - wprintf(L"%s.sys already running\n", DRIVER_NAME); - bRet = TRUE; - } - } - - CloseServiceHandle(hService); - CloseServiceHandle(hSCManager); - - return bRet; -} - -BOOL -StopDriver(LPCWSTR lpDriverName) -{ - SC_HANDLE hSCManager; - SC_HANDLE hService; - SERVICE_STATUS serviceStatus; - BOOL bRet; - - hSCManager = OpenSCManagerW(NULL, - NULL, - SC_MANAGER_ALL_ACCESS); - if (!hSCManager) - return FALSE; - - hService = OpenServiceW(hSCManager, - lpDriverName, - SERVICE_ALL_ACCESS); - if (!hService) - { - CloseServiceHandle(hSCManager); - return FALSE; - } - - bRet = ControlService(hService, - SERVICE_CONTROL_STOP, - &serviceStatus); - if (!bRet) - { - if (GetLastError() == ERROR_SERVICE_NOT_ACTIVE) - { - wprintf(L"%s.sys wasn't running\n", DRIVER_NAME); - bRet = TRUE; - } - } - - CloseServiceHandle(hService); - CloseServiceHandle(hSCManager); - - return bRet; -} - -BOOL -UnregisterDriver(LPCWSTR lpDriverName) -{ - SC_HANDLE hService; - SC_HANDLE hSCManager; - BOOL bRet; - - hSCManager = OpenSCManagerW(NULL, - NULL, - SC_MANAGER_ALL_ACCESS); - if (!hSCManager) - return FALSE; - - hService = OpenServiceW(hSCManager, - lpDriverName, - SERVICE_ALL_ACCESS); - if (!hService) - { - CloseServiceHandle(hSCManager); - return FALSE; - } - - bRet = DeleteService(hService); - - CloseServiceHandle(hService); - CloseServiceHandle(hSCManager); - - return bRet; -} diff --git a/rostests/win32/DriverLoading/Application/undoc.c b/rostests/win32/DriverLoading/Application/undoc.c deleted file mode 100644 index 6a3f8c098a6..00000000000 --- a/rostests/win32/DriverLoading/Application/undoc.c +++ /dev/null @@ -1,276 +0,0 @@ -#include "DriverTester.h" - -static BOOL -SetPrivilege(BOOL bSet) -{ - TOKEN_PRIVILEGES tp; - HANDLE hToken; - LUID luid; - - if (!OpenProcessToken(GetCurrentProcess(), - TOKEN_ADJUST_PRIVILEGES, - &hToken)) - { - return FALSE; - } - - if(!LookupPrivilegeValue(NULL, - SE_LOAD_DRIVER_NAME, - &luid)) - { - CloseHandle(hToken); - return FALSE; - } - - tp.PrivilegeCount = 1; - tp.Privileges[0].Luid = luid; - - if (bSet) - { - tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - } - else - { - tp.Privileges[0].Attributes = 0; - } - - AdjustTokenPrivileges(hToken, - FALSE, - &tp, - sizeof(TOKEN_PRIVILEGES), - NULL, - NULL); - if (GetLastError() != ERROR_SUCCESS) - { - CloseHandle(hToken); - return FALSE; - } - - CloseHandle(hToken); - - return TRUE; -} - - -BOOL -ConvertPath(LPCWSTR lpPath, - LPWSTR lpDevice) -{ - LPWSTR lpFullPath = NULL; - DWORD size; - - if (lpPath) - { - size = GetLongPathNameW(lpPath, - 0, - 0); - if (!size) - return FALSE; - - size = (size + 1) * sizeof(WCHAR); - - lpFullPath = HeapAlloc(GetProcessHeap(), - 0, - size); - if (!lpFullPath) - return FALSE; - - if (GetLongPathNameW(lpPath, - lpFullPath, - size)) - { - HANDLE hDevice; - POBJECT_NAME_INFORMATION pObjName; - NTSTATUS Status; - DWORD len; - - hDevice = CreateFileW(lpFullPath, - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - - HeapFree(GetProcessHeap(), 0, lpFullPath); - - if(hDevice == INVALID_HANDLE_VALUE) - { - wprintf(L"[%x] Failed to open %s\n", GetLastError(), DRIVER_NAME); - return FALSE; - } - - size = MAX_PATH * sizeof(WCHAR); - pObjName = HeapAlloc(GetProcessHeap(), 0, size); - if (!pObjName) - return FALSE; - - Status = NtQueryObject(hDevice, - ObjectNameInformation, - pObjName, - size, - &size); - if (Status == STATUS_SUCCESS) - { - len = pObjName->Name.Length / sizeof(WCHAR); - wcsncpy(lpDevice, pObjName->Name.Buffer, len); - lpDevice[len] = UNICODE_NULL; - - HeapFree(GetProcessHeap(), 0, pObjName); - - return TRUE; - } - - HeapFree(GetProcessHeap(), 0, pObjName); - } - } - - return FALSE; -} - - -BOOL -NtStartDriver(LPCWSTR lpService) -{ - WCHAR szDriverPath[MAX_PATH]; - UNICODE_STRING DriverPath; - NTSTATUS Status = -1; - - wcscpy(szDriverPath, - L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"); - wcscat(szDriverPath, - lpService); - - RtlInitUnicodeString(&DriverPath, - szDriverPath); - - if (SetPrivilege(TRUE)) - { - Status = NtLoadDriver(&DriverPath); - if (Status != STATUS_SUCCESS) - { - DWORD err = RtlNtStatusToDosError(Status); - wprintf(L"NtUnloadDriver failed [%lu]\n", err); - } - - SetPrivilege(FALSE); - } - - return (Status == STATUS_SUCCESS); -} - - -BOOL -NtStopDriver(LPCWSTR lpService) -{ - WCHAR szDriverPath[MAX_PATH]; - UNICODE_STRING DriverPath; - NTSTATUS Status = -1; - - wcscpy(szDriverPath, - L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\"); - wcscat(szDriverPath, - lpService); - - RtlInitUnicodeString(&DriverPath, - szDriverPath); - - if (SetPrivilege(TRUE)) - { - Status = NtUnloadDriver(&DriverPath); - if (Status != STATUS_SUCCESS) - { - DWORD err = RtlNtStatusToDosError(Status); - wprintf(L"NtUnloadDriver failed [%lu]\n", err); - } - - SetPrivilege(FALSE); - } - - return (Status == STATUS_SUCCESS); -} - - -// -// We shouldn't be able to call this from umode. -// Returns true if -// -BOOL -LoadVia_SystemLoadGdiDriverInformation(LPWSTR lpDriverPath) -{ - NTSTATUS Status; - SYSTEM_GDI_DRIVER_INFORMATION Buffer; - DWORD bufSize; - - bufSize = sizeof(SYSTEM_GDI_DRIVER_INFORMATION); - - ZeroMemory(&Buffer, bufSize); - RtlInitUnicodeString(&Buffer.DriverName, lpDriverPath); - - if (SetPrivilege(TRUE)) - { - Status = NtSetSystemInformation(SystemLoadGdiDriverInformation, - &Buffer, - bufSize); - if (Status == STATUS_PRIVILEGE_NOT_HELD) - { - wprintf(L"SystemLoadGdiDriverInformation can only be used in kmode.\n"); - } - else if (Status == STATUS_SUCCESS) - { - wprintf(L"SystemLoadGdiDriverInformation incorrectly loaded the driver\n"); - NtUnloadDriver(&Buffer.DriverName); - - return TRUE; - } - else - { - DWORD err = RtlNtStatusToDosError(Status); - wprintf(L"LoadVia_SystemLoadGdiDriverInformation failed [%lu]\n", err); - } - - SetPrivilege(FALSE); - } - - return FALSE; -} - - -BOOL -LoadVia_SystemExtendServiceTableInformation(LPWSTR lpDriverPath) -{ - NTSTATUS Status; - UNICODE_STRING Buffer; - DWORD bufSize; - - RtlInitUnicodeString(&Buffer, lpDriverPath); - bufSize = sizeof(UNICODE_STRING); - - if (SetPrivilege(TRUE)) - { - Status = NtSetSystemInformation(SystemExtendServiceTableInformation, - &Buffer, - bufSize); - if (Status == STATUS_PRIVILEGE_NOT_HELD) - { - wprintf(L"SystemExtendServiceTableInformation can only be used in kmode.\n"); - } - else if (Status == STATUS_SUCCESS) - { - wprintf(L"SystemExtendServiceTableInformation incorrectly loaded the driver\n"); - NtUnloadDriver(&Buffer); - - return TRUE; - } - else - { - DWORD err = RtlNtStatusToDosError(Status); - wprintf(L"LoadVia_SystemExtendServiceTableInformation failed [%lu] - 0x%x\n", err, Status); - } - - SetPrivilege(FALSE); - } - - return FALSE; -} - diff --git a/rostests/win32/DriverLoading/Driver/Driver.vcproj b/rostests/win32/DriverLoading/Driver/Driver.vcproj deleted file mode 100644 index ed3acacdf0f..00000000000 --- a/rostests/win32/DriverLoading/Driver/Driver.vcproj +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rostests/win32/DriverLoading/Driver/driver.c b/rostests/win32/DriverLoading/Driver/driver.c deleted file mode 100644 index 8d2e56182a8..00000000000 --- a/rostests/win32/DriverLoading/Driver/driver.c +++ /dev/null @@ -1,18 +0,0 @@ -#include - -VOID -DriverUnload(PDRIVER_OBJECT pDriverObject) -{ - DbgPrint("Test driver unloaded sucessfully\n"); -} - -NTSTATUS -DriverEntry(PDRIVER_OBJECT DriverObject, - PUNICODE_STRING RegistryPath) -{ - DriverObject->DriverUnload = DriverUnload; - - DbgPrint("Test driver loaded sucessfully\n"); - - return STATUS_SUCCESS; -} \ No newline at end of file diff --git a/rostests/win32/DriverLoading/DriverTester.sln b/rostests/win32/DriverLoading/DriverTester.sln deleted file mode 100644 index 8be28b2176e..00000000000 --- a/rostests/win32/DriverLoading/DriverTester.sln +++ /dev/null @@ -1,26 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Application", "Application\Application.vcproj", "{EABF0755-CD33-43CC-9062-DD5C5E0AC229}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Driver", "Driver\Driver.vcproj", "{983A51E3-3E69-4C26-B34B-7F17089CD4E3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EABF0755-CD33-43CC-9062-DD5C5E0AC229}.Debug|Win32.ActiveCfg = Debug|Win32 - {EABF0755-CD33-43CC-9062-DD5C5E0AC229}.Debug|Win32.Build.0 = Debug|Win32 - {EABF0755-CD33-43CC-9062-DD5C5E0AC229}.Release|Win32.ActiveCfg = Release|Win32 - {EABF0755-CD33-43CC-9062-DD5C5E0AC229}.Release|Win32.Build.0 = Release|Win32 - {983A51E3-3E69-4C26-B34B-7F17089CD4E3}.Debug|Win32.ActiveCfg = Debug|Win32 - {983A51E3-3E69-4C26-B34B-7F17089CD4E3}.Debug|Win32.Build.0 = Debug|Win32 - {983A51E3-3E69-4C26-B34B-7F17089CD4E3}.Release|Win32.ActiveCfg = Release|Win32 - {983A51E3-3E69-4C26-B34B-7F17089CD4E3}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/rostests/win32/cmd/cmd_test.rbuild b/rostests/win32/cmd/cmd_test.rbuild deleted file mode 100644 index 57cdf55bdec..00000000000 --- a/rostests/win32/cmd/cmd_test.rbuild +++ /dev/null @@ -1,18 +0,0 @@ - - . - include/reactos/wine - . - - - 0x0501 - rtshared - regtests - cmd_base - kernel32 - advapi32 - cmd_base - pseh - ntdll - setup.c - - diff --git a/rostests/win32/cmd/script_testsuite/lib/testlib.cmd b/rostests/win32/cmd/script_testsuite/lib/testlib.cmd deleted file mode 100644 index 5a917ab8f4a..00000000000 --- a/rostests/win32/cmd/script_testsuite/lib/testlib.cmd +++ /dev/null @@ -1,69 +0,0 @@ -:: -:: PROJECT: ReactOS CMD Testing Suite -:: LICENSE: GPL v2 or any later version -:: FILE: lib/testlib.cmd -:: PURPOSE: Library with functions available for all tests -:: COPYRIGHT: Copyright 2008 Colin Finck -:: - -:: Indicate that a test ran successfully -:_successful -set /a test_count+=1 -set /a successful_tests+=1 -goto :EOF - - -:: Indicate that a test failed -:: @param 1 Description of the test that failed -:_failed -set /a test_count+=1 -set /a failed_tests+=1 -echo Test "%~1" failed! -goto :EOF - - -:: Test whether a call succeeded -:: @param 1 The test command to run and check -:_test -%~1 - -if "%errorlevel%" == "0" ( - call :_successful -) else ( - call :_failed "%~1" -) -goto :EOF - - -:: Test whether a call failed -:: @param 1 The test command to run and check -:_testnot -%~1 - -if "%errorlevel%" == "0" ( - call :_failed "%~1" -) else ( - call :_successful -) -goto :EOF - - -:: Test the value of a variable -:: @param 1 The variable to check (like %test%) -:: @param 2 The variable name (like test) -:: @param 3 The expected result (like 5) -:: If this parameter wasn't given, _testvar checks if the variable is not "" -:_testvar -if "%~3" == "" ( - set testvar_operator=not -) else ( - set testvar_operator= -) - -if %testvar_operator% "%~1" == "%~3" ( - call :_successful -) else ( - call :_failed "if %%~2%% == %~3, actual result was %~1" -) - -goto :EOF diff --git a/rostests/win32/cmd/script_testsuite/run.cmd b/rostests/win32/cmd/script_testsuite/run.cmd deleted file mode 100644 index 57a6c1ccb29..00000000000 --- a/rostests/win32/cmd/script_testsuite/run.cmd +++ /dev/null @@ -1,43 +0,0 @@ -:: -:: PROJECT: ReactOS CMD Testing Suite -:: LICENSE: GPL v2 or any later version -:: FILE: run.cmd -:: PURPOSE: Runs the testing scripts -:: COPYRIGHT: Copyright 2008 Colin Finck -:: - -@echo off -cls -echo ReactOS CMD Testing Suite -echo ========================== -echo. - -:: Preparations -set failed_tests=0 -set successful_tests=0 -set test_count=0 - -if exist "temp\." ( - rmdir /s /q "temp" -) - -mkdir "temp" - -:: Run the tests -call :_runtest at -call :_runtest environment -call :_runtest if -call :_runtest redirect -call :_runtest set - -:: Print the summary and clean up -echo Executed %test_count% tests, %successful_tests% successful, %failed_tests% failed -rmdir /s /q "temp" -goto :EOF - -:: Functions -:_runtest -type "tests\%~1.cmd" > "temp\%~1.cmd" -type "lib\testlib.cmd" >> "temp\%~1.cmd" -call "temp\%~1.cmd" -goto :EOF diff --git a/rostests/win32/cmd/script_testsuite/tests/at.cmd b/rostests/win32/cmd/script_testsuite/tests/at.cmd deleted file mode 100644 index cf32abdce6c..00000000000 --- a/rostests/win32/cmd/script_testsuite/tests/at.cmd +++ /dev/null @@ -1,20 +0,0 @@ -:: -:: PROJECT: ReactOS CMD Testing Suite -:: LICENSE: GPL v2 or any later version -:: FILE: tests/at.cmd -:: PURPOSE: Tests for the correct parsing of the "@" character -:: COPYRIGHT: Copyright 2008 Colin Finck -:: - -:: Calling a command should work with any number of "@" characters prepended -call :_test "@echo Test >nul" -call :_test "@@echo Test >nul" - -:: Files with an "@" sign at the beginning should work as well -echo @^@echo Test > "temp\@file.cmd" -call :_test "call temp\@file.cmd >nul" - -echo ^@echo Test > "temp\@file.cmd" -call :_test "call temp\@file.cmd >nul" - -goto :EOF diff --git a/rostests/win32/cmd/script_testsuite/tests/environment.cmd b/rostests/win32/cmd/script_testsuite/tests/environment.cmd deleted file mode 100644 index fc552cc8ea2..00000000000 --- a/rostests/win32/cmd/script_testsuite/tests/environment.cmd +++ /dev/null @@ -1,47 +0,0 @@ -:: -:: PROJECT: ReactOS CMD Testing Suite -:: LICENSE: GPL v2 or any later version -:: FILE: tests/environment.cmd -:: PURPOSE: Tests for the environment (like automatically set variables) -:: COPYRIGHT: Copyright 2008 Colin Finck -:: - -:: ~0 contains the called path to the current script file -call :_testvar %~0 ~0 - -:: ~d0 contains the drive of the current script file -call :_testvar %~d0 ~d0 - -:: ~p0 contains the path of the current script file without the drive letter -call :_testvar %~p0 ~p0 - -:: ~dp0 contains the path to the current script file with the drive letter -call :_testvar %~dp0 ~dp0 - -:: ~dpf0 contains the full path to the current script file -call :_testvar %~dpf0 ~dpf0 - -:: ~n0 contains the name of the current script file without extension -call :_testvar %~n0 ~n0 - -:: ~x0 contains the extension of the current script file -call :_testvar %~x0 ~x0 - -:: ~a0 contains the attributes of the current script file -call :_testvar %~a0 ~a0 - -:: ~t0 contains the date and time of the current script file -call :_testvar "%~t0" ~t0 - -:: ~z0 contains the file size of the current script file in bytes -call :_testvar %~z0 ~z0 - -:: ~s0 and ~spf0 contain the short path to the current script file -call :_testvar %~s0 ~s0 -call :_testvar %~s0 ~s0 %~spf0% - -:: Now try to verify that the information is valid -set test_path=%~d0%~p0%~n0%~x0 -call :_testvar %test_path% test_path %~dpf0 - -goto :EOF diff --git a/rostests/win32/cmd/script_testsuite/tests/if.cmd b/rostests/win32/cmd/script_testsuite/tests/if.cmd deleted file mode 100644 index 33f6aa54c58..00000000000 --- a/rostests/win32/cmd/script_testsuite/tests/if.cmd +++ /dev/null @@ -1,26 +0,0 @@ -:: -:: PROJECT: ReactOS CMD Testing Suite -:: LICENSE: GPL v2 or any later version -:: FILE: tests/if.cmd -:: PURPOSE: Tests for the "if" command -:: COPYRIGHT: Copyright 2005 Royce Mitchell III -:: Copyright 2008 Colin Finck -:: - -:: Bugs in the if code -if not "=="=="==" call :_failed "if not "=="=="=="" -if "=="=="==" call :_successful - -if "1"=="2" ( - call :_failed "if "1"=="2"" -) else ( - call :_successful -) - -if not "1"=="1" ( - call :_failed "if "1"=="1"" -) else ( - call :_successful -) - -goto :EOF diff --git a/rostests/win32/cmd/script_testsuite/tests/redirect.cmd b/rostests/win32/cmd/script_testsuite/tests/redirect.cmd deleted file mode 100644 index 32c0eed1628..00000000000 --- a/rostests/win32/cmd/script_testsuite/tests/redirect.cmd +++ /dev/null @@ -1,28 +0,0 @@ -:: -:: PROJECT: ReactOS CMD Testing Suite -:: LICENSE: GPL v2 or any later version -:: FILE: tests/redirect.cmd -:: PURPOSE: Tests for redirections -:: COPYRIGHT: Copyright 2008 Colin Finck -:: - -:: One redirect, the file must exist -call :_test "echo moo > temp\redirect_temp.txt" -call :_test "type temp\redirect_temp.txt >nul" -call :_test "find "moo" temp\redirect_temp.txt >nul" - -:: Add the string yet another time to the file -call :_test "echo moo >> temp\redirect_temp.txt" - -set moo_temp=0 - -:: Count the moo's in the file (must be 2 now) -:: No idea why so many percent signs are necessary here :-) -call :_test "for /f "usebackq" %%%%i in (`findstr moo temp\redirect_temp.txt`) do set /a moo_temp+=1" -call :_testvar %moo_temp% moo_temp 2 - -:: Two redirects, the file in the middle mustn't exist after this call -call :_test "echo moo > temp\redirect_temp2.txt > nul" -call :_testnot "type temp\redirect_temp2.txt 2>nul" - -goto :EOF diff --git a/rostests/win32/cmd/script_testsuite/tests/set.cmd b/rostests/win32/cmd/script_testsuite/tests/set.cmd deleted file mode 100644 index 4e292bba72f..00000000000 --- a/rostests/win32/cmd/script_testsuite/tests/set.cmd +++ /dev/null @@ -1,104 +0,0 @@ -:: -:: PROJECT: ReactOS CMD Testing Suite -:: LICENSE: GPL v2 or any later version -:: FILE: tests/set.cmd -:: PURPOSE: Tests for the "set" command -:: COPYRIGHT: Copyright 2005 Royce Mitchell III -:: Copyright 2008 Colin Finck -:: - -:: Test the /A parameter -call :_test "set /a a=1" -call :_testvar %a% a 1 - -call :_test "set /a b=a" -call :_testvar %b% b 1 - -call :_test "set /a a=!5" -call :_testvar %a% a 0 - -call :_test "set /a a=!a" -call :_testvar %a% a 1 - -call :_test "set /a a=~5" -call :_testvar %a% a -6 - -call :_test "set /a a=5,a=-a" -call :_testvar %a% a -5 - -call :_test "set /a a=5*7" -call :_testvar %a% a 35 - -call :_test "set /a a=2000/10" -call :_testvar %a% a 200 - -call :_test "set /a a=42%%%%9" -call :_testvar %a% a 6 - -call :_test "set /a a=5%%2" -call :_testvar %a% a 5 - -call :_test "set /a a=42%13" -call :_testvar %a% a 423 - -call :_test "set /a a=7+9" -call :_testvar %a% a 16 - -call :_test "set /a a=9-7" -call :_testvar %a% a 2 - -set /a a=9^<^<2 -call :_testvar %a% a 36 - -set /a a=36^>^>2 -call :_testvar %a% a 9 - -set /a a=42^&9 -call :_testvar %a% a 8 - -set /a a=32^9 -call :_testvar %a% a 329 - -set /a a=32^^9 -call :_testvar %a% a 41 - -set /a a=10^|22 -call :_testvar %a% a 30 - -call :_test "set /a a=2,a*=3" -call :_testvar %a% a 6 - -call :_test "set /a a=11,a/=2" -call :_testvar %a% a 5 - -call :_test "set /a a=42,a%%%%=9" -call :_testvar %a% a 6 - -call :_test "set /a a=7,a+=9" -call :_testvar %a% a 16 - -call :_test "set /a a=9,a-=7" -call :_testvar %a% a 2 - -set /a a=42,a^&=9 -call :_testvar %a% a 8 - -set /a a=32,a^^=9 -call :_testvar %a% a 41 - -set /a a=10,a^|=22 -call :_testvar %a% a 30 - -set /a a=9,a^<^<=2 -call :_testvar %a% a 36 - -set /a a=36,a^>^>=2 -call :_testvar %a% a 9 - -call :_test "set /a a=1,2" -call :_testvar %a% a 1 - -call :_test "set /a a=(a=1,a+2)" -call :_testvar %a% a 3 - -goto :EOF diff --git a/rostests/win32/cmd/setup.c b/rostests/win32/cmd/setup.c deleted file mode 100644 index 66e28a8c8c8..00000000000 --- a/rostests/win32/cmd/setup.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2005 Casper S. Hornstrup - * - * 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. - */ -#include -#include "regtests.h" - -_SetupOnce() -{ -} diff --git a/rostests/win32/cmd/stubs.rbuild b/rostests/win32/cmd/stubs.rbuild deleted file mode 100644 index 1c964b3eb62..00000000000 --- a/rostests/win32/cmd/stubs.rbuild +++ /dev/null @@ -1,84 +0,0 @@ - - FindFirstFileA@8 - GetLastError@0 - FindNextFileA@8 - FindClose@4 - GetFileAttributesA@4 - GetCurrentDirectoryA@8 - GetFullPathNameA@16 - CloseHandle@4 - CreateFileA@28 - Beep@8 - LoadStringA@16 - SetConsoleCP@4 - SetConsoleOutputCP@4 - WaitForSingleObject@8 - ReadConsoleInputA@16 - GetTickCount@0 - GetConsoleScreenBufferInfo@8 - FillConsoleOutputAttribute@20 - FillConsoleOutputCharacterA@20 - SetConsoleCursorPosition@8 - LoadLibraryA@4 - GetProcAddress@8 - SetCurrentDirectoryA@4 - SetConsoleMode@8 - CreateProcessA@40 - GetExitCodeProcess@8 - GetConsoleOutputCP@0 - GetTempPathA@8 - GetTempFileNameA@16 - GetCurrentProcess@0 - DuplicateHandle@28 - GetFileType@4 - SetFilePointer@16 - GetTimeFormatA@24 - GetDateFormatA@24 - GetEnvironmentVariableA@12 - GenerateConsoleCtrlEvent@8 - SetConsoleCtrlHandler@8 - GetVersionExA@4 - ExitProcess@4 - GetModuleFileNameA@12 - SetEnvironmentVariableA@8 - SetConsoleTextAttribute@8 - FlushConsoleInputBuffer@4 - WriteFile@20 - FormatMessageA@28 - LocalFree@4 - GetConsoleCP@0 - GetStdHandle@4 - FreeLibrary@4 - SetLastError@4 - SetStdHandle@8 - DeleteFileA@4 - FileTimeToLocalFileTime@8 - GetVolumeInformationA@32 - RemoveDirectoryA@4 - CreateDirectoryA@8 - GetLocaleInfoA@16 - GlobalMemoryStatus@4 - GetEnvironmentStrings@0 - FreeEnvironmentStringsA@4 - LocalFree - SetLocalTime@4 - GetLocalTime@4 - SetFileAttributesA@8 - SetFileApisToOEM@0 - GetConsoleMode@8 - SetConsoleCursorInfo@8 - ReadFile@20 - SetFileTime@16 - FileTimeToSystemTime@8 - GetDiskFreeSpaceA@20 - SetVolumeLabelA@8 - SetConsoleTitleA@4 - MoveFileExA@12 - GetFileTime@16 - Sleep@4 - MoveFileA@8 - CreateSemaphoreA@16 - InterlockedIncrement@4 - InterlockedDecrement@4 - ReleaseSemaphore@12 - diff --git a/rostests/win32/kernel32/directory.rbuild b/rostests/win32/kernel32/directory.rbuild deleted file mode 100644 index 8919418f6fa..00000000000 --- a/rostests/win32/kernel32/directory.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/rostests/win32/kernel32/queuetest/queuetest.c b/rostests/win32/kernel32/queuetest/queuetest.c deleted file mode 100644 index f198465bc3a..00000000000 --- a/rostests/win32/kernel32/queuetest/queuetest.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * PROJECT: ReactOS Tests - * LICENSE: GPL - See COPYING in the top level directory - * FILE: queuetest.c - * PURPOSE: Usermode QueueUserWorkItem() testing - * PROGRAMMERS: Thomas Weidenmueller (w3seek@reactos.org) - */ - -#include -#include - -#define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040 -BOOL WINAPI QueueUserWorkItem(LPTHREAD_START_ROUTINE,PVOID,ULONG); - -#define TestProc(n) \ -DWORD CALLBACK TestProc##n(void *ctx)\ -{\ - printf("TestProc%d thread 0x%x context 0x%p\n", n, GetCurrentThreadId(), ctx);\ - return 0;\ -} - -TestProc(1) -TestProc(2) -TestProc(3) -TestProc(4) -TestProc(5) -TestProc(6) - -int __cdecl -main(int argc, char* argv[]) -{ - PVOID x = (PVOID)0x12345; - QueueUserWorkItem(TestProc1, x, 0); - QueueUserWorkItem(TestProc2, x, WT_EXECUTELONGFUNCTION); - QueueUserWorkItem(TestProc3, x, WT_EXECUTEINIOTHREAD); - QueueUserWorkItem(TestProc4, x, WT_EXECUTEINIOTHREAD | WT_EXECUTELONGFUNCTION); - QueueUserWorkItem(TestProc5, x, WT_EXECUTEINPERSISTENTTHREAD); - QueueUserWorkItem(TestProc6, x, WT_EXECUTEINPERSISTENTIOTHREAD); - Sleep(INFINITE); - return 0; -} diff --git a/rostests/win32/kernel32/queuetest/queuetest.rbuild b/rostests/win32/kernel32/queuetest/queuetest.rbuild deleted file mode 100644 index 7211e75ea32..00000000000 --- a/rostests/win32/kernel32/queuetest/queuetest.rbuild +++ /dev/null @@ -1,5 +0,0 @@ - - - kernel32 - queuetest.c - diff --git a/rostests/win32/kernel32/tests/CreateFile.c b/rostests/win32/kernel32/tests/CreateFile.c deleted file mode 100644 index 392ebd662df..00000000000 --- a/rostests/win32/kernel32/tests/CreateFile.c +++ /dev/null @@ -1,129 +0,0 @@ -#include - -#ifdef __GNUC__ -#include "regtests.h" -#define NDEBUG -#include "debug.h" - -#define TestFilename L"C:\\File" -#define TestExpectedFilename L"\\??\\" TestFilename -#define TestHandle (HANDLE) 1 - -typedef struct -{ - LPCWSTR lpFileName; - DWORD dwDesiredAccess; - DWORD dwShareMode; - LPSECURITY_ATTRIBUTES lpSecurityAttributes; - DWORD dwCreationDisposition; - DWORD dwFlagsAndAttributes; - HANDLE hTemplateFile; -} CreateFile_PARAMETERS; - -typedef struct -{ - PWCHAR ObjectName; - ACCESS_MASK DesiredAccess; - ULONG FileAttributes; - ULONG ShareAccess; - ULONG CreateDisposition; - ULONG CreateOptions; - PVOID EaBuffer; - ULONG EaLength; -} NtCreateFile_PARAMETERS; - -typedef struct -{ - CreateFile_PARAMETERS CreateFileParameters; - NtCreateFile_PARAMETERS NtCreateFileParameters; -} CreateFileTest_Parameters; - -static CreateFileTest_Parameters CreateFileTests[] = -{ - { - CreateFileParameters: - { - lpFileName: TestFilename, - dwDesiredAccess: GENERIC_ALL, - dwShareMode: FILE_SHARE_WRITE, - lpSecurityAttributes: NULL, - dwCreationDisposition: CREATE_ALWAYS, - dwFlagsAndAttributes: 0, - hTemplateFile: NULL - }, - NtCreateFileParameters: - { - ObjectName: TestExpectedFilename, - DesiredAccess: GENERIC_ALL|SYNCHRONIZE|FILE_READ_ATTRIBUTES, - FileAttributes: 0, - ShareAccess: FILE_SHARE_WRITE, - CreateDisposition: FILE_OVERWRITE_IF, - CreateOptions: FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT, - NULL, - 0 - } - } -}; - -static CreateFileTest_Parameters *CurrentTest; - -static NTSTATUS STDCALL -MockNtCreateFile(PHANDLE FileHandle, - ACCESS_MASK DesiredAccess, - POBJECT_ATTRIBUTES ObjectAttributes, - PIO_STATUS_BLOCK IoStatusBlock, - PLARGE_INTEGER AllocateSize, - ULONG FileAttributes, - ULONG ShareAccess, - ULONG CreateDisposition, - ULONG CreateOptions, - PVOID EaBuffer, - ULONG EaLength) -{ - _AssertEqualWideString(CurrentTest->NtCreateFileParameters.ObjectName, - ObjectAttributes->ObjectName->Buffer); - _AssertEqualValue(CurrentTest->NtCreateFileParameters.DesiredAccess, DesiredAccess); - _AssertEqualValue(CurrentTest->NtCreateFileParameters.FileAttributes, FileAttributes); - _AssertEqualValue(CurrentTest->NtCreateFileParameters.ShareAccess, ShareAccess); - _AssertEqualValue(CurrentTest->NtCreateFileParameters.CreateDisposition, CreateDisposition); - _AssertEqualValue(CurrentTest->NtCreateFileParameters.CreateOptions, CreateOptions); - *FileHandle = TestHandle; - return STATUS_SUCCESS; -} - -static _HOOK NtCreateFileHooks[] = -{ - {"NtCreateFile", MockNtCreateFile}, - {NULL, NULL} -}; - -static void TestFile() -{ - HANDLE FileHandle; - int index; - - _SetHooks(NtCreateFileHooks); - for (index = 0; index < sizeof(CreateFileTests) / sizeof(CreateFileTests[0]); index++) - { - CurrentTest = &CreateFileTests[index]; - FileHandle = CreateFileW(CurrentTest->CreateFileParameters.lpFileName, - CurrentTest->CreateFileParameters.dwDesiredAccess, - CurrentTest->CreateFileParameters.dwShareMode, - CurrentTest->CreateFileParameters.lpSecurityAttributes, - CurrentTest->CreateFileParameters.dwCreationDisposition, - CurrentTest->CreateFileParameters.dwFlagsAndAttributes, - CurrentTest->CreateFileParameters.hTemplateFile); - _AssertEqualValue(NO_ERROR, GetLastError()); - _AssertEqualValue(TestHandle, FileHandle); - } - _UnsetAllHooks(); -} - -static void RunTest() -{ - TestFile(); -} - -_Dispatcher(CreatefileTest, "CreateFileW") - -#endif diff --git a/rostests/win32/kernel32/tests/kernel32.rbuild b/rostests/win32/kernel32/tests/kernel32.rbuild deleted file mode 100644 index af7564c5aae..00000000000 --- a/rostests/win32/kernel32/tests/kernel32.rbuild +++ /dev/null @@ -1,24 +0,0 @@ - - - - - . - . - - - - - rtshared - regtests - kernel32_base - pseh - libcntpr - msvcrt - -lgcc - -nostartfiles - -nostdlib - setup.c - CreateFile.c - - - diff --git a/rostests/win32/kernel32/tests/setup.c b/rostests/win32/kernel32/tests/setup.c deleted file mode 100644 index 6f154f68565..00000000000 --- a/rostests/win32/kernel32/tests/setup.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include - -int -mainCRTStartup(int argc, char *argv[]) -{ - return WinMain(NULL, NULL, NULL, 0); -} - -_SetupOnce() -{ -} diff --git a/rostests/win32/kernel32/tests/stubs.rbuild b/rostests/win32/kernel32/tests/stubs.rbuild deleted file mode 100644 index 7a98daf6b9d..00000000000 --- a/rostests/win32/kernel32/tests/stubs.rbuild +++ /dev/null @@ -1,257 +0,0 @@ - - CsrCaptureParameterBuffer@16 - CsrClientCallServer@16 - CsrClientConnectToServer@0 - CsrReleaseParameterBuffer@4 - DbgUiContinue@8 - HeapAlloc@12 - HeapFree@12 - LdrAccessResource@16 - LdrDisableThreadCalloutsForDll@4 - LdrFindResource_U@16 - LdrLoadDll@16 - LdrShutdownProcess@0 - LdrShutdownThread@0 - LdrUnloadDll@4 - NtAllocateVirtualMemory@24 - NtClose@4 - NtCreateDirectoryObject@12 - NtCreateEvent@20 - NtCreateFile@44 - NtCreateKey@28 - NtCreateProcess@32 - NtCreateSection@28 - NtDelayExecution@8 - NtDeviceIoControlFile@40 - NtDuplicateObject@28 - NtFlushBuffersFile@8 - NtFlushInstructionCache@12 - NtFlushVirtualMemory@16 - NtFreeVirtualMemory@16 - NtFsControlFile@40 - NtGetContextThread@8 - NtLockVirtualMemory@16 - NtOpenDirectoryObject@12 - NtOpenEvent@12 - NtOpenFile@24 - NtOpenKey@12 - NtOpenProcess@16 - NtOpenSection@12 - NtOpenThread@16 - NtProtectVirtualMemory@20 - NtPulseEvent@8 - NtQueryDefaultLocale@8 - NtQueryDefaultUILanguage@4 - NtQueryDirectoryFile@44 - NtQueryInformationFile@20 - NtQueryInformationProcess@20 - NtQueryInformationThread@20 - NtQueryObject@20 - NtQuerySystemInformation@16 - NtQuerySystemTime@4 - NtQueryValueKey@24 - NtQueryVirtualMemory@24 - NtQueryVolumeInformationFile@20 - NtReadFile@36 - NtReadVirtualMemory@20 - NtResetEvent@8 - NtResumeThread@8 - NtSetContextThread@8 - NtSetEvent@8 - NtSetInformationFile@20 - NtSetInformationObject@16 - NtSetInformationProcess@16 - NtSetInformationThread@16 - NtSetSystemInformation@12 - NtSetSystemTime@8 - NtSignalAndWaitForSingleObject@16 - NtSuspendThread@8 - NtTerminateThread@8 - NtUnlockVirtualMemory@16 - NtUnmapViewOfSection@8 - NtWaitForMultipleObjects@20 - NtWaitForSingleObject@12 - NtWriteFile@36 - NtWriteVirtualMemory@20 - NtYieldExecution@0 - RtlAcquirePebLock@0 - RtlAnsiStringToUnicodeSize@4 - RtlBaseProcessStartRoutine - RtlCompactHeap@8 - RtlCopyUnicodeString@8 - RtlCreateHeap@24 - RtlCreateProcessParameters@40 - RtlCreateUnicodeString@8 - RtlCreateUnicodeStringFromAsciiz@8 - RtlDeleteCriticalSection@4 - RtlDestroyHeap@4 - RtlDestroyProcessParameters@4 - RtlDoesFileExists_U@4 - RtlDosPathNameToNtPathName_U@16 - RtlDosSearchPath_U@24 - RtlEnterCriticalSection@4 - RtlExpandEnvironmentStrings_U@16 - RtlFreeHeap@12 - RtlGetCurrentDirectory_U@8 - RtlGetFullPathName_U@16 - RtlGetProcessHeaps@8 - RtlImageNtHeader@4 - RtlInitCodePageTable@8 - RtlInitializeCriticalSection@4 - RtlInitUnicodeString@8 - RtlIntegerToChar@16 - RtlIntegerToUnicodeString@12 - RtlIsNameLegalDOS8Dot3@12 - RtlLeaveCriticalSection@4 - RtlLockHeap@4 - RtlNtStatusToDosError@4 - RtlOemStringToUnicodeSize@4 - RtlOemStringToUnicodeString@12 - RtlOpenCurrentUser@8 - RtlQueryEnvironmentVariable_U@12 - RtlRaiseException@4 - RtlReAllocateHeap@16 - RtlReleasePebLock@0 - RtlRosCreateUserThreadVa - RtlRosExitUserThread@4 - RtlSetCurrentDirectory_U@4 - RtlSetEnvironmentVariable@12 - RtlSetTimeZoneInformation@4 - RtlTimeFieldsToTime@8 - RtlTimeToTimeFields@8 - RtlUnicodeStringToAnsiSize@4 - RtlUnicodeStringToAnsiString@12 - RtlUnicodeStringToInteger@12 - RtlUnicodeStringToOemString@12 - RtlUnicodeToOemN@20 - RtlUnlockHeap@4 - DbgPrint - LdrFindResourceDirectory_U@16 - LdrGetDllHandle@16 - LdrGetProcedureAddress@16 - RtlCharToInteger@12 - RtlUpcaseUnicodeString@12 - RtlCreateTimerQueue@4 - ZwAllocateVirtualMemory@24 - ZwProtectVirtualMemory@20 - ZwWriteVirtualMemory@20 - RtlGetVersion@4 - RtlVerifyVersionInfo@16 - RtlNormalizeProcessParams@4 - RtlDestroyEnvironment@4 - NtCreateJobObject@12 - NtOpenJobObject@12 - NtIsProcessInJob@8 - NtAssignProcessToJobObject@8 - NtQueryInformationJobObject@20 - NtSetInformationJobObject@16 - NtTerminateJobObject@8 - NtTerminateProcess@8 - RtlRaiseStatus@4 - RtlValidateHeap@12 - RtlClearBits@12 - RtlAreBitsSet@12 - RtlFindClearBitsAndSet@12 - NtQueueApcThread@20 - NtCreateThread@32 - CsrNewThread@0 - CsrClientConnectToServer@20 - CsrCaptureMessageBuffer@16 - CsrAllocateCaptureBuffer@8 - CsrFreeCaptureBuffer@4 - RtlAllocateHeap@12 - RtlDeleteTimerQueueEx@8 - RtlDeleteTimerQueue@4 - RtlCreateTimer@28 - RtlDeleteTimer@12 - RtlUpdateTimer@16 - RtlIsTextUnicode@12 - RtlCompareUnicodeString@12 - RtlFindMessage@20 - RtlDetermineDosPathNameType_U@4 - RtlQueryProcessDebugInformation@12 - RtlDestroyQueryDebugBuffer@4 - RtlAllocateAndInitializeSid@44 - RtlLengthSid@4 - RtlCreateAcl@12 - RtlAddAccessAllowedAce@16 - RtlCreateSecurityDescriptor@8 - RtlSetDaclSecurityDescriptor@16 - RtlFreeSid@4 - RtlFreeAnsiString@4 - NtNotifyChangeDirectoryFile@36 - NtCreateSymbolicLinkObject@16 - RtlEqualUnicodeString@12 - NtQueryEaFile@36 - NtQueryDirectoryObject@28 - NlsMbCodePageTag - NlsMbOemCodePageTag - RtlxUnicodeStringToOemSize@4 - RtlMultiByteToUnicodeN@20 - NtQueryFullAttributesFile@8 - NtQuerySymbolicLinkObject@12 - RtlPrefixUnicodeString@12 - NtCreateIoCompletion@16 - NtRemoveIoCompletion@20 - NtSetIoCompletion@20 - NtCancelIoFile@8 - NtLockFile@40 - NtUnlockFile@20 - NtCreateMailslotFile@32 - NtSetValueKey@24 - NtCreateNamedPipeFile@56 - NtSetVolumeInformationFile@20 - RtlSizeHeap@12 - NtQueryEvent@20 - NtAddAtom@12 - NtDeleteAtom@4 - NtQueryPerformanceCounter@8 - RtlUnwind@16 - RtlInitializeCriticalSectionAndSpinCount@8 - NtCreateTimer@16 - NtOpenTimer@12 - NtCreateMutant@16 - NtQueryInstallUILanguage@4 - NtClearEvent@4 - NtOpenMutant@12 - NtReleaseMutant@8 - NtCreateSemaphore@20@12 - NtOpenSemaphore@12 - NtReleaseSemaphore@12 - NtMapViewOfSection@40 - RtlCreateQueryDebugBuffer@8 - RtlInitAnsiString@8 - RtlAnsiStringToUnicodeString@12 - RtlFreeUnicodeString@4 - NtCancelTimer@8 - NtSetTimer@28 - ZwMapViewOfSection@40 - ZwOpenSection@12 - ZwQuerySection@20 - ZwQuerySystemInformation@16 - ZwReadFile@36 - ZwTerminateProcess@8 - ZwClose@4 - DbgUiIssueRemoteBreakin@4 - NtOpenSymbolicLinkObject@12 - RtlxUnicodeStringToAnsiSize@4 - RtlOemToUnicodeN@20 - RtlUnicodeToMultiByteN@20 - NtFindAtom@12 - NtQueryInformationAtom@20 - RtlCreateAtomTable@8 - RtlAddAtomToAtomTable@12 - RtlDeleteAtomFromAtomTable@8 - RtlLookupAtomInAtomTable@12 - RtlQueryAtomInAtomTable@24 - ZwOpenKey@12 - ZwQueryValueKey@24 - RtlQueryRegistryValues@20 - RtlAppendUnicodeToString@8 - @RtlUshortByteSwap@4 - RtlAppendUnicodeStringToString@8 - NtFlushKey@4 - NtEnumerateValueKey@24 - RtlUpcaseUnicodeChar@4 - NtCreateSemaphore@20 - diff --git a/rostests/win32/kmtloader/kmtloader.c b/rostests/win32/kmtloader/kmtloader.c deleted file mode 100644 index d200425beb2..00000000000 --- a/rostests/win32/kmtloader/kmtloader.c +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Kernel-Mode Tests Loader (based on PnP Test Driver Loader by Filip Navara) - * - * Copyright 2004 Filip Navara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* INCLUDES *******************************************************************/ - -#include -#include - -/* PUBLIC FUNCTIONS ***********************************************************/ - -int main() -{ - SC_HANDLE schSCManager; - SC_HANDLE schService; - PWCHAR DriverName = L"KMTEST"; - WCHAR ServiceExe[MAX_PATH]; - - printf("Kernel Mode Tests loader\n\n"); - GetCurrentDirectoryW(MAX_PATH, ServiceExe); - wcscat(ServiceExe, L"\\kmtest.sys"); - - printf("Opening SC Manager...\n"); - schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - - if (schSCManager == NULL) - { - DWORD Err = GetLastError(); - printf("OpenSCManager failed with error 0x%lx\n", Err); - return 0; - } - - printf("Creating service...\n"); - schService = CreateServiceW( - schSCManager, - DriverName, - DriverName, - SERVICE_ALL_ACCESS, - SERVICE_KERNEL_DRIVER, - SERVICE_DEMAND_START, - SERVICE_ERROR_NORMAL, - ServiceExe, - NULL, - NULL, - NULL, - NULL, - NULL); - - if (schService == NULL) - { - printf("Opening service...\n"); - schService = OpenServiceW(schSCManager, DriverName, SERVICE_ALL_ACCESS); - } - - if (schService == NULL) - { - DWORD Err = GetLastError(); - printf("Create/OpenService failed with error 0x%lx\n", Err); - CloseServiceHandle(schSCManager); - return 0; - } - - //for (;;) ; - - printf("Starting service...\n"); - StartService(schService, 0, NULL); - - printf("Cleaning up and exiting\n"); - CloseServiceHandle(schService); - CloseServiceHandle(schSCManager); - - return 0; -} diff --git a/rostests/win32/kmtloader/kmtloader.rbuild b/rostests/win32/kmtloader/kmtloader.rbuild deleted file mode 100644 index 56afda216c8..00000000000 --- a/rostests/win32/kmtloader/kmtloader.rbuild +++ /dev/null @@ -1,6 +0,0 @@ - - - kernel32 - advapi32 - kmtloader.c - diff --git a/rostests/win32/loadlib/loadlib.c b/rostests/win32/loadlib/loadlib.c deleted file mode 100644 index 391795f0323..00000000000 --- a/rostests/win32/loadlib/loadlib.c +++ /dev/null @@ -1,223 +0,0 @@ -/* - * ReactOS test program - - * - * loadlib.c - * - * Copyright (C) 2002 Robert Dickenson - * - * 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. - */ - -#include -#include "loadlib.h" -#include -#include -#include - -#define APP_VERSION 1 -#define MAX_LIBS 25 - -#ifdef UNICODE -#define TARGET "UNICODE" -BOOL bUseAnsi = FALSE; -#else -#define TARGET "MBCS" -BOOL bUseAnsi = TRUE; -#endif -BOOL verbose_flagged = FALSE; -BOOL debug_flagged = FALSE; -BOOL loop_flagged = FALSE; -BOOL recursive_flagged = FALSE; - -HANDLE OutputHandle; -HANDLE InputHandle; - - -void dprintf(char* fmt, ...) -{ - va_list args; - char buffer[255]; - - va_start(args, fmt); - wvsprintfA(buffer, fmt, args); - WriteConsoleA(OutputHandle, buffer, lstrlenA(buffer), NULL, NULL); - va_end(args); -} - -long getinput(char* buf, int buflen) -{ - DWORD result; - - ReadConsoleA(InputHandle, buf, buflen, &result, NULL); - return (long)result; -} - -DWORD ReportLastError(void) -{ - DWORD dwError = GetLastError(); - if (dwError != ERROR_SUCCESS) { - PSTR msg = NULL; - if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, - 0, dwError, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (PSTR)&msg, 0, NULL)) { - if (msg != NULL) { - dprintf("ReportLastError() %d - %s\n", dwError, msg); - } else { - dprintf("ERROR: ReportLastError() %d - returned TRUE but with no msg string!\n", dwError); - } - } else { - dprintf("ReportLastError() %d - unknown error\n", dwError); - } - if (msg != NULL) { - LocalFree(msg); - } - } - return dwError; -} - -const char* appName(const char* argv0) -{ - const char* name; - - name = (const char*)strrchr(argv0, '\\'); - if (name != NULL) - return name + 1; - return argv0; -} - -int usage(const char* appName) -{ - dprintf("USAGE: %s libname [libname ...] [unicode]|[ansi] [loop][recurse]\n", appName); - dprintf("\tWhere libname(s) is one or more libraries to load.\n"); - dprintf("\t[unicode] - perform tests using UNICODE api calls\n"); - dprintf("\t[ansi] - perform tests using ANSI api calls\n"); - dprintf("\t default is %s\n", TARGET); - dprintf("\t[loop] - run test process in continuous loop\n"); - dprintf("\t[recurse] - load libraries recursively rather than sequentually\n"); - dprintf("\t[debug] - enable debug mode (unused)\n"); - dprintf("\t[verbose] - enable verbose output (unused)\n"); - return 0; -} - -DWORD LoadLibraryList(char** libnames, int counter, BOOL bUseAnsi) -{ - HMODULE hModule; - - dprintf("Attempting to LoadLibrary"); - if (bUseAnsi) { - dprintf("A(%s) - ", *libnames); - hModule = LoadLibraryA(*libnames); - } else { - int len; - wchar_t libnameW[500]; - len = mbstowcs(libnameW, *libnames, strlen(*libnames)); - if (len) { - libnameW[len] = L'\0'; - dprintf("W(%S) - ", libnameW); - hModule = LoadLibraryW(libnameW); - } else { - return ERROR_INVALID_PARAMETER; - } - } - if (hModule == NULL) { - dprintf("\nERROR: failed to obtain handle to module %s - %x\n", *libnames, hModule); - return ReportLastError(); - } - dprintf("%x\n", hModule); - - if (counter--) { - LoadLibraryList(++libnames, counter, bUseAnsi); - } - - if (!FreeLibrary(hModule)) { - dprintf("ERROR: failed to free module %s - %x\n", *libnames, hModule); - return ReportLastError(); - } else { - dprintf("FreeLibrary(%x) - successfull.\n", hModule); - } - return 0L; -} - -int __cdecl main(int argc, char* argv[]) -{ - char* libs[MAX_LIBS]; - int lib_count = 0; - int result = 0; - int i = 0; - - AllocConsole(); - InputHandle = GetStdHandle(STD_INPUT_HANDLE); - OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE); - - dprintf("%s application - build %03d (default: %s)\n", appName(argv[0]), APP_VERSION, TARGET); - if (argc < 2) { - /*return */usage(appName(argv[0])); - } - memset(libs, 0, sizeof(libs)); - for (i = 1; i < argc; i++) { - if (lstrcmpiA(argv[i], "ansi") == 0) { - bUseAnsi = TRUE; - } else if (lstrcmpiA(argv[i], "unicode") == 0) { - bUseAnsi = FALSE; - } else if (lstrcmpiA(argv[i], "loop") == 0) { - loop_flagged = 1; - } else if (lstrcmpiA(argv[i], "recurse") == 0) { - recursive_flagged = 1; - } else if (lstrcmpiA(argv[i], "verbose") == 0) { - verbose_flagged = 1; - } else if (lstrcmpiA(argv[i], "debug") == 0) { - debug_flagged = 1; - } else { - if (lib_count < MAX_LIBS) { - libs[lib_count] = argv[i]; - ++lib_count; - } - } - } - if (lib_count) { - do { - if (recursive_flagged) { - result = LoadLibraryList(libs, lib_count - 1, bUseAnsi); - } else { - for (i = 0; i < lib_count; i++) { - result = LoadLibraryList(&libs[i], 0, bUseAnsi); - //if (result != 0) break; - } - } - } while (loop_flagged); - } else { - int len; - char buffer[500]; - do { - dprintf("\nEnter library name to attempt loading: "); - len = getinput(buffer, sizeof(buffer) - 1); - if (len > 2) { - char* buf = buffer; - buffer[len-2] = '\0'; - result = LoadLibraryList(&buf, 0, bUseAnsi); - } else break; - } while (!result && len); - } - dprintf("finished\n"); - return result; -} - - -#ifdef _NOCRT -char* args[] = { "loadlib.exe", "advapi32.dll", "user32.dll", "recurse"}; -int __cdecl mainCRTStartup(void) -{ - return main(3, args); -} -#endif /*__GNUC__*/ diff --git a/rostests/win32/loadlib/loadlib.h b/rostests/win32/loadlib/loadlib.h deleted file mode 100644 index c4b4acdb8c6..00000000000 --- a/rostests/win32/loadlib/loadlib.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * ReactOS test program - - * - * loadlib.h - * - * Copyright (C) 2002 Robert Dickenson - * - * 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. - */ - -#ifndef __LOADLIB_H__ -#define __LOADLIB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -extern BOOL verbose_flagged; -extern BOOL debug_flagged; -extern BOOL loop_flagged; -extern BOOL recursive_flagged; - -DWORD ReportLastError(void); -long getinput(char* Buffer, int buflen); -void dprintf(char* fmt, ...); - - -#ifdef __cplusplus -}; -#endif - -#endif // __LOADLIB_H__ diff --git a/rostests/win32/msvcrt/fileio/_tfileio.c b/rostests/win32/msvcrt/fileio/_tfileio.c deleted file mode 100644 index e140dc3b87d..00000000000 --- a/rostests/win32/msvcrt/fileio/_tfileio.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - * ReactOS test program - - * - * _tfileio.c - * - * Copyright (C) 2002 Robert Dickenson - * - * 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. - */ - -#define WIN32_LEAN_AND_MEAN -#include -#include -#include -#include - - -#ifdef UNICODE -#define _tfopen _wfopen -#define _tunlink _wunlink -#define _TEOF WEOF -#define _gettchar getwchar -#define _puttchar putwchar -#define _THEX_FORMAT _T("0x%04x ") -#else /*UNICODE*/ -#define _tfopen fopen -#define _tunlink _unlink -#define _TEOF EOF -#define _gettchar getchar -#define _puttchar putchar -#define _THEX_FORMAT "0x%02x " -#endif /*UNICODE*/ - - -#define TEST_BUFFER_SIZE 200 -#define TEST_FILE_LINES 4 - -extern BOOL verbose_flagged; -extern BOOL status_flagged; - -static TCHAR test_buffer[TEST_BUFFER_SIZE]; - -static TCHAR dos_data[] = _T("line1: this is a bunch of readable text.\r\n")\ - _T("line2: some more printable text and punctuation !@#$%^&*()\r\n")\ - _T("line3: followed up with some numerals 1234567890\r\n")\ - _T("line4: done.\r\n"); - -static TCHAR nix_data[] = _T("line1: this is a bunch of readable text.\n")\ - _T("line2: some more printable text and punctuation !@#$%^&*()\n")\ - _T("line3: followed up with some numerals 1234567890\n")\ - _T("line4: done.\n"); - -#ifdef UNICODE -#define TEST_B1_FILE_SIZE ((((sizeof(dos_data)/2)-1)+TEST_FILE_LINES)/2) // (166+4)/2=85 -#define TEST_B2_FILE_SIZE (((sizeof(dos_data)/2)-1)*2) // (166*2) =332 -#define TEST_B3_FILE_SIZE ((((sizeof(nix_data)/2)-1)+TEST_FILE_LINES)/2) // (162+4)/2=83 -#define TEST_B4_FILE_SIZE (((sizeof(nix_data)/2)-1)*2) // (162*2) =324 -#else /*UNICODE*/ -#define TEST_B1_FILE_SIZE (sizeof(dos_data)-1+TEST_FILE_LINES) // (166+4)=170 -#define TEST_B2_FILE_SIZE (sizeof(dos_data)-1-TEST_FILE_LINES) // (166-4)=162 -#define TEST_B3_FILE_SIZE (sizeof(nix_data)-1+TEST_FILE_LINES) // (162+4)=166 -#define TEST_B4_FILE_SIZE (sizeof(nix_data)-1) // (162) =162 -#endif /*UNICODE*/ - - -// result = create_test_file(file_name, _T("wb"), _T("rb"), file_data); - -static BOOL test_file_truncate(TCHAR* file_name) -{ - BOOL result = FALSE; - int count = -1; - int error_code; - TCHAR ch; - TCHAR* file_data = _T("this file should have been truncated to zero bytes..."); - FILE *file = _tfopen(file_name, _T("wb")); - - if (verbose_flagged) { - _tprintf(_T("test_file_truncate(\"%s\")\n"), file_name); - } - - if (file != NULL) { - if (_fputts(file_data, file) != _TEOF) { - } else { - _tprintf(_T("ERROR: failed to write data to file \"%s\"\n"), file_name); - _tprintf(_T("ERROR: ferror returned %d\n"), ferror(file)); - } - fclose(file); - } else { - _tprintf(_T("ERROR: failed to open/create file \"%s\" for output\n"), file_name); - _tprintf(_T("ERROR: ferror returned %d\n"), ferror(file)); - } - - file = _tfopen(file_name, _T("wb")); - if (file != NULL) { - error_code = ferror(file); - if (error_code) { - _tprintf(_T("ERROR: (%s) ferror returned %d\n"), file_name, error_code); - } - fclose(file); - } else { - _tprintf(_T("ERROR: (%s) failed to open file for truncating\n"), file_name); - } - - file = _tfopen(file_name, _T("rb")); - if (file != NULL) { - count = 0; - while ((ch = _fgettc(file)) != _TEOF) { - if (verbose_flagged) { - _tprintf(_THEX_FORMAT, ch); - } - ++count; - } - error_code = ferror(file); - if (error_code) { - _tprintf(_T("ERROR: (%s) ferror returned %d after reading\n"), file_name, error_code); - perror("Read error"); - } - fclose(file); - } else { - _tprintf(_T("ERROR: (%s) failed to open file for reading\n"), file_name); - } - if (count) { - result = TRUE; - } - return result; -} - -static BOOL create_output_file(TCHAR* file_name, TCHAR* file_mode, TCHAR* file_data) -{ - BOOL result = FALSE; - FILE *file = _tfopen(file_name, file_mode); - if (file != NULL) { - if (_fputts(file_data, file) != _TEOF) { - result = TRUE; - } else { - _tprintf(_T("ERROR: failed to write data to file \"%s\"\n"), file_name); - _tprintf(_T("ERROR: ferror returned %d\n"), ferror(file)); - } - fclose(file); - } else { - _tprintf(_T("ERROR: failed to open/create file \"%s\" for output\n"), file_name); - _tprintf(_T("ERROR: ferror returned %d\n"), ferror(file)); - } - return result; -} - -static BOOL verify_output_file(TCHAR* file_name, TCHAR* file_mode, TCHAR* file_data) -{ - int error_code; - int offset = 0; - int line_num = 0; - BOOL result = FALSE; - BOOL error_flagged = FALSE; - FILE* file = _tfopen(file_name, file_mode); - if (file == NULL) { - _tprintf(_T("ERROR: (%s) Can't open file for reading\n"), file_name); - _tprintf(_T("ERROR: ferror returned %d\n"), ferror(file)); - return FALSE; - } else if (status_flagged) { - _tprintf(_T("STATUS: (%s) opened file for reading\n"), file_name); - } - while (_fgetts(test_buffer, TEST_BUFFER_SIZE, file)) { - int length = _tcslen(test_buffer); - int req_len = _tcschr(file_data+offset, _T('\n')) - (file_data+offset) + 1; - - ++line_num; - if (length > req_len) { - _tprintf(_T("ERROR: read excess bytes from line %d, length %d, but expected %d\n"), line_num, length, req_len); - error_flagged = TRUE; - break; - } - if (length < req_len) { - _tprintf(_T("ERROR: read to few bytes from line %d, length %d, but expected %d\n"), line_num, length, req_len); - error_flagged = TRUE; - break; - } - if (status_flagged) { - _tprintf(_T("STATUS: Verifying %d bytes read from line %d\n"), length, line_num); - } - if (_tcsncmp(test_buffer, file_data+offset, length - 1) == 0) { - result = TRUE; - } else { - if (status_flagged) { - int i; - _tprintf(_T("WARNING: (%s) failed to verify file\n"), file_name); - for (i = 0; i < length; i++) { - if (file_data[offset+i] != test_buffer[i]) { - _tprintf(_T("line %d, offset %d expected: 0x%04x found: 0x%04x\n"), line_num, i, (int)file_data[offset+i], (int)test_buffer[i]); - } - } - _tprintf(_T("\n")); - } else { - error_flagged = TRUE; - } - } - offset += length; - } - error_code = ferror(file); - if (error_code) { - _tprintf(_T("ERROR: (%s) ferror returned %d after reading\n"), file_name, error_code); - perror("Read error"); - } - if (!line_num) { - _tprintf(_T("ERROR: (%s) failed to read from file\n"), file_name); - } - if (error_flagged == TRUE) { - _tprintf(_T("ERROR: (%s) failed to verify file\n"), file_name); - result = FALSE; - } - fclose(file); - return result; -} - -static int create_test_file(TCHAR* file_name, TCHAR* write_mode, TCHAR* read_mode, TCHAR* file_data) -{ - if (status_flagged) { - _tprintf(_T("STATUS: Attempting to create output file %s\n"), file_name); - } - if (create_output_file(file_name, write_mode, file_data)) { - if (status_flagged) { - _tprintf(_T("STATUS: Attempting to verify output file %s\n"), file_name); - } - if (verify_output_file(file_name, read_mode, file_data)) { - if (status_flagged) { - _tprintf(_T("SUCCESS: %s verified ok\n"), file_name); - } - } else { - //_tprintf(_T("ERROR: failed to verify file %s\n"), file_name); - return 2; - } - } else { - _tprintf(_T("ERROR: failed to create file %s\n"), file_name); - return 1; - } - return 0; -} - -static int check_file_size(TCHAR* file_name, TCHAR* file_mode, int expected) -{ - int count = 0; - FILE* file; - TCHAR ch; - int error_code; - - if (status_flagged) { - //_tprintf(_T("STATUS: (%s) checking for %d bytes in %s mode\n"), file_name, expected, _tcschr(file_mode, _T('b')) ? _T("binary") : _T("text")); - _tprintf(_T("STATUS: (%s) checking for %d bytes with mode %s\n"), file_name, expected, file_mode); - } - file = _tfopen(file_name, file_mode); - if (file == NULL) { - _tprintf(_T("ERROR: (%s) failed to open file for reading\n"), file_name); - return 1; - } - while ((ch = _fgettc(file)) != _TEOF) { - if (verbose_flagged) { - _tprintf(_THEX_FORMAT, ch); - } - ++count; - } - error_code = ferror(file); - if (error_code) { - _tprintf(_T("ERROR: (%s) ferror returned %d after reading\n"), file_name, error_code); - perror("Read error"); - } - - if (verbose_flagged) { -// _puttc(_T('\n'), stdout); - } - fclose(file); - if (count == expected) { - if (status_flagged) { - _tprintf(_T("PASSED: (%s) read %d bytes\n"), file_name, count); - } - } else { - _tprintf(_T("FAILED: (%s) read %d bytes but expected %d using mode \"%s\"\n"), file_name, count, expected, file_mode); - } - return (count == expected) ? 0 : -1; -} - -static int test_console_io(void) -{ - TCHAR buffer[81]; - TCHAR ch; - int i, j; - - _tprintf(_T("Enter a line for echoing:\n")); - - //for (i = 0; (i < 80) && ((ch = _gettchar()) != _TEOF) && (ch != _T('\n')); i++) { - for (i = 0; (i < 80) && ((ch = _gettc(stdin)) != _TEOF) && (ch != _T('\n')); i++) { - buffer[i] = (TCHAR)ch; - } - buffer[i] = _T('\0'); - for (j = 0; j < i; j++) { - _puttc(buffer[j], stdout); - } - _puttc(_T('\n'), stdout); - _tprintf(_T("%s\n"), buffer); - return 0; -} - -static int test_console_getchar(void) -{ - int result = 0; - TCHAR ch; - - _tprintf(_T("Enter lines for dumping or to finish:\n")); - - //while ((ch = _gettchar()) != _TEOF) { - while ((ch = _gettc(stdin)) != _TEOF) { - _tprintf(_THEX_FORMAT, ch); - //printf("0x%04x ", ch); - } - return result; -} - -static int test_console_putch(void) -{ - int result = 0; - - _putch('1'); - _putch('@'); - _putch('3'); - _putch(':'); - _putch('\n'); - _putch('a'); - _putch('B'); - _putch('c'); - _putch(':'); - _putch('\n'); - return result; -} - -static int test_unlink_files(void) -{ - int result = 0; - - //printf("sizeof dos_data: %d\n", sizeof(dos_data)); - //printf("sizeof nix_data: %d\n", sizeof(nix_data)); - - result |= _tunlink(_T("binary.dos")); - result |= _tunlink(_T("binary.nix")); - result |= _tunlink(_T("text.dos")); - result |= _tunlink(_T("text.nix")); - return result; -} - -static int test_text_fileio(TCHAR* file_name, TCHAR* file_data, int tsize, int bsize) -{ - int result = 0; - - result = create_test_file(file_name, _T("w"), _T("r"), file_data); - result = check_file_size(file_name, _T("r"), tsize); - result = check_file_size(file_name, _T("rb"), bsize); - return result; -} - -static int test_binary_fileio(TCHAR* file_name, TCHAR* file_data, int tsize, int bsize) -{ - int result = 0; - - result = create_test_file(file_name, _T("wb"), _T("rb"), file_data); - result = check_file_size(file_name, _T("r"), tsize); - result = check_file_size(file_name, _T("rb"), bsize); - return result; -} - -static int test_files(int test_num, char* type) -{ - int result = 0; - - printf("performing test: %d (%s)\n", test_num, type); - - - if (test_file_truncate(_T("zerosize.foo"))) { - printf("System unable to truncate files yet, unlinking:\n"); - test_unlink_files(); - } - - switch (test_num) { - case 1: - result = test_text_fileio(_T("text.dos"), dos_data, 166, TEST_B1_FILE_SIZE); - break; - case 2: - result = test_binary_fileio(_T("binary.dos"), dos_data, TEST_B2_FILE_SIZE, 166); - break; - case 3: - result = test_text_fileio(_T("text.nix"), nix_data, 162, TEST_B3_FILE_SIZE); - break; - case 4: - result = test_binary_fileio(_T("binary.nix"), nix_data, TEST_B4_FILE_SIZE, 162); - break; - case 5: - result = test_console_io(); - break; - case 6: - result = test_console_getchar(); - break; - case 7: - result = test_console_putch(); - break; - case -1: - result = test_unlink_files(); - break; - default: - _tprintf(_T("no test number selected\n")); - break; - } - return result; -} diff --git a/rostests/win32/msvcrt/fileio/fileio.c b/rostests/win32/msvcrt/fileio/fileio.c deleted file mode 100644 index dd6659bf86a..00000000000 --- a/rostests/win32/msvcrt/fileio/fileio.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * ReactOS test program - - * - * _fileio.c - * - * Copyright (C) 2002 Robert Dickenson - * - * 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. - */ - -#undef UNICODE -#undef _UNICODE -#include "_tfileio.c" - - -int run_ansi_tests(int test_num) -{ - return test_files(test_num, "ANSI"); -} diff --git a/rostests/win32/msvcrt/fileio/main.c b/rostests/win32/msvcrt/fileio/main.c deleted file mode 100644 index 3ac8f0a70c8..00000000000 --- a/rostests/win32/msvcrt/fileio/main.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * ReactOS test program - - * - * main.c - * - * Copyright (C) 2002 Robert Dickenson - * - * 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. - */ - -#define WIN32_LEAN_AND_MEAN -#include -#include -#include -#include -#include - -#include "main.h" - - -#define VERSION 1 - -#ifdef UNICODE -#define TARGET "UNICODE" -#else -#define TARGET "MBCS" -#endif - -BOOL verbose_flagged = 0; -BOOL status_flagged = 0; - -int usage(char* argv0) -{ - printf("USAGE: %s test_id [unicode]|[ansi] [clean]|[status][verbose]\n", argv0); - printf("\tWhere test_id is one of:\n"); - printf("\t0 - (default) regression mode, run tests 1-4 displaying failures only\n"); - printf("\t1 - Write DOS style eol data to file in text mode (text.dos)\n"); - printf("\t2 - Write NIX style eol data to file in binary mode (binary.dos)\n"); - printf("\t3 - Write DOS style eol data to file in text mode (text.nix)\n"); - printf("\t4 - Write NIX style eol data to file in binary mode (binary.nix)\n"); - printf("\t5 - Echo console line input\n"); - printf("\t6 - Dump console line input in hex format\n"); - printf("\t7 - The source code is your friend\n"); - printf("\t[unicode] - perform tests using UNICODE versions of library functions\n"); - printf("\t[ansi] - perform tests using ANSI versions of library functions\n"); - printf("\t If neither unicode or ansi is specified build default is used\n"); - printf("\t[clean] - delete all temporary test output files\n"); - printf("\t[status] - enable extra status display while running\n"); - printf("\t[verbose] - enable verbose output when running\n"); - return 0; -} - -int __cdecl main(int argc, char* argv[]) -{ - int test_num = 0; - int version = 0; - int result = 0; - int i = 0; - - printf("%s test application - build %03d (default: %s)\n", argv[0], VERSION, TARGET); - if (argc < 2) { - return usage(argv[0]); - } - for (i = 1; i < argc; i++) { - if (strstr(argv[i], "ansi") || strstr(argv[i], "ANSI")) { - version = 1; - } else if (strstr(argv[i], "unicode") || strstr(argv[i], "UNICODE")) { - version = 2; - } else if (strstr(argv[i], "clean") || strstr(argv[i], "CLEAN")) { - test_num = -1; - } else if (strstr(argv[i], "verbose") || strstr(argv[i], "VERBOSE")) { - verbose_flagged = 1; - } else if (strstr(argv[i], "status") || strstr(argv[i], "STATUS")) { - status_flagged = 1; - } else { - test_num = atoi(argv[1]); - //if (test_num < 0 - } - } - for (i = test_num; i <= test_num; i++) { - if (!test_num) { - test_num = 4; - i = 1; - } - switch (version) { - case 1: - result = run_ansi_tests(i); - break; - case 2: - result = run_unicode_tests(i); - break; - default: - result = run_ansi_tests(i); - result = run_unicode_tests(i); - break; - } - } - printf("finished\n"); - return result; -} - -#ifndef __GNUC__ - -char* args[] = { "fileio.exe", "0", "unicode", "verbose"}; - -int __cdecl mainCRTStartup(void) -{ - main(2, args); - return 0; -} - -#endif /*__GNUC__*/ diff --git a/rostests/win32/msvcrt/fileio/main.h b/rostests/win32/msvcrt/fileio/main.h deleted file mode 100644 index df22b72516d..00000000000 --- a/rostests/win32/msvcrt/fileio/main.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * ReactOS test program - - * - * main.h - * - * Copyright (C) 2002 Robert Dickenson - * - * 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. - */ - -#ifndef __MAIN_H__ -#define __MAIN_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -int app_main(int argc, char* argv[]); -DWORD GetInput(char* Buffer, int buflen); - -int test_ansi_files(int test_num); -int test_unicode_files(int test_num); - - -#ifdef __cplusplus -}; -#endif - -#endif // __MAIN_H__ diff --git a/rostests/win32/msvcrt/fileio/wfileio.c b/rostests/win32/msvcrt/fileio/wfileio.c deleted file mode 100644 index 1f8fe376a71..00000000000 --- a/rostests/win32/msvcrt/fileio/wfileio.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * ReactOS test program - - * - * wfileio.c - * - * Copyright (C) 2002 Robert Dickenson - * - * 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. - */ - -#define UNICODE -#define _UNICODE -#include "_tfileio.c" - - -int run_unicode_tests(int test_num) -{ - return test_files(test_num, "UNICODE"); -} diff --git a/rostests/win32/rpcrt4/context_handles/client.c b/rostests/win32/rpcrt4/context_handles/client.c deleted file mode 100644 index 5540cfd26a5..00000000000 --- a/rostests/win32/rpcrt4/context_handles/client.c +++ /dev/null @@ -1,457 +0,0 @@ -#include -#include -#include -#include "ctx.h" - -#define TYPE_FORMAT_STRING_SIZE 23 -#define PROC_FORMAT_STRING_SIZE 21 -#define TRANSMIT_AS_TABLE_SIZE 0 -#define WIRE_MARSHAL_TABLE_SIZE 0 - -typedef struct _MIDL_TYPE_FORMAT_STRING - { - short Pad; - unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; - } MIDL_TYPE_FORMAT_STRING; - -typedef struct _MIDL_PROC_FORMAT_STRING - { - short Pad; - unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; -} MIDL_PROC_FORMAT_STRING; - -extern const MIDL_STUB_DESC hello_StubDesc; -extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString; -//extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;*/ - -/***************************************************************** - * Modified from midl-generated stubs * - *****************************************************************/ - - -void m_CtxOpen( - /* [out] */ PCTXTYPE __RPC_FAR *pphContext, - /* [in] */ long Value) -{ - RPC_BINDING_HANDLE _Handle = 0; - - RPC_MESSAGE _RpcMessage; - - MIDL_STUB_MESSAGE _StubMsg; - - char *ctx, *buf; - int i; - - printf("\n*******************************************************************\n"); - printf("**** CtxOpen() ***\n"); - printf("*******************************************************************\n\n"); - - if(!pphContext) - { - RpcRaiseException(RPC_X_NULL_REF_POINTER); - } - RpcTryFinally - { - NdrClientInitializeNew( - ( PRPC_MESSAGE )&_RpcMessage, - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( PMIDL_STUB_DESC )&hello_StubDesc, - 0); - - - _Handle = hBinding; - - - _StubMsg.BufferLength = 4U; - NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle ); - - *(( long __RPC_FAR * )_StubMsg.Buffer)++ = Value; - - NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer ); - - if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) - NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[0] ); - - - printf("Before NdrClientContextUnmarshall: Buflen=%d\nBuffer: ", _StubMsg.RpcMsg->BufferLength); - for(buf = _StubMsg.Buffer, i = 0; i < _StubMsg.RpcMsg->BufferLength; i++) - printf("0x%x, ", buf[i] & 0x0FF); - printf("\n\n"); - - *pphContext = (void *)0; - NdrClientContextUnmarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_CCONTEXT __RPC_FAR * )pphContext, - _Handle); - - ctx = (char*)*pphContext; - printf("\nNdrClientContextUnmarshall returned: handle=0x%p\n", ctx); - printf("00: 0x%x <- obviously pointer to binding handle copyed from _Handle\n", *((int*)ctx)); - ctx+=4; - printf("04: 0x%x <- unknown field\n", *((int*)ctx)); - printf("08: "); - - for(ctx+=4, i = 0; i < 20; i++) - printf("0x%x,", *(ctx+i) & 0x0FF); printf(" <- ndr 20 bytes\n\n"); - - printf("Buflen=%d, Buffer: ", _StubMsg.BufferLength); - for(buf = _StubMsg.BufferStart; buf < _StubMsg.BufferEnd; buf++) - printf("0x%x,", *buf & 0x0FF); - printf("\n"); - - - } - RpcFinally - { - NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg ); - - } - RpcEndFinally - -} - -void m_CtxOpen2( - /* [out] */ PCTXTYPE __RPC_FAR *pphContext, - /* [in] */ long Value) -{ - - RPC_BINDING_HANDLE _Handle = 0; - - RPC_MESSAGE _RpcMessage; - - MIDL_STUB_MESSAGE _StubMsg; - - char buf[255]; - - NdrClientInitializeNew( - ( PRPC_MESSAGE )&_RpcMessage, - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( PMIDL_STUB_DESC )&hello_StubDesc, - 0); - - - _Handle = hBinding; - - - _StubMsg.BufferLength = 4U; - NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle ); - - *(( long __RPC_FAR * )_StubMsg.Buffer)++ = Value; - - NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer ); - - if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) - NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[0] ); - - *pphContext = (void *)0; - - RpcTryExcept - { - NdrClientContextUnmarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - NULL, - _Handle); - } - RpcExcept(1) - { - printf("NdrClientContextUnmarshall reported exception = %d\n", RpcExceptionCode()); - } - RpcEndExcept - - - - RpcTryExcept - { - NdrClientContextUnmarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - (NDR_CCONTEXT __RPC_FAR * )pphContext, - NULL); - } - RpcExcept(1) - { - printf("NdrClientContextUnmarshall reported exception = %d\n", RpcExceptionCode()); - } - RpcEndExcept - - - RpcTryExcept - { - NdrClientContextMarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - NULL, - 1); - } - RpcExcept(1) - { - printf("NdrClientContextMarshall reported exception = %d\n", RpcExceptionCode()); - } - RpcEndExcept - - RpcTryExcept - { - NDRCContextUnmarshall( NULL, _Handle, buf, _RpcMessage.DataRepresentation ); - } - RpcExcept(1) - { - printf("NDRCContextUnmarshall reported exception = %d\n", RpcExceptionCode()); - } - RpcEndExcept - - - NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg ); - - -} - -void m_CtxHello( - /* [in] */ PCTXTYPE phContext) -{ - - RPC_BINDING_HANDLE _Handle = 0; - - RPC_MESSAGE _RpcMessage; - - MIDL_STUB_MESSAGE _StubMsg; - - char *buf; - int i; - - printf("\n*******************************************************************\n"); - printf("**** CtxHello() ***\n"); - printf("*******************************************************************\n\n"); - - RpcTryFinally - { - NdrClientInitializeNew( - ( PRPC_MESSAGE )&_RpcMessage, - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( PMIDL_STUB_DESC )&hello_StubDesc, - 1); - - - if(phContext != 0) - { - _Handle = NDRCContextBinding(( NDR_CCONTEXT )phContext);; - - } - else - { - RpcRaiseException(RPC_X_SS_IN_NULL_CONTEXT); - } - - _StubMsg.BufferLength = 20U; - NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle ); - - NdrClientContextMarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_CCONTEXT )phContext, - 1); - printf("After NdrClientContextMarshall: Buflen=%d\nBuffer: ", _StubMsg.BufferLength ); - for(buf = _StubMsg.Buffer, i = 0; i < _StubMsg.BufferLength; i++) - printf("0x%x, ", buf[i] & 0x0FF); - printf("\n\n"); - - NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer ); - - } - RpcFinally - { - NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg ); - - } - RpcEndFinally - -} - - -void m_CtxClose( - /* [out][in] */ PCTXTYPE __RPC_FAR *pphContext) -{ - - RPC_BINDING_HANDLE _Handle = 0; - - RPC_MESSAGE _RpcMessage; - - MIDL_STUB_MESSAGE _StubMsg; - char *buf; - int i; - - printf("\n*******************************************************************\n"); - printf("**** CtxClose() ***\n"); - printf("*******************************************************************\n\n"); - - if(!pphContext) - { - RpcRaiseException(RPC_X_NULL_REF_POINTER); - } - RpcTryFinally - { - NdrClientInitializeNew( - ( PRPC_MESSAGE )&_RpcMessage, - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( PMIDL_STUB_DESC )&hello_StubDesc, - 2); - - - if(*pphContext != 0) - { - _Handle = NDRCContextBinding(( NDR_CCONTEXT )*pphContext);; - - } - - _StubMsg.BufferLength = 20U; - NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle ); - - NdrClientContextMarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_CCONTEXT )*pphContext, - 0); - - NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer ); - - if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) - NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[14] ); - - - printf("Before NdrClientContextUnmarshall: Buflen=%d\nBuffer: ", _StubMsg.BufferLength ); - for(buf = _StubMsg.Buffer, i = 0; i < _StubMsg.BufferLength; i++) - printf("0x%x, ", buf[i] & 0x0FF); - printf("\n\n"); - - NdrClientContextUnmarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_CCONTEXT __RPC_FAR * )pphContext, - _Handle); - - - printf("\nNdrClientContextUnmarshall returned: handle=0x%p\n", *pphContext); - - - } - RpcFinally - { - NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg ); - - } - RpcEndFinally - -} - -int interactive = 0; -void interact() -{ - if(interactive) - { - printf("\nPress any key to continue..."); - getch(); - printf("\n\n"); - } -} - -void main(int argc, char **argv) -{ - RPC_STATUS status; - unsigned long ulCode; - PCTXTYPE hContext; - char *pszStringBinding = NULL; - RPC_BINDING_HANDLE Handle = 0; - char buffer[255]; - - int test_num = 0; - int test_value = 31337; - - if(argc<2) - { - printf("USAGE: client.exe [test_value] [interactive]\n" - "Available tests:\n" - "0. General test\n" - "1. NULL pointer test\n" - "2. Context rundown routine"); - return; - } - - test_num = atoi(argv[1]); - if(argc>2) test_value = atoi(argv[2]); - if(argc>3) interactive = 1; - - status = RpcStringBindingCompose(NULL, - "ncacn_np", - NULL, - "\\pipe\\hello", - NULL, - &pszStringBinding); - - if (status) - { - printf("RpcStringBindingCompose %x\n", status); - exit(status); - } - - status = RpcBindingFromStringBinding(pszStringBinding, &hBinding); - - if (status) - { - printf("RpcBindingFromStringBinding %x\n", status); - exit(status); - } - - RpcStringFree(&pszStringBinding); - - switch(test_num) - { - case 0: - m_CtxOpen(&hContext, test_value); - RpcBindingFree(&hBinding); - m_CtxHello(hContext); - interact(); - m_CtxClose(&hContext); - break; - case 1: - ///////////////////////////////////////////////////////////////////////////////////////// - RpcTryExcept - { - Handle = NDRCContextBinding(NULL); - printf("NDRCContextBinding(NULL) returned %p\n", Handle); - } - RpcExcept(1) - { - printf("NDRCContextBinding(NULL) reported exception = %d\n", RpcExceptionCode()); - } - RpcEndExcept - - m_CtxOpen2(&hContext, test_value); - - ///////////////////////////////////////////////////////////////////////////////////////// - RpcTryExcept - { - NDRCContextMarshall(NULL, &buffer); - printf("NDRCContextMarshall(NULL) returned %p\n", Handle); - } - RpcExcept(1) - { - printf("NDRCContextMarshall(NULL) reported exception = %d\n", RpcExceptionCode()); - } - RpcEndExcept - ///////////////////////////////////////////////////////////////////////////////////////// - break; - case 2: - CtxOpen(&hContext, test_value); - interact(); - ExitProcess(0); - break; - default: - printf("Unknown test %d\n", test_num); - } - -} - - -void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) -{ - return(malloc(len)); -} - -void __RPC_USER midl_user_free(void __RPC_FAR * ptr) -{ - free(ptr); -} diff --git a/rostests/win32/rpcrt4/context_handles/ctx.acf b/rostests/win32/rpcrt4/context_handles/ctx.acf deleted file mode 100644 index c02c5d1a213..00000000000 --- a/rostests/win32/rpcrt4/context_handles/ctx.acf +++ /dev/null @@ -1,8 +0,0 @@ -//file hello.idl -[ - implicit_handle(handle_t hBinding) -] -interface hello -{ - -} \ No newline at end of file diff --git a/rostests/win32/rpcrt4/context_handles/ctx.h b/rostests/win32/rpcrt4/context_handles/ctx.h deleted file mode 100644 index 3e6eee23cc5..00000000000 --- a/rostests/win32/rpcrt4/context_handles/ctx.h +++ /dev/null @@ -1,80 +0,0 @@ - -#pragma warning( disable: 4049 ) /* more than 64k source lines */ - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - - /* File created by MIDL compiler version 5.03.0280 */ -/* at Fri Mar 24 18:32:16 2006 - */ -/* Compiler settings for ctx.idl: - Os (OptLev=s), W1, Zp8, env=Win32 (32b run), ms_ext, c_ext - error checks: allocation ref bounds_check enum stub_data - VC __declspec() decoration level: - __declspec(uuid()), __declspec(selectany), __declspec(novtable) - DECLSPEC_UUID(), MIDL_INTERFACE() -*/ -//@@MIDL_FILE_HEADING( ) - - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 440 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __ctx_h__ -#define __ctx_h__ - -/* Forward Declarations */ - -#ifdef __cplusplus -extern "C"{ -#endif - -void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t); -void __RPC_USER MIDL_user_free( void __RPC_FAR * ); - -#ifndef __hello_INTERFACE_DEFINED__ -#define __hello_INTERFACE_DEFINED__ - -/* interface hello */ -/* [implicit_handle][version][uuid] */ - -typedef long CTXTYPE; - -typedef /* [context_handle] */ CTXTYPE __RPC_FAR *PCTXTYPE; - -void CtxOpen( - /* [out] */ PCTXTYPE __RPC_FAR *pphContext, - /* [in] */ long Value); - -void CtxHello( - /* [in] */ PCTXTYPE phContext); - -void CtxClose( - /* [out][in] */ PCTXTYPE __RPC_FAR *pphContext); - - -extern handle_t hBinding; - - -extern RPC_IF_HANDLE hello_v1_0_c_ifspec; -extern RPC_IF_HANDLE hello_v1_0_s_ifspec; -#endif /* __hello_INTERFACE_DEFINED__ */ - -/* Additional Prototypes for ALL interfaces */ - -void __RPC_USER PCTXTYPE_rundown( PCTXTYPE ); - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/rostests/win32/rpcrt4/context_handles/ctx.idl b/rostests/win32/rpcrt4/context_handles/ctx.idl deleted file mode 100644 index e3226dde75e..00000000000 --- a/rostests/win32/rpcrt4/context_handles/ctx.idl +++ /dev/null @@ -1,19 +0,0 @@ -//file hello.idl -[ - uuid(7a98c250-6808-11cf-b73b-00aa00b677a7), - version(1.0) -] -interface hello -{ - -typedef long CTXTYPE; -typedef [context_handle] CTXTYPE *PCTXTYPE; - -void CtxOpen( [out] PCTXTYPE *pphContext, - [in] long Value); - -void CtxHello( [in] PCTXTYPE phContext ); - -void CtxClose( [in, out] PCTXTYPE *pphContext ); - -} \ No newline at end of file diff --git a/rostests/win32/rpcrt4/context_handles/ctx_c.c b/rostests/win32/rpcrt4/context_handles/ctx_c.c deleted file mode 100644 index ae3cbc10fb0..00000000000 --- a/rostests/win32/rpcrt4/context_handles/ctx_c.c +++ /dev/null @@ -1,335 +0,0 @@ - -#pragma warning( disable: 4049 ) /* more than 64k source lines */ - -/* this ALWAYS GENERATED file contains the RPC client stubs */ - - - /* File created by MIDL compiler version 5.03.0280 */ -/* at Fri Mar 24 18:32:16 2006 - */ -/* Compiler settings for ctx.idl: - Os (OptLev=s), W1, Zp8, env=Win32 (32b run), ms_ext, c_ext - error checks: allocation ref bounds_check enum stub_data - VC __declspec() decoration level: - __declspec(uuid()), __declspec(selectany), __declspec(novtable) - DECLSPEC_UUID(), MIDL_INTERFACE() -*/ -//@@MIDL_FILE_HEADING( ) - -#if !defined(_M_IA64) && !defined(_M_AXP64) -#include -#if defined( _ALPHA_ ) -#include -#endif - -#include "ctx.h" - -#define TYPE_FORMAT_STRING_SIZE 23 -#define PROC_FORMAT_STRING_SIZE 21 -#define TRANSMIT_AS_TABLE_SIZE 0 -#define WIRE_MARSHAL_TABLE_SIZE 0 - -typedef struct _MIDL_TYPE_FORMAT_STRING - { - short Pad; - unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; - } MIDL_TYPE_FORMAT_STRING; - -typedef struct _MIDL_PROC_FORMAT_STRING - { - short Pad; - unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; - } MIDL_PROC_FORMAT_STRING; - - -extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString; -extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString; - -#define GENERIC_BINDING_TABLE_SIZE 0 - - -/* Standard interface: hello, ver. 1.0, - GUID={0x7a98c250,0x6808,0x11cf,{0xb7,0x3b,0x00,0xaa,0x00,0xb6,0x77,0xa7}} */ - -handle_t hBinding; - - -static const RPC_CLIENT_INTERFACE hello___RpcClientInterface = - { - sizeof(RPC_CLIENT_INTERFACE), - {{0x7a98c250,0x6808,0x11cf,{0xb7,0x3b,0x00,0xaa,0x00,0xb6,0x77,0xa7}},{1,0}}, - {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, - 0, - 0, - 0, - 0, - 0, - 0 - }; -RPC_IF_HANDLE hello_v1_0_c_ifspec = (RPC_IF_HANDLE)& hello___RpcClientInterface; - -extern const MIDL_STUB_DESC hello_StubDesc; - -RPC_BINDING_HANDLE hello__MIDL_AutoBindHandle; - - -void CtxOpen( - /* [out] */ PCTXTYPE __RPC_FAR *pphContext, - /* [in] */ long Value) -{ - - RPC_BINDING_HANDLE _Handle = 0; - - RPC_MESSAGE _RpcMessage; - - MIDL_STUB_MESSAGE _StubMsg; - - if(!pphContext) - { - RpcRaiseException(RPC_X_NULL_REF_POINTER); - } - RpcTryFinally - { - NdrClientInitializeNew( - ( PRPC_MESSAGE )&_RpcMessage, - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( PMIDL_STUB_DESC )&hello_StubDesc, - 0); - - - _Handle = hBinding; - - - _StubMsg.BufferLength = 4U; - NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle ); - - *(( long __RPC_FAR * )_StubMsg.Buffer)++ = Value; - - NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer ); - - if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) - NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[0] ); - - *pphContext = (void *)0; - NdrClientContextUnmarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_CCONTEXT __RPC_FAR * )pphContext, - _Handle); - - } - RpcFinally - { - NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg ); - - } - RpcEndFinally - -} - - -void CtxHello( - /* [in] */ PCTXTYPE phContext) -{ - - RPC_BINDING_HANDLE _Handle = 0; - - RPC_MESSAGE _RpcMessage; - - MIDL_STUB_MESSAGE _StubMsg; - - RpcTryFinally - { - NdrClientInitializeNew( - ( PRPC_MESSAGE )&_RpcMessage, - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( PMIDL_STUB_DESC )&hello_StubDesc, - 1); - - - if(phContext != 0) - { - _Handle = NDRCContextBinding(( NDR_CCONTEXT )phContext);; - - } - else - { - RpcRaiseException(RPC_X_SS_IN_NULL_CONTEXT); - } - - _StubMsg.BufferLength = 20U; - NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle ); - - NdrClientContextMarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_CCONTEXT )phContext, - 1); - NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer ); - - } - RpcFinally - { - NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg ); - - } - RpcEndFinally - -} - - -void CtxClose( - /* [out][in] */ PCTXTYPE __RPC_FAR *pphContext) -{ - - RPC_BINDING_HANDLE _Handle = 0; - - RPC_MESSAGE _RpcMessage; - - MIDL_STUB_MESSAGE _StubMsg; - - if(!pphContext) - { - RpcRaiseException(RPC_X_NULL_REF_POINTER); - } - RpcTryFinally - { - NdrClientInitializeNew( - ( PRPC_MESSAGE )&_RpcMessage, - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( PMIDL_STUB_DESC )&hello_StubDesc, - 2); - - - if(*pphContext != 0) - { - _Handle = NDRCContextBinding(( NDR_CCONTEXT )*pphContext);; - - } - - _StubMsg.BufferLength = 20U; - NdrGetBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg, _StubMsg.BufferLength, _Handle ); - - NdrClientContextMarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_CCONTEXT )*pphContext, - 0); - NdrSendReceive( (PMIDL_STUB_MESSAGE) &_StubMsg, (unsigned char __RPC_FAR *) _StubMsg.Buffer ); - - if ( (_RpcMessage.DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) - NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[14] ); - - NdrClientContextUnmarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_CCONTEXT __RPC_FAR * )pphContext, - _Handle); - - } - RpcFinally - { - NdrFreeBuffer( (PMIDL_STUB_MESSAGE) &_StubMsg ); - - } - RpcEndFinally - -} - - -const MIDL_STUB_DESC hello_StubDesc = - { - (void __RPC_FAR *)& hello___RpcClientInterface, - MIDL_user_allocate, - MIDL_user_free, - &hBinding, - 0, - 0, - 0, - 0, - __MIDL_TypeFormatString.Format, - 1, /* -error bounds_check flag */ - 0x10001, /* Ndr library version */ - 0, - 0x5030118, /* MIDL Version 5.3.280 */ - 0, - 0, - 0, /* notify & notify_flag routine table */ - 0x1, /* MIDL flag */ - 0, /* Reserved3 */ - 0, /* Reserved4 */ - 0 /* Reserved5 */ - }; - -#if !defined(__RPC_WIN32__) -#error Invalid build platform for this stub. -#endif - -const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString = - { - 0, - { - - 0x51, /* FC_OUT_PARAM */ -#ifndef _ALPHA_ - 0x1, /* x86, MIPS & PPC stack size = 1 */ -#else - 0x2, /* Alpha stack size = 2 */ -#endif -/* 2 */ NdrFcShort( 0x2 ), /* Type Offset=2 */ -/* 4 */ 0x4e, /* FC_IN_PARAM_BASETYPE */ - 0x8, /* FC_LONG */ -/* 6 */ 0x5b, /* FC_END */ - 0x5c, /* FC_PAD */ -/* 8 */ - 0x4d, /* FC_IN_PARAM */ -#ifndef _ALPHA_ - 0x1, /* x86, MIPS & PPC stack size = 1 */ -#else - 0x2, /* Alpha stack size = 2 */ -#endif -/* 10 */ NdrFcShort( 0xa ), /* Type Offset=10 */ -/* 12 */ 0x5b, /* FC_END */ - 0x5c, /* FC_PAD */ -/* 14 */ - 0x50, /* FC_IN_OUT_PARAM */ -#ifndef _ALPHA_ - 0x1, /* x86, MIPS & PPC stack size = 1 */ -#else - 0x2, /* Alpha stack size = 2 */ -#endif -/* 16 */ NdrFcShort( 0xe ), /* Type Offset=14 */ -/* 18 */ 0x5b, /* FC_END */ - 0x5c, /* FC_PAD */ - - 0x0 - } - }; - -const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString = - { - 0, - { - NdrFcShort( 0x0 ), /* 0 */ -/* 2 */ - 0x11, 0x0, /* FC_RP */ -/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */ -/* 6 */ 0x30, /* FC_BIND_CONTEXT */ - 0xa0, /* Ctxt flags: via ptr, out, */ -/* 8 */ 0x0, /* 0 */ - 0x0, /* 0 */ -/* 10 */ 0x30, /* FC_BIND_CONTEXT */ - 0x41, /* Ctxt flags: in, can't be null */ -/* 12 */ 0x0, /* 0 */ - 0x0, /* 0 */ -/* 14 */ - 0x11, 0x0, /* FC_RP */ -/* 16 */ NdrFcShort( 0x2 ), /* Offset= 2 (18) */ -/* 18 */ 0x30, /* FC_BIND_CONTEXT */ - 0xe1, /* Ctxt flags: via ptr, in, out, can't be null */ -/* 20 */ 0x0, /* 0 */ - 0x0, /* 0 */ - - 0x0 - } - }; - - -#endif /* !defined(_M_IA64) && !defined(_M_AXP64)*/ - diff --git a/rostests/win32/rpcrt4/context_handles/ctx_s.c b/rostests/win32/rpcrt4/context_handles/ctx_s.c deleted file mode 100644 index 2c768712fab..00000000000 --- a/rostests/win32/rpcrt4/context_handles/ctx_s.c +++ /dev/null @@ -1,349 +0,0 @@ - -#pragma warning( disable: 4049 ) /* more than 64k source lines */ - -/* this ALWAYS GENERATED file contains the RPC server stubs */ - - - /* File created by MIDL compiler version 5.03.0280 */ -/* at Fri Mar 24 18:32:16 2006 - */ -/* Compiler settings for ctx.idl: - Os (OptLev=s), W1, Zp8, env=Win32 (32b run), ms_ext, c_ext - error checks: allocation ref bounds_check enum stub_data - VC __declspec() decoration level: - __declspec(uuid()), __declspec(selectany), __declspec(novtable) - DECLSPEC_UUID(), MIDL_INTERFACE() -*/ -//@@MIDL_FILE_HEADING( ) - -#if !defined(_M_IA64) && !defined(_M_AXP64) -#include -#include "ctx.h" - -#define TYPE_FORMAT_STRING_SIZE 23 -#define PROC_FORMAT_STRING_SIZE 21 -#define TRANSMIT_AS_TABLE_SIZE 0 -#define WIRE_MARSHAL_TABLE_SIZE 0 - -typedef struct _MIDL_TYPE_FORMAT_STRING - { - short Pad; - unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; - } MIDL_TYPE_FORMAT_STRING; - -typedef struct _MIDL_PROC_FORMAT_STRING - { - short Pad; - unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; - } MIDL_PROC_FORMAT_STRING; - -extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString; -extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString; - -/* Standard interface: hello, ver. 1.0, - GUID={0x7a98c250,0x6808,0x11cf,{0xb7,0x3b,0x00,0xaa,0x00,0xb6,0x77,0xa7}} */ - - -extern RPC_DISPATCH_TABLE hello_v1_0_DispatchTable; - -static const RPC_SERVER_INTERFACE hello___RpcServerInterface = - { - sizeof(RPC_SERVER_INTERFACE), - {{0x7a98c250,0x6808,0x11cf,{0xb7,0x3b,0x00,0xaa,0x00,0xb6,0x77,0xa7}},{1,0}}, - {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, - &hello_v1_0_DispatchTable, - 0, - 0, - 0, - 0, - 0 - }; -RPC_IF_HANDLE hello_v1_0_s_ifspec = (RPC_IF_HANDLE)& hello___RpcServerInterface; - -extern const MIDL_STUB_DESC hello_StubDesc; - -void __RPC_STUB -hello_CtxOpen( - PRPC_MESSAGE _pRpcMessage ) -{ - long Value; - MIDL_STUB_MESSAGE _StubMsg; - NDR_SCONTEXT pphContext; - RPC_STATUS _Status; - - ((void)(_Status)); - NdrServerInitializeNew( - _pRpcMessage, - &_StubMsg, - &hello_StubDesc); - - ( PCTXTYPE __RPC_FAR * )pphContext = 0; - RpcTryFinally - { - RpcTryExcept - { - if ( (_pRpcMessage->DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) - NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[0] ); - - Value = *(( long __RPC_FAR * )_StubMsg.Buffer)++; - - if(_StubMsg.Buffer > _StubMsg.BufferEnd) - { - RpcRaiseException(RPC_X_BAD_STUB_DATA); - } - } - RpcExcept( RPC_BAD_STUB_DATA_EXCEPTION_FILTER ) - { - RpcRaiseException(RPC_X_BAD_STUB_DATA); - } - RpcEndExcept - pphContext = NDRSContextUnmarshall( (char *)0, _pRpcMessage->DataRepresentation ); - - - CtxOpen(( PCTXTYPE __RPC_FAR * )NDRSContextValue(pphContext),Value); - - _StubMsg.BufferLength = 20U; - _pRpcMessage->BufferLength = _StubMsg.BufferLength; - - _Status = I_RpcGetBuffer( _pRpcMessage ); - if ( _Status ) - RpcRaiseException( _Status ); - - _StubMsg.Buffer = (unsigned char __RPC_FAR *) _pRpcMessage->Buffer; - - NdrServerContextMarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_SCONTEXT )pphContext, - ( NDR_RUNDOWN )PCTXTYPE_rundown); - - } - RpcFinally - { - } - RpcEndFinally - _pRpcMessage->BufferLength = - (unsigned int)(_StubMsg.Buffer - (unsigned char __RPC_FAR *)_pRpcMessage->Buffer); - -} - -void __RPC_STUB -hello_CtxHello( - PRPC_MESSAGE _pRpcMessage ) -{ - MIDL_STUB_MESSAGE _StubMsg; - NDR_SCONTEXT phContext; - RPC_STATUS _Status; - - ((void)(_Status)); - NdrServerInitializeNew( - _pRpcMessage, - &_StubMsg, - &hello_StubDesc); - - RpcTryFinally - { - RpcTryExcept - { - if ( (_pRpcMessage->DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) - NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[8] ); - - phContext = NdrServerContextUnmarshall(( PMIDL_STUB_MESSAGE )&_StubMsg); - - if(_StubMsg.Buffer > _StubMsg.BufferEnd) - { - RpcRaiseException(RPC_X_BAD_STUB_DATA); - } - } - RpcExcept( RPC_BAD_STUB_DATA_EXCEPTION_FILTER ) - { - RpcRaiseException(RPC_X_BAD_STUB_DATA); - } - RpcEndExcept - - CtxHello(( PCTXTYPE )*NDRSContextValue(phContext)); - - } - RpcFinally - { - } - RpcEndFinally - _pRpcMessage->BufferLength = - (unsigned int)(_StubMsg.Buffer - (unsigned char __RPC_FAR *)_pRpcMessage->Buffer); - -} - -void __RPC_STUB -hello_CtxClose( - PRPC_MESSAGE _pRpcMessage ) -{ - MIDL_STUB_MESSAGE _StubMsg; - NDR_SCONTEXT pphContext; - RPC_STATUS _Status; - - ((void)(_Status)); - NdrServerInitializeNew( - _pRpcMessage, - &_StubMsg, - &hello_StubDesc); - - ( PCTXTYPE __RPC_FAR * )pphContext = 0; - RpcTryFinally - { - RpcTryExcept - { - if ( (_pRpcMessage->DataRepresentation & 0X0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION ) - NdrConvert( (PMIDL_STUB_MESSAGE) &_StubMsg, (PFORMAT_STRING) &__MIDL_ProcFormatString.Format[14] ); - - pphContext = NdrServerContextUnmarshall(( PMIDL_STUB_MESSAGE )&_StubMsg); - - if(_StubMsg.Buffer > _StubMsg.BufferEnd) - { - RpcRaiseException(RPC_X_BAD_STUB_DATA); - } - } - RpcExcept( RPC_BAD_STUB_DATA_EXCEPTION_FILTER ) - { - RpcRaiseException(RPC_X_BAD_STUB_DATA); - } - RpcEndExcept - - CtxClose(( PCTXTYPE __RPC_FAR * )NDRSContextValue(pphContext)); - - _StubMsg.BufferLength = 20U; - _pRpcMessage->BufferLength = _StubMsg.BufferLength; - - _Status = I_RpcGetBuffer( _pRpcMessage ); - if ( _Status ) - RpcRaiseException( _Status ); - - _StubMsg.Buffer = (unsigned char __RPC_FAR *) _pRpcMessage->Buffer; - - NdrServerContextMarshall( - ( PMIDL_STUB_MESSAGE )&_StubMsg, - ( NDR_SCONTEXT )pphContext, - ( NDR_RUNDOWN )PCTXTYPE_rundown); - - } - RpcFinally - { - } - RpcEndFinally - _pRpcMessage->BufferLength = - (unsigned int)(_StubMsg.Buffer - (unsigned char __RPC_FAR *)_pRpcMessage->Buffer); - -} - - -static const MIDL_STUB_DESC hello_StubDesc = - { - (void __RPC_FAR *)& hello___RpcServerInterface, - MIDL_user_allocate, - MIDL_user_free, - 0, - 0, - 0, - 0, - 0, - __MIDL_TypeFormatString.Format, - 1, /* -error bounds_check flag */ - 0x10001, /* Ndr library version */ - 0, - 0x5030118, /* MIDL Version 5.3.280 */ - 0, - 0, - 0, /* notify & notify_flag routine table */ - 0x1, /* MIDL flag */ - 0, /* Reserved3 */ - 0, /* Reserved4 */ - 0 /* Reserved5 */ - }; - -static RPC_DISPATCH_FUNCTION hello_table[] = - { - hello_CtxOpen, - hello_CtxHello, - hello_CtxClose, - 0 - }; -RPC_DISPATCH_TABLE hello_v1_0_DispatchTable = - { - 3, - hello_table - }; - -#if !defined(__RPC_WIN32__) -#error Invalid build platform for this stub. -#endif - -static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString = - { - 0, - { - - 0x51, /* FC_OUT_PARAM */ -#ifndef _ALPHA_ - 0x1, /* x86, MIPS & PPC stack size = 1 */ -#else - 0x2, /* Alpha stack size = 2 */ -#endif -/* 2 */ NdrFcShort( 0x2 ), /* Type Offset=2 */ -/* 4 */ 0x4e, /* FC_IN_PARAM_BASETYPE */ - 0x8, /* FC_LONG */ -/* 6 */ 0x5b, /* FC_END */ - 0x5c, /* FC_PAD */ -/* 8 */ - 0x4d, /* FC_IN_PARAM */ -#ifndef _ALPHA_ - 0x1, /* x86, MIPS & PPC stack size = 1 */ -#else - 0x2, /* Alpha stack size = 2 */ -#endif -/* 10 */ NdrFcShort( 0xa ), /* Type Offset=10 */ -/* 12 */ 0x5b, /* FC_END */ - 0x5c, /* FC_PAD */ -/* 14 */ - 0x50, /* FC_IN_OUT_PARAM */ -#ifndef _ALPHA_ - 0x1, /* x86, MIPS & PPC stack size = 1 */ -#else - 0x2, /* Alpha stack size = 2 */ -#endif -/* 16 */ NdrFcShort( 0xe ), /* Type Offset=14 */ -/* 18 */ 0x5b, /* FC_END */ - 0x5c, /* FC_PAD */ - - 0x0 - } - }; - -static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString = - { - 0, - { - NdrFcShort( 0x0 ), /* 0 */ -/* 2 */ - 0x11, 0x0, /* FC_RP */ -/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */ -/* 6 */ 0x30, /* FC_BIND_CONTEXT */ - 0xa0, /* Ctxt flags: via ptr, out, */ -/* 8 */ 0x0, /* 0 */ - 0x0, /* 0 */ -/* 10 */ 0x30, /* FC_BIND_CONTEXT */ - 0x41, /* Ctxt flags: in, can't be null */ -/* 12 */ 0x0, /* 0 */ - 0x0, /* 0 */ -/* 14 */ - 0x11, 0x0, /* FC_RP */ -/* 16 */ NdrFcShort( 0x2 ), /* Offset= 2 (18) */ -/* 18 */ 0x30, /* FC_BIND_CONTEXT */ - 0xe1, /* Ctxt flags: via ptr, in, out, can't be null */ -/* 20 */ 0x0, /* 0 */ - 0x0, /* 0 */ - - 0x0 - } - }; - - -#endif /* !defined(_M_IA64) && !defined(_M_AXP64)*/ - diff --git a/rostests/win32/rpcrt4/context_handles/server.c b/rostests/win32/rpcrt4/context_handles/server.c deleted file mode 100644 index 9c0ac0207fc..00000000000 --- a/rostests/win32/rpcrt4/context_handles/server.c +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include -#include "ctx.h" - -void CtxOpen( PCTXTYPE *pphContext, - long Value) -{ - printf("CtxOpen(): Value=%d\n",Value); - *pphContext = (PCTXTYPE)midl_user_allocate( sizeof(CTXTYPE) ); - **pphContext = Value; -} - -void CtxHello( PCTXTYPE phContext ) -{ - printf("CtxHello(): Hello, World! Context value: %d\n", *phContext); -} - -void CtxClose(PCTXTYPE *pphContext ) -{ - printf("CtxClose(): %d\n", **pphContext); - midl_user_free(*pphContext); - *pphContext = NULL; -} - - -void main() -{ - RPC_STATUS status; - unsigned int cMinCalls = 1; - unsigned int cMaxCalls = 20; - int i; - - status = RpcServerUseProtseqEp("ncacn_np", 20, "\\pipe\\hello", NULL); - - if (status) - { - printf("RpcServerUseProtseqEp %x\n", status); - exit(status); - } - - status = RpcServerRegisterIf(hello_v1_0_s_ifspec, NULL, NULL); - - if (status) - { - printf("RpcServerRegisterIf %x\n", status); - exit(status); - } - - status = RpcServerListen(1, 20, FALSE); - - if (status) - { - printf("RpcServerListen %x", status); - exit(status); - } - - scanf("%d", &i); -} - - -void __RPC_USER PCTXTYPE_rundown( - PCTXTYPE hContext) -{ - PCTXTYPE pCtx = (PCTXTYPE)hContext; - printf("Context rundown: Value=%d \n", *pCtx); - midl_user_free(hContext); -} - -void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) -{ - return(malloc(len)); -} - -void __RPC_USER midl_user_free(void __RPC_FAR * ptr) -{ - free(ptr); -} diff --git a/rostests/win32/smss/movefile/movefile.cpp b/rostests/win32/smss/movefile/movefile.cpp deleted file mode 100644 index 04442989755..00000000000 --- a/rostests/win32/smss/movefile/movefile.cpp +++ /dev/null @@ -1,235 +0,0 @@ -/* - * PROJECT: ReactOS Test applications - * LICENSE: GPL - See COPYING in the top level directory - * FILE: base/applications/testsets/smss/movefile.cpp - * PURPOSE: Provides testing for the "move file after reboot" - * function of smss.exe/kernel32.dll - * PROGRAMMERS: Dmitriy Philippov (shedon@mail.ru) - */ - - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers -#include "windows.h" -#include -#include -#include "stdlib.h" -#include "string.h" - - -void Usage() -{ - printf(" Usage: smssTest.exe -g|c|s|d \n \ - g - generate test files \n \ - c - check files after reboot \n \ - s - show registry entry \n \ - d - delete registry value \n"); -} - -int ShowRegValue() -{ - BYTE lpBuff[255]; - memset(lpBuff, 0, sizeof(lpBuff)); - - DWORD lSize = sizeof(lpBuff); - HKEY hKey; - LONG retValue; - // test registry entry - retValue = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager", 0, KEY_QUERY_VALUE, &hKey); - if( ERROR_SUCCESS != retValue ) { - printf("RegOpenKeyEx err=%ld \n", retValue); - return 1; - } - - retValue = RegQueryValueEx(hKey, "PendingFileRenameOperations", NULL, NULL, lpBuff, &lSize); - if( ERROR_SUCCESS != retValue ) { - printf("RegQueryValueEx err=%ld \n", retValue); - lSize = 0; - } - - printf("reg data: \n"); - for(UINT i=0; i - . - - kernel32 - advapi32 - user32 - movefile.cpp - movefile.rc - \ No newline at end of file diff --git a/rostests/win32/smss/movefile/movefile.rc b/rostests/win32/smss/movefile/movefile.rc deleted file mode 100644 index 4956e918088..00000000000 --- a/rostests/win32/smss/movefile/movefile.rc +++ /dev/null @@ -1,8 +0,0 @@ -#include - -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Move File after reboot test\0" -#define REACTOS_STR_INTERNAL_NAME "movefiletest\0" -#define REACTOS_STR_ORIGINAL_FILENAME "movefiletest.exe\0" -#include - - diff --git a/rostests/win32/smss/smss.rbuild b/rostests/win32/smss/smss.rbuild deleted file mode 100644 index c1d1dc15a38..00000000000 --- a/rostests/win32/smss/smss.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/rostests/win32/testsets.rbuild b/rostests/win32/testsets.rbuild deleted file mode 100644 index 24a94a863c7..00000000000 --- a/rostests/win32/testsets.rbuild +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/rostests/win32/user32/drawcaption/capicon.c b/rostests/win32/user32/drawcaption/capicon.c deleted file mode 100644 index cef5ca22f3c..00000000000 --- a/rostests/win32/user32/drawcaption/capicon.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright 2006 Saveliy Tretiakov - * - * 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. - */ - -#include "windows.h" -#include "stdio.h" -#include "resource.h" - -WCHAR WndClass[] = L"capicon_class"; - -HINSTANCE hInst; -INT testnum = 0; - - -LRESULT CALLBACK WndProc(HWND hWnd, - UINT msg, - WPARAM wParam, - LPARAM lParam) -{ - HICON hIcon; - - switch (msg) - { - case WM_GETICON: - if(testnum>2) - { - if(wParam == ICON_SMALL) - hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON2SM)); - else if(wParam == ICON_BIG) - hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON2BIG)); - else hIcon = (HICON)1; - - if(!hIcon) - { - printf("LoadIcon() failed: %d\n", (INT)GetLastError()); - break; - } - - return (LRESULT)hIcon; - } - break; - - case WM_DESTROY: - PostQuitMessage(0); - return 0; - } - - return DefWindowProc(hWnd, msg, wParam, lParam); -} - - -INT main(INT argc, CHAR **argv) -{ - HWND hWnd; - MSG msg; - WNDCLASSEX wcx; - UINT result; - - if(argc<2) - { - printf("DrawCaption icon test.\n"); - printf("USAGE: drawcap.exe \n\n"); - printf("Available tests:\n" - "1. Class small icon\n" - "2. Class big icon\n" - "3. Class small icon + WM_GETICON\n" - "4. Class big icon + WM_GETICON\n" - "5. WM_GETICON only\n\n"); - return 0; - } - - testnum = atoi(argv[1]); - if(testnum < 1 || testnum > 5) - { - printf("Unknown test %d\n", testnum); - return 1; - } - - hInst = GetModuleHandle(NULL); - - memset(&wcx, 0, sizeof(wcx)); - wcx.cbSize = sizeof(wcx); - wcx.style = CS_HREDRAW | CS_VREDRAW; - wcx.lpfnWndProc = (WNDPROC) WndProc; - wcx.hInstance = hInst; - wcx.hbrBackground = (HBRUSH)COLOR_WINDOW; - wcx.lpszClassName = WndClass; - if(testnum<5)wcx.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON1BIG)); - if(testnum == 1 || testnum == 3) - wcx.hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON1SM)); - - if(!(result = RegisterClassEx(&wcx))) - { - printf("Shit! RegisterClassEx failed: %d\n", - (int)GetLastError()); - return 1; - } - - hWnd = CreateWindowEx(0, - WndClass, - L"DrawCaption icon test", - WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU, - CW_USEDEFAULT, - CW_USEDEFAULT, - 250, - 100, - NULL, - 0, - hInst, - NULL); - - if(!hWnd) - { - printf("Shit! Can't create wnd!\n"); - UnregisterClass(WndClass, hInst); - return 1; - } - - - ShowWindow(hWnd, SW_SHOW); - UpdateWindow(hWnd); - - while(GetMessage(&msg, NULL, 0, 0 )) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - UnregisterClass(WndClass, hInst); - return 0; -} diff --git a/rostests/win32/user32/drawcaption/capicon.rc b/rostests/win32/user32/drawcaption/capicon.rc deleted file mode 100644 index 0cb31e4e0be..00000000000 --- a/rostests/win32/user32/drawcaption/capicon.rc +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "resource.h" - -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS DrawCaption icon test\0" -#define REACTOS_STR_INTERNAL_NAME "capicon\0" -#define REACTOS_STR_ORIGINAL_FILENAME "capicon.exe\0" -#include - -ID_ICON1BIG ICON res\icon1big.ico -ID_ICON1SM ICON res\icon1sm.ico -ID_ICON2BIG ICON res\icon2big.ico -ID_ICON2SM ICON res\icon2sm.ico - diff --git a/rostests/win32/user32/drawcaption/drawcap.c b/rostests/win32/user32/drawcaption/drawcap.c deleted file mode 100644 index 5c6b1e11c18..00000000000 --- a/rostests/win32/user32/drawcaption/drawcap.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright 2006 Saveliy Tretiakov - * - * 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. - */ - -#include "windows.h" -#include "resource.h" -#include "stdio.h" - -WCHAR CaptWndClass[] = L"captwnd_class"; - -HINSTANCE hInst; -INT testnum = 0; - -//BOOL STDCALL (*DrawCaptionTemp) ( -// HWND hwnd, -// HDC hdc, -// const RECT *rect, -// HFONT hFont, -// HICON hIcon, -// LPCWSTR str, -// UINT uFlags); - -VOID CapTest(HWND hWnd, - HDC hDc, - LPRECT pR, - WCHAR *Text, - DWORD Flags, - WCHAR *AddonStr, - DWORD Addon) -{ - WCHAR Buf[512]; - - lstrcpy(Buf, AddonStr); - if(lstrlen(Buf))lstrcat(Buf, L" | "); - lstrcat(Buf, Text); - - DrawText( hDc, Buf, lstrlen(Buf), pR, DT_LEFT ); - - pR->top+=20; - pR->bottom+=20; - - if(!DrawCaption(hWnd, hDc, pR, Flags | Addon)) - { - printf("PAINT: DrawCaption failed: %d\n", (int)GetLastError()); - } - - pR->top+=30; - pR->bottom+=30; -} - -VOID DrawCaptionTest(HWND hWnd, HDC hDc, WCHAR *AddonStr, DWORD Addon) -{ - RECT Rect; - GetClientRect(hWnd, &Rect); - Rect.bottom = 30; - Rect.left = 10; - Rect.right-=10; - Rect.top = 10; - - CapTest(hWnd, hDc, &Rect, L"DC_TEXT:", DC_TEXT, AddonStr, Addon); - - CapTest(hWnd, hDc, &Rect, - L"DC_TEXT | DC_ACTIVE:", - DC_TEXT | DC_ACTIVE, - AddonStr, Addon); - - CapTest(hWnd, hDc, &Rect, - L"DC_TEXT | DC_ICON:" , - DC_TEXT | DC_ICON, - AddonStr, Addon); - - CapTest(hWnd, hDc, &Rect, - L"DC_TEXT | DC_ACTIVE | DC_ICON:" , - DC_TEXT | DC_ACTIVE | DC_ICON, - AddonStr, Addon); - - CapTest(hWnd, hDc, &Rect, - L"DC_TEXT | DC_INBUTTON:" , - DC_TEXT | DC_INBUTTON, - AddonStr, Addon); - - CapTest(hWnd, hDc, &Rect, - L"DC_TEXT | DC_ACTIVE | DC_INBUTTON:" , - DC_TEXT | DC_ACTIVE | DC_INBUTTON, - AddonStr, Addon); - - CapTest(hWnd, hDc, &Rect, - L"DC_TEXT | DC_ICON | DC_INBUTTON:" , - DC_TEXT | DC_ICON | DC_INBUTTON, - AddonStr, Addon); - - CapTest(hWnd, hDc, &Rect, - L"DC_TEXT | DC_ACTIVE | DC_ICON | DC_INBUTTON:" , - DC_TEXT | DC_ACTIVE | DC_ICON | DC_INBUTTON, - AddonStr, Addon); - -} - -LRESULT CALLBACK CaptWndProc(HWND hWnd, - UINT msg, - WPARAM wParam, - LPARAM lParam) -{ - - - switch (msg) - { - - case WM_PAINT: - { - HDC hDc; - PAINTSTRUCT Ps; - - hDc = BeginPaint(hWnd, &Ps); - SetBkMode( hDc, TRANSPARENT ); - - switch(testnum) - { - case 1: - DrawCaptionTest(hWnd, hDc, L"", 0); - break; - case 2: - DrawCaptionTest(hWnd, hDc, L"DC_GRADIENT", DC_GRADIENT); - break; - case 3: - DrawCaptionTest(hWnd, hDc, L"DC_SMALLCAP", DC_SMALLCAP); - break; - case 4: - DrawCaptionTest(hWnd, hDc, L"DC_BUTTONS", DC_BUTTONS); - break; - case 5: - DrawCaptionTest(hWnd, hDc, - L"DC_GRADIENT | DC_SMALLCAP", - DC_GRADIENT | DC_SMALLCAP); - break; - case 6: - DrawCaptionTest(hWnd, hDc, - L"DC_GRADIENT | DC_BUTTONS", - DC_GRADIENT | DC_BUTTONS); - break; - case 7: - DrawCaptionTest(hWnd, hDc, - L"DC_BUTTONS | DC_SMALLCAP", - DC_BUTTONS | DC_SMALLCAP); - break; - case 8: - DrawCaptionTest(hWnd, hDc, - L"DC_BUTTONS | DC_SMALLCAP | DC_GRADIENT", - DC_BUTTONS | DC_SMALLCAP | DC_GRADIENT); - break; - } - - EndPaint(hWnd, &Ps); - - return 0; - } - - case WM_DESTROY: - { - PostQuitMessage(0); - return 0; - } - } - - return DefWindowProc(hWnd, msg, wParam, lParam); -} - - -INT main(INT argc, CHAR **argv) -{ - HWND hWnd; - MSG msg; - WNDCLASSEX wcx; - UINT result; - HBRUSH hBr; - //HMODULE hLib; - - if(argc<2) - { - printf("DrawCaption testcode.\n"); - printf("USAGE: drawcap.exe [useicon]\n\n"); - printf("Available tests:\n" - "1. DrawCaption test\n" - "2. DrawCaption test + DC_GRADIENT\n" - "3. DrawCaption test + DC_SMALLCAP\n" - "4. DrawCaption test + DC_BUTTONS\n" - "5. DrawCaption test + DC_GRADIENT | DC_SMALLCAP\n" - "6. DrawCaption test + DC_GRADIENT | DC_BUTTONS\n" - "7. DrawCaption test + DC_BUTTONS | DC_SMALLCAP\n" - "8. DrawCaption test + DC_BUTTONS | DC_SMALLCAP | DC_GRADIENT\n\n"); - return 0; - } - - testnum = atoi(argv[1]); - if(testnum < 1 || testnum > 8) - { - printf("Unknown test %d\n", testnum); - return 1; - } - - hInst = GetModuleHandle(NULL); - - //hLib = LoadLibrary(L"user32"); - //if(!hLib) - //{ - // printf("Shit! Can't load user32.dll\n"); - // return 1; - //} - - //DrawCaptionTemp = GetProcAddress(hLib, "DrawCaptionTempW"); - //if(!DrawCaptionTemp) - //{ - // printf("Shit! Can't get DrawCaptionTemp address\n"); - // return 1; - //} - - hBr = CreateSolidBrush(RGB(255, 255, 255)); - if(!hBr) - { - printf("Shit! Can't create brush."); - return 1; - } - - memset(&wcx, 0, sizeof(wcx)); - wcx.cbSize = sizeof(wcx); - wcx.style = CS_HREDRAW | CS_VREDRAW; - wcx.lpfnWndProc = (WNDPROC) CaptWndProc; - wcx.hInstance = hInst; - wcx.hbrBackground = hBr; - wcx.lpszClassName = CaptWndClass; - if(argc > 2) wcx.hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON1SM)); - - if(!(result = RegisterClassEx(&wcx))) - { - printf("Shit! RegisterClassEx failed: %d\n", - (int)GetLastError()); - DeleteObject(hBr); - return 1; - } - - hWnd = CreateWindowEx(0, - CaptWndClass, - L"DrawCaption test", - WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU, - CW_USEDEFAULT, - CW_USEDEFAULT, - 600, - 470, - NULL, - 0, - hInst, - NULL); - - if(!hWnd) - { - printf("Shit! Can't create wnd!\n"); - UnregisterClass(CaptWndClass, hInst); - DeleteObject(hBr); - return 1; - } - - - ShowWindow(hWnd, SW_SHOW); - UpdateWindow(hWnd); - - while(GetMessage(&msg, NULL, 0, 0 )) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - DeleteObject(hBr); - UnregisterClass(CaptWndClass, hInst); - return 0; -} diff --git a/rostests/win32/user32/drawcaption/drawcap.rc b/rostests/win32/user32/drawcaption/drawcap.rc deleted file mode 100644 index c7f3270e80a..00000000000 --- a/rostests/win32/user32/drawcaption/drawcap.rc +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "resource.h" - -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS DrawCaption test\0" -#define REACTOS_STR_INTERNAL_NAME "drawcap\0" -#define REACTOS_STR_ORIGINAL_FILENAME "drawcap.exe\0" -#include - -ID_ICON1SM ICON res\icon1sm.ico - - diff --git a/rostests/win32/user32/drawcaption/drawcaption.rbuild b/rostests/win32/user32/drawcaption/drawcaption.rbuild deleted file mode 100644 index 6a7a720fb2e..00000000000 --- a/rostests/win32/user32/drawcaption/drawcaption.rbuild +++ /dev/null @@ -1,27 +0,0 @@ - - - - - . - - - - kernel32 - user32 - gdi32 - drawcap.c - drawcap.rc - - - - . - - - - kernel32 - user32 - gdi32 - capicon.c - capicon.rc - - \ No newline at end of file diff --git a/rostests/win32/user32/drawcaption/res/icon1big.ico b/rostests/win32/user32/drawcaption/res/icon1big.ico deleted file mode 100644 index 2f4358ac9f8119675d81d3c1ee847b2507efdff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeHJdr*^C7XR{qKnMh6@d4G~s8tIxtc(ijBEhzVQei-dgb)fADkUz=x+t|%66Csc%c|EDQsfQDR51Pj4Icp+vZ<{=g# z0uaAOtU`n$LJ&cS#fbR`KZFm0i*Q3YBj|`1krOhIDiQgG2%?kN5Fla@i4?UWpQ3(u zilTN`(`bKaL9|iSu3NZv7Fl;7PwEJtonL^@M4sp&`sN@=JS4v75d#<95u}AktR$Xb zL@1qJblA_YtoO|~Z(1@lJ8fB6D#*;#Ak>I%$jVaMgu@Vg33ZK;B^v zr=*^uwvf0<{z+b^O>}z6Z-au$b-B4}Sh`e+c3Z&1qty;~_hw+T?;`G??FPF)#1A&R z85S&P1(~b|f`a4&6m=TwHGOh+K66|uZTu-INey0JBQ`mlfBnp4p6_Kc&o(m{WtY&u zt#taSTspn%6u#eOFwU#l?E7{fIGiSkkM9PFr1>W&r_z$?d2m`78+*^p=Xcp-<#JoW z#YJvF8)qo$xX0wWPWsa6r6ml;1)ZyF1Gu_2!ip8`@YY+kCd@7g3 zbj{N|Hv)t4or=LINf^sD*)yGfdb5+$WdrFCHoFP^ZiLiS75Mvq-$PN~lJD3dIXjn~ z&B^Ju&6?E)o}O)J`<#ZNPWn3(db){q_`S396$8l^=@rteBoCgRO|WremyO9R``)ph z6JfEjwdRnJPT+Fe(Elnk#*^n*W@H!hp6}vv)i7g52ij|g=;$5@55Hw%GA|9194uSb zO6p+2`bABq5A%FNCL77Shes2}UZ$9gckDWyekPyImK%J0y1?682{AFfuzK}v6Z(`( zqm@;=xYPlQ)d1PqDxlFyFOHQR`@Cey`phJapm0>!#q~cKfVayS7@3>(7}#Cw?Uq)(i#)cG~mj?0lh@qK=VS zJSj1mX9_r+3ca772IkD^fw(v=2n2V2By(e|P-0?@HYrI3@4csi4?k?NVn59tyFc=L ze3?j8XXf#g_`P=kllk|Si9F9%n9S1m-Q6qo^XB!zOE2|8Lc##rzB|D-k%*1Gp-f8Z zf%J4W?AfDw=;c-Nn`fFvpZ>ZgBct_^w|5)Nm_hpfyX&Jn<9`DJE*HQ2@-5?{MFYU& z^+RIfAgoz)&xrMwjprrrLgDrMB9RIRKKo4b^Ww$l$Qd<`z70u9X|m3ps{~))PVn*h z2hQ(_6dWwym73aY*|^b!-;@dV?zKX0Zi@x`AZH@?$Vz0SqC+Gi=Ryzc+oyUI8v4(; ziM)UD+qSLMylImT=Y)3F^|}` zz<~opuyd!<8WeQZk!@=E@(ba~$qi;=|AP;-kdsqyK!q+()&AlqI=braS6>_=Y#pSf4Pal@>chh1eqL3!b1_HmuDZrzRUqeqSK_S-t_7Y#W-hu(QdkM|oReEO-? z9ygzVt-yf}`&L?7y<1#dwOTAzgIKJAFTd1dUTg3SqFf!xMn}t6Y~S8$E-ofM3_wQ4 zAo{L{Pd>5O;}!@i-ghKV_BL(0!AnS}u1ijCe=HXFqR#_l?wI4^6sun(OZG7bM~@uQ zK91JBJ$NVs|L&>_vkg9lA`c8t_v!-gNQFS>0~ z>4PDOq|P9b)Egy|_D7^wNWIe1boi^q*+!G#N zStkE!@AWXG}WP0Qrjuf+80UEPe#kyHv zRW`TH*ILZGcbf|%r+_ks-#CqW8hVWV<2-h>pU?XsIg?*k;CUhrd@p;~K$L$6bNmD- MHGvlTGxsjQ8_N4tb^rhX diff --git a/rostests/win32/user32/drawcaption/res/icon2big.ico b/rostests/win32/user32/drawcaption/res/icon2big.ico deleted file mode 100644 index 909dbd0621b69f22ac3b582674e5cae8a3860f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17542 zcmeHO2~?Fwmi|q8#!RQXlT6QK(wUhK>7Gd^J-yfy7ZQ!qXpBjWu}Kq+O9a{XT@)8U zL{Qw=5fNnH1OzqW3K9g3Y$9>Vq8MkA&dHpPbCRAmYI5iM>b)Ny@E#yb?9+!j=X>@4 z^;g}xb!)%(K1~~=eMcKNPD5;^75%%W&D1o_%F6iupr-v1X^%W&c#r)%O-q@mX%8Zu z`Q5*xX+O5nv?oypBs2$r=?oDlHyTDIFe-sTOJEF2-UDEkX@3jc2YeT}ANW3iS=fb# z@J#4w{QfA*B#GB62X``9+N>)(LK0Ltu# z0Q-%7H3sMzn9laUVty)4+I!vKg2$O zC*TS=0*iq80NchkQ3kdE<-)f72KWzvvax7${-)fbF-GyNsf0N$7AiK(8Ky7 zc+=%id7GOT?3eqePMs=|k&%+?Iziq^1pmoPyCVtj-7wN^bdY@4@n3^Ct|gqKeFj@w zTUoPajbyq_k&}r|(v<4bKT?pV8=Ucer$AjPMkFIPqItWA6nR*Go#i=!HdOUn-Le$k9P26!PhgLI@>1Y|@xnL&GQs8j^ckYc~7T>ttE z;NR-ymtX#3%a$#Y=>4kHB)Cf(%D1o$J5Aw-_dA6z%9tPn&;7zj&K9hay{lf4%An~B z`(z#;XU&>rHGB5#FV?MFCo%4?%E3*}a<*`dv}Og45CTBg1etj5fsW!xITXE6Dne#P z4TS%>bLW1sZQC~4=)Xwz$2iKl@)$XjyIfj#1&vS}`j$;c$y%x1;v(gN(~}0k|C9v_ z7F>&tj+QkZZ%9SN0=ckvi<~VASN+hQA0}-%%f8iibQDKO!}cI451wA$AO9FTHj5T5 zx|WcTAnQUrWcLa?dA~Zvz(3od17oT^f2Ews2_5l%;rMMSh?Fw_X$=G6-@(D*+J+4q zB-qWB;^e2cwUMXS}uNg-OSrt+LzC=6rwr&zUo4 zmXnjy=P4;EvS#IS$@hFtuDo5?KmR@3qrXFTXW2HaA?z;$(9XOS=sS+X{@X}-yni?o zd%$xa_s2ixu7kh7|Cbv#ZWKR1KXrz<+E^xB1G>hJ&f74>YEG&CvOJHk)R#)J*OV{% zfOKHG#o`L!d_V)G; z!NI{_a{mep43u;aTe(=hT`pD{*PvmNxz2O17~`!iJEYh8)_FWvDpt(-I?G`k&&U?T zym|AymoHy_JtHGSc!o&#nXTr|d;1bbT>hqQQR|w?o_XoWPB{?0=w^ZI(@$Dt9v`sw zM<7Uie7uB&gh;&SE7DRFEgu|A{Z{#BTTJ`mgX&bNjraT}-(>>te-;DQ{)m{E7}>dV zr!Yh0~{yHi3nH=30|4WxHP2ak8tK{b9syjgZDsOpf zy@PyIUvzi)M;o|jyjv0_XDbu9h8Fh4zq7M*DP^CQmZt7t(aSugEX+=>o-Dg-{BtgF z|G7||A;msZYWw2f&CRWJ`}XaUmzO6zgKmpmD}{cx^53WT-d+AnBIR;jkra77`$1p) zySuxWW@csz+rag6ZTKpshxoYpE%~JN;9bRkovy+ia?-WF`1khqZlvr>N=k%hpv1() zzZgAGmp;mQ67_3lgRie|Yf({=WMySZY;3IX9>9K}K7~4oRjXD>SXh`^n?gfF)gFQU zT7rUt)P9Y#hgbslbLL}y?kz0OHIDR1m-JZ|#_*qU2DUQCAoefnfGh@_-CB3=-Yo?8 zV2&g91LrjNG_FmXH*Z#J6W3X`k^98@_3KqzdGFK_6&2O>%rwe^`Iw*OSbo!{O~SJZ z=Nj)EtjEK{<4+jJRu-A;;{#;ZT3A@9_;PEL+$2lwLi^z?3h!Fj>{ zpxoFelp)(oP^Q!$aSi5JtgNh5AWdTL-o3Ja|9&}g+XHBwt!s{r}S z9W!n$fN}X5>*E||f094)MxOM(VE<`LK?-R;VmnX(^2ks9ye0+SQC$L6HPk4EG zi4K%|Yq0z;Tej@8I=>by+3$Q;QSzxlatl>#oWKeJH%ke zz+ic2IgH&u9zJ|n$)EkN&t1JQ^!clg5xq}19|?{hwCz)@H3x>m$6(81P5ZjJxmgY# zJSY_v6>1$SEiF~!n0=9-pRf9Zb7R-8U8+wYZ*^YfJYgBk^~;z?&V%J)DCNlisZ*z< zsi{dAH#Rm(Lqmhq*VoJ2Z@(>db#-#$#0m9on#OdFyM6oiab5p2`0sO_9tw|rmBpI4 zg>3-T{xXR82G+=kzUmnLHY$Np35-fWmw>3CX_jMctl&h#L&?4P>14ra@FimWfH59> z`@NIt_^vJ*kKK+{I^KshM*WK3P-E~ z->J~D0&IXTKdnBsbjUaw1|oqm$Yc%!DcfHj(xok&w*2n{^so6>;3vS(fnNdi!JzNQ zcoXn_9Pmp(@A`kjGkcsq4D{I{ZA*bZ0?bQ)j-LYb@gU7-0bAfDU@q`FKzrp9z|jQs zHCX`A_hb(60$>BsKZX3#_r(feduZ=B<%Mm12zWHZal)-!=ked9IX!bD&BlQ(aB?`DrT>%(B`*KpgHVc+Vx7Hu84KUz6C zIZ3APEI9+aRtxOUw{7$N+2jXefA^8qF~NLyi~oGV?Y?0E*8rDYq~o%jIMC3s0=YB1+;uYh~)OxpJ1 zyk3*myl^?cC+@axv|zP?mjT)qE%8*J;wvY%2Z#5n90{o3jry0kpe53Xkx(VYXY&jMex57SPe^YKnbketqo zI%TeYv_G1^%k^PNn-vQ(+8!)_Mi#SfM6NlDMeVQXW1} zI%{)>r+&)D$U{?xzcdxZeA26OBtW;5OZ{8K>M$t?o-J4EhhU#K*B=-YO*{OgxoG46 znyVi=+C9`iQE!&#_q=>`qIme)Z{&xz=+pV@ubZnM`sY2=fl+^#>o*hicehQ^R&=gx zy~2g6O>(hni(K5hRo*|4tnk6XG&N>9ZZFqlOXu-Cg^wCaO?WG-ZNKU&os>av($-E|4ZE}b$BeV>$j;xrEZ(N zunto&jo+Au^|B1hvMtc5_UoTQUQqvK>XE7Mq+XFaMd}kN3!M*Lw@cYTCwvq1uOr`A z1a!h*f%mVVpZp5;1qF=f>)2B+^lYoScdR`hQ+LfVKz*RDo7MHQx=xn-f&NX**FEOw z3^oli|Mb9t14297jvYIco}G2+I(f>2VBa9^f1u0z{b1`dR}Qp4rjC?)MCuf&H>3`q zx_s(>X+NO;w7R;Q`u9J82K|$VEnxh%zy{K42^ib0Ixr4+&L0hb1rjjm6AZt%G%dUq z_mc?RK@pGb#4}=I>>xl|20*n@OF*?jm+0NbdChhCd!FCE9rx5P3ey%{gR@5soD~P zGt6e(b%St5))6ReIH%J${TW!nhqi(DZ{Q-wL=lT->)!vO?$I47Q&_`qa(n zVGQZ#5S{KDgPfH z$uyy_*E6vAMBaKyah%wq)74{B{)a-pV{bBL-0SSN*l|gh{D(rHWhrBwZ#^b`jvsy- z3HmM`Zo|Sq$A&rnNnhvxYGZ{OL(DrESfa1Se}uEDpLqt0c!y`Abh+!Xm!FTcwY8~p zD9@q;0sWfF%F2Xe59fWZ%@zaclmE^1?XZA_OBT!P3+9Xc8}sD%^IunVN!!iCJ;Wkm z;|HC8w!s|OKcK~Re^9|Mz(108^aSY=POdKV21R(ZP@fXOnTfU^*uNgoYO&?l;$KWoPGh0<@k%lmI7sda|s=>wAE_6&3yIHy2QdZBWYin*_z zE64s=8m;zT-S?mW52JpB?bhq(^VP<3RhH%Z0{7s~I>Vl?*MBGFNt<;Iwtmy{+@IL~ z!Pd_;g7P0qdA+AQDrH*br W%b32?#*77G;DI+1Vj2*xY5xzxf^8W9 diff --git a/rostests/win32/user32/drawcaption/res/icon2sm.ico b/rostests/win32/user32/drawcaption/res/icon2sm.ico deleted file mode 100644 index eeba9f57c658475457c9fdfa0b1eacd11727470c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcma)2Ar8YZ47^B_LW7D2_q;HJf|}<+9rRQ7j7bC8U8+b01wH%Dj-%LCfJ7^$KzJo! zQ6yD)k_itg5JRuT0Xp1|KxIlgB7zrvIC@t`(o~X6*nvFbuL+jFZ^822Gn*2Y`Diz* cSX--_!NzmcIckMq!S9fN6C3auyK8^o59(Z4!2kdN diff --git a/rostests/win32/user32/drawcaption/resource.h b/rostests/win32/user32/drawcaption/resource.h deleted file mode 100644 index ce5b98a9f4d..00000000000 --- a/rostests/win32/user32/drawcaption/resource.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _CAPICON_RESOURCE_H -#define _CAPICON_RESOURCE_H - -#define ID_ICON1BIG 101 -#define ID_ICON1SM 102 -#define ID_ICON2BIG 103 -#define ID_ICON2SM 104 - - -#endif /* _CAPICON_RESOURCE_H */ diff --git a/rostests/win32/user32/kbdlayout/kbdlayout.c b/rostests/win32/user32/kbdlayout/kbdlayout.c deleted file mode 100644 index 58e7bbb4001..00000000000 --- a/rostests/win32/user32/kbdlayout/kbdlayout.c +++ /dev/null @@ -1,387 +0,0 @@ -/* - * PROJECT: ReactOS - * LICENSE: GPL - See COPYING in the top level directory - * FILE: base/applications/testset/user32/kbdlayout/kbdlayout.c - * PURPOSE: Keyboard layout testapp - * COPYRIGHT: Copyright 2007 Saveliy Tretiakov - */ - -#define UNICODE -#include -#include -#include "resource.h" - - - -LRESULT MainDialogProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); - - -HINSTANCE hInst; -HWND hMainDlg; - - -typedef struct { - WNDPROC OrigProc; - WCHAR WndName[25]; -} WND_DATA; - -DWORD WINAPI ThreadProc(LPVOID lpParam) -{ - - DialogBoxParam(hInst, - MAKEINTRESOURCE(IDD_MAINDIALOG), - NULL, - (DLGPROC)MainDialogProc, - (LPARAM)NULL); - - return 0; -} - -INT WINAPI WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nCmdShow) -{ - - - hInst = hInstance; - - ThreadProc(0); - - return 0; -} - - -int GetKlList(HKL **list) -{ - HKL *ret; - int n; - - n = GetKeyboardLayoutList(0, NULL); - ret = HeapAlloc(GetProcessHeap(), 0, sizeof(HKL)*n); - GetKeyboardLayoutList(n, ret); - *list = ret; - return n; -} - -void FreeKlList(HKL *list) -{ - HeapFree(GetProcessHeap(), 0, list); -} - - -void UpdateData(HWND hDlg) -{ - WCHAR buf[KL_NAMELENGTH]; - WCHAR buf2[512]; - - HWND hList; - HKL *klList, hKl; - int n, i,j; - - GetKeyboardLayoutName(buf); - swprintf(buf2, L"Active: %s (%x)", buf, GetKeyboardLayout(0)); - SetWindowText(GetDlgItem(hDlg, IDC_ACTIVE), buf2); - - hList = GetDlgItem(hDlg, IDC_LIST); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - - n = GetKlList(&klList); - hKl = GetKeyboardLayout(0); - for(i = 0; i < n; i++) - { - swprintf(buf, L"%x", klList[i] ); - j = SendMessage(hList, LB_ADDSTRING, 0, (LPARAM) buf); - SendMessage(hList, LB_SETITEMDATA, j, (LPARAM) klList[i]); - if(klList[i] == hKl) SendMessage(hList, LB_SETCURSEL, j, 0); - } - - FreeKlList(klList); -} - -void FormatMsg(WCHAR *format, ...) -{ - WCHAR buf[255]; - va_list argptr; - va_start(argptr, format); - _vsnwprintf(buf, sizeof(buf)-1, format, argptr); - MessageBox(0, buf, L"msg", 0); - va_end(argptr); -} - -void FormatBox(HWND hWnd, DWORD Flags, WCHAR *Caption, WCHAR *Format, ...) -{ - WCHAR buf[255]; - va_list argptr; - va_start(argptr, Format); - _vsnwprintf(buf, sizeof(buf)-1, Format, argptr); - MessageBox(hWnd, buf, Caption, Flags); - va_end(argptr); -} - - -LRESULT CALLBACK WndSubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - WND_DATA *data = (WND_DATA*)GetWindowLong(hwnd, GWL_USERDATA); - - if(uMsg == WM_INPUTLANGCHANGE) - { - FormatMsg(L"%s: WM_INPUTLANGCHANGE lParam=%x wParam=%x\n", data->WndName, lParam, wParam); - UpdateData(hMainDlg); - //Pass message to defwindowproc - } - else if(uMsg == WM_INPUTLANGCHANGEREQUEST) - { - FormatMsg(L"%s: WM_INPUTLANGCHANGEREQUEST lParam=%x wParam=%x\n", data->WndName, lParam, wParam); - UpdateData(hMainDlg); - //Pass message to defwindowproc - } - - return ( CallWindowProc( data->OrigProc, hwnd, uMsg, wParam, lParam) ); -} - -void SubclassWnd(HWND hWnd, WCHAR* Name) -{ - WND_DATA *data = HeapAlloc(GetProcessHeap(), 0, sizeof(WND_DATA)); - data->OrigProc = (WNDPROC)SetWindowLong( hWnd, GWL_WNDPROC, (LONG)WndSubclassProc); - wcsncpy(data->WndName, Name, 25); - SetWindowLong(hWnd, GWL_USERDATA, (LONG)data); - return; -} - -DWORD GetActivateFlags(HWND hDlg) -{ - DWORD ret = 0; - - if(IsDlgButtonChecked(hDlg, IDC_KLF_REORDER)) - ret |= KLF_REORDER; - - if(IsDlgButtonChecked(hDlg, IDC_KLF_RESET)) - ret |= KLF_RESET; - - if(IsDlgButtonChecked(hDlg, IDC_KLF_SHIFTLOCK)) - ret |= KLF_SHIFTLOCK; - - if(IsDlgButtonChecked(hDlg, IDC_KLF_SETFORPROCESS)) - ret |= KLF_SETFORPROCESS; - - return ret; - -} - -DWORD GetLoadFlags(HWND hDlg) -{ - DWORD ret = 0; - - if(IsDlgButtonChecked(hDlg, IDL_KLF_ACTIVATE)) - ret |= KLF_ACTIVATE; - - if(IsDlgButtonChecked(hDlg, IDL_KLF_NOTELLSHELL)) - ret |= KLF_NOTELLSHELL; - - if(IsDlgButtonChecked(hDlg, IDL_KLF_REORDER)) - ret |= KLF_REORDER; - - if(IsDlgButtonChecked(hDlg, IDL_KLF_REPLACELANG)) - ret |= KLF_REPLACELANG; - - if(IsDlgButtonChecked(hDlg, IDL_KLF_SUBSTITUTE_OK)) - ret |= KLF_SUBSTITUTE_OK; - - if(IsDlgButtonChecked(hDlg, IDL_KLF_SETFORPROCESS)) - ret |= KLF_SETFORPROCESS; - - return ret; -} - -UINT GetDelayMilliseconds(HWND hDlg) -{ - WCHAR Buf[255]; - UINT ret; - - GetWindowText(GetDlgItem(hDlg, IDC_DELAY), Buf, sizeof(Buf)); - - swscanf(Buf, L"%d", &ret); - - return ret*1000; -} - -HKL GetSelectedLayout(HWND hDlg) -{ - int n; - HWND hList; - hList = GetDlgItem(hDlg, IDC_LIST); - if((n = SendMessage(hList, LB_GETCURSEL, 0, 0)) != LB_ERR) - return (HKL) SendMessage(hList, LB_GETITEMDATA, n, 0); - else return INVALID_HANDLE_VALUE; -} - -HKL GetActivateHandle(HWND hDlg) -{ - - if(IsDlgButtonChecked(hDlg, IDC_FROMLIST)) - return GetSelectedLayout(hDlg); - else if(IsDlgButtonChecked(hDlg, IDC_HKL_NEXT)) - return (HKL)HKL_NEXT; - - return (HKL)HKL_PREV; - -} - - -/*************************************************** - * MainDialogProc * - ***************************************************/ - -LRESULT MainDialogProc(HWND hDlg, - UINT Msg, - WPARAM wParam, - LPARAM lParam) -{ - HKL hKl; - - switch (Msg) - { - case WM_INITDIALOG: - { - WCHAR Buf[255]; - UpdateData(hDlg); - hMainDlg = hDlg; - - SubclassWnd(GetDlgItem(hDlg, IDC_LIST), L"List"); - SubclassWnd(GetDlgItem(hDlg, IDC_EDIT1), L"Edit1"); - SubclassWnd(GetDlgItem(hDlg, IDC_KLID), L"Klid"); - SubclassWnd(GetDlgItem(hDlg, ID_CANCEL), L"CancelB"); - SubclassWnd(GetDlgItem(hDlg, IDC_ACTIVATE), L"ActivateB"); - SubclassWnd(GetDlgItem(hDlg, IDC_REFRESH), L"RefreshB"); - SubclassWnd(GetDlgItem(hDlg, IDC_UNLOAD), L"UnloadB"); - SubclassWnd(GetDlgItem(hDlg, IDC_LOAD), L"LoadB"); - - CheckRadioButton(hDlg, IDC_FROMLIST, IDC_FROMEDIT, IDC_FROMLIST); - SetWindowText(GetDlgItem(hDlg, IDC_KLID), L"00000419"); - - swprintf(Buf, L"Current thread id: %d", GetCurrentThreadId()); - SetWindowText(GetDlgItem(hDlg, IDC_CURTHREAD), Buf); - - SetWindowText(GetDlgItem(hDlg, IDC_DELAY), L"0"); - - return 0; - } /* WM_INITDIALOG */ - - case WM_COMMAND: - { - switch(LOWORD(wParam)) - { - case ID_CANCEL: - { - EndDialog(hDlg, ERROR_CANCELLED); - break; - } - - case IDC_ACTIVATE: - { - if((hKl = GetActivateHandle(hDlg)) != INVALID_HANDLE_VALUE) - { - Sleep(GetDelayMilliseconds(hDlg)); - if(!(hKl = ActivateKeyboardLayout(hKl, GetActivateFlags(hDlg)))) - FormatBox(hDlg, MB_ICONERROR, L"Error", - L"ActivateKeyboardLayout() failed. %d", GetLastError()); - else UpdateData(hDlg); - //FormatBox(hDlg, 0, L"Activated", L"Prev - %x, err - %d.", hKl, - // GetLastError()); - } - else MessageBox(hDlg, L"No item selected", L"Error", MB_ICONERROR); - break; - } - - case IDC_UNLOAD: - { - if((hKl = GetSelectedLayout(hDlg)) != INVALID_HANDLE_VALUE) - { - Sleep(GetDelayMilliseconds(hDlg)); - if(!UnloadKeyboardLayout(hKl)) - FormatBox(hDlg, MB_ICONERROR, L"Error", - L"UnloadKeyboardLayout() failed. %d", - GetLastError()); - else UpdateData(hDlg); - } - else MessageBox(hDlg, L"No item selected", L"Error", MB_ICONERROR); - break; - } - - case IDC_LOAD: - { - WCHAR buf[255]; - GetWindowText(GetDlgItem(hDlg, IDC_KLID), buf, sizeof(buf)); - Sleep(GetDelayMilliseconds(hDlg)); - if(!LoadKeyboardLayout(buf, GetLoadFlags(hDlg))) - FormatBox(hDlg, MB_ICONERROR, L"Error", - L"LoadKeyboardLayout() failed. %d", - GetLastError()); - else UpdateData(hDlg); - break; - } - - case IDC_REFRESH: - { - UpdateData(hDlg); - break; - } - - case IDC_NEWTHREAD: - { - if(!CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL)) - { - FormatBox(hDlg, MB_ICONERROR, L"Error!", - L"Can not create thread (%d).", GetLastError()); - } - } - - case IDC_LIST: - { - if(HIWORD(wParam) == LBN_SELCHANGE) - { - WCHAR buf[25]; - if((hKl = GetSelectedLayout(hDlg)) != NULL) - { - swprintf(buf, L"%x", hKl); - SetWindowText(GetDlgItem(hDlg, IDC_HANDLE), buf); - } - } - break; - } - - } - - return TRUE; - } /* WM_COMMAND */ - - - case WM_INPUTLANGCHANGE: - { - FormatMsg(L"dlg WM_INPUTLANGCHANGE lParam=%x wParam=%x\n", lParam, wParam); - return FALSE; - } - - case WM_INPUTLANGCHANGEREQUEST: - { - FormatMsg(L"dlg WM_INPUTLANGCHANGEREQUEST lParam=%x wParam=%x\n", lParam, wParam); - UpdateData(hDlg); - return FALSE; - } - - case WM_CLOSE: - { - EndDialog(hDlg, ERROR_CANCELLED); - return TRUE; - } /* WM_CLOSE */ - - default: - return FALSE; - } - -} - - - - diff --git a/rostests/win32/user32/kbdlayout/kbdlayout.dsp b/rostests/win32/user32/kbdlayout/kbdlayout.dsp deleted file mode 100644 index e2d2d804e6d..00000000000 --- a/rostests/win32/user32/kbdlayout/kbdlayout.dsp +++ /dev/null @@ -1,98 +0,0 @@ -# Microsoft Developer Studio Project File - Name="kbdlayout" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=kbdlayout - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "kbdlayout.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "kbdlayout.mak" CFG="kbdlayout - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "kbdlayout - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "kbdlayout - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "kbdlayout - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "kbdlayout - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "kbdlayout - Win32 Release" -# Name "kbdlayout - Win32 Debug" -# Begin Source File - -SOURCE=.\kbdlayout.c -# End Source File -# Begin Source File - -SOURCE=.\kbdlayout.rc -# End Source File -# Begin Source File - -SOURCE=.\resource.h -# End Source File -# End Target -# End Project diff --git a/rostests/win32/user32/kbdlayout/kbdlayout.rbuild b/rostests/win32/user32/kbdlayout/kbdlayout.rbuild deleted file mode 100644 index fe7706ef401..00000000000 --- a/rostests/win32/user32/kbdlayout/kbdlayout.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - . - - - kernel32 - user32 - gdi32 - kbdlayout.c - kbdlayout.rc - diff --git a/rostests/win32/user32/kbdlayout/kbdlayout.rc b/rostests/win32/user32/kbdlayout/kbdlayout.rc deleted file mode 100644 index 41eb31be514..00000000000 --- a/rostests/win32/user32/kbdlayout/kbdlayout.rc +++ /dev/null @@ -1,142 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Russian resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) -#ifdef _WIN32 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -#pragma code_page(1251) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_MAINDIALOG DIALOG DISCARDABLE 0, 0, 327, 194 -STYLE DS_MODALFRAME | DS_CENTER | WS_CAPTION | WS_SYSMENU -CAPTION "Keyboard layout test" -FONT 8, "MS Sans Serif" -BEGIN - PUSHBUTTON "Close",ID_CANCEL,215,172,105,14 - EDITTEXT IDC_EDIT1,7,140,199,47,ES_MULTILINE | ES_AUTOHSCROLL - LISTBOX IDC_LIST,124,60,84,46,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | - WS_TABSTOP - LTEXT "Loaded layouts",IDC_STATIC,124,50,49,8 - LTEXT "Active:",IDC_ACTIVE,7,127,114,10,SS_SUNKEN - PUSHBUTTON "Unload",IDC_UNLOAD,124,109,41,14 - PUSHBUTTON "Activate",IDC_ACTIVATE,166,109,41,14 - GROUPBOX "Activate Flags",IDC_STATIC,215,7,103,67 - CONTROL "KLF_REORDER",IDC_KLF_REORDER,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,221,22,69,10 - CONTROL "KLF_RESET",IDC_KLF_RESET,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,221,34,66,12 - CONTROL "KLF_SETFORPROCESS",IDC_KLF_SETFORPROCESS,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,221,48,95,10 - CONTROL "KLF_SHIFTLOCK",IDC_KLF_SHIFTLOCK,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,221,60,72,10 - GROUPBOX "Activate layout",IDC_STATIC,216,77,103,50 - CONTROL "From list",IDC_FROMLIST,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,220,90,41,10 - CONTROL "HKL_NEXT",IDC_HKL_NEXT,"Button",BS_AUTORADIOBUTTON,220, - 101,53,10 - CONTROL "HKL_PREV",IDC_HKL_PREV,"Button",BS_AUTORADIOBUTTON,220, - 112,53,10 - GROUPBOX "Load layout",IDC_STATIC,7,7,113,118 - CONTROL "KLF_ACTIVATE",IDL_KLF_ACTIVATE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,14,44,67,10 - CONTROL "KLF_NOTELLSHELL",IDL_KLF_NOTELLSHELL,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,14,57,83,10 - LTEXT "pwszKLID:",IDC_STATIC,14,17,35,8 - EDITTEXT IDC_KLID,14,27,54,14,ES_AUTOHSCROLL - CONTROL "KLF_REORDER",IDL_KLF_REORDER,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,14,71,69,10 - CONTROL "KLF_REPLACELANG",IDL_KLF_REPLACELANG,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,14,84,85,10 - CONTROL "KLF_SUBSTITUTE_OK",IDL_KLF_SUBSTITUTE_OK,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,14,97,92,10 - CONTROL "KLF_SETFORPROCESS",IDL_KLF_SETFORPROCESS,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,14,110,95,10 - PUSHBUTTON "Load",IDC_LOAD,71,27,46,14 - PUSHBUTTON "Refresh",IDC_REFRESH,124,124,83,12 - GROUPBOX "Multithreading",IDC_STATIC,216,130,104,39 - LTEXT "Current thread ID:",IDC_CURTHREAD,219,141,93,8 - PUSHBUTTON "Create new thread",IDC_NEWTHREAD,234,152,71,12 - GROUPBOX "Load\\Activate delay",IDC_STATIC,124,7,85,40 - LTEXT "Delay (seconds):",IDC_STATIC,130,17,75,8 - EDITTEXT IDC_DELAY,128,29,59,14,ES_AUTOHSCROLL -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_MAINDIALOG, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 320 - TOPMARGIN, 7 - BOTTOMMARGIN, 187 - END -END -#endif // APSTUDIO_INVOKED - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // Russian resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/rostests/win32/user32/kbdlayout/resource.h b/rostests/win32/user32/kbdlayout/resource.h deleted file mode 100644 index a245b7f9fbd..00000000000 --- a/rostests/win32/user32/kbdlayout/resource.h +++ /dev/null @@ -1,46 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by kbdlayout.rc -// -#define IDD_MAINDIALOG 101 -#define ID_CANCEL 1000 -#define IDC_EDIT1 1021 -#define IDC_LIST 1022 -#define IDC_ACTIVE 1023 -#define IDC_EDIT2 1024 -#define IDC_DELAY 1024 -#define IDC_UNLOAD 1025 -#define IDC_ACTIVATE 1026 -#define IDC_KLF_REORDER 1027 -#define IDC_KLF_RESET 1028 -#define IDC_KLF_SETFORPROCESS 1029 -#define IDC_KLF_SHIFTLOCK 1030 -#define IDC_FROMLIST 1032 -#define IDC_HKL_NEXT 1033 -#define IDC_HKL_PREV 1034 -#define IDL_KLF_ACTIVATE 1035 -#define IDL_KLF_NOTELLSHELL 1036 -#define IDC_KLID 1037 -#define IDL_KLF_REORDER 1038 -#define IDL_KLF_REPLACELANG 1039 -#define IDL_KLF_SUBSTITUTE_OK 1040 -#define IDL_KLF_SETFORPROCESS 1041 -#define IDC_HKL_PREV2 1042 -#define IDC_FROMEDIT 1042 -#define IDC_LOAD 1043 -#define IDC_REFRESH 1044 -#define IDC_HANDLE 1046 -#define IDC_CURTHREAD 1049 -#define IDC_NEWTHREAD 1050 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 105 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1051 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/rostests/win32/user32/sysicon/sysicon.c b/rostests/win32/user32/sysicon/sysicon.c deleted file mode 100644 index 84802a1dfb8..00000000000 --- a/rostests/win32/user32/sysicon/sysicon.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 2006 Saveliy Tretiakov - * - * 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. - */ - - /* This testapp demonstrates WS_SYSMENU + WS_EX_DLGMODALFRAME - * behavior and shows that DrawCaption does care - * about WS_EX_DLGMODALFRAME and WS_EX_TOOLWINDOW - */ - -#include "windows.h" -#include "stdio.h" -#include "resource.h" - -WCHAR WndClass[] = L"sysicon_class"; - -LRESULT CALLBACK WndProc(HWND hWnd, - UINT msg, - WPARAM wParam, - LPARAM lParam) -{ - - switch (msg) - { - - case WM_PAINT: - { - HDC hDc; - PAINTSTRUCT Ps; - RECT Rect; - GetClientRect(hWnd, &Rect); - - Rect.left = 10; - Rect.top = 10; - Rect.right-=10; - Rect.bottom = 25; - - hDc = BeginPaint(hWnd, &Ps); - SetBkMode( hDc, TRANSPARENT ); - - DrawCaption(hWnd, hDc, &Rect, DC_GRADIENT | DC_ACTIVE | DC_TEXT | DC_ICON); - - EndPaint(hWnd, &Ps); - - return 0; - } - - case WM_DESTROY: - PostQuitMessage(0); - return 0; - } - - return DefWindowProc(hWnd, msg, wParam, lParam); -} - -int APIENTRY WinMain(HINSTANCE hInst, - HINSTANCE hPrevInstance, - LPSTR lpCmdLine, - int nCmdShow) -{ - HWND hWnd1, hWnd2, hWnd3; - MSG msg; - WNDCLASSEX wcx; - UINT result; - - memset(&wcx, 0, sizeof(wcx)); - wcx.cbSize = sizeof(wcx); - wcx.lpfnWndProc = (WNDPROC) WndProc; - wcx.hInstance = hInst; - wcx.hbrBackground = (HBRUSH)COLOR_WINDOW; - wcx.lpszClassName = WndClass; - - if(!(result = RegisterClassEx(&wcx))) - { - return 1; - } - - /* WS_EX_DLGMODALFRAME */ - hWnd1 = CreateWindowEx(WS_EX_DLGMODALFRAME, - WndClass, - L"WS_SYSMENU | WS_EX_DLGMODALFRAME", - WS_CAPTION | WS_SYSMENU , - CW_USEDEFAULT, - CW_USEDEFAULT, - 400, - 100, - NULL, - 0, - hInst, - NULL); - - if(!hWnd1) - { - return 1; - } - - ShowWindow(hWnd1, SW_SHOW); - UpdateWindow(hWnd1); - - hWnd2 = CreateWindowEx(WS_EX_TOOLWINDOW, - WndClass, - L"WS_SYSMENU | WS_EX_TOOLWINDOW", - WS_CAPTION | WS_SYSMENU , - CW_USEDEFAULT, - CW_USEDEFAULT, - 400, - 100, - NULL, - 0, - hInst, - NULL); - - if(!hWnd2) - { - return 1; - } - - ShowWindow(hWnd2, SW_SHOW); - UpdateWindow(hWnd2); - - hWnd3 = CreateWindowEx(0, - WndClass, - L"WS_SYSMENU ", - WS_CAPTION | WS_SYSMENU , - CW_USEDEFAULT, - CW_USEDEFAULT, - 400, - 100, - NULL, - 0, - hInst, - NULL); - - if(!hWnd3) - { - return 1; - } - - ShowWindow(hWnd3, SW_SHOW); - UpdateWindow(hWnd3); - - while(GetMessage(&msg, NULL, 0, 0 )) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - UnregisterClass(WndClass, hInst); - return 0; -} diff --git a/rostests/win32/user32/sysicon/sysicon.rbuild b/rostests/win32/user32/sysicon/sysicon.rbuild deleted file mode 100644 index d3d088a8ef2..00000000000 --- a/rostests/win32/user32/sysicon/sysicon.rbuild +++ /dev/null @@ -1,10 +0,0 @@ - - . - - - - kernel32 - user32 - gdi32 - sysicon.c - diff --git a/rostests/win32/user32/user32.rbuild b/rostests/win32/user32/user32.rbuild deleted file mode 100644 index dcb5c66ed7b..00000000000 --- a/rostests/win32/user32/user32.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/rostests/win32/win32k/setup.c b/rostests/win32/win32k/setup.c deleted file mode 100644 index 507484da7bd..00000000000 --- a/rostests/win32/win32k/setup.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include "regtests.h" - -_SetupOnce() -{ -} diff --git a/rostests/win32/win32k/stubs.rbuild b/rostests/win32/win32k/stubs.rbuild deleted file mode 100644 index 3fb70ed726c..00000000000 --- a/rostests/win32/win32k/stubs.rbuild +++ /dev/null @@ -1,171 +0,0 @@ - - DbgPrint - RtlAssert@16 - ZwAllocateVirtualMemory@24 - RtlImageDirectoryEntryToData@16 - RtlInitAnsiString@8 - RtlInitUnicodeString@8 - NtClose@4 - ZwOpenFile@24 - ZwClose@4 - RtlNtStatusToDosError@4 - NtW32Call@20 - ZwOpenKey@12 - ZwQueryValueKey@24 - RtlUnicodeStringToInteger@12 - RtlQueryAtomInAtomTable@24 - RtlDeleteAtomFromAtomTable@8 - RtlCopyUnicodeString@8 - ZwRequestWaitReplyPort@12 - ZwDuplicateObject@28 - ZwSetSystemInformation@12 - RtlLookupAtomInAtomTable@12 - RtlAddAtomToAtomTable@12 - RtlFreeUnicodeString@4 - ZwConnectPort@32 - ZwOpenProcess@16 - RtlCreateUnicodeString@8 - RtlQueryRegistryValues@20 - RtlGetVersion@4 - NtOpenFile@24 - NtReadFile@36 - NtWaitForSingleObject@12 - NtDeviceIoControlFile@40 - NtAlertThread@4 - ZwQueryDefaultLocale@8 - ZwFreeVirtualMemory@16 - RtlFindClearBitsAndSet@12 - ZwReadFile@36 - RtlAnsiStringToUnicodeString@12 - RtlCompareUnicodeString@12 - ZwCreateDirectoryObject@12 - RtlCreateAtomTable@8 - RtlDestroyAtomTable@4 - ZwOpenDirectoryObject@12 - ZwQueryDirectoryObject@28 - RtlAppendUnicodeToString@8 - ZwCreateEvent@20 - RtlAreBitsSet@12 - RtlClearBits@12 - RtlInitializeBitMap@12 - RtlClearAllBits@4 - RtlAppendUnicodeStringToString@8 - ZwSetValueKey@24 - ZwQueryDirectoryFile@44 - RtlUnwind@16 - NtQueryInformationFile@20 - - - ExAllocatePool@8 - ExFreePool@4 - ExAllocatePoolWithTag@12 - IoBuildDeviceIoControlRequest@36 - IoBuildSynchronousFsdRequest@28 - @IofCallDriver@8 - KeWaitForSingleObject@20 - @ExAcquireFastMutex@4 - PsGetWin32Process@0 - @ExReleaseFastMutex@4 - @ExTryToAcquireFastMutex@4 - KeInitializeEvent@12 - ExEventObjectType - ObReferenceObjectByHandle@24 - KeSetEvent@12 - @ObfDereferenceObject@4 - KeRestoreFloatingPointState@4 - KeSaveFloatingPointState@4 - MmSecureVirtualMemory@12 - MmUnsecureVirtualMemory@4 - IoGetCurrentProcess@0 - KeQueryPerformanceCounter@4 - ExInitializeResourceLite@4 - ExAcquireResourceExclusiveLite@8 - KeGetCurrentThread@0 - PsGetCurrentProcessId@0 - @InterlockedDecrement@4 - @InterlockedExchange@8 - KeBugCheck@4 - ExDesktopObjectType - PsEstablishWin32Callouts@24 - MmUnmapViewInSystemSpace@4 - MmCreateSection@32 - MmMapViewInSystemSpace@12 - MmCopyToCaller@12 - PsGetWin32Thread@0 - KeDetachProcess@0 - ExInitializePagedLookasideList@28 - @InterlockedPushEntrySList@8 - ExInterlockedInsertTailList@12 - KeReleaseSpinLock@8 - ObOpenObjectByName@28 - ObOpenObjectByPointer@28 - KeAcquireSpinLock@8 - ExGetPreviousMode@0 - PsGetCurrentThreadId@0 - @ExReleaseResourceLite@4 - ExIsResourceAcquiredExclusiveLite@ - @InterlockedIncrement@4 - @InterlockedCompareExchange@12 - KeAddSystemServiceTable@20 - IoFileObjectType - ObReferenceObjectByPointer@16 - MmUnmapViewOfSection@8 - MmCopyFromCaller@12 - KiKernelApcDeliveryCheck@0 - ExIsResourceAcquiredExclusiveLite@4 - MmMapViewOfSection@40 - KeAttachProcess@4 - @InterlockedPopEntrySList@4 - ExWindowStationObjectType - ObInsertObject@24 - KeInitializeSpinLock@4 - PsThreadType - PsCreateSystemThread@28 - KeQueryTickCount@4 - PsLookupThreadByThreadId@8 - KeInitializeMutex@8 - KeWaitForMutexObject@20 - KeReleaseMutex@8 - KeDelayExecutionThread@12 - PsGetProcessId@4 - ObCreateObject@36 - KeClearEvent@4 - PsLookupProcessByProcessId@8 - PsProcessType - KeWaitForMultipleObjects@32 - KeQuerySystemTime@4 - ObReferenceObjectByName@32 - HalQueryDisplayOwnership@0 - IoDeviceObjectType - @KfReleaseSpinLock@8 - @KfAcquireSpinLock@4 - KeEnterCriticalRegion@0 - KeLeaveCriticalRegion@0 - KeGetCurrentIrql@0 - ExFreePoolWithTag@8 - PsGetProcessWin32Process@4 - ObFindHandleForObject@20 - PsSetProcessWin32Process@8 - PsGetThreadWin32Thread@4 - PsEstablishWin32Callouts@4 - PsSetThreadWin32Thread@8 - ProbeForRead@12 - ProbeForWrite@12 - @ExEnterCriticalRegionAndAcquireFastMutexUnsafe@4 - @ExReleaseFastMutexUnsafeAndLeaveCriticalRegion@4 - - - FT_Init_FreeType - FT_New_Memory_Face - FT_Done_Face - FT_MulFix - FT_Get_Sfnt_Table - FT_Get_First_Char - FT_Set_Pixel_Sizes - FT_Get_Char_Index - FT_Load_Glyph - FT_Get_Kerning - FT_Render_Glyph - FT_Set_Charmap - FT_Load_Sfnt_Table - diff --git a/rostests/win32/win32k/tests/eng-mem-1.c b/rostests/win32/win32k/tests/eng-mem-1.c deleted file mode 100644 index 8aa8aecd25f..00000000000 --- a/rostests/win32/win32k/tests/eng-mem-1.c +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include - -#include "regtests.h" - -static void RunTest() -{ -#if 0 - VOID *pmem1, *pmem2; - ULONG AllocSize1, AllocSize2; - ULONG AllocTag1, AllocTag2; - HANDLE Handle1, Handle2; - - /* Allocate memory with EngAllocMem */ - pmem1 = 0; - AllocSize1 = 1024; - AllocTag1 = TAG('D','x','y','z'); - pmem1 = EngAllocMem(FL_ZERO_MEMORY, AllocSize1, AllocTag1); - _AssertNotEqualValue(pmem1, NULL); - - /* Allocate memory with EngAllocMem */ - pmem2 = 0; - AllocSize2 = 1024; - AllocTag2 = TAG('D','x','y','z'); - pmem2 = EngAllocUserMem(AllocSize2, AllocTag2); - _AssertNotEqualValue(pmem1, NULL); - - /* Lock down memory with EngSecureMem - ** Dependant functions in ntoskrnl.exe are currently unimplemented - Handle1 = EngSecureMem(pmem1, AllocSize1); - _AssertNotEqualValue(pmem1, NULL); - Handle2 = EngSecureMem(pmem2, AllocSize2); - _AssertNotEqualValue(pmem2, NULL); - - /* Unlock down memory with EngSecureMem - ** Dependant functions in ntoskrnl.exe are currently unimplemented - EngUnsecureMem(Handle1); - EngUnsecureMem(Handle2); */ - - /* Free memory with EngFreeMem */ - EngFreeMem(pmem1); - - /* Free memory with EngFreeUserMem */ - EngFreeUserMem(pmem2); -#endif -} - -_Dispatcher(Eng_mem_1Test, "Win32k Engine Memory API") diff --git a/rostests/win32/win32k/win32k.rbuild b/rostests/win32/win32k/win32k.rbuild deleted file mode 100644 index 41660f11879..00000000000 --- a/rostests/win32/win32k/win32k.rbuild +++ /dev/null @@ -1,21 +0,0 @@ - - . - . - include - include - include - - - 0x0501 - 0x600 - - - rtshared - regtests - win32k_base - pseh - freetype - ntoskrnl - setup.c - - diff --git a/rostests/winetests/GUI/GUI.rbuild b/rostests/winetests/GUI/GUI.rbuild deleted file mode 100644 index 746cecc78bd..00000000000 --- a/rostests/winetests/GUI/GUI.rbuild +++ /dev/null @@ -1,16 +0,0 @@ - - - - . - 0x600 - 0x501 - gdi32 - kernel32 - user32 - comctl32 - browsewnd.c - mainwnd.c - misc.c - WinetestsGUI.rc - precomp.h - diff --git a/rostests/winetests/GUI/WinetestsGUI.rc b/rostests/winetests/GUI/WinetestsGUI.rc deleted file mode 100644 index 05d06f5f098..00000000000 --- a/rostests/winetests/GUI/WinetestsGUI.rc +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include "resource.h" - - -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS API test GUI\0" -#define REACTOS_STR_INTERNAL_NAME "WinetestsGUI\0" -#define REACTOS_STR_ORIGINAL_FILENAME "WinetestsGUI.exe\0" -//#include - -#include "rsrc.rc" diff --git a/rostests/winetests/GUI/browsewnd.c b/rostests/winetests/GUI/browsewnd.c deleted file mode 100644 index 613fc79dbb5..00000000000 --- a/rostests/winetests/GUI/browsewnd.c +++ /dev/null @@ -1,410 +0,0 @@ -/* - * PROJECT: ReactOS API Test GUI - * LICENSE: GPL - See COPYING in the top level directory - * FILE: - * PURPOSE: browse dialog implementation - * COPYRIGHT: Copyright 2008 Ged Murphy - * - */ - -#include - -#define EXE_SEARCH_DIR L"\\Debug\\testexes\\*" -#define IL_MAIN 0 -#define IL_TEST 1 - -#define HAS_NO_CHILD 0 -#define HAS_CHILD 1 - - -static INT -GetNumberOfExesInFolder(LPWSTR lpFolder) -{ - HANDLE hFind; - WIN32_FIND_DATAW findFileData; - INT numFiles = 0; - - hFind = FindFirstFileW(lpFolder, - &findFileData); - if (hFind == INVALID_HANDLE_VALUE) - { - DisplayError(GetLastError()); - return 0; - } - - do - { - if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - { - numFiles++; - } - } while (FindNextFile(hFind, &findFileData) != 0); - - return numFiles; -} - -static INT -GetListOfTestExes(PMAIN_WND_INFO pInfo) -{ - HANDLE hFind; - WIN32_FIND_DATAW findFileData; - WCHAR szExePath[MAX_PATH]; - LPWSTR ptr; - INT numFiles = 0; - INT len; - - len = GetCurrentDirectory(MAX_PATH, szExePath); - if (!len) return 0; - - wcsncat(szExePath, EXE_SEARCH_DIR, MAX_PATH - (len + 1)); - - numFiles = GetNumberOfExesInFolder(szExePath); - if (!numFiles) return 0; - - pInfo->lpExeList = HeapAlloc(GetProcessHeap(), - 0, - numFiles * (MAX_PATH * sizeof(WCHAR))); - if (!pInfo->lpExeList) - return 0; - - hFind = FindFirstFileW(szExePath, - &findFileData); - if (hFind == INVALID_HANDLE_VALUE) - { - DisplayError(GetLastError()); - HeapFree(GetProcessHeap(), 0, pInfo->lpExeList); - return 0; - } - - /* remove the glob */ - ptr = wcschr(szExePath, L'*'); - if (ptr) - *ptr = L'\0'; - - /* don't modify our base pointer */ - ptr = pInfo->lpExeList; - - do - { - if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - { - /* set the path */ - wcscpy(ptr, szExePath); - - /* tag the file onto the path */ - len = MAX_PATH - (wcslen(ptr) + 1); - wcsncat(ptr, findFileData.cFileName, len); - - /* move the pointer along by MAX_PATH */ - ptr += MAX_PATH; - } - } while (FindNextFile(hFind, &findFileData) != 0); - - return numFiles; -} - -static BOOL -NodeHasChild(PMAIN_WND_INFO pInfo, - HTREEITEM hItem) -{ - TV_ITEM tvItem; - - tvItem.hItem = hItem; - tvItem.mask = TVIF_CHILDREN; - - (void)TreeView_GetItem(pInfo->hBrowseTV, &tvItem); - - return (tvItem.cChildren == 1); -} - -static VOID -FreeItemTag(PMAIN_WND_INFO pInfo, - HTREEITEM hItem) -{ - TV_ITEM tvItem; - - tvItem.hItem = hItem; - tvItem.mask = TVIF_PARAM; - - (void)TreeView_GetItem(pInfo->hBrowseTV, &tvItem); - - HeapFree(GetProcessHeap(), - 0, - (PTEST_ITEM)tvItem.lParam); -} - -static VOID -TraverseTreeView(PMAIN_WND_INFO pInfo, - HTREEITEM hItem) -{ - while (NodeHasChild(pInfo, hItem)) - { - HTREEITEM hChildItem; - - FreeItemTag(pInfo, hItem); - - hChildItem = TreeView_GetChild(pInfo->hBrowseTV, - hItem); - - TraverseTreeView(pInfo, - hChildItem); - - hItem = TreeView_GetNextSibling(pInfo->hBrowseTV, - hItem); - } - - if (hItem) - { - /* loop the child items and free the tags */ - while (TRUE) - { - HTREEITEM hOldItem; - - FreeItemTag(pInfo, hItem); - hOldItem = hItem; - hItem = TreeView_GetNextSibling(pInfo->hBrowseTV, - hItem); - if (hItem == NULL) - { - hItem = hOldItem; - break; - } - } - - hItem = TreeView_GetParent(pInfo->hBrowseTV, - hItem); - } -} - -static HTREEITEM -InsertIntoTreeView(HWND hTreeView, - HTREEITEM hRoot, - LPWSTR lpLabel, - LPARAM Tag, - INT Image, - INT Child) -{ - TV_ITEM tvi; - TV_INSERTSTRUCT tvins; - - ZeroMemory(&tvi, sizeof(tvi)); - ZeroMemory(&tvins, sizeof(tvins)); - - tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_CHILDREN | TVIF_SELECTEDIMAGE; - tvi.pszText = lpLabel; - tvi.cchTextMax = lstrlen(lpLabel); - tvi.lParam = Tag; - tvi.iImage = Image; - tvi.iSelectedImage = Image; - tvi.cChildren = Child; - - tvins.item = tvi; - tvins.hParent = hRoot; - - return TreeView_InsertItem(hTreeView, &tvins); -} - -static PTEST_ITEM -BuildTestItemData(LPWSTR lpExe, - LPWSTR lpRun) -{ - PTEST_ITEM pItem; - - pItem = (PTEST_ITEM)HeapAlloc(GetProcessHeap(), - 0, - sizeof(TEST_ITEM)); - if (pItem) - { - if (lpExe) - wcsncpy(pItem->szSelectedExe, lpExe, MAX_PATH); - if (lpRun) - wcsncpy(pItem->szRunString, lpRun, MAX_RUN_CMD); - } - - return pItem; -} - -static VOID -PopulateTreeView(PMAIN_WND_INFO pInfo) -{ - HTREEITEM hRoot; - HIMAGELIST hImgList; - PTEST_ITEM pTestItem; - LPWSTR lpExePath; - LPWSTR lpTestName; - INT i; - - pInfo->hBrowseTV = GetDlgItem(pInfo->hBrowseDlg, IDC_TREEVIEW); - - (void)TreeView_DeleteAllItems(pInfo->hBrowseTV); - - hImgList = InitImageList(IDI_ICON, - IDI_TESTS, - 16, - 16); - if (!hImgList) return; - - (void)TreeView_SetImageList(pInfo->hBrowseTV, - hImgList, - TVSIL_NORMAL); - - pTestItem = BuildTestItemData(L"", L"Full"); - - /* insert the root item into the tree */ - hRoot = InsertIntoTreeView(pInfo->hBrowseTV, - NULL, - L"Full", - (LPARAM)pTestItem, - IL_MAIN, - HAS_CHILD); - - for (i = 0; i < pInfo->numExes; i++) - { - HTREEITEM hParent; - LPWSTR lpStr; - - lpExePath = pInfo->lpExeList + (MAX_PATH * i); - - lpTestName = wcsrchr(lpExePath, L'\\'); - if (lpTestName) - { - lpTestName++; - - lpStr = wcschr(lpTestName, L'_'); - if (lpStr) - { - //FIXME: Query the test name from the exe directly - - pTestItem = BuildTestItemData(lpExePath, lpTestName); - - hParent = InsertIntoTreeView(pInfo->hBrowseTV, - hRoot, - lpTestName, - (LPARAM)pTestItem, - IL_TEST, - HAS_CHILD); - } - } - } - - if (hRoot) - { - TreeView_Expand(pInfo->hBrowseTV, - hRoot, - TVE_EXPAND); - } -} - -static VOID -PopulateTestList(PMAIN_WND_INFO pInfo) -{ - pInfo->numExes = GetListOfTestExes(pInfo); - if (pInfo->numExes) - { - PopulateTreeView(pInfo); - } -} - -static BOOL -OnInitBrowseDialog(HWND hDlg, - LPARAM lParam) -{ - PMAIN_WND_INFO pInfo; - - pInfo = (PMAIN_WND_INFO)lParam; - - pInfo->hBrowseDlg = hDlg; - - SetWindowLongPtr(hDlg, - GWLP_USERDATA, - (LONG_PTR)pInfo); - - PopulateTestList(pInfo); - - return TRUE; -} - -BOOL CALLBACK -BrowseDlgProc(HWND hDlg, - UINT Message, - WPARAM wParam, - LPARAM lParam) -{ - PMAIN_WND_INFO pInfo; - - /* Get the window context */ - pInfo = (PMAIN_WND_INFO)GetWindowLongPtr(hDlg, - GWLP_USERDATA); - if (pInfo == NULL && Message != WM_INITDIALOG) - { - goto HandleDefaultMessage; - } - - switch(Message) - { - case WM_INITDIALOG: - return OnInitBrowseDialog(hDlg, lParam); - - case WM_COMMAND: - { - switch (LOWORD(wParam)) - { - case IDOK: - { - TV_ITEM tvItem; - - tvItem.hItem = TreeView_GetSelection(pInfo->hBrowseTV); - tvItem.mask = TVIF_PARAM; - - if (TreeView_GetItem(pInfo->hBrowseTV, &tvItem)) - { - PTEST_ITEM pItem; - - pItem = (PTEST_ITEM)tvItem.lParam; - if (pItem) - CopyMemory(&pInfo->SelectedTest, pItem, sizeof(TEST_ITEM)); - - EndDialog(hDlg, - LOWORD(wParam)); - } - else - { - DisplayMessage(L"Please select an item"); - } - - return TRUE; - } - - case IDCANCEL: - { - HeapFree(GetProcessHeap(), 0, pInfo->lpExeList); - pInfo->lpExeList = NULL; - - EndDialog(hDlg, - LOWORD(wParam)); - - return TRUE; - } - } - - break; - } - - case WM_DESTROY: - { - HTREEITEM hItem = TreeView_GetRoot(pInfo->hBrowseTV); - - TraverseTreeView(pInfo, hItem); - - pInfo->hBrowseDlg = NULL; - - break; - } - -HandleDefaultMessage: - default: - return FALSE; - } - - return FALSE; -} diff --git a/rostests/winetests/GUI/lang/en-US.rc b/rostests/winetests/GUI/lang/en-US.rc deleted file mode 100644 index c3a506c1465..00000000000 --- a/rostests/winetests/GUI/lang/en-US.rc +++ /dev/null @@ -1,47 +0,0 @@ -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -IDD_WINETESTGUI DIALOGEX 0, 0, 293, 262 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -CAPTION "Winetest GUI" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - DEFPUSHBUTTON "OK",IDOK,236,241,50,14,WS_GROUP - CONTROL "",IDC_LIST,"SysListView32",LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,69,279,103 - EDITTEXT IDC_OUTPUT,7,175,279,62,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY - COMBOBOX IDC_TESTSELECTION,27,12,205,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "Test:",IDC_STATIC,6,14,18,8 - PUSHBUTTON "Browse...",IDC_BROWSE,236,11,50,14 - PUSHBUTTON "Run",IDC_RUN,236,30,50,14 - CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,28,30,204,14 - LTEXT "Runs:",IDC_STATIC,8,53,20,8 - LTEXT "?",IDC_NUMRUNS,33,53,8,8 - LTEXT "Errors:",IDC_STATIC,55,53,23,8 - LTEXT "?",IDC_NUMERRORS,85,53,8,8 - LTEXT "Failures:",IDC_STATIC,107,53,28,8 - LTEXT "?",IDC_NUMFAILURES,141,53,8,8 - PUSHBUTTON "Options",IDC_OPTIONS,181,49,50,14 - PUSHBUTTON "Stop",IDC_STOP,236,49,50,14 - - LTEXT "status bar",IDC_STATUS,7,244,210,8 -END - -IDD_TESTBROWSER DIALOGEX 0, 0, 259, 250 -STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME -CAPTION "Test hierarchy" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - PUSHBUTTON "Select", IDOK, 202, 7, 50, 14 - PUSHBUTTON "Close", IDCANCEL, 202, 34, 50, 14 - CONTROL "", IDC_TREEVIEW, "SysTreeView32", WS_BORDER | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT, 7, 7, 189, 236 -END - -IDD_OPTIONS DIALOGEX 0, 0, 180, 100 -STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME -CAPTION "Options" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - PUSHBUTTON "OK", IDOK, 70, 80, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 125, 80, 50, 14 - CONTROL "Hide console window",IDC_HIDECONSOLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,10,80,10 - CONTROL "Run on start",IDC_RUNONSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,30,80,10 -END diff --git a/rostests/winetests/GUI/mainwnd.c b/rostests/winetests/GUI/mainwnd.c deleted file mode 100644 index 1fb27dd9ea7..00000000000 --- a/rostests/winetests/GUI/mainwnd.c +++ /dev/null @@ -1,295 +0,0 @@ -/* - * PROJECT: ReactOS API Test GUI - * LICENSE: GPL - See COPYING in the top level directory - * FILE: - * PURPOSE: main dialog implementation - * COPYRIGHT: Copyright 2008 Ged Murphy - * - */ - -#include -#include - -#define BUFSIZE 4096 - -HINSTANCE hInstance; - -WCHAR szPipeName[] = L"\\\\.\\pipe\\winetest_pipe"; - -typedef int (_cdecl *RUNTEST)(char **); - - -VOID -CreateClientProcess(PMAIN_WND_INFO pInfo, - LPWSTR lpExePath) -{ - -} - - -static BOOL -OnInitMainDialog(HWND hDlg, - LPARAM lParam) -{ - PMAIN_WND_INFO pInfo; - - pInfo = (PMAIN_WND_INFO)lParam; - - /* Initialize the main window context */ - pInfo->hMainWnd = hDlg; - - SetWindowLongPtr(hDlg, - GWLP_USERDATA, - (LONG_PTR)pInfo); - - pInfo->hSmIcon = LoadImageW(hInstance, - MAKEINTRESOURCEW(IDI_ICON), - IMAGE_ICON, - 16, - 16, - 0); - if (pInfo->hSmIcon) - { - SendMessageW(hDlg, - WM_SETICON, - ICON_SMALL, - (LPARAM)pInfo->hSmIcon); - } - - pInfo->hBgIcon = LoadImageW(hInstance, - MAKEINTRESOURCEW(IDI_ICON), - IMAGE_ICON, - 32, - 32, - 0); - if (pInfo->hBgIcon) - { - SendMessageW(hDlg, - WM_SETICON, - ICON_BIG, - (LPARAM)pInfo->hBgIcon); - } - - return TRUE; -} - -static VOID -RunSelectedTest(PMAIN_WND_INFO pInfo) -{ - HWND hRunCmd; - WCHAR szTextCmd[MAX_RUN_CMD]; - LPWSTR lpExePath; - INT sel; - - hRunCmd = GetDlgItem(pInfo->hMainWnd, IDC_TESTSELECTION); - - sel = SendMessageW(hRunCmd, - CB_GETCURSEL, - 0, - 0); - if (sel != CB_ERR) - { - if (SendMessageW(hRunCmd, - CB_GETLBTEXT, - sel, - (LPARAM)szTextCmd) != CB_ERR) - { - lpExePath = (LPWSTR)SendMessage(hRunCmd, - CB_GETITEMDATA, - 0, - 0); - if (lpExePath) - { - CreateClientProcess(pInfo, lpExePath); - } - } - } -} - -static VOID -AddTestToCombo(PMAIN_WND_INFO pInfo) -{ - HWND hRunCmd; - LPWSTR lpExePath; - INT len; - - hRunCmd = GetDlgItem(pInfo->hMainWnd, IDC_TESTSELECTION); - if (hRunCmd) - { - SendMessageW(hRunCmd, - CB_INSERTSTRING, - 0, - (LPARAM)pInfo->SelectedTest.szRunString); - - len = (wcslen(pInfo->SelectedTest.szSelectedExe) + 1) * sizeof(WCHAR); - lpExePath = HeapAlloc(GetProcessHeap(), 0, len); - if (lpExePath) - { - wcsncpy(lpExePath, - pInfo->SelectedTest.szSelectedExe, - len / sizeof(WCHAR)); - } - - SendMessageW(hRunCmd, - CB_SETITEMDATA, - 0, - (LPARAM)lpExePath); - SendMessageW(hRunCmd, - CB_SETCURSEL, - 0, - 0); - } -} - -static VOID -FreeTestCmdStrings(PMAIN_WND_INFO pInfo) -{ - HWND hRunCmd; - LPWSTR lpExePath; - INT cnt, i; - - hRunCmd = GetDlgItem(pInfo->hMainWnd, IDC_TESTSELECTION); - - cnt = SendMessageW(hRunCmd, - CB_GETCOUNT, - 0, - 0); - if (cnt != CB_ERR) - { - for (i = 0; i < cnt; i++) - { - lpExePath = (LPWSTR)SendMessage(hRunCmd, - CB_GETITEMDATA, - i, - 0); - if (lpExePath) - { - HeapFree(GetProcessHeap(), 0, lpExePath); - } - } - } -} - -static BOOL CALLBACK -MainDlgProc(HWND hDlg, - UINT Message, - WPARAM wParam, - LPARAM lParam) -{ - PMAIN_WND_INFO pInfo; - - /* Get the window context */ - pInfo = (PMAIN_WND_INFO)GetWindowLongPtr(hDlg, - GWLP_USERDATA); - if (pInfo == NULL && Message != WM_INITDIALOG) - { - goto HandleDefaultMessage; - } - - switch(Message) - { - case WM_INITDIALOG: - return OnInitMainDialog(hDlg, lParam); - - case WM_COMMAND: - { - switch(LOWORD(wParam)) - { - case IDC_BROWSE: - { - INT_PTR ret; - - ret = DialogBoxParamW(hInstance, - MAKEINTRESOURCEW(IDD_TESTBROWSER), - hDlg, - (DLGPROC)BrowseDlgProc, - (LPARAM)pInfo); - if (ret == IDOK) - { - AddTestToCombo(pInfo); - } - - break; - } - case IDC_OPTIONS: - DialogBoxParamW(hInstance, - MAKEINTRESOURCEW(IDD_OPTIONS), - hDlg, - (DLGPROC)OptionsDlgProc, - (LPARAM)pInfo); - break; - - case IDC_RUN: - RunSelectedTest(pInfo); - break; - - case IDOK: - EndDialog(hDlg, 0); - break; - } - } - break; - - case WM_CLOSE: - EndDialog(hDlg, 0); - break; - - case WM_DESTROY: - if (pInfo->hSmIcon) - DestroyIcon(pInfo->hSmIcon); - if (pInfo->hBgIcon) - DestroyIcon(pInfo->hBgIcon); - - FreeTestCmdStrings(pInfo); - - break; - -HandleDefaultMessage: - default: - return FALSE; - } - - return FALSE; -} - - -INT WINAPI -wWinMain(HINSTANCE hInst, - HINSTANCE hPrev, - LPWSTR Cmd, - int iCmd) -{ - INITCOMMONCONTROLSEX iccx; - PMAIN_WND_INFO pInfo; - HANDLE hThread; - INT Ret = -1; - - UNREFERENCED_PARAMETER(hPrev); - UNREFERENCED_PARAMETER(Cmd); - UNREFERENCED_PARAMETER(iCmd); - - hInstance = hInst; - - ZeroMemory(&iccx, sizeof(INITCOMMONCONTROLSEX)); - iccx.dwSize = sizeof(INITCOMMONCONTROLSEX); - iccx.dwICC = ICC_TAB_CLASSES; - InitCommonControlsEx(&iccx); - - pInfo = HeapAlloc(GetProcessHeap(), - 0, - sizeof(MAIN_WND_INFO)); - if (pInfo) - { - Ret = (DialogBoxParamW(hInstance, - MAKEINTRESOURCEW(IDD_WINETESTGUI), - NULL, - (DLGPROC)MainDlgProc, - (LPARAM)pInfo) == IDOK); - - HeapFree(GetProcessHeap(), - 0, - pInfo); - } - - return Ret; -} diff --git a/rostests/winetests/GUI/misc.c b/rostests/winetests/GUI/misc.c deleted file mode 100644 index 7830f277315..00000000000 --- a/rostests/winetests/GUI/misc.c +++ /dev/null @@ -1,311 +0,0 @@ -/* - * PROJECT: ReactOS API Test GUI - * LICENSE: GPL - See COPYING in the top level directory - * FILE: - * PURPOSE: miscallanous functions - * COPYRIGHT: Copyright 2005 Thomas Weidenmueller - * Copyright 2006 - 2008 Ged Murphy - * - */ - -#include - -static INT -LengthOfStrResource(IN HINSTANCE hInst, - IN UINT uID) -{ - HRSRC hrSrc; - HGLOBAL hRes; - LPWSTR lpName, lpStr; - - if (hInst == NULL) - { - return -1; - } - - /* There are always blocks of 16 strings */ - lpName = (LPWSTR)MAKEINTRESOURCEW((uID >> 4) + 1); - - /* Find the string table block */ - if ((hrSrc = FindResourceW(hInst, lpName, (LPWSTR)RT_STRING)) && - (hRes = LoadResource(hInst, hrSrc)) && - (lpStr = (WCHAR*) LockResource(hRes))) - { - UINT x; - - /* Find the string we're looking for */ - uID &= 0xF; /* position in the block, same as % 16 */ - for (x = 0; x < uID; x++) - { - lpStr += (*lpStr) + 1; - } - - /* Found the string */ - return (int)(*lpStr); - } - return -1; -} - -INT -AllocAndLoadString(OUT LPWSTR *lpTarget, - IN HINSTANCE hInst, - IN UINT uID) -{ - INT ln; - - ln = LengthOfStrResource(hInst, - uID); - if (ln++ > 0) - { - (*lpTarget) = (LPTSTR)LocalAlloc(LMEM_FIXED, - ln * sizeof(TCHAR)); - if ((*lpTarget) != NULL) - { - INT Ret; - if (!(Ret = LoadStringW(hInst, uID, *lpTarget, ln))) - { - LocalFree((HLOCAL)(*lpTarget)); - } - return Ret; - } - } - return 0; -} - -DWORD -LoadAndFormatString(IN HINSTANCE hInstance, - IN UINT uID, - OUT LPWSTR *lpTarget, - ...) -{ - DWORD Ret = 0; - LPTSTR lpFormat; - va_list lArgs; - - if (AllocAndLoadString(&lpFormat, - hInstance, - uID) > 0) - { - va_start(lArgs, lpTarget); - /* let's use Format to format it because it has the ability to allocate - memory automatically */ - Ret = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, - lpFormat, - 0, - 0, - (LPTSTR)lpTarget, - 0, - &lArgs); - va_end(lArgs); - - LocalFree((HLOCAL)lpFormat); - } - - return Ret; -} - -BOOL -StatusBarLoadAndFormatString(IN HWND hStatusBar, - IN INT PartId, - IN HINSTANCE hInstance, - IN UINT uID, - ...) -{ - BOOL Ret = FALSE; - LPWSTR lpFormat, lpStr; - va_list lArgs; - - if (AllocAndLoadString(&lpFormat, - hInstance, - uID) > 0) - { - va_start(lArgs, uID); - /* let's use FormatMessage to format it because it has the ability to allocate - memory automatically */ - Ret = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, - lpFormat, - 0, - 0, - (VOID*)&lpStr, - 0, - &lArgs); - va_end(lArgs); - - if (lpStr != NULL) - { - Ret = (BOOL)SendMessageW(hStatusBar, - SB_SETTEXT, - (WPARAM)PartId, - (LPARAM)lpStr); - LocalFree((HLOCAL)lpStr); - } - - LocalFree((HLOCAL)lpFormat); - } - - return Ret; -} - -BOOL -StatusBarLoadString(IN HWND hStatusBar, - IN INT PartId, - IN HINSTANCE hInstance, - IN UINT uID) -{ - BOOL Ret = FALSE; - LPWSTR lpStr; - - if (AllocAndLoadString(&lpStr, - hInstance, - uID) > 0) - { - Ret = (BOOL)SendMessageW(hStatusBar, - SB_SETTEXT, - (WPARAM)PartId, - (LPARAM)lpStr); - LocalFree((HLOCAL)lpStr); - } - - return Ret; -} - - -INT -GetTextFromEdit(OUT LPWSTR lpString, - IN HWND hDlg, - IN UINT Res) -{ - INT len = GetWindowTextLengthW(GetDlgItem(hDlg, Res)); - if(len > 0) - { - GetDlgItemTextW(hDlg, - Res, - lpString, - len + 1); - } - else - lpString = NULL; - - return len; -} - -VOID DisplayError(INT err) -{ - LPWSTR lpMsgBuf = NULL; - - FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - err, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (VOID*)&lpMsgBuf, - 0, - NULL ); - - MessageBoxW(NULL, lpMsgBuf, L"Error!", MB_OK | MB_ICONERROR); - - LocalFree(lpMsgBuf); -} - -VOID DisplayMessage(LPWSTR lpMsg) -{ - MessageBoxW(NULL, lpMsg, L"Note!", MB_ICONEXCLAMATION|MB_OK); -} - - - -HIMAGELIST -InitImageList(UINT StartResource, - UINT EndResource, - UINT Width, - UINT Height) -{ - HICON hIcon; - HIMAGELIST hImageList; - UINT i; - INT Ret; - - /* Create the toolbar icon image list */ - hImageList = ImageList_Create(Width, - Height, - ILC_MASK | ILC_COLOR32, - EndResource - StartResource, - 0); - if (hImageList == NULL) - return NULL; - - /* Add all icons to the image list */ - for (i = StartResource; i <= EndResource; i++) - { - hIcon = (HICON)LoadImageW(hInstance, - MAKEINTRESOURCEW(i), - IMAGE_ICON, - Width, - Height, - LR_DEFAULTCOLOR); - if (hIcon == NULL) - goto fail; - - Ret = ImageList_AddIcon(hImageList, - hIcon); - if (Ret == -1) - goto fail; - - DestroyIcon(hIcon); - } - - return hImageList; - -fail: - ImageList_Destroy(hImageList); - return NULL; -} - -DWORD -AnsiToUnicode(LPCSTR lpSrcStr, - LPWSTR *lpDstStr) -{ - INT length; - INT ret = 0; - - length = strlen(lpSrcStr) + 1; - - *lpDstStr = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, length * sizeof(WCHAR)); - if (*lpDstStr) - { - ret = MultiByteToWideChar(CP_ACP, - 0, - lpSrcStr, - -1, - *lpDstStr, - length); - } - - return ret; -} - -DWORD -UnicodeToAnsi(LPCWSTR lpSrcStr, - LPSTR *lpDstStr) -{ - INT length; - INT ret = 0; - - length = wcslen(lpSrcStr) + 1; - - *lpDstStr = (LPSTR)HeapAlloc(GetProcessHeap(), 0, length); - if (*lpDstStr) - { - ret = WideCharToMultiByte(CP_ACP, - 0, - lpSrcStr, - -1, - *lpDstStr, - length, - NULL, - NULL); - } - - return ret; -} diff --git a/rostests/winetests/GUI/optionswnd.c b/rostests/winetests/GUI/optionswnd.c deleted file mode 100644 index be5c01b47ee..00000000000 --- a/rostests/winetests/GUI/optionswnd.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * PROJECT: ReactOS API Test GUI - * LICENSE: GPL - See COPYING in the top level directory - * FILE: - * PURPOSE: options dialog implementation - * COPYRIGHT: Copyright 2008 Ged Murphy - * - */ - -#include - -static BOOL -OnInitBrowseDialog(HWND hDlg, - LPARAM lParam) -{ - PMAIN_WND_INFO pInfo; - - pInfo = (PMAIN_WND_INFO)lParam; - - pInfo->hBrowseDlg = hDlg; - - SetWindowLongPtr(hDlg, - GWLP_USERDATA, - (LONG_PTR)pInfo); - - return TRUE; -} - - -BOOL CALLBACK -OptionsDlgProc(HWND hDlg, - UINT Message, - WPARAM wParam, - LPARAM lParam) -{ - PMAIN_WND_INFO pInfo; - - //UNREFERENCED_PARAM( - - /* Get the window context */ - pInfo = (PMAIN_WND_INFO)GetWindowLongPtr(hDlg, - GWLP_USERDATA); - if (pInfo == NULL && Message != WM_INITDIALOG) - { - goto HandleDefaultMessage; - } - - switch(Message) - { - case WM_INITDIALOG: - return OnInitBrowseDialog(hDlg, lParam); - - case WM_COMMAND: - { - switch (LOWORD(wParam)) - { - case IDOK: - { - if (SendMessageW(GetDlgItem(hDlg, IDC_RUNONSTART), BM_GETCHECK, 0, 0) == BST_CHECKED) - { - pInfo->bRunOnStart = TRUE; - } - else - { - pInfo->bRunOnStart = FALSE; - } - - if (SendMessageW(GetDlgItem(hDlg, IDC_HIDECONSOLE), BM_GETCHECK, 0, 0) == BST_CHECKED) - { - pInfo->bHideConsole = TRUE; - } - else - { - pInfo->bHideConsole = FALSE; - } - - EndDialog(hDlg, - LOWORD(wParam)); - - return TRUE; - } - - case IDCANCEL: - { - EndDialog(hDlg, - LOWORD(wParam)); - - return TRUE; - } - } - - break; - } -HandleDefaultMessage: - default: - return FALSE; - } - - return FALSE; -} diff --git a/rostests/winetests/GUI/precomp.h b/rostests/winetests/GUI/precomp.h deleted file mode 100644 index c601f5b1907..00000000000 --- a/rostests/winetests/GUI/precomp.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef __WINETESTGUI_PRECOMP_H -#define __WINETESTGUI_PRECOMP_H - -#include -#include -#include -#include -#include "resource.h" - -extern HINSTANCE hInstance; - -#define MAX_RUN_CMD 256 - -typedef struct _TEST_ITEM -{ - WCHAR szSelectedExe[MAX_PATH]; - WCHAR szRunString[MAX_RUN_CMD]; - -} TEST_ITEM, *PTEST_ITEM; - -typedef struct _MAIN_WND_INFO -{ - HWND hMainWnd; - HWND hBrowseDlg; - HWND hBrowseTV; - HWND hStatus; - HANDLE hPipe; - int nCmdShow; - - HICON hSmIcon; - HICON hBgIcon; - - LPWSTR lpExeList; - INT numExes; - - TEST_ITEM SelectedTest; - - BOOL bRunOnStart; - BOOL bHideConsole; - -} MAIN_WND_INFO, *PMAIN_WND_INFO; - -/* dll exports */ -wchar_t *GetTestName(); -int GetModulesInTest(char **modules); -int RunTest(const char *lpTest); - - -/* mainwnd.c */ -BOOL SendCommandToClient(PMAIN_WND_INFO pInfo, LPWSTR lpCommand); - -/* browsewnd.c */ -BOOL CALLBACK BrowseDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam); - -/* optionswnd.c */ -BOOL CALLBACK OptionsDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam); - -/* misc.c */ -HIMAGELIST InitImageList(UINT StartResource, UINT EndResource, UINT Width, UINT Height); -VOID DisplayMessage(LPWSTR lpMsg); -VOID DisplayError(INT err); -DWORD AnsiToUnicode(LPCSTR lpSrcStr, LPWSTR *lpDstStr); -DWORD UnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR *lpDstStr); - -#endif /* __WINETESTGUI_PRECOMP_H */ diff --git a/rostests/winetests/GUI/res/.gitignore b/rostests/winetests/GUI/res/.gitignore deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rostests/winetests/GUI/res/main.ico b/rostests/winetests/GUI/res/main.ico deleted file mode 100644 index 50d143f08fd4ba395e04454aa76c0883db401ee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63600 zcmce-hgTEb7cM*r0YVQQq=jA-1Vuq<0YZ~%p-Jy3y+|hsy>|tqBZ?>;lwKmeNmD7( zn}8s_6T+AGcfYmne{i#sH8W>s&dKca%-+x01pq(*G4S691i*pcwE$p1*cTW7KgT8f zg#9l70Ehqo$1nhxng#$Cmj81cO$Gp%zW@LuwEuU%BLo1TM*t9`r=vzieuJFQ6_tiM z^2vW^|NB8n2pdz+5_`gi)LTPag>;e>N=Hja(P)@RXkzwOG4g)uX7BB55LzTGL>a3KkA{ar*}*8VBB5mwwnq;oTmg>49^%obj0v#-cp)k#cq&<@kUnnzdo_%A1v#aC3|89+kceKX1 zb1(UZQ-zClJPkJsuNOV=4bH#@EnY*_pq=4&lqjvpmR@$$lW|eRc1_3p_n`BNUH%kH z3S?-WF8T|ykwEU1&N$rFJroq9fKg}Xp`?98HWnU8#!P&1qdkR|FiZ!Pkz2vkH!~fOAqGFAbHKRbsjPd{T-s+c$sofc#t6i<&u+UKbV61df?aKyvimgMo)xSyS%1G&8c29sRD| z_8mqG06OWrgB%+Z=Rpdw(RK5`;nL>T1Q#E8d(2tdQ(QwtB1!T6G+6vp?#knjhemzJ zA4V?Omo!7#Mk*Qq8v{B@dK{~t)bbNpx@2~J16F81< z^c3%`hSgm>ru_I#i|CN?ChdjH!)YcSIjlxyqI~pi@qyyV$lO$~>*vh00oCnb7%ihu zZf^3I`}h2k7u?T(jVYm$%~Q}mhmvSlWv$n}=VljaTqfxv#||jXgU}boOLu z0h~!eZ|8J0CLg;++eRWz)uUEU^tHa#EEP3`M6u`gD}1&JKYryc9l>~a;e5D085R_G zd(`P;*=|x|g7wp)qWS*YF$zV-!MQkcvKSA}^?K*-&h?q-lm%-<{yr?cOU*IDsV&|e zRnXfz9Znc!n)-%#J{&ht8MhgTJ@}@bU;pbNLMA&~8@xF8Hz^?5q7Z(&HyyB@-aSwX zGFq&!FsuL5>$6*4`RR^2T4XgpJI^Y6{Hd%w`d8Lk{>kziY4Z^ixAyb$BfKP6SN*bz z65Y~|5Ka>ZA_Br4ZZ6(=6jvy+PfoU5-5O1hh}vtR^?S`zR8;2uG@iPF+-(7_W$pPc z(TP=TXS$+hCyUolZR?jqlPvb?`i{3`hbc1IS&hZd*Ch|!a_2idJ!@s<6(pUH4Mjs& zpHfbQR|L_t*1yVIo!s~BC@xX?oE22gvnc3(Ka`~V!((f!gjb{NaGX@TJL-8LTT4W= zfy32y&+i+&^S-f{Qh{A~dpFBR_=J%fwxgrgG<4gN?)un+mhZ8zXbVrLT0gdY@iTY5 zE+aaR0EVjGS&w|ej#k}MNLI34&-F9yO#WKB_{PP9$JcxN;v5Q!&8;f<8yv#v8-gI9 z#u-c%nxq!PUpY@Qq!6v{w1^rGJ1bVy-W{n%xw_azEU=;lm$%S@{4U;fAunPZ+qKsB z-LRJmd-(dOh^Sf4HNCge^3oe`a1&bXIw-{;ZNR>+iu@vXVz*#)#qhp)OgT##;q8i^ z_Zr&7+u9XZ=bF@ee36_OQG@33mhrU6jIM|a0SYvR zm3?b#%NYV+4Tw{-zDeTUS{Y3jm+L%I|K)x1zxlSXfAft$uoeGij15iL;_52Xsyh3H z#&#F~g>Yslf~4=Rsx3RM%SKnO81o!*;rQFSW;%E$E2>Zi9*@6;rlNdS*U@Rol9Q8S zt5P0(d_A$L7Wu37F_-158NDthbyYq*MPD6bWRpo>t69_M?QN+}Zi@x{Q^*;vZ!FCF zH{Cc$3yZ|>h%vFXe_L>J4~HBuJ#4!-Y9lEGe2hBd;(vX4mxcZFHsvTnxam5Ce?5@5 zH4*-aCQ@@x_vw&I9how9gg8(lN*ER7|4OGs~?tR(;T&wwW+epF;sNh{p z?2Ro5%FFRBIUjBL`>g|?81#?s#m^QN=dKsmNVj#F(I5Zb-~_m*s>2eFPHVgPMmE(+ zw+nZ#eF}P=^Z=#|+@xyb%^voYH;pmcqn2;kS!`cqrv_2ICPHq!r=h9+`7HnR_*&@b>^1o@Sk5O5>`o3} zZdG{XU9=zYgT7zsIHk17>1EcxoE&=@0jXM-m9(;^mY1E7K_oZkG1RMgk8) zIdD=AsZ%mRh9PD(QlmBxgaAAqaSF~DEOHjv^G5a}_p>hk(LZ(m$ak&7qX4lam5W*@ zm63U|*X_p$zNlDYyvfzr_b4dFH$1X@Khtw?@Oz%x_AcwGNjd(t0JvnyFcUu6mXA_a z)4c0cR&HljUOvnJ=M~eNEfxd-rUNP+_?6 ze@}o#vZ1|LnM?kL8+eU*L_hB!*TsGH+xx@USDm|J(b3P>AG?|uJeRF(SPDvVsgaCEw4Hm{W}cz2*8ww*F}=# zlPPV|!c%^#Z$x`KZp6I7412U^gfCQa?DL_lfQP^Ts03-PBv4aU1vk&F&bRyC?v;IA8cnLg_Zu;lHCj*dxBN1@6xqcfXJo4cBd-fIlx=i%kw?N%t#)lgA+b~c9>ijgA!}pwV^YpEH z`$%{&lcGBvsK@{#U;m-;Ed)Ns^Lr^wZ2e`|WCD~x9drcGK{ZYF#-#c#Di3^jPqo~* zm))wX@$!9@WLWl;7ZkMR#VyX?R^2|AdqkfH_g=-~o@TN5bzL*j>iugu8kWCHz0&GW+jD>8mR-Oa*OVo4e|(|0{0Mb(>C``jE>te? z!O8CQ)-MX|u8ROjy$*^n^6R^8);5@Gari&{m~|OS#XuI53_8BOB0WD9I&jO&-*QW~ zAjg(pv78q>brS~MfG}A=U)`@Y z({xS?Yd_k z)cRh}fh~E#S%YqLV3||&&t<&K(cxXGlgye=hxuclab>IdhZ+QXv#>clywzoBun==Z zddemKO#> z%J#uEOxOUyI0<7JukkHh_tms z1ngsup~JX%<707%cML!c{rq6YJuQ7Y zz~8McV?krU=&IY}O0=u~%Slc70o#pzzScL}KGzOgjPbuCi8!m<6E1hF+ZJwIX1~00 z7+TGjNLzpbxwx5}{@vm6=DQd3(de^9Zu%jf0$ETka{ifzkix_b$A9Wy@ zVRj*(Q8GO`n0j?W(zk*W2-Z=0ZKPk)Vw`9&d=QR-ASzq3YV+JZ8~`2g&rfw;YTYH(yDdCUjOtWCDaKRC?CS^xdc zd|uvFpE@5O#%>Riw!8@p5FwV5bWq&D{)Q$@)rMr}TE=W=S=7cQR0SF@QD^;&mn$in zJWzU|_*Zu1@2GVAahZuV`yRa!-@#0I$I8pA#m-Z7$4=zWpA&m*3*+NTt9i1b747~m z?b$~@2tx}gSz^m^9+EWWysrE^YoMO(Gz_Zo`p*!7Z?#TXq*&ZO)L&)Z%g6Z`EFh1R zqg>phS6~n<517;skClgDcfXJ$l%C*9+uJTa>yBpn*E4|3pt3C?P8F>ersTJ;GfacN z@OzmSJ1ZX6FlsK)I?A^eLl&R)C9%Ew@g03$F!#NrqT-G#%EGX|`$G48?PBIRTE=i8 z+E@M_*Z=z5@=j)~hcB}G+K*rN?^+$xkR5P6 z*e2r#yMmcWH(s4EdUSL>wzH(?o_Uiu1b_~7X)KgvAZ+ZR)!YA85 zMyl5Hg40{~aEII7%;t;OmG%7KM7hhMyW4L+=G*Hkobv^ynqPOtq-~!SCDjxmTa=MC z!AN__-+Ji_qQD=26#Y3rZEME{(jrsfyqwO81Z%XvB0xu z>DeT}!(T#!yMxE4?x*E3ZH13@0*C{*D$~rv_%7df6udo)WO1y%W}>SwLw1BoP9<># zzJ^{h1mYXlrzkl6%oqLtZD5%5(cfSY-IhM{pna8-R7hT!5yFU5F5q?75@sx@6W(rG zx21(AQk8Y%$B*%<$rT{6*}%pY_y|&v3pi`VUj;f&{mrqv$=UW|`XK6B3lbcyp0D=) zbc(;9i{X#`r3g9Oc#jV@9KMJ=RYiGzZR6y>IO6DGGCVr9*boT*O?rO3Rv$#1m)mS$ zZvICCS{xary=n-?#_Wnt7^YkBwuvi}dfddz8oP(A z5BcppAmy&2C8kmIQ;f#ShGP>lrZjK2cD1wRb=r96kv8@&YN6J8wpI;o6?~2|$(H?V znZ>z4Q+IaW5=HAq%h?UK3EzvE^k0Q7eqmQE~ zd|{zgV%Gl>G&AJRSY=8p`;w#+&9}x>>b{h9*}#sxeaJyoai?mx($P~r$G&tJMYi$4 zu!u7jt>$`Hhu&zyTFz@kc5q3cjbpnTOLoFz$rR4a-o2>eAOYw0GhX(;zzOQee@mnd znd_I&#YJhYu7@iK>Kk4}@$E^3MoUds~ z8kYon`pWZ#r%#@2OF*AznY1`uZbpi*bP0xzOm&}ouP~N%-KR(O`N?V|yEappxgw z`N2NmMb>L4aKTq%WpnGxA*LU#Ni!SmKtWe?OG7f%>Ct#_>Xwl7dGD;#?f7nEUQ_lb zPw85N?e{+@obP87af3mEZEtW5FmFYXUlDa3`E1B=g$6O6FYbh8eEq!p%CQBXN9NZy z61HbX1i$1M6{w(>ya~um4W9iSSELh=$jwH(7+#->>We=19d@-#q6OszU%WVBr}Ne| z>EGq@JJ|X3v4H{=YJJ#=OgFOy)jLmj2nYyFO--?|v9el)g@u*1x91<9oYdsyaiZ8+ zSS&jks1uUX?#;BkZFiWdb8)6gA$u>gf3|`$VH8W zu^9DVvyc^prU61*Zm+K8%G;ZXV03R_Ar*-_@{E);Sl5=#zW!m$D-I6pKS(Am)|$?-iGEHgLLI!c&R)tFO;J%hVq#+Uh=_=?l9FgfX67`~XC2p-Wo7aD&z@Bc3_LQ>*YEyZT6%u@(#gr# z%#5Ql)7jB+@xu>ohK1!DU+d~>PELHpm|!WJn=izu;eydaY0(1QRZxry#Qd?}8YBMq z$IZKmX)Ktdzm8DM5XfldI?TN6n)5$giw9OyXr|S>uGI3|tuss z8$Sr9j##~Xrk%DdG^s2796k72EI^Hqzng8Luz)zqdZ%1x$0JZl;U@^I)x5at(!9vEo3_*;rQV~>FE znKPVo$(?MxGe)bR5M^eW^o$859?6UPNuNo;qY$ii5V5gu;a`cLWeJpOTnk8D4xUS;=qgLj|e_fC;Q>m^iHA~J9%zUhOm%3)G6+5b}!ue%==jQQ@U257s1=Z z<(-CphfdZ$p`gXGsG2-vxkKbi>v#W_?5b16-BBlaK^G~?>sWs(!wohu?JWUyzm#Fi zZUBzHei^F{qXIb0oU3Z%sKz{?YIG5t2h=xS07bNF?A>k?BQ-n<3L`9C%B{hXgYv(0 zdqI|&CTDNI(SE6yHTpr~48e*IV*#CXvG>#u9$JkMc=-9x+f$3j+;F4h;|2C?j7Q`71-sQQbCm zi~M9mvX&FrwhcAkD_?cc)Q$$q?#kiTYJJyb(^~$1<^kKQUV_FvFey{ua(Heu`ovIo zMdEoU$T;x%qd=W6H>vi*5IxgNFMd5E;mUKR;y!Z zh%(=ER`-1mL$SQmUMls2PM{zi@CVTxWS6yP<2Wl61lvuQgorH-QqUbdK;#rUEkN*u2#<(!#1^GD2RUT_!Ffix-&xSJBgOrn zDtg!>O;W0+y59j4O3a_%j2b*uLr?CnV|)sz-@(HR({N)}EsTW-vu z;(h(M521WO=bik5aK$wyRduLpQvg*6OBj?z34w7C7q>M+l|l=IHa0@SayI7o&TM+8 zDX9WrRD8t7VPH4}z^=?8{|Kt{9e41k1hqmn{E3Py+6@k78t}!=?GZT6i3Q#jf+~wP zZC-kD{PD{%`&qM+&iCREZp+7{Su->(1d4D}U*UfOm)(M3+0H*~S@dWM$Luvg$<;T$ z!p0PFJp(T%_{L22JF`lij40H~86qE2^HT~a!fzK+m@5&#EwM&PlysGEe!^D!_s-*b`^z_53R~ZgC;N7HI!gqv zA{#zT5@Snf3$M9$|Je|G-*&fX0BoI?3oBLeHl>qgXX#Fy<-I!kkYVY4vv*H-zn^_` z54Gu{>U5EK4MD3|8THDkIat%4QoEB5{y|) z^us}XpDMD$U`R@G3>qwc?_PIxl67zc?zT~1(i1!VruerJMNu?_bzW!Y*1}&!)Y!tP z66)=K{d2T$nttmTAiGHkW-KhfESS{r^2NE zCKF?0c8VBGP*@EgDy;!Q2+sbu7U@Y3hY^q_JBf=KkPPjNvKrg}C3*9$Lt_T8c)dhcBBD^aI$3r- z)Ub1r-LGKxcivg-=y7KHImqbxVN*qeMT6mAybw1Q{J!cHH|?(c>73CQ`+tfXrL>=l zpgA6(Oqz3$r*ARsrJz7BoBG`Ap@%Qrf5F~5Mc}vH`0?Y;ZcvGq@2U7-0zPv0}(6x?=krC=a}3uOuxfBSf$+FWVN7`0wm(eU)^m zj*FQzw9<2QTjN$V9L<{WBRm{}YIn~EWP7eUf@2e>VQUA@3O=eTi{2>BgB0gGRY- zf}m7XtzC8tVWSmn)nZ`O8bqfVxD}2&qh&aJzxDN89dG4SJTbu}pA5V{H}I@)f2~gk z2X{a4FO!x^dh_Q`8XPJ?$Qs~gCZZK%XzmP8z4P==N+5ASTfso?O+EimAJG?%evkn+ z_%@&6frRH}5>YRtfd#hb7f-^kPDDpcyf_2}i=ujfDh`sj%3%g8E`0*H))C!SP z0OS~hu)d4UC$N6TC2jr*UD^H&lij&S%~bS2^^k9my-T}V55a4ubGkp5zj540vt+)Q zx5ycCwl!I~-kZQCl?7Q$l-W6J8k~*(X+dlBMQ_pjIl8wk*lDu7vD-DqRpW&OmzDtS z#)GRS<>NnY#K!15YFxyTCFO6FGb59woOQPL|T1Er({Le`X^ zHxfn>3>^D!!yeYchO}cpG!t}@eUc|Ttu#-T<#LPS>jD5`0PN)&Id_p&(h}CHeD0}) zpygaT?#~^I!Neiu&OEQHngN=%)t8s`JWV|fG!23chP1S_iD37+SChdhXM3oQOVdBD zT@G3Vb8)`UYfx$I5s?e5uC2#Xw@OxN@gO$dOShzwh%$r0(ER+AZt|KM0`Hh^oRvXj zVqhT@pa`lpZ{^o&iz$N14?+Xp@QTMK{A94^UhWriuC9EEO(Wpm+_whNylf% zfF0JIAKlCr@u+kzz936Z9!n{ehDCy;8}MxpPx1~49?_Yd$&9yeT)j8H!JiTh5X{mm z+v*g{PjD=K-(a8Z`CC57TPAMtHF8@=xC0H+5$;4WFd+IgTI5#A+K(vpvx1NKB_h(P z6e7|GiJY>15dfnD928BhVsQzZ%+?O&BB!6U6v!%iYOR2A?{xfEC#7= z-h+Y4I;H(hdp&mgzh{2NwP+tx`6Z*v49kQVA7CWRw<=qJ*^IL@zcgSGzm&IRem*@i ze$ybT?Cj)II5>_Un7BG`NnPN7{wmP9HeCO)54b=HoCbxj=qv#cpb%mI^2Xr&Yk_b$ zZzq(BTmw4WujH$)C)Nt$q+{rx1uDgEtv?7UH?cqeGKQA}!@$7m`j6L0Oaahx9|EjL zOv;OGNzTHK*+_l%EYYj$pYa$lf&Lly zw*QUz^!xXxVre7JU2{pni6K6|?)}MBhvXm;bL?gn-e*-oO;BNJcCW7rB%{&^KNJ8r zd}?T9_xAEvN{-G+NqxkVJW$gBd!GhtPyyxvd#c!58XcbZOf0onV_UG&!U|;y4+pkq zzGm-+)LZP_3IowVh!?-|16b+SD0&MfSGfxJ?ZPZXRA=&{|1ipAdra7o?w;3LrVcVaLye26Pdrm#?dQ8GfCITc#40i7``@>q49mN6&$CPa0IvVZ`EI${8! z-m5X<@e?>P$q_fc0(sTw3Zmb5Ywllq=lpl%*1j^4H01}9C-AIByug9Q$q!A1c+sYvw)Nq- z>kDk^O)k`G2wR^^f9+hAG854Qkd!VnW+GBR4EPj-j87oD6%mJ^i$UC>A-iLzZg~Q+ z{f^1vhJzeSK67u~4(vL-+Nt;Cp3)I3x-nbH48lrS*q84Aj*s^)^5Mvj8|m<8U|2mg zVr&PsZyoah((53)K$U=JzMnfPcuA?1!shz#Kk>5{(rc*0p`#L+>k3d>z<{re1P=wy%PDj_*ly&+ASmG z>O&?@*2ppm(;k0asU^9y_&%Y4-3#?P?f|*Cq@U|h+cAZf7 z!)bL(?fLI%@zL3y$n59S?lw2s+_sj@5!?~v(+u~8EF&>HBjG9ljxI!{9zRuh`s~lW zALCCSd=f8kFLM9kez&}f^hPy56RmWv=~aS6^(_gpJftP>DdY*g1|<5{3t5RwYid$B z_^t6QJ(j_Wjn|3lZ7I(#MD*1mo$6lXvr9kiTm$a?_~AS6?!0hg~)V#UP+EF zsg{QG+_!={lKhq)^I(4oe*Pem@dmN##`Pkx_qfqu|KOeEEP*;Mi;KQ6i~S{HKP?Ke zNMM5y@g^jE{ju4(WA~I!lXzqG{)dlMU*Z{D26z($#bKT9hLO*-t};`{c~HEqRt0Fx zJ=*?*7@RTkbpzGdEzSt0YFLPLdKnV&2hz2TkrBiQcg!AX?T{e=%PWU5R+84G;t1%F z)w+?eyh9pL(B#}1N!9UL4HCJH52TvfwIa$zlebgDH>df4hN#XXPW`$5kXT)C3r2BT zHLs}kNBn&FQ}4UpxD1OCZ(-_=IX}?J+SSziJ_F(l7iAkCt8tJ zdvwslOQVA@dyt`XjI-xkuV~XgQp*oZk_Hi0yHeg!DN5o(4mXCGKzci}w_FNhf<;0x zLCVTDM1p(MaKhhqWGC0f7zW*#(%eT^PT45^Q;&!gFJE?)jFuSfA$dN_!uQS#))>OA zg0p8+KcJEN%G$-nQxk|mT9$nX`+h=Gdr)J2@TGOs10UyL;Y)qB`1Lf;ZVTM(vhW7IaXYw3?rX!h?zo|NoI`_!$PVK)UpBg$v z?Y>u}a|FRAJEp8ZgcJ)zoL=DO_mdsoda&T*>$&dGrj!_ZvW!Cyy?&HQi_VRwUHmFqZQ5N_N!dC z2=wXlb>c<8U4{Vu?`I2p^V4RhNBE%5{FiQx|B8L+PQMWn0eufUlVlrgx<9K?M?{vR z0;;><0lZ+(kTw-|JM+8uDbj26#}`WvI&G7$290-w4!G*F|Z?lXX~T- z3A*BWEpAHgbpCgK&$X9S_IrJ9`yEf--;G@ zQZkT7jiffKqEFi=)2~i_uWugA?V=_*Zj3QDRtn-YmXpF2)Nz$vyRC>;)zQ=2&m7us%4;2iXB4f_|7q+CttbduFLigOoZu~Apr$%sp!6uZpp)2o+?La zp9{a`>x75>qUPOdO;=}EvNczRShRZboA7J2S)Y5>muOH!`2Z9hRuy36J zH^4&~9mjMRO!l0mz!S8o!9!V6`q|z_(!D22tpTPrY8fguszbD_1qI6RJ>h;oT&qwi z^4@DPY;J9Z=YtmK<2Q_~G|t+M`tWKAv+ca5f*ztvH)0kZnf}8pywuxmG+2Ik-uQ^` zwX~3xIC9CwEpVoMk50WrRh`m2Z^W(pYybDbr7rn7Fy?vM{IJ+#a2wT>Sam`aNcGas zJ1IST$orA^&xu-{M3N*MW)5O?=*EEW=|zcd&u1zMJEbQMdl3#_A#yvPD;(y+#R6uvD>pyANG@?` z4VR~bK(UTaq%*TWM(j768JFtcWhLLbwzW`jdph}Zyf5|Gq_cdli(>$MRBF+11$cS@&(I%8K z|<^8W!`xTszPj!(CJQ5V+r_{+Xs_GZyG0A*$O|Nb`y>zwg z=8s?}w)OiFPU=3oHmWpa$4q`p^?=4gU8-72*sjP!38Acg@204T{a9uN?>kjmE8fZS z6;>Qn3)5kJ>-oqKUTEv)OXv8>dU&R1nJN@AxWK?_1CXSb+~nXl8wSMd$G3iq@W?W2-jR z#08~a6L#V6iP&PjrRrnlQ>HY*a=fpe8BjcXR%>wHp#LtRNR_kHScWtP+*%iwh)|$K zziUn+_)==V)0Gf{OFMR9W^>L^o7X78mi+HofTZNa{#T&pHb82o{2H9i0zCct60x2ls$H5DonzH}+S?j=b;r zB>66PM;I;zSF0k5fw#jj(q1pB1OONBZ&7^-H{ONt$c89R#8HT98ZbWvYHDl!e0(^& z)FwD5I3-#=cVCTP_pH_JJzRQKb2BvztMIxZe2=K(lpo(4y8EIEpC2$n!zY%K{|TbR zOu|pz1Q()F^d~(NZTD^L3}@TRR@m>?m4#H2KFw&Wn2gL6603+41-^PO{8>$3GWj?+ z6J-;OzWckkl%v?a4EPKgC^fpvk$uct7!jW!ZBRWyP8Kk$x~pPtN%3eWA z+PFNsZ}N=zgGiRr69((#l(&C8%!IzY^k~eExu7Oy%Ea9@MwgvDCBvrH@DPb2A-5V6 z)KaL89rz(*aIq|Yx)|OMhL(OL>N^o+@4Pyk-W$SJlf-YKOGY5EGoc9|j}` zR~bUFdhL4osI+rY|fp|h7j9bAHBL7 z)p(v_D**vcJ**wOrWB(MBk4AK`ZZT)#xo3?lF02CA+Pve$J(St+FzhU$S0K4ev%gy zjY8_)_8M((EZgWEW4ru6tLUG(0H`!N;`krhHQdn;yeYr?#(X$UoC`M#5OV+AuMjjw zL^F399P}U+_Q9^3WVC@EoD4h(&EbPoH^Gpqo|S+S9Nza`V>rf@M17>ZZRtdFurftq zUI}GR)iB0!?eNi|3e;33yF@5qrA2fvS(5=1zk9pYF15DJyyo0A-U!SI)4gB6p zH&4L}iq%IL5|X{lQrK-(SNhyEf}Sq3-4OG{;BOqax%H1+)(J2)i3>d*C06u@HnEh5 zFG-2{wjr29v&CBWyapw{Z)!r9@An)8RvCduC#SpXsb)gyJji|${X85V^Yj%4u6WCZ zgdM2JKY$bX!P<0JqAoeO4MAz-!mnowSZ3X&=3h$EU%PIsM;(IqWb>Ya3z$I0J^DF= zvrlH5ncY8EE3`Qh($=I_2Ca?<2jZwCe@*Of*1c?UG^$Oan_WHgqYHJ^`E6w6*05_z ziHt5le#5M}=>&ZL%eI>IINibk^!bUUCb;T-0p?g)C2)vmREfxvFo%be@^r!1P5(|z zn*PTuH|ZqWIQI2TX`Cu&0~yuusb8H#6gt)(icqPeNsx279HM;%tIx3#SrDz{QmMQiaq9;AFUJ3AB=SA>mMO zrr&0OCE@uVx(QgUx5|0#JS{67h3o>eH*j3(0M+HEjrgOV#3Go~MlPHBI+ak@Og=-aR&$Yid zmv2g0)So=ueDlVT$((lnk&lWe>_U_7T6kZD>UxRj!s*v#yDcq+8O#5)GiN9rksk?E zAGPfnNbIA883i7I`6whJ{CdCF&reZjKFuVQXQEvDe(PKHA=3@hv#=juM(YtF8xsF8wH@d% z6Y)bgcJq}h9zZE};jY1wBdpLZu>(?%&wWu*bQ0`rHbY(OuI+s7eK@CJkS(L--9{55 z$DfnsEg16&4Kdc?SA}4VVp>iXp``Crq006`nd@TlO02%QGBt3rVYZ@8C&=#Ko4`u- z%CeRkg2HB;ew7;5WdRQ|Usj^ZKcxSA{P%7fybz)k(~;o}A-r{u2*EH!mv<#r1OlZ> z=GE(0@>7?Bxn9g)o3hh4`5Zr;uXy$7W$IX_EjL(C<$X2_r&XGIOF~14Yx}PaxS7$= zXa1q2IHOmJDQ9fGV2`pC#8-G$Y{7n6){P!ogs`+h@Mn^D1|Y1zF)>`&zi3Xn^HuGR z*y<{A%XbmrunvEgdav+i20vfVJ`6~=P%J+;U=if!U}dpw<;X3IxMi>W^?>@l5KKf} zzjnhKp11%VbXB^QKd%{0`y)tpVx7st_{y(#CLhr?sfl^|q!C62+W3=)1*nqiivJK( z03IHPZDj|x_++o~MDu^O!xW5;_$jv&BJ>QkN&I{aa4jjscT4o6U zDs*fE18%O#@kB_=oSsgIh-y@%u@ozLTX#-~(m$g^k%tDFmfWlOen`YhBpw8*FZ-b2jXCjFh{-wF$O6e$#wSks;GF8B@6& zpn{9zODTI_PiLNDCV2LdPhNPRjOu!XLf$GQp#4IYz=;St>a1mOn|s6BJ!NqFKM5&? z<@Y-kMG^0j#Lr@HS2W1lm?2Agsh>s)B6tb{7>5l3%lADbQIzqiOQCCGYNRg`!3KFB zxhI3m`o23b`k$Aj;{T`xP_sDhT8A;XTE`kOMu+Te9Ao}JlCC-|>gVgu2C$SYT>?vY zmkPpCf(Qr#(k)5}ib_c=C0&A2A|+BHA%gTuBPdbBMtbyj9r8*Lo(mg{Jk7a&PcGN_A1;ZDSGIb;07&$;`MX+H(vzc|qjS?=&3G7sI*i-f2GS--Qv zOdt3<=ZBU+)m-WwUpT1Ki#wnw>%UU+zpg}jR^>6Rl;(D;TQ;SOT3tC6_Ujw*%^Gu> zz6UN@xlz!&f=@{iSkwQ*;v~v%S|c@mt)&>0a}h8m^|o zDRKvX&?rTeCR*^Gs&gyk%(d)?Tv;A^*WUQAlFf1vT0Ki`2rB)HfVjhVLJrD65b^)- zhCJ7g*`T=FKb(H=sb_4dKhVtSw;Hg5IOKBvZKbe@{aA016$Z}=(XjZCaj(PNe<6;1 zq3rFK>;6In6z(EZt23Wf?67X5xPFVjp-rL|d?{;sP z`I2x)gEwS9_Hvkq?M@tyh_!b67B2;s`57l#%!{bNwE}7hLHr8Er~(oB&X4Wv#G=`W zmPo}ml>hrlE_en;$ydog@Ja-M!Lfor<7Peg#f^C_63v7bj6@WLQe6)NP(*c_TYiJ2 zyYF7(`-+U6TjR9eid?%&bn#)5|#VM2kj!hL;4~Bo|P)!_w%EIxPHhZe5*dK-&&p3OR2sg3VBqk z_l1R4lS@|#L6Ox^(}slLmo60~Uj0ax6#VHD0An<*Z{7ZimNxx$zqot=>hX&gJ%8mm zlDX4}PhICmq?Dl86Ab)>m61RuMa`u`;H$<1=>=cpYfeypZ&MHI=fdox#DMHqqfjsa z18GZhkcB0Cxwp9XbT^0L&eDH=KT3Wr8kIK=uLX23#_n#0;~1028>%@QIO=sg)Mk&J zy)w!Fcw(lUhnJ1pe(E4!iuc`yalvFNt_v2{$%O#pH z@T|n#i0IhAAp~u9Czf8YBH`;tPj|RMiqB|(6Ea6=8r_hG)JEzFw;0Txa#k3vFsb&>dzUOydT?+vMJNW=d?WCe8J@|+hq|rAbIlM z8i{GtA=m?aA}ZYP6`{Ho`kNY8iZeU;gmg(OZsgl^6@KX=C z@3kmCYl#^R2q=f6A&L*^F@?L&M~46Y5s12HETiFyis1}1=aXC|7}EX~rkPkbGAQC& zK!s7D!VvBW`4R)dXo~@Yla@?>tNFdki(992jYX=N?x%*ku@z?mHTkv|0iHDxrDm_? z2G&QW@OQX>$HvdLqGqVf$|y`RQBWRt-5XhlLR7< z@hQQ|FGlG-KGYaO4r|ZXVXAWKf+m~htJ-_wZ!8LAYuJ`;H}XgpAnC2*nOCB0>;=A) z5A?gw9Ip#V$;vRc-{%$*-$J`L;40`Ll6i@=nXe0pCKxxlnXGtjg4;eMpB2NB&$HnTu8;D%fH z{_Rf&Vp4pY)(?N#oVM(hI-Hg-brba3CbnL=*)vU!n=CEPg z!e@5o+@@ z{AfA+6MZ%Vrs$zpG7l^%hvnu2lUUymoC(G3aagsizrxTRLb2Q7y9kIbsXyVOgf*Up zDCWb(q59Bn_-FU2k=Mds3q@SpqE+(f-!!tJ20#JXDcN>rJT%W(f`wfz;cmMQt!E^Ved7w)i~@ z-a+Vv?qERfbuWRX(XP^^BPIXhZi;*PUmD$y4Wr$@;|t~J-BL3zxeC1QJRdea2l7WJ zBJi7VBO=fcad16wm|3?5!VN|0zN6ReQsRaR@M2nLwf}2&MsFQ5@bL-lFhVN__d9Px zo@z`Q8Zdp+yxv8^FC=+4i1kUoxS$D&*+$?pBZG@|8R?#Qmu$uOV|s7x%8MF=1{zUz z;Pt6Albj;b9;=C`7QJ$HjeR;%6|;#qS5O|%oJPQ-f^2Pn6aSpKy!yM{yUNs=D(xrizCQ8|x|gh}>Aoi1+!S7Tbm>L=3a z3HEwSW2{Ilk0=xavDL2Xj9xFcI*IEo^{81s72h#vzF&PIFrMF8T6ZBZQeAs~MKu$9 z;PI%M>ih#ib2@sAILMIfLkM7v{U|il06}~rA#M~Y%{GL;ybm}qf>v1-h#EH0xg3eNBQYZ9nt9Y0K ztdmn5-SzB=N@4=appMce4|T-zVTJ7{hqsIeLM% zG|GRJWdzwVJ((Z)qS(0bU$enmLeKE&ChcCX4v5Uh5HM=MN8TBB@+S*LxXAVo(`eDf zbH)o}mmOd18Ou%eC}=6VLy#POrZcns7KBi+zHKlcFkD*N^CDtzTCp4A8PlDySzUXH zYLcEFweX)>D~88zt>G`{ybUblC2;?9j-PiKd?NxgkOh6%HF94~OJ;7URnq7m0ci4% z$vI3K3zmjGGSn3{xi?Cb>{4DA#!PK{>h+BTt>%3*H1w6PPfBpR`U?w~psZ>#$Ar~J)lA2T%2I1zbXlMingh6}l@-JkwJQJj8<{s7klE%X1`rTG0`G-MAx zOQi&KT?-MGwnX|icfRTsh8C4bxYwAjv>$!1Bgo3cFuBzYW9%36sur4#8|ykOwxV%t z3z!zHzP{gdCq?x`?z5zBw5oL9|R|E?0ZMD%jIm;Qt5&vb?x#DTvkSEez) z$P4}}81)gDG!E4aP$ZI&cuLAx&~)qRqqm9a^ZdYmvHpb2!GL=Wp7c5QB$_^_E2uK* zBP{SQ@y7G-&8{l3zhcFVfIDxiHOo%dC^R10|OIy zR#fiz0202{H0`WyqrLJgaXG_tnkxC(C615iubcT62b=WplUL`475C$gOGNPU`wXGR zjPH2Gcf?o}v0KorHrYl9HeEK0Dx^^rtxZ{E%g$w+kT`dWiE28YVyJ89aG1<#&n{;w zt8X?=en4Ts$yG3C`1x)H+~VD5X706es)HM9Eb|&PC*mLTG+lC*2e=0A(g1dNgisWo ziLc7e%bps7N?lA~pyA4|AYocw5gHmC(}MQ>zEk)52iQpqS|WrQN5;*(I+Sj@%I@}- zLHELXx-Vt9apuY;r`nO>Byx^)7;=S(QYN{z*UkJr|89tP@pLW*f&;1QNHsc?`?dIv zL_R3$HLGH6W@4v4-)!-BC(U0WK!b86nFI5sR0K$0dvS%koZ42cYyHQ1dkgpOx>r%> z@@seNHF3O6%Hd73#iG?gnTP+*ReS_ZW_*}t@6l|uV(%ipOk)%|vfQCg9zZ{&$QW^x z!C7JUeY)G+CESHNs1~3`)URdHbq^O8-6#?iIB|a=mHu2*BZ@Y>T>XL8b#)1J>HTaw z%`bo+Mn$4RhG66(OudeTg=1)f;0PrNK@H7CJ{|2RuTIr`&GtNAk~%p`VX7`pwDDe9 zMQo1q-Gx$PNR0k-++2~LfV_K2pTbrhq9qMV#F#U5M+|MFNkM=2vM)pKlL z{F%*MjqB@>u8p^gTAsZ(k5!I|ZtGcR-Wo4t1>dP9N*kmRpvFJfbhO-K!+sS^*{l1> zZ5}{-j8nc=&(;-KuyiVpHtccZZerbD7iqGrw0W|d5xz|^H&dapqmJ|?4wQ96-$&kx zz-W@$dZ34iQFBGS1c$n_cS4|2I=H0-QjKUyVzl>N;^M+DTm$#w)iFy|D{_HX)W+}s zyw>ZqU)vo^daw9-o^aP3%F<6Fnh@NI4xH{K2#hU!2}i*-$tIQ29Ow?0Jreg%3=0X! zg%(Z}B_BstoVAJti!;wZ!AHxFc4iLNXD-${-ljW6-&}<00?`j*@e7n{;Fqck-8Z%FF9g323f!%M$c5j4bdT4mLu zVQq#}?rUlZY_2pFWhnunKuSjXuPF|9dUf3AMm}Pteab&-6?fhwNVK5lj#(pCnEi|lYA-BcxSZ@Y!7eZ7cJuLpYFT)J@vOW{KH6B)_ z*KKSGdpHMyEJh7A6GjS{K=&_V`|D$otW)`Aux z4xtfTWN0eChXaIEFse`*emL5cj2IFD2|-b#DA5k_)S0cJsN^WLgrJVjyf>z(NONT1 z?<4df@emws#cXXvF>7?OJ$%`rO-xFWIw;D=6oQJqGY9=FvQhS`TWIE`O|1FlcsX&E z8k9p!<6&)tD{#vXsnS$6uQV!J?66g#NfH}!urPM=;-x#qd6ir{li%2p$okz-w3=L- z#v}q(8Pnwn5hF)+s{iiy;;EH5Zjl!Q+r=Ws@;KkFCf$Fcg#Gj?3?JlS#mF1puzgC% z!b9ZaLSG;+7GmSWm-QIm$#mWKw=J}o*lk^iF$ZW51X|6JU)}pIzo4LqeIX4lctgCx zFQd-FBB_J&>833w@xhH)RzVl@roa|qLS^JzL>Ct!KNn$P{{p2(DeCt7dI&$< zeJ_rjhHt|k55B!{IqwmgX!K5d${E!}tIxy*uyh;>|CkOQxCx2ak)snFK6f$;{hD@q zRnco&!cOwS)Aj}}0-Oi# z|K498_ZK`ZiDCXCShaDh_M^aRNy)75oIxA*4`-PVY+4n)2*1i?dLiOj9C;p!L z1XdlHGrO&ke z%#>e9Z`f$l_Rsg?!chC=$3A3a2U)KN)2BnmtV{ylo#>kc@QzxwU1qx1Oo_`$AKmdU z9`@w8vZeGZ53y-fwidqeZU0t`39s~)`Iaw+m876h$?GwzC01?bT@={__(%FwiEWOPZ@ zbeSmP`L)ZD$NDGKx)t|>vRLKe9+@B&r8%e#1sgmY;}RW5Jw4@9k4`qlv;#N?|(d= zWT0a`t3SNj^CNI~Ke?h+Q$2&?-}qR&ySo)1lC8%*VvDW)qpJL1|lk)WMIJL?j5?~9)2-t z`pp%WdEJR%n9D?F#UzYDnZ@HZ(LK$bjjG7je)_BV{o@~#sR33aGizrPZI@SWa|>Em zgUUy0Gz3=4v!!?vJ=)?UvC-`cPEv`yor@=GM(hZ5I{g#p(B4@RwxycB%!)5I$(F>GI>p6%u!~+^&+6k#%y>RHk%VRalGY}v zcR6h#sIPFclTu8bZe$e!0p}AlW7#ZqV_MrNW>*Jxsc+e}JTkhZQtp&^0U!s6%VO5G z)#Y!?QuZR8l+zV!CV1{5T)N=E|1HbB`K0a_IIE<1er%Mt z8oJo~`;Sd|fB(Q4>0TIPE5+Qzh#6%Oq|Q8yawGv|{WvQePWb!Dt+F15+gA}gBst4y zB6jgZlU*)FdYWq+-B|mf-mLD4Fdb6rbQ9VD_7RcY}mELgKNqTY~nu(jVGH=c) zc;_#$zukRyKJlra{9p|J&ic286U4_{{FX^s{D4<=P*3QDR{&AVd>-l7`yJvu+$vOhoGoOd=VbD~5ymVBviJxKTWUZnMaT9*){R0A&qAOP{g17?!L$#%i< zSAhyDz|!}Mz~kAvhs^ZQpZ2uBV-9wL#7ct9U)^j}kU_Wj;omu=0RG9(8!AF*2(<{& z*u7qo81v(dBL{+hoA%S(xJpn<~+%(O2`XhmOWDb`;jRpt!{TDN4b|(!+EA z>1uf&+3@EAc{P6dhmA#V*qpjbP4}CeM@6ch^s-jPX#~t-As#Dz?6K30meV?9D_g6d z`s6sRq1b#|R?{;~_SZ3nPfbn9vJzg0!$#wZxYPR{F2|NK6Ox@gX%nGHDNS~i8(>g& zK)rwq$gd=`E0-n+77W6(ACd%pl#4HTJFWa~Ng5n5%^MrG^cz}q-}xJHu!#z&rU`Vl zjEhe~x(Pz7XS|)O?)|`(i4`r-zgMTdG#0(^Eor*HN0c@eg@Qk%+@U2I^M;I=17%S| zdg~Af9yj}whp(tE)iIZeiN-duD8-}Vo;+PtGMwE`Kh2T!wTp?UGN9ZJV`9aa!6%hb z@GPnq2gWOJt_|J3T|Z#({pai7asfbZ2!?7`$0O#7p(^ z3q;kGkpHOo1_ev&n|HQ%In~Ff3mIjG|90`1-5R?QlEuiXBp8AJ0+B&B7KpV+&GCJ_ ziElWb^TCz4kuj5jVPZoyO1M$t1lR4IPU_E~U!7S!?c&CmF z@p2}LUg(*Ps;`a*tP-FaDcI>1RYM_kq9{Sh#6&ic#=ofu*E*-e&`5m*^w+}hE%O zlD%bic-j2w5o=Yds&%9)P!{Xwk`K}ofevt@#2M5Iu>F7Dth#N{YKYHDB1j|*o<%_d zueREIl(jQ3?8rkI_4>xZdW?p&B=qa|PStTxDO+QoBh1h5?{k-(}$?@n} z(^ltp81HOvkwHGcW4_pI`l$Kq!?%24ETN#AA7@UYkoA>Bmh~5cLF-b5moRFb#`}4J|!%w z1;wwV&ipY5MqmYf*7mOHq_F!NVcRXbUJEJ6$vW)bKdp#&2Q=>bwd8o>>dwkXzm3`V zB`&yw>vCoGu`C~^G{@TaVPRF9sEtQq)!VjVp7;x$ZCKT|)U)`j0NkWU)$4t-iCa>? zKG&Z85IgAB4dkVCUcXDTW-n1bonasqd&so5peL^gAWqv$pGL)p2L9LzUyjf`{Ne*A zSDJHL8xJU+$eRqP>uH+#8juz7notd!>F7AcIotvUU9kUM@iKKM-RcsbX)0fLqqfp` zKlAkRo3V&VfQx*0bzvM0G^-x;EZYf)n)^U((hwnEf)L2g%ln!d))}hiE+NHfzo6lx z<&*`Dr16H}KxQ^y5B#wT2VUfmt@HH;<^yW94Z&xam7gI3T(RVfff|fmo&58pdRS}* z*3~1#j-DP$pvB8NsbpJbF^fH7ahd46!OVU?FpQK73QI%nTn`E)r1p6#HXv{tb0oqK zEL@^vOAP;wun&*(qUEt>(|hkrzYtqE z)&=hnGNn6(Wh!qp=O!o$^GCGVsj*r0QMcuAa;k}7;Fu_^DLZrrI#PIw8|Ijgdj^y- zsUd%2ugP#t_y~5#-3Igj{*gg6?%hjI2B??Dsu11z=g;BRU4EYGruTCy>&Li2uj09o zoc}EH^~J2s(Mfj8Mr$_bM(bSe2AsGhBDdq@CHu3Wog0^a7oFlqV{@Dv3=Kz}fx#Pn zjh7p<9~(AizfNuR>98ZrX*9@|2-Ur&F}c?qUiJzNjiVK2j7Cv$F)n4NOC%)e^es>gd9w@6e8t{OZ5-ttzz>%; zH2e~#Q7oI>w#3F<=4(8GFd#;Y5Wg`5J7;Q05b!vc&Yo_T^jN5-+b)oRj%XFSGx?&o z{K;Lo@7(HthJfr(>)yIAY6OCV8o_jx}8Sl4{^K=)#QLhg; z#JJW;CmkfP1lg7gRH~POymvYmmp^SwkzyIV2^b5zbU1d_epg>C(rJVGHr&2D4yHXI z$p`i5LVvgJoRP=oPvZ#!{_m9~Cv>oA4<`X$MR|-elpYhU)i~e#`2^l5Pk--~ER!YH zr!k!OO%(bEJ5=uhoI`n}Vh8C3%UR)#hJ&bZpIV0=GIC}ppbEZt@(rBm6R+GL_v&r% zd^48OiBH`dN8n>XY!pTo4LKTj9BFS@rtZwJH$~I{XffDM{Fn zGCkyE-H|E~L{OUTkhp_duonw!-1k=%yB=!3*I#QOefU%zs)dnnPvk;j)pha~B6Tua zjqur5ZkLxdz{(pW0(^D4nQ8g`v05ngsXo;|?_A?*5bk$X769`_fU zyuC;3Ydpft%D;Zn;%%X*ilUOnJ%Il}#v?vGVCWy!wtMm{Jn>-!2rq%7Zr&VM0S67> z9mrBS3WCojE8^(xzgn~m}2q@dhr(ljcI;be0vr&N~sZib9_kixSGcEYeG6p5UP9#;%&`&t? zisdC#i`5rUt9aB0d8*UMH$aHy!5IQp|QZ*1DN_+7q16x8@~ofshEQ&YV^ z6JXPlEaSn-U3w8vJ@vd><;epu)D}peWptNisv&tZTmP>HlrUzbN?8Y5pU>>ls zN1cp4-(lpyv}Z7PQX8|i)Ez#fMDwz}JnWYbWcaeJu7Og+kSaN(0Ai>Ijq>XDGaQJ( zINT_%I#brr)zzIf1iIJpl6gagjeIc1ok!0FJcf<#$cZ7aCDl_0qmsfv_rV35r5ghK z(QlGemo_vOsvBmP7^vj$G7<~r{JrT?`Mo7bCw3%K(~SeOnYJ%-);=m)Mv1Y$hOGl9 z_DNSSFWDL?S!+B7m`}SS4i?9~A457(5RKk{&Kv!4Y!+UF-mhJ$0vUc&&t9IXc7F{y zY^EM#P*TS5u+A+|W)%{R9KsgJRTGge2vR%d@Qd~GjpXUkiQ(S_KpK*mn-fU^#XOHX z3y8KsfYw>O15nXD?>I%MwQy5qabxYyl9^k*EMBk`<%stMAYUB`Fs5w$+C}|#M;YGQ z%mq2#_^I)NnfWO@yTfW}8^29EBcr6mui@yg~Y_0ePQ zCwry5d&?Ch904~I*eubGJj5WOiQ!z+_MUemu{wv_&kRalRZvph7e%r8gN!o%_IY20 zV4&w##J}+582Nu1z?Pg6^@Tu#43YA%^-d)xO4P>bQIfV(R6rjqTQ=k|K!KIrC$wM) z*<%F!pSLY0*G(2b*z|$oCF0I=p{0h#^wVDZJRKfa#Ir=xaS*jS;Xl%{F|sX2GzWUVerB z$6LUeRGdAXR`s;=l`7`iGom^btl0a3Orku!7jcpI?6N#he&&r}>UMLm_KgY+xI`WT zbsa6KlZec^&u026+tcb34PFi)^QMJ4d;zJ96hTj;$p9s4I~%VD=p_NvG}pB5*Ak$) zf0V1G%0jRwMo=U*^@}3>jK}BOKtBIp00LX?M>Hl*g<;91{%{a^ z;sM1dvp2!fEn@G*WWSf=W~RM6ObkD*;=a@pKIYx{A@@yAQlNOA;fcrfjt^osOtdf# zzHnP?IO^t0**@)9?Zn#E$v*8Zp5TG01+urns@!+)d>Ef;KWn(3u|I8A?V9mSMKvwu|yxlS$=upRtf)@*toG|El^7?2l) z)aAW&ovd>^6EA%s&+#HWCCLcIvq-0jA5KKwc`@I0Vb2GcQiVyvVvqzaZzhloY22d| z9d9R$U8s@Rf9c`yGQt_Y8Zq9H#c%X$J>65%tBWcc73Y^{4gDA3>y zO)aUuX7_?Qj`p65&9dOf%do}$_@VaO7M7MGiv$=2zcVlBY*#+(vIs^L)N6_cYhmMo z!_nVjVJB*EgOcHDeuwQ{keK3IOp3jO%VFMUIgmo>layAZpc5Bw%2&yN6pP@1(=fy^ z$h1;JKS?^?u5F+OU|AY2Z;C58FQ2<7dhyoOZ$4VVu%_i(>rlP2_)U5a1d0T;k5B3| zO)m{%`Tj8RdyXU^v8Jz6$9%e{U&5vW&0SjOzO*Sa-E+6gz4m2z#x1@9&8r4&dFNow zpayHJJfBQyAO-87%D%PpzI`XWhYg6DQfrfK(DUz8VI=k8w?yxJV z#Rdl@X4NtuqnKUmuVe(rnx&pYFuc|wV8>~Yr*xPO#B2O~!2n*{T#0(zEWweKr)brC zt-Ul`l+0mc$({Ee*g5blL<~+)HY-2z|EX-*P6m{Mo}US+eN!>jzzH%^H&p&$XDV15 zC>d0Fh;_xD!XcNhYf>{!%QKI9G+I^$C`(_AS6hkdN!&8i`YoCSQj{st2%rPky|ct7 zYg@@6=bOaW#Y9U8L17w>8K62`s9cCkPvGJY76gik;jSK@o5lfgxS@o;1E(QIO9%i2 z9|uF4jWa@xKxJ@u>>f#P=I!swUo5N4oyZ*}A71J$;pV5?Z$bQl!)Rm4>hvue0;^Pk zuly-zWM7<_n+8_i{RNvK#Gg-vtc1FnOyi=y59wYaL))8~}TQ`*;P zPM$C-g*YKT5NOl<7GmB`rjO5wuae*{Sr1mq!R$kzB1>@^SJGZvsR0_>!z_bd6sH+Y z*(!wL{Evz|N(?@=F|g%+MT{iq z)UZA@EzjTpgkbBrDx5*$B@Dg%hb8yV-ME9HUTM%eOz;ebaU@y#9%Jcxg4Y9G+lXTZ z4u{Wehu&IiU9;T}sCgA;eAD@(vBdD|elaqo2*)bZ@HKQO*@|IzMMV1Uk1~$4Ct7#^ zu!{H4L$4v0^hdKkvXk7fGJ;2vT;lc)^pg{I6SS@bI&XHfiJNPQ^6|V2cZ6d|Bm!=x zHu;jNLGAePp??2*h9Hmbx}v{9F`= z6bql5k-OPWFf$ma%~#Dx{>q>6%b6OulPpD%XS%HrVPMapVEjRfWd`-m;@8{%uz#i= zATEu1Gwv^Cy27yH7gULJ`F#Iox;F4A94q}TTt}_}f@Cmf7V8}ns;R?16q?n+ucqcs z;-rgwxt)6UUx+L2EADR$ChM}{w9l?y2Y=v9I@I~|n_9B#L~`$5>q`lolte(NR6yVm zjngIXlVvK8JGl=ziUBG#bhG3>}{zgbqYs z<7Z~}IQS+Vi2@AKT!^tXb+PcFo%plJxrXLu|92WBu2W@tRc8Xg+Uuns1c>n1f`hdw z$+e5hr!%((NwzifMj)-^n9LJM*3TEcG6lpS%PNF1P@W&rJKprV^oB-zSlJuw+D(@$ zjlr-UMYT~WGyVL~03Klj)~EAwk27-^0wQz5!_i?XTzq8)CUYx#fhg->lpW>aqAAsH z+&C$8#t`{~rI#b-^E~dww#=IVGj2wP%`$J?!Zr0(dsUelbYV6vhp0 z_=-61Vq`AJ1tg;4T%3$BydNH<_uw)Q1eaY$A5^`Qv<^3J@G2auaBVPWMoyXQxaLAs zuVLYsI7L@``TN`T=Oeriy3C@s`0}`9pd|fSoJ{fTmS7yCsa` z9=MJI*OQiJIDa>}4bqiETb|YK=BsK-*JRSQa}tq}CN+i9bC=`(#Eq@;VKoAaa5)9m zbc}h9b=NX4T1nwE1Pop*%&`rxdy|}3&aJ0Am&HH8#Ce=kQcR3FmgwF^j)&Uixgcqx z7`>577yt~TpK}C$kcTRLO_5+ib%DPm9#WHiGj#yY8oG=v@P&Jkz}RicDs z#d8Eg^UY9ds7}uLCFM(^dok>b2h3aq43Ff*I=7siD-CeS>kHdMPmRT1e;o_j+#4xL zWLJ0tpM!A0#s5jWP0MqFzg3s5USB_Y?Um>I0;C?vby8qXPvE^**pVs4LiYHg4F)QY z)+%RP!l6eSv|)S)VIF>sNJyHiv!}-j4&JG8<4)v+{vArfm+xLqX7=rthVPz7Ql|Mm2ns{Jkw10`2oiM)7U))6*A;_}n#Qe$cfh3?-6QM?l*i~;VUc4v`g2`WVh zTr_U}n4fko^Yo_6NteqCiTa-z9-|)&Gv2JYOxFB&(X=LSN;;t{G^s^NLun#su)?Xj zt4~#!+2fn54YgKk9f$J#!Lcv&*pk(5HYDA4DR9{p?9fK;-{T4IjqJe3hZ-Cb30C-7tXGZ-qA3)m{5wiS(3iN0}VYGjJ=dCqL#R( z2tk&Jc#uB&g*tu3Pj}#t;1v{z-4d`c1lCe$0(9I*N4;fX=@RF6_M-PY*7eUsh?l-2 z?X>D(dS2D0idm74i|pVem90b}IxbX68QgejeEt1WHKfdO?m@Xhn!jn%*hWH8nRc%& zV&x6R<(7z}xy;FGMKkgSx5`+Y@&GQqi#Hygz>8|5)3= zw_RlVDN1cBQmOPQi6jM0E07WEP*bW&aIv3VdSCfdpY) zpjaVwNfv~bx>P(2#NUBIKk3zQF~bvyp?#`BSp26I^s9YQuo8zg~@g zp)h?oiyABV!bo_vy)maqe*jhjA?I-yfdD948QvNv~ENtSNVq? z-kbXwRqrPl(KU_v%$qNGDkb{vLb0R9ihXy_{H{!-Qv*yHKq6;e+O+GTVT(~nbg9A{ zGKH?+J83*MsnZt2g!^?rt#wx6dT$ejN59-})gYnqc>C*a&8NUeBQ$uy{^L(i5H!b$ zSLi#9RC;iwi@oUS+h4Prrv4V+KWjPoK(8T;Y#t;Z4W5Q|H`%dudPk&Xgnsc~U2zdl zj%JZ)w7U|JP%NfGq5wKmk88)#hCf0H+YcZpdVz{u{NCaN@ZdT#d{7ym%NB=dQ#8|* z0p_u;5zK6S`)_4vbc5a(lZIQBHbhQG3GpgZji$AvPp2vjU1lmxd?7a}gIT3rPz9)4 z1z81z7BPo3!n2ZM{D_uGA+3|28)#~P;)3g4Pm-RLub=#JH`hpb`?q865y7*Gbm1kI zASttQ7ZK{+dt~9-B6DV)=Nyy+$p^-Uij^FL({Jm9RiW?79`92p= z#K3wsW9TR2Uy)+2%jb?DWbIDyTOJNTyCuZ=TuwrF85wUr@_O&&_4{P_!8|u8ip-WE z4m_nH_FYniX5y1q!qSpTo9#6v>uV5e8HhEV8uXhx$y4N`2~-Llz91T_%-wpJGF@e3 zmvm~QQ(13Z9QR}`+y0I-x!4ZXEAyWnf(ABZ0ip*4myNHO)#%cn^64Ji3OC@G)K0WE zs4<&u1Cl-*pp~0+LJ(ca- zp4efP+f3sgrJtMSpxZ)c!a$|*Zz43B^cr%9p%IRqZm^wc^vi~y_@8-m9-i+`pO7Ik z!w!L0+)pn^U$)(Zd3O`8bX#w(jxpFs+Ir{;Y&XnQeDk*s4kL?C53!Y3?BoMFtQ9x` zP}b6?=X0AQ5I;+aA0U|hcR!WwG`-3+jLKM-2|4D_eHpLS7;wy5PVt%?neDlCqP)Qo zG`}pm>K684IeP#}2?MCS^r=(19>%M20A0rEeLfPePcORe_fY0;49IHuI*nwrpz~ufk4*%;1NTc-np=yPSP5YQ@vBA3OpdMsx6UpE%1INKQ#2UV>{Xgoo6* z5@F#%2`y^;-#7H#3%P}bC^MZNSCelu%slexIC*zaD^Nc&dSYJ{Ni*+U7S&z;jd(-aUu49IGBKeLhnp|vj1+2-+&1bF!c z0Js=>iS?Lf>nS0aW@~nzx$Sd+EG#T!N3>Ewbd%3t9<%a0%Xw~!&DE~^d#1Br$kKws zV*NG(;KzkZLU2v>34h-=zeKCY{)r?8V%*KVDVY!q-)w2XW$_K4o%j&!l3Mqt)8`Ob zQA?g`n#4MC{##njTgt}52zJJtC<_u$kHV<-UR$fX>!n*+=6-~KqeBE*D|6969fLSp zW{P>V?wZe=B<3w8Yt!tv$I!p%co%V#JJ0sv?hWzW0#z+hAv)SqwVa$R4V|)76RG!C zvJVxWh(tcS9&Gepr-Ci7SuxD)bf+(4{G@7pd}q2{l$1ZG&8WxH9t2(}s=*B55aM88 zB0_K7@{=SW=0=8(IV$*jeR{nuv%90F1R%N>05SkJHah^esF4h~Y_|bEK|xXout2;@ z7sY~`@C6F7rMP3Ad-w1^{#v26n7Mxk7nfA|b>i=LH_5ui*KQO6yLt4cxN|n#&L{hA z?XL8}vLXTDA0GBzy$;3gcxJsb4qkwuS!(Wf+9z8ao#QVqv1?Ww&Z?ialCTc@g3I01 z5>L;h#Jzt#y5*Rc^W&4o!eSg{?wvSfs){CFFn62dr;|T*A9Hgf_&(o7j7T zer#dbG4EMP#e%RujDI-%@cI${BjrcIj}?>*#jY4UUJ`!_hHtq1D-@APnL;IYabC$P z=rC$;*_}xI-Vym+YM@ohq?i-xdDZb|G{%Zi!auciceCR`{&!JnCdEfr$^}xNLSq+Z zNHtYZ1vw7rW>mFm4=K z!5wl2V7z^w0Q68G01$vra$wd=o372DkHt2!uCflWyl;@cU8U62MZ${4WyM~VQX2>9@6pRpbR zQdg?%#jxpfuTj?B#UoK=yG!KRg*+4su(xwyS!HEna4;!HhUcA=ftL^f>e*lzb^yfS z5@h2f8wOP%$&t1Ds6^-^A(R-2;F2^$3CwFk^8vOHi54p{2@xA6lxu8RUM z{AA((at`=TP`k_il3nZ@2`?MH?ZBtI6;_1!fgXbpOjIEh(6d^=-+((rvAQAU8Ll*r z?ujpv(NE^p({C^#${D6x##rCTrcJl)@C+8W$GObqYO_(U(Wl2)6)G^1xoyn1T*Qto z=miA#la8I(2-~ttpb$bm`OAxxNCYVEeiBjYx&7|1&S*NRpROMs84jn!!*xt_c*stc z5L8@{0j-^%=Xv@0b$1{QKKbh2b6c;sdZKdZ_Iiacnuf@M5`Ku}6vp{F z)6^K}?N|B|5bQZo^MwE~UYW6DAWB-aZ+Q;UeYi>p%;jYP>Mjg)&RvfLvA#7{v0_4~ z7LjMcn4tx}^3@o$ZjW##Tj$Q-7n;0`w8e9`wb}X`WzpXOkd(Wts$|f-UUC@{{;;uP z%;iFJ_{3D=zLE6tymaC^NxH&=JNt5`J&MaPxQD?r>u!(daFtfMV^xFGpOZ>&00c~0 zk%381{9nh*02uVFK>>1>4@(1)KiCQ0zEy&oGF=bI9XK2Po^vl?>TSSR5T4JBG^9lc z_zkUHMn8gK=!pVP*+Whd!(tzxgT;GLune>SR;|75&S;=IA%1MBAf)WoslY_1y#PFi zob5rX3Hvu@^6if)`-ye^zn5gw{gu&!VdwkiAI%EMCk%`J+0=3zi&;J1W+~(u4JZ|{ z9$)&tXn*lMHb)8XmFaJ;IIsWwWpDB)Kil3|QDyGN9~AKyQT7P@Vf3Yffhk>D;6#(9 zj7O7rGkyNS@(-Kve@wzf-MEC&6~WU>Q5yhXC0yBuY8eJnN<(C)eCI6+?muioTwbvi zI$Fq9JD%?zJT7fW^TxrBzd!xE@$Q2$el@g6og!CXI-UA!fXiVLV4{8j?DpCYiYi*2 z7>s#I{py2|S#7465}+^MWHLOkFYH=LjDAxZS@>?$?3kFa<%M7=G)w5>g`V-pcG;9h z%|xe@wfJ$)7}4LE+bN1OGWBGKhX~Y+ctb8Xfz75_oznFQXBBHX3r~@KH3Zu_5}#&{ zIbhaT7pK{0P<)g-{lDK? zN2>hNKa85ykIYSxI?F>1S5?i`ScD#)T90@URHvG?9#Q8e4$Xb)Kl zVnA|IK@3PRfPo}tK~NMGl%OaINDz?>L(WN*oI!Gy9ES{&vq%;sDnURpb*tum+50{F z?sLAqzw?}X|2h3Ui|X#_?)t4ztJYf8%+x#(*W2@r5_?1s4bdGAvI(2R#y_IAKx-P^ zHU26-d{W)v{A(vI6U=Kl;vI~I^1^#IY148SpSLHaSlZ9KMLj!JQZ{t^XnK{S)BZNi zl%wHC6z?_csXu(z`Eu3XN|MEqg;y1Ze5LYxY0|WW#N=)WZQXI+%1zWs6umMgQ8IhX zKz}(*-a~@JAY6@1vcISM6xoYJ9Dxc?hcS?7?Q7}9@K*#xbjGu`E-c37Y-P}FP6oHL z;OGxAPbluC|3IDoqh#mW@rgn%yB$;)Ui6Fv$%$_^DD;nz<5kJ<)I${5;!hb2-$FTh zAX0ig{_+=VNwzN;$J*vTdb>?-HvH)MEa$HCU992f^EaJ8wj4zQ#6QoOX-f>eFo~Y0 zu8*Qonba~f?+cSHee&zne3fhGw_{V`(HGVU9EHj2e9VhXQ(|vt_Mi7l-Iuh3=Ix5a ziT6X)!B!z1Pwoj?S!H21?9_hr*l)MJF=FS99e7vNsFc%i&PK>&hc8p$;fvb1q0Z;B z=UA1%gPqngDR2R><5vR*)}l=UtF3;a374w(STbq|&KgAFopzJMbt<3Vrx|bo7@qn& z1=hlToAf^QOf2gVQy}=VW%p#^-S?c~htLZu3^?x6z8G`Lm-XaQs`{phYDJRE1%(H* zS{8Q09r;4>Us@|xSJjl4xWo(h~gLHS|P-PLVd%r@Sm3zVSmdKyys~pcR{PZ3a zvb0}asP5q|W!Y*UeAP2{^-y}Ue$h(Mz%=}xGRcZ?x2J^Sea*;9qjw&~WFF%b81V-t z?xrkxeVn^0yES?KPCf~jAD?6+dB7DiUHvG$#5q-x$cExu`{pJrmj~CaUR}cS1kYjK z1RT~9PKxOpn981+pkLZlx9Y%-U;JtH^2^*z?0p*9NVBXT`&myi+;7~vs}r%GGMYMg zKmXoo@uWS+Vw-nUx7=${HucSy{dKA^ci7H;>2|C!O&V*_9iQM~*)i37;y0g<_!yVH zQOez;d*-{!+Mv2?o2RdOq@A*{b2bC~`SS6M`I@t_xz;LCFOCFeXH97|1IR!v=z>hXt@8mk8@ z0FUW$VaqVBErYg=dTz6Rf9q_bH4 zD0)p~R()-=c1w`T(<)o_mUYhh$|D86sd`qW%|omuZ6A%gX;mj>$_-9imhj*GR;P6# z?t-y;tBC=<+M$X_3+2$7$SXJ+oaKO6>2rxII&32xUvs3BgC1~4<9SSjR-eK5R&zEM zbHAIuB}=!B3VQ5z-_`dG|1BTENcZvI(s^Dor!gy}zqE&DADxTXS%1S{43e|nO7eK&(1J$#$L6LoWY_`aM*~^d$t&VsF6%7o4P#K zCBDC+Ms2M;GoF5+e^I@H)gwGjEBU~>vF@fwL&~0-IvuC?F6uNmnU=C8sTGfl{BJt- z*@X(}xLU^hrSa1{%p~4W=QOD@34^u^H7kpGGF!S=N!YgZg2eB$^<>;+;Z&%7Rw7j> zKEZon!#J4Y#~HYqr>4j~Mj8->)n{yNG-(xSZjg(i(zqIt(=XiXY+{hWl3 znj@BaP{vEiVln*oje6fVYP|L%RQ1oMXO9<@bw>W$*sb6C&N|!b(}S~b?=X>guKIuP z83sW+zCV!=8}HbX7S7M}Ent2`8KugZ{LPKxQ0*x-BPx1wZ5lYEz#mSzjW224E!q1! zM$6YB(Nvwl2(R%SJ$34tRxVYJ)_Se1A5+1VSzH0QH$&~adLrjHg zui$}{pwj{eq*Xt%h&82)Ypk@@z4mYrn-;125a4ybmD2u0fZ)E|jMqN#)#DRm%cqK- zY+UGEc`DtH=UMDIESPaKu$El?H?O}YDOPmBeBUsSlFuUe_A?XFi~z?%ugf?&xHYHX)6dip9aN&B-{4-KAQb z*j?Nu(E)2t7RNF&RTZYKBkAy$qA`Vw^5J|MGE}k4QwGO5u%Q?Va%}CnE+(0OIQLxM z4mq|pB@(r&tcN=>HY!nyTbeV! zRF^lB2u6$s>J5!J{Tx}S&NVWOqh3)U>7LQvIXp^H%J(#V{KGB&?BTH zDm^~eVN>yB_Sfl-W=?^erldVrjb}f3r0qI=^x`4>)&)5dVOrc;Ck7)8N<0hsn_1m6 z*5M`0V6$(b`OKd-Pu>64YzGVZ3J;lVyMxD$vM}bCx0Nqa;;>tZoS3(V5h+IHnJ)Xv z=vMdzo+j^G?Zb?a zLCY)CHym~>Usljlb8NdIe6vWsIF)B_{WERrau<{I(XUpTl+P`t>ZKRiJ~oZiq~u7eGBJ$9)(ox&62?+T~3fA+_h7$;3n1! z8(m)Zk41BHq*y0ANN7#ZQsaYeQ61Rny`yYKOd+S67wcfQ3HY6q%8j?&k-nc>k$dfT z$4i5$>4UHDM=dQdI+Ht-?W;(#4Wyg-a-<9w*?Hw=B|i&|!_yW$jlG!uBT-!ntOV4h zwc1+p=kO~tgu z_#EEF>2uDLRyOpp2X~)*-fffENJgw9m?`q`AmQ-D!u&ucE4|b3v(n<0nL>f6YvlLd z?zv0GU`fv7h%braXWiHRjZE@tT2*>~+q}X-kF>y&8z+nI>bgAOI<2Uqoaat>ExNB@ zWOw)d(D2A`k$^U8jH=F{Q78rGVem!TJ>MtjCB-RtXFC#nCt4!y$gs6>QHr#e1YK#o z7A<}!<|uhZz;Ieleq}7RaMq&ZhDwi~#xy5AmhD4d#KV(a|IGwb3!-3qb0fWg7YnnC zWbYddc-{a@R&zo2n(5lDK2I|_-R*nI+pa%ZN|t*TC6m*lTCs8U2fIh;p?xy$%~IBb zwAf1U4lK_UhnX%M*vW-)Z79Yyt$EZ0XL%JIp*c1aB}mrtD{9bHkrq#O!5~b1U$&m* zqVuMiea8b?&E0;}iZso4Xq%sm^d8-2F>x{*oNc(U`5-DxXuQ7Jb6s$jJKd(S52@4eC|oo+D2WAaXz>}l-Fu>aMQ z`u*RR^>=IzTC98gR{Y^>Wt+3*gHci8O8E$<`{7Sf**0_H_?_aUBAOR4f=9*hbluaMXU1d~ z?^h-{h#Vd48aF&9J!@Dg#ClcYTH-efhy2B-6^))74nh8eWicLZ{YyU{=5l{s$>$x> zW>GkBrYV6&%9qnX=7PjQMQrG6`FmJLA;YsoiD8mnZ{~{Utpp{`jAPh2;~6$r68NG_ z0SiOnXwWr$ zaVOYggKkxh*6kI;;k}OrVgy>JsJ(qd&fjJJ__!}E}-k=m~t za04zQXE3?F0VT1i1d>BrZ$^CUlGrZ?NaQ{^ekdjIoNvKCpVqzhhD_Ah%1RN2_hXuM z7}sA-Dd2^5uxR`PTttQ1%AEQyC6aW$2j%lmNag*lK<*N!`Kal!3nK!7Db}K^jHKAR zQ2JA})GF4)4vbqR+Bf3P>K>k7Xzs3J$5o!=2{6R5@xDI8R_!?KfpHmLG@-lJe3qim zy=Y3G9*b8$K0rEBr;df}i}PahRg&W84<0yCEySwA_%0xh9ZPSWdpsWqUz+LP8)7Y< zqd+EEB#=dZy-mm`b{A{ugCG?aYnr7DY0xP+JUILT74))aPO4Z%%anoY3W87rH<$mp~c8w9ult#vmA=5;oQU+u;AB-0AQ ziSxGP-HUU->aDGgIf}^~)|+dw5x%}xjx0iMhhv6*h2}Hby>K;a&*s|lZa8v3conZ} z$djc@}42X zbn=kkZCgqHzG%VLe*3D0PTq4XOpraC6>HhKaHCXK1d!SnmD7{)1wt6L~R~(38TaPBg-wreYw&1iz=N z2MXIw8{3@G8#p9kS5uxZXNW+MgaKkBx?WGEq_6?@Sa(;8C4VVyOx z%E;n=cp){WWIcEOVx)rqZv}qyYmXY&k|Im*H-}GHXNqTM7IT$L&ho=|KuaQ)SuYoBTW$Dq z4r&FiZ)#1E%$a+F)&u5%ye9rM&K^sLpzi)!_@A5))e-WxMG zC4Zo#FYj{5+2^JEub;p5;K1Q`R9Ifim7wq_Zsy&sLSft|IpKdw(CD&S;~H+IYy{Pv z9PQ{U*6wmUSoquZWXH1=zc9D)gI@R-PF}RO4_AvK(>RY|bDJg)Zc$?X!-^h zJ2blqCuzetZZ1!)#~5GZzt(vDOZoJ(I~CJdk40{xI9H;*+<`mQZioP6^{4auOHy?hQ2O++cS z)^ls*T=l#=Vw{JwNJXe3Mn>!e2PNPb=sVcTN`}SqNpkM_;n#M0O8jL<-Y{9!Mw*X` zK?69DfSY{Twl`)CtawS7|N3}E;H^&guAG|*l ze%7k(vc?Rl(+{zk_^QGD*B)Q)6klrkG!7QT-RL6%kHZ;<8{?9?;bkpm`t{8Ej@}=G zTvsvC7O=!WAZkWf9(_uNDW)j#G_#6J1Y$!*nkTVu#!I>Zds*fb!#m_+A48%sb%o}%7WJBQ%d~R z`&_L@DpVfh!h}|4X~WFNPIp{B{54Zr>||Ss<#gzNH@(8m=4gSE(I?4SJD0fBTdTya zmyNBvRYRF$dADR>F44mG>ly{t@nk;(Cc6I&mDh#2vG~mImyWr1?c={tKt)wHxvY13 z*!qP!{BaY}BKjM`7~X=qi2<%F##kHW=#M<@`bdK3jv&EEF!}hs`>+*p(eVrnAC0AP zm%)5NUe!AG=@xH{Kih)DO|#FL%SHIrj5+?Uk|L)@y`J`=v%_(Yn~)`LiQHuCjTCDV z?3%`d7VS)Wubr2qh7w9Iw0_|~JapKVYir#1ZHk2ThRYgcXXVL{bdqcyBQEvgrG0md z@0{B#^-}#N_iFRD$2c)gHG2Z-(u|%Y{mR$IMflQW z_y#PdDa__Ayk%mmV_K}Ik2=j$e5?FS{k6WLt82A8uadG~e=Pp8*UZwplC#09i__?P zo~iE+j7fnUQ#!G48au}n_Wl^zZ4gjMmO+BKoE~5i>%oRhVF+m$jqB7f6C$ zd^cdLWgps5kD?>RX4&^)7e0L5h2@DK#pc-iqp)^ws26SabJ>r727s3}8%yj9hSr=* z8xQ7PMHV)S8BY8fjw~^0NLyZiO1CK;=1Gnj&`?wS+!>HacJ>GpxsCZu@$^gKH7TA- zkap|w*ZZX{bE{4MkIZ)L5ukr3IN`;8iuB{|M0ID19;Hj9ddkBuhMu+^zW>PdavFCa zDL8!X+pe)14|nmSB5JpB++-9t3D`FHFsH^JNQ#As5~ zO_Jf7@cz)aZW3?N=Z{@5NeOWYEFwsr5<7sU9zDfFDl2V!4l8&womIC}bFEV&d|*&> zVerM}{i^|)n^Fzo@)O}Q*rBfs`t_7>iSL?Z)KPQM#-0_StP$XM%(!LiTU+Tr5Gz6XFFr@A_6HUm{sJwZsH|e#H|-D zj58H#onxizZ+R@1&sojq;c!kkESgN*U;?=#47e5rA);)MoY$<{va8hJx zS+-6b4)C5WlZM&wr8FEy=0Z}m)BcGKR?eHccS!b%>y&Xslc{)vsvI zO)9MAI;Y2F&xaHxFfETOikeL`*U48g%@WjKfUh-mz1-5 zaNKl9ezJPAd)A1B)WR=A5}qx6(h4;fTtse2nEUmcYmJ_z>cdn;-T71)n`RM4FyFha9t~fB+jH& z((J7rq+Fh7`ATENmy+m$#y?mrP2tm$JmqS zapt-axwQhdZZO|DQ+XS&vq_rF)Ok?s6{F=?q2iCzn;E?8S{)mwci>I9=;i#mx?W%v zCnHZtEpxQ?`bhPhjsEy@<09a~@ahyai(!c&@4A*c&d-))XH*5JrCq+MY1S0br(?QM zE;>(w&%L|=zmETP=Yx~GeI)6zh&O>=uyVuotyNQMj z``;{hY{J)9#Yc_8u4;O{>p#taIg`v84q9#bFh7qe0aEoiqp6Pk#;OggXT`d8;<_6} zTI=^l4p(hlCzYguZtxZ%?Itofx61Q->Q6{T`?JC~yULurn0On1?q6HSVPn5`t}3(@ zgqTDOY(8Urq%S3Rj+aW|ow?Z7rA_8FLnk`cifvY*QdeZ2{P|MJOY#uc*Amc81U0`aS|9(r60hZ(TzwvygOk{4Pf@7fAxn|Cuv zRp=!P+shQyZO}XVzroae_N1vF*P6e-RUxrK6?t6gldfNX=EsL`O?rLT{A-rFhYX*< zutXihVi(;o3R=$;H`~!epI`N3__h&^D_HKJ0qYug@l(hki8gp3bNsd16UG|_LUq&p zBrl$urOjyed9n+#pV8s7(ZSCy$E=So)NrJECAKQ3sF90XRam&#Z(KiZ-G=ifqna?a z(YQ>i<&V+ltqz#aT1836<$Nq&j|Ep-f;prWMr!=)Si8xv0b{iXeww&?P`vod?R%4l zJ1a{H^Tmf*I*-}7Vv5!WdZ!n=pX@kgp;822R-43_g3cb|UHC-bKQ};r4ij7>JdV@A zhK8?lG#EkaFj5Z^fpANs&nEQTGfG>Fcsl-@_1mfnz28r*EwhvO)icK)*m$YRT6;WS z8xgX8g_Cr`57MhAKPE|gLCC$SKjI;B;mew@VswJF@zIG!AvH-=p|^bxOns9ud|A;u z%K&Y8ka5*8BslMbq4Yuf%}b;gI(SA2Tp#VGwsgKXr9U!CJ=D(zJmR&N+F1F67~7WhW$9T; z7ObuM#-cY=H@=16zTjxFTW(^9($L;n`!FRDYgnSfQISpVA!9zVc#K2%*3q?Y>rH?2 zK`_^E^QMB6u8-u-U`Bep{M%hEoHMf-Cy)czo5>r=QE6)IZOivDkd8jR-hv}h!_Vcs zf+PI-49ZU zXzqxSR#KYWgo}~8#QudOm3SZTQbmlOl1xjO#rfqOI2ep(Ud(q*_nXJW&3KZNscc$K zUFFD|DHzN)(pAcOz#qc8%1=%;dsfn0&?IAcVeis1^C=TazWn|BFu?;dJM0X6_K*^? zY=r|itkGL>yLICx&E_J_p6L$mo=t+2@mpnT!Y(YZA_~{?4aN`2`r2v1TbHXA1D0G? zIRbF5T5=7*t}AuJLspdmMoT2y3U*SoPg7VOOHkNyB|qLn299UH5J0C zyG(MY=$m5>Jlaqe$eXi0A5^sVT3J}HZ}VEbVK-f{^{POr{V?l!SXom^zGdH)l+Un( zEK6Vb9DMtrbl=3R!_Rur{ISFCN)woTA;u?rhF!1ydD`8FZ#hV&qNZW#Z!B0vBtY$s zFJ=Pl{1%Rz|K@Ev*kvTIY}UURFl+N#uVE9ujJzPpaYzjQ&vNyV4hG*H7cZ17OVvvm zO+9k_O7A=0sW_;8(d%XBz$M*@3cEq=^j{UkFRNQHG!MU<+$ z@;huwowq9Bqe=wAK#N_;EU1p5Q%$*U7jnN2}Q{vAoPZ8rasGA!Q z4(9kcAZRI8A4cW4NB=H9N^3S%V({(sr&nKdK9^38u}+`wekdZoywtC>`GDHuNnneD z_E;JNb_ho@e~EOh;bJ?Vjq#2jkdYO%TRZkDm2(ZN`L)TZvR*On(tm&Y3Ewe zQW(!kjK?O=_C>kq^?;$KZ=H9?%`9p`eKiojeEG;v_-^{TiJl6o&o=yDzn zWRZEHO2xtP=a(i{BMj}tfAl3E-S>tIqoC5}q0udvyz=zpfwY{xum;N%)=WW)$(L!G z4ek=RFwS5&5o@a4s?7WN-ty<)%*E!HXm>vuykY?hOV6!fy`M?;@^$DGEM8vD`MpbN zcy6F^k!>J}f3s0B&)T|}VP+)Qz1h;TxHGK|4z=f7pGfd5o)j`w(rbJ+-SUw~SmdQ5 z-qPwC=%!16sr#j7Lz}w>*%u{?*HvHZmKTNw|56#Jc*fQ7sa#&(hOql06~+BW^TE$~ zqZI|>Jz22{lDxYco19Bdt!oFtTmi$0_}fcC3{48xZpWM~d*dEpV%NM#ibXM>-OP=b zbY}|W8J{mSN}xJ(IHk5LY<*ET78oCEThzK~9m>%2b;QgtK8;mXc5#y1I#Y9@GjX+< z1=A8_x%TFc4+m|4B;m2$;CT@y1n1q5*Cu{ zs2CW&M;wd+4C{Qauy!P}YPdsov$wZ474c_KgNp^}#_<4!1gadvBTl`hh5Y`qc{S=0#-GVft!b7?w#tcOf5u{Q-h3(bwr^kzA;5-nabJoz% z@KW8EClCE4w7X<(-@A9@D)k%8T~Owe1K;bi0GI_N+nM zB_UtWk6Ah)wN1=C6f~}u3yP0RR~yqfGs;soQxr`aEya9lDvYIMn(M^GI=Ve(yQe4< zX3ifA+?u_BBu8~ewDK`Yd&~j&gXNuUDc25NqA88Pw?KQ~o44&+PFKGuW znfuN!DT0tQz?cQ&pl^|)7a-e%v*BPCq`Au#5JkqmGfdE=@O!Y>`8QhkTlur=e{oDE zn70V??!{m|R=jd2V~c+N@w?3s!RmGKWlf3omzJ&%qW0LjZtdDF3)epr#aHI~e>e)j zCHOVgRB3)P#wqJzSPG%}Q$<_*~GD*AONnz6TN^*5`fvgL*p zZmCSu=;qI&Ag*~Hhi_r+#t&-+Ha5nAb5}6+i@Zns3u<LBYo*}8&8>D=k^sk3B$>+hEf zD&|xk1;*{4nvgbGn+rYC;Kk#kxpP)FR^-|5es>U>Fex#M8^YOKDj>7!Cn?sBC?`-; zY5AA&-_Wri`Ajl}BpVIw`itNz%KVyInsr zK|7*?Kucu>r`{n-QiUc-CmSVWHR14J=6eS-nIDQgP=C5M>Bv--=Jrv(X5Uz_Oxmtq z)1}FN89l9^{qEMcfrG{PV!lS)-I|73LnjlqpSytZ7jDM~b>-Ig{p_ zk1T|Xz!w^9E=fg{bM5EKyS&5f4ZWO5*Z4W5YzVXz zbtD%L2tpHF`bz4%;ZD5tscc`>>3z%@M>b#1rN~E?aNaqazK+a^YwYdG zC$A>12HCpz2Cps8)AUwpm`q;~-dx^~3E2{MQAkD5Q`5-wlL;_Q7*U>MlG&+sNuf@M zKEK#&(0uLQcvbsXptc5IJv&8D<{*{aPf;4r)pao@;`PaNarcMqZC7O$M_(pquNctw zJRF4Y_hR@_0_?woj7G+Yl2@|w=_LV$HCl6u50k}J)g5E+_#OQXOn0pab7rqR{6@Fb%qohla&`?Brjn`C%iR%zU2?^`)%3--x<}j? z6&qnMSub0h?;F%y$C@s8($jzAzw}G^QPkL5)=uYVRHwq0W%K9&7TX(0cr#GAdP+RU?V8qb7K8Ul z1>=nlRvU!49J*~SXeB&b`pFWLsLiK8t(_OcGN&`4qZ+<&4{+vp>s-h-v3rcc?fT_g zmr^gP+48}CK}c$la2OZ-i(z;kV)H-o2mZel>;{9YUl<1eNA*7tI`^N^_I>b@|4+B= ze*cP@3?d+hLLxTS> zNo>(E-9I68?M_IDKg7#6AO91){1x}Mj1gYc|2Ag$^<@|%BsNH#khuPA*ztlBQulM?3^6X)YJqjDk^}7mlsfZqMi*udvRLi zw3Caw+g5RLF(@xD2T{?{0P+gx=;#n{=OH0JjzdDcAe%#cAUz|wA^H8QJZxj%wihG^ zG!|JXDJgkXo~RjF+FE~c^YQ@iKKKF)y!H132M(CP&voCLn~vn?=M(W)R#t+L&`@CG zXum2WC!1q#ZTT}YDiV~ImV)~FdXNM8v~zY`gZHUHQWQOR?vDJl6Iep@GpRXTb)yL%55GwfZR*8Kea zfPh`uh3+x*zcw6chy9+}wz|iI0y5VPRpw$;k=e@pxeC=&%g?zXl2Mzy}HWIOOxT zdHBciuq}J^IkK4pFZEt|c=~vQz@R|j3T13zi=Q(zG5R(zFaWx`xD zOB?H1C@)p%D_4y4-n@=JeeSe4#Dsh;(gU(>G(NZO2({=K$sXAno5qXhMreF?c6Ne{ zj0~dgkqx|i_YU?w0cK`q!070Aq7IP!5h0m&whe&Th!XHIycl$K3<5Nsk^Q8nrxSTg zh^_?DAp}ra-a_ymi7q5 zhQ>7V#e zA7Jlbk94vEu^onlWQ_d!wm(Ai92&FCm#<&HaZ~oD)>|{v7KDFvbd>lE^c*CQz`#Jz z+0hO1KGlJgcmha{D+S5%r64r{@&osiVoQjW_^|{aN{A``lb;eIKZqxyej-aj?xz}1 zT3iDPavI>d3J@D!4w7POz?ZH;5Dn)yL`Yspw{~`Rz}DGe0b&${g#0b^|jqlE(1j0@wui0 zq$ihwv?RjcTjD;{M|=^8i^&F&;VIBRegyB{2ZIm(;UFY90YrsofR9l*P%p)hN{Kdw z>S=&(Ex5e(mq-P}iy1LIqLSr1-&z7~F?Kj=m`W_HB@n@ zm?o#D5Pc5v-xK50pt7tTd`hhXnJJZ!DnLd``JYq<+cJ=u`bQfdn+?3)!THnGsmI>M zIm*Gs3Gd+StY+`*e9_Lu@s6FVvmyNKJ)CFro!#Bmf`ei~d`uyTi!OxNb3k}-1_%jA z29aTDpt!IK)YUeFin7ljH8~&hoCe23HIc6fs1qwY+b<9=8mGvYBK&A9Fv0lIyQGW& zzVv({j$7p8dwTjoO(o)?5`0RlfOyOQXw%9;R(b_UPRxgKP{1a{m~G?Wa1}mh+b6@_ zf4bq|{KRJGaW76nqB4zwP%~4Bi^~*LWV2IC+HP>=_GF7$iI7v<*W0%Sihz5{X!a+lz}$bSBY-|+35z_#{w z&{W?8sw>(+1)&L)7JUX8sci{e*tw3IGF)>a|Nl5`kMMWSM&Oy-j zfc#x~X?WjX@iUv_t-`yydO%JllrO}al8_G)<8welY!;+Xa6b#=o7C#vl8V!9X^aBn~z}D6txVpH5 z_}FBSm6;EDDFFrfB_K2+4BWnV8`&(H1GdNSep^TT_@bgx7ze=EprjTgLA+5B$sih0 zWD-b9`~*H_<^d;n*9~@dc5QgC6r^L2kS{~eLUx4oiEIgBL|C^89V0^hZDS|KiSQWd zQBF%wr#3h^41A1<1Mco#FgAtc>P@sK54ZQg+anM}geHKG@o_-mzJesY2gUfPFC@FY zX4aMoaWD=uMW7L|7aM35o`x!7S7rp-vt0)8KYfbY9N;Oi3z z-oFb50e+DnHYOe9=fHUf&I^jliYOjMeQoQK&dSy%Jr?qY@(eUqYHRBN(&u~MAmINY z1f-{B!MQQ_kGRXj4P3o>JqX@^8uLbi$IvrPyy;t%0QxjG-D(~z$2 zXJUF`Vqx|jjZI?TIdD#hjE8cI0wICXAR#V;IF9r43qWB}A)I4e`rvol9fbEHSs?u) zox(58cP;n?EZ<4x*#tfxDYG@NoBme&GYmPclJ%UI8&yM7aveC6yjON{9C< zLb?n|1QOzd7ZNulG&WGIg79)dIt1w`BqVbrzgx#ooG`P%Tm1+M4kE_d2!9#$mx=M| zASMdgZ8DVQAGr?75pr^K0N&BA7T$~Gfpm<<6j2B7{r$4jQnQFy9qj)YKX!JGFeZ0} zJa|F-PlaRX5BvoM1;l*I&C>(u=<7A}3kX=i=OBB!21x=Eic^q$PyN{<-cSxI4M~=s zo?cx+@opT|YA=dh|>bCpI*+!g)6v&W%|hIUyU4-4c+Qkwg3}A6{ec?AQyR zfn<;5jy9qW+`K*U2?;4g--U7r6BAQlZDj+T99@Wdh>DDb{ge~szugzg;k{sf0pkVm z#`JC9&08`-u%@C7pLrh=;s@E+9Z2_J{-Jj2%qje{moEs=S1f;k`8pbFDA(V{kLIZ6 z#&(eXsR;UMNa@8OGra`lW>tW~ylPNfTm?P^1!1%S_?xUy4vgj(l)HMsIMLqGf#{!6Z3Na#Cg7a- z1=dxDt?g|Wpxl6yn+tIcMfnQKck1fu{saD&=609^HG`spN>Gqn4)Sv=;h3$0b7mEs z^D9A476H8Te_sqSBfo=iZ*L@z9zCKnx3W@z^|AM!@4Sh!LGeRiKq&Bsb4y5YB$P!i zXomh3$qDIt8$XJx0|EkwaW9G;gM))%-W&u1;6AERAUz?Sq1sh#Z7mV|KjQ!Vxe?~a zLom0jC;IP_q8ixN!8x=R6y{e#ssaf~>A=~|?Ii?_WdB$E+v9-35|7t-=l6l=gYxo< zKv)Q@ZG?RUG0}<87o>yovKr9V+WBANNBn$*`4hs8;$UPaX#V`q@PGc?K+N~+>smlf zRU?sy%JK%7NBRT*0RLr2H`g{7PxmGm-`DHw>mwibSM1w5Ao5`6>|hZV83D3B<$;e7 z^T+5U5FeKYQj$JFADRbsSPb!ZL+T*bAdvn1qx}CJ{3th?p8f$k+Pgs`9J`-k>|9;h z0I3n?_8(Aw{2c;Bei+RkXw0JV`p@vg(-_Xt&Dkg_CKjZnWWzZt8)QJt*`JD`4MHE0 zR{?X3YEVx24D;XtVqT8?Evi5L)qegJ{B7+WV0!8YtYyrCzTN@Q-qru1_y^g@7F$jY3+-AKg$As`U>XPti)`!)|SPeS=68s}tI zHa7QBPG3{q1R6efLK|&^&qreo$q4cRZM6#8ETS6NZ(~Cn=<4i&{$vo!7Gdil+IM?< z7pyUUCCYoCe-QFKM3g_;Z*J-UL7^dS#+GJxp#KenzIM(N*2~~Jg3&gn|BDvsi^Rs! z@$tvl1UR?!fX4bRP+!+U#GjK>Oq}1*SgVG9qq+)?J4lF!n(77^1HzhCT{E=l7SIfR zJMvqo{(|`V+S5zaQ9qPD(p7hNFTy{2<;oQ_w~}gVYVNdmu}5?Ee|xica=PN}>${d; z0Oy^CFQBxf26)4o0F+aPy^CXWQBgTj7YO$@{_3iFXv1)f)HV|FH#N4x@d@*z#x~#= z7zDy1qCjg4v@gg9qAy>*f=^kw0QRK@0sl*O{_ikm=i+h%>aya!e;{ylbD6Yrbd-np zlff9qG&i^CPyEoHpdPZa^3gTFT)jNkt19c@`1nHy2zw5Uq2PS1gSW@ufY*%G)in}r zt)!$JjngGqtI+#*aQ&Ot;vC$ZA2~QUY|kM$SPyW{hB0qVRWosX5K602jx+Yk*qFt} z$^Kz*SOm18rayUT28l^2&>z~Myn)2t-kuZ6q|@2m^%wLPPL9xT{F`|G+m}1Kz)0H5 z6XtbMAUX9D2!Q_6&e{19d@ynBIJh`>6G|&#TwVuj36;PH)@$ut>`=}_++clr7p(iE zeBuAM4e##0&&k#43S3Vyf&6&=6$sRq5|nWbY?EN?34O8w^ld0d``_(6E)NhL1%(m0_+U6s84GQgO?Gr^bOR)2zLdwFtdZV{k??| z$PhY)EdjOAEB%KSp29;y8=m+VwY!Lq!ebJ|E?`US@-OY5=XVjiCSat*E(w3$Pi$d7 zL+E(B{R*L^=Myq(6j!X4PB4=MbAOcLpcuWj|sl(!g~=0QV$+0tKPYH2h|XG z;Cl%Iw{G9M32T+8zQYD-yWWQIBHY_p;O>99ZS#!s5i}2=KG|gD<*!pvP#oW}W5*dd zPi%Smz;*F=K5)IlW)!Xk-_+LEO@TEM0M|fPENyK%6dx)+g7w&HW0!Lxb{jRL666bA|OrohEx{r;RLFpF;H# zS6IKhB`dn3Rwx;?Yp-hz*q&K`ZOYU zxXupavCa1|e@FeJ^=E%rSFnNWe<(*pc&e+bfjg{Q!FNUAT9MNls++)jwoEL{GvWJ5 z-0-4y5m0ataEU z;I%VoeIDr<#*AxUzkVgw7f}Cby}hli9gKV%Bj%Q<#)HnG_Y2UP+T`Rkag7beYQ%L3 zw7!epd4RG2>KacXVI98?^#S`rGDf=CmOHXFCb)*zRYE8wu7{yICgK&XHBO9A5!Y!D z|0usG&ToQiycJ*=uAw763=fUMHS|W1nOqCk)H?v`AISvO&X5eydnCU9PkYxI6lZmY zp<)xwSQDc&wzbnlV|Ciej2&aFHkrm|ytO)+&b0op<4ilPnvR-iyeFCf0Rqc4yAUAU zugm?u+zHE)015X%4EKd45J*CVWp~+yWlx{yz(xeL*qOF}dS>2y-+tdY?|bf-=XpPZ zGl5d2q)$!%wr$%Uf<1W_SrWY-T4N{*b^4tZMoWH>qByeysMDzm`-QZiD>my*jS-&-a5(&B=8QCZpu z9|Q1caXQh~+#|6fiARF3_5|Pl*1>nU59FBO{IK!EPd-v6r>205ZWcFgOo)zlmURfW z`*9BHMmZNaUGln=?DQ&;mQo@T6Y@lST#iUi(1`Suimy2Jq-v28Un%p(GZt|m_L0)k zGK|jvw!zhd@4tT(wmBy6arg4$?a){>Qp4pl!flTUVD*dwczUMvvzmQA<9Pc1$DbcLd{Px=CvO-SfU)eY0A{ELZdW9+^|<&r zj!7Hhvi$cc!^6fpJ9~kF)uY@s;HOH^w-)g6sF(!t=G$+vzmWgnI9)z>;gJkW$MTQR z$4-Su#sZ^_#vJ4g-X;R=UnMFlw3sW)a8^>yA{Fi56B-dd(Tp>=4!pQJ1^qq_{}E$+ z1~B4ko^>7D9@+M1#N(3A`eL8ue8qfl-lXuJ&-jjU9^Jlu`(JT-1J0Kxf`e4R=}(H_ zz%cMd@e*r|j*q2%j={T77e?|M^lhxH&;e79K^{_ZUoA211BVVaxVgFgmUAAdf({K)BXZc+Y1$us`?{ z_=Zc$P}L$fjQ=PqMK<__TO~ zt5J!wwddsA#kx_#*9h2x@o#Uwk^jrbAK$-W!-nUP{x=lf?|Aabx4>U$zyX<}!5MJw zB(B~D%&;&Y9CJ3Y)@t+tEx4{TLJ=I;gtW39QT`hIc?fV58NkHjW%-pS;rpaLi$0-~ z+!^ODxdy_oi|ZNMj6NSz6yC!J72`TywqbpJz2qsGhcAHrRg~4DZnr&Ka$kH;{GEPt zoIhxv>oIXlVt4fSAl}RVTu@Lhl2bF5UyE!OIs*td+Q$ zb3Jg{ciQH2u7OMK)9-2oIB5^?MdJPqz$Wv76=Ux*d+fM}ucxn%=i$SLzlNt^4*h#v zLZZa*$)%Ims0PoWt8N6YN574$SeNRhFCg=75zU=p$M^^;wFYbb05Bz;So2kZEos7odCn_14cVAgnI7By59?&vs>bwv`ryaj=tH2HL5ER`(>c!v0sMYd{}sMV+*P zi%4O4YocOeCEuX|=8k$C_X+g**_w`<@td$a06DnE`d(&v<d;Kxel;_tFU7ov*LU-iM4$YXEZJL6z*6XC@u?v3&OfV#6rxw z854rwz8KGW)#5kgw!wwi>!5od^*i>s91}Hni>1N2p?J)NMz-Kz7ni?qRsP=xmYe&k z_0PZf!UO+!=k1p_ZQ8U2zqftv;aP=w^4ha6JkRz2fhTtE-1_26zyAs2Lfjxs`%QuG zI1h0@`7q?M!$*%+o$&Xc{qU1dbvt(MJmjPBx2cqgbFc5;pZ(05VJ@4Eip-f$P0(Sk z^0RqE;!c-ip7OJAx@QyPbAQEV`7wkxRx8VT%#VX7{1rBLZ|}26JH_)>ab5?`YW1Qp z^Pp8$&UAGdIQDW; zTiGiHdajG>IXl*%}B+-dSd3M=L#*3oK#?Q;j- zABu`jG1pdM-Rih1Y&JXAOTD8|Q)Uj0h_IfHjkT7PRap!}V-DlgjL??%h@8|`5p%i_ zz8(Rkt0{)gjm$Uf&tdJbXJ=K+;SX<%sVNIM>THW&U?8!aS0E2A$}7GBfz8Dwl~%LK zD$bO2iMVJD^!rcXc?;}hARhPHGT{EM69N8~s`5tB+%PEGn})^YmllzbtTyAh0+Cj0 zD_69WqM)dBX2dWlin1@_><%BQ*m9P`2A$-tZw36`g)&&0FZ7EM!B3Yd=jpy{! z`qscWIk`oqOBY8)MM)dmm}?Gwx^4x(z<|-*{NmY;jsY>ydqZ5iY83ts4fuZjAa0r*K(+5Lk<%)S8uxy~fu9CNX6HiPf7j~H%#XZ=Ac9vo+OELUOvX5BYCz)(b^YkO}SXiL_gn z=yyZit78+BEH`hM#n{Lce8M^$DA&JiU-p4oU9+RBb4>JhT@~od7U+aTL|9eeL-n59RNelcc(@~G#(m(MIejMhj$dA77hPZ-$*V5D@kcKvhH_L$gyOGz7 zfRKj*H!n=_#uiM_=RIR9;!b zx#tjcaTUAO_m}F%`=28J*5TnXQBzxI)$51nsbdOb*^0SsW@c83#cY#0O|Y-mU%?(5 z{ks1Oxa>f~Qhm$sq5n>lu^(;C@*P6G*k>`nS)tc#o)N~$899IQo^$Esm(%DkffJBY z_#Ij?{<&vfYq$gbb#8oof@fL_>cuoYZ4m={!#w+OT4vVF=;(F9Hlsq8o%vgQew zHDGMZ{)Rr`dHzE4Tv%iTe{aV-wJIXq#(wb~bbc)=^lXI4eunE-&Lhz09QST`wi|M5 z9{yV5|I!canZSu1a~TADK8R&=64wR6UoFMd?0(eMMJsM|ahHPMg1;A^;T_{l0=5}k z6o<<`sn7A;F>*$7!RJ8O0&(uc_N>}_R~8s`vkz@O3Hf;O?d^E>24v65*ejo)ubxRv z0hS-2FeA-wv~hVzsM3rz)Uq_eM@ZE4{bU55C7gx!e(_&jE2WpQlJL`FxMOW+5I z^fTX(eh>H>OL}I80OnzYZ9BOG@(Pr?x;lyZBOmY&^z(qu4A?jVUC#ZM8|)7kYKkOQ zZ7>)xuFN?5^Lw!&_>Y<7mEXoCBqz2g<>gWppUM~R7#v%ntr9Ikk;!Tn5BY|J$COnbl*xrV+>-3+{kzG=N)FY^c6 zc07~w9PFA3iV7u8!*4z7p#wVg3n{<)m(TdEDtQ+8E}8ioI(`Rv665?l#-EAbv1sA% zig&|brChk3cw?iSIAq~ho{_p=CFaUs$+W^1^ZA~QtJSsfYqX<-#<#qqv z{r8K5g*v?UD78Z!u)S0?6tL&eiJp?sdt&s7qAor2QZV+?bG7sGweqk9D5=Y%9z*YA z>p?H@QqVoTa1Heq94|LbCDa`O)N6n$oE?NZVA#uO$N&Jfarj6p)OUdcRODs!{j&bH zVkXlVrLz2#tm~?oe5Jl1Y45wb0%M_GI{I$gGR$U8Z5#iGf58Ro4~2k$ewqHz(9q|e zA@w))TulVQ*H97uZ;VV#-}pb}JKJWTe<9OXXp8n+X}vZ_y2@XypyANNKar;L(8B>} zHH81a<3QKdWX?Tvk7Ide*|{=IPcXvA@qB?&O91-&2EAgI zvSTs)zc)Slb}`^j+iV2+WS@`nJ^bGH#^&|4M4+Li)1>#qev2N50eDGpD5EidL`<(R z0i3K5Xl>k<{P#~cpo%0L#U?jDF_Y-q>2mlODbFd}?Jp&tSYG{m&j5Tf#+{of-Q7^` z>(gGy(20G?K5p=_9MR3!3eSVb|9;>z{b!pG&g=i18MD4vWo>ehj90?-&PHqo>mv zx4~V}(urZcbGMVFiDhjm&~a|ND$4!W~MOTjI`JdXJ3RbKmIdh8*|VV4|_l0`?g8quE7T;QQo} zFRxg&!$U3TrJo}s!aIvA7oul^+NZB2;eSvnNUx}2xB5;Sy`m|9##!B({ms*potb;- zuRT;K<{&@?c7NzRpCjR~>$X3|E*^YaFU><%PZ7%T#IVZTzJ3|jaQlGG`>G}g==oF~ ze#~de!uTL0vZOACXi_g6RVe5jf^N;aKEMCV*Sn%VInN<6^f+TE9&o`%`^qOe76g7N z>c0M7nv*R0{jUNosUiqxKIKa7EhWZ(A4%{N!DCBvrHDLu*Az~YNSZFaL#CG@#4gA& z^tVeXHvLN_X|a{d%B0zgYcP_HR@_V3?dHVl*Ha7hG4NR5qtrGFaeXJ?29aX4H*50d zQUJ&D3guzjB$nk1KmBfCUVA(a=dqPu`xh!A>s^Hr!abjx>k-ag&G8-q~R&Kc<9Dhv|qj`IxX5xsrvi`>H~9Umj< z%#;hP3-T{7x7#RB^UP&l#&faqXkkPF2k1mh`f>!e`QG`^DbZO=jQUO5#oxB@utkag zi8dOao>o{|TAEs%kasj0NKXAMzxRh7>1zIx6Bvry2?$*s*rC{)4c{0&HoccXOP552 zMH5=4Zuf>_REpC~K>FQDZrF`m;TlaPvy{3sF=!KQK>CMPDz^v;z&?wx^>L-x=JK$P zT_>`d06H@T($UjndJ4#`tc;moSioeqRY=aF&>GmoWdzh4qJ2d-c>dadiQx8Nz7k3Z z9D2zG>3AKY;h4Rq7^U{IJ(RFk_}O}n^?Hu&dXAU|tLC>}a2|1cK}Aft)1mBb!uV4v zDmoI6OQH)sS4cJS+4q(sKE~Qn8<9@EQAw?sn3$=#!rZblm9fP|b@sgv$?-It{Ud{g zv9W|{DFA#RT3%b*@^161umAheXr%OdS|1G#W4*k`X?^W1Ie&#e z>t3YmbrIpkm;;uHVP1d4#4fC7=JXhTMk3n5QE#1`FulFKWgT)SEM)jj6UZ_Os+XIiEy{Bv?r zj?ACvneT=o>tW9Hv^Y_VcYBPFT0EIbwzjtV1_sQfRaF$L%JB&)iV3w=WaOlpI<;&1 zriNUpp>JtRl_G?C2|IF(@1LNhoBy*O7K=icesniKbcyL%#L1>fto`>(?r?5{*3e{=jUtN$7OQSD<{ z&5tM!PR_FYeA#7S%hJoJXu^V;eqy{hG{TPx08ZeHjGSDUhqI-`_4?rLsFMHbv03mV z`u~;Wmr%f)k(O=oed|f6^Ai=}pb?Pl&tUlNP4vo`w$h#n`?|Z{Uw%AHwuXwAe9UK}w5Sb2v>Rav;P?n+W`! zJtSguR{$&ag|U{e)-y9o4K5rGHu0CCvYlbOmd3o{-{{>$Y2GkP1K9g8ZMm@|(e^9b zu7N{R|D5mrF#QT0rU*_RLl+@oTlO*?i$!BPq6UySNy5f16icG}X5gr_Fn|Thom5%; zJ)*q4qF-k#7msCEvrSXc5bNtzs9$LakQeB;Ia`pl%T+@I?G5a7T(9 zn>nA<9xSPbS_|?vSYvh6oJhAeZFR-W2yb4ubXDP?Tc|lYmL*_@T7)?8Jtzsdfgcl3 z`3k0lyS^l%o%|;QbQX87E#Y_^YBcsY(R~o!7lTM{7|jia-<+!Ok)=J?_`vS|)th`6 zf1->fz$`G6`0Aj#-7aX$d1g)Xfu~scK_GOJq!K_#OJ{90#)X#q^XKas5=z>`L$(QY zPKS&mCe^gr`DCB1{mXNgkcTi&ER?TSg^D=FWYYxRs8@;KOnJ5i^lGWbl%&5`=KHl4 zq&BSV{uGpo#*YiTTUgNyMeejFJuZqO41l?bkAfgpO{C|8_W9B-k+U4nw-0r6o8S$_ha^0N7LZjQCri{nE0#u5ogn7& zVhEo{^94pM@5}3r?E6m|j$Hd{JB7ZL&|V-02Ath53>rE9b>+uh7?F0;;ICPFLLt#P z8s|51=S&DY2fz5KH1MWU=+hu{gXt7~LmhPmX3S(rvYZ&gBsnEXaqsg0qwzP-$+Dl{ z-cx1lmzFfDsX}G^ApJ!2A8?_eA$dR!cFr%Qj%*WQJ6dkl55vV?iVqXm>lM=bm%)bM zolms?(mpFkcQn;sx;Nlt5dmd3q>xVI|vqY6qz zC>IpxxVBV>&R3W_@x*r2Co4IcfB5_tQ1(fAUcNlc%fr;{JHbbrGF` zA<++g6k61(`{ocm?7lGga{`DZ$l5bZ6t4i$56D587i=g8O}W|Fj2n-KFtmk=J_X>d z7ZK8PiiGWFzGa@URD_Zf%Xcx!>Fb&@j%f0{4<7Z0K)a(F5o0e82kf8Krs!;QKgF{i zL_5dlM%Ae42dl$~Sm@;P<4ITI2W(b|w?;}Ko)biIGt$Ju!1~!6rM`%ke%Hdwji9Mp zdT4&^4IT*_^U{ZCd5)KyxmP2?;+^tF{ji}JWN1NTkI2}cC7Dr)$50Vn5l#79kc9`k zDy_rK$`^xE2#2Zu*oIY5?ZrfQBE$reakKyh09e<#K$M+1z zz1it+5kvSRs(ShsYrE~(6r7zH9hH-kc}vacO4&)c4(YUFJWKRIX) z-`jdC5EO|kT-m4mIFSgV4DwMDOOhIjxk;M5t$k+-aXo5D0_)Vb$wI?#@DkZ2)nuAl z-zzFcO7_Fv55R7s(BygJk(>CZJWbBoUeai%39KRI%Aza@QZd%pUqSNh#634Q2>!Z* z`gt^_0lWV=U#Q4Bg!;>Uh&{wlMfk@<5%XiMwGw;G0QS0)hUHPFW3ZMd%)=C-7F5Vp zUtGxT;?f~t9B)B_3vLuAY1q)cSD$jK9*g`C;js4x~$#^@8$ zN_C@cm&%I}f06Dd3Ei2`d?!qb7E;>5)rAUop}AysX*w0@^|63=PYKSqXWI48HonGv zeMP*;TA5Qid)xL3A&smXrHvO8!K9pNXcm_jMAZfm)C~cn+;j4)9!Y0a zNa|)C&fqiN*$!&np(y0F#0kCYU+4r%3?@F-c3vfhHjpVyJS&Lfl%N56^tPONy&a3}Ev$3?z`oS$z(F z!;YgyrcEmu(7i__%HD+MCNFiDUsm8gA5n_I%lB{LL33@RjuGDSZd_E9Y+WjZm2E0z z(H06#-s<5WBCL;`8rq(ol2=wU!@iU5(nlXDMhecuhS&kUgfU~QCxESIWXfXv9(39p z+Io822;!I+Vzl9)Ck_Q8BZT{Vd&LhAQovZXlQjAj>1~n@P=``TM)TXfx6W?ugI|}i zpOK;@(6`e2s8LQCh-&?ycA4@D)Q=+|f!j;!vu_X!jYC?OepwK5vSKP^=%)a?2v+UY>EHS$a9ke|=9Pd^h-eu&|TZpSaZLYZ$S^TQW63 z8=U3A^PNm=P|or)-Chp70KQHpu|}irkzw(0d7y{}Xu^E7yliVWMl}V+Xv=JmOU0WN z2O{G}Bj+|a8|1y@q6=DXm6wY1?e$Oa2JVXzLD??Ep8R>OpMB0WN-u@FM}Hv!7s%}-N~dv3PuhV^&q zs(7b65cgKXVYTUK^St~LpMNnbrzD@vj1eQ?485x$OkYRmhy=|iu;_v|`opI}bnNT# zUp4fO@+41bIj)N)EM5}mE1Kv1VyYUW|DB%Ww{22jZ{U2n{J$E&z9$CQJ+GnczN>CU zQ0yNbFdV88oagZq&HEgQBkDIrgs(46AdQKYTGOZu;0t2Gd-<1it#}PW`Ft6 z{2Zlz7W`#;n1de6A58;*AAq4;c6oK43!H*v+my+^7a1PdNx3mSduFdzVx9ZrCmbvC zZmA#Dbjvdp$k|kv=eoQSnT%aBbDUj1thWc_htMnF*x1@@*G;lVJ>aV9TWV)iFmkwU z_FL6r@MeywshoW>Jg)r&M5+8+4SSO3qVRBMNp^zpvKDthc2(Oi!Q&v=pMAyPM5C!R z;fBVhB6mVD#E@K|#lNulVhZVpBo;iOuoZpFxro_O$_R*{JRNXn#PIn>JlE=r9sVBc zbUfF1K2HUE{ktKHf25%N-hn+shZ0a86Du-;je{k%>c>@p>nKCdzN8NysuEGB5H6w` zc9|@+wNdS*{5Be)6k+RT=luF74yMljnq(v5re=)vG|W?wt&0|_%v<5fM)6yXNm>lhRMyi^eIMe=I>U?n z^}8KhT+isiLBJ?H=cTp}-;d{I$7>TNU^UIf^V}S8B)}NBzu0*jffa!2+|^&amvaeO z4yi*!B`(UjWXgaXClP|)*R)a|^1ofC_auoiB8fmG!;{lX3fz_4Hol^Mb-k((WST|b zm+h5%&c-}iGvB}QEVKb8}`b zYDiO=8Fzgb)>bo1^80&wY}ADK!%Wj;lE){$g}I&2 z;1&<1`e6X+Vk(KLG0idEF~i+`JwuD%FPtvu!P*8J>4vPJdMIYj+IZVw-uSJ>@V#Nm z&G1I|@dR;uqgwyU>`K>mK(+qa+F!!NyQ<6cB~(>{MB}hMLpNw3$3nA|{u&<|islaJ z#Ovs0MBXnEfd$pB4S?X06=RficK@Wa64;$-30Mj+if!Tm5W6a>aIBB+(-U2^bzx+0 zr?PyWD|idbGFMYmD-^cSdN|)1#cwJZ956D@I+(b{J3WlphRS);8k~&wuykuH-^k2U z|4j2a`ZJJ2t7S{hJk>n|po+Q@ZGgJM8nY&K{)q5Sv97&xu*boU<~iTq^!$8hd(_S2 zPSRda!j{jk=nE;4eb5OB;0|e!-X#Z*Q z&%aNA#CB#`Ywm#NEkjx(xa49h6e@{FAN;Gv+mt}4)>2xhK7@@u-l%A z4a8k7`!IQ~lwAsVPVBWs(q-r`cWOc1#mw+(^AY5SUx`t*sCA@LVKdQm5Pj32 zSnfQ7w0QK|^_$pZA^=aq)~}?M({v31j~J_jgU?oZ{74Djip&r+j_eRXjWGaOFlB*o zMBIpg=r!Zd)a)-@148s1QPJ8KHtMD74~SU|OD#>06oP_VurABk^#U))EjqF<2{m)H-XxD9QwH)FRP2u>PieH{bY819B6G)rUu z(SboeGc&9WQ04L~pkL=1<_-F?{K~Xzm3=l$XZ=3?qo*!8Ad(yiZ}S=EPQi2z^1p|@ zxm?EWc%I7B0Xk8cN9QRbd-gmJ}aL9i&)c%PE z3CTvLZ$(}#lx-g~nN=&=A9b}5X+5G4+BN(#K9@c#J=q+w=(P{foe9n=-P?P|sJNFB zH4Z1f@g@X^pWg;Yw#;C2d`6~BOMezcZ$PtjD}>O*67dKkHH}PKebIO$w(w7|e5ay%zN1mQ7E{J8|dLz@et>(P)qOhEQBZamo#Fg*SOh(`5BNT6#W`t7iRt|^NY z;QfOenKY|u(W;F$2E6;>)%***vAHQ}@5`wBSKSA3b1=YmNuxynE6n3_#Rs3>_B%f?H0QKUBaNbReQzh{Sxhwv2wwEQJ#5oXQ>wD5 zIuXJwwOYz<&tOA>sn9}&FO{P6!ug~jA~T{H_Fo|lMd2+E9KX1Z*wG>8R6 z-CJiv45t15g2es?oE4P7!dsnHHN>^^c2u_=4U_z-%F1Un!9Ti_k>Mwv>g#P1mI9QM zDe+mmj8dJ2_9NL8pUUc5hNlKfM6UY=AeynJnA6@VvO$=5h>(clfP!OhR5~Jsqq+uo zwcFbko}XWWdD?GH0}h893#Z6TprwijQ=cD84du$q3m;M`J_+Trg0X@aBcU898Rk$6 z$>EYKlON&Xu4;b3VwVoFh5sUd`?(wkV1GuW zYm`9ol@1k01_c>KA%l&UugKfWBKS3}( zscJzO1{}0rvomt22Fw>U2#GJ`!!i3XxDnt-WT?YXnb*34hSbnKg^({O{FS*287av6 zd#_r_-b1e11m*qZia9dGMm5`$OR7UbjmlqWf{YKlZL(?Jf~X6{0eWs)kw$PR9<_ z8N||Z>RMm?l<~mz=bP$bgWBs0{88$+kB)6347a1w&U8}nbJ>UUGul)0@#Vpxft|9; zz7G&R*OCmZS3-@`PFe5`SwPVrtd(+@<5qlwQeweiXqAg z>ZP<7R&(bSv4t9Dnizqm_?8gu`0?wYKl}Gj;jE}0R6RswF^8Y-P2s$HKDGnhM>Ixm z#2Uc)ZCQ>ktHq1QXp!Ar5?6nXR;xRwRUZ4*mS+cGR#vc55UraZuXV%xF;++ISMQ2ZpCH6EtbnX;yVcdrvBJIidP!|?W~5`Dgk}JE zvj1M%BcOczx*HiD=Pbn{hWVc^Q&s zEg9nF6LfUyy?RswR@anvm6kKZ_JJkbS&eS%4`tJVI}1-xzLB{)d_jGvC>Q!95n8{g zl#M*;k9VE)ZjD|D-Q#g-O22tt7lTDR?QLL34LubMZijuN98z0sb7G}zy~S#76-Vr6 zN_^ni+^GYPP0vbcLVw0x>1n}OZEemH*jO{q&d=H65)SjN!+aU0o?;fyOvqlQL z{1u;AXHVblEc`>FGHWPp2=a~KsmQ39f=2kvfXHWev*#0eE`#AC5;y0SzRR}t1LGGP zx9m_68zmO%1RN#ed;C6N`q^?;5T3*bBEg1fofXSQYQ(Ai1#W-;P_8otfF7o!^E4$j zRrQp7q8c9$pDm;^EH0I+XyN!F1su9+UU5Cz_!QN83$IC7H@kcdT8=kG0bn==p1YgY zrI*1pjRv#Eht7jV7aMxw=QMd!Pr8UH;WQ7AS)13lOp00K-XOmVoksS)ef%95WH^`` zArnL%#uWT+GZFz=(B7~E<{F6puHuuBr=;$kt*S1_n5TMZR8>{i%p(Hd+T^b>bZ8hJ z=eRPVGJtca$Tzq5_ae@Rg~h0{ zAChub_FSL)2(0G{)QnfOR9nlk=AcUEjD>?fS~%6296fyZvonwljUK`UC!qk;0RG0R zvPi)c(IF*GIsrIuh&k7;Iz~^oLYx_(#~GL`#tr9a!GTBg22hTKDsu16j!jN#-1AEX z!KpGc3McE1S}>?S4iW!XkO|1XiU(qPRyl9TB<4yfgjo3ig~1H|;I3Z?1&m#7$nEoS zoKMtEu=4v82^jLdvkJ;NWsPqC#@-{vARP7$!krC6*s9zM1rQKkBQ`fDor1ZW0~RFv z!MuxV6|UI`#m?F=OSdjM_YM8JK+MiBnkIPt~azvCf*S{U+H*NJ{u3W0gm~l0gd*$O= zWc(fP<463tsp^CoXNU2Kgf&xqfZXeXjrHiZNso%_;YRX*eru&iW#^Zb=KFVkPZ4@C zf^Nc>J~=c{@-`UK>%#C%nz^lhOV*xFaMv=OY($-E(5O1G99%Fv+kT%hFP<6fb4K|T zBJ_B<8F{62*nO6w=D3xy<&66^*PGgK{5HnPVI%dj-gZH8{<|kBX5`<3`e-u85j+rJ zTc{K50JKZWP~+33Sa3|9PA4JvpZv8fpEj2q+d@bEWHNlMG^zNr<{3K93gYciAa!GS zMxZf(#5R6JB4@&WXS9jREBDH>%{?_2!uFC|_~NFbI-yo3=S$Es+_*g(c`qkP_LNq$ z79Qa8{=s27%uVj@cK&&~GtM}M@4V&1O4<*G#$~e5Q zSU-83du)#4s+^KhlE2J=v4Sw^0at%ln7QZqz8W|I>8adC(TVoknMg9*tS_Z*zoQzm zp%;D|bIw?m-3G6Hrl&6kzHO0_Qmch4gntY>x)4PGUyS>q@PDn@aANo$*stl-gY#1? z+7VrI(IeiY!1M2wUV~qJGpYj5uPXU3pBr||R~PgV-5qWU$SG-6U?Z?20?LvriPW)2 zhK7=H0EuuntrXx_TN1RdRb`0|02V67bAZ3`i)8~P;EH7$s&{@N4eP1* zq5zmsCMON{6`_R@=L+DK)|Tni2L~#(r~xdq<%q#VVfGESB%_aFy^Os@(ctd^;1Sz@ zRT&oe1SaBf(WJgTxUDj&>TK-5YExc@23X^eL;#bo0zA+BHD@oS-r@84z4rYn(`Pgy zeqSxgam8}i*${}`%(At4zKxtr0*wP`l5};Gm^af>zOZk@WEfU5*BLc%#@?l46h;6T zh_i#&6bkHpDso02<0y09LP1LH!iu6B8ol1A%o30@LjF&fP>q4`zP}ykcAM?@*@5hv zt1`>!JyqkDJ;wJ-X++O0gx3`rqIH9SL|0*Ri>((ILFsZaLQRc^8`{S5ZOh!NP41 z)b7lzkH?g@fL4iC|GxQI&WZv-th87mAx%xk8$T-Nd*6x&d8x+&_55Z0vc!W!QCYHh zb5j7l>Ok{>4rrRQayQmhe^OSmS9!f$;7u*8YwRb={DMVS(XRLgNbg)xQDI}6#ED-M zEP)L`e=Xv&WOwn`NAnF&;mwBpbnZZLeav0k^qs#js&*^JgIbR6s!NG1x-A6Z*;Nt| z6cS>G6B7gJH-4$U?gJFoy!+FpvVYUCY2>CZv7~4U%eqlWqH7Enek~dNCBHSe0pr9I zhg}w4?=7tHDQOg^@=Hv_W~2f!8OdMw(S!kCR7*IQ zB!KVXl9CmdhE)PimD5tRp)xPS-(ybB&}KRgekX8dx9R^Y!HwX1Lp>ejhV#z{r*EaA z7j&t-^mUw+3bNL8w7rmpXMfnZ(Ecb95vcJI;Yj^amx95)cL#{3rVJ)gEVaJ^O;ycD zSOL4WeS5>c%LOrCPm}cY5DvCGcV9RSGmdun?gy$*K#$0c+tHtwBQ5_DRK{1{n~A1A zy1HTM^O+_9N_I@(35tx>g}(BPMm=U&W8J3Hq|V?K!;h+7F~*;X{B@HE`)lRsfQ6Ca z`V?-!iz+X#?=koQvUAapuTl&@pRul>`WnP!l54YUAZhr0G^z;c{FKJ^xV%n zlzD$WR(|fz?w^5RlNPL5O1iIO7|b0y6GTk3fS@lBSXi=s)V!hheTK((aKLle+{sn; zB)C*5$M2)+;9z%M^d?DqI*t&-ICic5<@425Cg~tuu0x__jliqp!Y_f}Cw(Z;hyj_6 z?{ZK2wad05uOyF107`q$3o2TcSXozW{wo|yL)+WiFciShburpMa*-zeupS9LifsSB zm)QEQ<>1}UV&96WJ!8(HRj{QhQ!m>bs_{n!0hXJQtEctAqz}H!hB0 z3vf~h55P{E4cB->7TCGkKVCpa;}H+NT$QtPqN)#Q$Hsu~$hD8}TG?*d)s;zcZ57pE zOj!dYMp4u;GCJ>gLPd;E035tOoU-&UrA%c*`Yq)c@kvaHXBELPVu%_vt8aY0qOEq` z9;GNO*QvWdh1Shu6XT`tkx%-GR=N_m2JI7(9g#_M_;i!;rlw|lLzMdd+2qn2Ij?+2 zG}xr+cf)1OgTux%NGg|)fxuP7Si-5V@?#BM(1lJdVC?i+AD|x53)iGUw|r2NkJLq> zg?OKyzj@OcNr*$!>s}P zLu*guo7nNRO-(bqDUIW@0Pitqee9KM^e2oGdLp{%ap3*CY^Lq*OysF#9Nn|=kYy8I z8ZnxVgPs6QzP}9@)ihX_%apAM)vs>9j2%Dz zVu@T5{0oemI^IsD5ck@RUp=vcDk{a|U`1kW`ISDyDd&aT!u8$58Xm%?110GJLn6{4 z&EH1_*f3_C zq-IxFmmohs<8xYC^5~ct9e>+eGH-?;{E%Ez6mJl2ds2b@YbC2+F7~@oj2T+ndG1iribU2UcEmORHHejeyrZO=p&22kF0-7f? zC7&lZ6=vlbRgdDz>a2q)!CG7It|mJ=;FfM~+Ps2-@=HtRRo{<_$Q2lg>nYIQ1DD;S z$IZ{p7LvwLbJPN2Hi7xqYDV0?V(1NGK$IRAy_6chOb7@#97Yg$p@`9bk{hx(Ham8l zT~c0~Mj_kOUnE_Us2YXLOhIK`Z{6c45eL*xHt_QCVCgkY6wUL~4Nm2+1gtZ;4W|!8 z!+6~I9^4N$AI2|vho-81b~AR4W{!a~RO0y8S69trv$L#jQ~Dg}kh6)hZ{p3<4N9BvAm$x@= zb4v^RE1s|k{v?|-Pt@EvGdveBZ0rQ5pkc}7@_`Tsu<~9yemvp}Y;PeG;>7-6I@MR-=Y&IwVVdhZwEB4+V7cR7gj*H<8%gm+!iW@eeW zt*u}7_Yc^_xU&-{N!gesb+S4nB_&_t%SiGEIXLG9t?akb5(C)2; zbkGqD_l<_2rgkLU6*q5g-+K|aVa-0wN7}FV@V8{4Qeatatxhwc(5Vi<;oUpCkQ^o4 zf!fgSWMc|q?y2$dwQnT!PjX+-1#R-(duy4tR->bJfEg^)X>s}p1JM4Fl-rz(lcM9E z!`6PX>=RB5Lmzq(je43EgsxXIq-UJ42x1f&hiK5oBHpt&(SP1#tmEuC&CKPo06iF5 zHDRGx>&~bCAgZbyT~fFyKM$gj7YWeZ%X4yV?jaWro28)wSqV7=85{3@iBc>t&A`~R zx0=pyb z8KV3jv)L(B`p4!O=f&)BU4Ry9MSYaDJbWSYv>3a6_(mYiX`PGe%~eZ(?482^$=i1> zUZiM|f)sE=oYLoXw8Utg5=x?ko0n#TzJjXL7DP?~#Pg;0?QNgp@EqxRU@^X*7jLMLV3@VkAkI@7LrRi=TKN6Hgf7S0%wd@er4wtdg zNf`H@HEqp783P79c@_NvEIeAOF~D*@FFjFQPiwYuXj%%6(^AcS_+=48{M@^h+WLJj zyo>1#?UOhHJS&Fh&3E(6`q%<=!yFX4gMm;hsXvD)C@zpp zN=gb^%aSHxWLUcvNw^|M*~*#@gL9>A(^m{*?EM4=6hF2=NW$R~N{9m=zy%IXRAj<$ z(1nXW{v|^G6o&Q{keT4WNJ>sltHE8aeu_q#0DG@!0?1v93}v9w`6Ua4yTPY` zku2b-xX{u|>Y4F%Eh)=0m^6q75kI=A_UEsb<+(8f_$~dnZ~R5GkJPTzcBi#~0T1yT zMF-;%gz5})eX!lTX1_%}eiC-3R~pK3&?g_aUE+^A=oxTsJG$bUtNf=gMJAk3yhiz$ zM9R<;CVEWjCam4~uVhC-FA0_F4V5s^TxOUt{2v5PRcNGwlo_R-OX2N6WK|_-pAZ$t zpU~ss;wP$WP0MP>J%N8fKUt|<9s~k;{TWWQG!Ls_rAxxh$BWewNzG2MxP&zgoJF5m z$$B1#oGH5cdLi60BFFa~b6klareCW#pJG4dKbJaCl8=~7v;|GFsy#cuQ>ssX45GJb zpOUi7#h%FZ^cY(eh?MP;-TUZNb$$c&Mea+T?xTwyF!2Cl1q)xN8Ki2f2B0w)^#}m1 z*{kWzaLjjJK)p3kNJ|(%Sxu{?_3pY3?m!mFu+1NIIh~eh4Y&9}@@^{O(G&elO@6)3 zv#Qn!M~y=-XY{ww_*H9-Xx#7LzYBHPsXABBr@gt1Z+?t>a@imcp8VAy`?fUd##@Dt z1OH5l2Cj{XOf;n=THDszxO8tVKoQ_#_`4W8ZNy_e+BD<6ti2|mPK@#*-1SRc%dG_@ zzPx#p-!t&+8K~lG`0#x$`d#>qS{h7t(2y&y;lQZQ(8x5ffQrN*VfQ$$z5Qz2EJF4r z=PRYGpp$&Lb5v03ResReFVts&@x$y$U_P?RSv`5)GQ#OQyt53%u{2^__XOjVCN2p_ z_=wRv6iuA}`ZU_}Y|>HOef`Ia_cAysX=#JvCl8-0s)R|mpE>`|`k=!3WEdL4cLy5}~O6C%JZmZl>cvohlx*v)^4P{}e#KawPf6@!)$*a^|T0 zc*I+&4PU%J_soyEvB;CBmbvWW)W`UQ`F9i&j2VHK^9>&(!7`^O*0ciyzfE8V--p++ zjcWtgD_^%pGv;@)vx=yF%+n?}G1jL?m+E9J{NSqiz{8^QP^Wp8Go1i=bwyAIQtVSKZEE6YUvd)Svay zkpR(W)}9j|t5r%aU8fs{z%ZpZ`n9tR5VmE!{3M)&B%{@yzES%3Mc-@8CSXm6iO#M| z5V(rdI610|J1kvN8%=&RP%}AynP(eaT8dL9rBBQ`PqlNDW)U2-y%HSf@JERbmWXPS z_?pj`@0bHmKRQ(>CEI|6Q&y)%mgCoG*~{2JCh?ey9Tc4FcsY|*+MQLKw1m#o@WQ7< zouzGSls-JsmchS_DrJ-Nuymo9te09|Gw%}v#R?0)2BHQE#HPXiiH~Y>XJJ!pdsR-Q zd1t?MIqZNRJcHiJ2-|KIt0glq)9$sh>%Y$6VQ+JIjNs5FUf@J%acml8w#(wsx3)C2 zrep`67JWF{^XWbI`$N=E>%U|-R%3_OJ(65RMGO#7g1*NdbpUN@oV%8sM7fE9yD|yC z{i@6Er1B*vC77o$_1!4;PVUd3RJNR?VQKbIpVOFK@yG;I_i;)uqL82;EH`#GcA}%V zCdrwZa(7|Z6Y~TWH}-~;BTEbBdcmu8(ysC?1)+F1q9===cmiKj8zhz7yUFdJQ|C+t5j=b~B@mhu*xPR|MpQWgKGL z*pz%Um|h;|z(7&nC*qNPah%dqK%MvU-{)TnT;l_Dgug)Gj}P|3MY7{#Jey1u*ccrm zILMBNxJbjGbzHt{&+~6ZeU?6&#l$aPN=3|kg|KJ%2;qmKGsy6p;->+AmGQr+UaPCU4GLHkwG zs1)n6mzT*mwXhVtvhVMObJCFzd@B0IH=~rnuYISf$9;X7ZQ=t&(hhk|xaEpD78jw7cOMNmam1|IaC@V_WbKMA z3O*8w6H_TFFf-eMQA1lWE)Luk=f-NO0v1)>c3SLU-#uP4f;dT%NX-ef$B&*6Xn&kT6{wj0fUT|a zZJsnm_UC_b&#d#ca6!1*?j`Lp1h(jm*TqOqrMDU&v**)(2W1fwo*tje(?LfurdM}$iY7eWN^|1) z#uJlmJlgq!E{5bsw?+bwQB{$#O13POP!Pl5Fs5V`BJy950>Gu@x7bl6)($$v6*X*- zrx=(`WHjG$glkgG+uaEc=UO$sqGfdn^l)jB{v{&3^3E8Z9f^s=%6#SW8-rS1=^@tB z9CQHNVFkBG&$!O@&kLI|Ky~u`5Pa+=lE+~;={wk!aqm>78w~g{aR>}_WMh)e3NBX{ zqj^DD9?Si4F>!WW^i`=h#in4L>dTnnV5Z7r%?EiEbye~gO{!rDO*r}Zh`5SP@H*GI zA+NZwx=E1!?Z6A&v}4E#P7f=K>HyzFu?}C^6+^eq=B=4VT)+W3+A1{ws{Q%h{E0od zBz{a=>M>PYMWvSb$*>{=4vN?(L*4kbASQFRwm2@HN!I5bh3ytw|IkS8R)ry@O9TmO zuk%Bi2JS1(Qra7P=qNkQVihLq8)NzRgI#gL4nxpjPg+kCc~&F(vI8;_b#-4Tp?yw_B#ilB8PWh;XHo@PIoiuO zy)n1c%!8ooqM>zA0o~;9R>vd+LPj6yNd-A@B8p$sVA-6FeJ7~5J-}j+ib!0Kf{#%T zdE5|W`}IzC+ewHGG~A~RTUu_{@%&^nkFSqybFXx@UpLZm;ZAC=QVd|tXFADGv$$wp zOQ>*FguXxi&8aF8Rn7cplNHo!3jSqsUCjiIPz_R?5k*Ya>9NVht6uGUFf`9^DlmiH zc2CkTU>&@Aby#Jhc#`MHPeIA5Ni}SV1@UY}f=sk)OnvFbK(;T6QfOJ(H5e2;h`GOQ zy_gssG+5wV*ciAT8)VM**-JO8Qx?D=h=cZGt{JFeCFqbh?hI3y1^%?lr+(ol!Suc!p2Kek*S*;QVv>8;BJ(uzKRs|tBDoElPuV~6ywL79l4GGpul-G2N=`{kd7-wZG?scYdfw_1gDB^yG@8!+UFc9Px z|FpWWuvqmu*?@L`l>Wah7`fVb3VNj(?}?=;g?^WhtJ_+lVhyb^!vrXh%IqK((zaK_ zZW8g1=nzHiVF**qRmsyiROiJBMUz5%uS8d99@zNdoM`7=?hkpfNI4uXGe?Jq5_R{O z{#Vr#kY~_{{#}Q(r0V8g2K)Q@TdJpk4+EzcyQC3_)0eM35E8$6xTZW-6riHFRGA0i zf9no6&jqg=Ojn|A%2eB>$^G|&cxW_%yqeHW+-N>}j4^ErE7?Mog3r$W3gM!vI#y9x zIK}{Cv>G&Rl9*UIVl->(0^J&~zjHcbc=Sd<1R>w)xZSl_Q1Mmu7RGIH7-%H&7W=!$ zuqlgnLz4dQlc(`d*6Q&Bn*escCJJTeQQC~5^g@y;bb)8=1q8fXiTZ85kM?>ji_PYD zrzJTF4gkgCunW=SE_TFU{L#rcmgnjI%w`TXZJtxiXZ8=+S6%A$ z4WNAM`$y!H^71mWPN#vmeqir+Ih@s|{AObIk#rs%^O%ApMhxxysE^&TgbFwpmzSyy zg~n)H7^n?;jI_z|Y48F-EN$bm;~dY^k!2XF?GeL)^5WiNM;JFHxA5mlf6Xve!1=+2 zrnL2gx0EaG+*b@gEUHwwp!@%@bQW$+c>muXqdTQxbV(x}qf0^rq*IY@q+xV7NT;MC zCEY0{jdX`}_h7JRpYQMa19n|!XFK`6U-uy<;eU=Uuy2c-?vJWtS7EoQfa=8w$4A9Q zp$a*p5yOA$nO)kx=YB*@s1>!B4;;9QeT!W_JtAySRYU(0X1I~}AjZcKuFMRX886CZPaBJ%S#zO=xr zH}7=Ii1ShydlB@vg~!GpWT1IMFlf~479WeNe#3j;#MUNRFNtR$lCFYG<{e{@SEr(v zgtX^+|KRO`*JCS7*h|8b?CuBvPqk!(G8u#iZZG!7(vZ5ITK7N{@x}u1uLLfybx5rK za0Vw&7r9=6D9e)hP;ogg2(QA=%YXfnT~E~}W@pl|l?}0I$W*1FARaBqQ0eScwIO%` zq{%TdUN#7DB;}^td7N+Iz=nbVnR1)xZt)aaQ;Zk+=(OMP5ldz^Pd-)*c3%FiVFqsy zJBGBf{NTV;sh)9ZH{Q{}^XZ4(t+ZSXlDe|l!N*1fE!c>t0AE+%TF;MItNJ5f?IZtQ z(lI)Bu?tjqssx&6qRNSa_TT9dz9Oa%AiYODO_{##MZb?Gh%!e4ysc?3H)><7Eb5hu z#8^rypoZ|Ot@!`-}#=};oKN^}MB z9&HZ!i#Kqy2eSLDV_@f8rkr*5j90?VZyph&MG^uj%k#&&6zCu}8!qUV&DBa_WJbi< z{^gC}d)#|YSFf$u4pmn*xKDa6*F(@xt>_5`WC0sA;qTdU&W?`KDtf$aTn4_7^wgR6 z?{O*aj0A1}|L%%Z7tS6fGZs5nwIz#Cs}tVvNt}0H=49?h1N(&*9Ls3M7}dxQ{AfO3 z<|^VKL5BKHEFe>2-d-v04z<2Qx!>E($(mY6)Y~P7&C>p<_|rqUU-8HMxwb+p`Su)X z3iiMXbh^qZYfgq893azP%1FFiRCHxBZTDN=`$y6ThHt zAS%j0a<=ehCl`Y)K0Fk`&BKgLEt;ZJoqs`}@-?KACi9<1Nb&X)eWGdl0$3EA4$OR#<^^4G08Tu24Y zrk627Hik#g-Mf-Tj4gOR_UU1aOmnF)2bg@sofDpaFQ;9_M2!$u3>!zxH?agdCvC8^ zjb3UUQ{_CNa&PZrU7}j~=oqJKjyvK~o`Nedf|F$^%4un6=rv>n!2m+Ku!w2G*3wdg z1Yj-7=mVTg>N&1C;Nq)#md5RqK%E&E>sa$EAuA!I+%P{!slQQF=J^E$k-#FJhJ_Zy zwE*)Hioxd#-u~G*OA?aOxLSZTl`~U$PeX=c{OCd9}qO2f|`F4XecP<3MjPGp1X{IdG-IBY~R`1V!k3HYyAeqc-mg?!;(%ncQm0n zU2jk1hW`^>zmpax8C5&e{uAxS*HiW;ER0t=mQ9V!?r*9t`oQtC9rkZ9JoiQHZF&t! z4S(Ct4Yju$$juT8@X!2>y_% zl)VFepl&PEW(5L&Ra!c0nXgGjtC+gk8E~d$4J0e5_YO&%Yjug4Nfho(DF~P%@WXZ`h3Ce;TI|c^= zHcUmr`w|^gV{ND@V#v#Lsm#}ys`W}Xl&xO9vV37|iu2Ge$z#|Jn%AxHGoS2w_L#dh-PiVfvVT@bO(&)Y;4{FncWRztG$c>C3r-~~XKgv-@ZuTf zg)ev3*PwqDBJj#ki78OG$=pl)ZORayyRQ0YTU*DwlhxPXyHIEM5b-Q^J!(H)#l1j8 z$Z6_P5ax`?B$7~4s6NTv%}z*)vvcyRMdV8>_w15YO_sG1bayKaHsIpisaO{jZ6W#8 zRB+t>k3%=SsvO|4k^x%GOc_^V09c`OUb}vU%f#w>yf74X(@p|Vw3Lw}aa?(hlYZA0 za;BK~EX?dV!WUkgsBm0-h(c-c4HMOJ{Gb*)Bv>bEty%o~FW)e-21jX8xyjfE8%_*7 zNvNxO_=Wc5ZfHi=jMiBhLaHJ~6ers!ckmKPrgk76?70RaVj`8@kgl-_AP98v?)hFC znRY?bEp9i806%XKagP9k?y>5^J}m}|Uix?fz~d7C@aX6_llJ?mFU{oXk3SBqjU9il z*ZE(g@qW43Gbr59c?t@sWLJG>A=FQSwq0t?63e0}At^2#I$5R`k|N6j zq4>(jLGzV%cgVG{vC7AgA4;%X`IEzoXyeS{O#H{|!#sTO#eD4KYf_%)Fs@uYGCt;b zy(_3v$uE2toeaM(SM0kyH&c&T(Ae**MTMnR(+d7vQ(q1v5x{KhW%-9wnm@wM0Bv-C zGz96GQ2*mv)BdHuVPfP@QWyo(-{F(45`EFhVqYGK$HLvJNQJPA*0%9b*uhn7N%r^8 zS6gGwWLGODhGzC>*8e`wOxD~`lHFt4MCRvzWid3XI!H}E#qodzOG`Ti>$z{p9Sa+-zK-r%bpm=C3k+{Mrn5;6 zJDm{-$%SKx`uBmSjksgSQECw;7Z{Y&zuG98r|eF4rQrD{E(cl@|I7&L{5tvK(qUBx z1rdXoiT!06Lk^`60!K$jE)W^I{*pYqRws?Xvcc6F&+D`E#r9df_g*5XW^L*ek4IcT z5#gtJlB?GP*0~~ztU;+m%q2F6rrAGZmCx%%n;BFA=vBOsrg%Qc=*zcE`+6F7njs+? zrXH%Uav{^S(I4mKsQOK_Yc~1%Yj3D2Z~rmW>~Yc`5fD|ii1vNaLu_c*;p?W%cN_C8 zBVc6>8CI$Wu0+i!3#3}ji4EVYk3t{}$**oEnJ*&O?ZhCyXS8Lq4rhiLe39@Y2*oP; z*k*srsYLxoq^_2ZA(J7zCH3Kdxg8O_G#wHOF=$+4;P+VA-4VYi@UM`_>M;1tPaNk) zJ@L4CZRcB4Gz7FNj0CIgn)F^S8*{uCuH>>wc$k3fG8%lMq@IIW>@!ajRvVVtPDt|XY__yl9tzeqN8PL z^7!N?*w-X}Pi=<--(9ahI?;t$Y1?;tRhgA8JX&#I6$|xf8J)$U#c4W65J)G4^inIa z#oBV6WZ`hKE*PVNbGz%=Lj~J99MsH$u&ODpua( zCy>tKZDXVO`H!RWzV)Acj{Roj74e`a!J6kg6c_ZL=|D+BZ2qehe$wbFzucRh*=`4L1|V)P$1`oQ&3*PnUwKSk8)` z5lfHBukLHKTZF-%{p~zX_nKJ3AFL;%>Tmwb;D|$18{_8?Ok>7>5gbunK4|3;M@3_? zirkAUxMyhanRdO-x7$dgr4^8qq7n%Wv`VEH>60L*iw;g?k(1oEb~%+YV$)~cdvvt6 zc!#hslpv7Wo%apQ+B3SbrAZ2!fn%4US!eE=QlTs~Q4(+Hy+FHq?)Tz`2TNqQkAOATaR&4Yi#~j~_S_k`q zfRy*C@m)KnmG@o$cI%0RN<+>ZbBI!JV{eoj*E$^Ab-n~sD`)m*Q9$p}z=?0xC`8XM zzrgb^`HTC?N>U#i0{`ZJ3>i-_X=f8>jl_z@Ds6YT9+lS$;A=m|GNxuHwzE_9Y z9zECRrgaO7xBk?;20Mec9ZJcM$Ba5LAMqMq5G3!k4+|V2A7WND{~uGUs|GvrMYW+o zyZQq)V+8O9FKvoX=yyZREJQJ@LeyP3OfJ6iDznMB$1}_)3|HyxEkO>&7_n8jjS1Xm zdbW^Ph2=Jo=l@*Cfvx-}*{3A-kbIHLUJ&(PtL2G4I%ei@${b3GVf<5!Uz(-FJQFax z?@sOYmOS*Ly$&XDq4@jZel4sw7x%C+6&QBh!V$F)~;{2x>pNt7Ex7Y-*x8@ zuvM`MJ|+kp(cK{y{ArHGw4`J`OY>X-%Fl&1X!7V=ji11fmkzZy1rrJ1He}`QfafZ& zxN0&15h z%cBj;FV{bc#a~3qpi<8W!&mLmo#+!j${(+OFBB;KjXCtMpl*&B6erru*(mJJ{CZy5Upvn*zal^62H>SlbesnrLOVdyD zpTX|ZD{hp(MacJ7-KaD}U9?N*ND5g_Ug8SRAx6LrlK#9X)Y#?NGAMn+Dxw@Z2X*pngM_sy~LGnxLJnbGH7maEpCFVRcbP5Ic`b9>v2gwB1F_WG$h>hz%!2J-e5~p4CBr)-? zu13sOs5^N+nXutZxxAMeTK{32weyLd`amPNX!ELTx%M$c!7SkUtGwIP-OtMM0ASVm z#nhv8fO})1SK*&{n77h;DE=f?`qDok@JcUYSDZSfx`!L6B79ZML10_2P0<|gW<=jrCV+o*Q-H{76bq6eS}Iim&$X)56Kj-;f;ZZ4 zYq|S{>ai98aW8XznCvRi27Lfj$N~rnz$o{H>X%C}n=(;z#QcJ?vDq!;3t&qNZW>A> zweioqBfpEr#h=;Xj0+>*9Vq4`{px;Dfjm?Eoh8OT$qc^wHX>)`e31t}Q7M#44(5N} zP9<7m_+GTI;k&X@CObWIPHw!iL$0H($LQ+%6*i-HF?Prvzaop<6I3sdxGaQ?E5`7R zF>XGlEE58bpQPwY41C@%`CQW4(Dm3?Amibz(dFt6F+RqI8rh+!N(LdkEF9;V1kbQP zHN$itz$i!nGyIuOI3pe4vm%DKL)_0?2a2VzYY9s0z6PaPwSk`0_uJt&2jOI?1c$jn zRP3!cnHaJ31iHGqDQd*8h#haFE&86`oKLp8E@V66jS-FUjAh_;U(77jZTdiOg*zO} z*m5RBharixaOyTB#^s_Eko4fH&XD6447|(K6*njLh9Oj2eg1LujnvLDE^2^RIU+#S zH*L+pS`az!MFg_3tGuRzPaOn};i_qbu8c_bT4Nfi}y#=LXR z``f0B=*Aobj02wIbqr09a=B;!0PUrhy^06nzZXpJo1$kND8XUsw%TWR0yfrF%;5J{ z^Z@C-k;IkJviUm}YolsHJtJ;?pq{B$=d_r89A~v>&u~;$k9VJ;^exq zX!zRZ)aHM;wD%!>5{N)U+Ex)16`D4#%EBzD5Y~&R+9`qCVOS6pq@OY(J_QI$;k$Ff z!maSb*%QcxQ3_4;@4|w%s$mM%A%4W`aRFW+hnSEmMj~FVawQiV8-c`au7x9D`|{%D zTLxV7hAIzHeT<{7$K{1rw|_@i5gku$!q+B3erU^jJtGIq+|=j5VfN=k!45gI#}3-m znoe*K;j2T2F4e#WGCAh|Fzlkpu1Zir!#^>m>F~lSsZeqM~S)foCE#>F?3sQQ^LxmkJY2nk{-LcF=m z8Ro#ogt!nrqWYBoGH4mZ@?%fhKlhMt?iDf(f(aT@fw&aJ1rA;eb;^iaVR4rDIXQ9v z+ue-{o7{_}^zZR-x979eetfjh=-F7tk+|j{<@C?x$b^m7s>Eg4rL+Yq5SVX%O2h!_ zqdIq8S2s@@e^w;O)pgxlNCB}=DDMcmU;TUFH6f$%8pKO%iGuuHO2@v1n$AOyNbzC3sI>2 zDyyqCV2W&0eVYV0aV7{b_43lYRX9*H5y1>js$UH$=AaN6GIy;dsJ3FUd?7^*=RFMd zn$3R}x4mDdLEJkEEqB?!cHC$Ux7@a5la$O$R{U=JJuN$%W4{aJ2Z{3ace;b{bX>*g z92dDN=?Xee`QqgM)JBo9uh&PhxtU&@Wd;KJHpjix!vSN%R1Tx&+RgBGgzxlC-w-Aj zR7)tFr(0Xjl}?)$IbrIf-f2<;-Y zDdu~ZajC3+)%SX3{VEu615ThW;wbt@Du$)@ZxL)~q^HOD;9uho3@uv6K?cbWxK@Ox z(;caxoXz=nXB+A&Dk^E2Y0A;jm>~}j-a^OuS4sf#?atq^|4uN*>ABjMuv{>K>k^p< zp=VM@Xh$b!1mjrVgg_+<_@~)_q;x-{5_-6=AijvxLAG_!e;xru`mAVFLf6l(GWZN|-czdrSB}DR$E44OH{W3V%)ONtE(UZslIS)wMrV{nmg6Jn=&C` zJ>b?l08VVtlpYc2OHky=eKuOA@^||$hNz%t){YLfAavO14FB*8px@|;TJ`VwSN^NP zJx3}wPKhv7zlg8|lgY6jpbbJ$Z12=z0MGL+|9Ebs(bWp*$`UG853SS4GRR6xPiNVO zmh3VugE};aL4-6D%gu3$N|B}A)Ip@PLoQ8L)c@Sik{KfpE-WyD2{8kDQPX(Ppug_8{F@?V`39O#wSaUu&bnHr!%~uVuYv(u@VL>*7^MxK@3Hm z)wongR9V|KO#^lL$M=w*5Fn5=v!sWU~~*%mDZx2XN45 zenMCMbUlyT@a0Ldj$?=TBSOBZ_Dy5zfnfP!i|&W^2d72eFNSSu2LIO~5DV>Gbthrb z>~SA@seExUko^^ScfC~`K7O`Thl$y zm*lnxw-Av=6~4M@P7KT69$^HkYN~~K?M*SHOKl&C9XA>g^@BBTD$MDqgGCIXxz|=> zUZL6;70Dquq;_6wUfr4l!JF>{!NVLP0WqT-u?R_0Wb3)raGB>S>Df^EOrj>HaNwT9 zpKvsqAr0!%#0>5{erU!|efqEQpLsB7lhzP>J&NV_Y{_AK64L$I^?-KUl{+p6zG_zk z0D^|l&fmCG-DNz>B2`f@G15hMA{9K>;L)S@EpOl!QUl@!5iqM_0vX1qB%<#{|hPK)lRJ=Ax$7w z9bmMvAyUxiH*fWR@;~M`n|c6)x^KFd(k8gs%$IDmBiswG$4mGJAMUy9+4Eic=^zh9>KB!-oK3mprho^*z52MyZAPMgv)LsNDRMY^rDG*5=$Ti-V z&~$RMORb`^r7}WZR6}H4XV%D6SVZu2VhJi<(bxK&=VK1Le;2{QkBErbKw=*>yxLjC z+o!>B_@8SE5rmW7!Nowb{c{WTX`Ya%e!s@kT~f^Hzmp}RDe)Y4xLCWe5%~6faUw0) zQq}hsRc7|@hx3foNgOU3TvakUTXwig z7iX^Rik&kMdq_Mu^QvI#>Z^aXaeeOmPb2pEo``XKW)ccY*Q6^#JC4tNbp$;KeOYN( zwi=eRam)7dF*LVLTOX&i@0g3FvD-Ee$oqh4;kFy?wP$WQ5#)fBr3Q z>`gQY-MaC+wDV;LO#e7Oc1===jtkeAsF;)kSuNM(Fe-O9_W_UJoq%Z#(Gh&Q1pJg7 zQD|I4*JVr9=cM3g>v`Gp3e~{hh1Bl$8o897 znHg>7ml}*9V{N1$BrZF=$Rj{l$YSGyi?QLsZ#IAgrI;F!{P?T=^~_r^J-f#6X*`T~ z>Eq5fC}-CPYB6uGWXKAdXllPGI^x<2FW;9HdVjJqVtr$hA{(b;Swd1?#u{r?$P6j3 zw|7#q&Y?!1dMCibor2Ky(h#D6L{WSBo6tV|G~|#)pODGSJ*1=$!p%rYSIh9RBg`1- ze%R5JUs+jV`aL*+_WOM6-Zf85N{VgQ3o9s<^#G;&V{N1`YXQRk!|#p!{6O$(O6VXH z@2bBIz|MM%2;j;>d=Wl}LMH}({`V<;bO4u^NSEJ#5!q$BUbPVV!(5 zsonjW-Y)b0!q_TRYQfvZM??&PfJW4!t=_cM4ElsNZv3m}w)J{;Xd| zbN)C%sRYR(Oj4||1O!9cq^aQW>edm)h?B<&aj)~wZ%bwbDb>o5zosi|X?HP!tzuuf zgpE7uJ|Rc#^rN6hBkVhfyWmBa)%592+^jm`#n%bF-@7Kv9@KIXQt8_vVn{a5NTSE) zZH~}PC_b2@YAd~3f8>K1@9)8(I)x-|B_y4=?UVDf5?wchiFSTvrC+Iqzu4t~?_$f6 z7(mO_Vdni$x9z?cm6&DrA%8UG9NSpI7l#cCF86Z>3n{)f~ zgF>cxUr^w$FhnMnR-31eA_NaDhX{n%)$(A&@}lZh@B$uB<|r{#o0pOlxQ;^=@|u{%Tv*mdsLp&5KBl)Rw@p?jXKYM|qx zi1&wYk>JuN5&VfNM#Uz}&VGKvrzS|O7XuO8q6{mCS{r5&=nO1GC6fzwfjG&%7aDgn zWN8(Rtm_erJTzBwW6<$?Rjc%3^}6Txrc~b$Vx`h=1inhv^>jYWASX)L-G~R`t3E4Y177+v zj+}vpj$8gw`h13-#r8auUO%{6#l^%+mN}R><4hsPT+y~Ul0l`f(??kN8NhvBGU#{g zh8t8+Xh*mGxeyD?Y5qWlWH1abQ9@a3+QQ!noxYfP_BEeq{zfso7&i>wcu%vb`*mqK z=NnKg1{XyJ={qJSeW91fNld4Cj+PQlJDZ6umhyRLIFT$qW>{Dlkt}xSg0wOa1tpn5 z?=CWzC~9erb3KVQYp06>TFlAsjj?Cb8n9&f99m*)NF zTPn|PpP5X8$-`{VJ2>uRL7Y z@^VE+dKnhPy4y-W5>L&+Gf7(>rbagCLqAg|A!(wPC8q0fuo&H6mk5T(P4262Diu%s zZ5jD|Ar6&_@weFx(u-75qAgH1H_h#c^1IP~pDJ(n_#SU*RchLB+w2xtUMD)f zm&s+-OuV){n3w4?x_wC+4v{^dE><%5g!JfN(PH_-xjzC|;&14)*TF@04syUIX~BI|!&q*;=3+ zseao!CM?XG&wQ9}0UaY=-G)m66e7u-c`i>Z%4rylfhvfJL;730Eo2$>Tac*xPHQWM zi31ykWsgdT84=(cU^tMfGf=w44EDt+U$w((YJ}`Z(at2w3voHtKo5QBnv~y7`B;3@ z&;UZLZ&UR9!bu4R8$%|U))xXt$(UDb_VWY)qOtYsNSsE$W+)g zWBn!UY<}^P+~)X>%W@@w3)TsM*gX=F(wb;&YMQmiy^0ccGPHJ{v$_CTU0iP*PKL*_ z85a<;D#lT7JzhvaPp-G0+^v_U%tJH;sD-x{F^Bv!LHf$m*hfSN!}(8?BCF3;dzN$w zb%2*K!AfZ6MGRWtO5kpznPSa3#TmL;^Q#{$W{c7IW%qVguOxZFjQd0Hv31oa{BEay zO5ls(-Q!ZuLhQKF^mipFKN4iWx+=|&Smf?>_xu{Ydv!2}8*y$qN$N@drX2Lr_3>Va z&u)xudRfjL5Z-OO5lWK8CCkK#}`Y{dnU60wxu z2*G>#lOO}EWK!rVRP89GUf_E5p!xQK3@r$LksP{xNM_0(aAu>3&EZVz=xiGk)$|3A z4i`Nj0y0-Ux38xFm~Q&1-J`hB5#o;rpWEIzJlCk#dG*(B+B3EY>#S+Hj#Rz*$D-FWfs^D|Hbzy<%~}bcOdP z#t5$m=JcJLGFYrTv~_c~HLIUoBBV$Ro`l|B=gjX;7zwBgBjKB-b+*T7XiT9S27}S1 z)Kj}k>op;u?*NCRo9{Am!!My|ZqD6#Xt~>L(xk|IA}GK5*a0!YSIRC=o>AW%h;rDl z7NxZSzRQHDn*w1I-FSgFXoVHN*)zdrcFCH;PIslh@`nE z#3*?EjI8iQr@Bh zulwZg_nlUv1cnVDP^!ziZt|GbwK@?DhHl3uU5V&;qT|pESkkuNpKR8d{G?cc1kpaq zJ+V;_VVon?S5*Zk8u|jbGag-0-vsBn2fYM%^bne@-mqJ)`v(>DJ^#jjh@<`8hJY=O z(uuU<$Q(f!27^o1_mU3;pqi(_@J9uFzlx1TjtdG40}{o!H1+34>Xay2`v>+et@4N`Q< zVkdJId3>Tn#o4In+4m^i!~hAR`AL%en0GX`W<#UhX~XyiAVHm`h|*XiowIgx??#{Fxcg!`}kH+Q*qut>edDJEkq>jRI2;%~Y5=6ywRH(bjxRC~W-bf`GAVUp@%@k>53MW27@m%f zT&0m7OC%Zm7C6e$u)Et>kE8R?n-&)Rlq=HSDCm_dn8n)CBVx^Xe$gZ>(jZv(#@ceFSbR3jBW7c z!yO8>q@6GtjYw?)E3j^1GZoJ)s)_awhklF4iGBh{pbqBdsDjk{a1#c(a@ru183r>S zzksn@vTrlz#~0Wr@XJ04-*lGNQX@#B!`dD`%8}it1yRo`bc!%Z4h-=rlO8iUxXX&< zeaOaT!5G{%Furk)`lX!tsSkp)Oa~jPqlxi;cb3QJZU}ftZvXtb>PGM$0JHHA?wer1 zg1SmXICcGPD7Ex?d1rmmD=8u6dFyhu-`N6g>2oR#w=Ysp|C_(p{ z4!NdcQ%@71euM9|Ib{*J2H}Sfg<{(}cr4Pxlz2LMV2REBkYTSKV-N!8d#IV}$I>+k z$V88qPI8nDO$cbn7!`nt+}VFAu&=|lZsX%V$IQMxU5f(z?yV9Rs$UpV=Dk5GBo5lk zMkGa^dhn6(N&q56W7om(3OR(ir!%r4I?Bv>Wx}z`l1>8|fgJxXdJ#W|=vz`;CrUjT zljKVopuD^$f(aqjK6?j0L8sqSO%zMw-D4;6wFGDfaBmJ73dG%ep3Sd4bQujcQOLJ+ z2A}v2*?A|)RA}|qqyuPY!JD^K^;v*jDE#Ydy$2Y`$lvN71u z>dU9*4NR+~Blx%F)%G?khm}L8joFvmjcY9iG!I};O%mV*w$*1K^)chhSdVd4sR9Di zF%3$J#DujppPb-YF8wN91@jAXYe-xi>>!=Ds>tsmhb?S~c!r`=WPS^&C6rn0Jp-nA z{lzB>e;xMx3kd^Nnjpvl{+rZ{^J;(=>;XSrZ4KRDOikzfOeFo9N5{RezdQu=7%+8} zu}$;C4L{q0e`>IO#_2%jCMkED<9j0$$;IpQ8p8&mEjGuYYDcLN-m!s|$KY~@I`xXP zliJ?I@9m+YPyR*Sjza@Qj74)uB>~HIsowwYt4qq3!59y=H-#ITlRN6QQJIVR(`YKL z63qZv_bjC%T+wn{_c!*%_LS3lRvhvR68 z)QkeBTi^CP#oNt#wqCcc9%M%2sAYe6H;xj%%=WJ zdStjfxBX2oZ?@5Dtz^`*BuA6ujO4h{>aoP8AWeJLNjm8?A1G%X@wUb*BQFQ5(|}j7 zyMq1r2yNsbf~sbWX;&sa2c7~*=C$veOTd`a$QcOuTl~w#&I5kfjG5%7@WED_`(VTE^V(1&-`W-e3 z4}=WJpTUrka>0;%Ou#do4$uI%e6W7HJN;=BdIlzt&aN-kyoKHMC0xV)+-jd?(F`fb z-#yCX+0R$+E&1PEwCnVhr*8*T&(z#6&Q9_o0Uk1S!aSwYqVQ6!^?DOc{d8uTAGSnG zEh@Dr0B~oLy-EAU27}kQH#q)7PR#99wx9kU;}KHUpw`CG3MXiC=v?HeY@%-zkeO#V zJZ){?UFjEp;%Ol1TcIn6I6UG_U_o9~pH5u?!Ontz9q8Gb&$NY1Y%X9ck} zU)3&HUzj}vD>)|q+h26Q^K-Z;o}?XrLj)TtO&+2avutUBZvpUM{h%KLPf2h*Dy*%% zF0|eh_Z0uBHM^%dGf8vbcGs^d#f*3c)7$)D``ba~L-bg=59RwV`XMUhVHc;uF?9<>$K~=n|PnGB`^vd+1K~i%Iq03l)TnZeK&cC0NjLZ zbR?r6oBU1>#cmdg>or2UhOZ7~@`w6mLL+cUL6ArGNyfA=9E>TSWWKt7Dj{3X0?eCF zjntL6m4VNM!?YctXLwk8rJdN;Z zx*14J8izvYom%djgs%a0Ow6zCaYa#M&=zX`;i`iIDcKg6_?yNV_66DmR-dZegaf*3W0F173^3CK>kTdlRQ9`Ayp1^CUd+2F50v{PbLJ3rN*( z?)?g&%-9Z4%&d+M1aOkJdK^k@TqlwUtqcX%$9dLoWZA$5B7Et z1|fW?t33BhhlO}#RR4_?fQ%hEuceOz^Ym|m`AjnwqB(y*wQqQ+tIeov7VAgfEvKfD zD*rad416$7#0DAq1+}fgYeeQtF~8 zTl`}t&!hRgm8|x_+gIWD*a1D7*Z&?5EqnWXaQug>66yLShTCopBydOG>eY%{T(hj_ z-mFIkpKc~st&C|6zfTEb0yZiZl47e*2boe~q!Yp134_o`e*&J;Ih&b2O0M3jxiS)&Y3$=~)`q0FE}W_S6A{V4sspNZcYlQy7w<-!hfXWh57KUGZ$ zjB1^daaL3b-!+n{&r6L`_Li(f&xIjToFQ@V-^D%km?+(^=Fh}+lcWV-PB`=ZpkD!b zQb~X&I(o@5m!NJpE3`^F#)ZTjsX5a_Nndhe;xpvgq|BHwOMVt6J|n|DBkkk~7u66i6?s>2TwO$kH3-j_}wuP%uuX8Km<)(155E=NZeKOZqU}pGe zSssq%|Et|%+)(j;q2~I_MqsX{_0`PSSL!Sz<4a6|r4_tTLPB%m_Z&VBNvN_nB&iwW<`z#@mc|bP}fy=}igIHNNFwm^R87O6d{3`+_g!%C)N8$^|{tR2i(vfWC z(hh@Na5D|xvS}dJdA9^(yk7Pay)TEenx{dUfn~pq09H^7y2FJ`IOxiBN>UoX=fIWm zH@OlM8XVsgM2Si8wwHzZ#3WZJpv~r$_bK8gt=y?Z7MOx@vn*|pB3)+>v_N;ENR?4* zkPOqdd9?btsDKKlbfgVD$*SKQ^P_f?z zk)re@3SA1yCy0~7R(xLMxlO{2DH({Kml3D))VzxCO-gSH%Ta#QBWbJmC;_|0fK$?* z3h;1qigK)%dTY(=&G9~YrBwmjd}q-igyeeUc%=tCR{t33qq4ubCAUgjHd~Yg2$&4` zg!oTns&B#sVjWE{S2Uw!Nqg{HZ{3MVWg3!@XUZzot+lCCPSk z#)XDQA#K}Bu7S#XnAyP;?L{p+F_!N&yjjWs@!nqx@*L18G!6gVK!UvJEnK5A>|0Akm2UA zh&s?W#RE;!NOUB+jhC;|^2Y&LkL3v*kEx`n9lb|(YPpAR@ zWC4g$iQ;2*j{a6|e7Jt(cnB~pIHCPDcuOUOrR>Vf9>q)L^CrwdNY8KZ!_?vx7bG03U|F&F467%XxzkK}+N`_n<^r33V(DO)#l884C zFEarn)&w6z{N0~q0B||F0P;_l7DKE!2t9{{>VQ)5%!p4`R%*m0xTe6JS6I5 z0qFizE)bi`+Y1=dCab+_K95#69@E;EiWfn}lu>X11|9H3FX(~eZ>F^JqAHGD6~IC? z%KRXz=c2&v#PP<^k;cB*;HPC^n9I1}LPL>9p>#KG#KhE(I4p37)DPJ3t=IXIO3x67 za}cCPM0qmFgSb1tiB6fVMuV#fdL?mNJu zN|uFZh9oFaQ9uPm1VNC@kh2L9F(4`mm=zTjL=+^0g05l~41kJ&WF<)+FpzT=Num;! zkqiU$Up zc4|&zssp#>P=}bK2x%lVEMwhi3i)jt2Z>M1I(#Ri(VC>N#s$R;M!lWG{QR@i%GioV zcV=@gc3Ze5*8Pi>*B4tRRZ8NX_ERwtr5F6#uJ%ZrxURCK&S=r;q0l2kuk&)tPthiG z-3?b=x}!|HWzlUhuhLg{i6@`op(Y>Y1Swa8L(IlR!uU?7dpm;M{B{R@8sv;yw9~P8 z=X{S#TAtGHCpIuV-?W%;lkx3F;wC?xxTV2$iEeQWiTBo6MNh6BeWBh%`L!RcX7nB1zR#z`qYQ$Xh)l7(cm>>SUrMKo0OLteAJIXDbM{k z=e$rhIIBZ1#r1Z~eFO3wLI5F?$JvK4Hq^U#%#*;(O$^R;?qj^*$a7yrm|N#uBlF=d z;z0ra>U>+7ktZz&NZ}h3CAZ&0<{8Wtv8Dl$s;^kLKHD=cw*(NQ!om zAhDg8Iait|%c+NTB6Bj#@lve#bgbfhtB7dUQjFMLU%deuHY+Ird!su^DpLj_`Spz^;v}nFId8OBUyB zN;1PIiR4B4EZ1u98*}T3m_2{s;4{bS&A_48v>4|D8BROXktTC*bCk_QnnhXcm+Y{h zFCJSCs^r`y?V!debN2){`!0k?%tPm!eP-z}URf-pc;vLzNOQ!Xm}4}JeaJj_v%HBf zWghqDCmX#tx+@d!Kjze~zbx`<4#$_rwYlZZaaUiwV(?>J7&Ye9AHK!&Ug_GvTdR4f z7f9*WM4Ma>8*vix5GD39;o+wUn&rBzkn*-%`CwD(yt#9IJlayEqBG9EdiJnbBl1(R z#@4(O=k$ss zV`7zkGyAwO^TP2s-pI;VWxG6I`CNVRvO{k1D-}m8abtnfV(n+_eEK?D7iqa>?+A3t zm2!K-;+D97eFoR*-+1d&*InS=MUPZdcrs#W6wPYa5%BGd5Z@Bl_ zt>}g$F{WXkCkhU{Ur7j641T`KW8W5*8R}aLiQ|KLB>^sL{In-#X%AfNd|+r~G$+@u zebim()HB(juyUirDbH$RdFJ~v>Im?RXsc1Oq-aAomuH%|bM7hkBiVtS zn$7lOESHV~pZl&@mxXg`LyP^_1nryabxCG;aF-9HE1)%?}D~iNz$h}gBHuyR_BiwIVO^gk<%^>WdtY}4>IZ#{M1ADI0 zJvq&NPwvSy4Q5%1e3#9`5# z5O989YI1b@)g8b?6YmH@lG<0$5Gk|q%k4)+<1{du9@NSC4EuBqPWWj^S~#~2Kh)2a zF=%#iewDXju_}|lH`Ucf!;iFwkf3v+gTxwho&*>G><`eb`z z*NZJyla>z!+)S&4$|B&zoyzrjB362PqQ%zk%W9nJy(v%K36jWxvA&cql7{#?5Dpn-eG5clQrn(t2#MbnyKL zq1NRu`sZb~djuczKVQL^=hXV1kR!P2@%|Dj0 zM9raB?A$D&f}1W?1QS9+8e!AvvC`w?!&!;lP5g%gXp=kF6PI$j+{@|gIjGNh?zZkW zmU80Cv)qej32AO0=;^no3@iEBB<9GQp^MIJ!5%^@%hxVT9c~Pz9p-Ns;(M&W*e2!E zDK4W;?Bimja22Md>*IUkn2*Jpr&_?m1Gl4Q*q^BAeqj zh!>t6vh2|!tUb&vb}==2XyN)5>TJ3G;s*t*tykW691IF`)z@FIz%*{tWGU`;LCZ~^ zl+HF5Q8GV684l>Rlh5y~dj53Bnw5veLsM&_Ept6Mmu=a5Txmgp!of?QXrF4M2zz=z zEH1lW)X%N!zUSbGyI7FWh{I7fldi<N_ZBG+VshB7dJe2$lXlsZnAV?e*9&U_r9C1j^zrbjQ(?x*Kd#2ecIL8 zm>jEeoJtUq-nEHKz_4r!+ak85g;u6~%)5gLv`>`GcXub9m#zY9-b%ZM4_j;`qazRO3SoafmxRti#YN~A!pq}48o+cSj2;`ed z&fDoG)Y7@6<38Ed`CTP~EVZ{T!&Jk@zx?*xdNt)V!|I5u1^Nx+cMiv15~ZZ;1(~`oFyoeJ zIjwkb7sr`n)e)w54{|Uee}^B zYOuD9X~gC=Ot!yeZ|65+N>{v|>%frNH8^-r+rOQYdD6C)VaA2DAb#rOxz)chl=HIVK4& z^;|g~JryPn6xaogNAZg++LcuIOuB)0WW|04fA+DnaXDwh+-|oId|KO>Nm`M!jFB1? zXMVjw%WB6Ou@{5)x|FOFss)c!zF2r-XQFj<7x~}_^VJ+35$}B^tD}Ncn2E={;Gb#S zv`O~3J?<2DkYd2-vcY|K=5XKLyVjGJH=dt2hp@_N>y3TPPHR7ng_<-oo|TD}Y0i>p zmsv(dc9JAjOB>4Y8K=mDi#|wKN7RO|3v5YXow2okRw-v^Z+vqQZLxzQy|g>OXSBcF*GrXk_m**^rz(fI9hmP> zK(BgVUPBF%{xm$@6fRbaE+*-Q~e%dI^n`T zQCl(`jV8`rYC0lNZ@cuW-WzsuQ&kPooy{wBi!i^xUJLUUE5#OG?$cM@edmn(WWN{) zDvv!x%DA2D&_Cvw*L$>%kDVZ>Ja{*G0q7X`IIUq z?{y!N&z#^M4{sqp)fH^A_G(EVjJVn)c=@_RNG6Y8bsad#x_j5l^ijJM2bV45QlB5M zDy6h8X1V9$uHnR*E754k;j*oBl_v38okl&`)_-KcE`HYBGhL%#)4bkr`^k*`l4k=h zSY{R^GvAtf%Yi$}cb}NYxmy7(XlBDGwlXg-kxOHFUN9lLDh1z|3>wH`T)toOp zbR(VU*&4God6%>dq6o-JF|3dzFbRZ^>^_Pg_q?)${pO7X|20;V9%ptdKPG894)z@? z<`hugdgRTWVsG`uBTI;L7{*i1oPTvE>SntC9JWmVt{1Ci9LJsb#Rl>wH)OmX^fRBl zZxec%TscZMTEcXn>tyc}&s@g2$z@w7cZ!o{!+(ltS;@9UZg$;W>)82HsaJb*8ON`k zp0I74X(DBGuD-kQU7$>E@&)Cxf`uo$N}=Rjlnb%#pJ_1Q+^?Fm!HMck{%i6Gk4dt29Ecx%+aR+*s!O;CZNJ z;pPUD-rVRGeo5*&3sjrNpU0+AQJIk`@%A>YecUZp!|0NL($S%?gZk&|7lUil_Oc-N zyyX^F*&NGf1gb2*3|~1Y9X7L*bUR8h3GyaMoop`?B1l+^xhHJCOlqQaJi6jnVgYgY zU-tC|?v{Vd(-E7S!!5NS%!^{lnE(1?IGes#f!;NlBat`?GxhU1bfYw=9o_g5$SVOk&!NE5g5vKQ8 ze_O9bTkxSnd@0+A?mbPXm2(2sBrdBzaT6sTnS7N`sfji}UH?dwXh8B8m=!uaw@B?| z&r&fiAL8Dk_C4k@VuQlfOvRbY_x7!yaayk+l6HIN=mFVc@}WM1z>d4}N1vVU_j6Zs zmVUS=sq6riul~{H{HI&(6>AjvS<=?aCAtLHu%G0Seaz@6$`vJUaZId&Rd@38x|hLs zIjk4fr3PG9_@H@*AT(>>0RcrEWmzt_GFD`yS}({vPsYwU#r<_@xA}_JMeW|E5nC?F z7YDuwJccf)7zYY%pzs?q8QV%;$$dg;y{9iVoZwVyV=+YF$vd^0kk%1+ruFeg_n^gB zPp#)3IV!C0dhA^YYkEu?a&viTK3rnNSRvfZ&SdFxI)}FB{;(oRtLm(5aqVCsrKTC& zVKS8ms3Cj&)I)hZL>V^i4Gx|0%)aL6>etddWs&XHnmW=mx&${LmEOXtE6#MEZ}Z`f zT{hZn)pa3F>rd!d3bdr1agM!`Wt44c!)SHJ$wh{GSI?!BwXWNIh=GOkplVBf zXXn98LxwRE_uiY`w;R-`w&H~LwbCOg-V;lRSsH>l`b+2Q?fz_iva~(a(M{BSG2=-5 zfvi0|R|W}p89AOQFPvjNS6uvz;n__k_cy@Ci}1O)!MeFT3w9W4A`ER8WDYGA*1N*ekea1yWz1qNn;1><<;`e=9zo_M$Jl80rM(PU`?SN43MBjR%|3eUJu9I=K_*l5 zRBz+r5-!#`fs!Fr!EURC%@%0hd66^Q?qji1!7kMyS9Sq%z^YjH&N%IB8Tv!Z>z(%Y zTAD>W=DxA-UC~>YRq44C@mtpz;i=&yVTtofk{Vr4jy1y$soxZP7-*g99+v-<>)3s zGVx=oo}m*>>}ayo6xpP^WmSACv%(6l?4pwkClZaU%!tSO1|FPtiZ#i4PLbIZ3;fq| z_Kf#rW{lRdxHqx$#`iv0^>I8iu33_#Eoh?3d&=@rXz}^f6{OP4DvQ0xnxu^HFHgAW zA>Q|@e9x+vFC{j;9nMcq89wIFRBd(5lyOY^YR38@V*UBOLh3{L#mPM!4D?41nJ0x^J^ElniN1t*4&V5# z2}1Mwrc~F2!m>g;nJf|c_!?VF!b3NA{qw2kdN&;XJmH$yRkhGsqN(YbF1q@`EwD%7 z8OL7#K$^!!4>x}AlE$=n5~t2AU1P<0#5#s;@mVr{BAk46e)gAk?xZ?QnqWx2IC?Tt6BVuP;mB8kf-k)*&ALW!kP2zW|S>AdiNn<_NC$N z{kP1&jLBTzW~{v}b|U#*&P%4(OKupPn%$Y$VBWOBEsCK-!c78^ zy^&aNtl8u~hAZX}@@~meCw-?;;9&}}zHp#6wVsXR)a;gvGaX}PQ3Qkb0!FI>H25ya zmoQL}Wk@)^bsZyN{qVs-f!eG(5w-p2%^q7M!ltZ0(lnMM_)%T^hY9Y!wWXX?hsCsO zQ7qi6DOW{HzAVbRf9+1rMU~@keWKIhHxuuwnif6M5bA4MJKB70)X8du{}5O2*`W_Z z#NoH#r?ZaqA#gFRCS4I{kR;}n=ypyF&UQ1=cO{p?F4mc_k`x)5ebS^W)U$48nFWDN z+{xq=?#9VG5YrUc6X8B-#!cKh#DG*jlsA+eS`3aNlaPXWKX<^5nK54#XLt@re zZbH4;4dx>iu@iNhO5=FG^bKsjy7JtEB(w~WyP3oKE5eCHi=SjK##oex6}am03A>p zCZ)0sSz*)``Pxsun?YIR9<+j;A}K<6pONR@Q2oT!EH+$uSfJMX>bzo+ho?O=dx!U` zbl+a(@+yLO#XfB`so}Rnl%kP<-LE2MJ>9)eZT@}^`7KiIiEsJ$c8)l$ymNHfk;1Jh z_p(?ToW#}zh-i(79$%qc-yE^|NnZqSIx{ugbk1aC6R?tX2~2e9=(=Jp>qJZGq5Lv) zM`u>$`gsrE9MdRbd}H;|UUMQbHrc~db2G*1+{oTtOwMO`bn4aij$)o+n^UAXxT$>aKn9u5UlFh1qZ`qT5-O9i(iB6?~8b=t{<=l)kyI>k= zrgAHL-DLT3!nzK2 z4C`*XBo>=#f4ttp(psBvLFbI;2hQcyC%FtOv$rp>OAGBBj5N>Aw&0_f{MyqYR zdKls^JOqzZ%fwkxlgEbD?RQru8Hu-yPkeR~c;t4jjNkO+8d9veGV6Huvq~bDZkZP0 z*?Q^oT%Qls?9Py2rvz`PNj18fcuQ*8rl@=oy{++vd-q3&X2s5p^jQ!Wf2<>qJ6%}6 z`9j-%P;vM7r+8X!L4$8CkBwd3mE~9?<2O1m*K#(sk^cCKa(_S&EmaFVqB)Y9&iB){z|MBU;>I_Dp5niYHbI6p;q zWR{4|@}nXoB@t>jW5PHqu{?WKa!rJ04r7(q8M~Kb?1$kyuWd&N8acE>3hxYRV>5X^ z1v)ilNaPwnnvg@(aJb5Pv9tH*WcaLU9Q48BNuQ%Q2INLc`E#_~1OFKMd zXZtR(D|2hpV`7^Nm9}(Pp;yF7Yc98aJ3nkAMEWpRt)^_AGf>Sa)v)&AMvfLYMlQW> z1Gl#V2Ev;d)-cPNB*swSGx1;lq3zR+BbU<#&a^qPGTpIh++%1zvx)xt^4!f|AIZft#uG#Z!TD&OXJY&oo#o&HwmlAPsug+ZN!Gk(WNT-bnYgRG} zGXw~P?-gFmaFc8E#w#zWr`qOnA3oW#TVHOY`)AM0NTC#Qq^t2Egpti^CCK}u76xP_pw}ZZ3Xdjf7b{bd9~{a#uh!& zz8DrOrn$@zo;Hs=&xdkbVC#wv?uK6}v4m;OtZNIJ!cD_sx(lAY+inn9a~|7fz=}5m z?LMz(2Nl%IeD->6?M#vC+~=jg{90;ew$`SSy*6qWJ>1eQ3i_T%FBO?1=62t{bU=jRj4gCx%yx}$vn`eXL+7%K+)b9&HS&`2E-zN< zM_9T}MBd`3Mud^wEu^X5q_d_U%#OC(&m7&i$uF?C@R25~OMv<9nIp@3<{1z&=Sk|D zws83f>n$P;=E=^HzjDaKaE6-1>fKk~2lIIOEyckd`Vwy^mOQiX`SP(mI!V#j$H=BE zq|+u!%^)O@FMNZ$D1+vTD`6~Zi#oVH=F6?Ny)qP>E%=PIFU@q5Yg0(m;cI=$pHj)4 zLjj^`Rg=y;V`Xlf6V$A&&2Xs`>R?+YHuuF)&X8HSft4Zq-b*^tb0cPZOY(PIbvK&5 zS&u5hbdyh1HJowLnw-5^gCpd@_76&pNu&N0L8GwJ!v|MMe?F5)Jx3b9a2(CE-jzkn zWVIU(4ipF%XSUe@$1r>E1P2O-H|#eG30?&gS(R92;na2U@R*=>rS)OwO@17wt}B`` z6sE^p+$@wo${4Lok{Rzc>w_|qMC5)Zml8AEm`HMP2f_XfRIj#wZbQUf(_p%x*4X@plk;0h5 zc5-2lg_yw>z-K-Ai!<1cq4fuMWw{5F`PBIH6tgdJ8F2%fO3HP-7iQI4!n$To zgc3*gK+uL*aZCNo(9E8kgnJc?r<@l(<~Z#v=gr|*pE`f&KyXe0w`FUl`)>HRq5DJ_ z68CdSVk~BR8gf{eA1T;vw=V9eQfgqvp^1b;y=P@9-A?V2ePfmZ-V@A*XWNEuZ&#S% z%>`uT@f45_m#-Epb|f!!tdzfCRVZ;G{;JrGh5ez`n{3=-^EzE$%^jM*G@iWCV1_k5 zN3wVs+*Q&ka>M3A!oDS@M>oa}Ry^cP+GAYWwk&6itv^1lStlh^)peun3i_CW4L1aw z>@*bFvW-XSjY&w@;F8(ARpQZAF!F;@OHd(SMAaU+Xzw%@0J?CYvh1pZ0zx7b8l0BU>|q3 z$T+r{K`=(is2oYDvqOlONRxdp*XG+pfNRYPV}lqyE03jcFAHD=0RI38{t^goOX$hp z{X>KXNB|4~OaRQ^QpRs(xc)!s!g#U*a0BoIECg5tAPOJ`ApQ;TJubs__?fu?>;QO- z{~Ke%be+Ok816Bi%K;PtQ~@*rbQl>K^&!>8_W-yI*WqXIv-llh06cCy7CdkN-4~|S zOn^B6n2wmPG5}-%ZGcq(#sHfEwkgOpD7i{OCB0WqjToo)b{N8UT+$2|yYEOP>(H)Lh{C-~iy91~`w)X8~ZI#k}`d z=M2jsZf72VFo5K2PRAeknySOfO0os2WVsP{4>x4zV2_U39!Fm1ypS4M zz6;*Nbk_h-0l>0=m%?QLQ}_$Qy)Xct-^J4a=Y;`q{d@pC9y}Hv06Y#h08HOsx$sz7 zl@z6KczL;v)z#Od+xPFH`@uozUf_L{oSuS8t1D4;LmhgNpNk@5qmh%d6H-x@tAh8I z14y&6G087jz>oO|+y4#-|#r_oZ$JuG{s}UeDzD0 zqT+HX9c`8VOiC6C2@gfLfk(;#@4|{wlvi4a3d>7TSzQ&Xtgk_(HI?YNtrE=r&Y zynZgyP*?6uOHW5pK#S|`=ytO9fmqA z-&hW?Jma;A1%L$brX`e?yT` zkqGEdWn*K*w4Yi-G2MTe?^mtR`9h=75S{M86Lk%5(4(-&DC9{v@;>i13hU>2GMUT) zJaGSB;N7v(stS}-@ER4A6(g9F0WA&XVRtvD5nUa%UL_^z^Q%|rbmtZ3PquyhfErqx zP-R0cs(4d_%3-{fzNMVZ+YboKU47{g=a>FqIUxLR-0@9L$|*9H0LIm`=wHX$VmfebbU z2HzX2uB$MoX=%@CgM)*prltlZr#`3iP|)KL;e{s8ymN=j0A9r&e7Nog713VqE{kO7*Gw(47G=QZfq z5iAE8Aj3f+kLWrrEb0l$0veZ9R-jt}x6z&Z_fS|w80cwb6c}_L<}3@=*)Eiw{|aU0 zzM!XtfOi+n?bz5DqK(rK{2m;ghoAX}2Yv{Z8?@=Y_g!Ie|^aNxs1mq(i@GdGSE=2YxkHgv` zKUiE=Le~|kIhiQ^C51i*y}i<51Mo81(enQ;=1KL1;HoUq^iauice3RVesD z;5e*_Z*;WDuMi<}L)YVS*^nL>Q z_{vjQw#z`*KaGz^nOT|W-n~2Hs$_YrFaD)VU0s|V_=zqLc_oFY8uY<=AFn~s52m<5 z6@}&UTAIqe&dz6G-BhYpTfTfQjNwx+wHH0lN~i0+q>NP5*wTznIoJ+jyr&Ss1A7`j;-Uywq}#g|VdM1X@>j7oB(Y zbkv5IFJC@$szC(>sl{X^=>S+;ePFKI4<6Vv+VlAnN(J5h^m!tRPfZ5>P=j{v+%}AH zo_Y_D#qq4eApED%@A8dh`z`1O(BGe?p8LD0x}2N<@U*L*wtBf9@C(*)Keh?{)Ds&Q zJ^lvtMM+sH>V&aozRX53iO*16asr)~lG0KpLASMFyzw~jJ?1HFOJO;GQJ9O0V132B z2KHmwkA3_b^Z%d^L2qQYf-Ui;@h#?agyp=UsS!nj4v9{PL(ftYQ7-6-$k@mU+mpu! zc3Ny5&U%qO+4}w+$^qOnU*{l7-b=bY^|~Mr>yi#^2mc#!rZ)w2TZq>)Ep_E=6|!8< z6mOE1_E?9t$GeTGcq!Q;z72to``~R#3g}DzM!Cjk|J1#%26S#QR$G! z@|~8Gg($f%5w@o?KyK60Q_)6~wL_qfoT1}?px3`RF4k|h@aQ*Nn10sjh_A zpFW`7B=B!nDe%#U_K%?NqS2GsD6j)T@4*@t`;DibfzHNuEtc=p>`e5wxd|1**ur7I zmz$S|T3TB`C#rz{lE(X*f6Ik+;&fXWaBZJzSV>7%Va;mYA-tac_M7h*$oXU#=!S04 zS$ORYkBOwu#aEtsieh0tuzX`V$NLIcOVQnX0krapa`f)qI~1SrjHa%xcx|fve@BY- z`VY472XJAZi}(AOEF`thjtDnJkO<64(|bsH!gG!TXY5 zw}sUvn}8>>U%xEG&s9(OIuI_Hs1~y4~RVBzu3Ig6M!R>!Tlm+*zMwZ+9 zE&rDjJZ?Q*^*%2zH@YoMCd+uNUa8ad>$b4d#F4}M$A^Z7P!sTR1=vZTk2=7vF4I(3 z{$zXN=x9|{6@oR0J~k*%_{&KC!3#j=Yk%7oHqe?(N{XkAjE*9+Eha-)KBl_V)*`om z`0xSraue$9?S*}d+J~vSznfxt2U?9|dBS_&zhet)s48}8YpG0v&g+|Q3xhuN&dkaf z{{(tEJw25Mb21Ki|0P@h55~!W*WLBTtA`R26aHIlVXQZ>&c=EV>khpB{sBJ!QWe&J zaCXq~pJWUF)q!9;h4Fr?sJQ4q)fWC|=zq6`wY5|~V7-oQlX}>X{HNK%|8xLfE57SOY*!f>t?GLB zzU@EC7XB0be^-s|+Q*L{(f+q=;ol+i*E1|D4Ya9kK>z;@TllY|`};SrEgll`VDx{> z7XCdpe?5oy5vy0}^ie38-)-UPX9NG8w(wua_UCWl{S4T+*TBC3{%R$BCh-0GZ?=WM z_w(<#`F0lYyYr0y30wHzf%|_-8;E`p2#7*}I|5-6{FOKz0blXAl)&&cPxq?hjS==D zLlJ!^|2=j4mZwZBhvy~DT9|gs=IL@2LX4o=R~2n#z7nM~;6@C#hdkgfI9vFo2IR zfDXX-I4$gD{l^RIVC=_S41o9E+5oEo)_zOzSvdBgivwVPIc^1?OXK&j4-Ny)W0=b0 zIv^nZOoka!92bE7bXcaaf0y_TAffvpg%%158g4Q(MHsw&&$oz(F23&NbFS6?v;)12 zZRX6C@a!@Gya&Z`2N-AUJI4O+>43|yZw;T*U|g|}6DE<48^&o0mnl3r`1tuHalgrM zMu`2akHSMIz_&DkQ=G@;xE|ic@dT0pO8~Hs76bMJ(Sezn8RLh`FfA7W;249ccn^#( z#s}jvg$Krgb&0r`2#j;`6`UP^qJE~Iqji1irl&ZM%W*wCs|ldIM0nv54h{}IxX1XY zU=S1(IIOHFgWxQ1NI_2W_2R{XN1$95KneiQoe01J08AfD6O03%6AY|ZZ(c8j@s14+ z524G~uMThBv3>N?wJRey|1j(^?c(K2^^1fA&cOL!pT4d-A}h%@!h5R#Rs*b&mz6B@ z^m0Qn;CKA((nWk$hIn~-%%M&l0P~Lwz)}EA6HE(C2h1Co7f9}}ks?pcgM2|y5P+oo>oE2?AqN0Mg;N1-X8#UFG#<4#y6d)OXrx*Ii^uo9q z0AQZRbiz2``N6(#kmmpL-`()PRrJI7M=%|x#;>KN+I7TwKiz*94gS-p=qRM6r2;Vo z8}#N0%TjBIrR7_*Rq#p#5L!fAe;;d4D$l8%#Ih^QFmHh;z9AAQ(MM zj0azG9%^WAM6Dm+qsG?euQ5O1|9|i(7{S@l#G*wD9RLS)Zf^F~3Ubmf6y>FoApax% z38q`Oa!=>~#}VN)@Vk!VbUOdzIk&SrjtWbQ(EE-LbU$h(`0}uC75ld`x}opZ7%Tj8-8TDe(hW7t7@ykU;Pdhl$X$baX0^`)OZ+ zpXbumD<~p561{r;3avEIL`pK!o1jzNH}30a7g1S3CfLWv8#REhDGU7EPrw(B{bes8 zj$*p68?O%&6BB51auW3q4A5gGrhMIHKnEO8@eE>29ziUjp`ig%RhCbM4p{*HS>JSg zfUn!(?2>-={S@d{0%zlIn%<)6zUt3kdQr}+7iizUU1-f}eUuG;=rM>3!L*;EMQzg? zpg}J9x)diB6=l}{Y_LBogYyyakNBWm@Gs{V7NBN0-_8Y|n({T*ys4x6s6fs~ASTLy z46#_y2Q@J{5%mr9(_=Ak`~r?4c?0vHtEEaeF@Dz9&&nXSOATTHle9He#x`zPhw%9x z43q%0@1bLxFKzt`Bg!;C&31>h&1iUq;G%T+71vHrkx|H~KnV3B_w`2L|JXm(pt8KoO5=5_&@lM)reZm;uNU)xmzO)z)6tkzRaLAa zD@g5ucm8nxr`p6R^gn|4<#`ahFy*Vw20vgr;G?NYrh$xGD=97CrKzSo^cwgR$CFI? zYB3#Z8tOsz5>P>5AxZ>Zg19A23#@nk^uj)Te70UtR7m&5O!>vIzZlCF#Q2nymO!k83iVGr2A!y;rbNMdrnnShdf6#HdDA*LwqX&l17%Eyl% z;x#eu&-z!Bky#GsvfziJ(${#rC$Ffi1R3u~aX`Z#eVtE%9zXgz>)yf|2z`S8aa3Jh zp%uPSBd?`(Fy8T6H73k_~daYQg z`(fjj%?OvTH8MO3x?ngW@(HQ{zhGw|UOj{PsE63xb!%54SQmtT z*4NLkAlMTEkCr&prRo2-H-W0-5+NE zZ2Y+X4;%QKmA^9of3u4}d>zyJ&-nij8~B@*Api5G%Rk^Fj@JRa9^i7Q$9v%aZ!R|y z3)aPWePVHg{W%5ff+>JJ@mm=S7*7lUIOPNo8Yfr@AvY@qI0wPUAPlhC!u2>M1Gs{M z)&2^ykg7ml6H(#BV>;lI3cMlY1CRxnI;XJu?iGN-|Je)MM0ih%_l9`ij`#Tz-%^~% zs z8m}#5Wn(>tQ=G@;tJbW+_9{N7!FwQ_&H}*S4q(9dxD4B=xGmi8^nMto%V$(<%=oL^ z*AqCMuAkr?yuZf#OiVvXSpQqW=9wTX%jHXoFFwM;!m-@a=?HE-)sQtESjZh%->XRL+>moqRh zEac(g!Tj?5`Xl_^JY2`M09PFU4Y5|J6ux<&fZdn{afkV3g%Gn^kBZ^@8chu)1iq?% zOe@$sZT{Xk-255+H8hmzXFS;6#qsbs4zshn6XMU?!0vuU|K1>-k`Cj$iGm*n!8r~& z^N05T>H1y>HVxQTbQ?1QXoJ6Hh>D4%!MV>^LQ?!Vj#;I^Sg>6i852$a&IDouY17-s z_f!0DX1+BZ#xobE+S=;)+XEcyN5ipbx93bY%ZJoEZ{N~m;c%Nizg<9qaOPAF@nwxoP3Sq;T&^xoqhQzK zwdAK4=K1M*9M*~P2S9^nupzPSjQ96NCB>-c(=-_U^W2i~1j zAsK^TcGu&}G;QzaIV!EA~os$FK>&b4@ z*VD*^ekS1Co`xUVn!YCgQ1vzYNBHCQ57+gwxF_VxGC&pmO9^YH#3+77rLa$JvfJs!){n5OoQIRAJ1hc@u_FOUE0 z>-4{*ALviQI8UwF7|$vA!M6L}#8f>_rwXU$e|p=v-M=7HKOGyiKb?1`y8B&<@%Xd3 z{oM;cWbpfcHn%^#^1JNc?f+Y2|MK{!A@dJ&JFV`QZt+;AVEPMf@U`nZD4={RoB?@! bQ2=mx8_W{&{OW(7garjF0h~v -#include "resource.h" - -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL - -//IDI_ICON ICON "res/main.ico" -//IDI_TESTS ICON "res/tests.ico" - -//#include "lang/bg-BG.rc" -//#include "lang/ca-ES.rc" -//#include "lang/cs-CZ.rc" -#include "lang/en-US.rc" -//#include "lang/de-DE.rc" -//#include "lang/es-ES.rc" -//#include "lang/fr-FR.rc" -//#include "lang/id-ID.rc" -//#include "lang/it-IT.rc" -//#include "lang/ko-KO.rc" -//#include "lang/lt-LT.rc" -//#include "lang/nl-NL.rc" -//#include "lang/pl-PL.rc" -//#include "lang/pt-BR.rc" -//#include "lang/sk-SK.rc" -//#include "lang/uk-UA.rc" -//#include "lang/ru-RU.rc" -//#include "lang/el-GR.rc" diff --git a/rostests/winetests/advapi32/advapi32.rbuild b/rostests/winetests/advapi32/advapi32.rbuild deleted file mode 100644 index 7a056f0908e..00000000000 --- a/rostests/winetests/advapi32/advapi32.rbuild +++ /dev/null @@ -1,24 +0,0 @@ - - - - - . - - advapi32 - kernel32 - ntdll - uuid - ole32 - cred.c - crypt.c - crypt_lmhash.c - crypt_md4.c - crypt_md5.c - crypt_sha.c - lsa.c - registry.c - security.c - service.c - testlist.c - - diff --git a/rostests/winetests/advapi32/cred.c b/rostests/winetests/advapi32/cred.c deleted file mode 100644 index 1bb2545e47b..00000000000 --- a/rostests/winetests/advapi32/cred.c +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Credential Function Tests - * - * Copyright 2007 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 -#include - -#include "windef.h" -#include "winbase.h" -#include "wincred.h" - -#include "wine/test.h" - -static BOOL (WINAPI *pCredDeleteA)(LPCSTR,DWORD,DWORD); -static BOOL (WINAPI *pCredEnumerateA)(LPCSTR,DWORD,DWORD *,PCREDENTIALA **); -static VOID (WINAPI *pCredFree)(PVOID); -static BOOL (WINAPI *pCredGetSessionTypes)(DWORD,LPDWORD); -static BOOL (WINAPI *pCredReadA)(LPCSTR,DWORD,DWORD,PCREDENTIALA *); -static BOOL (WINAPI *pCredRenameA)(LPCSTR,LPCSTR,DWORD,DWORD); -static BOOL (WINAPI *pCredWriteA)(PCREDENTIALA,DWORD); - -#define TEST_TARGET_NAME "credtest.winehq.org" -#define TEST_TARGET_NAME2 "credtest2.winehq.org" -static const WCHAR TEST_PASSWORD[] = {'p','4','$','$','w','0','r','d','!',0}; - -static void test_CredReadA(void) -{ - BOOL ret; - PCREDENTIALA cred; - - SetLastError(0xdeadbeef); - ret = pCredReadA(TEST_TARGET_NAME, -1, 0, &cred); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "CredReadA should have failed with ERROR_INVALID_PARAMETER instead of %d\n", - GetLastError()); - - SetLastError(0xdeadbeef); - ret = pCredReadA(TEST_TARGET_NAME, CRED_TYPE_GENERIC, 0xdeadbeef, &cred); - ok(!ret && ( GetLastError() == ERROR_INVALID_FLAGS || GetLastError() == ERROR_INVALID_PARAMETER ), - "CredReadA should have failed with ERROR_INVALID_FLAGS or ERROR_INVALID_PARAMETER instead of %d\n", - GetLastError()); - - SetLastError(0xdeadbeef); - ret = pCredReadA(NULL, CRED_TYPE_GENERIC, 0, &cred); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "CredReadA should have failed with ERROR_INVALID_PARAMETER instead of %d\n", - GetLastError()); -} - -static void test_CredWriteA(void) -{ - CREDENTIALA new_cred; - BOOL ret; - - SetLastError(0xdeadbeef); - ret = pCredWriteA(NULL, 0); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "CredWriteA should have failed with ERROR_INVALID_PARAMETER instead of %d\n", - GetLastError()); - - new_cred.Flags = 0; - new_cred.Type = CRED_TYPE_GENERIC; - new_cred.TargetName = NULL; - new_cred.Comment = (char *)"Comment"; - new_cred.CredentialBlobSize = 0; - new_cred.CredentialBlob = NULL; - new_cred.Persist = CRED_PERSIST_ENTERPRISE; - new_cred.AttributeCount = 0; - new_cred.Attributes = NULL; - new_cred.TargetAlias = NULL; - new_cred.UserName = (char *)"winetest"; - - SetLastError(0xdeadbeef); - ret = pCredWriteA(&new_cred, 0); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "CredWriteA should have failed with ERROR_INVALID_PARAMETER instead of %d\n", - GetLastError()); - - new_cred.TargetName = (char *)TEST_TARGET_NAME; - new_cred.Type = CRED_TYPE_DOMAIN_PASSWORD; - - SetLastError(0xdeadbeef); - ret = pCredWriteA(&new_cred, 0); - ok(!ret, "CredWrite with username without domain should have failed\n"); - ok(GetLastError() == ERROR_BAD_USERNAME || - GetLastError() == ERROR_NO_SUCH_LOGON_SESSION || /* Vista */ - broken(GetLastError() == ERROR_IO_PENDING), - "CredWrite with username without domain should return ERROR_BAD_USERNAME" - "or ERROR_NO_SUCH_LOGON_SESSION not %d\n", GetLastError()); - - new_cred.UserName = NULL; - SetLastError(0xdeadbeef); - ret = pCredWriteA(&new_cred, 0); - ok(!ret && GetLastError() == ERROR_BAD_USERNAME, - "CredWriteA with NULL username should have failed with ERROR_BAD_USERNAME instead of %d\n", - GetLastError()); -} - -static void test_CredDeleteA(void) -{ - BOOL ret; - - SetLastError(0xdeadbeef); - ret = pCredDeleteA(TEST_TARGET_NAME, -1, 0); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "CredDeleteA should have failed with ERROR_INVALID_PARAMETER instead of %d\n", - GetLastError()); - - SetLastError(0xdeadbeef); - ret = pCredDeleteA(TEST_TARGET_NAME, CRED_TYPE_GENERIC, 0xdeadbeef); - ok(!ret && ( GetLastError() == ERROR_INVALID_FLAGS || GetLastError() == ERROR_INVALID_PARAMETER /* Vista */ ), - "CredDeleteA should have failed with ERROR_INVALID_FLAGS or ERROR_INVALID_PARAMETER instead of %d\n", - GetLastError()); -} - -static void check_blob(int line, DWORD cred_type, PCREDENTIALA cred) -{ - if (cred_type == CRED_TYPE_DOMAIN_PASSWORD) - { - todo_wine - ok_(__FILE__, line)(cred->CredentialBlobSize == 0, "expected CredentialBlobSize of 0 but got %d\n", cred->CredentialBlobSize); - todo_wine - ok_(__FILE__, line)(!cred->CredentialBlob, "expected NULL credentials but got %p\n", cred->CredentialBlob); - } - else - { - DWORD size=sizeof(TEST_PASSWORD); - ok_(__FILE__, line)(cred->CredentialBlobSize == size, "expected CredentialBlobSize of %u but got %u\n", size, cred->CredentialBlobSize); - ok_(__FILE__, line)(cred->CredentialBlob != NULL, "CredentialBlob should be present\n"); - if (cred->CredentialBlob) - ok_(__FILE__, line)(!memcmp(cred->CredentialBlob, TEST_PASSWORD, size), "wrong CredentialBlob\n"); - } -} - -static void test_generic(void) -{ - BOOL ret; - DWORD count, i; - PCREDENTIALA *creds; - CREDENTIALA new_cred; - PCREDENTIALA cred; - BOOL found = FALSE; - - new_cred.Flags = 0; - new_cred.Type = CRED_TYPE_GENERIC; - new_cred.TargetName = (char *)TEST_TARGET_NAME; - new_cred.Comment = (char *)"Comment"; - new_cred.CredentialBlobSize = sizeof(TEST_PASSWORD); - new_cred.CredentialBlob = (LPBYTE)TEST_PASSWORD; - new_cred.Persist = CRED_PERSIST_ENTERPRISE; - new_cred.AttributeCount = 0; - new_cred.Attributes = NULL; - new_cred.TargetAlias = NULL; - new_cred.UserName = (char *)"winetest"; - - ret = pCredWriteA(&new_cred, 0); - ok(ret, "CredWriteA failed with error %d\n", GetLastError()); - - ret = pCredEnumerateA(NULL, 0, &count, &creds); - ok(ret, "CredEnumerateA failed with error %d\n", GetLastError()); - - for (i = 0; i < count; i++) - { - if (!strcmp(creds[i]->TargetName, TEST_TARGET_NAME)) - { - ok(creds[i]->Type == CRED_TYPE_GENERIC || - creds[i]->Type == CRED_TYPE_DOMAIN_PASSWORD, /* Vista */ - "expected creds[%d]->Type CRED_TYPE_GENERIC or CRED_TYPE_DOMAIN_PASSWORD but got %d\n", i, creds[i]->Type); - ok(!creds[i]->Flags, "expected creds[%d]->Flags 0 but got 0x%x\n", i, creds[i]->Flags); - ok(!strcmp(creds[i]->Comment, "Comment"), "expected creds[%d]->Comment \"Comment\" but got \"%s\"\n", i, creds[i]->Comment); - check_blob(__LINE__, creds[i]->Type, creds[i]); - ok(creds[i]->Persist, "expected creds[%d]->Persist CRED_PERSIST_ENTERPRISE but got %d\n", i, creds[i]->Persist); - ok(!strcmp(creds[i]->UserName, "winetest"), "expected creds[%d]->UserName \"winetest\" but got \"%s\"\n", i, creds[i]->UserName); - found = TRUE; - } - } - pCredFree(creds); - ok(found, "credentials not found\n"); - - ret = pCredReadA(TEST_TARGET_NAME, CRED_TYPE_GENERIC, 0, &cred); - ok(ret, "CredReadA failed with error %d\n", GetLastError()); - pCredFree(cred); - - ret = pCredDeleteA(TEST_TARGET_NAME, CRED_TYPE_GENERIC, 0); - ok(ret, "CredDeleteA failed with error %d\n", GetLastError()); -} - -static void test_domain_password(DWORD cred_type) -{ - BOOL ret; - DWORD count, i; - PCREDENTIALA *creds; - CREDENTIALA new_cred; - PCREDENTIALA cred; - BOOL found = FALSE; - - new_cred.Flags = 0; - new_cred.Type = cred_type; - new_cred.TargetName = (char *)TEST_TARGET_NAME; - new_cred.Comment = (char *)"Comment"; - new_cred.CredentialBlobSize = sizeof(TEST_PASSWORD); - new_cred.CredentialBlob = (LPBYTE)TEST_PASSWORD; - new_cred.Persist = CRED_PERSIST_ENTERPRISE; - new_cred.AttributeCount = 0; - new_cred.Attributes = NULL; - new_cred.TargetAlias = NULL; - new_cred.UserName = (char *)"test\\winetest"; - ret = pCredWriteA(&new_cred, 0); - if (!ret && GetLastError() == ERROR_NO_SUCH_LOGON_SESSION) - { - skip("CRED_TYPE_DOMAIN_PASSWORD credentials are not supported " - "or are disabled. Skipping\n"); - return; - } - ok(ret, "CredWriteA failed with error %d\n", GetLastError()); - - ret = pCredEnumerateA(NULL, 0, &count, &creds); - ok(ret, "CredEnumerateA failed with error %d\n", GetLastError()); - - for (i = 0; i < count; i++) - { - if (!strcmp(creds[i]->TargetName, TEST_TARGET_NAME)) - { - ok(creds[i]->Type == cred_type, "expected creds[%d]->Type CRED_TYPE_DOMAIN_PASSWORD but got %d\n", i, creds[i]->Type); - ok(!creds[i]->Flags, "expected creds[%d]->Flags 0 but got 0x%x\n", i, creds[i]->Flags); - ok(!strcmp(creds[i]->Comment, "Comment"), "expected creds[%d]->Comment \"Comment\" but got \"%s\"\n", i, creds[i]->Comment); - check_blob(__LINE__, cred_type, creds[i]); - ok(creds[i]->Persist, "expected creds[%d]->Persist CRED_PERSIST_ENTERPRISE but got %d\n", i, creds[i]->Persist); - ok(!strcmp(creds[i]->UserName, "test\\winetest"), "expected creds[%d]->UserName \"winetest\" but got \"%s\"\n", i, creds[i]->UserName); - found = TRUE; - } - } - pCredFree(creds); - ok(found, "credentials not found\n"); - - ret = pCredReadA(TEST_TARGET_NAME, cred_type, 0, &cred); - ok(ret, "CredReadA failed with error %d\n", GetLastError()); - if (ret) /* don't check the values of cred, if CredReadA failed. */ - { - check_blob(__LINE__, cred_type, cred); - pCredFree(cred); - } - - ret = pCredDeleteA(TEST_TARGET_NAME, cred_type, 0); - ok(ret, "CredDeleteA failed with error %d\n", GetLastError()); -} - -START_TEST(cred) -{ - DWORD persists[CRED_TYPE_MAXIMUM]; - - pCredEnumerateA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredEnumerateA"); - pCredFree = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredFree"); - pCredGetSessionTypes = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredGetSessionTypes"); - pCredWriteA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredWriteA"); - pCredDeleteA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredDeleteA"); - pCredReadA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredReadA"); - pCredRenameA = (void *)GetProcAddress(GetModuleHandle("advapi32.dll"), "CredRenameA"); - - if (!pCredEnumerateA || !pCredFree || !pCredWriteA || !pCredDeleteA || - !pCredReadA) - { - skip("credentials functions not present in advapi32.dll\n"); - return; - } - - if (pCredGetSessionTypes) - { - BOOL ret; - DWORD i; - ret = pCredGetSessionTypes(CRED_TYPE_MAXIMUM, persists); - ok(ret, "CredGetSessionTypes failed with error %d\n", GetLastError()); - ok(persists[0] == CRED_PERSIST_NONE, "persists[0] = %u instead of CRED_PERSIST_NONE\n", persists[0]); - for (i=0; i < CRED_TYPE_MAXIMUM; i++) - ok(persists[i] <= CRED_PERSIST_ENTERPRISE, "bad value for persists[%u]: %u\n", i, persists[i]); - } - else - memset(persists, CRED_PERSIST_ENTERPRISE, sizeof(persists)); - - test_CredReadA(); - test_CredWriteA(); - test_CredDeleteA(); - - trace("generic:\n"); - if (persists[CRED_TYPE_GENERIC] == CRED_PERSIST_NONE) - skip("CRED_TYPE_GENERIC credentials are not supported or are disabled. Skipping\n"); - else - test_generic(); - - trace("domain password:\n"); - if (persists[CRED_TYPE_DOMAIN_PASSWORD] == CRED_PERSIST_NONE) - skip("CRED_TYPE_DOMAIN_PASSWORD credentials are not supported or are disabled. Skipping\n"); - else - test_domain_password(CRED_TYPE_DOMAIN_PASSWORD); - - trace("domain visible password:\n"); - if (persists[CRED_TYPE_DOMAIN_VISIBLE_PASSWORD] == CRED_PERSIST_NONE) - skip("CRED_TYPE_DOMAIN_VISIBLE_PASSWORD credentials are not supported or are disabled. Skipping\n"); - else - test_domain_password(CRED_TYPE_DOMAIN_VISIBLE_PASSWORD); -} diff --git a/rostests/winetests/advapi32/crypt.c b/rostests/winetests/advapi32/crypt.c deleted file mode 100644 index 1d2cfa2d971..00000000000 --- a/rostests/winetests/advapi32/crypt.c +++ /dev/null @@ -1,930 +0,0 @@ -/* - * Unit tests for crypt functions - * - * Copyright (c) 2004 Michael Jung - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wincrypt.h" -#include "winerror.h" -#include "winreg.h" - -#include "wine/test.h" - -static const char szRsaBaseProv[] = MS_DEF_PROV_A; -static const char szNonExistentProv[] = "Wine Nonexistent Cryptographic Provider v11.2"; -static const char szKeySet[] = "wine_test_keyset"; -static const char szBadKeySet[] = "wine_test_bad_keyset"; -#define NON_DEF_PROV_TYPE 999 - -static BOOL (WINAPI *pCryptAcquireContextA)(HCRYPTPROV*,LPCSTR,LPCSTR,DWORD,DWORD); -static BOOL (WINAPI *pCryptEnumProviderTypesA)(DWORD, DWORD*, DWORD, DWORD*, LPSTR, DWORD*); -static BOOL (WINAPI *pCryptEnumProvidersA)(DWORD, DWORD*, DWORD, DWORD*, LPSTR, DWORD*); -static BOOL (WINAPI *pCryptGetDefaultProviderA)(DWORD, DWORD*, DWORD, LPSTR, DWORD*); -static BOOL (WINAPI *pCryptReleaseContext)(HCRYPTPROV, DWORD); -static BOOL (WINAPI *pCryptSetProviderExA)(LPCSTR, DWORD, DWORD*, DWORD); -static BOOL (WINAPI *pCryptCreateHash)(HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH*); -static BOOL (WINAPI *pCryptDestroyHash)(HCRYPTHASH); -static BOOL (WINAPI *pCryptGenRandom)(HCRYPTPROV, DWORD, BYTE*); -static BOOL (WINAPI *pCryptContextAddRef)(HCRYPTPROV, DWORD*, DWORD dwFlags); -static BOOL (WINAPI *pCryptGenKey)(HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY*); -static BOOL (WINAPI *pCryptDestroyKey)(HCRYPTKEY); -static BOOL (WINAPI *pCryptDecrypt)(HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE*, DWORD*); -static BOOL (WINAPI *pCryptDeriveKey)(HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY*); -static BOOL (WINAPI *pCryptDuplicateHash)(HCRYPTHASH, DWORD*, DWORD, HCRYPTHASH*); -static BOOL (WINAPI *pCryptDuplicateKey)(HCRYPTKEY, DWORD*, DWORD, HCRYPTKEY*); -static BOOL (WINAPI *pCryptEncrypt)(HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE*, DWORD*, DWORD); -static BOOL (WINAPI *pCryptExportKey)(HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, BYTE*, DWORD*); -static BOOL (WINAPI *pCryptGetHashParam)(HCRYPTHASH, DWORD, BYTE*, DWORD*, DWORD); -static BOOL (WINAPI *pCryptGetKeyParam)(HCRYPTKEY, DWORD, BYTE*, DWORD*, DWORD); -static BOOL (WINAPI *pCryptGetProvParam)(HCRYPTPROV, DWORD, BYTE*, DWORD*, DWORD); -static BOOL (WINAPI *pCryptGetUserKey)(HCRYPTPROV, DWORD, HCRYPTKEY*); -static BOOL (WINAPI *pCryptHashData)(HCRYPTHASH, BYTE*, DWORD, DWORD); -static BOOL (WINAPI *pCryptHashSessionKey)(HCRYPTHASH, HCRYPTKEY, DWORD); -static BOOL (WINAPI *pCryptImportKey)(HCRYPTPROV, BYTE*, DWORD, HCRYPTKEY, DWORD, HCRYPTKEY*); -static BOOL (WINAPI *pCryptSignHashW)(HCRYPTHASH, DWORD, LPCWSTR, DWORD, BYTE*, DWORD*); -static BOOL (WINAPI *pCryptSetHashParam)(HCRYPTKEY, DWORD, BYTE*, DWORD); -static BOOL (WINAPI *pCryptSetKeyParam)(HCRYPTKEY, DWORD, BYTE*, DWORD); -static BOOL (WINAPI *pCryptSetProvParam)(HCRYPTPROV, DWORD, BYTE*, DWORD); -static BOOL (WINAPI *pCryptVerifySignatureW)(HCRYPTHASH, BYTE*, DWORD, HCRYPTKEY, LPCWSTR, DWORD); - -static void init_function_pointers(void) -{ - HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll"); - - pCryptAcquireContextA = (void*)GetProcAddress(hadvapi32, "CryptAcquireContextA"); - pCryptEnumProviderTypesA = (void*)GetProcAddress(hadvapi32, "CryptEnumProviderTypesA"); - pCryptEnumProvidersA = (void*)GetProcAddress(hadvapi32, "CryptEnumProvidersA"); - pCryptGetDefaultProviderA = (void*)GetProcAddress(hadvapi32, "CryptGetDefaultProviderA"); - pCryptReleaseContext = (void*)GetProcAddress(hadvapi32, "CryptReleaseContext"); - pCryptSetProviderExA = (void*)GetProcAddress(hadvapi32, "CryptSetProviderExA"); - pCryptCreateHash = (void*)GetProcAddress(hadvapi32, "CryptCreateHash"); - pCryptDestroyHash = (void*)GetProcAddress(hadvapi32, "CryptDestroyHash"); - pCryptGenRandom = (void*)GetProcAddress(hadvapi32, "CryptGenRandom"); - pCryptContextAddRef = (void*)GetProcAddress(hadvapi32, "CryptContextAddRef"); - pCryptGenKey = (void*)GetProcAddress(hadvapi32, "CryptGenKey"); - pCryptDestroyKey = (void*)GetProcAddress(hadvapi32, "CryptDestroyKey"); - pCryptDecrypt = (void*)GetProcAddress(hadvapi32, "CryptDecrypt"); - pCryptDeriveKey = (void*)GetProcAddress(hadvapi32, "CryptDeriveKey"); - pCryptDuplicateHash = (void*)GetProcAddress(hadvapi32, "CryptDuplicateHash"); - pCryptDuplicateKey = (void*)GetProcAddress(hadvapi32, "CryptDuplicateKey"); - pCryptEncrypt = (void*)GetProcAddress(hadvapi32, "CryptEncrypt"); - pCryptExportKey = (void*)GetProcAddress(hadvapi32, "CryptExportKey"); - pCryptGetHashParam = (void*)GetProcAddress(hadvapi32, "CryptGetHashParam"); - pCryptGetKeyParam = (void*)GetProcAddress(hadvapi32, "CryptGetKeyParam"); - pCryptGetProvParam = (void*)GetProcAddress(hadvapi32, "CryptGetProvParam"); - pCryptGetUserKey = (void*)GetProcAddress(hadvapi32, "CryptGetUserKey"); - pCryptHashData = (void*)GetProcAddress(hadvapi32, "CryptHashData"); - pCryptHashSessionKey = (void*)GetProcAddress(hadvapi32, "CryptHashSessionKey"); - pCryptImportKey = (void*)GetProcAddress(hadvapi32, "CryptImportKey"); - pCryptSignHashW = (void*)GetProcAddress(hadvapi32, "CryptSignHashW"); - pCryptSetHashParam = (void*)GetProcAddress(hadvapi32, "CryptSetHashParam"); - pCryptSetKeyParam = (void*)GetProcAddress(hadvapi32, "CryptSetKeyParam"); - pCryptSetProvParam = (void*)GetProcAddress(hadvapi32, "CryptSetProvParam"); - pCryptVerifySignatureW = (void*)GetProcAddress(hadvapi32, "CryptVerifySignatureW"); -} - -static void init_environment(void) -{ - HCRYPTPROV hProv; - - /* Ensure that container "wine_test_keyset" does exist */ - if (!pCryptAcquireContextA(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0)) - { - pCryptAcquireContextA(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, CRYPT_NEWKEYSET); - } - pCryptReleaseContext(hProv, 0); - - /* Ensure that container "wine_test_keyset" does exist in default PROV_RSA_FULL type provider */ - if (!pCryptAcquireContextA(&hProv, szKeySet, NULL, PROV_RSA_FULL, 0)) - { - pCryptAcquireContextA(&hProv, szKeySet, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET); - } - pCryptReleaseContext(hProv, 0); - - /* Ensure that container "wine_test_bad_keyset" does not exist. */ - if (pCryptAcquireContextA(&hProv, szBadKeySet, szRsaBaseProv, PROV_RSA_FULL, 0)) - { - pCryptReleaseContext(hProv, 0); - pCryptAcquireContextA(&hProv, szBadKeySet, szRsaBaseProv, PROV_RSA_FULL, CRYPT_DELETEKEYSET); - } -} - -static void clean_up_environment(void) -{ - HCRYPTPROV hProv; - - /* Remove container "wine_test_keyset" */ - if (pCryptAcquireContextA(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0)) - { - pCryptReleaseContext(hProv, 0); - pCryptAcquireContextA(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, CRYPT_DELETEKEYSET); - } - - /* Remove container "wine_test_keyset" from default PROV_RSA_FULL type provider */ - if (pCryptAcquireContextA(&hProv, szKeySet, NULL, PROV_RSA_FULL, 0)) - { - pCryptReleaseContext(hProv, 0); - pCryptAcquireContextA(&hProv, szKeySet, NULL, PROV_RSA_FULL, CRYPT_DELETEKEYSET); - } -} - -static void test_acquire_context(void) -{ - BOOL result; - HCRYPTPROV hProv; - DWORD GLE; - - /* Provoke all kinds of error conditions (which are easy to provoke). - * The order of the error tests seems to match Windows XP's rsaenh.dll CSP, - * but since this is likely to change between CSP versions, we don't check - * this. Please don't change the order of tests. */ - result = pCryptAcquireContextA(&hProv, NULL, NULL, 0, 0); - ok(!result && GetLastError()==NTE_BAD_PROV_TYPE, "%d\n", GetLastError()); - - result = pCryptAcquireContextA(&hProv, NULL, NULL, 1000, 0); - ok(!result && GetLastError()==NTE_BAD_PROV_TYPE, "%d\n", GetLastError()); - - result = pCryptAcquireContextA(&hProv, NULL, NULL, NON_DEF_PROV_TYPE, 0); - ok(!result && GetLastError()==NTE_PROV_TYPE_NOT_DEF, "%d\n", GetLastError()); - - result = pCryptAcquireContextA(&hProv, szKeySet, szNonExistentProv, PROV_RSA_FULL, 0); - ok(!result && GetLastError()==NTE_KEYSET_NOT_DEF, "%d\n", GetLastError()); - - result = pCryptAcquireContextA(&hProv, szKeySet, szRsaBaseProv, NON_DEF_PROV_TYPE, 0); - ok(!result && GetLastError()==NTE_PROV_TYPE_NO_MATCH, "%d\n", GetLastError()); - - /* This test fails under Win2k SP4: - result = TRUE, GetLastError() == ERROR_INVALID_PARAMETER - SetLastError(0xdeadbeef); - result = pCryptAcquireContextA(NULL, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0); - ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "%d/%d\n", result, GetLastError()); - */ - - /* Last not least, try to really acquire a context. */ - hProv = 0; - SetLastError(0xdeadbeef); - result = pCryptAcquireContextA(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0); - GLE = GetLastError(); - ok(result && (GLE == ERROR_ENVVAR_NOT_FOUND || - GLE == ERROR_SUCCESS || - GLE == ERROR_RING2_STACK_IN_USE || - GLE == NTE_FAIL || - GLE == ERROR_NOT_LOGGED_ON), "%d/%d\n", result, GLE); - - if (hProv) - pCryptReleaseContext(hProv, 0); - - /* Try again, witch an empty ("\0") szProvider parameter */ - hProv = 0; - SetLastError(0xdeadbeef); - result = pCryptAcquireContextA(&hProv, szKeySet, "", PROV_RSA_FULL, 0); - GLE = GetLastError(); - ok(result && (GLE == ERROR_ENVVAR_NOT_FOUND || - GLE == ERROR_SUCCESS || - GLE == ERROR_RING2_STACK_IN_USE || - GLE == NTE_FAIL || - GLE == ERROR_NOT_LOGGED_ON), "%d/%d\n", result, GetLastError()); - - if (hProv) - pCryptReleaseContext(hProv, 0); -} - -static void test_incorrect_api_usage(void) -{ - BOOL result; - HCRYPTPROV hProv, hProv2; - HCRYPTHASH hHash, hHash2; - HCRYPTKEY hKey, hKey2; - BYTE temp; - DWORD dwLen, dwTemp; - - /* This is to document incorrect api usage in the - * "Uru - Ages beyond Myst Demo" installer as reported by Paul Vriens. - * - * The installer destroys a hash object after having released the context - * with which the hash was created. This is not allowed according to MSDN, - * since CryptReleaseContext destroys all hash and key objects belonging to - * the respective context. However, while wine used to crash, Windows is more - * robust here and returns an ERROR_INVALID_PARAMETER code. - */ - - result = pCryptAcquireContextA(&hProv, szBadKeySet, szRsaBaseProv, - PROV_RSA_FULL, CRYPT_NEWKEYSET); - ok (result, "%08x\n", GetLastError()); - if (!result) return; - - result = pCryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash); - ok (result, "%d\n", GetLastError()); - if (!result) return; - - result = pCryptGenKey(hProv, CALG_RC4, 0, &hKey); - ok (result, "%d\n", GetLastError()); - if (!result) return; - - result = pCryptGenKey(hProv, CALG_RC4, 0, &hKey2); - ok (result, "%d\n", GetLastError()); - if (!result) return; - - result = pCryptDestroyKey(hKey2); - ok (result, "%d\n", GetLastError()); - - dwTemp = CRYPT_MODE_ECB; - result = pCryptSetKeyParam(hKey2, KP_MODE, (BYTE*)&dwTemp, sizeof(DWORD)); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptAcquireContextA(&hProv2, szBadKeySet, NULL, PROV_RSA_FULL, - CRYPT_DELETEKEYSET); - ok (result, "%d\n", GetLastError()); - if (!result) return; - - result = pCryptReleaseContext(hProv, 0); - ok (result, "%d\n", GetLastError()); - if (!result) return; - - result = pCryptReleaseContext(hProv, 0); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptGenRandom(hProv, 1, &temp); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - -#ifdef CRASHES_ON_NT40 - result = pCryptContextAddRef(hProv, NULL, 0); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); -#endif - - result = pCryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash2); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - dwLen = 1; - result = pCryptDecrypt(hKey, (HCRYPTHASH)NULL, TRUE, 0, &temp, &dwLen); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - dwLen = 1; - result = pCryptEncrypt(hKey, (HCRYPTHASH)NULL, TRUE, 0, &temp, &dwLen, 1); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptDeriveKey(hProv, CALG_RC4, hHash, 0, &hKey2); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - -#ifdef CRASHES_ON_NT40 - result = pCryptDuplicateHash(hHash, NULL, 0, &hHash2); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptDuplicateKey(hKey, NULL, 0, &hKey2); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); -#endif - - dwLen = 1; - result = pCryptExportKey(hKey, (HCRYPTPROV)NULL, 0, 0, &temp, &dwLen); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptGenKey(hProv, CALG_RC4, 0, &hKey2); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - dwLen = 1; - result = pCryptGetHashParam(hHash, 0, &temp, &dwLen, 0); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - dwLen = 1; - result = pCryptGetKeyParam(hKey, 0, &temp, &dwLen, 0); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - dwLen = 1; - result = pCryptGetProvParam(hProv, 0, &temp, &dwLen, 0); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptGetUserKey(hProv, 0, &hKey2); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptHashData(hHash, &temp, 1, 0); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptHashSessionKey(hHash, hKey, 0); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptImportKey(hProv, &temp, 1, (HCRYPTKEY)NULL, 0, &hKey2); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - if (pCryptSignHashW) - { - dwLen = 1; - result = pCryptSignHashW(hHash, 0, NULL, 0, &temp, &dwLen); - ok (!result && (GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_CALL_NOT_IMPLEMENTED), "%d\n", GetLastError()); - } - else - skip("CryptSignHashW is not available\n"); - - result = pCryptSetKeyParam(hKey, 0, &temp, 1); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptSetHashParam(hHash, 0, &temp, 1); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptSetProvParam(hProv, 0, &temp, 1); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - if (pCryptVerifySignatureW) - { - result = pCryptVerifySignatureW(hHash, &temp, 1, hKey, NULL, 0); - ok (!result && (GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_CALL_NOT_IMPLEMENTED), "%d\n", GetLastError()); - } - else - skip("CryptVerifySignatureW is not available\n"); - - result = pCryptDestroyHash(hHash); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - result = pCryptDestroyKey(hKey); - ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); -} - -static const BYTE privKey[] = { - 0x07, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53, 0x41, 0x32, 0x00, - 0x02, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x79, 0x10, 0x1c, 0xd0, 0x6b, 0x10, - 0x18, 0x30, 0x94, 0x61, 0xdc, 0x0e, 0xcb, 0x96, 0x4e, 0x21, 0x3f, 0x79, 0xcd, - 0xa9, 0x17, 0x62, 0xbc, 0xbb, 0x61, 0x4c, 0xe0, 0x75, 0x38, 0x6c, 0xf3, 0xde, - 0x60, 0x86, 0x03, 0x97, 0x65, 0xeb, 0x1e, 0x6b, 0xdb, 0x53, 0x85, 0xad, 0x68, - 0x21, 0xf1, 0x5d, 0xe7, 0x1f, 0xe6, 0x53, 0xb4, 0xbb, 0x59, 0x3e, 0x14, 0x27, - 0xb1, 0x83, 0xa7, 0x3a, 0x54, 0xe2, 0x8f, 0x65, 0x8e, 0x6a, 0x4a, 0xcf, 0x3b, - 0x1f, 0x65, 0xff, 0xfe, 0xf1, 0x31, 0x3a, 0x37, 0x7a, 0x8b, 0xcb, 0xc6, 0xd4, - 0x98, 0x50, 0x36, 0x67, 0xe4, 0xa1, 0xe8, 0x7e, 0x8a, 0xc5, 0x23, 0xf2, 0x77, - 0xf5, 0x37, 0x61, 0x49, 0x72, 0x59, 0xe8, 0x3d, 0xf7, 0x60, 0xb2, 0x77, 0xca, - 0x78, 0x54, 0x6d, 0x65, 0x9e, 0x03, 0x97, 0x1b, 0x61, 0xbd, 0x0c, 0xd8, 0x06, - 0x63, 0xe2, 0xc5, 0x48, 0xef, 0xb3, 0xe2, 0x6e, 0x98, 0x7d, 0xbd, 0x4e, 0x72, - 0x91, 0xdb, 0x31, 0x57, 0xe3, 0x65, 0x3a, 0x49, 0xca, 0xec, 0xd2, 0x02, 0x4e, - 0x22, 0x7e, 0x72, 0x8e, 0xf9, 0x79, 0x84, 0x82, 0xdf, 0x7b, 0x92, 0x2d, 0xaf, - 0xc9, 0xe4, 0x33, 0xef, 0x89, 0x5c, 0x66, 0x99, 0xd8, 0x80, 0x81, 0x47, 0x2b, - 0xb1, 0x66, 0x02, 0x84, 0x59, 0x7b, 0xc3, 0xbe, 0x98, 0x45, 0x4a, 0x3d, 0xdd, - 0xea, 0x2b, 0xdf, 0x4e, 0xb4, 0x24, 0x6b, 0xec, 0xe7, 0xd9, 0x0c, 0x45, 0xb8, - 0xbe, 0xca, 0x69, 0x37, 0x92, 0x4c, 0x38, 0x6b, 0x96, 0x6d, 0xcd, 0x86, 0x67, - 0x5c, 0xea, 0x54, 0x94, 0xa4, 0xca, 0xa4, 0x02, 0xa5, 0x21, 0x4d, 0xae, 0x40, - 0x8f, 0x9d, 0x51, 0x83, 0xf2, 0x3f, 0x33, 0xc1, 0x72, 0xb4, 0x1d, 0x94, 0x6e, - 0x7d, 0xe4, 0x27, 0x3f, 0xea, 0xff, 0xe5, 0x9b, 0xa7, 0x5e, 0x55, 0x8e, 0x0d, - 0x69, 0x1c, 0x7a, 0xff, 0x81, 0x9d, 0x53, 0x52, 0x97, 0x9a, 0x76, 0x79, 0xda, - 0x93, 0x32, 0x16, 0xec, 0x69, 0x51, 0x1a, 0x4e, 0xc3, 0xf1, 0x72, 0x80, 0x78, - 0x5e, 0x66, 0x4a, 0x8d, 0x85, 0x2f, 0x3f, 0xb2, 0xa7 }; - -static void test_verify_sig(void) -{ - BOOL ret; - HCRYPTPROV prov; - HCRYPTKEY key; - HCRYPTHASH hash; - BYTE bogus[] = { 0 }; - - if (!pCryptVerifySignatureW) - { - skip("CryptVerifySignatureW is not available\n"); - return; - } - - SetLastError(0xdeadbeef); - ret = pCryptVerifySignatureW(0, NULL, 0, 0, NULL, 0); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("CryptVerifySignatureW is not implemented\n"); - return; - } - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - ret = pCryptAcquireContextA(&prov, szKeySet, NULL, PROV_RSA_FULL, - CRYPT_NEWKEYSET); - if (!ret && GetLastError() == NTE_EXISTS) - ret = pCryptAcquireContextA(&prov, szKeySet, NULL, PROV_RSA_FULL, 0); - ret = pCryptImportKey(prov, (LPBYTE)privKey, sizeof(privKey), 0, 0, &key); - ok(ret, "CryptImportKey failed: %08x\n", GetLastError()); - ret = pCryptCreateHash(prov, CALG_MD5, 0, 0, &hash); - ok(ret, "CryptCreateHash failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pCryptVerifySignatureW(hash, NULL, 0, 0, NULL, 0); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pCryptVerifySignatureW(0, NULL, 0, key, NULL, 0); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pCryptVerifySignatureW(hash, NULL, 0, key, NULL, 0); - ok(!ret && (GetLastError() == NTE_BAD_SIGNATURE || - GetLastError() == ERROR_INVALID_PARAMETER), - "Expected NTE_BAD_SIGNATURE or ERROR_INVALID_PARAMETER, got %08x\n", - GetLastError()); - SetLastError(0xdeadbeef); - ret = pCryptVerifySignatureW(hash, NULL, sizeof(bogus), key, NULL, 0); - ok(!ret && (GetLastError() == NTE_BAD_SIGNATURE || - GetLastError() == ERROR_INVALID_PARAMETER), - "Expected NTE_BAD_SIGNATURE or ERROR_INVALID_PARAMETER, got %08x\n", - GetLastError()); - SetLastError(0xdeadbeef); - ret = pCryptVerifySignatureW(hash, bogus, 0, key, NULL, 0); - ok(!ret && GetLastError() == NTE_BAD_SIGNATURE, - "Expected NTE_BAD_SIGNATURE, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pCryptVerifySignatureW(hash, bogus, sizeof(bogus), key, NULL, 0); - ok(!ret && GetLastError() == NTE_BAD_SIGNATURE, - "Expected NTE_BAD_SIGNATURE, got %08x\n", GetLastError()); - pCryptDestroyKey(key); - pCryptDestroyHash(hash); - pCryptReleaseContext(prov, 0); -} - -static BOOL FindProvRegVals(DWORD dwIndex, DWORD *pdwProvType, LPSTR *pszProvName, - DWORD *pcbProvName, DWORD *pdwProvCount) -{ - HKEY hKey; - HKEY subkey; - DWORD size = sizeof(DWORD); - - if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Cryptography\\Defaults\\Provider", &hKey)) - return FALSE; - - RegQueryInfoKey(hKey, NULL, NULL, NULL, pdwProvCount, pcbProvName, - NULL, NULL, NULL, NULL, NULL, NULL); - (*pcbProvName)++; - - if (!(*pszProvName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, *pcbProvName)))) - return FALSE; - - RegEnumKeyEx(hKey, dwIndex, *pszProvName, pcbProvName, NULL, NULL, NULL, NULL); - (*pcbProvName)++; - - RegOpenKey(hKey, *pszProvName, &subkey); - RegQueryValueEx(subkey, "Type", NULL, NULL, (LPBYTE)pdwProvType, &size); - - RegCloseKey(subkey); - RegCloseKey(hKey); - - return TRUE; -} - -static void test_enum_providers(void) -{ - /* expected results */ - CHAR *pszProvName = NULL; - DWORD cbName; - DWORD dwType; - DWORD provCount; - DWORD dwIndex = 0; - - /* actual results */ - CHAR *provider = NULL; - DWORD providerLen; - DWORD type; - DWORD count; - DWORD result; - DWORD notNull = 5; - DWORD notZeroFlags = 5; - - if(!pCryptEnumProvidersA) - { - skip("CryptEnumProvidersA is not available\n"); - return; - } - - if (!FindProvRegVals(dwIndex, &dwType, &pszProvName, &cbName, &provCount)) - { - skip("Could not find providers in registry\n"); - return; - } - - /* check pdwReserved flag for NULL */ - result = pCryptEnumProvidersA(dwIndex, ¬Null, 0, &type, NULL, &providerLen); - ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "%d\n", GetLastError()); - - /* check dwFlags == 0 */ - result = pCryptEnumProvidersA(dwIndex, NULL, notZeroFlags, &type, NULL, &providerLen); - ok(!result && GetLastError()==NTE_BAD_FLAGS, "%d\n", GetLastError()); - - /* alloc provider to half the size required - * cbName holds the size required */ - providerLen = cbName / 2; - if (!(provider = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, providerLen)))) - return; - - result = pCryptEnumProvidersA(dwIndex, NULL, 0, &type, provider, &providerLen); - ok(!result && GetLastError()==ERROR_MORE_DATA, "expected %i, got %d\n", - ERROR_MORE_DATA, GetLastError()); - - LocalFree(provider); - - /* loop through the providers to get the number of providers - * after loop ends, count should be provCount + 1 so subtract 1 - * to get actual number of providers */ - count = 0; - while(pCryptEnumProvidersA(count++, NULL, 0, &type, NULL, &providerLen)) - ; - count--; - ok(count==provCount, "expected %i, got %i\n", (int)provCount, (int)count); - - /* loop past the actual number of providers to get the error - * ERROR_NO_MORE_ITEMS */ - for (count = 0; count < provCount + 1; count++) - result = pCryptEnumProvidersA(count, NULL, 0, &type, NULL, &providerLen); - ok(!result && GetLastError()==ERROR_NO_MORE_ITEMS, "expected %i, got %d\n", - ERROR_NO_MORE_ITEMS, GetLastError()); - - /* check expected versus actual values returned */ - result = pCryptEnumProvidersA(dwIndex, NULL, 0, &type, NULL, &providerLen); - ok(result && providerLen==cbName, "expected %i, got %i\n", (int)cbName, (int)providerLen); - if (!(provider = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, providerLen)))) - return; - - providerLen = 0xdeadbeef; - result = pCryptEnumProvidersA(dwIndex, NULL, 0, &type, provider, &providerLen); - ok(result, "expected TRUE, got %d\n", result); - ok(type==dwType, "expected %d, got %d\n", dwType, type); - if (pszProvName) - ok(!strcmp(pszProvName, provider), "expected %s, got %s\n", pszProvName, provider); - ok(cbName==providerLen, "expected %d, got %d\n", cbName, providerLen); - - LocalFree(provider); -} - -static BOOL FindProvTypesRegVals(DWORD dwIndex, DWORD *pdwProvType, LPSTR *pszTypeName, - DWORD *pcbTypeName, DWORD *pdwTypeCount) -{ - HKEY hKey; - HKEY hSubKey; - PSTR ch; - - if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Cryptography\\Defaults\\Provider Types", &hKey)) - return FALSE; - - if (RegQueryInfoKey(hKey, NULL, NULL, NULL, pdwTypeCount, pcbTypeName, NULL, - NULL, NULL, NULL, NULL, NULL)) - return FALSE; - (*pcbTypeName)++; - - if (!(*pszTypeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, *pcbTypeName)))) - return FALSE; - - if (RegEnumKeyEx(hKey, dwIndex, *pszTypeName, pcbTypeName, NULL, NULL, NULL, NULL)) - return FALSE; - (*pcbTypeName)++; - ch = *pszTypeName + strlen(*pszTypeName); - /* Convert "Type 000" to 0, etc/ */ - *pdwProvType = *(--ch) - '0'; - *pdwProvType += (*(--ch) - '0') * 10; - *pdwProvType += (*(--ch) - '0') * 100; - - if (RegOpenKey(hKey, *pszTypeName, &hSubKey)) - return FALSE; - - if (RegQueryValueEx(hSubKey, "TypeName", NULL, NULL, NULL, pcbTypeName)) - return FALSE; - - if (!(*pszTypeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, *pcbTypeName)))) - return FALSE; - - if (RegQueryValueEx(hSubKey, "TypeName", NULL, NULL, (LPBYTE)*pszTypeName, pcbTypeName)) - return FALSE; - - RegCloseKey(hSubKey); - RegCloseKey(hKey); - - return TRUE; -} - -static void test_enum_provider_types(void) -{ - /* expected values */ - DWORD dwProvType; - LPSTR pszTypeName = NULL; - DWORD cbTypeName; - DWORD dwTypeCount; - - /* actual values */ - DWORD index = 0; - DWORD provType; - LPSTR typeName = NULL; - DWORD typeNameSize; - DWORD typeCount; - DWORD result; - DWORD notNull = 5; - DWORD notZeroFlags = 5; - - if(!pCryptEnumProviderTypesA) - { - skip("CryptEnumProviderTypesA is not available\n"); - return; - } - - if (!FindProvTypesRegVals(index, &dwProvType, &pszTypeName, &cbTypeName, &dwTypeCount)) - { - skip("Could not find provider types in registry\n"); - return; - } - - /* check pdwReserved for NULL */ - result = pCryptEnumProviderTypesA(index, ¬Null, 0, &provType, typeName, &typeNameSize); - ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "expected %i, got %d\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - /* check dwFlags == zero */ - result = pCryptEnumProviderTypesA(index, NULL, notZeroFlags, &provType, typeName, &typeNameSize); - ok(!result && GetLastError()==NTE_BAD_FLAGS, "expected %i, got %d\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - /* alloc provider type to half the size required - * cbTypeName holds the size required */ - typeNameSize = cbTypeName / 2; - if (!(typeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, typeNameSize)))) - return; - - /* This test fails under Win2k SP4: - result = TRUE, GetLastError() == 0xdeadbeef - SetLastError(0xdeadbeef); - result = pCryptEnumProviderTypesA(index, NULL, 0, &provType, typeName, &typeNameSize); - ok(!result && GetLastError()==ERROR_MORE_DATA, "expected 0/ERROR_MORE_DATA, got %d/%08lx\n", - result, GetLastError()); - */ - - LocalFree(typeName); - - /* loop through the provider types to get the number of provider types - * after loop ends, count should be dwTypeCount + 1 so subtract 1 - * to get actual number of provider types */ - typeCount = 0; - while(pCryptEnumProviderTypesA(typeCount++, NULL, 0, &provType, NULL, &typeNameSize)) - ; - typeCount--; - ok(typeCount==dwTypeCount, "expected %d, got %d\n", dwTypeCount, typeCount); - - /* loop past the actual number of provider types to get the error - * ERROR_NO_MORE_ITEMS */ - for (typeCount = 0; typeCount < dwTypeCount + 1; typeCount++) - result = pCryptEnumProviderTypesA(typeCount, NULL, 0, &provType, NULL, &typeNameSize); - ok(!result && GetLastError()==ERROR_NO_MORE_ITEMS, "expected %i, got %d\n", - ERROR_NO_MORE_ITEMS, GetLastError()); - - - /* check expected versus actual values returned */ - result = pCryptEnumProviderTypesA(index, NULL, 0, &provType, NULL, &typeNameSize); - ok(result && typeNameSize==cbTypeName, "expected %d, got %d\n", cbTypeName, typeNameSize); - if (!(typeName = ((LPSTR)LocalAlloc(LMEM_ZEROINIT, typeNameSize)))) - return; - - typeNameSize = 0xdeadbeef; - result = pCryptEnumProviderTypesA(index, NULL, 0, &provType, typeName, &typeNameSize); - ok(result, "expected TRUE, got %d\n", result); - ok(provType==dwProvType, "expected %d, got %d\n", dwProvType, provType); - if (pszTypeName) - ok(!strcmp(pszTypeName, typeName), "expected %s, got %s\n", pszTypeName, typeName); - ok(typeNameSize==cbTypeName, "expected %d, got %d\n", cbTypeName, typeNameSize); - - LocalFree(typeName); -} - -static BOOL FindDfltProvRegVals(DWORD dwProvType, DWORD dwFlags, LPSTR *pszProvName, DWORD *pcbProvName) -{ - HKEY hKey; - PSTR keyname; - PSTR ptr; - DWORD user = dwFlags & CRYPT_USER_DEFAULT; - - LPCSTR machinestr = "Software\\Microsoft\\Cryptography\\Defaults\\Provider Types\\Type XXX"; - LPCSTR userstr = "Software\\Microsoft\\Cryptography\\Provider Type XXX"; - - keyname = LocalAlloc(LMEM_ZEROINIT, (user ? strlen(userstr) : strlen(machinestr)) + 1); - if (keyname) - { - user ? strcpy(keyname, userstr) : strcpy(keyname, machinestr); - ptr = keyname + strlen(keyname); - *(--ptr) = (dwProvType % 10) + '0'; - *(--ptr) = ((dwProvType / 10) % 10) + '0'; - *(--ptr) = (dwProvType / 100) + '0'; - } else - return FALSE; - - if (RegOpenKey((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE ,keyname, &hKey)) - { - LocalFree(keyname); - return FALSE; - } - LocalFree(keyname); - - if (RegQueryValueEx(hKey, "Name", NULL, NULL, (LPBYTE)*pszProvName, pcbProvName)) - { - if (GetLastError() != ERROR_MORE_DATA) - SetLastError(NTE_PROV_TYPE_ENTRY_BAD); - return FALSE; - } - - if (!(*pszProvName = LocalAlloc(LMEM_ZEROINIT, *pcbProvName))) - return FALSE; - - if (RegQueryValueEx(hKey, "Name", NULL, NULL, (LPBYTE)*pszProvName, pcbProvName)) - { - if (GetLastError() != ERROR_MORE_DATA) - SetLastError(NTE_PROV_TYPE_ENTRY_BAD); - return FALSE; - } - - RegCloseKey(hKey); - - return TRUE; -} - -static void test_get_default_provider(void) -{ - /* expected results */ - DWORD dwProvType = PROV_RSA_FULL; - DWORD dwFlags = CRYPT_MACHINE_DEFAULT; - LPSTR pszProvName = NULL; - DWORD cbProvName; - - /* actual results */ - DWORD provType = PROV_RSA_FULL; - DWORD flags = CRYPT_MACHINE_DEFAULT; - LPSTR provName = NULL; - DWORD provNameSize; - DWORD result; - DWORD notNull = 5; - - if(!pCryptGetDefaultProviderA) - { - skip("CryptGetDefaultProviderA is not available\n"); - return; - } - - if(!FindDfltProvRegVals(dwProvType, dwFlags, &pszProvName, &cbProvName)) - { - skip("Could not find default provider in registry\n"); - return; - } - - /* check pdwReserved for NULL */ - result = pCryptGetDefaultProviderA(provType, ¬Null, flags, provName, &provNameSize); - ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "expected %i, got %d\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - /* check for invalid flag */ - flags = 0xdeadbeef; - result = pCryptGetDefaultProviderA(provType, NULL, flags, provName, &provNameSize); - ok(!result && GetLastError()==NTE_BAD_FLAGS, "expected %d, got %d\n", - NTE_BAD_FLAGS, GetLastError()); - flags = CRYPT_MACHINE_DEFAULT; - - /* check for invalid prov type */ - provType = 0xdeadbeef; - result = pCryptGetDefaultProviderA(provType, NULL, flags, provName, &provNameSize); - ok(!result && (GetLastError() == NTE_BAD_PROV_TYPE || - GetLastError() == ERROR_INVALID_PARAMETER), - "expected NTE_BAD_PROV_TYPE or ERROR_INVALID_PARAMETER, got %d/%d\n", - result, GetLastError()); - provType = PROV_RSA_FULL; - - SetLastError(0); - - /* alloc provName to half the size required - * cbProvName holds the size required */ - provNameSize = cbProvName / 2; - if (!(provName = LocalAlloc(LMEM_ZEROINIT, provNameSize))) - return; - - result = pCryptGetDefaultProviderA(provType, NULL, flags, provName, &provNameSize); - ok(!result && GetLastError()==ERROR_MORE_DATA, "expected %i, got %d\n", - ERROR_MORE_DATA, GetLastError()); - - LocalFree(provName); - - /* check expected versus actual values returned */ - result = pCryptGetDefaultProviderA(provType, NULL, flags, NULL, &provNameSize); - ok(result && provNameSize==cbProvName, "expected %d, got %d\n", cbProvName, provNameSize); - provNameSize = cbProvName; - - if (!(provName = LocalAlloc(LMEM_ZEROINIT, provNameSize))) - return; - - provNameSize = 0xdeadbeef; - result = pCryptGetDefaultProviderA(provType, NULL, flags, provName, &provNameSize); - ok(result, "expected TRUE, got %d\n", result); - if(pszProvName) - ok(!strcmp(pszProvName, provName), "expected %s, got %s\n", pszProvName, provName); - ok(provNameSize==cbProvName, "expected %d, got %d\n", cbProvName, provNameSize); - - LocalFree(provName); -} - -static void test_set_provider_ex(void) -{ - DWORD result; - DWORD notNull = 5; - - /* results */ - LPSTR pszProvName = NULL; - DWORD cbProvName; - - if(!pCryptGetDefaultProviderA || !pCryptSetProviderExA) - { - skip("CryptGetDefaultProviderA and/or CryptSetProviderExA are not available\n"); - return; - } - - /* check pdwReserved for NULL */ - result = pCryptSetProviderExA(MS_DEF_PROV, PROV_RSA_FULL, ¬Null, CRYPT_MACHINE_DEFAULT); - ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "expected %i, got %d\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - /* remove the default provider and then set it to MS_DEF_PROV/PROV_RSA_FULL */ - SetLastError(0xdeadbeef); - result = pCryptSetProviderExA(MS_DEF_PROV, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT | CRYPT_DELETE_DEFAULT); - if (!result && (GetLastError() == ERROR_ACCESS_DENIED)) - { - skip("Not enough rights to remove the default provider\n"); - return; - } - ok(result, "%d\n", GetLastError()); - - result = pCryptSetProviderExA(MS_DEF_PROV, PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT); - ok(result, "%d\n", GetLastError()); - - /* call CryptGetDefaultProvider to see if they match */ - result = pCryptGetDefaultProviderA(PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT, NULL, &cbProvName); - if (!(pszProvName = LocalAlloc(LMEM_ZEROINIT, cbProvName))) - return; - - result = pCryptGetDefaultProviderA(PROV_RSA_FULL, NULL, CRYPT_MACHINE_DEFAULT, pszProvName, &cbProvName); - ok(result && !strcmp(MS_DEF_PROV, pszProvName), "expected %s, got %s\n", MS_DEF_PROV, pszProvName); - ok(result && cbProvName==(strlen(MS_DEF_PROV) + 1), "expected %i, got %d\n", (lstrlenA(MS_DEF_PROV) + 1), cbProvName); - - LocalFree(pszProvName); -} - -static void test_machine_guid(void) -{ - char originalGuid[40]; - LONG r; - HKEY key; - DWORD size; - HCRYPTPROV hCryptProv; - BOOL restoreGuid = FALSE, ret; - - r = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Cryptography", - 0, KEY_ALL_ACCESS, &key); - if (r != ERROR_SUCCESS) - { - skip("couldn't open HKLM\\Software\\Microsoft\\Cryptography\n"); - return; - } - /* Cache existing MachineGuid, and delete it */ - size = sizeof(originalGuid); - r = RegQueryValueExA(key, "MachineGuid", NULL, NULL, (BYTE *)originalGuid, - &size); - if (r == ERROR_SUCCESS) - { - restoreGuid = TRUE; - r = RegDeleteValueA(key, "MachineGuid"); - ok(!r, "RegDeleteValueA failed: %d\n", r); - } - else - ok(r == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", - r); - /* Create and release a provider */ - ret = pCryptAcquireContextA(&hCryptProv, szKeySet, NULL, PROV_RSA_FULL, 0); - ok(ret, "CryptAcquireContextA failed: %08x\n", GetLastError()); - pCryptReleaseContext(hCryptProv, 0); - - if (restoreGuid) - RegSetValueExA(key, "MachineGuid", 0, REG_SZ, (const BYTE *)originalGuid, - strlen(originalGuid)+1); - RegCloseKey(key); -} - -START_TEST(crypt) -{ - init_function_pointers(); - if(pCryptAcquireContextA && pCryptReleaseContext) { - init_environment(); - test_acquire_context(); - test_incorrect_api_usage(); - test_verify_sig(); - test_machine_guid(); - clean_up_environment(); - } - - test_enum_providers(); - test_enum_provider_types(); - test_get_default_provider(); - test_set_provider_ex(); -} diff --git a/rostests/winetests/advapi32/crypt_lmhash.c b/rostests/winetests/advapi32/crypt_lmhash.c deleted file mode 100644 index 63ab2c0da4d..00000000000 --- a/rostests/winetests/advapi32/crypt_lmhash.c +++ /dev/null @@ -1,649 +0,0 @@ -/* - * Unit tests for SystemFunctionXXX (LMHash?) - * - * Copyright 2004 Hans Leidekker - * 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 - */ - -#include - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winternl.h" - -struct ustring { - DWORD Length; - DWORD MaximumLength; - unsigned char *Buffer; -}; - -typedef NTSTATUS (WINAPI *fnSystemFunction001)(const BYTE *, const BYTE *, LPBYTE); -typedef NTSTATUS (WINAPI *fnSystemFunction002)(const BYTE *, const BYTE *, LPBYTE); -typedef NTSTATUS (WINAPI *fnSystemFunction003)(const BYTE *, LPBYTE); -typedef NTSTATUS (WINAPI *fnSystemFunction004)(const struct ustring *, const struct ustring *, struct ustring *); -typedef NTSTATUS (WINAPI *fnSystemFunction005)(const struct ustring *, const struct ustring *, struct ustring *); -typedef VOID (WINAPI *fnSystemFunction006)( PCSTR passwd, PSTR lmhash ); -typedef NTSTATUS (WINAPI *fnSystemFunction008)(const BYTE *, const BYTE *, LPBYTE); -typedef NTSTATUS (WINAPI *fnSystemFunction009)(const BYTE *, const BYTE *, LPBYTE); -typedef int (WINAPI *descrypt)(unsigned char *, unsigned char *, unsigned char *); -typedef NTSTATUS (WINAPI *fnSystemFunction030)(void*, void*); -typedef NTSTATUS (WINAPI *fnSystemFunction032)(struct ustring *, struct ustring *); - -fnSystemFunction001 pSystemFunction001; -fnSystemFunction002 pSystemFunction002; -fnSystemFunction003 pSystemFunction003; -fnSystemFunction004 pSystemFunction004; -fnSystemFunction004 pSystemFunction005; -fnSystemFunction006 pSystemFunction006; -fnSystemFunction008 pSystemFunction008; -fnSystemFunction008 pSystemFunction009; - -/* encrypt two blocks */ -descrypt pSystemFunction012; -descrypt pSystemFunction014; -descrypt pSystemFunction016; -descrypt pSystemFunction018; -descrypt pSystemFunction020; -descrypt pSystemFunction022; - -/* decrypt two blocks */ -descrypt pSystemFunction013; -descrypt pSystemFunction015; -descrypt pSystemFunction017; -descrypt pSystemFunction019; -descrypt pSystemFunction021; -descrypt pSystemFunction023; - -/* encrypt two blocks with a 32bit key */ -descrypt pSystemFunction024; -descrypt pSystemFunction025; - -/* decrypt two blocks with a 32bit key */ -descrypt pSystemFunction026; -descrypt pSystemFunction027; - -typedef int (WINAPI *memcmpfunc)(unsigned char *, unsigned char *); -memcmpfunc pSystemFunction030; -memcmpfunc pSystemFunction031; - -fnSystemFunction032 pSystemFunction032; - -static void test_SystemFunction006(void) -{ - char lmhash[16 + 1]; - - char passwd[] = { 's','e','c','r','e','t', 0, 0, 0, 0, 0, 0, 0, 0 }; - unsigned char expect[] = - { 0x85, 0xf5, 0x28, 0x9f, 0x09, 0xdc, 0xa7, 0xeb, - 0xaa, 0xd3, 0xb4, 0x35, 0xb5, 0x14, 0x04, 0xee }; - - pSystemFunction006( passwd, lmhash ); - - ok( !memcmp( lmhash, expect, sizeof(expect) ), - "lmhash: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", - lmhash[0], lmhash[1], lmhash[2], lmhash[3], lmhash[4], lmhash[5], - lmhash[6], lmhash[7], lmhash[8], lmhash[9], lmhash[10], lmhash[11], - lmhash[12], lmhash[13], lmhash[14], lmhash[15] ); -} - -static void test_SystemFunction008(void) -{ - /* example data from http://davenport.sourceforge.net/ntlm.html */ - unsigned char hash[0x40] = { - 0xff, 0x37, 0x50, 0xbc, 0xc2, 0xb2, 0x24, 0x12, - 0xc2, 0x26, 0x5b, 0x23, 0x73, 0x4e, 0x0d, 0xac }; - unsigned char challenge[0x40] = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; - unsigned char expected[0x18] = { - 0xc3, 0x37, 0xcd, 0x5c, 0xbd, 0x44, 0xfc, 0x97, - 0x82, 0xa6, 0x67, 0xaf, 0x6d, 0x42, 0x7c, 0x6d, - 0xe6, 0x7c, 0x20, 0xc2, 0xd3, 0xe7, 0x7c, 0x56 }; - unsigned char output[0x18]; - NTSTATUS r; - - r = pSystemFunction008(0,0,0); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - - r = pSystemFunction008(challenge,0,0); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - - r = pSystemFunction008(challenge, hash, 0); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - - /* crashes */ - if (0) - { - r = pSystemFunction008(challenge, 0, output); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - } - - r = pSystemFunction008(0, 0, output); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - - memset(output, 0, sizeof output); - r = pSystemFunction008(challenge, hash, output); - ok( r == STATUS_SUCCESS, "wrong error code\n"); - - ok( !memcmp(output, expected, sizeof expected), "response wrong\n"); -} - -static void test_SystemFunction001(void) -{ - unsigned char key[8] = { 0xff, 0x37, 0x50, 0xbc, 0xc2, 0xb2, 0x24, 0 }; - unsigned char data[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; - unsigned char expected[8] = { 0xc3, 0x37, 0xcd, 0x5c, 0xbd, 0x44, 0xfc, 0x97 }; - unsigned char output[16]; - NTSTATUS r; - - r = pSystemFunction001(0,0,0); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - - memset(output, 0, sizeof output); - - r = pSystemFunction001(data,key,output); - ok( r == STATUS_SUCCESS, "wrong error code\n"); - - ok(!memcmp(output, expected, sizeof expected), "response wrong\n"); -} - -static void test_SystemFunction002(void) -{ - /* reverse of SystemFunction001 */ - unsigned char key[8] = { 0xff, 0x37, 0x50, 0xbc, 0xc2, 0xb2, 0x24, 0 }; - unsigned char expected[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; - unsigned char data[8] = { 0xc3, 0x37, 0xcd, 0x5c, 0xbd, 0x44, 0xfc, 0x97 }; - unsigned char output[8]; - int r; - - memset(output, 0, sizeof output); - r = pSystemFunction002(data, key, output); - ok(r == STATUS_SUCCESS, "function failed\n"); - ok(!memcmp(output, expected, sizeof expected), "response wrong\n"); -} - -static void test_SystemFunction032(void) -{ - struct ustring key, data; - unsigned char szKey[] = { 'f','o','o',0 }; - unsigned char szData[8] = { 'b','a','r',0 }; - unsigned char expected[] = {0x28, 0xb9, 0xf8, 0xe1}; - int r; - - /* crashes: pSystemFunction032(NULL,NULL); */ - - key.Buffer = szKey; - key.Length = sizeof szKey; - key.MaximumLength = key.Length; - - data.Buffer = szData; - data.Length = 4; - data.MaximumLength = 8; - - r = pSystemFunction032(&data, &key); - ok(r == STATUS_SUCCESS, "function failed\n"); - - ok(!memcmp(expected, data.Buffer, data.Length), "wrong result\n"); -} - -static void test_SystemFunction003(void) -{ - unsigned char output[8], data[8]; - unsigned char key[7] = { 0xff, 0x37, 0x50, 0xbc, 0xc2, 0xb2, 0x24 }; - unsigned char exp1[8] = { 0x9d, 0x21, 0xc8, 0x86, 0x6c, 0x21, 0xcf, 0x43 }; - char exp2[] = "KGS!@#$%"; - int r; - - r = pSystemFunction003(NULL, NULL); - ok(r == STATUS_UNSUCCESSFUL, "function failed\n"); - - r = pSystemFunction003(key, NULL); - ok(r == STATUS_UNSUCCESSFUL, "function failed\n"); - - memset(data, 0, sizeof data); - r = pSystemFunction003(key, data); - ok(r == STATUS_SUCCESS, "function failed\n"); - ok( !memcmp(exp1, data, sizeof data), "decrypted message wrong\n"); - - memset(output, 0, sizeof output); - r = pSystemFunction002(data, key, output); - - ok( !memcmp(exp2, output, sizeof output), "decrypted message wrong\n"); -} - -static void test_SystemFunction004(void) -{ - unsigned char inbuf[0x100], keybuf[0x100], resbuf[0x100]; - unsigned char output[8]; - int r; - struct ustring in, key, out; - - /* crash - r = pSystemFunction004(NULL, NULL, NULL); - ok(r == STATUS_UNSUCCESSFUL, "function failed\n"); - */ - - memset(inbuf, 0, sizeof inbuf); - memset(keybuf, 0, sizeof keybuf); - memset(resbuf, 0, sizeof resbuf); - - in.Buffer = NULL; - in.Length = in.MaximumLength = 0; - - key.Buffer = NULL; - key.Length = key.MaximumLength = 0; - - out.Buffer = NULL; - out.Length = out.MaximumLength = 0; - - r = pSystemFunction004(&in, &key, &out); - ok(r == STATUS_INVALID_PARAMETER_2, "function failed\n"); - - key.Buffer = keybuf; - key.Length = 0x100; - key.MaximumLength = 0x100; - - r = pSystemFunction004(&in, &key, (struct ustring *)&out); - ok(r == STATUS_BUFFER_TOO_SMALL, "function failed\n"); - - in.Buffer = inbuf; - in.Length = 0x0c; - in.MaximumLength = 0; - - /* add two identical blocks... */ - inbuf[0] = 1; - inbuf[1] = 2; - inbuf[2] = 3; - inbuf[3] = 4; - - inbuf[8] = 1; - inbuf[9] = 2; - inbuf[10] = 3; - inbuf[11] = 4; - - /* check that the Length field is really obeyed */ - keybuf[6] = 1; - - key.Buffer = keybuf; - key.Length = 6; - key.MaximumLength = 0; - - keybuf[1] = 0x33; - - out.Buffer = resbuf; - out.Length = 0; - out.MaximumLength = 0x40; - r = pSystemFunction004(&in, &key, &out); - ok(r == STATUS_SUCCESS, "function failed\n"); - - keybuf[6] = 0; - - memset(output, 0, sizeof output); - r = pSystemFunction002(out.Buffer, key.Buffer, output); - - ok(((unsigned int*)output)[0] == in.Length, "crypted length wrong\n"); - ok(((unsigned int*)output)[1] == 1, "crypted value wrong\n"); - - memset(output, 0, sizeof output); - r = pSystemFunction002(out.Buffer+8, key.Buffer, output); - ok(!memcmp(output, inbuf, sizeof output), "crypted data wrong\n"); - - memset(output, 0, sizeof output); - r = pSystemFunction002(out.Buffer+16, key.Buffer, output); - ok(!memcmp(output, inbuf, sizeof output), "crypted data wrong\n"); -} - -static void test_SystemFunction005(void) -{ - char output[0x40], result[0x40]; - int r; - struct ustring in, key, out, res; - static char datastr[] = "twinkle twinkle little star"; - static char keystr[] = "byolnim"; - - in.Buffer = (unsigned char *)datastr; - in.Length = strlen(datastr); - in.MaximumLength = 0; - - key.Buffer = (unsigned char *)keystr; - key.Length = strlen(keystr); - key.MaximumLength = 0; - - out.Buffer = (unsigned char *)output; - out.Length = out.MaximumLength = sizeof output; - - r = pSystemFunction004(&in, &key, &out); - ok(r == STATUS_SUCCESS, "function failed\n"); - - memset(result, 0, sizeof result); - res.Buffer = (unsigned char *)result; - res.Length = 0; - res.MaximumLength = sizeof result; - - r = pSystemFunction005(&out, &key, &res); - ok(r == STATUS_SUCCESS, "function failed\n"); - - r = pSystemFunction005(&out, &key, &res); - ok(r == STATUS_SUCCESS, "function failed\n"); - - ok(res.Length == in.Length, "Length wrong\n"); - ok(!memcmp(res.Buffer, in.Buffer, in.Length), "data wrong\n"); - - out.Length = 0; - out.MaximumLength = 0; - r = pSystemFunction005(&out, &key, &res); - ok(r == STATUS_SUCCESS || - r == STATUS_INVALID_PARAMETER_1, /* Vista */ - "Expected STATUS_SUCCESS or STATUS_INVALID_PARAMETER_1, got %08x\n", r); - - ok(res.Length == in.Length, "Length wrong\n"); - ok(!memcmp(res.Buffer, in.Buffer, in.Length), "data wrong\n"); - - res.MaximumLength = 0; - r = pSystemFunction005(&out, &key, &res); - ok(r == STATUS_BUFFER_TOO_SMALL || - r == STATUS_INVALID_PARAMETER_1, /* Vista */ - "Expected STATUS_BUFFER_TOO_SMALL or STATUS_INVALID_PARAMETER_1, got %08x\n", r); - - key.Length = 1; - r = pSystemFunction005(&out, &key, &res); - ok(r == STATUS_UNKNOWN_REVISION || - r == STATUS_INVALID_PARAMETER_1, /* Vista */ - "Expected STATUS_UNKNOWN_REVISION or STATUS_INVALID_PARAMETER_1, got %08x\n", r); - - key.Length = 0; - r = pSystemFunction005(&out, &key, &res); - ok(r == STATUS_INVALID_PARAMETER_2, "function failed\n"); -} - -static void test_SystemFunction009(void) -{ - unsigned char hash[0x10] = { - 0xff, 0x37, 0x50, 0xbc, 0xc2, 0xb2, 0x24, 0x12, - 0xc2, 0x26, 0x5b, 0x23, 0x73, 0x4e, 0x0d, 0xac }; - unsigned char challenge[8] = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; - unsigned char expected[0x18] = { - 0xc3, 0x37, 0xcd, 0x5c, 0xbd, 0x44, 0xfc, 0x97, - 0x82, 0xa6, 0x67, 0xaf, 0x6d, 0x42, 0x7c, 0x6d, - 0xe6, 0x7c, 0x20, 0xc2, 0xd3, 0xe7, 0x7c, 0x56 }; - unsigned char output[0x18]; - int r; - - memset(output, 0, sizeof output); - r = pSystemFunction009(challenge, hash, output); - ok( r == STATUS_SUCCESS, "wrong error code\n"); - ok(!memcmp(output, expected, sizeof expected), "response wrong\n"); -} - -static unsigned char des_key[] = { - 0xff, 0x37, 0x50, 0xbc, 0xc2, 0xb2, 0x24, - 0xff, 0x37, 0x50, 0xbc, 0xc2, 0xb2, 0x24, -}; -static unsigned char des_plaintext[] = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0 -}; -static unsigned char des_ciphertext[] = { - 0xc3, 0x37, 0xcd, 0x5c, 0xbd, 0x44, 0xfc, 0x97, - 0xc3, 0x37, 0xcd, 0x5c, 0xbd, 0x44, 0xfc, 0x97, 0 -}; - -/* test functions that encrypt two DES blocks */ -static void test_SystemFunction_encrypt(descrypt func, int num) -{ - unsigned char output[0x11]; - int r; - - if (!func) - { - skip("SystemFunction%03d is not available\n", num); - return; - } - - r = func(NULL, NULL, NULL); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - - memset(output, 0, sizeof output); - r = func(des_plaintext, des_key, output); - ok( r == STATUS_SUCCESS, "wrong error code\n"); - ok( !memcmp(des_ciphertext, output, sizeof des_ciphertext), "ciphertext wrong (%d)\n", num); -} - -/* test functions that decrypt two DES blocks */ -static void test_SystemFunction_decrypt(descrypt func, int num) -{ - unsigned char output[0x11]; - int r; - - if (!func) - { - skip("SystemFunction%03d is not available\n", num); - return; - } - - r = func(NULL, NULL, NULL); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - - memset(output, 0, sizeof output); - - r = func(des_ciphertext, des_key, output); - ok( r == STATUS_SUCCESS, "wrong error code\n"); - ok( !memcmp(des_plaintext, output, sizeof des_plaintext), "plaintext wrong (%d)\n", num); -} - -static unsigned char des_ciphertext32[] = { - 0x69, 0x51, 0x35, 0x69, 0x0d, 0x29, 0x24, 0xad, - 0x23, 0x6d, 0xfd, 0x43, 0x0d, 0xd3, 0x25, 0x81, 0 -}; - -static void test_SystemFunction_enc32(descrypt func, int num) -{ - unsigned char key[4], output[0x11]; - int r; - - if (!func) - { - skip("SystemFunction%03d is not available\n", num); - return; - } - - memset(output, 0, sizeof output); - - /* two keys are generated using 4 bytes, repeated 4 times ... */ - memcpy(key, "foo", 4); - - r = func(des_plaintext, key, output); - ok( r == STATUS_SUCCESS, "wrong error code (%d)\n", num); - - ok( !memcmp( output, des_ciphertext32, sizeof des_ciphertext32), "ciphertext wrong (%d)\n", num); -} - -static void test_SystemFunction_dec32(descrypt func, int num) -{ - unsigned char key[4], output[0x11]; - int r; - - if (!func) - { - skip("SystemFunction%03d is not available\n", num); - return; - } - - memset(output, 0, sizeof output); - - /* two keys are generated using 4 bytes, repeated 4 times ... */ - memcpy(key, "foo", 4); - - r = func(des_ciphertext32, key, output); - ok( r == STATUS_SUCCESS, "wrong error code (%d)\n", num); - - ok( !memcmp( output, des_plaintext, sizeof des_plaintext), "plaintext wrong (%d)\n", num); -} - -static void test_memcmpfunc(memcmpfunc fn) -{ - unsigned char arg1[0x20], arg2[0x20]; - int r; - - if (!fn) - { - skip("function is not available\n"); - return; - } - - if (0) - { - /* crashes */ - r = fn(NULL, NULL); - } - - memset(arg1, 0, sizeof arg1); - memset(arg2, 0, sizeof arg2); - arg1[0x10] = 1; - - r = fn(arg1, arg2); - ok( r == 1, "wrong error code\n"); - - memset(arg1, 1, sizeof arg1); - memset(arg2, 1, sizeof arg2); - arg1[0x10] = 0; - - r = fn(arg1, arg2); - ok( r == 1, "wrong error code\n"); - - memset(arg1, 0, sizeof arg1); - memset(arg2, 1, sizeof arg2); - - r = fn(arg1, arg2); - ok( r == 0, "wrong error code\n"); - - memset(arg1, 1, sizeof arg1); - memset(arg2, 0, sizeof arg2); - - r = fn(arg1, arg2); - ok( r == 0, "wrong error code\n"); -} - -START_TEST(crypt_lmhash) -{ - HMODULE module = GetModuleHandleA("advapi32.dll"); - - pSystemFunction001 = (fnSystemFunction001)GetProcAddress( module, "SystemFunction001" ); - if (pSystemFunction001) - test_SystemFunction001(); - else - skip("SystemFunction001 is not available\n"); - - pSystemFunction002 = (fnSystemFunction002)GetProcAddress( module, "SystemFunction002" ); - if (pSystemFunction002) - test_SystemFunction002(); - else - skip("SystemFunction002 is not available\n"); - - pSystemFunction003 = (fnSystemFunction003)GetProcAddress( module, "SystemFunction003" ); - if (pSystemFunction003) - test_SystemFunction003(); - else - skip("SystemFunction002 is not available\n"); - - pSystemFunction004 = (fnSystemFunction004)GetProcAddress( module, "SystemFunction004" ); - if (pSystemFunction004) - test_SystemFunction004(); - else - skip("SystemFunction004 is not available\n"); - - pSystemFunction005 = (fnSystemFunction005)GetProcAddress( module, "SystemFunction005" ); - if (pSystemFunction005) - test_SystemFunction005(); - else - skip("SystemFunction005 is not available\n"); - - pSystemFunction006 = (fnSystemFunction006)GetProcAddress( module, "SystemFunction006" ); - if (pSystemFunction006) - test_SystemFunction006(); - else - skip("SystemFunction006 is not available\n"); - - pSystemFunction008 = (fnSystemFunction008)GetProcAddress( module, "SystemFunction008" ); - if (pSystemFunction008) - test_SystemFunction008(); - else - skip("SystemFunction008 is not available\n"); - - pSystemFunction009 = (fnSystemFunction009)GetProcAddress( module, "SystemFunction009" ); - if (pSystemFunction009) - test_SystemFunction009(); - else - skip("SystemFunction009 is not available\n"); - - pSystemFunction012 = (descrypt) GetProcAddress( module, "SystemFunction012"); - pSystemFunction013 = (descrypt) GetProcAddress( module, "SystemFunction013"); - pSystemFunction014 = (descrypt) GetProcAddress( module, "SystemFunction014"); - pSystemFunction015 = (descrypt) GetProcAddress( module, "SystemFunction015"); - pSystemFunction016 = (descrypt) GetProcAddress( module, "SystemFunction016"); - pSystemFunction017 = (descrypt) GetProcAddress( module, "SystemFunction017"); - pSystemFunction018 = (descrypt) GetProcAddress( module, "SystemFunction018"); - pSystemFunction019 = (descrypt) GetProcAddress( module, "SystemFunction019"); - pSystemFunction020 = (descrypt) GetProcAddress( module, "SystemFunction020"); - pSystemFunction021 = (descrypt) GetProcAddress( module, "SystemFunction021"); - pSystemFunction022 = (descrypt) GetProcAddress( module, "SystemFunction022"); - pSystemFunction023 = (descrypt) GetProcAddress( module, "SystemFunction023"); - - /* these all encrypt two DES blocks */ - test_SystemFunction_encrypt(pSystemFunction012, 12); - test_SystemFunction_encrypt(pSystemFunction014, 14); - test_SystemFunction_encrypt(pSystemFunction016, 16); - test_SystemFunction_encrypt(pSystemFunction018, 18); - test_SystemFunction_encrypt(pSystemFunction020, 20); - test_SystemFunction_encrypt(pSystemFunction022, 22); - - /* these all decrypt two DES blocks */ - test_SystemFunction_decrypt(pSystemFunction013, 13); - test_SystemFunction_decrypt(pSystemFunction015, 15); - test_SystemFunction_decrypt(pSystemFunction017, 17); - test_SystemFunction_decrypt(pSystemFunction019, 19); - test_SystemFunction_decrypt(pSystemFunction021, 21); - test_SystemFunction_decrypt(pSystemFunction023, 23); - - pSystemFunction024 = (descrypt) GetProcAddress( module, "SystemFunction024"); - pSystemFunction025 = (descrypt) GetProcAddress( module, "SystemFunction025"); - pSystemFunction026 = (descrypt) GetProcAddress( module, "SystemFunction026"); - pSystemFunction027 = (descrypt) GetProcAddress( module, "SystemFunction027"); - - /* these encrypt two DES blocks with a short key */ - test_SystemFunction_enc32(pSystemFunction024, 24); - test_SystemFunction_enc32(pSystemFunction026, 26); - - /* these descrypt two DES blocks with a short key */ - test_SystemFunction_dec32(pSystemFunction025, 25); - test_SystemFunction_dec32(pSystemFunction027, 27); - - pSystemFunction030 = (memcmpfunc) GetProcAddress( module, "SystemFunction030" ); - pSystemFunction031 = (memcmpfunc) GetProcAddress( module, "SystemFunction031" ); - - test_memcmpfunc(pSystemFunction030); - test_memcmpfunc(pSystemFunction031); - - pSystemFunction032 = (fnSystemFunction032)GetProcAddress( module, "SystemFunction032" ); - if (pSystemFunction032) - test_SystemFunction032(); - else - skip("SystemFunction032 is not available\n"); -} diff --git a/rostests/winetests/advapi32/crypt_md4.c b/rostests/winetests/advapi32/crypt_md4.c deleted file mode 100644 index 15a594bf904..00000000000 --- a/rostests/winetests/advapi32/crypt_md4.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Unit tests for MD4 functions - * - * Copyright 2004 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 - */ - -#include - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "winternl.h" - -typedef struct -{ - unsigned int buf[4]; - unsigned int i[2]; - unsigned char in[64]; - unsigned char digest[16]; -} MD4_CTX; - -typedef VOID (WINAPI *fnMD4Init)( MD4_CTX *ctx ); -typedef VOID (WINAPI *fnMD4Update)( MD4_CTX *ctx, const unsigned char *src, const int len ); -typedef VOID (WINAPI *fnMD4Final)( MD4_CTX *ctx ); -typedef int (WINAPI *fnSystemFunction007)(const UNICODE_STRING *, LPBYTE); -typedef int (WINAPI *md4hashfunc)(LPVOID, const LPBYTE, LPBYTE); - -fnMD4Init pMD4Init; -fnMD4Update pMD4Update; -fnMD4Final pMD4Final; -fnSystemFunction007 pSystemFunction007; -md4hashfunc pSystemFunction010; -md4hashfunc pSystemFunction011; - -#define ctxcmp( a, b ) memcmp( (char*)a, (char*)b, FIELD_OFFSET( MD4_CTX, in ) ) - -static void test_md4_ctx(void) -{ - static unsigned char message[] = - "In our Life there's If" - "In our beliefs there's Lie" - "In our business there is Sin" - "In our bodies, there is Die"; - - int size = sizeof(message) - 1; - - MD4_CTX ctx; - MD4_CTX ctx_initialized = - { - { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 }, - { 0, 0 } - }; - - MD4_CTX ctx_update1 = - { - { 0x5e592ef7, 0xbdcb1567, 0x2b626d17, 0x7d1198bd }, - { 0x00000338, 0 } - }; - - MD4_CTX ctx_update2 = - { - { 0x05dcfd65, 0xb3711c0d, 0x9e3369c2, 0x903ead11 }, - { 0x00000670, 0 } - }; - - unsigned char expect[16] = - { 0x5f, 0xd3, 0x9b, 0x29, 0x47, 0x53, 0x47, 0xaf, - 0xa5, 0xba, 0x0c, 0x05, 0xff, 0xc0, 0xc7, 0xda }; - - - memset( &ctx, 0, sizeof(ctx) ); - pMD4Init( &ctx ); - ok( !ctxcmp( &ctx, &ctx_initialized ), "invalid initialization\n" ); - - pMD4Update( &ctx, message, size ); - ok( !ctxcmp( &ctx, &ctx_update1 ), "update doesn't work correctly\n" ); - - pMD4Update( &ctx, message, size ); - ok( !ctxcmp( &ctx, &ctx_update2 ), "update doesn't work correctly\n" ); - - pMD4Final( &ctx ); - ok( ctxcmp( &ctx, &ctx_initialized ), "context has changed\n" ); - ok( !memcmp( ctx.digest, expect, sizeof(expect) ), "incorrect result\n" ); - -} - -static void test_SystemFunction007(void) -{ - int r; - UNICODE_STRING str; - BYTE output[0x10]; - BYTE expected[0x10] = { 0x24, 0x0a, 0xf0, 0x9d, 0x84, 0x1c, 0xda, 0xcf, - 0x56, 0xeb, 0x6b, 0x96, 0x55, 0xec, 0xcf, 0x0a }; - WCHAR szFoo[] = {'f','o','o',0 }; - - if (0) - { - /* crashes on Windows */ - r = pSystemFunction007(NULL, NULL); - ok( r == STATUS_UNSUCCESSFUL, "wrong error code\n"); - } - - str.Buffer = szFoo; - str.Length = 4*sizeof(WCHAR); - str.MaximumLength = str.Length; - - memset(output, 0, sizeof output); - r = pSystemFunction007(&str, output); - ok( r == STATUS_SUCCESS, "wrong error code\n"); - - ok(!memcmp(output, expected, sizeof expected), "response wrong\n"); -} - -static void test_md4hashfunc(md4hashfunc func) -{ - unsigned char expected[0x10] = { - 0x48, 0x7c, 0x3f, 0x5e, 0x2b, 0x0d, 0x6a, 0x79, - 0x32, 0x4e, 0xcd, 0xbe, 0x9c, 0x15, 0x16, 0x6f }; - unsigned char in[0x10], output[0x10]; - int r; - - memset(in, 0, sizeof in); - memset(output, 0, sizeof output); - r = func(0, in, output); - ok( r == STATUS_SUCCESS, "wrong error code\n"); - ok( !memcmp(expected, output, sizeof output), "output wrong\n"); -} - -START_TEST(crypt_md4) -{ - HMODULE module; - - module = GetModuleHandleA( "advapi32.dll" ); - - pMD4Init = (fnMD4Init)GetProcAddress( module, "MD4Init" ); - pMD4Update = (fnMD4Update)GetProcAddress( module, "MD4Update" ); - pMD4Final = (fnMD4Final)GetProcAddress( module, "MD4Final" ); - - if (pMD4Init && pMD4Update && pMD4Final) - test_md4_ctx(); - else - skip("MD4Init and/or MD4Update and/or MD4Final are not available\n"); - - pSystemFunction007 = (fnSystemFunction007)GetProcAddress( module, "SystemFunction007" ); - if (pSystemFunction007) - test_SystemFunction007(); - else - skip("SystemFunction007 is not available\n"); - - pSystemFunction010 = (md4hashfunc)GetProcAddress( module, "SystemFunction010" ); - if (pSystemFunction010) - test_md4hashfunc(pSystemFunction010); - else - skip("SystemFunction010 is not available\n"); - - pSystemFunction011 = (md4hashfunc)GetProcAddress( module, "SystemFunction011" ); - if (pSystemFunction011) - test_md4hashfunc(pSystemFunction011); - else - skip("SystemFunction011 is not available\n"); -} diff --git a/rostests/winetests/advapi32/crypt_md5.c b/rostests/winetests/advapi32/crypt_md5.c deleted file mode 100644 index 23d7d6bdcaa..00000000000 --- a/rostests/winetests/advapi32/crypt_md5.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Unit tests for MD5 functions - * - * Copyright 2004 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 - */ - -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" - -typedef struct -{ - unsigned int i[2]; - unsigned int buf[4]; - unsigned char in[64]; - unsigned char digest[16]; -} MD5_CTX; - -typedef VOID (WINAPI *fnMD5Init)( MD5_CTX *ctx ); -typedef VOID (WINAPI *fnMD5Update)( MD5_CTX *ctx, const unsigned char *src, const int len ); -typedef VOID (WINAPI *fnMD5Final)( MD5_CTX *ctx ); - -fnMD5Init pMD5Init; -fnMD5Update pMD5Update; -fnMD5Final pMD5Final; - -#define ctxcmp( a, b ) memcmp( (char*)a, (char*)b, FIELD_OFFSET( MD5_CTX, in ) ) - -static void test_md5_ctx(void) -{ - static unsigned char message[] = - "In our Life there's If" - "In our beliefs there's Lie" - "In our business there is Sin" - "In our bodies, there is Die"; - - int size = sizeof(message) - 1; - HMODULE module; - - MD5_CTX ctx; - MD5_CTX ctx_initialized = - { - { 0, 0 }, - { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 } - }; - - MD5_CTX ctx_update1 = - { - { 0x00000338, 0 }, - { 0x068cb64d, 0xb7a05790, 0x426979ee, 0xed67e221 } - }; - - MD5_CTX ctx_update2 = - { - { 0x00000670, 0 }, - { 0x2f7afe58, 0xcc3e9315, 0x709c465c, 0xbf6414c8 } - }; - - unsigned char expect[16] = - { 0x43, 0x03, 0xdd, 0x8c, 0x60, 0xd9, 0x3a, 0x22, - 0x0b, 0x28, 0xd0, 0xb2, 0x65, 0x93, 0xd0, 0x36 }; - - module = GetModuleHandleA("advapi32.dll"); - - pMD5Init = (fnMD5Init)GetProcAddress( module, "MD5Init" ); - pMD5Update = (fnMD5Update)GetProcAddress( module, "MD5Update" ); - pMD5Final = (fnMD5Final)GetProcAddress( module, "MD5Final" ); - - if (!pMD5Init || !pMD5Update || !pMD5Final) - { - skip("Needed functions are not available\n"); - return; - } - - memset( &ctx, 0, sizeof(ctx) ); - pMD5Init( &ctx ); - ok( !ctxcmp( &ctx, &ctx_initialized ), "invalid initialization\n" ); - - pMD5Update( &ctx, message, size ); - ok( !ctxcmp( &ctx, &ctx_update1 ), "update doesn't work correctly\n" ); - - pMD5Update( &ctx, message, size ); - ok( !ctxcmp( &ctx, &ctx_update2 ), "update doesn't work correctly\n" ); - - pMD5Final( &ctx ); - ok( ctxcmp( &ctx, &ctx_initialized ), "context has changed\n" ); - ok( !memcmp( ctx.digest, expect, sizeof(expect) ), "incorrect result\n" ); -} - -START_TEST(crypt_md5) -{ - test_md5_ctx(); -} diff --git a/rostests/winetests/advapi32/crypt_sha.c b/rostests/winetests/advapi32/crypt_sha.c deleted file mode 100644 index cfdaf991d41..00000000000 --- a/rostests/winetests/advapi32/crypt_sha.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Unit tests for SHA functions - * - * Copyright (c) 2004 Filip Navara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" - -typedef struct { - ULONG Unknown[6]; - ULONG State[5]; - ULONG Count[2]; - UCHAR Buffer[64]; -} SHA_CTX, *PSHA_CTX; - -static void test_sha_ctx(void) -{ - FARPROC pA_SHAInit, pA_SHAUpdate, pA_SHAFinal; - static const char test_buffer[] = "In our Life there's If" - "In our beliefs there's Lie" - "In our business there is Sin" - "In our bodies, there is Die"; - ULONG test_buffer_size = strlen(test_buffer); - HMODULE hmod; - SHA_CTX ctx; - ULONG result[5]; - ULONG result_correct[5] = {0xe014f93, 0xe09791ec, 0x6dcf96c8, 0x8e9385fc, 0x1611c1bb}; - - hmod = GetModuleHandleA("advapi32.dll"); - pA_SHAInit = GetProcAddress(hmod, "A_SHAInit"); - pA_SHAUpdate = GetProcAddress(hmod, "A_SHAUpdate"); - pA_SHAFinal = GetProcAddress(hmod, "A_SHAFinal"); - - if (!pA_SHAInit || !pA_SHAUpdate || !pA_SHAFinal) - { - skip("A_SHAInit and/or A_SHAUpdate and/or A_SHAFinal are not available\n"); - return; - } - - RtlZeroMemory(&ctx, sizeof(ctx)); - pA_SHAInit(&ctx); - pA_SHAUpdate(&ctx, test_buffer, test_buffer_size); - pA_SHAUpdate(&ctx, test_buffer, test_buffer_size); - pA_SHAFinal(&ctx, result); - ok(!memcmp(result, result_correct, sizeof(result)), "incorrect result\n"); -} - -START_TEST(crypt_sha) -{ - test_sha_ctx(); -} diff --git a/rostests/winetests/advapi32/lsa.c b/rostests/winetests/advapi32/lsa.c deleted file mode 100644 index 90fbe1031b1..00000000000 --- a/rostests/winetests/advapi32/lsa.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Unit tests for lsa functions - * - * 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 - */ - -#include -#include - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "ntsecapi.h" -#include "sddl.h" -#include "winnls.h" -#include "objbase.h" -#include "initguid.h" -#include "wine/test.h" - -DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); - -static HMODULE hadvapi32; -static NTSTATUS (WINAPI *pLsaClose)(LSA_HANDLE); -static NTSTATUS (WINAPI *pLsaFreeMemory)(PVOID); -static NTSTATUS (WINAPI *pLsaOpenPolicy)(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE); -static NTSTATUS (WINAPI *pLsaQueryInformationPolicy)(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*); -static BOOL (WINAPI *pConvertSidToStringSidA)(PSID pSid, LPSTR *str); - -static BOOL init(void) -{ - hadvapi32 = GetModuleHandle("advapi32.dll"); - - pLsaClose = (void*)GetProcAddress(hadvapi32, "LsaClose"); - pLsaFreeMemory = (void*)GetProcAddress(hadvapi32, "LsaFreeMemory"); - pLsaOpenPolicy = (void*)GetProcAddress(hadvapi32, "LsaOpenPolicy"); - pLsaQueryInformationPolicy = (void*)GetProcAddress(hadvapi32, "LsaQueryInformationPolicy"); - pConvertSidToStringSidA = (void*)GetProcAddress(hadvapi32, "ConvertSidToStringSidA"); - - if (pLsaClose && pLsaFreeMemory && pLsaOpenPolicy && pLsaQueryInformationPolicy && pConvertSidToStringSidA) - return TRUE; - - return FALSE; -} - -static void test_lsa(void) -{ - NTSTATUS status; - LSA_HANDLE handle; - LSA_OBJECT_ATTRIBUTES object_attributes; - - ZeroMemory(&object_attributes, sizeof(object_attributes)); - object_attributes.Length = sizeof(object_attributes); - - status = pLsaOpenPolicy( NULL, &object_attributes, POLICY_ALL_ACCESS, &handle); - ok(status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED, - "LsaOpenPolicy(POLICY_ALL_ACCESS) returned 0x%08x\n", status); - - /* try a more restricted access mask if necessary */ - if (status == STATUS_ACCESS_DENIED) { - trace("LsaOpenPolicy(POLICY_ALL_ACCESS) failed, trying POLICY_VIEW_LOCAL_INFORMATION\n"); - status = pLsaOpenPolicy( NULL, &object_attributes, POLICY_VIEW_LOCAL_INFORMATION, &handle); - ok(status == STATUS_SUCCESS, "LsaOpenPolicy(POLICY_VIEW_LOCAL_INFORMATION) returned 0x%08x\n", status); - } - - if (status == STATUS_SUCCESS) { - PPOLICY_AUDIT_EVENTS_INFO audit_events_info; - PPOLICY_PRIMARY_DOMAIN_INFO primary_domain_info; - PPOLICY_ACCOUNT_DOMAIN_INFO account_domain_info; - PPOLICY_DNS_DOMAIN_INFO dns_domain_info; - - status = pLsaQueryInformationPolicy(handle, PolicyAuditEventsInformation, (PVOID*)&audit_events_info); - if (status == STATUS_ACCESS_DENIED) - skip("Not enough rights to retrieve PolicyAuditEventsInformation\n"); - else - ok(status == STATUS_SUCCESS, "LsaQueryInformationPolicy(PolicyAuditEventsInformation) failed, returned 0x%08x\n", status); - if (status == STATUS_SUCCESS) { - pLsaFreeMemory((LPVOID)audit_events_info); - } - - status = pLsaQueryInformationPolicy(handle, PolicyPrimaryDomainInformation, (PVOID*)&primary_domain_info); - ok(status == STATUS_SUCCESS, "LsaQueryInformationPolicy(PolicyPrimaryDomainInformation) failed, returned 0x%08x\n", status); - if (status == STATUS_SUCCESS) { - if (primary_domain_info->Sid) { - LPSTR strsid; - if (pConvertSidToStringSidA(primary_domain_info->Sid, &strsid)) - { - if (primary_domain_info->Name.Buffer) { - LPSTR name = NULL; - UINT len; - len = WideCharToMultiByte( CP_ACP, 0, primary_domain_info->Name.Buffer, -1, NULL, 0, NULL, NULL ); - name = LocalAlloc( 0, len ); - WideCharToMultiByte( CP_ACP, 0, primary_domain_info->Name.Buffer, -1, name, len, NULL, NULL ); - trace(" name: %s sid: %s\n", name, strsid); - LocalFree( name ); - } else - trace(" name: NULL sid: %s\n", strsid); - LocalFree( strsid ); - } - else - trace("invalid sid\n"); - } - else - trace("Running on a standalone system.\n"); - pLsaFreeMemory((LPVOID)primary_domain_info); - } - - status = pLsaQueryInformationPolicy(handle, PolicyAccountDomainInformation, (PVOID*)&account_domain_info); - ok(status == STATUS_SUCCESS, "LsaQueryInformationPolicy(PolicyAccountDomainInformation) failed, returned 0x%08x\n", status); - if (status == STATUS_SUCCESS) { - pLsaFreeMemory((LPVOID)account_domain_info); - } - - /* This isn't supported in NT4 */ - status = pLsaQueryInformationPolicy(handle, PolicyDnsDomainInformation, (PVOID*)&dns_domain_info); - ok(status == STATUS_SUCCESS || status == STATUS_INVALID_PARAMETER, - "LsaQueryInformationPolicy(PolicyDnsDomainInformation) failed, returned 0x%08x\n", status); - if (status == STATUS_SUCCESS) { - if (dns_domain_info->Sid || !IsEqualGUID(&dns_domain_info->DomainGuid, &GUID_NULL)) { - LPSTR strsid = NULL; - LPSTR name = NULL; - LPSTR domain = NULL; - LPSTR forest = NULL; - LPSTR guidstr = NULL; - WCHAR guidstrW[64]; - UINT len; - guidstrW[0] = '\0'; - pConvertSidToStringSidA(dns_domain_info->Sid, &strsid); - StringFromGUID2(&dns_domain_info->DomainGuid, guidstrW, sizeof(guidstrW)/sizeof(WCHAR)); - len = WideCharToMultiByte( CP_ACP, 0, guidstrW, -1, NULL, 0, NULL, NULL ); - guidstr = LocalAlloc( 0, len ); - WideCharToMultiByte( CP_ACP, 0, guidstrW, -1, guidstr, len, NULL, NULL ); - if (dns_domain_info->Name.Buffer) { - len = WideCharToMultiByte( CP_ACP, 0, dns_domain_info->Name.Buffer, -1, NULL, 0, NULL, NULL ); - name = LocalAlloc( 0, len ); - WideCharToMultiByte( CP_ACP, 0, dns_domain_info->Name.Buffer, -1, name, len, NULL, NULL ); - } - if (dns_domain_info->DnsDomainName.Buffer) { - len = WideCharToMultiByte( CP_ACP, 0, dns_domain_info->DnsDomainName.Buffer, -1, NULL, 0, NULL, NULL ); - domain = LocalAlloc( 0, len ); - WideCharToMultiByte( CP_ACP, 0, dns_domain_info->DnsDomainName.Buffer, -1, domain, len, NULL, NULL ); - } - if (dns_domain_info->DnsForestName.Buffer) { - len = WideCharToMultiByte( CP_ACP, 0, dns_domain_info->DnsForestName.Buffer, -1, NULL, 0, NULL, NULL ); - forest = LocalAlloc( 0, len ); - WideCharToMultiByte( CP_ACP, 0, dns_domain_info->DnsForestName.Buffer, -1, forest, len, NULL, NULL ); - } - trace(" name: %s domain: %s forest: %s guid: %s sid: %s\n", - name ? name : "NULL", domain ? domain : "NULL", - forest ? forest : "NULL", guidstr, strsid ? strsid : "NULL"); - LocalFree( name ); - LocalFree( forest ); - LocalFree( domain ); - LocalFree( guidstr ); - LocalFree( strsid ); - } - else - trace("Running on a standalone system.\n"); - pLsaFreeMemory((LPVOID)dns_domain_info); - } - - status = pLsaClose(handle); - ok(status == STATUS_SUCCESS, "LsaClose() failed, returned 0x%08x\n", status); - } -} - -START_TEST(lsa) -{ - if (!init()) { - skip("Needed functions are not available\n"); - return; - } - - test_lsa(); -} diff --git a/rostests/winetests/advapi32/registry.c b/rostests/winetests/advapi32/registry.c deleted file mode 100644 index 95608c6503a..00000000000 --- a/rostests/winetests/advapi32/registry.c +++ /dev/null @@ -1,1420 +0,0 @@ -/* - * Unit tests for registry functions - * - * 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 - */ - -#include -#include -#include -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "winsvc.h" -#include "winerror.h" - -static HKEY hkey_main; -static DWORD GLE; - -static const char * sTestpath1 = "%LONGSYSTEMVAR%\\subdir1"; -static const char * sTestpath2 = "%FOO%\\subdir1"; - -static HMODULE hadvapi32; -static DWORD (WINAPI *pRegGetValueA)(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD); -static DWORD (WINAPI *pRegDeleteTreeA)(HKEY,LPCSTR); - - - -/* Debugging functions from wine/libs/wine/debug.c */ - -/* allocate some tmp string space */ -/* FIXME: this is not 100% thread-safe */ -static char *get_temp_buffer( int size ) -{ - static char *list[32]; - static long pos; - char *ret; - int idx; - - idx = ++pos % (sizeof(list)/sizeof(list[0])); - if ((ret = realloc( list[idx], size ))) list[idx] = ret; - return ret; -} - -static const char *wine_debugstr_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 = 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 = 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: - 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; - return res; -} - -static const char *wine_debugstr_wn( const WCHAR *str, int n ) -{ - char *dst, *res; - size_t size; - - if (!HIWORD(str)) - { - if (!str) return "(null)"; - res = get_temp_buffer( 6 ); - sprintf( res, "#%04x", LOWORD(str) ); - return res; - } - if (n == -1) n = lstrlenW(str); - if (n < 0) n = 0; - size = 12 + min( 300, n * 5); - dst = res = get_temp_buffer( n * 5 + 7 ); - *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++ = (char)c; - else - { - *dst++ = '\\'; - sprintf(dst,"%04x",c); - dst+=4; - } - } - } - *dst++ = '"'; - if (n > 0) - { - *dst++ = '.'; - *dst++ = '.'; - *dst++ = '.'; - } - *dst = 0; - return res; -} - - -#define ADVAPI32_GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hadvapi32, #func); - - -static void InitFunctionPtrs(void) -{ - hadvapi32 = GetModuleHandleA("advapi32.dll"); - - /* This function was introduced with Windows 2003 SP1 */ - ADVAPI32_GET_PROC(RegGetValueA) - ADVAPI32_GET_PROC(RegDeleteTreeA) -} - -/* delete key and all its subkeys */ -static DWORD delete_key( HKEY hkey ) -{ - char name[MAX_PATH]; - DWORD ret; - - while (!(ret = RegEnumKeyA(hkey, 0, name, sizeof(name)))) - { - HKEY tmp; - if (!(ret = RegOpenKeyExA( hkey, name, 0, KEY_ENUMERATE_SUB_KEYS, &tmp ))) - { - ret = delete_key( tmp ); - RegCloseKey( tmp ); - } - if (ret) break; - } - if (ret != ERROR_NO_MORE_ITEMS) return ret; - RegDeleteKeyA( hkey, "" ); - return 0; -} - -static void setup_main_key(void) -{ - if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkey_main )) delete_key( hkey_main ); - - assert (!RegCreateKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkey_main )); -} - -static void test_hkey_main_Value_A(LPCSTR name, LPCSTR string, - DWORD full_byte_len) -{ - DWORD ret, type, cbData; - DWORD str_byte_len; - LPSTR value; - static const char nA[]={'N', 0}; - - type=0xdeadbeef; - cbData=0xdeadbeef; - /* When successful RegQueryValueExA() leaves GLE as is, - * so we must reset it to detect unimplemented functions. - */ - SetLastError(0xdeadbeef); - ret = RegQueryValueExA(hkey_main, name, NULL, &type, NULL, &cbData); - GLE = GetLastError(); - ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed: %d, GLE=%d\n", ret, GLE); - /* It is wrong for the Ansi version to not be implemented */ - ok(GLE == 0xdeadbeef, "RegQueryValueExA set GLE = %u\n", GLE); - if(GLE == ERROR_CALL_NOT_IMPLEMENTED) return; - - str_byte_len = (string ? lstrlenA(string) : 0) + 1; - ok(type == REG_SZ, "RegQueryValueExA returned type %d\n", type); - ok(cbData == full_byte_len || cbData == str_byte_len /* Win9x */, - "cbData=%d instead of %d or %d\n", cbData, full_byte_len, str_byte_len); - - value = HeapAlloc(GetProcessHeap(), 0, (cbData+2)*sizeof(*value)); - strcpy(value, nA); - type=0xdeadbeef; - ret = RegQueryValueExA(hkey_main, name, NULL, &type, (BYTE*)value, &cbData); - GLE = GetLastError(); - ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed: %d, GLE=%d\n", ret, GLE); - if (!string) - { - /* When cbData == 0, RegQueryValueExA() should not modify the buffer */ - ok(strcmp(value, nA) == 0 || (cbData == 1 && *value == '\0') /* Win9x */, - "RegQueryValueExA failed: '%s' != '%s'\n", value, string); - } - else - { - ok(memcmp(value, string, cbData) == 0, "RegQueryValueExA failed: %s/%d != %s/%d\n", - wine_debugstr_an(value, cbData), cbData, - wine_debugstr_an(string, full_byte_len), full_byte_len); - } - HeapFree(GetProcessHeap(), 0, value); -} - -static void test_hkey_main_Value_W(LPCWSTR name, LPCWSTR string, - DWORD full_byte_len) -{ - DWORD ret, type, cbData; - LPWSTR value; - static const WCHAR nW[]={'N', 0}; - - type=0xdeadbeef; - cbData=0xdeadbeef; - /* When successful RegQueryValueExW() leaves GLE as is, - * so we must reset it to detect unimplemented functions. - */ - SetLastError(0xdeadbeef); - ret = RegQueryValueExW(hkey_main, name, NULL, &type, NULL, &cbData); - GLE = GetLastError(); - ok(ret == ERROR_SUCCESS, "RegQueryValueExW failed: %d, GLE=%d\n", ret, GLE); - if(GLE == ERROR_CALL_NOT_IMPLEMENTED) - { - win_skip("RegQueryValueExW() is not implemented\n"); - return; - } - - ok(type == REG_SZ, "RegQueryValueExW returned type %d\n", type); - ok(cbData == full_byte_len, - "cbData=%d instead of %d\n", cbData, full_byte_len); - - value = HeapAlloc(GetProcessHeap(), 0, (cbData+2)*sizeof(*value)); - lstrcpyW(value, nW); - type=0xdeadbeef; - ret = RegQueryValueExW(hkey_main, name, NULL, &type, (BYTE*)value, &cbData); - GLE = GetLastError(); - ok(ret == ERROR_SUCCESS, "RegQueryValueExW failed: %d, GLE=%d\n", ret, GLE); - if (!string) - { - /* When cbData == 0, RegQueryValueExW() should not modify the buffer */ - string=nW; - } - ok(memcmp(value, string, cbData) == 0, "RegQueryValueExW failed: %s/%d != %s/%d\n", - wine_debugstr_wn(value, cbData / sizeof(WCHAR)), cbData, - wine_debugstr_wn(string, full_byte_len / sizeof(WCHAR)), full_byte_len); - HeapFree(GetProcessHeap(), 0, value); -} - -static void test_set_value(void) -{ - DWORD ret; - - static const WCHAR name1W[] = {'C','l','e','a','n','S','i','n','g','l','e','S','t','r','i','n','g', 0}; - static const WCHAR name2W[] = {'S','o','m','e','I','n','t','r','a','Z','e','r','o','e','d','S','t','r','i','n','g', 0}; - static const WCHAR emptyW[] = {0}; - static const WCHAR string1W[] = {'T','h','i','s','N','e','v','e','r','B','r','e','a','k','s', 0}; - static const WCHAR string2W[] = {'T','h','i','s', 0 ,'B','r','e','a','k','s', 0 , 0 ,'A', 0 , 0 , 0 , 'L','o','t', 0 , 0 , 0 , 0, 0}; - static const WCHAR substring2W[] = {'T','h','i','s',0}; - - static const char name1A[] = "CleanSingleString"; - static const char name2A[] = "SomeIntraZeroedString"; - static const char emptyA[] = ""; - static const char string1A[] = "ThisNeverBreaks"; - static const char string2A[] = "This\0Breaks\0\0A\0\0\0Lot\0\0\0\0"; - static const char substring2A[] = "This"; - - if (0) - { - /* Crashes on NT4, Windows 2000 and XP SP1 */ - ret = RegSetValueA(hkey_main, NULL, REG_SZ, NULL, 0); - ok(ret == ERROR_INVALID_PARAMETER, "RegSetValueA should have failed with ERROR_INVALID_PARAMETER instead of %d\n", ret); - } - - ret = RegSetValueA(hkey_main, NULL, REG_SZ, string1A, sizeof(string1A)); - ok(ret == ERROR_SUCCESS, "RegSetValueA failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(NULL, string1A, sizeof(string1A)); - test_hkey_main_Value_W(NULL, string1W, sizeof(string1W)); - - /* RegSetValueA ignores the size passed in */ - ret = RegSetValueA(hkey_main, NULL, REG_SZ, string1A, 4); - ok(ret == ERROR_SUCCESS, "RegSetValueA failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(NULL, string1A, sizeof(string1A)); - test_hkey_main_Value_W(NULL, string1W, sizeof(string1W)); - - /* stops at first null */ - ret = RegSetValueA(hkey_main, NULL, REG_SZ, string2A, sizeof(string2A)); - ok(ret == ERROR_SUCCESS, "RegSetValueA failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(NULL, substring2A, sizeof(substring2A)); - test_hkey_main_Value_W(NULL, substring2W, sizeof(substring2W)); - - /* only REG_SZ is supported on NT*/ - ret = RegSetValueA(hkey_main, NULL, REG_BINARY, string2A, sizeof(string2A)); - /* NT: ERROR_INVALID_PARAMETER, 9x: ERROR_SUCCESS */ - ok(ret == ERROR_INVALID_PARAMETER || broken(ret == ERROR_SUCCESS), - "got %d (expected ERROR_INVALID_PARAMETER or ERROR_SUCCESS)\n", ret); - - ret = RegSetValueA(hkey_main, NULL, REG_EXPAND_SZ, string2A, sizeof(string2A)); - /* NT: ERROR_INVALID_PARAMETER, 9x: ERROR_SUCCESS */ - ok(ret == ERROR_INVALID_PARAMETER || broken(ret == ERROR_SUCCESS), - "got %d (expected ERROR_INVALID_PARAMETER or ERROR_SUCCESS)\n", ret); - - ret = RegSetValueA(hkey_main, NULL, REG_MULTI_SZ, string2A, sizeof(string2A)); - /* NT: ERROR_INVALID_PARAMETER, 9x: ERROR_SUCCESS */ - ok(ret == ERROR_INVALID_PARAMETER || broken(ret == ERROR_SUCCESS), - "got %d (expected ERROR_INVALID_PARAMETER or ERROR_SUCCESS)\n", ret); - - /* Test RegSetValueExA with a 'zero-byte' string (as Office 2003 does). - * Surprisingly enough we're supposed to get zero bytes out of it. - */ - ret = RegSetValueExA(hkey_main, name1A, 0, REG_SZ, (const BYTE *)emptyA, 0); - ok(ret == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(name1A, NULL, 0); - test_hkey_main_Value_W(name1W, NULL, 0); - - /* test RegSetValueExA with an empty string */ - ret = RegSetValueExA(hkey_main, name1A, 0, REG_SZ, (const BYTE *)emptyA, sizeof(emptyA)); - ok(ret == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(name1A, emptyA, sizeof(emptyA)); - test_hkey_main_Value_W(name1W, emptyW, sizeof(emptyW)); - - /* test RegSetValueExA with off-by-one size */ - ret = RegSetValueExA(hkey_main, name1A, 0, REG_SZ, (const BYTE *)string1A, sizeof(string1A)-sizeof(string1A[0])); - ok(ret == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(name1A, string1A, sizeof(string1A)); - test_hkey_main_Value_W(name1W, string1W, sizeof(string1W)); - - /* test RegSetValueExA with normal string */ - ret = RegSetValueExA(hkey_main, name1A, 0, REG_SZ, (const BYTE *)string1A, sizeof(string1A)); - ok(ret == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(name1A, string1A, sizeof(string1A)); - test_hkey_main_Value_W(name1W, string1W, sizeof(string1W)); - - /* test RegSetValueExA with intrazeroed string */ - ret = RegSetValueExA(hkey_main, name2A, 0, REG_SZ, (const BYTE *)string2A, sizeof(string2A)); - ok(ret == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(name2A, string2A, sizeof(string2A)); - test_hkey_main_Value_W(name2W, string2W, sizeof(string2W)); - - /* 9x doesn't support W-calls, so don't test them then */ - if(GLE == ERROR_CALL_NOT_IMPLEMENTED) return; - - if (0) - { - /* Crashes on NT4, Windows 2000 and XP SP1 */ - ret = RegSetValueW(hkey_main, NULL, REG_SZ, NULL, 0); - ok(ret == ERROR_INVALID_PARAMETER, "RegSetValueW should have failed with ERROR_INVALID_PARAMETER instead of %d\n", ret); - } - - ret = RegSetValueW(hkey_main, NULL, REG_SZ, string1W, sizeof(string1W)); - ok(ret == ERROR_SUCCESS, "RegSetValueW failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(NULL, string1A, sizeof(string1A)); - test_hkey_main_Value_W(NULL, string1W, sizeof(string1W)); - - /* RegSetValueA ignores the size passed in */ - ret = RegSetValueW(hkey_main, NULL, REG_SZ, string1W, 4 * sizeof(string1W[0])); - ok(ret == ERROR_SUCCESS, "RegSetValueW failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(NULL, string1A, sizeof(string1A)); - test_hkey_main_Value_W(NULL, string1W, sizeof(string1W)); - - /* stops at first null */ - ret = RegSetValueW(hkey_main, NULL, REG_SZ, string2W, sizeof(string2W)); - ok(ret == ERROR_SUCCESS, "RegSetValueW failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(NULL, substring2A, sizeof(substring2A)); - test_hkey_main_Value_W(NULL, substring2W, sizeof(substring2W)); - - /* only REG_SZ is supported */ - ret = RegSetValueW(hkey_main, NULL, REG_BINARY, string2W, sizeof(string2W)); - ok(ret == ERROR_INVALID_PARAMETER, "RegSetValueW should have returned ERROR_INVALID_PARAMETER instead of %d\n", ret); - ret = RegSetValueW(hkey_main, NULL, REG_EXPAND_SZ, string2W, sizeof(string2W)); - ok(ret == ERROR_INVALID_PARAMETER, "RegSetValueW should have returned ERROR_INVALID_PARAMETER instead of %d\n", ret); - ret = RegSetValueW(hkey_main, NULL, REG_MULTI_SZ, string2W, sizeof(string2W)); - ok(ret == ERROR_INVALID_PARAMETER, "RegSetValueW should have returned ERROR_INVALID_PARAMETER instead of %d\n", ret); - - /* test RegSetValueExW with off-by-one size */ - ret = RegSetValueExW(hkey_main, name1W, 0, REG_SZ, (const BYTE *)string1W, sizeof(string1W)-sizeof(string1W[0])); - ok(ret == ERROR_SUCCESS, "RegSetValueExW failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(name1A, string1A, sizeof(string1A)); - test_hkey_main_Value_W(name1W, string1W, sizeof(string1W)); - - /* test RegSetValueExW with normal string */ - ret = RegSetValueExW(hkey_main, name1W, 0, REG_SZ, (const BYTE *)string1W, sizeof(string1W)); - ok(ret == ERROR_SUCCESS, "RegSetValueExW failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(name1A, string1A, sizeof(string1A)); - test_hkey_main_Value_W(name1W, string1W, sizeof(string1W)); - - /* test RegSetValueExW with intrazeroed string */ - ret = RegSetValueExW(hkey_main, name2W, 0, REG_SZ, (const BYTE *)string2W, sizeof(string2W)); - ok(ret == ERROR_SUCCESS, "RegSetValueExW failed: %d, GLE=%d\n", ret, GetLastError()); - test_hkey_main_Value_A(name2A, string2A, sizeof(string2A)); - test_hkey_main_Value_W(name2W, string2W, sizeof(string2W)); -} - -static void create_test_entries(void) -{ - static const DWORD qw[2] = { 0x12345678, 0x87654321 }; - - SetEnvironmentVariableA("LONGSYSTEMVAR", "bar"); - SetEnvironmentVariableA("FOO", "ImARatherLongButIndeedNeededString"); - - ok(!RegSetValueExA(hkey_main,"TP1_EXP_SZ",0,REG_EXPAND_SZ, (const BYTE *)sTestpath1, strlen(sTestpath1)+1), - "RegSetValueExA failed\n"); - ok(!RegSetValueExA(hkey_main,"TP1_SZ",0,REG_SZ, (const BYTE *)sTestpath1, strlen(sTestpath1)+1), - "RegSetValueExA failed\n"); - ok(!RegSetValueExA(hkey_main,"TP1_ZB_SZ",0,REG_SZ, (const BYTE *)"", 0), - "RegSetValueExA failed\n"); - ok(!RegSetValueExA(hkey_main,"TP2_EXP_SZ",0,REG_EXPAND_SZ, (const BYTE *)sTestpath2, strlen(sTestpath2)+1), - "RegSetValueExA failed\n"); - ok(!RegSetValueExA(hkey_main,"DWORD",0,REG_DWORD, (const BYTE *)qw, 4), - "RegSetValueExA failed\n"); - ok(!RegSetValueExA(hkey_main,"BIN32",0,REG_BINARY, (const BYTE *)qw, 4), - "RegSetValueExA failed\n"); - ok(!RegSetValueExA(hkey_main,"BIN64",0,REG_BINARY, (const BYTE *)qw, 8), - "RegSetValueExA failed\n"); -} - -static void test_enum_value(void) -{ - DWORD res; - HKEY test_key; - char value[20], data[20]; - WCHAR valueW[20], dataW[20]; - DWORD val_count, data_count, type; - static const WCHAR foobarW[] = {'f','o','o','b','a','r',0}; - static const WCHAR testW[] = {'T','e','s','t',0}; - static const WCHAR xxxW[] = {'x','x','x','x','x','x','x','x',0}; - - /* create the working key for new 'Test' value */ - res = RegCreateKeyA( hkey_main, "TestKey", &test_key ); - ok( res == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", res); - - /* check NULL data with zero length */ - res = RegSetValueExA( test_key, "Test", 0, REG_SZ, NULL, 0 ); - if (GetVersion() & 0x80000000) - ok( res == ERROR_INVALID_PARAMETER, "RegSetValueExA returned %d\n", res ); - else - ok( !res, "RegSetValueExA returned %d\n", res ); - res = RegSetValueExA( test_key, "Test", 0, REG_EXPAND_SZ, NULL, 0 ); - ok( ERROR_SUCCESS == res || ERROR_INVALID_PARAMETER == res, "RegSetValueExA returned %d\n", res ); - res = RegSetValueExA( test_key, "Test", 0, REG_BINARY, NULL, 0 ); - ok( ERROR_SUCCESS == res || ERROR_INVALID_PARAMETER == res, "RegSetValueExA returned %d\n", res ); - - res = RegSetValueExA( test_key, "Test", 0, REG_SZ, (const BYTE *)"foobar", 7 ); - ok( res == 0, "RegSetValueExA failed error %d\n", res ); - - /* overflow both name and data */ - val_count = 2; - data_count = 2; - type = 1234; - strcpy( value, "xxxxxxxxxx" ); - strcpy( data, "xxxxxxxxxx" ); - res = RegEnumValueA( test_key, 0, value, &val_count, NULL, &type, (LPBYTE)data, &data_count ); - ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", res ); - ok( val_count == 2, "val_count set to %d\n", val_count ); - ok( data_count == 7, "data_count set to %d instead of 7\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value ); - ok( !strcmp( data, "xxxxxxxxxx" ), "data set to '%s'\n", data ); - - /* overflow name */ - val_count = 3; - data_count = 20; - type = 1234; - strcpy( value, "xxxxxxxxxx" ); - strcpy( data, "xxxxxxxxxx" ); - res = RegEnumValueA( test_key, 0, value, &val_count, NULL, &type, (LPBYTE)data, &data_count ); - ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", res ); - /* Win9x returns 2 as specified by MSDN but NT returns 3... */ - ok( val_count == 2 || val_count == 3, "val_count set to %d\n", val_count ); - ok( data_count == 7, "data_count set to %d instead of 7\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - /* v5.1.2600.0 (XP Home and Professional) does not touch value or data in this case */ - ok( !strcmp( value, "Te" ) || !strcmp( value, "xxxxxxxxxx" ), - "value set to '%s' instead of 'Te' or 'xxxxxxxxxx'\n", value ); - ok( !strcmp( data, "foobar" ) || !strcmp( data, "xxxxxxx" ), - "data set to '%s' instead of 'foobar' or 'xxxxxxx'\n", data ); - - /* overflow empty name */ - val_count = 0; - data_count = 20; - type = 1234; - strcpy( value, "xxxxxxxxxx" ); - strcpy( data, "xxxxxxxxxx" ); - res = RegEnumValueA( test_key, 0, value, &val_count, NULL, &type, (LPBYTE)data, &data_count ); - ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", res ); - ok( val_count == 0, "val_count set to %d\n", val_count ); - ok( data_count == 7, "data_count set to %d instead of 7\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value ); - /* v5.1.2600.0 (XP Home and Professional) does not touch data in this case */ - ok( !strcmp( data, "foobar" ) || !strcmp( data, "xxxxxxx" ), - "data set to '%s' instead of 'foobar' or 'xxxxxxx'\n", data ); - - /* overflow data */ - val_count = 20; - data_count = 2; - type = 1234; - strcpy( value, "xxxxxxxxxx" ); - strcpy( data, "xxxxxxxxxx" ); - res = RegEnumValueA( test_key, 0, value, &val_count, NULL, &type, (LPBYTE)data, &data_count ); - ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", res ); - ok( val_count == 20, "val_count set to %d\n", val_count ); - ok( data_count == 7, "data_count set to %d instead of 7\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value ); - ok( !strcmp( data, "xxxxxxxxxx" ), "data set to '%s'\n", data ); - - /* no overflow */ - val_count = 20; - data_count = 20; - type = 1234; - strcpy( value, "xxxxxxxxxx" ); - strcpy( data, "xxxxxxxxxx" ); - res = RegEnumValueA( test_key, 0, value, &val_count, NULL, &type, (LPBYTE)data, &data_count ); - ok( res == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", res ); - ok( val_count == 4, "val_count set to %d instead of 4\n", val_count ); - ok( data_count == 7, "data_count set to %d instead of 7\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - ok( !strcmp( value, "Test" ), "value is '%s' instead of Test\n", value ); - ok( !strcmp( data, "foobar" ), "data is '%s' instead of foobar\n", data ); - - /* Unicode tests */ - - SetLastError(0xdeadbeef); - res = RegSetValueExW( test_key, testW, 0, REG_SZ, (const BYTE *)foobarW, 7*sizeof(WCHAR) ); - if (res==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - win_skip("RegSetValueExW is not implemented\n"); - goto cleanup; - } - ok( res == 0, "RegSetValueExW failed error %d\n", res ); - - /* overflow both name and data */ - val_count = 2; - data_count = 2; - type = 1234; - memcpy( valueW, xxxW, sizeof(xxxW) ); - memcpy( dataW, xxxW, sizeof(xxxW) ); - res = RegEnumValueW( test_key, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count ); - ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", res ); - ok( val_count == 2, "val_count set to %d\n", val_count ); - ok( data_count == 7*sizeof(WCHAR), "data_count set to %d instead of 7*sizeof(WCHAR)\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - ok( !memcmp( valueW, xxxW, sizeof(xxxW) ), "value modified\n" ); - ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" ); - - /* overflow name */ - val_count = 3; - data_count = 20; - type = 1234; - memcpy( valueW, xxxW, sizeof(xxxW) ); - memcpy( dataW, xxxW, sizeof(xxxW) ); - res = RegEnumValueW( test_key, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count ); - ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", res ); - ok( val_count == 3, "val_count set to %d\n", val_count ); - ok( data_count == 7*sizeof(WCHAR), "data_count set to %d instead of 7*sizeof(WCHAR)\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - ok( !memcmp( valueW, xxxW, sizeof(xxxW) ), "value modified\n" ); - ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" ); - - /* overflow data */ - val_count = 20; - data_count = 2; - type = 1234; - memcpy( valueW, xxxW, sizeof(xxxW) ); - memcpy( dataW, xxxW, sizeof(xxxW) ); - res = RegEnumValueW( test_key, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count ); - ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", res ); - ok( val_count == 4, "val_count set to %d instead of 4\n", val_count ); - ok( data_count == 7*sizeof(WCHAR), "data_count set to %d instead of 7*sizeof(WCHAR)\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - ok( !memcmp( valueW, testW, sizeof(testW) ), "value is not 'Test'\n" ); - ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" ); - - /* no overflow */ - val_count = 20; - data_count = 20; - type = 1234; - memcpy( valueW, xxxW, sizeof(xxxW) ); - memcpy( dataW, xxxW, sizeof(xxxW) ); - res = RegEnumValueW( test_key, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count ); - ok( res == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", res ); - ok( val_count == 4, "val_count set to %d instead of 4\n", val_count ); - ok( data_count == 7*sizeof(WCHAR), "data_count set to %d instead of 7*sizeof(WCHAR)\n", data_count ); - ok( type == REG_SZ, "type %d is not REG_SZ\n", type ); - ok( !memcmp( valueW, testW, sizeof(testW) ), "value is not 'Test'\n" ); - ok( !memcmp( dataW, foobarW, sizeof(foobarW) ), "data is not 'foobar'\n" ); - -cleanup: - RegDeleteKeyA(test_key, ""); - RegCloseKey(test_key); -} - -static void test_query_value_ex(void) -{ - DWORD ret; - DWORD size; - DWORD type; - BYTE buffer[10]; - - ret = RegQueryValueExA(hkey_main, "TP1_SZ", NULL, &type, NULL, &size); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - ok(size == strlen(sTestpath1) + 1, "(%d,%d)\n", (DWORD)strlen(sTestpath1) + 1, size); - ok(type == REG_SZ, "type %d is not REG_SZ\n", type); - - type = 0xdeadbeef; - size = 0xdeadbeef; - ret = RegQueryValueExA(HKEY_CLASSES_ROOT, "Nonexistent Value", NULL, &type, NULL, &size); - ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret); - /* the type parameter is cleared on Win9x, but is set to a random value on - * NT, so don't do that test there. The size parameter is left untouched on Win9x - * but cleared on NT+, this can be tested on all platforms. - */ - if (GetVersion() & 0x80000000) - { - ok(type == 0, "type should have been set to 0 instead of 0x%x\n", type); - ok(size == 0xdeadbeef, "size should have been left untouched (0xdeadbeef)\n"); - } - else - { - trace("test_query_value_ex: type set to: 0x%08x\n", type); - ok(size == 0, "size should have been set to 0 instead of %d\n", size); - } - - size = sizeof(buffer); - ret = RegQueryValueExA(HKEY_CLASSES_ROOT, "Nonexistent Value", NULL, &type, buffer, &size); - ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret); - ok(size == sizeof(buffer), "size shouldn't have been changed to %d\n", size); - - size = 4; - ret = RegQueryValueExA(hkey_main, "BIN32", NULL, &size, buffer, &size); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); -} - -static void test_get_value(void) -{ - DWORD ret; - DWORD size; - DWORD type; - DWORD dw, qw[2]; - CHAR buf[80]; - CHAR expanded[] = "bar\\subdir1"; - CHAR expanded2[] = "ImARatherLongButIndeedNeededString\\subdir1"; - - if(!pRegGetValueA) - { - win_skip("RegGetValue not available on this platform\n"); - return; - } - - /* Invalid parameter */ - ret = pRegGetValueA(hkey_main, NULL, "DWORD", RRF_RT_REG_DWORD, &type, &dw, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "ret=%d\n", ret); - - /* Query REG_DWORD using RRF_RT_REG_DWORD (ok) */ - size = type = dw = 0xdeadbeef; - ret = pRegGetValueA(hkey_main, NULL, "DWORD", RRF_RT_REG_DWORD, &type, &dw, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - ok(size == 4, "size=%d\n", size); - ok(type == REG_DWORD, "type=%d\n", type); - ok(dw == 0x12345678, "dw=%d\n", dw); - - /* Query by subkey-name */ - ret = pRegGetValueA(HKEY_CURRENT_USER, "Software\\Wine\\Test", "DWORD", RRF_RT_REG_DWORD, NULL, NULL, NULL); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - - /* Query REG_DWORD using RRF_RT_REG_BINARY (restricted) */ - size = type = dw = 0xdeadbeef; - ret = pRegGetValueA(hkey_main, NULL, "DWORD", RRF_RT_REG_BINARY, &type, &dw, &size); - ok(ret == ERROR_UNSUPPORTED_TYPE, "ret=%d\n", ret); - /* Although the function failed all values are retrieved */ - ok(size == 4, "size=%d\n", size); - ok(type == REG_DWORD, "type=%d\n", type); - ok(dw == 0x12345678, "dw=%d\n", dw); - - /* Test RRF_ZEROONFAILURE */ - type = dw = 0xdeadbeef; size = 4; - ret = pRegGetValueA(hkey_main, NULL, "DWORD", RRF_RT_REG_SZ|RRF_ZEROONFAILURE, &type, &dw, &size); - ok(ret == ERROR_UNSUPPORTED_TYPE, "ret=%d\n", ret); - /* Again all values are retrieved ... */ - ok(size == 4, "size=%d\n", size); - ok(type == REG_DWORD, "type=%d\n", type); - /* ... except the buffer, which is zeroed out */ - ok(dw == 0, "dw=%d\n", dw); - - /* Test RRF_ZEROONFAILURE with a NULL buffer... */ - type = size = 0xbadbeef; - ret = pRegGetValueA(hkey_main, NULL, "DWORD", RRF_RT_REG_SZ|RRF_ZEROONFAILURE, &type, NULL, &size); - ok(ret == ERROR_UNSUPPORTED_TYPE, "ret=%d\n", ret); - ok(size == 4, "size=%d\n", size); - ok(type == REG_DWORD, "type=%d\n", type); - - /* Query REG_DWORD using RRF_RT_DWORD (ok) */ - size = type = dw = 0xdeadbeef; - ret = pRegGetValueA(hkey_main, NULL, "DWORD", RRF_RT_DWORD, &type, &dw, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - ok(size == 4, "size=%d\n", size); - ok(type == REG_DWORD, "type=%d\n", type); - ok(dw == 0x12345678, "dw=%d\n", dw); - - /* Query 32-bit REG_BINARY using RRF_RT_DWORD (ok) */ - size = type = dw = 0xdeadbeef; - ret = pRegGetValueA(hkey_main, NULL, "BIN32", RRF_RT_DWORD, &type, &dw, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - ok(size == 4, "size=%d\n", size); - ok(type == REG_BINARY, "type=%d\n", type); - ok(dw == 0x12345678, "dw=%d\n", dw); - - /* Query 64-bit REG_BINARY using RRF_RT_DWORD (type mismatch) */ - qw[0] = qw[1] = size = type = 0xdeadbeef; - ret = pRegGetValueA(hkey_main, NULL, "BIN64", RRF_RT_DWORD, &type, qw, &size); - ok(ret == ERROR_DATATYPE_MISMATCH, "ret=%d\n", ret); - ok(size == 8, "size=%d\n", size); - ok(type == REG_BINARY, "type=%d\n", type); - ok(qw[0] == 0x12345678 && - qw[1] == 0x87654321, "qw={%d,%d}\n", qw[0], qw[1]); - - /* Query 64-bit REG_BINARY using 32-bit buffer (buffer too small) */ - type = dw = 0xdeadbeef; size = 4; - ret = pRegGetValueA(hkey_main, NULL, "BIN64", RRF_RT_REG_BINARY, &type, &dw, &size); - ok(ret == ERROR_MORE_DATA, "ret=%d\n", ret); - ok(dw == 0xdeadbeef, "dw=%d\n", dw); - ok(size == 8, "size=%d\n", size); - - /* Query 64-bit REG_BINARY using RRF_RT_QWORD (ok) */ - qw[0] = qw[1] = size = type = 0xdeadbeef; - ret = pRegGetValueA(hkey_main, NULL, "BIN64", RRF_RT_QWORD, &type, qw, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - ok(size == 8, "size=%d\n", size); - ok(type == REG_BINARY, "type=%d\n", type); - ok(qw[0] == 0x12345678 && - qw[1] == 0x87654321, "qw={%d,%d}\n", qw[0], qw[1]); - - /* Query REG_SZ using RRF_RT_REG_SZ (ok) */ - buf[0] = 0; type = 0xdeadbeef; size = sizeof(buf); - ret = pRegGetValueA(hkey_main, NULL, "TP1_SZ", RRF_RT_REG_SZ, &type, buf, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - ok(size == strlen(sTestpath1)+1, "strlen(sTestpath1)=%d size=%d\n", lstrlenA(sTestpath1), size); - ok(type == REG_SZ, "type=%d\n", type); - ok(!strcmp(sTestpath1, buf), "sTestpath=\"%s\" buf=\"%s\"\n", sTestpath1, buf); - - /* Query REG_SZ using RRF_RT_REG_SZ and no buffer (ok) */ - type = 0xdeadbeef; size = 0; - ret = pRegGetValueA(hkey_main, NULL, "TP1_SZ", RRF_RT_REG_SZ, &type, NULL, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - /* v5.2.3790.1830 (2003 SP1) returns sTestpath1 length + 2 here. */ - ok(size == strlen(sTestpath1)+1 || broken(size == strlen(sTestpath1)+2), - "strlen(sTestpath1)=%d size=%d\n", lstrlenA(sTestpath1), size); - ok(type == REG_SZ, "type=%d\n", type); - - /* Query REG_SZ using RRF_RT_REG_SZ on a zero-byte value (ok) */ - strcpy(buf, sTestpath1); - type = 0xdeadbeef; - size = sizeof(buf); - ret = pRegGetValueA(hkey_main, NULL, "TP1_ZB_SZ", RRF_RT_REG_SZ, &type, buf, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - /* v5.2.3790.1830 (2003 SP1) returns sTestpath1 length + 2 here. */ - ok(size == 0 || - size == 1, /* win2k3 */ - "size=%d\n", size); - ok(type == REG_SZ, "type=%d\n", type); - ok(!strcmp(sTestpath1, buf) || - !strcmp(buf, ""), - "Expected \"%s\" or \"\", got \"%s\"\n", sTestpath1, buf); - - /* Query REG_SZ using RRF_RT_REG_SZ|RRF_NOEXPAND (ok) */ - buf[0] = 0; type = 0xdeadbeef; size = sizeof(buf); - ret = pRegGetValueA(hkey_main, NULL, "TP1_SZ", RRF_RT_REG_SZ|RRF_NOEXPAND, &type, buf, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - ok(size == strlen(sTestpath1)+1, "strlen(sTestpath1)=%d size=%d\n", lstrlenA(sTestpath1), size); - ok(type == REG_SZ, "type=%d\n", type); - ok(!strcmp(sTestpath1, buf), "sTestpath=\"%s\" buf=\"%s\"\n", sTestpath1, buf); - - /* Query REG_EXPAND_SZ using RRF_RT_REG_SZ and no buffer (ok, expands) */ - size = 0; - ret = pRegGetValueA(hkey_main, NULL, "TP2_EXP_SZ", RRF_RT_REG_SZ, NULL, NULL, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - ok((size == strlen(expanded2)+1) || /* win2k3 SP1 */ - (size == strlen(expanded2)+2) || /* win2k3 SP2 */ - (size == strlen(sTestpath2)+1), - "strlen(expanded2)=%d, strlen(sTestpath2)=%d, size=%d\n", lstrlenA(expanded2), lstrlenA(sTestpath2), size); - - /* Query REG_EXPAND_SZ using RRF_RT_REG_SZ (ok, expands) */ - buf[0] = 0; type = 0xdeadbeef; size = sizeof(buf); - ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_REG_SZ, &type, buf, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - /* At least v5.2.3790.1830 (2003 SP1) returns the unexpanded sTestpath1 length + 1 here. */ - ok(size == strlen(expanded)+1 || broken(size == strlen(sTestpath1)+1), - "strlen(expanded)=%d, strlen(sTestpath1)=%d, size=%d\n", lstrlenA(expanded), lstrlenA(sTestpath1), size); - ok(type == REG_SZ, "type=%d\n", type); - ok(!strcmp(expanded, buf), "expanded=\"%s\" buf=\"%s\"\n", expanded, buf); - - /* Query REG_EXPAND_SZ using RRF_RT_REG_SZ (ok, expands a lot) */ - buf[0] = 0; type = 0xdeadbeef; size = sizeof(buf); - ret = pRegGetValueA(hkey_main, NULL, "TP2_EXP_SZ", RRF_RT_REG_SZ, &type, buf, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - /* At least v5.2.3790.1830 (2003 SP1) returns the unexpanded sTestpath2 length + 1 here. */ - ok(size == strlen(expanded2)+1 || broken(size == strlen(sTestpath2)+1), - "strlen(expanded2)=%d, strlen(sTestpath1)=%d, size=%d\n", lstrlenA(expanded2), lstrlenA(sTestpath2), size); - ok(type == REG_SZ, "type=%d\n", type); - ok(!strcmp(expanded2, buf), "expanded2=\"%s\" buf=\"%s\"\n", expanded2, buf); - - /* Query REG_EXPAND_SZ using RRF_RT_REG_EXPAND_SZ|RRF_NOEXPAND (ok, doesn't expand) */ - buf[0] = 0; type = 0xdeadbeef; size = sizeof(buf); - ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_REG_EXPAND_SZ|RRF_NOEXPAND, &type, buf, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - ok(size == strlen(sTestpath1)+1, "strlen(sTestpath1)=%d size=%d\n", lstrlenA(sTestpath1), size); - ok(type == REG_EXPAND_SZ, "type=%d\n", type); - ok(!strcmp(sTestpath1, buf), "sTestpath=\"%s\" buf=\"%s\"\n", sTestpath1, buf); - - /* Query REG_EXPAND_SZ using RRF_RT_REG_EXPAND_SZ|RRF_NOEXPAND and no buffer (ok, doesn't expand) */ - size = 0xbadbeef; - ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_REG_EXPAND_SZ|RRF_NOEXPAND, NULL, NULL, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - /* v5.2.3790.1830 (2003 SP1) returns sTestpath1 length + 2 here. */ - ok(size == strlen(sTestpath1)+1 || broken(size == strlen(sTestpath1)+2), - "strlen(sTestpath1)=%d size=%d\n", lstrlenA(sTestpath1), size); - - /* Query REG_EXPAND_SZ using RRF_RT_REG_SZ|RRF_NOEXPAND (type mismatch) */ - ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_REG_SZ|RRF_NOEXPAND, NULL, NULL, NULL); - ok(ret == ERROR_UNSUPPORTED_TYPE, "ret=%d\n", ret); - - /* Query REG_EXPAND_SZ using RRF_RT_REG_EXPAND_SZ (not allowed without RRF_NOEXPAND) */ - ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_REG_EXPAND_SZ, NULL, NULL, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "ret=%d\n", ret); - - /* Query REG_EXPAND_SZ using RRF_RT_ANY */ - buf[0] = 0; type = 0xdeadbeef; size = sizeof(buf); - ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_ANY, &type, buf, &size); - ok(ret == ERROR_SUCCESS, "ret=%d\n", ret); - /* At least v5.2.3790.1830 (2003 SP1) returns the unexpanded sTestpath1 length + 1 here. */ - ok(size == strlen(expanded)+1 || broken(size == strlen(sTestpath1)+1), - "strlen(expanded)=%d, strlen(sTestpath1)=%d, size=%d\n", lstrlenA(expanded), lstrlenA(sTestpath1), size); - ok(type == REG_SZ, "type=%d\n", type); - ok(!strcmp(expanded, buf), "expanded=\"%s\" buf=\"%s\"\n", expanded, buf); -} - -static void test_reg_open_key(void) -{ - DWORD ret = 0; - HKEY hkResult = NULL; - HKEY hkPreserve = NULL; - - /* successful open */ - ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkResult); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - ok(hkResult != NULL, "expected hkResult != NULL\n"); - hkPreserve = hkResult; - - /* these tests fail on Win9x, but we want to be compatible with NT, so - * run them if we can */ - if (!(GetVersion() & 0x80000000)) - { - /* open same key twice */ - ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkResult); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - ok(hkResult != hkPreserve, "epxected hkResult != hkPreserve\n"); - ok(hkResult != NULL, "hkResult != NULL\n"); - RegCloseKey(hkResult); - - /* open nonexistent key - * check that hkResult is set to NULL - */ - hkResult = hkPreserve; - ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Nonexistent", &hkResult); - ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret); - ok(hkResult == NULL, "expected hkResult == NULL\n"); - - /* open the same nonexistent key again to make sure the key wasn't created */ - hkResult = hkPreserve; - ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Nonexistent", &hkResult); - ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret); - ok(hkResult == NULL, "expected hkResult == NULL\n"); - - /* send in NULL lpSubKey - * check that hkResult receives the value of hKey - */ - hkResult = hkPreserve; - ret = RegOpenKeyA(HKEY_CURRENT_USER, NULL, &hkResult); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - ok(hkResult == HKEY_CURRENT_USER, "expected hkResult == HKEY_CURRENT_USER\n"); - - /* send empty-string in lpSubKey */ - hkResult = hkPreserve; - ret = RegOpenKeyA(HKEY_CURRENT_USER, "", &hkResult); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - ok(hkResult == HKEY_CURRENT_USER, "expected hkResult == HKEY_CURRENT_USER\n"); - - /* send in NULL lpSubKey and NULL hKey - * hkResult is set to NULL - */ - hkResult = hkPreserve; - ret = RegOpenKeyA(NULL, NULL, &hkResult); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - ok(hkResult == NULL, "expected hkResult == NULL\n"); - } - - /* only send NULL hKey - * the value of hkResult remains unchanged - */ - hkResult = hkPreserve; - ret = RegOpenKeyA(NULL, "Software\\Wine\\Test", &hkResult); - ok(ret == ERROR_INVALID_HANDLE || ret == ERROR_BADKEY, /* Windows 95 returns BADKEY */ - "expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got %d\n", ret); - ok(hkResult == hkPreserve, "expected hkResult == hkPreserve\n"); - RegCloseKey(hkResult); - - /* send in NULL hkResult */ - ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Test", NULL); - ok(ret == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", ret); - - /* beginning backslash character */ - ret = RegOpenKeyA(HKEY_CURRENT_USER, "\\Software\\Wine\\Test", &hkResult); - ok(ret == ERROR_BAD_PATHNAME || /* NT/2k/XP */ - ret == ERROR_FILE_NOT_FOUND /* Win9x,ME */ - , "expected ERROR_BAD_PATHNAME or ERROR_FILE_NOT_FOUND, got %d\n", ret); - - /* WOW64 flags */ - hkResult = NULL; - ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software", 0, KEY_READ|KEY_WOW64_32KEY, &hkResult); - ok((ret == ERROR_SUCCESS && hkResult != NULL) || broken(ret == ERROR_ACCESS_DENIED /* NT4, win2k */), - "RegOpenKeyEx with KEY_WOW64_32KEY failed (err=%u)\n", ret); - RegCloseKey(hkResult); - - hkResult = NULL; - ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software", 0, KEY_READ|KEY_WOW64_64KEY, &hkResult); - ok((ret == ERROR_SUCCESS && hkResult != NULL) || broken(ret == ERROR_ACCESS_DENIED /* NT4, win2k */), - "RegOpenKeyEx with KEY_WOW64_64KEY failed (err=%u)\n", ret); - RegCloseKey(hkResult); -} - -static void test_reg_create_key(void) -{ - LONG ret; - HKEY hkey1, hkey2; - ret = RegCreateKeyExA(hkey_main, "Subkey1", 0, NULL, 0, KEY_NOTIFY, NULL, &hkey1, NULL); - ok(!ret, "RegCreateKeyExA failed with error %d\n", ret); - /* should succeed: all versions of Windows ignore the access rights - * to the parent handle */ - ret = RegCreateKeyExA(hkey1, "Subkey2", 0, NULL, 0, KEY_SET_VALUE, NULL, &hkey2, NULL); - ok(!ret, "RegCreateKeyExA failed with error %d\n", ret); - - /* clean up */ - RegDeleteKey(hkey2, ""); - RegDeleteKey(hkey1, ""); - - /* beginning backslash character */ - ret = RegCreateKeyExA(hkey_main, "\\Subkey3", 0, NULL, 0, KEY_NOTIFY, NULL, &hkey1, NULL); - if (!(GetVersion() & 0x80000000)) - ok(ret == ERROR_BAD_PATHNAME, "expected ERROR_BAD_PATHNAME, got %d\n", ret); - else { - ok(!ret, "RegCreateKeyExA failed with error %d\n", ret); - RegDeleteKey(hkey1, NULL); - } - - /* WOW64 flags - open an existing key */ - hkey1 = NULL; - ret = RegCreateKeyExA(HKEY_LOCAL_MACHINE, "Software", 0, NULL, 0, KEY_READ|KEY_WOW64_32KEY, NULL, &hkey1, NULL); - ok((ret == ERROR_SUCCESS && hkey1 != NULL) || broken(ret == ERROR_ACCESS_DENIED /* NT4, win2k */), - "RegOpenKeyEx with KEY_WOW64_32KEY failed (err=%u)\n", ret); - RegCloseKey(hkey1); - - hkey1 = NULL; - ret = RegCreateKeyExA(HKEY_LOCAL_MACHINE, "Software", 0, NULL, 0, KEY_READ|KEY_WOW64_64KEY, NULL, &hkey1, NULL); - ok((ret == ERROR_SUCCESS && hkey1 != NULL) || broken(ret == ERROR_ACCESS_DENIED /* NT4, win2k */), - "RegOpenKeyEx with KEY_WOW64_64KEY failed (err=%u)\n", ret); - RegCloseKey(hkey1); -} - -static void test_reg_close_key(void) -{ - DWORD ret = 0; - HKEY hkHandle; - - /* successfully close key - * hkHandle remains changed after call to RegCloseKey - */ - ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkHandle); - ret = RegCloseKey(hkHandle); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - - /* try to close the key twice */ - ret = RegCloseKey(hkHandle); /* Windows 95 doesn't mind. */ - ok(ret == ERROR_INVALID_HANDLE || ret == ERROR_SUCCESS, - "expected ERROR_INVALID_HANDLE or ERROR_SUCCESS, got %d\n", ret); - - /* try to close a NULL handle */ - ret = RegCloseKey(NULL); - ok(ret == ERROR_INVALID_HANDLE || ret == ERROR_BADKEY, /* Windows 95 returns BADKEY */ - "expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got %d\n", ret); - - /* Check to see if we didn't potentially close our main handle, which could happen on win98 as - * win98 doesn't give a new handle when the same key is opened. - * Not re-opening will make some next tests fail. - */ - if (hkey_main == hkHandle) - { - trace("The main handle is most likely closed, so re-opening\n"); - RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkey_main ); - } -} - -static void test_reg_delete_key(void) -{ - DWORD ret; - - ret = RegDeleteKey(hkey_main, NULL); - - /* There is a bug in NT4 and W2K that doesn't check if the subkey is NULL. If - * there are also no subkeys available it will delete the key pointed to by hkey_main. - * Not re-creating will make some next tests fail. - */ - if (ret == ERROR_SUCCESS) - { - trace("We are probably running on NT4 or W2K as the main key is deleted," - " re-creating the main key\n"); - setup_main_key(); - } - else - ok(ret == ERROR_INVALID_PARAMETER || - ret == ERROR_ACCESS_DENIED || - ret == ERROR_BADKEY, /* Win95 */ - "ret=%d\n", ret); -} - -static void test_reg_save_key(void) -{ - DWORD ret; - - ret = RegSaveKey(hkey_main, "saved_key", NULL); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); -} - -static void test_reg_load_key(void) -{ - DWORD ret; - HKEY hkHandle; - - ret = RegLoadKey(HKEY_LOCAL_MACHINE, "Test", "saved_key"); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - - ret = RegOpenKey(HKEY_LOCAL_MACHINE, "Test", &hkHandle); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - - RegCloseKey(hkHandle); -} - -static void test_reg_unload_key(void) -{ - DWORD ret; - - ret = RegUnLoadKey(HKEY_LOCAL_MACHINE, "Test"); - ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - - DeleteFile("saved_key"); - DeleteFile("saved_key.LOG"); -} - -static BOOL set_privileges(LPCSTR privilege, BOOL set) -{ - TOKEN_PRIVILEGES tp; - HANDLE hToken; - LUID luid; - - if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) - return FALSE; - - if(!LookupPrivilegeValue(NULL, privilege, &luid)) - { - CloseHandle(hToken); - return FALSE; - } - - tp.PrivilegeCount = 1; - tp.Privileges[0].Luid = luid; - - if (set) - tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - else - tp.Privileges[0].Attributes = 0; - - AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL); - if (GetLastError() != ERROR_SUCCESS) - { - CloseHandle(hToken); - return FALSE; - } - - CloseHandle(hToken); - return TRUE; -} - -/* tests that show that RegConnectRegistry and - OpenSCManager accept computer names without the - \\ prefix (what MSDN says). */ -static void test_regconnectregistry( void) -{ - CHAR compName[MAX_COMPUTERNAME_LENGTH + 1]; - CHAR netwName[MAX_COMPUTERNAME_LENGTH + 3]; /* 2 chars for double backslash */ - DWORD len = sizeof(compName) ; - BOOL ret; - LONG retl; - HKEY hkey; - SC_HANDLE schnd; - - SetLastError(0xdeadbeef); - ret = GetComputerNameA(compName, &len); - ok( ret, "GetComputerName failed err = %d\n", GetLastError()); - if( !ret) return; - - lstrcpyA(netwName, "\\\\"); - lstrcpynA(netwName+2, compName, MAX_COMPUTERNAME_LENGTH + 1); - - retl = RegConnectRegistryA( compName, HKEY_LOCAL_MACHINE, &hkey); - ok( !retl || - retl == ERROR_DLL_INIT_FAILED || - retl == ERROR_BAD_NETPATH, /* some win2k */ - "RegConnectRegistryA failed err = %d\n", retl); - if( !retl) RegCloseKey( hkey); - - retl = RegConnectRegistryA( netwName, HKEY_LOCAL_MACHINE, &hkey); - ok( !retl || - retl == ERROR_DLL_INIT_FAILED || - retl == ERROR_BAD_NETPATH, /* some win2k */ - "RegConnectRegistryA failed err = %d\n", retl); - if( !retl) RegCloseKey( hkey); - - SetLastError(0xdeadbeef); - schnd = OpenSCManagerA( compName, NULL, GENERIC_READ); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - win_skip("OpenSCManagerA is not implemented\n"); - return; - } - - ok( schnd != NULL, "OpenSCManagerA failed err = %d\n", GetLastError()); - CloseServiceHandle( schnd); - - SetLastError(0xdeadbeef); - schnd = OpenSCManagerA( netwName, NULL, GENERIC_READ); - ok( schnd != NULL, "OpenSCManagerA failed err = %d\n", GetLastError()); - CloseServiceHandle( schnd); - -} - -static void test_reg_query_value(void) -{ - HKEY subkey; - CHAR val[MAX_PATH]; - WCHAR valW[5]; - LONG size, ret; - - static const WCHAR expected[] = {'d','a','t','a',0}; - - ret = RegCreateKeyA(hkey_main, "subkey", &subkey); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - - ret = RegSetValueA(subkey, NULL, REG_SZ, "data", 4); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - - /* try an invalid hkey */ - SetLastError(0xdeadbeef); - size = MAX_PATH; - ret = RegQueryValueA((HKEY)0xcafebabe, "subkey", val, &size); - ok(ret == ERROR_INVALID_HANDLE || - ret == ERROR_BADKEY || /* Windows 98 returns BADKEY */ - ret == ERROR_ACCESS_DENIED, /* non-admin winxp */ - "Expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got %d\n", ret); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", GetLastError()); - - /* try a NULL hkey */ - SetLastError(0xdeadbeef); - size = MAX_PATH; - ret = RegQueryValueA(NULL, "subkey", val, &size); - ok(ret == ERROR_INVALID_HANDLE || ret == ERROR_BADKEY, /* Windows 98 returns BADKEY */ - "Expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got %d\n", ret); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", GetLastError()); - - /* try a NULL value */ - size = MAX_PATH; - ret = RegQueryValueA(hkey_main, "subkey", NULL, &size); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(size == 5, "Expected 5, got %d\n", size); - - /* try a NULL size */ - SetLastError(0xdeadbeef); - val[0] = '\0'; - ret = RegQueryValueA(hkey_main, "subkey", val, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", ret); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok(lstrlenA(val) == 0, "Expected val to be untouched, got %s\n", val); - - /* try a NULL value and size */ - ret = RegQueryValueA(hkey_main, "subkey", NULL, NULL); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - - /* try a size too small */ - SetLastError(0xdeadbeef); - val[0] = '\0'; - size = 1; - ret = RegQueryValueA(hkey_main, "subkey", val, &size); - ok(ret == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", ret); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok(lstrlenA(val) == 0, "Expected val to be untouched, got %s\n", val); - ok(size == 5, "Expected 5, got %d\n", size); - - /* successfully read the value using 'subkey' */ - size = MAX_PATH; - ret = RegQueryValueA(hkey_main, "subkey", val, &size); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(!lstrcmpA(val, "data"), "Expected 'data', got '%s'\n", val); - ok(size == 5, "Expected 5, got %d\n", size); - - /* successfully read the value using the subkey key */ - size = MAX_PATH; - ret = RegQueryValueA(subkey, NULL, val, &size); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(!lstrcmpA(val, "data"), "Expected 'data', got '%s'\n", val); - ok(size == 5, "Expected 5, got %d\n", size); - - /* unicode - try size too small */ - SetLastError(0xdeadbeef); - valW[0] = '\0'; - size = 0; - ret = RegQueryValueW(subkey, NULL, valW, &size); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - win_skip("RegQueryValueW is not implemented\n"); - goto cleanup; - } - ok(ret == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", ret); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok(lstrlenW(valW) == 0, "Expected valW to be untouched\n"); - ok(size == sizeof(expected), "Got wrong size: %d\n", size); - - /* unicode - try size in WCHARS */ - SetLastError(0xdeadbeef); - size = sizeof(valW) / sizeof(WCHAR); - ret = RegQueryValueW(subkey, NULL, valW, &size); - ok(ret == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", ret); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok(lstrlenW(valW) == 0, "Expected valW to be untouched\n"); - ok(size == sizeof(expected), "Got wrong size: %d\n", size); - - /* unicode - successfully read the value */ - size = sizeof(valW); - ret = RegQueryValueW(subkey, NULL, valW, &size); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(!lstrcmpW(valW, expected), "Got wrong value\n"); - ok(size == sizeof(expected), "Got wrong size: %d\n", size); - - /* unicode - set the value without a NULL terminator */ - ret = RegSetValueW(subkey, NULL, REG_SZ, expected, sizeof(expected)-sizeof(WCHAR)); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - - /* unicode - read the unterminated value, value is terminated for us */ - memset(valW, 'a', sizeof(valW)); - size = sizeof(valW); - ret = RegQueryValueW(subkey, NULL, valW, &size); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(!lstrcmpW(valW, expected), "Got wrong value\n"); - ok(size == sizeof(expected), "Got wrong size: %d\n", size); - -cleanup: - RegDeleteKeyA(subkey, ""); - RegCloseKey(subkey); -} - -static void test_reg_delete_tree(void) -{ - CHAR buffer[MAX_PATH]; - HKEY subkey, subkey2; - LONG size, ret; - - if(!pRegDeleteTreeA) { - win_skip("Skipping RegDeleteTreeA tests, function not present\n"); - return; - } - - ret = RegCreateKeyA(hkey_main, "subkey", &subkey); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegCreateKeyA(subkey, "subkey2", &subkey2); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegSetValueA(subkey, NULL, REG_SZ, "data", 4); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegSetValueA(subkey2, NULL, REG_SZ, "data2", 5); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegCloseKey(subkey2); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - - ret = pRegDeleteTreeA(subkey, "subkey2"); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(RegOpenKeyA(subkey, "subkey2", &subkey2), - "subkey2 was not deleted\n"); - size = MAX_PATH; - ok(!RegQueryValueA(subkey, NULL, buffer, &size), - "Default value of subkey not longer present\n"); - - ret = RegCreateKeyA(subkey, "subkey2", &subkey2); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegCloseKey(subkey2); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = pRegDeleteTreeA(hkey_main, "subkey\\subkey2"); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(RegOpenKeyA(subkey, "subkey2", &subkey2), - "subkey2 was not deleted\n"); - ok(!RegQueryValueA(subkey, NULL, buffer, &size), - "Default value of subkey not longer present\n"); - - ret = RegCreateKeyA(subkey, "subkey2", &subkey2); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegCloseKey(subkey2); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegCreateKeyA(subkey, "subkey3", &subkey2); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegCloseKey(subkey2); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = RegSetValueA(subkey, "value", REG_SZ, "data2", 5); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ret = pRegDeleteTreeA(subkey, NULL); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(!RegOpenKeyA(hkey_main, "subkey", &subkey), - "subkey was deleted\n"); - ok(RegOpenKeyA(subkey, "subkey2", &subkey2), - "subkey2 was not deleted\n"); - ok(RegOpenKeyA(subkey, "subkey3", &subkey2), - "subkey3 was not deleted\n"); - size = MAX_PATH; - ret = RegQueryValueA(subkey, NULL, buffer, &size); - ok(ret == ERROR_SUCCESS, - "Default value of subkey is not present\n"); - ok(!lstrlenA(buffer), - "Expected length 0 got length %u(%s)\n", lstrlenA(buffer), buffer); - size = MAX_PATH; - ok(RegQueryValueA(subkey, "value", buffer, &size), - "Value is still present\n"); - - ret = pRegDeleteTreeA(hkey_main, "not-here"); - ok(ret == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", ret); -} - -START_TEST(registry) -{ - /* Load pointers for functions that are not available in all Windows versions */ - InitFunctionPtrs(); - - setup_main_key(); - test_set_value(); - create_test_entries(); - test_enum_value(); - test_query_value_ex(); - test_get_value(); - test_reg_open_key(); - test_reg_create_key(); - test_reg_close_key(); - test_reg_delete_key(); - test_reg_query_value(); - - /* SaveKey/LoadKey require the SE_BACKUP_NAME privilege to be set */ - if (set_privileges(SE_BACKUP_NAME, TRUE) && - set_privileges(SE_RESTORE_NAME, TRUE)) - { - test_reg_save_key(); - test_reg_load_key(); - test_reg_unload_key(); - - set_privileges(SE_BACKUP_NAME, FALSE); - set_privileges(SE_RESTORE_NAME, FALSE); - } - - test_reg_delete_tree(); - - /* cleanup */ - delete_key( hkey_main ); - - test_regconnectregistry(); -} diff --git a/rostests/winetests/advapi32/security.c b/rostests/winetests/advapi32/security.c deleted file mode 100644 index 99dbce88d92..00000000000 --- a/rostests/winetests/advapi32/security.c +++ /dev/null @@ -1,2585 +0,0 @@ -/* - * Unit tests for security functions - * - * 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 - */ - -#include -#include - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "aclapi.h" -#include "winnt.h" -#include "sddl.h" -#include "ntsecapi.h" -#include "lmcons.h" - -#include "wine/test.h" - -/* copied from Wine winternl.h - not included in the Windows SDK */ -typedef enum _OBJECT_INFORMATION_CLASS { - ObjectBasicInformation, - ObjectNameInformation, - ObjectTypeInformation, - ObjectAllInformation, - ObjectDataInformation -} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS; - -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; - -#define expect_eq(expr, value, type, format) { type ret = expr; ok((value) == ret, #expr " expected " format " got " format "\n", (value), (ret)); } - -static BOOL (WINAPI *pAddAccessAllowedAceEx)(PACL, DWORD, DWORD, DWORD, PSID); -static BOOL (WINAPI *pAddAccessDeniedAceEx)(PACL, DWORD, DWORD, DWORD, PSID); -static BOOL (WINAPI *pAddAuditAccessAceEx)(PACL, DWORD, DWORD, DWORD, PSID, BOOL, BOOL); -typedef VOID (WINAPI *fnBuildTrusteeWithSidA)( PTRUSTEEA pTrustee, PSID pSid ); -typedef VOID (WINAPI *fnBuildTrusteeWithNameA)( PTRUSTEEA pTrustee, LPSTR pName ); -typedef VOID (WINAPI *fnBuildTrusteeWithObjectsAndNameA)( PTRUSTEEA pTrustee, - POBJECTS_AND_NAME_A pObjName, - SE_OBJECT_TYPE ObjectType, - LPSTR ObjectTypeName, - LPSTR InheritedObjectTypeName, - LPSTR Name ); -typedef VOID (WINAPI *fnBuildTrusteeWithObjectsAndSidA)( PTRUSTEEA pTrustee, - POBJECTS_AND_SID pObjSid, - GUID* pObjectGuid, - GUID* pInheritedObjectGuid, - PSID pSid ); -typedef LPSTR (WINAPI *fnGetTrusteeNameA)( PTRUSTEEA pTrustee ); -typedef BOOL (WINAPI *fnMakeSelfRelativeSD)( PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, LPDWORD ); -typedef BOOL (WINAPI *fnConvertSidToStringSidA)( PSID pSid, LPSTR *str ); -typedef BOOL (WINAPI *fnConvertStringSidToSidA)( LPCSTR str, PSID pSid ); -static BOOL (WINAPI *pConvertStringSecurityDescriptorToSecurityDescriptorA)(LPCSTR, DWORD, - PSECURITY_DESCRIPTOR*, PULONG ); -static BOOL (WINAPI *pConvertSecurityDescriptorToStringSecurityDescriptorA)(PSECURITY_DESCRIPTOR, DWORD, - SECURITY_INFORMATION, LPSTR *, PULONG ); -typedef BOOL (WINAPI *fnGetFileSecurityA)(LPCSTR, SECURITY_INFORMATION, - PSECURITY_DESCRIPTOR, DWORD, LPDWORD); -static DWORD (WINAPI *pGetNamedSecurityInfoA)(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, - PSID*, PSID*, PACL*, PACL*, - PSECURITY_DESCRIPTOR*); -typedef DWORD (WINAPI *fnRtlAdjustPrivilege)(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN); -typedef BOOL (WINAPI *fnCreateWellKnownSid)(WELL_KNOWN_SID_TYPE,PSID,PSID,DWORD*); -typedef BOOL (WINAPI *fnDuplicateTokenEx)(HANDLE,DWORD,LPSECURITY_ATTRIBUTES, - SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE); - -typedef NTSTATUS (WINAPI *fnLsaQueryInformationPolicy)(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*); -typedef NTSTATUS (WINAPI *fnLsaClose)(LSA_HANDLE); -typedef NTSTATUS (WINAPI *fnLsaFreeMemory)(PVOID); -typedef NTSTATUS (WINAPI *fnLsaOpenPolicy)(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE); -static NTSTATUS (WINAPI *pNtQueryObject)(HANDLE,OBJECT_INFORMATION_CLASS,PVOID,ULONG,PULONG); -static DWORD (WINAPI *pSetEntriesInAclW)(ULONG, PEXPLICIT_ACCESSW, PACL, PACL*); -static BOOL (WINAPI *pSetSecurityDescriptorControl)(PSECURITY_DESCRIPTOR, SECURITY_DESCRIPTOR_CONTROL, - SECURITY_DESCRIPTOR_CONTROL); -static DWORD (WINAPI *pGetSecurityInfo)(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, - PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); - -static HMODULE hmod; -static int myARGC; -static char** myARGV; - -fnBuildTrusteeWithSidA pBuildTrusteeWithSidA; -fnBuildTrusteeWithNameA pBuildTrusteeWithNameA; -fnBuildTrusteeWithObjectsAndNameA pBuildTrusteeWithObjectsAndNameA; -fnBuildTrusteeWithObjectsAndSidA pBuildTrusteeWithObjectsAndSidA; -fnGetTrusteeNameA pGetTrusteeNameA; -fnMakeSelfRelativeSD pMakeSelfRelativeSD; -fnConvertSidToStringSidA pConvertSidToStringSidA; -fnConvertStringSidToSidA pConvertStringSidToSidA; -fnGetFileSecurityA pGetFileSecurityA; -fnRtlAdjustPrivilege pRtlAdjustPrivilege; -fnCreateWellKnownSid pCreateWellKnownSid; -fnDuplicateTokenEx pDuplicateTokenEx; -fnLsaQueryInformationPolicy pLsaQueryInformationPolicy; -fnLsaClose pLsaClose; -fnLsaFreeMemory pLsaFreeMemory; -fnLsaOpenPolicy pLsaOpenPolicy; - -struct sidRef -{ - SID_IDENTIFIER_AUTHORITY auth; - const char *refStr; -}; - -static void init(void) -{ - HMODULE hntdll; - - hntdll = GetModuleHandleA("ntdll.dll"); - pNtQueryObject = (void *)GetProcAddress( hntdll, "NtQueryObject" ); - - hmod = GetModuleHandle("advapi32.dll"); - pAddAccessAllowedAceEx = (void *)GetProcAddress(hmod, "AddAccessAllowedAceEx"); - pAddAccessDeniedAceEx = (void *)GetProcAddress(hmod, "AddAccessDeniedAceEx"); - pAddAuditAccessAceEx = (void *)GetProcAddress(hmod, "AddAuditAccessAceEx"); - pConvertStringSecurityDescriptorToSecurityDescriptorA = - (void *)GetProcAddress(hmod, "ConvertStringSecurityDescriptorToSecurityDescriptorA" ); - pConvertSecurityDescriptorToStringSecurityDescriptorA = - (void *)GetProcAddress(hmod, "ConvertSecurityDescriptorToStringSecurityDescriptorA" ); - pCreateWellKnownSid = (fnCreateWellKnownSid)GetProcAddress( hmod, "CreateWellKnownSid" ); - pGetNamedSecurityInfoA = (void *)GetProcAddress(hmod, "GetNamedSecurityInfoA"); - pMakeSelfRelativeSD = (void *)GetProcAddress(hmod, "MakeSelfRelativeSD"); - pSetEntriesInAclW = (void *)GetProcAddress(hmod, "SetEntriesInAclW"); - pSetSecurityDescriptorControl = (void *)GetProcAddress(hmod, "SetSecurityDescriptorControl"); - pGetSecurityInfo = (void *)GetProcAddress(hmod, "GetSecurityInfo"); - - myARGC = winetest_get_mainargs( &myARGV ); -} - -static void test_str_sid(const char *str_sid) -{ - PSID psid; - char *temp; - - if (pConvertStringSidToSidA(str_sid, &psid)) - { - if (pConvertSidToStringSidA(psid, &temp)) - { - trace(" %s: %s\n", str_sid, temp); - LocalFree(temp); - } - LocalFree(psid); - } - else - { - if (GetLastError() != ERROR_INVALID_SID) - trace(" %s: couldn't be converted, returned %d\n", str_sid, GetLastError()); - else - trace(" %s: couldn't be converted\n", str_sid); - } -} - -static void test_sid(void) -{ - struct sidRef refs[] = { - { { {0x00,0x00,0x33,0x44,0x55,0x66} }, "S-1-860116326-1" }, - { { {0x00,0x00,0x01,0x02,0x03,0x04} }, "S-1-16909060-1" }, - { { {0x00,0x00,0x00,0x01,0x02,0x03} }, "S-1-66051-1" }, - { { {0x00,0x00,0x00,0x00,0x01,0x02} }, "S-1-258-1" }, - { { {0x00,0x00,0x00,0x00,0x00,0x02} }, "S-1-2-1" }, - { { {0x00,0x00,0x00,0x00,0x00,0x0c} }, "S-1-12-1" }, - }; - const char noSubAuthStr[] = "S-1-5"; - unsigned int i; - PSID psid = NULL; - SID *pisid; - BOOL r; - LPSTR str = NULL; - - pConvertSidToStringSidA = (fnConvertSidToStringSidA) - GetProcAddress( hmod, "ConvertSidToStringSidA" ); - if( !pConvertSidToStringSidA ) - return; - pConvertStringSidToSidA = (fnConvertStringSidToSidA) - GetProcAddress( hmod, "ConvertStringSidToSidA" ); - if( !pConvertStringSidToSidA ) - return; - - r = pConvertStringSidToSidA( NULL, NULL ); - ok( !r, "expected failure with NULL parameters\n" ); - if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) - return; - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "expected GetLastError() is ERROR_INVALID_PARAMETER, got %d\n", - GetLastError() ); - - r = pConvertStringSidToSidA( refs[0].refStr, NULL ); - ok( !r && GetLastError() == ERROR_INVALID_PARAMETER, - "expected GetLastError() is ERROR_INVALID_PARAMETER, got %d\n", - GetLastError() ); - - r = pConvertStringSidToSidA( NULL, &str ); - ok( !r && GetLastError() == ERROR_INVALID_PARAMETER, - "expected GetLastError() is ERROR_INVALID_PARAMETER, got %d\n", - GetLastError() ); - - r = pConvertStringSidToSidA( noSubAuthStr, &psid ); - ok( !r, - "expected failure with no sub authorities\n" ); - ok( GetLastError() == ERROR_INVALID_SID, - "expected GetLastError() is ERROR_INVALID_SID, got %d\n", - GetLastError() ); - - ok(pConvertStringSidToSidA("S-1-5-21-93476-23408-4576", &psid), "ConvertStringSidToSidA failed\n"); - pisid = (SID *)psid; - ok(pisid->SubAuthorityCount == 4, "Invalid sub authority count - expected 4, got %d\n", pisid->SubAuthorityCount); - ok(pisid->SubAuthority[0] == 21, "Invalid subauthority 0 - expceted 21, got %d\n", pisid->SubAuthority[0]); - ok(pisid->SubAuthority[3] == 4576, "Invalid subauthority 0 - expceted 4576, got %d\n", pisid->SubAuthority[3]); - LocalFree(str); - - for( i = 0; i < sizeof(refs) / sizeof(refs[0]); i++ ) - { - PISID pisid; - - r = AllocateAndInitializeSid( &refs[i].auth, 1,1,0,0,0,0,0,0,0, - &psid ); - ok( r, "failed to allocate sid\n" ); - r = pConvertSidToStringSidA( psid, &str ); - ok( r, "failed to convert sid\n" ); - if (r) - { - ok( !strcmp( str, refs[i].refStr ), - "incorrect sid, expected %s, got %s\n", refs[i].refStr, str ); - LocalFree( str ); - } - if( psid ) - FreeSid( psid ); - - r = pConvertStringSidToSidA( refs[i].refStr, &psid ); - ok( r, "failed to parse sid string\n" ); - pisid = (PISID)psid; - ok( pisid && - !memcmp( pisid->IdentifierAuthority.Value, refs[i].auth.Value, - sizeof(refs[i].auth) ), - "string sid %s didn't parse to expected value\n" - "(got 0x%04x%08x, expected 0x%04x%08x)\n", - refs[i].refStr, - MAKEWORD( pisid->IdentifierAuthority.Value[1], - pisid->IdentifierAuthority.Value[0] ), - MAKELONG( MAKEWORD( pisid->IdentifierAuthority.Value[5], - pisid->IdentifierAuthority.Value[4] ), - MAKEWORD( pisid->IdentifierAuthority.Value[3], - pisid->IdentifierAuthority.Value[2] ) ), - MAKEWORD( refs[i].auth.Value[1], refs[i].auth.Value[0] ), - MAKELONG( MAKEWORD( refs[i].auth.Value[5], refs[i].auth.Value[4] ), - MAKEWORD( refs[i].auth.Value[3], refs[i].auth.Value[2] ) ) ); - if( psid ) - LocalFree( psid ); - } - - trace("String SIDs:\n"); - test_str_sid("AO"); - test_str_sid("RU"); - test_str_sid("AN"); - test_str_sid("AU"); - test_str_sid("BA"); - test_str_sid("BG"); - test_str_sid("BO"); - test_str_sid("BU"); - test_str_sid("CA"); - test_str_sid("CG"); - test_str_sid("CO"); - test_str_sid("DA"); - test_str_sid("DC"); - test_str_sid("DD"); - test_str_sid("DG"); - test_str_sid("DU"); - test_str_sid("EA"); - test_str_sid("ED"); - test_str_sid("WD"); - test_str_sid("PA"); - test_str_sid("IU"); - test_str_sid("LA"); - test_str_sid("LG"); - test_str_sid("LS"); - test_str_sid("SY"); - test_str_sid("NU"); - test_str_sid("NO"); - test_str_sid("NS"); - test_str_sid("PO"); - test_str_sid("PS"); - test_str_sid("PU"); - test_str_sid("RS"); - test_str_sid("RD"); - test_str_sid("RE"); - test_str_sid("RC"); - test_str_sid("SA"); - test_str_sid("SO"); - test_str_sid("SU"); -} - -static void test_trustee(void) -{ - GUID ObjectType = {0x12345678, 0x1234, 0x5678, {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}}; - GUID InheritedObjectType = {0x23456789, 0x2345, 0x6786, {0x2, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}}; - GUID ZeroGuid; - OBJECTS_AND_NAME_ oan; - OBJECTS_AND_SID oas; - TRUSTEE trustee; - PSID psid; - char szObjectTypeName[] = "ObjectTypeName"; - char szInheritedObjectTypeName[] = "InheritedObjectTypeName"; - char szTrusteeName[] = "szTrusteeName"; - SID_IDENTIFIER_AUTHORITY auth = { {0x11,0x22,0,0,0, 0} }; - - memset( &ZeroGuid, 0x00, sizeof (ZeroGuid) ); - - pBuildTrusteeWithSidA = (fnBuildTrusteeWithSidA) - GetProcAddress( hmod, "BuildTrusteeWithSidA" ); - pBuildTrusteeWithNameA = (fnBuildTrusteeWithNameA) - GetProcAddress( hmod, "BuildTrusteeWithNameA" ); - pBuildTrusteeWithObjectsAndNameA = (fnBuildTrusteeWithObjectsAndNameA) - GetProcAddress (hmod, "BuildTrusteeWithObjectsAndNameA" ); - pBuildTrusteeWithObjectsAndSidA = (fnBuildTrusteeWithObjectsAndSidA) - GetProcAddress (hmod, "BuildTrusteeWithObjectsAndSidA" ); - pGetTrusteeNameA = (fnGetTrusteeNameA) - GetProcAddress (hmod, "GetTrusteeNameA" ); - if( !pBuildTrusteeWithSidA || !pBuildTrusteeWithNameA || - !pBuildTrusteeWithObjectsAndNameA || !pBuildTrusteeWithObjectsAndSidA || - !pGetTrusteeNameA ) - return; - - if ( ! AllocateAndInitializeSid( &auth, 1, 42, 0,0,0,0,0,0,0,&psid ) ) - { - trace( "failed to init SID\n" ); - return; - } - - /* test BuildTrusteeWithSidA */ - memset( &trustee, 0xff, sizeof trustee ); - pBuildTrusteeWithSidA( &trustee, psid ); - - ok( trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n"); - ok( trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, - "MultipleTrusteeOperation wrong\n"); - ok( trustee.TrusteeForm == TRUSTEE_IS_SID, "TrusteeForm wrong\n"); - ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n"); - ok( trustee.ptstrName == (LPSTR) psid, "ptstrName wrong\n" ); - - /* test BuildTrusteeWithObjectsAndSidA (test 1) */ - memset( &trustee, 0xff, sizeof trustee ); - memset( &oas, 0xff, sizeof(oas) ); - pBuildTrusteeWithObjectsAndSidA(&trustee, &oas, &ObjectType, - &InheritedObjectType, psid); - - ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n"); - ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n"); - ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_SID, "TrusteeForm wrong\n"); - ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n"); - ok(trustee.ptstrName == (LPSTR)&oas, "ptstrName wrong\n"); - - ok(oas.ObjectsPresent == (ACE_OBJECT_TYPE_PRESENT | ACE_INHERITED_OBJECT_TYPE_PRESENT), "ObjectsPresent wrong\n"); - ok(!memcmp(&oas.ObjectTypeGuid, &ObjectType, sizeof(GUID)), "ObjectTypeGuid wrong\n"); - ok(!memcmp(&oas.InheritedObjectTypeGuid, &InheritedObjectType, sizeof(GUID)), "InheritedObjectTypeGuid wrong\n"); - ok(oas.pSid == psid, "pSid wrong\n"); - - /* test GetTrusteeNameA */ - ok(pGetTrusteeNameA(&trustee) == (LPSTR)&oas, "GetTrusteeName returned wrong value\n"); - - /* test BuildTrusteeWithObjectsAndSidA (test 2) */ - memset( &trustee, 0xff, sizeof trustee ); - memset( &oas, 0xff, sizeof(oas) ); - pBuildTrusteeWithObjectsAndSidA(&trustee, &oas, NULL, - &InheritedObjectType, psid); - - ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n"); - ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n"); - ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_SID, "TrusteeForm wrong\n"); - ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n"); - ok(trustee.ptstrName == (LPSTR)&oas, "ptstrName wrong\n"); - - ok(oas.ObjectsPresent == ACE_INHERITED_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n"); - ok(!memcmp(&oas.ObjectTypeGuid, &ZeroGuid, sizeof(GUID)), "ObjectTypeGuid wrong\n"); - ok(!memcmp(&oas.InheritedObjectTypeGuid, &InheritedObjectType, sizeof(GUID)), "InheritedObjectTypeGuid wrong\n"); - ok(oas.pSid == psid, "pSid wrong\n"); - - FreeSid( psid ); - - /* test BuildTrusteeWithNameA */ - memset( &trustee, 0xff, sizeof trustee ); - pBuildTrusteeWithNameA( &trustee, szTrusteeName ); - - ok( trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n"); - ok( trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, - "MultipleTrusteeOperation wrong\n"); - ok( trustee.TrusteeForm == TRUSTEE_IS_NAME, "TrusteeForm wrong\n"); - ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n"); - ok( trustee.ptstrName == szTrusteeName, "ptstrName wrong\n" ); - - /* test BuildTrusteeWithObjectsAndNameA (test 1) */ - memset( &trustee, 0xff, sizeof trustee ); - memset( &oan, 0xff, sizeof(oan) ); - pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, szObjectTypeName, - szInheritedObjectTypeName, szTrusteeName); - - ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n"); - ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n"); - ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n"); - ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n"); - ok(trustee.ptstrName == (LPTSTR)&oan, "ptstrName wrong\n"); - - ok(oan.ObjectsPresent == (ACE_OBJECT_TYPE_PRESENT | ACE_INHERITED_OBJECT_TYPE_PRESENT), "ObjectsPresent wrong\n"); - ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n"); - ok(oan.InheritedObjectTypeName == szInheritedObjectTypeName, "InheritedObjectTypeName wrong\n"); - ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n"); - - /* test GetTrusteeNameA */ - ok(pGetTrusteeNameA(&trustee) == (LPSTR)&oan, "GetTrusteeName returned wrong value\n"); - - /* test BuildTrusteeWithObjectsAndNameA (test 2) */ - memset( &trustee, 0xff, sizeof trustee ); - memset( &oan, 0xff, sizeof(oan) ); - pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, NULL, - szInheritedObjectTypeName, szTrusteeName); - - ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n"); - ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n"); - ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n"); - ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n"); - ok(trustee.ptstrName == (LPSTR)&oan, "ptstrName wrong\n"); - - ok(oan.ObjectsPresent == ACE_INHERITED_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n"); - ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n"); - ok(oan.InheritedObjectTypeName == szInheritedObjectTypeName, "InheritedObjectTypeName wrong\n"); - ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n"); - - /* test BuildTrusteeWithObjectsAndNameA (test 3) */ - memset( &trustee, 0xff, sizeof trustee ); - memset( &oan, 0xff, sizeof(oan) ); - pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, szObjectTypeName, - NULL, szTrusteeName); - - ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n"); - ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n"); - ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n"); - ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n"); - ok(trustee.ptstrName == (LPTSTR)&oan, "ptstrName wrong\n"); - - ok(oan.ObjectsPresent == ACE_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n"); - ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n"); - ok(oan.InheritedObjectTypeName == NULL, "InheritedObjectTypeName wrong\n"); - ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n"); -} - -/* If the first isn't defined, assume none is */ -#ifndef SE_MIN_WELL_KNOWN_PRIVILEGE -#define SE_MIN_WELL_KNOWN_PRIVILEGE 2L -#define SE_CREATE_TOKEN_PRIVILEGE 2L -#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3L -#define SE_LOCK_MEMORY_PRIVILEGE 4L -#define SE_INCREASE_QUOTA_PRIVILEGE 5L -#define SE_MACHINE_ACCOUNT_PRIVILEGE 6L -#define SE_TCB_PRIVILEGE 7L -#define SE_SECURITY_PRIVILEGE 8L -#define SE_TAKE_OWNERSHIP_PRIVILEGE 9L -#define SE_LOAD_DRIVER_PRIVILEGE 10L -#define SE_SYSTEM_PROFILE_PRIVILEGE 11L -#define SE_SYSTEMTIME_PRIVILEGE 12L -#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13L -#define SE_INC_BASE_PRIORITY_PRIVILEGE 14L -#define SE_CREATE_PAGEFILE_PRIVILEGE 15L -#define SE_CREATE_PERMANENT_PRIVILEGE 16L -#define SE_BACKUP_PRIVILEGE 17L -#define SE_RESTORE_PRIVILEGE 18L -#define SE_SHUTDOWN_PRIVILEGE 19L -#define SE_DEBUG_PRIVILEGE 20L -#define SE_AUDIT_PRIVILEGE 21L -#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22L -#define SE_CHANGE_NOTIFY_PRIVILLEGE 23L -#define SE_REMOTE_SHUTDOWN_PRIVILEGE 24L -#define SE_UNDOCK_PRIVILEGE 25L -#define SE_SYNC_AGENT_PRIVILEGE 26L -#define SE_ENABLE_DELEGATION_PRIVILEGE 27L -#define SE_MANAGE_VOLUME_PRIVILEGE 28L -#define SE_IMPERSONATE_PRIVILEGE 29L -#define SE_CREATE_GLOBAL_PRIVILEGE 30L -#define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE -#endif /* ndef SE_MIN_WELL_KNOWN_PRIVILEGE */ - -static void test_allocateLuid(void) -{ - BOOL (WINAPI *pAllocateLocallyUniqueId)(PLUID); - LUID luid1, luid2; - BOOL ret; - - pAllocateLocallyUniqueId = (void*)GetProcAddress(hmod, "AllocateLocallyUniqueId"); - if (!pAllocateLocallyUniqueId) return; - - ret = pAllocateLocallyUniqueId(&luid1); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return; - - ok(ret, - "AllocateLocallyUniqueId failed: %d\n", GetLastError()); - ret = pAllocateLocallyUniqueId(&luid2); - ok( ret, - "AllocateLocallyUniqueId failed: %d\n", GetLastError()); - ok(luid1.LowPart > SE_MAX_WELL_KNOWN_PRIVILEGE || luid1.HighPart != 0, - "AllocateLocallyUniqueId returned a well-known LUID\n"); - ok(luid1.LowPart != luid2.LowPart || luid1.HighPart != luid2.HighPart, - "AllocateLocallyUniqueId returned non-unique LUIDs\n"); - ret = pAllocateLocallyUniqueId(NULL); - ok( !ret && GetLastError() == ERROR_NOACCESS, - "AllocateLocallyUniqueId(NULL) didn't return ERROR_NOACCESS: %d\n", - GetLastError()); -} - -static void test_lookupPrivilegeName(void) -{ - BOOL (WINAPI *pLookupPrivilegeNameA)(LPCSTR, PLUID, LPSTR, LPDWORD); - char buf[MAX_PATH]; /* arbitrary, seems long enough */ - DWORD cchName = sizeof(buf); - LUID luid = { 0, 0 }; - LONG i; - BOOL ret; - - /* check whether it's available first */ - pLookupPrivilegeNameA = (void*)GetProcAddress(hmod, "LookupPrivilegeNameA"); - if (!pLookupPrivilegeNameA) return; - luid.LowPart = SE_CREATE_TOKEN_PRIVILEGE; - ret = pLookupPrivilegeNameA(NULL, &luid, buf, &cchName); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return; - - /* check with a short buffer */ - cchName = 0; - luid.LowPart = SE_CREATE_TOKEN_PRIVILEGE; - ret = pLookupPrivilegeNameA(NULL, &luid, NULL, &cchName); - ok( !ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "LookupPrivilegeNameA didn't fail with ERROR_INSUFFICIENT_BUFFER: %d\n", - GetLastError()); - ok(cchName == strlen("SeCreateTokenPrivilege") + 1, - "LookupPrivilegeNameA returned an incorrect required length for\n" - "SeCreateTokenPrivilege (got %d, expected %d)\n", cchName, - lstrlenA("SeCreateTokenPrivilege") + 1); - /* check a known value and its returned length on success */ - cchName = sizeof(buf); - ok(pLookupPrivilegeNameA(NULL, &luid, buf, &cchName) && - cchName == strlen("SeCreateTokenPrivilege"), - "LookupPrivilegeNameA returned an incorrect output length for\n" - "SeCreateTokenPrivilege (got %d, expected %d)\n", cchName, - (int)strlen("SeCreateTokenPrivilege")); - /* check known values */ - for (i = SE_MIN_WELL_KNOWN_PRIVILEGE; i < SE_MAX_WELL_KNOWN_PRIVILEGE; i++) - { - luid.LowPart = i; - cchName = sizeof(buf); - ret = pLookupPrivilegeNameA(NULL, &luid, buf, &cchName); - ok( ret || GetLastError() == ERROR_NO_SUCH_PRIVILEGE, - "LookupPrivilegeNameA(0.%d) failed: %d\n", i, GetLastError()); - } - /* check a bogus LUID */ - luid.LowPart = 0xdeadbeef; - cchName = sizeof(buf); - ret = pLookupPrivilegeNameA(NULL, &luid, buf, &cchName); - ok( !ret && GetLastError() == ERROR_NO_SUCH_PRIVILEGE, - "LookupPrivilegeNameA didn't fail with ERROR_NO_SUCH_PRIVILEGE: %d\n", - GetLastError()); - /* check on a bogus system */ - luid.LowPart = SE_CREATE_TOKEN_PRIVILEGE; - cchName = sizeof(buf); - ret = pLookupPrivilegeNameA("b0gu5.Nam3", &luid, buf, &cchName); - ok( !ret && (GetLastError() == RPC_S_SERVER_UNAVAILABLE || - GetLastError() == RPC_S_INVALID_NET_ADDR) /* w2k8 */, - "LookupPrivilegeNameA didn't fail with RPC_S_SERVER_UNAVAILABLE or RPC_S_INVALID_NET_ADDR: %d\n", - GetLastError()); -} - -struct NameToLUID -{ - const char *name; - DWORD lowPart; -}; - -static void test_lookupPrivilegeValue(void) -{ - static const struct NameToLUID privs[] = { - { "SeCreateTokenPrivilege", SE_CREATE_TOKEN_PRIVILEGE }, - { "SeAssignPrimaryTokenPrivilege", SE_ASSIGNPRIMARYTOKEN_PRIVILEGE }, - { "SeLockMemoryPrivilege", SE_LOCK_MEMORY_PRIVILEGE }, - { "SeIncreaseQuotaPrivilege", SE_INCREASE_QUOTA_PRIVILEGE }, - { "SeMachineAccountPrivilege", SE_MACHINE_ACCOUNT_PRIVILEGE }, - { "SeTcbPrivilege", SE_TCB_PRIVILEGE }, - { "SeSecurityPrivilege", SE_SECURITY_PRIVILEGE }, - { "SeTakeOwnershipPrivilege", SE_TAKE_OWNERSHIP_PRIVILEGE }, - { "SeLoadDriverPrivilege", SE_LOAD_DRIVER_PRIVILEGE }, - { "SeSystemProfilePrivilege", SE_SYSTEM_PROFILE_PRIVILEGE }, - { "SeSystemtimePrivilege", SE_SYSTEMTIME_PRIVILEGE }, - { "SeProfileSingleProcessPrivilege", SE_PROF_SINGLE_PROCESS_PRIVILEGE }, - { "SeIncreaseBasePriorityPrivilege", SE_INC_BASE_PRIORITY_PRIVILEGE }, - { "SeCreatePagefilePrivilege", SE_CREATE_PAGEFILE_PRIVILEGE }, - { "SeCreatePermanentPrivilege", SE_CREATE_PERMANENT_PRIVILEGE }, - { "SeBackupPrivilege", SE_BACKUP_PRIVILEGE }, - { "SeRestorePrivilege", SE_RESTORE_PRIVILEGE }, - { "SeShutdownPrivilege", SE_SHUTDOWN_PRIVILEGE }, - { "SeDebugPrivilege", SE_DEBUG_PRIVILEGE }, - { "SeAuditPrivilege", SE_AUDIT_PRIVILEGE }, - { "SeSystemEnvironmentPrivilege", SE_SYSTEM_ENVIRONMENT_PRIVILEGE }, - { "SeChangeNotifyPrivilege", SE_CHANGE_NOTIFY_PRIVILLEGE }, - { "SeRemoteShutdownPrivilege", SE_REMOTE_SHUTDOWN_PRIVILEGE }, - { "SeUndockPrivilege", SE_UNDOCK_PRIVILEGE }, - { "SeSyncAgentPrivilege", SE_SYNC_AGENT_PRIVILEGE }, - { "SeEnableDelegationPrivilege", SE_ENABLE_DELEGATION_PRIVILEGE }, - { "SeManageVolumePrivilege", SE_MANAGE_VOLUME_PRIVILEGE }, - { "SeImpersonatePrivilege", SE_IMPERSONATE_PRIVILEGE }, - { "SeCreateGlobalPrivilege", SE_CREATE_GLOBAL_PRIVILEGE }, - }; - BOOL (WINAPI *pLookupPrivilegeValueA)(LPCSTR, LPCSTR, PLUID); - int i; - LUID luid; - BOOL ret; - - /* check whether it's available first */ - pLookupPrivilegeValueA = (void*)GetProcAddress(hmod, "LookupPrivilegeValueA"); - if (!pLookupPrivilegeValueA) return; - ret = pLookupPrivilegeValueA(NULL, "SeCreateTokenPrivilege", &luid); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return; - - /* check a bogus system name */ - ret = pLookupPrivilegeValueA("b0gu5.Nam3", "SeCreateTokenPrivilege", &luid); - ok( !ret && (GetLastError() == RPC_S_SERVER_UNAVAILABLE || - GetLastError() == RPC_S_INVALID_NET_ADDR) /* w2k8 */, - "LookupPrivilegeValueA didn't fail with RPC_S_SERVER_UNAVAILABLE or RPC_S_INVALID_NET_ADDR: %d\n", - GetLastError()); - /* check a NULL string */ - ret = pLookupPrivilegeValueA(NULL, 0, &luid); - ok( !ret && GetLastError() == ERROR_NO_SUCH_PRIVILEGE, - "LookupPrivilegeValueA didn't fail with ERROR_NO_SUCH_PRIVILEGE: %d\n", - GetLastError()); - /* check a bogus privilege name */ - ret = pLookupPrivilegeValueA(NULL, "SeBogusPrivilege", &luid); - ok( !ret && GetLastError() == ERROR_NO_SUCH_PRIVILEGE, - "LookupPrivilegeValueA didn't fail with ERROR_NO_SUCH_PRIVILEGE: %d\n", - GetLastError()); - /* check case insensitive */ - ret = pLookupPrivilegeValueA(NULL, "sEcREATEtOKENpRIVILEGE", &luid); - ok( ret, - "LookupPrivilegeValueA(NULL, sEcREATEtOKENpRIVILEGE, &luid) failed: %d\n", - GetLastError()); - for (i = 0; i < sizeof(privs) / sizeof(privs[0]); i++) - { - /* Not all privileges are implemented on all Windows versions, so - * don't worry if the call fails - */ - if (pLookupPrivilegeValueA(NULL, privs[i].name, &luid)) - { - ok(luid.LowPart == privs[i].lowPart, - "LookupPrivilegeValueA returned an invalid LUID for %s\n", - privs[i].name); - } - } -} - -static void test_luid(void) -{ - test_allocateLuid(); - test_lookupPrivilegeName(); - test_lookupPrivilegeValue(); -} - -static void test_FileSecurity(void) -{ - char directory[MAX_PATH]; - DWORD retval, outSize; - BOOL result; - BYTE buffer[0x40]; - - pGetFileSecurityA = (fnGetFileSecurityA) - GetProcAddress( hmod, "GetFileSecurityA" ); - if( !pGetFileSecurityA ) - return; - - retval = GetTempPathA(sizeof(directory), directory); - if (!retval) { - trace("GetTempPathA failed\n"); - return; - } - - strcpy(directory, "\\Should not exist"); - - SetLastError(NO_ERROR); - result = pGetFileSecurityA( directory,OWNER_SECURITY_INFORMATION,buffer,0x40,&outSize); - ok(!result, "GetFileSecurityA should fail for not existing directories/files\n"); - ok( (GetLastError() == ERROR_FILE_NOT_FOUND ) || - (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) , - "last error ERROR_FILE_NOT_FOUND / ERROR_CALL_NOT_IMPLEMENTED (98) " - "expected, got %d\n", GetLastError()); -} - -static void test_AccessCheck(void) -{ - PSID EveryoneSid = NULL, AdminSid = NULL, UsersSid = NULL; - PACL Acl = NULL; - SECURITY_DESCRIPTOR *SecurityDescriptor = NULL; - SID_IDENTIFIER_AUTHORITY SIDAuthWorld = { SECURITY_WORLD_SID_AUTHORITY }; - SID_IDENTIFIER_AUTHORITY SIDAuthNT = { SECURITY_NT_AUTHORITY }; - GENERIC_MAPPING Mapping = { KEY_READ, KEY_WRITE, KEY_EXECUTE, KEY_ALL_ACCESS }; - ACCESS_MASK Access; - BOOL AccessStatus; - HANDLE Token; - HANDLE ProcessToken; - BOOL ret; - DWORD PrivSetLen; - PRIVILEGE_SET *PrivSet; - BOOL res; - HMODULE NtDllModule; - BOOLEAN Enabled; - DWORD err; - - NtDllModule = GetModuleHandle("ntdll.dll"); - if (!NtDllModule) - { - skip("not running on NT, skipping test\n"); - return; - } - pRtlAdjustPrivilege = (fnRtlAdjustPrivilege) - GetProcAddress(NtDllModule, "RtlAdjustPrivilege"); - if (!pRtlAdjustPrivilege) - { - skip("missing RtlAdjustPrivilege, skipping test\n"); - return; - } - - Acl = HeapAlloc(GetProcessHeap(), 0, 256); - res = InitializeAcl(Acl, 256, ACL_REVISION); - if(!res && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("ACLs not implemented - skipping tests\n"); - HeapFree(GetProcessHeap(), 0, Acl); - return; - } - ok(res, "InitializeAcl failed with error %d\n", GetLastError()); - - res = AllocateAndInitializeSid( &SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &EveryoneSid); - ok(res, "AllocateAndInitializeSid failed with error %d\n", GetLastError()); - - res = AllocateAndInitializeSid( &SIDAuthNT, 2, SECURITY_BUILTIN_DOMAIN_RID, - DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdminSid); - ok(res, "AllocateAndInitializeSid failed with error %d\n", GetLastError()); - - res = AllocateAndInitializeSid( &SIDAuthNT, 2, SECURITY_BUILTIN_DOMAIN_RID, - DOMAIN_ALIAS_RID_USERS, 0, 0, 0, 0, 0, 0, &UsersSid); - ok(res, "AllocateAndInitializeSid failed with error %d\n", GetLastError()); - - SecurityDescriptor = HeapAlloc(GetProcessHeap(), 0, SECURITY_DESCRIPTOR_MIN_LENGTH); - - res = InitializeSecurityDescriptor(SecurityDescriptor, SECURITY_DESCRIPTOR_REVISION); - ok(res, "InitializeSecurityDescriptor failed with error %d\n", GetLastError()); - - res = SetSecurityDescriptorDacl(SecurityDescriptor, TRUE, Acl, FALSE); - ok(res, "SetSecurityDescriptorDacl failed with error %d\n", GetLastError()); - - PrivSetLen = FIELD_OFFSET(PRIVILEGE_SET, Privilege[16]); - PrivSet = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, PrivSetLen); - PrivSet->PrivilegeCount = 16; - - res = OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE|TOKEN_QUERY, &ProcessToken); - ok(res, "OpenProcessToken failed with error %d\n", GetLastError()); - - pRtlAdjustPrivilege(SE_SECURITY_PRIVILEGE, FALSE, TRUE, &Enabled); - - res = DuplicateToken(ProcessToken, SecurityImpersonation, &Token); - ok(res, "DuplicateToken failed with error %d\n", GetLastError()); - - /* SD without owner/group */ - SetLastError(0xdeadbeef); - Access = AccessStatus = 0xdeadbeef; - ret = AccessCheck(SecurityDescriptor, Token, KEY_QUERY_VALUE, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - err = GetLastError(); - ok(!ret && err == ERROR_INVALID_SECURITY_DESCR, "AccessCheck should have " - "failed with ERROR_INVALID_SECURITY_DESCR, instead of %d\n", err); - ok(Access == 0xdeadbeef && AccessStatus == 0xdeadbeef, - "Access and/or AccessStatus were changed!\n"); - - /* Set owner and group */ - res = SetSecurityDescriptorOwner(SecurityDescriptor, AdminSid, FALSE); - ok(res, "SetSecurityDescriptorOwner failed with error %d\n", GetLastError()); - res = SetSecurityDescriptorGroup(SecurityDescriptor, UsersSid, TRUE); - ok(res, "SetSecurityDescriptorGroup failed with error %d\n", GetLastError()); - - /* Generic access mask */ - SetLastError(0xdeadbeef); - ret = AccessCheck(SecurityDescriptor, Token, GENERIC_READ, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - err = GetLastError(); - ok(!ret && err == ERROR_GENERIC_NOT_MAPPED, "AccessCheck should have failed " - "with ERROR_GENERIC_NOT_MAPPED, instead of %d\n", err); - ok(Access == 0xdeadbeef && AccessStatus == 0xdeadbeef, - "Access and/or AccessStatus were changed!\n"); - - /* sd with no dacl present */ - ret = SetSecurityDescriptorDacl(SecurityDescriptor, FALSE, NULL, FALSE); - ok(ret, "SetSecurityDescriptorDacl failed with error %d\n", GetLastError()); - ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret, "AccessCheck failed with error %d\n", GetLastError()); - ok(AccessStatus && (Access == KEY_READ), - "AccessCheck failed to grant access with error %d\n", - GetLastError()); - - /* sd with NULL dacl */ - ret = SetSecurityDescriptorDacl(SecurityDescriptor, TRUE, NULL, FALSE); - ok(ret, "SetSecurityDescriptorDacl failed with error %d\n", GetLastError()); - ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret, "AccessCheck failed with error %d\n", GetLastError()); - ok(AccessStatus && (Access == KEY_READ), - "AccessCheck failed to grant access with error %d\n", - GetLastError()); - - /* sd with blank dacl */ - ret = SetSecurityDescriptorDacl(SecurityDescriptor, TRUE, Acl, FALSE); - ok(ret, "SetSecurityDescriptorDacl failed with error %d\n", GetLastError()); - ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret, "AccessCheck failed with error %d\n", GetLastError()); - err = GetLastError(); - ok(!AccessStatus && err == ERROR_ACCESS_DENIED, "AccessCheck should have failed " - "with ERROR_ACCESS_DENIED, instead of %d\n", err); - ok(!Access, "Should have failed to grant any access, got 0x%08x\n", Access); - - res = AddAccessAllowedAce(Acl, ACL_REVISION, KEY_READ, EveryoneSid); - ok(res, "AddAccessAllowedAce failed with error %d\n", GetLastError()); - - res = AddAccessDeniedAce(Acl, ACL_REVISION, KEY_SET_VALUE, AdminSid); - ok(res, "AddAccessDeniedAce failed with error %d\n", GetLastError()); - - /* sd with dacl */ - ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret, "AccessCheck failed with error %d\n", GetLastError()); - ok(AccessStatus && (Access == KEY_READ), - "AccessCheck failed to grant access with error %d\n", - GetLastError()); - - ret = AccessCheck(SecurityDescriptor, Token, MAXIMUM_ALLOWED, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret, "AccessCheck failed with error %d\n", GetLastError()); - ok(AccessStatus, - "AccessCheck failed to grant any access with error %d\n", - GetLastError()); - trace("AccessCheck with MAXIMUM_ALLOWED got Access 0x%08x\n", Access); - - /* Access denied by SD */ - SetLastError(0xdeadbeef); - ret = AccessCheck(SecurityDescriptor, Token, KEY_WRITE, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret, "AccessCheck failed with error %d\n", GetLastError()); - err = GetLastError(); - ok(!AccessStatus && err == ERROR_ACCESS_DENIED, "AccessCheck should have failed " - "with ERROR_ACCESS_DENIED, instead of %d\n", err); - ok(!Access, "Should have failed to grant any access, got 0x%08x\n", Access); - - SetLastError(0); - PrivSet->PrivilegeCount = 16; - ret = AccessCheck(SecurityDescriptor, Token, ACCESS_SYSTEM_SECURITY, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret && !AccessStatus && GetLastError() == ERROR_PRIVILEGE_NOT_HELD, - "AccessCheck should have failed with ERROR_PRIVILEGE_NOT_HELD, instead of %d\n", - GetLastError()); - - ret = ImpersonateLoggedOnUser(Token); - ok(ret, "ImpersonateLoggedOnUser failed with error %d\n", GetLastError()); - ret = pRtlAdjustPrivilege(SE_SECURITY_PRIVILEGE, TRUE, TRUE, &Enabled); - if (!ret) - { - SetLastError(0); - PrivSet->PrivilegeCount = 16; - ret = AccessCheck(SecurityDescriptor, Token, ACCESS_SYSTEM_SECURITY, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret && AccessStatus && GetLastError() == 0, - "AccessCheck should have succeeded, error %d\n", - GetLastError()); - ok(Access == ACCESS_SYSTEM_SECURITY, - "Access should be equal to ACCESS_SYSTEM_SECURITY instead of 0x%08x\n", - Access); - } - else - trace("Couldn't get SE_SECURITY_PRIVILEGE (0x%08x), skipping ACCESS_SYSTEM_SECURITY test\n", - ret); - ret = RevertToSelf(); - ok(ret, "RevertToSelf failed with error %d\n", GetLastError()); - - /* test INHERIT_ONLY_ACE */ - ret = InitializeAcl(Acl, 256, ACL_REVISION); - ok(ret, "InitializeAcl failed with error %d\n", GetLastError()); - - /* NT doesn't have AddAccessAllowedAceEx. Skipping this call/test doesn't influence - * the next ones. - */ - if (pAddAccessAllowedAceEx) - { - ret = pAddAccessAllowedAceEx(Acl, ACL_REVISION, INHERIT_ONLY_ACE, KEY_READ, EveryoneSid); - ok(ret, "AddAccessAllowedAceEx failed with error %d\n", GetLastError()); - } - else - skip("AddAccessAllowedAceEx is not available\n"); - - ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - ok(ret, "AccessCheck failed with error %d\n", GetLastError()); - err = GetLastError(); - ok(!AccessStatus && err == ERROR_ACCESS_DENIED, "AccessCheck should have failed " - "with ERROR_ACCESS_DENIED, instead of %d\n", err); - ok(!Access, "Should have failed to grant any access, got 0x%08x\n", Access); - - CloseHandle(Token); - - res = DuplicateToken(ProcessToken, SecurityAnonymous, &Token); - ok(res, "DuplicateToken failed with error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = AccessCheck(SecurityDescriptor, Token, MAXIMUM_ALLOWED, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - err = GetLastError(); - ok(!ret && err == ERROR_BAD_IMPERSONATION_LEVEL, "AccessCheck should have failed " - "with ERROR_BAD_IMPERSONATION_LEVEL, instead of %d\n", err); - - CloseHandle(Token); - - SetLastError(0xdeadbeef); - ret = AccessCheck(SecurityDescriptor, ProcessToken, KEY_READ, &Mapping, - PrivSet, &PrivSetLen, &Access, &AccessStatus); - err = GetLastError(); - ok(!ret && err == ERROR_NO_IMPERSONATION_TOKEN, "AccessCheck should have failed " - "with ERROR_NO_IMPERSONATION_TOKEN, instead of %d\n", err); - - CloseHandle(ProcessToken); - - if (EveryoneSid) - FreeSid(EveryoneSid); - if (AdminSid) - FreeSid(AdminSid); - if (UsersSid) - FreeSid(UsersSid); - HeapFree(GetProcessHeap(), 0, Acl); - HeapFree(GetProcessHeap(), 0, SecurityDescriptor); - HeapFree(GetProcessHeap(), 0, PrivSet); -} - -/* test GetTokenInformation for the various attributes */ -static void test_token_attr(void) -{ - HANDLE Token, ImpersonationToken; - DWORD Size; - TOKEN_PRIVILEGES *Privileges; - TOKEN_GROUPS *Groups; - TOKEN_USER *User; - BOOL ret; - DWORD i, GLE; - LPSTR SidString; - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; - - /* cygwin-like use case */ - SetLastError(0xdeadbeef); - ret = OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, &Token); - if(!ret && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("OpenProcessToken is not implemented\n"); - return; - } - ok(ret, "OpenProcessToken failed with error %d\n", GetLastError()); - if (ret) - { - BYTE buf[1024]; - Size = sizeof(buf); - ret = GetTokenInformation(Token, TokenUser,(void*)buf, Size, &Size); - ok(ret, "GetTokenInformation failed with error %d\n", GetLastError()); - Size = sizeof(ImpersonationLevel); - ret = GetTokenInformation(Token, TokenImpersonationLevel, &ImpersonationLevel, Size, &Size); - GLE = GetLastError(); - ok(!ret && (GLE == ERROR_INVALID_PARAMETER), "GetTokenInformation(TokenImpersonationLevel) on primary token should have failed with ERROR_INVALID_PARAMETER instead of %d\n", GLE); - CloseHandle(Token); - } - - if(!pConvertSidToStringSidA) - { - skip("ConvertSidToStringSidA is not available\n"); - return; - } - - SetLastError(0xdeadbeef); - ret = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_DUPLICATE, &Token); - ok(ret, "OpenProcessToken failed with error %d\n", GetLastError()); - - /* groups */ - ret = GetTokenInformation(Token, TokenGroups, NULL, 0, &Size); - Groups = HeapAlloc(GetProcessHeap(), 0, Size); - ret = GetTokenInformation(Token, TokenGroups, Groups, Size, &Size); - ok(ret, "GetTokenInformation(TokenGroups) failed with error %d\n", GetLastError()); - trace("TokenGroups:\n"); - for (i = 0; i < Groups->GroupCount; i++) - { - DWORD NameLength = 255; - TCHAR Name[255]; - DWORD DomainLength = 255; - TCHAR Domain[255]; - SID_NAME_USE SidNameUse; - pConvertSidToStringSidA(Groups->Groups[i].Sid, &SidString); - Name[0] = '\0'; - Domain[0] = '\0'; - ret = LookupAccountSid(NULL, Groups->Groups[i].Sid, Name, &NameLength, Domain, &DomainLength, &SidNameUse); - if (ret) - trace("\t%s, %s\\%s use: %d attr: 0x%08x\n", SidString, Domain, Name, SidNameUse, Groups->Groups[i].Attributes); - else - trace("\t%s, attr: 0x%08x LookupAccountSid failed with error %d\n", SidString, Groups->Groups[i].Attributes, GetLastError()); - LocalFree(SidString); - } - HeapFree(GetProcessHeap(), 0, Groups); - - /* user */ - ret = GetTokenInformation(Token, TokenUser, NULL, 0, &Size); - ok(!ret && (GetLastError() == ERROR_INSUFFICIENT_BUFFER), - "GetTokenInformation(TokenUser) failed with error %d\n", GetLastError()); - User = HeapAlloc(GetProcessHeap(), 0, Size); - ret = GetTokenInformation(Token, TokenUser, User, Size, &Size); - ok(ret, - "GetTokenInformation(TokenUser) failed with error %d\n", GetLastError()); - - pConvertSidToStringSidA(User->User.Sid, &SidString); - trace("TokenUser: %s attr: 0x%08x\n", SidString, User->User.Attributes); - LocalFree(SidString); - HeapFree(GetProcessHeap(), 0, User); - - /* privileges */ - ret = GetTokenInformation(Token, TokenPrivileges, NULL, 0, &Size); - ok(!ret && (GetLastError() == ERROR_INSUFFICIENT_BUFFER), - "GetTokenInformation(TokenPrivileges) failed with error %d\n", GetLastError()); - Privileges = HeapAlloc(GetProcessHeap(), 0, Size); - ret = GetTokenInformation(Token, TokenPrivileges, Privileges, Size, &Size); - ok(ret, - "GetTokenInformation(TokenPrivileges) failed with error %d\n", GetLastError()); - trace("TokenPrivileges:\n"); - for (i = 0; i < Privileges->PrivilegeCount; i++) - { - TCHAR Name[256]; - DWORD NameLen = sizeof(Name)/sizeof(Name[0]); - LookupPrivilegeName(NULL, &Privileges->Privileges[i].Luid, Name, &NameLen); - trace("\t%s, 0x%x\n", Name, Privileges->Privileges[i].Attributes); - } - HeapFree(GetProcessHeap(), 0, Privileges); - - ret = DuplicateToken(Token, SecurityAnonymous, &ImpersonationToken); - ok(ret, "DuplicateToken failed with error %d\n", GetLastError()); - - Size = sizeof(ImpersonationLevel); - ret = GetTokenInformation(ImpersonationToken, TokenImpersonationLevel, &ImpersonationLevel, Size, &Size); - ok(ret, "GetTokenInformation(TokenImpersonationLevel) failed with error %d\n", GetLastError()); - ok(ImpersonationLevel == SecurityAnonymous, "ImpersonationLevel should have been SecurityAnonymous instead of %d\n", ImpersonationLevel); - - CloseHandle(ImpersonationToken); - CloseHandle(Token); -} - -typedef union _MAX_SID -{ - SID sid; - char max[SECURITY_MAX_SID_SIZE]; -} MAX_SID; - -static void test_sid_str(PSID * sid) -{ - char *str_sid; - BOOL ret = pConvertSidToStringSidA(sid, &str_sid); - ok(ret, "ConvertSidToStringSidA() failed: %d\n", GetLastError()); - if (ret) - { - char account[MAX_PATH], domain[MAX_PATH]; - SID_NAME_USE use; - DWORD acc_size = MAX_PATH; - DWORD dom_size = MAX_PATH; - ret = LookupAccountSid(NULL, sid, account, &acc_size, domain, &dom_size, &use); - ok(ret || (!ret && (GetLastError() == ERROR_NONE_MAPPED)), - "LookupAccountSid(%s) failed: %d\n", str_sid, GetLastError()); - if (ret) - trace(" %s %s\\%s %d\n", str_sid, domain, account, use); - else if (GetLastError() == ERROR_NONE_MAPPED) - trace(" %s couldn't be mapped\n", str_sid); - LocalFree(str_sid); - } -} - -struct well_known_sid_value -{ - BOOL without_domain; - const char *sid_string; -} well_known_sid_values[] = { -/* 0 */ {TRUE, "S-1-0-0"}, {TRUE, "S-1-1-0"}, {TRUE, "S-1-2-0"}, {TRUE, "S-1-3-0"}, -/* 4 */ {TRUE, "S-1-3-1"}, {TRUE, "S-1-3-2"}, {TRUE, "S-1-3-3"}, {TRUE, "S-1-5"}, -/* 8 */ {FALSE, "S-1-5-1"}, {TRUE, "S-1-5-2"}, {TRUE, "S-1-5-3"}, {TRUE, "S-1-5-4"}, -/* 12 */ {TRUE, "S-1-5-6"}, {TRUE, "S-1-5-7"}, {TRUE, "S-1-5-8"}, {TRUE, "S-1-5-9"}, -/* 16 */ {TRUE, "S-1-5-10"}, {TRUE, "S-1-5-11"}, {TRUE, "S-1-5-12"}, {TRUE, "S-1-5-13"}, -/* 20 */ {TRUE, "S-1-5-14"}, {FALSE, NULL}, {TRUE, "S-1-5-18"}, {TRUE, "S-1-5-19"}, -/* 24 */ {TRUE, "S-1-5-20"}, {TRUE, "S-1-5-32"}, -/* 26 */ {FALSE, "S-1-5-32-544"}, {TRUE, "S-1-5-32-545"}, {TRUE, "S-1-5-32-546"}, -/* 29 */ {TRUE, "S-1-5-32-547"}, {TRUE, "S-1-5-32-548"}, {TRUE, "S-1-5-32-549"}, -/* 32 */ {TRUE, "S-1-5-32-550"}, {TRUE, "S-1-5-32-551"}, {TRUE, "S-1-5-32-552"}, -/* 35 */ {TRUE, "S-1-5-32-554"}, {TRUE, "S-1-5-32-555"}, {TRUE, "S-1-5-32-556"}, -/* 38 */ {FALSE, "S-1-5-21-12-23-34-45-56-500"}, {FALSE, "S-1-5-21-12-23-34-45-56-501"}, -/* 40 */ {FALSE, "S-1-5-21-12-23-34-45-56-502"}, {FALSE, "S-1-5-21-12-23-34-45-56-512"}, -/* 42 */ {FALSE, "S-1-5-21-12-23-34-45-56-513"}, {FALSE, "S-1-5-21-12-23-34-45-56-514"}, -/* 44 */ {FALSE, "S-1-5-21-12-23-34-45-56-515"}, {FALSE, "S-1-5-21-12-23-34-45-56-516"}, -/* 46 */ {FALSE, "S-1-5-21-12-23-34-45-56-517"}, {FALSE, "S-1-5-21-12-23-34-45-56-518"}, -/* 48 */ {FALSE, "S-1-5-21-12-23-34-45-56-519"}, {FALSE, "S-1-5-21-12-23-34-45-56-520"}, -/* 50 */ {FALSE, "S-1-5-21-12-23-34-45-56-553"}, -/* Added in Windows Server 2003 */ -/* 51 */ {TRUE, "S-1-5-64-10"}, {TRUE, "S-1-5-64-21"}, {TRUE, "S-1-5-64-14"}, -/* 54 */ {TRUE, "S-1-5-15"}, {TRUE, "S-1-5-1000"}, {FALSE, "S-1-5-32-557"}, -/* 57 */ {TRUE, "S-1-5-32-558"}, {TRUE, "S-1-5-32-559"}, {TRUE, "S-1-5-32-560"}, -/* 60 */ {TRUE, "S-1-5-32-561"}, {TRUE, "S-1-5-32-562"}, -/* Added in Windows Vista: */ -/* 62 */ {TRUE, "S-1-5-32-568"}, -/* 63 */ {TRUE, "S-1-5-17"}, {FALSE, "S-1-5-32-569"}, {TRUE, "S-1-16-0"}, -/* 66 */ {TRUE, "S-1-16-4096"}, {TRUE, "S-1-16-8192"}, {TRUE, "S-1-16-12288"}, -/* 69 */ {TRUE, "S-1-16-16384"}, {TRUE, "S-1-5-33"}, {TRUE, "S-1-3-4"}, -/* 72 */ {FALSE, "S-1-5-21-12-23-34-45-56-571"}, {FALSE, "S-1-5-21-12-23-34-45-56-572"}, -/* 74 */ {TRUE, "S-1-5-22"}, {FALSE, "S-1-5-21-12-23-34-45-56-521"}, {TRUE, "S-1-5-32-573"} -}; - -static void test_CreateWellKnownSid() -{ - SID_IDENTIFIER_AUTHORITY ident = { SECURITY_NT_AUTHORITY }; - PSID domainsid; - int i; - - if (!pCreateWellKnownSid) - { - skip("CreateWellKnownSid not available\n"); - return; - } - - /* a domain sid usually have three subauthorities but we test that CreateWellKnownSid doesn't check it */ - AllocateAndInitializeSid(&ident, 6, SECURITY_NT_NON_UNIQUE, 12, 23, 34, 45, 56, 0, 0, &domainsid); - - for (i = 0; i < sizeof(well_known_sid_values)/sizeof(well_known_sid_values[0]); i++) - { - struct well_known_sid_value *value = &well_known_sid_values[i]; - char sid_buffer[SECURITY_MAX_SID_SIZE]; - LPSTR str; - DWORD cb; - - if (value->sid_string == NULL) - continue; - - if (i > WinAccountRasAndIasServersSid) - { - /* These SIDs aren't implemented by all Windows versions - detect it and break the loop */ - cb = sizeof(sid_buffer); - if (!pCreateWellKnownSid(i, domainsid, sid_buffer, &cb)) - { - skip("Well known SIDs starting from %d are not implemented\n", i); - break; - } - } - - cb = sizeof(sid_buffer); - ok(pCreateWellKnownSid(i, value->without_domain ? NULL : domainsid, sid_buffer, &cb), "Couldn't create well known sid %d\n", i); - expect_eq(GetSidLengthRequired(*GetSidSubAuthorityCount(sid_buffer)), cb, DWORD, "%d"); - ok(IsValidSid(sid_buffer), "The sid is not valid\n"); - ok(pConvertSidToStringSidA(sid_buffer, &str), "Couldn't convert SID to string\n"); - ok(strcmp(str, value->sid_string) == 0, "SID mismatch - expected %s, got %s\n", - value->sid_string, str); - LocalFree(str); - - if (value->without_domain) - { - char buf2[SECURITY_MAX_SID_SIZE]; - cb = sizeof(buf2); - ok(pCreateWellKnownSid(i, domainsid, buf2, &cb), "Couldn't create well known sid %d with optional domain\n", i); - expect_eq(GetSidLengthRequired(*GetSidSubAuthorityCount(sid_buffer)), cb, DWORD, "%d"); - ok(memcmp(buf2, sid_buffer, cb) == 0, "SID create with domain is different than without (%d)\n", i); - } - } -} - -static void test_LookupAccountSid(void) -{ - SID_IDENTIFIER_AUTHORITY SIDAuthNT = { SECURITY_NT_AUTHORITY }; - CHAR accountA[MAX_PATH], domainA[MAX_PATH]; - DWORD acc_sizeA, dom_sizeA; - DWORD real_acc_sizeA, real_dom_sizeA; - WCHAR accountW[MAX_PATH], domainW[MAX_PATH]; - DWORD acc_sizeW, dom_sizeW; - DWORD real_acc_sizeW, real_dom_sizeW; - PSID pUsersSid = NULL; - SID_NAME_USE use; - BOOL ret; - DWORD size; - MAX_SID max_sid; - CHAR *str_sidA; - int i; - - /* native windows crashes if account size, domain size, or name use is NULL */ - - ret = AllocateAndInitializeSid(&SIDAuthNT, 2, SECURITY_BUILTIN_DOMAIN_RID, - DOMAIN_ALIAS_RID_USERS, 0, 0, 0, 0, 0, 0, &pUsersSid); - ok(ret || (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED), - "AllocateAndInitializeSid failed with error %d\n", GetLastError()); - - /* not running on NT so give up */ - if (!ret && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - return; - - real_acc_sizeA = MAX_PATH; - real_dom_sizeA = MAX_PATH; - ret = LookupAccountSidA(NULL, pUsersSid, accountA, &real_acc_sizeA, domainA, &real_dom_sizeA, &use); - ok(ret, "LookupAccountSidA() Expected TRUE, got FALSE\n"); - - /* try NULL account */ - acc_sizeA = MAX_PATH; - dom_sizeA = MAX_PATH; - ret = LookupAccountSidA(NULL, pUsersSid, NULL, &acc_sizeA, domainA, &dom_sizeA, &use); - ok(ret, "LookupAccountSidA() Expected TRUE, got FALSE\n"); - - /* try NULL domain */ - acc_sizeA = MAX_PATH; - dom_sizeA = MAX_PATH; - ret = LookupAccountSidA(NULL, pUsersSid, accountA, &acc_sizeA, NULL, &dom_sizeA, &use); - ok(ret, "LookupAccountSidA() Expected TRUE, got FALSE\n"); - - /* try a small account buffer */ - acc_sizeA = 1; - dom_sizeA = MAX_PATH; - accountA[0] = 0; - ret = LookupAccountSidA(NULL, pUsersSid, accountA, &acc_sizeA, domainA, &dom_sizeA, &use); - ok(!ret, "LookupAccountSidA() Expected FALSE got TRUE\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "LookupAccountSidA() Expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError()); - - /* try a 0 sized account buffer */ - acc_sizeA = 0; - dom_sizeA = MAX_PATH; - accountA[0] = 0; - ret = LookupAccountSidA(NULL, pUsersSid, accountA, &acc_sizeA, domainA, &dom_sizeA, &use); - /* this can fail or succeed depending on OS version but the size will always be returned */ - ok(acc_sizeA == real_acc_sizeA + 1, - "LookupAccountSidA() Expected acc_size = %u, got %u\n", - real_acc_sizeA + 1, acc_sizeA); - - /* try a 0 sized account buffer */ - acc_sizeA = 0; - dom_sizeA = MAX_PATH; - ret = LookupAccountSidA(NULL, pUsersSid, NULL, &acc_sizeA, domainA, &dom_sizeA, &use); - /* this can fail or succeed depending on OS version but the size will always be returned */ - ok(acc_sizeA == real_acc_sizeA + 1, - "LookupAccountSid() Expected acc_size = %u, got %u\n", - real_acc_sizeA + 1, acc_sizeA); - - /* try a small domain buffer */ - dom_sizeA = 1; - acc_sizeA = MAX_PATH; - accountA[0] = 0; - ret = LookupAccountSidA(NULL, pUsersSid, accountA, &acc_sizeA, domainA, &dom_sizeA, &use); - ok(!ret, "LookupAccountSidA() Expected FALSE got TRUE\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "LookupAccountSidA() Expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError()); - - /* try a 0 sized domain buffer */ - dom_sizeA = 0; - acc_sizeA = MAX_PATH; - accountA[0] = 0; - ret = LookupAccountSidA(NULL, pUsersSid, accountA, &acc_sizeA, domainA, &dom_sizeA, &use); - /* this can fail or succeed depending on OS version but the size will always be returned */ - ok(dom_sizeA == real_dom_sizeA + 1, - "LookupAccountSidA() Expected dom_size = %u, got %u\n", - real_dom_sizeA + 1, dom_sizeA); - - /* try a 0 sized domain buffer */ - dom_sizeA = 0; - acc_sizeA = MAX_PATH; - ret = LookupAccountSidA(NULL, pUsersSid, accountA, &acc_sizeA, NULL, &dom_sizeA, &use); - /* this can fail or succeed depending on OS version but the size will always be returned */ - ok(dom_sizeA == real_dom_sizeA + 1, - "LookupAccountSidA() Expected dom_size = %u, got %u\n", - real_dom_sizeA + 1, dom_sizeA); - - real_acc_sizeW = MAX_PATH; - real_dom_sizeW = MAX_PATH; - ret = LookupAccountSidW(NULL, pUsersSid, accountW, &real_acc_sizeW, domainW, &real_dom_sizeW, &use); - ok(ret, "LookupAccountSidW() Expected TRUE, got FALSE\n"); - - /* native windows crashes if domainW or accountW is NULL */ - - /* try a small account buffer */ - acc_sizeW = 1; - dom_sizeW = MAX_PATH; - accountW[0] = 0; - ret = LookupAccountSidW(NULL, pUsersSid, accountW, &acc_sizeW, domainW, &dom_sizeW, &use); - ok(!ret, "LookupAccountSidW() Expected FALSE got TRUE\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "LookupAccountSidW() Expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError()); - - /* try a 0 sized account buffer */ - acc_sizeW = 0; - dom_sizeW = MAX_PATH; - accountW[0] = 0; - ret = LookupAccountSidW(NULL, pUsersSid, accountW, &acc_sizeW, domainW, &dom_sizeW, &use); - /* this can fail or succeed depending on OS version but the size will always be returned */ - ok(acc_sizeW == real_acc_sizeW + 1, - "LookupAccountSidW() Expected acc_size = %u, got %u\n", - real_acc_sizeW + 1, acc_sizeW); - - /* try a 0 sized account buffer */ - acc_sizeW = 0; - dom_sizeW = MAX_PATH; - ret = LookupAccountSidW(NULL, pUsersSid, NULL, &acc_sizeW, domainW, &dom_sizeW, &use); - /* this can fail or succeed depending on OS version but the size will always be returned */ - ok(acc_sizeW == real_acc_sizeW + 1, - "LookupAccountSidW() Expected acc_size = %u, got %u\n", - real_acc_sizeW + 1, acc_sizeW); - - /* try a small domain buffer */ - dom_sizeW = 1; - acc_sizeW = MAX_PATH; - accountW[0] = 0; - ret = LookupAccountSidW(NULL, pUsersSid, accountW, &acc_sizeW, domainW, &dom_sizeW, &use); - ok(!ret, "LookupAccountSidW() Expected FALSE got TRUE\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "LookupAccountSidW() Expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError()); - - /* try a 0 sized domain buffer */ - dom_sizeW = 0; - acc_sizeW = MAX_PATH; - accountW[0] = 0; - ret = LookupAccountSidW(NULL, pUsersSid, accountW, &acc_sizeW, domainW, &dom_sizeW, &use); - /* this can fail or succeed depending on OS version but the size will always be returned */ - ok(dom_sizeW == real_dom_sizeW + 1, - "LookupAccountSidW() Expected dom_size = %u, got %u\n", - real_dom_sizeW + 1, dom_sizeW); - - /* try a 0 sized domain buffer */ - dom_sizeW = 0; - acc_sizeW = MAX_PATH; - ret = LookupAccountSidW(NULL, pUsersSid, accountW, &acc_sizeW, NULL, &dom_sizeW, &use); - /* this can fail or succeed depending on OS version but the size will always be returned */ - ok(dom_sizeW == real_dom_sizeW + 1, - "LookupAccountSidW() Expected dom_size = %u, got %u\n", - real_dom_sizeW + 1, dom_sizeW); - - FreeSid(pUsersSid); - - if (pCreateWellKnownSid && pConvertSidToStringSidA) - { - trace("Well Known SIDs:\n"); - for (i = 0; i <= 60; i++) - { - size = SECURITY_MAX_SID_SIZE; - if (pCreateWellKnownSid(i, NULL, &max_sid.sid, &size)) - { - if (pConvertSidToStringSidA(&max_sid.sid, &str_sidA)) - { - acc_sizeA = MAX_PATH; - dom_sizeA = MAX_PATH; - if (LookupAccountSidA(NULL, &max_sid.sid, accountA, &acc_sizeA, domainA, &dom_sizeA, &use)) - trace(" %d: %s %s\\%s %d\n", i, str_sidA, domainA, accountA, use); - LocalFree(str_sidA); - } - } - else - { - if (GetLastError() != ERROR_INVALID_PARAMETER) - trace(" CreateWellKnownSid(%d) failed: %d\n", i, GetLastError()); - else - trace(" %d: not supported\n", i); - } - } - - pLsaQueryInformationPolicy = (fnLsaQueryInformationPolicy)GetProcAddress( hmod, "LsaQueryInformationPolicy"); - pLsaOpenPolicy = (fnLsaOpenPolicy)GetProcAddress( hmod, "LsaOpenPolicy"); - pLsaFreeMemory = (fnLsaFreeMemory)GetProcAddress( hmod, "LsaFreeMemory"); - pLsaClose = (fnLsaClose)GetProcAddress( hmod, "LsaClose"); - - if (pLsaQueryInformationPolicy && pLsaOpenPolicy && pLsaFreeMemory && pLsaClose) - { - NTSTATUS status; - LSA_HANDLE handle; - LSA_OBJECT_ATTRIBUTES object_attributes; - - ZeroMemory(&object_attributes, sizeof(object_attributes)); - object_attributes.Length = sizeof(object_attributes); - - status = pLsaOpenPolicy( NULL, &object_attributes, POLICY_ALL_ACCESS, &handle); - ok(status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED, - "LsaOpenPolicy(POLICY_ALL_ACCESS) returned 0x%08x\n", status); - - /* try a more restricted access mask if necessary */ - if (status == STATUS_ACCESS_DENIED) { - trace("LsaOpenPolicy(POLICY_ALL_ACCESS) failed, trying POLICY_VIEW_LOCAL_INFORMATION\n"); - status = pLsaOpenPolicy( NULL, &object_attributes, POLICY_VIEW_LOCAL_INFORMATION, &handle); - ok(status == STATUS_SUCCESS, "LsaOpenPolicy(POLICY_VIEW_LOCAL_INFORMATION) returned 0x%08x\n", status); - } - - if (status == STATUS_SUCCESS) - { - PPOLICY_ACCOUNT_DOMAIN_INFO info; - status = pLsaQueryInformationPolicy(handle, PolicyAccountDomainInformation, (PVOID*)&info); - ok(status == STATUS_SUCCESS, "LsaQueryInformationPolicy() failed, returned 0x%08x\n", status); - if (status == STATUS_SUCCESS) - { - ok(info->DomainSid!=0, "LsaQueryInformationPolicy(PolicyAccountDomainInformation) missing SID\n"); - if (info->DomainSid) - { - int count = *GetSidSubAuthorityCount(info->DomainSid); - CopySid(GetSidLengthRequired(count), &max_sid, info->DomainSid); - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_USER_RID_ADMIN; - max_sid.sid.SubAuthorityCount = count + 1; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_USER_RID_GUEST; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_ADMINS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_USERS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_GUESTS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_COMPUTERS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_CONTROLLERS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_CERT_ADMINS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_SCHEMA_ADMINS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_ENTERPRISE_ADMINS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_GROUP_RID_POLICY_ADMINS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = DOMAIN_ALIAS_RID_RAS_SERVERS; - test_sid_str((PSID)&max_sid.sid); - max_sid.sid.SubAuthority[count] = 1000; /* first user account */ - test_sid_str((PSID)&max_sid.sid); - } - - pLsaFreeMemory((LPVOID)info); - } - - status = pLsaClose(handle); - ok(status == STATUS_SUCCESS, "LsaClose() failed, returned 0x%08x\n", status); - } - } - } -} - -static void get_sid_info(PSID psid, LPSTR *user, LPSTR *dom) -{ - static CHAR account[UNLEN + 1]; - static CHAR domain[UNLEN + 1]; - DWORD size, dom_size; - SID_NAME_USE use; - - *user = account; - *dom = domain; - - size = dom_size = UNLEN + 1; - account[0] = '\0'; - domain[0] = '\0'; - LookupAccountSidA(NULL, psid, account, &size, domain, &dom_size, &use); -} - -static void test_LookupAccountName(void) -{ - DWORD sid_size, domain_size, user_size; - DWORD sid_save, domain_save; - CHAR user_name[UNLEN + 1]; - SID_NAME_USE sid_use; - LPSTR domain, account, sid_dom; - PSID psid; - BOOL ret; - - /* native crashes if (assuming all other parameters correct): - * - peUse is NULL - * - Sid is NULL and cbSid is > 0 - * - cbSid or cchReferencedDomainName are NULL - * - ReferencedDomainName is NULL and cchReferencedDomainName is the correct size - */ - - user_size = UNLEN + 1; - SetLastError(0xdeadbeef); - ret = GetUserNameA(user_name, &user_size); - if (!ret && (GetLastError() == ERROR_NOT_LOGGED_ON)) - { - /* Probably on win9x where the user used 'Cancel' instead of properly logging in */ - skip("Cannot get the user name (win9x and not logged in properly)\n"); - return; - } - ok(ret, "Failed to get user name : %d\n", GetLastError()); - - /* get sizes */ - sid_size = 0; - domain_size = 0; - sid_use = 0xcafebabe; - SetLastError(0xdeadbeef); - ret = LookupAccountNameA(NULL, user_name, NULL, &sid_size, NULL, &domain_size, &sid_use); - if(!ret && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("LookupAccountNameA is not implemented\n"); - return; - } - ok(!ret, "Expected 0, got %d\n", ret); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(sid_size != 0, "Expected non-zero sid size\n"); - ok(domain_size != 0, "Expected non-zero domain size\n"); - ok(sid_use == 0xcafebabe, "Expected 0xcafebabe, got %d\n", sid_use); - - sid_save = sid_size; - domain_save = domain_size; - - psid = HeapAlloc(GetProcessHeap(), 0, sid_size); - domain = HeapAlloc(GetProcessHeap(), 0, domain_size); - - /* try valid account name */ - ret = LookupAccountNameA(NULL, user_name, psid, &sid_size, domain, &domain_size, &sid_use); - get_sid_info(psid, &account, &sid_dom); - ok(ret, "Failed to lookup account name\n"); - ok(sid_size == GetLengthSid(psid), "Expected %d, got %d\n", GetLengthSid(psid), sid_size); - todo_wine - { - ok(!lstrcmp(account, user_name), "Expected %s, got %s\n", user_name, account); - ok(!lstrcmp(domain, sid_dom), "Expected %s, got %s\n", sid_dom, domain); - ok(domain_size == domain_save - 1, "Expected %d, got %d\n", domain_save - 1, domain_size); - ok(lstrlen(domain) == domain_size, "Expected %d\n", lstrlen(domain)); - ok(sid_use == SidTypeUser, "Expected SidTypeUser, got %d\n", sid_use); - } - domain_size = domain_save; - sid_size = sid_save; - - if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) != LANG_ENGLISH) - { - skip("Non-english locale (test with hardcoded 'Everyone')\n"); - } - else - { - ret = LookupAccountNameA(NULL, "Everyone", psid, &sid_size, domain, &domain_size, &sid_use); - get_sid_info(psid, &account, &sid_dom); - ok(ret, "Failed to lookup account name\n"); - ok(sid_size != 0, "sid_size was zero\n"); - ok(!lstrcmp(account, "Everyone"), "Expected Everyone, got %s\n", account); - todo_wine - ok(!lstrcmp(domain, sid_dom), "Expected %s, got %s\n", sid_dom, domain); - ok(domain_size == 0, "Expected 0, got %d\n", domain_size); - todo_wine - ok(lstrlen(domain) == domain_size, "Expected %d, got %d\n", lstrlen(domain), domain_size); - ok(sid_use == SidTypeWellKnownGroup, "Expected SidTypeUser, got %d\n", sid_use); - domain_size = domain_save; - } - - /* NULL Sid with zero sid size */ - SetLastError(0xdeadbeef); - sid_size = 0; - ret = LookupAccountNameA(NULL, user_name, NULL, &sid_size, domain, &domain_size, &sid_use); - ok(!ret, "Expected 0, got %d\n", ret); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(sid_size == sid_save, "Expected %d, got %d\n", sid_save, sid_size); - ok(domain_size == domain_save, "Expected %d, got %d\n", domain_save, domain_size); - - /* try cchReferencedDomainName - 1 */ - SetLastError(0xdeadbeef); - domain_size--; - ret = LookupAccountNameA(NULL, user_name, NULL, &sid_size, domain, &domain_size, &sid_use); - ok(!ret, "Expected 0, got %d\n", ret); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(sid_size == sid_save, "Expected %d, got %d\n", sid_save, sid_size); - ok(domain_size == domain_save, "Expected %d, got %d\n", domain_save, domain_size); - - /* NULL ReferencedDomainName with zero domain name size */ - SetLastError(0xdeadbeef); - domain_size = 0; - ret = LookupAccountNameA(NULL, user_name, psid, &sid_size, NULL, &domain_size, &sid_use); - ok(!ret, "Expected 0, got %d\n", ret); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(sid_size == sid_save, "Expected %d, got %d\n", sid_save, sid_size); - ok(domain_size == domain_save, "Expected %d, got %d\n", domain_save, domain_size); - - HeapFree(GetProcessHeap(), 0, psid); - HeapFree(GetProcessHeap(), 0, domain); - - /* get sizes for NULL account name */ - sid_size = 0; - domain_size = 0; - sid_use = 0xcafebabe; - SetLastError(0xdeadbeef); - ret = LookupAccountNameA(NULL, NULL, NULL, &sid_size, NULL, &domain_size, &sid_use); - ok(!ret, "Expected 0, got %d\n", ret); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(sid_size != 0, "Expected non-zero sid size\n"); - ok(domain_size != 0, "Expected non-zero domain size\n"); - ok(sid_use == 0xcafebabe, "Expected 0xcafebabe, got %d\n", sid_use); - - psid = HeapAlloc(GetProcessHeap(), 0, sid_size); - domain = HeapAlloc(GetProcessHeap(), 0, domain_size); - - /* try NULL account name */ - ret = LookupAccountNameA(NULL, NULL, psid, &sid_size, domain, &domain_size, &sid_use); - get_sid_info(psid, &account, &sid_dom); - ok(ret, "Failed to lookup account name\n"); - todo_wine - { - /* Using a fixed string will not work on different locales */ - ok(!lstrcmp(account, domain), - "Got %s for account and %s for domain, these should be the same\n", - account, domain); - ok(sid_use == SidTypeDomain, "Expected SidTypeDomain, got %d\n", SidTypeDomain); - } - - /* try an invalid account name */ - SetLastError(0xdeadbeef); - sid_size = 0; - domain_size = 0; - ret = LookupAccountNameA(NULL, "oogabooga", NULL, &sid_size, NULL, &domain_size, &sid_use); - ok(!ret, "Expected 0, got %d\n", ret); - todo_wine - { - ok(GetLastError() == ERROR_NONE_MAPPED || - broken(GetLastError() == ERROR_TRUSTED_RELATIONSHIP_FAILURE), - "Expected ERROR_NONE_MAPPED, got %d\n", GetLastError()); - ok(sid_size == 0, "Expected 0, got %d\n", sid_size); - ok(domain_size == 0, "Expected 0, got %d\n", domain_size); - } - - HeapFree(GetProcessHeap(), 0, psid); - HeapFree(GetProcessHeap(), 0, domain); -} - -static void test_security_descriptor(void) -{ - SECURITY_DESCRIPTOR sd; - char buf[8192]; - DWORD size; - BOOL isDefault, isPresent, ret; - PACL pacl; - PSID psid; - - SetLastError(0xdeadbeef); - ret = InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION); - if (ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("InitializeSecurityDescriptor is not implemented\n"); - return; - } - - ok(GetSecurityDescriptorOwner(&sd, &psid, &isDefault), "GetSecurityDescriptorOwner failed\n"); - expect_eq(psid, NULL, PSID, "%p"); - expect_eq(isDefault, FALSE, BOOL, "%d"); - sd.Control |= SE_DACL_PRESENT | SE_SACL_PRESENT; - - SetLastError(0xdeadbeef); - size = 5; - expect_eq(MakeSelfRelativeSD(&sd, buf, &size), FALSE, BOOL, "%d"); - expect_eq(GetLastError(), ERROR_INSUFFICIENT_BUFFER, DWORD, "%u"); - ok(size > 5, "Size not increased\n"); - if (size <= 8192) - { - expect_eq(MakeSelfRelativeSD(&sd, buf, &size), TRUE, BOOL, "%d"); - ok(GetSecurityDescriptorOwner(&sd, &psid, &isDefault), "GetSecurityDescriptorOwner failed\n"); - expect_eq(psid, NULL, PSID, "%p"); - expect_eq(isDefault, FALSE, BOOL, "%d"); - ok(GetSecurityDescriptorGroup(&sd, &psid, &isDefault), "GetSecurityDescriptorGroup failed\n"); - expect_eq(psid, NULL, PSID, "%p"); - expect_eq(isDefault, FALSE, BOOL, "%d"); - ok(GetSecurityDescriptorDacl(&sd, &isPresent, &pacl, &isDefault), "GetSecurityDescriptorDacl failed\n"); - expect_eq(isPresent, TRUE, BOOL, "%d"); - expect_eq(psid, NULL, PSID, "%p"); - expect_eq(isDefault, FALSE, BOOL, "%d"); - ok(GetSecurityDescriptorSacl(&sd, &isPresent, &pacl, &isDefault), "GetSecurityDescriptorSacl failed\n"); - expect_eq(isPresent, TRUE, BOOL, "%d"); - expect_eq(psid, NULL, PSID, "%p"); - expect_eq(isDefault, FALSE, BOOL, "%d"); - } -} - -#define TEST_GRANTED_ACCESS(a,b) test_granted_access(a,b,0,__LINE__) -#define TEST_GRANTED_ACCESS2(a,b,c) test_granted_access(a,b,c,__LINE__) -static void test_granted_access(HANDLE handle, ACCESS_MASK access, - ACCESS_MASK alt, int line) -{ - OBJECT_BASIC_INFORMATION obj_info; - NTSTATUS status; - - if (!pNtQueryObject) - { - skip_(__FILE__, line)("Not NT platform - skipping tests\n"); - return; - } - - status = pNtQueryObject( handle, ObjectBasicInformation, &obj_info, - sizeof(obj_info), NULL ); - ok_(__FILE__, line)(!status, "NtQueryObject with err: %08x\n", status); - if (alt) - ok_(__FILE__, line)(obj_info.GrantedAccess == access || - obj_info.GrantedAccess == alt, "Granted access should be 0x%08x " - "or 0x%08x, instead of 0x%08x\n", access, alt, obj_info.GrantedAccess); - else - ok_(__FILE__, line)(obj_info.GrantedAccess == access, "Granted access should " - "be 0x%08x, instead of 0x%08x\n", access, obj_info.GrantedAccess); -} - -#define CHECK_SET_SECURITY(o,i,e) \ - do{ \ - BOOL res; \ - DWORD err; \ - SetLastError( 0xdeadbeef ); \ - res = SetKernelObjectSecurity( o, i, SecurityDescriptor ); \ - err = GetLastError(); \ - if (e == ERROR_SUCCESS) \ - ok(res, "SetKernelObjectSecurity failed with %d\n", err); \ - else \ - ok(!res && err == e, "SetKernelObjectSecurity should have failed " \ - "with %s, instead of %d\n", #e, err); \ - }while(0) - -static void test_process_security(void) -{ - BOOL res; - char owner[32], group[32]; - PSID AdminSid = NULL, UsersSid = NULL; - PACL Acl = NULL; - SECURITY_DESCRIPTOR *SecurityDescriptor = NULL; - char buffer[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - SECURITY_ATTRIBUTES psa; - HANDLE token, event; - DWORD tmp; - - Acl = HeapAlloc(GetProcessHeap(), 0, 256); - res = InitializeAcl(Acl, 256, ACL_REVISION); - if (!res && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("ACLs not implemented - skipping tests\n"); - HeapFree(GetProcessHeap(), 0, Acl); - return; - } - ok(res, "InitializeAcl failed with error %d\n", GetLastError()); - - /* get owner from the token we might be running as a user not admin */ - res = OpenProcessToken( GetCurrentProcess(), MAXIMUM_ALLOWED, &token ); - ok(res, "OpenProcessToken failed with error %d\n", GetLastError()); - if (!res) - { - HeapFree(GetProcessHeap(), 0, Acl); - return; - } - - res = GetTokenInformation( token, TokenOwner, owner, sizeof(owner), &tmp ); - ok(res, "GetTokenInformation failed with error %d\n", GetLastError()); - AdminSid = ((TOKEN_OWNER*)owner)->Owner; - res = GetTokenInformation( token, TokenPrimaryGroup, group, sizeof(group), &tmp ); - ok(res, "GetTokenInformation failed with error %d\n", GetLastError()); - UsersSid = ((TOKEN_PRIMARY_GROUP*)group)->PrimaryGroup; - - CloseHandle( token ); - if (!res) - { - HeapFree(GetProcessHeap(), 0, Acl); - return; - } - - res = AddAccessDeniedAce(Acl, ACL_REVISION, PROCESS_VM_READ, AdminSid); - ok(res, "AddAccessDeniedAce failed with error %d\n", GetLastError()); - res = AddAccessAllowedAce(Acl, ACL_REVISION, PROCESS_ALL_ACCESS, AdminSid); - ok(res, "AddAccessAllowedAce failed with error %d\n", GetLastError()); - - SecurityDescriptor = HeapAlloc(GetProcessHeap(), 0, SECURITY_DESCRIPTOR_MIN_LENGTH); - res = InitializeSecurityDescriptor(SecurityDescriptor, SECURITY_DESCRIPTOR_REVISION); - ok(res, "InitializeSecurityDescriptor failed with error %d\n", GetLastError()); - - event = CreateEvent( NULL, TRUE, TRUE, "test_event" ); - ok(event != NULL, "CreateEvent %d\n", GetLastError()); - - SecurityDescriptor->Revision = 0; - CHECK_SET_SECURITY( event, OWNER_SECURITY_INFORMATION, ERROR_UNKNOWN_REVISION ); - SecurityDescriptor->Revision = SECURITY_DESCRIPTOR_REVISION; - - CHECK_SET_SECURITY( event, OWNER_SECURITY_INFORMATION, ERROR_INVALID_SECURITY_DESCR ); - CHECK_SET_SECURITY( event, GROUP_SECURITY_INFORMATION, ERROR_INVALID_SECURITY_DESCR ); - CHECK_SET_SECURITY( event, SACL_SECURITY_INFORMATION, ERROR_ACCESS_DENIED ); - CHECK_SET_SECURITY( event, DACL_SECURITY_INFORMATION, ERROR_SUCCESS ); - /* NULL DACL is valid and means default DACL from token */ - SecurityDescriptor->Control |= SE_DACL_PRESENT; - CHECK_SET_SECURITY( event, DACL_SECURITY_INFORMATION, ERROR_SUCCESS ); - - /* Set owner and group and dacl */ - res = SetSecurityDescriptorOwner(SecurityDescriptor, AdminSid, FALSE); - ok(res, "SetSecurityDescriptorOwner failed with error %d\n", GetLastError()); - CHECK_SET_SECURITY( event, OWNER_SECURITY_INFORMATION, ERROR_SUCCESS ); - res = SetSecurityDescriptorGroup(SecurityDescriptor, UsersSid, FALSE); - ok(res, "SetSecurityDescriptorGroup failed with error %d\n", GetLastError()); - CHECK_SET_SECURITY( event, GROUP_SECURITY_INFORMATION, ERROR_SUCCESS ); - res = SetSecurityDescriptorDacl(SecurityDescriptor, TRUE, Acl, FALSE); - ok(res, "SetSecurityDescriptorDacl failed with error %d\n", GetLastError()); - CHECK_SET_SECURITY( event, DACL_SECURITY_INFORMATION, ERROR_SUCCESS ); - - sprintf(buffer, "%s tests/security.c test", myARGV[0]); - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - psa.nLength = sizeof(psa); - psa.lpSecurityDescriptor = SecurityDescriptor; - psa.bInheritHandle = TRUE; - - /* Doesn't matter what ACL say we should get full access for ourselves */ - ok(CreateProcessA( NULL, buffer, &psa, NULL, FALSE, 0, NULL, NULL, &startup, &info ), - "CreateProcess with err:%d\n", GetLastError()); - TEST_GRANTED_ACCESS2( info.hProcess, PROCESS_ALL_ACCESS, - STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL ); - winetest_wait_child_process( info.hProcess ); - - CloseHandle( info.hProcess ); - CloseHandle( info.hThread ); - CloseHandle( event ); - HeapFree(GetProcessHeap(), 0, Acl); - HeapFree(GetProcessHeap(), 0, SecurityDescriptor); -} - -static void test_process_security_child(void) -{ - HANDLE handle, handle1; - BOOL ret; - DWORD err; - - handle = OpenProcess( PROCESS_TERMINATE, FALSE, GetCurrentProcessId() ); - ok(handle != NULL, "OpenProcess(PROCESS_TERMINATE) with err:%d\n", GetLastError()); - TEST_GRANTED_ACCESS( handle, PROCESS_TERMINATE ); - - ok(DuplicateHandle( GetCurrentProcess(), handle, GetCurrentProcess(), - &handle1, 0, TRUE, DUPLICATE_SAME_ACCESS ), - "duplicating handle err:%d\n", GetLastError()); - TEST_GRANTED_ACCESS( handle1, PROCESS_TERMINATE ); - - CloseHandle( handle1 ); - - SetLastError( 0xdeadbeef ); - ret = DuplicateHandle( GetCurrentProcess(), handle, GetCurrentProcess(), - &handle1, PROCESS_ALL_ACCESS, TRUE, 0 ); - err = GetLastError(); - todo_wine - ok(!ret && err == ERROR_ACCESS_DENIED, "duplicating handle should have failed " - "with STATUS_ACCESS_DENIED, instead of err:%d\n", err); - - CloseHandle( handle ); - - /* These two should fail - they are denied by ACL */ - handle = OpenProcess( PROCESS_VM_READ, FALSE, GetCurrentProcessId() ); - todo_wine - ok(handle == NULL, "OpenProcess(PROCESS_VM_READ) should have failed\n"); - handle = OpenProcess( PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId() ); - todo_wine - ok(handle == NULL, "OpenProcess(PROCESS_ALL_ACCESS) should have failed\n"); - - /* Documented privilege elevation */ - ok(DuplicateHandle( GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), - &handle, 0, TRUE, DUPLICATE_SAME_ACCESS ), - "duplicating handle err:%d\n", GetLastError()); - TEST_GRANTED_ACCESS2( handle, PROCESS_ALL_ACCESS, - STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL ); - - CloseHandle( handle ); - - /* Same only explicitly asking for all access rights */ - ok(DuplicateHandle( GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), - &handle, PROCESS_ALL_ACCESS, TRUE, 0 ), - "duplicating handle err:%d\n", GetLastError()); - TEST_GRANTED_ACCESS2( handle, PROCESS_ALL_ACCESS, - PROCESS_ALL_ACCESS | PROCESS_QUERY_LIMITED_INFORMATION ); - ok(DuplicateHandle( GetCurrentProcess(), handle, GetCurrentProcess(), - &handle1, PROCESS_VM_READ, TRUE, 0 ), - "duplicating handle err:%d\n", GetLastError()); - TEST_GRANTED_ACCESS( handle1, PROCESS_VM_READ ); - CloseHandle( handle1 ); - CloseHandle( handle ); -} - -static void test_impersonation_level(void) -{ - HANDLE Token, ProcessToken; - HANDLE Token2; - DWORD Size; - TOKEN_PRIVILEGES *Privileges; - TOKEN_USER *User; - PRIVILEGE_SET *PrivilegeSet; - BOOL AccessGranted; - BOOL ret; - HKEY hkey; - DWORD error; - - pDuplicateTokenEx = (fnDuplicateTokenEx) GetProcAddress(hmod, "DuplicateTokenEx"); - if( !pDuplicateTokenEx ) { - skip("DuplicateTokenEx is not available\n"); - return; - } - SetLastError(0xdeadbeef); - ret = ImpersonateSelf(SecurityAnonymous); - if(!ret && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("ImpersonateSelf is not implemented\n"); - return; - } - ok(ret, "ImpersonateSelf(SecurityAnonymous) failed with error %d\n", GetLastError()); - ret = OpenThreadToken(GetCurrentThread(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY_SOURCE | TOKEN_IMPERSONATE | TOKEN_ADJUST_DEFAULT, TRUE, &Token); - ok(!ret, "OpenThreadToken should have failed\n"); - error = GetLastError(); - ok(error == ERROR_CANT_OPEN_ANONYMOUS, "OpenThreadToken on anonymous token should have returned ERROR_CANT_OPEN_ANONYMOUS instead of %d\n", error); - /* can't perform access check when opening object against an anonymous impersonation token */ - todo_wine { - error = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_READ, &hkey); - ok(error == ERROR_INVALID_HANDLE, "RegOpenKeyEx should have failed with ERROR_INVALID_HANDLE instead of %d\n", error); - } - RevertToSelf(); - - ret = OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE, &ProcessToken); - ok(ret, "OpenProcessToken failed with error %d\n", GetLastError()); - - ret = pDuplicateTokenEx(ProcessToken, - TOKEN_QUERY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE, NULL, - SecurityAnonymous, TokenImpersonation, &Token); - ok(ret, "DuplicateTokenEx failed with error %d\n", GetLastError()); - /* can't increase the impersonation level */ - ret = DuplicateToken(Token, SecurityIdentification, &Token2); - error = GetLastError(); - ok(!ret && error == ERROR_BAD_IMPERSONATION_LEVEL, - "Duplicating a token and increasing the impersonation level should have failed with ERROR_BAD_IMPERSONATION_LEVEL instead of %d\n", error); - /* we can query anything from an anonymous token, including the user */ - ret = GetTokenInformation(Token, TokenUser, NULL, 0, &Size); - error = GetLastError(); - ok(!ret && error == ERROR_INSUFFICIENT_BUFFER, "GetTokenInformation(TokenUser) should have failed with ERROR_INSUFFICIENT_BUFFER instead of %d\n", error); - User = (TOKEN_USER *)HeapAlloc(GetProcessHeap(), 0, Size); - ret = GetTokenInformation(Token, TokenUser, User, Size, &Size); - ok(ret, "GetTokenInformation(TokenUser) failed with error %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, User); - - /* PrivilegeCheck fails with SecurityAnonymous level */ - ret = GetTokenInformation(Token, TokenPrivileges, NULL, 0, &Size); - error = GetLastError(); - ok(!ret && error == ERROR_INSUFFICIENT_BUFFER, "GetTokenInformation(TokenPrivileges) should have failed with ERROR_INSUFFICIENT_BUFFER instead of %d\n", error); - Privileges = (TOKEN_PRIVILEGES *)HeapAlloc(GetProcessHeap(), 0, Size); - ret = GetTokenInformation(Token, TokenPrivileges, Privileges, Size, &Size); - ok(ret, "GetTokenInformation(TokenPrivileges) failed with error %d\n", GetLastError()); - - PrivilegeSet = (PRIVILEGE_SET *)HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(PRIVILEGE_SET, Privilege[Privileges->PrivilegeCount])); - PrivilegeSet->PrivilegeCount = Privileges->PrivilegeCount; - memcpy(PrivilegeSet->Privilege, Privileges->Privileges, PrivilegeSet->PrivilegeCount * sizeof(PrivilegeSet->Privilege[0])); - PrivilegeSet->Control = PRIVILEGE_SET_ALL_NECESSARY; - HeapFree(GetProcessHeap(), 0, Privileges); - - ret = PrivilegeCheck(Token, PrivilegeSet, &AccessGranted); - error = GetLastError(); - ok(!ret && error == ERROR_BAD_IMPERSONATION_LEVEL, "PrivilegeCheck for SecurityAnonymous token should have failed with ERROR_BAD_IMPERSONATION_LEVEL instead of %d\n", error); - - CloseHandle(Token); - - ret = ImpersonateSelf(SecurityIdentification); - ok(ret, "ImpersonateSelf(SecurityIdentification) failed with error %d\n", GetLastError()); - ret = OpenThreadToken(GetCurrentThread(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY_SOURCE | TOKEN_IMPERSONATE | TOKEN_ADJUST_DEFAULT, TRUE, &Token); - ok(ret, "OpenThreadToken failed with error %d\n", GetLastError()); - - /* can't perform access check when opening object against an identification impersonation token */ - error = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_READ, &hkey); - todo_wine { - ok(error == ERROR_INVALID_HANDLE, "RegOpenKeyEx should have failed with ERROR_INVALID_HANDLE instead of %d\n", error); - } - ret = PrivilegeCheck(Token, PrivilegeSet, &AccessGranted); - ok(ret, "PrivilegeCheck for SecurityIdentification failed with error %d\n", GetLastError()); - CloseHandle(Token); - RevertToSelf(); - - ret = ImpersonateSelf(SecurityImpersonation); - ok(ret, "ImpersonateSelf(SecurityImpersonation) failed with error %d\n", GetLastError()); - ret = OpenThreadToken(GetCurrentThread(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY_SOURCE | TOKEN_IMPERSONATE | TOKEN_ADJUST_DEFAULT, TRUE, &Token); - ok(ret, "OpenThreadToken failed with error %d\n", GetLastError()); - error = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_READ, &hkey); - ok(error == ERROR_SUCCESS, "RegOpenKeyEx should have succeeded instead of failing with %d\n", error); - RegCloseKey(hkey); - ret = PrivilegeCheck(Token, PrivilegeSet, &AccessGranted); - ok(ret, "PrivilegeCheck for SecurityImpersonation failed with error %d\n", GetLastError()); - RevertToSelf(); - - CloseHandle(Token); - CloseHandle(ProcessToken); - - HeapFree(GetProcessHeap(), 0, PrivilegeSet); -} - -static void test_SetEntriesInAcl(void) -{ - DWORD res; - PSID EveryoneSid = NULL, UsersSid = NULL; - PACL OldAcl = NULL, NewAcl; - SID_IDENTIFIER_AUTHORITY SIDAuthWorld = { SECURITY_WORLD_SID_AUTHORITY }; - SID_IDENTIFIER_AUTHORITY SIDAuthNT = { SECURITY_NT_AUTHORITY }; - EXPLICIT_ACCESSW ExplicitAccess; - static const WCHAR wszEveryone[] = {'E','v','e','r','y','o','n','e',0}; - - if (!pSetEntriesInAclW) - { - skip("SetEntriesInAclW is not available\n"); - return; - } - - NewAcl = (PACL)0xdeadbeef; - res = pSetEntriesInAclW(0, NULL, NULL, &NewAcl); - if(res == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("SetEntriesInAclW is not implemented\n"); - return; - } - ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res); - ok(NewAcl == NULL, "NewAcl=%p, expected NULL\n", NewAcl); - - OldAcl = HeapAlloc(GetProcessHeap(), 0, 256); - res = InitializeAcl(OldAcl, 256, ACL_REVISION); - if(!res && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("ACLs not implemented - skipping tests\n"); - HeapFree(GetProcessHeap(), 0, OldAcl); - return; - } - ok(res, "InitializeAcl failed with error %d\n", GetLastError()); - - res = AllocateAndInitializeSid( &SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &EveryoneSid); - ok(res, "AllocateAndInitializeSid failed with error %d\n", GetLastError()); - - res = AllocateAndInitializeSid( &SIDAuthNT, 2, SECURITY_BUILTIN_DOMAIN_RID, - DOMAIN_ALIAS_RID_USERS, 0, 0, 0, 0, 0, 0, &UsersSid); - ok(res, "AllocateAndInitializeSid failed with error %d\n", GetLastError()); - - res = AddAccessAllowedAce(OldAcl, ACL_REVISION, KEY_READ, UsersSid); - ok(res, "AddAccessAllowedAce failed with error %d\n", GetLastError()); - - ExplicitAccess.grfAccessPermissions = KEY_WRITE; - ExplicitAccess.grfAccessMode = GRANT_ACCESS; - ExplicitAccess.grfInheritance = NO_INHERITANCE; - ExplicitAccess.Trustee.pMultipleTrustee = NULL; - ExplicitAccess.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE; - ExplicitAccess.Trustee.TrusteeForm = TRUSTEE_IS_SID; - ExplicitAccess.Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN; - ExplicitAccess.Trustee.ptstrName = (LPWSTR)EveryoneSid; - res = pSetEntriesInAclW(1, &ExplicitAccess, OldAcl, &NewAcl); - ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res); - ok(NewAcl != NULL, "returned acl was NULL\n"); - LocalFree(NewAcl); - - if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) != LANG_ENGLISH) - { - skip("Non-english locale (test with hardcoded 'Everyone')\n"); - } - else - { - ExplicitAccess.Trustee.TrusteeForm = TRUSTEE_IS_USER; - ExplicitAccess.Trustee.ptstrName = (LPWSTR)wszEveryone; - res = pSetEntriesInAclW(1, &ExplicitAccess, OldAcl, &NewAcl); - ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res); - ok(NewAcl != NULL, "returned acl was NULL\n"); - LocalFree(NewAcl); - - ExplicitAccess.Trustee.TrusteeForm = TRUSTEE_BAD_FORM; - res = pSetEntriesInAclW(1, &ExplicitAccess, OldAcl, &NewAcl); - ok(res == ERROR_INVALID_PARAMETER, "SetEntriesInAclW failed: %u\n", res); - ok(NewAcl == NULL, "returned acl wasn't NULL: %p\n", NewAcl); - LocalFree(NewAcl); - - ExplicitAccess.Trustee.TrusteeForm = TRUSTEE_IS_USER; - ExplicitAccess.Trustee.MultipleTrusteeOperation = TRUSTEE_IS_IMPERSONATE; - res = pSetEntriesInAclW(1, &ExplicitAccess, OldAcl, &NewAcl); - ok(res == ERROR_INVALID_PARAMETER, "SetEntriesInAclW failed: %u\n", res); - ok(NewAcl == NULL, "returned acl wasn't NULL: %p\n", NewAcl); - LocalFree(NewAcl); - - ExplicitAccess.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE; - ExplicitAccess.grfAccessMode = SET_ACCESS; - res = pSetEntriesInAclW(1, &ExplicitAccess, OldAcl, &NewAcl); - ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res); - ok(NewAcl != NULL, "returned acl was NULL\n"); - LocalFree(NewAcl); - } - - ExplicitAccess.grfAccessMode = REVOKE_ACCESS; - ExplicitAccess.Trustee.TrusteeForm = TRUSTEE_IS_SID; - ExplicitAccess.Trustee.ptstrName = (LPWSTR)UsersSid; - res = pSetEntriesInAclW(1, &ExplicitAccess, OldAcl, &NewAcl); - ok(res == ERROR_SUCCESS, "SetEntriesInAclW failed: %u\n", res); - ok(NewAcl != NULL, "returned acl was NULL\n"); - LocalFree(NewAcl); - - LocalFree(UsersSid); - LocalFree(EveryoneSid); - HeapFree(GetProcessHeap(), 0, OldAcl); -} - -static void test_GetNamedSecurityInfoA(void) -{ - PSECURITY_DESCRIPTOR pSecDesc; - DWORD revision; - SECURITY_DESCRIPTOR_CONTROL control; - PSID owner; - PSID group; - BOOL owner_defaulted; - BOOL group_defaulted; - DWORD error; - BOOL ret; - CHAR windows_dir[MAX_PATH]; - - if (!pGetNamedSecurityInfoA) - { - skip("GetNamedSecurityInfoA is not available\n"); - return; - } - - ret = GetWindowsDirectoryA(windows_dir, MAX_PATH); - ok(ret, "GetWindowsDirectory failed with error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - error = pGetNamedSecurityInfoA(windows_dir, SE_FILE_OBJECT, - OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION, - NULL, NULL, NULL, NULL, &pSecDesc); - if (error != ERROR_SUCCESS && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("GetNamedSecurityInfoA is not implemented\n"); - return; - } - ok(!error, "GetNamedSecurityInfo failed with error %d\n", error); - - ret = GetSecurityDescriptorControl(pSecDesc, &control, &revision); - ok(ret, "GetSecurityDescriptorControl failed with error %d\n", GetLastError()); - ok((control & (SE_SELF_RELATIVE|SE_DACL_PRESENT)) == (SE_SELF_RELATIVE|SE_DACL_PRESENT), - "control (0x%x) doesn't have (SE_SELF_RELATIVE|SE_DACL_PRESENT) flags set\n", control); - ok(revision == SECURITY_DESCRIPTOR_REVISION1, "revision was %d instead of 1\n", revision); - ret = GetSecurityDescriptorOwner(pSecDesc, &owner, &owner_defaulted); - ok(ret, "GetSecurityDescriptorOwner failed with error %d\n", GetLastError()); - ok(owner != NULL, "owner should not be NULL\n"); - ret = GetSecurityDescriptorGroup(pSecDesc, &group, &group_defaulted); - ok(ret, "GetSecurityDescriptorGroup failed with error %d\n", GetLastError()); - ok(group != NULL, "group should not be NULL\n"); -} - -static void test_ConvertStringSecurityDescriptor(void) -{ - BOOL ret; - PSECURITY_DESCRIPTOR pSD; - - if (!pConvertStringSecurityDescriptorToSecurityDescriptorA) - { - skip("ConvertStringSecurityDescriptorToSecurityDescriptor is not available\n"); - return; - } - - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;GA;;;WD)", 0xdeadbeef, &pSD, NULL); - ok(!ret && GetLastError() == ERROR_UNKNOWN_REVISION, - "ConvertStringSecurityDescriptorToSecurityDescriptor should have failed with ERROR_UNKNOWN_REVISION instead of %d\n", - GetLastError()); - - /* test ACE string type */ - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;GA;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(D;;GA;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "ERROR:(D;;GA;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "ConvertStringSecurityDescriptorToSecurityDescriptor should have failed with ERROR_INVALID_PARAMETER instead of %d\n", - GetLastError()); - - /* test ACE string access rights */ - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;GA;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;GRGWGX;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;RCSDWDWO;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;RPWPCCDCLCSWLODTCR;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;FAFRFWFX;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;KAKRKWKX;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;0xFFFFFFFF;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "S:(AU;;0xFFFFFFFF;;;WD)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - - /* test ACE string access right error case */ - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(A;;ROB;;;WD)", SDDL_REVISION_1, &pSD, NULL); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_ACL, - "ConvertStringSecurityDescriptorToSecurityDescriptor should have failed with ERROR_INVALID_ACL instead of %d\n", - GetLastError()); - - /* test ACE string SID */ - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(D;;GA;;;S-1-0-0)", SDDL_REVISION_1, &pSD, NULL); - ok(ret, "ConvertStringSecurityDescriptorToSecurityDescriptor failed with error %d\n", GetLastError()); - LocalFree(pSD); - - SetLastError(0xdeadbeef); - ret = pConvertStringSecurityDescriptorToSecurityDescriptorA( - "D:(D;;GA;;;Nonexistent account)", SDDL_REVISION_1, &pSD, NULL); - ok(!ret, "Expected failure, got %d\n", ret); - ok(GetLastError() == ERROR_INVALID_ACL || GetLastError() == ERROR_INVALID_SID, - "Expected ERROR_INVALID_ACL or ERROR_INVALID_SID, got %d\n", GetLastError()); -} - -static void test_ConvertSecurityDescriptorToString() -{ - SECURITY_DESCRIPTOR desc; - SECURITY_INFORMATION sec_info = OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION|SACL_SECURITY_INFORMATION; - LPSTR string; - DWORD size; - PSID psid, psid2; - PACL pacl; - char sid_buf[256]; - char acl_buf[8192]; - ULONG len; - - if (!pConvertSecurityDescriptorToStringSecurityDescriptorA) - { - skip("ConvertSecurityDescriptorToStringSecurityDescriptor is not available\n"); - return; - } - if (!pCreateWellKnownSid) - { - skip("CreateWellKnownSid is not available\n"); - return; - } - -/* It seems Windows XP adds an extra character to the length of the string for each ACE in an ACL. We - * don't replicate this feature so we only test len >= strlen+1. */ -#define CHECK_RESULT_AND_FREE(exp_str) \ - ok(strcmp(string, (exp_str)) == 0, "String mismatch (expected \"%s\", got \"%s\")\n", (exp_str), string); \ - ok(len >= (lstrlen(exp_str) + 1), "Length mismatch (expected %d, got %d)\n", lstrlen(exp_str) + 1, len); \ - LocalFree(string); - -#define CHECK_ONE_OF_AND_FREE(exp_str1, exp_str2) \ - ok(strcmp(string, (exp_str1)) == 0 || strcmp(string, (exp_str2)) == 0, "String mismatch (expected\n\"%s\" or\n\"%s\", got\n\"%s\")\n", (exp_str1), (exp_str2), string); \ - ok(len >= (strlen(string) + 1), "Length mismatch (expected %d, got %d)\n", lstrlen(string) + 1, len); \ - LocalFree(string); - - InitializeSecurityDescriptor(&desc, SECURITY_DESCRIPTOR_REVISION); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE(""); - - size = 4096; - pCreateWellKnownSid(WinLocalSid, NULL, sid_buf, &size); - SetSecurityDescriptorOwner(&desc, (PSID)sid_buf, FALSE); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:S-1-2-0"); - - SetSecurityDescriptorOwner(&desc, (PSID)sid_buf, TRUE); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:S-1-2-0"); - - size = sizeof(sid_buf); - pCreateWellKnownSid(WinLocalSystemSid, NULL, sid_buf, &size); - SetSecurityDescriptorOwner(&desc, (PSID)sid_buf, TRUE); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SY"); - - pConvertStringSidToSidA("S-1-5-21-93476-23408-4576", &psid); - SetSecurityDescriptorGroup(&desc, psid, TRUE); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576"); - - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, GROUP_SECURITY_INFORMATION, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("G:S-1-5-21-93476-23408-4576"); - - pacl = (PACL)acl_buf; - InitializeAcl(pacl, sizeof(acl_buf), ACL_REVISION); - SetSecurityDescriptorDacl(&desc, TRUE, pacl, TRUE); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576D:"); - - SetSecurityDescriptorDacl(&desc, TRUE, pacl, FALSE); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576D:"); - - pConvertStringSidToSidA("S-1-5-6", &psid2); - pAddAccessAllowedAceEx(pacl, ACL_REVISION, NO_PROPAGATE_INHERIT_ACE, 0xf0000000, psid2); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576D:(A;NP;GAGXGWGR;;;SU)"); - - pAddAccessAllowedAceEx(pacl, ACL_REVISION, INHERIT_ONLY_ACE|INHERITED_ACE, 0x00000003, psid2); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576D:(A;NP;GAGXGWGR;;;SU)(A;IOID;CCDC;;;SU)"); - - pAddAccessDeniedAceEx(pacl, ACL_REVISION, OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE, 0xffffffff, psid); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576D:(A;NP;GAGXGWGR;;;SU)(A;IOID;CCDC;;;SU)(D;OICI;0xffffffff;;;S-1-5-21-93476-23408-4576)"); - - - pacl = (PACL)acl_buf; - InitializeAcl(pacl, sizeof(acl_buf), ACL_REVISION); - SetSecurityDescriptorSacl(&desc, TRUE, pacl, FALSE); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576D:S:"); - - /* fails in win2k */ - SetSecurityDescriptorDacl(&desc, TRUE, NULL, FALSE); - pAddAuditAccessAceEx(pacl, ACL_REVISION, VALID_INHERIT_FLAGS, KEY_READ|KEY_WRITE, psid2, TRUE, TRUE); - if (pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len)) - { - CHECK_ONE_OF_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576D:S:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)", /* XP */ - "O:SYG:S-1-5-21-93476-23408-4576D:NO_ACCESS_CONTROLS:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)" /* Vista */); - } - - /* fails in win2k */ - pAddAuditAccessAceEx(pacl, ACL_REVISION, NO_PROPAGATE_INHERIT_ACE, FILE_GENERIC_READ|FILE_GENERIC_WRITE, psid2, TRUE, FALSE); - if (pConvertSecurityDescriptorToStringSecurityDescriptorA(&desc, SDDL_REVISION_1, sec_info, &string, &len)) - { - CHECK_ONE_OF_AND_FREE("O:SYG:S-1-5-21-93476-23408-4576D:S:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)(AU;NPSA;0x12019f;;;SU)", /* XP */ - "O:SYG:S-1-5-21-93476-23408-4576D:NO_ACCESS_CONTROLS:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)(AU;NPSA;0x12019f;;;SU)" /* Vista */); - } -} - -static void test_PrivateObjectSecurity(void) -{ - SECURITY_INFORMATION sec_info = OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION|SACL_SECURITY_INFORMATION; - SECURITY_DESCRIPTOR_CONTROL ctrl; - PSECURITY_DESCRIPTOR sec; - DWORD dwDescSize; - DWORD dwRevision; - DWORD retSize; - LPSTR string; - ULONG len; - PSECURITY_DESCRIPTOR buf; - - if (!pConvertStringSecurityDescriptorToSecurityDescriptorA) - { - skip("ConvertStringSecurityDescriptorToSecurityDescriptor is not available\n"); - return; - } - - ok(pConvertStringSecurityDescriptorToSecurityDescriptorA( - "O:SY" - "G:S-1-5-21-93476-23408-4576" - "D:(A;NP;GAGXGWGR;;;SU)(A;IOID;CCDC;;;SU)(D;OICI;0xffffffff;;;S-1-5-21-93476-23408-4576)" - "S:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)(AU;NPSA;0x12019f;;;SU)", SDDL_REVISION_1, &sec, &dwDescSize), "Creating descriptor failed\n"); - buf = HeapAlloc(GetProcessHeap(), 0, dwDescSize); - pSetSecurityDescriptorControl(sec, SE_DACL_PROTECTED, SE_DACL_PROTECTED); - GetSecurityDescriptorControl(sec, &ctrl, &dwRevision); - todo_wine expect_eq(ctrl, 0x9014, int, "%x"); - - ok(GetPrivateObjectSecurity(sec, GROUP_SECURITY_INFORMATION, buf, dwDescSize, &retSize), - "GetPrivateObjectSecurity failed (err=%u)\n", GetLastError()); - ok(retSize <= dwDescSize, "Buffer too small (%d vs %d)\n", retSize, dwDescSize); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(buf, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("G:S-1-5-21-93476-23408-4576"); - GetSecurityDescriptorControl(buf, &ctrl, &dwRevision); - expect_eq(ctrl, 0x8000, int, "%x"); - - ok(GetPrivateObjectSecurity(sec, GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION, buf, dwDescSize, &retSize), - "GetPrivateObjectSecurity failed (err=%u)\n", GetLastError()); - ok(retSize <= dwDescSize, "Buffer too small (%d vs %d)\n", retSize, dwDescSize); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(buf, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed err=%u\n", GetLastError()); - CHECK_RESULT_AND_FREE("G:S-1-5-21-93476-23408-4576D:(A;NP;GAGXGWGR;;;SU)(A;IOID;CCDC;;;SU)(D;OICI;0xffffffff;;;S-1-5-21-93476-23408-4576)"); - GetSecurityDescriptorControl(buf, &ctrl, &dwRevision); - expect_eq(ctrl, 0x8004, int, "%x"); - - ok(GetPrivateObjectSecurity(sec, sec_info, buf, dwDescSize, &retSize), - "GetPrivateObjectSecurity failed (err=%u)\n", GetLastError()); - ok(retSize == dwDescSize, "Buffer too small (%d vs %d)\n", retSize, dwDescSize); - ok(pConvertSecurityDescriptorToStringSecurityDescriptorA(buf, SDDL_REVISION_1, sec_info, &string, &len), "Conversion failed\n"); - CHECK_RESULT_AND_FREE("O:SY" - "G:S-1-5-21-93476-23408-4576" - "D:(A;NP;GAGXGWGR;;;SU)(A;IOID;CCDC;;;SU)(D;OICI;0xffffffff;;;S-1-5-21-93476-23408-4576)" - "S:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)(AU;NPSA;0x12019f;;;SU)"); - GetSecurityDescriptorControl(buf, &ctrl, &dwRevision); - expect_eq(ctrl, 0x8014, int, "%x"); - - SetLastError(0xdeadbeef); - ok(GetPrivateObjectSecurity(sec, sec_info, buf, 5, &retSize) == FALSE, "GetPrivateObjectSecurity should have failed\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected error ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError()); - - LocalFree(sec); - HeapFree(GetProcessHeap(), 0, buf); -} -#undef CHECK_RESULT_AND_FREE -#undef CHECK_ONE_OF_AND_FREE - -static void test_acls(void) -{ - char buffer[256]; - PACL pAcl = (PACL)buffer; - BOOL ret; - - SetLastError(0xdeadbeef); - ret = InitializeAcl(pAcl, sizeof(ACL) - 1, ACL_REVISION); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("InitializeAcl is not implemented\n"); - return; - } - - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "InitializeAcl with too small a buffer should have failed with ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = InitializeAcl(pAcl, 0xffffffff, ACL_REVISION); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "InitializeAcl with too large a buffer should have failed with ERROR_INVALID_PARAMETER instead of %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = InitializeAcl(pAcl, sizeof(buffer), ACL_REVISION1); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "InitializeAcl(ACL_REVISION1) should have failed with ERROR_INVALID_PARAMETER instead of %d\n", GetLastError()); - - ret = InitializeAcl(pAcl, sizeof(buffer), ACL_REVISION2); - ok(ret, "InitializeAcl(ACL_REVISION2) failed with error %d\n", GetLastError()); - - ret = IsValidAcl(pAcl); - ok(ret, "IsValidAcl failed with error %d\n", GetLastError()); - - ret = InitializeAcl(pAcl, sizeof(buffer), ACL_REVISION3); - ok(ret, "InitializeAcl(ACL_REVISION3) failed with error %d\n", GetLastError()); - - ret = IsValidAcl(pAcl); - ok(ret, "IsValidAcl failed with error %d\n", GetLastError()); - - ret = InitializeAcl(pAcl, sizeof(buffer), ACL_REVISION4); - ok(ret, "InitializeAcl(ACL_REVISION4) failed with error %d\n", GetLastError()); - - ret = IsValidAcl(pAcl); - ok(ret, "IsValidAcl failed with error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = InitializeAcl(pAcl, sizeof(buffer), -1); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "InitializeAcl(-1) failed with error %d\n", GetLastError()); -} - -static void test_GetSecurityInfo(void) -{ - HANDLE obj; - PSECURITY_DESCRIPTOR sd; - PSID owner, group; - PACL dacl; - DWORD ret; - - if (!pGetSecurityInfo) - { - win_skip("GetSecurityInfo is not available\n"); - return; - } - - /* Create something. Files have lots of associated security info. */ - obj = CreateFile(myARGV[0], GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if (obj == INVALID_HANDLE_VALUE) - { - skip("Couldn't create an object for GetSecurityInfo test\n"); - return; - } - - ret = pGetSecurityInfo(obj, SE_FILE_OBJECT, - OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, - &owner, &group, &dacl, NULL, &sd); - if (ret == ERROR_CALL_NOT_IMPLEMENTED) - { - win_skip("GetSecurityInfo is not implemented\n"); - CloseHandle(obj); - return; - } - ok(ret == ERROR_SUCCESS, "GetSecurityInfo returned %d\n", ret); - ok(sd != NULL, "GetSecurityInfo\n"); - ok(owner != NULL, "GetSecurityInfo\n"); - ok(group != NULL, "GetSecurityInfo\n"); - ok(dacl != NULL, "GetSecurityInfo\n"); - ok(IsValidAcl(dacl), "GetSecurityInfo\n"); - - LocalFree(sd); - - /* If we don't ask for the security descriptor, Windows will still give us - the other stuff, leaving us no way to free it. */ - ret = pGetSecurityInfo(obj, SE_FILE_OBJECT, - OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, - &owner, &group, &dacl, NULL, NULL); - ok(ret == ERROR_SUCCESS, "GetSecurityInfo returned %d\n", ret); - ok(owner != NULL, "GetSecurityInfo\n"); - ok(group != NULL, "GetSecurityInfo\n"); - ok(dacl != NULL, "GetSecurityInfo\n"); - ok(IsValidAcl(dacl), "GetSecurityInfo\n"); - - CloseHandle(obj); -} - -START_TEST(security) -{ - init(); - if (!hmod) return; - - if (myARGC >= 3) - { - test_process_security_child(); - return; - } - test_sid(); - test_trustee(); - test_luid(); - test_CreateWellKnownSid(); - test_FileSecurity(); - test_AccessCheck(); - test_token_attr(); - test_LookupAccountSid(); - test_LookupAccountName(); - test_security_descriptor(); - test_process_security(); - test_impersonation_level(); - test_SetEntriesInAcl(); - test_GetNamedSecurityInfoA(); - test_ConvertStringSecurityDescriptor(); - test_ConvertSecurityDescriptorToString(); - test_PrivateObjectSecurity(); - test_acls(); - test_GetSecurityInfo(); -} diff --git a/rostests/winetests/advapi32/service.c b/rostests/winetests/advapi32/service.c deleted file mode 100644 index da62b0b5e8b..00000000000 --- a/rostests/winetests/advapi32/service.c +++ /dev/null @@ -1,2089 +0,0 @@ -/* - * Unit tests for service functions - * - * Copyright (c) 2007 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 - */ - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "winreg.h" -#include "winsvc.h" -#include "winnls.h" -#include "lmcons.h" - -#include "wine/test.h" - -static const CHAR spooler[] = "Spooler"; /* Should be available on all platforms */ - -static BOOL (WINAPI *pChangeServiceConfig2A)(SC_HANDLE,DWORD,LPVOID); -static BOOL (WINAPI *pEnumServicesStatusExA)(SC_HANDLE, SC_ENUM_TYPE, DWORD, - DWORD, LPBYTE, DWORD, LPDWORD, - LPDWORD, LPDWORD, LPCSTR); -static BOOL (WINAPI *pQueryServiceConfig2A)(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD); -static BOOL (WINAPI *pQueryServiceConfig2W)(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD); -static BOOL (WINAPI *pQueryServiceStatusEx)(SC_HANDLE, SC_STATUS_TYPE, LPBYTE, - DWORD, LPDWORD); - -static void init_function_pointers(void) -{ - HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll"); - - pChangeServiceConfig2A = (void*)GetProcAddress(hadvapi32, "ChangeServiceConfig2A"); - pEnumServicesStatusExA= (void*)GetProcAddress(hadvapi32, "EnumServicesStatusExA"); - pQueryServiceConfig2A= (void*)GetProcAddress(hadvapi32, "QueryServiceConfig2A"); - pQueryServiceConfig2W= (void*)GetProcAddress(hadvapi32, "QueryServiceConfig2W"); - pQueryServiceStatusEx= (void*)GetProcAddress(hadvapi32, "QueryServiceStatusEx"); -} - -static void test_open_scm(void) -{ - SC_HANDLE scm_handle; - - /* No access rights */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, 0); - ok(scm_handle != NULL, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == 0xdeadbeef /* NT4, XP */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - CloseServiceHandle(scm_handle); - - /* Unknown database name */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, "DoesNotExist", SC_MANAGER_CONNECT); - ok(!scm_handle, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, got %d\n", GetLastError()); - CloseServiceHandle(scm_handle); /* Just in case */ - - /* MSDN says only ServiceActive is allowed, or NULL */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, SERVICES_FAILED_DATABASEA, SC_MANAGER_CONNECT); - ok(!scm_handle, "Expected failure\n"); - ok(GetLastError() == ERROR_DATABASE_DOES_NOT_EXIST, "Expected ERROR_DATABASE_DOES_NOT_EXIST, got %d\n", GetLastError()); - CloseServiceHandle(scm_handle); /* Just in case */ - - /* Remote unknown host */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA("DOESNOTEXIST", SERVICES_ACTIVE_DATABASEA, SC_MANAGER_CONNECT); - ok(!scm_handle, "Expected failure\n"); - todo_wine - ok(GetLastError() == RPC_S_SERVER_UNAVAILABLE || GetLastError() == RPC_S_INVALID_NET_ADDR /* w2k8 */, - "Expected RPC_S_SERVER_UNAVAILABLE or RPC_S_INVALID_NET_ADDR, got %d\n", GetLastError()); - CloseServiceHandle(scm_handle); /* Just in case */ - - /* Proper call with an empty hostname */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA("", SERVICES_ACTIVE_DATABASEA, SC_MANAGER_CONNECT); - ok(scm_handle != NULL, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == ERROR_ENVVAR_NOT_FOUND /* NT4 */ || - GetLastError() == 0xdeadbeef /* XP */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING, ERROR_ENVVAR_NOT_FOUND or 0xdeadbeef, got %d\n", GetLastError()); - CloseServiceHandle(scm_handle); - - /* Again a correct one */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - ok(scm_handle != NULL, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == 0xdeadbeef /* NT4, XP */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - CloseServiceHandle(scm_handle); -} - -static void test_open_svc(void) -{ - SC_HANDLE scm_handle, svc_handle; - CHAR displayname[4096]; - DWORD displaysize; - - /* All NULL (invalid access rights) */ - SetLastError(0xdeadbeef); - svc_handle = OpenServiceA(NULL, NULL, 0); - ok(!svc_handle, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - /* TODO: Add some tests with invalid handles. These produce errors on Windows but crash on Wine */ - - /* NULL service */ - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - SetLastError(0xdeadbeef); - svc_handle = OpenServiceA(scm_handle, NULL, GENERIC_READ); - ok(!svc_handle, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* W2K, XP, W2K3, Vista */ || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Nonexistent service */ - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - SetLastError(0xdeadbeef); - svc_handle = OpenServiceA(scm_handle, "deadbeef", GENERIC_READ); - ok(!svc_handle, "Expected failure\n"); - ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); - CloseServiceHandle(scm_handle); - - /* Proper SCM handle but different access rights */ - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - SetLastError(0xdeadbeef); - svc_handle = OpenServiceA(scm_handle, "Spooler", GENERIC_WRITE); - if (!svc_handle && (GetLastError() == ERROR_ACCESS_DENIED)) - skip("Not enough rights to get a handle to the service\n"); - else - { - ok(svc_handle != NULL, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* XP, NT4 */, - "Expected ERROR_SUCCESS or 0xdeadbeef, got %d\n", GetLastError()); - CloseServiceHandle(svc_handle); - } - - /* Test to show we can't open a service with the displayname */ - - /* Retrieve the needed size for the buffer */ - displaysize = 0; - GetServiceDisplayNameA(scm_handle, spooler, NULL, &displaysize); - /* Get the displayname */ - GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - /* Try to open the service with this displayname, unless the displayname equals - * the servicename as that would defeat the purpose of this test. - */ - if (!lstrcmpi(spooler, displayname)) - { - skip("displayname equals servicename\n"); - CloseServiceHandle(scm_handle); - return; - } - - SetLastError(0xdeadbeef); - svc_handle = OpenServiceA(scm_handle, displayname, GENERIC_READ); - ok(!svc_handle, "Expected failure\n"); - ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); - /* Just in case */ - CloseServiceHandle(svc_handle); - - CloseServiceHandle(scm_handle); -} - -static void test_create_delete_svc(void) -{ - SC_HANDLE scm_handle, svc_handle1; - CHAR username[UNLEN + 1], domain[MAX_PATH]; - DWORD user_size = UNLEN + 1; - CHAR account[UNLEN + 3]; - static const CHAR servicename [] = "Winetest"; - static const CHAR pathname [] = "we_dont_care.exe"; - static const CHAR empty [] = ""; - static const CHAR password [] = "secret"; - BOOL spooler_exists = FALSE; - BOOL ret; - CHAR display[4096]; - DWORD display_size = sizeof(display); - - /* Get the username and turn it into an account to be used in some tests */ - GetUserNameA(username, &user_size); - /* Get the domainname to cater for that situation */ - if (GetEnvironmentVariableA("USERDOMAIN", domain, MAX_PATH)) - sprintf(account, "%s\\%s", domain, username); - else - sprintf(account, ".\\%s", username); - - /* All NULL */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - - /* Only a valid handle to the Service Control Manager */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* W2K, W2K3, XP, Vista */ || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Now with a servicename */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* W2K, W2K3, XP, Vista */ || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Or just a binary name */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, NULL, NULL, 0, 0, 0, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* W2K, W2K3, XP, Vista */ || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Both servicename and binary name (We only have connect rights) */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, 0, 0, 0, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - - /* They can even be empty at this stage of parameter checking */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, empty, NULL, 0, 0, 0, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, 0, 0, 0, 0, empty, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - - /* Open the Service Control Manager with minimal rights for creation - * (Verified with 'SC_MANAGER_ALL_ACCESS &~ SC_MANAGER_CREATE_SERVICE') - */ - CloseServiceHandle(scm_handle); - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CREATE_SERVICE); - if (!scm_handle && (GetLastError() == ERROR_ACCESS_DENIED)) - { - skip("Not enough rights to get a handle to the manager\n"); - return; - } - - /* TODO: It looks like account (ServiceStartName) and (maybe) password are checked at this place */ - - /* Empty strings for servicename and binary name are checked */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, empty, NULL, 0, 0, 0, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, 0, 0, 0, 0, empty, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, empty, NULL, 0, 0, 0, 0, empty, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, got %d\n", GetLastError()); - - /* Valid call (as we will see later) except for the empty binary name (to proof it's indeed - * an ERROR_INVALID_PARAMETER) - */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, 0, SERVICE_WIN32_OWN_PROCESS, - SERVICE_DISABLED, 0, empty, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Windows checks if the 'service type', 'access type' and the combination of them are valid, so let's test that */ - - /* Illegal (service-type, which is used as a mask can't have a mix. Except the one with - * SERVICE_INTERACTIVE_PROCESS which will be tested below in a valid call) - */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Illegal (SERVICE_INTERACTIVE_PROCESS is only allowed with SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS) */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, SERVICE_FILE_SYSTEM_DRIVER | SERVICE_INTERACTIVE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Illegal (this combination is only allowed when the LocalSystem account (ServiceStartName) is used) - * Not having a correct account would have resulted in an ERROR_INVALID_SERVICE_ACCOUNT. - */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, account, password); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Illegal (start-type is not a mask and should only be one of the possibilities) - * Remark : 'OR'-ing them could result in a valid possibility (but doesn't make sense as - * it's most likely not the wanted start-type) - */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, SERVICE_WIN32_OWN_PROCESS, - SERVICE_AUTO_START | SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Illegal (SERVICE_BOOT_START and SERVICE_SYSTEM_START are only allowed for driver services) */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, 0, SERVICE_WIN32_OWN_PROCESS, - SERVICE_BOOT_START, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* The service already exists (check first, just in case) */ - svc_handle1 = OpenServiceA(scm_handle, spooler, GENERIC_READ); - if (svc_handle1) - { - spooler_exists = TRUE; - CloseServiceHandle(svc_handle1); - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, spooler, NULL, 0, SERVICE_WIN32_OWN_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_SERVICE_EXISTS, "Expected ERROR_SERVICE_EXISTS, got %d\n", GetLastError()); - } - else - skip("Spooler service doesn't exist\n"); - - /* To find an existing displayname we check the 'Spooler' service. Although the registry - * doesn't show DisplayName on NT4, this call will return a displayname which is equal - * to the servicename and can't be used as well for a new displayname. - */ - if (spooler_exists) - { - ret = GetServiceDisplayNameA(scm_handle, spooler, display, &display_size); - - if (!ret) - skip("Could not retrieve a displayname for the Spooler service\n"); - else - { - svc_handle1 = CreateServiceA(scm_handle, servicename, display, 0, SERVICE_WIN32_OWN_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(!svc_handle1, "Expected failure\n"); - ok(GetLastError() == ERROR_DUPLICATE_SERVICE_NAME, - "Expected ERROR_DUPLICATE_SERVICE_NAME, got %d\n", GetLastError()); - } - } - else - skip("Could not retrieve a displayname (Spooler service doesn't exist)\n"); - - /* Windows doesn't care about the access rights for creation (which makes - * sense as there is no service yet) as long as there are sufficient - * rights to the manager. - */ - SetLastError(0xdeadbeef); - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, 0, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(svc_handle1 != NULL, "Could not create the service : %d\n", GetLastError()); - ok(GetLastError() == ERROR_SUCCESS /* W2K3, Vista */ || - GetLastError() == 0xdeadbeef /* NT4, XP */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - - /* DeleteService however must have proper rights */ - SetLastError(0xdeadbeef); - ret = DeleteService(svc_handle1); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, - "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - - /* Open the service with minimal rights for deletion. - * (Verified with 'SERVICE_ALL_ACCESS &~ DELETE') - */ - CloseServiceHandle(svc_handle1); - svc_handle1 = OpenServiceA(scm_handle, servicename, DELETE); - - /* Now that we have the proper rights, we should be able to delete */ - SetLastError(0xdeadbeef); - ret = DeleteService(svc_handle1); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - - CloseServiceHandle(svc_handle1); - - CloseServiceHandle(scm_handle); - - /* Wait a while. One of the following tests also does a CreateService for the - * same servicename and this would result in an ERROR_SERVICE_MARKED_FOR_DELETE - * error if we do this to quick. Vista seems more picky then the others. - */ - Sleep(1000); - - /* And a final NULL check */ - SetLastError(0xdeadbeef); - ret = DeleteService(NULL); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); -} - -static void test_get_displayname(void) -{ - SC_HANDLE scm_handle, svc_handle; - BOOL ret; - CHAR displayname[4096]; - WCHAR displaynameW[2048]; - DWORD displaysize, tempsize, tempsizeW; - static const CHAR deadbeef[] = "Deadbeef"; - static const WCHAR spoolerW[] = {'S','p','o','o','l','e','r',0}; - static const CHAR servicename[] = "Winetest"; - static const CHAR pathname[] = "we_dont_care.exe"; - - /* Having NULL for the size of the buffer will crash on W2K3 */ - - SetLastError(0xdeadbeef); - ret = GetServiceDisplayNameA(NULL, NULL, NULL, &displaysize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - - SetLastError(0xdeadbeef); - ret = GetServiceDisplayNameA(scm_handle, NULL, NULL, &displaysize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* W2K, XP, W2K3, Vista */ || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - displaysize = sizeof(displayname); - ret = GetServiceDisplayNameA(scm_handle, NULL, displayname, &displaysize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* W2K, XP, W2K3, Vista */ || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* Test for nonexistent service */ - SetLastError(0xdeadbeef); - displaysize = -1; - ret = GetServiceDisplayNameA(scm_handle, deadbeef, NULL, &displaysize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, - "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); - - /* Check if 'Spooler' exists */ - svc_handle = OpenServiceA(scm_handle, spooler, GENERIC_READ); - if (!svc_handle) - { - skip("Spooler service doesn't exist\n"); - CloseServiceHandle(scm_handle); - return; - } - CloseServiceHandle(svc_handle); - - /* Retrieve the needed size for the buffer */ - SetLastError(0xdeadbeef); - displaysize = -1; - ret = GetServiceDisplayNameA(scm_handle, spooler, NULL, &displaysize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - tempsize = displaysize; - - displaysize = 0; - ret = GetServiceDisplayNameA(scm_handle, spooler, NULL, &displaysize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(displaysize == tempsize, "Buffer size mismatch (%d vs %d)\n", tempsize, displaysize); - - /* Buffer is too small */ - SetLastError(0xdeadbeef); - displaysize = (tempsize / 2); - ret = GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - ok(!ret, "Expected failure\n"); - ok(displaysize == tempsize, "Expected the needed buffersize\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - /* First try with a buffer that should be big enough to hold - * the ANSI string (and terminating character). This succeeds on Windows - * although when asked (see above 2 tests) it will return twice the needed size. - */ - SetLastError(0xdeadbeef); - displaysize = (tempsize / 2) + 1; - ret = GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - ok(ret, "Expected success\n"); - ok(displaysize == ((tempsize / 2) + 1), "Expected no change for the needed buffer size\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - - /* Now with the original returned size */ - SetLastError(0xdeadbeef); - displaysize = tempsize; - ret = GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - ok(ret, "Expected success\n"); - ok(displaysize == tempsize, "Expected no change for the needed buffer size\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - - /* And with a bigger than needed buffer */ - SetLastError(0xdeadbeef); - displaysize = tempsize * 2; - ret = GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - /* Test that shows that if the buffersize is enough, it's not changed */ - ok(displaysize == tempsize * 2, "Expected no change for the needed buffer size\n"); - ok(lstrlen(displayname) == tempsize/2, - "Expected the buffer to be twice the length of the string\n") ; - - /* Do the buffer(size) tests also for GetServiceDisplayNameW */ - SetLastError(0xdeadbeef); - displaysize = -1; - ret = GetServiceDisplayNameW(scm_handle, spoolerW, NULL, &displaysize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - /* Buffer is too small */ - SetLastError(0xdeadbeef); - tempsizeW = displaysize; - displaysize = tempsizeW / 2; - ret = GetServiceDisplayNameW(scm_handle, spoolerW, displaynameW, &displaysize); - ok(!ret, "Expected failure\n"); - ok(displaysize = tempsizeW, "Expected the needed buffersize\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - /* Now with the original returned size */ - SetLastError(0xdeadbeef); - displaysize = tempsizeW; - ret = GetServiceDisplayNameW(scm_handle, spoolerW, displaynameW, &displaysize); - ok(!ret, "Expected failure\n"); - ok(displaysize = tempsizeW, "Expected the needed buffersize\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - /* And with a bigger than needed buffer */ - SetLastError(0xdeadbeef); - displaysize = tempsizeW + 1; /* This caters for the null terminating character */ - ret = GetServiceDisplayNameW(scm_handle, spoolerW, displaynameW, &displaysize); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - ok(displaysize == tempsizeW, "Expected the needed buffersize\n"); - ok(lstrlenW(displaynameW) == displaysize, - "Expected the buffer to be the length of the string\n") ; - ok(tempsize / 2 == tempsizeW, - "Expected the needed buffersize (in bytes) to be the same for the A and W call\n"); - - CloseServiceHandle(scm_handle); - - /* Test for a service without a displayname (which is valid). This should return - * the servicename itself. - */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CREATE_SERVICE); - if (!scm_handle && (GetLastError() == ERROR_ACCESS_DENIED)) - { - skip("Not enough rights to get a handle to the manager\n"); - return; - } - - SetLastError(0xdeadbeef); - svc_handle = CreateServiceA(scm_handle, servicename, NULL, DELETE, - SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(svc_handle != NULL, "Could not create the service : %d\n", GetLastError()); - if (!svc_handle) - { - CloseServiceHandle(scm_handle); - return; - } - - /* Retrieve the needed size for the buffer */ - SetLastError(0xdeadbeef); - displaysize = -1; - ret = GetServiceDisplayNameA(scm_handle, servicename, NULL, &displaysize); - ok(!ret, "Expected failure\n"); - ok(displaysize == lstrlen(servicename) * 2, - "Expected the displaysize to be twice the size of the servicename\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - /* Buffer is too small */ - SetLastError(0xdeadbeef); - tempsize = displaysize; - displaysize = (tempsize / 2); - ret = GetServiceDisplayNameA(scm_handle, servicename, displayname, &displaysize); - ok(!ret, "Expected failure\n"); - ok(displaysize == tempsize, "Expected the needed buffersize\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - /* Get the displayname */ - SetLastError(0xdeadbeef); - ret = GetServiceDisplayNameA(scm_handle, servicename, displayname, &displaysize); - ok(ret, "Expected success\n"); - ok(!lstrcmpi(displayname, servicename), - "Expected displayname to be %s, got %s\n", servicename, displayname); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - - /* Delete the service */ - ret = DeleteService(svc_handle); - ok(ret, "Expected success\n"); - - CloseServiceHandle(svc_handle); - CloseServiceHandle(scm_handle); - - /* Wait a while. Just in case one of the following tests does a CreateService again */ - Sleep(1000); -} - -static void test_get_servicekeyname(void) -{ - SC_HANDLE scm_handle, svc_handle; - CHAR servicename[4096]; - CHAR displayname[4096]; - WCHAR servicenameW[4096]; - WCHAR displaynameW[4096]; - DWORD servicesize, displaysize, tempsize; - BOOL ret; - static const CHAR deadbeef[] = "Deadbeef"; - static const WCHAR deadbeefW[] = {'D','e','a','d','b','e','e','f',0}; - - /* Having NULL for the size of the buffer will crash on W2K3 */ - - SetLastError(0xdeadbeef); - ret = GetServiceKeyNameA(NULL, NULL, NULL, &servicesize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - - servicesize = 200; - SetLastError(0xdeadbeef); - ret = GetServiceKeyNameA(scm_handle, NULL, NULL, &servicesize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* W2K, XP, W2K3, Vista */ || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - todo_wine ok(servicesize == 1, "Service size expected 1, got %d\n", servicesize); - - /* Valid handle and buffer but no displayname */ - servicesize = 200; - SetLastError(0xdeadbeef); - ret = GetServiceKeyNameA(scm_handle, NULL, servicename, &servicesize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* W2K, XP, W2K3, Vista */ || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Expected ERROR_INVALID_ADDRESS or ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - todo_wine ok(servicesize == 200, "Service size expected 1, got %d\n", servicesize); - - /* Test for nonexistent displayname */ - SetLastError(0xdeadbeef); - ret = GetServiceKeyNameA(scm_handle, deadbeef, NULL, &servicesize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, - "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); - todo_wine ok(servicesize == 1, "Service size expected 1, got %d\n", servicesize); - - servicesize = 15; - strcpy(servicename, "ABC"); - ret = GetServiceKeyNameA(scm_handle, deadbeef, servicename, &servicesize); - ok(!ret, "Expected failure\n"); - todo_wine ok(servicesize == 15, "Service size expected 15, got %d\n", servicesize); - ok(servicename[0] == 0, "Service name not empty\n"); - - servicesize = 15; - servicenameW[0] = 'A'; - ret = GetServiceKeyNameW(scm_handle, deadbeefW, servicenameW, &servicesize); - ok(!ret, "Expected failure\n"); - todo_wine ok(servicesize == 15, "Service size expected 15, got %d\n", servicesize); - ok(servicenameW[0] == 0, "Service name not empty\n"); - - servicesize = 0; - strcpy(servicename, "ABC"); - ret = GetServiceKeyNameA(scm_handle, deadbeef, servicename, &servicesize); - ok(!ret, "Expected failure\n"); - todo_wine ok(servicesize == 1, "Service size expected 1, got %d\n", servicesize); - ok(servicename[0] == 'A', "Service name changed\n"); - - servicesize = 0; - servicenameW[0] = 'A'; - ret = GetServiceKeyNameW(scm_handle, deadbeefW, servicenameW, &servicesize); - ok(!ret, "Expected failure\n"); - todo_wine ok(servicesize == 2, "Service size expected 2, got %d\n", servicesize); - ok(servicenameW[0] == 'A', "Service name changed\n"); - - /* Check if 'Spooler' exists */ - svc_handle = OpenServiceA(scm_handle, spooler, GENERIC_READ); - if (!svc_handle) - { - skip("Spooler service doesn't exist\n"); - CloseServiceHandle(scm_handle); - return; - } - CloseServiceHandle(svc_handle); - - /* Get the displayname for the 'Spooler' service */ - GetServiceDisplayNameA(scm_handle, spooler, NULL, &displaysize); - GetServiceDisplayNameA(scm_handle, spooler, displayname, &displaysize); - - /* Retrieve the needed size for the buffer */ - SetLastError(0xdeadbeef); - servicesize = 0; - ret = GetServiceKeyNameA(scm_handle, displayname, NULL, &servicesize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - /* Valid call with the correct buffersize */ - SetLastError(0xdeadbeef); - tempsize = servicesize; - servicesize *= 2; - ret = GetServiceKeyNameA(scm_handle, displayname, servicename, &servicesize); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - if (ret) - { - ok(lstrlen(servicename) == tempsize/2, - "Expected the buffer to be twice the length of the string\n") ; - ok(!lstrcmpi(servicename, spooler), "Expected %s, got %s\n", spooler, servicename); - ok(servicesize == (tempsize * 2), - "Expected servicesize not to change if buffer not insufficient\n") ; - } - - MultiByteToWideChar(CP_ACP, 0, displayname, -1, displaynameW, sizeof(displaynameW)/2); - SetLastError(0xdeadbeef); - servicesize *= 2; - ret = GetServiceKeyNameW(scm_handle, displaynameW, servicenameW, &servicesize); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - if (ret) - { - ok(lstrlen(servicename) == tempsize/2, - "Expected the buffer to be twice the length of the string\n") ; - ok(servicesize == lstrlenW(servicenameW), - "Expected servicesize not to change if buffer not insufficient\n") ; - } - - SetLastError(0xdeadbeef); - servicesize = 3; - ret = GetServiceKeyNameW(scm_handle, displaynameW, servicenameW, &servicesize); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(servicenameW[0] == 0, "Buffer not empty\n"); - - CloseServiceHandle(scm_handle); -} - -static void test_query_svc(void) -{ - SC_HANDLE scm_handle, svc_handle; - BOOL ret; - SERVICE_STATUS status; - SERVICE_STATUS_PROCESS *statusproc; - DWORD bufsize, needed; - - /* All NULL or wrong */ - SetLastError(0xdeadbeef); - ret = QueryServiceStatus(NULL, NULL); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - - /* Check if 'Spooler' exists. - * Open with not enough rights to query the status. - */ - svc_handle = OpenServiceA(scm_handle, spooler, STANDARD_RIGHTS_READ); - if (!svc_handle) - { - skip("Spooler service doesn't exist\n"); - CloseServiceHandle(scm_handle); - return; - } - - SetLastError(0xdeadbeef); - ret = QueryServiceStatus(svc_handle, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_ADDRESS || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Unexpected last error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = QueryServiceStatus(svc_handle, &status); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, - "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - - /* Open the service with just enough rights. - * (Verified with 'SERVICE_ALL_ACCESS &~ SERVICE_QUERY_STATUS') - */ - CloseServiceHandle(svc_handle); - svc_handle = OpenServiceA(scm_handle, spooler, SERVICE_QUERY_STATUS); - - SetLastError(0xdeadbeef); - ret = QueryServiceStatus(svc_handle, &status); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); - - CloseServiceHandle(svc_handle); - - /* More or less the same tests for QueryServiceStatusEx */ - - /* Open service with not enough rights to query the status */ - svc_handle = OpenServiceA(scm_handle, spooler, STANDARD_RIGHTS_READ); - - /* All NULL or wrong, this proves that info level is checked first */ - SetLastError(0xdeadbeef); - ret = pQueryServiceStatusEx(NULL, 1, NULL, 0, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_LEVEL, - "Expected ERROR_INVALID_LEVEL, got %d\n", GetLastError()); - - /* Passing a NULL parameter for the needed buffer size - * will crash on anything but NT4. - */ - - /* Only info level is correct. It looks like the buffer/size is checked second */ - SetLastError(0xdeadbeef); - ret = pQueryServiceStatusEx(NULL, 0, NULL, 0, &needed); - /* NT4 checks the handle first */ - if (GetLastError() != ERROR_INVALID_HANDLE) - { - ok(!ret, "Expected failure\n"); - ok(needed == sizeof(SERVICE_STATUS_PROCESS), - "Needed buffersize is wrong : %d\n", needed); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - } - - /* Pass a correct buffer and buffersize but a NULL handle */ - statusproc = HeapAlloc(GetProcessHeap(), 0, needed); - bufsize = needed; - SetLastError(0xdeadbeef); - ret = pQueryServiceStatusEx(NULL, 0, (BYTE*)statusproc, bufsize, &needed); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, statusproc); - - /* Correct handle and info level */ - SetLastError(0xdeadbeef); - ret = pQueryServiceStatusEx(svc_handle, 0, NULL, 0, &needed); - /* NT4 doesn't return the needed size */ - if (GetLastError() != ERROR_INVALID_PARAMETER) - { - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed == sizeof(SERVICE_STATUS_PROCESS), - "Needed buffersize is wrong : %d\n", needed); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - } - } - - /* All parameters are OK but we don't have enough rights */ - statusproc = HeapAlloc(GetProcessHeap(), 0, sizeof(SERVICE_STATUS_PROCESS)); - bufsize = sizeof(SERVICE_STATUS_PROCESS); - SetLastError(0xdeadbeef); - ret = pQueryServiceStatusEx(svc_handle, 0, (BYTE*)statusproc, bufsize, &needed); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, - "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, statusproc); - - /* Open the service with just enough rights. */ - CloseServiceHandle(svc_handle); - svc_handle = OpenServiceA(scm_handle, spooler, SERVICE_QUERY_STATUS); - - /* Everything should be fine now. */ - statusproc = HeapAlloc(GetProcessHeap(), 0, sizeof(SERVICE_STATUS_PROCESS)); - bufsize = sizeof(SERVICE_STATUS_PROCESS); - SetLastError(0xdeadbeef); - ret = pQueryServiceStatusEx(svc_handle, 0, (BYTE*)statusproc, bufsize, &needed); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); - if (statusproc->dwCurrentState == SERVICE_RUNNING) - ok(statusproc->dwProcessId != 0, - "Expect a process id for this running service\n"); - else - ok(statusproc->dwProcessId == 0, - "Expect no process id for this stopped service\n"); - HeapFree(GetProcessHeap(), 0, statusproc); - - CloseServiceHandle(svc_handle); - CloseServiceHandle(scm_handle); -} - -static void test_enum_svc(void) -{ - SC_HANDLE scm_handle; - BOOL ret; - DWORD bufsize, needed, returned, resume; - DWORD tempneeded, tempreturned; - DWORD servicecountactive, servicecountinactive; - ENUM_SERVICE_STATUS *services; - ENUM_SERVICE_STATUS_PROCESS *exservices; - INT i; - - /* All NULL or wrong */ - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(NULL, 1, 0, NULL, 0, NULL, NULL, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - /* Open the service control manager with not enough rights at first */ - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - - /* Valid handle but rest is still NULL or wrong */ - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, 1, 0, NULL, 0, NULL, NULL, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_ADDRESS || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Unexpected last error %d\n", GetLastError()); - - /* Don't specify the two required pointers */ - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, 0, 0, NULL, 0, NULL, &returned, NULL); - ok(!ret, "Expected failure\n"); - ok(returned == 0xdeadbeef, "Expected no change to the number of services variable\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_ADDRESS || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Unexpected last error %d\n", GetLastError()); - - /* Don't specify the two required pointers */ - needed = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, 0, 0, NULL, 0, &needed, NULL, NULL); - ok(!ret, "Expected failure\n"); - ok(needed == 0xdeadbeef, "Expected no change to the needed buffer variable\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_ADDRESS || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Unexpected last error %d\n", GetLastError()); - - /* No valid servicetype and servicestate */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, 0, 0, NULL, 0, &needed, &returned, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(returned == 0, "Expected number of services to be set to 0, got %d\n", returned); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } - - /* No valid servicetype and servicestate */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, SERVICE_WIN32, 0, NULL, 0, &needed, &returned, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(returned == 0, "Expected number of services to be set to 0, got %d\n", returned); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } - - /* No valid servicetype and servicestate */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, 0, SERVICE_STATE_ALL, NULL, 0, - &needed, &returned, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(returned == 0, "Expected number of services to be set to 0, got %d\n", returned); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } - - /* All parameters are correct but our access rights are wrong */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_STATE_ALL, NULL, 0, - &needed, &returned, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(returned == 0, "Expected number of services to be set to 0, got %d\n", returned); - } - ok(GetLastError() == ERROR_ACCESS_DENIED, - "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - - /* Open the service control manager with the needed rights */ - CloseServiceHandle(scm_handle); - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE); - - /* All parameters are correct. Request the needed buffer size */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_STATE_ALL, NULL, 0, - &needed, &returned, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size for this one service\n"); - ok(returned == 0, "Expected no service returned, got %d\n", returned); - ok(GetLastError() == ERROR_MORE_DATA, - "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); - } - - /* Store the needed bytes */ - tempneeded = needed; - - /* Allocate the correct needed bytes */ - services = HeapAlloc(GetProcessHeap(), 0, needed); - bufsize = needed; - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_STATE_ALL, - services, bufsize, &needed, &returned, NULL); - todo_wine - { - ok(ret, "Expected success\n"); - ok(needed == 0, "Expected needed buffer to be 0 as we are done\n"); - ok(returned != 0xdeadbeef && returned > 0, "Expected some returned services\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); - } - HeapFree(GetProcessHeap(), 0, services); - - /* Store the number of returned services */ - tempreturned = returned; - - /* Allocate less than the needed bytes and don't specify a resume handle */ - services = HeapAlloc(GetProcessHeap(), 0, tempneeded - 1); - bufsize = tempneeded - 1; - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_STATE_ALL, - services, bufsize, &needed, &returned, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size for this one service\n"); - ok(returned == (tempreturned - 1), "Expected one service less to be returned\n"); - ok(GetLastError() == ERROR_MORE_DATA, - "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); - } - HeapFree(GetProcessHeap(), 0, services); - - /* Allocate less than the needed bytes, this time with a correct resume handle */ - services = HeapAlloc(GetProcessHeap(), 0, tempneeded - 1); - bufsize = tempneeded - 1; - needed = 0xdeadbeef; - returned = 0xdeadbeef; - resume = 0; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_STATE_ALL, - services, bufsize, &needed, &returned, &resume); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size for this one service\n"); - ok(returned == (tempreturned - 1), "Expected one service less to be returned\n"); - ok(resume, "Expected a resume handle\n"); - ok(GetLastError() == ERROR_MORE_DATA, - "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); - } - HeapFree(GetProcessHeap(), 0, services); - - /* Fetch that last service but pass a bigger buffer size */ - services = HeapAlloc(GetProcessHeap(), 0, tempneeded); - bufsize = tempneeded; - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_STATE_ALL, - services, bufsize, &needed, &returned, &resume); - todo_wine - { - ok(ret, "Expected success\n"); - ok(needed == 0, "Expected needed buffer to be 0 as we are done\n"); - ok(returned == 1, "Expected only 1 service to be returned\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); - } - ok(resume == 0, "Expected the resume handle to be 0\n"); - HeapFree(GetProcessHeap(), 0, services); - - /* See if things add up */ - - /* Vista only shows the drivers with a state of SERVICE_RUNNING as active - * and doesn't count the others as inactive. This means that Vista could - * show a total that is greater than the sum of active and inactive - * drivers. - * The number of active and inactive drivers is greatly influenced by the - * time when tests are run, immediately after boot or later for example. - * - * Both reasons make calculations for drivers not so useful - */ - - /* Get the number of active win32 services */ - EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_ACTIVE, NULL, 0, - &needed, &returned, NULL); - services = HeapAlloc(GetProcessHeap(), 0, needed); - EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_ACTIVE, services, - needed, &needed, &returned, NULL); - HeapFree(GetProcessHeap(), 0, services); - - servicecountactive = returned; - - /* Get the number of inactive win32 services */ - EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_INACTIVE, NULL, 0, - &needed, &returned, NULL); - services = HeapAlloc(GetProcessHeap(), 0, needed); - EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_INACTIVE, services, - needed, &needed, &returned, NULL); - HeapFree(GetProcessHeap(), 0, services); - - servicecountinactive = returned; - - /* Get the number of win32 services */ - EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_STATE_ALL, NULL, 0, - &needed, &returned, NULL); - services = HeapAlloc(GetProcessHeap(), 0, needed); - EnumServicesStatusA(scm_handle, SERVICE_WIN32, SERVICE_STATE_ALL, services, - needed, &needed, &returned, NULL); - HeapFree(GetProcessHeap(), 0, services); - - /* Check if total is the same as active and inactive win32 services */ - todo_wine - ok(returned == (servicecountactive + servicecountinactive), - "Something wrong in the calculation\n"); - - /* Get all drivers and services - * - * Fetch the status of the last call as failing could make the following tests crash - * on Wine (we don't return anything yet). - */ - EnumServicesStatusA(scm_handle, SERVICE_DRIVER | SERVICE_WIN32, SERVICE_STATE_ALL, - NULL, 0, &needed, &returned, NULL); - services = HeapAlloc(GetProcessHeap(), 0, needed); - ret = EnumServicesStatusA(scm_handle, SERVICE_DRIVER | SERVICE_WIN32, SERVICE_STATE_ALL, - services, needed, &needed, &returned, NULL); - - /* Loop through all those returned drivers and services */ - for (i = 0; ret && i < returned; i++) - { - SERVICE_STATUS status = services[i].ServiceStatus; - - /* lpServiceName and lpDisplayName should always be filled */ - ok(lstrlenA(services[i].lpServiceName) > 0, "Expected a service name\n"); - ok(lstrlenA(services[i].lpDisplayName) > 0, "Expected a display name\n"); - - /* Decrement the counters to see if the functions calls return the same - * numbers as the contents of these structures. - */ - if (status.dwServiceType & (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)) - { - if (status.dwCurrentState == SERVICE_RUNNING) - servicecountactive--; - else - servicecountinactive--; - } - } - HeapFree(GetProcessHeap(), 0, services); - - todo_wine - { - ok(servicecountactive == 0, "Active services mismatch\n"); - ok(servicecountinactive == 0, "Inactive services mismatch\n"); - } - - CloseServiceHandle(scm_handle); - - /* More or less the same for EnumServicesStatusExA */ - - /* All NULL or wrong */ - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(NULL, 1, 0, 0, NULL, 0, NULL, NULL, NULL, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_LEVEL, - "Expected ERROR_INVALID_LEVEL, got %d\n", GetLastError()); - - /* All NULL or wrong, just the info level is correct */ - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - /* Open the service control manager with not enough rights at first */ - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - - /* Valid handle and info level but rest is still NULL or wrong */ - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_ADDRESS || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Unexpected last error %d\n", GetLastError()); - - /* Don't specify the two required pointers */ - needed = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, 0, 0, NULL, 0, &needed, NULL, NULL, NULL); - ok(!ret, "Expected failure\n"); - ok(needed == 0xdeadbeef, "Expected no change to the needed buffer variable\n"); - todo_wine - ok(GetLastError() == ERROR_INVALID_ADDRESS || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Unexpected last error %d\n", GetLastError()); - - /* Don't specify the two required pointers */ - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, 0, 0, NULL, 0, NULL, &returned, NULL, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(returned == 0xdeadbeef, "Expected no change to the number of services variable\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS || - GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */, - "Unexpected last error %d\n", GetLastError()); - } - - /* No valid servicetype and servicestate */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, 0, 0, NULL, 0, &needed, &returned, NULL, NULL); - ok(!ret, "Expected failure\n"); - ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } - - /* No valid servicestate */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, 0, NULL, 0, - &needed, &returned, NULL, NULL); - ok(!ret, "Expected failure\n"); - ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } - - /* No valid servicetype */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, 0, SERVICE_STATE_ALL, NULL, 0, - &needed, &returned, NULL, NULL); - ok(!ret, "Expected failure\n"); - ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } - - /* No valid servicetype and servicestate and unknown service group */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, 0, 0, NULL, 0, &needed, - &returned, NULL, "deadbeef_group"); - ok(!ret, "Expected failure\n"); - ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } - - /* All parameters are correct but our access rights are wrong */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - NULL, 0, &needed, &returned, NULL, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); - ok(GetLastError() == ERROR_ACCESS_DENIED, - "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - - /* All parameters are correct, access rights are wrong but the - * group name won't be checked yet. - */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - NULL, 0, &needed, &returned, NULL, "deadbeef_group"); - ok(!ret, "Expected failure\n"); - todo_wine - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); - ok(GetLastError() == ERROR_ACCESS_DENIED, - "Expected ERROR_ACCESS_DENIED, got %d\n", GetLastError()); - - /* Open the service control manager with the needed rights */ - CloseServiceHandle(scm_handle); - scm_handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE); - - /* All parameters are correct and the group will be checked */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - NULL, 0, &needed, &returned, NULL, "deadbeef_group"); - ok(!ret, "Expected failure\n"); - ok(returned == 0, "Expected number of service to be set to 0, got %d\n", returned); - todo_wine - { - ok(needed == 0, "Expected needed buffer size to be set to 0, got %d\n", needed); - ok(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST, - "Expected ERROR_SERVICE_DOES_NOT_EXIST, got %d\n", GetLastError()); - } - - /* TODO: Create a test that makes sure we enumerate all services that don't - * belong to a group. (specifying ""). - */ - - /* All parameters are correct. Request the needed buffer size */ - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - NULL, 0, &needed, &returned, NULL, NULL); - ok(!ret, "Expected failure\n"); - ok(returned == 0, "Expected no service returned, got %d\n", returned); - todo_wine - { - ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size\n"); - ok(GetLastError() == ERROR_MORE_DATA, - "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); - } - - /* Store the needed bytes */ - tempneeded = needed; - - /* Allocate the correct needed bytes */ - exservices = HeapAlloc(GetProcessHeap(), 0, needed); - bufsize = needed; - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - (BYTE*)exservices, bufsize, &needed, &returned, NULL, NULL); - todo_wine - { - ok(ret, "Expected success\n"); - ok(needed == 0, "Expected needed buffer to be 0 as we are done\n"); - ok(returned == tempreturned, "Expected the same number of service from this function\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); - } - HeapFree(GetProcessHeap(), 0, exservices); - - /* Store the number of returned services */ - tempreturned = returned; - - /* Allocate less than the needed bytes and don't specify a resume handle */ - exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded - 1); - bufsize = tempneeded - 1; - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - (BYTE*)exservices, bufsize, &needed, &returned, NULL, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size\n"); - ok(returned == (tempreturned - 1), "Expected one service less to be returned\n"); - ok(GetLastError() == ERROR_MORE_DATA, - "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); - } - HeapFree(GetProcessHeap(), 0, exservices); - - /* Allocate less than the needed bytes, this time with a correct resume handle */ - exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded - 1); - bufsize = tempneeded - 1; - needed = 0xdeadbeef; - returned = 0xdeadbeef; - resume = 0; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - (BYTE*)exservices, bufsize, &needed, &returned, &resume, NULL); - ok(!ret, "Expected failure\n"); - todo_wine - { - ok(needed != 0xdeadbeef && needed > 0, "Expected the needed buffer size\n"); - ok(returned == (tempreturned - 1), "Expected one service less to be returned\n"); - ok(resume, "Expected a resume handle\n"); - ok(GetLastError() == ERROR_MORE_DATA, - "Expected ERROR_MORE_DATA, got %d\n", GetLastError()); - } - HeapFree(GetProcessHeap(), 0, exservices); - - /* Fetch that last service but pass a bigger buffer size */ - exservices = HeapAlloc(GetProcessHeap(), 0, tempneeded); - bufsize = tempneeded; - needed = 0xdeadbeef; - returned = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - (BYTE*)exservices, bufsize, &needed, &returned, &resume, NULL); - todo_wine - { - ok(ret, "Expected success\n"); - ok(needed == 0, "Expected needed buffer to be 0 as we are done\n"); - ok(returned == 1, "Expected only 1 service to be returned\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP and Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Unexpected last error %d\n", GetLastError()); - } - ok(resume == 0, "Expected the resume handle to be 0\n"); - HeapFree(GetProcessHeap(), 0, exservices); - - /* See if things add up */ - - /* Get the number of active win32 services */ - pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_ACTIVE, - NULL, 0, &needed, &returned, NULL, NULL); - exservices = HeapAlloc(GetProcessHeap(), 0, needed); - pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_ACTIVE, - (BYTE*)exservices, needed, &needed, &returned, NULL, NULL); - HeapFree(GetProcessHeap(), 0, exservices); - - servicecountactive = returned; - - /* Get the number of inactive win32 services */ - pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_INACTIVE, - NULL, 0, &needed, &returned, NULL, NULL); - exservices = HeapAlloc(GetProcessHeap(), 0, needed); - pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_INACTIVE, - (BYTE*)exservices, needed, &needed, &returned, NULL, NULL); - HeapFree(GetProcessHeap(), 0, exservices); - - servicecountinactive = returned; - - /* Get the number of win32 services */ - pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - NULL, 0, &needed, &returned, NULL, NULL); - exservices = HeapAlloc(GetProcessHeap(), 0, needed); - pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32, SERVICE_STATE_ALL, - (BYTE*)exservices, needed, &needed, &returned, NULL, NULL); - HeapFree(GetProcessHeap(), 0, exservices); - - /* Check if total is the same as active and inactive win32 services */ - ok(returned == (servicecountactive + servicecountinactive), - "Something wrong in the calculation\n"); - - /* Get all drivers and services */ - pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32 | SERVICE_DRIVER, - SERVICE_STATE_ALL, NULL, 0, &needed, &returned, NULL, NULL); - exservices = HeapAlloc(GetProcessHeap(), 0, needed); - pEnumServicesStatusExA(scm_handle, 0, SERVICE_WIN32 | SERVICE_DRIVER, - SERVICE_STATE_ALL, (BYTE*)exservices, needed, &needed, &returned, NULL, NULL); - - /* Loop through all those returned drivers and services */ - for (i = 0; i < returned; i++) - { - SERVICE_STATUS_PROCESS status = exservices[i].ServiceStatusProcess; - - - /* lpServiceName and lpDisplayName should always be filled */ - ok(lstrlenA(exservices[i].lpServiceName) > 0, "Expected a service name\n"); - ok(lstrlenA(exservices[i].lpDisplayName) > 0, "Expected a display name\n"); - - /* Decrement the counters to see if the functions calls return the - * same numbers as the contents of these structures. - * Check some process id specifics. - */ - if (status.dwServiceType & (SERVICE_FILE_SYSTEM_DRIVER | SERVICE_KERNEL_DRIVER)) - { - /* We shouldn't have a process id for drivers */ - ok(status.dwProcessId == 0, - "This driver shouldn't have an associated process id\n"); - } - - if (status.dwServiceType & (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)) - { - if (status.dwCurrentState == SERVICE_RUNNING) - { - /* We expect a process id for every running service */ - ok(status.dwProcessId > 0, "Expected a process id for this running service (%s)\n", - exservices[i].lpServiceName); - - servicecountactive--; - } - else - { - /* We shouldn't have a process id for inactive services */ - ok(status.dwProcessId == 0, "This service shouldn't have an associated process id\n"); - - servicecountinactive--; - } - } - } - HeapFree(GetProcessHeap(), 0, exservices); - - ok(servicecountactive == 0, "Active services mismatch\n"); - ok(servicecountinactive == 0, "Inactive services mismatch\n"); - - CloseServiceHandle(scm_handle); -} - -static void test_close(void) -{ - SC_HANDLE handle; - BOOL ret; - - /* NULL handle */ - SetLastError(0xdeadbeef); - ret = CloseServiceHandle(NULL); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - /* TODO: Add some tests with invalid handles. These produce errors on Windows but crash on Wine */ - - /* Proper call */ - handle = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT); - SetLastError(0xdeadbeef); - ret = CloseServiceHandle(handle); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_IO_PENDING /* W2K */ || - GetLastError() == ERROR_SUCCESS /* W2K3 */ || - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); -} - -static void test_sequence(void) -{ - SC_HANDLE scm_handle, svc_handle; - BOOL ret; - QUERY_SERVICE_CONFIGA *config; - DWORD given, needed; - static const CHAR servicename [] = "Winetest"; - static const CHAR displayname [] = "Winetest dummy service"; - static const CHAR displayname2[] = "Winetest dummy service (2)"; - static const CHAR pathname [] = "we_dont_care.exe"; - static const CHAR dependencies[] = "Master1\0Master2\0+MasterGroup1\0"; - static const CHAR password [] = ""; - static const CHAR empty [] = ""; - static const CHAR localsystem [] = "LocalSystem"; - - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - - if (!scm_handle && (GetLastError() == ERROR_ACCESS_DENIED)) - { - skip("Not enough rights to get a handle to the manager\n"); - return; - } - else - ok(scm_handle != NULL, "Could not get a handle to the manager: %d\n", GetLastError()); - - if (!scm_handle) return; - - /* Create a dummy service */ - SetLastError(0xdeadbeef); - svc_handle = CreateServiceA(scm_handle, servicename, displayname, GENERIC_ALL, - SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS, SERVICE_DISABLED, SERVICE_ERROR_IGNORE, - pathname, NULL, NULL, dependencies, NULL, password); - - if (!svc_handle && (GetLastError() == ERROR_SERVICE_EXISTS)) - { - /* We try and open the service and do the rest of the tests. Some could - * fail if the tests were changed between these runs. - */ - trace("Deletion probably didn't work last time\n"); - SetLastError(0xdeadbeef); - svc_handle = OpenServiceA(scm_handle, servicename, GENERIC_ALL); - if (!svc_handle && (GetLastError() == ERROR_ACCESS_DENIED)) - { - skip("Not enough rights to open the service\n"); - CloseServiceHandle(scm_handle); - return; - } - ok(svc_handle != NULL, "Could not open the service : %d\n", GetLastError()); - } - else if (!svc_handle && (GetLastError() == ERROR_ACCESS_DENIED)) - { - skip("Not enough rights to create the service\n"); - CloseServiceHandle(scm_handle); - return; - } - else - ok(svc_handle != NULL, "Could not create the service : %d\n", GetLastError()); - - if (!svc_handle) return; - - /* TODO: - * Before we do a QueryServiceConfig we should check the registry. This will make sure - * that the correct keys are used. - */ - - /* Request the size for the buffer */ - SetLastError(0xdeadbeef); - ret = QueryServiceConfigA(svc_handle, NULL, 0, &needed); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - config = HeapAlloc(GetProcessHeap(), 0, needed); - given = needed; - SetLastError(0xdeadbeef); - ret = QueryServiceConfigA(svc_handle, config, given, &needed); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */|| - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - todo_wine - { - ok(given == needed, "Expected the given (%d) and needed (%d) buffersizes to be equal\n", given, needed); - } - ok(config->lpBinaryPathName && config->lpLoadOrderGroup && config->lpDependencies && config->lpServiceStartName && - config->lpDisplayName, "Expected all string struct members to be non-NULL\n"); - ok(config->dwServiceType == (SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS), - "Expected SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS, got %d\n", config->dwServiceType); - ok(config->dwStartType == SERVICE_DISABLED, "Expected SERVICE_DISABLED, got %d\n", config->dwStartType); - ok(config->dwErrorControl == SERVICE_ERROR_IGNORE, "Expected SERVICE_ERROR_IGNORE, got %d\n", config->dwErrorControl); - ok(!strcmp(config->lpBinaryPathName, pathname), "Expected '%s', got '%s'\n", pathname, config->lpBinaryPathName); - ok(!strcmp(config->lpLoadOrderGroup, empty), "Expected an empty string, got '%s'\n", config->lpLoadOrderGroup); - ok(config->dwTagId == 0, "Expected 0, got %d\n", config->dwTagId); - /* TODO: Show the double 0 terminated string */ - todo_wine - { - ok(!memcmp(config->lpDependencies, dependencies, sizeof(dependencies)), "Wrong string\n"); - } - ok(!strcmp(config->lpServiceStartName, localsystem), "Expected 'LocalSystem', got '%s'\n", config->lpServiceStartName); - ok(!strcmp(config->lpDisplayName, displayname), "Expected '%s', got '%s'\n", displayname, config->lpDisplayName); - - ok(ChangeServiceConfigA(svc_handle, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, SERVICE_ERROR_NORMAL, NULL, "TestGroup2", NULL, NULL, NULL, NULL, displayname2), - "ChangeServiceConfig failed (err=%d)\n", GetLastError()); - - QueryServiceConfigA(svc_handle, NULL, 0, &needed); - config = HeapReAlloc(GetProcessHeap(), 0, config, needed); - ok(QueryServiceConfigA(svc_handle, config, needed, &needed), "QueryServiceConfig failed\n"); - ok(config->lpBinaryPathName && config->lpLoadOrderGroup && config->lpDependencies && config->lpServiceStartName && - config->lpDisplayName, "Expected all string struct members to be non-NULL\n"); - ok(config->dwServiceType == (SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS), - "Expected SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS, got %d\n", config->dwServiceType); - ok(config->dwStartType == SERVICE_DISABLED, "Expected SERVICE_DISABLED, got %d\n", config->dwStartType); - ok(config->dwErrorControl == SERVICE_ERROR_NORMAL, "Expected SERVICE_ERROR_NORMAL, got %d\n", config->dwErrorControl); - ok(!strcmp(config->lpBinaryPathName, pathname), "Expected '%s', got '%s'\n", pathname, config->lpBinaryPathName); - ok(!strcmp(config->lpLoadOrderGroup, "TestGroup2"), "Expected 'TestGroup2', got '%s'\n", config->lpLoadOrderGroup); - ok(config->dwTagId == 0, "Expected 0, got %d\n", config->dwTagId); - ok(!strcmp(config->lpServiceStartName, localsystem), "Expected 'LocalSystem', got '%s'\n", config->lpServiceStartName); - ok(!strcmp(config->lpDisplayName, displayname2), "Expected '%s', got '%s'\n", displayname2, config->lpDisplayName); - - SetLastError(0xdeadbeef); - ret = DeleteService(svc_handle); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS /* W2K3 */|| - GetLastError() == 0xdeadbeef /* NT4, XP, Vista */ || - GetLastError() == ERROR_IO_PENDING /* W2K */, - "Expected ERROR_SUCCESS, ERROR_IO_PENDING or 0xdeadbeef, got %d\n", GetLastError()); - - CloseServiceHandle(svc_handle); - - /* Wait a while. The following test does a CreateService again */ - Sleep(1000); - - CloseServiceHandle(scm_handle); - HeapFree(GetProcessHeap(), 0, config); -} - -static void test_queryconfig2(void) -{ - SC_HANDLE scm_handle, svc_handle; - BOOL ret; - DWORD expected, needed; - BYTE buffer[MAX_PATH]; - LPSERVICE_DESCRIPTIONA pConfig = (LPSERVICE_DESCRIPTIONA)buffer; - static const CHAR servicename [] = "Winetest"; - static const CHAR displayname [] = "Winetest dummy service"; - static const CHAR pathname [] = "we_dont_care.exe"; - static const CHAR dependencies[] = "Master1\0Master2\0+MasterGroup1\0"; - static const CHAR password [] = ""; - static const CHAR description [] = "Description"; - - if(!pQueryServiceConfig2A) - { - skip("function QueryServiceConfig2A not present\n"); - return; - } - - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - - if (!scm_handle) - { - if(GetLastError() == ERROR_ACCESS_DENIED) - skip("Not enough rights to get a handle to the manager\n"); - else - ok(FALSE, "Could not get a handle to the manager: %d\n", GetLastError()); - return; - } - - /* Create a dummy service */ - SetLastError(0xdeadbeef); - svc_handle = CreateServiceA(scm_handle, servicename, displayname, GENERIC_ALL, - SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS, SERVICE_DISABLED, SERVICE_ERROR_IGNORE, - pathname, NULL, NULL, dependencies, NULL, password); - - if (!svc_handle) - { - if(GetLastError() == ERROR_SERVICE_EXISTS) - { - /* We try and open the service and do the rest of the tests. Some could - * fail if the tests were changed between these runs. - */ - trace("Deletion probably didn't work last time\n"); - SetLastError(0xdeadbeef); - svc_handle = OpenServiceA(scm_handle, servicename, GENERIC_ALL); - if (!svc_handle) - { - if(GetLastError() == ERROR_ACCESS_DENIED) - skip("Not enough rights to open the service\n"); - else - ok(FALSE, "Could not open the service : %d\n", GetLastError()); - CloseServiceHandle(scm_handle); - return; - } - } - if (GetLastError() == ERROR_ACCESS_DENIED) - { - skip("Not enough rights to create the service\n"); - CloseServiceHandle(scm_handle); - return; - } - ok(svc_handle != NULL, "Could not create the service : %d\n", GetLastError()); - if (!svc_handle) - { - CloseServiceHandle(scm_handle); - return; - } - } - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle,0xfff0,buffer,sizeof(SERVICE_DESCRIPTIONA),&needed); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok(ERROR_INVALID_LEVEL == GetLastError(), "expected error ERROR_INVALID_LEVEL, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle,0xfff0,buffer,sizeof(SERVICE_DESCRIPTIONA),NULL); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok(ERROR_INVALID_LEVEL == GetLastError(), "expected error ERROR_INVALID_LEVEL, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer,sizeof(SERVICE_DESCRIPTIONA),NULL); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok(ERROR_INVALID_ADDRESS == GetLastError(), "expected error ERROR_INVALID_ADDRESS, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,NULL,sizeof(SERVICE_DESCRIPTIONA),&needed); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok((ERROR_INVALID_ADDRESS == GetLastError()) || (ERROR_INSUFFICIENT_BUFFER == GetLastError()), - "expected error ERROR_INVALID_ADDRESS or ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,NULL,sizeof(SERVICE_DESCRIPTIONA),NULL); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok(ERROR_INVALID_ADDRESS == GetLastError(), "expected error ERROR_INVALID_ADDRESS, got %d\n", GetLastError()); - - needed = 0; - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer,sizeof(SERVICE_DESCRIPTIONA)-1,&needed); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok(ERROR_INSUFFICIENT_BUFFER == GetLastError(), "expected error ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(needed == sizeof(SERVICE_DESCRIPTIONA), "got %d\n", needed); - - needed = 0; - pConfig->lpDescription = (LPSTR)0xdeadbeef; - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer,sizeof(SERVICE_DESCRIPTIONA),&needed); - ok(ret, "expected QueryServiceConfig2A to succeed\n"); - ok(needed == sizeof(SERVICE_DESCRIPTIONA), "got %d\n", needed); - ok(!pConfig->lpDescription, "expected lpDescription to be NULL, got %p\n", pConfig->lpDescription); - - SetLastError(0xdeadbeef); - needed = 0; - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,NULL,0,&needed); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok(ERROR_INSUFFICIENT_BUFFER == GetLastError(), "expected error ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(needed == sizeof(SERVICE_DESCRIPTIONA), "got %d\n", needed); - - if(!pChangeServiceConfig2A) - { - skip("function ChangeServiceConfig2A not present\n"); - goto cleanup; - } - - pConfig->lpDescription = (LPSTR) description; - ret = pChangeServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer); - ok(ret, "ChangeServiceConfig2A failed\n"); - if (!ret) { - goto cleanup; - } - - SetLastError(0xdeadbeef); - needed = 0; - expected = sizeof(SERVICE_DESCRIPTIONA) + sizeof(description) * sizeof(WCHAR); /* !! */ - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer,sizeof(SERVICE_DESCRIPTIONA),&needed); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok(ERROR_INSUFFICIENT_BUFFER == GetLastError(), "expected error ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(needed == expected, "expected needed to be %d, got %d\n", expected, needed); - - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer,needed-1,&needed); - ok(!ret, "expected QueryServiceConfig2A to fail\n"); - ok(ERROR_INSUFFICIENT_BUFFER == GetLastError(), "expected error ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer,needed,&needed); - ok(ret, "expected QueryServiceConfig2A to succeed\n"); - ok(pConfig->lpDescription && !strcmp(description,pConfig->lpDescription), - "expected lpDescription to be %s, got %s\n",description ,pConfig->lpDescription); - - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2A(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer, needed + 1,&needed); - ok(ret, "expected QueryServiceConfig2A to succeed\n"); - ok(pConfig->lpDescription && !strcmp(description,pConfig->lpDescription), - "expected lpDescription to be %s, got %s\n",description ,pConfig->lpDescription); - - if(!pQueryServiceConfig2W) - { - skip("function QueryServiceConfig2W not present\n"); - goto cleanup; - } - SetLastError(0xdeadbeef); - needed = 0; - expected = sizeof(SERVICE_DESCRIPTIONW) + sizeof(WCHAR) * sizeof(description); - ret = pQueryServiceConfig2W(svc_handle, SERVICE_CONFIG_DESCRIPTION,NULL,0,&needed); - ok(!ret, "expected QueryServiceConfig2W to fail\n"); - ok(ERROR_INSUFFICIENT_BUFFER == GetLastError(), "expected error ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(needed == expected, "expected needed to be %d, got %d\n", expected, needed); - - SetLastError(0xdeadbeef); - ret = pQueryServiceConfig2W(svc_handle, SERVICE_CONFIG_DESCRIPTION,buffer, needed,&needed); - ok(ret, "expected QueryServiceConfig2W to succeed\n"); - -cleanup: - DeleteService(svc_handle); - - CloseServiceHandle(svc_handle); - - /* Wait a while. The following test does a CreateService again */ - Sleep(1000); - - CloseServiceHandle(scm_handle); -} - -static void test_refcount(void) -{ - SC_HANDLE scm_handle, svc_handle1, svc_handle2, svc_handle3, svc_handle4, svc_handle5; - static const CHAR servicename [] = "Winetest"; - static const CHAR pathname [] = "we_dont_care.exe"; - BOOL ret; - - /* Get a handle to the Service Control Manager */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - if (!scm_handle && (GetLastError() == ERROR_ACCESS_DENIED)) - { - skip("Not enough rights to get a handle to the manager\n"); - return; - } - - /* Create a service */ - svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, - SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(svc_handle1 != NULL, "Expected success\n"); - - /* Get a handle to this new service */ - svc_handle2 = OpenServiceA(scm_handle, servicename, GENERIC_READ); - ok(svc_handle2 != NULL, "Expected success\n"); - - /* Get another handle to this new service */ - svc_handle3 = OpenServiceA(scm_handle, servicename, GENERIC_READ); - ok(svc_handle3 != NULL, "Expected success\n"); - - /* Check if we can close the handle to the Service Control Manager */ - ret = CloseServiceHandle(scm_handle); - ok(ret, "Expected success\n"); - - /* Get a new handle to the Service Control Manager */ - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - ok(scm_handle != NULL, "Expected success\n"); - - /* Get a handle to this new service */ - svc_handle4 = OpenServiceA(scm_handle, servicename, GENERIC_ALL); - ok(svc_handle4 != NULL, "Expected success\n"); - - /* Delete the service */ - ret = DeleteService(svc_handle4); - ok(ret, "Expected success\n"); - - /* We cannot create the same service again as it's still marked as 'being deleted'. - * The reason is that we still have 4 open handles to this service even though we - * closed the handle to the Service Control Manager in between. - */ - SetLastError(0xdeadbeef); - svc_handle5 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, - SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - todo_wine - { - ok(!svc_handle5, "Expected failure\n"); - ok(GetLastError() == ERROR_SERVICE_MARKED_FOR_DELETE, - "Expected ERROR_SERVICE_MARKED_FOR_DELETE, got %d\n", GetLastError()); - } - - /* FIXME: Remove this when Wine is fixed */ - if (svc_handle5) - { - DeleteService(svc_handle5); - CloseServiceHandle(svc_handle5); - } - - /* Close all the handles to the service and try again */ - ret = CloseServiceHandle(svc_handle4); - ok(ret, "Expected success\n"); - ret = CloseServiceHandle(svc_handle3); - ok(ret, "Expected success\n"); - ret = CloseServiceHandle(svc_handle2); - ok(ret, "Expected success\n"); - ret = CloseServiceHandle(svc_handle1); - ok(ret, "Expected success\n"); - - /* Wait a while. Doing a CreateService too soon will result again - * in an ERROR_SERVICE_MARKED_FOR_DELETE error. - */ - Sleep(1000); - - /* We succeed now as all handles are closed (tested this also with a long SLeep() */ - svc_handle5 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, - SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); - ok(svc_handle5 != NULL, "Expected success\n"); - - /* Delete the service */ - ret = DeleteService(svc_handle5); - ok(ret, "Expected success\n"); - - /* Wait a while. Just in case one of the following tests does a CreateService again */ - Sleep(1000); - - CloseServiceHandle(svc_handle5); - CloseServiceHandle(scm_handle); -} - -START_TEST(service) -{ - SC_HANDLE scm_handle; - - /* Bail out if we are on win98 */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - - if (!scm_handle && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("OpenSCManagerA is not implemented, we are most likely on win9x\n"); - return; - } - CloseServiceHandle(scm_handle); - - init_function_pointers(); - - /* First some parameter checking */ - test_open_scm(); - test_open_svc(); - test_create_delete_svc(); - test_get_displayname(); - test_get_servicekeyname(); - test_query_svc(); - test_enum_svc(); - test_close(); - /* Test the creation, querying and deletion of a service */ - test_sequence(); - test_queryconfig2(); - /* The main reason for this test is to check if any refcounting is used - * and what the rules are - */ - test_refcount(); -} diff --git a/rostests/winetests/advapi32/testlist.c b/rostests/winetests/advapi32/testlist.c deleted file mode 100644 index c7fbee87c66..00000000000 --- a/rostests/winetests/advapi32/testlist.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_cred(void); -extern void func_crypt(void); -extern void func_crypt_lmhash(void); -extern void func_crypt_md4(void); -extern void func_crypt_md5(void); -extern void func_crypt_sha(void); -extern void func_lsa(void); -extern void func_registry(void); -extern void func_security(void); -extern void func_service(void); - -const struct test winetest_testlist[] = -{ - { "cred", func_cred }, - { "crypt", func_crypt }, - { "crypt_lmhash", func_crypt_lmhash }, - { "crypt_md4", func_crypt_md4 }, - { "crypt_md5", func_crypt_md5 }, - { "crypt_sha", func_crypt_sha }, - { "lsa", func_lsa }, - { "registry", func_registry }, - { "security", func_security }, - { "service", func_service }, - { 0, 0 } -}; diff --git a/rostests/winetests/advpack/advpack.c b/rostests/winetests/advpack/advpack.c deleted file mode 100644 index eeb35c6264c..00000000000 --- a/rostests/winetests/advpack/advpack.c +++ /dev/null @@ -1,662 +0,0 @@ -/* - * Unit tests for advpack.dll - * - * Copyright (C) 2005 Robert Reif - * Copyright (C) 2005 Sami Aario - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" - -/* defines for the TranslateInfString/Ex tests */ -#define TEST_STRING1 "\\Application Name" -#define TEST_STRING2 "%49001%\\Application Name" - -/* defines for the SetPerUserSecValues tests */ -#define GUID_KEY "SOFTWARE\\Microsoft\\Active Setup\\Installed Components\\guid" -#define REG_VAL_EXISTS(key, value) !RegQueryValueEx(key, value, NULL, NULL, NULL, NULL) -#define OPEN_GUID_KEY() !RegOpenKey(HKEY_LOCAL_MACHINE, GUID_KEY, &guid) - -static HMODULE hAdvPack; -static HRESULT (WINAPI *pCloseINFEngine)(HINF); -static HRESULT (WINAPI *pDelNode)(LPCSTR,DWORD); -static HRESULT (WINAPI *pGetVersionFromFile)(LPCSTR,LPDWORD,LPDWORD,BOOL); -static HRESULT (WINAPI *pOpenINFEngine)(PCSTR,PCSTR,DWORD,HINF*,PVOID); -static HRESULT (WINAPI *pSetPerUserSecValues)(PPERUSERSECTION pPerUser); -static HRESULT (WINAPI *pTranslateInfString)(LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,DWORD,LPDWORD,LPVOID); -static HRESULT (WINAPI *pTranslateInfStringEx)(HINF,PCSTR,PCSTR,PCSTR,PSTR,DWORD,PDWORD,PVOID); - -static CHAR inf_file[MAX_PATH]; -static CHAR PROG_FILES_ROOT[MAX_PATH]; -static CHAR PROG_FILES[MAX_PATH]; -static CHAR APP_PATH[MAX_PATH]; -static DWORD APP_PATH_LEN; - -static void get_progfiles_dir(void) -{ - HKEY hkey; - DWORD size = MAX_PATH; - - RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion", &hkey); - RegQueryValueExA(hkey, "ProgramFilesDir", NULL, NULL, (LPBYTE)PROG_FILES_ROOT, &size); - RegCloseKey(hkey); - - lstrcpyA(PROG_FILES, PROG_FILES_ROOT + 3); /* skip C:\ */ - lstrcpyA(APP_PATH, PROG_FILES_ROOT); - lstrcatA(APP_PATH, TEST_STRING1); - APP_PATH_LEN = lstrlenA(APP_PATH) + 1; -} - -static BOOL init_function_pointers(void) -{ - hAdvPack = LoadLibraryA("advpack.dll"); - - if (!hAdvPack) - return FALSE; - - pCloseINFEngine = (void*)GetProcAddress(hAdvPack, "CloseINFEngine"); - pDelNode = (void *)GetProcAddress(hAdvPack, "DelNode"); - pGetVersionFromFile = (void *)GetProcAddress(hAdvPack, "GetVersionFromFile"); - pOpenINFEngine = (void*)GetProcAddress(hAdvPack, "OpenINFEngine"); - pSetPerUserSecValues = (void*)GetProcAddress(hAdvPack, "SetPerUserSecValues"); - pTranslateInfString = (void *)GetProcAddress(hAdvPack, "TranslateInfString"); - pTranslateInfStringEx = (void*)GetProcAddress(hAdvPack, "TranslateInfStringEx"); - - if (!pCloseINFEngine || !pDelNode || !pGetVersionFromFile || - !pOpenINFEngine || !pSetPerUserSecValues || !pTranslateInfString) - { - skip("Needed functions are not available\n"); - FreeLibrary(hAdvPack); - return FALSE; - } - - return TRUE; -} - -static void version_test(void) -{ - HRESULT hr; - DWORD major, minor; - - major = minor = 0; - hr = pGetVersionFromFile("kernel32.dll", &major, &minor, FALSE); - ok (hr == S_OK, "GetVersionFromFileEx(kernel32.dll) failed, returned " - "0x%08x\n", hr); - trace("kernel32.dll Language ID: 0x%08x, Codepage ID: 0x%08x\n", - major, minor); - - major = minor = 0; - hr = pGetVersionFromFile("kernel32.dll", &major, &minor, TRUE); - ok (hr == S_OK, "GetVersionFromFileEx(kernel32.dll) failed, returned " - "0x%08x\n", hr); - trace("kernel32.dll version: %d.%d.%d.%d\n", HIWORD(major), LOWORD(major), - HIWORD(minor), LOWORD(minor)); - - major = minor = 0; - hr = pGetVersionFromFile("advpack.dll", &major, &minor, FALSE); - ok (hr == S_OK, "GetVersionFromFileEx(advpack.dll) failed, returned " - "0x%08x\n", hr); - trace("advpack.dll Language ID: 0x%08x, Codepage ID: 0x%08x\n", - major, minor); - - major = minor = 0; - hr = pGetVersionFromFile("advpack.dll", &major, &minor, TRUE); - ok (hr == S_OK, "GetVersionFromFileEx(advpack.dll) failed, returned " - "0x%08x\n", hr); - trace("advpack.dll version: %d.%d.%d.%d\n", HIWORD(major), LOWORD(major), - HIWORD(minor), LOWORD(minor)); -} - -static void delnode_test(void) -{ - HRESULT hr; - HANDLE hn; - CHAR currDir[MAX_PATH]; - int currDirLen; - - /* Native DelNode apparently does not support relative paths, so we use - absolute paths for testing */ - currDirLen = GetCurrentDirectoryA(sizeof(currDir) / sizeof(CHAR), currDir); - assert(currDirLen > 0 && currDirLen < sizeof(currDir) / sizeof(CHAR)); - - if(currDir[currDirLen - 1] == '\\') - currDir[--currDirLen] = 0; - - /* Simple tests; these should fail. */ - hr = pDelNode(NULL, 0); - ok (hr == E_FAIL, "DelNode called with NULL pathname should return E_FAIL\n"); - hr = pDelNode("", 0); - ok (hr == E_FAIL, "DelNode called with empty pathname should return E_FAIL\n"); - - /* Test deletion of a file. */ - hn = CreateFile("DelNodeTestFile1", GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - assert(hn != INVALID_HANDLE_VALUE); - CloseHandle(hn); - hr = pDelNode(lstrcat(currDir, "\\DelNodeTestFile1"), 0); - ok (hr == S_OK, "DelNode failed deleting a single file\n"); - currDir[currDirLen] = '\0'; - - /* Test deletion of an empty directory. */ - CreateDirectoryA("DelNodeTestDir", NULL); - hr = pDelNode(lstrcat(currDir, "\\DelNodeTestDir"), 0); - ok (hr == S_OK, "DelNode failed deleting an empty directory\n"); - currDir[currDirLen] = '\0'; - - /* Test deletion of a directory containing one file. */ - CreateDirectoryA("DelNodeTestDir", NULL); - hn = CreateFile("DelNodeTestDir\\DelNodeTestFile1", GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - assert(hn != INVALID_HANDLE_VALUE); - CloseHandle(hn); - hr = pDelNode(lstrcat(currDir, "\\DelNodeTestDir"), 0); - ok (hr == S_OK, "DelNode failed deleting a directory containing one file\n"); - currDir[currDirLen] = '\0'; - - /* Test deletion of a directory containing multiple files. */ - CreateDirectoryA("DelNodeTestDir", NULL); - hn = CreateFile("DelNodeTestDir\\DelNodeTestFile1", GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - assert(hn != INVALID_HANDLE_VALUE); - CloseHandle(hn); - hn = CreateFile("DelNodeTestDir\\DelNodeTestFile2", GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - assert(hn != INVALID_HANDLE_VALUE); - CloseHandle(hn); - hn = CreateFile("DelNodeTestDir\\DelNodeTestFile3", GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - assert(hn != INVALID_HANDLE_VALUE); - CloseHandle(hn); - hr = pDelNode(lstrcat(currDir, "\\DelNodeTestDir"), 0); - ok (hr == S_OK, "DelNode failed deleting a directory containing multiple files\n"); - currDir[currDirLen] = '\0'; -} - -static void append_str(char **str, const char *data, ...) -{ - va_list valist; - - va_start(valist, data); - vsprintf(*str, data, valist); - *str += strlen(*str); - va_end(valist); -} - -static void create_inf_file(void) -{ - char data[1024]; - char *ptr = data; - DWORD dwNumberOfBytesWritten; - HANDLE hf = CreateFile(inf_file, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - append_str(&ptr, "[Version]\n"); - append_str(&ptr, "Signature=\"$Chicago$\"\n"); - append_str(&ptr, "[CustInstDestSection]\n"); - append_str(&ptr, "49001=ProgramFilesDir\n"); - append_str(&ptr, "49010=DestA,1\n"); - append_str(&ptr, "49020=DestB\n"); - append_str(&ptr, "49030=DestC\n"); - append_str(&ptr, "[ProgramFilesDir]\n"); - append_str(&ptr, "HKLM,\"Software\\Microsoft\\Windows\\CurrentVersion\","); - append_str(&ptr, "\"ProgramFilesDir\",,\"%%24%%\\%%LProgramF%%\"\n"); - append_str(&ptr, "[section]\n"); - append_str(&ptr, "NotACustomDestination=Version\n"); - append_str(&ptr, "CustomDestination=CustInstDestSection\n"); - append_str(&ptr, "[Options.NTx86]\n"); - append_str(&ptr, "49001=ProgramFilesDir\n"); - append_str(&ptr, "InstallDir=%%49001%%\\%%DefaultAppPath%%\n"); - append_str(&ptr, "Result1=%%49010%%\n"); - append_str(&ptr, "Result2=%%49020%%\n"); - append_str(&ptr, "Result3=%%49030%%\n"); - append_str(&ptr, "CustomHDestination=CustInstDestSection\n"); - append_str(&ptr, "[Strings]\n"); - append_str(&ptr, "DefaultAppPath=\"Application Name\"\n"); - append_str(&ptr, "LProgramF=\"%s\"\n", PROG_FILES); - append_str(&ptr, "[DestA]\n"); - append_str(&ptr, "HKLM,\"Software\\Garbage\",\"ProgramFilesDir\",,'%%24%%\\%%LProgramF%%'\n"); - append_str(&ptr, "[DestB]\n"); - append_str(&ptr, "'HKLM','Software\\Microsoft\\Windows\\CurrentVersion',"); - append_str(&ptr, "'ProgramFilesDir',,\"%%24%%\"\n"); - append_str(&ptr, "[DestC]\n"); - append_str(&ptr, "HKLM,\"Software\\Garbage\",\"ProgramFilesDir\",,'%%24%%'\n"); - - WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL); - CloseHandle(hf); -} - -static void translateinfstring_test(void) -{ - HRESULT hr; - char buffer[MAX_PATH]; - DWORD dwSize; - - create_inf_file(); - - /* pass in a couple invalid parameters */ - hr = pTranslateInfString(NULL, NULL, NULL, NULL, buffer, MAX_PATH, &dwSize, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got 0x%08x\n", (UINT)hr); - - /* try to open an inf file that doesn't exist */ - hr = pTranslateInfString("c:\\a.inf", "Options.NTx86", "Options.NTx86", - "InstallDir", buffer, MAX_PATH, &dwSize, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || hr == E_INVALIDARG || - hr == HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND), - "Expected E_INVALIDARG, 0x80070002 or 0x8007007e, got 0x%08x\n", (UINT)hr); - - if(hr == HRESULT_FROM_WIN32(ERROR_MOD_NOT_FOUND)) - { - trace("WinNT 3.51 detected. Skipping tests for TranslateInfString()\n"); - return; - } - - /* try a nonexistent section */ - buffer[0] = 0; - hr = pTranslateInfString(inf_file, "idontexist", "Options.NTx86", - "InstallDir", buffer, MAX_PATH, &dwSize, NULL); - ok(hr == S_OK, "Expected S_OK, got 0x%08x\n", (UINT)hr); - ok(!strcmp(buffer, TEST_STRING2), "Expected %s, got %s\n", TEST_STRING2, buffer); - ok(dwSize == 25, "Expected size 25, got %d\n", dwSize); - - buffer[0] = 0; - /* try other nonexistent section */ - hr = pTranslateInfString(inf_file, "Options.NTx86", "idontexist", - "InstallDir", buffer, MAX_PATH, &dwSize, NULL); - ok(hr == SPAPI_E_LINE_NOT_FOUND || hr == E_INVALIDARG, - "Expected SPAPI_E_LINE_NOT_FOUND or E_INVALIDARG, got 0x%08x\n", (UINT)hr); - - buffer[0] = 0; - /* try nonexistent key */ - hr = pTranslateInfString(inf_file, "Options.NTx86", "Options.NTx86", - "notvalid", buffer, MAX_PATH, &dwSize, NULL); - ok(hr == SPAPI_E_LINE_NOT_FOUND || hr == E_INVALIDARG, - "Expected SPAPI_E_LINE_NOT_FOUND or E_INVALIDARG, got 0x%08x\n", (UINT)hr); - - buffer[0] = 0; - /* test the behavior of pszInstallSection */ - hr = pTranslateInfString(inf_file, "section", "Options.NTx86", - "InstallDir", buffer, MAX_PATH, &dwSize, NULL); - ok(hr == ERROR_SUCCESS || hr == E_FAIL, - "Expected ERROR_SUCCESS or E_FAIL, got 0x%08x\n", (UINT)hr); - - if(hr == ERROR_SUCCESS) - { - ok(!strcmp(buffer, APP_PATH), "Expected '%s', got '%s'\n", APP_PATH, buffer); - ok(dwSize == APP_PATH_LEN, "Expected size %d, got %d\n", APP_PATH_LEN, dwSize); - } - - buffer[0] = 0; - /* try without a pszInstallSection */ - hr = pTranslateInfString(inf_file, NULL, "Options.NTx86", - "InstallDir", buffer, MAX_PATH, &dwSize, NULL); - ok(hr == S_OK, "Expected S_OK, got 0x%08x\n", (UINT)hr); - todo_wine - { - ok(!strcmp(buffer, TEST_STRING2), "Expected %s, got %s\n", TEST_STRING2, buffer); - ok(dwSize == 25, "Expected size 25, got %d\n", dwSize); - } - - DeleteFile("c:\\a.inf"); - DeleteFile(inf_file); -} - -static void translateinfstringex_test(void) -{ - HINF hinf; - HRESULT hr; - char buffer[MAX_PATH]; - DWORD size = MAX_PATH; - - create_inf_file(); - - /* need to see if there are any flags */ - - /* try a NULL filename */ - hr = pOpenINFEngine(NULL, "Options.NTx86", 0, &hinf, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr); - - /* try an empty filename */ - hr = pOpenINFEngine("", "Options.NTx86", 0, &hinf, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) /* NT+ */ || - hr == HRESULT_FROM_WIN32(E_UNEXPECTED) /* 9x */, - "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND or E_UNEXPECTED), got %08x\n", hr); - - /* try a NULL hinf */ - hr = pOpenINFEngine(inf_file, "Options.NTx86", 0, NULL, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr); - - /* open the INF without the Install section specified */ - hr = pOpenINFEngine(inf_file, NULL, 0, &hinf, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - /* try a NULL hinf */ - hr = pTranslateInfStringEx(NULL, inf_file, "Options.NTx86", "InstallDir", - buffer, size, &size, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr); - - /* try a NULL filename */ - hr = pTranslateInfStringEx(hinf, NULL, "Options.NTx86", "InstallDir", - buffer, size, &size, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr); - - /* try an empty filename */ - memset(buffer, 'a', 25); - buffer[24] = '\0'; - size = MAX_PATH; - hr = pTranslateInfStringEx(hinf, "", "Options.NTx86", "InstallDir", - buffer, size, &size, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - todo_wine - { - ok(!strcmp(buffer, TEST_STRING2), "Expected %s, got %s\n", TEST_STRING2, buffer); - ok(size == 25, "Expected size 25, got %d\n", size); - } - - /* try a NULL translate section */ - hr = pTranslateInfStringEx(hinf, inf_file, NULL, "InstallDir", - buffer, size, &size, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr); - - /* try an empty translate section */ - hr = pTranslateInfStringEx(hinf, inf_file, "", "InstallDir", - buffer, size, &size, NULL); - ok(hr == SPAPI_E_LINE_NOT_FOUND, "Expected SPAPI_E_LINE_NOT_FOUND, got %08x\n", hr); - - /* try a NULL translate key */ - hr = pTranslateInfStringEx(hinf, inf_file, "Options.NTx86", NULL, - buffer, size, &size, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr); - - /* try an empty translate key */ - hr = pTranslateInfStringEx(hinf, inf_file, "Options.NTx86", "", - buffer, size, &size, NULL); - ok(hr == SPAPI_E_LINE_NOT_FOUND, "Expected SPAPI_E_LINE_NOT_FOUND, got %08x\n", hr); - - /* successfully translate the string */ - memset(buffer, 'a', 25); - buffer[24] = '\0'; - size = MAX_PATH; - hr = pTranslateInfStringEx(hinf, inf_file, "Options.NTx86", "InstallDir", - buffer, size, &size, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - todo_wine - { - ok(!strcmp(buffer, TEST_STRING2), "Expected %s, got %s\n", TEST_STRING2, buffer); - ok(size == 25, "Expected size 25, got %d\n", size); - } - - /* try a NULL hinf */ - hr = pCloseINFEngine(NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr); - - /* successfully close the hinf */ - hr = pCloseINFEngine(hinf); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - /* open the inf with the install section */ - hr = pOpenINFEngine(inf_file, "section", 0, &hinf, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - /* translate the string with the install section specified */ - memset(buffer, 'a', APP_PATH_LEN); - buffer[APP_PATH_LEN - 1] = '\0'; - size = MAX_PATH; - hr = pTranslateInfStringEx(hinf, inf_file, "Options.NTx86", "InstallDir", - buffer, size, &size, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok(!strcmp(buffer, APP_PATH), "Expected %s, got %s\n", APP_PATH, buffer); - ok(size == APP_PATH_LEN, "Expected size %d, got %d\n", APP_PATH_LEN, size); - - /* Single quote test (Note size includes null on return from call) */ - memset(buffer, 'a', APP_PATH_LEN); - buffer[APP_PATH_LEN - 1] = '\0'; - size = MAX_PATH; - hr = pTranslateInfStringEx(hinf, inf_file, "Options.NTx86", "Result1", - buffer, size, &size, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok(!lstrcmpi(buffer, PROG_FILES_ROOT), - "Expected %s, got %s\n", PROG_FILES_ROOT, buffer); - ok(size == lstrlenA(PROG_FILES_ROOT)+1, "Expected size %d, got %d\n", - lstrlenA(PROG_FILES_ROOT)+1, size); - - memset(buffer, 'a', APP_PATH_LEN); - buffer[APP_PATH_LEN - 1] = '\0'; - size = MAX_PATH; - hr = pTranslateInfStringEx(hinf, inf_file, "Options.NTx86", "Result2", - buffer, size, &size, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok(!lstrcmpi(buffer, PROG_FILES_ROOT), - "Expected %s, got %s\n", PROG_FILES_ROOT, buffer); - ok(size == lstrlenA(PROG_FILES_ROOT)+1, "Expected size %d, got %d\n", - lstrlenA(PROG_FILES_ROOT)+1, size); - - { - char drive[MAX_PATH]; - lstrcpy(drive, PROG_FILES_ROOT); - drive[3] = 0x00; /* Just keep the system drive plus '\' */ - - memset(buffer, 'a', APP_PATH_LEN); - buffer[APP_PATH_LEN - 1] = '\0'; - size = MAX_PATH; - hr = pTranslateInfStringEx(hinf, inf_file, "Options.NTx86", "Result3", - buffer, size, &size, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok(!lstrcmpi(buffer, drive), - "Expected %s, got %s\n", drive, buffer); - ok(size == lstrlenA(drive)+1, "Expected size %d, got %d\n", - lstrlenA(drive)+1, size); - } - - /* close the INF again */ - hr = pCloseINFEngine(hinf); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - DeleteFileA(inf_file); - - /* Create another .inf file which is just here to trigger a wine bug */ - { - char data[1024]; - char *ptr = data; - DWORD dwNumberOfBytesWritten; - HANDLE hf = CreateFile(inf_file, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - append_str(&ptr, "[Version]\n"); - append_str(&ptr, "Signature=\"$Chicago$\"\n"); - append_str(&ptr, "[section]\n"); - append_str(&ptr, "NotACustomDestination=Version\n"); - append_str(&ptr, "CustomDestination=CustInstDestSection\n"); - append_str(&ptr, "[CustInstDestSection]\n"); - append_str(&ptr, "49010=DestA,1\n"); - append_str(&ptr, "49020=DestB\n"); - append_str(&ptr, "49030=DestC\n"); - append_str(&ptr, "49040=DestD\n"); - append_str(&ptr, "[Options.NTx86]\n"); - append_str(&ptr, "Result2=%%49030%%\n"); - append_str(&ptr, "[DestA]\n"); - append_str(&ptr, "HKLM,\"Software\\Garbage\",\"ProgramFilesDir\",,'%%24%%'\n"); - /* The point of this test is to have HKCU just before the quoted HKLM */ - append_str(&ptr, "[DestB]\n"); - append_str(&ptr, "HKCU,\"Software\\Garbage\",\"ProgramFilesDir\",,'%%24%%'\n"); - append_str(&ptr, "[DestC]\n"); - append_str(&ptr, "'HKLM','Software\\Microsoft\\Windows\\CurrentVersion',"); - append_str(&ptr, "'ProgramFilesDir',,\"%%24%%\"\n"); - append_str(&ptr, "[DestD]\n"); - append_str(&ptr, "HKLM,\"Software\\Garbage\",\"ProgramFilesDir\",,'%%24%%'\n"); - - WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL); - CloseHandle(hf); - } - - /* open the inf with the install section */ - hr = pOpenINFEngine(inf_file, "section", 0, &hinf, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - /* Single quote test (Note size includes null on return from call) */ - memset(buffer, 'a', APP_PATH_LEN); - buffer[APP_PATH_LEN - 1] = '\0'; - size = MAX_PATH; - hr = pTranslateInfStringEx(hinf, inf_file, "Options.NTx86", "Result2", - buffer, size, &size, NULL); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok(!lstrcmpi(buffer, PROG_FILES_ROOT), - "Expected %s, got %s\n", PROG_FILES_ROOT, buffer); - ok(size == lstrlenA(PROG_FILES_ROOT)+1, "Expected size %d, got %d\n", - lstrlenA(PROG_FILES_ROOT)+1, size); - - /* close the INF again */ - hr = pCloseINFEngine(hinf); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - DeleteFileA(inf_file); -} - -static BOOL check_reg_str(HKEY hkey, LPCSTR name, LPCSTR value) -{ - DWORD size = MAX_PATH; - char check[MAX_PATH]; - - if (RegQueryValueEx(hkey, name, NULL, NULL, (LPBYTE)check, &size)) - return FALSE; - - return !lstrcmp(check, value); -} - -static BOOL check_reg_dword(HKEY hkey, LPCSTR name, DWORD value) -{ - DWORD size = sizeof(DWORD); - DWORD check; - - if (RegQueryValueEx(hkey, name, NULL, NULL, (LPBYTE)&check, &size)) - return FALSE; - - return (check == value); -} - -static void setperusersecvalues_test(void) -{ - PERUSERSECTION peruser; - HRESULT hr; - HKEY guid; - - lstrcpy(peruser.szDispName, "displayname"); - lstrcpy(peruser.szLocale, "locale"); - lstrcpy(peruser.szStub, "stub"); - lstrcpy(peruser.szVersion, "1,1,1,1"); - lstrcpy(peruser.szCompID, "compid"); - peruser.dwIsInstalled = 1; - peruser.bRollback = FALSE; - - /* try a NULL pPerUser */ - if (0) - { - /* This crashes on systems with IE7 */ - hr = pSetPerUserSecValues(NULL); - todo_wine - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - ok(!OPEN_GUID_KEY(), "Expected guid key to not exist\n"); - } - - /* at the very least, szGUID must be valid */ - peruser.szGUID[0] = '\0'; - hr = pSetPerUserSecValues(&peruser); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - ok(!OPEN_GUID_KEY(), "Expected guid key to not exist\n"); - - /* set initial values */ - lstrcpy(peruser.szGUID, "guid"); - hr = pSetPerUserSecValues(&peruser); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok(OPEN_GUID_KEY(), "Expected guid key to exist\n"); - ok(check_reg_str(guid, NULL, "displayname"), "Expected displayname\n"); - ok(check_reg_str(guid, "ComponentID", "compid"), "Expected compid\n"); - ok(check_reg_str(guid, "Locale", "locale"), "Expected locale\n"); - ok(check_reg_str(guid, "StubPath", "stub"), "Expected stub\n"); - ok(check_reg_str(guid, "Version", "1,1,1,1"), "Expected 1,1,1,1\n"); - ok(check_reg_dword(guid, "IsInstalled", 1), "Expected 1\n"); - ok(!REG_VAL_EXISTS(guid, "OldDisplayName"), "Expected OldDisplayName to not exist\n"); - ok(!REG_VAL_EXISTS(guid, "OldLocale"), "Expected OldLocale to not exist\n"); - ok(!REG_VAL_EXISTS(guid, "OldStubPath"), "Expected OldStubPath to not exist\n"); - ok(!REG_VAL_EXISTS(guid, "OldVersion"), "Expected OldVersion to not exist\n"); - ok(!REG_VAL_EXISTS(guid, "RealStubPath"), "Expected RealStubPath to not exist\n"); - - /* raise the version, but bRollback is FALSE, so vals not saved */ - lstrcpy(peruser.szVersion, "2,1,1,1"); - hr = pSetPerUserSecValues(&peruser); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok(check_reg_str(guid, NULL, "displayname"), "Expected displayname\n"); - ok(check_reg_str(guid, "ComponentID", "compid"), "Expected compid\n"); - ok(check_reg_str(guid, "Locale", "locale"), "Expected locale\n"); - ok(check_reg_str(guid, "StubPath", "stub"), "Expected stub\n"); - ok(check_reg_str(guid, "Version", "2,1,1,1"), "Expected 2,1,1,1\n"); - ok(check_reg_dword(guid, "IsInstalled", 1), "Expected 1\n"); - ok(!REG_VAL_EXISTS(guid, "OldDisplayName"), "Expected OldDisplayName to not exist\n"); - ok(!REG_VAL_EXISTS(guid, "OldLocale"), "Expected OldLocale to not exist\n"); - ok(!REG_VAL_EXISTS(guid, "OldStubPath"), "Expected OldStubPath to not exist\n"); - ok(!REG_VAL_EXISTS(guid, "OldVersion"), "Expected OldVersion to not exist\n"); - ok(!REG_VAL_EXISTS(guid, "RealStubPath"), "Expected RealStubPath to not exist\n"); - - /* raise the version again, bRollback is TRUE so vals are saved */ - peruser.bRollback = TRUE; - lstrcpy(peruser.szVersion, "3,1,1,1"); - hr = pSetPerUserSecValues(&peruser); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok(check_reg_str(guid, NULL, "displayname"), "Expected displayname\n"); - ok(check_reg_str(guid, "ComponentID", "compid"), "Expected compid\n"); - ok(check_reg_str(guid, "Locale", "locale"), "Expected locale\n"); - ok(check_reg_dword(guid, "IsInstalled", 1), "Expected 1\n"); - ok(check_reg_str(guid, "Version", "3,1,1,1"), "Expected 3,1,1,1\n"); - todo_wine - { - ok(check_reg_str(guid, "OldDisplayName", "displayname"), "Expected displayname\n"); - ok(check_reg_str(guid, "OldLocale", "locale"), "Expected locale\n"); - ok(check_reg_str(guid, "RealStubPath", "stub"), "Expected stub\n"); - ok(check_reg_str(guid, "OldStubPath", "stub"), "Expected stub\n"); - ok(check_reg_str(guid, "OldVersion", "2,1,1,1"), "Expected 2,1,1,1\n"); - ok(check_reg_str(guid, "StubPath", - "rundll32.exe advpack.dll,UserInstStubWrapper guid"), - "Expected real stub\n"); - } - - RegDeleteKey(HKEY_LOCAL_MACHINE, GUID_KEY); -} - -START_TEST(advpack) -{ - if (!init_function_pointers()) - return; - - /* Make sure we create the temporary file in a directory - * were we have enough rights - */ - GetTempPath(MAX_PATH, inf_file); - lstrcat(inf_file,"test.inf"); - - get_progfiles_dir(); - - version_test(); - delnode_test(); - setperusersecvalues_test(); - translateinfstring_test(); - translateinfstringex_test(); - - FreeLibrary(hAdvPack); -} diff --git a/rostests/winetests/advpack/advpack.rbuild b/rostests/winetests/advpack/advpack.rbuild deleted file mode 100644 index 4ed7a983ba7..00000000000 --- a/rostests/winetests/advpack/advpack.rbuild +++ /dev/null @@ -1,16 +0,0 @@ - - - - - . - advpack.c - files.c - install.c - testlist.c - wine - cabinet - advapi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/advpack/files.c b/rostests/winetests/advpack/files.c deleted file mode 100644 index d018975dcaf..00000000000 --- a/rostests/winetests/advpack/files.c +++ /dev/null @@ -1,549 +0,0 @@ -/* - * Unit tests for advpack.dll file functions - * - * Copyright (C) 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 - */ - -#include -#include -#include -#include -#include "wine/test.h" - -/* make the max size large so there is only one cab file */ -#define MEDIA_SIZE 999999999 -#define FOLDER_THRESHOLD 900000 - -/* function pointers */ -HMODULE hAdvPack; -static HRESULT (WINAPI *pAddDelBackupEntry)(LPCSTR, LPCSTR, LPCSTR, DWORD); -static HRESULT (WINAPI *pExtractFiles)(LPCSTR, LPCSTR, DWORD, LPCSTR, LPVOID, DWORD); -static HRESULT (WINAPI *pAdvInstallFile)(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD); - -CHAR CURR_DIR[MAX_PATH]; - -static void init_function_pointers(void) -{ - hAdvPack = LoadLibraryA("advpack.dll"); - - if (hAdvPack) - { - pAddDelBackupEntry = (void *)GetProcAddress(hAdvPack, "AddDelBackupEntry"); - pExtractFiles = (void *)GetProcAddress(hAdvPack, "ExtractFiles"); - pAdvInstallFile = (void*)GetProcAddress(hAdvPack, "AdvInstallFile"); - } -} - -/* creates a file with the specified name for tests */ -static void createTestFile(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); -} - -static void create_test_files(void) -{ - createTestFile("a.txt"); - createTestFile("b.txt"); - CreateDirectoryA("testdir", NULL); - createTestFile("testdir\\c.txt"); - createTestFile("testdir\\d.txt"); - CreateDirectoryA("dest", NULL); -} - -static void delete_test_files(void) -{ - DeleteFileA("a.txt"); - DeleteFileA("b.txt"); - DeleteFileA("testdir\\c.txt"); - DeleteFileA("testdir\\d.txt"); - RemoveDirectoryA("testdir"); - RemoveDirectoryA("dest"); - - DeleteFileA("extract.cab"); -} - -static BOOL check_ini_file_attr(LPSTR filename) -{ - BOOL ret; - DWORD expected = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY; - DWORD attr = GetFileAttributesA(filename); - - ret = (attr & expected) && (attr != INVALID_FILE_ATTRIBUTES); - SetFileAttributesA(filename, FILE_ATTRIBUTE_NORMAL); - - return ret; -} - -static void test_AddDelBackupEntry(void) -{ - HRESULT res; - CHAR path[MAX_PATH]; - CHAR windir[MAX_PATH]; - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\backup\\basename.INI"); - - /* native AddDelBackupEntry crashes if lpcszBaseName is NULL */ - - /* try a NULL file list */ - res = pAddDelBackupEntry(NULL, "backup", "basename", AADBE_ADD_ENTRY); - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(!DeleteFileA(path), "Expected path to not exist\n"); - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\backup\\.INI"); - - /* try an empty base name */ - res = pAddDelBackupEntry("one\0two\0three\0", "backup", "", AADBE_ADD_ENTRY); - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(!DeleteFileA(path), "Expected path to not exist\n"); - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\basename.INI"); - - /* try an invalid flag */ - res = pAddDelBackupEntry("one\0two\0three\0", NULL, "basename", 0); - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(!DeleteFileA(path), "Expected path to not exist\n"); - - lstrcpyA(path, "c:\\basename.INI"); - - /* create the INF file */ - res = pAddDelBackupEntry("one\0two\0three\0", "c:\\", "basename", AADBE_ADD_ENTRY); - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(check_ini_file_attr(path), "Expected ini file to be hidden\n"); - ok(DeleteFileA(path), "Expected path to exist\n"); - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\backup\\basename.INI"); - - /* try to create the INI file in a nonexistent directory */ - RemoveDirectoryA("backup"); - res = pAddDelBackupEntry("one\0two\0three\0", "backup", "basename", AADBE_ADD_ENTRY); - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(!check_ini_file_attr(path), "Expected ini file to not be hidden\n"); - ok(!DeleteFileA(path), "Expected path to not exist\n"); - - /* try an existent, relative backup directory */ - CreateDirectoryA("backup", NULL); - res = pAddDelBackupEntry("one\0two\0three\0", "backup", "basename", AADBE_ADD_ENTRY); - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(check_ini_file_attr(path), "Expected ini file to be hidden\n"); - ok(DeleteFileA(path), "Expected path to exist\n"); - RemoveDirectoryA("backup"); - - GetWindowsDirectoryA(windir, sizeof(windir)); - sprintf(path, "%s\\basename.INI", windir); - - /* try a NULL backup dir, INI is created in the windows directory */ - res = pAddDelBackupEntry("one\0two\0three\0", NULL, "basename", AADBE_ADD_ENTRY); - ok(res == S_OK, "Expected S_OK, got %d\n", res); - - /* remove the entries with AADBE_DEL_ENTRY */ - SetFileAttributesA(path, FILE_ATTRIBUTE_NORMAL); - res = pAddDelBackupEntry("one\0three\0", NULL, "basename", AADBE_DEL_ENTRY); - SetFileAttributesA(path, FILE_ATTRIBUTE_NORMAL); - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(DeleteFileA(path), "Expected path to exist\n"); -} - -/* the FCI callbacks */ - -static void *mem_alloc(ULONG cb) -{ - return HeapAlloc(GetProcessHeap(), 0, cb); -} - -static void mem_free(void *memory) -{ - HeapFree(GetProcessHeap(), 0, memory); -} - -static BOOL get_next_cabinet(PCCAB pccab, ULONG cbPrevCab, void *pv) -{ - return TRUE; -} - -static long progress(UINT typeStatus, ULONG cb1, ULONG cb2, void *pv) -{ - return 0; -} - -static int file_placed(PCCAB pccab, char *pszFile, long cbFile, - BOOL fContinuation, void *pv) -{ - return 0; -} - -static INT_PTR fci_open(char *pszFile, int oflag, int pmode, int *err, void *pv) -{ - HANDLE handle; - DWORD dwAccess = 0; - DWORD dwShareMode = 0; - DWORD dwCreateDisposition = OPEN_EXISTING; - - dwAccess = GENERIC_READ | GENERIC_WRITE; - /* FILE_SHARE_DELETE is not supported by Windows Me/98/95 */ - dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; - - if (GetFileAttributesA(pszFile) != INVALID_FILE_ATTRIBUTES) - dwCreateDisposition = OPEN_EXISTING; - else - dwCreateDisposition = CREATE_NEW; - - handle = CreateFileA(pszFile, dwAccess, dwShareMode, NULL, - dwCreateDisposition, 0, NULL); - - ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszFile); - - return (INT_PTR)handle; -} - -static UINT fci_read(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD dwRead; - BOOL res; - - res = ReadFile(handle, memory, cb, &dwRead, NULL); - ok(res, "Failed to ReadFile\n"); - - return dwRead; -} - -static UINT fci_write(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD dwWritten; - BOOL res; - - res = WriteFile(handle, memory, cb, &dwWritten, NULL); - ok(res, "Failed to WriteFile\n"); - - return dwWritten; -} - -static int fci_close(INT_PTR hf, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - ok(CloseHandle(handle), "Failed to CloseHandle\n"); - - return 0; -} - -static long fci_seek(INT_PTR hf, long dist, int seektype, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD ret; - - ret = SetFilePointer(handle, dist, NULL, seektype); - ok(ret != INVALID_SET_FILE_POINTER, "Failed to SetFilePointer\n"); - - return ret; -} - -static int fci_delete(char *pszFile, int *err, void *pv) -{ - BOOL ret = DeleteFileA(pszFile); - ok(ret, "Failed to DeleteFile %s\n", pszFile); - - return 0; -} - -static BOOL get_temp_file(char *pszTempName, int cbTempName, void *pv) -{ - LPSTR tempname; - - tempname = HeapAlloc(GetProcessHeap(), 0, MAX_PATH); - GetTempFileNameA(".", "xx", 0, tempname); - - if (tempname && (strlen(tempname) < (unsigned)cbTempName)) - { - lstrcpyA(pszTempName, tempname); - HeapFree(GetProcessHeap(), 0, tempname); - return TRUE; - } - - HeapFree(GetProcessHeap(), 0, tempname); - - return FALSE; -} - -static INT_PTR get_open_info(char *pszName, USHORT *pdate, USHORT *ptime, - USHORT *pattribs, int *err, void *pv) -{ - BY_HANDLE_FILE_INFORMATION finfo; - FILETIME filetime; - HANDLE handle; - DWORD attrs; - BOOL res; - - handle = CreateFile(pszName, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); - - ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszName); - - res = GetFileInformationByHandle(handle, &finfo); - ok(res, "Expected GetFileInformationByHandle to succeed\n"); - - FileTimeToLocalFileTime(&finfo.ftLastWriteTime, &filetime); - FileTimeToDosDateTime(&filetime, pdate, ptime); - - attrs = GetFileAttributes(pszName); - ok(attrs != INVALID_FILE_ATTRIBUTES, "Failed to GetFileAttributes\n"); - - return (INT_PTR)handle; -} - -static void add_file(HFCI hfci, char *file) -{ - char path[MAX_PATH]; - BOOL res; - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, file); - - res = FCIAddFile(hfci, path, file, FALSE, get_next_cabinet, progress, - get_open_info, tcompTYPE_MSZIP); - ok(res, "Expected FCIAddFile to succeed\n"); -} - -static void set_cab_parameters(PCCAB pCabParams) -{ - ZeroMemory(pCabParams, sizeof(CCAB)); - - pCabParams->cb = MEDIA_SIZE; - pCabParams->cbFolderThresh = FOLDER_THRESHOLD; - pCabParams->setID = 0xbeef; - lstrcpyA(pCabParams->szCabPath, CURR_DIR); - lstrcatA(pCabParams->szCabPath, "\\"); - lstrcpyA(pCabParams->szCab, "extract.cab"); -} - -static void create_cab_file(void) -{ - CCAB cabParams; - HFCI hfci; - ERF erf; - static CHAR a_txt[] = "a.txt", - b_txt[] = "b.txt", - testdir_c_txt[] = "testdir\\c.txt", - testdir_d_txt[] = "testdir\\d.txt"; - BOOL res; - - set_cab_parameters(&cabParams); - - hfci = FCICreate(&erf, file_placed, mem_alloc, mem_free, fci_open, - fci_read, fci_write, fci_close, fci_seek, fci_delete, - get_temp_file, &cabParams, NULL); - - ok(hfci != NULL, "Failed to create an FCI context\n"); - - add_file(hfci, a_txt); - add_file(hfci, b_txt); - add_file(hfci, testdir_c_txt); - add_file(hfci, testdir_d_txt); - - res = FCIFlushCabinet(hfci, FALSE, get_next_cabinet, progress); - ok(res, "Failed to flush the cabinet\n"); - - res = FCIDestroy(hfci); - ok(res, "Failed to destroy the cabinet\n"); -} - -static void test_ExtractFiles(void) -{ - HRESULT hr; - char destFolder[MAX_PATH]; - - lstrcpyA(destFolder, CURR_DIR); - lstrcatA(destFolder, "\\"); - lstrcatA(destFolder, "dest"); - - /* try NULL cab file */ - hr = pExtractFiles(NULL, destFolder, 0, NULL, NULL, 0); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); - ok(RemoveDirectoryA("dest"), "Expected dest to exist\n"); - - /* try NULL destination */ - hr = pExtractFiles("extract.cab", NULL, 0, NULL, NULL, 0); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); - ok(!RemoveDirectoryA("dest"), "Expected dest to not exist\n"); - - /* extract all files in the cab to nonexistent destination directory */ - hr = pExtractFiles("extract.cab", destFolder, 0, NULL, NULL, 0); - ok(hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) || - hr == E_FAIL, /* win95 */ - "Expected %08x or %08x, got %08x\n", E_FAIL, - HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), hr); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(!RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to not exist\n"); - ok(!RemoveDirectoryA("dest"), "Expected dest to not exist\n"); - - /* extract all files in the cab to the destination directory */ - CreateDirectoryA("dest", NULL); - hr = pExtractFiles("extract.cab", destFolder, 0, NULL, NULL, 0); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to exist\n"); - ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); - - /* extract all files to a relative destination directory */ - hr = pExtractFiles("extract.cab", "dest", 0, NULL, NULL, 0); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to exist\n"); - ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); - - /* only extract two of the files from the cab */ - hr = pExtractFiles("extract.cab", "dest", 0, "a.txt:testdir\\c.txt", NULL, 0); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - - /* use valid chars before and after file list */ - hr = pExtractFiles("extract.cab", "dest", 0, " :\t: a.txt:testdir\\c.txt \t:", NULL, 0); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - - /* use invalid chars before and after file list */ - hr = pExtractFiles("extract.cab", "dest", 0, " +-\\ a.txt:testdir\\c.txt a_:", NULL, 0); - ok(hr == E_FAIL, "Expected E_FAIL, got %d\n", hr); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(!RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to not exist\n"); - - /* try an empty file list */ - hr = pExtractFiles("extract.cab", "dest", 0, "", NULL, 0); - ok(hr == E_FAIL, "Expected E_FAIL, got %d\n", hr); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - ok(!RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to not exist\n"); - - /* try a nonexistent file in the file list */ - hr = pExtractFiles("extract.cab", "dest", 0, "a.txt:idontexist:testdir\\c.txt", NULL, 0); - ok(hr == E_FAIL, "Expected E_FAIL, got %d\n", hr); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(!RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to not exist\n"); -} - -static void test_AdvInstallFile(void) -{ - HRESULT hr; - HMODULE hmod; - char CURR_DIR[MAX_PATH]; - char destFolder[MAX_PATH]; - - hmod = LoadLibrary("setupapi.dll"); - if (!hmod) - { - skip("setupapi.dll not present\n"); - return; - } - - FreeLibrary(hmod); - - GetCurrentDirectoryA(MAX_PATH, CURR_DIR); - - lstrcpyA(destFolder, CURR_DIR); - lstrcatA(destFolder, "\\"); - lstrcatA(destFolder, "dest"); - - createTestFile("source.txt"); - - /* try invalid source directory */ - hr = pAdvInstallFile(NULL, NULL, "source.txt", destFolder, "destination.txt", 0, 0); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); - ok(!DeleteFileA("dest\\destination.txt"), "Expected dest\\destination.txt to not exist\n"); - - /* try invalid source file */ - hr = pAdvInstallFile(NULL, CURR_DIR, NULL, destFolder, "destination.txt", 0, 0); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); - ok(!DeleteFileA("dest\\destination.txt"), "Expected dest\\destination.txt to not exist\n"); - - /* try invalid destination directory */ - hr = pAdvInstallFile(NULL, CURR_DIR, "source.txt", NULL, "destination.txt", 0, 0); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); - ok(!DeleteFileA("dest\\destination.txt"), "Expected dest\\destination.txt to not exist\n"); - - /* try copying to nonexistent destination directory */ - hr = pAdvInstallFile(NULL, CURR_DIR, "source.txt", destFolder, "destination.txt", 0, 0); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - ok(DeleteFileA("dest\\destination.txt"), "Expected dest\\destination.txt to exist\n"); - - /* native windows screws up if the source file doesn't exist */ - - /* test AIF_NOOVERWRITE behavior, asks the user to overwrite if AIF_QUIET is not specified */ - createTestFile("dest\\destination.txt"); - hr = pAdvInstallFile(NULL, CURR_DIR, "source.txt", destFolder, - "destination.txt", AIF_NOOVERWRITE | AIF_QUIET, 0); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - ok(DeleteFileA("dest\\destination.txt"), "Expected dest\\destination.txt to exist\n"); - ok(RemoveDirectoryA("dest"), "Expected dest to exist\n"); - - DeleteFileA("source.txt"); -} - -START_TEST(files) -{ - DWORD len; - char temp_path[MAX_PATH], prev_path[MAX_PATH]; - - init_function_pointers(); - - GetCurrentDirectoryA(MAX_PATH, prev_path); - GetTempPath(MAX_PATH, temp_path); - SetCurrentDirectoryA(temp_path); - - lstrcpyA(CURR_DIR, temp_path); - len = lstrlenA(CURR_DIR); - - if(len && (CURR_DIR[len - 1] == '\\')) - CURR_DIR[len - 1] = 0; - - create_test_files(); - create_cab_file(); - - test_AddDelBackupEntry(); - test_ExtractFiles(); - test_AdvInstallFile(); - - delete_test_files(); - - FreeLibrary(hAdvPack); - SetCurrentDirectoryA(prev_path); -} diff --git a/rostests/winetests/advpack/install.c b/rostests/winetests/advpack/install.c deleted file mode 100644 index 854ede6dae5..00000000000 --- a/rostests/winetests/advpack/install.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Unit tests for advpack.dll install functions - * - * Copyright (C) 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 - */ - -#include -#include -#include -#include "wine/test.h" - -static HMODULE hAdvPack; -/* function pointers */ -static HRESULT (WINAPI *pRunSetupCommand)(HWND, LPCSTR, LPCSTR, LPCSTR, LPCSTR, HANDLE*, DWORD, LPVOID); -static HRESULT (WINAPI *pLaunchINFSection)(HWND, HINSTANCE, LPSTR, INT); -static HRESULT (WINAPI *pLaunchINFSectionEx)(HWND, HINSTANCE, LPSTR, INT); - -static char CURR_DIR[MAX_PATH]; - -static BOOL init_function_pointers(void) -{ - hAdvPack = LoadLibraryA("advpack.dll"); - if (!hAdvPack) - return FALSE; - - pRunSetupCommand = (void *)GetProcAddress(hAdvPack, "RunSetupCommand"); - pLaunchINFSection = (void *)GetProcAddress(hAdvPack, "LaunchINFSection"); - pLaunchINFSectionEx = (void *)GetProcAddress(hAdvPack, "LaunchINFSectionEx"); - - if (!pRunSetupCommand || !pLaunchINFSection || !pLaunchINFSectionEx) - return FALSE; - - return TRUE; -} - -static BOOL is_spapi_err(DWORD err) -{ - const DWORD SPAPI_PREFIX = 0x800F0000L; - const DWORD SPAPI_MASK = 0xFFFF0000L; - - return (((err & SPAPI_MASK) ^ SPAPI_PREFIX) == 0); -} - -static void append_str(char **str, const char *data) -{ - sprintf(*str, data); - *str += strlen(*str); -} - -static void create_inf_file(LPCSTR filename) -{ - char data[1024]; - char *ptr = data; - DWORD dwNumberOfBytesWritten; - HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - append_str(&ptr, "[Version]\n"); - append_str(&ptr, "Signature=\"$Chicago$\"\n"); - append_str(&ptr, "AdvancedINF=2.5\n"); - append_str(&ptr, "[DefaultInstall]\n"); - append_str(&ptr, "CheckAdminRights=1\n"); - - WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL); - CloseHandle(hf); -} - -static void test_RunSetupCommand(void) -{ - HRESULT hr; - HANDLE hexe; - char path[MAX_PATH]; - char dir[MAX_PATH]; - char systemdir[MAX_PATH]; - - GetSystemDirectoryA(systemdir, sizeof(systemdir)); - - /* try an invalid cmd name */ - hr = pRunSetupCommand(NULL, NULL, "Install", "Dir", "Title", NULL, 0, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); - - /* try an invalid directory */ - hr = pRunSetupCommand(NULL, "winver.exe", "Install", NULL, "Title", NULL, 0, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); - - /* try to run a nonexistent exe */ - hexe = (HANDLE)0xdeadbeef; - hr = pRunSetupCommand(NULL, "idontexist.exe", "Install", systemdir, "Title", &hexe, 0, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), - "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got %d\n", hr); - ok(hexe == NULL, "Expcted hexe to be NULL\n"); - ok(!TerminateProcess(hexe, 0), "Expected TerminateProcess to fail\n"); - - /* try a bad directory */ - hexe = (HANDLE)0xdeadbeef; - hr = pRunSetupCommand(NULL, "winver.exe", "Install", "non\\existent\\directory", "Title", &hexe, 0, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_DIRECTORY), - "Expected HRESULT_FROM_WIN32(ERROR_DIRECTORY), got %d\n", hr); - ok(hexe == NULL, "Expcted hexe to be NULL\n"); - ok(!TerminateProcess(hexe, 0), "Expected TerminateProcess to fail\n"); - - /* try to run an exe with the RSC_FLAG_INF flag */ - hexe = (HANDLE)0xdeadbeef; - hr = pRunSetupCommand(NULL, "winver.exe", "Install", systemdir, "Title", &hexe, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(is_spapi_err(hr) || - hr == E_FAIL, /* win9x */ - "Expected a setupapi error or E_FAIL, got %d\n", hr); - ok(hexe == (HANDLE)0xdeadbeef, "Expected hexe to be 0xdeadbeef\n"); - ok(!TerminateProcess(hexe, 0), "Expected TerminateProcess to fail\n"); - - /* run winver.exe */ - hexe = (HANDLE)0xdeadbeef; - hr = pRunSetupCommand(NULL, "winver.exe", "Install", systemdir, "Title", &hexe, 0, NULL); - ok(hr == S_ASYNCHRONOUS, "Expected S_ASYNCHRONOUS, got %d\n", hr); - ok(hexe != NULL, "Expected hexe to be non-NULL\n"); - ok(TerminateProcess(hexe, 0), "Expected TerminateProcess to succeed\n"); - - CreateDirectoryA("one", NULL); - create_inf_file("one\\test.inf"); - - /* try a full path to the INF, with working dir provided */ - lstrcpy(path, CURR_DIR); - lstrcat(path, "\\one\\test.inf"); - lstrcpy(dir, CURR_DIR); - lstrcat(dir, "\\one"); - hr = pRunSetupCommand(NULL, path, "DefaultInstall", dir, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", hr); - - /* try a full path to the INF, NULL working dir */ - hr = pRunSetupCommand(NULL, path, "DefaultInstall", NULL, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), - "Expected HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), got %d\n", hr); - - /* try a full path to the INF, empty working dir */ - hr = pRunSetupCommand(NULL, path, "DefaultInstall", "", "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", hr); - - /* try a relative path to the INF, with working dir provided */ - hr = pRunSetupCommand(NULL, "one\\test.inf", "DefaultInstall", dir, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == ERROR_SUCCESS || - hr == E_FAIL, /* win9x */ - "Expected ERROR_SUCCESS, got %d\n", hr); - - /* try a relative path to the INF, NULL working dir */ - hr = pRunSetupCommand(NULL, "one\\test.inf", "DefaultInstall", NULL, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), - "Expected HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), got %d\n", hr); - - /* try a relative path to the INF, empty working dir */ - hr = pRunSetupCommand(NULL, "one\\test.inf", "DefaultInstall", "", "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == ERROR_SUCCESS || - hr == E_FAIL, /* win9x */ - "Expected ERROR_SUCCESS or E_FAIL, got %d\n", hr); - - /* try only the INF filename, with working dir provided */ - hr = pRunSetupCommand(NULL, "test.inf", "DefaultInstall", dir, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || - hr == E_FAIL, /* win9x */ - "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) or E_FAIL, got %d\n", hr); - - /* try only the INF filename, NULL working dir */ - hr = pRunSetupCommand(NULL, "test.inf", "DefaultInstall", NULL, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), - "Expected HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), got %d\n", hr); - - /* try only the INF filename, empty working dir */ - hr = pRunSetupCommand(NULL, "test.inf", "DefaultInstall", "", "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || - hr == E_FAIL, /* win9x */ - "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) or E_FAIL, got %d\n", hr); - - DeleteFileA("one\\test.inf"); - RemoveDirectoryA("one"); - - create_inf_file("test.inf"); - - /* try INF file in the current directory, working directory provided */ - hr = pRunSetupCommand(NULL, "test.inf", "DefaultInstall", CURR_DIR, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || - hr == E_FAIL, /* win9x */ - "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) or E_FAIL, got %d\n", hr); - - /* try INF file in the current directory, NULL working directory */ - hr = pRunSetupCommand(NULL, "test.inf", "DefaultInstall", NULL, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), - "Expected HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), got %d\n", hr); - - /* try INF file in the current directory, empty working directory */ - hr = pRunSetupCommand(NULL, "test.inf", "DefaultInstall", CURR_DIR, "Title", NULL, RSC_FLAG_INF | RSC_FLAG_QUIET, NULL); - ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || - hr == E_FAIL, /* win9x */ - "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) or E_FAIL, got %d\n", hr); -} - -static void test_LaunchINFSection(void) -{ - HRESULT hr; - char cmdline[MAX_PATH]; - static char file[] = "test.inf,DefaultInstall,4,0"; - - /* The 'No UI' flag seems to have no effect whatsoever on Windows. - * So only do this test in interactive mode. - */ - if (winetest_interactive) - { - /* try an invalid cmdline */ - hr = pLaunchINFSection(NULL, NULL, NULL, 0); - ok(hr == 1, "Expected 1, got %d\n", hr); - } - - CreateDirectoryA("one", NULL); - create_inf_file("one\\test.inf"); - - /* try a full path to the INF */ - lstrcpy(cmdline, CURR_DIR); - lstrcat(cmdline, "\\"); - lstrcat(cmdline, "one\\test.inf,DefaultInstall,,4"); - hr = pLaunchINFSection(NULL, NULL, cmdline, 0); - ok(hr == 0, "Expected 0, got %d\n", hr); - - DeleteFileA("one\\test.inf"); - RemoveDirectoryA("one"); - - create_inf_file("test.inf"); - - /* try just the INF filename */ - hr = pLaunchINFSection(NULL, NULL, file, 0); - ok(hr == 0, "Expected 0, got %d\n", hr); - - DeleteFileA("test.inf"); -} - -static void test_LaunchINFSectionEx(void) -{ - HRESULT hr; - char cmdline[MAX_PATH]; - - create_inf_file("test.inf"); - - /* try an invalid CAB filename with an absolute INF name */ - lstrcpy(cmdline, CURR_DIR); - lstrcat(cmdline, "\\"); - lstrcat(cmdline, "test.inf,DefaultInstall,c:imacab.cab,4"); - hr = pLaunchINFSectionEx(NULL, NULL, cmdline, 0); - ok(hr == 0, "Expected 0, got %d\n", hr); - - /* The 'No UI' flag seems to have no effect whatsoever on Windows. - * So only do this test in interactive mode. - */ - if (winetest_interactive) - { - /* try an invalid CAB filename with a relative INF name */ - lstrcpy(cmdline, "test.inf,DefaultInstall,c:imacab.cab,4"); - hr = pLaunchINFSectionEx(NULL, NULL, cmdline, 0); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %d\n", hr); - } - - DeleteFileA("test.inf"); -} - -START_TEST(install) -{ - DWORD len; - char temp_path[MAX_PATH], prev_path[MAX_PATH]; - - if (!init_function_pointers()) - return; - - GetCurrentDirectoryA(MAX_PATH, prev_path); - GetTempPath(MAX_PATH, temp_path); - SetCurrentDirectoryA(temp_path); - - lstrcpyA(CURR_DIR, temp_path); - len = lstrlenA(CURR_DIR); - - if(len && (CURR_DIR[len - 1] == '\\')) - CURR_DIR[len - 1] = 0; - - test_RunSetupCommand(); - test_LaunchINFSection(); - test_LaunchINFSectionEx(); - - FreeLibrary(hAdvPack); - SetCurrentDirectoryA(prev_path); -} diff --git a/rostests/winetests/advpack/testlist.c b/rostests/winetests/advpack/testlist.c deleted file mode 100644 index 3999a51fceb..00000000000 --- a/rostests/winetests/advpack/testlist.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_advpack(void); -extern void func_files(void); -extern void func_install(void); - -const struct test winetest_testlist[] = -{ - { "advpack", func_advpack }, - { "files", func_files }, - { "install", func_install }, - { 0, 0 } -}; diff --git a/rostests/winetests/browseui/autocomplete.c b/rostests/winetests/browseui/autocomplete.c deleted file mode 100644 index bddaa52274a..00000000000 --- a/rostests/winetests/browseui/autocomplete.c +++ /dev/null @@ -1,324 +0,0 @@ -/* Unit tests for autocomplete - * - * Copyright 2007 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 - */ - -#include -#include - -#include -#include -#include - -#include "wine/test.h" - -#define stop_on_error(exp) \ -{ \ - HRESULT res = (exp); \ - if (FAILED(res)) \ - { \ - ok(FALSE, #exp " failed: %x\n", res); \ - return; \ - } \ -} - -#define ole_ok(exp) \ -{ \ - HRESULT res = (exp); \ - if (res != S_OK) \ - ok(FALSE, #exp " failed: %x\n", res); \ -} - -LPWSTR strdup_AtoW(LPCSTR str) -{ - int size = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); - LPWSTR wstr = (LPWSTR)CoTaskMemAlloc((size + 1)*sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, str, -1, wstr, size+1); - return wstr; -} - -typedef struct -{ - IEnumStringVtbl *vtbl; - IACListVtbl *aclVtbl; - LONG ref; - HRESULT expret; - INT expcount; - INT pos; - INT limit; - const char **data; -} TestACL; - -extern IEnumStringVtbl TestACLVtbl; -extern IACListVtbl TestACL_ACListVtbl; - -static TestACL *impl_from_IACList(IACList *iface) -{ - return (TestACL *)((char *)iface - FIELD_OFFSET(TestACL, aclVtbl)); -} - -static TestACL *TestACL_Constructor(int limit, const char **strings) -{ - TestACL *This = CoTaskMemAlloc(sizeof(TestACL)); - ZeroMemory(This, sizeof(*This)); - This->vtbl = &TestACLVtbl; - This->aclVtbl = &TestACL_ACListVtbl; - This->ref = 1; - This->expret = S_OK; - This->limit = limit; - This->data = strings; - return This; -} - -ULONG STDMETHODCALLTYPE TestACL_AddRef(IEnumString *iface) -{ - TestACL *This = (TestACL *)iface; - trace("ACL(%p): addref (%d)\n", This, This->ref+1); - return InterlockedIncrement(&This->ref); -} - -ULONG STDMETHODCALLTYPE TestACL_Release(IEnumString *iface) -{ - TestACL *This = (TestACL *)iface; - ULONG res; - - res = InterlockedDecrement(&This->ref); - trace("ACL(%p): release (%d)\n", This, res); - return res; -} - -HRESULT STDMETHODCALLTYPE TestACL_QueryInterface(IEnumString *iface, REFIID iid, LPVOID *ppvOut) -{ - TestACL *This = (TestACL *)iface; - *ppvOut = NULL; - if (IsEqualGUID(iid, &IID_IUnknown) || IsEqualGUID(iid, &IID_IEnumString)) - { - *ppvOut = iface; - } - else if (IsEqualGUID(iid, &IID_IACList)) - { - *ppvOut = &This->aclVtbl; - } - - if (*ppvOut) - { - iface->lpVtbl->AddRef(iface); - return S_OK; - } - -#if 0 /* IID_IEnumACString not defined yet in wine */ - if (!IsEqualGUID(iid, &IID_IEnumACString)) - trace("unknown interface queried\n"); -#endif - return E_NOINTERFACE; -} - -HRESULT STDMETHODCALLTYPE TestACL_Next(IEnumString *iface, ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched) -{ - TestACL *This = (TestACL *)iface; - ULONG i; - - trace("ACL(%p): read %d item(s)\n", This, celt); - for (i = 0; i < celt; i++) - { - if (This->pos >= This->limit) - break; - rgelt[i] = strdup_AtoW(This->data[This->pos]); - This->pos++; - } - - if (pceltFetched) - *pceltFetched = i; - if (i == celt) - return S_OK; - return S_FALSE; -} - -HRESULT STDMETHODCALLTYPE TestACL_Skip(IEnumString *iface, ULONG celt) -{ - ok(FALSE, "Unexpected call to TestACL_Skip\n"); - return E_NOTIMPL; -} - -HRESULT STDMETHODCALLTYPE TestACL_Clone(IEnumString *iface, IEnumString **out) -{ - ok(FALSE, "Unexpected call to TestACL_Clone\n"); - return E_OUTOFMEMORY; -} - -HRESULT STDMETHODCALLTYPE TestACL_Reset(IEnumString *iface) -{ - TestACL *This = (TestACL *)iface; - trace("ACL(%p): Reset\n", This); - This->pos = 0; - return S_OK; -} - -HRESULT STDMETHODCALLTYPE TestACL_Expand(IACList *iface, LPCOLESTR str) -{ - TestACL *This = impl_from_IACList(iface); - trace("ACL(%p): Expand\n", impl_from_IACList(iface)); - This->expcount++; - return This->expret; -} - -IEnumStringVtbl TestACLVtbl = -{ - TestACL_QueryInterface, - TestACL_AddRef, - TestACL_Release, - - TestACL_Next, - TestACL_Skip, - TestACL_Reset, - TestACL_Clone -}; - -ULONG STDMETHODCALLTYPE TestACL_ACList_AddRef(IACList *iface) -{ - return TestACL_AddRef((IEnumString *)impl_from_IACList(iface)); -} - -ULONG STDMETHODCALLTYPE TestACL_ACList_Release(IACList *iface) -{ - return TestACL_Release((IEnumString *)impl_from_IACList(iface)); -} - -HRESULT STDMETHODCALLTYPE TestACL_ACList_QueryInterface(IACList *iface, REFIID iid, LPVOID *ppvout) -{ - return TestACL_QueryInterface((IEnumString *)impl_from_IACList(iface), iid, ppvout); -} - -IACListVtbl TestACL_ACListVtbl = -{ - TestACL_ACList_QueryInterface, - TestACL_ACList_AddRef, - TestACL_ACList_Release, - - TestACL_Expand -}; - -#define expect_str(obj, str) \ -{ \ - ole_ok(obj->lpVtbl->Next(obj, 1, &wstr, &i)); \ - ok(i == 1, "Expected i == 1, got %d\n", i); \ - ok(str[0] == wstr[0], "String mismatch\n"); \ -} - -#define expect_end(obj) \ - ok(obj->lpVtbl->Next(obj, 1, &wstr, &i) == S_FALSE, "Unexpected return from Next\n"); - -static void test_ACLMulti(void) -{ - const char *strings1[] = {"a", "c", "e"}; - const char *strings2[] = {"a", "b", "d"}; - WCHAR exp[] = {'A','B','C',0}; - IEnumString *obj; - TestACL *acl1, *acl2; - IACList *acl; - IObjMgr *mgr; - LPWSTR wstr; - LPWSTR wstrtab[15]; - LPVOID tmp; - UINT i; - - stop_on_error(CoCreateInstance(&CLSID_ACLMulti, NULL, CLSCTX_INPROC, &IID_IEnumString, (LPVOID *)&obj)); - stop_on_error(obj->lpVtbl->QueryInterface(obj, &IID_IACList, (LPVOID *)&acl)); - ok(obj->lpVtbl->QueryInterface(obj, &IID_IACList2, &tmp) == E_NOINTERFACE, - "Unexpected interface IACList2 in ACLMulti\n"); - stop_on_error(obj->lpVtbl->QueryInterface(obj, &IID_IObjMgr, (LPVOID *)&mgr)); -#if 0 /* IID_IEnumACString not defined yet in wine */ - ole_ok(obj->lpVtbl->QueryInterface(obj, &IID_IEnumACString, &unk)); - if (unk != NULL) - unk->lpVtbl->Release(unk); -#endif - - ok(obj->lpVtbl->Next(obj, 1, (LPOLESTR *)&tmp, &i) == S_FALSE, "Unexpected return from Next\n"); - ok(i == 0, "Unexpected fetched value %d\n", i); - ok(obj->lpVtbl->Next(obj, 44, (LPOLESTR *)&tmp, &i) == S_FALSE, "Unexpected return from Next\n"); - ok(obj->lpVtbl->Skip(obj, 1) == E_NOTIMPL, "Unexpected return from Skip\n"); - ok(obj->lpVtbl->Clone(obj, (IEnumString **)&tmp) == E_OUTOFMEMORY, "Unexpected return from Clone\n"); - ole_ok(acl->lpVtbl->Expand(acl, exp)); - - acl1 = TestACL_Constructor(3, strings1); - acl2 = TestACL_Constructor(3, strings2); - stop_on_error(mgr->lpVtbl->Append(mgr, (IUnknown *)acl1)); - stop_on_error(mgr->lpVtbl->Append(mgr, (IUnknown *)acl2)); - ok(mgr->lpVtbl->Append(mgr, NULL) == E_FAIL, "Unexpected return from Append\n"); - expect_str(obj, "a"); - expect_str(obj, "c"); - expect_str(obj, "e"); - expect_str(obj, "a"); - expect_str(obj, "b"); - expect_str(obj, "d"); - expect_end(obj); - - ole_ok(obj->lpVtbl->Reset(obj)); - ok(acl1->pos == 0, "acl1 not reset\n"); - ok(acl2->pos == 0, "acl2 not reset\n"); - - ole_ok(acl->lpVtbl->Expand(acl, exp)); - ok(acl1->expcount == 1, "expcount - expected 1, got %d\n", acl1->expcount); - ok(acl2->expcount == 0 /* XP */ || acl2->expcount == 1 /* Vista */, - "expcount - expected 0 or 1, got %d\n", acl2->expcount); - - ole_ok(obj->lpVtbl->Next(obj, 15, wstrtab, &i)); - ok(i == 1, "Expected i == 1, got %d\n", i); - ole_ok(obj->lpVtbl->Next(obj, 15, wstrtab, &i)); - ole_ok(obj->lpVtbl->Next(obj, 15, wstrtab, &i)); - ole_ok(obj->lpVtbl->Next(obj, 15, wstrtab, &i)); - ole_ok(acl->lpVtbl->Expand(acl, exp)); - ok(acl1->expcount == 2, "expcount - expected 1, got %d\n", acl1->expcount); - ok(acl2->expcount == 0 /* XP */ || acl2->expcount == 2 /* Vista */, - "expcount - expected 0 or 2, got %d\n", acl2->expcount); - acl1->expret = S_FALSE; - ole_ok(acl->lpVtbl->Expand(acl, exp)); - ok(acl1->expcount == 3, "expcount - expected 1, got %d\n", acl1->expcount); - ok(acl2->expcount == 1 /* XP */ || acl2->expcount == 3 /* Vista */, - "expcount - expected 0 or 3, got %d\n", acl2->expcount); - acl1->expret = E_NOTIMPL; - ole_ok(acl->lpVtbl->Expand(acl, exp)); - ok(acl1->expcount == 4, "expcount - expected 1, got %d\n", acl1->expcount); - ok(acl2->expcount == 2 /* XP */ || acl2->expcount == 4 /* Vista */, - "expcount - expected 0 or 4, got %d\n", acl2->expcount); - acl2->expret = E_OUTOFMEMORY; - ok(acl->lpVtbl->Expand(acl, exp) == E_OUTOFMEMORY, "Unexpected Expand return\n"); - acl2->expret = E_FAIL; - ok(acl->lpVtbl->Expand(acl, exp) == E_FAIL, "Unexpected Expand return\n"); - - stop_on_error(mgr->lpVtbl->Remove(mgr, (IUnknown *)acl1)); - ok(acl1->ref == 1, "acl1 not released\n"); - expect_end(obj); - obj->lpVtbl->Reset(obj); - expect_str(obj, "a"); - expect_str(obj, "b"); - expect_str(obj, "d"); - expect_end(obj); - - obj->lpVtbl->Release(obj); - acl->lpVtbl->Release(acl); - ok(mgr->lpVtbl->Release(mgr) == 0, "Unexpected references\n"); - ok(acl1->ref == 1, "acl1 not released\n"); - ok(acl2->ref == 1, "acl2 not released\n"); -} - -START_TEST(autocomplete) -{ - CoInitialize(NULL); - test_ACLMulti(); - CoUninitialize(); -} diff --git a/rostests/winetests/browseui/browseui.rbuild b/rostests/winetests/browseui/browseui.rbuild deleted file mode 100644 index 9ee3d270fc4..00000000000 --- a/rostests/winetests/browseui/browseui.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - - . - wine - ole32 - user32 - kernel32 - uuid - ntdll - autocomplete.c - testlist.c - - diff --git a/rostests/winetests/browseui/testlist.c b/rostests/winetests/browseui/testlist.c deleted file mode 100644 index 89bfdebb386..00000000000 --- a/rostests/winetests/browseui/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_autocomplete(void); - -const struct test winetest_testlist[] = -{ - { "autocomplete", func_autocomplete }, - { 0, 0 } -}; diff --git a/rostests/winetests/cabinet/cabinet.rbuild b/rostests/winetests/cabinet/cabinet.rbuild deleted file mode 100644 index 2d0b8c69243..00000000000 --- a/rostests/winetests/cabinet/cabinet.rbuild +++ /dev/null @@ -1,14 +0,0 @@ - - - - - . - extract.c - fdi.c - testlist.c - wine - cabinet - kernel32 - ntdll - - diff --git a/rostests/winetests/cabinet/extract.c b/rostests/winetests/cabinet/extract.c deleted file mode 100644 index 156df177a9b..00000000000 --- a/rostests/winetests/cabinet/extract.c +++ /dev/null @@ -1,691 +0,0 @@ -/* - * Unit tests for cabinet.dll extract functions - * - * Copyright (C) 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 - */ - -#include -#include -#include "fci.h" -#include "fdi.h" -#include "wine/test.h" - -/* make the max size large so there is only one cab file */ -#define MEDIA_SIZE 999999999 -#define FOLDER_THRESHOLD 900000 - -/* The following definitions were copied from dlls/cabinet/cabinet.h - * because they are undocumented in windows. - */ - -/* SESSION Operation */ -#define EXTRACT_FILLFILELIST 0x00000001 -#define EXTRACT_EXTRACTFILES 0x00000002 - -struct FILELIST{ - LPSTR FileName; - struct FILELIST *next; - BOOL DoExtract; -}; - -typedef struct { - INT FileSize; - ERF Error; - struct FILELIST *FileList; - INT FileCount; - INT Operation; - CHAR Destination[MAX_PATH]; - CHAR CurrentFile[MAX_PATH]; - CHAR Reserved[MAX_PATH]; - struct FILELIST *FilterList; -} SESSION; - -/* function pointers */ -HMODULE hCabinet; -static HRESULT (WINAPI *pExtract)(SESSION*, LPCSTR); - -CHAR CURR_DIR[MAX_PATH]; - -static void init_function_pointers(void) -{ - hCabinet = GetModuleHandleA("cabinet.dll"); - - pExtract = (void *)GetProcAddress(hCabinet, "Extract"); -} - -/* creates a file with the specified name for tests */ -static void createTestFile(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); -} - -static void create_test_files(void) -{ - int len; - - GetCurrentDirectoryA(MAX_PATH, CURR_DIR); - len = lstrlenA(CURR_DIR); - - if(len && (CURR_DIR[len-1] == '\\')) - CURR_DIR[len-1] = 0; - - createTestFile("a.txt"); - createTestFile("b.txt"); - CreateDirectoryA("testdir", NULL); - createTestFile("testdir\\c.txt"); - createTestFile("testdir\\d.txt"); - CreateDirectoryA("dest", NULL); -} - -static void delete_test_files(void) -{ - DeleteFileA("a.txt"); - DeleteFileA("b.txt"); - DeleteFileA("testdir\\c.txt"); - DeleteFileA("testdir\\d.txt"); - RemoveDirectoryA("testdir"); - - DeleteFileA("extract.cab"); -} - -/* the FCI callbacks */ - -static void *mem_alloc(ULONG cb) -{ - return HeapAlloc(GetProcessHeap(), 0, cb); -} - -static void mem_free(void *memory) -{ - HeapFree(GetProcessHeap(), 0, memory); -} - -static BOOL get_next_cabinet(PCCAB pccab, ULONG cbPrevCab, void *pv) -{ - return TRUE; -} - -static long progress(UINT typeStatus, ULONG cb1, ULONG cb2, void *pv) -{ - return 0; -} - -static int file_placed(PCCAB pccab, char *pszFile, long cbFile, - BOOL fContinuation, void *pv) -{ - return 0; -} - -static INT_PTR fci_open(char *pszFile, int oflag, int pmode, int *err, void *pv) -{ - HANDLE handle; - DWORD dwAccess = 0; - DWORD dwShareMode = 0; - DWORD dwCreateDisposition = OPEN_EXISTING; - - dwAccess = GENERIC_READ | GENERIC_WRITE; - /* FILE_SHARE_DELETE is not supported by Windows Me/98/95 */ - dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; - - if (GetFileAttributesA(pszFile) != INVALID_FILE_ATTRIBUTES) - dwCreateDisposition = OPEN_EXISTING; - else - dwCreateDisposition = CREATE_NEW; - - handle = CreateFileA(pszFile, dwAccess, dwShareMode, NULL, - dwCreateDisposition, 0, NULL); - - ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszFile); - - return (INT_PTR)handle; -} - -static UINT fci_read(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD dwRead; - BOOL res; - - res = ReadFile(handle, memory, cb, &dwRead, NULL); - ok(res, "Failed to ReadFile\n"); - - return dwRead; -} - -static UINT fci_write(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD dwWritten; - BOOL res; - - res = WriteFile(handle, memory, cb, &dwWritten, NULL); - ok(res, "Failed to WriteFile\n"); - - return dwWritten; -} - -static int fci_close(INT_PTR hf, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - ok(CloseHandle(handle), "Failed to CloseHandle\n"); - - return 0; -} - -static long fci_seek(INT_PTR hf, long dist, int seektype, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD ret; - - ret = SetFilePointer(handle, dist, NULL, seektype); - ok(ret != INVALID_SET_FILE_POINTER, "Failed to SetFilePointer\n"); - - return ret; -} - -static int fci_delete(char *pszFile, int *err, void *pv) -{ - BOOL ret = DeleteFileA(pszFile); - ok(ret, "Failed to DeleteFile %s\n", pszFile); - - return 0; -} - -static BOOL get_temp_file(char *pszTempName, int cbTempName, void *pv) -{ - LPSTR tempname; - - tempname = HeapAlloc(GetProcessHeap(), 0, MAX_PATH); - GetTempFileNameA(".", "xx", 0, tempname); - - if (tempname && (strlen(tempname) < (unsigned)cbTempName)) - { - lstrcpyA(pszTempName, tempname); - HeapFree(GetProcessHeap(), 0, tempname); - return TRUE; - } - - HeapFree(GetProcessHeap(), 0, tempname); - - return FALSE; -} - -static INT_PTR get_open_info(char *pszName, USHORT *pdate, USHORT *ptime, - USHORT *pattribs, int *err, void *pv) -{ - BY_HANDLE_FILE_INFORMATION finfo; - FILETIME filetime; - HANDLE handle; - DWORD attrs; - BOOL res; - - handle = CreateFile(pszName, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); - - ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszName); - - res = GetFileInformationByHandle(handle, &finfo); - ok(res, "Expected GetFileInformationByHandle to succeed\n"); - - FileTimeToLocalFileTime(&finfo.ftLastWriteTime, &filetime); - FileTimeToDosDateTime(&filetime, pdate, ptime); - - attrs = GetFileAttributes(pszName); - ok(attrs != INVALID_FILE_ATTRIBUTES, "Failed to GetFileAttributes\n"); - - return (INT_PTR)handle; -} - -static void add_file(HFCI hfci, char *file) -{ - char path[MAX_PATH]; - BOOL res; - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, file); - - res = FCIAddFile(hfci, path, file, FALSE, get_next_cabinet, progress, - get_open_info, tcompTYPE_MSZIP); - ok(res, "Expected FCIAddFile to succeed\n"); -} - -static void set_cab_parameters(PCCAB pCabParams) -{ - ZeroMemory(pCabParams, sizeof(CCAB)); - - pCabParams->cb = MEDIA_SIZE; - pCabParams->cbFolderThresh = FOLDER_THRESHOLD; - pCabParams->setID = 0xbeef; - lstrcpyA(pCabParams->szCabPath, CURR_DIR); - lstrcatA(pCabParams->szCabPath, "\\"); - lstrcpyA(pCabParams->szCab, "extract.cab"); -} - -static void create_cab_file(void) -{ - CCAB cabParams; - HFCI hfci; - ERF erf; - static CHAR a_txt[] = "a.txt", - b_txt[] = "b.txt", - testdir_c_txt[] = "testdir\\c.txt", - testdir_d_txt[] = "testdir\\d.txt"; - BOOL res; - - set_cab_parameters(&cabParams); - - hfci = FCICreate(&erf, file_placed, mem_alloc, mem_free, fci_open, - fci_read, fci_write, fci_close, fci_seek, fci_delete, - get_temp_file, &cabParams, NULL); - - ok(hfci != NULL, "Failed to create an FCI context\n"); - - add_file(hfci, a_txt); - add_file(hfci, b_txt); - add_file(hfci, testdir_c_txt); - add_file(hfci, testdir_d_txt); - - res = FCIFlushCabinet(hfci, FALSE, get_next_cabinet, progress); - ok(res, "Failed to flush the cabinet\n"); - - res = FCIDestroy(hfci); - ok(res, "Failed to destroy the cabinet\n"); -} - -static BOOL check_list(struct FILELIST **node, const char *filename, BOOL do_extract) -{ - if (!*node) - return FALSE; - - if (lstrcmpA((*node)->FileName, filename)) - return FALSE; - - if ((*node)->DoExtract != do_extract) - return FALSE; - - *node = (*node)->next; - return TRUE; -} - -static void test_Extract(void) -{ - SESSION session; - HRESULT res; - struct FILELIST *node; - - /* native windows crashes if - * - invalid parameters are sent in - * - you call EXTRACT_EXTRACTFILES without calling - * EXTRACT_FILLFILELIST first or at the same time - */ - - /* try to extract all files */ - ZeroMemory(&session, sizeof(SESSION)); - lstrcpyA(session.Destination, "dest"); - session.Operation = EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES; - res = pExtract(&session, "extract.cab"); - node = session.FileList; - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(session.FileSize == 40, "Expected 40, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_NONE, - "Expected FDIERROR_NONE, got %d\n", session.Error.erfOper); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == FALSE, "Expected FALSE, got %d\n", session.Error.fError); - ok(session.FileCount == 4, "Expected 4, got %d\n", session.FileCount); - ok(session.Operation == (EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES), - "Expected EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\d.txt"), - "Expected dest\\testdir\\d.txt, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to exist\n"); - ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); - ok(check_list(&node, "testdir\\d.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "b.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "a.txt", FALSE), "list entry wrong\n"); - - /* try fill file list operation */ - ZeroMemory(&session, sizeof(SESSION)); - lstrcpyA(session.Destination, "dest"); - session.Operation = EXTRACT_FILLFILELIST; - res = pExtract(&session, "extract.cab"); - node = session.FileList; - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(session.FileSize == 40, "Expected 40, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_NONE, - "Expected FDIERROR_NONE, got %d\n", session.Error.erfOper); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == FALSE, "Expected FALSE, got %d\n", session.Error.fError); - ok(session.FileCount == 4, "Expected 4, got %d\n", session.FileCount); - ok(session.Operation == EXTRACT_FILLFILELIST, - "Expected EXTRACT_FILLFILELIST, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\d.txt"), - "Expected dest\\testdir\\d.txt, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(check_list(&node, "testdir\\d.txt", TRUE), "list entry wrong\n"); - ok(check_list(&node, "testdir\\c.txt", TRUE), "list entry wrong\n"); - ok(check_list(&node, "b.txt", TRUE), "list entry wrong\n"); - ok(check_list(&node, "a.txt", TRUE), "list entry wrong\n"); - - /* try extract files operation once file list is filled */ - session.Operation = EXTRACT_EXTRACTFILES; - res = pExtract(&session, "extract.cab"); - node = session.FileList; - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(session.FileSize == 40, "Expected 40, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_NONE, - "Expected FDIERROR_NONE, got %d\n", session.Error.erfOper); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == FALSE, "Expected FALSE, got %d\n", session.Error.fError); - ok(session.FileCount == 4, "Expected 4, got %d\n", session.FileCount); - ok(session.Operation == EXTRACT_EXTRACTFILES, - "Expected EXTRACT_EXTRACTFILES, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\d.txt"), - "Expected dest\\testdir\\d.txt, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to exist\n"); - ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); - ok(RemoveDirectoryA("dest"), "Expected dest to exist\n"); - ok(check_list(&node, "testdir\\d.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "b.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "a.txt", FALSE), "list entry wrong\n"); - - /* Extract does not extract files if the dest dir does not exist */ - res = pExtract(&session, "extract.cab"); - node = session.FileList; - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(session.FileSize == 40, "Expected 40, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_NONE, - "Expected FDIERROR_NONE, got %d\n", session.Error.erfOper); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == FALSE, "Expected FALSE, got %d\n", session.Error.fError); - ok(session.FileCount == 4, "Expected 4, got %d\n", session.FileCount); - ok(session.Operation == EXTRACT_EXTRACTFILES, - "Expected EXTRACT_EXTRACTFILES, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\d.txt"), - "Expected dest\\testdir\\d.txt, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - ok(check_list(&node, "testdir\\d.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "b.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "a.txt", FALSE), "list entry wrong\n"); - - /* remove two of the files in the list */ - session.FileList->next = session.FileList->next->next; - session.FileList->next->next = NULL; - session.FilterList = NULL; - CreateDirectoryA("dest", NULL); - res = pExtract(&session, "extract.cab"); - node = session.FileList; - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(session.FileSize == 40, "Expected 40, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_NONE, - "Expected FDIERROR_NONE, got %d\n", session.Error.erfOper); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == FALSE, "Expected FALSE, got %d\n", session.Error.fError); - ok(session.FileCount == 4, "Expected 4, got %d\n", session.FileCount); - ok(session.Operation == EXTRACT_EXTRACTFILES, - "Expected EXTRACT_EXTRACTFILES, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\d.txt"), - "Expected dest\\testdir\\d.txt, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - ok(check_list(&node, "testdir\\d.txt", FALSE), "list entry wrong\n"); - ok(!check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "b.txt", FALSE), "list entry wrong\n"); - ok(!check_list(&node, "a.txt", FALSE), "list entry wrong\n"); - - session.Operation = EXTRACT_FILLFILELIST; - session.FileList = NULL; - res = pExtract(&session, "extract.cab"); - node = session.FileList; - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(session.FileSize == 40, "Expected 40, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_NONE, - "Expected FDIERROR_NONE, got %d\n", session.Error.erfOper); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == FALSE, "Expected FALSE, got %d\n", session.Error.fError); - ok(session.FileCount == 8, "Expected 8, got %d\n", session.FileCount); - ok(session.Operation == EXTRACT_FILLFILELIST, - "Expected EXTRACT_FILLFILELIST, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\d.txt"), - "Expected dest\\testdir\\d.txt, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - ok(check_list(&node, "testdir\\d.txt", TRUE), "list entry wrong\n"); - ok(!check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); - ok(!check_list(&node, "b.txt", FALSE), "list entry wrong\n"); - ok(!check_list(&node, "a.txt", FALSE), "list entry wrong\n"); - - session.Operation = 0; - res = pExtract(&session, "extract.cab"); - node = session.FileList; - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(session.FileSize == 40, "Expected 40, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_NONE, - "Expected FDIERROR_NONE, got %d\n", session.Error.erfOper); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == FALSE, "Expected FALSE, got %d\n", session.Error.fError); - ok(session.FileCount == 8, "Expected 8, got %d\n", session.FileCount); - ok(session.Operation == 0, "Expected 0, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\d.txt"), - "Expected dest\\testdir\\d.txt, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to exist\n"); - ok(check_list(&node, "testdir\\d.txt", TRUE), "list entry wrong\n"); - ok(check_list(&node, "testdir\\c.txt", TRUE), "list entry wrong\n"); - ok(check_list(&node, "b.txt", TRUE), "list entry wrong\n"); - ok(check_list(&node, "a.txt", TRUE), "list entry wrong\n"); - - session.Operation = 0; - session.FilterList = session.FileList; - res = pExtract(&session, "extract.cab"); - node = session.FileList; - ok(res == S_OK, "Expected S_OK, got %d\n", res); - ok(session.FileSize == 40, "Expected 40, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_NONE, - "Expected FDIERROR_NONE, got %d\n", session.Error.erfOper); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == FALSE, "Expected FALSE, got %d\n", session.Error.fError); - ok(session.FileCount == 8, "Expected 8, got %d\n", session.FileCount); - ok(session.Operation == 0, "Expected 0, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\d.txt"), - "Expected dest\\testdir\\d.txt, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to exist\n"); - ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); - ok(DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to exist\n"); - ok(check_list(&node, "testdir\\d.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "b.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "a.txt", FALSE), "list entry wrong\n"); - node = session.FilterList; - ok(check_list(&node, "testdir\\d.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "b.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "a.txt", FALSE), "list entry wrong\n"); - - /* cabinet does not exist */ - ZeroMemory(&session, sizeof(SESSION)); - lstrcpyA(session.Destination, "dest"); - session.Operation = EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES; - res = pExtract(&session, "nonexistent.cab"); - node = session.FileList; - ok(res == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), - "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got %08x\n", res); - ok(session.Error.erfOper == FDIERROR_CABINET_NOT_FOUND, - "Expected FDIERROR_CABINET_NOT_FOUND, got %d\n", session.Error.erfOper); - ok(session.FileSize == 0, "Expected 0, got %d\n", session.FileSize); - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Error.fError == TRUE, "Expected TRUE, got %d\n", session.Error.fError); - ok(session.FileCount == 0, "Expected 0, got %d\n", session.FileCount); - ok(session.Operation == (EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES), - "Expected EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!*session.CurrentFile, "Expected empty string, got %s\n", session.CurrentFile); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - ok(!check_list(&node, "testdir\\d.txt", FALSE), "list entry should not exist\n"); - ok(!check_list(&node, "testdir\\c.txt", FALSE), "list entry should not exist\n"); - ok(!check_list(&node, "b.txt", FALSE), "list entry should not exist\n"); - ok(!check_list(&node, "a.txt", FALSE), "list entry should not exist\n"); - - /* first file exists */ - createTestFile("dest\\a.txt"); - SetFileAttributes("dest\\a.txt", FILE_ATTRIBUTE_READONLY); - ZeroMemory(&session, sizeof(SESSION)); - lstrcpyA(session.Destination, "dest"); - session.Operation = EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES; - res = pExtract(&session, "extract.cab"); - node = session.FileList; - todo_wine - { - ok(res == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) || res == E_FAIL, - "Expected HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) or E_FAIL, got %08x\n", res); - ok(session.FileSize == 6, "Expected 6, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_USER_ABORT, - "Expected FDIERROR_USER_ABORT, got %d\n", session.Error.erfOper); - ok(session.Error.fError == TRUE, "Expected TRUE, got %d\n", session.Error.fError); - ok(session.FileCount == 1, "Expected 1, got %d\n", session.FileCount); - ok(!lstrcmpA(session.CurrentFile, "dest\\a.txt"), - "Expected dest\\a.txt, got %s\n", session.CurrentFile); - } - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Operation == (EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES), - "Expected EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(!DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to not exist\n"); - todo_wine - { - ok(!DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - ok(!check_list(&node, "testdir\\d.txt", FALSE), "list entry should not exist\n"); - ok(!check_list(&node, "testdir\\c.txt", FALSE), "list entry should not exist\n"); - ok(!check_list(&node, "b.txt", FALSE), "list entry should not exist\n"); - } - ok(!check_list(&node, "a.txt", FALSE), "list entry should not exist\n"); - - SetFileAttributesA("dest\\a.txt", FILE_ATTRIBUTE_NORMAL); - DeleteFileA("dest\\a.txt"); - - /* third file exists */ - createTestFile("dest\\testdir\\c.txt"); - SetFileAttributes("dest\\testdir\\c.txt", FILE_ATTRIBUTE_READONLY); - ZeroMemory(&session, sizeof(SESSION)); - lstrcpyA(session.Destination, "dest"); - session.Operation = EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES; - res = pExtract(&session, "extract.cab"); - todo_wine - { - ok(res == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) || res == E_FAIL, - "Expected HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) or E_FAIL, got %08x\n", res); - ok(session.FileSize == 26, "Expected 26, got %d\n", session.FileSize); - ok(session.Error.erfOper == FDIERROR_USER_ABORT, - "Expected FDIERROR_USER_ABORT, got %d\n", session.Error.erfOper); - ok(session.Error.fError == TRUE, "Expected TRUE, got %d\n", session.Error.fError); - ok(session.FileCount == 3, "Expected 3, got %d\n", session.FileCount); - ok(!lstrcmpA(session.CurrentFile, "dest\\testdir\\c.txt"), - "Expected dest\\c.txt, got %s\n", session.CurrentFile); - } - ok(session.Error.erfType == 0, "Expected 0, got %d\n", session.Error.erfType); - ok(session.Operation == (EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES), - "Expected EXTRACT_FILLFILELIST | EXTRACT_EXTRACTFILES, got %d\n", session.Operation); - ok(!lstrcmpA(session.Destination, "dest"), "Expected dest, got %s\n", session.Destination); - ok(!*session.Reserved, "Expected empty string, got %s\n", session.Reserved); - ok(!session.FilterList, "Expected empty filter list\n"); - ok(DeleteFileA("dest\\a.txt"), "Expected dest\\a.txt to exist\n"); - ok(DeleteFileA("dest\\b.txt"), "Expected dest\\b.txt to exist\n"); - ok(!DeleteFileA("dest\\testdir\\c.txt"), "Expected dest\\testdir\\c.txt to not exist\n"); - todo_wine - { - ok(!DeleteFileA("dest\\testdir\\d.txt"), "Expected dest\\testdir\\d.txt to not exist\n"); - } - ok(!check_list(&node, "testdir\\d.txt", FALSE), "list entry should not exist\n"); - ok(!check_list(&node, "testdir\\c.txt", FALSE), "list entry wrong\n"); - ok(!check_list(&node, "b.txt", FALSE), "list entry wrong\n"); - ok(check_list(&node, "a.txt", TRUE), "list entry wrong\n"); - - SetFileAttributesA("dest\\testdir\\c.txt", FILE_ATTRIBUTE_NORMAL); - DeleteFileA("dest\\testdir\\c.txt"); - - ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n"); - ok(RemoveDirectoryA("dest"), "Expected dest to exist\n"); -} - -START_TEST(extract) -{ - init_function_pointers(); - create_test_files(); - create_cab_file(); - - test_Extract(); - - delete_test_files(); -} diff --git a/rostests/winetests/cabinet/fdi.c b/rostests/winetests/cabinet/fdi.c deleted file mode 100644 index f90b6f0abea..00000000000 --- a/rostests/winetests/cabinet/fdi.c +++ /dev/null @@ -1,650 +0,0 @@ -/* - * Unit tests for the File Decompression Interface - * - * Copyright (C) 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 - */ - -#include -#include -#include "fci.h" -#include "fdi.h" -#include "wine/test.h" - -/* make the max size large so there is only one cab file */ -#define MEDIA_SIZE 999999999 -#define FOLDER_THRESHOLD 900000 - -CHAR CURR_DIR[MAX_PATH]; - -/* FDI callbacks */ - -static void *fdi_alloc(ULONG cb) -{ - return HeapAlloc(GetProcessHeap(), 0, cb); -} - -static void *fdi_alloc_bad(ULONG cb) -{ - return NULL; -} - -static void fdi_free(void *pv) -{ - HeapFree(GetProcessHeap(), 0, pv); -} - -static INT_PTR fdi_open(char *pszFile, int oflag, int pmode) -{ - HANDLE handle; - handle = CreateFileA(pszFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, 0, NULL ); - if (handle == INVALID_HANDLE_VALUE) - return 0; - return (INT_PTR) handle; -} - -static UINT fdi_read(INT_PTR hf, void *pv, UINT cb) -{ - HANDLE handle = (HANDLE) hf; - DWORD dwRead; - if (ReadFile(handle, pv, cb, &dwRead, NULL)) - return dwRead; - return 0; -} - -static UINT fdi_write(INT_PTR hf, void *pv, UINT cb) -{ - HANDLE handle = (HANDLE) hf; - DWORD dwWritten; - if (WriteFile(handle, pv, cb, &dwWritten, NULL)) - return dwWritten; - return 0; -} - -static int fdi_close(INT_PTR hf) -{ - HANDLE handle = (HANDLE) hf; - return CloseHandle(handle) ? 0 : -1; -} - -static long fdi_seek(INT_PTR hf, long dist, int seektype) -{ - HANDLE handle = (HANDLE) hf; - return SetFilePointer(handle, dist, NULL, seektype); -} - -static void test_FDICreate(void) -{ - HFDI hfdi; - ERF erf; - - /* native crashes if pfnalloc is NULL */ - - /* FDICreate does not crash with a NULL pfnfree, - * but FDIDestroy will crash when it tries to access it. - */ - if (0) - { - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc, NULL, fdi_open, fdi_read, - fdi_write, fdi_close, fdi_seek, - cpuUNKNOWN, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok(erf.erfOper == 0xcafefeed, "Expected 0xcafefeed, got %d\n", erf.erfOper); - ok(erf.erfType == 0xdeadbabe, "Expected 0xdeadbabe, got %d\n", erf.erfType); - ok(erf.fError == 0xdecaface, "Expected 0xdecaface, got %d\n", erf.fError); - - FDIDestroy(hfdi); - } - - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc, fdi_free, NULL, fdi_read, - fdi_write, fdi_close, fdi_seek, - cpuUNKNOWN, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok((erf.erfOper == 0xcafefeed || erf.erfOper == 0 /* Vista */), "Expected 0xcafefeed or 0, got %d\n", erf.erfOper); - ok((erf.erfType == 0xdeadbabe || erf.erfType == 0 /* Vista */), "Expected 0xdeadbabe or 0, got %d\n", erf.erfType); - ok((erf.fError == 0xdecaface || erf.fError == 0 /* Vista */), "Expected 0xdecaface or 0, got %d\n", erf.fError); - - FDIDestroy(hfdi); - - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, NULL, - fdi_write, fdi_close, fdi_seek, - cpuUNKNOWN, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok((erf.erfOper == 0xcafefeed || erf.erfOper == 0 /* Vista */), "Expected 0xcafefeed or 0, got %d\n", erf.erfOper); - ok((erf.erfType == 0xdeadbabe || erf.erfType == 0 /* Vista */), "Expected 0xdeadbabe or 0, got %d\n", erf.erfType); - ok((erf.fError == 0xdecaface || erf.fError == 0 /* Vista */), "Expected 0xdecaface or 0, got %d\n", erf.fError); - - FDIDestroy(hfdi); - - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, fdi_read, - NULL, fdi_close, fdi_seek, - cpuUNKNOWN, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok((erf.erfOper == 0xcafefeed || erf.erfOper == 0 /* Vista */), "Expected 0xcafefeed or 0, got %d\n", erf.erfOper); - ok((erf.erfType == 0xdeadbabe || erf.erfType == 0 /* Vista */), "Expected 0xdeadbabe or 0, got %d\n", erf.erfType); - ok((erf.fError == 0xdecaface || erf.fError == 0 /* Vista */), "Expected 0xdecaface or 0, got %d\n", erf.fError); - - FDIDestroy(hfdi); - - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, fdi_read, - fdi_write, NULL, fdi_seek, - cpuUNKNOWN, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok((erf.erfOper == 0xcafefeed || erf.erfOper == 0 /* Vista */), "Expected 0xcafefeed or 0, got %d\n", erf.erfOper); - ok((erf.erfType == 0xdeadbabe || erf.erfType == 0 /* Vista */), "Expected 0xdeadbabe or 0, got %d\n", erf.erfType); - ok((erf.fError == 0xdecaface || erf.fError == 0 /* Vista */), "Expected 0xdecaface or 0, got %d\n", erf.fError); - - FDIDestroy(hfdi); - - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, fdi_read, - fdi_write, fdi_close, NULL, - cpuUNKNOWN, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok((erf.erfOper == 0xcafefeed || erf.erfOper == 0 /* Vista */), "Expected 0xcafefeed or 0, got %d\n", erf.erfOper); - ok((erf.erfType == 0xdeadbabe || erf.erfType == 0 /* Vista */), "Expected 0xdeadbabe or 0, got %d\n", erf.erfType); - ok((erf.fError == 0xdecaface || erf.fError == 0 /* Vista */), "Expected 0xdecaface or 0, got %d\n", erf.fError); - - FDIDestroy(hfdi); - - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, fdi_read, - fdi_write, fdi_close, fdi_seek, - cpuUNKNOWN, NULL); - /* XP sets hfdi to a non-NULL value, but Vista sets it to NULL! */ - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - /* NULL is passed to FDICreate instead of &erf, so don't retest the erf member values. */ - - FDIDestroy(hfdi); - - /* bad cpu type */ - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, fdi_read, - fdi_write, fdi_close, fdi_seek, - 0xcafebabe, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok((erf.erfOper == 0xcafefeed || erf.erfOper == 0 /* Vista */), "Expected 0xcafefeed or 0, got %d\n", erf.erfOper); - ok((erf.erfType == 0xdeadbabe || erf.erfType == 0 /* Vista */), "Expected 0xdeadbabe or 0, got %d\n", erf.erfType); - ok((erf.fError == 0xdecaface || erf.fError == 0 /* Vista */), "Expected 0xdecaface or 0, got %d\n", erf.fError); - - FDIDestroy(hfdi); - - /* pfnalloc fails */ - SetLastError(0xdeadbeef); - erf.erfOper = 0xcafefeed; - erf.erfType = 0xdeadbabe; - erf.fError = 0xdecaface; - hfdi = FDICreate(fdi_alloc_bad, fdi_free, fdi_open, fdi_read, - fdi_write, fdi_close, fdi_seek, - cpuUNKNOWN, &erf); - ok(hfdi == NULL, "Expected NULL context, got %p\n", hfdi); - ok(erf.erfOper == FDIERROR_ALLOC_FAIL, - "Expected FDIERROR_ALLOC_FAIL, got %d\n", erf.erfOper); - ok(erf.fError == TRUE, "Expected TRUE, got %d\n", erf.fError); - todo_wine - { - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok(erf.erfType == 0, "Expected 0, got %d\n", erf.erfType); - } -} - -static void test_FDIDestroy(void) -{ - HFDI hfdi; - ERF erf; - BOOL ret; - - /* native crashes if hfdi is NULL or invalid */ - - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, fdi_read, - fdi_write, fdi_close, fdi_seek, - cpuUNKNOWN, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - - /* successfully destroy hfdi */ - ret = FDIDestroy(hfdi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - /* native crashes if you try to destroy hfdi twice */ - if (0) - { - /* try to destroy hfdi again */ - ret = FDIDestroy(hfdi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - } -} - -static void createTestFile(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); -} - -static void create_test_files(void) -{ - int len; - - GetCurrentDirectoryA(MAX_PATH, CURR_DIR); - len = lstrlenA(CURR_DIR); - - if(len && (CURR_DIR[len-1] == '\\')) - CURR_DIR[len-1] = 0; - - createTestFile("a.txt"); - createTestFile("b.txt"); - CreateDirectoryA("testdir", NULL); - createTestFile("testdir\\c.txt"); - createTestFile("testdir\\d.txt"); -} - -static void delete_test_files(void) -{ - DeleteFileA("a.txt"); - DeleteFileA("b.txt"); - DeleteFileA("testdir\\c.txt"); - DeleteFileA("testdir\\d.txt"); - RemoveDirectoryA("testdir"); - - DeleteFileA("extract.cab"); -} - -/* FCI callbacks */ - -static void *mem_alloc(ULONG cb) -{ - return HeapAlloc(GetProcessHeap(), 0, cb); -} - -static void mem_free(void *memory) -{ - HeapFree(GetProcessHeap(), 0, memory); -} - -static BOOL get_next_cabinet(PCCAB pccab, ULONG cbPrevCab, void *pv) -{ - return TRUE; -} - -static long progress(UINT typeStatus, ULONG cb1, ULONG cb2, void *pv) -{ - return 0; -} - -static int file_placed(PCCAB pccab, char *pszFile, long cbFile, - BOOL fContinuation, void *pv) -{ - return 0; -} - -static INT_PTR fci_open(char *pszFile, int oflag, int pmode, int *err, void *pv) -{ - HANDLE handle; - DWORD dwAccess = 0; - DWORD dwShareMode = 0; - DWORD dwCreateDisposition = OPEN_EXISTING; - - dwAccess = GENERIC_READ | GENERIC_WRITE; - /* FILE_SHARE_DELETE is not supported by Windows Me/98/95 */ - dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; - - if (GetFileAttributesA(pszFile) != INVALID_FILE_ATTRIBUTES) - dwCreateDisposition = OPEN_EXISTING; - else - dwCreateDisposition = CREATE_NEW; - - handle = CreateFileA(pszFile, dwAccess, dwShareMode, NULL, - dwCreateDisposition, 0, NULL); - - ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszFile); - - return (INT_PTR)handle; -} - -static UINT fci_read(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD dwRead; - BOOL res; - - res = ReadFile(handle, memory, cb, &dwRead, NULL); - ok(res, "Failed to ReadFile\n"); - - return dwRead; -} - -static UINT fci_write(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD dwWritten; - BOOL res; - - res = WriteFile(handle, memory, cb, &dwWritten, NULL); - ok(res, "Failed to WriteFile\n"); - - return dwWritten; -} - -static int fci_close(INT_PTR hf, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - ok(CloseHandle(handle), "Failed to CloseHandle\n"); - - return 0; -} - -static long fci_seek(INT_PTR hf, long dist, int seektype, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD ret; - - ret = SetFilePointer(handle, dist, NULL, seektype); - ok(ret != INVALID_SET_FILE_POINTER, "Failed to SetFilePointer\n"); - - return ret; -} - -static int fci_delete(char *pszFile, int *err, void *pv) -{ - BOOL ret = DeleteFileA(pszFile); - ok(ret, "Failed to DeleteFile %s\n", pszFile); - - return 0; -} - -static BOOL get_temp_file(char *pszTempName, int cbTempName, void *pv) -{ - LPSTR tempname; - - tempname = HeapAlloc(GetProcessHeap(), 0, MAX_PATH); - GetTempFileNameA(".", "xx", 0, tempname); - - if (tempname && (strlen(tempname) < (unsigned)cbTempName)) - { - lstrcpyA(pszTempName, tempname); - HeapFree(GetProcessHeap(), 0, tempname); - return TRUE; - } - - HeapFree(GetProcessHeap(), 0, tempname); - - return FALSE; -} - -static INT_PTR get_open_info(char *pszName, USHORT *pdate, USHORT *ptime, - USHORT *pattribs, int *err, void *pv) -{ - BY_HANDLE_FILE_INFORMATION finfo; - FILETIME filetime; - HANDLE handle; - DWORD attrs; - BOOL res; - - handle = CreateFile(pszName, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); - - ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszName); - - res = GetFileInformationByHandle(handle, &finfo); - ok(res, "Expected GetFileInformationByHandle to succeed\n"); - - FileTimeToLocalFileTime(&finfo.ftLastWriteTime, &filetime); - FileTimeToDosDateTime(&filetime, pdate, ptime); - - attrs = GetFileAttributes(pszName); - ok(attrs != INVALID_FILE_ATTRIBUTES, "Failed to GetFileAttributes\n"); - /* fixme: should convert attrs to *pattribs, make sure - * have a test that catches the fact that we don't? - */ - - return (INT_PTR)handle; -} - -static void add_file(HFCI hfci, char *file) -{ - char path[MAX_PATH]; - BOOL res; - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, file); - - res = FCIAddFile(hfci, path, file, FALSE, get_next_cabinet, progress, - get_open_info, tcompTYPE_MSZIP); - ok(res, "Expected FCIAddFile to succeed\n"); -} - -static void set_cab_parameters(PCCAB pCabParams) -{ - ZeroMemory(pCabParams, sizeof(CCAB)); - - pCabParams->cb = MEDIA_SIZE; - pCabParams->cbFolderThresh = FOLDER_THRESHOLD; - pCabParams->setID = 0xbeef; - lstrcpyA(pCabParams->szCabPath, CURR_DIR); - lstrcatA(pCabParams->szCabPath, "\\"); - lstrcpyA(pCabParams->szCab, "extract.cab"); -} - -static void create_cab_file(void) -{ - CCAB cabParams; - HFCI hfci; - ERF erf; - static CHAR a_txt[] = "a.txt", - b_txt[] = "b.txt", - testdir_c_txt[] = "testdir\\c.txt", - testdir_d_txt[] = "testdir\\d.txt"; - BOOL res; - - set_cab_parameters(&cabParams); - - hfci = FCICreate(&erf, file_placed, mem_alloc, mem_free, fci_open, - fci_read, fci_write, fci_close, fci_seek, fci_delete, - get_temp_file, &cabParams, NULL); - - ok(hfci != NULL, "Failed to create an FCI context\n"); - - add_file(hfci, a_txt); - add_file(hfci, b_txt); - add_file(hfci, testdir_c_txt); - add_file(hfci, testdir_d_txt); - - res = FCIFlushCabinet(hfci, FALSE, get_next_cabinet, progress); - ok(res, "Failed to flush the cabinet\n"); - - res = FCIDestroy(hfci); - ok(res, "Failed to destroy the cabinet\n"); -} - -static void test_FDIIsCabinet(void) -{ - ERF erf; - BOOL ret; - HFDI hfdi; - INT_PTR fd; - FDICABINETINFO cabinfo; - char temp[] = "temp.txt"; - char extract[] = "extract.cab"; - - create_test_files(); - create_cab_file(); - - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, fdi_read, - fdi_write, fdi_close, fdi_seek, - cpuUNKNOWN, &erf); - ok(hfdi != NULL, "Expected non-NULL context\n"); - - /* native crashes if hfdi or cabinfo are NULL or invalid */ - - /* invalid file handle */ - ZeroMemory(&cabinfo, sizeof(FDICABINETINFO)); - SetLastError(0xdeadbeef); - ret = FDIIsCabinet(hfdi, (int)INVALID_HANDLE_VALUE, &cabinfo); - ok(ret == FALSE, "Expected FALSE, got %d\n", ret); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - ok(cabinfo.cbCabinet == 0, "Expected 0, got %ld\n", cabinfo.cbCabinet); - ok(cabinfo.cFiles == 0, "Expected 0, got %d\n", cabinfo.cFiles); - ok(cabinfo.cFolders == 0, "Expected 0, got %d\n", cabinfo.cFolders); - ok(cabinfo.iCabinet == 0, "Expected 0, got %d\n", cabinfo.iCabinet); - ok(cabinfo.setID == 0, "Expected 0, got %d\n", cabinfo.setID); - - createTestFile("temp.txt"); - fd = fdi_open(temp, 0, 0); - - /* file handle doesn't point to a cabinet */ - ZeroMemory(&cabinfo, sizeof(FDICABINETINFO)); - SetLastError(0xdeadbeef); - ret = FDIIsCabinet(hfdi, fd, &cabinfo); - ok(ret == FALSE, "Expected FALSE, got %d\n", ret); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok(cabinfo.cbCabinet == 0, "Expected 0, got %ld\n", cabinfo.cbCabinet); - ok(cabinfo.cFiles == 0, "Expected 0, got %d\n", cabinfo.cFiles); - ok(cabinfo.cFolders == 0, "Expected 0, got %d\n", cabinfo.cFolders); - ok(cabinfo.iCabinet == 0, "Expected 0, got %d\n", cabinfo.iCabinet); - ok(cabinfo.setID == 0, "Expected 0, got %d\n", cabinfo.setID); - - fdi_close(fd); - DeleteFileA("temp.txt"); - - /* try a real cab */ - fd = fdi_open(extract, 0, 0); - ZeroMemory(&cabinfo, sizeof(FDICABINETINFO)); - SetLastError(0xdeadbeef); - ret = FDIIsCabinet(hfdi, fd, &cabinfo); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", GetLastError()); - ok(cabinfo.cFiles == 4, "Expected 4, got %d\n", cabinfo.cFiles); - ok(cabinfo.cFolders == 1, "Expected 1, got %d\n", cabinfo.cFolders); - ok(cabinfo.setID == 0xbeef, "Expected 0xbeef, got %d\n", cabinfo.setID); - todo_wine - { - ok(cabinfo.cbCabinet == 182, "Expected 182, got %ld\n", cabinfo.cbCabinet); - ok(cabinfo.iCabinet == 0, "Expected 0, got %d\n", cabinfo.iCabinet); - } - - fdi_close(fd); - FDIDestroy(hfdi); - delete_test_files(); -} - - -INT_PTR __cdecl CopyProgress (FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin) -{ - return 0; -} - -static void test_FDICopy(void) -{ - CCAB cabParams; - HFDI hfdi; - HFCI hfci; - ERF erf; - BOOL ret; - char name[] = "extract.cab"; - char path[MAX_PATH + 1]; - - GetCurrentDirectoryA(MAX_PATH, path); - - set_cab_parameters(&cabParams); - - hfci = FCICreate(&erf, file_placed, mem_alloc, mem_free, fci_open, - fci_read, fci_write, fci_close, fci_seek, - fci_delete, get_temp_file, &cabParams, NULL); - - ret = FCIFlushCabinet(hfci, FALSE, get_next_cabinet, progress); - ok(ret, "Failed to flush the cabinet\n"); - - FCIDestroy(hfci); - - hfdi = FDICreate(fdi_alloc, fdi_free, fdi_open, fdi_read, - fdi_write, fdi_close, fdi_seek, - cpuUNKNOWN, &erf); - - /* cabinet with no files or folders */ - SetLastError(0xdeadbeef); - ret = FDICopy(hfdi, name, path, 0, CopyProgress, NULL, 0); - ok(ret == FALSE, "Expected FALSE, got %d\n", ret); - todo_wine - { - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - } - - FDIDestroy(hfdi); - DeleteFileA(name); -} - - -START_TEST(fdi) -{ - test_FDICreate(); - test_FDIDestroy(); - test_FDIIsCabinet(); - test_FDICopy(); -} diff --git a/rostests/winetests/cabinet/testlist.c b/rostests/winetests/cabinet/testlist.c deleted file mode 100644 index 992cd35d4ef..00000000000 --- a/rostests/winetests/cabinet/testlist.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_extract(void); -extern void func_fdi(void); - -const struct test winetest_testlist[] = -{ - { "extract", func_extract }, - { "fdi", func_fdi }, - { 0, 0 } -}; diff --git a/rostests/winetests/comcat/comcat.c b/rostests/winetests/comcat/comcat.c deleted file mode 100644 index 914cbe8b2a2..00000000000 --- a/rostests/winetests/comcat/comcat.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * tests for comcat functions - * - * Copyright 2006 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 - */ - -#define COBJMACROS - -#include -#include - -#include "objbase.h" -#include "comcat.h" - -#include "wine/test.h" - -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x \n", hr) - -static void register_testentry(void) -{ - HKEY hkey,hkey2; - - RegCreateKeyA(HKEY_CLASSES_ROOT,"CLSID\\{deadcafe-beed-bead-dead-cafebeaddead}", - &hkey); - RegSetValueA(hkey,NULL,REG_SZ,"ComCat Test key",16); - RegCreateKeyA(hkey, - "Implemented Categories\\{deadcafe-0000-0000-0000-000000000000}", - &hkey2); - - RegCloseKey(hkey); - RegCloseKey(hkey2); -} - -static void unregister_testentry(void) -{ - RegDeleteKeyA(HKEY_CLASSES_ROOT, - "CLSID\\{deadcafe-beed-bead-dead-cafebeaddead}\\Implemented Categories\\{deadcafe-0000-0000-0000-000000000000}"); - RegDeleteKeyA(HKEY_CLASSES_ROOT, - "CLSID\\{deadcafe-beed-bead-dead-cafebeaddead}\\Implemented Categories"); - RegDeleteKeyA(HKEY_CLASSES_ROOT, - "CLSID\\{deadcafe-beed-bead-dead-cafebeaddead}"); -} - -static void do_enum(void) -{ - HRESULT hr; - REFCLSID rclsid = &CLSID_StdComponentCategoriesMgr; - ICatInformation *pICat = (ICatInformation*)0xdeadbeef; - GUID the_guid[1]; - GUID the_cat[1]; - GUID wanted_guid; - ULONG fetched = -1; - - static WCHAR szCatID[] = { - '{', - 'd','e','a','d','c','a','f','e', - '-','0','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 WCHAR szGuid[] = { - '{', - 'd','e','a','d','c','a','f','e','-', - 'b','e','e','d','-', - 'b','e','a','d','-', - 'd','e','a','d','-', - 'c','a','f','e','b','e','a','d','d','e','a','d', - '}',0}; - - IEnumCLSID *pIEnum =(IEnumCLSID*)0xdeadcafe; - - CLSIDFromString((LPOLESTR)szCatID,the_cat); - CLSIDFromString((LPOLESTR)szGuid,&wanted_guid); - - OleInitialize(NULL); - - hr = CoCreateInstance(rclsid,NULL,CLSCTX_INPROC_SERVER, - &IID_ICatInformation, (void **)&pICat); - ok_ole_success(hr, "CoCreateInstance"); - - hr = ICatInformation_EnumClassesOfCategories(pICat, -1, NULL, -1, NULL, - &pIEnum); - ok_ole_success(hr,"ICatInformation_EnumClassesOfCategories"); - - IEnumGUID_Release(pIEnum); - - hr = ICatInformation_EnumClassesOfCategories(pICat, 1, the_cat, -1, NULL, - &pIEnum); - ok_ole_success(hr,"ICatInformation_EnumClassesOfCategories"); - - hr = IEnumGUID_Next(pIEnum,1,the_guid, &fetched); - ok (fetched == 0,"Fetched wrong number of guids %u\n",fetched); - IEnumGUID_Release(pIEnum); - - register_testentry(); - hr = ICatInformation_EnumClassesOfCategories(pICat, 1, the_cat, -1, NULL, - &pIEnum); - ok_ole_success(hr,"ICatInformation_EnumClassesOfCategories"); - - hr = IEnumGUID_Next(pIEnum,1,the_guid, &fetched); - ok (fetched == 1,"Fetched wrong number of guids %u\n",fetched); - ok (IsEqualGUID(the_guid,&wanted_guid),"Guids do not match\n"); - - IEnumGUID_Release(pIEnum); - ICatInformation_Release(pICat); - unregister_testentry(); - - OleUninitialize(); -} - - -START_TEST(comcat) -{ - do_enum(); -} diff --git a/rostests/winetests/comcat/comcat.rbuild b/rostests/winetests/comcat/comcat.rbuild deleted file mode 100644 index db9616cbad7..00000000000 --- a/rostests/winetests/comcat/comcat.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - - . - comcat.c - testlist.c - wine - ole32 - advapi32 - kernel32 - uuid - ntdll - - diff --git a/rostests/winetests/comcat/testlist.c b/rostests/winetests/comcat/testlist.c deleted file mode 100644 index ba94e96b2a6..00000000000 --- a/rostests/winetests/comcat/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_comcat(void); - -const struct test winetest_testlist[] = -{ - { "comcat", func_comcat }, - { 0, 0 } -}; diff --git a/rostests/winetests/comctl32/bmp128x15.bmp b/rostests/winetests/comctl32/bmp128x15.bmp deleted file mode 100644 index 85061b45f380428d441adcacaf64c13d5e8c7277..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmZ?rHDh4_gEAng0mKbJ%n!tj3=oL}%s>tl2momihJXf$;)VvW9uNs+G8{N?07wHF d4FAE1;s1XS3y6UbBn0A*g3%Bd4S^vW0szu%(|`Z~ diff --git a/rostests/winetests/comctl32/bmp80x15.bmp b/rostests/winetests/comctl32/bmp80x15.bmp deleted file mode 100644 index c524d71b9a61ff75cee2a811f2b5e6d7942da479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 718 zcmZ?rJ;%fV24z4}1Be5Fm>-B48CZZM149H<9>f-aVi22wp#h8-8X7<>AO=Dp -#include -#include - -#include "wine/test.h" - -static HWND hComboExParentWnd; -static HINSTANCE hMainHinst; -static const char ComboExTestClass[] = "ComboExTestClass"; - -#define MAX_CHARS 100 -static char *textBuffer = NULL; - -static HWND createComboEx(DWORD style) { - return CreateWindowExA(0, WC_COMBOBOXEXA, NULL, style, 0, 0, 300, 300, - hComboExParentWnd, NULL, hMainHinst, NULL); -} - -static LONG addItem(HWND cbex, int idx, LPTSTR text) { - COMBOBOXEXITEM cbexItem; - memset(&cbexItem, 0x00, sizeof(cbexItem)); - cbexItem.mask = CBEIF_TEXT; - cbexItem.iItem = idx; - cbexItem.pszText = text; - cbexItem.cchTextMax = 0; - return (LONG)SendMessage(cbex, CBEM_INSERTITEM, 0,(LPARAM)&cbexItem); -} - -static LONG setItem(HWND cbex, int idx, LPTSTR text) { - COMBOBOXEXITEM cbexItem; - memset(&cbexItem, 0x00, sizeof(cbexItem)); - cbexItem.mask = CBEIF_TEXT; - cbexItem.iItem = idx; - cbexItem.pszText = text; - cbexItem.cchTextMax = 0; - return (LONG)SendMessage(cbex, CBEM_SETITEM, 0,(LPARAM)&cbexItem); -} - -static LONG delItem(HWND cbex, int idx) { - return (LONG)SendMessage(cbex, CBEM_DELETEITEM, (LPARAM)idx, 0); -} - -static LONG getItem(HWND cbex, int idx, COMBOBOXEXITEM *cbItem) { - memset(cbItem, 0x00, sizeof(COMBOBOXEXITEM)); - cbItem->mask = CBEIF_TEXT; - cbItem->pszText = textBuffer; - cbItem->iItem = idx; - cbItem->cchTextMax = 100; - return (LONG)SendMessage(cbex, CBEM_GETITEM, 0, (LPARAM)cbItem); -} - -static void test_comboboxex(void) { - HWND myHwnd = 0; - LONG res = -1; - COMBOBOXEXITEM cbexItem; - static TCHAR first_item[] = {'F','i','r','s','t',' ','I','t','e','m',0}, - second_item[] = {'S','e','c','o','n','d',' ','I','t','e','m',0}, - third_item[] = {'T','h','i','r','d',' ','I','t','e','m',0}, - middle_item[] = {'B','e','t','w','e','e','n',' ','F','i','r','s','t',' ','a','n','d',' ', - 'S','e','c','o','n','d',' ','I','t','e','m','s',0}, - replacement_item[] = {'B','e','t','w','e','e','n',' ','F','i','r','s','t',' ','a','n','d',' ', - 'S','e','c','o','n','d',' ','I','t','e','m','s',0}, - out_of_range_item[] = {'O','u','t',' ','o','f',' ','R','a','n','g','e',' ','I','t','e','m',0}; - - /* Allocate space for result */ - textBuffer = HeapAlloc(GetProcessHeap(), 0, MAX_CHARS); - - /* Basic comboboxex test */ - myHwnd = createComboEx(WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWN); - - /* Add items onto the end of the combobox */ - res = addItem(myHwnd, -1, first_item); - ok(res == 0, "Adding simple item failed (%d)\n", res); - res = addItem(myHwnd, -1, second_item); - ok(res == 1, "Adding simple item failed (%d)\n", res); - res = addItem(myHwnd, 2, third_item); - ok(res == 2, "Adding simple item failed (%d)\n", res); - res = addItem(myHwnd, 1, middle_item); - ok(res == 1, "Inserting simple item failed (%d)\n", res); - - /* Add an item completely out of range */ - res = addItem(myHwnd, 99, out_of_range_item); - ok(res == -1, "Adding using out of range index worked unexpectedly (%d)\n", res); - res = addItem(myHwnd, 5, out_of_range_item); - ok(res == -1, "Adding using out of range index worked unexpectedly (%d)\n", res); - /* Removed: Causes traps on Windows XP - res = addItem(myHwnd, -2, "Out Of Range Item"); - ok(res == -1, "Adding out of range worked unexpectedly (%ld)\n", res); - */ - - /* Get an item completely out of range */ - res = getItem(myHwnd, 99, &cbexItem); - ok(res == 0, "Getting item using out of range index worked unexpectedly (%d, %s)\n", res, cbexItem.pszText); - res = getItem(myHwnd, 4, &cbexItem); - ok(res == 0, "Getting item using out of range index worked unexpectedly (%d, %s)\n", res, cbexItem.pszText); - res = getItem(myHwnd, -2, &cbexItem); - ok(res == 0, "Getting item using out of range index worked unexpectedly (%d, %s)\n", res, cbexItem.pszText); - - /* Get an item in range */ - res = getItem(myHwnd, 0, &cbexItem); - ok(res != 0, "Getting item using valid index failed unexpectedly (%d)\n", res); - ok(strcmp(first_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); - - res = getItem(myHwnd, 1, &cbexItem); - ok(res != 0, "Getting item using valid index failed unexpectedly (%d)\n", res); - ok(strcmp(middle_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); - - res = getItem(myHwnd, 2, &cbexItem); - ok(res != 0, "Getting item using valid index failed unexpectedly (%d)\n", res); - ok(strcmp(second_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); - - res = getItem(myHwnd, 3, &cbexItem); - ok(res != 0, "Getting item using valid index failed unexpectedly (%d)\n", res); - ok(strcmp(third_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); - - /* Set an item completely out of range */ - res = setItem(myHwnd, 99, replacement_item); - ok(res == 0, "Setting item using out of range index worked unexpectedly (%d)\n", res); - res = setItem(myHwnd, 4, replacement_item); - ok(res == 0, "Setting item using out of range index worked unexpectedly (%d)\n", res); - res = setItem(myHwnd, -2, replacement_item); - ok(res == 0, "Setting item using out of range index worked unexpectedly (%d)\n", res); - - /* Set an item in range */ - res = setItem(myHwnd, 0, replacement_item); - ok(res != 0, "Setting first item failed (%d)\n", res); - res = setItem(myHwnd, 3, replacement_item); - ok(res != 0, "Setting last item failed (%d)\n", res); - - /* Remove items completely out of range (4 items in control at this point) */ - res = delItem(myHwnd, -1); - ok(res == CB_ERR, "Deleting using out of range index worked unexpectedly (%d)\n", res); - res = delItem(myHwnd, 4); - ok(res == CB_ERR, "Deleting using out of range index worked unexpectedly (%d)\n", res); - - /* Remove items in range (4 items in control at this point) */ - res = delItem(myHwnd, 3); - ok(res == 3, "Deleting using out of range index failed (%d)\n", res); - res = delItem(myHwnd, 0); - ok(res == 2, "Deleting using out of range index failed (%d)\n", res); - res = delItem(myHwnd, 0); - ok(res == 1, "Deleting using out of range index failed (%d)\n", res); - res = delItem(myHwnd, 0); - ok(res == 0, "Deleting using out of range index failed (%d)\n", res); - - /* Remove from an empty box */ - res = delItem(myHwnd, 0); - ok(res == CB_ERR, "Deleting using out of range index worked unexpectedly (%d)\n", res); - - - /* Cleanup */ - HeapFree(GetProcessHeap(), 0, textBuffer); - DestroyWindow(myHwnd); -} - -static void test_WM_LBUTTONDOWN(void) -{ - HWND hComboEx, hCombo, hEdit, hList; - COMBOBOXINFO cbInfo; - UINT x, y, item_height; - LRESULT result; - int i, idx; - RECT rect; - WCHAR buffer[3]; - static const UINT choices[] = {8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72}; - static const WCHAR stringFormat[] = {'%','2','d','\0'}; - - hComboEx = CreateWindowExA(0, WC_COMBOBOXEXA, NULL, - WS_VISIBLE|WS_CHILD|CBS_DROPDOWN, 0, 0, 200, 150, - hComboExParentWnd, NULL, hMainHinst, NULL); - - for (i = 0; i < sizeof(choices)/sizeof(UINT); i++){ - COMBOBOXEXITEMW cbexItem; - wsprintfW(buffer, stringFormat, choices[i]); - - memset(&cbexItem, 0x00, sizeof(cbexItem)); - cbexItem.mask = CBEIF_TEXT; - cbexItem.iItem = i; - cbexItem.pszText = buffer; - cbexItem.cchTextMax = 0; - ok(SendMessageW(hComboEx, CBEM_INSERTITEMW, 0, (LPARAM)&cbexItem) >= 0, - "Failed to add item %d\n", i); - } - - hCombo = (HWND)SendMessage(hComboEx, CBEM_GETCOMBOCONTROL, 0, 0); - hEdit = (HWND)SendMessage(hComboEx, CBEM_GETEDITCONTROL, 0, 0); - - cbInfo.cbSize = sizeof(COMBOBOXINFO); - result = SendMessage(hCombo, CB_GETCOMBOBOXINFO, 0, (LPARAM)&cbInfo); - ok(result, "Failed to get combobox info structure. LastError=%d\n", - GetLastError()); - hList = cbInfo.hwndList; - - trace("hWnd=%p, hComboEx=%p, hCombo=%p, hList=%p, hEdit=%p\n", - hComboExParentWnd, hComboEx, hCombo, hList, hEdit); - ok(GetFocus() == hComboExParentWnd, - "Focus not on Main Window, instead on %p\n", GetFocus()); - - /* Click on the button to drop down the list */ - x = cbInfo.rcButton.left + (cbInfo.rcButton.right-cbInfo.rcButton.left)/2; - y = cbInfo.rcButton.top + (cbInfo.rcButton.bottom-cbInfo.rcButton.top)/2; - result = SendMessage(hCombo, WM_LBUTTONDOWN, 0, MAKELPARAM(x, y)); - ok(result, "WM_LBUTTONDOWN was not processed. LastError=%d\n", - GetLastError()); - ok(GetFocus() == hCombo, - "Focus not on ComboBoxEx's ComboBox Control, instead on %p\n", - GetFocus()); - ok(SendMessage(hComboEx, CB_GETDROPPEDSTATE, 0, 0), - "The dropdown list should have appeared after clicking the button.\n"); - idx = SendMessage(hCombo, CB_GETTOPINDEX, 0, 0); - ok(idx == 0, "For TopIndex expected %d, got %d\n", 0, idx); - - result = SendMessage(hCombo, WM_LBUTTONUP, 0, MAKELPARAM(x, y)); - ok(result, "WM_LBUTTONUP was not processed. LastError=%d\n", - GetLastError()); - ok(GetFocus() == hCombo, - "Focus not on ComboBoxEx's ComboBox Control, instead on %p\n", - GetFocus()); - - /* Click on the 5th item in the list */ - item_height = SendMessage(hCombo, CB_GETITEMHEIGHT, 0, 0); - ok(GetClientRect(hList, &rect), "Failed to get list's client rect.\n"); - x = rect.left + (rect.right-rect.left)/2; - y = item_height/2 + item_height*4; - result = SendMessage(hList, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); - ok(!result, "WM_MOUSEMOVE was not processed. LastError=%d\n", - GetLastError()); - ok(GetFocus() == hCombo, - "Focus not on ComboBoxEx's ComboBox Control, instead on %p\n", - GetFocus()); - - result = SendMessage(hList, WM_LBUTTONDOWN, 0, MAKELPARAM(x, y)); - ok(!result, "WM_LBUTTONDOWN was not processed. LastError=%d\n", - GetLastError()); - ok(GetFocus() == hCombo, - "Focus not on ComboBoxEx's ComboBox Control, instead on %p\n", - GetFocus()); - ok(SendMessage(hComboEx, CB_GETDROPPEDSTATE, 0, 0), - "The dropdown list should still be visible.\n"); - - result = SendMessage(hList, WM_LBUTTONUP, 0, MAKELPARAM(x, y)); - ok(!result, "WM_LBUTTONUP was not processed. LastError=%d\n", - GetLastError()); - todo_wine ok(GetFocus() == hEdit, - "Focus not on ComboBoxEx's Edit Control, instead on %p\n", - GetFocus()); - ok(!SendMessage(hCombo, CB_GETDROPPEDSTATE, 0, 0), - "The dropdown list should have been rolled up.\n"); - idx = SendMessage(hComboEx, CB_GETCURSEL, 0, 0); - ok(idx == 4, "Current Selection: expected %d, got %d\n", 4, idx); - - DestroyWindow(hComboEx); -} - -static LRESULT CALLBACK ComboExTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProcA(hWnd, msg, wParam, lParam); - } - - return 0L; -} - -static int init(void) -{ - HMODULE hComctl32; - BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); - WNDCLASSA wc; - INITCOMMONCONTROLSEX iccex; - - hComctl32 = GetModuleHandleA("comctl32.dll"); - pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); - if (!pInitCommonControlsEx) - { - skip("InitCommonControlsEx() is missing. Skipping the tests\n"); - return 0; - } - iccex.dwSize = sizeof(iccex); - iccex.dwICC = ICC_USEREX_CLASSES; - pInitCommonControlsEx(&iccex); - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_ARROW); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = ComboExTestClass; - wc.lpfnWndProc = ComboExTestWndProc; - RegisterClassA(&wc); - - hComboExParentWnd = CreateWindowExA(0, ComboExTestClass, "ComboEx test", WS_OVERLAPPEDWINDOW|WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, GetModuleHandleA(NULL), 0); - assert(hComboExParentWnd != NULL); - - hMainHinst = GetModuleHandleA(NULL); - return 1; -} - -static void cleanup(void) -{ - MSG msg; - - PostMessageA(hComboExParentWnd, WM_CLOSE, 0, 0); - while (GetMessageA(&msg,0,0,0)) { - TranslateMessage(&msg); - DispatchMessageA(&msg); - } - - UnregisterClassA(ComboExTestClass, GetModuleHandleA(NULL)); -} - -START_TEST(comboex) -{ - if (!init()) - return; - - test_comboboxex(); - test_WM_LBUTTONDOWN(); - - cleanup(); -} diff --git a/rostests/winetests/comctl32/comctl32.rbuild b/rostests/winetests/comctl32/comctl32.rbuild deleted file mode 100644 index 6ec4cc15a81..00000000000 --- a/rostests/winetests/comctl32/comctl32.rbuild +++ /dev/null @@ -1,38 +0,0 @@ - - - - - . - comboex.c - datetime.c - dpa.c - header.c - imagelist.c - listview.c - misc.c - monthcal.c - mru.c - msg.c - progress.c - propsheet.c - rebar.c - status.c - subclass.c - tab.c - toolbar.c - tooltips.c - trackbar.c - treeview.c - updown.c - rsrc.rc - testlist.c - wine - comctl32 - ole32 - user32 - gdi32 - advapi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/comctl32/comctl32_ros.diff b/rostests/winetests/comctl32/comctl32_ros.diff deleted file mode 100644 index d8b962d3ae0..00000000000 --- a/rostests/winetests/comctl32/comctl32_ros.diff +++ /dev/null @@ -1,37 +0,0 @@ -Index: dpa.c -=================================================================== ---- dpa.c (revision 25766) -+++ dpa.c (working copy) -@@ -25,6 +25,7 @@ - - #include "windef.h" - #include "winbase.h" -+#include "wingdi.h" - #include "winuser.h" - #include "commctrl.h" - #include "objidl.h" -Index: monthcal.c -=================================================================== ---- monthcal.c (revision 25766) -+++ monthcal.c (working copy) -@@ -23,6 +23,7 @@ - - #include "windef.h" - #include "winbase.h" -+#include "wingdi.h" - #include "winuser.h" - - #include "commctrl.h" -Index: mru.c -=================================================================== ---- mru.c (revision 25766) -+++ mru.c (working copy) -@@ -75,7 +75,7 @@ - - - /* Based on RegDeleteTreeW from dlls/advapi32/registry.c */ --static LSTATUS mru_RegDeleteTreeA(HKEY hKey, LPCSTR lpszSubKey) -+static LONG mru_RegDeleteTreeA(HKEY hKey, LPCSTR lpszSubKey) - { - LONG ret; - DWORD dwMaxSubkeyLen, dwMaxValueLen; diff --git a/rostests/winetests/comctl32/datetime.c b/rostests/winetests/comctl32/datetime.c deleted file mode 100644 index b194cc1b6ae..00000000000 --- a/rostests/winetests/comctl32/datetime.c +++ /dev/null @@ -1,596 +0,0 @@ -/* Unit test suite for datetime control. -* -* Copyright 2007 Kanit Therdsteerasukdi -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or (at your option) any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* 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/test.h" -#include "msg.h" - -#define expect(EXPECTED, GOT) ok((GOT)==(EXPECTED), "Expected %d, got %ld\n", (EXPECTED), (GOT)) - -#define expect_unsuccess(EXPECTED, GOT) ok((GOT)==(EXPECTED), "Expected %d(unsuccessful), got %ld(successful)\n", (EXPECTED), (GOT)) - -#define NUM_MSG_SEQUENCES 1 -#define DATETIME_SEQ_INDEX 0 - -static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; - -static const struct message test_dtm_set_format_seq[] = { - { DTM_SETFORMATA, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { DTM_SETFORMATA, sent|wparam, 0x00000000 }, - { 0 } -}; - -static const struct message test_dtm_set_and_get_mccolor_seq[] = { - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000000, 0x00ffffff }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000000, 0x00dcb464 }, - { DTM_GETMCCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000004, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000004, 0x00ffffff }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000004, 0x00dcb464 }, - { DTM_GETMCCOLOR, sent|wparam|lparam, 0x00000004, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000001, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000001, 0x00ffffff }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000001, 0x00dcb464 }, - { DTM_GETMCCOLOR, sent|wparam|lparam, 0x00000001, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000002, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000002, 0x00ffffff }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000002, 0x00dcb464 }, - { DTM_GETMCCOLOR, sent|wparam|lparam, 0x00000002, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000003, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000003, 0x00ffffff }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000003, 0x00dcb464 }, - { DTM_GETMCCOLOR, sent|wparam|lparam, 0x00000003, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000005, 0x00000000 }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000005, 0x00ffffff }, - { DTM_SETMCCOLOR, sent|wparam|lparam, 0x00000005, 0x00dcb464 }, - { DTM_GETMCCOLOR, sent|wparam|lparam, 0x00000005, 0x00000000 }, - { 0 } -}; - -static const struct message test_dtm_set_and_get_mcfont_seq[] = { - { DTM_SETMCFONT, sent|lparam, 0, 0x00000001 }, - { DTM_GETMCFONT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static const struct message test_dtm_get_monthcal_seq[] = { - { DTM_GETMONTHCAL, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static const struct message test_dtm_set_and_get_range_seq[] = { - { DTM_SETRANGE, sent|wparam, 0x00000001 }, - { DTM_GETRANGE, sent|wparam, 0x00000000 }, - { DTM_SETRANGE, sent|wparam, 0x00000002 }, - { DTM_SETRANGE, sent|wparam, 0x00000002 }, - { DTM_GETRANGE, sent|wparam, 0x00000000}, - { DTM_SETRANGE, sent|wparam, 0x00000001 }, - { DTM_SETRANGE, sent|wparam, 0x00000003 }, - { DTM_SETRANGE, sent|wparam, 0x00000003 }, - { DTM_GETRANGE, sent|wparam, 0x00000000 }, - { DTM_SETRANGE, sent|wparam, 0x00000003 }, - { DTM_GETRANGE, sent|wparam, 0x00000000 }, - { DTM_SETRANGE, sent|wparam, 0x00000003 }, - { DTM_GETRANGE, sent|wparam, 0x00000000 }, - { 0 } -}; - -static const struct message test_dtm_set_range_swap_min_max_seq[] = { - { DTM_SETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_GETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_SETRANGE, sent|wparam, 0x00000003 }, - { DTM_GETRANGE, sent|wparam, 0x00000000 }, - { DTM_SETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_GETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_SETRANGE, sent|wparam, 0x00000003 }, - { DTM_GETRANGE, sent|wparam, 0x00000000 }, - { DTM_SETRANGE, sent|wparam, 0x00000003 }, - { DTM_GETRANGE, sent|wparam, 0x00000000 }, - { DTM_SETRANGE, sent|wparam, 0x00000003 }, - { DTM_GETRANGE, sent|wparam, 0x00000000 }, - { 0 } -}; - -static const struct message test_dtm_set_and_get_system_time_seq[] = { - { DTM_SETSYSTEMTIME, sent|wparam, 0x00000001 }, - { 0x0090, sent|optional }, /* Vista */ - { WM_DESTROY, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { WM_NCDESTROY, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { DTM_SETSYSTEMTIME, sent|wparam, 0x00000001 }, - { DTM_GETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_SETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_SETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_SETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_GETSYSTEMTIME, sent|wparam, 0x00000000 }, - { DTM_SETSYSTEMTIME, sent|wparam, 0x00000000 }, - { 0 } -}; - -static const struct message destroy_window_seq[] = { - { 0x0090, sent|optional }, /* Vista */ - { WM_DESTROY, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { WM_NCDESTROY, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -struct subclass_info -{ - WNDPROC oldproc; -}; - -static LRESULT WINAPI datetime_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("datetime: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, DATETIME_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static HWND create_datetime_control(DWORD style, DWORD exstyle) -{ - struct subclass_info *info; - HWND hWndDateTime = NULL; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - hWndDateTime = CreateWindowEx(0, - DATETIMEPICK_CLASS, - NULL, - style, - 0,50,300,120, - NULL, - NULL, - NULL, - NULL); - - if (!hWndDateTime) { - HeapFree(GetProcessHeap(), 0, info); - return NULL; - } - - info->oldproc = (WNDPROC)SetWindowLongPtrA(hWndDateTime, GWLP_WNDPROC, - (LONG_PTR)datetime_subclass_proc); - SetWindowLongPtrA(hWndDateTime, GWLP_USERDATA, (LONG_PTR)info); - - return hWndDateTime; -} - -static void test_dtm_set_format(HWND hWndDateTime) -{ - CHAR txt[256]; - SYSTEMTIME systime; - LRESULT r; - - r = SendMessage(hWndDateTime, DTM_SETFORMAT, 0, (LPARAM)NULL); - expect(1, r); - - r = SendMessage(hWndDateTime, DTM_SETFORMAT, 0, - (LPARAM)"'Today is: 'hh':'m':'s dddd MMM dd', 'yyyy"); - expect(1, r); - - ok_sequence(sequences, DATETIME_SEQ_INDEX, test_dtm_set_format_seq, "test_dtm_set_format", FALSE); - - r = SendMessage(hWndDateTime, DTM_SETFORMAT, 0, - (LPARAM)"'hh' hh"); - expect(1, r); - ZeroMemory(&systime, sizeof(systime)); - systime.wYear = 2000; - systime.wMonth = systime.wDay = 1; - r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, 0, (LPARAM)&systime); - expect(1, r); - GetWindowText(hWndDateTime, txt, 256); - todo_wine ok(strcmp(txt, "hh 12") == 0, "String mismatch (\"%s\" vs \"hh 12\")\n", txt); - flush_sequences(sequences, NUM_MSG_SEQUENCES); -} - -static void test_mccolor_types(HWND hWndDateTime, int mccolor_type, const char* mccolor_name) -{ - LRESULT r; - COLORREF theColor, prevColor; - - theColor=RGB(0,0,0); - r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, mccolor_type, theColor); - ok(r != -1, "%s: Set RGB(0,0,0): Expected COLORREF of previous value, got %ld\n", mccolor_name, r); - prevColor=theColor; - theColor=RGB(255,255,255); - r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, mccolor_type, theColor); - ok(r==prevColor, "%s: Set RGB(255,255,255): Expected COLORREF of previous value, got %ld\n", mccolor_name, r); - prevColor=theColor; - theColor=RGB(100,180,220); - r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, mccolor_type, theColor); - ok(r==prevColor, "%s: Set RGB(100,180,220): Expected COLORREF of previous value, got %ld\n", mccolor_name, r); - r = SendMessage(hWndDateTime, DTM_GETMCCOLOR, mccolor_type, 0); - ok(r==theColor, "%s: GETMCCOLOR: Expected %d, got %ld\n", mccolor_name, theColor, r); -} - -static void test_dtm_set_and_get_mccolor(HWND hWndDateTime) -{ - test_mccolor_types(hWndDateTime, MCSC_BACKGROUND, "MCSC_BACKGROUND"); - test_mccolor_types(hWndDateTime, MCSC_MONTHBK, "MCSC_MONTHBK"); - test_mccolor_types(hWndDateTime, MCSC_TEXT, "MCSC_TEXT"); - test_mccolor_types(hWndDateTime, MCSC_TITLEBK, "MCSC_TITLEBK"); - test_mccolor_types(hWndDateTime, MCSC_TITLETEXT, "MCSC_TITLETEXT"); - test_mccolor_types(hWndDateTime, MCSC_TRAILINGTEXT, "MCSC_TRAILINGTEXT"); - - ok_sequence(sequences, DATETIME_SEQ_INDEX, test_dtm_set_and_get_mccolor_seq, "test_dtm_set_and_get_mccolor", FALSE); - flush_sequences(sequences, NUM_MSG_SEQUENCES); -} - -static void test_dtm_set_and_get_mcfont(HWND hWndDateTime) -{ - HFONT hFontOrig, hFontNew; - - hFontOrig = (HFONT)GetStockObject(DEFAULT_GUI_FONT); - SendMessage(hWndDateTime, DTM_SETMCFONT, (WPARAM)hFontOrig, TRUE); - hFontNew = (HFONT)SendMessage(hWndDateTime, DTM_GETMCFONT, 0, 0); - ok(hFontOrig == hFontNew, "Expected hFontOrig==hFontNew, hFontOrig=%p, hFontNew=%p\n", hFontOrig, hFontNew); - - ok_sequence(sequences, DATETIME_SEQ_INDEX, test_dtm_set_and_get_mcfont_seq, "test_dtm_set_and_get_mcfont", FALSE); - flush_sequences(sequences, NUM_MSG_SEQUENCES); -} - -static void test_dtm_get_monthcal(HWND hWndDateTime) -{ - LRESULT r; - - todo_wine { - r = SendMessage(hWndDateTime, DTM_GETMONTHCAL, 0, 0); - ok(r == (LPARAM)NULL, "Expected NULL(no child month calendar control), got %ld\n", r); - } - - ok_sequence(sequences, DATETIME_SEQ_INDEX, test_dtm_get_monthcal_seq, "test_dtm_get_monthcal", FALSE); - flush_sequences(sequences, NUM_MSG_SEQUENCES); -} - -static void fill_systime_struct(SYSTEMTIME *st, int year, int month, int dayofweek, int day, int hour, int minute, int second, int milliseconds) -{ - st->wYear = year; - st->wMonth = month; - st->wDayOfWeek = dayofweek; - st->wDay = day; - st->wHour = hour; - st->wMinute = minute; - st->wSecond = second; - st->wMilliseconds = milliseconds; -} - -static LPARAM compare_systime_date(SYSTEMTIME *st1, SYSTEMTIME *st2) -{ - return (st1->wYear == st2->wYear) - && (st1->wMonth == st2->wMonth) - && (st1->wDayOfWeek == st2->wDayOfWeek) - && (st1->wDay == st2->wDay); -} - -static LPARAM compare_systime_time(SYSTEMTIME *st1, SYSTEMTIME *st2) -{ - return (st1->wHour == st2->wHour) - && (st1->wMinute == st2->wMinute) - && (st1->wSecond == st2->wSecond) - && (st1->wMilliseconds == st2->wMilliseconds); -} - -static LPARAM compare_systime(SYSTEMTIME *st1, SYSTEMTIME *st2) -{ - if(!compare_systime_date(st1, st2)) - return 0; - - return compare_systime_time(st1, st2); -} - -#define expect_systime(ST1, ST2) ok(compare_systime((ST1), (ST2))==1, "ST1 != ST2\n") -#define expect_systime_date(ST1, ST2) ok(compare_systime_date((ST1), (ST2))==1, "ST1.date != ST2.date\n") -#define expect_systime_time(ST1, ST2) ok(compare_systime_time((ST1), (ST2))==1, "ST1.time != ST2.time\n") - -static void test_dtm_set_and_get_range(HWND hWndDateTime) -{ - LRESULT r; - SYSTEMTIME st[2]; - SYSTEMTIME getSt[2]; - - /* initialize st[0] to lowest possible value */ - fill_systime_struct(&st[0], 1601, 1, 0, 1, 0, 0, 0, 0); - /* initialize st[1] to all invalid numbers */ - fill_systime_struct(&st[1], 0, 0, 7, 0, 24, 60, 60, 1000); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN, (LPARAM)st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - ok(r == GDTR_MIN, "Expected %x, not %x(GDTR_MAX) or %x(GDTR_MIN | GDTR_MAX), got %lx\n", GDTR_MIN, GDTR_MAX, GDTR_MIN | GDTR_MAX, r); - expect_systime(&st[0], &getSt[0]); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MAX, (LPARAM)st); - expect_unsuccess(0, r); - - /* set st[0] to all invalid numbers */ - fill_systime_struct(&st[0], 0, 0, 7, 0, 24, 60, 60, 1000); - /* set st[1] to highest possible value */ - fill_systime_struct(&st[1], 30827, 12, 6, 31, 23, 59, 59, 999); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MAX, (LPARAM)st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - todo_wine { - ok(r == GDTR_MAX, "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MIN | GDTR_MAX), got %lx\n", GDTR_MAX, GDTR_MIN, GDTR_MIN | GDTR_MAX, r); - } - expect_systime(&st[1], &getSt[1]); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN, (LPARAM)st); - expect_unsuccess(0, r); - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st); - expect_unsuccess(0, r); - - /* set st[0] to highest possible value */ - fill_systime_struct(&st[0], 30827, 12, 6, 31, 23, 59, 59, 999); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - ok(r == (GDTR_MIN | GDTR_MAX), "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MAX), got %lx\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r); - expect_systime(&st[0], &getSt[0]); - expect_systime(&st[1], &getSt[1]); - - /* initialize st[0] to lowest possible value */ - fill_systime_struct(&st[0], 1601, 1, 0, 1, 0, 0, 0, 0); - /* set st[1] to highest possible value */ - fill_systime_struct(&st[1], 30827, 12, 6, 31, 23, 59, 59, 999); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - ok(r == (GDTR_MIN | GDTR_MAX), "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MAX), got %lx\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r); - expect_systime(&st[0], &getSt[0]); - expect_systime(&st[1], &getSt[1]); - - /* set st[0] to value higher than minimum */ - fill_systime_struct(&st[0], 1980, 1, 3, 23, 14, 34, 37, 465); - /* set st[1] to value lower than maximum */ - fill_systime_struct(&st[1], 2007, 3, 2, 31, 23, 59, 59, 999); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - ok(r == (GDTR_MIN | GDTR_MAX), "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MAX), got %lx\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r); - expect_systime(&st[0], &getSt[0]); - expect_systime(&st[1], &getSt[1]); - - ok_sequence(sequences, DATETIME_SEQ_INDEX, test_dtm_set_and_get_range_seq, "test_dtm_set_and_get_range", FALSE); - flush_sequences(sequences, NUM_MSG_SEQUENCES); -} - -/* when maxmax, min and max values should be swapped by DTM_SETRANGE - automatically */ - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - ok(r == (GDTR_MIN | GDTR_MAX), "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MAX), got %lx\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r); - todo_wine { - expect_systime(&st[0], &getSt[0]); - } - todo_wine { - expect_systime(&st[1], &getSt[1]); - } - - fill_systime_struct(&st[0], 1980, 1, 3, 23, 14, 34, 37, 465); - - r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st[0]); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETSYSTEMTIME, 0, (LPARAM)&getSt[0]); - ok(r == GDT_VALID, "Expected %d, not %d(GDT_NONE) or %d(GDT_ERROR), got %ld\n", GDT_VALID, GDT_NONE, GDT_ERROR, r); - /* the time part seems to not change after swapping the min and max values - and doing DTM_SETSYSTEMTIME */ - expect_systime_date(&st[0], &getSt[0]); - todo_wine { - expect_systime_time(&origSt, &getSt[0]); - } - - /* set st[0] to value higher than minimum */ - fill_systime_struct(&st[0], 1980, 1, 3, 23, 14, 34, 37, 465); - /* set st[1] to value lower than maximum */ - fill_systime_struct(&st[1], 2007, 3, 2, 31, 23, 59, 59, 999); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st); - expect(1, r); - /* for some reason after we swapped the min and max values before, - whenever we do a DTM_SETRANGE, the DTM_GETRANGE will return the values - swapped*/ - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - ok(r == (GDTR_MIN | GDTR_MAX), "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MAX), got %lx\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r); - todo_wine { - expect_systime(&st[0], &getSt[1]); - } - todo_wine { - expect_systime(&st[1], &getSt[0]); - } - - /* set st[0] to value higher than st[1] */ - fill_systime_struct(&st[0], 2007, 3, 2, 31, 23, 59, 59, 999); - fill_systime_struct(&st[1], 1980, 1, 3, 23, 14, 34, 37, 465); - - /* set min>max again, so that the return values of DTM_GETRANGE are no - longer swapped the next time we do a DTM SETRANGE and DTM_GETRANGE*/ - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - ok(r == (GDTR_MIN | GDTR_MAX), "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MAX), got %lx\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r); - expect_systime(&st[0], &getSt[1]); - expect_systime(&st[1], &getSt[0]); - - /* initialize st[0] to lowest possible value */ - fill_systime_struct(&st[0], 1601, 1, 0, 1, 0, 0, 0, 0); - /* set st[1] to highest possible value */ - fill_systime_struct(&st[1], 30827, 12, 6, 31, 23, 59, 59, 999); - - r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt); - ok(r == (GDTR_MIN | GDTR_MAX), "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MAX), got %lx\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r); - expect_systime(&st[0], &getSt[0]); - expect_systime(&st[1], &getSt[1]); - - ok_sequence(sequences, DATETIME_SEQ_INDEX, test_dtm_set_range_swap_min_max_seq, "test_dtm_set_range_swap_min_max", FALSE); - flush_sequences(sequences, NUM_MSG_SEQUENCES); -} - -static void test_dtm_set_and_get_system_time(HWND hWndDateTime) -{ - LRESULT r; - SYSTEMTIME st; - SYSTEMTIME getSt; - HWND hWndDateTime_test_gdt_none; - - hWndDateTime_test_gdt_none = create_datetime_control(0, 0); - - ok(hWndDateTime_test_gdt_none!=NULL, "Expected non NULL, got %p\n", hWndDateTime_test_gdt_none); - if(hWndDateTime_test_gdt_none) { - r = SendMessage(hWndDateTime_test_gdt_none, DTM_SETSYSTEMTIME, GDT_NONE, (LPARAM)&st); - expect(0, r); - } - else { - skip("hWndDateTime_test_gdt_none is NULL\n"); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - return; - } - - DestroyWindow(hWndDateTime_test_gdt_none); - - r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_NONE, (LPARAM)&st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETSYSTEMTIME, 0, (LPARAM)&getSt); - ok(r == GDT_NONE, "Expected %d, not %d(GDT_VALID) or %d(GDT_ERROR), got %ld\n", GDT_NONE, GDT_VALID, GDT_ERROR, r); - - /* set st to lowest possible value */ - fill_systime_struct(&st, 1601, 1, 0, 1, 0, 0, 0, 0); - - r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st); - expect(1, r); - - /* set st to highest possible value */ - fill_systime_struct(&st, 30827, 12, 6, 31, 23, 59, 59, 999); - - r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st); - expect(1, r); - - /* set st to value between min and max */ - fill_systime_struct(&st, 1980, 1, 3, 23, 14, 34, 37, 465); - - r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st); - expect(1, r); - r = SendMessage(hWndDateTime, DTM_GETSYSTEMTIME, 0, (LPARAM)&getSt); - ok(r == GDT_VALID, "Expected %d, not %d(GDT_NONE) or %d(GDT_ERROR), got %ld\n", GDT_VALID, GDT_NONE, GDT_ERROR, r); - expect_systime(&st, &getSt); - - /* set st to invalid value */ - fill_systime_struct(&st, 0, 0, 7, 0, 24, 60, 60, 1000); - - r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st); - expect_unsuccess(0, r); - - ok_sequence(sequences, DATETIME_SEQ_INDEX, test_dtm_set_and_get_system_time_seq, "test_dtm_set_and_get_system_time", FALSE); - flush_sequences(sequences, NUM_MSG_SEQUENCES); -} - -static void test_datetime_control(void) -{ - HWND hWndDateTime; - - hWndDateTime = create_datetime_control(DTS_SHOWNONE, 0); - - ok(hWndDateTime != NULL, "Expected non NULL, got %p\n", hWndDateTime); - if(hWndDateTime!=NULL) { - test_dtm_set_format(hWndDateTime); - test_dtm_set_and_get_mccolor(hWndDateTime); - test_dtm_set_and_get_mcfont(hWndDateTime); - test_dtm_get_monthcal(hWndDateTime); - test_dtm_set_and_get_range(hWndDateTime); - test_dtm_set_range_swap_min_max(hWndDateTime); - test_dtm_set_and_get_system_time(hWndDateTime); - } - else { - skip("hWndDateTime is NULL\n"); - } - - DestroyWindow(hWndDateTime); - ok_sequence(sequences, DATETIME_SEQ_INDEX, destroy_window_seq, "test_dtm_set_and_get_system_time", TRUE); -} - -START_TEST(datetime) -{ - HMODULE hComctl32; - BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); - INITCOMMONCONTROLSEX iccex; - - hComctl32 = GetModuleHandleA("comctl32.dll"); - pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); - if (!pInitCommonControlsEx) - { - skip("InitCommonControlsEx() is missing. Skipping the tests\n"); - return; - } - iccex.dwSize = sizeof(iccex); - iccex.dwICC = ICC_DATE_CLASSES; - pInitCommonControlsEx(&iccex); - - init_msg_sequences(sequences, NUM_MSG_SEQUENCES); - - test_datetime_control(); -} diff --git a/rostests/winetests/comctl32/dpa.c b/rostests/winetests/comctl32/dpa.c deleted file mode 100644 index b2ea3d8c327..00000000000 --- a/rostests/winetests/comctl32/dpa.c +++ /dev/null @@ -1,457 +0,0 @@ -/* - * Unit tests for DPA functions - * - * Copyright 2003 Uwe Bonnes - * Copyright 2005 Felix Nawothnig - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 - -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "commctrl.h" -#include "objidl.h" - -#include "wine/test.h" - -#define DPAM_NOSORT 0x1 -#define DPAM_INSERT 0x4 -#define DPAM_DELETE 0x8 - -typedef struct _ITEMDATA -{ - INT iPos; - PVOID pvData; -} ITEMDATA, *LPITEMDATA; - -typedef PVOID (CALLBACK *PFNDPAMERGE)(UINT,PVOID,PVOID,LPARAM); -typedef HRESULT (CALLBACK *PFNDPASTM)(LPITEMDATA,IStream*,LPARAM); - -static HDPA (WINAPI *pDPA_Clone)(const HDPA,const HDPA); -static HDPA (WINAPI *pDPA_Create)(INT); -static HDPA (WINAPI *pDPA_CreateEx)(INT,HANDLE); -static PVOID (WINAPI *pDPA_DeleteAllPtrs)(const HDPA); -static PVOID (WINAPI *pDPA_DeletePtr)(const HDPA,INT); -static BOOL (WINAPI *pDPA_Destroy)(const HDPA); -static VOID (WINAPI *pDPA_DestroyCallback)(HDPA,PFNDPAENUMCALLBACK,PVOID); -static VOID (WINAPI *pDPA_EnumCallback)(HDPA,PFNDPAENUMCALLBACK,PVOID); -static INT (WINAPI *pDPA_GetPtr)(const HDPA,INT); -static INT (WINAPI *pDPA_GetPtrIndex)(const HDPA,PVOID); -static BOOL (WINAPI *pDPA_Grow)(HDPA,INT); -static INT (WINAPI *pDPA_InsertPtr)(const HDPA,INT,PVOID); -static HRESULT (WINAPI *pDPA_LoadStream)(HDPA*,PFNDPASTM,IStream*,LPARAM); -static BOOL (WINAPI *pDPA_Merge)(const HDPA,const HDPA,DWORD,PFNDPACOMPARE,PFNDPAMERGE,LPARAM); -static HRESULT (WINAPI *pDPA_SaveStream)(HDPA,PFNDPASTM,IStream*,LPARAM); -static INT (WINAPI *pDPA_Search)(HDPA,PVOID,INT,PFNDPACOMPARE,LPARAM,UINT); -static BOOL (WINAPI *pDPA_SetPtr)(const HDPA,INT,PVOID); -static BOOL (WINAPI *pDPA_Sort)(const HDPA,PFNDPACOMPARE,LPARAM); - -#define COMCTL32_GET_PROC(func, ord) \ - ((p ## func = (PVOID)GetProcAddress(hcomctl32,(LPCSTR)ord)) ? 1 \ - : (trace( #func " not exported\n"), 0)) - -static BOOL InitFunctionPtrs(HMODULE hcomctl32) -{ - /* 4.00+ */ - if(COMCTL32_GET_PROC(DPA_Clone, 331) && - COMCTL32_GET_PROC(DPA_Create, 328) && - COMCTL32_GET_PROC(DPA_CreateEx, 340) && - COMCTL32_GET_PROC(DPA_DeleteAllPtrs, 337) && - COMCTL32_GET_PROC(DPA_DeletePtr, 336) && - COMCTL32_GET_PROC(DPA_Destroy, 329) && - COMCTL32_GET_PROC(DPA_GetPtr, 332) && - COMCTL32_GET_PROC(DPA_GetPtrIndex, 333) && - COMCTL32_GET_PROC(DPA_Grow, 330) && - COMCTL32_GET_PROC(DPA_InsertPtr, 334) && - COMCTL32_GET_PROC(DPA_Search, 339) && - COMCTL32_GET_PROC(DPA_SetPtr, 335) && - COMCTL32_GET_PROC(DPA_Sort, 338)) - { - /* 4.71+ */ - COMCTL32_GET_PROC(DPA_DestroyCallback, 386) && - COMCTL32_GET_PROC(DPA_EnumCallback, 385) && - COMCTL32_GET_PROC(DPA_LoadStream, 9) && - COMCTL32_GET_PROC(DPA_Merge, 11) && - COMCTL32_GET_PROC(DPA_SaveStream, 10); - - return TRUE; - } - - return FALSE; -} - -/* Callbacks */ -static INT CALLBACK CB_CmpLT(PVOID p1, PVOID p2, LPARAM lp) -{ - ok(lp == 0xdeadbeef, "lp=%ld\n", lp); - return p1 < p2 ? -1 : p1 > p2 ? 1 : 0; -} - -static INT CALLBACK CB_CmpGT(PVOID p1, PVOID p2, LPARAM lp) -{ - ok(lp == 0xdeadbeef, "lp=%ld\n", lp); - return p1 > p2 ? -1 : p1 < p2 ? 1 : 0; -} - -static PVOID CALLBACK CB_MergeInsertSrc(UINT op, PVOID p1, PVOID p2, LPARAM lp) -{ - ok(lp == 0xdeadbeef, "lp=%ld\n", lp); - return p1; -} - -static PVOID CALLBACK CB_MergeDeleteOddSrc(UINT op, PVOID p1, PVOID p2, LPARAM lp) -{ - ok(lp == 0xdeadbeef, "lp=%ld\n", lp); - return ((PCHAR)p2)+1; -} - -static INT nEnum; - -static INT CALLBACK CB_EnumFirstThree(PVOID pItem, PVOID lp) -{ - INT i; - - i = pDPA_GetPtrIndex(lp, pItem); - ok(i == nEnum, "i=%d nEnum=%d\n", i, nEnum); - nEnum++; - pDPA_SetPtr(lp, i, (PVOID)7); - return pItem != (PVOID)3; -} - -static HRESULT CALLBACK CB_Save(LPITEMDATA pInfo, IStream *pStm, LPARAM lp) -{ - HRESULT hRes; - - ok(lp == 0xdeadbeef, "lp=%ld\n", lp); - hRes = IStream_Write(pStm, &pInfo->iPos, sizeof(INT), NULL); - ok(hRes == S_OK, "hRes=0x%x\n", hRes); - hRes = IStream_Write(pStm, &pInfo->pvData, sizeof(PVOID), NULL); - ok(hRes == S_OK, "hRes=0x%x\n", hRes); - return S_OK; -} - -static HRESULT CALLBACK CB_Load(LPITEMDATA pInfo, IStream *pStm, LPARAM lp) -{ - HRESULT hRes; - INT iOldPos; - - iOldPos = pInfo->iPos; - ok(lp == 0xdeadbeef, "lp=%ld\n", lp); - hRes = IStream_Read(pStm, &pInfo->iPos, sizeof(INT), NULL); - ok(hRes == S_OK, "hRes=0x%x\n", hRes); - ok(pInfo->iPos == iOldPos, "iPos=%d iOldPos=%d\n", pInfo->iPos, iOldPos); - hRes = IStream_Read(pStm, &pInfo->pvData, sizeof(PVOID), NULL); - ok(hRes == S_OK, "hRes=0x%x\n", hRes); - return S_OK; -} - -static BOOL CheckDPA(HDPA dpa, DWORD dwIn, PDWORD pdwOut) -{ - DWORD dwOut = 0; - INT i; - - for(i = 0; i < 8;) - { - ULONG_PTR ulItem = (ULONG_PTR)pDPA_GetPtr(dpa, i++); - if(!ulItem) break; - dwOut = dwOut << 4 | (ulItem & 0xf); - } - - *pdwOut = dwOut; - - if(dwOut != dwIn) - { - pDPA_DeleteAllPtrs(dpa); - - do - { - pDPA_InsertPtr(dpa, 0, (PVOID)(dwIn & 0xf)); - dwIn >>= 4; - } - while(dwIn); - - return FALSE; - } - - return TRUE; -} - -static void test_dpa(void) -{ - SYSTEM_INFO si; - HANDLE hHeap; - HDPA dpa, dpa2, dpa3; - INT ret, i; - PVOID p; - DWORD dw, dw2, dw3; - HRESULT hRes; - BOOL rc; - - GetSystemInfo(&si); - hHeap = HeapCreate(0, 1, 2); - ok(hHeap != NULL, "error=%d\n", GetLastError()); - dpa3 = pDPA_CreateEx(0, hHeap); - ok(dpa3 != NULL, "\n"); - ret = pDPA_Grow(dpa3, si.dwPageSize + 1); - todo_wine ok(!ret && GetLastError() == ERROR_NOT_ENOUGH_MEMORY, - "ret=%d error=%d\n", ret, GetLastError()); - - dpa = pDPA_Create(0); - ok(dpa != NULL, "\n"); - - /* Set item with out of bound index */ - ok(pDPA_SetPtr(dpa, 1, (PVOID)6), "\n"); - /* Fill the created gap */ - ok(pDPA_SetPtr(dpa, 0, (PVOID)5), "\n"); - rc=CheckDPA(dpa, 0x56, &dw); - ok(rc, "dw=0x%x\n", dw); - - /* Prepend item */ - ret = pDPA_InsertPtr(dpa, 1, (PVOID)1); - ok(ret == 1, "ret=%d\n", ret); - /* Append item using correct index */ - ret = pDPA_InsertPtr(dpa, 3, (PVOID)3); - ok(ret == 3, "ret=%d\n", ret); - /* Append item using out of bound index */ - ret = pDPA_InsertPtr(dpa, 5, (PVOID)2); - ok(ret == 4, "ret=%d\n", ret); - /* Append item using DPA_APPEND */ - ret = pDPA_InsertPtr(dpa, DPA_APPEND, (PVOID)4); - ok(ret == 5, "ret=%d\n", ret); - - rc=CheckDPA(dpa, 0x516324, &dw); - ok(rc, "dw=0x%x\n", dw); - - for(i = 1; i <= 6; i++) - { - INT j, k; - k = pDPA_GetPtrIndex(dpa, (PVOID)i); - /* Linear searches should work on unsorted DPAs */ - j = pDPA_Search(dpa, (PVOID)i, 0, CB_CmpLT, 0xdeadbeef, 0); - ok(j == k, "j=%d k=%d\n", j, k); - } - - /* Sort DPA */ - ok(pDPA_Sort(dpa, CB_CmpGT, 0xdeadbeef), "\n"); - rc=CheckDPA(dpa, 0x654321, &dw); - ok(rc, "dw=0x%x\n", dw); - - /* Clone into a new DPA */ - dpa2 = pDPA_Clone(dpa, NULL); - ok(dpa2 != NULL, "\n"); - /* The old data should have been preserved */ - rc=CheckDPA(dpa2, 0x654321, &dw2); - ok(rc, "dw=0x%x\n", dw2); - ok(pDPA_Sort(dpa, CB_CmpLT, 0xdeadbeef), "\n"); - - /* Test if the DPA itself was really copied */ - rc=CheckDPA(dpa, 0x123456, &dw); - ok(rc, "dw=0x%x\n", dw ); - rc=CheckDPA(dpa2, 0x654321, &dw2); - ok(rc, "dw2=0x%x\n", dw2); - - /* Clone into an old DPA */ - p = NULL; SetLastError(ERROR_SUCCESS); - p = pDPA_Clone(dpa, dpa3); - ok(p == dpa3, "p=%p\n", p); - rc=CheckDPA(dpa3, 0x123456, &dw3); - ok(rc, "dw3=0x%x\n", dw3); - - for(i = 1; i <= 6; i++) - { - INT j; - - /* The array is in order so ptr == index+1 */ - j = pDPA_GetPtrIndex(dpa, (PVOID)i); - ok(j+1 == i, "j=%d i=%d\n", j, i); - j = pDPA_Search(dpa, (PVOID)i, 0, CB_CmpLT, 0xdeadbeef, DPAS_SORTED); - ok(j+1 == i, "j=%d i=%d\n", j, i); - - /* Linear searches respect iStart ... */ - j = pDPA_Search(dpa, (PVOID)i, i+1, CB_CmpLT, 0xdeadbeef, 0); - ok(j == DPA_ERR, "j=%d\n", j); - /* ... but for a binary search it's ignored */ - j = pDPA_Search(dpa, (PVOID)i, i+1, CB_CmpLT, 0xdeadbeef, DPAS_SORTED); - todo_wine ok(j+1 == i, "j=%d i=%d\n", j, i); - } - - /* Try to get the index of a nonexistent item */ - i = pDPA_GetPtrIndex(dpa, (PVOID)7); - ok(i == DPA_ERR, "i=%d\n", i); - - /* Try to delete out of bound indexes */ - p = pDPA_DeletePtr(dpa, -1); - ok(p == NULL, "p=%p\n", p); - p = pDPA_DeletePtr(dpa, 6); - ok(p == NULL, "p=%p\n", p); - - /* Delete the third item */ - p = pDPA_DeletePtr(dpa, 2); - ok(p == (PVOID)3, "p=%p\n", p); - rc=CheckDPA(dpa, 0x12456, &dw); - ok(rc, "dw=0x%x\n", dw); - - /* Check where to re-insert the deleted item */ - i = pDPA_Search(dpa, (PVOID)3, 0, - CB_CmpLT, 0xdeadbeef, DPAS_SORTED|DPAS_INSERTAFTER); - ok(i == 2, "i=%d\n", i); - /* DPAS_INSERTBEFORE works just like DPAS_INSERTAFTER */ - i = pDPA_Search(dpa, (PVOID)3, 0, - CB_CmpLT, 0xdeadbeef, DPAS_SORTED|DPAS_INSERTBEFORE); - ok(i == 2, "i=%d\n", i); - /* without DPAS_INSERTBEFORE/AFTER */ - i = pDPA_Search(dpa, (PVOID)3, 0, - CB_CmpLT, 0xdeadbeef, DPAS_SORTED); - ok(i == -1, "i=%d\n", i); - - /* Re-insert the item */ - ret = pDPA_InsertPtr(dpa, 2, (PVOID)3); - ok(ret == 2, "ret=%d i=%d\n", ret, 2); - rc=CheckDPA(dpa, 0x123456, &dw); - ok(rc, "dw=0x%x\n", dw); - - /* When doing a binary search while claiming reverse order all indexes - * should be bogus */ - for(i = 0; i < 6; i++) - { - INT j = pDPA_Search(dpa, (PVOID)i, 0, CB_CmpGT, 0xdeadbeef, - DPAS_SORTED|DPAS_INSERTBEFORE); - ok(j != i, "i=%d\n", i); - } - - if(pDPA_Merge) - { - /* Delete all even entries from dpa */ - p = pDPA_DeletePtr(dpa, 1); - p = pDPA_DeletePtr(dpa, 2); - p = pDPA_DeletePtr(dpa, 3); - rc=CheckDPA(dpa, 0x135, &dw); - ok(rc, "dw=0x%x\n", dw); - - /* Delete all odd entries from dpa2 */ - pDPA_Merge(dpa2, dpa, DPAM_DELETE, - CB_CmpLT, CB_MergeDeleteOddSrc, 0xdeadbeef); - todo_wine - { - rc=CheckDPA(dpa2, 0x246, &dw2); - ok(rc, "dw=0x%x\n", dw2); - } - - /* Merge dpa3 into dpa2 and dpa */ - pDPA_Merge(dpa, dpa3, DPAM_INSERT|DPAM_NOSORT, - CB_CmpLT, CB_MergeInsertSrc, 0xdeadbeef); - pDPA_Merge(dpa2, dpa3, DPAM_INSERT|DPAM_NOSORT, - CB_CmpLT, CB_MergeInsertSrc, 0xdeadbeef); - - rc=CheckDPA(dpa, 0x123456, &dw); - ok(rc, "dw=0x%x\n", dw); - rc=CheckDPA(dpa2, 0x123456, &dw2); - ok(rc, "dw2=0x%x\n", dw2); - rc=CheckDPA(dpa3, 0x123456, &dw3); - ok(rc, "dw3=0x%x\n", dw3); - } - - if(pDPA_EnumCallback) - { - nEnum = 0; - pDPA_EnumCallback(dpa2, CB_EnumFirstThree, (PVOID)dpa2); - rc=CheckDPA(dpa2, 0x777456, &dw2); - ok(rc, "dw=0x%x\n", dw2); - ok(nEnum == 3, "nEnum=%d\n", nEnum); - } - - /* Setting item with huge index should work */ - ok(pDPA_SetPtr(dpa2, 0x12345, (PVOID)0xdeadbeef), "\n"); - ret = pDPA_GetPtrIndex(dpa2, (PVOID)0xdeadbeef); - ok(ret == 0x12345, "ret=%d\n", ret); - - pDPA_DeleteAllPtrs(dpa2); - rc=CheckDPA(dpa2, 0, &dw2); - ok(rc, "dw2=0x%x\n", dw2); - pDPA_Destroy(dpa2); - - if(pDPA_DestroyCallback) - { - nEnum = 0; - pDPA_DestroyCallback(dpa3, CB_EnumFirstThree, dpa3); - ok(nEnum == 3, "nEnum=%d\n", nEnum); - } - else pDPA_Destroy(dpa3); - - if(!pDPA_SaveStream) - goto skip_stream_tests; - - hRes = CoInitialize(NULL); - if(hRes == S_OK) - { - static const WCHAR szStg[] = { 'S','t','g',0 }; - IStorage* pStg = NULL; - IStream* pStm = NULL; - LARGE_INTEGER liZero; - DWORD dwMode; - liZero.QuadPart = 0; - - dwMode = STGM_DIRECT|STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE; - hRes = StgCreateDocfile(NULL, dwMode|STGM_DELETEONRELEASE, 0, &pStg); - ok(hRes == S_OK, "hRes=0x%x\n", hRes); - - hRes = IStorage_CreateStream(pStg, szStg, dwMode, 0, 0, &pStm); - ok(hRes == S_OK, "hRes=0x%x\n", hRes); - - hRes = pDPA_SaveStream(dpa, CB_Save, pStm, 0xdeadbeef); - todo_wine ok(hRes == S_OK, "hRes=0x%x\n", hRes); - pDPA_Destroy(dpa); - - hRes = IStream_Seek(pStm, liZero, STREAM_SEEK_SET, NULL); - ok(hRes == S_OK, "hRes=0x%x\n", hRes); - hRes = pDPA_LoadStream(&dpa, CB_Load, pStm, 0xdeadbeef); - todo_wine - { - ok(hRes == S_OK, "hRes=0x%x\n", hRes); - rc=CheckDPA(dpa, 0x123456, &dw); - ok(rc, "dw=0x%x\n", dw); - } - - ret = IStream_Release(pStm); - ok(!ret, "ret=%d\n", ret); - - ret = IStorage_Release(pStg); - ok(!ret, "ret=%d\n", ret); - - CoUninitialize(); - } - else ok(0, "hResult: %d\n", hRes); - -skip_stream_tests: - pDPA_Destroy(dpa); -} - -START_TEST(dpa) -{ - HMODULE hcomctl32; - - hcomctl32 = GetModuleHandleA("comctl32.dll"); - - if(InitFunctionPtrs(hcomctl32)) - test_dpa(); - else - trace("skipping tests\n"); -} diff --git a/rostests/winetests/comctl32/header.c b/rostests/winetests/comctl32/header.c deleted file mode 100644 index a3778cff588..00000000000 --- a/rostests/winetests/comctl32/header.c +++ /dev/null @@ -1,1553 +0,0 @@ -/* Unit test suite for header control. - * - * Copyright 2005 Vijay Kiran Kamuju - * Copyright 2007 Shanren Zhou - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" -#include "msg.h" - -typedef struct tagEXPECTEDNOTIFY -{ - INT iCode; - BOOL fUnicode; - HDITEMA hdItem; -} EXPECTEDNOTIFY; - -typedef LRESULT (*CUSTOMDRAWPROC)(int n, NMCUSTOMDRAW *nm); - -static CUSTOMDRAWPROC g_CustomDrawProc; -static int g_CustomDrawCount; -static DRAWITEMSTRUCT g_DrawItem; -static BOOL g_DrawItemReceived; - -static EXPECTEDNOTIFY expectedNotify[10]; -static INT nExpectedNotify = 0; -static INT nReceivedNotify = 0; -static INT unexpectedNotify[10]; -static INT nUnexpectedNotify = 0; - -static HWND hHeaderParentWnd; -static HWND hWndHeader; -#define MAX_CHARS 100 - -#define compare(val, exp, fmt) ok((val) == (exp), #val " value: " fmt ", expected: " fmt "\n", (val), (exp)) - -#define expect(expected, got) ok(expected == got, "expected %d, got %d\n", expected,got) - -#define NUM_MSG_SEQUENCES 2 -#define PARENT_SEQ_INDEX 0 -#define HEADER_SEQ_INDEX 1 - -static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; - -static const struct message create_parent_wnd_seq[] = { - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { 0 } -}; - -static const struct message add_header_to_parent_seq_interactive[] = { - { WM_NOTIFYFORMAT, sent|lparam, 0, NF_QUERY }, - { WM_QUERYUISTATE, sent }, - { WM_PARENTNOTIFY, sent|wparam, 1 }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_IME_SETCONTEXT, sent|defwinproc|wparam, 1 }, - { WM_IME_NOTIFY, sent|defwinproc|wparam, 2 }, - { WM_SETFOCUS, sent|defwinproc|wparam, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, 0 }, - { WM_SIZE, sent|wparam, 0 }, - { WM_MOVE, sent|wparam, 0 }, - { 0 } -}; - -static const struct message add_header_to_parent_seq[] = { - { WM_NOTIFYFORMAT, sent|lparam, 0, NF_QUERY }, - { WM_QUERYUISTATE, sent }, - { WM_PARENTNOTIFY, sent }, - { 0 } -}; - -static const struct message insertItem_seq[] = { - { HDM_INSERTITEM, sent|wparam, 0 }, - { HDM_INSERTITEM, sent|wparam, 1 }, - { HDM_INSERTITEM, sent|wparam, 2 }, - { HDM_INSERTITEM, sent|wparam, 3 }, - { 0 } -}; - -static const struct message getItem_seq[] = { - { HDM_GETITEM, sent|wparam, 3 }, - { HDM_GETITEM, sent|wparam, 0 }, - { 0 } -}; - - -static const struct message deleteItem_getItemCount_seq[] = { - { HDM_DELETEITEM, sent|wparam, 3 }, - { HDM_GETITEMCOUNT, sent }, - { HDM_DELETEITEM, sent|wparam, 3 }, - { HDM_GETITEMCOUNT, sent }, - { HDM_DELETEITEM, sent|wparam, 2 }, - { HDM_GETITEMCOUNT, sent }, - { 0 } -}; - -static const struct message orderArray_seq[] = { - { HDM_GETITEMCOUNT, sent }, - { HDM_SETORDERARRAY, sent|wparam, 2 }, - { HDM_GETORDERARRAY, sent|wparam, 2 }, - { 0 } -}; - -static const struct message setItem_seq[] = { - { HDM_SETITEM, sent|wparam, 0 }, - { HDM_SETITEM, sent|wparam, 1 }, - { 0 } -}; - -static const struct message getItemRect_seq[] = { - { HDM_GETITEMRECT, sent|wparam, 1 }, - { HDM_GETITEMRECT, sent|wparam, 0 }, - { HDM_GETITEMRECT, sent|wparam, 10 }, - { 0 } -}; - -static const struct message layout_seq[] = { - { HDM_LAYOUT, sent }, - { 0 } -}; - -static const struct message orderToIndex_seq[] = { - { HDM_ORDERTOINDEX, sent|wparam, 1 }, - { 0 } -}; - -static const struct message hittest_seq[] = { - { HDM_HITTEST, sent }, - { HDM_HITTEST, sent }, - { HDM_HITTEST, sent }, - { 0 } -}; - -static const struct message setHotDivider_seq_interactive[] = { - { HDM_SETHOTDIVIDER, sent|wparam, TRUE }, - { WM_PAINT, sent|defwinproc}, - { WM_NCPAINT, sent|defwinproc}, - { WM_ERASEBKGND, sent|defwinproc}, - { HDM_SETHOTDIVIDER, sent|wparam|lparam, FALSE, 100 }, - { WM_PAINT, sent|defwinproc}, - { HDM_SETHOTDIVIDER, sent|wparam|lparam, FALSE, 1}, - { WM_PAINT, sent|defwinproc}, - { 0 } -}; - -static const struct message setHotDivider_seq_noninteractive[] = { - { HDM_SETHOTDIVIDER, sent|wparam, TRUE }, - { HDM_SETHOTDIVIDER, sent|wparam|lparam, FALSE, 100 }, - { HDM_SETHOTDIVIDER, sent|wparam|lparam, FALSE, 1}, - { 0 } -}; - -static const struct message imageMessages_seq[] = { - { HDM_SETIMAGELIST, sent }, - { HDM_GETIMAGELIST, sent }, - { HDM_CREATEDRAGIMAGE, sent }, - { 0 } -}; - -static const struct message filterMessages_seq_interactive[] = { - { HDM_SETFILTERCHANGETIMEOUT, sent|wparam|lparam, 1, 100 }, - { HDM_CLEARFILTER, sent|wparam|lparam, 0, 1 }, - { HDM_EDITFILTER, sent|wparam|lparam, 1, 0 }, - { WM_PARENTNOTIFY, sent|wparam|defwinproc, WM_CREATE }, - { WM_CTLCOLOREDIT, sent|defwinproc }, - { WM_COMMAND, sent|defwinproc }, - { 0 } -}; - -static const struct message filterMessages_seq_noninteractive[] = { - { HDM_SETFILTERCHANGETIMEOUT, sent|wparam|lparam, 1, 100 }, - { HDM_CLEARFILTER, sent|wparam|lparam, 0, 1 }, - { HDM_EDITFILTER, sent|wparam|lparam, 1, 0 }, - { WM_PARENTNOTIFY, sent|wparam|defwinproc, WM_CREATE }, - { WM_COMMAND, sent|defwinproc }, - { 0 } -}; - -static const struct message unicodeformatMessages_seq[] = { - { HDM_SETUNICODEFORMAT, sent|wparam, TRUE }, - { HDM_GETUNICODEFORMAT, sent }, - { 0 } -}; - -static const struct message bitmapmarginMessages_seq[] = { - { HDM_GETBITMAPMARGIN, sent }, - { 0 } -}; - - -static void expect_notify(INT iCode, BOOL fUnicode, HDITEMA *lpItem) -{ - assert(nExpectedNotify < 10); - expectedNotify[nExpectedNotify].iCode = iCode; - expectedNotify[nExpectedNotify].fUnicode = fUnicode; - expectedNotify[nExpectedNotify].hdItem = *lpItem; - nExpectedNotify++; -} - -static void dont_expect_notify(INT iCode) -{ - assert(nUnexpectedNotify < 10); - unexpectedNotify[nUnexpectedNotify++] = iCode; -} - -static BOOL notifies_received(void) -{ - BOOL fRet = (nExpectedNotify == nReceivedNotify); - nExpectedNotify = nReceivedNotify = 0; - nUnexpectedNotify = 0; - return fRet; -} - -static LONG addItem(HWND hdex, int idx, LPSTR text) -{ - HDITEMA hdItem; - hdItem.mask = HDI_TEXT | HDI_WIDTH; - hdItem.cxy = 100; - hdItem.pszText = text; - hdItem.cchTextMax = 0; - return (LONG)SendMessage(hdex, HDM_INSERTITEMA, (WPARAM)idx, (LPARAM)&hdItem); -} - -static LONG setItem(HWND hdex, int idx, LPSTR text, BOOL fCheckNotifies) -{ - LONG ret; - HDITEMA hdexItem; - hdexItem.mask = HDI_TEXT; - hdexItem.pszText = text; - hdexItem.cchTextMax = 0; - if (fCheckNotifies) - { - expect_notify(HDN_ITEMCHANGINGA, FALSE, &hdexItem); - expect_notify(HDN_ITEMCHANGEDA, FALSE, &hdexItem); - } - ret = (LONG)SendMessage(hdex, HDM_SETITEMA, (WPARAM)idx, (LPARAM)&hdexItem); - if (fCheckNotifies) - ok(notifies_received(), "setItem(): not all expected notifies were received\n"); - return ret; -} - -static LONG setItemUnicodeNotify(HWND hdex, int idx, LPSTR text, LPWSTR wText) -{ - LONG ret; - HDITEMA hdexItem; - HDITEMW hdexNotify; - hdexItem.mask = HDI_TEXT; - hdexItem.pszText = text; - hdexItem.cchTextMax = 0; - - hdexNotify.mask = HDI_TEXT; - hdexNotify.pszText = wText; - - expect_notify(HDN_ITEMCHANGINGW, TRUE, (HDITEMA*)&hdexNotify); - expect_notify(HDN_ITEMCHANGEDW, TRUE, (HDITEMA*)&hdexNotify); - ret = (LONG)SendMessage(hdex, HDM_SETITEMA, (WPARAM)idx, (LPARAM)&hdexItem); - ok(notifies_received(), "setItemUnicodeNotify(): not all expected notifies were received\n"); - return ret; -} - -static LONG delItem(HWND hdex, int idx) -{ - return (LONG)SendMessage(hdex, HDM_DELETEITEM, (WPARAM)idx, 0); -} - -static LONG getItemCount(HWND hdex) -{ - return (LONG)SendMessage(hdex, HDM_GETITEMCOUNT, 0, 0); -} - -static LONG getItem(HWND hdex, int idx, LPSTR textBuffer) -{ - HDITEMA hdItem; - hdItem.mask = HDI_TEXT; - hdItem.pszText = textBuffer; - hdItem.cchTextMax = MAX_CHARS; - return (LONG)SendMessage(hdex, HDM_GETITEMA, (WPARAM)idx, (LPARAM)&hdItem); -} - -static void addReadDelItem(HWND hdex, HDITEMA *phdiCreate, int maskRead, HDITEMA *phdiRead) -{ - ok(SendMessage(hdex, HDM_INSERTITEMA, (WPARAM)0, (LPARAM)phdiCreate)!=-1, "Adding item failed\n"); - ZeroMemory(phdiRead, sizeof(HDITEMA)); - phdiRead->mask = maskRead; - ok(SendMessage(hdex, HDM_GETITEMA, (WPARAM)0, (LPARAM)phdiRead)!=0, "Getting item data failed\n"); - ok(SendMessage(hdex, HDM_DELETEITEM, (WPARAM)0, (LPARAM)0)!=0, "Deleting item failed\n"); -} - -static HWND create_header_control (void) -{ - HWND handle; - HDLAYOUT hlayout; - RECT rectwin; - WINDOWPOS winpos; - - handle = CreateWindowEx(0, WC_HEADER, NULL, - WS_CHILD|WS_BORDER|WS_VISIBLE|HDS_BUTTONS|HDS_HORZ, - 0, 0, 0, 0, - hHeaderParentWnd, NULL, NULL, NULL); - assert(handle); - - if (winetest_interactive) - ShowWindow (hHeaderParentWnd, SW_SHOW); - - GetClientRect(hHeaderParentWnd,&rectwin); - hlayout.prc = &rectwin; - hlayout.pwpos = &winpos; - SendMessageA(handle,HDM_LAYOUT,0,(LPARAM) &hlayout); - SetWindowPos(handle, winpos.hwndInsertAfter, winpos.x, winpos.y, - winpos.cx, winpos.cy, 0); - - return handle; -} - -static void compare_items(INT iCode, HDITEMA *hdi1, HDITEMA *hdi2, BOOL fUnicode) -{ - ok(hdi1->mask == hdi2->mask, "Notify %d mask mismatch (%08x != %08x)\n", iCode, hdi1->mask, hdi2->mask); - if (hdi1->mask & HDI_WIDTH) - { - ok(hdi1->cxy == hdi2->cxy, "Notify %d cxy mismatch (%08x != %08x)\n", iCode, hdi1->cxy, hdi2->cxy); - } - if (hdi1->mask & HDI_TEXT) - { - if (hdi1->pszText == LPSTR_TEXTCALLBACKA) - { - ok(hdi1->pszText == LPSTR_TEXTCALLBACKA, "Notify %d - only one item is LPSTR_TEXTCALLBACK\n", iCode); - } - else - if (fUnicode) - { - char buf1[260]; - char buf2[260]; - WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)hdi1->pszText, -1, buf1, 260, NULL, NULL); - WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)hdi2->pszText, -1, buf2, 260, NULL, NULL); - ok(lstrcmpW((LPWSTR)hdi1->pszText, (LPWSTR)hdi2->pszText)==0, - "Notify %d text mismatch (L\"%s\" vs L\"%s\")\n", - iCode, buf1, buf2); - } - else - { - ok(strcmp(hdi1->pszText, hdi2->pszText)==0, - "Notify %d text mismatch (\"%s\" vs \"%s\")\n", - iCode, hdi1->pszText, hdi2->pszText); - } - } -} - -static char pszFirstItem[] = "First Item"; -static char pszSecondItem[] = "Second Item"; -static char pszThirdItem[] = "Third Item"; -static char pszFourthItem[] = "Fourth Item"; -static char pszReplaceItem[] = "Replace Item"; -static char pszOutOfRangeItem[] = "Out Of Range Item"; - -static char *str_items[] = - {pszFirstItem, pszSecondItem, pszThirdItem, pszFourthItem, pszReplaceItem, pszOutOfRangeItem}; - -static char pszUniTestA[] = "TST"; -static WCHAR pszUniTestW[] = {'T','S','T',0}; - - -#define TEST_GET_ITEM(i,c)\ -{ res = getItem(hWndHeader, i, buffer);\ - ok(res != 0, "Getting item[%d] using valid index failed unexpectedly (%d)\n", i, res);\ - ok(strcmp(str_items[c], buffer) == 0, "Getting item[%d] returned \"%s\" expecting \"%s\"\n", i, buffer, str_items[c]);\ -} - -#define TEST_GET_ITEMCOUNT(i)\ -{ res = getItemCount(hWndHeader);\ - ok(res == i, "Got Item Count as %d\n", res);\ -} - -struct subclass_info -{ - WNDPROC oldproc; -}; - -static LRESULT WINAPI header_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("header: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, HEADER_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_ERASEBKGND && - message != WM_NCPAINT && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - - { - trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, PARENT_SEQ_INDEX, &msg); - } - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static BOOL register_parent_wnd_class(void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = parent_wnd_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(NULL); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "Header test parent class"; - return RegisterClassA(&cls); -} - -static HWND create_custom_parent_window(void) -{ - if (!register_parent_wnd_class()) - return NULL; - - return CreateWindowExA(0, "Header test parent class", "Header Message Sequence Testing", - WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, - 672+2*GetSystemMetrics(SM_CXSIZEFRAME), - 226+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYSIZEFRAME), - NULL, NULL, GetModuleHandleA(NULL), 0); -} - -static HWND create_custom_header_control(HWND hParent, BOOL preloadHeaderItems) -{ - struct subclass_info *info; - HWND childHandle; - HDLAYOUT hlayout; - RECT rectwin; - WINDOWPOS winpos; - int retVal; - int loopcnt; - static char firstHeaderItem[] = "Name"; - static char secondHeaderItem[] = "Size"; - static char *items[] = {secondHeaderItem, firstHeaderItem}; - HDITEM hdItem; - hdItem.mask = HDI_TEXT | HDI_WIDTH | HDI_FORMAT; - hdItem.fmt = HDF_LEFT; - hdItem.cxy = 80; - hdItem.cchTextMax = 260; - - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - childHandle = CreateWindowEx(0, WC_HEADER, NULL, - WS_CHILD|WS_BORDER|WS_VISIBLE|HDS_BUTTONS|HDS_HORZ, - 0, 0, 0, 0, - hParent, NULL, NULL, NULL); - assert(childHandle); - if (preloadHeaderItems) - { - for ( loopcnt = 0 ; loopcnt < 2 ; loopcnt++ ) - { - hdItem.pszText = items[loopcnt]; - retVal = SendMessage(childHandle, HDM_INSERTITEM, loopcnt, (LPARAM) &hdItem); - ok(retVal == loopcnt, "Adding item %d failed with return value %d\n", ( loopcnt + 1 ), retVal); - } - } - - if (winetest_interactive) - ShowWindow (hParent, SW_SHOW); - - GetClientRect(hParent,&rectwin); - hlayout.prc = &rectwin; - hlayout.pwpos = &winpos; - SendMessageA(childHandle,HDM_LAYOUT,0,(LPARAM) &hlayout); - SetWindowPos(childHandle, winpos.hwndInsertAfter, winpos.x, winpos.y, - winpos.cx, winpos.cy, 0); - - info->oldproc = (WNDPROC)SetWindowLongPtrA(childHandle, GWLP_WNDPROC, - (LONG_PTR)header_subclass_proc); - SetWindowLongPtrA(childHandle, GWLP_USERDATA, (LONG_PTR)info); - return childHandle; -} - -static void check_auto_format(void) -{ - HDITEMA hdiCreate; - HDITEMA hdiRead; - static CHAR text[] = "Test"; - ZeroMemory(&hdiCreate, sizeof(HDITEMA)); - - /* Windows implicitly sets some format bits in INSERTITEM */ - - /* HDF_STRING is automatically set and cleared for no text */ - hdiCreate.mask = HDI_TEXT|HDI_WIDTH|HDI_FORMAT; - hdiCreate.pszText = text; - hdiCreate.cxy = 100; - hdiCreate.fmt=HDF_CENTER; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_STRING|HDF_CENTER), "HDF_STRING not set automatically (fmt=%x)\n", hdiRead.fmt); - - hdiCreate.mask = HDI_WIDTH|HDI_FORMAT; - hdiCreate.pszText = text; - hdiCreate.fmt = HDF_CENTER|HDF_STRING; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_CENTER), "HDF_STRING should be automatically cleared (fmt=%x)\n", hdiRead.fmt); - - /* HDF_BITMAP is automatically set and cleared for a NULL bitmap or no bitmap */ - hdiCreate.mask = HDI_BITMAP|HDI_WIDTH|HDI_FORMAT; - hdiCreate.hbm = CreateBitmap(16, 16, 1, 8, NULL); - hdiCreate.fmt = HDF_CENTER; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_BITMAP|HDF_CENTER), "HDF_BITMAP not set automatically (fmt=%x)\n", hdiRead.fmt); - DeleteObject(hdiCreate.hbm); - - hdiCreate.hbm = NULL; - hdiCreate.fmt = HDF_CENTER|HDF_BITMAP; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == HDF_CENTER, "HDF_BITMAP not cleared automatically for NULL bitmap (fmt=%x)\n", hdiRead.fmt); - - hdiCreate.mask = HDI_WIDTH|HDI_FORMAT; - hdiCreate.fmt = HDF_CENTER|HDF_BITMAP; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == HDF_CENTER, "HDF_BITMAP not cleared automatically for no bitmap (fmt=%x)\n", hdiRead.fmt); - - /* HDF_IMAGE is automatically set but not cleared */ - hdiCreate.mask = HDI_IMAGE|HDI_WIDTH|HDI_FORMAT; - hdiCreate.iImage = 17; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_IMAGE|HDF_CENTER), "HDF_IMAGE not set automatically (fmt=%x)\n", hdiRead.fmt); - - hdiCreate.mask = HDI_WIDTH|HDI_FORMAT; - hdiCreate.fmt = HDF_CENTER|HDF_IMAGE; - hdiCreate.iImage = 0; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_CENTER|HDF_IMAGE), "HDF_IMAGE shouldn't be cleared automatically (fmt=%x)\n", hdiRead.fmt); -} - -static void check_auto_fields(void) -{ - HDITEMA hdiCreate; - HDITEMA hdiRead; - static CHAR text[] = "Test"; - LONG res; - - /* Windows stores the format, width, lparam even if they are not in the item's mask */ - ZeroMemory(&hdiCreate, sizeof(HDITEMA)); - hdiCreate.mask = HDI_TEXT; - hdiCreate.cxy = 100; - hdiCreate.pszText = text; - addReadDelItem(hWndHeader, &hdiCreate, HDI_WIDTH, &hdiRead); - TEST_GET_ITEMCOUNT(6); - ok(hdiRead.cxy == hdiCreate.cxy, "cxy should be automatically set\n"); - - ZeroMemory(&hdiCreate, sizeof(HDITEMA)); - hdiCreate.mask = HDI_TEXT; - hdiCreate.pszText = text; - hdiCreate.lParam = 0x12345678; - addReadDelItem(hWndHeader, &hdiCreate, HDI_LPARAM, &hdiRead); - TEST_GET_ITEMCOUNT(6); - ok(hdiRead.lParam == hdiCreate.lParam, "lParam should be automatically set\n"); - - ZeroMemory(&hdiCreate, sizeof(HDITEMA)); - hdiCreate.mask = HDI_TEXT; - hdiCreate.pszText = text; - hdiCreate.fmt = HDF_STRING|HDF_CENTER; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - TEST_GET_ITEMCOUNT(6); - ok(hdiRead.fmt == hdiCreate.fmt, "fmt should be automatically set\n"); - - /* others fields are not set */ - ZeroMemory(&hdiCreate, sizeof(HDITEMA)); - hdiCreate.mask = HDI_TEXT; - hdiCreate.pszText = text; - hdiCreate.hbm = CreateBitmap(16, 16, 1, 8, NULL); - addReadDelItem(hWndHeader, &hdiCreate, HDI_BITMAP, &hdiRead); - TEST_GET_ITEMCOUNT(6); - ok(hdiRead.hbm == NULL, "hbm should not be automatically set\n"); - DeleteObject(hdiCreate.hbm); - - ZeroMemory(&hdiCreate, sizeof(HDITEMA)); - hdiCreate.mask = HDI_IMAGE; - hdiCreate.iImage = 17; - hdiCreate.pszText = text; - addReadDelItem(hWndHeader, &hdiCreate, HDI_TEXT, &hdiRead); - TEST_GET_ITEMCOUNT(6); - ok(hdiRead.pszText==NULL, "pszText shouldn't be automatically set\n"); - - /* field from comctl >4.0 not tested as the system probably won't touch them */ -} - -static void check_mask(void) -{ - HDITEMA hdi; - static CHAR text[] = "ABC"; - LRESULT ret; - - /* don't create items if the mask is zero */ - ZeroMemory(&hdi, sizeof(hdi)); - hdi.mask = 0; - hdi.cxy = 200; - hdi.pszText = text; - hdi.fmt = 0; - hdi.iOrder = 0; - hdi.lParam = 17; - hdi.cchTextMax = 260; - ret = SendMessage(hWndHeader, HDM_INSERTITEM, (WPARAM)0, (LPARAM)&hdi); - ok(ret == -1, "Creating an item with a zero mask should have failed\n"); - if (ret != -1) SendMessage(hWndHeader, HDM_DELETEITEM, (WPARAM)0, (LPARAM)0); - - /* with a non-zero mask creation will succeed */ - ZeroMemory(&hdi, sizeof(hdi)); - hdi.mask = HDI_LPARAM; - ret = SendMessage(hWndHeader, HDM_INSERTITEM, (WPARAM)0, (LPARAM)&hdi); - ok(ret != -1, "Adding item with non-zero mask failed\n"); - if (ret != -1) - SendMessage(hWndHeader, HDM_DELETEITEM, (WPARAM)0, (LPARAM)0); - - /* in SETITEM if the mask contains a unknown bit, it is ignored */ - ZeroMemory(&hdi, sizeof(hdi)); - hdi.mask = 0x08000000 | HDI_LPARAM | HDI_IMAGE; - hdi.lParam = 133; - hdi.iImage = 17; - ret = SendMessage(hWndHeader, HDM_INSERTITEM, (WPARAM)0, (LPARAM)&hdi); - ok(ret != -1, "Adding item failed\n"); - - if (ret != -1) - { - /* check result */ - ZeroMemory(&hdi, sizeof(hdi)); - hdi.mask = HDI_LPARAM | HDI_IMAGE; - SendMessage(hWndHeader, HDM_GETITEM, (WPARAM)0, (LPARAM)&hdi); - ok(hdi.lParam == 133, "comctl32 4.0 field not set\n"); - ok(hdi.iImage == 17, "comctl32 >4.0 field not set\n"); - - /* but in GETITEM if an unknown bit is set, comctl32 uses only version 4.0 fields */ - ZeroMemory(&hdi, sizeof(hdi)); - hdi.mask = 0x08000000 | HDI_LPARAM | HDI_IMAGE; - SendMessage(hWndHeader, HDM_GETITEM, (WPARAM)0, (LPARAM)&hdi); - ok(hdi.lParam == 133, "comctl32 4.0 field not read\n"); - ok(hdi.iImage == 0, "comctl32 >4.0 field shouldn't be read\n"); - - SendMessage(hWndHeader, HDM_DELETEITEM, (WPARAM)0, (LPARAM)0); - } -} - -static void test_header_control (void) -{ - LONG res; - static char buffer[MAX_CHARS]; - int i; - - hWndHeader = create_header_control (); - - for (i = 3; i >= 0; i--) - { - TEST_GET_ITEMCOUNT(3-i); - res = addItem(hWndHeader, 0, str_items[i]); - ok(res == 0, "Adding simple item failed (%d)\n", res); - } - - TEST_GET_ITEMCOUNT(4); - res = addItem(hWndHeader, 99, str_items[i+1]); - ok(res != -1, "Adding Out of Range item should fail with -1 got (%d)\n", res); - TEST_GET_ITEMCOUNT(5); - res = addItem(hWndHeader, 5, str_items[i+1]); - ok(res != -1, "Adding Out of Range item should fail with -1 got (%d)\n", res); - TEST_GET_ITEMCOUNT(6); - - for (i = 0; i < 4; i++) { TEST_GET_ITEM(i,i); TEST_GET_ITEMCOUNT(6); } - - res=getItem(hWndHeader, 99, buffer); - ok(res == 0, "Getting Out of Range item should fail with 0 (%d), got %s\n", res,buffer); - res=getItem(hWndHeader, 5, buffer); - ok(res == 1, "Getting Out of Range item should fail with 1 (%d), got %s\n", res,buffer); - res=getItem(hWndHeader, -2, buffer); - ok(res == 0, "Getting Out of Range item should fail with 0 (%d), got %s\n", res,buffer); - - if (winetest_interactive) - { - UpdateWindow(hHeaderParentWnd); - UpdateWindow(hWndHeader); - } - - TEST_GET_ITEMCOUNT(6); - res=setItem(hWndHeader, 99, str_items[5], FALSE); - ok(res == 0, "Setting Out of Range item should fail with 0 (%d)\n", res); - res=setItem(hWndHeader, 5, str_items[5], TRUE); - ok(res == 1, "Setting Out of Range item should fail with 1 (%d)\n", res); - res=setItem(hWndHeader, -2, str_items[5], FALSE); - ok(res == 0, "Setting Out of Range item should fail with 0 (%d)\n", res); - TEST_GET_ITEMCOUNT(6); - - for (i = 0; i < 4; i++) - { - res = setItem(hWndHeader, i, str_items[4], TRUE); - ok(res != 0, "Setting %d item failed (%d)\n", i+1, res); - TEST_GET_ITEM(i, 4); - TEST_GET_ITEMCOUNT(6); - } - - SendMessageA(hWndHeader, HDM_SETUNICODEFORMAT, (WPARAM)TRUE, 0); - setItemUnicodeNotify(hWndHeader, 3, pszUniTestA, pszUniTestW); - SendMessageA(hWndHeader, WM_NOTIFYFORMAT, (WPARAM)hHeaderParentWnd, (LPARAM)NF_REQUERY); - setItem(hWndHeader, 3, str_items[4], TRUE); - - dont_expect_notify(HDN_GETDISPINFOA); - dont_expect_notify(HDN_GETDISPINFOW); - addItem(hWndHeader, 0, LPSTR_TEXTCALLBACKA); - setItem(hWndHeader, 0, str_items[4], TRUE); - /* unexpected notifies cleared by notifies_received in setItem */ - dont_expect_notify(HDN_GETDISPINFOA); - dont_expect_notify(HDN_GETDISPINFOW); - setItem(hWndHeader, 0, LPSTR_TEXTCALLBACKA, TRUE); - /* unexpected notifies cleared by notifies_received in setItem */ - delItem(hWndHeader, 0); - - check_auto_format(); - TEST_GET_ITEMCOUNT(6); - check_auto_fields(); - TEST_GET_ITEMCOUNT(6); - check_mask(); - TEST_GET_ITEMCOUNT(6); - - res = delItem(hWndHeader, 5); - ok(res == 1, "Deleting Out of Range item should fail with 1 (%d)\n", res); - res = delItem(hWndHeader, -2); - ok(res == 0, "Deleting Out of Range item should fail with 0 (%d)\n", res); - TEST_GET_ITEMCOUNT(5); - - res = delItem(hWndHeader, 3); - ok(res != 0, "Deleting using out of range index failed (%d)\n", res); - TEST_GET_ITEMCOUNT(4); - res = delItem(hWndHeader, 0); - ok(res != 0, "Deleting using out of range index failed (%d)\n", res); - TEST_GET_ITEMCOUNT(3); - res = delItem(hWndHeader, 0); - ok(res != 0, "Deleting using out of range index failed (%d)\n", res); - TEST_GET_ITEMCOUNT(2); - res = delItem(hWndHeader, 0); - ok(res != 0, "Deleting using out of range index failed (%d)\n", res); - TEST_GET_ITEMCOUNT(1); - - DestroyWindow(hWndHeader); -} - -static void test_hdm_getitemrect(HWND hParent) -{ - - HWND hChild; - RECT rect; - int retVal; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - retVal = SendMessage(hChild, HDM_GETITEMRECT, 1, (LPARAM) &rect); - ok(retVal == TRUE, "Getting item rect should TRUE, got %d\n", retVal); - /* check bounding rectangle information of 2nd header item */ - expect(80, rect.left); - expect(0, rect.top); - expect(160, rect.right); - todo_wine - { - expect(18, rect.bottom); - } - retVal = SendMessage(hChild, HDM_GETITEMRECT, 0, (LPARAM) &rect); - - ok(retVal == TRUE, "Getting item rect should TRUE, got %d\n", retVal); - /* check bounding rectangle information of 1st header item */ - expect(0, rect.left); - expect(0, rect.top); - - expect(80, rect.right); - todo_wine - { - expect(18, rect.bottom); - } - retVal = SendMessage(hChild, HDM_GETITEMRECT, 10, (LPARAM) &rect); - ok(retVal == 0, "Getting rect of nonexistent item should return 0, got %d\n", retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, getItemRect_seq, "getItemRect sequence testing", FALSE); - DestroyWindow(hChild); -} - -static void test_hdm_layout(HWND hParent) -{ - HWND hChild; - int retVal; - RECT rect; - HDLAYOUT hdLayout; - WINDOWPOS windowPos; - hdLayout.prc = ▭ - hdLayout.pwpos = &windowPos; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - retVal = SendMessage(hChild, HDM_LAYOUT, 0, (LPARAM) &hdLayout); - expect(TRUE, retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, layout_seq, "layout sequence testing", FALSE); - - DestroyWindow(hChild); -} - -static void test_hdm_ordertoindex(HWND hParent) -{ - HWND hChild; - int retVal; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - retVal = SendMessage(hChild, HDM_ORDERTOINDEX, 1, 0); - expect(1, retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, orderToIndex_seq, "orderToIndex sequence testing", FALSE); - DestroyWindow(hChild); -} - -static void test_hdm_hittest(HWND hParent) -{ - HWND hChild; - int retVal; - POINT pt; - HDHITTESTINFO hdHitTestInfo; - const int firstItemRightBoundary = 80; - const int secondItemRightBoundary = 160; - const int bottomBoundary = 18; - - pt.x = firstItemRightBoundary - 1; - pt.y = bottomBoundary - 1; - hdHitTestInfo.pt = pt; - - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - retVal = SendMessage(hChild, HDM_HITTEST, 0, (LPARAM) &hdHitTestInfo); - todo_wine - { - expect(0, retVal); - expect(0, hdHitTestInfo.iItem); - } - - pt.x = secondItemRightBoundary - 1; - pt.y = bottomBoundary - 1; - hdHitTestInfo.pt = pt; - retVal = SendMessage(hChild, HDM_HITTEST, 1, (LPARAM) &hdHitTestInfo); - todo_wine - { - expect(1, retVal); - } - expect(1, hdHitTestInfo.iItem); - - pt.x = secondItemRightBoundary; - pt.y = bottomBoundary + 1; - hdHitTestInfo.pt = pt; - todo_wine - { - retVal = SendMessage(hChild, HDM_HITTEST, 0, (LPARAM) &hdHitTestInfo); - expect(-1, retVal); - } - - ok_sequence(sequences, HEADER_SEQ_INDEX, hittest_seq, "hittest sequence testing", FALSE); - - DestroyWindow(hChild); -} - -static void test_hdm_sethotdivider(HWND hParent) -{ - HWND hChild; - int retVal; - /* low word: x coordinate = 5 - * high word: y coordinate = 5 - */ - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - todo_wine - { - retVal = SendMessage(hChild, HDM_SETHOTDIVIDER, TRUE, (LPARAM) 0X00050005); - expect(0, retVal); - } - retVal = SendMessage(hChild, HDM_SETHOTDIVIDER, FALSE, 100); - expect(100, retVal); - retVal = SendMessage(hChild, HDM_SETHOTDIVIDER, FALSE, 1); - expect(1, retVal); - if (winetest_interactive) - ok_sequence(sequences, HEADER_SEQ_INDEX, setHotDivider_seq_interactive, - "setHotDivider sequence testing", TRUE); - else - ok_sequence(sequences, HEADER_SEQ_INDEX, setHotDivider_seq_noninteractive, - "setHotDivider sequence testing", FALSE); - - DestroyWindow(hChild); -} - -static void test_hdm_imageMessages(HWND hParent) -{ - HIMAGELIST hImageList = ImageList_Create (4, 4, 0, 1, 0); - HIMAGELIST hImageListRetVal; - HWND hChild; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - hImageListRetVal = (HIMAGELIST) SendMessage(hChild, HDM_SETIMAGELIST, 0, (LPARAM) hImageList); - ok(hImageListRetVal == NULL, "Expected NULL, got %d\n", (int) hImageListRetVal); - - hImageListRetVal = (HIMAGELIST) SendMessage(hChild, HDM_GETIMAGELIST, 0, 0); - ok(hImageListRetVal != NULL, "Expected non-NULL handle, got %d\n", (int) hImageListRetVal); - - hImageListRetVal = (HIMAGELIST) SendMessage(hChild, HDM_CREATEDRAGIMAGE, 0, 0); - ok(hImageListRetVal != NULL, "Expected non-NULL handle, got %d\n", (int) hImageListRetVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, imageMessages_seq, "imageMessages sequence testing", FALSE); - - DestroyWindow(hChild); -} - -static void test_hdm_filterMessages(HWND hParent) -{ - HWND hChild; - int retVal; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - assert(hChild); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - todo_wine - { - /* msdn incorrectly states that return value - * is the index of the filter control being - * modified. The sendMessage here should - * return previous filter timeout value - */ - retVal = SendMessage(hChild, HDM_SETFILTERCHANGETIMEOUT, 1, 100); - expect(1000, retVal); - retVal = SendMessage(hChild, HDM_CLEARFILTER, 0, 1); - expect(1, retVal); - retVal = SendMessage(hChild, HDM_EDITFILTER, 1, 0); - expect(1, retVal); - } - if (winetest_interactive) - ok_sequence(sequences, HEADER_SEQ_INDEX, filterMessages_seq_interactive, - "filterMessages sequence testing", TRUE); - else - ok_sequence(sequences, HEADER_SEQ_INDEX, filterMessages_seq_noninteractive, - "filterMessages sequence testing", TRUE); - DestroyWindow(hChild); - -} - -static void test_hdm_unicodeformatMessages(HWND hParent) -{ - HWND hChild; - int retVal; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - retVal = SendMessage(hChild, HDM_SETUNICODEFORMAT, TRUE, 0); - expect(0, retVal); - retVal = SendMessage(hChild, HDM_GETUNICODEFORMAT, 0, 0); - expect(1, retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, unicodeformatMessages_seq, - "unicodeformatMessages sequence testing", FALSE); - DestroyWindow(hChild); -} - -static void test_hdm_bitmapmarginMessages(HWND hParent) -{ - HWND hChild; - int retVal; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - retVal = SendMessage(hChild, HDM_GETBITMAPMARGIN, 0, 0); - expect(6, retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, bitmapmarginMessages_seq, - "bitmapmarginMessages sequence testing", FALSE); - DestroyWindow(hChild); -} - -static void test_hdm_index_messages(HWND hParent) -{ - - HWND hChild; - int retVal; - int loopcnt; - int strcmpResult; - int iSize; - static const int lpiarray[2] = {1, 0}; - static int lpiarrayReceived[2]; - static char firstHeaderItem[] = "Name"; - static char secondHeaderItem[] = "Size"; - static char thirdHeaderItem[] = "Type"; - static char fourthHeaderItem[] = "Date Modified"; - static char *items[] = {firstHeaderItem, secondHeaderItem, thirdHeaderItem, fourthHeaderItem}; - HDITEM hdItem; - hdItem.mask = HDI_TEXT | HDI_WIDTH | HDI_FORMAT; - hdItem.fmt = HDF_LEFT; - hdItem.cxy = 80; - hdItem.cchTextMax = 260; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hChild = create_custom_header_control(hParent, FALSE); - if (winetest_interactive) - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq_interactive, - "adder header control to parent", TRUE); - else - ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, - "adder header control to parent", TRUE); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - for ( loopcnt = 0 ; loopcnt < 4 ; loopcnt++ ) - { - hdItem.pszText = items[loopcnt]; - retVal = SendMessage(hChild, HDM_INSERTITEM, loopcnt, (LPARAM) &hdItem); - ok(retVal == loopcnt, "Adding item %d failed with return value %d\n", ( loopcnt + 1 ), retVal); - } - ok_sequence(sequences, HEADER_SEQ_INDEX, insertItem_seq, "insertItem sequence testing", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - retVal = SendMessage(hChild, HDM_DELETEITEM, 3, (LPARAM) &hdItem); - ok(retVal == TRUE, "Deleting item 3 should return TRUE, got %d\n", retVal); - retVal = SendMessage(hChild, HDM_GETITEMCOUNT, 0, (LPARAM) &hdItem); - ok(retVal == 3, "Getting item count should return 3, got %d\n", retVal); - - retVal = SendMessage(hChild, HDM_DELETEITEM, 3, (LPARAM) &hdItem); - ok(retVal == FALSE, "Deleting already-deleted item should return FALSE, got %d\n", retVal); - retVal = SendMessage(hChild, HDM_GETITEMCOUNT, 0, (LPARAM) &hdItem); - ok(retVal == 3, "Getting item count should return 3, got %d\n", retVal); - - retVal = SendMessage(hChild, HDM_DELETEITEM, 2, (LPARAM) &hdItem); - ok(retVal == TRUE, "Deleting item 2 should return TRUE, got %d\n", retVal); - retVal = SendMessage(hChild, HDM_GETITEMCOUNT, 0, (LPARAM) &hdItem); - ok(retVal == 2, "Getting item count should return 2, got %d\n", retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, deleteItem_getItemCount_seq, - "deleteItem_getItemCount sequence testing", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - retVal = SendMessage(hChild, HDM_GETITEM, 3, (LPARAM) &hdItem); - ok(retVal == FALSE, "Getting already-deleted item should return FALSE, got %d\n", retVal); - - retVal = SendMessage(hChild, HDM_GETITEM, 0, (LPARAM) &hdItem); - ok(retVal == TRUE, "Getting the 1st header item should return TRUE, got %d\n", retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, getItem_seq, "getItem sequence testing", FALSE); - - /* check if the item is the right one */ - strcmpResult = strcmp(hdItem.pszText, firstHeaderItem); - expect(0, strcmpResult); - expect(80, hdItem.cxy); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - iSize = SendMessage(hChild, HDM_GETITEMCOUNT, 0, (LPARAM) &hdItem); - retVal = SendMessage(hChild, HDM_SETORDERARRAY, (WPARAM) iSize , (LPARAM) (LPINT) lpiarray ); - ok(retVal == TRUE, "Setting header items order should return TRUE, got %d\n", retVal); - - retVal = SendMessage(hChild, HDM_GETORDERARRAY, (WPARAM) iSize, (LPARAM) (LPINT) lpiarrayReceived ); - ok(retVal == TRUE, "Getting header items order should return TRUE, got %d\n", retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, orderArray_seq, "set_get_orderArray sequence testing", FALSE); - - /* check if the array order is set correctly and the size of the array is correct. */ - expect(2, iSize); - expect(lpiarray[0], lpiarrayReceived[0]); - expect(lpiarray[1], lpiarrayReceived[1]); - - hdItem.mask = HDI_FORMAT; - hdItem.fmt = HDF_CENTER | HDF_STRING; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - retVal = SendMessage(hChild, HDM_SETITEM, 0, (LPARAM) &hdItem); - ok(retVal == TRUE, "Aligning 1st header item to center should return TRUE, got %d\n", retVal); - hdItem.fmt = HDF_RIGHT | HDF_STRING; - retVal = SendMessage(hChild, HDM_SETITEM, 1, (LPARAM) &hdItem); - ok(retVal == TRUE, "Aligning 2nd header item to right should return TRUE, got %d\n", retVal); - - ok_sequence(sequences, HEADER_SEQ_INDEX, setItem_seq, "setItem sequence testing", FALSE); - DestroyWindow(hChild); -} - -#define TEST_NMCUSTOMDRAW(draw_stage, item_spec, lparam, _left, _top, _right, _bottom) \ - ok(nm->dwDrawStage == draw_stage, "Invalid dwDrawStage %d vs %d\n", draw_stage, nm->dwDrawStage); \ - if (item_spec != -1) \ - ok(nm->dwItemSpec == item_spec, "Invalid dwItemSpec %d vs %ld\n", item_spec, nm->dwItemSpec); \ - ok(nm->lItemlParam == lparam, "Invalid lItemlParam %d vs %ld\n", lparam, nm->lItemlParam); \ - ok(nm->rc.top == _top && nm->rc.bottom == _bottom && nm->rc.left == _left && nm->rc.right == _right, \ - "Invalid rect (%d,%d) (%d,%d) vs (%d,%d) (%d,%d)\n", _left, _top, _right, _bottom, \ - nm->rc.left, nm->rc.top, nm->rc.right, nm->rc.bottom); - -static LRESULT customdraw_1(int n, NMCUSTOMDRAW *nm) -{ - if (nm == NULL) { /* test ended */ - ok(n==1, "NM_CUSTOMDRAW messages: %d, expected: 1\n", n); - return 0; - } - - switch (n) - { - case 0: - /* don't test dwItemSpec - it's 0 no comctl5 but 1308756 on comctl6 */ - TEST_NMCUSTOMDRAW(CDDS_PREPAINT, -1, 0, 0, 0, 670, 18); - return 0; - } - - ok(FALSE, "To many custom draw messages (n=%d, nm->dwDrawStage=%d)\n", n, nm->dwDrawStage); - return -1; -} - -static LRESULT customdraw_2(int n, NMCUSTOMDRAW *nm) -{ - if (nm == NULL) { /* test ended */ - ok(n==4, "NM_CUSTOMDRAW messages: %d, expected: 4\n", n); - return 0; - } - - switch (n) - { - case 0: - TEST_NMCUSTOMDRAW(CDDS_PREPAINT, -1, 0, 0, 0, 670, 18); - return CDRF_NOTIFYITEMDRAW; - case 1: - TEST_NMCUSTOMDRAW(CDDS_ITEMPREPAINT, 0, 0, 0, 0, 50, 18); - return 0; - case 2: - TEST_NMCUSTOMDRAW(CDDS_ITEMPREPAINT, 1, 5, 50, 0, 150, 18); - return 0; - case 3: - TEST_NMCUSTOMDRAW(CDDS_ITEMPREPAINT, 2, 10, 150, 0, 300, 18); - return 0; - } - - ok(FALSE, "To many custom draw messages (n=%d, nm->dwDrawStage=%d)\n", n, nm->dwDrawStage); - return 0; -} - -static LRESULT customdraw_3(int n, NMCUSTOMDRAW *nm) -{ - if (nm == NULL) { /* test ended */ - ok(n==5, "NM_CUSTOMDRAW messages: %d, expected: 5\n", n); - return 0; - } - - switch (n) - { - case 0: - TEST_NMCUSTOMDRAW(CDDS_PREPAINT, -1, 0, 0, 0, 670, 18); - return CDRF_NOTIFYITEMDRAW|CDRF_NOTIFYPOSTERASE|CDRF_NOTIFYPOSTPAINT|CDRF_SKIPDEFAULT; - case 1: - TEST_NMCUSTOMDRAW(CDDS_ITEMPREPAINT, 0, 0, 0, 0, 50, 18); - return 0; - case 2: - TEST_NMCUSTOMDRAW(CDDS_ITEMPREPAINT, 1, 5, 50, 0, 150, 18); - return 0; - case 3: - TEST_NMCUSTOMDRAW(CDDS_ITEMPREPAINT, 2, 10, 150, 0, 300, 18); - return 0; - case 4: - TEST_NMCUSTOMDRAW(CDDS_POSTPAINT, -1, 0, 0, 0, 670, 18); - return 0; - } - - ok(FALSE, "To many custom draw messages (n=%d, nm->dwDrawStage=%d)\n", n, nm->dwDrawStage); - return 0; -} - - -static LRESULT customdraw_4(int n, NMCUSTOMDRAW *nm) -{ - if (nm == NULL) { /* test ended */ - ok(n==4, "NM_CUSTOMDRAW messages: %d, expected: 4\n", n); - return 0; - } - - switch (n) - { - case 0: - TEST_NMCUSTOMDRAW(CDDS_PREPAINT, -1, 0, 0, 0, 670, 18); - return CDRF_NOTIFYITEMDRAW|CDRF_NOTIFYPOSTPAINT; - case 1: - TEST_NMCUSTOMDRAW(CDDS_ITEMPREPAINT, 0, 0, 0, 0, 50, 18); - return 0; - case 2: - TEST_NMCUSTOMDRAW(CDDS_ITEMPREPAINT, 2, 10, 150, 0, 300, 18); - return 0; - case 3: - TEST_NMCUSTOMDRAW(CDDS_POSTPAINT, -1, 0, 0, 0, 670, 18); - return 0; - } - - ok(FALSE, "To many custom draw messages (n=%d, nm->dwDrawStage=%d)\n", n, nm->dwDrawStage); - return 0; -} - -static void run_customdraw_scenario(CUSTOMDRAWPROC proc) -{ - g_CustomDrawProc = proc; - g_CustomDrawCount = 0; - InvalidateRect(hWndHeader, NULL, TRUE); - UpdateWindow(hWndHeader); - proc(g_CustomDrawCount, NULL); - g_CustomDrawProc = NULL; -} - -static void test_customdraw(void) -{ - int i; - HDITEM item; - RECT rect; - CHAR name[] = "Test"; - hWndHeader = create_header_control(); - GetClientRect(hWndHeader, &rect); - ok(rect.right - rect.left == 670 && rect.bottom - rect.top == 18, - "Tests will fail as header size is %dx%d instead of 670x18\n", - rect.right - rect.left, rect.bottom - rect.top); - - for (i = 0; i < 3; i++) - { - ZeroMemory(&item, sizeof(item)); - item.mask = HDI_TEXT|HDI_WIDTH; - item.cxy = 50*(i+1); - item.pszText = name; - item.lParam = i*5; - SendMessage(hWndHeader, HDM_INSERTITEM, i, (LPARAM)&item); - } - - run_customdraw_scenario(customdraw_1); - run_customdraw_scenario(customdraw_2); - run_customdraw_scenario(customdraw_3); - - ZeroMemory(&item, sizeof(item)); - item.mask = HDI_FORMAT; - item.fmt = HDF_OWNERDRAW; - SendMessage(hWndHeader, HDM_SETITEM, 1, (LPARAM)&item); - g_DrawItem.CtlID = 0; - g_DrawItem.CtlType = ODT_HEADER; - g_DrawItem.hwndItem = hWndHeader; - g_DrawItem.itemID = 1; - g_DrawItem.itemState = 0; - SendMessage(hWndHeader, HDM_GETITEMRECT, 1, (LPARAM)&g_DrawItem.rcItem); - run_customdraw_scenario(customdraw_4); - ok(g_DrawItemReceived, "WM_DRAWITEM not received\n"); - DestroyWindow(hWndHeader); - hWndHeader = NULL; - g_DrawItem.CtlType = 0; - g_DrawItemReceived = FALSE; -} - -static void check_order(const int expected_id[], const int expected_order[], - int count, const char *type) -{ - int i; - HDITEMA hdi; - - ok(getItemCount(hWndHeader) == count, "Invalid item count in order tests\n"); - for (i = 0; i < count; i++) - { - hdi.mask = HDI_LPARAM|HDI_ORDER; - SendMessage(hWndHeader, HDM_GETITEMA, i, (LPARAM)&hdi); - ok(hdi.lParam == expected_id[i], - "Invalid item ids after '%s'- item %d has lParam %d\n", type, i, (int)hdi.lParam); - ok(hdi.iOrder == expected_order[i], - "Invalid item order after '%s'- item %d has iOrder %d\n", type, i, hdi.iOrder); - } -} - -static void test_header_order (void) -{ - const int rand1[] = {0, 1, 1, 0, 4}; - const int rand2[] = {4, 5, 6, 7, 4}; - const int rand3[] = {5, 5, 1, 6, 1}; - const int rand4[] = {1, 5, 2, 7, 6, 1, 4, 2, 3, 2}; - const int rand5[] = {7, 8, 5, 6, 7, 2, 1, 9, 10, 10}; - const int rand6[] = {2, 8, 3, 4, 0}; - - const int ids1[] = {3, 0, 2, 1, 4}; - const int ord1[] = {0, 1, 2, 3, 4}; - const int ids2[] = {3, 9, 7, 0, 2, 1, 4, 8, 6, 5}; - const int ord2[] = {0, 4, 7, 1, 2, 3, 9, 8, 6, 5}; - const int ord3[] = {0, 3, 9, 2, 1, 8, 7, 6, 5, 4}; - const int ids4[] = {9, 0, 1, 8, 6}; - const int ord4[] = {1, 0, 4, 3, 2}; - - char buffer[20]; - HDITEMA hdi; - int i; - - hWndHeader = create_header_control(); - - ZeroMemory(&hdi, sizeof(HDITEMA)); - hdi.mask = HDI_TEXT | HDI_LPARAM; - hdi.pszText = buffer; - strcpy(buffer, "test"); - - for (i = 0; i < 5; i++) - { - hdi.lParam = i; - SendMessage(hWndHeader, HDM_INSERTITEMA, rand1[i], (LPARAM)&hdi); - rand(); - } - check_order(ids1, ord1, 5, "insert without iOrder"); - - hdi.mask |= HDI_ORDER; - for (i = 0; i < 5; i++) - { - hdi.lParam = i + 5; - hdi.iOrder = rand2[i]; - SendMessage(hWndHeader, HDM_INSERTITEMA, rand3[i], (LPARAM)&hdi); - rand(); rand(); - } - check_order(ids2, ord2, 10, "insert with order"); - - hdi.mask = HDI_ORDER; - for (i=0; i<10; i++) - { - hdi.iOrder = rand5[i]; - SendMessage(hWndHeader, HDM_SETITEMA, rand4[i], (LPARAM)&hdi); - rand(); rand(); - } - check_order(ids2, ord3, 10, "setitems changing order"); - - for (i=0; i<5; i++) - SendMessage(hWndHeader, HDM_DELETEITEM, rand6[i], 0); - check_order(ids4, ord4, 5, "deleteitem"); - - DestroyWindow(hWndHeader); -} - -static LRESULT CALLBACK HeaderTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - DRAWITEMSTRUCT *di; - switch(msg) { - - case WM_NOTIFY: - { - NMHEADERA *hdr = (NMHEADER *)lParam; - EXPECTEDNOTIFY *expected; - int i; - - if (hdr->hdr.code == NM_CUSTOMDRAW) - if (g_CustomDrawProc) - return g_CustomDrawProc(g_CustomDrawCount++, (NMCUSTOMDRAW*)hdr); - - for (i=0; ihdr.code != unexpectedNotify[i], "Received invalid notify %d\n", hdr->hdr.code); - - if (nReceivedNotify >= nExpectedNotify || hdr->hdr.hwndFrom != hWndHeader ) - break; - - expected = &expectedNotify[nReceivedNotify]; - if (hdr->hdr.code != expected->iCode) - break; - - nReceivedNotify++; - compare_items(hdr->hdr.code, &expected->hdItem, hdr->pitem, expected->fUnicode); - break; - } - - case WM_DRAWITEM: - di = (DRAWITEMSTRUCT *)lParam; - ok(g_DrawItem.CtlType != 0, "Unexpected WM_DRAWITEM\n"); - if (g_DrawItem.CtlType == 0) return 0; - g_DrawItemReceived = TRUE; - compare(di->CtlType, g_DrawItem.CtlType, "%d"); - compare(di->CtlID, g_DrawItem.CtlID, "%d"); - compare(di->hwndItem, g_DrawItem.hwndItem, "%p"); - compare(di->itemID, g_DrawItem.itemID, "%d"); - compare(di->itemState, g_DrawItem.itemState, "%d"); - compare(di->rcItem.left, g_DrawItem.rcItem.left, "%d"); - compare(di->rcItem.top, g_DrawItem.rcItem.top, "%d"); - compare(di->rcItem.right, g_DrawItem.rcItem.right, "%d"); - compare(di->rcItem.bottom, g_DrawItem.rcItem.bottom, "%d"); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProcA(hWnd, msg, wParam, lParam); - } - - return 0L; -} - -static int init(void) -{ - HMODULE hComctl32; - BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); - WNDCLASSA wc; - INITCOMMONCONTROLSEX iccex; - - hComctl32 = GetModuleHandleA("comctl32.dll"); - pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); - if (!pInitCommonControlsEx) - { - skip("InitCommonControlsEx() is missing. Skipping the tests\n"); - return 0; - } - - iccex.dwSize = sizeof(iccex); - iccex.dwICC = ICC_USEREX_CLASSES; - pInitCommonControlsEx(&iccex); - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_ARROW); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = "HeaderTestClass"; - wc.lpfnWndProc = HeaderTestWndProc; - RegisterClassA(&wc); - - hHeaderParentWnd = CreateWindowExA(0, "HeaderTestClass", "Header test", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 672+2*GetSystemMetrics(SM_CXSIZEFRAME), - 226+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYSIZEFRAME), - NULL, NULL, GetModuleHandleA(NULL), 0); - assert(hHeaderParentWnd != NULL); - ShowWindow(hHeaderParentWnd, SW_SHOW); - return 1; -} - -START_TEST(header) -{ - HWND parent_hwnd; - - if (!init()) - return; - - test_header_control(); - test_header_order(); - test_customdraw(); - - DestroyWindow(hHeaderParentWnd); - - init_msg_sequences(sequences, NUM_MSG_SEQUENCES); - parent_hwnd = create_custom_parent_window(); - ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_wnd_seq, "create parent windows", FALSE); - - test_hdm_index_messages(parent_hwnd); - test_hdm_getitemrect(parent_hwnd); - test_hdm_hittest(parent_hwnd); - test_hdm_layout(parent_hwnd); - test_hdm_ordertoindex(parent_hwnd); - test_hdm_sethotdivider(parent_hwnd); - test_hdm_imageMessages(parent_hwnd); - test_hdm_filterMessages(parent_hwnd); - test_hdm_unicodeformatMessages(parent_hwnd); - test_hdm_bitmapmarginMessages(parent_hwnd); - - DestroyWindow(parent_hwnd); - -} diff --git a/rostests/winetests/comctl32/imagelist.c b/rostests/winetests/comctl32/imagelist.c deleted file mode 100644 index 0d1770b3cbc..00000000000 --- a/rostests/winetests/comctl32/imagelist.c +++ /dev/null @@ -1,993 +0,0 @@ -/* - * Unit test suite for imagelist control. - * - * Copyright 2004 Michael Stefaniuc - * Copyright 2002 Mike McCormack for CodeWeavers - * Copyright 2007 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 COBJMACROS -#define CONST_VTABLE - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "objbase.h" -#include "commctrl.h" /* must be included after objbase.h to get ImageList_Write */ - -#include "wine/test.h" - -#undef VISIBLE - -#ifdef VISIBLE -#define WAIT Sleep (1000) -#define REDRAW(hwnd) RedrawWindow (hwnd, NULL, 0, RDW_UPDATENOW) -#else -#define WAIT -#define REDRAW(hwnd) -#endif - -#define IMAGELIST_MAGIC (('L' << 8) | 'I') - -#include "pshpack2.h" -/* Header used by ImageList_Read() and ImageList_Write() */ -typedef struct _ILHEAD -{ - USHORT usMagic; - USHORT usVersion; - WORD cCurImage; - WORD cMaxImage; - WORD cGrow; - WORD cx; - WORD cy; - COLORREF bkcolor; - WORD flags; - SHORT ovls[4]; -} ILHEAD; -#include "poppack.h" - -static BOOL (WINAPI *pImageList_DrawIndirect)(IMAGELISTDRAWPARAMS*); -static BOOL (WINAPI *pImageList_SetImageCount)(HIMAGELIST,UINT); - -static HDC desktopDC; -static HINSTANCE hinst; - -/* These macros build cursor/bitmap data in 4x4 pixel blocks */ -#define B(x,y) ((x?0xf0:0)|(y?0xf:0)) -#define ROW1(a,b,c,d,e,f,g,h) B(a,b),B(c,d),B(e,f),B(g,h) -#define ROW32(a,b,c,d,e,f,g,h) ROW1(a,b,c,d,e,f,g,h), ROW1(a,b,c,d,e,f,g,h), \ - ROW1(a,b,c,d,e,f,g,h), ROW1(a,b,c,d,e,f,g,h) -#define ROW2(a,b,c,d,e,f,g,h,i,j,k,l) ROW1(a,b,c,d,e,f,g,h),B(i,j),B(k,l) -#define ROW48(a,b,c,d,e,f,g,h,i,j,k,l) ROW2(a,b,c,d,e,f,g,h,i,j,k,l), \ - ROW2(a,b,c,d,e,f,g,h,i,j,k,l), ROW2(a,b,c,d,e,f,g,h,i,j,k,l), \ - ROW2(a,b,c,d,e,f,g,h,i,j,k,l) - -static const BYTE empty_bits[48*48/8]; - -static const BYTE icon_bits[32*32/8] = -{ - ROW32(0,0,0,0,0,0,0,0), - ROW32(0,0,1,1,1,1,0,0), - ROW32(0,1,1,1,1,1,1,0), - ROW32(0,1,1,0,0,1,1,0), - ROW32(0,1,1,0,0,1,1,0), - ROW32(0,1,1,1,1,1,1,0), - ROW32(0,0,1,1,1,1,0,0), - ROW32(0,0,0,0,0,0,0,0) -}; - -static const BYTE bitmap_bits[48*48/8] = -{ - ROW48(0,0,0,0,0,0,0,0,0,0,0,0), - ROW48(0,1,1,1,1,1,1,1,1,1,1,0), - ROW48(0,1,1,0,0,0,0,0,0,1,1,0), - ROW48(0,1,0,0,0,0,0,0,1,0,1,0), - ROW48(0,1,0,0,0,0,0,1,0,0,1,0), - ROW48(0,1,0,0,0,0,1,0,0,0,1,0), - ROW48(0,1,0,0,0,1,0,0,0,0,1,0), - ROW48(0,1,0,0,1,0,0,0,0,0,1,0), - ROW48(0,1,0,1,0,0,0,0,0,0,1,0), - ROW48(0,1,1,0,0,0,0,0,0,1,1,0), - ROW48(0,1,1,1,1,1,1,1,1,1,1,0), - ROW48(0,0,0,0,0,0,0,0,0,0,0,0) -}; - -static HIMAGELIST createImageList(int cx, int cy) -{ - /* Create an ImageList and put an image into it */ - HIMAGELIST himl = ImageList_Create(cx, cy, ILC_COLOR, 1, 1); - HBITMAP hbm = CreateBitmap(48, 48, 1, 1, bitmap_bits); - ImageList_Add(himl, hbm, NULL); - return himl; -} - -static HWND create_a_window(void) -{ - char className[] = "bmwnd"; - char winName[] = "Test Bitmap"; - HWND hWnd; - static int registered = 0; - - if (!registered) - { - WNDCLASSA cls; - - cls.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS; - cls.lpfnWndProc = DefWindowProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = 0; - cls.hIcon = LoadIconA (0, (LPSTR)IDI_APPLICATION); - cls.hCursor = LoadCursorA (0, (LPSTR)IDC_ARROW); - cls.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); - cls.lpszMenuName = 0; - cls.lpszClassName = className; - - RegisterClassA (&cls); - registered = 1; - } - - /* Setup window */ - hWnd = CreateWindowA (className, winName, - WS_OVERLAPPEDWINDOW , - CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0, - 0, hinst, 0); - -#ifdef VISIBLE - ShowWindow (hWnd, SW_SHOW); -#endif - REDRAW(hWnd); - WAIT; - - return hWnd; -} - -static HDC show_image(HWND hwnd, HIMAGELIST himl, int idx, int size, - LPCSTR loc, BOOL clear) -{ - HDC hdc = NULL; -#ifdef VISIBLE - if (!himl) return NULL; - - SetWindowText(hwnd, loc); - hdc = GetDC(hwnd); - ImageList_Draw(himl, idx, hdc, 0, 0, ILD_TRANSPARENT); - - REDRAW(hwnd); - WAIT; - - if (clear) - { - BitBlt(hdc, 0, 0, size, size, hdc, size+1, size+1, SRCCOPY); - ReleaseDC(hwnd, hdc); - hdc = NULL; - } -#endif /* VISIBLE */ - return hdc; -} - -/* Useful for checking differences */ -#if 0 -static void dump_bits(const BYTE *p, const BYTE *q, int size) -{ - int i, j; - - size /= 8; - - for (i = 0; i < size * 2; i++) - { - printf("|"); - for (j = 0; j < size; j++) - printf("%c%c", p[j] & 0xf0 ? 'X' : ' ', p[j] & 0xf ? 'X' : ' '); - printf(" -- "); - for (j = 0; j < size; j++) - printf("%c%c", q[j] & 0xf0 ? 'X' : ' ', q[j] & 0xf ? 'X' : ' '); - printf("|\n"); - p += size * 4; - q += size * 4; - } - printf("\n"); -} -#endif - -static void check_bits(HWND hwnd, HIMAGELIST himl, int idx, int size, - const BYTE *checkbits, LPCSTR loc) -{ -#ifdef VISIBLE - BYTE bits[100*100/8]; - COLORREF c; - HDC hdc; - int x, y, i = -1; - - if (!himl) return; - - memset(bits, 0, sizeof(bits)); - hdc = show_image(hwnd, himl, idx, size, loc, FALSE); - - c = GetPixel(hdc, 0, 0); - - for (y = 0; y < size; y ++) - { - for (x = 0; x < size; x++) - { - if (!(x & 0x7)) i++; - if (GetPixel(hdc, x, y) != c) bits[i] |= (0x80 >> (x & 0x7)); - } - } - - BitBlt(hdc, 0, 0, size, size, hdc, size+1, size+1, SRCCOPY); - ReleaseDC(hwnd, hdc); - - ok (memcmp(bits, checkbits, (size * size)/8) == 0, - "%s: bits different\n", loc); - if (memcmp(bits, checkbits, (size * size)/8)) - dump_bits(bits, checkbits, size); -#endif /* VISIBLE */ -} - -static void testHotspot (void) -{ - struct hotspot { - int dx; - int dy; - }; - -#define SIZEX1 47 -#define SIZEY1 31 -#define SIZEX2 11 -#define SIZEY2 17 -#define HOTSPOTS_MAX 4 /* Number of entries in hotspots */ - static const struct hotspot hotspots[HOTSPOTS_MAX] = { - { 10, 7 }, - { SIZEX1, SIZEY1 }, - { -9, -8 }, - { -7, 35 } - }; - int i, j, ret; - HIMAGELIST himl1 = createImageList(SIZEX1, SIZEY1); - HIMAGELIST himl2 = createImageList(SIZEX2, SIZEY2); - HWND hwnd = create_a_window(); - - - for (i = 0; i < HOTSPOTS_MAX; i++) { - for (j = 0; j < HOTSPOTS_MAX; j++) { - int dx1 = hotspots[i].dx; - int dy1 = hotspots[i].dy; - int dx2 = hotspots[j].dx; - int dy2 = hotspots[j].dy; - int correctx, correcty, newx, newy; - char loc[256]; - HIMAGELIST himlNew; - POINT ppt; - - ret = ImageList_BeginDrag(himl1, 0, dx1, dy1); - ok(ret != 0, "BeginDrag failed for { %d, %d }\n", dx1, dy1); - sprintf(loc, "BeginDrag (%d,%d)\n", i, j); - show_image(hwnd, himl1, 0, max(SIZEX1, SIZEY1), loc, TRUE); - - /* check merging the dragged image with a second image */ - ret = ImageList_SetDragCursorImage(himl2, 0, dx2, dy2); - ok(ret != 0, "SetDragCursorImage failed for {%d, %d}{%d, %d}\n", - dx1, dy1, dx2, dy2); - sprintf(loc, "SetDragCursorImage (%d,%d)\n", i, j); - show_image(hwnd, himl2, 0, max(SIZEX2, SIZEY2), loc, TRUE); - - /* check new hotspot, it should be the same like the old one */ - himlNew = ImageList_GetDragImage(NULL, &ppt); - ok(ppt.x == dx1 && ppt.y == dy1, - "Expected drag hotspot [%d,%d] got [%d,%d]\n", - dx1, dy1, ppt.x, ppt.y); - /* check size of new dragged image */ - ImageList_GetIconSize(himlNew, &newx, &newy); - correctx = max(SIZEX1, max(SIZEX2 + dx2, SIZEX1 - dx2)); - correcty = max(SIZEY1, max(SIZEY2 + dy2, SIZEY1 - dy2)); - ok(newx == correctx && newy == correcty, - "Expected drag image size [%d,%d] got [%d,%d]\n", - correctx, correcty, newx, newy); - sprintf(loc, "GetDragImage (%d,%d)\n", i, j); - show_image(hwnd, himlNew, 0, max(correctx, correcty), loc, TRUE); - ImageList_EndDrag(); - } - } -#undef SIZEX1 -#undef SIZEY1 -#undef SIZEX2 -#undef SIZEY2 -#undef HOTSPOTS_MAX - ImageList_Destroy(himl2); - ImageList_Destroy(himl1); - DestroyWindow(hwnd); -} - -static BOOL DoTest1(void) -{ - HIMAGELIST himl ; - - HICON hicon1 ; - HICON hicon2 ; - HICON hicon3 ; - - /* create an imagelist to play with */ - himl = ImageList_Create(84,84,0x10,0,3); - ok(himl!=0,"failed to create imagelist\n"); - - /* load the icons to add to the image list */ - hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits); - ok(hicon1 != 0, "no hicon1\n"); - hicon2 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits); - ok(hicon2 != 0, "no hicon2\n"); - hicon3 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits); - ok(hicon3 != 0, "no hicon3\n"); - - /* remove when nothing exists */ - ok(!ImageList_Remove(himl,0),"removed nonexistent icon\n"); - /* removing everything from an empty imagelist should succeed */ - ok(ImageList_RemoveAll(himl),"removed nonexistent icon\n"); - - /* add three */ - ok(0==ImageList_AddIcon(himl, hicon1),"failed to add icon1\n"); - ok(1==ImageList_AddIcon(himl, hicon2),"failed to add icon2\n"); - ok(2==ImageList_AddIcon(himl, hicon3),"failed to add icon3\n"); - - /* remove an index out of range */ - ok(!ImageList_Remove(himl,4711),"removed nonexistent icon\n"); - - /* remove three */ - ok(ImageList_Remove(himl,0),"can't remove 0\n"); - ok(ImageList_Remove(himl,0),"can't remove 0\n"); - ok(ImageList_Remove(himl,0),"can't remove 0\n"); - - /* remove one extra */ - ok(!ImageList_Remove(himl,0),"removed nonexistent icon\n"); - - /* check SetImageCount/GetImageCount */ - if (pImageList_SetImageCount) - { - ok(pImageList_SetImageCount(himl, 3), "couldn't increase image count\n"); - ok(ImageList_GetImageCount(himl) == 3, "invalid image count after increase\n"); - ok(pImageList_SetImageCount(himl, 1), "couldn't decrease image count\n"); - ok(ImageList_GetImageCount(himl) == 1, "invalid image count after decrease to 1\n"); - ok(pImageList_SetImageCount(himl, 0), "couldn't decrease image count\n"); - ok(ImageList_GetImageCount(himl) == 0, "invalid image count after decrease to 0\n"); - } - else - { - skip("skipped ImageList_SetImageCount tests\n"); - } - - /* destroy it */ - ok(ImageList_Destroy(himl),"destroy imagelist failed\n"); - - ok(DestroyIcon(hicon1),"icon 1 wasn't deleted\n"); - ok(DestroyIcon(hicon2),"icon 2 wasn't deleted\n"); - ok(DestroyIcon(hicon3),"icon 3 wasn't deleted\n"); - - return TRUE; -} - -static BOOL DoTest2(void) -{ - HIMAGELIST himl ; - - HICON hicon1 ; - HICON hicon2 ; - HICON hicon3 ; - - /* create an imagelist to play with */ - himl = ImageList_Create(84,84,0x10,0,3); - ok(himl!=0,"failed to create imagelist\n"); - - /* load the icons to add to the image list */ - hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits); - ok(hicon1 != 0, "no hicon1\n"); - hicon2 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits); - ok(hicon2 != 0, "no hicon2\n"); - hicon3 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits); - ok(hicon3 != 0, "no hicon3\n"); - - /* add three */ - ok(0==ImageList_AddIcon(himl, hicon1),"failed to add icon1\n"); - ok(1==ImageList_AddIcon(himl, hicon2),"failed to add icon2\n"); - ok(2==ImageList_AddIcon(himl, hicon3),"failed to add icon3\n"); - - /* destroy it */ - ok(ImageList_Destroy(himl),"destroy imagelist failed\n"); - - ok(DestroyIcon(hicon1),"icon 1 wasn't deleted\n"); - ok(DestroyIcon(hicon2),"icon 2 wasn't deleted\n"); - ok(DestroyIcon(hicon3),"icon 3 wasn't deleted\n"); - - return TRUE; -} - -static BOOL DoTest3(void) -{ - HIMAGELIST himl; - - HBITMAP hbm1; - HBITMAP hbm2; - HBITMAP hbm3; - - IMAGELISTDRAWPARAMS imldp; - HDC hdc; - HWND hwndfortest; - - if (!pImageList_DrawIndirect) - { - trace("ImageList_DrawIndirect not available, skipping test\n"); - return TRUE; - } - - hwndfortest = create_a_window(); - hdc = GetDC(hwndfortest); - ok(hdc!=NULL, "couldn't get DC\n"); - - /* create an imagelist to play with */ - himl = ImageList_Create(48,48,0x10,0,3); - ok(himl!=0,"failed to create imagelist\n"); - - /* load the icons to add to the image list */ - hbm1 = CreateBitmap(48, 48, 1, 1, bitmap_bits); - ok(hbm1 != 0, "no bitmap 1\n"); - hbm2 = CreateBitmap(48, 48, 1, 1, bitmap_bits); - ok(hbm2 != 0, "no bitmap 2\n"); - hbm3 = CreateBitmap(48, 48, 1, 1, bitmap_bits); - ok(hbm3 != 0, "no bitmap 3\n"); - - /* add three */ - ok(0==ImageList_Add(himl, hbm1, 0),"failed to add bitmap 1\n"); - ok(1==ImageList_Add(himl, hbm2, 0),"failed to add bitmap 2\n"); - - if (pImageList_SetImageCount) - { - ok(pImageList_SetImageCount(himl,3),"Setimage count failed\n"); - /*ok(2==ImageList_Add(himl, hbm3, NULL),"failed to add bitmap 3\n"); */ - ok(ImageList_Replace(himl, 2, hbm3, 0),"failed to replace bitmap 3\n"); - } - - memset(&imldp, 0, sizeof (imldp)); - ok(!pImageList_DrawIndirect(&imldp), "zero data succeeded!\n"); - imldp.cbSize = sizeof (imldp); - ok(!pImageList_DrawIndirect(&imldp), "zero hdc succeeded!\n"); - imldp.hdcDst = hdc; - ok(!pImageList_DrawIndirect(&imldp),"zero himl succeeded!\n"); - imldp.himl = himl; - if (!pImageList_DrawIndirect(&imldp)) - { - /* Earlier versions of native comctl32 use a smaller structure */ - imldp.cbSize -= 3 * sizeof(DWORD); - ok(pImageList_DrawIndirect(&imldp),"DrawIndirect should succeed\n"); - } - REDRAW(hwndfortest); - WAIT; - - imldp.fStyle = SRCCOPY; - imldp.rgbBk = CLR_DEFAULT; - imldp.rgbFg = CLR_DEFAULT; - imldp.y = 100; - imldp.x = 100; - ok(pImageList_DrawIndirect(&imldp),"should succeed\n"); - imldp.i ++; - ok(pImageList_DrawIndirect(&imldp),"should succeed\n"); - imldp.i ++; - ok(pImageList_DrawIndirect(&imldp),"should succeed\n"); - imldp.i ++; - ok(!pImageList_DrawIndirect(&imldp),"should fail\n"); - - /* remove three */ - ok(ImageList_Remove(himl, 0), "removing 1st bitmap\n"); - ok(ImageList_Remove(himl, 0), "removing 2nd bitmap\n"); - ok(ImageList_Remove(himl, 0), "removing 3rd bitmap\n"); - - /* destroy it */ - ok(ImageList_Destroy(himl),"destroy imagelist failed\n"); - - /* bitmaps should not be deleted by the imagelist */ - ok(DeleteObject(hbm1),"bitmap 1 can't be deleted\n"); - ok(DeleteObject(hbm2),"bitmap 2 can't be deleted\n"); - ok(DeleteObject(hbm3),"bitmap 3 can't be deleted\n"); - - ReleaseDC(hwndfortest, hdc); - DestroyWindow(hwndfortest); - - return TRUE; -} - -static void testMerge(void) -{ - HIMAGELIST himl1, himl2, hmerge; - HICON hicon1; - HWND hwnd = create_a_window(); - - himl1 = ImageList_Create(32,32,0,0,3); - ok(himl1 != NULL,"failed to create himl1\n"); - - himl2 = ImageList_Create(32,32,0,0,3); - ok(himl2 != NULL,"failed to create himl2\n"); - - hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits); - ok(hicon1 != NULL, "failed to create hicon1\n"); - - if (!himl1 || !himl2 || !hicon1) - return; - - ok(0==ImageList_AddIcon(himl2, hicon1),"add icon1 to himl2 failed\n"); - check_bits(hwnd, himl2, 0, 32, icon_bits, "add icon1 to himl2"); - - /* If himl1 has no images, merge still succeeds */ - hmerge = ImageList_Merge(himl1, -1, himl2, 0, 0, 0); - ok(hmerge != NULL, "merge himl1,-1 failed\n"); - check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl1,-1"); - if (hmerge) ImageList_Destroy(hmerge); - - hmerge = ImageList_Merge(himl1, 0, himl2, 0, 0, 0); - ok(hmerge != NULL,"merge himl1,0 failed\n"); - check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl1,0"); - if (hmerge) ImageList_Destroy(hmerge); - - /* Same happens if himl2 is empty */ - ImageList_Destroy(himl2); - himl2 = ImageList_Create(32,32,0,0,3); - ok(himl2 != NULL,"failed to recreate himl2\n"); - if (!himl2) - return; - - hmerge = ImageList_Merge(himl1, -1, himl2, -1, 0, 0); - ok(hmerge != NULL, "merge himl2,-1 failed\n"); - check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl2,-1"); - if (hmerge) ImageList_Destroy(hmerge); - - hmerge = ImageList_Merge(himl1, -1, himl2, 0, 0, 0); - ok(hmerge != NULL, "merge himl2,0 failed\n"); - check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl2,0"); - if (hmerge) ImageList_Destroy(hmerge); - - /* Now try merging an image with itself */ - ok(0==ImageList_AddIcon(himl2, hicon1),"re-add icon1 to himl2 failed\n"); - - hmerge = ImageList_Merge(himl2, 0, himl2, 0, 0, 0); - ok(hmerge != NULL, "merge himl2 with itself failed\n"); - check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl2 with itself"); - if (hmerge) ImageList_Destroy(hmerge); - - /* Try merging 2 different image lists */ - ok(0==ImageList_AddIcon(himl1, hicon1),"add icon1 to himl1 failed\n"); - - hmerge = ImageList_Merge(himl1, 0, himl2, 0, 0, 0); - ok(hmerge != NULL, "merge himl1 with himl2 failed\n"); - check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl1 with himl2"); - if (hmerge) ImageList_Destroy(hmerge); - - hmerge = ImageList_Merge(himl1, 0, himl2, 0, 8, 16); - ok(hmerge != NULL, "merge himl1 with himl2 8,16 failed\n"); - check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl1 with himl2, 8,16"); - if (hmerge) ImageList_Destroy(hmerge); - - ImageList_Destroy(himl1); - ImageList_Destroy(himl2); - DestroyIcon(hicon1); - DestroyWindow(hwnd); -} - -/*********************** imagelist storage test ***************************/ - -#define BMP_CX 48 - -struct my_IStream -{ - IStream is; - char *iml_data; /* written imagelist data */ - ULONG iml_data_size; -}; - -static HRESULT STDMETHODCALLTYPE Test_Stream_QueryInterface( - IStream* This, - REFIID riid, - void** ppvObject) -{ - assert(0); - return E_NOTIMPL; -} - -static ULONG STDMETHODCALLTYPE Test_Stream_AddRef( - IStream* This) -{ - assert(0); - return 2; -} - -static ULONG STDMETHODCALLTYPE Test_Stream_Release( - IStream* This) -{ - assert(0); - return 1; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_Read( - IStream* This, - void* pv, - ULONG cb, - ULONG* pcbRead) -{ - assert(0); - return E_NOTIMPL; -} - -static BOOL allocate_storage(struct my_IStream *my_is, ULONG add) -{ - my_is->iml_data_size += add; - - if (!my_is->iml_data) - my_is->iml_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, my_is->iml_data_size); - else - my_is->iml_data = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, my_is->iml_data, my_is->iml_data_size); - - return my_is->iml_data ? TRUE : FALSE; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_Write( - IStream* This, - const void* pv, - ULONG cb, - ULONG* pcbWritten) -{ - struct my_IStream *my_is = (struct my_IStream *)This; - ULONG current_iml_data_size = my_is->iml_data_size; - - if (!allocate_storage(my_is, cb)) return E_FAIL; - - memcpy(my_is->iml_data + current_iml_data_size, pv, cb); - if (pcbWritten) *pcbWritten = cb; - - return S_OK; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_Seek( - IStream* This, - LARGE_INTEGER dlibMove, - DWORD dwOrigin, - ULARGE_INTEGER* plibNewPosition) -{ - assert(0); - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_SetSize( - IStream* This, - ULARGE_INTEGER libNewSize) -{ - assert(0); - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_CopyTo( - IStream* This, - IStream* pstm, - ULARGE_INTEGER cb, - ULARGE_INTEGER* pcbRead, - ULARGE_INTEGER* pcbWritten) -{ - assert(0); - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_Commit( - IStream* This, - DWORD grfCommitFlags) -{ - assert(0); - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_Revert( - IStream* This) -{ - assert(0); - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_LockRegion( - IStream* This, - ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, - DWORD dwLockType) -{ - assert(0); - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_UnlockRegion( - IStream* This, - ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, - DWORD dwLockType) -{ - assert(0); - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_Stat( - IStream* This, - STATSTG* pstatstg, - DWORD grfStatFlag) -{ - assert(0); - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE Test_Stream_Clone( - IStream* This, - IStream** ppstm) -{ - assert(0); - return E_NOTIMPL; -} - -static const IStreamVtbl Test_Stream_Vtbl = -{ - Test_Stream_QueryInterface, - Test_Stream_AddRef, - Test_Stream_Release, - Test_Stream_Read, - Test_Stream_Write, - Test_Stream_Seek, - Test_Stream_SetSize, - Test_Stream_CopyTo, - Test_Stream_Commit, - Test_Stream_Revert, - Test_Stream_LockRegion, - Test_Stream_UnlockRegion, - Test_Stream_Stat, - Test_Stream_Clone -}; - -static struct my_IStream Test_Stream = { { &Test_Stream_Vtbl }, 0, 0 }; - -static INT DIB_GetWidthBytes( int width, int bpp ) -{ - int words; - - switch (bpp) - { - case 1: words = (width + 31) / 32; break; - case 4: words = (width + 7) / 8; break; - case 8: words = (width + 3) / 4; break; - case 15: - case 16: words = (width + 1) / 2; break; - case 24: words = (width * 3 + 3)/4; break; - case 32: words = width; break; - - default: - words=0; - trace("Unknown depth %d, please report.\n", bpp ); - assert(0); - break; - } - return 4 * words; -} - -static void check_bitmap_data(const char *bm_data, ULONG bm_data_size, - INT width, INT height, INT bpp, - const char *comment) -{ - const BITMAPFILEHEADER *bmfh = (const BITMAPFILEHEADER *)bm_data; - const BITMAPINFOHEADER *bmih = (const BITMAPINFOHEADER *)(bm_data + sizeof(*bmfh)); - ULONG hdr_size, image_size; - - hdr_size = sizeof(*bmfh) + sizeof(*bmih); - if (bmih->biBitCount <= 8) hdr_size += (1 << bpp) * sizeof(RGBQUAD); - - ok(bmfh->bfType == (('M' << 8) | 'B'), "wrong bfType 0x%02x\n", bmfh->bfType); - ok(bmfh->bfSize == hdr_size, "wrong bfSize 0x%02x\n", bmfh->bfSize); - ok(bmfh->bfReserved1 == 0, "wrong bfReserved1 0x%02x\n", bmfh->bfReserved1); - ok(bmfh->bfReserved2 == 0, "wrong bfReserved2 0x%02x\n", bmfh->bfReserved2); - ok(bmfh->bfOffBits == hdr_size, "wrong bfOffBits 0x%02x\n", bmfh->bfOffBits); - - ok(bmih->biSize == sizeof(*bmih), "wrong biSize %d\n", bmih->biSize); - ok(bmih->biWidth == width, "wrong biWidth %d (expected %d)\n", bmih->biWidth, width); - ok(bmih->biHeight == height, "wrong biHeight %d (expected %d)\n", bmih->biHeight, height); - ok(bmih->biPlanes == 1, "wrong biPlanes %d\n", bmih->biPlanes); - ok(bmih->biBitCount == bpp, "wrong biBitCount %d\n", bmih->biBitCount); - - image_size = DIB_GetWidthBytes(bmih->biWidth, bmih->biBitCount) * bmih->biHeight; - ok(bmih->biSizeImage == image_size, "wrong biSizeImage %u\n", bmih->biSizeImage); -#if 0 -{ - char fname[256]; - FILE *f; - sprintf(fname, "bmp_%s.bmp", comment); - f = fopen(fname, "wb"); - fwrite(bm_data, 1, bm_data_size, f); - fclose(f); -} -#endif -} - -static void check_ilhead_data(const char *ilh_data, INT cx, INT cy, INT cur, INT max) -{ - ILHEAD *ilh = (ILHEAD *)ilh_data; - - ok(ilh->usMagic == IMAGELIST_MAGIC, "wrong usMagic %4x (expected %02x)\n", ilh->usMagic, IMAGELIST_MAGIC); - ok(ilh->usVersion == 0x101, "wrong usVersion %x (expected 0x101)\n", ilh->usVersion); - ok(ilh->cCurImage == cur, "wrong cCurImage %d (expected %d)\n", ilh->cCurImage, cur); - ok(ilh->cMaxImage == max, "wrong cMaxImage %d (expected %d)\n", ilh->cMaxImage, max); - ok(ilh->cGrow == 4, "wrong cGrow %d (expected 4)\n", ilh->cGrow); - ok(ilh->cx == cx, "wrong cx %d (expected %d)\n", ilh->cx, cx); - ok(ilh->cy == cy, "wrong cy %d (expected %d)\n", ilh->cy, cy); - ok(ilh->bkcolor == CLR_NONE, "wrong bkcolor %x\n", ilh->bkcolor); - ok(ilh->flags == ILC_COLOR24, "wrong flags %04x\n", ilh->flags); - ok(ilh->ovls[0] == -1, "wrong ovls[0] %04x\n", ilh->ovls[0]); - ok(ilh->ovls[1] == -1, "wrong ovls[1] %04x\n", ilh->ovls[1]); - ok(ilh->ovls[2] == -1, "wrong ovls[2] %04x\n", ilh->ovls[2]); - ok(ilh->ovls[3] == -1, "wrong ovls[3] %04x\n", ilh->ovls[3]); -} - -static HBITMAP create_bitmap(INT cx, INT cy, COLORREF color, const char *comment) -{ - HDC hdc; - char bmibuf[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)]; - BITMAPINFO *bmi = (BITMAPINFO *)bmibuf; - HBITMAP hbmp, hbmp_old; - HBRUSH hbrush; - RECT rc = { 0, 0, cx, cy }; - - hdc = CreateCompatibleDC(0); - - memset(bmi, 0, sizeof(*bmi)); - bmi->bmiHeader.biSize = sizeof(bmi->bmiHeader); - bmi->bmiHeader.biHeight = cx; - bmi->bmiHeader.biWidth = cy; - bmi->bmiHeader.biBitCount = 24; - bmi->bmiHeader.biPlanes = 1; - bmi->bmiHeader.biCompression = BI_RGB; - hbmp = CreateDIBSection(hdc, bmi, DIB_RGB_COLORS, NULL, NULL, 0); - - hbmp_old = SelectObject(hdc, hbmp); - - hbrush = CreateSolidBrush(color); - FillRect(hdc, &rc, hbrush); - DeleteObject(hbrush); - - DrawText(hdc, comment, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE); - - SelectObject(hdc, hbmp_old); - DeleteDC(hdc); - - return hbmp; -} - -static void image_list_init(HIMAGELIST himl) -{ - HBITMAP hbm; - char comment[16]; - INT n = 1; - -#define add_bitmap(grey) \ - sprintf(comment, "%d", n++); \ - hbm = create_bitmap(BMP_CX, BMP_CX, RGB((grey),(grey),(grey)), comment); \ - ImageList_Add(himl, hbm, NULL); - - add_bitmap(255); add_bitmap(170); add_bitmap(85); add_bitmap(0); - add_bitmap(0); add_bitmap(85); add_bitmap(170); add_bitmap(255); - add_bitmap(255); add_bitmap(170); add_bitmap(85); add_bitmap(0); - add_bitmap(0); add_bitmap(85); add_bitmap(170); add_bitmap(255); - add_bitmap(255); add_bitmap(170); add_bitmap(85); add_bitmap(0); - add_bitmap(0); add_bitmap(85); add_bitmap(170); add_bitmap(255); -#undef add_bitmap -} - -#define iml_clear_stream_data() \ - HeapFree(GetProcessHeap(), 0, Test_Stream.iml_data); \ - Test_Stream.iml_data = NULL; \ - Test_Stream.iml_data_size = 0; - -static void check_iml_data(HIMAGELIST himl, INT cx, INT cy, INT cur, INT max, - INT width, INT height, INT bpp, const char *comment) -{ - INT ret, cxx, cyy; - - ret = ImageList_GetImageCount(himl); - ok(ret == cur, "expected cur %d got %d\n", cur, ret); - - ret = ImageList_GetIconSize(himl, &cxx, &cyy); - ok(ret, "ImageList_GetIconSize failed\n"); - ok(cxx == cx, "wrong cx %d (expected %d)\n", cxx, cx); - ok(cyy == cy, "wrong cy %d (expected %d)\n", cyy, cy); - - iml_clear_stream_data(); - ret = ImageList_Write(himl, &Test_Stream.is); - ok(ret, "ImageList_Write failed\n"); - - ok(Test_Stream.iml_data != 0, "ImageList_Write didn't write any data\n"); - ok(Test_Stream.iml_data_size > sizeof(ILHEAD), "ImageList_Write wrote not enough data\n"); - - check_ilhead_data(Test_Stream.iml_data, cx, cy, cur, max); - check_bitmap_data(Test_Stream.iml_data + sizeof(ILHEAD), - Test_Stream.iml_data_size - sizeof(ILHEAD), - width, height, bpp, comment); -} - -static void test_imagelist_storage(void) -{ - HIMAGELIST himl; - BOOL ret; - - himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 1, 1); - ok(himl != 0, "ImageList_Create failed\n"); - - check_iml_data(himl, BMP_CX, BMP_CX, 0, 2, BMP_CX * 4, BMP_CX * 1, 24, "empty"); - - image_list_init(himl); - check_iml_data(himl, BMP_CX, BMP_CX, 24, 27, BMP_CX * 4, BMP_CX * 7, 24, "orig"); - - ret = ImageList_Remove(himl, 4); - ok(ret, "ImageList_Remove failed\n"); - check_iml_data(himl, BMP_CX, BMP_CX, 23, 27, BMP_CX * 4, BMP_CX * 7, 24, "1"); - - ret = ImageList_Remove(himl, 5); - ok(ret, "ImageList_Remove failed\n"); - check_iml_data(himl, BMP_CX, BMP_CX, 22, 27, BMP_CX * 4, BMP_CX * 7, 24, "2"); - - ret = ImageList_Remove(himl, 6); - ok(ret, "ImageList_Remove failed\n"); - check_iml_data(himl, BMP_CX, BMP_CX, 21, 27, BMP_CX * 4, BMP_CX * 7, 24, "3"); - - ret = ImageList_Remove(himl, 7); - ok(ret, "ImageList_Remove failed\n"); - check_iml_data(himl, BMP_CX, BMP_CX, 20, 27, BMP_CX * 4, BMP_CX * 7, 24, "4"); - - ret = ImageList_Remove(himl, -2); - ok(!ret, "ImageList_Remove(-2) should fail\n"); - check_iml_data(himl, BMP_CX, BMP_CX, 20, 27, BMP_CX * 4, BMP_CX * 7, 24, "5"); - - ret = ImageList_Remove(himl, 20); - ok(!ret, "ImageList_Remove(20) should fail\n"); - check_iml_data(himl, BMP_CX, BMP_CX, 20, 27, BMP_CX * 4, BMP_CX * 7, 24, "6"); - - ret = ImageList_Remove(himl, -1); - ok(ret, "ImageList_Remove(-1) failed\n"); - check_iml_data(himl, BMP_CX, BMP_CX, 0, 4, BMP_CX * 4, BMP_CX * 1, 24, "7"); - - ret = ImageList_Destroy(himl); - ok(ret, "ImageList_Destroy failed\n"); - - iml_clear_stream_data(); -} - -START_TEST(imagelist) -{ - HMODULE hComCtl32 = GetModuleHandle("comctl32.dll"); - pImageList_DrawIndirect = (void*)GetProcAddress(hComCtl32, "ImageList_DrawIndirect"); - pImageList_SetImageCount = (void*)GetProcAddress(hComCtl32, "ImageList_SetImageCount"); - - desktopDC=GetDC(NULL); - hinst = GetModuleHandleA(NULL); - - InitCommonControls(); - - testHotspot(); - DoTest1(); - DoTest2(); - DoTest3(); - testMerge(); - test_imagelist_storage(); -} diff --git a/rostests/winetests/comctl32/listview.c b/rostests/winetests/comctl32/listview.c deleted file mode 100644 index 23b5f90e9b8..00000000000 --- a/rostests/winetests/comctl32/listview.c +++ /dev/null @@ -1,1247 +0,0 @@ -/* - * ListView tests - * - * Copyright 2006 Mike McCormack for CodeWeavers - * Copyright 2007 George Gov - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" -#include "msg.h" - -#define PARENT_SEQ_INDEX 0 -#define LISTVIEW_SEQ_INDEX 1 -#define NUM_MSG_SEQUENCES 2 - -#define LISTVIEW_ID 0 -#define HEADER_ID 1 - -#define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got) -#define expect2(expected1, expected2, got1, got2) ok(expected1 == got1 && expected2 == got2, \ - "expected (%d,%d), got (%d,%d)\n", expected1, expected2, got1, got2) - -HWND hwndparent; - -static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; - -static const struct message create_parent_wnd_seq[] = { - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|defwinproc|optional }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent, /*|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE*/ }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { WM_SIZE, sent }, - { WM_MOVE, sent }, - { 0 } -}; - -static const struct message redraw_listview_seq[] = { - { WM_PAINT, sent|id, 0, 0, LISTVIEW_ID }, - { WM_PAINT, sent|id, 0, 0, HEADER_ID }, - { WM_NCPAINT, sent|id|defwinproc, 0, 0, HEADER_ID }, - { WM_ERASEBKGND, sent|id|defwinproc, 0, 0, HEADER_ID }, - { WM_NOTIFY, sent|id|defwinproc, 0, 0, LISTVIEW_ID }, - { WM_NCPAINT, sent|id|defwinproc, 0, 0, LISTVIEW_ID }, - { WM_ERASEBKGND, sent|id|defwinproc, 0, 0, LISTVIEW_ID }, - { 0 } -}; - -static const struct message listview_icon_spacing_seq[] = { - { LVM_SETICONSPACING, sent|lparam, 0, (LPARAM) MAKELONG(20, 30) }, - { LVM_SETICONSPACING, sent|lparam, 0, (LPARAM) MAKELONG(25, 35) }, - { LVM_SETICONSPACING, sent|lparam, 0, (LPARAM) MAKELONG(-1, -1) }, - { 0 } -}; - -static const struct message listview_color_seq[] = { - { LVM_SETBKCOLOR, sent|lparam, 0, RGB(0,0,0) }, - { LVM_GETBKCOLOR, sent }, - { LVM_SETTEXTCOLOR, sent|lparam, 0, RGB(0,0,0) }, - { LVM_GETTEXTCOLOR, sent }, - { LVM_SETTEXTBKCOLOR, sent|lparam, 0, RGB(0,0,0) }, - { LVM_GETTEXTBKCOLOR, sent }, - - { LVM_SETBKCOLOR, sent|lparam, 0, RGB(100,50,200) }, - { LVM_GETBKCOLOR, sent }, - { LVM_SETTEXTCOLOR, sent|lparam, 0, RGB(100,50,200) }, - { LVM_GETTEXTCOLOR, sent }, - { LVM_SETTEXTBKCOLOR, sent|lparam, 0, RGB(100,50,200) }, - { LVM_GETTEXTBKCOLOR, sent }, - - { LVM_SETBKCOLOR, sent|lparam, 0, CLR_NONE }, - { LVM_GETBKCOLOR, sent }, - { LVM_SETTEXTCOLOR, sent|lparam, 0, CLR_NONE }, - { LVM_GETTEXTCOLOR, sent }, - { LVM_SETTEXTBKCOLOR, sent|lparam, 0, CLR_NONE }, - { LVM_GETTEXTBKCOLOR, sent }, - - { LVM_SETBKCOLOR, sent|lparam, 0, RGB(255,255,255) }, - { LVM_GETBKCOLOR, sent }, - { LVM_SETTEXTCOLOR, sent|lparam, 0, RGB(255,255,255) }, - { LVM_GETTEXTCOLOR, sent }, - { LVM_SETTEXTBKCOLOR, sent|lparam, 0, RGB(255,255,255) }, - { LVM_GETTEXTBKCOLOR, sent }, - { 0 } -}; - -static const struct message listview_item_count_seq[] = { - { LVM_GETITEMCOUNT, sent }, - { LVM_INSERTITEM, sent }, - { LVM_INSERTITEM, sent }, - { LVM_INSERTITEM, sent }, - { LVM_GETITEMCOUNT, sent }, - { LVM_DELETEITEM, sent|wparam, 2 }, - { LVM_GETITEMCOUNT, sent }, - { LVM_DELETEALLITEMS, sent }, - { LVM_GETITEMCOUNT, sent }, - { LVM_INSERTITEM, sent }, - { LVM_INSERTITEM, sent }, - { LVM_GETITEMCOUNT, sent }, - { LVM_INSERTITEM, sent }, - { LVM_GETITEMCOUNT, sent }, - { 0 } -}; - -static const struct message listview_itempos_seq[] = { - { LVM_INSERTITEM, sent }, - { LVM_INSERTITEM, sent }, - { LVM_INSERTITEM, sent }, - { LVM_SETITEMPOSITION, sent|wparam|lparam, 1, MAKELPARAM(10,5) }, - { LVM_GETITEMPOSITION, sent|wparam, 1 }, - { LVM_SETITEMPOSITION, sent|wparam|lparam, 2, MAKELPARAM(0,0) }, - { LVM_GETITEMPOSITION, sent|wparam, 2 }, - { LVM_SETITEMPOSITION, sent|wparam|lparam, 0, MAKELPARAM(20,20) }, - { LVM_GETITEMPOSITION, sent|wparam, 0 }, - { 0 } -}; - -struct subclass_info -{ - WNDPROC oldproc; -}; - -static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_ERASEBKGND && - message != WM_NCPAINT && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, PARENT_SEQ_INDEX, &msg); - } - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static BOOL register_parent_wnd_class(void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = parent_wnd_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(NULL); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "Listview test parent class"; - return RegisterClassA(&cls); -} - -static HWND create_parent_window(void) -{ - if (!register_parent_wnd_class()) - return NULL; - - return CreateWindowEx(0, "Listview test parent class", - "Listview test parent window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_VISIBLE, - 0, 0, 100, 100, - GetDesktopWindow(), NULL, GetModuleHandleA(NULL), NULL); -} - -static LRESULT WINAPI listview_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("listview: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - msg.id = LISTVIEW_ID; - add_message(sequences, LISTVIEW_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - return ret; -} - -static HWND create_listview_control(void) -{ - struct subclass_info *info; - HWND hwnd; - RECT rect; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - GetClientRect(hwndparent, &rect); - hwnd = CreateWindowExA(0, WC_LISTVIEW, "foo", - WS_CHILD | WS_BORDER | WS_VISIBLE | LVS_REPORT, - 0, 0, rect.right, rect.bottom, - hwndparent, NULL, GetModuleHandleA(NULL), NULL); - ok(hwnd != NULL, "gle=%d\n", GetLastError()); - - if (!hwnd) - { - HeapFree(GetProcessHeap(), 0, info); - return NULL; - } - - info->oldproc = (WNDPROC)SetWindowLongPtrA(hwnd, GWLP_WNDPROC, - (LONG_PTR)listview_subclass_proc); - SetWindowLongPtrA(hwnd, GWLP_USERDATA, (LONG_PTR)info); - - return hwnd; -} - -static HWND create_custom_listview_control(DWORD style) -{ - struct subclass_info *info; - HWND hwnd; - RECT rect; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - GetClientRect(hwndparent, &rect); - hwnd = CreateWindowExA(0, WC_LISTVIEW, "foo", - WS_CHILD | WS_BORDER | WS_VISIBLE | style, - 0, 0, rect.right, rect.bottom, - hwndparent, NULL, GetModuleHandleA(NULL), NULL); - ok(hwnd != NULL, "gle=%d\n", GetLastError()); - - if (!hwnd) - { - HeapFree(GetProcessHeap(), 0, info); - return NULL; - } - - info->oldproc = (WNDPROC)SetWindowLongPtrA(hwnd, GWLP_WNDPROC, - (LONG_PTR)listview_subclass_proc); - SetWindowLongPtrA(hwnd, GWLP_USERDATA, (LONG_PTR)info); - - return hwnd; -} - -static LRESULT WINAPI header_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("header: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - msg.id = HEADER_ID; - add_message(sequences, LISTVIEW_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - return ret; -} - -static HWND subclass_header(HWND hwndListview) -{ - struct subclass_info *info; - HWND hwnd; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - hwnd = ListView_GetHeader(hwndListview); - info->oldproc = (WNDPROC)SetWindowLongPtrA(hwnd, GWLP_WNDPROC, - (LONG_PTR)header_subclass_proc); - SetWindowLongPtrA(hwnd, GWLP_USERDATA, (LONG_PTR)info); - - return hwnd; -} - -static void test_images(void) -{ - HWND hwnd; - DWORD r; - LVITEM item; - HIMAGELIST himl; - HBITMAP hbmp; - RECT r1, r2; - static CHAR hello[] = "hello"; - - himl = ImageList_Create(40, 40, 0, 4, 4); - ok(himl != NULL, "failed to create imagelist\n"); - - hbmp = CreateBitmap(40, 40, 1, 1, NULL); - ok(hbmp != NULL, "failed to create bitmap\n"); - - r = ImageList_Add(himl, hbmp, 0); - ok(r == 0, "should be zero\n"); - - hwnd = CreateWindowEx(0, "SysListView32", "foo", LVS_OWNERDRAWFIXED, - 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); - ok(hwnd != NULL, "failed to create listview window\n"); - - r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, 0x940); - ok(r == 0, "should return zero\n"); - - r = SendMessage(hwnd, LVM_SETIMAGELIST, 0, (LPARAM)himl); - ok(r == 0, "should return zero\n"); - - r = SendMessage(hwnd, LVM_SETICONSPACING, 0, MAKELONG(100,50)); - /* returns dimensions */ - - r = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); - ok(r == 0, "should be zero items\n"); - - item.mask = LVIF_IMAGE | LVIF_TEXT; - item.iItem = 0; - item.iSubItem = 1; - item.iImage = 0; - item.pszText = 0; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item); - ok(r == -1, "should fail\n"); - - item.iSubItem = 0; - item.pszText = hello; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item); - ok(r == 0, "should not fail\n"); - - memset(&r1, 0, sizeof r1); - r1.left = LVIR_ICON; - r = SendMessage(hwnd, LVM_GETITEMRECT, 0, (LPARAM) &r1); - - r = SendMessage(hwnd, LVM_DELETEALLITEMS, 0, 0); - ok(r == TRUE, "should not fail\n"); - - item.iSubItem = 0; - item.pszText = hello; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item); - ok(r == 0, "should not fail\n"); - - memset(&r2, 0, sizeof r2); - r2.left = LVIR_ICON; - r = SendMessage(hwnd, LVM_GETITEMRECT, 0, (LPARAM) &r2); - - ok(!memcmp(&r1, &r2, sizeof r1), "rectangle should be the same\n"); - - DestroyWindow(hwnd); -} - -static void test_checkboxes(void) -{ - HWND hwnd; - LVITEMA item; - DWORD r; - static CHAR text[] = "Text", - text2[] = "Text2", - text3[] = "Text3"; - - hwnd = CreateWindowEx(0, "SysListView32", "foo", LVS_REPORT, - 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); - ok(hwnd != NULL, "failed to create listview window\n"); - - /* first without LVS_EX_CHECKBOXES set and an item and check that state is preserved */ - item.mask = LVIF_TEXT | LVIF_STATE; - item.stateMask = 0xffff; - item.state = 0xfccc; - item.iItem = 0; - item.iSubItem = 0; - item.pszText = text; - r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); - ok(r == 0, "ret %d\n", r); - - item.iItem = 0; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0xfccc, "state %x\n", item.state); - - /* Don't set LVIF_STATE */ - item.mask = LVIF_TEXT; - item.stateMask = 0xffff; - item.state = 0xfccc; - item.iItem = 1; - item.iSubItem = 0; - item.pszText = text; - r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); - ok(r == 1, "ret %d\n", r); - - item.iItem = 1; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0, "state %x\n", item.state); - - r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES); - ok(r == 0, "should return zero\n"); - - /* Having turned on checkboxes, check that all existing items are set to 0x1000 (unchecked) */ - item.iItem = 0; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x1ccc, "state %x\n", item.state); - - /* Now add an item without specifying a state and check that its state goes to 0x1000 */ - item.iItem = 2; - item.mask = LVIF_TEXT; - item.state = 0; - item.pszText = text2; - r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); - ok(r == 2, "ret %d\n", r); - - item.iItem = 2; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x1000, "state %x\n", item.state); - - /* Add a further item this time specifying a state and still its state goes to 0x1000 */ - item.iItem = 3; - item.mask = LVIF_TEXT | LVIF_STATE; - item.stateMask = 0xffff; - item.state = 0x2aaa; - item.pszText = text3; - r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); - ok(r == 3, "ret %d\n", r); - - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x1aaa, "state %x\n", item.state); - - /* Set an item's state to checked */ - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xf000; - item.state = 0x2000; - r = SendMessage(hwnd, LVM_SETITEMA, 0, (LPARAM) &item); - - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x2aaa, "state %x\n", item.state); - - /* Check that only the bits we asked for are returned, - * and that all the others are set to zero - */ - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xf000; - item.state = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x2000, "state %x\n", item.state); - - /* Set the style again and check that doesn't change an item's state */ - r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES); - ok(r == LVS_EX_CHECKBOXES, "ret %x\n", r); - - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x2aaa, "state %x\n", item.state); - - /* Unsetting the checkbox extended style doesn't change an item's state */ - r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, 0); - ok(r == LVS_EX_CHECKBOXES, "ret %x\n", r); - - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x2aaa, "state %x\n", item.state); - - /* Now setting the style again will change an item's state */ - r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES); - ok(r == 0, "ret %x\n", r); - - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x1aaa, "state %x\n", item.state); - - /* Toggle checkbox tests (bug 9934) */ - memset (&item, 0xcc, sizeof(item)); - item.mask = LVIF_STATE; - item.iItem = 3; - item.iSubItem = 0; - item.state = LVIS_FOCUSED; - item.stateMask = LVIS_FOCUSED; - r = SendMessage(hwnd, LVM_SETITEM, 0, (LPARAM) &item); - expect(1, r); - - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x1aab, "state %x\n", item.state); - - r = SendMessage(hwnd, WM_KEYDOWN, VK_SPACE, 0); - expect(0, r); - r = SendMessage(hwnd, WM_KEYUP, VK_SPACE, 0); - expect(0, r); - - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x2aab, "state %x\n", item.state); - - r = SendMessage(hwnd, WM_KEYDOWN, VK_SPACE, 0); - expect(0, r); - r = SendMessage(hwnd, WM_KEYUP, VK_SPACE, 0); - expect(0, r); - - item.iItem = 3; - item.mask = LVIF_STATE; - item.stateMask = 0xffff; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(item.state == 0x1aab, "state %x\n", item.state); - - DestroyWindow(hwnd); -} - -static void insert_column(HWND hwnd, int idx) -{ - LVCOLUMN column; - DWORD rc; - - memset(&column, 0xcc, sizeof(column)); - column.mask = LVCF_SUBITEM; - column.iSubItem = idx; - - rc = ListView_InsertColumn(hwnd, idx, &column); - expect(idx, rc); -} - -static void insert_item(HWND hwnd, int idx) -{ - static CHAR text[] = "foo"; - - LVITEMA item; - DWORD rc; - - memset(&item, 0xcc, sizeof (item)); - item.mask = LVIF_TEXT; - item.iItem = idx; - item.iSubItem = 0; - item.pszText = text; - - rc = ListView_InsertItem(hwnd, &item); - expect(idx, rc); -} - -static void test_items(void) -{ - const LPARAM lparamTest = 0x42; - HWND hwnd; - LVITEMA item; - DWORD r; - static CHAR text[] = "Text"; - - hwnd = CreateWindowEx(0, "SysListView32", "foo", LVS_REPORT, - 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); - ok(hwnd != NULL, "failed to create listview window\n"); - - /* - * Test setting/getting item params - */ - - /* Set up two columns */ - insert_column(hwnd, 0); - insert_column(hwnd, 1); - - /* Insert an item with just a param */ - memset (&item, 0xcc, sizeof (item)); - item.mask = LVIF_PARAM; - item.iItem = 0; - item.iSubItem = 0; - item.lParam = lparamTest; - r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); - ok(r == 0, "ret %d\n", r); - - /* Test getting of the param */ - memset (&item, 0xcc, sizeof (item)); - item.mask = LVIF_PARAM; - item.iItem = 0; - item.iSubItem = 0; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(r != 0, "ret %d\n", r); - ok(item.lParam == lparamTest, "got lParam %lx, expected %lx\n", item.lParam, lparamTest); - - /* Set up a subitem */ - memset (&item, 0xcc, sizeof (item)); - item.mask = LVIF_TEXT; - item.iItem = 0; - item.iSubItem = 1; - item.pszText = text; - r = SendMessage(hwnd, LVM_SETITEMA, 0, (LPARAM) &item); - ok(r != 0, "ret %d\n", r); - - /* Query param from subitem: returns main item param */ - memset (&item, 0xcc, sizeof (item)); - item.mask = LVIF_PARAM; - item.iItem = 0; - item.iSubItem = 1; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(r != 0, "ret %d\n", r); - ok(item.lParam == lparamTest, "got lParam %lx, expected %lx\n", item.lParam, lparamTest); - - /* Set up param on first subitem: no effect */ - memset (&item, 0xcc, sizeof (item)); - item.mask = LVIF_PARAM; - item.iItem = 0; - item.iSubItem = 1; - item.lParam = lparamTest+1; - r = SendMessage(hwnd, LVM_SETITEMA, 0, (LPARAM) &item); - ok(r == 0, "ret %d\n", r); - - /* Query param from subitem again: should still return main item param */ - memset (&item, 0xcc, sizeof (item)); - item.mask = LVIF_PARAM; - item.iItem = 0; - item.iSubItem = 1; - r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - ok(r != 0, "ret %d\n", r); - ok(item.lParam == lparamTest, "got lParam %lx, expected %lx\n", item.lParam, lparamTest); - - /**** Some tests of state highlighting ****/ - memset (&item, 0xcc, sizeof (item)); - item.mask = LVIF_STATE; - item.iItem = 0; - item.iSubItem = 0; - item.state = LVIS_SELECTED; - item.stateMask = LVIS_SELECTED | LVIS_DROPHILITED; - r = SendMessage(hwnd, LVM_SETITEM, 0, (LPARAM) &item); - ok(r != 0, "ret %d\n", r); - item.iSubItem = 1; - item.state = LVIS_DROPHILITED; - r = SendMessage(hwnd, LVM_SETITEM, 0, (LPARAM) &item); - ok(r != 0, "ret %d\n", r); - - memset (&item, 0xcc, sizeof (item)); - item.mask = LVIF_STATE; - item.iItem = 0; - item.iSubItem = 0; - item.stateMask = -1; - r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item); - ok(r != 0, "ret %d\n", r); - ok(item.state == LVIS_SELECTED, "got state %x, expected %x\n", item.state, LVIS_SELECTED); - item.iSubItem = 1; - r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item); - ok(r != 0, "ret %d\n", r); - todo_wine ok(item.state == LVIS_DROPHILITED, "got state %x, expected %x\n", item.state, LVIS_DROPHILITED); - - DestroyWindow(hwnd); -} - -static void test_columns(void) -{ - HWND hwnd; - LVCOLUMN column; - DWORD rc; - - hwnd = CreateWindowEx(0, "SysListView32", "foo", LVS_REPORT, - 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); - ok(hwnd != NULL, "failed to create listview window\n"); - - /* Add a column with no mask */ - memset(&column, 0xcc, sizeof(column)); - column.mask = 0; - rc = ListView_InsertColumn(hwnd, 0, &column); - ok(rc==0, "Inserting column with no mask failed with %d\n", rc); - - /* Check its width */ - rc = ListView_GetColumnWidth(hwnd, 0); - ok(rc==10, "Inserting column with no mask failed to set width to 10 with %d\n", rc); - - DestroyWindow(hwnd); -} -/* test setting imagelist between WM_NCCREATE and WM_CREATE */ -static WNDPROC listviewWndProc; -static HIMAGELIST test_create_imagelist; - -static LRESULT CALLBACK create_test_wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - if (uMsg == WM_CREATE) - { - LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam; - lpcs->style |= LVS_REPORT; - SendMessage(hwnd, LVM_SETIMAGELIST, 0, (LPARAM)test_create_imagelist); - } - return CallWindowProc(listviewWndProc, hwnd, uMsg, wParam, lParam); -} - -static void test_create(void) -{ - HWND hList; - HWND hHeader; - WNDCLASSEX cls; - cls.cbSize = sizeof(WNDCLASSEX); - ok(GetClassInfoEx(GetModuleHandle(NULL), "SysListView32", &cls), "GetClassInfoEx failed\n"); - listviewWndProc = cls.lpfnWndProc; - cls.lpfnWndProc = create_test_wndproc; - cls.lpszClassName = "MyListView32"; - ok(RegisterClassEx(&cls), "RegisterClassEx failed\n"); - - test_create_imagelist = ImageList_Create(16, 16, 0, 5, 10); - hList = CreateWindow("MyListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandle(NULL), 0); - ok((HIMAGELIST)SendMessage(hList, LVM_GETIMAGELIST, 0, 0) == test_create_imagelist, "Image list not obtained\n"); - hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader) && IsWindowVisible(hHeader), "Listview not in report mode\n"); - DestroyWindow(hList); -} - -static void test_redraw(void) -{ - HWND hwnd, hwndheader; - - hwnd = create_listview_control(); - hwndheader = subclass_header(hwnd); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - trace("invalidate & update\n"); - InvalidateRect(hwnd, NULL, TRUE); - UpdateWindow(hwnd); - ok_sequence(sequences, LISTVIEW_SEQ_INDEX, redraw_listview_seq, "redraw listview", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - DestroyWindow(hwnd); -} - -static LRESULT WINAPI cd_wndproc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) -{ - COLORREF clr, c0ffee = RGB(0xc0, 0xff, 0xee); - - if(msg == WM_NOTIFY) { - NMHDR *nmhdr = (PVOID)lp; - if(nmhdr->code == NM_CUSTOMDRAW) { - NMLVCUSTOMDRAW *nmlvcd = (PVOID)nmhdr; - trace("NMCUSTOMDRAW (0x%.8x)\n", nmlvcd->nmcd.dwDrawStage); - switch(nmlvcd->nmcd.dwDrawStage) { - case CDDS_PREPAINT: - SetBkColor(nmlvcd->nmcd.hdc, c0ffee); - return CDRF_NOTIFYITEMDRAW; - case CDDS_ITEMPREPAINT: - nmlvcd->clrTextBk = CLR_DEFAULT; - return CDRF_NOTIFYSUBITEMDRAW; - case CDDS_ITEMPREPAINT | CDDS_SUBITEM: - clr = GetBkColor(nmlvcd->nmcd.hdc); - todo_wine ok(clr == c0ffee, "clr=%.8x\n", clr); - return CDRF_NOTIFYPOSTPAINT; - case CDDS_ITEMPOSTPAINT | CDDS_SUBITEM: - clr = GetBkColor(nmlvcd->nmcd.hdc); - todo_wine ok(clr == c0ffee, "clr=%.8x\n", clr); - return CDRF_DODEFAULT; - } - return CDRF_DODEFAULT; - } - } - - return DefWindowProcA(hwnd, msg, wp, lp); -} - -static void test_customdraw(void) -{ - HWND hwnd; - WNDPROC oldwndproc; - - hwnd = create_listview_control(); - - insert_column(hwnd, 0); - insert_column(hwnd, 1); - insert_item(hwnd, 0); - - oldwndproc = (WNDPROC)SetWindowLongPtr(hwndparent, GWLP_WNDPROC, - (LONG_PTR)cd_wndproc); - - InvalidateRect(hwnd, NULL, TRUE); - UpdateWindow(hwnd); - - SetWindowLongPtr(hwndparent, GWLP_WNDPROC, (LONG_PTR)oldwndproc); - - DestroyWindow(hwnd); -} - -static void test_icon_spacing(void) -{ - /* LVM_SETICONSPACING */ - /* note: LVM_SETICONSPACING returns the previous icon spacing if successful */ - - HWND hwnd; - WORD w, h; - DWORD r; - - hwnd = create_custom_listview_control(LVS_ICON); - ok(hwnd != NULL, "failed to create a listview window\n"); - - r = SendMessage(hwnd, WM_NOTIFYFORMAT, (WPARAM)hwndparent, (LPARAM)NF_REQUERY); - expect(NFR_ANSI, r); - - r = SendMessage(hwnd, LVM_SETICONSPACING, 0, (LPARAM) MAKELONG(-1, -1)); - w = LOWORD(r); - h = LOWORD(r); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - trace("test icon spacing\n"); - - r = SendMessage(hwnd, LVM_SETICONSPACING, 0, (LPARAM) MAKELONG(20, 30)); - expect(MAKELONG(w,h), r); - - r = SendMessage(hwnd, LVM_SETICONSPACING, 0, (LPARAM) MAKELONG(25, 35)); - expect(MAKELONG(20,30), r); - - r = SendMessage(hwnd, LVM_SETICONSPACING, 0, (LPARAM) MAKELONG(-1,-1)); - expect(MAKELONG(25,35), r); - - ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_icon_spacing_seq, "test icon spacing seq", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); -} - -static void test_color(void) -{ - /* SETBKCOLOR/GETBKCOLOR, SETTEXTCOLOR/GETTEXTCOLOR, SETTEXTBKCOLOR/GETTEXTBKCOLOR */ - - HWND hwnd; - DWORD r; - int i; - - COLORREF color; - COLORREF colors[4] = {RGB(0,0,0), RGB(100,50,200), CLR_NONE, RGB(255,255,255)}; - - hwnd = create_listview_control(); - ok(hwnd != NULL, "failed to create a listview window\n"); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - trace("test color seq\n"); - for (i = 0; i < 4; i++) - { - color = colors[i]; - - r = SendMessage(hwnd, LVM_SETBKCOLOR, 0, color); - expect(TRUE, r); - r = SendMessage(hwnd, LVM_GETBKCOLOR, 0, color); - expect(color, r); - - r = SendMessage(hwnd, LVM_SETTEXTCOLOR, 0, color); - expect (TRUE, r); - r = SendMessage(hwnd, LVM_GETTEXTCOLOR, 0, color); - expect(color, r); - - r = SendMessage(hwnd, LVM_SETTEXTBKCOLOR, 0, color); - expect(TRUE, r); - r = SendMessage(hwnd, LVM_GETTEXTBKCOLOR, 0, color); - expect(color, r); - } - - ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_color_seq, "test color seq", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); -} - -static void test_item_count(void) -{ - /* LVM_INSERTITEM, LVM_DELETEITEM, LVM_DELETEALLITEMS, LVM_GETITEMCOUNT */ - - HWND hwnd; - DWORD r; - - LVITEM item0; - LVITEM item1; - LVITEM item2; - static CHAR item0text[] = "item0"; - static CHAR item1text[] = "item1"; - static CHAR item2text[] = "item2"; - - hwnd = create_listview_control(); - ok(hwnd != NULL, "failed to create a listview window\n"); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - trace("test item count\n"); - - r = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); - expect(0, r); - - /* [item0] */ - item0.mask = LVIF_TEXT; - item0.iItem = 0; - item0.iSubItem = 0; - item0.pszText = item0text; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item0); - expect(0, r); - - /* [item0, item1] */ - item1.mask = LVIF_TEXT; - item1.iItem = 1; - item1.iSubItem = 0; - item1.pszText = item1text; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item1); - expect(1, r); - - /* [item0, item1, item2] */ - item2.mask = LVIF_TEXT; - item2.iItem = 2; - item2.iSubItem = 0; - item2.pszText = item2text; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item2); - expect(2, r); - - r = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); - expect(3, r); - - /* [item0, item1] */ - r = SendMessage(hwnd, LVM_DELETEITEM, (WPARAM) 2, 0); - expect(TRUE, r); - - r = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); - expect(2, r); - - /* [] */ - r = SendMessage(hwnd, LVM_DELETEALLITEMS, 0, 0); - expect(TRUE, r); - - r = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); - expect(0, r); - - /* [item0] */ - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item1); - expect(0, r); - - /* [item0, item1] */ - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item1); - expect(1, r); - - r = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); - expect(2, r); - - /* [item0, item1, item2] */ - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item2); - expect(2, r); - - r = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); - expect(3, r); - - ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_item_count_seq, "test item count seq", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); -} - -static void test_item_position(void) -{ - /* LVM_SETITEMPOSITION/LVM_GETITEMPOSITION */ - - HWND hwnd; - DWORD r; - POINT position; - - LVITEM item0; - LVITEM item1; - LVITEM item2; - static CHAR item0text[] = "item0"; - static CHAR item1text[] = "item1"; - static CHAR item2text[] = "item2"; - - hwnd = create_custom_listview_control(LVS_ICON); - ok(hwnd != NULL, "failed to create a listview window\n"); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - trace("test item position\n"); - - /* [item0] */ - item0.mask = LVIF_TEXT; - item0.iItem = 0; - item0.iSubItem = 0; - item0.pszText = item0text; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item0); - expect(0, r); - - /* [item0, item1] */ - item1.mask = LVIF_TEXT; - item1.iItem = 1; - item1.iSubItem = 0; - item1.pszText = item1text; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item1); - expect(1, r); - - /* [item0, item1, item2] */ - item2.mask = LVIF_TEXT; - item2.iItem = 2; - item2.iSubItem = 0; - item2.pszText = item2text; - r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item2); - expect(2, r); - - r = SendMessage(hwnd, LVM_SETITEMPOSITION, 1, MAKELPARAM(10,5)); - expect(TRUE, r); - r = SendMessage(hwnd, LVM_GETITEMPOSITION, 1, (LPARAM) &position); - expect(TRUE, r); - expect2(10, 5, position.x, position.y); - - r = SendMessage(hwnd, LVM_SETITEMPOSITION, 2, MAKELPARAM(0,0)); - expect(TRUE, r); - r = SendMessage(hwnd, LVM_GETITEMPOSITION, 2, (LPARAM) &position); - expect(TRUE, r); - expect2(0, 0, position.x, position.y); - - r = SendMessage(hwnd, LVM_SETITEMPOSITION, 0, MAKELPARAM(20,20)); - expect(TRUE, r); - r = SendMessage(hwnd, LVM_GETITEMPOSITION, 0, (LPARAM) &position); - expect(TRUE, r); - expect2(20, 20, position.x, position.y); - - ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_itempos_seq, "test item position seq", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); -} - -static void test_getorigin(void) -{ - /* LVM_GETORIGIN */ - - HWND hwnd; - DWORD r; - POINT position; - - position.x = position.y = 0; - - hwnd = create_custom_listview_control(LVS_ICON); - ok(hwnd != NULL, "failed to create a listview window\n"); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - trace("test get origin results\n"); - r = SendMessage(hwnd, LVM_GETORIGIN, 0, (LPARAM)&position); - expect(TRUE, r); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); - - hwnd = create_custom_listview_control(LVS_SMALLICON); - ok(hwnd != NULL, "failed to create a listview window\n"); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - trace("test get origin results\n"); - r = SendMessage(hwnd, LVM_GETORIGIN, 0, (LPARAM)&position); - expect(TRUE, r); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); - - hwnd = create_custom_listview_control(LVS_LIST); - ok(hwnd != NULL, "failed to create a listview window\n"); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - trace("test get origin results\n"); - r = SendMessage(hwnd, LVM_GETORIGIN, 0, (LPARAM)&position); - expect(FALSE, r); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); - - hwnd = create_custom_listview_control(LVS_REPORT); - ok(hwnd != NULL, "failed to create a listview window\n"); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - trace("test get origin results\n"); - r = SendMessage(hwnd, LVM_GETORIGIN, 0, (LPARAM)&position); - expect(FALSE, r); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); - -} - -static void test_multiselect(void) -{ - typedef struct t_select_task - { - const char *descr; - int initPos; - int loopVK; - int count; - int result; - } select_task; - - HWND hwnd; - DWORD r; - int i,j,item_count,selected_count; - static const int items=5; - BYTE kstate[256]; - select_task task; - - static struct t_select_task task_list[] = { - { "using VK_DOWN", 0, VK_DOWN, -1, -1 }, - { "using VK_UP", -1, VK_UP, -1, -1 }, - { "using VK_END", 0, VK_END, 1, -1 }, - { "using VK_HOME", -1, VK_HOME, 1, -1 } - }; - - - hwnd = create_listview_control(); - - for (i=0;i -#include - -#include "wine/test.h" - -static PVOID (WINAPI * pAlloc)(LONG); -static PVOID (WINAPI * pReAlloc)(PVOID, LONG); -static BOOL (WINAPI * pFree)(PVOID); -static LONG (WINAPI * pGetSize)(PVOID); - -static INT (WINAPI * pStr_GetPtrA)(LPCSTR, LPSTR, INT); -static BOOL (WINAPI * pStr_SetPtrA)(LPSTR, LPCSTR); -static INT (WINAPI * pStr_GetPtrW)(LPCWSTR, LPWSTR, INT); -static BOOL (WINAPI * pStr_SetPtrW)(LPWSTR, LPCWSTR); - -static HMODULE hComctl32 = 0; - -#define COMCTL32_GET_PROC(ordinal, func) \ - p ## func = (void*)GetProcAddress(hComctl32, (LPSTR)ordinal); \ - if(!p ## func) { \ - trace("GetProcAddress(%d)(%s) failed\n", ordinal, #func); \ - FreeLibrary(hComctl32); \ - } - -static BOOL InitFunctionPtrs(void) -{ - hComctl32 = LoadLibraryA("comctl32.dll"); - - if(!hComctl32) - { - trace("Could not load comctl32.dll\n"); - return FALSE; - } - - COMCTL32_GET_PROC(71, Alloc); - COMCTL32_GET_PROC(72, ReAlloc); - COMCTL32_GET_PROC(73, Free); - COMCTL32_GET_PROC(74, GetSize); - - COMCTL32_GET_PROC(233, Str_GetPtrA) - COMCTL32_GET_PROC(234, Str_SetPtrA) - COMCTL32_GET_PROC(235, Str_GetPtrW) - COMCTL32_GET_PROC(236, Str_SetPtrW) - - return TRUE; -} - -static void test_GetPtrAW(void) -{ - if (pStr_GetPtrA) - { - static const char source[] = "Just a source string"; - static const char desttest[] = "Just a destination string"; - static char dest[MAX_PATH]; - int sourcelen; - int destsize = MAX_PATH; - int count = -1; - - sourcelen = strlen(source) + 1; - - count = pStr_GetPtrA(NULL, NULL, 0); - ok (count == 0, "Expected count to be 0, it was %d\n", count); - - if (0) - { - /* Crashes on W98, NT4, W2K, XP, W2K3 - * Our implementation also crashes and we should probably leave - * it like that. - */ - count = -1; - count = pStr_GetPtrA(NULL, NULL, destsize); - trace("count : %d\n", count); - } - - count = 0; - count = pStr_GetPtrA(source, NULL, 0); - ok (count == sourcelen || - broken(count == sourcelen - 1), /* win9x */ - "Expected count to be %d, it was %d\n", sourcelen, count); - - count = 0; - strcpy(dest, desttest); - count = pStr_GetPtrA(source, dest, 0); - ok (count == sourcelen || - broken(count == 0), /* win9x */ - "Expected count to be %d, it was %d\n", sourcelen, count); - ok (!lstrcmp(dest, desttest), "Expected destination to not have changed\n"); - - count = 0; - count = pStr_GetPtrA(source, NULL, destsize); - ok (count == sourcelen || - broken(count == sourcelen - 1), /* win9x */ - "Expected count to be %d, it was %d\n", sourcelen, count); - - count = 0; - count = pStr_GetPtrA(source, dest, destsize); - ok (count == sourcelen || - broken(count == sourcelen - 1), /* win9x */ - "Expected count to be %d, it was %d\n", sourcelen, count); - ok (!lstrcmp(source, dest), "Expected source and destination to be the same\n"); - - count = -1; - strcpy(dest, desttest); - count = pStr_GetPtrA(NULL, dest, destsize); - ok (count == 0, "Expected count to be 0, it was %d\n", count); - ok (dest[0] == '\0', "Expected destination to be cut-off and 0 terminated\n"); - - count = 0; - destsize = 15; - count = pStr_GetPtrA(source, dest, destsize); - ok (count == 15 || - broken(count == 14), /* win9x */ - "Expected count to be 15, it was %d\n", count); - ok (!memcmp(source, dest, 14), "Expected first part of source and destination to be the same\n"); - ok (dest[14] == '\0', "Expected destination to be cut-off and 0 terminated\n"); - } -} - -static void test_Alloc(void) -{ - PCHAR p; - BOOL res; - DWORD size, min; - - /* allocate size 0 */ - p = pAlloc(0); - ok(p != NULL, "Expected non-NULL ptr\n"); - - /* get the minimum size */ - min = pGetSize(p); - - /* free the block */ - res = pFree(p); - ok(res == TRUE, "Expected TRUE, got %d\n", res); - - /* allocate size 1 */ - p = pAlloc(1); - ok(p != NULL, "Expected non-NULL ptr\n"); - - /* get the allocated size */ - size = pGetSize(p); - ok(size == 1 || - broken(size == min), /* win9x */ - "Expected 1, got %d\n", size); - - /* reallocate the block */ - p = pReAlloc(p, 2); - ok(p != NULL, "Expected non-NULL ptr\n"); - - /* get the new size */ - size = pGetSize(p); - ok(size == 2 || - broken(size == min), /* win9x */ - "Expected 2, got %d\n", size); - - /* free the block */ - res = pFree(p); - ok(res == TRUE, "Expected TRUE, got %d\n", res); - - /* free a NULL ptr */ - res = pFree(NULL); - ok(res == TRUE || - broken(res == FALSE), /* win9x */ - "Expected TRUE, got %d\n", res); - - /* reallocate a NULL ptr */ - p = pReAlloc(NULL, 2); - ok(p != NULL, "Expectd non-NULL ptr\n"); - - res = pFree(p); - ok(res == TRUE, "Expected TRUE, got %d\n", res); -} - -START_TEST(misc) -{ - if(!InitFunctionPtrs()) - return; - - test_GetPtrAW(); - test_Alloc(); - - FreeLibrary(hComctl32); -} diff --git a/rostests/winetests/comctl32/monthcal.c b/rostests/winetests/comctl32/monthcal.c deleted file mode 100644 index 7f3b4e53ab6..00000000000 --- a/rostests/winetests/comctl32/monthcal.c +++ /dev/null @@ -1,1171 +0,0 @@ -/* - * comctl32 month calendar unit tests - * - * Copyright (C) 2006 Vitaliy Margolen - * Copyright (C) 2007 Farshad Agah - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wingdi.h" -#include "winuser.h" - -#include "commctrl.h" - -#include "wine/test.h" -#include -#include -#include "msg.h" - -#define expect(expected, got) ok(expected == got, "Expected %d, got %d\n", expected, got); - -#define NUM_MSG_SEQUENCES 2 -#define PARENT_SEQ_INDEX 0 -#define MONTHCAL_SEQ_INDEX 1 - -struct subclass_info -{ - WNDPROC oldproc; -}; - -static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; - -static const struct message create_parent_window_seq[] = { - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|defwinproc|optional }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent, /*|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE*/ }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { WM_SIZE, sent }, - { WM_MOVE, sent }, - { 0 } -}; - -static const struct message create_monthcal_control_seq[] = { - { WM_NOTIFYFORMAT, sent|lparam, 0, NF_QUERY }, - { WM_QUERYUISTATE, sent }, - { WM_GETFONT, sent }, - { WM_PARENTNOTIFY, sent|wparam, WM_CREATE}, - { 0 } -}; - -static const struct message create_monthcal_multi_sel_style_seq[] = { - { WM_NOTIFYFORMAT, sent|lparam, 0, NF_QUERY }, - { WM_QUERYUISTATE, sent }, - { WM_GETFONT, sent }, - { 0 } -}; - -static const struct message monthcal_color_seq[] = { - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TEXT, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TEXT, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TEXT, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, 0}, - { 0 } -}; - -static const struct message monthcal_curr_date_seq[] = { - { MCM_SETCURSEL, sent|wparam, 0}, - { WM_PAINT, sent|wparam|lparam|defwinproc, 0, 0}, - { WM_ERASEBKGND, sent|lparam|defwinproc, 0}, - { MCM_SETCURSEL, sent|wparam, 0}, - { MCM_SETCURSEL, sent|wparam, 0}, - { MCM_GETCURSEL, sent|wparam, 0}, - { MCM_GETCURSEL, sent|wparam|lparam, 0, 0}, - { 0 } -}; - -static const struct message monthcal_first_day_seq[] = { - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, -5}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, -4}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, -3}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, -2}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, -1}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 1}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 2}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 3}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 4}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 5}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 6}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 7}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 8}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 9}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 10}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - - { MCM_SETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 11}, - { MCM_GETFIRSTDAYOFWEEK, sent|wparam|lparam, 0, 0}, - { 0 } -}; - -static const struct message monthcal_unicode_seq[] = { - { MCM_GETUNICODEFORMAT, sent|wparam|lparam, 0, 0}, - { MCM_SETUNICODEFORMAT, sent|wparam|lparam, 1, 0}, - { MCM_GETUNICODEFORMAT, sent|wparam|lparam, 0, 0}, - { MCM_SETUNICODEFORMAT, sent|wparam|lparam, 0, 0}, - { MCM_GETUNICODEFORMAT, sent|wparam|lparam, 0, 0}, - { MCM_SETUNICODEFORMAT, sent|wparam|lparam, 1, 0}, - { 0 } -}; - -static const struct message monthcal_hit_test_seq[] = { - { MCM_SETCURSEL, sent|wparam, 0}, - { WM_PAINT, sent|wparam|lparam|defwinproc, 0, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { MCM_HITTEST, sent|wparam, 0}, - { 0 } -}; - -static const struct message monthcal_todaylink_seq[] = { - { MCM_HITTEST, sent|wparam, 0}, - { MCM_SETTODAY, sent|wparam, 0}, - { WM_PAINT, sent|wparam|lparam|defwinproc, 0, 0}, - { MCM_GETTODAY, sent|wparam, 0}, - { WM_LBUTTONDOWN, sent|wparam|lparam, MK_LBUTTON, MAKELONG(70, 370)}, - { WM_CAPTURECHANGED, sent|wparam|lparam|defwinproc, 0, 0}, - { WM_PAINT, sent|wparam|lparam|defwinproc, 0, 0}, - { MCM_GETCURSEL, sent|wparam, 0}, - { 0 } -}; - -static const struct message monthcal_today_seq[] = { - { MCM_SETTODAY, sent|wparam, 0}, - { WM_PAINT, sent|wparam|lparam|defwinproc, 0, 0}, - { MCM_GETTODAY, sent|wparam, 0}, - { MCM_SETTODAY, sent|wparam, 0}, - { WM_PAINT, sent|wparam|lparam|defwinproc, 0, 0}, - { MCM_GETTODAY, sent|wparam, 0}, - { 0 } -}; - -static const struct message monthcal_scroll_seq[] = { - { MCM_SETMONTHDELTA, sent|wparam|lparam, 2, 0}, - { MCM_SETMONTHDELTA, sent|wparam|lparam, 3, 0}, - { MCM_GETMONTHDELTA, sent|wparam|lparam, 0, 0}, - { MCM_SETMONTHDELTA, sent|wparam|lparam, 12, 0}, - { MCM_GETMONTHDELTA, sent|wparam|lparam, 0, 0}, - { MCM_SETMONTHDELTA, sent|wparam|lparam, 15, 0}, - { MCM_GETMONTHDELTA, sent|wparam|lparam, 0, 0}, - { MCM_SETMONTHDELTA, sent|wparam|lparam, -5, 0}, - { MCM_GETMONTHDELTA, sent|wparam|lparam, 0, 0}, - { 0 } -}; - -static const struct message monthcal_monthrange_seq[] = { - { MCM_GETMONTHRANGE, sent|wparam, GMR_VISIBLE}, - { MCM_GETMONTHRANGE, sent|wparam, GMR_DAYSTATE}, - { 0 } -}; - -static const struct message monthcal_max_sel_day_seq[] = { - { MCM_SETMAXSELCOUNT, sent|wparam|lparam, 5, 0}, - { MCM_GETMAXSELCOUNT, sent|wparam|lparam, 0, 0}, - { MCM_SETMAXSELCOUNT, sent|wparam|lparam, 15, 0}, - { MCM_GETMAXSELCOUNT, sent|wparam|lparam, 0, 0}, - { MCM_SETMAXSELCOUNT, sent|wparam|lparam, -1, 0}, - { MCM_GETMAXSELCOUNT, sent|wparam|lparam, 0, 0}, - { 0 } -}; - -/* expected message sequence for parent*/ -static const struct message destroy_monthcal_parent_msgs_seq[] = { - { WM_PARENTNOTIFY, sent|wparam, WM_DESTROY}, - { 0 } -}; - -/* expected message sequence for child*/ -static const struct message destroy_monthcal_child_msgs_seq[] = { - { 0x0090, sent|optional }, /* Vista */ - { WM_SHOWWINDOW, sent|wparam|lparam, 0, 0}, - { WM_WINDOWPOSCHANGING, sent|wparam, 0}, - { WM_WINDOWPOSCHANGED, sent|wparam, 0}, - { WM_DESTROY, sent|wparam|lparam, 0, 0}, - { WM_NCDESTROY, sent|wparam|lparam, 0, 0}, - { 0 } -}; - -static const struct message destroy_monthcal_multi_sel_style_seq[] = { - { 0x0090, sent|optional }, /* Vista */ - { WM_DESTROY, sent|wparam|lparam, 0, 0}, - { WM_NCDESTROY, sent|wparam|lparam, 0, 0}, - { 0 } -}; - -/* expected message sequence for parent window*/ -static const struct message destroy_parent_seq[] = { - { 0x0090, sent|optional }, /* Vista */ - { WM_WINDOWPOSCHANGING, sent|wparam, 0}, - { WM_WINDOWPOSCHANGED, sent|wparam, 0}, - { WM_NCACTIVATE, sent|wparam|lparam, 0, 0}, - { WM_ACTIVATE, sent|wparam|lparam, 0, 0}, - { WM_ACTIVATEAPP, sent|wparam, 0}, - { WM_KILLFOCUS, sent|wparam|lparam, 0, 0}, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0}, - { WM_IME_NOTIFY, sent|wparam|lparam|defwinproc|optional, 1, 0}, - { WM_DESTROY, sent|wparam|lparam, 0, 0}, - { WM_NCDESTROY, sent|wparam|lparam, 0, 0}, - { 0 } -}; - -static void test_monthcal(void) -{ - HWND hwnd; - SYSTEMTIME st[2], st1[2]; - int res, month_range; - - hwnd = CreateWindowA(MONTHCAL_CLASSA, "MonthCal", WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, - 0, 300, 300, 0, 0, NULL, NULL); - ok(hwnd != NULL, "Failed to create MonthCal\n"); - GetSystemTime(&st[0]); - st[1] = st[0]; - - /* Invalid date/time */ - st[0].wYear = 2000; - /* Time should not matter */ - st[1].wHour = st[1].wMinute = st[1].wSecond = 70; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MAX, (LPARAM)st), "Failed to set MAX limit\n"); - ok(SendMessage(hwnd, MCM_GETRANGE, 0, (LPARAM)st1) == GDTR_MAX, "No limits should be set\n"); - ok(st1[0].wYear != 2000, "Lover limit changed\n"); - - st[1].wMonth = 0; - ok(!SendMessage(hwnd, MCM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st), "Should have failed to set limits\n"); - ok(SendMessage(hwnd, MCM_GETRANGE, 0, (LPARAM)st1) == GDTR_MAX, "No limits should be set\n"); - ok(st1[0].wYear != 2000, "Lover limit changed\n"); - ok(!SendMessage(hwnd, MCM_SETRANGE, GDTR_MAX, (LPARAM)st), "Should have failed to set MAX limit\n"); - ok(SendMessage(hwnd, MCM_GETRANGE, 0, (LPARAM)st1) == GDTR_MAX, "No limits should be set\n"); - ok(st1[0].wYear != 2000, "Lover limit changed\n"); - - GetSystemTime(&st[0]); - st[0].wDay = 20; - st[0].wMonth = 5; - st[1] = st[0]; - - month_range = SendMessage(hwnd, MCM_GETMONTHRANGE, GMR_VISIBLE, (LPARAM)st1); - st[1].wMonth--; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st), "Failed to set both min and max limits\n"); - res = SendMessage(hwnd, MCM_GETMONTHRANGE, GMR_VISIBLE, (LPARAM)st1); - ok(res == month_range, "Invalid month range (%d)\n", res); - ok(SendMessage(hwnd, MCM_GETRANGE, 0, (LPARAM)st1) == (GDTR_MIN|GDTR_MAX), "Limits should be set\n"); - - st[1].wMonth += 2; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st), "Failed to set both min and max limits\n"); - res = SendMessage(hwnd, MCM_GETMONTHRANGE, GMR_VISIBLE, (LPARAM)st1); - ok(res == month_range, "Invalid month range (%d)\n", res); - - st[1].wYear --; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st), "Failed to set both min and max limits\n"); - st[1].wYear += 1; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st), "Failed to set both min and max limits\n"); - - st[1].wMonth -= 3; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MAX, (LPARAM)st), "Failed to set max limit\n"); - ok(SendMessage(hwnd, MCM_GETRANGE, 0, (LPARAM)st1) == GDTR_MAX, "Only MAX limit should be set\n"); - st[1].wMonth += 4; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MAX, (LPARAM)st), "Failed to set max limit\n"); - st[1].wYear -= 3; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MAX, (LPARAM)st), "Failed to set max limit\n"); - st[1].wYear += 4; - ok(SendMessage(hwnd, MCM_SETRANGE, GDTR_MAX, (LPARAM)st), "Failed to set max limit\n"); - ok(SendMessage(hwnd, MCM_GETRANGE, 0, (LPARAM)st1) == GDTR_MAX, "Only MAX limit should be set\n"); - - DestroyWindow(hwnd); -} - -static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_ERASEBKGND && - message != WM_NCPAINT && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, PARENT_SEQ_INDEX, &msg); - } - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static BOOL register_parent_wnd_class(void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = parent_wnd_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(NULL); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "Month-Cal test parent class"; - return RegisterClassA(&cls); -} - -static HWND create_parent_window(void) -{ - HWND hwnd; - - InitCommonControls(); - - /* flush message sequences, so we can check the new sequence by the end of function */ - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - if (!register_parent_wnd_class()) - return NULL; - - hwnd = CreateWindowEx(0, "Month-Cal test parent class", - "Month-Cal test parent window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_VISIBLE, - 0, 0, 500, 500, - GetDesktopWindow(), NULL, GetModuleHandleA(NULL), NULL); - - assert(hwnd); - - /* check for message sequences */ - ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_window_seq, "create parent window", TRUE); - - return hwnd; -} - -static LRESULT WINAPI monthcal_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("monthcal: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, MONTHCAL_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static HWND create_monthcal_control(DWORD style, HWND parent_window) -{ - struct subclass_info *info; - HWND hwnd; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - hwnd = CreateWindowEx(0, - MONTHCAL_CLASS, - "", - style, - 0, 0, 300, 400, - parent_window, NULL, GetModuleHandleA(NULL), NULL); - - if (!hwnd) - { - HeapFree(GetProcessHeap(), 0, info); - return NULL; - } - - info->oldproc = (WNDPROC)SetWindowLongPtrA(hwnd, GWLP_WNDPROC, - (LONG_PTR)monthcal_subclass_proc); - SetWindowLongPtrA(hwnd, GWLP_USERDATA, (LONG_PTR)info); - - return hwnd; -} - - -/* Setter and Getters Tests */ - -static void test_monthcal_color(HWND hwnd) -{ - int res, temp; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Setter and Getters for color*/ - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_BACKGROUND, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_BACKGROUND, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); - expect(RGB(255,255,255), temp); - - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_MONTHBK, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_MONTHBK, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); - expect(RGB(255,255,255), temp); - - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TEXT, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TEXT, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); - expect(RGB(255,255,255), temp); - - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLEBK, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLEBK, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); - expect(RGB(255,255,255), temp); - - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLETEXT, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLETEXT, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); - expect(RGB(255,255,255), temp); - - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TRAILINGTEXT, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TRAILINGTEXT, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); - expect(RGB(255,255,255), temp); - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_color_seq, "monthcal color", FALSE); -} - -static void test_monthcal_currDate(HWND hwnd) -{ - SYSTEMTIME st_original, st_new, st_test; - int res; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Setter and Getters for current date selected */ - st_original.wYear = 2000; - st_original.wMonth = 11; - st_original.wDay = 28; - st_original.wHour = 11; - st_original.wMinute = 59; - st_original.wSecond = 30; - st_original.wMilliseconds = 0; - st_original.wDayOfWeek = 0; - - st_new = st_test = st_original; - - /* Should not validate the time */ - res = SendMessage(hwnd, MCM_SETCURSEL, 0, (LPARAM)&st_test); - expect(1,res); - - /* Overflow matters, check for wDay */ - st_test.wDay += 4; - res = SendMessage(hwnd, MCM_SETCURSEL, 0, (LPARAM)&st_test); - expect(0,res); - - /* correct wDay before checking for wMonth */ - st_test.wDay -= 4; - expect(st_original.wDay, st_test.wDay); - - /* Overflow matters, check for wMonth */ - st_test.wMonth += 4; - res = SendMessage(hwnd, MCM_SETCURSEL, 0, (LPARAM)&st_test); - expect(0,res); - - /* checking if gets the information right, modify st_new */ - st_new.wYear += 4; - st_new.wMonth += 4; - st_new.wDay += 4; - st_new.wHour += 4; - st_new.wMinute += 4; - st_new.wSecond += 4; - - res = SendMessage(hwnd, MCM_GETCURSEL, 0, (LPARAM)&st_new); - expect(1, res); - - /* st_new change to st_origin, above settings with overflow */ - /* should not change the current settings */ - expect(st_original.wYear, st_new.wYear); - expect(st_original.wMonth, st_new.wMonth); - expect(st_original.wDay, st_new.wDay); - expect(st_original.wHour, st_new.wHour); - expect(st_original.wMinute, st_new.wMinute); - expect(st_original.wSecond, st_new.wSecond); - - /* lparam cannot be NULL */ - res = SendMessage(hwnd, MCM_GETCURSEL, 0, (LPARAM) NULL); - expect(0, res); - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_curr_date_seq, "monthcal currDate", TRUE); -} - -static void test_monthcal_firstDay(HWND hwnd) -{ - int res, fday, i, prev; - TCHAR b[128]; - LCID lcid = LOCALE_USER_DEFAULT; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Setter and Getters for first day of week */ - /* check for locale first day */ - if(GetLocaleInfo(lcid, LOCALE_IFIRSTDAYOFWEEK, b, 128)){ - fday = atoi(b); - res = SendMessage(hwnd, MCM_GETFIRSTDAYOFWEEK, 0, 0); - expect(fday, res); - prev = fday; - - /* checking for the values that actually will be stored as */ - /* current first day when we set a new value */ - for (i = -5; i < 12; i++){ - res = SendMessage(hwnd, MCM_SETFIRSTDAYOFWEEK, 0, (LPARAM) i); - expect(prev, res); - res = SendMessage(hwnd, MCM_GETFIRSTDAYOFWEEK, 0, 0); - prev = res; - - if (i == -1){ - expect(MAKELONG(fday, FALSE), res); - }else if (i >= 7){ - expect(MAKELONG(fday, TRUE), res); - }else{ - expect(MAKELONG(i, TRUE), res); - } - } - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_first_day_seq, "monthcal firstDay", FALSE); - - }else{ - skip("Cannot retrieve first day of the week\n"); - } - -} - -static void test_monthcal_unicode(HWND hwnd) -{ - int res, temp; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Setter and Getters for Unicode format */ - - /* getting the current settings */ - temp = SendMessage(hwnd, MCM_GETUNICODEFORMAT, 0, 0); - - /* setting to 1, should return previous settings */ - res = SendMessage(hwnd, MCM_SETUNICODEFORMAT, 1, 0); - expect(temp, res); - - /* current setting is 1, so, should return 1 */ - res = SendMessage(hwnd, MCM_GETUNICODEFORMAT, 0, 0); - todo_wine {expect(1, res);} - - /* setting to 0, should return previous settings */ - res = SendMessage(hwnd, MCM_SETUNICODEFORMAT, 0, 0); - todo_wine {expect(1, res);} - - /* current setting is 0, so, it should return 0 */ - res = SendMessage(hwnd, MCM_GETUNICODEFORMAT, 0, 0); - expect(0, res); - - /* should return previous settings */ - res = SendMessage(hwnd, MCM_SETUNICODEFORMAT, 1, 0); - expect(0, res); - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_unicode_seq, "monthcal unicode", FALSE); -} - -static void test_monthcal_HitTest(HWND hwnd) -{ - MCHITTESTINFO mchit; - UINT res; - SYSTEMTIME st; - - memset(&mchit, 0, sizeof(MCHITTESTINFO)); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - st.wYear = 2007; - st.wMonth = 4; - st.wDay = 11; - st.wHour = 1; - st.wMinute = 0; - st.wSecond = 0; - st.wMilliseconds = 0; - st.wDayOfWeek = 0; - - res = SendMessage(hwnd, MCM_SETCURSEL, 0, (LPARAM)&st); - expect(1,res); - - /* (0, 0) is the top left of the control and should not be active */ - mchit.cbSize = sizeof(MCHITTESTINFO); - mchit.pt.x = 0; - mchit.pt.y = 0; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(0, mchit.pt.x); - expect(0, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_NOWHERE, res);} - - /* (300, 400) is the bottom right of the control and should not be active */ - mchit.pt.x = 300; - mchit.pt.y = 400; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(300, mchit.pt.x); - expect(400, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_NOWHERE, res);} - - /* (500, 500) is completely out of the control and should not be active */ - mchit.pt.x = 500; - mchit.pt.y = 500; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(500, mchit.pt.x); - expect(500, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_NOWHERE, res);} - - /* (120, 180) is in active area - calendar background */ - mchit.pt.x = 120; - mchit.pt.y = 180; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(120, mchit.pt.x); - expect(180, mchit.pt.y); - expect(mchit.uHit, res); - expect(MCHT_CALENDARBK, res); - - /* (50, 40) is in active area - previous month button */ - mchit.pt.x = 50; - mchit.pt.y = 40; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(50, mchit.pt.x); - expect(40, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TITLEBTNPREV, res);} - - /* (90, 40) is in active area - background section of the title */ - mchit.pt.x = 90; - mchit.pt.y = 40; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(90, mchit.pt.x); - expect(40, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TITLE, res);} - - /* (140, 40) is in active area - month section of the title */ - mchit.pt.x = 140; - mchit.pt.y = 40; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(140, mchit.pt.x); - expect(40, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TITLEMONTH, res);} - - /* (250, 40) is in active area - next month button */ - mchit.pt.x = 250; - mchit.pt.y = 40; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(250, mchit.pt.x); - expect(40, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TITLEBTNNEXT, res);} - - /* (70, 70) is in active area - day of the week */ - mchit.pt.x = 70; - mchit.pt.y = 70; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(70, mchit.pt.x); - expect(70, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_CALENDARDAY, res);} - - /* (70, 90) is in active area - date from prev month */ - mchit.pt.x = 70; - mchit.pt.y = 90; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(70, mchit.pt.x); - expect(90, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_CALENDARDATEPREV, res);} - -#if 0 - /* (125, 115) is in active area - date from this month */ - mchit.pt.x = 125; - mchit.pt.y = 115; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(125, mchit.pt.x); - expect(115, mchit.pt.y); - expect(mchit.uHit, res); - expect(MCHT_CALENDARDATE, res); -#endif - - /* (80, 220) is in active area - background section of the title */ - mchit.pt.x = 80; - mchit.pt.y = 220; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(80, mchit.pt.x); - expect(220, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TITLEBK, res);} - - /* (140, 215) is in active area - month section of the title */ - mchit.pt.x = 140; - mchit.pt.y = 215; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(140, mchit.pt.x); - expect(215, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TITLEMONTH, res);} - - /* (170, 215) is in active area - year section of the title */ - mchit.pt.x = 170; - mchit.pt.y = 215; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(170, mchit.pt.x); - expect(215, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TITLEYEAR, res);} - - /* (150, 260) is in active area - date from this month */ - mchit.pt.x = 150; - mchit.pt.y = 260; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(150, mchit.pt.x); - expect(260, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_CALENDARDATE, res);} - - /* (150, 350) is in active area - date from next month */ - mchit.pt.x = 150; - mchit.pt.y = 350; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(150, mchit.pt.x); - expect(350, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_CALENDARDATENEXT, res);} - - /* (150, 370) is in active area - today link */ - mchit.pt.x = 150; - mchit.pt.y = 370; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(150, mchit.pt.x); - expect(370, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TODAYLINK, res);} - - /* (70, 370) is in active area - today link */ - mchit.pt.x = 70; - mchit.pt.y = 370; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(70, mchit.pt.x); - expect(370, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TODAYLINK, res);} - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_hit_test_seq, "monthcal hit test", TRUE); -} - -static void test_monthcal_todaylink(HWND hwnd) -{ - MCHITTESTINFO mchit; - SYSTEMTIME st_test, st_new; - BOOL error = FALSE; - UINT res; - - memset(&mchit, 0, sizeof(MCHITTESTINFO)); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* (70, 370) is in active area - today link */ - mchit.cbSize = sizeof(MCHITTESTINFO); - mchit.pt.x = 70; - mchit.pt.y = 370; - res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit); - expect(70, mchit.pt.x); - expect(370, mchit.pt.y); - expect(mchit.uHit, res); - todo_wine {expect(MCHT_TODAYLINK, res);} - if (70 != mchit.pt.x || 370 != mchit.pt.y || mchit.uHit != res - || MCHT_TODAYLINK != res) - error = TRUE; - - st_test.wDay = 1; - st_test.wMonth = 1; - st_test.wYear = 2005; - memset(&st_new, 0, sizeof(SYSTEMTIME)); - - SendMessage(hwnd, MCM_SETTODAY, 0, (LPARAM)&st_test); - - res = SendMessage(hwnd, MCM_GETTODAY, 0, (LPARAM)&st_new); - expect(1, res); - expect(1, st_new.wDay); - expect(1, st_new.wMonth); - expect(2005, st_new.wYear); - if (1 != res || 1 != st_new.wDay || 1 != st_new.wMonth - || 2005 != st_new.wYear) - error = TRUE; - - if (error) { - skip("cannot perform today link test\n"); - return; - } - - res = SendMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(70, 370)); - expect(0, res); - - memset(&st_new, 0, sizeof(SYSTEMTIME)); - res = SendMessage(hwnd, MCM_GETCURSEL, 0, (LPARAM)&st_new); - expect(1, res); - expect(1, st_new.wDay); - expect(1, st_new.wMonth); - expect(2005, st_new.wYear); - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_todaylink_seq, "monthcal hit test", TRUE); -} - -static void test_monthcal_today(HWND hwnd) -{ - SYSTEMTIME st_test, st_new; - int res; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Setter and Getters for "today" information */ - - /* check for overflow, should be ok */ - st_test.wDay = 38; - st_test.wMonth = 38; - - st_new.wDay = 27; - st_new.wMonth = 27; - - SendMessage(hwnd, MCM_SETTODAY, 0, (LPARAM)&st_test); - - res = SendMessage(hwnd, MCM_GETTODAY, 0, (LPARAM)&st_new); - expect(1, res); - - /* st_test should not change */ - expect(38, st_test.wDay); - expect(38, st_test.wMonth); - - /* st_new should change, overflow does not matter */ - expect(38, st_new.wDay); - expect(38, st_new.wMonth); - - /* check for zero, should be ok*/ - st_test.wDay = 0; - st_test.wMonth = 0; - - SendMessage(hwnd, MCM_SETTODAY, 0, (LPARAM)&st_test); - - res = SendMessage(hwnd, MCM_GETTODAY, 0, (LPARAM)&st_new); - expect(1, res); - - /* st_test should not change */ - expect(0, st_test.wDay); - expect(0, st_test.wMonth); - - /* st_new should change to zero*/ - expect(0, st_new.wDay); - expect(0, st_new.wMonth); - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_today_seq, "monthcal today", TRUE); -} - -static void test_monthcal_scroll(HWND hwnd) -{ - int res; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Setter and Getters for scroll rate */ - res = SendMessage(hwnd, MCM_SETMONTHDELTA, 2, 0); - expect(0, res); - - res = SendMessage(hwnd, MCM_SETMONTHDELTA, 3, 0); - expect(2, res); - res = SendMessage(hwnd, MCM_GETMONTHDELTA, 0, 0); - expect(3, res); - - res = SendMessage(hwnd, MCM_SETMONTHDELTA, 12, 0); - expect(3, res); - res = SendMessage(hwnd, MCM_GETMONTHDELTA, 0, 0); - expect(12, res); - - res = SendMessage(hwnd, MCM_SETMONTHDELTA, 15, 0); - expect(12, res); - res = SendMessage(hwnd, MCM_GETMONTHDELTA, 0, 0); - expect(15, res); - - res = SendMessage(hwnd, MCM_SETMONTHDELTA, -5, 0); - expect(15, res); - res = SendMessage(hwnd, MCM_GETMONTHDELTA, 0, 0); - expect(-5, res); - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_scroll_seq, "monthcal scroll", FALSE); -} - -static void test_monthcal_monthrange(HWND hwnd) -{ - int res; - SYSTEMTIME st_visible[2], st_daystate[2]; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - st_visible[0].wYear = 0; - st_visible[0].wMonth = 0; - st_visible[0].wDay = 0; - st_daystate[1] = st_daystate[0] = st_visible[1] = st_visible[0]; - - res = SendMessage(hwnd, MCM_GETMONTHRANGE, GMR_VISIBLE, (LPARAM)st_visible); - todo_wine { - expect(2, res); - expect(2000, st_visible[0].wYear); - expect(11, st_visible[0].wMonth); - expect(1, st_visible[0].wDay); - expect(2000, st_visible[1].wYear); - expect(12, st_visible[1].wMonth); - expect(31, st_visible[1].wDay); - } - res = SendMessage(hwnd, MCM_GETMONTHRANGE, GMR_DAYSTATE, (LPARAM)st_daystate); - todo_wine { - expect(4, res); - expect(2000, st_daystate[0].wYear); - expect(10, st_daystate[0].wMonth); - expect(29, st_daystate[0].wDay); - expect(2001, st_daystate[1].wYear); - expect(1, st_daystate[1].wMonth); - expect(6, st_daystate[1].wDay); - } - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_monthrange_seq, "monthcal monthrange", FALSE); -} - -static void test_monthcal_MaxSelDay(HWND hwnd) -{ - int res; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Setter and Getters for max selected days */ - res = SendMessage(hwnd, MCM_SETMAXSELCOUNT, 5, 0); - expect(1, res); - res = SendMessage(hwnd, MCM_GETMAXSELCOUNT, 0, 0); - expect(5, res); - - res = SendMessage(hwnd, MCM_SETMAXSELCOUNT, 15, 0); - expect(1, res); - res = SendMessage(hwnd, MCM_GETMAXSELCOUNT, 0, 0); - expect(15, res); - - res = SendMessage(hwnd, MCM_SETMAXSELCOUNT, -1, 0); - todo_wine {expect(0, res);} - res = SendMessage(hwnd, MCM_GETMAXSELCOUNT, 0, 0); - todo_wine {expect(15, res);} - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_max_sel_day_seq, "monthcal MaxSelDay", FALSE); -} - - -START_TEST(monthcal) -{ - HMODULE hComctl32; - BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); - INITCOMMONCONTROLSEX iccex; - HWND hwnd, parent_wnd; - - hComctl32 = GetModuleHandleA("comctl32.dll"); - pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); - if (!pInitCommonControlsEx) - { - skip("InitCommonControlsEx() is missing. Skipping the tests\n"); - return; - } - iccex.dwSize = sizeof(iccex); - iccex.dwICC = ICC_DATE_CLASSES; - pInitCommonControlsEx(&iccex); - - test_monthcal(); - - init_msg_sequences(sequences, NUM_MSG_SEQUENCES); - - parent_wnd = create_parent_window(); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hwnd = create_monthcal_control(WS_CHILD | WS_BORDER | WS_VISIBLE, parent_wnd); - assert(hwnd); - ok_sequence(sequences, PARENT_SEQ_INDEX, create_monthcal_control_seq, "create monthcal control", TRUE); - - SendMessage(hwnd, WM_SETFONT, (WPARAM)GetStockObject(SYSTEM_FONT), 0); - - test_monthcal_color(hwnd); - test_monthcal_currDate(hwnd); - test_monthcal_firstDay(hwnd); - test_monthcal_unicode(hwnd); - test_monthcal_today(hwnd); - test_monthcal_scroll(hwnd); - test_monthcal_monthrange(hwnd); - test_monthcal_HitTest(hwnd); - test_monthcal_todaylink(hwnd); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); - ok_sequence(sequences, PARENT_SEQ_INDEX, destroy_monthcal_parent_msgs_seq, "Destroy monthcal (parent msg)", FALSE); - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, destroy_monthcal_child_msgs_seq, "Destroy monthcal (child msg)", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - hwnd = create_monthcal_control(MCS_MULTISELECT, parent_wnd); - assert(hwnd); - ok_sequence(sequences, PARENT_SEQ_INDEX, create_monthcal_multi_sel_style_seq, "create monthcal (multi sel style)", TRUE); - - test_monthcal_MaxSelDay(hwnd); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(hwnd); - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, destroy_monthcal_multi_sel_style_seq, "Destroy monthcal (multi sel style)", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - DestroyWindow(parent_wnd); - ok_sequence(sequences, PARENT_SEQ_INDEX, destroy_parent_seq, "Destroy parent window", FALSE); -} diff --git a/rostests/winetests/comctl32/mru.c b/rostests/winetests/comctl32/mru.c deleted file mode 100644 index 8ef1617503d..00000000000 --- a/rostests/winetests/comctl32/mru.c +++ /dev/null @@ -1,428 +0,0 @@ -/* - * comctl32 MRU unit tests - * - * Copyright (C) 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 - */ -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winnls.h" -#include "winreg.h" -#include "commctrl.h" -#include "shlwapi.h" - -#include "wine/test.h" - -/* Keys for testing MRU functions */ -#define REG_TEST_BASEKEYA "Software\\Wine" -#define REG_TEST_BASESUBKEYA "Test" -#define REG_TEST_KEYA REG_TEST_BASEKEYA "\\" REG_TEST_BASESUBKEYA -#define REG_TEST_SUBKEYA "MRUTest" -#define REG_TEST_FULLKEY REG_TEST_KEYA "\\" REG_TEST_SUBKEYA - -/* Undocumented MRU structures & functions */ -typedef struct tagCREATEMRULISTA -{ - DWORD cbSize; - DWORD nMaxItems; - DWORD dwFlags; - HKEY hKey; - LPCSTR lpszSubKey; - PROC lpfnCompare; -} CREATEMRULISTA, *LPCREATEMRULISTA; - -#define MRUF_STRING_LIST 0 -#define MRUF_BINARY_LIST 1 -#define MRUF_DELAYED_SAVE 2 - -#define LIST_SIZE 3 /* Max entries for each mru */ - -static CREATEMRULISTA mruA = -{ - sizeof(CREATEMRULISTA), - LIST_SIZE, - 0, - NULL, - REG_TEST_SUBKEYA, - NULL -}; - -static HMODULE hComctl32; -static HANDLE (WINAPI *pCreateMRUListA)(LPCREATEMRULISTA); -static void (WINAPI *pFreeMRUList)(HANDLE); -static INT (WINAPI *pAddMRUStringA)(HANDLE,LPCSTR); -static INT (WINAPI *pEnumMRUList)(HANDLE,INT,LPVOID,DWORD); -/* -static INT (WINAPI *pFindMRUStringA)(HANDLE,LPCSTR,LPINT); -*/ - - -/* Based on RegDeleteTreeW from dlls/advapi32/registry.c */ -static LONG mru_RegDeleteTreeA(HKEY hKey, LPCSTR lpszSubKey) -{ - LONG ret; - DWORD dwMaxSubkeyLen, dwMaxValueLen; - DWORD dwMaxLen, dwSize; - CHAR szNameBuf[MAX_PATH], *lpszName = szNameBuf; - HKEY hSubKey = hKey; - - if(lpszSubKey) - { - ret = RegOpenKeyExA(hKey, lpszSubKey, 0, KEY_READ, &hSubKey); - if (ret) return ret; - } - - /* Get highest length for keys, values */ - ret = RegQueryInfoKeyA(hSubKey, NULL, NULL, NULL, NULL, - &dwMaxSubkeyLen, NULL, NULL, &dwMaxValueLen, NULL, NULL, NULL); - if (ret) goto cleanup; - - dwMaxSubkeyLen++; - dwMaxValueLen++; - dwMaxLen = max(dwMaxSubkeyLen, dwMaxValueLen); - if (dwMaxLen > sizeof(szNameBuf)/sizeof(CHAR)) - { - /* Name too big: alloc a buffer for it */ - if (!(lpszName = HeapAlloc( GetProcessHeap(), 0, dwMaxLen*sizeof(CHAR)))) - { - ret = ERROR_NOT_ENOUGH_MEMORY; - goto cleanup; - } - } - - - /* Recursively delete all the subkeys */ - while (TRUE) - { - dwSize = dwMaxLen; - if (RegEnumKeyExA(hSubKey, 0, lpszName, &dwSize, NULL, - NULL, NULL, NULL)) break; - - ret = mru_RegDeleteTreeA(hSubKey, lpszName); - if (ret) goto cleanup; - } - - if (lpszSubKey) - ret = RegDeleteKeyA(hKey, lpszSubKey); - else - while (TRUE) - { - dwSize = dwMaxLen; - if (RegEnumValueA(hKey, 0, lpszName, &dwSize, - NULL, NULL, NULL, NULL)) break; - - ret = RegDeleteValueA(hKey, lpszName); - if (ret) goto cleanup; - } - -cleanup: - /* Free buffer if allocated */ - if (lpszName != szNameBuf) - HeapFree( GetProcessHeap(), 0, lpszName); - if(lpszSubKey) - RegCloseKey(hSubKey); - return ret; -} - -static BOOL create_reg_entries(void) -{ - HKEY hKey = NULL; - - ok(!RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_FULLKEY, &hKey), - "Couldn't create test key \"%s\"\n", REG_TEST_KEYA); - if (!hKey) return FALSE; - RegCloseKey(hKey); - return TRUE; -} - -static void delete_reg_entries(void) -{ - HKEY hKey; - - if (RegOpenKeyExA(HKEY_CURRENT_USER, REG_TEST_BASEKEYA, 0, KEY_ALL_ACCESS, - &hKey)) - return; - mru_RegDeleteTreeA(hKey, REG_TEST_BASESUBKEYA); - RegCloseKey(hKey); -} - -static void check_reg_entries(const char *mrulist, const char**items) -{ - char buff[128]; - HKEY hKey = NULL; - DWORD type, size, ret; - unsigned int i; - - ok(!RegOpenKeyA(HKEY_CURRENT_USER, REG_TEST_FULLKEY, &hKey), - "Couldn't open test key \"%s\"\n", REG_TEST_FULLKEY); - if (!hKey) return; - - type = REG_SZ; - size = sizeof(buff); - buff[0] = '\0'; - ret = RegQueryValueExA(hKey, "MRUList", NULL, &type, (LPBYTE)buff, &size); - - ok(!ret && buff[0], "Checking MRU: got %d from RegQueryValueExW\n", ret); - if(ret || !buff[0]) return; - - ok(strcmp(buff, mrulist) == 0, "Checking MRU: Expected list %s, got %s\n", - mrulist, buff); - if(strcmp(buff, mrulist)) return; - - for (i = 0; i < strlen(mrulist); i++) - { - char name[2]; - name[0] = mrulist[i]; - name[1] = '\0'; - type = REG_SZ; - size = sizeof(buff); - buff[0] = '\0'; - ret = RegQueryValueExA(hKey, name, NULL, &type, (LPBYTE)buff, &size); - ok(!ret && buff[0], - "Checking MRU item %d ('%c'): got %d from RegQueryValueExW\n", - i, mrulist[i], ret); - if(ret || !buff[0]) return; - ok(!strcmp(buff, items[mrulist[i]-'a']), - "Checking MRU item %d ('%c'): expected \"%s\", got \"%s\"\n", - i, mrulist[i], buff, items[mrulist[i] - 'a']); - } -} - -static INT CALLBACK cmp_mru_strA(LPCVOID data1, LPCVOID data2) -{ - return lstrcmpiA(data1, data2); -} - -static HANDLE create_mruA(HKEY hKey, DWORD flags, PROC cmp) -{ - mruA.dwFlags = flags; - mruA.lpfnCompare = cmp; - mruA.hKey = hKey; - - SetLastError(0); - return pCreateMRUListA(&mruA); -} - -static void test_MRUListA(void) -{ - const char *checks[LIST_SIZE+1]; - HANDLE hMRU; - HKEY hKey; - INT iRet; - - pCreateMRUListA = (void*)GetProcAddress(hComctl32,(LPCSTR)151); - pFreeMRUList = (void*)GetProcAddress(hComctl32,(LPCSTR)152); - pAddMRUStringA = (void*)GetProcAddress(hComctl32,(LPCSTR)153); - pEnumMRUList = (void*)GetProcAddress(hComctl32,(LPCSTR)154); - - if (!pCreateMRUListA || !pFreeMRUList || !pAddMRUStringA || !pEnumMRUList) - { - skip("MRU entry points not found\n"); - return; - } - - if (0) - { - /* Create (NULL) - crashes native */ - hMRU = pCreateMRUListA(NULL); - } - - /* Create (size too small) */ - mruA.cbSize = sizeof(mruA) - 2; - hMRU = create_mruA(NULL, MRUF_STRING_LIST, (PROC)cmp_mru_strA); - ok (!hMRU && !GetLastError(), - "CreateMRUListA(too small) expected NULL,0 got %p,%d\n", - hMRU, GetLastError()); - mruA.cbSize = sizeof(mruA); - - /* Create (size too big) */ - mruA.cbSize = sizeof(mruA) + 2; - hMRU = create_mruA(NULL, MRUF_STRING_LIST, (PROC)cmp_mru_strA); - ok (!hMRU && !GetLastError(), - "CreateMRUListA(too big) expected NULL,0 got %p,%d\n", - hMRU, GetLastError()); - mruA.cbSize = sizeof(mruA); - - /* Create (NULL hKey) */ - hMRU = create_mruA(NULL, MRUF_STRING_LIST, (PROC)cmp_mru_strA); - ok (!hMRU && !GetLastError(), - "CreateMRUListA(NULL key) expected NULL,0 got %p,%d\n", - hMRU, GetLastError()); - - /* Create (NULL name) */ - mruA.lpszSubKey = NULL; - hMRU = create_mruA(NULL, MRUF_STRING_LIST, (PROC)cmp_mru_strA); - ok (!hMRU && !GetLastError(), - "CreateMRUListA(NULL name) expected NULL,0 got %p,%d\n", - hMRU, GetLastError()); - mruA.lpszSubKey = REG_TEST_SUBKEYA; - - /* Create a string MRU */ - ok(!RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_KEYA, &hKey), - "Couldn't create test key \"%s\"\n", REG_TEST_KEYA); - if (!hKey) - return; - hMRU = create_mruA(hKey, MRUF_STRING_LIST, (PROC)cmp_mru_strA); - ok(hMRU && !GetLastError(), - "CreateMRUListA(string) expected non-NULL,0 got %p,%d\n", - hMRU, GetLastError()); - - if (hMRU) - { - char buffer[255]; - checks[0] = "Test 1"; - checks[1] = "Test 2"; - checks[2] = "Test 3"; - checks[3] = "Test 4"; - - /* Add (NULL list) */ - SetLastError(0); - iRet = pAddMRUStringA(NULL, checks[0]); - ok(iRet == -1 && !GetLastError(), - "AddMRUStringA(NULL list) expected -1,0 got %d,%d\n", - iRet, GetLastError()); - - /* Add (NULL string) */ - if (0) - { - /* Some native versions crash when passed NULL or fail to SetLastError() */ - SetLastError(0); - iRet = pAddMRUStringA(hMRU, NULL); - ok(iRet == 0 && GetLastError() == ERROR_INVALID_PARAMETER, - "AddMRUStringA(NULL str) expected 0,ERROR_INVALID_PARAMETER got %d,%d\n", - iRet, GetLastError()); - } - - /* Add 3 strings. Check the registry is correct after each add */ - SetLastError(0); - iRet = pAddMRUStringA(hMRU, checks[0]); - ok(iRet == 0 && !GetLastError(), - "AddMRUStringA(1) expected 0,0 got %d,%d\n", - iRet, GetLastError()); - check_reg_entries("a", checks); - - SetLastError(0); - iRet = pAddMRUStringA(hMRU, checks[1]); - ok(iRet == 1 && !GetLastError(), - "AddMRUStringA(2) expected 1,0 got %d,%d\n", - iRet, GetLastError()); - check_reg_entries("ba", checks); - - SetLastError(0); - iRet = pAddMRUStringA(hMRU, checks[2]); - ok(iRet == 2 && !GetLastError(), - "AddMRUStringA(2) expected 2,0 got %d,%d\n", - iRet, GetLastError()); - check_reg_entries("cba", checks); - - /* Add a duplicate of the 2nd string - it should move to the front, - * but keep the same index in the registry. - */ - SetLastError(0); - iRet = pAddMRUStringA(hMRU, checks[1]); - ok(iRet == 1 && !GetLastError(), - "AddMRUStringA(re-add 1) expected 1,0 got %d,%d\n", - iRet, GetLastError()); - check_reg_entries("bca", checks); - - /* Add a new string - replaces the oldest string + moves to the front */ - SetLastError(0); - iRet = pAddMRUStringA(hMRU, checks[3]); - ok(iRet == 0 && !GetLastError(), - "AddMRUStringA(add new) expected 0,0 got %d,%d\n", - iRet, GetLastError()); - checks[0] = checks[3]; - check_reg_entries("abc", checks); - - /* NULL buffer = get list size */ - iRet = pEnumMRUList(hMRU, 0, NULL, 0); - ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet); - - /* negative item pos = get list size */ - iRet = pEnumMRUList(hMRU, -1, NULL, 0); - ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet); - - /* negative item pos = get list size */ - iRet = pEnumMRUList(hMRU, -5, NULL, 0); - ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet); - - /* negative item pos = get list size */ - iRet = pEnumMRUList(hMRU, -1, buffer, 255); - ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet); - - /* negative item pos = get list size */ - iRet = pEnumMRUList(hMRU, -5, buffer, 255); - ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet); - - /* check entry 0 */ - buffer[0] = 0; - iRet = pEnumMRUList(hMRU, 0, buffer, 255); - todo_wine ok(iRet == lstrlen(checks[3]), "EnumMRUList expected %d, got %d\n", lstrlen(checks[3]), iRet); - ok(strcmp(buffer, checks[3]) == 0, "EnumMRUList expected %s, got %s\n", checks[3], buffer); - - /* check entry 0 with a too small buffer */ - buffer[0] = 0; /* overwritten with 'T' */ - buffer[1] = 'A'; /* overwritten with 0 */ - buffer[2] = 'A'; /* unchanged */ - buffer[3] = 0; /* unchanged */ - iRet = pEnumMRUList(hMRU, 0, buffer, 2); - todo_wine ok(iRet == lstrlen(checks[3]), "EnumMRUList expected %d, got %d\n", lstrlen(checks[3]), iRet); - todo_wine ok(strcmp(buffer, "T") == 0, "EnumMRUList expected %s, got %s\n", "T", buffer); - /* make sure space after buffer has old values */ - ok(buffer[2] == 'A', "EnumMRUList expected %02x, got %02x\n", 'A', buffer[2]); - - /* check entry 1 */ - buffer[0] = 0; - iRet = pEnumMRUList(hMRU, 1, buffer, 255); - todo_wine ok(iRet == lstrlen(checks[1]), "EnumMRUList expected %d, got %d\n", lstrlen(checks[1]), iRet); - ok(strcmp(buffer, checks[1]) == 0, "EnumMRUList expected %s, got %s\n", checks[1], buffer); - - /* check entry 2 */ - buffer[0] = 0; - iRet = pEnumMRUList(hMRU, 2, buffer, 255); - todo_wine ok(iRet == lstrlen(checks[2]), "EnumMRUList expected %d, got %d\n", lstrlen(checks[2]), iRet); - ok(strcmp(buffer, checks[2]) == 0, "EnumMRUList expected %s, got %s\n", checks[2], buffer); - - /* check out of bounds entry 3 */ - strcpy(buffer, "dummy"); - iRet = pEnumMRUList(hMRU, 3, buffer, 255); - ok(iRet == -1, "EnumMRUList expected %d, got %d\n", -1, iRet); - ok(strcmp(buffer, "dummy") == 0, "EnumMRUList expected unchanged buffer %s, got %s\n", "dummy", buffer); - - /* Finished with this MRU */ - pFreeMRUList(hMRU); - } - - /* Free (NULL list) - Doesn't crash */ - pFreeMRUList(NULL); -} - -START_TEST(mru) -{ - hComctl32 = GetModuleHandleA("comctl32.dll"); - - delete_reg_entries(); - if (!create_reg_entries()) - return; - - test_MRUListA(); - - delete_reg_entries(); -} diff --git a/rostests/winetests/comctl32/msg.c b/rostests/winetests/comctl32/msg.c deleted file mode 100644 index 2129f222e01..00000000000 --- a/rostests/winetests/comctl32/msg.c +++ /dev/null @@ -1,251 +0,0 @@ -/* Message Sequence Testing Code - * - * Copyright (C) 2007 James Hawkins - * Copyright (C) 2007 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 - */ - -#include "msg.h" - -void add_message(struct msg_sequence **seq, int sequence_index, - const struct message *msg) -{ - struct msg_sequence *msg_seq = seq[sequence_index]; - - if (!msg_seq->sequence) - { - msg_seq->size = 10; - msg_seq->sequence = HeapAlloc(GetProcessHeap(), 0, - msg_seq->size * sizeof (struct message)); - } - - if (msg_seq->count == msg_seq->size) - { - msg_seq->size *= 2; - msg_seq->sequence = HeapReAlloc(GetProcessHeap(), 0, - msg_seq->sequence, - msg_seq->size * sizeof (struct message)); - } - - assert(msg_seq->sequence); - - msg_seq->sequence[msg_seq->count].message = msg->message; - msg_seq->sequence[msg_seq->count].flags = msg->flags; - msg_seq->sequence[msg_seq->count].wParam = msg->wParam; - msg_seq->sequence[msg_seq->count].lParam = msg->lParam; - msg_seq->sequence[msg_seq->count].id = msg->id; - - msg_seq->count++; -} - -void flush_sequence(struct msg_sequence **seg, int sequence_index) -{ - struct msg_sequence *msg_seq = seg[sequence_index]; - HeapFree(GetProcessHeap(), 0, msg_seq->sequence); - msg_seq->sequence = NULL; - msg_seq->count = msg_seq->size = 0; -} - -void flush_sequences(struct msg_sequence **seq, int n) -{ - int i; - - for (i = 0; i < n; i++) - flush_sequence(seq, i); -} - -void ok_sequence_(struct msg_sequence **seq, int sequence_index, - const struct message *expected, const char *context, int todo, - const char *file, int line) -{ - struct msg_sequence *msg_seq = seq[sequence_index]; - static const struct message end_of_sequence = {0, 0, 0, 0}; - const struct message *actual, *sequence; - int failcount = 0; - - add_message(seq, sequence_index, &end_of_sequence); - - sequence = msg_seq->sequence; - actual = sequence; - - while (expected->message && actual->message) - { - trace_( file, line)("expected %04x - actual %04x\n", expected->message, actual->message); - - if (expected->message == actual->message) - { - if (expected->flags & wparam) - { - if (expected->wParam != actual->wParam && todo) - { - todo_wine - { - failcount++; - ok_(file, line) (FALSE, - "%s: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n", - context, expected->message, expected->wParam, actual->wParam); - } - } - else - { - ok_(file, line) (expected->wParam == actual->wParam, - "%s: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n", - context, expected->message, expected->wParam, actual->wParam); - } - } - - if (expected->flags & lparam) - { - if (expected->lParam != actual->lParam && todo) - { - todo_wine - { - failcount++; - ok_(file, line) (FALSE, - "%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n", - context, expected->message, expected->lParam, actual->lParam); - } - } - else - { - ok_(file, line) (expected->lParam == actual->lParam, - "%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n", - context, expected->message, expected->lParam, actual->lParam); - } - } - - if (expected->flags & id) - { - if (expected->id != actual->id && todo) - { - todo_wine - { - failcount++; - ok_(file, line) (FALSE, - "%s: in msg 0x%04x expecting id 0x%x got 0x%x\n", - context, expected->message, expected->id, actual->id); - } - } - else - { - ok_(file, line) (expected->id == actual->id, - "%s: in msg 0x%04x expecting id 0x%x got 0x%x\n", - context, expected->message, expected->id, actual->id); - } - } - - if ((expected->flags & defwinproc) != (actual->flags & defwinproc) && todo) - { - todo_wine - { - failcount++; - ok_(file, line) (FALSE, - "%s: the msg 0x%04x should %shave been sent by DefWindowProc\n", - context, expected->message, (expected->flags & defwinproc) ? "" : "NOT "); - } - } - else - { - ok_(file, line) ((expected->flags & defwinproc) == (actual->flags & defwinproc), - "%s: the msg 0x%04x should %shave been sent by DefWindowProc\n", - context, expected->message, (expected->flags & defwinproc) ? "" : "NOT "); - } - - ok_(file, line) ((expected->flags & beginpaint) == (actual->flags & beginpaint), - "%s: the msg 0x%04x should %shave been sent by BeginPaint\n", - context, expected->message, (expected->flags & beginpaint) ? "" : "NOT "); - ok_(file, line) ((expected->flags & (sent|posted)) == (actual->flags & (sent|posted)), - "%s: the msg 0x%04x should have been %s\n", - context, expected->message, (expected->flags & posted) ? "posted" : "sent"); - ok_(file, line) ((expected->flags & parent) == (actual->flags & parent), - "%s: the msg 0x%04x was expected in %s\n", - context, expected->message, (expected->flags & parent) ? "parent" : "child"); - ok_(file, line) ((expected->flags & hook) == (actual->flags & hook), - "%s: the msg 0x%04x should have been sent by a hook\n", - context, expected->message); - ok_(file, line) ((expected->flags & winevent_hook) == (actual->flags & winevent_hook), - "%s: the msg 0x%04x should have been sent by a winevent hook\n", - context, expected->message); - expected++; - actual++; - } - else if (expected->flags & optional) - expected++; - else if (todo) - { - failcount++; - todo_wine - { - ok_(file, line) (FALSE, "%s: the msg 0x%04x was expected, but got msg 0x%04x instead\n", - context, expected->message, actual->message); - } - - flush_sequence(seq, sequence_index); - return; - } - else - { - ok_(file, line) (FALSE, "%s: the msg 0x%04x was expected, but got msg 0x%04x instead\n", - context, expected->message, actual->message); - expected++; - actual++; - } - } - - /* skip all optional trailing messages */ - while (expected->message && ((expected->flags & optional))) - expected++; - - if (todo) - { - todo_wine - { - if (expected->message || actual->message) - { - failcount++; - ok_(file, line) (FALSE, "%s: the msg sequence is not complete: expected %04x - actual %04x\n", - context, expected->message, actual->message); - } - } - } - else if (expected->message || actual->message) - { - ok_(file, line) (FALSE, "%s: the msg sequence is not complete: expected %04x - actual %04x\n", - context, expected->message, actual->message); - } - - if(todo && !failcount) /* succeeded yet marked todo */ - { - todo_wine - { - ok_(file, line)(TRUE, "%s: marked \"todo_wine\" but succeeds\n", context); - } - } - - flush_sequence(seq, sequence_index); -} - -void init_msg_sequences(struct msg_sequence **seq, int n) -{ - int i; - - for (i = 0; i < n; i++) - seq[i] = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct msg_sequence)); -} - -START_TEST(msg) -{ -} diff --git a/rostests/winetests/comctl32/msg.h b/rostests/winetests/comctl32/msg.h deleted file mode 100644 index 2ec3ea17a85..00000000000 --- a/rostests/winetests/comctl32/msg.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Message Sequence Testing Code - * - * Copyright (C) 2007 James Hawkins - * Copyright (C) 2007 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 - */ - -#include -#include -#include "wine/test.h" - -/* undocumented SWP flags - from SDK 3.1 */ -#define SWP_NOCLIENTSIZE 0x0800 -#define SWP_NOCLIENTMOVE 0x1000 - -typedef enum -{ - sent = 0x1, - posted = 0x2, - parent = 0x4, - wparam = 0x8, - lparam = 0x10, - defwinproc = 0x20, - beginpaint = 0x40, - optional = 0x80, - hook = 0x100, - winevent_hook =0x200, - id = 0x400 -} msg_flags_t; - -struct message -{ - UINT message; /* the WM_* code */ - msg_flags_t flags; /* message props */ - WPARAM wParam; /* expected value of wParam */ - LPARAM lParam; /* expected value of lParam */ - UINT id; /* id of the window */ -}; - -struct msg_sequence -{ - int count; - int size; - struct message *sequence; -}; - -void add_message(struct msg_sequence **seq, int sequence_index, - const struct message *msg); -void flush_sequence(struct msg_sequence **seg, int sequence_index); -void flush_sequences(struct msg_sequence **seq, int n); - -#define ok_sequence(seq, index, exp, contx, todo) \ - ok_sequence_(seq, index, (exp), (contx), (todo), __FILE__, __LINE__) - - -void ok_sequence_(struct msg_sequence **seq, int sequence_index, - const struct message *expected, const char *context, int todo, - const char *file, int line); - -void init_msg_sequences(struct msg_sequence **seq, int n); diff --git a/rostests/winetests/comctl32/progress.c b/rostests/winetests/comctl32/progress.c deleted file mode 100644 index 10bbbef8a28..00000000000 --- a/rostests/winetests/comctl32/progress.c +++ /dev/null @@ -1,230 +0,0 @@ -/* Unit tests for the progress bar control. - * - * Copyright 2005 Michael Kaufmann - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "commctrl.h" - -#include "wine/test.h" - - -static HWND hProgressParentWnd, hProgressWnd; -static const char progressTestClass[] = "ProgressBarTestClass"; - - -/* try to make sure pending X events have been processed before continuing */ -static void flush_events(void) -{ - MSG msg; - int diff = 100; - DWORD time = GetTickCount() + diff; - - while (diff > 0) - { - if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min(10,diff), QS_ALLINPUT ) == WAIT_TIMEOUT) break; - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - diff = time - GetTickCount(); - } -} - -static LRESULT CALLBACK ProgressTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProcA(hWnd, msg, wParam, lParam); - } - - return 0L; -} - -static WNDPROC progress_wndproc; -static BOOL erased; -static RECT last_paint_rect; - -static LRESULT CALLBACK ProgressSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (msg == WM_PAINT) - { - GetUpdateRect(hWnd, &last_paint_rect, FALSE); - } - else if (msg == WM_ERASEBKGND) - { - erased = TRUE; - } - return CallWindowProc(progress_wndproc, hWnd, msg, wParam, lParam); -} - - -static void update_window(HWND hWnd) -{ - UpdateWindow(hWnd); - ok(!GetUpdateRect(hWnd, NULL, FALSE), "GetUpdateRect must return zero after UpdateWindow\n"); -} - - -static void init(void) -{ - HMODULE hComctl32; - BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); - WNDCLASSA wc; - RECT rect; - - hComctl32 = GetModuleHandleA("comctl32.dll"); - pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); - if (pInitCommonControlsEx) - { - INITCOMMONCONTROLSEX iccex; - iccex.dwSize = sizeof(iccex); - iccex.dwICC = ICC_PROGRESS_CLASS; - pInitCommonControlsEx(&iccex); - } - else - InitCommonControls(); - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_ARROW); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = progressTestClass; - wc.lpfnWndProc = ProgressTestWndProc; - RegisterClassA(&wc); - - rect.left = 0; - rect.top = 0; - rect.right = 400; - rect.bottom = 20; - assert(AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE)); - - hProgressParentWnd = CreateWindowExA(0, progressTestClass, "Progress Bar Test", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, GetModuleHandleA(NULL), 0); - assert(hProgressParentWnd != NULL); - - GetClientRect(hProgressParentWnd, &rect); - hProgressWnd = CreateWindowEx(0, PROGRESS_CLASS, "", WS_CHILD | WS_VISIBLE, - 0, 0, rect.right, rect.bottom, hProgressParentWnd, NULL, GetModuleHandleA(NULL), 0); - assert(hProgressWnd != NULL); - progress_wndproc = (WNDPROC)SetWindowLongPtr(hProgressWnd, GWLP_WNDPROC, (LPARAM)ProgressSubclassProc); - - ShowWindow(hProgressParentWnd, SW_SHOWNORMAL); - ok(GetUpdateRect(hProgressParentWnd, NULL, FALSE), "GetUpdateRect: There should be a region that needs to be updated\n"); - flush_events(); - update_window(hProgressParentWnd); -} - - -static void cleanup(void) -{ - MSG msg; - - PostMessageA(hProgressParentWnd, WM_CLOSE, 0, 0); - while (GetMessageA(&msg,0,0,0)) { - TranslateMessage(&msg); - DispatchMessageA(&msg); - } - - UnregisterClassA(progressTestClass, GetModuleHandleA(NULL)); -} - - -/* - * Tests if a progress bar repaints itself immediately when it receives - * some specific messages. - */ -static void test_redraw(void) -{ - RECT client_rect; - - SendMessageA(hProgressWnd, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); - SendMessageA(hProgressWnd, PBM_SETPOS, 10, 0); - SendMessageA(hProgressWnd, PBM_SETSTEP, 20, 0); - update_window(hProgressWnd); - - /* PBM_SETPOS */ - ok(SendMessageA(hProgressWnd, PBM_SETPOS, 50, 0) == 10, "PBM_SETPOS must return the previous position\n"); - ok(!GetUpdateRect(hProgressWnd, NULL, FALSE), "PBM_SETPOS: The progress bar should be redrawn immediately\n"); - - /* PBM_DELTAPOS */ - ok(SendMessageA(hProgressWnd, PBM_DELTAPOS, 15, 0) == 50, "PBM_DELTAPOS must return the previous position\n"); - ok(!GetUpdateRect(hProgressWnd, NULL, FALSE), "PBM_DELTAPOS: The progress bar should be redrawn immediately\n"); - - /* PBM_SETPOS */ - ok(SendMessageA(hProgressWnd, PBM_SETPOS, 80, 0) == 65, "PBM_SETPOS must return the previous position\n"); - ok(!GetUpdateRect(hProgressWnd, NULL, FALSE), "PBM_SETPOS: The progress bar should be redrawn immediately\n"); - - /* PBM_STEPIT */ - ok(SendMessageA(hProgressWnd, PBM_STEPIT, 0, 0) == 80, "PBM_STEPIT must return the previous position\n"); - ok(!GetUpdateRect(hProgressWnd, NULL, FALSE), "PBM_STEPIT: The progress bar should be redrawn immediately\n"); - ok((UINT)SendMessageA(hProgressWnd, PBM_GETPOS, 0, 0) == 100, "PBM_GETPOS returned a wrong position\n"); - - /* PBM_SETRANGE and PBM_SETRANGE32: - Usually the progress bar doesn't repaint itself immediately. If the - position is not in the new range, it does. - Don't test this, it may change in future Windows versions. */ - - SendMessage(hProgressWnd, PBM_SETPOS, 0, 0); - update_window(hProgressWnd); - - /* increase to 10 - no background erase required */ - erased = FALSE; - SetRectEmpty(&last_paint_rect); - SendMessage(hProgressWnd, PBM_SETPOS, 10, 0); - GetClientRect(hProgressWnd, &client_rect); - ok(EqualRect(&last_paint_rect, &client_rect), - "last_paint_rect was { %d, %d, %d, %d } instead of { %d, %d, %d, %d }\n", - last_paint_rect.left, last_paint_rect.top, last_paint_rect.right, last_paint_rect.bottom, - client_rect.left, client_rect.top, client_rect.right, client_rect.bottom); - update_window(hProgressWnd); - ok(!erased, "Progress bar shouldn't have erased the background\n"); - - /* decrease to 0 - background erase will be required */ - erased = FALSE; - SetRectEmpty(&last_paint_rect); - SendMessage(hProgressWnd, PBM_SETPOS, 0, 0); - GetClientRect(hProgressWnd, &client_rect); - ok(EqualRect(&last_paint_rect, &client_rect), - "last_paint_rect was { %d, %d, %d, %d } instead of { %d, %d, %d, %d }\n", - last_paint_rect.left, last_paint_rect.top, last_paint_rect.right, last_paint_rect.bottom, - client_rect.left, client_rect.top, client_rect.right, client_rect.bottom); - update_window(hProgressWnd); - ok(erased, "Progress bar should have erased the background\n"); -} - - -START_TEST(progress) -{ - init(); - - test_redraw(); - - cleanup(); -} diff --git a/rostests/winetests/comctl32/propsheet.c b/rostests/winetests/comctl32/propsheet.c deleted file mode 100644 index 8627351b7fc..00000000000 --- a/rostests/winetests/comctl32/propsheet.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Unit test suite for property sheet control. - * - * Copyright 2006 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 - */ - -#include -#include - -#include "wine/test.h" - -static int CALLBACK sheet_callback(HWND hwnd, UINT msg, LPARAM lparam) -{ - switch(msg) - { - case PSCB_INITIALIZED: - { - char caption[256]; - GetWindowTextA(hwnd, caption, sizeof(caption)); - ok(!strcmp(caption,"test caption"), "caption: %s\n", caption); - return 0; - } - } - return 0; -} - -static INT_PTR CALLBACK page_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam, - LPARAM lparam) -{ - switch(msg) - { - case WM_INITDIALOG: - { - HWND sheet = GetParent(hwnd); - char caption[256]; - GetWindowTextA(sheet, caption, sizeof(caption)); - ok(!strcmp(caption,"test caption"), "caption: %s\n", caption); - return TRUE; - } - - case WM_NOTIFY: - { - NMHDR *nmhdr = (NMHDR *)lparam; - switch(nmhdr->code) - { - case PSN_APPLY: - return TRUE; - default: - return FALSE; - } - } - default: - return FALSE; - } -} - -static void test_title(void) -{ - HPROPSHEETPAGE hpsp[1]; - PROPSHEETPAGEA psp; - PROPSHEETHEADERA psh; - HWND hdlg; - - memset(&psp, 0, sizeof(psp)); - psp.dwSize = sizeof(psp); - psp.dwFlags = 0; - psp.hInstance = GetModuleHandleW(NULL); - U(psp).pszTemplate = "prop_page1"; - U2(psp).pszIcon = NULL; - psp.pfnDlgProc = page_dlg_proc; - psp.lParam = 0; - - hpsp[0] = CreatePropertySheetPageA(&psp); - - memset(&psh, 0, sizeof(psh)); - psh.dwSize = sizeof(psh); - psh.dwFlags = PSH_MODELESS | PSH_USECALLBACK; - psh.pszCaption = "test caption"; - psh.nPages = 1; - psh.hwndParent = GetDesktopWindow(); - U3(psh).phpage = hpsp; - psh.pfnCallback = sheet_callback; - - hdlg = (HWND)PropertySheetA(&psh); - DestroyWindow(hdlg); -} - -static void test_nopage(void) -{ - HPROPSHEETPAGE hpsp[1]; - PROPSHEETPAGEA psp; - PROPSHEETHEADERA psh; - HWND hdlg; - - memset(&psp, 0, sizeof(psp)); - psp.dwSize = sizeof(psp); - psp.dwFlags = 0; - psp.hInstance = GetModuleHandleW(NULL); - U(psp).pszTemplate = "prop_page1"; - U2(psp).pszIcon = NULL; - psp.pfnDlgProc = page_dlg_proc; - psp.lParam = 0; - - hpsp[0] = CreatePropertySheetPageA(&psp); - - memset(&psh, 0, sizeof(psh)); - psh.dwSize = sizeof(psh); - psh.dwFlags = PSH_MODELESS | PSH_USECALLBACK; - psh.pszCaption = "test caption"; - psh.nPages = 1; - psh.hwndParent = GetDesktopWindow(); - U3(psh).phpage = hpsp; - psh.pfnCallback = sheet_callback; - - hdlg = (HWND)PropertySheetA(&psh); - ShowWindow(hdlg,SW_NORMAL); - SendMessage(hdlg, PSM_REMOVEPAGE, 0, 0); - RedrawWindow(hdlg,NULL,NULL,RDW_UPDATENOW|RDW_ERASENOW); - DestroyWindow(hdlg); -} - -START_TEST(propsheet) -{ - test_title(); - test_nopage(); -} diff --git a/rostests/winetests/comctl32/rebar.c b/rostests/winetests/comctl32/rebar.c deleted file mode 100644 index e5bea381025..00000000000 --- a/rostests/winetests/comctl32/rebar.c +++ /dev/null @@ -1,885 +0,0 @@ -/* Unit tests for rebar. - * - * Copyright 2007 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 - */ - -/* make sure the structures work with a comctl32 v5.x */ -#define _WIN32_WINNT 0x500 -#define _WIN32_IE 0x500 - -#include -#include - -#include -#include -#include - -#include "wine/test.h" - -RECT height_change_notify_rect; -static HWND hMainWnd; -static HWND hRebar; - - -#define check_rect(name, val, exp) ok(val.top == exp.top && val.bottom == exp.bottom && \ - val.left == exp.left && val.right == exp.right, "invalid rect (" name ") (%d,%d) (%d,%d) - expected (%d,%d) (%d,%d)\n", \ - val.left, val.top, val.right, val.bottom, exp.left, exp.top, exp.right, exp.bottom); - -#define check_rect_no_top(name, val, exp) { \ - ok((val.bottom - val.top == exp.bottom - exp.top) && \ - val.left == exp.left && val.right == exp.right, "invalid rect (" name ") (%d,%d) (%d,%d) - expected (%d,%d) (%d,%d), ignoring top\n", \ - val.left, val.top, val.right, val.bottom, exp.left, exp.top, exp.right, exp.bottom); \ - } - -#define compare(val, exp, format) ok((val) == (exp), #val " value " format " expected " format "\n", (val), (exp)); - -#define expect_eq(expr, value, type, format) { type ret = expr; ok((value) == ret, #expr " expected " format " got " format "\n", (value), (ret)); } - -static INT CALLBACK is_font_installed_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lParam) -{ - return 0; -} - -static BOOL is_font_installed(const char *name) -{ - HDC hdc = GetDC(0); - BOOL ret = FALSE; - - if(!EnumFontFamiliesA(hdc, name, is_font_installed_proc, 0)) - ret = TRUE; - - ReleaseDC(0, hdc); - return ret; -} - -static void rebuild_rebar(HWND *hRebar) -{ - if (*hRebar) - DestroyWindow(*hRebar); - - *hRebar = CreateWindow(REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, - hMainWnd, (HMENU)17, GetModuleHandle(NULL), NULL); - SendMessageA(*hRebar, WM_SETFONT, (WPARAM)GetStockObject(SYSTEM_FONT), 0); -} - -static HWND build_toolbar(int nr, HWND hParent) -{ - TBBUTTON btns[8]; - HWND hToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | CCS_NORESIZE, 0, 0, 0, 0, - hParent, (HMENU)5, GetModuleHandle(NULL), NULL); - int iBitmapId = 0; - int i; - - ok(hToolbar != NULL, "Toolbar creation problem\n"); - ok(SendMessage(hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0) == 0, "TB_BUTTONSTRUCTSIZE failed\n"); - ok(SendMessage(hToolbar, TB_AUTOSIZE, 0, 0) == 0, "TB_AUTOSIZE failed\n"); - ok(SendMessage(hToolbar, WM_SETFONT, (WPARAM)GetStockObject(SYSTEM_FONT), 0)==1, "WM_SETFONT\n"); - - for (i=0; i<5+nr; i++) - { - btns[i].iBitmap = i; - btns[i].idCommand = i; - btns[i].fsStyle = BTNS_BUTTON; - btns[i].fsState = TBSTATE_ENABLED; - btns[i].iString = 0; - } - - switch (nr) - { - case 0: iBitmapId = IDB_HIST_SMALL_COLOR; break; - case 1: iBitmapId = IDB_VIEW_SMALL_COLOR; break; - case 2: iBitmapId = IDB_STD_SMALL_COLOR; break; - } - ok(SendMessage(hToolbar, TB_LOADIMAGES, iBitmapId, (LPARAM)HINST_COMMCTRL) == 0, "TB_LOADIMAGE failed\n"); - ok(SendMessage(hToolbar, TB_ADDBUTTONS, 5+nr, (LPARAM)btns), "TB_ADDBUTTONS failed\n"); - return hToolbar; -} - -static LRESULT CALLBACK MyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) - { - case WM_NOTIFY: - { - NMHDR *lpnm = (NMHDR *)lParam; - if (lpnm->code == RBN_HEIGHTCHANGE) - GetClientRect(hRebar, &height_change_notify_rect); - } - break; - } - return DefWindowProcA(hWnd, msg, wParam, lParam); -} - -#if 0 /* use this to generate more tests*/ - -static void dump_sizes(HWND hRebar) -{ - SIZE sz; - RECT r; - int count; - int i, h; - - GetClientRect(hRebar, &r); - count = SendMessageA(hRebar, RB_GETROWCOUNT, 0, 0); - printf(" { {%d, %d, %d, %d}, %d, %d, {", r.left, r.top, r.right, r.bottom, - SendMessageA(hRebar, RB_GETBARHEIGHT, 0, 0), count); - if (count == 0) - printf("0, "); - for (i = 0; i < count; i++) /* rows */ - printf("%d, ", SendMessageA(hRebar, RB_GETROWHEIGHT, i, 0)); - printf("}, "); - - count = SendMessageA(hRebar, RB_GETBANDCOUNT, 0, 0); - printf("%d, {", count); - if (count == 0) - printf("{{0, 0, 0, 0}, 0, 0},"); - for (i=0; ircClient); \ - count = SendMessage(hRebar, RB_GETROWCOUNT, 0, 0); \ - compare(count, res->nRows, "%d"); \ - for (i=0; inRows); i++) { \ - int height = SendMessageA(hRebar, RB_GETROWHEIGHT, 0, 0);\ - ok(height == res->cyRowHeights[i], "Height mismatch for row %d - %d vs %d\n", i, res->cyRowHeights[i], height); \ - } \ - count = SendMessage(hRebar, RB_GETBANDCOUNT, 0, 0); \ - compare(count, res->nBands, "%d"); \ - for (i=0; inBands); i++) { \ - ok(SendMessageA(hRebar, RB_GETRECT, i, (LPARAM)&rc) == 1, "RB_ITEMRECT\n"); \ - if (!(res->bands[i].fStyle & RBBS_HIDDEN)) \ - check_rect("band", rc, res->bands[i].rc); \ - rbi.cbSize = sizeof(REBARBANDINFO); \ - rbi.fMask = RBBIM_STYLE | RBBIM_SIZE; \ - ok(SendMessageA(hRebar, RB_GETBANDINFO, i, (LPARAM)&rbi) == 1, "RB_GETBANDINFO\n"); \ - compare(rbi.fStyle, res->bands[i].fStyle, "%x"); \ - compare(rbi.cx, res->bands[i].cx, "%d"); \ - } \ - rbsize_numtests++; \ - } - -#define check_sizes() check_sizes_todo(0) - -#endif - -static void add_band_w(HWND hRebar, LPCSTR lpszText, int cxMinChild, int cx, int cxIdeal) -{ - CHAR buffer[MAX_PATH]; - REBARBANDINFO rbi; - - if (lpszText != NULL) - strcpy(buffer, lpszText); - rbi.cbSize = sizeof(rbi); - rbi.fMask = RBBIM_SIZE | RBBIM_CHILDSIZE | RBBIM_CHILD | RBBIM_IDEALSIZE | RBBIM_TEXT; - rbi.cx = cx; - rbi.cxMinChild = cxMinChild; - rbi.cxIdeal = cxIdeal; - rbi.cyMinChild = 20; - rbi.hwndChild = build_toolbar(1, hRebar); - rbi.lpText = (lpszText ? buffer : NULL); - SendMessage(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); -} - -static void layout_test(void) -{ - HWND hRebar = NULL; - REBARBANDINFO rbi; - HIMAGELIST himl; - REBARINFO ri; - - rebuild_rebar(&hRebar); - check_sizes(); - rbi.cbSize = sizeof(rbi); - rbi.fMask = RBBIM_SIZE | RBBIM_CHILDSIZE | RBBIM_CHILD; - rbi.cx = 200; - rbi.cxMinChild = 100; - rbi.cyMinChild = 30; - rbi.hwndChild = NULL; - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - check_sizes(); - - rbi.fMask |= RBBIM_STYLE; - rbi.fStyle = RBBS_CHILDEDGE; - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - check_sizes(); - - rbi.fStyle = 0; - rbi.cx = 200; - rbi.cxMinChild = 30; - rbi.cyMinChild = 30; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - check_sizes(); - - rbi.fStyle = RBBS_CHILDEDGE; - rbi.cx = 68; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - check_sizes(); - - SetWindowLong(hRebar, GWL_STYLE, GetWindowLong(hRebar, GWL_STYLE) | RBS_BANDBORDERS); - check_sizes(); /* a style change won't start a relayout */ - rbi.fMask = RBBIM_SIZE; - rbi.cx = 66; - SendMessageA(hRebar, RB_SETBANDINFO, 3, (LPARAM)&rbi); - check_sizes(); /* here it will be relayouted */ - - /* this will force a new row */ - rbi.fMask = RBBIM_SIZE | RBBIM_CHILDSIZE | RBBIM_CHILD; - rbi.cx = 200; - rbi.cxMinChild = 400; - rbi.cyMinChild = 30; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, 1, (LPARAM)&rbi); - check_sizes(); - - rbi.fMask = RBBIM_STYLE; - rbi.fStyle = RBBS_HIDDEN; - SendMessageA(hRebar, RB_SETBANDINFO, 2, (LPARAM)&rbi); - check_sizes(); - - SendMessageA(hRebar, RB_DELETEBAND, 2, 0); - check_sizes(); - SendMessageA(hRebar, RB_DELETEBAND, 0, 0); - check_sizes(); - SendMessageA(hRebar, RB_DELETEBAND, 1, 0); - check_sizes(); - - rebuild_rebar(&hRebar); - add_band_w(hRebar, "ABC", 70, 40, 100); - add_band_w(hRebar, NULL, 40, 70, 100); - add_band_w(hRebar, NULL, 170, 240, 100); - add_band_w(hRebar, "MMMMMMM", 60, 60, 100); - add_band_w(hRebar, NULL, 200, 200, 100); - check_sizes(); - SendMessageA(hRebar, RB_MAXIMIZEBAND, 1, TRUE); - check_sizes(); - SendMessageA(hRebar, RB_MAXIMIZEBAND, 1, TRUE); - check_sizes(); - SendMessageA(hRebar, RB_MAXIMIZEBAND, 2, FALSE); - check_sizes(); - SendMessageA(hRebar, RB_MINIMIZEBAND, 2, 0); - check_sizes(); - SendMessageA(hRebar, RB_MINIMIZEBAND, 0, 0); - check_sizes(); - - /* an image will increase the band height */ - himl = ImageList_LoadImage(LoadLibrary("comctl32"), MAKEINTRESOURCE(121), 24, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR); - ri.cbSize = sizeof(ri); - ri.fMask = RBIM_IMAGELIST; - ri.himl = himl; - ok(SendMessage(hRebar, RB_SETBARINFO, 0, (LPARAM)&ri), "RB_SETBARINFO failed\n"); - rbi.fMask = RBBIM_IMAGE; - rbi.iImage = 1; - SendMessage(hRebar, RB_SETBANDINFO, 1, (LPARAM)&rbi); - check_sizes(); - - /* after removing it everything is back to normal*/ - rbi.iImage = -1; - SendMessage(hRebar, RB_SETBANDINFO, 1, (LPARAM)&rbi); - check_sizes(); - - /* Only -1 means that the image is not present. Other invalid values increase the height */ - rbi.iImage = -2; - SendMessage(hRebar, RB_SETBANDINFO, 1, (LPARAM)&rbi); - check_sizes(); - - /* VARHEIGHT resizing test on a horizontal rebar */ - rebuild_rebar(&hRebar); - SetWindowLong(hRebar, GWL_STYLE, GetWindowLong(hRebar, GWL_STYLE) | RBS_AUTOSIZE); - check_sizes(); - rbi.fMask = RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE | RBBIM_STYLE; - rbi.fStyle = RBBS_VARIABLEHEIGHT; - rbi.cxMinChild = 50; - rbi.cyMinChild = 10; - rbi.cyIntegral = 11; - rbi.cyChild = 70; - rbi.cyMaxChild = 200; - rbi.cx = 90; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - - rbi.cyChild = 50; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - - rbi.cyMinChild = 40; - rbi.cyChild = 50; - rbi.cyIntegral = 5; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - check_sizes(); - - /* VARHEIGHT resizing on a vertical rebar */ - rebuild_rebar(&hRebar); - SetWindowLong(hRebar, GWL_STYLE, GetWindowLong(hRebar, GWL_STYLE) | CCS_VERT | RBS_AUTOSIZE); - check_sizes(); - rbi.fMask = RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE | RBBIM_STYLE; - rbi.fStyle = RBBS_VARIABLEHEIGHT; - rbi.cxMinChild = 50; - rbi.cyMinChild = 10; - rbi.cyIntegral = 11; - rbi.cyChild = 70; - rbi.cyMaxChild = 90; - rbi.cx = 90; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - check_sizes(); - - rbi.cyChild = 50; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - check_sizes(); - - rbi.cyMinChild = 40; - rbi.cyChild = 50; - rbi.cyIntegral = 5; - rbi.hwndChild = build_toolbar(0, hRebar); - SendMessageA(hRebar, RB_INSERTBAND, -1, (LPARAM)&rbi); - check_sizes(); - - DestroyWindow(hRebar); -} - -#if 0 /* use this to generate more tests */ - -static void dump_client(HWND hRebar) -{ - RECT r; - BOOL notify; - GetWindowRect(hRebar, &r); - MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2); - if (height_change_notify_rect.top != -1) - { - RECT rcClient; - GetClientRect(hRebar, &rcClient); - assert(EqualRect(&rcClient, &height_change_notify_rect)); - notify = TRUE; - } - else - notify = FALSE; - printf(" {{%d, %d, %d, %d}, %d, %s},\n", r.left, r.top, r.right, r.bottom, SendMessage(hRebar, RB_GETROWCOUNT, 0, 0), - notify ? "TRUE" : "FALSE"); - SetRect(&height_change_notify_rect, -1, -1, -1, -1); -} - -#define comment(fmt, arg1) printf("/* " fmt " */\n", arg1); -#define check_client() dump_client(hRebar) - -#else - -typedef struct { - RECT rc; - INT iNumRows; - BOOL heightNotify; -} rbresize_test_result_t; - -rbresize_test_result_t resize_results[] = { -/* style 00000001 */ - {{0, 2, 672, 2}, 0, FALSE}, - {{0, 2, 672, 22}, 1, TRUE}, - {{0, 2, 672, 22}, 1, FALSE}, - {{0, 2, 672, 22}, 1, FALSE}, - {{0, 2, 672, 22}, 1, FALSE}, - {{0, 2, 672, 22}, 0, FALSE}, -/* style 00000041 */ - {{0, 0, 672, 0}, 0, FALSE}, - {{0, 0, 672, 20}, 1, TRUE}, - {{0, 0, 672, 20}, 1, FALSE}, - {{0, 0, 672, 20}, 1, FALSE}, - {{0, 0, 672, 20}, 1, FALSE}, - {{0, 0, 672, 20}, 0, FALSE}, -/* style 00000003 */ - {{0, 226, 672, 226}, 0, FALSE}, - {{0, 206, 672, 226}, 1, TRUE}, - {{0, 206, 672, 226}, 1, FALSE}, - {{0, 206, 672, 226}, 1, FALSE}, - {{0, 206, 672, 226}, 1, FALSE}, - {{0, 206, 672, 226}, 0, FALSE}, -/* style 00000043 */ - {{0, 226, 672, 226}, 0, FALSE}, - {{0, 206, 672, 226}, 1, TRUE}, - {{0, 206, 672, 226}, 1, FALSE}, - {{0, 206, 672, 226}, 1, FALSE}, - {{0, 206, 672, 226}, 1, FALSE}, - {{0, 206, 672, 226}, 0, FALSE}, -/* style 00000080 */ - {{2, 0, 2, 226}, 0, FALSE}, - {{2, 0, 22, 226}, 1, TRUE}, - {{2, 0, 22, 226}, 1, FALSE}, - {{2, 0, 22, 226}, 1, FALSE}, - {{2, 0, 22, 226}, 1, FALSE}, - {{2, 0, 22, 226}, 0, FALSE}, -/* style 00000083 */ - {{672, 0, 672, 226}, 0, FALSE}, - {{652, 0, 672, 226}, 1, TRUE}, - {{652, 0, 672, 226}, 1, FALSE}, - {{652, 0, 672, 226}, 1, FALSE}, - {{652, 0, 672, 226}, 1, FALSE}, - {{652, 0, 672, 226}, 0, FALSE}, -/* style 00000008 */ - {{10, 11, 510, 11}, 0, FALSE}, - {{10, 15, 510, 35}, 1, TRUE}, - {{10, 17, 510, 37}, 1, FALSE}, - {{10, 14, 110, 54}, 2, TRUE}, - {{0, 4, 0, 44}, 2, FALSE}, - {{0, 6, 0, 46}, 2, FALSE}, - {{0, 8, 0, 48}, 2, FALSE}, - {{0, 12, 0, 32}, 1, TRUE}, - {{0, 4, 100, 24}, 0, FALSE}, -/* style 00000048 */ - {{10, 5, 510, 5}, 0, FALSE}, - {{10, 5, 510, 25}, 1, TRUE}, - {{10, 5, 510, 25}, 1, FALSE}, - {{10, 10, 110, 50}, 2, TRUE}, - {{0, 0, 0, 40}, 2, FALSE}, - {{0, 0, 0, 40}, 2, FALSE}, - {{0, 0, 0, 40}, 2, FALSE}, - {{0, 0, 0, 20}, 1, TRUE}, - {{0, 0, 100, 20}, 0, FALSE}, -/* style 00000004 */ - {{10, 5, 510, 20}, 0, FALSE}, - {{10, 5, 510, 20}, 1, TRUE}, - {{10, 10, 110, 110}, 2, TRUE}, - {{0, 0, 0, 0}, 2, FALSE}, - {{0, 0, 0, 0}, 2, FALSE}, - {{0, 0, 0, 0}, 2, FALSE}, - {{0, 0, 0, 0}, 1, TRUE}, - {{0, 0, 100, 100}, 0, FALSE}, -/* style 00000002 */ - {{0, 5, 672, 5}, 0, FALSE}, - {{0, 5, 672, 25}, 1, TRUE}, - {{0, 10, 672, 30}, 1, FALSE}, - {{0, 0, 672, 20}, 1, FALSE}, - {{0, 0, 672, 20}, 1, FALSE}, - {{0, 0, 672, 20}, 0, FALSE}, -/* style 00000082 */ - {{10, 0, 10, 226}, 0, FALSE}, - {{10, 0, 30, 226}, 1, TRUE}, - {{10, 0, 30, 226}, 1, FALSE}, - {{0, 0, 20, 226}, 1, FALSE}, - {{0, 0, 20, 226}, 1, FALSE}, - {{0, 0, 20, 226}, 0, FALSE}, -/* style 00800001 */ - {{-2, 0, 674, 4}, 0, FALSE}, - {{-2, 0, 674, 24}, 1, TRUE}, - {{-2, 0, 674, 24}, 1, FALSE}, - {{-2, 0, 674, 24}, 1, FALSE}, - {{-2, 0, 674, 24}, 1, FALSE}, - {{-2, 0, 674, 24}, 0, FALSE}, -/* style 00800048 */ - {{10, 5, 510, 9}, 0, FALSE}, - {{10, 5, 510, 29}, 1, TRUE}, - {{10, 5, 510, 29}, 1, FALSE}, - {{10, 10, 110, 54}, 2, TRUE}, - {{0, 0, 0, 44}, 2, FALSE}, - {{0, 0, 0, 44}, 2, FALSE}, - {{0, 0, 0, 44}, 2, FALSE}, - {{0, 0, 0, 24}, 1, TRUE}, - {{0, 0, 100, 24}, 0, FALSE}, -/* style 00800004 */ - {{10, 5, 510, 20}, 0, FALSE}, - {{10, 5, 510, 20}, 1, TRUE}, - {{10, 10, 110, 110}, 2, TRUE}, - {{0, 0, 0, 0}, 2, FALSE}, - {{0, 0, 0, 0}, 2, FALSE}, - {{0, 0, 0, 0}, 2, FALSE}, - {{0, 0, 0, 0}, 1, TRUE}, - {{0, 0, 100, 100}, 0, FALSE}, -/* style 00800002 */ - {{-2, 5, 674, 9}, 0, FALSE}, - {{-2, 5, 674, 29}, 1, TRUE}, - {{-2, 10, 674, 34}, 1, FALSE}, - {{-2, 0, 674, 24}, 1, FALSE}, - {{-2, 0, 674, 24}, 1, FALSE}, - {{-2, 0, 674, 24}, 0, FALSE}, -}; - -static int resize_numtests = 0; - -#define comment(fmt, arg1) -#define check_client() { \ - RECT r; \ - rbresize_test_result_t *res = &resize_results[resize_numtests++]; \ - assert(resize_numtests <= sizeof(resize_results)/sizeof(resize_results[0])); \ - GetWindowRect(hRebar, &r); \ - MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2); \ - if ((dwStyles[i] & (CCS_NOPARENTALIGN|CCS_NODIVIDER)) == CCS_NOPARENTALIGN) {\ - check_rect_no_top("client", r, res->rc); /* the top coordinate changes after every layout and is very implementation-dependent */ \ - } else { \ - check_rect("client", r, res->rc); \ - } \ - expect_eq((int)SendMessage(hRebar, RB_GETROWCOUNT, 0, 0), res->iNumRows, int, "%d"); \ - if (res->heightNotify) { \ - RECT rcClient; \ - GetClientRect(hRebar, &rcClient); \ - check_rect("notify", height_change_notify_rect, rcClient); \ - } else ok(height_change_notify_rect.top == -1, "Unexpected RBN_HEIGHTCHANGE received\n"); \ - SetRect(&height_change_notify_rect, -1, -1, -1, -1); \ - } - -#endif - -static void resize_test(void) -{ - DWORD dwStyles[] = {CCS_TOP, CCS_TOP | CCS_NODIVIDER, CCS_BOTTOM, CCS_BOTTOM | CCS_NODIVIDER, CCS_VERT, CCS_RIGHT, - CCS_NOPARENTALIGN, CCS_NOPARENTALIGN | CCS_NODIVIDER, CCS_NORESIZE, CCS_NOMOVEY, CCS_NOMOVEY | CCS_VERT, - CCS_TOP | WS_BORDER, CCS_NOPARENTALIGN | CCS_NODIVIDER | WS_BORDER, CCS_NORESIZE | WS_BORDER, - CCS_NOMOVEY | WS_BORDER}; - - const int styles_count = sizeof(dwStyles) / sizeof(dwStyles[0]); - int i; - - for (i = 0; i < styles_count; i++) - { - comment("style %08x", dwStyles[i]); - SetRect(&height_change_notify_rect, -1, -1, -1, -1); - hRebar = CreateWindow(REBARCLASSNAME, "A", dwStyles[i] | WS_CHILD | WS_VISIBLE, 10, 5, 500, 15, hMainWnd, NULL, GetModuleHandle(NULL), 0); - check_client(); - add_band_w(hRebar, NULL, 70, 100, 0); - if (dwStyles[i] & CCS_NOPARENTALIGN) /* the window drifts downward for CCS_NOPARENTALIGN without CCS_NODIVIDER */ - check_client(); - add_band_w(hRebar, NULL, 70, 100, 0); - check_client(); - MoveWindow(hRebar, 10, 10, 100, 100, TRUE); - check_client(); - MoveWindow(hRebar, 0, 0, 0, 0, TRUE); - check_client(); - /* try to fool the rebar by sending invalid width/height - won't work */ - if (dwStyles[i] & (CCS_NORESIZE | CCS_NOPARENTALIGN)) - { - WINDOWPOS pos; - pos.hwnd = hRebar; - pos.hwndInsertAfter = NULL; - pos.cx = 500; - pos.cy = 500; - pos.x = 10; - pos.y = 10; - pos.flags = 0; - SendMessage(hRebar, WM_WINDOWPOSCHANGING, 0, (LPARAM)&pos); - SendMessage(hRebar, WM_WINDOWPOSCHANGED, 0, (LPARAM)&pos); - check_client(); - SendMessage(hRebar, WM_SIZE, SIZE_RESTORED, MAKELONG(500, 500)); - check_client(); - } - SendMessage(hRebar, RB_DELETEBAND, 0, 0); - check_client(); - SendMessage(hRebar, RB_DELETEBAND, 0, 0); - MoveWindow(hRebar, 0, 0, 100, 100, TRUE); - check_client(); - DestroyWindow(hRebar); - } -} - -static void expect_band_content(UINT uBand, INT fStyle, COLORREF clrFore, - COLORREF clrBack, LPCSTR lpText, int iImage, HWND hwndChild, - INT cxMinChild, INT cyMinChild, INT cx, HBITMAP hbmBack, INT wID, - INT cyChild, INT cyMaxChild, INT cyIntegral, INT cxIdeal, LPARAM lParam, - INT cxHeader) -{ - CHAR buf[MAX_PATH] = "abc"; - REBARBANDINFO rb; - - memset(&rb, 0xdd, sizeof(rb)); - rb.cbSize = sizeof(rb); - rb.fMask = RBBIM_BACKGROUND | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_COLORS - | RBBIM_HEADERSIZE | RBBIM_ID | RBBIM_IDEALSIZE | RBBIM_IMAGE | RBBIM_LPARAM - | RBBIM_SIZE | RBBIM_STYLE | RBBIM_TEXT; - rb.lpText = buf; - rb.cch = MAX_PATH; - ok(SendMessageA(hRebar, RB_GETBANDINFOA, uBand, (LPARAM)&rb), "RB_GETBANDINFO failed\n"); - expect_eq(rb.fStyle, fStyle, int, "%x"); - todo_wine expect_eq(rb.clrFore, clrFore, COLORREF, "%x"); - todo_wine expect_eq(rb.clrBack, clrBack, unsigned, "%x"); - expect_eq(strcmp(rb.lpText, lpText), 0, int, "%d"); - expect_eq(rb.iImage, iImage, int, "%x"); - expect_eq(rb.hwndChild, hwndChild, HWND, "%p"); - expect_eq(rb.cxMinChild, cxMinChild, int, "%d"); - expect_eq(rb.cyMinChild, cyMinChild, int, "%d"); - expect_eq(rb.cx, cx, int, "%d"); - expect_eq(rb.hbmBack, hbmBack, HBITMAP, "%p"); - expect_eq(rb.wID, wID, int, "%d"); - /* the values of cyChild, cyMaxChild and cyIntegral can't be read unless the band is RBBS_VARIABLEHEIGHT */ - expect_eq(rb.cyChild, cyChild, int, "%x"); - expect_eq(rb.cyMaxChild, cyMaxChild, int, "%x"); - expect_eq(rb.cyIntegral, cyIntegral, int, "%x"); - expect_eq(rb.cxIdeal, cxIdeal, int, "%d"); - expect_eq(rb.lParam, lParam, LPARAM, "%ld"); - expect_eq(rb.cxHeader, cxHeader, int, "%d"); -} - -static void bandinfo_test(void) -{ - REBARBANDINFOA rb; - CHAR szABC[] = "ABC"; - CHAR szABCD[] = "ABCD"; - - rebuild_rebar(&hRebar); - rb.cbSize = sizeof(REBARBANDINFO); - rb.fMask = 0; - ok(SendMessageA(hRebar, RB_INSERTBANDA, 0, (LPARAM)&rb), "RB_INSERTBAND failed\n"); - expect_band_content(0, 0, 0, GetSysColor(COLOR_3DFACE), "", -1, NULL, 0, 0, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 0); - - rb.fMask = RBBIM_CHILDSIZE; - rb.cxMinChild = 15; - rb.cyMinChild = 20; - rb.cyChild = 30; - rb.cyMaxChild = 20; - rb.cyIntegral = 10; - ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_INSERTBAND failed\n"); - expect_band_content(0, 0, 0, GetSysColor(COLOR_3DFACE), "", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 0); - - rb.fMask = RBBIM_TEXT; - rb.lpText = szABC; - ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_INSERTBAND failed\n"); - expect_band_content(0, 0, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 35); - - rb.cbSize = sizeof(REBARBANDINFO); - rb.fMask = 0; - ok(SendMessageA(hRebar, RB_INSERTBANDA, 1, (LPARAM)&rb), "RB_INSERTBAND failed\n"); - expect_band_content(1, 0, 0, GetSysColor(COLOR_3DFACE), "", -1, NULL, 0, 0, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 9); - expect_band_content(0, 0, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 40); - - rb.fMask = RBBIM_HEADERSIZE; - rb.cxHeader = 50; - ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_INSERTBAND failed\n"); - expect_band_content(0, 0x40000000, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 50); - - rb.cxHeader = 5; - ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_INSERTBAND failed\n"); - expect_band_content(0, 0x40000000, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 5); - - rb.fMask = RBBIM_TEXT; - rb.lpText = szABCD; - ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_INSERTBAND failed\n"); - expect_band_content(0, 0x40000000, 0, GetSysColor(COLOR_3DFACE), "ABCD", -1, NULL, 15, 20, 0, NULL, 0, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0, 0, 5); - rb.fMask = RBBIM_STYLE | RBBIM_TEXT; - rb.fStyle = RBBS_VARIABLEHEIGHT; - rb.lpText = szABC; - ok(SendMessageA(hRebar, RB_SETBANDINFOA, 0, (LPARAM)&rb), "RB_INSERTBAND failed\n"); - expect_band_content(0, RBBS_VARIABLEHEIGHT, 0, GetSysColor(COLOR_3DFACE), "ABC", -1, NULL, 15, 20, 0, NULL, 0, 20, 0x7fffffff, 0, 0, 0, 40); - - DestroyWindow(hRebar); -} - -START_TEST(rebar) -{ - HMODULE hComctl32; - BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); - INITCOMMONCONTROLSEX iccex; - WNDCLASSA wc; - MSG msg; - RECT rc; - - /* LoadLibrary is needed. This file has no references to functions in comctl32 */ - hComctl32 = LoadLibraryA("comctl32.dll"); - pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); - if (!pInitCommonControlsEx) - { - skip("InitCommonControlsEx() is missing. Skipping the tests\n"); - return; - } - iccex.dwSize = sizeof(iccex); - iccex.dwICC = ICC_COOL_CLASSES; - pInitCommonControlsEx(&iccex); - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_IBEAM); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = "MyTestWnd"; - wc.lpfnWndProc = MyWndProc; - RegisterClassA(&wc); - hMainWnd = CreateWindowExA(0, "MyTestWnd", "Blah", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 672+2*GetSystemMetrics(SM_CXSIZEFRAME), - 226+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYSIZEFRAME), - NULL, NULL, GetModuleHandleA(NULL), 0); - GetClientRect(hMainWnd, &rc); - ShowWindow(hMainWnd, SW_SHOW); - - bandinfo_test(); - - if(is_font_installed("System") && is_font_installed("Tahoma")) - { - layout_test(); - resize_test(); - } else - skip("Missing System or Tahoma font\n"); - - PostQuitMessage(0); - while(GetMessageA(&msg,0,0,0)) { - TranslateMessage(&msg); - DispatchMessageA(&msg); - } - DestroyWindow(hMainWnd); - - FreeLibrary(hComctl32); -} diff --git a/rostests/winetests/comctl32/resources.h b/rostests/winetests/comctl32/resources.h deleted file mode 100644 index c99633d342d..00000000000 --- a/rostests/winetests/comctl32/resources.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Resource IDs - * - * Copyright 2006 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_COMCTL32_TEST_RESOURCES_H -#define __WINE_COMCTL32_TEST_RESOURCES_H - -#define IDB_BITMAP_128x15 10 -#define IDB_BITMAP_80x15 11 - -#define IDS_TBADD1 16 -#define IDS_TBADD2 17 -#define IDS_TBADD3 18 -#define IDS_TBADD4 19 -#define IDS_TBADD5 20 -#define IDS_TBADD7 22 - -#endif /* __WINE_COMCTL32_TEST_RESOURCES_H */ diff --git a/rostests/winetests/comctl32/rsrc.rc b/rostests/winetests/comctl32/rsrc.rc deleted file mode 100644 index bf195b661d1..00000000000 --- a/rostests/winetests/comctl32/rsrc.rc +++ /dev/null @@ -1,47 +0,0 @@ -/* Resources for the common control unit test suite. - * - * Copyright 2006 Huw Davies - * Copyright 2006 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 - */ - -#include "windef.h" -#include "winuser.h" -#include "resources.h" - -PROP_PAGE1 DIALOG LOADONCALL MOVEABLE DISCARDABLE 5, 43, 227, 215 -STYLE WS_POPUP | WS_CAPTION | WS_CLIPSIBLINGS | WS_VISIBLE -CAPTION "Page1" -FONT 8, "MS Shell Dlg" -{ - LTEXT "Test", -1, 10, 6, 100, 8 -} - -STRINGTABLE -{ - IDS_TBADD1 "abc" - IDS_TBADD2 "|p|q|r" - IDS_TBADD3 "*p*q*" - IDS_TBADD4 "#p#q##" - IDS_TBADD5 "|p||q|r|" - IDS_TBADD7 "abracadabra" -} - -/* @makedep: bmp128x15.bmp */ -IDB_BITMAP_128x15 BITMAP bmp128x15.bmp - -/* @makedep: bmp80x15.bmp */ -IDB_BITMAP_80x15 BITMAP bmp80x15.bmp diff --git a/rostests/winetests/comctl32/status.c b/rostests/winetests/comctl32/status.c deleted file mode 100644 index 4e643c1f4fa..00000000000 --- a/rostests/winetests/comctl32/status.c +++ /dev/null @@ -1,196 +0,0 @@ -/* Unit test suite for status control. - * - * Copyright 2007 Google (Lei Zhang) - * Copyright 2007 Alex Arazi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" - -#define expect(expected,got) ok (expected == got,"Expected %d, got %d\n",expected,got); - -static HINSTANCE hinst; - -static HWND create_status_control(DWORD style, DWORD exstyle) -{ - HWND hWndStatus; - - /* make the control */ - hWndStatus = CreateWindowEx(exstyle, STATUSCLASSNAME, NULL, style, - /* placement */ - 0, 0, 300, 20, - /* parent, etc */ - NULL, NULL, hinst, NULL); - assert (hWndStatus); - return hWndStatus; -} - -static void test_status_control(void) -{ - HWND hWndStatus; - int r; - int nParts[] = {50, 150, -1}; - int checkParts[] = {0, 0, 0}; - int borders[] = {0, 0, 0}; - RECT rc; - CHAR charArray[20]; - HICON hIcon; - - hWndStatus = create_status_control(WS_VISIBLE, 0); - - /* Divide into parts and set text */ - r = SendMessage(hWndStatus, SB_SETPARTS, 3, (long)nParts); - expect(TRUE,r); - r = SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)"First"); - expect(TRUE,r); - r = SendMessage(hWndStatus, SB_SETTEXT, 1, (LPARAM)"Second"); - expect(TRUE,r); - r = SendMessage(hWndStatus, SB_SETTEXT, 2, (LPARAM)"Third"); - expect(TRUE,r); - - /* Get RECT Information */ - r = SendMessage(hWndStatus, SB_GETRECT, 0, (LPARAM)&rc); - expect(TRUE,r); - expect(2,rc.top); - /* The rc.bottom test is system dependent - expect(22,rc.bottom); */ - expect(0,rc.left); - expect(50,rc.right); - r = SendMessage(hWndStatus, SB_GETRECT, -1, (LPARAM)&rc); - expect(FALSE,r); - r = SendMessage(hWndStatus, SB_GETRECT, 3, (LPARAM)&rc); - expect(FALSE,r); - /* Get text length and text */ - r = SendMessage(hWndStatus, SB_GETTEXTLENGTH, 2, 0); - expect(5,LOWORD(r)); - expect(0,HIWORD(r)); - r = SendMessage(hWndStatus, SB_GETTEXT, 2, (LPARAM) charArray); - ok(strcmp(charArray,"Third") == 0, "Expected Third, got %s\n", charArray); - expect(5,LOWORD(r)); - expect(0,HIWORD(r)); - - /* Get parts and borders */ - r = SendMessage(hWndStatus, SB_GETPARTS, 3, (long)checkParts); - ok(r == 3, "Expected 3, got %d\n", r); - expect(50,checkParts[0]); - expect(150,checkParts[1]); - expect(-1,checkParts[2]); - r = SendMessage(hWndStatus, SB_GETBORDERS, 0, (long)borders); - ok(r == TRUE, "Expected TRUE, got %d\n", r); - expect(0,borders[0]); - expect(2,borders[1]); - expect(2,borders[2]); - - /* Test resetting text with different characters */ - r = SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)"First@Again"); - expect(TRUE,r); - r = SendMessage(hWndStatus, SB_SETTEXT, 1, (LPARAM)"InvalidChars\\7\7"); - expect(TRUE,r); - r = SendMessage(hWndStatus, SB_SETTEXT, 2, (LPARAM)"InvalidChars\\n\n"); - expect(TRUE,r); - - /* Get text again */ - r = SendMessage(hWndStatus, SB_GETTEXT, 0, (LPARAM) charArray); - ok(strcmp(charArray,"First@Again") == 0, "Expected First@Again, got %s\n", charArray); - expect(11,LOWORD(r)); - expect(0,HIWORD(r)); - r = SendMessage(hWndStatus, SB_GETTEXT, 1, (LPARAM) charArray); - todo_wine - { - ok(strcmp(charArray,"InvalidChars\\7 ") == 0, "Expected InvalidChars\\7 , got %s\n", charArray); - } - expect(15,LOWORD(r)); - expect(0,HIWORD(r)); - r = SendMessage(hWndStatus, SB_GETTEXT, 2, (LPARAM) charArray); - todo_wine - { - ok(strcmp(charArray,"InvalidChars\\n ") == 0, "Expected InvalidChars\\n , got %s\n", charArray); - } - expect(15,LOWORD(r)); - expect(0,HIWORD(r)); - - /* Set background color */ - r = SendMessage(hWndStatus, SB_SETBKCOLOR , 0, RGB(255,0,0)); - expect(CLR_DEFAULT,r); - r = SendMessage(hWndStatus, SB_SETBKCOLOR , 0, CLR_DEFAULT); - expect(RGB(255,0,0),r); - - /* Add an icon to the status bar */ - hIcon = LoadIcon(NULL, IDI_QUESTION); - r = SendMessage(hWndStatus, SB_SETICON, 1, (LPARAM) NULL); - ok(r != 0, "Expected non-zero, got %d\n", r); - r = SendMessage(hWndStatus, SB_SETICON, 1, (LPARAM) hIcon); - ok(r != 0, "Expected non-zero, got %d\n", r); - r = SendMessage(hWndStatus, SB_SETICON, 1, (LPARAM) NULL); - ok(r != 0, "Expected non-zero, got %d\n", r); - - /* Set the Unicode format */ - r = SendMessage(hWndStatus, SB_SETUNICODEFORMAT, FALSE, 0); - r = SendMessage(hWndStatus, SB_GETUNICODEFORMAT, 0, 0); - expect(FALSE,r); - r = SendMessage(hWndStatus, SB_SETUNICODEFORMAT, TRUE, 0); - expect(FALSE,r); - r = SendMessage(hWndStatus, SB_GETUNICODEFORMAT, 0, 0); - expect(TRUE,r); - - /* Reset number of parts */ - r = SendMessage(hWndStatus, SB_SETPARTS, 2, (long)nParts); - expect(TRUE,r); - - /* Set the minimum height and get rectangle information again */ - SendMessage(hWndStatus, SB_SETMINHEIGHT, 50, (LPARAM) 0); - r = SendMessage(hWndStatus, WM_SIZE, 0, (LPARAM) 0); - expect(0,r); - r = SendMessage(hWndStatus, SB_GETRECT, 0, (LPARAM)&rc); - expect(TRUE,r); - expect(2,rc.top); - /* The rc.bottom test is system dependent - expect(22,rc.bottom); */ - expect(0,rc.left); - expect(50,rc.right); - r = SendMessage(hWndStatus, SB_GETRECT, -1, (LPARAM)&rc); - expect(FALSE,r); - r = SendMessage(hWndStatus, SB_GETRECT, 3, (LPARAM)&rc); - expect(FALSE,r); - - /* Set the ToolTip text */ - todo_wine - { - SendMessage(hWndStatus, SB_SETTIPTEXT, 0,(LPARAM) "Tooltip Text"); - SendMessage(hWndStatus, SB_GETTIPTEXT, MAKEWPARAM (0, 20),(LPARAM) charArray); - ok(strcmp(charArray,"Tooltip Text") == 0, "Expected Tooltip Text, got %s\n", charArray); - } - - /* Make simple */ - SendMessage(hWndStatus, SB_SIMPLE, TRUE, 0); - r = SendMessage(hWndStatus, SB_ISSIMPLE, 0, 0); - expect(TRUE,r); - - DestroyWindow(hWndStatus); -} - -START_TEST(status) -{ - hinst = GetModuleHandleA(NULL); - - InitCommonControls(); - - test_status_control(); -} diff --git a/rostests/winetests/comctl32/subclass.c b/rostests/winetests/comctl32/subclass.c deleted file mode 100644 index 9c879e30395..00000000000 --- a/rostests/winetests/comctl32/subclass.c +++ /dev/null @@ -1,301 +0,0 @@ -/* Unit tests for subclassed windows. - * - * 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 - */ - -#include -#include - -#define _WIN32_WINNT 0x0501 /* For SetWindowSubclass/etc */ - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "commctrl.h" - -#include "wine/test.h" - -static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR); -static BOOL (WINAPI *pRemoveWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR); -static LRESULT (WINAPI *pDefSubclassProc)(HWND, UINT, WPARAM, LPARAM); - -#define SEND_NEST 0x01 -#define DELETE_SELF 0x02 -#define DELETE_PREV 0x04 - -struct message { - int procnum; /* WndProc id message is expected from */ - WPARAM wParam; /* expected value of wParam */ -}; - -static int sequence_cnt, sequence_size; -static struct message* sequence; - -static const struct message Sub_BasicTest[] = { - { 2, 1 }, - { 1, 1 }, - { 2, 2 }, - { 1, 2 }, - { 0 } -}; - -static const struct message Sub_DeletedTest[] = { - { 2, 1 }, - { 1, 1 }, - { 0 } -}; - -static const struct message Sub_AfterDeletedTest[] = { - { 1, 1 }, - { 0 } -}; - -static const struct message Sub_OldAfterNewTest[] = { - { 3, 1 }, - { 2, 1 }, - { 1, 1 }, - { 3, 2 }, - { 2, 2 }, - { 1, 2 }, - { 0 } -}; - -static const struct message Sub_MixTest[] = { - { 3, 1 }, - { 4, 1 }, - { 2, 1 }, - { 1, 1 }, - { 0 } -}; - -static const struct message Sub_MixAndNestTest[] = { - { 3, 1 }, - { 4, 1 }, - { 3, 2 }, - { 4, 2 }, - { 2, 2 }, - { 1, 2 }, - { 2, 1 }, - { 1, 1 }, - { 0 } -}; - -static const struct message Sub_MixNestDelTest[] = { - { 3, 1 }, - { 4, 1 }, - { 3, 2 }, - { 2, 2 }, - { 1, 2 }, - { 2, 1 }, - { 1, 1 }, - { 0 } -}; - -static const struct message Sub_MixDelPrevTest[] = { - { 3, 1 }, - { 5, 1 }, - { 2, 1 }, - { 1, 1 }, - { 0 } -}; - -static void add_message(const struct message *msg) -{ - if (!sequence) - { - sequence_size = 10; - sequence = HeapAlloc( GetProcessHeap(), 0, sequence_size * sizeof (struct message) ); - } - if (sequence_cnt == sequence_size) - { - sequence_size *= 2; - sequence = HeapReAlloc( GetProcessHeap(), 0, sequence, sequence_size * sizeof (struct message) ); - } - assert(sequence); - - sequence[sequence_cnt].wParam = msg->wParam; - sequence[sequence_cnt].procnum = msg->procnum; - - sequence_cnt++; -} - -static void flush_sequence(void) -{ - HeapFree(GetProcessHeap(), 0, sequence); - sequence = 0; - sequence_cnt = sequence_size = 0; -} - -static void ok_sequence(const struct message *expected, const char *context) -{ - static const struct message end_of_sequence = { 0, 0 }; - const struct message *actual; - - add_message(&end_of_sequence); - - actual = sequence; - - while(expected->procnum && actual->procnum) - { - ok(expected->procnum == actual->procnum, - "%s: the procnum %d was expected, but got procnum %d instead\n", - context, expected->procnum, actual->procnum); - ok(expected->wParam == actual->wParam, - "%s: in procnum %d expecting wParam 0x%lx got 0x%lx\n", - context, expected->procnum, expected->wParam, actual->wParam); - expected++; - actual++; - } - ok(!expected->procnum, "Received fewer messages than expected\n"); - ok(!actual->procnum, "Received more messages than expected\n"); - flush_sequence(); -} - -static LRESULT WINAPI WndProc1(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct message msg; - - if(message == WM_USER) { - msg.wParam = wParam; - msg.procnum = 1; - add_message(&msg); - } - return DefWindowProc(hwnd, message, wParam, lParam); -} - - -static WNDPROC origProc3; -static LRESULT WINAPI WndProc3(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct message msg; - - if(message == WM_USER) { - msg.wParam = wParam; - msg.procnum = 3; - add_message(&msg); - } - return CallWindowProc(origProc3, hwnd, message, wParam, lParam); -} - -static LRESULT WINAPI WndProcSub(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, UINT_PTR uldSubclass, DWORD_PTR dwRefData) -{ - struct message msg; - - if(message == WM_USER) { - msg.wParam = wParam; - msg.procnum = uldSubclass; - add_message(&msg); - - if(lParam) { - if(dwRefData & DELETE_SELF) { - pRemoveWindowSubclass(hwnd, WndProcSub, uldSubclass); - pRemoveWindowSubclass(hwnd, WndProcSub, uldSubclass); - } - if(dwRefData & DELETE_PREV) - pRemoveWindowSubclass(hwnd, WndProcSub, uldSubclass-1); - if(dwRefData & SEND_NEST) - SendMessage(hwnd, WM_USER, wParam+1, 0); - } - } - return pDefSubclassProc(hwnd, message, wParam, lParam); -} - -static void test_subclass(void) -{ - HWND hwnd = CreateWindowExA(0, "TestSubclass", "Test subclass", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - assert(hwnd); - - pSetWindowSubclass(hwnd, WndProcSub, 2, 0); - SendMessage(hwnd, WM_USER, 1, 0); - SendMessage(hwnd, WM_USER, 2, 0); - ok_sequence(Sub_BasicTest, "Basic"); - - pSetWindowSubclass(hwnd, WndProcSub, 2, DELETE_SELF); - SendMessage(hwnd, WM_USER, 1, 1); - ok_sequence(Sub_DeletedTest, "Deleted"); - - SendMessage(hwnd, WM_USER, 1, 0); - ok_sequence(Sub_AfterDeletedTest, "After Deleted"); - - pSetWindowSubclass(hwnd, WndProcSub, 2, 0); - origProc3 = (WNDPROC)SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG)WndProc3); - SendMessage(hwnd, WM_USER, 1, 0); - SendMessage(hwnd, WM_USER, 2, 0); - ok_sequence(Sub_OldAfterNewTest, "Old after New"); - - pSetWindowSubclass(hwnd, WndProcSub, 4, 0); - SendMessage(hwnd, WM_USER, 1, 0); - ok_sequence(Sub_MixTest, "Mix"); - - /* Now the fun starts */ - pSetWindowSubclass(hwnd, WndProcSub, 4, SEND_NEST); - SendMessage(hwnd, WM_USER, 1, 1); - ok_sequence(Sub_MixAndNestTest, "Mix and nest"); - - pSetWindowSubclass(hwnd, WndProcSub, 4, SEND_NEST | DELETE_SELF); - SendMessage(hwnd, WM_USER, 1, 1); - ok_sequence(Sub_MixNestDelTest, "Mix, nest, del"); - - pSetWindowSubclass(hwnd, WndProcSub, 4, 0); - pSetWindowSubclass(hwnd, WndProcSub, 5, DELETE_PREV); - SendMessage(hwnd, WM_USER, 1, 1); - ok_sequence(Sub_MixDelPrevTest, "Mix and del prev"); - - DestroyWindow(hwnd); -} - -static BOOL RegisterWindowClasses(void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = WndProc1; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = NULL; - cls.hbrBackground = NULL; - cls.lpszMenuName = NULL; - cls.lpszClassName = "TestSubclass"; - if(!RegisterClassA(&cls)) return FALSE; - - return TRUE; -} - -START_TEST(subclass) -{ - HMODULE hdll; - - hdll = GetModuleHandleA("comctl32.dll"); - assert(hdll); - /* Functions have to be loaded by ordinal. Only XP and W2K3 export - * them by name. - */ - pSetWindowSubclass = (void*)GetProcAddress(hdll, (LPSTR)410); - pRemoveWindowSubclass = (void*)GetProcAddress(hdll, (LPSTR)412); - pDefSubclassProc = (void*)GetProcAddress(hdll, (LPSTR)413); - - if(!pSetWindowSubclass || !pRemoveWindowSubclass || !pDefSubclassProc) - return; - - if(!RegisterWindowClasses()) assert(0); - - test_subclass(); -} diff --git a/rostests/winetests/comctl32/tab.c b/rostests/winetests/comctl32/tab.c deleted file mode 100644 index 94893767452..00000000000 --- a/rostests/winetests/comctl32/tab.c +++ /dev/null @@ -1,996 +0,0 @@ -/* Unit test suite for tab control. - * - * Copyright 2003 Vitaliy Margolen - * Copyright 2007 Hagop Hagopian - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" -#include "msg.h" - -#define DEFAULT_MIN_TAB_WIDTH 54 -#define TAB_DEFAULT_WIDTH 96 -#define TAB_PADDING_X 6 -#define EXTRA_ICON_PADDING 3 -#define MAX_TABLEN 32 - -#define NUM_MSG_SEQUENCES 2 -#define PARENT_SEQ_INDEX 0 -#define TAB_SEQ_INDEX 1 - -#define expect(expected, got) ok ( expected == got, "Expected %d, got %d\n", expected, got) -#define expect_str(expected, got)\ - ok ( strcmp(expected, got) == 0, "Expected '%s', got '%s'\n", expected, got) - -#define TabWidthPadded(padd_x, num) (DEFAULT_MIN_TAB_WIDTH - (TAB_PADDING_X - (padd_x)) * num) - -#define TabCheckSetSize(hwnd, SetWidth, SetHeight, ExpWidth, ExpHeight, Msg)\ - SendMessage (hwnd, TCM_SETITEMSIZE, 0,\ - (LPARAM) MAKELPARAM((SetWidth >= 0) ? SetWidth:0, (SetHeight >= 0) ? SetHeight:0));\ - if (winetest_interactive) RedrawWindow (hwnd, NULL, 0, RDW_UPDATENOW);\ - CheckSize(hwnd, ExpWidth, ExpHeight, Msg); - -#define CheckSize(hwnd,width,height,msg)\ - SendMessage (hwnd, TCM_GETITEMRECT, 0, (LPARAM) &rTab);\ - if ((width >= 0) && (height < 0))\ - ok (width == rTab.right - rTab.left, "%s: Expected width [%d] got [%d]\n",\ - msg, (int)width, rTab.right - rTab.left);\ - else if ((height >= 0) && (width < 0))\ - ok (height == rTab.bottom - rTab.top, "%s: Expected height [%d] got [%d]\n",\ - msg, (int)height, rTab.bottom - rTab.top);\ - else\ - ok ((width == rTab.right - rTab.left) &&\ - (height == rTab.bottom - rTab.top ),\ - "%s: Expected [%d,%d] got [%d,%d]\n", msg, (int)width, (int)height,\ - rTab.right - rTab.left, rTab.bottom - rTab.top); - -static HFONT hFont = 0; - -static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; - -static const struct message create_parent_wnd_seq[] = { - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|defwinproc|optional }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent}, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { WM_SIZE, sent }, - { WM_MOVE, sent }, - { 0 } -}; - -static const struct message add_tab_to_parent[] = { - { TCM_INSERTITEMA, sent }, - { TCM_INSERTITEMA, sent }, - { WM_NOTIFYFORMAT, sent|defwinproc }, - { WM_QUERYUISTATE, sent|wparam|lparam|defwinproc, 0, 0 }, - { WM_PARENTNOTIFY, sent|defwinproc }, - { TCM_INSERTITEMA, sent }, - { TCM_INSERTITEMA, sent }, - { TCM_INSERTITEMA, sent }, - { 0 } -}; - -static const struct message add_tab_to_parent_interactive[] = { - { TCM_INSERTITEMA, sent }, - { TCM_INSERTITEMA, sent }, - { WM_NOTIFYFORMAT, sent|defwinproc }, - { WM_QUERYUISTATE, sent|wparam|lparam|defwinproc, 0, 0 }, - { WM_PARENTNOTIFY, sent|defwinproc }, - { TCM_INSERTITEMA, sent }, - { TCM_INSERTITEMA, sent }, - { TCM_INSERTITEMA, sent }, - { WM_SHOWWINDOW, sent}, - { WM_WINDOWPOSCHANGING, sent}, - { WM_WINDOWPOSCHANGING, sent}, - { WM_NCACTIVATE, sent}, - { WM_ACTIVATE, sent}, - { WM_IME_SETCONTEXT, sent|defwinproc|optional}, - { WM_IME_NOTIFY, sent|defwinproc|optional}, - { WM_SETFOCUS, sent|defwinproc}, - { WM_WINDOWPOSCHANGED, sent}, - { WM_SIZE, sent}, - { WM_MOVE, sent}, - { 0 } -}; - -static const struct message add_tab_control_parent_seq[] = { - { WM_NOTIFYFORMAT, sent }, - { WM_QUERYUISTATE, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message add_tab_control_parent_seq_interactive[] = { - { WM_NOTIFYFORMAT, sent }, - { WM_QUERYUISTATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|optional}, - { WM_NCACTIVATE, sent}, - { WM_ACTIVATE, sent}, - { WM_WINDOWPOSCHANGING, sent|optional}, - { WM_KILLFOCUS, sent}, - { WM_IME_SETCONTEXT, sent|optional}, - { WM_IME_NOTIFY, sent|optional}, - { 0 } -}; - -static const struct message empty_sequence[] = { - { 0 } -}; - -static const struct message set_min_tab_width_seq[] = { - { TCM_SETMINTABWIDTH, sent|wparam, 0 }, - { TCM_SETMINTABWIDTH, sent|wparam, 0 }, - { 0 } -}; - -static const struct message get_item_count_seq[] = { - { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message get_row_count_seq[] = { - { TCM_GETROWCOUNT, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message get_item_rect_seq[] = { - { TCM_GETITEMRECT, sent }, - { TCM_GETITEMRECT, sent }, - { 0 } -}; - -static const struct message getset_cur_focus_seq[] = { - { TCM_SETCURFOCUS, sent|lparam, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_SETCURFOCUS, sent|lparam, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_SETCURSEL, sent|lparam, 0 }, - { TCM_SETCURFOCUS, sent|lparam, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message getset_cur_sel_seq[] = { - { TCM_SETCURSEL, sent|lparam, 0 }, - { TCM_GETCURSEL, sent|wparam|lparam, 0, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_SETCURSEL, sent|lparam, 0 }, - { TCM_GETCURSEL, sent|wparam|lparam, 0, 0 }, - { TCM_SETCURSEL, sent|lparam, 0 }, - { TCM_SETCURSEL, sent|lparam, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message getset_extended_style_seq[] = { - { TCM_GETEXTENDEDSTYLE, sent|wparam|lparam, 0, 0 }, - { TCM_SETEXTENDEDSTYLE, sent }, - { TCM_GETEXTENDEDSTYLE, sent|wparam|lparam, 0, 0 }, - { TCM_SETEXTENDEDSTYLE, sent }, - { TCM_GETEXTENDEDSTYLE, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message getset_unicode_format_seq[] = { - { CCM_SETUNICODEFORMAT, sent|lparam, 0 }, - { CCM_GETUNICODEFORMAT, sent|wparam|lparam, 0, 0 }, - { CCM_SETUNICODEFORMAT, sent|lparam, 0 }, - { CCM_GETUNICODEFORMAT, sent|wparam|lparam, 0, 0 }, - { CCM_SETUNICODEFORMAT, sent|lparam, 0 }, - { 0 } -}; - -static const struct message getset_item_seq[] = { - { TCM_SETITEMA, sent }, - { TCM_GETITEMA, sent }, - { TCM_GETITEMA, sent }, - { 0 } -}; - -static const struct message getset_tooltip_seq[] = { - { WM_NOTIFYFORMAT, sent }, - { WM_QUERYUISTATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_NOTIFYFORMAT, sent }, - { TCM_SETTOOLTIPS, sent|lparam, 0 }, - { TCM_GETTOOLTIPS, sent|wparam|lparam, 0, 0 }, - { TCM_SETTOOLTIPS, sent|lparam, 0 }, - { TCM_GETTOOLTIPS, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message getset_tooltip_parent_seq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { 0 } -}; - -static const struct message insert_focus_seq[] = { - { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_INSERTITEM, sent|wparam, 1 }, - { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_INSERTITEM, sent|wparam, 2 }, - { WM_NOTIFYFORMAT, sent|defwinproc, }, - { WM_QUERYUISTATE, sent|defwinproc, }, - { WM_PARENTNOTIFY, sent|defwinproc, }, - { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_SETCURFOCUS, sent|wparam|lparam, -1, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_INSERTITEM, sent|wparam, 3 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message delete_focus_seq[] = { - { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_DELETEITEM, sent|wparam|lparam, 1, 0 }, - { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_SETCURFOCUS, sent|wparam|lparam, -1, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { TCM_DELETEITEM, sent|wparam|lparam, 0, 0 }, - { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 }, - { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 }, - { 0 } -}; - - -static HWND -create_tabcontrol (DWORD style, DWORD mask) -{ - HWND handle; - TCITEM tcNewTab; - static char text1[] = "Tab 1", - text2[] = "Wide Tab 2", - text3[] = "T 3"; - - handle = CreateWindow ( - WC_TABCONTROLA, - "TestTab", - WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | style, - 10, 10, 300, 100, - NULL, NULL, NULL, 0); - - assert (handle); - - SetWindowLong(handle, GWL_STYLE, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | style); - SendMessage (handle, WM_SETFONT, 0, (LPARAM) hFont); - - tcNewTab.mask = mask; - tcNewTab.pszText = text1; - tcNewTab.iImage = 0; - SendMessage (handle, TCM_INSERTITEM, 0, (LPARAM) &tcNewTab); - tcNewTab.pszText = text2; - tcNewTab.iImage = 1; - SendMessage (handle, TCM_INSERTITEM, 1, (LPARAM) &tcNewTab); - tcNewTab.pszText = text3; - tcNewTab.iImage = 2; - SendMessage (handle, TCM_INSERTITEM, 2, (LPARAM) &tcNewTab); - - if (winetest_interactive) - { - ShowWindow (handle, SW_SHOW); - RedrawWindow (handle, NULL, 0, RDW_UPDATENOW); - Sleep (1000); - } - - return handle; -} - -static LRESULT WINAPI parentWindowProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_ERASEBKGND && - message != WM_NCPAINT && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, PARENT_SEQ_INDEX, &msg); - } - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static BOOL registerParentWindowClass(void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = parentWindowProcess; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(NULL); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "Tab test parent class"; - return RegisterClassA(&cls); -} - -static HWND createParentWindow(void) -{ - if (!registerParentWindowClass()) - return NULL; - - return CreateWindowEx(0, "Tab test parent class", - "Tab test parent window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_VISIBLE, - 0, 0, 100, 100, - GetDesktopWindow(), NULL, GetModuleHandleA(NULL), NULL); -} - -struct subclass_info -{ - WNDPROC oldproc; -}; - -static LRESULT WINAPI tabSubclassProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_ERASEBKGND && - message != WM_NCPAINT && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("tab: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, TAB_SEQ_INDEX, &msg); - } - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static HWND createFilledTabControl(HWND parent_wnd, DWORD style, DWORD mask, INT nTabs) -{ - HWND tabHandle; - TCITEM tcNewTab; - struct subclass_info *info; - RECT rect; - INT i; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - GetClientRect(parent_wnd, &rect); - - tabHandle = CreateWindow ( - WC_TABCONTROLA, - "TestTab", - WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | style, - 0, 0, rect.right, rect.bottom, - parent_wnd, NULL, NULL, 0); - - assert(tabHandle); - - info->oldproc = (WNDPROC)SetWindowLongPtrA(tabHandle, GWLP_WNDPROC, (LONG_PTR)tabSubclassProcess); - SetWindowLongPtrA(tabHandle, GWLP_USERDATA, (LONG_PTR)info); - - tcNewTab.mask = mask; - - for (i = 0; i < nTabs; i++) - { - char tabName[MAX_TABLEN]; - - sprintf(tabName, "Tab %d", i+1); - tcNewTab.pszText = tabName; - tcNewTab.iImage = i; - SendMessage (tabHandle, TCM_INSERTITEM, i, (LPARAM) &tcNewTab); - } - - if (winetest_interactive) - { - ShowWindow (tabHandle, SW_SHOW); - RedrawWindow (tabHandle, NULL, 0, RDW_UPDATENOW); - Sleep (1000); - } - - return tabHandle; -} - -static HWND create_tooltip (HWND hTab, char toolTipText[]) -{ - HWND hwndTT; - - TOOLINFO ti; - LPTSTR lptstr = toolTipText; - RECT rect; - - /* Creating a tooltip window*/ - hwndTT = CreateWindowEx( - WS_EX_TOPMOST, - TOOLTIPS_CLASS, - NULL, - WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, - CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - hTab, NULL, 0, NULL); - - SetWindowPos( - hwndTT, - HWND_TOPMOST, - 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - - GetClientRect (hTab, &rect); - - /* Initialize members of toolinfo*/ - ti.cbSize = sizeof(TOOLINFO); - ti.uFlags = TTF_SUBCLASS; - ti.hwnd = hTab; - ti.hinst = 0; - ti.uId = 0; - ti.lpszText = lptstr; - - ti.rect = rect; - - /* Add toolinfo structure to the tooltip control */ - SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); - - return hwndTT; -} - -static void test_tab(INT nMinTabWidth) -{ - HWND hwTab; - RECT rTab; - HIMAGELIST himl = ImageList_Create(21, 21, ILC_COLOR, 3, 4); - SIZE size; - HDC hdc; - HFONT hOldFont; - INT i; - - hwTab = create_tabcontrol(TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE); - SendMessage(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth); - - hdc = GetDC(hwTab); - hOldFont = SelectObject(hdc, (HFONT)SendMessage(hwTab, WM_GETFONT, 0, 0)); - GetTextExtentPoint32A(hdc, "Tab 1", strlen("Tab 1"), &size); - trace("Tab1 text size: size.cx=%d size.cy=%d\n", size.cx, size.cy); - SelectObject(hdc, hOldFont); - ReleaseDC(hwTab, hdc); - - trace (" TCS_FIXEDWIDTH tabs no icon...\n"); - CheckSize(hwTab, TAB_DEFAULT_WIDTH, -1, "default width"); - TabCheckSetSize(hwTab, 50, 20, 50, 20, "set size"); - TabCheckSetSize(hwTab, 0, 1, 0, 1, "min size"); - - SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl); - - trace (" TCS_FIXEDWIDTH tabs with icon...\n"); - TabCheckSetSize(hwTab, 50, 30, 50, 30, "set size > icon"); - TabCheckSetSize(hwTab, 20, 20, 25, 20, "set size < icon"); - TabCheckSetSize(hwTab, 0, 1, 25, 1, "min size"); - - DestroyWindow (hwTab); - - hwTab = create_tabcontrol(TCS_FIXEDWIDTH | TCS_BUTTONS, TCIF_TEXT|TCIF_IMAGE); - SendMessage(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth); - - trace (" TCS_FIXEDWIDTH buttons no icon...\n"); - CheckSize(hwTab, TAB_DEFAULT_WIDTH, -1, "default width"); - TabCheckSetSize(hwTab, 20, 20, 20, 20, "set size 1"); - TabCheckSetSize(hwTab, 10, 50, 10, 50, "set size 2"); - TabCheckSetSize(hwTab, 0, 1, 0, 1, "min size"); - - SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl); - - trace (" TCS_FIXEDWIDTH buttons with icon...\n"); - TabCheckSetSize(hwTab, 50, 30, 50, 30, "set size > icon"); - TabCheckSetSize(hwTab, 20, 20, 25, 20, "set size < icon"); - TabCheckSetSize(hwTab, 0, 1, 25, 1, "min size"); - SendMessage(hwTab, TCM_SETPADDING, 0, MAKELPARAM(4,4)); - TabCheckSetSize(hwTab, 0, 1, 25, 1, "set padding, min size"); - - DestroyWindow (hwTab); - - hwTab = create_tabcontrol(TCS_FIXEDWIDTH | TCS_BOTTOM, TCIF_TEXT|TCIF_IMAGE); - SendMessage(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth); - - trace (" TCS_FIXEDWIDTH | TCS_BOTTOM tabs...\n"); - CheckSize(hwTab, TAB_DEFAULT_WIDTH, -1, "no icon, default width"); - - TabCheckSetSize(hwTab, 20, 20, 20, 20, "no icon, set size 1"); - TabCheckSetSize(hwTab, 10, 50, 10, 50, "no icon, set size 2"); - TabCheckSetSize(hwTab, 0, 1, 0, 1, "no icon, min size"); - - SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl); - - TabCheckSetSize(hwTab, 50, 30, 50, 30, "with icon, set size > icon"); - TabCheckSetSize(hwTab, 20, 20, 25, 20, "with icon, set size < icon"); - TabCheckSetSize(hwTab, 0, 1, 25, 1, "with icon, min size"); - SendMessage(hwTab, TCM_SETPADDING, 0, MAKELPARAM(4,4)); - TabCheckSetSize(hwTab, 0, 1, 25, 1, "set padding, min size"); - - DestroyWindow (hwTab); - - hwTab = create_tabcontrol(0, TCIF_TEXT|TCIF_IMAGE); - SendMessage(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth); - - trace (" non fixed width, with text...\n"); - CheckSize(hwTab, max(size.cx +TAB_PADDING_X*2, (nMinTabWidth < 0) ? DEFAULT_MIN_TAB_WIDTH : nMinTabWidth), -1, - "no icon, default width"); - for (i=0; i<8; i++) - { - INT nTabWidth = (nMinTabWidth < 0) ? TabWidthPadded(i, 2) : nMinTabWidth; - - SendMessage(hwTab, TCM_SETIMAGELIST, 0, 0); - SendMessage(hwTab, TCM_SETPADDING, 0, MAKELPARAM(i,i)); - - TabCheckSetSize(hwTab, 50, 20, max(size.cx + i*2, nTabWidth), 20, "no icon, set size"); - TabCheckSetSize(hwTab, 0, 1, max(size.cx + i*2, nTabWidth), 1, "no icon, min size"); - - SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl); - nTabWidth = (nMinTabWidth < 0) ? TabWidthPadded(i, 3) : nMinTabWidth; - - TabCheckSetSize(hwTab, 50, 30, max(size.cx + 21 + i*3, nTabWidth), 30, "with icon, set size > icon"); - TabCheckSetSize(hwTab, 20, 20, max(size.cx + 21 + i*3, nTabWidth), 20, "with icon, set size < icon"); - TabCheckSetSize(hwTab, 0, 1, max(size.cx + 21 + i*3, nTabWidth), 1, "with icon, min size"); - } - DestroyWindow (hwTab); - - hwTab = create_tabcontrol(0, TCIF_IMAGE); - SendMessage(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth); - - trace (" non fixed width, no text...\n"); - CheckSize(hwTab, (nMinTabWidth < 0) ? DEFAULT_MIN_TAB_WIDTH : nMinTabWidth, -1, "no icon, default width"); - for (i=0; i<8; i++) - { - INT nTabWidth = (nMinTabWidth < 0) ? TabWidthPadded(i, 2) : nMinTabWidth; - - SendMessage(hwTab, TCM_SETIMAGELIST, 0, 0); - SendMessage(hwTab, TCM_SETPADDING, 0, MAKELPARAM(i,i)); - - TabCheckSetSize(hwTab, 50, 20, nTabWidth, 20, "no icon, set size"); - TabCheckSetSize(hwTab, 0, 1, nTabWidth, 1, "no icon, min size"); - - SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl); - if (i > 1 && nMinTabWidth > 0 && nMinTabWidth < DEFAULT_MIN_TAB_WIDTH) - nTabWidth += EXTRA_ICON_PADDING *(i-1); - - TabCheckSetSize(hwTab, 50, 30, nTabWidth, 30, "with icon, set size > icon"); - TabCheckSetSize(hwTab, 20, 20, nTabWidth, 20, "with icon, set size < icon"); - TabCheckSetSize(hwTab, 0, 1, nTabWidth, 1, "with icon, min size"); - } - - DestroyWindow (hwTab); - - ImageList_Destroy(himl); - DeleteObject(hFont); -} - -static void test_getters_setters(HWND parent_wnd, INT nTabs) -{ - HWND hTab; - RECT rTab; - INT nTabsRetrieved; - INT rowCount; - - ok(parent_wnd != NULL, "no parent window!\n"); - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs); - ok(hTab != NULL, "Failed to create tab control\n"); - - if(!winetest_interactive) - ok_sequence(sequences, TAB_SEQ_INDEX, add_tab_to_parent, - "Tab sequence, after adding tab control to parent", TRUE); - else - ok_sequence(sequences, TAB_SEQ_INDEX, add_tab_to_parent_interactive, - "Tab sequence, after adding tab control to parent", TRUE); - - if(!winetest_interactive) - ok_sequence(sequences, PARENT_SEQ_INDEX, add_tab_control_parent_seq, - "Parent after sequence, adding tab control to parent", TRUE); - else - ok_sequence(sequences, PARENT_SEQ_INDEX, add_tab_control_parent_seq_interactive, - "Parent after sequence, adding tab control to parent", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - todo_wine{ - expect(DEFAULT_MIN_TAB_WIDTH, (int)SendMessage(hTab, TCM_SETMINTABWIDTH, 0, -1)); - } - ok_sequence(sequences, TAB_SEQ_INDEX, set_min_tab_width_seq, "Set minTabWidth test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Set minTabWidth test parent sequence", FALSE); - - /* Testing GetItemCount */ - flush_sequences(sequences, NUM_MSG_SEQUENCES); - nTabsRetrieved = SendMessage(hTab, TCM_GETITEMCOUNT, 0, 0); - expect(nTabs, nTabsRetrieved); - ok_sequence(sequences, TAB_SEQ_INDEX, get_item_count_seq, "Get itemCount test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset itemCount test parent sequence", FALSE); - - /* Testing GetRowCount */ - flush_sequences(sequences, NUM_MSG_SEQUENCES); - rowCount = SendMessage(hTab, TCM_GETROWCOUNT, 0, 0); - expect(1, rowCount); - ok_sequence(sequences, TAB_SEQ_INDEX, get_row_count_seq, "Get rowCount test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Get rowCount test parent sequence", FALSE); - - /* Testing GetItemRect */ - flush_sequences(sequences, NUM_MSG_SEQUENCES); - ok(SendMessage(hTab, TCM_GETITEMRECT, 0, (LPARAM) &rTab), "GetItemRect failed.\n"); - CheckSize(hTab, TAB_DEFAULT_WIDTH, -1 , "Default Width"); - ok_sequence(sequences, TAB_SEQ_INDEX, get_item_rect_seq, "Get itemRect test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Get itemRect test parent sequence", FALSE); - - /* Testing CurFocus */ - { - INT focusIndex; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Testing CurFocus with largest appropriate value */ - SendMessage(hTab, TCM_SETCURFOCUS, nTabs-1, 0); - focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(nTabs-1, focusIndex); - - /* Testing CurFocus with negative value */ - SendMessage(hTab, TCM_SETCURFOCUS, -10, 0); - focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(-1, focusIndex); - - /* Testing CurFocus with value larger than number of tabs */ - focusIndex = SendMessage(hTab, TCM_SETCURSEL, 1, 0); - todo_wine{ - expect(-1, focusIndex); - } - - SendMessage(hTab, TCM_SETCURFOCUS, nTabs+1, 0); - focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(1, focusIndex); - - ok_sequence(sequences, TAB_SEQ_INDEX, getset_cur_focus_seq, "Getset curFoc test sequence", FALSE); - } - - /* Testing CurSel */ - { - INT selectionIndex; - INT focusIndex; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Testing CurSel with largest appropriate value */ - selectionIndex = SendMessage(hTab, TCM_SETCURSEL, nTabs-1, 0); - expect(1, selectionIndex); - selectionIndex = SendMessage(hTab, TCM_GETCURSEL, 0, 0); - expect(nTabs-1, selectionIndex); - - /* Focus should switch with selection */ - focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(nTabs-1, focusIndex); - - /* Testing CurSel with negative value */ - SendMessage(hTab, TCM_SETCURSEL, -10, 0); - selectionIndex = SendMessage(hTab, TCM_GETCURSEL, 0, 0); - expect(-1, selectionIndex); - - /* Testing CurSel with value larger than number of tabs */ - selectionIndex = SendMessage(hTab, TCM_SETCURSEL, 1, 0); - expect(-1, selectionIndex); - - selectionIndex = SendMessage(hTab, TCM_SETCURSEL, nTabs+1, 0); - expect(-1, selectionIndex); - selectionIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(1, selectionIndex); - - ok_sequence(sequences, TAB_SEQ_INDEX, getset_cur_sel_seq, "Getset curSel test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset curSel test parent sequence", FALSE); - } - - /* Testing ExtendedStyle */ - { - DWORD prevExtendedStyle; - DWORD extendedStyle; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Testing Flat Separators */ - extendedStyle = SendMessage(hTab, TCM_GETEXTENDEDSTYLE, 0, 0); - prevExtendedStyle = SendMessage(hTab, TCM_SETEXTENDEDSTYLE, 0, TCS_EX_FLATSEPARATORS); - expect(extendedStyle, prevExtendedStyle); - - extendedStyle = SendMessage(hTab, TCM_GETEXTENDEDSTYLE, 0, 0); - todo_wine{ - expect(TCS_EX_FLATSEPARATORS, extendedStyle); - } - - /* Testing Register Drop */ - prevExtendedStyle = SendMessage(hTab, TCM_SETEXTENDEDSTYLE, 0, TCS_EX_REGISTERDROP); - expect(extendedStyle, prevExtendedStyle); - - extendedStyle = SendMessage(hTab, TCM_GETEXTENDEDSTYLE, 0, 0); - todo_wine{ - expect(TCS_EX_REGISTERDROP, extendedStyle); - } - - ok_sequence(sequences, TAB_SEQ_INDEX, getset_extended_style_seq, "Getset extendedStyle test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset extendedStyle test parent sequence", FALSE); - } - - /* Testing UnicodeFormat */ - { - INT unicodeFormat; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - unicodeFormat = SendMessage(hTab, TCM_SETUNICODEFORMAT, TRUE, 0); - todo_wine{ - expect(0, unicodeFormat); - } - unicodeFormat = SendMessage(hTab, TCM_GETUNICODEFORMAT, 0, 0); - expect(1, unicodeFormat); - - unicodeFormat = SendMessage(hTab, TCM_SETUNICODEFORMAT, FALSE, 0); - expect(1, unicodeFormat); - unicodeFormat = SendMessage(hTab, TCM_GETUNICODEFORMAT, 0, 0); - expect(0, unicodeFormat); - - unicodeFormat = SendMessage(hTab, TCM_SETUNICODEFORMAT, TRUE, 0); - expect(0, unicodeFormat); - - ok_sequence(sequences, TAB_SEQ_INDEX, getset_unicode_format_seq, "Getset unicodeFormat test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset unicodeFormat test parent sequence", FALSE); - } - - /* Testing GetSet Item */ - { - TCITEM tcItem; - char szText[32] = "New Label"; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - tcItem.mask = TCIF_TEXT; - tcItem.pszText = &szText[0]; - tcItem.cchTextMax = sizeof(szText); - - ok ( SendMessage(hTab, TCM_SETITEM, 0, (LPARAM) &tcItem), "Setting new item failed.\n"); - ok ( SendMessage(hTab, TCM_GETITEM, 0, (LPARAM) &tcItem), "Getting item failed.\n"); - expect_str("New Label", tcItem.pszText); - - ok ( SendMessage(hTab, TCM_GETITEM, 1, (LPARAM) &tcItem), "Getting item failed.\n"); - expect_str("Tab 2", tcItem.pszText); - - ok_sequence(sequences, TAB_SEQ_INDEX, getset_item_seq, "Getset item test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset item test parent sequence", FALSE); - } - - /* Testing GetSet ToolTip */ - { - HWND toolTip; - char toolTipText[32] = "ToolTip Text Test"; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - toolTip = create_tooltip(hTab, toolTipText); - SendMessage(hTab, TCM_SETTOOLTIPS, (LPARAM) toolTip, 0); - ok (toolTip == (HWND) SendMessage(hTab,TCM_GETTOOLTIPS,0,0), "ToolTip was set incorrectly.\n"); - - SendMessage(hTab, TCM_SETTOOLTIPS, (LPARAM) NULL, 0); - ok (NULL == (HWND) SendMessage(hTab,TCM_GETTOOLTIPS,0,0), "ToolTip was set incorrectly.\n"); - - ok_sequence(sequences, TAB_SEQ_INDEX, getset_tooltip_seq, "Getset tooltip test sequence", TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, getset_tooltip_parent_seq, "Getset tooltip test parent sequence", TRUE); - } - - DestroyWindow(hTab); -} - -static void test_insert_focus(HWND parent_wnd) -{ - HWND hTab; - INT nTabsRetrieved; - INT r; - TCITEM tcNewTab; - DWORD mask = TCIF_TEXT|TCIF_IMAGE; - static char tabName[] = "TAB"; - tcNewTab.mask = mask; - tcNewTab.pszText = tabName; - - ok(parent_wnd != NULL, "no parent window!\n"); - - hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, mask, 0); - ok(hTab != NULL, "Failed to create tab control\n"); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - nTabsRetrieved = SendMessage(hTab, TCM_GETITEMCOUNT, 0, 0); - expect(0, nTabsRetrieved); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(-1, r); - - tcNewTab.iImage = 1; - r = SendMessage(hTab, TCM_INSERTITEM, 1, (LPARAM) &tcNewTab); - expect(0, r); - - nTabsRetrieved = SendMessage(hTab, TCM_GETITEMCOUNT, 0, 0); - expect(1, nTabsRetrieved); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(0, r); - - tcNewTab.iImage = 2; - r = SendMessage(hTab, TCM_INSERTITEM, 2, (LPARAM) &tcNewTab); - expect(1, r); - - nTabsRetrieved = SendMessage(hTab, TCM_GETITEMCOUNT, 0, 0); - expect(2, nTabsRetrieved); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(0, r); - - r = SendMessage(hTab, TCM_SETCURFOCUS, -1, 0); - expect(0, r); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(-1, r); - - tcNewTab.iImage = 3; - r = SendMessage(hTab, TCM_INSERTITEM, 3, (LPARAM) &tcNewTab); - expect(2, r); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(2, r); - - ok_sequence(sequences, TAB_SEQ_INDEX, insert_focus_seq, "insert_focus test sequence", TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "insert_focus parent test sequence", FALSE); - - DestroyWindow(hTab); -} - -static void test_delete_focus(HWND parent_wnd) -{ - HWND hTab; - INT nTabsRetrieved; - INT r; - - ok(parent_wnd != NULL, "no parent window!\n"); - - hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, 2); - ok(hTab != NULL, "Failed to create tab control\n"); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - nTabsRetrieved = SendMessage(hTab, TCM_GETITEMCOUNT, 0, 0); - expect(2, nTabsRetrieved); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(0, r); - - r = SendMessage(hTab, TCM_DELETEITEM, 1, 0); - expect(1, r); - - nTabsRetrieved = SendMessage(hTab, TCM_GETITEMCOUNT, 0, 0); - expect(1, nTabsRetrieved); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(0, r); - - r = SendMessage(hTab, TCM_SETCURFOCUS, -1, 0); - expect(0, r); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(-1, r); - - r = SendMessage(hTab, TCM_DELETEITEM, 0, 0); - expect(1, r); - - nTabsRetrieved = SendMessage(hTab, TCM_GETITEMCOUNT, 0, 0); - expect(0, nTabsRetrieved); - - r = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); - expect(-1, r); - - ok_sequence(sequences, TAB_SEQ_INDEX, delete_focus_seq, "delete_focus test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "delete_focus parent test sequence", FALSE); - - DestroyWindow(hTab); -} - -START_TEST(tab) -{ - HWND parent_wnd; - LOGFONTA logfont; - - lstrcpyA(logfont.lfFaceName, "Arial"); - memset(&logfont, 0, sizeof(logfont)); - logfont.lfHeight = -12; - logfont.lfWeight = FW_NORMAL; - logfont.lfCharSet = ANSI_CHARSET; - hFont = CreateFontIndirectA(&logfont); - - InitCommonControls(); - - trace ("Testing with default MinWidth\n"); - test_tab(-1); - trace ("Testing with MinWidth set to -3\n"); - test_tab(-3); - trace ("Testing with MinWidth set to 24\n"); - test_tab(24); - trace ("Testing with MinWidth set to 54\n"); - test_tab(54); - trace ("Testing with MinWidth set to 94\n"); - test_tab(94); - - init_msg_sequences(sequences, NUM_MSG_SEQUENCES); - - parent_wnd = createParentWindow(); - ok(parent_wnd != NULL, "Failed to create parent window!\n"); - - /* Testing getters and setters with 5 tabs */ - test_getters_setters(parent_wnd, 5); - - test_insert_focus(parent_wnd); - test_delete_focus(parent_wnd); - - DestroyWindow(parent_wnd); -} diff --git a/rostests/winetests/comctl32/testlist.c b/rostests/winetests/comctl32/testlist.c deleted file mode 100644 index be88bef0a74..00000000000 --- a/rostests/winetests/comctl32/testlist.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_comboex(void); -extern void func_datetime(void); -extern void func_dpa(void); -extern void func_header(void); -extern void func_imagelist(void); -extern void func_listview(void); -extern void func_misc(void); -extern void func_monthcal(void); -extern void func_mru(void); -extern void func_msg(void); -extern void func_progress(void); -extern void func_propsheet(void); -extern void func_rebar(void); -extern void func_status(void); -extern void func_subclass(void); -extern void func_tab(void); -extern void func_toolbar(void); -extern void func_tooltips(void); -extern void func_trackbar(void); -extern void func_treeview(void); -extern void func_updown(void); - -const struct test winetest_testlist[] = -{ - { "comboex", func_comboex }, - { "datetime", func_datetime }, - { "dpa", func_dpa }, - { "header", func_header }, - { "imagelist", func_imagelist }, - { "listview", func_listview }, - { "misc", func_misc }, - { "monthcal", func_monthcal }, - { "mru", func_mru }, - { "msg", func_msg }, - { "progress", func_progress }, - { "propsheet", func_propsheet }, - { "rebar", func_rebar }, - { "status", func_status }, - { "subclass", func_subclass }, - { "tab", func_tab }, - { "toolbar", func_toolbar }, - { "tooltips", func_tooltips }, - { "trackbar", func_trackbar }, - { "treeview", func_treeview }, - { "updown", func_updown }, - { 0, 0 } -}; diff --git a/rostests/winetests/comctl32/toolbar.c b/rostests/winetests/comctl32/toolbar.c deleted file mode 100644 index 2693025b2e3..00000000000 --- a/rostests/winetests/comctl32/toolbar.c +++ /dev/null @@ -1,1167 +0,0 @@ -/* Unit tests for treeview. - * - * Copyright 2005 Krzysztof Foltman - * Copyright 2007 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 - */ - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winnls.h" -#include "winreg.h" -#include "commctrl.h" - -#include "resources.h" - -#include "wine/test.h" - -static HWND hMainWnd; -static BOOL g_fBlockHotItemChange; -static BOOL g_fReceivedHotItemChange; -static BOOL g_fExpectedHotItemOld; -static BOOL g_fExpectedHotItemNew; -static DWORD g_dwExpectedDispInfoMask; - -#define expect(EXPECTED,GOT) ok((GOT)==(EXPECTED), "Expected %d, got %d\n", (EXPECTED), (GOT)) - -#define check_rect(name, val, exp) ok(val.top == exp.top && val.bottom == exp.bottom && \ - val.left == exp.left && val.right == exp.right, "invalid rect (" name ") (%d,%d) (%d,%d) - expected (%d,%d) (%d,%d)\n", \ - val.left, val.top, val.right, val.bottom, exp.left, exp.top, exp.right, exp.bottom); - -#define compare(val, exp, format) ok((val) == (exp), #val " value " format " expected " format "\n", (val), (exp)); - -static void MakeButton(TBBUTTON *p, int idCommand, int fsStyle, int nString) { - p->iBitmap = -2; - p->idCommand = idCommand; - p->fsState = TBSTATE_ENABLED; - p->fsStyle = fsStyle; - p->iString = nString; -} - -static LRESULT MyWnd_Notify(LPARAM lParam) -{ - NMHDR *hdr = (NMHDR *)lParam; - NMTBHOTITEM *nmhi; - NMTBDISPINFO *nmdisp; - switch (hdr->code) - { - case TBN_HOTITEMCHANGE: - nmhi = (NMTBHOTITEM *)lParam; - g_fReceivedHotItemChange = TRUE; - if (g_fExpectedHotItemOld != g_fExpectedHotItemNew) - { - compare(nmhi->idOld, g_fExpectedHotItemOld, "%d"); - compare(nmhi->idNew, g_fExpectedHotItemNew, "%d"); - } - if (g_fBlockHotItemChange) - return 1; - break; - - case TBN_GETDISPINFOA: - ok(FALSE, "TBN_GETDISPINFOA received\n"); - break; - - case TBN_GETDISPINFOW: - nmdisp = (NMTBDISPINFOA *)lParam; - - compare(nmdisp->dwMask, g_dwExpectedDispInfoMask, "%x"); - compare(nmdisp->iImage, -1, "%d"); - ok(nmdisp->pszText == NULL, "pszText is not NULL\n"); - break; - } - return 0; -} - -static LRESULT CALLBACK MyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) - { - case WM_NOTIFY: - return MyWnd_Notify(lParam); - } - return DefWindowProcA(hWnd, msg, wParam, lParam); -} - -static void basic_test(void) -{ - TBBUTTON buttons[9]; - HWND hToolbar; - int i; - for (i=0; i<9; i++) - MakeButton(buttons+i, 1000+i, TBSTYLE_CHECKGROUP, 0); - MakeButton(buttons+3, 1003, TBSTYLE_SEP|TBSTYLE_GROUP, 0); - MakeButton(buttons+6, 1006, TBSTYLE_SEP, 0); - - hToolbar = CreateToolbarEx(hMainWnd, - WS_VISIBLE | WS_CLIPCHILDREN | CCS_TOP | - WS_CHILD | TBSTYLE_LIST, - 100, - 0, NULL, (UINT)0, - buttons, sizeof(buttons)/sizeof(buttons[0]), - 0, 0, 20, 16, sizeof(TBBUTTON)); - ok(hToolbar != NULL, "Toolbar creation\n"); - SendMessage(hToolbar, TB_ADDSTRINGA, 0, (LPARAM)"test\000"); - - /* test for exclusion working inside a separator-separated :-) group */ - SendMessage(hToolbar, TB_CHECKBUTTON, 1000, 1); /* press A1 */ - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1000, 0), "A1 pressed\n"); - ok(!SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1001, 0), "A2 not pressed\n"); - - SendMessage(hToolbar, TB_CHECKBUTTON, 1004, 1); /* press A5, release A1 */ - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1004, 0), "A5 pressed\n"); - ok(!SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1000, 0), "A1 not pressed anymore\n"); - - SendMessage(hToolbar, TB_CHECKBUTTON, 1005, 1); /* press A6, release A5 */ - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1005, 0), "A6 pressed\n"); - ok(!SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1004, 0), "A5 not pressed anymore\n"); - - /* test for inter-group crosstalk, ie. two radio groups interfering with each other */ - SendMessage(hToolbar, TB_CHECKBUTTON, 1007, 1); /* press B2 */ - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1005, 0), "A6 still pressed, no inter-group crosstalk\n"); - ok(!SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1000, 0), "A1 still not pressed\n"); - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1007, 0), "B2 pressed\n"); - - SendMessage(hToolbar, TB_CHECKBUTTON, 1000, 1); /* press A1 and ensure B group didn't suffer */ - ok(!SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1005, 0), "A6 not pressed anymore\n"); - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1000, 0), "A1 pressed\n"); - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1007, 0), "B2 still pressed\n"); - - SendMessage(hToolbar, TB_CHECKBUTTON, 1008, 1); /* press B3, and ensure A group didn't suffer */ - ok(!SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1005, 0), "A6 pressed\n"); - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1000, 0), "A1 pressed\n"); - ok(!SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1007, 0), "B2 not pressed\n"); - ok(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 1008, 0), "B3 pressed\n"); - - /* tests with invalid index */ - compare(SendMessage(hToolbar, TB_ISBUTTONCHECKED, 0xdeadbeef, 0), -1L, "%ld"); - compare(SendMessage(hToolbar, TB_ISBUTTONPRESSED, 0xdeadbeef, 0), -1L, "%ld"); - compare(SendMessage(hToolbar, TB_ISBUTTONENABLED, 0xdeadbeef, 0), -1L, "%ld"); - compare(SendMessage(hToolbar, TB_ISBUTTONINDETERMINATE, 0xdeadbeef, 0), -1L, "%ld"); - compare(SendMessage(hToolbar, TB_ISBUTTONHIGHLIGHTED, 0xdeadbeef, 0), -1L, "%ld"); - compare(SendMessage(hToolbar, TB_ISBUTTONHIDDEN, 0xdeadbeef, 0), -1L, "%ld"); - - DestroyWindow(hToolbar); -} - -static void rebuild_toolbar(HWND *hToolbar) -{ - if (*hToolbar != NULL) - DestroyWindow(*hToolbar); - *hToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, - hMainWnd, (HMENU)5, GetModuleHandle(NULL), NULL); - ok(*hToolbar != NULL, "Toolbar creation problem\n"); - ok(SendMessage(*hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0) == 0, "TB_BUTTONSTRUCTSIZE failed\n"); - ok(SendMessage(*hToolbar, TB_AUTOSIZE, 0, 0) == 0, "TB_AUTOSIZE failed\n"); - ok(SendMessage(*hToolbar, WM_SETFONT, (WPARAM)GetStockObject(SYSTEM_FONT), 0)==1, "WM_SETFONT\n"); -} - -static void rebuild_toolbar_with_buttons(HWND *hToolbar) -{ - TBBUTTON buttons[5]; - rebuild_toolbar(hToolbar); - - ZeroMemory(&buttons, sizeof(buttons)); - buttons[0].idCommand = 1; - buttons[0].fsStyle = BTNS_BUTTON; - buttons[0].fsState = TBSTATE_ENABLED; - buttons[0].iString = -1; - buttons[1].idCommand = 3; - buttons[1].fsStyle = BTNS_BUTTON; - buttons[1].fsState = TBSTATE_ENABLED; - buttons[1].iString = -1; - buttons[2].idCommand = 5; - buttons[2].fsStyle = BTNS_SEP; - buttons[2].fsState = TBSTATE_ENABLED; - buttons[2].iString = -1; - buttons[3].idCommand = 7; - buttons[3].fsStyle = BTNS_BUTTON; - buttons[3].fsState = TBSTATE_ENABLED; - buttons[3].iString = -1; - buttons[4].idCommand = 9; - buttons[4].fsStyle = BTNS_BUTTON; - buttons[4].fsState = 0; /* disabled */ - buttons[4].iString = -1; - ok(SendMessage(*hToolbar, TB_ADDBUTTONS, 5, (LPARAM)buttons) == 1, "TB_ADDBUTTONS failed\n"); - ok(SendMessage(*hToolbar, TB_AUTOSIZE, 0, 0) == 0, "TB_AUTOSIZE failed\n"); -} - - -#define CHECK_IMAGELIST(count, dx, dy) { \ - int cx, cy; \ - HIMAGELIST himl = (HIMAGELIST)SendMessageA(hToolbar, TB_GETIMAGELIST, 0, 0); \ - ok(himl != NULL, "No image list\n"); \ - if (himl != NULL) {\ - ok(ImageList_GetImageCount(himl) == count, "Images count mismatch - %d vs %d\n", count, ImageList_GetImageCount(himl)); \ - ImageList_GetIconSize(himl, &cx, &cy); \ - ok(cx == dx && cy == dy, "Icon size mismatch - %dx%d vs %dx%d\n", dx, dy, cx, cy); \ - } \ -} - -static void test_add_bitmap(void) -{ - HWND hToolbar = NULL; - TBADDBITMAP bmp128; - TBADDBITMAP bmp80; - TBADDBITMAP stdsmall; - TBADDBITMAP addbmp; - HIMAGELIST himl; - INT ret; - - /* empty 128x15 bitmap */ - bmp128.hInst = GetModuleHandle(NULL); - bmp128.nID = IDB_BITMAP_128x15; - - /* empty 80x15 bitmap */ - bmp80.hInst = GetModuleHandle(NULL); - bmp80.nID = IDB_BITMAP_80x15; - - /* standard bitmap - 240x15 pixels */ - stdsmall.hInst = HINST_COMMCTRL; - stdsmall.nID = IDB_STD_SMALL_COLOR; - - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 8, (LPARAM)&bmp128) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(8, 16, 16); - - /* adding more bitmaps */ - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 5, (LPARAM)&bmp80) == 8, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(13, 16, 16); - /* adding the same bitmap will simply return the index of the already loaded block */ - ret = SendMessageA(hToolbar, TB_ADDBITMAP, 8, (LPARAM)&bmp128); - ok(ret == 0, "TB_ADDBITMAP - unexpected return %d\n", ret); - CHECK_IMAGELIST(13, 16, 16); - ret = SendMessageA(hToolbar, TB_ADDBITMAP, 5, (LPARAM)&bmp80); - ok(ret == 8, "TB_ADDBITMAP - unexpected return %d\n", ret); - CHECK_IMAGELIST(13, 16, 16); - /* even if we increase the wParam */ - ret = SendMessageA(hToolbar, TB_ADDBITMAP, 55, (LPARAM)&bmp80); - ok(ret == 8, "TB_ADDBITMAP - unexpected return %d\n", ret); - CHECK_IMAGELIST(13, 16, 16); - - /* when the wParam is smaller than the bitmaps count but non-zero, all the bitmaps will be added*/ - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 3, (LPARAM)&bmp128) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(8, 16, 16); - ret = SendMessageA(hToolbar, TB_ADDBITMAP, 5, (LPARAM)&bmp80); - ok(ret == 3, "TB_ADDBITMAP - unexpected return %d\n", ret); - /* the returned value is misleading - id 8 is the id of the first icon from bmp80 */ - CHECK_IMAGELIST(13, 16, 16); - - /* the same for negative wParam */ - rebuild_toolbar(&hToolbar); - ret = SendMessageA(hToolbar, TB_ADDBITMAP, -143, (LPARAM)&bmp128); - ok(ret == 0, "TB_ADDBITMAP - unexpected return %d\n", ret); - CHECK_IMAGELIST(8, 16, 16); - ret = SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&bmp80); - ok(ret == -143, "TB_ADDBITMAP - unexpected return %d\n", ret); - CHECK_IMAGELIST(13, 16, 16); - - /* for zero only one bitmap will be added */ - rebuild_toolbar(&hToolbar); - ret = SendMessageA(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&bmp80); - ok(ret == 0, "TB_ADDBITMAP - unexpected return %d\n", ret); - CHECK_IMAGELIST(1, 16, 16); - - /* if wParam is larger than the amount of icons, the list is grown */ - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 100, (LPARAM)&bmp80) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(100, 16, 16); - ret = SendMessageA(hToolbar, TB_ADDBITMAP, 100, (LPARAM)&bmp128); - ok(ret == 100, "TB_ADDBITMAP - unexpected return %d\n", ret); - CHECK_IMAGELIST(200, 16, 16); - - /* adding built-in items - the wParam is ignored */ - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 5, (LPARAM)&bmp80) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(5, 16, 16); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&stdsmall) == 5, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(20, 16, 16); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 5, (LPARAM)&bmp128) == 20, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(28, 16, 16); - - /* when we increase the bitmap size, less icons will be created */ - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(20, 20)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&bmp128) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(6, 20, 20); - ret = SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&bmp80); - ok(ret == 1, "TB_ADDBITMAP - unexpected return %d\n", ret); - CHECK_IMAGELIST(10, 20, 20); - /* the icons can be resized - an UpdateWindow is needed as this probably happens during WM_PAINT */ - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(8, 8)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - CHECK_IMAGELIST(26, 8, 8); - /* loading a standard bitmaps automatically resizes the icons */ - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&stdsmall) == 2, "TB_ADDBITMAP - unexpected return\n"); - UpdateWindow(hToolbar); - CHECK_IMAGELIST(28, 16, 16); - - /* two more SETBITMAPSIZE tests */ - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 100, (LPARAM)&bmp128) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(100, 16, 16); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 100, (LPARAM)&bmp80) == 100, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(200, 16, 16); - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(8, 8)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - CHECK_IMAGELIST(200, 8, 8); - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(30, 30)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - CHECK_IMAGELIST(200, 30, 30); - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 5, (LPARAM)&bmp128) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(8, 16, 16); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 3, (LPARAM)&bmp80) == 5, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(13, 16, 16); - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(30, 30)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - CHECK_IMAGELIST(8, 30, 30); - /* when the width or height is zero, set it to 1 */ - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(0, 0)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - CHECK_IMAGELIST(208, 1, 1); - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(0, 5)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - CHECK_IMAGELIST(208, 1, 5); - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(5, 0)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - CHECK_IMAGELIST(41, 5, 1); - - /* the control can add bitmaps to an existing image list */ - rebuild_toolbar(&hToolbar); - himl = ImageList_LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP_80x15), 20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR); - ok(himl != NULL, "failed to create imagelist\n"); - ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n"); - CHECK_IMAGELIST(4, 20, 15); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&bmp128) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(10, 20, 15); - /* however TB_SETBITMAPSIZE/add std bitmap won't change the image size (the button size does change) */ - ok(SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(8, 8)) == TRUE, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), MAKELONG(15, 14), "%x"); - CHECK_IMAGELIST(10, 20, 15); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&stdsmall) == 1, "TB_SETBITMAPSIZE failed\n"); - UpdateWindow(hToolbar); - compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), MAKELONG(23, 22), "%x"); - CHECK_IMAGELIST(22, 20, 15); - - /* check standard bitmaps */ - addbmp.hInst = HINST_COMMCTRL; - addbmp.nID = IDB_STD_SMALL_COLOR; - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(15, 16, 16); - compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), MAKELONG(23, 22), "%x"); - addbmp.nID = IDB_STD_LARGE_COLOR; - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(15, 24, 24); - compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), MAKELONG(31, 30), "%x"); - - addbmp.nID = IDB_VIEW_SMALL_COLOR; - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(12, 16, 16); - addbmp.nID = IDB_VIEW_LARGE_COLOR; - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(12, 24, 24); - - addbmp.nID = IDB_HIST_SMALL_COLOR; - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(5, 16, 16); - addbmp.nID = IDB_HIST_LARGE_COLOR; - rebuild_toolbar(&hToolbar); - ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n"); - CHECK_IMAGELIST(5, 24, 24); - - - DestroyWindow(hToolbar); -} - -#define CHECK_STRING_TABLE(count, tab) { \ - INT _i; \ - CHAR _buf[260]; \ - for (_i = 0; _i < (count); _i++) {\ - ret = SendMessageA(hToolbar, TB_GETSTRING, MAKEWPARAM(260, _i), (LPARAM)_buf); \ - ok(ret >= 0, "TB_GETSTRING - unexpected return %d while checking string %d\n", ret, _i); \ - if (ret >= 0) \ - ok(strcmp(_buf, (tab)[_i]) == 0, "Invalid string #%d - '%s' vs '%s'\n", _i, (tab)[_i], _buf); \ - } \ - ok(SendMessageA(hToolbar, TB_GETSTRING, MAKEWPARAM(260, (count)), (LPARAM)_buf) == -1, \ - "Too many string in table\n"); \ - } - -static void test_add_string(void) -{ - LPCSTR test1 = "a\0b\0"; - LPCSTR test2 = "|a|b||\0"; - LPCSTR ret1[] = {"a", "b"}; - LPCSTR ret2[] = {"a", "b", "|a|b||"}; - LPCSTR ret3[] = {"a", "b", "|a|b||", "p", "q"}; - LPCSTR ret4[] = {"a", "b", "|a|b||", "p", "q", "p"}; - LPCSTR ret5[] = {"a", "b", "|a|b||", "p", "q", "p", "p", "q"}; - LPCSTR ret6[] = {"a", "b", "|a|b||", "p", "q", "p", "p", "q", "p", "", "q"}; - LPCSTR ret7[] = {"a", "b", "|a|b||", "p", "q", "p", "p", "q", "p", "", "q", "br", "c", "d"}; - HWND hToolbar = NULL; - TBBUTTON button; - int ret; - - rebuild_toolbar(&hToolbar); - ret = SendMessageA(hToolbar, TB_ADDSTRINGA, 0, (LPARAM)test1); - ok(ret == 0, "TB_ADDSTRINGA - unexpected return %d\n", ret); - CHECK_STRING_TABLE(2, ret1); - ret = SendMessageA(hToolbar, TB_ADDSTRINGA, 0, (LPARAM)test2); - ok(ret == 2, "TB_ADDSTRINGA - unexpected return %d\n", ret); - CHECK_STRING_TABLE(3, ret2); - - ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD1); - ok(ret == 3, "TB_ADDSTRINGA - unexpected return %d\n", ret); - CHECK_STRING_TABLE(3, ret2); - ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD2); - ok(ret == 3, "TB_ADDSTRINGA - unexpected return %d\n", ret); - CHECK_STRING_TABLE(5, ret3); - ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD3); - ok(ret == 5, "TB_ADDSTRINGA - unexpected return %d\n", ret); - CHECK_STRING_TABLE(6, ret4); - ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD4); - ok(ret == 6, "TB_ADDSTRINGA - unexpected return %d\n", ret); - CHECK_STRING_TABLE(8, ret5); - ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD5); - ok(ret == 8, "TB_ADDSTRINGA - unexpected return %d\n", ret); - CHECK_STRING_TABLE(11, ret6); - ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD7); - ok(ret == 11, "TB_ADDSTRINGA - unexpected return %d\n", ret); - CHECK_STRING_TABLE(14, ret7); - - ZeroMemory(&button, sizeof(button)); - button.iString = (UINT_PTR)"Test"; - SendMessageA(hToolbar, TB_INSERTBUTTONA, 0, (LPARAM)&button); - CHECK_STRING_TABLE(14, ret7); - SendMessageA(hToolbar, TB_ADDBUTTONSA, 1, (LPARAM)&button); - CHECK_STRING_TABLE(14, ret7); - - DestroyWindow(hToolbar); -} - -static void expect_hot_notify(int idold, int idnew) -{ - g_fExpectedHotItemOld = idold; - g_fExpectedHotItemNew = idnew; - g_fReceivedHotItemChange = FALSE; -} - -#define check_hot_notify() \ - ok(g_fReceivedHotItemChange, "TBN_HOTITEMCHANGE not received\n"); \ - g_fExpectedHotItemOld = g_fExpectedHotItemNew = 0; - -static void test_hotitem(void) -{ - HWND hToolbar = NULL; - TBBUTTONINFO tbinfo; - LRESULT ret; - - g_fBlockHotItemChange = FALSE; - - rebuild_toolbar_with_buttons(&hToolbar); - /* set TBSTYLE_FLAT. comctl5 allows hot items only for such toolbars. - * comctl6 doesn't have this requirement even when theme == NULL */ - SetWindowLong(hToolbar, GWL_STYLE, TBSTYLE_FLAT | GetWindowLong(hToolbar, GWL_STYLE)); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == -1, "Hot item: %ld, expected -1\n", ret); - ret = SendMessage(hToolbar, TB_SETHOTITEM, 1, 0); - ok(ret == -1, "TB_SETHOTITEM returned %ld, expected -1\n", ret); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == 1, "Hot item: %ld, expected 1\n", ret); - ret = SendMessage(hToolbar, TB_SETHOTITEM, 2, 0); - ok(ret == 1, "TB_SETHOTITEM returned %ld, expected 1\n", ret); - - ret = SendMessage(hToolbar, TB_SETHOTITEM, 0xbeef, 0); - ok(ret == 2, "TB_SETHOTITEM returned %ld, expected 2\n", ret); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == 2, "Hot item: %lx, expected 2\n", ret); - ret = SendMessage(hToolbar, TB_SETHOTITEM, -0xbeef, 0); - ok(ret == 2, "TB_SETHOTITEM returned %ld, expected 2\n", ret); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == -1, "Hot item: %lx, expected -1\n", ret); - - expect_hot_notify(0, 7); - ret = SendMessage(hToolbar, TB_SETHOTITEM, 3, 0); - ok(ret == -1, "TB_SETHOTITEM returned %ld, expected -1\n", ret); - check_hot_notify(); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == 3, "Hot item: %lx, expected 3\n", ret); - g_fBlockHotItemChange = TRUE; - ret = SendMessage(hToolbar, TB_SETHOTITEM, 2, 0); - ok(ret == 3, "TB_SETHOTITEM returned %ld, expected 2\n", ret); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == 3, "Hot item: %lx, expected 3\n", ret); - g_fBlockHotItemChange = FALSE; - - g_fReceivedHotItemChange = FALSE; - ret = SendMessage(hToolbar, TB_SETHOTITEM, 0xbeaf, 0); - ok(ret == 3, "TB_SETHOTITEM returned %ld, expected 3\n", ret); - ok(g_fReceivedHotItemChange == FALSE, "TBN_HOTITEMCHANGE received for invalid parameter\n"); - - g_fReceivedHotItemChange = FALSE; - ret = SendMessage(hToolbar, TB_SETHOTITEM, 3, 0); - ok(ret == 3, "TB_SETHOTITEM returned %ld, expected 3\n", ret); - ok(g_fReceivedHotItemChange == FALSE, "TBN_HOTITEMCHANGE received after a duplication\n"); - - expect_hot_notify(7, 0); - ret = SendMessage(hToolbar, TB_SETHOTITEM, -0xbeaf, 0); - ok(ret == 3, "TB_SETHOTITEM returned %ld, expected 3\n", ret); - check_hot_notify(); - SendMessage(hToolbar, TB_SETHOTITEM, 3, 0); - - /* setting disabled buttons will generate a notify with the button id but no button will be hot */ - expect_hot_notify(7, 9); - ret = SendMessage(hToolbar, TB_SETHOTITEM, 4, 0); - ok(ret == 3, "TB_SETHOTITEM returned %ld, expected 3\n", ret); - check_hot_notify(); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == -1, "Hot item: %lx, expected -1\n", ret); - /* enabling the button won't change that */ - SendMessage(hToolbar, TB_ENABLEBUTTON, 9, TRUE); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == -1, "TB_SETHOTITEM returned %ld, expected -1\n", ret); - - /* disabling a hot button works */ - ret = SendMessage(hToolbar, TB_SETHOTITEM, 3, 0); - ok(ret == -1, "TB_SETHOTITEM returned %ld, expected -1\n", ret); - g_fReceivedHotItemChange = FALSE; - SendMessage(hToolbar, TB_ENABLEBUTTON, 7, FALSE); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == 3, "TB_SETHOTITEM returned %ld, expected 3\n", ret); - ok(g_fReceivedHotItemChange == FALSE, "Unexpected TBN_HOTITEMCHANGE\n"); - - SendMessage(hToolbar, TB_SETHOTITEM, 1, 0); - tbinfo.cbSize = sizeof(TBBUTTONINFO); - tbinfo.dwMask = TBIF_STATE; - tbinfo.fsState = 0; /* disabled */ - g_fReceivedHotItemChange = FALSE; - ok(SendMessage(hToolbar, TB_SETBUTTONINFO, 1, (LPARAM)&tbinfo) == TRUE, "TB_SETBUTTONINFO failed\n"); - ret = SendMessage(hToolbar, TB_GETHOTITEM, 0, 0); - ok(ret == 1, "TB_SETHOTITEM returned %ld, expected 1\n", ret); - ok(g_fReceivedHotItemChange == FALSE, "Unexpected TBN_HOTITEMCHANGE\n"); - - DestroyWindow(hToolbar); -} - -#if 0 /* use this to generate more tests*/ - -static void dump_sizes(HWND hToolbar) -{ - SIZE sz; - RECT r; - int count = SendMessage(hToolbar, TB_BUTTONCOUNT, 0, 0); - int i; - - GetClientRect(hToolbar, &r); - SendMessageA(hToolbar, TB_GETMAXSIZE, 0, &sz); - printf(" { {%d, %d, %d, %d}, {%d, %d}, %d, {", r.left, r.top, r.right, r.bottom, - sz.cx, sz.cy, count); - for (i=0; ircClient);*/ \ - buttonCount = SendMessage(hToolbar, TB_BUTTONCOUNT, 0, 0); \ - compare(buttonCount, res->nButtons, "%d"); \ - for (i=0; inButtons); i++) { \ - ok(SendMessageA(hToolbar, TB_GETITEMRECT, i, (LPARAM)&rc) == 1, "TB_GETITEMRECT\n"); \ - if (!(mask&1)) { \ - check_rect("button", rc, res->rcButtons[i]); \ - } else {\ - todo_wine { check_rect("button", rc, res->rcButtons[i]); } \ - } \ - mask >>= 1; \ - } \ - tbsize_numtests++; \ - } - -#define check_sizes() check_sizes_todo(0) - -#endif - -static TBBUTTON buttons1[] = { - {0, 10, TBSTATE_WRAP|TBSTATE_ENABLED, 0, {0, }, 0, -1}, - {0, 11, 0, 0, {0, }, 0, -1}, -}; -static TBBUTTON buttons2[] = { - {0, 20, TBSTATE_ENABLED, 0, {0, }, 0, -1}, - {0, 21, TBSTATE_ENABLED, 0, {0, }, 0, -1}, -}; -static TBBUTTON buttons3[] = { - {0, 30, TBSTATE_ENABLED, 0, {0, }, 0, 0}, - {0, 31, TBSTATE_ENABLED, 0, {0, }, 0, 1}, - {0, 32, TBSTATE_ENABLED, BTNS_AUTOSIZE, {0, }, 0, 1}, - {0, 33, TBSTATE_ENABLED, BTNS_AUTOSIZE, {0, }, 0, (UINT_PTR)"Tst"} -}; - -static void test_sizes(void) -{ - HWND hToolbar = NULL; - HIMAGELIST himl; - int style; - int i; - - rebuild_toolbar_with_buttons(&hToolbar); - style = GetWindowLong(hToolbar, GWL_STYLE); - ok(style == (WS_CHILD|WS_VISIBLE|CCS_TOP), "Invalid style %x\n", style); - check_sizes(); - /* the TBSTATE_WRAP makes a second row */ - SendMessageA(hToolbar, TB_ADDBUTTONS, 2, (LPARAM)buttons1); - check_sizes(); - SendMessageA(hToolbar, TB_AUTOSIZE, 0, 0); - check_sizes(); - /* after setting the TBSTYLE_WRAPABLE the TBSTATE_WRAP is ignored */ - SetWindowLong(hToolbar, GWL_STYLE, style|TBSTYLE_WRAPABLE); - check_sizes(); - /* adding new buttons with TBSTYLE_WRAPABLE doesn't add a new row */ - SendMessageA(hToolbar, TB_ADDBUTTONS, 2, (LPARAM)buttons1); - check_sizes(); - /* only after adding enough buttons the bar will be wrapped on a - * separator and then on the first button */ - for (i=0; i<15; i++) - SendMessageA(hToolbar, TB_ADDBUTTONS, 2, (LPARAM)buttons1); - check_sizes_todo(0x4); - - rebuild_toolbar_with_buttons(&hToolbar); - SendMessageA(hToolbar, TB_ADDBUTTONS, 2, (LPARAM)buttons1); - /* setting the buttons vertical will only change the window client size */ - SetWindowLong(hToolbar, GWL_STYLE, style | CCS_VERT); - SendMessage(hToolbar, TB_AUTOSIZE, 0, 0); - check_sizes_todo(0x3c); - /* with a TBSTYLE_WRAPABLE a wrapping will occur on the separator */ - SetWindowLong(hToolbar, GWL_STYLE, style | TBSTYLE_WRAPABLE | CCS_VERT); - SendMessage(hToolbar, TB_AUTOSIZE, 0, 0); - check_sizes_todo(0x7c); - - rebuild_toolbar_with_buttons(&hToolbar); - SendMessageA(hToolbar, TB_ADDBUTTONS, 2, (LPARAM)buttons1); - /* a TB_SETBITMAPSIZE changes button sizes*/ - SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(24, 24)); - check_sizes(); - - /* setting a TBSTYLE_FLAT doesn't change anything - even after a TB_AUTOSIZE */ - SetWindowLong(hToolbar, GWL_STYLE, style | TBSTYLE_FLAT); - SendMessageA(hToolbar, TB_AUTOSIZE, 0, 0); - check_sizes(); - /* but after a TB_SETBITMAPSIZE the top margins is changed */ - SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(20, 20)); - SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(24, 24)); - check_sizes(); - /* some vertical toolbar sizes */ - SetWindowLong(hToolbar, GWL_STYLE, style | TBSTYLE_FLAT | TBSTYLE_WRAPABLE | CCS_VERT); - check_sizes_todo(0x7c); - - rebuild_toolbar_with_buttons(&hToolbar); - SetWindowLong(hToolbar, GWL_STYLE, style | TBSTYLE_FLAT); - /* newly added buttons will be use the previous margin */ - SendMessageA(hToolbar, TB_ADDBUTTONS, 2, (LPARAM)buttons2); - check_sizes(); - /* TB_SETBUTTONSIZE can't be used to reduce the size of a button below the default */ - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 22), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(22, 21))==1, "TB_SETBUTTONSIZE\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 22), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(5, 100))==1, "TB_SETBUTTONSIZE\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 100), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(3, 3))==1, "TB_SETBUTTONSIZE\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 22), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(5, 100))==1, "TB_SETBUTTONSIZE\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 100), "Unexpected button size\n"); - check_sizes(); - /* add some buttons with non-default sizes */ - SendMessageA(hToolbar, TB_ADDBUTTONS, 2, (LPARAM)buttons2); - SendMessageA(hToolbar, TB_INSERTBUTTON, -1, (LPARAM)&buttons2[0]); - check_sizes(); - SendMessageA(hToolbar, TB_ADDBUTTONS, 1, (LPARAM)&buttons3[0]); - /* TB_ADDSTRING resets the size */ - SendMessageA(hToolbar, TB_ADDSTRING, 0, (LPARAM)"A\0MMMMMMMMMMMMM\0"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 39), "Unexpected button size\n"); - check_sizes(); - /* TB_SETBUTTONSIZE can be used to crop the text */ - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(3, 3)); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 22), "Unexpected button size\n"); - check_sizes(); - /* the default size is bitmap size + padding */ - SendMessageA(hToolbar, TB_SETPADDING, 0, MAKELONG(1, 1)); - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(3, 3)); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(17, 17), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(3, 3)); - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(3, 3)); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(4, 4), "Unexpected button size\n"); - - rebuild_toolbar(&hToolbar); - /* sending a TB_SETBITMAPSIZE with the same sizes is enough to make the button smaller */ - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 22), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_SETBITMAPSIZE, 0, MAKELONG(16, 15)); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 21), "Unexpected button size\n"); - - rebuild_toolbar(&hToolbar); - SendMessageA(hToolbar, TB_ADDSTRINGA, 0, (LPARAM)"A\0MMMMMMMMMMMMM\0"); - /* the height is increased after a TB_ADDSTRING */ - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 39), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100)); - /* if a string is in the pool, even adding a button without a string resets the size */ - SendMessageA(hToolbar, TB_ADDBUTTONS, 1, (LPARAM)&buttons2[0]); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 22), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100)); - /* an BTNS_AUTOSIZE button is also considered when computing the new size */ - SendMessageA(hToolbar, TB_ADDBUTTONS, 1, (LPARAM)&buttons3[2]); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(163, 39), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_ADDBUTTONS, 1, (LPARAM)&buttons3[0]); - check_sizes(); - /* delete button doesn't change the buttons size */ - SendMessageA(hToolbar, TB_DELETEBUTTON, 2, 0); - SendMessageA(hToolbar, TB_DELETEBUTTON, 1, 0); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(163, 39), "Unexpected button size\n"); - /* TB_INSERTBUTTONS will */ - SendMessageA(hToolbar, TB_INSERTBUTTON, 1, (LPARAM)&buttons2[0]); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 22), "Unexpected button size\n"); - - /* TB_HIDEBUTTON and TB_MOVEBUTTON doesn't force a recalc */ - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100)); - ok(SendMessageA(hToolbar, TB_MOVEBUTTON, 0, 1), "TB_MOVEBUTTON failed\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(100, 100), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_HIDEBUTTON, 20, TRUE), "TB_HIDEBUTTON failed\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(100, 100), "Unexpected button size\n"); - /* however changing the hidden flag with TB_SETSTATE does */ - ok(SendMessageA(hToolbar, TB_SETSTATE, 20, TBSTATE_ENABLED|TBSTATE_HIDDEN), "TB_SETSTATE failed\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(100, 100), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_SETSTATE, 20, TBSTATE_ENABLED), "TB_SETSTATE failed\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(23, 22), "Unexpected button size\n"); - - /* TB_SETIMAGELIST always changes the height but the width only if necessary */ - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100)); - himl = ImageList_LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP_80x15), 20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR); - ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(100, 21), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100)); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(100, 100), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(1, 1)); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(27, 21), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, 0) == (LRESULT)himl, "TB_SETIMAGELIST failed\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(27, 7), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(1, 1)); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(8, 7), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(27, 21), "Unexpected button size\n"); - /* the text is taken into account */ - SendMessageA(hToolbar, TB_ADDSTRINGA, 0, (LPARAM)"A\0MMMMMMMMMMMMM\0"); - SendMessageA(hToolbar, TB_ADDBUTTONS, 4, (LPARAM)buttons3); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(163, 38), "Unexpected button size\n"); - ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, 0) == (LRESULT)himl, "TB_SETIMAGELIST failed\n"); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(163, 24), "Unexpected button size\n"); - /* the style change also comes into effect */ - check_sizes(); - SetWindowLong(hToolbar, GWL_STYLE, GetWindowLong(hToolbar, GWL_STYLE) | TBSTYLE_FLAT); - ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n"); - check_sizes_todo(0x30); /* some small problems with BTNS_AUTOSIZE button sizes */ - - rebuild_toolbar(&hToolbar); - ImageList_Destroy(himl); - - SendMessageA(hToolbar, TB_ADDBUTTONS, 1, (LPARAM)&buttons3[3]); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(27, 39), "Unexpected button size\n"); - SendMessageA(hToolbar, TB_DELETEBUTTON, 0, 0); - ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(27, 39), "Unexpected button size\n"); - - DestroyWindow(hToolbar); -} - -static void test_getbuttoninfo(void) -{ - HWND hToolbar = NULL; - int i; - - rebuild_toolbar_with_buttons(&hToolbar); - for (i = 0; i < 128; i++) - { - TBBUTTONINFO tbi; - int ret; - - tbi.cbSize = i; - tbi.dwMask = TBIF_BYINDEX | TBIF_COMMAND; - ret = (int)SendMessage(hToolbar, TB_GETBUTTONINFO, 0, (LPARAM)&tbi); - if (i == sizeof(TBBUTTONINFO)) { - compare(ret, 0, "%d"); - } else { - compare(ret, -1, "%d"); - } - } - DestroyWindow(hToolbar); -} - -static void test_createtoolbarex(void) -{ - HWND hToolbar; - TBBUTTON btns[3]; - ZeroMemory(&btns, sizeof(btns)); - - hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, - 3, 20, 20, 16, 16, sizeof(TBBUTTON)); - CHECK_IMAGELIST(16, 20, 20); - compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x1a001b, "%x"); - DestroyWindow(hToolbar); - - hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, - 3, 4, 4, 16, 16, sizeof(TBBUTTON)); - CHECK_IMAGELIST(32, 4, 4); - compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xa000b, "%x"); - DestroyWindow(hToolbar); - - hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, - 3, 0, 8, 12, 12, sizeof(TBBUTTON)); - CHECK_IMAGELIST(16, 12, 12); - compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x120013, "%x"); - DestroyWindow(hToolbar); - - hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, - 3, -1, 8, 12, 12, sizeof(TBBUTTON)); - CHECK_IMAGELIST(16, 12, 8); - compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0013, "%x"); - DestroyWindow(hToolbar); - - hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, - 3, -1, 8, -1, 12, sizeof(TBBUTTON)); - CHECK_IMAGELIST(16, 16, 8); - compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0017, "%x"); - DestroyWindow(hToolbar); - - hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, - 3, 0, 0, 12, -1, sizeof(TBBUTTON)); - CHECK_IMAGELIST(16, 12, 16); - compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x160013, "%x"); - DestroyWindow(hToolbar); - - hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, - 3, 0, 0, 0, 12, sizeof(TBBUTTON)); - CHECK_IMAGELIST(16, 16, 16); - compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x160017, "%x"); - DestroyWindow(hToolbar); -} - -static void test_dispinfo(void) -{ - HWND hToolbar = NULL; - const TBBUTTON buttons_disp[] = { - {-1, 20, TBSTATE_ENABLED, 0, {0, }, 0, -1}, - {0, 21, TBSTATE_ENABLED, 0, {0, }, 0, -1}, - }; - BOOL ret; - - rebuild_toolbar(&hToolbar); - SendMessageA(hToolbar, TB_LOADIMAGES, IDB_HIST_SMALL_COLOR, (LPARAM)HINST_COMMCTRL); - SendMessageA(hToolbar, TB_ADDBUTTONS, 2, (LPARAM)buttons_disp); - g_dwExpectedDispInfoMask = 1; - /* Some TBN_GETDISPINFO tests will be done in MyWnd_Notify function. - * We will receive TBN_GETDISPINFOW even if the control is ANSI */ - compare((BOOL)SendMessageA(hToolbar, CCM_GETUNICODEFORMAT, 0, 0), 0, "%d"); - ShowWindow(hToolbar, SW_SHOW); - UpdateWindow(hToolbar); - - ret = (BOOL)SendMessageA(hToolbar, CCM_SETUNICODEFORMAT, TRUE, 0); - compare(ret, FALSE, "%d"); - compare(SendMessageA(hToolbar, CCM_GETUNICODEFORMAT, 0, 0), 1L, "%ld"); - InvalidateRect(hToolbar, NULL, FALSE); - UpdateWindow(hToolbar); - - ret = (BOOL)SendMessageA(hToolbar, CCM_SETUNICODEFORMAT, FALSE, 0); - compare(ret, TRUE, "%d"); - compare(SendMessageA(hToolbar, CCM_GETUNICODEFORMAT, 0, 0), 0L, "%ld"); - InvalidateRect(hToolbar, NULL, FALSE); - UpdateWindow(hToolbar); - - DestroyWindow(hToolbar); - g_dwExpectedDispInfoMask = 0; -} - -typedef struct -{ - int nRows; - BOOL bLarger; - int expectedRows; -} tbrows_result_t; - -static tbrows_result_t tbrows_results[] = -{ - {1, TRUE, 1}, /* 0: Simple case 9 in a row */ - {2, TRUE, 2}, /* 1: Another simple case 5 on one row, 4 on another*/ - {3, FALSE, 3}, /* 2: 3 lines - should be 3 lines of 3 buttons */ - {8, FALSE, 5}, /* 3: 8 lines - should be 5 lines of 2 buttons */ - {8, TRUE, 9}, /* 4: 8 lines but grow - should be 9 lines */ - {1, TRUE, 1} /* 5: Back to simple case */ -}; - -static void test_setrows(void) -{ - TBBUTTON buttons[9]; - HWND hToolbar; - int i; - - for (i=0; i<9; i++) - MakeButton(buttons+i, 1000+i, TBSTYLE_FLAT | TBSTYLE_CHECKGROUP, 0); - - /* Test 1 - 9 buttons */ - hToolbar = CreateToolbarEx(hMainWnd, - WS_VISIBLE | WS_CLIPCHILDREN | WS_CHILD | CCS_NORESIZE | CCS_NOPARENTALIGN - | CCS_NOMOVEY | CCS_TOP, - 0, - 0, NULL, (UINT)0, - buttons, sizeof(buttons)/sizeof(buttons[0]), - 20, 20, 0, 0, sizeof(TBBUTTON)); - ok(hToolbar != NULL, "Toolbar creation\n"); - ok(SendMessageA(hToolbar, TB_AUTOSIZE, 0, 0) == 0, "TB_AUTOSIZE failed\n"); - - /* test setting rows to each of 1-10 with bLarger true and false */ - for (i=0; i<(sizeof(tbrows_results) / sizeof(tbrows_result_t)); i++) { - RECT rc; - int rows; - - memset(&rc, 0xCC, sizeof(rc)); - SendMessageA(hToolbar, TB_SETROWS, - MAKELONG(tbrows_results[i].nRows, tbrows_results[i].bLarger), - (LONG) &rc); - - rows = SendMessageA(hToolbar, TB_GETROWS, MAKELONG(0,0), MAKELONG(0,0)); - ok(rows == tbrows_results[i].expectedRows, - "[%d] Unexpected number of rows %d (expected %d)\n", i, rows, - tbrows_results[i].expectedRows); - } - - DestroyWindow(hToolbar); -} - -static void test_getstring(void) -{ - HWND hToolbar = NULL; - char str[10]; - WCHAR strW[10]; - static const char answer[] = "STR"; - static const WCHAR answerW[] = { 'S','T','R',0 }; - INT r; - - hToolbar = CreateWindowExA(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hMainWnd, (HMENU)5, GetModuleHandle(NULL), NULL); - ok(hToolbar != NULL, "Toolbar creation problem\n"); - - r = SendMessage(hToolbar, TB_GETSTRING, MAKEWPARAM(0, 0), (LPARAM)NULL); - expect(-1, r); - r = SendMessage(hToolbar, TB_GETSTRINGW, MAKEWPARAM(0, 0), (LPARAM)NULL); - expect(-1, r); - r = SendMessage(hToolbar, TB_ADDSTRING, 0, (LPARAM)answer); - expect(0, r); - r = SendMessage(hToolbar, TB_GETSTRING, MAKEWPARAM(0, 0), (LPARAM)NULL); - expect(lstrlenA(answer), r); - r = SendMessage(hToolbar, TB_GETSTRINGW, MAKEWPARAM(0, 0), (LPARAM)NULL); - expect(lstrlenA(answer), r); - r = SendMessage(hToolbar, TB_GETSTRING, MAKEWPARAM(sizeof(str), 0), (LPARAM)str); - expect(lstrlenA(answer), r); - expect(0, lstrcmp(answer, str)); - r = SendMessage(hToolbar, TB_GETSTRINGW, MAKEWPARAM(sizeof(strW), 0), (LPARAM)strW); - expect(lstrlenA(answer), r); - expect(0, lstrcmpW(answerW, strW)); - - DestroyWindow(hToolbar); -} - -START_TEST(toolbar) -{ - WNDCLASSA wc; - MSG msg; - RECT rc; - - InitCommonControls(); - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_IBEAM); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = "MyTestWnd"; - wc.lpfnWndProc = MyWndProc; - RegisterClassA(&wc); - - hMainWnd = CreateWindowExA(0, "MyTestWnd", "Blah", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, GetModuleHandleA(NULL), 0); - GetClientRect(hMainWnd, &rc); - ShowWindow(hMainWnd, SW_SHOW); - - basic_test(); - test_add_bitmap(); - test_add_string(); - test_hotitem(); - test_sizes(); - test_getbuttoninfo(); - test_createtoolbarex(); - test_dispinfo(); - test_setrows(); - test_getstring(); - - PostQuitMessage(0); - while(GetMessageA(&msg,0,0,0)) { - TranslateMessage(&msg); - DispatchMessageA(&msg); - } - DestroyWindow(hMainWnd); -} diff --git a/rostests/winetests/comctl32/tooltips.c b/rostests/winetests/comctl32/tooltips.c deleted file mode 100644 index e9bce637be8..00000000000 --- a/rostests/winetests/comctl32/tooltips.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright 2005 Dmitry Timoshkov - * Copyright 2008 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 - */ - -#include -#include -#include - -#include "wine/test.h" - -static void test_create_tooltip(void) -{ - HWND parent, hwnd; - DWORD style, exp_style; - - parent = CreateWindowEx(0, "static", NULL, WS_POPUP, - 0, 0, 0, 0, - NULL, NULL, NULL, 0); - assert(parent); - - hwnd = CreateWindowEx(0, TOOLTIPS_CLASS, NULL, 0x7fffffff | WS_POPUP, - 10, 10, 300, 100, - parent, NULL, NULL, 0); - assert(hwnd); - - style = GetWindowLong(hwnd, GWL_STYLE); - trace("style = %08x\n", style); - exp_style = 0x7fffffff | WS_POPUP; - exp_style &= ~(WS_CHILD | WS_MAXIMIZE | WS_BORDER | WS_DLGFRAME); - ok(style == exp_style,"wrong style %08x/%08x\n", style, exp_style); - - DestroyWindow(hwnd); - - hwnd = CreateWindowEx(0, TOOLTIPS_CLASS, NULL, 0, - 10, 10, 300, 100, - parent, NULL, NULL, 0); - assert(hwnd); - - style = GetWindowLong(hwnd, GWL_STYLE); - trace("style = %08x\n", style); - ok(style == (WS_POPUP | WS_CLIPSIBLINGS | WS_BORDER), - "wrong style %08x\n", style); - - DestroyWindow(hwnd); - - DestroyWindow(parent); -} - -/* try to make sure pending X events have been processed before continuing */ -static void flush_events(int waitTime) -{ - MSG msg; - int diff = waitTime; - DWORD time = GetTickCount() + waitTime; - - while (diff > 0) - { - if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min(100,diff), QS_ALLEVENTS) == WAIT_TIMEOUT) break; - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - diff = time - GetTickCount(); - } -} - -static int CD_Stages; -static LRESULT CD_Result; -static HWND g_hwnd; - -#define TEST_CDDS_PREPAINT 0x00000001 -#define TEST_CDDS_POSTPAINT 0x00000002 -#define TEST_CDDS_PREERASE 0x00000004 -#define TEST_CDDS_POSTERASE 0x00000008 -#define TEST_CDDS_ITEMPREPAINT 0x00000010 -#define TEST_CDDS_ITEMPOSTPAINT 0x00000020 -#define TEST_CDDS_ITEMPREERASE 0x00000040 -#define TEST_CDDS_ITEMPOSTERASE 0x00000080 -#define TEST_CDDS_SUBITEM 0x00000100 - -static LRESULT CALLBACK CustomDrawWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - - case WM_DESTROY: - PostQuitMessage(0); - break; - - case WM_NOTIFY: - if (((NMHDR *)lParam)->code == NM_CUSTOMDRAW) { - NMTTCUSTOMDRAW *ttcd = (NMTTCUSTOMDRAW*) lParam; - ok(ttcd->nmcd.hdr.hwndFrom == g_hwnd, "Unexpected hwnd source %x (%x)\n", - (int)ttcd->nmcd.hdr.hwndFrom, (int) g_hwnd); - ok(ttcd->nmcd.hdr.idFrom == 0x1234ABCD, "Unexpected id %x\n", (int)ttcd->nmcd.hdr.idFrom); - - switch (ttcd->nmcd.dwDrawStage) { - case CDDS_PREPAINT : CD_Stages |= TEST_CDDS_PREPAINT; break; - case CDDS_POSTPAINT : CD_Stages |= TEST_CDDS_POSTPAINT; break; - case CDDS_PREERASE : CD_Stages |= TEST_CDDS_PREERASE; break; - case CDDS_POSTERASE : CD_Stages |= TEST_CDDS_POSTERASE; break; - case CDDS_ITEMPREPAINT : CD_Stages |= TEST_CDDS_ITEMPREPAINT; break; - case CDDS_ITEMPOSTPAINT: CD_Stages |= TEST_CDDS_ITEMPOSTPAINT; break; - case CDDS_ITEMPREERASE : CD_Stages |= TEST_CDDS_ITEMPREERASE; break; - case CDDS_ITEMPOSTERASE: CD_Stages |= TEST_CDDS_ITEMPOSTERASE; break; - case CDDS_SUBITEM : CD_Stages |= TEST_CDDS_SUBITEM; break; - default: CD_Stages = -1; - } - - if (ttcd->nmcd.dwDrawStage == CDDS_PREPAINT) return CD_Result; - } - /* drop through */ - - default: - return DefWindowProcA(hWnd, msg, wParam, lParam); - } - - return 0L; -} - -static void test_customdraw(void) { - static struct { - LRESULT FirstReturnValue; - int ExpectedCalls; - } expectedResults[] = { - /* Valid notification responses */ - {CDRF_DODEFAULT, TEST_CDDS_PREPAINT}, - {CDRF_SKIPDEFAULT, TEST_CDDS_PREPAINT}, - {CDRF_NOTIFYPOSTPAINT, TEST_CDDS_PREPAINT | TEST_CDDS_POSTPAINT}, - - /* Invalid notification responses */ - {CDRF_NOTIFYITEMDRAW, TEST_CDDS_PREPAINT}, - {CDRF_NOTIFYPOSTERASE, TEST_CDDS_PREPAINT}, - {CDRF_NOTIFYSUBITEMDRAW, TEST_CDDS_PREPAINT}, - {CDRF_NEWFONT, TEST_CDDS_PREPAINT} - }; - - int iterationNumber; - WNDCLASSA wc; - LRESULT lResult; - - /* Create a class to use the custom draw wndproc */ - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_ARROW); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = "CustomDrawClass"; - wc.lpfnWndProc = CustomDrawWndProc; - RegisterClass(&wc); - - for (iterationNumber = 0; - iterationNumber < sizeof(expectedResults)/sizeof(expectedResults[0]); - iterationNumber++) { - - HWND parent, hwndTip; - TOOLINFO toolInfo = { 0 }; - - /* Create a main window */ - parent = CreateWindowEx(0, "CustomDrawClass", NULL, - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_VISIBLE, - 50, 50, - 300, 300, - NULL, NULL, NULL, 0); - ok(parent != NULL, "Creation of main window failed\n"); - - /* Make it show */ - ShowWindow(parent, SW_SHOWNORMAL); - flush_events(100); - - /* Create Tooltip */ - hwndTip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, - NULL, TTS_NOPREFIX | TTS_ALWAYSTIP, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - parent, NULL, GetModuleHandleA(NULL), 0); - ok(hwndTip != NULL, "Creation of tooltip window failed\n"); - - /* Set up parms for the wndproc to handle */ - CD_Stages = 0; - CD_Result = expectedResults[iterationNumber].FirstReturnValue; - g_hwnd = hwndTip; - - /* Make it topmost, as per the MSDN */ - SetWindowPos(hwndTip, HWND_TOPMOST, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - - /* Create a tool */ - toolInfo.cbSize = sizeof(TOOLINFO); - toolInfo.hwnd = parent; - toolInfo.hinst = GetModuleHandleA(NULL); - toolInfo.uFlags = TTF_SUBCLASS; - toolInfo.uId = (UINT_PTR)0x1234ABCD; - toolInfo.lpszText = (LPSTR)"This is a test tooltip"; - toolInfo.lParam = 0xdeadbeef; - GetClientRect (parent, &toolInfo.rect); - lResult = SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo); - ok(lResult, "Adding the tool to the tooltip failed\n"); - - /* Make tooltip appear quickly */ - SendMessage(hwndTip, TTM_SETDELAYTIME, (WPARAM)TTDT_INITIAL, (LPARAM)MAKELONG(1,0)); - - /* Put cursor inside window, tooltip will appear immediately */ - SetCursorPos(100, 100); - flush_events(200); - - /* Check CustomDraw results */ - ok(CD_Stages == expectedResults[iterationNumber].ExpectedCalls, - "CustomDraw run %d stages %x, expected %x\n", iterationNumber, CD_Stages, - expectedResults[iterationNumber].ExpectedCalls); - - /* Clean up */ - DestroyWindow(hwndTip); - DestroyWindow(parent); - } - - -} - -START_TEST(tooltips) -{ - InitCommonControls(); - - test_create_tooltip(); - test_customdraw(); -} diff --git a/rostests/winetests/comctl32/trackbar.c b/rostests/winetests/comctl32/trackbar.c deleted file mode 100644 index 13f56fdae78..00000000000 --- a/rostests/winetests/comctl32/trackbar.c +++ /dev/null @@ -1,1012 +0,0 @@ -/* Unit tests for the track bar control. - * - * Copyright 2007 Keith Stevens - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" -#include "msg.h" - -#define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got) -#define NUM_MSG_SEQUENCE 2 -#define PARENT_SEQ_INDEX 0 -#define TRACKBAR_SEQ_INDEX 1 - - -static struct msg_sequence *sequences[NUM_MSG_SEQUENCE]; - -static const struct message create_parent_wnd_seq[] = { - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|defwinproc|optional }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent, /*|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE*/ }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { WM_SIZE, sent }, - { WM_MOVE, sent }, - { 0 } -}; - -static const struct message create_trackbar_wnd_seq[] = { - {0} -}; - -static const struct message parent_empty_test_seq[] = { - {0} -}; - -static const struct message parent_create_trackbar_wnd_seq[] = { - { WM_NOTIFYFORMAT, sent}, - { 0x0129, sent}, /* should be WM_QUERYUISTATE instead of 0x0129 */ - { WM_WINDOWPOSCHANGING, sent}, - { WM_NCACTIVATE, sent}, - { PBT_APMRESUMECRITICAL, sent}, - { WM_WINDOWPOSCHANGING, sent}, - { PBT_APMRESUMESTANDBY, sent}, - { WM_IME_SETCONTEXT, sent|optional}, - { WM_IME_NOTIFY, sent|optional}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - {0} -}; - -static const struct message parent_new_window_test_seq[] = { - { WM_WINDOWPOSCHANGING, sent}, - { WM_NCACTIVATE, sent}, - { PBT_APMRESUMECRITICAL, sent}, - { WM_IME_SETCONTEXT, sent|defwinproc|optional}, - { WM_IME_NOTIFY, sent|defwinproc|optional}, - { WM_SETFOCUS, sent|defwinproc}, - { WM_NOTIFYFORMAT, sent}, - { 0x0129, sent}, /* should be WM_QUERYUISTATE instead of 0x0129*/ - {0} -}; - -static const struct message buddy_window_test_seq[] = { - { TBM_GETBUDDY, sent|wparam, TRUE}, - { TBM_SETBUDDY, sent|wparam, FALSE}, - { WM_PAINT, sent|defwinproc}, - { TBM_SETBUDDY, sent|wparam, FALSE}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETBUDDY, sent|wparam, TRUE}, - { TBM_SETBUDDY, sent|wparam, TRUE}, - { WM_PAINT, sent|defwinproc}, - { TBM_SETBUDDY, sent|wparam, TRUE}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETBUDDY, sent|wparam, FALSE}, - { TBM_GETBUDDY, sent|wparam, TRUE}, - {0} -}; - -static const struct message parent_buddy_window_test_seq[] = { - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - {0} -}; - -static const struct message line_size_test_seq[] = { - { TBM_SETLINESIZE, sent|lparam, 0, 10}, - { TBM_SETLINESIZE, sent|lparam, 0, 4}, - { TBM_GETLINESIZE, sent}, - {0} -}; - -static const struct message page_size_test_seq[] = { - { TBM_SETPAGESIZE, sent|lparam, 0, 10}, - { TBM_SETPAGESIZE, sent|lparam, 0, -1}, - { TBM_GETPAGESIZE, sent}, - {0} -}; - -static const struct message position_test_seq[] = { - { TBM_SETPOS, sent|wparam|lparam, TRUE, -1}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETPOS, sent}, - { TBM_SETPOS, sent|wparam|lparam, TRUE, 5}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETPOS, sent}, - { TBM_SETPOS, sent|wparam|lparam, TRUE, 1000}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETPOS, sent}, - { TBM_SETPOS, sent|wparam|lparam, FALSE, 20}, - { TBM_GETPOS, sent}, - { TBM_GETPOS, sent}, - {0} -}; - -static const struct message parent_position_test_seq[] = { - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - {0} -}; - -static const struct message range_test_seq[] = { - { TBM_SETRANGE, sent|wparam|lparam, TRUE, MAKELONG(0, 10)}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETRANGEMAX, sent}, - { TBM_GETRANGEMIN, sent}, - { TBM_SETRANGE, sent|wparam|lparam, TRUE, MAKELONG(-1, 1000)}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETRANGEMAX, sent}, - { TBM_GETRANGEMIN, sent}, - { TBM_SETRANGE, sent|wparam|lparam, TRUE, MAKELONG(10, 0)}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETRANGEMAX, sent}, - { TBM_GETRANGEMIN, sent}, - { TBM_SETRANGE, sent|wparam|lparam, FALSE, MAKELONG(0, 10)}, - { TBM_GETRANGEMAX, sent}, - { TBM_GETRANGEMIN, sent}, - { TBM_SETRANGEMAX, sent|wparam|lparam, TRUE, 10}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETRANGEMAX, sent}, - { TBM_SETRANGEMAX, sent|wparam|lparam, TRUE, -1}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETRANGEMAX, sent}, - { TBM_SETRANGEMAX, sent|wparam|lparam, FALSE, 10}, - { TBM_GETRANGEMAX, sent}, - { TBM_SETRANGEMIN, sent|wparam|lparam, TRUE, 0}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETRANGEMIN, sent}, - { TBM_SETRANGEMIN, sent|wparam|lparam, TRUE, 10}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETRANGEMIN, sent}, - { TBM_SETRANGEMIN, sent|wparam|lparam, TRUE, -10}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETRANGEMIN, sent}, - { TBM_SETRANGEMIN, sent|wparam|lparam, FALSE, 5}, - { TBM_GETRANGEMIN, sent}, - { TBM_GETRANGEMAX, sent}, - { TBM_GETRANGEMIN, sent}, - {0} -}; - -static const struct message parent_range_test_seq[] = { - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - {0} -}; - -static const struct message selection_test_seq[] = { - { TBM_SETSEL, sent|wparam|lparam, TRUE, MAKELONG(0, 10)}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETSELEND, sent}, - { TBM_GETSELSTART, sent}, - { TBM_SETSEL, sent|wparam|lparam, TRUE, MAKELONG(5, 20)}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETSELEND, sent}, - { TBM_GETSELSTART, sent}, - { TBM_SETSEL, sent|wparam|lparam, FALSE, MAKELONG(5, 10)}, - { TBM_GETSELEND, sent}, - { TBM_GETSELSTART, sent}, - { TBM_SETSELEND, sent|wparam|lparam, TRUE, 10}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETSELEND, sent}, - { TBM_SETSELEND, sent|wparam|lparam, TRUE, 20}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETSELEND, sent}, - { TBM_SETSELEND, sent|wparam|lparam, TRUE, 4}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETSELEND, sent}, - { TBM_SETSELEND, sent|wparam|lparam, FALSE, 2}, - { TBM_GETSELEND, sent}, - { TBM_GETSELEND, sent}, - { TBM_SETSELSTART, sent|wparam|lparam, TRUE, 5}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETSELSTART, sent}, - { TBM_SETSELSTART, sent|wparam|lparam, TRUE, 0}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETSELSTART, sent}, - { TBM_SETSELSTART, sent|wparam|lparam, TRUE, 20}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETSELSTART, sent}, - { TBM_SETSELSTART, sent|wparam|lparam, FALSE, 8}, - { TBM_GETSELSTART, sent}, - { TBM_GETSELSTART, sent}, - {0} -}; - -static const struct message parent_selection_test_seq[] = { - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - {0} -}; - -static const struct message tic_settings_test_seq[] = { - { TBM_SETTIC, sent|lparam, 0, 0}, - { TBM_SETTIC, sent|lparam, 0, 5}, - { TBM_SETTIC, sent|lparam, 0, 10}, - { TBM_SETTIC, sent|lparam, 0, 20}, - { TBM_SETRANGE, sent|wparam|lparam, TRUE, MAKELONG(0,10)}, - { WM_PAINT, sent|defwinproc}, - { TBM_SETTICFREQ, sent|wparam, 2}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETNUMTICS, sent}, - { TBM_SETTICFREQ, sent|wparam, 5}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETNUMTICS, sent}, - { TBM_SETTICFREQ, sent|wparam, 15}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETNUMTICS, sent}, - { TBM_GETNUMTICS, sent}, - {0} -}; - -static const struct message parent_tic_settings_test_seq[] = { - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - {0} -}; - -static const struct message thumb_length_test_seq[] = { - { TBM_SETTHUMBLENGTH, sent|wparam|lparam, 15, 0}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETTHUMBLENGTH, sent}, - { TBM_SETTHUMBLENGTH, sent|wparam|lparam, 20, 0}, - { WM_PAINT, sent|defwinproc}, - { TBM_GETTHUMBLENGTH, sent}, - { TBM_GETTHUMBLENGTH, sent}, - {0} -}; - -static const struct message parent_thumb_length_test_seq[] = { - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - { WM_CTLCOLORSTATIC, sent}, - { WM_NOTIFY, sent}, - {0} -}; - -static const struct message tic_placement_test_seq[] = { - { TBM_GETPTICS, sent}, - { TBM_GETTIC, sent|wparam, 0}, - { TBM_GETTIC, sent|wparam, 4}, - { TBM_GETTIC, sent|wparam, 11}, - { TBM_GETTICPOS, sent|wparam, 0}, - { TBM_GETTICPOS, sent|wparam, 4}, - {0} -}; - -static const struct message tool_tips_test_seq[] = { - { TBM_SETTIPSIDE, sent|wparam, TBTS_TOP}, - { TBM_SETTIPSIDE, sent|wparam, TBTS_LEFT}, - { TBM_SETTIPSIDE, sent|wparam, TBTS_BOTTOM}, - { TBM_SETTIPSIDE, sent|wparam, TBTS_RIGHT}, - { TBM_SETTOOLTIPS, sent}, - { TBM_GETTOOLTIPS, sent}, - { TBM_SETTOOLTIPS, sent}, - { TBM_GETTOOLTIPS, sent}, - { TBM_SETTOOLTIPS, sent}, - { TBM_GETTOOLTIPS, sent}, - { TBM_GETTOOLTIPS, sent}, - {0} -}; - -static const struct message unicode_test_seq[] = { - { TBM_SETUNICODEFORMAT, sent|wparam, TRUE}, - { TBM_SETUNICODEFORMAT, sent|wparam, FALSE}, - { TBM_GETUNICODEFORMAT, sent}, - {0} -}; - -static const struct message ignore_selection_test_seq[] = { - { TBM_SETSEL, sent|wparam|lparam, TRUE, MAKELONG(0,10)}, - { TBM_GETSELEND, sent}, - { TBM_GETSELSTART, sent}, - { TBM_SETSEL, sent|wparam|lparam, FALSE, MAKELONG(0,10)}, - { TBM_GETSELEND, sent}, - { TBM_GETSELSTART, sent}, - { TBM_SETSELEND, sent|wparam|lparam, TRUE,0}, - { TBM_GETSELEND, sent}, - { TBM_SETSELEND, sent|wparam|lparam, TRUE, 10}, - { TBM_GETSELEND, sent}, - { TBM_SETSELEND, sent|wparam|lparam, FALSE,0}, - { TBM_GETSELEND, sent}, - { TBM_SETSELSTART, sent|wparam|lparam, TRUE,0}, - { TBM_GETSELSTART, sent}, - { TBM_SETSELSTART, sent|wparam|lparam, TRUE, 10}, - { TBM_GETSELSTART, sent}, - { TBM_SETSELSTART, sent|wparam|lparam, FALSE,0}, - { TBM_GETSELSTART, sent}, - {0} -}; - -struct subclass_info -{ - WNDPROC oldproc; -}; - -static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_ERASEBKGND && - message != WM_NCPAINT && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, PARENT_SEQ_INDEX, &msg); - } - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static BOOL register_parent_wnd_class(void){ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = parent_wnd_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(NULL); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "Trackbar test parent class"; - return RegisterClassA(&cls); -} - -static HWND create_parent_window(void){ - if (!register_parent_wnd_class()) - return NULL; - - return CreateWindowEx(0, "Trackbar test parent class", - "Trackbar test parent window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_VISIBLE, - 0, 0, 100, 100, - GetDesktopWindow(), NULL, GetModuleHandleA(NULL), NULL); -} - -static LRESULT WINAPI trackbar_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ - struct subclass_info *info = (struct subclass_info *) GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, TRACKBAR_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static HWND create_trackbar(DWORD style, HWND parent){ - struct subclass_info *info; - HWND hWndTrack; - RECT rect; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - GetClientRect(parent, &rect); - hWndTrack = CreateWindowEx( - 0, TRACKBAR_CLASS,"Trackbar Control", style, - rect.right,rect.bottom, 100, 50, - parent, NULL,GetModuleHandleA(NULL) ,NULL); - - if (!hWndTrack) - { - HeapFree(GetProcessHeap(), 0, info); - return NULL; - } - - info->oldproc = (WNDPROC)SetWindowLongPtrA(hWndTrack, GWLP_WNDPROC, (LONG_PTR)trackbar_subclass_proc); - - SetWindowLongPtrA(hWndTrack, GWLP_USERDATA, (LONG_PTR)info); - - return hWndTrack; -} - -/* test functions for setters, getters, and sequences */ - -static void test_trackbar_buddy(HWND hWndTrackbar){ - HWND hWndLeftBuddy; - HWND hWndRightBuddy; - HWND hWndCurrentBuddy; - HWND rTest; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - - hWndLeftBuddy = (HWND) CreateWindowEx(0, STATUSCLASSNAME, NULL, 0, - 0,0,300,20, NULL, NULL, NULL, NULL); - ok(hWndLeftBuddy != NULL, "Expected non NULL value\n"); - - if (hWndLeftBuddy != NULL){ - hWndCurrentBuddy = (HWND) SendMessage(hWndTrackbar, TBM_GETBUDDY, TRUE, 0); - rTest = (HWND) SendMessage(hWndTrackbar, TBM_SETBUDDY, FALSE, (LPARAM) hWndLeftBuddy); - ok(rTest == hWndCurrentBuddy, "Expected hWndCurrentBuddy\n"); - rTest = (HWND) SendMessage(hWndTrackbar, TBM_SETBUDDY, FALSE, (LPARAM) hWndLeftBuddy); - ok(rTest == hWndLeftBuddy, "Expected hWndLeftBuddy\n"); - } else - skip ("left buddy control not present?\n"); - - hWndRightBuddy = (HWND) CreateWindowEx(0, STATUSCLASSNAME, NULL, 0, - 0,0,300,20,NULL,NULL, NULL, NULL); - - ok(hWndRightBuddy != NULL, "expected non NULL value\n"); - - /* test TBM_SETBUDDY */ - if (hWndRightBuddy != NULL){ - hWndCurrentBuddy = (HWND) SendMessage(hWndTrackbar, TBM_GETBUDDY, TRUE, 0); - rTest = (HWND) SendMessage(hWndTrackbar, TBM_SETBUDDY, TRUE, (LPARAM) hWndRightBuddy); - ok(rTest == hWndCurrentBuddy, "Expected hWndCurrentBuddy\n"); - rTest = (HWND) SendMessage(hWndTrackbar, TBM_SETBUDDY, TRUE, (LPARAM) hWndRightBuddy); - ok(rTest == hWndRightBuddy, "Expected hWndRightbuddy\n"); - } else - skip("Right buddy control not present?\n"); - - /* test TBM_GETBUDDY */ - if (hWndLeftBuddy != NULL){ - rTest = (HWND) SendMessage(hWndTrackbar, TBM_GETBUDDY, FALSE, 0); - ok(rTest == hWndLeftBuddy, "Expected hWndLeftBuddy\n"); - DestroyWindow(hWndLeftBuddy); - } - if (hWndRightBuddy != NULL){ - rTest = (HWND) SendMessage(hWndTrackbar, TBM_GETBUDDY, TRUE,0); - ok(rTest == hWndRightBuddy, "Expected hWndRightBuddy\n"); - DestroyWindow(hWndRightBuddy); - } - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, buddy_window_test_seq, "buddy test sequence", TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_buddy_window_test_seq, "parent buddy test seq", TRUE); - -} - -static void test_line_size(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - - /* test TBM_SETLINESIZE */ - r = SendMessage(hWndTrackbar, TBM_SETLINESIZE, 0, 10); - r = SendMessage(hWndTrackbar, TBM_SETLINESIZE, 0, 4); - expect(10, r); - - /* test TBM_GETLINESIZE */ - r = SendMessage(hWndTrackbar, TBM_GETLINESIZE, 0,0); - expect(4, r); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, line_size_test_seq, "linesize test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_empty_test_seq, "parent line test sequence", FALSE); -} - - -static void test_page_size(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - - /* test TBM_SETPAGESIZE */ - r = SendMessage(hWndTrackbar, TBM_SETPAGESIZE, 0, 10); - expect(20, r); - r = SendMessage(hWndTrackbar, TBM_SETPAGESIZE, 0, -1); - expect(10, r); - - /* test TBM_GETPAGESIZE */ - r = SendMessage(hWndTrackbar, TBM_GETPAGESIZE, 0,0); - todo_wine{ - expect(20, r); - } - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, page_size_test_seq, "page size test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_empty_test_seq, "parent page size test sequence", FALSE); -} - -static void test_position(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* test TBM_SETPOS */ - SendMessage(hWndTrackbar, TBM_SETPOS, TRUE, -1); - r = SendMessage(hWndTrackbar, TBM_GETPOS, 0, 0); - expect(0, r); - SendMessage(hWndTrackbar, TBM_SETPOS, TRUE, 5); - r = SendMessage(hWndTrackbar, TBM_GETPOS, 0,0); - expect(5, r); - SendMessage(hWndTrackbar, TBM_SETPOS, TRUE, 1000); - r = SendMessage(hWndTrackbar, TBM_GETPOS, 0,0); - expect(100, r); - SendMessage(hWndTrackbar, TBM_SETPOS, FALSE, 20); - r = SendMessage(hWndTrackbar, TBM_GETPOS, 0,0); - expect(20, r); - - /* test TBM_GETPOS */ - r = SendMessage(hWndTrackbar, TBM_GETPOS, 0,0); - expect(20, r); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, position_test_seq, "position test sequence", TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_position_test_seq, "parent position test sequence", TRUE); -} - -static void test_range(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* test TBM_SETRANGE */ - SendMessage(hWndTrackbar, TBM_SETRANGE, TRUE, MAKELONG(0, 10)); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMAX, 0,0); - expect(10, r); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(0, r); - SendMessage(hWndTrackbar, TBM_SETRANGE, TRUE, MAKELONG(-1, 1000)); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMAX, 0,0); - expect(1000, r); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(-1, r); - SendMessage(hWndTrackbar, TBM_SETRANGE, TRUE, MAKELONG(10, 0)); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMAX, 0,0); - expect(0, r); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(10, r); - SendMessage(hWndTrackbar, TBM_SETRANGE, FALSE, MAKELONG(0,10)); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMAX, 0,0); - expect(10, r); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(0, r); - - /*test TBM_SETRANGEMAX */ - SendMessage(hWndTrackbar, TBM_SETRANGEMAX, TRUE, 10); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMAX, 0,0); - expect(10, r); - SendMessage(hWndTrackbar, TBM_SETRANGEMAX, TRUE, -1); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMAX, 0,0); - expect(-1, r); - SendMessage(hWndTrackbar, TBM_SETRANGEMAX, FALSE, 10); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMAX, 0,0); - expect(10, r); - - /* testing TBM_SETRANGEMIN */ - SendMessage(hWndTrackbar, TBM_SETRANGEMIN, TRUE, 0); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(0, r); - SendMessage(hWndTrackbar, TBM_SETRANGEMIN, TRUE, 10); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(10, r); - SendMessage(hWndTrackbar, TBM_SETRANGEMIN, TRUE, -10); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(-10, r); - SendMessage(hWndTrackbar, TBM_SETRANGEMIN, FALSE, 5); - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(5, r); - - /* test TBM_GETRANGEMAX */ - r = SendMessage(hWndTrackbar, TBM_GETRANGEMAX, 0,0); - expect(10, r); - - /* test TBM_GETRANGEMIN */ - r = SendMessage(hWndTrackbar, TBM_GETRANGEMIN, 0,0); - expect(5, r); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, range_test_seq, "range test sequence", TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_range_test_seq, "parent range test sequence", TRUE); -} - -static void test_selection(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* test TBM_SETSEL */ - SendMessage(hWndTrackbar, TBM_SETSEL, TRUE, MAKELONG(0,10)); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(10, r); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(5, r); - SendMessage(hWndTrackbar, TBM_SETSEL, TRUE, MAKELONG(5, 20)); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(10, r); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(5, r); - SendMessage(hWndTrackbar, TBM_SETSEL, FALSE, MAKELONG(5, 10)); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(10, r); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(5, r); - - /* test TBM_SETSELEND */ - SendMessage(hWndTrackbar, TBM_SETSELEND, TRUE, 10); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(10, r); - SendMessage(hWndTrackbar, TBM_SETSELEND, TRUE, 20); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(10, r); - SendMessage(hWndTrackbar, TBM_SETSELEND, TRUE, 4); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(4, r); - SendMessage(hWndTrackbar, TBM_SETSELEND, FALSE, 2); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(2, r); - - /* test TBM_GETSELEND */ - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(2, r); - - /* testing TBM_SETSELSTART */ - SendMessage(hWndTrackbar, TBM_SETSELSTART, TRUE, 5); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(5, r); - SendMessage(hWndTrackbar, TBM_SETSELSTART, TRUE, 0); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(5, r); - SendMessage(hWndTrackbar, TBM_SETSELSTART, TRUE, 20); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(20, r); - SendMessage(hWndTrackbar, TBM_SETSELSTART, FALSE, 8); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(8, r); - - /* test TBM_GETSELSTART */ - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(8, r); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, selection_test_seq, "selection test sequence", TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_selection_test_seq, "parent selection test seqence", TRUE); -} - -static void test_thumb_length(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* testing TBM_SETTHUMBLENGTH */ - SendMessage(hWndTrackbar, TBM_SETTHUMBLENGTH, 15, 0); - r = SendMessage(hWndTrackbar, TBM_GETTHUMBLENGTH, 0,0); - expect(15, r); - SendMessage(hWndTrackbar, TBM_SETTHUMBLENGTH, 20, 0); - r = SendMessage(hWndTrackbar, TBM_GETTHUMBLENGTH, 0,0); - expect(20, r); - - /* test TBM_GETTHUMBLENGTH */ - r = SendMessage(hWndTrackbar, TBM_GETTHUMBLENGTH, 0,0); - expect(20, r); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, thumb_length_test_seq, "thumb length test sequence", TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_thumb_length_test_seq, "parent thumb lenth test sequence", TRUE); -} - -static void test_tic_settings(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* testing TBM_SETTIC */ - /* Set tics at 5 and 10 */ - /* 0 and 20 are out of range and should not be set */ - r = SendMessage(hWndTrackbar, TBM_SETTIC, 0, 0); - ok(r == FALSE, "Expected FALSE, got %d\n", r); - r = SendMessage(hWndTrackbar, TBM_SETTIC, 0, 5); - todo_wine{ - ok(r == TRUE, "Expected TRUE, got %d\n", r); - r = SendMessage(hWndTrackbar, TBM_SETTIC, 0, 10); - ok(r == TRUE, "Expected TRUE, got %d\n", r); - } - r = SendMessage(hWndTrackbar, TBM_SETTIC, 0, 20); - ok(r == FALSE, "Expected False, got %d\n", r); - - /* test TBM_SETTICFREQ */ - SendMessage(hWndTrackbar, TBM_SETRANGE, TRUE, MAKELONG(0, 10)); - SendMessage(hWndTrackbar, TBM_SETTICFREQ, 2, 0); - r = SendMessage(hWndTrackbar, TBM_GETNUMTICS, 0,0); - expect(6, r); - SendMessage(hWndTrackbar, TBM_SETTICFREQ, 5, 0); - r = SendMessage(hWndTrackbar, TBM_GETNUMTICS, 0,0); - expect(3, r); - SendMessage(hWndTrackbar, TBM_SETTICFREQ, 15, 0); - r = SendMessage(hWndTrackbar, TBM_GETNUMTICS, 0,0); - expect(2, r); - - /* test TBM_GETNUMTICS */ - /* since TIC FREQ is 15, there should be only 2 tics now */ - r = SendMessage(hWndTrackbar, TBM_GETNUMTICS, 0,0); - expect(2, r); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, tic_settings_test_seq, "tic settings test sequence", TRUE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_tic_settings_test_seq, "parent tic settings test sequence", TRUE); -} - -static void test_tic_placement(HWND hWndTrackbar){ - int r; - DWORD *rPTics; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* test TBM_GETPTICS */ - rPTics = (DWORD *) SendMessage(hWndTrackbar, TBM_GETPTICS, 0,0); - todo_wine{ - expect(1, rPTics[0]); - expect(2, rPTics[1]); - expect(3, rPTics[2]); - expect(4, rPTics[3]); - } - - /* test TBM_GETTIC */ - r = SendMessage(hWndTrackbar, TBM_GETTIC, 0,0); - todo_wine{ - expect(1, r); - r = SendMessage(hWndTrackbar, TBM_GETTIC, 4,0); - expect(5, r); - } - r = SendMessage(hWndTrackbar, TBM_GETTIC, 11,0); - expect(-1, r); - - /* test TBM_GETTICPIC */ - r = SendMessage(hWndTrackbar, TBM_GETTICPOS, 0, 0); - todo_wine{ - ok(r > 0, "Expected r > 0, got %d\n", r); - r = SendMessage(hWndTrackbar, TBM_GETTICPOS, 4, 0); - ok(r > 0, "Expected r > 0, got %d\n", r); - } - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, tic_placement_test_seq, "get tic placement test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_empty_test_seq, "parent get tic placement test sequence", FALSE); -} - - -static void test_tool_tips(HWND hWndTrackbar){ - int r; - HWND hWndTooltip; - HWND rTest; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* testing TBM_SETTIPSIDE */ - r = SendMessage(hWndTrackbar, TBM_SETTIPSIDE, TBTS_TOP, 0); - todo_wine{ - expect(0, r); - } - r = SendMessage(hWndTrackbar, TBM_SETTIPSIDE, TBTS_LEFT, 0); - expect(0, r); - r = SendMessage(hWndTrackbar, TBM_SETTIPSIDE, TBTS_BOTTOM, 0); - expect(1, r); - r = SendMessage(hWndTrackbar, TBM_SETTIPSIDE, TBTS_RIGHT, 0); - expect(2, r); - - /* testing TBM_SETTOOLTIPS */ - hWndTooltip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, 0, - CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - NULL, NULL, NULL, NULL); - - ok(hWndTooltip != NULL, "Expected non NULL value\n"); - if (hWndTooltip != NULL){ - SendMessage(hWndTrackbar, TBM_SETTOOLTIPS, (LPARAM) hWndTooltip, 0); - rTest = (HWND) SendMessage(hWndTrackbar, TBM_GETTOOLTIPS, 0,0); - ok(rTest == hWndTooltip, "Expected hWndToolTip, got\n"); - SendMessage(hWndTrackbar, TBM_SETTOOLTIPS, (LPARAM) NULL, 0); - rTest = (HWND) SendMessage(hWndTrackbar, TBM_GETTOOLTIPS, 0,0); - ok(rTest == NULL, "Expected NULL\n"); - SendMessage(hWndTrackbar, TBM_SETTOOLTIPS, (LPARAM) hWndTooltip, 5); - rTest = (HWND) SendMessage(hWndTrackbar, TBM_GETTOOLTIPS, 0,0); - ok(rTest == hWndTooltip, "Expected hWndTooltip, got\n"); - } else - skip("tool tip control not present?\n"); - - /* test TBM_GETTOOLTIPS */ - rTest = (HWND) SendMessage(hWndTrackbar, TBM_GETTOOLTIPS, 0,0); - ok(rTest == hWndTooltip, "Expected hWndTooltip\n"); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, tool_tips_test_seq, "tool tips test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_empty_test_seq, "parent tool tips test sequence", FALSE); -} - - -static void test_unicode(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* testing TBM_SETUNICODEFORMAT */ - r = SendMessage(hWndTrackbar, TBM_SETUNICODEFORMAT, TRUE, 0); - ok(r == FALSE, "Expected FALSE, got %d\n",r); - r = SendMessage(hWndTrackbar, TBM_SETUNICODEFORMAT, FALSE, 0); - ok(r == TRUE, "Expected TRUE, got %d\n",r); - - /* test TBM_GETUNICODEFORMAT */ - r = SendMessage(hWndTrackbar, TBM_GETUNICODEFORMAT, 0,0); - ok(r == FALSE, "Expected FALSE, got %d\n",r); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, unicode_test_seq, "unicode test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_empty_test_seq, "parent unicode test sequence", FALSE); -} - -static void test_ignore_selection(HWND hWndTrackbar){ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - /* test TBM_SETSEL ensure that it is ignored */ - SendMessage(hWndTrackbar, TBM_SETSEL, TRUE, MAKELONG(0,10)); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(0, r); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(0, r); - SendMessage(hWndTrackbar, TBM_SETSEL, FALSE, MAKELONG(0,10)); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(0, r); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(0, r); - - /* test TBM_SETSELEND, ensure that it is ignored */ - SendMessage(hWndTrackbar, TBM_SETSELEND, TRUE, 0); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(0, r); - SendMessage(hWndTrackbar, TBM_SETSELEND, TRUE, 10); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(0,r); - SendMessage(hWndTrackbar, TBM_SETSELEND, FALSE, 0); - r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - expect(0, r); - - /* test TBM_SETSELSTART, ensure that it is ignored */ - SendMessage(hWndTrackbar, TBM_SETSELSTART, TRUE, 0); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(0, r); - SendMessage(hWndTrackbar, TBM_SETSELSTART, TRUE, 10); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(0,r); - SendMessage(hWndTrackbar, TBM_SETSELSTART, FALSE, 0); - r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - expect(0, r); - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, ignore_selection_test_seq, "ignore selection setting test sequence", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_empty_test_seq, "parent ignore selection setting test sequence", FALSE); -} - -START_TEST(trackbar) -{ - DWORD style = WS_VISIBLE | TBS_TOOLTIPS | TBS_ENABLESELRANGE | TBS_FIXEDLENGTH | TBS_AUTOTICKS; - HWND hWndTrackbar; - HWND hWndParent; - - init_msg_sequences(sequences, NUM_MSG_SEQUENCE); - InitCommonControls(); - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - - /* create parent window */ - hWndParent = create_parent_window(); - ok(hWndParent != NULL, "Failed to create parent Window!\n"); - - if(!hWndParent){ - skip("parent window not present\n"); - return; - } - - ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_wnd_seq, "create Parent Window", TRUE); - flush_sequences(sequences, NUM_MSG_SEQUENCE); - - /* create trackbar with set styles */ - hWndTrackbar = create_trackbar(style, hWndParent); - - ok(hWndTrackbar != NULL, "Expected non NULL value\n"); - - if (!hWndTrackbar){ - skip("trackbar control not present?\n"); - return; - } - - ok_sequence(sequences, TRACKBAR_SEQ_INDEX, create_trackbar_wnd_seq, "create Trackbar Window", FALSE); - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_create_trackbar_wnd_seq, "parent trackbar window", TRUE); - flush_sequences(sequences, NUM_MSG_SEQUENCE); - - /* TEST OF ALL SETTER and GETTER MESSAGES with required styles turned on*/ - test_trackbar_buddy(hWndTrackbar); - test_line_size(hWndTrackbar); - test_page_size(hWndTrackbar); - test_position(hWndTrackbar); - test_range(hWndTrackbar); - test_selection(hWndTrackbar); - test_thumb_length(hWndTrackbar); - test_tic_settings(hWndTrackbar); - test_tic_placement(hWndTrackbar); - test_tool_tips(hWndTrackbar); - test_unicode(hWndTrackbar); - - flush_sequences(sequences, NUM_MSG_SEQUENCE); - DestroyWindow(hWndTrackbar); - - /* test getters and setters without styles set */ - hWndTrackbar = create_trackbar(0, hWndParent); - - ok(hWndTrackbar != NULL, "Expected non NULL value\n"); - - if (!hWndTrackbar){ - skip("trackbar control not present?\n"); - return; - } - - ok_sequence(sequences, PARENT_SEQ_INDEX, parent_new_window_test_seq, "new trackbar window test sequence", TRUE); - - test_ignore_selection(hWndTrackbar); - - DestroyWindow(hWndTrackbar); - - DestroyWindow(hWndParent); -} diff --git a/rostests/winetests/comctl32/treeview.c b/rostests/winetests/comctl32/treeview.c deleted file mode 100644 index c1ba7f309be..00000000000 --- a/rostests/winetests/comctl32/treeview.c +++ /dev/null @@ -1,714 +0,0 @@ -/* Unit tests for treeview. - * - * Copyright 2005 Krzysztof Foltman - * Copyright 2007 Christopher James Peterson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "winnls.h" -#include "winreg.h" -#include "commctrl.h" - -#include "wine/test.h" -#include "msg.h" - -#define NUM_MSG_SEQUENCES 1 -#define LISTVIEW_SEQ_INDEX 0 - -static struct msg_sequence *MsgSequences[NUM_MSG_SEQUENCES]; - -static const struct message FillRootSeq[] = { - { TVM_INSERTITEM, sent }, - { TVM_GETITEM, sent }, - { TVM_INSERTITEM, sent }, - { 0 } -}; - -static const struct message DoTest1Seq[] = { - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { 0 } -}; - -static const struct message DoTest2Seq[] = { - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - { 0 } -}; - -static const struct message DoFocusTestSeq[] = { - { TVM_INSERTITEM, sent }, - { TVM_INSERTITEM, sent }, - { WM_WINDOWPOSCHANGING, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 0x00000001 }, - { WM_WINDOWPOSCHANGED, sent|defwinproc }, - { WM_SIZE, sent|defwinproc }, - { WM_WINDOWPOSCHANGING, sent }, - { WM_NCCALCSIZE, sent|wparam, 0x00000001 }, - { WM_WINDOWPOSCHANGED, sent }, - { WM_SIZE, sent|defwinproc }, - { WM_WINDOWPOSCHANGING, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 0x00000001 }, - { WM_WINDOWPOSCHANGED, sent|defwinproc }, - { WM_SIZE, sent|defwinproc }, - { TVM_SELECTITEM, sent|wparam, 0x00000009 }, - /* The following end up out of order in wine */ - { WM_PAINT, sent|defwinproc }, - { WM_NCPAINT, sent|wparam|defwinproc, 0x00000001 }, - { WM_ERASEBKGND, sent|defwinproc }, - { TVM_EDITLABEL, sent }, - { WM_COMMAND, sent|wparam|defwinproc, 0x04000000 }, - { WM_COMMAND, sent|wparam|defwinproc, 0x03000000 }, - { WM_PARENTNOTIFY, sent|wparam|defwinproc, 0x00000001 }, - { WM_KILLFOCUS, sent|defwinproc }, - { WM_PAINT, sent|defwinproc }, - { WM_IME_SETCONTEXT, sent|defwinproc|optional }, - { WM_COMMAND, sent|wparam|defwinproc, 0x01000000}, - { WM_ERASEBKGND, sent|defwinproc }, - { WM_CTLCOLOREDIT, sent|defwinproc|optional }, - { WM_CTLCOLOREDIT, sent|defwinproc|optional }, - { 0 } -}; - -static const struct message TestGetSetBkColorSeq[] = { - { TVM_GETBKCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETBKCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_GETBKCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETBKCOLOR, sent|wparam|lparam, 0x00000000, 0x00ffffff }, - { TVM_GETBKCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETBKCOLOR, sent|wparam|lparam, 0x00000000, 0xffffffff }, - { 0 } -}; - -static const struct message TestGetSetImageListSeq[] = { - { TVM_SETIMAGELIST, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_GETIMAGELIST, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static const struct message TestGetSetIndentSeq[] = { - { TVM_SETINDENT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_GETINDENT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - /* The actual amount to indent is dependent on the system for this message */ - { TVM_SETINDENT, sent }, - { TVM_GETINDENT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static const struct message TestGetSetInsertMarkColorSeq[] = { - { TVM_SETINSERTMARKCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_GETINSERTMARKCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static const struct message TestGetSetItemSeq[] = { - { TVM_GETITEM, sent }, - { TVM_SETITEM, sent }, - { TVM_GETITEM, sent }, - { TVM_SETITEM, sent }, - { 0 } -}; - -static const struct message TestGetSetItemHeightSeq[] = { - { TVM_GETITEMHEIGHT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETITEMHEIGHT, sent|wparam|lparam, 0xffffffff, 0x00000000 }, - { TVM_GETITEMHEIGHT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETITEMHEIGHT, sent|lparam, 0xcccccccc, 0x00000000 }, - { TVM_GETITEMHEIGHT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETITEMHEIGHT, sent|wparam|lparam, 0x00000009, 0x00000000 }, - { WM_WINDOWPOSCHANGING, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 0x00000001 }, - { WM_WINDOWPOSCHANGED, sent|defwinproc }, - { WM_SIZE, sent|defwinproc }, - { TVM_GETITEMHEIGHT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static const struct message TestGetSetScrollTimeSeq[] = { - { TVM_SETSCROLLTIME, sent|wparam|lparam, 0x00000014, 0x00000000 }, - { TVM_GETSCROLLTIME, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static const struct message TestGetSetTextColorSeq[] = { - { TVM_GETTEXTCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETTEXTCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_GETTEXTCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETTEXTCOLOR, sent|wparam|lparam, 0x00000000, 0x00ffffff }, - { TVM_GETTEXTCOLOR, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETTEXTCOLOR, sent|wparam|lparam, 0x00000000, 0xffffffff }, - { 0 } -}; - -static const struct message TestGetSetToolTipsSeq[] = { - { WM_COMMAND, sent|wparam, 0x02000000 }, - { WM_PARENTNOTIFY, sent|wparam|defwinproc, 0x00020002 }, - { TVM_SETTOOLTIPS, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_GETTOOLTIPS, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static const struct message TestGetSetUnicodeFormatSeq[] = { - { TVM_SETUNICODEFORMAT, sent|wparam|lparam, 0x00000001, 0x00000000 }, - { TVM_GETUNICODEFORMAT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETUNICODEFORMAT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_GETUNICODEFORMAT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { TVM_SETUNICODEFORMAT, sent|wparam|lparam, 0x00000000, 0x00000000 }, - { 0 } -}; - -static HWND hMainWnd; - -static HWND hTree, hEdit; -static HTREEITEM hRoot, hChild; - -static int pos = 0; -static char sequence[256]; - -static void Clear(void) -{ - pos = 0; - sequence[0] = '\0'; -} - -static void AddItem(char ch) -{ - sequence[pos++] = ch; - sequence[pos] = '\0'; -} - -static void IdentifyItem(HTREEITEM hItem) -{ - if (hItem == hRoot) { - AddItem('R'); - return; - } - if (hItem == hChild) { - AddItem('C'); - return; - } - if (hItem == NULL) { - AddItem('n'); - return; - } - AddItem('?'); -} - -static void FillRoot(void) -{ - TVINSERTSTRUCTA ins; - TVITEM tvi; - static CHAR root[] = "Root", - child[] = "Child"; - - Clear(); - AddItem('A'); - ins.hParent = TVI_ROOT; - ins.hInsertAfter = TVI_ROOT; - U(ins).item.mask = TVIF_TEXT; - U(ins).item.pszText = root; - hRoot = TreeView_InsertItem(hTree, &ins); - assert(hRoot); - - /* UMLPad 1.15 depends on this being not -1 (I_IMAGECALLBACK) */ - tvi.hItem = hRoot; - tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; - SendMessage( hTree, TVM_GETITEM, 0, (LPARAM)&tvi ); - ok(tvi.iImage == 0, "tvi.iImage=%d\n", tvi.iImage); - ok(tvi.iSelectedImage == 0, "tvi.iSelectedImage=%d\n", tvi.iSelectedImage); - - AddItem('B'); - ins.hParent = hRoot; - ins.hInsertAfter = TVI_FIRST; - U(ins).item.mask = TVIF_TEXT; - U(ins).item.pszText = child; - hChild = TreeView_InsertItem(hTree, &ins); - assert(hChild); - AddItem('.'); - - ok(!strcmp(sequence, "AB."), "Item creation\n"); -} - -static void DoTest1(void) -{ - BOOL r; - r = TreeView_SelectItem(hTree, NULL); - Clear(); - AddItem('1'); - r = TreeView_SelectItem(hTree, hRoot); - AddItem('2'); - r = TreeView_SelectItem(hTree, hRoot); - AddItem('3'); - r = TreeView_SelectItem(hTree, NULL); - AddItem('4'); - r = TreeView_SelectItem(hTree, NULL); - AddItem('5'); - r = TreeView_SelectItem(hTree, hRoot); - AddItem('.'); - ok(!strcmp(sequence, "1(nR)nR23(Rn)Rn45(nR)nR."), "root-none select test\n"); -} - -static void DoTest2(void) -{ - BOOL r; - r = TreeView_SelectItem(hTree, NULL); - Clear(); - AddItem('1'); - r = TreeView_SelectItem(hTree, hRoot); - AddItem('2'); - r = TreeView_SelectItem(hTree, hRoot); - AddItem('3'); - r = TreeView_SelectItem(hTree, hChild); - AddItem('4'); - r = TreeView_SelectItem(hTree, hChild); - AddItem('5'); - r = TreeView_SelectItem(hTree, hRoot); - AddItem('.'); - ok(!strcmp(sequence, "1(nR)nR23(RC)RC45(CR)CR."), "root-child select test\n"); -} - -static void DoFocusTest(void) -{ - TVINSERTSTRUCTA ins; - static CHAR child1[] = "Edit", - child2[] = "A really long string"; - HTREEITEM hChild1, hChild2; - - /* This test verifies that when a label is being edited, scrolling - * the treeview does not cause the label to lose focus. To test - * this, first some additional entries are added to generate - * scrollbars. - */ - ins.hParent = hRoot; - ins.hInsertAfter = hChild; - U(ins).item.mask = TVIF_TEXT; - U(ins).item.pszText = child1; - hChild1 = TreeView_InsertItem(hTree, &ins); - assert(hChild1); - ins.hInsertAfter = hChild1; - U(ins).item.mask = TVIF_TEXT; - U(ins).item.pszText = child2; - hChild2 = TreeView_InsertItem(hTree, &ins); - assert(hChild2); - - ShowWindow(hMainWnd,SW_SHOW); - /* Using SendMessageA since Win98 doesn't have default unicode support */ - SendMessageA(hTree, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hChild); - hEdit = TreeView_EditLabel(hTree, hChild); - ScrollWindowEx(hTree, -10, 0, NULL, NULL, NULL, NULL, SW_SCROLLCHILDREN); - ok(GetFocus() == hEdit, "Edit control should have focus\n"); -} - -static void TestGetSetBkColor(void) -{ - COLORREF crColor = RGB(0,0,0); - - todo_wine{ - /* If the value is -1, the control is using the system color for the background color. */ - crColor = (COLORREF)SendMessage( hTree, TVM_GETBKCOLOR, 0, 0 ); - ok(crColor == -1, "Default background color reported as 0x%.8x\n", crColor); - } - - /* Test for black background */ - SendMessage( hTree, TVM_SETBKCOLOR, 0, (LPARAM)RGB(0,0,0) ); - crColor = (COLORREF)SendMessage( hTree, TVM_GETBKCOLOR, 0, 0 ); - ok(crColor == RGB(0,0,0), "Black background color reported as 0x%.8x\n", crColor); - - /* Test for white background */ - SendMessage( hTree, TVM_SETBKCOLOR, 0, (LPARAM)RGB(255,255,255) ); - crColor = (COLORREF)SendMessage( hTree, TVM_GETBKCOLOR, 0, 0 ); - ok(crColor == RGB(255,255,255), "White background color reported as 0x%.8x\n", crColor); - - /* Reset the default background */ - SendMessage( hTree, TVM_SETBKCOLOR, 0, -1 ); -} - -static void TestGetSetImageList(void) -{ - HIMAGELIST hImageList = NULL; - - /* Test a NULL HIMAGELIST */ - SendMessage( hTree, TVM_SETIMAGELIST, TVSIL_NORMAL, (LPARAM)hImageList ); - hImageList = (HIMAGELIST)SendMessage( hTree, TVM_GETIMAGELIST, TVSIL_NORMAL, 0 ); - ok(hImageList == NULL, "NULL image list, reported as 0x%p, expected 0.\n", hImageList); - - /* TODO: Test an actual image list */ -} - -static void TestGetSetIndent(void) -{ - int ulIndent = -1; - int ulMinIndent = -1; - int ulMoreThanTwiceMin = -1; - - /* Finding the minimum indent */ - SendMessage( hTree, TVM_SETINDENT, 0, 0 ); - ulMinIndent = (int)SendMessage( hTree, TVM_GETINDENT, 0, 0 ); - - /* Checking an indent that is more than twice the default indent */ - ulMoreThanTwiceMin = 2*ulMinIndent+1; - SendMessage( hTree, TVM_SETINDENT, ulMoreThanTwiceMin, 0 ); - ulIndent = (DWORD)SendMessage( hTree, TVM_GETINDENT, 0, 0 ); - ok(ulIndent == ulMoreThanTwiceMin, "Indent reported as %d, expected %d\n", ulIndent, ulMoreThanTwiceMin); -} - -static void TestGetSetInsertMarkColor(void) -{ - COLORREF crColor = RGB(0,0,0); - SendMessage( hTree, TVM_SETINSERTMARKCOLOR, 0, crColor ); - crColor = (COLORREF)SendMessage( hTree, TVM_GETINSERTMARKCOLOR, 0, 0 ); - ok(crColor == RGB(0,0,0), "Insert mark color reported as 0x%.8x, expected 0x00000000\n", crColor); -} - -static void TestGetSetItem(void) -{ - TVITEM tviRoot = {0}; - int nBufferSize = 80; - char szBuffer[80] = {0}; - - /* Test the root item */ - tviRoot.hItem = hRoot; - tviRoot.mask = TVIF_TEXT; - tviRoot.cchTextMax = nBufferSize; - tviRoot.pszText = szBuffer; - SendMessage( hTree, TVM_GETITEM, 0, (LPARAM)&tviRoot ); - ok(!strcmp("Root", szBuffer), "GetItem: szBuffer=\"%s\", expected \"Root\"\n", szBuffer); - - /* Change the root text */ - strncpy(szBuffer, "Testing123", nBufferSize); - SendMessage( hTree, TVM_SETITEM, 0, (LPARAM)&tviRoot ); - memset(szBuffer, 0, nBufferSize); - SendMessage( hTree, TVM_GETITEM, 0, (LPARAM)&tviRoot ); - ok(!strcmp("Testing123", szBuffer), "GetItem: szBuffer=\"%s\", expected \"Testing123\"\n", szBuffer); - - /* Reset the root text */ - memset(szBuffer, 0, nBufferSize); - strncpy(szBuffer, "Root", nBufferSize); - SendMessage( hTree, TVM_SETITEM, 0, (LPARAM)&tviRoot ); -} - -static void TestGetSetItemHeight(void) -{ - int ulOldHeight = 0; - int ulNewHeight = 0; - - /* Assuming default height to begin with */ - ulOldHeight = (int) SendMessage( hTree, TVM_GETITEMHEIGHT, 0, 0 ); - - /* Explicitly setting and getting the default height */ - SendMessage( hTree, TVM_SETITEMHEIGHT, -1, 0 ); - ulNewHeight = (int) SendMessage( hTree, TVM_GETITEMHEIGHT, 0, 0 ); - ok(ulNewHeight == ulOldHeight, "Default height not set properly, reported %d, expected %d\n", ulNewHeight, ulOldHeight); - - /* Explicitly setting and getting the height of twice the normal */ - SendMessage( hTree, TVM_SETITEMHEIGHT, 2*ulOldHeight, 0 ); - ulNewHeight = (int) SendMessage( hTree, TVM_GETITEMHEIGHT, 0, 0 ); - ok(ulNewHeight == 2*ulOldHeight, "New height not set properly, reported %d, expected %d\n", ulNewHeight, 2*ulOldHeight); - - /* Assuming tree doesn't have TVS_NONEVENHEIGHT set, so a set of 9 will round down to 8 */ - SendMessage( hTree, TVM_SETITEMHEIGHT, 9, 0 ); - ulNewHeight = (int) SendMessage( hTree, TVM_GETITEMHEIGHT, 0, 0 ); - ok(ulNewHeight == 8, "Uneven height not set properly, reported %d, expected %d\n", ulNewHeight, 8); -} - -static void TestGetSetScrollTime(void) -{ - int ulExpectedTime = 20; - int ulTime = 0; - SendMessage( hTree, TVM_SETSCROLLTIME, ulExpectedTime, 0 ); - ulTime = (int)SendMessage( hTree, TVM_GETSCROLLTIME, 0, 0 ); - ok(ulTime == ulExpectedTime, "Scroll time reported as %d, expected %d\n", ulTime, ulExpectedTime); -} - -static void TestGetSetTextColor(void) -{ - /* If the value is -1, the control is using the system color for the text color. */ - COLORREF crColor = RGB(0,0,0); - crColor = (COLORREF)SendMessage( hTree, TVM_GETTEXTCOLOR, 0, 0 ); - ok(crColor == -1, "Default text color reported as 0x%.8x\n", crColor); - - /* Test for black text */ - SendMessage( hTree, TVM_SETTEXTCOLOR, 0, (LPARAM)RGB(0,0,0) ); - crColor = (COLORREF)SendMessage( hTree, TVM_GETTEXTCOLOR, 0, 0 ); - ok(crColor == RGB(0,0,0), "Black text color reported as 0x%.8x\n", crColor); - - /* Test for white text */ - SendMessage( hTree, TVM_SETTEXTCOLOR, 0, (LPARAM)RGB(255,255,255) ); - crColor = (COLORREF)SendMessage( hTree, TVM_GETTEXTCOLOR, 0, 0 ); - ok(crColor == RGB(255,255,255), "White text color reported as 0x%.8x\n", crColor); - - /* Reset the default text color */ - SendMessage( hTree, TVM_SETTEXTCOLOR, 0, -1 ); -} - -static void TestGetSetToolTips(void) -{ - HWND hwndLastToolTip = NULL; - HWND hPopupTreeView; - - /* show even WS_POPUP treeview don't send NM_TOOLTIPSCREATED */ - hPopupTreeView = CreateWindow(WC_TREEVIEW, NULL, WS_POPUP|WS_VISIBLE, 0, 0, 100, 100, hMainWnd, NULL, NULL, NULL); - DestroyWindow(hPopupTreeView); - - /* Testing setting a NULL ToolTip */ - SendMessage( hTree, TVM_SETTOOLTIPS, 0, 0 ); - hwndLastToolTip = (HWND)SendMessage( hTree, TVM_GETTOOLTIPS, 0, 0 ); - ok(hwndLastToolTip == NULL, "NULL tool tip, reported as 0x%p, expected 0.\n", hwndLastToolTip); - - /* TODO: Add a test of an actual tooltip */ -} - -static void TestGetSetUnicodeFormat(void) -{ - BOOL bPreviousSetting = 0; - BOOL bNewSetting = 0; - - /* Set to Unicode */ - bPreviousSetting = (BOOL)SendMessage( hTree, TVM_SETUNICODEFORMAT, 1, 0 ); - bNewSetting = (BOOL)SendMessage( hTree, TVM_GETUNICODEFORMAT, 0, 0 ); - ok(bNewSetting == 1, "Unicode setting did not work.\n"); - - /* Set to ANSI */ - SendMessage( hTree, TVM_SETUNICODEFORMAT, 0, 0 ); - bNewSetting = (BOOL)SendMessage( hTree, TVM_GETUNICODEFORMAT, 0, 0 ); - ok(bNewSetting == 0, "ANSI setting did not work.\n"); - - /* Revert to original setting */ - SendMessage( hTree, TVM_SETUNICODEFORMAT, (LPARAM)bPreviousSetting, 0 ); -} - -static void TestGetSet(void) -{ - /* TVM_GETBKCOLOR and TVM_SETBKCOLOR */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetBkColor(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetBkColorSeq, - "TestGetSetBkColor", FALSE); - - /* TVM_GETIMAGELIST and TVM_SETIMAGELIST */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetImageList(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetImageListSeq, - "TestGetImageList", FALSE); - - /* TVM_SETINDENT and TVM_GETINDENT */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetIndent(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetIndentSeq, - "TestGetSetIndent", FALSE); - - /* TVM_GETINSERTMARKCOLOR and TVM_GETINSERTMARKCOLOR */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetInsertMarkColor(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetInsertMarkColorSeq, - "TestGetSetInsertMarkColor", FALSE); - - /* TVM_GETITEM and TVM_SETITEM */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetItem(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetItemSeq, - "TestGetSetItem", FALSE); - - /* TVM_GETITEMHEIGHT and TVM_SETITEMHEIGHT */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetItemHeight(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetItemHeightSeq, - "TestGetSetItemHeight", FALSE); - - /* TVM_GETSCROLLTIME and TVM_SETSCROLLTIME */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetScrollTime(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetScrollTimeSeq, - "TestGetSetScrollTime", FALSE); - - /* TVM_GETTEXTCOLOR and TVM_SETTEXTCOLOR */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetTextColor(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetTextColorSeq, - "TestGetSetTextColor", FALSE); - - /* TVM_GETTOOLTIPS and TVM_SETTOOLTIPS */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetToolTips(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetToolTipsSeq, - "TestGetSetToolTips", TRUE); - - /* TVM_GETUNICODEFORMAT and TVM_SETUNICODEFORMAT */ - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - TestGetSetUnicodeFormat(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, TestGetSetUnicodeFormatSeq, - "TestGetSetUnicodeFormat", FALSE); -} - -/* This function hooks in and records all messages to the treeview control */ -static LRESULT WINAPI TreeviewWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - WNDPROC lpOldProc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(MsgSequences, LISTVIEW_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(lpOldProc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static LRESULT CALLBACK MyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - WNDPROC pOldWndProc; - - switch(msg) { - - case WM_CREATE: - { - hTree = CreateWindowExA(WS_EX_CLIENTEDGE, WC_TREEVIEWA, NULL, WS_CHILD|WS_VISIBLE| - TVS_LINESATROOT|TVS_HASLINES|TVS_HASBUTTONS|TVS_EDITLABELS, - 0, 0, 120, 100, hWnd, (HMENU)100, GetModuleHandleA(0), 0); - - SetFocus(hTree); - - /* Record the old WNDPROC so we can call it after recording the messages */ - pOldWndProc = (WNDPROC)SetWindowLongPtrA(hTree, GWLP_WNDPROC, (LONG_PTR)TreeviewWndProc); - SetWindowLongPtrA(hTree, GWLP_USERDATA, (LONG_PTR)pOldWndProc); - - return 0; - } - case WM_NOTIFY: - { - NMHDR *pHdr = (NMHDR *)lParam; - - ok(pHdr->code != NM_FIRST - 19, "Treeview should not send NM_TOOLTIPSCREATED\n"); - if (pHdr->idFrom == 100) { - NMTREEVIEWA *pTreeView = (LPNMTREEVIEWA) lParam; - switch(pHdr->code) { - case TVN_SELCHANGINGA: - AddItem('('); - IdentifyItem(pTreeView->itemOld.hItem); - IdentifyItem(pTreeView->itemNew.hItem); - return 0; - case TVN_SELCHANGEDA: - AddItem(')'); - IdentifyItem(pTreeView->itemOld.hItem); - IdentifyItem(pTreeView->itemNew.hItem); - return 0; - } - } - return 0; - } - - case WM_SIZE: - MoveWindow(hTree, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProcA(hWnd, msg, wParam, lParam); - } - return 0L; -} - -START_TEST(treeview) -{ - HMODULE hComctl32; - BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); - WNDCLASSA wc; - MSG msg; - - hComctl32 = GetModuleHandleA("comctl32.dll"); - pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); - if (pInitCommonControlsEx) - { - INITCOMMONCONTROLSEX iccex; - iccex.dwSize = sizeof(iccex); - iccex.dwICC = ICC_TREEVIEW_CLASSES; - pInitCommonControlsEx(&iccex); - } - else - InitCommonControls(); - - init_msg_sequences(MsgSequences, NUM_MSG_SEQUENCES); - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_IBEAM); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = "MyTestWnd"; - wc.lpfnWndProc = MyWndProc; - RegisterClassA(&wc); - - - hMainWnd = CreateWindowExA(0, "MyTestWnd", "Blah", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 130, 105, NULL, NULL, GetModuleHandleA(NULL), 0); - - if ( !ok(hMainWnd != NULL, "Failed to create parent window. Tests aborted.\n") ) - return; - - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - FillRoot(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, FillRootSeq, "FillRoot", FALSE); - - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - DoTest1(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, DoTest1Seq, "DoTest1", FALSE); - - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - DoTest2(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, DoTest2Seq, "DoTest2", FALSE); - - flush_sequences(MsgSequences, NUM_MSG_SEQUENCES); - DoFocusTest(); - ok_sequence(MsgSequences, LISTVIEW_SEQ_INDEX, DoFocusTestSeq, "DoFocusTest", TRUE); - - /* Sequences tested inside due to number */ - TestGetSet(); - - PostMessageA(hMainWnd, WM_CLOSE, 0, 0); - while(GetMessageA(&msg,0,0,0)) { - TranslateMessage(&msg); - DispatchMessageA(&msg); - } -} diff --git a/rostests/winetests/comctl32/updown.c b/rostests/winetests/comctl32/updown.c deleted file mode 100644 index 6f8e395f26d..00000000000 --- a/rostests/winetests/comctl32/updown.c +++ /dev/null @@ -1,592 +0,0 @@ -/* Unit tests for the up-down control - * - * Copyright 2005 C. Scott Ananian - * Copyright (C) 2007 James Hawkins - * Copyright (C) 2007 Leslie Choong - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -/* TO TEST: - * - send click messages to the up-down control, check the current position - * - up-down control automatically positions itself next to its buddy window - * - up-down control sets the caption of the buddy window - * - test CreateUpDownControl API - * - check UDS_AUTOBUDDY style, up-down control selects previous window in z-order - * - check UDM_SETBUDDY message - * - check UDM_GETBUDDY message - * - up-down control and buddy control must have the same parent - * - up-down control notifies its parent window when its position changes with UDN_DELTAPOS + WM_VSCROLL or WM_HSCROLL - * - check UDS_ALIGN[LEFT,RIGHT]...check that width of buddy window is decreased - * - check that UDS_SETBUDDYINT sets the caption of the buddy window when it is changed - * - check that the thousands operator is set for large numbers - * - check that the thousands operator is not set with UDS_NOTHOUSANDS - * - check UDS_ARROWKEYS, control subclasses the buddy window so that it processes the keys when it has focus - * - check UDS_HORZ - * - check changing past min/max values - * - check UDS_WRAP wraps values past min/max, incrementing past upper value wraps position to lower value - * - can change control's position, min/max pos, radix - * - check UDM_GETPOS, for up-down control with a buddy window, position is the caption of the buddy window, so change the - * caption of the buddy window then call UDM_GETPOS - * - check UDM_SETRANGE, max can be less than min, so clicking the up arrow decreases the current position - * - more stuff to test - */ - -#include -#include -#include -#include - -#include "wine/test.h" -#include "msg.h" - -#define expect(EXPECTED,GOT) ok((GOT)==(EXPECTED), "Expected %d, got %d\n", (EXPECTED), (GOT)) - -#define NUM_MSG_SEQUENCES 3 -#define PARENT_SEQ_INDEX 0 -#define EDIT_SEQ_INDEX 1 -#define UPDOWN_SEQ_INDEX 2 - -static HWND parent_wnd, edit, updown; - -static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; - -static const struct message create_parent_wnd_seq[] = { - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|defwinproc|optional }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent, /*|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE*/ }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { WM_SIZE, sent }, - { WM_MOVE, sent }, - { 0 } -}; - -static const struct message add_edit_to_parent_seq[] = { - { WM_PARENTNOTIFY, sent|wparam, WM_CREATE }, - { 0 } -}; - -static const struct message add_updown_with_edit_seq[] = { - { WM_WINDOWPOSCHANGING, sent }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { WM_WINDOWPOSCHANGED, sent }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED /*, MAKELONG(91, 75) exact size depends on font */ }, - { 0 } -}; - -static const struct message add_updown_to_parent_seq[] = { - { WM_NOTIFYFORMAT, sent|lparam, 0, NF_QUERY }, - { WM_QUERYUISTATE, sent }, - { WM_PARENTNOTIFY, sent|wparam, MAKELONG(WM_CREATE, WM_CREATE) }, - { 0 } -}; - -static const struct message get_edit_text_seq[] = { - { WM_GETTEXT, sent }, - { 0 } -}; - -static const struct message test_updown_pos_seq[] = { - { UDM_SETRANGE, sent|lparam, 0, MAKELONG(100,0) }, - { UDM_GETRANGE, sent}, - { UDM_SETPOS, sent|lparam, 0, 5}, - { UDM_GETPOS, sent}, - { UDM_SETPOS, sent|lparam, 0, 0}, - { UDM_GETPOS, sent}, - { UDM_SETPOS, sent|lparam, 0, MAKELONG(-1,0)}, - { UDM_GETPOS, sent}, - { UDM_SETPOS, sent|lparam, 0, 100}, - { UDM_GETPOS, sent}, - { UDM_SETPOS, sent|lparam, 0, 101}, - { UDM_GETPOS, sent}, - { 0 } -}; - -static const struct message test_updown_pos32_seq[] = { - { UDM_SETRANGE32, sent|lparam, 0, 1000 }, - { UDM_GETRANGE32, sent}, /* Cannot check wparam and lparam as they are ptrs */ - { UDM_SETPOS32, sent|lparam, 0, 500 }, - { UDM_GETPOS32, sent}, - { UDM_SETPOS32, sent|lparam, 0, 0 }, - { UDM_GETPOS32, sent}, - { UDM_SETPOS32, sent|lparam, 0, -1 }, - { UDM_GETPOS32, sent}, - { UDM_SETPOS32, sent|lparam, 0, 1000 }, - { UDM_GETPOS32, sent}, - { UDM_SETPOS32, sent|lparam, 0, 1001 }, - { UDM_GETPOS32, sent}, - { 0 } -}; - -static const struct message test_updown_buddy_seq[] = { - { UDM_GETBUDDY, sent }, - { UDM_SETBUDDY, sent }, - { WM_STYLECHANGING, sent|defwinproc }, - { WM_STYLECHANGED, sent|defwinproc }, - { WM_STYLECHANGING, sent|defwinproc }, - { WM_STYLECHANGED, sent|defwinproc }, - { WM_WINDOWPOSCHANGING, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam|optional|defwinproc, 1 }, - { WM_WINDOWPOSCHANGED, sent|defwinproc }, - { WM_MOVE, sent|defwinproc }, - { UDM_GETBUDDY, sent }, - { 0 } -}; - -static const struct message test_updown_base_seq[] = { - { UDM_SETBASE, sent|wparam, 10 }, - { UDM_GETBASE, sent }, - { UDM_SETBASE, sent|wparam, 80 }, - { UDM_GETBASE, sent }, - { UDM_SETBASE, sent|wparam, 16 }, - { UDM_GETBASE, sent }, - { UDM_SETBASE, sent|wparam, 80 }, - { UDM_GETBASE, sent }, - { UDM_SETBASE, sent|wparam, 10 }, - { UDM_GETBASE, sent }, - { 0 } -}; - -static const struct message test_updown_unicode_seq[] = { - { UDM_SETUNICODEFORMAT, sent|wparam, 0 }, - { UDM_GETUNICODEFORMAT, sent }, - { UDM_SETUNICODEFORMAT, sent|wparam, 1 }, - { UDM_GETUNICODEFORMAT, sent }, - { UDM_SETUNICODEFORMAT, sent|wparam, 0 }, - { UDM_GETUNICODEFORMAT, sent }, - { 0 } -}; - -static const struct message test_updown_destroy_seq[] = { - { WM_SHOWWINDOW, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent}, - { WM_WINDOWPOSCHANGED, sent}, - { WM_DESTROY, sent}, - { WM_NCDESTROY, sent}, - { 0 } -}; - -static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_ERASEBKGND && - message != WM_NCPAINT && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, PARENT_SEQ_INDEX, &msg); - } - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static BOOL register_parent_wnd_class(void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = parent_wnd_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(NULL); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "Up-Down test parent class"; - return RegisterClassA(&cls); -} - -static HWND create_parent_window(void) -{ - if (!register_parent_wnd_class()) - return NULL; - - return CreateWindowEx(0, "Up-Down test parent class", - "Up-Down test parent window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_VISIBLE, - 0, 0, 100, 100, - GetDesktopWindow(), NULL, GetModuleHandleA(NULL), NULL); -} - -struct subclass_info -{ - WNDPROC oldproc; -}; - -static LRESULT WINAPI edit_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("edit: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, EDIT_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - return ret; -} - -static HWND create_edit_control(void) -{ - struct subclass_info *info; - RECT rect; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - GetClientRect(parent_wnd, &rect); - edit = CreateWindowExA(0, "EDIT", NULL, WS_CHILD | WS_BORDER | WS_VISIBLE, - 0, 0, rect.right, rect.bottom, - parent_wnd, NULL, GetModuleHandleA(NULL), NULL); - if (!edit) - { - HeapFree(GetProcessHeap(), 0, info); - return NULL; - } - - info->oldproc = (WNDPROC)SetWindowLongPtrA(edit, GWLP_WNDPROC, - (LONG_PTR)edit_subclass_proc); - SetWindowLongPtrA(edit, GWLP_USERDATA, (LONG_PTR)info); - - return edit; -} - -static LRESULT WINAPI updown_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("updown: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(sequences, UPDOWN_SEQ_INDEX, &msg); - - defwndproc_counter++; - ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static HWND create_updown_control(void) -{ - struct subclass_info *info; - HWND updown; - RECT rect; - - info = HeapAlloc(GetProcessHeap(), 0, sizeof(struct subclass_info)); - if (!info) - return NULL; - - GetClientRect(parent_wnd, &rect); - updown = CreateUpDownControl(WS_CHILD | WS_BORDER | WS_VISIBLE | UDS_ALIGNRIGHT, - 0, 0, rect.right, rect.bottom, parent_wnd, 1, GetModuleHandleA(NULL), edit, - 100, 0, 50); - if (!updown) - { - HeapFree(GetProcessHeap(), 0, info); - return NULL; - } - - info->oldproc = (WNDPROC)SetWindowLongPtrA(updown, GWLP_WNDPROC, - (LONG_PTR)updown_subclass_proc); - SetWindowLongPtrA(updown, GWLP_USERDATA, (LONG_PTR)info); - - return updown; -} - -static void test_updown_pos(void) -{ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Set Range from 0 to 100 */ - SendMessage(updown, UDM_SETRANGE, 0 , MAKELONG(100,0) ); - r = SendMessage(updown, UDM_GETRANGE, 0,0); - expect(100,LOWORD(r)); - expect(0,HIWORD(r)); - - /* Set the position to 5, return is not checked as it was set before func call */ - SendMessage(updown, UDM_SETPOS, 0 , MAKELONG(5,0) ); - /* Since UDM_SETBUDDYINT was not set at creation HIWORD(r) will always be 1 as a return from UDM_GETPOS */ - /* Get the position, which should be 5 */ - r = SendMessage(updown, UDM_GETPOS, 0 , 0 ); - expect(5,LOWORD(r)); - expect(1,HIWORD(r)); - - /* Set the position to 0, return should be 5 */ - r = SendMessage(updown, UDM_SETPOS, 0 , MAKELONG(0,0) ); - expect(5,r); - /* Get the position, which should be 0 */ - r = SendMessage(updown, UDM_GETPOS, 0 , 0 ); - expect(0,LOWORD(r)); - expect(1,HIWORD(r)); - - /* Set the position to -1, return should be 0 */ - r = SendMessage(updown, UDM_SETPOS, 0 , MAKELONG(-1,0) ); - expect(0,r); - /* Get the position, which should be 0 */ - r = SendMessage(updown, UDM_GETPOS, 0 , 0 ); - expect(0,LOWORD(r)); - expect(1,HIWORD(r)); - - /* Set the position to 100, return should be 0 */ - r = SendMessage(updown, UDM_SETPOS, 0 , MAKELONG(100,0) ); - expect(0,r); - /* Get the position, which should be 100 */ - r = SendMessage(updown, UDM_GETPOS, 0 , 0 ); - expect(100,LOWORD(r)); - expect(1,HIWORD(r)); - - /* Set the position to 101, return should be 100 */ - r = SendMessage(updown, UDM_SETPOS, 0 , MAKELONG(101,0) ); - expect(100,r); - /* Get the position, which should be 100 */ - r = SendMessage(updown, UDM_GETPOS, 0 , 0 ); - expect(100,LOWORD(r)); - expect(1,HIWORD(r)); - - ok_sequence(sequences, UPDOWN_SEQ_INDEX, test_updown_pos_seq , "test updown pos", FALSE); -} - -static void test_updown_pos32(void) -{ - int r; - int low, high; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Set the position to 0 to 1000 */ - SendMessage(updown, UDM_SETRANGE32, 0 , 1000 ); - - r = SendMessage(updown, UDM_GETRANGE32, (WPARAM) &low , (LPARAM) &high ); - expect(0,low); - expect(1000,high); - - /* Set position to 500, don't check return since it is unset*/ - SendMessage(updown, UDM_SETPOS32, 0 , 500 ); - - /* Since UDM_SETBUDDYINT was not set at creation bRet will always be true as a return from UDM_GETPOS32 */ - - r = SendMessage(updown, UDM_GETPOS32, 0 , (LPARAM) &high ); - expect(500,r); - expect(1,high); - - /* Set position to 0, return should be 500 */ - r = SendMessage(updown, UDM_SETPOS32, 0 , 0 ); - expect(500,r); - r = SendMessage(updown, UDM_GETPOS32, 0 , (LPARAM) &high ); - expect(0,r); - expect(1,high); - - /* Set position to -1 which should become 0, return should be 0 */ - r = SendMessage(updown, UDM_SETPOS32, 0 , -1 ); - expect(0,r); - r = SendMessage(updown, UDM_GETPOS32, 0 , (LPARAM) &high ); - expect(0,r); - expect(1,high); - - /* Set position to 1000, return should be 0 */ - r = SendMessage(updown, UDM_SETPOS32, 0 , 1000 ); - expect(0,r); - r = SendMessage(updown, UDM_GETPOS32, 0 , (LPARAM) &high ); - expect(1000,r); - expect(1,high); - - /* Set position to 1001 which should become 1000, return should be 1000 */ - r = SendMessage(updown, UDM_SETPOS32, 0 , 1001 ); - expect(1000,r); - r = SendMessage(updown, UDM_GETPOS32, 0 , (LPARAM) &high ); - expect(1000,r); - expect(1,high); - - ok_sequence(sequences, UPDOWN_SEQ_INDEX, test_updown_pos32_seq, "test updown pos32", FALSE); -} - -static void test_updown_buddy(void) -{ - HWND buddyReturn; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - buddyReturn = (HWND)SendMessage(updown, UDM_GETBUDDY, 0 , 0 ); - ok(buddyReturn == edit, "Expected edit handle\n"); - - buddyReturn = (HWND)SendMessage(updown, UDM_SETBUDDY, (WPARAM) edit, 0); - ok(buddyReturn == edit, "Expected edit handle\n"); - - buddyReturn = (HWND)SendMessage(updown, UDM_GETBUDDY, 0 , 0 ); - ok(buddyReturn == edit, "Expected edit handle\n"); - - ok_sequence(sequences, UPDOWN_SEQ_INDEX, test_updown_buddy_seq, "test updown buddy", TRUE); - ok_sequence(sequences, EDIT_SEQ_INDEX, add_updown_with_edit_seq, "test updown buddy_edit", FALSE); -} - -static void test_updown_base(void) -{ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - SendMessage(updown, UDM_SETBASE, 10 , 0); - r = SendMessage(updown, UDM_GETBASE, 0 , 0); - expect(10,r); - - /* Set base to an invalid value, should return 0 and stay at 10 */ - r = SendMessage(updown, UDM_SETBASE, 80 , 0); - expect(0,r); - r = SendMessage(updown, UDM_GETBASE, 0 , 0); - expect(10,r); - - /* Set base to 16 now, should get 16 as the return */ - r = SendMessage(updown, UDM_SETBASE, 16 , 0); - expect(10,r); - r = SendMessage(updown, UDM_GETBASE, 0 , 0); - expect(16,r); - - /* Set base to an invalid value, should return 0 and stay at 16 */ - r = SendMessage(updown, UDM_SETBASE, 80 , 0); - expect(0,r); - r = SendMessage(updown, UDM_GETBASE, 0 , 0); - expect(16,r); - - /* Set base back to 10, return should be 16 */ - r = SendMessage(updown, UDM_SETBASE, 10 , 0); - expect(16,r); - r = SendMessage(updown, UDM_GETBASE, 0 , 0); - expect(10,r); - - ok_sequence(sequences, UPDOWN_SEQ_INDEX, test_updown_base_seq, "test updown base", FALSE); -} - -static void test_updown_unicode(void) -{ - int r; - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - /* Set it to ANSI, don't check return as we don't know previous state */ - SendMessage(updown, UDM_SETUNICODEFORMAT, 0 , 0); - r = SendMessage(updown, UDM_GETUNICODEFORMAT, 0 , 0); - expect(0,r); - - /* Now set it to Unicode format */ - r = SendMessage(updown, UDM_SETUNICODEFORMAT, 1 , 0); - expect(0,r); - r = SendMessage(updown, UDM_GETUNICODEFORMAT, 0 , 0); - expect(1,r); - - /* And now set it back to ANSI */ - r = SendMessage(updown, UDM_SETUNICODEFORMAT, 0 , 0); - expect(1,r); - r = SendMessage(updown, UDM_GETUNICODEFORMAT, 0 , 0); - expect(0,r); - - ok_sequence(sequences, UPDOWN_SEQ_INDEX, test_updown_unicode_seq, "test updown unicode", FALSE); -} - - -static void test_create_updown_control(void) -{ - CHAR text[MAX_PATH]; - - parent_wnd = create_parent_window(); - ok(parent_wnd != NULL, "Failed to create parent window!\n"); - ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_wnd_seq, "create parent window", TRUE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - edit = create_edit_control(); - ok(edit != NULL, "Failed to create edit control\n"); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_edit_to_parent_seq, "add edit control to parent", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - updown = create_updown_control(); - ok(updown != NULL, "Failed to create updown control\n"); - ok_sequence(sequences, PARENT_SEQ_INDEX, add_updown_to_parent_seq, "add updown control to parent", TRUE); - ok_sequence(sequences, EDIT_SEQ_INDEX, add_updown_with_edit_seq, "add updown control with edit", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - GetWindowTextA(edit, text, MAX_PATH); - ok(lstrlenA(text) == 0, "Expected empty string\n"); - ok_sequence(sequences, EDIT_SEQ_INDEX, get_edit_text_seq, "get edit text", FALSE); - - flush_sequences(sequences, NUM_MSG_SEQUENCES); - - test_updown_pos(); - test_updown_pos32(); - test_updown_buddy(); - test_updown_base(); - test_updown_unicode(); -} - -START_TEST(updown) -{ - InitCommonControls(); - init_msg_sequences(sequences, NUM_MSG_SEQUENCES); - - test_create_updown_control(); -} diff --git a/rostests/winetests/comdlg32/comdlg32.rbuild b/rostests/winetests/comdlg32/comdlg32.rbuild deleted file mode 100644 index 5dce1cc1706..00000000000 --- a/rostests/winetests/comdlg32/comdlg32.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - - . - filedlg.c - printdlg.c - testlist.c - wine - comdlg32 - user32 - kernel32 - ntdll - - diff --git a/rostests/winetests/comdlg32/filedlg.c b/rostests/winetests/comdlg32/filedlg.c deleted file mode 100644 index ea999f330db..00000000000 --- a/rostests/winetests/comdlg32/filedlg.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Unit test suite for comdlg32 API functions: file dialogs - * - * Copyright 2007 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 - * - */ - -#include -#include - - -/* ##### */ - -static UINT CALLBACK OFNHookProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - LPNMHDR nmh; - - if( msg == WM_NOTIFY) - { - nmh = (LPNMHDR) lParam; - if( nmh->code == CDN_INITDONE) - { - PostMessage( GetParent(hDlg), WM_COMMAND, IDCANCEL, FALSE); - } else if (nmh->code == CDN_FOLDERCHANGE ) - { - char buf[1024]; - int ret; - - memset(buf, 0x66, sizeof(buf)); - ret = SendMessage( GetParent(hDlg), CDM_GETFOLDERIDLIST, 5, (LPARAM)buf); - ok(ret > 0, "CMD_GETFOLDERIDLIST not implemented\n"); - if (ret > 5) - ok(buf[0] == 0x66 && buf[1] == 0x66, "CMD_GETFOLDERIDLIST: The buffer was touched on failure\n"); - } - } - - return 0; -} - -/* bug 6829 */ -static void test_DialogCancel(void) -{ - OPENFILENAMEA ofn; - BOOL result; - char szFileName[MAX_PATH] = ""; - char szInitialDir[MAX_PATH]; - - GetWindowsDirectory(szInitialDir, MAX_PATH); - - ZeroMemory(&ofn, sizeof(ofn)); - - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = NULL; - ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"; - ofn.lpstrFile = szFileName; - ofn.nMaxFile = MAX_PATH; - ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLEHOOK; - ofn.lpstrDefExt = "txt"; - ofn.lpfnHook = (LPOFNHOOKPROC) OFNHookProc; - ofn.lpstrInitialDir = szInitialDir; - - PrintDlgA(NULL); - ok(CDERR_INITIALIZATION == CommDlgExtendedError(), "expected %d, got %d\n", - CDERR_INITIALIZATION, CommDlgExtendedError()); - - result = GetOpenFileNameA(&ofn); - ok(0 == result, "expected %d, got %d\n", 0, result); - ok(0 == CommDlgExtendedError(), "expected %d, got %d\n", 0, - CommDlgExtendedError()); - - PrintDlgA(NULL); - ok(CDERR_INITIALIZATION == CommDlgExtendedError(), "expected %d, got %d\n", - CDERR_INITIALIZATION, CommDlgExtendedError()); - - result = GetSaveFileNameA(&ofn); - ok(0 == result, "expected %d, got %d\n", 0, result); - ok(0 == CommDlgExtendedError(), "expected %d, got %d\n", 0, - CommDlgExtendedError()); - - PrintDlgA(NULL); - ok(CDERR_INITIALIZATION == CommDlgExtendedError(), "expected %d, got %d\n", - CDERR_INITIALIZATION, CommDlgExtendedError()); - - /* Before passing the ofn to Unicode functions, remove the ANSI strings */ - ofn.lpstrFilter = NULL; - ofn.lpstrInitialDir = NULL; - ofn.lpstrDefExt = NULL; - - PrintDlgA(NULL); - ok(CDERR_INITIALIZATION == CommDlgExtendedError(), "expected %d, got %d\n", - CDERR_INITIALIZATION, CommDlgExtendedError()); - - SetLastError(0xdeadbeef); - result = GetOpenFileNameW((LPOPENFILENAMEW) &ofn); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - skip("GetOpenFileNameW is not implemented\n"); - else - { - ok(0 == result, "expected %d, got %d\n", 0, result); - ok(0 == CommDlgExtendedError() || - CDERR_INITIALIZATION == CommDlgExtendedError(), /* win9x */ - "expected %d or %d, got %d\n", 0, CDERR_INITIALIZATION, - CommDlgExtendedError()); - } - - SetLastError(0xdeadbeef); - result = GetSaveFileNameW((LPOPENFILENAMEW) &ofn); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - skip("GetSaveFileNameW is not implemented\n"); - else - { - ok(0 == result, "expected %d, got %d\n", 0, result); - ok(0 == CommDlgExtendedError() || - CDERR_INITIALIZATION == CommDlgExtendedError(), /* win9x */ - "expected %d or %d, got %d\n", 0, CDERR_INITIALIZATION, - CommDlgExtendedError()); - } -} - - -START_TEST(filedlg) -{ - test_DialogCancel(); - -} diff --git a/rostests/winetests/comdlg32/printdlg.c b/rostests/winetests/comdlg32/printdlg.c deleted file mode 100644 index fef274de27b..00000000000 --- a/rostests/winetests/comdlg32/printdlg.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Unit test suite for comdlg32 API functions: printer dialogs - * - * Copyright 2006-2007 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 - * - */ - -#include - -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "wingdi.h" -#include "winuser.h" -#include "objbase.h" - -#include "cderr.h" -#include "commdlg.h" - -#include "wine/test.h" - -/* ########################### */ - -static HMODULE hcomdlg32; -static HRESULT (WINAPI * pPrintDlgExA)(LPPRINTDLGEXA); -static HRESULT (WINAPI * pPrintDlgExW)(LPPRINTDLGEXW); - -/* ########################### */ - -static const CHAR emptyA[] = ""; -static const CHAR PrinterPortsA[] = "PrinterPorts"; - -/* ########################### */ - -static LPCSTR load_functions(void) -{ - LPCSTR ptr; - - ptr = "comdlg32.dll"; - hcomdlg32 = GetModuleHandleA(ptr); - - ptr = "PrintDlgExA"; - pPrintDlgExA = (void *) GetProcAddress(hcomdlg32, ptr); - if (!pPrintDlgExA) return ptr; - - ptr = "PrintDlgExW"; - pPrintDlgExW = (void *) GetProcAddress(hcomdlg32, ptr); - if (!pPrintDlgExW) return ptr; - - return NULL; - -} - -/* ########################### */ - -static void test_PageSetupDlgA(void) -{ - LPPAGESETUPDLGA pDlg; - DWORD res; - - pDlg = HeapAlloc(GetProcessHeap(), 0, (sizeof(PAGESETUPDLGA)) * 2); - if (!pDlg) return; - - SetLastError(0xdeadbeef); - res = PageSetupDlgA(NULL); - ok( !res && (CommDlgExtendedError() == CDERR_INITIALIZATION), - "returned %u with %u and 0x%x (expected '0' and " - "CDERR_INITIALIZATION)\n", res, GetLastError(), CommDlgExtendedError()); - - ZeroMemory(pDlg, sizeof(PAGESETUPDLGA)); - pDlg->lStructSize = sizeof(PAGESETUPDLGA) -1; - SetLastError(0xdeadbeef); - res = PageSetupDlgA(pDlg); - ok( !res && (CommDlgExtendedError() == CDERR_STRUCTSIZE), - "returned %u with %u and 0x%x (expected '0' and " - "CDERR_STRUCTSIZE)\n", res, GetLastError(), CommDlgExtendedError()); - - ZeroMemory(pDlg, sizeof(PAGESETUPDLGA)); - pDlg->lStructSize = sizeof(PAGESETUPDLGA) +1; - pDlg->Flags = PSD_RETURNDEFAULT; - SetLastError(0xdeadbeef); - res = PageSetupDlgA(pDlg); - ok( !res && (CommDlgExtendedError() == CDERR_STRUCTSIZE), - "returned %u with %u and 0x%x (expected '0' and CDERR_STRUCTSIZE)\n", - res, GetLastError(), CommDlgExtendedError()); - - - ZeroMemory(pDlg, sizeof(PAGESETUPDLGA)); - pDlg->lStructSize = sizeof(PAGESETUPDLGA); - pDlg->Flags = PSD_RETURNDEFAULT | PSD_NOWARNING; - SetLastError(0xdeadbeef); - res = PageSetupDlgA(pDlg); - ok( res || (CommDlgExtendedError() == PDERR_NODEFAULTPRN), - "returned %u with %u and 0x%x (expected '!= 0' or '0' and " - "PDERR_NODEFAULTPRN)\n", res, GetLastError(), CommDlgExtendedError()); - - if (!res && (CommDlgExtendedError() == PDERR_NODEFAULTPRN)) { - skip("No printer configured.\n"); - HeapFree(GetProcessHeap(), 0, pDlg); - return; - } - - ok( pDlg->hDevMode && pDlg->hDevNames, - "got %p and %p (expected '!= NULL' for both)\n", - pDlg->hDevMode, pDlg->hDevNames); - - GlobalFree(pDlg->hDevMode); - GlobalFree(pDlg->hDevNames); - - HeapFree(GetProcessHeap(), 0, pDlg); - -} - -/* ########################### */ - -static void test_PrintDlgA(void) -{ - DWORD res; - LPPRINTDLGA pDlg; - DEVNAMES *pDevNames; - LPCSTR driver; - LPCSTR device; - LPCSTR port; - CHAR buffer[MAX_PATH]; - LPSTR ptr; - - - pDlg = HeapAlloc(GetProcessHeap(), 0, (sizeof(PRINTDLGA)) * 2); - if (!pDlg) return; - - - /* will crash with unpatched wine */ - SetLastError(0xdeadbeef); - res = PrintDlgA(NULL); - ok( !res && (CommDlgExtendedError() == CDERR_INITIALIZATION), - "returned %d with 0x%x and 0x%x (expected '0' and " - "CDERR_INITIALIZATION)\n", res, GetLastError(), CommDlgExtendedError()); - - ZeroMemory(pDlg, sizeof(PRINTDLGA)); - pDlg->lStructSize = sizeof(PRINTDLGA) - 1; - SetLastError(0xdeadbeef); - res = PrintDlgA(pDlg); - ok( !res && (CommDlgExtendedError() == CDERR_STRUCTSIZE), - "returned %d with 0x%x and 0x%x (expected '0' and " - "CDERR_STRUCTSIZE)\n", res, GetLastError(), CommDlgExtendedError()); - - ZeroMemory(pDlg, sizeof(PRINTDLGA)); - pDlg->lStructSize = sizeof(PRINTDLGA) + 1; - pDlg->Flags = PD_RETURNDEFAULT; - SetLastError(0xdeadbeef); - res = PrintDlgA(pDlg); - ok( !res && (CommDlgExtendedError() == CDERR_STRUCTSIZE), - "returned %u with %u and 0x%x (expected '0' and " - "CDERR_STRUCTSIZE)\n", res, GetLastError(), CommDlgExtendedError()); - - - ZeroMemory(pDlg, sizeof(PRINTDLGA)); - pDlg->lStructSize = sizeof(PRINTDLGA); - pDlg->Flags = PD_RETURNDEFAULT; - SetLastError(0xdeadbeef); - res = PrintDlgA(pDlg); - ok( res || (CommDlgExtendedError() == PDERR_NODEFAULTPRN), - "returned %d with 0x%x and 0x%x (expected '!= 0' or '0' and " - "PDERR_NODEFAULTPRN)\n", res, GetLastError(), CommDlgExtendedError()); - - if (!res && (CommDlgExtendedError() == PDERR_NODEFAULTPRN)) { - skip("No printer configured.\n"); - HeapFree(GetProcessHeap(), 0, pDlg); - return; - } - - ok(pDlg->hDevNames != NULL, "(expected '!= NULL')\n"); - pDevNames = GlobalLock(pDlg->hDevNames); - ok(pDevNames != NULL, "(expected '!= NULL')\n"); - - if (pDevNames) { - ok(pDevNames->wDriverOffset, "(expected '!= 0' for wDriverOffset)\n"); - ok(pDevNames->wDeviceOffset, "(expected '!= 0' for wDeviceOffset)\n"); - ok(pDevNames->wOutputOffset, "(expected '!= 0' for wOutputOffset)\n"); - ok(pDevNames->wDefault == DN_DEFAULTPRN, "got 0x%x (expected DN_DEFAULTPRN)\n", pDevNames->wDefault); - - driver = (LPCSTR)pDevNames + pDevNames->wDriverOffset; - device = (LPCSTR)pDevNames + pDevNames->wDeviceOffset; - port = (LPCSTR)pDevNames + pDevNames->wOutputOffset; - trace("driver '%s' device '%s' port '%s'\n", driver, device, port); - - /* The Driver Entry does not include a Path */ - ptr = strrchr(driver, '\\'); - todo_wine { - ok( ptr == NULL, "got %p for '%s' (expected NULL for a simple name)\n", ptr, driver); - } - - /* The Driver Entry does not have an extension (fixed to ".drv") */ - ptr = strrchr(driver, '.'); - todo_wine { - ok( ptr == NULL, "got %p for '%s' (expected NULL for no extension)\n", ptr, driver); - } - - - buffer[0] = '\0'; - SetLastError(0xdeadbeef); - res = GetProfileStringA(PrinterPortsA, device, emptyA, buffer, sizeof(buffer)); - ptr = strchr(buffer, ','); - ok( (res > 1) && (ptr != NULL), - "got %u with %u and %p for '%s' (expected '>1' and '!= NULL')\n", - res, GetLastError(), ptr, buffer); - - if (ptr) ptr[0] = '\0'; - todo_wine { - ok( lstrcmpiA(driver, buffer) == 0, - "got driver '%s' (expected '%s')\n", driver, buffer); - } - - } - - GlobalUnlock(pDlg->hDevNames); - - GlobalFree(pDlg->hDevMode); - GlobalFree(pDlg->hDevNames); - HeapFree(GetProcessHeap(), 0, pDlg); - -} - -/* ########################### */ - -static void test_PrintDlgExW(void) -{ - LPPRINTDLGEXW pDlg; - HRESULT res; - - /* Set CommDlgExtendedError != 0 */ - PrintDlg(NULL); - SetLastError(0xdeadbeef); - res = pPrintDlgExW(NULL); - ok( (res == E_INVALIDARG), - "got 0x%x with %u and %u (expected 'E_INVALIDARG')\n", - res, GetLastError(), CommDlgExtendedError()); - - - pDlg = HeapAlloc(GetProcessHeap(), 0, (sizeof(PRINTDLGEXW)) + 8); - if (!pDlg) return; - - /* lStructSize must be exact */ - ZeroMemory(pDlg, sizeof(PRINTDLGEXW)); - pDlg->lStructSize = sizeof(PRINTDLGEXW) - 1; - PrintDlg(NULL); - SetLastError(0xdeadbeef); - res = pPrintDlgExW(pDlg); - ok( (res == E_INVALIDARG), - "got 0x%x with %u and %u (expected 'E_INVALIDARG')\n", - res, GetLastError(), CommDlgExtendedError()); - - - ZeroMemory(pDlg, sizeof(PRINTDLGEXW)); - pDlg->lStructSize = sizeof(PRINTDLGEXW) + 1; - PrintDlg(NULL); - SetLastError(0xdeadbeef); - res = pPrintDlgExW(pDlg); - ok( (res == E_INVALIDARG), - "got 0x%x with %u and %u (expected 'E_INVALIDARG')\n", - res, GetLastError(), CommDlgExtendedError()); - - - ZeroMemory(pDlg, sizeof(PRINTDLGEXW)); - pDlg->lStructSize = sizeof(PRINTDLGEXW); - SetLastError(0xdeadbeef); - res = pPrintDlgExW(pDlg); - ok( (res == E_HANDLE), - "got 0x%x with %u and %u (expected 'E_HANDLE')\n", - res, GetLastError(), CommDlgExtendedError()); - - - HeapFree(GetProcessHeap(), 0, pDlg); - return; - -} - -/* ########################### */ - -START_TEST(printdlg) -{ - LPCSTR ptr; - - ptr = load_functions(); - - test_PageSetupDlgA(); - test_PrintDlgA(); - - /* PrintDlgEx not present before w2k */ - if (ptr) { - skip("%s\n", ptr); - return; - } - - test_PrintDlgExW(); -} diff --git a/rostests/winetests/comdlg32/testlist.c b/rostests/winetests/comdlg32/testlist.c deleted file mode 100644 index 339b3525ac5..00000000000 --- a/rostests/winetests/comdlg32/testlist.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_filedlg(void); -extern void func_printdlg(void); - -const struct test winetest_testlist[] = -{ - { "filedlg", func_filedlg }, - { "printdlg", func_printdlg }, - { 0, 0 } -}; diff --git a/rostests/winetests/directory.rbuild b/rostests/winetests/directory.rbuild deleted file mode 100644 index 202496829a4..00000000000 --- a/rostests/winetests/directory.rbuild +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rostests/winetests/gdi32/bitmap.c b/rostests/winetests/gdi32/bitmap.c deleted file mode 100755 index 2ef28914a03..00000000000 --- a/rostests/winetests/gdi32/bitmap.c +++ /dev/null @@ -1,2148 +0,0 @@ -/* - * Unit test suite for bitmaps - * - * Copyright 2004 Huw Davies - * Copyright 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 - */ - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "wingdi.h" -#include "winuser.h" -#include "mmsystem.h" - -#include "wine/test.h" - -static BOOL (WINAPI *pGdiAlphaBlend)(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION); - -#define expect_eq(expr, value, type, format) { type ret = (expr); ok((value) == ret, #expr " expected " format " got " format "\n", value, ret); } - -static BOOL is_win9x; - -static INT BITMAP_GetWidthBytes( INT bmWidth, INT bpp ) -{ - switch(bpp) - { - case 1: - return 2 * ((bmWidth+15) >> 4); - - case 24: - bmWidth *= 3; /* fall through */ - case 8: - return bmWidth + (bmWidth & 1); - - case 32: - return bmWidth * 4; - - case 16: - case 15: - return bmWidth * 2; - - case 4: - return 2 * ((bmWidth+3) >> 2); - - default: - trace("Unknown depth %d, please report.\n", bpp ); - assert(0); - } - return -1; -} - -static void test_bitmap_info(HBITMAP hbm, INT expected_depth, const BITMAPINFOHEADER *bmih) -{ - BITMAP bm; - INT ret, width_bytes; - char buf[512], buf_cmp[512]; - - ret = GetObject(hbm, sizeof(bm), &bm); - ok(ret == sizeof(bm), "GetObject returned %d\n", ret); - - ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType); - ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth); - ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight); - width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); - ok(bm.bmWidthBytes == width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, width_bytes); - ok(bm.bmPlanes == bmih->biPlanes, "wrong bm.bmPlanes %d\n", bm.bmPlanes); - ok(bm.bmBitsPixel == expected_depth, "wrong bm.bmBitsPixel %d != %d\n", bm.bmBitsPixel, expected_depth); - ok(bm.bmBits == NULL, "wrong bm.bmBits %p\n", bm.bmBits); - - assert(sizeof(buf) >= bm.bmWidthBytes * bm.bmHeight); - assert(sizeof(buf) == sizeof(buf_cmp)); - - ret = GetBitmapBits(hbm, 0, NULL); - ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight); - - memset(buf_cmp, 0xAA, sizeof(buf_cmp)); - memset(buf_cmp, 0, bm.bmWidthBytes * bm.bmHeight); - - memset(buf, 0xAA, sizeof(buf)); - ret = GetBitmapBits(hbm, sizeof(buf), buf); - ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight); - ok(!memcmp(buf, buf_cmp, sizeof(buf)), "buffers do not match\n"); - - /* test various buffer sizes for GetObject */ - ret = GetObject(hbm, 0, NULL); - ok(ret == sizeof(bm), "wrong size %d\n", ret); - - ret = GetObject(hbm, sizeof(bm) * 2, &bm); - ok(ret == sizeof(bm), "wrong size %d\n", ret); - - ret = GetObject(hbm, sizeof(bm) / 2, &bm); - ok(ret == 0, "%d != 0\n", ret); - - ret = GetObject(hbm, 0, &bm); - ok(ret == 0, "%d != 0\n", ret); - - ret = GetObject(hbm, 1, &bm); - ok(ret == 0, "%d != 0\n", ret); -} - -static void test_createdibitmap(void) -{ - HDC hdc, hdcmem; - BITMAPINFOHEADER bmih; - BITMAPINFO bm; - HBITMAP hbm, hbm_colour, hbm_old; - INT screen_depth; - DWORD pixel; - - hdc = GetDC(0); - screen_depth = GetDeviceCaps(hdc, BITSPIXEL); - memset(&bmih, 0, sizeof(bmih)); - bmih.biSize = sizeof(bmih); - bmih.biWidth = 10; - bmih.biHeight = 10; - bmih.biPlanes = 1; - bmih.biBitCount = 32; - bmih.biCompression = BI_RGB; - - /* First create an un-initialised bitmap. The depth of the bitmap - should match that of the hdc and not that supplied in bmih. - */ - - /* First try 32 bits */ - hbm = CreateDIBitmap(hdc, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, screen_depth, &bmih); - DeleteObject(hbm); - - /* Then 16 */ - bmih.biBitCount = 16; - hbm = CreateDIBitmap(hdc, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, screen_depth, &bmih); - DeleteObject(hbm); - - /* Then 1 */ - bmih.biBitCount = 1; - hbm = CreateDIBitmap(hdc, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, screen_depth, &bmih); - DeleteObject(hbm); - - /* Now with a monochrome dc we expect a monochrome bitmap */ - hdcmem = CreateCompatibleDC(hdc); - - /* First try 32 bits */ - bmih.biBitCount = 32; - hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, 1, &bmih); - DeleteObject(hbm); - - /* Then 16 */ - bmih.biBitCount = 16; - hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, 1, &bmih); - DeleteObject(hbm); - - /* Then 1 */ - bmih.biBitCount = 1; - hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, 1, &bmih); - DeleteObject(hbm); - - /* Now select a polychrome bitmap into the dc and we expect - screen_depth bitmaps again */ - hbm_colour = CreateCompatibleBitmap(hdc, bmih.biWidth, bmih.biHeight); - test_bitmap_info(hbm_colour, screen_depth, &bmih); - hbm_old = SelectObject(hdcmem, hbm_colour); - - /* First try 32 bits */ - bmih.biBitCount = 32; - hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, screen_depth, &bmih); - DeleteObject(hbm); - - /* Then 16 */ - bmih.biBitCount = 16; - hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, screen_depth, &bmih); - DeleteObject(hbm); - - /* Then 1 */ - bmih.biBitCount = 1; - hbm = CreateDIBitmap(hdcmem, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, screen_depth, &bmih); - DeleteObject(hbm); - - SelectObject(hdcmem, hbm_old); - DeleteObject(hbm_colour); - DeleteDC(hdcmem); - - /* If hdc == 0 then we get a 1 bpp bitmap */ - if (!is_win9x) { - bmih.biBitCount = 32; - hbm = CreateDIBitmap(0, &bmih, 0, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - test_bitmap_info(hbm, 1, &bmih); - DeleteObject(hbm); - } - - /* Test how formats are converted */ - pixel = 0xffffffff; - bmih.biBitCount = 1; - bmih.biWidth = 1; - bmih.biHeight = 1; - - memset(&bm, 0, sizeof(bm)); - bm.bmiHeader.biSize = sizeof(bm.bmiHeader); - bm.bmiHeader.biWidth = 1; - bm.bmiHeader.biHeight = 1; - bm.bmiHeader.biPlanes = 1; - bm.bmiHeader.biBitCount= 24; - bm.bmiHeader.biCompression= BI_RGB; - bm.bmiHeader.biSizeImage = 0; - hbm = CreateDIBitmap(hdc, &bmih, CBM_INIT, &pixel, &bm, DIB_RGB_COLORS); - ok(hbm != NULL, "CreateDIBitmap failed\n"); - - pixel = 0xdeadbeef; - bm.bmiHeader.biBitCount= 32; - GetDIBits(hdc, hbm, 0, 1, &pixel, &bm, DIB_RGB_COLORS); - ok(pixel == 0x00ffffff, "Reading a 32 bit pixel from a DDB returned %08x\n", pixel); - DeleteObject(hbm); - - ReleaseDC(0, hdc); -} - -static INT DIB_GetWidthBytes( int width, int bpp ) -{ - int words; - - switch (bpp) - { - case 1: words = (width + 31) / 32; break; - case 4: words = (width + 7) / 8; break; - case 8: words = (width + 3) / 4; break; - case 15: - case 16: words = (width + 1) / 2; break; - case 24: words = (width * 3 + 3)/4; break; - case 32: words = width; break; - - default: - words=0; - trace("Unknown depth %d, please report.\n", bpp ); - assert(0); - break; - } - return 4 * words; -} - -static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER *bmih) -{ - BITMAP bm; - DIBSECTION ds; - INT ret, bm_width_bytes, dib_width_bytes; - BYTE *buf; - - ret = GetObject(hbm, sizeof(bm), &bm); - ok(ret == sizeof(bm), "GetObject returned %d\n", ret); - - ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType); - ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth); - ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight); - dib_width_bytes = DIB_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); - bm_width_bytes = BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel); - if (bm.bmWidthBytes != dib_width_bytes) /* Win2k bug */ - ok(bm.bmWidthBytes == bm_width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, bm_width_bytes); - else - ok(bm.bmWidthBytes == dib_width_bytes, "wrong bm.bmWidthBytes %d != %d\n", bm.bmWidthBytes, dib_width_bytes); - ok(bm.bmPlanes == bmih->biPlanes, "wrong bm.bmPlanes %d\n", bm.bmPlanes); - ok(bm.bmBitsPixel == bmih->biBitCount, "bm.bmBitsPixel %d != %d\n", bm.bmBitsPixel, bmih->biBitCount); - ok(bm.bmBits == bits, "wrong bm.bmBits %p != %p\n", bm.bmBits, bits); - - buf = HeapAlloc(GetProcessHeap(), 0, bm.bmWidthBytes * bm.bmHeight + 4096); - - /* GetBitmapBits returns not 32-bit aligned data */ - ret = GetBitmapBits(hbm, 0, NULL); - ok(ret == bm_width_bytes * bm.bmHeight, "%d != %d\n", ret, bm_width_bytes * bm.bmHeight); - - memset(buf, 0xAA, bm.bmWidthBytes * bm.bmHeight + 4096); - ret = GetBitmapBits(hbm, bm.bmWidthBytes * bm.bmHeight + 4096, buf); - ok(ret == bm_width_bytes * bm.bmHeight, "%d != %d\n", ret, bm_width_bytes * bm.bmHeight); - - HeapFree(GetProcessHeap(), 0, buf); - - /* test various buffer sizes for GetObject */ - memset(&ds, 0xAA, sizeof(ds)); - ret = GetObject(hbm, sizeof(bm) * 2, &bm); - ok(ret == sizeof(bm), "wrong size %d\n", ret); - ok(bm.bmWidth == bmih->biWidth, "wrong bm.bmWidth %d\n", bm.bmWidth); - ok(bm.bmHeight == bmih->biHeight, "wrong bm.bmHeight %d\n", bm.bmHeight); - ok(bm.bmBits == bits, "wrong bm.bmBits %p != %p\n", bm.bmBits, bits); - - ret = GetObject(hbm, sizeof(bm) / 2, &bm); - ok(ret == 0, "%d != 0\n", ret); - - ret = GetObject(hbm, 0, &bm); - ok(ret == 0, "%d != 0\n", ret); - - ret = GetObject(hbm, 1, &bm); - ok(ret == 0, "%d != 0\n", ret); - - /* test various buffer sizes for GetObject */ - ret = GetObject(hbm, 0, NULL); - ok(ret == sizeof(bm), "wrong size %d\n", ret); - - memset(&ds, 0xAA, sizeof(ds)); - ret = GetObject(hbm, sizeof(ds) * 2, &ds); - ok(ret == sizeof(ds), "wrong size %d\n", ret); - - ok(ds.dsBm.bmBits == bits, "wrong bm.bmBits %p != %p\n", ds.dsBm.bmBits, bits); - if (ds.dsBm.bmWidthBytes != bm_width_bytes) /* Win2k bug */ - ok(ds.dsBmih.biSizeImage == ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight, "%u != %u\n", - ds.dsBmih.biSizeImage, ds.dsBm.bmWidthBytes * ds.dsBm.bmHeight); - ok(bmih->biSizeImage == 0, "%u != 0\n", bmih->biSizeImage); - ds.dsBmih.biSizeImage = 0; - - ok(ds.dsBmih.biSize == bmih->biSize, "%u != %u\n", ds.dsBmih.biSize, bmih->biSize); - ok(ds.dsBmih.biWidth == bmih->biWidth, "%u != %u\n", ds.dsBmih.biWidth, bmih->biWidth); - ok(ds.dsBmih.biHeight == bmih->biHeight, "%u != %u\n", ds.dsBmih.biHeight, bmih->biHeight); - ok(ds.dsBmih.biPlanes == bmih->biPlanes, "%u != %u\n", ds.dsBmih.biPlanes, bmih->biPlanes); - ok(ds.dsBmih.biBitCount == bmih->biBitCount, "%u != %u\n", ds.dsBmih.biBitCount, bmih->biBitCount); - ok(ds.dsBmih.biCompression == bmih->biCompression, "%u != %u\n", ds.dsBmih.biCompression, bmih->biCompression); - ok(ds.dsBmih.biSizeImage == bmih->biSizeImage, "%u != %u\n", ds.dsBmih.biSizeImage, bmih->biSizeImage); - ok(ds.dsBmih.biXPelsPerMeter == bmih->biXPelsPerMeter, "%u != %u\n", ds.dsBmih.biXPelsPerMeter, bmih->biXPelsPerMeter); - ok(ds.dsBmih.biYPelsPerMeter == bmih->biYPelsPerMeter, "%u != %u\n", ds.dsBmih.biYPelsPerMeter, bmih->biYPelsPerMeter); - - memset(&ds, 0xAA, sizeof(ds)); - ret = GetObject(hbm, sizeof(ds) - 4, &ds); - ok(ret == sizeof(ds.dsBm), "wrong size %d\n", ret); - ok(ds.dsBm.bmWidth == bmih->biWidth, "%u != %u\n", ds.dsBmih.biWidth, bmih->biWidth); - ok(ds.dsBm.bmHeight == bmih->biHeight, "%u != %u\n", ds.dsBmih.biHeight, bmih->biHeight); - ok(ds.dsBm.bmBits == bits, "%p != %p\n", ds.dsBm.bmBits, bits); - - ret = GetObject(hbm, 0, &ds); - ok(ret == 0, "%d != 0\n", ret); - - ret = GetObject(hbm, 1, &ds); - ok(ret == 0, "%d != 0\n", ret); -} - -#define test_color_todo(got, exp, txt, todo) \ - if (!todo && got != exp && screen_depth < 24) { \ - todo_wine ok(0, #txt " failed at %d-bit screen depth: got 0x%06x expected 0x%06x - skipping DIB tests\n", \ - screen_depth, (UINT)got, (UINT)exp); \ - return; \ - } else if (todo) todo_wine { ok(got == exp, #txt " failed: got 0x%06x expected 0x%06x\n", (UINT)got, (UINT)exp); } \ - else ok(got == exp, #txt " failed: got 0x%06x expected 0x%06x\n", (UINT)got, (UINT)exp) \ - -#define test_color(hdc, color, exp, todo_setp, todo_getp) \ -{ \ - COLORREF c; \ - c = SetPixel(hdc, 0, 0, color); \ - if (!is_win9x) { test_color_todo(c, exp, SetPixel, todo_setp); } \ - c = GetPixel(hdc, 0, 0); \ - test_color_todo(c, exp, GetPixel, todo_getp); \ -} - -static void test_dibsections(void) -{ - HDC hdc, hdcmem, hdcmem2; - HBITMAP hdib, oldbm, hdib2, oldbm2; - char bmibuf[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)]; - char bcibuf[sizeof(BITMAPCOREINFO) + 256 * sizeof(RGBTRIPLE)]; - BITMAPINFO *pbmi = (BITMAPINFO *)bmibuf; - BITMAPCOREINFO *pbci = (BITMAPCOREINFO *)bcibuf; - HBITMAP hcoredib; - char coreBits[256]; - BYTE *bits; - RGBQUAD rgb[256]; - int ret; - char logpalbuf[sizeof(LOGPALETTE) + 256 * sizeof(PALETTEENTRY)]; - LOGPALETTE *plogpal = (LOGPALETTE*)logpalbuf; - WORD *index; - DWORD *bits32; - HPALETTE hpal, oldpal; - DIBSECTION dibsec; - COLORREF c0, c1; - int i; - int screen_depth; - MEMORY_BASIC_INFORMATION info; - - hdc = GetDC(0); - screen_depth = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES); - - memset(pbmi, 0, sizeof(bmibuf)); - pbmi->bmiHeader.biSize = sizeof(pbmi->bmiHeader); - pbmi->bmiHeader.biHeight = 100; - pbmi->bmiHeader.biWidth = 512; - pbmi->bmiHeader.biBitCount = 24; - pbmi->bmiHeader.biPlanes = 1; - pbmi->bmiHeader.biCompression = BI_RGB; - - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIBSection\n"); - ok(dibsec.dsBm.bmBits == bits, "dibsec.dsBits %p != bits %p\n", dibsec.dsBm.bmBits, bits); - - /* test the DIB memory */ - ok(VirtualQuery(bits, &info, sizeof(info)) == sizeof(info), - "VirtualQuery failed\n"); - ok(info.BaseAddress == bits, "%p != %p\n", info.BaseAddress, bits); - ok(info.AllocationBase == bits, "%p != %p\n", info.AllocationBase, bits); - ok(info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect); - ok(info.RegionSize == 0x26000, "0x%lx != 0x26000\n", info.RegionSize); - ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State); - ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect); - ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); - - test_dib_info(hdib, bits, &pbmi->bmiHeader); - DeleteObject(hdib); - - pbmi->bmiHeader.biBitCount = 8; - pbmi->bmiHeader.biCompression = BI_RLE8; - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0); - ok(hdib == NULL, "CreateDIBSection should fail when asked to create a compressed DIB section\n"); - ok(GetLastError() == 0xdeadbeef, "wrong error %d\n", GetLastError()); - - pbmi->bmiHeader.biBitCount = 16; - pbmi->bmiHeader.biCompression = BI_BITFIELDS; - ((PDWORD)pbmi->bmiColors)[0] = 0xf800; - ((PDWORD)pbmi->bmiColors)[1] = 0x07e0; - ((PDWORD)pbmi->bmiColors)[2] = 0x001f; - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - - /* test the DIB memory */ - ok(VirtualQuery(bits, &info, sizeof(info)) == sizeof(info), - "VirtualQuery failed\n"); - ok(info.BaseAddress == bits, "%p != %p\n", info.BaseAddress, bits); - ok(info.AllocationBase == bits, "%p != %p\n", info.AllocationBase, bits); - ok(info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect); - ok(info.RegionSize == 0x19000, "0x%lx != 0x19000\n", info.RegionSize); - ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State); - ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect); - ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); - - test_dib_info(hdib, bits, &pbmi->bmiHeader); - DeleteObject(hdib); - - memset(pbmi, 0, sizeof(bmibuf)); - pbmi->bmiHeader.biSize = sizeof(pbmi->bmiHeader); - pbmi->bmiHeader.biHeight = 16; - pbmi->bmiHeader.biWidth = 16; - pbmi->bmiHeader.biBitCount = 1; - pbmi->bmiHeader.biPlanes = 1; - pbmi->bmiHeader.biCompression = BI_RGB; - pbmi->bmiColors[0].rgbRed = 0xff; - pbmi->bmiColors[0].rgbGreen = 0; - pbmi->bmiColors[0].rgbBlue = 0; - pbmi->bmiColors[1].rgbRed = 0; - pbmi->bmiColors[1].rgbGreen = 0; - pbmi->bmiColors[1].rgbBlue = 0xff; - - hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0); - ok(hdib != NULL, "CreateDIBSection failed\n"); - ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIBSection\n"); - ok(dibsec.dsBmih.biClrUsed == 2, - "created DIBSection: wrong biClrUsed field: %u, should be: %u\n", dibsec.dsBmih.biClrUsed, 2); - - /* Test if the old BITMAPCOREINFO structure is supported */ - - pbci->bmciHeader.bcSize = sizeof(BITMAPCOREHEADER); - pbci->bmciHeader.bcBitCount = 0; - - if (!is_win9x) { - ret = GetDIBits(hdc, hdib, 0, 16, NULL, (BITMAPINFO*) pbci, DIB_RGB_COLORS); - ok(ret, "GetDIBits doesn't work with a BITMAPCOREHEADER\n"); - ok((pbci->bmciHeader.bcWidth == 16) && (pbci->bmciHeader.bcHeight == 16) - && (pbci->bmciHeader.bcBitCount == 1) && (pbci->bmciHeader.bcPlanes == 1), - "GetDIBits did't fill in the BITMAPCOREHEADER structure properly\n"); - - ret = GetDIBits(hdc, hdib, 0, 16, &coreBits, (BITMAPINFO*) pbci, DIB_RGB_COLORS); - ok(ret, "GetDIBits doesn't work with a BITMAPCOREHEADER\n"); - ok((pbci->bmciColors[0].rgbtRed == 0xff) && (pbci->bmciColors[0].rgbtGreen == 0) && - (pbci->bmciColors[0].rgbtBlue == 0) && (pbci->bmciColors[1].rgbtRed == 0) && - (pbci->bmciColors[1].rgbtGreen == 0) && (pbci->bmciColors[1].rgbtBlue == 0xff), - "The color table has not been translated to the old BITMAPCOREINFO format\n"); - - hcoredib = CreateDIBSection(hdc, (BITMAPINFO*) pbci, DIB_RGB_COLORS, (void**)&bits, NULL, 0); - ok(hcoredib != NULL, "CreateDIBSection failed with a BITMAPCOREINFO\n"); - - ZeroMemory(pbci->bmciColors, 256 * sizeof(RGBTRIPLE)); - ret = GetDIBits(hdc, hcoredib, 0, 16, &coreBits, (BITMAPINFO*) pbci, DIB_RGB_COLORS); - ok(ret, "GetDIBits doesn't work with a BITMAPCOREHEADER\n"); - ok((pbci->bmciColors[0].rgbtRed == 0xff) && (pbci->bmciColors[0].rgbtGreen == 0) && - (pbci->bmciColors[0].rgbtBlue == 0) && (pbci->bmciColors[1].rgbtRed == 0) && - (pbci->bmciColors[1].rgbtGreen == 0) && (pbci->bmciColors[1].rgbtBlue == 0xff), - "The color table has not been translated to the old BITMAPCOREINFO format\n"); - - DeleteObject(hcoredib); - } - - hdcmem = CreateCompatibleDC(hdc); - oldbm = SelectObject(hdcmem, hdib); - - ret = GetDIBColorTable(hdcmem, 0, 2, rgb); - ok(ret == 2, "GetDIBColorTable returned %d\n", ret); - ok(!memcmp(rgb, pbmi->bmiColors, 2 * sizeof(RGBQUAD)), - "GetDIBColorTable returns table 0: r%02x g%02x b%02x res%02x 1: r%02x g%02x b%02x res%02x\n", - rgb[0].rgbRed, rgb[0].rgbGreen, rgb[0].rgbBlue, rgb[0].rgbReserved, - rgb[1].rgbRed, rgb[1].rgbGreen, rgb[1].rgbBlue, rgb[1].rgbReserved); - - c0 = RGB(pbmi->bmiColors[0].rgbRed, pbmi->bmiColors[0].rgbGreen, pbmi->bmiColors[0].rgbBlue); - c1 = RGB(pbmi->bmiColors[1].rgbRed, pbmi->bmiColors[1].rgbGreen, pbmi->bmiColors[1].rgbBlue); - - test_color(hdcmem, DIBINDEX(0), c0, 0, 1); - test_color(hdcmem, DIBINDEX(1), c1, 0, 1); - test_color(hdcmem, DIBINDEX(2), c0, 1, 1); - test_color(hdcmem, PALETTEINDEX(0), c0, 1, 1); - test_color(hdcmem, PALETTEINDEX(1), c0, 1, 1); - test_color(hdcmem, PALETTEINDEX(2), c0, 1, 1); - test_color(hdcmem, PALETTERGB(pbmi->bmiColors[0].rgbRed, pbmi->bmiColors[0].rgbGreen, - pbmi->bmiColors[0].rgbBlue), c0, 1, 1); - test_color(hdcmem, PALETTERGB(pbmi->bmiColors[1].rgbRed, pbmi->bmiColors[1].rgbGreen, - pbmi->bmiColors[1].rgbBlue), c1, 1, 1); - test_color(hdcmem, PALETTERGB(0, 0, 0), c0, 1, 1); - test_color(hdcmem, PALETTERGB(0xff, 0xff, 0xff), c0, 1, 1); - test_color(hdcmem, PALETTERGB(0, 0, 0xfe), c1, 1, 1); - - SelectObject(hdcmem, oldbm); - DeleteObject(hdib); - - pbmi->bmiColors[0].rgbRed = 0xff; - pbmi->bmiColors[0].rgbGreen = 0xff; - pbmi->bmiColors[0].rgbBlue = 0xff; - pbmi->bmiColors[1].rgbRed = 0; - pbmi->bmiColors[1].rgbGreen = 0; - pbmi->bmiColors[1].rgbBlue = 0; - - hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0); - ok(hdib != NULL, "CreateDIBSection failed\n"); - - test_dib_info(hdib, bits, &pbmi->bmiHeader); - - oldbm = SelectObject(hdcmem, hdib); - - ret = GetDIBColorTable(hdcmem, 0, 2, rgb); - ok(ret == 2, "GetDIBColorTable returned %d\n", ret); - ok(!memcmp(rgb, pbmi->bmiColors, 2 * sizeof(RGBQUAD)), - "GetDIBColorTable returns table 0: r%02x g%02x b%02x res%02x 1: r%02x g%02x b%02x res%02x\n", - rgb[0].rgbRed, rgb[0].rgbGreen, rgb[0].rgbBlue, rgb[0].rgbReserved, - rgb[1].rgbRed, rgb[1].rgbGreen, rgb[1].rgbBlue, rgb[1].rgbReserved); - - SelectObject(hdcmem, oldbm); - test_dib_info(hdib, bits, &pbmi->bmiHeader); - DeleteObject(hdib); - - pbmi->bmiHeader.biBitCount = 4; - for (i = 0; i < 16; i++) { - pbmi->bmiColors[i].rgbRed = i; - pbmi->bmiColors[i].rgbGreen = 16-i; - pbmi->bmiColors[i].rgbBlue = 0; - } - hdib = CreateDIBSection(hdcmem, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0); - ok(hdib != NULL, "CreateDIBSection failed\n"); - ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n"); - ok(dibsec.dsBmih.biClrUsed == 16, - "created DIBSection: wrong biClrUsed field: %u, should be: %u\n", dibsec.dsBmih.biClrUsed, 16); - test_dib_info(hdib, bits, &pbmi->bmiHeader); - DeleteObject(hdib); - - pbmi->bmiHeader.biBitCount = 8; - - for (i = 0; i < 128; i++) { - pbmi->bmiColors[i].rgbRed = 255 - i * 2; - pbmi->bmiColors[i].rgbGreen = i * 2; - pbmi->bmiColors[i].rgbBlue = 0; - pbmi->bmiColors[255 - i].rgbRed = 0; - pbmi->bmiColors[255 - i].rgbGreen = i * 2; - pbmi->bmiColors[255 - i].rgbBlue = 255 - i * 2; - } - hdib = CreateDIBSection(hdcmem, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0); - ok(hdib != NULL, "CreateDIBSection failed\n"); - ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n"); - ok(dibsec.dsBmih.biClrUsed == 256, - "created DIBSection: wrong biClrUsed field: %u, should be: %u\n", dibsec.dsBmih.biClrUsed, 256); - - oldbm = SelectObject(hdcmem, hdib); - - for (i = 0; i < 256; i++) { - test_color(hdcmem, DIBINDEX(i), - RGB(pbmi->bmiColors[i].rgbRed, pbmi->bmiColors[i].rgbGreen, pbmi->bmiColors[i].rgbBlue), 0, 0); - test_color(hdcmem, PALETTERGB(pbmi->bmiColors[i].rgbRed, pbmi->bmiColors[i].rgbGreen, pbmi->bmiColors[i].rgbBlue), - RGB(pbmi->bmiColors[i].rgbRed, pbmi->bmiColors[i].rgbGreen, pbmi->bmiColors[i].rgbBlue), 0, 0); - } - - SelectObject(hdcmem, oldbm); - test_dib_info(hdib, bits, &pbmi->bmiHeader); - DeleteObject(hdib); - - pbmi->bmiHeader.biBitCount = 1; - - /* Now create a palette and a palette indexed dib section */ - memset(plogpal, 0, sizeof(logpalbuf)); - plogpal->palVersion = 0x300; - plogpal->palNumEntries = 2; - plogpal->palPalEntry[0].peRed = 0xff; - plogpal->palPalEntry[0].peBlue = 0xff; - plogpal->palPalEntry[1].peGreen = 0xff; - - index = (WORD*)pbmi->bmiColors; - *index++ = 0; - *index = 1; - hpal = CreatePalette(plogpal); - ok(hpal != NULL, "CreatePalette failed\n"); - oldpal = SelectPalette(hdc, hpal, TRUE); - hdib = CreateDIBSection(hdc, pbmi, DIB_PAL_COLORS, (void**)&bits, NULL, 0); - ok(hdib != NULL, "CreateDIBSection failed\n"); - ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n"); - ok(dibsec.dsBmih.biClrUsed == 2, - "created DIBSection: wrong biClrUsed field: %u, should be: %u\n", dibsec.dsBmih.biClrUsed, 2); - - /* The colour table has already been grabbed from the dc, so we select back the - old palette */ - - SelectPalette(hdc, oldpal, TRUE); - oldbm = SelectObject(hdcmem, hdib); - oldpal = SelectPalette(hdcmem, hpal, TRUE); - - ret = GetDIBColorTable(hdcmem, 0, 2, rgb); - ok(ret == 2, "GetDIBColorTable returned %d\n", ret); - ok(rgb[0].rgbRed == 0xff && rgb[0].rgbBlue == 0xff && rgb[0].rgbGreen == 0 && - rgb[1].rgbRed == 0 && rgb[1].rgbBlue == 0 && rgb[1].rgbGreen == 0xff, - "GetDIBColorTable returns table 0: r%02x g%02x b%02x res%02x 1: r%02x g%02x b%02x res%02x\n", - rgb[0].rgbRed, rgb[0].rgbGreen, rgb[0].rgbBlue, rgb[0].rgbReserved, - rgb[1].rgbRed, rgb[1].rgbGreen, rgb[1].rgbBlue, rgb[1].rgbReserved); - - c0 = RGB(plogpal->palPalEntry[0].peRed, plogpal->palPalEntry[0].peGreen, plogpal->palPalEntry[0].peBlue); - c1 = RGB(plogpal->palPalEntry[1].peRed, plogpal->palPalEntry[1].peGreen, plogpal->palPalEntry[1].peBlue); - - test_color(hdcmem, DIBINDEX(0), c0, 0, 1); - test_color(hdcmem, DIBINDEX(1), c1, 0, 1); - test_color(hdcmem, DIBINDEX(2), c0, 1, 1); - test_color(hdcmem, PALETTEINDEX(0), c0, 0, 1); - test_color(hdcmem, PALETTEINDEX(1), c1, 0, 1); - test_color(hdcmem, PALETTEINDEX(2), c0, 1, 1); - test_color(hdcmem, PALETTERGB(plogpal->palPalEntry[0].peRed, plogpal->palPalEntry[0].peGreen, - plogpal->palPalEntry[0].peBlue), c0, 1, 1); - test_color(hdcmem, PALETTERGB(plogpal->palPalEntry[1].peRed, plogpal->palPalEntry[1].peGreen, - plogpal->palPalEntry[1].peBlue), c1, 1, 1); - test_color(hdcmem, PALETTERGB(0, 0, 0), c1, 1, 1); - test_color(hdcmem, PALETTERGB(0xff, 0xff, 0xff), c0, 1, 1); - test_color(hdcmem, PALETTERGB(0, 0, 0xfe), c0, 1, 1); - test_color(hdcmem, PALETTERGB(0, 1, 0), c1, 1, 1); - test_color(hdcmem, PALETTERGB(0x3f, 0, 0x3f), c1, 1, 1); - test_color(hdcmem, PALETTERGB(0x40, 0, 0x40), c0, 1, 1); - - /* Bottom and 2nd row from top green, everything else magenta */ - bits[0] = bits[1] = 0xff; - bits[13 * 4] = bits[13*4 + 1] = 0xff; - - test_dib_info(hdib, bits, &pbmi->bmiHeader); - - pbmi->bmiHeader.biBitCount = 32; - - hdib2 = CreateDIBSection(NULL, pbmi, DIB_RGB_COLORS, (void **)&bits32, NULL, 0); - ok(hdib2 != NULL, "CreateDIBSection failed\n"); - hdcmem2 = CreateCompatibleDC(hdc); - oldbm2 = SelectObject(hdcmem2, hdib2); - - BitBlt(hdcmem2, 0, 0, 16,16, hdcmem, 0, 0, SRCCOPY); - - ok(bits32[0] == 0xff00, "lower left pixel is %08x\n", bits32[0]); - ok(bits32[17] == 0xff00ff, "bottom but one, left pixel is %08x\n", bits32[17]); - - SelectObject(hdcmem2, oldbm2); - test_dib_info(hdib2, bits32, &pbmi->bmiHeader); - DeleteObject(hdib2); - - SelectObject(hdcmem, oldbm); - SelectObject(hdcmem, oldpal); - DeleteObject(hdib); - DeleteObject(hpal); - - - pbmi->bmiHeader.biBitCount = 8; - - memset(plogpal, 0, sizeof(logpalbuf)); - plogpal->palVersion = 0x300; - plogpal->palNumEntries = 256; - - for (i = 0; i < 128; i++) { - plogpal->palPalEntry[i].peRed = 255 - i * 2; - plogpal->palPalEntry[i].peBlue = i * 2; - plogpal->palPalEntry[i].peGreen = 0; - plogpal->palPalEntry[255 - i].peRed = 0; - plogpal->palPalEntry[255 - i].peGreen = i * 2; - plogpal->palPalEntry[255 - i].peBlue = 255 - i * 2; - } - - index = (WORD*)pbmi->bmiColors; - for (i = 0; i < 256; i++) { - *index++ = i; - } - - hpal = CreatePalette(plogpal); - ok(hpal != NULL, "CreatePalette failed\n"); - oldpal = SelectPalette(hdc, hpal, TRUE); - hdib = CreateDIBSection(hdc, pbmi, DIB_PAL_COLORS, (void**)&bits, NULL, 0); - ok(hdib != NULL, "CreateDIBSection failed\n"); - ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n"); - ok(dibsec.dsBmih.biClrUsed == 256, - "created DIBSection: wrong biClrUsed field: %u, should be: %u\n", dibsec.dsBmih.biClrUsed, 256); - - test_dib_info(hdib, bits, &pbmi->bmiHeader); - - SelectPalette(hdc, oldpal, TRUE); - oldbm = SelectObject(hdcmem, hdib); - oldpal = SelectPalette(hdcmem, hpal, TRUE); - - ret = GetDIBColorTable(hdcmem, 0, 256, rgb); - ok(ret == 256, "GetDIBColorTable returned %d\n", ret); - for (i = 0; i < 256; i++) { - ok(rgb[i].rgbRed == plogpal->palPalEntry[i].peRed && - rgb[i].rgbBlue == plogpal->palPalEntry[i].peBlue && - rgb[i].rgbGreen == plogpal->palPalEntry[i].peGreen, - "GetDIBColorTable returns table %d: r%02x g%02x b%02x res%02x\n", - i, rgb[i].rgbRed, rgb[i].rgbGreen, rgb[i].rgbBlue, rgb[i].rgbReserved); - } - - for (i = 0; i < 256; i++) { - test_color(hdcmem, DIBINDEX(i), - RGB(plogpal->palPalEntry[i].peRed, plogpal->palPalEntry[i].peGreen, plogpal->palPalEntry[i].peBlue), 0, 0); - test_color(hdcmem, PALETTEINDEX(i), - RGB(plogpal->palPalEntry[i].peRed, plogpal->palPalEntry[i].peGreen, plogpal->palPalEntry[i].peBlue), 0, 0); - test_color(hdcmem, PALETTERGB(plogpal->palPalEntry[i].peRed, plogpal->palPalEntry[i].peGreen, plogpal->palPalEntry[i].peBlue), - RGB(plogpal->palPalEntry[i].peRed, plogpal->palPalEntry[i].peGreen, plogpal->palPalEntry[i].peBlue), 0, 0); - } - - SelectPalette(hdcmem, oldpal, TRUE); - SelectObject(hdcmem, oldbm); - DeleteObject(hdib); - DeleteObject(hpal); - - - DeleteDC(hdcmem); - ReleaseDC(0, hdc); -} - -static void test_mono_dibsection(void) -{ - HDC hdc, memdc; - HBITMAP old_bm, mono_ds; - char bmibuf[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)]; - BITMAPINFO *pbmi = (BITMAPINFO *)bmibuf; - BYTE bits[10 * 4]; - BYTE *ds_bits; - int num; - - hdc = GetDC(0); - - memdc = CreateCompatibleDC(hdc); - - memset(pbmi, 0, sizeof(bmibuf)); - pbmi->bmiHeader.biSize = sizeof(pbmi->bmiHeader); - pbmi->bmiHeader.biHeight = 10; - pbmi->bmiHeader.biWidth = 10; - pbmi->bmiHeader.biBitCount = 1; - pbmi->bmiHeader.biPlanes = 1; - pbmi->bmiHeader.biCompression = BI_RGB; - pbmi->bmiColors[0].rgbRed = 0xff; - pbmi->bmiColors[0].rgbGreen = 0xff; - pbmi->bmiColors[0].rgbBlue = 0xff; - pbmi->bmiColors[1].rgbRed = 0x0; - pbmi->bmiColors[1].rgbGreen = 0x0; - pbmi->bmiColors[1].rgbBlue = 0x0; - - /* - * First dib section is 'inverted' ie color[0] is white, color[1] is black - */ - - mono_ds = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&ds_bits, NULL, 0); - ok(mono_ds != NULL, "CreateDIBSection rets NULL\n"); - old_bm = SelectObject(memdc, mono_ds); - - /* black border, white interior */ - Rectangle(memdc, 0, 0, 10, 10); - ok(ds_bits[0] == 0xff, "out_bits %02x\n", ds_bits[0]); - ok(ds_bits[4] == 0x80, "out_bits %02x\n", ds_bits[4]); - - /* SetDIBitsToDevice with an inverted bmi -> inverted dib section */ - - memset(bits, 0, sizeof(bits)); - bits[0] = 0xaa; - - SetDIBitsToDevice(memdc, 0, 0, 10, 10, 0, 0, 0, 10, bits, pbmi, DIB_RGB_COLORS); - ok(ds_bits[0] == 0xaa, "out_bits %02x\n", ds_bits[0]); - - /* SetDIBitsToDevice with a normal bmi -> inverted dib section */ - - pbmi->bmiColors[0].rgbRed = 0x0; - pbmi->bmiColors[0].rgbGreen = 0x0; - pbmi->bmiColors[0].rgbBlue = 0x0; - pbmi->bmiColors[1].rgbRed = 0xff; - pbmi->bmiColors[1].rgbGreen = 0xff; - pbmi->bmiColors[1].rgbBlue = 0xff; - - SetDIBitsToDevice(memdc, 0, 0, 10, 10, 0, 0, 0, 10, bits, pbmi, DIB_RGB_COLORS); - ok(ds_bits[0] == 0x55, "out_bits %02x\n", ds_bits[0]); - - SelectObject(memdc, old_bm); - DeleteObject(mono_ds); - - /* - * Next dib section is 'normal' ie color[0] is black, color[1] is white - */ - - pbmi->bmiColors[0].rgbRed = 0x0; - pbmi->bmiColors[0].rgbGreen = 0x0; - pbmi->bmiColors[0].rgbBlue = 0x0; - pbmi->bmiColors[1].rgbRed = 0xff; - pbmi->bmiColors[1].rgbGreen = 0xff; - pbmi->bmiColors[1].rgbBlue = 0xff; - - mono_ds = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&ds_bits, NULL, 0); - ok(mono_ds != NULL, "CreateDIBSection rets NULL\n"); - old_bm = SelectObject(memdc, mono_ds); - - /* black border, white interior */ - Rectangle(memdc, 0, 0, 10, 10); - ok(ds_bits[0] == 0x00, "out_bits %02x\n", ds_bits[0]); - ok(ds_bits[4] == 0x7f, "out_bits %02x\n", ds_bits[4]); - - /* SetDIBitsToDevice with a normal bmi -> normal dib section */ - - SetDIBitsToDevice(memdc, 0, 0, 10, 10, 0, 0, 0, 10, bits, pbmi, DIB_RGB_COLORS); - ok(ds_bits[0] == 0xaa, "out_bits %02x\n", ds_bits[0]); - - /* SetDIBitsToDevice with a inverted bmi -> normal dib section */ - - pbmi->bmiColors[0].rgbRed = 0xff; - pbmi->bmiColors[0].rgbGreen = 0xff; - pbmi->bmiColors[0].rgbBlue = 0xff; - pbmi->bmiColors[1].rgbRed = 0x0; - pbmi->bmiColors[1].rgbGreen = 0x0; - pbmi->bmiColors[1].rgbBlue = 0x0; - - SetDIBitsToDevice(memdc, 0, 0, 10, 10, 0, 0, 0, 10, bits, pbmi, DIB_RGB_COLORS); - ok(ds_bits[0] == 0x55, "out_bits %02x\n", ds_bits[0]); - - /* - * Take that 'normal' dibsection and change its colour table to an 'inverted' one - */ - - pbmi->bmiColors[0].rgbRed = 0xff; - pbmi->bmiColors[0].rgbGreen = 0xff; - pbmi->bmiColors[0].rgbBlue = 0xff; - pbmi->bmiColors[1].rgbRed = 0x0; - pbmi->bmiColors[1].rgbGreen = 0x0; - pbmi->bmiColors[1].rgbBlue = 0x0; - num = SetDIBColorTable(memdc, 0, 2, pbmi->bmiColors); - ok(num == 2, "num = %d\n", num); - - /* black border, white interior */ - Rectangle(memdc, 0, 0, 10, 10); -todo_wine { - ok(ds_bits[0] == 0xff, "out_bits %02x\n", ds_bits[0]); - ok(ds_bits[4] == 0x80, "out_bits %02x\n", ds_bits[4]); - } - /* SetDIBitsToDevice with an inverted bmi -> inverted dib section */ - - memset(bits, 0, sizeof(bits)); - bits[0] = 0xaa; - - SetDIBitsToDevice(memdc, 0, 0, 10, 10, 0, 0, 0, 10, bits, pbmi, DIB_RGB_COLORS); - ok(ds_bits[0] == 0xaa, "out_bits %02x\n", ds_bits[0]); - - /* SetDIBitsToDevice with a normal bmi -> inverted dib section */ - - pbmi->bmiColors[0].rgbRed = 0x0; - pbmi->bmiColors[0].rgbGreen = 0x0; - pbmi->bmiColors[0].rgbBlue = 0x0; - pbmi->bmiColors[1].rgbRed = 0xff; - pbmi->bmiColors[1].rgbGreen = 0xff; - pbmi->bmiColors[1].rgbBlue = 0xff; - - SetDIBitsToDevice(memdc, 0, 0, 10, 10, 0, 0, 0, 10, bits, pbmi, DIB_RGB_COLORS); - ok(ds_bits[0] == 0x55, "out_bits %02x\n", ds_bits[0]); - - SelectObject(memdc, old_bm); - DeleteObject(mono_ds); - - /* - * Now a dib section with a strange colour map just for fun. This behaves just like an inverted one. - */ - - pbmi->bmiColors[0].rgbRed = 0xff; - pbmi->bmiColors[0].rgbGreen = 0x0; - pbmi->bmiColors[0].rgbBlue = 0x0; - pbmi->bmiColors[1].rgbRed = 0xfe; - pbmi->bmiColors[1].rgbGreen = 0x0; - pbmi->bmiColors[1].rgbBlue = 0x0; - - mono_ds = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&ds_bits, NULL, 0); - ok(mono_ds != NULL, "CreateDIBSection rets NULL\n"); - old_bm = SelectObject(memdc, mono_ds); - - /* black border, white interior */ - Rectangle(memdc, 0, 0, 10, 10); - ok(ds_bits[0] == 0xff, "out_bits %02x\n", ds_bits[0]); - ok(ds_bits[4] == 0x80, "out_bits %02x\n", ds_bits[4]); - - /* SetDIBitsToDevice with a normal bmi -> inverted dib section */ - - pbmi->bmiColors[0].rgbRed = 0x0; - pbmi->bmiColors[0].rgbGreen = 0x0; - pbmi->bmiColors[0].rgbBlue = 0x0; - pbmi->bmiColors[1].rgbRed = 0xff; - pbmi->bmiColors[1].rgbGreen = 0xff; - pbmi->bmiColors[1].rgbBlue = 0xff; - - SetDIBitsToDevice(memdc, 0, 0, 10, 10, 0, 0, 0, 10, bits, pbmi, DIB_RGB_COLORS); - ok(ds_bits[0] == 0x55, "out_bits %02x\n", ds_bits[0]); - - /* SetDIBitsToDevice with a inverted bmi -> inverted dib section */ - - pbmi->bmiColors[0].rgbRed = 0xff; - pbmi->bmiColors[0].rgbGreen = 0xff; - pbmi->bmiColors[0].rgbBlue = 0xff; - pbmi->bmiColors[1].rgbRed = 0x0; - pbmi->bmiColors[1].rgbGreen = 0x0; - pbmi->bmiColors[1].rgbBlue = 0x0; - - SetDIBitsToDevice(memdc, 0, 0, 10, 10, 0, 0, 0, 10, bits, pbmi, DIB_RGB_COLORS); - ok(ds_bits[0] == 0xaa, "out_bits %02x\n", ds_bits[0]); - - SelectObject(memdc, old_bm); - DeleteObject(mono_ds); - - DeleteDC(memdc); - ReleaseDC(0, hdc); -} - -static void test_bitmap(void) -{ - char buf[256], buf_cmp[256]; - HBITMAP hbmp, hbmp_old; - HDC hdc; - BITMAP bm; - INT ret; - - hdc = CreateCompatibleDC(0); - assert(hdc != 0); - - SetLastError(0xdeadbeef); - hbmp = CreateBitmap(0x7ffffff, 1, 1, 1, NULL); - if (!hbmp) - { - ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY, - "expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError()); - } - else - DeleteObject(hbmp); - - SetLastError(0xdeadbeef); - hbmp = CreateBitmap(0x7ffffff, 9, 1, 1, NULL); - if (!hbmp) - { - ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY /* XP */ || - GetLastError() == ERROR_INVALID_PARAMETER /* Win2k */, - "expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError()); - } - else - DeleteObject(hbmp); - - SetLastError(0xdeadbeef); - hbmp = CreateBitmap(0x7ffffff + 1, 1, 1, 1, NULL); - ok(!hbmp, "CreateBitmap should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - hbmp = CreateBitmap(15, 15, 1, 1, NULL); - assert(hbmp != NULL); - - ret = GetObject(hbmp, sizeof(bm), &bm); - ok(ret == sizeof(bm), "wrong size %d\n", ret); - - ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType); - ok(bm.bmWidth == 15, "wrong bm.bmWidth %d\n", bm.bmWidth); - ok(bm.bmHeight == 15, "wrong bm.bmHeight %d\n", bm.bmHeight); - ok(bm.bmWidthBytes == 2, "wrong bm.bmWidthBytes %d\n", bm.bmWidthBytes); - ok(bm.bmPlanes == 1, "wrong bm.bmPlanes %d\n", bm.bmPlanes); - ok(bm.bmBitsPixel == 1, "wrong bm.bmBitsPixel %d\n", bm.bmBitsPixel); - ok(bm.bmBits == NULL, "wrong bm.bmBits %p\n", bm.bmBits); - - assert(sizeof(buf) >= bm.bmWidthBytes * bm.bmHeight); - assert(sizeof(buf) == sizeof(buf_cmp)); - - ret = GetBitmapBits(hbmp, 0, NULL); - ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight); - - memset(buf_cmp, 0xAA, sizeof(buf_cmp)); - memset(buf_cmp, 0, bm.bmWidthBytes * bm.bmHeight); - - memset(buf, 0xAA, sizeof(buf)); - ret = GetBitmapBits(hbmp, sizeof(buf), buf); - ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight); - ok(!memcmp(buf, buf_cmp, sizeof(buf)), "buffers do not match\n"); - - hbmp_old = SelectObject(hdc, hbmp); - - ret = GetObject(hbmp, sizeof(bm), &bm); - ok(ret == sizeof(bm), "wrong size %d\n", ret); - - ok(bm.bmType == 0, "wrong bm.bmType %d\n", bm.bmType); - ok(bm.bmWidth == 15, "wrong bm.bmWidth %d\n", bm.bmWidth); - ok(bm.bmHeight == 15, "wrong bm.bmHeight %d\n", bm.bmHeight); - ok(bm.bmWidthBytes == 2, "wrong bm.bmWidthBytes %d\n", bm.bmWidthBytes); - ok(bm.bmPlanes == 1, "wrong bm.bmPlanes %d\n", bm.bmPlanes); - ok(bm.bmBitsPixel == 1, "wrong bm.bmBitsPixel %d\n", bm.bmBitsPixel); - ok(bm.bmBits == NULL, "wrong bm.bmBits %p\n", bm.bmBits); - - memset(buf, 0xAA, sizeof(buf)); - ret = GetBitmapBits(hbmp, sizeof(buf), buf); - ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight); - ok(!memcmp(buf, buf_cmp, sizeof(buf)), "buffers do not match\n"); - - hbmp_old = SelectObject(hdc, hbmp_old); - ok(hbmp_old == hbmp, "wrong old bitmap %p\n", hbmp_old); - - /* test various buffer sizes for GetObject */ - ret = GetObject(hbmp, sizeof(bm) * 2, &bm); - ok(ret == sizeof(bm), "wrong size %d\n", ret); - - ret = GetObject(hbmp, sizeof(bm) / 2, &bm); - ok(ret == 0, "%d != 0\n", ret); - - ret = GetObject(hbmp, 0, &bm); - ok(ret == 0, "%d != 0\n", ret); - - ret = GetObject(hbmp, 1, &bm); - ok(ret == 0, "%d != 0\n", ret); - - DeleteObject(hbmp); - DeleteDC(hdc); -} - -static void test_bmBits(void) -{ - BYTE bits[4]; - HBITMAP hbmp; - BITMAP bmp; - - memset(bits, 0, sizeof(bits)); - hbmp = CreateBitmap(2, 2, 1, 4, bits); - ok(hbmp != NULL, "CreateBitmap failed\n"); - - memset(&bmp, 0xFF, sizeof(bmp)); - ok(GetObject(hbmp, sizeof(bmp), &bmp) == sizeof(bmp), - "GetObject failed or returned a wrong structure size\n"); - ok(!bmp.bmBits, "bmBits must be NULL for device-dependent bitmaps\n"); - - DeleteObject(hbmp); -} - -static void test_GetDIBits_selected_DIB(UINT bpp) -{ - HBITMAP dib; - BITMAPINFO * info; - BITMAPINFO * info2; - void * bits; - void * bits2; - UINT dib_size; - HDC dib_dc, dc; - HBITMAP old_bmp; - BOOL equalContents; - UINT i; - int res; - - /* Create a DIB section with a color table */ - - info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + (1 << bpp) * sizeof(RGBQUAD)); - info2 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + (1 << bpp) * sizeof(RGBQUAD)); - assert(info); - assert(info2); - - info->bmiHeader.biSize = sizeof(info->bmiHeader); - - /* Choose width and height such that the row length (in bytes) - is a multiple of 4 (makes things easier) */ - info->bmiHeader.biWidth = 32; - info->bmiHeader.biHeight = 32; - info->bmiHeader.biPlanes = 1; - info->bmiHeader.biBitCount = bpp; - info->bmiHeader.biCompression = BI_RGB; - - for (i=0; i < (1u << bpp); i++) - { - BYTE c = i * (1 << (8 - bpp)); - info->bmiColors[i].rgbRed = c; - info->bmiColors[i].rgbGreen = c; - info->bmiColors[i].rgbBlue = c; - info->bmiColors[i].rgbReserved = 0; - } - - dib = CreateDIBSection(NULL, info, DIB_RGB_COLORS, &bits, NULL, 0); - assert(dib); - dib_size = bpp * (info->bmiHeader.biWidth * info->bmiHeader.biHeight) / 8; - - /* Set the bits of the DIB section */ - for (i=0; i < dib_size; i++) - { - ((BYTE *)bits)[i] = i % 256; - } - - /* Select the DIB into a DC */ - dib_dc = CreateCompatibleDC(NULL); - old_bmp = (HBITMAP) SelectObject(dib_dc, dib); - dc = CreateCompatibleDC(NULL); - bits2 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dib_size); - assert(bits2); - - /* Copy the DIB attributes but not the color table */ - memcpy(info2, info, sizeof(BITMAPINFOHEADER)); - - res = GetDIBits(dc, dib, 0, info->bmiHeader.biHeight, bits2, info2, DIB_RGB_COLORS); - ok(res, "GetDIBits failed\n"); - - /* Compare the color table and the bits */ - equalContents = TRUE; - for (i=0; i < (1u << bpp); i++) - { - if ((info->bmiColors[i].rgbRed != info2->bmiColors[i].rgbRed) - || (info->bmiColors[i].rgbGreen != info2->bmiColors[i].rgbGreen) - || (info->bmiColors[i].rgbBlue != info2->bmiColors[i].rgbBlue) - || (info->bmiColors[i].rgbReserved != info2->bmiColors[i].rgbReserved)) - { - equalContents = FALSE; - break; - } - } - ok(equalContents, "GetDIBits with DIB selected in DC: Invalid DIB color table\n"); - - equalContents = TRUE; - for (i=0; i < dib_size / sizeof(DWORD); i++) - { - if (((DWORD *)bits)[i] != ((DWORD *)bits2)[i]) - { - equalContents = FALSE; - break; - } - } - if (bpp != 1) - ok(equalContents, "GetDIBits with %d bpp DIB selected in DC: Invalid DIB bits\n",bpp); - else - todo_wine ok(equalContents, "GetDIBits with %d bpp DIB selected in DC: Invalid DIB bits\n",bpp); - - HeapFree(GetProcessHeap(), 0, bits2); - DeleteDC(dc); - - SelectObject(dib_dc, old_bmp); - DeleteDC(dib_dc); - DeleteObject(dib); - - HeapFree(GetProcessHeap(), 0, info2); - HeapFree(GetProcessHeap(), 0, info); -} - -static void test_GetDIBits_selected_DDB(BOOL monochrome) -{ - HBITMAP ddb; - BITMAPINFO * info; - BITMAPINFO * info2; - void * bits; - void * bits2; - HDC ddb_dc, dc; - HBITMAP old_bmp; - BOOL equalContents; - UINT width, height; - UINT bpp; - UINT i, j; - int res; - - width = height = 16; - - /* Create a DDB (device-dependent bitmap) */ - if (monochrome) - { - bpp = 1; - ddb = CreateBitmap(width, height, 1, 1, NULL); - } - else - { - HDC screen_dc = GetDC(NULL); - bpp = GetDeviceCaps(screen_dc, BITSPIXEL) * GetDeviceCaps(screen_dc, PLANES); - ddb = CreateCompatibleBitmap(screen_dc, width, height); - ReleaseDC(NULL, screen_dc); - } - - /* Set the pixels */ - ddb_dc = CreateCompatibleDC(NULL); - old_bmp = (HBITMAP) SelectObject(ddb_dc, ddb); - for (i = 0; i < width; i++) - { - for (j=0; j < height; j++) - { - BYTE c = (i * width + j) % 256; - SetPixelV(ddb_dc, i, j, RGB(c, c, c)); - } - } - SelectObject(ddb_dc, old_bmp); - - info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); - info2 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); - assert(info); - assert(info2); - - info->bmiHeader.biSize = sizeof(info->bmiHeader); - info->bmiHeader.biWidth = width; - info->bmiHeader.biHeight = height; - info->bmiHeader.biPlanes = 1; - info->bmiHeader.biBitCount = bpp; - info->bmiHeader.biCompression = BI_RGB; - - dc = CreateCompatibleDC(NULL); - - /* Fill in biSizeImage */ - GetDIBits(dc, ddb, 0, height, NULL, info, DIB_RGB_COLORS); - ok(info->bmiHeader.biSizeImage != 0, "GetDIBits failed to get the DIB attributes\n"); - - bits = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, info->bmiHeader.biSizeImage); - bits2 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, info->bmiHeader.biSizeImage); - assert(bits); - assert(bits2); - - /* Get the bits */ - res = GetDIBits(dc, ddb, 0, height, bits, info, DIB_RGB_COLORS); - ok(res, "GetDIBits failed\n"); - - /* Copy the DIB attributes but not the color table */ - memcpy(info2, info, sizeof(BITMAPINFOHEADER)); - - /* Select the DDB into another DC */ - old_bmp = (HBITMAP) SelectObject(ddb_dc, ddb); - - /* Get the bits */ - res = GetDIBits(dc, ddb, 0, height, bits2, info2, DIB_RGB_COLORS); - ok(res, "GetDIBits failed\n"); - - /* Compare the color table and the bits */ - if (bpp <= 8) - { - equalContents = TRUE; - for (i=0; i < (1u << bpp); i++) - { - if ((info->bmiColors[i].rgbRed != info2->bmiColors[i].rgbRed) - || (info->bmiColors[i].rgbGreen != info2->bmiColors[i].rgbGreen) - || (info->bmiColors[i].rgbBlue != info2->bmiColors[i].rgbBlue) - || (info->bmiColors[i].rgbReserved != info2->bmiColors[i].rgbReserved)) - { - equalContents = FALSE; - break; - } - } - ok(equalContents, "GetDIBits with DDB selected in DC: Got a different color table\n"); - } - - equalContents = TRUE; - for (i=0; i < info->bmiHeader.biSizeImage / sizeof(DWORD); i++) - { - if (((DWORD *)bits)[i] != ((DWORD *)bits2)[i]) - { - equalContents = FALSE; - } - } - ok(equalContents, "GetDIBits with DDB selected in DC: Got different DIB bits\n"); - - HeapFree(GetProcessHeap(), 0, bits2); - HeapFree(GetProcessHeap(), 0, bits); - DeleteDC(dc); - - SelectObject(ddb_dc, old_bmp); - DeleteDC(ddb_dc); - DeleteObject(ddb); - - HeapFree(GetProcessHeap(), 0, info2); - HeapFree(GetProcessHeap(), 0, info); -} - -static void test_GetDIBits(void) -{ - /* 2-bytes aligned 1-bit bitmap data: 16x16 */ - static const BYTE bmp_bits_1[16 * 2] = - { - 0xff,0xff, 0,0, 0xff,0xff, 0,0, - 0xff,0xff, 0,0, 0xff,0xff, 0,0, - 0xff,0xff, 0,0, 0xff,0xff, 0,0, - 0xff,0xff, 0,0, 0xff,0xff, 0,0 - }; - /* 4-bytes aligned 1-bit DIB data: 16x16 */ - static const BYTE dib_bits_1[16 * 4] = - { - 0,0,0,0, 0xff,0xff,0,0, 0,0,0,0, 0xff,0xff,0,0, - 0,0,0,0, 0xff,0xff,0,0, 0,0,0,0, 0xff,0xff,0,0, - 0,0,0,0, 0xff,0xff,0,0, 0,0,0,0, 0xff,0xff,0,0, - 0,0,0,0, 0xff,0xff,0,0, 0,0,0,0, 0xff,0xff,0,0 - }; - /* 2-bytes aligned 24-bit bitmap data: 16x16 */ - static const BYTE bmp_bits_24[16 * 16*3] = - { - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }; - /* 4-bytes aligned 24-bit DIB data: 16x16 */ - static const BYTE dib_bits_24[16 * 16*3] = - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - }; - HBITMAP hbmp; - BITMAP bm; - HDC hdc; - int i, bytes, lines; - BYTE buf[1024]; - char bi_buf[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256]; - BITMAPINFO *bi = (BITMAPINFO *)bi_buf; - - hdc = GetDC(0); - - /* 1-bit source bitmap data */ - hbmp = CreateBitmap(16, 16, 1, 1, bmp_bits_1); - ok(hbmp != 0, "CreateBitmap failed\n"); - - memset(&bm, 0xAA, sizeof(bm)); - bytes = GetObject(hbmp, sizeof(bm), &bm); - ok(bytes == sizeof(bm), "GetObject returned %d\n", bytes); - ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType); - ok(bm.bmWidth == 16, "wrong bmWidth %d\n", bm.bmWidth); - ok(bm.bmHeight == 16, "wrong bmHeight %d\n", bm.bmHeight); - ok(bm.bmWidthBytes == 2, "wrong bmWidthBytes %d\n", bm.bmWidthBytes); - ok(bm.bmPlanes == 1, "wrong bmPlanes %u\n", bm.bmPlanes); - ok(bm.bmBitsPixel == 1, "wrong bmBitsPixel %d\n", bm.bmBitsPixel); - ok(!bm.bmBits, "wrong bmBits %p\n", bm.bmBits); - - bytes = GetBitmapBits(hbmp, 0, NULL); - ok(bytes == sizeof(bmp_bits_1), "expected 16*2 got %d bytes\n", bytes); - bytes = GetBitmapBits(hbmp, sizeof(buf), buf); - ok(bytes == sizeof(bmp_bits_1), "expected 16*2 got %d bytes\n", bytes); - ok(!memcmp(buf, bmp_bits_1, sizeof(bmp_bits_1)), "bitmap bits don't match\n"); - - /* retrieve 1-bit DIB data */ - memset(bi, 0, sizeof(*bi)); - bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bi->bmiHeader.biWidth = bm.bmWidth; - bi->bmiHeader.biHeight = bm.bmHeight; - bi->bmiHeader.biPlanes = 1; - bi->bmiHeader.biBitCount = 1; - bi->bmiHeader.biCompression = BI_RGB; - bi->bmiHeader.biSizeImage = 0; - memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256); - SetLastError(0xdeadbeef); - lines = GetDIBits(0, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS); - ok(lines == 0, "GetDIBits copied %d lines with hdc = 0\n", lines); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError()); - ok(bi->bmiHeader.biSizeImage == 0, "expected 0, got %u\n", bi->bmiHeader.biSizeImage); - - memset(buf, 0xAA, sizeof(buf)); - SetLastError(0xdeadbeef); - lines = GetDIBits(hdc, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS); - ok(lines == bm.bmHeight, "GetDIBits copied %d lines of %d, error %u\n", - lines, bm.bmHeight, GetLastError()); - ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_1), "expected 16*4, got %u\n", bi->bmiHeader.biSizeImage); - - /* the color table consists of black and white */ - ok(bi->bmiColors[0].rgbRed == 0 && bi->bmiColors[0].rgbGreen == 0 && - bi->bmiColors[0].rgbBlue == 0 && bi->bmiColors[0].rgbReserved == 0, - "expected bmiColors[0] 0,0,0,0 - got %x %x %x %x\n", - bi->bmiColors[0].rgbRed, bi->bmiColors[0].rgbGreen, - bi->bmiColors[0].rgbBlue, bi->bmiColors[0].rgbReserved); -todo_wine - ok(bi->bmiColors[1].rgbRed == 0xff && bi->bmiColors[1].rgbGreen == 0xff && - bi->bmiColors[1].rgbBlue == 0xff && bi->bmiColors[1].rgbReserved == 0, - "expected bmiColors[0] 0xff,0xff,0xff,0 - got %x %x %x %x\n", - bi->bmiColors[1].rgbRed, bi->bmiColors[1].rgbGreen, - bi->bmiColors[1].rgbBlue, bi->bmiColors[1].rgbReserved); - for (i = 2; i < 256; i++) - { - ok(bi->bmiColors[i].rgbRed == 0xAA && bi->bmiColors[i].rgbGreen == 0xAA && - bi->bmiColors[i].rgbBlue == 0xAA && bi->bmiColors[i].rgbReserved == 0xAA, - "expected bmiColors[%d] 0xAA,0xAA,0xAA,0xAA - got %x %x %x %x\n", i, - bi->bmiColors[i].rgbRed, bi->bmiColors[i].rgbGreen, - bi->bmiColors[i].rgbBlue, bi->bmiColors[i].rgbReserved); - } - - /* returned bits are DWORD aligned and upside down */ -todo_wine - ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n"); - - /* retrieve 24-bit DIB data */ - memset(bi, 0, sizeof(*bi)); - bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bi->bmiHeader.biWidth = bm.bmWidth; - bi->bmiHeader.biHeight = bm.bmHeight; - bi->bmiHeader.biPlanes = 1; - bi->bmiHeader.biBitCount = 24; - bi->bmiHeader.biCompression = BI_RGB; - bi->bmiHeader.biSizeImage = 0; - memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256); - memset(buf, 0xAA, sizeof(buf)); - SetLastError(0xdeadbeef); - lines = GetDIBits(hdc, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS); - ok(lines == bm.bmHeight, "GetDIBits copied %d lines of %d, error %u\n", - lines, bm.bmHeight, GetLastError()); - ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_24), "expected 16*16*3, got %u\n", bi->bmiHeader.biSizeImage); - - /* the color table doesn't exist for 24-bit images */ - for (i = 0; i < 256; i++) - { - ok(bi->bmiColors[i].rgbRed == 0xAA && bi->bmiColors[i].rgbGreen == 0xAA && - bi->bmiColors[i].rgbBlue == 0xAA && bi->bmiColors[i].rgbReserved == 0xAA, - "expected bmiColors[%d] 0xAA,0xAA,0xAA,0xAA - got %x %x %x %x\n", i, - bi->bmiColors[i].rgbRed, bi->bmiColors[i].rgbGreen, - bi->bmiColors[i].rgbBlue, bi->bmiColors[i].rgbReserved); - } - - /* returned bits are DWORD aligned and upside down */ -todo_wine - ok(!memcmp(buf, dib_bits_24, sizeof(dib_bits_24)), "DIB bits don't match\n"); - DeleteObject(hbmp); - - /* 24-bit source bitmap data */ - hbmp = CreateCompatibleBitmap(hdc, 16, 16); - ok(hbmp != 0, "CreateBitmap failed\n"); - SetLastError(0xdeadbeef); - bi->bmiHeader.biHeight = -bm.bmHeight; /* indicate bottom-up data */ - lines = SetDIBits(hdc, hbmp, 0, bm.bmHeight, bmp_bits_24, bi, DIB_RGB_COLORS); - ok(lines == bm.bmHeight, "SetDIBits copied %d lines of %d, error %u\n", - lines, bm.bmHeight, GetLastError()); - - memset(&bm, 0xAA, sizeof(bm)); - bytes = GetObject(hbmp, sizeof(bm), &bm); - ok(bytes == sizeof(bm), "GetObject returned %d\n", bytes); - ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType); - ok(bm.bmWidth == 16, "wrong bmWidth %d\n", bm.bmWidth); - ok(bm.bmHeight == 16, "wrong bmHeight %d\n", bm.bmHeight); - ok(bm.bmWidthBytes == BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel), "wrong bmWidthBytes %d\n", bm.bmWidthBytes); - ok(bm.bmPlanes == GetDeviceCaps(hdc, PLANES), "wrong bmPlanes %u\n", bm.bmPlanes); - ok(bm.bmBitsPixel == GetDeviceCaps(hdc, BITSPIXEL), "wrong bmBitsPixel %d\n", bm.bmBitsPixel); - ok(!bm.bmBits, "wrong bmBits %p\n", bm.bmBits); - - bytes = GetBitmapBits(hbmp, 0, NULL); - ok(bytes == bm.bmWidthBytes * bm.bmHeight, "expected %d got %d bytes\n", - bm.bmWidthBytes * bm.bmHeight, bytes); - bytes = GetBitmapBits(hbmp, sizeof(buf), buf); - ok(bytes == bm.bmWidthBytes * bm.bmHeight, "expected %d got %d bytes\n", - bm.bmWidthBytes * bm.bmHeight, bytes); - - /* retrieve 1-bit DIB data */ - memset(bi, 0, sizeof(*bi)); - bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bi->bmiHeader.biWidth = bm.bmWidth; - bi->bmiHeader.biHeight = bm.bmHeight; - bi->bmiHeader.biPlanes = 1; - bi->bmiHeader.biBitCount = 1; - bi->bmiHeader.biCompression = BI_RGB; - bi->bmiHeader.biSizeImage = 0; - memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256); - memset(buf, 0xAA, sizeof(buf)); - SetLastError(0xdeadbeef); - lines = GetDIBits(hdc, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS); - ok(lines == bm.bmHeight, "GetDIBits copied %d lines of %d, error %u\n", - lines, bm.bmHeight, GetLastError()); - ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_1), "expected 16*4, got %u\n", bi->bmiHeader.biSizeImage); - - /* the color table consists of black and white */ - ok(bi->bmiColors[0].rgbRed == 0 && bi->bmiColors[0].rgbGreen == 0 && - bi->bmiColors[0].rgbBlue == 0 && bi->bmiColors[0].rgbReserved == 0, - "expected bmiColors[0] 0,0,0,0 - got %x %x %x %x\n", - bi->bmiColors[0].rgbRed, bi->bmiColors[0].rgbGreen, - bi->bmiColors[0].rgbBlue, bi->bmiColors[0].rgbReserved); - ok(bi->bmiColors[1].rgbRed == 0xff && bi->bmiColors[1].rgbGreen == 0xff && - bi->bmiColors[1].rgbBlue == 0xff && bi->bmiColors[1].rgbReserved == 0, - "expected bmiColors[0] 0xff,0xff,0xff,0 - got %x %x %x %x\n", - bi->bmiColors[1].rgbRed, bi->bmiColors[1].rgbGreen, - bi->bmiColors[1].rgbBlue, bi->bmiColors[1].rgbReserved); - for (i = 2; i < 256; i++) - { - ok(bi->bmiColors[i].rgbRed == 0xAA && bi->bmiColors[i].rgbGreen == 0xAA && - bi->bmiColors[i].rgbBlue == 0xAA && bi->bmiColors[i].rgbReserved == 0xAA, - "expected bmiColors[%d] 0xAA,0xAA,0xAA,0xAA - got %x %x %x %x\n", i, - bi->bmiColors[i].rgbRed, bi->bmiColors[i].rgbGreen, - bi->bmiColors[i].rgbBlue, bi->bmiColors[i].rgbReserved); - } - - /* returned bits are DWORD aligned and upside down */ -todo_wine - ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n"); - - /* retrieve 24-bit DIB data */ - memset(bi, 0, sizeof(*bi)); - bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bi->bmiHeader.biWidth = bm.bmWidth; - bi->bmiHeader.biHeight = bm.bmHeight; - bi->bmiHeader.biPlanes = 1; - bi->bmiHeader.biBitCount = 24; - bi->bmiHeader.biCompression = BI_RGB; - bi->bmiHeader.biSizeImage = 0; - memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256); - memset(buf, 0xAA, sizeof(buf)); - SetLastError(0xdeadbeef); - lines = GetDIBits(hdc, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS); - ok(lines == bm.bmHeight, "GetDIBits copied %d lines of %d, error %u\n", - lines, bm.bmHeight, GetLastError()); - ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_24), "expected 16*16*3, got %u\n", bi->bmiHeader.biSizeImage); - - /* the color table doesn't exist for 24-bit images */ - for (i = 0; i < 256; i++) - { - ok(bi->bmiColors[i].rgbRed == 0xAA && bi->bmiColors[i].rgbGreen == 0xAA && - bi->bmiColors[i].rgbBlue == 0xAA && bi->bmiColors[i].rgbReserved == 0xAA, - "expected bmiColors[%d] 0xAA,0xAA,0xAA,0xAA - got %x %x %x %x\n", i, - bi->bmiColors[i].rgbRed, bi->bmiColors[i].rgbGreen, - bi->bmiColors[i].rgbBlue, bi->bmiColors[i].rgbReserved); - } - - /* returned bits are DWORD aligned and upside down */ - ok(!memcmp(buf, dib_bits_24, sizeof(dib_bits_24)), "DIB bits don't match\n"); - DeleteObject(hbmp); - - ReleaseDC(0, hdc); -} - -static void test_GetDIBits_BI_BITFIELDS(void) -{ - /* Try a screen resolution detection technique - * from the September 1999 issue of Windows Developer's Journal - * which seems to be in widespread use. - * http://www.lesher.ws/highcolor.html - * http://www.lesher.ws/vidfmt.c - * It hinges on being able to retrieve the bitmaps - * for the three primary colors in non-paletted 16 bit mode. - */ - char dibinfo_buf[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)]; - DWORD bits[32]; - LPBITMAPINFO dibinfo = (LPBITMAPINFO) dibinfo_buf; - HDC hdc; - HBITMAP hbm; - int ret; - - memset(dibinfo, 0, sizeof(dibinfo_buf)); - dibinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - - hdc = GetDC(NULL); - ok(hdc != NULL, "GetDC failed?\n"); - hbm = CreateCompatibleBitmap(hdc, 1, 1); - ok(hbm != NULL, "CreateCompatibleBitmap failed?\n"); - - /* Call GetDIBits to fill in bmiHeader. */ - ret = GetDIBits(hdc, hbm, 0, 1, NULL, dibinfo, DIB_RGB_COLORS); - ok(ret == 1, "GetDIBits failed\n"); - if (dibinfo->bmiHeader.biBitCount > 8) - { - DWORD *bitmasks = (DWORD *)dibinfo->bmiColors; - - ok( dibinfo->bmiHeader.biCompression == BI_BITFIELDS, - "compression is %u\n", dibinfo->bmiHeader.biCompression ); - - ok( !bitmasks[0], "red mask is set\n" ); - ok( !bitmasks[1], "green mask is set\n" ); - ok( !bitmasks[2], "blue mask is set\n" ); - - /* test with NULL bits pointer and correct bpp */ - dibinfo->bmiHeader.biSizeImage = 0xdeadbeef; - ret = GetDIBits(hdc, hbm, 0, 1, NULL, dibinfo, DIB_RGB_COLORS); - ok(ret == 1, "GetDIBits failed\n"); - - ok( bitmasks[0] != 0, "red mask is not set\n" ); - ok( bitmasks[1] != 0, "green mask is not set\n" ); - ok( bitmasks[2] != 0, "blue mask is not set\n" ); - ok( dibinfo->bmiHeader.biSizeImage != 0xdeadbeef, "size image not set\n" ); - - /* test with valid bits pointer */ - memset(dibinfo, 0, sizeof(dibinfo_buf)); - dibinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - ret = GetDIBits(hdc, hbm, 0, 1, NULL, dibinfo, DIB_RGB_COLORS); - ok(ret == 1, "GetDIBits failed ret %u err %u\n",ret,GetLastError()); - dibinfo->bmiHeader.biSizeImage = 0xdeadbeef; - ret = GetDIBits(hdc, hbm, 0, 1, bits, dibinfo, DIB_RGB_COLORS); - ok(ret == 1, "GetDIBits failed ret %u err %u\n",ret,GetLastError()); - - ok( bitmasks[0] != 0, "red mask is not set\n" ); - ok( bitmasks[1] != 0, "green mask is not set\n" ); - ok( bitmasks[2] != 0, "blue mask is not set\n" ); - ok( dibinfo->bmiHeader.biSizeImage != 0xdeadbeef, "size image not set\n" ); - - /* now with bits and 0 lines */ - memset(dibinfo, 0, sizeof(dibinfo_buf)); - dibinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - dibinfo->bmiHeader.biSizeImage = 0xdeadbeef; - ret = GetDIBits(hdc, hbm, 0, 0, bits, dibinfo, DIB_RGB_COLORS); - - ok( !bitmasks[0], "red mask is set\n" ); - ok( !bitmasks[1], "green mask is set\n" ); - ok( !bitmasks[2], "blue mask is set\n" ); - ok( dibinfo->bmiHeader.biSizeImage != 0xdeadbeef, "size image not set\n" ); - - memset(bitmasks, 0, 3*sizeof(DWORD)); - dibinfo->bmiHeader.biSizeImage = 0xdeadbeef; - ret = GetDIBits(hdc, hbm, 0, 0, bits, dibinfo, DIB_RGB_COLORS); - ok(ret == 1, "GetDIBits failed ret %u err %u\n",ret,GetLastError()); - - ok( bitmasks[0] != 0, "red mask is not set\n" ); - ok( bitmasks[1] != 0, "green mask is not set\n" ); - ok( bitmasks[2] != 0, "blue mask is not set\n" ); - ok( dibinfo->bmiHeader.biSizeImage != 0xdeadbeef, "size image not set\n" ); - } - else skip("not in 16 bpp BI_BITFIELDS mode, skipping that test\n"); - - DeleteObject(hbm); - ReleaseDC(NULL, hdc); -} - -static void test_select_object(void) -{ - HDC hdc; - HBITMAP hbm, hbm_old; - INT planes, bpp, i; - DWORD depths[] = {8, 15, 16, 24, 32}; - BITMAP bm; - DWORD bytes; - - hdc = GetDC(0); - ok(hdc != 0, "GetDC(0) failed\n"); - hbm = CreateCompatibleBitmap(hdc, 10, 10); - ok(hbm != 0, "CreateCompatibleBitmap failed\n"); - - hbm_old = SelectObject(hdc, hbm); - ok(hbm_old == 0, "SelectObject should fail\n"); - - DeleteObject(hbm); - ReleaseDC(0, hdc); - - hdc = CreateCompatibleDC(0); - ok(hdc != 0, "GetDC(0) failed\n"); - hbm = CreateCompatibleBitmap(hdc, 10, 10); - ok(hbm != 0, "CreateCompatibleBitmap failed\n"); - - hbm_old = SelectObject(hdc, hbm); - ok(hbm_old != 0, "SelectObject failed\n"); - hbm_old = SelectObject(hdc, hbm_old); - ok(hbm_old == hbm, "SelectObject failed\n"); - - DeleteObject(hbm); - - /* test an 1-bpp bitmap */ - planes = GetDeviceCaps(hdc, PLANES); - bpp = 1; - - hbm = CreateBitmap(10, 10, planes, bpp, NULL); - ok(hbm != 0, "CreateBitmap failed\n"); - - hbm_old = SelectObject(hdc, hbm); - ok(hbm_old != 0, "SelectObject failed\n"); - hbm_old = SelectObject(hdc, hbm_old); - ok(hbm_old == hbm, "SelectObject failed\n"); - - DeleteObject(hbm); - - for(i = 0; i < sizeof(depths)/sizeof(depths[0]); i++) { - /* test a color bitmap to dc bpp matching */ - planes = GetDeviceCaps(hdc, PLANES); - bpp = GetDeviceCaps(hdc, BITSPIXEL); - - hbm = CreateBitmap(10, 10, planes, depths[i], NULL); - ok(hbm != 0, "CreateBitmap failed\n"); - - hbm_old = SelectObject(hdc, hbm); - if(depths[i] == bpp || - (bpp == 16 && depths[i] == 15) /* 16 and 15 bpp are compatible */ - ) { - ok(hbm_old != 0, "SelectObject failed, BITSPIXEL: %d, created depth: %d\n", bpp, depths[i]); - SelectObject(hdc, hbm_old); - } else { - ok(hbm_old == 0, "SelectObject should fail. BITSPIXELS: %d, created depth: %d\n", bpp, depths[i]); - } - - memset(&bm, 0xAA, sizeof(bm)); - bytes = GetObject(hbm, sizeof(bm), &bm); - ok(bytes == sizeof(bm), "GetObject returned %d\n", bytes); - ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType); - ok(bm.bmWidth == 10, "wrong bmWidth %d\n", bm.bmWidth); - ok(bm.bmHeight == 10, "wrong bmHeight %d\n", bm.bmHeight); - ok(bm.bmWidthBytes == BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel), "wrong bmWidthBytes %d\n", bm.bmWidthBytes); - ok(bm.bmPlanes == planes, "wrong bmPlanes %u\n", bm.bmPlanes); - if(depths[i] == 15) { - ok(bm.bmBitsPixel == 16, "wrong bmBitsPixel %d(15 bpp special)\n", bm.bmBitsPixel); - } else { - ok(bm.bmBitsPixel == depths[i], "wrong bmBitsPixel %d\n", bm.bmBitsPixel); - } - ok(!bm.bmBits, "wrong bmBits %p\n", bm.bmBits); - - DeleteObject(hbm); - } - - DeleteDC(hdc); -} - -static void test_mono_1x1_bmp_dbg(HBITMAP hbmp, int line) -{ - INT ret; - BITMAP bm; - - ret = GetObjectType(hbmp); - ok_(__FILE__, line)(ret == OBJ_BITMAP, "the object %p is not bitmap\n", hbmp); - - ret = GetObject(hbmp, 0, 0); - ok_(__FILE__, line)(ret == sizeof(BITMAP) /* XP */ || - ret == sizeof(DIBSECTION) /* Win9x */, "object size %d\n", ret); - - memset(&bm, 0xDA, sizeof(bm)); - SetLastError(0xdeadbeef); - ret = GetObject(hbmp, sizeof(bm), &bm); - if (!ret) /* XP, only for curObj2 */ return; - ok_(__FILE__, line)(ret == sizeof(BITMAP) || - ret == sizeof(DIBSECTION) /* Win9x, only for curObj2 */, - "GetObject returned %d, error %u\n", ret, GetLastError()); - ok_(__FILE__, line)(bm.bmType == 0, "wrong bmType, expected 0 got %d\n", bm.bmType); - ok_(__FILE__, line)(bm.bmWidth == 1, "wrong bmWidth, expected 1 got %d\n", bm.bmWidth); - ok_(__FILE__, line)(bm.bmHeight == 1, "wrong bmHeight, expected 1 got %d\n", bm.bmHeight); - ok_(__FILE__, line)(bm.bmWidthBytes == 2, "wrong bmWidthBytes, expected 2 got %d\n", bm.bmWidthBytes); - ok_(__FILE__, line)(bm.bmPlanes == 1, "wrong bmPlanes, expected 1 got %u\n", bm.bmPlanes); - ok_(__FILE__, line)(bm.bmBitsPixel == 1, "wrong bmBitsPixel, expected 1 got %d\n", bm.bmBitsPixel); - ok_(__FILE__, line)(!bm.bmBits, "wrong bmBits %p\n", bm.bmBits); -} - -#define test_mono_1x1_bmp(a) test_mono_1x1_bmp_dbg((a), __LINE__) - -static void test_CreateBitmap(void) -{ - BITMAP bmp; - HDC screenDC = GetDC(0); - HDC hdc = CreateCompatibleDC(screenDC); - UINT i, expect = 0; - - /* all of these are the stock monochrome bitmap */ - HBITMAP bm = CreateCompatibleBitmap(hdc, 0, 0); - HBITMAP bm1 = CreateCompatibleBitmap(screenDC, 0, 0); - HBITMAP bm4 = CreateBitmap(0, 1, 0, 0, 0); - HBITMAP bm5 = CreateDiscardableBitmap(hdc, 0, 0); - HBITMAP curObj1 = (HBITMAP)GetCurrentObject(hdc, OBJ_BITMAP); - HBITMAP curObj2 = (HBITMAP)GetCurrentObject(screenDC, OBJ_BITMAP); - - /* these 2 are not the stock monochrome bitmap */ - HBITMAP bm2 = CreateCompatibleBitmap(hdc, 1, 1); - HBITMAP bm3 = CreateBitmap(1, 1, 1, 1, 0); - - HBITMAP old1 = (HBITMAP)SelectObject(hdc, bm2); - HBITMAP old2 = (HBITMAP)SelectObject(screenDC, bm3); - SelectObject(hdc, old1); - SelectObject(screenDC, old2); - - ok(bm == bm1 && bm == bm4 && bm == bm5 && bm == curObj1 && bm == old1, - "0: %p, 1: %p, 4: %p, 5: %p, curObj1 %p, old1 %p\n", - bm, bm1, bm4, bm5, curObj1, old1); - ok(bm != bm2 && bm != bm3, "0: %p, 2: %p, 3: %p\n", bm, bm2, bm3); - ok(bm != curObj2 /* XP */ || bm == curObj2 /* Win9x */, - "0: %p, curObj2 %p\n", bm, curObj2); - ok(old2 == 0, "old2 %p\n", old2); - - test_mono_1x1_bmp(bm); - test_mono_1x1_bmp(bm1); - test_mono_1x1_bmp(bm2); - test_mono_1x1_bmp(bm3); - test_mono_1x1_bmp(bm4); - test_mono_1x1_bmp(bm5); - test_mono_1x1_bmp(old1); - test_mono_1x1_bmp(curObj1); - test_mono_1x1_bmp(curObj2); - - DeleteObject(bm); - DeleteObject(bm1); - DeleteObject(bm2); - DeleteObject(bm3); - DeleteObject(bm4); - DeleteObject(bm5); - - DeleteDC(hdc); - ReleaseDC(0, screenDC); - - /* show that Windows ignores the provided bm.bmWidthBytes */ - bmp.bmType = 0; - bmp.bmWidth = 1; - bmp.bmHeight = 1; - bmp.bmWidthBytes = 28; - bmp.bmPlanes = 1; - bmp.bmBitsPixel = 1; - bmp.bmBits = NULL; - bm = CreateBitmapIndirect(&bmp); - ok(bm != 0, "CreateBitmapIndirect error %u\n", GetLastError()); - test_mono_1x1_bmp(bm); - DeleteObject(bm); - - /* Test how the bmBitsPixel field is treated */ - for(i = 1; i <= 33; i++) { - bmp.bmType = 0; - bmp.bmWidth = 1; - bmp.bmHeight = 1; - bmp.bmWidthBytes = 28; - bmp.bmPlanes = 1; - bmp.bmBitsPixel = i; - bmp.bmBits = NULL; - bm = CreateBitmapIndirect(&bmp); - if(i > 32) { - DWORD error = GetLastError(); - ok(bm == 0, "CreateBitmapIndirect for %d bpp succeeded\n", i); - ok(error == ERROR_INVALID_PARAMETER, "Got error %d, expected ERROR_INVALID_PARAMETER\n", error); - continue; - } - ok(bm != 0, "CreateBitmapIndirect error %u\n", GetLastError()); - GetObject(bm, sizeof(bmp), &bmp); - if(i == 1) { - expect = 1; - } else if(i <= 4) { - expect = 4; - } else if(i <= 8) { - expect = 8; - } else if(i <= 16) { - expect = 16; - } else if(i <= 24) { - expect = 24; - } else if(i <= 32) { - expect = 32; - } - ok(bmp.bmBitsPixel == expect, "CreateBitmapIndirect for a %d bpp bitmap created a %d bpp bitmap, expected %d\n", - i, bmp.bmBitsPixel, expect); - DeleteObject(bm); - } -} - -static void test_bitmapinfoheadersize(void) -{ - HBITMAP hdib; - BITMAPINFO bmi; - BITMAPCOREINFO bci; - HDC hdc = GetDC(0); - - memset(&bmi, 0, sizeof(BITMAPINFO)); - bmi.bmiHeader.biHeight = 100; - bmi.bmiHeader.biWidth = 512; - bmi.bmiHeader.biBitCount = 24; - bmi.bmiHeader.biPlanes = 1; - - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER) - 1; - - hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0); - ok(hdib == NULL, "CreateDIBSection succeeded\n"); - - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - DeleteObject(hdib); - - bmi.bmiHeader.biSize++; - - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - DeleteObject(hdib); - - bmi.bmiHeader.biSize = sizeof(BITMAPINFO); - - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - DeleteObject(hdib); - - bmi.bmiHeader.biSize++; - - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - DeleteObject(hdib); - - bmi.bmiHeader.biSize = sizeof(BITMAPV4HEADER); - - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - DeleteObject(hdib); - - bmi.bmiHeader.biSize = sizeof(BITMAPV5HEADER); - - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - DeleteObject(hdib); - - memset(&bci, 0, sizeof(BITMAPCOREINFO)); - bci.bmciHeader.bcHeight = 100; - bci.bmciHeader.bcWidth = 512; - bci.bmciHeader.bcBitCount = 24; - bci.bmciHeader.bcPlanes = 1; - - bci.bmciHeader.bcSize = sizeof(BITMAPCOREHEADER) - 1; - - hdib = CreateDIBSection(hdc, (BITMAPINFO *)&bci, 0, NULL, NULL, 0); - ok(hdib == NULL, "CreateDIBSection succeeded\n"); - - bci.bmciHeader.bcSize = sizeof(BITMAPCOREHEADER); - - SetLastError(0xdeadbeef); - hdib = CreateDIBSection(hdc, (BITMAPINFO *)&bci, 0, NULL, NULL, 0); - ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError()); - DeleteObject(hdib); - - bci.bmciHeader.bcSize++; - - hdib = CreateDIBSection(hdc, (BITMAPINFO *)&bci, 0, NULL, NULL, 0); - ok(hdib == NULL, "CreateDIBSection succeeded\n"); - - bci.bmciHeader.bcSize = sizeof(BITMAPCOREINFO); - - hdib = CreateDIBSection(hdc, (BITMAPINFO *)&bci, 0, NULL, NULL, 0); - ok(hdib == NULL, "CreateDIBSection succeeded\n"); - - ReleaseDC(0, hdc); -} - -static void test_get16dibits(void) -{ - BYTE bits[4 * (16 / sizeof(BYTE))]; - HBITMAP hbmp; - HDC screen_dc = GetDC(NULL); - int ret; - BITMAPINFO * info; - int info_len = sizeof(BITMAPINFOHEADER) + 1024; - BYTE *p; - int overwritten_bytes = 0; - - memset(bits, 0, sizeof(bits)); - hbmp = CreateBitmap(2, 2, 1, 16, bits); - ok(hbmp != NULL, "CreateBitmap failed\n"); - - info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, info_len); - assert(info); - - memset(info, '!', info_len); - memset(info, 0, sizeof(info->bmiHeader)); - - info->bmiHeader.biSize = sizeof(info->bmiHeader); - info->bmiHeader.biWidth = 2; - info->bmiHeader.biHeight = 2; - info->bmiHeader.biPlanes = 1; - info->bmiHeader.biCompression = BI_RGB; - - ret = GetDIBits(screen_dc, hbmp, 0, 0, NULL, info, 0); - ok(ret != 0, "GetDIBits failed\n"); - - for (p = ((BYTE *) info) + sizeof(info->bmiHeader); (p - ((BYTE *) info)) < info_len; p++) - if (*p != '!') - overwritten_bytes++; - ok(overwritten_bytes == 0, "GetDIBits wrote past the buffer given\n"); - - HeapFree(GetProcessHeap(), 0, info); - DeleteObject(hbmp); - ReleaseDC(NULL, screen_dc); -} - -void test_GdiAlphaBlend() -{ - /* test out-of-bound parameters for GdiAlphaBlend */ - HDC hdcNull; - - HDC hdcDst; - HBITMAP bmpDst; - HBITMAP oldDst; - - BITMAPINFO bmi; - HDC hdcSrc; - HBITMAP bmpSrc; - HBITMAP oldSrc; - LPVOID bits; - - BLENDFUNCTION blend; - - if (!pGdiAlphaBlend) - { - skip("GdiAlphaBlend() is not implemented\n"); - return; - } - - hdcNull = GetDC(NULL); - hdcDst = CreateCompatibleDC(hdcNull); - bmpDst = CreateCompatibleBitmap(hdcNull, 100, 100); - hdcSrc = CreateCompatibleDC(hdcNull); - - memset(&bmi, 0, sizeof(bmi)); /* as of Wine 0.9.44 we require the src to be a DIB section */ - bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); - bmi.bmiHeader.biHeight = 20; - bmi.bmiHeader.biWidth = 20; - bmi.bmiHeader.biBitCount = 32; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biCompression = BI_RGB; - bmpSrc = CreateDIBSection(hdcDst, &bmi, DIB_RGB_COLORS, &bits, NULL, 0); - ok(bmpSrc != NULL, "Couldn't create source bitmap\n"); - - oldDst = (HBITMAP)SelectObject(hdcDst, bmpDst); - oldSrc = (HBITMAP)SelectObject(hdcSrc, bmpSrc); - - blend.BlendOp = AC_SRC_OVER; - blend.BlendFlags = 0; - blend.SourceConstantAlpha = 128; - blend.AlphaFormat = 0; - - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 0, 0, 20, 20, blend), TRUE, BOOL, "%d"); - SetLastError(0xdeadbeef); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, -1, 0, 10, 10, blend), FALSE, BOOL, "%d"); - expect_eq(GetLastError(), ERROR_INVALID_PARAMETER, int, "%d"); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 0, -1, 10, 10, blend), FALSE, BOOL, "%d"); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 15, 0, 10, 10, blend), FALSE, BOOL, "%d"); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 10, 10, -2, 3, blend), FALSE, BOOL, "%d"); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 10, 10, -2, 3, blend), FALSE, BOOL, "%d"); - - SetWindowOrgEx(hdcSrc, -10, -10, NULL); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, -1, 0, 10, 10, blend), TRUE, BOOL, "%d"); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 0, -1, 10, 10, blend), TRUE, BOOL, "%d"); - SetMapMode(hdcSrc, MM_ANISOTROPIC); - ScaleWindowExtEx(hdcSrc, 10, 1, 10, 1, NULL); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, -1, 0, 30, 30, blend), TRUE, BOOL, "%d"); - expect_eq(pGdiAlphaBlend(hdcDst, 0, 0, 20, 20, hdcSrc, 0, -1, 30, 30, blend), TRUE, BOOL, "%d"); - - SelectObject(hdcDst, oldDst); - SelectObject(hdcSrc, oldSrc); - DeleteObject(bmpSrc); - DeleteObject(bmpDst); - DeleteDC(hdcDst); - DeleteDC(hdcSrc); - - ReleaseDC(NULL, hdcNull); - -} - -START_TEST(bitmap) -{ - HMODULE hdll; - is_win9x = GetWindowLongPtrW(GetDesktopWindow(), GWLP_WNDPROC) == 0; - - hdll = GetModuleHandle("gdi32.dll"); - pGdiAlphaBlend = (void*)GetProcAddress(hdll, "GdiAlphaBlend"); - - test_createdibitmap(); - test_dibsections(); - test_mono_dibsection(); - test_bitmap(); - test_bmBits(); - test_GetDIBits_selected_DIB(1); - test_GetDIBits_selected_DIB(4); - test_GetDIBits_selected_DIB(8); - test_GetDIBits_selected_DDB(TRUE); - test_GetDIBits_selected_DDB(FALSE); - test_GetDIBits(); - test_GetDIBits_BI_BITFIELDS(); - test_select_object(); - test_CreateBitmap(); - test_GdiAlphaBlend(); - test_bitmapinfoheadersize(); - test_get16dibits(); -} diff --git a/rostests/winetests/gdi32/brush.c b/rostests/winetests/gdi32/brush.c deleted file mode 100755 index 3d96a3409fa..00000000000 --- a/rostests/winetests/gdi32/brush.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Unit test suite for brushes - * - * 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 - */ - -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" - -#include "wine/test.h" - -typedef struct _STOCK_BRUSH { - COLORREF color; - int stockobj; - const char *name; -} STOCK_BRUSH; - -static void test_solidbrush(void) -{ - static const STOCK_BRUSH stock[] = { - {RGB(255,255,255), WHITE_BRUSH, "white"}, - {RGB(192,192,192), LTGRAY_BRUSH, "ltgray"}, - {RGB(128,128,128), GRAY_BRUSH, "gray"}, - {RGB(0,0,0), BLACK_BRUSH, "black"}, - {RGB(0,0,255), -1, "blue"} - }; - HBRUSH solidBrush; - HBRUSH stockBrush; - LOGBRUSH br; - size_t i; - INT ret; - - for(i=0; ileft, rect->top, rect->right, rect->bottom); - ok(EqualRect(rect, rc), "rects don't match\n"); - } - - ok(rgn.data.rdh.dwSize == sizeof(rgn.data.rdh), "expected sizeof(rdh), got %u\n", rgn.data.rdh.dwSize); - ok(rgn.data.rdh.iType == RDH_RECTANGLES, "expected RDH_RECTANGLES, got %u\n", rgn.data.rdh.iType); - if (IsRectEmpty(rc)) - { - ok(rgn.data.rdh.nCount == 0, "expected 0, got %u\n", rgn.data.rdh.nCount); - ok(rgn.data.rdh.nRgnSize == 0, "expected 0, got %u\n", rgn.data.rdh.nRgnSize); - } - else - { - ok(rgn.data.rdh.nCount == 1, "expected 1, got %u\n", rgn.data.rdh.nCount); - ok(rgn.data.rdh.nRgnSize == sizeof(RECT), "expected sizeof(RECT), got %u\n", rgn.data.rdh.nRgnSize); - } - ok(EqualRect(&rgn.data.rdh.rcBound, rc), "rects don't match\n"); -} - -static void test_ExtCreateRegion(void) -{ - static const RECT empty_rect; - static const RECT rc = { 111, 222, 333, 444 }; - static const RECT rc_xformed = { 76, 151, 187, 262 }; - union - { - RGNDATA data; - char buf[sizeof(RGNDATAHEADER) + sizeof(RECT)]; - } rgn; - HRGN hrgn; - XFORM xform; - -if (0) /* crashes under Win9x */ -{ - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, 0, NULL); - ok(!hrgn, "ExtCreateRegion should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); -} - - rgn.data.rdh.dwSize = 0; - rgn.data.rdh.iType = 0; - rgn.data.rdh.nCount = 0; - rgn.data.rdh.nRgnSize = 0; - SetRectEmpty(&rgn.data.rdh.rcBound); - memcpy(rgn.data.Buffer, &rc, sizeof(rc)); - - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, sizeof(rgn), &rgn.data); - ok(!hrgn, "ExtCreateRegion should fail\n"); - ok(GetLastError() == 0xdeadbeef, "0xdeadbeef, got %u\n", GetLastError()); - - rgn.data.rdh.dwSize = sizeof(rgn.data.rdh) - 1; - - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, sizeof(rgn), &rgn.data); - ok(!hrgn, "ExtCreateRegion should fail\n"); - ok(GetLastError() == 0xdeadbeef, "0xdeadbeef, got %u\n", GetLastError()); - - /* although XP doesn't care about the type Win9x does */ - rgn.data.rdh.iType = RDH_RECTANGLES; - rgn.data.rdh.dwSize = sizeof(rgn.data.rdh); - - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, sizeof(rgn), &rgn.data); - ok(hrgn != 0, "ExtCreateRegion error %u\n", GetLastError()); - verify_region(hrgn, &empty_rect); - DeleteObject(hrgn); - - rgn.data.rdh.nCount = 1; - SetRectEmpty(&rgn.data.rdh.rcBound); - memcpy(rgn.data.Buffer, &rc, sizeof(rc)); - - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, sizeof(rgn), &rgn.data); - ok(hrgn != 0, "ExtCreateRegion error %u\n", GetLastError()); - verify_region(hrgn, &rc); - DeleteObject(hrgn); - - rgn.data.rdh.dwSize = sizeof(rgn.data.rdh) + 1; - - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(NULL, 1, &rgn.data); - ok(hrgn != 0, "ExtCreateRegion error %u\n", GetLastError()); - verify_region(hrgn, &rc); - DeleteObject(hrgn); - - xform.eM11 = 0.5; /* 50% width */ - xform.eM12 = 0.0; - xform.eM21 = 0.0; - xform.eM22 = 0.5; /* 50% height */ - xform.eDx = 20.0; - xform.eDy = 40.0; - - rgn.data.rdh.dwSize = sizeof(rgn.data.rdh); - - SetLastError(0xdeadbeef); - hrgn = ExtCreateRegion(&xform, sizeof(rgn), &rgn.data); - ok(hrgn != 0, "ExtCreateRegion error %u/%x\n", GetLastError(), GetLastError()); - verify_region(hrgn, &rc_xformed); - DeleteObject(hrgn); -} - -START_TEST(clipping) -{ - test_GetRandomRgn(); - test_ExtCreateRegion(); -} diff --git a/rostests/winetests/gdi32/dc.c b/rostests/winetests/gdi32/dc.c deleted file mode 100644 index 9e0048e4fce..00000000000 --- a/rostests/winetests/gdi32/dc.c +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Unit tests for dc functions - * - * Copyright (c) 2005 Huw Davies - * 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 - */ - -#define WINVER 0x0501 /* request latest DEVMODE */ - -#include -#include - -#include "wine/test.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" - -static void dump_region(HRGN hrgn) -{ - DWORD i, size; - RGNDATA *data = NULL; - RECT *rect; - - if (!hrgn) - { - printf( "(null) region\n" ); - return; - } - if (!(size = GetRegionData( hrgn, 0, NULL ))) return; - if (!(data = HeapAlloc( GetProcessHeap(), 0, size ))) return; - GetRegionData( hrgn, size, data ); - printf( "%d rects:", data->rdh.nCount ); - for (i = 0, rect = (RECT *)data->Buffer; i < data->rdh.nCount; i++, rect++) - printf( " (%d,%d)-(%d,%d)", rect->left, rect->top, rect->right, rect->bottom ); - printf( "\n" ); - HeapFree( GetProcessHeap(), 0, data ); -} - -static void test_savedc_2(void) -{ - HWND hwnd; - HDC hdc; - HRGN hrgn; - RECT rc, rc_clip; - int ret; - - hwnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100, - 0, 0, 0, NULL); - assert(hwnd != 0); - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - - hrgn = CreateRectRgn(0, 0, 0, 0); - assert(hrgn != 0); - - hdc = GetDC(hwnd); - ok(hdc != NULL, "CreateDC rets %p\n", hdc); - - ret = GetClipBox(hdc, &rc_clip); - ok(ret == SIMPLEREGION, "GetClipBox returned %d instead of SIMPLEREGION\n", ret); - ret = GetClipRgn(hdc, hrgn); - ok(ret == 0, "GetClipRgn returned %d instead of 0\n", ret); - ret = GetRgnBox(hrgn, &rc); - ok(ret == NULLREGION, "GetRgnBox returned %d (%d,%d-%d,%d) instead of NULLREGION\n", - ret, rc.left, rc.top, rc.right, rc.bottom); - /*dump_region(hrgn);*/ - SetRect(&rc, 0, 0, 100, 100); - ok(EqualRect(&rc, &rc_clip), - "rects are not equal: (%d,%d-%d,%d) - (%d,%d-%d,%d)\n", - rc.left, rc.top, rc.right, rc.bottom, - rc_clip.left, rc_clip.top, rc_clip.right, rc_clip.bottom); - - ret = SaveDC(hdc); -todo_wine -{ - ok(ret == 1, "ret = %d\n", ret); -} - - ret = IntersectClipRect(hdc, 0, 0, 50, 50); - if (ret == COMPLEXREGION) - { - /* XP returns COMPLEXREGION although dump_region reports only 1 rect */ - trace("Windows BUG: IntersectClipRect returned %d instead of SIMPLEREGION\n", ret); - /* let's make sure that it's a simple region */ - ret = GetClipRgn(hdc, hrgn); - ok(ret == 1, "GetClipRgn returned %d instead of 1\n", ret); - dump_region(hrgn); - } - else - ok(ret == SIMPLEREGION, "IntersectClipRect returned %d instead of SIMPLEREGION\n", ret); - - ret = GetClipBox(hdc, &rc_clip); - ok(ret == SIMPLEREGION, "GetClipBox returned %d instead of SIMPLEREGION\n", ret); - SetRect(&rc, 0, 0, 50, 50); - ok(EqualRect(&rc, &rc_clip), "rects are not equal\n"); - - ret = RestoreDC(hdc, 1); - ok(ret, "ret = %d\n", ret); - - ret = GetClipBox(hdc, &rc_clip); - ok(ret == SIMPLEREGION, "GetClipBox returned %d instead of SIMPLEREGION\n", ret); - SetRect(&rc, 0, 0, 100, 100); - ok(EqualRect(&rc, &rc_clip), "rects are not equal\n"); - - DeleteObject(hrgn); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); -} - -static void test_savedc(void) -{ - HDC hdc = CreateDCA("DISPLAY", NULL, NULL, NULL); - int ret; - - ok(hdc != NULL, "CreateDC rets %p\n", hdc); - - ret = SaveDC(hdc); - ok(ret == 1, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 2, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 3, "ret = %d\n", ret); - ret = RestoreDC(hdc, -1); - ok(ret, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 3, "ret = %d\n", ret); - ret = RestoreDC(hdc, 1); - ok(ret, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 1, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 2, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 3, "ret = %d\n", ret); - ret = RestoreDC(hdc, -2); - ok(ret, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 2, "ret = %d\n", ret); - ret = RestoreDC(hdc, -2); - ok(ret, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 1, "ret = %d\n", ret); - ret = SaveDC(hdc); - ok(ret == 2, "ret = %d\n", ret); - ret = RestoreDC(hdc, -4); - ok(!ret, "ret = %d\n", ret); - ret = RestoreDC(hdc, 3); - ok(!ret, "ret = %d\n", ret); - - /* Under win98 the following two succeed and both clear the save stack - ret = RestoreDC(hdc, -3); - ok(!ret, "ret = %d\n", ret); - ret = RestoreDC(hdc, 0); - ok(!ret, "ret = %d\n", ret); - */ - - ret = RestoreDC(hdc, 1); - ok(ret, "ret = %d\n", ret); - - DeleteDC(hdc); -} - -static void test_GdiConvertToDevmodeW(void) -{ - DEVMODEW * (WINAPI *pGdiConvertToDevmodeW)(const DEVMODEA *); - DEVMODEA dmA; - DEVMODEW *dmW; - BOOL ret; - - pGdiConvertToDevmodeW = (void *)GetProcAddress(GetModuleHandleA("gdi32.dll"), "GdiConvertToDevmodeW"); - if (!pGdiConvertToDevmodeW) - { - skip("GdiConvertToDevmodeW is not available on this platform\n"); - return; - } - - ret = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dmA); - ok(ret, "EnumDisplaySettingsExA error %u\n", GetLastError()); - ok(dmA.dmSize >= FIELD_OFFSET(DEVMODEA, dmICMMethod), "dmSize is too small: %04x\n", dmA.dmSize); - ok(dmA.dmSize <= sizeof(DEVMODEA), "dmSize is too large: %04x\n", dmA.dmSize); - - dmW = pGdiConvertToDevmodeW(&dmA); - ok(dmW->dmSize >= FIELD_OFFSET(DEVMODEW, dmICMMethod), "dmSize is too small: %04x\n", dmW->dmSize); - ok(dmW->dmSize <= sizeof(DEVMODEW), "dmSize is too large: %04x\n", dmW->dmSize); - HeapFree(GetProcessHeap(), 0, dmW); - - dmA.dmSize = FIELD_OFFSET(DEVMODEA, dmFields) + sizeof(dmA.dmFields); - dmW = pGdiConvertToDevmodeW(&dmA); - ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmFields) + sizeof(dmW->dmFields), - "wrong size %u\n", dmW->dmSize); - HeapFree(GetProcessHeap(), 0, dmW); - - dmA.dmICMMethod = DMICMMETHOD_NONE; - dmA.dmSize = FIELD_OFFSET(DEVMODEA, dmICMMethod) + sizeof(dmA.dmICMMethod); - dmW = pGdiConvertToDevmodeW(&dmA); - ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmICMMethod) + sizeof(dmW->dmICMMethod), - "wrong size %u\n", dmW->dmSize); - ok(dmW->dmICMMethod == DMICMMETHOD_NONE, - "expected DMICMMETHOD_NONE, got %u\n", dmW->dmICMMethod); - HeapFree(GetProcessHeap(), 0, dmW); - - dmA.dmSize = 1024; - dmW = pGdiConvertToDevmodeW(&dmA); - ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmPanningHeight) + sizeof(dmW->dmPanningHeight), - "wrong size %u\n", dmW->dmSize); - HeapFree(GetProcessHeap(), 0, dmW); - - SetLastError(0xdeadbeef); - dmA.dmSize = 0; - dmW = pGdiConvertToDevmodeW(&dmA); - ok(!dmW, "GdiConvertToDevmodeW should fail\n"); - ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %u\n", GetLastError()); - - /* this is the minimal dmSize that XP accepts */ - dmA.dmSize = FIELD_OFFSET(DEVMODEA, dmFields); - dmW = pGdiConvertToDevmodeW(&dmA); - ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmFields), - "expected %04x, got %04x\n", FIELD_OFFSET(DEVMODEW, dmFields), dmW->dmSize); - HeapFree(GetProcessHeap(), 0, dmW); -} - -static void test_CreateCompatibleDC(void) -{ - BOOL bRet; - HDC hDC; - HDC hNewDC; - - /* Create a DC compatible with the screen */ - hDC = CreateCompatibleDC(NULL); - ok(hDC != NULL, "CreateCompatibleDC returned %p\n", hDC); - - /* Delete this DC, this should succeed */ - bRet = DeleteDC(hDC); - ok(bRet == TRUE, "DeleteDC returned %u\n", bRet); - - /* Try to create a DC compatible to the deleted DC. This has to fail */ - hNewDC = CreateCompatibleDC(hDC); - ok(hNewDC == NULL, "CreateCompatibleDC returned %p\n", hNewDC); -} - -START_TEST(dc) -{ - test_savedc(); - test_savedc_2(); - test_GdiConvertToDevmodeW(); - test_CreateCompatibleDC(); -} diff --git a/rostests/winetests/gdi32/font.c b/rostests/winetests/gdi32/font.c deleted file mode 100644 index c627521f0e8..00000000000 --- a/rostests/winetests/gdi32/font.c +++ /dev/null @@ -1,1887 +0,0 @@ -/* - * Unit test suite for fonts - * - * Copyright 2002 Mike McCormack - * Copyright 2004 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 -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winnls.h" - -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) - -LONG (WINAPI *pGdiGetCharDimensions)(HDC hdc, LPTEXTMETRICW lptm, LONG *height); -BOOL (WINAPI *pGetCharABCWidthsI)(HDC hdc, UINT first, UINT count, LPWORD glyphs, LPABC abc); -BOOL (WINAPI *pGetCharABCWidthsW)(HDC hdc, UINT first, UINT last, LPABC abc); -DWORD (WINAPI *pGetFontUnicodeRanges)(HDC hdc, LPGLYPHSET lpgs); -DWORD (WINAPI *pGetGlyphIndicesA)(HDC hdc, LPCSTR lpstr, INT count, LPWORD pgi, DWORD flags); -DWORD (WINAPI *pGetGlyphIndicesW)(HDC hdc, LPCWSTR lpstr, INT count, LPWORD pgi, DWORD flags); -BOOL (WINAPI *pGdiRealizationInfo)(HDC hdc, DWORD *); - -static HMODULE hgdi32 = 0; - -static void init(void) -{ - hgdi32 = GetModuleHandleA("gdi32.dll"); - - pGdiGetCharDimensions = (void *)GetProcAddress(hgdi32, "GdiGetCharDimensions"); - pGetCharABCWidthsI = (void *)GetProcAddress(hgdi32, "GetCharABCWidthsI"); - pGetCharABCWidthsW = (void *)GetProcAddress(hgdi32, "GetCharABCWidthsW"); - pGetFontUnicodeRanges = (void *)GetProcAddress(hgdi32, "GetFontUnicodeRanges"); - pGetGlyphIndicesA = (void *)GetProcAddress(hgdi32, "GetGlyphIndicesA"); - pGetGlyphIndicesW = (void *)GetProcAddress(hgdi32, "GetGlyphIndicesW"); - pGdiRealizationInfo = (void *)GetProcAddress(hgdi32, "GdiRealizationInfo"); -} - -static INT CALLBACK is_truetype_font_installed_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lParam) -{ - if (type != TRUETYPE_FONTTYPE) return 1; - - return 0; -} - -static BOOL is_truetype_font_installed(const char *name) -{ - HDC hdc = GetDC(0); - BOOL ret = FALSE; - - if (!EnumFontFamiliesA(hdc, name, is_truetype_font_installed_proc, 0)) - ret = TRUE; - - ReleaseDC(0, hdc); - return ret; -} - -static INT CALLBACK is_font_installed_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lParam) -{ - return 0; -} - -static BOOL is_font_installed(const char *name) -{ - HDC hdc = GetDC(0); - BOOL ret = FALSE; - - if(!EnumFontFamiliesA(hdc, name, is_font_installed_proc, 0)) - ret = TRUE; - - ReleaseDC(0, hdc); - return ret; -} - -static void check_font(const char* test, const LOGFONTA* lf, HFONT hfont) -{ - LOGFONTA getobj_lf; - int ret, minlen = 0; - - if (!hfont) - return; - - ret = GetObject(hfont, sizeof(getobj_lf), &getobj_lf); - /* NT4 tries to be clever and only returns the minimum length */ - while (lf->lfFaceName[minlen] && minlen < LF_FACESIZE-1) - minlen++; - minlen += FIELD_OFFSET(LOGFONTA, lfFaceName) + 1; - ok(ret == sizeof(LOGFONTA) || ret == minlen, "%s: GetObject returned %d\n", test, ret); - ok(!memcmp(&lf, &lf, FIELD_OFFSET(LOGFONTA, lfFaceName)), "%s: fonts don't match\n", test); - ok(!lstrcmpA(lf->lfFaceName, getobj_lf.lfFaceName), - "%s: font names don't match: %s != %s\n", test, lf->lfFaceName, getobj_lf.lfFaceName); -} - -static HFONT create_font(const char* test, const LOGFONTA* lf) -{ - HFONT hfont = CreateFontIndirectA(lf); - ok(hfont != 0, "%s: CreateFontIndirect failed\n", test); - if (hfont) - check_font(test, lf, hfont); - return hfont; -} - -static void test_logfont(void) -{ - LOGFONTA lf; - HFONT hfont; - - memset(&lf, 0, sizeof lf); - - lf.lfCharSet = ANSI_CHARSET; - lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; - lf.lfWeight = FW_DONTCARE; - lf.lfHeight = 16; - lf.lfWidth = 16; - lf.lfQuality = DEFAULT_QUALITY; - - lstrcpyA(lf.lfFaceName, "Arial"); - hfont = create_font("Arial", &lf); - DeleteObject(hfont); - - memset(&lf, 'A', sizeof(lf)); - hfont = CreateFontIndirectA(&lf); - ok(hfont != 0, "CreateFontIndirectA with strange LOGFONT failed\n"); - - lf.lfFaceName[LF_FACESIZE - 1] = 0; - check_font("AAA...", &lf, hfont); - DeleteObject(hfont); -} - -static INT CALLBACK font_enum_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lParam) -{ - if (type & RASTER_FONTTYPE) - { - LOGFONT *lf = (LOGFONT *)lParam; - *lf = *elf; - return 0; /* stop enumeration */ - } - - return 1; /* continue enumeration */ -} - -static void test_font_metrics(HDC hdc, HFONT hfont, LONG lfHeight, - LONG lfWidth, const char *test_str, - INT test_str_len, const TEXTMETRICA *tm_orig, - const SIZE *size_orig, INT width_of_A_orig, - INT scale_x, INT scale_y) -{ - HFONT old_hfont; - LOGFONTA lf; - TEXTMETRICA tm; - SIZE size; - INT width_of_A, cx, cy; - - if (!hfont) - return; - - GetObjectA(hfont, sizeof(lf), &lf); - - old_hfont = SelectObject(hdc, hfont); - - GetTextMetricsA(hdc, &tm); - - cx = tm.tmAveCharWidth / tm_orig->tmAveCharWidth; - cy = tm.tmHeight / tm_orig->tmHeight; - ok(cx == scale_x && cy == scale_y, "expected scale_x %d, scale_y %d, got cx %d, cy %d\n", - scale_x, scale_y, cx, cy); - ok(tm.tmHeight == tm_orig->tmHeight * scale_y, "%d != %d\n", tm.tmHeight, tm_orig->tmHeight * scale_y); - ok(tm.tmAscent == tm_orig->tmAscent * scale_y, "%d != %d\n", tm.tmAscent, tm_orig->tmAscent * scale_y); - ok(tm.tmDescent == tm_orig->tmDescent * scale_y, "%d != %d\n", tm.tmDescent, tm_orig->tmDescent * scale_y); - ok(tm.tmAveCharWidth == tm_orig->tmAveCharWidth * scale_x, "%d != %d\n", tm.tmAveCharWidth, tm_orig->tmAveCharWidth * scale_x); - ok(tm.tmMaxCharWidth == tm_orig->tmMaxCharWidth * scale_x, "%d != %d\n", tm.tmAveCharWidth, tm_orig->tmMaxCharWidth * scale_x); - - ok(lf.lfHeight == lfHeight, "lf %d != %d\n", lf.lfHeight, lfHeight); - if (lf.lfHeight) - { - if (lf.lfWidth) - ok(lf.lfWidth == tm.tmAveCharWidth, "lf %d != tm %d\n", lf.lfWidth, tm.tmAveCharWidth); - } - else - ok(lf.lfWidth == lfWidth, "lf %d != %d\n", lf.lfWidth, lfWidth); - - GetTextExtentPoint32A(hdc, test_str, test_str_len, &size); - - ok(size.cx == size_orig->cx * scale_x, "%d != %d\n", size.cx, size_orig->cx * scale_x); - ok(size.cy == size_orig->cy * scale_y, "%d != %d\n", size.cy, size_orig->cy * scale_y); - - GetCharWidthA(hdc, 'A', 'A', &width_of_A); - - ok(width_of_A == width_of_A_orig * scale_x, "%d != %d\n", width_of_A, width_of_A_orig * scale_x); - - SelectObject(hdc, old_hfont); -} - -/* Test how GDI scales bitmap font metrics */ -static void test_bitmap_font(void) -{ - static const char test_str[11] = "Test String"; - HDC hdc; - LOGFONTA bitmap_lf; - HFONT hfont, old_hfont; - TEXTMETRICA tm_orig; - SIZE size_orig; - INT ret, i, width_orig, height_orig, scale, lfWidth; - - hdc = GetDC(0); - - /* "System" has only 1 pixel size defined, otherwise the test breaks */ - ret = EnumFontFamiliesA(hdc, "System", font_enum_proc, (LPARAM)&bitmap_lf); - if (ret) - { - ReleaseDC(0, hdc); - trace("no bitmap fonts were found, skipping the test\n"); - return; - } - - trace("found bitmap font %s, height %d\n", bitmap_lf.lfFaceName, bitmap_lf.lfHeight); - - height_orig = bitmap_lf.lfHeight; - lfWidth = bitmap_lf.lfWidth; - - hfont = create_font("bitmap", &bitmap_lf); - old_hfont = SelectObject(hdc, hfont); - ok(GetTextMetricsA(hdc, &tm_orig), "GetTextMetricsA failed\n"); - ok(GetTextExtentPoint32A(hdc, test_str, sizeof(test_str), &size_orig), "GetTextExtentPoint32A failed\n"); - ok(GetCharWidthA(hdc, 'A', 'A', &width_orig), "GetCharWidthA failed\n"); - SelectObject(hdc, old_hfont); - DeleteObject(hfont); - - bitmap_lf.lfHeight = 0; - bitmap_lf.lfWidth = 4; - hfont = create_font("bitmap", &bitmap_lf); - test_font_metrics(hdc, hfont, 0, 4, test_str, sizeof(test_str), &tm_orig, &size_orig, width_orig, 1, 1); - DeleteObject(hfont); - - bitmap_lf.lfHeight = height_orig; - bitmap_lf.lfWidth = lfWidth; - - /* test fractional scaling */ - for (i = 1; i <= height_orig * 3; i++) - { - INT nearest_height; - - bitmap_lf.lfHeight = i; - hfont = create_font("fractional", &bitmap_lf); - scale = (i + height_orig - 1) / height_orig; - nearest_height = scale * height_orig; - /* XP allows not more than 10% deviation */ - if (scale > 1 && nearest_height - i > nearest_height / 10) scale--; - test_font_metrics(hdc, hfont, bitmap_lf.lfHeight, 0, test_str, sizeof(test_str), &tm_orig, &size_orig, width_orig, 1, scale); - DeleteObject(hfont); - } - - /* test integer scaling 3x2 */ - bitmap_lf.lfHeight = height_orig * 2; - bitmap_lf.lfWidth *= 3; - hfont = create_font("3x2", &bitmap_lf); - test_font_metrics(hdc, hfont, bitmap_lf.lfHeight, 0, test_str, sizeof(test_str), &tm_orig, &size_orig, width_orig, 3, 2); - DeleteObject(hfont); - - /* test integer scaling 3x3 */ - bitmap_lf.lfHeight = height_orig * 3; - bitmap_lf.lfWidth = 0; - hfont = create_font("3x3", &bitmap_lf); - test_font_metrics(hdc, hfont, bitmap_lf.lfHeight, 0, test_str, sizeof(test_str), &tm_orig, &size_orig, width_orig, 3, 3); - DeleteObject(hfont); - - ReleaseDC(0, hdc); -} - -static INT CALLBACK find_font_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lParam) -{ - LOGFONT *lf = (LOGFONT *)lParam; - - if (elf->lfHeight == lf->lfHeight && !strcmp(elf->lfFaceName, lf->lfFaceName)) - { - *lf = *elf; - return 0; /* stop enumeration */ - } - return 1; /* continue enumeration */ -} - -static void test_bitmap_font_metrics(void) -{ - static const struct font_data - { - const char face_name[LF_FACESIZE]; - int weight, height, ascent, descent, int_leading, ext_leading; - int ave_char_width, max_char_width; - DWORD ansi_bitfield; - } fd[] = - { - { "MS Sans Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 11, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }, - { "MS Sans Serif", FW_NORMAL, 16, 13, 3, 3, 0, 7, 14, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }, - { "MS Sans Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 16, FS_LATIN1 | FS_CYRILLIC }, - { "MS Sans Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 18, FS_LATIN2 }, - { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 19, FS_LATIN1 }, - { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 24, FS_LATIN2 }, - { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 20, FS_CYRILLIC }, - { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 5, 0, 12, 24, FS_LATIN1 }, - { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 6, 0, 12, 24, FS_LATIN2 }, - { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 5, 0, 12, 25, FS_CYRILLIC }, - { "MS Sans Serif", FW_NORMAL, 37, 29, 8, 5, 0, 16, 32, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }, - { "MS Serif", FW_NORMAL, 10, 8, 2, 2, 0, 4, 8, FS_LATIN1 | FS_LATIN2 }, - { "MS Serif", FW_NORMAL, 10, 8, 2, 2, 0, 5, 8, FS_CYRILLIC }, - { "MS Serif", FW_NORMAL, 11, 9, 2, 2, 0, 5, 9, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }, - { "MS Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 11, FS_LATIN1 }, - { "MS Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 12, FS_LATIN2 | FS_CYRILLIC }, - { "MS Serif", FW_NORMAL, 16, 13, 3, 3, 0, 6, 14, FS_LATIN1 | FS_LATIN2 }, - { "MS Serif", FW_NORMAL, 16, 13, 3, 3, 0, 6, 16, FS_CYRILLIC }, - { "MS Serif", FW_NORMAL, 19, 15, 4, 3, 0, 8, 18, FS_LATIN1 | FS_LATIN2 }, - { "MS Serif", FW_NORMAL, 19, 15, 4, 3, 0, 8, 19, FS_CYRILLIC }, - { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 17, FS_LATIN1 }, - { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 22, FS_LATIN2 }, - { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 23, FS_CYRILLIC }, - { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 23, FS_LATIN1 }, - { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 26, FS_LATIN2 }, - { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 27, FS_CYRILLIC }, - { "MS Serif", FW_NORMAL, 35, 27, 8, 3, 0, 16, 33, FS_LATIN1 | FS_LATIN2 }, - { "MS Serif", FW_NORMAL, 35, 27, 8, 3, 0, 16, 34, FS_CYRILLIC }, - { "Courier", FW_NORMAL, 13, 11, 2, 0, 0, 8, 8, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }, - { "Courier", FW_NORMAL, 16, 13, 3, 0, 0, 9, 9, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }, - { "Courier", FW_NORMAL, 20, 16, 4, 0, 0, 12, 12, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }, - { "System", FW_BOLD, 16, 13, 3, 3, 0, 7, 14, FS_LATIN1 }, - { "System", FW_BOLD, 16, 13, 3, 3, 0, 7, 15, FS_LATIN2 | FS_CYRILLIC }, -/* - * TODO: the system for CP932 should be NORMAL, not BOLD. However that would - * require a new system.sfd for that font - */ - { "System", FW_BOLD, 18, 16, 2, 0, 2, 8, 16, FS_JISJAPAN }, - { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 1, 2, FS_LATIN1 }, - { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 1, 8, FS_LATIN2 | FS_CYRILLIC }, - { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 2, 4, FS_JISJAPAN }, - { "Small Fonts", FW_NORMAL, 5, 4, 1, 1, 0, 3, 4, FS_LATIN1 }, - { "Small Fonts", FW_NORMAL, 5, 4, 1, 1, 0, 2, 8, FS_LATIN2 | FS_CYRILLIC }, - { "Small Fonts", FW_NORMAL, 5, 4, 1, 0, 0, 3, 6, FS_JISJAPAN }, - { "Small Fonts", FW_NORMAL, 6, 5, 1, 1, 0, 3, 13, FS_LATIN1 }, - { "Small Fonts", FW_NORMAL, 6, 5, 1, 1, 0, 3, 8, FS_LATIN2 | FS_CYRILLIC }, - { "Small Fonts", FW_NORMAL, 6, 5, 1, 0, 0, 4, 8, FS_JISJAPAN }, - { "Small Fonts", FW_NORMAL, 8, 7, 1, 1, 0, 4, 7, FS_LATIN1 }, - { "Small Fonts", FW_NORMAL, 8, 7, 1, 1, 0, 4, 8, FS_LATIN2 | FS_CYRILLIC }, - { "Small Fonts", FW_NORMAL, 8, 7, 1, 0, 0, 5, 10, FS_JISJAPAN }, - { "Small Fonts", FW_NORMAL, 10, 8, 2, 2, 0, 4, 8, FS_LATIN1 | FS_LATIN2 }, - { "Small Fonts", FW_NORMAL, 10, 8, 2, 2, 0, 5, 8, FS_CYRILLIC }, - { "Small Fonts", FW_NORMAL, 10, 8, 2, 0, 0, 6, 12, FS_JISJAPAN }, - { "Small Fonts", FW_NORMAL, 11, 9, 2, 2, 0, 5, 9, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }, - { "Small Fonts", FW_NORMAL, 11, 9, 2, 0, 0, 7, 14, FS_JISJAPAN }, - { "Fixedsys", FW_NORMAL, 15, 12, 3, 3, 0, 8, 8, FS_LATIN1 | FS_LATIN2 }, - { "Fixedsys", FW_NORMAL, 16, 12, 4, 3, 0, 8, 8, FS_CYRILLIC }, - { "FixedSys", FW_NORMAL, 18, 16, 2, 0, 0, 8, 16, FS_JISJAPAN } - - /* FIXME: add "Terminal" */ - }; - HDC hdc; - LOGFONT lf; - HFONT hfont, old_hfont; - TEXTMETRIC tm; - INT ret, i; - - hdc = CreateCompatibleDC(0); - assert(hdc); - - for (i = 0; i < sizeof(fd)/sizeof(fd[0]); i++) - { - int bit; - - memset(&lf, 0, sizeof(lf)); - - lf.lfHeight = fd[i].height; - strcpy(lf.lfFaceName, fd[i].face_name); - - for(bit = 0; bit < 32; bit++) - { - DWORD fs[2]; - CHARSETINFO csi; - - fs[0] = 1L << bit; - fs[1] = 0; - if((fd[i].ansi_bitfield & fs[0]) == 0) continue; - if(!TranslateCharsetInfo( fs, &csi, TCI_SRCFONTSIG )) continue; - - lf.lfCharSet = csi.ciCharset; - ret = EnumFontFamiliesEx(hdc, &lf, find_font_proc, (LPARAM)&lf, 0); - if (ret) continue; - - trace("found font %s, height %d charset %x\n", lf.lfFaceName, lf.lfHeight, lf.lfCharSet); - - hfont = create_font(lf.lfFaceName, &lf); - old_hfont = SelectObject(hdc, hfont); - ok(GetTextMetrics(hdc, &tm), "GetTextMetrics error %d\n", GetLastError()); - - ok(tm.tmWeight == fd[i].weight, "%s(%d): tm.tmWeight %d != %d\n", fd[i].face_name, fd[i].height, tm.tmWeight, fd[i].weight); - ok(tm.tmHeight == fd[i].height, "%s(%d): tm.tmHeight %d != %d\n", fd[i].face_name, fd[i].height, tm.tmHeight, fd[i].height); - ok(tm.tmAscent == fd[i].ascent, "%s(%d): tm.tmAscent %d != %d\n", fd[i].face_name, fd[i].height, tm.tmAscent, fd[i].ascent); - ok(tm.tmDescent == fd[i].descent, "%s(%d): tm.tmDescent %d != %d\n", fd[i].face_name, fd[i].height, tm.tmDescent, fd[i].descent); - ok(tm.tmInternalLeading == fd[i].int_leading, "%s(%d): tm.tmInternalLeading %d != %d\n", fd[i].face_name, fd[i].height, tm.tmInternalLeading, fd[i].int_leading); - ok(tm.tmExternalLeading == fd[i].ext_leading, "%s(%d): tm.tmExternalLeading %d != %d\n", fd[i].face_name, fd[i].height, tm.tmExternalLeading, fd[i].ext_leading); - ok(tm.tmAveCharWidth == fd[i].ave_char_width, "%s(%d): tm.tmAveCharWidth %d != %d\n", fd[i].face_name, fd[i].height, tm.tmAveCharWidth, fd[i].ave_char_width); - - /* Don't run the max char width test on System/ANSI_CHARSET. We have extra characters in our font - that make the max width bigger */ - if(strcmp(lf.lfFaceName, "System") || lf.lfCharSet != ANSI_CHARSET) - ok(tm.tmMaxCharWidth == fd[i].max_char_width, "%s(%d): tm.tmMaxCharWidth %d != %d\n", fd[i].face_name, fd[i].height, tm.tmMaxCharWidth, fd[i].max_char_width); - - SelectObject(hdc, old_hfont); - DeleteObject(hfont); - } - } - - DeleteDC(hdc); -} - -static void test_GdiGetCharDimensions(void) -{ - HDC hdc; - TEXTMETRICW tm; - LONG ret; - SIZE size; - LONG avgwidth, height; - static const char szAlphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - - if (!pGdiGetCharDimensions) - { - skip("GdiGetCharDimensions not available on this platform\n"); - return; - } - - hdc = CreateCompatibleDC(NULL); - - GetTextExtentPoint(hdc, szAlphabet, strlen(szAlphabet), &size); - avgwidth = ((size.cx / 26) + 1) / 2; - - ret = pGdiGetCharDimensions(hdc, &tm, &height); - ok(ret == avgwidth, "GdiGetCharDimensions should have returned width of %d instead of %d\n", avgwidth, ret); - ok(height == tm.tmHeight, "GdiGetCharDimensions should have set height to %d instead of %d\n", tm.tmHeight, height); - - ret = pGdiGetCharDimensions(hdc, &tm, NULL); - ok(ret == avgwidth, "GdiGetCharDimensions should have returned width of %d instead of %d\n", avgwidth, ret); - - ret = pGdiGetCharDimensions(hdc, NULL, NULL); - ok(ret == avgwidth, "GdiGetCharDimensions should have returned width of %d instead of %d\n", avgwidth, ret); - - height = 0; - ret = pGdiGetCharDimensions(hdc, NULL, &height); - ok(ret == avgwidth, "GdiGetCharDimensions should have returned width of %d instead of %d\n", avgwidth, ret); - ok(height == size.cy, "GdiGetCharDimensions should have set height to %d instead of %d\n", size.cy, height); - - DeleteDC(hdc); -} - -static void test_GetCharABCWidths(void) -{ - static const WCHAR str[] = {'a',0}; - BOOL ret; - HDC hdc; - LOGFONTA lf; - HFONT hfont; - ABC abc[1]; - WORD glyphs[1]; - DWORD nb; - - if (!pGetCharABCWidthsW || !pGetCharABCWidthsI) - { - skip("GetCharABCWidthsW/I not available on this platform\n"); - return; - } - - memset(&lf, 0, sizeof(lf)); - strcpy(lf.lfFaceName, "System"); - lf.lfHeight = 20; - - hfont = CreateFontIndirectA(&lf); - hdc = GetDC(0); - hfont = SelectObject(hdc, hfont); - - nb = pGetGlyphIndicesW(hdc, str, 1, glyphs, 0); - ok(nb == 1, "GetGlyphIndicesW should have returned 1\n"); - - ret = pGetCharABCWidthsI(NULL, 0, 1, glyphs, abc); - ok(!ret, "GetCharABCWidthsI should have failed\n"); - - ret = pGetCharABCWidthsI(hdc, 0, 1, glyphs, NULL); - ok(!ret, "GetCharABCWidthsI should have failed\n"); - - ret = pGetCharABCWidthsI(hdc, 0, 1, glyphs, abc); - ok(ret, "GetCharABCWidthsI should have succeeded\n"); - - ret = pGetCharABCWidthsW(NULL, 'a', 'a', abc); - ok(!ret, "GetCharABCWidthsW should have failed\n"); - - ret = pGetCharABCWidthsW(hdc, 'a', 'a', NULL); - ok(!ret, "GetCharABCWidthsW should have failed\n"); - - ret = pGetCharABCWidthsW(hdc, 'a', 'a', abc); - ok(!ret, "GetCharABCWidthsW should have failed\n"); - - hfont = SelectObject(hdc, hfont); - DeleteObject(hfont); - ReleaseDC(NULL, hdc); -} - -static void test_text_extents(void) -{ - static const WCHAR wt[] = {'O','n','e','\n','t','w','o',' ','3',0}; - LPINT extents; - INT i, len, fit1, fit2; - LOGFONTA lf; - TEXTMETRICA tm; - HDC hdc; - HFONT hfont; - SIZE sz; - SIZE sz1, sz2; - - memset(&lf, 0, sizeof(lf)); - strcpy(lf.lfFaceName, "Arial"); - lf.lfHeight = 20; - - hfont = CreateFontIndirectA(&lf); - hdc = GetDC(0); - hfont = SelectObject(hdc, hfont); - GetTextMetricsA(hdc, &tm); - GetTextExtentPointA(hdc, "o", 1, &sz); - ok(sz.cy == tm.tmHeight, "cy %d tmHeight %d\n", sz.cy, tm.tmHeight); - - SetLastError(0xdeadbeef); - GetTextExtentExPointW(hdc, wt, 1, 1, &fit1, &fit2, &sz1); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("Skipping remainder of text extents test on a Win9x platform\n"); - hfont = SelectObject(hdc, hfont); - DeleteObject(hfont); - ReleaseDC(0, hdc); - return; - } - - len = lstrlenW(wt); - extents = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof extents[0]); - extents[0] = 1; /* So that the increasing sequence test will fail - if the extents array is untouched. */ - GetTextExtentExPointW(hdc, wt, len, 32767, &fit1, extents, &sz1); - GetTextExtentPointW(hdc, wt, len, &sz2); - ok(sz1.cy == sz2.cy, - "cy from GetTextExtentExPointW (%d) and GetTextExtentPointW (%d) differ\n", sz1.cy, sz2.cy); - /* Because of the '\n' in the string GetTextExtentExPoint and - GetTextExtentPoint return different widths under Win2k, but - under WinXP they return the same width. So we don't test that - here. */ - - for (i = 1; i < len; ++i) - ok(extents[i-1] <= extents[i], - "GetTextExtentExPointW generated a non-increasing sequence of partial extents (at position %d)\n", - i); - ok(extents[len-1] == sz1.cx, "GetTextExtentExPointW extents and size don't match\n"); - ok(0 <= fit1 && fit1 <= len, "GetTextExtentExPointW generated illegal value %d for fit\n", fit1); - ok(0 < fit1, "GetTextExtentExPointW says we can't even fit one letter in 32767 logical units\n"); - GetTextExtentExPointW(hdc, wt, len, extents[2], &fit2, NULL, &sz2); - ok(sz1.cx == sz2.cx && sz1.cy == sz2.cy, "GetTextExtentExPointW returned different sizes for the same string\n"); - ok(fit2 == 3, "GetTextExtentExPointW extents isn't consistent with fit\n"); - GetTextExtentExPointW(hdc, wt, len, extents[2]-1, &fit2, NULL, &sz2); - ok(fit2 == 2, "GetTextExtentExPointW extents isn't consistent with fit\n"); - GetTextExtentExPointW(hdc, wt, 2, 0, NULL, extents + 2, &sz2); - ok(extents[0] == extents[2] && extents[1] == extents[3], - "GetTextExtentExPointW with lpnFit == NULL returns incorrect results\n"); - GetTextExtentExPointW(hdc, wt, 2, 0, NULL, NULL, &sz1); - ok(sz1.cx == sz2.cx && sz1.cy == sz2.cy, - "GetTextExtentExPointW with lpnFit and alpDx both NULL returns incorrect results\n"); - HeapFree(GetProcessHeap(), 0, extents); - - hfont = SelectObject(hdc, hfont); - DeleteObject(hfont); - ReleaseDC(NULL, hdc); -} - -static void test_GetGlyphIndices(void) -{ - HDC hdc; - HFONT hfont; - DWORD charcount; - LOGFONTA lf; - DWORD flags = 0; - WCHAR testtext[] = {'T','e','s','t',0xffff,0}; - WORD glyphs[(sizeof(testtext)/2)-1]; - TEXTMETRIC textm; - HFONT hOldFont; - - if (!pGetGlyphIndicesW) { - skip("GetGlyphIndicesW not available on platform\n"); - return; - } - - hdc = GetDC(0); - - ok(GetTextMetrics(hdc, &textm), "GetTextMetric failed\n"); - flags |= GGI_MARK_NONEXISTING_GLYPHS; - charcount = pGetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags); - ok(charcount == 5, "GetGlyphIndicesW count of glyphs should = 5 not %d\n", charcount); - ok((glyphs[4] == 0x001f || glyphs[4] == 0xffff /* Vista */), "GetGlyphIndicesW should have returned a nonexistent char not %04x\n", glyphs[4]); - flags = 0; - charcount = pGetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags); - ok(charcount == 5, "GetGlyphIndicesW count of glyphs should = 5 not %d\n", charcount); - ok(glyphs[4] == textm.tmDefaultChar, "GetGlyphIndicesW should have returned a %04x not %04x\n", - textm.tmDefaultChar, glyphs[4]); - - if(!is_font_installed("Tahoma")) - { - skip("Tahoma is not installed so skipping this test\n"); - return; - } - memset(&lf, 0, sizeof(lf)); - strcpy(lf.lfFaceName, "Tahoma"); - lf.lfHeight = 20; - - hfont = CreateFontIndirectA(&lf); - hOldFont = SelectObject(hdc, hfont); - ok(GetTextMetrics(hdc, &textm), "GetTextMetric failed\n"); - flags |= GGI_MARK_NONEXISTING_GLYPHS; - charcount = pGetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags); - ok(charcount == 5, "GetGlyphIndicesW count of glyphs should = 5 not %d\n", charcount); - ok(glyphs[4] == 0xffff, "GetGlyphIndicesW should have returned 0xffff char not %04x\n", glyphs[4]); - flags = 0; - testtext[0] = textm.tmDefaultChar; - charcount = pGetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags); - ok(charcount == 5, "GetGlyphIndicesW count of glyphs should = 5 not %d\n", charcount); - todo_wine ok(glyphs[0] == 0, "GetGlyphIndicesW for tmDefaultChar should be 0 not %04x\n", glyphs[0]); - ok(glyphs[4] == 0, "GetGlyphIndicesW should have returned 0 not %04x\n", glyphs[4]); - DeleteObject(SelectObject(hdc, hOldFont)); -} - -static void test_GetKerningPairs(void) -{ - static const struct kerning_data - { - const char face_name[LF_FACESIZE]; - LONG height; - /* some interesting fields from OUTLINETEXTMETRIC */ - LONG tmHeight, tmAscent, tmDescent; - UINT otmEMSquare; - INT otmAscent; - INT otmDescent; - UINT otmLineGap; - UINT otmsCapEmHeight; - UINT otmsXHeight; - INT otmMacAscent; - INT otmMacDescent; - UINT otmMacLineGap; - UINT otmusMinimumPPEM; - /* small subset of kerning pairs to test */ - DWORD total_kern_pairs; - const KERNINGPAIR kern_pair[26]; - } kd[] = - { - {"Arial", 12, 12, 9, 3, - 2048, 7, -2, 1, 5, 2, 8, -2, 0, 9, - 26, - { - {' ','A',-1},{' ','T',0},{' ','Y',0},{'1','1',-1}, - {'A',' ',-1},{'A','T',-1},{'A','V',-1},{'A','W',0}, - {'A','Y',-1},{'A','v',0},{'A','w',0},{'A','y',0}, - {'F',',',-1},{'F','.',-1},{'F','A',-1},{'L',' ',0}, - {'L','T',-1},{'L','V',-1},{'L','W',-1},{'L','Y',-1}, - {915,912,+1},{915,913,-1},{910,912,+1},{910,913,-1}, - {933,970,+1},{933,972,-1} - } - }, - {"Arial", -34, 39, 32, 7, - 2048, 25, -7, 5, 17, 9, 31, -7, 1, 9, - 26, - { - {' ','A',-2},{' ','T',-1},{' ','Y',-1},{'1','1',-3}, - {'A',' ',-2},{'A','T',-3},{'A','V',-3},{'A','W',-1}, - {'A','Y',-3},{'A','v',-1},{'A','w',-1},{'A','y',-1}, - {'F',',',-4},{'F','.',-4},{'F','A',-2},{'L',' ',-1}, - {'L','T',-3},{'L','V',-3},{'L','W',-3},{'L','Y',-3}, - {915,912,+3},{915,913,-3},{910,912,+3},{910,913,-3}, - {933,970,+2},{933,972,-3} - } - }, - { "Arial", 120, 120, 97, 23, - 2048, 79, -23, 16, 54, 27, 98, -23, 4, 9, - 26, - { - {' ','A',-6},{' ','T',-2},{' ','Y',-2},{'1','1',-8}, - {'A',' ',-6},{'A','T',-8},{'A','V',-8},{'A','W',-4}, - {'A','Y',-8},{'A','v',-2},{'A','w',-2},{'A','y',-2}, - {'F',',',-12},{'F','.',-12},{'F','A',-6},{'L',' ',-4}, - {'L','T',-8},{'L','V',-8},{'L','W',-8},{'L','Y',-8}, - {915,912,+9},{915,913,-10},{910,912,+9},{910,913,-8}, - {933,970,+6},{933,972,-10} - } - }, -#if 0 /* this set fails due to +1/-1 errors (rounding bug?), needs investigation. */ - { "Arial", 1024 /* usually 1/2 of EM Square */, 1024, 830, 194, - 2048, 668, -193, 137, 459, 229, 830, -194, 30, 9, - 26, - { - {' ','A',-51},{' ','T',-17},{' ','Y',-17},{'1','1',-68}, - {'A',' ',-51},{'A','T',-68},{'A','V',-68},{'A','W',-34}, - {'A','Y',-68},{'A','v',-17},{'A','w',-17},{'A','y',-17}, - {'F',',',-102},{'F','.',-102},{'F','A',-51},{'L',' ',-34}, - {'L','T',-68},{'L','V',-68},{'L','W',-68},{'L','Y',-68}, - {915,912,+73},{915,913,-84},{910,912,+76},{910,913,-68}, - {933,970,+54},{933,972,-83} - } - } -#endif - }; - LOGFONT lf; - HFONT hfont, hfont_old; - KERNINGPAIR *kern_pair; - HDC hdc; - DWORD total_kern_pairs, ret, i, n, matches; - - hdc = GetDC(0); - - /* GetKerningPairsA maps unicode set of kerning pairs to current code page - * which may render this test unusable, so we're trying to avoid that. - */ - SetLastError(0xdeadbeef); - GetKerningPairsW(hdc, 0, NULL); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("Skipping the GetKerningPairs test on a Win9x platform\n"); - ReleaseDC(0, hdc); - return; - } - - for (i = 0; i < sizeof(kd)/sizeof(kd[0]); i++) - { - OUTLINETEXTMETRICW otm; - - if (!is_font_installed(kd[i].face_name)) - { - trace("%s is not installed so skipping this test\n", kd[i].face_name); - continue; - } - - trace("testing font %s, height %d\n", kd[i].face_name, kd[i].height); - - memset(&lf, 0, sizeof(lf)); - strcpy(lf.lfFaceName, kd[i].face_name); - lf.lfHeight = kd[i].height; - hfont = CreateFontIndirect(&lf); - assert(hfont != 0); - - hfont_old = SelectObject(hdc, hfont); - - SetLastError(0xdeadbeef); - otm.otmSize = sizeof(otm); /* just in case for Win9x compatibility */ - ok(GetOutlineTextMetricsW(hdc, sizeof(otm), &otm) == sizeof(otm), "GetOutlineTextMetricsW error %d\n", GetLastError()); - - ok(kd[i].tmHeight == otm.otmTextMetrics.tmHeight, "expected %d, got %d\n", - kd[i].tmHeight, otm.otmTextMetrics.tmHeight); - ok(kd[i].tmAscent == otm.otmTextMetrics.tmAscent, "expected %d, got %d\n", - kd[i].tmAscent, otm.otmTextMetrics.tmAscent); - ok(kd[i].tmDescent == otm.otmTextMetrics.tmDescent, "expected %d, got %d\n", - kd[i].tmDescent, otm.otmTextMetrics.tmDescent); - - ok(kd[i].otmEMSquare == otm.otmEMSquare, "expected %u, got %u\n", - kd[i].otmEMSquare, otm.otmEMSquare); - ok(kd[i].otmAscent == otm.otmAscent, "expected %d, got %d\n", - kd[i].otmAscent, otm.otmAscent); - ok(kd[i].otmDescent == otm.otmDescent, "expected %d, got %d\n", - kd[i].otmDescent, otm.otmDescent); - ok(kd[i].otmLineGap == otm.otmLineGap, "expected %u, got %u\n", - kd[i].otmLineGap, otm.otmLineGap); -todo_wine { - ok(kd[i].otmsCapEmHeight == otm.otmsCapEmHeight, "expected %u, got %u\n", - kd[i].otmsCapEmHeight, otm.otmsCapEmHeight); - ok(kd[i].otmsXHeight == otm.otmsXHeight, "expected %u, got %u\n", - kd[i].otmsXHeight, otm.otmsXHeight); - ok(kd[i].otmMacAscent == otm.otmMacAscent, "expected %d, got %d\n", - kd[i].otmMacAscent, otm.otmMacAscent); - ok(kd[i].otmMacDescent == otm.otmMacDescent, "expected %d, got %d\n", - kd[i].otmMacDescent, otm.otmMacDescent); - /* FIXME: this one sometimes succeeds due to expected 0, enable it when removing todo */ - if (0) ok(kd[i].otmMacLineGap == otm.otmMacLineGap, "expected %u, got %u\n", - kd[i].otmMacLineGap, otm.otmMacLineGap); - ok(kd[i].otmusMinimumPPEM == otm.otmusMinimumPPEM, "expected %u, got %u\n", - kd[i].otmusMinimumPPEM, otm.otmusMinimumPPEM); -} - - total_kern_pairs = GetKerningPairsW(hdc, 0, NULL); - trace("total_kern_pairs %u\n", total_kern_pairs); - kern_pair = HeapAlloc(GetProcessHeap(), 0, total_kern_pairs * sizeof(*kern_pair)); - -#if 0 /* Win98 (GetKerningPairsA) and XP behave differently here, the test passes on XP */ - SetLastError(0xdeadbeef); - ret = GetKerningPairsW(hdc, 0, kern_pair); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "got error %ld, expected ERROR_INVALID_PARAMETER\n", GetLastError()); - ok(ret == 0, "got %lu, expected 0\n", ret); -#endif - - ret = GetKerningPairsW(hdc, 100, NULL); - ok(ret == total_kern_pairs, "got %u, expected %u\n", ret, total_kern_pairs); - - ret = GetKerningPairsW(hdc, total_kern_pairs/2, kern_pair); - ok(ret == total_kern_pairs/2, "got %u, expected %u\n", ret, total_kern_pairs/2); - - ret = GetKerningPairsW(hdc, total_kern_pairs, kern_pair); - ok(ret == total_kern_pairs, "got %u, expected %u\n", ret, total_kern_pairs); - - matches = 0; - - for (n = 0; n < ret; n++) - { - DWORD j; -#if 0 - if (kern_pair[n].wFirst < 127 && kern_pair[n].wSecond < 127) - trace("{'%c','%c',%d},\n", - kern_pair[n].wFirst, kern_pair[n].wSecond, kern_pair[n].iKernAmount); -#endif - for (j = 0; j < kd[i].total_kern_pairs; j++) - { - if (kern_pair[n].wFirst == kd[i].kern_pair[j].wFirst && - kern_pair[n].wSecond == kd[i].kern_pair[j].wSecond) - { - ok(kern_pair[n].iKernAmount == kd[i].kern_pair[j].iKernAmount, - "pair %d:%d got %d, expected %d\n", - kern_pair[n].wFirst, kern_pair[n].wSecond, - kern_pair[n].iKernAmount, kd[i].kern_pair[j].iKernAmount); - matches++; - } - } - } - - ok(matches == kd[i].total_kern_pairs, "got matches %u, expected %u\n", - matches, kd[i].total_kern_pairs); - - HeapFree(GetProcessHeap(), 0, kern_pair); - - SelectObject(hdc, hfont_old); - DeleteObject(hfont); - } - - ReleaseDC(0, hdc); -} - -static void test_GetOutlineTextMetrics(void) -{ - OUTLINETEXTMETRIC *otm; - LOGFONT lf; - HFONT hfont, hfont_old; - HDC hdc; - DWORD ret, otm_size; - - if (!is_font_installed("Arial")) - { - skip("Arial is not installed\n"); - return; - } - - hdc = GetDC(0); - - memset(&lf, 0, sizeof(lf)); - strcpy(lf.lfFaceName, "Arial"); - lf.lfHeight = -13; - lf.lfWeight = FW_NORMAL; - lf.lfPitchAndFamily = DEFAULT_PITCH; - lf.lfQuality = PROOF_QUALITY; - hfont = CreateFontIndirect(&lf); - assert(hfont != 0); - - hfont_old = SelectObject(hdc, hfont); - otm_size = GetOutlineTextMetrics(hdc, 0, NULL); - trace("otm buffer size %u (0x%x)\n", otm_size, otm_size); - - otm = HeapAlloc(GetProcessHeap(), 0, otm_size); - - memset(otm, 0xAA, otm_size); - SetLastError(0xdeadbeef); - otm->otmSize = sizeof(*otm); /* just in case for Win9x compatibility */ - ret = GetOutlineTextMetrics(hdc, otm->otmSize, otm); - ok(ret == 1 /* Win9x */ || - ret == otm->otmSize /* XP*/, - "expected %u, got %u, error %d\n", otm->otmSize, ret, GetLastError()); - if (ret != 1) /* Win9x doesn't care about pointing beyond of the buffer */ - { - ok(otm->otmpFamilyName == NULL, "expected NULL got %p\n", otm->otmpFamilyName); - ok(otm->otmpFaceName == NULL, "expected NULL got %p\n", otm->otmpFaceName); - ok(otm->otmpStyleName == NULL, "expected NULL got %p\n", otm->otmpStyleName); - ok(otm->otmpFullName == NULL, "expected NULL got %p\n", otm->otmpFullName); - } - - memset(otm, 0xAA, otm_size); - SetLastError(0xdeadbeef); - otm->otmSize = otm_size; /* just in case for Win9x compatibility */ - ret = GetOutlineTextMetrics(hdc, otm->otmSize, otm); - ok(ret == 1 /* Win9x */ || - ret == otm->otmSize /* XP*/, - "expected %u, got %u, error %d\n", otm->otmSize, ret, GetLastError()); - if (ret != 1) /* Win9x doesn't care about pointing beyond of the buffer */ - { - ok(otm->otmpFamilyName != NULL, "expected not NULL got %p\n", otm->otmpFamilyName); - ok(otm->otmpFaceName != NULL, "expected not NULL got %p\n", otm->otmpFaceName); - ok(otm->otmpStyleName != NULL, "expected not NULL got %p\n", otm->otmpStyleName); - ok(otm->otmpFullName != NULL, "expected not NULL got %p\n", otm->otmpFullName); - } - - /* ask about truncated data */ - memset(otm, 0xAA, otm_size); - SetLastError(0xdeadbeef); - otm->otmSize = sizeof(*otm) - sizeof(LPSTR); /* just in case for Win9x compatibility */ - ret = GetOutlineTextMetrics(hdc, otm->otmSize, otm); - ok(ret == 1 /* Win9x */ || - ret == otm->otmSize /* XP*/, - "expected %u, got %u, error %d\n", otm->otmSize, ret, GetLastError()); - if (ret != 1) /* Win9x doesn't care about pointing beyond of the buffer */ - { - ok(otm->otmpFamilyName == NULL, "expected NULL got %p\n", otm->otmpFamilyName); - ok(otm->otmpFaceName == NULL, "expected NULL got %p\n", otm->otmpFaceName); - ok(otm->otmpStyleName == NULL, "expected NULL got %p\n", otm->otmpStyleName); - } - ok(otm->otmpFullName == (LPSTR)0xAAAAAAAA, "expected 0xAAAAAAAA got %p\n", otm->otmpFullName); - - HeapFree(GetProcessHeap(), 0, otm); - - SelectObject(hdc, hfont_old); - DeleteObject(hfont); - - ReleaseDC(0, hdc); -} - -static void testJustification(HDC hdc, PSTR str, RECT *clientArea) -{ - INT x, y, - breakCount, - outputWidth = 0, /* to test TabbedTextOut() */ - justifiedWidth = 0, /* to test GetTextExtentExPointW() */ - areaWidth = clientArea->right - clientArea->left, - nErrors = 0, e; - BOOL lastExtent = FALSE; - PSTR pFirstChar, pLastChar; - SIZE size; - TEXTMETRICA tm; - struct err - { - char extent[100]; - int GetTextExtentExPointWWidth; - int TabbedTextOutWidth; - } error[10]; - - GetTextMetricsA(hdc, &tm); - y = clientArea->top; - do { - breakCount = 0; - while (*str == tm.tmBreakChar) str++; /* skip leading break chars */ - pFirstChar = str; - - do { - pLastChar = str; - - /* if not at the end of the string, ... */ - if (*str == '\0') break; - /* ... add the next word to the current extent */ - while (*str != '\0' && *str++ != tm.tmBreakChar); - breakCount++; - SetTextJustification(hdc, 0, 0); - GetTextExtentPoint32(hdc, pFirstChar, str - pFirstChar - 1, &size); - } while ((int) size.cx < areaWidth); - - /* ignore trailing break chars */ - breakCount--; - while (*(pLastChar - 1) == tm.tmBreakChar) - { - pLastChar--; - breakCount--; - } - - if (*str == '\0' || breakCount <= 0) pLastChar = str; - - SetTextJustification(hdc, 0, 0); - GetTextExtentPoint32(hdc, pFirstChar, pLastChar - pFirstChar, &size); - - /* do not justify the last extent */ - if (*str != '\0' && breakCount > 0) - { - SetTextJustification(hdc, areaWidth - size.cx, breakCount); - GetTextExtentPoint32(hdc, pFirstChar, pLastChar - pFirstChar, &size); - justifiedWidth = size.cx; - } - else lastExtent = TRUE; - - x = clientArea->left; - - outputWidth = LOWORD(TabbedTextOut( - hdc, x, y, pFirstChar, pLastChar - pFirstChar, - 0, NULL, 0)); - /* catch errors and report them */ - if (!lastExtent && ((outputWidth != areaWidth) || (justifiedWidth != areaWidth))) - { - memset(error[nErrors].extent, 0, 100); - memcpy(error[nErrors].extent, pFirstChar, pLastChar - pFirstChar); - error[nErrors].TabbedTextOutWidth = outputWidth; - error[nErrors].GetTextExtentExPointWWidth = justifiedWidth; - nErrors++; - } - - y += size.cy; - str = pLastChar; - } while (*str && y < clientArea->bottom); - - for (e = 0; e < nErrors; e++) - { - ok(error[e].TabbedTextOutWidth == areaWidth, - "The output text (\"%s\") width should be %d, not %d.\n", - error[e].extent, areaWidth, error[e].TabbedTextOutWidth); - /* The width returned by GetTextExtentPoint32() is exactly the same - returned by GetTextExtentExPointW() - see dlls/gdi32/font.c */ - ok(error[e].GetTextExtentExPointWWidth == areaWidth, - "GetTextExtentPointW() for \"%s\" should have returned a width of %d, not %d.\n", - error[e].extent, areaWidth, error[e].GetTextExtentExPointWWidth); - } -} - -static void test_SetTextJustification(void) -{ - HDC hdc; - RECT clientArea; - LOGFONTA lf; - HFONT hfont; - HWND hwnd; - static char testText[] = - "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do " - "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut " - "enim ad minim veniam, quis nostrud exercitation ullamco laboris " - "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in " - "reprehenderit in voluptate velit esse cillum dolore eu fugiat " - "nulla pariatur. Excepteur sint occaecat cupidatat non proident, " - "sunt in culpa qui officia deserunt mollit anim id est laborum."; - - hwnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0, 400,400, 0, 0, 0, NULL); - GetClientRect( hwnd, &clientArea ); - hdc = GetDC( hwnd ); - - memset(&lf, 0, sizeof lf); - lf.lfCharSet = ANSI_CHARSET; - lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; - lf.lfWeight = FW_DONTCARE; - lf.lfHeight = 20; - lf.lfQuality = DEFAULT_QUALITY; - lstrcpyA(lf.lfFaceName, "Times New Roman"); - hfont = create_font("Times New Roman", &lf); - SelectObject(hdc, hfont); - - testJustification(hdc, testText, &clientArea); - - DeleteObject(hfont); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); -} - -static BOOL get_glyph_indices(INT charset, UINT code_page, WORD *idx, UINT count, BOOL unicode) -{ - HDC hdc; - LOGFONTA lf; - HFONT hfont, hfont_old; - CHARSETINFO csi; - FONTSIGNATURE fs; - INT cs; - DWORD i, ret; - char name[64]; - - assert(count <= 128); - - memset(&lf, 0, sizeof(lf)); - - lf.lfCharSet = charset; - lf.lfHeight = 10; - lstrcpyA(lf.lfFaceName, "Arial"); - SetLastError(0xdeadbeef); - hfont = CreateFontIndirectA(&lf); - ok(hfont != 0, "CreateFontIndirectA error %u\n", GetLastError()); - - hdc = GetDC(0); - hfont_old = SelectObject(hdc, hfont); - - cs = GetTextCharsetInfo(hdc, &fs, 0); - ok(cs == charset, "expected %d, got %d\n", charset, cs); - - SetLastError(0xdeadbeef); - ret = GetTextFace(hdc, sizeof(name), name); - ok(ret, "GetTextFace error %u\n", GetLastError()); - - if (charset == SYMBOL_CHARSET) - { - ok(strcmp("Arial", name), "face name should NOT be Arial\n"); - ok(fs.fsCsb[0] & (1 << 31), "symbol encoding should be available\n"); - } - else - { - ok(!strcmp("Arial", name), "face name should be Arial, not %s\n", name); - ok(!(fs.fsCsb[0] & (1 << 31)), "symbol encoding should NOT be available\n"); - } - - if (!TranslateCharsetInfo((DWORD *)cs, &csi, TCI_SRCCHARSET)) - { - trace("Can't find codepage for charset %d\n", cs); - ReleaseDC(0, hdc); - return FALSE; - } - ok(csi.ciACP == code_page, "expected %d, got %d\n", code_page, csi.ciACP); - - if (unicode) - { - char ansi_buf[128]; - WCHAR unicode_buf[128]; - - for (i = 0; i < count; i++) ansi_buf[i] = (BYTE)(i + 128); - - MultiByteToWideChar(code_page, 0, ansi_buf, count, unicode_buf, count); - - SetLastError(0xdeadbeef); - ret = pGetGlyphIndicesW(hdc, unicode_buf, count, idx, 0); - ok(ret == count, "GetGlyphIndicesW error %u\n", GetLastError()); - } - else - { - char ansi_buf[128]; - - for (i = 0; i < count; i++) ansi_buf[i] = (BYTE)(i + 128); - - SetLastError(0xdeadbeef); - ret = pGetGlyphIndicesA(hdc, ansi_buf, count, idx, 0); - ok(ret == count, "GetGlyphIndicesA error %u\n", GetLastError()); - } - - SelectObject(hdc, hfont_old); - DeleteObject(hfont); - - ReleaseDC(0, hdc); - - return TRUE; -} - -static void test_font_charset(void) -{ - static struct charset_data - { - INT charset; - UINT code_page; - WORD font_idxA[128], font_idxW[128]; - } cd[] = - { - { ANSI_CHARSET, 1252 }, - { RUSSIAN_CHARSET, 1251 }, - { SYMBOL_CHARSET, CP_SYMBOL } /* keep it as the last one */ - }; - int i; - - if (!pGetGlyphIndicesA || !pGetGlyphIndicesW) - { - skip("Skipping the font charset test on a Win9x platform\n"); - return; - } - - if (!is_font_installed("Arial")) - { - skip("Arial is not installed\n"); - return; - } - - for (i = 0; i < sizeof(cd)/sizeof(cd[0]); i++) - { - if (cd[i].charset == SYMBOL_CHARSET) - { - if (!is_font_installed("Symbol") && !is_font_installed("Wingdings")) - { - skip("Symbol or Wingdings is not installed\n"); - break; - } - } - get_glyph_indices(cd[i].charset, cd[i].code_page, cd[i].font_idxA, 128, FALSE); - get_glyph_indices(cd[i].charset, cd[i].code_page, cd[i].font_idxW, 128, TRUE); - ok(!memcmp(cd[i].font_idxA, cd[i].font_idxW, 128*sizeof(WORD)), "%d: indices don't match\n", i); - } - - ok(memcmp(cd[0].font_idxW, cd[1].font_idxW, 128*sizeof(WORD)), "0 vs 1: indices shouldn't match\n"); - if (i > 2) - { - ok(memcmp(cd[0].font_idxW, cd[2].font_idxW, 128*sizeof(WORD)), "0 vs 2: indices shouldn't match\n"); - ok(memcmp(cd[1].font_idxW, cd[2].font_idxW, 128*sizeof(WORD)), "1 vs 2: indices shouldn't match\n"); - } - else - skip("Symbol or Wingdings is not installed\n"); -} - -static void test_GetFontUnicodeRanges(void) -{ - LOGFONTA lf; - HDC hdc; - HFONT hfont, hfont_old; - DWORD size; - GLYPHSET *gs; - - if (!pGetFontUnicodeRanges) - { - skip("GetFontUnicodeRanges not available before W2K\n"); - return; - } - - memset(&lf, 0, sizeof(lf)); - lstrcpyA(lf.lfFaceName, "Arial"); - hfont = create_font("Arial", &lf); - - hdc = GetDC(0); - hfont_old = SelectObject(hdc, hfont); - - size = pGetFontUnicodeRanges(NULL, NULL); - ok(!size, "GetFontUnicodeRanges succeeded unexpectedly\n"); - - size = pGetFontUnicodeRanges(hdc, NULL); - ok(size, "GetFontUnicodeRanges failed unexpectedly\n"); - - gs = HeapAlloc(GetProcessHeap(), 0, size); - - size = pGetFontUnicodeRanges(hdc, gs); - ok(size, "GetFontUnicodeRanges failed\n"); -#if 0 - for (i = 0; i < gs->cRanges; i++) - trace("%03d wcLow %04x cGlyphs %u\n", i, gs->ranges[i].wcLow, gs->ranges[i].cGlyphs); -#endif - trace("found %u ranges\n", gs->cRanges); - - HeapFree(GetProcessHeap(), 0, gs); - - SelectObject(hdc, hfont_old); - DeleteObject(hfont); - ReleaseDC(NULL, hdc); -} - -#define MAX_ENUM_FONTS 256 - -struct enum_font_data -{ - int total; - LOGFONT lf[MAX_ENUM_FONTS]; -}; - -static INT CALLBACK arial_enum_proc(const LOGFONT *lf, const TEXTMETRIC *tm, DWORD type, LPARAM lParam) -{ - struct enum_font_data *efd = (struct enum_font_data *)lParam; - - if (type != TRUETYPE_FONTTYPE) return 1; -#if 0 - trace("enumed font \"%s\", charset %d, weight %d, italic %d\n", - lf->lfFaceName, lf->lfCharSet, lf->lfWeight, lf->lfItalic); -#endif - if (efd->total < MAX_ENUM_FONTS) - efd->lf[efd->total++] = *lf; - - return 1; -} - -static void get_charset_stats(struct enum_font_data *efd, - int *ansi_charset, int *symbol_charset, - int *russian_charset) -{ - int i; - - *ansi_charset = 0; - *symbol_charset = 0; - *russian_charset = 0; - - for (i = 0; i < efd->total; i++) - { - switch (efd->lf[i].lfCharSet) - { - case ANSI_CHARSET: - (*ansi_charset)++; - break; - case SYMBOL_CHARSET: - (*symbol_charset)++; - break; - case RUSSIAN_CHARSET: - (*russian_charset)++; - break; - } - } -} - -static void test_EnumFontFamilies(const char *font_name, INT font_charset) -{ - struct enum_font_data efd; - LOGFONT lf; - HDC hdc; - int i, ret, ansi_charset, symbol_charset, russian_charset; - - trace("Testing font %s, charset %d\n", *font_name ? font_name : "", font_charset); - - if (*font_name && !is_truetype_font_installed(font_name)) - { - skip("%s is not installed\n", font_name); - return; - } - - hdc = GetDC(0); - - /* Observed behaviour: EnumFontFamilies enumerates aliases like "Arial Cyr" - * while EnumFontFamiliesEx doesn't. - */ - if (!*font_name && font_charset == DEFAULT_CHARSET) /* do it only once */ - { - efd.total = 0; - SetLastError(0xdeadbeef); - ret = EnumFontFamilies(hdc, NULL, arial_enum_proc, (LPARAM)&efd); - ok(ret, "EnumFontFamilies error %u\n", GetLastError()); - get_charset_stats(&efd, &ansi_charset, &symbol_charset, &russian_charset); - trace("enumerated ansi %d, symbol %d, russian %d fonts for NULL\n", - ansi_charset, symbol_charset, russian_charset); - ok(efd.total > 0, "no fonts enumerated: NULL\n"); - ok(ansi_charset > 0, "NULL family should enumerate ANSI_CHARSET\n"); - ok(symbol_charset > 0, "NULL family should enumerate SYMBOL_CHARSET\n"); - ok(russian_charset > 0, "NULL family should enumerate RUSSIAN_CHARSET\n"); - - efd.total = 0; - SetLastError(0xdeadbeef); - ret = EnumFontFamiliesEx(hdc, NULL, arial_enum_proc, (LPARAM)&efd, 0); - ok(ret, "EnumFontFamiliesEx error %u\n", GetLastError()); - get_charset_stats(&efd, &ansi_charset, &symbol_charset, &russian_charset); - trace("enumerated ansi %d, symbol %d, russian %d fonts for NULL\n", - ansi_charset, symbol_charset, russian_charset); - ok(efd.total > 0, "no fonts enumerated: NULL\n"); - ok(ansi_charset > 0, "NULL family should enumerate ANSI_CHARSET\n"); - ok(symbol_charset > 0, "NULL family should enumerate SYMBOL_CHARSET\n"); - ok(russian_charset > 0, "NULL family should enumerate RUSSIAN_CHARSET\n"); - } - - efd.total = 0; - SetLastError(0xdeadbeef); - ret = EnumFontFamilies(hdc, font_name, arial_enum_proc, (LPARAM)&efd); - ok(ret, "EnumFontFamilies error %u\n", GetLastError()); - get_charset_stats(&efd, &ansi_charset, &symbol_charset, &russian_charset); - trace("enumerated ansi %d, symbol %d, russian %d fonts for %s\n", - ansi_charset, symbol_charset, russian_charset, - *font_name ? font_name : ""); - if (*font_name) - ok(efd.total > 0, "no fonts enumerated: %s\n", font_name); - else - ok(!efd.total, "no fonts should be enumerated for empty font_name\n"); - for (i = 0; i < efd.total; i++) - { -/* FIXME: remove completely once Wine is fixed */ -if (efd.lf[i].lfCharSet != font_charset) -{ -todo_wine - ok(efd.lf[i].lfCharSet == font_charset, "%d: got charset %d\n", i, efd.lf[i].lfCharSet); -} -else - ok(efd.lf[i].lfCharSet == font_charset, "%d: got charset %d\n", i, efd.lf[i].lfCharSet); - ok(!lstrcmp(efd.lf[i].lfFaceName, font_name), "expected %s, got %s\n", - font_name, efd.lf[i].lfFaceName); - } - - memset(&lf, 0, sizeof(lf)); - lf.lfCharSet = ANSI_CHARSET; - lstrcpy(lf.lfFaceName, font_name); - efd.total = 0; - SetLastError(0xdeadbeef); - ret = EnumFontFamiliesEx(hdc, &lf, arial_enum_proc, (LPARAM)&efd, 0); - ok(ret, "EnumFontFamiliesEx error %u\n", GetLastError()); - get_charset_stats(&efd, &ansi_charset, &symbol_charset, &russian_charset); - trace("enumerated ansi %d, symbol %d, russian %d fonts for %s ANSI_CHARSET\n", - ansi_charset, symbol_charset, russian_charset, - *font_name ? font_name : ""); - if (font_charset == SYMBOL_CHARSET) - { - if (*font_name) - ok(efd.total == 0, "no fonts should be enumerated: %s ANSI_CHARSET\n", font_name); - else - ok(efd.total > 0, "no fonts enumerated: %s\n", font_name); - } - else - { - ok(efd.total > 0, "no fonts enumerated: %s ANSI_CHARSET\n", font_name); - for (i = 0; i < efd.total; i++) - { - ok(efd.lf[i].lfCharSet == ANSI_CHARSET, "%d: got charset %d\n", i, efd.lf[i].lfCharSet); - if (*font_name) - ok(!lstrcmp(efd.lf[i].lfFaceName, font_name), "expected %s, got %s\n", - font_name, efd.lf[i].lfFaceName); - } - } - - /* DEFAULT_CHARSET should enumerate all available charsets */ - memset(&lf, 0, sizeof(lf)); - lf.lfCharSet = DEFAULT_CHARSET; - lstrcpy(lf.lfFaceName, font_name); - efd.total = 0; - SetLastError(0xdeadbeef); - EnumFontFamiliesEx(hdc, &lf, arial_enum_proc, (LPARAM)&efd, 0); - ok(ret, "EnumFontFamiliesEx error %u\n", GetLastError()); - get_charset_stats(&efd, &ansi_charset, &symbol_charset, &russian_charset); - trace("enumerated ansi %d, symbol %d, russian %d fonts for %s DEFAULT_CHARSET\n", - ansi_charset, symbol_charset, russian_charset, - *font_name ? font_name : ""); - ok(efd.total > 0, "no fonts enumerated: %s DEFAULT_CHARSET\n", font_name); - for (i = 0; i < efd.total; i++) - { - if (*font_name) - ok(!lstrcmp(efd.lf[i].lfFaceName, font_name), "expected %s, got %s\n", - font_name, efd.lf[i].lfFaceName); - } - if (*font_name) - { - switch (font_charset) - { - case ANSI_CHARSET: - ok(ansi_charset > 0, - "ANSI_CHARSET should enumerate ANSI_CHARSET for %s\n", font_name); - ok(!symbol_charset, - "ANSI_CHARSET should NOT enumerate SYMBOL_CHARSET for %s\n", font_name); - ok(russian_charset > 0, - "ANSI_CHARSET should enumerate RUSSIAN_CHARSET for %s\n", font_name); - break; - case SYMBOL_CHARSET: - ok(!ansi_charset, - "SYMBOL_CHARSET should NOT enumerate ANSI_CHARSET for %s\n", font_name); - ok(symbol_charset, - "SYMBOL_CHARSET should enumerate SYMBOL_CHARSET for %s\n", font_name); - ok(!russian_charset, - "SYMBOL_CHARSET should NOT enumerate RUSSIAN_CHARSET for %s\n", font_name); - break; - case DEFAULT_CHARSET: - ok(ansi_charset > 0, - "DEFAULT_CHARSET should enumerate ANSI_CHARSET for %s\n", font_name); - ok(symbol_charset > 0, - "DEFAULT_CHARSET should enumerate SYMBOL_CHARSET for %s\n", font_name); - ok(russian_charset > 0, - "DEFAULT_CHARSET should enumerate RUSSIAN_CHARSET for %s\n", font_name); - break; - } - } - else - { - ok(ansi_charset > 0, - "DEFAULT_CHARSET should enumerate ANSI_CHARSET for %s\n", *font_name ? font_name : ""); - ok(symbol_charset > 0, - "DEFAULT_CHARSET should enumerate SYMBOL_CHARSET for %s\n", *font_name ? font_name : ""); - ok(russian_charset > 0, - "DEFAULT_CHARSET should enumerate RUSSIAN_CHARSET for %s\n", *font_name ? font_name : ""); - } - - memset(&lf, 0, sizeof(lf)); - lf.lfCharSet = SYMBOL_CHARSET; - lstrcpy(lf.lfFaceName, font_name); - efd.total = 0; - SetLastError(0xdeadbeef); - EnumFontFamiliesEx(hdc, &lf, arial_enum_proc, (LPARAM)&efd, 0); - ok(ret, "EnumFontFamiliesEx error %u\n", GetLastError()); - get_charset_stats(&efd, &ansi_charset, &symbol_charset, &russian_charset); - trace("enumerated ansi %d, symbol %d, russian %d fonts for %s SYMBOL_CHARSET\n", - ansi_charset, symbol_charset, russian_charset, - *font_name ? font_name : ""); - if (*font_name && font_charset == ANSI_CHARSET) - ok(efd.total == 0, "no fonts should be enumerated: %s SYMBOL_CHARSET\n", font_name); - else - { - ok(efd.total > 0, "no fonts enumerated: %s SYMBOL_CHARSET\n", font_name); - for (i = 0; i < efd.total; i++) - { - ok(efd.lf[i].lfCharSet == SYMBOL_CHARSET, "%d: got charset %d\n", i, efd.lf[i].lfCharSet); - if (*font_name) - ok(!lstrcmp(efd.lf[i].lfFaceName, font_name), "expected %s, got %s\n", - font_name, efd.lf[i].lfFaceName); - } - - ok(!ansi_charset, - "SYMBOL_CHARSET should NOT enumerate ANSI_CHARSET for %s\n", *font_name ? font_name : ""); - ok(symbol_charset > 0, - "SYMBOL_CHARSET should enumerate SYMBOL_CHARSET for %s\n", *font_name ? font_name : ""); - ok(!russian_charset, - "SYMBOL_CHARSET should NOT enumerate RUSSIAN_CHARSET for %s\n", *font_name ? font_name : ""); - } - - ReleaseDC(0, hdc); -} - -static void test_negative_width(HDC hdc, const LOGFONTA *lf) -{ - HFONT hfont, hfont_prev; - DWORD ret; - GLYPHMETRICS gm1, gm2; - LOGFONTA lf2 = *lf; - WORD idx; - MAT2 mat = { {0,1}, {0,0}, {0,0}, {0,1} }; - - /* negative widths are handled just as positive ones */ - lf2.lfWidth = -lf->lfWidth; - - SetLastError(0xdeadbeef); - hfont = CreateFontIndirectA(lf); - ok(hfont != 0, "CreateFontIndirect error %u\n", GetLastError()); - check_font("original", lf, hfont); - - hfont_prev = SelectObject(hdc, hfont); - - ret = pGetGlyphIndicesA(hdc, "x", 1, &idx, GGI_MARK_NONEXISTING_GLYPHS); - if (ret == GDI_ERROR || idx == 0xffff) - { - SelectObject(hdc, hfont_prev); - DeleteObject(hfont); - skip("Font %s doesn't contain 'x', skipping the test\n", lf->lfFaceName); - return; - } - - /* filling with 0xaa causes false pass under WINEDEBUG=warn+heap */ - memset(&gm1, 0xab, sizeof(gm1)); - SetLastError(0xdeadbeef); - ret = GetGlyphOutlineA(hdc, 'x', GGO_METRICS, &gm1, 0, NULL, &mat); - ok(ret != GDI_ERROR, "GetGlyphOutline error 0x%x\n", GetLastError()); - - SelectObject(hdc, hfont_prev); - DeleteObject(hfont); - - SetLastError(0xdeadbeef); - hfont = CreateFontIndirectA(&lf2); - ok(hfont != 0, "CreateFontIndirect error %u\n", GetLastError()); - check_font("negative width", &lf2, hfont); - - hfont_prev = SelectObject(hdc, hfont); - - memset(&gm2, 0xbb, sizeof(gm2)); - SetLastError(0xdeadbeef); - ret = GetGlyphOutlineA(hdc, 'x', GGO_METRICS, &gm2, 0, NULL, &mat); - ok(ret != GDI_ERROR, "GetGlyphOutline error 0x%x\n", GetLastError()); - - SelectObject(hdc, hfont_prev); - DeleteObject(hfont); - - ok(gm1.gmBlackBoxX == gm2.gmBlackBoxX && - gm1.gmBlackBoxY == gm2.gmBlackBoxY && - gm1.gmptGlyphOrigin.x == gm2.gmptGlyphOrigin.x && - gm1.gmptGlyphOrigin.y == gm2.gmptGlyphOrigin.y && - gm1.gmCellIncX == gm2.gmCellIncX && - gm1.gmCellIncY == gm2.gmCellIncY, - "gm1=%d,%d,%d,%d,%d,%d gm2=%d,%d,%d,%d,%d,%d\n", - gm1.gmBlackBoxX, gm1.gmBlackBoxY, gm1.gmptGlyphOrigin.x, - gm1.gmptGlyphOrigin.y, gm1.gmCellIncX, gm1.gmCellIncY, - gm2.gmBlackBoxX, gm2.gmBlackBoxY, gm2.gmptGlyphOrigin.x, - gm2.gmptGlyphOrigin.y, gm2.gmCellIncX, gm2.gmCellIncY); -} - -/* PANOSE is 10 bytes in size, need to pack the structure properly */ -#include "pshpack2.h" -typedef struct -{ - USHORT version; - SHORT xAvgCharWidth; - USHORT usWeightClass; - USHORT usWidthClass; - SHORT fsType; - SHORT ySubscriptXSize; - SHORT ySubscriptYSize; - SHORT ySubscriptXOffset; - SHORT ySubscriptYOffset; - SHORT ySuperscriptXSize; - SHORT ySuperscriptYSize; - SHORT ySuperscriptXOffset; - SHORT ySuperscriptYOffset; - SHORT yStrikeoutSize; - SHORT yStrikeoutPosition; - SHORT sFamilyClass; - PANOSE panose; - ULONG ulUnicodeRange1; - ULONG ulUnicodeRange2; - ULONG ulUnicodeRange3; - ULONG ulUnicodeRange4; - CHAR achVendID[4]; - USHORT fsSelection; - USHORT usFirstCharIndex; - USHORT usLastCharIndex; - /* According to the Apple spec, original version didn't have the below fields, - * version numbers were taked from the OpenType spec. - */ - /* version 0 (TrueType 1.5) */ - USHORT sTypoAscender; - USHORT sTypoDescender; - USHORT sTypoLineGap; - USHORT usWinAscent; - USHORT usWinDescent; - /* version 1 (TrueType 1.66) */ - ULONG ulCodePageRange1; - ULONG ulCodePageRange2; - /* version 2 (OpenType 1.2) */ - SHORT sxHeight; - SHORT sCapHeight; - USHORT usDefaultChar; - USHORT usBreakChar; - USHORT usMaxContext; -} TT_OS2_V2; -#include "poppack.h" - -#ifdef WORDS_BIGENDIAN -#define GET_BE_WORD(x) (x) -#else -#define GET_BE_WORD(x) MAKEWORD(HIBYTE(x), LOBYTE(x)) -#endif - -#define MS_MAKE_TAG(ch0, ch1, ch2, ch3) \ - ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ - ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24)) -#define MS_OS2_TAG MS_MAKE_TAG('O','S','/','2') - -static void test_text_metrics(const LOGFONTA *lf) -{ - HDC hdc; - HFONT hfont, hfont_old; - TEXTMETRICA tmA; - TEXTMETRICW tmW; - UINT first_unicode_char, last_unicode_char, default_char, break_char; - INT test_char; - TT_OS2_V2 tt_os2; - USHORT version; - LONG size, ret; - const char *font_name = lf->lfFaceName; - - trace("Testing font metrics for %s, charset %d\n", font_name, lf->lfCharSet); - - hdc = GetDC(0); - - SetLastError(0xdeadbeef); - hfont = CreateFontIndirectA(lf); - ok(hfont != 0, "CreateFontIndirect error %u\n", GetLastError()); - - hfont_old = SelectObject(hdc, hfont); - - size = GetFontData(hdc, MS_OS2_TAG, 0, NULL, 0); - if (size == GDI_ERROR) - { - trace("OS/2 chunk was not found\n"); - goto end_of_test; - } - if (size > sizeof(tt_os2)) - { - trace("got too large OS/2 chunk of size %u\n", size); - size = sizeof(tt_os2); - } - - memset(&tt_os2, 0, sizeof(tt_os2)); - ret = GetFontData(hdc, MS_OS2_TAG, 0, &tt_os2, size); - ok(ret == size, "GetFontData should return %u not %u\n", size, ret); - - version = GET_BE_WORD(tt_os2.version); - trace("OS/2 chunk version %u, vendor %4.4s\n", version, (LPCSTR)&tt_os2.achVendID); - - first_unicode_char = GET_BE_WORD(tt_os2.usFirstCharIndex); - last_unicode_char = GET_BE_WORD(tt_os2.usLastCharIndex); - default_char = GET_BE_WORD(tt_os2.usDefaultChar); - break_char = GET_BE_WORD(tt_os2.usBreakChar); - - trace("for %s first %x, last %x, default %x, break %x\n", font_name, - first_unicode_char, last_unicode_char, default_char, break_char); - - SetLastError(0xdeadbeef); - ret = GetTextMetricsA(hdc, &tmA); - ok(ret, "GetTextMetricsA error %u\n", GetLastError()); - trace("A: first %x, last %x, default %x, break %x\n", - tmA.tmFirstChar, tmA.tmLastChar, tmA.tmDefaultChar, tmA.tmBreakChar); - -#if 0 /* FIXME: This doesn't appear to be what Windows does */ - test_char = min(first_unicode_char - 1, 255); - ok(tmA.tmFirstChar == test_char, "A: tmFirstChar for %s %02x != %02x\n", - font_name, tmA.tmFirstChar, test_char); -#endif - if (lf->lfCharSet == SYMBOL_CHARSET) - { - test_char = min(last_unicode_char - 0xf000, 255); - ok(tmA.tmLastChar == test_char, "A: tmLastChar for %s %02x != %02x\n", - font_name, tmA.tmLastChar, test_char); - } - else - { - test_char = min(last_unicode_char, 255); - ok(tmA.tmLastChar == test_char, "A: tmLastChar for %s %02x != %02x\n", - font_name, tmA.tmLastChar, test_char); - } - - SetLastError(0xdeadbeef); - ret = GetTextMetricsW(hdc, &tmW); - ok(ret || GetLastError() == ERROR_CALL_NOT_IMPLEMENTED, - "GetTextMetricsW error %u\n", GetLastError()); - if (ret) - { - trace("W: first %x, last %x, default %x, break %x\n", - tmW.tmFirstChar, tmW.tmLastChar, tmW.tmDefaultChar, - tmW.tmBreakChar); - - if (lf->lfCharSet == SYMBOL_CHARSET) - { - /* It appears that for fonts with SYMBOL_CHARSET Windows always - * sets symbol range to 0 - f0ff - */ - ok(tmW.tmFirstChar == 0, "W: tmFirstChar for %s %02x != 0\n", - font_name, tmW.tmFirstChar); - /* FIXME: Windows returns f0ff here, while Wine f0xx */ - ok(tmW.tmLastChar >= 0xf000, "W: tmLastChar for %s %02x < 0xf000\n", - font_name, tmW.tmLastChar); - - ok(tmW.tmDefaultChar == 0x1f, "W: tmDefaultChar for %s %02x != 0x1f\n", - font_name, tmW.tmDefaultChar); - ok(tmW.tmBreakChar == 0x20, "W: tmBreakChar for %s %02x != 0x20\n", - font_name, tmW.tmBreakChar); - } - else - { - ok(tmW.tmFirstChar == first_unicode_char, "W: tmFirstChar for %s %02x != %02x\n", - font_name, tmW.tmFirstChar, first_unicode_char); - ok(tmW.tmLastChar == last_unicode_char, "W: tmLastChar for %s %02x != %02x\n", - font_name, tmW.tmLastChar, last_unicode_char); - } - ret = GetDeviceCaps(hdc, LOGPIXELSX); - ok(tmW.tmDigitizedAspectX == ret, "W: tmDigitizedAspectX %u != %u\n", - tmW.tmDigitizedAspectX, ret); - ret = GetDeviceCaps(hdc, LOGPIXELSY); - ok(tmW.tmDigitizedAspectX == ret, "W: tmDigitizedAspectY %u != %u\n", - tmW.tmDigitizedAspectX, ret); - } - - test_negative_width(hdc, lf); - -end_of_test: - SelectObject(hdc, hfont_old); - DeleteObject(hfont); - - ReleaseDC(0, hdc); -} - -static INT CALLBACK enum_truetype_font_proc(const LOGFONT *lf, const TEXTMETRIC *ntm, DWORD type, LPARAM lParam) -{ - INT *enumed = (INT *)lParam; - - if (type == TRUETYPE_FONTTYPE) - { - (*enumed)++; - test_text_metrics(lf); - } - return 1; -} - -static void test_GetTextMetrics(void) -{ - LOGFONTA lf; - HDC hdc; - INT enumed; - - hdc = GetDC(0); - - memset(&lf, 0, sizeof(lf)); - lf.lfCharSet = DEFAULT_CHARSET; - enumed = 0; - EnumFontFamiliesExA(hdc, &lf, enum_truetype_font_proc, (LPARAM)&enumed, 0); - trace("Tested metrics of %d truetype fonts\n", enumed); - - ReleaseDC(0, hdc); -} - -static void test_nonexistent_font(void) -{ - LOGFONTA lf; - HDC hdc; - HFONT hfont; - char buf[LF_FACESIZE]; - - if (!is_truetype_font_installed("Arial Black")) - { - skip("Arial not installed\n"); - return; - } - - hdc = GetDC(0); - - memset(&lf, 0, sizeof(lf)); - lf.lfHeight = 100; - lf.lfWeight = FW_REGULAR; - lf.lfCharSet = ANSI_CHARSET; - lf.lfPitchAndFamily = FF_SWISS; - strcpy(lf.lfFaceName, "Nonexistent font"); - - hfont = CreateFontIndirectA(&lf); - hfont = SelectObject(hdc, hfont); - GetTextFaceA(hdc, sizeof(buf), buf); - ok(!lstrcmpiA(buf, "Arial"), "Got %s\n", buf); - DeleteObject(SelectObject(hdc, hfont)); - ReleaseDC(0, hdc); -} - -static void test_GdiRealizationInfo(void) -{ - HDC hdc; - DWORD info[4]; - BOOL r; - HFONT hfont, hfont_old; - LOGFONTA lf; - - if(!pGdiRealizationInfo) - { - skip("GdiRealizationInfo not available\n"); - return; - } - - hdc = GetDC(0); - - memset(info, 0xcc, sizeof(info)); - r = pGdiRealizationInfo(hdc, info); - ok(r != 0, "ret 0\n"); - ok(info[0] == 1, "info[0] = %x for the system font\n", info[0]); - ok(info[3] == 0xcccccccc, "structure longer than 3 dwords\n"); - - if (!is_truetype_font_installed("Arial")) - { - skip("skipping GdiRealizationInfo with truetype font\n"); - goto end; - } - - memset(&lf, 0, sizeof(lf)); - strcpy(lf.lfFaceName, "Arial"); - lf.lfHeight = 20; - lf.lfWeight = FW_NORMAL; - hfont = CreateFontIndirectA(&lf); - hfont_old = SelectObject(hdc, hfont); - - memset(info, 0xcc, sizeof(info)); - r = pGdiRealizationInfo(hdc, info); - ok(r != 0, "ret 0\n"); - ok(info[0] == 3, "info[0] = %x for arial\n", info[0]); - ok(info[3] == 0xcccccccc, "structure longer than 3 dwords\n"); - - DeleteObject(SelectObject(hdc, hfont_old)); - - end: - ReleaseDC(0, hdc); -} - -START_TEST(font) -{ - init(); - - test_logfont(); - test_bitmap_font(); - test_bitmap_font_metrics(); - test_GdiGetCharDimensions(); - test_GetCharABCWidths(); - test_text_extents(); - test_GetGlyphIndices(); - test_GetKerningPairs(); - test_GetOutlineTextMetrics(); - test_SetTextJustification(); - test_font_charset(); - test_GetFontUnicodeRanges(); - test_nonexistent_font(); - - /* On Windows Arial has a lot of default charset aliases such as Arial Cyr, - * I'd like to avoid them in this test. - */ - test_EnumFontFamilies("Arial Black", ANSI_CHARSET); - test_EnumFontFamilies("Symbol", SYMBOL_CHARSET); - if (is_truetype_font_installed("Arial Black") && - (is_truetype_font_installed("Symbol") || is_truetype_font_installed("Wingdings"))) - { - test_EnumFontFamilies("", ANSI_CHARSET); - test_EnumFontFamilies("", SYMBOL_CHARSET); - test_EnumFontFamilies("", DEFAULT_CHARSET); - } - else - skip("Arial Black or Symbol/Wingdings is not installed\n"); - test_GetTextMetrics(); - test_GdiRealizationInfo(); -} diff --git a/rostests/winetests/gdi32/gdi32.rbuild b/rostests/winetests/gdi32/gdi32.rbuild deleted file mode 100644 index 18c8b7dfa1b..00000000000 --- a/rostests/winetests/gdi32/gdi32.rbuild +++ /dev/null @@ -1,27 +0,0 @@ - - - - - . - - ntdll - gdi32 - kernel32 - user32 - advapi32 - bitmap.c - brush.c - clipping.c - dc.c - gdiobj.c - generated.c - icm.c - font.c - mapping.c - metafile.c - palette.c - path.c - pen.c - testlist.c - - diff --git a/rostests/winetests/gdi32/gdiobj.c b/rostests/winetests/gdi32/gdiobj.c deleted file mode 100755 index bd7a065bb86..00000000000 --- a/rostests/winetests/gdi32/gdiobj.c +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Unit test suite for GDI objects - * - * Copyright 2002 Mike McCormack - * Copyright 2004 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 -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" - -#include "wine/test.h" - -static void test_gdi_objects(void) -{ - BYTE buff[256]; - HDC hdc = GetDC(NULL); - HPEN hp; - int i; - BOOL ret; - - /* SelectObject() with a NULL DC returns 0 and sets ERROR_INVALID_HANDLE. - * Note: Under XP at least invalid ptrs can also be passed, not just NULL; - * Don't test that here in case it crashes earlier win versions. - */ - SetLastError(0); - hp = SelectObject(NULL, GetStockObject(BLACK_PEN)); - ok(!hp && GetLastError() == ERROR_INVALID_HANDLE, - "SelectObject(NULL DC) expected 0, ERROR_INVALID_HANDLE, got %p, %u\n", - hp, GetLastError()); - - /* With a valid DC and a NULL object, the call returns 0 but does not SetLastError() */ - SetLastError(0); - hp = SelectObject(hdc, NULL); - ok(!hp && !GetLastError(), - "SelectObject(NULL obj) expected 0, NO_ERROR, got %p, %u\n", - hp, GetLastError()); - - /* The DC is unaffected by the NULL SelectObject */ - SetLastError(0); - hp = SelectObject(hdc, GetStockObject(BLACK_PEN)); - ok(hp && !GetLastError(), - "SelectObject(post NULL) expected non-null, NO_ERROR, got %p, %u\n", - hp, GetLastError()); - - /* GetCurrentObject does not SetLastError() on a null object */ - SetLastError(0); - hp = GetCurrentObject(NULL, OBJ_PEN); - ok(!hp && !GetLastError(), - "GetCurrentObject(NULL DC) expected 0, NO_ERROR, got %p, %u\n", - hp, GetLastError()); - - /* DeleteObject does not SetLastError() on a null object */ - ret = DeleteObject(NULL); - ok( !ret && !GetLastError(), - "DeleteObject(NULL obj), expected 0, NO_ERROR, got %d, %u\n", - ret, GetLastError()); - - /* GetObject does not SetLastError() on a null object */ - SetLastError(0); - i = GetObjectA(NULL, sizeof(buff), buff); - ok (!i && !GetLastError(), - "GetObject(NULL obj), expected 0, NO_ERROR, got %d, %u\n", - i, GetLastError()); - - /* GetObjectType does SetLastError() on a null object */ - SetLastError(0); - i = GetObjectType(NULL); - ok (!i && GetLastError() == ERROR_INVALID_HANDLE, - "GetObjectType(NULL obj), expected 0, ERROR_INVALID_HANDLE, got %d, %u\n", - i, GetLastError()); - - /* UnrealizeObject does not SetLastError() on a null object */ - SetLastError(0); - i = UnrealizeObject(NULL); - ok (!i && !GetLastError(), - "UnrealizeObject(NULL obj), expected 0, NO_ERROR, got %d, %u\n", - i, GetLastError()); - - ReleaseDC(NULL, hdc); -} - -struct hgdiobj_event -{ - HDC hdc; - HGDIOBJ hgdiobj1; - HGDIOBJ hgdiobj2; - HANDLE stop_event; - HANDLE ready_event; -}; - -static DWORD WINAPI thread_proc(void *param) -{ - LOGPEN lp; - struct hgdiobj_event *hgdiobj_event = (struct hgdiobj_event *)param; - - hgdiobj_event->hdc = CreateDC("display", NULL, NULL, NULL); - ok(hgdiobj_event->hdc != NULL, "CreateDC error %u\n", GetLastError()); - - hgdiobj_event->hgdiobj1 = CreatePen(PS_DASHDOTDOT, 17, RGB(1, 2, 3)); - ok(hgdiobj_event->hgdiobj1 != 0, "Failed to create pen\n"); - - hgdiobj_event->hgdiobj2 = CreateRectRgn(0, 1, 12, 17); - ok(hgdiobj_event->hgdiobj2 != 0, "Failed to create pen\n"); - - SetEvent(hgdiobj_event->ready_event); - ok(WaitForSingleObject(hgdiobj_event->stop_event, INFINITE) == WAIT_OBJECT_0, - "WaitForSingleObject error %u\n", GetLastError()); - - ok(!GetObject(hgdiobj_event->hgdiobj1, sizeof(lp), &lp), "GetObject should fail\n"); - - ok(!GetDeviceCaps(hgdiobj_event->hdc, TECHNOLOGY), "GetDeviceCaps(TECHNOLOGY) should fail\n"); - - return 0; -} - -static void test_thread_objects(void) -{ - LOGPEN lp; - DWORD tid, type; - HANDLE hthread; - struct hgdiobj_event hgdiobj_event; - INT ret; - - hgdiobj_event.stop_event = CreateEvent(NULL, 0, 0, NULL); - ok(hgdiobj_event.stop_event != NULL, "CreateEvent error %u\n", GetLastError()); - hgdiobj_event.ready_event = CreateEvent(NULL, 0, 0, NULL); - ok(hgdiobj_event.ready_event != NULL, "CreateEvent error %u\n", GetLastError()); - - hthread = CreateThread(NULL, 0, thread_proc, &hgdiobj_event, 0, &tid); - ok(hthread != NULL, "CreateThread error %u\n", GetLastError()); - - ok(WaitForSingleObject(hgdiobj_event.ready_event, INFINITE) == WAIT_OBJECT_0, - "WaitForSingleObject error %u\n", GetLastError()); - - ok(GetObject(hgdiobj_event.hgdiobj1, sizeof(lp), &lp) == sizeof(lp), - "GetObject error %u\n", GetLastError()); - ok(lp.lopnStyle == PS_DASHDOTDOT, "wrong pen style %d\n", lp.lopnStyle); - ok(lp.lopnWidth.x == 17, "wrong pen width.y %d\n", lp.lopnWidth.x); - ok(lp.lopnWidth.y == 0, "wrong pen width.y %d\n", lp.lopnWidth.y); - ok(lp.lopnColor == RGB(1, 2, 3), "wrong pen width.y %08x\n", lp.lopnColor); - - ret = GetDeviceCaps(hgdiobj_event.hdc, TECHNOLOGY); - ok(ret == DT_RASDISPLAY, "GetDeviceCaps(TECHNOLOGY) should return DT_RASDISPLAY not %d\n", ret); - - ok(DeleteObject(hgdiobj_event.hgdiobj1), "DeleteObject error %u\n", GetLastError()); - ok(DeleteDC(hgdiobj_event.hdc), "DeleteDC error %u\n", GetLastError()); - - type = GetObjectType(hgdiobj_event.hgdiobj2); - ok(type == OBJ_REGION, "GetObjectType returned %u\n", type); - - SetEvent(hgdiobj_event.stop_event); - ok(WaitForSingleObject(hthread, INFINITE) == WAIT_OBJECT_0, - "WaitForSingleObject error %u\n", GetLastError()); - CloseHandle(hthread); - - type = GetObjectType(hgdiobj_event.hgdiobj2); - ok(type == OBJ_REGION, "GetObjectType returned %u\n", type); - ok(DeleteObject(hgdiobj_event.hgdiobj2), "DeleteObject error %u\n", GetLastError()); - - CloseHandle(hgdiobj_event.stop_event); - CloseHandle(hgdiobj_event.ready_event); -} - -static void test_GetCurrentObject(void) -{ - DWORD type; - HPEN hpen; - HBRUSH hbrush; - HPALETTE hpal; - HFONT hfont; - HBITMAP hbmp; - HRGN hrgn; - HDC hdc; - HCOLORSPACE hcs; - HGDIOBJ hobj; - LOGBRUSH lb; - LOGCOLORSPACEA lcs; - - hdc = CreateCompatibleDC(0); - assert(hdc != 0); - - type = GetObjectType(hdc); - ok(type == OBJ_MEMDC, "GetObjectType returned %u\n", type); - - hpen = CreatePen(PS_SOLID, 10, RGB(10, 20, 30)); - assert(hpen != 0); - SelectObject(hdc, hpen); - hobj = GetCurrentObject(hdc, OBJ_PEN); - ok(hobj == hpen, "OBJ_PEN is wrong: %p\n", hobj); - hobj = GetCurrentObject(hdc, OBJ_EXTPEN); - ok(hobj == hpen, "OBJ_EXTPEN is wrong: %p\n", hobj); - - hbrush = CreateSolidBrush(RGB(10, 20, 30)); - assert(hbrush != 0); - SelectObject(hdc, hbrush); - hobj = GetCurrentObject(hdc, OBJ_BRUSH); - ok(hobj == hbrush, "OBJ_BRUSH is wrong: %p\n", hobj); - - hpal = CreateHalftonePalette(hdc); - assert(hpal != 0); - SelectPalette(hdc, hpal, FALSE); - hobj = GetCurrentObject(hdc, OBJ_PAL); - ok(hobj == hpal, "OBJ_PAL is wrong: %p\n", hobj); - - hfont = CreateFontA(10, 5, 0, 0, FW_DONTCARE, 0, 0, 0, ANSI_CHARSET, - OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, - DEFAULT_PITCH, "MS Sans Serif"); - assert(hfont != 0); - SelectObject(hdc, hfont); - hobj = GetCurrentObject(hdc, OBJ_FONT); - ok(hobj == hfont, "OBJ_FONT is wrong: %p\n", hobj); - - hbmp = CreateBitmap(100, 100, 1, 1, NULL); - assert(hbmp != 0); - SelectObject(hdc, hbmp); - hobj = GetCurrentObject(hdc, OBJ_BITMAP); - ok(hobj == hbmp, "OBJ_BITMAP is wrong: %p\n", hobj); - - assert(GetObject(hbrush, sizeof(lb), &lb) == sizeof(lb)); - hpen = ExtCreatePen(PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_SQUARE | PS_JOIN_BEVEL, - 10, &lb, 0, NULL); - assert(hpen != 0); - SelectObject(hdc, hpen); - hobj = GetCurrentObject(hdc, OBJ_PEN); - ok(hobj == hpen, "OBJ_PEN is wrong: %p\n", hobj); - hobj = GetCurrentObject(hdc, OBJ_EXTPEN); - ok(hobj == hpen, "OBJ_EXTPEN is wrong: %p\n", hobj); - - hcs = GetColorSpace(hdc); - if (hcs) - { - trace("current color space is not NULL\n"); - ok(GetLogColorSpaceA(hcs, &lcs, sizeof(lcs)), "GetLogColorSpace failed\n"); - hcs = CreateColorSpaceA(&lcs); - ok(hcs != 0, "CreateColorSpace failed\n"); - SelectObject(hdc, hcs); - hobj = GetCurrentObject(hdc, OBJ_COLORSPACE); - ok(hobj == hcs, "OBJ_COLORSPACE is wrong: %p\n", hobj); - } - - hrgn = CreateRectRgn(1, 1, 100, 100); - assert(hrgn != 0); - SelectObject(hdc, hrgn); - hobj = GetCurrentObject(hdc, OBJ_REGION); - ok(!hobj, "OBJ_REGION is wrong: %p\n", hobj); - - DeleteDC(hdc); -} - -START_TEST(gdiobj) -{ - test_gdi_objects(); - test_thread_objects(); - test_GetCurrentObject(); -} diff --git a/rostests/winetests/gdi32/generated.c b/rostests/winetests/gdi32/generated.c deleted file mode 100644 index 9a35f24070b..00000000000 --- a/rostests/winetests/gdi32/generated.c +++ /dev/null @@ -1,4370 +0,0 @@ -/* File generated automatically from tools/winapi/test.dat; do not edit! */ -/* This file can be copied, modified and distributed without restriction. */ - -/* - * Unit tests for data structure packing - */ - -#define WINVER 0x0501 -#define _WIN32_IE 0x0501 -#define _WIN32_WINNT 0x0501 - -#define WINE_NOWINSOCK - -#include "windows.h" - -#include "wine/test.h" - -/*********************************************************************** - * Compatibility macros - */ - -#define DWORD_PTR UINT_PTR -#define LONG_PTR INT_PTR -#define ULONG_PTR UINT_PTR - -/*********************************************************************** - * Windows API extension - */ - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field) -#elif defined(__GNUC__) -# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field) -#else -/* FIXME: Not sure if is possible to do without compiler extension */ -#endif - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define _TYPE_ALIGNMENT(type) __alignof(type) -#elif defined(__GNUC__) -# define _TYPE_ALIGNMENT(type) __alignof__(type) -#else -/* - * FIXME: Not sure if is possible to do without compiler extension - * (if type is not just a name that is, if so the normal) - * TYPE_ALIGNMENT can be used) - */ -#endif - -#if defined(TYPE_ALIGNMENT) && defined(_MSC_VER) && _MSC_VER >= 800 && !defined(__cplusplus) -#pragma warning(disable:4116) -#endif - -#if !defined(TYPE_ALIGNMENT) && defined(_TYPE_ALIGNMENT) -# define TYPE_ALIGNMENT _TYPE_ALIGNMENT -#endif - -/*********************************************************************** - * Test helper macros - */ - -#ifdef FIELD_ALIGNMENT -# define TEST_FIELD_ALIGNMENT(type, field, align) \ - ok(FIELD_ALIGNMENT(type, field) == align, \ - "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \ - (int)FIELD_ALIGNMENT(type, field)) -#else -# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0) -#endif - -#define TEST_FIELD_OFFSET(type, field, offset) \ - ok(FIELD_OFFSET(type, field) == offset, \ - "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \ - (long int)FIELD_OFFSET(type, field)) - -#ifdef _TYPE_ALIGNMENT -#define TEST__TYPE_ALIGNMENT(type, align) \ - ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type)) -#else -# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#ifdef TYPE_ALIGNMENT -#define TEST_TYPE_ALIGNMENT(type, align) \ - ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type)) -#else -# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#define TEST_TYPE_SIZE(type, size) \ - ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type))) - -/*********************************************************************** - * Test macros - */ - -#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \ - TEST_TYPE_SIZE(field_type, field_size); \ - TEST_FIELD_ALIGNMENT(type, field_name, field_align); \ - TEST_FIELD_OFFSET(type, field_name, field_offset); \ - -#define TEST_TYPE(type, size, align) \ - TEST_TYPE_ALIGNMENT(type, align); \ - TEST_TYPE_SIZE(type, size) - -#define TEST_TYPE_POINTER(type, size, align) \ - TEST__TYPE_ALIGNMENT(*(type)0, align); \ - TEST_TYPE_SIZE(*(type)0, size) - -#define TEST_TYPE_SIGNED(type) \ - ok((type) -1 < 0, "(" #type ") -1 < 0\n"); - -#define TEST_TYPE_UNSIGNED(type) \ - ok((type) -1 > 0, "(" #type ") -1 > 0\n"); - -static void test_pack_ABC(void) -{ - /* ABC (pack 4) */ - TEST_TYPE(ABC, 12, 4); - TEST_FIELD(ABC, INT, abcA, 0, 4, 4); - TEST_FIELD(ABC, UINT, abcB, 4, 4, 4); - TEST_FIELD(ABC, INT, abcC, 8, 4, 4); -} - -static void test_pack_ABCFLOAT(void) -{ - /* ABCFLOAT (pack 4) */ - TEST_TYPE(ABCFLOAT, 12, 4); - TEST_FIELD(ABCFLOAT, FLOAT, abcfA, 0, 4, 4); - TEST_FIELD(ABCFLOAT, FLOAT, abcfB, 4, 4, 4); - TEST_FIELD(ABCFLOAT, FLOAT, abcfC, 8, 4, 4); -} - -static void test_pack_ABORTPROC(void) -{ - /* ABORTPROC */ - TEST_TYPE(ABORTPROC, 4, 4); -} - -static void test_pack_BITMAP(void) -{ - /* BITMAP (pack 4) */ - TEST_TYPE(BITMAP, 24, 4); - TEST_FIELD(BITMAP, INT, bmType, 0, 4, 4); - TEST_FIELD(BITMAP, INT, bmWidth, 4, 4, 4); - TEST_FIELD(BITMAP, INT, bmHeight, 8, 4, 4); - TEST_FIELD(BITMAP, INT, bmWidthBytes, 12, 4, 4); - TEST_FIELD(BITMAP, WORD, bmPlanes, 16, 2, 2); - TEST_FIELD(BITMAP, WORD, bmBitsPixel, 18, 2, 2); - TEST_FIELD(BITMAP, LPVOID, bmBits, 20, 4, 4); -} - -static void test_pack_BITMAPCOREHEADER(void) -{ - /* BITMAPCOREHEADER (pack 4) */ - TEST_TYPE(BITMAPCOREHEADER, 12, 4); - TEST_FIELD(BITMAPCOREHEADER, DWORD, bcSize, 0, 4, 4); - TEST_FIELD(BITMAPCOREHEADER, WORD, bcWidth, 4, 2, 2); - TEST_FIELD(BITMAPCOREHEADER, WORD, bcHeight, 6, 2, 2); - TEST_FIELD(BITMAPCOREHEADER, WORD, bcPlanes, 8, 2, 2); - TEST_FIELD(BITMAPCOREHEADER, WORD, bcBitCount, 10, 2, 2); -} - -static void test_pack_BITMAPCOREINFO(void) -{ - /* BITMAPCOREINFO (pack 4) */ - TEST_TYPE(BITMAPCOREINFO, 16, 4); - TEST_FIELD(BITMAPCOREINFO, BITMAPCOREHEADER, bmciHeader, 0, 12, 4); - TEST_FIELD(BITMAPCOREINFO, RGBTRIPLE[1], bmciColors, 12, 3, 1); -} - -static void test_pack_BITMAPFILEHEADER(void) -{ - /* BITMAPFILEHEADER (pack 2) */ - TEST_TYPE(BITMAPFILEHEADER, 14, 2); - TEST_FIELD(BITMAPFILEHEADER, WORD, bfType, 0, 2, 2); - TEST_FIELD(BITMAPFILEHEADER, DWORD, bfSize, 2, 4, 2); - TEST_FIELD(BITMAPFILEHEADER, WORD, bfReserved1, 6, 2, 2); - TEST_FIELD(BITMAPFILEHEADER, WORD, bfReserved2, 8, 2, 2); - TEST_FIELD(BITMAPFILEHEADER, DWORD, bfOffBits, 10, 4, 2); -} - -static void test_pack_BITMAPINFO(void) -{ - /* BITMAPINFO (pack 4) */ - TEST_TYPE(BITMAPINFO, 44, 4); - TEST_FIELD(BITMAPINFO, BITMAPINFOHEADER, bmiHeader, 0, 40, 4); - TEST_FIELD(BITMAPINFO, RGBQUAD[1], bmiColors, 40, 4, 1); -} - -static void test_pack_BITMAPINFOHEADER(void) -{ - /* BITMAPINFOHEADER (pack 4) */ - TEST_TYPE(BITMAPINFOHEADER, 40, 4); - TEST_FIELD(BITMAPINFOHEADER, DWORD, biSize, 0, 4, 4); - TEST_FIELD(BITMAPINFOHEADER, LONG, biWidth, 4, 4, 4); - TEST_FIELD(BITMAPINFOHEADER, LONG, biHeight, 8, 4, 4); - TEST_FIELD(BITMAPINFOHEADER, WORD, biPlanes, 12, 2, 2); - TEST_FIELD(BITMAPINFOHEADER, WORD, biBitCount, 14, 2, 2); - TEST_FIELD(BITMAPINFOHEADER, DWORD, biCompression, 16, 4, 4); - TEST_FIELD(BITMAPINFOHEADER, DWORD, biSizeImage, 20, 4, 4); - TEST_FIELD(BITMAPINFOHEADER, LONG, biXPelsPerMeter, 24, 4, 4); - TEST_FIELD(BITMAPINFOHEADER, LONG, biYPelsPerMeter, 28, 4, 4); - TEST_FIELD(BITMAPINFOHEADER, DWORD, biClrUsed, 32, 4, 4); - TEST_FIELD(BITMAPINFOHEADER, DWORD, biClrImportant, 36, 4, 4); -} - -static void test_pack_BITMAPV4HEADER(void) -{ - /* BITMAPV4HEADER (pack 4) */ - TEST_TYPE(BITMAPV4HEADER, 108, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4Size, 0, 4, 4); - TEST_FIELD(BITMAPV4HEADER, LONG, bV4Width, 4, 4, 4); - TEST_FIELD(BITMAPV4HEADER, LONG, bV4Height, 8, 4, 4); - TEST_FIELD(BITMAPV4HEADER, WORD, bV4Planes, 12, 2, 2); - TEST_FIELD(BITMAPV4HEADER, WORD, bV4BitCount, 14, 2, 2); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4V4Compression, 16, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4SizeImage, 20, 4, 4); - TEST_FIELD(BITMAPV4HEADER, LONG, bV4XPelsPerMeter, 24, 4, 4); - TEST_FIELD(BITMAPV4HEADER, LONG, bV4YPelsPerMeter, 28, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4ClrUsed, 32, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4ClrImportant, 36, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4RedMask, 40, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4GreenMask, 44, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4BlueMask, 48, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4AlphaMask, 52, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4CSType, 56, 4, 4); - TEST_FIELD(BITMAPV4HEADER, CIEXYZTRIPLE, bV4Endpoints, 60, 36, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4GammaRed, 96, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4GammaGreen, 100, 4, 4); - TEST_FIELD(BITMAPV4HEADER, DWORD, bV4GammaBlue, 104, 4, 4); -} - -static void test_pack_BITMAPV5HEADER(void) -{ - /* BITMAPV5HEADER (pack 4) */ - TEST_TYPE(BITMAPV5HEADER, 124, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5Size, 0, 4, 4); - TEST_FIELD(BITMAPV5HEADER, LONG, bV5Width, 4, 4, 4); - TEST_FIELD(BITMAPV5HEADER, LONG, bV5Height, 8, 4, 4); - TEST_FIELD(BITMAPV5HEADER, WORD, bV5Planes, 12, 2, 2); - TEST_FIELD(BITMAPV5HEADER, WORD, bV5BitCount, 14, 2, 2); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5Compression, 16, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5SizeImage, 20, 4, 4); - TEST_FIELD(BITMAPV5HEADER, LONG, bV5XPelsPerMeter, 24, 4, 4); - TEST_FIELD(BITMAPV5HEADER, LONG, bV5YPelsPerMeter, 28, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5ClrUsed, 32, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5ClrImportant, 36, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5RedMask, 40, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5GreenMask, 44, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5BlueMask, 48, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5AlphaMask, 52, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5CSType, 56, 4, 4); - TEST_FIELD(BITMAPV5HEADER, CIEXYZTRIPLE, bV5Endpoints, 60, 36, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5GammaRed, 96, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5GammaGreen, 100, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5GammaBlue, 104, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5Intent, 108, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5ProfileData, 112, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5ProfileSize, 116, 4, 4); - TEST_FIELD(BITMAPV5HEADER, DWORD, bV5Reserved, 120, 4, 4); -} - -static void test_pack_BLENDFUNCTION(void) -{ - /* BLENDFUNCTION (pack 4) */ - TEST_TYPE(BLENDFUNCTION, 4, 1); - TEST_FIELD(BLENDFUNCTION, BYTE, BlendOp, 0, 1, 1); - TEST_FIELD(BLENDFUNCTION, BYTE, BlendFlags, 1, 1, 1); - TEST_FIELD(BLENDFUNCTION, BYTE, SourceConstantAlpha, 2, 1, 1); - TEST_FIELD(BLENDFUNCTION, BYTE, AlphaFormat, 3, 1, 1); -} - -static void test_pack_CHARSETINFO(void) -{ - /* CHARSETINFO (pack 4) */ - TEST_TYPE(CHARSETINFO, 32, 4); - TEST_FIELD(CHARSETINFO, UINT, ciCharset, 0, 4, 4); - TEST_FIELD(CHARSETINFO, UINT, ciACP, 4, 4, 4); - TEST_FIELD(CHARSETINFO, FONTSIGNATURE, fs, 8, 24, 4); -} - -static void test_pack_CIEXYZ(void) -{ - /* CIEXYZ (pack 4) */ - TEST_TYPE(CIEXYZ, 12, 4); - TEST_FIELD(CIEXYZ, FXPT2DOT30, ciexyzX, 0, 4, 4); - TEST_FIELD(CIEXYZ, FXPT2DOT30, ciexyzY, 4, 4, 4); - TEST_FIELD(CIEXYZ, FXPT2DOT30, ciexyzZ, 8, 4, 4); -} - -static void test_pack_CIEXYZTRIPLE(void) -{ - /* CIEXYZTRIPLE (pack 4) */ - TEST_TYPE(CIEXYZTRIPLE, 36, 4); - TEST_FIELD(CIEXYZTRIPLE, CIEXYZ, ciexyzRed, 0, 12, 4); - TEST_FIELD(CIEXYZTRIPLE, CIEXYZ, ciexyzGreen, 12, 12, 4); - TEST_FIELD(CIEXYZTRIPLE, CIEXYZ, ciexyzBlue, 24, 12, 4); -} - -static void test_pack_COLOR16(void) -{ - /* COLOR16 */ - TEST_TYPE(COLOR16, 2, 2); -} - -static void test_pack_COLORADJUSTMENT(void) -{ - /* COLORADJUSTMENT (pack 4) */ - TEST_TYPE(COLORADJUSTMENT, 24, 2); - TEST_FIELD(COLORADJUSTMENT, WORD, caSize, 0, 2, 2); - TEST_FIELD(COLORADJUSTMENT, WORD, caFlags, 2, 2, 2); - TEST_FIELD(COLORADJUSTMENT, WORD, caIlluminantIndex, 4, 2, 2); - TEST_FIELD(COLORADJUSTMENT, WORD, caRedGamma, 6, 2, 2); - TEST_FIELD(COLORADJUSTMENT, WORD, caGreenGamma, 8, 2, 2); - TEST_FIELD(COLORADJUSTMENT, WORD, caBlueGamma, 10, 2, 2); - TEST_FIELD(COLORADJUSTMENT, WORD, caReferenceBlack, 12, 2, 2); - TEST_FIELD(COLORADJUSTMENT, WORD, caReferenceWhite, 14, 2, 2); - TEST_FIELD(COLORADJUSTMENT, SHORT, caContrast, 16, 2, 2); - TEST_FIELD(COLORADJUSTMENT, SHORT, caBrightness, 18, 2, 2); - TEST_FIELD(COLORADJUSTMENT, SHORT, caColorfulness, 20, 2, 2); - TEST_FIELD(COLORADJUSTMENT, SHORT, caRedGreenTint, 22, 2, 2); -} - -static void test_pack_DEVMODEA(void) -{ - /* DEVMODEA (pack 4) */ - TEST_FIELD(DEVMODEA, BYTE[CCHDEVICENAME], dmDeviceName, 0, 32, 1); - TEST_FIELD(DEVMODEA, WORD, dmSpecVersion, 32, 2, 2); - TEST_FIELD(DEVMODEA, WORD, dmDriverVersion, 34, 2, 2); - TEST_FIELD(DEVMODEA, WORD, dmSize, 36, 2, 2); - TEST_FIELD(DEVMODEA, WORD, dmDriverExtra, 38, 2, 2); - TEST_FIELD(DEVMODEA, DWORD, dmFields, 40, 4, 4); -} - -static void test_pack_DEVMODEW(void) -{ - /* DEVMODEW (pack 4) */ - TEST_FIELD(DEVMODEW, WCHAR[CCHDEVICENAME], dmDeviceName, 0, 64, 2); - TEST_FIELD(DEVMODEW, WORD, dmSpecVersion, 64, 2, 2); - TEST_FIELD(DEVMODEW, WORD, dmDriverVersion, 66, 2, 2); - TEST_FIELD(DEVMODEW, WORD, dmSize, 68, 2, 2); - TEST_FIELD(DEVMODEW, WORD, dmDriverExtra, 70, 2, 2); - TEST_FIELD(DEVMODEW, DWORD, dmFields, 72, 4, 4); -} - -static void test_pack_DIBSECTION(void) -{ - /* DIBSECTION (pack 4) */ - TEST_TYPE(DIBSECTION, 84, 4); - TEST_FIELD(DIBSECTION, BITMAP, dsBm, 0, 24, 4); - TEST_FIELD(DIBSECTION, BITMAPINFOHEADER, dsBmih, 24, 40, 4); - TEST_FIELD(DIBSECTION, DWORD[3], dsBitfields, 64, 12, 4); - TEST_FIELD(DIBSECTION, HANDLE, dshSection, 76, 4, 4); - TEST_FIELD(DIBSECTION, DWORD, dsOffset, 80, 4, 4); -} - -static void test_pack_DISPLAY_DEVICEA(void) -{ - /* DISPLAY_DEVICEA (pack 4) */ - TEST_TYPE(DISPLAY_DEVICEA, 424, 4); - TEST_FIELD(DISPLAY_DEVICEA, DWORD, cb, 0, 4, 4); - TEST_FIELD(DISPLAY_DEVICEA, CHAR[32], DeviceName, 4, 32, 1); - TEST_FIELD(DISPLAY_DEVICEA, CHAR[128], DeviceString, 36, 128, 1); - TEST_FIELD(DISPLAY_DEVICEA, DWORD, StateFlags, 164, 4, 4); - TEST_FIELD(DISPLAY_DEVICEA, CHAR[128], DeviceID, 168, 128, 1); - TEST_FIELD(DISPLAY_DEVICEA, CHAR[128], DeviceKey, 296, 128, 1); -} - -static void test_pack_DISPLAY_DEVICEW(void) -{ - /* DISPLAY_DEVICEW (pack 4) */ - TEST_TYPE(DISPLAY_DEVICEW, 840, 4); - TEST_FIELD(DISPLAY_DEVICEW, DWORD, cb, 0, 4, 4); - TEST_FIELD(DISPLAY_DEVICEW, WCHAR[32], DeviceName, 4, 64, 2); - TEST_FIELD(DISPLAY_DEVICEW, WCHAR[128], DeviceString, 68, 256, 2); - TEST_FIELD(DISPLAY_DEVICEW, DWORD, StateFlags, 324, 4, 4); - TEST_FIELD(DISPLAY_DEVICEW, WCHAR[128], DeviceID, 328, 256, 2); - TEST_FIELD(DISPLAY_DEVICEW, WCHAR[128], DeviceKey, 584, 256, 2); -} - -static void test_pack_DOCINFOA(void) -{ - /* DOCINFOA (pack 4) */ - TEST_TYPE(DOCINFOA, 20, 4); - TEST_FIELD(DOCINFOA, INT, cbSize, 0, 4, 4); - TEST_FIELD(DOCINFOA, LPCSTR, lpszDocName, 4, 4, 4); - TEST_FIELD(DOCINFOA, LPCSTR, lpszOutput, 8, 4, 4); - TEST_FIELD(DOCINFOA, LPCSTR, lpszDatatype, 12, 4, 4); - TEST_FIELD(DOCINFOA, DWORD, fwType, 16, 4, 4); -} - -static void test_pack_DOCINFOW(void) -{ - /* DOCINFOW (pack 4) */ - TEST_TYPE(DOCINFOW, 20, 4); - TEST_FIELD(DOCINFOW, INT, cbSize, 0, 4, 4); - TEST_FIELD(DOCINFOW, LPCWSTR, lpszDocName, 4, 4, 4); - TEST_FIELD(DOCINFOW, LPCWSTR, lpszOutput, 8, 4, 4); - TEST_FIELD(DOCINFOW, LPCWSTR, lpszDatatype, 12, 4, 4); - TEST_FIELD(DOCINFOW, DWORD, fwType, 16, 4, 4); -} - -static void test_pack_EMR(void) -{ - /* EMR (pack 4) */ - TEST_TYPE(EMR, 8, 4); - TEST_FIELD(EMR, DWORD, iType, 0, 4, 4); - TEST_FIELD(EMR, DWORD, nSize, 4, 4, 4); -} - -static void test_pack_EMRABORTPATH(void) -{ - /* EMRABORTPATH (pack 4) */ - TEST_TYPE(EMRABORTPATH, 8, 4); - TEST_FIELD(EMRABORTPATH, EMR, emr, 0, 8, 4); -} - -static void test_pack_EMRANGLEARC(void) -{ - /* EMRANGLEARC (pack 4) */ - TEST_TYPE(EMRANGLEARC, 28, 4); - TEST_FIELD(EMRANGLEARC, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRANGLEARC, POINTL, ptlCenter, 8, 8, 4); - TEST_FIELD(EMRANGLEARC, DWORD, nRadius, 16, 4, 4); - TEST_FIELD(EMRANGLEARC, FLOAT, eStartAngle, 20, 4, 4); - TEST_FIELD(EMRANGLEARC, FLOAT, eSweepAngle, 24, 4, 4); -} - -static void test_pack_EMRARC(void) -{ - /* EMRARC (pack 4) */ - TEST_TYPE(EMRARC, 40, 4); - TEST_FIELD(EMRARC, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRARC, RECTL, rclBox, 8, 16, 4); - TEST_FIELD(EMRARC, POINTL, ptlStart, 24, 8, 4); - TEST_FIELD(EMRARC, POINTL, ptlEnd, 32, 8, 4); -} - -static void test_pack_EMRARCTO(void) -{ - /* EMRARCTO (pack 4) */ - TEST_TYPE(EMRARCTO, 40, 4); - TEST_FIELD(EMRARCTO, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRARCTO, RECTL, rclBox, 8, 16, 4); - TEST_FIELD(EMRARCTO, POINTL, ptlStart, 24, 8, 4); - TEST_FIELD(EMRARCTO, POINTL, ptlEnd, 32, 8, 4); -} - -static void test_pack_EMRBEGINPATH(void) -{ - /* EMRBEGINPATH (pack 4) */ - TEST_TYPE(EMRBEGINPATH, 8, 4); - TEST_FIELD(EMRBEGINPATH, EMR, emr, 0, 8, 4); -} - -static void test_pack_EMRBITBLT(void) -{ - /* EMRBITBLT (pack 4) */ - TEST_TYPE(EMRBITBLT, 100, 4); - TEST_FIELD(EMRBITBLT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRBITBLT, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRBITBLT, LONG, xDest, 24, 4, 4); - TEST_FIELD(EMRBITBLT, LONG, yDest, 28, 4, 4); - TEST_FIELD(EMRBITBLT, LONG, cxDest, 32, 4, 4); - TEST_FIELD(EMRBITBLT, LONG, cyDest, 36, 4, 4); - TEST_FIELD(EMRBITBLT, DWORD, dwRop, 40, 4, 4); - TEST_FIELD(EMRBITBLT, LONG, xSrc, 44, 4, 4); - TEST_FIELD(EMRBITBLT, LONG, ySrc, 48, 4, 4); - TEST_FIELD(EMRBITBLT, XFORM, xformSrc, 52, 24, 4); - TEST_FIELD(EMRBITBLT, COLORREF, crBkColorSrc, 76, 4, 4); - TEST_FIELD(EMRBITBLT, DWORD, iUsageSrc, 80, 4, 4); - TEST_FIELD(EMRBITBLT, DWORD, offBmiSrc, 84, 4, 4); - TEST_FIELD(EMRBITBLT, DWORD, cbBmiSrc, 88, 4, 4); - TEST_FIELD(EMRBITBLT, DWORD, offBitsSrc, 92, 4, 4); - TEST_FIELD(EMRBITBLT, DWORD, cbBitsSrc, 96, 4, 4); -} - -static void test_pack_EMRCHORD(void) -{ - /* EMRCHORD (pack 4) */ - TEST_TYPE(EMRCHORD, 40, 4); - TEST_FIELD(EMRCHORD, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRCHORD, RECTL, rclBox, 8, 16, 4); - TEST_FIELD(EMRCHORD, POINTL, ptlStart, 24, 8, 4); - TEST_FIELD(EMRCHORD, POINTL, ptlEnd, 32, 8, 4); -} - -static void test_pack_EMRCLOSEFIGURE(void) -{ - /* EMRCLOSEFIGURE (pack 4) */ - TEST_TYPE(EMRCLOSEFIGURE, 8, 4); - TEST_FIELD(EMRCLOSEFIGURE, EMR, emr, 0, 8, 4); -} - -static void test_pack_EMRCREATEBRUSHINDIRECT(void) -{ - /* EMRCREATEBRUSHINDIRECT (pack 4) */ - TEST_TYPE(EMRCREATEBRUSHINDIRECT, 24, 4); - TEST_FIELD(EMRCREATEBRUSHINDIRECT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRCREATEBRUSHINDIRECT, DWORD, ihBrush, 8, 4, 4); - TEST_FIELD(EMRCREATEBRUSHINDIRECT, LOGBRUSH32, lb, 12, 12, 4); -} - -static void test_pack_EMRCREATECOLORSPACE(void) -{ - /* EMRCREATECOLORSPACE (pack 4) */ - TEST_TYPE(EMRCREATECOLORSPACE, 340, 4); - TEST_FIELD(EMRCREATECOLORSPACE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRCREATECOLORSPACE, DWORD, ihCS, 8, 4, 4); - TEST_FIELD(EMRCREATECOLORSPACE, LOGCOLORSPACEA, lcs, 12, 328, 4); -} - -static void test_pack_EMRCREATECOLORSPACEW(void) -{ - /* EMRCREATECOLORSPACEW (pack 4) */ - TEST_TYPE(EMRCREATECOLORSPACEW, 612, 4); - TEST_FIELD(EMRCREATECOLORSPACEW, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRCREATECOLORSPACEW, DWORD, ihCS, 8, 4, 4); - TEST_FIELD(EMRCREATECOLORSPACEW, LOGCOLORSPACEW, lcs, 12, 588, 4); - TEST_FIELD(EMRCREATECOLORSPACEW, DWORD, dwFlags, 600, 4, 4); - TEST_FIELD(EMRCREATECOLORSPACEW, DWORD, cbData, 604, 4, 4); - TEST_FIELD(EMRCREATECOLORSPACEW, BYTE[1], Data, 608, 1, 1); -} - -static void test_pack_EMRCREATEDIBPATTERNBRUSHPT(void) -{ - /* EMRCREATEDIBPATTERNBRUSHPT (pack 4) */ - TEST_TYPE(EMRCREATEDIBPATTERNBRUSHPT, 32, 4); - TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, ihBrush, 8, 4, 4); - TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, iUsage, 12, 4, 4); - TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, offBmi, 16, 4, 4); - TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, cbBmi, 20, 4, 4); - TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, offBits, 24, 4, 4); - TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, cbBits, 28, 4, 4); -} - -static void test_pack_EMRCREATEMONOBRUSH(void) -{ - /* EMRCREATEMONOBRUSH (pack 4) */ - TEST_TYPE(EMRCREATEMONOBRUSH, 32, 4); - TEST_FIELD(EMRCREATEMONOBRUSH, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, ihBrush, 8, 4, 4); - TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, iUsage, 12, 4, 4); - TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, offBmi, 16, 4, 4); - TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, cbBmi, 20, 4, 4); - TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, offBits, 24, 4, 4); - TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, cbBits, 28, 4, 4); -} - -static void test_pack_EMRCREATEPEN(void) -{ - /* EMRCREATEPEN (pack 4) */ - TEST_TYPE(EMRCREATEPEN, 28, 4); - TEST_FIELD(EMRCREATEPEN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRCREATEPEN, DWORD, ihPen, 8, 4, 4); - TEST_FIELD(EMRCREATEPEN, LOGPEN, lopn, 12, 16, 4); -} - -static void test_pack_EMRDELETECOLORSPACE(void) -{ - /* EMRDELETECOLORSPACE (pack 4) */ - TEST_TYPE(EMRDELETECOLORSPACE, 12, 4); - TEST_FIELD(EMRDELETECOLORSPACE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRDELETECOLORSPACE, DWORD, ihCS, 8, 4, 4); -} - -static void test_pack_EMRDELETEOBJECT(void) -{ - /* EMRDELETEOBJECT (pack 4) */ - TEST_TYPE(EMRDELETEOBJECT, 12, 4); - TEST_FIELD(EMRDELETEOBJECT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRDELETEOBJECT, DWORD, ihObject, 8, 4, 4); -} - -static void test_pack_EMRELLIPSE(void) -{ - /* EMRELLIPSE (pack 4) */ - TEST_TYPE(EMRELLIPSE, 24, 4); - TEST_FIELD(EMRELLIPSE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRELLIPSE, RECTL, rclBox, 8, 16, 4); -} - -static void test_pack_EMRENDPATH(void) -{ - /* EMRENDPATH (pack 4) */ - TEST_TYPE(EMRENDPATH, 8, 4); - TEST_FIELD(EMRENDPATH, EMR, emr, 0, 8, 4); -} - -static void test_pack_EMREOF(void) -{ - /* EMREOF (pack 4) */ - TEST_TYPE(EMREOF, 20, 4); - TEST_FIELD(EMREOF, EMR, emr, 0, 8, 4); - TEST_FIELD(EMREOF, DWORD, nPalEntries, 8, 4, 4); - TEST_FIELD(EMREOF, DWORD, offPalEntries, 12, 4, 4); - TEST_FIELD(EMREOF, DWORD, nSizeLast, 16, 4, 4); -} - -static void test_pack_EMREXCLUDECLIPRECT(void) -{ - /* EMREXCLUDECLIPRECT (pack 4) */ - TEST_TYPE(EMREXCLUDECLIPRECT, 24, 4); - TEST_FIELD(EMREXCLUDECLIPRECT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMREXCLUDECLIPRECT, RECTL, rclClip, 8, 16, 4); -} - -static void test_pack_EMREXTCREATEFONTINDIRECTW(void) -{ - /* EMREXTCREATEFONTINDIRECTW (pack 4) */ - TEST_TYPE(EMREXTCREATEFONTINDIRECTW, 332, 4); - TEST_FIELD(EMREXTCREATEFONTINDIRECTW, EMR, emr, 0, 8, 4); - TEST_FIELD(EMREXTCREATEFONTINDIRECTW, DWORD, ihFont, 8, 4, 4); - TEST_FIELD(EMREXTCREATEFONTINDIRECTW, EXTLOGFONTW, elfw, 12, 320, 4); -} - -static void test_pack_EMREXTCREATEPEN(void) -{ - /* EMREXTCREATEPEN (pack 4) */ - TEST_TYPE(EMREXTCREATEPEN, 56, 4); - TEST_FIELD(EMREXTCREATEPEN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMREXTCREATEPEN, DWORD, ihPen, 8, 4, 4); - TEST_FIELD(EMREXTCREATEPEN, DWORD, offBmi, 12, 4, 4); - TEST_FIELD(EMREXTCREATEPEN, DWORD, cbBmi, 16, 4, 4); - TEST_FIELD(EMREXTCREATEPEN, DWORD, offBits, 20, 4, 4); - TEST_FIELD(EMREXTCREATEPEN, DWORD, cbBits, 24, 4, 4); - TEST_FIELD(EMREXTCREATEPEN, EXTLOGPEN, elp, 28, 28, 4); -} - -static void test_pack_EMREXTFLOODFILL(void) -{ - /* EMREXTFLOODFILL (pack 4) */ - TEST_TYPE(EMREXTFLOODFILL, 24, 4); - TEST_FIELD(EMREXTFLOODFILL, EMR, emr, 0, 8, 4); - TEST_FIELD(EMREXTFLOODFILL, POINTL, ptlStart, 8, 8, 4); - TEST_FIELD(EMREXTFLOODFILL, COLORREF, crColor, 16, 4, 4); - TEST_FIELD(EMREXTFLOODFILL, DWORD, iMode, 20, 4, 4); -} - -static void test_pack_EMREXTSELECTCLIPRGN(void) -{ - /* EMREXTSELECTCLIPRGN (pack 4) */ - TEST_TYPE(EMREXTSELECTCLIPRGN, 20, 4); - TEST_FIELD(EMREXTSELECTCLIPRGN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMREXTSELECTCLIPRGN, DWORD, cbRgnData, 8, 4, 4); - TEST_FIELD(EMREXTSELECTCLIPRGN, DWORD, iMode, 12, 4, 4); - TEST_FIELD(EMREXTSELECTCLIPRGN, BYTE[1], RgnData, 16, 1, 1); -} - -static void test_pack_EMREXTTEXTOUTA(void) -{ - /* EMREXTTEXTOUTA (pack 4) */ - TEST_TYPE(EMREXTTEXTOUTA, 76, 4); - TEST_FIELD(EMREXTTEXTOUTA, EMR, emr, 0, 8, 4); - TEST_FIELD(EMREXTTEXTOUTA, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMREXTTEXTOUTA, DWORD, iGraphicsMode, 24, 4, 4); - TEST_FIELD(EMREXTTEXTOUTA, FLOAT, exScale, 28, 4, 4); - TEST_FIELD(EMREXTTEXTOUTA, FLOAT, eyScale, 32, 4, 4); - TEST_FIELD(EMREXTTEXTOUTA, EMRTEXT, emrtext, 36, 40, 4); -} - -static void test_pack_EMREXTTEXTOUTW(void) -{ - /* EMREXTTEXTOUTW (pack 4) */ - TEST_TYPE(EMREXTTEXTOUTW, 76, 4); - TEST_FIELD(EMREXTTEXTOUTW, EMR, emr, 0, 8, 4); - TEST_FIELD(EMREXTTEXTOUTW, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMREXTTEXTOUTW, DWORD, iGraphicsMode, 24, 4, 4); - TEST_FIELD(EMREXTTEXTOUTW, FLOAT, exScale, 28, 4, 4); - TEST_FIELD(EMREXTTEXTOUTW, FLOAT, eyScale, 32, 4, 4); - TEST_FIELD(EMREXTTEXTOUTW, EMRTEXT, emrtext, 36, 40, 4); -} - -static void test_pack_EMRFILLPATH(void) -{ - /* EMRFILLPATH (pack 4) */ - TEST_TYPE(EMRFILLPATH, 24, 4); - TEST_FIELD(EMRFILLPATH, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRFILLPATH, RECTL, rclBounds, 8, 16, 4); -} - -static void test_pack_EMRFILLRGN(void) -{ - /* EMRFILLRGN (pack 4) */ - TEST_TYPE(EMRFILLRGN, 36, 4); - TEST_FIELD(EMRFILLRGN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRFILLRGN, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRFILLRGN, DWORD, cbRgnData, 24, 4, 4); - TEST_FIELD(EMRFILLRGN, DWORD, ihBrush, 28, 4, 4); - TEST_FIELD(EMRFILLRGN, BYTE[1], RgnData, 32, 1, 1); -} - -static void test_pack_EMRFLATTENPATH(void) -{ - /* EMRFLATTENPATH (pack 4) */ - TEST_TYPE(EMRFLATTENPATH, 8, 4); - TEST_FIELD(EMRFLATTENPATH, EMR, emr, 0, 8, 4); -} - -static void test_pack_EMRFORMAT(void) -{ - /* EMRFORMAT (pack 4) */ - TEST_TYPE(EMRFORMAT, 16, 4); - TEST_FIELD(EMRFORMAT, DWORD, dSignature, 0, 4, 4); - TEST_FIELD(EMRFORMAT, DWORD, nVersion, 4, 4, 4); - TEST_FIELD(EMRFORMAT, DWORD, cbData, 8, 4, 4); - TEST_FIELD(EMRFORMAT, DWORD, offData, 12, 4, 4); -} - -static void test_pack_EMRFRAMERGN(void) -{ - /* EMRFRAMERGN (pack 4) */ - TEST_TYPE(EMRFRAMERGN, 44, 4); - TEST_FIELD(EMRFRAMERGN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRFRAMERGN, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRFRAMERGN, DWORD, cbRgnData, 24, 4, 4); - TEST_FIELD(EMRFRAMERGN, DWORD, ihBrush, 28, 4, 4); - TEST_FIELD(EMRFRAMERGN, SIZEL, szlStroke, 32, 8, 4); - TEST_FIELD(EMRFRAMERGN, BYTE[1], RgnData, 40, 1, 1); -} - -static void test_pack_EMRGDICOMMENT(void) -{ - /* EMRGDICOMMENT (pack 4) */ - TEST_TYPE(EMRGDICOMMENT, 16, 4); - TEST_FIELD(EMRGDICOMMENT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRGDICOMMENT, DWORD, cbData, 8, 4, 4); - TEST_FIELD(EMRGDICOMMENT, BYTE[1], Data, 12, 1, 1); -} - -static void test_pack_EMRGLSBOUNDEDRECORD(void) -{ - /* EMRGLSBOUNDEDRECORD (pack 4) */ - TEST_TYPE(EMRGLSBOUNDEDRECORD, 32, 4); - TEST_FIELD(EMRGLSBOUNDEDRECORD, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRGLSBOUNDEDRECORD, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRGLSBOUNDEDRECORD, DWORD, cbData, 24, 4, 4); - TEST_FIELD(EMRGLSBOUNDEDRECORD, BYTE[1], Data, 28, 1, 1); -} - -static void test_pack_EMRGLSRECORD(void) -{ - /* EMRGLSRECORD (pack 4) */ - TEST_TYPE(EMRGLSRECORD, 16, 4); - TEST_FIELD(EMRGLSRECORD, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRGLSRECORD, DWORD, cbData, 8, 4, 4); - TEST_FIELD(EMRGLSRECORD, BYTE[1], Data, 12, 1, 1); -} - -static void test_pack_EMRINTERSECTCLIPRECT(void) -{ - /* EMRINTERSECTCLIPRECT (pack 4) */ - TEST_TYPE(EMRINTERSECTCLIPRECT, 24, 4); - TEST_FIELD(EMRINTERSECTCLIPRECT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRINTERSECTCLIPRECT, RECTL, rclClip, 8, 16, 4); -} - -static void test_pack_EMRINVERTRGN(void) -{ - /* EMRINVERTRGN (pack 4) */ - TEST_TYPE(EMRINVERTRGN, 32, 4); - TEST_FIELD(EMRINVERTRGN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRINVERTRGN, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRINVERTRGN, DWORD, cbRgnData, 24, 4, 4); - TEST_FIELD(EMRINVERTRGN, BYTE[1], RgnData, 28, 1, 1); -} - -static void test_pack_EMRLINETO(void) -{ - /* EMRLINETO (pack 4) */ - TEST_TYPE(EMRLINETO, 16, 4); - TEST_FIELD(EMRLINETO, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRLINETO, POINTL, ptl, 8, 8, 4); -} - -static void test_pack_EMRMASKBLT(void) -{ - /* EMRMASKBLT (pack 4) */ - TEST_TYPE(EMRMASKBLT, 128, 4); - TEST_FIELD(EMRMASKBLT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRMASKBLT, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRMASKBLT, LONG, xDest, 24, 4, 4); - TEST_FIELD(EMRMASKBLT, LONG, yDest, 28, 4, 4); - TEST_FIELD(EMRMASKBLT, LONG, cxDest, 32, 4, 4); - TEST_FIELD(EMRMASKBLT, LONG, cyDest, 36, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, dwRop, 40, 4, 4); - TEST_FIELD(EMRMASKBLT, LONG, xSrc, 44, 4, 4); - TEST_FIELD(EMRMASKBLT, LONG, ySrc, 48, 4, 4); - TEST_FIELD(EMRMASKBLT, XFORM, xformSrc, 52, 24, 4); - TEST_FIELD(EMRMASKBLT, COLORREF, crBkColorSrc, 76, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, iUsageSrc, 80, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, offBmiSrc, 84, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, cbBmiSrc, 88, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, offBitsSrc, 92, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, cbBitsSrc, 96, 4, 4); - TEST_FIELD(EMRMASKBLT, LONG, xMask, 100, 4, 4); - TEST_FIELD(EMRMASKBLT, LONG, yMask, 104, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, iUsageMask, 108, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, offBmiMask, 112, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, cbBmiMask, 116, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, offBitsMask, 120, 4, 4); - TEST_FIELD(EMRMASKBLT, DWORD, cbBitsMask, 124, 4, 4); -} - -static void test_pack_EMRMODIFYWORLDTRANSFORM(void) -{ - /* EMRMODIFYWORLDTRANSFORM (pack 4) */ - TEST_TYPE(EMRMODIFYWORLDTRANSFORM, 36, 4); - TEST_FIELD(EMRMODIFYWORLDTRANSFORM, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRMODIFYWORLDTRANSFORM, XFORM, xform, 8, 24, 4); - TEST_FIELD(EMRMODIFYWORLDTRANSFORM, DWORD, iMode, 32, 4, 4); -} - -static void test_pack_EMRMOVETOEX(void) -{ - /* EMRMOVETOEX (pack 4) */ - TEST_TYPE(EMRMOVETOEX, 16, 4); - TEST_FIELD(EMRMOVETOEX, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRMOVETOEX, POINTL, ptl, 8, 8, 4); -} - -static void test_pack_EMROFFSETCLIPRGN(void) -{ - /* EMROFFSETCLIPRGN (pack 4) */ - TEST_TYPE(EMROFFSETCLIPRGN, 16, 4); - TEST_FIELD(EMROFFSETCLIPRGN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMROFFSETCLIPRGN, POINTL, ptlOffset, 8, 8, 4); -} - -static void test_pack_EMRPAINTRGN(void) -{ - /* EMRPAINTRGN (pack 4) */ - TEST_TYPE(EMRPAINTRGN, 32, 4); - TEST_FIELD(EMRPAINTRGN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPAINTRGN, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPAINTRGN, DWORD, cbRgnData, 24, 4, 4); - TEST_FIELD(EMRPAINTRGN, BYTE[1], RgnData, 28, 1, 1); -} - -static void test_pack_EMRPIE(void) -{ - /* EMRPIE (pack 4) */ - TEST_TYPE(EMRPIE, 40, 4); - TEST_FIELD(EMRPIE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPIE, RECTL, rclBox, 8, 16, 4); - TEST_FIELD(EMRPIE, POINTL, ptlStart, 24, 8, 4); - TEST_FIELD(EMRPIE, POINTL, ptlEnd, 32, 8, 4); -} - -static void test_pack_EMRPIXELFORMAT(void) -{ - /* EMRPIXELFORMAT (pack 4) */ - TEST_TYPE(EMRPIXELFORMAT, 48, 4); - TEST_FIELD(EMRPIXELFORMAT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPIXELFORMAT, PIXELFORMATDESCRIPTOR, pfd, 8, 40, 4); -} - -static void test_pack_EMRPLGBLT(void) -{ - /* EMRPLGBLT (pack 4) */ - TEST_TYPE(EMRPLGBLT, 140, 4); - TEST_FIELD(EMRPLGBLT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPLGBLT, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPLGBLT, POINTL[3], aptlDest, 24, 24, 4); - TEST_FIELD(EMRPLGBLT, LONG, xSrc, 48, 4, 4); - TEST_FIELD(EMRPLGBLT, LONG, ySrc, 52, 4, 4); - TEST_FIELD(EMRPLGBLT, LONG, cxSrc, 56, 4, 4); - TEST_FIELD(EMRPLGBLT, LONG, cySrc, 60, 4, 4); - TEST_FIELD(EMRPLGBLT, XFORM, xformSrc, 64, 24, 4); - TEST_FIELD(EMRPLGBLT, COLORREF, crBkColorSrc, 88, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, iUsageSrc, 92, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, offBmiSrc, 96, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, cbBmiSrc, 100, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, offBitsSrc, 104, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, cbBitsSrc, 108, 4, 4); - TEST_FIELD(EMRPLGBLT, LONG, xMask, 112, 4, 4); - TEST_FIELD(EMRPLGBLT, LONG, yMask, 116, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, iUsageMask, 120, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, offBmiMask, 124, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, cbBmiMask, 128, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, offBitsMask, 132, 4, 4); - TEST_FIELD(EMRPLGBLT, DWORD, cbBitsMask, 136, 4, 4); -} - -static void test_pack_EMRPOLYBEZIER(void) -{ - /* EMRPOLYBEZIER (pack 4) */ - TEST_TYPE(EMRPOLYBEZIER, 36, 4); - TEST_FIELD(EMRPOLYBEZIER, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYBEZIER, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYBEZIER, DWORD, cptl, 24, 4, 4); - TEST_FIELD(EMRPOLYBEZIER, POINTL[1], aptl, 28, 8, 4); -} - -static void test_pack_EMRPOLYBEZIER16(void) -{ - /* EMRPOLYBEZIER16 (pack 4) */ - TEST_TYPE(EMRPOLYBEZIER16, 32, 4); - TEST_FIELD(EMRPOLYBEZIER16, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYBEZIER16, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYBEZIER16, DWORD, cpts, 24, 4, 4); - TEST_FIELD(EMRPOLYBEZIER16, POINTS[1], apts, 28, 4, 2); -} - -static void test_pack_EMRPOLYBEZIERTO(void) -{ - /* EMRPOLYBEZIERTO (pack 4) */ - TEST_TYPE(EMRPOLYBEZIERTO, 36, 4); - TEST_FIELD(EMRPOLYBEZIERTO, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYBEZIERTO, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYBEZIERTO, DWORD, cptl, 24, 4, 4); - TEST_FIELD(EMRPOLYBEZIERTO, POINTL[1], aptl, 28, 8, 4); -} - -static void test_pack_EMRPOLYBEZIERTO16(void) -{ - /* EMRPOLYBEZIERTO16 (pack 4) */ - TEST_TYPE(EMRPOLYBEZIERTO16, 32, 4); - TEST_FIELD(EMRPOLYBEZIERTO16, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYBEZIERTO16, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYBEZIERTO16, DWORD, cpts, 24, 4, 4); - TEST_FIELD(EMRPOLYBEZIERTO16, POINTS[1], apts, 28, 4, 2); -} - -static void test_pack_EMRPOLYDRAW(void) -{ - /* EMRPOLYDRAW (pack 4) */ - TEST_TYPE(EMRPOLYDRAW, 40, 4); - TEST_FIELD(EMRPOLYDRAW, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYDRAW, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYDRAW, DWORD, cptl, 24, 4, 4); - TEST_FIELD(EMRPOLYDRAW, POINTL[1], aptl, 28, 8, 4); - TEST_FIELD(EMRPOLYDRAW, BYTE[1], abTypes, 36, 1, 1); -} - -static void test_pack_EMRPOLYDRAW16(void) -{ - /* EMRPOLYDRAW16 (pack 4) */ - TEST_TYPE(EMRPOLYDRAW16, 36, 4); - TEST_FIELD(EMRPOLYDRAW16, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYDRAW16, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYDRAW16, DWORD, cpts, 24, 4, 4); - TEST_FIELD(EMRPOLYDRAW16, POINTS[1], apts, 28, 4, 2); - TEST_FIELD(EMRPOLYDRAW16, BYTE[1], abTypes, 32, 1, 1); -} - -static void test_pack_EMRPOLYGON(void) -{ - /* EMRPOLYGON (pack 4) */ - TEST_TYPE(EMRPOLYGON, 36, 4); - TEST_FIELD(EMRPOLYGON, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYGON, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYGON, DWORD, cptl, 24, 4, 4); - TEST_FIELD(EMRPOLYGON, POINTL[1], aptl, 28, 8, 4); -} - -static void test_pack_EMRPOLYGON16(void) -{ - /* EMRPOLYGON16 (pack 4) */ - TEST_TYPE(EMRPOLYGON16, 32, 4); - TEST_FIELD(EMRPOLYGON16, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYGON16, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYGON16, DWORD, cpts, 24, 4, 4); - TEST_FIELD(EMRPOLYGON16, POINTS[1], apts, 28, 4, 2); -} - -static void test_pack_EMRPOLYLINE(void) -{ - /* EMRPOLYLINE (pack 4) */ - TEST_TYPE(EMRPOLYLINE, 36, 4); - TEST_FIELD(EMRPOLYLINE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYLINE, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYLINE, DWORD, cptl, 24, 4, 4); - TEST_FIELD(EMRPOLYLINE, POINTL[1], aptl, 28, 8, 4); -} - -static void test_pack_EMRPOLYLINE16(void) -{ - /* EMRPOLYLINE16 (pack 4) */ - TEST_TYPE(EMRPOLYLINE16, 32, 4); - TEST_FIELD(EMRPOLYLINE16, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYLINE16, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYLINE16, DWORD, cpts, 24, 4, 4); - TEST_FIELD(EMRPOLYLINE16, POINTS[1], apts, 28, 4, 2); -} - -static void test_pack_EMRPOLYLINETO(void) -{ - /* EMRPOLYLINETO (pack 4) */ - TEST_TYPE(EMRPOLYLINETO, 36, 4); - TEST_FIELD(EMRPOLYLINETO, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYLINETO, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYLINETO, DWORD, cptl, 24, 4, 4); - TEST_FIELD(EMRPOLYLINETO, POINTL[1], aptl, 28, 8, 4); -} - -static void test_pack_EMRPOLYLINETO16(void) -{ - /* EMRPOLYLINETO16 (pack 4) */ - TEST_TYPE(EMRPOLYLINETO16, 32, 4); - TEST_FIELD(EMRPOLYLINETO16, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYLINETO16, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYLINETO16, DWORD, cpts, 24, 4, 4); - TEST_FIELD(EMRPOLYLINETO16, POINTS[1], apts, 28, 4, 2); -} - -static void test_pack_EMRPOLYPOLYGON(void) -{ - /* EMRPOLYPOLYGON (pack 4) */ - TEST_TYPE(EMRPOLYPOLYGON, 44, 4); - TEST_FIELD(EMRPOLYPOLYGON, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYPOLYGON, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYPOLYGON, DWORD, nPolys, 24, 4, 4); - TEST_FIELD(EMRPOLYPOLYGON, DWORD, cptl, 28, 4, 4); - TEST_FIELD(EMRPOLYPOLYGON, DWORD[1], aPolyCounts, 32, 4, 4); - TEST_FIELD(EMRPOLYPOLYGON, POINTL[1], aptl, 36, 8, 4); -} - -static void test_pack_EMRPOLYPOLYGON16(void) -{ - /* EMRPOLYPOLYGON16 (pack 4) */ - TEST_TYPE(EMRPOLYPOLYGON16, 40, 4); - TEST_FIELD(EMRPOLYPOLYGON16, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYPOLYGON16, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYPOLYGON16, DWORD, nPolys, 24, 4, 4); - TEST_FIELD(EMRPOLYPOLYGON16, DWORD, cpts, 28, 4, 4); - TEST_FIELD(EMRPOLYPOLYGON16, DWORD[1], aPolyCounts, 32, 4, 4); - TEST_FIELD(EMRPOLYPOLYGON16, POINTS[1], apts, 36, 4, 2); -} - -static void test_pack_EMRPOLYPOLYLINE(void) -{ - /* EMRPOLYPOLYLINE (pack 4) */ - TEST_TYPE(EMRPOLYPOLYLINE, 44, 4); - TEST_FIELD(EMRPOLYPOLYLINE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYPOLYLINE, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYPOLYLINE, DWORD, nPolys, 24, 4, 4); - TEST_FIELD(EMRPOLYPOLYLINE, DWORD, cptl, 28, 4, 4); - TEST_FIELD(EMRPOLYPOLYLINE, DWORD[1], aPolyCounts, 32, 4, 4); - TEST_FIELD(EMRPOLYPOLYLINE, POINTL[1], aptl, 36, 8, 4); -} - -static void test_pack_EMRPOLYPOLYLINE16(void) -{ - /* EMRPOLYPOLYLINE16 (pack 4) */ - TEST_TYPE(EMRPOLYPOLYLINE16, 40, 4); - TEST_FIELD(EMRPOLYPOLYLINE16, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYPOLYLINE16, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYPOLYLINE16, DWORD, nPolys, 24, 4, 4); - TEST_FIELD(EMRPOLYPOLYLINE16, DWORD, cpts, 28, 4, 4); - TEST_FIELD(EMRPOLYPOLYLINE16, DWORD[1], aPolyCounts, 32, 4, 4); - TEST_FIELD(EMRPOLYPOLYLINE16, POINTS[1], apts, 36, 4, 2); -} - -static void test_pack_EMRPOLYTEXTOUTA(void) -{ - /* EMRPOLYTEXTOUTA (pack 4) */ - TEST_TYPE(EMRPOLYTEXTOUTA, 80, 4); - TEST_FIELD(EMRPOLYTEXTOUTA, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYTEXTOUTA, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYTEXTOUTA, DWORD, iGraphicsMode, 24, 4, 4); - TEST_FIELD(EMRPOLYTEXTOUTA, FLOAT, exScale, 28, 4, 4); - TEST_FIELD(EMRPOLYTEXTOUTA, FLOAT, eyScale, 32, 4, 4); - TEST_FIELD(EMRPOLYTEXTOUTA, LONG, cStrings, 36, 4, 4); - TEST_FIELD(EMRPOLYTEXTOUTA, EMRTEXT[1], aemrtext, 40, 40, 4); -} - -static void test_pack_EMRPOLYTEXTOUTW(void) -{ - /* EMRPOLYTEXTOUTW (pack 4) */ - TEST_TYPE(EMRPOLYTEXTOUTW, 80, 4); - TEST_FIELD(EMRPOLYTEXTOUTW, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRPOLYTEXTOUTW, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRPOLYTEXTOUTW, DWORD, iGraphicsMode, 24, 4, 4); - TEST_FIELD(EMRPOLYTEXTOUTW, FLOAT, exScale, 28, 4, 4); - TEST_FIELD(EMRPOLYTEXTOUTW, FLOAT, eyScale, 32, 4, 4); - TEST_FIELD(EMRPOLYTEXTOUTW, LONG, cStrings, 36, 4, 4); - TEST_FIELD(EMRPOLYTEXTOUTW, EMRTEXT[1], aemrtext, 40, 40, 4); -} - -static void test_pack_EMRREALIZEPALETTE(void) -{ - /* EMRREALIZEPALETTE (pack 4) */ - TEST_TYPE(EMRREALIZEPALETTE, 8, 4); - TEST_FIELD(EMRREALIZEPALETTE, EMR, emr, 0, 8, 4); -} - -static void test_pack_EMRRECTANGLE(void) -{ - /* EMRRECTANGLE (pack 4) */ - TEST_TYPE(EMRRECTANGLE, 24, 4); - TEST_FIELD(EMRRECTANGLE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRRECTANGLE, RECTL, rclBox, 8, 16, 4); -} - -static void test_pack_EMRRESIZEPALETTE(void) -{ - /* EMRRESIZEPALETTE (pack 4) */ - TEST_TYPE(EMRRESIZEPALETTE, 16, 4); - TEST_FIELD(EMRRESIZEPALETTE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRRESIZEPALETTE, DWORD, ihPal, 8, 4, 4); - TEST_FIELD(EMRRESIZEPALETTE, DWORD, cEntries, 12, 4, 4); -} - -static void test_pack_EMRRESTOREDC(void) -{ - /* EMRRESTOREDC (pack 4) */ - TEST_TYPE(EMRRESTOREDC, 12, 4); - TEST_FIELD(EMRRESTOREDC, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRRESTOREDC, LONG, iRelative, 8, 4, 4); -} - -static void test_pack_EMRROUNDRECT(void) -{ - /* EMRROUNDRECT (pack 4) */ - TEST_TYPE(EMRROUNDRECT, 32, 4); - TEST_FIELD(EMRROUNDRECT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRROUNDRECT, RECTL, rclBox, 8, 16, 4); - TEST_FIELD(EMRROUNDRECT, SIZEL, szlCorner, 24, 8, 4); -} - -static void test_pack_EMRSAVEDC(void) -{ - /* EMRSAVEDC (pack 4) */ - TEST_TYPE(EMRSAVEDC, 8, 4); - TEST_FIELD(EMRSAVEDC, EMR, emr, 0, 8, 4); -} - -static void test_pack_EMRSCALEVIEWPORTEXTEX(void) -{ - /* EMRSCALEVIEWPORTEXTEX (pack 4) */ - TEST_TYPE(EMRSCALEVIEWPORTEXTEX, 24, 4); - TEST_FIELD(EMRSCALEVIEWPORTEXTEX, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSCALEVIEWPORTEXTEX, LONG, xNum, 8, 4, 4); - TEST_FIELD(EMRSCALEVIEWPORTEXTEX, LONG, xDenom, 12, 4, 4); - TEST_FIELD(EMRSCALEVIEWPORTEXTEX, LONG, yNum, 16, 4, 4); - TEST_FIELD(EMRSCALEVIEWPORTEXTEX, LONG, yDenom, 20, 4, 4); -} - -static void test_pack_EMRSCALEWINDOWEXTEX(void) -{ - /* EMRSCALEWINDOWEXTEX (pack 4) */ - TEST_TYPE(EMRSCALEWINDOWEXTEX, 24, 4); - TEST_FIELD(EMRSCALEWINDOWEXTEX, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSCALEWINDOWEXTEX, LONG, xNum, 8, 4, 4); - TEST_FIELD(EMRSCALEWINDOWEXTEX, LONG, xDenom, 12, 4, 4); - TEST_FIELD(EMRSCALEWINDOWEXTEX, LONG, yNum, 16, 4, 4); - TEST_FIELD(EMRSCALEWINDOWEXTEX, LONG, yDenom, 20, 4, 4); -} - -static void test_pack_EMRSELECTCLIPPATH(void) -{ - /* EMRSELECTCLIPPATH (pack 4) */ - TEST_TYPE(EMRSELECTCLIPPATH, 12, 4); - TEST_FIELD(EMRSELECTCLIPPATH, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSELECTCLIPPATH, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSELECTCOLORSPACE(void) -{ - /* EMRSELECTCOLORSPACE (pack 4) */ - TEST_TYPE(EMRSELECTCOLORSPACE, 12, 4); - TEST_FIELD(EMRSELECTCOLORSPACE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSELECTCOLORSPACE, DWORD, ihCS, 8, 4, 4); -} - -static void test_pack_EMRSELECTOBJECT(void) -{ - /* EMRSELECTOBJECT (pack 4) */ - TEST_TYPE(EMRSELECTOBJECT, 12, 4); - TEST_FIELD(EMRSELECTOBJECT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSELECTOBJECT, DWORD, ihObject, 8, 4, 4); -} - -static void test_pack_EMRSELECTPALETTE(void) -{ - /* EMRSELECTPALETTE (pack 4) */ - TEST_TYPE(EMRSELECTPALETTE, 12, 4); - TEST_FIELD(EMRSELECTPALETTE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSELECTPALETTE, DWORD, ihPal, 8, 4, 4); -} - -static void test_pack_EMRSETARCDIRECTION(void) -{ - /* EMRSETARCDIRECTION (pack 4) */ - TEST_TYPE(EMRSETARCDIRECTION, 12, 4); - TEST_FIELD(EMRSETARCDIRECTION, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETARCDIRECTION, DWORD, iArcDirection, 8, 4, 4); -} - -static void test_pack_EMRSETBKCOLOR(void) -{ - /* EMRSETBKCOLOR (pack 4) */ - TEST_TYPE(EMRSETBKCOLOR, 12, 4); - TEST_FIELD(EMRSETBKCOLOR, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETBKCOLOR, COLORREF, crColor, 8, 4, 4); -} - -static void test_pack_EMRSETBKMODE(void) -{ - /* EMRSETBKMODE (pack 4) */ - TEST_TYPE(EMRSETBKMODE, 12, 4); - TEST_FIELD(EMRSETBKMODE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETBKMODE, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSETBRUSHORGEX(void) -{ - /* EMRSETBRUSHORGEX (pack 4) */ - TEST_TYPE(EMRSETBRUSHORGEX, 16, 4); - TEST_FIELD(EMRSETBRUSHORGEX, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETBRUSHORGEX, POINTL, ptlOrigin, 8, 8, 4); -} - -static void test_pack_EMRSETCOLORADJUSTMENT(void) -{ - /* EMRSETCOLORADJUSTMENT (pack 4) */ - TEST_TYPE(EMRSETCOLORADJUSTMENT, 32, 4); - TEST_FIELD(EMRSETCOLORADJUSTMENT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETCOLORADJUSTMENT, COLORADJUSTMENT, ColorAdjustment, 8, 24, 2); -} - -static void test_pack_EMRSETCOLORSPACE(void) -{ - /* EMRSETCOLORSPACE (pack 4) */ - TEST_TYPE(EMRSETCOLORSPACE, 12, 4); - TEST_FIELD(EMRSETCOLORSPACE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETCOLORSPACE, DWORD, ihCS, 8, 4, 4); -} - -static void test_pack_EMRSETDIBITSTODEVICE(void) -{ - /* EMRSETDIBITSTODEVICE (pack 4) */ - TEST_TYPE(EMRSETDIBITSTODEVICE, 76, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, xDest, 24, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, yDest, 28, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, xSrc, 32, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, ySrc, 36, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, cxSrc, 40, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, cySrc, 44, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, offBmiSrc, 48, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, cbBmiSrc, 52, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, offBitsSrc, 56, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, cbBitsSrc, 60, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, iUsageSrc, 64, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, iStartScan, 68, 4, 4); - TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, cScans, 72, 4, 4); -} - -static void test_pack_EMRSETICMMODE(void) -{ - /* EMRSETICMMODE (pack 4) */ - TEST_TYPE(EMRSETICMMODE, 12, 4); - TEST_FIELD(EMRSETICMMODE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETICMMODE, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSETLAYOUT(void) -{ - /* EMRSETLAYOUT (pack 4) */ - TEST_TYPE(EMRSETLAYOUT, 12, 4); - TEST_FIELD(EMRSETLAYOUT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETLAYOUT, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSETMAPMODE(void) -{ - /* EMRSETMAPMODE (pack 4) */ - TEST_TYPE(EMRSETMAPMODE, 12, 4); - TEST_FIELD(EMRSETMAPMODE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETMAPMODE, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSETMAPPERFLAGS(void) -{ - /* EMRSETMAPPERFLAGS (pack 4) */ - TEST_TYPE(EMRSETMAPPERFLAGS, 12, 4); - TEST_FIELD(EMRSETMAPPERFLAGS, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETMAPPERFLAGS, DWORD, dwFlags, 8, 4, 4); -} - -static void test_pack_EMRSETMETARGN(void) -{ - /* EMRSETMETARGN (pack 4) */ - TEST_TYPE(EMRSETMETARGN, 8, 4); - TEST_FIELD(EMRSETMETARGN, EMR, emr, 0, 8, 4); -} - -static void test_pack_EMRSETMITERLIMIT(void) -{ - /* EMRSETMITERLIMIT (pack 4) */ - TEST_TYPE(EMRSETMITERLIMIT, 12, 4); - TEST_FIELD(EMRSETMITERLIMIT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETMITERLIMIT, FLOAT, eMiterLimit, 8, 4, 4); -} - -static void test_pack_EMRSETPIXELV(void) -{ - /* EMRSETPIXELV (pack 4) */ - TEST_TYPE(EMRSETPIXELV, 20, 4); - TEST_FIELD(EMRSETPIXELV, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETPIXELV, POINTL, ptlPixel, 8, 8, 4); - TEST_FIELD(EMRSETPIXELV, COLORREF, crColor, 16, 4, 4); -} - -static void test_pack_EMRSETPOLYFILLMODE(void) -{ - /* EMRSETPOLYFILLMODE (pack 4) */ - TEST_TYPE(EMRSETPOLYFILLMODE, 12, 4); - TEST_FIELD(EMRSETPOLYFILLMODE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETPOLYFILLMODE, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSETROP2(void) -{ - /* EMRSETROP2 (pack 4) */ - TEST_TYPE(EMRSETROP2, 12, 4); - TEST_FIELD(EMRSETROP2, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETROP2, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSETSTRETCHBLTMODE(void) -{ - /* EMRSETSTRETCHBLTMODE (pack 4) */ - TEST_TYPE(EMRSETSTRETCHBLTMODE, 12, 4); - TEST_FIELD(EMRSETSTRETCHBLTMODE, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETSTRETCHBLTMODE, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSETTEXTALIGN(void) -{ - /* EMRSETTEXTALIGN (pack 4) */ - TEST_TYPE(EMRSETTEXTALIGN, 12, 4); - TEST_FIELD(EMRSETTEXTALIGN, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETTEXTALIGN, DWORD, iMode, 8, 4, 4); -} - -static void test_pack_EMRSETTEXTCOLOR(void) -{ - /* EMRSETTEXTCOLOR (pack 4) */ - TEST_TYPE(EMRSETTEXTCOLOR, 12, 4); - TEST_FIELD(EMRSETTEXTCOLOR, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETTEXTCOLOR, COLORREF, crColor, 8, 4, 4); -} - -static void test_pack_EMRSETVIEWPORTEXTEX(void) -{ - /* EMRSETVIEWPORTEXTEX (pack 4) */ - TEST_TYPE(EMRSETVIEWPORTEXTEX, 16, 4); - TEST_FIELD(EMRSETVIEWPORTEXTEX, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETVIEWPORTEXTEX, SIZEL, szlExtent, 8, 8, 4); -} - -static void test_pack_EMRSETVIEWPORTORGEX(void) -{ - /* EMRSETVIEWPORTORGEX (pack 4) */ - TEST_TYPE(EMRSETVIEWPORTORGEX, 16, 4); - TEST_FIELD(EMRSETVIEWPORTORGEX, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETVIEWPORTORGEX, POINTL, ptlOrigin, 8, 8, 4); -} - -static void test_pack_EMRSETWINDOWEXTEX(void) -{ - /* EMRSETWINDOWEXTEX (pack 4) */ - TEST_TYPE(EMRSETWINDOWEXTEX, 16, 4); - TEST_FIELD(EMRSETWINDOWEXTEX, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETWINDOWEXTEX, SIZEL, szlExtent, 8, 8, 4); -} - -static void test_pack_EMRSETWINDOWORGEX(void) -{ - /* EMRSETWINDOWORGEX (pack 4) */ - TEST_TYPE(EMRSETWINDOWORGEX, 16, 4); - TEST_FIELD(EMRSETWINDOWORGEX, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETWINDOWORGEX, POINTL, ptlOrigin, 8, 8, 4); -} - -static void test_pack_EMRSETWORLDTRANSFORM(void) -{ - /* EMRSETWORLDTRANSFORM (pack 4) */ - TEST_TYPE(EMRSETWORLDTRANSFORM, 32, 4); - TEST_FIELD(EMRSETWORLDTRANSFORM, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSETWORLDTRANSFORM, XFORM, xform, 8, 24, 4); -} - -static void test_pack_EMRSTRETCHBLT(void) -{ - /* EMRSTRETCHBLT (pack 4) */ - TEST_TYPE(EMRSTRETCHBLT, 108, 4); - TEST_FIELD(EMRSTRETCHBLT, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSTRETCHBLT, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRSTRETCHBLT, LONG, xDest, 24, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, LONG, yDest, 28, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, LONG, cxDest, 32, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, LONG, cyDest, 36, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, DWORD, dwRop, 40, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, LONG, xSrc, 44, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, LONG, ySrc, 48, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, XFORM, xformSrc, 52, 24, 4); - TEST_FIELD(EMRSTRETCHBLT, COLORREF, crBkColorSrc, 76, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, DWORD, iUsageSrc, 80, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, DWORD, offBmiSrc, 84, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, DWORD, cbBmiSrc, 88, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, DWORD, offBitsSrc, 92, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, DWORD, cbBitsSrc, 96, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, LONG, cxSrc, 100, 4, 4); - TEST_FIELD(EMRSTRETCHBLT, LONG, cySrc, 104, 4, 4); -} - -static void test_pack_EMRSTRETCHDIBITS(void) -{ - /* EMRSTRETCHDIBITS (pack 4) */ - TEST_TYPE(EMRSTRETCHDIBITS, 80, 4); - TEST_FIELD(EMRSTRETCHDIBITS, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSTRETCHDIBITS, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(EMRSTRETCHDIBITS, LONG, xDest, 24, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, LONG, yDest, 28, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, LONG, xSrc, 32, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, LONG, ySrc, 36, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, LONG, cxSrc, 40, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, LONG, cySrc, 44, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, DWORD, offBmiSrc, 48, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, DWORD, cbBmiSrc, 52, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, DWORD, offBitsSrc, 56, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, DWORD, cbBitsSrc, 60, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, DWORD, iUsageSrc, 64, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, DWORD, dwRop, 68, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, LONG, cxDest, 72, 4, 4); - TEST_FIELD(EMRSTRETCHDIBITS, LONG, cyDest, 76, 4, 4); -} - -static void test_pack_EMRSTROKEANDFILLPATH(void) -{ - /* EMRSTROKEANDFILLPATH (pack 4) */ - TEST_TYPE(EMRSTROKEANDFILLPATH, 24, 4); - TEST_FIELD(EMRSTROKEANDFILLPATH, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSTROKEANDFILLPATH, RECTL, rclBounds, 8, 16, 4); -} - -static void test_pack_EMRSTROKEPATH(void) -{ - /* EMRSTROKEPATH (pack 4) */ - TEST_TYPE(EMRSTROKEPATH, 24, 4); - TEST_FIELD(EMRSTROKEPATH, EMR, emr, 0, 8, 4); - TEST_FIELD(EMRSTROKEPATH, RECTL, rclBounds, 8, 16, 4); -} - -static void test_pack_EMRTEXT(void) -{ - /* EMRTEXT (pack 4) */ - TEST_TYPE(EMRTEXT, 40, 4); - TEST_FIELD(EMRTEXT, POINTL, ptlReference, 0, 8, 4); - TEST_FIELD(EMRTEXT, DWORD, nChars, 8, 4, 4); - TEST_FIELD(EMRTEXT, DWORD, offString, 12, 4, 4); - TEST_FIELD(EMRTEXT, DWORD, fOptions, 16, 4, 4); - TEST_FIELD(EMRTEXT, RECTL, rcl, 20, 16, 4); - TEST_FIELD(EMRTEXT, DWORD, offDx, 36, 4, 4); -} - -static void test_pack_EMRWIDENPATH(void) -{ - /* EMRWIDENPATH (pack 4) */ - TEST_TYPE(EMRWIDENPATH, 8, 4); - TEST_FIELD(EMRWIDENPATH, EMR, emr, 0, 8, 4); -} - -static void test_pack_ENHMETAHEADER(void) -{ - /* ENHMETAHEADER (pack 4) */ - TEST_TYPE(ENHMETAHEADER, 108, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, iType, 0, 4, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, nSize, 4, 4, 4); - TEST_FIELD(ENHMETAHEADER, RECTL, rclBounds, 8, 16, 4); - TEST_FIELD(ENHMETAHEADER, RECTL, rclFrame, 24, 16, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, dSignature, 40, 4, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, nVersion, 44, 4, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, nBytes, 48, 4, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, nRecords, 52, 4, 4); - TEST_FIELD(ENHMETAHEADER, WORD, nHandles, 56, 2, 2); - TEST_FIELD(ENHMETAHEADER, WORD, sReserved, 58, 2, 2); - TEST_FIELD(ENHMETAHEADER, DWORD, nDescription, 60, 4, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, offDescription, 64, 4, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, nPalEntries, 68, 4, 4); - TEST_FIELD(ENHMETAHEADER, SIZEL, szlDevice, 72, 8, 4); - TEST_FIELD(ENHMETAHEADER, SIZEL, szlMillimeters, 80, 8, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, cbPixelFormat, 88, 4, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, offPixelFormat, 92, 4, 4); - TEST_FIELD(ENHMETAHEADER, DWORD, bOpenGL, 96, 4, 4); - TEST_FIELD(ENHMETAHEADER, SIZEL, szlMicrometers, 100, 8, 4); -} - -static void test_pack_ENHMETARECORD(void) -{ - /* ENHMETARECORD (pack 4) */ - TEST_TYPE(ENHMETARECORD, 12, 4); - TEST_FIELD(ENHMETARECORD, DWORD, iType, 0, 4, 4); - TEST_FIELD(ENHMETARECORD, DWORD, nSize, 4, 4, 4); - TEST_FIELD(ENHMETARECORD, DWORD[1], dParm, 8, 4, 4); -} - -static void test_pack_ENHMFENUMPROC(void) -{ - /* ENHMFENUMPROC */ - TEST_TYPE(ENHMFENUMPROC, 4, 4); -} - -static void test_pack_ENUMLOGFONTA(void) -{ - /* ENUMLOGFONTA (pack 4) */ - TEST_TYPE(ENUMLOGFONTA, 156, 4); - TEST_FIELD(ENUMLOGFONTA, LOGFONTA, elfLogFont, 0, 60, 4); - TEST_FIELD(ENUMLOGFONTA, BYTE[LF_FULLFACESIZE], elfFullName, 60, 64, 1); - TEST_FIELD(ENUMLOGFONTA, BYTE[LF_FACESIZE], elfStyle, 124, 32, 1); -} - -static void test_pack_ENUMLOGFONTEXA(void) -{ - /* ENUMLOGFONTEXA (pack 4) */ - TEST_TYPE(ENUMLOGFONTEXA, 188, 4); - TEST_FIELD(ENUMLOGFONTEXA, LOGFONTA, elfLogFont, 0, 60, 4); - TEST_FIELD(ENUMLOGFONTEXA, BYTE[LF_FULLFACESIZE], elfFullName, 60, 64, 1); - TEST_FIELD(ENUMLOGFONTEXA, BYTE[LF_FACESIZE], elfStyle, 124, 32, 1); - TEST_FIELD(ENUMLOGFONTEXA, BYTE[LF_FACESIZE], elfScript, 156, 32, 1); -} - -static void test_pack_ENUMLOGFONTEXW(void) -{ - /* ENUMLOGFONTEXW (pack 4) */ - TEST_TYPE(ENUMLOGFONTEXW, 348, 4); - TEST_FIELD(ENUMLOGFONTEXW, LOGFONTW, elfLogFont, 0, 92, 4); - TEST_FIELD(ENUMLOGFONTEXW, WCHAR[LF_FULLFACESIZE], elfFullName, 92, 128, 2); - TEST_FIELD(ENUMLOGFONTEXW, WCHAR[LF_FACESIZE], elfStyle, 220, 64, 2); - TEST_FIELD(ENUMLOGFONTEXW, WCHAR[LF_FACESIZE], elfScript, 284, 64, 2); -} - -static void test_pack_ENUMLOGFONTW(void) -{ - /* ENUMLOGFONTW (pack 4) */ - TEST_TYPE(ENUMLOGFONTW, 284, 4); - TEST_FIELD(ENUMLOGFONTW, LOGFONTW, elfLogFont, 0, 92, 4); - TEST_FIELD(ENUMLOGFONTW, WCHAR[LF_FULLFACESIZE], elfFullName, 92, 128, 2); - TEST_FIELD(ENUMLOGFONTW, WCHAR[LF_FACESIZE], elfStyle, 220, 64, 2); -} - -static void test_pack_EXTLOGFONTA(void) -{ - /* EXTLOGFONTA (pack 4) */ - TEST_TYPE(EXTLOGFONTA, 192, 4); - TEST_FIELD(EXTLOGFONTA, LOGFONTA, elfLogFont, 0, 60, 4); - TEST_FIELD(EXTLOGFONTA, BYTE[LF_FULLFACESIZE], elfFullName, 60, 64, 1); - TEST_FIELD(EXTLOGFONTA, BYTE[LF_FACESIZE], elfStyle, 124, 32, 1); - TEST_FIELD(EXTLOGFONTA, DWORD, elfVersion, 156, 4, 4); - TEST_FIELD(EXTLOGFONTA, DWORD, elfStyleSize, 160, 4, 4); - TEST_FIELD(EXTLOGFONTA, DWORD, elfMatch, 164, 4, 4); - TEST_FIELD(EXTLOGFONTA, DWORD, elfReserved, 168, 4, 4); - TEST_FIELD(EXTLOGFONTA, BYTE[ELF_VENDOR_SIZE], elfVendorId, 172, 4, 1); - TEST_FIELD(EXTLOGFONTA, DWORD, elfCulture, 176, 4, 4); - TEST_FIELD(EXTLOGFONTA, PANOSE, elfPanose, 180, 10, 1); -} - -static void test_pack_EXTLOGFONTW(void) -{ - /* EXTLOGFONTW (pack 4) */ - TEST_TYPE(EXTLOGFONTW, 320, 4); - TEST_FIELD(EXTLOGFONTW, LOGFONTW, elfLogFont, 0, 92, 4); - TEST_FIELD(EXTLOGFONTW, WCHAR[LF_FULLFACESIZE], elfFullName, 92, 128, 2); - TEST_FIELD(EXTLOGFONTW, WCHAR[LF_FACESIZE], elfStyle, 220, 64, 2); - TEST_FIELD(EXTLOGFONTW, DWORD, elfVersion, 284, 4, 4); - TEST_FIELD(EXTLOGFONTW, DWORD, elfStyleSize, 288, 4, 4); - TEST_FIELD(EXTLOGFONTW, DWORD, elfMatch, 292, 4, 4); - TEST_FIELD(EXTLOGFONTW, DWORD, elfReserved, 296, 4, 4); - TEST_FIELD(EXTLOGFONTW, BYTE[ELF_VENDOR_SIZE], elfVendorId, 300, 4, 1); - TEST_FIELD(EXTLOGFONTW, DWORD, elfCulture, 304, 4, 4); - TEST_FIELD(EXTLOGFONTW, PANOSE, elfPanose, 308, 10, 1); -} - -static void test_pack_EXTLOGPEN(void) -{ - /* EXTLOGPEN (pack 4) */ - TEST_TYPE(EXTLOGPEN, 28, 4); - TEST_FIELD(EXTLOGPEN, DWORD, elpPenStyle, 0, 4, 4); - TEST_FIELD(EXTLOGPEN, DWORD, elpWidth, 4, 4, 4); - TEST_FIELD(EXTLOGPEN, UINT, elpBrushStyle, 8, 4, 4); - TEST_FIELD(EXTLOGPEN, COLORREF, elpColor, 12, 4, 4); - TEST_FIELD(EXTLOGPEN, ULONG_PTR, elpHatch, 16, 4, 4); - TEST_FIELD(EXTLOGPEN, DWORD, elpNumEntries, 20, 4, 4); - TEST_FIELD(EXTLOGPEN, DWORD[1], elpStyleEntry, 24, 4, 4); -} - -static void test_pack_FIXED(void) -{ - /* FIXED (pack 4) */ - TEST_TYPE(FIXED, 4, 2); - TEST_FIELD(FIXED, WORD, fract, 0, 2, 2); - TEST_FIELD(FIXED, SHORT, value, 2, 2, 2); -} - -static void test_pack_FONTENUMPROCA(void) -{ - /* FONTENUMPROCA */ - TEST_TYPE(FONTENUMPROCA, 4, 4); -} - -static void test_pack_FONTENUMPROCW(void) -{ - /* FONTENUMPROCW */ - TEST_TYPE(FONTENUMPROCW, 4, 4); -} - -static void test_pack_FONTSIGNATURE(void) -{ - /* FONTSIGNATURE (pack 4) */ - TEST_TYPE(FONTSIGNATURE, 24, 4); - TEST_FIELD(FONTSIGNATURE, DWORD[4], fsUsb, 0, 16, 4); - TEST_FIELD(FONTSIGNATURE, DWORD[2], fsCsb, 16, 8, 4); -} - -static void test_pack_FXPT16DOT16(void) -{ - /* FXPT16DOT16 */ - TEST_TYPE(FXPT16DOT16, 4, 4); -} - -static void test_pack_FXPT2DOT30(void) -{ - /* FXPT2DOT30 */ - TEST_TYPE(FXPT2DOT30, 4, 4); -} - -static void test_pack_GCP_RESULTSA(void) -{ - /* GCP_RESULTSA (pack 4) */ - TEST_TYPE(GCP_RESULTSA, 36, 4); - TEST_FIELD(GCP_RESULTSA, DWORD, lStructSize, 0, 4, 4); - TEST_FIELD(GCP_RESULTSA, LPSTR, lpOutString, 4, 4, 4); - TEST_FIELD(GCP_RESULTSA, UINT *, lpOrder, 8, 4, 4); - TEST_FIELD(GCP_RESULTSA, INT *, lpDx, 12, 4, 4); - TEST_FIELD(GCP_RESULTSA, INT *, lpCaretPos, 16, 4, 4); - TEST_FIELD(GCP_RESULTSA, LPSTR, lpClass, 20, 4, 4); - TEST_FIELD(GCP_RESULTSA, LPWSTR, lpGlyphs, 24, 4, 4); - TEST_FIELD(GCP_RESULTSA, UINT, nGlyphs, 28, 4, 4); - TEST_FIELD(GCP_RESULTSA, UINT, nMaxFit, 32, 4, 4); -} - -static void test_pack_GCP_RESULTSW(void) -{ - /* GCP_RESULTSW (pack 4) */ - TEST_TYPE(GCP_RESULTSW, 36, 4); - TEST_FIELD(GCP_RESULTSW, DWORD, lStructSize, 0, 4, 4); - TEST_FIELD(GCP_RESULTSW, LPWSTR, lpOutString, 4, 4, 4); - TEST_FIELD(GCP_RESULTSW, UINT *, lpOrder, 8, 4, 4); - TEST_FIELD(GCP_RESULTSW, INT *, lpDx, 12, 4, 4); - TEST_FIELD(GCP_RESULTSW, INT *, lpCaretPos, 16, 4, 4); - TEST_FIELD(GCP_RESULTSW, LPSTR, lpClass, 20, 4, 4); - TEST_FIELD(GCP_RESULTSW, LPWSTR, lpGlyphs, 24, 4, 4); - TEST_FIELD(GCP_RESULTSW, UINT, nGlyphs, 28, 4, 4); - TEST_FIELD(GCP_RESULTSW, UINT, nMaxFit, 32, 4, 4); -} - -static void test_pack_GLYPHMETRICS(void) -{ - /* GLYPHMETRICS (pack 4) */ - TEST_TYPE(GLYPHMETRICS, 20, 4); - TEST_FIELD(GLYPHMETRICS, UINT, gmBlackBoxX, 0, 4, 4); - TEST_FIELD(GLYPHMETRICS, UINT, gmBlackBoxY, 4, 4, 4); - TEST_FIELD(GLYPHMETRICS, POINT, gmptGlyphOrigin, 8, 8, 4); - TEST_FIELD(GLYPHMETRICS, SHORT, gmCellIncX, 16, 2, 2); - TEST_FIELD(GLYPHMETRICS, SHORT, gmCellIncY, 18, 2, 2); -} - -static void test_pack_GLYPHMETRICSFLOAT(void) -{ - /* GLYPHMETRICSFLOAT (pack 4) */ - TEST_TYPE(GLYPHMETRICSFLOAT, 24, 4); - TEST_FIELD(GLYPHMETRICSFLOAT, FLOAT, gmfBlackBoxX, 0, 4, 4); - TEST_FIELD(GLYPHMETRICSFLOAT, FLOAT, gmfBlackBoxY, 4, 4, 4); - TEST_FIELD(GLYPHMETRICSFLOAT, POINTFLOAT, gmfptGlyphOrigin, 8, 8, 4); - TEST_FIELD(GLYPHMETRICSFLOAT, FLOAT, gmfCellIncX, 16, 4, 4); - TEST_FIELD(GLYPHMETRICSFLOAT, FLOAT, gmfCellIncY, 20, 4, 4); -} - -static void test_pack_GOBJENUMPROC(void) -{ - /* GOBJENUMPROC */ - TEST_TYPE(GOBJENUMPROC, 4, 4); -} - -static void test_pack_GRADIENT_RECT(void) -{ - /* GRADIENT_RECT (pack 4) */ - TEST_TYPE(GRADIENT_RECT, 8, 4); - TEST_FIELD(GRADIENT_RECT, ULONG, UpperLeft, 0, 4, 4); - TEST_FIELD(GRADIENT_RECT, ULONG, LowerRight, 4, 4, 4); -} - -static void test_pack_GRADIENT_TRIANGLE(void) -{ - /* GRADIENT_TRIANGLE (pack 4) */ - TEST_TYPE(GRADIENT_TRIANGLE, 12, 4); - TEST_FIELD(GRADIENT_TRIANGLE, ULONG, Vertex1, 0, 4, 4); - TEST_FIELD(GRADIENT_TRIANGLE, ULONG, Vertex2, 4, 4, 4); - TEST_FIELD(GRADIENT_TRIANGLE, ULONG, Vertex3, 8, 4, 4); -} - -static void test_pack_HANDLETABLE(void) -{ - /* HANDLETABLE (pack 4) */ - TEST_TYPE(HANDLETABLE, 4, 4); - TEST_FIELD(HANDLETABLE, HGDIOBJ[1], objectHandle, 0, 4, 4); -} - -static void test_pack_ICMENUMPROCA(void) -{ - /* ICMENUMPROCA */ - TEST_TYPE(ICMENUMPROCA, 4, 4); -} - -static void test_pack_ICMENUMPROCW(void) -{ - /* ICMENUMPROCW */ - TEST_TYPE(ICMENUMPROCW, 4, 4); -} - -static void test_pack_KERNINGPAIR(void) -{ - /* KERNINGPAIR (pack 4) */ - TEST_TYPE(KERNINGPAIR, 8, 4); - TEST_FIELD(KERNINGPAIR, WORD, wFirst, 0, 2, 2); - TEST_FIELD(KERNINGPAIR, WORD, wSecond, 2, 2, 2); - TEST_FIELD(KERNINGPAIR, INT, iKernAmount, 4, 4, 4); -} - -static void test_pack_LAYERPLANEDESCRIPTOR(void) -{ - /* LAYERPLANEDESCRIPTOR (pack 4) */ - TEST_TYPE(LAYERPLANEDESCRIPTOR, 32, 4); - TEST_FIELD(LAYERPLANEDESCRIPTOR, WORD, nSize, 0, 2, 2); - TEST_FIELD(LAYERPLANEDESCRIPTOR, WORD, nVersion, 2, 2, 2); - TEST_FIELD(LAYERPLANEDESCRIPTOR, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, iPixelType, 8, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cColorBits, 9, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cRedBits, 10, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cRedShift, 11, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cGreenBits, 12, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cGreenShift, 13, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cBlueBits, 14, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cBlueShift, 15, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAlphaBits, 16, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAlphaShift, 17, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumBits, 18, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumRedBits, 19, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumGreenBits, 20, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumBlueBits, 21, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumAlphaBits, 22, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cDepthBits, 23, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cStencilBits, 24, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAuxBuffers, 25, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, iLayerPlane, 26, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, bReserved, 27, 1, 1); - TEST_FIELD(LAYERPLANEDESCRIPTOR, COLORREF, crTransparent, 28, 4, 4); -} - -static void test_pack_LCSCSTYPE(void) -{ - /* LCSCSTYPE */ - TEST_TYPE(LCSCSTYPE, 4, 4); -} - -static void test_pack_LCSGAMUTMATCH(void) -{ - /* LCSGAMUTMATCH */ - TEST_TYPE(LCSGAMUTMATCH, 4, 4); -} - -static void test_pack_LINEDDAPROC(void) -{ - /* LINEDDAPROC */ - TEST_TYPE(LINEDDAPROC, 4, 4); -} - -static void test_pack_LOCALESIGNATURE(void) -{ - /* LOCALESIGNATURE (pack 4) */ - TEST_TYPE(LOCALESIGNATURE, 32, 4); - TEST_FIELD(LOCALESIGNATURE, DWORD[4], lsUsb, 0, 16, 4); - TEST_FIELD(LOCALESIGNATURE, DWORD[2], lsCsbDefault, 16, 8, 4); - TEST_FIELD(LOCALESIGNATURE, DWORD[2], lsCsbSupported, 24, 8, 4); -} - -static void test_pack_LOGBRUSH(void) -{ - /* LOGBRUSH (pack 4) */ - TEST_TYPE(LOGBRUSH, 12, 4); - TEST_FIELD(LOGBRUSH, UINT, lbStyle, 0, 4, 4); - TEST_FIELD(LOGBRUSH, COLORREF, lbColor, 4, 4, 4); - TEST_FIELD(LOGBRUSH, ULONG_PTR, lbHatch, 8, 4, 4); -} - -static void test_pack_LOGCOLORSPACEA(void) -{ - /* LOGCOLORSPACEA (pack 4) */ - TEST_TYPE(LOGCOLORSPACEA, 328, 4); - TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsSignature, 0, 4, 4); - TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsVersion, 4, 4, 4); - TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsSize, 8, 4, 4); - TEST_FIELD(LOGCOLORSPACEA, LCSCSTYPE, lcsCSType, 12, 4, 4); - TEST_FIELD(LOGCOLORSPACEA, LCSGAMUTMATCH, lcsIntent, 16, 4, 4); - TEST_FIELD(LOGCOLORSPACEA, CIEXYZTRIPLE, lcsEndpoints, 20, 36, 4); - TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsGammaRed, 56, 4, 4); - TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsGammaGreen, 60, 4, 4); - TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsGammaBlue, 64, 4, 4); - TEST_FIELD(LOGCOLORSPACEA, CHAR[MAX_PATH], lcsFilename, 68, 260, 1); -} - -static void test_pack_LOGCOLORSPACEW(void) -{ - /* LOGCOLORSPACEW (pack 4) */ - TEST_TYPE(LOGCOLORSPACEW, 588, 4); - TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsSignature, 0, 4, 4); - TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsVersion, 4, 4, 4); - TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsSize, 8, 4, 4); - TEST_FIELD(LOGCOLORSPACEW, LCSCSTYPE, lcsCSType, 12, 4, 4); - TEST_FIELD(LOGCOLORSPACEW, LCSGAMUTMATCH, lcsIntent, 16, 4, 4); - TEST_FIELD(LOGCOLORSPACEW, CIEXYZTRIPLE, lcsEndpoints, 20, 36, 4); - TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsGammaRed, 56, 4, 4); - TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsGammaGreen, 60, 4, 4); - TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsGammaBlue, 64, 4, 4); - TEST_FIELD(LOGCOLORSPACEW, WCHAR[MAX_PATH], lcsFilename, 68, 520, 2); -} - -static void test_pack_LOGFONTA(void) -{ - /* LOGFONTA (pack 4) */ - TEST_TYPE(LOGFONTA, 60, 4); - TEST_FIELD(LOGFONTA, LONG, lfHeight, 0, 4, 4); - TEST_FIELD(LOGFONTA, LONG, lfWidth, 4, 4, 4); - TEST_FIELD(LOGFONTA, LONG, lfEscapement, 8, 4, 4); - TEST_FIELD(LOGFONTA, LONG, lfOrientation, 12, 4, 4); - TEST_FIELD(LOGFONTA, LONG, lfWeight, 16, 4, 4); - TEST_FIELD(LOGFONTA, BYTE, lfItalic, 20, 1, 1); - TEST_FIELD(LOGFONTA, BYTE, lfUnderline, 21, 1, 1); - TEST_FIELD(LOGFONTA, BYTE, lfStrikeOut, 22, 1, 1); - TEST_FIELD(LOGFONTA, BYTE, lfCharSet, 23, 1, 1); - TEST_FIELD(LOGFONTA, BYTE, lfOutPrecision, 24, 1, 1); - TEST_FIELD(LOGFONTA, BYTE, lfClipPrecision, 25, 1, 1); - TEST_FIELD(LOGFONTA, BYTE, lfQuality, 26, 1, 1); - TEST_FIELD(LOGFONTA, BYTE, lfPitchAndFamily, 27, 1, 1); - TEST_FIELD(LOGFONTA, CHAR[LF_FACESIZE], lfFaceName, 28, 32, 1); -} - -static void test_pack_LOGFONTW(void) -{ - /* LOGFONTW (pack 4) */ - TEST_TYPE(LOGFONTW, 92, 4); - TEST_FIELD(LOGFONTW, LONG, lfHeight, 0, 4, 4); - TEST_FIELD(LOGFONTW, LONG, lfWidth, 4, 4, 4); - TEST_FIELD(LOGFONTW, LONG, lfEscapement, 8, 4, 4); - TEST_FIELD(LOGFONTW, LONG, lfOrientation, 12, 4, 4); - TEST_FIELD(LOGFONTW, LONG, lfWeight, 16, 4, 4); - TEST_FIELD(LOGFONTW, BYTE, lfItalic, 20, 1, 1); - TEST_FIELD(LOGFONTW, BYTE, lfUnderline, 21, 1, 1); - TEST_FIELD(LOGFONTW, BYTE, lfStrikeOut, 22, 1, 1); - TEST_FIELD(LOGFONTW, BYTE, lfCharSet, 23, 1, 1); - TEST_FIELD(LOGFONTW, BYTE, lfOutPrecision, 24, 1, 1); - TEST_FIELD(LOGFONTW, BYTE, lfClipPrecision, 25, 1, 1); - TEST_FIELD(LOGFONTW, BYTE, lfQuality, 26, 1, 1); - TEST_FIELD(LOGFONTW, BYTE, lfPitchAndFamily, 27, 1, 1); - TEST_FIELD(LOGFONTW, WCHAR[LF_FACESIZE], lfFaceName, 28, 64, 2); -} - -static void test_pack_LOGPEN(void) -{ - /* LOGPEN (pack 4) */ - TEST_TYPE(LOGPEN, 16, 4); - TEST_FIELD(LOGPEN, UINT, lopnStyle, 0, 4, 4); - TEST_FIELD(LOGPEN, POINT, lopnWidth, 4, 8, 4); - TEST_FIELD(LOGPEN, COLORREF, lopnColor, 12, 4, 4); -} - -static void test_pack_LPABC(void) -{ - /* LPABC */ - TEST_TYPE(LPABC, 4, 4); - TEST_TYPE_POINTER(LPABC, 12, 4); -} - -static void test_pack_LPABCFLOAT(void) -{ - /* LPABCFLOAT */ - TEST_TYPE(LPABCFLOAT, 4, 4); - TEST_TYPE_POINTER(LPABCFLOAT, 12, 4); -} - -static void test_pack_LPBITMAP(void) -{ - /* LPBITMAP */ - TEST_TYPE(LPBITMAP, 4, 4); - TEST_TYPE_POINTER(LPBITMAP, 24, 4); -} - -static void test_pack_LPBITMAPCOREHEADER(void) -{ - /* LPBITMAPCOREHEADER */ - TEST_TYPE(LPBITMAPCOREHEADER, 4, 4); - TEST_TYPE_POINTER(LPBITMAPCOREHEADER, 12, 4); -} - -static void test_pack_LPBITMAPCOREINFO(void) -{ - /* LPBITMAPCOREINFO */ - TEST_TYPE(LPBITMAPCOREINFO, 4, 4); - TEST_TYPE_POINTER(LPBITMAPCOREINFO, 16, 4); -} - -static void test_pack_LPBITMAPFILEHEADER(void) -{ - /* LPBITMAPFILEHEADER */ - TEST_TYPE(LPBITMAPFILEHEADER, 4, 4); - TEST_TYPE_POINTER(LPBITMAPFILEHEADER, 14, 2); -} - -static void test_pack_LPBITMAPINFO(void) -{ - /* LPBITMAPINFO */ - TEST_TYPE(LPBITMAPINFO, 4, 4); - TEST_TYPE_POINTER(LPBITMAPINFO, 44, 4); -} - -static void test_pack_LPBITMAPINFOHEADER(void) -{ - /* LPBITMAPINFOHEADER */ - TEST_TYPE(LPBITMAPINFOHEADER, 4, 4); - TEST_TYPE_POINTER(LPBITMAPINFOHEADER, 40, 4); -} - -static void test_pack_LPBITMAPV5HEADER(void) -{ - /* LPBITMAPV5HEADER */ - TEST_TYPE(LPBITMAPV5HEADER, 4, 4); - TEST_TYPE_POINTER(LPBITMAPV5HEADER, 124, 4); -} - -static void test_pack_LPCHARSETINFO(void) -{ - /* LPCHARSETINFO */ - TEST_TYPE(LPCHARSETINFO, 4, 4); - TEST_TYPE_POINTER(LPCHARSETINFO, 32, 4); -} - -static void test_pack_LPCIEXYZ(void) -{ - /* LPCIEXYZ */ - TEST_TYPE(LPCIEXYZ, 4, 4); - TEST_TYPE_POINTER(LPCIEXYZ, 12, 4); -} - -static void test_pack_LPCIEXYZTRIPLE(void) -{ - /* LPCIEXYZTRIPLE */ - TEST_TYPE(LPCIEXYZTRIPLE, 4, 4); - TEST_TYPE_POINTER(LPCIEXYZTRIPLE, 36, 4); -} - -static void test_pack_LPCOLORADJUSTMENT(void) -{ - /* LPCOLORADJUSTMENT */ - TEST_TYPE(LPCOLORADJUSTMENT, 4, 4); - TEST_TYPE_POINTER(LPCOLORADJUSTMENT, 24, 2); -} - -static void test_pack_LPDEVMODEA(void) -{ - /* LPDEVMODEA */ - TEST_TYPE(LPDEVMODEA, 4, 4); -} - -static void test_pack_LPDEVMODEW(void) -{ - /* LPDEVMODEW */ - TEST_TYPE(LPDEVMODEW, 4, 4); -} - -static void test_pack_LPDIBSECTION(void) -{ - /* LPDIBSECTION */ - TEST_TYPE(LPDIBSECTION, 4, 4); - TEST_TYPE_POINTER(LPDIBSECTION, 84, 4); -} - -static void test_pack_LPDISPLAY_DEVICEA(void) -{ - /* LPDISPLAY_DEVICEA */ - TEST_TYPE(LPDISPLAY_DEVICEA, 4, 4); - TEST_TYPE_POINTER(LPDISPLAY_DEVICEA, 424, 4); -} - -static void test_pack_LPDISPLAY_DEVICEW(void) -{ - /* LPDISPLAY_DEVICEW */ - TEST_TYPE(LPDISPLAY_DEVICEW, 4, 4); - TEST_TYPE_POINTER(LPDISPLAY_DEVICEW, 840, 4); -} - -static void test_pack_LPDOCINFOA(void) -{ - /* LPDOCINFOA */ - TEST_TYPE(LPDOCINFOA, 4, 4); - TEST_TYPE_POINTER(LPDOCINFOA, 20, 4); -} - -static void test_pack_LPDOCINFOW(void) -{ - /* LPDOCINFOW */ - TEST_TYPE(LPDOCINFOW, 4, 4); - TEST_TYPE_POINTER(LPDOCINFOW, 20, 4); -} - -static void test_pack_LPENHMETAHEADER(void) -{ - /* LPENHMETAHEADER */ - TEST_TYPE(LPENHMETAHEADER, 4, 4); - TEST_TYPE_POINTER(LPENHMETAHEADER, 108, 4); -} - -static void test_pack_LPENHMETARECORD(void) -{ - /* LPENHMETARECORD */ - TEST_TYPE(LPENHMETARECORD, 4, 4); - TEST_TYPE_POINTER(LPENHMETARECORD, 12, 4); -} - -static void test_pack_LPENUMLOGFONTA(void) -{ - /* LPENUMLOGFONTA */ - TEST_TYPE(LPENUMLOGFONTA, 4, 4); - TEST_TYPE_POINTER(LPENUMLOGFONTA, 156, 4); -} - -static void test_pack_LPENUMLOGFONTEXA(void) -{ - /* LPENUMLOGFONTEXA */ - TEST_TYPE(LPENUMLOGFONTEXA, 4, 4); - TEST_TYPE_POINTER(LPENUMLOGFONTEXA, 188, 4); -} - -static void test_pack_LPENUMLOGFONTEXW(void) -{ - /* LPENUMLOGFONTEXW */ - TEST_TYPE(LPENUMLOGFONTEXW, 4, 4); - TEST_TYPE_POINTER(LPENUMLOGFONTEXW, 348, 4); -} - -static void test_pack_LPENUMLOGFONTW(void) -{ - /* LPENUMLOGFONTW */ - TEST_TYPE(LPENUMLOGFONTW, 4, 4); - TEST_TYPE_POINTER(LPENUMLOGFONTW, 284, 4); -} - -static void test_pack_LPEXTLOGFONTA(void) -{ - /* LPEXTLOGFONTA */ - TEST_TYPE(LPEXTLOGFONTA, 4, 4); - TEST_TYPE_POINTER(LPEXTLOGFONTA, 192, 4); -} - -static void test_pack_LPEXTLOGFONTW(void) -{ - /* LPEXTLOGFONTW */ - TEST_TYPE(LPEXTLOGFONTW, 4, 4); - TEST_TYPE_POINTER(LPEXTLOGFONTW, 320, 4); -} - -static void test_pack_LPEXTLOGPEN(void) -{ - /* LPEXTLOGPEN */ - TEST_TYPE(LPEXTLOGPEN, 4, 4); - TEST_TYPE_POINTER(LPEXTLOGPEN, 28, 4); -} - -static void test_pack_LPFONTSIGNATURE(void) -{ - /* LPFONTSIGNATURE */ - TEST_TYPE(LPFONTSIGNATURE, 4, 4); - TEST_TYPE_POINTER(LPFONTSIGNATURE, 24, 4); -} - -static void test_pack_LPGCP_RESULTSA(void) -{ - /* LPGCP_RESULTSA */ - TEST_TYPE(LPGCP_RESULTSA, 4, 4); - TEST_TYPE_POINTER(LPGCP_RESULTSA, 36, 4); -} - -static void test_pack_LPGCP_RESULTSW(void) -{ - /* LPGCP_RESULTSW */ - TEST_TYPE(LPGCP_RESULTSW, 4, 4); - TEST_TYPE_POINTER(LPGCP_RESULTSW, 36, 4); -} - -static void test_pack_LPGLYPHMETRICS(void) -{ - /* LPGLYPHMETRICS */ - TEST_TYPE(LPGLYPHMETRICS, 4, 4); - TEST_TYPE_POINTER(LPGLYPHMETRICS, 20, 4); -} - -static void test_pack_LPGLYPHMETRICSFLOAT(void) -{ - /* LPGLYPHMETRICSFLOAT */ - TEST_TYPE(LPGLYPHMETRICSFLOAT, 4, 4); - TEST_TYPE_POINTER(LPGLYPHMETRICSFLOAT, 24, 4); -} - -static void test_pack_LPGRADIENT_RECT(void) -{ - /* LPGRADIENT_RECT */ - TEST_TYPE(LPGRADIENT_RECT, 4, 4); - TEST_TYPE_POINTER(LPGRADIENT_RECT, 8, 4); -} - -static void test_pack_LPGRADIENT_TRIANGLE(void) -{ - /* LPGRADIENT_TRIANGLE */ - TEST_TYPE(LPGRADIENT_TRIANGLE, 4, 4); - TEST_TYPE_POINTER(LPGRADIENT_TRIANGLE, 12, 4); -} - -static void test_pack_LPHANDLETABLE(void) -{ - /* LPHANDLETABLE */ - TEST_TYPE(LPHANDLETABLE, 4, 4); - TEST_TYPE_POINTER(LPHANDLETABLE, 4, 4); -} - -static void test_pack_LPKERNINGPAIR(void) -{ - /* LPKERNINGPAIR */ - TEST_TYPE(LPKERNINGPAIR, 4, 4); - TEST_TYPE_POINTER(LPKERNINGPAIR, 8, 4); -} - -static void test_pack_LPLAYERPLANEDESCRIPTOR(void) -{ - /* LPLAYERPLANEDESCRIPTOR */ - TEST_TYPE(LPLAYERPLANEDESCRIPTOR, 4, 4); - TEST_TYPE_POINTER(LPLAYERPLANEDESCRIPTOR, 32, 4); -} - -static void test_pack_LPLOCALESIGNATURE(void) -{ - /* LPLOCALESIGNATURE */ - TEST_TYPE(LPLOCALESIGNATURE, 4, 4); - TEST_TYPE_POINTER(LPLOCALESIGNATURE, 32, 4); -} - -static void test_pack_LPLOGBRUSH(void) -{ - /* LPLOGBRUSH */ - TEST_TYPE(LPLOGBRUSH, 4, 4); - TEST_TYPE_POINTER(LPLOGBRUSH, 12, 4); -} - -static void test_pack_LPLOGCOLORSPACEA(void) -{ - /* LPLOGCOLORSPACEA */ - TEST_TYPE(LPLOGCOLORSPACEA, 4, 4); - TEST_TYPE_POINTER(LPLOGCOLORSPACEA, 328, 4); -} - -static void test_pack_LPLOGCOLORSPACEW(void) -{ - /* LPLOGCOLORSPACEW */ - TEST_TYPE(LPLOGCOLORSPACEW, 4, 4); - TEST_TYPE_POINTER(LPLOGCOLORSPACEW, 588, 4); -} - -static void test_pack_LPLOGFONTA(void) -{ - /* LPLOGFONTA */ - TEST_TYPE(LPLOGFONTA, 4, 4); - TEST_TYPE_POINTER(LPLOGFONTA, 60, 4); -} - -static void test_pack_LPLOGFONTW(void) -{ - /* LPLOGFONTW */ - TEST_TYPE(LPLOGFONTW, 4, 4); - TEST_TYPE_POINTER(LPLOGFONTW, 92, 4); -} - -static void test_pack_LPLOGPEN(void) -{ - /* LPLOGPEN */ - TEST_TYPE(LPLOGPEN, 4, 4); - TEST_TYPE_POINTER(LPLOGPEN, 16, 4); -} - -static void test_pack_LPMAT2(void) -{ - /* LPMAT2 */ - TEST_TYPE(LPMAT2, 4, 4); - TEST_TYPE_POINTER(LPMAT2, 16, 2); -} - -static void test_pack_LPMETAFILEPICT(void) -{ - /* LPMETAFILEPICT */ - TEST_TYPE(LPMETAFILEPICT, 4, 4); - TEST_TYPE_POINTER(LPMETAFILEPICT, 16, 4); -} - -static void test_pack_LPMETAHEADER(void) -{ - /* LPMETAHEADER */ - TEST_TYPE(LPMETAHEADER, 4, 4); - TEST_TYPE_POINTER(LPMETAHEADER, 18, 2); -} - -static void test_pack_LPMETARECORD(void) -{ - /* LPMETARECORD */ - TEST_TYPE(LPMETARECORD, 4, 4); - TEST_TYPE_POINTER(LPMETARECORD, 8, 4); -} - -static void test_pack_LPNEWTEXTMETRICA(void) -{ - /* LPNEWTEXTMETRICA */ - TEST_TYPE(LPNEWTEXTMETRICA, 4, 4); - TEST_TYPE_POINTER(LPNEWTEXTMETRICA, 72, 4); -} - -static void test_pack_LPNEWTEXTMETRICW(void) -{ - /* LPNEWTEXTMETRICW */ - TEST_TYPE(LPNEWTEXTMETRICW, 4, 4); - TEST_TYPE_POINTER(LPNEWTEXTMETRICW, 76, 4); -} - -static void test_pack_LPOUTLINETEXTMETRICA(void) -{ - /* LPOUTLINETEXTMETRICA */ - TEST_TYPE(LPOUTLINETEXTMETRICA, 4, 4); - TEST_TYPE_POINTER(LPOUTLINETEXTMETRICA, 212, 4); -} - -static void test_pack_LPOUTLINETEXTMETRICW(void) -{ - /* LPOUTLINETEXTMETRICW */ - TEST_TYPE(LPOUTLINETEXTMETRICW, 4, 4); - TEST_TYPE_POINTER(LPOUTLINETEXTMETRICW, 216, 4); -} - -static void test_pack_LPPANOSE(void) -{ - /* LPPANOSE */ - TEST_TYPE(LPPANOSE, 4, 4); - TEST_TYPE_POINTER(LPPANOSE, 10, 1); -} - -static void test_pack_LPPELARRAY(void) -{ - /* LPPELARRAY */ - TEST_TYPE(LPPELARRAY, 4, 4); - TEST_TYPE_POINTER(LPPELARRAY, 20, 4); -} - -static void test_pack_LPPIXELFORMATDESCRIPTOR(void) -{ - /* LPPIXELFORMATDESCRIPTOR */ - TEST_TYPE(LPPIXELFORMATDESCRIPTOR, 4, 4); - TEST_TYPE_POINTER(LPPIXELFORMATDESCRIPTOR, 40, 4); -} - -static void test_pack_LPPOINTFX(void) -{ - /* LPPOINTFX */ - TEST_TYPE(LPPOINTFX, 4, 4); - TEST_TYPE_POINTER(LPPOINTFX, 8, 2); -} - -static void test_pack_LPPOLYTEXTA(void) -{ - /* LPPOLYTEXTA */ - TEST_TYPE(LPPOLYTEXTA, 4, 4); - TEST_TYPE_POINTER(LPPOLYTEXTA, 40, 4); -} - -static void test_pack_LPPOLYTEXTW(void) -{ - /* LPPOLYTEXTW */ - TEST_TYPE(LPPOLYTEXTW, 4, 4); - TEST_TYPE_POINTER(LPPOLYTEXTW, 40, 4); -} - -static void test_pack_LPRASTERIZER_STATUS(void) -{ - /* LPRASTERIZER_STATUS */ - TEST_TYPE(LPRASTERIZER_STATUS, 4, 4); - TEST_TYPE_POINTER(LPRASTERIZER_STATUS, 6, 2); -} - -static void test_pack_LPRGBQUAD(void) -{ - /* LPRGBQUAD */ - TEST_TYPE(LPRGBQUAD, 4, 4); - TEST_TYPE_POINTER(LPRGBQUAD, 4, 1); -} - -static void test_pack_LPRGNDATA(void) -{ - /* LPRGNDATA */ - TEST_TYPE(LPRGNDATA, 4, 4); - TEST_TYPE_POINTER(LPRGNDATA, 36, 4); -} - -static void test_pack_LPTEXTMETRICA(void) -{ - /* LPTEXTMETRICA */ - TEST_TYPE(LPTEXTMETRICA, 4, 4); - TEST_TYPE_POINTER(LPTEXTMETRICA, 56, 4); -} - -static void test_pack_LPTEXTMETRICW(void) -{ - /* LPTEXTMETRICW */ - TEST_TYPE(LPTEXTMETRICW, 4, 4); - TEST_TYPE_POINTER(LPTEXTMETRICW, 60, 4); -} - -static void test_pack_LPTRIVERTEX(void) -{ - /* LPTRIVERTEX */ - TEST_TYPE(LPTRIVERTEX, 4, 4); - TEST_TYPE_POINTER(LPTRIVERTEX, 16, 4); -} - -static void test_pack_LPTTPOLYCURVE(void) -{ - /* LPTTPOLYCURVE */ - TEST_TYPE(LPTTPOLYCURVE, 4, 4); - TEST_TYPE_POINTER(LPTTPOLYCURVE, 12, 2); -} - -static void test_pack_LPTTPOLYGONHEADER(void) -{ - /* LPTTPOLYGONHEADER */ - TEST_TYPE(LPTTPOLYGONHEADER, 4, 4); - TEST_TYPE_POINTER(LPTTPOLYGONHEADER, 16, 4); -} - -static void test_pack_LPXFORM(void) -{ - /* LPXFORM */ - TEST_TYPE(LPXFORM, 4, 4); - TEST_TYPE_POINTER(LPXFORM, 24, 4); -} - -static void test_pack_MAT2(void) -{ - /* MAT2 (pack 4) */ - TEST_TYPE(MAT2, 16, 2); - TEST_FIELD(MAT2, FIXED, eM11, 0, 4, 2); - TEST_FIELD(MAT2, FIXED, eM12, 4, 4, 2); - TEST_FIELD(MAT2, FIXED, eM21, 8, 4, 2); - TEST_FIELD(MAT2, FIXED, eM22, 12, 4, 2); -} - -static void test_pack_METAFILEPICT(void) -{ - /* METAFILEPICT (pack 4) */ - TEST_TYPE(METAFILEPICT, 16, 4); - TEST_FIELD(METAFILEPICT, LONG, mm, 0, 4, 4); - TEST_FIELD(METAFILEPICT, LONG, xExt, 4, 4, 4); - TEST_FIELD(METAFILEPICT, LONG, yExt, 8, 4, 4); - TEST_FIELD(METAFILEPICT, HMETAFILE, hMF, 12, 4, 4); -} - -static void test_pack_METAHEADER(void) -{ - /* METAHEADER (pack 2) */ - TEST_TYPE(METAHEADER, 18, 2); - TEST_FIELD(METAHEADER, WORD, mtType, 0, 2, 2); - TEST_FIELD(METAHEADER, WORD, mtHeaderSize, 2, 2, 2); - TEST_FIELD(METAHEADER, WORD, mtVersion, 4, 2, 2); - TEST_FIELD(METAHEADER, DWORD, mtSize, 6, 4, 2); - TEST_FIELD(METAHEADER, WORD, mtNoObjects, 10, 2, 2); - TEST_FIELD(METAHEADER, DWORD, mtMaxRecord, 12, 4, 2); - TEST_FIELD(METAHEADER, WORD, mtNoParameters, 16, 2, 2); -} - -static void test_pack_METARECORD(void) -{ - /* METARECORD (pack 4) */ - TEST_TYPE(METARECORD, 8, 4); - TEST_FIELD(METARECORD, DWORD, rdSize, 0, 4, 4); - TEST_FIELD(METARECORD, WORD, rdFunction, 4, 2, 2); - TEST_FIELD(METARECORD, WORD[1], rdParm, 6, 2, 2); -} - -static void test_pack_MFENUMPROC(void) -{ - /* MFENUMPROC */ - TEST_TYPE(MFENUMPROC, 4, 4); -} - -static void test_pack_NEWTEXTMETRICA(void) -{ - /* NEWTEXTMETRICA (pack 4) */ - TEST_TYPE(NEWTEXTMETRICA, 72, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmHeight, 0, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmAscent, 4, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmDescent, 8, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmInternalLeading, 12, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmExternalLeading, 16, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmAveCharWidth, 20, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmMaxCharWidth, 24, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmWeight, 28, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmOverhang, 32, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmDigitizedAspectX, 36, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, LONG, tmDigitizedAspectY, 40, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmFirstChar, 44, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmLastChar, 45, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmDefaultChar, 46, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmBreakChar, 47, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmItalic, 48, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmUnderlined, 49, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmStruckOut, 50, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmPitchAndFamily, 51, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, BYTE, tmCharSet, 52, 1, 1); - TEST_FIELD(NEWTEXTMETRICA, DWORD, ntmFlags, 56, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, UINT, ntmSizeEM, 60, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, UINT, ntmCellHeight, 64, 4, 4); - TEST_FIELD(NEWTEXTMETRICA, UINT, ntmAvgWidth, 68, 4, 4); -} - -static void test_pack_NEWTEXTMETRICEXA(void) -{ - /* NEWTEXTMETRICEXA (pack 4) */ - TEST_TYPE(NEWTEXTMETRICEXA, 96, 4); - TEST_FIELD(NEWTEXTMETRICEXA, NEWTEXTMETRICA, ntmTm, 0, 72, 4); - TEST_FIELD(NEWTEXTMETRICEXA, FONTSIGNATURE, ntmFontSig, 72, 24, 4); -} - -static void test_pack_NEWTEXTMETRICEXW(void) -{ - /* NEWTEXTMETRICEXW (pack 4) */ - TEST_TYPE(NEWTEXTMETRICEXW, 100, 4); - TEST_FIELD(NEWTEXTMETRICEXW, NEWTEXTMETRICW, ntmTm, 0, 76, 4); - TEST_FIELD(NEWTEXTMETRICEXW, FONTSIGNATURE, ntmFontSig, 76, 24, 4); -} - -static void test_pack_NEWTEXTMETRICW(void) -{ - /* NEWTEXTMETRICW (pack 4) */ - TEST_TYPE(NEWTEXTMETRICW, 76, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmHeight, 0, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmAscent, 4, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmDescent, 8, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmInternalLeading, 12, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmExternalLeading, 16, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmAveCharWidth, 20, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmMaxCharWidth, 24, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmWeight, 28, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmOverhang, 32, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmDigitizedAspectX, 36, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, LONG, tmDigitizedAspectY, 40, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, WCHAR, tmFirstChar, 44, 2, 2); - TEST_FIELD(NEWTEXTMETRICW, WCHAR, tmLastChar, 46, 2, 2); - TEST_FIELD(NEWTEXTMETRICW, WCHAR, tmDefaultChar, 48, 2, 2); - TEST_FIELD(NEWTEXTMETRICW, WCHAR, tmBreakChar, 50, 2, 2); - TEST_FIELD(NEWTEXTMETRICW, BYTE, tmItalic, 52, 1, 1); - TEST_FIELD(NEWTEXTMETRICW, BYTE, tmUnderlined, 53, 1, 1); - TEST_FIELD(NEWTEXTMETRICW, BYTE, tmStruckOut, 54, 1, 1); - TEST_FIELD(NEWTEXTMETRICW, BYTE, tmPitchAndFamily, 55, 1, 1); - TEST_FIELD(NEWTEXTMETRICW, BYTE, tmCharSet, 56, 1, 1); - TEST_FIELD(NEWTEXTMETRICW, DWORD, ntmFlags, 60, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, UINT, ntmSizeEM, 64, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, UINT, ntmCellHeight, 68, 4, 4); - TEST_FIELD(NEWTEXTMETRICW, UINT, ntmAvgWidth, 72, 4, 4); -} - -static void test_pack_NPEXTLOGPEN(void) -{ - /* NPEXTLOGPEN */ - TEST_TYPE(NPEXTLOGPEN, 4, 4); - TEST_TYPE_POINTER(NPEXTLOGPEN, 28, 4); -} - -static void test_pack_OLDFONTENUMPROC(void) -{ - /* OLDFONTENUMPROC */ - TEST_TYPE(OLDFONTENUMPROC, 4, 4); -} - -static void test_pack_OLDFONTENUMPROCA(void) -{ - /* OLDFONTENUMPROCA */ - TEST_TYPE(OLDFONTENUMPROCA, 4, 4); -} - -static void test_pack_OLDFONTENUMPROCW(void) -{ - /* OLDFONTENUMPROCW */ - TEST_TYPE(OLDFONTENUMPROCW, 4, 4); -} - -static void test_pack_OUTLINETEXTMETRICA(void) -{ - /* OUTLINETEXTMETRICA (pack 4) */ - TEST_TYPE(OUTLINETEXTMETRICA, 212, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmSize, 0, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, TEXTMETRICA, otmTextMetrics, 4, 56, 4); - TEST_FIELD(OUTLINETEXTMETRICA, BYTE, otmFiller, 60, 1, 1); - TEST_FIELD(OUTLINETEXTMETRICA, PANOSE, otmPanoseNumber, 61, 10, 1); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmfsSelection, 72, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmfsType, 76, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsCharSlopeRise, 80, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsCharSlopeRun, 84, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmItalicAngle, 88, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmEMSquare, 92, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmAscent, 96, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmDescent, 100, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmLineGap, 104, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmsCapEmHeight, 108, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmsXHeight, 112, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, RECT, otmrcFontBox, 116, 16, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmMacAscent, 132, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmMacDescent, 136, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmMacLineGap, 140, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmusMinimumPPEM, 144, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, POINT, otmptSubscriptSize, 148, 8, 4); - TEST_FIELD(OUTLINETEXTMETRICA, POINT, otmptSubscriptOffset, 156, 8, 4); - TEST_FIELD(OUTLINETEXTMETRICA, POINT, otmptSuperscriptSize, 164, 8, 4); - TEST_FIELD(OUTLINETEXTMETRICA, POINT, otmptSuperscriptOffset, 172, 8, 4); - TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmsStrikeoutSize, 180, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsStrikeoutPosition, 184, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsUnderscoreSize, 188, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsUnderscorePosition, 192, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, LPSTR, otmpFamilyName, 196, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, LPSTR, otmpFaceName, 200, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, LPSTR, otmpStyleName, 204, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICA, LPSTR, otmpFullName, 208, 4, 4); -} - -static void test_pack_OUTLINETEXTMETRICW(void) -{ - /* OUTLINETEXTMETRICW (pack 4) */ - TEST_TYPE(OUTLINETEXTMETRICW, 216, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmSize, 0, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, TEXTMETRICW, otmTextMetrics, 4, 60, 4); - TEST_FIELD(OUTLINETEXTMETRICW, BYTE, otmFiller, 64, 1, 1); - TEST_FIELD(OUTLINETEXTMETRICW, PANOSE, otmPanoseNumber, 65, 10, 1); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmfsSelection, 76, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmfsType, 80, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsCharSlopeRise, 84, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsCharSlopeRun, 88, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmItalicAngle, 92, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmEMSquare, 96, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmAscent, 100, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmDescent, 104, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmLineGap, 108, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmsCapEmHeight, 112, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmsXHeight, 116, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, RECT, otmrcFontBox, 120, 16, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmMacAscent, 136, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmMacDescent, 140, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmMacLineGap, 144, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmusMinimumPPEM, 148, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, POINT, otmptSubscriptSize, 152, 8, 4); - TEST_FIELD(OUTLINETEXTMETRICW, POINT, otmptSubscriptOffset, 160, 8, 4); - TEST_FIELD(OUTLINETEXTMETRICW, POINT, otmptSuperscriptSize, 168, 8, 4); - TEST_FIELD(OUTLINETEXTMETRICW, POINT, otmptSuperscriptOffset, 176, 8, 4); - TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmsStrikeoutSize, 184, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsStrikeoutPosition, 188, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsUnderscoreSize, 192, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsUnderscorePosition, 196, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, LPSTR, otmpFamilyName, 200, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, LPSTR, otmpFaceName, 204, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, LPSTR, otmpStyleName, 208, 4, 4); - TEST_FIELD(OUTLINETEXTMETRICW, LPSTR, otmpFullName, 212, 4, 4); -} - -static void test_pack_PABC(void) -{ - /* PABC */ - TEST_TYPE(PABC, 4, 4); - TEST_TYPE_POINTER(PABC, 12, 4); -} - -static void test_pack_PABCFLOAT(void) -{ - /* PABCFLOAT */ - TEST_TYPE(PABCFLOAT, 4, 4); - TEST_TYPE_POINTER(PABCFLOAT, 12, 4); -} - -static void test_pack_PANOSE(void) -{ - /* PANOSE (pack 4) */ - TEST_TYPE(PANOSE, 10, 1); - TEST_FIELD(PANOSE, BYTE, bFamilyType, 0, 1, 1); - TEST_FIELD(PANOSE, BYTE, bSerifStyle, 1, 1, 1); - TEST_FIELD(PANOSE, BYTE, bWeight, 2, 1, 1); - TEST_FIELD(PANOSE, BYTE, bProportion, 3, 1, 1); - TEST_FIELD(PANOSE, BYTE, bContrast, 4, 1, 1); - TEST_FIELD(PANOSE, BYTE, bStrokeVariation, 5, 1, 1); - TEST_FIELD(PANOSE, BYTE, bArmStyle, 6, 1, 1); - TEST_FIELD(PANOSE, BYTE, bLetterform, 7, 1, 1); - TEST_FIELD(PANOSE, BYTE, bMidline, 8, 1, 1); - TEST_FIELD(PANOSE, BYTE, bXHeight, 9, 1, 1); -} - -static void test_pack_PATTERN(void) -{ - /* PATTERN */ - TEST_TYPE(PATTERN, 12, 4); -} - -static void test_pack_PBITMAP(void) -{ - /* PBITMAP */ - TEST_TYPE(PBITMAP, 4, 4); - TEST_TYPE_POINTER(PBITMAP, 24, 4); -} - -static void test_pack_PBITMAPCOREHEADER(void) -{ - /* PBITMAPCOREHEADER */ - TEST_TYPE(PBITMAPCOREHEADER, 4, 4); - TEST_TYPE_POINTER(PBITMAPCOREHEADER, 12, 4); -} - -static void test_pack_PBITMAPCOREINFO(void) -{ - /* PBITMAPCOREINFO */ - TEST_TYPE(PBITMAPCOREINFO, 4, 4); - TEST_TYPE_POINTER(PBITMAPCOREINFO, 16, 4); -} - -static void test_pack_PBITMAPFILEHEADER(void) -{ - /* PBITMAPFILEHEADER */ - TEST_TYPE(PBITMAPFILEHEADER, 4, 4); - TEST_TYPE_POINTER(PBITMAPFILEHEADER, 14, 2); -} - -static void test_pack_PBITMAPINFO(void) -{ - /* PBITMAPINFO */ - TEST_TYPE(PBITMAPINFO, 4, 4); - TEST_TYPE_POINTER(PBITMAPINFO, 44, 4); -} - -static void test_pack_PBITMAPINFOHEADER(void) -{ - /* PBITMAPINFOHEADER */ - TEST_TYPE(PBITMAPINFOHEADER, 4, 4); - TEST_TYPE_POINTER(PBITMAPINFOHEADER, 40, 4); -} - -static void test_pack_PBITMAPV4HEADER(void) -{ - /* PBITMAPV4HEADER */ - TEST_TYPE(PBITMAPV4HEADER, 4, 4); - TEST_TYPE_POINTER(PBITMAPV4HEADER, 108, 4); -} - -static void test_pack_PBITMAPV5HEADER(void) -{ - /* PBITMAPV5HEADER */ - TEST_TYPE(PBITMAPV5HEADER, 4, 4); - TEST_TYPE_POINTER(PBITMAPV5HEADER, 124, 4); -} - -static void test_pack_PBLENDFUNCTION(void) -{ - /* PBLENDFUNCTION */ - TEST_TYPE(PBLENDFUNCTION, 4, 4); - TEST_TYPE_POINTER(PBLENDFUNCTION, 4, 1); -} - -static void test_pack_PCHARSETINFO(void) -{ - /* PCHARSETINFO */ - TEST_TYPE(PCHARSETINFO, 4, 4); - TEST_TYPE_POINTER(PCHARSETINFO, 32, 4); -} - -static void test_pack_PCOLORADJUSTMENT(void) -{ - /* PCOLORADJUSTMENT */ - TEST_TYPE(PCOLORADJUSTMENT, 4, 4); - TEST_TYPE_POINTER(PCOLORADJUSTMENT, 24, 2); -} - -static void test_pack_PDEVMODEA(void) -{ - /* PDEVMODEA */ - TEST_TYPE(PDEVMODEA, 4, 4); -} - -static void test_pack_PDEVMODEW(void) -{ - /* PDEVMODEW */ - TEST_TYPE(PDEVMODEW, 4, 4); -} - -static void test_pack_PDIBSECTION(void) -{ - /* PDIBSECTION */ - TEST_TYPE(PDIBSECTION, 4, 4); - TEST_TYPE_POINTER(PDIBSECTION, 84, 4); -} - -static void test_pack_PDISPLAY_DEVICEA(void) -{ - /* PDISPLAY_DEVICEA */ - TEST_TYPE(PDISPLAY_DEVICEA, 4, 4); - TEST_TYPE_POINTER(PDISPLAY_DEVICEA, 424, 4); -} - -static void test_pack_PDISPLAY_DEVICEW(void) -{ - /* PDISPLAY_DEVICEW */ - TEST_TYPE(PDISPLAY_DEVICEW, 4, 4); - TEST_TYPE_POINTER(PDISPLAY_DEVICEW, 840, 4); -} - -static void test_pack_PELARRAY(void) -{ - /* PELARRAY (pack 4) */ - TEST_TYPE(PELARRAY, 20, 4); - TEST_FIELD(PELARRAY, LONG, paXCount, 0, 4, 4); - TEST_FIELD(PELARRAY, LONG, paYCount, 4, 4, 4); - TEST_FIELD(PELARRAY, LONG, paXExt, 8, 4, 4); - TEST_FIELD(PELARRAY, LONG, paYExt, 12, 4, 4); - TEST_FIELD(PELARRAY, BYTE, paRGBs, 16, 1, 1); -} - -static void test_pack_PEMR(void) -{ - /* PEMR */ - TEST_TYPE(PEMR, 4, 4); - TEST_TYPE_POINTER(PEMR, 8, 4); -} - -static void test_pack_PEMRABORTPATH(void) -{ - /* PEMRABORTPATH */ - TEST_TYPE(PEMRABORTPATH, 4, 4); - TEST_TYPE_POINTER(PEMRABORTPATH, 8, 4); -} - -static void test_pack_PEMRANGLEARC(void) -{ - /* PEMRANGLEARC */ - TEST_TYPE(PEMRANGLEARC, 4, 4); - TEST_TYPE_POINTER(PEMRANGLEARC, 28, 4); -} - -static void test_pack_PEMRARC(void) -{ - /* PEMRARC */ - TEST_TYPE(PEMRARC, 4, 4); - TEST_TYPE_POINTER(PEMRARC, 40, 4); -} - -static void test_pack_PEMRARCTO(void) -{ - /* PEMRARCTO */ - TEST_TYPE(PEMRARCTO, 4, 4); - TEST_TYPE_POINTER(PEMRARCTO, 40, 4); -} - -static void test_pack_PEMRBEGINPATH(void) -{ - /* PEMRBEGINPATH */ - TEST_TYPE(PEMRBEGINPATH, 4, 4); - TEST_TYPE_POINTER(PEMRBEGINPATH, 8, 4); -} - -static void test_pack_PEMRBITBLT(void) -{ - /* PEMRBITBLT */ - TEST_TYPE(PEMRBITBLT, 4, 4); - TEST_TYPE_POINTER(PEMRBITBLT, 100, 4); -} - -static void test_pack_PEMRCHORD(void) -{ - /* PEMRCHORD */ - TEST_TYPE(PEMRCHORD, 4, 4); - TEST_TYPE_POINTER(PEMRCHORD, 40, 4); -} - -static void test_pack_PEMRCLOSEFIGURE(void) -{ - /* PEMRCLOSEFIGURE */ - TEST_TYPE(PEMRCLOSEFIGURE, 4, 4); - TEST_TYPE_POINTER(PEMRCLOSEFIGURE, 8, 4); -} - -static void test_pack_PEMRCREATEBRUSHINDIRECT(void) -{ - /* PEMRCREATEBRUSHINDIRECT */ - TEST_TYPE(PEMRCREATEBRUSHINDIRECT, 4, 4); - TEST_TYPE_POINTER(PEMRCREATEBRUSHINDIRECT, 24, 4); -} - -static void test_pack_PEMRCREATECOLORSPACE(void) -{ - /* PEMRCREATECOLORSPACE */ - TEST_TYPE(PEMRCREATECOLORSPACE, 4, 4); - TEST_TYPE_POINTER(PEMRCREATECOLORSPACE, 340, 4); -} - -static void test_pack_PEMRCREATECOLORSPACEW(void) -{ - /* PEMRCREATECOLORSPACEW */ - TEST_TYPE(PEMRCREATECOLORSPACEW, 4, 4); - TEST_TYPE_POINTER(PEMRCREATECOLORSPACEW, 612, 4); -} - -static void test_pack_PEMRCREATEDIBPATTERNBRUSHPT(void) -{ - /* PEMRCREATEDIBPATTERNBRUSHPT */ - TEST_TYPE(PEMRCREATEDIBPATTERNBRUSHPT, 4, 4); - TEST_TYPE_POINTER(PEMRCREATEDIBPATTERNBRUSHPT, 32, 4); -} - -static void test_pack_PEMRCREATEMONOBRUSH(void) -{ - /* PEMRCREATEMONOBRUSH */ - TEST_TYPE(PEMRCREATEMONOBRUSH, 4, 4); - TEST_TYPE_POINTER(PEMRCREATEMONOBRUSH, 32, 4); -} - -static void test_pack_PEMRCREATEPALETTE(void) -{ - /* PEMRCREATEPALETTE */ - TEST_TYPE(PEMRCREATEPALETTE, 4, 4); - TEST_TYPE_POINTER(PEMRCREATEPALETTE, 20, 4); -} - -static void test_pack_PEMRCREATEPEN(void) -{ - /* PEMRCREATEPEN */ - TEST_TYPE(PEMRCREATEPEN, 4, 4); - TEST_TYPE_POINTER(PEMRCREATEPEN, 28, 4); -} - -static void test_pack_PEMRDELETECOLORSPACE(void) -{ - /* PEMRDELETECOLORSPACE */ - TEST_TYPE(PEMRDELETECOLORSPACE, 4, 4); - TEST_TYPE_POINTER(PEMRDELETECOLORSPACE, 12, 4); -} - -static void test_pack_PEMRDELETEOBJECT(void) -{ - /* PEMRDELETEOBJECT */ - TEST_TYPE(PEMRDELETEOBJECT, 4, 4); - TEST_TYPE_POINTER(PEMRDELETEOBJECT, 12, 4); -} - -static void test_pack_PEMRELLIPSE(void) -{ - /* PEMRELLIPSE */ - TEST_TYPE(PEMRELLIPSE, 4, 4); - TEST_TYPE_POINTER(PEMRELLIPSE, 24, 4); -} - -static void test_pack_PEMRENDPATH(void) -{ - /* PEMRENDPATH */ - TEST_TYPE(PEMRENDPATH, 4, 4); - TEST_TYPE_POINTER(PEMRENDPATH, 8, 4); -} - -static void test_pack_PEMREOF(void) -{ - /* PEMREOF */ - TEST_TYPE(PEMREOF, 4, 4); - TEST_TYPE_POINTER(PEMREOF, 20, 4); -} - -static void test_pack_PEMREXCLUDECLIPRECT(void) -{ - /* PEMREXCLUDECLIPRECT */ - TEST_TYPE(PEMREXCLUDECLIPRECT, 4, 4); - TEST_TYPE_POINTER(PEMREXCLUDECLIPRECT, 24, 4); -} - -static void test_pack_PEMREXTCREATEFONTINDIRECTW(void) -{ - /* PEMREXTCREATEFONTINDIRECTW */ - TEST_TYPE(PEMREXTCREATEFONTINDIRECTW, 4, 4); - TEST_TYPE_POINTER(PEMREXTCREATEFONTINDIRECTW, 332, 4); -} - -static void test_pack_PEMREXTCREATEPEN(void) -{ - /* PEMREXTCREATEPEN */ - TEST_TYPE(PEMREXTCREATEPEN, 4, 4); - TEST_TYPE_POINTER(PEMREXTCREATEPEN, 56, 4); -} - -static void test_pack_PEMREXTFLOODFILL(void) -{ - /* PEMREXTFLOODFILL */ - TEST_TYPE(PEMREXTFLOODFILL, 4, 4); - TEST_TYPE_POINTER(PEMREXTFLOODFILL, 24, 4); -} - -static void test_pack_PEMREXTSELECTCLIPRGN(void) -{ - /* PEMREXTSELECTCLIPRGN */ - TEST_TYPE(PEMREXTSELECTCLIPRGN, 4, 4); - TEST_TYPE_POINTER(PEMREXTSELECTCLIPRGN, 20, 4); -} - -static void test_pack_PEMREXTTEXTOUTA(void) -{ - /* PEMREXTTEXTOUTA */ - TEST_TYPE(PEMREXTTEXTOUTA, 4, 4); - TEST_TYPE_POINTER(PEMREXTTEXTOUTA, 76, 4); -} - -static void test_pack_PEMREXTTEXTOUTW(void) -{ - /* PEMREXTTEXTOUTW */ - TEST_TYPE(PEMREXTTEXTOUTW, 4, 4); - TEST_TYPE_POINTER(PEMREXTTEXTOUTW, 76, 4); -} - -static void test_pack_PEMRFILLPATH(void) -{ - /* PEMRFILLPATH */ - TEST_TYPE(PEMRFILLPATH, 4, 4); - TEST_TYPE_POINTER(PEMRFILLPATH, 24, 4); -} - -static void test_pack_PEMRFILLRGN(void) -{ - /* PEMRFILLRGN */ - TEST_TYPE(PEMRFILLRGN, 4, 4); - TEST_TYPE_POINTER(PEMRFILLRGN, 36, 4); -} - -static void test_pack_PEMRFLATTENPATH(void) -{ - /* PEMRFLATTENPATH */ - TEST_TYPE(PEMRFLATTENPATH, 4, 4); - TEST_TYPE_POINTER(PEMRFLATTENPATH, 8, 4); -} - -static void test_pack_PEMRFORMAT(void) -{ - /* PEMRFORMAT */ - TEST_TYPE(PEMRFORMAT, 4, 4); - TEST_TYPE_POINTER(PEMRFORMAT, 16, 4); -} - -static void test_pack_PEMRFRAMERGN(void) -{ - /* PEMRFRAMERGN */ - TEST_TYPE(PEMRFRAMERGN, 4, 4); - TEST_TYPE_POINTER(PEMRFRAMERGN, 44, 4); -} - -static void test_pack_PEMRGDICOMMENT(void) -{ - /* PEMRGDICOMMENT */ - TEST_TYPE(PEMRGDICOMMENT, 4, 4); - TEST_TYPE_POINTER(PEMRGDICOMMENT, 16, 4); -} - -static void test_pack_PEMRGLSBOUNDEDRECORD(void) -{ - /* PEMRGLSBOUNDEDRECORD */ - TEST_TYPE(PEMRGLSBOUNDEDRECORD, 4, 4); - TEST_TYPE_POINTER(PEMRGLSBOUNDEDRECORD, 32, 4); -} - -static void test_pack_PEMRGLSRECORD(void) -{ - /* PEMRGLSRECORD */ - TEST_TYPE(PEMRGLSRECORD, 4, 4); - TEST_TYPE_POINTER(PEMRGLSRECORD, 16, 4); -} - -static void test_pack_PEMRINTERSECTCLIPRECT(void) -{ - /* PEMRINTERSECTCLIPRECT */ - TEST_TYPE(PEMRINTERSECTCLIPRECT, 4, 4); - TEST_TYPE_POINTER(PEMRINTERSECTCLIPRECT, 24, 4); -} - -static void test_pack_PEMRINVERTRGN(void) -{ - /* PEMRINVERTRGN */ - TEST_TYPE(PEMRINVERTRGN, 4, 4); - TEST_TYPE_POINTER(PEMRINVERTRGN, 32, 4); -} - -static void test_pack_PEMRLINETO(void) -{ - /* PEMRLINETO */ - TEST_TYPE(PEMRLINETO, 4, 4); - TEST_TYPE_POINTER(PEMRLINETO, 16, 4); -} - -static void test_pack_PEMRMASKBLT(void) -{ - /* PEMRMASKBLT */ - TEST_TYPE(PEMRMASKBLT, 4, 4); - TEST_TYPE_POINTER(PEMRMASKBLT, 128, 4); -} - -static void test_pack_PEMRMODIFYWORLDTRANSFORM(void) -{ - /* PEMRMODIFYWORLDTRANSFORM */ - TEST_TYPE(PEMRMODIFYWORLDTRANSFORM, 4, 4); - TEST_TYPE_POINTER(PEMRMODIFYWORLDTRANSFORM, 36, 4); -} - -static void test_pack_PEMRMOVETOEX(void) -{ - /* PEMRMOVETOEX */ - TEST_TYPE(PEMRMOVETOEX, 4, 4); - TEST_TYPE_POINTER(PEMRMOVETOEX, 16, 4); -} - -static void test_pack_PEMROFFSETCLIPRGN(void) -{ - /* PEMROFFSETCLIPRGN */ - TEST_TYPE(PEMROFFSETCLIPRGN, 4, 4); - TEST_TYPE_POINTER(PEMROFFSETCLIPRGN, 16, 4); -} - -static void test_pack_PEMRPAINTRGN(void) -{ - /* PEMRPAINTRGN */ - TEST_TYPE(PEMRPAINTRGN, 4, 4); - TEST_TYPE_POINTER(PEMRPAINTRGN, 32, 4); -} - -static void test_pack_PEMRPIE(void) -{ - /* PEMRPIE */ - TEST_TYPE(PEMRPIE, 4, 4); - TEST_TYPE_POINTER(PEMRPIE, 40, 4); -} - -static void test_pack_PEMRPIXELFORMAT(void) -{ - /* PEMRPIXELFORMAT */ - TEST_TYPE(PEMRPIXELFORMAT, 4, 4); - TEST_TYPE_POINTER(PEMRPIXELFORMAT, 48, 4); -} - -static void test_pack_PEMRPLGBLT(void) -{ - /* PEMRPLGBLT */ - TEST_TYPE(PEMRPLGBLT, 4, 4); - TEST_TYPE_POINTER(PEMRPLGBLT, 140, 4); -} - -static void test_pack_PEMRPOLYBEZIER(void) -{ - /* PEMRPOLYBEZIER */ - TEST_TYPE(PEMRPOLYBEZIER, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYBEZIER, 36, 4); -} - -static void test_pack_PEMRPOLYBEZIER16(void) -{ - /* PEMRPOLYBEZIER16 */ - TEST_TYPE(PEMRPOLYBEZIER16, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYBEZIER16, 32, 4); -} - -static void test_pack_PEMRPOLYBEZIERTO(void) -{ - /* PEMRPOLYBEZIERTO */ - TEST_TYPE(PEMRPOLYBEZIERTO, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYBEZIERTO, 36, 4); -} - -static void test_pack_PEMRPOLYBEZIERTO16(void) -{ - /* PEMRPOLYBEZIERTO16 */ - TEST_TYPE(PEMRPOLYBEZIERTO16, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYBEZIERTO16, 32, 4); -} - -static void test_pack_PEMRPOLYDRAW(void) -{ - /* PEMRPOLYDRAW */ - TEST_TYPE(PEMRPOLYDRAW, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYDRAW, 40, 4); -} - -static void test_pack_PEMRPOLYDRAW16(void) -{ - /* PEMRPOLYDRAW16 */ - TEST_TYPE(PEMRPOLYDRAW16, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYDRAW16, 36, 4); -} - -static void test_pack_PEMRPOLYGON(void) -{ - /* PEMRPOLYGON */ - TEST_TYPE(PEMRPOLYGON, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYGON, 36, 4); -} - -static void test_pack_PEMRPOLYGON16(void) -{ - /* PEMRPOLYGON16 */ - TEST_TYPE(PEMRPOLYGON16, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYGON16, 32, 4); -} - -static void test_pack_PEMRPOLYLINE(void) -{ - /* PEMRPOLYLINE */ - TEST_TYPE(PEMRPOLYLINE, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYLINE, 36, 4); -} - -static void test_pack_PEMRPOLYLINE16(void) -{ - /* PEMRPOLYLINE16 */ - TEST_TYPE(PEMRPOLYLINE16, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYLINE16, 32, 4); -} - -static void test_pack_PEMRPOLYLINETO(void) -{ - /* PEMRPOLYLINETO */ - TEST_TYPE(PEMRPOLYLINETO, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYLINETO, 36, 4); -} - -static void test_pack_PEMRPOLYLINETO16(void) -{ - /* PEMRPOLYLINETO16 */ - TEST_TYPE(PEMRPOLYLINETO16, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYLINETO16, 32, 4); -} - -static void test_pack_PEMRPOLYPOLYGON(void) -{ - /* PEMRPOLYPOLYGON */ - TEST_TYPE(PEMRPOLYPOLYGON, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYPOLYGON, 44, 4); -} - -static void test_pack_PEMRPOLYPOLYGON16(void) -{ - /* PEMRPOLYPOLYGON16 */ - TEST_TYPE(PEMRPOLYPOLYGON16, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYPOLYGON16, 40, 4); -} - -static void test_pack_PEMRPOLYPOLYLINE(void) -{ - /* PEMRPOLYPOLYLINE */ - TEST_TYPE(PEMRPOLYPOLYLINE, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYPOLYLINE, 44, 4); -} - -static void test_pack_PEMRPOLYPOLYLINE16(void) -{ - /* PEMRPOLYPOLYLINE16 */ - TEST_TYPE(PEMRPOLYPOLYLINE16, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYPOLYLINE16, 40, 4); -} - -static void test_pack_PEMRPOLYTEXTOUTA(void) -{ - /* PEMRPOLYTEXTOUTA */ - TEST_TYPE(PEMRPOLYTEXTOUTA, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYTEXTOUTA, 80, 4); -} - -static void test_pack_PEMRPOLYTEXTOUTW(void) -{ - /* PEMRPOLYTEXTOUTW */ - TEST_TYPE(PEMRPOLYTEXTOUTW, 4, 4); - TEST_TYPE_POINTER(PEMRPOLYTEXTOUTW, 80, 4); -} - -static void test_pack_PEMRREALIZEPALETTE(void) -{ - /* PEMRREALIZEPALETTE */ - TEST_TYPE(PEMRREALIZEPALETTE, 4, 4); - TEST_TYPE_POINTER(PEMRREALIZEPALETTE, 8, 4); -} - -static void test_pack_PEMRRECTANGLE(void) -{ - /* PEMRRECTANGLE */ - TEST_TYPE(PEMRRECTANGLE, 4, 4); - TEST_TYPE_POINTER(PEMRRECTANGLE, 24, 4); -} - -static void test_pack_PEMRRESIZEPALETTE(void) -{ - /* PEMRRESIZEPALETTE */ - TEST_TYPE(PEMRRESIZEPALETTE, 4, 4); - TEST_TYPE_POINTER(PEMRRESIZEPALETTE, 16, 4); -} - -static void test_pack_PEMRRESTOREDC(void) -{ - /* PEMRRESTOREDC */ - TEST_TYPE(PEMRRESTOREDC, 4, 4); - TEST_TYPE_POINTER(PEMRRESTOREDC, 12, 4); -} - -static void test_pack_PEMRROUNDRECT(void) -{ - /* PEMRROUNDRECT */ - TEST_TYPE(PEMRROUNDRECT, 4, 4); - TEST_TYPE_POINTER(PEMRROUNDRECT, 32, 4); -} - -static void test_pack_PEMRSAVEDC(void) -{ - /* PEMRSAVEDC */ - TEST_TYPE(PEMRSAVEDC, 4, 4); - TEST_TYPE_POINTER(PEMRSAVEDC, 8, 4); -} - -static void test_pack_PEMRSCALEVIEWPORTEXTEX(void) -{ - /* PEMRSCALEVIEWPORTEXTEX */ - TEST_TYPE(PEMRSCALEVIEWPORTEXTEX, 4, 4); - TEST_TYPE_POINTER(PEMRSCALEVIEWPORTEXTEX, 24, 4); -} - -static void test_pack_PEMRSCALEWINDOWEXTEX(void) -{ - /* PEMRSCALEWINDOWEXTEX */ - TEST_TYPE(PEMRSCALEWINDOWEXTEX, 4, 4); - TEST_TYPE_POINTER(PEMRSCALEWINDOWEXTEX, 24, 4); -} - -static void test_pack_PEMRSELECTCLIPPATH(void) -{ - /* PEMRSELECTCLIPPATH */ - TEST_TYPE(PEMRSELECTCLIPPATH, 4, 4); - TEST_TYPE_POINTER(PEMRSELECTCLIPPATH, 12, 4); -} - -static void test_pack_PEMRSELECTCOLORSPACE(void) -{ - /* PEMRSELECTCOLORSPACE */ - TEST_TYPE(PEMRSELECTCOLORSPACE, 4, 4); - TEST_TYPE_POINTER(PEMRSELECTCOLORSPACE, 12, 4); -} - -static void test_pack_PEMRSELECTOBJECT(void) -{ - /* PEMRSELECTOBJECT */ - TEST_TYPE(PEMRSELECTOBJECT, 4, 4); - TEST_TYPE_POINTER(PEMRSELECTOBJECT, 12, 4); -} - -static void test_pack_PEMRSELECTPALETTE(void) -{ - /* PEMRSELECTPALETTE */ - TEST_TYPE(PEMRSELECTPALETTE, 4, 4); - TEST_TYPE_POINTER(PEMRSELECTPALETTE, 12, 4); -} - -static void test_pack_PEMRSETARCDIRECTION(void) -{ - /* PEMRSETARCDIRECTION */ - TEST_TYPE(PEMRSETARCDIRECTION, 4, 4); - TEST_TYPE_POINTER(PEMRSETARCDIRECTION, 12, 4); -} - -static void test_pack_PEMRSETBKCOLOR(void) -{ - /* PEMRSETBKCOLOR */ - TEST_TYPE(PEMRSETBKCOLOR, 4, 4); - TEST_TYPE_POINTER(PEMRSETBKCOLOR, 12, 4); -} - -static void test_pack_PEMRSETBKMODE(void) -{ - /* PEMRSETBKMODE */ - TEST_TYPE(PEMRSETBKMODE, 4, 4); - TEST_TYPE_POINTER(PEMRSETBKMODE, 12, 4); -} - -static void test_pack_PEMRSETBRUSHORGEX(void) -{ - /* PEMRSETBRUSHORGEX */ - TEST_TYPE(PEMRSETBRUSHORGEX, 4, 4); - TEST_TYPE_POINTER(PEMRSETBRUSHORGEX, 16, 4); -} - -static void test_pack_PEMRSETCOLORADJUSTMENT(void) -{ - /* PEMRSETCOLORADJUSTMENT */ - TEST_TYPE(PEMRSETCOLORADJUSTMENT, 4, 4); - TEST_TYPE_POINTER(PEMRSETCOLORADJUSTMENT, 32, 4); -} - -static void test_pack_PEMRSETCOLORSPACE(void) -{ - /* PEMRSETCOLORSPACE */ - TEST_TYPE(PEMRSETCOLORSPACE, 4, 4); - TEST_TYPE_POINTER(PEMRSETCOLORSPACE, 12, 4); -} - -static void test_pack_PEMRSETDIBITSTODEVICE(void) -{ - /* PEMRSETDIBITSTODEVICE */ - TEST_TYPE(PEMRSETDIBITSTODEVICE, 4, 4); - TEST_TYPE_POINTER(PEMRSETDIBITSTODEVICE, 76, 4); -} - -static void test_pack_PEMRSETICMMODE(void) -{ - /* PEMRSETICMMODE */ - TEST_TYPE(PEMRSETICMMODE, 4, 4); - TEST_TYPE_POINTER(PEMRSETICMMODE, 12, 4); -} - -static void test_pack_PEMRSETLAYOUT(void) -{ - /* PEMRSETLAYOUT */ - TEST_TYPE(PEMRSETLAYOUT, 4, 4); - TEST_TYPE_POINTER(PEMRSETLAYOUT, 12, 4); -} - -static void test_pack_PEMRSETMAPMODE(void) -{ - /* PEMRSETMAPMODE */ - TEST_TYPE(PEMRSETMAPMODE, 4, 4); - TEST_TYPE_POINTER(PEMRSETMAPMODE, 12, 4); -} - -static void test_pack_PEMRSETMAPPERFLAGS(void) -{ - /* PEMRSETMAPPERFLAGS */ - TEST_TYPE(PEMRSETMAPPERFLAGS, 4, 4); - TEST_TYPE_POINTER(PEMRSETMAPPERFLAGS, 12, 4); -} - -static void test_pack_PEMRSETMETARGN(void) -{ - /* PEMRSETMETARGN */ - TEST_TYPE(PEMRSETMETARGN, 4, 4); - TEST_TYPE_POINTER(PEMRSETMETARGN, 8, 4); -} - -static void test_pack_PEMRSETMITERLIMIT(void) -{ - /* PEMRSETMITERLIMIT */ - TEST_TYPE(PEMRSETMITERLIMIT, 4, 4); - TEST_TYPE_POINTER(PEMRSETMITERLIMIT, 12, 4); -} - -static void test_pack_PEMRSETPALETTEENTRIES(void) -{ - /* PEMRSETPALETTEENTRIES */ - TEST_TYPE(PEMRSETPALETTEENTRIES, 4, 4); - TEST_TYPE_POINTER(PEMRSETPALETTEENTRIES, 24, 4); -} - -static void test_pack_PEMRSETPIXELV(void) -{ - /* PEMRSETPIXELV */ - TEST_TYPE(PEMRSETPIXELV, 4, 4); - TEST_TYPE_POINTER(PEMRSETPIXELV, 20, 4); -} - -static void test_pack_PEMRSETPOLYFILLMODE(void) -{ - /* PEMRSETPOLYFILLMODE */ - TEST_TYPE(PEMRSETPOLYFILLMODE, 4, 4); - TEST_TYPE_POINTER(PEMRSETPOLYFILLMODE, 12, 4); -} - -static void test_pack_PEMRSETROP2(void) -{ - /* PEMRSETROP2 */ - TEST_TYPE(PEMRSETROP2, 4, 4); - TEST_TYPE_POINTER(PEMRSETROP2, 12, 4); -} - -static void test_pack_PEMRSETSTRETCHBLTMODE(void) -{ - /* PEMRSETSTRETCHBLTMODE */ - TEST_TYPE(PEMRSETSTRETCHBLTMODE, 4, 4); - TEST_TYPE_POINTER(PEMRSETSTRETCHBLTMODE, 12, 4); -} - -static void test_pack_PEMRSETTEXTALIGN(void) -{ - /* PEMRSETTEXTALIGN */ - TEST_TYPE(PEMRSETTEXTALIGN, 4, 4); - TEST_TYPE_POINTER(PEMRSETTEXTALIGN, 12, 4); -} - -static void test_pack_PEMRSETTEXTCOLOR(void) -{ - /* PEMRSETTEXTCOLOR */ - TEST_TYPE(PEMRSETTEXTCOLOR, 4, 4); - TEST_TYPE_POINTER(PEMRSETTEXTCOLOR, 12, 4); -} - -static void test_pack_PEMRSETVIEWPORTEXTEX(void) -{ - /* PEMRSETVIEWPORTEXTEX */ - TEST_TYPE(PEMRSETVIEWPORTEXTEX, 4, 4); - TEST_TYPE_POINTER(PEMRSETVIEWPORTEXTEX, 16, 4); -} - -static void test_pack_PEMRSETVIEWPORTORGEX(void) -{ - /* PEMRSETVIEWPORTORGEX */ - TEST_TYPE(PEMRSETVIEWPORTORGEX, 4, 4); - TEST_TYPE_POINTER(PEMRSETVIEWPORTORGEX, 16, 4); -} - -static void test_pack_PEMRSETWINDOWEXTEX(void) -{ - /* PEMRSETWINDOWEXTEX */ - TEST_TYPE(PEMRSETWINDOWEXTEX, 4, 4); - TEST_TYPE_POINTER(PEMRSETWINDOWEXTEX, 16, 4); -} - -static void test_pack_PEMRSETWINDOWORGEX(void) -{ - /* PEMRSETWINDOWORGEX */ - TEST_TYPE(PEMRSETWINDOWORGEX, 4, 4); - TEST_TYPE_POINTER(PEMRSETWINDOWORGEX, 16, 4); -} - -static void test_pack_PEMRSETWORLDTRANSFORM(void) -{ - /* PEMRSETWORLDTRANSFORM */ - TEST_TYPE(PEMRSETWORLDTRANSFORM, 4, 4); - TEST_TYPE_POINTER(PEMRSETWORLDTRANSFORM, 32, 4); -} - -static void test_pack_PEMRSTRETCHBLT(void) -{ - /* PEMRSTRETCHBLT */ - TEST_TYPE(PEMRSTRETCHBLT, 4, 4); - TEST_TYPE_POINTER(PEMRSTRETCHBLT, 108, 4); -} - -static void test_pack_PEMRSTRETCHDIBITS(void) -{ - /* PEMRSTRETCHDIBITS */ - TEST_TYPE(PEMRSTRETCHDIBITS, 4, 4); - TEST_TYPE_POINTER(PEMRSTRETCHDIBITS, 80, 4); -} - -static void test_pack_PEMRSTROKEANDFILLPATH(void) -{ - /* PEMRSTROKEANDFILLPATH */ - TEST_TYPE(PEMRSTROKEANDFILLPATH, 4, 4); - TEST_TYPE_POINTER(PEMRSTROKEANDFILLPATH, 24, 4); -} - -static void test_pack_PEMRSTROKEPATH(void) -{ - /* PEMRSTROKEPATH */ - TEST_TYPE(PEMRSTROKEPATH, 4, 4); - TEST_TYPE_POINTER(PEMRSTROKEPATH, 24, 4); -} - -static void test_pack_PEMRTEXT(void) -{ - /* PEMRTEXT */ - TEST_TYPE(PEMRTEXT, 4, 4); - TEST_TYPE_POINTER(PEMRTEXT, 40, 4); -} - -static void test_pack_PEMRWIDENPATH(void) -{ - /* PEMRWIDENPATH */ - TEST_TYPE(PEMRWIDENPATH, 4, 4); - TEST_TYPE_POINTER(PEMRWIDENPATH, 8, 4); -} - -static void test_pack_PENHMETAHEADER(void) -{ - /* PENHMETAHEADER */ - TEST_TYPE(PENHMETAHEADER, 4, 4); - TEST_TYPE_POINTER(PENHMETAHEADER, 108, 4); -} - -static void test_pack_PEXTLOGFONTA(void) -{ - /* PEXTLOGFONTA */ - TEST_TYPE(PEXTLOGFONTA, 4, 4); - TEST_TYPE_POINTER(PEXTLOGFONTA, 192, 4); -} - -static void test_pack_PEXTLOGFONTW(void) -{ - /* PEXTLOGFONTW */ - TEST_TYPE(PEXTLOGFONTW, 4, 4); - TEST_TYPE_POINTER(PEXTLOGFONTW, 320, 4); -} - -static void test_pack_PEXTLOGPEN(void) -{ - /* PEXTLOGPEN */ - TEST_TYPE(PEXTLOGPEN, 4, 4); - TEST_TYPE_POINTER(PEXTLOGPEN, 28, 4); -} - -static void test_pack_PFONTSIGNATURE(void) -{ - /* PFONTSIGNATURE */ - TEST_TYPE(PFONTSIGNATURE, 4, 4); - TEST_TYPE_POINTER(PFONTSIGNATURE, 24, 4); -} - -static void test_pack_PGLYPHMETRICSFLOAT(void) -{ - /* PGLYPHMETRICSFLOAT */ - TEST_TYPE(PGLYPHMETRICSFLOAT, 4, 4); - TEST_TYPE_POINTER(PGLYPHMETRICSFLOAT, 24, 4); -} - -static void test_pack_PGRADIENT_RECT(void) -{ - /* PGRADIENT_RECT */ - TEST_TYPE(PGRADIENT_RECT, 4, 4); - TEST_TYPE_POINTER(PGRADIENT_RECT, 8, 4); -} - -static void test_pack_PGRADIENT_TRIANGLE(void) -{ - /* PGRADIENT_TRIANGLE */ - TEST_TYPE(PGRADIENT_TRIANGLE, 4, 4); - TEST_TYPE_POINTER(PGRADIENT_TRIANGLE, 12, 4); -} - -static void test_pack_PHANDLETABLE(void) -{ - /* PHANDLETABLE */ - TEST_TYPE(PHANDLETABLE, 4, 4); - TEST_TYPE_POINTER(PHANDLETABLE, 4, 4); -} - -static void test_pack_PIXELFORMATDESCRIPTOR(void) -{ - /* PIXELFORMATDESCRIPTOR (pack 4) */ - TEST_TYPE(PIXELFORMATDESCRIPTOR, 40, 4); - TEST_FIELD(PIXELFORMATDESCRIPTOR, WORD, nSize, 0, 2, 2); - TEST_FIELD(PIXELFORMATDESCRIPTOR, WORD, nVersion, 2, 2, 2); - TEST_FIELD(PIXELFORMATDESCRIPTOR, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, iPixelType, 8, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cColorBits, 9, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cRedBits, 10, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cRedShift, 11, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cGreenBits, 12, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cGreenShift, 13, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cBlueBits, 14, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cBlueShift, 15, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAlphaBits, 16, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAlphaShift, 17, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumBits, 18, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumRedBits, 19, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumGreenBits, 20, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumBlueBits, 21, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumAlphaBits, 22, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cDepthBits, 23, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cStencilBits, 24, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAuxBuffers, 25, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, iLayerType, 26, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, bReserved, 27, 1, 1); - TEST_FIELD(PIXELFORMATDESCRIPTOR, DWORD, dwLayerMask, 28, 4, 4); - TEST_FIELD(PIXELFORMATDESCRIPTOR, DWORD, dwVisibleMask, 32, 4, 4); - TEST_FIELD(PIXELFORMATDESCRIPTOR, DWORD, dwDamageMask, 36, 4, 4); -} - -static void test_pack_PLAYERPLANEDESCRIPTOR(void) -{ - /* PLAYERPLANEDESCRIPTOR */ - TEST_TYPE(PLAYERPLANEDESCRIPTOR, 4, 4); - TEST_TYPE_POINTER(PLAYERPLANEDESCRIPTOR, 32, 4); -} - -static void test_pack_PLOCALESIGNATURE(void) -{ - /* PLOCALESIGNATURE */ - TEST_TYPE(PLOCALESIGNATURE, 4, 4); - TEST_TYPE_POINTER(PLOCALESIGNATURE, 32, 4); -} - -static void test_pack_PLOGBRUSH(void) -{ - /* PLOGBRUSH */ - TEST_TYPE(PLOGBRUSH, 4, 4); - TEST_TYPE_POINTER(PLOGBRUSH, 12, 4); -} - -static void test_pack_PLOGFONTA(void) -{ - /* PLOGFONTA */ - TEST_TYPE(PLOGFONTA, 4, 4); - TEST_TYPE_POINTER(PLOGFONTA, 60, 4); -} - -static void test_pack_PLOGFONTW(void) -{ - /* PLOGFONTW */ - TEST_TYPE(PLOGFONTW, 4, 4); - TEST_TYPE_POINTER(PLOGFONTW, 92, 4); -} - -static void test_pack_PMETAHEADER(void) -{ - /* PMETAHEADER */ - TEST_TYPE(PMETAHEADER, 4, 4); - TEST_TYPE_POINTER(PMETAHEADER, 18, 2); -} - -static void test_pack_PMETARECORD(void) -{ - /* PMETARECORD */ - TEST_TYPE(PMETARECORD, 4, 4); - TEST_TYPE_POINTER(PMETARECORD, 8, 4); -} - -static void test_pack_PNEWTEXTMETRICA(void) -{ - /* PNEWTEXTMETRICA */ - TEST_TYPE(PNEWTEXTMETRICA, 4, 4); - TEST_TYPE_POINTER(PNEWTEXTMETRICA, 72, 4); -} - -static void test_pack_PNEWTEXTMETRICW(void) -{ - /* PNEWTEXTMETRICW */ - TEST_TYPE(PNEWTEXTMETRICW, 4, 4); - TEST_TYPE_POINTER(PNEWTEXTMETRICW, 76, 4); -} - -static void test_pack_POINTFLOAT(void) -{ - /* POINTFLOAT (pack 4) */ - TEST_TYPE(POINTFLOAT, 8, 4); - TEST_FIELD(POINTFLOAT, FLOAT, x, 0, 4, 4); - TEST_FIELD(POINTFLOAT, FLOAT, y, 4, 4, 4); -} - -static void test_pack_POINTFX(void) -{ - /* POINTFX (pack 4) */ - TEST_TYPE(POINTFX, 8, 2); - TEST_FIELD(POINTFX, FIXED, x, 0, 4, 2); - TEST_FIELD(POINTFX, FIXED, y, 4, 4, 2); -} - -static void test_pack_POLYTEXTA(void) -{ - /* POLYTEXTA (pack 4) */ - TEST_TYPE(POLYTEXTA, 40, 4); - TEST_FIELD(POLYTEXTA, INT, x, 0, 4, 4); - TEST_FIELD(POLYTEXTA, INT, y, 4, 4, 4); - TEST_FIELD(POLYTEXTA, UINT, n, 8, 4, 4); - TEST_FIELD(POLYTEXTA, LPCSTR, lpstr, 12, 4, 4); - TEST_FIELD(POLYTEXTA, UINT, uiFlags, 16, 4, 4); - TEST_FIELD(POLYTEXTA, RECT, rcl, 20, 16, 4); - TEST_FIELD(POLYTEXTA, INT *, pdx, 36, 4, 4); -} - -static void test_pack_POLYTEXTW(void) -{ - /* POLYTEXTW (pack 4) */ - TEST_TYPE(POLYTEXTW, 40, 4); - TEST_FIELD(POLYTEXTW, INT, x, 0, 4, 4); - TEST_FIELD(POLYTEXTW, INT, y, 4, 4, 4); - TEST_FIELD(POLYTEXTW, UINT, n, 8, 4, 4); - TEST_FIELD(POLYTEXTW, LPCWSTR, lpstr, 12, 4, 4); - TEST_FIELD(POLYTEXTW, UINT, uiFlags, 16, 4, 4); - TEST_FIELD(POLYTEXTW, RECT, rcl, 20, 16, 4); - TEST_FIELD(POLYTEXTW, INT *, pdx, 36, 4, 4); -} - -static void test_pack_POUTLINETEXTMETRICA(void) -{ - /* POUTLINETEXTMETRICA */ - TEST_TYPE(POUTLINETEXTMETRICA, 4, 4); - TEST_TYPE_POINTER(POUTLINETEXTMETRICA, 212, 4); -} - -static void test_pack_POUTLINETEXTMETRICW(void) -{ - /* POUTLINETEXTMETRICW */ - TEST_TYPE(POUTLINETEXTMETRICW, 4, 4); - TEST_TYPE_POINTER(POUTLINETEXTMETRICW, 216, 4); -} - -static void test_pack_PPELARRAY(void) -{ - /* PPELARRAY */ - TEST_TYPE(PPELARRAY, 4, 4); - TEST_TYPE_POINTER(PPELARRAY, 20, 4); -} - -static void test_pack_PPIXELFORMATDESCRIPTOR(void) -{ - /* PPIXELFORMATDESCRIPTOR */ - TEST_TYPE(PPIXELFORMATDESCRIPTOR, 4, 4); - TEST_TYPE_POINTER(PPIXELFORMATDESCRIPTOR, 40, 4); -} - -static void test_pack_PPOINTFLOAT(void) -{ - /* PPOINTFLOAT */ - TEST_TYPE(PPOINTFLOAT, 4, 4); - TEST_TYPE_POINTER(PPOINTFLOAT, 8, 4); -} - -static void test_pack_PPOLYTEXTA(void) -{ - /* PPOLYTEXTA */ - TEST_TYPE(PPOLYTEXTA, 4, 4); - TEST_TYPE_POINTER(PPOLYTEXTA, 40, 4); -} - -static void test_pack_PPOLYTEXTW(void) -{ - /* PPOLYTEXTW */ - TEST_TYPE(PPOLYTEXTW, 4, 4); - TEST_TYPE_POINTER(PPOLYTEXTW, 40, 4); -} - -static void test_pack_PRGNDATA(void) -{ - /* PRGNDATA */ - TEST_TYPE(PRGNDATA, 4, 4); - TEST_TYPE_POINTER(PRGNDATA, 36, 4); -} - -static void test_pack_PRGNDATAHEADER(void) -{ - /* PRGNDATAHEADER */ - TEST_TYPE(PRGNDATAHEADER, 4, 4); - TEST_TYPE_POINTER(PRGNDATAHEADER, 32, 4); -} - -static void test_pack_PTEXTMETRICA(void) -{ - /* PTEXTMETRICA */ - TEST_TYPE(PTEXTMETRICA, 4, 4); - TEST_TYPE_POINTER(PTEXTMETRICA, 56, 4); -} - -static void test_pack_PTEXTMETRICW(void) -{ - /* PTEXTMETRICW */ - TEST_TYPE(PTEXTMETRICW, 4, 4); - TEST_TYPE_POINTER(PTEXTMETRICW, 60, 4); -} - -static void test_pack_PTRIVERTEX(void) -{ - /* PTRIVERTEX */ - TEST_TYPE(PTRIVERTEX, 4, 4); - TEST_TYPE_POINTER(PTRIVERTEX, 16, 4); -} - -static void test_pack_PXFORM(void) -{ - /* PXFORM */ - TEST_TYPE(PXFORM, 4, 4); - TEST_TYPE_POINTER(PXFORM, 24, 4); -} - -static void test_pack_RASTERIZER_STATUS(void) -{ - /* RASTERIZER_STATUS (pack 4) */ - TEST_TYPE(RASTERIZER_STATUS, 6, 2); - TEST_FIELD(RASTERIZER_STATUS, SHORT, nSize, 0, 2, 2); - TEST_FIELD(RASTERIZER_STATUS, SHORT, wFlags, 2, 2, 2); - TEST_FIELD(RASTERIZER_STATUS, SHORT, nLanguageID, 4, 2, 2); -} - -static void test_pack_RGBQUAD(void) -{ - /* RGBQUAD (pack 4) */ - TEST_TYPE(RGBQUAD, 4, 1); - TEST_FIELD(RGBQUAD, BYTE, rgbBlue, 0, 1, 1); - TEST_FIELD(RGBQUAD, BYTE, rgbGreen, 1, 1, 1); - TEST_FIELD(RGBQUAD, BYTE, rgbRed, 2, 1, 1); - TEST_FIELD(RGBQUAD, BYTE, rgbReserved, 3, 1, 1); -} - -static void test_pack_RGBTRIPLE(void) -{ - /* RGBTRIPLE (pack 4) */ - TEST_TYPE(RGBTRIPLE, 3, 1); - TEST_FIELD(RGBTRIPLE, BYTE, rgbtBlue, 0, 1, 1); - TEST_FIELD(RGBTRIPLE, BYTE, rgbtGreen, 1, 1, 1); - TEST_FIELD(RGBTRIPLE, BYTE, rgbtRed, 2, 1, 1); -} - -static void test_pack_RGNDATA(void) -{ - /* RGNDATA (pack 4) */ - TEST_TYPE(RGNDATA, 36, 4); - TEST_FIELD(RGNDATA, RGNDATAHEADER, rdh, 0, 32, 4); - TEST_FIELD(RGNDATA, char[1], Buffer, 32, 1, 1); -} - -static void test_pack_RGNDATAHEADER(void) -{ - /* RGNDATAHEADER (pack 4) */ - TEST_TYPE(RGNDATAHEADER, 32, 4); - TEST_FIELD(RGNDATAHEADER, DWORD, dwSize, 0, 4, 4); - TEST_FIELD(RGNDATAHEADER, DWORD, iType, 4, 4, 4); - TEST_FIELD(RGNDATAHEADER, DWORD, nCount, 8, 4, 4); - TEST_FIELD(RGNDATAHEADER, DWORD, nRgnSize, 12, 4, 4); - TEST_FIELD(RGNDATAHEADER, RECT, rcBound, 16, 16, 4); -} - -static void test_pack_TEXTMETRICA(void) -{ - /* TEXTMETRICA (pack 4) */ - TEST_TYPE(TEXTMETRICA, 56, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmHeight, 0, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmAscent, 4, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmDescent, 8, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmInternalLeading, 12, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmExternalLeading, 16, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmAveCharWidth, 20, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmMaxCharWidth, 24, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmWeight, 28, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmOverhang, 32, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmDigitizedAspectX, 36, 4, 4); - TEST_FIELD(TEXTMETRICA, LONG, tmDigitizedAspectY, 40, 4, 4); - TEST_FIELD(TEXTMETRICA, BYTE, tmFirstChar, 44, 1, 1); - TEST_FIELD(TEXTMETRICA, BYTE, tmLastChar, 45, 1, 1); - TEST_FIELD(TEXTMETRICA, BYTE, tmDefaultChar, 46, 1, 1); - TEST_FIELD(TEXTMETRICA, BYTE, tmBreakChar, 47, 1, 1); - TEST_FIELD(TEXTMETRICA, BYTE, tmItalic, 48, 1, 1); - TEST_FIELD(TEXTMETRICA, BYTE, tmUnderlined, 49, 1, 1); - TEST_FIELD(TEXTMETRICA, BYTE, tmStruckOut, 50, 1, 1); - TEST_FIELD(TEXTMETRICA, BYTE, tmPitchAndFamily, 51, 1, 1); - TEST_FIELD(TEXTMETRICA, BYTE, tmCharSet, 52, 1, 1); -} - -static void test_pack_TEXTMETRICW(void) -{ - /* TEXTMETRICW (pack 4) */ - TEST_TYPE(TEXTMETRICW, 60, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmHeight, 0, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmAscent, 4, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmDescent, 8, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmInternalLeading, 12, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmExternalLeading, 16, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmAveCharWidth, 20, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmMaxCharWidth, 24, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmWeight, 28, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmOverhang, 32, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmDigitizedAspectX, 36, 4, 4); - TEST_FIELD(TEXTMETRICW, LONG, tmDigitizedAspectY, 40, 4, 4); - TEST_FIELD(TEXTMETRICW, WCHAR, tmFirstChar, 44, 2, 2); - TEST_FIELD(TEXTMETRICW, WCHAR, tmLastChar, 46, 2, 2); - TEST_FIELD(TEXTMETRICW, WCHAR, tmDefaultChar, 48, 2, 2); - TEST_FIELD(TEXTMETRICW, WCHAR, tmBreakChar, 50, 2, 2); - TEST_FIELD(TEXTMETRICW, BYTE, tmItalic, 52, 1, 1); - TEST_FIELD(TEXTMETRICW, BYTE, tmUnderlined, 53, 1, 1); - TEST_FIELD(TEXTMETRICW, BYTE, tmStruckOut, 54, 1, 1); - TEST_FIELD(TEXTMETRICW, BYTE, tmPitchAndFamily, 55, 1, 1); - TEST_FIELD(TEXTMETRICW, BYTE, tmCharSet, 56, 1, 1); -} - -static void test_pack_TRIVERTEX(void) -{ - /* TRIVERTEX (pack 4) */ - TEST_TYPE(TRIVERTEX, 16, 4); - TEST_FIELD(TRIVERTEX, LONG, x, 0, 4, 4); - TEST_FIELD(TRIVERTEX, LONG, y, 4, 4, 4); - TEST_FIELD(TRIVERTEX, COLOR16, Red, 8, 2, 2); - TEST_FIELD(TRIVERTEX, COLOR16, Green, 10, 2, 2); - TEST_FIELD(TRIVERTEX, COLOR16, Blue, 12, 2, 2); - TEST_FIELD(TRIVERTEX, COLOR16, Alpha, 14, 2, 2); -} - -static void test_pack_TTPOLYCURVE(void) -{ - /* TTPOLYCURVE (pack 4) */ - TEST_TYPE(TTPOLYCURVE, 12, 2); - TEST_FIELD(TTPOLYCURVE, WORD, wType, 0, 2, 2); - TEST_FIELD(TTPOLYCURVE, WORD, cpfx, 2, 2, 2); - TEST_FIELD(TTPOLYCURVE, POINTFX[1], apfx, 4, 8, 2); -} - -static void test_pack_TTPOLYGONHEADER(void) -{ - /* TTPOLYGONHEADER (pack 4) */ - TEST_TYPE(TTPOLYGONHEADER, 16, 4); - TEST_FIELD(TTPOLYGONHEADER, DWORD, cb, 0, 4, 4); - TEST_FIELD(TTPOLYGONHEADER, DWORD, dwType, 4, 4, 4); - TEST_FIELD(TTPOLYGONHEADER, POINTFX, pfxStart, 8, 8, 2); -} - -static void test_pack_XFORM(void) -{ - /* XFORM (pack 4) */ - TEST_TYPE(XFORM, 24, 4); - TEST_FIELD(XFORM, FLOAT, eM11, 0, 4, 4); - TEST_FIELD(XFORM, FLOAT, eM12, 4, 4, 4); - TEST_FIELD(XFORM, FLOAT, eM21, 8, 4, 4); - TEST_FIELD(XFORM, FLOAT, eM22, 12, 4, 4); - TEST_FIELD(XFORM, FLOAT, eDx, 16, 4, 4); - TEST_FIELD(XFORM, FLOAT, eDy, 20, 4, 4); -} - -static void test_pack(void) -{ - test_pack_ABC(); - test_pack_ABCFLOAT(); - test_pack_ABORTPROC(); - test_pack_BITMAP(); - test_pack_BITMAPCOREHEADER(); - test_pack_BITMAPCOREINFO(); - test_pack_BITMAPFILEHEADER(); - test_pack_BITMAPINFO(); - test_pack_BITMAPINFOHEADER(); - test_pack_BITMAPV4HEADER(); - test_pack_BITMAPV5HEADER(); - test_pack_BLENDFUNCTION(); - test_pack_CHARSETINFO(); - test_pack_CIEXYZ(); - test_pack_CIEXYZTRIPLE(); - test_pack_COLOR16(); - test_pack_COLORADJUSTMENT(); - test_pack_DEVMODEA(); - test_pack_DEVMODEW(); - test_pack_DIBSECTION(); - test_pack_DISPLAY_DEVICEA(); - test_pack_DISPLAY_DEVICEW(); - test_pack_DOCINFOA(); - test_pack_DOCINFOW(); - test_pack_EMR(); - test_pack_EMRABORTPATH(); - test_pack_EMRANGLEARC(); - test_pack_EMRARC(); - test_pack_EMRARCTO(); - test_pack_EMRBEGINPATH(); - test_pack_EMRBITBLT(); - test_pack_EMRCHORD(); - test_pack_EMRCLOSEFIGURE(); - test_pack_EMRCREATEBRUSHINDIRECT(); - test_pack_EMRCREATECOLORSPACE(); - test_pack_EMRCREATECOLORSPACEW(); - test_pack_EMRCREATEDIBPATTERNBRUSHPT(); - test_pack_EMRCREATEMONOBRUSH(); - test_pack_EMRCREATEPEN(); - test_pack_EMRDELETECOLORSPACE(); - test_pack_EMRDELETEOBJECT(); - test_pack_EMRELLIPSE(); - test_pack_EMRENDPATH(); - test_pack_EMREOF(); - test_pack_EMREXCLUDECLIPRECT(); - test_pack_EMREXTCREATEFONTINDIRECTW(); - test_pack_EMREXTCREATEPEN(); - test_pack_EMREXTFLOODFILL(); - test_pack_EMREXTSELECTCLIPRGN(); - test_pack_EMREXTTEXTOUTA(); - test_pack_EMREXTTEXTOUTW(); - test_pack_EMRFILLPATH(); - test_pack_EMRFILLRGN(); - test_pack_EMRFLATTENPATH(); - test_pack_EMRFORMAT(); - test_pack_EMRFRAMERGN(); - test_pack_EMRGDICOMMENT(); - test_pack_EMRGLSBOUNDEDRECORD(); - test_pack_EMRGLSRECORD(); - test_pack_EMRINTERSECTCLIPRECT(); - test_pack_EMRINVERTRGN(); - test_pack_EMRLINETO(); - test_pack_EMRMASKBLT(); - test_pack_EMRMODIFYWORLDTRANSFORM(); - test_pack_EMRMOVETOEX(); - test_pack_EMROFFSETCLIPRGN(); - test_pack_EMRPAINTRGN(); - test_pack_EMRPIE(); - test_pack_EMRPIXELFORMAT(); - test_pack_EMRPLGBLT(); - test_pack_EMRPOLYBEZIER(); - test_pack_EMRPOLYBEZIER16(); - test_pack_EMRPOLYBEZIERTO(); - test_pack_EMRPOLYBEZIERTO16(); - test_pack_EMRPOLYDRAW(); - test_pack_EMRPOLYDRAW16(); - test_pack_EMRPOLYGON(); - test_pack_EMRPOLYGON16(); - test_pack_EMRPOLYLINE(); - test_pack_EMRPOLYLINE16(); - test_pack_EMRPOLYLINETO(); - test_pack_EMRPOLYLINETO16(); - test_pack_EMRPOLYPOLYGON(); - test_pack_EMRPOLYPOLYGON16(); - test_pack_EMRPOLYPOLYLINE(); - test_pack_EMRPOLYPOLYLINE16(); - test_pack_EMRPOLYTEXTOUTA(); - test_pack_EMRPOLYTEXTOUTW(); - test_pack_EMRREALIZEPALETTE(); - test_pack_EMRRECTANGLE(); - test_pack_EMRRESIZEPALETTE(); - test_pack_EMRRESTOREDC(); - test_pack_EMRROUNDRECT(); - test_pack_EMRSAVEDC(); - test_pack_EMRSCALEVIEWPORTEXTEX(); - test_pack_EMRSCALEWINDOWEXTEX(); - test_pack_EMRSELECTCLIPPATH(); - test_pack_EMRSELECTCOLORSPACE(); - test_pack_EMRSELECTOBJECT(); - test_pack_EMRSELECTPALETTE(); - test_pack_EMRSETARCDIRECTION(); - test_pack_EMRSETBKCOLOR(); - test_pack_EMRSETBKMODE(); - test_pack_EMRSETBRUSHORGEX(); - test_pack_EMRSETCOLORADJUSTMENT(); - test_pack_EMRSETCOLORSPACE(); - test_pack_EMRSETDIBITSTODEVICE(); - test_pack_EMRSETICMMODE(); - test_pack_EMRSETLAYOUT(); - test_pack_EMRSETMAPMODE(); - test_pack_EMRSETMAPPERFLAGS(); - test_pack_EMRSETMETARGN(); - test_pack_EMRSETMITERLIMIT(); - test_pack_EMRSETPIXELV(); - test_pack_EMRSETPOLYFILLMODE(); - test_pack_EMRSETROP2(); - test_pack_EMRSETSTRETCHBLTMODE(); - test_pack_EMRSETTEXTALIGN(); - test_pack_EMRSETTEXTCOLOR(); - test_pack_EMRSETVIEWPORTEXTEX(); - test_pack_EMRSETVIEWPORTORGEX(); - test_pack_EMRSETWINDOWEXTEX(); - test_pack_EMRSETWINDOWORGEX(); - test_pack_EMRSETWORLDTRANSFORM(); - test_pack_EMRSTRETCHBLT(); - test_pack_EMRSTRETCHDIBITS(); - test_pack_EMRSTROKEANDFILLPATH(); - test_pack_EMRSTROKEPATH(); - test_pack_EMRTEXT(); - test_pack_EMRWIDENPATH(); - test_pack_ENHMETAHEADER(); - test_pack_ENHMETARECORD(); - test_pack_ENHMFENUMPROC(); - test_pack_ENUMLOGFONTA(); - test_pack_ENUMLOGFONTEXA(); - test_pack_ENUMLOGFONTEXW(); - test_pack_ENUMLOGFONTW(); - test_pack_EXTLOGFONTA(); - test_pack_EXTLOGFONTW(); - test_pack_EXTLOGPEN(); - test_pack_FIXED(); - test_pack_FONTENUMPROCA(); - test_pack_FONTENUMPROCW(); - test_pack_FONTSIGNATURE(); - test_pack_FXPT16DOT16(); - test_pack_FXPT2DOT30(); - test_pack_GCP_RESULTSA(); - test_pack_GCP_RESULTSW(); - test_pack_GLYPHMETRICS(); - test_pack_GLYPHMETRICSFLOAT(); - test_pack_GOBJENUMPROC(); - test_pack_GRADIENT_RECT(); - test_pack_GRADIENT_TRIANGLE(); - test_pack_HANDLETABLE(); - test_pack_ICMENUMPROCA(); - test_pack_ICMENUMPROCW(); - test_pack_KERNINGPAIR(); - test_pack_LAYERPLANEDESCRIPTOR(); - test_pack_LCSCSTYPE(); - test_pack_LCSGAMUTMATCH(); - test_pack_LINEDDAPROC(); - test_pack_LOCALESIGNATURE(); - test_pack_LOGBRUSH(); - test_pack_LOGCOLORSPACEA(); - test_pack_LOGCOLORSPACEW(); - test_pack_LOGFONTA(); - test_pack_LOGFONTW(); - test_pack_LOGPEN(); - test_pack_LPABC(); - test_pack_LPABCFLOAT(); - test_pack_LPBITMAP(); - test_pack_LPBITMAPCOREHEADER(); - test_pack_LPBITMAPCOREINFO(); - test_pack_LPBITMAPFILEHEADER(); - test_pack_LPBITMAPINFO(); - test_pack_LPBITMAPINFOHEADER(); - test_pack_LPBITMAPV5HEADER(); - test_pack_LPCHARSETINFO(); - test_pack_LPCIEXYZ(); - test_pack_LPCIEXYZTRIPLE(); - test_pack_LPCOLORADJUSTMENT(); - test_pack_LPDEVMODEA(); - test_pack_LPDEVMODEW(); - test_pack_LPDIBSECTION(); - test_pack_LPDISPLAY_DEVICEA(); - test_pack_LPDISPLAY_DEVICEW(); - test_pack_LPDOCINFOA(); - test_pack_LPDOCINFOW(); - test_pack_LPENHMETAHEADER(); - test_pack_LPENHMETARECORD(); - test_pack_LPENUMLOGFONTA(); - test_pack_LPENUMLOGFONTEXA(); - test_pack_LPENUMLOGFONTEXW(); - test_pack_LPENUMLOGFONTW(); - test_pack_LPEXTLOGFONTA(); - test_pack_LPEXTLOGFONTW(); - test_pack_LPEXTLOGPEN(); - test_pack_LPFONTSIGNATURE(); - test_pack_LPGCP_RESULTSA(); - test_pack_LPGCP_RESULTSW(); - test_pack_LPGLYPHMETRICS(); - test_pack_LPGLYPHMETRICSFLOAT(); - test_pack_LPGRADIENT_RECT(); - test_pack_LPGRADIENT_TRIANGLE(); - test_pack_LPHANDLETABLE(); - test_pack_LPKERNINGPAIR(); - test_pack_LPLAYERPLANEDESCRIPTOR(); - test_pack_LPLOCALESIGNATURE(); - test_pack_LPLOGBRUSH(); - test_pack_LPLOGCOLORSPACEA(); - test_pack_LPLOGCOLORSPACEW(); - test_pack_LPLOGFONTA(); - test_pack_LPLOGFONTW(); - test_pack_LPLOGPEN(); - test_pack_LPMAT2(); - test_pack_LPMETAFILEPICT(); - test_pack_LPMETAHEADER(); - test_pack_LPMETARECORD(); - test_pack_LPNEWTEXTMETRICA(); - test_pack_LPNEWTEXTMETRICW(); - test_pack_LPOUTLINETEXTMETRICA(); - test_pack_LPOUTLINETEXTMETRICW(); - test_pack_LPPANOSE(); - test_pack_LPPELARRAY(); - test_pack_LPPIXELFORMATDESCRIPTOR(); - test_pack_LPPOINTFX(); - test_pack_LPPOLYTEXTA(); - test_pack_LPPOLYTEXTW(); - test_pack_LPRASTERIZER_STATUS(); - test_pack_LPRGBQUAD(); - test_pack_LPRGNDATA(); - test_pack_LPTEXTMETRICA(); - test_pack_LPTEXTMETRICW(); - test_pack_LPTRIVERTEX(); - test_pack_LPTTPOLYCURVE(); - test_pack_LPTTPOLYGONHEADER(); - test_pack_LPXFORM(); - test_pack_MAT2(); - test_pack_METAFILEPICT(); - test_pack_METAHEADER(); - test_pack_METARECORD(); - test_pack_MFENUMPROC(); - test_pack_NEWTEXTMETRICA(); - test_pack_NEWTEXTMETRICEXA(); - test_pack_NEWTEXTMETRICEXW(); - test_pack_NEWTEXTMETRICW(); - test_pack_NPEXTLOGPEN(); - test_pack_OLDFONTENUMPROC(); - test_pack_OLDFONTENUMPROCA(); - test_pack_OLDFONTENUMPROCW(); - test_pack_OUTLINETEXTMETRICA(); - test_pack_OUTLINETEXTMETRICW(); - test_pack_PABC(); - test_pack_PABCFLOAT(); - test_pack_PANOSE(); - test_pack_PATTERN(); - test_pack_PBITMAP(); - test_pack_PBITMAPCOREHEADER(); - test_pack_PBITMAPCOREINFO(); - test_pack_PBITMAPFILEHEADER(); - test_pack_PBITMAPINFO(); - test_pack_PBITMAPINFOHEADER(); - test_pack_PBITMAPV4HEADER(); - test_pack_PBITMAPV5HEADER(); - test_pack_PBLENDFUNCTION(); - test_pack_PCHARSETINFO(); - test_pack_PCOLORADJUSTMENT(); - test_pack_PDEVMODEA(); - test_pack_PDEVMODEW(); - test_pack_PDIBSECTION(); - test_pack_PDISPLAY_DEVICEA(); - test_pack_PDISPLAY_DEVICEW(); - test_pack_PELARRAY(); - test_pack_PEMR(); - test_pack_PEMRABORTPATH(); - test_pack_PEMRANGLEARC(); - test_pack_PEMRARC(); - test_pack_PEMRARCTO(); - test_pack_PEMRBEGINPATH(); - test_pack_PEMRBITBLT(); - test_pack_PEMRCHORD(); - test_pack_PEMRCLOSEFIGURE(); - test_pack_PEMRCREATEBRUSHINDIRECT(); - test_pack_PEMRCREATECOLORSPACE(); - test_pack_PEMRCREATECOLORSPACEW(); - test_pack_PEMRCREATEDIBPATTERNBRUSHPT(); - test_pack_PEMRCREATEMONOBRUSH(); - test_pack_PEMRCREATEPALETTE(); - test_pack_PEMRCREATEPEN(); - test_pack_PEMRDELETECOLORSPACE(); - test_pack_PEMRDELETEOBJECT(); - test_pack_PEMRELLIPSE(); - test_pack_PEMRENDPATH(); - test_pack_PEMREOF(); - test_pack_PEMREXCLUDECLIPRECT(); - test_pack_PEMREXTCREATEFONTINDIRECTW(); - test_pack_PEMREXTCREATEPEN(); - test_pack_PEMREXTFLOODFILL(); - test_pack_PEMREXTSELECTCLIPRGN(); - test_pack_PEMREXTTEXTOUTA(); - test_pack_PEMREXTTEXTOUTW(); - test_pack_PEMRFILLPATH(); - test_pack_PEMRFILLRGN(); - test_pack_PEMRFLATTENPATH(); - test_pack_PEMRFORMAT(); - test_pack_PEMRFRAMERGN(); - test_pack_PEMRGDICOMMENT(); - test_pack_PEMRGLSBOUNDEDRECORD(); - test_pack_PEMRGLSRECORD(); - test_pack_PEMRINTERSECTCLIPRECT(); - test_pack_PEMRINVERTRGN(); - test_pack_PEMRLINETO(); - test_pack_PEMRMASKBLT(); - test_pack_PEMRMODIFYWORLDTRANSFORM(); - test_pack_PEMRMOVETOEX(); - test_pack_PEMROFFSETCLIPRGN(); - test_pack_PEMRPAINTRGN(); - test_pack_PEMRPIE(); - test_pack_PEMRPIXELFORMAT(); - test_pack_PEMRPLGBLT(); - test_pack_PEMRPOLYBEZIER(); - test_pack_PEMRPOLYBEZIER16(); - test_pack_PEMRPOLYBEZIERTO(); - test_pack_PEMRPOLYBEZIERTO16(); - test_pack_PEMRPOLYDRAW(); - test_pack_PEMRPOLYDRAW16(); - test_pack_PEMRPOLYGON(); - test_pack_PEMRPOLYGON16(); - test_pack_PEMRPOLYLINE(); - test_pack_PEMRPOLYLINE16(); - test_pack_PEMRPOLYLINETO(); - test_pack_PEMRPOLYLINETO16(); - test_pack_PEMRPOLYPOLYGON(); - test_pack_PEMRPOLYPOLYGON16(); - test_pack_PEMRPOLYPOLYLINE(); - test_pack_PEMRPOLYPOLYLINE16(); - test_pack_PEMRPOLYTEXTOUTA(); - test_pack_PEMRPOLYTEXTOUTW(); - test_pack_PEMRREALIZEPALETTE(); - test_pack_PEMRRECTANGLE(); - test_pack_PEMRRESIZEPALETTE(); - test_pack_PEMRRESTOREDC(); - test_pack_PEMRROUNDRECT(); - test_pack_PEMRSAVEDC(); - test_pack_PEMRSCALEVIEWPORTEXTEX(); - test_pack_PEMRSCALEWINDOWEXTEX(); - test_pack_PEMRSELECTCLIPPATH(); - test_pack_PEMRSELECTCOLORSPACE(); - test_pack_PEMRSELECTOBJECT(); - test_pack_PEMRSELECTPALETTE(); - test_pack_PEMRSETARCDIRECTION(); - test_pack_PEMRSETBKCOLOR(); - test_pack_PEMRSETBKMODE(); - test_pack_PEMRSETBRUSHORGEX(); - test_pack_PEMRSETCOLORADJUSTMENT(); - test_pack_PEMRSETCOLORSPACE(); - test_pack_PEMRSETDIBITSTODEVICE(); - test_pack_PEMRSETICMMODE(); - test_pack_PEMRSETLAYOUT(); - test_pack_PEMRSETMAPMODE(); - test_pack_PEMRSETMAPPERFLAGS(); - test_pack_PEMRSETMETARGN(); - test_pack_PEMRSETMITERLIMIT(); - test_pack_PEMRSETPALETTEENTRIES(); - test_pack_PEMRSETPIXELV(); - test_pack_PEMRSETPOLYFILLMODE(); - test_pack_PEMRSETROP2(); - test_pack_PEMRSETSTRETCHBLTMODE(); - test_pack_PEMRSETTEXTALIGN(); - test_pack_PEMRSETTEXTCOLOR(); - test_pack_PEMRSETVIEWPORTEXTEX(); - test_pack_PEMRSETVIEWPORTORGEX(); - test_pack_PEMRSETWINDOWEXTEX(); - test_pack_PEMRSETWINDOWORGEX(); - test_pack_PEMRSETWORLDTRANSFORM(); - test_pack_PEMRSTRETCHBLT(); - test_pack_PEMRSTRETCHDIBITS(); - test_pack_PEMRSTROKEANDFILLPATH(); - test_pack_PEMRSTROKEPATH(); - test_pack_PEMRTEXT(); - test_pack_PEMRWIDENPATH(); - test_pack_PENHMETAHEADER(); - test_pack_PEXTLOGFONTA(); - test_pack_PEXTLOGFONTW(); - test_pack_PEXTLOGPEN(); - test_pack_PFONTSIGNATURE(); - test_pack_PGLYPHMETRICSFLOAT(); - test_pack_PGRADIENT_RECT(); - test_pack_PGRADIENT_TRIANGLE(); - test_pack_PHANDLETABLE(); - test_pack_PIXELFORMATDESCRIPTOR(); - test_pack_PLAYERPLANEDESCRIPTOR(); - test_pack_PLOCALESIGNATURE(); - test_pack_PLOGBRUSH(); - test_pack_PLOGFONTA(); - test_pack_PLOGFONTW(); - test_pack_PMETAHEADER(); - test_pack_PMETARECORD(); - test_pack_PNEWTEXTMETRICA(); - test_pack_PNEWTEXTMETRICW(); - test_pack_POINTFLOAT(); - test_pack_POINTFX(); - test_pack_POLYTEXTA(); - test_pack_POLYTEXTW(); - test_pack_POUTLINETEXTMETRICA(); - test_pack_POUTLINETEXTMETRICW(); - test_pack_PPELARRAY(); - test_pack_PPIXELFORMATDESCRIPTOR(); - test_pack_PPOINTFLOAT(); - test_pack_PPOLYTEXTA(); - test_pack_PPOLYTEXTW(); - test_pack_PRGNDATA(); - test_pack_PRGNDATAHEADER(); - test_pack_PTEXTMETRICA(); - test_pack_PTEXTMETRICW(); - test_pack_PTRIVERTEX(); - test_pack_PXFORM(); - test_pack_RASTERIZER_STATUS(); - test_pack_RGBQUAD(); - test_pack_RGBTRIPLE(); - test_pack_RGNDATA(); - test_pack_RGNDATAHEADER(); - test_pack_TEXTMETRICA(); - test_pack_TEXTMETRICW(); - test_pack_TRIVERTEX(); - test_pack_TTPOLYCURVE(); - test_pack_TTPOLYGONHEADER(); - test_pack_XFORM(); -} - -START_TEST(generated) -{ - test_pack(); -} diff --git a/rostests/winetests/gdi32/icm.c b/rostests/winetests/gdi32/icm.c deleted file mode 100644 index 9d89828ffc7..00000000000 --- a/rostests/winetests/gdi32/icm.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Tests for ICM functions - * - * Copyright (C) 2005, 2008 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 - */ - -#include - -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "wingdi.h" - -#include "wine/test.h" - -static const WCHAR displayW[] = {'D','I','S','P','L','A','Y',0}; - -static void test_GetICMProfileA( HDC dc ) -{ - BOOL ret; - DWORD size, error; - char filename[MAX_PATH]; - - SetLastError( 0xdeadbeef ); - ret = GetICMProfileA( NULL, NULL, NULL ); - if ( !ret && ( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) ) - { - skip( "GetICMProfileA is not implemented\n" ); - return; - } - ok( !ret, "GetICMProfileA succeeded\n" ); - - ret = GetICMProfileA( dc, NULL, NULL ); - ok( !ret, "GetICMProfileA succeeded\n" ); - - size = MAX_PATH; - ret = GetICMProfileA( dc, &size, NULL ); - ok( !ret, "GetICMProfileA succeeded\n" ); - - ret = GetICMProfileA( dc, NULL, filename ); - ok( !ret, "GetICMProfileA succeeded\n" ); - - size = MAX_PATH; - ret = GetICMProfileA( NULL, &size, filename ); - ok( !ret, "GetICMProfileA succeeded\n" ); - - size = 0; - SetLastError(0xdeadbeef); - ret = GetICMProfileA( dc, &size, filename ); - error = GetLastError(); - ok( !ret, "GetICMProfileA succeeded\n" ); - ok( size, "expected size > 0\n" ); - ok( error == ERROR_INSUFFICIENT_BUFFER, "got %d, expected ERROR_INSUFFICIENT_BUFFER\n", error ); - - size = MAX_PATH; - ret = GetICMProfileA( dc, &size, filename ); - ok( ret, "GetICMProfileA failed %d\n", GetLastError() ); - - trace( "%s\n", filename ); -} - -static void test_GetICMProfileW( HDC dc ) -{ - BOOL ret; - DWORD size, error; - WCHAR filename[MAX_PATH]; - - SetLastError( 0xdeadbeef ); - ret = GetICMProfileW( NULL, NULL, NULL ); - if ( !ret && ( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) ) - { - skip( "GetICMProfileW is not implemented\n" ); - return; - } - ok( !ret, "GetICMProfileW succeeded\n" ); - - ret = GetICMProfileW( dc, NULL, NULL ); - ok( !ret, "GetICMProfileW succeeded\n" ); - - if (0) - { - /* Vista crashes */ - size = MAX_PATH; - ret = GetICMProfileW( dc, &size, NULL ); - ok( ret, "GetICMProfileW failed %d\n", GetLastError() ); - } - - ret = GetICMProfileW( dc, NULL, filename ); - ok( !ret, "GetICMProfileW succeeded\n" ); - - size = MAX_PATH; - ret = GetICMProfileW( NULL, &size, filename ); - ok( !ret, "GetICMProfileW succeeded\n" ); - - size = 0; - SetLastError(0xdeadbeef); - ret = GetICMProfileW( dc, &size, filename ); - error = GetLastError(); - ok( !ret, "GetICMProfileW succeeded\n" ); - ok( size, "expected size > 0\n" ); - ok( error == ERROR_INSUFFICIENT_BUFFER, "got %d, expected ERROR_INSUFFICIENT_BUFFER\n", error ); - - size = MAX_PATH; - ret = GetICMProfileW( dc, &size, filename ); - ok( ret, "GetICMProfileW failed %d\n", GetLastError() ); -} - -static void test_SetICMMode( HDC dc ) -{ - INT ret, knob, save; - - SetLastError( 0xdeadbeef ); - ret = SetICMMode( NULL, 0 ); - ok( !ret, "SetICMMode succeeded (%d)\n", GetLastError() ); - - ret = SetICMMode( dc, -1 ); - ok( !ret, "SetICMMode succeeded (%d)\n", GetLastError() ); - - save = SetICMMode( dc, ICM_QUERY ); - ok( save == ICM_ON || save == ICM_OFF, "SetICMMode failed (%d)\n", GetLastError() ); - - if (save == ICM_ON) knob = ICM_OFF; else knob = ICM_ON; - - ret = SetICMMode( dc, knob ); - todo_wine ok( ret, "SetICMMode failed (%d)\n", GetLastError() ); - - ret = SetICMMode( dc, ICM_QUERY ); - todo_wine ok( ret == knob, "SetICMMode failed (%d)\n", GetLastError() ); - - ret = SetICMMode( dc, save ); - ok( ret, "SetICMMode failed (%d)\n", GetLastError() ); - - SetLastError( 0xdeadbeef ); - dc = CreateDCW( displayW, NULL, NULL, NULL ); - if ( !dc && ( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) ) - { - skip( "CreateDCW is not implemented\n" ); - return; - } - ok( dc != NULL, "CreateDCW failed (%d)\n", GetLastError() ); - - ret = SetICMMode( dc, ICM_QUERY ); - ok( ret == ICM_OFF, "SetICMMode failed (%d)\n", GetLastError() ); - - DeleteDC( dc ); -} - -START_TEST(icm) -{ - HDC dc = GetDC( NULL ); - - test_GetICMProfileA( dc ); - test_GetICMProfileW( dc ); - test_SetICMMode( dc ); - - ReleaseDC( NULL, dc ); -} diff --git a/rostests/winetests/gdi32/mapping.c b/rostests/winetests/gdi32/mapping.c deleted file mode 100644 index 91e487a6468..00000000000 --- a/rostests/winetests/gdi32/mapping.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Unit tests for mapping functions - * - * Copyright (c) 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 - */ - -#include -#include -#include - -#include "wine/test.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" - - -static void test_modify_world_transform(void) -{ - HDC hdc = GetDC(0); - int ret; - - ret = SetGraphicsMode(hdc, GM_ADVANCED); - if(!ret) /* running in win9x so quit */ - { - ReleaseDC(0, hdc); - return; - } - - ret = ModifyWorldTransform(hdc, NULL, MWT_IDENTITY); - ok(ret, "ret = %d\n", ret); - - ret = ModifyWorldTransform(hdc, NULL, MWT_LEFTMULTIPLY); - ok(!ret, "ret = %d\n", ret); - - ret = ModifyWorldTransform(hdc, NULL, MWT_RIGHTMULTIPLY); - ok(!ret, "ret = %d\n", ret); - - ReleaseDC(0, hdc); -} - -#define rough_match(got, expected) ((got >= expected - 2) && (got <= expected + 2)) - -static void test_SetWindowExt(HDC hdc, LONG cx, LONG cy, LONG expected_vp_cx, LONG expected_vp_cy) -{ - SIZE windowExt, viewportExt; - POINT windowOrg, windowOrgAfter, viewportOrg, viewportOrgAfter; - - GetWindowOrgEx(hdc, &windowOrg); - GetViewportOrgEx(hdc, &viewportOrg); - - SetWindowExtEx(hdc, cx, cy, NULL); - GetWindowExtEx(hdc, &windowExt); - ok(windowExt.cx == cx && windowExt.cy == cy, - "Window extension: Expected %dx%d, got %dx%d\n", - cx, cy, windowExt.cx, windowExt.cy); - - GetViewportExtEx(hdc, &viewportExt); - ok(rough_match(viewportExt.cx, expected_vp_cx) && rough_match(viewportExt.cy, expected_vp_cy), - "Viewport extents have not been properly adjusted: Expected %dx%d, got %dx%d\n", - expected_vp_cx, expected_vp_cy, viewportExt.cx, viewportExt.cy); - - GetWindowOrgEx(hdc, &windowOrgAfter); - ok(windowOrg.x == windowOrgAfter.x && windowOrg.y == windowOrgAfter.y, - "Window origin changed from (%d,%d) to (%d,%d)\n", - windowOrg.x, windowOrg.y, windowOrgAfter.x, windowOrgAfter.y); - - GetViewportOrgEx(hdc, &viewportOrgAfter); - ok(viewportOrg.x == viewportOrgAfter.x && viewportOrg.y == viewportOrgAfter.y, - "Viewport origin changed from (%d,%d) to (%d,%d)\n", - viewportOrg.x, viewportOrg.y, viewportOrgAfter.x, viewportOrgAfter.y); -} - -static void test_SetViewportExt(HDC hdc, LONG cx, LONG cy, LONG expected_vp_cx, LONG expected_vp_cy) -{ - SIZE windowExt, windowExtAfter, viewportExt; - POINT windowOrg, windowOrgAfter, viewportOrg, viewportOrgAfter; - - GetWindowOrgEx(hdc, &windowOrg); - GetViewportOrgEx(hdc, &viewportOrg); - GetWindowExtEx(hdc, &windowExt); - - SetViewportExtEx(hdc, cx, cy, NULL); - GetViewportExtEx(hdc, &viewportExt); - ok(rough_match(viewportExt.cx, expected_vp_cx) && rough_match(viewportExt.cy, expected_vp_cy), - "Viewport extents have not been properly adjusted: Expected %dx%d, got %dx%d\n", - expected_vp_cx, expected_vp_cy, viewportExt.cx, viewportExt.cy); - - GetWindowExtEx(hdc, &windowExtAfter); - ok(windowExt.cx == windowExtAfter.cx && windowExt.cy == windowExtAfter.cy, - "Window extension changed from %dx%d to %dx%d\n", - windowExt.cx, windowExt.cy, windowExtAfter.cx, windowExtAfter.cy); - - GetWindowOrgEx(hdc, &windowOrgAfter); - ok(windowOrg.x == windowOrgAfter.x && windowOrg.y == windowOrgAfter.y, - "Window origin changed from (%d,%d) to (%d,%d)\n", - windowOrg.x, windowOrg.y, windowOrgAfter.x, windowOrgAfter.y); - - GetViewportOrgEx(hdc, &viewportOrgAfter); - ok(viewportOrg.x == viewportOrgAfter.x && viewportOrg.y == viewportOrgAfter.y, - "Viewport origin changed from (%d,%d) to (%d,%d)\n", - viewportOrg.x, viewportOrg.y, viewportOrgAfter.x, viewportOrgAfter.y); -} - -static void test_isotropic_mapping(void) -{ - SIZE win, vp; - HDC hdc = GetDC(0); - - SetMapMode(hdc, MM_ISOTROPIC); - - /* MM_ISOTROPIC is set up like MM_LOMETRIC. - Initial values after SetMapMode(): - (1 inch = 25.4 mm) - - Windows 9x: Windows NT: - Window Ext: 254 x -254 HORZSIZE*10 x VERTSIZE*10 - Viewport Ext: LOGPIXELSX x LOGPIXELSY HORZRES x -VERTRES - - To test without rounding errors, we have to use multiples of - these values! - */ - - GetWindowExtEx(hdc, &win); - GetViewportExtEx(hdc, &vp); - - test_SetViewportExt(hdc, 10 * vp.cx, 10 * vp.cy, 10 * vp.cx, 10 * vp.cy); - test_SetWindowExt(hdc, win.cx, win.cy, 10 * vp.cx, 10 * vp.cy); - test_SetWindowExt(hdc, 2 * win.cx, win.cy, 10 * vp.cx, 5 * vp.cy); - test_SetWindowExt(hdc, win.cx, win.cy, 5 * vp.cx, 5 * vp.cy); - test_SetViewportExt(hdc, 4 * vp.cx, 2 * vp.cy, 2 * vp.cx, 2 * vp.cy); - test_SetViewportExt(hdc, vp.cx, 2 * vp.cy, vp.cx, vp.cy); - test_SetViewportExt(hdc, 2 * vp.cx, 2 * vp.cy, 2 * vp.cx, 2 * vp.cy); - test_SetViewportExt(hdc, 4 * vp.cx, 2 * vp.cy, 2 * vp.cx, 2 * vp.cy); - test_SetWindowExt(hdc, 4 * win.cx, 2 * win.cy, 2 * vp.cx, vp.cy); - test_SetViewportExt(hdc, -2 * vp.cx, -4 * vp.cy, -2 * vp.cx, -vp.cy); - test_SetViewportExt(hdc, -2 * vp.cx, -1 * vp.cy, -2 * vp.cx, -vp.cy); - test_SetWindowExt(hdc, -4 * win.cx, -2 * win.cy, -2 * vp.cx, -vp.cy); - test_SetWindowExt(hdc, 4 * win.cx, -4 * win.cy, -vp.cx, -vp.cy); - - ReleaseDC(0, hdc); -} - -START_TEST(mapping) -{ - test_modify_world_transform(); - test_isotropic_mapping(); -} diff --git a/rostests/winetests/gdi32/metafile.c b/rostests/winetests/gdi32/metafile.c deleted file mode 100755 index 78bbd8b1a25..00000000000 --- a/rostests/winetests/gdi32/metafile.c +++ /dev/null @@ -1,2113 +0,0 @@ -/* - * Unit tests for metafile functions - * - * Copyright (c) 2002 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 -#include -#include - -#include "wine/test.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" - -static LOGFONTA orig_lf; -static BOOL emr_processed = FALSE; - -/* Arbitrarily chosen values for the second co-ordinate of a metafile line */ -#define LINE_X 55.0f -#define LINE_Y 15.0f - -static INT (WINAPI * pGetRelAbs)(HDC, DWORD); -static INT (WINAPI * pSetRelAbs)(HDC, INT); - -#define GDI_GET_PROC(func) \ - p ## func = (void *)GetProcAddress(hGDI, #func); \ - if(!p ## func) \ - trace("GetProcAddress(hGDI, \"%s\") failed\n", #func); \ - -static void init_function_pointers(void) -{ - HMODULE hGDI; - - pGetRelAbs = NULL; - pSetRelAbs = NULL; - - hGDI = GetModuleHandleA("gdi32.dll"); - assert(hGDI); - GDI_GET_PROC(GetRelAbs); - GDI_GET_PROC(SetRelAbs); -} - -static int CALLBACK eto_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table, - const ENHMETARECORD *emr, int n_objs, LPARAM param) -{ - static int n_record; - DWORD i; - const INT *dx; - INT *orig_dx = (INT *)param; - LOGFONTA device_lf; - INT ret; - - trace("hdc %p, emr->iType %d, emr->nSize %d, param %p\n", - hdc, emr->iType, emr->nSize, (void *)param); - - if(!hdc) return 1; - - PlayEnhMetaFileRecord(hdc, handle_table, emr, n_objs); - - switch (emr->iType) - { - case EMR_HEADER: - ok(GetTextAlign(hdc) == 0, "text align %08x\n", GetTextAlign(hdc)); - ok(GetBkColor(hdc) == RGB(0xff, 0xff, 0xff), "bk color %08x\n", GetBkColor(hdc)); - ok(GetTextColor(hdc) == RGB(0x0, 0x0, 0x0), "text color %08x\n", GetTextColor(hdc)); - ok(GetROP2(hdc) == R2_COPYPEN, "rop %d\n", GetROP2(hdc)); - ok(GetArcDirection(hdc) == AD_COUNTERCLOCKWISE, "arc dir %d\n", GetArcDirection(hdc)); - ok(GetPolyFillMode(hdc) == ALTERNATE, "poly fill %d\n", GetPolyFillMode(hdc)); - ok(GetStretchBltMode(hdc) == BLACKONWHITE, "stretchblt mode %d\n", GetStretchBltMode(hdc)); - - /* GetBkMode, GetRelAbs do not get reset to the default value */ - ok(GetBkMode(hdc) == OPAQUE, "bk mode %d\n", GetBkMode(hdc)); - if(pSetRelAbs && pGetRelAbs) - ok(pGetRelAbs(hdc, 0) == RELATIVE, "relabs %d\n", pGetRelAbs(hdc, 0)); - - n_record = 0; - break; - - case EMR_EXTTEXTOUTA: - { - const EMREXTTEXTOUTA *emr_ExtTextOutA = (const EMREXTTEXTOUTA *)emr; - dx = (const INT *)((const char *)emr + emr_ExtTextOutA->emrtext.offDx); - - ret = GetObjectA(GetCurrentObject(hdc, OBJ_FONT), sizeof(device_lf), &device_lf); - ok( ret == sizeof(device_lf), "GetObjectA error %d\n", GetLastError()); - - /* compare up to lfOutPrecision, other values are not interesting, - * and in fact sometimes arbitrary adapted by Win9x. - */ - ok(!memcmp(&orig_lf, &device_lf, FIELD_OFFSET(LOGFONTA, lfOutPrecision)), "fonts don't match\n"); - ok(!lstrcmpA(orig_lf.lfFaceName, device_lf.lfFaceName), "font names don't match\n"); - - for(i = 0; i < emr_ExtTextOutA->emrtext.nChars; i++) - { - ok(orig_dx[i] == dx[i], "pass %d: dx[%d] (%d) didn't match %d\n", - n_record, i, dx[i], orig_dx[i]); - } - n_record++; - emr_processed = TRUE; - break; - } - - case EMR_EXTTEXTOUTW: - { - const EMREXTTEXTOUTW *emr_ExtTextOutW = (const EMREXTTEXTOUTW *)emr; - dx = (const INT *)((const char *)emr + emr_ExtTextOutW->emrtext.offDx); - - ret = GetObjectA(GetCurrentObject(hdc, OBJ_FONT), sizeof(device_lf), &device_lf); - ok( ret == sizeof(device_lf), "GetObjectA error %d\n", GetLastError()); - - /* compare up to lfOutPrecision, other values are not interesting, - * and in fact sometimes arbitrary adapted by Win9x. - */ - ok(!memcmp(&orig_lf, &device_lf, FIELD_OFFSET(LOGFONTA, lfOutPrecision)), "fonts don't match\n"); - ok(!lstrcmpA(orig_lf.lfFaceName, device_lf.lfFaceName), "font names don't match\n"); - - for(i = 0; i < emr_ExtTextOutW->emrtext.nChars; i++) - { - ok(orig_dx[i] == dx[i], "pass %d: dx[%d] (%d) didn't match %d\n", - n_record, i, dx[i], orig_dx[i]); - } - n_record++; - emr_processed = TRUE; - break; - } - - default: - break; - } - - return 1; -} - -static void test_ExtTextOut(void) -{ - HWND hwnd; - HDC hdcDisplay, hdcMetafile; - HENHMETAFILE hMetafile; - HFONT hFont; - static const char text[] = "Simple text to test ExtTextOut on metafiles"; - INT i, len, dx[256]; - static const RECT rc = { 0, 0, 100, 100 }; - BOOL ret; - - assert(sizeof(dx)/sizeof(dx[0]) >= lstrlenA(text)); - - /* Win9x doesn't play EMFs on invisible windows */ - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP | WS_VISIBLE, - 0, 0, 200, 200, 0, 0, 0, NULL); - ok(hwnd != 0, "CreateWindowExA error %d\n", GetLastError()); - - hdcDisplay = GetDC(hwnd); - ok(hdcDisplay != 0, "GetDC error %d\n", GetLastError()); - - trace("hdcDisplay %p\n", hdcDisplay); - - SetMapMode(hdcDisplay, MM_TEXT); - - memset(&orig_lf, 0, sizeof(orig_lf)); - - orig_lf.lfCharSet = ANSI_CHARSET; - orig_lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; - orig_lf.lfWeight = FW_DONTCARE; - orig_lf.lfHeight = 7; - orig_lf.lfQuality = DEFAULT_QUALITY; - lstrcpyA(orig_lf.lfFaceName, "Arial"); - hFont = CreateFontIndirectA(&orig_lf); - ok(hFont != 0, "CreateFontIndirectA error %d\n", GetLastError()); - - hFont = SelectObject(hdcDisplay, hFont); - - len = lstrlenA(text); - for (i = 0; i < len; i++) - { - ret = GetCharWidthA(hdcDisplay, text[i], text[i], &dx[i]); - ok( ret, "GetCharWidthA error %d\n", GetLastError()); - } - hFont = SelectObject(hdcDisplay, hFont); - - hdcMetafile = CreateEnhMetaFileA(hdcDisplay, NULL, NULL, NULL); - ok(hdcMetafile != 0, "CreateEnhMetaFileA error %d\n", GetLastError()); - - trace("hdcMetafile %p\n", hdcMetafile); - - ok(GetDeviceCaps(hdcMetafile, TECHNOLOGY) == DT_RASDISPLAY, - "GetDeviceCaps(TECHNOLOGY) has to return DT_RASDISPLAY for a display based EMF\n"); - - hFont = SelectObject(hdcMetafile, hFont); - - /* 1. pass NULL lpDx */ - ret = ExtTextOutA(hdcMetafile, 0, 0, 0, &rc, text, lstrlenA(text), NULL); - ok( ret, "ExtTextOutA error %d\n", GetLastError()); - - /* 2. pass custom lpDx */ - ret = ExtTextOutA(hdcMetafile, 0, 20, 0, &rc, text, lstrlenA(text), dx); - ok( ret, "ExtTextOutA error %d\n", GetLastError()); - - hFont = SelectObject(hdcMetafile, hFont); - ret = DeleteObject(hFont); - ok( ret, "DeleteObject error %d\n", GetLastError()); - - hMetafile = CloseEnhMetaFile(hdcMetafile); - ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError()); - - ok(!GetObjectType(hdcMetafile), "CloseEnhMetaFile has to destroy metafile hdc\n"); - - ret = PlayEnhMetaFile(hdcDisplay, hMetafile, &rc); - ok( ret, "PlayEnhMetaFile error %d\n", GetLastError()); - - SetTextAlign(hdcDisplay, TA_UPDATECP | TA_CENTER | TA_BASELINE | TA_RTLREADING ); - SetBkColor(hdcDisplay, RGB(0xff, 0, 0)); - SetTextColor(hdcDisplay, RGB(0, 0xff, 0)); - SetROP2(hdcDisplay, R2_NOT); - SetArcDirection(hdcDisplay, AD_CLOCKWISE); - SetPolyFillMode(hdcDisplay, WINDING); - SetStretchBltMode(hdcDisplay, HALFTONE); - - if(pSetRelAbs) pSetRelAbs(hdcDisplay, RELATIVE); - SetBkMode(hdcDisplay, OPAQUE); - - ret = EnumEnhMetaFile(hdcDisplay, hMetafile, eto_emf_enum_proc, dx, &rc); - ok( ret, "EnumEnhMetaFile error %d\n", GetLastError()); - - ok( GetTextAlign(hdcDisplay) == (TA_UPDATECP | TA_CENTER | TA_BASELINE | TA_RTLREADING), - "text align %08x\n", GetTextAlign(hdcDisplay)); - ok( GetBkColor(hdcDisplay) == RGB(0xff, 0, 0), "bk color %08x\n", GetBkColor(hdcDisplay)); - ok( GetTextColor(hdcDisplay) == RGB(0, 0xff, 0), "text color %08x\n", GetTextColor(hdcDisplay)); - ok( GetROP2(hdcDisplay) == R2_NOT, "rop2 %d\n", GetROP2(hdcDisplay)); - ok( GetArcDirection(hdcDisplay) == AD_CLOCKWISE, "arc dir %d\n", GetArcDirection(hdcDisplay)); - ok( GetPolyFillMode(hdcDisplay) == WINDING, "poly fill %d\n", GetPolyFillMode(hdcDisplay)); - ok( GetStretchBltMode(hdcDisplay) == HALFTONE, "stretchblt mode %d\n", GetStretchBltMode(hdcDisplay)); - - ok(emr_processed, "EnumEnhMetaFile couldn't find EMR_EXTTEXTOUTA or EMR_EXTTEXTOUTW record\n"); - - ok(!EnumEnhMetaFile(hdcDisplay, hMetafile, eto_emf_enum_proc, dx, NULL), - "A valid hdc has to require a valid rc\n"); - - ok(EnumEnhMetaFile(NULL, hMetafile, eto_emf_enum_proc, dx, NULL), - "A null hdc does not require a valid rc\n"); - - ret = DeleteEnhMetaFile(hMetafile); - ok( ret, "DeleteEnhMetaFile error %d\n", GetLastError()); - ret = ReleaseDC(hwnd, hdcDisplay); - ok( ret, "ReleaseDC error %d\n", GetLastError()); - DestroyWindow(hwnd); -} - -static void check_dc_state(HDC hdc, int restore_no, - int wnd_org_x, int wnd_org_y, int wnd_ext_x, int wnd_ext_y, - int vp_org_x, int vp_org_y, int vp_ext_x, int vp_ext_y) -{ - BOOL ret; - XFORM xform; - POINT vp_org, win_org; - SIZE vp_size, win_size; - FLOAT xscale, yscale, edx, edy; - - SetLastError(0xdeadbeef); - ret = GetWorldTransform(hdc, &xform); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) goto win9x_here; - ok(ret, "GetWorldTransform error %u\n", GetLastError()); - - trace("%d: eM11 %f, eM22 %f, eDx %f, eDy %f\n", restore_no, xform.eM11, xform.eM22, xform.eDx, xform.eDy); - - ok(xform.eM12 == 0.0, "%d: expected eM12 0.0, got %f\n", restore_no, xform.eM12); - ok(xform.eM21 == 0.0, "%d: expected eM21 0.0, got %f\n", restore_no, xform.eM21); - - xscale = (FLOAT)vp_ext_x / (FLOAT)wnd_ext_x; - trace("x scale %f\n", xscale); - ok(fabs(xscale - xform.eM11) < 0.01, "%d: vp_ext_x %d, wnd_ext_cx %d, eM11 %f\n", - restore_no, vp_ext_x, wnd_ext_x, xform.eM11); - - yscale = (FLOAT)vp_ext_y / (FLOAT)wnd_ext_y; - trace("y scale %f\n", yscale); - ok(fabs(yscale - xform.eM22) < 0.01, "%d: vp_ext_y %d, wnd_ext_y %d, eM22 %f\n", - restore_no, vp_ext_y, wnd_ext_y, xform.eM22); - - edx = (FLOAT)vp_org_x - xform.eM11 * (FLOAT)wnd_org_x; - ok(fabs(edx - xform.eDx) < 0.01, "%d: edx %f != eDx %f\n", restore_no, edx, xform.eDx); - edy = (FLOAT)vp_org_y - xform.eM22 * (FLOAT)wnd_org_y; - ok(fabs(edy - xform.eDy) < 0.01, "%d: edy %f != eDy %f\n", restore_no, edy, xform.eDy); - - return; - -win9x_here: - - GetWindowOrgEx(hdc, &win_org); - GetViewportOrgEx(hdc, &vp_org); - GetWindowExtEx(hdc, &win_size); - GetViewportExtEx(hdc, &vp_size); - - ok(wnd_org_x == win_org.x, "%d: wnd_org_x: %d != %d\n", restore_no, wnd_org_x, win_org.x); - ok(wnd_org_y == win_org.y, "%d: wnd_org_y: %d != %d\n", restore_no, wnd_org_y, win_org.y); - - ok(vp_org_x == vp_org.x, "%d: vport_org_x: %d != %d\n", restore_no, vp_org_x, vp_org.x); - ok(vp_org_y == vp_org.y, "%d: vport_org_y: %d != %d\n", restore_no, vp_org_y, vp_org.y); - - ok(wnd_ext_x == win_size.cx, "%d: wnd_ext_x: %d != %d\n", restore_no, wnd_ext_x, win_size.cx); - ok(wnd_ext_y == win_size.cy, "%d: wnd_ext_y: %d != %d\n", restore_no, wnd_ext_y, win_size.cy); - - ok(vp_ext_x == vp_size.cx, "%d: vport_ext_x: %d != %d\n", restore_no, vp_ext_x, vp_size.cx); - ok(vp_ext_y == vp_size.cy, "%d: vport_ext_y: %d != %d\n", restore_no, vp_ext_y, vp_size.cy); -} - -static int CALLBACK savedc_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table, - const ENHMETARECORD *emr, int n_objs, LPARAM param) -{ - BOOL ret; - XFORM xform; - POINT pt; - SIZE size; - static int save_state; - static int restore_no; - - trace("hdc %p, emr->iType %d, emr->nSize %d, param %p\n", - hdc, emr->iType, emr->nSize, (void *)param); - - trace("BEFORE:\n"); - SetLastError(0xdeadbeef); - ret = GetWorldTransform(hdc, &xform); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - ok(GetWindowOrgEx(hdc, &pt), "GetWindowOrgEx error %u\n", GetLastError()); - trace("window org (%d,%d)\n", pt.x, pt.y); - ok(GetViewportOrgEx(hdc, &pt), "GetViewportOrgEx error %u\n", GetLastError()); - trace("vport org (%d,%d)\n", pt.x, pt.y); - ok(GetWindowExtEx(hdc, &size), "GetWindowExtEx error %u\n", GetLastError()); - trace("window ext (%d,%d)\n", size.cx, size.cy); - ok(GetViewportExtEx(hdc, &size), "GetViewportExtEx error %u\n", GetLastError()); - trace("vport ext (%d,%d)\n", size.cx, size.cy); - } - else - { - ok(ret, "GetWorldTransform error %u\n", GetLastError()); - trace("eM11 %f, eM22 %f, eDx %f, eDy %f\n", xform.eM11, xform.eM22, xform.eDx, xform.eDy); - } - - PlayEnhMetaFileRecord(hdc, handle_table, emr, n_objs); - - switch (emr->iType) - { - case EMR_HEADER: - { - static RECT exp_bounds = { 0, 0, 150, 150 }; - RECT bounds; - const ENHMETAHEADER *emf = (const ENHMETAHEADER *)emr; - - trace("bounds %d,%d-%d,%d, frame %d,%d-%d,%d\n", - emf->rclBounds.left, emf->rclBounds.top, emf->rclBounds.right, emf->rclBounds.bottom, - emf->rclFrame.left, emf->rclFrame.top, emf->rclFrame.right, emf->rclFrame.bottom); - trace("mm %d x %d, device %d x %d\n", emf->szlMillimeters.cx, emf->szlMillimeters.cy, - emf->szlDevice.cx, emf->szlDevice.cy); - - SetRect(&bounds, emf->rclBounds.left, emf->rclBounds.top, emf->rclBounds.right, emf->rclBounds.bottom); - ok(EqualRect(&bounds, &exp_bounds), "wrong bounds\n"); - - save_state = 0; - restore_no = 0; - check_dc_state(hdc, restore_no, 0, 0, 1, 1, 0, 0, 1, 1); - break; - } - - case EMR_LINETO: - { - const EMRLINETO *line = (const EMRLINETO *)emr; - trace("EMR_LINETO %d,%d\n", line->ptl.x, line->ptl.x); - break; - } - case EMR_SETWINDOWORGEX: - { - const EMRSETWINDOWORGEX *org = (const EMRSETWINDOWORGEX *)emr; - trace("EMR_SETWINDOWORGEX: %d,%d\n", org->ptlOrigin.x, org->ptlOrigin.y); - break; - } - case EMR_SETWINDOWEXTEX: - { - const EMRSETWINDOWEXTEX *ext = (const EMRSETWINDOWEXTEX *)emr; - trace("EMR_SETWINDOWEXTEX: %d,%d\n", ext->szlExtent.cx, ext->szlExtent.cy); - break; - } - case EMR_SETVIEWPORTORGEX: - { - const EMRSETVIEWPORTORGEX *org = (const EMRSETVIEWPORTORGEX *)emr; - trace("EMR_SETVIEWPORTORGEX: %d,%d\n", org->ptlOrigin.x, org->ptlOrigin.y); - break; - } - case EMR_SETVIEWPORTEXTEX: - { - const EMRSETVIEWPORTEXTEX *ext = (const EMRSETVIEWPORTEXTEX *)emr; - trace("EMR_SETVIEWPORTEXTEX: %d,%d\n", ext->szlExtent.cx, ext->szlExtent.cy); - break; - } - case EMR_SAVEDC: - save_state++; - trace("EMR_SAVEDC\n"); - break; - - case EMR_RESTOREDC: - { - const EMRRESTOREDC *restoredc = (const EMRRESTOREDC *)emr; - trace("EMR_RESTOREDC: %d\n", restoredc->iRelative); - - switch(++restore_no) - { - case 1: - ok(restoredc->iRelative == -1, "first restore %d\n", restoredc->iRelative); - check_dc_state(hdc, restore_no, -2, -2, 8192, 8192, 20, 20, 20479, 20478); - break; - case 2: - ok(restoredc->iRelative == -3, "second restore %d\n", restoredc->iRelative); - check_dc_state(hdc, restore_no, 0, 0, 16384, 16384, 0, 0, 17873, 17872); - break; - case 3: - ok(restoredc->iRelative == -2, "third restore %d\n", restoredc->iRelative); - check_dc_state(hdc, restore_no, -4, -4, 32767, 32767, 40, 40, 3276, 3276); - break; - } - ok(restore_no <= 3, "restore_no %d\n", restore_no); - save_state += restoredc->iRelative; - break; - } - case EMR_EOF: - ok(save_state == 0, "EOF save_state %d\n", save_state); - break; - } - - trace("AFTER:\n"); - SetLastError(0xdeadbeef); - ret = GetWorldTransform(hdc, &xform); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - ok(GetWindowOrgEx(hdc, &pt), "GetWindowOrgEx error %u\n", GetLastError()); - trace("window org (%d,%d)\n", pt.x, pt.y); - ok(GetViewportOrgEx(hdc, &pt), "GetViewportOrgEx error %u\n", GetLastError()); - trace("vport org (%d,%d)\n", pt.x, pt.y); - ok(GetWindowExtEx(hdc, &size), "GetWindowExtEx error %u\n", GetLastError()); - trace("window ext (%d,%d)\n", size.cx, size.cy); - ok(GetViewportExtEx(hdc, &size), "GetViewportExtEx error %u\n", GetLastError()); - trace("vport ext (%d,%d)\n", size.cx, size.cy); - } - else - { - ok(ret, "GetWorldTransform error %u\n", GetLastError()); - trace("eM11 %f, eM22 %f, eDx %f, eDy %f\n", xform.eM11, xform.eM22, xform.eDx, xform.eDy); - } - - return 1; -} - -static void test_SaveDC(void) -{ - HDC hdcMetafile, hdcDisplay; - HENHMETAFILE hMetafile; - HWND hwnd; - int ret; - static const RECT rc = { 0, 0, 150, 150 }; - - /* Win9x doesn't play EMFs on invisible windows */ - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP | WS_VISIBLE, - 0, 0, 200, 200, 0, 0, 0, NULL); - ok(hwnd != 0, "CreateWindowExA error %d\n", GetLastError()); - - hdcDisplay = GetDC(hwnd); - ok(hdcDisplay != 0, "GetDC error %d\n", GetLastError()); - - hdcMetafile = CreateEnhMetaFileA(hdcDisplay, NULL, NULL, NULL); - ok(hdcMetafile != 0, "CreateEnhMetaFileA error %d\n", GetLastError()); - - SetMapMode(hdcMetafile, MM_ANISOTROPIC); - - /* Need to write something to the emf, otherwise Windows won't play it back */ - LineTo(hdcMetafile, 150, 150); - - SetWindowOrgEx(hdcMetafile, 0, 0, NULL); - SetViewportOrgEx(hdcMetafile, 0, 0, NULL); - SetWindowExtEx(hdcMetafile, 110, 110, NULL ); - SetViewportExtEx(hdcMetafile, 120, 120, NULL ); - - /* Force Win9x to update DC state */ - SetPixelV(hdcMetafile, 50, 50, 0); - - ret = SaveDC(hdcMetafile); - ok(ret == 1, "ret = %d\n", ret); - - SetWindowOrgEx(hdcMetafile, -1, -1, NULL); - SetViewportOrgEx(hdcMetafile, 10, 10, NULL); - SetWindowExtEx(hdcMetafile, 150, 150, NULL ); - SetViewportExtEx(hdcMetafile, 200, 200, NULL ); - - /* Force Win9x to update DC state */ - SetPixelV(hdcMetafile, 50, 50, 0); - - ret = SaveDC(hdcMetafile); - ok(ret == 2, "ret = %d\n", ret); - - SetWindowOrgEx(hdcMetafile, -2, -2, NULL); - SetViewportOrgEx(hdcMetafile, 20, 20, NULL); - SetWindowExtEx(hdcMetafile, 120, 120, NULL ); - SetViewportExtEx(hdcMetafile, 300, 300, NULL ); - - /* Force Win9x to update DC state */ - SetPixelV(hdcMetafile, 50, 50, 0); - - ret = SaveDC(hdcMetafile); - ok(ret == 3, "ret = %d\n", ret); - - SetWindowOrgEx(hdcMetafile, -3, -3, NULL); - SetViewportOrgEx(hdcMetafile, 30, 30, NULL); - SetWindowExtEx(hdcMetafile, 200, 200, NULL ); - SetViewportExtEx(hdcMetafile, 400, 400, NULL ); - - /* Force Win9x to update DC state */ - SetPixelV(hdcMetafile, 50, 50, 0); - - ret = RestoreDC(hdcMetafile, -1); - ok(ret, "ret = %d\n", ret); - - ret = SaveDC(hdcMetafile); - ok(ret == 3, "ret = %d\n", ret); - - ret = RestoreDC(hdcMetafile, 1); - ok(ret, "ret = %d\n", ret); - - SetWindowOrgEx(hdcMetafile, -4, -4, NULL); - SetViewportOrgEx(hdcMetafile, 40, 40, NULL); - SetWindowExtEx(hdcMetafile, 500, 500, NULL ); - SetViewportExtEx(hdcMetafile, 50, 50, NULL ); - - /* Force Win9x to update DC state */ - SetPixelV(hdcMetafile, 50, 50, 0); - - ret = SaveDC(hdcMetafile); - ok(ret == 1, "ret = %d\n", ret); - - ret = SaveDC(hdcMetafile); - ok(ret == 2, "ret = %d\n", ret); - - hMetafile = CloseEnhMetaFile(hdcMetafile); - ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError()); - - ret = EnumEnhMetaFile(hdcDisplay, hMetafile, savedc_emf_enum_proc, 0, &rc); - ok( ret == 1, "EnumEnhMetaFile rets %d\n", ret); - - ret = DeleteEnhMetaFile(hMetafile); - ok( ret, "DeleteEnhMetaFile error %d\n", GetLastError()); - ret = ReleaseDC(hwnd, hdcDisplay); - ok( ret, "ReleaseDC error %d\n", GetLastError()); - DestroyWindow(hwnd); -} - -/* Win-format metafile (mfdrv) tests */ -/* These tests compare the generated metafiles byte-by-byte */ -/* with the nominal results. */ - -/* Maximum size of sample metafiles in bytes. */ -#define MF_BUFSIZE 512 - -/* 8x8 bitmap data for a pattern brush */ -static const unsigned char SAMPLE_PATTERN_BRUSH[] = { - 0x01, 0x00, 0x02, 0x00, - 0x03, 0x00, 0x04, 0x00, - 0x05, 0x00, 0x06, 0x00, - 0x07, 0x00, 0x08, 0x00 -}; - -/* Sample metafiles to be compared to the outputs of the - * test functions. - */ - -static const unsigned char MF_BLANK_BITS[] = { - 0x01, 0x00, 0x09, 0x00, 0x00, 0x03, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -static const unsigned char MF_GRAPHICS_BITS[] = { - 0x01, 0x00, 0x09, 0x00, 0x00, 0x03, 0x22, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x02, - 0x01, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x13, 0x02, 0x02, 0x00, 0x02, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x14, 0x02, 0x01, 0x00, 0x01, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x18, 0x04, 0x02, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; - -static const unsigned char MF_PATTERN_BRUSH_BITS[] = { - 0x01, 0x00, 0x09, 0x00, 0x00, 0x03, 0x3d, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x2d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x42, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x2d, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00 -}; - -static const unsigned char MF_TEXTOUT_ON_PATH_BITS[] = -{ - 0x01, 0x00, 0x09, 0x00, 0x00, 0x03, 0x19, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x32, 0x0a, - 0x16, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x54, 0x65, 0x73, 0x74, 0x03, 0x00, 0x05, 0x00, - 0x08, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00 -}; - -static const unsigned char EMF_TEXTOUT_ON_PATH_BITS[] = -{ - 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe7, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, - 0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00, - 0xf4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x04, 0x00, - 0x80, 0xa9, 0x03, 0x00, 0x3b, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc8, 0x41, 0x00, 0x80, 0xbb, 0x41, - 0x0b, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x54, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00 -}; - -static const unsigned char MF_LINETO_BITS[] = { - 0x01, 0x00, 0x09, 0x00, 0x00, 0x03, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x02, - 0x0f, 0x00, 0x37, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00 -}; - -static const unsigned char EMF_LINETO_BITS[] = { - 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x06, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, - 0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00, - 0x38, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x7c, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0xcc, 0x05, 0x00, - 0xe0, 0x93, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x47, 0x44, 0x49, 0x43, 0x01, 0x00, 0x00, 0x80, - 0x00, 0x03, 0x00, 0x00, 0x60, 0xe5, 0xf4, 0x73, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x09, 0x00, 0x00, 0x03, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x02, - 0x0f, 0x00, 0x37, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x80, 0x25, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x80, 0x4b, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 -}; - -static const unsigned char EMF_LINETO_MM_ANISOTROPIC_BITS[] = { - 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00, - 0x38, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x7c, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0xcc, 0x05, 0x00, - 0xe0, 0x93, 0x04, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x47, 0x44, 0x49, 0x43, 0x01, 0x00, 0x00, 0x80, - 0x00, 0x03, 0x00, 0x00, 0xa4, 0xfe, 0xf4, 0x73, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x09, 0x00, 0x00, 0x03, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x02, - 0x0f, 0x00, 0x37, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x80, 0x25, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x80, 0x4b, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 -}; - -static const unsigned char EMF_LINETO_MM_TEXT_BITS[] = { - 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0x06, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, - 0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00, - 0xe4, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x7c, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0xcc, 0x05, 0x00, - 0xe0, 0x93, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, - 0x25, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x30, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x80, - 0x4b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00 -}; - -/* For debugging or dumping the raw metafiles produced by - * new test functions. - */ -static INT CALLBACK mf_enum_proc(HDC hdc, HANDLETABLE *ht, METARECORD *mr, - INT nobj, LPARAM param) -{ - trace("hdc %p, mr->rdFunction %04x, mr->rdSize %u, param %p\n", - hdc, mr->rdFunction, mr->rdSize, (void *)param); - return TRUE; -} - -/* For debugging or dumping the raw metafiles produced by - * new test functions. - */ - -static void dump_mf_bits (const HMETAFILE mf, const char *desc) -{ - BYTE buf[MF_BUFSIZE]; - UINT mfsize, i; - - if (!winetest_debug) return; - - mfsize = GetMetaFileBitsEx (mf, MF_BUFSIZE, buf); - ok (mfsize > 0, "%s: GetMetaFileBitsEx failed.\n", desc); - - printf ("MetaFile %s has bits:\n{\n ", desc); - for (i=0; i 0, "%s: GetMetaFileBitsEx failed.\n", desc); - if (mfsize < MF_BUFSIZE) - ok (mfsize == bsize, "%s: mfsize=%d, bsize=%d.\n", - desc, mfsize, bsize); - else - ok (bsize >= MF_BUFSIZE, "%s: mfsize > bufsize (%d bytes), bsize=%d.\n", - desc, mfsize, bsize); - if (mfsize != bsize) - return -1; - - diff = 0; - for (i=0; i 0, "%s: GetEnhMetaFileBits failed\n", desc); - - printf("EMF %s has bits:\n{\n ", desc); - for (i = 0; i < mfsize; i++) - { - printf ("0x%02x", buf[i]); - if (i == mfsize-1) - printf ("\n"); - else if (i % 8 == 7) - printf (",\n "); - else - printf (", "); - } - printf ("};\n"); -} - -static void dump_emf_records(const HENHMETAFILE mf, const char *desc) -{ - BYTE *emf; - BYTE buf[MF_BUFSIZE]; - UINT mfsize, offset; - - if (!winetest_debug) return; - - mfsize = GetEnhMetaFileBits(mf, MF_BUFSIZE, buf); - ok (mfsize > 0, "%s: GetEnhMetaFileBits error %d\n", desc, GetLastError()); - - printf("EMF %s has records:\n", desc); - - emf = buf; - offset = 0; - while(offset < mfsize) - { - EMR *emr = (EMR *)(emf + offset); - printf("emr->iType %d, emr->nSize %u\n", emr->iType, emr->nSize); - /*trace("emr->iType 0x%04lx, emr->nSize 0x%04lx\n", emr->iType, emr->nSize);*/ - offset += emr->nSize; - } -} - -static void dump_emf_record(const ENHMETARECORD *emr, const char *desc) -{ - const BYTE *buf; - DWORD i; - - if (!winetest_debug) return; - - printf ("%s: EMF record %u has bits:\n{\n", desc, emr->iType); - buf = (const BYTE *)emr; - for (i = 0; i < emr->nSize; i++) - { - printf ("0x%02x", buf[i]); - if (i == emr->nSize - 1) - printf ("\n"); - else if (i % 8 == 7) - printf (",\n"); - else - printf (", "); - } - printf ("};\n"); -} - -static BOOL match_emf_record(const ENHMETARECORD *emr1, const ENHMETARECORD *emr2, - const char *desc, BOOL todo) -{ - int diff; - - if (emr1->iType != emr2->iType && todo) - { - todo_wine - { - ok(emr1->iType == emr2->iType, "%s: emr->iType %u != %u\n", - desc, emr1->iType, emr2->iType); - } - } - else - ok(emr1->iType == emr2->iType, "%s: emr->iType %u != %u\n", - desc, emr1->iType, emr2->iType); - - if (emr1->nSize != emr2->nSize && todo) - { - todo_wine - { - ok(emr1->nSize == emr2->nSize, "%s: emr->nSize %u != %u\n", - desc, emr1->nSize, emr2->nSize); - } - } - else - ok(emr1->nSize == emr2->nSize, "%s: emr->nSize %u != %u\n", - desc, emr1->nSize, emr2->nSize); - - /* iType and nSize mismatches are fatal */ - if (emr1->iType != emr2->iType || emr1->nSize != emr2->nSize) return FALSE; - - /* contents of EMR_GDICOMMENT are not interesting */ - if (emr1->iType == EMR_GDICOMMENT) return TRUE; - - diff = memcmp(emr1->dParm, emr2->dParm, emr1->nSize - sizeof(EMR)); - if (diff && todo) - { - todo_wine - ok(diff == 0, "%s: contents of record %u don't match\n", desc, emr1->iType); - } - else - ok(diff == 0, "%s: contents of record %u don't match\n", desc, emr1->iType); - - if (diff) - { - dump_emf_record(emr1, "expected bits"); - dump_emf_record(emr2, "actual bits"); - } - - return diff == 0 || todo; /* report all non-fatal record mismatches */ -} - -/* Compare the EMF produced by a test function with the - * expected raw EMF data in "bits". - * Return value is 0 for a perfect match, - * -1 if lengths aren't equal, - * otherwise returns the number of non-matching bytes. - */ -static int compare_emf_bits(const HENHMETAFILE mf, const unsigned char *bits, - UINT bsize, const char *desc, BOOL todo) -{ - unsigned char buf[MF_BUFSIZE]; - UINT mfsize, offset; - const ENHMETAHEADER *emh1, *emh2; - - mfsize = GetEnhMetaFileBits(mf, MF_BUFSIZE, buf); - ok (mfsize > 0, "%s: GetEnhMetaFileBits error %d\n", desc, GetLastError()); - - if (mfsize < MF_BUFSIZE) - { - if (mfsize != bsize && todo) - { - todo_wine - ok(mfsize == bsize, "%s: mfsize=%d, bsize=%d\n", desc, mfsize, bsize); - } - else - ok(mfsize == bsize, "%s: mfsize=%d, bsize=%d\n", desc, mfsize, bsize); - } - else - ok(bsize >= MF_BUFSIZE, "%s: mfsize > bufsize (%d bytes), bsize=%d\n", - desc, mfsize, bsize); - - /* basic things must match */ - emh1 = (const ENHMETAHEADER *)bits; - emh2 = (const ENHMETAHEADER *)buf; - ok(emh1->iType == EMR_HEADER, "expected EMR_HEADER, got %u\n", emh1->iType); - ok(emh1->nSize == sizeof(ENHMETAHEADER), "expected sizeof(ENHMETAHEADER), got %u\n", emh1->nSize); - ok(emh2->nBytes == mfsize, "expected emh->nBytes %u, got %u\n", mfsize, emh2->nBytes); - ok(emh1->dSignature == ENHMETA_SIGNATURE, "expected ENHMETA_SIGNATURE, got %u\n", emh1->dSignature); - - ok(emh1->iType == emh2->iType, "expected EMR_HEADER, got %u\n", emh2->iType); - ok(emh1->nSize == emh2->nSize, "expected nSize %u, got %u\n", emh1->nSize, emh2->nSize); - ok(emh1->dSignature == emh2->dSignature, "expected dSignature %u, got %u\n", emh1->dSignature, emh2->dSignature); - if (todo && emh1->nBytes != emh2->nBytes) - { - todo_wine - ok(emh1->nBytes == emh2->nBytes, "expected nBytes %u, got %u\n", emh1->nBytes, emh2->nBytes); - } - else - ok(emh1->nBytes == emh2->nBytes, "expected nBytes %u, got %u\n", emh1->nBytes, emh2->nBytes); - if (todo && emh1->nRecords != emh2->nRecords) - { - todo_wine - ok(emh1->nRecords == emh2->nRecords, "expected nBytes %u, got %u\n", emh1->nRecords, emh2->nRecords); - } - else - ok(emh1->nRecords == emh2->nRecords, "expected nBytes %u, got %u\n", emh1->nRecords, emh2->nRecords); - - offset = emh1->nSize; - while (offset < emh1->nBytes) - { - const ENHMETARECORD *emr1 = (const ENHMETARECORD *)(bits + offset); - const ENHMETARECORD *emr2 = (const ENHMETARECORD *)(buf + offset); - - trace("EMF record %u, size %u/record %u, size %u\n", - emr1->iType, emr1->nSize, emr2->iType, emr2->nSize); - - if (!match_emf_record(emr1, emr2, desc, todo)) return -1; - - offset += emr1->nSize; - } - return 0; -} - -/* Test a blank metafile. May be used as a template for new tests. */ - -static void test_mf_Blank(void) -{ - HDC hdcMetafile; - HMETAFILE hMetafile; - INT caps; - BOOL ret; - INT type; - - hdcMetafile = CreateMetaFileA(NULL); - ok(hdcMetafile != 0, "CreateMetaFileA(NULL) error %d\n", GetLastError()); - trace("hdcMetafile %p\n", hdcMetafile); - -/* Tests on metafile initialization */ - caps = GetDeviceCaps (hdcMetafile, TECHNOLOGY); - ok (caps == DT_METAFILE, - "GetDeviceCaps: TECHNOLOGY=%d != DT_METAFILE.\n", caps); - - hMetafile = CloseMetaFile(hdcMetafile); - ok(hMetafile != 0, "CloseMetaFile error %d\n", GetLastError()); - type = GetObjectType(hMetafile); - ok(type == OBJ_METAFILE, "CloseMetaFile created object with type %d\n", type); - ok(!GetObjectType(hdcMetafile), "CloseMetaFile has to destroy metafile hdc\n"); - - if (compare_mf_bits (hMetafile, MF_BLANK_BITS, sizeof(MF_BLANK_BITS), - "mf_blank") != 0) - { - dump_mf_bits(hMetafile, "mf_Blank"); - EnumMetaFile(0, hMetafile, mf_enum_proc, 0); - } - - ret = DeleteMetaFile(hMetafile); - ok( ret, "DeleteMetaFile(%p) error %d\n", hMetafile, GetLastError()); -} - -static void test_CopyMetaFile(void) -{ - HDC hdcMetafile; - HMETAFILE hMetafile, hmf_copy; - BOOL ret; - char temp_path[MAX_PATH]; - char mf_name[MAX_PATH]; - INT type; - - hdcMetafile = CreateMetaFileA(NULL); - ok(hdcMetafile != 0, "CreateMetaFileA(NULL) error %d\n", GetLastError()); - trace("hdcMetafile %p\n", hdcMetafile); - - hMetafile = CloseMetaFile(hdcMetafile); - ok(hMetafile != 0, "CloseMetaFile error %d\n", GetLastError()); - type = GetObjectType(hMetafile); - ok(type == OBJ_METAFILE, "CloseMetaFile created object with type %d\n", type); - - if (compare_mf_bits (hMetafile, MF_BLANK_BITS, sizeof(MF_BLANK_BITS), - "mf_blank") != 0) - { - dump_mf_bits(hMetafile, "mf_Blank"); - EnumMetaFile(0, hMetafile, mf_enum_proc, 0); - } - - GetTempPathA(MAX_PATH, temp_path); - GetTempFileNameA(temp_path, "wmf", 0, mf_name); - - hmf_copy = CopyMetaFileA(hMetafile, mf_name); - ok(hmf_copy != 0, "CopyMetaFile error %d\n", GetLastError()); - - type = GetObjectType(hmf_copy); - ok(type == OBJ_METAFILE, "CopyMetaFile created object with type %d\n", type); - - ret = DeleteMetaFile(hMetafile); - ok( ret, "DeleteMetaFile(%p) error %d\n", hMetafile, GetLastError()); - - if (compare_mf_disk_bits(mf_name, MF_BLANK_BITS, sizeof(MF_BLANK_BITS), "mf_blank") != 0) - { - dump_mf_bits(hMetafile, "mf_Blank"); - EnumMetaFile(0, hMetafile, mf_enum_proc, 0); - } - - ret = DeleteMetaFile(hmf_copy); - ok( ret, "DeleteMetaFile(%p) error %d\n", hmf_copy, GetLastError()); - - DeleteFileA(mf_name); -} - -static void test_SetMetaFileBits(void) -{ - HMETAFILE hmf; - INT type; - BOOL ret; - BYTE buf[256]; - METAHEADER *mh; - - hmf = SetMetaFileBitsEx(sizeof(MF_GRAPHICS_BITS), MF_GRAPHICS_BITS); - ok(hmf != 0, "SetMetaFileBitsEx error %d\n", GetLastError()); - type = GetObjectType(hmf); - ok(type == OBJ_METAFILE, "SetMetaFileBitsEx created object with type %d\n", type); - - if (compare_mf_bits(hmf, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS), "mf_Graphics") != 0) - { - dump_mf_bits(hmf, "mf_Graphics"); - EnumMetaFile(0, hmf, mf_enum_proc, 0); - } - - ret = DeleteMetaFile(hmf); - ok(ret, "DeleteMetaFile(%p) error %d\n", hmf, GetLastError()); - - /* NULL data crashes XP SP1 */ - /*hmf = SetMetaFileBitsEx(sizeof(MF_GRAPHICS_BITS), NULL);*/ - - /* Now with not zero size */ - SetLastError(0xdeadbeef); - hmf = SetMetaFileBitsEx(0, MF_GRAPHICS_BITS); - ok(!hmf, "SetMetaFileBitsEx should fail\n"); - ok(GetLastError() == ERROR_INVALID_DATA, "wrong error %d\n", GetLastError()); - - /* Now with not even size */ - SetLastError(0xdeadbeef); - hmf = SetMetaFileBitsEx(sizeof(MF_GRAPHICS_BITS) - 1, MF_GRAPHICS_BITS); - ok(!hmf, "SetMetaFileBitsEx should fail\n"); - ok(GetLastError() == 0xdeadbeef /* XP SP1 */, "wrong error %d\n", GetLastError()); - - /* Now with zeroed out or faked some header fields */ - assert(sizeof(buf) >= sizeof(MF_GRAPHICS_BITS)); - memcpy(buf, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS)); - mh = (METAHEADER *)buf; - /* corruption of any of the below fields leads to a failure */ - mh->mtType = 0; - mh->mtVersion = 0; - mh->mtHeaderSize = 0; - SetLastError(0xdeadbeef); - hmf = SetMetaFileBitsEx(sizeof(MF_GRAPHICS_BITS), buf); - ok(!hmf, "SetMetaFileBitsEx should fail\n"); - ok(GetLastError() == ERROR_INVALID_DATA, "wrong error %d\n", GetLastError()); - - /* Now with corrupted mtSize field */ - memcpy(buf, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS)); - mh = (METAHEADER *)buf; - /* corruption of mtSize doesn't lead to a failure */ - mh->mtSize *= 2; - hmf = SetMetaFileBitsEx(sizeof(MF_GRAPHICS_BITS), buf); - ok(hmf != 0, "SetMetaFileBitsEx error %d\n", GetLastError()); - - if (compare_mf_bits(hmf, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS), "mf_Graphics") != 0) - { - dump_mf_bits(hmf, "mf_Graphics"); - EnumMetaFile(0, hmf, mf_enum_proc, 0); - } - - ret = DeleteMetaFile(hmf); - ok(ret, "DeleteMetaFile(%p) error %d\n", hmf, GetLastError()); - - /* Now with zeroed out mtSize field */ - memcpy(buf, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS)); - mh = (METAHEADER *)buf; - /* zeroing mtSize doesn't lead to a failure */ - mh->mtSize = 0; - hmf = SetMetaFileBitsEx(sizeof(MF_GRAPHICS_BITS), buf); - ok(hmf != 0, "SetMetaFileBitsEx error %d\n", GetLastError()); - - if (compare_mf_bits(hmf, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS), "mf_Graphics") != 0) - { - dump_mf_bits(hmf, "mf_Graphics"); - EnumMetaFile(0, hmf, mf_enum_proc, 0); - } - - ret = DeleteMetaFile(hmf); - ok(ret, "DeleteMetaFile(%p) error %d\n", hmf, GetLastError()); -} - -/* Simple APIs from mfdrv/graphics.c - */ - -static void test_mf_Graphics(void) -{ - HDC hdcMetafile; - HMETAFILE hMetafile; - POINT oldpoint; - BOOL ret; - - hdcMetafile = CreateMetaFileA(NULL); - ok(hdcMetafile != 0, "CreateMetaFileA(NULL) error %d\n", GetLastError()); - trace("hdcMetafile %p\n", hdcMetafile); - - ret = MoveToEx(hdcMetafile, 1, 1, NULL); - ok( ret, "MoveToEx error %d.\n", GetLastError()); - ret = LineTo(hdcMetafile, 2, 2); - ok( ret, "LineTo error %d.\n", GetLastError()); - ret = MoveToEx(hdcMetafile, 1, 1, &oldpoint); - ok( ret, "MoveToEx error %d.\n", GetLastError()); - -/* oldpoint gets garbage under Win XP, so the following test would - * work under Wine but fails under Windows: - * - * ok((oldpoint.x == 2) && (oldpoint.y == 2), - * "MoveToEx: (x, y) = (%ld, %ld), should be (2, 2).\n", - * oldpoint.x, oldpoint.y); - */ - - ret = Ellipse(hdcMetafile, 0, 0, 2, 2); - ok( ret, "Ellipse error %d.\n", GetLastError()); - - hMetafile = CloseMetaFile(hdcMetafile); - ok(hMetafile != 0, "CloseMetaFile error %d\n", GetLastError()); - ok(!GetObjectType(hdcMetafile), "CloseMetaFile has to destroy metafile hdc\n"); - - if (compare_mf_bits (hMetafile, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS), - "mf_Graphics") != 0) - { - dump_mf_bits(hMetafile, "mf_Graphics"); - EnumMetaFile(0, hMetafile, mf_enum_proc, 0); - } - - ret = DeleteMetaFile(hMetafile); - ok( ret, "DeleteMetaFile(%p) error %d\n", - hMetafile, GetLastError()); -} - -static void test_mf_PatternBrush(void) -{ - HDC hdcMetafile; - HMETAFILE hMetafile; - LOGBRUSH *orig_lb; - HBRUSH hBrush; - BOOL ret; - - orig_lb = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LOGBRUSH)); - - orig_lb->lbStyle = BS_PATTERN; - orig_lb->lbColor = RGB(0, 0, 0); - orig_lb->lbHatch = (ULONG_PTR)CreateBitmap (8, 8, 1, 1, SAMPLE_PATTERN_BRUSH); - ok((HBITMAP)orig_lb->lbHatch != NULL, "CreateBitmap error %d.\n", GetLastError()); - - hBrush = CreateBrushIndirect (orig_lb); - ok(hBrush != 0, "CreateBrushIndirect error %d\n", GetLastError()); - - hdcMetafile = CreateMetaFileA(NULL); - ok(hdcMetafile != 0, "CreateMetaFileA error %d\n", GetLastError()); - trace("hdcMetafile %p\n", hdcMetafile); - - hBrush = SelectObject(hdcMetafile, hBrush); - ok(hBrush != 0, "SelectObject error %d.\n", GetLastError()); - - hMetafile = CloseMetaFile(hdcMetafile); - ok(hMetafile != 0, "CloseMetaFile error %d\n", GetLastError()); - ok(!GetObjectType(hdcMetafile), "CloseMetaFile has to destroy metafile hdc\n"); - - if (compare_mf_bits (hMetafile, MF_PATTERN_BRUSH_BITS, sizeof(MF_PATTERN_BRUSH_BITS), - "mf_Pattern_Brush") != 0) - { - dump_mf_bits(hMetafile, "mf_Pattern_Brush"); - EnumMetaFile(0, hMetafile, mf_enum_proc, 0); - } - - ret = DeleteMetaFile(hMetafile); - ok( ret, "DeleteMetaFile error %d\n", GetLastError()); - ret = DeleteObject(hBrush); - ok( ret, "DeleteObject(HBRUSH) error %d\n", GetLastError()); - ret = DeleteObject((HBITMAP)orig_lb->lbHatch); - ok( ret, "DeleteObject(HBITMAP) error %d\n", - GetLastError()); - HeapFree (GetProcessHeap(), 0, orig_lb); -} - -static void test_mf_ExtTextOut_on_path(void) -{ - HDC hdcMetafile; - HMETAFILE hMetafile; - BOOL ret; - static const INT dx[4] = { 3, 5, 8, 12 }; - - hdcMetafile = CreateMetaFileA(NULL); - ok(hdcMetafile != 0, "CreateMetaFileA(NULL) error %d\n", GetLastError()); - trace("hdcMetafile %p\n", hdcMetafile); - - ret = BeginPath(hdcMetafile); - ok(!ret, "BeginPath on metafile DC should fail\n"); - - ret = ExtTextOutA(hdcMetafile, 11, 22, 0, NULL, "Test", 4, dx); - ok(ret, "ExtTextOut error %d\n", GetLastError()); - - ret = EndPath(hdcMetafile); - ok(!ret, "EndPath on metafile DC should fail\n"); - - hMetafile = CloseMetaFile(hdcMetafile); - ok(hMetafile != 0, "CloseMetaFile error %d\n", GetLastError()); - - if (compare_mf_bits(hMetafile, MF_TEXTOUT_ON_PATH_BITS, sizeof(MF_TEXTOUT_ON_PATH_BITS), - "mf_TextOut_on_path") != 0) - { - dump_mf_bits(hMetafile, "mf_TextOut_on_path"); - EnumMetaFile(0, hMetafile, mf_enum_proc, 0); - } - - ret = DeleteMetaFile(hMetafile); - ok(ret, "DeleteMetaFile(%p) error %d\n", hMetafile, GetLastError()); -} - -static void test_emf_ExtTextOut_on_path(void) -{ - HWND hwnd; - HDC hdcDisplay, hdcMetafile; - HENHMETAFILE hMetafile; - BOOL ret; - static const INT dx[4] = { 3, 5, 8, 12 }; - - /* Win9x doesn't play EMFs on invisible windows */ - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP | WS_VISIBLE, - 0, 0, 200, 200, 0, 0, 0, NULL); - ok(hwnd != 0, "CreateWindowExA error %d\n", GetLastError()); - - hdcDisplay = GetDC(hwnd); - ok(hdcDisplay != 0, "GetDC error %d\n", GetLastError()); - - hdcMetafile = CreateEnhMetaFileA(hdcDisplay, NULL, NULL, NULL); - ok(hdcMetafile != 0, "CreateEnhMetaFileA error %d\n", GetLastError()); - - ret = BeginPath(hdcMetafile); - ok(ret, "BeginPath error %d\n", GetLastError()); - - ret = ExtTextOutA(hdcMetafile, 11, 22, 0, NULL, "Test", 4, dx); - ok(ret, "ExtTextOut error %d\n", GetLastError()); - - ret = EndPath(hdcMetafile); - ok(ret, "EndPath error %d\n", GetLastError()); - - hMetafile = CloseEnhMetaFile(hdcMetafile); - ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError()); - - /* this doesn't succeed yet: EMF has correct size, all EMF records - * are there, but their contents don't match for different reasons. - */ - if (compare_emf_bits(hMetafile, EMF_TEXTOUT_ON_PATH_BITS, sizeof(EMF_TEXTOUT_ON_PATH_BITS), - "emf_TextOut_on_path", TRUE) != 0) - { - dump_emf_bits(hMetafile, "emf_TextOut_on_path"); - dump_emf_records(hMetafile, "emf_TextOut_on_path"); - } - - ret = DeleteEnhMetaFile(hMetafile); - ok(ret, "DeleteEnhMetaFile error %d\n", GetLastError()); - ret = ReleaseDC(hwnd, hdcDisplay); - ok(ret, "ReleaseDC error %d\n", GetLastError()); - DestroyWindow(hwnd); -} - -static const unsigned char EMF_CLIPPING[] = -{ - 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00, - 0xd0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x7c, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0xcc, 0x05, 0x00, - 0xe0, 0x93, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 -}; - -static void translate( POINT *pt, UINT count, const XFORM *xform ) -{ - while (count--) - { - FLOAT x = (FLOAT)pt->x; - FLOAT y = (FLOAT)pt->y; - pt->x = (LONG)floor( x * xform->eM11 + y * xform->eM21 + xform->eDx + 0.5 ); - pt->y = (LONG)floor( x * xform->eM12 + y * xform->eM22 + xform->eDy + 0.5 ); - pt++; - } -} - -static int CALLBACK clip_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table, - const ENHMETARECORD *emr, int n_objs, LPARAM param) -{ - if (emr->iType == EMR_EXTSELECTCLIPRGN) - { - const EMREXTSELECTCLIPRGN *clip = (const EMREXTSELECTCLIPRGN *)emr; - union _rgn - { - RGNDATA data; - char buf[sizeof(RGNDATAHEADER) + sizeof(RECT)]; - }; - const union _rgn *rgn1; - union _rgn rgn2; - RECT rect, rc_transformed; - const RECT *rc = (const RECT *)param; - HRGN hrgn; - XFORM xform; - INT ret; - BOOL is_win9x; - - trace("EMR_EXTSELECTCLIPRGN: cbRgnData %#x, iMode %u\n", - clip->cbRgnData, clip->iMode); - - ok(clip->iMode == RGN_COPY, "expected RGN_COPY, got %u\n", clip->iMode); - ok(clip->cbRgnData >= sizeof(RGNDATAHEADER) + sizeof(RECT), - "too small data block: %u bytes\n", clip->cbRgnData); - if (clip->cbRgnData < sizeof(RGNDATAHEADER) + sizeof(RECT)) - return 0; - - rgn1 = (const union _rgn *)clip->RgnData; - - trace("size %u, type %u, count %u, rgn size %u, bound (%d,%d-%d,%d)\n", - rgn1->data.rdh.dwSize, rgn1->data.rdh.iType, - rgn1->data.rdh.nCount, rgn1->data.rdh.nRgnSize, - rgn1->data.rdh.rcBound.left, rgn1->data.rdh.rcBound.top, - rgn1->data.rdh.rcBound.right, rgn1->data.rdh.rcBound.bottom); - - ok(EqualRect(&rgn1->data.rdh.rcBound, rc), "rects don't match\n"); - - rect = *(const RECT *)rgn1->data.Buffer; - trace("rect (%d,%d-%d,%d)\n", rect.left, rect.top, rect.right, rect.bottom); - ok(EqualRect(&rect, rc), "rects don't match\n"); - - ok(rgn1->data.rdh.dwSize == sizeof(rgn1->data.rdh), "expected sizeof(rdh), got %u\n", rgn1->data.rdh.dwSize); - ok(rgn1->data.rdh.iType == RDH_RECTANGLES, "expected RDH_RECTANGLES, got %u\n", rgn1->data.rdh.iType); - ok(rgn1->data.rdh.nCount == 1, "expected 1, got %u\n", rgn1->data.rdh.nCount); - ok(rgn1->data.rdh.nRgnSize == sizeof(RECT), "expected sizeof(RECT), got %u\n", rgn1->data.rdh.nRgnSize); - - hrgn = CreateRectRgn(0, 0, 0, 0); - - memset(&xform, 0, sizeof(xform)); - SetLastError(0xdeadbeef); - ret = GetWorldTransform(hdc, &xform); - is_win9x = !ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED; - if (!is_win9x) - ok(ret, "GetWorldTransform error %u\n", GetLastError()); - - trace("xform.eM11 %f, xform.eM22 %f\n", xform.eM11, xform.eM22); - - ret = GetClipRgn(hdc, hrgn); - ok(ret == 0, "GetClipRgn returned %d, expected 0\n", ret); - - PlayEnhMetaFileRecord(hdc, handle_table, emr, n_objs); - - ret = GetClipRgn(hdc, hrgn); - ok(ret == 1, "GetClipRgn returned %d, expected 0\n", ret); - - /* Win9x returns empty clipping region */ - if (is_win9x) return 1; - - ret = GetRegionData(hrgn, 0, NULL); - ok(ret == sizeof(rgn2.data.rdh) + sizeof(RECT), "expected sizeof(rgn), got %u\n", ret); - - ret = GetRegionData(hrgn, sizeof(rgn2), &rgn2.data); - - trace("size %u, type %u, count %u, rgn size %u, bound (%d,%d-%d,%d)\n", - rgn2.data.rdh.dwSize, rgn2.data.rdh.iType, - rgn2.data.rdh.nCount, rgn2.data.rdh.nRgnSize, - rgn2.data.rdh.rcBound.left, rgn2.data.rdh.rcBound.top, - rgn2.data.rdh.rcBound.right, rgn2.data.rdh.rcBound.bottom); - - rect = rgn2.data.rdh.rcBound; - rc_transformed = *rc; - translate((POINT *)&rc_transformed, 2, &xform); - trace("transformed (%d,%d-%d,%d)\n", rc_transformed.left, rc_transformed.top, - rc_transformed.right, rc_transformed.bottom); - ok(EqualRect(&rect, &rc_transformed), "rects don't match\n"); - - rect = *(const RECT *)rgn2.data.Buffer; - trace("rect (%d,%d-%d,%d)\n", rect.left, rect.top, rect.right, rect.bottom); - rc_transformed = *rc; - translate((POINT *)&rc_transformed, 2, &xform); - trace("transformed (%d,%d-%d,%d)\n", rc_transformed.left, rc_transformed.top, - rc_transformed.right, rc_transformed.bottom); - ok(EqualRect(&rect, &rc_transformed), "rects don't match\n"); - - ok(rgn2.data.rdh.dwSize == sizeof(rgn1->data.rdh), "expected sizeof(rdh), got %u\n", rgn2.data.rdh.dwSize); - ok(rgn2.data.rdh.iType == RDH_RECTANGLES, "expected RDH_RECTANGLES, got %u\n", rgn2.data.rdh.iType); - ok(rgn2.data.rdh.nCount == 1, "expected 1, got %u\n", rgn2.data.rdh.nCount); - ok(rgn2.data.rdh.nRgnSize == sizeof(RECT), "expected sizeof(RECT), got %u\n", rgn2.data.rdh.nRgnSize); - - DeleteObject(hrgn); - } - return 1; -} - -static void test_emf_clipping(void) -{ - static const RECT rc = { 0, 0, 100, 100 }; - RECT rc_clip = { 100, 100, 1024, 1024 }; - HWND hwnd; - HDC hdc; - HENHMETAFILE hemf; - HRGN hrgn; - INT ret; - - SetLastError(0xdeadbeef); - hdc = CreateEnhMetaFileA(0, NULL, NULL, NULL); - ok(hdc != 0, "CreateEnhMetaFileA error %d\n", GetLastError()); - - /* Need to write something to the emf, otherwise Windows won't play it back */ - LineTo(hdc, 1, 1); - - hrgn = CreateRectRgn(rc_clip.left, rc_clip.top, rc_clip.right, rc_clip.bottom); - ret = SelectClipRgn(hdc, hrgn); - ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); - - SetLastError(0xdeadbeef); - hemf = CloseEnhMetaFile(hdc); - ok(hemf != 0, "CloseEnhMetaFile error %d\n", GetLastError()); - - if (compare_emf_bits(hemf, EMF_CLIPPING, sizeof(EMF_CLIPPING), - "emf_clipping", TRUE) != 0) - { - dump_emf_bits(hemf, "emf_clipping"); - dump_emf_records(hemf, "emf_clipping"); - } - - DeleteObject(hrgn); - - /* Win9x doesn't play EMFs on invisible windows */ - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP | WS_VISIBLE, - 0, 0, 200, 200, 0, 0, 0, NULL); - ok(hwnd != 0, "CreateWindowExA error %d\n", GetLastError()); - - hdc = GetDC(hwnd); - - ret = EnumEnhMetaFile(hdc, hemf, clip_emf_enum_proc, &rc_clip, &rc); - ok(ret, "EnumEnhMetaFile error %d\n", GetLastError()); - - DeleteEnhMetaFile(hemf); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); -} - -static INT CALLBACK EmfEnumProc(HDC hdc, HANDLETABLE *lpHTable, const ENHMETARECORD *lpEMFR, INT nObj, LPARAM lpData) -{ - LPMETAFILEPICT lpMFP = (LPMETAFILEPICT)lpData; - POINT mapping[2] = { { 0, 0 }, { 10, 10 } }; - /* When using MM_TEXT Win9x does not update the mapping mode - * until a record is played which actually outputs something */ - PlayEnhMetaFileRecord(hdc, lpHTable, lpEMFR, nObj); - LPtoDP(hdc, mapping, 2); - trace("EMF record: iType %d, nSize %d, (%d,%d)-(%d,%d)\n", - lpEMFR->iType, lpEMFR->nSize, - mapping[0].x, mapping[0].y, mapping[1].x, mapping[1].y); - - if (lpEMFR->iType == EMR_LINETO) - { - INT x0, y0, x1, y1; - if (!lpMFP || lpMFP->mm == MM_TEXT) - { - x0 = 0; - y0 = 0; - x1 = (INT)floor(10 * 100.0 / LINE_X + 0.5); - y1 = (INT)floor(10 * 100.0 / LINE_Y + 0.5); - } - else - { - ok(lpMFP->mm == MM_ANISOTROPIC, "mm=%d\n", lpMFP->mm); - - x0 = MulDiv(0, GetDeviceCaps(hdc, HORZSIZE) * 100, GetDeviceCaps(hdc, HORZRES)); - y0 = MulDiv(0, GetDeviceCaps(hdc, VERTSIZE) * 100, GetDeviceCaps(hdc, VERTRES)); - x1 = MulDiv(10, GetDeviceCaps(hdc, HORZSIZE) * 100, GetDeviceCaps(hdc, HORZRES)); - y1 = MulDiv(10, GetDeviceCaps(hdc, VERTSIZE) * 100, GetDeviceCaps(hdc, VERTRES)); - } - ok(mapping[0].x == x0 && mapping[0].y == y0 && mapping[1].x == x1 && mapping[1].y == y1, - "(%d,%d)->(%d,%d), expected (%d,%d)->(%d,%d)\n", - mapping[0].x, mapping[0].y, mapping[1].x, mapping[1].y, - x0, y0, x1, y1); - } - return TRUE; -} - -static HENHMETAFILE create_converted_emf(const METAFILEPICT *mfp) -{ - HDC hdcMf; - HMETAFILE hmf; - BOOL ret; - UINT size; - LPBYTE pBits; - - hdcMf = CreateMetaFile(NULL); - ok(hdcMf != NULL, "CreateMetaFile failed with error %d\n", GetLastError()); - ret = LineTo(hdcMf, (INT)LINE_X, (INT)LINE_Y); - ok(ret, "LineTo failed with error %d\n", GetLastError()); - hmf = CloseMetaFile(hdcMf); - ok(hmf != NULL, "CloseMetaFile failed with error %d\n", GetLastError()); - - if (compare_mf_bits (hmf, MF_LINETO_BITS, sizeof(MF_LINETO_BITS), "mf_LineTo") != 0) - { - dump_mf_bits(hmf, "mf_LineTo"); - EnumMetaFile(0, hmf, mf_enum_proc, 0); - } - - size = GetMetaFileBitsEx(hmf, 0, NULL); - ok(size, "GetMetaFileBitsEx failed with error %d\n", GetLastError()); - pBits = HeapAlloc(GetProcessHeap(), 0, size); - GetMetaFileBitsEx(hmf, size, pBits); - DeleteMetaFile(hmf); - return SetWinMetaFileBits(size, pBits, NULL, mfp); -} - -static void test_mf_conversions(void) -{ - trace("Testing MF->EMF conversion (MM_ANISOTROPIC)\n"); - { - HDC hdcOffscreen = CreateCompatibleDC(NULL); - HENHMETAFILE hemf; - METAFILEPICT mfp; - RECT rect = { 0, 0, 100, 100 }; - mfp.mm = MM_ANISOTROPIC; - mfp.xExt = 100; - mfp.yExt = 100; - mfp.hMF = NULL; - hemf = create_converted_emf(&mfp); - - if (compare_emf_bits(hemf, EMF_LINETO_MM_ANISOTROPIC_BITS, sizeof(EMF_LINETO_MM_ANISOTROPIC_BITS), - "emf_LineTo MM_ANISOTROPIC", TRUE) != 0) - { - dump_emf_bits(hemf, "emf_LineTo MM_ANISOTROPIC"); - dump_emf_records(hemf, "emf_LineTo MM_ANISOTROPIC"); - } - - EnumEnhMetaFile(hdcOffscreen, hemf, EmfEnumProc, &mfp, &rect); - - DeleteEnhMetaFile(hemf); - DeleteDC(hdcOffscreen); - } - - trace("Testing MF->EMF conversion (MM_TEXT)\n"); - { - HDC hdcOffscreen = CreateCompatibleDC(NULL); - HENHMETAFILE hemf; - METAFILEPICT mfp; - RECT rect = { 0, 0, 100, 100 }; - mfp.mm = MM_TEXT; - mfp.xExt = 0; - mfp.yExt = 0; - mfp.hMF = NULL; - hemf = create_converted_emf(&mfp); - - if (compare_emf_bits(hemf, EMF_LINETO_MM_TEXT_BITS, sizeof(EMF_LINETO_MM_TEXT_BITS), - "emf_LineTo MM_TEXT", TRUE) != 0) - { - dump_emf_bits(hemf, "emf_LineTo MM_TEXT"); - dump_emf_records(hemf, "emf_LineTo MM_TEXT"); - } - - EnumEnhMetaFile(hdcOffscreen, hemf, EmfEnumProc, &mfp, &rect); - - DeleteEnhMetaFile(hemf); - DeleteDC(hdcOffscreen); - } - - trace("Testing MF->EMF conversion (NULL mfp)\n"); - { - HDC hdcOffscreen = CreateCompatibleDC(NULL); - HENHMETAFILE hemf; - RECT rect = { 0, 0, 100, 100 }; - hemf = create_converted_emf(NULL); - - if (compare_emf_bits(hemf, EMF_LINETO_BITS, sizeof(EMF_LINETO_BITS), - "emf_LineTo NULL", TRUE) != 0) - { - dump_emf_bits(hemf, "emf_LineTo NULL"); - dump_emf_records(hemf, "emf_LineTo NULL"); - } - - EnumEnhMetaFile(hdcOffscreen, hemf, EmfEnumProc, NULL, &rect); - - DeleteEnhMetaFile(hemf); - DeleteDC(hdcOffscreen); - } -} - -static BOOL getConvertedFrameAndBounds(UINT buffer_size, BYTE * buffer, BOOL mfpIsNull, - LONG mm, LONG xExt, LONG yExt, - RECTL * rclBounds, RECTL * rclFrame) -{ - METAFILEPICT mfp; - METAFILEPICT * mfpPtr = NULL; - HENHMETAFILE emf; - ENHMETAHEADER header; - UINT res; - - if (!mfpIsNull) - { - mfp.mm = mm; - mfp.xExt = xExt; - mfp.yExt = yExt; - mfpPtr = &mfp; - } - - emf = SetWinMetaFileBits(buffer_size, buffer, NULL, mfpPtr); - ok(emf != NULL, "SetWinMetaFileBits failed\n"); - if (!emf) return FALSE; - res = GetEnhMetaFileHeader(emf, sizeof(header), &header); - ok(res != 0, "GetEnhMetaHeader failed\n"); - DeleteEnhMetaFile(emf); - if (!res) return FALSE; - - *rclBounds = header.rclBounds; - *rclFrame = header.rclFrame; - return TRUE; -} - -static void checkConvertedFrameAndBounds(UINT buffer_size, BYTE * buffer, BOOL mfpIsNull, - LONG mm, LONG xExt, LONG yExt, - RECTL * rclBoundsExpected, RECTL * rclFrameExpected) -{ - RECTL rclBounds, rclFrame; - - if (getConvertedFrameAndBounds(buffer_size, buffer, mfpIsNull, mm, xExt, yExt, &rclBounds, &rclFrame)) - { - const char * msg; - char buf[64]; - - if (mfpIsNull) - { - msg = "mfp == NULL"; - } - else - { - const char * mm_str; - switch (mm) - { - case MM_ANISOTROPIC: mm_str = "MM_ANISOTROPIC"; break; - case MM_ISOTROPIC: mm_str = "MM_ISOTROPIC"; break; - default: mm_str = "Unexpected"; - } - sprintf(buf, "mm=%s, xExt=%d, yExt=%d", mm_str, xExt, yExt); - msg = buf; - } - - ok(rclBounds.left == rclBoundsExpected->left, "rclBounds.left: Expected %d, got %d (%s)\n", rclBoundsExpected->left, rclBounds.left, msg); - ok(rclBounds.top == rclBoundsExpected->top, "rclBounds.top: Expected %d, got %d (%s)\n", rclBoundsExpected->top, rclBounds.top, msg); - ok(rclBounds.right == rclBoundsExpected->right, "rclBounds.right: Expected %d, got %d (%s)\n", rclBoundsExpected->right, rclBounds.right, msg); - ok(rclBounds.bottom == rclBoundsExpected->bottom, "rclBounds.bottom: Expected %d, got %d (%s)\n", rclBoundsExpected->bottom, rclBounds.bottom, msg); - ok(rclFrame.left == rclFrameExpected->left, "rclFrame.left: Expected %d, got %d (%s)\n", rclFrameExpected->left, rclFrame.left, msg); - ok(rclFrame.top == rclFrameExpected->top, "rclFrame.top: Expected %d, got %d (%s)\n", rclFrameExpected->top, rclFrame.top, msg); - ok(rclFrame.right == rclFrameExpected->right, "rclFrame.right: Expected %d, got %d (%s)\n", rclFrameExpected->right, rclFrame.right, msg); - ok(rclFrame.bottom == rclFrameExpected->bottom, "rclFrame.bottom: Expected %d, got %d (%s)\n", rclFrameExpected->bottom, rclFrame.bottom, msg); - } -} - -static void test_SetWinMetaFileBits(void) -{ - HMETAFILE wmf; - HDC wmfDC; - BYTE * buffer; - UINT buffer_size; - RECT rect; - UINT res; - RECTL rclBoundsAnisotropic, rclFrameAnisotropic; - RECTL rclBoundsIsotropic, rclFrameIsotropic; - RECTL rclBounds, rclFrame; - HDC dc; - LONG diffx, diffy; - - wmfDC = CreateMetaFile(NULL); - ok(wmfDC != NULL, "CreateMetaFile failed\n"); - if (!wmfDC) return; - - SetWindowExtEx(wmfDC, 100, 100, NULL); - rect.left = rect.top = 0; - rect.right = rect.bottom = 50; - FillRect(wmfDC, &rect, GetStockObject(BLACK_BRUSH)); - wmf = CloseMetaFile(wmfDC); - ok(wmf != NULL, "Metafile creation failed\n"); - if (!wmf) return; - - buffer_size = GetMetaFileBitsEx(wmf, 0, NULL); - ok(buffer_size != 0, "GetMetaFileBitsEx failed\n"); - if (buffer_size == 0) - { - DeleteMetaFile(wmf); - return; - } - - buffer = HeapAlloc(GetProcessHeap(), 0, buffer_size); - ok(buffer != NULL, "HeapAlloc failed\n"); - if (!buffer) - { - DeleteMetaFile(wmf); - return; - } - - res = GetMetaFileBitsEx(wmf, buffer_size, buffer); - ok(res == buffer_size, "GetMetaFileBitsEx failed\n"); - DeleteMetaFile(wmf); - if (res != buffer_size) - { - HeapFree(GetProcessHeap(), 0, buffer); - return; - } - - /* Get the reference bounds and frame */ - getConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, 0, 0, &rclBoundsAnisotropic, &rclFrameAnisotropic); - getConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, 0, 0, &rclBoundsIsotropic, &rclFrameIsotropic); - - ok(rclBoundsAnisotropic.left == 0 && rclBoundsAnisotropic.top == 0 && - rclBoundsIsotropic.left == 0 && rclBoundsIsotropic.top == 0, - "SetWinMetaFileBits: Reference bounds: Left and top bound must be zero\n"); - - ok(rclBoundsAnisotropic.right >= rclBoundsIsotropic.right, "SetWinMetaFileBits: Reference bounds: Invalid right bound\n"); - ok(rclBoundsAnisotropic.bottom >= rclBoundsIsotropic.bottom, "SetWinMetaFileBits: Reference bounds: Invalid bottom bound\n"); - diffx = rclBoundsIsotropic.right - rclBoundsIsotropic.bottom; - if (diffx < 0) diffx = -diffx; - ok(diffx <= 1, "SetWinMetaFileBits (MM_ISOTROPIC): Reference bounds are not isotropic\n"); - - dc = CreateCompatibleDC(NULL); - todo_wine - { - ok(rclBoundsAnisotropic.right == GetDeviceCaps(dc, HORZRES) / 2 - 1 && - rclBoundsAnisotropic.bottom == GetDeviceCaps(dc, VERTRES) / 2 - 1, - "SetWinMetaFileBits (MM_ANISOTROPIC): Reference bounds: The whole device surface must be used (%dx%d), but got (%dx%d)\n", - GetDeviceCaps(dc, HORZRES) / 2 - 1, GetDeviceCaps(dc, VERTRES) / 2 - 1, rclBoundsAnisotropic.right, rclBoundsAnisotropic.bottom); - } - - /* Allow 1 mm difference (rounding errors) */ - diffx = rclFrameAnisotropic.right / 100 - GetDeviceCaps(dc, HORZSIZE) / 2; - diffy = rclFrameAnisotropic.bottom / 100 - GetDeviceCaps(dc, VERTSIZE) / 2; - if (diffx < 0) diffx = -diffx; - if (diffy < 0) diffy = -diffy; - todo_wine - { - ok(diffx <= 1 && diffy <= 1, - "SetWinMetaFileBits (MM_ANISOTROPIC): Reference frame: The whole device surface must be used (%dx%d), but got (%dx%d)\n", - GetDeviceCaps(dc, HORZSIZE) / 2, GetDeviceCaps(dc, VERTSIZE) / 2, rclFrameAnisotropic.right / 100, rclFrameAnisotropic.bottom / 100); - } - DeleteDC(dc); - - /* If the METAFILEPICT pointer is NULL, the MM_ANISOTROPIC mapping mode and the whole device surface are used */ - checkConvertedFrameAndBounds(buffer_size, buffer, TRUE, 0, 0, 0, &rclBoundsAnisotropic, &rclFrameAnisotropic); - - /* If xExt or yExt is zero or negative, the whole device surface is used */ - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, 10000, 0, &rclBoundsAnisotropic, &rclFrameAnisotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, 10000, 0, &rclBoundsIsotropic, &rclFrameIsotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, 0, 10000, &rclBoundsAnisotropic, &rclFrameAnisotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, 0, 10000, &rclBoundsIsotropic, &rclFrameIsotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, -10000, 0, &rclBoundsAnisotropic, &rclFrameAnisotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, -10000, 0, &rclBoundsIsotropic, &rclFrameIsotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, 0, -10000, &rclBoundsAnisotropic, &rclFrameAnisotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, 0, -10000, &rclBoundsIsotropic, &rclFrameIsotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, -10000, 10000, &rclBoundsAnisotropic, &rclFrameAnisotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, -10000, 10000, &rclBoundsIsotropic, &rclFrameIsotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, 10000, -10000, &rclBoundsAnisotropic, &rclFrameAnisotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, 10000, -10000, &rclBoundsIsotropic, &rclFrameIsotropic); - - /* MSDN says that negative xExt and yExt values specify a ratio. - Check that this is wrong and the whole device surface is used */ - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, -1000, -100, &rclBoundsAnisotropic, &rclFrameAnisotropic); - checkConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, -1000, -100, &rclBoundsIsotropic, &rclFrameIsotropic); - - /* Ordinary conversions */ - - if (getConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ANISOTROPIC, 30000, 20000, &rclBounds, &rclFrame)) - { - ok(rclFrame.left == 0 && rclFrame.top == 0 && rclFrame.right == 30000 && rclFrame.bottom == 20000, - "SetWinMetaFileBits (MM_ANISOTROPIC): rclFrame contains invalid values\n"); - ok(rclBounds.left == 0 && rclBounds.top == 0 && rclBounds.right > rclBounds.bottom, - "SetWinMetaFileBits (MM_ANISOTROPIC): rclBounds contains invalid values\n"); - } - - if (getConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_ISOTROPIC, 30000, 20000, &rclBounds, &rclFrame)) - { - ok(rclFrame.left == 0 && rclFrame.top == 0 && rclFrame.right == 30000 && rclFrame.bottom == 20000, - "SetWinMetaFileBits (MM_ISOTROPIC): rclFrame contains invalid values\n"); - ok(rclBounds.left == 0 && rclBounds.top == 0, - "SetWinMetaFileBits (MM_ISOTROPIC): rclBounds contains invalid values\n"); - - /* Wine has a rounding error */ - diffx = rclBounds.right - rclBounds.bottom; - if (diffx < 0) diffx = -diffx; - ok(diffx <= 1, "SetWinMetaFileBits (MM_ISOTROPIC): rclBounds is not isotropic\n"); - } - - if (getConvertedFrameAndBounds(buffer_size, buffer, FALSE, MM_HIMETRIC, 30000, 20000, &rclBounds, &rclFrame)) - { - ok(rclFrame.right - rclFrame.left != 30000 && rclFrame.bottom - rclFrame.top != 20000, - "SetWinMetaFileBits: xExt and yExt must be ignored for mapping modes other than MM_ANISOTROPIC and MM_ISOTROPIC\n"); - } - - HeapFree(GetProcessHeap(), 0, buffer); -} - -static BOOL (WINAPI *pGdiIsMetaPrintDC)(HDC); -static BOOL (WINAPI *pGdiIsMetaFileDC)(HDC); -static BOOL (WINAPI *pGdiIsPlayMetafileDC)(HDC); - -static void test_gdiis(void) -{ - RECT rect = {0,0,100,100}; - HDC hdc, hemfDC, hmfDC; - HENHMETAFILE hemf; - HMODULE hgdi32; - - /* resolve all the functions */ - hgdi32 = GetModuleHandle("gdi32"); - pGdiIsMetaPrintDC = (void*) GetProcAddress(hgdi32, "GdiIsMetaPrintDC"); - pGdiIsMetaFileDC = (void*) GetProcAddress(hgdi32, "GdiIsMetaFileDC"); - pGdiIsPlayMetafileDC = (void*) GetProcAddress(hgdi32, "GdiIsPlayMetafileDC"); - - /* they should all exist or none should exist */ - if(!pGdiIsMetaPrintDC) - return; - - /* try with nothing */ - ok(!pGdiIsMetaPrintDC(NULL), "ismetaprint with NULL parameter\n"); - ok(!pGdiIsMetaFileDC(NULL), "ismetafile with NULL parameter\n"); - ok(!pGdiIsPlayMetafileDC(NULL), "isplaymetafile with NULL parameter\n"); - - /* try with a metafile */ - hmfDC = CreateMetaFile(NULL); - ok(!pGdiIsMetaPrintDC(hmfDC), "ismetaprint on metafile\n"); - ok(pGdiIsMetaFileDC(hmfDC), "ismetafile on metafile\n"); - ok(!pGdiIsPlayMetafileDC(hmfDC), "isplaymetafile on metafile\n"); - DeleteMetaFile(CloseMetaFile(hmfDC)); - - /* try with an enhanced metafile */ - hdc = GetDC(NULL); - hemfDC = CreateEnhMetaFileW(hdc, NULL, &rect, NULL); - ok(hemfDC != NULL, "failed to create emf\n"); - - ok(!pGdiIsMetaPrintDC(hemfDC), "ismetaprint on emf\n"); - ok(pGdiIsMetaFileDC(hemfDC), "ismetafile on emf\n"); - ok(!pGdiIsPlayMetafileDC(hemfDC), "isplaymetafile on emf\n"); - - hemf = CloseEnhMetaFile(hemfDC); - ok(hemf != NULL, "failed to close EMF\n"); - DeleteEnhMetaFile(hemf); - ReleaseDC(NULL,hdc); -} - -static void test_SetEnhMetaFileBits(void) -{ - BYTE data[256]; - HENHMETAFILE hemf; - ENHMETAHEADER *emh; - - memset(data, 0xAA, sizeof(data)); - SetLastError(0xdeadbeef); - hemf = SetEnhMetaFileBits(sizeof(data), data); - ok(!hemf, "SetEnhMetaFileBits should fail\n"); - ok(GetLastError() == ERROR_INVALID_DATA, "expected ERROR_INVALID_DATA, got %u\n", GetLastError()); - - emh = (ENHMETAHEADER *)data; - memset(emh, 0, sizeof(*emh)); - - emh->iType = EMR_HEADER; - emh->nSize = sizeof(*emh); - emh->dSignature = ENHMETA_SIGNATURE; - /* emh->nVersion = 0x10000; XP doesn't care about version */ - emh->nBytes = sizeof(*emh); - /* emh->nRecords = 1; XP doesn't care about records */ - emh->nHandles = 1; /* XP refuses to load a EMF if nHandles == 0 */ - - SetLastError(0xdeadbeef); - hemf = SetEnhMetaFileBits(emh->nBytes, data); - ok(hemf != 0, "SetEnhMetaFileBits error %u\n", GetLastError()); - DeleteEnhMetaFile(hemf); - - /* XP refuses to load unaligned EMF */ - emh->nBytes++; - SetLastError(0xdeadbeef); - hemf = SetEnhMetaFileBits(emh->nBytes, data); - ok(!hemf, "SetEnhMetaFileBits should fail\n"); - /* XP doesn't set error in this case */ - - emh->dSignature = 0; - emh->nBytes--; - SetLastError(0xdeadbeef); - hemf = SetEnhMetaFileBits(emh->nBytes, data); - ok(!hemf, "SetEnhMetaFileBits should fail\n"); - /* XP doesn't set error in this case */ -} - -START_TEST(metafile) -{ - init_function_pointers(); - - /* For enhanced metafiles (enhmfdrv) */ - test_ExtTextOut(); - test_SaveDC(); - - /* For win-format metafiles (mfdrv) */ - test_mf_Blank(); - test_mf_Graphics(); - test_mf_PatternBrush(); - test_CopyMetaFile(); - test_SetMetaFileBits(); - test_mf_ExtTextOut_on_path(); - test_emf_ExtTextOut_on_path(); - test_emf_clipping(); - - /* For metafile conversions */ - test_mf_conversions(); - test_SetWinMetaFileBits(); - - test_gdiis(); - test_SetEnhMetaFileBits(); -} diff --git a/rostests/winetests/gdi32/palette.c b/rostests/winetests/gdi32/palette.c deleted file mode 100644 index c9455cab659..00000000000 --- a/rostests/winetests/gdi32/palette.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Unit test suite for palettes - * - * Copyright 2005 Glenn Wurster - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" - -static const PALETTEENTRY logpalettedata[8] = { - { 0x10, 0x20, 0x30, PC_NOCOLLAPSE }, - { 0x20, 0x30, 0x40, PC_NOCOLLAPSE }, - { 0x30, 0x40, 0x50, PC_NOCOLLAPSE }, - { 0x40, 0x50, 0x60, PC_NOCOLLAPSE }, - { 0x50, 0x60, 0x70, PC_NOCOLLAPSE }, - { 0x60, 0x70, 0x80, PC_NOCOLLAPSE }, - { 0x70, 0x80, 0x90, PC_NOCOLLAPSE }, - { 0x80, 0x90, 0xA0, PC_NOCOLLAPSE }, -}; - -static void test_DIB_PAL_COLORS(void) { - HDC hdc = GetDC( NULL ); - HDC memhdc = CreateCompatibleDC( hdc ); - HBITMAP hbmp, hbmpOld; - char bmpbuf[sizeof(BITMAPINFO) + 10 * sizeof(WORD)]; - PBITMAPINFO bmp = (PBITMAPINFO)bmpbuf; - WORD * bmpPalPtr; - char logpalettebuf[sizeof(LOGPALETTE) + sizeof(logpalettedata)]; - PLOGPALETTE logpalette = (PLOGPALETTE)logpalettebuf; - HPALETTE hpal, hpalOld; - COLORREF setColor, chkColor, getColor; - int i; - - /* Initalize the logical palette with a few colours */ - logpalette->palVersion = 0x300; - logpalette->palNumEntries = 8; - memcpy( logpalette->palPalEntry, logpalettedata, sizeof(logpalettedata) ); - hpal = CreatePalette( logpalette ); - hpalOld = SelectPalette( memhdc, hpal, FALSE ); - ok( hpalOld != NULL, "error=%d\n", GetLastError() ); - - /* Create a DIB BMP which references colours in the logical palette */ - memset( bmp, 0x00, sizeof(BITMAPINFO) ); - bmp->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmp->bmiHeader.biWidth = 1; - bmp->bmiHeader.biHeight = 1; - bmp->bmiHeader.biPlanes = 1; - bmp->bmiHeader.biBitCount = 8; - bmp->bmiHeader.biCompression = BI_RGB; - bmp->bmiHeader.biClrUsed = 10; - bmp->bmiHeader.biClrImportant = 0; - bmpPalPtr = (WORD *)&bmp->bmiColors; - for( i = 0; i < 8; i++ ) { - *bmpPalPtr++ = i; - } - *bmpPalPtr++ = 8; /* Pointer to logical palette index just outside range */ - *bmpPalPtr++ = 19; /* Pointer to bad logical palette index */ - - hbmp = CreateDIBSection( memhdc, bmp, DIB_PAL_COLORS, 0, 0, 0 ); - ok( hbmp != NULL, "error=%d\n", GetLastError() ); - hbmpOld = SelectObject( memhdc, hbmp ); - ok( hbmpOld != NULL, "error=%d\n", GetLastError() ); - - /* Test with a RGB to DIB_PAL_COLORS */ - setColor = RGB( logpalettedata[1].peRed, logpalettedata[1].peGreen, logpalettedata[1].peBlue ); - SetPixel( memhdc, 0, 0, setColor ); - chkColor = RGB( logpalettedata[1].peRed, logpalettedata[1].peGreen, logpalettedata[1].peBlue ); - getColor = GetPixel( memhdc, 0, 0 ); - ok( getColor == chkColor, "getColor=%08X\n", (UINT)getColor ); - - /* Test with a valid DIBINDEX to DIB_PAL_COLORS */ - setColor = DIBINDEX( 2 ); - SetPixel( memhdc, 0, 0, setColor ); - chkColor = RGB( logpalettedata[2].peRed, logpalettedata[2].peGreen, logpalettedata[2].peBlue ); - getColor = GetPixel( memhdc, 0, 0 ); - ok( getColor == chkColor, "getColor=%08X\n", (UINT)getColor ); - - /* Test with a invalid DIBINDEX to DIB_PAL_COLORS */ - setColor = DIBINDEX( 12 ); - SetPixel( memhdc, 0, 0, setColor ); - chkColor = RGB( 0, 0, 0 ); - getColor = GetPixel( memhdc, 0, 0 ); - ok( getColor == chkColor, "getColor=%08X\n", (UINT)getColor ); - - /* Test for double wraparound on logical palette references from */ - /* DIBINDEX by DIB_PAL_COLORS. */ - setColor = DIBINDEX( 9 ); - SetPixel( memhdc, 0, 0, setColor ); - chkColor = RGB( logpalettedata[3].peRed, logpalettedata[3].peGreen, logpalettedata[3].peBlue ); - getColor = GetPixel( memhdc, 0, 0 ); - ok( getColor == chkColor, "getColor=%08X\n", (UINT)getColor ); - - SelectPalette( memhdc, hpalOld, FALSE ); - DeleteObject( hpal ); - SelectObject( memhdc, hbmpOld ); - DeleteObject( hbmp ); - DeleteDC( memhdc ); - ReleaseDC( NULL, hdc ); -} - -static void test_palette_entries(void) -{ - char logpalettebuf[sizeof(LOGPALETTE) + sizeof(logpalettedata)]; - PLOGPALETTE logpalette = (PLOGPALETTE)logpalettebuf; - HPALETTE hpal; - UINT res=0; - PALETTEENTRY palEntry = { 0x1, 0x2, 0x3, 0xff }; - PALETTEENTRY getEntryResult; - - /* Initalize the logical palette with a few colours */ - logpalette->palVersion = 0x300; - logpalette->palNumEntries = 8; - memcpy( logpalette->palPalEntry, logpalettedata, sizeof(logpalettedata) ); - hpal = CreatePalette( logpalette ); - - /* Set a new entry with peFlags to 0xff */ - SetPaletteEntries(hpal, 0, 1, &palEntry); - - /* Retrieve the entry to see if GDI32 performs any filtering on peFlags */ - res = GetPaletteEntries(hpal, 0, 1, &getEntryResult); - ok(res == 1, "GetPaletteEntries should have returned 1 but returned %d\n", res); - - ok( palEntry.peFlags == getEntryResult.peFlags, "palEntry.peFlags (%#x) != getEntryResult.peFlags (%#x)\n", palEntry.peFlags, getEntryResult.peFlags ); -} - -START_TEST(palette) -{ - test_DIB_PAL_COLORS(); - test_palette_entries(); -} diff --git a/rostests/winetests/gdi32/path.c b/rostests/winetests/gdi32/path.c deleted file mode 100644 index 58e84677fcf..00000000000 --- a/rostests/winetests/gdi32/path.c +++ /dev/null @@ -1,514 +0,0 @@ -/* - * Unit test suite for paths - * - * Copyright 2007 Laurent Vromman - * Copyright 2007 Misha Koshelev - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" - -#include "winuser.h" -#include "winerror.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) - -static void test_widenpath(void) -{ - HDC hdc = GetDC(0); - HPEN greenPen, narrowPen; - HPEN oldPen; - POINT pnt[6]; - INT nSize, ret; - - /* Create a pen to be used in WidenPath */ - greenPen = CreatePen(PS_SOLID, 10, RGB(0,0,0)); - oldPen = SelectObject(hdc, greenPen); - - /* Prepare a path */ - pnt[0].x = 100; - pnt[0].y = 0; - pnt[1].x = 200; - pnt[1].y = 0; - pnt[2].x = 300; - pnt[2].y = 100; - pnt[3].x = 300; - pnt[3].y = 200; - pnt[4].x = 200; - pnt[4].y = 300; - pnt[5].x = 100; - pnt[5].y = 300; - - /* Set a polyline path */ - BeginPath(hdc); - Polyline(hdc, pnt, 6); - EndPath(hdc); - - /* Widen the polyline path */ - ok(WidenPath(hdc), "WidenPath fails while widening a poyline path.\n"); - - /* Test if WidenPath seems to have done his job */ - nSize = GetPath(hdc, NULL, NULL, 0); - ok(nSize != -1, "GetPath fails after calling WidenPath.\n"); - ok(nSize > 6, "Path number of points is too low. Should be more than 6 but is %d\n", nSize); - - AbortPath(hdc); - - /* Test WidenPath with an open path (last error only set on Win2k and later) */ - SetLastError(0xdeadbeef); - BeginPath(hdc); - ret = WidenPath(hdc); - ok(ret == FALSE && (GetLastError() == ERROR_CAN_NOT_COMPLETE || GetLastError() == 0xdeadbeef), - "WidenPath fails while widening an open path. Return value is %d, should be %d. Error is %u\n", ret, FALSE, GetLastError()); - - AbortPath(hdc); - - /* Test when the pen width is equal to 1. The path should change too */ - narrowPen = CreatePen(PS_SOLID, 1, RGB(0,0,0)); - oldPen = SelectObject(hdc, narrowPen); - BeginPath(hdc); - Polyline(hdc, pnt, 6); - EndPath(hdc); - ret = WidenPath(hdc); - nSize = GetPath(hdc, NULL, NULL, 0); - ok(nSize > 6, "WidenPath should compute a widdened path with a 1px wide pen. Path length is %d, should be more than 6\n", nSize); - - ReleaseDC(0, hdc); - return; -} - -/* - * Tests for GDI drawing functions in paths - */ - -typedef struct -{ - int x, y; - BYTE type; - - /* How many extra entries before this one only on wine - * but not on native? */ - int wine_only_entries_preceding; - - /* 0 - This entry matches on wine. - * 1 - This entry corresponds to a single entry on wine that does not match the native entry. - * 2 - This entry is currently skipped on wine but present on native. */ - int todo; -} path_test_t; - -/* Helper function to verify that the current path in the given DC matches the expected path. - * - * We use a "smart" matching algorithm that allows us to detect partial improvements - * in conformance. Specifically, two running indices are kept, one through the actual - * path and one through the expected path. The actual path index increases unless there is - * no match and the todo field of the appropriate path_test_t element is 2. Similarly, - * if the wine_entries_preceding field of the appropriate path_test_t element is non-zero, - * the expected path index does not increase for that many elements as long as there - * is no match. This allows us to todo_wine extra path elements that are present only - * on wine but not on native and vice versa. - * - * Note that if expected_size is zero and the WINETEST_DEBUG environment variable is - * greater than 2, the trace() output is a C path_test_t array structure, useful for making - * new tests that use this function. - */ -static void ok_path(HDC hdc, const char *path_name, const path_test_t *expected, int expected_size, BOOL todo_size) -{ - static const char *type_string[8] = { "Unknown (0)", "PT_CLOSEFIGURE", "PT_LINETO", - "PT_LINETO | PT_CLOSEFIGURE", "PT_BEZIERTO", - "PT_BEZIERTO | PT_CLOSEFIGURE", "PT_MOVETO", "PT_MOVETO | PT_CLOSEFIGURE"}; - POINT *pnt = NULL; - BYTE *types = NULL; - int size, numskip, - idx = 0, eidx = 0; - - /* Get the path */ - assert(hdc != 0); - size = GetPath(hdc, NULL, NULL, 0); - ok(size > 0, "GetPath returned size %d, last error %d\n", size, GetLastError()); - if (size <= 0) - { - skip("Cannot perform path comparisons due to failure to retrieve path.\n"); - return; - } - pnt = HeapAlloc(GetProcessHeap(), 0, size*sizeof(POINT)); - assert(pnt != 0); - types = HeapAlloc(GetProcessHeap(), 0, size*sizeof(BYTE)); - assert(types != 0); - size = GetPath(hdc, pnt, types, size); - assert(size > 0); - - if (todo_size) todo_wine - ok(size == expected_size, "Path size %d does not match expected size %d\n", size, expected_size); - else - ok(size == expected_size, "Path size %d does not match expected size %d\n", size, expected_size); - - if (winetest_debug > 2) - trace("static const path_test_t %s[] = {\n", path_name); - - numskip = expected_size ? expected[eidx].wine_only_entries_preceding : 0; - while (idx < size && eidx < expected_size) - { - /* We allow a few pixels fudge in matching X and Y coordinates to account for imprecision in - * floating point to integer conversion */ - BOOL match = (types[idx] == expected[eidx].type) && - (pnt[idx].x >= expected[eidx].x-2 && pnt[idx].x <= expected[eidx].x+2) && - (pnt[idx].y >= expected[eidx].y-2 && pnt[idx].y <= expected[eidx].y+2); - - if (expected[eidx].todo || numskip) todo_wine - ok(match, "Expected #%d: %s (%d,%d) but got %s (%d,%d)\n", eidx, - type_string[expected[eidx].type], expected[eidx].x, expected[eidx].y, - type_string[types[idx]], pnt[idx].x, pnt[idx].y); - else - ok(match, "Expected #%d: %s (%d,%d) but got %s (%d,%d)\n", eidx, - type_string[expected[eidx].type], expected[eidx].x, expected[eidx].y, - type_string[types[idx]], pnt[idx].x, pnt[idx].y); - - if (match || expected[eidx].todo != 2) - { - if (winetest_debug > 2) - trace(" {%d, %d, %s, 0, 0}%s /* %d */\n", pnt[idx].x, pnt[idx].y, - type_string[types[idx]], idx < size-1 ? "," : "};", idx); - idx++; - } - if (match || !numskip--) - numskip = expected[++eidx].wine_only_entries_preceding; - } - - /* If we are debugging and the actual path is longer than the expected path, make - * sure to display the entire path */ - if (winetest_debug > 2 && idx < size) - for (; idx < size; idx++) - trace(" {%d, %d, %s, 0, 0}%s /* %d */\n", pnt[idx].x, pnt[idx].y, - type_string[types[idx]], idx < size-1 ? "," : "};", idx); - - HeapFree(GetProcessHeap(), 0, types); - HeapFree(GetProcessHeap(), 0, pnt); -} - -static const path_test_t arcto_path[] = { - {0, 0, PT_MOVETO, 0, 0}, /* 0 */ - {229, 215, PT_LINETO, 0, 0}, /* 1 */ - {248, 205, PT_BEZIERTO, 0, 0}, /* 2 */ - {273, 200, PT_BEZIERTO, 0, 0}, /* 3 */ - {300, 200, PT_BEZIERTO, 0, 0}, /* 4 */ - {355, 200, PT_BEZIERTO, 0, 0}, /* 5 */ - {399, 222, PT_BEZIERTO, 0, 0}, /* 6 */ - {399, 250, PT_BEZIERTO, 0, 0}, /* 7 */ - {399, 263, PT_BEZIERTO, 0, 0}, /* 8 */ - {389, 275, PT_BEZIERTO, 0, 0}, /* 9 */ - {370, 285, PT_BEZIERTO, 0, 0}, /* 10 */ - {363, 277, PT_LINETO, 0, 0}, /* 11 */ - {380, 270, PT_BEZIERTO, 0, 0}, /* 12 */ - {389, 260, PT_BEZIERTO, 0, 0}, /* 13 */ - {389, 250, PT_BEZIERTO, 0, 0}, /* 14 */ - {389, 228, PT_BEZIERTO, 0, 0}, /* 15 */ - {349, 210, PT_BEZIERTO, 0, 0}, /* 16 */ - {300, 210, PT_BEZIERTO, 0, 0}, /* 17 */ - {276, 210, PT_BEZIERTO, 0, 0}, /* 18 */ - {253, 214, PT_BEZIERTO, 0, 0}, /* 19 */ - {236, 222, PT_BEZIERTO | PT_CLOSEFIGURE, 0, 0}}; /* 20 */ - -static void test_arcto(void) -{ - HDC hdc = GetDC(0); - - BeginPath(hdc); - SetArcDirection(hdc, AD_CLOCKWISE); - if (!ArcTo(hdc, 200, 200, 400, 300, 200, 200, 400, 300) && - GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* ArcTo is only available on Win2k and later */ - skip("ArcTo is not available\n"); - goto done; - } - SetArcDirection(hdc, AD_COUNTERCLOCKWISE); - ArcTo(hdc, 210, 210, 390, 290, 390, 290, 210, 210); - CloseFigure(hdc); - EndPath(hdc); - - ok_path(hdc, "arcto_path", arcto_path, sizeof(arcto_path)/sizeof(path_test_t), 0); -done: - ReleaseDC(0, hdc); -} - -static const path_test_t anglearc_path[] = { - {0, 0, PT_MOVETO, 0, 0}, /* 0 */ - {371, 229, PT_LINETO, 0, 0}, /* 1 */ - {352, 211, PT_BEZIERTO, 0, 0}, /* 2 */ - {327, 200, PT_BEZIERTO, 0, 0}, /* 3 */ - {300, 200, PT_BEZIERTO, 0, 0}, /* 4 */ - {245, 200, PT_BEZIERTO, 0, 0}, /* 5 */ - {200, 245, PT_BEZIERTO, 0, 0}, /* 6 */ - {200, 300, PT_BEZIERTO, 0, 0}, /* 7 */ - {200, 300, PT_BEZIERTO, 0, 2}, /* 8 */ - {200, 300, PT_BEZIERTO, 0, 2}, /* 9 */ - {200, 300, PT_BEZIERTO, 0, 2}, /* 10 */ - {231, 260, PT_LINETO, 0, 0}, /* 11 */ - {245, 235, PT_BEZIERTO, 0, 0}, /* 12 */ - {271, 220, PT_BEZIERTO, 0, 0}, /* 13 */ - {300, 220, PT_BEZIERTO, 0, 0}, /* 14 */ - {344, 220, PT_BEZIERTO, 0, 0}, /* 15 */ - {380, 256, PT_BEZIERTO, 0, 0}, /* 16 */ - {380, 300, PT_BEZIERTO, 0, 0}, /* 17 */ - {380, 314, PT_BEZIERTO, 0, 0}, /* 18 */ - {376, 328, PT_BEZIERTO, 0, 0}, /* 19 */ - {369, 340, PT_BEZIERTO | PT_CLOSEFIGURE, 0, 0}}; /* 20 */ - -static void test_anglearc(void) -{ - HDC hdc = GetDC(0); - BeginPath(hdc); - if (!AngleArc(hdc, 300, 300, 100, 45.0, 135.0) && - GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* AngleArc is only available on Win2k and later */ - skip("AngleArc is not available\n"); - goto done; - } - AngleArc(hdc, 300, 300, 80, 150.0, -180.0); - CloseFigure(hdc); - EndPath(hdc); - - ok_path(hdc, "anglearc_path", anglearc_path, sizeof(anglearc_path)/sizeof(path_test_t), 1); -done: - ReleaseDC(0, hdc); -} - -static const path_test_t polydraw_path[] = { - {0, 0, PT_MOVETO, 0, 0}, /*0*/ - {10, 10, PT_LINETO, 0, 0}, /*1*/ - {10, 15, PT_LINETO | PT_CLOSEFIGURE, 0, 0}, /*2*/ - {100, 100, PT_MOVETO, 0, 0}, /*3*/ - {95, 95, PT_LINETO, 0, 0}, /*4*/ - {10, 10, PT_LINETO, 0, 0}, /*5*/ - {10, 15, PT_LINETO | PT_CLOSEFIGURE, 0, 0}, /*6*/ - {100, 100, PT_MOVETO, 0, 0}, /*7*/ - {15, 15, PT_LINETO, 0, 0}, /*8*/ - {25, 25, PT_MOVETO, 0, 0}, /*9*/ - {25, 30, PT_LINETO, 0, 0}, /*10*/ - {100, 100, PT_MOVETO, 0, 0}, /*11*/ - {30, 30, PT_BEZIERTO, 0, 0}, /*12*/ - {30, 35, PT_BEZIERTO, 0, 0}, /*13*/ - {35, 35, PT_BEZIERTO, 0, 0}, /*14*/ - {35, 40, PT_LINETO, 0, 0}, /*15*/ - {40, 40, PT_MOVETO, 0, 0}, /*16*/ - {40, 45, PT_LINETO, 0, 0}, /*17*/ - {35, 40, PT_MOVETO, 0, 0}, /*18*/ - {45, 50, PT_LINETO, 0, 0}, /*19*/ - {35, 40, PT_MOVETO, 0, 0}, /*20*/ - {50, 55, PT_LINETO, 0, 0}, /*21*/ - {45, 50, PT_LINETO, 0, 0}, /*22*/ - {35, 40, PT_MOVETO, 0, 0}, /*23*/ - {60, 60, PT_LINETO, 0, 0}, /*24*/ - {60, 65, PT_MOVETO, 0, 0}, /*25*/ - {65, 65, PT_LINETO, 0, 0} /*26*/ - }; - -static POINT polydraw_pts[] = { - {10, 10}, {10, 15}, - {15, 15}, {15, 20}, {20, 20}, {20, 25}, - {25, 25}, {25, 30}, - {30, 30}, {30, 35}, {35, 35}, {35, 40}, - {40, 40}, {40, 45}, {45, 45}, - {45, 50}, {50, 50}, - {50, 55}, {45, 50}, {55, 60}, - {60, 60}, {60, 65}, {65, 65}}; - -static BYTE polydraw_tps[] = - {PT_LINETO, PT_CLOSEFIGURE | PT_LINETO, /* 2 */ - PT_LINETO, PT_BEZIERTO, PT_LINETO, PT_LINETO, /* 6 */ - PT_MOVETO, PT_LINETO, /* 8 */ - PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO, PT_LINETO, /* 12 */ - PT_MOVETO, PT_LINETO, PT_CLOSEFIGURE, /* 15 */ - PT_LINETO, PT_MOVETO | PT_CLOSEFIGURE, /* 17 */ - PT_LINETO, PT_LINETO, PT_MOVETO | PT_CLOSEFIGURE, /* 20 */ - PT_LINETO, PT_MOVETO | PT_LINETO, PT_LINETO}; /* 23 */ - -static void test_polydraw(void) -{ - BOOL retb; - HDC hdc = GetDC(0); - BeginPath(hdc); - - /* closefigure with no previous moveto */ - if (!(retb = PolyDraw(hdc, polydraw_pts, polydraw_tps, 2)) && - GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* PolyDraw is only available on Win2k and later */ - skip("PolyDraw is not available\n"); - goto done; - } - expect(TRUE, retb); - - MoveToEx(hdc, 100, 100, NULL); - LineTo(hdc, 95, 95); - /* closefigure with previous moveto */ - retb = PolyDraw(hdc, polydraw_pts, polydraw_tps, 2); - expect(TRUE, retb); - /* bad bezier points */ - retb = PolyDraw(hdc, &(polydraw_pts[2]), &(polydraw_tps[2]), 4); - expect(FALSE, retb); - retb = PolyDraw(hdc, &(polydraw_pts[6]), &(polydraw_tps[6]), 4); - expect(FALSE, retb); - /* good bezier points */ - retb = PolyDraw(hdc, &(polydraw_pts[8]), &(polydraw_tps[8]), 4); - expect(TRUE, retb); - /* does lineto or bezierto take precedence? */ - retb = PolyDraw(hdc, &(polydraw_pts[12]), &(polydraw_tps[12]), 4); - expect(FALSE, retb); - /* bad point type, has already moved cursor position */ - retb = PolyDraw(hdc, &(polydraw_pts[15]), &(polydraw_tps[15]), 4); - expect(FALSE, retb); - /* bad point type, cursor position is moved, but back to its original spot */ - retb = PolyDraw(hdc, &(polydraw_pts[17]), &(polydraw_tps[17]), 4); - expect(FALSE, retb); - /* does lineto or moveto take precedence? */ - retb = PolyDraw(hdc, &(polydraw_pts[20]), &(polydraw_tps[20]), 3); - expect(TRUE, retb); - - EndPath(hdc); - ok_path(hdc, "polydraw_path", polydraw_path, sizeof(polydraw_path)/sizeof(path_test_t), 0); -done: - ReleaseDC(0, hdc); -} - -static void test_closefigure(void) { - BOOL retb; - int nSize, nSizeWitness; - HDC hdc = GetDC(0); - - BeginPath(hdc); - MoveToEx(hdc, 95, 95, NULL); - LineTo(hdc, 95, 0); - LineTo(hdc, 0, 95); - - retb = CloseFigure(hdc); - EndPath(hdc); - nSize = GetPath(hdc, NULL, NULL, 0); - - AbortPath(hdc); - - BeginPath(hdc); - MoveToEx(hdc, 95, 95, NULL); - LineTo(hdc, 95, 0); - LineTo(hdc, 0, 95); - - EndPath(hdc); - nSizeWitness = GetPath(hdc, NULL, NULL, 0); - - /* This test shows CloseFigure does not have to add a point at the end of the path */ - ok(nSize == nSizeWitness, "Wrong number of points, no point should be added by CloseFigure\n"); - - ReleaseDC(0, hdc); -} - -static void WINAPI linedda_callback(INT x, INT y, LPARAM lparam) -{ - POINT **pt = (POINT**)lparam; - ok((*pt)->x == x && (*pt)->y == y, "point mismatch expect(%d,%d) got(%d,%d)\n", - (*pt)->x, (*pt)->y, x, y); - - (*pt)++; - return; -} - -static void test_linedda(void) -{ - const POINT *pt; - static const POINT array_10_20_20_40[] = {{10,20},{10,21},{11,22},{11,23}, - {12,24},{12,25},{13,26},{13,27}, - {14,28},{14,29},{15,30},{15,31}, - {16,32},{16,33},{17,34},{17,35}, - {18,36},{18,37},{19,38},{19,39}, - {-1,-1}}; - static const POINT array_10_20_20_43[] = {{10,20},{10,21},{11,22},{11,23}, - {12,24},{12,25},{13,26},{13,27}, - {13,28},{14,29},{14,30},{15,31}, - {15,32},{16,33},{16,34},{17,35}, - {17,36},{17,37},{18,38},{18,39}, - {19,40},{19,41},{20,42},{-1,-1}}; - - static const POINT array_10_20_10_20[] = {{-1,-1}}; - static const POINT array_10_20_11_27[] = {{10,20},{10,21},{10,22},{10,23}, - {11,24},{11,25},{11,26},{-1,-1}}; - - static const POINT array_20_43_10_20[] = {{20,43},{20,42},{19,41},{19,40}, - {18,39},{18,38},{17,37},{17,36}, - {17,35},{16,34},{16,33},{15,32}, - {15,31},{14,30},{14,29},{13,28}, - {13,27},{13,26},{12,25},{12,24}, - {11,23},{11,22},{10,21},{-1,-1}}; - - static const POINT array_20_20_10_43[] = {{20,20},{20,21},{19,22},{19,23}, - {18,24},{18,25},{17,26},{17,27}, - {17,28},{16,29},{16,30},{15,31}, - {15,32},{14,33},{14,34},{13,35}, - {13,36},{13,37},{12,38},{12,39}, - {11,40},{11,41},{10,42},{-1,-1}}; - - static const POINT array_20_20_43_10[] = {{20,20},{21,20},{22,19},{23,19}, - {24,18},{25,18},{26,17},{27,17}, - {28,17},{29,16},{30,16},{31,15}, - {32,15},{33,14},{34,14},{35,13}, - {36,13},{37,13},{38,12},{39,12}, - {40,11},{41,11},{42,10},{-1,-1}}; - - - pt = array_10_20_20_40; - LineDDA(10, 20, 20, 40, linedda_callback, (LPARAM)&pt); - ok(pt->x == -1 && pt->y == -1, "didn't find terminator\n"); - - pt = array_10_20_20_43; - LineDDA(10, 20, 20, 43, linedda_callback, (LPARAM)&pt); - ok(pt->x == -1 && pt->y == -1, "didn't find terminator\n"); - - pt = array_10_20_10_20; - LineDDA(10, 20, 10, 20, linedda_callback, (LPARAM)&pt); - ok(pt->x == -1 && pt->y == -1, "didn't find terminator\n"); - - pt = array_10_20_11_27; - LineDDA(10, 20, 11, 27, linedda_callback, (LPARAM)&pt); - ok(pt->x == -1 && pt->y == -1, "didn't find terminator\n"); - - pt = array_20_43_10_20; - LineDDA(20, 43, 10, 20, linedda_callback, (LPARAM)&pt); - ok(pt->x == -1 && pt->y == -1, "didn't find terminator\n"); - - pt = array_20_20_10_43; - LineDDA(20, 20, 10, 43, linedda_callback, (LPARAM)&pt); - ok(pt->x == -1 && pt->y == -1, "didn't find terminator\n"); - - pt = array_20_20_43_10; - LineDDA(20, 20, 43, 10, linedda_callback, (LPARAM)&pt); - ok(pt->x == -1 && pt->y == -1, "didn't find terminator\n"); -} - -START_TEST(path) -{ - test_widenpath(); - test_arcto(); - test_anglearc(); - test_polydraw(); - test_closefigure(); - test_linedda(); -} diff --git a/rostests/winetests/gdi32/pen.c b/rostests/winetests/gdi32/pen.c deleted file mode 100644 index fcd79e636d3..00000000000 --- a/rostests/winetests/gdi32/pen.c +++ /dev/null @@ -1,552 +0,0 @@ -/* - * Unit test suite for pens - * - * Copyright 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 - */ - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" - -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) - -static void test_logpen(void) -{ - static const struct - { - UINT style; - INT width; - COLORREF color; - UINT ret_style; - INT ret_width; - COLORREF ret_color; - } pen[] = { - { PS_SOLID, -123, RGB(0x12,0x34,0x56), PS_SOLID, 123, RGB(0x12,0x34,0x56) }, - { PS_SOLID, 0, RGB(0x12,0x34,0x56), PS_SOLID, 0, RGB(0x12,0x34,0x56) }, - { PS_SOLID, 123, RGB(0x12,0x34,0x56), PS_SOLID, 123, RGB(0x12,0x34,0x56) }, - { PS_DASH, 123, RGB(0x12,0x34,0x56), PS_DASH, 123, RGB(0x12,0x34,0x56) }, - { PS_DOT, 123, RGB(0x12,0x34,0x56), PS_DOT, 123, RGB(0x12,0x34,0x56) }, - { PS_DASHDOT, 123, RGB(0x12,0x34,0x56), PS_DASHDOT, 123, RGB(0x12,0x34,0x56) }, - { PS_DASHDOTDOT, 123, RGB(0x12,0x34,0x56), PS_DASHDOTDOT, 123, RGB(0x12,0x34,0x56) }, - { PS_NULL, -123, RGB(0x12,0x34,0x56), PS_NULL, 1, 0 }, - { PS_NULL, 123, RGB(0x12,0x34,0x56), PS_NULL, 1, 0 }, - { PS_INSIDEFRAME, 123, RGB(0x12,0x34,0x56), PS_INSIDEFRAME, 123, RGB(0x12,0x34,0x56) }, - { PS_USERSTYLE, 123, RGB(0x12,0x34,0x56), PS_SOLID, 123, RGB(0x12,0x34,0x56) }, - { PS_ALTERNATE, 123, RGB(0x12,0x34,0x56), PS_SOLID, 123, RGB(0x12,0x34,0x56) } - }; - INT i, size; - HPEN hpen; - LOGPEN lp; - EXTLOGPEN elp; - LOGBRUSH lb; - DWORD obj_type, user_style[2] = { 0xabc, 0xdef }; - struct - { - EXTLOGPEN elp; - DWORD style_data[10]; - } ext_pen; - - for (i = 0; i < sizeof(pen)/sizeof(pen[0]); i++) - { - trace("testing style %u\n", pen[i].style); - - /********************** cosmetic pens **********************/ - /* CreatePenIndirect behaviour */ - lp.lopnStyle = pen[i].style, - lp.lopnWidth.x = pen[i].width; - lp.lopnWidth.y = 11; /* just in case */ - lp.lopnColor = pen[i].color; - SetLastError(0xdeadbeef); - hpen = CreatePenIndirect(&lp); - ok(hpen != 0, "CreatePen error %d\n", GetLastError()); - - obj_type = GetObjectType(hpen); - ok(obj_type == OBJ_PEN, "wrong object type %u\n", obj_type); - - memset(&lp, 0xb0, sizeof(lp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(lp), &lp); - ok(size == sizeof(lp), "GetObject returned %d, error %d\n", size, GetLastError()); - - ok(lp.lopnStyle == pen[i].ret_style, "expected %u, got %u\n", pen[i].ret_style, lp.lopnStyle); - ok(lp.lopnWidth.x == pen[i].ret_width, "expected %u, got %d\n", pen[i].ret_width, lp.lopnWidth.x); - ok(lp.lopnWidth.y == 0, "expected 0, got %d\n", lp.lopnWidth.y); - ok(lp.lopnColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, lp.lopnColor); - - DeleteObject(hpen); - - /* CreatePen behaviour */ - SetLastError(0xdeadbeef); - hpen = CreatePen(pen[i].style, pen[i].width, pen[i].color); - ok(hpen != 0, "CreatePen error %d\n", GetLastError()); - - obj_type = GetObjectType(hpen); - ok(obj_type == OBJ_PEN, "wrong object type %u\n", obj_type); - - /* check what's the real size of the object */ - size = GetObject(hpen, 0, NULL); - ok(size == sizeof(lp), "GetObject returned %d, error %d\n", size, GetLastError()); - - /* ask for truncated data */ - memset(&lp, 0xb0, sizeof(lp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(lp.lopnStyle), &lp); - ok(!size, "GetObject should fail: size %d, error %d\n", size, GetLastError()); - - /* see how larger buffer sizes are handled */ - memset(&lp, 0xb0, sizeof(lp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(lp) * 2, &lp); - ok(size == sizeof(lp), "GetObject returned %d, error %d\n", size, GetLastError()); - - /* see how larger buffer sizes are handled */ - memset(&elp, 0xb0, sizeof(elp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(elp) * 2, &elp); - ok(size == sizeof(lp), "GetObject returned %d, error %d\n", size, GetLastError()); - - memset(&lp, 0xb0, sizeof(lp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(lp), &lp); - ok(size == sizeof(lp), "GetObject returned %d, error %d\n", size, GetLastError()); - - ok(lp.lopnStyle == pen[i].ret_style, "expected %u, got %u\n", pen[i].ret_style, lp.lopnStyle); - ok(lp.lopnWidth.x == pen[i].ret_width, "expected %u, got %d\n", pen[i].ret_width, lp.lopnWidth.x); - ok(lp.lopnWidth.y == 0, "expected 0, got %d\n", lp.lopnWidth.y); - ok(lp.lopnColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, lp.lopnColor); - - memset(&elp, 0xb0, sizeof(elp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(elp), &elp); - - /* for some reason XP differentiates PS_NULL here */ - if (pen[i].style == PS_NULL) - { - ok(size == sizeof(EXTLOGPEN), "GetObject returned %d, error %d\n", size, GetLastError()); - ok(elp.elpPenStyle == pen[i].ret_style, "expected %u, got %u\n", pen[i].ret_style, elp.elpPenStyle); - ok(elp.elpWidth == 0, "expected 0, got %u\n", elp.elpWidth); - ok(elp.elpColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, elp.elpColor); - ok(elp.elpBrushStyle == BS_SOLID, "expected BS_SOLID, got %u\n", elp.elpBrushStyle); - ok(elp.elpHatch == 0, "expected 0, got %p\n", (void *)elp.elpHatch); - ok(elp.elpNumEntries == 0, "expected 0, got %x\n", elp.elpNumEntries); - } - else - { - ok(size == sizeof(LOGPEN), "GetObject returned %d, error %d\n", size, GetLastError()); - memcpy(&lp, &elp, sizeof(lp)); - ok(lp.lopnStyle == pen[i].ret_style, "expected %u, got %u\n", pen[i].ret_style, lp.lopnStyle); - ok(lp.lopnWidth.x == pen[i].ret_width, "expected %u, got %d\n", pen[i].ret_width, lp.lopnWidth.x); - ok(lp.lopnWidth.y == 0, "expected 0, got %d\n", lp.lopnWidth.y); - ok(lp.lopnColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, lp.lopnColor); - } - - DeleteObject(hpen); - - /********** cosmetic pens created by ExtCreatePen ***********/ - lb.lbStyle = BS_SOLID; - lb.lbColor = pen[i].color; - lb.lbHatch = HS_CROSS; /* just in case */ - SetLastError(0xdeadbeef); - hpen = ExtCreatePen(pen[i].style, pen[i].width, &lb, 2, user_style); - if (pen[i].style != PS_USERSTYLE) - { - ok(hpen == 0, "ExtCreatePen should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "wrong last error value %d\n", GetLastError()); - SetLastError(0xdeadbeef); - hpen = ExtCreatePen(pen[i].style, pen[i].width, &lb, 0, NULL); - if (pen[i].style != PS_NULL) - { - ok(hpen == 0, "ExtCreatePen with width != 1 should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "wrong last error value %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hpen = ExtCreatePen(pen[i].style, 1, &lb, 0, NULL); - } - } - else - { - ok(hpen == 0, "ExtCreatePen with width != 1 should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "wrong last error value %d\n", GetLastError()); - SetLastError(0xdeadbeef); - hpen = ExtCreatePen(pen[i].style, 1, &lb, 2, user_style); - } - if (pen[i].style == PS_INSIDEFRAME) - { - /* This style is applicable only for geometric pens */ - ok(hpen == 0, "ExtCreatePen should fail\n"); - goto test_geometric_pens; - } - ok(hpen != 0, "ExtCreatePen error %d\n", GetLastError()); - - obj_type = GetObjectType(hpen); - /* for some reason XP differentiates PS_NULL here */ - if (pen[i].style == PS_NULL) - ok(obj_type == OBJ_PEN, "wrong object type %u\n", obj_type); - else - ok(obj_type == OBJ_EXTPEN, "wrong object type %u\n", obj_type); - - /* check what's the real size of the object */ - SetLastError(0xdeadbeef); - size = GetObject(hpen, 0, NULL); - switch (pen[i].style) - { - case PS_NULL: - ok(size == sizeof(LOGPEN), - "GetObject returned %d, error %d\n", size, GetLastError()); - break; - - case PS_USERSTYLE: - ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry) + sizeof(user_style), - "GetObject returned %d, error %d\n", size, GetLastError()); - break; - - default: - ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry), - "GetObject returned %d, error %d\n", size, GetLastError()); - break; - } - - /* ask for truncated data */ - memset(&elp, 0xb0, sizeof(elp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(elp.elpPenStyle), &elp); - ok(!size, "GetObject should fail: size %d, error %d\n", size, GetLastError()); - - /* see how larger buffer sizes are handled */ - memset(&ext_pen, 0xb0, sizeof(ext_pen)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(ext_pen), &ext_pen.elp); - switch (pen[i].style) - { - case PS_NULL: - ok(size == sizeof(LOGPEN), - "GetObject returned %d, error %d\n", size, GetLastError()); - memcpy(&lp, &ext_pen.elp, sizeof(lp)); - ok(lp.lopnStyle == pen[i].ret_style, "expected %u, got %u\n", pen[i].ret_style, lp.lopnStyle); - ok(lp.lopnWidth.x == pen[i].ret_width, "expected %u, got %d\n", pen[i].ret_width, lp.lopnWidth.x); - ok(lp.lopnWidth.y == 0, "expected 0, got %d\n", lp.lopnWidth.y); - ok(lp.lopnColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, lp.lopnColor); - - /* for PS_NULL it also works this way */ - memset(&elp, 0xb0, sizeof(elp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(elp), &elp); - ok(size == sizeof(EXTLOGPEN), - "GetObject returned %d, error %d\n", size, GetLastError()); - ok(ext_pen.elp.elpHatch == 0xb0b0b0b0, "expected 0xb0b0b0b0, got %p\n", (void *)ext_pen.elp.elpHatch); - ok(ext_pen.elp.elpNumEntries == 0xb0b0b0b0, "expected 0xb0b0b0b0, got %x\n", ext_pen.elp.elpNumEntries); - break; - - case PS_USERSTYLE: - ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry) + sizeof(user_style), - "GetObject returned %d, error %d\n", size, GetLastError()); - ok(ext_pen.elp.elpHatch == HS_CROSS, "expected HS_CROSS, got %p\n", (void *)ext_pen.elp.elpHatch); - ok(ext_pen.elp.elpNumEntries == 2, "expected 0, got %x\n", ext_pen.elp.elpNumEntries); - ok(ext_pen.elp.elpStyleEntry[0] == 0xabc, "expected 0xabc, got %x\n", ext_pen.elp.elpStyleEntry[0]); - ok(ext_pen.elp.elpStyleEntry[1] == 0xdef, "expected 0xabc, got %x\n", ext_pen.elp.elpStyleEntry[1]); - break; - - default: - ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry), - "GetObject returned %d, error %d\n", size, GetLastError()); - ok(ext_pen.elp.elpHatch == HS_CROSS, "expected HS_CROSS, got %p\n", (void *)ext_pen.elp.elpHatch); - ok(ext_pen.elp.elpNumEntries == 0, "expected 0, got %x\n", ext_pen.elp.elpNumEntries); - break; - } - -if (pen[i].style == PS_USERSTYLE) -{ - todo_wine - ok(ext_pen.elp.elpPenStyle == pen[i].style, "expected %x, got %x\n", pen[i].style, ext_pen.elp.elpPenStyle); -} -else - ok(ext_pen.elp.elpPenStyle == pen[i].style, "expected %x, got %x\n", pen[i].style, ext_pen.elp.elpPenStyle); - ok(ext_pen.elp.elpWidth == 1, "expected 1, got %x\n", ext_pen.elp.elpWidth); - ok(ext_pen.elp.elpColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, ext_pen.elp.elpColor); - ok(ext_pen.elp.elpBrushStyle == BS_SOLID, "expected BS_SOLID, got %x\n", ext_pen.elp.elpBrushStyle); - - DeleteObject(hpen); - -test_geometric_pens: - /********************** geometric pens **********************/ - lb.lbStyle = BS_SOLID; - lb.lbColor = pen[i].color; - lb.lbHatch = HS_CROSS; /* just in case */ - SetLastError(0xdeadbeef); - hpen = ExtCreatePen(PS_GEOMETRIC | pen[i].style, pen[i].width, &lb, 2, user_style); - if (pen[i].style != PS_USERSTYLE) - { - ok(hpen == 0, "ExtCreatePen should fail\n"); - SetLastError(0xdeadbeef); - hpen = ExtCreatePen(PS_GEOMETRIC | pen[i].style, pen[i].width, &lb, 0, NULL); - } - if (pen[i].style == PS_ALTERNATE) - { - /* This style is applicable only for cosmetic pens */ - ok(hpen == 0, "ExtCreatePen should fail\n"); - continue; - } - ok(hpen != 0, "ExtCreatePen error %d\n", GetLastError()); - - obj_type = GetObjectType(hpen); - /* for some reason XP differentiates PS_NULL here */ - if (pen[i].style == PS_NULL) - ok(obj_type == OBJ_PEN, "wrong object type %u\n", obj_type); - else - ok(obj_type == OBJ_EXTPEN, "wrong object type %u\n", obj_type); - - /* check what's the real size of the object */ - size = GetObject(hpen, 0, NULL); - switch (pen[i].style) - { - case PS_NULL: - ok(size == sizeof(LOGPEN), - "GetObject returned %d, error %d\n", size, GetLastError()); - break; - - case PS_USERSTYLE: - ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry) + sizeof(user_style), - "GetObject returned %d, error %d\n", size, GetLastError()); - break; - - default: - ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry), - "GetObject returned %d, error %d\n", size, GetLastError()); - break; - } - - /* ask for truncated data */ - memset(&lp, 0xb0, sizeof(lp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(lp.lopnStyle), &lp); - ok(!size, "GetObject should fail: size %d, error %d\n", size, GetLastError()); - - memset(&lp, 0xb0, sizeof(lp)); - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(lp), &lp); - /* for some reason XP differentiates PS_NULL here */ - if (pen[i].style == PS_NULL) - { - ok(size == sizeof(LOGPEN), "GetObject returned %d, error %d\n", size, GetLastError()); - ok(lp.lopnStyle == pen[i].ret_style, "expected %u, got %u\n", pen[i].ret_style, lp.lopnStyle); - ok(lp.lopnWidth.x == pen[i].ret_width, "expected %u, got %d\n", pen[i].ret_width, lp.lopnWidth.x); - ok(lp.lopnWidth.y == 0, "expected 0, got %d\n", lp.lopnWidth.y); - ok(lp.lopnColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, lp.lopnColor); - } - else - /* XP doesn't set last error here */ - ok(!size /*&& GetLastError() == ERROR_INVALID_PARAMETER*/, - "GetObject should fail: size %d, error %d\n", size, GetLastError()); - - memset(&ext_pen, 0xb0, sizeof(ext_pen)); - SetLastError(0xdeadbeef); - /* buffer is too small for user styles */ - size = GetObject(hpen, sizeof(elp), &ext_pen.elp); - switch (pen[i].style) - { - case PS_NULL: - ok(size == sizeof(EXTLOGPEN), - "GetObject returned %d, error %d\n", size, GetLastError()); - ok(ext_pen.elp.elpHatch == 0, "expected 0, got %p\n", (void *)ext_pen.elp.elpHatch); - ok(ext_pen.elp.elpNumEntries == 0, "expected 0, got %x\n", ext_pen.elp.elpNumEntries); - - /* for PS_NULL it also works this way */ - SetLastError(0xdeadbeef); - size = GetObject(hpen, sizeof(ext_pen), &lp); - ok(size == sizeof(LOGPEN), - "GetObject returned %d, error %d\n", size, GetLastError()); - ok(lp.lopnStyle == pen[i].ret_style, "expected %u, got %u\n", pen[i].ret_style, lp.lopnStyle); - ok(lp.lopnWidth.x == pen[i].ret_width, "expected %u, got %d\n", pen[i].ret_width, lp.lopnWidth.x); - ok(lp.lopnWidth.y == 0, "expected 0, got %d\n", lp.lopnWidth.y); - ok(lp.lopnColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, lp.lopnColor); - break; - - case PS_USERSTYLE: - ok(!size /*&& GetLastError() == ERROR_INVALID_PARAMETER*/, - "GetObject should fail: size %d, error %d\n", size, GetLastError()); - size = GetObject(hpen, sizeof(ext_pen), &ext_pen.elp); - ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry) + sizeof(user_style), - "GetObject returned %d, error %d\n", size, GetLastError()); - ok(ext_pen.elp.elpHatch == HS_CROSS, "expected HS_CROSS, got %p\n", (void *)ext_pen.elp.elpHatch); - ok(ext_pen.elp.elpNumEntries == 2, "expected 0, got %x\n", ext_pen.elp.elpNumEntries); - ok(ext_pen.elp.elpStyleEntry[0] == 0xabc, "expected 0xabc, got %x\n", ext_pen.elp.elpStyleEntry[0]); - ok(ext_pen.elp.elpStyleEntry[1] == 0xdef, "expected 0xabc, got %x\n", ext_pen.elp.elpStyleEntry[1]); - break; - - default: - ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry), - "GetObject returned %d, error %d\n", size, GetLastError()); - ok(ext_pen.elp.elpHatch == HS_CROSS, "expected HS_CROSS, got %p\n", (void *)ext_pen.elp.elpHatch); - ok(ext_pen.elp.elpNumEntries == 0, "expected 0, got %x\n", ext_pen.elp.elpNumEntries); - break; - } - - /* for some reason XP differentiates PS_NULL here */ - if (pen[i].style == PS_NULL) - ok(ext_pen.elp.elpPenStyle == pen[i].ret_style, "expected %x, got %x\n", pen[i].ret_style, ext_pen.elp.elpPenStyle); - else - { - ok(ext_pen.elp.elpPenStyle == (PS_GEOMETRIC | pen[i].style), "expected %x, got %x\n", PS_GEOMETRIC | pen[i].style, ext_pen.elp.elpPenStyle); - } - - if (pen[i].style == PS_NULL) - ok(ext_pen.elp.elpWidth == 0, "expected 0, got %x\n", ext_pen.elp.elpWidth); - else - ok(ext_pen.elp.elpWidth == pen[i].ret_width, "expected %u, got %x\n", pen[i].ret_width, ext_pen.elp.elpWidth); - ok(ext_pen.elp.elpColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, ext_pen.elp.elpColor); - ok(ext_pen.elp.elpBrushStyle == BS_SOLID, "expected BS_SOLID, got %x\n", ext_pen.elp.elpBrushStyle); - - DeleteObject(hpen); - } -} - -static unsigned int atoi2(const char *s) -{ - unsigned int ret = 0; - while(*s) ret = (ret << 1) | (*s++ == '1'); - return ret; -} - -#define TEST_LINE(x1, x2, z) \ - { int buf = 0; \ - SetBitmapBits(bmp, sizeof(buf), &buf); \ - MoveToEx(hdc, x1, 0, NULL); \ - LineTo(hdc, x2, 0); \ - GetBitmapBits(bmp, sizeof(buf), &buf); \ - expect(atoi2(z), buf); } - -static void test_ps_alternate(void) -{ - HDC hdc; - HBITMAP bmp; - HPEN pen; - LOGBRUSH lb; - - lb.lbStyle = BS_SOLID; - lb.lbColor = RGB(0xff,0xff,0xff); - - SetLastError(0xdeadbeef); - pen = ExtCreatePen(PS_COSMETIC|PS_ALTERNATE, 1, &lb, 0, NULL); - if(pen == NULL && GetLastError() == 0xdeadbeef) { - skip("looks like 9x, skipping PS_ALTERNATE tests\n"); - return; - } - ok(pen != NULL, "gle=%d\n", GetLastError()); - hdc = CreateCompatibleDC(NULL); - ok(hdc != NULL, "gle=%d\n", GetLastError()); - bmp = CreateBitmap(8, 1, 1, 1, NULL); - ok(bmp != NULL, "gle=%d\n", GetLastError()); - ok(SelectObject(hdc, bmp) != NULL, "gle=%d\n", GetLastError()); - ok(SelectObject(hdc, pen) != NULL, "gle=%d\n", GetLastError()); - ok(SetBkMode(hdc, TRANSPARENT), "gle=%d\n", GetLastError()); - - TEST_LINE(0, 1, "10000000") - TEST_LINE(0, 2, "10000000") - TEST_LINE(0, 3, "10100000") - TEST_LINE(0, 4, "10100000") - TEST_LINE(1, 4, "01010000") - TEST_LINE(1, 5, "01010000") - TEST_LINE(4, 8, "00001010") - - DeleteObject(pen); - DeleteObject(bmp); - DeleteDC(hdc); -} - -static void test_ps_userstyle(void) -{ - static DWORD style[17] = {0, 2, 0, 4, 5, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 17}; - static DWORD bad_style[5] = {0, 0, 0, 0, 0}; - static DWORD bad_style2[5] = {4, 7, 8, 3, -1}; - - LOGBRUSH lb; - HPEN pen; - INT size, i; - - struct - { - EXTLOGPEN elp; - DWORD style_data[15]; - } ext_pen; - - lb.lbColor = 0x00ff0000; - lb.lbStyle = BS_SOLID; - lb.lbHatch = 0; - - pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 3, NULL); - ok(pen == 0, "ExtCreatePen should fail\n"); - expect(ERROR_INVALID_PARAMETER, GetLastError()); - DeleteObject(pen); - SetLastError(0xdeadbeef); - - pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 0, style); - ok(pen == 0, "ExtCreatePen should fail\n"); - expect(0xdeadbeef, GetLastError()); - DeleteObject(pen); - SetLastError(0xdeadbeef); - - pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 17, style); - ok(pen == 0, "ExtCreatePen should fail\n"); - expect(ERROR_INVALID_PARAMETER, GetLastError()); - DeleteObject(pen); - SetLastError(0xdeadbeef); - - pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, -1, style); - ok(pen == 0, "ExtCreatePen should fail\n"); - expect(0xdeadbeef, GetLastError()); - DeleteObject(pen); - SetLastError(0xdeadbeef); - - pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 5, bad_style); - ok(pen == 0, "ExtCreatePen should fail\n"); - expect(ERROR_INVALID_PARAMETER, GetLastError()); - DeleteObject(pen); - SetLastError(0xdeadbeef); - - pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 5, bad_style2); - ok(pen == 0, "ExtCreatePen should fail\n"); - expect(ERROR_INVALID_PARAMETER, GetLastError()); - DeleteObject(pen); - SetLastError(0xdeadbeef); - - pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 16, style); - ok(pen != 0, "ExtCreatePen should not fail\n"); - - size = GetObject(pen, sizeof(ext_pen), &ext_pen); - expect(88, size); - - for(i = 0; i < 16; i++) - expect(style[i], ext_pen.elp.elpStyleEntry[i]); - - DeleteObject(pen); -} - -START_TEST(pen) -{ - test_logpen(); - test_ps_alternate(); - test_ps_userstyle(); -} diff --git a/rostests/winetests/gdi32/testlist.c b/rostests/winetests/gdi32/testlist.c deleted file mode 100644 index f5f63f27345..00000000000 --- a/rostests/winetests/gdi32/testlist.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_bitmap(void); -extern void func_brush(void); -extern void func_clipping(void); -extern void func_dc(void); -extern void func_font(void); -extern void func_gdiobj(void); -extern void func_generated(void); -extern void func_icm(void); -extern void func_mapping(void); -extern void func_metafile(void); -extern void func_palette(void); -extern void func_path(void); -extern void func_pen(void); - -const struct test winetest_testlist[] = -{ - { "bitmap", func_bitmap }, - { "brush", func_brush }, - { "clipping", func_clipping }, - { "dc", func_dc }, - { "font", func_font }, - { "gdiobj", func_gdiobj }, - { "generated", func_generated }, - { "icm", func_icm }, - { "mapping", func_mapping }, - { "metafile", func_metafile }, - { "palette", func_palette }, - { "path", func_path }, - { "pen", func_pen }, - { 0, 0 } -}; diff --git a/rostests/winetests/gdiplus/brush.c b/rostests/winetests/gdiplus/brush.c deleted file mode 100644 index 70eac03ef8d..00000000000 --- a/rostests/winetests/gdiplus/brush.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Unit test suite for brushes - * - * 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 - */ - -#include "windows.h" -#include "gdiplus.h" -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) - -static void test_constructor_destructor(void) -{ - GpStatus status; - GpSolidFill *brush = NULL; - - status = GdipCreateSolidFill((ARGB)0xdeadbeef, &brush); - expect(Ok, status); - ok(brush != NULL, "Expected brush to be initialized\n"); - - status = GdipDeleteBrush(NULL); - expect(InvalidParameter, status); - - status = GdipDeleteBrush((GpBrush*) brush); - expect(Ok, status); -} - -static void test_type(void) -{ - GpStatus status; - GpBrushType bt; - GpSolidFill *brush = NULL; - - GdipCreateSolidFill((ARGB)0xdeadbeef, &brush); - - status = GdipGetBrushType((GpBrush*)brush, &bt); - expect(status, Ok); - expect(bt, BrushTypeSolidColor); - - GdipDeleteBrush((GpBrush*) brush); -} - -START_TEST(brush) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_constructor_destructor(); - test_type(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/font.c b/rostests/winetests/gdiplus/font.c deleted file mode 100644 index 59a8d532177..00000000000 --- a/rostests/winetests/gdiplus/font.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Unit test suite for fonts - * - * 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 - */ - -#include "windows.h" -#include "gdiplus.h" -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) - -static const WCHAR arial[] = {'A','r','i','a','l','\0'}; -static const WCHAR nonexistant[] = {'T','h','i','s','F','o','n','t','s','h','o','u','l','d','N','o','t','E','x','i','s','t','\0'}; -static const WCHAR MSSansSerif[] = {'M','S',' ','S','a','n','s',' ','S','e','r','i','f','\0'}; -static const WCHAR MicrosoftSansSerif[] = {'M','i','c','r','o','s','o','f','t',' ','S','a','n','s',' ','S','e','r','i','f','\0'}; -static const WCHAR TimesNewRoman[] = {'T','i','m','e','s',' ','N','e','w',' ','R','o','m','a','n','\0'}; -static const WCHAR CourierNew[] = {'C','o','u','r','i','e','r',' ','N','e','w','\0'}; - -static const char *debugstr_w(LPCWSTR str) -{ - static char buf[1024]; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - - -static void test_createfont(void) -{ - GpFontFamily* fontfamily = NULL; - GpFont* font = NULL; - GpStatus stat; - Unit unit; - UINT i; - REAL size; - - stat = GdipCreateFontFamilyFromName(nonexistant, NULL, &fontfamily); - expect (FontFamilyNotFound, stat); - stat = GdipDeleteFont(font); - expect (InvalidParameter, stat); - stat = GdipCreateFontFamilyFromName(arial, NULL, &fontfamily); - expect (Ok, stat); - stat = GdipCreateFont(fontfamily, 12, FontStyleRegular, UnitPoint, &font); - expect (Ok, stat); - stat = GdipGetFontUnit (font, &unit); - expect (Ok, stat); - expect (UnitPoint, unit); - - /* Test to see if returned size is based on unit (its not) */ - GdipGetFontSize(font, &size); - ok (size == 12, "Expected 12, got %f\n", size); - GdipDeleteFont(font); - - /* Make sure everything is converted correctly for all Units */ - for (i = UnitWorld; i <=UnitMillimeter; i++) - { - if (i == UnitDisplay) continue; /* Crashes WindowsXP, wtf? */ - GdipCreateFont(fontfamily, 24, FontStyleRegular, i, &font); - GdipGetFontSize (font, &size); - ok (size == 24, "Expected 24, got %f (with unit: %d)\n", size, i); - GdipGetFontUnit (font, &unit); - expect (i, unit); - GdipDeleteFont(font); - } -} - -static void test_logfont(void) -{ - LOGFONTW lfw, lfw2; - GpFont *font; - GpStatus stat; - GpGraphics *graphics; - HDC hdc = GetDC(0); - - GdipCreateFromHDC(hdc, &graphics); - memset(&lfw, 0, sizeof(LOGFONTW)); - memset(&lfw2, 0xff, sizeof(LOGFONTW)); - memcpy(&lfw.lfFaceName, arial, 6 * sizeof(WCHAR)); - - stat = GdipCreateFontFromLogfontW(hdc, &lfw, &font); - expect(Ok, stat); - stat = GdipGetLogFontW(font, graphics, &lfw2); - expect(Ok, stat); - - ok(lfw2.lfHeight < 0, "Expected negative height\n"); - expect(0, lfw2.lfWidth); - expect(0, lfw2.lfEscapement); - expect(0, lfw2.lfOrientation); - ok((lfw2.lfWeight >= 100) && (lfw2.lfWeight <= 900), "Expected weight to be set\n"); - expect(0, lfw2.lfItalic); - expect(0, lfw2.lfUnderline); - expect(0, lfw2.lfStrikeOut); - expect(0, lfw2.lfCharSet); - expect(0, lfw2.lfOutPrecision); - expect(0, lfw2.lfClipPrecision); - expect(0, lfw2.lfQuality); - expect(0, lfw2.lfPitchAndFamily); - - GdipDeleteFont(font); - - memset(&lfw, 0, sizeof(LOGFONTW)); - lfw.lfHeight = 25; - lfw.lfWidth = 25; - lfw.lfEscapement = lfw.lfOrientation = 50; - lfw.lfItalic = lfw.lfUnderline = lfw.lfStrikeOut = TRUE; - - memset(&lfw2, 0xff, sizeof(LOGFONTW)); - memcpy(&lfw.lfFaceName, arial, 6 * sizeof(WCHAR)); - - stat = GdipCreateFontFromLogfontW(hdc, &lfw, &font); - expect(Ok, stat); - stat = GdipGetLogFontW(font, graphics, &lfw2); - expect(Ok, stat); - - ok(lfw2.lfHeight < 0, "Expected negative height\n"); - expect(0, lfw2.lfWidth); - expect(0, lfw2.lfEscapement); - expect(0, lfw2.lfOrientation); - ok((lfw2.lfWeight >= 100) && (lfw2.lfWeight <= 900), "Expected weight to be set\n"); - expect(TRUE, lfw2.lfItalic); - expect(TRUE, lfw2.lfUnderline); - expect(TRUE, lfw2.lfStrikeOut); - expect(0, lfw2.lfCharSet); - expect(0, lfw2.lfOutPrecision); - expect(0, lfw2.lfClipPrecision); - expect(0, lfw2.lfQuality); - expect(0, lfw2.lfPitchAndFamily); - - GdipDeleteFont(font); - - GdipDeleteGraphics(graphics); - ReleaseDC(0, hdc); -} - -static void test_fontfamily (void) -{ - GpFontFamily** family = NULL; - WCHAR itsName[LF_FACESIZE]; - GpStatus stat; - - /* FontFamily can not be NULL */ - stat = GdipCreateFontFamilyFromName (arial , NULL, family); - expect (InvalidParameter, stat); - - family = GdipAlloc (sizeof (GpFontFamily*)); - - /* FontFamily must be able to actually find the family. - * If it can't, any subsequent calls should fail - * - * We currently fail (meaning we don't) because we don't actually - * test to see if we can successfully get a family - */ - stat = GdipCreateFontFamilyFromName (nonexistant, NULL, family); - expect (FontFamilyNotFound, stat); - stat = GdipGetFamilyName (*family,itsName, LANG_NEUTRAL); - expect (InvalidParameter, stat); - ok ((lstrcmpiW(itsName,nonexistant) != 0), - "Expected a non-zero value for nonexistant font!\n"); - stat = GdipDeleteFontFamily(*family); - expect (InvalidParameter, stat); - - stat = GdipCreateFontFamilyFromName (arial, NULL, family); - expect (Ok, stat); - - stat = GdipGetFamilyName (*family, itsName, LANG_NEUTRAL); - expect (Ok, stat); - expect (0, lstrcmpiW(itsName,arial)); - - if (0) - { - /* Crashes on Windows XP SP2, Vista, and so Wine as well */ - stat = GdipGetFamilyName (*family, NULL, LANG_NEUTRAL); - expect (Ok, stat); - } - - stat = GdipDeleteFontFamily(*family); - expect (Ok, stat); - - GdipFree (family); -} - - -static void test_getgenerics (void) -{ - GpStatus stat; - GpFontFamily** family; - WCHAR familyName[LF_FACESIZE]; - ZeroMemory(familyName, sizeof(familyName)/sizeof(WCHAR)); - - family = GdipAlloc (sizeof (GpFontFamily*)); - - stat = GdipGetGenericFontFamilySansSerif (family); - expect (Ok, stat); - stat = GdipGetFamilyName (*family, familyName, LANG_NEUTRAL); - expect (Ok, stat); - ok ((lstrcmpiW(familyName, MicrosoftSansSerif) == 0) || - (lstrcmpiW(familyName,MSSansSerif) == 0), - "Expected Microsoft Sans Serif or MS Sans Serif, got %s\n", - debugstr_w(familyName)); - stat = GdipDeleteFontFamily (*family); - expect (Ok, stat); - - stat = GdipGetGenericFontFamilySerif (family); - expect (Ok, stat); - stat = GdipGetFamilyName (*family, familyName, LANG_NEUTRAL); - expect (Ok, stat); - ok (lstrcmpiW(familyName, TimesNewRoman) == 0, - "Expected Times New Roman, got %s\n", debugstr_w(familyName)); - stat = GdipDeleteFontFamily (*family); - expect (Ok, stat); - - stat = GdipGetGenericFontFamilyMonospace (family); - expect (Ok, stat); - stat = GdipGetFamilyName (*family, familyName, LANG_NEUTRAL); - expect (Ok, stat); - ok (lstrcmpiW(familyName, CourierNew) == 0, - "Expected Courier New, got %s\n", debugstr_w(familyName)); - stat = GdipDeleteFontFamily (*family); - expect (Ok, stat); - - GdipFree (family); -} - -START_TEST(font) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_createfont(); - test_logfont(); - test_fontfamily(); - test_getgenerics(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/gdiplus.rbuild b/rostests/winetests/gdiplus/gdiplus.rbuild deleted file mode 100644 index 2067c9fd96d..00000000000 --- a/rostests/winetests/gdiplus/gdiplus.rbuild +++ /dev/null @@ -1,24 +0,0 @@ - - - - - . - brush.c - font.c - graphics.c - graphicspath.c - image.c - matrix.c - pathiterator.c - pen.c - region.c - stringformat.c - testlist.c - wine - gdiplus - user32 - gdi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/gdiplus/graphics.c b/rostests/winetests/gdiplus/graphics.c deleted file mode 100644 index 168eae35523..00000000000 --- a/rostests/winetests/gdiplus/graphics.c +++ /dev/null @@ -1,476 +0,0 @@ -/* - * Unit test suite for graphics objects - * - * 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 - */ - -#include "windows.h" -#include "gdiplus.h" -#include "wingdi.h" -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) -#define TABLE_LEN (23) - -static void test_constructor_destructor(void) -{ - GpStatus stat; - GpGraphics *graphics = NULL; - HDC hdc = GetDC(0); - - stat = GdipCreateFromHDC(NULL, &graphics); - expect(OutOfMemory, stat); - stat = GdipDeleteGraphics(graphics); - expect(InvalidParameter, stat); - - stat = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, stat); - stat = GdipDeleteGraphics(graphics); - expect(Ok, stat); - - stat = GdipCreateFromHWND(NULL, &graphics); - expect(Ok, stat); - stat = GdipDeleteGraphics(graphics); - expect(Ok, stat); - - stat = GdipCreateFromHWNDICM(NULL, &graphics); - expect(Ok, stat); - stat = GdipDeleteGraphics(graphics); - expect(Ok, stat); - - stat = GdipDeleteGraphics(NULL); - expect(InvalidParameter, stat); - ReleaseDC(0, hdc); -} - -typedef struct node{ - GraphicsState data; - struct node * next; -} node; - -/* Linked list prepend function. */ -static void log_state(GraphicsState data, node ** log) -{ - node * new_entry = HeapAlloc(GetProcessHeap(), 0, sizeof(node)); - - new_entry->data = data; - new_entry->next = *log; - *log = new_entry; -} - -/* Checks if there are duplicates in the list, and frees it. */ -static void check_no_duplicates(node * log) -{ - INT dups = 0; - node * temp = NULL; - node * temp2 = NULL; - node * orig = log; - - if(!log) - goto end; - - do{ - temp = log; - while((temp = temp->next)){ - if(log->data == temp->data){ - dups++; - break; - } - if(dups > 0) - break; - } - }while((log = log->next)); - - temp = orig; - do{ - temp2 = temp->next; - HeapFree(GetProcessHeap(), 0, temp); - temp = temp2; - }while(temp); - -end: - expect(0, dups); -} - -static void test_save_restore(void) -{ - GpStatus stat; - GraphicsState state_a, state_b, state_c; - InterpolationMode mode; - GpGraphics *graphics1, *graphics2; - node * state_log = NULL; - HDC hdc = GetDC(0); - state_a = state_b = state_c = 0xdeadbeef; - - /* Invalid saving. */ - GdipCreateFromHDC(hdc, &graphics1); - stat = GdipSaveGraphics(graphics1, NULL); - expect(InvalidParameter, stat); - stat = GdipSaveGraphics(NULL, &state_a); - expect(InvalidParameter, stat); - GdipDeleteGraphics(graphics1); - - log_state(state_a, &state_log); - - /* Basic save/restore. */ - GdipCreateFromHDC(hdc, &graphics1); - GdipSetInterpolationMode(graphics1, InterpolationModeBilinear); - stat = GdipSaveGraphics(graphics1, &state_a); - todo_wine - expect(Ok, stat); - GdipSetInterpolationMode(graphics1, InterpolationModeBicubic); - stat = GdipRestoreGraphics(graphics1, state_a); - todo_wine - expect(Ok, stat); - GdipGetInterpolationMode(graphics1, &mode); - todo_wine - expect(InterpolationModeBilinear, mode); - GdipDeleteGraphics(graphics1); - - log_state(state_a, &state_log); - - /* Restoring garbage doesn't affect saves. */ - GdipCreateFromHDC(hdc, &graphics1); - GdipSetInterpolationMode(graphics1, InterpolationModeBilinear); - GdipSaveGraphics(graphics1, &state_a); - GdipSetInterpolationMode(graphics1, InterpolationModeBicubic); - GdipSaveGraphics(graphics1, &state_b); - GdipSetInterpolationMode(graphics1, InterpolationModeNearestNeighbor); - stat = GdipRestoreGraphics(graphics1, 0xdeadbeef); - todo_wine - expect(Ok, stat); - GdipRestoreGraphics(graphics1, state_b); - GdipGetInterpolationMode(graphics1, &mode); - todo_wine - expect(InterpolationModeBicubic, mode); - GdipRestoreGraphics(graphics1, state_a); - GdipGetInterpolationMode(graphics1, &mode); - todo_wine - expect(InterpolationModeBilinear, mode); - GdipDeleteGraphics(graphics1); - - log_state(state_a, &state_log); - log_state(state_b, &state_log); - - /* Restoring older state invalidates newer saves (but not older saves). */ - GdipCreateFromHDC(hdc, &graphics1); - GdipSetInterpolationMode(graphics1, InterpolationModeBilinear); - GdipSaveGraphics(graphics1, &state_a); - GdipSetInterpolationMode(graphics1, InterpolationModeBicubic); - GdipSaveGraphics(graphics1, &state_b); - GdipSetInterpolationMode(graphics1, InterpolationModeNearestNeighbor); - GdipSaveGraphics(graphics1, &state_c); - GdipSetInterpolationMode(graphics1, InterpolationModeHighQualityBilinear); - GdipRestoreGraphics(graphics1, state_b); - GdipGetInterpolationMode(graphics1, &mode); - todo_wine - expect(InterpolationModeBicubic, mode); - GdipRestoreGraphics(graphics1, state_c); - GdipGetInterpolationMode(graphics1, &mode); - todo_wine - expect(InterpolationModeBicubic, mode); - GdipRestoreGraphics(graphics1, state_a); - GdipGetInterpolationMode(graphics1, &mode); - todo_wine - expect(InterpolationModeBilinear, mode); - GdipDeleteGraphics(graphics1); - - log_state(state_a, &state_log); - log_state(state_b, &state_log); - log_state(state_c, &state_log); - - /* Restoring older save from one graphics object does not invalidate - * newer save from other graphics object. */ - GdipCreateFromHDC(hdc, &graphics1); - GdipCreateFromHDC(hdc, &graphics2); - GdipSetInterpolationMode(graphics1, InterpolationModeBilinear); - GdipSaveGraphics(graphics1, &state_a); - GdipSetInterpolationMode(graphics2, InterpolationModeBicubic); - GdipSaveGraphics(graphics2, &state_b); - GdipSetInterpolationMode(graphics1, InterpolationModeNearestNeighbor); - GdipSetInterpolationMode(graphics2, InterpolationModeNearestNeighbor); - GdipRestoreGraphics(graphics1, state_a); - GdipGetInterpolationMode(graphics1, &mode); - todo_wine - expect(InterpolationModeBilinear, mode); - GdipRestoreGraphics(graphics2, state_b); - GdipGetInterpolationMode(graphics2, &mode); - todo_wine - expect(InterpolationModeBicubic, mode); - GdipDeleteGraphics(graphics1); - GdipDeleteGraphics(graphics2); - - /* You can't restore a state to a graphics object that didn't save it. */ - GdipCreateFromHDC(hdc, &graphics1); - GdipCreateFromHDC(hdc, &graphics2); - GdipSetInterpolationMode(graphics1, InterpolationModeBilinear); - GdipSaveGraphics(graphics1, &state_a); - GdipSetInterpolationMode(graphics1, InterpolationModeNearestNeighbor); - GdipSetInterpolationMode(graphics2, InterpolationModeNearestNeighbor); - GdipRestoreGraphics(graphics2, state_a); - GdipGetInterpolationMode(graphics2, &mode); - expect(InterpolationModeNearestNeighbor, mode); - GdipDeleteGraphics(graphics1); - GdipDeleteGraphics(graphics2); - - log_state(state_a, &state_log); - - /* The same state value should never be returned twice. */ - todo_wine - check_no_duplicates(state_log); - - ReleaseDC(0, hdc); -} - -static void test_GdipDrawArc(void) -{ - GpStatus status; - GpGraphics *graphics = NULL; - GpPen *pen = NULL; - HDC hdc = GetDC(0); - - /* make a graphics object and pen object */ - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(hdc != NULL, "Expected HDC to be initialized\n"); - - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(graphics != NULL, "Expected graphics to be initialized\n"); - - status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); - expect(Ok, status); - ok(pen != NULL, "Expected pen to be initialized\n"); - - /* InvalidParameter cases: null graphics, null pen, non-positive width, non-positive height */ - status = GdipDrawArc(NULL, NULL, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); - expect(InvalidParameter, status); - - status = GdipDrawArc(graphics, NULL, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0); - expect(InvalidParameter, status); - - status = GdipDrawArc(NULL, pen, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0); - expect(InvalidParameter, status); - - status = GdipDrawArc(graphics, pen, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0); - expect(InvalidParameter, status); - - status = GdipDrawArc(graphics, pen, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0); - expect(InvalidParameter, status); - - /* successful case */ - status = GdipDrawArc(graphics, pen, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0); - expect(Ok, status); - - GdipDeletePen(pen); - ReleaseDC(0, hdc); -} - -static void test_GdipDrawArcI(void) -{ - GpStatus status; - GpGraphics *graphics = NULL; - GpPen *pen = NULL; - HDC hdc = GetDC(0); - - /* make a graphics object and pen object */ - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(hdc != NULL, "Expected HDC to be initialized\n"); - - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(graphics != NULL, "Expected graphics to be initialized\n"); - - status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); - expect(Ok, status); - ok(pen != NULL, "Expected pen to be initialized\n"); - - /* InvalidParameter cases: null graphics, null pen, non-positive width, non-positive height */ - status = GdipDrawArcI(NULL, NULL, 0, 0, 0, 0, 0, 0); - expect(InvalidParameter, status); - - status = GdipDrawArcI(graphics, NULL, 0, 0, 1, 1, 0, 0); - expect(InvalidParameter, status); - - status = GdipDrawArcI(NULL, pen, 0, 0, 1, 1, 0, 0); - expect(InvalidParameter, status); - - status = GdipDrawArcI(graphics, pen, 0, 0, 1, 0, 0, 0); - expect(InvalidParameter, status); - - status = GdipDrawArcI(graphics, pen, 0, 0, 0, 1, 0, 0); - expect(InvalidParameter, status); - - /* successful case */ - status = GdipDrawArcI(graphics, pen, 0, 0, 1, 1, 0, 0); - expect(Ok, status); - - GdipDeletePen(pen); - ReleaseDC(0, hdc); -} - -static void test_GdipDrawBezierI(void) -{ - GpStatus status; - GpGraphics *graphics = NULL; - GpPen *pen = NULL; - HDC hdc = GetDC(0); - - /* make a graphics object and pen object */ - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(hdc != NULL, "Expected HDC to be initialized\n"); - - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(graphics != NULL, "Expected graphics to be initialized\n"); - - status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); - expect(Ok, status); - ok(pen != NULL, "Expected pen to be initialized\n"); - - /* InvalidParameter cases: null graphics, null pen */ - status = GdipDrawBezierI(NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0); - expect(InvalidParameter, status); - - status = GdipDrawBezierI(graphics, NULL, 0, 0, 0, 0, 0, 0, 0, 0); - expect(InvalidParameter, status); - - status = GdipDrawBezierI(NULL, pen, 0, 0, 0, 0, 0, 0, 0, 0); - expect(InvalidParameter, status); - - /* successful case */ - status = GdipDrawBezierI(graphics, pen, 0, 0, 0, 0, 0, 0, 0, 0); - expect(Ok, status); - - GdipDeletePen(pen); - ReleaseDC(0, hdc); -} - -static void test_GdipDrawLineI(void) -{ - GpStatus status; - GpGraphics *graphics = NULL; - GpPen *pen = NULL; - HDC hdc = GetDC(0); - - /* make a graphics object and pen object */ - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(hdc != NULL, "Expected HDC to be initialized\n"); - - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(graphics != NULL, "Expected graphics to be initialized\n"); - - status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); - expect(Ok, status); - ok(pen != NULL, "Expected pen to be initialized\n"); - - /* InvalidParameter cases: null graphics, null pen */ - status = GdipDrawLineI(NULL, NULL, 0, 0, 0, 0); - expect(InvalidParameter, status); - - status = GdipDrawLineI(graphics, NULL, 0, 0, 0, 0); - expect(InvalidParameter, status); - - status = GdipDrawLineI(NULL, pen, 0, 0, 0, 0); - expect(InvalidParameter, status); - - /* successful case */ - status = GdipDrawLineI(graphics, pen, 0, 0, 0, 0); - expect(Ok, status); - - GdipDeletePen(pen); - ReleaseDC(0, hdc); -} - -static void test_GdipDrawLinesI(void) -{ - GpStatus status; - GpGraphics *graphics = NULL; - GpPen *pen = NULL; - GpPoint *ptf = NULL; - HDC hdc = GetDC(0); - - /* make a graphics object and pen object */ - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(hdc != NULL, "Expected HDC to be initialized\n"); - - status = GdipCreateFromHDC(hdc, &graphics); - expect(Ok, status); - ok(graphics != NULL, "Expected graphics to be initialized\n"); - - status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); - expect(Ok, status); - ok(pen != NULL, "Expected pen to be initialized\n"); - - /* make some arbitrary valid points*/ - ptf = GdipAlloc(2 * sizeof(GpPointF)); - - ptf[0].X = 1; - ptf[0].Y = 1; - - ptf[1].X = 2; - ptf[1].Y = 2; - - /* InvalidParameter cases: null graphics, null pen, null points, count < 2*/ - status = GdipDrawLinesI(NULL, NULL, NULL, 0); - expect(InvalidParameter, status); - - status = GdipDrawLinesI(graphics, pen, ptf, 0); - expect(InvalidParameter, status); - - status = GdipDrawLinesI(graphics, NULL, ptf, 2); - expect(InvalidParameter, status); - - status = GdipDrawLinesI(NULL, pen, ptf, 2); - expect(InvalidParameter, status); - - /* successful case */ - status = GdipDrawLinesI(graphics, pen, ptf, 2); - expect(Ok, status); - - GdipFree(ptf); - GdipDeletePen(pen); - ReleaseDC(0, hdc); -} - -START_TEST(graphics) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_constructor_destructor(); - test_save_restore(); - test_GdipDrawBezierI(); - test_GdipDrawArc(); - test_GdipDrawArcI(); - test_GdipDrawLineI(); - test_GdipDrawLinesI(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/graphicspath.c b/rostests/winetests/gdiplus/graphicspath.c deleted file mode 100644 index 9f9af9cd50c..00000000000 --- a/rostests/winetests/gdiplus/graphicspath.c +++ /dev/null @@ -1,724 +0,0 @@ -/* - * Unit test suite for paths - * - * 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 - */ - -#include "windows.h" -#include "gdiplus.h" -#include "wine/test.h" -#include - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) -#define expectf(expected, got) ok(fabs(expected - got) < 2.0, "Expected %.2f, got %.2f\n", expected, got) -#define POINT_TYPE_MAX_LEN (75) - -static void stringify_point_type(PathPointType type, char * name) -{ - *name = '\0'; - - switch(type & PathPointTypePathTypeMask){ - case PathPointTypeStart: - strcat(name, "PathPointTypeStart"); - break; - case PathPointTypeLine: - strcat(name, "PathPointTypeLine"); - break; - case PathPointTypeBezier: - strcat(name, "PathPointTypeBezier"); - break; - default: - strcat(name, "Unknown type"); - return; - } - - type &= ~PathPointTypePathTypeMask; - if(type & ~((PathPointTypePathMarker | PathPointTypeCloseSubpath))){ - *name = '\0'; - strcat(name, "Unknown type"); - return; - } - - if(type & PathPointTypePathMarker) - strcat(name, " | PathPointTypePathMarker"); - if(type & PathPointTypeCloseSubpath) - strcat(name, " | PathPointTypeCloseSubpath"); -} - -/* this helper structure and function modeled after gdi path.c test */ -typedef struct -{ - REAL X, Y; - BYTE type; - - /* How many extra entries before this one only on wine - * but not on native? */ - int wine_only_entries_preceding; - - /* 0 - This entry matches on wine. - * 1 - This entry corresponds to a single entry on wine that does not match the native entry. - * 2 - This entry is currently skipped on wine but present on native. */ - int todo; -} path_test_t; - -static void ok_path(GpPath* path, const path_test_t *expected, INT expected_size, BOOL todo_size) -{ - BYTE * types; - INT size, idx = 0, eidx = 0, numskip; - GpPointF * points; - char ename[POINT_TYPE_MAX_LEN], name[POINT_TYPE_MAX_LEN]; - - if(GdipGetPointCount(path, &size) != Ok){ - skip("Cannot perform path comparisons due to failure to retrieve path.\n"); - return; - } - - if(todo_size) todo_wine - ok(size == expected_size, "Path size %d does not match expected size %d\n", - size, expected_size); - else - ok(size == expected_size, "Path size %d does not match expected size %d\n", - size, expected_size); - - points = HeapAlloc(GetProcessHeap(), 0, size * sizeof(GpPointF)); - types = HeapAlloc(GetProcessHeap(), 0, size); - - if(GdipGetPathPoints(path, points, size) != Ok || GdipGetPathTypes(path, types, size) != Ok){ - skip("Cannot perform path comparisons due to failure to retrieve path.\n"); - goto end; - } - - numskip = expected_size ? expected[eidx].wine_only_entries_preceding : 0; - while (idx < size && eidx < expected_size){ - /* We allow a few pixels fudge in matching X and Y coordinates to account for imprecision in - * floating point to integer conversion */ - BOOL match = (types[idx] == expected[eidx].type) && - fabs(points[idx].X - expected[eidx].X) <= 2.0 && - fabs(points[idx].Y - expected[eidx].Y) <= 2.0; - - stringify_point_type(expected[eidx].type, ename); - stringify_point_type(types[idx], name); - - if (expected[eidx].todo || numskip) todo_wine - ok(match, "Expected #%d: %s (%.1f,%.1f) but got %s (%.1f,%.1f)\n", eidx, - ename, expected[eidx].X, expected[eidx].Y, - name, points[idx].X, points[idx].Y); - else - ok(match, "Expected #%d: %s (%.1f,%.1f) but got %s (%.1f,%.1f)\n", eidx, - ename, expected[eidx].X, expected[eidx].Y, - name, points[idx].X, points[idx].Y); - - if (match || expected[eidx].todo != 2) - idx++; - if (match || !numskip--) - numskip = expected[++eidx].wine_only_entries_preceding; - } - -end: - HeapFree(GetProcessHeap(), 0, types); - HeapFree(GetProcessHeap(), 0, points); -} - -static void test_constructor_destructor(void) -{ - GpStatus status; - GpPath* path = NULL; - - status = GdipCreatePath(FillModeAlternate, &path); - expect(Ok, status); - ok(path != NULL, "Expected path to be initialized\n"); - - status = GdipDeletePath(NULL); - expect(InvalidParameter, status); - - status = GdipDeletePath(path); - expect(Ok, status); -} - -static void test_getpathdata(void) -{ - GpPath *path; - GpPathData data; - GpStatus status; - INT count; - - GdipCreatePath(FillModeAlternate, &path); - status = GdipAddPathLine(path, 5.0, 5.0, 100.0, 50.0); - expect(Ok, status); - - /* Prepare storage. Made by wrapper class. */ - status = GdipGetPointCount(path, &count); - expect(Ok, status); - - data.Count = 2; - data.Types = GdipAlloc(sizeof(BYTE) * count); - data.Points = GdipAlloc(sizeof(PointF) * count); - - status = GdipGetPathData(path, &data); - expect(Ok, status); - expect((data.Points[0].X == 5.0) && (data.Points[0].Y == 5.0) && - (data.Points[1].X == 100.0) && (data.Points[1].Y == 50.0), TRUE); - expect((data.Types[0] == PathPointTypeStart) && (data.Types[1] == PathPointTypeLine), TRUE); - - GdipFree(data.Points); - GdipFree(data.Types); - GdipDeletePath(path); -} - -static path_test_t line2_path[] = { - {0.0, 50.0, PathPointTypeStart, 0, 0}, /*0*/ - {5.0, 45.0, PathPointTypeLine, 0, 0}, /*1*/ - {0.0, 40.0, PathPointTypeLine, 0, 0}, /*2*/ - {15.0, 35.0, PathPointTypeLine, 0, 0}, /*3*/ - {0.0, 30.0, PathPointTypeLine, 0, 0}, /*4*/ - {25.0, 25.0, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 0}, /*5*/ - {0.0, 20.0, PathPointTypeStart, 0, 0}, /*6*/ - {35.0, 15.0, PathPointTypeLine, 0, 0}, /*7*/ - {0.0, 10.0, PathPointTypeLine, 0, 0} /*8*/ - }; - -static void test_line2(void) -{ - GpStatus status; - GpPath* path; - int i; - GpPointF line2_points[9]; - - for(i = 0; i < 9; i ++){ - line2_points[i].X = i * 5.0 * (REAL)(i % 2); - line2_points[i].Y = 50.0 - i * 5.0; - } - - GdipCreatePath(FillModeAlternate, &path); - status = GdipAddPathLine2(path, line2_points, 3); - expect(Ok, status); - status = GdipAddPathLine2(path, &(line2_points[3]), 3); - expect(Ok, status); - status = GdipClosePathFigure(path); - expect(Ok, status); - status = GdipAddPathLine2(path, &(line2_points[6]), 3); - expect(Ok, status); - - ok_path(path, line2_path, sizeof(line2_path)/sizeof(path_test_t), FALSE); -} - -static path_test_t arc_path[] = { - {600.0, 450.0, PathPointTypeStart, 0, 0}, /*0*/ - {600.0, 643.3, PathPointTypeBezier, 0, 0}, /*1*/ - {488.1, 800.0, PathPointTypeBezier, 0, 0}, /*2*/ - {350.0, 800.0, PathPointTypeBezier, 0, 0}, /*3*/ - {600.0, 450.0, PathPointTypeLine, 0, 0}, /*4*/ - {600.0, 643.3, PathPointTypeBezier, 0, 0}, /*5*/ - {488.1, 800.0, PathPointTypeBezier, 0, 0}, /*6*/ - {350.0, 800.0, PathPointTypeBezier, 0, 0}, /*7*/ - {329.8, 800.0, PathPointTypeBezier, 0, 0}, /*8*/ - {309.7, 796.6, PathPointTypeBezier, 0, 0}, /*9*/ - {290.1, 789.8, PathPointTypeBezier, 0, 0}, /*10*/ - {409.9, 110.2, PathPointTypeLine, 0, 0}, /*11*/ - {544.0, 156.5, PathPointTypeBezier, 0, 0}, /*12*/ - {625.8, 346.2, PathPointTypeBezier, 0, 0}, /*13*/ - {592.7, 533.9, PathPointTypeBezier, 0, 0}, /*14*/ - {592.5, 535.3, PathPointTypeBezier, 0, 0}, /*15*/ - {592.2, 536.7, PathPointTypeBezier, 0, 0}, /*16*/ - {592.0, 538.1, PathPointTypeBezier, 0, 0}, /*17*/ - {409.9, 789.8, PathPointTypeLine, 0, 0}, /*18*/ - {544.0, 743.5, PathPointTypeBezier, 0, 0}, /*19*/ - {625.8, 553.8, PathPointTypeBezier, 0, 0}, /*20*/ - {592.7, 366.1, PathPointTypeBezier, 0, 0}, /*21*/ - {592.5, 364.7, PathPointTypeBezier, 0, 0}, /*22*/ - {592.2, 363.3, PathPointTypeBezier, 0, 0}, /*23*/ - {592.0, 361.9, PathPointTypeBezier, 0, 0}, /*24*/ - {540.4, 676.9, PathPointTypeLine, 0, 0}, /*25*/ - {629.9, 529.7, PathPointTypeBezier, 0, 0}, /*26*/ - {617.2, 308.8, PathPointTypeBezier, 0, 0}, /*27*/ - {512.1, 183.5, PathPointTypeBezier, 0, 0}, /*28*/ - {406.9, 58.2, PathPointTypeBezier, 0, 0}, /*29*/ - {249.1, 75.9, PathPointTypeBezier, 0, 0}, /*30*/ - {159.6, 223.1, PathPointTypeBezier, 0, 0}, /*31*/ - {70.1, 370.3, PathPointTypeBezier, 0, 0}, /*32*/ - {82.8, 591.2, PathPointTypeBezier, 0, 0}, /*33*/ - {187.9, 716.5, PathPointTypeBezier, 0, 0}, /*34*/ - {293.1, 841.8, PathPointTypeBezier, 0, 0}, /*35*/ - {450.9, 824.1, PathPointTypeBezier, 0, 0}, /*36*/ - {540.4, 676.9, PathPointTypeBezier | PathPointTypeCloseSubpath, 0, 1} /*37*/ - }; - -static void test_arc(void) -{ - GpStatus status; - GpPath* path; - - GdipCreatePath(FillModeAlternate, &path); - /* Exactly 90 degrees */ - status = GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 0.0, 90.0); - expect(Ok, status); - /* Over 90 degrees */ - status = GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 0.0, 100.0); - expect(Ok, status); - /* Negative start angle */ - status = GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, -80.0, 100.0); - expect(Ok, status); - /* Negative sweep angle */ - status = GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 80.0, -100.0); - expect(Ok, status); - /* More than a full revolution */ - status = GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 50.0, -400.0); - expect(Ok, status); - /* 0 sweep angle */ - status = GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 50.0, 0.0); - expect(Ok, status); - - ok_path(path, arc_path, sizeof(arc_path)/sizeof(path_test_t), FALSE); -} - -static void test_worldbounds(void) -{ - GpStatus status; - GpPath *path; - GpPen *pen; - GpMatrix *matrix; - GpRectF bounds; - GpPointF line2_points[10]; - int i; - - for(i = 0; i < 10; i ++){ - line2_points[i].X = 200.0 + i * 50.0 * (i % 2); - line2_points[i].Y = 200.0 + i * 50.0 * !(i % 2); - } - GdipCreatePen1((ARGB)0xdeadbeef, 20.0, UnitWorld, &pen); - GdipSetPenEndCap(pen, LineCapSquareAnchor); - GdipCreateMatrix2(1.5, 0.0, 1.0, 1.2, 10.4, 10.2, &matrix); - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 0.0, 100.0); - GdipAddPathLine2(path, &(line2_points[0]), 10); - status = GdipGetPathWorldBounds(path, &bounds, NULL, NULL); - expect(Ok, status); - GdipDeletePath(path); - - expectf(200.0, bounds.X); - expectf(200.0, bounds.Y); - expectf(450.0, bounds.Width); - expectf(600.0, bounds.Height); - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 0.0, 100.0); - GdipAddPathLine2(path, &(line2_points[0]), 10); - status = GdipGetPathWorldBounds(path, &bounds, matrix, NULL); - expect(Ok, status); - GdipDeletePath(path); - - expectf(510.4, bounds.X); - expectf(250.2, bounds.Y); - expectf(1275.0, bounds.Width); - expectf(720.0, bounds.Height); - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 0.0, 100.0); - GdipAddPathLine2(path, &(line2_points[0]), 10); - status = GdipGetPathWorldBounds(path, &bounds, NULL, pen); - expect(Ok, status); - GdipDeletePath(path); - - expectf(100.0, bounds.X); - expectf(100.0, bounds.Y); - expectf(650.0, bounds.Width); - expectf(800.0, bounds.Height); - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathLine2(path, &(line2_points[0]), 2); - status = GdipGetPathWorldBounds(path, &bounds, NULL, pen); - expect(Ok, status); - GdipDeletePath(path); - - expectf(156.0, bounds.X); - expectf(156.0, bounds.Y); - expectf(138.0, bounds.Width); - expectf(88.0, bounds.Height); - - line2_points[2].X = 2 * line2_points[1].X - line2_points[0].X; - line2_points[2].Y = 2 * line2_points[1].Y - line2_points[0].Y; - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathLine2(path, &(line2_points[0]), 3); - status = GdipGetPathWorldBounds(path, &bounds, NULL, pen); - expect(Ok, status); - GdipDeletePath(path); - - expectf(100.0, bounds.X); - expectf(100.0, bounds.Y); - expectf(300.0, bounds.Width); - expectf(200.0, bounds.Height); - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 45.0, 20.0); - status = GdipGetPathWorldBounds(path, &bounds, NULL, pen); - expect(Ok, status); - GdipDeletePath(path); - - expectf(386.7, bounds.X); - expectf(553.4, bounds.Y); - expectf(266.8, bounds.Width); - expectf(289.6, bounds.Height); - - GdipCreatePath(FillModeAlternate, &path); - status = GdipGetPathWorldBounds(path, &bounds, matrix, pen); - expect(Ok, status); - GdipDeletePath(path); - - expectf(0.0, bounds.X); - expectf(0.0, bounds.Y); - expectf(0.0, bounds.Width); - expectf(0.0, bounds.Height); - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathLine2(path, &(line2_points[0]), 2); - status = GdipGetPathWorldBounds(path, &bounds, matrix, pen); - expect(Ok, status); - GdipDeletePath(path); - - todo_wine{ - expectf(427.9, bounds.X); - expectf(167.7, bounds.Y); - expectf(239.9, bounds.Width); - expectf(164.9, bounds.Height); - } - - GdipDeleteMatrix(matrix); - GdipCreateMatrix2(0.9, -0.5, -0.5, -1.2, 10.4, 10.2, &matrix); - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 0.0, 100.0); - GdipAddPathLine2(path, &(line2_points[0]), 10); - status = GdipGetPathWorldBounds(path, &bounds, matrix, NULL); - expect(Ok, status); - GdipDeletePath(path); - - expectf(-209.6, bounds.X); - expectf(-1274.8, bounds.Y); - expectf(705.0, bounds.Width); - expectf(945.0, bounds.Height); -} - -static path_test_t pathpath_path[] = { - {600.00, 450.00, PathPointTypeStart, 0, 0}, /*0*/ - {600.00, 643.30, PathPointTypeBezier, 0, 0}, /*1*/ - {488.07, 800.00, PathPointTypeBezier, 0, 0}, /*2*/ - {350.00, 800.00, PathPointTypeBezier, 0, 0}, /*3*/ - {319.61, 797.40, PathPointTypeStart, 0, 0}, /*4*/ - {182.56, 773.90, PathPointTypeBezier, 0, 0}, /*5*/ - {85.07, 599.31, PathPointTypeBezier, 0, 0}, /*6*/ - {101.85, 407.45, PathPointTypeBezier, 0, 0}, /*7*/ - {102.54, 399.66, PathPointTypeBezier, 0, 0}, /*8*/ - {103.40, 391.91, PathPointTypeBezier, 0, 0}, /*9*/ - {104.46, 384.21, PathPointTypeBezier, 0, 0}, /*10*/ - {409.92, 110.20, PathPointTypeLine, 0, 0}, /*11*/ - {543.96, 156.53, PathPointTypeBezier, 0, 0}, /*12*/ - {625.80, 346.22, PathPointTypeBezier, 0, 0}, /*13*/ - {592.71, 533.88, PathPointTypeBezier, 0, 0}, /*14*/ - {592.47, 535.28, PathPointTypeBezier, 0, 0}, /*15*/ - {592.22, 536.67, PathPointTypeBezier, 0, 0}, /*16*/ - {591.96, 538.06, PathPointTypeBezier, 0, 0}, /*17*/ - {319.61, 797.40, PathPointTypeLine, 0, 0}, /*18*/ - {182.56, 773.90, PathPointTypeBezier, 0, 0}, /*19*/ - {85.07, 599.31, PathPointTypeBezier, 0, 0}, /*20*/ - {101.85, 407.45, PathPointTypeBezier, 0, 0}, /*21*/ - {102.54, 399.66, PathPointTypeBezier, 0, 0}, /*22*/ - {103.40, 391.91, PathPointTypeBezier, 0, 0}, /*23*/ - {104.46, 384.21, PathPointTypeBezier, 0, 0} /*24*/ - }; - -static void test_pathpath(void) -{ - GpStatus status; - GpPath* path1, *path2; - - GdipCreatePath(FillModeAlternate, &path2); - GdipAddPathArc(path2, 100.0, 100.0, 500.0, 700.0, 95.0, 100.0); - - GdipCreatePath(FillModeAlternate, &path1); - GdipAddPathArc(path1, 100.0, 100.0, 500.0, 700.0, 0.0, 90.0); - status = GdipAddPathPath(path1, path2, FALSE); - expect(Ok, status); - GdipAddPathArc(path1, 100.0, 100.0, 500.0, 700.0, -80.0, 100.0); - status = GdipAddPathPath(path1, path2, TRUE); - expect(Ok, status); - - ok_path(path1, pathpath_path, sizeof(pathpath_path)/sizeof(path_test_t), FALSE); - - GdipDeletePath(path1); - GdipDeletePath(path2); -} - -static path_test_t ellipse_path[] = { - {30.00, 125.25, PathPointTypeStart, 0, 0}, /*0*/ - {30.00, 139.20, PathPointTypeBezier, 0, 0}, /*1*/ - {25.52, 150.50, PathPointTypeBezier, 0, 0}, /*2*/ - {20.00, 150.50, PathPointTypeBezier, 0, 0}, /*3*/ - {14.48, 150.50, PathPointTypeBezier, 0, 0}, /*4*/ - {10.00, 139.20, PathPointTypeBezier, 0, 0}, /*5*/ - {10.00, 125.25, PathPointTypeBezier, 0, 0}, /*6*/ - {10.00, 111.30, PathPointTypeBezier, 0, 0}, /*7*/ - {14.48, 100.00, PathPointTypeBezier, 0, 0}, /*8*/ - {20.00, 100.00, PathPointTypeBezier, 0, 0}, /*9*/ - {25.52, 100.00, PathPointTypeBezier, 0, 0}, /*10*/ - {30.00, 111.30, PathPointTypeBezier, 0, 0}, /*11*/ - {30.00, 125.25, PathPointTypeBezier | PathPointTypeCloseSubpath, 0, 0}, /*12*/ - {7.00, 11.00, PathPointTypeStart, 0, 0}, /*13*/ - {13.00, 17.00, PathPointTypeLine, 0, 0}, /*14*/ - {5.00, 195.00, PathPointTypeStart, 0, 0}, /*15*/ - {5.00, 192.24, PathPointTypeBezier, 0, 0}, /*16*/ - {6.12, 190.00, PathPointTypeBezier, 0, 0}, /*17*/ - {7.50, 190.00, PathPointTypeBezier, 0, 0}, /*18*/ - {8.88, 190.00, PathPointTypeBezier, 0, 0}, /*19*/ - {10.00, 192.24, PathPointTypeBezier, 0, 0}, /*20*/ - {10.00, 195.00, PathPointTypeBezier, 0, 0}, /*21*/ - {10.00, 197.76, PathPointTypeBezier, 0, 0}, /*22*/ - {8.88, 200.00, PathPointTypeBezier, 0, 0}, /*23*/ - {7.50, 200.00, PathPointTypeBezier, 0, 0}, /*24*/ - {6.12, 200.00, PathPointTypeBezier, 0, 0}, /*25*/ - {5.00, 197.76, PathPointTypeBezier, 0, 0}, /*26*/ - {5.00, 195.00, PathPointTypeBezier | PathPointTypeCloseSubpath, 0, 0}, /*27*/ - {10.00, 300.50, PathPointTypeStart, 0, 0}, /*28*/ - {10.00, 300.78, PathPointTypeBezier, 0, 0}, /*29*/ - {10.00, 301.00, PathPointTypeBezier, 0, 0}, /*30*/ - {10.00, 301.00, PathPointTypeBezier, 0, 0}, /*31*/ - {10.00, 301.00, PathPointTypeBezier, 0, 0}, /*32*/ - {10.00, 300.78, PathPointTypeBezier, 0, 0}, /*33*/ - {10.00, 300.50, PathPointTypeBezier, 0, 0}, /*34*/ - {10.00, 300.22, PathPointTypeBezier, 0, 0}, /*35*/ - {10.00, 300.00, PathPointTypeBezier, 0, 0}, /*36*/ - {10.00, 300.00, PathPointTypeBezier, 0, 0}, /*37*/ - {10.00, 300.00, PathPointTypeBezier, 0, 0}, /*38*/ - {10.00, 300.22, PathPointTypeBezier, 0, 0}, /*39*/ - {10.00, 300.50, PathPointTypeBezier | PathPointTypeCloseSubpath, 0, 0} /*40*/ - }; - -static void test_ellipse(void) -{ - GpStatus status; - GpPath *path; - GpPointF points[2]; - - points[0].X = 7.0; - points[0].Y = 11.0; - points[1].X = 13.0; - points[1].Y = 17.0; - - GdipCreatePath(FillModeAlternate, &path); - status = GdipAddPathEllipse(path, 10.0, 100.0, 20.0, 50.5); - expect(Ok, status); - GdipAddPathLine2(path, points, 2); - status = GdipAddPathEllipse(path, 10.0, 200.0, -5.0, -10.0); - expect(Ok, status); - GdipClosePathFigure(path); - status = GdipAddPathEllipse(path, 10.0, 300.0, 0.0, 1.0); - expect(Ok, status); - - ok_path(path, ellipse_path, sizeof(ellipse_path)/sizeof(path_test_t), FALSE); - - GdipDeletePath(path); -} - -static path_test_t linei_path[] = { - {5.00, 5.00, PathPointTypeStart, 0, 0}, /*0*/ - {6.00, 8.00, PathPointTypeLine, 0, 0}, /*1*/ - {409.92, 110.20, PathPointTypeLine, 0, 0}, /*2*/ - {543.96, 156.53, PathPointTypeBezier, 0, 0}, /*3*/ - {625.80, 346.22, PathPointTypeBezier, 0, 0}, /*4*/ - {592.71, 533.88, PathPointTypeBezier, 0, 0}, /*5*/ - {592.47, 535.28, PathPointTypeBezier, 0, 0}, /*6*/ - {592.22, 536.67, PathPointTypeBezier, 0, 0}, /*7*/ - {591.96, 538.06, PathPointTypeBezier, 0, 0}, /*8*/ - {15.00, 15.00, PathPointTypeLine, 0, 0}, /*9*/ - {26.00, 28.00, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 0}, /*10*/ - {35.00, 35.00, PathPointTypeStart, 0, 0}, /*11*/ - {36.00, 38.00, PathPointTypeLine, 0, 0} /*12*/ - }; - -static void test_linei(void) -{ - GpStatus status; - GpPath *path; - GpPointF points[2]; - - points[0].X = 7.0; - points[0].Y = 11.0; - points[1].X = 13.0; - points[1].Y = 17.0; - - GdipCreatePath(FillModeAlternate, &path); - status = GdipAddPathLineI(path, 5.0, 5.0, 6.0, 8.0); - expect(Ok, status); - GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, -80.0, 100.0); - status = GdipAddPathLineI(path, 15.0, 15.0, 26.0, 28.0); - expect(Ok, status); - GdipClosePathFigure(path); - status = GdipAddPathLineI(path, 35.0, 35.0, 36.0, 38.0); - expect(Ok, status); - - ok_path(path, linei_path, sizeof(linei_path)/sizeof(path_test_t), FALSE); - - GdipDeletePath(path); -} - -static path_test_t poly_path[] = { - {5.00, 5.00, PathPointTypeStart, 0, 0}, /*1*/ - {6.00, 8.00, PathPointTypeLine, 0, 0}, /*2*/ - {0.00, 0.00, PathPointTypeStart, 0, 0}, /*3*/ - {10.00, 10.00, PathPointTypeLine, 0, 0}, /*4*/ - {10.00, 20.00, PathPointTypeLine, 0, 0}, /*5*/ - {30.00, 10.00, PathPointTypeLine, 0, 0}, /*6*/ - {20.00, 0.00, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 0}, /*7*/ - }; - -static void test_polygon(void) -{ - GpStatus status; - GpPath *path; - GpPointF points[5]; - - points[0].X = 0.0; - points[0].Y = 0.0; - points[1].X = 10.0; - points[1].Y = 10.0; - points[2].X = 10.0; - points[2].Y = 20.0; - points[3].X = 30.0; - points[3].Y = 10.0; - points[4].X = 20.0; - points[4].Y = 0.0; - - GdipCreatePath(FillModeAlternate, &path); - - /* NULL args */ - status = GdipAddPathPolygon(NULL, points, 5); - expect(InvalidParameter, status); - status = GdipAddPathPolygon(path, NULL, 5); - expect(InvalidParameter, status); - /* Polygon should have 3 points at least */ - status = GdipAddPathPolygon(path, points, 2); - expect(InvalidParameter, status); - - /* to test how it prolongs not empty path */ - status = GdipAddPathLine(path, 5.0, 5.0, 6.0, 8.0); - expect(Ok, status); - status = GdipAddPathPolygon(path, points, 5); - expect(Ok, status); - /* check resulting path */ - ok_path(path, poly_path, sizeof(poly_path)/sizeof(path_test_t), FALSE); - - GdipDeletePath(path); -} - -static path_test_t rect_path[] = { - {5.0, 5.0, PathPointTypeStart, 0, 0}, /*0*/ - {105.0, 5.0, PathPointTypeLine, 0, 0}, /*1*/ - {105.0, 55.0, PathPointTypeLine, 0, 0}, /*2*/ - {5.0, 55.0, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 0}, /*3*/ - - {100.0, 50.0, PathPointTypeStart, 0, 0}, /*4*/ - {220.0, 50.0, PathPointTypeLine, 0, 0}, /*5*/ - {220.0, 80.0, PathPointTypeLine, 0, 0}, /*6*/ - {100.0, 80.0, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 0} /*7*/ - }; - -static void test_rect(void) -{ - GpStatus status; - GpPath *path; - GpRectF rects[2]; - - GdipCreatePath(FillModeAlternate, &path); - status = GdipAddPathRectangle(path, 5.0, 5.0, 100.0, 50.0); - expect(Ok, status); - status = GdipAddPathRectangle(path, 100.0, 50.0, 120.0, 30.0); - expect(Ok, status); - - ok_path(path, rect_path, sizeof(rect_path)/sizeof(path_test_t), FALSE); - - GdipDeletePath(path); - - GdipCreatePath(FillModeAlternate, &path); - - rects[0].X = 5.0; - rects[0].Y = 5.0; - rects[0].Width = 100.0; - rects[0].Height = 50.0; - rects[1].X = 100.0; - rects[1].Y = 50.0; - rects[1].Width = 120.0; - rects[1].Height = 30.0; - - status = GdipAddPathRectangles(path, (GDIPCONST GpRectF*)&rects, 2); - expect(Ok, status); - - ok_path(path, rect_path, sizeof(rect_path)/sizeof(path_test_t), FALSE); - - GdipDeletePath(path); -} - -static void test_lastpoint(void) -{ - GpStatus status; - GpPath *path; - GpPointF ptf; - - GdipCreatePath(FillModeAlternate, &path); - status = GdipAddPathRectangle(path, 5.0, 5.0, 100.0, 50.0); - expect(Ok, status); - - /* invalid args */ - status = GdipGetPathLastPoint(NULL, &ptf); - expect(InvalidParameter, status); - status = GdipGetPathLastPoint(path, NULL); - expect(InvalidParameter, status); - status = GdipGetPathLastPoint(NULL, NULL); - expect(InvalidParameter, status); - - status = GdipGetPathLastPoint(path, &ptf); - expect(Ok, status); - expect(TRUE, (ptf.X == 5.0) && (ptf.Y == 55.0)); - - GdipDeletePath(path); -} - -START_TEST(graphicspath) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_constructor_destructor(); - test_getpathdata(); - test_line2(); - test_arc(); - test_worldbounds(); - test_pathpath(); - test_ellipse(); - test_linei(); - test_rect(); - test_polygon(); - test_lastpoint(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/image.c b/rostests/winetests/gdiplus/image.c deleted file mode 100644 index 38a58b9c689..00000000000 --- a/rostests/winetests/gdiplus/image.c +++ /dev/null @@ -1,534 +0,0 @@ -/* - * Unit test suite for images - * - * 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 - */ - -#include "windows.h" -#include "gdiplus.h" -#include "wine/test.h" -#include -#include "wingdi.h" - -#define expect(expected, got) ok(((UINT)got) == ((UINT)expected), "Expected %.8x, got %.8x\n", (UINT)expected, (UINT)got) - -static void test_Scan0(void) -{ - GpBitmap *bm; - GpStatus stat; - BYTE buff[360]; - - bm = NULL; - stat = GdipCreateBitmapFromScan0(10, 10, 10, PixelFormat24bppRGB, NULL, &bm); - expect(Ok, stat); - ok(NULL != bm, "Expected bitmap to be initialized\n"); - if (stat == Ok) - GdipDisposeImage((GpImage*)bm); - - bm = (GpBitmap*)0xdeadbeef; - stat = GdipCreateBitmapFromScan0(10, -10, 10, PixelFormat24bppRGB, NULL, &bm); - expect(InvalidParameter, stat); - - expect(NULL, bm); - - bm = (GpBitmap*)0xdeadbeef; - stat = GdipCreateBitmapFromScan0(-10, 10, 10, PixelFormat24bppRGB, NULL, &bm); - expect(InvalidParameter, stat); - - expect(NULL, bm); - - bm = (GpBitmap*)0xdeadbeef; - stat = GdipCreateBitmapFromScan0(10, 0, 10, PixelFormat24bppRGB, NULL, &bm); - expect(InvalidParameter, stat); - - expect(NULL, bm); - - bm = NULL; - stat = GdipCreateBitmapFromScan0(10, 10, 12, PixelFormat24bppRGB, buff, &bm); - expect(Ok, stat); - ok(NULL != bm, "Expected bitmap to be initialized\n"); - if (stat == Ok) - GdipDisposeImage((GpImage*)bm); - - bm = (GpBitmap*) 0xdeadbeef; - stat = GdipCreateBitmapFromScan0(10, 10, 10, PixelFormat24bppRGB, buff, &bm); - expect(InvalidParameter, stat); - expect(NULL, bm); - - bm = (GpBitmap*)0xdeadbeef; - stat = GdipCreateBitmapFromScan0(10, 10, 0, PixelFormat24bppRGB, buff, &bm); - expect(InvalidParameter, stat); - expect(0xdeadbeef, bm); -} - -static void test_GetImageDimension(void) -{ - GpBitmap *bm; - GpStatus stat; - const REAL WIDTH = 10.0, HEIGHT = 20.0; - REAL w,h; - - bm = (GpBitmap*)0xdeadbeef; - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB,NULL, &bm); - expect(Ok,stat); - ok((GpBitmap*)0xdeadbeef != bm, "Expected bitmap to not be 0xdeadbeef\n"); - ok(NULL != bm, "Expected bitmap to not be NULL\n"); - - stat = GdipGetImageDimension(NULL,&w,&h); - expect(InvalidParameter, stat); - - stat = GdipGetImageDimension((GpImage*)bm,NULL,&h); - expect(InvalidParameter, stat); - - stat = GdipGetImageDimension((GpImage*)bm,&w,NULL); - expect(InvalidParameter, stat); - - w = -1; - h = -1; - stat = GdipGetImageDimension((GpImage*)bm,&w,&h); - expect(Ok, stat); - ok(fabs(WIDTH - w) < 0.0001, "Width wrong\n"); - ok(fabs(HEIGHT - h) < 0.0001, "Height wrong\n"); - GdipDisposeImage((GpImage*)bm); -} - -static void test_GdipImageGetFrameDimensionsCount(void) -{ - GpBitmap *bm; - GpStatus stat; - const REAL WIDTH = 10.0, HEIGHT = 20.0; - UINT w; - - bm = (GpBitmap*)0xdeadbeef; - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB,NULL, &bm); - expect(Ok,stat); - ok((GpBitmap*)0xdeadbeef != bm, "Expected bitmap to not be 0xdeadbeef\n"); - ok(NULL != bm, "Expected bitmap to not be NULL\n"); - - stat = GdipImageGetFrameDimensionsCount(NULL,&w); - expect(InvalidParameter, stat); - - stat = GdipImageGetFrameDimensionsCount((GpImage*)bm,NULL); - expect(InvalidParameter, stat); - - w = -1; - stat = GdipImageGetFrameDimensionsCount((GpImage*)bm,&w); - expect(Ok, stat); - expect(1, w); - GdipDisposeImage((GpImage*)bm); -} - -static void test_LoadingImages(void) -{ - GpStatus stat; - - stat = GdipCreateBitmapFromFile(0, 0); - expect(InvalidParameter, stat); - - stat = GdipCreateBitmapFromFile(0, (GpBitmap**)0xdeadbeef); - expect(InvalidParameter, stat); - - stat = GdipLoadImageFromFile(0, 0); - expect(InvalidParameter, stat); - - stat = GdipLoadImageFromFile(0, (GpImage**)0xdeadbeef); - expect(InvalidParameter, stat); - - stat = GdipLoadImageFromFileICM(0, 0); - expect(InvalidParameter, stat); - - stat = GdipLoadImageFromFileICM(0, (GpImage**)0xdeadbeef); - expect(InvalidParameter, stat); -} - -static void test_SavingImages(void) -{ - GpStatus stat; - GpBitmap *bm; - UINT n; - UINT s; - const REAL WIDTH = 10.0, HEIGHT = 20.0; - REAL w, h; - ImageCodecInfo *codecs; - static const WCHAR filename[] = { 'a','.','b','m','p',0 }; - - codecs = NULL; - - stat = GdipSaveImageToFile(0, 0, 0, 0); - expect(InvalidParameter, stat); - - bm = NULL; - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm); - expect(Ok, stat); - if (!bm) - return; - - /* invalid params */ - stat = GdipSaveImageToFile((GpImage*)bm, 0, 0, 0); - expect(InvalidParameter, stat); - - stat = GdipSaveImageToFile((GpImage*)bm, filename, 0, 0); - expect(InvalidParameter, stat); - - /* encoder tests should succeed -- already tested */ - stat = GdipGetImageEncodersSize(&n, &s); - if (stat != Ok || n == 0) goto cleanup; - - codecs = GdipAlloc(s); - if (!codecs) goto cleanup; - - stat = GdipGetImageEncoders(n, s, codecs); - if (stat != Ok) goto cleanup; - - stat = GdipSaveImageToFile((GpImage*)bm, filename, &codecs[0].Clsid, 0); - expect(stat, Ok); - - GdipDisposeImage((GpImage*)bm); - bm = 0; - - /* re-load and check image stats */ - stat = GdipLoadImageFromFile(filename, (GpImage**)&bm); - expect(stat, Ok); - if (stat != Ok) goto cleanup; - - stat = GdipGetImageDimension((GpImage*)bm, &w, &h); - if (stat != Ok) goto cleanup; - - ok((fabs(w - WIDTH) < 0.01) && (fabs(h - HEIGHT) < 0.01), - "Saved image dimensions are different!\n"); - - cleanup: - GdipFree(codecs); - if (bm) - GdipDisposeImage((GpImage*)bm); - ok(DeleteFileW(filename), "Delete failed.\n"); -} - -static void test_encoders(void) -{ - GpStatus stat; - UINT n; - UINT s; - ImageCodecInfo *codecs; - int i; - int bmp_found; - - static const WCHAR bmp_format[] = {'B', 'M', 'P', 0}; - - stat = GdipGetImageEncodersSize(&n, &s); - expect(stat, Ok); - - codecs = GdipAlloc(s); - if (!codecs) - return; - - stat = GdipGetImageEncoders(n, s, NULL); - expect(GenericError, stat); - - stat = GdipGetImageEncoders(0, s, codecs); - expect(GenericError, stat); - - stat = GdipGetImageEncoders(n, s-1, codecs); - expect(GenericError, stat); - - stat = GdipGetImageEncoders(n, s+1, codecs); - expect(GenericError, stat); - - stat = GdipGetImageEncoders(n, s, codecs); - expect(stat, Ok); - - bmp_found = FALSE; - for (i = 0; i < n; i++) - { - if (CompareStringW(LOCALE_SYSTEM_DEFAULT, 0, - codecs[i].FormatDescription, -1, - bmp_format, -1) == CSTR_EQUAL) { - bmp_found = TRUE; - break; - } - } - if (!bmp_found) - ok(FALSE, "No BMP codec found.\n"); - - GdipFree(codecs); -} - -static void test_LockBits(void) -{ - GpStatus stat; - GpBitmap *bm; - GpRect rect; - BitmapData bd; - const INT WIDTH = 10, HEIGHT = 20; - - bm = NULL; - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm); - expect(Ok, stat); - - rect.X = 2; - rect.Y = 3; - rect.Width = 4; - rect.Height = 5; - - /* read-only */ - stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd); - expect(Ok, stat); - - if (stat == Ok) { - stat = GdipBitmapUnlockBits(bm, &bd); - expect(Ok, stat); - } - - /* read-only, with NULL rect -> whole bitmap lock */ - stat = GdipBitmapLockBits(bm, NULL, ImageLockModeRead, PixelFormat24bppRGB, &bd); - expect(Ok, stat); - expect(bd.Width, WIDTH); - expect(bd.Height, HEIGHT); - - if (stat == Ok) { - stat = GdipBitmapUnlockBits(bm, &bd); - expect(Ok, stat); - } - - /* read-only, consecutive */ - stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd); - expect(Ok, stat); - - if (stat == Ok) { - stat = GdipBitmapUnlockBits(bm, &bd); - expect(Ok, stat); - } - - stat = GdipDisposeImage((GpImage*)bm); - expect(Ok, stat); - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm); - expect(Ok, stat); - - /* read x2 */ - stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd); - expect(Ok, stat); - stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd); - expect(WrongState, stat); - - stat = GdipBitmapUnlockBits(bm, &bd); - expect(Ok, stat); - - stat = GdipDisposeImage((GpImage*)bm); - expect(Ok, stat); - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm); - expect(Ok, stat); - - /* write, no modification */ - stat = GdipBitmapLockBits(bm, &rect, ImageLockModeWrite, PixelFormat24bppRGB, &bd); - expect(Ok, stat); - - if (stat == Ok) { - stat = GdipBitmapUnlockBits(bm, &bd); - expect(Ok, stat); - } - - /* write, consecutive */ - stat = GdipBitmapLockBits(bm, &rect, ImageLockModeWrite, PixelFormat24bppRGB, &bd); - expect(Ok, stat); - - if (stat == Ok) { - stat = GdipBitmapUnlockBits(bm, &bd); - expect(Ok, stat); - } - - stat = GdipDisposeImage((GpImage*)bm); - expect(Ok, stat); - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm); - expect(Ok, stat); - - /* write, modify */ - stat = GdipBitmapLockBits(bm, &rect, ImageLockModeWrite, PixelFormat24bppRGB, &bd); - expect(Ok, stat); - - if (stat == Ok) { - if (bd.Scan0) - ((char*)bd.Scan0)[2] = 0xff; - - stat = GdipBitmapUnlockBits(bm, &bd); - expect(Ok, stat); - } - - stat = GdipDisposeImage((GpImage*)bm); - expect(Ok, stat); - - /* dispose locked */ - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm); - expect(Ok, stat); - stat = GdipBitmapLockBits(bm, &rect, ImageLockModeRead, PixelFormat24bppRGB, &bd); - expect(Ok, stat); - stat = GdipDisposeImage((GpImage*)bm); - expect(Ok, stat); -} - -static void test_GdipCreateBitmapFromHBITMAP(void) -{ - GpBitmap* gpbm = NULL; - HBITMAP hbm = NULL; - HPALETTE hpal = NULL; - GpStatus stat; - BYTE buff[1000]; - LOGPALETTE* LogPal = NULL; - REAL width, height; - const REAL WIDTH1 = 5; - const REAL HEIGHT1 = 15; - const REAL WIDTH2 = 10; - const REAL HEIGHT2 = 20; - HDC hdc; - BITMAPINFO bmi; - - stat = GdipCreateBitmapFromHBITMAP(NULL, NULL, NULL); - expect(InvalidParameter, stat); - - hbm = CreateBitmap(WIDTH1, HEIGHT1, 1, 1, NULL); - stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, NULL); - expect(InvalidParameter, stat); - - stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm); - expect(Ok, stat); - expect(Ok, GdipGetImageDimension((GpImage*) gpbm, &width, &height)); - ok(fabs(WIDTH1 - width) < .0001, "width wrong\n"); - ok(fabs(HEIGHT1 - height) < .0001, "height wrong\n"); - if (stat == Ok) - GdipDisposeImage((GpImage*)gpbm); - GlobalFree(hbm); - - hbm = CreateBitmap(WIDTH2, HEIGHT2, 1, 1, &buff); - stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm); - expect(Ok, stat); - expect(Ok, GdipGetImageDimension((GpImage*) gpbm, &width, &height)); - ok(fabs(WIDTH2 - width) < .0001, "width wrong\n"); - ok(fabs(HEIGHT2 - height) < .0001, "height wrong\n"); - if (stat == Ok) - GdipDisposeImage((GpImage*)gpbm); - GlobalFree(hbm); - - hdc = CreateCompatibleDC(0); - ok(hdc != NULL, "CreateCompatibleDC failed\n"); - bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); - bmi.bmiHeader.biHeight = HEIGHT1; - bmi.bmiHeader.biWidth = WIDTH1; - bmi.bmiHeader.biBitCount = 24; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biCompression = BI_RGB; - - hbm = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, NULL, NULL, 0); - ok(hbm != NULL, "CreateDIBSection failed\n"); - - stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm); - expect(Ok, stat); - expect(Ok, GdipGetImageDimension((GpImage*) gpbm, &width, &height)); - ok(fabs(WIDTH1 - width) < .0001, "width wrong\n"); - ok(fabs(HEIGHT1 - height) < .0001, "height wrong\n"); - if (stat == Ok) - GdipDisposeImage((GpImage*)gpbm); - - LogPal = GdipAlloc(sizeof(LOGPALETTE)); - ok(LogPal != NULL, "unable to allocate LOGPALETTE\n"); - LogPal->palVersion = 0x300; - hpal = CreatePalette((const LOGPALETTE*) LogPal); - ok(hpal != NULL, "CreatePalette failed\n"); - GdipFree(LogPal); - - stat = GdipCreateBitmapFromHBITMAP(hbm, hpal, &gpbm); - todo_wine - { - expect(Ok, stat); - } - if (stat == Ok) - GdipDisposeImage((GpImage*)gpbm); - - GlobalFree(hpal); - GlobalFree(hbm); -} - -static void test_GdipGetImageFlags(void) -{ - GpImage *img; - GpStatus stat; - UINT flags; - - img = (GpImage*)0xdeadbeef; - - stat = GdipGetImageFlags(NULL, NULL); - expect(InvalidParameter, stat); - - stat = GdipGetImageFlags(NULL, &flags); - expect(InvalidParameter, stat); - - stat = GdipGetImageFlags(img, NULL); - expect(InvalidParameter, stat); -} - -static void test_GdipCloneImage(void) -{ - GpStatus stat; - GpRectF rectF; - GpUnit unit; - GpBitmap *bm; - GpImage *image_src, *image_dest = NULL; - const INT WIDTH = 10, HEIGHT = 20; - - /* Create an image, clone it, delete the original, make sure the copy works */ - stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm); - expect(Ok, stat); -todo_wine -{ - image_src = ((GpImage*)bm); - stat = GdipCloneImage(image_src, &image_dest); - expect(Ok, stat); -} - stat = GdipDisposeImage((GpImage*)bm); - expect(Ok, stat); -todo_wine -{ - stat = GdipGetImageBounds(image_dest, &rectF, &unit); - expect(Ok, stat); - stat = GdipDisposeImage(image_dest); - expect(Ok, stat); -} -} - -START_TEST(image) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_Scan0(); - test_GetImageDimension(); - test_GdipImageGetFrameDimensionsCount(); - test_LoadingImages(); - test_SavingImages(); - test_encoders(); - test_LockBits(); - test_GdipCreateBitmapFromHBITMAP(); - test_GdipGetImageFlags(); - test_GdipCloneImage(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/matrix.c b/rostests/winetests/gdiplus/matrix.c deleted file mode 100644 index cc5348879f1..00000000000 --- a/rostests/winetests/gdiplus/matrix.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Unit test suite for matrices - * - * 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 - */ - -#include - -#include "windows.h" -#include "gdiplus.h" -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) - -static void test_constructor_destructor(void) -{ - GpStatus status; - GpMatrix *matrix = NULL; - - status = GdipCreateMatrix2(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, &matrix); - expect(Ok, status); - ok(matrix != NULL, "Expected matrix to be initialized\n"); - - status = GdipDeleteMatrix(NULL); - expect(InvalidParameter, status); - - status = GdipDeleteMatrix(matrix); - expect(Ok, status); -} - -typedef struct{ - REAL X; - REAL Y; -} real_point; - -static real_point transform_points[] = { - {1000.00, 2600.00}, /*0*/ - {855.00, 2390.00}, /*1*/ - {700.00, 2200.00}, /*2*/ - {565.00, 1970.00}, /*3*/ - {400.00, 1800.00}, /*4*/ - {275.00, 1550.00}, /*5*/ - {100.00, 1400.00}, /*6*/ - {-15.00, 1130.00}, /*7*/ - {-200.00, 1000.00}, /*8*/ - {-305.00, 710.00} /*9*/ - }; - -static void test_transform(void) -{ - GpStatus status; - GpMatrix *matrix = NULL; - GpPointF pts[10]; - INT i; - BOOL match; - - for(i = 0; i < 10; i ++){ - pts[i].X = i * 5.0 * (REAL)(i % 2); - pts[i].Y = 50.0 - i * 5.0; - } - - GdipCreateMatrix2(1.0, -2.0, 30.0, 40.0, -500.0, 600.0, &matrix); - - status = GdipTransformMatrixPoints(matrix, pts, 10); - expect(Ok, status); - - for(i = 0; i < 10; i ++){ - match = fabs(transform_points[i].X - pts[i].X) < 2.0 - && fabs(transform_points[i].Y - pts[i].Y) < 2.0; - - ok(match, "Expected #%d to be (%.2f, %.2f) but got (%.2f, %.2f)\n", i, - transform_points[i].X, transform_points[i].Y, pts[i].X, pts[i].Y); - } - - GdipDeleteMatrix(matrix); -} - -START_TEST(matrix) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_constructor_destructor(); - test_transform(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/pathiterator.c b/rostests/winetests/gdiplus/pathiterator.c deleted file mode 100644 index baeb22ba6f2..00000000000 --- a/rostests/winetests/gdiplus/pathiterator.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Unit test suite for pathiterator - * - * Copyright (C) 2008 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 - */ - -#include "windows.h" -#include "gdiplus.h" -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) - -static void test_constructor_destructor(void) -{ - GpPath *path; - GpPathIterator *iter; - GpStatus stat; - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathRectangle(path, 5.0, 5.0, 100.0, 50.0); - - /* NULL args */ - stat = GdipCreatePathIter(NULL, NULL); - expect(InvalidParameter, stat); - stat = GdipCreatePathIter(&iter, NULL); - expect(InvalidParameter, stat); - stat = GdipCreatePathIter(NULL, path); - expect(InvalidParameter, stat); - stat = GdipDeletePathIter(NULL); - expect(InvalidParameter, stat); - - /* valid args */ - stat = GdipCreatePathIter(&iter, path); - expect(Ok, stat); - - GdipDeletePathIter(iter); - GdipDeletePath(path); -} - -static void test_hascurve(void) -{ - GpPath *path; - GpPathIterator *iter; - GpStatus stat; - BOOL hasCurve; - - GdipCreatePath(FillModeAlternate, &path); - GdipAddPathRectangle(path, 5.0, 5.0, 100.0, 50.0); - - stat = GdipCreatePathIter(&iter, path); - expect(Ok, stat); - - /* NULL args - BOOL out argument is local in wrapper class method, - so it always has not-NULL address */ - stat = GdipPathIterHasCurve(NULL, &hasCurve); - expect(InvalidParameter, stat); - - /* valid args */ - stat = GdipPathIterHasCurve(iter, &hasCurve); - expect(Ok, stat); - expect(FALSE, hasCurve); - - GdipDeletePathIter(iter); - - GdipAddPathEllipse(path, 0.0, 0.0, 35.0, 70.0); - - stat = GdipCreatePathIter(&iter, path); - expect(Ok, stat); - - stat = GdipPathIterHasCurve(iter, &hasCurve); - expect(Ok, stat); - expect(TRUE, hasCurve); - - GdipDeletePathIter(iter); - GdipDeletePath(path); -} - -START_TEST(pathiterator) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_constructor_destructor(); - test_hascurve(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/pen.c b/rostests/winetests/gdiplus/pen.c deleted file mode 100644 index ad484ce4776..00000000000 --- a/rostests/winetests/gdiplus/pen.c +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Unit test suite for pens (and init) - * - * 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 - */ - -#include - -#include "windows.h" -#include "gdiplus.h" -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) -#define expectf(expected, got) ok(fabs(got - expected) < 0.1, "Expected %.2f, got %.2f\n", expected, got) - -static void test_startup(void) -{ - GpPen *pen = NULL; - Status status; - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - status = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - expect(Ok, status); - GdiplusShutdown(gdiplusToken); - - gdiplusStartupInput.GdiplusVersion = 2; - - status = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - expect(UnsupportedGdiplusVersion, status); - GdiplusShutdown(gdiplusToken); - - status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); - - todo_wine - expect(GdiplusNotInitialized, status); - - GdipDeletePen(pen); -} - -static void test_constructor_destructor(void) -{ - GpStatus status; - GpPen *pen = NULL; - - status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, NULL); - expect(InvalidParameter, status); - ok(pen == NULL, "Expected pen to be NULL\n"); - - status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen); - expect(Ok, status); - ok(pen != NULL, "Expected pen to be initialized\n"); - - status = GdipDeletePen(NULL); - expect(InvalidParameter, status); - - status = GdipDeletePen(pen); - expect(Ok, status); -} - -static void test_constructor_destructor2(void) -{ - GpStatus status; - GpPen *pen = NULL; - GpBrush *brush = NULL; - GpPointF points[2]; - - status = GdipCreatePen2(NULL, 10.0f, UnitPixel, &pen); - expect(InvalidParameter, status); - ok(pen == NULL, "Expected pen to be NULL\n"); - - points[0].X = 7.0; - points[0].Y = 11.0; - points[1].X = 13.0; - points[1].Y = 17.0; - - status = GdipCreateLineBrush(&points[0], &points[1], (ARGB)0xffff00ff, - (ARGB)0xff0000ff, WrapModeTile, (GpLineGradient **)&brush); - expect(Ok, status); - ok(brush != NULL, "Expected brush to be initialized\n"); - - status = GdipCreatePen2(brush, 10.0f, UnitPixel, &pen); - expect(Ok, status); - ok(pen != NULL, "Expected pen to be initialized\n"); - - status = GdipDeletePen(pen); - expect(Ok, status); - - status = GdipDeleteBrush(brush); - expect(Ok, status); -} - -static void test_brushfill(void) -{ - GpStatus status; - GpPen *pen; - GpBrush *brush, *brush2; - GpBrushType type; - ARGB color = 0; - - /* default solid */ - GdipCreatePen1(0xdeadbeef, 4.5, UnitWorld, &pen); - status = GdipGetPenBrushFill(pen, &brush); - expect(Ok, status); - GdipGetBrushType(brush, &type); - expect(BrushTypeSolidColor, type); - GdipGetPenColor(pen, &color); - expect(0xdeadbeef, color); - GdipDeleteBrush(brush); - - /* color controlled by brush */ - GdipCreateSolidFill(0xabaddeed, (GpSolidFill**)&brush); - status = GdipSetPenBrushFill(pen, brush); - expect(Ok, status); - GdipGetPenColor(pen, &color); - expect(0xabaddeed, color); - GdipDeleteBrush(brush); - color = 0; - - /* get returns a clone, not a reference */ - GdipGetPenBrushFill(pen, &brush); - GdipSetSolidFillColor((GpSolidFill*)brush, 0xbeadfeed); - GdipGetPenBrushFill(pen, &brush2); - ok(brush != brush2, "Expected to get a clone, not a copy of the reference\n"); - GdipGetSolidFillColor((GpSolidFill*)brush2, &color); - expect(0xabaddeed, color); - GdipDeleteBrush(brush); - GdipDeleteBrush(brush2); - - /* brush cannot be NULL */ - status = GdipSetPenBrushFill(pen, NULL); - expect(InvalidParameter, status); - - GdipDeletePen(pen); -} - -static void test_dasharray(void) -{ - GpPen *pen; - GpDashStyle style; - GpStatus status; - REAL dashes[12]; - - GdipCreatePen1(0xdeadbeef, 10.0, UnitWorld, &pen); - dashes[0] = 10.0; - dashes[1] = 11.0; - dashes[2] = 12.0; - dashes[3] = 13.0; - dashes[4] = 14.0; - dashes[5] = -100.0; - dashes[6] = -100.0; - dashes[7] = dashes[8] = dashes[9] = dashes[10] = dashes[11] = 0.0; - - /* setting the array sets the type to custom */ - GdipGetPenDashStyle(pen, &style); - expect(DashStyleSolid, style); - status = GdipSetPenDashArray(pen, dashes, 2); - expect(Ok, status); - GdipGetPenDashStyle(pen, &style); - expect(DashStyleCustom, style); - - /* Getting the array on a non-custom pen returns invalid parameter (unless - * you are getting 0 elements).*/ - GdipSetPenDashStyle(pen, DashStyleSolid); - status = GdipGetPenDashArray(pen, &dashes[5], 2); - expect(InvalidParameter, status); - status = GdipGetPenDashArray(pen, &dashes[5], 0); - expect(Ok, status); - - /* What does setting DashStyleCustom do to the array length? */ - GdipSetPenDashArray(pen, dashes, 2); - GdipSetPenDashStyle(pen, DashStyleCustom); - status = GdipGetPenDashArray(pen, &dashes[5], 2); - expect(Ok, status); - expectf(10.0, dashes[5]); - expectf(11.0, dashes[6]); - - /* Set the array, then get with different sized buffers. */ - status = GdipSetPenDashArray(pen, dashes, 5); - expect(Ok, status); - dashes[5] = -100.0; - dashes[6] = -100.0; - status = GdipGetPenDashArray(pen, &dashes[5], 1); - expect(Ok, status); /* not InsufficientBuffer! */ - expectf(10.0, dashes[5]); - expectf(-100.0, dashes[6]); - dashes[5] = -100.0; - status = GdipGetPenDashArray(pen, &dashes[5], 6); - expect(InvalidParameter, status); /* not Ok! */ - expectf(-100.0, dashes[5]); - expectf(-100.0, dashes[6]); - - /* Some invalid array values. */ - status = GdipSetPenDashArray(pen, &dashes[7], 5); - expect(InvalidParameter, status); - dashes[9] = -1.0; - status = GdipSetPenDashArray(pen, &dashes[7], 5); - expect(InvalidParameter, status); - - /* Try to set with count = 0. */ - GdipSetPenDashStyle(pen, DashStyleDot); - status = GdipSetPenDashArray(pen, dashes, 0); - expect(OutOfMemory, status); - GdipGetPenDashStyle(pen, &style); - expect(DashStyleDot, style); - - GdipDeletePen(pen); -} - -START_TEST(pen) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - test_startup(); - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_constructor_destructor(); - test_constructor_destructor2(); - test_brushfill(); - test_dasharray(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/region.c b/rostests/winetests/gdiplus/region.c deleted file mode 100644 index 166df2d17d9..00000000000 --- a/rostests/winetests/gdiplus/region.c +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Unit test suite for gdiplus regions - * - * Copyright (C) 2008 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 - */ - -#include "windows.h" -#include "gdiplus.h" -#include "wingdi.h" -#include "wine/test.h" - -static inline void expect_dword(DWORD *value, DWORD expected) -{ - ok(*value == expected, "expected %08x got %08x\n", expected, *value); -} - -static inline void expect_float(DWORD *value, FLOAT expected) -{ - FLOAT valuef = *(FLOAT*)value; - ok(valuef == expected, "expected %f got %f\n", expected, valuef); -} - -static void test_create_rgn(void) -{ - GpStatus status; - GpRegion *region, *region2; - UINT needed; - DWORD buf[100]; - GpRect rect; - - status = GdipCreateRegion(®ion); -todo_wine - ok(status == Ok, "status %08x\n", status); - - if(status != Ok) return; - - status = GdipGetRegionDataSize(region, &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 20, "got %d\n", needed); - status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 20, "got %d\n", needed); - expect_dword(buf, 12); - trace("buf[1] = %08x\n", buf[1]); - expect_dword(buf + 2, 0xdbc01001); - expect_dword(buf + 3, 0); - expect_dword(buf + 4, 0x10000003); - - status = GdipSetEmpty(region); - ok(status == Ok, "status %08x\n", status); - status = GdipGetRegionDataSize(region, &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 20, "got %d\n", needed); - status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 20, "got %d\n", needed); - expect_dword(buf, 12); - trace("buf[1] = %08x\n", buf[1]); - expect_dword(buf + 2, 0xdbc01001); - expect_dword(buf + 3, 0); - expect_dword(buf + 4, 0x10000002); - - status = GdipSetInfinite(region); - ok(status == Ok, "status %08x\n", status); - status = GdipGetRegionDataSize(region, &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 20, "got %d\n", needed); - status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 20, "got %d\n", needed); - expect_dword(buf, 12); - trace("buf[1] = %08x\n", buf[1]); - expect_dword(buf + 2, 0xdbc01001); - expect_dword(buf + 3, 0); - expect_dword(buf + 4, 0x10000003); - - status = GdipDeleteRegion(region); - ok(status == Ok, "status %08x\n", status); - - rect.X = 10; - rect.Y = 20; - rect.Width = 100; - rect.Height = 200; - status = GdipCreateRegionRectI(&rect, ®ion); - ok(status == Ok, "status %08x\n", status); - status = GdipGetRegionDataSize(region, &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 36, "got %d\n", needed); - status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 36, "got %d\n", needed); - expect_dword(buf, 28); - trace("buf[1] = %08x\n", buf[1]); - expect_dword(buf + 2, 0xdbc01001); - expect_dword(buf + 3, 0); - expect_dword(buf + 4, 0x10000000); - expect_float(buf + 5, 10.0); - expect_float(buf + 6, 20.0); - expect_float(buf + 7, 100.0); - expect_float(buf + 8, 200.0); - - rect.X = 50; - rect.Y = 30; - rect.Width = 10; - rect.Height = 20; - status = GdipCombineRegionRectI(region, &rect, CombineModeIntersect); - ok(status == Ok, "status %08x\n", status); - rect.X = 100; - rect.Y = 300; - rect.Width = 30; - rect.Height = 50; - status = GdipCombineRegionRectI(region, &rect, CombineModeXor); - ok(status == Ok, "status %08x\n", status); - - rect.X = 200; - rect.Y = 100; - rect.Width = 133; - rect.Height = 266; - status = GdipCreateRegionRectI(&rect, ®ion2); - ok(status == Ok, "status %08x\n", status); - rect.X = 20; - rect.Y = 10; - rect.Width = 40; - rect.Height = 66; - status = GdipCombineRegionRectI(region2, &rect, CombineModeUnion); - ok(status == Ok, "status %08x\n", status); - - status = GdipCombineRegionRegion(region, region2, CombineModeComplement); - ok(status == Ok, "status %08x\n", status); - - rect.X = 400; - rect.Y = 500; - rect.Width = 22; - rect.Height = 55; - status = GdipCombineRegionRectI(region, &rect, CombineModeExclude); - ok(status == Ok, "status %08x\n", status); - - status = GdipGetRegionDataSize(region, &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 156, "got %d\n", needed); - status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed); - ok(status == Ok, "status %08x\n", status); - ok(needed == 156, "got %d\n", needed); - expect_dword(buf, 148); - trace("buf[1] = %08x\n", buf[1]); - expect_dword(buf + 2, 0xdbc01001); - expect_dword(buf + 3, 10); - expect_dword(buf + 4, CombineModeExclude); - expect_dword(buf + 5, CombineModeComplement); - expect_dword(buf + 6, CombineModeXor); - expect_dword(buf + 7, CombineModeIntersect); - expect_dword(buf + 8, 0x10000000); - expect_float(buf + 9, 10.0); - expect_float(buf + 10, 20.0); - expect_float(buf + 11, 100.0); - expect_float(buf + 12, 200.0); - expect_dword(buf + 13, 0x10000000); - expect_float(buf + 14, 50.0); - expect_float(buf + 15, 30.0); - expect_float(buf + 16, 10.0); - expect_float(buf + 17, 20.0); - expect_dword(buf + 18, 0x10000000); - expect_float(buf + 19, 100.0); - expect_float(buf + 20, 300.0); - expect_float(buf + 21, 30.0); - expect_float(buf + 22, 50.0); - expect_dword(buf + 23, CombineModeUnion); - expect_dword(buf + 24, 0x10000000); - expect_float(buf + 25, 200.0); - expect_float(buf + 26, 100.0); - expect_float(buf + 27, 133.0); - expect_float(buf + 28, 266.0); - expect_dword(buf + 29, 0x10000000); - expect_float(buf + 30, 20.0); - expect_float(buf + 31, 10.0); - expect_float(buf + 32, 40.0); - expect_float(buf + 33, 66.0); - expect_dword(buf + 34, 0x10000000); - expect_float(buf + 35, 400.0); - expect_float(buf + 36, 500.0); - expect_float(buf + 37, 22.0); - expect_float(buf + 38, 55.0); - - - status = GdipDeleteRegion(region2); - ok(status == Ok, "status %08x\n", status); - status = GdipDeleteRegion(region); - ok(status == Ok, "status %08x\n", status); - -} - -START_TEST(region) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_create_rgn(); - - GdiplusShutdown(gdiplusToken); - -} diff --git a/rostests/winetests/gdiplus/stringformat.c b/rostests/winetests/gdiplus/stringformat.c deleted file mode 100644 index 9cf46a43297..00000000000 --- a/rostests/winetests/gdiplus/stringformat.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Unit test suite for string format - * - * 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 - */ - -#include "windows.h" -#include "gdiplus.h" -#include "wine/test.h" - -#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) - -static void test_constructor(void) -{ - GpStringFormat *format; - GpStatus stat; - INT n; - StringAlignment align, valign; - StringTrimming trimming; - - stat = GdipCreateStringFormat(0, 0, &format); - expect(Ok, stat); - - GdipGetStringFormatAlign(format, &align); - GdipGetStringFormatLineAlign(format, &valign); - GdipGetStringFormatHotkeyPrefix(format, &n); - GdipGetStringFormatTrimming(format, &trimming); - - expect(HotkeyPrefixNone, n); - expect(StringAlignmentNear, align); - expect(StringAlignmentNear, align); - expect(StringTrimmingCharacter, trimming); - - stat = GdipDeleteStringFormat(format); - expect(Ok, stat); -} - -START_TEST(stringformat) -{ - struct GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - - gdiplusStartupInput.GdiplusVersion = 1; - gdiplusStartupInput.DebugEventCallback = NULL; - gdiplusStartupInput.SuppressBackgroundThread = 0; - gdiplusStartupInput.SuppressExternalCodecs = 0; - - GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - test_constructor(); - - GdiplusShutdown(gdiplusToken); -} diff --git a/rostests/winetests/gdiplus/testlist.c b/rostests/winetests/gdiplus/testlist.c deleted file mode 100644 index 450488199e6..00000000000 --- a/rostests/winetests/gdiplus/testlist.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_brush(void); -extern void func_font(void); -extern void func_graphics(void); -extern void func_graphicspath(void); -extern void func_image(void); -extern void func_matrix(void); -extern void func_pathiterator(void); -extern void func_pen(void); -extern void func_region(void); -extern void func_stringformat(void); - -const struct test winetest_testlist[] = -{ - { "brush", func_brush }, - { "font", func_font }, - { "graphics", func_graphics }, - { "graphicspath", func_graphicspath }, - { "image", func_image }, - { "matrix", func_matrix }, - { "pathiterator", func_pathiterator }, - { "pen", func_pen }, - { "region", func_region }, - { "stringformat", func_stringformat }, - { 0, 0 } -}; diff --git a/rostests/winetests/hlink/hlink.c b/rostests/winetests/hlink/hlink.c deleted file mode 100644 index 6c3dff0591a..00000000000 --- a/rostests/winetests/hlink/hlink.c +++ /dev/null @@ -1,920 +0,0 @@ -/* - * Implementation of hyperlinking (hlink.dll) - * - * Copyright 2006 Mike McCormack - * Copyright 2007-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 - */ - -#define COBJMACROS - -#include - -#include -#include - -#include "wine/test.h" - -#define DEFINE_EXPECT(func) \ - static BOOL expect_ ## func = FALSE, called_ ## func = FALSE - -#define SET_EXPECT(func) \ - expect_ ## func = TRUE - -#define CHECK_EXPECT2(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_EXPECT(func) \ - do { \ - CHECK_EXPECT2(func); \ - expect_ ## func = FALSE; \ - }while(0) - -#define CHECK_CALLED(func) \ - do { \ - ok(called_ ## func, "expected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -DEFINE_EXPECT(IsSystemMoniker); -DEFINE_EXPECT(BindToStorage); -DEFINE_EXPECT(GetDisplayName); - -static const char *debugstr_w(LPCWSTR str) -{ - static char buf[1024]; - if(!str) - return "(null)"; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - -static const char *debugstr_guid(REFIID riid) -{ - static char buf[50]; - - sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], - riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], - riid->Data4[5], riid->Data4[6], riid->Data4[7]); - - return buf; -} - -static void test_HlinkIsShortcut(void) -{ - int i; - HRESULT hres; - - static const WCHAR file0[] = {'f','i','l','e',0}; - static const WCHAR file1[] = {'f','i','l','e','.','u','r','l',0}; - static const WCHAR file2[] = {'f','i','l','e','.','l','n','k',0}; - static const WCHAR file3[] = {'f','i','l','e','.','u','R','l',0}; - static const WCHAR file4[] = {'f','i','l','e','u','r','l',0}; - static const WCHAR file5[] = {'c',':','\\','f','i','l','e','.','u','r','l',0}; - static const WCHAR file6[] = {'c',':','\\','f','i','l','e','.','l','n','k',0}; - static const WCHAR file7[] = {'.','u','r','l',0}; - - static struct { - LPCWSTR file; - HRESULT hres; - } shortcut_test[] = { - {file0, S_FALSE}, - {file1, S_OK}, - {file2, S_FALSE}, - {file3, S_OK}, - {file4, S_FALSE}, - {file5, S_OK}, - {file6, S_FALSE}, - {file7, S_OK}, - {NULL, E_INVALIDARG} - }; - - for(i=0; i= 56) && (i < 80 || i >= 84)))) - { - same = FALSE; - break; - } - } - - ok(same, "%s: Saved data differs\n", testname); - if (!same) - { - for (i = 0; i < data_size; i++) - { - if (i % 8 == 0) printf(" "); - printf("0x%02x,", data[i]); - if (i % 8 == 7) printf("\n"); - } - printf("\n"); - } - - GlobalUnlock(hglobal); - - IStream_Release(stream); - IPersistStream_Release(ps); -} - -static void test_persist(void) -{ - static const WCHAR url[] = { 'h','t','t','p',':','/','/','w','i','n','e','h','q','.','o','r','g',0 }; - static const WCHAR rel_url[] = { 'i','n','d','e','x','.','h','t','m','l',0 }; - static const WCHAR filename[] = { 'c',':','\\',0 }; - static const WCHAR friendly_name[] = { 'W','i','n','e',' ','H','Q',0 }; - static const WCHAR location[] = { '_','b','l','a','n','k',0 }; - static const WCHAR target_frame_name[] = { 't','g','t','f','r','m',0 }; - HRESULT hr; - IHlink *lnk; - - hr = HlinkCreateFromString(url, NULL, NULL, NULL, - 0, NULL, &IID_IHlink, (LPVOID*) &lnk); - ok(hr == S_OK, "IHlinkCreateFromString failed with error 0x%08x\n", hr); - if (!lnk) { - skip("Can't create lnk, skipping test_persist. Was wineprefixcreate run properly?\n"); - return; - } - test_persist_save_data("url only", lnk, expected_hlink_data, sizeof(expected_hlink_data)); - IHlink_Release(lnk); - - hr = HlinkCreateFromString(url, NULL, friendly_name, NULL, - 0, NULL, &IID_IHlink, (LPVOID*) &lnk); - ok(hr == S_OK, "IHlinCreateFromString failed with error 0x%08x\n", hr); - test_persist_save_data("url + friendly name", lnk, expected_hlink_data2, sizeof(expected_hlink_data2)); - IHlink_Release(lnk); - - hr = HlinkCreateFromString(url, location, friendly_name, NULL, - 0, NULL, &IID_IHlink, (LPVOID*) &lnk); - ok(hr == S_OK, "IHlinCreateFromString failed with error 0x%08x\n", hr); - test_persist_save_data("url + friendly_name + location", lnk, expected_hlink_data3, sizeof(expected_hlink_data3)); - IHlink_Release(lnk); - - hr = HlinkCreateFromString(rel_url, NULL, NULL, NULL, - 0, NULL, &IID_IHlink, (LPVOID*) &lnk); - ok(hr == S_OK, "IHlinCreateFromString failed with error 0x%08x\n", hr); - test_persist_save_data("relative url", lnk, expected_hlink_data4, sizeof(expected_hlink_data4)); - IHlink_Release(lnk); - - hr = HlinkCreateFromString(url, NULL, NULL, NULL, - 0, NULL, &IID_IHlink, (LPVOID*) &lnk); - ok(hr == S_OK, "IHlinCreateFromString failed with error 0x%08x\n", hr); - hr = IHlink_SetTargetFrameName(lnk, target_frame_name); - ok(hr == S_OK, "IHlink_SetTargetFrameName failed with error 0x%08x\n", hr); - test_persist_save_data("url + target frame name", lnk, expected_hlink_data5, sizeof(expected_hlink_data5)); - IHlink_Release(lnk); - - hr = HlinkCreateFromString(filename, NULL, NULL, NULL, - 0, NULL, &IID_IHlink, (LPVOID*) &lnk); - ok(hr == S_OK, "IHlinCreateFromString failed with error 0x%08x\n", hr); - test_persist_save_data("filename", lnk, expected_hlink_data6, sizeof(expected_hlink_data6)); - IHlink_Release(lnk); -} - -static void test_special_reference(void) -{ - LPWSTR ref; - HRESULT hres; - - hres = HlinkGetSpecialReference(HLSR_HOME, &ref); - ok(hres == S_OK, "HlinkGetSpecialReference(HLSR_HOME) failed: %08x\n", hres); - ok(ref != NULL, "ref == NULL\n"); - CoTaskMemFree(ref); - - hres = HlinkGetSpecialReference(HLSR_SEARCHPAGE, &ref); - ok(hres == S_OK, "HlinkGetSpecialReference(HLSR_SEARCHPAGE) failed: %08x\n", hres); - ok(ref != NULL, "ref == NULL\n"); - CoTaskMemFree(ref); - - ref = (void*)0xdeadbeef; - hres = HlinkGetSpecialReference(HLSR_HISTORYFOLDER, &ref); - ok(hres == E_NOTIMPL, "HlinkGetSpecialReference(HLSR_HISTORYFOLDER) failed: %08x\n", hres); - ok(ref == NULL, "ref=%p\n", ref); - - ref = (void*)0xdeadbeef; - hres = HlinkGetSpecialReference(4, &ref); - ok(hres == E_INVALIDARG, "HlinkGetSpecialReference(HLSR_HISTORYFOLDER) failed: %08x\n", hres); - ok(ref == NULL, "ref=%p\n", ref); -} - -static void test_HlinkCreateExtensionServices(void) -{ - IAuthenticate *authenticate; - IHttpNegotiate *http_negotiate; - LPWSTR password, username, headers; - HWND hwnd; - HRESULT hres; - - static const WCHAR usernameW[] = {'u','s','e','r',0}; - static const WCHAR passwordW[] = {'p','a','s','s',0}; - static const WCHAR headersW[] = {'h','e','a','d','e','r','s',0}; - static const WCHAR headersexW[] = {'h','e','a','d','e','r','s','\r','\n',0}; - - hres = HlinkCreateExtensionServices(NULL, NULL, NULL, NULL, - NULL, &IID_IAuthenticate, (void**)&authenticate); - ok(hres == S_OK, "HlinkCreateExtensionServices failed: %08x\n", hres); - ok(authenticate != NULL, "HlinkCreateExtensionServices returned NULL\n"); - - password = username = (void*)0xdeadbeef; - hwnd = (void*)0xdeadbeef; - hres = IAuthenticate_Authenticate(authenticate, &hwnd, &username, &password); - ok(hres == S_OK, "Authenticate failed: %08x\n", hres); - ok(!hwnd, "hwnd != NULL\n"); - ok(!username, "username != NULL\n"); - ok(!password, "password != NULL\n"); - - hres = IAuthenticate_QueryInterface(authenticate, &IID_IHttpNegotiate, (void**)&http_negotiate); - ok(hres == S_OK, "Could not get IHttpNegotiate interface: %08x\n", hres); - - headers = (void*)0xdeadbeef; - hres = IHttpNegotiate_BeginningTransaction(http_negotiate, (void*)0xdeadbeef, (void*)0xdeadbeef, - 0, &headers); - ok(hres == S_OK, "BeginningTransaction failed: %08x\n", hres); - ok(headers == NULL, "headers != NULL\n"); - - hres = IHttpNegotiate_BeginningTransaction(http_negotiate, (void*)0xdeadbeef, (void*)0xdeadbeef, - 0, NULL); - ok(hres == E_INVALIDARG, "BeginningTransaction failed: %08x, expected E_INVALIDARG\n", hres); - - headers = (void*)0xdeadbeef; - hres = IHttpNegotiate_OnResponse(http_negotiate, 200, (void*)0xdeadbeef, (void*)0xdeadbeef, &headers); - ok(hres == S_OK, "OnResponse failed: %08x\n", hres); - ok(headers == NULL, "headers != NULL\n"); - - IHttpNegotiate_Release(http_negotiate); - IAuthenticate_Release(authenticate); - - - hres = HlinkCreateExtensionServices(headersW, (HWND)0xfefefefe, usernameW, passwordW, - NULL, &IID_IAuthenticate, (void**)&authenticate); - ok(hres == S_OK, "HlinkCreateExtensionServices failed: %08x\n", hres); - ok(authenticate != NULL, "HlinkCreateExtensionServices returned NULL\n"); - - password = username = NULL; - hwnd = NULL; - hres = IAuthenticate_Authenticate(authenticate, &hwnd, &username, &password); - ok(hres == S_OK, "Authenticate failed: %08x\n", hres); - ok(hwnd == (HWND)0xfefefefe, "hwnd=%p\n", hwnd); - ok(!lstrcmpW(username, usernameW), "unexpected username\n"); - ok(!lstrcmpW(password, passwordW), "unexpected password\n"); - CoTaskMemFree(username); - CoTaskMemFree(password); - - password = username = (void*)0xdeadbeef; - hwnd = (void*)0xdeadbeef; - hres = IAuthenticate_Authenticate(authenticate, &hwnd, NULL, &password); - ok(hres == E_INVALIDARG, "Authenticate failed: %08x\n", hres); - ok(password == (void*)0xdeadbeef, "password = %p\n", password); - ok(hwnd == (void*)0xdeadbeef, "hwnd = %p\n", hwnd); - - hres = IAuthenticate_QueryInterface(authenticate, &IID_IHttpNegotiate, (void**)&http_negotiate); - ok(hres == S_OK, "Could not get IHttpNegotiate interface: %08x\n", hres); - - headers = (void*)0xdeadbeef; - hres = IHttpNegotiate_BeginningTransaction(http_negotiate, (void*)0xdeadbeef, (void*)0xdeadbeef, - 0, &headers); - ok(hres == S_OK, "BeginningTransaction failed: %08x\n", hres); - ok(!lstrcmpW(headers, headersexW), "unexpected headers \"%s\"\n", debugstr_w(headers)); - CoTaskMemFree(headers); - - headers = (void*)0xdeadbeef; - hres = IHttpNegotiate_OnResponse(http_negotiate, 200, (void*)0xdeadbeef, (void*)0xdeadbeef, &headers); - ok(hres == S_OK, "OnResponse failed: %08x\n", hres); - ok(headers == NULL, "unexpected headers \"%s\"\n", debugstr_w(headers)); - - IHttpNegotiate_Release(http_negotiate); - IAuthenticate_Release(authenticate); -} - -static void test_HlinkParseDisplayName(void) -{ - IMoniker *mon = NULL; - LPWSTR name; - DWORD issys; - ULONG eaten = 0; - IBindCtx *bctx; - HRESULT hres; - - static const WCHAR winehq_urlW[] = - {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g', - '/','s','i','t','e','/','a','b','o','u','t',0}; - static const WCHAR invalid_urlW[] = {'t','e','s','t',':','1','2','3','a','b','c',0}; - static const WCHAR clsid_nameW[] = {'c','l','s','i','d',':', - '2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-','A','2','D','8', - '-','0','8','0','0','2','B','3','0','3','0','9','D',':',0}; - - CreateBindCtx(0, &bctx); - - hres = HlinkParseDisplayName(bctx, winehq_urlW, FALSE, &eaten, &mon); - ok(hres == S_OK, "HlinkParseDisplayName failed: %08x\n", hres); - ok(eaten == sizeof(winehq_urlW)/sizeof(WCHAR)-1, "eaten=%d\n", eaten); - ok(mon != NULL, "mon == NULL\n"); - - hres = IMoniker_GetDisplayName(mon, bctx, 0, &name); - ok(hres == S_OK, "GetDiasplayName failed: %08x\n", hres); - ok(!lstrcmpW(name, winehq_urlW), "wrong display name %s\n", debugstr_w(name)); - CoTaskMemFree(name); - - hres = IMoniker_IsSystemMoniker(mon, &issys); - ok(hres == S_OK, "IsSystemMoniker failed: %08x\n", hres); - ok(issys == MKSYS_URLMONIKER, "issys=%x\n", issys); - - IMoniker_Release(mon); - - hres = HlinkParseDisplayName(bctx, clsid_nameW, FALSE, &eaten, &mon); - ok(hres == S_OK, "HlinkParseDisplayName failed: %08x\n", hres); - ok(eaten == sizeof(clsid_nameW)/sizeof(WCHAR)-1, "eaten=%d\n", eaten); - ok(mon != NULL, "mon == NULL\n"); - - hres = IMoniker_IsSystemMoniker(mon, &issys); - ok(hres == S_OK, "IsSystemMoniker failed: %08x\n", hres); - ok(issys == MKSYS_CLASSMONIKER, "issys=%x\n", issys); - - IMoniker_Release(mon); - - hres = HlinkParseDisplayName(bctx, invalid_urlW, FALSE, &eaten, &mon); - ok(hres == S_OK, "HlinkParseDisplayName failed: %08x\n", hres); - ok(eaten == sizeof(invalid_urlW)/sizeof(WCHAR)-1, "eaten=%d\n", eaten); - ok(mon != NULL, "mon == NULL\n"); - - hres = IMoniker_GetDisplayName(mon, bctx, 0, &name); - ok(hres == S_OK, "GetDiasplayName failed: %08x\n", hres); - ok(!lstrcmpW(name, invalid_urlW), "wrong display name %s\n", debugstr_w(name)); - CoTaskMemFree(name); - - hres = IMoniker_IsSystemMoniker(mon, &issys); - ok(hres == S_OK, "IsSystemMoniker failed: %08x\n", hres); - ok(issys == MKSYS_FILEMONIKER, "issys=%x\n", issys); - - IBindCtx_Release(bctx); -} - -static IBindCtx *_bctx; - -static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv) -{ - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface) -{ - return 2; -} - -static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface) -{ - return 1; -} - -static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, - REFGUID guidService, REFIID riid, void **ppv) -{ - ok(0, "unexpected service %s\n", debugstr_guid(guidService)); - return E_NOINTERFACE; -} - -static IServiceProviderVtbl ServiceProviderVtbl = { - ServiceProvider_QueryInterface, - ServiceProvider_AddRef, - ServiceProvider_Release, - ServiceProvider_QueryService -}; - -static IServiceProvider ServiceProvider = { &ServiceProviderVtbl }; - -static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallback *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(riid, &IID_IServiceProvider)) { - *ppv = &ServiceProvider; - return S_OK; - } - - ok(0, "unexpected interface %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -static ULONG WINAPI BindStatusCallback_AddRef(IBindStatusCallback *iface) -{ - return 2; -} - -static ULONG WINAPI BindStatusCallback_Release(IBindStatusCallback *iface) -{ - return 1; -} - -static HRESULT WINAPI BindStatusCallback_OnStartBinding(IBindStatusCallback *iface, DWORD dwReserved, - IBinding *pib) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI BindStatusCallback_GetPriority(IBindStatusCallback *iface, LONG *pnPriority) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI BindStatusCallback_OnLowResource(IBindStatusCallback *iface, DWORD reserved) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallback *iface, ULONG ulProgress, - ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI BindStatusCallback_OnStopBinding(IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI BindStatusCallback_GetBindInfo(IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI BindStatusCallback_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF, - DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI BindStatusCallback_OnObjectAvailable(IBindStatusCallback *iface, REFIID riid, IUnknown *punk) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static IBindStatusCallbackVtbl BindStatusCallbackVtbl = { - BindStatusCallback_QueryInterface, - BindStatusCallback_AddRef, - BindStatusCallback_Release, - BindStatusCallback_OnStartBinding, - BindStatusCallback_GetPriority, - BindStatusCallback_OnLowResource, - BindStatusCallback_OnProgress, - BindStatusCallback_OnStopBinding, - BindStatusCallback_GetBindInfo, - BindStatusCallback_OnDataAvailable, - BindStatusCallback_OnObjectAvailable -}; - -static IBindStatusCallback BindStatusCallback = { &BindStatusCallbackVtbl }; - -static HRESULT WINAPI Moniker_QueryInterface(IMoniker *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - - ok(0, "unexpected riid: %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -static ULONG WINAPI Moniker_AddRef(IMoniker *iface) -{ - return 2; -} - -static ULONG WINAPI Moniker_Release(IMoniker *iface) -{ - return 1; -} - -static HRESULT WINAPI Moniker_GetClassID(IMoniker *iface, CLSID *pClassID) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_IsDirty(IMoniker *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Load(IMoniker *iface, IStream *pStm) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Save(IMoniker *iface, IStream *pStm, BOOL fClearDirty) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_GetSizeMax(IMoniker *iface, ULARGE_INTEGER *pcbSize) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_BindToObject(IMoniker *iface, IBindCtx *pcb, IMoniker *pmkToLeft, - REFIID riidResult, void **ppvResult) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, - REFIID riid, void **ppv) -{ - IUnknown *unk; - HRESULT hres; - - static OLECHAR BSCBHolder[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 }; - - CHECK_EXPECT(BindToStorage); - - ok(pbc == _bctx, "pbc != _bctx\n"); - ok(pmkToLeft == NULL, "pmkToLeft=%p\n", pmkToLeft); - ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", debugstr_guid(riid)); - ok(ppv != NULL, "ppv == NULL\n"); - ok(*ppv == NULL, "*ppv=%p\n", *ppv); - - hres = IBindCtx_GetObjectParam(pbc, BSCBHolder, &unk); - ok(hres == S_OK, "GetObjectParam failed: %08x\n", hres); - ok(unk != NULL, "unk == NULL\n"); - - IUnknown_Release(unk); - - return S_OK; -} - -static HRESULT WINAPI Moniker_Reduce(IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, - IMoniker **ppmkToLeft, IMoniker **ppmkReduced) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_ComposeWith(IMoniker *iface, IMoniker *pmkRight, - BOOL fOnlyIfNotGeneric, IMoniker **ppnkComposite) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Enum(IMoniker *iface, BOOL fForwrd, IEnumMoniker **ppenumMoniker) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_IsEqual(IMoniker *iface, IMoniker *pmkOtherMoniker) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Hash(IMoniker *iface, DWORD *pdwHash) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_IsRunning(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, - IMoniker *pmkNewlyRunning) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_GetTimeOfLastChange(IMoniker *iface, IBindCtx *pbc, - IMoniker *pmkToLeft, FILETIME *pFileTime) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Inverse(IMoniker *iface, IMoniker **ppmk) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_CommonPrefixWith(IMoniker *iface, IMoniker *pmkOther, - IMoniker **ppmkPrefix) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_RelativePathTo(IMoniker *iface, IMoniker *pmkOther, - IMoniker **pmkRelPath) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_GetDisplayName(IMoniker *iface, IBindCtx *pbc, - IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName) -{ - static const WCHAR winehq_urlW[] = - {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g', - '/','s','i','t','e','/','a','b','o','u','t',0}; - - CHECK_EXPECT(GetDisplayName); - - ok(pbc != NULL, "pbc == NULL\n"); - ok(pbc != _bctx, "pbc == _bctx\n"); - ok(pmkToLeft == NULL, "pmkToLeft=%p\n", pmkToLeft); - - *ppszDisplayName = CoTaskMemAlloc(sizeof(winehq_urlW)); - memcpy(*ppszDisplayName, winehq_urlW, sizeof(winehq_urlW)); - return S_OK; -} - -static HRESULT WINAPI Moniker_ParseDisplayName(IMoniker *iface, IBindCtx *pbc, - IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_IsSystemMoniker(IMoniker *iface, DWORD *pdwMksys) -{ - CHECK_EXPECT2(IsSystemMoniker); - - *pdwMksys = MKSYS_URLMONIKER; - return S_OK; -} - -static IMonikerVtbl MonikerVtbl = { - Moniker_QueryInterface, - Moniker_AddRef, - Moniker_Release, - Moniker_GetClassID, - Moniker_IsDirty, - Moniker_Load, - Moniker_Save, - Moniker_GetSizeMax, - Moniker_BindToObject, - Moniker_BindToStorage, - Moniker_Reduce, - Moniker_ComposeWith, - Moniker_Enum, - Moniker_IsEqual, - Moniker_Hash, - Moniker_IsRunning, - Moniker_GetTimeOfLastChange, - Moniker_Inverse, - Moniker_CommonPrefixWith, - Moniker_RelativePathTo, - Moniker_GetDisplayName, - Moniker_ParseDisplayName, - Moniker_IsSystemMoniker -}; - -static IMoniker Moniker = { &MonikerVtbl }; - -static void test_HlinkResolveMonikerForData(void) -{ - IBindCtx *bctx; - HRESULT hres; - - CreateBindCtx(0, &bctx); - _bctx = bctx; - - SET_EXPECT(IsSystemMoniker); - SET_EXPECT(GetDisplayName); - SET_EXPECT(BindToStorage); - - hres = HlinkResolveMonikerForData(&Moniker, 0, bctx, 0, NULL, &BindStatusCallback, NULL); - ok(hres == S_OK, "HlinkResolveMonikerForData failed: %08x\n", hres); - - CHECK_CALLED(IsSystemMoniker); - CHECK_CALLED(GetDisplayName); - CHECK_CALLED(BindToStorage); - - IBindCtx_Release(bctx); -} - -START_TEST(hlink) -{ - CoInitialize(NULL); - - test_HlinkIsShortcut(); - test_reference(); - test_persist(); - test_special_reference(); - test_HlinkCreateExtensionServices(); - test_HlinkParseDisplayName(); - test_HlinkResolveMonikerForData(); - - CoUninitialize(); -} diff --git a/rostests/winetests/hlink/hlink.rbuild b/rostests/winetests/hlink/hlink.rbuild deleted file mode 100644 index c15878d31d6..00000000000 --- a/rostests/winetests/hlink/hlink.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - - . - hlink.c - testlist.c - wine - hlink - ole32 - kernel32 - uuid - ntdll - - diff --git a/rostests/winetests/hlink/testlist.c b/rostests/winetests/hlink/testlist.c deleted file mode 100644 index 0876b7c2f39..00000000000 --- a/rostests/winetests/hlink/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_hlink(void); - -const struct test winetest_testlist[] = -{ - { "hlink", func_hlink }, - { 0, 0 } -}; diff --git a/rostests/winetests/icmp/icmp.c b/rostests/winetests/icmp/icmp.c deleted file mode 100644 index 700e82d4330..00000000000 --- a/rostests/winetests/icmp/icmp.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Unit test suite for Icmp.dll functions - * - * Copyright 2006 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -/* - * TODO: - * It seems under Windows XP, 2003 and Vista these functions are not implemented - * in iphlpapi. Move the implementation and tests there. - */ - -#include -#include "wine/test.h" - -HANDLE WINAPI IcmpCreateFile(void); -BOOL WINAPI IcmpCloseHandle(HANDLE handle); - -HANDLE handle; - -static void test_IcmpCreateFile(void) -{ - handle=IcmpCreateFile(); - ok(handle!=INVALID_HANDLE_VALUE,"Failed to create icmp file handle\n"); -} - -static void test_IcmpCloseHandle(void) -{ - BOOL result; - result=IcmpCloseHandle(handle); - ok(result!=FALSE,"Failed to close icmp file handle\n"); -} - -START_TEST(icmp) -{ - test_IcmpCreateFile(); - test_IcmpCloseHandle(); -} diff --git a/rostests/winetests/icmp/icmp.rbuild b/rostests/winetests/icmp/icmp.rbuild deleted file mode 100644 index 6dea820a32b..00000000000 --- a/rostests/winetests/icmp/icmp.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - - - - . - - kernel32 - ntdll - icmp - icmp.c - testlist.c - - diff --git a/rostests/winetests/icmp/testlist.c b/rostests/winetests/icmp/testlist.c deleted file mode 100644 index 6800e31c85a..00000000000 --- a/rostests/winetests/icmp/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_icmp(void); - -const struct test winetest_testlist[] = -{ - { "icmp", func_icmp }, - { 0, 0 } -}; diff --git a/rostests/winetests/imm32/imm32.c b/rostests/winetests/imm32/imm32.c deleted file mode 100644 index 591feb337fd..00000000000 --- a/rostests/winetests/imm32/imm32.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Unit tests for imm32 - * - * Copyright (c) 2008 Michael Jung - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include "winuser.h" -#include "imm.h" - -#define NUMELEMS(array) (sizeof((array))/sizeof((array)[0])) - -/* - * msgspy - record and analyse message traces sent to a certain window - */ -static struct _msg_spy { - HWND hwnd; - HHOOK get_msg_hook; - HHOOK call_wnd_proc_hook; - CWPSTRUCT msgs[32]; - unsigned int i_msg; -} msg_spy; - -static LRESULT CALLBACK get_msg_filter(int nCode, WPARAM wParam, LPARAM lParam) -{ - if (HC_ACTION == nCode) { - MSG *msg = (MSG*)lParam; - - if ((msg->hwnd == msg_spy.hwnd) && - (msg_spy.i_msg < NUMELEMS(msg_spy.msgs))) - { - msg_spy.msgs[msg_spy.i_msg].hwnd = msg->hwnd; - msg_spy.msgs[msg_spy.i_msg].message = msg->message; - msg_spy.msgs[msg_spy.i_msg].wParam = msg->wParam; - msg_spy.msgs[msg_spy.i_msg].lParam = msg->lParam; - msg_spy.i_msg++; - } - } - - return CallNextHookEx(msg_spy.get_msg_hook, nCode, wParam, lParam); -} - -static LRESULT CALLBACK call_wnd_proc_filter(int nCode, WPARAM wParam, - LPARAM lParam) -{ - if (HC_ACTION == nCode) { - CWPSTRUCT *cwp = (CWPSTRUCT*)lParam; - - if ((cwp->hwnd == msg_spy.hwnd) && - (msg_spy.i_msg < NUMELEMS(msg_spy.msgs))) - { - memcpy(&msg_spy.msgs[msg_spy.i_msg], cwp, sizeof(msg_spy.msgs[0])); - msg_spy.i_msg++; - } - } - - return CallNextHookEx(msg_spy.call_wnd_proc_hook, nCode, wParam, lParam); -} - -static void msg_spy_pump_msg_queue(void) { - MSG msg; - - while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - return; -} - -static void msg_spy_flush_msgs(void) { - msg_spy_pump_msg_queue(); - msg_spy.i_msg = 0; -} - -static CWPSTRUCT* msg_spy_find_msg(UINT message) { - int i; - - msg_spy_pump_msg_queue(); - - if (msg_spy.i_msg >= NUMELEMS(msg_spy.msgs)) - fprintf(stdout, "%s:%d: msg_spy: message buffer overflow!\n", - __FILE__, __LINE__); - - for (i = 0; i < msg_spy.i_msg; i++) - if (msg_spy.msgs[i].message == message) - return &msg_spy.msgs[i]; - - return NULL; -} - -static void msg_spy_init(HWND hwnd) { - msg_spy.hwnd = hwnd; - msg_spy.get_msg_hook = - SetWindowsHookEx(WH_GETMESSAGE, get_msg_filter, GetModuleHandle(0), - GetCurrentThreadId()); - msg_spy.call_wnd_proc_hook = - SetWindowsHookEx(WH_CALLWNDPROC, call_wnd_proc_filter, - GetModuleHandle(0), GetCurrentThreadId()); - msg_spy.i_msg = 0; - - msg_spy_flush_msgs(); -} - -static void msg_spy_cleanup() { - if (msg_spy.get_msg_hook) - UnhookWindowsHookEx(msg_spy.get_msg_hook); - if (msg_spy.call_wnd_proc_hook) - UnhookWindowsHookEx(msg_spy.call_wnd_proc_hook); - memset(&msg_spy, 0, sizeof(msg_spy)); -} - -/* - * imm32 test cases - Issue some IMM commands on a dummy window and analyse the - * messages being sent to this window in response. - */ -static const char wndcls[] = "winetest_imm32_wndcls"; -static HWND hwnd; - -static int init(void) { - WNDCLASSEX wc; - - wc.cbSize = sizeof(WNDCLASSEX); - wc.style = 0; - wc.lpfnWndProc = DefWindowProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandle(0); - wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); - wc.lpszMenuName = NULL; - wc.lpszClassName = wndcls; - wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); - - if (!RegisterClassExA(&wc)) - return 0; - - hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, wndcls, "Wine imm32.dll test", - WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, - 240, 120, NULL, NULL, GetModuleHandle(0), NULL); - if (!hwnd) - return 0; - - ShowWindow(hwnd, SW_SHOWNORMAL); - UpdateWindow(hwnd); - - msg_spy_init(hwnd); - - return 1; -} - -static void cleanup(void) { - msg_spy_cleanup(); - if (hwnd) - DestroyWindow(hwnd); - UnregisterClass(wndcls, GetModuleHandle(0)); -} - -static int test_ImmNotifyIME(void) { - static const char string[] = "wine"; - char resstr[16] = ""; - HIMC imc; - BOOL ret; - - imc = ImmGetContext(hwnd); - msg_spy_flush_msgs(); - - todo_wine - { - ok(!ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_CANCEL, 0), "Canceling an " - "empty composition string should fail.\n"); - } - ok(!msg_spy_find_msg(WM_IME_COMPOSITION), "Windows does not post " - "WM_IME_COMPOSITION in response to NI_COMPOSITIONSTR / CPS_CANCEL, if " - "the composition string being canceled is empty.\n"); - - ImmSetCompositionString(imc, SCS_SETSTR, string, sizeof(string), NULL, 0); - msg_spy_flush_msgs(); - - ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_CANCEL, 0); - ok(!msg_spy_find_msg(WM_IME_COMPOSITION), "Windows does not post " - "WM_IME_COMPOSITION in response to NI_COMPOSITIONSTR / CPS_CANCEL, if " - "the composition string being canceled is non empty.\n"); - - /* behavior differs between win9x and NT */ - ret = ImmGetCompositionString(imc, GCS_COMPSTR, resstr, sizeof(resstr)); - ok(ret || !ret, "You'll never read this.\n"); - - msg_spy_flush_msgs(); - - todo_wine - { - ok(!ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_CANCEL, 0), "Canceling an " - "empty composition string should fail.\n"); - } - ok(!msg_spy_find_msg(WM_IME_COMPOSITION), "Windows does not post " - "WM_IME_COMPOSITION in response to NI_COMPOSITIONSTR / CPS_CANCEL, if " - "the composition string being canceled is empty.\n"); - - msg_spy_flush_msgs(); - ImmReleaseContext(hwnd, imc); - - return 0; -} - -START_TEST(imm32) { - if (init()) - test_ImmNotifyIME(); - cleanup(); -} diff --git a/rostests/winetests/imm32/imm32.rbuild b/rostests/winetests/imm32/imm32.rbuild deleted file mode 100644 index 4a29d22c5cd..00000000000 --- a/rostests/winetests/imm32/imm32.rbuild +++ /dev/null @@ -1,14 +0,0 @@ - - - - - . - imm32.c - testlist.c - wine - imm32 - user32 - kernel32 - ntdll - - diff --git a/rostests/winetests/imm32/testlist.c b/rostests/winetests/imm32/testlist.c deleted file mode 100644 index a7911d1b0e0..00000000000 --- a/rostests/winetests/imm32/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_imm32(void); - -const struct test winetest_testlist[] = -{ - { "imm32", func_imm32 }, - { 0, 0 } -}; diff --git a/rostests/winetests/kernel32/actctx.c b/rostests/winetests/kernel32/actctx.c deleted file mode 100644 index 4bc6135931f..00000000000 --- a/rostests/winetests/kernel32/actctx.c +++ /dev/null @@ -1,1170 +0,0 @@ -/* - * 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 - */ - -#include "wine/test.h" -#include -#include -#include -#include -#include -#include - -static BOOL (WINAPI *pActivateActCtx)(HANDLE,ULONG_PTR*); -static HANDLE (WINAPI *pCreateActCtxW)(PCACTCTXW); -static BOOL (WINAPI *pDeactivateActCtx)(DWORD,ULONG_PTR); -static BOOL (WINAPI *pFindActCtxSectionStringW)(DWORD,const GUID *,ULONG,LPCWSTR,PACTCTX_SECTION_KEYED_DATA); -static BOOL (WINAPI *pGetCurrentActCtx)(HANDLE *); -static BOOL (WINAPI *pIsDebuggerPresent)(void); -static BOOL (WINAPI *pQueryActCtxW)(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T*); -static VOID (WINAPI *pReleaseActCtx)(HANDLE); - -static const char* strw(LPCWSTR x) -{ - static char buffer[1024]; - char* p = buffer; - - if (!x) return "(nil)"; - else while ((*p++ = *x++)); - return buffer; -} - -static const char manifest1[] = -"" -"" -""; - -static const char manifest2[] = -"" -"" -"" -"" -"" -"" -"" -"" -"" -""; - -static const char manifest3[] = -"" -"" -"" -"wndClass" -"" -""; - -static const char manifest4[] = -"" -"" -"" -"" -"" -"" -"" -"" -"" -""; - -static const char testdep_manifest1[] = -"" -"" -""; - -static const char testdep_manifest2[] = -"" -"" -"" -"" -""; - -static const char testdep_manifest3[] = -" " -"" -"" -"" -"wndClass" -"wndClass2" -"" -""; - -static const char wrong_manifest1[] = -"" -"" -""; - -static const char wrong_manifest2[] = -"" -"" -""; - -static const char wrong_manifest3[] = -"" -"" -""; - -static const char wrong_manifest4[] = -"" -"" -"" -""; - -static const char wrong_manifest5[] = -"" -"" -"" -""; - -static const char wrong_manifest6[] = -"" -"" -""; - -static const char wrong_manifest7[] = -"" -"" -"" -""; - -static const char wrong_manifest8[] = -"" -"" -"" -""; - -static const char wrong_depmanifest1[] = -"" -"" -""; - -static const WCHAR testlib_dll[] = - {'t','e','s','t','l','i','b','.','d','l','l',0}; -static const WCHAR testlib2_dll[] = - {'t','e','s','t','l','i','b','2','.','d','l','l',0}; -static const WCHAR wndClassW[] = - {'w','n','d','C','l','a','s','s',0}; -static const WCHAR wndClass2W[] = - {'w','n','d','C','l','a','s','s','2',0}; -static const WCHAR acr_manifest[] = - {'a','c','r','.','m','a','n','i','f','e','s','t',0}; - -static WCHAR app_dir[MAX_PATH], exe_path[MAX_PATH], work_dir[MAX_PATH], work_dir_subdir[MAX_PATH]; -static WCHAR app_manifest_path[MAX_PATH], manifest_path[MAX_PATH], depmanifest_path[MAX_PATH]; - -static int strcmp_aw(LPCWSTR strw, const char *stra) -{ - WCHAR buf[1024]; - - if (!stra) return 1; - MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, sizeof(buf)/sizeof(WCHAR)); - return lstrcmpW(strw, buf); -} - -static DWORD strlen_aw(const char *str) -{ - return MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0) - 1; -} - -static BOOL create_manifest_file(const char *filename, const char *manifest, int manifest_len, - const char *depfile, const char *depmanifest) -{ - DWORD size; - HANDLE file; - WCHAR path[MAX_PATH]; - - MultiByteToWideChar( CP_ACP, 0, filename, -1, path, MAX_PATH ); - GetFullPathNameW(path, sizeof(manifest_path)/sizeof(WCHAR), manifest_path, NULL); - - if (manifest_len == -1) - manifest_len = strlen(manifest); - - file = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError()); - if(file == INVALID_HANDLE_VALUE) - return FALSE; - WriteFile(file, manifest, manifest_len, &size, NULL); - CloseHandle(file); - - if (depmanifest) - { - MultiByteToWideChar( CP_ACP, 0, depfile, -1, path, MAX_PATH ); - GetFullPathNameW(path, sizeof(depmanifest_path)/sizeof(WCHAR), depmanifest_path, NULL); - file = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError()); - if(file == INVALID_HANDLE_VALUE) - return FALSE; - WriteFile(file, depmanifest, strlen(depmanifest), &size, NULL); - CloseHandle(file); - } - return TRUE; -} - -static BOOL create_wide_manifest(const char *filename, const char *manifest, BOOL fBOM, BOOL fReverse) -{ - WCHAR *wmanifest = HeapAlloc(GetProcessHeap(), 0, (strlen(manifest)+2) * sizeof(WCHAR)); - BOOL ret; - int offset = (fBOM ? 0 : 1); - - MultiByteToWideChar(CP_ACP, 0, manifest, -1, &wmanifest[1], (strlen(manifest)+1) * sizeof(WCHAR)); - wmanifest[0] = 0xfeff; - if (fReverse) - { - size_t i; - for (i = 0; i < strlen(manifest)+1; i++) - wmanifest[i] = (wmanifest[i] << 8) | ((wmanifest[i] >> 8) & 0xff); - } - ret = create_manifest_file(filename, (char *)&wmanifest[offset], (strlen(manifest)+1-offset) * sizeof(WCHAR), NULL, NULL); - HeapFree(GetProcessHeap(), 0, wmanifest); - return ret; -} - -typedef struct { - ULONG format_version; - ULONG assembly_cnt; - ULONG root_manifest_type; - LPWSTR root_manifest_path; - ULONG root_config_type; - ULONG app_dir_type; - LPCWSTR app_dir; -} detailed_info_t; - -static const detailed_info_t detailed_info0 = { - 0, 0, 0, NULL, 0, 0, NULL -}; - -static const detailed_info_t detailed_info1 = { - 1, 1, ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE, manifest_path, - ACTIVATION_CONTEXT_PATH_TYPE_NONE, ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE, - work_dir, -}; - -static const detailed_info_t detailed_info1_child = { - 1, 1, ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE, app_manifest_path, - ACTIVATION_CONTEXT_PATH_TYPE_NONE, ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE, - app_dir, -}; - -static const detailed_info_t detailed_info2 = { - 1, 2, ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE, manifest_path, - ACTIVATION_CONTEXT_PATH_TYPE_NONE, ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE, - work_dir, -}; - -static void test_detailed_info(HANDLE handle, const detailed_info_t *exinfo) -{ - ACTIVATION_CONTEXT_DETAILED_INFORMATION detailed_info_tmp, *detailed_info; - SIZE_T size, exsize, retsize; - BOOL b; - - exsize = sizeof(ACTIVATION_CONTEXT_DETAILED_INFORMATION) - + (exinfo->root_manifest_path ? (lstrlenW(exinfo->root_manifest_path)+1)*sizeof(WCHAR):0) - + (exinfo->app_dir ? (lstrlenW(exinfo->app_dir)+1)*sizeof(WCHAR) : 0); - - if(exsize != sizeof(ACTIVATION_CONTEXT_DETAILED_INFORMATION)) { - size = 0xdeadbeef; - b = pQueryActCtxW(0, handle, NULL, - ActivationContextDetailedInformation, &detailed_info_tmp, - sizeof(detailed_info_tmp), &size); - ok(!b, "QueryActCtx succeeded\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetLastError() = %u\n", GetLastError()); - ok(size == exsize, "size=%ld, expected %ld\n", size, exsize); - }else { - size = sizeof(ACTIVATION_CONTEXT_DETAILED_INFORMATION); - } - - detailed_info = HeapAlloc(GetProcessHeap(), 0, size); - memset(detailed_info, 0xfe, size); - b = pQueryActCtxW(0, handle, NULL, - ActivationContextDetailedInformation, detailed_info, - size, &retsize); - ok(b, "QueryActCtx failed: %u\n", GetLastError()); - ok(retsize == exsize, "size=%ld, expected %ld\n", retsize, exsize); - - ok(detailed_info->dwFlags == 0, "detailed_info->dwFlags=%x\n", detailed_info->dwFlags); - ok(detailed_info->ulFormatVersion == exinfo->format_version, - "detailed_info->ulFormatVersion=%u, expected %u\n", detailed_info->ulFormatVersion, - exinfo->format_version); - ok(detailed_info->ulAssemblyCount == exinfo->assembly_cnt, - "detailed_info->ulAssemblyCount=%u, expected %u\n", detailed_info->ulAssemblyCount, - exinfo->assembly_cnt); - ok(detailed_info->ulRootManifestPathType == exinfo->root_manifest_type, - "detailed_info->ulRootManifestPathType=%u, expected %u\n", - detailed_info->ulRootManifestPathType, exinfo->root_manifest_type); - ok(detailed_info->ulRootManifestPathChars == - (exinfo->root_manifest_path ? lstrlenW(exinfo->root_manifest_path) : 0), - "detailed_info->ulRootManifestPathChars=%u, expected %u\n", - detailed_info->ulRootManifestPathChars, - exinfo->root_manifest_path ?lstrlenW(exinfo->root_manifest_path) : 0); - ok(detailed_info->ulRootConfigurationPathType == exinfo->root_config_type, - "detailed_info->ulRootConfigurationPathType=%u, expected %u\n", - detailed_info->ulRootConfigurationPathType, exinfo->root_config_type); - ok(detailed_info->ulRootConfigurationPathChars == 0, - "detailed_info->ulRootConfigurationPathChars=%d\n", detailed_info->ulRootConfigurationPathChars); - ok(detailed_info->ulAppDirPathType == exinfo->app_dir_type, - "detailed_info->ulAppDirPathType=%u, expected %u\n", detailed_info->ulAppDirPathType, - exinfo->app_dir_type); - ok(detailed_info->ulAppDirPathChars == (exinfo->app_dir ? lstrlenW(exinfo->app_dir) : 0), - "detailed_info->ulAppDirPathChars=%u, expected %u\n", - detailed_info->ulAppDirPathChars, exinfo->app_dir ? lstrlenW(exinfo->app_dir) : 0); - if(exinfo->root_manifest_path) { - ok(detailed_info->lpRootManifestPath != NULL, "detailed_info->lpRootManifestPath == NULL\n"); - if(detailed_info->lpRootManifestPath) - ok(!lstrcmpiW(detailed_info->lpRootManifestPath, exinfo->root_manifest_path), - "unexpected detailed_info->lpRootManifestPath\n"); - }else { - ok(detailed_info->lpRootManifestPath == NULL, "detailed_info->lpRootManifestPath != NULL\n"); - } - ok(detailed_info->lpRootConfigurationPath == NULL, - "detailed_info->lpRootConfigurationPath=%p\n", detailed_info->lpRootConfigurationPath); - if(exinfo->app_dir) { - ok(detailed_info->lpAppDirPath != NULL, "detailed_info->lpAppDirPath == NULL\n"); - if(detailed_info->lpAppDirPath) - ok(!lstrcmpiW(exinfo->app_dir, detailed_info->lpAppDirPath), - "unexpected detailed_info->lpAppDirPath\n%s\n",strw(detailed_info->lpAppDirPath)); - }else { - ok(detailed_info->lpAppDirPath == NULL, "detailed_info->lpAppDirPath != NULL\n"); - } - - HeapFree(GetProcessHeap(), 0, detailed_info); -} - -typedef struct { - ULONG flags; -/* ULONG manifest_path_type; FIXME */ - LPCWSTR manifest_path; - LPCSTR encoded_assembly_id; - BOOL has_assembly_dir; -} info_in_assembly; - -static const info_in_assembly manifest1_info = { - 1, manifest_path, - "Wine.Test,type=\"win32\",version=\"1.0.0.0\"", - FALSE -}; - -static const info_in_assembly manifest1_child_info = { - 1, app_manifest_path, - "Wine.Test,type=\"win32\",version=\"1.0.0.0\"", - FALSE -}; - -static const info_in_assembly manifest2_info = { - 1, manifest_path, - "Wine.Test,type=\"win32\",version=\"1.2.3.4\"", - FALSE -}; - -static const info_in_assembly manifest3_info = { - 1, manifest_path, - "Wine.Test,publicKeyToken=\"6595b6414666f1df\",type=\"win32\",version=\"1.2.3.4\"", - FALSE -}; - -static const info_in_assembly manifest4_info = { - 1, manifest_path, - "Wine.Test,type=\"win32\",version=\"1.2.3.4\"", - FALSE -}; - -static const info_in_assembly depmanifest1_info = { - 0x10, depmanifest_path, - "testdep,processorArchitecture=\"x86\"," - "type=\"win32\",version=\"6.5.4.3\"", - TRUE -}; - -static const info_in_assembly depmanifest2_info = { - 0x10, depmanifest_path, - "testdep,processorArchitecture=\"x86\"," - "type=\"win32\",version=\"6.5.4.3\"", - TRUE -}; - -static const info_in_assembly depmanifest3_info = { - 0x10, depmanifest_path, - "testdep,processorArchitecture=\"x86\",type=\"win32\",version=\"6.5.4.3\"", - TRUE -}; - -static const info_in_assembly manifest_comctrl_info = { - 0, NULL, NULL, TRUE /* These values may differ between Windows installations */ -}; - -static void test_info_in_assembly(HANDLE handle, DWORD id, const info_in_assembly *exinfo) -{ - ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *info, info_tmp; - SIZE_T size, exsize; - ULONG len; - BOOL b; - - exsize = sizeof(ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION); - if (exinfo->manifest_path) exsize += (lstrlenW(exinfo->manifest_path)+1) * sizeof(WCHAR); - if (exinfo->encoded_assembly_id) exsize += (strlen_aw(exinfo->encoded_assembly_id) + 1) * sizeof(WCHAR); - - size = 0xdeadbeef; - b = pQueryActCtxW(0, handle, &id, - AssemblyDetailedInformationInActivationContext, &info_tmp, - sizeof(info_tmp), &size); - ok(!b, "QueryActCtx succeeded\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetLastError() = %u\n", GetLastError()); - - ok(size >= exsize, "size=%lu, expected %lu\n", size, exsize); - - if (size == 0xdeadbeef) - { - skip("bad size\n"); - return; - } - - info = HeapAlloc(GetProcessHeap(), 0, size); - memset(info, 0xfe, size); - - size = 0xdeadbeef; - b = pQueryActCtxW(0, handle, &id, - AssemblyDetailedInformationInActivationContext, info, size, &size); - ok(b, "QueryActCtx failed: %u\n", GetLastError()); - if (!exinfo->manifest_path) - exsize += info->ulManifestPathLength + sizeof(WCHAR); - if (!exinfo->encoded_assembly_id) - exsize += info->ulEncodedAssemblyIdentityLength + sizeof(WCHAR); - if (exinfo->has_assembly_dir) - exsize += info->ulAssemblyDirectoryNameLength + sizeof(WCHAR); - ok(size == exsize, "size=%lu, expected %lu\n", size, exsize); - - if (0) /* FIXME: flags meaning unknown */ - { - ok((info->ulFlags) == exinfo->flags, "info->ulFlags = %x, expected %x\n", - info->ulFlags, exinfo->flags); - } - if(exinfo->encoded_assembly_id) { - len = strlen_aw(exinfo->encoded_assembly_id)*sizeof(WCHAR); - ok(info->ulEncodedAssemblyIdentityLength == len, - "info->ulEncodedAssemblyIdentityLength = %u, expected %u\n", - info->ulEncodedAssemblyIdentityLength, len); - } else { - ok(info->ulEncodedAssemblyIdentityLength != 0, - "info->ulEncodedAssemblyIdentityLength == 0\n"); - } - ok(info->ulManifestPathType == ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE, - "info->ulManifestPathType = %x\n", info->ulManifestPathType); - if(exinfo->manifest_path) { - len = lstrlenW(exinfo->manifest_path)*sizeof(WCHAR); - ok(info->ulManifestPathLength == len, "info->ulManifestPathLength = %u, expected %u\n", - info->ulManifestPathLength, len); - } else { - ok(info->ulManifestPathLength != 0, "info->ulManifestPathLength == 0\n"); - } - - ok(info->ulPolicyPathType == ACTIVATION_CONTEXT_PATH_TYPE_NONE, - "info->ulPolicyPathType = %x\n", info->ulPolicyPathType); - ok(info->ulPolicyPathLength == 0, - "info->ulPolicyPathLength = %u, expected 0\n", info->ulPolicyPathLength); - ok(info->ulMetadataSatelliteRosterIndex == 0, "info->ulMetadataSatelliteRosterIndex = %x\n", - info->ulMetadataSatelliteRosterIndex); - ok(info->ulManifestVersionMajor == 1,"info->ulManifestVersionMajor = %x\n", - info->ulManifestVersionMajor); - ok(info->ulManifestVersionMinor == 0, "info->ulManifestVersionMinor = %x\n", - info->ulManifestVersionMinor); - ok(info->ulPolicyVersionMajor == 0, "info->ulPolicyVersionMajor = %x\n", - info->ulPolicyVersionMajor); - ok(info->ulPolicyVersionMinor == 0, "info->ulPolicyVersionMinor = %x\n", - info->ulPolicyVersionMinor); - if(exinfo->has_assembly_dir) - ok(info->ulAssemblyDirectoryNameLength != 0, - "info->ulAssemblyDirectoryNameLength == 0\n"); - else - ok(info->ulAssemblyDirectoryNameLength == 0, - "info->ulAssemblyDirectoryNameLength != 0\n"); - - ok(info->lpAssemblyEncodedAssemblyIdentity != NULL, - "info->lpAssemblyEncodedAssemblyIdentity == NULL\n"); - if(info->lpAssemblyEncodedAssemblyIdentity && exinfo->encoded_assembly_id) { - ok(!strcmp_aw(info->lpAssemblyEncodedAssemblyIdentity, exinfo->encoded_assembly_id), - "unexpected info->lpAssemblyEncodedAssemblyIdentity %s / %s\n", - strw(info->lpAssemblyEncodedAssemblyIdentity), exinfo->encoded_assembly_id); - } - if(exinfo->manifest_path) { - ok(info->lpAssemblyManifestPath != NULL, "info->lpAssemblyManifestPath == NULL\n"); - if(info->lpAssemblyManifestPath) - ok(!lstrcmpiW(info->lpAssemblyManifestPath, exinfo->manifest_path), - "unexpected info->lpAssemblyManifestPath\n"); - }else { - ok(info->lpAssemblyManifestPath != NULL, "info->lpAssemblyManifestPath == NULL\n"); - } - - ok(info->lpAssemblyPolicyPath == NULL, "info->lpAssemblyPolicyPath != NULL\n"); - if(info->lpAssemblyPolicyPath) - ok(*(WORD*)info->lpAssemblyPolicyPath == 0, "info->lpAssemblyPolicyPath is not empty\n"); - if(exinfo->has_assembly_dir) - ok(info->lpAssemblyDirectoryName != NULL, "info->lpAssemblyDirectoryName == NULL\n"); - else - ok(info->lpAssemblyDirectoryName == NULL, "info->lpAssemblyDirectoryName = %s\n", - strw(info->lpAssemblyDirectoryName)); - HeapFree(GetProcessHeap(), 0, info); -} - -static void test_file_info(HANDLE handle, ULONG assid, ULONG fileid, LPCWSTR filename) -{ - ASSEMBLY_FILE_DETAILED_INFORMATION *info, info_tmp; - ACTIVATION_CONTEXT_QUERY_INDEX index = {assid, fileid}; - SIZE_T size, exsize; - BOOL b; - - exsize = sizeof(ASSEMBLY_FILE_DETAILED_INFORMATION) - +(lstrlenW(filename)+1)*sizeof(WCHAR); - - size = 0xdeadbeef; - b = pQueryActCtxW(0, handle, &index, - FileInformationInAssemblyOfAssemblyInActivationContext, &info_tmp, - sizeof(info_tmp), &size); - ok(!b, "QueryActCtx succeeded\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetLastError() = %u\n", GetLastError()); - ok(size == exsize, "size=%lu, expected %lu\n", size, exsize); - - if(size == 0xdeadbeef) - { - skip("bad size\n"); - return; - } - - info = HeapAlloc(GetProcessHeap(), 0, size); - memset(info, 0xfe, size); - - b = pQueryActCtxW(0, handle, &index, - FileInformationInAssemblyOfAssemblyInActivationContext, info, size, &size); - ok(b, "QueryActCtx failed: %u\n", GetLastError()); - ok(!size, "size=%lu, expected 0\n", size); - - ok(info->ulFlags == 2, "info->ulFlags=%x, expected 2\n", info->ulFlags); - ok(info->ulFilenameLength == lstrlenW(filename)*sizeof(WCHAR), - "info->ulFilenameLength=%u, expected %u*sizeof(WCHAR)\n", - info->ulFilenameLength, lstrlenW(filename)); - ok(info->ulPathLength == 0, "info->ulPathLength=%u\n", info->ulPathLength); - ok(info->lpFileName != NULL, "info->lpFileName == NULL\n"); - if(info->lpFileName) - ok(!lstrcmpiW(info->lpFileName, filename), "unexpected info->lpFileName\n"); - ok(info->lpFilePath == NULL, "info->lpFilePath != NULL\n"); - HeapFree(GetProcessHeap(), 0, info); -} - -static HANDLE test_create(const char *file, const char *manifest) -{ - ACTCTXW actctx; - HANDLE handle; - WCHAR path[MAX_PATH]; - - MultiByteToWideChar( CP_ACP, 0, file, -1, path, MAX_PATH ); - memset(&actctx, 0, sizeof(ACTCTXW)); - actctx.cbSize = sizeof(ACTCTXW); - actctx.lpSource = path; - - handle = pCreateActCtxW(&actctx); - ok(handle != INVALID_HANDLE_VALUE, "handle == INVALID_HANDLE_VALUE, error %u\n", GetLastError()); - - ok(actctx.cbSize == sizeof(actctx), "actctx.cbSize=%d\n", actctx.cbSize); - ok(actctx.dwFlags == 0, "actctx.=%d\n", actctx.dwFlags); - ok(actctx.lpSource == path, "actctx.lpSource=%p\n", actctx.lpSource); - ok(actctx.wProcessorArchitecture == 0, - "actctx.wProcessorArchitecture=%d\n", actctx.wProcessorArchitecture); - ok(actctx.wLangId == 0, "actctx.wLangId=%d\n", actctx.wLangId); - ok(actctx.lpAssemblyDirectory == NULL, - "actctx.lpAssemblyDirectory=%p\n", actctx.lpAssemblyDirectory); - ok(actctx.lpResourceName == NULL, "actctx.lpResourceName=%p\n", actctx.lpResourceName); - ok(actctx.lpApplicationName == NULL, "actctx.lpApplocationName=%p\n", - actctx.lpApplicationName); - ok(actctx.hModule == NULL, "actctx.hModule=%p\n", actctx.hModule); - - return handle; -} - -static void test_create_and_fail(const char *manifest, const char *depmanifest, int todo) -{ - ACTCTXW actctx; - HANDLE handle; - WCHAR path[MAX_PATH]; - - MultiByteToWideChar( CP_ACP, 0, "bad.manifest", -1, path, MAX_PATH ); - memset(&actctx, 0, sizeof(ACTCTXW)); - actctx.cbSize = sizeof(ACTCTXW); - actctx.lpSource = path; - - create_manifest_file("bad.manifest", manifest, -1, "testdep.manifest", depmanifest); - handle = pCreateActCtxW(&actctx); - if (todo) todo_wine - { - ok(handle == INVALID_HANDLE_VALUE, "handle != INVALID_HANDLE_VALUE\n"); - ok(GetLastError() == ERROR_SXS_CANT_GEN_ACTCTX, "GetLastError == %u\n", GetLastError()); - } - else - { - ok(handle == INVALID_HANDLE_VALUE, "handle != INVALID_HANDLE_VALUE\n"); - ok(GetLastError() == ERROR_SXS_CANT_GEN_ACTCTX, "GetLastError == %u\n", GetLastError()); - } - if (handle != INVALID_HANDLE_VALUE) pReleaseActCtx( handle ); - DeleteFileA("bad.manifest"); - DeleteFileA("testdep.manifest"); -} - -static void test_create_wide_and_fail(const char *manifest, BOOL fBOM) -{ - ACTCTXW actctx; - HANDLE handle; - WCHAR path[MAX_PATH]; - - MultiByteToWideChar( CP_ACP, 0, "bad.manifest", -1, path, MAX_PATH ); - memset(&actctx, 0, sizeof(ACTCTXW)); - actctx.cbSize = sizeof(ACTCTXW); - actctx.lpSource = path; - - create_wide_manifest("bad.manifest", manifest, fBOM, FALSE); - handle = pCreateActCtxW(&actctx); - ok(handle == INVALID_HANDLE_VALUE, "handle != INVALID_HANDLE_VALUE\n"); - ok(GetLastError() == ERROR_SXS_CANT_GEN_ACTCTX, "GetLastError == %u\n", GetLastError()); - - if (handle != INVALID_HANDLE_VALUE) pReleaseActCtx( handle ); - DeleteFileA("bad.manifest"); -} - -static void test_create_fail(void) -{ - ACTCTXW actctx; - HANDLE handle; - WCHAR path[MAX_PATH]; - - MultiByteToWideChar( CP_ACP, 0, "nonexistent.manifest", -1, path, MAX_PATH ); - memset(&actctx, 0, sizeof(ACTCTXW)); - actctx.cbSize = sizeof(ACTCTXW); - actctx.lpSource = path; - - handle = pCreateActCtxW(&actctx); - ok(handle == INVALID_HANDLE_VALUE, "handle != INVALID_HANDLE_VALUE\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, "GetLastError == %u\n", GetLastError()); - - trace("wrong_manifest1\n"); - test_create_and_fail(wrong_manifest1, NULL, 0 ); - trace("wrong_manifest2\n"); - test_create_and_fail(wrong_manifest2, NULL, 0 ); - trace("wrong_manifest3\n"); - test_create_and_fail(wrong_manifest3, NULL, 1 ); - trace("wrong_manifest4\n"); - test_create_and_fail(wrong_manifest4, NULL, 1 ); - trace("wrong_manifest5\n"); - test_create_and_fail(wrong_manifest5, NULL, 0 ); - trace("wrong_manifest6\n"); - test_create_and_fail(wrong_manifest6, NULL, 0 ); - trace("wrong_manifest7\n"); - test_create_and_fail(wrong_manifest7, NULL, 1 ); - trace("wrong_manifest8\n"); - test_create_and_fail(wrong_manifest8, NULL, 0 ); - trace("UTF-16 manifest1 without BOM\n"); - test_create_wide_and_fail(manifest1, FALSE ); - trace("manifest2\n"); - test_create_and_fail(manifest2, NULL, 0 ); - trace("manifest2+depmanifest1\n"); - test_create_and_fail(manifest2, wrong_depmanifest1, 0 ); -} - -static void test_find_dll_redirection(HANDLE handle, LPCWSTR libname, ULONG exid) -{ - ACTCTX_SECTION_KEYED_DATA data; - DWORD *p; - BOOL ret; - - memset(&data, 0xfe, sizeof(data)); - data.cbSize = sizeof(data); - - ret = pFindActCtxSectionStringW(0, NULL, - ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, - libname, &data); - ok(ret, "FindActCtxSectionStringW failed: %u\n", GetLastError()); - if(!ret) - { - skip("couldn't find %s\n",strw(libname)); - return; - } - - ok(data.cbSize == sizeof(data), "data.cbSize=%u\n", data.cbSize); - ok(data.ulDataFormatVersion == 1, "data.ulDataFormatVersion=%u\n", data.ulDataFormatVersion); - ok(data.lpData != NULL, "data.lpData == NULL\n"); - ok(data.ulLength == 20, "data.ulLength=%u\n", data.ulLength); - - p = data.lpData; - if(ret && p) todo_wine { - ok(p[0] == 20 && p[1] == 2 && p[2] == 0 && p[3] == 0 && p[4] == 0, - "wrong data %u,%u,%u,%u,%u\n",p[0], p[1], p[2], p[3], p[4]); - } - - ok(data.lpSectionGlobalData == NULL, "data.lpSectionGlobalData != NULL\n"); - ok(data.ulSectionGlobalDataLength == 0, "data.ulSectionGlobalDataLength=%u\n", - data.ulSectionGlobalDataLength); - ok(data.lpSectionBase != NULL, "data.lpSectionBase == NULL\n"); - /* ok(data.ulSectionTotalLength == ??, "data.ulSectionTotalLength=%u\n", - data.ulSectionTotalLength); */ - ok(data.hActCtx == NULL, "data.hActCtx=%p\n", data.hActCtx); - ok(data.ulAssemblyRosterIndex == exid, "data.ulAssemblyRosterIndex=%u, expected %u\n", - data.ulAssemblyRosterIndex, exid); - - memset(&data, 0xfe, sizeof(data)); - data.cbSize = sizeof(data); - - ret = pFindActCtxSectionStringW(FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, NULL, - ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, - libname, &data); - ok(ret, "FindActCtxSectionStringW failed: %u\n", GetLastError()); - if(!ret) - { - skip("couldn't find\n"); - return; - } - - ok(data.cbSize == sizeof(data), "data.cbSize=%u\n", data.cbSize); - ok(data.ulDataFormatVersion == 1, "data.ulDataFormatVersion=%u\n", data.ulDataFormatVersion); - ok(data.lpData != NULL, "data.lpData == NULL\n"); - ok(data.ulLength == 20, "data.ulLength=%u\n", data.ulLength); - ok(data.lpSectionGlobalData == NULL, "data.lpSectionGlobalData != NULL\n"); - ok(data.ulSectionGlobalDataLength == 0, "data.ulSectionGlobalDataLength=%u\n", - data.ulSectionGlobalDataLength); - ok(data.lpSectionBase != NULL, "data.lpSectionBase == NULL\n"); - /* ok(data.ulSectionTotalLength == ?? , "data.ulSectionTotalLength=%u\n", - data.ulSectionTotalLength); */ - ok(data.hActCtx == handle, "data.hActCtx=%p\n", data.hActCtx); - ok(data.ulAssemblyRosterIndex == exid, "data.ulAssemblyRosterIndex=%u, expected %u\n", - data.ulAssemblyRosterIndex, exid); - - pReleaseActCtx(handle); -} - -static void test_find_window_class(HANDLE handle, LPCWSTR clsname, ULONG exid) -{ - ACTCTX_SECTION_KEYED_DATA data; - BOOL ret; - - memset(&data, 0xfe, sizeof(data)); - data.cbSize = sizeof(data); - - ret = pFindActCtxSectionStringW(0, NULL, - ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, - clsname, &data); - ok(ret, "FindActCtxSectionStringW failed: %u\n", GetLastError()); - if(!ret) - { - skip("couldn't find\n"); - return; - } - - ok(data.cbSize == sizeof(data), "data.cbSize=%u\n", data.cbSize); - ok(data.ulDataFormatVersion == 1, "data.ulDataFormatVersion=%u\n", data.ulDataFormatVersion); - ok(data.lpData != NULL, "data.lpData == NULL\n"); - /* ok(data.ulLength == ??, "data.ulLength=%u\n", data.ulLength); */ - ok(data.lpSectionGlobalData == NULL, "data.lpSectionGlobalData != NULL\n"); - ok(data.ulSectionGlobalDataLength == 0, "data.ulSectionGlobalDataLength=%u\n", - data.ulSectionGlobalDataLength); - ok(data.lpSectionBase != NULL, "data.lpSectionBase == NULL\n"); - /* ok(data.ulSectionTotalLength == 0, "data.ulSectionTotalLength=%u\n", - data.ulSectionTotalLength); FIXME */ - ok(data.hActCtx == NULL, "data.hActCtx=%p\n", data.hActCtx); - ok(data.ulAssemblyRosterIndex == exid, "data.ulAssemblyRosterIndex=%u, expected %u\n", - data.ulAssemblyRosterIndex, exid); - - memset(&data, 0xfe, sizeof(data)); - data.cbSize = sizeof(data); - - ret = pFindActCtxSectionStringW(FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX, NULL, - ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, - clsname, &data); - ok(ret, "FindActCtxSectionStringW failed: %u\n", GetLastError()); - if(!ret) - { - skip("couldn't find\n"); - return; - } - - ok(data.cbSize == sizeof(data), "data.cbSize=%u\n", data.cbSize); - ok(data.ulDataFormatVersion == 1, "data.ulDataFormatVersion=%u\n", data.ulDataFormatVersion); - ok(data.lpData != NULL, "data.lpData == NULL\n"); - /* ok(data.ulLength == ??, "data.ulLength=%u\n", data.ulLength); FIXME */ - ok(data.lpSectionGlobalData == NULL, "data.lpSectionGlobalData != NULL\n"); - ok(data.ulSectionGlobalDataLength == 0, "data.ulSectionGlobalDataLength=%u\n", - data.ulSectionGlobalDataLength); - ok(data.lpSectionBase != NULL, "data.lpSectionBase == NULL\n"); - /* ok(data.ulSectionTotalLength == 0, "data.ulSectionTotalLength=%u\n", - data.ulSectionTotalLength); FIXME */ - ok(data.hActCtx == handle, "data.hActCtx=%p\n", data.hActCtx); - ok(data.ulAssemblyRosterIndex == exid, "data.ulAssemblyRosterIndex=%u, expected %u\n", - data.ulAssemblyRosterIndex, exid); - - pReleaseActCtx(handle); -} - -static void test_find_string_fail(void) -{ - ACTCTX_SECTION_KEYED_DATA data = {sizeof(data)}; - BOOL ret; - - ret = pFindActCtxSectionStringW(0, NULL, 100, testlib_dll, &data); - ok(!ret, "FindActCtxSectionStringW succeeded\n"); - ok(GetLastError() == ERROR_SXS_SECTION_NOT_FOUND, "GetLastError()=%u\n", GetLastError()); - - ret = pFindActCtxSectionStringW(0, NULL, ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, - testlib2_dll, &data); - ok(!ret, "FindActCtxSectionStringW succeeded\n"); - ok(GetLastError() == ERROR_SXS_KEY_NOT_FOUND, "GetLastError()=%u\n", GetLastError()); - - ret = pFindActCtxSectionStringW(0, NULL, ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, - testlib_dll, NULL); - ok(!ret, "FindActCtxSectionStringW succeeded\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError()=%u\n", GetLastError()); - - ret = pFindActCtxSectionStringW(0, NULL, ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, - NULL, &data); - ok(!ret, "FindActCtxSectionStringW succeeded\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError()=%u\n", GetLastError()); - - data.cbSize = 0; - ret = pFindActCtxSectionStringW(0, NULL, ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, - testlib_dll, &data); - ok(!ret, "FindActCtxSectionStringW succeeded\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError()=%u\n", GetLastError()); - - data.cbSize = 35; - ret = pFindActCtxSectionStringW(0, NULL, ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, - testlib_dll, &data); - ok(!ret, "FindActCtxSectionStringW succeeded\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError()=%u\n", GetLastError()); -} - -static void test_actctx(void) -{ - ULONG_PTR cookie; - HANDLE handle; - BOOL b; - - test_create_fail(); - - trace("default actctx\n"); - - b = pGetCurrentActCtx(&handle); - ok(handle == NULL, "handle = %p, expected NULL\n", handle); - ok(b, "GetCurrentActCtx failed: %u\n", GetLastError()); - if(b) { - test_detailed_info(handle, &detailed_info0); - pReleaseActCtx(handle); - } - - if(!create_manifest_file("test1.manifest", manifest1, -1, NULL, NULL)) { - skip("Could not create manifest file\n"); - return; - } - - trace("manifest1\n"); - - handle = test_create("test1.manifest", manifest1); - DeleteFileA("test1.manifest"); - if(handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info1); - test_info_in_assembly(handle, 1, &manifest1_info); - - if (pIsDebuggerPresent && !pIsDebuggerPresent()) - { - /* CloseHandle will generate an exception if a debugger is present */ - b = CloseHandle(handle); - ok(!b, "CloseHandle succeeded\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, "GetLastError() == %u\n", GetLastError()); - } - - pReleaseActCtx(handle); - } - - if(!create_manifest_file("test2.manifest", manifest2, -1, "testdep.manifest", testdep_manifest1)) { - skip("Could not create manifest file\n"); - return; - } - - trace("manifest2 depmanifest1\n"); - - handle = test_create("test2.manifest", manifest2); - DeleteFileA("test2.manifest"); - DeleteFileA("testdep.manifest"); - if(handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info2); - test_info_in_assembly(handle, 1, &manifest2_info); - test_info_in_assembly(handle, 2, &depmanifest1_info); - pReleaseActCtx(handle); - } - - if(!create_manifest_file("test3.manifest", manifest2, -1, "testdep.manifest", testdep_manifest2)) { - skip("Could not create manifest file\n"); - return; - } - - trace("manifest2 depmanifest2\n"); - - handle = test_create("test3.manifest", manifest2); - DeleteFileA("test3.manifest"); - DeleteFileA("testdep.manifest"); - if(handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info2); - test_info_in_assembly(handle, 1, &manifest2_info); - test_info_in_assembly(handle, 2, &depmanifest2_info); - test_file_info(handle, 1, 0, testlib_dll); - test_file_info(handle, 1, 1, testlib2_dll); - - b = pActivateActCtx(handle, &cookie); - ok(b, "ActivateActCtx failed: %u\n", GetLastError()); - test_find_dll_redirection(handle, testlib_dll, 2); - test_find_dll_redirection(handle, testlib2_dll, 2); - b = pDeactivateActCtx(0, cookie); - ok(b, "DeactivateActCtx failed: %u\n", GetLastError()); - - pReleaseActCtx(handle); - } - - trace("manifest2 depmanifest3\n"); - - if(!create_manifest_file("test2-3.manifest", manifest2, -1, "testdep.manifest", testdep_manifest3)) { - skip("Could not create manifest file\n"); - return; - } - - handle = test_create("test2-3.manifest", manifest2); - DeleteFileA("test2-3.manifest"); - DeleteFileA("testdep.manifest"); - if(handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info2); - test_info_in_assembly(handle, 1, &manifest2_info); - test_info_in_assembly(handle, 2, &depmanifest3_info); - test_file_info(handle, 1, 0, testlib_dll); - test_file_info(handle, 1, 1, testlib2_dll); - - b = pActivateActCtx(handle, &cookie); - ok(b, "ActivateActCtx failed: %u\n", GetLastError()); - test_find_dll_redirection(handle, testlib_dll, 2); - test_find_dll_redirection(handle, testlib2_dll, 2); - test_find_window_class(handle, wndClassW, 2); - test_find_window_class(handle, wndClass2W, 2); - b = pDeactivateActCtx(0, cookie); - ok(b, "DeactivateActCtx failed: %u\n", GetLastError()); - - pReleaseActCtx(handle); - } - - trace("manifest3\n"); - - if(!create_manifest_file("test3.manifest", manifest3, -1, NULL, NULL)) { - skip("Could not create manifest file\n"); - return; - } - - handle = test_create("test3.manifest", manifest3); - DeleteFileA("test3.manifest"); - if(handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info1); - test_info_in_assembly(handle, 1, &manifest3_info); - test_file_info(handle, 0, 0, testlib_dll); - - b = pActivateActCtx(handle, &cookie); - ok(b, "ActivateActCtx failed: %u\n", GetLastError()); - test_find_dll_redirection(handle, testlib_dll, 1); - test_find_dll_redirection(handle, testlib_dll, 1); - test_find_string_fail(); - b = pDeactivateActCtx(0, cookie); - ok(b, "DeactivateActCtx failed: %u\n", GetLastError()); - - pReleaseActCtx(handle); - } - - trace("manifest4\n"); - - if(!create_manifest_file("test4.manifest", manifest4, -1, NULL, NULL)) { - skip("Could not create manifest file\n"); - return; - } - - handle = test_create("test4.manifest", manifest4); - DeleteFileA("test4.manifest"); - DeleteFileA("testdep.manifest"); - if(handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info2); - test_info_in_assembly(handle, 1, &manifest4_info); - test_info_in_assembly(handle, 2, &manifest_comctrl_info); - pReleaseActCtx(handle); - } - - trace("manifest1 in subdir\n"); - - CreateDirectoryW(work_dir_subdir, NULL); - if (SetCurrentDirectoryW(work_dir_subdir)) - { - if(!create_manifest_file("..\\test1.manifest", manifest1, -1, NULL, NULL)) { - skip("Could not create manifest file\n"); - return; - } - handle = test_create("..\\test1.manifest", manifest1); - DeleteFileA("..\\test1.manifest"); - if(handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info1); - test_info_in_assembly(handle, 1, &manifest1_info); - pReleaseActCtx(handle); - } - SetCurrentDirectoryW(work_dir); - } - else - skip("Couldn't change directory\n"); - RemoveDirectoryW(work_dir_subdir); - - trace("UTF-16 manifest1, with BOM\n"); - if(!create_wide_manifest("test1.manifest", manifest1, TRUE, FALSE)) { - skip("Could not create manifest file\n"); - return; - } - - handle = test_create("test1.manifest", manifest1); - DeleteFileA("test1.manifest"); - if (handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info1); - test_info_in_assembly(handle, 1, &manifest1_info); - pReleaseActCtx(handle); - } - - trace("UTF-16 manifest1, reverse endian, with BOM\n"); - if(!create_wide_manifest("test1.manifest", manifest1, TRUE, TRUE)) { - skip("Could not create manifest file\n"); - return; - } - - handle = test_create("test1.manifest", manifest1); - DeleteFileA("test1.manifest"); - if (handle != INVALID_HANDLE_VALUE) { - test_detailed_info(handle, &detailed_info1); - test_info_in_assembly(handle, 1, &manifest1_info); - pReleaseActCtx(handle); - } - -} - -static void test_app_manifest(void) -{ - HANDLE handle; - BOOL b; - - trace("child process manifest1\n"); - - b = pGetCurrentActCtx(&handle); - ok(handle == NULL, "handle != NULL\n"); - ok(b, "GetCurrentActCtx failed: %u\n", GetLastError()); - if(b) { - test_detailed_info(handle, &detailed_info1_child); - test_info_in_assembly(handle, 1, &manifest1_child_info); - pReleaseActCtx(handle); - } -} - -static void run_child_process(void) -{ - char cmdline[MAX_PATH]; - char path[MAX_PATH]; - char **argv; - PROCESS_INFORMATION pi; - STARTUPINFO si = { 0 }; - - GetModuleFileNameA(NULL, path, MAX_PATH); - strcat(path, ".manifest"); - if(!create_manifest_file(path, manifest1, -1, NULL, NULL)) { - skip("Could not create manifest file\n"); - return; - } - - si.cb = sizeof(si); - winetest_get_mainargs( &argv ); - sprintf(cmdline, "\"%s\" %s manifest1", argv[0], argv[1]); - ok(CreateProcess(argv[0], cmdline, NULL, NULL, FALSE, 0, NULL, NULL, - &si, &pi) != 0, "Could not create process: %u\n", GetLastError()); - winetest_wait_child_process( pi.hProcess ); - CloseHandle(pi.hThread); - CloseHandle(pi.hProcess); - DeleteFileA(path); -} - -static void init_paths(void) -{ - LPWSTR ptr; - WCHAR last; - - static const WCHAR dot_manifest[] = {'.','M','a','n','i','f','e','s','t',0}; - static const WCHAR backslash[] = {'\\',0}; - static const WCHAR subdir[] = {'T','e','s','t','S','u','b','d','i','r','\\',0}; - - GetModuleFileNameW(NULL, exe_path, sizeof(exe_path)/sizeof(WCHAR)); - lstrcpyW(app_dir, exe_path); - for(ptr=app_dir+lstrlenW(app_dir); *ptr != '\\' && *ptr != '/'; ptr--); - ptr[1] = 0; - - GetCurrentDirectoryW(MAX_PATH, work_dir); - last = work_dir[lstrlenW(work_dir) - 1]; - if (last != '\\' && last != '/') - lstrcatW(work_dir, backslash); - lstrcpyW(work_dir_subdir, work_dir); - lstrcatW(work_dir_subdir, subdir); - - GetModuleFileNameW(NULL, app_manifest_path, sizeof(app_manifest_path)/sizeof(WCHAR)); - lstrcpyW(app_manifest_path+lstrlenW(app_manifest_path), dot_manifest); -} - -static BOOL init_funcs(void) -{ - HMODULE hKernel32 = GetModuleHandle("kernel32"); - -#define X(f) if (!(p##f = (void*)GetProcAddress(hKernel32, #f))) return FALSE; - X(ActivateActCtx); - X(CreateActCtxW); - X(DeactivateActCtx); - X(FindActCtxSectionStringW); - X(GetCurrentActCtx); - X(IsDebuggerPresent); - X(QueryActCtxW); - X(ReleaseActCtx); -#undef X - - return TRUE; -} - -START_TEST(actctx) -{ - int argc; - char **argv; - - argc = winetest_get_mainargs(&argv); - - if (!init_funcs()) - { - skip("Needed functions are not available\n"); - return; - } - init_paths(); - - if(argc > 2 && !strcmp(argv[2], "manifest1")) { - test_app_manifest(); - return; - } - - test_actctx(); - run_child_process(); -} diff --git a/rostests/winetests/kernel32/alloc.c b/rostests/winetests/kernel32/alloc.c deleted file mode 100755 index 8cb0915c5ea..00000000000 --- a/rostests/winetests/kernel32/alloc.c +++ /dev/null @@ -1,405 +0,0 @@ -/* - * Unit test suite for memory allocation functions. - * - * Copyright 2002 Geoffrey Hausheer - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" - - - /* The following functions don't have tests, because either I don't know how - to test them, or they are WinNT only, or require multiple threads. - Since the last two issues shouldn't really stop the tests from being - written, assume for now that it is all due to the first case - HeapCompact - HeapLock - HeapQueryInformation - HeapSetInformation - HeapUnlock - HeapValidate - HeapWalk -*/ -/* In addition, these features aren't being tested - HEAP_NO_SERIALIZE - HEAP_GENERATE_EXCEPTIONS - STATUS_ACCESS_VIOLATION (error code from HeapAlloc) -*/ - -static void test_Heap(void) -{ - SYSTEM_INFO sysInfo; - ULONG memchunk; - HANDLE heap; - LPVOID mem1,mem1a,mem3; - UCHAR *mem2,*mem2a; - UINT error,i; - DWORD dwSize; - -/* Retrieve the page size for this system */ - sysInfo.dwPageSize=0; - GetSystemInfo(&sysInfo); - ok(sysInfo.dwPageSize>0,"GetSystemInfo should return a valid page size\n"); - -/* Create a Heap with a minimum and maximum size */ -/* Note that Windows and Wine seem to behave a bit differently with respect - to memory allocation. In Windows, you can't access all the memory - specified in the heap (due to overhead), so choosing a reasonable maximum - size for the heap was done mostly by trial-and-error on Win2k. It may need - more tweaking for otherWindows variants. -*/ - memchunk=10*sysInfo.dwPageSize; - heap=HeapCreate(0,2*memchunk,5*memchunk); - -/* Check that HeapCreate allocated the right amount of ram */ - todo_wine { - /* Today HeapCreate seems to return a memory block larger than specified. - MSDN says the maximum heap size should be dwMaximumSize rounded up to the - nearest page boundary - */ - mem1=HeapAlloc(heap,0,5*memchunk+1); - ok(mem1==NULL,"HeapCreate allocated more Ram than it should have\n"); - HeapFree(heap,0,mem1); - } - -/* Check that a normal alloc works */ - mem1=HeapAlloc(heap,0,memchunk); - ok(mem1!=NULL,"HeapAlloc failed\n"); - if(mem1) { - ok(HeapSize(heap,0,mem1)>=memchunk, "HeapAlloc should return a big enough memory block\n"); - } - -/* Check that a 'zeroing' alloc works */ - mem2=HeapAlloc(heap,HEAP_ZERO_MEMORY,memchunk); - ok(mem2!=NULL,"HeapAlloc failed\n"); - if(mem2) { - ok(HeapSize(heap,0,mem2)>=memchunk,"HeapAlloc should return a big enough memory block\n"); - error=0; - for(i=0;i=memchunk+5*sysInfo.dwPageSize,"HeapReAlloc failed\n"); - error=0; - for(i=0;i<5*sysInfo.dwPageSize;i++) { - if(mem2a[memchunk+i]!=0) { - error=1; - } - } - ok(!error,"HeapReAlloc should have zeroed out it's allocated memory\n"); - } - -/* Check that HeapRealloc honours HEAP_REALLOC_IN_PLACE_ONLY */ - error=0; - mem1a=HeapReAlloc(heap,HEAP_REALLOC_IN_PLACE_ONLY,mem1,memchunk+sysInfo.dwPageSize); - if(mem1a!=NULL) { - if(mem1a!=mem1) { - error=1; - } - } - ok(mem1a==NULL || error==0,"HeapReAlloc didn't honour HEAP_REALLOC_IN_PLACE_ONLY\n"); - -/* Check that HeapFree works correctly */ - if(mem1a) { - ok(HeapFree(heap,0,mem1a),"HeapFree failed\n"); - } else { - ok(HeapFree(heap,0,mem1),"HeapFree failed\n"); - } - if(mem2a) { - ok(HeapFree(heap,0,mem2a),"HeapFree failed\n"); - } else { - ok(HeapFree(heap,0,mem2),"HeapFree failed\n"); - } - - /* 0-length buffer */ - mem1 = HeapAlloc(heap, 0, 0); - ok(mem1 != NULL, "Reserved memory\n"); - - dwSize = HeapSize(heap, 0, mem1); - /* should work with 0-length buffer */ - ok(dwSize < 0xFFFFFFFF, "The size of the 0-length buffer\n"); - ok(HeapFree(heap, 0, mem1), "Freed the 0-length buffer\n"); - -/* Check that HeapDestry works */ - ok(HeapDestroy(heap),"HeapDestroy failed\n"); -} - -/* The following functions don't have tests, because either I don't know how - to test them, or they are WinNT only, or require multiple threads. - Since the last two issues shouldn't really stop the tests from being - written, assume for now that it is all due to the first case - GlobalFlags - GlobalMemoryStatus - GlobalMemoryStatusEx -*/ -/* In addition, these features aren't being tested - GMEM_DISCARDABLE - GMEM_NOCOMPACT -*/ -static void test_Global(void) -{ - ULONG memchunk; - HGLOBAL mem1,mem2,mem2a,mem2b; - UCHAR *mem2ptr; - UINT error,i; - memchunk=100000; - - SetLastError(NO_ERROR); -/* Check that a normal alloc works */ - mem1=GlobalAlloc(0,memchunk); - ok(mem1!=NULL,"GlobalAlloc failed\n"); - if(mem1) { - ok(GlobalSize(mem1)>=memchunk, "GlobalAlloc should return a big enough memory block\n"); - } - -/* Check that a 'zeroing' alloc works */ - mem2=GlobalAlloc(GMEM_ZEROINIT,memchunk); - ok(mem2!=NULL,"GlobalAlloc failed: error=%d\n",GetLastError()); - if(mem2) { - ok(GlobalSize(mem2)>=memchunk,"GlobalAlloc should return a big enough memory block\n"); - mem2ptr=GlobalLock(mem2); - ok(mem2ptr==mem2,"GlobalLock should have returned the same memory as was allocated\n"); - if(mem2ptr) { - error=0; - for(i=0;i=2*memchunk,"GlobalReAlloc failed\n"); - mem2ptr=GlobalLock(mem2a); - ok(mem2ptr!=NULL,"GlobalLock Failed\n"); - if(mem2ptr) { - error=0; - for(i=0;i=memchunk, "LocalAlloc should return a big enough memory block\n"); - } - -/* Check that a 'zeroing' and lock alloc works */ - mem2=LocalAlloc(LMEM_ZEROINIT|LMEM_MOVEABLE,memchunk); - ok(mem2!=NULL,"LocalAlloc failed: error=%d\n",GetLastError()); - if(mem2) { - ok(LocalSize(mem2)>=memchunk,"LocalAlloc should return a big enough memory block\n"); - mem2ptr=LocalLock(mem2); - ok(mem2ptr!=NULL,"LocalLock: error=%d\n",GetLastError()); - if(mem2ptr) { - error=0; - for(i=0;i=2*memchunk,"LocalReAlloc failed\n"); - mem2ptr=LocalLock(mem2a); - ok(mem2ptr!=NULL,"LocalLock Failed\n"); - if(mem2ptr) { - error=0; - for(i=0;i0,"GetSystemInfo should return a valid page size\n"); - -/* Choose a reasonable allocation size */ - memchunk=10*sysInfo.dwPageSize; - -/* Check that a normal alloc works */ - mem1=VirtualAlloc(NULL,memchunk,MEM_COMMIT,PAGE_READWRITE); - ok(mem1!=NULL,"VirtualAlloc failed\n"); - if(mem1) { -/* check that memory is initialized to 0 */ - error=0; - for(i=0;i -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "winuser.h" - -#define DOUBLE(x) (WCHAR)((x<<8)|(x)) - -static const WCHAR foobarW[] = {'f','o','o','b','a','r',0}; -static const WCHAR FOOBARW[] = {'F','O','O','B','A','R',0}; -static const WCHAR _foobarW[] = {'_','f','o','o','b','a','r',0}; - -static void do_initA(char* tmp, const char* pattern, int len) -{ - const char* p = pattern; - - while (len--) - { - *tmp++ = *p++; - if (!*p) p = pattern; - } - *tmp = '\0'; -} - -static void do_initW(WCHAR* tmp, const char* pattern, int len) -{ - const char* p = pattern; - - while (len--) - { - *tmp++ = *p++; - if (!*p) p = pattern; - } - *tmp = '\0'; -} - -static void print_integral( WCHAR* buffer, int atom ) -{ - BOOL first = TRUE; - -#define X(v) { if (atom >= v) {*buffer++ = '0' + atom / v; first = FALSE; } else if (!first || v == 1) *buffer++ = '0'; atom %= v; } - *buffer++ = '#'; - X(10000); - X(1000); - X(100); - X(10); - X(1); - *buffer = '\0'; -#undef X -} - -static BOOL unicode_OS; - -static void test_add_atom(void) -{ - ATOM atom, w_atom; - int i; - - SetLastError( 0xdeadbeef ); - atom = GlobalAddAtomA( "foobar" ); - ok( atom >= 0xc000, "bad atom id %x\n", atom ); - ok( GetLastError() == 0xdeadbeef, "GlobalAddAtomA set last error\n" ); - - /* Verify that it can be found (or not) appropriately */ - ok( GlobalFindAtomA( "foobar" ) == atom, "could not find atom foobar\n" ); - ok( GlobalFindAtomA( "FOOBAR" ) == atom, "could not find atom FOOBAR\n" ); - ok( !GlobalFindAtomA( "_foobar" ), "found _foobar\n" ); - - /* Add the same atom, specifying string as unicode; should - * find the first one, not add a new one */ - SetLastError( 0xdeadbeef ); - w_atom = GlobalAddAtomW( foobarW ); - if (w_atom && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - unicode_OS = TRUE; - else - trace("WARNING: Unicode atom APIs are not supported on this platform\n"); - - if (unicode_OS) - { - ok( w_atom == atom, "Unicode atom does not match ASCII\n" ); - ok( GetLastError() == 0xdeadbeef, "GlobalAddAtomW set last error\n" ); - } - - /* Verify that it can be found (or not) appropriately via unicode name */ - if (unicode_OS) - { - ok( GlobalFindAtomW( foobarW ) == atom, "could not find atom foobar\n" ); - ok( GlobalFindAtomW( FOOBARW ) == atom, "could not find atom FOOBAR\n" ); - ok( !GlobalFindAtomW( _foobarW ), "found _foobar\n" ); - } - - /* Test integer atoms - * (0x0001 .. 0xbfff) should be valid; - * (0xc000 .. 0xffff) should be invalid */ - - SetLastError( 0xdeadbeef ); - ok( GlobalAddAtomA(0) == 0 && GetLastError() == 0xdeadbeef, "succeeded to add atom 0\n" ); - if (unicode_OS) - { - SetLastError( 0xdeadbeef ); - ok( GlobalAddAtomW(0) == 0 && GetLastError() == 0xdeadbeef, "succeeded to add atom 0\n" ); - } - - SetLastError( 0xdeadbeef ); - for (i = 1; i <= 0xbfff; i++) - { - SetLastError( 0xdeadbeef ); - ok( GlobalAddAtomA((LPCSTR)i) == i && GetLastError() == 0xdeadbeef, - "failed to add atom %x\n", i ); - if (unicode_OS) - { - SetLastError( 0xdeadbeef ); - ok( GlobalAddAtomW((LPCWSTR)i) == i && GetLastError() == 0xdeadbeef, - "failed to add atom %x\n", i ); - } - } - - for (i = 0xc000; i <= 0xffff; i++) - { - ok( !GlobalAddAtomA((LPCSTR)i), "succeeded adding %x\n", i ); - if (unicode_OS) - ok( !GlobalAddAtomW((LPCWSTR)i), "succeeded adding %x\n", i ); - } -} - -static void test_get_atom_name(void) -{ - char buf[10]; - WCHAR bufW[10]; - int i; - UINT len; - static const WCHAR resultW[] = {'f','o','o','b','a','r',0,'.','.','.'}; - char in[257], out[257]; - WCHAR inW[257], outW[257]; - - ATOM atom = GlobalAddAtomA( "foobar" ); - - /* Get the name of the atom we added above */ - memset( buf, '.', sizeof(buf) ); - len = GlobalGetAtomNameA( atom, buf, 10 ); - ok( len == strlen("foobar"), "bad length %d\n", len ); - ok( !memcmp( buf, "foobar\0...", 10 ), "bad buffer contents\n" ); - - /* Repeat, unicode-style */ - if (unicode_OS) - { - for (i = 0; i < 10; i++) bufW[i] = '.'; - SetLastError( 0xdeadbeef ); - len = GlobalGetAtomNameW( atom, bufW, 10 ); - ok( len && GetLastError() == 0xdeadbeef, "GlobalGetAtomNameW failed\n" ); - ok( len == lstrlenW(foobarW), "bad length %d\n", len ); - ok( !memcmp( bufW, resultW, 10*sizeof(WCHAR) ), "bad buffer contents\n" ); - } - - /* Check error code returns */ - memset(buf, '.', 10); - ok( !GlobalGetAtomNameA( atom, buf, 0 ), "succeeded\n" ); - ok( !memcmp( buf, "..........", 10 ), "should not touch buffer\n" ); - - if (unicode_OS) - { - static const WCHAR sampleW[10] = {'.','.','.','.','.','.','.','.','.','.'}; - - for (i = 0; i < 10; i++) bufW[i] = '.'; - ok( !GlobalGetAtomNameW( atom, bufW, 0 ), "succeeded\n" ); - ok( !memcmp( bufW, sampleW, 10 * sizeof(WCHAR) ), "should not touch buffer\n" ); - } - - /* Test integer atoms */ - for (i = 0; i <= 0xbfff; i++) - { - memset( buf, 'a', 10 ); - len = GlobalGetAtomNameA( (ATOM)i, buf, 10 ); - if (i) - { - char res[20]; - ok( (len > 1) && (len < 7), "bad length %d\n", len ); - sprintf( res, "#%d", i ); - memset( res + strlen(res) + 1, 'a', 10 ); - ok( !memcmp( res, buf, 10 ), "bad buffer contents %s\n", buf ); - } - else - ok( !len, "bad length %d\n", len ); - - SetLastError(0xdeadbeef); - len = GlobalGetAtomNameA( (ATOM)i, buf, 2); - if (!len) /* the NT way */ - { - ok(GetLastError() == (i ? ERROR_MORE_DATA : ERROR_INVALID_PARAMETER) || - GetLastError() == 0xdeadbeef, /* the Win 9x way */ - "wrong error conditions %u for %u\n", GetLastError(), i); - } - else /* the Win 9x way */ - { - ok(GetLastError() == 0xdeadbeef, - "wrong error conditions %u for %u\n", GetLastError(), i); - } - } - - memset( buf, '.', sizeof(buf) ); - len = GlobalGetAtomNameA( atom, buf, 6 ); - ok( len == 0 || - len == 5, /* win9x */ - "bad length %d\n", len ); - ok( !memcmp( buf, "fooba\0....", 10 ), "bad buffer contents\n"); - if (unicode_OS) - { - static const WCHAR resW[] = {'f','o','o','b','a','r','.','.','.','.'}; - for (len = 0; len < 10; len++) bufW[len] = '.'; - SetLastError(0xdeadbeef); - len = GlobalGetAtomNameW( atom, bufW, 6 ); - ok( len && GetLastError() == 0xdeadbeef, "GlobalGetAtomNameW failed\n" ); - ok( len == lstrlenW(foobarW), "bad length %d\n", len ); - ok( !memcmp( bufW, resW, 10*sizeof(WCHAR) ), "bad buffer contents\n" ); - } - - /* test string limits & overflow */ - do_initA(in, "abcdefghij", 255); - atom = GlobalAddAtomA(in); - ok(atom, "couldn't add atom for %s\n", in); - len = GlobalGetAtomNameA(atom, out, sizeof(out)); - ok(len == 255, "length mismatch (%u instead of 255)\n", len); - for (i = 0; i < 255; i++) - { - ok(out[i] == "abcdefghij"[i % 10], "wrong string at %i (%c instead of %c)\n", i, out[i], "abcdefghij"[i % 10]); - } - ok(out[255] == '\0', "wrong end of string\n"); - memset(out, '.', sizeof(out)); - SetLastError(0xdeadbeef); - len = GlobalGetAtomNameA(atom, out, 10); - if (!len) /* the NT way */ - { - ok(GetLastError() == ERROR_MORE_DATA, "wrong error code (%u instead of %u)\n", GetLastError(), ERROR_MORE_DATA); - } - else /* the Win9x way */ - { - ok(GetLastError() == 0xdeadbeef, "wrong error code (%u instead of %u)\n", GetLastError(), 0xdeadbeef); - } - for (i = 0; i < 9; i++) - { - ok(out[i] == "abcdefghij"[i % 10], "wrong string at %i (%c instead of %c)\n", i, out[i], "abcdefghij"[i % 10]); - } - ok(out[9] == '\0', "wrong end of string\n"); - ok(out[10] == '.', "wrote after end of buf\n"); - do_initA(in, "abcdefghij", 256); - atom = GlobalAddAtomA(in); - ok(!atom, "succeeded\n"); - if (unicode_OS) - { - /* test integral atoms */ - for (i = 0; i <= 0xbfff; i++) - { - memset(outW, 'a', sizeof(outW)); - len = GlobalGetAtomNameW( (ATOM)i, outW, 10 ); - if (i) - { - WCHAR res[20]; - - ok( (len > 1) && (len < 7), "bad length %d\n", len ); - print_integral( res, i ); - memset( res + lstrlenW(res) + 1, 'a', 10 * sizeof(WCHAR)); - ok( !memcmp( res, outW, 10 * sizeof(WCHAR) ), "bad buffer contents for %d\n", i ); - } - else - ok( !len, "bad length %d\n", len ); - - memset(outW, '.', sizeof(outW)); - SetLastError(0xdeadbeef); - len = GlobalGetAtomNameW( (ATOM)i, outW, 1); - if (i) - { - /* len == 0 with ERROR_MORE_DATA is on NT3.51 */ - ok(len == 1 || (len == 0 && GetLastError() == ERROR_MORE_DATA), - "0x%04x: got %u with %d (excepted '1' or '0' with " - "ERROR_MORE_DATA)\n", i, len, GetLastError()); - ok(outW[1] == DOUBLE('.'), "buffer overwrite\n"); - } - else ok(len == 0 && GetLastError() == ERROR_INVALID_PARAMETER, "0 badly handled\n"); - } - - do_initW(inW, "abcdefghij", 255); - atom = GlobalAddAtomW(inW); - ok(atom, "couldn't add atom for %s\n", in); - len = GlobalGetAtomNameW(atom, outW, sizeof(outW)); - ok(len == 255, "length mismatch (%u instead of 255)\n", len); - for (i = 0; i < 255; i++) - { - ok(outW[i] == "abcdefghij"[i % 10], "wrong string at %i (%c instead of %c)\n", i, outW[i], "abcdefghij"[i % 10]); - } - ok(outW[255] == '\0', "wrong end of string\n"); - memset(outW, '.', sizeof(outW)); - len = GlobalGetAtomNameW(atom, outW, 10); - ok(len == 10, "succeeded\n"); - for (i = 0; i < 10; i++) - { - ok(outW[i] == "abcdefghij"[i % 10], "wrong string at %i (%c instead of %c)\n", i, outW[i], "abcdefghij"[i % 10]); - } - ok(outW[10] == DOUBLE('.'), "wrote after end of buf\n"); - do_initW(inW, "abcdefghij", 256); - atom = GlobalAddAtomW(inW); - ok(!atom, "succeeded\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error code\n"); - } -} - -static void test_error_handling(void) -{ - char buffer[260]; - WCHAR bufferW[260]; - int i; - - memset( buffer, 'a', 256 ); - buffer[256] = 0; - ok( !GlobalAddAtomA(buffer), "add succeeded\n" ); - ok( !GlobalFindAtomA(buffer), "find succeeded\n" ); - - if (unicode_OS) - { - for (i = 0; i < 256; i++) bufferW[i] = 'b'; - bufferW[256] = 0; - ok( !GlobalAddAtomW(bufferW), "add succeeded\n" ); - ok( !GlobalFindAtomW(bufferW), "find succeeded\n" ); - } -} - -static void test_local_add_atom(void) -{ - ATOM atom, w_atom; - int i; - - SetLastError( 0xdeadbeef ); - atom = AddAtomA( "foobar" ); - ok( atom >= 0xc000, "bad atom id %x\n", atom ); - ok( GetLastError() == 0xdeadbeef, "AddAtomA set last error\n" ); - - /* Verify that it can be found (or not) appropriately */ - ok( FindAtomA( "foobar" ) == atom, "could not find atom foobar\n" ); - ok( FindAtomA( "FOOBAR" ) == atom, "could not find atom FOOBAR\n" ); - ok( !FindAtomA( "_foobar" ), "found _foobar\n" ); - - /* Add the same atom, specifying string as unicode; should - * find the first one, not add a new one */ - SetLastError( 0xdeadbeef ); - w_atom = AddAtomW( foobarW ); - if (w_atom && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - unicode_OS = TRUE; - else - trace("WARNING: Unicode atom APIs are not supported on this platform\n"); - - if (unicode_OS) - { - ok( w_atom == atom, "Unicode atom does not match ASCII\n" ); - ok( GetLastError() == 0xdeadbeef, "AddAtomW set last error\n" ); - } - - /* Verify that it can be found (or not) appropriately via unicode name */ - if (unicode_OS) - { - ok( FindAtomW( foobarW ) == atom, "could not find atom foobar\n" ); - ok( FindAtomW( FOOBARW ) == atom, "could not find atom FOOBAR\n" ); - ok( !FindAtomW( _foobarW ), "found _foobar\n" ); - } - - /* Test integer atoms - * (0x0001 .. 0xbfff) should be valid; - * (0xc000 .. 0xffff) should be invalid */ - - SetLastError( 0xdeadbeef ); - ok( AddAtomA(0) == 0 && GetLastError() == 0xdeadbeef, "succeeded to add atom 0\n" ); - if (unicode_OS) - { - SetLastError( 0xdeadbeef ); - ok( AddAtomW(0) == 0 && GetLastError() == 0xdeadbeef, "succeeded to add atom 0\n" ); - } - - SetLastError( 0xdeadbeef ); - for (i = 1; i <= 0xbfff; i++) - { - SetLastError( 0xdeadbeef ); - ok( AddAtomA((LPCSTR)i) == i && GetLastError() == 0xdeadbeef, - "failed to add atom %x\n", i ); - if (unicode_OS) - { - SetLastError( 0xdeadbeef ); - ok( AddAtomW((LPCWSTR)i) == i && GetLastError() == 0xdeadbeef, - "failed to add atom %x\n", i ); - } - } - - for (i = 0xc000; i <= 0xffff; i++) - { - ok( !AddAtomA((LPCSTR)i), "succeeded adding %x\n", i ); - if (unicode_OS) - ok( !AddAtomW((LPCWSTR)i), "succeeded adding %x\n", i ); - } -} - -static void test_local_get_atom_name(void) -{ - char buf[10], in[257], out[257]; - WCHAR bufW[10], inW[257], outW[257]; - int i; - UINT len; - static const WCHAR resultW[] = {'f','o','o','b','a','r',0,'.','.','.'}; - - ATOM atom = AddAtomA( "foobar" ); - - /* Get the name of the atom we added above */ - memset( buf, '.', sizeof(buf) ); - len = GetAtomNameA( atom, buf, 10 ); - ok( len == strlen("foobar"), "bad length %d\n", len ); - ok( !memcmp( buf, "foobar\0...", 10 ), "bad buffer contents\n" ); - - /* Repeat, unicode-style */ - if (unicode_OS) - { - for (i = 0; i < 10; i++) bufW[i] = '.'; - SetLastError( 0xdeadbeef ); - len = GetAtomNameW( atom, bufW, 10 ); - ok( len && GetLastError() == 0xdeadbeef, "GetAtomNameW failed\n" ); - ok( len == lstrlenW(foobarW), "bad length %d\n", len ); - ok( !memcmp( bufW, resultW, 10*sizeof(WCHAR) ), "bad buffer contents\n" ); - } - - /* Get the name of the atom we added above */ - memset( buf, '.', sizeof(buf) ); - len = GetAtomNameA( atom, buf, 6 ); - ok( len == 5, "bad length %d\n", len ); - ok( !memcmp( buf, "fooba\0....", 10 ), "bad buffer contents\n" ); - - /* Repeat, unicode-style */ - if (unicode_OS) - { - WCHAR resW[] = {'f','o','o','b','a','\0','.','.','.','.'}; - for (i = 0; i < 10; i++) bufW[i] = '.'; - SetLastError( 0xdeadbeef ); - len = GetAtomNameW( atom, bufW, 6 ); - ok( len && GetLastError() == 0xdeadbeef, "GlobalGetAtomNameW failed\n" ); - ok( len == 5, "bad length %d\n", len ); - ok( !memcmp( bufW, resW, 10*sizeof(WCHAR) ), "bad buffer contents\n" ); - } - - /* Check error code returns */ - memset(buf, '.', 10); - ok( !GetAtomNameA( atom, buf, 0 ), "succeeded\n" ); - ok( !memcmp( buf, "..........", 10 ), "should not touch buffer\n" ); - - if (unicode_OS) - { - static const WCHAR sampleW[10] = {'.','.','.','.','.','.','.','.','.','.'}; - - for (i = 0; i < 10; i++) bufW[i] = '.'; - ok( !GetAtomNameW( atom, bufW, 0 ), "succeeded\n" ); - ok( !memcmp( bufW, sampleW, 10 * sizeof(WCHAR) ), "should not touch buffer\n" ); - } - - /* Test integer atoms */ - for (i = 0; i <= 0xbfff; i++) - { - memset( buf, 'a', 10 ); - len = GetAtomNameA( (ATOM)i, buf, 10 ); - if (i) - { - char res[20]; - ok( (len > 1) && (len < 7), "bad length %d for %s\n", len, buf ); - sprintf( res, "#%d", i ); - memset( res + strlen(res) + 1, 'a', 10 ); - ok( !memcmp( res, buf, 10 ), "bad buffer contents %s\n", buf ); - } - else - ok( !len, "bad length %d\n", len ); - - len = GetAtomNameA( (ATOM)i, buf, 1); - ok(!len, "succeed with %u for %u\n", len, i); - - /* ERROR_MORE_DATA is on nt3.51 sp5 */ - if (i) - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER || - GetLastError() == ERROR_MORE_DATA || - GetLastError() == 0xdeadbeef, /* the Win 9x way */ - "wrong error conditions %u for %u\n", GetLastError(), i); - else - ok(GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_MORE_DATA || - GetLastError() == 0xdeadbeef, /* the Win 9x way */ - "wrong error conditions %u for %u\n", GetLastError(), i); - } - /* test string limits & overflow */ - do_initA(in, "abcdefghij", 255); - atom = AddAtomA(in); - ok(atom, "couldn't add atom for %s\n", in); - len = GetAtomNameA(atom, out, sizeof(out)); - ok(len == 255, "length mismatch (%u instead of 255)\n", len); - for (i = 0; i < 255; i++) - { - ok(out[i] == "abcdefghij"[i % 10], "wrong string at %i (%c instead of %c)\n", i, out[i], "abcdefghij"[i % 10]); - } - ok(out[255] == '\0', "wrong end of string\n"); - memset(out, '.', sizeof(out)); - len = GetAtomNameA(atom, out, 10); - ok(len == 9, "succeeded %d\n", len); - for (i = 0; i < 9; i++) - { - ok(out[i] == "abcdefghij"[i % 10], "wrong string at %i (%c instead of %c)\n", i, out[i], "abcdefghij"[i % 10]); - } - ok(out[9] == '\0', "wrong end of string\n"); - ok(out[10] == '.', "buffer overwrite\n"); - do_initA(in, "abcdefghij", 256); - atom = AddAtomA(in); - ok(!atom, "succeeded\n"); - - /* ERROR_MORE_DATA is on nt3.51 sp5 */ - ok(GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_MORE_DATA || - GetLastError() == 0xdeadbeef, /* the Win 9x way */ - "wrong error code (%u)\n", GetLastError()); - - if (unicode_OS) - { - /* test integral atoms */ - for (i = 0; i <= 0xbfff; i++) - { - memset(outW, 'a', sizeof(outW)); - len = GetAtomNameW( (ATOM)i, outW, 10 ); - if (i) - { - WCHAR res[20]; - - ok( (len > 1) && (len < 7), "bad length %d\n", len ); - print_integral( res, i ); - memset( res + lstrlenW(res) + 1, 'a', 10 * sizeof(WCHAR)); - ok( !memcmp( res, outW, 10 * sizeof(WCHAR) ), "bad buffer contents for %d\n", i ); - } - else - ok( !len, "bad length %d\n", len ); - - len = GetAtomNameW( (ATOM)i, outW, 1); - ok(!len, "succeed with %u for %u\n", len, i); - - /* ERROR_MORE_DATA is on nt3.51 sp5 */ - ok(GetLastError() == ERROR_MORE_DATA || - GetLastError() == (i ? ERROR_INSUFFICIENT_BUFFER : ERROR_INVALID_PARAMETER), - "wrong error conditions %u for %u\n", GetLastError(), i); - } - do_initW(inW, "abcdefghij", 255); - atom = AddAtomW(inW); - ok(atom, "couldn't add atom for %s\n", in); - len = GetAtomNameW(atom, outW, sizeof(outW)/sizeof(outW[0])); - ok(len == 255, "length mismatch (%u instead of 255)\n", len); - for (i = 0; i < 255; i++) - { - ok(outW[i] == "abcdefghij"[i % 10], "wrong string at %i (%c instead of %c)\n", i, outW[i], "abcdefghij"[i % 10]); - } - ok(outW[255] == '\0', "wrong end of string\n"); - memset(outW, '.', sizeof(outW)); - len = GetAtomNameW(atom, outW, 10); - ok(len == 9, "succeeded %d\n", len); - for (i = 0; i < 9; i++) - { - ok(outW[i] == "abcdefghij"[i % 10], "wrong string at %i (%c instead of %c)\n", i, outW[i], "abcdefghij"[i % 10]); - } - ok(outW[9] == '\0', "wrong end of string\n"); - ok(outW[10] == DOUBLE('.'), "buffer overwrite\n"); - do_initW(inW, "abcdefghij", 256); - atom = AddAtomW(inW); - ok(!atom, "succeeded\n"); - - /* ERROR_MORE_DATA is on nt3.51 sp5 */ - ok(GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_MORE_DATA, - "wrong error code (%u)\n", GetLastError()); - } -} - -static void test_local_error_handling(void) -{ - char buffer[260]; - WCHAR bufferW[260]; - int i; - - memset( buffer, 'a', 256 ); - buffer[256] = 0; - ok( !AddAtomA(buffer), "add succeeded\n" ); - ok( !FindAtomA(buffer), "find succeeded\n" ); - - if (unicode_OS) - { - for (i = 0; i < 256; i++) bufferW[i] = 'b'; - bufferW[256] = 0; - ok( !AddAtomW(bufferW), "add succeeded\n" ); - ok( !FindAtomW(bufferW), "find succeeded\n" ); - } -} - -START_TEST(atom) -{ - test_add_atom(); - test_get_atom_name(); - test_error_handling(); - test_local_add_atom(); - test_local_get_atom_name(); - test_local_error_handling(); -} diff --git a/rostests/winetests/kernel32/change.c b/rostests/winetests/kernel32/change.c deleted file mode 100755 index cdba120e95d..00000000000 --- a/rostests/winetests/kernel32/change.c +++ /dev/null @@ -1,881 +0,0 @@ -/* - * Tests for file change notification functions - * - * Copyright (c) 2004 Hans Leidekker - * Copyright 2006 Mike McCormack 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 - */ - -/* TODO: - security attribute changes - * - compound filter and multiple notifications - * - subtree notifications - * - non-documented flags FILE_NOTIFY_CHANGE_LAST_ACCESS and - * FILE_NOTIFY_CHANGE_CREATION - */ - -#include -#include - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "wine/test.h" -#include -#include -#include - -static DWORD CALLBACK NotificationThread(LPVOID arg) -{ - HANDLE change = (HANDLE) arg; - BOOL notified = FALSE; - BOOL ret = FALSE; - DWORD status; - - status = WaitForSingleObject(change, 100); - - if (status == WAIT_OBJECT_0 ) { - notified = TRUE; - ret = FindNextChangeNotification(change); - } - - ret = FindCloseChangeNotification(change); - ok( ret, "FindCloseChangeNotification error: %d\n", - GetLastError()); - - ExitThread((DWORD)notified); -} - -static HANDLE StartNotificationThread(LPCSTR path, BOOL subtree, DWORD flags) -{ - HANDLE change, thread; - DWORD threadId; - - change = FindFirstChangeNotificationA(path, subtree, flags); - ok(change != INVALID_HANDLE_VALUE, "FindFirstChangeNotification error: %d\n", GetLastError()); - - thread = CreateThread(NULL, 0, NotificationThread, (LPVOID)change, - 0, &threadId); - ok(thread != NULL, "CreateThread error: %d\n", GetLastError()); - - return thread; -} - -static DWORD FinishNotificationThread(HANDLE thread) -{ - DWORD status, exitcode; - - status = WaitForSingleObject(thread, 5000); - ok(status == WAIT_OBJECT_0, "WaitForSingleObject status %d error %d\n", status, GetLastError()); - - ok(GetExitCodeThread(thread, &exitcode), "Could not retrieve thread exit code\n"); - - return exitcode; -} - -static void test_FindFirstChangeNotification(void) -{ - HANDLE change, file, thread; - DWORD attributes, count; - BOOL ret; - - char workdir[MAX_PATH], dirname1[MAX_PATH], dirname2[MAX_PATH]; - char filename1[MAX_PATH], filename2[MAX_PATH]; - static const char prefix[] = "FCN"; - char buffer[2048]; - - /* pathetic checks */ - - change = FindFirstChangeNotificationA("not-a-file", FALSE, FILE_NOTIFY_CHANGE_FILE_NAME); - ok(change == INVALID_HANDLE_VALUE, "Expected INVALID_HANDLE_VALUE, got %p\n", change); - ok(GetLastError() == ERROR_FILE_NOT_FOUND || - GetLastError() == ERROR_NO_MORE_FILES, /* win95 */ - "FindFirstChangeNotification error: %d\n", GetLastError()); - - if (0) /* This documents win2k behavior. It crashes on win98. */ - { - change = FindFirstChangeNotificationA(NULL, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME); - ok(change == NULL && GetLastError() == ERROR_PATH_NOT_FOUND, - "FindFirstChangeNotification error: %d\n", GetLastError()); - } - - ret = FindNextChangeNotification(NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, "FindNextChangeNotification error: %d\n", - GetLastError()); - - ret = FindCloseChangeNotification(NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, "FindCloseChangeNotification error: %d\n", - GetLastError()); - - ret = GetTempPathA(MAX_PATH, workdir); - ok(ret, "GetTempPathA error: %d\n", GetLastError()); - - lstrcatA(workdir, "testFileChangeNotification"); - - ret = CreateDirectoryA(workdir, NULL); - ok(ret, "CreateDirectoryA error: %d\n", GetLastError()); - - ret = GetTempFileNameA(workdir, prefix, 0, filename1); - ok(ret, "GetTempFileNameA error: %d\n", GetLastError()); - - file = CreateFileA(filename1, GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, 0); - ok(file != INVALID_HANDLE_VALUE, "CreateFileA error: %d\n", GetLastError()); - ret = CloseHandle(file); - ok( ret, "CloseHandle error: %d\n", GetLastError()); - - /* Try to register notification for a file. win98 and win2k behave differently here */ - change = FindFirstChangeNotificationA(filename1, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME); - ok(change == INVALID_HANDLE_VALUE && (GetLastError() == ERROR_DIRECTORY || - GetLastError() == ERROR_FILE_NOT_FOUND), - "FindFirstChangeNotification error: %d\n", GetLastError()); - - lstrcpyA(dirname1, filename1); - lstrcatA(dirname1, "dir"); - - lstrcpyA(dirname2, dirname1); - lstrcatA(dirname2, "new"); - - ret = CreateDirectoryA(dirname1, NULL); - ok(ret, "CreateDirectoryA error: %d\n", GetLastError()); - - /* What if we move the directory we registered notification for? */ - thread = StartNotificationThread(dirname1, FALSE, FILE_NOTIFY_CHANGE_DIR_NAME); - ret = MoveFileA(dirname1, dirname2); - ok(ret, "MoveFileA error: %d\n", GetLastError()); - /* win9x and win2k behave differently here, don't check result */ - FinishNotificationThread(thread); - - /* What if we remove the directory we registered notification for? */ - thread = StartNotificationThread(dirname2, FALSE, FILE_NOTIFY_CHANGE_DIR_NAME); - ret = RemoveDirectoryA(dirname2); - ok(ret, "RemoveDirectoryA error: %d\n", GetLastError()); - /* win9x and win2k behave differently here, don't check result */ - FinishNotificationThread(thread); - - /* functional checks */ - - /* Create a directory */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_DIR_NAME); - ret = CreateDirectoryA(dirname1, NULL); - ok(ret, "CreateDirectoryA error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - /* Rename a directory */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_DIR_NAME); - ret = MoveFileA(dirname1, dirname2); - ok(ret, "MoveFileA error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - /* Delete a directory */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_DIR_NAME); - ret = RemoveDirectoryA(dirname2); - ok(ret, "RemoveDirectoryA error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - lstrcpyA(filename2, filename1); - lstrcatA(filename2, "new"); - - /* Rename a file */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME); - ret = MoveFileA(filename1, filename2); - ok(ret, "MoveFileA error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - /* Delete a file */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME); - ret = DeleteFileA(filename2); - ok(ret, "DeleteFileA error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - /* Create a file */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME); - file = CreateFileA(filename2, GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, 0); - ok(file != INVALID_HANDLE_VALUE, "CreateFileA error: %d\n", GetLastError()); - ret = CloseHandle(file); - ok( ret, "CloseHandle error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - attributes = GetFileAttributesA(filename2); - ok(attributes != INVALID_FILE_ATTRIBUTES, "GetFileAttributesA error: %d\n", GetLastError()); - attributes &= FILE_ATTRIBUTE_READONLY; - - /* Change file attributes */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_ATTRIBUTES); - ret = SetFileAttributesA(filename2, attributes); - ok(ret, "SetFileAttributesA error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - /* Change last write time by writing to a file */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_LAST_WRITE); - file = CreateFileA(filename2, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, 0); - ok(file != INVALID_HANDLE_VALUE, "CreateFileA error: %d\n", GetLastError()); - ret = WriteFile(file, buffer, sizeof(buffer), &count, NULL); - ok(ret && count == sizeof(buffer), "WriteFile error: %d\n", GetLastError()); - ret = CloseHandle(file); - ok( ret, "CloseHandle error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - /* Change file size by truncating a file */ - thread = StartNotificationThread(workdir, FALSE, FILE_NOTIFY_CHANGE_SIZE); - file = CreateFileA(filename2, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, 0); - ok(file != INVALID_HANDLE_VALUE, "CreateFileA error: %d\n", GetLastError()); - ret = WriteFile(file, buffer, sizeof(buffer) / 2, &count, NULL); - ok(ret && count == sizeof(buffer) / 2, "WriteFileA error: %d\n", GetLastError()); - ret = CloseHandle(file); - ok( ret, "CloseHandle error: %d\n", GetLastError()); - ok(FinishNotificationThread(thread), "Missed notification\n"); - - /* clean up */ - - ret = DeleteFileA(filename2); - ok(ret, "DeleteFileA error: %d\n", GetLastError()); - - ret = RemoveDirectoryA(workdir); - ok(ret, "RemoveDirectoryA error: %d\n", GetLastError()); -} - -/* this test concentrates more on the wait behaviour of the handle */ -static void test_ffcn(void) -{ - DWORD filter; - HANDLE handle; - LONG r; - WCHAR path[MAX_PATH], subdir[MAX_PATH]; - static const WCHAR szBoo[] = { '\\','b','o','o',0 }; - static const WCHAR szHoo[] = { '\\','h','o','o',0 }; - - SetLastError(0xdeadbeef); - r = GetTempPathW( MAX_PATH, path ); - if (!r && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("GetTempPathW is not implemented\n"); - return; - } - ok( r != 0, "temp path failed\n"); - if (!r) - return; - - lstrcatW( path, szBoo ); - lstrcpyW( subdir, path ); - lstrcatW( subdir, szHoo ); - - RemoveDirectoryW( subdir ); - RemoveDirectoryW( path ); - - r = CreateDirectoryW(path, NULL); - ok( r == TRUE, "failed to create directory\n"); - - filter = FILE_NOTIFY_CHANGE_FILE_NAME; - filter |= FILE_NOTIFY_CHANGE_DIR_NAME; - - handle = FindFirstChangeNotificationW( path, 1, filter); - ok( handle != INVALID_HANDLE_VALUE, "invalid handle\n"); - - r = WaitForSingleObject( handle, 0 ); - ok( r == STATUS_TIMEOUT, "should time out\n"); - - r = CreateDirectoryW( subdir, NULL ); - ok( r == TRUE, "failed to create subdir\n"); - - r = WaitForSingleObject( handle, 0 ); - ok( r == WAIT_OBJECT_0, "should be ready\n"); - - r = WaitForSingleObject( handle, 0 ); - ok( r == WAIT_OBJECT_0, "should be ready\n"); - - r = FindNextChangeNotification(handle); - ok( r == TRUE, "find next failed\n"); - - r = WaitForSingleObject( handle, 0 ); - ok( r == STATUS_TIMEOUT, "should time out\n"); - - r = RemoveDirectoryW( subdir ); - ok( r == TRUE, "failed to remove subdir\n"); - - r = WaitForSingleObject( handle, 0 ); - ok( r == WAIT_OBJECT_0, "should be ready\n"); - - r = WaitForSingleObject( handle, 0 ); - ok( r == WAIT_OBJECT_0, "should be ready\n"); - - r = FindNextChangeNotification(handle); - ok( r == TRUE, "find next failed\n"); - - r = FindNextChangeNotification(handle); - ok( r == TRUE, "find next failed\n"); - - r = FindCloseChangeNotification(handle); - ok( r == TRUE, "should succeed\n"); - - r = RemoveDirectoryW( path ); - ok( r == TRUE, "failed to remove dir\n"); -} - -/* this test concentrates on the wait behavior when multiple threads are - * waiting on a change notification handle. */ -static void test_ffcnMultipleThreads(void) -{ - LONG r; - DWORD filter, threadId, status, exitcode; - HANDLE handles[2]; - char path[MAX_PATH]; - - r = GetTempPathA(MAX_PATH, path); - ok(r, "GetTempPathA error: %d\n", GetLastError()); - - lstrcatA(path, "ffcnTestMultipleThreads"); - - RemoveDirectoryA(path); - - r = CreateDirectoryA(path, NULL); - ok(r, "CreateDirectoryA error: %d\n", GetLastError()); - - filter = FILE_NOTIFY_CHANGE_FILE_NAME; - filter |= FILE_NOTIFY_CHANGE_DIR_NAME; - - handles[0] = FindFirstChangeNotificationA(path, FALSE, filter); - ok(handles[0] != INVALID_HANDLE_VALUE, "FindFirstChangeNotification error: %d\n", GetLastError()); - - /* Test behavior if a waiting thread holds the last reference to a change - * directory object with an empty wine user APC queue for this thread (bug #7286) */ - - /* Create our notification thread */ - handles[1] = CreateThread(NULL, 0, NotificationThread, (LPVOID)handles[0], - 0, &threadId); - ok(handles[1] != NULL, "CreateThread error: %d\n", GetLastError()); - - status = WaitForMultipleObjects(2, handles, FALSE, 5000); - ok(status == WAIT_OBJECT_0 || status == WAIT_OBJECT_0+1, "WaitForMultipleObjects status %d error %d\n", status, GetLastError()); - ok(GetExitCodeThread(handles[1], &exitcode), "Could not retrieve thread exit code\n"); - - /* Clean up */ - r = RemoveDirectoryA( path ); - ok( r == TRUE, "failed to remove dir\n"); -} - -typedef BOOL (WINAPI *fnReadDirectoryChangesW)(HANDLE,LPVOID,DWORD,BOOL,DWORD, - LPDWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE); -fnReadDirectoryChangesW pReadDirectoryChangesW; - -static void test_readdirectorychanges(void) -{ - HANDLE hdir; - char buffer[0x1000]; - DWORD fflags, filter = 0, r, dwCount; - OVERLAPPED ov; - WCHAR path[MAX_PATH], subdir[MAX_PATH], subsubdir[MAX_PATH]; - static const WCHAR szBoo[] = { '\\','b','o','o',0 }; - static const WCHAR szHoo[] = { '\\','h','o','o',0 }; - static const WCHAR szGa[] = { '\\','h','o','o','\\','g','a',0 }; - PFILE_NOTIFY_INFORMATION pfni; - - if (!pReadDirectoryChangesW) - { - skip("ReadDirectoryChangesW is not available\n"); - return; - } - - SetLastError(0xdeadbeef); - r = GetTempPathW( MAX_PATH, path ); - if (!r && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("GetTempPathW is not implemented\n"); - return; - } - ok( r != 0, "temp path failed\n"); - if (!r) - return; - - lstrcatW( path, szBoo ); - lstrcpyW( subdir, path ); - lstrcatW( subdir, szHoo ); - - lstrcpyW( subsubdir, path ); - lstrcatW( subsubdir, szGa ); - - RemoveDirectoryW( subsubdir ); - RemoveDirectoryW( subdir ); - RemoveDirectoryW( path ); - - r = CreateDirectoryW(path, NULL); - ok( r == TRUE, "failed to create directory\n"); - - SetLastError(0xd0b00b00); - r = pReadDirectoryChangesW(NULL,NULL,0,FALSE,0,NULL,NULL,NULL); - ok(GetLastError()==ERROR_INVALID_PARAMETER,"last error wrong\n"); - ok(r==FALSE, "should return false\n"); - - fflags = FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED; - hdir = CreateFileW(path, GENERIC_READ|SYNCHRONIZE|FILE_LIST_DIRECTORY, - FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, fflags, NULL); - ok( hdir != INVALID_HANDLE_VALUE, "failed to open directory\n"); - - ov.hEvent = CreateEvent( NULL, 1, 0, NULL ); - - SetLastError(0xd0b00b00); - r = pReadDirectoryChangesW(hdir,NULL,0,FALSE,0,NULL,NULL,NULL); - ok(GetLastError()==ERROR_INVALID_PARAMETER,"last error wrong\n"); - ok(r==FALSE, "should return false\n"); - - SetLastError(0xd0b00b00); - r = pReadDirectoryChangesW(hdir,NULL,0,FALSE,0,NULL,&ov,NULL); - ok(GetLastError()==ERROR_INVALID_PARAMETER,"last error wrong\n"); - ok(r==FALSE, "should return false\n"); - - filter = FILE_NOTIFY_CHANGE_FILE_NAME; - filter |= FILE_NOTIFY_CHANGE_DIR_NAME; - filter |= FILE_NOTIFY_CHANGE_ATTRIBUTES; - filter |= FILE_NOTIFY_CHANGE_SIZE; - filter |= FILE_NOTIFY_CHANGE_LAST_WRITE; - filter |= FILE_NOTIFY_CHANGE_LAST_ACCESS; - filter |= FILE_NOTIFY_CHANGE_CREATION; - filter |= FILE_NOTIFY_CHANGE_SECURITY; - - SetLastError(0xd0b00b00); - ov.Internal = 0; - ov.InternalHigh = 0; - memset( buffer, 0, sizeof buffer ); - - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,-1,NULL,&ov,NULL); - ok(GetLastError()==ERROR_INVALID_PARAMETER,"last error wrong\n"); - ok(r==FALSE, "should return false\n"); - - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,0,NULL,&ov,NULL); - ok(GetLastError()==ERROR_INVALID_PARAMETER,"last error wrong\n"); - ok(r==FALSE, "should return false\n"); - - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,TRUE,filter,NULL,&ov,NULL); - ok(r==TRUE, "should return true\n"); - - r = WaitForSingleObject( ov.hEvent, 10 ); - ok( r == STATUS_TIMEOUT, "should timeout\n" ); - - r = CreateDirectoryW( subdir, NULL ); - ok( r == TRUE, "failed to create directory\n"); - - r = WaitForSingleObject( ov.hEvent, 1000 ); - ok( r == WAIT_OBJECT_0, "event should be ready\n" ); - - ok( ov.Internal == STATUS_SUCCESS, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 0x12, "ov.InternalHigh wrong\n"); - - pfni = (PFILE_NOTIFY_INFORMATION) buffer; - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - ok( pfni->Action == FILE_ACTION_ADDED, "action wrong\n" ); - ok( pfni->FileNameLength == 6, "len wrong\n" ); - ok( !memcmp(pfni->FileName,&szHoo[1],6), "name wrong\n" ); - - ResetEvent(ov.hEvent); - SetLastError(0xd0b00b00); - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,0,NULL,NULL,NULL); - ok(GetLastError()==ERROR_INVALID_PARAMETER,"last error wrong\n"); - ok(r==FALSE, "should return false\n"); - - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,0,NULL,&ov,NULL); - ok(GetLastError()==ERROR_INVALID_PARAMETER,"last error wrong\n"); - ok(r==FALSE, "should return false\n"); - - filter = FILE_NOTIFY_CHANGE_SIZE; - - SetEvent(ov.hEvent); - ov.Internal = 1; - ov.InternalHigh = 1; - S(U(ov)).Offset = 0; - S(U(ov)).OffsetHigh = 0; - memset( buffer, 0, sizeof buffer ); - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,filter,NULL,&ov,NULL); - ok(r==TRUE, "should return true\n"); - - ok( ov.Internal == STATUS_PENDING, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 1, "ov.InternalHigh wrong\n"); - - r = WaitForSingleObject( ov.hEvent, 0 ); - ok( r == STATUS_TIMEOUT, "should timeout\n" ); - - r = RemoveDirectoryW( subdir ); - ok( r == TRUE, "failed to remove directory\n"); - - r = WaitForSingleObject( ov.hEvent, 1000 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok( ov.Internal == STATUS_SUCCESS, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 0x12, "ov.InternalHigh wrong\n"); - - if (ov.Internal == STATUS_SUCCESS) - { - r = GetOverlappedResult( hdir, &ov, &dwCount, TRUE ); - ok( r == TRUE, "getoverlappedresult failed\n"); - ok( dwCount == 0x12, "count wrong\n"); - } - - pfni = (PFILE_NOTIFY_INFORMATION) buffer; - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - ok( pfni->Action == FILE_ACTION_REMOVED, "action wrong\n" ); - ok( pfni->FileNameLength == 6, "len wrong\n" ); - ok( !memcmp(pfni->FileName,&szHoo[1],6), "name wrong\n" ); - - /* what happens if the buffer is too small? */ - r = pReadDirectoryChangesW(hdir,buffer,0x10,FALSE,filter,NULL,&ov,NULL); - ok(r==TRUE, "should return true\n"); - - r = CreateDirectoryW( subdir, NULL ); - ok( r == TRUE, "failed to create directory\n"); - - r = WaitForSingleObject( ov.hEvent, 1000 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok( ov.Internal == STATUS_NOTIFY_ENUM_DIR, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 0, "ov.InternalHigh wrong\n"); - - /* test the recursive watch */ - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,filter,NULL,&ov,NULL); - ok(r==TRUE, "should return true\n"); - - r = CreateDirectoryW( subsubdir, NULL ); - ok( r == TRUE, "failed to create directory\n"); - - r = WaitForSingleObject( ov.hEvent, 1000 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok( ov.Internal == STATUS_SUCCESS, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 0x18, "ov.InternalHigh wrong\n"); - - pfni = (PFILE_NOTIFY_INFORMATION) buffer; - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - ok( pfni->Action == FILE_ACTION_ADDED, "action wrong\n" ); - ok( pfni->FileNameLength == 0x0c, "len wrong\n" ); - ok( !memcmp(pfni->FileName,&szGa[1],6), "name wrong\n" ); - - r = RemoveDirectoryW( subsubdir ); - ok( r == TRUE, "failed to remove directory\n"); - - ov.Internal = 1; - ov.InternalHigh = 1; - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,filter,NULL,&ov,NULL); - ok(r==TRUE, "should return true\n"); - - r = RemoveDirectoryW( subdir ); - ok( r == TRUE, "failed to remove directory\n"); - - r = WaitForSingleObject( ov.hEvent, 1000 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - pfni = (PFILE_NOTIFY_INFORMATION) buffer; - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - ok( pfni->Action == FILE_ACTION_REMOVED, "action wrong\n" ); - ok( pfni->FileNameLength == 0x0c, "len wrong\n" ); - ok( !memcmp(pfni->FileName,&szGa[1],6), "name wrong\n" ); - - ok( ov.Internal == STATUS_SUCCESS, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 0x18, "ov.InternalHigh wrong\n"); - - CloseHandle(hdir); - - r = RemoveDirectoryW( path ); - ok( r == TRUE, "failed to remove directory\n"); -} - -/* show the behaviour when a null buffer is passed */ -static void test_readdirectorychanges_null(void) -{ - NTSTATUS r; - HANDLE hdir; - char buffer[0x1000]; - DWORD fflags, filter = 0; - OVERLAPPED ov; - WCHAR path[MAX_PATH], subdir[MAX_PATH]; - static const WCHAR szBoo[] = { '\\','b','o','o',0 }; - static const WCHAR szHoo[] = { '\\','h','o','o',0 }; - PFILE_NOTIFY_INFORMATION pfni; - - if (!pReadDirectoryChangesW) - { - skip("ReadDirectoryChangesW is not available\n"); - return; - } - SetLastError(0xdeadbeef); - r = GetTempPathW( MAX_PATH, path ); - if (!r && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("GetTempPathW is not implemented\n"); - return; - } - ok( r != 0, "temp path failed\n"); - if (!r) - return; - - lstrcatW( path, szBoo ); - lstrcpyW( subdir, path ); - lstrcatW( subdir, szHoo ); - - RemoveDirectoryW( subdir ); - RemoveDirectoryW( path ); - - r = CreateDirectoryW(path, NULL); - ok( r == TRUE, "failed to create directory\n"); - - fflags = FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED; - hdir = CreateFileW(path, GENERIC_READ|SYNCHRONIZE|FILE_LIST_DIRECTORY, - FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, fflags, NULL); - ok( hdir != INVALID_HANDLE_VALUE, "failed to open directory\n"); - - ov.hEvent = CreateEvent( NULL, 1, 0, NULL ); - - filter = FILE_NOTIFY_CHANGE_FILE_NAME; - filter |= FILE_NOTIFY_CHANGE_DIR_NAME; - - SetLastError(0xd0b00b00); - ov.Internal = 0; - ov.InternalHigh = 0; - memset( buffer, 0, sizeof buffer ); - - r = pReadDirectoryChangesW(hdir,NULL,0,FALSE,filter,NULL,&ov,NULL); - ok(r==TRUE, "should return true\n"); - - r = WaitForSingleObject( ov.hEvent, 0 ); - ok( r == STATUS_TIMEOUT, "should timeout\n" ); - - r = CreateDirectoryW( subdir, NULL ); - ok( r == TRUE, "failed to create directory\n"); - - r = WaitForSingleObject( ov.hEvent, 0 ); - ok( r == WAIT_OBJECT_0, "event should be ready\n" ); - - ok( ov.Internal == STATUS_NOTIFY_ENUM_DIR, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 0, "ov.InternalHigh wrong\n"); - - ov.Internal = 0; - ov.InternalHigh = 0; - S(U(ov)).Offset = 0; - S(U(ov)).OffsetHigh = 0; - memset( buffer, 0, sizeof buffer ); - - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,FALSE,filter,NULL,&ov,NULL); - ok(r==TRUE, "should return true\n"); - - r = WaitForSingleObject( ov.hEvent, 0 ); - ok( r == STATUS_TIMEOUT, "should timeout\n" ); - - r = RemoveDirectoryW( subdir ); - ok( r == TRUE, "failed to remove directory\n"); - - r = WaitForSingleObject( ov.hEvent, 1000 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok( ov.Internal == STATUS_NOTIFY_ENUM_DIR, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 0, "ov.InternalHigh wrong\n"); - - pfni = (PFILE_NOTIFY_INFORMATION) buffer; - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - - CloseHandle(hdir); - - r = RemoveDirectoryW( path ); - ok( r == TRUE, "failed to remove directory\n"); -} - -static void test_readdirectorychanges_filedir(void) -{ - NTSTATUS r; - HANDLE hdir, hfile; - char buffer[0x1000]; - DWORD fflags, filter = 0; - OVERLAPPED ov; - WCHAR path[MAX_PATH], subdir[MAX_PATH], file[MAX_PATH]; - static const WCHAR szBoo[] = { '\\','b','o','o',0 }; - static const WCHAR szHoo[] = { '\\','h','o','o',0 }; - static const WCHAR szFoo[] = { '\\','f','o','o',0 }; - PFILE_NOTIFY_INFORMATION pfni; - - SetLastError(0xdeadbeef); - r = GetTempPathW( MAX_PATH, path ); - if (!r && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("GetTempPathW is not implemented\n"); - return; - } - ok( r != 0, "temp path failed\n"); - if (!r) - return; - - lstrcatW( path, szBoo ); - lstrcpyW( subdir, path ); - lstrcatW( subdir, szHoo ); - - lstrcpyW( file, path ); - lstrcatW( file, szFoo ); - - DeleteFileW( file ); - RemoveDirectoryW( subdir ); - RemoveDirectoryW( path ); - - r = CreateDirectoryW(path, NULL); - ok( r == TRUE, "failed to create directory\n"); - - fflags = FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED; - hdir = CreateFileW(path, GENERIC_READ|SYNCHRONIZE|FILE_LIST_DIRECTORY, - FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, fflags, NULL); - ok( hdir != INVALID_HANDLE_VALUE, "failed to open directory\n"); - - ov.hEvent = CreateEvent( NULL, 0, 0, NULL ); - - filter = FILE_NOTIFY_CHANGE_FILE_NAME; - - r = pReadDirectoryChangesW(hdir,buffer,sizeof buffer,TRUE,filter,NULL,&ov,NULL); - ok(r==TRUE, "should return true\n"); - - r = WaitForSingleObject( ov.hEvent, 10 ); - ok( r == WAIT_TIMEOUT, "should timeout\n" ); - - r = CreateDirectoryW( subdir, NULL ); - ok( r == TRUE, "failed to create directory\n"); - - hfile = CreateFileW( file, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL ); - ok( hfile != INVALID_HANDLE_VALUE, "failed to create file\n"); - ok( CloseHandle(hfile), "failed toc lose file\n"); - - r = WaitForSingleObject( ov.hEvent, 1000 ); - ok( r == WAIT_OBJECT_0, "event should be ready\n" ); - - ok( ov.Internal == STATUS_SUCCESS, "ov.Internal wrong\n"); - ok( ov.InternalHigh == 0x12, "ov.InternalHigh wrong\n"); - - pfni = (PFILE_NOTIFY_INFORMATION) buffer; - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - ok( pfni->Action == FILE_ACTION_ADDED, "action wrong\n" ); - ok( pfni->FileNameLength == 6, "len wrong\n" ); - ok( !memcmp(pfni->FileName,&szFoo[1],6), "name wrong\n" ); - - r = DeleteFileW( file ); - ok( r == TRUE, "failed to delete file\n"); - - r = RemoveDirectoryW( subdir ); - ok( r == TRUE, "failed to remove directory\n"); - - CloseHandle(hdir); - - r = RemoveDirectoryW( path ); - ok( r == TRUE, "failed to remove directory\n"); -} - -static void test_ffcn_directory_overlap(void) -{ - HANDLE parent_watch, child_watch, parent_thread, child_thread; - char workdir[MAX_PATH], parentdir[MAX_PATH], childdir[MAX_PATH]; - char tempfile[MAX_PATH]; - DWORD threadId; - BOOL ret; - - /* Setup directory hierarchy */ - ret = GetTempPathA(MAX_PATH, workdir); - ok((ret > 0) && (ret <= MAX_PATH), - "GetTempPathA error: %d\n", GetLastError()); - - ret = GetTempFileNameA(workdir, "fcn", 0, tempfile); - ok(ret, "GetTempFileNameA error: %d\n", GetLastError()); - ret = DeleteFileA(tempfile); - ok(ret, "DeleteFileA error: %d\n", GetLastError()); - - lstrcpyA(parentdir, tempfile); - ret = CreateDirectoryA(parentdir, NULL); - ok(ret, "CreateDirectoryA error: %d\n", GetLastError()); - - lstrcpyA(childdir, parentdir); - lstrcatA(childdir, "\\c"); - ret = CreateDirectoryA(childdir, NULL); - ok(ret, "CreateDirectoryA error: %d\n", GetLastError()); - - - /* When recursively watching overlapping directories, changes in child - * should trigger notifications for both child and parent */ - parent_thread = StartNotificationThread(parentdir, TRUE, - FILE_NOTIFY_CHANGE_FILE_NAME); - child_thread = StartNotificationThread(childdir, TRUE, - FILE_NOTIFY_CHANGE_FILE_NAME); - - /* Create a file in child */ - ret = GetTempFileNameA(childdir, "fcn", 0, tempfile); - ok(ret, "GetTempFileNameA error: %d\n", GetLastError()); - - /* Both watches should trigger */ - ret = FinishNotificationThread(parent_thread); - ok(ret, "Missed parent notification\n"); - ret = FinishNotificationThread(child_thread); - ok(ret, "Missed child notification\n"); - - ret = DeleteFileA(tempfile); - ok(ret, "DeleteFileA error: %d\n", GetLastError()); - - - /* Removing a recursive parent watch should not affect child watches. Doing - * so used to crash wineserver. */ - parent_watch = FindFirstChangeNotificationA(parentdir, TRUE, - FILE_NOTIFY_CHANGE_FILE_NAME); - ok(parent_watch != INVALID_HANDLE_VALUE, - "FindFirstChangeNotification error: %d\n", GetLastError()); - child_watch = FindFirstChangeNotificationA(childdir, TRUE, - FILE_NOTIFY_CHANGE_FILE_NAME); - ok(child_watch != INVALID_HANDLE_VALUE, - "FindFirstChangeNotification error: %d\n", GetLastError()); - - ret = FindCloseChangeNotification(parent_watch); - ok(ret, "FindCloseChangeNotification error: %d\n", GetLastError()); - - child_thread = CreateThread(NULL, 0, NotificationThread, - (LPVOID)child_watch, 0, &threadId); - ok(child_thread != NULL, "CreateThread error: %d\n", GetLastError()); - - /* Create a file in child */ - ret = GetTempFileNameA(childdir, "fcn", 0, tempfile); - ok(ret, "GetTempFileNameA error: %d\n", GetLastError()); - - /* Child watch should trigger */ - ret = FinishNotificationThread(child_thread); - ok(ret, "Missed child notification\n"); - - /* clean up */ - ret = DeleteFileA(tempfile); - ok(ret, "DeleteFileA error: %d\n", GetLastError()); - - ret = RemoveDirectoryA(childdir); - ok(ret, "RemoveDirectoryA error: %d\n", GetLastError()); - - ret = RemoveDirectoryA(parentdir); - ok(ret, "RemoveDirectoryA error: %d\n", GetLastError()); -} - -START_TEST(change) -{ - HMODULE hkernel32 = GetModuleHandle("kernel32"); - pReadDirectoryChangesW = (fnReadDirectoryChangesW) - GetProcAddress(hkernel32, "ReadDirectoryChangesW"); - - test_ffcnMultipleThreads(); - /* The above function runs a test that must occur before FindCloseChangeNotification is run in the - current thread to preserve the emptiness of the wine user APC queue. To ensure this it should be - placed first. */ - test_FindFirstChangeNotification(); - test_ffcn(); - test_readdirectorychanges(); - test_readdirectorychanges_null(); - test_readdirectorychanges_filedir(); - test_ffcn_directory_overlap(); -} diff --git a/rostests/winetests/kernel32/codepage.c b/rostests/winetests/kernel32/codepage.c deleted file mode 100755 index e8908f75c45..00000000000 --- a/rostests/winetests/kernel32/codepage.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Unit tests for code page to/from unicode translations - * - * Copyright (c) 2002 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 -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winnls.h" - -static const WCHAR foobarW[] = {'f','o','o','b','a','r',0}; - -static void test_destination_buffer(void) -{ - LPSTR buffer; - INT maxsize; - INT needed; - INT len; - - SetLastError(0xdeadbeef); - needed = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, NULL, 0, NULL, NULL); - ok( (needed > 0), "returned %d with %u (expected '> 0')\n", - needed, GetLastError()); - - maxsize = needed*2; - buffer = HeapAlloc(GetProcessHeap(), 0, maxsize); - if (buffer == NULL) return; - - maxsize--; - memset(buffer, 'x', maxsize); - buffer[maxsize] = '\0'; - SetLastError(0xdeadbeef); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, buffer, needed+1, NULL, NULL); - ok( (len > 0), "returned %d with %u and '%s' (expected '> 0')\n", - len, GetLastError(), buffer); - - memset(buffer, 'x', maxsize); - buffer[maxsize] = '\0'; - SetLastError(0xdeadbeef); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, buffer, needed, NULL, NULL); - ok( (len > 0), "returned %d with %u and '%s' (expected '> 0')\n", - len, GetLastError(), buffer); - - memset(buffer, 'x', maxsize); - buffer[maxsize] = '\0'; - SetLastError(0xdeadbeef); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, buffer, needed-1, NULL, NULL); - ok( !len && (GetLastError() == ERROR_INSUFFICIENT_BUFFER), - "returned %d with %u and '%s' (expected '0' with " - "ERROR_INSUFFICIENT_BUFFER)\n", len, GetLastError(), buffer); - - memset(buffer, 'x', maxsize); - buffer[maxsize] = '\0'; - SetLastError(0xdeadbeef); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, buffer, 1, NULL, NULL); - ok( !len && (GetLastError() == ERROR_INSUFFICIENT_BUFFER), - "returned %d with %u and '%s' (expected '0' with " - "ERROR_INSUFFICIENT_BUFFER)\n", len, GetLastError(), buffer); - - SetLastError(0xdeadbeef); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, buffer, 0, NULL, NULL); - ok( (len > 0), "returned %d with %u (expected '> 0')\n", - len, GetLastError()); - - SetLastError(0xdeadbeef); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, NULL, needed, NULL, NULL); - ok( !len && (GetLastError() == ERROR_INVALID_PARAMETER), - "returned %d with %u (expected '0' with " - "ERROR_INVALID_PARAMETER)\n", len, GetLastError()); - - HeapFree(GetProcessHeap(), 0, buffer); -} - - -static void test_null_source(void) -{ - int len; - DWORD GLE; - - SetLastError(0); - len = WideCharToMultiByte(CP_ACP, 0, NULL, 0, NULL, 0, NULL, NULL); - GLE = GetLastError(); - ok(!len && GLE == ERROR_INVALID_PARAMETER, - "WideCharToMultiByte returned %d with GLE=%u (expected 0 with ERROR_INVALID_PARAMETER)\n", - len, GLE); - - SetLastError(0); - len = WideCharToMultiByte(CP_ACP, 0, NULL, -1, NULL, 0, NULL, NULL); - GLE = GetLastError(); - ok(!len && GLE == ERROR_INVALID_PARAMETER, - "WideCharToMultiByte returned %d with GLE=%u (expected 0 with ERROR_INVALID_PARAMETER)\n", - len, GLE); -} - -/* lstrcmpW is not supported on Win9x! */ -static int mylstrcmpW(const WCHAR* str1, const WCHAR* str2) -{ - while (*str1 && *str1==*str2) { - str1++; - str2++; - } - return *str1-*str2; -} - -static void test_negative_source_length(void) -{ - int len; - char buf[10]; - WCHAR bufW[10]; - - /* Test, whether any negative source length works as strlen() + 1 */ - SetLastError( 0xdeadbeef ); - memset(buf,'x',sizeof(buf)); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -2002, buf, 10, NULL, NULL); - ok(len == 7 && !lstrcmpA(buf, "foobar") && GetLastError() == 0xdeadbeef, - "WideCharToMultiByte(-2002): len=%d error=%u\n", len, GetLastError()); - - SetLastError( 0xdeadbeef ); - memset(bufW,'x',sizeof(bufW)); - len = MultiByteToWideChar(CP_ACP, 0, "foobar", -2002, bufW, 10); - ok(len == 7 && !mylstrcmpW(bufW, foobarW) && GetLastError() == 0xdeadbeef, - "MultiByteToWideChar(-2002): len=%d error=%u\n", len, GetLastError()); - - SetLastError(0xdeadbeef); - memset(bufW, 'x', sizeof(bufW)); - len = MultiByteToWideChar(CP_ACP, 0, "foobar", -1, bufW, 6); - ok(len == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "MultiByteToWideChar(-1): len=%d error=%u\n", len, GetLastError()); -} - -#define LONGBUFLEN 100000 -static void test_negative_dest_length(void) -{ - int len, i; - static char buf[LONGBUFLEN]; - static WCHAR originalW[LONGBUFLEN]; - static char originalA[LONGBUFLEN]; - DWORD theError; - - /* Test return on -1 dest length */ - SetLastError( 0xdeadbeef ); - memset(buf,'x',sizeof(buf)); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, buf, -1, NULL, NULL); - todo_wine { - ok(len == 0 && GetLastError() == ERROR_INVALID_PARAMETER, - "WideCharToMultiByte(destlen -1): len=%d error=%x\n", len, GetLastError()); - } - - /* Test return on -1000 dest length */ - SetLastError( 0xdeadbeef ); - memset(buf,'x',sizeof(buf)); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, buf, -1000, NULL, NULL); - todo_wine { - ok(len == 0 && GetLastError() == ERROR_INVALID_PARAMETER, - "WideCharToMultiByte(destlen -1000): len=%d error=%x\n", len, GetLastError()); - } - - /* Test return on INT_MAX dest length */ - SetLastError( 0xdeadbeef ); - memset(buf,'x',sizeof(buf)); - len = WideCharToMultiByte(CP_ACP, 0, foobarW, -1, buf, INT_MAX, NULL, NULL); - ok(len == 7 && !lstrcmpA(buf, "foobar") && GetLastError() == 0xdeadbeef, - "WideCharToMultiByte(destlen INT_MAX): len=%d error=%x\n", len, GetLastError()); - - /* Test return on INT_MAX dest length and very long input */ - SetLastError( 0xdeadbeef ); - memset(buf,'x',sizeof(buf)); - for (i=0; i < LONGBUFLEN - 1; i++) { - originalW[i] = 'Q'; - originalA[i] = 'Q'; - } - originalW[LONGBUFLEN-1] = 0; - originalA[LONGBUFLEN-1] = 0; - len = WideCharToMultiByte(CP_ACP, 0, originalW, -1, buf, INT_MAX, NULL, NULL); - theError = GetLastError(); - ok(len == LONGBUFLEN && !lstrcmpA(buf, originalA) && theError == 0xdeadbeef, - "WideCharToMultiByte(srclen %d, destlen INT_MAX): len %d error=%x\n", LONGBUFLEN, len, theError); - -} - -static void test_overlapped_buffers(void) -{ - static const WCHAR strW[] = {'j','u','s','t',' ','a',' ','t','e','s','t',0}; - static const char strA[] = "just a test"; - char buf[256]; - int ret; - - memcpy((WCHAR *)(buf + 1), strW, sizeof(strW)); - ret = WideCharToMultiByte(CP_ACP, 0, (WCHAR *)(buf + 1), -1, buf, sizeof(buf), NULL, NULL); - ok(ret == sizeof(strA), "unexpected ret %d\n", ret); - ok(!memcmp(buf, strA, sizeof(strA)), "conversion failed: %s\n", buf); -} - -START_TEST(codepage) -{ - test_destination_buffer(); - test_null_source(); - test_negative_source_length(); - test_negative_dest_length(); - test_overlapped_buffers(); -} diff --git a/rostests/winetests/kernel32/comm.c b/rostests/winetests/kernel32/comm.c deleted file mode 100755 index 36e46ad5c60..00000000000 --- a/rostests/winetests/kernel32/comm.c +++ /dev/null @@ -1,1729 +0,0 @@ -/* Unit test suite for comm functions - * - * Copyright 2003 Kevin Groeneveld - * Copyright 2005 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 - */ - -#include - -#include "wine/test.h" -#include "winbase.h" -#include "winnls.h" - -#define TIMEOUT 1000 /* one second for Timeouts*/ -#define SLOWBAUD 150 -#define FASTBAUD 115200 -#define TIMEDELTA 100 /* 100 ms uncertainty allowed */ - -/* Define the appropriate LOOPBACK(s) TRUE if you have a Loopback cable with - * the mentioned shorts connected to your Serial port - */ -#define LOOPBACK_TXD_RXD FALSE /* Sub-D 9: Short 2-3 */ -#define LOOPBACK_CTS_RTS FALSE /* Sub-D 9: Short 7-8 */ -#define LOOPBACK_DTR_DSR FALSE /* Sub-D 9: Short 4-6 */ -#define LOOPBACK_DTR_RING FALSE /* Sub-D 9: Short 4-9 */ -#define LOOPBACK_DTR_DCD FALSE /* Sub-D 9: Short 4-1 */ -/* Many Linux serial drivers have the TIOCM_LOOP flag in the TIOCM_SET ioctl - * available. For the 8250 this is equivalent to TXD->RXD, OUT2->DCD, - * OUT1->RI, RTS->CTS and DTR->DSR - */ - -typedef struct -{ - char string[100]; - BOOL result; - BOOL old_style; - DCB dcb1, dcb2; - COMMTIMEOUTS timeouts1, timeouts2; -} TEST; - -static TEST test[] = -{ - { - "baud=9600 parity=e data=5 stop=1 xon=on odsr=off octs=off dtr=on rts=on idsr=on", - TRUE, FALSE, - { 0x00000000, 0x00002580, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x05, 0x02, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00002580, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x05, 0x02, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "baud=0 parity=M data=6 stop=1.5 xon=off odsr=on octs=ON dtr=off rts=off idsr=OFF", - TRUE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x06, 0x03, 0x01, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00000000, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x06, 0x03, 0x01, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "BAUD=4000000000 parity=n data=7 stop=2 to=off", - TRUE, FALSE, - { 0x00000000, 0xee6b2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x07, 0x00, 0x02, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xee6b2800, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x07, 0x00, 0x02, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } - }, - { - "Baud=115200 Parity=O Data=8 To=On", - TRUE, FALSE, - { 0x00000000, 0x0001c200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x08, 0x01, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x0001c200, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x08, 0x01, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000EA60 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000EA60 } - }, - { - "PaRiTy=s Data=7 DTR=on", - TRUE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x07, 0x04, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x07, 0x04, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "data=4", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "data=9", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "parity=no", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "stop=0", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "stop=1.501", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "stop=3", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "to=foobar", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - " baud=9600", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "baud= 9600", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "baud=9600,data=8", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "11,n,8,1", - TRUE, TRUE, - { 0x00000000, 0x0000006e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x08, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x0000006e, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x08, 0x00, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "30 ,E, 5,1.5", - TRUE, TRUE, - { 0x00000000, 0x0000012c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x05, 0x02, 0x01, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x0000012c, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x05, 0x02, 0x01, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "60, m, 6, 2 ", - TRUE, TRUE, - { 0x00000000, 0x00000258, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x06, 0x03, 0x02, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00000258, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x06, 0x03, 0x02, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "12 , o , 7 , 1", - TRUE, TRUE, - { 0x00000000, 0x000004b0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x07, 0x01, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x000004b0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x07, 0x01, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "24,s,8,1.5", - TRUE, TRUE, - { 0x00000000, 0x00000960, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x08, 0x04, 0x01, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00000960, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x08, 0x04, 0x01, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "48,n,8,1,p", - TRUE, TRUE, - { 0x00000000, 0x000012c0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x08, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x000012c0, 1, 1, 1, 1, 2, 1, 1, 0, 0, 1, 1, 2, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x08, 0x00, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "96,N,8,1 , x ", - TRUE, TRUE, - { 0x00000000, 0x00002580, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x08, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00002580, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x08, 0x00, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "19, e, 7, 1, x", - TRUE, TRUE, - { 0x00000000, 0x00004b00, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x07, 0x02, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00004b00, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x07, 0x02, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "0,M,7,1,P", - TRUE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x07, 0x03, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00000000, 1, 1, 1, 1, 2, 1, 1, 0, 0, 1, 1, 2, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x07, 0x03, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "4000000000,O,7,1.5,X", - TRUE, TRUE, - { 0x00000000, 0xee6b2800, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x07, 0x01, 0x01, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xee6b2800, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x07, 0x01, 0x01, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "96,N,8,1 to=on", - FALSE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "96,NO,8,1", - FALSE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "96,N,4,1", - FALSE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "96,N,9,1", - FALSE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "96,N,8,0", - FALSE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "96,N,8,3", - FALSE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "96,N,8,1,K", - FALSE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COM0:baud=115200", - FALSE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COMx:baud=38400 data=8", - TRUE, FALSE, - { 0x00000000, 0x00009600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x08, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00009600, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x08, 0xff, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COMx :to=on stop=1.5", - TRUE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x01, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0x01, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000EA60 }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000EA60 } - }, - { - "COMx: baud=12345 data=7", - TRUE, FALSE, - { 0x00000000, 0x00003039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x07, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00003039, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x07, 0xff, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COMx : xon=on odsr=off", - TRUE, FALSE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 0, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COM0:9600,N,8,1", - FALSE, TRUE, - { 0x00000000, 0x00000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x00, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0xffffffff, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COMx:9600,N,8,1", - TRUE, TRUE, - { 0x00000000, 0x00002580, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x08, 0x00, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00002580, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x08, 0x00, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COMx: 11,E,7,2", - TRUE, TRUE, - { 0x00000000, 0x0000006e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x07, 0x02, 0x02, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x0000006e, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x07, 0x02, 0x02, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COMx :19,M,5,1", - TRUE, TRUE, - { 0x00000000, 0x00004b00, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x05, 0x03, 0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x00004b00, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x05, 0x03, 0x00, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, - { - "COMx : 57600,S,6,2,x", - TRUE, TRUE, - { 0x00000000, 0x0000e100, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0x00000, 0x0000, 0x0000, 0x0000, 0x06, 0x04, 0x02, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, 0x0000 }, - { 0xffffffff, 0x0000e100, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0x1ffff, 0xffff, 0xffff, 0xffff, 0x06, 0x04, 0x02, (char)0xff, (char)0xff, (char)0xff, (char)0xff, (char)0xff, 0xffff }, - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }, -}; - -#define TEST_COUNT (sizeof(test) / sizeof(TEST)) - -/* This function can be useful if you are modifying the test cases and want to - output the contents of a DCB structure. */ -/*static print_dcb(DCB *pdcb) -{ - printf("0x%08x, 0x%08x, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, 0x%05x, 0x%04x, 0x%04x, 0x%04x, 0x%02x, 0x%02x, 0x%02x, (char)0x%02x, (char)0x%02x, (char)0x%02x, (char)0x%02x, (char)0x%02x, 0x%04x\n", - pdcb->DCBlength, - pdcb->BaudRate, - pdcb->fBinary, - pdcb->fParity, - pdcb->fOutxCtsFlow, - pdcb->fOutxDsrFlow, - pdcb->fDtrControl, - pdcb->fDsrSensitivity, - pdcb->fTXContinueOnXoff, - pdcb->fOutX, - pdcb->fInX, - pdcb->fErrorChar, - pdcb->fNull, - pdcb->fRtsControl, - pdcb->fAbortOnError, - pdcb->fDummy2, - pdcb->wReserved, - pdcb->XonLim, - pdcb->XoffLim, - pdcb->ByteSize, - pdcb->Parity, - pdcb->StopBits, - pdcb->XonChar & 0xff, - pdcb->XoffChar & 0xff, - pdcb->ErrorChar & 0xff, - pdcb->EofChar & 0xff, - pdcb->EvtChar & 0xff, - pdcb->wReserved1 & 0xffff ); -} */ - -static void check_result(const char *function, TEST *ptest, int initial_value, BOOL result) -{ - DWORD LastError = GetLastError(); - DWORD CorrectError = (ptest->result ? 0xdeadbeef : ERROR_INVALID_PARAMETER); - - ok(LastError == CorrectError, "%s(\"%s\"), 0x%02x: GetLastError() returned %d, should be %d\n", function, ptest->string, initial_value, LastError, CorrectError); - ok(result == ptest->result, "%s(\"%s\"), 0x%02x: return value should be %s\n", function, ptest->string, initial_value, ptest->result ? "TRUE" : "FALSE"); -} - -#define check_dcb_member(a,b) ok(pdcb1->a == pdcb2->a, "%s(\"%s\"), 0x%02x: "#a" is "b", should be "b"\n", function, ptest->string, initial_value, pdcb1->a, pdcb2->a) -#define check_dcb_member2(a,c,b) if(pdcb2->a == c) { check_dcb_member(a,b); } else { ok(pdcb1->a == pdcb2->a || pdcb1->a == c, "%s(\"%s\"), 0x%02x: "#a" is "b", should be "b" or "b"\n", function, ptest->string, initial_value, pdcb1->a, pdcb2->a, c); } - -static void check_dcb(const char *function, TEST *ptest, int initial_value, DCB *pdcb1, DCB *pdcb2) -{ - /* DCBlength is a special case since Win 9x sets it but NT does not. - We will accept either as correct. */ - check_dcb_member2(DCBlength, (DWORD)sizeof(DCB), "%u"); - - /* For old style control strings Win 9x does not set the next five members, NT does. */ - if(ptest->old_style && ptest->result) - { - check_dcb_member2(fOutxCtsFlow, ((unsigned int)initial_value & 1), "%u"); - check_dcb_member2(fDtrControl, ((unsigned int)initial_value & 3), "%u"); - check_dcb_member2(fOutX, ((unsigned int)initial_value & 1), "%u"); - check_dcb_member2(fInX, ((unsigned)initial_value & 1), "%u"); - check_dcb_member2(fRtsControl, ((unsigned)initial_value & 3), "%u"); - } - else - { - check_dcb_member(fOutxCtsFlow, "%u"); - check_dcb_member(fDtrControl, "%u"); - check_dcb_member(fOutX, "%u"); - check_dcb_member(fInX, "%u"); - check_dcb_member(fRtsControl, "%u"); - } - - if(ptest->result) - { - /* For the idsr=xxx parameter, NT sets fDsrSensitivity, 9x sets - fOutxDsrFlow. */ - if(!ptest->old_style) - { - check_dcb_member2(fOutxDsrFlow, pdcb2->fDsrSensitivity, "%u"); - check_dcb_member2(fDsrSensitivity, pdcb2->fOutxDsrFlow, "%u"); - } - else - { - /* For old style control strings Win 9x does not set the - fOutxDsrFlow member, NT does. */ - check_dcb_member2(fOutxDsrFlow, ((unsigned int)initial_value & 1), "%u"); - check_dcb_member(fDsrSensitivity, "%u"); - } - } - else - { - check_dcb_member(fOutxDsrFlow, "%u"); - check_dcb_member(fDsrSensitivity, "%u"); - } - - /* Check the result of the DCB members. */ - check_dcb_member(BaudRate, "%u"); - check_dcb_member(fBinary, "%u"); - check_dcb_member(fParity, "%u"); - check_dcb_member(fTXContinueOnXoff, "%u"); - check_dcb_member(fErrorChar, "%u"); - check_dcb_member(fNull, "%u"); - check_dcb_member(fAbortOnError, "%u"); - check_dcb_member(fDummy2, "%u"); - check_dcb_member(wReserved, "%u"); - check_dcb_member(XonLim, "%u"); - check_dcb_member(XoffLim, "%u"); - check_dcb_member(ByteSize, "%u"); - check_dcb_member(Parity, "%u"); - check_dcb_member(StopBits, "%u"); - check_dcb_member(XonChar, "%d"); - check_dcb_member(XoffChar, "%d"); - check_dcb_member(ErrorChar, "%d"); - check_dcb_member(EofChar, "%d"); - check_dcb_member(EvtChar, "%d"); - check_dcb_member(wReserved1, "%u"); -} - -#define check_timeouts_member(a) ok(ptimeouts1->a == ptimeouts2->a, "%s(\"%s\"), 0x%02x: "#a" is %u, should be %u\n", function, ptest->string, initial_value, ptimeouts1->a, ptimeouts2->a); - -static void check_timeouts(const char *function, TEST *ptest, int initial_value, COMMTIMEOUTS *ptimeouts1, COMMTIMEOUTS *ptimeouts2) -{ - check_timeouts_member(ReadIntervalTimeout); - check_timeouts_member(ReadTotalTimeoutMultiplier); - check_timeouts_member(ReadTotalTimeoutConstant); - check_timeouts_member(WriteTotalTimeoutMultiplier); - check_timeouts_member(WriteTotalTimeoutConstant); -} - -static void test_BuildCommDCBA(TEST *ptest, int initial_value, DCB *pexpected_dcb) -{ - BOOL result; - DCB dcb; - - /* set initial conditions */ - memset(&dcb, initial_value, sizeof(DCB)); - SetLastError(0xdeadbeef); - - result = BuildCommDCBA(ptest->string, &dcb); - - /* check results */ - check_result("BuildCommDCBA", ptest, initial_value, result); - check_dcb("BuildCommDCBA", ptest, initial_value, &dcb, pexpected_dcb); -} - -static void test_BuildCommDCBAndTimeoutsA(TEST *ptest, int initial_value, DCB *pexpected_dcb, COMMTIMEOUTS *pexpected_timeouts) -{ - BOOL result; - DCB dcb; - COMMTIMEOUTS timeouts; - - /* set initial conditions */ - memset(&dcb, initial_value, sizeof(DCB)); - memset(&timeouts, initial_value, sizeof(COMMTIMEOUTS)); - SetLastError(0xdeadbeef); - - result = BuildCommDCBAndTimeoutsA(ptest->string, &dcb, &timeouts); - - /* check results */ - check_result("BuildCommDCBAndTimeoutsA", ptest, initial_value, result); - check_dcb("BuildCommDCBAndTimeoutsA", ptest, initial_value, &dcb, pexpected_dcb); - check_timeouts("BuildCommDCBAndTimeoutsA", ptest, initial_value, &timeouts, pexpected_timeouts); -} - -static void test_BuildCommDCBW(TEST *ptest, int initial_value, DCB *pexpected_dcb) -{ - BOOL result; - DCB dcb; - WCHAR wide_string[sizeof(ptest->string)]; - - MultiByteToWideChar(CP_ACP, 0, ptest->string, -1, wide_string, sizeof(wide_string) / sizeof(WCHAR)); - - /* set initial conditions */ - memset(&dcb, initial_value, sizeof(DCB)); - SetLastError(0xdeadbeef); - - result = BuildCommDCBW(wide_string, &dcb); - - if(GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return; - - /* check results */ - check_result("BuildCommDCBW", ptest, initial_value, result); - check_dcb("BuildCommDCBW", ptest, initial_value, &dcb, pexpected_dcb); -} - -static void test_BuildCommDCBAndTimeoutsW(TEST *ptest, int initial_value, DCB *pexpected_dcb, COMMTIMEOUTS *pexpected_timeouts) -{ - BOOL result; - DCB dcb; - COMMTIMEOUTS timeouts; - WCHAR wide_string[sizeof(ptest->string)]; - - MultiByteToWideChar(CP_ACP, 0, ptest->string, -1, wide_string, sizeof(wide_string) / sizeof(WCHAR)); - - /* set initial conditions */ - memset(&dcb, initial_value, sizeof(DCB)); - memset(&timeouts, initial_value, sizeof(COMMTIMEOUTS)); - SetLastError(0xdeadbeef); - - result = BuildCommDCBAndTimeoutsW(wide_string, &dcb, &timeouts); - - if(GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return; - - /* check results */ - check_result("BuildCommDCBAndTimeoutsA", ptest, initial_value, result); - check_dcb("BuildCommDCBAndTimeoutsA", ptest, initial_value, &dcb, pexpected_dcb); - check_timeouts("BuildCommDCBAndTimeoutsA", ptest, initial_value, &timeouts, pexpected_timeouts); -} - -static void test_BuildCommDCB(void) -{ - char port_name[] = "COMx"; - char port = 0; - unsigned int i; - char *ptr; - - /* Some of these tests require a valid COM port. This loop will try to find - a valid port. */ - for(port_name[3] = '1'; port_name[3] <= '9'; port_name[3]++) - { - COMMCONFIG commconfig; - DWORD size = sizeof(COMMCONFIG); - - if(GetDefaultCommConfig(port_name, &commconfig, &size)) - { - port = port_name[3]; - break; - } - } - - if(!port) - trace("Could not find a valid COM port. Some tests will be skipped.\n"); - - for(i = 0; i < TEST_COUNT; i++) - { - /* Check if this test case needs a valid COM port. */ - ptr = strstr(test[i].string, "COMx"); - - /* If required, substitute valid port number into device control string. */ - if(ptr) - { - if(port) - ptr[3] = port; - else - continue; - } - - test_BuildCommDCBA(&test[i], 0x00, &test[i].dcb1); - test_BuildCommDCBA(&test[i], 0xff, &test[i].dcb2); - test_BuildCommDCBAndTimeoutsA(&test[i], 0x00, &test[i].dcb1, &test[i].timeouts1); - test_BuildCommDCBAndTimeoutsA(&test[i], 0xff, &test[i].dcb2, &test[i].timeouts2); - - test_BuildCommDCBW(&test[i], 0x00, &test[i].dcb1); - test_BuildCommDCBW(&test[i], 0xff, &test[i].dcb2); - test_BuildCommDCBAndTimeoutsW(&test[i], 0x00, &test[i].dcb1, &test[i].timeouts1); - test_BuildCommDCBAndTimeoutsW(&test[i], 0xff, &test[i].dcb2, &test[i].timeouts2); - } -} - -static HANDLE test_OpenComm(BOOL doOverlap) -{ - HANDLE hcom = INVALID_HANDLE_VALUE; - char port_name[] = "COMx"; - static BOOL shown = FALSE; - DWORD errors; - COMSTAT comstat; - - /* Try to find a port */ - for(port_name[3] = '1'; port_name[3] <= '9'; port_name[3]++) - { - hcom = CreateFile( port_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, - (doOverlap)?FILE_FLAG_OVERLAPPED:0, NULL ); - if (hcom != INVALID_HANDLE_VALUE) - break; - } - if(!shown) - { - if (hcom == INVALID_HANDLE_VALUE) - trace("Could not find a valid COM port. Skipping test_ReadTimeOut\n"); - else - trace("Found Com port %s. Connected devices may disturbe results\n", port_name); - /*shown = TRUE; */ - } - if (hcom != INVALID_HANDLE_VALUE) - { - BOOL ret; - - ret = ClearCommError(hcom, &errors, &comstat); - if (!ret && GetLastError() == ERROR_NOT_READY) - { - trace("%s doesn't respond, skipping the test\n", port_name); - CloseHandle(hcom); - return INVALID_HANDLE_VALUE; - } - - ok(ret, "Unexpected error %u on open\n", GetLastError()); - ok(comstat.cbInQue == 0, "Unexpected %d chars in InQueue\n",comstat.cbInQue); - ok(comstat.cbOutQue == 0, "Still pending %d charcters in OutQueue\n", comstat.cbOutQue); - ok(errors == 0, "Unexpected errors 0x%08x\n", errors); - } - return hcom; -} - -static void test_GetModemStatus(HANDLE hcom) -{ - DWORD ModemStat = 0; - - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - trace("GetCommModemStatus returned 0x%08x->%s%s%s%s\n", ModemStat, - (ModemStat &MS_RLSD_ON)?"MS_RLSD_ON ":"", - (ModemStat &MS_RING_ON)?"MS_RING_ON ":"", - (ModemStat &MS_DSR_ON)?"MS_DSR_ON ":"", - (ModemStat &MS_CTS_ON)?"MS_CTS_ON ":""); -} - -/* When we don't write anything, Read should time out even on a loopbacked port */ -static void test_ReadTimeOut(HANDLE hcom) -{ - DCB dcb; - COMMTIMEOUTS timeouts; - char rbuf[32]; - DWORD before, after, read, timediff, LastError; - BOOL res; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - dcb.BaudRate = FASTBAUD; - dcb.ByteSize = 8; - dcb.Parity = NOPARITY; - dcb.fRtsControl=RTS_CONTROL_ENABLE; - dcb.fDtrControl=DTR_CONTROL_ENABLE; - dcb.StopBits = ONESTOPBIT; - ok(SetCommState(hcom, &dcb), "SetCommState failed\n"); - - ZeroMemory( &timeouts, sizeof(timeouts)); - timeouts.ReadTotalTimeoutConstant = TIMEOUT; - ok(SetCommTimeouts(hcom, &timeouts),"SetCommTimeouts failed\n"); - - before = GetTickCount(); - SetLastError(0xdeadbeef); - res = ReadFile(hcom, rbuf, sizeof(rbuf), &read, NULL); - LastError = GetLastError(); - after = GetTickCount(); - ok( res == TRUE, "A timed-out read should return TRUE\n"); - ok( LastError == 0xdeadbeef, "err=%d\n", LastError); - timediff = after - before; - ok( timediff > TIMEOUT>>2 && timediff < TIMEOUT *2, - "Unexpected TimeOut %d, expected %d\n", timediff, TIMEOUT); -} - -static void test_waittxempty(HANDLE hcom) -{ - DCB dcb; - COMMTIMEOUTS timeouts; - char tbuf[]="test_waittxempty"; - DWORD before, after, written, timediff, evtmask = 0; - BOOL res_write, res; - DWORD baud = SLOWBAUD; - - trace("test_waittxempty\n"); - /* set a low baud rate to have ample time*/ - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - dcb.BaudRate = baud; - dcb.ByteSize = 8; - dcb.Parity = NOPARITY; - dcb.fRtsControl=RTS_CONTROL_ENABLE; - dcb.fDtrControl=DTR_CONTROL_ENABLE; - dcb.StopBits = ONESTOPBIT; - ok(SetCommState(hcom, &dcb), "SetCommState failed\n"); - - ZeroMemory( &timeouts, sizeof(timeouts)); - timeouts.ReadTotalTimeoutConstant = TIMEOUT; - ok(SetCommTimeouts(hcom, &timeouts),"SetCommTimeouts failed\n"); - - ok(SetupComm(hcom,1024,1024),"SetUpComm failed\n"); - ok(SetCommMask(hcom, EV_TXEMPTY), "SetCommMask failed\n"); - - before = GetTickCount(); - res_write=WriteFile(hcom, tbuf, sizeof(tbuf), &written, NULL); - after = GetTickCount(); - ok(res_write == TRUE, "WriteFile failed\n"); - ok(written == sizeof(tbuf), - "WriteFile: Unexpected write_size %d\n", written); - - trace("WriteFile succeeded, took %d ms to write %d Bytes at %d Baud\n", - after - before, written, baud); - - before = GetTickCount(); - res = WaitCommEvent(hcom, &evtmask, NULL); - after = GetTickCount(); - - ok(res == TRUE, "WaitCommEvent failed\n"); - ok((evtmask & EV_TXEMPTY), - "WaitCommEvent: Unexpected EvtMask 0x%08x, expected 0x%08x\n", - evtmask, EV_TXEMPTY); - - timediff = after - before; - - trace("WaitCommEvent for EV_TXEMPTY took %d ms\n", timediff); - /* 050604: This shows a difference between XP (tested with mingw compiled crosstest): - XP returns Writefile only after everything went out of the Serial port, - while wine returns immedate. - Thus on XP, WaintCommEvent after setting the CommMask for EV_TXEMPTY - nearly return immediate, - while on wine the most time is spent here - */ -} - -/* A new open handle should not return error or have bytes in the Queues */ -static void test_ClearCommErrors(HANDLE hcom) -{ - DWORD errors; - COMSTAT lpStat; - - ok(ClearCommError(hcom, &errors, &lpStat), "ClearCommError failed\n"); - ok(lpStat.cbInQue == 0, "Unexpected %d chars in InQueue\n", lpStat.cbInQue); - ok(lpStat.cbOutQue == 0, "Unexpected %d chars in OutQueue\n", lpStat.cbOutQue); - ok(errors == 0, "ClearCommErrors: Unexpected error 0x%08x\n", errors); - trace("test_ClearCommErrors done\n"); -} - -static void test_non_pending_errors(HANDLE hcom) -{ - DCB dcb; - DWORD err; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - dcb.ByteSize = 255; /* likely bogus */ - ok(!SetCommState(hcom, &dcb), "SetCommState should have failed\n"); - ok(ClearCommError(hcom, &err, NULL), "ClearCommError should succeed\n"); - ok(!(err & CE_MODE), "ClearCommError shouldn't set CE_MODE byte in this case (%x)\n", err); -} - -/**/ -static void test_LoopbackRead(HANDLE hcom) -{ - DCB dcb; - COMMTIMEOUTS timeouts; - char rbuf[32]; - DWORD before, after, diff, read, read1, written, evtmask=0, i; - BOOL res; - char tbuf[]="test_LoopbackRead"; - - trace("Starting test_LoopbackRead\n"); - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - dcb.BaudRate = FASTBAUD; - dcb.ByteSize = 8; - dcb.Parity = NOPARITY; - dcb.fRtsControl=RTS_CONTROL_ENABLE; - dcb.fDtrControl=DTR_CONTROL_ENABLE; - dcb.StopBits = ONESTOPBIT; - ok(SetCommState(hcom, &dcb), "SetCommState failed\n"); - - ZeroMemory( &timeouts, sizeof(timeouts)); - timeouts.ReadTotalTimeoutConstant = TIMEOUT; - ok(SetCommTimeouts(hcom, &timeouts),"SetCommTimeouts failed\n"); - - ok(SetCommMask(hcom, EV_TXEMPTY), "SetCommMask failed\n"); - - before = GetTickCount(); - ok(WriteFile(hcom,tbuf,sizeof(tbuf),&written, NULL), "WriteFile failed\n"); - after = GetTickCount(); - ok(written == sizeof(tbuf),"WriteFile %d bytes written\n", written); - diff = after -before; - - /* make sure all bytes are written, so Readfile will succeed in one call*/ - ok(WaitCommEvent(hcom, &evtmask, NULL), "WaitCommEvent failed\n"); - before = GetTickCount(); - ok(evtmask == EV_TXEMPTY, - "WaitCommEvent: Unexpected EvtMask 0x%08x, expected 0x%08x\n", - evtmask, EV_TXEMPTY); - trace("Write %d ms WaitCommEvent EV_TXEMPTY %d ms\n", diff, before- after); - - read=0; - ok(ReadFile(hcom, rbuf, sizeof(rbuf), &read, NULL), "Readfile failed\n"); - ok(read == sizeof(tbuf),"ReadFile read %d bytes, expected \"%s\"\n", read,rbuf); - - /* Now do the same with a slower Baud rate. - As we request more characters then written, we will hit the timeout - */ - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - dcb.BaudRate = 9600; - dcb.ByteSize = 8; - dcb.Parity = NOPARITY; - dcb.fRtsControl=RTS_CONTROL_ENABLE; - dcb.fDtrControl=DTR_CONTROL_ENABLE; - dcb.StopBits = ONESTOPBIT; - ok(SetCommState(hcom, &dcb), "SetCommState failed\n"); - - ok(SetCommMask(hcom, EV_RXCHAR), "SetCommMask failed\n"); - ok(WriteFile(hcom,tbuf,sizeof(tbuf),&written, NULL), "WriteFile failed\n"); - ok(written == sizeof(tbuf),"WriteFile %d bytes written\n", written); - - trace("WaitCommEventEV_RXCHAR\n"); - ok(WaitCommEvent(hcom, &evtmask, NULL), "WaitCommEvent failed\n"); - ok(evtmask == EV_RXCHAR, "WaitCommEvent: Unexpected EvtMask 0x%08x, expected 0x%08x\n", - evtmask, EV_RXCHAR); - - before = GetTickCount(); - res = ReadFile(hcom, rbuf, sizeof(rbuf), &read, NULL); - after = GetTickCount(); - ok(res, "Readfile failed\n"); - ok(read == sizeof(tbuf),"ReadFile read %d bytes\n", read); - diff = after - before; - trace("Readfile for %d chars took %d ms\n", read, diff); - ok( (diff > TIMEOUT - TIMEDELTA) && (diff < TIMEOUT + TIMEDELTA), - "Timedout Wait took %d ms, expected around %d\n", diff, TIMEOUT); - - /* now do a plain read with slow speed - * This will result in several low level reads and a timeout to happen - */ - dcb.BaudRate = SLOWBAUD; - ok(SetCommState(hcom, &dcb), "SetCommState failed\n"); - ok(WriteFile(hcom,tbuf,sizeof(tbuf),&written, NULL), "WriteFile failed\n"); - before = GetTickCount(); - read = 0; - read1 =0; - i=0; - do - { - res = ReadFile(hcom, rbuf+read, sizeof(rbuf-read), &read1, NULL); - ok(res, "Readfile failed\n"); - read += read1; - i++; - } - while ((read < sizeof(tbuf)) && (i <10)); - after = GetTickCount(); - ok( read == sizeof(tbuf),"ReadFile read %d bytes\n", read); - trace("Plain Read for %d char at %d baud took %d ms\n", read, SLOWBAUD, after-before); -} - -static void test_LoopbackCtsRts(HANDLE hcom) -{ - DWORD ModemStat = 0, defaultStat = 0; - DCB dcb; - - memset (&dcb, 0, sizeof (dcb)); - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - if (dcb.fRtsControl == RTS_CONTROL_HANDSHAKE) - { - trace("RTS_CONTROL_HANDSHAKE is set, so don't manipulate RTS\n"); - return; - } - ok(GetCommModemStatus(hcom, &defaultStat), "GetCommModemStatus failed\n"); - /* XP returns some values in the low nibble, so mask them out*/ - defaultStat &= MS_CTS_ON|MS_DSR_ON|MS_RING_ON|MS_RLSD_ON; - if(defaultStat & MS_CTS_ON) - { - ok(EscapeCommFunction(hcom, CLRRTS), "EscapeCommFunction failed to clear RTS\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok ((ModemStat & MS_CTS_ON) == 0, "CTS didn't react: 0x%04x, expected 0x%04x\n", - ModemStat, (defaultStat & ~MS_CTS_ON)); - ok(EscapeCommFunction(hcom, SETRTS), "EscapeCommFunction failed to clear RTS\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok (ModemStat == defaultStat, "Failed to restore CTS: 0x%04x, expected 0x%04x\n", - ModemStat, defaultStat); - } - else - { - ok(EscapeCommFunction(hcom, SETRTS), "EscapeCommFunction failed to set RTS\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok ((ModemStat & MS_CTS_ON) == MS_CTS_ON, - "CTS didn't react: 0x%04x, expected 0x%04x\n", - ModemStat, (defaultStat | MS_CTS_ON)); - ok(EscapeCommFunction(hcom, CLRRTS), "EscapeCommFunction failed to clear RTS\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok (ModemStat == defaultStat, "Failed to restore CTS: 0x%04x, expected 0x%04x\n", - ModemStat, defaultStat); - } -} - -static void test_LoopbackDtrDcd(HANDLE hcom) -{ - DWORD ModemStat = 0, defaultStat = 0; - DCB dcb; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - if (dcb.fDtrControl == DTR_CONTROL_HANDSHAKE) - { - trace("DTR_CONTROL_HANDSHAKE is set, so don't manipulate DTR\n"); - return; - } - ok(GetCommModemStatus(hcom, &defaultStat), "GetCommModemStatus failed\n"); - /* XP returns some values in the low nibble, so mask them out*/ - defaultStat &= MS_CTS_ON|MS_DSR_ON|MS_RING_ON|MS_RLSD_ON; - if(defaultStat & MS_RLSD_ON) - { - ok(EscapeCommFunction(hcom, CLRDTR), "EscapeCommFunction failed to clear DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok ((ModemStat & MS_RLSD_ON) == 0, "RLSD didn't react: 0x%04x, expected 0x%04x\n", - ModemStat, (defaultStat & ~MS_RLSD_ON)); - ok(EscapeCommFunction(hcom, SETDTR), "EscapeCommFunction failed to set DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok (ModemStat == defaultStat, "Failed to restore RLSD: 0x%04x, expected 0x%04x\n", - ModemStat, defaultStat); - } - else - { - ok(EscapeCommFunction(hcom, SETDTR), "EscapeCommFunction failed to set DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok ((ModemStat & MS_RLSD_ON) == MS_RLSD_ON, - "RLSD didn't react: 0x%04x, expected 0x%04x\n", - ModemStat, (defaultStat | MS_RLSD_ON)); - ok(EscapeCommFunction(hcom, CLRDTR), "EscapeCommFunction failed to clear DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok (ModemStat == defaultStat, "Failed to restore RLSD: 0x%04x, expected 0x%04x\n", - ModemStat, defaultStat); - } -} - -static void test_LoopbackDtrDsr(HANDLE hcom) -{ - DWORD ModemStat = 0, defaultStat = 0; - DCB dcb; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - if (dcb.fDtrControl == DTR_CONTROL_DISABLE) - { - trace("DTR_CONTROL_HANDSHAKE is set, so don't manipulate DTR\n"); - return; - } - ok(GetCommModemStatus(hcom, &defaultStat), "GetCommModemStatus failed\n"); - /* XP returns some values in the low nibble, so mask them out*/ - defaultStat &= MS_CTS_ON|MS_DSR_ON|MS_RING_ON|MS_RLSD_ON; - if(defaultStat & MS_DSR_ON) - { - ok(EscapeCommFunction(hcom, CLRDTR), "EscapeCommFunction failed to clear DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok ((ModemStat & MS_DSR_ON) == 0, "CTS didn't react: 0x%04x, expected 0x%04x\n", - ModemStat, (defaultStat & ~MS_DSR_ON)); - ok(EscapeCommFunction(hcom, SETDTR), "EscapeCommFunction failed to clear DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok (ModemStat == defaultStat, "Failed to restore DSR: 0x%04x, expected 0x%04x\n", - ModemStat, defaultStat); - } - else - { - ok(EscapeCommFunction(hcom, SETDTR), "EscapeCommFunction failed to set DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok ((ModemStat & MS_DSR_ON) == MS_DSR_ON, - "CTS didn't react: 0x%04x,expected 0x%04x\n", - ModemStat, (defaultStat | MS_DSR_ON)); - ok(EscapeCommFunction(hcom, CLRDTR), "EscapeCommFunction failed to clear DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok (ModemStat == defaultStat, "Failed to restore DSR: 0x%04x, expected 0x%04x\n", - ModemStat, defaultStat); - } -} - -static void test_LoopbackDtrRing(HANDLE hcom) -{ - DWORD ModemStat = 0, defaultStat = 0; - DCB dcb; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - if (dcb.fDtrControl == DTR_CONTROL_HANDSHAKE) - { - trace("DTR_CONTROL_HANDSHAKE is set, so don't manipulate DTR\n"); - return; - } - ok(GetCommModemStatus(hcom, &defaultStat), "GetCommModemStatus failed\n"); - /* XP returns some values in the low nibble, so mask them out*/ - defaultStat &= MS_CTS_ON|MS_DSR_ON|MS_RING_ON|MS_RLSD_ON; - if(defaultStat & MS_RING_ON) - { - ok(EscapeCommFunction(hcom, CLRDTR), "EscapeCommFunction failed to clear DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok ((ModemStat & MS_RING_ON) == 0, "RING didn't react: 0x%04x, expected 0x%04x\n", - ModemStat, (defaultStat & ~MS_RING_ON)); - ok(EscapeCommFunction(hcom, SETDTR), "EscapeCommFunction failed to set DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok (ModemStat == defaultStat, "Failed to restore RING: 0x%04x, expected 0x%04x\n", - ModemStat, defaultStat); - } - else - { - ok(EscapeCommFunction(hcom, SETDTR), "EscapeCommFunction failed to set DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok ((ModemStat & MS_RING_ON) == MS_RING_ON, - "RING didn't react: 0x%04x,expected 0x%04x\n", - ModemStat, (defaultStat | MS_RING_ON)); - ok(EscapeCommFunction(hcom, CLRDTR), "EscapeCommFunction failed to clear DTR\n"); - ok(GetCommModemStatus(hcom, &ModemStat), "GetCommModemStatus failed\n"); - ok (ModemStat == defaultStat, "Failed to restore RING: 0x%04x, expected 0x%04x\n", - ModemStat, defaultStat); - } -} - -/* - * Set up a WaitCommEvent for anything in the receive buffer, - * then write to TX to put a character - * into the RX buffer - * Need Loopback TX->RX -*/ - -static void test_WaitRx(HANDLE hcom) -{ - OVERLAPPED overlapped, overlapped_w; - HANDLE hComPortEvent, hComWriteEvent; - DWORD before, after, after1, diff, success_wait = FALSE, success_write; - DWORD err_wait, err_write, written, evtmask=0; - - ok(SetCommMask(hcom, EV_RXCHAR), "SetCommMask failed\n"); - hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); - ok(hComPortEvent != 0, "CreateEvent failed\n"); - ZeroMemory( &overlapped, sizeof(overlapped)); - overlapped.hEvent = hComPortEvent; - - ok((hComWriteEvent = CreateEvent( NULL, TRUE, FALSE, NULL )) !=0, - "CreateEvent res %d\n", - GetLastError()); - ZeroMemory( &overlapped_w, sizeof(overlapped_w)); - overlapped_w.hEvent = hComWriteEvent; - - before = GetTickCount(); - {success_wait = WaitCommEvent(hcom, &evtmask, &overlapped);} - err_wait = GetLastError(); - after = GetTickCount(); - trace("Success 0x%08x err %d evtmask 0x%08x\n", success_wait, err_wait, evtmask); - ok(success_wait || err_wait == ERROR_IO_PENDING, "overlapped WaitCommEvent failed\n"); - trace("overlapped WriteCommEvent returned.\n"); - - success_write= WriteFile(hcom, "X", 1, &written, &overlapped_w); - err_write = GetLastError(); - ok(success_write || err_write == ERROR_IO_PENDING, - "overlapped WriteFile failed, err %d\n", - err_write); - - if (!success_write && (err_write == ERROR_IO_PENDING)) { - success_write = WaitForSingleObjectEx(hComWriteEvent, TIMEOUT, TRUE); - err_write = GetLastError(); - ok(success_write == WAIT_OBJECT_0, "WaitForSingleObjectEx, res %d, err %d\n", - success_write, err_write); - } - Sleep(TIMEOUT >>1); - success_write = GetOverlappedResult(hcom, &overlapped_w, &written, FALSE); - err_write = GetLastError(); - - trace("Write after Wait res 0x%08x err %d\n",success_write, err_write); - ok(success_write && written ==1, "Write after Wait res 0x%08x err %d\n", - success_write, err_write); - - if (!success_wait && (err_wait == ERROR_IO_PENDING)) { - success_wait = WaitForSingleObjectEx(hComPortEvent, TIMEOUT, TRUE); - err_wait = GetLastError(); - ok(success_wait == WAIT_OBJECT_0, "wait hComPortEvent, res 0x%08x, err %d\n", - success_wait, err_wait); - } - success_wait = GetOverlappedResult(hcom, &overlapped, &written, FALSE); - err_wait = GetLastError(); - after1 = GetTickCount(); - trace("Success 0x%08x err %d evtmask 0x%08x diff1 %d, diff2 %d\n", - success_wait, err_wait, evtmask, after-before, after1-before); - - ok(evtmask & EV_RXCHAR, "Detect EV_RXCHAR: 0x%08x, expected 0x%08x\n", - evtmask, EV_RXCHAR); - diff = after1 - before; - ok ((diff > (TIMEOUT>>1) -TIMEDELTA) && (diff < (TIMEOUT>>1) + TIMEDELTA), - "Unexpected time %d, expected around %d\n", diff, TIMEOUT>>1); - -} - -/* Change the controling line after the given timeout to the given state - By the loopback, this should trigger the WaitCommEvent -*/ -static DWORD CALLBACK toggle_ctlLine(LPVOID arg) -{ - DWORD *args = (DWORD *) arg; - DWORD timeout = args[0]; - DWORD ctl = args[1]; - HANDLE hcom = (HANDLE) args[2]; - HANDLE hComPortEvent = (HANDLE) args[3]; - DWORD success, err; - - trace("toggle_ctlLine timeout %d clt 0x%08x handle 0x%08x\n", - args[0], args[1], args[2]); - Sleep(timeout); - ok(EscapeCommFunction(hcom, ctl),"EscapeCommFunction 0x%08x failed\n", ctl); - trace("toggle_ctline done\n"); - success = WaitForSingleObjectEx(hComPortEvent, TIMEOUT, TRUE); - err = GetLastError(); - trace("toggle_ctline WaitForSingleObjectEx res 0x%08x err %d\n", - success, err); - return 0; -} - -/* - * Wait for a change in CTS - * Needs Loopback from DTR to CTS - */ -static void test_WaitCts(HANDLE hcom) -{ - DCB dcb; - OVERLAPPED overlapped; - HANDLE hComPortEvent; - HANDLE alarmThread; - DWORD args[4], defaultStat = 0; - DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - dcb.fRtsControl=RTS_CONTROL_ENABLE; - dcb.fDtrControl=DTR_CONTROL_ENABLE; - ok(SetCommState(hcom, &dcb), "SetCommState failed\n"); - if (dcb.fDtrControl == RTS_CONTROL_DISABLE) - { - trace("RTS_CONTROL_HANDSHAKE is set, so don't manipulate DTR\n"); - return; - } - args[0]= TIMEOUT >>1; - ok(GetCommModemStatus(hcom, &defaultStat), "GetCommModemStatus failed\n"); - if(defaultStat & MS_CTS_ON) - args[1] = CLRRTS; - else - args[1] = SETRTS; - args[2]=(DWORD) hcom; - - trace("test_WaitCts timeout %d clt 0x%08x handle 0x%08x\n",args[0], args[1], args[2]); - - ok(SetCommMask(hcom, EV_CTS), "SetCommMask failed\n"); - hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); - ok(hComPortEvent != 0, "CreateEvent failed\n"); - args[3] = (DWORD) hComPortEvent; - alarmThread = CreateThread(NULL, 0, toggle_ctlLine, (void *) &args, 0, &alarmThreadId); - /* Wait a minimum to let the thread start up */ - Sleep(10); - trace("Thread created\n"); - ok(alarmThread !=0 , "CreateThread Failed\n"); - - ZeroMemory( &overlapped, sizeof(overlapped)); - overlapped.hEvent = hComPortEvent; - before = GetTickCount(); - success = WaitCommEvent(hcom, &evtmask, &overlapped); - err = GetLastError(); - after = GetTickCount(); - - trace("Success 0x%08x err %d evtmask 0x%08x\n", success, err, evtmask); - ok(success || err == ERROR_IO_PENDING, "overlapped WaitCommEvent failed\n"); - trace("overlapped WriteCommEvent returned.\n"); - if (!success && (err == ERROR_IO_PENDING)) - ok(WaitForSingleObjectEx(hComPortEvent, TIMEOUT, TRUE) == 0, - "WaitCts hComPortEvent failed\n"); - success = GetOverlappedResult(hcom, &overlapped, &written, FALSE); - err = GetLastError(); - after1 = GetTickCount(); - trace("Success 0x%08x err %d evtmask 0x%08x diff1 %d, diff2 %d\n", - success, err, evtmask, after-before, after1-before); - - ok(evtmask & EV_CTS, "Failed to detect EV_CTS: 0x%08x, expected 0x%08x\n", - evtmask, EV_CTS); - ok(GetCommModemStatus(hcom, &evtmask), "GetCommModemStatus failed\n"); - if(defaultStat & MS_CTS_ON) - ok((evtmask & MS_CTS_ON) == 0,"CTS didn't change state!\n"); - else - ok((evtmask & MS_CTS_ON), "CTS didn't change state!\n"); - - diff = after1 - before; - ok ((diff > (TIMEOUT>>1) -TIMEDELTA) && (diff < (TIMEOUT>>1) + TIMEDELTA), - "Unexpected time %d, expected around %d\n", diff, TIMEOUT>>1); - - /*restore RTS Settings*/ - if(defaultStat & MS_CTS_ON) - args[1] = SETRTS; - else - args[1] = CLRRTS; -} - -/* Change the Comm Mask while a Wait is going on - WaitCommevent should return with a EVTMASK set to zero -*/ -static DWORD CALLBACK reset_CommMask(LPVOID arg) -{ - DWORD *args = (DWORD *) arg; - DWORD timeout = args[0]; - HANDLE hcom = (HANDLE) args[1]; - - trace(" Changing CommMask on the fly for handle %p after timeout %d\n", - hcom, timeout); - Sleep(timeout); - ok(SetCommMask(hcom, 0),"SetCommMask %p failed\n", hcom); - trace("SetCommMask changed\n"); - return 0; -} - -/* Set up a Wait for a change on CTS. We don't toggle any line, but we - reset the CommMask and expect the wait to return with a mask of 0 - No special port connections needed -*/ -static void test_AbortWaitCts(HANDLE hcom) -{ - DCB dcb; - OVERLAPPED overlapped; - HANDLE hComPortEvent; - HANDLE alarmThread; - DWORD args[2]; - DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - if (dcb.fDtrControl == RTS_CONTROL_DISABLE) - { - trace("RTS_CONTROL_HANDSHAKE is set, so don't manipulate DTR\n"); - return; - } - args[0]= TIMEOUT >>1; - args[1]=(DWORD) hcom; - - trace("test_AbortWaitCts timeout %d handle 0x%08x\n",args[0], args[1]); - - ok(SetCommMask(hcom, EV_CTS), "SetCommMask failed\n"); - hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); - ok(hComPortEvent != 0, "CreateEvent failed\n"); - alarmThread = CreateThread(NULL, 0, reset_CommMask, (void *) &args, 0, &alarmThreadId); - /* Wait a minimum to let the thread start up */ - Sleep(10); - trace("Thread created\n"); - ok(alarmThread !=0 , "CreateThread Failed\n"); - - ZeroMemory( &overlapped, sizeof(overlapped)); - overlapped.hEvent = hComPortEvent; - before = GetTickCount(); - success = WaitCommEvent(hcom, &evtmask, &overlapped); - err = GetLastError(); - after = GetTickCount(); - - trace("Success 0x%08x err %d evtmask 0x%08x\n", success, err, evtmask); - ok(success || err == ERROR_IO_PENDING, "overlapped WaitCommEvent failed\n"); - trace("overlapped WriteCommEvent returned.\n"); - if (!success && (err == ERROR_IO_PENDING)) - ok(WaitForSingleObjectEx(hComPortEvent, TIMEOUT, TRUE) == 0, - "AbortWaitCts hComPortEvent failed\n"); - success = GetOverlappedResult(hcom, &overlapped, &written, FALSE); - err = GetLastError(); - after1 = GetTickCount(); - trace("Success 0x%08x err %d evtmask 0x%08x diff1 %d, diff2 %d\n", - success, err, evtmask, after-before, after1-before); - - ok(evtmask == 0, "Incorect EventMask 0x%08x returned on Wait aborted bu SetCommMask, expected 0x%08x\n", - evtmask, 0); - ok(GetCommModemStatus(hcom, &evtmask), "GetCommModemStatus failed\n"); - diff = after1 - before; - ok ((diff > (TIMEOUT>>1) -TIMEDELTA) && (diff < (TIMEOUT>>1) + TIMEDELTA), - "Unexpected time %d, expected around %d\n", diff, TIMEOUT>>1); - -} - -/* - * Wait for a change in DSR - * Needs Loopback from DTR to DSR - */ -static void test_WaitDsr(HANDLE hcom) -{ - DCB dcb; - OVERLAPPED overlapped; - HANDLE hComPortEvent; - HANDLE alarmThread; - DWORD args[3], defaultStat = 0; - DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - if (dcb.fDtrControl == DTR_CONTROL_DISABLE) - { - trace("DTR_CONTROL_HANDSHAKE is set, so don't manipulate DTR\n"); - return; - } - args[0]= TIMEOUT >>1; - ok(GetCommModemStatus(hcom, &defaultStat), "GetCommModemStatus failed\n"); - if(defaultStat & MS_DSR_ON) - args[1] = CLRDTR; - else - args[1] = SETDTR; - args[2]=(DWORD) hcom; - - trace("test_WaitDsr timeout %d clt 0x%08x handle 0x%08x\n",args[0], args[1], args[2]); - - ok(SetCommMask(hcom, EV_DSR), "SetCommMask failed\n"); - hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); - ok(hComPortEvent != 0, "CreateEvent failed\n"); - alarmThread = CreateThread(NULL, 0, toggle_ctlLine, (void *) &args, 0, &alarmThreadId); - ok(alarmThread !=0 , "CreateThread Failed\n"); - - ZeroMemory( &overlapped, sizeof(overlapped)); - overlapped.hEvent = hComPortEvent; - before = GetTickCount(); - success = WaitCommEvent(hcom, &evtmask, &overlapped); - err = GetLastError(); - after = GetTickCount(); - - trace("Success 0x%08x err %d evtmask 0x%08x\n", success, err, evtmask); - ok(success || err == ERROR_IO_PENDING, "overlapped WaitCommEvent failed\n"); - trace("overlapped WriteCommEvent returned.\n"); - if (!success && (err == ERROR_IO_PENDING)) - ok(WaitForSingleObjectEx(hComPortEvent, TIMEOUT, TRUE) == 0, - "wait hComPortEvent failed\n"); - success = GetOverlappedResult(hcom, &overlapped, &written, FALSE); - err = GetLastError(); - after1 = GetTickCount(); - trace("Success 0x%08x err %d evtmask 0x%08x diff1 %d, diff2 %d\n", - success, err, evtmask, after-before, after1-before); - - ok(evtmask & EV_DSR, "Failed to detect EV_DSR: 0x%08x, expected 0x%08x\n", - evtmask, EV_DSR); - ok(GetCommModemStatus(hcom, &evtmask), "GetCommModemStatus failed\n"); - if(defaultStat & MS_DSR_ON) - ok((evtmask & MS_DSR_ON) == 0,"DTR didn't change state!\n"); - else - ok((evtmask & MS_DSR_ON), "DTR didn't change state!\n"); - - diff = after1 - before; - ok ((diff > (TIMEOUT>>1) -TIMEDELTA) && (diff < (TIMEOUT>>1) + TIMEDELTA), - "Unexpected time %d, expected around %d\n", diff, TIMEOUT>>1); - - /*restore RTS Settings*/ - if(defaultStat & MS_DSR_ON) - args[1] = SETDTR; - else - args[1] = CLRDTR; -} - -/* - * Wait for a Ring - * Needs Loopback from DTR to RING - */ -static void test_WaitRing(HANDLE hcom) -{ - DCB dcb; - OVERLAPPED overlapped; - HANDLE hComPortEvent; - HANDLE alarmThread; - DWORD args[3], defaultStat; - DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0; - BOOL ret; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - if (dcb.fDtrControl == DTR_CONTROL_DISABLE) - { - trace("DTR_CONTROL_HANDSHAKE is set, so don't manipulate DTR\n"); - return; - } - args[0]= TIMEOUT >>1; - ok((ret = GetCommModemStatus(hcom, &defaultStat)), "GetCommModemStatus failed\n"); - if (!ret) { - skip("modem status failed -> skip.\n"); - return; - } - if(defaultStat & MS_RING_ON) - args[1] = CLRDTR; - else - args[1] = SETDTR; - args[2]=(DWORD) hcom; - - trace("test_WaitRing timeout %d clt 0x%08x handle 0x%08x\n",args[0], args[1], args[2]); - - ok(SetCommMask(hcom, EV_RING), "SetCommMask failed\n"); - hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); - ok(hComPortEvent != 0, "CreateEvent failed\n"); - alarmThread = CreateThread(NULL, 0, toggle_ctlLine, (void *) &args, 0, &alarmThreadId); - ok(alarmThread !=0 , "CreateThread Failed\n"); - - ZeroMemory( &overlapped, sizeof(overlapped)); - overlapped.hEvent = hComPortEvent; - before = GetTickCount(); - success = WaitCommEvent(hcom, &evtmask, &overlapped); - err = GetLastError(); - after = GetTickCount(); - - trace("Success 0x%08x err %d evtmask 0x%08x\n", success, err, evtmask); - ok(success || err == ERROR_IO_PENDING, "overlapped WaitCommEvent failed\n"); - trace("overlapped WriteCommEvent returned.\n"); - if (!success && (err == ERROR_IO_PENDING)) - ok(WaitForSingleObjectEx(hComPortEvent, TIMEOUT, TRUE) == 0, - "wait hComPortEvent failed\n"); - success = GetOverlappedResult(hcom, &overlapped, &written, FALSE); - err = GetLastError(); - after1 = GetTickCount(); - trace("Success 0x%08x err %d evtmask 0x%08x diff1 %d, diff2 %d\n", - success, err, evtmask, after-before, after1-before); - - ok(evtmask & EV_RING, "Failed to detect EV_RING: 0x%08x, expected 0x%08x\n", - evtmask, EV_CTS); - ok(GetCommModemStatus(hcom, &evtmask), "GetCommModemStatus failed\n"); - if(defaultStat & MS_RING_ON) - ok((evtmask & MS_RING_ON) == 0,"DTR didn't change state!\n"); - else - ok((evtmask & MS_RING_ON), "DTR didn't change state!\n"); - - diff = after1 - before; - ok ((diff > (TIMEOUT>>1) -TIMEDELTA) && (diff < (TIMEOUT>>1) + TIMEDELTA), - "Unexpected time %d, expected around %d\n", diff, TIMEOUT>>1); - - /*restore RTS Settings*/ - if(defaultStat & MS_RING_ON) - args[1] = SETDTR; - else - args[1] = CLRDTR; -} -/* - * Wait for a change in DCD - * Needs Loopback from DTR to DCD - */ -static void test_WaitDcd(HANDLE hcom) -{ - DCB dcb; - OVERLAPPED overlapped; - HANDLE hComPortEvent; - HANDLE alarmThread; - DWORD args[3], defaultStat = 0; - DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0; - - ok(GetCommState(hcom, &dcb), "GetCommState failed\n"); - if (dcb.fDtrControl == DTR_CONTROL_DISABLE) - { - trace("DTR_CONTROL_HANDSHAKE is set, so don't manipulate DTR\n"); - return; - } - args[0]= TIMEOUT >>1; - ok(GetCommModemStatus(hcom, &defaultStat), "GetCommModemStatus failed\n"); - if(defaultStat & MS_RLSD_ON) - args[1] = CLRDTR; - else - args[1] = SETDTR; - args[2]=(DWORD) hcom; - - trace("test_WaitDcd timeout %d clt 0x%08x handle 0x%08x\n",args[0], args[1], args[2]); - - ok(SetCommMask(hcom, EV_RLSD), "SetCommMask failed\n"); - hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); - ok(hComPortEvent != 0, "CreateEvent failed\n"); - alarmThread = CreateThread(NULL, 0, toggle_ctlLine, (void *) &args, 0, &alarmThreadId); - ok(alarmThread !=0 , "CreateThread Failed\n"); - - ZeroMemory( &overlapped, sizeof(overlapped)); - overlapped.hEvent = hComPortEvent; - before = GetTickCount(); - success = WaitCommEvent(hcom, &evtmask, &overlapped); - err = GetLastError(); - after = GetTickCount(); - - trace("Success 0x%08x err %d evtmask 0x%08x\n", success, err, evtmask); - ok(success || err == ERROR_IO_PENDING, "overlapped WaitCommEvent failed\n"); - trace("overlapped WriteCommEvent returned.\n"); - if (!success && (err == ERROR_IO_PENDING)) - ok(WaitForSingleObjectEx(hComPortEvent, TIMEOUT, TRUE) == 0, - "wait hComPortEvent failed\n"); - success = GetOverlappedResult(hcom, &overlapped, &written, FALSE); - err = GetLastError(); - after1 = GetTickCount(); - trace("Success 0x%08x err %d evtmask 0x%08x diff1 %d, diff2 %d\n", - success, err, evtmask, after-before, after1-before); - - ok(evtmask & EV_RLSD, "Failed to detect EV_RLSD: 0x%08x, expected 0x%08x\n", - evtmask, EV_CTS); - ok(GetCommModemStatus(hcom, &evtmask), "GetCommModemStatus failed\n"); - if(defaultStat & MS_RLSD_ON) - ok((evtmask & MS_RLSD_ON) == 0,"DTR didn't change state!\n"); - else - ok((evtmask & MS_RLSD_ON), "DTR didn't change state!\n"); - - diff = after1 - before; - ok ((diff > (TIMEOUT>>1) -TIMEDELTA) && (diff < (TIMEOUT>>1) + TIMEDELTA), - "Unexpected time %d, expected around %d\n", diff, TIMEOUT>>1); - - /*restore RTS Settings*/ - if(defaultStat & MS_RLSD_ON) - args[1] = SETDTR; - else - args[1] = CLRDTR; -} - -/* - Set Break after timeout -*/ -static DWORD CALLBACK set_CommBreak(LPVOID arg) -{ - DWORD *args = (DWORD *) arg; - DWORD timeout = args[0]; - HANDLE hcom = (HANDLE) args[1]; - - trace("SetCommBreak for handle %p after timeout %d\n", - hcom, timeout); - Sleep(timeout); - ok(SetCommBreak(hcom),"SetCommBreak %p failed\n", hcom); - trace("SetCommBreak done\n"); - return 0; -} - -/* - Wait for the Break condition (TX resp. RX active) - Needs Loopback TX-RX -*/ -static void test_WaitBreak(HANDLE hcom) -{ - OVERLAPPED overlapped; - HANDLE hComPortEvent; - HANDLE alarmThread; - DWORD args[2]; - DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0; - - ok(SetCommMask(hcom, EV_BREAK), "SetCommMask failed\n"); - hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); - ok(hComPortEvent != 0, "CreateEvent failed\n"); - - trace("test_WaitBreak\n"); - args[0]= TIMEOUT >>1; - args[1]=(DWORD) hcom; - alarmThread = CreateThread(NULL, 0, set_CommBreak, (void *) &args, 0, &alarmThreadId); - /* Wait a minimum to let the thread start up */ - Sleep(10); - trace("Thread created\n"); - ok(alarmThread !=0 , "CreateThread Failed\n"); - - ZeroMemory( &overlapped, sizeof(overlapped)); - overlapped.hEvent = hComPortEvent; - before = GetTickCount(); - success = WaitCommEvent(hcom, &evtmask, &overlapped); - err = GetLastError(); - after = GetTickCount(); - - trace("Success 0x%08x err %d evtmask 0x%08x\n", success, err, evtmask); - ok(success || err == ERROR_IO_PENDING, "overlapped WaitCommEvent failed\n"); - trace("overlapped WriteCommEvent returned.\n"); - - if (!success && (err == ERROR_IO_PENDING)) - ok(WaitForSingleObjectEx(hComPortEvent, TIMEOUT, TRUE) == 0, - "wait hComPortEvent res %d\n", GetLastError()); - success = GetOverlappedResult(hcom, &overlapped, &written, FALSE); - err = GetLastError(); - after1 = GetTickCount(); - trace("Success 0x%08x err %d evtmask 0x%08x diff1 %d, diff2 %d\n", - success, err, evtmask, after-before, after1-before); - - ok(evtmask & EV_BREAK, "Failed to detect EV_BREAK: 0x%08x, expected 0x%08x\n", - evtmask, EV_BREAK); - ok(GetCommModemStatus(hcom, &evtmask), "GetCommModemStatus failed\n"); - - diff = after1 - before; - ok ((diff > (TIMEOUT>>1) -TIMEDELTA) && (diff < (TIMEOUT>>1) + TIMEDELTA), - "Unexpected time %d, expected around %d\n", diff, TIMEOUT>>1); - - ok(ClearCommBreak(hcom), "ClearCommBreak failed\n"); -} - -START_TEST(comm) -{ - HANDLE hcom; - /* use variables and not #define to compile the code */ - BOOL loopback_txd_rxd = LOOPBACK_TXD_RXD; - BOOL loopback_rts_cts = LOOPBACK_CTS_RTS; - BOOL loopback_dtr_dsr = LOOPBACK_DTR_DSR; - BOOL loopback_dtr_ring = LOOPBACK_DTR_RING; - BOOL loopback_dtr_dcd = LOOPBACK_DTR_DCD; - - test_BuildCommDCB(); - hcom = test_OpenComm(FALSE); - if (hcom != INVALID_HANDLE_VALUE) - { - test_GetModemStatus(hcom); - test_ReadTimeOut(hcom); - test_waittxempty(hcom); - CloseHandle(hcom); - } - hcom = test_OpenComm(FALSE); - if (hcom != INVALID_HANDLE_VALUE) - { - Sleep(200); /* Give the laster character of test_waittxempty to drop into the receiver */ - test_ClearCommErrors(hcom); - CloseHandle(hcom); - } - hcom = test_OpenComm(FALSE); - if (hcom != INVALID_HANDLE_VALUE) - { - test_non_pending_errors(hcom); - CloseHandle(hcom); - } - if((loopback_txd_rxd) && ((hcom = test_OpenComm(FALSE))!=INVALID_HANDLE_VALUE)) - { - test_LoopbackRead(hcom); - CloseHandle(hcom); - } - if((loopback_rts_cts) && ((hcom = test_OpenComm(FALSE))!=INVALID_HANDLE_VALUE)) - { - test_LoopbackCtsRts(hcom); - CloseHandle(hcom); - } - if((loopback_dtr_dsr) && ((hcom = test_OpenComm(FALSE))!=INVALID_HANDLE_VALUE)) - { - test_LoopbackDtrDsr(hcom); - CloseHandle(hcom); - } - if((loopback_dtr_ring) && ((hcom = test_OpenComm(FALSE))!=INVALID_HANDLE_VALUE)) - { - test_LoopbackDtrRing(hcom); - CloseHandle(hcom); - } - if((loopback_dtr_dcd) && ((hcom = test_OpenComm(FALSE))!=INVALID_HANDLE_VALUE)) - { - test_LoopbackDtrDcd(hcom); - CloseHandle(hcom); - } - if((loopback_txd_rxd) && ((hcom = test_OpenComm(TRUE))!=INVALID_HANDLE_VALUE)) - { - test_WaitRx(hcom); - CloseHandle(hcom); - } - if((loopback_rts_cts) && ((hcom = test_OpenComm(TRUE))!=INVALID_HANDLE_VALUE)) - { - test_WaitCts(hcom); - CloseHandle(hcom); - } - if((hcom = test_OpenComm(TRUE))!=INVALID_HANDLE_VALUE) - { - test_AbortWaitCts(hcom); - CloseHandle(hcom); - } - if((loopback_dtr_dsr) && ((hcom = test_OpenComm(TRUE))!=INVALID_HANDLE_VALUE)) - { - test_WaitDsr(hcom); - CloseHandle(hcom); - } - if((loopback_dtr_ring) && ((hcom = test_OpenComm(TRUE))!=INVALID_HANDLE_VALUE)) - { - test_WaitRing(hcom); - CloseHandle(hcom); - } - if((loopback_dtr_dcd) && ((hcom = test_OpenComm(TRUE))!=INVALID_HANDLE_VALUE)) - { - test_WaitDcd(hcom); - CloseHandle(hcom); - } - if(loopback_txd_rxd && (hcom = test_OpenComm(TRUE))!=INVALID_HANDLE_VALUE) - { - test_WaitBreak(hcom); - CloseHandle(hcom); - } -} diff --git a/rostests/winetests/kernel32/console.c b/rostests/winetests/kernel32/console.c deleted file mode 100755 index aacae9cb23c..00000000000 --- a/rostests/winetests/kernel32/console.c +++ /dev/null @@ -1,884 +0,0 @@ -/* - * Unit tests for console API - * - * Copyright (c) 2003,2004 Eric Pouech - * Copyright (c) 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 "wine/test.h" -#include -#include - -static BOOL (WINAPI *pGetConsoleInputExeNameA)(DWORD, LPSTR); -static BOOL (WINAPI *pSetConsoleInputExeNameA)(LPCSTR); - -/* DEFAULT_ATTRIB is used for all initial filling of the console. - * all modifications are made with TEST_ATTRIB so that we could check - * what has to be modified or not - */ -#define TEST_ATTRIB (BACKGROUND_BLUE | FOREGROUND_GREEN) -#define DEFAULT_ATTRIB (FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED) -/* when filling the screen with non-blank chars, this macro defines - * what character should be at position 'c' - */ -#define CONTENT(c) ('A' + (((c).Y * 17 + (c).X) % 23)) - -#define okCURSOR(hCon, c) do { \ - CONSOLE_SCREEN_BUFFER_INFO __sbi; \ - BOOL expect = GetConsoleScreenBufferInfo((hCon), &__sbi) && \ - __sbi.dwCursorPosition.X == (c).X && __sbi.dwCursorPosition.Y == (c).Y; \ - ok(expect, "Expected cursor at (%d,%d), got (%d,%d)\n", \ - (c).X, (c).Y, __sbi.dwCursorPosition.X, __sbi.dwCursorPosition.Y); \ -} while (0) - -#define okCHAR(hCon, c, ch, attr) do { \ - char __ch; WORD __attr; DWORD __len; BOOL expect; \ - expect = ReadConsoleOutputCharacter((hCon), &__ch, 1, (c), &__len) == 1 && __len == 1 && __ch == (ch); \ - ok(expect, "At (%d,%d): expecting char '%c'/%02x got '%c'/%02x\n", (c).X, (c).Y, (ch), (ch), __ch, __ch); \ - expect = ReadConsoleOutputAttribute((hCon), &__attr, 1, (c), &__len) == 1 && __len == 1 && __attr == (attr); \ - ok(expect, "At (%d,%d): expecting attr %04x got %04x\n", (c).X, (c).Y, (attr), __attr); \ -} while (0) - -static void init_function_pointers(void) -{ - HMODULE hKernel32; - -#define KERNEL32_GET_PROC(func) \ - p##func = (void *)GetProcAddress(hKernel32, #func); \ - if(!p##func) trace("GetProcAddress(hKernel32, '%s') failed\n", #func); - - hKernel32 = GetModuleHandleA("kernel32.dll"); - KERNEL32_GET_PROC(GetConsoleInputExeNameA); - KERNEL32_GET_PROC(SetConsoleInputExeNameA); - -#undef KERNEL32_GET_PROC -} - -/* FIXME: this could be optimized on a speed point of view */ -static void resetContent(HANDLE hCon, COORD sbSize, BOOL content) -{ - COORD c; - WORD attr = DEFAULT_ATTRIB; - char ch; - DWORD len; - - for (c.X = 0; c.X < sbSize.X; c.X++) - { - for (c.Y = 0; c.Y < sbSize.Y; c.Y++) - { - ch = (content) ? CONTENT(c) : ' '; - WriteConsoleOutputAttribute(hCon, &attr, 1, c, &len); - WriteConsoleOutputCharacterA(hCon, &ch, 1, c, &len); - } - } -} - -static void testCursor(HANDLE hCon, COORD sbSize) -{ - COORD c; - - c.X = c.Y = 0; - ok(SetConsoleCursorPosition(0, c) == 0, "No handle\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, "GetLastError: expecting %u got %u\n", - ERROR_INVALID_HANDLE, GetLastError()); - - c.X = c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left\n"); - okCURSOR(hCon, c); - - c.X = sbSize.X - 1; - c.Y = sbSize.Y - 1; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in lower-right\n"); - okCURSOR(hCon, c); - - c.X = sbSize.X; - c.Y = sbSize.Y - 1; - ok(SetConsoleCursorPosition(hCon, c) == 0, "Cursor is outside\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError: expecting %u got %u\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - c.X = sbSize.X - 1; - c.Y = sbSize.Y; - ok(SetConsoleCursorPosition(hCon, c) == 0, "Cursor is outside\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError: expecting %u got %u\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - c.X = -1; - c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) == 0, "Cursor is outside\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError: expecting %u got %u\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - c.X = 0; - c.Y = -1; - ok(SetConsoleCursorPosition(hCon, c) == 0, "Cursor is outside\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError: expecting %u got %u\n", - ERROR_INVALID_PARAMETER, GetLastError()); -} - -static void testWriteSimple(HANDLE hCon, COORD sbSize) -{ - COORD c; - DWORD len; - const char* mytest = "abcdefg"; - const int mylen = strlen(mytest); - - /* single line write */ - c.X = c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left\n"); - - ok(WriteConsole(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n"); - c.Y = 0; - for (c.X = 0; c.X < mylen; c.X++) - { - okCHAR(hCon, c, mytest[c.X], TEST_ATTRIB); - } - - okCURSOR(hCon, c); - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); -} - -static void testWriteNotWrappedNotProcessed(HANDLE hCon, COORD sbSize) -{ - COORD c; - DWORD len, mode; - const char* mytest = "123"; - const int mylen = strlen(mytest); - int ret; - int p; - - ok(GetConsoleMode(hCon, &mode) && SetConsoleMode(hCon, mode & ~(ENABLE_PROCESSED_OUTPUT|ENABLE_WRAP_AT_EOL_OUTPUT)), - "clearing wrap at EOL & processed output\n"); - - /* write line, wrapping disabled, buffer exceeds sb width */ - c.X = sbSize.X - 3; c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-3\n"); - - ret = WriteConsole(hCon, mytest, mylen, &len, NULL); - ok(ret != 0 && len == mylen, "Couldn't write, ret = %d, len = %d\n", ret, len); - c.Y = 0; - for (p = mylen - 3; p < mylen; p++) - { - c.X = sbSize.X - 3 + p % 3; - okCHAR(hCon, c, mytest[p], TEST_ATTRIB); - } - - c.X = 0; c.Y = 1; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - - p = sbSize.X - 3 + mylen % 3; - c.X = p; c.Y = 0; - - /* write line, wrapping disabled, strings end on end of line */ - c.X = sbSize.X - mylen; c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-3\n"); - - ok(WriteConsole(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n"); -} - -static void testWriteNotWrappedProcessed(HANDLE hCon, COORD sbSize) -{ - COORD c; - DWORD len, mode; - const char* mytest = "abcd\nf\tg"; - const int mylen = strlen(mytest); - const int mylen2 = strchr(mytest, '\n') - mytest; - int p; - - ok(GetConsoleMode(hCon, &mode) && SetConsoleMode(hCon, (mode | ENABLE_PROCESSED_OUTPUT) & ~ENABLE_WRAP_AT_EOL_OUTPUT), - "clearing wrap at EOL & setting processed output\n"); - - /* write line, wrapping disabled, buffer exceeds sb width */ - c.X = sbSize.X - 5; c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-5\n"); - - ok(WriteConsole(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n"); - c.Y = 0; - for (c.X = sbSize.X - 5; c.X < sbSize.X - 1; c.X++) - { - okCHAR(hCon, c, mytest[c.X - sbSize.X + 5], TEST_ATTRIB); - } - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - - c.X = 0; c.Y++; - okCHAR(hCon, c, mytest[5], TEST_ATTRIB); - for (c.X = 1; c.X < 8; c.X++) - okCHAR(hCon, c, ' ', TEST_ATTRIB); - okCHAR(hCon, c, mytest[7], TEST_ATTRIB); - c.X++; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - - okCURSOR(hCon, c); - - /* write line, wrapping disabled, strings end on end of line */ - c.X = sbSize.X - 4; c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-4\n"); - - ok(WriteConsole(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n"); - c.Y = 0; - for (c.X = sbSize.X - 4; c.X < sbSize.X; c.X++) - { - okCHAR(hCon, c, mytest[c.X - sbSize.X + 4], TEST_ATTRIB); - } - c.X = 0; c.Y++; - okCHAR(hCon, c, mytest[5], TEST_ATTRIB); - for (c.X = 1; c.X < 8; c.X++) - okCHAR(hCon, c, ' ', TEST_ATTRIB); - okCHAR(hCon, c, mytest[7], TEST_ATTRIB); - c.X++; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - - okCURSOR(hCon, c); - - /* write line, wrapping disabled, strings end after end of line */ - c.X = sbSize.X - 3; c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-4\n"); - - ok(WriteConsole(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n"); - c.Y = 0; - for (p = mylen2 - 3; p < mylen2; p++) - { - c.X = sbSize.X - 3 + p % 3; - okCHAR(hCon, c, mytest[p], TEST_ATTRIB); - } - c.X = 0; c.Y = 1; - okCHAR(hCon, c, mytest[5], TEST_ATTRIB); - for (c.X = 1; c.X < 8; c.X++) - okCHAR(hCon, c, ' ', TEST_ATTRIB); - okCHAR(hCon, c, mytest[7], TEST_ATTRIB); - c.X++; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - - okCURSOR(hCon, c); -} - -static void testWriteWrappedNotProcessed(HANDLE hCon, COORD sbSize) -{ - COORD c; - DWORD len, mode; - const char* mytest = "abcd\nf\tg"; - const int mylen = strlen(mytest); - int p; - - ok(GetConsoleMode(hCon, &mode) && SetConsoleMode(hCon,(mode | ENABLE_WRAP_AT_EOL_OUTPUT) & ~(ENABLE_PROCESSED_OUTPUT)), - "setting wrap at EOL & clearing processed output\n"); - - /* write line, wrapping enabled, buffer doesn't exceed sb width */ - c.X = sbSize.X - 9; c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-9\n"); - - ok(WriteConsole(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n"); - c.Y = 0; - for (p = 0; p < mylen; p++) - { - c.X = sbSize.X - 9 + p; - okCHAR(hCon, c, mytest[p], TEST_ATTRIB); - } - c.X = sbSize.X - 9 + mylen; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - c.X = 0; c.Y = 1; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - - /* write line, wrapping enabled, buffer does exceed sb width */ - c.X = sbSize.X - 3; c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-3\n"); - - c.Y = 1; - c.X = mylen - 3; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); -} - -static void testWriteWrappedProcessed(HANDLE hCon, COORD sbSize) -{ - COORD c; - DWORD len, mode; - const char* mytest = "abcd\nf\tg"; - const int mylen = strlen(mytest); - int p; - - ok(GetConsoleMode(hCon, &mode) && SetConsoleMode(hCon, mode | (ENABLE_WRAP_AT_EOL_OUTPUT|ENABLE_PROCESSED_OUTPUT)), - "setting wrap at EOL & processed output\n"); - - /* write line, wrapping enabled, buffer doesn't exceed sb width */ - c.X = sbSize.X - 9; c.Y = 0; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-9\n"); - - ok(WriteConsole(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n"); - for (p = 0; p < 4; p++) - { - c.X = sbSize.X - 9 + p; - okCHAR(hCon, c, mytest[p], TEST_ATTRIB); - } - c.X = sbSize.X - 9 + p; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - c.X = 0; c.Y++; - okCHAR(hCon, c, mytest[5], TEST_ATTRIB); - for (c.X = 1; c.X < 8; c.X++) - okCHAR(hCon, c, ' ', TEST_ATTRIB); - okCHAR(hCon, c, mytest[7], TEST_ATTRIB); - c.X++; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - okCURSOR(hCon, c); - - /* write line, wrapping enabled, buffer does exceed sb width */ - c.X = sbSize.X - 3; c.Y = 2; - ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left-3\n"); - - ok(WriteConsole(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n"); - for (p = 0; p < 3; p++) - { - c.X = sbSize.X - 3 + p; - okCHAR(hCon, c, mytest[p], TEST_ATTRIB); - } - c.X = 0; c.Y++; - okCHAR(hCon, c, mytest[3], TEST_ATTRIB); - c.X++; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - - c.X = 0; c.Y++; - okCHAR(hCon, c, mytest[5], TEST_ATTRIB); - for (c.X = 1; c.X < 8; c.X++) - okCHAR(hCon, c, ' ', TEST_ATTRIB); - okCHAR(hCon, c, mytest[7], TEST_ATTRIB); - c.X++; - okCHAR(hCon, c, ' ', DEFAULT_ATTRIB); - okCURSOR(hCon, c); -} - -static void testWrite(HANDLE hCon, COORD sbSize) -{ - /* FIXME: should in fact insure that the sb is at least 10 character wide */ - ok(SetConsoleTextAttribute(hCon, TEST_ATTRIB), "Setting default text color\n"); - resetContent(hCon, sbSize, FALSE); - testWriteSimple(hCon, sbSize); - resetContent(hCon, sbSize, FALSE); - testWriteNotWrappedNotProcessed(hCon, sbSize); - resetContent(hCon, sbSize, FALSE); - testWriteNotWrappedProcessed(hCon, sbSize); - resetContent(hCon, sbSize, FALSE); - testWriteWrappedNotProcessed(hCon, sbSize); - resetContent(hCon, sbSize, FALSE); - testWriteWrappedProcessed(hCon, sbSize); -} - -static void testScroll(HANDLE hCon, COORD sbSize) -{ - SMALL_RECT scroll, clip; - COORD dst, c, tc; - CHAR_INFO ci; - BOOL ret; - -#define W 11 -#define H 7 - -#define IN_SRECT(r,c) ((r).Left <= (c).X && (c).X <= (r).Right && (r).Top <= (c).Y && (c).Y <= (r).Bottom) -#define IN_SRECT2(r,d,c) ((d).X <= (c).X && (c).X <= (d).X + (r).Right - (r).Left && (d).Y <= (c).Y && (c).Y <= (d).Y + (r).Bottom - (r).Top) - - /* no clipping, src & dst rect don't overlap */ - resetContent(hCon, sbSize, TRUE); - - scroll.Left = 0; - scroll.Right = W - 1; - scroll.Top = 0; - scroll.Bottom = H - 1; - dst.X = W + 3; - dst.Y = H + 3; - ci.Char.UnicodeChar = '#'; - ci.Attributes = TEST_ATTRIB; - - clip.Left = 0; - clip.Right = sbSize.X - 1; - clip.Top = 0; - clip.Bottom = sbSize.Y - 1; - - ok(ScrollConsoleScreenBuffer(hCon, &scroll, NULL, dst, &ci), "Scrolling SB\n"); - - for (c.Y = 0; c.Y < sbSize.Y; c.Y++) - { - for (c.X = 0; c.X < sbSize.X; c.X++) - { - if (IN_SRECT2(scroll, dst, c) && IN_SRECT(clip, c)) - { - tc.X = c.X - dst.X; - tc.Y = c.Y - dst.Y; - okCHAR(hCon, c, CONTENT(tc), DEFAULT_ATTRIB); - } - else if (IN_SRECT(scroll, c) && IN_SRECT(clip, c)) - okCHAR(hCon, c, '#', TEST_ATTRIB); - else okCHAR(hCon, c, CONTENT(c), DEFAULT_ATTRIB); - } - } - - /* no clipping, src & dst rect do overlap */ - resetContent(hCon, sbSize, TRUE); - - scroll.Left = 0; - scroll.Right = W - 1; - scroll.Top = 0; - scroll.Bottom = H - 1; - dst.X = W /2; - dst.Y = H / 2; - ci.Char.UnicodeChar = '#'; - ci.Attributes = TEST_ATTRIB; - - clip.Left = 0; - clip.Right = sbSize.X - 1; - clip.Top = 0; - clip.Bottom = sbSize.Y - 1; - - ok(ScrollConsoleScreenBuffer(hCon, &scroll, NULL, dst, &ci), "Scrolling SB\n"); - - for (c.Y = 0; c.Y < sbSize.Y; c.Y++) - { - for (c.X = 0; c.X < sbSize.X; c.X++) - { - if (dst.X <= c.X && c.X < dst.X + W && dst.Y <= c.Y && c.Y < dst.Y + H) - { - tc.X = c.X - dst.X; - tc.Y = c.Y - dst.Y; - okCHAR(hCon, c, CONTENT(tc), DEFAULT_ATTRIB); - } - else if (c.X < W && c.Y < H) okCHAR(hCon, c, '#', TEST_ATTRIB); - else okCHAR(hCon, c, CONTENT(c), DEFAULT_ATTRIB); - } - } - - /* clipping, src & dst rect don't overlap */ - resetContent(hCon, sbSize, TRUE); - - scroll.Left = 0; - scroll.Right = W - 1; - scroll.Top = 0; - scroll.Bottom = H - 1; - dst.X = W + 3; - dst.Y = H + 3; - ci.Char.UnicodeChar = '#'; - ci.Attributes = TEST_ATTRIB; - - clip.Left = W / 2; - clip.Right = min(W + W / 2, sbSize.X - 1); - clip.Top = H / 2; - clip.Bottom = min(H + H / 2, sbSize.Y - 1); - - SetLastError(0xdeadbeef); - ret = ScrollConsoleScreenBuffer(hCon, &scroll, &clip, dst, &ci); - if (ret) - { - for (c.Y = 0; c.Y < sbSize.Y; c.Y++) - { - for (c.X = 0; c.X < sbSize.X; c.X++) - { - if (IN_SRECT2(scroll, dst, c) && IN_SRECT(clip, c)) - { - tc.X = c.X - dst.X; - tc.Y = c.Y - dst.Y; - okCHAR(hCon, c, CONTENT(tc), DEFAULT_ATTRIB); - } - else if (IN_SRECT(scroll, c) && IN_SRECT(clip, c)) - okCHAR(hCon, c, '#', TEST_ATTRIB); - else okCHAR(hCon, c, CONTENT(c), DEFAULT_ATTRIB); - } - } - } - else - { - /* Win9x will fail, Only accept ERROR_NOT_ENOUGH_MEMORY */ - ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY, - "Expected ERROR_NOT_ENOUGH_MEMORY, got %u\n", GetLastError()); - } - - /* clipping, src & dst rect do overlap */ - resetContent(hCon, sbSize, TRUE); - - scroll.Left = 0; - scroll.Right = W - 1; - scroll.Top = 0; - scroll.Bottom = H - 1; - dst.X = W / 2 - 3; - dst.Y = H / 2 - 3; - ci.Char.UnicodeChar = '#'; - ci.Attributes = TEST_ATTRIB; - - clip.Left = W / 2; - clip.Right = min(W + W / 2, sbSize.X - 1); - clip.Top = H / 2; - clip.Bottom = min(H + H / 2, sbSize.Y - 1); - - ok(ScrollConsoleScreenBuffer(hCon, &scroll, &clip, dst, &ci), "Scrolling SB\n"); - - for (c.Y = 0; c.Y < sbSize.Y; c.Y++) - { - for (c.X = 0; c.X < sbSize.X; c.X++) - { - if (IN_SRECT2(scroll, dst, c) && IN_SRECT(clip, c)) - { - tc.X = c.X - dst.X; - tc.Y = c.Y - dst.Y; - okCHAR(hCon, c, CONTENT(tc), DEFAULT_ATTRIB); - } - else if (IN_SRECT(scroll, c) && IN_SRECT(clip, c)) - okCHAR(hCon, c, '#', TEST_ATTRIB); - else okCHAR(hCon, c, CONTENT(c), DEFAULT_ATTRIB); - } - } -} - -static int mch_count; -/* we need the event as Wine console event generation isn't synchronous - * (ie GenerateConsoleCtrlEvent returns before all ctrl-handlers in all - * processes have been called). - */ -static HANDLE mch_event; -static BOOL WINAPI mch(DWORD event) -{ - mch_count++; - SetEvent(mch_event); - return TRUE; -} - -static void testCtrlHandler(void) -{ - ok(!SetConsoleCtrlHandler(mch, FALSE), "Shouldn't succeed\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Bad error %u\n", GetLastError()); - ok(SetConsoleCtrlHandler(mch, TRUE), "Couldn't set handler\n"); - /* wine requires the event for the test, as we cannot insure, so far, that event - * are processed synchronously in GenerateConsoleCtrlEvent() - */ - mch_event = CreateEventA(NULL, TRUE, FALSE, NULL); - mch_count = 0; - ok(GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0), "Couldn't send ctrl-c event\n"); - /* FIXME: it isn't synchronous on wine but it can still happen before we test */ - if (0) ok(mch_count == 1, "Event isn't synchronous\n"); - ok(WaitForSingleObject(mch_event, 3000) == WAIT_OBJECT_0, "event sending didn't work\n"); - CloseHandle(mch_event); - - /* Turning off ctrl-c handling doesn't work on win9x such way ... */ - ok(SetConsoleCtrlHandler(NULL, TRUE), "Couldn't turn off ctrl-c handling\n"); - mch_event = CreateEventA(NULL, TRUE, FALSE, NULL); - mch_count = 0; - if(!(GetVersion() & 0x80000000)) - /* ... and next line leads to an unhandled exception on 9x. Avoid it on 9x. */ - ok(GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0), "Couldn't send ctrl-c event\n"); - ok(WaitForSingleObject(mch_event, 3000) == WAIT_TIMEOUT && mch_count == 0, "Event shouldn't have been sent\n"); - CloseHandle(mch_event); - ok(SetConsoleCtrlHandler(mch, FALSE), "Couldn't remove handler\n"); - ok(!SetConsoleCtrlHandler(mch, FALSE), "Shouldn't succeed\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Bad error %u\n", GetLastError()); -} - -/* - * Test console screen buffer: - * 1) Try to set invalid handle. - * 2) Try to set non-console handles. - * 3) Use CONOUT$ file as active SB. - * 4) Test cursor. - * 5) Test output codepage to show it is not a property of SB. - * 6) Test switching to old SB if we close all handles to current SB - works - * in Windows, TODO in wine. - * - * What is not tested but should be: - * 1) ScreenBufferInfo - */ -static void testScreenBuffer(HANDLE hConOut) -{ - HANDLE hConOutRW, hConOutRO, hConOutWT; - HANDLE hFileOutRW, hFileOutRO, hFileOutWT; - HANDLE hConOutNew; - char test_str1[] = "Test for SB1"; - char test_str2[] = "Test for SB2"; - char test_cp866[] = {0xe2, 0xa5, 0xe1, 0xe2, 0}; - char test_cp1251[] = {0xf2, 0xe5, 0xf1, 0xf2, 0}; - WCHAR test_unicode[] = {0x0442, 0x0435, 0x0441, 0x0442, 0}; - WCHAR str_wbuf[20]; - char str_buf[20]; - DWORD len; - COORD c; - BOOL ret; - DWORD oldcp; - - if (!IsValidCodePage(866)) - { - skip("Codepage 866 not available\n"); - return; - } - - /* In the beginning set output codepage to 866 */ - oldcp = GetConsoleOutputCP(); - SetLastError(0xdeadbeef); - ret = SetConsoleOutputCP(866); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("SetConsoleOutputCP is not implemented\n"); - return; - } - ok(ret, "Cannot set output codepage to 866\n"); - - hConOutRW = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, - CONSOLE_TEXTMODE_BUFFER, NULL); - ok(hConOutRW != INVALID_HANDLE_VALUE, - "Cannot create a new screen buffer for ReadWrite\n"); - hConOutRO = CreateConsoleScreenBuffer(GENERIC_READ, - FILE_SHARE_READ, NULL, - CONSOLE_TEXTMODE_BUFFER, NULL); - ok(hConOutRO != INVALID_HANDLE_VALUE, - "Cannot create a new screen buffer for ReadOnly\n"); - hConOutWT = CreateConsoleScreenBuffer(GENERIC_WRITE, - FILE_SHARE_WRITE, NULL, - CONSOLE_TEXTMODE_BUFFER, NULL); - ok(hConOutWT != INVALID_HANDLE_VALUE, - "Cannot create a new screen buffer for WriteOnly\n"); - - hFileOutRW = CreateFileA("NUL", GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, 0, NULL); - ok(hFileOutRW != INVALID_HANDLE_VALUE, "Cannot open NUL for ReadWrite\n"); - hFileOutRO = CreateFileA("NUL", GENERIC_READ, FILE_SHARE_READ, - NULL, OPEN_EXISTING, 0, NULL); - ok(hFileOutRO != INVALID_HANDLE_VALUE, "Cannot open NUL for ReadOnly\n"); - hFileOutWT = CreateFileA("NUL", GENERIC_WRITE, FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, 0, NULL); - ok(hFileOutWT != INVALID_HANDLE_VALUE, "Cannot open NUL for WriteOnly\n"); - - /* Trying to set invalid handle */ - SetLastError(0); - ok(!SetConsoleActiveScreenBuffer(INVALID_HANDLE_VALUE), - "Shouldn't succeed\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "GetLastError: expecting %u got %u\n", - ERROR_INVALID_HANDLE, GetLastError()); - - /* Trying to set non-console handles */ - SetLastError(0); - ok(!SetConsoleActiveScreenBuffer(hFileOutRW), "Shouldn't succeed\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "GetLastError: expecting %u got %u\n", - ERROR_INVALID_HANDLE, GetLastError()); - - SetLastError(0); - ok(!SetConsoleActiveScreenBuffer(hFileOutRO), "Shouldn't succeed\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "GetLastError: expecting %u got %u\n", - ERROR_INVALID_HANDLE, GetLastError()); - - SetLastError(0); - ok(!SetConsoleActiveScreenBuffer(hFileOutWT), "Shouldn't succeed\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "GetLastError: expecting %u got %u\n", - ERROR_INVALID_HANDLE, GetLastError()); - - CloseHandle(hFileOutRW); - CloseHandle(hFileOutRO); - CloseHandle(hFileOutWT); - - /* Trying to set SB handles with various access modes */ - SetLastError(0); - ok(!SetConsoleActiveScreenBuffer(hConOutRO), "Shouldn't succeed\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "GetLastError: expecting %u got %u\n", - ERROR_INVALID_HANDLE, GetLastError()); - - ok(SetConsoleActiveScreenBuffer(hConOutWT), "Couldn't set new WriteOnly SB\n"); - - ok(SetConsoleActiveScreenBuffer(hConOutRW), "Couldn't set new ReadWrite SB\n"); - - CloseHandle(hConOutWT); - CloseHandle(hConOutRO); - - /* Now we have two ReadWrite SB, active must be hConOutRW */ - /* Open current SB via CONOUT$ */ - hConOutNew = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, - NULL, OPEN_EXISTING, 0, 0); - ok(hConOutNew != INVALID_HANDLE_VALUE, "CONOUT$ is not opened\n"); - - - /* test cursor */ - c.X = c.Y = 10; - SetConsoleCursorPosition(hConOut, c); - c.X = c.Y = 5; - SetConsoleCursorPosition(hConOutRW, c); - okCURSOR(hConOutNew, c); - c.X = c.Y = 10; - okCURSOR(hConOut, c); - - - c.X = c.Y = 0; - - /* Write using hConOutNew... */ - SetConsoleCursorPosition(hConOutNew, c); - ret = WriteConsoleA(hConOutNew, test_str2, lstrlenA(test_str2), &len, NULL); - ok (ret && len == lstrlenA(test_str2), "WriteConsoleA failed\n"); - /* ... and read it back via hConOutRW */ - ret = ReadConsoleOutputCharacterA(hConOutRW, str_buf, lstrlenA(test_str2), c, &len); - ok(ret && len == lstrlenA(test_str2), "ReadConsoleOutputCharacterA failed\n"); - str_buf[lstrlenA(test_str2)] = 0; - ok(!lstrcmpA(str_buf, test_str2), "got '%s' expected '%s'\n", str_buf, test_str2); - - - /* Now test output codepage handling. Current is 866 as we set earlier. */ - SetConsoleCursorPosition(hConOutRW, c); - ret = WriteConsoleA(hConOutRW, test_cp866, lstrlenA(test_cp866), &len, NULL); - ok(ret && len == lstrlenA(test_cp866), "WriteConsoleA failed\n"); - ret = ReadConsoleOutputCharacterW(hConOutRW, str_wbuf, lstrlenA(test_cp866), c, &len); - ok(ret && len == lstrlenA(test_cp866), "ReadConsoleOutputCharacterW failed\n"); - str_wbuf[lstrlenA(test_cp866)] = 0; - ok(!lstrcmpW(str_wbuf, test_unicode), "string does not match the pattern\n"); - - /* - * cp866 is OK, let's switch to cp1251. - * We expect that this codepage will be used in every SB - active and not. - */ - ok(SetConsoleOutputCP(1251), "Cannot set output cp to 1251\n"); - SetConsoleCursorPosition(hConOutRW, c); - ret = WriteConsoleA(hConOutRW, test_cp1251, lstrlenA(test_cp1251), &len, NULL); - ok(ret && len == lstrlenA(test_cp1251), "WriteConsoleA failed\n"); - ret = ReadConsoleOutputCharacterW(hConOutRW, str_wbuf, lstrlenA(test_cp1251), c, &len); - ok(ret && len == lstrlenA(test_cp1251), "ReadConsoleOutputCharacterW failed\n"); - str_wbuf[lstrlenA(test_cp1251)] = 0; - ok(!lstrcmpW(str_wbuf, test_unicode), "string does not match the pattern\n"); - - /* Check what has happened to hConOut. */ - SetConsoleCursorPosition(hConOut, c); - ret = WriteConsoleA(hConOut, test_cp1251, lstrlenA(test_cp1251), &len, NULL); - ok(ret && len == lstrlenA(test_cp1251), "WriteConsoleA failed\n"); - ret = ReadConsoleOutputCharacterW(hConOut, str_wbuf, lstrlenA(test_cp1251), c, &len); - ok(ret && len == lstrlenA(test_cp1251), "ReadConsoleOutputCharacterW failed\n"); - str_wbuf[lstrlenA(test_cp1251)] = 0; - ok(!lstrcmpW(str_wbuf, test_unicode), "string does not match the pattern\n"); - - /* Close all handles of current console SB */ - CloseHandle(hConOutNew); - CloseHandle(hConOutRW); - - /* Now active SB should be hConOut */ - hConOutNew = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, - NULL, OPEN_EXISTING, 0, 0); - ok(hConOutNew != INVALID_HANDLE_VALUE, "CONOUT$ is not opened\n"); - - /* Write using hConOutNew... */ - SetConsoleCursorPosition(hConOutNew, c); - ret = WriteConsoleA(hConOutNew, test_str1, lstrlenA(test_str1), &len, NULL); - ok (ret && len == lstrlenA(test_str1), "WriteConsoleA failed\n"); - /* ... and read it back via hConOut */ - ret = ReadConsoleOutputCharacterA(hConOut, str_buf, lstrlenA(test_str1), c, &len); - ok(ret && len == lstrlenA(test_str1), "ReadConsoleOutputCharacterA failed\n"); - str_buf[lstrlenA(test_str1)] = 0; - todo_wine ok(!lstrcmpA(str_buf, test_str1), "got '%s' expected '%s'\n", str_buf, test_str1); - CloseHandle(hConOutNew); - - /* This is not really needed under Windows */ - SetConsoleActiveScreenBuffer(hConOut); - - /* restore codepage */ - SetConsoleOutputCP(oldcp); -} - -static void test_GetSetConsoleInputExeName(void) -{ - BOOL ret; - DWORD error; - char buffer[MAX_PATH], module[MAX_PATH], *p; - static char input_exe[MAX_PATH] = "winetest.exe"; - - SetLastError(0xdeadbeef); - ret = pGetConsoleInputExeNameA(0, NULL); - error = GetLastError(); - ok(ret, "GetConsoleInputExeNameA failed\n"); - ok(error == ERROR_BUFFER_OVERFLOW, "got %u expected ERROR_BUFFER_OVERFLOW\n", error); - - SetLastError(0xdeadbeef); - ret = pGetConsoleInputExeNameA(0, buffer); - error = GetLastError(); - ok(ret, "GetConsoleInputExeNameA failed\n"); - ok(error == ERROR_BUFFER_OVERFLOW, "got %u expected ERROR_BUFFER_OVERFLOW\n", error); - - GetModuleFileNameA(GetModuleHandle(NULL), module, sizeof(module)); - p = strrchr(module, '\\') + 1; - - ret = pGetConsoleInputExeNameA(sizeof(buffer)/sizeof(buffer[0]), buffer); - ok(ret, "GetConsoleInputExeNameA failed\n"); - todo_wine ok(!lstrcmpA(buffer, p), "got %s expected %s\n", buffer, p); - - SetLastError(0xdeadbeef); - ret = pSetConsoleInputExeNameA(NULL); - error = GetLastError(); - ok(!ret, "SetConsoleInputExeNameA failed\n"); - ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", error); - - SetLastError(0xdeadbeef); - ret = pSetConsoleInputExeNameA(""); - error = GetLastError(); - ok(!ret, "SetConsoleInputExeNameA failed\n"); - ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", error); - - ret = pSetConsoleInputExeNameA(input_exe); - ok(ret, "SetConsoleInputExeNameA failed\n"); - - ret = pGetConsoleInputExeNameA(sizeof(buffer)/sizeof(buffer[0]), buffer); - ok(ret, "GetConsoleInputExeNameA failed\n"); - ok(!lstrcmpA(buffer, input_exe), "got %s expected %s\n", buffer, input_exe); -} - -START_TEST(console) -{ - HANDLE hConIn, hConOut; - BOOL ret; - CONSOLE_SCREEN_BUFFER_INFO sbi; - - init_function_pointers(); - - /* be sure we have a clean console (and that's our own) - * FIXME: this will make the test fail (currently) if we don't run - * under X11 - * Another solution would be to rerun the test under wineconsole with - * the curses backend - */ - - /* first, we detach and open a fresh console to play with */ - FreeConsole(); - ok(AllocConsole(), "Couldn't alloc console\n"); - hConIn = CreateFileA("CONIN$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - hConOut = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - - /* now verify everything's ok */ - ok(hConIn != INVALID_HANDLE_VALUE, "Opening ConIn\n"); - ok(hConOut != INVALID_HANDLE_VALUE, "Opening ConOut\n"); - - ok(ret = GetConsoleScreenBufferInfo(hConOut, &sbi), "Getting sb info\n"); - if (!ret) return; - - /* Non interactive tests */ - testCursor(hConOut, sbi.dwSize); - /* will test wrapped (on/off) & processed (on/off) strings output */ - testWrite(hConOut, sbi.dwSize); - /* will test line scrolling at the bottom of the screen */ - /* testBottomScroll(); */ - /* will test all the scrolling operations */ - testScroll(hConOut, sbi.dwSize); - /* will test sb creation / modification / codepage handling */ - testScreenBuffer(hConOut); - testCtrlHandler(); - /* still to be done: access rights & access on objects */ - - if (!pGetConsoleInputExeNameA || !pSetConsoleInputExeNameA) - { - skip("GetConsoleInputExeNameA and/or SetConsoleInputExeNameA is not available\n"); - return; - } - else - test_GetSetConsoleInputExeName(); -} diff --git a/rostests/winetests/kernel32/debugger.c b/rostests/winetests/kernel32/debugger.c deleted file mode 100644 index ac7c7e1ebe2..00000000000 --- a/rostests/winetests/kernel32/debugger.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Unit tests for the debugger facility - * - * Copyright (c) 2007 Francois Gouget 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 -#include -#include -#include "wine/test.h" - -#ifndef STATUS_DEBUGGER_INACTIVE -#define STATUS_DEBUGGER_INACTIVE ((NTSTATUS) 0xC0000354) -#endif - -static int myARGC; -static char** myARGV; - -static BOOL (WINAPI *pDebugActiveProcessStop)(DWORD); -static BOOL (WINAPI *pDebugSetProcessKillOnExit)(BOOL); - -/* Copied from the process test */ -static void get_file_name(char* buf) -{ - char path[MAX_PATH]; - - buf[0] = '\0'; - GetTempPathA(sizeof(path), path); - GetTempFileNameA(path, "wt", 0, buf); -} - -static void get_events(const char* name, HANDLE *start_event, HANDLE *done_event) -{ - const char* basename; - char* event_name; - - basename=strrchr(name, '\\'); - basename=(basename ? basename+1 : name); - event_name=HeapAlloc(GetProcessHeap(), 0, 6+strlen(basename)+1); - - sprintf(event_name, "start_%s", basename); - *start_event=CreateEvent(NULL, 0,0, event_name); - sprintf(event_name, "done_%s", basename); - *done_event=CreateEvent(NULL, 0,0, event_name); - HeapFree(GetProcessHeap(), 0, event_name); -} - -static void save_blackbox(const char* logfile, void* blackbox, int size) -{ - HANDLE hFile; - DWORD written; - - hFile=CreateFileA(logfile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); - if (hFile == INVALID_HANDLE_VALUE) - return; - WriteFile(hFile, blackbox, size, &written, NULL); - CloseHandle(hFile); -} - -static int load_blackbox(const char* logfile, void* blackbox, int size) -{ - HANDLE hFile; - DWORD read; - BOOL ret; - - hFile=CreateFileA(logfile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0); - if (hFile == INVALID_HANDLE_VALUE) - { - ok(0, "unable to open '%s'\n", logfile); - return 0; - } - ret=ReadFile(hFile, blackbox, size, &read, NULL); - ok(read == size, "wrong size for '%s': read=%d\n", logfile, read); - CloseHandle(hFile); - return 1; -} - -typedef struct -{ - DWORD pid; -} crash_blackbox_t; - -static void doCrash(int argc, char** argv) -{ - char* p; - - if (argc >= 4) - { - crash_blackbox_t blackbox; - blackbox.pid=GetCurrentProcessId(); - save_blackbox(argv[3], &blackbox, sizeof(blackbox)); - } - - /* Just crash */ - trace("child: crashing...\n"); - p=NULL; - *p=0; -} - -typedef struct -{ - int argc; - DWORD pid; - BOOL debug_rc; - DWORD debug_err; - BOOL attach_rc; - DWORD attach_err; - BOOL nokill_rc; - DWORD nokill_err; - BOOL detach_rc; - DWORD detach_err; -} debugger_blackbox_t; - -static void doDebugger(int argc, char** argv) -{ - const char* logfile; - debugger_blackbox_t blackbox; - HANDLE start_event, done_event, debug_event; - - blackbox.argc=argc; - logfile=(argc >= 4 ? argv[3] : NULL); - blackbox.pid=(argc >= 5 ? atol(argv[4]) : 0); - - if (strstr(myARGV[2], "attach")) - { - blackbox.attach_rc=DebugActiveProcess(blackbox.pid); - if (!blackbox.attach_rc) - blackbox.attach_err=GetLastError(); - } - else - blackbox.attach_rc=TRUE; - - debug_event=(argc >= 6 ? (HANDLE)atol(argv[5]) : NULL); - if (debug_event && strstr(myARGV[2], "event")) - { - blackbox.debug_rc=SetEvent(debug_event); - if (!blackbox.debug_rc) - blackbox.debug_err=GetLastError(); - } - else - blackbox.debug_rc=TRUE; - - get_events(logfile, &start_event, &done_event); - if (strstr(myARGV[2], "order")) - { - trace("debugger: waiting for the start signal...\n"); - WaitForSingleObject(start_event, INFINITE); - } - - if (strstr(myARGV[2], "nokill")) - { - blackbox.nokill_rc=pDebugSetProcessKillOnExit(FALSE); - if (!blackbox.nokill_rc) - blackbox.nokill_err=GetLastError(); - } - else - blackbox.nokill_rc=TRUE; - - if (strstr(myARGV[2], "detach")) - { - blackbox.detach_rc=pDebugActiveProcessStop(blackbox.pid); - if (!blackbox.detach_rc) - blackbox.detach_err=GetLastError(); - } - else - blackbox.detach_rc=TRUE; - - save_blackbox(logfile, &blackbox, sizeof(blackbox)); - trace("debugger: done debugging...\n"); - SetEvent(done_event); - - /* Just exit with a known value */ - ExitProcess(0xdeadbeef); -} - -static void crash_and_debug(HKEY hkey, const char* argv0, const char* dbgtasks) -{ - DWORD ret; - HANDLE start_event, done_event; - char* cmd; - char dbglog[MAX_PATH]; - char childlog[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - DWORD exit_code; - crash_blackbox_t crash_blackbox; - debugger_blackbox_t dbg_blackbox; - - ret=RegSetValueExA(hkey, "auto", 0, REG_SZ, (BYTE*)"1", 2); - ok(ret == ERROR_SUCCESS, "unable to set AeDebug/auto: ret=%d\n", ret); - - get_file_name(dbglog); - get_events(dbglog, &start_event, &done_event); - cmd=HeapAlloc(GetProcessHeap(), 0, strlen(argv0)+10+strlen(dbgtasks)+1+strlen(dbglog)+34+1); - sprintf(cmd, "%s debugger %s %s %%ld %%ld", argv0, dbgtasks, dbglog); - ret=RegSetValueExA(hkey, "debugger", 0, REG_SZ, (BYTE*)cmd, strlen(cmd)+1); - ok(ret == ERROR_SUCCESS, "unable to set AeDebug/debugger: ret=%d\n", ret); - HeapFree(GetProcessHeap(), 0, cmd); - - get_file_name(childlog); - cmd=HeapAlloc(GetProcessHeap(), 0, strlen(argv0)+16+strlen(dbglog)+1); - sprintf(cmd, "%s debugger crash %s", argv0, childlog); - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - ret=CreateProcessA(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &info); - ok(ret, "CreateProcess: err=%d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, cmd); - CloseHandle(info.hThread); - - /* The process exits... */ - trace("waiting for child exit...\n"); - ok(WaitForSingleObject(info.hProcess, 60000) == WAIT_OBJECT_0, "Timed out waiting for the child to crash\n"); - ok(GetExitCodeProcess(info.hProcess, &exit_code), "GetExitCodeProcess failed: err=%d\n", GetLastError()); - if (strstr(dbgtasks, "code2")) - { - /* If, after attaching to the debuggee, the debugger exits without - * detaching, then the debuggee gets a special exit code. - */ - ok(exit_code == 0xffffffff || /* Win 9x */ - exit_code == 0x80 || /* NT4 */ - exit_code == STATUS_DEBUGGER_INACTIVE, /* Win >= XP */ - "wrong exit code : %08x\n", exit_code); - } - else - ok(exit_code == STATUS_ACCESS_VIOLATION, "exit code = %08x instead of STATUS_ACCESS_VIOLATION\n", exit_code); - CloseHandle(info.hProcess); - - /* ...before the debugger */ - if (strstr(dbgtasks, "order")) - ok(SetEvent(start_event), "SetEvent(start_event) failed\n"); - - trace("waiting for the debugger...\n"); - ok(WaitForSingleObject(done_event, 60000) == WAIT_OBJECT_0, "Timed out waiting for the debugger\n"); - - assert(load_blackbox(childlog, &crash_blackbox, sizeof(crash_blackbox))); - assert(load_blackbox(dbglog, &dbg_blackbox, sizeof(dbg_blackbox))); - - ok(dbg_blackbox.argc == 6, "wrong debugger argument count: %d\n", dbg_blackbox.argc); - ok(dbg_blackbox.pid == crash_blackbox.pid, "the child and debugged pids don't match: %d != %d\n", crash_blackbox.pid, dbg_blackbox.pid); - ok(dbg_blackbox.debug_rc, "debugger: SetEvent(debug_event) failed err=%d\n", dbg_blackbox.debug_err); - ok(dbg_blackbox.attach_rc, "DebugActiveProcess(%d) failed err=%d\n", dbg_blackbox.pid, dbg_blackbox.attach_err); - ok(dbg_blackbox.nokill_rc, "DebugSetProcessKillOnExit(FALSE) failed err=%d\n", dbg_blackbox.nokill_err); - ok(dbg_blackbox.detach_rc, "DebugActiveProcessStop(%d) failed err=%d\n", dbg_blackbox.pid, dbg_blackbox.detach_err); - - assert(DeleteFileA(dbglog) != 0); - assert(DeleteFileA(childlog) != 0); -} - -static void crash_and_winedbg(HKEY hkey, const char* argv0) -{ - DWORD ret; - char* cmd; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - DWORD exit_code; - - ret=RegSetValueExA(hkey, "auto", 0, REG_SZ, (BYTE*)"1", 2); - ok(ret == ERROR_SUCCESS, "unable to set AeDebug/auto: ret=%d\n", ret); - - cmd=HeapAlloc(GetProcessHeap(), 0, strlen(argv0)+15+1); - sprintf(cmd, "%s debugger crash", argv0); - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - ret=CreateProcessA(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &info); - ok(ret, "CreateProcess: err=%d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, cmd); - CloseHandle(info.hThread); - - trace("waiting for child exit...\n"); - ok(WaitForSingleObject(info.hProcess, 60000) == WAIT_OBJECT_0, "Timed out waiting for the child to crash\n"); - ok(GetExitCodeProcess(info.hProcess, &exit_code), "GetExitCodeProcess failed: err=%d\n", GetLastError()); - ok(exit_code == STATUS_ACCESS_VIOLATION, "exit code = %08x\n", exit_code); - CloseHandle(info.hProcess); -} - -static void test_ExitCode(void) -{ - static const char* AeDebug="Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug"; - char test_exe[MAX_PATH]; - DWORD ret; - HKEY hkey; - DWORD disposition; - LPBYTE auto_val=NULL; - DWORD auto_size, auto_type; - LPBYTE debugger_val=NULL; - DWORD debugger_size, debugger_type; - - GetModuleFileNameA(GetModuleHandle(NULL), test_exe, sizeof(test_exe)); - if (GetFileAttributes(test_exe) == INVALID_FILE_ATTRIBUTES) - strcat(test_exe, ".so"); - if (GetFileAttributesA(test_exe) == INVALID_FILE_ATTRIBUTES) - { - ok(0, "could not find the test executable '%s'\n", test_exe); - return; - } - - ret=RegCreateKeyExA(HKEY_LOCAL_MACHINE, AeDebug, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &disposition); - if (ret == ERROR_SUCCESS) - { - auto_size=0; - ret=RegQueryValueExA(hkey, "auto", NULL, &auto_type, NULL, &auto_size); - if (ret == ERROR_SUCCESS) - { - auto_val=HeapAlloc(GetProcessHeap(), 0, auto_size); - RegQueryValueExA(hkey, "auto", NULL, &auto_type, auto_val, &auto_size); - } - - debugger_size=0; - ret=RegQueryValueExA(hkey, "debugger", NULL, &debugger_type, NULL, &debugger_size); - if (ret == ERROR_SUCCESS) - { - debugger_val=HeapAlloc(GetProcessHeap(), 0, debugger_size); - RegQueryValueExA(hkey, "debugger", NULL, &debugger_type, debugger_val, &debugger_size); - } - } - else if (ret == ERROR_ACCESS_DENIED) - { - skip("not enough privileges to change the debugger\n"); - return; - } - else if (ret != ERROR_FILE_NOT_FOUND) - { - ok(0, "could not open the AeDebug key: %d\n", ret); - return; - } - - if (debugger_val && debugger_type == REG_SZ && - strstr((char*)debugger_val, "winedbg --auto")) - crash_and_winedbg(hkey, test_exe); - - crash_and_debug(hkey, test_exe, "dbg,none"); - crash_and_debug(hkey, test_exe, "dbg,event,order"); - crash_and_debug(hkey, test_exe, "dbg,attach,event,code2"); - if (pDebugSetProcessKillOnExit) - crash_and_debug(hkey, test_exe, "dbg,attach,event,nokill"); - if (pDebugActiveProcessStop) - crash_and_debug(hkey, test_exe, "dbg,attach,event,detach"); - - if (disposition == REG_CREATED_NEW_KEY) - { - RegCloseKey(hkey); - RegDeleteKeyA(HKEY_LOCAL_MACHINE, AeDebug); - } - else - { - if (auto_val) - { - RegSetValueExA(hkey, "auto", 0, auto_type, auto_val, auto_size); - HeapFree(GetProcessHeap(), 0, auto_val); - } - else - RegDeleteValueA(hkey, "auto"); - if (debugger_val) - { - RegSetValueExA(hkey, "debugger", 0, debugger_type, debugger_val, debugger_size); - HeapFree(GetProcessHeap(), 0, debugger_val); - } - else - RegDeleteValueA(hkey, "debugger"); - RegCloseKey(hkey); - } -} - -START_TEST(debugger) -{ - HMODULE hdll; - - hdll=GetModuleHandle("kernel32.dll"); - pDebugActiveProcessStop=(void*)GetProcAddress(hdll, "DebugActiveProcessStop"); - pDebugSetProcessKillOnExit=(void*)GetProcAddress(hdll, "DebugSetProcessKillOnExit"); - - myARGC=winetest_get_mainargs(&myARGV); - if (myARGC >= 3 && strcmp(myARGV[2], "crash") == 0) - { - doCrash(myARGC, myARGV); - } - else if (myARGC >= 3 && strncmp(myARGV[2], "dbg,", 4) == 0) - { - doDebugger(myARGC, myARGV); - } - else - { - test_ExitCode(); - } -} diff --git a/rostests/winetests/kernel32/directory.c b/rostests/winetests/kernel32/directory.c deleted file mode 100755 index 47e77013a1d..00000000000 --- a/rostests/winetests/kernel32/directory.c +++ /dev/null @@ -1,482 +0,0 @@ -/* - * Unit test suite for directory functions. - * - * Copyright 2002 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 - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" - -/* If you change something in these tests, please do the same - * for GetSystemDirectory tests. - */ -static void test_GetWindowsDirectoryA(void) -{ - UINT len, len_with_null; - char buf[MAX_PATH]; - - len_with_null = GetWindowsDirectoryA(NULL, 0); - ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH\n"); - - lstrcpyA(buf, "foo"); - len_with_null = GetWindowsDirectoryA(buf, 1); - ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); - - lstrcpyA(buf, "foo"); - len = GetWindowsDirectoryA(buf, len_with_null - 1); - ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); - ok(len == len_with_null, "GetWindowsDirectoryW returned %d, expected %d\n", - len, len_with_null); - - lstrcpyA(buf, "foo"); - len = GetWindowsDirectoryA(buf, len_with_null); - ok(lstrcmpA(buf, "foo") != 0, "should touch the buffer\n"); - ok(len == strlen(buf), "returned length should be equal to the length of string\n"); - ok(len == len_with_null-1, "GetWindowsDirectoryA returned %d, expected %d\n", - len, len_with_null-1); -} - -static void test_GetWindowsDirectoryW(void) -{ - UINT len, len_with_null; - WCHAR buf[MAX_PATH]; - static const WCHAR fooW[] = {'f','o','o',0}; - - len_with_null = GetWindowsDirectoryW(NULL, 0); - if (len_with_null==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH\n"); - - lstrcpyW(buf, fooW); - len = GetWindowsDirectoryW(buf, 1); - ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer\n"); - ok(len == len_with_null, "GetWindowsDirectoryW returned %d, expected %d\n", - len, len_with_null); - - lstrcpyW(buf, fooW); - len = GetWindowsDirectoryW(buf, len_with_null - 1); - ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer\n"); - ok(len == len_with_null, "GetWindowsDirectoryW returned %d, expected %d\n", - len, len_with_null); - - lstrcpyW(buf, fooW); - len = GetWindowsDirectoryW(buf, len_with_null); - ok(lstrcmpW(buf, fooW) != 0, "should touch the buffer\n"); - ok(len == lstrlenW(buf), "returned length should be equal to the length of string\n"); - ok(len == len_with_null-1, "GetWindowsDirectoryW returned %d, expected %d\n", - len, len_with_null-1); -} - - -/* If you change something in these tests, please do the same - * for GetWindowsDirectory tests. - */ -static void test_GetSystemDirectoryA(void) -{ - UINT len, len_with_null; - char buf[MAX_PATH]; - - len_with_null = GetSystemDirectoryA(NULL, 0); - ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH\n"); - - lstrcpyA(buf, "foo"); - len = GetSystemDirectoryA(buf, 1); - ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); - ok(len == len_with_null, "GetSystemDirectoryA returned %d, expected %d\n", - len, len_with_null); - - lstrcpyA(buf, "foo"); - len = GetSystemDirectoryA(buf, len_with_null - 1); - ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); - ok(len == len_with_null, "GetSystemDirectoryA returned %d, expected %d\n", - len, len_with_null); - - lstrcpyA(buf, "foo"); - len = GetSystemDirectoryA(buf, len_with_null); - ok(lstrcmpA(buf, "foo") != 0, "should touch the buffer\n"); - ok(len == strlen(buf), "returned length should be equal to the length of string\n"); - ok(len == len_with_null-1, "GetSystemDirectoryW returned %d, expected %d\n", - len, len_with_null-1); -} - -static void test_GetSystemDirectoryW(void) -{ - UINT len, len_with_null; - WCHAR buf[MAX_PATH]; - static const WCHAR fooW[] = {'f','o','o',0}; - - len_with_null = GetSystemDirectoryW(NULL, 0); - if (len_with_null==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(len_with_null <= MAX_PATH, "should fit into MAX_PATH\n"); - - lstrcpyW(buf, fooW); - len = GetSystemDirectoryW(buf, 1); - ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer\n"); - ok(len == len_with_null, "GetSystemDirectoryW returned %d, expected %d\n", - len, len_with_null); - - lstrcpyW(buf, fooW); - len = GetSystemDirectoryW(buf, len_with_null - 1); - ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer\n"); - ok(len == len_with_null, "GetSystemDirectoryW returned %d, expected %d\n", - len, len_with_null); - - lstrcpyW(buf, fooW); - len = GetSystemDirectoryW(buf, len_with_null); - ok(lstrcmpW(buf, fooW) != 0, "should touch the buffer\n"); - ok(len == lstrlenW(buf), "returned length should be equal to the length of string\n"); - ok(len == len_with_null-1, "GetSystemDirectoryW returned %d, expected %d\n", - len, len_with_null-1); -} - -static void test_CreateDirectoryA(void) -{ - char tmpdir[MAX_PATH]; - BOOL ret; - - ret = CreateDirectoryA(NULL, NULL); - ok(ret == FALSE && (GetLastError() == ERROR_PATH_NOT_FOUND || - GetLastError() == ERROR_INVALID_PARAMETER), - "CreateDirectoryA(NULL): ret=%d err=%d\n", ret, GetLastError()); - - ret = CreateDirectoryA("", NULL); - ok(ret == FALSE && (GetLastError() == ERROR_BAD_PATHNAME || - GetLastError() == ERROR_PATH_NOT_FOUND), - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - - ret = GetSystemDirectoryA(tmpdir, MAX_PATH); - ok(ret < MAX_PATH, "System directory should fit into MAX_PATH\n"); - - ret = SetCurrentDirectoryA(tmpdir); - ok(ret == TRUE, "could not chdir to the System directory\n"); - - ret = CreateDirectoryA(".", NULL); - ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - - - ret = CreateDirectoryA("..", NULL); - ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - - GetTempPathA(MAX_PATH, tmpdir); - tmpdir[3] = 0; /* truncate the path */ - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == FALSE && (GetLastError() == ERROR_ALREADY_EXISTS || - GetLastError() == ERROR_ACCESS_DENIED), - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me"); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE, "CreateDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - - lstrcatA(tmpdir, "?"); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == FALSE && (GetLastError() == ERROR_INVALID_NAME || - GetLastError() == ERROR_PATH_NOT_FOUND), - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - RemoveDirectoryA(tmpdir); - - tmpdir[lstrlenA(tmpdir) - 1] = '*'; - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == FALSE && (GetLastError() == ERROR_INVALID_NAME || - GetLastError() == ERROR_PATH_NOT_FOUND), - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - RemoveDirectoryA(tmpdir); - - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me/Please Remove Me"); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - RemoveDirectoryA(tmpdir); - - /* Test behavior with a trailing dot. - * The directory should be created without the dot. - */ - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me."); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE, - "CreateDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - lstrcatA(tmpdir, "/Please Remove Me"); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE, - "CreateDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me"); - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - /* Test behavior with two trailing dots. - * The directory should be created without the trailing dots. - */ - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me.."); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE, - "CreateDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - lstrcatA(tmpdir, "/Please Remove Me"); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE || /* On Win98 */ - (ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND), /* On NT! */ - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - if (ret == TRUE) - { - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - } - - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me"); - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - /* Test behavior with a trailing space. - * The directory should be created without the trailing space. - */ - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me "); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE, - "CreateDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - lstrcatA(tmpdir, "/Please Remove Me"); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE || /* On Win98 */ - (ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND), /* On NT! */ - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - if (ret == TRUE) - { - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - } - - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me"); - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - /* Test behavior with a trailing space. - * The directory should be created without the trailing spaces. - */ - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me "); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE, - "CreateDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - - lstrcatA(tmpdir, "/Please Remove Me"); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE || /* On Win98 */ - (ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND), /* On NT! */ - "CreateDirectoryA(%s): ret=%d err=%d\n", tmpdir, ret, GetLastError()); - if (ret == TRUE) - { - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); - } - - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me"); - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, - "RemoveDirectoryA(%s) failed err=%d\n", tmpdir, GetLastError()); -} - -static void test_CreateDirectoryW(void) -{ - WCHAR tmpdir[MAX_PATH]; - BOOL ret; - static const WCHAR empty_strW[] = { 0 }; - static const WCHAR tmp_dir_name[] = {'P','l','e','a','s','e',' ','R','e','m','o','v','e',' ','M','e',0}; - static const WCHAR dotW[] = {'.',0}; - static const WCHAR slashW[] = {'/',0}; - static const WCHAR dotdotW[] = {'.','.',0}; - static const WCHAR questionW[] = {'?',0}; - - ret = CreateDirectoryW(NULL, NULL); - if (!ret && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, "should not create NULL path\n"); - - ret = CreateDirectoryW(empty_strW, NULL); - ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, "should not create empty path\n"); - - ret = GetSystemDirectoryW(tmpdir, MAX_PATH); - ok(ret < MAX_PATH, "System directory should fit into MAX_PATH\n"); - - ret = SetCurrentDirectoryW(tmpdir); - ok(ret == TRUE, "could not chdir to the System directory\n"); - - ret = CreateDirectoryW(dotW, NULL); - ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n"); - - ret = CreateDirectoryW(dotdotW, NULL); - ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n"); - - GetTempPathW(MAX_PATH, tmpdir); - tmpdir[3] = 0; /* truncate the path */ - ret = CreateDirectoryW(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_ACCESS_DENIED, "should deny access to the drive root\n"); - - GetTempPathW(MAX_PATH, tmpdir); - lstrcatW(tmpdir, tmp_dir_name); - ret = CreateDirectoryW(tmpdir, NULL); - ok(ret == TRUE, "CreateDirectoryW should always succeed\n"); - - ret = CreateDirectoryW(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n"); - - ret = RemoveDirectoryW(tmpdir); - ok(ret == TRUE, "RemoveDirectoryW should always succeed\n"); - - lstrcatW(tmpdir, questionW); - ret = CreateDirectoryW(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_INVALID_NAME, - "CreateDirectoryW with ? wildcard name should fail with error 183, ret=%s error=%d\n", - ret ? " True" : "False", GetLastError()); - ret = RemoveDirectoryW(tmpdir); - - tmpdir[lstrlenW(tmpdir) - 1] = '*'; - ret = CreateDirectoryW(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_INVALID_NAME, - "CreateDirectoryW with * wildcard name should fail with error 183, ret=%s error=%d\n", - ret ? " True" : "False", GetLastError()); - ret = RemoveDirectoryW(tmpdir); - - GetTempPathW(MAX_PATH, tmpdir); - lstrcatW(tmpdir, tmp_dir_name); - lstrcatW(tmpdir, slashW); - lstrcatW(tmpdir, tmp_dir_name); - ret = CreateDirectoryW(tmpdir, NULL); - ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, - "CreateDirectoryW with multiple nonexistent directories in path should fail\n"); - ret = RemoveDirectoryW(tmpdir); -} - -static void test_RemoveDirectoryA(void) -{ - char tmpdir[MAX_PATH]; - BOOL ret; - - GetTempPathA(MAX_PATH, tmpdir); - lstrcatA(tmpdir, "Please Remove Me"); - ret = CreateDirectoryA(tmpdir, NULL); - ok(ret == TRUE, "CreateDirectoryA should always succeed\n"); - - ret = RemoveDirectoryA(tmpdir); - ok(ret == TRUE, "RemoveDirectoryA should always succeed\n"); - - lstrcatA(tmpdir, "?"); - ret = RemoveDirectoryA(tmpdir); - ok(ret == FALSE && (GetLastError() == ERROR_INVALID_NAME || - GetLastError() == ERROR_PATH_NOT_FOUND), - "RemoveDirectoryA with ? wildcard name should fail, ret=%s error=%d\n", - ret ? " True" : "False", GetLastError()); - - tmpdir[lstrlenA(tmpdir) - 1] = '*'; - ret = RemoveDirectoryA(tmpdir); - ok(ret == FALSE && (GetLastError() == ERROR_INVALID_NAME || - GetLastError() == ERROR_PATH_NOT_FOUND), - "RemoveDirectoryA with * wildcard name should fail, ret=%s error=%d\n", - ret ? " True" : "False", GetLastError()); -} - -static void test_RemoveDirectoryW(void) -{ - WCHAR tmpdir[MAX_PATH]; - BOOL ret; - static const WCHAR tmp_dir_name[] = {'P','l','e','a','s','e',' ','R','e','m','o','v','e',' ','M','e',0}; - static const WCHAR questionW[] = {'?',0}; - - GetTempPathW(MAX_PATH, tmpdir); - lstrcatW(tmpdir, tmp_dir_name); - ret = CreateDirectoryW(tmpdir, NULL); - if (!ret && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - - ok(ret == TRUE, "CreateDirectoryW should always succeed\n"); - - ret = RemoveDirectoryW(tmpdir); - ok(ret == TRUE, "RemoveDirectoryW should always succeed\n"); - - lstrcatW(tmpdir, questionW); - ret = RemoveDirectoryW(tmpdir); - ok(ret == FALSE && GetLastError() == ERROR_INVALID_NAME, - "RemoveDirectoryW with wildcard should fail with error 183, ret=%s error=%d\n", - ret ? " True" : "False", GetLastError()); - - tmpdir[lstrlenW(tmpdir) - 1] = '*'; - ret = RemoveDirectoryW(tmpdir); - ok(ret == FALSE && GetLastError() == ERROR_INVALID_NAME, - "RemoveDirectoryW with * wildcard name should fail with error 183, ret=%s error=%d\n", - ret ? " True" : "False", GetLastError()); -} - -static void test_SetCurrentDirectoryA(void) -{ - SetLastError(0); - ok( !SetCurrentDirectoryA( "\\some_dummy_dir" ), "SetCurrentDirectoryA succeeded\n" ); - ok( GetLastError() == ERROR_FILE_NOT_FOUND, "wrong error %d\n", GetLastError() ); - ok( !SetCurrentDirectoryA( "\\some_dummy\\subdir" ), "SetCurrentDirectoryA succeeded\n" ); - ok( GetLastError() == ERROR_PATH_NOT_FOUND, "wrong error %d\n", GetLastError() ); -} - -START_TEST(directory) -{ - test_GetWindowsDirectoryA(); - test_GetWindowsDirectoryW(); - - test_GetSystemDirectoryA(); - test_GetSystemDirectoryW(); - - test_CreateDirectoryA(); - test_CreateDirectoryW(); - - test_RemoveDirectoryA(); - test_RemoveDirectoryW(); - - test_SetCurrentDirectoryA(); -} diff --git a/rostests/winetests/kernel32/drive.c b/rostests/winetests/kernel32/drive.c deleted file mode 100755 index a94cbdfea6e..00000000000 --- a/rostests/winetests/kernel32/drive.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Unit test suite for drive functions. - * - * Copyright 2002 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 - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" - -static DWORD (WINAPI *pGetDiskFreeSpaceExA)(LPCSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER); - -static void test_GetDriveTypeA(void) -{ - char drive[] = "?:\\"; - DWORD logical_drives; - UINT type; - - logical_drives = GetLogicalDrives(); - ok(logical_drives != 0, "GetLogicalDrives error %d\n", GetLastError()); - - for (drive[0] = 'A'; drive[0] <= 'Z'; drive[0]++) - { - type = GetDriveTypeA(drive); - ok(type > 0 && type <= 6, "not a valid drive %c: type %u\n", drive[0], type); - - if (!(logical_drives & 1)) - ok(type == DRIVE_NO_ROOT_DIR, - "GetDriveTypeA should return DRIVE_NO_ROOT_DIR for inexistent drive %c: but not %u\n", - drive[0], type); - - logical_drives >>= 1; - } -} - -static void test_GetDriveTypeW(void) -{ - WCHAR drive[] = {'?',':','\\',0}; - DWORD logical_drives; - UINT type; - - logical_drives = GetLogicalDrives(); - ok(logical_drives != 0, "GetLogicalDrives error %d\n", GetLastError()); - - for (drive[0] = 'A'; drive[0] <= 'Z'; drive[0]++) - { - type = GetDriveTypeW(drive); - if (type == DRIVE_UNKNOWN && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - /* Must be Win9x which doesn't support the Unicode functions */ - return; - } - ok(type > 0 && type <= 6, "not a valid drive %c: type %u\n", drive[0], type); - - if (!(logical_drives & 1)) - ok(type == DRIVE_NO_ROOT_DIR, - "GetDriveTypeW should return DRIVE_NO_ROOT_DIR for inexistent drive %c: but not %u\n", - drive[0], type); - - logical_drives >>= 1; - } -} - -static void test_GetDiskFreeSpaceA(void) -{ - BOOL ret; - DWORD sectors_per_cluster, bytes_per_sector, free_clusters, total_clusters; - char drive[] = "?:\\"; - DWORD logical_drives; - - ret = GetDiskFreeSpaceA(NULL, §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - ok(ret, "GetDiskFreeSpaceA error %d\n", GetLastError()); - - ret = GetDiskFreeSpaceA("", §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - ok(!ret && (GetLastError() == ERROR_PATH_NOT_FOUND || GetLastError() == ERROR_INVALID_NAME), - "GetDiskFreeSpaceA(\"\"): ret=%d GetLastError=%d\n", - ret, GetLastError()); - - ret = GetDiskFreeSpaceA("\\", §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - ok(ret, "GetDiskFreeSpaceA error %d\n", GetLastError()); - - ret = GetDiskFreeSpaceA("/", §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - ok(ret, "GetDiskFreeSpaceA error %d\n", GetLastError()); - - logical_drives = GetLogicalDrives(); - ok(logical_drives != 0, "GetLogicalDrives error %d\n", GetLastError()); - - for (drive[0] = 'A'; drive[0] <= 'Z'; drive[0]++) - { - UINT drivetype = GetDriveTypeA(drive); - /* Skip floppy drives because NT pops up a MessageBox if no - * floppy is present - */ - if (drivetype != DRIVE_REMOVABLE && drivetype != DRIVE_NO_ROOT_DIR) - { - ret = GetDiskFreeSpaceA(drive, §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - if (!(logical_drives & 1)) - ok(!ret && (GetLastError() == ERROR_PATH_NOT_FOUND || GetLastError() == ERROR_INVALID_DRIVE), - "GetDiskFreeSpaceA(%s): ret=%d GetLastError=%d\n", - drive, ret, GetLastError()); - else - { - ok(ret || - (!ret && (GetLastError() == ERROR_NOT_READY || GetLastError() == ERROR_INVALID_DRIVE)), - "GetDiskFreeSpaceA(%s): ret=%d GetLastError=%d\n", - drive, ret, GetLastError()); - if( GetVersion() & 0x80000000) - /* win3.0 thru winME */ - ok( total_clusters <= 65535, - "total clusters is %d > 65535\n", total_clusters); - else if (pGetDiskFreeSpaceExA) { - /* NT, 2k, XP : GetDiskFreeSpace should be accurate */ - ULARGE_INTEGER totEx, tot, d; - - tot.QuadPart = sectors_per_cluster; - tot.QuadPart = (tot.QuadPart * bytes_per_sector) * total_clusters; - ret = pGetDiskFreeSpaceExA( drive, &d, &totEx, NULL); - ok( ret || (!ret && ERROR_NOT_READY == GetLastError()), - "GetDiskFreeSpaceExA( %s ) failed. GetLastError=%d\n", drive, GetLastError()); - ok( bytes_per_sector == 0 || /* empty cd rom drive */ - totEx.QuadPart <= tot.QuadPart, - "GetDiskFreeSpaceA should report at least as much bytes on disk %s as GetDiskFreeSpaceExA\n", drive); - } - } - } - logical_drives >>= 1; - } -} - -static void test_GetDiskFreeSpaceW(void) -{ - BOOL ret; - DWORD sectors_per_cluster, bytes_per_sector, free_clusters, total_clusters; - WCHAR drive[] = {'?',':','\\',0}; - DWORD logical_drives; - static const WCHAR empty_pathW[] = { 0 }; - static const WCHAR root_pathW[] = { '\\', 0 }; - static const WCHAR unix_style_root_pathW[] = { '/', 0 }; - - ret = GetDiskFreeSpaceW(NULL, §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - if (ret == 0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - /* Must be Win9x which doesn't support the Unicode functions */ - return; - } - ok(ret, "GetDiskFreeSpaceW error %d\n", GetLastError()); - - ret = GetDiskFreeSpaceW(empty_pathW, §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND, - "GetDiskFreeSpaceW(\"\"): ret=%d GetLastError=%d\n", - ret, GetLastError()); - - ret = GetDiskFreeSpaceW(root_pathW, §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - ok(ret, "GetDiskFreeSpaceW(\"\") error %d\n", GetLastError()); - - ret = GetDiskFreeSpaceW(unix_style_root_pathW, §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - ok(ret, "GetDiskFreeSpaceW error %d\n", GetLastError()); - - logical_drives = GetLogicalDrives(); - ok(logical_drives != 0, "GetLogicalDrives error %d\n", GetLastError()); - - for (drive[0] = 'A'; drive[0] <= 'Z'; drive[0]++) - { - UINT drivetype = GetDriveTypeW(drive); - /* Skip floppy drives because NT4 pops up a MessageBox if no floppy is present */ - if (drivetype != DRIVE_REMOVABLE && drivetype != DRIVE_NO_ROOT_DIR) - { - ret = GetDiskFreeSpaceW(drive, §ors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters); - if (!(logical_drives & 1)) - ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND, - "GetDiskFreeSpaceW(%c): ret=%d GetLastError=%d\n", - drive[0], ret, GetLastError()); - else - ok(ret || GetLastError() == ERROR_NOT_READY, - "GetDiskFreeSpaceW(%c): ret=%d GetLastError=%d\n", - drive[0], ret, GetLastError()); - } - logical_drives >>= 1; - } -} - -START_TEST(drive) -{ - HANDLE hkernel32 = GetModuleHandleA("kernel32"); - pGetDiskFreeSpaceExA = (void *) GetProcAddress(hkernel32, "GetDiskFreeSpaceExA"); - - test_GetDriveTypeA(); - test_GetDriveTypeW(); - - test_GetDiskFreeSpaceA(); - test_GetDiskFreeSpaceW(); -} diff --git a/rostests/winetests/kernel32/environ.c b/rostests/winetests/kernel32/environ.c deleted file mode 100755 index e6dd1fca5d3..00000000000 --- a/rostests/winetests/kernel32/environ.c +++ /dev/null @@ -1,499 +0,0 @@ -/* - * Unit test suite for environment functions. - * - * Copyright 2002 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 - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" - -static BOOL (WINAPI *pGetComputerNameExA)(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD); -static BOOL (WINAPI *pGetComputerNameExW)(COMPUTER_NAME_FORMAT,LPWSTR,LPDWORD); - -static void init_functionpointers(void) -{ - HMODULE hkernel32 = GetModuleHandleA("kernel32.dll"); - - pGetComputerNameExA = (void *)GetProcAddress(hkernel32, "GetComputerNameExA"); - pGetComputerNameExW = (void *)GetProcAddress(hkernel32, "GetComputerNameExW"); -} - -static void test_GetSetEnvironmentVariableA(void) -{ - char buf[256]; - BOOL ret; - DWORD ret_size; - static const char name[] = "SomeWildName"; - static const char name_cased[] = "sOMEwILDnAME"; - static const char value[] = "SomeWildValue"; - - ret = SetEnvironmentVariableA(name, value); - ok(ret == TRUE, - "unexpected error in SetEnvironmentVariableA, GetLastError=%d\n", - GetLastError()); - - /* Try to retrieve the environment variable we just set */ - ret_size = GetEnvironmentVariableA(name, NULL, 0); - ok(ret_size == strlen(value) + 1, - "should return length with terminating 0 ret_size=%d\n", ret_size); - - lstrcpyA(buf, "foo"); - ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value)); - ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); - ok(ret_size == strlen(value) + 1, - "should return length with terminating 0 ret_size=%d\n", ret_size); - - lstrcpyA(buf, "foo"); - ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value) + 1); - ok(lstrcmpA(buf, value) == 0, "should touch the buffer\n"); - ok(ret_size == strlen(value), - "should return length without terminating 0 ret_size=%d\n", ret_size); - - lstrcpyA(buf, "foo"); - ret_size = GetEnvironmentVariableA(name_cased, buf, lstrlenA(value) + 1); - ok(lstrcmpA(buf, value) == 0, "should touch the buffer\n"); - ok(ret_size == strlen(value), - "should return length without terminating 0 ret_size=%d\n", ret_size); - - /* Remove that environment variable */ - ret = SetEnvironmentVariableA(name_cased, NULL); - ok(ret == TRUE, "should erase existing variable\n"); - - lstrcpyA(buf, "foo"); - ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value) + 1); - ok(lstrcmpA(buf, "foo") == 0, "should not touch the buffer\n"); - ok(ret_size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND, - "should not find variable but ret_size=%d GetLastError=%d\n", - ret_size, GetLastError()); - - /* Check behavior of SetEnvironmentVariableA(name, "") */ - ret = SetEnvironmentVariableA(name, value); - ok(ret == TRUE, - "unexpected error in SetEnvironmentVariableA, GetLastError=%d\n", - GetLastError()); - - lstrcpyA(buf, "foo"); - ret_size = GetEnvironmentVariableA(name_cased, buf, lstrlenA(value) + 1); - ok(lstrcmpA(buf, value) == 0, "should touch the buffer\n"); - ok(ret_size == strlen(value), - "should return length without terminating 0 ret_size=%d\n", ret_size); - - ret = SetEnvironmentVariableA(name_cased, ""); - ok(ret == TRUE, - "should not fail with empty value but GetLastError=%d\n", GetLastError()); - - lstrcpyA(buf, "foo"); - SetLastError(0); - ret_size = GetEnvironmentVariableA(name, buf, lstrlenA(value) + 1); - ok(ret_size == 0 && - ((GetLastError() == 0 && lstrcmpA(buf, "") == 0) || - (GetLastError() == ERROR_ENVVAR_NOT_FOUND)), - "%s should be set to \"\" (NT) or removed (Win9x) but ret_size=%d GetLastError=%d and buf=%s\n", - name, ret_size, GetLastError(), buf); - - /* Test the limits */ - ret_size = GetEnvironmentVariableA(NULL, NULL, 0); - ok(ret_size == 0 && (GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_ENVVAR_NOT_FOUND), - "should not find variable but ret_size=%d GetLastError=%d\n", - ret_size, GetLastError()); - - ret_size = GetEnvironmentVariableA(NULL, buf, lstrlenA(value) + 1); - ok(ret_size == 0 && (GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_ENVVAR_NOT_FOUND), - "should not find variable but ret_size=%d GetLastError=%d\n", - ret_size, GetLastError()); - - ret_size = GetEnvironmentVariableA("", buf, lstrlenA(value) + 1); - ok(ret_size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND, - "should not find variable but ret_size=%d GetLastError=%d\n", - ret_size, GetLastError()); -} - -static void test_GetSetEnvironmentVariableW(void) -{ - WCHAR buf[256]; - BOOL ret; - DWORD ret_size; - static const WCHAR name[] = {'S','o','m','e','W','i','l','d','N','a','m','e',0}; - static const WCHAR value[] = {'S','o','m','e','W','i','l','d','V','a','l','u','e',0}; - static const WCHAR name_cased[] = {'s','O','M','E','w','I','L','D','n','A','M','E',0}; - static const WCHAR empty_strW[] = { 0 }; - static const WCHAR fooW[] = {'f','o','o',0}; - - ret = SetEnvironmentVariableW(name, value); - if (ret == FALSE && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - /* Must be Win9x which doesn't support the Unicode functions */ - skip("SetEnvironmentVariableW is not implemented\n"); - return; - } - ok(ret == TRUE, - "unexpected error in SetEnvironmentVariableW, GetLastError=%d\n", - GetLastError()); - - /* Try to retrieve the environment variable we just set */ - ret_size = GetEnvironmentVariableW(name, NULL, 0); - ok(ret_size == lstrlenW(value) + 1, - "should return length with terminating 0 ret_size=%d\n", - ret_size); - - lstrcpyW(buf, fooW); - ret_size = GetEnvironmentVariableW(name, buf, lstrlenW(value)); - ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer\n"); - - ok(ret_size == lstrlenW(value) + 1, - "should return length with terminating 0 ret_size=%d\n", ret_size); - - lstrcpyW(buf, fooW); - ret_size = GetEnvironmentVariableW(name, buf, lstrlenW(value) + 1); - ok(lstrcmpW(buf, value) == 0, "should touch the buffer\n"); - ok(ret_size == lstrlenW(value), - "should return length without terminating 0 ret_size=%d\n", ret_size); - - lstrcpyW(buf, fooW); - ret_size = GetEnvironmentVariableW(name_cased, buf, lstrlenW(value) + 1); - ok(lstrcmpW(buf, value) == 0, "should touch the buffer\n"); - ok(ret_size == lstrlenW(value), - "should return length without terminating 0 ret_size=%d\n", ret_size); - - /* Remove that environment variable */ - ret = SetEnvironmentVariableW(name_cased, NULL); - ok(ret == TRUE, "should erase existing variable\n"); - - lstrcpyW(buf, fooW); - ret_size = GetEnvironmentVariableW(name, buf, lstrlenW(value) + 1); - ok(lstrcmpW(buf, fooW) == 0, "should not touch the buffer\n"); - ok(ret_size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND, - "should not find variable but ret_size=%d GetLastError=%d\n", - ret_size, GetLastError()); - - /* Check behavior of SetEnvironmentVariableW(name, "") */ - ret = SetEnvironmentVariableW(name, value); - ok(ret == TRUE, - "unexpected error in SetEnvironmentVariableW, GetLastError=%d\n", - GetLastError()); - - lstrcpyW(buf, fooW); - ret_size = GetEnvironmentVariableW(name, buf, lstrlenW(value) + 1); - ok(lstrcmpW(buf, value) == 0, "should touch the buffer\n"); - ok(ret_size == lstrlenW(value), - "should return length without terminating 0 ret_size=%d\n", ret_size); - - ret = SetEnvironmentVariableW(name_cased, empty_strW); - ok(ret == TRUE, "should not fail with empty value but GetLastError=%d\n", GetLastError()); - - lstrcpyW(buf, fooW); - ret_size = GetEnvironmentVariableW(name, buf, lstrlenW(value) + 1); - ok(ret_size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND, - "should not find variable but ret_size=%d GetLastError=%d\n", - ret_size, GetLastError()); - ok(lstrcmpW(buf, empty_strW) == 0, "should copy an empty string\n"); - - /* Test the limits */ - ret_size = GetEnvironmentVariableW(NULL, NULL, 0); - ok(ret_size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND, - "should not find variable but ret_size=%d GetLastError=%d\n", - ret_size, GetLastError()); - - if (0) /* Both tests crash on Vista */ - { - ret_size = GetEnvironmentVariableW(NULL, buf, lstrlenW(value) + 1); - ok(ret_size == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND, - "should not find variable but ret_size=%d GetLastError=%d\n", - ret_size, GetLastError()); - - ret = SetEnvironmentVariableW(NULL, NULL); - ok(ret == FALSE && (GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_ENVVAR_NOT_FOUND), - "should fail with NULL, NULL but ret=%d and GetLastError=%d\n", - ret, GetLastError()); - } -} - -static void test_ExpandEnvironmentStringsA(void) -{ - const char* value="Long long value"; - const char* not_an_env_var="%NotAnEnvVar%"; - char buf[256], buf1[256], buf2[0x8000]; - DWORD ret_size, ret_size1; - - SetEnvironmentVariableA("EnvVar", value); - - ret_size = ExpandEnvironmentStringsA(NULL, buf1, sizeof(buf1)); - ok(ret_size == 1 || ret_size == 0 /* Win9x */, - "ExpandEnvironmentStrings returned %d\n", ret_size); - - /* Try to get the required buffer size 'the natural way' */ - strcpy(buf, "%EnvVar%"); - ret_size = ExpandEnvironmentStringsA(buf, NULL, 0); - ok(ret_size == strlen(value)+1 || /* win98 */ - ret_size == strlen(value)+2 || /* win2k, XP, win2k3 */ - ret_size == 0 /* Win95 */, - "ExpandEnvironmentStrings returned %d instead of %d, %d or %d\n", - ret_size, lstrlenA(value)+1, lstrlenA(value)+2, 0); - - /* Again, side-stepping the Win95 bug */ - ret_size = ExpandEnvironmentStringsA(buf, buf1, 0); - /* v5.1.2600.2945 (XP SP2) returns len + 2 here! */ - ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2, - "ExpandEnvironmentStrings returned %d instead of %d\n", - ret_size, lstrlenA(value)+1); - - /* Try with a buffer that's too small */ - ret_size = ExpandEnvironmentStringsA(buf, buf1, 12); - /* v5.1.2600.2945 (XP SP2) returns len + 2 here! */ - ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2, - "ExpandEnvironmentStrings returned %d instead of %d\n", - ret_size, lstrlenA(value)+1); - - /* Try with a buffer of just the right size */ - /* v5.1.2600.2945 (XP SP2) needs and returns len + 2 here! */ - ret_size = ExpandEnvironmentStringsA(buf, buf1, ret_size); - ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2, - "ExpandEnvironmentStrings returned %d instead of %d\n", - ret_size, lstrlenA(value)+1); - ok(!strcmp(buf1, value), "ExpandEnvironmentStrings returned [%s]\n", buf1); - - /* Try with an unset environment variable */ - strcpy(buf, not_an_env_var); - ret_size = ExpandEnvironmentStringsA(buf, buf1, sizeof(buf1)); - ok(ret_size == strlen(not_an_env_var)+1, "ExpandEnvironmentStrings returned %d instead of %d\n", ret_size, lstrlenA(value)+1); - ok(!strcmp(buf1, not_an_env_var), "ExpandEnvironmentStrings returned [%s]\n", buf1); - - /* test a large destination size */ - strcpy(buf, "12345"); - ret_size = ExpandEnvironmentStringsA(buf, buf2, sizeof(buf2)); - ok(!strcmp(buf, buf2), "ExpandEnvironmentStrings failed %s vs %s. ret_size = %d\n", buf, buf2, ret_size); - - ret_size1 = GetWindowsDirectoryA(buf1,256); - ok ((ret_size1 >0) && (ret_size1<256), "GetWindowsDirectory Failed\n"); - ret_size = ExpandEnvironmentStringsA("%SystemRoot%",buf,sizeof(buf)); - if (ERROR_ENVVAR_NOT_FOUND != GetLastError()) - { - ok(!strcmp(buf, buf1), "ExpandEnvironmentStrings failed %s vs %s. ret_size = %d\n", buf, buf1, ret_size); - } - - /* Try with a variable that references another */ - SetEnvironmentVariableA("IndirectVar", "Foo%EnvVar%Bar"); - strcpy(buf, "Indirect-%IndirectVar%-Indirect"); - strcpy(buf2, "Indirect-Foo%EnvVar%Bar-Indirect"); - ret_size = ExpandEnvironmentStringsA(buf, buf1, sizeof(buf1)); - ok(ret_size == strlen(buf2)+1, "ExpandEnvironmentStrings returned %d instead of %d\n", ret_size, lstrlen(buf2)+1); - ok(!strcmp(buf1, buf2), "ExpandEnvironmentStrings returned [%s]\n", buf1); - SetEnvironmentVariableA("IndirectVar", NULL); - - SetEnvironmentVariableA("EnvVar", NULL); -} - -static void test_GetComputerName(void) -{ - DWORD size; - BOOL ret; - LPSTR name; - LPWSTR nameW; - DWORD error; - int name_len; - - size = 0; - ret = GetComputerNameA((LPSTR)0xdeadbeef, &size); - error = GetLastError(); - todo_wine - ok(!ret && error == ERROR_BUFFER_OVERFLOW, "GetComputerNameA should have failed with ERROR_BUFFER_OVERFLOW instead of %d\n", error); - - /* Only Vista returns the computer name length as documented in the MSDN */ - if (size != 0) - { - size++; /* nul terminating character */ - name = HeapAlloc(GetProcessHeap(), 0, size * sizeof(name[0])); - ok(name != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = GetComputerNameA(name, &size); - ok(ret, "GetComputerNameA failed with error %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, name); - } - - size = MAX_COMPUTERNAME_LENGTH + 1; - name = HeapAlloc(GetProcessHeap(), 0, size * sizeof(name[0])); - ok(name != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = GetComputerNameA(name, &size); - ok(ret, "GetComputerNameA failed with error %d\n", GetLastError()); - trace("computer name is \"%s\"\n", name); - name_len = strlen(name); - ok(size == name_len, "size should be same as length, name_len=%d, size=%d\n", name_len, size); - HeapFree(GetProcessHeap(), 0, name); - - size = 0; - SetLastError(0xdeadbeef); - ret = GetComputerNameW((LPWSTR)0xdeadbeef, &size); - error = GetLastError(); - if (error == ERROR_CALL_NOT_IMPLEMENTED) - skip("GetComputerNameW is not implemented\n"); - else - { - todo_wine - ok(!ret && error == ERROR_BUFFER_OVERFLOW, "GetComputerNameW should have failed with ERROR_BUFFER_OVERFLOW instead of %d\n", error); - size++; /* nul terminating character */ - nameW = HeapAlloc(GetProcessHeap(), 0, size * sizeof(nameW[0])); - ok(nameW != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = GetComputerNameW(nameW, &size); - ok(ret, "GetComputerNameW failed with error %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, nameW); - } -} - -static void test_GetComputerNameExA(void) -{ - DWORD size; - BOOL ret; - LPSTR name; - DWORD error; - - static const int MAX_COMP_NAME = 32767; - - if (!pGetComputerNameExA) - { - skip("GetComputerNameExA function not implemented\n"); - return; - } - - size = 0; - ret = pGetComputerNameExA(ComputerNameDnsDomain, (LPSTR)0xdeadbeef, &size); - error = GetLastError(); - ok(ret == 0, "Expected 0, got %d\n", ret); - ok(error == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", error); - - /* size is not set in win2k */ - size = MAX_COMP_NAME; - name = HeapAlloc(GetProcessHeap(), 0, size * sizeof(name[0])); - ok(name != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = pGetComputerNameExA(ComputerNameDnsDomain, name, &size); - ok(ret, "GetComputerNameExA(ComputerNameDnsDomain) failed with error %d\n", GetLastError()); - trace("domain name is \"%s\"\n", name); - HeapFree(GetProcessHeap(), 0, name); - - size = 0; - ret = pGetComputerNameExA(ComputerNameDnsFullyQualified, (LPSTR)0xdeadbeef, &size); - error = GetLastError(); - ok(ret == 0, "Expected 0, got %d\n", ret); - ok(error == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", error); - - /* size is not set in win2k */ - size = MAX_COMP_NAME; - name = HeapAlloc(GetProcessHeap(), 0, size * sizeof(name[0])); - ok(name != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = pGetComputerNameExA(ComputerNameDnsFullyQualified, name, &size); - ok(ret, "GetComputerNameExA(ComputerNameDnsFullyQualified) failed with error %d\n", GetLastError()); - trace("fully qualified hostname is \"%s\"\n", name); - HeapFree(GetProcessHeap(), 0, name); - - size = 0; - ret = pGetComputerNameExA(ComputerNameDnsHostname, (LPSTR)0xdeadbeef, &size); - error = GetLastError(); - ok(ret == 0, "Expected 0, got %d\n", ret); - ok(error == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", error); - - /* size is not set in win2k */ - size = MAX_COMP_NAME; - name = HeapAlloc(GetProcessHeap(), 0, size * sizeof(name[0])); - ok(name != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = pGetComputerNameExA(ComputerNameDnsHostname, name, &size); - ok(ret, "GetComputerNameExA(ComputerNameDnsHostname) failed with error %d\n", GetLastError()); - trace("hostname is \"%s\"\n", name); - HeapFree(GetProcessHeap(), 0, name); - - size = 0; - ret = pGetComputerNameExA(ComputerNameNetBIOS, (LPSTR)0xdeadbeef, &size); - error = GetLastError(); - ok(ret == 0, "Expected 0, got %d\n", ret); - ok(error == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", error); - - /* size is not set in win2k */ - size = MAX_COMP_NAME; - name = HeapAlloc(GetProcessHeap(), 0, size * sizeof(name[0])); - ok(name != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = pGetComputerNameExA(ComputerNameNetBIOS, name, &size); - ok(ret, "GetComputerNameExA(ComputerNameNetBIOS) failed with error %d\n", GetLastError()); - trace("NetBIOS name is \"%s\"\n", name); - HeapFree(GetProcessHeap(), 0, name); -} - -static void test_GetComputerNameExW(void) -{ - DWORD size; - BOOL ret; - LPWSTR nameW; - DWORD error; - - if (!pGetComputerNameExW) - { - skip("GetComputerNameExW function not implemented\n"); - return; - } - - size = 0; - ret = pGetComputerNameExW(ComputerNameDnsDomain, (LPWSTR)0xdeadbeef, &size); - error = GetLastError(); - ok(!ret && error == ERROR_MORE_DATA, "GetComputerNameExW should have failed with ERROR_MORE_DATA instead of %d\n", error); - nameW = HeapAlloc(GetProcessHeap(), 0, size * sizeof(nameW[0])); - ok(nameW != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = pGetComputerNameExW(ComputerNameDnsDomain, nameW, &size); - ok(ret, "GetComputerNameExW(ComputerNameDnsDomain) failed with error %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, nameW); - - size = 0; - ret = pGetComputerNameExW(ComputerNameDnsFullyQualified, (LPWSTR)0xdeadbeef, &size); - error = GetLastError(); - ok(!ret && error == ERROR_MORE_DATA, "GetComputerNameExW should have failed with ERROR_MORE_DATA instead of %d\n", error); - nameW = HeapAlloc(GetProcessHeap(), 0, size * sizeof(nameW[0])); - ok(nameW != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = pGetComputerNameExW(ComputerNameDnsFullyQualified, nameW, &size); - ok(ret, "GetComputerNameExW(ComputerNameDnsFullyQualified) failed with error %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, nameW); - - size = 0; - ret = pGetComputerNameExW(ComputerNameDnsHostname, (LPWSTR)0xdeadbeef, &size); - error = GetLastError(); - ok(!ret && error == ERROR_MORE_DATA, "GetComputerNameExW should have failed with ERROR_MORE_DATA instead of %d\n", error); - nameW = HeapAlloc(GetProcessHeap(), 0, size * sizeof(nameW[0])); - ok(nameW != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = pGetComputerNameExW(ComputerNameDnsHostname, nameW, &size); - ok(ret, "GetComputerNameExW(ComputerNameDnsHostname) failed with error %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, nameW); - - size = 0; - ret = pGetComputerNameExW(ComputerNameNetBIOS, (LPWSTR)0xdeadbeef, &size); - error = GetLastError(); - ok(!ret && error == ERROR_MORE_DATA, "GetComputerNameExW should have failed with ERROR_MORE_DATA instead of %d\n", error); - nameW = HeapAlloc(GetProcessHeap(), 0, size * sizeof(nameW[0])); - ok(nameW != NULL, "HeapAlloc failed with error %d\n", GetLastError()); - ret = pGetComputerNameExW(ComputerNameNetBIOS, nameW, &size); - ok(ret, "GetComputerNameExW(ComputerNameNetBIOS) failed with error %d\n", GetLastError()); - HeapFree(GetProcessHeap(), 0, nameW); -} - -START_TEST(environ) -{ - init_functionpointers(); - - test_GetSetEnvironmentVariableA(); - test_GetSetEnvironmentVariableW(); - test_ExpandEnvironmentStringsA(); - test_GetComputerName(); - test_GetComputerNameExA(); - test_GetComputerNameExW(); -} diff --git a/rostests/winetests/kernel32/file.c b/rostests/winetests/kernel32/file.c deleted file mode 100755 index f73f1046e49..00000000000 --- a/rostests/winetests/kernel32/file.c +++ /dev/null @@ -1,2212 +0,0 @@ -/* - * Unit tests for file functions in Wine - * - * Copyright (c) 2002, 2004 Jakob Eriksson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 - -/* ReplaceFile requires Windows 2000 or newer */ -#define _WIN32_WINNT 0x0500 - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" - -static HANDLE (WINAPI *pFindFirstFileExA)(LPCSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD); -static BOOL (WINAPI *pReplaceFileA)(LPCSTR, LPCSTR, LPCSTR, DWORD, LPVOID, LPVOID); -static BOOL (WINAPI *pReplaceFileW)(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPVOID, LPVOID); - -/* keep filename and filenameW the same */ -static const char filename[] = "testfile.xxx"; -static const WCHAR filenameW[] = { 't','e','s','t','f','i','l','e','.','x','x','x',0 }; -static const char sillytext[] = -"en larvig liten text dx \033 gx hej 84 hej 4484 ! \001\033 bla bl\na.. bla bla." -"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3" -"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3" -"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3" -"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3" -"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3" -"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3" -"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3" -"1234 43 4kljf lf &%%%&&&&&& 34 4 34 3############# 33 3 3 3 # 3## 3" -"sdlkfjasdlkfj a dslkj adsklf \n \nasdklf askldfa sdlkf \nsadklf asdklf asdf "; - -static void InitFunctionPointers(void) -{ - HMODULE hkernel32 = GetModuleHandleA("kernel32"); - - pFindFirstFileExA=(void*)GetProcAddress(hkernel32, "FindFirstFileExA"); - pReplaceFileA=(void*)GetProcAddress(hkernel32, "ReplaceFileA"); - pReplaceFileW=(void*)GetProcAddress(hkernel32, "ReplaceFileW"); -} - -static void test__hread( void ) -{ - HFILE filehandle; - char buffer[10000]; - long bytes_read; - long bytes_wanted; - long i; - BOOL ret; - - SetFileAttributesA(filename,FILE_ATTRIBUTE_NORMAL); /* be sure to remove stale files */ - DeleteFileA( filename ); - filehandle = _lcreat( filename, 0 ); - if (filehandle == HFILE_ERROR) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_READ ); - - ok( HFILE_ERROR != filehandle, "couldn't open file \"%s\" again (err=%d)\n", filename, GetLastError( ) ); - - bytes_read = _hread( filehandle, buffer, 2 * strlen( sillytext ) ); - - ok( lstrlenA( sillytext ) == bytes_read, "file read size error\n" ); - - for (bytes_wanted = 0; bytes_wanted < lstrlenA( sillytext ); bytes_wanted++) - { - ok( 0 == _llseek( filehandle, 0, FILE_BEGIN ), "_llseek complains\n" ); - ok( _hread( filehandle, buffer, bytes_wanted ) == bytes_wanted, "erratic _hread return value\n" ); - for (i = 0; i < bytes_wanted; i++) - { - ok( buffer[i] == sillytext[i], "that's not what's written\n" ); - } - } - - ok( HFILE_ERROR != _lclose( filehandle ), "_lclose complains\n" ); - - ret = DeleteFileA( filename ); - ok( ret != 0, "DeleteFile failed (%d)\n", GetLastError( ) ); -} - - -static void test__hwrite( void ) -{ - HFILE filehandle; - char buffer[10000]; - long bytes_read; - long bytes_written; - long blocks; - long i; - char *contents; - HLOCAL memory_object; - char checksum[1]; - BOOL ret; - - filehandle = _lcreat( filename, 0 ); - if (filehandle == HFILE_ERROR) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - - ok( HFILE_ERROR != _hwrite( filehandle, "", 0 ), "_hwrite complains\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_READ ); - - bytes_read = _hread( filehandle, buffer, 1); - - ok( 0 == bytes_read, "file read size error\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_READWRITE ); - - bytes_written = 0; - checksum[0] = '\0'; - srand( (unsigned)time( NULL ) ); - for (blocks = 0; blocks < 100; blocks++) - { - for (i = 0; i < (long)sizeof( buffer ); i++) - { - buffer[i] = rand( ); - checksum[0] = checksum[0] + buffer[i]; - } - ok( HFILE_ERROR != _hwrite( filehandle, buffer, sizeof( buffer ) ), "_hwrite complains\n" ); - bytes_written = bytes_written + sizeof( buffer ); - } - - ok( HFILE_ERROR != _hwrite( filehandle, checksum, 1 ), "_hwrite complains\n" ); - bytes_written++; - - ok( HFILE_ERROR != _lclose( filehandle ), "_lclose complains\n" ); - - memory_object = LocalAlloc( LPTR, bytes_written ); - - ok( 0 != memory_object, "LocalAlloc fails. (Could be out of memory.)\n" ); - - contents = LocalLock( memory_object ); - - filehandle = _lopen( filename, OF_READ ); - - contents = LocalLock( memory_object ); - - ok( NULL != contents, "LocalLock whines\n" ); - - ok( bytes_written == _hread( filehandle, contents, bytes_written), "read length differ from write length\n" ); - - checksum[0] = '\0'; - i = 0; - do - { - checksum[0] = checksum[0] + contents[i]; - i++; - } - while (i < bytes_written - 1); - - ok( checksum[0] == contents[i], "stored checksum differ from computed checksum\n" ); - - ok( HFILE_ERROR != _lclose( filehandle ), "_lclose complains\n" ); - - ret = DeleteFileA( filename ); - ok( ret != 0, "DeleteFile failed (%d)\n", GetLastError( ) ); -} - - -static void test__lclose( void ) -{ - HFILE filehandle; - BOOL ret; - - filehandle = _lcreat( filename, 0 ); - if (filehandle == HFILE_ERROR) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - ret = DeleteFileA( filename ); - ok( ret != 0, "DeleteFile failed (%d)\n", GetLastError( ) ); -} - - -static void test__lcreat( void ) -{ - HFILE filehandle; - char buffer[10000]; - WIN32_FIND_DATAA search_results; - char slashname[] = "testfi/"; - int err; - HANDLE find; - BOOL ret; - - filehandle = _lcreat( filename, 0 ); - if (filehandle == HFILE_ERROR) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" ); - - ok( 0 == _llseek( filehandle, 0, FILE_BEGIN ), "_llseek complains\n" ); - - ok( _hread( filehandle, buffer, strlen( sillytext ) ) == lstrlenA( sillytext ), "erratic _hread return value\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - ok( INVALID_HANDLE_VALUE != FindFirstFileA( filename, &search_results ), "should be able to find file\n" ); - - ret = DeleteFileA(filename); - ok( ret != 0, "DeleteFile failed (%d)\n", GetLastError()); - - filehandle = _lcreat( filename, 1 ); /* readonly */ - ok( HFILE_ERROR != filehandle, "couldn't create file \"%s\" (err=%d)\n", filename, GetLastError( ) ); - - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite shouldn't be able to write never the less\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - ok( INVALID_HANDLE_VALUE != FindFirstFileA( filename, &search_results ), "should be able to find file\n" ); - - ok( 0 == DeleteFileA( filename ), "shouldn't be able to delete a readonly file\n" ); - - ok( SetFileAttributesA(filename, FILE_ATTRIBUTE_NORMAL ) != 0, "couldn't change attributes on file\n" ); - - ok( DeleteFileA( filename ) != 0, "now it should be possible to delete the file!\n" ); - - filehandle = _lcreat( filename, 2 ); - ok( HFILE_ERROR != filehandle, "couldn't create file \"%s\" (err=%d)\n", filename, GetLastError( ) ); - - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" ); - - ok( 0 == _llseek( filehandle, 0, FILE_BEGIN ), "_llseek complains\n" ); - - ok( _hread( filehandle, buffer, strlen( sillytext ) ) == lstrlenA( sillytext ), "erratic _hread return value\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - ok( INVALID_HANDLE_VALUE != FindFirstFileA( filename, &search_results ), "should STILL be able to find file\n" ); - - ret = DeleteFileA( filename ); - ok( ret, "DeleteFile failed (%d)\n", GetLastError( ) ); - - filehandle = _lcreat( filename, 4 ); /* SYSTEM file */ - ok( HFILE_ERROR != filehandle, "couldn't create file \"%s\" (err=%d)\n", filename, GetLastError( ) ); - - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" ); - - ok( 0 == _llseek( filehandle, 0, FILE_BEGIN ), "_llseek complains\n" ); - - ok( _hread( filehandle, buffer, strlen( sillytext ) ) == lstrlenA( sillytext ), "erratic _hread return value\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - ok( INVALID_HANDLE_VALUE != FindFirstFileA( filename, &search_results ), "should STILL be able to find file\n" ); - - ret = DeleteFileA( filename ); - ok( ret, "DeleteFile failed (%d)\n", GetLastError( ) ); - - filehandle=_lcreat (slashname, 0); /* illegal name */ - if (HFILE_ERROR==filehandle) { - err=GetLastError (); - ok (err==ERROR_INVALID_NAME || err==ERROR_PATH_NOT_FOUND, - "creating file \"%s\" failed with error %d\n", slashname, err); - } else { /* only NT succeeds */ - _lclose(filehandle); - find=FindFirstFileA (slashname, &search_results); - if (INVALID_HANDLE_VALUE!=find) - { - ret = FindClose (find); - ok (0 != ret, "FindClose complains (%d)\n", GetLastError ()); - slashname[strlen(slashname)-1]=0; - ok (!strcmp (slashname, search_results.cFileName), - "found unexpected name \"%s\"\n", search_results.cFileName); - ok (FILE_ATTRIBUTE_ARCHIVE==search_results.dwFileAttributes, - "attributes of file \"%s\" are 0x%04x\n", search_results.cFileName, - search_results.dwFileAttributes); - } - ret = DeleteFileA( slashname ); - ok( ret, "DeleteFile failed (%d)\n", GetLastError( ) ); - } - - filehandle=_lcreat (filename, 8); /* illegal attribute */ - if (HFILE_ERROR==filehandle) - ok (0, "couldn't create volume label \"%s\"\n", filename); - else { - _lclose(filehandle); - find=FindFirstFileA (filename, &search_results); - if (INVALID_HANDLE_VALUE==find) - ok (0, "file \"%s\" not found\n", filename); - else { - ret = FindClose(find); - ok ( 0 != ret, "FindClose complains (%d)\n", GetLastError ()); - ok (!strcmp (filename, search_results.cFileName), - "found unexpected name \"%s\"\n", search_results.cFileName); - search_results.dwFileAttributes &= ~FILE_ATTRIBUTE_NOT_CONTENT_INDEXED; - ok (FILE_ATTRIBUTE_ARCHIVE==search_results.dwFileAttributes, - "attributes of file \"%s\" are 0x%04x\n", search_results.cFileName, - search_results.dwFileAttributes); - } - ret = DeleteFileA( filename ); - ok( ret, "DeleteFile failed (%d)\n", GetLastError( ) ); - } -} - - -static void test__llseek( void ) -{ - INT i; - HFILE filehandle; - char buffer[1]; - long bytes_read; - BOOL ret; - - filehandle = _lcreat( filename, 0 ); - if (filehandle == HFILE_ERROR) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - - for (i = 0; i < 400; i++) - { - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" ); - } - ok( HFILE_ERROR != _llseek( filehandle, 400 * strlen( sillytext ), FILE_CURRENT ), "should be able to seek\n" ); - ok( HFILE_ERROR != _llseek( filehandle, 27 + 35 * strlen( sillytext ), FILE_BEGIN ), "should be able to seek\n" ); - - bytes_read = _hread( filehandle, buffer, 1); - ok( 1 == bytes_read, "file read size error\n" ); - ok( buffer[0] == sillytext[27], "_llseek error, it got lost seeking\n" ); - ok( HFILE_ERROR != _llseek( filehandle, -400 * strlen( sillytext ), FILE_END ), "should be able to seek\n" ); - - bytes_read = _hread( filehandle, buffer, 1); - ok( 1 == bytes_read, "file read size error\n" ); - ok( buffer[0] == sillytext[0], "_llseek error, it got lost seeking\n" ); - ok( HFILE_ERROR != _llseek( filehandle, 1000000, FILE_END ), "should be able to seek past file; poor, poor Windows programmers\n" ); - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - ret = DeleteFileA( filename ); - ok( ret, "DeleteFile failed (%d)\n", GetLastError( ) ); -} - - -static void test__llopen( void ) -{ - HFILE filehandle; - UINT bytes_read; - char buffer[10000]; - BOOL ret; - - filehandle = _lcreat( filename, 0 ); - if (filehandle == HFILE_ERROR) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" ); - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_READ ); - ok( HFILE_ERROR == _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite shouldn't be able to write!\n" ); - bytes_read = _hread( filehandle, buffer, strlen( sillytext ) ); - ok( strlen( sillytext ) == bytes_read, "file read size error\n" ); - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_READWRITE ); - bytes_read = _hread( filehandle, buffer, 2 * strlen( sillytext ) ); - ok( strlen( sillytext ) == bytes_read, "file read size error\n" ); - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite should write just fine\n" ); - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_WRITE ); - ok( HFILE_ERROR == _hread( filehandle, buffer, 1 ), "you should only be able to write this file\n" ); - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite should write just fine\n" ); - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - ret = DeleteFileA( filename ); - ok( ret, "DeleteFile failed (%d)\n", GetLastError( ) ); - /* TODO - add tests for the SHARE modes - use two processes to pull this one off */ -} - - -static void test__lread( void ) -{ - HFILE filehandle; - char buffer[10000]; - long bytes_read; - UINT bytes_wanted; - UINT i; - BOOL ret; - - filehandle = _lcreat( filename, 0 ); - if (filehandle == HFILE_ERROR) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - - ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_READ ); - - ok( HFILE_ERROR != filehandle, "couldn't open file \"%s\" again (err=%d)\n", filename, GetLastError()); - - bytes_read = _lread( filehandle, buffer, 2 * strlen( sillytext ) ); - - ok( lstrlenA( sillytext ) == bytes_read, "file read size error\n" ); - - for (bytes_wanted = 0; bytes_wanted < strlen( sillytext ); bytes_wanted++) - { - ok( 0 == _llseek( filehandle, 0, FILE_BEGIN ), "_llseek complains\n" ); - ok( _lread( filehandle, buffer, bytes_wanted ) == bytes_wanted, "erratic _hread return value\n" ); - for (i = 0; i < bytes_wanted; i++) - { - ok( buffer[i] == sillytext[i], "that's not what's written\n" ); - } - } - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - ret = DeleteFileA( filename ); - ok( ret, "DeleteFile failed (%d)\n", GetLastError( ) ); -} - - -static void test__lwrite( void ) -{ - HFILE filehandle; - char buffer[10000]; - long bytes_read; - long bytes_written; - long blocks; - long i; - char *contents; - HLOCAL memory_object; - char checksum[1]; - BOOL ret; - - filehandle = _lcreat( filename, 0 ); - if (filehandle == HFILE_ERROR) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - - ok( HFILE_ERROR != _lwrite( filehandle, "", 0 ), "_hwrite complains\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_READ ); - - bytes_read = _hread( filehandle, buffer, 1); - - ok( 0 == bytes_read, "file read size error\n" ); - - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" ); - - filehandle = _lopen( filename, OF_READWRITE ); - - bytes_written = 0; - checksum[0] = '\0'; - srand( (unsigned)time( NULL ) ); - for (blocks = 0; blocks < 100; blocks++) - { - for (i = 0; i < (long)sizeof( buffer ); i++) - { - buffer[i] = rand( ); - checksum[0] = checksum[0] + buffer[i]; - } - ok( HFILE_ERROR != _lwrite( filehandle, buffer, sizeof( buffer ) ), "_hwrite complains\n" ); - bytes_written = bytes_written + sizeof( buffer ); - } - - ok( HFILE_ERROR != _lwrite( filehandle, checksum, 1 ), "_hwrite complains\n" ); - bytes_written++; - - ok( HFILE_ERROR != _lclose( filehandle ), "_lclose complains\n" ); - - memory_object = LocalAlloc( LPTR, bytes_written ); - - ok( 0 != memory_object, "LocalAlloc fails, could be out of memory\n" ); - - contents = LocalLock( memory_object ); - - filehandle = _lopen( filename, OF_READ ); - - contents = LocalLock( memory_object ); - - ok( NULL != contents, "LocalLock whines\n" ); - - ok( bytes_written == _hread( filehandle, contents, bytes_written), "read length differ from write length\n" ); - - checksum[0] = '\0'; - i = 0; - do - { - checksum[0] += contents[i]; - i++; - } - while (i < bytes_written - 1); - - ok( checksum[0] == contents[i], "stored checksum differ from computed checksum\n" ); - - ok( HFILE_ERROR != _lclose( filehandle ), "_lclose complains\n" ); - - ret = DeleteFileA( filename ); - ok( ret, "DeleteFile failed (%d)\n", GetLastError( ) ); -} - -static void test_CopyFileA(void) -{ - char temp_path[MAX_PATH]; - char source[MAX_PATH], dest[MAX_PATH]; - static const char prefix[] = "pfx"; - HANDLE hfile; - FILETIME ft1, ft2; - char buf[10]; - DWORD ret; - BOOL retok; - - ret = GetTempPathA(MAX_PATH, temp_path); - ok(ret != 0, "GetTempPathA error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameA(temp_path, prefix, 0, source); - ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError()); - - /* make the source have not zero size */ - hfile = CreateFileA(source, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0 ); - ok(hfile != INVALID_HANDLE_VALUE, "failed to open source file\n"); - retok = WriteFile(hfile, prefix, sizeof(prefix), &ret, NULL ); - ok( retok && ret == sizeof(prefix), - "WriteFile error %d\n", GetLastError()); - ok(GetFileSize(hfile, NULL) == sizeof(prefix), "source file has wrong size\n"); - /* get the file time and change it to prove the difference */ - ret = GetFileTime(hfile, NULL, NULL, &ft1); - ok( ret, "GetFileTime error %d\n", GetLastError()); - ft1.dwLowDateTime -= 600000000; /* 60 second */ - ret = SetFileTime(hfile, NULL, NULL, &ft1); - ok( ret, "SetFileTime error %d\n", GetLastError()); - GetFileTime(hfile, NULL, NULL, &ft1); /* get the actual time back */ - CloseHandle(hfile); - - ret = GetTempFileNameA(temp_path, prefix, 0, dest); - ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = CopyFileA(source, dest, TRUE); - ok(!ret && GetLastError() == ERROR_FILE_EXISTS, - "CopyFileA: unexpected error %d\n", GetLastError()); - - ret = CopyFileA(source, dest, FALSE); - ok(ret, "CopyFileA: error %d\n", GetLastError()); - - /* make sure that destination has correct size */ - hfile = CreateFileA(dest, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - ok(hfile != INVALID_HANDLE_VALUE, "failed to open destination file\n"); - ret = GetFileSize(hfile, NULL); - ok(ret == sizeof(prefix), "destination file has wrong size %d\n", ret); - - /* make sure that destination has the same filetime */ - ret = GetFileTime(hfile, NULL, NULL, &ft2); - ok( ret, "GetFileTime error %d\n", GetLastError()); - ok(CompareFileTime(&ft1, &ft2) == 0, "destination file has wrong filetime\n"); - - SetLastError(0xdeadbeef); - ret = CopyFileA(source, dest, FALSE); - ok(!ret && GetLastError() == ERROR_SHARING_VIOLATION, - "CopyFileA: ret = %d, unexpected error %d\n", ret, GetLastError()); - - /* make sure that destination still has correct size */ - ret = GetFileSize(hfile, NULL); - ok(ret == sizeof(prefix), "destination file has wrong size %d\n", ret); - retok = ReadFile(hfile, buf, sizeof(buf), &ret, NULL); - ok( retok && ret == sizeof(prefix), - "ReadFile: error %d\n", GetLastError()); - ok(!memcmp(prefix, buf, sizeof(prefix)), "buffer contents mismatch\n"); - CloseHandle(hfile); - - ret = DeleteFileA(source); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); - ret = DeleteFileA(dest); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); -} - -static void test_CopyFileW(void) -{ - WCHAR temp_path[MAX_PATH]; - WCHAR source[MAX_PATH], dest[MAX_PATH]; - static const WCHAR prefix[] = {'p','f','x',0}; - DWORD ret; - - ret = GetTempPathW(MAX_PATH, temp_path); - if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(ret != 0, "GetTempPathW error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameW(temp_path, prefix, 0, source); - ok(ret != 0, "GetTempFileNameW error %d\n", GetLastError()); - - ret = GetTempFileNameW(temp_path, prefix, 0, dest); - ok(ret != 0, "GetTempFileNameW error %d\n", GetLastError()); - - ret = CopyFileW(source, dest, TRUE); - ok(!ret && GetLastError() == ERROR_FILE_EXISTS, - "CopyFileW: unexpected error %d\n", GetLastError()); - - ret = CopyFileW(source, dest, FALSE); - ok(ret, "CopyFileW: error %d\n", GetLastError()); - - ret = DeleteFileW(source); - ok(ret, "DeleteFileW: error %d\n", GetLastError()); - ret = DeleteFileW(dest); - ok(ret, "DeleteFileW: error %d\n", GetLastError()); -} - -static void test_CreateFileA(void) -{ - HANDLE hFile; - char temp_path[MAX_PATH]; - char filename[MAX_PATH]; - static const char prefix[] = "pfx"; - DWORD ret; - - ret = GetTempPathA(MAX_PATH, temp_path); - ok(ret != 0, "GetTempPathA error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameA(temp_path, prefix, 0, filename); - ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hFile = CreateFileA(filename, GENERIC_READ, 0, NULL, - CREATE_NEW, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_EXISTS, - "CREATE_NEW should fail if file exists and last error value should be ERROR_FILE_EXISTS\n"); - - SetLastError(0xdeadbeef); - hFile = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, - CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile != INVALID_HANDLE_VALUE && GetLastError() == ERROR_ALREADY_EXISTS, - "hFile %p, last error %u\n", hFile, GetLastError()); - - CloseHandle(hFile); - - SetLastError(0xdeadbeef); - hFile = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile != INVALID_HANDLE_VALUE && GetLastError() == ERROR_ALREADY_EXISTS, - "hFile %p, last error %u\n", hFile, GetLastError()); - - CloseHandle(hFile); - - ret = DeleteFileA(filename); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hFile = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile != INVALID_HANDLE_VALUE && GetLastError() == 0, - "hFile %p, last error %u\n", hFile, GetLastError()); - - CloseHandle(hFile); - - ret = DeleteFileA(filename); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); -} - -static void test_CreateFileW(void) -{ - HANDLE hFile; - WCHAR temp_path[MAX_PATH]; - WCHAR filename[MAX_PATH]; - static const WCHAR emptyW[]={'\0'}; - static const WCHAR prefix[] = {'p','f','x',0}; - static const WCHAR bogus[] = { '\\', '\\', '.', '\\', 'B', 'O', 'G', 'U', 'S', 0 }; - DWORD ret; - - ret = GetTempPathW(MAX_PATH, temp_path); - if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(ret != 0, "GetTempPathW error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameW(temp_path, prefix, 0, filename); - ok(ret != 0, "GetTempFileNameW error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hFile = CreateFileW(filename, GENERIC_READ, 0, NULL, - CREATE_NEW, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_EXISTS, - "CREATE_NEW should fail if file exists and last error value should be ERROR_FILE_EXISTS\n"); - - SetLastError(0xdeadbeef); - hFile = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL, - CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile != INVALID_HANDLE_VALUE && GetLastError() == ERROR_ALREADY_EXISTS, - "hFile %p, last error %u\n", hFile, GetLastError()); - - CloseHandle(hFile); - - SetLastError(0xdeadbeef); - hFile = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile != INVALID_HANDLE_VALUE && GetLastError() == ERROR_ALREADY_EXISTS, - "hFile %p, last error %u\n", hFile, GetLastError()); - - CloseHandle(hFile); - - ret = DeleteFileW(filename); - ok(ret, "DeleteFileW: error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hFile = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile != INVALID_HANDLE_VALUE && GetLastError() == 0, - "hFile %p, last error %u\n", hFile, GetLastError()); - - CloseHandle(hFile); - - ret = DeleteFileW(filename); - ok(ret, "DeleteFileW: error %d\n", GetLastError()); - - if (0) - { - /* this crashes on NT4.0 */ - hFile = CreateFileW(NULL, GENERIC_READ, 0, NULL, - CREATE_NEW, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_PATH_NOT_FOUND, - "CreateFileW(NULL) returned ret=%p error=%u\n",hFile,GetLastError()); - } - - hFile = CreateFileW(emptyW, GENERIC_READ, 0, NULL, - CREATE_NEW, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_PATH_NOT_FOUND, - "CreateFileW(\"\") returned ret=%p error=%d\n",hFile,GetLastError()); - - /* test the result of opening a nonexistent driver name */ - hFile = CreateFileW(bogus, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - ok(hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_NOT_FOUND, - "CreateFileW on invalid VxD name returned ret=%p error=%d\n",hFile,GetLastError()); -} - -static void test_GetTempFileNameA(void) -{ - UINT result; - char out[MAX_PATH]; - char expected[MAX_PATH + 10]; - char windowsdir[MAX_PATH + 10]; - char windowsdrive[3]; - - result = GetWindowsDirectory(windowsdir, sizeof(windowsdir)); - ok(result < sizeof(windowsdir), "windowsdir is abnormally long!\n"); - ok(result != 0, "GetWindowsDirectory: error %d\n", GetLastError()); - - /* If the Windows directory is the root directory, it ends in backslash, not else. */ - if (strlen(windowsdir) != 3) /* As in "C:\" or "F:\" */ - { - strcat(windowsdir, "\\"); - } - - windowsdrive[0] = windowsdir[0]; - windowsdrive[1] = windowsdir[1]; - windowsdrive[2] = '\0'; - - result = GetTempFileNameA(windowsdrive, "abc", 1, out); - ok(result != 0, "GetTempFileNameA: error %d\n", GetLastError()); - ok(((out[0] == windowsdrive[0]) && (out[1] == ':')) && (out[2] == '\\'), - "GetTempFileNameA: first three characters should be %c:\\, string was actually %s\n", - windowsdrive[0], out); - - result = GetTempFileNameA(windowsdir, "abc", 2, out); - ok(result != 0, "GetTempFileNameA: error %d\n", GetLastError()); - expected[0] = '\0'; - strcat(expected, windowsdir); - strcat(expected, "abc2.tmp"); - ok(lstrcmpiA(out, expected) == 0, "GetTempFileNameA: Unexpected output \"%s\" vs \"%s\"\n", - out, expected); -} - -static void test_DeleteFileA( void ) -{ - BOOL ret; - - ret = DeleteFileA(NULL); - ok(!ret && (GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_PATH_NOT_FOUND), - "DeleteFileA(NULL) returned ret=%d error=%d\n",ret,GetLastError()); - - ret = DeleteFileA(""); - ok(!ret && (GetLastError() == ERROR_PATH_NOT_FOUND || - GetLastError() == ERROR_BAD_PATHNAME), - "DeleteFileA(\"\") returned ret=%d error=%d\n",ret,GetLastError()); - - ret = DeleteFileA("nul"); - ok(!ret && (GetLastError() == ERROR_FILE_NOT_FOUND || - GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_ACCESS_DENIED || - GetLastError() == ERROR_INVALID_FUNCTION), - "DeleteFileA(\"nul\") returned ret=%d error=%d\n",ret,GetLastError()); -} - -static void test_DeleteFileW( void ) -{ - BOOL ret; - static const WCHAR emptyW[]={'\0'}; - - ret = DeleteFileW(NULL); - if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND, - "DeleteFileW(NULL) returned ret=%d error=%d\n",ret,GetLastError()); - - ret = DeleteFileW(emptyW); - ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND, - "DeleteFileW(\"\") returned ret=%d error=%d\n",ret,GetLastError()); -} - -#define IsDotDir(x) ((x[0] == '.') && ((x[1] == 0) || ((x[1] == '.') && (x[2] == 0)))) - -static void test_MoveFileA(void) -{ - char tempdir[MAX_PATH]; - char source[MAX_PATH], dest[MAX_PATH]; - static const char prefix[] = "pfx"; - DWORD ret; - - ret = GetTempPathA(MAX_PATH, tempdir); - ok(ret != 0, "GetTempPathA error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameA(tempdir, prefix, 0, source); - ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError()); - - ret = GetTempFileNameA(tempdir, prefix, 0, dest); - ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError()); - - ret = MoveFileA(source, dest); - ok(!ret && GetLastError() == ERROR_ALREADY_EXISTS, - "MoveFileA: unexpected error %d\n", GetLastError()); - - ret = DeleteFileA(dest); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); - - ret = MoveFileA(source, dest); - ok(ret, "MoveFileA: failed, error %d\n", GetLastError()); - - lstrcatA(tempdir, "Remove Me"); - ret = CreateDirectoryA(tempdir, NULL); - ok(ret == TRUE, "CreateDirectoryA failed\n"); - - lstrcpyA(source, dest); - lstrcpyA(dest, tempdir); - lstrcatA(dest, "\\wild?.*"); - /* FIXME: if we create a file with wildcards we can't delete it now that DeleteFile works correctly */ - ret = MoveFileA(source, dest); - ok(!ret, "MoveFileA: shouldn't move to wildcard file\n"); - ok(GetLastError() == ERROR_INVALID_NAME || /* NT */ - GetLastError() == ERROR_FILE_NOT_FOUND, /* Win9x */ - "MoveFileA: with wildcards, unexpected error %d\n", GetLastError()); - if (ret || (GetLastError() != ERROR_INVALID_NAME)) - { - WIN32_FIND_DATAA fd; - char temppath[MAX_PATH]; - HANDLE hFind; - - lstrcpyA(temppath, tempdir); - lstrcatA(temppath, "\\*.*"); - hFind = FindFirstFileA(temppath, &fd); - if (INVALID_HANDLE_VALUE != hFind) - { - LPSTR lpName; - do - { - lpName = fd.cAlternateFileName; - if (!lpName[0]) - lpName = fd.cFileName; - ok(IsDotDir(lpName), "MoveFileA: wildcards file created!\n"); - } - while (FindNextFileA(hFind, &fd)); - FindClose(hFind); - } - } - ret = DeleteFileA(source); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); - ret = DeleteFileA(dest); - ok(!ret, "DeleteFileA: error %d\n", GetLastError()); - ret = RemoveDirectoryA(tempdir); - ok(ret, "DeleteDirectoryA: error %d\n", GetLastError()); -} - -static void test_MoveFileW(void) -{ - WCHAR temp_path[MAX_PATH]; - WCHAR source[MAX_PATH], dest[MAX_PATH]; - static const WCHAR prefix[] = {'p','f','x',0}; - DWORD ret; - - ret = GetTempPathW(MAX_PATH, temp_path); - if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(ret != 0, "GetTempPathW error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameW(temp_path, prefix, 0, source); - ok(ret != 0, "GetTempFileNameW error %d\n", GetLastError()); - - ret = GetTempFileNameW(temp_path, prefix, 0, dest); - ok(ret != 0, "GetTempFileNameW error %d\n", GetLastError()); - - ret = MoveFileW(source, dest); - ok(!ret && GetLastError() == ERROR_ALREADY_EXISTS, - "CopyFileW: unexpected error %d\n", GetLastError()); - - ret = DeleteFileW(source); - ok(ret, "DeleteFileW: error %d\n", GetLastError()); - ret = DeleteFileW(dest); - ok(ret, "DeleteFileW: error %d\n", GetLastError()); -} - -#define PATTERN_OFFSET 0x10 - -static void test_offset_in_overlapped_structure(void) -{ - HANDLE hFile; - OVERLAPPED ov; - DWORD done, offset; - BOOL rc; - BYTE buf[256], pattern[] = "TeSt"; - UINT i; - char temp_path[MAX_PATH], temp_fname[MAX_PATH]; - BOOL ret; - - ret =GetTempPathA(MAX_PATH, temp_path); - ok( ret, "GetTempPathA error %d\n", GetLastError()); - ret =GetTempFileNameA(temp_path, "pfx", 0, temp_fname); - ok( ret, "GetTempFileNameA error %d\n", GetLastError()); - - /*** Write File *****************************************************/ - - hFile = CreateFileA(temp_fname, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA error %d\n", GetLastError()); - - for(i = 0; i < sizeof(buf); i++) buf[i] = i; - ret = WriteFile(hFile, buf, sizeof(buf), &done, NULL); - ok( ret, "WriteFile error %d\n", GetLastError()); - ok(done == sizeof(buf), "expected number of bytes written %u\n", done); - - memset(&ov, 0, sizeof(ov)); - S(U(ov)).Offset = PATTERN_OFFSET; - S(U(ov)).OffsetHigh = 0; - rc=WriteFile(hFile, pattern, sizeof(pattern), &done, &ov); - /* Win 9x does not support the overlapped I/O on files */ - if (rc || GetLastError()!=ERROR_INVALID_PARAMETER) { - ok(rc, "WriteFile error %d\n", GetLastError()); - ok(done == sizeof(pattern), "expected number of bytes written %u\n", done); - offset = SetFilePointer(hFile, 0, NULL, FILE_CURRENT); - ok(offset == PATTERN_OFFSET + sizeof(pattern), "wrong file offset %d\n", offset); - - S(U(ov)).Offset = sizeof(buf) * 2; - S(U(ov)).OffsetHigh = 0; - ret = WriteFile(hFile, pattern, sizeof(pattern), &done, &ov); - ok( ret, "WriteFile error %d\n", GetLastError()); - ok(done == sizeof(pattern), "expected number of bytes written %u\n", done); - offset = SetFilePointer(hFile, 0, NULL, FILE_CURRENT); - ok(offset == sizeof(buf) * 2 + sizeof(pattern), "wrong file offset %d\n", offset); - } - - CloseHandle(hFile); - - /*** Read File *****************************************************/ - - hFile = CreateFileA(temp_fname, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA error %d\n", GetLastError()); - - memset(buf, 0, sizeof(buf)); - memset(&ov, 0, sizeof(ov)); - S(U(ov)).Offset = PATTERN_OFFSET; - S(U(ov)).OffsetHigh = 0; - rc=ReadFile(hFile, buf, sizeof(pattern), &done, &ov); - /* Win 9x does not support the overlapped I/O on files */ - if (rc || GetLastError()!=ERROR_INVALID_PARAMETER) { - ok(rc, "ReadFile error %d\n", GetLastError()); - ok(done == sizeof(pattern), "expected number of bytes read %u\n", done); - offset = SetFilePointer(hFile, 0, NULL, FILE_CURRENT); - ok(offset == PATTERN_OFFSET + sizeof(pattern), "wrong file offset %d\n", offset); - ok(!memcmp(buf, pattern, sizeof(pattern)), "pattern match failed\n"); - } - - CloseHandle(hFile); - - ret = DeleteFileA(temp_fname); - ok( ret, "DeleteFileA error %d\n", GetLastError()); -} - -static void test_LockFile(void) -{ - HANDLE handle; - DWORD written; - OVERLAPPED overlapped; - int limited_LockFile; - int limited_UnLockFile; - - handle = CreateFileA( filename, GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, - CREATE_ALWAYS, 0, 0 ); - if (handle == INVALID_HANDLE_VALUE) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - ok( WriteFile( handle, sillytext, strlen(sillytext), &written, NULL ), "write failed\n" ); - - ok( LockFile( handle, 0, 0, 0, 0 ), "LockFile failed\n" ); - ok( UnlockFile( handle, 0, 0, 0, 0 ), "UnlockFile failed\n" ); - - limited_UnLockFile = 0; - if (UnlockFile( handle, 0, 0, 0, 0 )) - { - limited_UnLockFile = 1; - } - - ok( LockFile( handle, 10, 0, 20, 0 ), "LockFile 10,20 failed\n" ); - /* overlapping locks must fail */ - ok( !LockFile( handle, 12, 0, 10, 0 ), "LockFile 12,10 succeeded\n" ); - ok( !LockFile( handle, 5, 0, 6, 0 ), "LockFile 5,6 succeeded\n" ); - /* non-overlapping locks must succeed */ - ok( LockFile( handle, 5, 0, 5, 0 ), "LockFile 5,5 failed\n" ); - - ok( !UnlockFile( handle, 10, 0, 10, 0 ), "UnlockFile 10,10 succeeded\n" ); - ok( UnlockFile( handle, 10, 0, 20, 0 ), "UnlockFile 10,20 failed\n" ); - ok( !UnlockFile( handle, 10, 0, 20, 0 ), "UnlockFile 10,20 again succeeded\n" ); - ok( UnlockFile( handle, 5, 0, 5, 0 ), "UnlockFile 5,5 failed\n" ); - - S(U(overlapped)).Offset = 100; - S(U(overlapped)).OffsetHigh = 0; - overlapped.hEvent = 0; - - /* Test for broken LockFileEx a la Windows 95 OSR2. */ - if (LockFileEx( handle, 0, 0, 100, 0, &overlapped )) - { - /* LockFileEx is probably OK, test it more. */ - ok( LockFileEx( handle, 0, 0, 100, 0, &overlapped ), - "LockFileEx 100,100 failed\n" ); - } - - /* overlapping shared locks are OK */ - S(U(overlapped)).Offset = 150; - limited_UnLockFile || ok( LockFileEx( handle, 0, 0, 100, 0, &overlapped ), "LockFileEx 150,100 failed\n" ); - - /* but exclusive is not */ - ok( !LockFileEx( handle, LOCKFILE_EXCLUSIVE_LOCK|LOCKFILE_FAIL_IMMEDIATELY, - 0, 50, 0, &overlapped ), - "LockFileEx exclusive 150,50 succeeded\n" ); - if (!UnlockFileEx( handle, 0, 100, 0, &overlapped )) - { /* UnLockFile is capable. */ - S(U(overlapped)).Offset = 100; - ok( !UnlockFileEx( handle, 0, 100, 0, &overlapped ), - "UnlockFileEx 150,100 again succeeded\n" ); - } - - ok( LockFile( handle, 0, 0x10000000, 0, 0xf0000000 ), "LockFile failed\n" ); - ok( !LockFile( handle, ~0, ~0, 1, 0 ), "LockFile ~0,1 succeeded\n" ); - ok( !LockFile( handle, 0, 0x20000000, 20, 0 ), "LockFile 0x20000000,20 succeeded\n" ); - ok( UnlockFile( handle, 0, 0x10000000, 0, 0xf0000000 ), "UnlockFile failed\n" ); - - /* wrap-around lock should not do anything */ - /* (but still succeeds on NT4 so we don't check result) */ - LockFile( handle, 0, 0x10000000, 0, 0xf0000001 ); - - limited_LockFile = 0; - if (!LockFile( handle, ~0, ~0, 1, 0 )) - { - limited_LockFile = 1; - } - - limited_UnLockFile || ok( UnlockFile( handle, ~0, ~0, 1, 0 ), "Unlockfile ~0,1 failed\n" ); - - /* zero-byte lock */ - ok( LockFile( handle, 100, 0, 0, 0 ), "LockFile 100,0 failed\n" ); - limited_LockFile || ok( !LockFile( handle, 98, 0, 4, 0 ), "LockFile 98,4 succeeded\n" ); - ok( LockFile( handle, 90, 0, 10, 0 ), "LockFile 90,10 failed\n" ); - limited_LockFile || ok( !LockFile( handle, 100, 0, 10, 0 ), "LockFile 100,10 failed\n" ); - - ok( UnlockFile( handle, 90, 0, 10, 0 ), "UnlockFile 90,10 failed\n" ); - !ok( UnlockFile( handle, 100, 0, 10, 0 ), "UnlockFile 100,10 failed\n" ); - - ok( UnlockFile( handle, 100, 0, 0, 0 ), "UnlockFile 100,0 failed\n" ); - - CloseHandle( handle ); - DeleteFileA( filename ); -} - -static inline int is_sharing_compatible( DWORD access1, DWORD sharing1, DWORD access2, DWORD sharing2, BOOL is_win9x ) -{ - if (!is_win9x) - { - if (!access1) sharing1 = FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE; - if (!access2) sharing2 = FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE; - } - else - { - access1 &= ~DELETE; - if (!access1) access1 = GENERIC_READ; - - access2 &= ~DELETE; - if (!access2) access2 = GENERIC_READ; - } - - if ((access1 & GENERIC_READ) && !(sharing2 & FILE_SHARE_READ)) return 0; - if ((access1 & GENERIC_WRITE) && !(sharing2 & FILE_SHARE_WRITE)) return 0; - if ((access1 & DELETE) && !(sharing2 & FILE_SHARE_DELETE)) return 0; - if ((access2 & GENERIC_READ) && !(sharing1 & FILE_SHARE_READ)) return 0; - if ((access2 & GENERIC_WRITE) && !(sharing1 & FILE_SHARE_WRITE)) return 0; - if ((access2 & DELETE) && !(sharing1 & FILE_SHARE_DELETE)) return 0; - return 1; -} - -static void test_file_sharing(void) -{ - static const DWORD access_modes[] = - { 0, GENERIC_READ, GENERIC_WRITE, GENERIC_READ|GENERIC_WRITE, - DELETE, GENERIC_READ|DELETE, GENERIC_WRITE|DELETE, GENERIC_READ|GENERIC_WRITE|DELETE }; - static const DWORD sharing_modes[] = - { 0, FILE_SHARE_READ, - FILE_SHARE_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, - FILE_SHARE_DELETE, FILE_SHARE_READ|FILE_SHARE_DELETE, - FILE_SHARE_WRITE|FILE_SHARE_DELETE, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE }; - int a1, s1, a2, s2; - int ret; - HANDLE h, h2; - BOOL is_win9x = FALSE; - - /* make sure the file exists */ - h = CreateFileA( filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); - if (h == INVALID_HANDLE_VALUE) - { - ok(0, "couldn't create file \"%s\" (err=%d)\n", filename, GetLastError()); - return; - } - is_win9x = GetFileAttributesW(filenameW) == INVALID_FILE_ATTRIBUTES; - CloseHandle( h ); - - for (a1 = 0; a1 < sizeof(access_modes)/sizeof(access_modes[0]); a1++) - { - for (s1 = 0; s1 < sizeof(sharing_modes)/sizeof(sharing_modes[0]); s1++) - { - /* Win9x doesn't support FILE_SHARE_DELETE */ - if (is_win9x && (sharing_modes[s1] & FILE_SHARE_DELETE)) - continue; - - SetLastError(0xdeadbeef); - h = CreateFileA( filename, access_modes[a1], sharing_modes[s1], - NULL, OPEN_EXISTING, 0, 0 ); - if (h == INVALID_HANDLE_VALUE) - { - ok(0,"couldn't create file \"%s\" (err=%d)\n",filename,GetLastError()); - return; - } - for (a2 = 0; a2 < sizeof(access_modes)/sizeof(access_modes[0]); a2++) - { - for (s2 = 0; s2 < sizeof(sharing_modes)/sizeof(sharing_modes[0]); s2++) - { - /* Win9x doesn't support FILE_SHARE_DELETE */ - if (is_win9x && (sharing_modes[s2] & FILE_SHARE_DELETE)) - continue; - - SetLastError(0xdeadbeef); - h2 = CreateFileA( filename, access_modes[a2], sharing_modes[s2], - NULL, OPEN_EXISTING, 0, 0 ); - - if (is_sharing_compatible( access_modes[a1], sharing_modes[s1], - access_modes[a2], sharing_modes[s2], is_win9x )) - { - ret = GetLastError(); - - ok( h2 != INVALID_HANDLE_VALUE, - "open failed for modes %x/%x/%x/%x\n", - access_modes[a1], sharing_modes[s1], - access_modes[a2], sharing_modes[s2] ); - ok( ret == 0xdeadbeef /* Win9x */ || - ret == 0, /* XP */ - "wrong error code %d\n", ret ); - - CloseHandle( h2 ); - } - else - { - ret = GetLastError(); - - ok( h2 == INVALID_HANDLE_VALUE, - "open succeeded for modes %x/%x/%x/%x\n", - access_modes[a1], sharing_modes[s1], - access_modes[a2], sharing_modes[s2] ); - ok( ret == ERROR_SHARING_VIOLATION, - "wrong error code %d\n", ret ); - } - } - } - CloseHandle( h ); - } - } - - SetLastError(0xdeadbeef); - h = CreateFileA( filename, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, 0 ); - ok( h != INVALID_HANDLE_VALUE, "CreateFileA error %d\n", GetLastError() ); - - SetLastError(0xdeadbeef); - h2 = CreateFileA( filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0 ); - ok( h2 == INVALID_HANDLE_VALUE, "CreateFileA should fail\n"); - ok( GetLastError() == ERROR_SHARING_VIOLATION, "wrong error code %d\n", GetLastError() ); - - h2 = CreateFileA( filename, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); - ok( h2 != INVALID_HANDLE_VALUE, "CreateFileA error %d\n", GetLastError() ); - - CloseHandle(h); - CloseHandle(h2); - - DeleteFileA( filename ); -} - -static char get_windows_drive(void) -{ - char windowsdir[MAX_PATH]; - GetWindowsDirectory(windowsdir, sizeof(windowsdir)); - return windowsdir[0]; -} - -static void test_FindFirstFileA(void) -{ - HANDLE handle; - WIN32_FIND_DATAA data; - int err; - char buffer[5] = "C:\\"; - char buffer2[100]; - - /* try FindFirstFileA on "C:\" */ - buffer[0] = get_windows_drive(); - - SetLastError( 0xdeadbeaf ); - handle = FindFirstFileA(buffer, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on root directory should fail\n" ); - ok ( err == ERROR_FILE_NOT_FOUND, "Bad Error number %d\n", err ); - - /* try FindFirstFileA on "C:\*" */ - strcpy(buffer2, buffer); - strcat(buffer2, "*"); - handle = FindFirstFileA(buffer2, &data); - ok ( handle != INVALID_HANDLE_VALUE, "FindFirstFile on %s should succeed\n", buffer2 ); - ok ( strcmp( data.cFileName, "." ) && strcmp( data.cFileName, ".." ), - "FindFirstFile shouldn't return '%s' in drive root\n", data.cFileName ); - if (FindNextFileA( handle, &data )) - ok ( strcmp( data.cFileName, "." ) && strcmp( data.cFileName, ".." ), - "FindNextFile shouldn't return '%s' in drive root\n", data.cFileName ); - ok ( FindClose(handle) == TRUE, "Failed to close handle %s\n", buffer2 ); - - /* try FindFirstFileA on windows dir */ - GetWindowsDirectory( buffer2, sizeof(buffer2) ); - strcat(buffer2, "\\*"); - handle = FindFirstFileA(buffer2, &data); - ok( handle != INVALID_HANDLE_VALUE, "FindFirstFile on %s should succeed\n", buffer2 ); - ok( !strcmp( data.cFileName, "." ), "FindFirstFile should return '.' first\n" ); - ok( FindNextFileA( handle, &data ), "FindNextFile failed\n" ); - ok( !strcmp( data.cFileName, ".." ), "FindNextFile should return '..' as second entry\n" ); - while (FindNextFileA( handle, &data )) - ok ( strcmp( data.cFileName, "." ) && strcmp( data.cFileName, ".." ), - "FindNextFile shouldn't return '%s'\n", data.cFileName ); - ok ( FindClose(handle) == TRUE, "Failed to close handle %s\n", buffer2 ); - - /* try FindFirstFileA on "C:\foo\" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, buffer); - strcat(buffer2, "foo\\"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 ); - todo_wine { - ok ( err == ERROR_PATH_NOT_FOUND, "Bad Error number %d\n", err ); - } - - /* try FindFirstFileA on "C:\foo\bar.txt" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, buffer); - strcat(buffer2, "foo\\bar.txt"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 ); - ok ( err == ERROR_PATH_NOT_FOUND, "Bad Error number %d\n", err ); - - /* try FindFirstFileA on "C:\foo\*.*" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, buffer); - strcat(buffer2, "foo\\*.*"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 ); - ok ( err == ERROR_PATH_NOT_FOUND, "Bad Error number %d\n", err ); - - /* try FindFirstFileA on "foo\bar.txt" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, "foo\\bar.txt"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 ); - ok ( err == ERROR_PATH_NOT_FOUND, "Bad Error number %d\n", err ); - - /* try FindFirstFileA on "c:\nul" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, buffer); - strcat(buffer2, "nul"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok( handle != INVALID_HANDLE_VALUE, "FindFirstFile on %s failed\n", buffer2 ); - ok( 0 == lstrcmpiA(data.cFileName, "nul"), "wrong name %s\n", data.cFileName ); - ok( 0 == data.nFileSizeHigh, "wrong size %d\n", data.nFileSizeHigh ); - ok( 0 == data.nFileSizeLow, "wrong size %d\n", data.nFileSizeLow ); - ok( FILE_ATTRIBUTE_ARCHIVE == data.dwFileAttributes, "wrong attributes %x\n", data.dwFileAttributes ); - SetLastError( 0xdeadbeaf ); - ok( !FindNextFileA( handle, &data ), "FindNextFileA succeeded\n" ); - ok( GetLastError() == ERROR_NO_MORE_FILES, "bad error %d\n", GetLastError() ); - ok( FindClose( handle ), "failed to close handle\n" ); - - /* try FindFirstFileA on "lpt1" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, "lpt1"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok( handle != INVALID_HANDLE_VALUE, "FindFirstFile on %s failed\n", buffer2 ); - ok( 0 == lstrcmpiA(data.cFileName, "lpt1"), "wrong name %s\n", data.cFileName ); - ok( 0 == data.nFileSizeHigh, "wrong size %d\n", data.nFileSizeHigh ); - ok( 0 == data.nFileSizeLow, "wrong size %d\n", data.nFileSizeLow ); - ok( FILE_ATTRIBUTE_ARCHIVE == data.dwFileAttributes, "wrong attributes %x\n", data.dwFileAttributes ); - SetLastError( 0xdeadbeaf ); - ok( !FindNextFileA( handle, &data ), "FindNextFileA succeeded\n" ); - ok( GetLastError() == ERROR_NO_MORE_FILES, "bad error %d\n", GetLastError() ); - ok( FindClose( handle ), "failed to close handle\n" ); - - /* try FindFirstFileA on "c:\nul\*" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, buffer); - strcat(buffer2, "nul\\*"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 ); - ok ( err == ERROR_PATH_NOT_FOUND, "Bad Error number %d\n", err ); - - /* try FindFirstFileA on "c:\nul*" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, buffer); - strcat(buffer2, "nul*"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 ); - ok ( err == ERROR_FILE_NOT_FOUND, "Bad Error number %d\n", err ); - - /* try FindFirstFileA on "c:\foo\bar\nul" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, buffer); - strcat(buffer2, "foo\\bar\\nul"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 ); - ok ( err == ERROR_PATH_NOT_FOUND, "Bad Error number %d\n", err ); - - /* try FindFirstFileA on "c:\foo\nul\bar" */ - SetLastError( 0xdeadbeaf ); - strcpy(buffer2, buffer); - strcat(buffer2, "foo\\nul\\bar"); - handle = FindFirstFileA(buffer2, &data); - err = GetLastError(); - ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 ); - ok ( err == ERROR_PATH_NOT_FOUND, "Bad Error number %d\n", err ); -} - -static void test_FindNextFileA(void) -{ - HANDLE handle; - WIN32_FIND_DATAA search_results; - int err; - char buffer[5] = "C:\\*"; - - buffer[0] = get_windows_drive(); - handle = FindFirstFileA(buffer,&search_results); - ok ( handle != INVALID_HANDLE_VALUE, "FindFirstFile on C:\\* should succeed\n" ); - while (FindNextFile(handle, &search_results)) - { - /* get to the end of the files */ - } - ok ( FindClose(handle) == TRUE, "Failed to close handle\n"); - err = GetLastError(); - ok ( err == ERROR_NO_MORE_FILES, "GetLastError should return ERROR_NO_MORE_FILES\n"); -} - -static void test_FindFirstFileExA(void) -{ - WIN32_FIND_DATAA search_results; - HANDLE handle; - - if (!pFindFirstFileExA) - { - skip("FindFirstFileExA() is missing\n"); - return; - } - - CreateDirectoryA("test-dir", NULL); - _lclose(_lcreat("test-dir\\file1", 0)); - _lclose(_lcreat("test-dir\\file2", 0)); - CreateDirectoryA("test-dir\\dir1", NULL); - /* FindExLimitToDirectories is ignored */ - handle = pFindFirstFileExA("test-dir\\*", FindExInfoStandard, &search_results, FindExSearchLimitToDirectories, NULL, 0); - ok(handle != INVALID_HANDLE_VALUE, "FindFirstFile failed (err=%u)\n", GetLastError()); - ok(strcmp(search_results.cFileName, ".") == 0, "First entry should be '.', is %s\n", search_results.cFileName); - -#define CHECK_NAME(fn) (strcmp((fn), "file1") == 0 || strcmp((fn), "file2") == 0 || strcmp((fn), "dir1") == 0) - - ok(FindNextFile(handle, &search_results), "Fetching second file failed\n"); - ok(strcmp(search_results.cFileName, "..") == 0, "Second entry should be '..' is %s\n", search_results.cFileName); - - ok(FindNextFile(handle, &search_results), "Fetching third file failed\n"); - ok(CHECK_NAME(search_results.cFileName), "Invalid thrid entry - %s\n", search_results.cFileName); - - ok(FindNextFile(handle, &search_results), "Fetching fourth file failed\n"); - ok(CHECK_NAME(search_results.cFileName), "Invalid fourth entry - %s\n", search_results.cFileName); - - ok(FindNextFile(handle, &search_results), "Fetching fifth file failed\n"); - ok(CHECK_NAME(search_results.cFileName), "Invalid fifth entry - %s\n", search_results.cFileName); - -#undef CHECK_NAME - - ok(FindNextFile(handle, &search_results) == FALSE, "Fetching sixth file should failed\n"); - DeleteFileA("test-dir\\file1"); - DeleteFileA("test-dir\\file2"); - RemoveDirectoryA("test-dir\\dir1"); - RemoveDirectoryA("test-dir"); -} - -static int test_Mapfile_createtemp(HANDLE *handle) -{ - SetFileAttributesA(filename,FILE_ATTRIBUTE_NORMAL); - DeleteFile(filename); - *handle = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, 0, 0, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if (*handle != INVALID_HANDLE_VALUE) { - - return 1; - } - - return 0; -} - -static void test_MapFile(void) -{ - HANDLE handle; - HANDLE hmap; - - ok(test_Mapfile_createtemp(&handle), "Couldn't create test file.\n"); - - hmap = CreateFileMapping( handle, NULL, PAGE_READWRITE, 0, 0x1000, "named_file_map" ); - ok( hmap != NULL, "mapping should work, I named it!\n" ); - - ok( CloseHandle( hmap ), "can't close mapping handle\n"); - - /* We have to close file before we try new stuff with mapping again. - Else we would always succeed on XP or block descriptors on 95. */ - hmap = CreateFileMapping( handle, NULL, PAGE_READWRITE, 0, 0, NULL ); - ok( hmap != NULL, "We should still be able to map!\n" ); - ok( CloseHandle( hmap ), "can't close mapping handle\n"); - ok( CloseHandle( handle ), "can't close file handle\n"); - handle = NULL; - - ok(test_Mapfile_createtemp(&handle), "Couldn't create test file.\n"); - - hmap = CreateFileMapping( handle, NULL, PAGE_READWRITE, 0, 0, NULL ); - ok( hmap == NULL, "mapped zero size file\n"); - ok( GetLastError() == ERROR_FILE_INVALID, "not ERROR_FILE_INVALID\n"); - - hmap = CreateFileMapping( handle, NULL, PAGE_READWRITE, 0x80000000, 0, NULL ); - ok( hmap == NULL, "mapping should fail\n"); - /* GetLastError() varies between win9x and WinNT and also depends on the filesystem */ - - hmap = CreateFileMapping( handle, NULL, PAGE_READWRITE, 0x80000000, 0x10000, NULL ); - ok( hmap == NULL, "mapping should fail\n"); - /* GetLastError() varies between win9x and WinNT and also depends on the filesystem */ - - /* On XP you can now map again, on Win 95 you cannot. */ - - ok( CloseHandle( handle ), "can't close file handle\n"); - ok( DeleteFileA( filename ), "DeleteFile failed after map\n" ); -} - -static void test_GetFileType(void) -{ - DWORD type; - HANDLE h = CreateFileA( filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); - ok( h != INVALID_HANDLE_VALUE, "open %s failed\n", filename ); - type = GetFileType(h); - ok( type == FILE_TYPE_DISK, "expected type disk got %d\n", type ); - CloseHandle( h ); - h = CreateFileA( "nul", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0 ); - ok( h != INVALID_HANDLE_VALUE, "open nul failed\n" ); - type = GetFileType(h); - ok( type == FILE_TYPE_CHAR, "expected type char for nul got %d\n", type ); - CloseHandle( h ); - DeleteFileA( filename ); -} - -static int completion_count; - -static void CALLBACK FileIOComplete(DWORD dwError, DWORD dwBytes, LPOVERLAPPED ovl) -{ -/* printf("(%ld, %ld, %p { %ld, %ld, %ld, %ld, %p })\n", dwError, dwBytes, ovl, ovl->Internal, ovl->InternalHigh, ovl->Offset, ovl->OffsetHigh, ovl->hEvent);*/ - ReleaseSemaphore(ovl->hEvent, 1, NULL); - completion_count++; -} - -static void test_async_file_errors(void) -{ - char szFile[MAX_PATH]; - HANDLE hSem = CreateSemaphoreW(NULL, 1, 1, NULL); - HANDLE hFile; - LPVOID lpBuffer = HeapAlloc(GetProcessHeap(), 0, 4096); - OVERLAPPED ovl; - S(U(ovl)).Offset = 0; - S(U(ovl)).OffsetHigh = 0; - ovl.hEvent = hSem; - completion_count = 0; - szFile[0] = '\0'; - GetWindowsDirectoryA(szFile, sizeof(szFile)/sizeof(szFile[0])-1-strlen("\\win.ini")); - strcat(szFile, "\\win.ini"); - hFile = CreateFileA(szFile, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED, NULL); - ok(hFile != NULL, "CreateFileA(%s ...) failed\n", szFile); - while (TRUE) - { - BOOL res; - while (WaitForSingleObjectEx(hSem, INFINITE, TRUE) == WAIT_IO_COMPLETION) - ; - res = ReadFileEx(hFile, lpBuffer, 4096, &ovl, FileIOComplete); - /*printf("Offset = %ld, result = %s\n", ovl.Offset, res ? "TRUE" : "FALSE");*/ - if (!res) - break; - S(U(ovl)).Offset += 4096; - /* i/o completion routine only called if ReadFileEx returned success. - * we only care about violations of this rule so undo what should have - * been done */ - completion_count--; - } - ok(completion_count == 0, "completion routine should only be called when ReadFileEx succeeds (this rule was violated %d times)\n", completion_count); - /*printf("Error = %ld\n", GetLastError());*/ -} - -static void test_read_write(void) -{ - DWORD bytes, ret; - HANDLE hFile; - char temp_path[MAX_PATH]; - char filename[MAX_PATH]; - static const char prefix[] = "pfx"; - - ret = GetTempPathA(MAX_PATH, temp_path); - ok(ret != 0, "GetTempPathA error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameA(temp_path, prefix, 0, filename); - ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError()); - - hFile = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA: error %d\n", GetLastError()); - - SetLastError(12345678); - bytes = 12345678; - ret = WriteFile(hFile, NULL, 0, &bytes, NULL); - ok(ret && GetLastError() == 12345678, - "ret = %d, error %d\n", ret, GetLastError()); - ok(!bytes, "bytes = %d\n", bytes); - - SetLastError(12345678); - bytes = 12345678; - ret = WriteFile(hFile, NULL, 10, &bytes, NULL); - ok((!ret && GetLastError() == ERROR_INVALID_USER_BUFFER) || /* Win2k */ - (ret && GetLastError() == 12345678), /* Win9x */ - "ret = %d, error %d\n", ret, GetLastError()); - ok(!bytes || /* Win2k */ - bytes == 10, /* Win9x */ - "bytes = %d\n", bytes); - - /* make sure the file contains data */ - WriteFile(hFile, "this is the test data", 21, &bytes, NULL); - SetFilePointer(hFile, 0, NULL, FILE_BEGIN); - - SetLastError(12345678); - bytes = 12345678; - ret = ReadFile(hFile, NULL, 0, &bytes, NULL); - ok(ret && GetLastError() == 12345678, - "ret = %d, error %d\n", ret, GetLastError()); - ok(!bytes, "bytes = %d\n", bytes); - - SetLastError(12345678); - bytes = 12345678; - ret = ReadFile(hFile, NULL, 10, &bytes, NULL); - ok(!ret && (GetLastError() == ERROR_NOACCESS || /* Win2k */ - GetLastError() == ERROR_INVALID_PARAMETER), /* Win9x */ - "ret = %d, error %d\n", ret, GetLastError()); - ok(!bytes, "bytes = %d\n", bytes); - - ret = CloseHandle(hFile); - ok( ret, "CloseHandle: error %d\n", GetLastError()); - ret = DeleteFileA(filename); - ok( ret, "DeleteFileA: error %d\n", GetLastError()); -} - -static void test_OpenFile(void) -{ - HFILE hFile; - OFSTRUCT ofs; - BOOL ret; - DWORD retval; - - static const char *file = "\\regsvr32.exe"; - static const char *foo = ".\\foo-bar-foo.baz"; - static const char *foo_too_long = ".\\foo-bar-foo.baz+++++++++++++++" - "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" - "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" - "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" - "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" - "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"; - static const char *backslash = "\\"; - char buff[MAX_PATH]; - char buff_long[4*MAX_PATH]; - char filled_0xA5[OFS_MAXPATHNAME]; - UINT length; - - /* Check for existing file */ - length = GetSystemDirectoryA(buff, MAX_PATH); - - if (length + lstrlen(file) < MAX_PATH) - { - lstrcatA(buff, file); - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - - hFile = OpenFile(buff, &ofs, OF_EXIST); - ok( hFile == TRUE, "%s not found : %d\n", buff, GetLastError() ); - ok( GetLastError() == 0xfaceabee || GetLastError() == ERROR_SUCCESS, - "GetLastError() returns %d\n", GetLastError() ); - ok( ofs.cBytes == sizeof(ofs), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_SUCCESS, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s' or string filled with 0xA5\n", - ofs.szPathName, buff ); - } - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - length = GetCurrentDirectoryA(MAX_PATH, buff); - - /* Check for nonexistent file */ - if (length + lstrlenA(foo + 1) < MAX_PATH) - { - lstrcatA(buff, foo + 1); /* Avoid '.' during concatenation */ - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - - hFile = OpenFile(foo, &ofs, OF_EXIST); - ok( hFile == HFILE_ERROR, "hFile != HFILE_ERROR : %d\n", GetLastError()); - ok( GetLastError() == ERROR_FILE_NOT_FOUND, "GetLastError() returns %d\n", GetLastError() ); - todo_wine - ok( ofs.cBytes == 0xA5, "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_FILE_NOT_FOUND, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0 || strncmp(ofs.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, - "OpenFile returned '%s', but was expected to return '%s' or string filled with 0xA5\n", - ofs.szPathName, buff ); - } - - length = GetCurrentDirectoryA(MAX_PATH, buff_long); - length += lstrlenA(foo_too_long + 1); - - /* Check for nonexistent file with too long filename */ - if (length >= OFS_MAXPATHNAME && length < sizeof(buff_long)) - { - lstrcatA(buff_long, foo_too_long + 1); /* Avoid '.' during concatenation */ - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - - hFile = OpenFile(foo_too_long, &ofs, OF_EXIST); - ok( hFile == HFILE_ERROR, "hFile != HFILE_ERROR : %d\n", GetLastError()); - ok( GetLastError() == ERROR_INVALID_DATA || GetLastError() == ERROR_FILENAME_EXCED_RANGE, - "GetLastError() returns %d\n", GetLastError() ); - todo_wine - ok( ofs.cBytes == 0xA5, "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_INVALID_DATA || ofs.nErrCode == ERROR_FILENAME_EXCED_RANGE, - "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( strncmp(ofs.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, - "OpenFile returned '%s', but was expected to return string filled with 0xA5\n", - ofs.szPathName ); - } - - length = GetCurrentDirectoryA(MAX_PATH, buff); - length += lstrlenA(backslash); - length += lstrlenA(filename); - - if (length >= MAX_PATH) - { - trace("Buffer too small, requested length = %d, but MAX_PATH = %d. Skipping test.\n", length, MAX_PATH); - return; - } - lstrcatA(buff, backslash); - lstrcatA(buff, filename); - - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - /* Create an empty file */ - hFile = OpenFile(filename, &ofs, OF_CREATE); - ok( hFile != HFILE_ERROR, "OpenFile failed to create nonexistent file\n" ); - ok( GetLastError() == 0xfaceabee || GetLastError() == ERROR_SUCCESS, - "GetLastError() returns %d\n", GetLastError() ); - ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_SUCCESS, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ret = CloseHandle((HANDLE)hFile); - ok( ret == TRUE, "CloseHandle() returns %d\n", ret ); - retval = GetFileAttributesA(filename); - ok( retval != INVALID_FILE_ATTRIBUTES, "GetFileAttributesA: error %d\n", GetLastError() ); - - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - /* Check various opening options: */ - /* for reading only, */ - hFile = OpenFile(filename, &ofs, OF_READ); - ok( hFile != HFILE_ERROR, "OpenFile failed on read\n" ); - ok( GetLastError() == 0xfaceabee || GetLastError() == ERROR_SUCCESS, - "GetLastError() returns %d\n", GetLastError() ); - ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_SUCCESS, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); - ret = CloseHandle((HANDLE)hFile); - ok( ret == TRUE, "CloseHandle() returns %d\n", ret ); - - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - /* for writing only, */ - hFile = OpenFile(filename, &ofs, OF_WRITE); - ok( hFile != HFILE_ERROR, "OpenFile failed on write\n" ); - ok( GetLastError() == 0xfaceabee || GetLastError() == ERROR_SUCCESS, - "GetLastError() returns %d\n", GetLastError() ); - ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_SUCCESS, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); - ret = CloseHandle((HANDLE)hFile); - ok( ret == TRUE, "CloseHandle() returns %d\n", ret ); - - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - /* for reading and writing, */ - hFile = OpenFile(filename, &ofs, OF_READWRITE); - ok( hFile != HFILE_ERROR, "OpenFile failed on read/write\n" ); - ok( GetLastError() == 0xfaceabee || GetLastError() == ERROR_SUCCESS, - "GetLastError() returns %d\n", GetLastError() ); - ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_SUCCESS, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); - ret = CloseHandle((HANDLE)hFile); - ok( ret == TRUE, "CloseHandle() returns %d\n", ret ); - - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - /* for checking file presence. */ - hFile = OpenFile(filename, &ofs, OF_EXIST); - ok( hFile == 1, "OpenFile failed on finding our created file\n" ); - ok( GetLastError() == 0xfaceabee || GetLastError() == ERROR_SUCCESS, - "GetLastError() returns %d\n", GetLastError() ); - ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_SUCCESS, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); - - memset(&ofs, 0xA5, sizeof(ofs)); - SetLastError(0xfaceabee); - /* Delete the file and make sure it doesn't exist anymore */ - hFile = OpenFile(filename, &ofs, OF_DELETE); - ok( hFile == 1, "OpenFile failed on delete (%d)\n", hFile ); - ok( GetLastError() == 0xfaceabee || GetLastError() == ERROR_SUCCESS, - "GetLastError() returns %d\n", GetLastError() ); - ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes ); - ok( ofs.nErrCode == ERROR_SUCCESS, "OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode ); - ok( lstrcmpiA(ofs.szPathName, buff) == 0, - "OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff ); - - retval = GetFileAttributesA(filename); - ok( retval == INVALID_FILE_ATTRIBUTES, "GetFileAttributesA succeeded on deleted file\n" ); -} - -static void test_overlapped(void) -{ - OVERLAPPED ov; - DWORD r, result; - - /* GetOverlappedResult crashes if the 2nd or 3rd param are NULL */ - - memset( &ov, 0, sizeof ov ); - result = 1; - r = GetOverlappedResult(0, &ov, &result, 0); - ok( r == TRUE, "should return false\n"); - ok( result == 0, "wrong result %u\n", result ); - - result = 0; - ov.Internal = 0; - ov.InternalHigh = 0xabcd; - r = GetOverlappedResult(0, &ov, &result, 0); - ok( r == TRUE, "should return false\n"); - ok( result == 0xabcd, "wrong result %u\n", result ); - - SetLastError( 0xb00 ); - result = 0; - ov.Internal = STATUS_INVALID_HANDLE; - ov.InternalHigh = 0xabcd; - r = GetOverlappedResult(0, &ov, &result, 0); - ok( GetLastError() == ERROR_INVALID_HANDLE, "wrong error %u\n", GetLastError() ); - ok( r == FALSE, "should return false\n"); - ok( result == 0xabcd, "wrong result %u\n", result ); - - SetLastError( 0xb00 ); - result = 0; - ov.Internal = STATUS_PENDING; - ov.InternalHigh = 0xabcd; - r = GetOverlappedResult(0, &ov, &result, 0); - ok( GetLastError() == ERROR_IO_INCOMPLETE, "wrong error %u\n", GetLastError() ); - ok( r == FALSE, "should return false\n"); - ok( result == 0, "wrong result %u\n", result ); - - SetLastError( 0xb00 ); - ov.hEvent = CreateEvent( NULL, 1, 1, NULL ); - ov.Internal = STATUS_PENDING; - ov.InternalHigh = 0xabcd; - r = GetOverlappedResult(0, &ov, &result, 0); - ok( GetLastError() == ERROR_IO_INCOMPLETE, "wrong error %u\n", GetLastError() ); - ok( r == FALSE, "should return false\n"); - - ResetEvent( ov.hEvent ); - - SetLastError( 0xb00 ); - ov.Internal = STATUS_PENDING; - ov.InternalHigh = 0; - r = GetOverlappedResult(0, &ov, &result, 0); - ok( GetLastError() == ERROR_IO_INCOMPLETE, "wrong error %u\n", GetLastError() ); - ok( r == FALSE, "should return false\n"); - - r = CloseHandle( ov.hEvent ); - ok( r == TRUE, "close handle failed\n"); -} - -static void test_RemoveDirectory(void) -{ - int rc; - char directory[] = "removeme"; - - rc = CreateDirectory(directory, NULL); - ok( rc, "Createdirectory failed, gle=%d\n", GetLastError() ); - - rc = SetCurrentDirectory(directory); - ok( rc, "SetCurrentDirectory failed, gle=%d\n", GetLastError() ); - - rc = RemoveDirectory("."); - todo_wine { - ok( !rc, "RemoveDirectory unexpectedly worked\n" ); - } - - rc = SetCurrentDirectory(".."); - ok( rc, "SetCurrentDirectory failed, gle=%d\n", GetLastError() ); - - rc = RemoveDirectory(directory); - todo_wine { - ok( rc, "RemoveDirectory failed, gle=%d\n", GetLastError() ); - } -} - -static void test_ReplaceFileA(void) -{ - char replaced[MAX_PATH], replacement[MAX_PATH], backup[MAX_PATH]; - HANDLE hReplacedFile, hReplacementFile, hBackupFile; - static const char replacedData[] = "file-to-replace"; - static const char replacementData[] = "new-file"; - static const char backupData[] = "backup-file"; - FILETIME ftReplaced, ftReplacement, ftBackup; - static const char prefix[] = "pfx"; - char temp_path[MAX_PATH]; - DWORD ret; - BOOL retok; - - if (!pReplaceFileA) - { - skip("ReplaceFileA() is missing\n"); - return; - } - - ret = GetTempPathA(MAX_PATH, temp_path); - ok(ret != 0, "GetTempPathA error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameA(temp_path, prefix, 0, replaced); - ok(ret != 0, "GetTempFileNameA error (replaced) %d\n", GetLastError()); - - ret = GetTempFileNameA(temp_path, prefix, 0, replacement); - ok(ret != 0, "GetTempFileNameA error (replacement) %d\n", GetLastError()); - - ret = GetTempFileNameA(temp_path, prefix, 0, backup); - ok(ret != 0, "GetTempFileNameA error (backup) %d\n", GetLastError()); - - /* place predictable data in the file to be replaced */ - hReplacedFile = CreateFileA(replaced, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0 ); - ok(hReplacedFile != INVALID_HANDLE_VALUE, - "failed to open replaced file\n"); - retok = WriteFile(hReplacedFile, replacedData, sizeof(replacedData), &ret, NULL ); - ok( retok && ret == sizeof(replacedData), - "WriteFile error (replaced) %d\n", GetLastError()); - ok(GetFileSize(hReplacedFile, NULL) == sizeof(replacedData), - "replaced file has wrong size\n"); - /* place predictable data in the file to be the replacement */ - hReplacementFile = CreateFileA(replacement, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0 ); - ok(hReplacementFile != INVALID_HANDLE_VALUE, - "failed to open replacement file\n"); - retok = WriteFile(hReplacementFile, replacementData, sizeof(replacementData), &ret, NULL ); - ok( retok && ret == sizeof(replacementData), - "WriteFile error (replacement) %d\n", GetLastError()); - ok(GetFileSize(hReplacementFile, NULL) == sizeof(replacementData), - "replacement file has wrong size\n"); - /* place predictable data in the backup file (to be over-written) */ - hBackupFile = CreateFileA(backup, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0 ); - ok(hBackupFile != INVALID_HANDLE_VALUE, - "failed to open backup file\n"); - retok = WriteFile(hBackupFile, backupData, sizeof(backupData), &ret, NULL ); - ok( retok && ret == sizeof(backupData), - "WriteFile error (replacement) %d\n", GetLastError()); - ok(GetFileSize(hBackupFile, NULL) == sizeof(backupData), - "backup file has wrong size\n"); - /* change the filetime on the "replaced" file to ensure that it changes */ - ret = GetFileTime(hReplacedFile, NULL, NULL, &ftReplaced); - ok( ret, "GetFileTime error (replaced) %d\n", GetLastError()); - ftReplaced.dwLowDateTime -= 600000000; /* 60 second */ - ret = SetFileTime(hReplacedFile, NULL, NULL, &ftReplaced); - ok( ret, "SetFileTime error (replaced) %d\n", GetLastError()); - GetFileTime(hReplacedFile, NULL, NULL, &ftReplaced); /* get the actual time back */ - CloseHandle(hReplacedFile); - /* change the filetime on the backup to ensure that it changes */ - ret = GetFileTime(hBackupFile, NULL, NULL, &ftBackup); - ok( ret, "GetFileTime error (backup) %d\n", GetLastError()); - ftBackup.dwLowDateTime -= 1200000000; /* 120 second */ - ret = SetFileTime(hBackupFile, NULL, NULL, &ftBackup); - ok( ret, "SetFileTime error (backup) %d\n", GetLastError()); - GetFileTime(hBackupFile, NULL, NULL, &ftBackup); /* get the actual time back */ - CloseHandle(hBackupFile); - /* get the filetime on the replacement file to perform checks */ - ret = GetFileTime(hReplacementFile, NULL, NULL, &ftReplacement); - ok( ret, "GetFileTime error (replacement) %d\n", GetLastError()); - CloseHandle(hReplacementFile); - - /* perform replacement w/ backup - * TODO: flags are not implemented - */ - SetLastError(0xdeadbeef); - ret = pReplaceFileA(replaced, replacement, backup, 0, 0, 0); - ok(ret, "ReplaceFileA: unexpected error %d\n", GetLastError()); - /* make sure that the backup has the size of the old "replaced" file */ - hBackupFile = CreateFileA(backup, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - ok(hBackupFile != INVALID_HANDLE_VALUE, - "failed to open backup file\n"); - ret = GetFileSize(hBackupFile, NULL); - ok(ret == sizeof(replacedData), - "backup file has wrong size %d\n", ret); - /* make sure that the "replaced" file has the size of the replacement file */ - hReplacedFile = CreateFileA(replaced, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - ok(hReplacedFile != INVALID_HANDLE_VALUE, - "failed to open replaced file\n"); - ret = GetFileSize(hReplacedFile, NULL); - ok(ret == sizeof(replacementData), - "replaced file has wrong size %d\n", ret); - /* make sure that the replacement file no-longer exists */ - hReplacementFile = CreateFileA(replacement, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - ok(hReplacementFile == INVALID_HANDLE_VALUE, - "unexpected error, replacement file should not exist %d\n", GetLastError()); - /* make sure that the backup has the old "replaced" filetime */ - ret = GetFileTime(hBackupFile, NULL, NULL, &ftBackup); - ok( ret, "GetFileTime error (backup %d\n", GetLastError()); - ok(CompareFileTime(&ftBackup, &ftReplaced) == 0, - "backup file has wrong filetime\n"); - CloseHandle(hBackupFile); - /* make sure that the "replaced" has the old replacement filetime */ - ret = GetFileTime(hReplacedFile, NULL, NULL, &ftReplaced); - ok( ret, "GetFileTime error (backup %d\n", GetLastError()); - ok(CompareFileTime(&ftReplaced, &ftReplacement) == 0, - "replaced file has wrong filetime\n"); - CloseHandle(hReplacedFile); - - /* re-create replacement file for pass w/o backup (blank) */ - ret = GetTempFileNameA(temp_path, prefix, 0, replacement); - ok(ret != 0, "GetTempFileNameA error (replacement) %d\n", GetLastError()); - /* perform replacement w/o backup - * TODO: flags are not implemented - */ - SetLastError(0xdeadbeef); - ret = pReplaceFileA(replaced, replacement, NULL, 0, 0, 0); - ok(ret, "ReplaceFileA: unexpected error %d\n", GetLastError()); - - /* re-create replacement file for pass w/ backup (backup-file not existing) */ - ret = GetTempFileNameA(temp_path, prefix, 0, replacement); - ok(ret != 0, "GetTempFileNameA error (replacement) %d\n", GetLastError()); - ret = DeleteFileA(backup); - ok(ret, "DeleteFileA: error (backup) %d\n", GetLastError()); - /* perform replacement w/ backup (no pre-existing backup) - * TODO: flags are not implemented - */ - SetLastError(0xdeadbeef); - ret = pReplaceFileA(replaced, replacement, backup, 0, 0, 0); - ok(ret, "ReplaceFileA: unexpected error %d\n", GetLastError()); - - /* re-create replacement file for pass w/ no permissions to "replaced" */ - ret = GetTempFileNameA(temp_path, prefix, 0, replacement); - ok(ret != 0, "GetTempFileNameA error (replacement) %d\n", GetLastError()); - ret = SetFileAttributesA(replaced, FILE_ATTRIBUTE_READONLY); - ok(ret, "SetFileAttributesA: error setting to read only %d\n", GetLastError()); - /* perform replacement w/ backup (no permission to "replaced") - * TODO: flags are not implemented - */ - SetLastError(0xdeadbeef); - ret = pReplaceFileA(replaced, replacement, backup, 0, 0, 0); - ok(ret != ERROR_UNABLE_TO_REMOVE_REPLACED, "ReplaceFileA: unexpected error %d\n", GetLastError()); - /* make sure that the replacement file still exists */ - hReplacementFile = CreateFileA(replacement, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); - ok(hReplacementFile != INVALID_HANDLE_VALUE, - "unexpected error, replacement file should still exist %d\n", GetLastError()); - CloseHandle(hReplacementFile); - ret = SetFileAttributesA(replaced, FILE_ATTRIBUTE_NORMAL); - ok(ret, "SetFileAttributesA: error setting to normal %d\n", GetLastError()); - - /* replacement file still exists, make pass w/o "replaced" */ - ret = DeleteFileA(replaced); - ok(ret, "DeleteFileA: error (replaced) %d\n", GetLastError()); - /* perform replacement w/ backup (no pre-existing backup or "replaced") - * TODO: flags are not implemented - */ - SetLastError(0xdeadbeef); - ret = pReplaceFileA(replaced, replacement, backup, 0, 0, 0); - ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND, - "ReplaceFileA: unexpected error %d\n", GetLastError()); - - /* perform replacement w/o existing "replacement" file - * TODO: flags are not implemented - */ - SetLastError(0xdeadbeef); - ret = pReplaceFileA(replaced, replacement, NULL, 0, 0, 0); - ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND, - "ReplaceFileA: unexpected error %d\n", GetLastError()); - - /* - * if the first round (w/ backup) worked then as long as there is no - * failure then there is no need to check this round (w/ backup is the - * more complete case) - */ - - /* delete temporary files, replacement and replaced are already deleted */ - ret = DeleteFileA(backup); - ok(ret, "DeleteFileA: error (backup) %d\n", GetLastError()); -} - -/* - * ReplaceFileW is a simpler case of ReplaceFileA, there is no - * need to be as thorough. - */ -static void test_ReplaceFileW(void) -{ - WCHAR replaced[MAX_PATH], replacement[MAX_PATH], backup[MAX_PATH]; - static const WCHAR prefix[] = {'p','f','x',0}; - WCHAR temp_path[MAX_PATH]; - DWORD ret; - - if (!pReplaceFileW) - { - skip("ReplaceFileW() is missing\n"); - return; - } - - ret = GetTempPathW(MAX_PATH, temp_path); - if (ret==0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(ret != 0, "GetTempPathW error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameW(temp_path, prefix, 0, replaced); - ok(ret != 0, "GetTempFileNameW error (replaced) %d\n", GetLastError()); - - ret = GetTempFileNameW(temp_path, prefix, 0, replacement); - ok(ret != 0, "GetTempFileNameW error (replacement) %d\n", GetLastError()); - - ret = GetTempFileNameW(temp_path, prefix, 0, backup); - ok(ret != 0, "GetTempFileNameW error (backup) %d\n", GetLastError()); - - ret = pReplaceFileW(replaced, replacement, backup, 0, 0, 0); - ok(ret, "ReplaceFileW: error %d\n", GetLastError()); - - ret = GetTempFileNameW(temp_path, prefix, 0, replacement); - ok(ret != 0, "GetTempFileNameW error (replacement) %d\n", GetLastError()); - ret = pReplaceFileW(replaced, replacement, NULL, 0, 0, 0); - ok(ret, "ReplaceFileW: error %d\n", GetLastError()); - - ret = GetTempFileNameW(temp_path, prefix, 0, replacement); - ok(ret != 0, "GetTempFileNameW error (replacement) %d\n", GetLastError()); - ret = DeleteFileW(backup); - ok(ret, "DeleteFileW: error (backup) %d\n", GetLastError()); - ret = pReplaceFileW(replaced, replacement, backup, 0, 0, 0); - ok(ret, "ReplaceFileW: error %d\n", GetLastError()); - - ret = GetTempFileNameW(temp_path, prefix, 0, replacement); - ok(ret != 0, "GetTempFileNameW error (replacement) %d\n", GetLastError()); - ret = SetFileAttributesW(replaced, FILE_ATTRIBUTE_READONLY); - ok(ret, "SetFileAttributesW: error setting to read only %d\n", GetLastError()); - - ret = pReplaceFileW(replaced, replacement, backup, 0, 0, 0); - ok(ret != ERROR_UNABLE_TO_REMOVE_REPLACED, - "ReplaceFileW: unexpected error %d\n", GetLastError()); - ret = SetFileAttributesW(replaced, FILE_ATTRIBUTE_NORMAL); - ok(ret, "SetFileAttributesW: error setting to normal %d\n", GetLastError()); - - ret = DeleteFileW(replaced); - ok(ret, "DeleteFileW: error (replaced) %d\n", GetLastError()); - ret = pReplaceFileW(replaced, replacement, backup, 0, 0, 0); - ok(!ret, "ReplaceFileW: error %d\n", GetLastError()); - - ret = pReplaceFileW(replaced, replacement, NULL, 0, 0, 0); - ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND, - "ReplaceFileW: unexpected error %d\n", GetLastError()); - - ret = DeleteFileW(backup); - ok(ret, "DeleteFileW: error %d\n", GetLastError()); -} - -START_TEST(file) -{ - InitFunctionPointers(); - - test__hread( ); - test__hwrite( ); - test__lclose( ); - test__lcreat( ); - test__llseek( ); - test__llopen( ); - test__lread( ); - test__lwrite( ); - test_GetTempFileNameA(); - test_CopyFileA(); - test_CopyFileW(); - test_CreateFileA(); - test_CreateFileW(); - test_DeleteFileA(); - test_DeleteFileW(); - test_MoveFileA(); - test_MoveFileW(); - test_FindFirstFileA(); - test_FindNextFileA(); - test_FindFirstFileExA(); - test_LockFile(); - test_file_sharing(); - test_offset_in_overlapped_structure(); - test_MapFile(); - test_GetFileType(); - test_async_file_errors(); - test_read_write(); - test_OpenFile(); - test_overlapped(); - test_RemoveDirectory(); - test_ReplaceFileA(); - test_ReplaceFileW(); -} diff --git a/rostests/winetests/kernel32/format_msg.c b/rostests/winetests/kernel32/format_msg.c deleted file mode 100755 index 1f52da9a8f5..00000000000 --- a/rostests/winetests/kernel32/format_msg.c +++ /dev/null @@ -1,250 +0,0 @@ -/* Unit test suite for FormatMessageA - * - * Copyright 2002 Mike McCormack 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 "wine/test.h" -#include "windef.h" -#include "winbase.h" - -/* #define ok(cond,failstr) if(!(cond)) {printf("line %d : %s\n",__LINE__,failstr);exit(1);} */ - -static DWORD doit(DWORD flags, LPCVOID src, DWORD msg_id, DWORD lang_id, - LPSTR out, DWORD outsize, ... ) -{ - va_list list; - DWORD r; - - va_start(list, outsize); - r = FormatMessageA(flags, src, msg_id, - lang_id, out, outsize, &list); - va_end(list); - return r; -} - -static void test_message_from_string(void) -{ - CHAR out[0x100] = {0}; - DWORD r; - static const WCHAR szwTest[] = { 't','e','s','t',0}; - - /* the basics */ - r = FormatMessageA(FORMAT_MESSAGE_FROM_STRING, "test", 0, - 0, out, sizeof(out)/sizeof(CHAR),NULL); - ok(!strcmp("test", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* using the format feature */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!s!", 0, - 0, out, sizeof(out)/sizeof(CHAR), "test"); - ok(!strcmp("test", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* no format */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1", 0, - 0, out, sizeof(out)/sizeof(CHAR), "test"); - ok(!strcmp("test", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* two pieces */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1%2", 0, - 0, out, sizeof(out)/sizeof(CHAR), "te","st"); - ok(!strcmp("test", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* three pieces */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1%3%2%1", 0, - 0, out, sizeof(out)/sizeof(CHAR), "t","s","e"); - ok(!strcmp("test", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* s doesn't seem to work in format strings */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%!s!", 0, - 0, out, sizeof(out)/sizeof(CHAR), "test"); - ok(!strcmp("!s!", out),"failed out=[%s]\n",out); - ok(r==3,"failed: r=%d\n",r); - - /* S is unicode */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!S!", 0, - 0, out, sizeof(out)/sizeof(CHAR), szwTest); - ok(!strcmp("test", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* as characters */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!c!%2!c!%3!c!%1!c!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 't','e','s'); - ok(!strcmp("test", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* some numbers */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!d!%2!d!%3!d!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 1,2,3); - ok(!strcmp("123", out),"failed out=[%s]\n",out); - ok(r==3,"failed: r=%d\n",r); - - /* a single digit with some spacing */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!4d!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 1); - ok(!strcmp(" 1", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* a single digit, left justified */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!-4d!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 1); - ok(!strcmp("1 ", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* two digit decimal number */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!4d!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 11); - ok(!strcmp(" 11", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* a hex number */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!4x!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 11); - ok(!strcmp(" b", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* a hex number, upper case */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!4X!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 11); - ok(!strcmp(" B", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* a hex number, upper case, left justified */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!-4X!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 11); - ok(!strcmp("B ", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* a long hex number, upper case */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "%1!4X!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 0x1ab); - ok(!strcmp(" 1AB", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* two percent... */ - r = doit(FORMAT_MESSAGE_FROM_STRING, " %%%% ", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp(" %% ", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* periods are special cases */ - r = doit(FORMAT_MESSAGE_FROM_STRING, " %.%. %1!d!", 0, - 0, out, sizeof(out)/sizeof(CHAR), 0x1ab); - ok(!strcmp(" .. 427", out),"failed out=[%s]\n",out); - ok(r==7,"failed: r=%d\n",r); - - /* %0 ends the line */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "test%0test", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp("test", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* %! prints an exclamation */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "yah%!%0 ", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp("yah!", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* %space */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "% % ", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp(" ", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* line feed */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "hi\n", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp("hi\r\n", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* carriage return line feed */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "hi\r\n", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp("hi\r\n", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* carriage return line feed */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "\r", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp("\r\n", out),"failed out=[%s]\n",out); - ok(r==2,"failed: r=%d\n",r); - - /* carriage return line feed */ - r = doit(FORMAT_MESSAGE_FROM_STRING, "\r\r\n", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp("\r\n\r\n", out),"failed out=[%s]\n",out); - ok(r==4,"failed: r=%d\n",r); - - /* change of pace... test the low byte of dwflags */ - /* line feed */ - r = doit(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_MAX_WIDTH_MASK, "hi\n", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp("hi ", out) || !strcmp("hi\r\n", out),"failed out=[%s]\n",out); - ok(r==3 || r==4,"failed: r=%d\n",r); - - /* carriage return line feed */ - r = doit(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_MAX_WIDTH_MASK, "hi\r\n", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp("hi ", out),"failed out=[%s]\n",out); - ok(r==3,"failed: r=%d\n",r); - - /* carriage return line feed */ - r = doit(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_MAX_WIDTH_MASK, "\r", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp(" ", out),"failed out=[%s]\n",out); - ok(r==1,"failed: r=%d\n",r); - - /* carriage return line feed */ - r = doit(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_MAX_WIDTH_MASK, "\r\r\n", 0, - 0, out, sizeof(out)/sizeof(CHAR)); - ok(!strcmp(" ", out),"failed out=[%s]\n",out); - ok(r==2,"failed: r=%d\n",r); -} - -static void test_message_null_buffer(void) -{ - DWORD ret, error; - - SetLastError(0xdeadbeef); - ret = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, 0, 0, NULL, 0, NULL); - error = GetLastError(); - ok(!ret, "FormatMessageA returned %u\n", ret); - ok(error == ERROR_NOT_ENOUGH_MEMORY, "last error %u\n", error); - - SetLastError(0xdeadbeef); - ret = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, 0, 0, NULL, 0, NULL); - error = GetLastError(); - if (!ret && error == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("FormatMessageW is not implemented\n"); - return; - } - - ok(!ret, "FormatMessageW returned %u\n", ret); - ok(error == ERROR_INVALID_PARAMETER, "last error %u\n", error); -} - -START_TEST(format_msg) -{ - test_message_from_string(); - test_message_null_buffer(); -} diff --git a/rostests/winetests/kernel32/heap.c b/rostests/winetests/kernel32/heap.c deleted file mode 100755 index 29398622709..00000000000 --- a/rostests/winetests/kernel32/heap.c +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Unit test suite for heap functions - * - * Copyright 2003 Dimitrie O. Paun - * 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 - */ - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wine/test.h" - -#define MAGIC_DEAD 0xdeadbeef - -static SIZE_T resize_9x(SIZE_T size) -{ - DWORD dwSizeAligned = (size + 3) & ~3; - return max(dwSizeAligned, 12); /* at least 12 bytes */ -} - -START_TEST(heap) -{ - LPVOID mem; - LPVOID msecond; - DWORD res; - UINT flags; - HGLOBAL gbl; - HGLOBAL hsecond; - SIZE_T size; - - /* Heap*() functions */ - mem = HeapAlloc(GetProcessHeap(), 0, 0); - ok(mem != NULL, "memory not allocated for size 0\n"); - - mem = HeapReAlloc(GetProcessHeap(), 0, NULL, 10); - ok(mem == NULL, "memory allocated by HeapReAlloc\n"); - - for (size = 0; size <= 256; size++) - { - SIZE_T heap_size; - mem = HeapAlloc(GetProcessHeap(), 0, size); - heap_size = HeapSize(GetProcessHeap(), 0, mem); - ok(heap_size == size || heap_size == resize_9x(size), - "HeapSize returned %lu instead of %lu or %lu\n", heap_size, size, resize_9x(size)); - HeapFree(GetProcessHeap(), 0, mem); - } - - /* test some border cases of HeapAlloc and HeapReAlloc */ - mem = HeapAlloc(GetProcessHeap(), 0, 0); - ok(mem != NULL, "memory not allocated for size 0\n"); - msecond = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, ~0UL - 7); - ok(msecond == NULL, "HeapReAlloc(0xfffffff8) should have failed\n"); - msecond = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, ~0UL); - ok(msecond == NULL, "HeapReAlloc(0xffffffff) should have failed\n"); - HeapFree(GetProcessHeap(), 0, mem); - mem = HeapAlloc(GetProcessHeap(), 0, ~0UL); - ok(mem == NULL, "memory allocated for size ~0UL\n"); - - /* Global*() functions */ - gbl = GlobalAlloc(GMEM_MOVEABLE, 0); - ok(gbl != NULL, "global memory not allocated for size 0\n"); - - gbl = GlobalReAlloc(gbl, 10, GMEM_MOVEABLE); - ok(gbl != NULL, "Can't realloc global memory\n"); - size = GlobalSize(gbl); - ok(size >= 10 && size <= 16, "Memory not resized to size 10, instead size=%ld\n", size); - - gbl = GlobalReAlloc(gbl, 0, GMEM_MOVEABLE); - ok(gbl != NULL, "GlobalReAlloc should not fail on size 0\n"); - - size = GlobalSize(gbl); - ok(size == 0, "Memory not resized to size 0, instead size=%ld\n", size); - ok(GlobalFree(gbl) == NULL, "Memory not freed\n"); - size = GlobalSize(gbl); - ok(size == 0, "Memory should have been freed, size=%ld\n", size); - - gbl = GlobalReAlloc(0, 10, GMEM_MOVEABLE); - ok(gbl == NULL, "global realloc allocated memory\n"); - - /* GlobalLock / GlobalUnlock with a valid handle */ - gbl = GlobalAlloc(GMEM_MOVEABLE, 256); - - SetLastError(MAGIC_DEAD); - mem = GlobalLock(gbl); /* #1 */ - ok(mem != NULL, "returned %p with %d (expected '!= NULL')\n", mem, GetLastError()); - SetLastError(MAGIC_DEAD); - flags = GlobalFlags(gbl); - ok( flags == 1, "returned 0x%04x with %d (expected '0x0001')\n", - flags, GetLastError()); - - SetLastError(MAGIC_DEAD); - msecond = GlobalLock(gbl); /* #2 */ - ok( msecond == mem, "returned %p with %d (expected '%p')\n", - msecond, GetLastError(), mem); - SetLastError(MAGIC_DEAD); - flags = GlobalFlags(gbl); - ok( flags == 2, "returned 0x%04x with %d (expected '0x0002')\n", - flags, GetLastError()); - SetLastError(MAGIC_DEAD); - - SetLastError(MAGIC_DEAD); - res = GlobalUnlock(gbl); /* #1 */ - ok(res, "returned %d with %d (expected '!= 0')\n", res, GetLastError()); - SetLastError(MAGIC_DEAD); - flags = GlobalFlags(gbl); - ok( flags , "returned 0x%04x with %d (expected '!= 0')\n", - flags, GetLastError()); - - SetLastError(MAGIC_DEAD); - res = GlobalUnlock(gbl); /* #0 */ - /* NT: ERROR_SUCCESS (documented on MSDN), 9x: untouched */ - ok(!res && ((GetLastError() == ERROR_SUCCESS) || (GetLastError() == MAGIC_DEAD)), - "returned %d with %d (expected '0' with: ERROR_SUCCESS or " - "MAGIC_DEAD)\n", res, GetLastError()); - SetLastError(MAGIC_DEAD); - flags = GlobalFlags(gbl); - ok( !flags , "returned 0x%04x with %d (expected '0')\n", - flags, GetLastError()); - - /* Unlock an already unlocked Handle */ - SetLastError(MAGIC_DEAD); - res = GlobalUnlock(gbl); - /* NT: ERROR_NOT_LOCKED, 9x: untouched */ - ok( !res && - ((GetLastError() == ERROR_NOT_LOCKED) || (GetLastError() == MAGIC_DEAD)), - "returned %d with %d (expected '0' with: ERROR_NOT_LOCKED or " - "MAGIC_DEAD)\n", res, GetLastError()); - - GlobalFree(gbl); - /* invalid handles are caught in windows: */ - SetLastError(MAGIC_DEAD); - hsecond = GlobalFree(gbl); /* invalid handle: free memory twice */ - ok( (hsecond == gbl) && (GetLastError() == ERROR_INVALID_HANDLE), - "returned %p with 0x%08x (expected %p with ERROR_INVALID_HANDLE)\n", - hsecond, GetLastError(), gbl); - SetLastError(MAGIC_DEAD); - flags = GlobalFlags(gbl); - ok( (flags == GMEM_INVALID_HANDLE) && (GetLastError() == ERROR_INVALID_HANDLE), - "returned 0x%04x with 0x%08x (expected GMEM_INVALID_HANDLE with " - "ERROR_INVALID_HANDLE)\n", flags, GetLastError()); - SetLastError(MAGIC_DEAD); - size = GlobalSize(gbl); - ok( (size == 0) && (GetLastError() == ERROR_INVALID_HANDLE), - "returned %ld with 0x%08x (expected '0' with ERROR_INVALID_HANDLE)\n", - size, GetLastError()); - - SetLastError(MAGIC_DEAD); - mem = GlobalLock(gbl); - ok( (mem == NULL) && (GetLastError() == ERROR_INVALID_HANDLE), - "returned %p with 0x%08x (expected NULL with ERROR_INVALID_HANDLE)\n", - mem, GetLastError()); - - /* documented on MSDN: GlobalUnlock() return FALSE on failure. - Win9x and wine return FALSE with ERROR_INVALID_HANDLE, but on - NT 3.51 and XPsp2, TRUE with ERROR_INVALID_HANDLE is returned. - The similar Test for LocalUnlock() works on all Systems */ - SetLastError(MAGIC_DEAD); - res = GlobalUnlock(gbl); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "returned %d with %d (expected ERROR_INVALID_HANDLE)\n", - res, GetLastError()); - - gbl = GlobalAlloc(GMEM_DDESHARE, 100); - - /* first free */ - mem = GlobalFree(gbl); - ok(mem == NULL, "Expected NULL, got %p\n", mem); - - /* invalid free */ - SetLastError(MAGIC_DEAD); - mem = GlobalFree(gbl); - ok(mem == gbl, "Expected gbl, got %p\n", mem); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - gbl = GlobalAlloc(GMEM_DDESHARE, 100); - - res = GlobalUnlock(gbl); - ok(res == 1, "Expected 1, got %d\n", res); - - res = GlobalUnlock(gbl); - ok(res == 1, "Expected 1, got %d\n", res); - - /* GlobalSize on an invalid handle */ - SetLastError(MAGIC_DEAD); - size = GlobalSize((HGLOBAL)0xc042); - ok(size == 0, "Expected 0, got %ld\n", size); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - /* ####################################### */ - /* Local*() functions */ - gbl = LocalAlloc(LMEM_MOVEABLE, 0); - ok(gbl != NULL, "local memory not allocated for size 0\n"); - - gbl = LocalReAlloc(gbl, 10, LMEM_MOVEABLE); - ok(gbl != NULL, "Can't realloc local memory\n"); - size = LocalSize(gbl); - ok(size >= 10 && size <= 16, "Memory not resized to size 10, instead size=%ld\n", size); - - gbl = LocalReAlloc(gbl, 0, LMEM_MOVEABLE); - ok(gbl != NULL, "LocalReAlloc should not fail on size 0\n"); - - size = LocalSize(gbl); - ok(size == 0, "Memory not resized to size 0, instead size=%ld\n", size); - ok(LocalFree(gbl) == NULL, "Memory not freed\n"); - size = LocalSize(gbl); - ok(size == 0, "Memory should have been freed, size=%ld\n", size); - - gbl = LocalReAlloc(0, 10, LMEM_MOVEABLE); - ok(gbl == NULL, "local realloc allocated memory\n"); - - /* LocalLock / LocalUnlock with a valid handle */ - gbl = LocalAlloc(LMEM_MOVEABLE, 256); - SetLastError(MAGIC_DEAD); - mem = LocalLock(gbl); /* #1 */ - ok(mem != NULL, "returned %p with %d (expected '!= NULL')\n", mem, GetLastError()); - SetLastError(MAGIC_DEAD); - flags = LocalFlags(gbl); - ok( flags == 1, "returned 0x%04x with %d (expected '0x0001')\n", - flags, GetLastError()); - - SetLastError(MAGIC_DEAD); - msecond = LocalLock(gbl); /* #2 */ - ok( msecond == mem, "returned %p with %d (expected '%p')\n", - msecond, GetLastError(), mem); - SetLastError(MAGIC_DEAD); - flags = LocalFlags(gbl); - ok( flags == 2, "returned 0x%04x with %d (expected '0x0002')\n", - flags, GetLastError()); - SetLastError(MAGIC_DEAD); - - SetLastError(MAGIC_DEAD); - res = LocalUnlock(gbl); /* #1 */ - ok(res, "returned %d with %d (expected '!= 0')\n", res, GetLastError()); - SetLastError(MAGIC_DEAD); - flags = LocalFlags(gbl); - ok( flags , "returned 0x%04x with %d (expected '!= 0')\n", - flags, GetLastError()); - - SetLastError(MAGIC_DEAD); - res = LocalUnlock(gbl); /* #0 */ - /* NT: ERROR_SUCCESS (documented on MSDN), 9x: untouched */ - ok(!res && ((GetLastError() == ERROR_SUCCESS) || (GetLastError() == MAGIC_DEAD)), - "returned %d with %d (expected '0' with: ERROR_SUCCESS or " - "MAGIC_DEAD)\n", res, GetLastError()); - SetLastError(MAGIC_DEAD); - flags = LocalFlags(gbl); - ok( !flags , "returned 0x%04x with %d (expected '0')\n", - flags, GetLastError()); - - /* Unlock an already unlocked Handle */ - SetLastError(MAGIC_DEAD); - res = LocalUnlock(gbl); - /* NT: ERROR_NOT_LOCKED, 9x: untouched */ - ok( !res && - ((GetLastError() == ERROR_NOT_LOCKED) || (GetLastError() == MAGIC_DEAD)), - "returned %d with %d (expected '0' with: ERROR_NOT_LOCKED or " - "MAGIC_DEAD)\n", res, GetLastError()); - - LocalFree(gbl); - /* invalid handles are caught in windows: */ - SetLastError(MAGIC_DEAD); - hsecond = LocalFree(gbl); /* invalid handle: free memory twice */ - ok( (hsecond == gbl) && (GetLastError() == ERROR_INVALID_HANDLE), - "returned %p with 0x%08x (expected %p with ERROR_INVALID_HANDLE)\n", - hsecond, GetLastError(), gbl); - SetLastError(MAGIC_DEAD); - flags = LocalFlags(gbl); - ok( (flags == LMEM_INVALID_HANDLE) && (GetLastError() == ERROR_INVALID_HANDLE), - "returned 0x%04x with 0x%08x (expected LMEM_INVALID_HANDLE with " - "ERROR_INVALID_HANDLE)\n", flags, GetLastError()); - SetLastError(MAGIC_DEAD); - size = LocalSize(gbl); - ok( (size == 0) && (GetLastError() == ERROR_INVALID_HANDLE), - "returned %ld with 0x%08x (expected '0' with ERROR_INVALID_HANDLE)\n", - size, GetLastError()); - - SetLastError(MAGIC_DEAD); - mem = LocalLock(gbl); - ok( (mem == NULL) && (GetLastError() == ERROR_INVALID_HANDLE), - "returned %p with 0x%08x (expected NULL with ERROR_INVALID_HANDLE)\n", - mem, GetLastError()); - - /* This Test works the same on all Systems (GlobalUnlock() is different) */ - SetLastError(MAGIC_DEAD); - res = LocalUnlock(gbl); - ok(!res && (GetLastError() == ERROR_INVALID_HANDLE), - "returned %d with %d (expected '0' with ERROR_INVALID_HANDLE)\n", - res, GetLastError()); - - /* trying to lock empty memory should give an error */ - gbl = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,0); - ok(gbl != NULL, "returned NULL\n"); - SetLastError(MAGIC_DEAD); - mem = GlobalLock(gbl); - /* NT: ERROR_DISCARDED, 9x: untouched */ - ok( (mem == NULL) && - ((GetLastError() == ERROR_DISCARDED) || (GetLastError() == MAGIC_DEAD)), - "returned %p with 0x%x/%d (expected 'NULL' with: ERROR_DISCARDED or " - "MAGIC_DEAD)\n", mem, GetLastError(), GetLastError()); - - GlobalFree(gbl); -} diff --git a/rostests/winetests/kernel32/interlck.c b/rostests/winetests/kernel32/interlck.c deleted file mode 100644 index e67fb5fc20a..00000000000 --- a/rostests/winetests/kernel32/interlck.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Unit test suite for interlocked functions. - * - * Copyright 2006 Hervé Poussineau - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should 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 "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" - -static void test_InterlockedCompareExchange(void) -{ - LONG dest, res; - - dest = 0; - res = InterlockedCompareExchange( &dest, 1, 0 ); - ok( res == 0 && dest == 1, - "Expected 0 and 1, got %ld and %ld", res, dest ); - - dest = 1; - res = InterlockedCompareExchange( &dest, 2, 0 ); - ok( res == 1 && dest == 1, - "Expected 1 and 1, got %ld and %ld", res, dest ); -} - -static void test_InterlockedDecrement(void) -{ - LONG dest, res; - - dest = 1; - res = InterlockedDecrement( &dest ); - ok( res == 0 && dest == 0, - "Expected 0 and 0, got %ld and %ld", res, dest ); - - dest = 0; - res = InterlockedDecrement( &dest ); - ok( res == -1 && dest == -1, - "Expected -1 and -1, got %ld and %ld", res, dest ); - - dest = -1; - res = InterlockedDecrement( &dest ); - ok( res == -2 && dest == -2, - "Expected -2 and -2, got %ld and %ld", res, dest ); -} - -static void test_InterlockedExchange(void) -{ - LONG dest, res; - - dest = 0; - res = InterlockedExchange( &dest, 1 ); - ok( res == 0 && dest == 1, - "Expected 0 and 1, got %ld and %ld", res, dest ); - - dest = 1; - res = InterlockedExchange( &dest, 2 ); - ok( res == 1 && dest == 2, - "Expected 1 and 2, got %ld and %ld", res, dest ); - - dest = 1; - res = InterlockedExchange( &dest, -1 ); - ok( res == 1 && dest == -1, - "Expected 1 and -1, got %ld and %ld", res, dest ); -} - -static void test_InterlockedExchangeAdd(void) -{ - LONG dest, res; - - dest = 0; - res = InterlockedExchangeAdd( &dest, 1 ); - ok( res == 0 && dest == 1, - "Expected 0 and 1, got %ld and %ld", res, dest ); - - dest = 1; - res = InterlockedExchangeAdd( &dest, 2 ); - ok( res == 1 && dest == 3, - "Expected 1 and 3, got %ld and %ld", res, dest ); - - dest = 1; - res = InterlockedExchangeAdd( &dest, -1 ); - ok( res == 1 && dest == 0, - "Expected 1 and 0, got %ld and %ld", res, dest ); -} - -static void test_InterlockedIncrement(void) -{ - LONG dest, res; - - dest = -2; - res = InterlockedIncrement( &dest ); - ok( res == -1 && dest == -1, - "Expected -1 and -1, got %ld and %ld", res, dest ); - - dest = -1; - res = InterlockedIncrement( &dest ); - ok( res == 0 && dest == 0, - "Expected 0 and 0, got %ld and %ld", res, dest ); - - dest = 0; - res = InterlockedIncrement( &dest ); - ok( res == 1 && dest == 1, - "Expected 1 and 1, got %ld and %ld", res, dest ); -} - -START_TEST(interlck) -{ - test_InterlockedCompareExchange(); - test_InterlockedDecrement(); - test_InterlockedExchange(); - test_InterlockedExchangeAdd(); - test_InterlockedIncrement(); -} diff --git a/rostests/winetests/kernel32/kernel32.rbuild b/rostests/winetests/kernel32/kernel32.rbuild deleted file mode 100644 index 767a40226d9..00000000000 --- a/rostests/winetests/kernel32/kernel32.rbuild +++ /dev/null @@ -1,45 +0,0 @@ - - - - - . - - ntdll - kernel32 - advapi32 - actctx.c - alloc.c - atom.c - change.c - codepage.c - comm.c - console.c - debugger.c - directory.c - drive.c - environ.c - file.c - format_msg.c - - heap.c - interlck.c - loader.c - locale.c - mailslot.c - module.c - path.c - pipe.c - process.c - profile.c - resource.c - sync.c - thread.c - time.c - timer.c - toolhelp.c - version.c - virtual.c - volume.c - testlist.c - - diff --git a/rostests/winetests/kernel32/loader.c b/rostests/winetests/kernel32/loader.c deleted file mode 100644 index 363c2fdf254..00000000000 --- a/rostests/winetests/kernel32/loader.c +++ /dev/null @@ -1,482 +0,0 @@ -/* - * Unit test suite for the PE loader. - * - * Copyright 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 - */ - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wine/test.h" - -#define ALIGN_SIZE(size, alignment) (((size) + (alignment - 1)) & ~((alignment - 1))) - -static const struct -{ - WORD e_magic; /* 00: MZ Header signature */ - WORD unused[29]; - DWORD e_lfanew; /* 3c: Offset to extended header */ -} dos_header = -{ - IMAGE_DOS_SIGNATURE, { 0 }, sizeof(dos_header) -}; - -static IMAGE_NT_HEADERS nt_header = -{ - IMAGE_NT_SIGNATURE, /* Signature */ - { -#if defined __i386__ - IMAGE_FILE_MACHINE_I386, /* Machine */ -#elif defined __x86_64__ - IMAGE_FILE_MACHINE_AMD64, /* Machine */ -#else -# error You must specify the machine type -#endif - 1, /* NumberOfSections */ - 0, /* TimeDateStamp */ - 0, /* PointerToSymbolTable */ - 0, /* NumberOfSymbols */ - sizeof(IMAGE_OPTIONAL_HEADER), /* SizeOfOptionalHeader */ - IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_DLL /* Characteristics */ - }, - { IMAGE_NT_OPTIONAL_HDR_MAGIC, /* Magic */ - 1, /* MajorLinkerVersion */ - 0, /* MinorLinkerVersion */ - 0, /* SizeOfCode */ - 0, /* SizeOfInitializedData */ - 0, /* SizeOfUninitializedData */ - 0, /* AddressOfEntryPoint */ - 0x10, /* BaseOfCode, also serves as e_lfanew in the truncated MZ header */ - 0, /* BaseOfData */ - 0x10000000, /* ImageBase */ - 0, /* SectionAlignment */ - 0, /* FileAlignment */ - 4, /* MajorOperatingSystemVersion */ - 0, /* MinorOperatingSystemVersion */ - 1, /* MajorImageVersion */ - 0, /* MinorImageVersion */ - 4, /* MajorSubsystemVersion */ - 0, /* MinorSubsystemVersion */ - 0, /* Win32VersionValue */ - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000, /* SizeOfImage */ - sizeof(dos_header) + sizeof(nt_header), /* SizeOfHeaders */ - 0, /* CheckSum */ - IMAGE_SUBSYSTEM_WINDOWS_CUI, /* Subsystem */ - 0, /* DllCharacteristics */ - 0, /* SizeOfStackReserve */ - 0, /* SizeOfStackCommit */ - 0, /* SizeOfHeapReserve */ - 0, /* SizeOfHeapCommit */ - 0, /* LoaderFlags */ - 0, /* NumberOfRvaAndSizes */ - { { 0 } } /* DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] */ - } -}; - -static IMAGE_SECTION_HEADER section = -{ - ".rodata", /* Name */ - { 0x10 }, /* Misc */ - 0, /* VirtualAddress */ - 0x0a, /* SizeOfRawData */ - 0, /* PointerToRawData */ - 0, /* PointerToRelocations */ - 0, /* PointerToLinenumbers */ - 0, /* NumberOfRelocations */ - 0, /* NumberOfLinenumbers */ - IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ, /* Characteristics */ -}; - -START_TEST(loader) -{ - static const struct test_data - { - const void *dos_header; - DWORD size_of_dos_header; - WORD number_of_sections, size_of_optional_header; - DWORD section_alignment, file_alignment; - DWORD size_of_image, size_of_headers; - DWORD error; /* 0 means LoadLibrary should succeed */ - } td[] = - { - { &dos_header, sizeof(dos_header), - 1, 0, 0, 0, 0, 0, - ERROR_BAD_EXE_FORMAT - }, - { &dos_header, sizeof(dos_header), - 1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x1000, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0xe00, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER), - ERROR_BAD_EXE_FORMAT /* XP doesn't like too small image size */ - }, - { &dos_header, sizeof(dos_header), - 1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x1000, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER), - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x1000, - 0x1f00, - 0x1000, - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 1, sizeof(IMAGE_OPTIONAL_HEADER), 0x200, 0x200, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x200, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER), - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 1, sizeof(IMAGE_OPTIONAL_HEADER), 0x200, 0x1000, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER), - ERROR_BAD_EXE_FORMAT /* XP doesn't like alignments */ - }, - { &dos_header, sizeof(dos_header), - 1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x200, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER), - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 1, sizeof(IMAGE_OPTIONAL_HEADER), 0x1000, 0x200, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000, - 0x200, - ERROR_SUCCESS - }, - /* Mandatory are all fields up to SizeOfHeaders, everything else - * is really optional (at least that's true for XP). - */ - { &dos_header, sizeof(dos_header), - 1, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 0x200, 0x200, - sizeof(dos_header) + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum) + sizeof(IMAGE_SECTION_HEADER) + 0x10, - sizeof(dos_header) + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum) + sizeof(IMAGE_SECTION_HEADER), - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 0x200, 0x200, - 0xd0, /* beyond of the end of file */ - 0xc0, /* beyond of the end of file */ - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 0x200, 0x200, - 0x1000, - 0, - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 0x200, 0x200, - 1, - 0, - ERROR_SUCCESS - }, -#if 0 /* not power of 2 alignments need more test cases */ - { &dos_header, sizeof(dos_header), - 0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 0x300, 0x300, - 1, - 0, - ERROR_BAD_EXE_FORMAT /* alignment is not power of 2 */ - }, -#endif - { &dos_header, sizeof(dos_header), - 0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 4, 4, - 1, - 0, - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 1, 1, - 1, - 0, - ERROR_SUCCESS - }, - { &dos_header, sizeof(dos_header), - 0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), 0x200, 0x200, - 0, - 0, - ERROR_BAD_EXE_FORMAT /* image size == 0 -> failure */ - }, - /* the following data mimics the PE image which upack creates */ - { &dos_header, 0x10, - 1, 0x148, 0x1000, 0x200, - sizeof(dos_header) + sizeof(nt_header) + sizeof(IMAGE_SECTION_HEADER) + 0x1000, - 0x200, - ERROR_SUCCESS - }, - /* Minimal PE image that XP is able to load: 92 bytes */ - { &dos_header, 0x04, - 0, FIELD_OFFSET(IMAGE_OPTIONAL_HEADER, CheckSum), - 0x04 /* also serves as e_lfanew in the truncated MZ header */, 0x04, - 1, - 0, - ERROR_SUCCESS - } - }; - static const char filler[0x1000]; - static const char section_data[0x10] = "section data"; - int i; - DWORD dummy, file_size, file_align; - HANDLE hfile; - HMODULE hlib, hlib_as_data_file; - SYSTEM_INFO si; - char temp_path[MAX_PATH]; - char dll_name[MAX_PATH]; - - GetSystemInfo(&si); - trace("system page size 0x%04x\n", si.dwPageSize); - - /* prevent displaying of the "Unable to load this DLL" message box */ - SetErrorMode(SEM_FAILCRITICALERRORS); - - GetTempPath(MAX_PATH, temp_path); - - for (i = 0; i < sizeof(td)/sizeof(td[0]); i++) - { - GetTempFileName(temp_path, "ldr", 0, dll_name); - - /*trace("creating %s\n", dll_name);*/ - hfile = CreateFileA(dll_name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); - if (hfile == INVALID_HANDLE_VALUE) - { - ok(0, "could not create %s\n", dll_name); - break; - } - - SetLastError(0xdeadbeef); - ok(WriteFile(hfile, td[i].dos_header, td[i].size_of_dos_header, &dummy, NULL), - "WriteFile error %d\n", GetLastError()); - - nt_header.FileHeader.NumberOfSections = td[i].number_of_sections; - nt_header.FileHeader.SizeOfOptionalHeader = td[i].size_of_optional_header; - - nt_header.OptionalHeader.SectionAlignment = td[i].section_alignment; - nt_header.OptionalHeader.FileAlignment = td[i].file_alignment; - nt_header.OptionalHeader.SizeOfImage = td[i].size_of_image; - nt_header.OptionalHeader.SizeOfHeaders = td[i].size_of_headers; - SetLastError(0xdeadbeef); - ok(WriteFile(hfile, &nt_header, sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER), &dummy, NULL), - "WriteFile error %d\n", GetLastError()); - - if (nt_header.FileHeader.SizeOfOptionalHeader) - { - SetLastError(0xdeadbeef); - ok(WriteFile(hfile, &nt_header.OptionalHeader, - min(nt_header.FileHeader.SizeOfOptionalHeader, sizeof(IMAGE_OPTIONAL_HEADER)), - &dummy, NULL), - "WriteFile error %d\n", GetLastError()); - if (nt_header.FileHeader.SizeOfOptionalHeader > sizeof(IMAGE_OPTIONAL_HEADER)) - { - file_align = nt_header.FileHeader.SizeOfOptionalHeader - sizeof(IMAGE_OPTIONAL_HEADER); - assert(file_align < sizeof(filler)); - SetLastError(0xdeadbeef); - ok(WriteFile(hfile, filler, file_align, &dummy, NULL), - "WriteFile error %d\n", GetLastError()); - } - } - - assert(nt_header.FileHeader.NumberOfSections <= 1); - if (nt_header.FileHeader.NumberOfSections) - { - if (nt_header.OptionalHeader.SectionAlignment >= si.dwPageSize) - { - section.PointerToRawData = td[i].size_of_dos_header; - section.VirtualAddress = nt_header.OptionalHeader.SectionAlignment; - section.Misc.VirtualSize = section.SizeOfRawData * 10; - } - else - { - section.PointerToRawData = nt_header.OptionalHeader.SizeOfHeaders; - section.VirtualAddress = nt_header.OptionalHeader.SizeOfHeaders; - section.Misc.VirtualSize = 5; - } - - SetLastError(0xdeadbeef); - ok(WriteFile(hfile, §ion, sizeof(section), &dummy, NULL), - "WriteFile error %d\n", GetLastError()); - - /* section data */ - SetLastError(0xdeadbeef); - ok(WriteFile(hfile, section_data, sizeof(section_data), &dummy, NULL), - "WriteFile error %d\n", GetLastError()); - } - - file_size = GetFileSize(hfile, NULL); - CloseHandle(hfile); - - SetLastError(0xdeadbeef); - hlib = LoadLibrary(dll_name); - if (td[i].error == ERROR_SUCCESS) - { - MEMORY_BASIC_INFORMATION info; - - ok(hlib != 0, "%d: LoadLibrary error %d\n", i, GetLastError()); - - /* No point in crashing. Test crashes on Vista with some of the given files */ - if (hlib == 0) - { - skip("Failed to load dll number %d\n", i); - goto endloop; - } - - SetLastError(0xdeadbeef); - ok(VirtualQuery(hlib, &info, sizeof(info)) == sizeof(info), - "%d: VirtualQuery error %d\n", i, GetLastError()); - ok(info.BaseAddress == hlib, "%d: %p != %p\n", i, info.BaseAddress, hlib); - ok(info.AllocationBase == hlib, "%d: %p != %p\n", i, info.AllocationBase, hlib); - ok(info.AllocationProtect == PAGE_EXECUTE_WRITECOPY, "%d: %x != PAGE_EXECUTE_WRITECOPY\n", i, info.AllocationProtect); - ok(info.RegionSize == ALIGN_SIZE(nt_header.OptionalHeader.SizeOfImage, si.dwPageSize), "%d: got %lx != expected %x\n", - i, info.RegionSize, ALIGN_SIZE(nt_header.OptionalHeader.SizeOfImage, si.dwPageSize)); - ok(info.State == MEM_COMMIT, "%d: %x != MEM_COMMIT\n", i, info.State); - if (nt_header.OptionalHeader.SectionAlignment < si.dwPageSize) - ok(info.Protect == PAGE_EXECUTE_WRITECOPY, "%d: %x != PAGE_EXECUTE_WRITECOPY\n", i, info.Protect); - else - ok(info.Protect == PAGE_READONLY, "%d: %x != PAGE_READONLY\n", i, info.Protect); - ok(info.Type == SEC_IMAGE, "%d: %x != SEC_IMAGE\n", i, info.Type); - - SetLastError(0xdeadbeef); - ok(VirtualQuery((char *)hlib + info.RegionSize, &info, sizeof(info)) == sizeof(info), - "%d: VirtualQuery error %d\n", i, GetLastError()); - if (nt_header.OptionalHeader.SectionAlignment == si.dwPageSize || - nt_header.OptionalHeader.SectionAlignment == nt_header.OptionalHeader.FileAlignment) - { - ok(info.BaseAddress == (char *)hlib + ALIGN_SIZE(nt_header.OptionalHeader.SizeOfImage, si.dwPageSize), "%d: got %p != expected %p\n", - i, info.BaseAddress, (char *)hlib + ALIGN_SIZE(nt_header.OptionalHeader.SizeOfImage, si.dwPageSize)); - ok(info.AllocationBase == 0, "%d: %p != 0\n", i, info.AllocationBase); - ok(info.AllocationProtect == 0, "%d: %x != 0\n", i, info.AllocationProtect); - /*ok(info.RegionSize == not_practical_value, "%d: %lx != not_practical_value\n", i, info.RegionSize);*/ - ok(info.State == MEM_FREE, "%d: %x != MEM_FREE\n", i, info.State); - ok(info.Type == 0, "%d: %x != 0\n", i, info.Type); - ok(info.Protect == PAGE_NOACCESS, "%d: %x != PAGE_NOACCESS\n", i, info.Protect); - } - else - { - ok(info.Protect == PAGE_EXECUTE_WRITECOPY, "%d: %x != PAGE_EXECUTE_WRITECOPY\n", i, info.Protect); - ok(info.BaseAddress == hlib, "%d: got %p != expected %p\n", i, info.BaseAddress, hlib); - ok(info.AllocationBase == hlib, "%d: %p != %p\n", i, info.AllocationBase, hlib); - ok(info.AllocationProtect == PAGE_EXECUTE_WRITECOPY, "%d: %x != PAGE_EXECUTE_WRITECOPY\n", i, info.AllocationProtect); - ok(info.RegionSize == ALIGN_SIZE(file_size, si.dwPageSize), "%d: got %lx != expected %x\n", - i, info.RegionSize, ALIGN_SIZE(file_size, si.dwPageSize)); - ok(info.State == MEM_COMMIT, "%d: %x != MEM_COMMIT\n", i, info.State); - ok(info.Protect == PAGE_READONLY, "%d: %x != PAGE_READONLY\n", i, info.Protect); - ok(info.Type == SEC_IMAGE, "%d: %x != SEC_IMAGE\n", i, info.Type); - } - - /* header: check the zeroing of alignment */ - if (nt_header.OptionalHeader.SectionAlignment >= si.dwPageSize) - { - const char *start; - int size; - - start = (const char *)hlib + nt_header.OptionalHeader.SizeOfHeaders; - size = ALIGN_SIZE((ULONG_PTR)start, si.dwPageSize) - (ULONG_PTR)start; - ok(!memcmp(start, filler, size), "%d: header alignment is not cleared\n", i); - } - - if (nt_header.FileHeader.NumberOfSections) - { - SetLastError(0xdeadbeef); - ok(VirtualQuery((char *)hlib + section.VirtualAddress, &info, sizeof(info)) == sizeof(info), - "%d: VirtualQuery error %d\n", i, GetLastError()); - if (nt_header.OptionalHeader.SectionAlignment < si.dwPageSize) - { - ok(info.BaseAddress == (char *)hlib, "%d: got %p != expected %p\n", i, info.BaseAddress, (char *)hlib); - ok(info.RegionSize == ALIGN_SIZE(nt_header.OptionalHeader.SizeOfImage, si.dwPageSize), "%d: got %lx != expected %x\n", - i, info.RegionSize, ALIGN_SIZE(nt_header.OptionalHeader.SizeOfImage, si.dwPageSize)); - ok(info.Protect == PAGE_EXECUTE_WRITECOPY, "%d: %x != PAGE_EXECUTE_WRITECOPY\n", i, info.Protect); - } - else - { - ok(info.BaseAddress == (char *)hlib + section.VirtualAddress, "%d: got %p != expected %p\n", i, info.BaseAddress, (char *)hlib + section.VirtualAddress); - ok(info.RegionSize == ALIGN_SIZE(section.Misc.VirtualSize, si.dwPageSize), "%d: got %lx != expected %x\n", - i, info.RegionSize, ALIGN_SIZE(section.Misc.VirtualSize, si.dwPageSize)); - ok(info.Protect == PAGE_READONLY, "%d: %x != PAGE_READONLY\n", i, info.Protect); - } - ok(info.AllocationBase == hlib, "%d: %p != %p\n", i, info.AllocationBase, hlib); - ok(info.AllocationProtect == PAGE_EXECUTE_WRITECOPY, "%d: %x != PAGE_EXECUTE_WRITECOPY\n", i, info.AllocationProtect); - ok(info.State == MEM_COMMIT, "%d: %x != MEM_COMMIT\n", i, info.State); - ok(info.Type == SEC_IMAGE, "%d: %x != SEC_IMAGE\n", i, info.Type); - - if (nt_header.OptionalHeader.SectionAlignment >= si.dwPageSize) - ok(!memcmp((const char *)hlib + section.VirtualAddress + section.PointerToRawData, &nt_header, section.SizeOfRawData), "wrong section data\n"); - else - ok(!memcmp((const char *)hlib + section.PointerToRawData, section_data, section.SizeOfRawData), "wrong section data\n"); - - /* check the zeroing of alignment */ - if (nt_header.OptionalHeader.SectionAlignment >= si.dwPageSize) - { - const char *start; - int size; - - start = (const char *)hlib + section.VirtualAddress + section.PointerToRawData + section.SizeOfRawData; - size = ALIGN_SIZE((ULONG_PTR)start, si.dwPageSize) - (ULONG_PTR)start; - ok(memcmp(start, filler, size), "%d: alignment should not be cleared\n", i); - } - } - - SetLastError(0xdeadbeef); - hlib_as_data_file = LoadLibraryEx(dll_name, 0, LOAD_LIBRARY_AS_DATAFILE); - ok(hlib_as_data_file != 0, "LoadLibraryEx error %u\n", GetLastError()); - ok(hlib_as_data_file == hlib, "hlib_as_file and hlib are different\n"); - - SetLastError(0xdeadbeef); - ok(FreeLibrary(hlib), "FreeLibrary error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hlib = GetModuleHandle(dll_name); - ok(hlib != 0, "GetModuleHandle error %u\n", GetLastError()); - - SetLastError(0xdeadbeef); - ok(FreeLibrary(hlib_as_data_file), "FreeLibrary error %d\n", GetLastError()); - - hlib = GetModuleHandle(dll_name); - ok(!hlib, "GetModuleHandle should fail\n"); - - SetLastError(0xdeadbeef); - hlib_as_data_file = LoadLibraryEx(dll_name, 0, LOAD_LIBRARY_AS_DATAFILE); - ok(hlib_as_data_file != 0, "LoadLibraryEx error %u\n", GetLastError()); - ok((ULONG_PTR)hlib_as_data_file & 1, "hlib_as_data_file is even\n"); - - hlib = GetModuleHandle(dll_name); - ok(!hlib, "GetModuleHandle should fail\n"); - - SetLastError(0xdeadbeef); - ok(FreeLibrary(hlib_as_data_file), "FreeLibrary error %d\n", GetLastError()); - } - else - { /* LoadLibrary is expected to fail */ - ok(!hlib, "%d: LoadLibrary should fail\n", i); - - if (GetLastError() == ERROR_GEN_FAILURE) /* Win9x, broken behaviour */ - { - trace("skipping the loader test on Win9x\n"); - DeleteFile(dll_name); - return; - } - - ok(td[i].error == GetLastError(), "%d: expected error %d, got %d\n", - i, td[i].error, GetLastError()); - } - -endloop: - SetLastError(0xdeadbeef); - ok(DeleteFile(dll_name), "DeleteFile error %d\n", GetLastError()); - } -} diff --git a/rostests/winetests/kernel32/locale.c b/rostests/winetests/kernel32/locale.c deleted file mode 100755 index 60e6f114a8c..00000000000 --- a/rostests/winetests/kernel32/locale.c +++ /dev/null @@ -1,2325 +0,0 @@ -/* - * Unit tests for locale functions - * - * Copyright 2002 YASAR Mehmet - * Copyright 2003 Dmitry Timoshkov - * 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 - * We must pass LOCALE_NOUSEROVERRIDE (NUO) to formatting functions so that - * even when the user has overridden their default i8n settings (e.g. in - * the control panel i8n page), we will still get the expected results. - */ - -#include -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "winnls.h" - -static inline unsigned int strlenW( const WCHAR *str ) -{ - const WCHAR *s = str; - while (*s) s++; - return s - str; -} - -static 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; -} - -static inline WCHAR *strchrW( const WCHAR *str, WCHAR ch ) -{ - do { if (*str == ch) return (WCHAR *)str; } while (*str++); - return NULL; -} - -static inline int isdigitW( WCHAR wc ) -{ - WORD type; - GetStringTypeW( CT_CTYPE1, &wc, 1, &type ); - return type & C1_DIGIT; -} - -/* Some functions are only in later versions of kernel32.dll */ -static HMODULE hKernel32; -static WORD enumCount; - -typedef BOOL (WINAPI *EnumSystemLanguageGroupsAFn)(LANGUAGEGROUP_ENUMPROC, - DWORD, LONG_PTR); -static EnumSystemLanguageGroupsAFn pEnumSystemLanguageGroupsA; -typedef BOOL (WINAPI *EnumLanguageGroupLocalesAFn)(LANGGROUPLOCALE_ENUMPROC, - LGRPID, DWORD, LONG_PTR); -static EnumLanguageGroupLocalesAFn pEnumLanguageGroupLocalesA; -typedef BOOL (WINAPI *EnumUILanguagesAFn)(UILANGUAGE_ENUMPROC, - DWORD, LONG_PTR); -static EnumUILanguagesAFn pEnumUILanguagesA; - -typedef INT (WINAPI *FoldStringAFn)(DWORD, LPCSTR, INT, LPSTR, INT); -static FoldStringAFn pFoldStringA; -typedef INT (WINAPI *FoldStringWFn)(DWORD, LPCWSTR, INT, LPWSTR, INT); -static FoldStringWFn pFoldStringW; - -typedef BOOL (WINAPI *IsValidLanguageGroupFn)(LGRPID, DWORD); -static IsValidLanguageGroupFn pIsValidLanguageGroup; - -static void InitFunctionPointers(void) -{ - hKernel32 = GetModuleHandleA("kernel32"); - pEnumSystemLanguageGroupsA = (void*)GetProcAddress(hKernel32, "EnumSystemLanguageGroupsA"); - pEnumLanguageGroupLocalesA = (void*)GetProcAddress(hKernel32, "EnumLanguageGroupLocalesA"); - pFoldStringA = (void*)GetProcAddress(hKernel32, "FoldStringA"); - pFoldStringW = (void*)GetProcAddress(hKernel32, "FoldStringW"); - pIsValidLanguageGroup = (void*)GetProcAddress(hKernel32, "IsValidLanguageGroup"); - pEnumUILanguagesA = (void*)GetProcAddress(hKernel32, "EnumUILanguagesA"); -} - -#define eq(received, expected, label, type) \ - ok((received) == (expected), "%s: got " type " instead of " type "\n", \ - (label), (received), (expected)) - -#define BUFFER_SIZE 128 -#define COUNTOF(x) (sizeof(x)/sizeof(x)[0]) - -#define EXPECT_LEN(len) ok(ret == (len), "Expected Len %d, got %d\n", (int)(len), ret) -#define EXPECT_INVALID ok(GetLastError() == ERROR_INVALID_PARAMETER, \ - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()) -#define EXPECT_BUFFER ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, \ - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()) -#define EXPECT_FLAGS ok(GetLastError() == ERROR_INVALID_FLAGS, \ - "Expected ERROR_INVALID_FLAGS, got %d\n", GetLastError()) -#define EXPECT_INVALIDFLAGS ok(GetLastError() == ERROR_INVALID_FLAGS || \ - GetLastError() == ERROR_INVALID_PARAMETER, \ - "Expected ERROR_INVALID_FLAGS, got %d\n", GetLastError()) -#define EXPECT_LASTERROR_0 ok(GetLastError() == 0, \ - "Expected GetLastError() == 0, got %d\n", GetLastError()) -#define EXPECT_VALID ok(ret, "Expected ret != 0, got %d, error %d\n", ret, GetLastError()) - -#define STRINGSA(x,y) strcpy(input, x); strcpy(Expected, y); SetLastError(0); buffer[0] = '\0' -#define EXPECT_LENA EXPECT_LEN((int)strlen(Expected)+1) -#define EXPECT_EQA ok(strncmp(buffer, Expected, strlen(Expected)) == 0, \ - "Expected '%s', got '%s'\n", Expected, buffer) - -#define STRINGSW(x,y) MultiByteToWideChar(CP_ACP,0,x,-1,input,COUNTOF(input)); \ - MultiByteToWideChar(CP_ACP,0,y,-1,Expected,COUNTOF(Expected)); \ - SetLastError(0); buffer[0] = '\0' -#define EXPECT_LENW EXPECT_LEN((int)strlenW(Expected)+1) -#define EXPECT_EQW ok(strncmpW(buffer, Expected, strlenW(Expected)) == 0, "Bad conversion\n") -#define EXPECT_FALSE ok(FALSE == ret, "Expected return value FALSE, got TRUE\n") -#define EXPECT_TRUE ok(FALSE != ret, "Expected return value TRUE, got FALSE\n") - -#define NUO LOCALE_NOUSEROVERRIDE - -static void test_GetLocaleInfoA(void) -{ - int ret; - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - char buffer[BUFFER_SIZE]; - - ok(lcid == 0x409, "wrong LCID calculated - %d\n", lcid); - - /* HTMLKit and "Font xplorer lite" expect GetLocaleInfoA to - * partially fill the buffer even if it is too short. See bug 637. - */ - SetLastError(0); memset(buffer, 0, COUNTOF(buffer)); - ret = GetLocaleInfoA(lcid, NUO|LOCALE_SDAYNAME1, buffer, 0); - ok(ret == 7 && !buffer[0], "Expected len=7, got %d\n", ret); - - SetLastError(0); memset(buffer, 0, COUNTOF(buffer)); - ret = GetLocaleInfoA(lcid, NUO|LOCALE_SDAYNAME1, buffer, 3); - EXPECT_BUFFER; EXPECT_LEN(0); - ok(!strcmp(buffer, "Mon"), "Expected 'Mon', got '%s'\n", buffer); - - SetLastError(0); memset(buffer, 0, COUNTOF(buffer)); - ret = GetLocaleInfoA(lcid, NUO|LOCALE_SDAYNAME1, buffer, 10); - EXPECT_VALID; EXPECT_LEN(7); - ok(!strcmp(buffer, "Monday"), "Expected 'Monday', got '%s'\n", buffer); -} - -static void test_GetTimeFormatA(void) -{ - int ret; - SYSTEMTIME curtime; - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - char buffer[BUFFER_SIZE], input[BUFFER_SIZE], Expected[BUFFER_SIZE]; - - memset(&curtime, 2, sizeof(SYSTEMTIME)); - STRINGSA("tt HH':'mm'@'ss", ""); /* Invalid time */ - SetLastError(0xdeadbeef); - ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - curtime.wHour = 8; - curtime.wMinute = 56; - curtime.wSecond = 13; - curtime.wMilliseconds = 22; - STRINGSA("tt HH':'mm'@'ss", "AM 08:56@13"); /* Valid time */ - SetLastError(0xdeadbeef); - ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - /* MSDN: LOCALE_NOUSEROVERRIDE can't be specified with a format string */ - SetLastError(0xdeadbeef); - ret = GetTimeFormatA(lcid, NUO|TIME_FORCE24HOURFORMAT, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_FLAGS; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("tt HH':'mm'@'ss", "A"); /* Insufficient buffer */ - SetLastError(0xdeadbeef); - ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, input, buffer, 2); - EXPECT_BUFFER; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("tt HH':'mm'@'ss", "AM 08:56@13"); /* Calculate length only */ - ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, input, NULL, 0); - EXPECT_VALID; EXPECT_LENA; - - STRINGSA("", "8 AM"); /* TIME_NOMINUTESORSECONDS, default format */ - ret = GetTimeFormatA(lcid, NUO|TIME_NOMINUTESORSECONDS, &curtime, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("m1s2m3s4", ""); /* TIME_NOMINUTESORSECONDS/complex format */ - ret = GetTimeFormatA(lcid, TIME_NOMINUTESORSECONDS, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("", "8:56 AM"); /* TIME_NOSECONDS/Default format */ - ret = GetTimeFormatA(lcid, NUO|TIME_NOSECONDS, &curtime, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("h:m:s tt", "8:56 AM"); /* TIME_NOSECONDS */ - strcpy(Expected, "8:56 AM"); - ret = GetTimeFormatA(lcid, TIME_NOSECONDS, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("h.@:m.@:s.@:tt", "8.@:56AM"); /* Multiple delimiters */ - ret = GetTimeFormatA(lcid, TIME_NOSECONDS, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("s1s2s3", ""); /* Duplicate tokens */ - ret = GetTimeFormatA(lcid, TIME_NOSECONDS, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("t/tt", "A/AM"); /* AM time marker */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - curtime.wHour = 13; - STRINGSA("t/tt", "P/PM"); /* PM time marker */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("h1t2tt3m", "156"); /* TIME_NOTIMEMARKER: removes text around time marker token */ - ret = GetTimeFormatA(lcid, TIME_NOTIMEMARKER, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("h:m:s tt", "13:56:13 PM"); /* TIME_FORCE24HOURFORMAT */ - ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("h:m:s", "13:56:13"); /* TIME_FORCE24HOURFORMAT doesn't add time marker */ - ret = GetTimeFormatA(lcid, TIME_FORCE24HOURFORMAT, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - curtime.wHour = 14; /* change this to 14 or 2pm */ - curtime.wMinute = 5; - curtime.wSecond = 3; - STRINGSA("h hh H HH m mm s ss t tt", "2 02 14 14 5 05 3 03 P PM"); /* 24 hrs, leading 0 */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - curtime.wHour = 0; - STRINGSA("h/H/hh/HH", "12/0/12/00"); /* "hh" and "HH" */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("h:m:s tt", "12:5:3 AM"); /* non-zero flags should fail with format, doesn't */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - /* try to convert formatting strings with more than two letters - * "h:hh:hhh:H:HH:HHH:m:mm:mmm:M:MM:MMM:s:ss:sss:S:SS:SSS" - * NOTE: We expect any letter for which there is an upper case value - * we should see a replacement. For letters that DO NOT have - * upper case values we should see NO REPLACEMENT. - */ - curtime.wHour = 8; - curtime.wMinute = 56; - curtime.wSecond = 13; - curtime.wMilliseconds = 22; - STRINGSA("h:hh:hhh H:HH:HHH m:mm:mmm M:MM:MMM s:ss:sss S:SS:SSS", - "8:08:08 8:08:08 56:56:56 M:MM:MMM 13:13:13 S:SS:SSS"); - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("h", "text"); /* Don't write to buffer if len is 0 */ - strcpy(buffer, "text"); - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, 0); - EXPECT_VALID; EXPECT_LEN(2); EXPECT_EQA; - - STRINGSA("h 'h' H 'H' HH 'HH' m 'm' s 's' t 't' tt 'tt'", - "8 h 8 H 08 HH 56 m 13 s A t AM tt"); /* "'" preserves tokens */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("'''", "'"); /* invalid quoted string */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - /* test that msdn suggested single quotation usage works as expected */ - STRINGSA("''''", "'"); /* single quote mark */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("''HHHHHH", "08"); /* Normal use */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - /* and test for normal use of the single quotation mark */ - STRINGSA("'''HHHHHH'", "'HHHHHH"); /* Normal use */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("'''HHHHHH", "'HHHHHH"); /* Odd use */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("'123'tt", ""); /* TIME_NOTIMEMARKER drops literals too */ - ret = GetTimeFormatA(lcid, TIME_NOTIMEMARKER, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - curtime.wHour = 25; - STRINGSA("'123'tt", ""); /* Invalid time */ - SetLastError(0xdeadbeef); - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - curtime.wHour = 12; - curtime.wMonth = 60; /* Invalid */ - STRINGSA("h:m:s", "12:56:13"); /* Invalid date */ - ret = GetTimeFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; -} - -static void test_GetDateFormatA(void) -{ - int ret; - SYSTEMTIME curtime; - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - char buffer[BUFFER_SIZE], input[BUFFER_SIZE], Expected[BUFFER_SIZE]; - - memset(&curtime, 2, sizeof(SYSTEMTIME)); /* Invalid time */ - STRINGSA("ddd',' MMM dd yy",""); - SetLastError(0xdeadbeef); - ret = GetDateFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - curtime.wYear = 2002; - curtime.wMonth = 5; - curtime.wDay = 4; - curtime.wDayOfWeek = 3; - STRINGSA("ddd',' MMM dd yy","Sat, May 04 02"); /* Simple case */ - ret = GetDateFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - /* Same as above but with LOCALE_NOUSEROVERRIDE */ - STRINGSA("ddd',' MMM dd yy",""); /* Simple case */ - SetLastError(0xdeadbeef); - ret = GetDateFormatA(lcid, NUO, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_FLAGS; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("ddd',' MMM dd yy","Sat, May 04 02"); /* Format containing "'" */ - ret = GetDateFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - curtime.wHour = 36; /* Invalid */ - STRINGSA("ddd',' MMM dd ''''yy","Sat, May 04 '02"); /* Invalid time */ - ret = GetDateFormatA(lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("ddd',' MMM dd ''''yy",""); /* Get size only */ - ret = GetDateFormatA(lcid, 0, &curtime, input, NULL, 0); - EXPECT_VALID; EXPECT_LEN(16); EXPECT_EQA; - - STRINGSA("ddd',' MMM dd ''''yy",""); /* Buffer too small */ - SetLastError(0xdeadbeef); - ret = GetDateFormatA(lcid, 0, &curtime, input, buffer, 2); - EXPECT_BUFFER; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("ddd',' MMM dd ''''yy","5/4/2002"); /* Default to DATE_SHORTDATE */ - ret = GetDateFormat(lcid, NUO, &curtime, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; - if (strncmp(buffer, Expected, strlen(Expected)) && strncmp(buffer, "5/4/02", strlen(Expected)) != 0) - ok (0, "Expected '%s' or '5/4/02', got '%s'\n", Expected, buffer); - - STRINGSA("ddd',' MMM dd ''''yy", "Saturday, May 04, 2002"); /* DATE_LONGDATE */ - ret = GetDateFormat(lcid, NUO|DATE_LONGDATE, &curtime, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - /* test for expected DATE_YEARMONTH behavior with null format */ - /* NT4 returns ERROR_INVALID_FLAGS for DATE_YEARMONTH */ - STRINGSA("ddd',' MMM dd ''''yy", ""); /* DATE_YEARMONTH */ - SetLastError(0xdeadbeef); - ret = GetDateFormat(lcid, NUO|DATE_YEARMONTH, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_FLAGS; EXPECT_LEN(0); EXPECT_EQA; - - /* Test that using invalid DATE_* flags results in the correct error */ - /* and return values */ - STRINGSA("m/d/y", ""); /* Invalid flags */ - SetLastError(0xdeadbeef); - ret = GetDateFormat(lcid, DATE_YEARMONTH|DATE_SHORTDATE|DATE_LONGDATE, - &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_FLAGS; EXPECT_LEN(0); EXPECT_EQA; -} - -static void test_GetDateFormatW(void) -{ - int ret; - SYSTEMTIME curtime; - WCHAR buffer[BUFFER_SIZE], input[BUFFER_SIZE], Expected[BUFFER_SIZE]; - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - STRINGSW("",""); /* If flags is not zero then format must be NULL */ - ret = GetDateFormatW(LOCALE_SYSTEM_DEFAULT, DATE_LONGDATE, NULL, - input, buffer, COUNTOF(buffer)); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return; - EXPECT_FLAGS; EXPECT_LEN(0); EXPECT_EQW; - - STRINGSW("",""); /* NULL buffer, len > 0 */ - SetLastError(0xdeadbeef); - ret = GetDateFormatW (lcid, 0, NULL, input, NULL, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQW; - - STRINGSW("",""); /* NULL buffer, len == 0 */ - ret = GetDateFormatW (lcid, 0, NULL, input, NULL, 0); - EXPECT_VALID; EXPECT_LENW; EXPECT_EQW; - - curtime.wYear = 2002; - curtime.wMonth = 10; - curtime.wDay = 23; - curtime.wDayOfWeek = 45612; /* Should be 3 - Wednesday */ - curtime.wHour = 65432; /* Invalid */ - curtime.wMinute = 34512; /* Invalid */ - curtime.wSecond = 65535; /* Invalid */ - curtime.wMilliseconds = 12345; - STRINGSW("dddd d MMMM yyyy","Wednesday 23 October 2002"); /* Incorrect DOW and time */ - ret = GetDateFormatW (lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENW; EXPECT_EQW; - - /* Limit tests */ - - curtime.wYear = 1601; - curtime.wMonth = 1; - curtime.wDay = 1; - curtime.wDayOfWeek = 0; /* Irrelevant */ - curtime.wHour = 0; - curtime.wMinute = 0; - curtime.wSecond = 0; - curtime.wMilliseconds = 0; - STRINGSW("dddd d MMMM yyyy","Monday 1 January 1601"); - SetLastError(0xdeadbeef); - ret = GetDateFormatW (lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENW; EXPECT_EQW; - - curtime.wYear = 1600; - curtime.wMonth = 12; - curtime.wDay = 31; - curtime.wDayOfWeek = 0; /* Irrelevant */ - curtime.wHour = 23; - curtime.wMinute = 59; - curtime.wSecond = 59; - curtime.wMilliseconds = 999; - STRINGSW("dddd d MMMM yyyy","Friday 31 December 1600"); - SetLastError(0xdeadbeef); - ret = GetDateFormatW (lcid, 0, &curtime, input, buffer, COUNTOF(buffer)); - EXPECT_INVALID; -} - - -#define CY_POS_LEFT 0 -#define CY_POS_RIGHT 1 -#define CY_POS_LEFT_SPACE 2 -#define CY_POS_RIGHT_SPACE 3 - -static void test_GetCurrencyFormatA(void) -{ - static char szDot[] = { '.', '\0' }; - static char szComma[] = { ',', '\0' }; - static char szDollar[] = { '$', '\0' }; - int ret; - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE], input[BUFFER_SIZE]; - CURRENCYFMTA format; - - memset(&format, 0, sizeof(format)); - - STRINGSA("23",""); /* NULL output, length > 0 --> Error */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, 0, input, NULL, NULL, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("23,53",""); /* Invalid character --> Error */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("--",""); /* Double '-' --> Error */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("0-",""); /* Trailing '-' --> Error */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("0..",""); /* Double '.' --> Error */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA(" 0.1",""); /* Leading space --> Error */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("1234","$"); /* Length too small --> Write up to length chars */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, NUO, input, NULL, buffer, 2); - EXPECT_BUFFER; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("2353",""); /* Format and flags given --> Error */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, NUO, input, &format, buffer, COUNTOF(buffer)); - EXPECT_INVALIDFLAGS; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("2353",""); /* Invalid format --> Error */ - SetLastError(0xdeadbeef); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("2353","$2,353.00"); /* Valid number */ - ret = GetCurrencyFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("-2353","($2,353.00)"); /* Valid negative number */ - ret = GetCurrencyFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("2353.1","$2,353.10"); /* Valid real number */ - ret = GetCurrencyFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("2353.111","$2,353.11"); /* Too many DP --> Truncated */ - ret = GetCurrencyFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("2353.119","$2,353.12"); /* Too many DP --> Rounded */ - ret = GetCurrencyFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NumDigits = 0; /* No decimal separator */ - format.LeadingZero = 0; - format.Grouping = 0; /* No grouping char */ - format.NegativeOrder = 0; - format.PositiveOrder = CY_POS_LEFT; - format.lpDecimalSep = szDot; - format.lpThousandSep = szComma; - format.lpCurrencySymbol = szDollar; - - STRINGSA("2353","$2353"); /* No decimal or grouping chars expected */ - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NumDigits = 1; /* 1 DP --> Expect decimal separator */ - STRINGSA("2353","$2353.0"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.Grouping = 2; /* Group by 100's */ - STRINGSA("2353","$23,53.0"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.LeadingZero = 1; /* Always provide leading zero */ - STRINGSA(".5","$0.5"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.PositiveOrder = CY_POS_RIGHT; - STRINGSA("1","1.0$"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.PositiveOrder = CY_POS_LEFT_SPACE; - STRINGSA("1","$ 1.0"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.PositiveOrder = CY_POS_RIGHT_SPACE; - STRINGSA("1","1.0 $"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 0; - STRINGSA("-1","($1.0)"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 1; - STRINGSA("-1","-$1.0"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 2; - STRINGSA("-1","$-1.0"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 3; - STRINGSA("-1","$1.0-"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 4; - STRINGSA("-1","(1.0$)"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 5; - STRINGSA("-1","-1.0$"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 6; - STRINGSA("-1","1.0-$"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 7; - STRINGSA("-1","1.0$-"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 8; - STRINGSA("-1","-1.0 $"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 9; - STRINGSA("-1","-$ 1.0"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 10; - STRINGSA("-1","1.0 $-"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 11; - STRINGSA("-1","$ 1.0-"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 12; - STRINGSA("-1","$ -1.0"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 13; - STRINGSA("-1","1.0- $"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 14; - STRINGSA("-1","($ 1.0)"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = 15; - STRINGSA("-1","(1.0 $)"); - ret = GetCurrencyFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; -} - -#define NEG_PARENS 0 /* "(1.1)" */ -#define NEG_LEFT 1 /* "-1.1" */ -#define NEG_LEFT_SPACE 2 /* "- 1.1" */ -#define NEG_RIGHT 3 /* "1.1-" */ -#define NEG_RIGHT_SPACE 4 /* "1.1 -" */ - -static void test_GetNumberFormatA(void) -{ - static char szDot[] = { '.', '\0' }; - static char szComma[] = { ',', '\0' }; - int ret; - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE], input[BUFFER_SIZE]; - NUMBERFMTA format; - - memset(&format, 0, sizeof(format)); - - STRINGSA("23",""); /* NULL output, length > 0 --> Error */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, 0, input, NULL, NULL, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("23,53",""); /* Invalid character --> Error */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("--",""); /* Double '-' --> Error */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("0-",""); /* Trailing '-' --> Error */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("0..",""); /* Double '.' --> Error */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA(" 0.1",""); /* Leading space --> Error */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, 0, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("1234","1"); /* Length too small --> Write up to length chars */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, 2); - EXPECT_BUFFER; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("2353",""); /* Format and flags given --> Error */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, NUO, input, &format, buffer, COUNTOF(buffer)); - EXPECT_INVALIDFLAGS; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("2353",""); /* Invalid format --> Error */ - SetLastError(0xdeadbeef); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_INVALID; EXPECT_LEN(0); EXPECT_EQA; - - STRINGSA("2353","2,353.00"); /* Valid number */ - ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("-2353","-2,353.00"); /* Valid negative number */ - ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("-353","-353.00"); /* test for off by one error in grouping */ - ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("2353.1","2,353.10"); /* Valid real number */ - ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("2353.111","2,353.11"); /* Too many DP --> Truncated */ - ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - STRINGSA("2353.119","2,353.12"); /* Too many DP --> Rounded */ - ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NumDigits = 0; /* No decimal separator */ - format.LeadingZero = 0; - format.Grouping = 0; /* No grouping char */ - format.NegativeOrder = 0; - format.lpDecimalSep = szDot; - format.lpThousandSep = szComma; - - STRINGSA("2353","2353"); /* No decimal or grouping chars expected */ - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NumDigits = 1; /* 1 DP --> Expect decimal separator */ - STRINGSA("2353","2353.0"); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.Grouping = 2; /* Group by 100's */ - STRINGSA("2353","23,53.0"); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.LeadingZero = 1; /* Always provide leading zero */ - STRINGSA(".5","0.5"); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = NEG_PARENS; - STRINGSA("-1","(1.0)"); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = NEG_LEFT; - STRINGSA("-1","-1.0"); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = NEG_LEFT_SPACE; - STRINGSA("-1","- 1.0"); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = NEG_RIGHT; - STRINGSA("-1","1.0-"); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - format.NegativeOrder = NEG_RIGHT_SPACE; - STRINGSA("-1","1.0 -"); - ret = GetNumberFormatA(lcid, 0, input, &format, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - - lcid = MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT); - - if (IsValidLocale(lcid, 0)) - { - STRINGSA("-12345","-12 345,00"); /* Try French formatting */ - Expected[3] = 160; /* Non breaking space */ - ret = GetNumberFormatA(lcid, NUO, input, NULL, buffer, COUNTOF(buffer)); - EXPECT_VALID; EXPECT_LENA; EXPECT_EQA; - } -} - - -static void test_CompareStringA(void) -{ - int ret; - LCID lcid = MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT); - - ret = CompareStringA(lcid, NORM_IGNORECASE, "Salut", -1, "Salute", -1); - ok (ret== 1, "(Salut/Salute) Expected 1, got %d\n", ret); - - ret = CompareStringA(lcid, NORM_IGNORECASE, "Salut", -1, "SaLuT", -1); - ok (ret== 2, "(Salut/SaLuT) Expected 2, got %d\n", ret); - - ret = CompareStringA(lcid, NORM_IGNORECASE, "Salut", -1, "hola", -1); - ok (ret== 3, "(Salut/hola) Expected 3, got %d\n", ret); - - ret = CompareStringA(lcid, NORM_IGNORECASE, "haha", -1, "hoho", -1); - ok (ret== 1, "(haha/hoho) Expected 1, got %d\n", ret); - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - ret = CompareStringA(lcid, NORM_IGNORECASE, "haha", -1, "hoho", -1); - ok (ret== 1, "(haha/hoho) Expected 1, got %d\n", ret); - - ret = CompareStringA(lcid, NORM_IGNORECASE, "haha", -1, "hoho", 0); - ok (ret== 3, "(haha/hoho) Expected 3, got %d\n", ret); - - ret = CompareStringA(lcid, NORM_IGNORECASE, "Salut", 5, "saLuT", -1); - ok (ret == 2, "(Salut/saLuT) Expected 2, got %d\n", ret); - - /* test for CompareStringA flags */ - SetLastError(0xdeadbeef); - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0x10, "NULL", -1, "NULL", -1); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - ok(!ret, "CompareStringA must fail with invalid flag\n"); - - SetLastError(0xdeadbeef); - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, LOCALE_USE_CP_ACP, "NULL", -1, "NULL", -1); - ok(GetLastError() == 0xdeadbeef, "unexpected error code %d\n", GetLastError()); - ok(ret == CSTR_EQUAL, "CompareStringA error: %d != CSTR_EQUAL\n", ret); - /* end of test for CompareStringA flags */ - - ret = lstrcmpA("", ""); - ok (ret == 0, "lstrcmpA(\"\", \"\") should return 0, got %d\n", ret); - - ret = lstrcmpA(NULL, NULL); - ok (ret == 0, "lstrcmpA(NULL, NULL) should return 0, got %d\n", ret); - - ret = lstrcmpA("", NULL); - ok (ret == 1, "lstrcmpA(\"\", NULL) should return 1, got %d\n", ret); - - ret = lstrcmpA(NULL, ""); - ok (ret == -1, "lstrcmpA(NULL, \"\") should return -1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT,0,"EndDialog",-1,"_Property",-1); - ok( ret == 3, "EndDialog vs _Property ... expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT,0,"osp_vba.sreg0070",-1,"_IEWWBrowserComp",-1); - ok( ret == 3, "osp_vba.sreg0070 vs _IEWWBrowserComp ... expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT,0,"r",-1,"\\",-1); - ok( ret == 3, "r vs \\ ... expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT,0,"osp_vba.sreg0031", -1, "OriginalDatabase", -1 ); - ok( ret == 3, "osp_vba.sreg0031 vs OriginalDatabase ... expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "AAA", -1, "aaa", -1 ); - ok( ret == 3, "AAA vs aaa expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "AAA", -1, "aab", -1 ); - ok( ret == 1, "AAA vs aab expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "AAA", -1, "Aab", -1 ); - ok( ret == 1, "AAA vs Aab expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, ".AAA", -1, "Aab", -1 ); - ok( ret == 1, ".AAA vs Aab expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, ".AAA", -1, "A.ab", -1 ); - ok( ret == 1, ".AAA vs A.ab expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "aa", -1, "AB", -1 ); - ok( ret == 1, "aa vs AB expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "aa", -1, "Aab", -1 ); - ok( ret == 1, "aa vs Aab expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "aB", -1, "Aab", -1 ); - ok( ret == 3, "aB vs Aab expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "Ba", -1, "bab", -1 ); - ok( ret == 1, "Ba vs bab expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "{100}{83}{71}{71}{71}", -1, "Global_DataAccess_JRO", -1 ); - ok( ret == 1, "{100}{83}{71}{71}{71} vs Global_DataAccess_JRO expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "a", -1, "{", -1 ); - ok( ret == 3, "a vs { expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "A", -1, "{", -1 ); - ok( ret == 3, "A vs { expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "3.5", 0, "4.0", -1 ); - ok(ret == 1, "3.5/0 vs 4.0/-1 expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "3.5", -1, "4.0", -1 ); - ok(ret == 1, "3.5 vs 4.0 expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "3.520.4403.2", -1, "4.0.2927.10", -1 ); - ok(ret == 1, "3.520.4403.2 vs 4.0.2927.10 expected 1, got %d\n", ret); - - /* hyphen and apostrophe are treated differently depending on - * whether SORT_STRINGSORT specified or not - */ - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "-o", -1, "/m", -1 ); - ok(ret == 3, "-o vs /m expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "/m", -1, "-o", -1 ); - ok(ret == 1, "/m vs -o expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "-o", -1, "/m", -1 ); - ok(ret == 1, "-o vs /m expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "/m", -1, "-o", -1 ); - ok(ret == 3, "/m vs -o expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "'o", -1, "/m", -1 ); - ok(ret == 3, "'o vs /m expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "/m", -1, "'o", -1 ); - ok(ret == 1, "/m vs 'o expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "'o", -1, "/m", -1 ); - ok(ret == 1, "'o vs /m expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "/m", -1, "'o", -1 ); - ok(ret == 3, "/m vs 'o expected 3, got %d\n", ret); - - if (0) { /* this requires collation table patch to make it MS compatible */ - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "'o", -1, "-o", -1 ); - ok(ret == 1, "'o vs -o expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "'o", -1, "-o", -1 ); - ok(ret == 1, "'o vs -o expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "'", -1, "-", -1 ); - ok(ret == 1, "' vs - expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "'", -1, "-", -1 ); - ok(ret == 1, "' vs - expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "`o", -1, "/m", -1 ); - ok(ret == 3, "`o vs /m expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "/m", -1, "`o", -1 ); - ok(ret == 1, "/m vs `o expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "`o", -1, "/m", -1 ); - ok(ret == 3, "`o vs /m expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "/m", -1, "`o", -1 ); - ok(ret == 1, "/m vs `o expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "`o", -1, "-m", -1 ); - ok(ret == 1, "`o vs -m expected 1, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, 0, "-m", -1, "`o", -1 ); - ok(ret == 3, "-m vs `o expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "`o", -1, "-m", -1 ); - ok(ret == 3, "`o vs -m expected 3, got %d\n", ret); - - ret = CompareStringA(LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "-m", -1, "`o", -1 ); - ok(ret == 1, "-m vs `o expected 1, got %d\n", ret); - } - - ret = CompareStringA(LOCALE_USER_DEFAULT, 0, "aLuZkUtZ", 8, "aLuZkUtZ", 9); - ok(ret == 2, "aLuZkUtZ vs aLuZkUtZ\\0 expected 2, got %d\n", ret); - - ret = CompareStringA(LOCALE_USER_DEFAULT, 0, "aLuZkUtZ", 7, "aLuZkUtZ\0A", 10); - ok(ret == 1, "aLuZkUtZ vs aLuZkUtZ\\0A expected 1, got %d\n", ret); - - /* WinXP handles embedded NULLs differently than earlier versions */ - ret = CompareStringA(LOCALE_USER_DEFAULT, 0, "aLuZkUtZ", 8, "aLuZkUtZ\0A", 10); - ok(ret == 1 || ret == 2, "aLuZkUtZ vs aLuZkUtZ\\0A expected 1 or 2, got %d\n", ret); - - ret = CompareStringA(LOCALE_USER_DEFAULT, 0, "aLu\0ZkUtZ", 8, "aLu\0ZkUtZ\0A", 10); - ok(ret == 1 || ret == 2, "aLu\\0ZkUtZ vs aLu\\0ZkUtZ\\0A expected 1 or 2, got %d\n", ret); - - ret = CompareStringA(lcid, 0, "a\0b", -1, "a", -1); - ok(ret == 2, "a vs a expected 2, got %d\n", ret); - - ret = CompareStringA(lcid, 0, "a\0b", 4, "a", 2); - ok(ret == CSTR_EQUAL || /* win2k */ - ret == CSTR_GREATER_THAN, - "a\\0b vs a expected CSTR_EQUAL or CSTR_GREATER_THAN, got %d\n", ret); - - ret = CompareStringA(lcid, 0, "\2", 2, "\1", 2); - todo_wine ok(ret != 2, "\\2 vs \\1 expected unequal\n"); -} - -static void test_LCMapStringA(void) -{ - int ret, ret2; - char buf[256], buf2[256]; - static const char upper_case[] = "\tJUST! A, TEST; STRING 1/*+-.\r\n"; - static const char lower_case[] = "\tjust! a, test; string 1/*+-.\r\n"; - static const char symbols_stripped[] = "justateststring1"; - - SetLastError(0xdeadbeef); - ret = LCMapStringA(LOCALE_USER_DEFAULT, LOCALE_USE_CP_ACP | LCMAP_LOWERCASE, - lower_case, -1, buf, sizeof(buf)); - ok(ret == lstrlenA(lower_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenA(lower_case) + 1); - ok(!memcmp(buf, lower_case, ret), "LCMapStringA should return %s, but not %s\n", lower_case, buf); - - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE | LCMAP_UPPERCASE, - upper_case, -1, buf, sizeof(buf)); - ok(!ret, "LCMAP_LOWERCASE and LCMAP_UPPERCASE are mutually exclusive\n"); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_HIRAGANA | LCMAP_KATAKANA, - upper_case, -1, buf, sizeof(buf)); - ok(!ret, "LCMAP_HIRAGANA and LCMAP_KATAKANA are mutually exclusive\n"); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_HALFWIDTH | LCMAP_FULLWIDTH, - upper_case, -1, buf, sizeof(buf)); - ok(!ret, "LCMAP_HALFWIDTH | LCMAP_FULLWIDTH are mutually exclusive\n"); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_TRADITIONAL_CHINESE | LCMAP_SIMPLIFIED_CHINESE, - upper_case, -1, buf, sizeof(buf)); - ok(!ret, "LCMAP_TRADITIONAL_CHINESE and LCMAP_SIMPLIFIED_CHINESE are mutually exclusive\n"); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - - /* SORT_STRINGSORT must be used exclusively with LCMAP_SORTKEY */ - SetLastError(0xdeadbeef); - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE | SORT_STRINGSORT, - upper_case, -1, buf, sizeof(buf)); - ok(GetLastError() == ERROR_INVALID_FLAGS, "expected ERROR_INVALID_FLAGS, got %d\n", GetLastError()); - ok(!ret, "SORT_STRINGSORT without LCMAP_SORTKEY must fail\n"); - - /* test LCMAP_LOWERCASE */ - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, - upper_case, -1, buf, sizeof(buf)); - ok(ret == lstrlenA(upper_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenA(upper_case) + 1); - ok(!lstrcmpA(buf, lower_case), "LCMapStringA should return %s, but not %s\n", lower_case, buf); - - /* test LCMAP_UPPERCASE */ - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, - lower_case, -1, buf, sizeof(buf)); - ok(ret == lstrlenA(lower_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenA(lower_case) + 1); - ok(!lstrcmpA(buf, upper_case), "LCMapStringA should return %s, but not %s\n", upper_case, buf); - - /* test buffer overflow */ - SetLastError(0xdeadbeef); - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, - lower_case, -1, buf, 4); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "should return 0 and ERROR_INSUFFICIENT_BUFFER, got %d\n", ret); - - /* LCMAP_UPPERCASE or LCMAP_LOWERCASE should accept src == dst */ - lstrcpyA(buf, lower_case); - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, - buf, -1, buf, sizeof(buf)); - if (!ret) /* Win9x */ - trace("Ignoring LCMapStringA(LCMAP_UPPERCASE, buf, buf) error on Win9x\n"); - else - { - ok(ret == lstrlenA(lower_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenA(lower_case) + 1); - ok(!lstrcmpA(buf, upper_case), "LCMapStringA should return %s, but not %s\n", upper_case, buf); - } - lstrcpyA(buf, upper_case); - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, - buf, -1, buf, sizeof(buf)); - if (!ret) /* Win9x */ - trace("Ignoring LCMapStringA(LCMAP_LOWERCASE, buf, buf) error on Win9x\n"); - else - { - ok(ret == lstrlenA(upper_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenA(lower_case) + 1); - ok(!lstrcmpA(buf, lower_case), "LCMapStringA should return %s, but not %s\n", lower_case, buf); - } - - /* otherwise src == dst should fail */ - SetLastError(0xdeadbeef); - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY | LCMAP_UPPERCASE, - buf, 10, buf, sizeof(buf)); - ok(GetLastError() == ERROR_INVALID_FLAGS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER /* Win9x */, - "unexpected error code %d\n", GetLastError()); - ok(!ret, "src == dst without LCMAP_UPPERCASE or LCMAP_LOWERCASE must fail\n"); - - /* test whether '\0' is always appended */ - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - upper_case, -1, buf, sizeof(buf)); - ok(ret, "LCMapStringA must succeed\n"); - ret2 = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - upper_case, lstrlenA(upper_case), buf2, sizeof(buf2)); - ok(ret, "LCMapStringA must succeed\n"); - ok(ret == ret2, "lengths of sort keys must be equal\n"); - ok(!lstrcmpA(buf, buf2), "sort keys must be equal\n"); - - /* test LCMAP_SORTKEY | NORM_IGNORECASE */ - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY | NORM_IGNORECASE, - upper_case, -1, buf, sizeof(buf)); - ok(ret, "LCMapStringA must succeed\n"); - ret2 = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - lower_case, -1, buf2, sizeof(buf2)); - ok(ret2, "LCMapStringA must succeed\n"); - ok(ret == ret2, "lengths of sort keys must be equal\n"); - ok(!lstrcmpA(buf, buf2), "sort keys must be equal\n"); - - /* test LCMAP_SORTKEY | NORM_IGNORENONSPACE */ - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY | NORM_IGNORENONSPACE, - lower_case, -1, buf, sizeof(buf)); - ok(ret, "LCMapStringA must succeed\n"); - ret2 = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - lower_case, -1, buf2, sizeof(buf2)); - ok(ret2, "LCMapStringA must succeed\n"); - ok(ret == ret2, "lengths of sort keys must be equal\n"); - ok(!lstrcmpA(buf, buf2), "sort keys must be equal\n"); - - /* test LCMAP_SORTKEY | NORM_IGNORESYMBOLS */ - ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY | NORM_IGNORESYMBOLS, - lower_case, -1, buf, sizeof(buf)); - ok(ret, "LCMapStringA must succeed\n"); - ret2 = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - symbols_stripped, -1, buf2, sizeof(buf2)); - ok(ret2, "LCMapStringA must succeed\n"); - ok(ret == ret2, "lengths of sort keys must be equal\n"); - ok(!lstrcmpA(buf, buf2), "sort keys must be equal\n"); - - /* test NORM_IGNORENONSPACE */ - lstrcpyA(buf, "foo"); - ret = LCMapStringA(LOCALE_USER_DEFAULT, NORM_IGNORENONSPACE, - lower_case, -1, buf, sizeof(buf)); - ok(ret == lstrlenA(lower_case) + 1, "LCMapStringA should return %d, ret = %d\n", - lstrlenA(lower_case) + 1, ret); - ok(!lstrcmpA(buf, lower_case), "LCMapStringA should return %s, but not %s\n", lower_case, buf); - - /* test NORM_IGNORESYMBOLS */ - lstrcpyA(buf, "foo"); - ret = LCMapStringA(LOCALE_USER_DEFAULT, NORM_IGNORESYMBOLS, - lower_case, -1, buf, sizeof(buf)); - ok(ret == lstrlenA(symbols_stripped) + 1, "LCMapStringA should return %d, ret = %d\n", - lstrlenA(symbols_stripped) + 1, ret); - ok(!lstrcmpA(buf, symbols_stripped), "LCMapStringA should return %s, but not %s\n", lower_case, buf); - - /* test srclen = 0 */ - SetLastError(0xdeadbeef); - ret = LCMapStringA(LOCALE_USER_DEFAULT, 0, upper_case, 0, buf, sizeof(buf)); - ok(!ret, "LCMapStringA should fail with srclen = 0\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "unexpected error code %d\n", GetLastError()); -} - -static void test_LCMapStringW(void) -{ - int ret, ret2; - WCHAR buf[256], buf2[256]; - char *p_buf = (char *)buf, *p_buf2 = (char *)buf2; - static const WCHAR upper_case[] = {'\t','J','U','S','T','!',' ','A',',',' ','T','E','S','T',';',' ','S','T','R','I','N','G',' ','1','/','*','+','-','.','\r','\n',0}; - static const WCHAR lower_case[] = {'\t','j','u','s','t','!',' ','a',',',' ','t','e','s','t',';',' ','s','t','r','i','n','g',' ','1','/','*','+','-','.','\r','\n',0}; - static const WCHAR symbols_stripped[] = {'j','u','s','t','a','t','e','s','t','s','t','r','i','n','g','1',0}; - static const WCHAR fooW[] = {'f','o','o',0}; - - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE | LCMAP_UPPERCASE, - upper_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - trace("Skipping LCMapStringW tests on Win9x\n"); - return; - } - ok(!ret, "LCMAP_LOWERCASE and LCMAP_UPPERCASE are mutually exclusive\n"); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_HIRAGANA | LCMAP_KATAKANA, - upper_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(!ret, "LCMAP_HIRAGANA and LCMAP_KATAKANA are mutually exclusive\n"); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_HALFWIDTH | LCMAP_FULLWIDTH, - upper_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(!ret, "LCMAP_HALFWIDTH | LCMAP_FULLWIDTH are mutually exclusive\n"); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_TRADITIONAL_CHINESE | LCMAP_SIMPLIFIED_CHINESE, - upper_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(!ret, "LCMAP_TRADITIONAL_CHINESE and LCMAP_SIMPLIFIED_CHINESE are mutually exclusive\n"); - ok(GetLastError() == ERROR_INVALID_FLAGS, - "unexpected error code %d\n", GetLastError()); - - /* SORT_STRINGSORT must be used exclusively with LCMAP_SORTKEY */ - SetLastError(0xdeadbeef); - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE | SORT_STRINGSORT, - upper_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(GetLastError() == ERROR_INVALID_FLAGS, "expected ERROR_INVALID_FLAGS, got %d\n", GetLastError()); - ok(!ret, "SORT_STRINGSORT without LCMAP_SORTKEY must fail\n"); - - /* test LCMAP_LOWERCASE */ - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, - upper_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(ret == lstrlenW(upper_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenW(upper_case) + 1); - ok(!lstrcmpW(buf, lower_case), "string compare mismatch\n"); - - /* test LCMAP_UPPERCASE */ - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, - lower_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(ret == lstrlenW(lower_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenW(lower_case) + 1); - ok(!lstrcmpW(buf, upper_case), "string compare mismatch\n"); - - /* test buffer overflow */ - SetLastError(0xdeadbeef); - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, - lower_case, -1, buf, 4); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "should return 0 and ERROR_INSUFFICIENT_BUFFER, got %d\n", ret); - - /* LCMAP_UPPERCASE or LCMAP_LOWERCASE should accept src == dst */ - lstrcpyW(buf, lower_case); - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, - buf, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(ret == lstrlenW(lower_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenW(lower_case) + 1); - ok(!lstrcmpW(buf, upper_case), "string compare mismatch\n"); - - lstrcpyW(buf, upper_case); - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, - buf, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(ret == lstrlenW(upper_case) + 1, - "ret %d, error %d, expected value %d\n", - ret, GetLastError(), lstrlenW(lower_case) + 1); - ok(!lstrcmpW(buf, lower_case), "string compare mismatch\n"); - - /* otherwise src == dst should fail */ - SetLastError(0xdeadbeef); - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY | LCMAP_UPPERCASE, - buf, 10, buf, sizeof(buf)); - ok(GetLastError() == ERROR_INVALID_FLAGS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER /* Win9x */, - "unexpected error code %d\n", GetLastError()); - ok(!ret, "src == dst without LCMAP_UPPERCASE or LCMAP_LOWERCASE must fail\n"); - - /* test whether '\0' is always appended */ - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - upper_case, -1, buf, sizeof(buf)); - ok(ret, "LCMapStringW must succeed\n"); - ret2 = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - upper_case, lstrlenW(upper_case), buf2, sizeof(buf2)); - ok(ret, "LCMapStringW must succeed\n"); - ok(ret == ret2, "lengths of sort keys must be equal\n"); - ok(!lstrcmpA(p_buf, p_buf2), "sort keys must be equal\n"); - - /* test LCMAP_SORTKEY | NORM_IGNORECASE */ - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY | NORM_IGNORECASE, - upper_case, -1, buf, sizeof(buf)); - ok(ret, "LCMapStringW must succeed\n"); - ret2 = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - lower_case, -1, buf2, sizeof(buf2)); - ok(ret2, "LCMapStringW must succeed\n"); - ok(ret == ret2, "lengths of sort keys must be equal\n"); - ok(!lstrcmpA(p_buf, p_buf2), "sort keys must be equal\n"); - - /* test LCMAP_SORTKEY | NORM_IGNORENONSPACE */ - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY | NORM_IGNORENONSPACE, - lower_case, -1, buf, sizeof(buf)); - ok(ret, "LCMapStringW must succeed\n"); - ret2 = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - lower_case, -1, buf2, sizeof(buf2)); - ok(ret2, "LCMapStringW must succeed\n"); - ok(ret == ret2, "lengths of sort keys must be equal\n"); - ok(!lstrcmpA(p_buf, p_buf2), "sort keys must be equal\n"); - - /* test LCMAP_SORTKEY | NORM_IGNORESYMBOLS */ - ret = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY | NORM_IGNORESYMBOLS, - lower_case, -1, buf, sizeof(buf)); - ok(ret, "LCMapStringW must succeed\n"); - ret2 = LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_SORTKEY, - symbols_stripped, -1, buf2, sizeof(buf2)); - ok(ret2, "LCMapStringW must succeed\n"); - ok(ret == ret2, "lengths of sort keys must be equal\n"); - ok(!lstrcmpA(p_buf, p_buf2), "sort keys must be equal\n"); - - /* test NORM_IGNORENONSPACE */ - lstrcpyW(buf, fooW); - ret = LCMapStringW(LOCALE_USER_DEFAULT, NORM_IGNORENONSPACE, - lower_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(ret == lstrlenW(lower_case) + 1, "LCMapStringW should return %d, ret = %d\n", - lstrlenW(lower_case) + 1, ret); - ok(!lstrcmpW(buf, lower_case), "string comparison mismatch\n"); - - /* test NORM_IGNORESYMBOLS */ - lstrcpyW(buf, fooW); - ret = LCMapStringW(LOCALE_USER_DEFAULT, NORM_IGNORESYMBOLS, - lower_case, -1, buf, sizeof(buf)/sizeof(WCHAR)); - ok(ret == lstrlenW(symbols_stripped) + 1, "LCMapStringW should return %d, ret = %d\n", - lstrlenW(symbols_stripped) + 1, ret); - ok(!lstrcmpW(buf, symbols_stripped), "string comparison mismatch\n"); - - /* test srclen = 0 */ - SetLastError(0xdeadbeef); - ret = LCMapStringW(LOCALE_USER_DEFAULT, 0, upper_case, 0, buf, sizeof(buf)); - ok(!ret, "LCMapStringW should fail with srclen = 0\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "unexpected error code %d\n", GetLastError()); -} - -/* this requires collation table patch to make it MS compatible */ -const char *strings_sorted[] = -{ -"'", -"-", -"!", -"\"", -".", -":", -"\\", -"_", -"`", -"{", -"}", -"+", -"0", -"1", -"2", -"3", -"4", -"5", -"6", -"7", -"8", -"9", -"a", -"A", -"b", -"B", -"c", -"C" -}; - -const char *strings[] = -{ -"C", -"\"", -"9", -"'", -"}", -"-", -"7", -"+", -"`", -"1", -"a", -"5", -"\\", -"8", -"B", -"3", -"_", -"6", -"{", -"2", -"c", -"4", -"!", -"0", -"A", -":", -"b", -"." -}; - -static int compare_string1(const void *e1, const void *e2) -{ - const char *s1 = *(const char *const *)e1; - const char *s2 = *(const char *const *)e2; - - return lstrcmpA(s1, s2); -} - -static int compare_string2(const void *e1, const void *e2) -{ - const char *s1 = *(const char *const *)e1; - const char *s2 = *(const char *const *)e2; - - return CompareStringA(0, 0, s1, -1, s2, -1) - 2; -} - -static int compare_string3(const void *e1, const void *e2) -{ - const char *s1 = *(const char *const *)e1; - const char *s2 = *(const char *const *)e2; - char key1[256], key2[256]; - - LCMapStringA(0, LCMAP_SORTKEY, s1, -1, key1, sizeof(key1)); - LCMapStringA(0, LCMAP_SORTKEY, s2, -1, key2, sizeof(key2)); - return strcmp(key1, key2); -} - -static void test_sorting(void) -{ - char buf[256]; - char **str_buf = (char **)buf; - int i; - - assert(sizeof(buf) >= sizeof(strings)); - - /* 1. sort using lstrcmpA */ - memcpy(buf, strings, sizeof(strings)); - qsort(buf, sizeof(strings)/sizeof(strings[0]), sizeof(strings[0]), compare_string1); - for (i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) - { - ok(!strcmp(strings_sorted[i], str_buf[i]), - "qsort using lstrcmpA failed for element %d\n", i); - } - /* 2. sort using CompareStringA */ - memcpy(buf, strings, sizeof(strings)); - qsort(buf, sizeof(strings)/sizeof(strings[0]), sizeof(strings[0]), compare_string2); - for (i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) - { - ok(!strcmp(strings_sorted[i], str_buf[i]), - "qsort using CompareStringA failed for element %d\n", i); - } - /* 3. sort using sort keys */ - memcpy(buf, strings, sizeof(strings)); - qsort(buf, sizeof(strings)/sizeof(strings[0]), sizeof(strings[0]), compare_string3); - for (i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) - { - ok(!strcmp(strings_sorted[i], str_buf[i]), - "qsort using sort keys failed for element %d\n", i); - } -} - -static void test_FoldStringA(void) -{ - int ret, i; - char src[256], dst[256]; - static const char digits_src[] = { 0xB9,0xB2,0xB3,'\0' }; - static const char digits_dst[] = { '1','2','3','\0' }; - static const char composite_src[] = - { - 0x8a,0x8e,0x9a,0x9e,0x9f,0xc0,0xc1,0xc2, - 0xc3,0xc4,0xc5,0xc7,0xc8,0xc9,0xca,0xcb, - 0xcc,0xcd,0xce,0xcf,0xd1,0xd2,0xd3,0xd4, - 0xd5,0xd6,0xd8,0xd9,0xda,0xdb,0xdc,0xdd, - 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe7,0xe8, - 0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,0xf1, - 0xf2,0xf3,0xf4,0xf5,0xf6,0xf8,0xf9,0xfa, - 0xfb,0xfc,0xfd,0xff,'\0' - }; - static const char composite_dst[] = - { - 0x53,0x3f,0x5a,0x3f,0x73,0x3f,0x7a,0x3f, - 0x59,0xa8,0x41,0x60,0x41,0xb4,0x41,0x5e, - 0x41,0x7e,0x41,0xa8,0x41,0xb0,0x43,0xb8, - 0x45,0x60,0x45,0xb4,0x45,0x5e,0x45,0xa8, - 0x49,0x60,0x49,0xb4,0x49,0x5e,0x49,0xa8, - 0x4e,0x7e,0x4f,0x60,0x4f,0xb4,0x4f,0x5e, - 0x4f,0x7e,0x4f,0xa8,0x4f,0x3f,0x55,0x60, - 0x55,0xb4,0x55,0x5e,0x55,0xa8,0x59,0xb4, - 0x61,0x60,0x61,0xb4,0x61,0x5e,0x61,0x7e, - 0x61,0xa8,0x61,0xb0,0x63,0xb8,0x65,0x60, - 0x65,0xb4,0x65,0x5e,0x65,0xa8,0x69,0x60, - 0x69,0xb4,0x69,0x5e,0x69,0xa8,0x6e,0x7e, - 0x6f,0x60,0x6f,0xb4,0x6f,0x5e,0x6f,0x7e, - 0x6f,0xa8,0x6f,0x3f,0x75,0x60,0x75,0xb4, - 0x75,0x5e,0x75,0xa8,0x79,0xb4,0x79,0xa8,'\0' - }; - static const char ligatures_src[] = - { - 0x8C,0x9C,0xC6,0xDE,0xDF,0xE6,0xFE,'\0' - }; - static const char ligatures_dst[] = - { - 'O','E','o','e','A','E','T','H','s','s','a','e','t','h','\0' - }; - - if (!pFoldStringA) - return; /* FoldString is present in NT v3.1+, but not 95/98/Me */ - - /* these tests are locale specific */ - if (GetACP() != 1252) - { - trace("Skipping FoldStringA tests for a not Latin 1 locale\n"); - return; - } - - /* MAP_FOLDDIGITS */ - SetLastError(0); - ret = pFoldStringA(MAP_FOLDDIGITS, digits_src, -1, dst, 256); - if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - EXPECT_LEN(4); EXPECT_VALID; - ok(strcmp(dst, digits_dst) == 0, - "MAP_FOLDDIGITS: Expected '%s', got '%s'\n", digits_dst, dst); - for (i = 1; i < 256; i++) - { - if (!strchr(digits_src, i)) - { - src[0] = i; - src[1] = '\0'; - SetLastError(0); - ret = pFoldStringA(MAP_FOLDDIGITS, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - ok(dst[0] == src[0], - "MAP_FOLDDIGITS: Expected '%s', got '%s'\n", src, dst); - } - } - - /* MAP_EXPAND_LIGATURES */ - SetLastError(0); - ret = pFoldStringA(MAP_EXPAND_LIGATURES, ligatures_src, -1, dst, 256); - /* NT 4.0 doesn't support MAP_EXPAND_LIGATURES */ - if (!(ret == 0 && GetLastError() == ERROR_INVALID_FLAGS)) { - EXPECT_LEN(sizeof(ligatures_dst)); EXPECT_VALID; - ok(strcmp(dst, ligatures_dst) == 0, - "MAP_EXPAND_LIGATURES: Expected '%s', got '%s'\n", ligatures_dst, dst); - for (i = 1; i < 256; i++) - { - if (!strchr(ligatures_src, i)) - { - src[0] = i; - src[1] = '\0'; - SetLastError(0); - ret = pFoldStringA(MAP_EXPAND_LIGATURES, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - ok(dst[0] == src[0], - "MAP_EXPAND_LIGATURES: Expected '%s', got '%s'\n", src, dst); - } - } - } - - /* MAP_COMPOSITE */ - SetLastError(0); - ret = pFoldStringA(MAP_COMPOSITE, composite_src, -1, dst, 256); - EXPECT_VALID; - todo_wine - { - /* Wine gets close, but doesn't produce quite the same result as native */ - EXPECT_LEN(121); - ok(strcmp(dst, composite_dst) == 0, - "MAP_COMPOSITE: Expected '%s', got '%s'\n", composite_dst, dst); - } - - for (i = 1; i < 256; i++) - { - if (!strchr(composite_src, i)) - { - src[0] = i; - src[1] = '\0'; - SetLastError(0); - ret = pFoldStringA(MAP_COMPOSITE, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - ok(dst[0] == src[0], - "0x%02x, 0x%02x,0x%02x,0x%02x,\n", (unsigned char)src[0], - (unsigned char)dst[0],(unsigned char)dst[1],(unsigned char)dst[2]); - } - } - - /* MAP_FOLDCZONE */ - for (i = 1; i < 256; i++) - { - src[0] = i; - src[1] = '\0'; - SetLastError(0); - ret = pFoldStringA(MAP_FOLDCZONE, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - ok(src[0] == dst[0], - "MAP_FOLDCZONE: Expected 0x%02x, got 0x%02x\n", - (unsigned char)src[0], (unsigned char)dst[0]); - } - - /* MAP_PRECOMPOSED */ - for (i = 1; i < 256; i++) - { - src[0] = i; - src[1] = '\0'; - SetLastError(0); - ret = pFoldStringA(MAP_PRECOMPOSED, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - ok(src[0] == dst[0], - "MAP_PRECOMPOSED: Expected 0x%02x, got 0x%02x\n", - (unsigned char)src[0], (unsigned char)dst[0]); - } -} - -static void test_FoldStringW(void) -{ - int ret; - unsigned int i, j; - WCHAR src[256], dst[256], ch, prev_ch = 1; - static const DWORD badFlags[] = - { - 0, - MAP_PRECOMPOSED|MAP_COMPOSITE, - MAP_PRECOMPOSED|MAP_EXPAND_LIGATURES, - MAP_COMPOSITE|MAP_EXPAND_LIGATURES - }; - /* Ranges of digits 0-9 : Must be sorted! */ - static const WCHAR digitRanges[] = - { - 0x0030, /* '0'-'9' */ - 0x0660, /* Eastern Arabic */ - 0x06F0, /* Arabic - Hindu */ - 0x0966, /* Devengari */ - 0x09E6, /* Bengalii */ - 0x0A66, /* Gurmukhi */ - 0x0AE6, /* Gujarati */ - 0x0B66, /* Oriya */ - 0x0BE6, /* Tamil - No 0 */ - 0x0C66, /* Telugu */ - 0x0CE6, /* Kannada */ - 0x0D66, /* Maylayalam */ - 0x0E50, /* Thai */ - 0x0ED0, /* Laos */ - 0x2070, /* Superscript - 1, 2, 3 are out of sequence */ - 0x2080, /* Subscript */ - 0x245F, /* Circled - 0 is out of sequence */ - 0x2473, /* Bracketed */ - 0x2487, /* Full stop */ - 0x2775, /* Inverted circled - No 0 */ - 0x277F, /* Patterned circled - No 0 */ - 0x2789, /* Inverted Patterned circled - No 0 */ - 0xff10, /* Pliene chasse (?) */ - 0xffff /* Terminator */ - }; - /* Digits which are represented, but out of sequence */ - static const WCHAR outOfSequenceDigits[] = - { - 0xB9, /* Superscript 1 */ - 0xB2, /* Superscript 2 */ - 0xB3, /* Superscript 3 */ - 0x24EA, /* Circled 0 */ - '\0' /* Terminator */ - }; - /* Digits in digitRanges for which no representation is available */ - static const WCHAR noDigitAvailable[] = - { - 0x0BE6, /* No Tamil 0 */ - 0x2473, /* No Bracketed 0 */ - 0x2487, /* No 0 Full stop */ - 0x2775, /* No inverted circled 0 */ - 0x277F, /* No patterned circled */ - 0x2789, /* No inverted Patterned circled */ - '\0' /* Terminator */ - }; - /* Compatibility conversion results */ - static const WCHAR compat_F900_FA2F[256+48] = - { - 0x8c48, 0x66f4, 0x8eca, 0x8cc8, 0x6ed1, 0x4e32, 0x53e5, 0x9f9c, - 0x9f9c, 0x5951, 0x91d1, 0x5587, 0x5948, 0x61f6, 0x7669, 0x7f85, - 0x863f, 0x87ba, 0x88f8, 0x908f, 0x6a02, 0x6d1b, 0x70d9, 0x73de, - 0x843d, 0x916a, 0x99f1, 0x4e82, 0x5375, 0x6b04, 0x721b, 0x862d, - 0x9e1e, 0x5d50, 0x6feb, 0x85cd, 0x8964, 0x62c9, 0x81d8, 0x881f, - 0x5eca, 0x6717, 0x6d6a, 0x72fc, 0x0000, 0x4f86, 0x51b7, 0x52de, - 0x64c4, 0x6ad3, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c, 0x8def, - 0x9732, 0x9b6f, 0x9dfa, 0x788c, 0x797f, 0x7da0, 0x83c9, 0x9304, - 0x9e7f, 0x8ad6, 0x58df, 0x5f04, 0x7c60, 0x807e, 0x7262, 0x78ca, - 0x8cc2, 0x96f7, 0x58d8, 0x5c62, 0x6a13, 0x6dda, 0x6f0f, 0x7d2f, - 0x7e37, 0x964b, 0x52d2, 0x808b, 0x51dc, 0x51cc, 0x7a1c, 0x7dbe, - 0x83f1, 0x9675, 0x8b80, 0x62cf, 0x6a02, 0x8afe, 0x4e39, 0x5be7, - 0x6012, 0x7387, 0x7570, 0x5317, 0x78fb, 0x4fbf, 0x5fa9, 0x4e0d, - 0x6ccc, 0x6578, 0x7d22, 0x53c3, 0x585e, 0x7701, 0x8449, 0x8aaa, - 0x6bba, 0x8fb0, 0x6c88, 0x62fe, 0x82e5, 0x63a0, 0x7565, 0x4eae, - 0x5169, 0x0000, 0x6881, 0x7ce7, 0x826f, 0x8ad2, 0x91cf, 0x52f5, - 0x5442, 0x5973, 0x5eec, 0x65c5, 0x6ffe, 0x792a, 0x95ad, 0x9a6a, - 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x8f62, 0x5e74, 0x6190, - 0x6200, 0x649a, 0x6f23, 0x7149, 0x7489, 0x0000, 0x7df4, 0x806f, - 0x8f26, 0x84ee, 0x9023, 0x934a, 0x5217, 0x52a3, 0x54bd, 0x70c8, - 0x88c2, 0x8aaa, 0x5ec9, 0x5ff5, 0x637b, 0x6bae, 0x7c3e, 0x7375, - 0x4ee4, 0x56f9, 0x5be7, 0x5dba, 0x601c, 0x73b2, 0x7469, 0x7f9a, - 0x8046, 0x9234, 0x96f6, 0x9748, 0x9818, 0x4f8b, 0x79ae, 0x91b4, - 0x96b8, 0x60e1, 0x4e86, 0x50da, 0x5bee, 0x5c3f, 0x6599, 0x6a02, - 0x71ce, 0x7642, 0x84fc, 0x907c, 0x9f8d, 0x6688, 0x962e, 0x5289, - 0x677b, 0x67f3, 0x6d41, 0x6e9c, 0x7409, 0x7559, 0x786b, 0x7d10, - 0x985e, 0x516d, 0x622e, 0x9678, 0x502b, 0x5d19, 0x6dea, 0x8f2a, - 0x5f8b, 0x6144, 0x6817, 0x7387, 0x9686, 0x5229, 0x540f, 0x5c65, - 0x6613, 0x674e, 0x68a8, 0x6ce5, 0x7406, 0x75e2, 0x7f79, 0x0000, - 0x88e1, 0x91cc, 0x96e2, 0x533f, 0x6eba, 0x541d, 0x71d0, 0x7498, - 0x85fa, 0x0000, 0x9c57, 0x9e9f, 0x6797, 0x6dcb, 0x81e8, 0x7acb, - 0x7b20, 0x7c92, 0x72c0, 0x7099, 0x8b58, 0x4ec0, 0x8336, 0x523a, - 0x5207, 0x5ea6, 0x62d3, 0x7cd6, 0x5b85, 0x6d1e, 0x66b4, 0x8f3b, - 0x884c, 0x964d, 0x898b, 0x5ed3, 0x0000, 0x0000, 0x0000, 0x0000, - 0x585a, 0x0000, 0x6674, 0x0000, 0x0000, 0x51de, 0x8c6c, 0x76ca, - 0x0000, 0x795e, 0x7965, 0x798f, 0x9756, 0x7cbe, 0x7fbd, 0x0000, - 0x0000, 0x0000, 0x8af8, 0x0000, 0x0000, 0x9038, 0x90fd, 0x0000, - 0x0000, 0x0000, 0x98ef, 0x98fc, 0x9928, 0x9db4, 0x0000, 0x0000 - }; - static const WCHAR compat_FE30_FEF7[200] = - { - 0x2025, 0x2014, 0x2013, 0x005f, 0x005f, 0x0028, 0x0029, 0x007b, - 0x007d, 0x3014, 0x3015, 0x3010, 0x3011, 0x300a, 0x300b, 0x3008, - 0x3009, 0x300c, 0x300d, 0x300e, 0x300f, 0x0000, 0x0000, 0x0000, - 0x0000, 0x203e, 0x203e, 0x203e, 0x203e, 0x005f, 0x005f, 0x005f, - 0x002c, 0x3001, 0x002e, 0x0000, 0x003b, 0x003a, 0x003f, 0x0021, - 0x2014, 0x0028, 0x0029, 0x007b, 0x007d, 0x3014, 0x3015, 0x0023, - 0x0026, 0x002a, 0x002b, 0x002d, 0x003c, 0x003e, 0x003d, 0x0000, - 0x0000, 0x0024, 0x0025, 0x0040, 0x0000, 0x0000, 0x0000, 0x0000, - 0x064b, 0x064b, 0x064c, 0x0000, 0x064d, 0x0000, 0x064e, 0x064e, - 0x064f, 0x064f, 0x0650, 0x0650, 0x0651, 0x0651, 0x0652, 0x0652, - 0x0621, 0x0622, 0x0622, 0x0623, 0x0623, 0x0624, 0x0624, 0x0625, - 0x0625, 0x0626, 0x0626, 0x0626, 0x0626, 0x0627, 0x0627, 0x0628, - 0x0628, 0x0628, 0x0628, 0x0629, 0x0629, 0x062a, 0x062a, 0x062a, - 0x062a, 0x062b, 0x062b, 0x062b, 0x062b, 0x062c, 0x062c, 0x062c, - 0x062c, 0x062d, 0x062d, 0x062d, 0x062d, 0x062e, 0x062e, 0x062e, - 0x062e, 0x062f, 0x062f, 0x0630, 0x0630, 0x0631, 0x0631, 0x0632, - 0x0632, 0x0633, 0x0633, 0x0633, 0x0633, 0x0634, 0x0634, 0x0634, - 0x0634, 0x0635, 0x0635, 0x0635, 0x0635, 0x0636, 0x0636, 0x0636, - 0x0636, 0x0637, 0x0637, 0x0637, 0x0637, 0x0638, 0x0638, 0x0638, - 0x0638, 0x0639, 0x0639, 0x0639, 0x0639, 0x063a, 0x063a, 0x063a, - 0x063a, 0x0641, 0x0641, 0x0641, 0x0641, 0x0642, 0x0642, 0x0642, - 0x0642, 0x0643, 0x0643, 0x0643, 0x0643, 0x0644, 0x0644, 0x0644, - 0x0644, 0x0645, 0x0645, 0x0645, 0x0645, 0x0646, 0x0646, 0x0646, - 0x0646, 0x0647, 0x0647, 0x0647, 0x0647, 0x0648, 0x0648, 0x0649, - 0x0649, 0x064a, 0x064a, 0x064a, 0x064a, 0x0000, 0x0000, 0x0000 - }; - static const WCHAR compat_FF00_FFEF[240] = - { - 0x0000, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x0000, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x0000, - 0x0000, 0x3002, 0x300c, 0x300d, 0x3001, 0x30fb, 0x30f2, 0x30a1, - 0x30a3, 0x30a5, 0x30a7, 0x30a9, 0x30e3, 0x30e5, 0x30e7, 0x30c3, - 0x30fc, 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa, 0x30ab, 0x30ad, - 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, - 0x30bf, 0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, - 0x30cd, 0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, - 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, - 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f3, 0x309b, 0x309c, - 0x3164, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, - 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, - 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, - 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x0000, - 0x0000, 0x0000, 0x314f, 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, - 0x0000, 0x0000, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a, - 0x0000, 0x0000, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, - 0x0000, 0x0000, 0x3161, 0x3162, 0x3163, 0x0000, 0x0000, 0x0000, - 0x00a2, 0x00a3, 0x00ac, 0x00af, 0x00a6, 0x00a5, 0x20a9, 0x0000, - 0x2502, 0x2190, 0x2191, 0x2192, 0x2193, 0x25a0, 0x25cb, 0x0000 - }; - static const WCHAR ligatures_src[] = - { - 0x00c6, 0x00de, 0x00df, 0x00e6, 0x00fe, 0x0132, 0x0133, 0x0152, - 0x0153, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01c8, 0x01c9, 0x01ca, - 0x01cb, 0x01cc, 0x01e2, 0x01e3, 0x01f1, 0x01f2, 0x01f3, 0x01fc, - 0x01fd, 0x05f0, 0x05f1, 0x05f2, 0xfb00, 0xfb01, 0xfb02, 0xfb03, - 0xfb04, 0xfb05, 0xfb06, '\0' - }; - static const WCHAR ligatures_dst[] = - { - 'A','E','T','H','s','s','a','e','t','h','I','J','i','j','O','E','o','e', - 'D',0x017d,'D',0x017e,'d',0x017e,'L','J','L','j','l','j','N','J','N','j', - 'n','j',0x0100,0x0112,0x0101,0x0113,'D','Z','D','z','d','z',0x00c1,0x00c9, - 0x00e1,0x00e9,0x05d5,0x05d5,0x05d5,0x05d9,0x05d9,0x05d9,'f','f','f','i', - 'f','l','f','f','i','f','f','l',0x017f,'t','s','t','\0' - }; - - if (!pFoldStringW) - { - skip("FoldStringW is not available\n"); - return; /* FoldString is present in NT v3.1+, but not 95/98/Me */ - } - - /* Invalid flag combinations */ - for (i = 0; i < sizeof(badFlags)/sizeof(badFlags[0]); i++) - { - src[0] = dst[0] = '\0'; - SetLastError(0); - ret = pFoldStringW(badFlags[i], src, 256, dst, 256); - if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - skip("FoldStringW is not implemented\n"); - return; - } - EXPECT_LEN(0); EXPECT_FLAGS; - } - - /* src & dst cannot be the same */ - SetLastError(0); - ret = pFoldStringW(MAP_FOLDCZONE, src, -1, src, 256); - EXPECT_LEN(0); EXPECT_INVALID; - - /* src can't be NULL */ - SetLastError(0); - ret = pFoldStringW(MAP_FOLDCZONE, NULL, -1, dst, 256); - EXPECT_LEN(0); EXPECT_INVALID; - - /* srclen can't be 0 */ - SetLastError(0); - ret = pFoldStringW(MAP_FOLDCZONE, src, 0, dst, 256); - EXPECT_LEN(0); EXPECT_INVALID; - - /* dstlen can't be < 0 */ - SetLastError(0); - ret = pFoldStringW(MAP_FOLDCZONE, src, -1, dst, -1); - EXPECT_LEN(0); EXPECT_INVALID; - - /* Ret includes terminating NUL which is appended if srclen = -1 */ - SetLastError(0); - src[0] = 'A'; - src[1] = '\0'; - dst[0] = '\0'; - ret = pFoldStringW(MAP_FOLDCZONE, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - ok(dst[0] == 'A' && dst[1] == '\0', - "srclen=-1: Expected ret=2 [%d,%d], got ret=%d [%d,%d], err=%d\n", - 'A', '\0', ret, dst[0], dst[1], GetLastError()); - - /* If size is given, result is not NUL terminated */ - SetLastError(0); - src[0] = 'A'; - src[1] = 'A'; - dst[0] = 'X'; - dst[1] = 'X'; - ret = pFoldStringW(MAP_FOLDCZONE, src, 1, dst, 256); - EXPECT_LEN(1); EXPECT_VALID; - ok(dst[0] == 'A' && dst[1] == 'X', - "srclen=1: Expected ret=1, [%d,%d], got ret=%d,[%d,%d], err=%d\n", - 'A','X', ret, dst[0], dst[1], GetLastError()); - - /* MAP_FOLDDIGITS */ - for (j = 0; j < sizeof(digitRanges)/sizeof(digitRanges[0]); j++) - { - /* Check everything before this range */ - for (ch = prev_ch; ch < digitRanges[j]; ch++) - { - SetLastError(0); - src[0] = ch; - src[1] = dst[0] = '\0'; - ret = pFoldStringW(MAP_FOLDDIGITS, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - - ok(dst[0] == ch || strchrW(outOfSequenceDigits, ch) || - /* Wine (correctly) maps all Unicode 4.0+ digits */ - isdigitW(ch) || (ch >= 0x24F5 && ch <= 0x24FD) || ch == 0x24FF || - (ch >= 0x1369 && ch <= 0x1371), - "MAP_FOLDDIGITS: ch %d 0x%04x Expected unchanged got %d\n", ch, ch, dst[0]); - } - - if (digitRanges[j] == 0xffff) - break; /* Finished the whole code point space */ - - for (ch = digitRanges[j]; ch < digitRanges[j] + 10; ch++) - { - WCHAR c; - - /* Map out of sequence characters */ - if (ch == 0x2071) c = 0x00B9; /* Superscript 1 */ - else if (ch == 0x2072) c = 0x00B2; /* Superscript 2 */ - else if (ch == 0x2073) c = 0x00B3; /* Superscript 3 */ - else if (ch == 0x245F) c = 0x24EA; /* Circled 0 */ - else c = ch; - SetLastError(0); - src[0] = c; - src[1] = dst[0] = '\0'; - ret = pFoldStringW(MAP_FOLDDIGITS, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - - ok((dst[0] == '0' + ch - digitRanges[j] && dst[1] == '\0') || - strchrW(noDigitAvailable, c), - "MAP_FOLDDIGITS: ch %d Expected %d got %d\n", - ch, '0' + digitRanges[j] - ch, dst[0]); - } - prev_ch = ch; - } - - /* MAP_FOLDCZONE */ - for (ch = 1; ch <0xffff; ch++) - { - WCHAR expected = 0; - - if (ch >= 0xF900 && ch <= 0xFA2F) - expected = compat_F900_FA2F[ch - 0xF900]; - else if (ch >= 0xFE30 && ch <= 0xFEF7) - expected = compat_FE30_FEF7[ch - 0xFE30]; - else if (ch >= 0xFF00 && ch <= 0xFFEF) - expected = compat_FF00_FFEF[ch - 0xFF00]; - - if (!expected) - expected = ch; - - SetLastError(0); - src[0] = ch; - src[1] = dst[0] = '\0'; - ret = pFoldStringW(MAP_FOLDCZONE, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - ok(dst[0] == expected || - /* Wine (correctly) uses updated mappings for some Unicode 4.0 chars */ - /* FIXME: But they should be re-checked */ - ch == 0xf92c || ch == 0xf979 || ch == 0xf995 || ch == 0xf9e7 || - ch == 0xf9f1 || - (0xfa0c <= ch && ch <= 0xfa6a) || - (0xfa70 <= ch && ch <= 0xfad9) || - ch == 0xfe47 || ch == 0xfe48 || ch == 0xfe68 || - (0xfe70 <= ch && ch <= 0xfe7f) || - ch == 0xff3c || ch == 0xff5f || ch == 0xff60 || - ch == 0xff9e || ch == 0xff9f, - "MAP_FOLDCZONE: ch %d 0x%04x Expected 0x%04x got 0x%04x\n", - ch, ch, expected, dst[0]); - } - - /* MAP_EXPAND_LIGATURES */ - SetLastError(0); - ret = pFoldStringW(MAP_EXPAND_LIGATURES, ligatures_src, -1, dst, 256); - /* NT 4.0 doesn't support MAP_EXPAND_LIGATURES */ - if (!(ret == 0 && GetLastError() == ERROR_INVALID_FLAGS)) { - EXPECT_LEN(sizeof(ligatures_dst)/sizeof(ligatures_dst[0])); EXPECT_VALID; - ok(!memcmp(dst, ligatures_dst, sizeof(ligatures_dst)), - "MAP_EXPAND_LIGATURES: Expanded incorrectly\n"); - for (i = 1; i <= 0xffff; i++) - { - if (!strchrW(ligatures_src, i)) - { - src[0] = i; - src[1] = '\0'; - SetLastError(0); - ret = pFoldStringW(MAP_EXPAND_LIGATURES, src, -1, dst, 256); - EXPECT_LEN(2); EXPECT_VALID; - ok(dst[0] == src[0], - "MAP_EXPAND_LIGATURES: 0x%02x : Expected 0x%02x, got 0x%02x\n", - i, src[0], dst[0]); - } - } - } - - /* FIXME: MAP_PRECOMPOSED : MAP_COMPOSITE */ -} - - - -#define LCID_OK(l) \ - ok(lcid == l, "Expected lcid = %08x, got %08x\n", l, lcid) -#define MKLCID(x,y,z) MAKELCID(MAKELANGID(x, y), z) -#define LCID_RES(src, res) lcid = ConvertDefaultLocale(src); LCID_OK(res) -#define TEST_LCIDLANG(a,b) LCID_RES(MAKELCID(a,b), MAKELCID(a,b)) -#define TEST_LCID(a,b,c) LCID_RES(MKLCID(a,b,c), MKLCID(a,b,c)) - -static void test_ConvertDefaultLocale(void) -{ - LCID lcid; - - /* Doesn't change lcid, even if non default sublang/sort used */ - TEST_LCID(LANG_ENGLISH, SUBLANG_ENGLISH_US, SORT_DEFAULT); - TEST_LCID(LANG_ENGLISH, SUBLANG_ENGLISH_UK, SORT_DEFAULT); - TEST_LCID(LANG_JAPANESE, SUBLANG_DEFAULT, SORT_DEFAULT); - TEST_LCID(LANG_JAPANESE, SUBLANG_DEFAULT, SORT_JAPANESE_UNICODE); - - /* SUBLANG_NEUTRAL -> SUBLANG_DEFAULT */ - LCID_RES(MKLCID(LANG_ENGLISH, SUBLANG_NEUTRAL, SORT_DEFAULT), - MKLCID(LANG_ENGLISH, SUBLANG_DEFAULT, SORT_DEFAULT)); - LCID_RES(MKLCID(LANG_JAPANESE, SUBLANG_NEUTRAL, SORT_DEFAULT), - MKLCID(LANG_JAPANESE, SUBLANG_DEFAULT, SORT_DEFAULT)); - LCID_RES(MKLCID(LANG_JAPANESE, SUBLANG_NEUTRAL, SORT_JAPANESE_UNICODE), - MKLCID(LANG_JAPANESE, SUBLANG_DEFAULT, SORT_JAPANESE_UNICODE)); - - /* Invariant language is not treated specially */ - TEST_LCID(LANG_INVARIANT, SUBLANG_DEFAULT, SORT_DEFAULT); - LCID_RES(MKLCID(LANG_INVARIANT, SUBLANG_NEUTRAL, SORT_DEFAULT), - MKLCID(LANG_INVARIANT, SUBLANG_DEFAULT, SORT_DEFAULT)); - - /* User/system default languages alone are not mapped */ - TEST_LCIDLANG(LANG_SYSTEM_DEFAULT, SORT_JAPANESE_UNICODE); - TEST_LCIDLANG(LANG_USER_DEFAULT, SORT_JAPANESE_UNICODE); - - /* Default lcids */ - LCID_RES(LOCALE_SYSTEM_DEFAULT, GetSystemDefaultLCID()); - LCID_RES(LOCALE_USER_DEFAULT, GetUserDefaultLCID()); - LCID_RES(LOCALE_NEUTRAL, GetUserDefaultLCID()); -} - -static BOOL CALLBACK langgrp_procA(LGRPID lgrpid, LPSTR lpszNum, LPSTR lpszName, - DWORD dwFlags, LONG_PTR lParam) -{ - trace("%08x, %s, %s, %08x, %08lx\n", - lgrpid, lpszNum, lpszName, dwFlags, lParam); - - ok(pIsValidLanguageGroup(lgrpid, dwFlags) == TRUE, - "Enumerated grp %d not valid (flags %d)\n", lgrpid, dwFlags); - - /* If lParam is one, we are calling with flags defaulted from 0 */ - ok(!lParam || (dwFlags == LGRPID_INSTALLED || dwFlags == LGRPID_SUPPORTED), - "Expected dwFlags == LGRPID_INSTALLED || dwFlags == LGRPID_SUPPORTED, got %d\n", dwFlags); - - return TRUE; -} - -static void test_EnumSystemLanguageGroupsA(void) -{ - if (!pEnumSystemLanguageGroupsA || !pIsValidLanguageGroup) - return; - - /* No enumeration proc */ - SetLastError(0); - pEnumSystemLanguageGroupsA(0, LGRPID_INSTALLED, 0); - EXPECT_INVALID; - - /* Invalid flags */ - SetLastError(0); - pEnumSystemLanguageGroupsA(langgrp_procA, LGRPID_INSTALLED|LGRPID_SUPPORTED, 0); - EXPECT_FLAGS; - - /* No flags - defaults to LGRPID_INSTALLED */ - SetLastError(0); - pEnumSystemLanguageGroupsA(langgrp_procA, 0, 1); - EXPECT_LASTERROR_0; - - pEnumSystemLanguageGroupsA(langgrp_procA, LGRPID_INSTALLED, 0); - pEnumSystemLanguageGroupsA(langgrp_procA, LGRPID_SUPPORTED, 0); -} - - -static BOOL CALLBACK lgrplocale_procA(LGRPID lgrpid, LCID lcid, LPSTR lpszNum, - LONG_PTR lParam) -{ - trace("%08x, %08x, %s, %08lx\n", lgrpid, lcid, lpszNum, lParam); - - ok(pIsValidLanguageGroup(lgrpid, LGRPID_SUPPORTED) == TRUE, - "Enumerated grp %d not valid\n", lgrpid); - ok(IsValidLocale(lcid, LCID_SUPPORTED) == TRUE, - "Enumerated grp locale %d not valid\n", lcid); - return TRUE; -} - -static void test_EnumLanguageGroupLocalesA(void) -{ - if (!pEnumLanguageGroupLocalesA || !pIsValidLanguageGroup) - return; - - /* No enumeration proc */ - SetLastError(0); - pEnumLanguageGroupLocalesA(0, LGRPID_WESTERN_EUROPE, 0, 0); - EXPECT_INVALID; - - /* lgrpid too small */ - SetLastError(0); - pEnumLanguageGroupLocalesA(lgrplocale_procA, 0, 0, 0); - EXPECT_INVALID; - - /* lgrpid too big */ - SetLastError(0); - pEnumLanguageGroupLocalesA(lgrplocale_procA, LGRPID_ARMENIAN + 1, 0, 0); - EXPECT_INVALID; - - /* dwFlags is reserved */ - SetLastError(0); - pEnumLanguageGroupLocalesA(0, LGRPID_WESTERN_EUROPE, 0x1, 0); - EXPECT_INVALID; - - pEnumLanguageGroupLocalesA(lgrplocale_procA, LGRPID_WESTERN_EUROPE, 0, 0); -} - -static void test_SetLocaleInfoA(void) -{ - BOOL bRet; - LCID lcid = GetUserDefaultLCID(); - - /* Null data */ - SetLastError(0); - bRet = SetLocaleInfoA(lcid, LOCALE_SDATE, 0); - EXPECT_INVALID; - - /* IDATE */ - SetLastError(0); - bRet = SetLocaleInfoA(lcid, LOCALE_IDATE, (LPSTR)test_SetLocaleInfoA); - EXPECT_FLAGS; - - /* ILDATE */ - SetLastError(0); - bRet = SetLocaleInfoA(lcid, LOCALE_ILDATE, (LPSTR)test_SetLocaleInfoA); - EXPECT_FLAGS; -} - -static BOOL CALLBACK luilocale_proc1A(LPSTR value, LONG_PTR lParam) -{ - trace("%s %08lx\n", value, lParam); - return(TRUE); -} - -static BOOL CALLBACK luilocale_proc2A(LPSTR value, LONG_PTR lParam) -{ - ok(!enumCount, "callback called again unexpected\n"); - enumCount++; - return(FALSE); -} - -static BOOL CALLBACK luilocale_proc3A(LPSTR value, LONG_PTR lParam) -{ - ok(0,"callback called unexpected\n"); - return(FALSE); -} - -static void test_EnumUILanguageA(void) -{ - BOOL ret; - if (!pEnumUILanguagesA) { - trace("EnumUILanguagesA is not available on Win9x\n"); - return; - } - - SetLastError(ERROR_SUCCESS); - ret = pEnumUILanguagesA(luilocale_proc1A, 0, 0); - EXPECT_TRUE; EXPECT_VALID; - - enumCount = 0; - SetLastError(ERROR_SUCCESS); - ret = pEnumUILanguagesA(luilocale_proc2A, 0, 0); - EXPECT_TRUE; EXPECT_VALID; - - SetLastError(ERROR_SUCCESS); - ret = pEnumUILanguagesA(NULL, 0, 0); - EXPECT_FALSE; EXPECT_INVALID; - - SetLastError(ERROR_SUCCESS); - ret = pEnumUILanguagesA(luilocale_proc3A, 0x5a5a5a5a, 0); - EXPECT_FALSE; EXPECT_FLAGS; - - SetLastError(ERROR_SUCCESS); - ret = pEnumUILanguagesA(NULL, 0x5a5a5a5a, 0); - EXPECT_FALSE; EXPECT_INVALID; -} - -static char date_fmt_buf[1024]; - -static BOOL CALLBACK enum_datetime_procA(LPSTR fmt) -{ - lstrcatA(date_fmt_buf, fmt); - lstrcatA(date_fmt_buf, "\n"); - return TRUE; -} - -static void test_EnumDateFormatsA(void) -{ - char *p, buf[256]; - BOOL ret; - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - trace("EnumDateFormatsA 0\n"); - date_fmt_buf[0] = 0; - ret = EnumDateFormatsA(enum_datetime_procA, lcid, 0); - ok(ret, "EnumDateFormatsA(0) error %d\n", GetLastError()); - trace("%s\n", date_fmt_buf); - /* test the 1st enumerated format */ - if ((p = strchr(date_fmt_buf, '\n'))) *p = 0; - ret = GetLocaleInfoA(lcid, LOCALE_SSHORTDATE, buf, sizeof(buf)); - ok(ret, "GetLocaleInfoA(LOCALE_SSHORTDATE) error %d\n", GetLastError()); - ok(!lstrcmpA(date_fmt_buf, buf), "expected \"%s\" got \"%s\"\n", date_fmt_buf, buf); - - trace("EnumDateFormatsA LOCALE_USE_CP_ACP\n"); - date_fmt_buf[0] = 0; - ret = EnumDateFormatsA(enum_datetime_procA, lcid, LOCALE_USE_CP_ACP); - ok(ret, "EnumDateFormatsA(LOCALE_USE_CP_ACP) error %d\n", GetLastError()); - trace("%s\n", date_fmt_buf); - /* test the 1st enumerated format */ - if ((p = strchr(date_fmt_buf, '\n'))) *p = 0; - ret = GetLocaleInfoA(lcid, LOCALE_SSHORTDATE, buf, sizeof(buf)); - ok(ret, "GetLocaleInfoA(LOCALE_SSHORTDATE) error %d\n", GetLastError()); - ok(!lstrcmpA(date_fmt_buf, buf), "expected \"%s\" got \"%s\"\n", date_fmt_buf, buf); - - trace("EnumDateFormatsA DATE_SHORTDATE\n"); - date_fmt_buf[0] = 0; - ret = EnumDateFormatsA(enum_datetime_procA, lcid, DATE_SHORTDATE); - ok(ret, "EnumDateFormatsA(DATE_SHORTDATE) error %d\n", GetLastError()); - trace("%s\n", date_fmt_buf); - /* test the 1st enumerated format */ - if ((p = strchr(date_fmt_buf, '\n'))) *p = 0; - ret = GetLocaleInfoA(lcid, LOCALE_SSHORTDATE, buf, sizeof(buf)); - ok(ret, "GetLocaleInfoA(LOCALE_SSHORTDATE) error %d\n", GetLastError()); - ok(!lstrcmpA(date_fmt_buf, buf), "expected \"%s\" got \"%s\"\n", date_fmt_buf, buf); - - trace("EnumDateFormatsA DATE_LONGDATE\n"); - date_fmt_buf[0] = 0; - ret = EnumDateFormatsA(enum_datetime_procA, lcid, DATE_LONGDATE); - ok(ret, "EnumDateFormatsA(DATE_LONGDATE) error %d\n", GetLastError()); - trace("%s\n", date_fmt_buf); - /* test the 1st enumerated format */ - if ((p = strchr(date_fmt_buf, '\n'))) *p = 0; - ret = GetLocaleInfoA(lcid, LOCALE_SLONGDATE, buf, sizeof(buf)); - ok(ret, "GetLocaleInfoA(LOCALE_SLONGDATE) error %d\n", GetLastError()); - ok(!lstrcmpA(date_fmt_buf, buf), "expected \"%s\" got \"%s\"\n", date_fmt_buf, buf); - - trace("EnumDateFormatsA DATE_YEARMONTH\n"); - date_fmt_buf[0] = 0; - SetLastError(0xdeadbeef); - ret = EnumDateFormatsA(enum_datetime_procA, lcid, DATE_YEARMONTH); - if (!ret && (GetLastError() == ERROR_INVALID_FLAGS)) - { - skip("DATE_YEARMONTH is only present on W2K and later\n"); - return; - } - ok(ret, "EnumDateFormatsA(DATE_YEARMONTH) error %d\n", GetLastError()); - trace("%s\n", date_fmt_buf); - /* test the 1st enumerated format */ - if ((p = strchr(date_fmt_buf, '\n'))) *p = 0; - ret = GetLocaleInfoA(lcid, LOCALE_SYEARMONTH, buf, sizeof(buf)); - ok(ret, "GetLocaleInfoA(LOCALE_SYEARMONTH) error %d\n", GetLastError()); - ok(!lstrcmpA(date_fmt_buf, buf), "expected \"%s\" got \"%s\"\n", date_fmt_buf, buf); -} - -static void test_EnumTimeFormatsA(void) -{ - char *p, buf[256]; - BOOL ret; - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - trace("EnumTimeFormatsA 0\n"); - date_fmt_buf[0] = 0; - ret = EnumTimeFormatsA(enum_datetime_procA, lcid, 0); - ok(ret, "EnumTimeFormatsA(0) error %d\n", GetLastError()); - trace("%s\n", date_fmt_buf); - /* test the 1st enumerated format */ - if ((p = strchr(date_fmt_buf, '\n'))) *p = 0; - ret = GetLocaleInfoA(lcid, LOCALE_STIMEFORMAT, buf, sizeof(buf)); - ok(ret, "GetLocaleInfoA(LOCALE_STIMEFORMAT) error %d\n", GetLastError()); - ok(!lstrcmpA(date_fmt_buf, buf), "expected \"%s\" got \"%s\"\n", date_fmt_buf, buf); - - trace("EnumTimeFormatsA LOCALE_USE_CP_ACP\n"); - date_fmt_buf[0] = 0; - ret = EnumTimeFormatsA(enum_datetime_procA, lcid, LOCALE_USE_CP_ACP); - ok(ret, "EnumTimeFormatsA(LOCALE_USE_CP_ACP) error %d\n", GetLastError()); - trace("%s\n", date_fmt_buf); - /* test the 1st enumerated format */ - if ((p = strchr(date_fmt_buf, '\n'))) *p = 0; - ret = GetLocaleInfoA(lcid, LOCALE_STIMEFORMAT, buf, sizeof(buf)); - ok(ret, "GetLocaleInfoA(LOCALE_STIMEFORMAT) error %d\n", GetLastError()); - ok(!lstrcmpA(date_fmt_buf, buf), "expected \"%s\" got \"%s\"\n", date_fmt_buf, buf); -} - -static void test_GetCPInfo(void) -{ - BOOL ret; - CPINFO cpinfo; - - SetLastError(0xdeadbeef); - ret = GetCPInfo(CP_SYMBOL, &cpinfo); - ok(!ret, "GetCPInfo(CP_SYMBOL) should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = GetCPInfo(CP_UTF7, &cpinfo); - ok(ret, "GetCPInfo(CP_UTF7) error %u\n", GetLastError()); - ok(cpinfo.DefaultChar[0] == 0x3f, "expected 0x3f, got 0x%x\n", cpinfo.DefaultChar[0]); - ok(cpinfo.DefaultChar[1] == 0, "expected 0, got 0x%x\n", cpinfo.DefaultChar[1]); - ok(cpinfo.LeadByte[0] == 0, "expected 0, got 0x%x\n", cpinfo.LeadByte[0]); - ok(cpinfo.LeadByte[1] == 0, "expected 0, got 0x%x\n", cpinfo.LeadByte[1]); - ok(cpinfo.MaxCharSize == 5, "expected 5, got 0x%x\n", cpinfo.MaxCharSize); - - SetLastError(0xdeadbeef); - ret = GetCPInfo(CP_UTF8, &cpinfo); - ok(ret, "GetCPInfo(CP_UTF8) error %u\n", GetLastError()); - ok(cpinfo.DefaultChar[0] == 0x3f, "expected 0x3f, got 0x%x\n", cpinfo.DefaultChar[0]); - ok(cpinfo.DefaultChar[1] == 0, "expected 0, got 0x%x\n", cpinfo.DefaultChar[1]); - ok(cpinfo.LeadByte[0] == 0, "expected 0, got 0x%x\n", cpinfo.LeadByte[0]); - ok(cpinfo.LeadByte[1] == 0, "expected 0, got 0x%x\n", cpinfo.LeadByte[1]); - ok(cpinfo.MaxCharSize == 4, "expected 5, got 0x%x\n", cpinfo.MaxCharSize); -} - -START_TEST(locale) -{ - InitFunctionPointers(); - - test_EnumTimeFormatsA(); - test_EnumDateFormatsA(); - test_GetLocaleInfoA(); - test_GetTimeFormatA(); - test_GetDateFormatA(); - test_GetDateFormatW(); - test_GetCurrencyFormatA(); /* Also tests the W version */ - test_GetNumberFormatA(); /* Also tests the W version */ - test_CompareStringA(); - test_LCMapStringA(); - test_LCMapStringW(); - test_FoldStringA(); - test_FoldStringW(); - test_ConvertDefaultLocale(); - test_EnumSystemLanguageGroupsA(); - test_EnumLanguageGroupLocalesA(); - test_SetLocaleInfoA(); - test_EnumUILanguageA(); - test_GetCPInfo(); - /* this requires collation table patch to make it MS compatible */ - if (0) test_sorting(); -} diff --git a/rostests/winetests/kernel32/mailslot.c b/rostests/winetests/kernel32/mailslot.c deleted file mode 100755 index 995f144b1a9..00000000000 --- a/rostests/winetests/kernel32/mailslot.c +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Mailslot regression test - * - * Copyright 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 - */ - -#include -#include -#include - -#include -#include - -#include "wine/test.h" - -static const char szmspath[] = "\\\\.\\mailslot\\wine_mailslot_test"; - -static int mailslot_test(void) -{ - HANDLE hSlot, hSlot2, hWriter, hWriter2; - unsigned char buffer[16]; - DWORD count, dwMax, dwNext, dwMsgCount, dwTimeout; - - /* sanity check on GetMailslotInfo */ - dwMax = dwNext = dwMsgCount = dwTimeout = 0; - ok( !GetMailslotInfo( INVALID_HANDLE_VALUE, &dwMax, &dwNext, - &dwMsgCount, &dwTimeout ), "getmailslotinfo succeeded\n"); - - /* open a mailslot that doesn't exist */ - hWriter = CreateFile(szmspath, GENERIC_READ|GENERIC_WRITE, - FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter == INVALID_HANDLE_VALUE, "nonexistent mailslot\n"); - - /* open a mailslot without the right name */ - hSlot = CreateMailslot( "blah", 0, 0, NULL ); - ok( hSlot == INVALID_HANDLE_VALUE, - "Created mailslot with invalid name\n"); - ok( GetLastError() == ERROR_INVALID_NAME, - "error should be ERROR_INVALID_NAME\n"); - - /* open a mailslot with a null name */ - hSlot = CreateMailslot( NULL, 0, 0, NULL ); - ok( hSlot == INVALID_HANDLE_VALUE, - "Created mailslot with invalid name\n"); - ok( GetLastError() == ERROR_PATH_NOT_FOUND, - "error should be ERROR_PATH_NOT_FOUND\n"); - - /* valid open, but with wacky parameters ... then check them */ - hSlot = CreateMailslot( szmspath, -1, -1, NULL ); - ok( hSlot != INVALID_HANDLE_VALUE , "mailslot with valid name failed\n"); - dwMax = dwNext = dwMsgCount = dwTimeout = 0; - ok( GetMailslotInfo( hSlot, &dwMax, &dwNext, &dwMsgCount, &dwTimeout ), - "getmailslotinfo failed\n"); - ok( dwMax == ~0U, "dwMax incorrect\n"); - ok( dwNext == MAILSLOT_NO_MESSAGE, "dwNext incorrect\n"); - ok( dwMsgCount == 0, "dwMsgCount incorrect\n"); - ok( dwTimeout == ~0U, "dwTimeout incorrect\n"); - ok( GetMailslotInfo( hSlot, NULL, NULL, NULL, NULL ), - "getmailslotinfo failed\n"); - ok( CloseHandle(hSlot), "failed to close mailslot\n"); - - /* now open it for real */ - hSlot = CreateMailslot( szmspath, 0, 0, NULL ); - ok( hSlot != INVALID_HANDLE_VALUE , "valid mailslot failed\n"); - - /* try and read/write to it */ - count = 0; - memset(buffer, 0, sizeof buffer); - ok( !ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), - "slot read\n"); - ok( GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError() ); - ok( !WriteFile( hSlot, buffer, sizeof buffer, &count, NULL), - "slot write\n"); - ok( GetLastError() == ERROR_ACCESS_DENIED, "wrong error %u\n", GetLastError() ); - - /* now try and openthe client, but with the wrong sharing mode */ - hWriter = CreateFile(szmspath, GENERIC_READ|GENERIC_WRITE, - 0, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter == INVALID_HANDLE_VALUE, "bad sharing mode\n"); - ok( GetLastError() == ERROR_SHARING_VIOLATION, - "error should be ERROR_SHARING_VIOLATION\n"); - - /* now open the client with the correct sharing mode */ - hWriter = CreateFile(szmspath, GENERIC_READ|GENERIC_WRITE, - FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter != INVALID_HANDLE_VALUE, "existing mailslot\n"); - - /* - * opening a client should make no difference to - * whether we can read or write the mailslot - */ - ok( !ReadFile( hSlot, buffer, sizeof buffer/2, &count, NULL), - "slot read\n"); - ok( GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError() ); - ok( !WriteFile( hSlot, buffer, sizeof buffer/2, &count, NULL), - "slot write\n"); - ok( GetLastError() == ERROR_ACCESS_DENIED, "wrong error %u\n", GetLastError() ); - - /* - * we can't read from this client, - * but we should be able to write to it - */ - ok( !ReadFile( hWriter, buffer, sizeof buffer/2, &count, NULL), - "can read client\n"); - todo_wine ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError() ); - ok( WriteFile( hWriter, buffer, sizeof buffer/2, &count, NULL), - "can't write client\n"); - ok( !ReadFile( hWriter, buffer, sizeof buffer/2, &count, NULL), - "can read client\n"); - todo_wine ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError() ); - - /* - * seeing as there's something in the slot, - * we should be able to read it once - */ - ok( ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), - "slot read\n"); - ok( count == (sizeof buffer/2), "short read\n" ); - - /* but not again */ - ok( !ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), - "slot read\n"); - ok( GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError() ); - - /* now try open another writer... should fail */ - hWriter2 = CreateFile(szmspath, GENERIC_READ|GENERIC_WRITE, - FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter2 == INVALID_HANDLE_VALUE, "two writers\n"); - - /* now try open another as a reader ... also fails */ - hWriter2 = CreateFile(szmspath, GENERIC_READ, - FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter2 == INVALID_HANDLE_VALUE, "writer + reader\n"); - - /* now try open another as a writer ... still fails */ - hWriter2 = CreateFile(szmspath, GENERIC_WRITE, - FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter2 == INVALID_HANDLE_VALUE, "writer\n"); - - /* now open another one */ - hSlot2 = CreateMailslot( szmspath, 0, 0, NULL ); - ok( hSlot2 == INVALID_HANDLE_VALUE , "opened two mailslots\n"); - - /* close the client again */ - ok( CloseHandle( hWriter ), "closing the client\n"); - - /* - * now try reopen it with slightly different permissions ... - * shared writing - */ - hWriter = CreateFile(szmspath, GENERIC_WRITE, - FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter != INVALID_HANDLE_VALUE, "sharing writer\n"); - - /* - * now try open another as a writer ... - * but don't share with the first ... fail - */ - hWriter2 = CreateFile(szmspath, GENERIC_WRITE, - FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter2 == INVALID_HANDLE_VALUE, "greedy writer succeeded\n"); - - /* now try open another as a writer ... and share with the first */ - hWriter2 = CreateFile(szmspath, GENERIC_WRITE, - FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); - ok( hWriter2 != INVALID_HANDLE_VALUE, "2nd sharing writer\n"); - - /* check the mailslot info */ - dwMax = dwNext = dwMsgCount = dwTimeout = 0; - ok( GetMailslotInfo( hSlot, &dwMax, &dwNext, &dwMsgCount, &dwTimeout ), - "getmailslotinfo failed\n"); - ok( dwNext == MAILSLOT_NO_MESSAGE, "dwNext incorrect\n"); - ok( dwMax == 0, "dwMax incorrect\n"); - ok( dwMsgCount == 0, "dwMsgCount incorrect\n"); - ok( dwTimeout == 0, "dwTimeout incorrect\n"); - - /* check there's still no data */ - ok( !ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), "slot read\n"); - ok( GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError() ); - - /* write two messages */ - buffer[0] = 'a'; - ok( WriteFile( hWriter, buffer, 1, &count, NULL), "1st write failed\n"); - - /* check the mailslot info */ - dwNext = dwMsgCount = 0; - ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ), - "getmailslotinfo failed\n"); - ok( dwNext == 1, "dwNext incorrect\n"); - ok( dwMsgCount == 1, "dwMsgCount incorrect\n"); - - buffer[0] = 'b'; - buffer[1] = 'c'; - ok( WriteFile( hWriter2, buffer, 2, &count, NULL), "2nd write failed\n"); - - /* check the mailslot info */ - dwNext = dwMsgCount = 0; - ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ), - "getmailslotinfo failed\n"); - ok( dwNext == 1, "dwNext incorrect\n"); - todo_wine { - ok( dwMsgCount == 2, "dwMsgCount incorrect\n"); - } - - /* write a 3rd message with zero size */ - ok( WriteFile( hWriter2, buffer, 0, &count, NULL), "3rd write failed\n"); - - /* check the mailslot info */ - dwNext = dwMsgCount = 0; - ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ), - "getmailslotinfo failed\n"); - ok( dwNext == 1, "dwNext incorrect\n"); - todo_wine { - ok( dwMsgCount == 3, "dwMsgCount incorrect\n"); - } - - buffer[0]=buffer[1]=0; - - /* - * then check that they come out with the correct order and size, - * then the slot is empty - */ - ok( ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), - "1st slot read failed\n"); - ok( count == 1, "failed to get 1st message\n"); - ok( buffer[0] == 'a', "1st message wrong\n"); - - /* check the mailslot info */ - dwNext = dwMsgCount = 0; - ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ), - "getmailslotinfo failed\n"); - ok( dwNext == 2, "dwNext incorrect\n"); - todo_wine { - ok( dwMsgCount == 2, "dwMsgCount incorrect\n"); - } - - /* read the second message */ - ok( ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), - "2nd slot read failed\n"); - ok( count == 2, "failed to get 2nd message\n"); - ok( ( buffer[0] == 'b' ) && ( buffer[1] == 'c' ), "2nd message wrong\n"); - - /* check the mailslot info */ - dwNext = dwMsgCount = 0; - ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ), - "getmailslotinfo failed\n"); - ok( dwNext == 0, "dwNext incorrect\n"); - todo_wine { - ok( dwMsgCount == 1, "dwMsgCount incorrect\n"); - } - - /* read the 3rd (zero length) message */ - todo_wine { - ok( ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), - "3rd slot read failed\n"); - } - ok( count == 0, "failed to get 3rd message\n"); - - /* - * now there should be no more messages - * check the mailslot info - */ - dwNext = dwMsgCount = 0; - ok( GetMailslotInfo( hSlot, NULL, &dwNext, &dwMsgCount, NULL ), - "getmailslotinfo failed\n"); - ok( dwNext == MAILSLOT_NO_MESSAGE, "dwNext incorrect\n"); - ok( dwMsgCount == 0, "dwMsgCount incorrect\n"); - - /* check that reads fail */ - ok( !ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), - "3rd slot read succeeded\n"); - ok( GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError() ); - - /* finally close the mailslot and its client */ - ok( CloseHandle( hWriter2 ), "closing 2nd client\n"); - ok( CloseHandle( hWriter ), "closing the client\n"); - ok( CloseHandle( hSlot ), "closing the mailslot\n"); - - /* test timeouts */ - hSlot = CreateMailslot( szmspath, 0, 1000, NULL ); - ok( hSlot != INVALID_HANDLE_VALUE , "valid mailslot failed\n"); - count = 0; - memset(buffer, 0, sizeof buffer); - dwTimeout = GetTickCount(); - ok( !ReadFile( hSlot, buffer, sizeof buffer, &count, NULL), "slot read\n"); - ok( GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError() ); - dwTimeout = GetTickCount() - dwTimeout; - ok( dwTimeout >= 990, "timeout too short %u\n", dwTimeout ); - ok( CloseHandle( hSlot ), "closing the mailslot\n"); - - return 0; -} - -START_TEST(mailslot) -{ - mailslot_test(); -} diff --git a/rostests/winetests/kernel32/module.c b/rostests/winetests/kernel32/module.c deleted file mode 100755 index f524be70d56..00000000000 --- a/rostests/winetests/kernel32/module.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Unit tests for module/DLL/library API - * - * Copyright (c) 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 - */ - -#include "wine/test.h" -#include - -static BOOL is_unicode_enabled = TRUE; - -static BOOL cmpStrAW(const char* a, const WCHAR* b, DWORD lenA, DWORD lenB) -{ - WCHAR aw[1024]; - - DWORD len = MultiByteToWideChar( AreFileApisANSI() ? CP_ACP : CP_OEMCP, 0, - a, lenA, aw, sizeof(aw) / sizeof(aw[0]) ); - if (len != lenB) return FALSE; - return memcmp(aw, b, len * sizeof(WCHAR)) == 0; -} - -static void testGetModuleFileName(const char* name) -{ - HMODULE hMod; - char bufA[MAX_PATH]; - WCHAR bufW[MAX_PATH]; - DWORD len1A, len1W = 0, len2A, len2W = 0; - - hMod = (name) ? GetModuleHandle(name) : NULL; - - /* first test, with enough space in buffer */ - memset(bufA, '-', sizeof(bufA)); - len1A = GetModuleFileNameA(hMod, bufA, sizeof(bufA)); - ok(len1A > 0, "Getting module filename for handle %p\n", hMod); - - if (is_unicode_enabled) - { - memset(bufW, '-', sizeof(bufW)); - len1W = GetModuleFileNameW(hMod, bufW, sizeof(bufW) / sizeof(WCHAR)); - ok(len1W > 0, "Getting module filename for handle %p\n", hMod); - } - - ok(len1A == strlen(bufA), "Unexpected length of GetModuleFilenameA (%d/%d)\n", len1A, lstrlenA(bufA)); - - if (is_unicode_enabled) - { - ok(len1W == lstrlenW(bufW), "Unexpected length of GetModuleFilenameW (%d/%d)\n", len1W, lstrlenW(bufW)); - ok(cmpStrAW(bufA, bufW, len1A, len1W), "Comparing GetModuleFilenameAW results\n"); - } - - /* second test with a buffer too small */ - memset(bufA, '-', sizeof(bufA)); - len2A = GetModuleFileNameA(hMod, bufA, len1A / 2); - ok(len2A > 0, "Getting module filename for handle %p\n", hMod); - - if (is_unicode_enabled) - { - memset(bufW, '-', sizeof(bufW)); - len2W = GetModuleFileNameW(hMod, bufW, len1W / 2); - ok(len2W > 0, "Getting module filename for handle %p\n", hMod); - ok(cmpStrAW(bufA, bufW, len2A, len2W), "Comparing GetModuleFilenameAW results with buffer too small\n" ); - ok(len1W / 2 == len2W, "Correct length in GetModuleFilenameW with buffer too small (%d/%d)\n", len1W / 2, len2W); - } - - ok(len1A / 2 == len2A || - len1A / 2 == len2A + 1, /* Win9x */ - "Correct length in GetModuleFilenameA with buffer too small (%d/%d)\n", len1A / 2, len2A); -} - -static void testGetModuleFileName_Wrong(void) -{ - char bufA[MAX_PATH]; - WCHAR bufW[MAX_PATH]; - - /* test wrong handle */ - if (is_unicode_enabled) - { - bufW[0] = '*'; - ok(GetModuleFileNameW((void*)0xffffffff, bufW, sizeof(bufW) / sizeof(WCHAR)) == 0, "Unexpected success in module handle\n"); - ok(bufW[0] == '*', "When failing, buffer shouldn't be written to\n"); - } - - bufA[0] = '*'; - ok(GetModuleFileNameA((void*)0xffffffff, bufA, sizeof(bufA)) == 0, "Unexpected success in module handle\n"); - ok(bufA[0] == '*' || - bufA[0] == 0 /* Win9x */, - "When failing, buffer shouldn't be written to\n"); -} - -static void testLoadLibraryA(void) -{ - HMODULE hModule, hModule1; - FARPROC fp; - - SetLastError(0xdeadbeef); - hModule = LoadLibraryA("kernel32.dll"); - ok( hModule != NULL, "kernel32.dll should be loadable\n"); - ok( GetLastError() == 0xdeadbeef, "GetLastError should be 0xdeadbeef but is %d\n", GetLastError()); - - fp = GetProcAddress(hModule, "CreateFileA"); - ok( fp != NULL, "CreateFileA should be there\n"); - ok( GetLastError() == 0xdeadbeef, "GetLastError should be 0xdeadbeef but is %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hModule1 = LoadLibraryA("kernel32 "); - /* Only winNT does this */ - if (GetLastError() != ERROR_DLL_NOT_FOUND) - { - ok( hModule1 != NULL, "\"kernel32 \" should be loadable\n"); - ok( GetLastError() == 0xdeadbeef, "GetLastError should be 0xdeadbeef but is %d\n", GetLastError()); - ok( hModule == hModule1, "Loaded wrong module\n"); - FreeLibrary(hModule1); - } - FreeLibrary(hModule); -} - -static void testNestedLoadLibraryA(void) -{ - static const char dllname[] = "shell32.dll"; - char path1[MAX_PATH], path2[MAX_PATH]; - HMODULE hModule1, hModule2, hModule3; - - /* This is not really a Windows conformance test, but more a Wine - * regression test. Wine's builtin dlls can be loaded from multiple paths, - * and this test tries to make sure that Wine does not get confused and - * really unloads the Unix .so file at the right time. Failure to do so - * will result in the dll being unloadable. - * This test must be done with a dll that can be unloaded, which means: - * - it must not already be loaded - * - it must not have a 16-bit counterpart - */ - GetWindowsDirectory(path1, sizeof(path1)); - strcat(path1, "\\system\\"); - strcat(path1, dllname); - hModule1 = LoadLibraryA(path1); - if (!hModule1) - { - /* We must be on Windows NT, so we cannot test */ - return; - } - - GetWindowsDirectory(path2, sizeof(path2)); - strcat(path2, "\\system32\\"); - strcat(path2, dllname); - hModule2 = LoadLibraryA(path2); - if (!hModule2) - { - /* We must be on Windows 9x, so we cannot test */ - ok(FreeLibrary(hModule1), "FreeLibrary() failed\n"); - return; - } - - /* The first LoadLibrary() call may have registered the dll under the - * system32 path. So load it, again, under the '...\system\...' path so - * Wine does not immediately notice that it is already loaded. - */ - hModule3 = LoadLibraryA(path1); - ok(hModule3 != NULL, "LoadLibrary(%s) failed\n", path1); - - /* Now fully unload the dll */ - ok(FreeLibrary(hModule3), "FreeLibrary() failed\n"); - ok(FreeLibrary(hModule2), "FreeLibrary() failed\n"); - ok(FreeLibrary(hModule1), "FreeLibrary() failed\n"); - ok(GetModuleHandle(dllname) == NULL, "%s was not fully unloaded\n", dllname); - - /* Try to load the dll again, if refcounting is ok, this should work */ - hModule1 = LoadLibraryA(path1); - ok(hModule1 != NULL, "LoadLibrary(%s) failed\n", path1); - if (hModule1 != NULL) - ok(FreeLibrary(hModule1), "FreeLibrary() failed\n"); -} - -static void testLoadLibraryA_Wrong(void) -{ - HMODULE hModule; - - /* Try to load a nonexistent dll */ - SetLastError(0xdeadbeef); - hModule = LoadLibraryA("non_ex_pv.dll"); - ok( !hModule, "non_ex_pv.dll should be not loadable\n"); - ok( GetLastError() == ERROR_MOD_NOT_FOUND || GetLastError() == ERROR_DLL_NOT_FOUND, - "Expected ERROR_MOD_NOT_FOUND or ERROR_DLL_NOT_FOUND (win9x), got %d\n", GetLastError()); - - /* Just in case */ - FreeLibrary(hModule); -} - -static void testGetProcAddress_Wrong(void) -{ - FARPROC fp; - - SetLastError(0xdeadbeef); - fp = GetProcAddress(NULL, "non_ex_call"); - ok( !fp, "non_ex_call should not be found\n"); - ok( GetLastError() == ERROR_PROC_NOT_FOUND || GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_PROC_NOT_FOUND or ERROR_INVALID_HANDLE(win9x), got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - fp = GetProcAddress((HMODULE)0xdeadbeef, "non_ex_call"); - ok( !fp, "non_ex_call should not be found\n"); - ok( GetLastError() == ERROR_MOD_NOT_FOUND || GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_MOD_NOT_FOUND or ERROR_INVALID_HANDLE(win9x), got %d\n", GetLastError()); -} - -START_TEST(module) -{ - WCHAR filenameW[MAX_PATH]; - - /* Test if we can use GetModuleFileNameW */ - - SetLastError(0xdeadbeef); - GetModuleFileNameW(NULL, filenameW, MAX_PATH); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - trace("GetModuleFileNameW not existing on this platform, skipping W-calls\n"); - is_unicode_enabled = FALSE; - } - - testGetModuleFileName(NULL); - testGetModuleFileName("kernel32.dll"); - testGetModuleFileName_Wrong(); - - testLoadLibraryA(); - testNestedLoadLibraryA(); - testLoadLibraryA_Wrong(); - testGetProcAddress_Wrong(); -} diff --git a/rostests/winetests/kernel32/path.c b/rostests/winetests/kernel32/path.c deleted file mode 100755 index d158df1dbcc..00000000000 --- a/rostests/winetests/kernel32/path.c +++ /dev/null @@ -1,1275 +0,0 @@ -/* - * Unit test suite for various Path and Directory Functions - * - * Copyright 2002 Geoffrey Hausheer - * 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 - */ - -#include -#include -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "winerror.h" -#include "winnls.h" - -#define HAS_TRAIL_SLASH_A(string) (string[lstrlenA(string)-1]=='\\') - -#define LONGFILE "Long File test.path" -#define SHORTFILE "pathtest.pth" -#define SHORTDIR "shortdir" -#define LONGDIR "Long Directory" -#define NONFILE_SHORT "noexist.pth" -#define NONFILE_LONG "NonExistent File" -#define NONDIR_SHORT "notadir" -#define NONDIR_LONG "NonExistent Directory" - -#define NOT_A_VALID_DRIVE '@' - -/* the following characters don't work well with GetFullPathNameA - in Win98. I don't know if this is a FAT thing, or if it is an OS thing - but I don't test these characters now. - NOTE: Win2k allows GetFullPathNameA to work with them though - |<>" -*/ -static const CHAR funny_chars[]="!@#$%^&*()=+{}[],?'`"; -static const CHAR is_char_ok[] ="11111110111111111011"; - -static DWORD (WINAPI *pGetLongPathNameA)(LPCSTR,LPSTR,DWORD); -static DWORD (WINAPI *pGetLongPathNameW)(LPWSTR,LPWSTR,DWORD); - -/* Present in Win2003+ */ -static BOOL (WINAPI *pNeedCurrentDirectoryForExePathA)(LPCSTR); -static BOOL (WINAPI *pNeedCurrentDirectoryForExePathW)(LPCWSTR); - -/* a structure to deal with wine todos somewhat cleanly */ -typedef struct { - DWORD shortlen; - DWORD shorterror; - DWORD s2llen; - DWORD s2lerror; - DWORD longlen; - DWORD longerror; -} SLpassfail; - -/* function that tests GetFullPathNameA, GetShortPathNameA,GetLongPathNameA */ -/* NOTE: the passfail structure is used to allow customizable todo checking - for wine. It is not very pretty, but it sure beats duplicating this - function lots of times -*/ -static void test_ValidPathA(const CHAR *curdir, const CHAR *subdir, const CHAR *filename, - CHAR *shortstr, SLpassfail *passfail, const CHAR *errstr) -{ - CHAR tmpstr[MAX_PATH], - fullpath[MAX_PATH], /*full path to the file (not short/long) */ - subpath[MAX_PATH], /*relative path to the file */ - fullpathshort[MAX_PATH], /*absolute path to the file (short format) */ - fullpathlong[MAX_PATH], /*absolute path to the file (long format) */ - curdirshort[MAX_PATH], /*absolute path to the current dir (short) */ - curdirlong[MAX_PATH]; /*absolute path to the current dir (long) */ - LPSTR strptr; /*ptr to the filename portion of the path */ - DWORD len; -/* if passfail is NULL, we can perform all checks within this function, - otherwise, we will return the relevant data in the passfail struct, so - we must initialize it first -*/ - if(passfail!=NULL) { - passfail->shortlen=-1;passfail->s2llen=-1;passfail->longlen=-1; - passfail->shorterror=0;passfail->s2lerror=0;passfail->longerror=0; - } -/* GetLongPathNameA is only supported on Win2k+ and Win98+ */ - if(pGetLongPathNameA) { - ok((len=pGetLongPathNameA(curdir,curdirlong,MAX_PATH)), - "%s: GetLongPathNameA failed\n",errstr); -/*GetLongPathNameA can return a trailing '\\' but shouldn't do so here */ - ok(! HAS_TRAIL_SLASH_A(curdirlong), - "%s: GetLongPathNameA should not have a trailing \\\n",errstr); - } - ok((len=GetShortPathNameA(curdir,curdirshort,MAX_PATH)), - "%s: GetShortPathNameA failed\n",errstr); -/*GetShortPathNameA can return a trailing '\\' but shouldn't do so here */ - ok(! HAS_TRAIL_SLASH_A(curdirshort), - "%s: GetShortPathNameA should not have a trailing \\\n",errstr); -/* build relative and absolute paths from inputs */ - if(lstrlenA(subdir)) { - sprintf(subpath,"%s\\%s",subdir,filename); - } else { - lstrcpyA(subpath,filename); - } - sprintf(fullpath,"%s\\%s",curdir,subpath); - sprintf(fullpathshort,"%s\\%s",curdirshort,subpath); - sprintf(fullpathlong,"%s\\%s",curdirlong,subpath); -/* Test GetFullPathNameA functionality */ - len=GetFullPathNameA(subpath,MAX_PATH,tmpstr,&strptr); - ok(len, "GetFullPathNameA failed for: '%s'\n",subpath); - if(HAS_TRAIL_SLASH_A(subpath)) { - ok(strptr==NULL, - "%s: GetFullPathNameA should not return a filename ptr\n",errstr); - ok(lstrcmpiA(fullpath,tmpstr)==0, - "%s: GetFullPathNameA returned '%s' instead of '%s'\n", - errstr,tmpstr,fullpath); - } else { - ok(lstrcmpiA(strptr,filename)==0, - "%s: GetFullPathNameA returned '%s' instead of '%s'\n", - errstr,strptr,filename); - ok(lstrcmpiA(fullpath,tmpstr)==0, - "%s: GetFullPathNameA returned '%s' instead of '%s'\n", - errstr,tmpstr,fullpath); - } -/* Test GetShortPathNameA functionality */ - SetLastError(0); - len=GetShortPathNameA(fullpathshort,shortstr,MAX_PATH); - if(passfail==NULL) { - ok(len, "%s: GetShortPathNameA failed\n",errstr); - } else { - passfail->shortlen=len; - passfail->shorterror=GetLastError(); - } -/* Test GetLongPathNameA functionality - We test both conversion from GetFullPathNameA and from GetShortPathNameA -*/ - if(pGetLongPathNameA) { - if(len!=0) { - SetLastError(0); - len=pGetLongPathNameA(shortstr,tmpstr,MAX_PATH); - if(passfail==NULL) { - ok(len, - "%s: GetLongPathNameA failed during Short->Long conversion\n", errstr); - ok(lstrcmpiA(fullpathlong,tmpstr)==0, - "%s: GetLongPathNameA returned '%s' instead of '%s'\n", - errstr,tmpstr,fullpathlong); - } else { - passfail->s2llen=len; - passfail->s2lerror=GetLastError(); - } - } - SetLastError(0); - len=pGetLongPathNameA(fullpath,tmpstr,MAX_PATH); - if(passfail==NULL) { - ok(len, "%s: GetLongPathNameA failed\n",errstr); - if(HAS_TRAIL_SLASH_A(fullpath)) { - ok(lstrcmpiA(fullpathlong,tmpstr)==0, - "%s: GetLongPathNameA returned '%s' instead of '%s'\n", - errstr,tmpstr,fullpathlong); - } else { - ok(lstrcmpiA(fullpathlong,tmpstr)==0, - "%s: GetLongPathNameA returned '%s' instead of '%s'\n", - errstr,tmpstr,fullpathlong); - } - } else { - passfail->longlen=len; - passfail->longerror=GetLastError(); - } - } -} - -/* split path into leading directory, and 8.3 filename */ -static void test_SplitShortPathA(CHAR *path,CHAR *dir,CHAR *eight,CHAR *three) { - int done,error; - int ext,fil; - int len,i; - len=lstrlenA(path); - ext=len; fil=len; done=0; error=0; -/* walk backwards over path looking for '.' or '\\' separators */ - for(i=len-1;(i>=0) && (!done);i--) { - if(path[i]=='.') - if(ext!=len) error=1; else ext=i; - else if(path[i]=='\\') { - if(i==len-1) { - error=1; - } else { - fil=i; - done=1; - } - } - } -/* Check that we didn't find a trailing '\\' or multiple '.' */ - ok(!error,"Illegal file found in 8.3 path '%s'\n",path); -/* Separate dir, root, and extension */ - if(ext!=len) lstrcpyA(three,path+ext+1); else lstrcpyA(three,""); - if(fil!=len) { - lstrcpynA(eight,path+fil+1,ext-fil); - lstrcpynA(dir,path,fil+1); - } else { - lstrcpynA(eight,path,ext+1); - lstrcpyA(dir,""); - } -/* Validate that root and extension really are 8.3 */ - ok(lstrlenA(eight)<=8 && lstrlenA(three)<=3, - "GetShortPathNAmeA did not return an 8.3 path\n"); -} - -/* Check that GetShortPathNameA returns a valid 8.3 path */ -static void test_LongtoShortA(CHAR *teststr,const CHAR *goodstr, - const CHAR *ext,const CHAR *errstr) { - CHAR dir[MAX_PATH],eight[MAX_PATH],three[MAX_PATH]; - - test_SplitShortPathA(teststr,dir,eight,three); - ok(lstrcmpiA(dir,goodstr)==0, - "GetShortPathNameA returned '%s' instead of '%s'\n",dir,goodstr); - ok(lstrcmpiA(three,ext)==0, - "GetShortPathNameA returned '%s' with incorrect extension\n",three); -} - -/* Test that Get(Short|Long|Full)PathNameA work correctly with interesting - characters in the filename. - 'valid' indicates whether this would be an allowed filename - 'todo' indicates that wine doesn't get this right yet. - NOTE: We always call this routine with a nonexistent filename, so - Get(Short|Long)PathNameA should never pass, but GetFullPathNameA - should. -*/ -static void test_FunnyChars(CHAR *curdir,CHAR *curdir_short,CHAR *filename, INT valid,CHAR *errstr) -{ - CHAR tmpstr[MAX_PATH],tmpstr1[MAX_PATH]; - SLpassfail passfail; - - test_ValidPathA(curdir,"",filename,tmpstr,&passfail,errstr); - if(valid) { - sprintf(tmpstr1,"%s\\%s",curdir_short,filename); - ok((passfail.shortlen==0 && - (passfail.shorterror==ERROR_FILE_NOT_FOUND || passfail.shorterror==ERROR_PATH_NOT_FOUND || !passfail.shorterror)) || - (passfail.shortlen==strlen(tmpstr1) && lstrcmpiA(tmpstr,tmpstr1)==0), - "%s: GetShortPathNameA error: len=%d error=%d tmpstr=[%s]\n", - errstr,passfail.shortlen,passfail.shorterror,tmpstr); - } else { - ok(passfail.shortlen==0 && - (passfail.shorterror==ERROR_INVALID_NAME || passfail.shorterror==ERROR_FILE_NOT_FOUND || !passfail.shorterror), - "%s: GetShortPathA should have failed len=%d, error=%d\n", - errstr,passfail.shortlen,passfail.shorterror); - } - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - if(valid) { - ok(passfail.longerror==ERROR_FILE_NOT_FOUND, - "%s: GetLongPathA returned %d and not %d\n", - errstr,passfail.longerror,ERROR_FILE_NOT_FOUND); - } else { - ok(passfail.longerror==ERROR_INVALID_NAME || - passfail.longerror==ERROR_FILE_NOT_FOUND, - "%s: GetLongPathA returned %d and not %d or %d'\n", - errstr, passfail.longerror,ERROR_INVALID_NAME,ERROR_FILE_NOT_FOUND); - } - } -} - -/* Routine to test that SetCurrentDirectory behaves as expected. */ -static void test_setdir(CHAR *olddir,CHAR *newdir, - CHAR *cmprstr, INT pass, const CHAR *errstr) -{ - CHAR tmppath[MAX_PATH], *dirptr; - DWORD val,len,chklen; - - val=SetCurrentDirectoryA(newdir); - len=GetCurrentDirectoryA(MAX_PATH,tmppath); -/* if 'pass' then the SetDirectoryA was supposed to pass */ - if(pass) { - dirptr=(cmprstr==NULL) ? newdir : cmprstr; - chklen=lstrlenA(dirptr); - ok(val,"%s: SetCurrentDirectoryA failed\n",errstr); - ok(len==chklen, - "%s: SetCurrentDirectory did not change the directory, though it passed\n", - errstr); - ok(lstrcmpiA(dirptr,tmppath)==0, - "%s: SetCurrentDirectory did not change the directory, though it passed\n", - errstr); - ok(SetCurrentDirectoryA(olddir), - "%s: Couldn't set directory to it's original value\n",errstr); - } else { -/* else thest that it fails correctly */ - chklen=lstrlenA(olddir); - ok(val==0, - "%s: SetCurrentDirectoryA passed when it should have failed\n",errstr); - ok(len==chklen, - "%s: SetCurrentDirectory changed the directory, though it failed\n", - errstr); - ok(lstrcmpiA(olddir,tmppath)==0, - "%s: SetCurrentDirectory changed the directory, though it failed\n", - errstr); - } -} -static void test_InitPathA(CHAR *newdir, CHAR *curDrive, CHAR *otherDrive) -{ - CHAR tmppath[MAX_PATH], /*path to TEMP */ - tmpstr[MAX_PATH], - tmpstr1[MAX_PATH]; - DWORD len,len1,drives; - INT id; - HANDLE hndl; - BOOL bRes; - - *curDrive = *otherDrive = NOT_A_VALID_DRIVE; - -/* Get the current drive letter */ - if( GetCurrentDirectoryA( MAX_PATH, tmpstr)) - *curDrive = tmpstr[0]; - else - trace( "Unable to discover current drive, some tests will not be conducted.\n"); - -/* Test GetTempPathA */ - len=GetTempPathA(MAX_PATH,tmppath); - ok(len!=0 && len < MAX_PATH,"GetTempPathA failed\n"); - ok(HAS_TRAIL_SLASH_A(tmppath), - "GetTempPathA returned a path that did not end in '\\'\n"); - lstrcpyA(tmpstr,"aaaaaaaa"); - len1=GetTempPathA(len,tmpstr); - ok(len1==len+1, - "GetTempPathA should return string length %d instead of %d\n",len+1,len1); - -/* Test GetTmpFileNameA - The only test we do here is whether GetTempFileNameA passes or not. - We do not thoroughly test this function yet (specifically, whether - it behaves correctly when 'unique' is non zero) -*/ - ok((id=GetTempFileNameA(tmppath,"path",0,newdir)),"GetTempFileNameA failed\n"); - sprintf(tmpstr,"pat%.4x.tmp",id & 0xffff); - sprintf(tmpstr1,"pat%x.tmp",id & 0xffff); - ok(lstrcmpiA(newdir+lstrlenA(tmppath),tmpstr)==0 || - lstrcmpiA(newdir+lstrlenA(tmppath),tmpstr1)==0, - "GetTempFileNameA returned '%s' which doesn't match '%s' or '%s'. id=%x\n", - newdir,tmpstr,tmpstr1,id); - ok(DeleteFileA(newdir),"Couldn't delete the temporary file we just created\n"); - - id=GetTempFileNameA(tmppath,NULL,0,newdir); -/* Windows 95, 98 return 0==id, while Windows 2000, XP return 0!=id */ - if (id) - { - sprintf(tmpstr,"%.4x.tmp",id & 0xffff); - sprintf(tmpstr1,"%x.tmp",id & 0xffff); - ok(lstrcmpiA(newdir+lstrlenA(tmppath),tmpstr)==0 || - lstrcmpiA(newdir+lstrlenA(tmppath),tmpstr1)==0, - "GetTempFileNameA returned '%s' which doesn't match '%s' or '%s'. id=%x\n", - newdir,tmpstr,tmpstr1,id); - ok(DeleteFileA(newdir),"Couldn't delete the temporary file we just created\n"); - } - -/* Find first valid drive letter that is neither newdir[0] nor curDrive */ - drives = GetLogicalDrives() & ~(1<<(newdir[0]-'A')); - if( *curDrive != NOT_A_VALID_DRIVE) - drives &= ~(1<<(*curDrive-'A')); - if( drives) - for( *otherDrive='A'; (drives & 1) == 0; drives>>=1, (*otherDrive)++); - else - trace( "Could not find alternative drive, some tests will not be conducted.\n"); - -/* Do some CreateDirectoryA tests */ -/* It would be nice to do test the SECURITY_ATTRIBUTES, but I don't - really understand how they work. - More formal tests should be done along with CreateFile tests -*/ - ok((id=GetTempFileNameA(tmppath,"path",0,newdir)),"GetTempFileNameA failed\n"); - ok(CreateDirectoryA(newdir,NULL)==0, - "CreateDirectoryA succeeded even though a file of the same name exists\n"); - ok(DeleteFileA(newdir),"Couldn't delete the temporary file we just created\n"); - ok(CreateDirectoryA(newdir,NULL),"CreateDirectoryA failed\n"); -/* Create some files to test other functions. Note, we will test CreateFileA - at some later point -*/ - sprintf(tmpstr,"%s\\%s",newdir,SHORTDIR); - ok(CreateDirectoryA(tmpstr,NULL),"CreateDirectoryA failed\n"); - sprintf(tmpstr,"%s\\%s",newdir,LONGDIR); - ok(CreateDirectoryA(tmpstr,NULL),"CreateDirectoryA failed\n"); - bRes = CreateDirectoryA("c:",NULL); - ok(!bRes && (GetLastError() == ERROR_ACCESS_DENIED || - GetLastError() == ERROR_ALREADY_EXISTS), - "CreateDirectoryA(\"c:\" should have failed (%d)\n", GetLastError()); - bRes = CreateDirectoryA("c:\\",NULL); - ok(!bRes && (GetLastError() == ERROR_ACCESS_DENIED || - GetLastError() == ERROR_ALREADY_EXISTS), - "CreateDirectoryA(\"c:\\\" should have failed (%d)\n", GetLastError()); - sprintf(tmpstr,"%s\\%s\\%s",newdir,SHORTDIR,SHORTFILE); - hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL, - CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL); - ok(hndl!=INVALID_HANDLE_VALUE,"CreateFileA failed\n"); - ok(CloseHandle(hndl),"CloseHandle failed\n"); - sprintf(tmpstr,"%s\\%s\\%s",newdir,SHORTDIR,LONGFILE); - hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL, - CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL); - ok(hndl!=INVALID_HANDLE_VALUE,"CreateFileA failed\n"); - ok(CloseHandle(hndl),"CloseHandle failed\n"); - sprintf(tmpstr,"%s\\%s\\%s",newdir,LONGDIR,SHORTFILE); - hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL, - CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL); - ok(hndl!=INVALID_HANDLE_VALUE,"CreateFileA failed\n"); - ok(CloseHandle(hndl),"CloseHandle failed\n"); - sprintf(tmpstr,"%s\\%s\\%s",newdir,LONGDIR,LONGFILE); - hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL, - CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL); - ok(hndl!=INVALID_HANDLE_VALUE,"CreateFileA failed\n"); - ok(CloseHandle(hndl),"CloseHandle failed\n"); -} - -/* Test GetCurrentDirectory & SetCurrentDirectory */ -static void test_CurrentDirectoryA(CHAR *origdir, CHAR *newdir) -{ - CHAR tmpstr[MAX_PATH],tmpstr1[MAX_PATH]; - DWORD len,len1; -/* Save the original directory, so that we can return to it at the end - of the test -*/ - len=GetCurrentDirectoryA(MAX_PATH,origdir); - ok(len!=0 && len < MAX_PATH,"GetCurrentDirectoryA failed\n"); -/* Make sure that CetCurrentDirectoryA doesn't overwrite the buffer when the - buffer size is too small to hold the current directory -*/ - lstrcpyA(tmpstr,"aaaaaaa"); - len1=GetCurrentDirectoryA(len,tmpstr); - ok(len1==len+1, "GetCurrentDirectoryA returned %d instead of %d\n",len1,len+1); - ok(lstrcmpiA(tmpstr,"aaaaaaa")==0, - "GetCurrentDirectoryA should not have modified the buffer\n"); -/* SetCurrentDirectoryA shouldn't care whether the string has a - trailing '\\' or not -*/ - sprintf(tmpstr,"%s\\",newdir); - test_setdir(origdir,tmpstr,newdir,1,"check 1"); - test_setdir(origdir,newdir,NULL,1,"check 2"); -/* Set the directory to the working area. We just tested that this works, - so why check it again. -*/ - SetCurrentDirectoryA(newdir); -/* Check that SetCurrentDirectory fails when a nonexistent dir is specified */ - sprintf(tmpstr,"%s\\%s\\%s",newdir,SHORTDIR,NONDIR_SHORT); - test_setdir(newdir,tmpstr,NULL,0,"check 3"); -/* Check that SetCurrentDirectory fails for a nonexistent lond directory */ - sprintf(tmpstr,"%s\\%s\\%s",newdir,SHORTDIR,NONDIR_LONG); - test_setdir(newdir,tmpstr,NULL,0,"check 4"); -/* Check that SetCurrentDirectory passes with a long directory */ - sprintf(tmpstr,"%s\\%s",newdir,LONGDIR); - test_setdir(newdir,tmpstr,NULL,1,"check 5"); -/* Check that SetCurrentDirectory passes with a short relative directory */ - sprintf(tmpstr,"%s",SHORTDIR); - sprintf(tmpstr1,"%s\\%s",newdir,SHORTDIR); - test_setdir(newdir,tmpstr,tmpstr1,1,"check 6"); -/* starting with a '.' */ - sprintf(tmpstr,".\\%s",SHORTDIR); - test_setdir(newdir,tmpstr,tmpstr1,1,"check 7"); -/* Check that SetCurrentDirectory passes with a short relative directory */ - sprintf(tmpstr,"%s",LONGDIR); - sprintf(tmpstr1,"%s\\%s",newdir,LONGDIR); - test_setdir(newdir,tmpstr,tmpstr1,1,"check 8"); -/* starting with a '.' */ - sprintf(tmpstr,".\\%s",LONGDIR); - test_setdir(newdir,tmpstr,tmpstr1,1,"check 9"); -} - -/* Cleanup the mess we made while executing these tests */ -static void test_CleanupPathA(CHAR *origdir, CHAR *curdir) -{ - CHAR tmpstr[MAX_PATH]; - sprintf(tmpstr,"%s\\%s\\%s",curdir,SHORTDIR,SHORTFILE); - ok(DeleteFileA(tmpstr),"DeleteFileA failed\n"); - sprintf(tmpstr,"%s\\%s\\%s",curdir,SHORTDIR,LONGFILE); - ok(DeleteFileA(tmpstr),"DeleteFileA failed\n"); - sprintf(tmpstr,"%s\\%s\\%s",curdir,LONGDIR,SHORTFILE); - ok(DeleteFileA(tmpstr),"DeleteFileA failed\n"); - sprintf(tmpstr,"%s\\%s\\%s",curdir,LONGDIR,LONGFILE); - ok(DeleteFileA(tmpstr),"DeleteFileA failed\n"); - sprintf(tmpstr,"%s\\%s",curdir,SHORTDIR); - ok(RemoveDirectoryA(tmpstr),"RemoveDirectoryA failed\n"); - sprintf(tmpstr,"%s\\%s",curdir,LONGDIR); - ok(RemoveDirectoryA(tmpstr),"RemoveDirectoryA failed\n"); - ok(SetCurrentDirectoryA(origdir),"SetCurrentDirectoryA failed\n"); - ok(RemoveDirectoryA(curdir),"RemoveDirectoryA failed\n"); -} - -/* This routine will test Get(Full|Short|Long)PathNameA */ -static void test_PathNameA(CHAR *curdir, CHAR curDrive, CHAR otherDrive) -{ - CHAR curdir_short[MAX_PATH], - longdir_short[MAX_PATH]; - CHAR tmpstr[MAX_PATH],tmpstr1[MAX_PATH],tmpstr2[MAX_PATH]; - LPSTR strptr; /*ptr to the filename portion of the path */ - DWORD len; - INT i; - CHAR dir[MAX_PATH],eight[MAX_PATH],three[MAX_PATH]; - SLpassfail passfail; - -/* Get the short form of the current directory */ - ok((len=GetShortPathNameA(curdir,curdir_short,MAX_PATH)), - "GetShortPathNameA failed\n"); - ok(!HAS_TRAIL_SLASH_A(curdir_short), - "GetShortPathNameA should not have a trailing \\\n"); -/* Get the short form of the absolute-path to LONGDIR */ - sprintf(tmpstr,"%s\\%s",curdir_short,LONGDIR); - ok((len=GetShortPathNameA(tmpstr,longdir_short,MAX_PATH)), - "GetShortPathNameA failed\n"); - ok(lstrcmpiA(longdir_short+(len-1),"\\")!=0, - "GetShortPathNameA should not have a trailing \\\n"); - - if (pGetLongPathNameA) { - DWORD rc1,rc2; - sprintf(tmpstr,"%s\\%s\\%s",curdir,LONGDIR,LONGFILE); - rc1=(*pGetLongPathNameA)(tmpstr,NULL,0); - rc2=(*pGetLongPathNameA)(curdir,NULL,0); - ok((rc1-strlen(tmpstr))==(rc2-strlen(curdir)), - "GetLongPathNameA: wrong return code, %d instead of %d\n", - rc1, lstrlenA(tmpstr)+1); - - sprintf(dir,"%c:",curDrive); - rc1=(*pGetLongPathNameA)(dir,tmpstr,sizeof(tmpstr)); - ok(strcmp(dir,tmpstr)==0, - "GetLongPathNameA: returned '%s' instead of '%s' (rc=%d)\n", - tmpstr,dir,rc1); - } - -/* Check the cases where both file and directory exist first */ -/* Start with a 8.3 directory, 8.3 filename */ - test_ValidPathA(curdir,SHORTDIR,SHORTFILE,tmpstr,NULL,"test1"); - sprintf(tmpstr1,"%s\\%s\\%s",curdir_short,SHORTDIR,SHORTFILE); - ok(lstrcmpiA(tmpstr,tmpstr1)==0, - "GetShortPathNameA returned '%s' instead of '%s'\n",tmpstr,tmpstr1); -/* Now try a 8.3 directory, long file name */ - test_ValidPathA(curdir,SHORTDIR,LONGFILE,tmpstr,NULL,"test2"); - sprintf(tmpstr1,"%s\\%s",curdir_short,SHORTDIR); - test_LongtoShortA(tmpstr,tmpstr1,"PAT","test2"); -/* Next is a long directory, 8.3 file */ - test_ValidPathA(curdir,LONGDIR,SHORTFILE,tmpstr,NULL,"test3"); - sprintf(tmpstr1,"%s\\%s",longdir_short,SHORTFILE); - ok(lstrcmpiA(tmpstr,tmpstr1)==0, - "GetShortPathNameA returned '%s' instead of '%s'\n",tmpstr,tmpstr1); -/*Lastly a long directory, long file */ - test_ValidPathA(curdir,LONGDIR,LONGFILE,tmpstr,NULL,"test4"); - test_LongtoShortA(tmpstr,longdir_short,"PAT","test4"); - -/* Now check all of the invalid file w/ valid directory combinations */ -/* Start with a 8.3 directory, 8.3 filename */ - test_ValidPathA(curdir,SHORTDIR,NONFILE_SHORT,tmpstr,&passfail,"test5"); - sprintf(tmpstr1,"%s\\%s\\%s",curdir_short,SHORTDIR,NONFILE_SHORT); - ok((passfail.shortlen==0 && - (passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND)) || - (passfail.shortlen==strlen(tmpstr1) && lstrcmpiA(tmpstr,tmpstr1)==0), - "GetShortPathNameA error: len=%d error=%d tmpstr=[%s]\n", - passfail.shortlen,passfail.shorterror,tmpstr); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetlongPathA should have returned 'ERROR_FILE_NOT_FOUND'\n"); - } -/* Now try a 8.3 directory, long file name */ - test_ValidPathA(curdir,SHORTDIR,NONFILE_LONG,tmpstr,&passfail,"test6"); - ok(passfail.shortlen==0,"GetShortPathNameA passed when it shouldn't have\n"); - ok(passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND || - !passfail.shorterror, - "GetShortPathA should have returned 'ERROR_FILE_NOT_FOUND'\n"); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetlongPathA should have returned 'ERROR_FILE_NOT_FOUND'\n"); - } -/* Next is a long directory, 8.3 file */ - test_ValidPathA(curdir,LONGDIR,NONFILE_SHORT,tmpstr,&passfail,"test7"); - sprintf(tmpstr2,"%s\\%s",curdir_short,LONGDIR); - GetShortPathNameA(tmpstr2,tmpstr1,MAX_PATH); - strcat(tmpstr1,"\\" NONFILE_SHORT); - ok((passfail.shortlen==0 && - (passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND)) || - (passfail.shortlen==strlen(tmpstr1) && lstrcmpiA(tmpstr,tmpstr1)==0), - "GetShortPathNameA error: len=%d error=%d tmpstr=[%s]\n", - passfail.shortlen,passfail.shorterror,tmpstr); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetlongPathA should have returned 'ERROR_FILE_NOT_FOUND'\n"); - } -/*Lastly a long directory, long file */ - test_ValidPathA(curdir,LONGDIR,NONFILE_LONG,tmpstr,&passfail,"test8"); - ok(passfail.shortlen==0,"GetShortPathNameA passed when it shouldn't have\n"); - ok(passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND || - !passfail.shorterror, - "GetShortPathA should have returned 'ERROR_FILE_NOT_FOUND'\n"); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetlongPathA should have returned 'ERROR_FILE_NOT_FOUND'\n"); - } -/* Now try again with directories that don't exist */ -/* 8.3 directory, 8.3 filename */ - test_ValidPathA(curdir,NONDIR_SHORT,SHORTFILE,tmpstr,&passfail,"test9"); - sprintf(tmpstr1,"%s\\%s\\%s",curdir_short,NONDIR_SHORT,SHORTFILE); - ok((passfail.shortlen==0 && - (passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND)) || - (passfail.shortlen==strlen(tmpstr1) && lstrcmpiA(tmpstr,tmpstr1)==0), - "GetShortPathNameA error: len=%d error=%d tmpstr=[%s]\n", - passfail.shortlen,passfail.shorterror,tmpstr); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_PATH_NOT_FOUND || - passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetLongPathA returned %d and not 'ERROR_PATH_NOT_FOUND'\n", - passfail.longerror); - } -/* Now try a 8.3 directory, long file name */ - test_ValidPathA(curdir,NONDIR_SHORT,LONGFILE,tmpstr,&passfail,"test10"); - ok(passfail.shortlen==0,"GetShortPathNameA passed when it shouldn't have\n"); - ok(passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND || - !passfail.shorterror, - "GetShortPathA returned %d and not 'ERROR_PATH_NOT_FOUND'\n", - passfail.shorterror); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_PATH_NOT_FOUND || - passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetLongPathA returned %d and not 'ERROR_PATH_NOT_FOUND'\n", - passfail.longerror); - } -/* Next is a long directory, 8.3 file */ - test_ValidPathA(curdir,NONDIR_LONG,SHORTFILE,tmpstr,&passfail,"test11"); - ok(passfail.shortlen==0,"GetShortPathNameA passed when it shouldn't have\n"); - ok(passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND || - !passfail.shorterror, - "GetShortPathA returned %d and not 'ERROR_PATH_NOT_FOUND'\n", - passfail.shorterror); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_PATH_NOT_FOUND || - passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetLongPathA returned %d and not 'ERROR_PATH_NOT_FOUND'\n", - passfail.longerror); - } -/*Lastly a long directory, long file */ - test_ValidPathA(curdir,NONDIR_LONG,LONGFILE,tmpstr,&passfail,"test12"); - ok(passfail.shortlen==0,"GetShortPathNameA passed when it shouldn't have\n"); - ok(passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND || - !passfail.shorterror, - "GetShortPathA returned %d and not 'ERROR_PATH_NOT_FOUND'\n", - passfail.shorterror); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_PATH_NOT_FOUND || - passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetLongPathA returned %d and not 'ERROR_PATH_NOT_FOUND'\n", - passfail.longerror); - } -/* Next try directories ending with '\\' */ -/* Existing Directories */ - sprintf(tmpstr,"%s\\",SHORTDIR); - test_ValidPathA(curdir,"",tmpstr,tmpstr1,NULL,"test13"); - sprintf(tmpstr,"%s\\",LONGDIR); - test_ValidPathA(curdir,"",tmpstr,tmpstr1,NULL,"test14"); -/* Nonexistent directories */ - sprintf(tmpstr,"%s\\",NONDIR_SHORT); - test_ValidPathA(curdir,"",tmpstr,tmpstr1,&passfail,"test15"); - sprintf(tmpstr2,"%s\\%s",curdir_short,tmpstr); - ok((passfail.shortlen==0 && - (passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND)) || - (passfail.shortlen==strlen(tmpstr2) && lstrcmpiA(tmpstr1,tmpstr2)==0), - "GetShortPathNameA error: len=%d error=%d tmpstr=[%s]\n", - passfail.shortlen,passfail.shorterror,tmpstr); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetLongPathA returned %d and not 'ERROR_FILE_NOT_FOUND'\n", - passfail.longerror); - } - sprintf(tmpstr,"%s\\",NONDIR_LONG); - test_ValidPathA(curdir,"",tmpstr,tmpstr1,&passfail,"test16"); - ok(passfail.shortlen==0,"GetShortPathNameA passed when it shouldn't have\n"); - ok(passfail.shorterror==ERROR_PATH_NOT_FOUND || - passfail.shorterror==ERROR_FILE_NOT_FOUND || - !passfail.shorterror, - "GetShortPathA returned %d and not 'ERROR_FILE_NOT_FOUND'\n", - passfail.shorterror); - if(pGetLongPathNameA) { - ok(passfail.longlen==0,"GetLongPathNameA passed when it shouldn't have\n"); - ok(passfail.longerror==ERROR_FILE_NOT_FOUND, - "GetLongPathA returned %d and not 'ERROR_FILE_NOT_FOUND'\n", - passfail.longerror); - } -/* Test GetFullPathNameA with drive letters */ - if( curDrive != NOT_A_VALID_DRIVE) { - sprintf(tmpstr,"%c:",curdir[0]); - ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr2,&strptr), - "GetFullPathNameA(%c:) failed\n", curdir[0]); - GetCurrentDirectoryA(MAX_PATH,tmpstr); - sprintf(tmpstr1,"%s\\",tmpstr); - ok(lstrcmpiA(tmpstr,tmpstr2)==0 || lstrcmpiA(tmpstr1,tmpstr2)==0, - "GetFullPathNameA(%c:) returned '%s' instead of '%s' or '%s'\n", - curdir[0],tmpstr2,tmpstr,tmpstr1); - - sprintf(tmpstr,"%c:\\%s\\%s",curDrive,SHORTDIR,SHORTFILE); - ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed\n"); - ok(lstrcmpiA(tmpstr,tmpstr1)==0, - "GetFullPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr); - ok(lstrcmpiA(SHORTFILE,strptr)==0, - "GetFullPathNameA returned part '%s' instead of '%s'\n",strptr,SHORTFILE); - } -/* Without a leading slash, insert the current directory if on the current drive */ - sprintf(tmpstr,"%c:%s\\%s",curdir[0],SHORTDIR,SHORTFILE); - ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed\n"); - sprintf(tmpstr,"%s\\%s\\%s",curdir,SHORTDIR,SHORTFILE); - ok(lstrcmpiA(tmpstr,tmpstr1)==0, - "GetFullPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr); - ok(lstrcmpiA(SHORTFILE,strptr)==0, - "GetFullPathNameA returned part '%s' instead of '%s'\n",strptr,SHORTFILE); -/* Otherwise insert the missing leading slash */ - if( otherDrive != NOT_A_VALID_DRIVE) { - /* FIXME: this test assumes that current directory on other drive is root */ - sprintf(tmpstr,"%c:%s\\%s",otherDrive,SHORTDIR,SHORTFILE); - ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed for %s\n", tmpstr); - sprintf(tmpstr,"%c:\\%s\\%s",otherDrive,SHORTDIR,SHORTFILE); - ok(lstrcmpiA(tmpstr,tmpstr1)==0, - "GetFullPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr); - ok(lstrcmpiA(SHORTFILE,strptr)==0, - "GetFullPathNameA returned part '%s' instead of '%s'\n",strptr,SHORTFILE); - } -/* Xilinx tools like to mix Unix and DOS formats, which Windows handles fine. - So test for them. */ - if( curDrive != NOT_A_VALID_DRIVE) { - sprintf(tmpstr,"%c:/%s\\%s",curDrive,SHORTDIR,SHORTFILE); - ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed\n"); - sprintf(tmpstr,"%c:\\%s\\%s",curDrive,SHORTDIR,SHORTFILE); - ok(lstrcmpiA(tmpstr,tmpstr1)==0, - "GetFullPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr); - ok(lstrcmpiA(SHORTFILE,strptr)==0, - "GetFullPathNameA returned part '%s' instead of '%s'\n",strptr,SHORTFILE); - } -/**/ - sprintf(tmpstr,"%c:%s/%s",curdir[0],SHORTDIR,SHORTFILE); - ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed\n"); - sprintf(tmpstr,"%s\\%s\\%s",curdir,SHORTDIR,SHORTFILE); - ok(lstrcmpiA(tmpstr,tmpstr1)==0, - "GetFullPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr); - ok(lstrcmpiA(SHORTFILE,strptr)==0, - "GetFullPathNameA returned part '%s' instead of '%s'\n",strptr,SHORTFILE); -/* Windows will insert a drive letter in front of an absolute UNIX path */ - sprintf(tmpstr,"/%s/%s",SHORTDIR,SHORTFILE); - ok(GetFullPathNameA(tmpstr,MAX_PATH,tmpstr1,&strptr),"GetFullPathNameA failed\n"); - sprintf(tmpstr,"%c:\\%s\\%s",*tmpstr1,SHORTDIR,SHORTFILE); - ok(lstrcmpiA(tmpstr,tmpstr1)==0, - "GetFullPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr); -/* This passes in Wine because it still contains the pointer from the previous test */ - ok(lstrcmpiA(SHORTFILE,strptr)==0, - "GetFullPathNameA returned part '%s' instead of '%s'\n",strptr,SHORTFILE); - -/* Now try some relative paths */ - ok(GetShortPathNameA(LONGDIR,tmpstr,MAX_PATH),"GetShortPathNameA failed\n"); - test_SplitShortPathA(tmpstr,dir,eight,three); - if(pGetLongPathNameA) { - ok(pGetLongPathNameA(tmpstr,tmpstr1,MAX_PATH),"GetLongPathNameA failed\n"); - ok(lstrcmpiA(tmpstr1,LONGDIR)==0, - "GetLongPathNameA returned '%s' instead of '%s'\n",tmpstr1,LONGDIR); - } - sprintf(tmpstr,".\\%s",LONGDIR); - ok(GetShortPathNameA(tmpstr,tmpstr1,MAX_PATH),"GetShortPathNameA failed\n"); - test_SplitShortPathA(tmpstr1,dir,eight,three); - ok(lstrcmpiA(dir,".")==0 || dir[0]=='\0', - "GetShortPathNameA did not keep relative directory [%s]\n",tmpstr1); - if(pGetLongPathNameA) { - ok(pGetLongPathNameA(tmpstr1,tmpstr1,MAX_PATH),"GetLongPathNameA failed %s\n", - tmpstr); - ok(lstrcmpiA(tmpstr1,tmpstr)==0, - "GetLongPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr); - } -/* Check out Get*PathNameA on some funny characters */ - for(i=0;i= len_with_null, "Expected >= %u, got %u\n", len_with_null, len); - - len = GetTempPathA(0, NULL); - ok(len >= len_with_null, "Expected >= %u, got %u\n", len_with_null, len); - - /* The call above gave us the buffer size that Windows thinks is needed - * so the next call should work - */ - lstrcpyA(buf, "foo"); - len = GetTempPathA(len, buf); - ok(lstrcmpiA(buf, tmp_dir) == 0, "expected [%s], got [%s]\n",tmp_dir,buf); - ok(len == strlen(buf), "returned length should be equal to the length of string\n"); -} - -static void test_GetTempPathW(char* tmp_dir) -{ - DWORD len, len_with_null; - WCHAR buf[MAX_PATH]; - WCHAR tmp_dirW[MAX_PATH]; - static const WCHAR fooW[] = {'f','o','o',0}; - - MultiByteToWideChar(CP_ACP,0,tmp_dir,-1,tmp_dirW,sizeof(tmp_dirW)/sizeof(*tmp_dirW)); - len_with_null = lstrlenW(tmp_dirW) + 1; - - /* This one is different from ANSI version: ANSI version doesn't - * touch the buffer, unicode version usually truncates the buffer - * to zero size. NT still exaggerates the required buffer size - * sometimes so we cannot test for an exact match. Finally, the - * 'len_with_null - 1' case is so buggy on Windows it's not testable. - * For instance on NT4 it will sometimes return a path without the - * trailing '\\' and sometimes return an error. - */ - - lstrcpyW(buf, fooW); - len = GetTempPathW(MAX_PATH, buf); - if (len==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(lstrcmpiW(buf, tmp_dirW) == 0, "GetTempPathW returned an incorrect temporary path\n"); - ok(len == lstrlenW(buf), "returned length should be equal to the length of string\n"); - - lstrcpyW(buf, fooW); - len = GetTempPathW(1, buf); - ok(buf[0] == 0, "unicode version should truncate the buffer to zero size\n"); - ok(len >= len_with_null, "Expected >= %u, got %u\n", len_with_null, len); - - len = GetTempPathW(0, NULL); - ok(len >= len_with_null, "Expected >= %u, got %u\n", len_with_null, len); - - lstrcpyW(buf, fooW); - len = GetTempPathW(len, buf); - ok(lstrcmpiW(buf, tmp_dirW) == 0, "GetTempPathW returned an incorrect temporary path\n"); - ok(len == lstrlenW(buf), "returned length should be equal to the length of string\n"); -} - -static void test_GetTempPath(void) -{ - char save_TMP[MAX_PATH]; - char windir[MAX_PATH]; - char buf[MAX_PATH]; - - GetEnvironmentVariableA("TMP", save_TMP, sizeof(save_TMP)); - - /* test default configuration */ - trace("TMP=%s\n", save_TMP); - strcpy(buf,save_TMP); - if (buf[strlen(buf)-1]!='\\') - strcat(buf,"\\"); - test_GetTempPathA(buf); - test_GetTempPathW(buf); - - /* TMP=C:\WINDOWS */ - GetWindowsDirectoryA(windir, sizeof(windir)); - SetEnvironmentVariableA("TMP", windir); - GetEnvironmentVariableA("TMP", buf, sizeof(buf)); - trace("TMP=%s\n", buf); - strcat(windir,"\\"); - test_GetTempPathA(windir); - test_GetTempPathW(windir); - - /* TMP=C:\ */ - GetWindowsDirectoryA(windir, sizeof(windir)); - windir[3] = 0; - SetEnvironmentVariableA("TMP", windir); - GetEnvironmentVariableA("TMP", buf, sizeof(buf)); - trace("TMP=%s\n", buf); - test_GetTempPathA(windir); - test_GetTempPathW(windir); - - /* TMP=C: i.e. use current working directory of the specified drive */ - GetWindowsDirectoryA(windir, sizeof(windir)); - SetCurrentDirectoryA(windir); - windir[2] = 0; - SetEnvironmentVariableA("TMP", windir); - GetEnvironmentVariableA("TMP", buf, sizeof(buf)); - trace("TMP=%s\n", buf); - GetWindowsDirectoryA(windir, sizeof(windir)); - strcat(windir,"\\"); - test_GetTempPathA(windir); - test_GetTempPathW(windir); - - SetEnvironmentVariableA("TMP", save_TMP); -} - -static void test_GetLongPathNameW(void) -{ - DWORD length; - WCHAR empty[MAX_PATH]; - - /* Not present in all windows versions */ - if(pGetLongPathNameW) - { - SetLastError(0xdeadbeef); - length = pGetLongPathNameW(NULL,NULL,0); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("GetLongPathNameW is not implemented\n"); - return; - } - ok(0==length,"GetLongPathNameW returned %d but expected 0\n",length); - ok(GetLastError()==ERROR_INVALID_PARAMETER,"GetLastError returned %d but expected ERROR_INVALID_PARAMETER\n",GetLastError()); - - SetLastError(0xdeadbeef); - empty[0]=0; - length = pGetLongPathNameW(empty,NULL,0); - ok(0==length,"GetLongPathNameW returned %d but expected 0\n",length); - ok(GetLastError()==ERROR_PATH_NOT_FOUND,"GetLastError returned %d but expected ERROR_PATH_NOT_FOUND\n",GetLastError()); - } -} - -static void test_GetShortPathNameW(void) -{ - WCHAR test_path[] = { 'L', 'o', 'n', 'g', 'D', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', 'N', 'a', 'm', 'e', 0 }; - WCHAR path[MAX_PATH]; - WCHAR short_path[MAX_PATH]; - DWORD length; - HANDLE file; - int ret; - WCHAR name[] = { 't', 'e', 's', 't', 0 }; - WCHAR backSlash[] = { '\\', 0 }; - - SetLastError(0xdeadbeef); - GetTempPathW( MAX_PATH, path ); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("GetTempPathW is not implemented\n"); - return; - } - - lstrcatW( path, test_path ); - lstrcatW( path, backSlash ); - ret = CreateDirectoryW( path, NULL ); - ok( ret, "Directory was not created. LastError = %d\n", GetLastError() ); - - /* Starting a main part of test */ - length = GetShortPathNameW( path, short_path, 0 ); - ok( length, "GetShortPathNameW returned 0.\n" ); - ret = GetShortPathNameW( path, short_path, length ); - ok( ret, "GetShortPathNameW returned 0.\n" ); - lstrcatW( short_path, name ); - file = CreateFileW( short_path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); - ok( file != INVALID_HANDLE_VALUE, "File was not created.\n" ); - - /* End test */ - CloseHandle( file ); - ret = DeleteFileW( short_path ); - ok( ret, "Cannot delete file.\n" ); - ret = RemoveDirectoryW( path ); - ok( ret, "Cannot delete directory.\n" ); -} - -static void test_GetSystemDirectory(void) -{ - CHAR buffer[MAX_PATH + 4]; - DWORD res; - DWORD total; - - SetLastError(0xdeadbeef); - res = GetSystemDirectory(NULL, 0); - /* res includes the terminating Zero */ - ok(res > 0, "returned %d with %d (expected '>0')\n", res, GetLastError()); - - total = res; - - /* this crashes on XP */ - if (0) res = GetSystemDirectory(NULL, total); - - SetLastError(0xdeadbeef); - res = GetSystemDirectory(NULL, total-1); - /* 95+NT: total (includes the terminating Zero) - 98+ME: 0 with ERROR_INVALID_PARAMETER */ - ok( (res == total) || (!res && (GetLastError() == ERROR_INVALID_PARAMETER)), - "returned %d with %d (expected '%d' or: '0' with " - "ERROR_INVALID_PARAMETER)\n", res, GetLastError(), total); - - if (total > MAX_PATH) return; - - buffer[0] = '\0'; - SetLastError(0xdeadbeef); - res = GetSystemDirectory(buffer, total); - /* res does not include the terminating Zero */ - ok( (res == (total-1)) && (buffer[0]), - "returned %d with %d and '%s' (expected '%d' and a string)\n", - res, GetLastError(), buffer, total-1); - - buffer[0] = '\0'; - SetLastError(0xdeadbeef); - res = GetSystemDirectory(buffer, total + 1); - /* res does not include the terminating Zero */ - ok( (res == (total-1)) && (buffer[0]), - "returned %d with %d and '%s' (expected '%d' and a string)\n", - res, GetLastError(), buffer, total-1); - - memset(buffer, '#', total + 1); - buffer[total + 2] = '\0'; - SetLastError(0xdeadbeef); - res = GetSystemDirectory(buffer, total-1); - /* res includes the terminating Zero) */ - ok( res == total, "returned %d with %d and '%s' (expected '%d')\n", - res, GetLastError(), buffer, total); - - memset(buffer, '#', total + 1); - buffer[total + 2] = '\0'; - SetLastError(0xdeadbeef); - res = GetSystemDirectory(buffer, total-2); - /* res includes the terminating Zero) */ - ok( res == total, "returned %d with %d and '%s' (expected '%d')\n", - res, GetLastError(), buffer, total); -} - -static void test_GetWindowsDirectory(void) -{ - CHAR buffer[MAX_PATH + 4]; - DWORD res; - DWORD total; - - SetLastError(0xdeadbeef); - res = GetWindowsDirectory(NULL, 0); - /* res includes the terminating Zero */ - ok(res > 0, "returned %d with %d (expected '>0')\n", res, GetLastError()); - - total = res; - /* this crashes on XP */ - if (0) res = GetWindowsDirectory(NULL, total); - - SetLastError(0xdeadbeef); - res = GetWindowsDirectory(NULL, total-1); - /* 95+NT: total (includes the terminating Zero) - 98+ME: 0 with ERROR_INVALID_PARAMETER */ - ok( (res == total) || (!res && (GetLastError() == ERROR_INVALID_PARAMETER)), - "returned %d with %d (expected '%d' or: '0' with " - "ERROR_INVALID_PARAMETER)\n", res, GetLastError(), total); - - if (total > MAX_PATH) return; - - buffer[0] = '\0'; - SetLastError(0xdeadbeef); - res = GetWindowsDirectory(buffer, total); - /* res does not include the terminating Zero */ - ok( (res == (total-1)) && (buffer[0]), - "returned %d with %d and '%s' (expected '%d' and a string)\n", - res, GetLastError(), buffer, total-1); - - buffer[0] = '\0'; - SetLastError(0xdeadbeef); - res = GetWindowsDirectory(buffer, total + 1); - /* res does not include the terminating Zero */ - ok( (res == (total-1)) && (buffer[0]), - "returned %d with %d and '%s' (expected '%d' and a string)\n", - res, GetLastError(), buffer, total-1); - - memset(buffer, '#', total + 1); - buffer[total + 2] = '\0'; - SetLastError(0xdeadbeef); - res = GetWindowsDirectory(buffer, total-1); - /* res includes the terminating Zero) */ - ok( res == total, "returned %d with %d and '%s' (expected '%d')\n", - res, GetLastError(), buffer, total); - - memset(buffer, '#', total + 1); - buffer[total + 2] = '\0'; - SetLastError(0xdeadbeef); - res = GetWindowsDirectory(buffer, total-2); - /* res includes the terminating Zero) */ - ok( res == total, "returned %d with %d and '%s' (expected '%d')\n", - res, GetLastError(), buffer, total); -} - -static void test_NeedCurrentDirectoryForExePathA(void) -{ - /* Crashes in Windows */ - if (0) - ok(pNeedCurrentDirectoryForExePathA(NULL), "returned FALSE for NULL\n"); - - SetEnvironmentVariableA("NoDefaultCurrentDirectoryInExePath", NULL); - ok(pNeedCurrentDirectoryForExePathA("."), "returned FALSE for \".\"\n"); - ok(pNeedCurrentDirectoryForExePathA("c:\\"), "returned FALSE for \"c:\\\"\n"); - ok(pNeedCurrentDirectoryForExePathA("cmd.exe"), "returned FALSE for \"cmd.exe\"\n"); - - SetEnvironmentVariableA("NoDefaultCurrentDirectoryInExePath", "nya"); - ok(!pNeedCurrentDirectoryForExePathA("."), "returned TRUE for \".\"\n"); - ok(pNeedCurrentDirectoryForExePathA("c:\\"), "returned FALSE for \"c:\\\"\n"); - ok(!pNeedCurrentDirectoryForExePathA("cmd.exe"), "returned TRUE for \"cmd.exe\"\n"); -} - -static void test_NeedCurrentDirectoryForExePathW(void) -{ - const WCHAR thispath[] = {'.', 0}; - const WCHAR fullpath[] = {'c', ':', '\\', 0}; - const WCHAR cmdname[] = {'c', 'm', 'd', '.', 'e', 'x', 'e', 0}; - - /* Crashes in Windows */ - if (0) - ok(pNeedCurrentDirectoryForExePathW(NULL), "returned FALSE for NULL\n"); - - SetEnvironmentVariableA("NoDefaultCurrentDirectoryInExePath", NULL); - ok(pNeedCurrentDirectoryForExePathW(thispath), "returned FALSE for \".\"\n"); - ok(pNeedCurrentDirectoryForExePathW(fullpath), "returned FALSE for \"c:\\\"\n"); - ok(pNeedCurrentDirectoryForExePathW(cmdname), "returned FALSE for \"cmd.exe\"\n"); - - SetEnvironmentVariableA("NoDefaultCurrentDirectoryInExePath", "nya"); - ok(!pNeedCurrentDirectoryForExePathW(thispath), "returned TRUE for \".\"\n"); - ok(pNeedCurrentDirectoryForExePathW(fullpath), "returned FALSE for \"c:\\\"\n"); - ok(!pNeedCurrentDirectoryForExePathW(cmdname), "returned TRUE for \"cmd.exe\"\n"); -} - -/* Call various path/file name retrieving APIs and check the case of - * the returned drive letter. Some apps (for instance Adobe Photoshop CS3 - * installer) depend on the drive letter being in upper case. - */ -static void test_drive_letter_case(void) -{ - UINT ret; - char buf[MAX_PATH]; - -#define is_upper_case_letter(a) ((a) >= 'A' && (a) <= 'Z') - - memset(buf, 0, sizeof(buf)); - SetLastError(0xdeadbeef); - ret = GetWindowsDirectory(buf, sizeof(buf)); - ok(ret, "GetWindowsDirectory error %u\n", GetLastError()); - ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret); - ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]); - ok(is_upper_case_letter(buf[0]), "expected buf[0] upper case letter got %c\n", buf[0]); - - /* re-use the buffer returned by GetFullPathName */ - buf[2] = '/'; - SetLastError(0xdeadbeef); - ret = GetFullPathName(buf + 2, sizeof(buf), buf, NULL); - ok(ret, "GetFullPathName error %u\n", GetLastError()); - ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret); - ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]); - ok(is_upper_case_letter(buf[0]), "expected buf[0] upper case letter got %c\n", buf[0]); - - memset(buf, 0, sizeof(buf)); - SetLastError(0xdeadbeef); - ret = GetSystemDirectory(buf, sizeof(buf)); - ok(ret, "GetSystemDirectory error %u\n", GetLastError()); - ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret); - ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]); - ok(is_upper_case_letter(buf[0]), "expected buf[0] upper case letter got %c\n", buf[0]); - - memset(buf, 0, sizeof(buf)); - SetLastError(0xdeadbeef); - ret = GetCurrentDirectory(sizeof(buf), buf); - ok(ret, "GetCurrentDirectory error %u\n", GetLastError()); - ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret); - ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]); - ok(is_upper_case_letter(buf[0]), "expected buf[0] upper case letter got %c\n", buf[0]); - - /* TEMP is an environment variable, so it can't be tested for case-sensitivity */ - memset(buf, 0, sizeof(buf)); - SetLastError(0xdeadbeef); - ret = GetTempPath(sizeof(buf), buf); - ok(ret, "GetTempPath error %u\n", GetLastError()); - ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret); - ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]); - ok(buf[strlen(buf)-1] == '\\', "Temporary path (%s) doesn't end in a slash\n", buf); - - memset(buf, 0, sizeof(buf)); - SetLastError(0xdeadbeef); - ret = GetFullPathName(".", sizeof(buf), buf, NULL); - ok(ret, "GetFullPathName error %u\n", GetLastError()); - ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret); - ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]); - ok(is_upper_case_letter(buf[0]), "expected buf[0] upper case letter got %c\n", buf[0]); - - /* re-use the buffer returned by GetFullPathName */ - SetLastError(0xdeadbeef); - ret = GetShortPathName(buf, buf, sizeof(buf)); - ok(ret, "GetShortPathName error %u\n", GetLastError()); - ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret); - ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]); - ok(is_upper_case_letter(buf[0]), "expected buf[0] upper case letter got %c\n", buf[0]); - - if (pGetLongPathNameA) - { - /* re-use the buffer returned by GetShortPathName */ - SetLastError(0xdeadbeef); - ret = pGetLongPathNameA(buf, buf, sizeof(buf)); - ok(ret, "GetLongPathNameA error %u\n", GetLastError()); - ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret); - ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]); - ok(is_upper_case_letter(buf[0]), "expected buf[0] upper case letter got %c\n", buf[0]); - } -#undef is_upper_case_letter -} - -START_TEST(path) -{ - CHAR origdir[MAX_PATH],curdir[MAX_PATH], curDrive, otherDrive; - pGetLongPathNameA = (void*)GetProcAddress( GetModuleHandleA("kernel32.dll"), - "GetLongPathNameA" ); - pGetLongPathNameW = (void*)GetProcAddress(GetModuleHandleA("kernel32.dll") , - "GetLongPathNameW" ); - pNeedCurrentDirectoryForExePathA = - (void*)GetProcAddress( GetModuleHandleA("kernel32.dll"), - "NeedCurrentDirectoryForExePathA" ); - pNeedCurrentDirectoryForExePathW = - (void*)GetProcAddress( GetModuleHandleA("kernel32.dll"), - "NeedCurrentDirectoryForExePathW" ); - - test_InitPathA(curdir, &curDrive, &otherDrive); - test_CurrentDirectoryA(origdir,curdir); - test_PathNameA(curdir, curDrive, otherDrive); - test_CleanupPathA(origdir,curdir); - test_GetTempPath(); - test_GetLongPathNameW(); - test_GetShortPathNameW(); - test_GetSystemDirectory(); - test_GetWindowsDirectory(); - if (pNeedCurrentDirectoryForExePathA) - { - test_NeedCurrentDirectoryForExePathA(); - } - if (pNeedCurrentDirectoryForExePathW) - { - test_NeedCurrentDirectoryForExePathW(); - } - test_drive_letter_case(); -} diff --git a/rostests/winetests/kernel32/pipe.c b/rostests/winetests/kernel32/pipe.c deleted file mode 100755 index ce0f5b691a7..00000000000 --- a/rostests/winetests/kernel32/pipe.c +++ /dev/null @@ -1,1340 +0,0 @@ -/* - * Unit tests for named pipe functions in Wine - * - * Copyright (c) 2002 Dan Kegel - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 -#include -#include -#include - -#include "wine/test.h" - -#define PIPENAME "\\\\.\\PiPe\\tests_pipe.c" - -#define NB_SERVER_LOOPS 8 - -static HANDLE alarm_event; -static BOOL (WINAPI *pDuplicateTokenEx)(HANDLE,DWORD,LPSECURITY_ATTRIBUTES, - SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE); - - -static void test_CreateNamedPipe(int pipemode) -{ - HANDLE hnp; - HANDLE hFile; - static const char obuf[] = "Bit Bucket"; - static const char obuf2[] = "More bits"; - char ibuf[32], *pbuf; - DWORD written; - DWORD readden; - DWORD avail; - DWORD lpmode; - - if (pipemode == PIPE_TYPE_BYTE) - trace("test_CreateNamedPipe starting in byte mode\n"); - else - trace("test_CreateNamedPipe starting in message mode\n"); - /* Bad parameter checks */ - hnp = CreateNamedPipe("not a named pipe", PIPE_ACCESS_DUPLEX, pipemode | PIPE_WAIT, - /* nMaxInstances */ 1, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - - if (hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) { - /* Is this the right way to notify user of skipped tests? */ - ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED, - "CreateNamedPipe not supported on this platform, skipping tests.\n"); - return; - } - ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_INVALID_NAME, - "CreateNamedPipe should fail if name doesn't start with \\\\.\\pipe\n"); - - hnp = CreateNamedPipe(NULL, - PIPE_ACCESS_DUPLEX, pipemode | PIPE_WAIT, - 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL); - ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_PATH_NOT_FOUND, - "CreateNamedPipe should fail if name is NULL\n"); - - hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - ok(hFile == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_FILE_NOT_FOUND, - "connecting to nonexistent named pipe should fail with ERROR_FILE_NOT_FOUND\n"); - - /* Functional checks */ - - hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, pipemode | PIPE_WAIT, - /* nMaxInstances */ 1, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - ok(WaitNamedPipeA(PIPENAME, 2000), "WaitNamedPipe failed (%d)\n", GetLastError()); - - hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFile failed (%d)\n", GetLastError()); - - ok(!WaitNamedPipeA(PIPENAME, 1000), "WaitNamedPipe succeeded\n"); - ok(GetLastError() == ERROR_SEM_TIMEOUT, "wrong error %u\n", GetLastError()); - - /* don't try to do i/o if one side couldn't be opened, as it hangs */ - if (hFile != INVALID_HANDLE_VALUE) { - HANDLE hFile2; - - /* Make sure we can read and write a few bytes in both directions */ - memset(ibuf, 0, sizeof(ibuf)); - ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile\n"); - ok(written == sizeof(obuf), "write file len 1\n"); - ok(PeekNamedPipe(hFile, NULL, 0, NULL, &readden, NULL), "Peek\n"); - ok(readden == sizeof(obuf), "peek 1 got %d bytes\n", readden); - ok(ReadFile(hFile, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n"); - ok(readden == sizeof(obuf), "read 1 got %d bytes\n", readden); - ok(memcmp(obuf, ibuf, written) == 0, "content 1 check\n"); - - memset(ibuf, 0, sizeof(ibuf)); - ok(WriteFile(hFile, obuf2, sizeof(obuf2), &written, NULL), "WriteFile\n"); - ok(written == sizeof(obuf2), "write file len 2\n"); - ok(PeekNamedPipe(hnp, NULL, 0, NULL, &readden, NULL), "Peek\n"); - ok(readden == sizeof(obuf2), "peek 2 got %d bytes\n", readden); - ok(PeekNamedPipe(hnp, (LPVOID)1, 0, NULL, &readden, NULL), "Peek\n"); - ok(readden == sizeof(obuf2), "peek 2 got %d bytes\n", readden); - ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n"); - ok(readden == sizeof(obuf2), "read 2 got %d bytes\n", readden); - ok(memcmp(obuf2, ibuf, written) == 0, "content 2 check\n"); - - /* Test reading of multiple writes */ - memset(ibuf, 0, sizeof(ibuf)); - ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile3a\n"); - ok(written == sizeof(obuf), "write file len 3a\n"); - ok(WriteFile(hnp, obuf2, sizeof(obuf2), &written, NULL), " WriteFile3b\n"); - ok(written == sizeof(obuf2), "write file len 3b\n"); - ok(PeekNamedPipe(hFile, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek3\n"); - if (pipemode == PIPE_TYPE_BYTE) { - if (readden != sizeof(obuf)) /* Linux only returns the first message */ - ok(readden == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes\n", readden); - } - else - { - if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both messages */ - ok(readden == sizeof(obuf), "peek3 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf), "peek3 got %d bytes\n", readden); - } - if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */ - ok(avail == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes available\n", avail); - pbuf = ibuf; - ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "pipe content 3a check\n"); - if (pipemode == PIPE_TYPE_BYTE && readden >= sizeof(obuf)+sizeof(obuf2)) { - pbuf += sizeof(obuf); - ok(memcmp(obuf2, pbuf, sizeof(obuf2)) == 0, "pipe content 3b check\n"); - } - ok(ReadFile(hFile, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n"); - ok(readden == sizeof(obuf) + sizeof(obuf2), "read 3 got %d bytes\n", readden); - pbuf = ibuf; - ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 3a check\n"); - pbuf += sizeof(obuf); - ok(memcmp(obuf2, pbuf, sizeof(obuf2)) == 0, "content 3b check\n"); - - /* Multiple writes in the reverse direction */ - memset(ibuf, 0, sizeof(ibuf)); - ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL), "WriteFile4a\n"); - ok(written == sizeof(obuf), "write file len 4a\n"); - ok(WriteFile(hFile, obuf2, sizeof(obuf2), &written, NULL), " WriteFile4b\n"); - ok(written == sizeof(obuf2), "write file len 4b\n"); - ok(PeekNamedPipe(hnp, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek4\n"); - if (pipemode == PIPE_TYPE_BYTE) { - if (readden != sizeof(obuf)) /* Linux only returns the first message */ - /* should return all 23 bytes */ - ok(readden == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes\n", readden); - } - else - { - if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both messages */ - ok(readden == sizeof(obuf), "peek4 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf), "peek4 got %d bytes\n", readden); - } - if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */ - ok(avail == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes available\n", avail); - pbuf = ibuf; - ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "pipe content 4a check\n"); - if (pipemode == PIPE_TYPE_BYTE && readden >= sizeof(obuf)+sizeof(obuf2)) { - pbuf += sizeof(obuf); - ok(memcmp(obuf2, pbuf, sizeof(obuf2)) == 0, "pipe content 4b check\n"); - } - ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n"); - if (pipemode == PIPE_TYPE_BYTE) { - ok(readden == sizeof(obuf) + sizeof(obuf2), "read 4 got %d bytes\n", readden); - } - else { - todo_wine { - ok(readden == sizeof(obuf), "read 4 got %d bytes\n", readden); - } - } - pbuf = ibuf; - ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 4a check\n"); - if (pipemode == PIPE_TYPE_BYTE) { - pbuf += sizeof(obuf); - ok(memcmp(obuf2, pbuf, sizeof(obuf2)) == 0, "content 4b check\n"); - } - - /* Test reading of multiple writes after a mode change - (CreateFile always creates a byte mode pipe) */ - lpmode = PIPE_READMODE_MESSAGE; - if (pipemode == PIPE_TYPE_BYTE) { - /* trying to change the client end of a byte pipe to message mode should fail */ - ok(!SetNamedPipeHandleState(hFile, &lpmode, NULL, NULL), "Change mode\n"); - } - else { - todo_wine { - ok(SetNamedPipeHandleState(hFile, &lpmode, NULL, NULL), "Change mode\n"); - } - - memset(ibuf, 0, sizeof(ibuf)); - ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile5a\n"); - ok(written == sizeof(obuf), "write file len 3a\n"); - ok(WriteFile(hnp, obuf2, sizeof(obuf2), &written, NULL), " WriteFile5b\n"); - ok(written == sizeof(obuf2), "write file len 3b\n"); - ok(PeekNamedPipe(hFile, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek5\n"); - if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both writes */ - ok(readden == sizeof(obuf), "peek5 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf), "peek5 got %d bytes\n", readden); - if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */ - ok(avail == sizeof(obuf) + sizeof(obuf2), "peek5 got %d bytes available\n", avail); - else - todo_wine ok(avail == sizeof(obuf) + sizeof(obuf2), "peek5 got %d bytes available\n", avail); - pbuf = ibuf; - ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 5a check\n"); - ok(ReadFile(hFile, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n"); - todo_wine { - ok(readden == sizeof(obuf), "read 5 got %d bytes\n", readden); - } - pbuf = ibuf; - ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 5a check\n"); - - /* Multiple writes in the reverse direction */ - /* the write of obuf2 from write4 should still be in the buffer */ - ok(PeekNamedPipe(hnp, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek6a\n"); - todo_wine { - ok(readden == sizeof(obuf2), "peek6a got %d bytes\n", readden); - ok(avail == sizeof(obuf2), "peek6a got %d bytes available\n", avail); - } - if (avail > 0) { - ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n"); - ok(readden == sizeof(obuf2), "read 6a got %d bytes\n", readden); - pbuf = ibuf; - ok(memcmp(obuf2, pbuf, sizeof(obuf2)) == 0, "content 6a check\n"); - } - memset(ibuf, 0, sizeof(ibuf)); - ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL), "WriteFile6a\n"); - ok(written == sizeof(obuf), "write file len 6a\n"); - ok(WriteFile(hFile, obuf2, sizeof(obuf2), &written, NULL), " WriteFile6b\n"); - ok(written == sizeof(obuf2), "write file len 6b\n"); - ok(PeekNamedPipe(hnp, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek6\n"); - if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both writes */ - ok(readden == sizeof(obuf), "peek6 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf), "peek6 got %d bytes\n", readden); - if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */ - ok(avail == sizeof(obuf) + sizeof(obuf2), "peek6b got %d bytes available\n", avail); - pbuf = ibuf; - ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 6a check\n"); - ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n"); - todo_wine { - ok(readden == sizeof(obuf), "read 6b got %d bytes\n", readden); - } - pbuf = ibuf; - ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 6a check\n"); - } - - /* Picky conformance tests */ - - /* Verify that you can't connect to pipe again - * until server calls DisconnectNamedPipe+ConnectNamedPipe - * or creates a new pipe - * case 1: other client not yet closed - */ - hFile2 = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - ok(hFile2 == INVALID_HANDLE_VALUE, - "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail\n"); - ok(GetLastError() == ERROR_PIPE_BUSY, - "connecting to named pipe before other client closes should fail with ERROR_PIPE_BUSY\n"); - - ok(CloseHandle(hFile), "CloseHandle\n"); - - /* case 2: other client already closed */ - hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - ok(hFile == INVALID_HANDLE_VALUE, - "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail\n"); - ok(GetLastError() == ERROR_PIPE_BUSY, - "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail with ERROR_PIPE_BUSY\n"); - - ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe\n"); - - /* case 3: server has called DisconnectNamedPipe but not ConnectNamed Pipe */ - hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - ok(hFile == INVALID_HANDLE_VALUE, - "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail\n"); - ok(GetLastError() == ERROR_PIPE_BUSY, - "connecting to named pipe after other client closes but before ConnectNamedPipe should fail with ERROR_PIPE_BUSY\n"); - - /* to be complete, we'd call ConnectNamedPipe here and loop, - * but by default that's blocking, so we'd either have - * to turn on the uncommon nonblocking mode, or - * use another thread. - */ - } - - ok(CloseHandle(hnp), "CloseHandle\n"); - - trace("test_CreateNamedPipe returning\n"); -} - -static void test_CreateNamedPipe_instances_must_match(void) -{ - HANDLE hnp, hnp2; - - /* Check no mismatch */ - hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 2, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - hnp2 = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 2, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp2 != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - ok(CloseHandle(hnp), "CloseHandle\n"); - ok(CloseHandle(hnp2), "CloseHandle\n"); - - /* Check nMaxInstances */ - hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 1, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - hnp2 = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 1, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp2 == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_PIPE_BUSY, "nMaxInstances not obeyed\n"); - - ok(CloseHandle(hnp), "CloseHandle\n"); - - /* Check PIPE_ACCESS_* */ - hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 2, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - hnp2 = CreateNamedPipe(PIPENAME, PIPE_ACCESS_INBOUND, PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 1, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp2 == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_ACCESS_DENIED, "PIPE_ACCESS_* mismatch allowed\n"); - - ok(CloseHandle(hnp), "CloseHandle\n"); - - /* etc, etc */ -} - -/** implementation of alarm() */ -static DWORD CALLBACK alarmThreadMain(LPVOID arg) -{ - DWORD timeout = (DWORD) arg; - trace("alarmThreadMain\n"); - if (WaitForSingleObject( alarm_event, timeout ) == WAIT_TIMEOUT) - { - ok(FALSE, "alarm\n"); - ExitProcess(1); - } - return 1; -} - -HANDLE hnp = INVALID_HANDLE_VALUE; - -/** Trivial byte echo server - disconnects after each session */ -static DWORD CALLBACK serverThreadMain1(LPVOID arg) -{ - int i; - - trace("serverThreadMain1 start\n"); - /* Set up a simple echo server */ - hnp = CreateNamedPipe(PIPENAME "serverThreadMain1", PIPE_ACCESS_DUPLEX, - PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 1, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - - ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - for (i = 0; i < NB_SERVER_LOOPS; i++) { - char buf[512]; - DWORD written; - DWORD readden; - DWORD success; - - /* Wait for client to connect */ - trace("Server calling ConnectNamedPipe...\n"); - ok(ConnectNamedPipe(hnp, NULL) - || GetLastError() == ERROR_PIPE_CONNECTED, "ConnectNamedPipe\n"); - trace("ConnectNamedPipe returned.\n"); - - /* Echo bytes once */ - memset(buf, 0, sizeof(buf)); - - trace("Server reading...\n"); - success = ReadFile(hnp, buf, sizeof(buf), &readden, NULL); - trace("Server done reading.\n"); - ok(success, "ReadFile\n"); - ok(readden, "short read\n"); - - trace("Server writing...\n"); - ok(WriteFile(hnp, buf, readden, &written, NULL), "WriteFile\n"); - trace("Server done writing.\n"); - ok(written == readden, "write file len\n"); - - /* finish this connection, wait for next one */ - ok(FlushFileBuffers(hnp), "FlushFileBuffers\n"); - trace("Server done flushing.\n"); - ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe\n"); - trace("Server done disconnecting.\n"); - } - return 0; -} - -/** Trivial byte echo server - closes after each connection */ -static DWORD CALLBACK serverThreadMain2(LPVOID arg) -{ - int i; - HANDLE hnpNext = 0; - - trace("serverThreadMain2\n"); - /* Set up a simple echo server */ - hnp = CreateNamedPipe(PIPENAME "serverThreadMain2", PIPE_ACCESS_DUPLEX, - PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 2, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - for (i = 0; i < NB_SERVER_LOOPS; i++) { - char buf[512]; - DWORD written; - DWORD readden; - DWORD success; - - /* Wait for client to connect */ - trace("Server calling ConnectNamedPipe...\n"); - ok(ConnectNamedPipe(hnp, NULL) - || GetLastError() == ERROR_PIPE_CONNECTED, "ConnectNamedPipe\n"); - trace("ConnectNamedPipe returned.\n"); - - /* Echo bytes once */ - memset(buf, 0, sizeof(buf)); - - trace("Server reading...\n"); - success = ReadFile(hnp, buf, sizeof(buf), &readden, NULL); - trace("Server done reading.\n"); - ok(success, "ReadFile\n"); - - trace("Server writing...\n"); - ok(WriteFile(hnp, buf, readden, &written, NULL), "WriteFile\n"); - trace("Server done writing.\n"); - ok(written == readden, "write file len\n"); - - /* finish this connection, wait for next one */ - ok(FlushFileBuffers(hnp), "FlushFileBuffers\n"); - ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe\n"); - - /* Set up next echo server */ - hnpNext = - CreateNamedPipe(PIPENAME "serverThreadMain2", PIPE_ACCESS_DUPLEX, - PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 2, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - - ok(hnpNext != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - ok(CloseHandle(hnp), "CloseHandle\n"); - hnp = hnpNext; - } - return 0; -} - -/** Trivial byte echo server - uses overlapped named pipe calls */ -static DWORD CALLBACK serverThreadMain3(LPVOID arg) -{ - int i; - HANDLE hEvent; - - trace("serverThreadMain3\n"); - /* Set up a simple echo server */ - hnp = CreateNamedPipe(PIPENAME "serverThreadMain3", PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, - PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 1, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - hEvent = CreateEvent(NULL, /* security attribute */ - TRUE, /* manual reset event */ - FALSE, /* initial state */ - NULL); /* name */ - ok(hEvent != NULL, "CreateEvent\n"); - - for (i = 0; i < NB_SERVER_LOOPS; i++) { - char buf[512]; - DWORD written; - DWORD readden; - DWORD dummy; - DWORD success; - OVERLAPPED oOverlap; - int letWFSOEwait = (i & 2); - int letGORwait = (i & 1); - DWORD err; - - memset(&oOverlap, 0, sizeof(oOverlap)); - oOverlap.hEvent = hEvent; - - /* Wait for client to connect */ - trace("Server calling overlapped ConnectNamedPipe...\n"); - success = ConnectNamedPipe(hnp, &oOverlap); - err = GetLastError(); - ok(success || err == ERROR_IO_PENDING - || err == ERROR_PIPE_CONNECTED, "overlapped ConnectNamedPipe\n"); - trace("overlapped ConnectNamedPipe returned.\n"); - if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait) - ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait ConnectNamedPipe\n"); - success = GetOverlappedResult(hnp, &oOverlap, &dummy, letGORwait); - if (!letGORwait && !letWFSOEwait && !success) { - ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n"); - success = GetOverlappedResult(hnp, &oOverlap, &dummy, TRUE); - } - ok(success, "GetOverlappedResult ConnectNamedPipe\n"); - trace("overlapped ConnectNamedPipe operation complete.\n"); - - /* Echo bytes once */ - memset(buf, 0, sizeof(buf)); - - trace("Server reading...\n"); - success = ReadFile(hnp, buf, sizeof(buf), NULL, &oOverlap); - trace("Server ReadFile returned...\n"); - err = GetLastError(); - ok(success || err == ERROR_IO_PENDING, "overlapped ReadFile\n"); - trace("overlapped ReadFile returned.\n"); - if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait) - ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait ReadFile\n"); - success = GetOverlappedResult(hnp, &oOverlap, &readden, letGORwait); - if (!letGORwait && !letWFSOEwait && !success) { - ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n"); - success = GetOverlappedResult(hnp, &oOverlap, &readden, TRUE); - } - trace("Server done reading.\n"); - ok(success, "overlapped ReadFile\n"); - - trace("Server writing...\n"); - success = WriteFile(hnp, buf, readden, NULL, &oOverlap); - trace("Server WriteFile returned...\n"); - err = GetLastError(); - ok(success || err == ERROR_IO_PENDING, "overlapped WriteFile\n"); - trace("overlapped WriteFile returned.\n"); - if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait) - ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait WriteFile\n"); - success = GetOverlappedResult(hnp, &oOverlap, &written, letGORwait); - if (!letGORwait && !letWFSOEwait && !success) { - ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n"); - success = GetOverlappedResult(hnp, &oOverlap, &written, TRUE); - } - trace("Server done writing.\n"); - ok(success, "overlapped WriteFile\n"); - ok(written == readden, "write file len\n"); - - /* finish this connection, wait for next one */ - ok(FlushFileBuffers(hnp), "FlushFileBuffers\n"); - ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe\n"); - } - return 0; -} - -static void exercizeServer(const char *pipename, HANDLE serverThread) -{ - int i; - - trace("exercizeServer starting\n"); - for (i = 0; i < NB_SERVER_LOOPS; i++) { - HANDLE hFile=INVALID_HANDLE_VALUE; - static const char obuf[] = "Bit Bucket"; - char ibuf[32]; - DWORD written; - DWORD readden; - int loop; - - for (loop = 0; loop < 3; loop++) { - DWORD err; - trace("Client connecting...\n"); - /* Connect to the server */ - hFile = CreateFileA(pipename, GENERIC_READ | GENERIC_WRITE, 0, - NULL, OPEN_EXISTING, 0, 0); - if (hFile != INVALID_HANDLE_VALUE) - break; - err = GetLastError(); - if (loop == 0) - ok(err == ERROR_PIPE_BUSY || err == ERROR_FILE_NOT_FOUND, "connecting to pipe\n"); - else - ok(err == ERROR_PIPE_BUSY, "connecting to pipe\n"); - trace("connect failed, retrying\n"); - Sleep(200); - } - ok(hFile != INVALID_HANDLE_VALUE, "client opening named pipe\n"); - - /* Make sure it can echo */ - memset(ibuf, 0, sizeof(ibuf)); - trace("Client writing...\n"); - ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL), "WriteFile to client end of pipe\n"); - ok(written == sizeof(obuf), "write file len\n"); - trace("Client reading...\n"); - ok(ReadFile(hFile, ibuf, sizeof(obuf), &readden, NULL), "ReadFile from client end of pipe\n"); - ok(readden == sizeof(obuf), "read file len\n"); - ok(memcmp(obuf, ibuf, written) == 0, "content check\n"); - - trace("Client closing...\n"); - ok(CloseHandle(hFile), "CloseHandle\n"); - } - - ok(WaitForSingleObject(serverThread,INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject\n"); - CloseHandle(hnp); - trace("exercizeServer returning\n"); -} - -static void test_NamedPipe_2(void) -{ - HANDLE serverThread; - DWORD serverThreadId; - HANDLE alarmThread; - DWORD alarmThreadId; - - trace("test_NamedPipe_2 starting\n"); - /* Set up a ten second timeout */ - alarm_event = CreateEvent( NULL, TRUE, FALSE, NULL ); - alarmThread = CreateThread(NULL, 0, alarmThreadMain, (void *) 10000, 0, &alarmThreadId); - - /* The servers we're about to exercize do try to clean up carefully, - * but to reduce the change of a test failure due to a pipe handle - * leak in the test code, we'll use a different pipe name for each server. - */ - - /* Try server #1 */ - serverThread = CreateThread(NULL, 0, serverThreadMain1, (void *)8, 0, &serverThreadId); - ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread\n"); - exercizeServer(PIPENAME "serverThreadMain1", serverThread); - - /* Try server #2 */ - serverThread = CreateThread(NULL, 0, serverThreadMain2, 0, 0, &serverThreadId); - ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread\n"); - exercizeServer(PIPENAME "serverThreadMain2", serverThread); - - if( 0 ) /* overlapped pipe server doesn't work yet - it randomly fails */ - { - /* Try server #3 */ - serverThread = CreateThread(NULL, 0, serverThreadMain3, 0, 0, &serverThreadId); - ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread\n"); - exercizeServer(PIPENAME "serverThreadMain3", serverThread); - } - - ok(SetEvent( alarm_event ), "SetEvent\n"); - CloseHandle( alarm_event ); - trace("test_NamedPipe_2 returning\n"); -} - -static int test_DisconnectNamedPipe(void) -{ - HANDLE hnp; - HANDLE hFile; - static const char obuf[] = "Bit Bucket"; - char ibuf[32]; - DWORD written; - DWORD readden; - - hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, - /* nMaxInstances */ 1, - /* nOutBufSize */ 1024, - /* nInBufSize */ 1024, - /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, - /* lpSecurityAttrib */ NULL); - if (INVALID_HANDLE_VALUE == hnp) { - trace ("Seems we have no named pipes.\n"); - return 1; - } - - ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL) == 0 - && GetLastError() == ERROR_PIPE_LISTENING, "WriteFile to not-yet-connected pipe\n"); - ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL) == 0 - && GetLastError() == ERROR_PIPE_LISTENING, "ReadFile from not-yet-connected pipe\n"); - - hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFile failed\n"); - - /* don't try to do i/o if one side couldn't be opened, as it hangs */ - if (hFile != INVALID_HANDLE_VALUE) { - - /* see what happens if server calls DisconnectNamedPipe - * when there are bytes in the pipe - */ - - ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL), "WriteFile\n"); - ok(written == sizeof(obuf), "write file len\n"); - ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe while messages waiting\n"); - ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL) == 0 - && GetLastError() == ERROR_PIPE_NOT_CONNECTED, "WriteFile to disconnected pipe\n"); - ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL) == 0 - && GetLastError() == ERROR_PIPE_NOT_CONNECTED, - "ReadFile from disconnected pipe with bytes waiting\n"); - ok(!DisconnectNamedPipe(hnp) && GetLastError() == ERROR_PIPE_NOT_CONNECTED, - "DisconnectNamedPipe worked twice\n"); - ok(CloseHandle(hFile), "CloseHandle\n"); - } - - ok(CloseHandle(hnp), "CloseHandle\n"); - - return 0; -} -static void test_CreatePipe(void) -{ - SECURITY_ATTRIBUTES pipe_attr; - HANDLE piperead, pipewrite; - DWORD written; - DWORD read; - DWORD i, size; - BYTE *buffer; - char readbuf[32]; - - pipe_attr.nLength = sizeof(SECURITY_ATTRIBUTES); - pipe_attr.bInheritHandle = TRUE; - pipe_attr.lpSecurityDescriptor = NULL; - ok(CreatePipe(&piperead, &pipewrite, &pipe_attr, 0) != 0, "CreatePipe failed\n"); - ok(WriteFile(pipewrite,PIPENAME,sizeof(PIPENAME), &written, NULL), "Write to anonymous pipe failed\n"); - ok(written == sizeof(PIPENAME), "Write to anonymous pipe wrote %d bytes\n", written); - ok(ReadFile(piperead,readbuf,sizeof(readbuf),&read, NULL), "Read from non empty pipe failed\n"); - ok(read == sizeof(PIPENAME), "Read from anonymous pipe got %d bytes\n", read); - ok(CloseHandle(pipewrite), "CloseHandle for the write pipe failed\n"); - ok(CloseHandle(piperead), "CloseHandle for the read pipe failed\n"); - - /* Now write another chunk*/ - ok(CreatePipe(&piperead, &pipewrite, &pipe_attr, 0) != 0, "CreatePipe failed\n"); - ok(WriteFile(pipewrite,PIPENAME,sizeof(PIPENAME), &written, NULL), "Write to anonymous pipe failed\n"); - ok(written == sizeof(PIPENAME), "Write to anonymous pipe wrote %d bytes\n", written); - /* and close the write end, read should still succeed*/ - ok(CloseHandle(pipewrite), "CloseHandle for the Write Pipe failed\n"); - ok(ReadFile(piperead,readbuf,sizeof(readbuf),&read, NULL), "Read from broken pipe withe with pending data failed\n"); - ok(read == sizeof(PIPENAME), "Read from anonymous pipe got %d bytes\n", read); - /* But now we need to get informed that the pipe is closed */ - ok(ReadFile(piperead,readbuf,sizeof(readbuf),&read, NULL) == 0, "Broken pipe not detected\n"); - ok(CloseHandle(piperead), "CloseHandle for the read pipe failed\n"); - - /* Try bigger chunks */ - size = 32768; - buffer = HeapAlloc( GetProcessHeap(), 0, size ); - for (i = 0; i < size; i++) buffer[i] = i; - ok(CreatePipe(&piperead, &pipewrite, &pipe_attr, size) != 0, "CreatePipe failed\n"); - ok(WriteFile(pipewrite, buffer, size, &written, NULL), "Write to anonymous pipe failed\n"); - ok(written == size, "Write to anonymous pipe wrote %d bytes\n", written); - /* and close the write end, read should still succeed*/ - ok(CloseHandle(pipewrite), "CloseHandle for the Write Pipe failed\n"); - memset( buffer, 0, size ); - ok(ReadFile(piperead, buffer, size, &read, NULL), "Read from broken pipe withe with pending data failed\n"); - ok(read == size, "Read from anonymous pipe got %d bytes\n", read); - for (i = 0; i < size; i++) ok( buffer[i] == (BYTE)i, "invalid data %x at %x\n", buffer[i], i ); - /* But now we need to get informed that the pipe is closed */ - ok(ReadFile(piperead,readbuf,sizeof(readbuf),&read, NULL) == 0, "Broken pipe not detected\n"); - ok(CloseHandle(piperead), "CloseHandle for the read pipe failed\n"); - HeapFree(GetProcessHeap(), 0, buffer); -} - -struct named_pipe_client_params -{ - DWORD security_flags; - HANDLE token; - BOOL revert; -}; - -#define PIPE_NAME "\\\\.\\pipe\\named_pipe_test" - -static DWORD CALLBACK named_pipe_client_func(LPVOID p) -{ - struct named_pipe_client_params *params = (struct named_pipe_client_params *)p; - HANDLE pipe; - BOOL ret; - const char message[] = "Test"; - DWORD bytes_read, bytes_written; - char dummy; - TOKEN_PRIVILEGES *Privileges = NULL; - - if (params->token) - { - if (params->revert) - { - /* modify the token so we can tell if the pipe impersonation - * token reverts to the process token */ - ret = AdjustTokenPrivileges(params->token, TRUE, NULL, 0, NULL, NULL); - ok(ret, "AdjustTokenPrivileges failed with error %d\n", GetLastError()); - } - ret = SetThreadToken(NULL, params->token); - ok(ret, "SetThreadToken failed with error %d\n", GetLastError()); - } - else - { - DWORD Size = 0; - HANDLE process_token; - - ret = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &process_token); - ok(ret, "OpenProcessToken failed with error %d\n", GetLastError()); - - ret = GetTokenInformation(process_token, TokenPrivileges, NULL, 0, &Size); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetTokenInformation(TokenPrivileges) failed with %d\n", GetLastError()); - Privileges = HeapAlloc(GetProcessHeap(), 0, Size); - ret = GetTokenInformation(process_token, TokenPrivileges, Privileges, Size, &Size); - ok(ret, "GetTokenInformation(TokenPrivileges) failed with %d\n", GetLastError()); - - ret = AdjustTokenPrivileges(process_token, TRUE, NULL, 0, NULL, NULL); - ok(ret, "AdjustTokenPrivileges failed with error %d\n", GetLastError()); - - CloseHandle(process_token); - } - - pipe = CreateFile(PIPE_NAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, params->security_flags, NULL); - ok(pipe != INVALID_HANDLE_VALUE, "CreateFile for pipe failed with error %d\n", GetLastError()); - - ret = WriteFile(pipe, message, sizeof(message), &bytes_written, NULL); - ok(ret, "WriteFile failed with error %d\n", GetLastError()); - - ret = ReadFile(pipe, &dummy, sizeof(dummy), &bytes_read, NULL); - ok(ret, "ReadFile failed with error %d\n", GetLastError()); - - if (params->token) - { - if (params->revert) - { - ret = RevertToSelf(); - ok(ret, "RevertToSelf failed with error %d\n", GetLastError()); - } - else - { - ret = AdjustTokenPrivileges(params->token, TRUE, NULL, 0, NULL, NULL); - ok(ret, "AdjustTokenPrivileges failed with error %d\n", GetLastError()); - } - } - else - { - HANDLE process_token; - - ret = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &process_token); - ok(ret, "OpenProcessToken failed with error %d\n", GetLastError()); - - ret = AdjustTokenPrivileges(process_token, FALSE, Privileges, 0, NULL, NULL); - ok(ret, "AdjustTokenPrivileges failed with error %d\n", GetLastError()); - - HeapFree(GetProcessHeap(), 0, Privileges); - - CloseHandle(process_token); - } - - ret = WriteFile(pipe, message, sizeof(message), &bytes_written, NULL); - ok(ret, "WriteFile failed with error %d\n", GetLastError()); - - ret = ReadFile(pipe, &dummy, sizeof(dummy), &bytes_read, NULL); - ok(ret, "ReadFile failed with error %d\n", GetLastError()); - - CloseHandle(pipe); - - return 0; -} - -static HANDLE make_impersonation_token(DWORD Access, SECURITY_IMPERSONATION_LEVEL ImpersonationLevel) -{ - HANDLE ProcessToken; - HANDLE Token = NULL; - BOOL ret; - - ret = OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE, &ProcessToken); - ok(ret, "OpenProcessToken failed with error %d\n", GetLastError()); - - ret = pDuplicateTokenEx(ProcessToken, Access, NULL, ImpersonationLevel, TokenImpersonation, &Token); - ok(ret, "DuplicateToken failed with error %d\n", GetLastError()); - - CloseHandle(ProcessToken); - - return Token; -} - -static void test_ImpersonateNamedPipeClient(HANDLE hClientToken, DWORD security_flags, BOOL revert, void (*test_func)(int, HANDLE)) -{ - HANDLE hPipeServer; - BOOL ret; - DWORD dwTid; - HANDLE hThread; - char buffer[256]; - DWORD dwBytesRead; - DWORD error; - struct named_pipe_client_params params; - char dummy = 0; - DWORD dwBytesWritten; - HANDLE hToken = NULL; - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; - DWORD size; - - hPipeServer = CreateNamedPipe(PIPE_NAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 1, 100, 100, NMPWAIT_USE_DEFAULT_WAIT, NULL); - ok(hPipeServer != INVALID_HANDLE_VALUE, "CreateNamedPipe failed with error %d\n", GetLastError()); - - params.security_flags = security_flags; - params.token = hClientToken; - params.revert = revert; - hThread = CreateThread(NULL, 0, named_pipe_client_func, ¶ms, 0, &dwTid); - ok(hThread != NULL, "CreateThread failed with error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = ImpersonateNamedPipeClient(hPipeServer); - error = GetLastError(); - todo_wine - ok(!ret && (error == ERROR_CANNOT_IMPERSONATE), "ImpersonateNamedPipeClient should have failed with ERROR_CANNOT_IMPERSONATE instead of %d\n", GetLastError()); - - ret = ConnectNamedPipe(hPipeServer, NULL); - ok(ret || (GetLastError() == ERROR_PIPE_CONNECTED), "ConnectNamedPipe failed with error %d\n", GetLastError()); - - ret = ReadFile(hPipeServer, buffer, sizeof(buffer), &dwBytesRead, NULL); - ok(ret, "ReadFile failed with error %d\n", GetLastError()); - - ret = ImpersonateNamedPipeClient(hPipeServer); - ok(ret, "ImpersonateNamedPipeClient failed with error %d\n", GetLastError()); - - ret = OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hToken); - ok(ret, "OpenThreadToken failed with error %d\n", GetLastError()); - - (*test_func)(0, hToken); - - ImpersonationLevel = 0xdeadbeef; /* to avoid false positives */ - ret = GetTokenInformation(hToken, TokenImpersonationLevel, &ImpersonationLevel, sizeof(ImpersonationLevel), &size); - ok(ret, "GetTokenInformation(TokenImpersonationLevel) failed with error %d\n", GetLastError()); - ok(ImpersonationLevel == SecurityImpersonation, "ImpersonationLevel should have been SecurityImpersonation(%d) instead of %d\n", SecurityImpersonation, ImpersonationLevel); - - CloseHandle(hToken); - - RevertToSelf(); - - ret = WriteFile(hPipeServer, &dummy, sizeof(dummy), &dwBytesWritten, NULL); - ok(ret, "WriteFile failed with error %d\n", GetLastError()); - - ret = ReadFile(hPipeServer, buffer, sizeof(buffer), &dwBytesRead, NULL); - ok(ret, "ReadFile failed with error %d\n", GetLastError()); - - ret = ImpersonateNamedPipeClient(hPipeServer); - ok(ret, "ImpersonateNamedPipeClient failed with error %d\n", GetLastError()); - - ret = OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hToken); - ok(ret, "OpenThreadToken failed with error %d\n", GetLastError()); - - (*test_func)(1, hToken); - - CloseHandle(hToken); - - RevertToSelf(); - - ret = WriteFile(hPipeServer, &dummy, sizeof(dummy), &dwBytesWritten, NULL); - ok(ret, "WriteFile failed with error %d\n", GetLastError()); - - WaitForSingleObject(hThread, INFINITE); - - ret = ImpersonateNamedPipeClient(hPipeServer); - ok(ret, "ImpersonateNamedPipeClient failed with error %d\n", GetLastError()); - - RevertToSelf(); - - CloseHandle(hThread); - CloseHandle(hPipeServer); -} - -static BOOL are_all_privileges_disabled(HANDLE hToken) -{ - BOOL ret; - TOKEN_PRIVILEGES *Privileges = NULL; - DWORD Size = 0; - BOOL all_privs_disabled = TRUE; - DWORD i; - - ret = GetTokenInformation(hToken, TokenPrivileges, NULL, 0, &Size); - if (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER) - { - Privileges = HeapAlloc(GetProcessHeap(), 0, Size); - ret = GetTokenInformation(hToken, TokenPrivileges, Privileges, Size, &Size); - if (!ret) - { - HeapFree(GetProcessHeap(), 0, Privileges); - return FALSE; - } - } - else - return FALSE; - - for (i = 0; i < Privileges->PrivilegeCount; i++) - { - if (Privileges->Privileges[i].Attributes & SE_PRIVILEGE_ENABLED) - { - all_privs_disabled = FALSE; - break; - } - } - - HeapFree(GetProcessHeap(), 0, Privileges); - - return all_privs_disabled; -} - -static DWORD get_privilege_count(HANDLE hToken) -{ - TOKEN_STATISTICS Statistics; - DWORD Size = sizeof(Statistics); - BOOL ret; - - ret = GetTokenInformation(hToken, TokenStatistics, &Statistics, Size, &Size); - ok(ret, "GetTokenInformation(TokenStatistics)\n"); - if (!ret) return -1; - - return Statistics.PrivilegeCount; -} - -static void test_no_sqos_no_token(int call_index, HANDLE hToken) -{ - DWORD priv_count; - - switch (call_index) - { - case 0: - priv_count = get_privilege_count(hToken); - todo_wine - ok(priv_count == 0, "privilege count should have been 0 instead of %d\n", priv_count); - break; - case 1: - priv_count = get_privilege_count(hToken); - ok(priv_count > 0, "privilege count should now be > 0 instead of 0\n"); - ok(!are_all_privileges_disabled(hToken), "impersonated token should not have been modified\n"); - break; - default: - ok(0, "shouldn't happen\n"); - } -} - -static void test_no_sqos(int call_index, HANDLE hToken) -{ - switch (call_index) - { - case 0: - ok(!are_all_privileges_disabled(hToken), "token should be a copy of the process one\n"); - break; - case 1: - todo_wine - ok(are_all_privileges_disabled(hToken), "impersonated token should have been modified\n"); - break; - default: - ok(0, "shouldn't happen\n"); - } -} - -static void test_static_context(int call_index, HANDLE hToken) -{ - switch (call_index) - { - case 0: - ok(!are_all_privileges_disabled(hToken), "token should be a copy of the process one\n"); - break; - case 1: - ok(!are_all_privileges_disabled(hToken), "impersonated token should not have been modified\n"); - break; - default: - ok(0, "shouldn't happen\n"); - } -} - -static void test_dynamic_context(int call_index, HANDLE hToken) -{ - switch (call_index) - { - case 0: - ok(!are_all_privileges_disabled(hToken), "token should be a copy of the process one\n"); - break; - case 1: - todo_wine - ok(are_all_privileges_disabled(hToken), "impersonated token should have been modified\n"); - break; - default: - ok(0, "shouldn't happen\n"); - } -} - -static void test_dynamic_context_no_token(int call_index, HANDLE hToken) -{ - switch (call_index) - { - case 0: - ok(are_all_privileges_disabled(hToken), "token should be a copy of the process one\n"); - break; - case 1: - ok(!are_all_privileges_disabled(hToken), "process token modification should have been detected and impersonation token updated\n"); - break; - default: - ok(0, "shouldn't happen\n"); - } -} - -static void test_no_sqos_revert(int call_index, HANDLE hToken) -{ - DWORD priv_count; - switch (call_index) - { - case 0: - priv_count = get_privilege_count(hToken); - todo_wine - ok(priv_count == 0, "privilege count should have been 0 instead of %d\n", priv_count); - break; - case 1: - priv_count = get_privilege_count(hToken); - ok(priv_count > 0, "privilege count should now be > 0 instead of 0\n"); - ok(!are_all_privileges_disabled(hToken), "impersonated token should not have been modified\n"); - break; - default: - ok(0, "shouldn't happen\n"); - } -} - -static void test_static_context_revert(int call_index, HANDLE hToken) -{ - switch (call_index) - { - case 0: - todo_wine - ok(are_all_privileges_disabled(hToken), "privileges should have been disabled\n"); - break; - case 1: - todo_wine - ok(are_all_privileges_disabled(hToken), "impersonated token should not have been modified\n"); - break; - default: - ok(0, "shouldn't happen\n"); - } -} - -static void test_dynamic_context_revert(int call_index, HANDLE hToken) -{ - switch (call_index) - { - case 0: - todo_wine - ok(are_all_privileges_disabled(hToken), "privileges should have been disabled\n"); - break; - case 1: - ok(!are_all_privileges_disabled(hToken), "impersonated token should now be process token\n"); - break; - default: - ok(0, "shouldn't happen\n"); - } -} - -static void test_impersonation(void) -{ - HANDLE hClientToken; - HANDLE hProcessToken; - BOOL ret; - - if( !pDuplicateTokenEx ) { - skip("DuplicateTokenEx not found\n"); - return; - } - - ret = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hProcessToken); - if (!ret) - { - skip("couldn't open process token, skipping impersonation tests\n"); - return; - } - - if (!get_privilege_count(hProcessToken) || are_all_privileges_disabled(hProcessToken)) - { - skip("token didn't have any privileges or they were all disabled. token not suitable for impersonation tests\n"); - CloseHandle(hProcessToken); - return; - } - CloseHandle(hProcessToken); - - test_ImpersonateNamedPipeClient(NULL, 0, FALSE, test_no_sqos_no_token); - hClientToken = make_impersonation_token(TOKEN_IMPERSONATE | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, SecurityImpersonation); - test_ImpersonateNamedPipeClient(hClientToken, 0, FALSE, test_no_sqos); - CloseHandle(hClientToken); - hClientToken = make_impersonation_token(TOKEN_IMPERSONATE | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, SecurityImpersonation); - test_ImpersonateNamedPipeClient(hClientToken, - SECURITY_SQOS_PRESENT | SECURITY_IMPERSONATION, FALSE, - test_static_context); - CloseHandle(hClientToken); - hClientToken = make_impersonation_token(TOKEN_IMPERSONATE | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, SecurityImpersonation); - test_ImpersonateNamedPipeClient(hClientToken, - SECURITY_SQOS_PRESENT | SECURITY_CONTEXT_TRACKING | SECURITY_IMPERSONATION, - FALSE, test_dynamic_context); - CloseHandle(hClientToken); - test_ImpersonateNamedPipeClient(NULL, - SECURITY_SQOS_PRESENT | SECURITY_CONTEXT_TRACKING | SECURITY_IMPERSONATION, - FALSE, test_dynamic_context_no_token); - - hClientToken = make_impersonation_token(TOKEN_IMPERSONATE | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, SecurityImpersonation); - test_ImpersonateNamedPipeClient(hClientToken, 0, TRUE, test_no_sqos_revert); - CloseHandle(hClientToken); - hClientToken = make_impersonation_token(TOKEN_IMPERSONATE | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, SecurityImpersonation); - test_ImpersonateNamedPipeClient(hClientToken, - SECURITY_SQOS_PRESENT | SECURITY_IMPERSONATION, TRUE, - test_static_context_revert); - CloseHandle(hClientToken); - hClientToken = make_impersonation_token(TOKEN_IMPERSONATE | TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, SecurityImpersonation); - test_ImpersonateNamedPipeClient(hClientToken, - SECURITY_SQOS_PRESENT | SECURITY_CONTEXT_TRACKING | SECURITY_IMPERSONATION, - TRUE, test_dynamic_context_revert); - CloseHandle(hClientToken); -} - -struct overlapped_server_args -{ - HANDLE pipe_created; -}; - -static DWORD CALLBACK overlapped_server(LPVOID arg) -{ - OVERLAPPED ol; - HANDLE pipe; - int ret, err; - struct overlapped_server_args *a = (struct overlapped_server_args*)arg; - DWORD num; - char buf[100]; - - pipe = CreateNamedPipeA("\\\\.\\pipe\\my pipe", FILE_FLAG_OVERLAPPED | PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, 1, 0, 0, 100000, NULL); - ok(pipe != NULL, "pipe NULL\n"); - - ol.hEvent = CreateEventA(0, 1, 0, 0); - ok(ol.hEvent != NULL, "event NULL\n"); - ret = ConnectNamedPipe(pipe, &ol); - err = GetLastError(); - ok(ret == 0, "ret %d\n", ret); - ok(err == ERROR_IO_PENDING, "gle %d\n", err); - SetEvent(a->pipe_created); - - ret = WaitForSingleObjectEx(ol.hEvent, INFINITE, 1); - ok(ret == WAIT_OBJECT_0, "ret %x\n", ret); - - ret = GetOverlappedResult(pipe, &ol, &num, 1); - ok(ret == 1, "ret %d\n", ret); - - /* This should block */ - ret = ReadFile(pipe, buf, sizeof(buf), &num, NULL); - ok(ret == 1, "ret %d\n", ret); - - DisconnectNamedPipe(pipe); - CloseHandle(ol.hEvent); - CloseHandle(pipe); - return 1; -} - -static void test_overlapped(void) -{ - DWORD tid, num; - HANDLE thread, pipe; - int ret; - struct overlapped_server_args args; - - args.pipe_created = CreateEventA(0, 1, 0, 0); - thread = CreateThread(NULL, 0, overlapped_server, &args, 0, &tid); - - WaitForSingleObject(args.pipe_created, INFINITE); - pipe = CreateFileA("\\\\.\\pipe\\my pipe", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); - ok(pipe != INVALID_HANDLE_VALUE, "cf failed\n"); - - /* Sleep to try to get the ReadFile in the server to occur before the following WriteFile */ - Sleep(1); - - ret = WriteFile(pipe, "x", 1, &num, NULL); - ok(ret == 1, "ret %d\n", ret); - - WaitForSingleObject(thread, INFINITE); - CloseHandle(pipe); - CloseHandle(args.pipe_created); - CloseHandle(thread); -} - -START_TEST(pipe) -{ - HMODULE hmod; - - hmod = GetModuleHandle("advapi32.dll"); - pDuplicateTokenEx = (void *) GetProcAddress(hmod, "DuplicateTokenEx"); - - if (test_DisconnectNamedPipe()) - return; - test_CreateNamedPipe_instances_must_match(); - test_NamedPipe_2(); - test_CreateNamedPipe(PIPE_TYPE_BYTE); - test_CreateNamedPipe(PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE); - test_CreatePipe(); - test_impersonation(); - test_overlapped(); -} diff --git a/rostests/winetests/kernel32/process.c b/rostests/winetests/kernel32/process.c deleted file mode 100755 index 3a3743a5c10..00000000000 --- a/rostests/winetests/kernel32/process.c +++ /dev/null @@ -1,1427 +0,0 @@ -/* - * Unit test suite for CreateProcess function. - * - * Copyright 2002 Eric Pouech - * Copyright 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 - */ - -#include -#include -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "wincon.h" -#include "winnls.h" - -static HINSTANCE hkernel32; -static LPVOID (WINAPI *pVirtualAllocEx)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD); -static BOOL (WINAPI *pVirtualFreeEx)(HANDLE, LPVOID, SIZE_T, DWORD); - -/* ############################### */ -static char base[MAX_PATH]; -static char selfname[MAX_PATH]; -static char* exename; -static char resfile[MAX_PATH]; - -static int myARGC; -static char** myARGV; - -/* As some environment variables get very long on Unix, we only test for - * the first 127 bytes. - * Note that increasing this value past 256 may exceed the buffer size - * limitations of the *Profile functions (at least on Wine). - */ -#define MAX_LISTED_ENV_VAR 128 - -/* ---------------- portable memory allocation thingie */ - -static char memory[1024*256]; -static char* memory_index = memory; - -static char* grab_memory(size_t len) -{ - char* ret = memory_index; - /* align on dword */ - len = (len + 3) & ~3; - memory_index += len; - assert(memory_index <= memory + sizeof(memory)); - return ret; -} - -static void release_memory(void) -{ - memory_index = memory; -} - -/* ---------------- simplistic tool to encode/decode strings (to hide \ " ' and such) */ - -static const char* encodeA(const char* str) -{ - char* ptr; - size_t len,i; - - if (!str) return ""; - len = strlen(str) + 1; - ptr = grab_memory(len * 2 + 1); - for (i = 0; i < len; i++) - sprintf(&ptr[i * 2], "%02x", (unsigned char)str[i]); - ptr[2 * len] = '\0'; - return ptr; -} - -static const char* encodeW(const WCHAR* str) -{ - char* ptr; - size_t len,i; - - if (!str) return ""; - len = lstrlenW(str) + 1; - ptr = grab_memory(len * 4 + 1); - assert(ptr); - for (i = 0; i < len; i++) - sprintf(&ptr[i * 4], "%04x", (unsigned int)(unsigned short)str[i]); - ptr[4 * len] = '\0'; - return ptr; -} - -static unsigned decode_char(char c) -{ - if (c >= '0' && c <= '9') return c - '0'; - if (c >= 'a' && c <= 'f') return c - 'a' + 10; - assert(c >= 'A' && c <= 'F'); - return c - 'A' + 10; -} - -static char* decodeA(const char* str) -{ - char* ptr; - size_t len,i; - - len = strlen(str) / 2; - if (!len--) return NULL; - ptr = grab_memory(len + 1); - for (i = 0; i < len; i++) - ptr[i] = (decode_char(str[2 * i]) << 4) | decode_char(str[2 * i + 1]); - ptr[len] = '\0'; - return ptr; -} - -#if 0 -/* This will be needed to decode Unicode strings saved by the child process - * when we test Unicode functions. - */ -static WCHAR* decodeW(const char* str) -{ - size_t len; - WCHAR* ptr; - int i; - - len = strlen(str) / 4; - if (!len--) return NULL; - ptr = (WCHAR*)grab_memory(len * 2 + 1); - for (i = 0; i < len; i++) - ptr[i] = (decode_char(str[4 * i]) << 12) | - (decode_char(str[4 * i + 1]) << 8) | - (decode_char(str[4 * i + 2]) << 4) | - (decode_char(str[4 * i + 3]) << 0); - ptr[len] = '\0'; - return ptr; -} -#endif - -/****************************************************************** - * init - * - * generates basic information like: - * base: absolute path to curr dir - * selfname: the way to reinvoke ourselves - * exename: executable without the path - * function-pointers, which are not implemented in all windows versions - */ -static int init(void) -{ - char *p; - - myARGC = winetest_get_mainargs( &myARGV ); - if (!GetCurrentDirectoryA(sizeof(base), base)) return 0; - strcpy(selfname, myARGV[0]); - - /* Strip the path of selfname */ - if ((p = strrchr(selfname, '\\')) != NULL) exename = p + 1; - else exename = selfname; - - if ((p = strrchr(exename, '/')) != NULL) exename = p + 1; - - hkernel32 = GetModuleHandleA("kernel32"); - pVirtualAllocEx = (void *) GetProcAddress(hkernel32, "VirtualAllocEx"); - pVirtualFreeEx = (void *) GetProcAddress(hkernel32, "VirtualFreeEx"); - return 1; -} - -/****************************************************************** - * get_file_name - * - * generates an absolute file_name for temporary file - * - */ -static void get_file_name(char* buf) -{ - char path[MAX_PATH]; - - buf[0] = '\0'; - GetTempPathA(sizeof(path), path); - GetTempFileNameA(path, "wt", 0, buf); -} - -/****************************************************************** - * static void childPrintf - * - */ -static void childPrintf(HANDLE h, const char* fmt, ...) -{ - va_list valist; - char buffer[1024+4*MAX_LISTED_ENV_VAR]; - DWORD w; - - va_start(valist, fmt); - vsprintf(buffer, fmt, valist); - va_end(valist); - WriteFile(h, buffer, strlen(buffer), &w, NULL); -} - - -/****************************************************************** - * doChild - * - * output most of the information in the child process - */ -static void doChild(const char* file, const char* option) -{ - STARTUPINFOA siA; - STARTUPINFOW siW; - int i; - char* ptrA; - WCHAR* ptrW; - char bufA[MAX_PATH]; - WCHAR bufW[MAX_PATH]; - HANDLE hFile = CreateFileA(file, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); - BOOL ret; - - if (hFile == INVALID_HANDLE_VALUE) return; - - /* output of startup info (Ansi) */ - GetStartupInfoA(&siA); - childPrintf(hFile, - "[StartupInfoA]\ncb=%08ld\nlpDesktop=%s\nlpTitle=%s\n" - "dwX=%lu\ndwY=%lu\ndwXSize=%lu\ndwYSize=%lu\n" - "dwXCountChars=%lu\ndwYCountChars=%lu\ndwFillAttribute=%lu\n" - "dwFlags=%lu\nwShowWindow=%u\n" - "hStdInput=%lu\nhStdOutput=%lu\nhStdError=%lu\n\n", - siA.cb, encodeA(siA.lpDesktop), encodeA(siA.lpTitle), - siA.dwX, siA.dwY, siA.dwXSize, siA.dwYSize, - siA.dwXCountChars, siA.dwYCountChars, siA.dwFillAttribute, - siA.dwFlags, siA.wShowWindow, - (DWORD)siA.hStdInput, (DWORD)siA.hStdOutput, (DWORD)siA.hStdError); - - /* since GetStartupInfoW is only implemented in win2k, - * zero out before calling so we can notice the difference - */ - memset(&siW, 0, sizeof(siW)); - GetStartupInfoW(&siW); - childPrintf(hFile, - "[StartupInfoW]\ncb=%08ld\nlpDesktop=%s\nlpTitle=%s\n" - "dwX=%lu\ndwY=%lu\ndwXSize=%lu\ndwYSize=%lu\n" - "dwXCountChars=%lu\ndwYCountChars=%lu\ndwFillAttribute=%lu\n" - "dwFlags=%lu\nwShowWindow=%u\n" - "hStdInput=%lu\nhStdOutput=%lu\nhStdError=%lu\n\n", - siW.cb, encodeW(siW.lpDesktop), encodeW(siW.lpTitle), - siW.dwX, siW.dwY, siW.dwXSize, siW.dwYSize, - siW.dwXCountChars, siW.dwYCountChars, siW.dwFillAttribute, - siW.dwFlags, siW.wShowWindow, - (DWORD)siW.hStdInput, (DWORD)siW.hStdOutput, (DWORD)siW.hStdError); - - /* Arguments */ - childPrintf(hFile, "[Arguments]\nargcA=%d\n", myARGC); - for (i = 0; i < myARGC; i++) - { - childPrintf(hFile, "argvA%d=%s\n", i, encodeA(myARGV[i])); - } - childPrintf(hFile, "CommandLineA=%s\n", encodeA(GetCommandLineA())); - -#if 0 - int argcW; - WCHAR** argvW; - - /* this is part of shell32... and should be tested there */ - argvW = CommandLineToArgvW(GetCommandLineW(), &argcW); - for (i = 0; i < argcW; i++) - { - childPrintf(hFile, "argvW%d=%s\n", i, encodeW(argvW[i])); - } -#endif - childPrintf(hFile, "CommandLineW=%s\n\n", encodeW(GetCommandLineW())); - - /* output of environment (Ansi) */ - ptrA = GetEnvironmentStringsA(); - if (ptrA) - { - char env_var[MAX_LISTED_ENV_VAR]; - - childPrintf(hFile, "[EnvironmentA]\n"); - i = 0; - while (*ptrA) - { - lstrcpynA(env_var, ptrA, MAX_LISTED_ENV_VAR); - childPrintf(hFile, "env%d=%s\n", i, encodeA(env_var)); - i++; - ptrA += strlen(ptrA) + 1; - } - childPrintf(hFile, "len=%d\n\n", i); - } - - /* output of environment (Unicode) */ - ptrW = GetEnvironmentStringsW(); - if (ptrW) - { - WCHAR env_var[MAX_LISTED_ENV_VAR]; - - childPrintf(hFile, "[EnvironmentW]\n"); - i = 0; - while (*ptrW) - { - lstrcpynW(env_var, ptrW, MAX_LISTED_ENV_VAR - 1); - env_var[MAX_LISTED_ENV_VAR - 1] = '\0'; - childPrintf(hFile, "env%d=%s\n", i, encodeW(env_var)); - i++; - ptrW += lstrlenW(ptrW) + 1; - } - childPrintf(hFile, "len=%d\n\n", i); - } - - childPrintf(hFile, "[Misc]\n"); - if (GetCurrentDirectoryA(sizeof(bufA), bufA)) - childPrintf(hFile, "CurrDirA=%s\n", encodeA(bufA)); - if (GetCurrentDirectoryW(sizeof(bufW) / sizeof(bufW[0]), bufW)) - childPrintf(hFile, "CurrDirW=%s\n", encodeW(bufW)); - childPrintf(hFile, "\n"); - - if (option && strcmp(option, "console") == 0) - { - CONSOLE_SCREEN_BUFFER_INFO sbi; - HANDLE hConIn = GetStdHandle(STD_INPUT_HANDLE); - HANDLE hConOut = GetStdHandle(STD_OUTPUT_HANDLE); - DWORD modeIn, modeOut; - - childPrintf(hFile, "[Console]\n"); - if (GetConsoleScreenBufferInfo(hConOut, &sbi)) - { - childPrintf(hFile, "SizeX=%d\nSizeY=%d\nCursorX=%d\nCursorY=%d\nAttributes=%d\n", - sbi.dwSize.X, sbi.dwSize.Y, sbi.dwCursorPosition.X, sbi.dwCursorPosition.Y, sbi.wAttributes); - childPrintf(hFile, "winLeft=%d\nwinTop=%d\nwinRight=%d\nwinBottom=%d\n", - sbi.srWindow.Left, sbi.srWindow.Top, sbi.srWindow.Right, sbi.srWindow.Bottom); - childPrintf(hFile, "maxWinWidth=%d\nmaxWinHeight=%d\n", - sbi.dwMaximumWindowSize.X, sbi.dwMaximumWindowSize.Y); - } - childPrintf(hFile, "InputCP=%d\nOutputCP=%d\n", - GetConsoleCP(), GetConsoleOutputCP()); - if (GetConsoleMode(hConIn, &modeIn)) - childPrintf(hFile, "InputMode=%ld\n", modeIn); - if (GetConsoleMode(hConOut, &modeOut)) - childPrintf(hFile, "OutputMode=%ld\n", modeOut); - - /* now that we have written all relevant information, let's change it */ - ok(SetConsoleCP(1252), "Setting CP\n"); - ok(SetConsoleOutputCP(1252), "Setting SB CP\n"); - ret = SetConsoleMode(hConIn, modeIn ^ 1); - ok( ret, "Setting mode (%d)\n", GetLastError()); - ret = SetConsoleMode(hConOut, modeOut ^ 1); - ok( ret, "Setting mode (%d)\n", GetLastError()); - sbi.dwCursorPosition.X ^= 1; - sbi.dwCursorPosition.Y ^= 1; - ret = SetConsoleCursorPosition(hConOut, sbi.dwCursorPosition); - ok( ret, "Setting cursor position (%d)\n", GetLastError()); - } - if (option && strcmp(option, "stdhandle") == 0) - { - HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE); - HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); - - if (hStdIn != INVALID_HANDLE_VALUE || hStdOut != INVALID_HANDLE_VALUE) - { - char buf[1024]; - DWORD r, w; - - ok(ReadFile(hStdIn, buf, sizeof(buf), &r, NULL) && r > 0, "Reading message from input pipe\n"); - childPrintf(hFile, "[StdHandle]\nmsg=%s\n\n", encodeA(buf)); - ok(WriteFile(hStdOut, buf, r, &w, NULL) && w == r, "Writing message to output pipe\n"); - } - } - - if (option && strcmp(option, "exit_code") == 0) - { - childPrintf(hFile, "[ExitCode]\nvalue=%d\n\n", 123); - CloseHandle(hFile); - ExitProcess(123); - } - - CloseHandle(hFile); -} - -static char* getChildString(const char* sect, const char* key) -{ - char buf[1024+4*MAX_LISTED_ENV_VAR]; - char* ret; - - GetPrivateProfileStringA(sect, key, "-", buf, sizeof(buf), resfile); - if (buf[0] == '\0' || (buf[0] == '-' && buf[1] == '\0')) return NULL; - assert(!(strlen(buf) & 1)); - ret = decodeA(buf); - return ret; -} - -/* FIXME: this may be moved to the wtmain.c file, because it may be needed by - * others... (windows uses stricmp while Un*x uses strcasecmp...) - */ -static int wtstrcasecmp(const char* p1, const char* p2) -{ - char c1, c2; - - c1 = c2 = '@'; - while (c1 == c2 && c1) - { - c1 = *p1++; c2 = *p2++; - if (c1 != c2) - { - c1 = toupper(c1); c2 = toupper(c2); - } - } - return c1 - c2; -} - -static int strCmp(const char* s1, const char* s2, BOOL sensitive) -{ - if (!s1 && !s2) return 0; - if (!s2) return -1; - if (!s1) return 1; - return (sensitive) ? strcmp(s1, s2) : wtstrcasecmp(s1, s2); -} - -static void ok_child_string( int line, const char *sect, const char *key, - const char *expect, int sensitive ) -{ - char* result = getChildString( sect, key ); - ok_(__FILE__, line)( strCmp(result, expect, sensitive) == 0, "%s:%s expected '%s', got '%s'\n", - sect, key, expect ? expect : "(null)", result ); -} - -#define okChildString(sect, key, expect) ok_child_string(__LINE__, (sect), (key), (expect), 1 ) -#define okChildIString(sect, key, expect) ok_child_string(__LINE__, (sect), (key), (expect), 0 ) - -/* using !expect ensures that the test will fail if the sect/key isn't present - * in result file - */ -#define okChildInt(sect, key, expect) \ - do { \ - UINT result = GetPrivateProfileIntA((sect), (key), !(expect), resfile); \ - ok(result == expect, "%s:%s expected %d, but got %d\n", (sect), (key), (int)(expect), result); \ - } while (0) - -static void test_Startup(void) -{ - char buffer[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup,si; - static CHAR title[] = "I'm the title string", - desktop[] = "I'm the desktop string", - empty[] = ""; - - /* let's start simplistic */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - GetStartupInfoA(&si); - okChildInt("StartupInfoA", "cb", startup.cb); - okChildString("StartupInfoA", "lpDesktop", si.lpDesktop); - ok (si.lpTitle == NULL || !strncmp(si.lpTitle, selfname, strlen(selfname)), - "StartupInfoA:lpTitle expected something starting with '%s' or null, got '%s'\n", selfname, si.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* not so simplistic now */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - startup.lpTitle = title; - startup.lpDesktop = desktop; - startup.dwXCountChars = 0x12121212; - startup.dwYCountChars = 0x23232323; - startup.dwX = 0x34343434; - startup.dwY = 0x45454545; - startup.dwXSize = 0x56565656; - startup.dwYSize = 0x67676767; - startup.dwFillAttribute = 0xA55A; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildInt("StartupInfoA", "cb", startup.cb); - okChildString("StartupInfoA", "lpDesktop", startup.lpDesktop); - okChildString("StartupInfoA", "lpTitle", startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* not so simplistic now */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - startup.lpTitle = title; - startup.lpDesktop = NULL; - startup.dwXCountChars = 0x12121212; - startup.dwYCountChars = 0x23232323; - startup.dwX = 0x34343434; - startup.dwY = 0x45454545; - startup.dwXSize = 0x56565656; - startup.dwYSize = 0x67676767; - startup.dwFillAttribute = 0xA55A; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildInt("StartupInfoA", "cb", startup.cb); - okChildString("StartupInfoA", "lpDesktop", si.lpDesktop); - okChildString("StartupInfoA", "lpTitle", startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* not so simplistic now */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - startup.lpTitle = title; - startup.lpDesktop = empty; - startup.dwXCountChars = 0x12121212; - startup.dwYCountChars = 0x23232323; - startup.dwX = 0x34343434; - startup.dwY = 0x45454545; - startup.dwXSize = 0x56565656; - startup.dwYSize = 0x67676767; - startup.dwFillAttribute = 0xA55A; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildInt("StartupInfoA", "cb", startup.cb); - todo_wine okChildString("StartupInfoA", "lpDesktop", startup.lpDesktop); - okChildString("StartupInfoA", "lpTitle", startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* not so simplistic now */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - startup.lpTitle = NULL; - startup.lpDesktop = desktop; - startup.dwXCountChars = 0x12121212; - startup.dwYCountChars = 0x23232323; - startup.dwX = 0x34343434; - startup.dwY = 0x45454545; - startup.dwXSize = 0x56565656; - startup.dwYSize = 0x67676767; - startup.dwFillAttribute = 0xA55A; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildInt("StartupInfoA", "cb", startup.cb); - okChildString("StartupInfoA", "lpDesktop", startup.lpDesktop); - ok (startup.lpTitle == NULL || !strcmp(startup.lpTitle, selfname), - "StartupInfoA:lpTitle expected '%s' or null, got '%s'\n", selfname, startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* not so simplistic now */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - startup.lpTitle = empty; - startup.lpDesktop = desktop; - startup.dwXCountChars = 0x12121212; - startup.dwYCountChars = 0x23232323; - startup.dwX = 0x34343434; - startup.dwY = 0x45454545; - startup.dwXSize = 0x56565656; - startup.dwYSize = 0x67676767; - startup.dwFillAttribute = 0xA55A; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildInt("StartupInfoA", "cb", startup.cb); - okChildString("StartupInfoA", "lpDesktop", startup.lpDesktop); - todo_wine okChildString("StartupInfoA", "lpTitle", startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* not so simplistic now */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - startup.lpTitle = empty; - startup.lpDesktop = empty; - startup.dwXCountChars = 0x12121212; - startup.dwYCountChars = 0x23232323; - startup.dwX = 0x34343434; - startup.dwY = 0x45454545; - startup.dwXSize = 0x56565656; - startup.dwYSize = 0x67676767; - startup.dwFillAttribute = 0xA55A; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildInt("StartupInfoA", "cb", startup.cb); - todo_wine okChildString("StartupInfoA", "lpDesktop", startup.lpDesktop); - todo_wine okChildString("StartupInfoA", "lpTitle", startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* TODO: test for A/W and W/A and W/W */ -} - -static void test_CommandLine(void) -{ - char buffer[MAX_PATH], fullpath[MAX_PATH], *lpFilePart, *p; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - DWORD len; - BOOL ret; - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - /* the basics */ - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s \"C:\\Program Files\\my nice app.exe\"", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildInt("Arguments", "argcA", 4); - okChildString("Arguments", "argvA3", "C:\\Program Files\\my nice app.exe"); - okChildString("Arguments", "argvA4", NULL); - okChildString("Arguments", "CommandLineA", buffer); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - /* from Frangois */ - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s \"a\\\"b\\\\\" c\\\" d", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildInt("Arguments", "argcA", 6); - okChildString("Arguments", "argvA3", "a\"b\\"); - okChildString("Arguments", "argvA4", "c\""); - okChildString("Arguments", "argvA5", "d"); - okChildString("Arguments", "argvA6", NULL); - okChildString("Arguments", "CommandLineA", buffer); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* Test for Bug1330 to show that XP doesn't change '/' to '\\' in argv[0]*/ - get_file_name(resfile); - /* Use exename to avoid buffer containing things like 'C:' */ - sprintf(buffer, "./%s tests/process.c %s \"a\\\"b\\\\\" c\\\" d", exename, resfile); - SetLastError(0xdeadbeef); - ret = CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); - ok(ret, "CreateProcess (%s) failed : %d\n", buffer, GetLastError()); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - sprintf(buffer, "./%s", exename); - okChildString("Arguments", "argvA0", buffer); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - get_file_name(resfile); - /* Use exename to avoid buffer containing things like 'C:' */ - sprintf(buffer, ".\\%s tests/process.c %s \"a\\\"b\\\\\" c\\\" d", exename, resfile); - SetLastError(0xdeadbeef); - ret = CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); - ok(ret, "CreateProcess (%s) failed : %d\n", buffer, GetLastError()); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - sprintf(buffer, ".\\%s", exename); - okChildString("Arguments", "argvA0", buffer); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - get_file_name(resfile); - len = GetFullPathNameA(selfname, MAX_PATH, fullpath, &lpFilePart); - assert ( lpFilePart != 0); - *(lpFilePart -1 ) = 0; - p = strrchr(fullpath, '\\'); - assert (p); - /* Use exename to avoid buffer containing things like 'C:' */ - sprintf(buffer, "..%s/%s tests/process.c %s \"a\\\"b\\\\\" c\\\" d", p, exename, resfile); - SetLastError(0xdeadbeef); - ret = CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); - ok(ret, "CreateProcess (%s) failed : %d\n", buffer, GetLastError()); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - sprintf(buffer, "..%s/%s", p, exename); - okChildString("Arguments", "argvA0", buffer); - release_memory(); - assert(DeleteFileA(resfile) != 0); - -} - -static void test_Directory(void) -{ - char buffer[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - char windir[MAX_PATH]; - static CHAR cmdline[] = "winver.exe"; - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - /* the basics */ - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - GetWindowsDirectoryA( windir, sizeof(windir) ); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, windir, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildIString("Misc", "CurrDirA", windir); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - /* search PATH for the exe if directory is NULL */ - ok(CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - ok(TerminateProcess(info.hProcess, 0), "Child process termination\n"); - - /* if any directory is provided, don't search PATH, error on bad directory */ - SetLastError(0xdeadbeef); - memset(&info, 0, sizeof(info)); - ok(!CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0L, - NULL, "non\\existent\\directory", &startup, &info), "CreateProcess\n"); - ok(GetLastError() == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", GetLastError()); - ok(!TerminateProcess(info.hProcess, 0), "Child process should not exist\n"); -} - -static BOOL is_str_env_drive_dir(const char* str) -{ - return str[0] == '=' && str[1] >= 'A' && str[1] <= 'Z' && str[2] == ':' && - str[3] == '=' && str[4] == str[1]; -} - -/* compared expected child's environment (in gesA) from actual - * environment our child got - */ -static void cmpEnvironment(const char* gesA) -{ - int i, clen; - const char* ptrA; - char* res; - char key[32]; - BOOL found; - - clen = GetPrivateProfileIntA("EnvironmentA", "len", 0, resfile); - - /* now look each parent env in child */ - if ((ptrA = gesA) != NULL) - { - while (*ptrA) - { - for (i = 0; i < clen; i++) - { - sprintf(key, "env%d", i); - res = getChildString("EnvironmentA", key); - if (strncmp(ptrA, res, MAX_LISTED_ENV_VAR - 1) == 0) - break; - } - found = i < clen; - ok(found, "Parent-env string %s isn't in child process\n", ptrA); - - ptrA += strlen(ptrA) + 1; - release_memory(); - } - } - /* and each child env in parent */ - for (i = 0; i < clen; i++) - { - sprintf(key, "env%d", i); - res = getChildString("EnvironmentA", key); - if ((ptrA = gesA) != NULL) - { - while (*ptrA) - { - if (strncmp(res, ptrA, MAX_LISTED_ENV_VAR - 1) == 0) - break; - ptrA += strlen(ptrA) + 1; - } - if (!*ptrA) ptrA = NULL; - } - - if (!is_str_env_drive_dir(res)) - { - found = ptrA != NULL; - ok(found, "Child-env string %s isn't in parent process\n", res); - } - /* else => should also test we get the right per drive default directory here... */ - } -} - -static void test_Environment(void) -{ - char buffer[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - char* child_env; - int child_env_len; - char* ptr; - char* env; - int slen; - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - /* the basics */ - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - cmpEnvironment(GetEnvironmentStringsA()); - release_memory(); - assert(DeleteFileA(resfile) != 0); - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - /* the basics */ - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - - child_env_len = 0; - ptr = GetEnvironmentStringsA(); - while(*ptr) - { - slen = strlen(ptr)+1; - child_env_len += slen; - ptr += slen; - } - /* Add space for additional environment variables */ - child_env_len += 256; - child_env = HeapAlloc(GetProcessHeap(), 0, child_env_len); - - ptr = child_env; - sprintf(ptr, "=%c:=%s", 'C', "C:\\FOO\\BAR"); - ptr += strlen(ptr) + 1; - strcpy(ptr, "PATH=C:\\WINDOWS;C:\\WINDOWS\\SYSTEM;C:\\MY\\OWN\\DIR"); - ptr += strlen(ptr) + 1; - strcpy(ptr, "FOO=BAR"); - ptr += strlen(ptr) + 1; - strcpy(ptr, "BAR=FOOBAR"); - ptr += strlen(ptr) + 1; - /* copy all existing variables except: - * - WINELOADER - * - PATH (already set above) - * - the directory definitions (=[A-Z]:=) - */ - for (env = GetEnvironmentStringsA(); *env; env += strlen(env) + 1) - { - if (strncmp(env, "PATH=", 5) != 0 && - strncmp(env, "WINELOADER=", 11) != 0 && - !is_str_env_drive_dir(env)) - { - strcpy(ptr, env); - ptr += strlen(ptr) + 1; - } - } - *ptr = '\0'; - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, child_env, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - cmpEnvironment(child_env); - - HeapFree(GetProcessHeap(), 0, child_env); - release_memory(); - assert(DeleteFileA(resfile) != 0); -} - -static void test_SuspendFlag(void) -{ - char buffer[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup, us; - DWORD exit_status; - - /* let's start simplistic */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &startup, &info), "CreateProcess\n"); - - ok(GetExitCodeThread(info.hThread, &exit_status) && exit_status == STILL_ACTIVE, "thread still running\n"); - Sleep(8000); - ok(GetExitCodeThread(info.hThread, &exit_status) && exit_status == STILL_ACTIVE, "thread still running\n"); - ok(ResumeThread(info.hThread) == 1, "Resuming thread\n"); - - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - GetStartupInfoA(&us); - - okChildInt("StartupInfoA", "cb", startup.cb); - okChildString("StartupInfoA", "lpDesktop", us.lpDesktop); - ok (startup.lpTitle == NULL || !strcmp(startup.lpTitle, selfname), - "StartupInfoA:lpTitle expected '%s' or null, got '%s'\n", selfname, startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); -} - -static void test_DebuggingFlag(void) -{ - char buffer[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup, us; - DEBUG_EVENT de; - unsigned dbg = 0; - - /* let's start simplistic */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, DEBUG_PROCESS, NULL, NULL, &startup, &info), "CreateProcess\n"); - - /* get all startup events up to the entry point break exception */ - do - { - ok(WaitForDebugEvent(&de, INFINITE), "reading debug event\n"); - ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE); - if (de.dwDebugEventCode != EXCEPTION_DEBUG_EVENT) dbg++; - } while (de.dwDebugEventCode != EXIT_PROCESS_DEBUG_EVENT); - - ok(dbg, "I have seen a debug event\n"); - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - GetStartupInfoA(&us); - - okChildInt("StartupInfoA", "cb", startup.cb); - okChildString("StartupInfoA", "lpDesktop", us.lpDesktop); - ok (startup.lpTitle == NULL || !strcmp(startup.lpTitle, selfname), - "StartupInfoA:lpTitle expected '%s' or null, got '%s'\n", selfname, startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - release_memory(); - assert(DeleteFileA(resfile) != 0); -} - -static BOOL is_console(HANDLE h) -{ - return h != INVALID_HANDLE_VALUE && ((ULONG_PTR)h & 3) == 3; -} - -static void test_Console(void) -{ - char buffer[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup, us; - SECURITY_ATTRIBUTES sa; - CONSOLE_SCREEN_BUFFER_INFO sbi, sbiC; - DWORD modeIn, modeOut, modeInC, modeOutC; - DWORD cpIn, cpOut, cpInC, cpOutC; - DWORD w; - HANDLE hChildIn, hChildInInh, hChildOut, hChildOutInh, hParentIn, hParentOut; - const char* msg = "This is a std-handle inheritance test."; - unsigned msg_len; - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; - startup.wShowWindow = SW_SHOWNORMAL; - - sa.nLength = sizeof(sa); - sa.lpSecurityDescriptor = NULL; - sa.bInheritHandle = TRUE; - - startup.hStdInput = CreateFileA("CONIN$", GENERIC_READ|GENERIC_WRITE, 0, &sa, OPEN_EXISTING, 0, 0); - startup.hStdOutput = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, &sa, OPEN_EXISTING, 0, 0); - - /* first, we need to be sure we're attached to a console */ - if (!is_console(startup.hStdInput) || !is_console(startup.hStdOutput)) - { - /* we're not attached to a console, let's do it */ - AllocConsole(); - startup.hStdInput = CreateFileA("CONIN$", GENERIC_READ|GENERIC_WRITE, 0, &sa, OPEN_EXISTING, 0, 0); - startup.hStdOutput = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, &sa, OPEN_EXISTING, 0, 0); - } - /* now verify everything's ok */ - ok(startup.hStdInput != INVALID_HANDLE_VALUE, "Opening ConIn\n"); - ok(startup.hStdOutput != INVALID_HANDLE_VALUE, "Opening ConOut\n"); - startup.hStdError = startup.hStdOutput; - - ok(GetConsoleScreenBufferInfo(startup.hStdOutput, &sbi), "Getting sb info\n"); - ok(GetConsoleMode(startup.hStdInput, &modeIn) && - GetConsoleMode(startup.hStdOutput, &modeOut), "Getting console modes\n"); - cpIn = GetConsoleCP(); - cpOut = GetConsoleOutputCP(); - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s console", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, TRUE, 0, NULL, NULL, &startup, &info), "CreateProcess\n"); - - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - /* now get the modification the child has made, and resets parents expected values */ - ok(GetConsoleScreenBufferInfo(startup.hStdOutput, &sbiC), "Getting sb info\n"); - ok(GetConsoleMode(startup.hStdInput, &modeInC) && - GetConsoleMode(startup.hStdOutput, &modeOutC), "Getting console modes\n"); - - SetConsoleMode(startup.hStdInput, modeIn); - SetConsoleMode(startup.hStdOutput, modeOut); - - cpInC = GetConsoleCP(); - cpOutC = GetConsoleOutputCP(); - - /* Try to set invalid CP */ - SetLastError(0xdeadbeef); - ok(!SetConsoleCP(0), "Shouldn't succeed\n"); - ok(GetLastError()==ERROR_INVALID_PARAMETER, - "GetLastError: expecting %u got %u\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - SetLastError(0xdeadbeef); - ok(!SetConsoleOutputCP(0), "Shouldn't succeed\n"); - ok(GetLastError()==ERROR_INVALID_PARAMETER, - "GetLastError: expecting %u got %u\n", - ERROR_INVALID_PARAMETER, GetLastError()); - - SetConsoleCP(cpIn); - SetConsoleOutputCP(cpOut); - - GetStartupInfoA(&us); - - okChildInt("StartupInfoA", "cb", startup.cb); - okChildString("StartupInfoA", "lpDesktop", us.lpDesktop); - ok (startup.lpTitle == NULL || !strcmp(startup.lpTitle, selfname), - "StartupInfoA:lpTitle expected '%s' or null, got '%s'\n", selfname, startup.lpTitle); - okChildInt("StartupInfoA", "dwX", startup.dwX); - okChildInt("StartupInfoA", "dwY", startup.dwY); - okChildInt("StartupInfoA", "dwXSize", startup.dwXSize); - okChildInt("StartupInfoA", "dwYSize", startup.dwYSize); - okChildInt("StartupInfoA", "dwXCountChars", startup.dwXCountChars); - okChildInt("StartupInfoA", "dwYCountChars", startup.dwYCountChars); - okChildInt("StartupInfoA", "dwFillAttribute", startup.dwFillAttribute); - okChildInt("StartupInfoA", "dwFlags", startup.dwFlags); - okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow); - - /* check child correctly inherited the console */ - okChildInt("StartupInfoA", "hStdInput", (DWORD)startup.hStdInput); - okChildInt("StartupInfoA", "hStdOutput", (DWORD)startup.hStdOutput); - okChildInt("StartupInfoA", "hStdError", (DWORD)startup.hStdError); - okChildInt("Console", "SizeX", (DWORD)sbi.dwSize.X); - okChildInt("Console", "SizeY", (DWORD)sbi.dwSize.Y); - okChildInt("Console", "CursorX", (DWORD)sbi.dwCursorPosition.X); - okChildInt("Console", "CursorY", (DWORD)sbi.dwCursorPosition.Y); - okChildInt("Console", "Attributes", sbi.wAttributes); - okChildInt("Console", "winLeft", (DWORD)sbi.srWindow.Left); - okChildInt("Console", "winTop", (DWORD)sbi.srWindow.Top); - okChildInt("Console", "winRight", (DWORD)sbi.srWindow.Right); - okChildInt("Console", "winBottom", (DWORD)sbi.srWindow.Bottom); - okChildInt("Console", "maxWinWidth", (DWORD)sbi.dwMaximumWindowSize.X); - okChildInt("Console", "maxWinHeight", (DWORD)sbi.dwMaximumWindowSize.Y); - okChildInt("Console", "InputCP", cpIn); - okChildInt("Console", "OutputCP", cpOut); - okChildInt("Console", "InputMode", modeIn); - okChildInt("Console", "OutputMode", modeOut); - - ok(cpInC == 1252, "Wrong console CP (expected 1252 got %d/%d)\n", cpInC, cpIn); - ok(cpOutC == 1252, "Wrong console-SB CP (expected 1252 got %d/%d)\n", cpOutC, cpOut); - ok(modeInC == (modeIn ^ 1), "Wrong console mode\n"); - ok(modeOutC == (modeOut ^ 1), "Wrong console-SB mode\n"); - trace("cursor position(X): %d/%d\n",sbi.dwCursorPosition.X, sbiC.dwCursorPosition.X); - ok(sbiC.dwCursorPosition.Y == (sbi.dwCursorPosition.Y ^ 1), "Wrong cursor position\n"); - - release_memory(); - assert(DeleteFileA(resfile) != 0); - - ok(CreatePipe(&hParentIn, &hChildOut, NULL, 0), "Creating parent-input pipe\n"); - ok(DuplicateHandle(GetCurrentProcess(), hChildOut, GetCurrentProcess(), - &hChildOutInh, 0, TRUE, DUPLICATE_SAME_ACCESS), - "Duplicating as inheritable child-output pipe\n"); - CloseHandle(hChildOut); - - ok(CreatePipe(&hChildIn, &hParentOut, NULL, 0), "Creating parent-output pipe\n"); - ok(DuplicateHandle(GetCurrentProcess(), hChildIn, GetCurrentProcess(), - &hChildInInh, 0, TRUE, DUPLICATE_SAME_ACCESS), - "Duplicating as inheritable child-input pipe\n"); - CloseHandle(hChildIn); - - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; - startup.wShowWindow = SW_SHOWNORMAL; - startup.hStdInput = hChildInInh; - startup.hStdOutput = hChildOutInh; - startup.hStdError = hChildOutInh; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s stdhandle", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, TRUE, DETACHED_PROCESS, NULL, NULL, &startup, &info), "CreateProcess\n"); - ok(CloseHandle(hChildInInh), "Closing handle\n"); - ok(CloseHandle(hChildOutInh), "Closing handle\n"); - - msg_len = strlen(msg) + 1; - ok(WriteFile(hParentOut, msg, msg_len, &w, NULL), "Writing to child\n"); - ok(w == msg_len, "Should have written %u bytes, actually wrote %u\n", msg_len, w); - memset(buffer, 0, sizeof(buffer)); - ok(ReadFile(hParentIn, buffer, sizeof(buffer), &w, NULL), "Reading from child\n"); - ok(strcmp(buffer, msg) == 0, "Should have received '%s'\n", msg); - - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - okChildString("StdHandle", "msg", msg); - - release_memory(); - assert(DeleteFileA(resfile) != 0); -} - -static void test_ExitCode(void) -{ - char buffer[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - DWORD code; - - /* let's start simplistic */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - get_file_name(resfile); - sprintf(buffer, "%s tests/process.c %s exit_code", selfname, resfile); - ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &info), "CreateProcess\n"); - - /* wait for child to terminate */ - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n"); - /* child process has changed result file, so let profile functions know about it */ - WritePrivateProfileStringA(NULL, NULL, NULL, resfile); - - ok(GetExitCodeProcess(info.hProcess, &code), "Getting exit code\n"); - okChildInt("ExitCode", "value", code); - - release_memory(); - assert(DeleteFileA(resfile) != 0); -} - -static void test_OpenProcess(void) -{ - HANDLE hproc; - void *addr1; - MEMORY_BASIC_INFORMATION info; - SIZE_T dummy, read_bytes; - - /* not exported in all windows versions */ - if ((!pVirtualAllocEx) || (!pVirtualFreeEx)) { - skip("VirtualAllocEx not found\n"); - return; - } - - /* without PROCESS_VM_OPERATION */ - hproc = OpenProcess(PROCESS_ALL_ACCESS & ~PROCESS_VM_OPERATION, FALSE, GetCurrentProcessId()); - ok(hproc != NULL, "OpenProcess error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - addr1 = pVirtualAllocEx(hproc, 0, 0xFFFC, MEM_RESERVE, PAGE_NOACCESS); - ok(!addr1, "VirtualAllocEx should fail\n"); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { /* Win9x */ - CloseHandle(hproc); - skip("VirtualAllocEx not implemented\n"); - return; - } - ok(GetLastError() == ERROR_ACCESS_DENIED, "wrong error %d\n", GetLastError()); - - read_bytes = 0xdeadbeef; - SetLastError(0xdeadbeef); - ok(ReadProcessMemory(hproc, test_OpenProcess, &dummy, sizeof(dummy), &read_bytes), - "ReadProcessMemory error %d\n", GetLastError()); - ok(read_bytes == sizeof(dummy), "wrong read bytes %ld\n", read_bytes); - - CloseHandle(hproc); - - hproc = OpenProcess(PROCESS_VM_OPERATION, FALSE, GetCurrentProcessId()); - ok(hproc != NULL, "OpenProcess error %d\n", GetLastError()); - - addr1 = pVirtualAllocEx(hproc, 0, 0xFFFC, MEM_RESERVE, PAGE_NOACCESS); - ok(addr1 != NULL, "VirtualAllocEx error %d\n", GetLastError()); - - /* without PROCESS_QUERY_INFORMATION */ - SetLastError(0xdeadbeef); - ok(!VirtualQueryEx(hproc, addr1, &info, sizeof(info)), - "VirtualQueryEx without PROCESS_QUERY_INFORMATION rights should fail\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, "wrong error %d\n", GetLastError()); - - /* without PROCESS_VM_READ */ - read_bytes = 0xdeadbeef; - SetLastError(0xdeadbeef); - ok(!ReadProcessMemory(hproc, addr1, &dummy, sizeof(dummy), &read_bytes), - "ReadProcessMemory without PROCESS_VM_READ rights should fail\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, "wrong error %d\n", GetLastError()); - ok(read_bytes == 0, "wrong read bytes %ld\n", read_bytes); - - CloseHandle(hproc); - - hproc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); - - memset(&info, 0xcc, sizeof(info)); - ok(VirtualQueryEx(hproc, addr1, &info, sizeof(info)) == sizeof(info), - "VirtualQueryEx error %d\n", GetLastError()); - - ok(info.BaseAddress == addr1, "%p != %p\n", info.BaseAddress, addr1); - ok(info.AllocationBase == addr1, "%p != %p\n", info.AllocationBase, addr1); - ok(info.AllocationProtect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.AllocationProtect); - ok(info.RegionSize == 0x10000, "%lx != 0x10000\n", info.RegionSize); - ok(info.State == MEM_RESERVE, "%x != MEM_RESERVE\n", info.State); - /* NT reports Protect == 0 for a not committed memory block */ - ok(info.Protect == 0 /* NT */ || - info.Protect == PAGE_NOACCESS, /* Win9x */ - "%x != PAGE_NOACCESS\n", info.Protect); - ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); - - SetLastError(0xdeadbeef); - ok(!pVirtualFreeEx(hproc, addr1, 0, MEM_RELEASE), - "VirtualFreeEx without PROCESS_VM_OPERATION rights should fail\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, "wrong error %d\n", GetLastError()); - - CloseHandle(hproc); - - ok(VirtualFree(addr1, 0, MEM_RELEASE), "VirtualFree failed\n"); -} - -START_TEST(process) -{ - int b = init(); - ok(b, "Basic init of CreateProcess test\n"); - if (!b) return; - - if (myARGC >= 3) - { - doChild(myARGV[2], (myARGC == 3) ? NULL : myARGV[3]); - return; - } - test_Startup(); - test_CommandLine(); - test_Directory(); - test_Environment(); - test_SuspendFlag(); - test_DebuggingFlag(); - test_Console(); - test_ExitCode(); - test_OpenProcess(); - /* things that can be tested: - * lookup: check the way program to be executed is searched - * handles: check the handle inheritance stuff (+sec options) - * console: check if console creation parameters work - */ -} diff --git a/rostests/winetests/kernel32/profile.c b/rostests/winetests/kernel32/profile.c deleted file mode 100755 index 8611c114594..00000000000 --- a/rostests/winetests/kernel32/profile.c +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Unit tests for profile functions - * - * Copyright (c) 2003 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 - */ - -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "windows.h" - -#define KEY "ProfileInt" -#define SECTION "Test" -#define TESTFILE ".\\testwine.ini" -#define TESTFILE2 ".\\testwine2.ini" - -struct _profileInt { - LPCSTR section; - LPCSTR key; - LPCSTR value; - LPCSTR iniFile; - INT defaultVal; - UINT result; - UINT result9x; -}; - -static void test_profile_int(void) -{ - struct _profileInt profileInt[]={ - { NULL, NULL, NULL, NULL, 70, 0 , 0}, /* 0 */ - { NULL, NULL, NULL, TESTFILE, -1, 4294967295U, 0}, - { NULL, NULL, NULL, TESTFILE, 1, 1 , 0}, - { SECTION, NULL, NULL, TESTFILE, -1, 4294967295U, 0}, - { SECTION, NULL, NULL, TESTFILE, 1, 1 , 0}, - { NULL, KEY, NULL, TESTFILE, -1, 4294967295U, 0}, /* 5 */ - { NULL, KEY, NULL, TESTFILE, 1, 1 , 0}, - { SECTION, KEY, NULL, TESTFILE, -1, 4294967295U, 4294967295U}, - { SECTION, KEY, NULL, TESTFILE, 1, 1 , 1}, - { SECTION, KEY, "-1", TESTFILE, -1, 4294967295U, 4294967295U}, - { SECTION, KEY, "-1", TESTFILE, 1, 4294967295U, 4294967295U}, /* 10 */ - { SECTION, KEY, "1", TESTFILE, -1, 1 , 1}, - { SECTION, KEY, "1", TESTFILE, 1, 1 , 1}, - { SECTION, KEY, "+1", TESTFILE, -1, 1 , 0}, - { SECTION, KEY, "+1", TESTFILE, 1, 1 , 0}, - { SECTION, KEY, "4294967296", TESTFILE, -1, 0 , 0}, /* 15 */ - { SECTION, KEY, "4294967296", TESTFILE, 1, 0 , 0}, - { SECTION, KEY, "4294967297", TESTFILE, -1, 1 , 1}, - { SECTION, KEY, "4294967297", TESTFILE, 1, 1 , 1}, - { SECTION, KEY, "-4294967297", TESTFILE, -1, 4294967295U, 4294967295U}, - { SECTION, KEY, "-4294967297", TESTFILE, 1, 4294967295U, 4294967295U}, /* 20 */ - { SECTION, KEY, "42A94967297", TESTFILE, -1, 42 , 42}, - { SECTION, KEY, "42A94967297", TESTFILE, 1, 42 , 42}, - { SECTION, KEY, "B4294967297", TESTFILE, -1, 0 , 0}, - { SECTION, KEY, "B4294967297", TESTFILE, 1, 0 , 0}, - }; - int i, num_test = (sizeof(profileInt)/sizeof(struct _profileInt)); - UINT res; - - DeleteFileA( TESTFILE); - - for (i=0; i < num_test; i++) { - if (profileInt[i].value) - WritePrivateProfileStringA(SECTION, KEY, profileInt[i].value, - profileInt[i].iniFile); - - res = GetPrivateProfileIntA(profileInt[i].section, profileInt[i].key, - profileInt[i].defaultVal, profileInt[i].iniFile); - ok((res == profileInt[i].result) || (res == profileInt[i].result9x), - "test<%02d>: ret<%010u> exp<%010u><%010u>\n", - i, res, profileInt[i].result, profileInt[i].result9x); - } - - DeleteFileA( TESTFILE); -} - -static void test_profile_string(void) -{ - HANDLE h; - int ret; - DWORD count; - char buf[100]; - char *p; - /* test that lines without an '=' will not be enumerated */ - /* in the case below, name2 is a key while name3 is not. */ - char content[]="[s]\r\nname1=val1\r\nname2=\r\nname3\r\nname4=val4\r\n"; - DeleteFileA( TESTFILE2); - h = CreateFileA( TESTFILE2, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - ok( h != INVALID_HANDLE_VALUE, " cannot create %s\n", TESTFILE2); - if( h == INVALID_HANDLE_VALUE) return; - WriteFile( h, content, sizeof(content), &count, NULL); - CloseHandle( h); - - /* enumerate the keys */ - ret=GetPrivateProfileStringA( "s", NULL, "", buf, sizeof(buf), - TESTFILE2); - for( p = buf + strlen(buf) + 1; *p;p += strlen(p)+1) - p[-1] = ','; - /* and test */ - ok( ret == 18 && !strcmp( buf, "name1,name2,name4"), "wrong keys returned(%d): %s\n", ret, - buf); - - /* add a new key to test that the file is quite usable */ - WritePrivateProfileStringA( "s", "name5", "val5", TESTFILE2); - ret=GetPrivateProfileStringA( "s", NULL, "", buf, sizeof(buf), - TESTFILE2); - for( p = buf + strlen(buf) + 1; *p;p += strlen(p)+1) - p[-1] = ','; - ok( ret == 24 && !strcmp( buf, "name1,name2,name4,name5"), "wrong keys returned(%d): %s\n", - ret, buf); - - DeleteFileA( TESTFILE2); -} - -static void test_profile_sections(void) -{ - HANDLE h; - int ret; - DWORD count; - char buf[100]; - char *p; - static const char content[]="[section1]\r\nname1=val1\r\nname2=\r\nname3\r\nname4=val4\r\n[section2]\r\n"; - static const char testfile4[]=".\\testwine4.ini"; - BOOL on_win98 = FALSE; - - DeleteFileA( testfile4 ); - h = CreateFileA( testfile4, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - ok( h != INVALID_HANDLE_VALUE, " cannot create %s\n", testfile4); - if( h == INVALID_HANDLE_VALUE) return; - WriteFile( h, content, sizeof(content), &count, NULL); - CloseHandle( h); - - /* Some parameter checking */ - SetLastError(0xdeadbeef); - ret = GetPrivateProfileSectionA( NULL, NULL, 0, NULL ); - ok( ret == 0, "expected return size 0, got %d\n", ret ); - ok( GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == 0xdeadbeef /* Win98 */, - "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - if (GetLastError() == 0xdeadbeef) on_win98 = TRUE; - - SetLastError(0xdeadbeef); - ret = GetPrivateProfileSectionA( NULL, NULL, 0, testfile4 ); - ok( ret == 0, "expected return size 0, got %d\n", ret ); - ok( GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == 0xdeadbeef /* Win98 */, - "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - if (!on_win98) - { - SetLastError(0xdeadbeef); - ret = GetPrivateProfileSectionA( "section1", NULL, 0, testfile4 ); - ok( ret == 0, "expected return size 0, got %d\n", ret ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - } - - SetLastError(0xdeadbeef); - ret = GetPrivateProfileSectionA( NULL, buf, sizeof(buf), testfile4 ); - ok( ret == 0, "expected return size 0, got %d\n", ret ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = GetPrivateProfileSectionA( "section1", buf, sizeof(buf), NULL ); - ok( ret == 0, "expected return size 0, got %d\n", ret ); - todo_wine - ok( GetLastError() == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - - /* And a real one */ - ret=GetPrivateProfileSectionA("section1", buf, sizeof(buf), testfile4); - for( p = buf + strlen(buf) + 1; *p;p += strlen(p)+1) - p[-1] = ','; - ok( ret == 35 && !strcmp( buf, "name1=val1,name2=,name3,name4=val4"), "wrong section returned(%d): %s\n", - ret, buf); - ok( buf[ret-1] == 0 && buf[ret] == 0, "returned buffer not terminated with double-null\n" ); - ok( GetLastError() == S_OK, "expected S_OK, got %d\n", GetLastError()); - - DeleteFileA( testfile4 ); -} - -static void test_profile_sections_names(void) -{ - HANDLE h; - int ret; - DWORD count; - char buf[100]; - WCHAR bufW[100]; - static const char content[]="[section1]\r\n[section2]\r\n[section3]\r\n"; - static const char testfile3[]=".\\testwine3.ini"; - static const WCHAR testfile3W[]={ '.','\\','t','e','s','t','w','i','n','e','3','.','i','n','i',0 }; - static const WCHAR not_here[] = {'.','\\','n','o','t','_','h','e','r','e','.','i','n','i',0}; - DeleteFileA( testfile3 ); - h = CreateFileA( testfile3, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - ok( h != INVALID_HANDLE_VALUE, " cannot create %s\n", testfile3); - if( h == INVALID_HANDLE_VALUE) return; - WriteFile( h, content, sizeof(content), &count, NULL); - CloseHandle( h); - - /* Test with sufficiently large buffer */ - ret = GetPrivateProfileSectionNamesA( buf, 29, testfile3 ); - ok( ret == 27, "expected return size 27, got %d\n", ret ); - ok( buf[ret-1] == 0 && buf[ret] == 0, "returned buffer not terminated with double-null\n" ); - - /* Test with exactly fitting buffer */ - ret = GetPrivateProfileSectionNamesA( buf, 28, testfile3 ); - ok( ret == 26, "expected return size 26, got %d\n", ret ); - ok( buf[ret+1] == 0 && buf[ret] == 0, "returned buffer not terminated with double-null\n" ); - - /* Test with a buffer too small */ - ret = GetPrivateProfileSectionNamesA( buf, 27, testfile3 ); - ok( ret == 25, "expected return size 25, got %d\n", ret ); - ok( buf[ret+1] == 0 && buf[ret] == 0, "returned buffer not terminated with double-null\n" ); - - /* Tests on nonexistent file */ - memset(buf, 0xcc, sizeof(buf)); - ret = GetPrivateProfileSectionNamesA( buf, 10, ".\\not_here.ini" ); - ok( ret == 0, "expected return size 0, got %d\n", ret ); - ok( buf[0] == 0, "returned buffer not terminated with null\n" ); - ok( buf[1] != 0, "returned buffer terminated with double-null\n" ); - - /* Test with sufficiently large buffer */ - SetLastError(0xdeadbeef); - ret = GetPrivateProfileSectionNamesW( bufW, 29, testfile3W ); - if (ret == 0 && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("GetPrivateProfileSectionNamesW is not implemented\n"); - DeleteFileA( testfile3 ); - return; - } - ok( ret == 27, "expected return size 27, got %d\n", ret ); - ok( bufW[ret-1] == 0 && bufW[ret] == 0, "returned buffer not terminated with double-null\n" ); - - /* Test with exactly fitting buffer */ - ret = GetPrivateProfileSectionNamesW( bufW, 28, testfile3W ); - ok( ret == 26, "expected return size 26, got %d\n", ret ); - ok( bufW[ret+1] == 0 && bufW[ret] == 0, "returned buffer not terminated with double-null\n" ); - - /* Test with a buffer too small */ - ret = GetPrivateProfileSectionNamesW( bufW, 27, testfile3W ); - ok( ret == 25, "expected return size 25, got %d\n", ret ); - ok( bufW[ret+1] == 0 && bufW[ret] == 0, "returned buffer not terminated with double-null\n" ); - - DeleteFileA( testfile3 ); - - /* Tests on nonexistent file */ - memset(bufW, 0xcc, sizeof(bufW)); - ret = GetPrivateProfileSectionNamesW( bufW, 10, not_here ); - ok( ret == 0, "expected return size 0, got %d\n", ret ); - ok( bufW[0] == 0, "returned buffer not terminated with null\n" ); - ok( bufW[1] != 0, "returned buffer terminated with double-null\n" ); -} - -START_TEST(profile) -{ - test_profile_int(); - test_profile_string(); - test_profile_sections(); - test_profile_sections_names(); -} diff --git a/rostests/winetests/kernel32/resource.c b/rostests/winetests/kernel32/resource.c deleted file mode 100644 index 79d17f13fae..00000000000 --- a/rostests/winetests/kernel32/resource.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Unit test suite for environment functions. - * - * 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 - */ - -#include -#include - -#include "wine/test.h" - -static const char filename[] = "test_.exe"; -static DWORD GLE; - -static int build_exe( void ) -{ - IMAGE_DOS_HEADER *dos; - IMAGE_NT_HEADERS *nt; - IMAGE_SECTION_HEADER *sec; - IMAGE_OPTIONAL_HEADER *opt; - HANDLE file; - DWORD written; - BYTE page[0x1000]; - const int page_size = 0x1000; - - memset( page, 0, sizeof page ); - - dos = (void*) page; - dos->e_magic = IMAGE_DOS_SIGNATURE; - dos->e_lfanew = sizeof *dos; - - nt = (void*) &dos[1]; - - nt->Signature = IMAGE_NT_SIGNATURE; - nt->FileHeader.Machine = IMAGE_FILE_MACHINE_I386; - nt->FileHeader.NumberOfSections = 2; - nt->FileHeader.SizeOfOptionalHeader = sizeof nt->OptionalHeader; - nt->FileHeader.Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_DLL; - - opt = &nt->OptionalHeader; - - opt->Magic = IMAGE_NT_OPTIONAL_HDR_MAGIC; - opt->MajorLinkerVersion = 1; - opt->BaseOfCode = 0x10; - opt->ImageBase = 0x10000000; - opt->MajorOperatingSystemVersion = 4; - opt->MajorImageVersion = 1; - opt->MajorSubsystemVersion = 4; - opt->SizeOfHeaders = sizeof *dos + sizeof *nt + sizeof *sec * 2; - opt->SizeOfImage = page_size*3; - opt->Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI; - - /* if SectionAlignment and File alignment are not specified */ - /* UpdateResource fails trying to create a huge temporary file */ - opt->SectionAlignment = page_size; - opt->FileAlignment = page_size; - - sec = (void*) &nt[1]; - - memcpy( sec[0].Name, ".rodata", 8 ); - sec[0].Misc.VirtualSize = page_size; - sec[0].PointerToRawData = page_size; - sec[0].SizeOfRawData = page_size; - sec[0].VirtualAddress = page_size; - sec[0].Characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ; - - memcpy( sec[1].Name, ".rsrc", 6 ); - sec[1].Misc.VirtualSize = page_size; - sec[1].SizeOfRawData = page_size; - sec[1].PointerToRawData = page_size*2; - sec[1].VirtualAddress = page_size*2; - sec[1].Characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ; - - file = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); - ok (file != INVALID_HANDLE_VALUE, "failed to create file\n"); - - /* write out the header */ - WriteFile( file, page, sizeof page, &written, NULL ); - - /* write out an empty page for rodata */ - memset( page, 0, sizeof page ); - WriteFile( file, page, sizeof page, &written, NULL ); - - /* write out an empty page for the resources */ - memset( page, 0, sizeof page ); - WriteFile( file, page, sizeof page, &written, NULL ); - - CloseHandle( file ); - - return 0; -} - -static void update_missing_exe( void ) -{ - HANDLE res; - - SetLastError(0xdeadbeef); - res = BeginUpdateResource( filename, TRUE ); - GLE = GetLastError(); - ok( res == NULL, "BeginUpdateResource should fail\n"); -} - -static void update_empty_exe( void ) -{ - HANDLE file, res, test; - BOOL r; - - file = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); - ok (file != INVALID_HANDLE_VALUE, "failed to create file\n"); - - CloseHandle( file ); - - res = BeginUpdateResource( filename, TRUE ); - ok( res != NULL, "BeginUpdateResource failed\n"); - - /* check if it's possible to open the file now */ - test = CreateFile(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0); - ok (test != INVALID_HANDLE_VALUE, "failed to create file\n"); - - CloseHandle( test ); - - r = EndUpdateResource( res, FALSE ); - ok( r == FALSE, "EndUpdateResource failed\n"); - - res = BeginUpdateResource( filename, FALSE ); - ok( res == NULL, "BeginUpdateResource failed\n"); -} - -static void update_resources_none( void ) -{ - HMODULE res; - BOOL r; - - res = BeginUpdateResource( filename, FALSE ); - ok( res != NULL, "BeginUpdateResource failed\n"); - - r = EndUpdateResource( res, FALSE ); - ok( r, "EndUpdateResource failed\n"); -} - -static void update_resources_delete( void ) -{ - HMODULE res; - BOOL r; - - res = BeginUpdateResource( filename, TRUE ); - ok( res != NULL, "BeginUpdateResource failed\n"); - - r = EndUpdateResource( res, FALSE ); - ok( r, "EndUpdateResource failed\n"); -} - -static void update_resources_version(void) -{ - HANDLE res = NULL; - BOOL r; - char foo[] = "red and white"; - - res = BeginUpdateResource( filename, TRUE ); - ok( res != NULL, "BeginUpdateResource failed\n"); - - r = UpdateResource( res, - MAKEINTRESOURCE(0x1230), - MAKEINTRESOURCE(0x4567), - 0xabcd, - NULL, 0 ); - ok( r == FALSE, "UpdateResource failed\n"); - - r = UpdateResource( res, - MAKEINTRESOURCE(0x1230), - MAKEINTRESOURCE(0x4567), - 0xabcd, - foo, sizeof foo ); - ok( r == TRUE, "UpdateResource failed\n"); - - r = EndUpdateResource( res, FALSE ); - ok( r, "EndUpdateResource failed\n"); -} - - -typedef void (*res_check_func)( IMAGE_RESOURCE_DIRECTORY* ); - -static void check_empty( IMAGE_RESOURCE_DIRECTORY *dir ) -{ - char *pad; - - ok( dir->NumberOfNamedEntries == 0, "NumberOfNamedEntries should be 0 instead of %d\n", dir->NumberOfNamedEntries); - ok( dir->NumberOfIdEntries == 0, "NumberOfIdEntries should be 0 instead of %d\n", dir->NumberOfIdEntries); - - pad = (char*) &dir[1]; - - ok( !memcmp( pad, "PADDINGXXPADDING", 16), "padding wrong\n"); -} - -static void check_not_empty( IMAGE_RESOURCE_DIRECTORY *dir ) -{ - ok( dir->NumberOfNamedEntries == 0, "NumberOfNamedEntries should be 0 instead of %d\n", dir->NumberOfNamedEntries); - ok( dir->NumberOfIdEntries == 1, "NumberOfIdEntries should be 1 instead of %d\n", dir->NumberOfIdEntries); -} - -static void check_exe( res_check_func fn ) -{ - IMAGE_DOS_HEADER *dos; - IMAGE_NT_HEADERS *nt; - IMAGE_SECTION_HEADER *sec; - IMAGE_RESOURCE_DIRECTORY *dir; - HANDLE file, mapping; - DWORD length; - - file = CreateFile(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0); - ok (file != INVALID_HANDLE_VALUE, "failed to create file (%d)\n", GetLastError()); - - length = GetFileSize( file, NULL ); - ok( length == 0x3000, "file size wrong\n"); - - mapping = CreateFileMapping( file, NULL, PAGE_READONLY, 0, 0, NULL ); - ok (mapping != NULL, "failed to create file\n"); - - dos = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, length ); - ok( dos != NULL, "failed to map file\n"); - - if (!dos) - goto end; - - nt = (void*) ((BYTE*) dos + dos->e_lfanew); - ok( nt->FileHeader.NumberOfSections == 2, "number of sections wrong\n" ); - - if (nt->FileHeader.NumberOfSections < 2) - goto end; - - sec = (void*) &nt[1]; - - ok( !memcmp(sec[1].Name, ".rsrc", 6), "resource section name wrong\n"); - - dir = (void*) ((BYTE*) dos + sec[1].VirtualAddress); - - ok( dir->Characteristics == 0, "Characteristics wrong\n"); - ok( dir->TimeDateStamp == 0, "TimeDateStamp wrong\n"); - ok( dir->MajorVersion == 4, "MajorVersion wrong\n"); - ok( dir->MinorVersion == 0, "MinorVersion wrong\n"); - - fn( dir ); - -end: - UnmapViewOfFile( dos ); - - CloseHandle( mapping ); - - CloseHandle( file ); -} - -static void test_find_resource(void) -{ - HRSRC rsrc; - - rsrc = FindResourceW( GetModuleHandle(0), (LPCWSTR)MAKEINTRESOURCE(1), (LPCWSTR)RT_MENU ); - ok( rsrc != 0, "resource not found\n" ); - rsrc = FindResourceExW( GetModuleHandle(0), (LPCWSTR)RT_MENU, (LPCWSTR)MAKEINTRESOURCE(1), - MAKELANGID( LANG_NEUTRAL, SUBLANG_NEUTRAL )); - ok( rsrc != 0, "resource not found\n" ); - rsrc = FindResourceExW( GetModuleHandle(0), (LPCWSTR)RT_MENU, (LPCWSTR)MAKEINTRESOURCE(1), - MAKELANGID( LANG_GERMAN, SUBLANG_DEFAULT )); - ok( rsrc != 0, "resource not found\n" ); - - SetLastError( 0xdeadbeef ); - rsrc = FindResourceW( GetModuleHandle(0), (LPCWSTR)MAKEINTRESOURCE(1), (LPCWSTR)RT_DIALOG ); - ok( !rsrc, "resource found\n" ); - ok( GetLastError() == ERROR_RESOURCE_TYPE_NOT_FOUND, "wrong error %u\n", GetLastError() ); - - SetLastError( 0xdeadbeef ); - rsrc = FindResourceW( GetModuleHandle(0), (LPCWSTR)MAKEINTRESOURCE(2), (LPCWSTR)RT_MENU ); - ok( !rsrc, "resource found\n" ); - ok( GetLastError() == ERROR_RESOURCE_NAME_NOT_FOUND, "wrong error %u\n", GetLastError() ); - - SetLastError( 0xdeadbeef ); - rsrc = FindResourceExW( GetModuleHandle(0), (LPCWSTR)RT_MENU, (LPCWSTR)MAKEINTRESOURCE(1), - MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ) ); - ok( !rsrc, "resource found\n" ); - ok( GetLastError() == ERROR_RESOURCE_LANG_NOT_FOUND, "wrong error %u\n", GetLastError() ); - - SetLastError( 0xdeadbeef ); - rsrc = FindResourceExW( GetModuleHandle(0), (LPCWSTR)RT_MENU, (LPCWSTR)MAKEINTRESOURCE(1), - MAKELANGID( LANG_FRENCH, SUBLANG_DEFAULT ) ); - ok( !rsrc, "resource found\n" ); - ok( GetLastError() == ERROR_RESOURCE_LANG_NOT_FOUND, "wrong error %u\n", GetLastError() ); -} - -START_TEST(resource) -{ - DeleteFile( filename ); - update_missing_exe(); - - if (GLE == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("Resource calls are not implemented\n"); - return; - } - - update_empty_exe(); - build_exe(); - update_resources_none(); - check_exe( check_empty ); - update_resources_delete(); - check_exe( check_empty ); - update_resources_version(); - check_exe( check_not_empty ); - DeleteFile( filename ); - test_find_resource(); -} diff --git a/rostests/winetests/kernel32/resource.rc b/rostests/winetests/kernel32/resource.rc deleted file mode 100644 index f40a87819ea..00000000000 --- a/rostests/winetests/kernel32/resource.rc +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Resources for kernel test suite. - * - * Copyright 2008 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 "windef.h" - -1 MENU LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT -{ - MENUITEM "foo", 1 -} diff --git a/rostests/winetests/kernel32/sync.c b/rostests/winetests/kernel32/sync.c deleted file mode 100755 index b5778fccd99..00000000000 --- a/rostests/winetests/kernel32/sync.c +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Synchronization tests - * - * Copyright 2005 Mike McCormack 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 -#include -#include - -#include "wine/test.h" - -static void test_signalandwait(void) -{ - DWORD (WINAPI *pSignalObjectAndWait)(HANDLE, HANDLE, DWORD, BOOL); - HMODULE kernel32; - DWORD r; - int i; - HANDLE event[2], maxevents[MAXIMUM_WAIT_OBJECTS], semaphore[2], file; - - kernel32 = GetModuleHandle("kernel32"); - pSignalObjectAndWait = (void*) GetProcAddress(kernel32, "SignalObjectAndWait"); - - if (!pSignalObjectAndWait) - return; - - /* invalid parameters */ - r = pSignalObjectAndWait(NULL, NULL, 0, 0); - if (r == ERROR_INVALID_FUNCTION) - { - trace("SignalObjectAndWait not implemented, skipping tests\n"); - return; /* Win98/ME */ - } - ok( r == WAIT_FAILED, "should fail\n"); - - event[0] = CreateEvent(NULL, 0, 0, NULL); - event[1] = CreateEvent(NULL, 1, 1, NULL); - - ok( event[0] && event[1], "failed to create event flags\n"); - - r = pSignalObjectAndWait(event[0], NULL, 0, FALSE); - ok( r == WAIT_FAILED, "should fail\n"); - - r = pSignalObjectAndWait(NULL, event[0], 0, FALSE); - ok( r == WAIT_FAILED, "should fail\n"); - - - /* valid parameters */ - r = pSignalObjectAndWait(event[0], event[1], 0, FALSE); - ok( r == WAIT_OBJECT_0, "should succeed\n"); - - /* event[0] is now signalled */ - r = pSignalObjectAndWait(event[0], event[0], 0, FALSE); - ok( r == WAIT_OBJECT_0, "should succeed\n"); - - /* event[0] is not signalled */ - r = WaitForSingleObject(event[0], 0); - ok( r == WAIT_TIMEOUT, "event was signalled\n"); - - r = pSignalObjectAndWait(event[0], event[0], 0, FALSE); - ok( r == WAIT_OBJECT_0, "should succeed\n"); - - /* clear event[1] and check for a timeout */ - ok(ResetEvent(event[1]), "failed to clear event[1]\n"); - r = pSignalObjectAndWait(event[0], event[1], 0, FALSE); - ok( r == WAIT_TIMEOUT, "should timeout\n"); - - CloseHandle(event[0]); - CloseHandle(event[1]); - - /* create the maximum number of events and make sure - * we can wait on that many */ - for (i=0; ivalue == 1, "previous entry in slist wasn't the one added\n"); - } - size = pQueryDepthSList(&slist_header); - ok(size == 2, "slist with 2 items has size %d\n", size); - - item3.value = 3; - entry = pInterlockedPushEntrySList(&slist_header, &item3.entry); - ok(entry != NULL, "previous entry in non-empty slist was NULL\n"); - if (entry != NULL) - { - pitem = (struct item*) entry; - ok(pitem->value == 2, "previous entry in slist wasn't the one added\n"); - } - size = pQueryDepthSList(&slist_header); - ok(size == 3, "slist with 3 items has size %d\n", size); - - entry = pInterlockedPopEntrySList(&slist_header); - ok(entry != NULL, "entry shouldn't be NULL\n"); - if (entry != NULL) - { - pitem = (struct item*) entry; - ok(pitem->value == 3, "unexpected entry removed\n"); - } - size = pQueryDepthSList(&slist_header); - ok(size == 2, "slist with 2 items has size %d\n", size); - - entry = pInterlockedFlushSList(&slist_header); - size = pQueryDepthSList(&slist_header); - ok(size == 0, "flushed slist should be empty, size is %d\n", size); - if (size == 0) - { - ok(pInterlockedPopEntrySList(&slist_header) == NULL, - "popping empty slist didn't return NULL\n"); - } - ok(((struct item*)entry)->value == 2, "item 2 not in front of list\n"); - ok(((struct item*)entry->Next)->value == 1, "item 1 not at the back of list\n"); -} - -static void test_event_security(void) -{ - HANDLE handle; - SECURITY_ATTRIBUTES sa; - SECURITY_DESCRIPTOR sd; - ACL acl; - - /* no sd */ - handle = CreateEventA(NULL, FALSE, FALSE, __FILE__ ": Test Event"); - ok(handle != NULL, "CreateEventW with blank sd failed with error %d\n", GetLastError()); - CloseHandle(handle); - - sa.nLength = sizeof(sa); - sa.lpSecurityDescriptor = &sd; - sa.bInheritHandle = FALSE; - - InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION); - - /* blank sd */ - handle = CreateEventA(&sa, FALSE, FALSE, __FILE__ ": Test Event"); - ok(handle != NULL, "CreateEventW with blank sd failed with error %d\n", GetLastError()); - CloseHandle(handle); - - /* sd with NULL dacl */ - SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE); - handle = CreateEventA(&sa, FALSE, FALSE, __FILE__ ": Test Event"); - ok(handle != NULL, "CreateEventW with blank sd failed with error %d\n", GetLastError()); - CloseHandle(handle); - - /* sd with empty dacl */ - InitializeAcl(&acl, sizeof(acl), ACL_REVISION); - SetSecurityDescriptorDacl(&sd, TRUE, &acl, FALSE); - handle = CreateEventA(&sa, FALSE, FALSE, __FILE__ ": Test Event"); - ok(handle != NULL, "CreateEventW with blank sd failed with error %d\n", GetLastError()); - CloseHandle(handle); -} - -static HANDLE sem = 0; - -static void CALLBACK iocp_callback(DWORD dwErrorCode, DWORD dwNumberOfBytesTransferred, LPOVERLAPPED lpOverlapped) -{ - ReleaseSemaphore(sem, 1, NULL); -} - -static BOOL WINAPI (*p_BindIoCompletionCallback)( HANDLE FileHandle, LPOVERLAPPED_COMPLETION_ROUTINE Function, ULONG Flags) = NULL; - -static void test_iocp_callback(void) -{ - char temp_path[MAX_PATH]; - char filename[MAX_PATH]; - DWORD ret; - BOOL retb; - static const char prefix[] = "pfx"; - HANDLE hFile; - HMODULE hmod = GetModuleHandleA("kernel32.dll"); - DWORD bytesWritten; - const char *buffer = "12345678123456781234567812345678"; - OVERLAPPED overlapped; - - p_BindIoCompletionCallback = (void*)GetProcAddress(hmod, "BindIoCompletionCallback"); - if(!p_BindIoCompletionCallback) { - skip("BindIoCompletionCallback not found in this DLL\n"); - return; - } - - sem = CreateSemaphore(NULL, 0, 1, NULL); - ok(sem != INVALID_HANDLE_VALUE, "Creating a semaphore failed\n"); - - ret = GetTempPathA(MAX_PATH, temp_path); - ok(ret != 0, "GetTempPathA error %d\n", GetLastError()); - ok(ret < MAX_PATH, "temp path should fit into MAX_PATH\n"); - - ret = GetTempFileNameA(temp_path, prefix, 0, filename); - ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError()); - - hFile = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA: error %d\n", GetLastError()); - - retb = p_BindIoCompletionCallback(hFile, iocp_callback, 0); - ok(retb == FALSE, "BindIoCompletionCallback succeeded on a file that wasn't created with FILE_FLAG_OVERLAPPED\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Last error is %d\n", GetLastError()); - - ret = CloseHandle(hFile); - ok( ret, "CloseHandle: error %d\n", GetLastError()); - ret = DeleteFileA(filename); - ok( ret, "DeleteFileA: error %d\n", GetLastError()); - - hFile = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA: error %d\n", GetLastError()); - - retb = p_BindIoCompletionCallback(hFile, iocp_callback, 0); - ok(retb == TRUE, "BindIoCompletionCallback failed\n"); - - memset(&overlapped, 0, sizeof(overlapped)); - retb = WriteFile(hFile, (const void *) buffer, 4, &bytesWritten, &overlapped); - ok(retb == TRUE || GetLastError() == ERROR_IO_PENDING, "WriteFile failed, lastError = %d\n", GetLastError()); - - ret = WaitForSingleObject(sem, 5000); - ok(ret == WAIT_OBJECT_0, "Wait for the IO completion callback failed\n"); - CloseHandle(sem); - - retb = p_BindIoCompletionCallback(hFile, iocp_callback, 0); - ok(retb == FALSE, "BindIoCompletionCallback succeeded when setting the same callback on the file again\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Last error is %d\n", GetLastError()); - retb = p_BindIoCompletionCallback(hFile, NULL, 0); - ok(retb == FALSE, "BindIoCompletionCallback succeeded when setting the callback to NULL\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Last error is %d\n", GetLastError()); - - ret = CloseHandle(hFile); - ok( ret, "CloseHandle: error %d\n", GetLastError()); - ret = DeleteFileA(filename); - ok( ret, "DeleteFileA: error %d\n", GetLastError()); - - hFile = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA: error %d\n", GetLastError()); - retb = p_BindIoCompletionCallback(hFile, NULL, 0); - ok(retb == TRUE, "BindIoCompletionCallback failed with a NULL callback(first time set)\n"); - ret = CloseHandle(hFile); - ok( ret, "CloseHandle: error %d\n", GetLastError()); - ret = DeleteFileA(filename); - ok( ret, "DeleteFileA: error %d\n", GetLastError()); - - /* win2k3 requires the Flags parameter to be zero */ - SetLastError(0xdeadbeef); - hFile = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED, 0); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA: error %d\n", GetLastError()); - retb = p_BindIoCompletionCallback(hFile, iocp_callback, 12345); - if (!retb) - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - else - ok(retb == TRUE, "BindIoCompletionCallback failed with Flags != 0\n"); - ret = CloseHandle(hFile); - ok( ret, "CloseHandle: error %d\n", GetLastError()); - ret = DeleteFileA(filename); - ok( ret, "DeleteFileA: error %d\n", GetLastError()); - - retb = p_BindIoCompletionCallback(NULL, iocp_callback, 0); - ok(retb == FALSE, "BindIoCompletionCallback succeeded on a NULL file\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, "Last error is %d\n", GetLastError()); -} - -START_TEST(sync) -{ - test_signalandwait(); - test_mutex(); - test_slist(); - test_event_security(); - test_iocp_callback(); -} diff --git a/rostests/winetests/kernel32/testlist.c b/rostests/winetests/kernel32/testlist.c deleted file mode 100755 index 3dd54afe8d4..00000000000 --- a/rostests/winetests/kernel32/testlist.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define STANDALONE -#include "wine/test.h" - -#include -#include -#include -#include "windef.h" -#include "winbase.h" -#include - -extern void func_actctx(void); -extern void func_alloc(void); -extern void func_atom(void); -extern void func_change(void); -extern void func_codepage(void); -extern void func_comm(void); -extern void func_console(void); -extern void func_directory(void); -extern void func_drive(void); -extern void func_environ(void); -extern void func_file(void); -extern void func_format_msg(void); -extern void func_heap(void); -extern void func_interlck(void); -extern void func_locale(void); -extern void func_loader(void); -extern void func_module(void); -extern void func_mailslot(void); -extern void func_path(void); -extern void func_pipe(void); -extern void func_process(void); -extern void func_profile(void); -extern void func_resource(void); -extern void func_sync(void); -extern void func_thread(void); -extern void func_time(void); -extern void func_timer(void); -extern void func_toolhelp(void); -extern void func_virtual(void); -extern void func_version(void); -extern void func_volume(void); - -const struct test winetest_testlist[] = -{ - { "actctx", func_actctx }, - { "alloc", func_alloc }, - { "atom", func_atom }, - { "change", func_change }, - { "codepage", func_codepage }, - { "comm", func_comm }, - { "console", func_console }, - //{ "debbuger", func_debbuger }, - { "directory", func_directory }, - { "drive", func_drive }, - { "environ", func_environ }, - { "file", func_file }, - { "format_msg", func_format_msg }, - { "heap", func_heap }, - { "interlck", func_interlck }, - { "loader", func_loader }, - { "locale", func_locale }, - { "module", func_module }, - { "mailslot", func_mailslot }, - { "path", func_path }, - { "pipe", func_pipe }, - { "process", func_process }, - { "profile", func_profile }, - { "resource", func_resource }, - { "sync", func_sync }, - { "thread", func_thread }, - { "time", func_time }, - { "timer", func_timer }, - { "toolhelp", func_toolhelp }, - { "virtual", func_virtual }, - { "version", func_version }, - { "volume", func_volume }, - { 0, 0 } -}; - - diff --git a/rostests/winetests/kernel32/thread.c b/rostests/winetests/kernel32/thread.c deleted file mode 100755 index 7d83b255a4d..00000000000 --- a/rostests/winetests/kernel32/thread.c +++ /dev/null @@ -1,1015 +0,0 @@ -/* - * Unit test suite for directory functions. - * - * Copyright 2002 Geoffrey Hausheer - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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_WINNT to get SetThreadIdealProcessor on Windows */ -#define _WIN32_WINNT 0x0500 - -#include -#include - -#include "wine/test.h" -#include -#include -#include -#include - -/* Specify the number of simultaneous threads to test */ -#define NUM_THREADS 4 -/* Specify whether to test the extended priorities for Win2k/XP */ -#define USE_EXTENDED_PRIORITIES 0 -/* Specify whether to test the stack allocation in CreateThread */ -#define CHECK_STACK 0 - -/* Set CHECK_STACK to 1 if you want to try to test the stack-limit from - CreateThread. So far I have been unable to make this work, and - I am in doubt as to how portable it is. Also, according to MSDN, - you shouldn't mix C-run-time-libraries (i.e. alloca) with CreateThread. - Anyhow, the check is currently commented out -*/ -#if CHECK_STACK -# ifdef __try -# define __TRY __try -# define __EXCEPT __except -# define __ENDTRY -# else -# include "wine/exception.h" -# endif -#endif - -typedef BOOL (WINAPI *GetThreadPriorityBoost_t)(HANDLE,PBOOL); -static GetThreadPriorityBoost_t pGetThreadPriorityBoost=NULL; - -typedef HANDLE (WINAPI *OpenThread_t)(DWORD,BOOL,DWORD); -static OpenThread_t pOpenThread=NULL; - -typedef BOOL (WINAPI *QueueUserWorkItem_t)(LPTHREAD_START_ROUTINE,PVOID,ULONG); -static QueueUserWorkItem_t pQueueUserWorkItem=NULL; - -typedef DWORD (WINAPI *SetThreadIdealProcessor_t)(HANDLE,DWORD); -static SetThreadIdealProcessor_t pSetThreadIdealProcessor=NULL; - -typedef BOOL (WINAPI *SetThreadPriorityBoost_t)(HANDLE,BOOL); -static SetThreadPriorityBoost_t pSetThreadPriorityBoost=NULL; - -typedef BOOL (WINAPI *RegisterWaitForSingleObject_t)(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG); -static RegisterWaitForSingleObject_t pRegisterWaitForSingleObject=NULL; - -typedef BOOL (WINAPI *UnregisterWait_t)(HANDLE); -static UnregisterWait_t pUnregisterWait=NULL; - -static HANDLE create_target_process(const char *arg) -{ - char **argv; - char cmdline[MAX_PATH]; - PROCESS_INFORMATION pi; - STARTUPINFO si = { 0 }; - si.cb = sizeof(si); - - winetest_get_mainargs( &argv ); - sprintf(cmdline, "%s %s %s", argv[0], argv[1], arg); - ok(CreateProcess(NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, - &si, &pi) != 0, "error: %u\n", GetLastError()); - ok(CloseHandle(pi.hThread) != 0, "error %u\n", GetLastError()); - return pi.hProcess; -} - -/* Functions not tested yet: - AttachThreadInput - SetThreadContext - SwitchToThread - -In addition there are no checks that the inheritance works properly in -CreateThread -*/ - -DWORD tlsIndex; - -typedef struct { - int threadnum; - HANDLE *event; - DWORD *threadmem; -} t1Struct; - -/* WinME supports OpenThread but doesn't know about access restrictions so - we require them to be either completely ignored or always obeyed. -*/ -INT obeying_ars = 0; /* -1 == no, 0 == dunno yet, 1 == yes */ -#define obey_ar(x) \ - (obeying_ars == 0 \ - ? ((x) \ - ? (obeying_ars = +1) \ - : ((obeying_ars = -1), \ - trace("not restricted, assuming consistent behaviour\n"))) \ - : (obeying_ars < 0) \ - ? ok(!(x), "access restrictions obeyed\n") \ - : ok( (x), "access restrictions not obeyed\n")) - -/* Basic test that simultaneous threads can access shared memory, - that the thread local storage routines work correctly, and that - threads actually run concurrently -*/ -static DWORD WINAPI threadFunc1(LPVOID p) -{ - t1Struct *tstruct = (t1Struct *)p; - int i; -/* write our thread # into shared memory */ - tstruct->threadmem[tstruct->threadnum]=GetCurrentThreadId(); - ok(TlsSetValue(tlsIndex,(LPVOID)(tstruct->threadnum+1))!=0, - "TlsSetValue failed\n"); -/* The threads synchronize before terminating. This is done by - Signaling an event, and waiting for all events to occur -*/ - SetEvent(tstruct->event[tstruct->threadnum]); - WaitForMultipleObjects(NUM_THREADS,tstruct->event,TRUE,INFINITE); -/* Double check that all threads really did run by validating that - they have all written to the shared memory. There should be no race - here, since all threads were synchronized after the write.*/ - for(i=0;ithreadmem[i]==0) ; - } - - /* lstrlenA contains an exception handler so this makes sure exceptions work in threads */ - ok( lstrlenA( (char *)0xdeadbeef ) == 0, "lstrlenA: unexpected success\n" ); - -/* Check that no one changed our tls memory */ - ok((int)TlsGetValue(tlsIndex)-1==tstruct->threadnum, - "TlsGetValue failed\n"); - return NUM_THREADS+tstruct->threadnum; -} - -static DWORD WINAPI threadFunc2(LPVOID p) -{ - return 99; -} - -static DWORD WINAPI threadFunc3(LPVOID p) -{ - HANDLE thread; - thread=GetCurrentThread(); - SuspendThread(thread); - return 99; -} - -static DWORD WINAPI threadFunc4(LPVOID p) -{ - HANDLE event = (HANDLE)p; - if(event != NULL) { - SetEvent(event); - } - Sleep(99000); - return 0; -} - -#if CHECK_STACK -static DWORD WINAPI threadFunc5(LPVOID p) -{ - DWORD *exitCode = (DWORD *)p; - SYSTEM_INFO sysInfo; - sysInfo.dwPageSize=0; - GetSystemInfo(&sysInfo); - *exitCode=0; - __TRY - { - alloca(2*sysInfo.dwPageSize); - } - __EXCEPT(1) { - *exitCode=1; - } - __ENDTRY - return 0; -} -#endif - -static DWORD WINAPI threadFunc_SetEvent(LPVOID p) -{ - SetEvent((HANDLE) p); - return 0; -} - -static DWORD WINAPI threadFunc_CloseHandle(LPVOID p) -{ - CloseHandle((HANDLE) p); - return 0; -} - -static void create_function_addr_events(HANDLE events[2]) -{ - char buffer[256]; - - sprintf(buffer, "threadFunc_SetEvent %p", threadFunc_SetEvent); - events[0] = CreateEvent(NULL, FALSE, FALSE, buffer); - - sprintf(buffer, "threadFunc_CloseHandle %p", threadFunc_CloseHandle); - events[1] = CreateEvent(NULL, FALSE, FALSE, buffer); -} - -/* check CreateRemoteThread */ -static VOID test_CreateRemoteThread(void) -{ - HANDLE hProcess, hThread, hEvent, hRemoteEvent; - DWORD tid, ret, exitcode; - HANDLE hAddrEvents[2]; - - hProcess = create_target_process("sleep"); - ok(hProcess != NULL, "Can't start process\n"); - - /* ensure threadFunc_SetEvent & threadFunc_CloseHandle are the same - * address as in the child process */ - create_function_addr_events(hAddrEvents); - ret = WaitForMultipleObjects(2, hAddrEvents, TRUE, 5000); - if (ret == WAIT_TIMEOUT) - { - skip("child process wasn't mapped at same address, so can't do CreateRemoteThread tests.\n"); - return; - } - - hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - ok(hEvent != NULL, "Can't create event, err=%u\n", GetLastError()); - ret = DuplicateHandle(GetCurrentProcess(), hEvent, hProcess, &hRemoteEvent, - 0, FALSE, DUPLICATE_SAME_ACCESS); - ok(ret != 0, "DuplicateHandle failed, err=%u\n", GetLastError()); - - /* create suspended remote thread with entry point SetEvent() */ - SetLastError(0xdeadbeef); - hThread = CreateRemoteThread(hProcess, NULL, 0, threadFunc_SetEvent, - hRemoteEvent, CREATE_SUSPENDED, &tid); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("CreateRemoteThread is not implemented\n"); - goto cleanup; - } - ok(hThread != NULL, "CreateRemoteThread failed, err=%u\n", GetLastError()); - ok(tid != 0, "null tid\n"); - ret = SuspendThread(hThread); - ok(ret == 1, "ret=%u, err=%u\n", ret, GetLastError()); - ret = ResumeThread(hThread); - ok(ret == 2, "ret=%u, err=%u\n", ret, GetLastError()); - - /* thread still suspended, so wait times out */ - ret = WaitForSingleObject(hEvent, 100); - ok(ret == WAIT_TIMEOUT, "wait did not time out, ret=%u\n", ret); - - ret = ResumeThread(hThread); - ok(ret == 1, "ret=%u, err=%u\n", ret, GetLastError()); - - /* wait that doesn't time out */ - ret = WaitForSingleObject(hEvent, 100); - ok(ret == WAIT_OBJECT_0, "object not signaled, ret=%u\n", ret); - - /* wait for thread end */ - ret = WaitForSingleObject(hThread, 100); - ok(ret == WAIT_OBJECT_0, "waiting for thread failed, ret=%u\n", ret); - CloseHandle(hThread); - - /* create and wait for remote thread with entry point CloseHandle() */ - hThread = CreateRemoteThread(hProcess, NULL, 0, - threadFunc_CloseHandle, - hRemoteEvent, 0, &tid); - ok(hThread != NULL, "CreateRemoteThread failed, err=%u\n", GetLastError()); - ret = WaitForSingleObject(hThread, 100); - ok(ret == WAIT_OBJECT_0, "waiting for thread failed, ret=%u\n", ret); - CloseHandle(hThread); - - /* create remote thread with entry point SetEvent() */ - hThread = CreateRemoteThread(hProcess, NULL, 0, - threadFunc_SetEvent, - hRemoteEvent, 0, &tid); - ok(hThread != NULL, "CreateRemoteThread failed, err=%u\n", GetLastError()); - - /* closed handle, so wait times out */ - ret = WaitForSingleObject(hEvent, 100); - ok(ret == WAIT_TIMEOUT, "wait did not time out, ret=%u\n", ret); - - /* check that remote SetEvent() failed */ - ret = GetExitCodeThread(hThread, &exitcode); - ok(ret != 0, "GetExitCodeThread failed, err=%u\n", GetLastError()); - if (ret) ok(exitcode == 0, "SetEvent succeeded, expected to fail\n"); - CloseHandle(hThread); - -cleanup: - TerminateProcess(hProcess, 0); - CloseHandle(hEvent); - CloseHandle(hProcess); -} - -/* Check basic functionality of CreateThread and Tls* functions */ -static VOID test_CreateThread_basic(void) -{ - HANDLE thread[NUM_THREADS],event[NUM_THREADS]; - DWORD threadid[NUM_THREADS],curthreadId; - DWORD threadmem[NUM_THREADS]; - DWORD exitCode; - t1Struct tstruct[NUM_THREADS]; - int error; - DWORD i,j; - DWORD GLE, ret; - - /* lstrlenA contains an exception handler so this makes sure exceptions work in the main thread */ - ok( lstrlenA( (char *)0xdeadbeef ) == 0, "lstrlenA: unexpected success\n" ); - -/* Retrieve current Thread ID for later comparisons */ - curthreadId=GetCurrentThreadId(); -/* Allocate some local storage */ - ok((tlsIndex=TlsAlloc())!=TLS_OUT_OF_INDEXES,"TlsAlloc failed\n"); -/* Create events for thread synchronization */ - for(i=0;i0,"GetSystemInfo should return a valid page size\n"); - thread = CreateThread(NULL,sysInfo.dwPageSize, - threadFunc5,&exitCode, - 0,&threadId); - ok(WaitForSingleObject(thread,5000)==WAIT_OBJECT_0, - "TerminateThread didn't work\n"); - ok(exitCode==1,"CreateThread did not obey stack-size-limit\n"); - ok(CloseHandle(thread)!=0,"CloseHandle failed\n"); -#endif -} - -/* Check whether setting/retrieving thread priorities works */ -static VOID test_thread_priority(void) -{ - HANDLE curthread,access_thread; - DWORD curthreadId,exitCode; - int min_priority=-2,max_priority=2; - BOOL disabled,rc; - int i; - - curthread=GetCurrentThread(); - curthreadId=GetCurrentThreadId(); -/* Check thread priority */ -/* NOTE: on Win2k/XP priority can be from -7 to 6. All other platforms it - is -2 to 2. However, even on a real Win2k system, using thread - priorities beyond the -2 to 2 range does not work. If you want to try - anyway, enable USE_EXTENDED_PRIORITIES -*/ - ok(GetThreadPriority(curthread)==THREAD_PRIORITY_NORMAL, - "GetThreadPriority Failed\n"); - - if (pOpenThread) { -/* check that access control is obeyed */ - access_thread=pOpenThread(THREAD_ALL_ACCESS & - (~THREAD_QUERY_INFORMATION) & (~THREAD_SET_INFORMATION), - 0,curthreadId); - ok(access_thread!=NULL,"OpenThread returned an invalid handle\n"); - if (access_thread!=NULL) { - obey_ar(SetThreadPriority(access_thread,1)==0); - obey_ar(GetThreadPriority(access_thread)==THREAD_PRIORITY_ERROR_RETURN); - obey_ar(GetExitCodeThread(access_thread,&exitCode)==0); - ok(CloseHandle(access_thread),"Error Closing thread handle\n"); - } - } -#if USE_EXTENDED_PRIORITIES - min_priority=-7; max_priority=6; -#endif - for(i=min_priority;i<=max_priority;i++) { - ok(SetThreadPriority(curthread,i)!=0, - "SetThreadPriority Failed for priority: %d\n",i); - ok(GetThreadPriority(curthread)==i, - "GetThreadPriority Failed for priority: %d\n",i); - } - ok(SetThreadPriority(curthread,THREAD_PRIORITY_TIME_CRITICAL)!=0, - "SetThreadPriority Failed\n"); - ok(GetThreadPriority(curthread)==THREAD_PRIORITY_TIME_CRITICAL, - "GetThreadPriority Failed\n"); - ok(SetThreadPriority(curthread,THREAD_PRIORITY_IDLE)!=0, - "SetThreadPriority Failed\n"); - ok(GetThreadPriority(curthread)==THREAD_PRIORITY_IDLE, - "GetThreadPriority Failed\n"); - ok(SetThreadPriority(curthread,0)!=0,"SetThreadPriority Failed\n"); - -/* Check that the thread priority is not changed if SetThreadPriority - is called with a value outside of the max/min range */ - SetThreadPriority(curthread,min_priority); - SetLastError(0xdeadbeef); - rc = SetThreadPriority(curthread,min_priority-1); - - ok(rc == FALSE, "SetThreadPriority passed with a bad argument\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_INVALID_PRIORITY /* Win9x */, - "SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER or ERROR_INVALID_PRIORITY\n", - GetLastError()); - ok(GetThreadPriority(curthread)==min_priority, - "GetThreadPriority didn't return min_priority\n"); - - SetThreadPriority(curthread,max_priority); - SetLastError(0xdeadbeef); - rc = SetThreadPriority(curthread,max_priority+1); - - ok(rc == FALSE, "SetThreadPriority passed with a bad argument\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_INVALID_PRIORITY /* Win9x */, - "SetThreadPriority error %d, expected ERROR_INVALID_PARAMETER or ERROR_INVALID_PRIORITY\n", - GetLastError()); - ok(GetThreadPriority(curthread)==max_priority, - "GetThreadPriority didn't return max_priority\n"); - -/* Check thread priority boost */ - if (!pGetThreadPriorityBoost || !pSetThreadPriorityBoost) - return; /* Win9x */ - - SetLastError(0xdeadbeef); - rc=pGetThreadPriorityBoost(curthread,&disabled); - if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; /* WinME */ - - todo_wine - ok(rc!=0,"error=%d\n",GetLastError()); - - if (pOpenThread) { -/* check that access control is obeyed */ - access_thread=pOpenThread(THREAD_ALL_ACCESS & - (~THREAD_QUERY_INFORMATION) & (~THREAD_SET_INFORMATION), - 0,curthreadId); - ok(access_thread!=NULL,"OpenThread returned an invalid handle\n"); - if (access_thread!=NULL) { - obey_ar(pSetThreadPriorityBoost(access_thread,1)==0); - obey_ar(pGetThreadPriorityBoost(access_thread,&disabled)==0); - ok(CloseHandle(access_thread),"Error Closing thread handle\n"); - } - } - - todo_wine { - rc = pSetThreadPriorityBoost(curthread,1); - ok( rc != 0, "error=%d\n",GetLastError()); - rc=pGetThreadPriorityBoost(curthread,&disabled); - ok(rc!=0 && disabled==1, - "rc=%d error=%d disabled=%d\n",rc,GetLastError(),disabled); - - rc = pSetThreadPriorityBoost(curthread,0); - ok( rc != 0, "error=%d\n",GetLastError()); - rc=pGetThreadPriorityBoost(curthread,&disabled); - ok(rc!=0 && disabled==0, - "rc=%d error=%d disabled=%d\n",rc,GetLastError(),disabled); - } -} - -/* check the GetThreadTimes function */ -static VOID test_GetThreadTimes(void) -{ - HANDLE thread,access_thread=NULL; - FILETIME creationTime,exitTime,kernelTime,userTime; - DWORD threadId; - int error; - - thread = CreateThread(NULL,0,threadFunc2,NULL, - CREATE_SUSPENDED,&threadId); - - ok(thread!=NULL,"Create Thread failed\n"); -/* check that access control is obeyed */ - if (pOpenThread) { - access_thread=pOpenThread(THREAD_ALL_ACCESS & - (~THREAD_QUERY_INFORMATION), 0,threadId); - ok(access_thread!=NULL, - "OpenThread returned an invalid handle\n"); - } - ok(ResumeThread(thread)==1,"Resume thread returned an invalid value\n"); - ok(WaitForSingleObject(thread,5000)==WAIT_OBJECT_0, - "ResumeThread didn't work\n"); - creationTime.dwLowDateTime=99; creationTime.dwHighDateTime=99; - exitTime.dwLowDateTime=99; exitTime.dwHighDateTime=99; - kernelTime.dwLowDateTime=99; kernelTime.dwHighDateTime=99; - userTime.dwLowDateTime=99; userTime.dwHighDateTime=99; -/* GetThreadTimes should set all of the parameters passed to it */ - error=GetThreadTimes(thread,&creationTime,&exitTime, - &kernelTime,&userTime); - if (error!=0 || GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED) { - ok(error!=0,"GetThreadTimes failed\n"); - ok(creationTime.dwLowDateTime!=99 || creationTime.dwHighDateTime!=99, - "creationTime was invalid\n"); - ok(exitTime.dwLowDateTime!=99 || exitTime.dwHighDateTime!=99, - "exitTime was invalid\n"); - ok(kernelTime.dwLowDateTime!=99 || kernelTime.dwHighDateTime!=99, - "kernelTimewas invalid\n"); - ok(userTime.dwLowDateTime!=99 || userTime.dwHighDateTime!=99, - "userTime was invalid\n"); - ok(CloseHandle(thread)!=0,"CloseHandle failed\n"); - if(access_thread!=NULL) - { - error=GetThreadTimes(access_thread,&creationTime,&exitTime, - &kernelTime,&userTime); - obey_ar(error==0); - } - } - if(access_thread!=NULL) { - ok(CloseHandle(access_thread)!=0,"CloseHandle Failed\n"); - } -} - -/* Check the processor affinity functions */ -/* NOTE: These functions should also be checked that they obey access control -*/ -static VOID test_thread_processor(void) -{ - HANDLE curthread,curproc; - DWORD_PTR processMask,systemMask; - SYSTEM_INFO sysInfo; - int error=0; - - sysInfo.dwNumberOfProcessors=0; - GetSystemInfo(&sysInfo); - ok(sysInfo.dwNumberOfProcessors>0, - "GetSystemInfo failed to return a valid # of processors\n"); -/* Use the current Thread/process for all tests */ - curthread=GetCurrentThread(); - ok(curthread!=NULL,"GetCurrentThread failed\n"); - curproc=GetCurrentProcess(); - ok(curproc!=NULL,"GetCurrentProcess failed\n"); -/* Check the Affinity Mask functions */ - ok(GetProcessAffinityMask(curproc,&processMask,&systemMask)!=0, - "GetProcessAffinityMask failed\n"); - ok(SetThreadAffinityMask(curthread,processMask)==processMask, - "SetThreadAffinityMask failed\n"); - ok(SetThreadAffinityMask(curthread,processMask+1)==0, - "SetThreadAffinityMask passed for an illegal processor\n"); -/* NOTE: This only works on WinNT/2000/XP) */ - if (pSetThreadIdealProcessor) { - todo_wine { - SetLastError(0); - error=pSetThreadIdealProcessor(curthread,0); - if (GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED) { - ok(error!=-1, "SetThreadIdealProcessor failed\n"); - } - } - if (GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED) { - error=pSetThreadIdealProcessor(curthread,MAXIMUM_PROCESSORS+1); - ok(error==-1, - "SetThreadIdealProcessor succeeded with an illegal processor #\n"); - todo_wine { - error=pSetThreadIdealProcessor(curthread,MAXIMUM_PROCESSORS); - ok(error==0, "SetThreadIdealProcessor returned an incorrect value\n"); - } - } - } -} - -static VOID test_GetThreadExitCode(void) -{ - DWORD exitCode, threadid; - DWORD GLE, ret; - HANDLE thread; - - ret = GetExitCodeThread((HANDLE)0x2bad2bad,&exitCode); - ok(ret==0, "GetExitCodeThread returned non zero value: %d\n", ret); - GLE = GetLastError(); - ok(GLE==ERROR_INVALID_HANDLE, "GetLastError returned %d (expected 6)\n", GLE); - - thread = CreateThread(NULL,0,threadFunc2,NULL,0,&threadid); - ret = WaitForSingleObject(thread,100); - ok(ret==WAIT_OBJECT_0, "threadFunc2 did not exit during 100 ms\n"); - ret = GetExitCodeThread(thread,&exitCode); - ok(ret==exitCode || ret==1, - "GetExitCodeThread returned %d (expected 1 or %d)\n", ret, exitCode); - ok(exitCode==99, "threadFunc2 exited with code %d (expected 99)\n", exitCode); - ok(CloseHandle(thread)!=0,"Error closing thread handle\n"); -} - -#ifdef __i386__ - -static int test_value = 0; -static HANDLE event; - -static void WINAPI set_test_val( int val ) -{ - test_value += val; -} - -static DWORD WINAPI threadFunc6(LPVOID p) -{ - SetEvent( event ); - Sleep( 1000 ); - test_value *= (int)p; - return 0; -} - -static void test_SetThreadContext(void) -{ - CONTEXT ctx; - int *stack; - HANDLE thread; - DWORD threadid; - DWORD prevcount; - BOOL ret; - - SetLastError(0xdeadbeef); - event = CreateEvent( NULL, TRUE, FALSE, NULL ); - thread = CreateThread( NULL, 0, threadFunc6, (void *)2, 0, &threadid ); - ok( thread != NULL, "CreateThread failed : (%d)\n", GetLastError() ); - if (!thread) - { - trace("Thread creation failed, skipping rest of test\n"); - return; - } - WaitForSingleObject( event, INFINITE ); - SuspendThread( thread ); - CloseHandle( event ); - - ctx.ContextFlags = CONTEXT_FULL; - SetLastError(0xdeadbeef); - ret = GetThreadContext( thread, &ctx ); - ok( ret, "GetThreadContext failed : (%u)\n", GetLastError() ); - - if (ret) - { - /* simulate a call to set_test_val(10) */ - stack = (int *)ctx.Esp; - stack[-1] = 10; - stack[-2] = ctx.Eip; - ctx.Esp -= 2 * sizeof(int *); - ctx.Eip = (DWORD)set_test_val; - SetLastError(0xdeadbeef); - ok( SetThreadContext( thread, &ctx ), "SetThreadContext failed : (%d)\n", GetLastError() ); - } - - SetLastError(0xdeadbeef); - prevcount = ResumeThread( thread ); - ok ( prevcount == 1, "Previous suspend count (%d) instead of 1, last error : (%d)\n", - prevcount, GetLastError() ); - - WaitForSingleObject( thread, INFINITE ); - ok( test_value == 20, "test_value %d instead of 20\n", test_value ); -} - -#endif /* __i386__ */ - -static HANDLE finish_event; -static LONG times_executed; - -static DWORD CALLBACK work_function(void *p) -{ - LONG executed = InterlockedIncrement(×_executed); - - if (executed == 100) - SetEvent(finish_event); - return 0; -} - -static void test_QueueUserWorkItem(void) -{ - int i; - DWORD wait_result; - DWORD before, after; - - /* QueueUserWorkItem not present on win9x */ - if (!pQueueUserWorkItem) return; - - finish_event = CreateEvent(NULL, TRUE, FALSE, NULL); - - before = GetTickCount(); - - for (i = 0; i < 100; i++) - { - BOOL ret = pQueueUserWorkItem(work_function, (void *)i, WT_EXECUTEDEFAULT); - ok(ret, "QueueUserWorkItem failed with error %d\n", GetLastError()); - } - - wait_result = WaitForSingleObject(finish_event, 10000); - - after = GetTickCount(); - trace("100 QueueUserWorkItem calls took %dms\n", after - before); - ok(wait_result == WAIT_OBJECT_0, "wait failed with error 0x%x\n", wait_result); - - ok(times_executed == 100, "didn't execute all of the work items\n"); -} - -static void CALLBACK signaled_function(PVOID p, BOOLEAN TimerOrWaitFired) -{ - HANDLE event = p; - SetEvent(event); - ok(!TimerOrWaitFired, "wait shouldn't have timed out\n"); -} - -static void CALLBACK timeout_function(PVOID p, BOOLEAN TimerOrWaitFired) -{ - HANDLE event = p; - SetEvent(event); - ok(TimerOrWaitFired, "wait should have timed out\n"); -} - -static void test_RegisterWaitForSingleObject(void) -{ - BOOL ret; - HANDLE wait_handle; - HANDLE handle; - HANDLE complete_event; - - if (!pRegisterWaitForSingleObject || !pUnregisterWait) - { - skip("RegisterWaitForSingleObject or UnregisterWait not implemented\n"); - return; - } - - /* test signaled case */ - - handle = CreateEvent(NULL, TRUE, TRUE, NULL); - complete_event = CreateEvent(NULL, FALSE, FALSE, NULL); - - ret = pRegisterWaitForSingleObject(&wait_handle, handle, signaled_function, complete_event, INFINITE, WT_EXECUTEONLYONCE); - ok(ret, "RegisterWaitForSingleObject failed with error %d\n", GetLastError()); - - WaitForSingleObject(complete_event, INFINITE); - /* give worker thread chance to complete */ - Sleep(100); - - ret = pUnregisterWait(wait_handle); - ok(ret, "UnregisterWait failed with error %d\n", GetLastError()); - - /* test cancel case */ - - ResetEvent(handle); - - ret = pRegisterWaitForSingleObject(&wait_handle, handle, signaled_function, complete_event, INFINITE, WT_EXECUTEONLYONCE); - ok(ret, "RegisterWaitForSingleObject failed with error %d\n", GetLastError()); - - ret = pUnregisterWait(wait_handle); - ok(ret, "UnregisterWait failed with error %d\n", GetLastError()); - - /* test timeout case */ - - ret = pRegisterWaitForSingleObject(&wait_handle, handle, timeout_function, complete_event, 0, WT_EXECUTEONLYONCE); - ok(ret, "RegisterWaitForSingleObject failed with error %d\n", GetLastError()); - - WaitForSingleObject(complete_event, INFINITE); - /* give worker thread chance to complete */ - Sleep(100); - - ret = pUnregisterWait(wait_handle); - ok(ret, "UnregisterWait failed with error %d\n", GetLastError()); -} - -START_TEST(thread) -{ - HINSTANCE lib; - int argc; - char **argv; - argc = winetest_get_mainargs( &argv ); -/* Neither Cygwin nor mingW export OpenThread, so do a dynamic check - so that the compile passes -*/ - lib=GetModuleHandleA("kernel32.dll"); - ok(lib!=NULL,"Couldn't get a handle for kernel32.dll\n"); - pGetThreadPriorityBoost=(GetThreadPriorityBoost_t)GetProcAddress(lib,"GetThreadPriorityBoost"); - pOpenThread=(OpenThread_t)GetProcAddress(lib,"OpenThread"); - pQueueUserWorkItem=(QueueUserWorkItem_t)GetProcAddress(lib,"QueueUserWorkItem"); - pSetThreadIdealProcessor=(SetThreadIdealProcessor_t)GetProcAddress(lib,"SetThreadIdealProcessor"); - pSetThreadPriorityBoost=(SetThreadPriorityBoost_t)GetProcAddress(lib,"SetThreadPriorityBoost"); - pRegisterWaitForSingleObject=(RegisterWaitForSingleObject_t)GetProcAddress(lib,"RegisterWaitForSingleObject"); - pUnregisterWait=(UnregisterWait_t)GetProcAddress(lib,"UnregisterWait"); - - if (argc >= 3) - { - if (!strcmp(argv[2], "sleep")) - { - HANDLE hAddrEvents[2]; - create_function_addr_events(hAddrEvents); - SetEvent(hAddrEvents[0]); - SetEvent(hAddrEvents[1]); - Sleep(5000); /* spawned process runs for at most 5 seconds */ - return; - } - while (1) - { - HANDLE hThread; - hThread = CreateThread(NULL, 0, threadFunc2, NULL, 0, NULL); - ok(hThread != NULL, "CreateThread failed, error %u\n", - GetLastError()); - ok(WaitForSingleObject(hThread, 200) == WAIT_OBJECT_0, - "Thread did not exit in time\n"); - if (hThread == NULL) break; - CloseHandle(hThread); - } - return; - } - - test_CreateRemoteThread(); - test_CreateThread_basic(); - test_CreateThread_suspended(); - test_SuspendThread(); - test_TerminateThread(); - test_CreateThread_stack(); - test_thread_priority(); - test_GetThreadTimes(); - test_thread_processor(); - test_GetThreadExitCode(); -#ifdef __i386__ - test_SetThreadContext(); -#endif - test_QueueUserWorkItem(); - test_RegisterWaitForSingleObject(); -} diff --git a/rostests/winetests/kernel32/time.c b/rostests/winetests/kernel32/time.c deleted file mode 100755 index 21a8232b917..00000000000 --- a/rostests/winetests/kernel32/time.c +++ /dev/null @@ -1,614 +0,0 @@ -/* - * Unit test suite for time functions - * - * Copyright 2004 Uwe Bonnes - * Copyright 2007 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/test.h" -#include "winbase.h" -#include "winnls.h" - -static BOOL (WINAPI *pTzSpecificLocalTimeToSystemTime)(LPTIME_ZONE_INFORMATION, LPSYSTEMTIME, LPSYSTEMTIME); -static BOOL (WINAPI *pSystemTimeToTzSpecificLocalTime)(LPTIME_ZONE_INFORMATION, LPSYSTEMTIME, LPSYSTEMTIME); - -#define SECSPERMIN 60 -#define SECSPERDAY 86400 -/* 1601 to 1970 is 369 years plus 89 leap days */ -#define SECS_1601_TO_1970 ((369 * 365 + 89) * (ULONGLONG)SECSPERDAY) -#define TICKSPERSEC 10000000 -#define TICKSPERMSEC 10000 -#define TICKS_1601_TO_1970 (SECS_1601_TO_1970 * TICKSPERSEC) - - -#define NEWYEAR_1980_HI 0x01a8e79f -#define NEWYEAR_1980_LO 0xe1d58000 - -#define MAYDAY_2002_HI 0x01c1f107 -#define MAYDAY_2002_LO 0xb82b6000 - -#define ATIME_HI 0x1c2349b -#define ATIME_LOW 0x580716b0 - -#define LOCAL_ATIME_HI 0x01c23471 -#define LOCAL_ATIME_LOW 0x6f310eb0 - -#define DOS_DATE(y,m,d) ( (((y)-1980)<<9) | ((m)<<5) | (d) ) -#define DOS_TIME(h,m,s) ( ((h)<<11) | ((m)<<5) | ((s)>>1) ) - - -#define SETUP_1980(st) \ - (st).wYear = 1980; \ - (st).wMonth = 1; \ - (st).wDay = 1; \ - (st).wHour = 0; \ - (st).wMinute = 0; \ - (st).wSecond = 0; \ - (st).wMilliseconds = 0; - -#define SETUP_2002(st) \ - (st).wYear = 2002; \ - (st).wMonth = 5; \ - (st).wDay = 1; \ - (st).wHour = 12; \ - (st).wMinute = 0; \ - (st).wSecond = 0; \ - (st).wMilliseconds = 0; - -#define SETUP_ATIME(st) \ - (st).wYear = 2002; \ - (st).wMonth = 7; \ - (st).wDay = 26; \ - (st).wHour = 11; \ - (st).wMinute = 55; \ - (st).wSecond = 32; \ - (st).wMilliseconds = 123; - -#define SETUP_ZEROTIME(st) \ - (st).wYear = 1601; \ - (st).wMonth = 1; \ - (st).wDay = 1; \ - (st).wHour = 0; \ - (st).wMinute = 0; \ - (st).wSecond = 0; \ - (st).wMilliseconds = 0; - -#define SETUP_EARLY(st) \ - (st).wYear = 1600; \ - (st).wMonth = 12; \ - (st).wDay = 31; \ - (st).wHour = 23; \ - (st).wMinute = 59; \ - (st).wSecond = 59; \ - (st).wMilliseconds = 999; - - -static void test_conversions(void) -{ - FILETIME ft; - SYSTEMTIME st; - - memset(&ft,0,sizeof ft); - - SetLastError(0xdeadbeef); - SETUP_EARLY(st) - ok (!SystemTimeToFileTime(&st, &ft), "Conversion succeeded EARLY\n"); - ok (GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == 0xdeadbeef, /* win9x */ - "EARLY should be INVALID\n"); - - SETUP_ZEROTIME(st) - ok (SystemTimeToFileTime(&st, &ft), "Conversion failed ZERO_TIME\n"); - ok( (!((ft.dwHighDateTime != 0) || (ft.dwLowDateTime != 0))), - "Wrong time for ATIME: %08x %08x (correct %08x %08x)\n", - ft.dwLowDateTime, ft.dwHighDateTime, 0, 0); - - - SETUP_ATIME(st) - ok (SystemTimeToFileTime(&st,&ft), "Conversion Failed ATIME\n"); - ok( (!((ft.dwHighDateTime != ATIME_HI) || (ft.dwLowDateTime!=ATIME_LOW))), - "Wrong time for ATIME: %08x %08x (correct %08x %08x)\n", - ft.dwLowDateTime, ft.dwHighDateTime, ATIME_LOW, ATIME_HI); - - - SETUP_2002(st) - ok (SystemTimeToFileTime(&st, &ft), "Conversion failed 2002\n"); - - ok( (!((ft.dwHighDateTime != MAYDAY_2002_HI) || - (ft.dwLowDateTime!=MAYDAY_2002_LO))), - "Wrong time for 2002 %08x %08x (correct %08x %08x)\n", ft.dwLowDateTime, - ft.dwHighDateTime, MAYDAY_2002_LO, MAYDAY_2002_HI); - - - SETUP_1980(st) - ok((SystemTimeToFileTime(&st, &ft)), "Conversion failed 1980\n"); - - ok( (!((ft.dwHighDateTime!=NEWYEAR_1980_HI) || - (ft.dwLowDateTime!=NEWYEAR_1980_LO))) , - "Wrong time for 1980 %08x %08x (correct %08x %08x)\n", ft.dwLowDateTime, - ft.dwHighDateTime, NEWYEAR_1980_LO,NEWYEAR_1980_HI ); - - ok(DosDateTimeToFileTime(DOS_DATE(1980,1,1),DOS_TIME(0,0,0),&ft), - "DosDateTimeToFileTime() failed\n"); - - ok( (!((ft.dwHighDateTime!=NEWYEAR_1980_HI) || - (ft.dwLowDateTime!=NEWYEAR_1980_LO))), - "Wrong time DosDateTimeToFileTime %08x %08x (correct %08x %08x)\n", - ft.dwHighDateTime, ft.dwLowDateTime, NEWYEAR_1980_HI, NEWYEAR_1980_LO); - -} - -static void test_invalid_arg(void) -{ - FILETIME ft; - SYSTEMTIME st; - - - /* Invalid argument checks */ - - memset(&ft,0,sizeof ft); - ok( DosDateTimeToFileTime(DOS_DATE(1980,1,1),DOS_TIME(0,0,0),&ft), /* this is 1 Jan 1980 00:00:00 */ - "DosDateTimeToFileTime() failed\n"); - - ok( (ft.dwHighDateTime==NEWYEAR_1980_HI) && (ft.dwLowDateTime==NEWYEAR_1980_LO), - "filetime for 1/1/80 00:00:00 was %08x %08x\n", ft.dwHighDateTime, ft.dwLowDateTime); - - /* now check SystemTimeToFileTime */ - memset(&ft,0,sizeof ft); - - - /* try with a bad month */ - SETUP_1980(st) - st.wMonth = 0; - - ok( !SystemTimeToFileTime(&st, &ft), "bad month\n"); - - /* with a bad hour */ - SETUP_1980(st) - st.wHour = 24; - - ok( !SystemTimeToFileTime(&st, &ft), "bad hour\n"); - - /* with a bad minute */ - SETUP_1980(st) - st.wMinute = 60; - - ok( !SystemTimeToFileTime(&st, &ft), "bad minute\n"); -} - -static LONGLONG system_time_to_minutes(const SYSTEMTIME *st) -{ - BOOL ret; - FILETIME ft; - LONGLONG minutes; - - SetLastError(0xdeadbeef); - ret = SystemTimeToFileTime(st, &ft); - ok(ret, "SystemTimeToFileTime error %u\n", GetLastError()); - - minutes = ((LONGLONG)ft.dwHighDateTime << 32) + ft.dwLowDateTime; - minutes /= (LONGLONG)600000000; /* convert to minutes */ - return minutes; -} - -static LONG get_tz_bias(const TIME_ZONE_INFORMATION *tzinfo, DWORD tz_id) -{ - switch (tz_id) - { - case TIME_ZONE_ID_DAYLIGHT: - if (memcmp(&tzinfo->StandardDate, &tzinfo->DaylightDate, sizeof(tzinfo->DaylightDate)) != 0) - return tzinfo->DaylightBias; - /* fall through */ - - case TIME_ZONE_ID_STANDARD: - return tzinfo->StandardBias; - - default: - trace("unknown time zone id %d\n", tz_id); - /* fall through */ - case TIME_ZONE_ID_UNKNOWN: - return 0; - } -} - -static void test_GetTimeZoneInformation(void) -{ - char std_name[32], dlt_name[32]; - TIME_ZONE_INFORMATION tzinfo, tzinfo1; - BOOL res; - DWORD tz_id; - SYSTEMTIME st, current, utc, local; - FILETIME l_ft, s_ft; - LONGLONG l_time, s_time; - LONG diff; - - GetSystemTime(&st); - s_time = system_time_to_minutes(&st); - - SetLastError(0xdeadbeef); - res = SystemTimeToFileTime(&st, &s_ft); - ok(res, "SystemTimeToFileTime error %u\n", GetLastError()); - SetLastError(0xdeadbeef); - res = FileTimeToLocalFileTime(&s_ft, &l_ft); - ok(res, "FileTimeToLocalFileTime error %u\n", GetLastError()); - SetLastError(0xdeadbeef); - res = FileTimeToSystemTime(&l_ft, &local); - ok(res, "FileTimeToSystemTime error %u\n", GetLastError()); - l_time = system_time_to_minutes(&local); - - tz_id = GetTimeZoneInformation(&tzinfo); - ok(tz_id != TIME_ZONE_ID_INVALID, "GetTimeZoneInformation failed\n"); - - trace("tz_id %u (%s)\n", tz_id, - tz_id == TIME_ZONE_ID_DAYLIGHT ? "TIME_ZONE_ID_DAYLIGHT" : - (tz_id == TIME_ZONE_ID_STANDARD ? "TIME_ZONE_ID_STANDARD" : - (tz_id == TIME_ZONE_ID_UNKNOWN ? "TIME_ZONE_ID_UNKNOWN" : - "TIME_ZONE_ID_INVALID"))); - - WideCharToMultiByte(CP_ACP, 0, tzinfo.StandardName, -1, std_name, sizeof(std_name), NULL, NULL); - WideCharToMultiByte(CP_ACP, 0, tzinfo.DaylightName, -1, dlt_name, sizeof(dlt_name), NULL, NULL); - trace("bias %d, %s - %s\n", tzinfo.Bias, std_name, dlt_name); - trace("standard (d/m/y): %u/%02u/%04u day of week %u %u:%02u:%02u.%03u bias %d\n", - tzinfo.StandardDate.wDay, tzinfo.StandardDate.wMonth, - tzinfo.StandardDate.wYear, tzinfo.StandardDate.wDayOfWeek, - tzinfo.StandardDate.wHour, tzinfo.StandardDate.wMinute, - tzinfo.StandardDate.wSecond, tzinfo.StandardDate.wMilliseconds, - tzinfo.StandardBias); - trace("daylight (d/m/y): %u/%02u/%04u day of week %u %u:%02u:%02u.%03u bias %d\n", - tzinfo.DaylightDate.wDay, tzinfo.DaylightDate.wMonth, - tzinfo.DaylightDate.wYear, tzinfo.DaylightDate.wDayOfWeek, - tzinfo.DaylightDate.wHour, tzinfo.DaylightDate.wMinute, - tzinfo.DaylightDate.wSecond, tzinfo.DaylightDate.wMilliseconds, - tzinfo.DaylightBias); - - diff = (LONG)(s_time - l_time); - ok(diff == tzinfo.Bias + get_tz_bias(&tzinfo, tz_id), - "system/local diff %d != tz bias %d\n", - diff, tzinfo.Bias + get_tz_bias(&tzinfo, tz_id)); - - ok(SetEnvironmentVariableA("TZ","GMT0") != 0, - "SetEnvironmentVariableA failed\n"); - res = GetTimeZoneInformation(&tzinfo1); - ok(res != TIME_ZONE_ID_INVALID, "GetTimeZoneInformation failed\n"); - - ok(((tzinfo.Bias == tzinfo1.Bias) && - (tzinfo.StandardBias == tzinfo1.StandardBias) && - (tzinfo.DaylightBias == tzinfo1.DaylightBias)), - "Bias influenced by TZ variable\n"); - ok(SetEnvironmentVariableA("TZ",NULL) != 0, - "SetEnvironmentVariableA failed\n"); - - if (!pSystemTimeToTzSpecificLocalTime) - { - skip("SystemTimeToTzSpecificLocalTime not present\n"); - return; - } - - diff = get_tz_bias(&tzinfo, tz_id); - - utc = st; - SetLastError(0xdeadbeef); - res = pSystemTimeToTzSpecificLocalTime(&tzinfo, &utc, ¤t); - if (!res && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("SystemTimeToTzSpecificLocalTime is not implemented\n"); - return; - } - - ok(res, "SystemTimeToTzSpecificLocalTime error %u\n", GetLastError()); - s_time = system_time_to_minutes(¤t); - - tzinfo.StandardBias -= 123; - tzinfo.DaylightBias += 456; - - res = pSystemTimeToTzSpecificLocalTime(&tzinfo, &utc, &local); - ok(res, "SystemTimeToTzSpecificLocalTime error %u\n", GetLastError()); - l_time = system_time_to_minutes(&local); - ok(l_time - s_time == diff - get_tz_bias(&tzinfo, tz_id), "got %d, expected %d\n", - (LONG)(l_time - s_time), diff - get_tz_bias(&tzinfo, tz_id)); - - /* pretend that there is no transition dates */ - tzinfo.DaylightDate.wDay = 0; - tzinfo.DaylightDate.wMonth = 0; - tzinfo.DaylightDate.wYear = 0; - tzinfo.StandardDate.wDay = 0; - tzinfo.StandardDate.wMonth = 0; - tzinfo.StandardDate.wYear = 0; - - res = pSystemTimeToTzSpecificLocalTime(&tzinfo, &utc, &local); - ok(res, "SystemTimeToTzSpecificLocalTime error %u\n", GetLastError()); - l_time = system_time_to_minutes(&local); - ok(l_time - s_time == diff, "got %d, expected %d\n", - (LONG)(l_time - s_time), diff); -} - -static void test_FileTimeToSystemTime(void) -{ - FILETIME ft; - SYSTEMTIME st; - ULONGLONG time = (ULONGLONG)TICKSPERSEC + TICKS_1601_TO_1970; - BOOL ret; - - ft.dwHighDateTime = 0; - ft.dwLowDateTime = 0; - ret = FileTimeToSystemTime(&ft, &st); - ok( ret, - "FileTimeToSystemTime() failed with Error %d\n",GetLastError()); - ok(((st.wYear == 1601) && (st.wMonth == 1) && (st.wDay == 1) && - (st.wHour == 0) && (st.wMinute == 0) && (st.wSecond == 0) && - (st.wMilliseconds == 0)), - "Got Year %4d Month %2d Day %2d\n", st.wYear, st.wMonth, st.wDay); - - ft.dwHighDateTime = (UINT)(time >> 32); - ft.dwLowDateTime = (UINT)time; - ret = FileTimeToSystemTime(&ft, &st); - ok( ret, - "FileTimeToSystemTime() failed with Error %d\n",GetLastError()); - ok(((st.wYear == 1970) && (st.wMonth == 1) && (st.wDay == 1) && - (st.wHour == 0) && (st.wMinute == 0) && (st.wSecond == 1) && - (st.wMilliseconds == 0)), - "Got Year %4d Month %2d Day %2d Hour %2d Min %2d Sec %2d mSec %3d\n", - st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, - st.wMilliseconds); -} - -static void test_FileTimeToLocalFileTime(void) -{ - FILETIME ft, lft; - SYSTEMTIME st; - TIME_ZONE_INFORMATION tzinfo; - DWORD res = GetTimeZoneInformation(&tzinfo); - ULONGLONG time = (ULONGLONG)TICKSPERSEC + TICKS_1601_TO_1970 + - (LONGLONG)(tzinfo.Bias + - ( res == TIME_ZONE_ID_STANDARD ? tzinfo.StandardBias : - ( res == TIME_ZONE_ID_DAYLIGHT ? tzinfo.DaylightBias : 0 ))) * - SECSPERMIN *TICKSPERSEC; - BOOL ret; - - ok( res != TIME_ZONE_ID_INVALID , "GetTimeZoneInformation failed\n"); - ft.dwHighDateTime = (UINT)(time >> 32); - ft.dwLowDateTime = (UINT)time; - ret = FileTimeToLocalFileTime(&ft, &lft); - ok( ret, - "FileTimeToLocalFileTime() failed with Error %d\n",GetLastError()); - FileTimeToSystemTime(&lft, &st); - ok(((st.wYear == 1970) && (st.wMonth == 1) && (st.wDay == 1) && - (st.wHour == 0) && (st.wMinute == 0) && (st.wSecond == 1) && - (st.wMilliseconds == 0)), - "Got Year %4d Month %2d Day %2d Hour %2d Min %2d Sec %2d mSec %3d\n", - st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, - st.wMilliseconds); - - ok(SetEnvironmentVariableA("TZ","GMT") != 0, - "SetEnvironmentVariableA failed\n"); - ok(res != TIME_ZONE_ID_INVALID, "GetTimeZoneInformation failed\n"); - ret = FileTimeToLocalFileTime(&ft, &lft); - ok( ret, - "FileTimeToLocalFileTime() failed with Error %d\n",GetLastError()); - FileTimeToSystemTime(&lft, &st); - ok(((st.wYear == 1970) && (st.wMonth == 1) && (st.wDay == 1) && - (st.wHour == 0) && (st.wMinute == 0) && (st.wSecond == 1) && - (st.wMilliseconds == 0)), - "Got Year %4d Month %2d Day %2d Hour %2d Min %2d Sec %2d mSec %3d\n", - st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, - st.wMilliseconds); - ok(SetEnvironmentVariableA("TZ",NULL) != 0, - "SetEnvironmentVariableA failed\n"); -} - -typedef struct { - int nr; /* test case number for easier lookup */ - TIME_ZONE_INFORMATION *ptz; /* ptr to timezone */ - SYSTEMTIME slt; /* system/local time to convert */ - WORD ehour; /* expected hour */ -} TZLT2ST_case; - -static void test_TzSpecificLocalTimeToSystemTime(void) -{ - TIME_ZONE_INFORMATION tzE, tzW, tzS; - SYSTEMTIME result; - int i, j, year; - - if (!pTzSpecificLocalTimeToSystemTime || !pSystemTimeToTzSpecificLocalTime) - { - skip("TzSpecificLocalTimeToSystemTime or SystemTimeToTzSpecificLocalTime not present\n"); - return; - } - - ZeroMemory( &tzE, sizeof(tzE)); - ZeroMemory( &tzW, sizeof(tzW)); - ZeroMemory( &tzS, sizeof(tzS)); - /* timezone Eastern hemisphere */ - tzE.Bias=-600; - tzE.StandardBias=0; - tzE.DaylightBias=-60; - tzE.StandardDate.wMonth=10; - tzE.StandardDate.wDayOfWeek=0; /*sunday */ - tzE.StandardDate.wDay=5; /* last (sunday) of the month */ - tzE.StandardDate.wHour=3; - tzE.DaylightDate.wMonth=3; - tzE.DaylightDate.wDay=5; - tzE.DaylightDate.wHour=2; - /* timezone Western hemisphere */ - tzW.Bias=240; - tzW.StandardBias=0; - tzW.DaylightBias=-60; - tzW.StandardDate.wMonth=10; - tzW.StandardDate.wDayOfWeek=0; /*sunday */ - tzW.StandardDate.wDay=4; /* 4th (sunday) of the month */ - tzW.StandardDate.wHour=2; - tzW.DaylightDate.wMonth=4; - tzW.DaylightDate.wDay=1; - tzW.DaylightDate.wHour=2; - /* timezone Eastern hemisphere */ - tzS.Bias=240; - tzS.StandardBias=0; - tzS.DaylightBias=-60; - tzS.StandardDate.wMonth=4; - tzS.StandardDate.wDayOfWeek=0; /*sunday */ - tzS.StandardDate.wDay=1; /* 1st (sunday) of the month */ - tzS.StandardDate.wHour=2; - tzS.DaylightDate.wMonth=10; - tzS.DaylightDate.wDay=4; - tzS.DaylightDate.wHour=2; - /*tests*/ - /* TzSpecificLocalTimeToSystemTime */ - { TZLT2ST_case cases[] = { - /* standard->daylight transition */ - { 1, &tzE, {2004,3,-1,28,1,0,0,0}, 15 }, - { 2, &tzE, {2004,3,-1,28,1,59,59,999}, 15}, - { 3, &tzE, {2004,3,-1,28,2,0,0,0}, 15}, - /* daylight->standard transition */ - { 4, &tzE, {2004,10,-1,31,2,0,0,0} , 15 }, - { 5, &tzE, {2004,10,-1,31,2,59,59,999}, 15 }, - { 6, &tzE, {2004,10,-1,31,3,0,0,0}, 17 }, - /* West and with fixed weekday of the month */ - { 7, &tzW, {2004,4,-1,4,1,0,0,0}, 5}, - { 8, &tzW, {2004,4,-1,4,1,59,59,999}, 5}, - { 9, &tzW, {2004,4,-1,4,2,0,0,0}, 5}, - { 10, &tzW, {2004,10,-1,24,1,0,0,0}, 4}, - { 11, &tzW, {2004,10,-1,24,1,59,59,999}, 4}, - { 12, &tzW, {2004,10,-1,24,2,0,0,0 }, 6}, - /* and now south */ - { 13, &tzS, {2004,4,-1,4,1,0,0,0}, 4}, - { 14, &tzS, {2004,4,-1,4,1,59,59,999}, 4}, - { 15, &tzS, {2004,4,-1,4,2,0,0,0}, 6}, - { 16, &tzS, {2004,10,-1,24,1,0,0,0}, 5}, - { 17, &tzS, {2004,10,-1,24,1,59,59,999}, 5}, - { 18, &tzS, {2004,10,-1,24,2,0,0,0}, 5}, - {0} - }; - /* days of transitions to put into the cases array */ - int yeardays[][6]= - { - {28,31,4,24,4,24} /* 1999 */ - , {26,29,2,22,2,22} /* 2000 */ - , {25,28,1,28,1,28} /* 2001 */ - , {31,27,7,27,7,27} /* 2002 */ - , {30,26,6,26,6,26} /* 2003 */ - , {28,31,4,24,4,24} /* 2004 */ - , {27,30,3,23,3,23} /* 2005 */ - , {26,29,2,22,2,22} /* 2006 */ - , {25,28,1,28,1,28} /* 2007 */ - , {30,26,6,26,6,26} /* 2008 */ - , {29,25,5,25,5,25} /* 2009 */ - , {28,31,4,24,4,24} /* 2010 */ - , {27,30,3,23,3,23} /* 2011 */ - , {25,28,1,28,1,28} /* 2012 */ - , {31,27,7,27,7,27} /* 2013 */ - , {30,26,6,26,6,26} /* 2014 */ - , {29,25,5,25,5,25} /* 2015 */ - , {27,30,3,23,3,23} /* 2016 */ - , {26,29,2,22,2,22} /* 2017 */ - , {25,28,1,28,1,28} /* 2018 */ - , {31,27,7,27,7,27} /* 2019 */ - ,{0} - }; - for( j=0 , year = 1999; yeardays[j][0] ; j++, year++) { - for (i=0; cases[i].nr; i++) { - if(i) cases[i].nr += 18; - cases[i].slt.wYear = year; - cases[i].slt.wDay = yeardays[j][i/3]; - pTzSpecificLocalTimeToSystemTime( cases[i].ptz, &(cases[i].slt), &result); - ok( result.wHour == cases[i].ehour, - "Test TzSpecificLocalTimeToSystemTime #%d. Got %4d-%02d-%02d %02d:%02d. Expect hour = %02d\n", - cases[i].nr, result.wYear, result.wMonth, result.wDay, - result.wHour, result.wMinute, cases[i].ehour); - } - } - } - /* SystemTimeToTzSpecificLocalTime */ - { TZLT2ST_case cases[] = { - /* standard->daylight transition */ - { 1, &tzE, {2004,3,-1,27,15,0,0,0}, 1 }, - { 2, &tzE, {2004,3,-1,27,15,59,59,999}, 1}, - { 3, &tzE, {2004,3,-1,27,16,0,0,0}, 3}, - /* daylight->standard transition */ - { 4, &tzE, {2004,10,-1,30,15,0,0,0}, 2 }, - { 5, &tzE, {2004,10,-1,30,15,59,59,999}, 2 }, - { 6, &tzE, {2004,10,-1,30,16,0,0,0}, 2 }, - /* West and with fixed weekday of the month */ - { 7, &tzW, {2004,4,-1,4,5,0,0,0}, 1}, - { 8, &tzW, {2004,4,-1,4,5,59,59,999}, 1}, - { 9, &tzW, {2004,4,-1,4,6,0,0,0}, 3}, - { 10, &tzW, {2004,10,-1,24,4,0,0,0}, 1}, - { 11, &tzW, {2004,10,-1,24,4,59,59,999}, 1}, - { 12, &tzW, {2004,10,-1,24,5,0,0,0 }, 1}, - /* and now south */ - { 13, &tzS, {2004,4,-1,4,4,0,0,0}, 1}, - { 14, &tzS, {2004,4,-1,4,4,59,59,999}, 1}, - { 15, &tzS, {2004,4,-1,4,5,0,0,0}, 1}, - { 16, &tzS, {2004,10,-1,24,5,0,0,0}, 1}, - { 17, &tzS, {2004,10,-1,24,5,59,59,999}, 1}, - { 18, &tzS, {2004,10,-1,24,6,0,0,0}, 3}, - - {0} - }; - /* days of transitions to put into the cases array */ - int yeardays[][6]= - { - {27,30,4,24,4,24} /* 1999 */ - , {25,28,2,22,2,22} /* 2000 */ - , {24,27,1,28,1,28} /* 2001 */ - , {30,26,7,27,7,27} /* 2002 */ - , {29,25,6,26,6,26} /* 2003 */ - , {27,30,4,24,4,24} /* 2004 */ - , {26,29,3,23,3,23} /* 2005 */ - , {25,28,2,22,2,22} /* 2006 */ - , {24,27,1,28,1,28} /* 2007 */ - , {29,25,6,26,6,26} /* 2008 */ - , {28,24,5,25,5,25} /* 2009 */ - , {27,30,4,24,4,24} /* 2010 */ - , {26,29,3,23,3,23} /* 2011 */ - , {24,27,1,28,1,28} /* 2012 */ - , {30,26,7,27,7,27} /* 2013 */ - , {29,25,6,26,6,26} /* 2014 */ - , {28,24,5,25,5,25} /* 2015 */ - , {26,29,3,23,3,23} /* 2016 */ - , {25,28,2,22,2,22} /* 2017 */ - , {24,27,1,28,1,28} /* 2018 */ - , {30,26,7,27,7,27} /* 2019 */ - }; - for( j=0 , year = 1999; yeardays[j][0] ; j++, year++) { - for (i=0; cases[i].nr; i++) { - if(i) cases[i].nr += 18; - cases[i].slt.wYear = year; - cases[i].slt.wDay = yeardays[j][i/3]; - pSystemTimeToTzSpecificLocalTime( cases[i].ptz, &(cases[i].slt), &result); - ok( result.wHour == cases[i].ehour, - "Test SystemTimeToTzSpecificLocalTime #%d. Got %4d-%02d-%02d %02d:%02d. Expect hour = %02d\n", - cases[i].nr, result.wYear, result.wMonth, result.wDay, - result.wHour, result.wMinute, cases[i].ehour); - } - } - - } -} - -START_TEST(time) -{ - HMODULE hKernel = GetModuleHandle("kernel32"); - pTzSpecificLocalTimeToSystemTime = (void *)GetProcAddress(hKernel, "TzSpecificLocalTimeToSystemTime"); - pSystemTimeToTzSpecificLocalTime = (void *)GetProcAddress( hKernel, "SystemTimeToTzSpecificLocalTime"); - - test_conversions(); - test_invalid_arg(); - test_GetTimeZoneInformation(); - test_FileTimeToSystemTime(); - test_FileTimeToLocalFileTime(); - test_TzSpecificLocalTimeToSystemTime(); -} diff --git a/rostests/winetests/kernel32/timer.c b/rostests/winetests/kernel32/timer.c deleted file mode 100755 index 34418908705..00000000000 --- a/rostests/winetests/kernel32/timer.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Unit test suite for time functions - * - * 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 - */ - -#define _WIN32_WINNT 0x0501 - -#include "wine/test.h" -#include "winbase.h" - -typedef HANDLE (WINAPI *fnCreateWaitableTimerA)( SECURITY_ATTRIBUTES*, BOOL, LPSTR ); -typedef BOOL (WINAPI *fnSetWaitableTimer)(HANDLE, LARGE_INTEGER*, LONG, PTIMERAPCROUTINE, LPVOID, BOOL); - - -static void test_timer(void) -{ - HMODULE hker = GetModuleHandle("kernel32"); - fnCreateWaitableTimerA pCreateWaitableTimerA; - fnSetWaitableTimer pSetWaitableTimer; - HANDLE handle; - BOOL r; - LARGE_INTEGER due; - - pCreateWaitableTimerA = (fnCreateWaitableTimerA) GetProcAddress( hker, "CreateWaitableTimerA"); - if( !pCreateWaitableTimerA ) - return; - - pSetWaitableTimer = (fnSetWaitableTimer) GetProcAddress( hker, "SetWaitableTimer"); - if( !pSetWaitableTimer ) - return; - - /* try once with a positive number */ - handle = pCreateWaitableTimerA( NULL, 0, NULL ); - ok( handle != NULL, "failed to create waitable timer with no name\n" ); - - due.QuadPart = 10000; - r = pSetWaitableTimer( handle, &due, 0x1f4, NULL, NULL, FALSE ); - ok( r, "failed to set timer\n"); - - CloseHandle( handle ); - - /* try once with a negative number */ - handle = pCreateWaitableTimerA( NULL, 0, NULL ); - ok( handle != NULL, "failed to create waitable timer with no name\n" ); - - due.QuadPart = -10000; - r = pSetWaitableTimer( handle, &due, 0x1f4, NULL, NULL, FALSE ); - ok( r, "failed to set timer\n"); - - CloseHandle( handle ); -} - -START_TEST(timer) -{ - test_timer(); -} diff --git a/rostests/winetests/kernel32/toolhelp.c b/rostests/winetests/kernel32/toolhelp.c deleted file mode 100644 index 48b6a6b790f..00000000000 --- a/rostests/winetests/kernel32/toolhelp.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Toolhelp - * - * Copyright 2005 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 "windef.h" -#include "winbase.h" -#include "tlhelp32.h" -#include "wine/test.h" -#include "winuser.h" - -static char selfname[MAX_PATH]; - -/* Some functions are only in later versions of kernel32.dll */ -static HANDLE (WINAPI *pCreateToolhelp32Snapshot)(DWORD, DWORD); -static BOOL (WINAPI *pModule32First)(HANDLE, LPMODULEENTRY32); -static BOOL (WINAPI *pModule32Next)(HANDLE, LPMODULEENTRY32); -static BOOL (WINAPI *pProcess32First)(HANDLE, LPPROCESSENTRY32); -static BOOL (WINAPI *pProcess32Next)(HANDLE, LPPROCESSENTRY32); -static BOOL (WINAPI *pThread32First)(HANDLE, LPTHREADENTRY32); -static BOOL (WINAPI *pThread32Next)(HANDLE, LPTHREADENTRY32); - -/* 1 minute should be more than enough */ -#define WAIT_TIME (60 * 1000) - -static DWORD WINAPI sub_thread(void* pmt) -{ - DWORD w = WaitForSingleObject((HANDLE)pmt, WAIT_TIME); - return w; -} - -/****************************************************************** - * init - * - * generates basic information like: - * selfname: the way to reinvoke ourselves - * returns: - * -1 on error - * 0 if parent - * doesn't return if child - */ -static int init(void) -{ - int argc; - char** argv; - HANDLE ev1, ev2, ev3, hThread; - DWORD w, tid; - - argc = winetest_get_mainargs( &argv ); - strcpy(selfname, argv[0]); - - switch (argc) - { - case 2: /* the test program */ - return 0; - case 4: /* the sub-process */ - ev1 = (HANDLE)atoi(argv[2]); - ev2 = (HANDLE)atoi(argv[3]); - ev3 = CreateEvent(NULL, FALSE, FALSE, NULL); - - if (ev3 == NULL) ExitProcess(WAIT_ABANDONED); - hThread = CreateThread(NULL, 0, sub_thread, ev3, 0, &tid); - if (hThread == NULL) ExitProcess(WAIT_ABANDONED); - if (!LoadLibraryA("shell32.dll")) ExitProcess(WAIT_ABANDONED); - - /* signal init of sub-process is done */ - SetEvent(ev1); - /* wait for parent to have done all its queries */ - w = WaitForSingleObject(ev2, WAIT_TIME); - if (w != WAIT_OBJECT_0) ExitProcess(w); - /* signal sub-thread to terminate */ - SetEvent(ev3); - w = WaitForSingleObject(hThread, WAIT_TIME); - if (w != WAIT_OBJECT_0) ExitProcess(w); - GetExitCodeThread(hThread, &w); - ExitProcess(w); - default: - return -1; - } -} - -static void test_process(DWORD curr_pid, DWORD sub_pcs_pid) -{ - HANDLE hSnapshot; - PROCESSENTRY32 pe; - THREADENTRY32 te; - MODULEENTRY32 me; - unsigned found = 0; - int num = 0; - int childpos = -1; - - hSnapshot = pCreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); - ok(hSnapshot != NULL, "Cannot create snapshot\n"); - - /* check that this current process is enumerated */ - pe.dwSize = sizeof(pe); - if (pProcess32First( hSnapshot, &pe )) - { - do - { - if (pe.th32ProcessID == curr_pid) found++; - if (pe.th32ProcessID == sub_pcs_pid) { childpos = num; found++; } - trace("PID=%x %s\n", pe.th32ProcessID, pe.szExeFile); - num++; - } while (pProcess32Next( hSnapshot, &pe )); - } - ok(found == 2, "couldn't find self and/or sub-process in process list\n"); - - /* check that first really resets the enumeration */ - found = 0; - if (pProcess32First( hSnapshot, &pe )) - { - do - { - if (pe.th32ProcessID == curr_pid) found++; - if (pe.th32ProcessID == sub_pcs_pid) found++; - trace("PID=%x %s\n", pe.th32ProcessID, pe.szExeFile); - num--; - } while (pProcess32Next( hSnapshot, &pe )); - } - ok(found == 2, "couldn't find self and/or sub-process in process list\n"); - ok(!num, "mismatch in counting\n"); - - /* one broken program does Process32First() and does not expect anything - * interesting to be there, especially not the just forked off child */ - ok (childpos !=0, "child is not expected to be at position 0.\n"); - - te.dwSize = sizeof(te); - ok(!pThread32First( hSnapshot, &te ), "shouldn't return a thread\n"); - - me.dwSize = sizeof(me); - ok(!pModule32First( hSnapshot, &me ), "shouldn't return a module\n"); - - CloseHandle(hSnapshot); - ok(!pProcess32First( hSnapshot, &pe ), "shouldn't return a process\n"); -} - -static void test_thread(DWORD curr_pid, DWORD sub_pcs_pid) -{ - HANDLE hSnapshot; - PROCESSENTRY32 pe; - THREADENTRY32 te; - MODULEENTRY32 me; - int num = 0; - unsigned curr_found = 0; - unsigned sub_found = 0; - - hSnapshot = pCreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); - ok(hSnapshot != NULL, "Cannot create snapshot\n"); - - /* check that this current process is enumerated */ - te.dwSize = sizeof(te); - if (pThread32First( hSnapshot, &te )) - { - do - { - if (te.th32OwnerProcessID == curr_pid) curr_found++; - if (te.th32OwnerProcessID == sub_pcs_pid) sub_found++; - trace("PID=%x TID=%x %d\n", te.th32OwnerProcessID, te.th32ThreadID, te.tpBasePri); - num++; - } while (pThread32Next( hSnapshot, &te )); - } - ok(curr_found == 1, "couldn't find self in thread list\n"); - ok(sub_found == 2, "couldn't find sub-process thread's in thread list\n"); - - /* check that first really resets enumeration */ - curr_found = 0; - sub_found = 0; - if (pThread32First( hSnapshot, &te )) - { - do - { - if (te.th32OwnerProcessID == curr_pid) curr_found++; - if (te.th32OwnerProcessID == sub_pcs_pid) sub_found++; - trace("PID=%x TID=%x %d\n", te.th32OwnerProcessID, te.th32ThreadID, te.tpBasePri); - num--; - } while (pThread32Next( hSnapshot, &te )); - } - ok(curr_found == 1, "couldn't find self in thread list\n"); - ok(sub_found == 2, "couldn't find sub-process thread's in thread list\n"); - - pe.dwSize = sizeof(pe); - ok(!pProcess32First( hSnapshot, &pe ), "shouldn't return a process\n"); - - me.dwSize = sizeof(me); - ok(!pModule32First( hSnapshot, &me ), "shouldn't return a module\n"); - - CloseHandle(hSnapshot); - ok(!pThread32First( hSnapshot, &te ), "shouldn't return a thread\n"); -} - -static const char* curr_expected_modules[] = -{ - "kernel32.dll", - "kernel32_test.exe" - /* FIXME: could test for ntdll on NT and Wine */ -}; -static const char* sub_expected_modules[] = -{ - "kernel32.dll", - "kernel32_test.exe", - "shell32.dll" - /* FIXME: could test for ntdll on NT and Wine */ -}; -#define NUM_OF(x) (sizeof(x) / sizeof(x[0])) - -static void test_module(DWORD pid, const char* expected[], unsigned num_expected) -{ - HANDLE hSnapshot; - PROCESSENTRY32 pe; - THREADENTRY32 te; - MODULEENTRY32 me; - unsigned found[32]; - unsigned i; - int num = 0; - - ok(NUM_OF(found) >= num_expected, "Internal: bump found[] size\n"); - - hSnapshot = pCreateToolhelp32Snapshot( TH32CS_SNAPMODULE, pid ); - ok(hSnapshot != NULL, "Cannot create snapshot\n"); - - for (i = 0; i < num_expected; i++) found[i] = 0; - me.dwSize = sizeof(me); - if (pModule32First( hSnapshot, &me )) - { - do - { - trace("PID=%x base=%p size=%x %s %s\n", - me.th32ProcessID, me.modBaseAddr, me.modBaseSize, me.szExePath, me.szModule); - ok(me.th32ProcessID == pid, "wrong returned process id\n"); - for (i = 0; i < num_expected; i++) - if (!lstrcmpi(expected[i], me.szModule)) found[i]++; - num++; - } while (pModule32Next( hSnapshot, &me )); - } - for (i = 0; i < num_expected; i++) - ok(found[i] == 1, "Module %s is %s\n", - expected[i], found[i] ? "listed more than once" : "not listed"); - - /* check that first really resets the enumeration */ - for (i = 0; i < num_expected; i++) found[i] = 0; - me.dwSize = sizeof(me); - if (pModule32First( hSnapshot, &me )) - { - do - { - trace("PID=%x base=%p size=%x %s %s\n", - me.th32ProcessID, me.modBaseAddr, me.modBaseSize, me.szExePath, me.szModule); - for (i = 0; i < num_expected; i++) - if (!lstrcmpi(expected[i], me.szModule)) found[i]++; - num--; - } while (pModule32Next( hSnapshot, &me )); - } - for (i = 0; i < num_expected; i++) - ok(found[i] == 1, "Module %s is %s\n", - expected[i], found[i] ? "listed more than once" : "not listed"); - ok(!num, "mismatch in counting\n"); - - pe.dwSize = sizeof(pe); - ok(!pProcess32First( hSnapshot, &pe ), "shouldn't return a process\n"); - - me.dwSize = sizeof(me); - ok(!pThread32First( hSnapshot, &te ), "shouldn't return a thread\n"); - - CloseHandle(hSnapshot); - ok(!pModule32First( hSnapshot, &me ), "shouldn't return a module\n"); -} - -START_TEST(toolhelp) -{ - DWORD pid = GetCurrentProcessId(); - int r; - char buffer[MAX_PATH]; - SECURITY_ATTRIBUTES sa; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - HANDLE ev1, ev2; - DWORD w; - HANDLE hkernel32 = GetModuleHandleA("kernel32"); - - pCreateToolhelp32Snapshot = (VOID *) GetProcAddress(hkernel32, "CreateToolhelp32Snapshot"); - pModule32First = (VOID *) GetProcAddress(hkernel32, "Module32First"); - pModule32Next = (VOID *) GetProcAddress(hkernel32, "Module32Next"); - pProcess32First = (VOID *) GetProcAddress(hkernel32, "Process32First"); - pProcess32Next = (VOID *) GetProcAddress(hkernel32, "Process32Next"); - pThread32First = (VOID *) GetProcAddress(hkernel32, "Thread32First"); - pThread32Next = (VOID *) GetProcAddress(hkernel32, "Thread32Next"); - - if (!pCreateToolhelp32Snapshot || - !pModule32First || !pModule32Next || - !pProcess32First || !pProcess32Next || - !pThread32First || !pThread32Next) - { - skip("Needed functions are not available, most likely running on Windows NT\n"); - return; - } - - r = init(); - ok(r == 0, "Basic init of sub-process test\n"); - if (r != 0) return; - - sa.nLength = sizeof(sa); - sa.lpSecurityDescriptor = NULL; - sa.bInheritHandle = TRUE; - - ev1 = CreateEvent(&sa, FALSE, FALSE, NULL); - ev2 = CreateEvent(&sa, FALSE, FALSE, NULL); - ok (ev1 != NULL && ev2 != NULL, "Couldn't create events\n"); - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - sprintf(buffer, "%s tests/toolhelp.c %u %u", selfname, (DWORD)ev1, (DWORD)ev2); - ok(CreateProcessA(NULL, buffer, NULL, NULL, TRUE, 0, NULL, NULL, &startup, &info), "CreateProcess\n"); - /* wait for child to be initialized */ - w = WaitForSingleObject(ev1, WAIT_TIME); - ok(w == WAIT_OBJECT_0, "Failed to wait on sub-process startup\n"); - - test_process(pid, info.dwProcessId); - test_thread(pid, info.dwProcessId); - test_module(pid, curr_expected_modules, NUM_OF(curr_expected_modules)); - test_module(info.dwProcessId, sub_expected_modules, NUM_OF(sub_expected_modules)); - - SetEvent(ev2); - winetest_wait_child_process( info.hProcess ); -} diff --git a/rostests/winetests/kernel32/version.c b/rostests/winetests/kernel32/version.c deleted file mode 100644 index 5371795ba6b..00000000000 --- a/rostests/winetests/kernel32/version.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Unit test suite for version functions - * - * Copyright 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 - -#include "wine/test.h" -#include "winbase.h" - -static BOOL (WINAPI * pVerifyVersionInfoA)(LPOSVERSIONINFOEXA, DWORD, DWORDLONG); -static ULONGLONG (WINAPI * pVerSetConditionMask)(ULONGLONG, DWORD, BYTE); - -#define KERNEL32_GET_PROC(func) \ - p##func = (void *)GetProcAddress(hKernel32, #func); \ - if(!p##func) trace("GetProcAddress(hKernel32, '%s') failed\n", #func); - -static void init_function_pointers(void) -{ - HMODULE hKernel32; - - pVerifyVersionInfoA = NULL; - pVerSetConditionMask = NULL; - - hKernel32 = GetModuleHandleA("kernel32.dll"); - assert(hKernel32); - KERNEL32_GET_PROC(VerifyVersionInfoA); - KERNEL32_GET_PROC(VerSetConditionMask); -} - -static void test_GetVersionEx(void) -{ - OSVERSIONINFOA infoA; - OSVERSIONINFOEXA infoExA; - BOOL ret; - - if (0) - { - /* Silently crashes on XP */ - ret = GetVersionExA(NULL); - } - - SetLastError(0xdeadbeef); - memset(&infoA,0,sizeof infoA); - ret = GetVersionExA(&infoA); - ok(!ret, "Expected GetVersionExA to fail\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER || - GetLastError() == 0xdeadbeef /* Win9x */, - "Expected ERROR_INSUFFICIENT_BUFFER or 0xdeadbeef (Win9x), got %d\n", - GetLastError()); - - SetLastError(0xdeadbeef); - infoA.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA) / 2; - ret = GetVersionExA(&infoA); - ok(!ret, "Expected GetVersionExA to fail\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER || - GetLastError() == 0xdeadbeef /* Win9x */, - "Expected ERROR_INSUFFICIENT_BUFFER or 0xdeadbeef (Win9x), got %d\n", - GetLastError()); - - SetLastError(0xdeadbeef); - infoA.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA) * 2; - ret = GetVersionExA(&infoA); - ok(!ret, "Expected GetVersionExA to fail\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER || - GetLastError() == 0xdeadbeef /* Win9x */, - "Expected ERROR_INSUFFICIENT_BUFFER or 0xdeadbeef (Win9x), got %d\n", - GetLastError()); - - SetLastError(0xdeadbeef); - infoA.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); - ret = GetVersionExA(&infoA); - ok(ret, "Expected GetVersionExA to succeed\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - infoExA.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); - ret = GetVersionExA((OSVERSIONINFOA *)&infoExA); - ok(ret, "Expected GetVersionExA to succeed\n"); - ok(GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got %d\n", GetLastError()); -} - -static void test_VerifyVersionInfo(void) -{ - OSVERSIONINFOEX info = { sizeof(info) }; - BOOL ret; - DWORD servicepack; - - if(!pVerifyVersionInfoA || !pVerSetConditionMask) - { - skip("Needed functions not available\n"); - return; - } - - /* Before we start doing some tests we should check what the version of - * the ServicePack is. Tests on a box with no ServicePack will fail otherwise. - */ - GetVersionEx((OSVERSIONINFO *)&info); - servicepack = info.wServicePackMajor; - memset(&info, 0, sizeof(info)); - info.dwOSVersionInfoSize = sizeof(info); - - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION, - pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - ret = pVerifyVersionInfoA(&info, VER_BUILDNUMBER | VER_MAJORVERSION | - VER_MINORVERSION/* | VER_PLATFORMID | VER_SERVICEPACKMAJOR | - VER_SERVICEPACKMINOR | VER_SUITENAME | VER_PRODUCT_TYPE */, - pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL)); - ok(!ret && (GetLastError() == ERROR_OLD_WIN_VERSION), - "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", GetLastError()); - - /* tests special handling of VER_SUITENAME */ - - ret = pVerifyVersionInfoA(&info, VER_SUITENAME, - pVerSetConditionMask(0, VER_SUITENAME, VER_AND)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - ret = pVerifyVersionInfoA(&info, VER_SUITENAME, - pVerSetConditionMask(0, VER_SUITENAME, VER_OR)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - /* test handling of version numbers */ - - /* v3.10 is always less than v4.x even - * if the minor version is tested */ - info.dwMajorVersion = 3; - info.dwMinorVersion = 10; - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL), - VER_MAJORVERSION, VER_GREATER_EQUAL)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - info.dwMinorVersion = 0; - info.wServicePackMajor = 10; - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL), - VER_MAJORVERSION, VER_GREATER_EQUAL)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - info.wServicePackMajor = 0; - info.wServicePackMinor = 10; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL), - VER_MAJORVERSION, VER_GREATER_EQUAL)); - if (servicepack == 0) - ok(!ret && (GetLastError() == ERROR_OLD_WIN_VERSION), - "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", GetLastError()); - else - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - GetVersionEx((OSVERSIONINFO *)&info); - info.wServicePackMinor++; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(!ret && (GetLastError() == ERROR_OLD_WIN_VERSION), - "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", GetLastError()); - - if (servicepack == 0) - { - skip("There is no ServicePack on this system\n"); - } - else - { - GetVersionEx((OSVERSIONINFO *)&info); - info.wServicePackMajor--; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - GetVersionEx((OSVERSIONINFO *)&info); - info.wServicePackMajor--; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - } - - GetVersionEx((OSVERSIONINFO *)&info); - info.wServicePackMajor++; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_LESS)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - GetVersionEx((OSVERSIONINFO *)&info); - info.wServicePackMajor++; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_LESS_EQUAL)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - GetVersionEx((OSVERSIONINFO *)&info); - info.wServicePackMajor--; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL)); - ok(!ret && (GetLastError() == ERROR_OLD_WIN_VERSION), - "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", GetLastError()); - - /* test the failure hierarchy for the four version fields */ - - GetVersionEx((OSVERSIONINFO *)&info); - info.wServicePackMajor++; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(!ret && (GetLastError() == ERROR_OLD_WIN_VERSION), - "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", GetLastError()); - - GetVersionEx((OSVERSIONINFO *)&info); - info.dwMinorVersion++; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(!ret && (GetLastError() == ERROR_OLD_WIN_VERSION), - "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", GetLastError()); - - GetVersionEx((OSVERSIONINFO *)&info); - info.dwMajorVersion++; - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(!ret && (GetLastError() == ERROR_OLD_WIN_VERSION), - "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", GetLastError()); - - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - - GetVersionEx((OSVERSIONINFO *)&info); - info.dwBuildNumber++; - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(!ret && (GetLastError() == ERROR_OLD_WIN_VERSION), - "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", GetLastError()); - - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - /* test bad dwOSVersionInfoSize */ - GetVersionEx((OSVERSIONINFO *)&info); - info.dwOSVersionInfoSize = 0; - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL)); - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); -} - -START_TEST(version) -{ - init_function_pointers(); - - test_GetVersionEx(); - test_VerifyVersionInfo(); -} diff --git a/rostests/winetests/kernel32/virtual.c b/rostests/winetests/kernel32/virtual.c deleted file mode 100755 index dad82f6612a..00000000000 --- a/rostests/winetests/kernel32/virtual.c +++ /dev/null @@ -1,671 +0,0 @@ -/* - * Unit test suite for Virtual* family of APIs. - * - * Copyright 2004 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 -#include - -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "wine/test.h" - -#define NUM_THREADS 4 -#define MAPPING_SIZE 0x100000 - -static HINSTANCE hkernel32; -static LPVOID (WINAPI *pVirtualAllocEx)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD); -static BOOL (WINAPI *pVirtualFreeEx)(HANDLE, LPVOID, SIZE_T, DWORD); - -/* ############################### */ - -static HANDLE create_target_process(const char *arg) -{ - char **argv; - char cmdline[MAX_PATH]; - PROCESS_INFORMATION pi; - STARTUPINFO si = { 0 }; - si.cb = sizeof(si); - - winetest_get_mainargs( &argv ); - sprintf(cmdline, "%s %s %s", argv[0], argv[1], arg); - ok(CreateProcess(NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, - &si, &pi) != 0, "error: %u\n", GetLastError()); - ok(CloseHandle(pi.hThread) != 0, "error %u\n", GetLastError()); - return pi.hProcess; -} - -static void test_VirtualAllocEx(void) -{ - const unsigned int alloc_size = 1<<15; - char *src, *dst; - unsigned long bytes_written = 0, bytes_read = 0, i; - void *addr1, *addr2; - BOOL b; - DWORD old_prot; - MEMORY_BASIC_INFORMATION info; - HANDLE hProcess; - - /* not exported in all windows-versions */ - if ((!pVirtualAllocEx) || (!pVirtualFreeEx)) { - skip("VirtualAllocEx not found\n"); - return; - } - - hProcess = create_target_process("sleep"); - ok(hProcess != NULL, "Can't start process\n"); - - SetLastError(0xdeadbeef); - addr1 = pVirtualAllocEx(hProcess, NULL, alloc_size, MEM_COMMIT, - PAGE_EXECUTE_READWRITE); - if (!addr1 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { /* Win9x */ - skip("VirtualAllocEx not implemented\n"); - TerminateProcess(hProcess, 0); - CloseHandle(hProcess); - return; - } - - src = HeapAlloc( GetProcessHeap(), 0, alloc_size ); - dst = HeapAlloc( GetProcessHeap(), 0, alloc_size ); - for (i = 0; i < alloc_size; i++) - src[i] = i & 0xff; - - ok(addr1 != NULL, "VirtualAllocEx error %u\n", GetLastError()); - b = WriteProcessMemory(hProcess, addr1, src, alloc_size, &bytes_written); - ok(b && (bytes_written == alloc_size), "%lu bytes written\n", - bytes_written); - b = ReadProcessMemory(hProcess, addr1, dst, alloc_size, &bytes_read); - ok(b && (bytes_read == alloc_size), "%lu bytes read\n", bytes_read); - ok(!memcmp(src, dst, alloc_size), "Data from remote process differs\n"); - b = pVirtualFreeEx(hProcess, addr1, 0, MEM_RELEASE); - ok(b != 0, "VirtualFreeEx, error %u\n", GetLastError()); - - HeapFree( GetProcessHeap(), 0, src ); - HeapFree( GetProcessHeap(), 0, dst ); - - /* - * The following tests parallel those in test_VirtualAlloc() - */ - - SetLastError(0xdeadbeef); - addr1 = pVirtualAllocEx(hProcess, 0, 0, MEM_RESERVE, PAGE_NOACCESS); - ok(addr1 == NULL, "VirtualAllocEx should fail on zero-sized allocation\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER /* NT */ || - GetLastError() == ERROR_NOT_ENOUGH_MEMORY, /* Win9x */ - "got %u, expected ERROR_INVALID_PARAMETER\n", GetLastError()); - - addr1 = pVirtualAllocEx(hProcess, 0, 0xFFFC, MEM_RESERVE, PAGE_NOACCESS); - ok(addr1 != NULL, "VirtualAllocEx failed\n"); - - /* test a not committed memory */ - memset(&info, 'q', sizeof(info)); - ok(VirtualQueryEx(hProcess, addr1, &info, sizeof(info)) == sizeof(info), "VirtualQueryEx failed\n"); - ok(info.BaseAddress == addr1, "%p != %p\n", info.BaseAddress, addr1); - ok(info.AllocationBase == addr1, "%p != %p\n", info.AllocationBase, addr1); - ok(info.AllocationProtect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.AllocationProtect); - ok(info.RegionSize == 0x10000, "%lx != 0x10000\n", info.RegionSize); - ok(info.State == MEM_RESERVE, "%x != MEM_RESERVE\n", info.State); - /* NT reports Protect == 0 for a not committed memory block */ - ok(info.Protect == 0 /* NT */ || - info.Protect == PAGE_NOACCESS, /* Win9x */ - "%x != PAGE_NOACCESS\n", info.Protect); - ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); - - SetLastError(0xdeadbeef); - ok(!VirtualProtectEx(hProcess, addr1, 0xFFFC, PAGE_READONLY, &old_prot), - "VirtualProtectEx should fail on a not committed memory\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x */ - "got %u, expected ERROR_INVALID_ADDRESS\n", GetLastError()); - - addr2 = pVirtualAllocEx(hProcess, addr1, 0x1000, MEM_COMMIT, PAGE_NOACCESS); - ok(addr1 == addr2, "VirtualAllocEx failed\n"); - - /* test a committed memory */ - ok(VirtualQueryEx(hProcess, addr1, &info, sizeof(info)) == sizeof(info), - "VirtualQueryEx failed\n"); - ok(info.BaseAddress == addr1, "%p != %p\n", info.BaseAddress, addr1); - ok(info.AllocationBase == addr1, "%p != %p\n", info.AllocationBase, addr1); - ok(info.AllocationProtect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.AllocationProtect); - ok(info.RegionSize == 0x1000, "%lx != 0x1000\n", info.RegionSize); - ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State); - /* this time NT reports PAGE_NOACCESS as well */ - ok(info.Protect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.Protect); - ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); - - /* this should fail, since not the whole range is committed yet */ - SetLastError(0xdeadbeef); - ok(!VirtualProtectEx(hProcess, addr1, 0xFFFC, PAGE_READONLY, &old_prot), - "VirtualProtectEx should fail on a not committed memory\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x */ - "got %u, expected ERROR_INVALID_ADDRESS\n", GetLastError()); - - old_prot = 0; - ok(VirtualProtectEx(hProcess, addr1, 0x1000, PAGE_READONLY, &old_prot), "VirtualProtectEx failed\n"); - ok(old_prot == PAGE_NOACCESS, "wrong old protection: got %04x instead of PAGE_NOACCESS\n", old_prot); - - old_prot = 0; - ok(VirtualProtectEx(hProcess, addr1, 0x1000, PAGE_READWRITE, &old_prot), "VirtualProtectEx failed\n"); - ok(old_prot == PAGE_READONLY, "wrong old protection: got %04x instead of PAGE_READONLY\n", old_prot); - - ok(!pVirtualFreeEx(hProcess, addr1, 0x10000, 0), - "VirtualFreeEx should fail with type 0\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "got %u, expected ERROR_INVALID_PARAMETER\n", GetLastError()); - - ok(pVirtualFreeEx(hProcess, addr1, 0x10000, MEM_DECOMMIT), "VirtualFreeEx failed\n"); - - /* if the type is MEM_RELEASE, size must be 0 */ - ok(!pVirtualFreeEx(hProcess, addr1, 1, MEM_RELEASE), - "VirtualFreeEx should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "got %u, expected ERROR_INVALID_PARAMETER\n", GetLastError()); - - ok(pVirtualFreeEx(hProcess, addr1, 0, MEM_RELEASE), "VirtualFreeEx failed\n"); - - TerminateProcess(hProcess, 0); - CloseHandle(hProcess); -} - -static void test_VirtualAlloc(void) -{ - void *addr1, *addr2; - DWORD old_prot; - MEMORY_BASIC_INFORMATION info; - - SetLastError(0xdeadbeef); - addr1 = VirtualAlloc(0, 0, MEM_RESERVE, PAGE_NOACCESS); - ok(addr1 == NULL, "VirtualAlloc should fail on zero-sized allocation\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER /* NT */ || - GetLastError() == ERROR_NOT_ENOUGH_MEMORY, /* Win9x */ - "got %d, expected ERROR_INVALID_PARAMETER\n", GetLastError()); - - addr1 = VirtualAlloc(0, 0xFFFC, MEM_RESERVE, PAGE_NOACCESS); - ok(addr1 != NULL, "VirtualAlloc failed\n"); - - /* test a not committed memory */ - ok(VirtualQuery(addr1, &info, sizeof(info)) == sizeof(info), - "VirtualQuery failed\n"); - ok(info.BaseAddress == addr1, "%p != %p\n", info.BaseAddress, addr1); - ok(info.AllocationBase == addr1, "%p != %p\n", info.AllocationBase, addr1); - ok(info.AllocationProtect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.AllocationProtect); - ok(info.RegionSize == 0x10000, "%lx != 0x10000\n", info.RegionSize); - ok(info.State == MEM_RESERVE, "%x != MEM_RESERVE\n", info.State); - /* NT reports Protect == 0 for a not committed memory block */ - ok(info.Protect == 0 /* NT */ || - info.Protect == PAGE_NOACCESS, /* Win9x */ - "%x != PAGE_NOACCESS\n", info.Protect); - ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); - - SetLastError(0xdeadbeef); - ok(!VirtualProtect(addr1, 0xFFFC, PAGE_READONLY, &old_prot), - "VirtualProtect should fail on a not committed memory\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x */ - "got %d, expected ERROR_INVALID_ADDRESS\n", GetLastError()); - - addr2 = VirtualAlloc(addr1, 0x1000, MEM_COMMIT, PAGE_NOACCESS); - ok(addr1 == addr2, "VirtualAlloc failed\n"); - - /* test a committed memory */ - ok(VirtualQuery(addr1, &info, sizeof(info)) == sizeof(info), - "VirtualQuery failed\n"); - ok(info.BaseAddress == addr1, "%p != %p\n", info.BaseAddress, addr1); - ok(info.AllocationBase == addr1, "%p != %p\n", info.AllocationBase, addr1); - ok(info.AllocationProtect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.AllocationProtect); - ok(info.RegionSize == 0x1000, "%lx != 0x1000\n", info.RegionSize); - ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State); - /* this time NT reports PAGE_NOACCESS as well */ - ok(info.Protect == PAGE_NOACCESS, "%x != PAGE_NOACCESS\n", info.Protect); - ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type); - - /* this should fail, since not the whole range is committed yet */ - SetLastError(0xdeadbeef); - ok(!VirtualProtect(addr1, 0xFFFC, PAGE_READONLY, &old_prot), - "VirtualProtect should fail on a not committed memory\n"); - ok(GetLastError() == ERROR_INVALID_ADDRESS /* NT */ || - GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x */ - "got %d, expected ERROR_INVALID_ADDRESS\n", GetLastError()); - - ok(VirtualProtect(addr1, 0x1000, PAGE_READONLY, &old_prot), "VirtualProtect failed\n"); - ok(old_prot == PAGE_NOACCESS, - "wrong old protection: got %04x instead of PAGE_NOACCESS\n", old_prot); - - ok(VirtualProtect(addr1, 0x1000, PAGE_READWRITE, &old_prot), "VirtualProtect failed\n"); - ok(old_prot == PAGE_READONLY, - "wrong old protection: got %04x instead of PAGE_READONLY\n", old_prot); - - ok(!VirtualFree(addr1, 0x10000, 0), "VirtualFree should fail with type 0\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "got %d, expected ERROR_INVALID_PARAMETER\n", GetLastError()); - - ok(VirtualFree(addr1, 0x10000, MEM_DECOMMIT), "VirtualFree failed\n"); - - /* if the type is MEM_RELEASE, size must be 0 */ - ok(!VirtualFree(addr1, 1, MEM_RELEASE), "VirtualFree should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "got %d, expected ERROR_INVALID_PARAMETER\n", GetLastError()); - - ok(VirtualFree(addr1, 0, MEM_RELEASE), "VirtualFree failed\n"); -} - -static void test_MapViewOfFile(void) -{ - static const char testfile[] = "testfile.xxx"; - HANDLE file, mapping; - void *ptr, *ptr2; - MEMORY_BASIC_INFORMATION info; - BOOL ret; - - SetLastError(0xdeadbeef); - file = CreateFileA( testfile, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); - ok( file != INVALID_HANDLE_VALUE, "CreateFile error %u\n", GetLastError() ); - SetFilePointer( file, 4096, NULL, FILE_BEGIN ); - SetEndOfFile( file ); - - /* read/write mapping */ - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_READWRITE, 0, 4096, NULL ); - ok( mapping != 0, "CreateFileMapping error %u\n", GetLastError() ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAPE_READ error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - /* this fails on win9x but succeeds on NT */ - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 4096 ); - if (ptr) UnmapViewOfFile( ptr ); - else ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, 0, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile 0 error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_WRITE error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - CloseHandle( mapping ); - - /* read-only mapping */ - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 4096, NULL ); - ok( mapping != 0, "CreateFileMapping error %u\n", GetLastError() ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - /* this fails on win9x but succeeds on NT */ - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 4096 ); - if (ptr) UnmapViewOfFile( ptr ); - else ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, 0, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile 0 error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 4096 ); - ok( !ptr, "MapViewOfFile FILE_MAP_WRITE succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - CloseHandle( mapping ); - - /* copy-on-write mapping */ - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_WRITECOPY, 0, 4096, NULL ); - ok( mapping != 0, "CreateFileMapping error %u\n", GetLastError() ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_COPY error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, 0, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile 0 error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 4096 ); - ok( !ptr, "MapViewOfFile FILE_MAP_WRITE succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - CloseHandle( mapping ); - - /* no access mapping */ - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_NOACCESS, 0, 4096, NULL ); - /* fails on NT but succeeds on win9x */ - if (!mapping) ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); - else - { - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 4096 ); - ok( !ptr, "MapViewOfFile FILE_MAP_COPY succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, 0, 0, 0, 4096 ); - ok( ptr != NULL, "MapViewOfFile 0 error %u\n", GetLastError() ); - UnmapViewOfFile( ptr ); - - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 4096 ); - ok( !ptr, "MapViewOfFile FILE_MAP_WRITE succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error %d\n", GetLastError() ); - - CloseHandle( mapping ); - } - - CloseHandle( file ); - - /* now try read-only file */ - - SetLastError(0xdeadbeef); - file = CreateFileA( testfile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0 ); - ok( file != INVALID_HANDLE_VALUE, "CreateFile error %u\n", GetLastError() ); - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_READWRITE, 0, 4096, NULL ); - ok( !mapping, "CreateFileMapping PAGE_READWRITE succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_WRITECOPY, 0, 4096, NULL ); - ok( mapping != 0, "CreateFileMapping PAGE_WRITECOPY error %u\n", GetLastError() ); - CloseHandle( mapping ); - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 4096, NULL ); - ok( mapping != 0, "CreateFileMapping PAGE_READONLY error %u\n", GetLastError() ); - CloseHandle( mapping ); - CloseHandle( file ); - - /* now try no access file */ - - SetLastError(0xdeadbeef); - file = CreateFileA( testfile, 0, 0, NULL, OPEN_EXISTING, 0, 0 ); - ok( file != INVALID_HANDLE_VALUE, "CreateFile error %u\n", GetLastError() ); - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_READWRITE, 0, 4096, NULL ); - ok( !mapping, "CreateFileMapping PAGE_READWRITE succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_WRITECOPY, 0, 4096, NULL ); - ok( !mapping, "CreateFileMapping PAGE_WRITECOPY succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - - SetLastError(0xdeadbeef); - mapping = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 4096, NULL ); - ok( !mapping, "CreateFileMapping PAGE_READONLY succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER || - GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - - CloseHandle( file ); - DeleteFileA( testfile ); - - SetLastError(0xdeadbeef); - file = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "Global\\Foo"); - ok( file != 0, "CreateFileMapping PAGE_READWRITE error %u\n", GetLastError() ); - - SetLastError(0xdeadbeef); - mapping = OpenFileMapping( FILE_MAP_READ, FALSE, "Global\\Foo" ); - ok( mapping != 0, "OpenFileMapping FILE_MAP_READ error %u\n", GetLastError() ); - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 0 ); -todo_wine ok( !ptr, "MapViewOfFile FILE_MAP_WRITE should fail\n" ); -todo_wine ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() ); - SetLastError(0xdeadbeef); - ok( VirtualQuery( ptr, &info, sizeof(info) ) == sizeof(info), - "VirtualQuery error %u\n", GetLastError() ); - ok( info.BaseAddress == ptr, "%p != %p\n", info.BaseAddress, ptr ); - ok( info.AllocationBase == ptr, "%p != %p\n", info.AllocationBase, ptr ); -todo_wine ok( info.AllocationProtect == PAGE_READONLY, "%x != PAGE_READONLY\n", info.AllocationProtect ); - ok( info.RegionSize == 4096, "%lx != 4096\n", info.RegionSize ); - ok( info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State ); -todo_wine ok( info.Protect == PAGE_READONLY, "%x != PAGE_READONLY\n", info.Protect ); - UnmapViewOfFile( ptr ); - CloseHandle( mapping ); - - SetLastError(0xdeadbeef); - mapping = OpenFileMapping( FILE_MAP_WRITE, FALSE, "Global\\Foo" ); - ok( mapping != 0, "OpenFileMapping FILE_MAP_WRITE error %u\n", GetLastError() ); - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 ); -todo_wine ok( !ptr, "MapViewOfFile FILE_MAP_READ should fail\n" ); -todo_wine ok( GetLastError() == ERROR_ACCESS_DENIED, "Wrong error %d\n", GetLastError() ); - SetLastError(0xdeadbeef); - ptr = MapViewOfFile( mapping, FILE_MAP_WRITE, 0, 0, 0 ); - ok( ptr != NULL, "MapViewOfFile FILE_MAP_WRITE error %u\n", GetLastError() ); - SetLastError(0xdeadbeef); - ok( VirtualQuery( ptr, &info, sizeof(info) ) == sizeof(info), - "VirtualQuery error %u\n", GetLastError() ); - ok( info.BaseAddress == ptr, "%p != %p\n", info.BaseAddress, ptr ); - ok( info.AllocationBase == ptr, "%p != %p\n", info.AllocationBase, ptr ); - ok( info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect ); - ok( info.RegionSize == 4096, "%lx != 4096\n", info.RegionSize ); - ok( info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State ); - ok( info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect ); - UnmapViewOfFile( ptr ); - CloseHandle( mapping ); - - CloseHandle( file ); - - /* read/write mapping with SEC_RESERVE */ - mapping = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_RESERVE, 0, MAPPING_SIZE, NULL); - ok(mapping != INVALID_HANDLE_VALUE, "CreateFileMappingA failed with error %d\n", GetLastError()); - - ptr = MapViewOfFile(mapping, FILE_MAP_WRITE, 0, 0, 0); - ok(ptr != NULL, "MapViewOfFile failed with error %d\n", GetLastError()); - - ret = VirtualQuery(ptr, &info, sizeof(info)); - ok(ret, "VirtualQuery failed with error %d\n", GetLastError()); - ok(info.BaseAddress == ptr, "BaseAddress should have been %p but was %p instead\n", ptr, info.BaseAddress); - ok(info.AllocationBase == ptr, "AllocationBase should have been %p but was %p instead\n", ptr, info.AllocationBase); - ok(info.AllocationProtect == PAGE_READWRITE, "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); - ok(info.RegionSize == MAPPING_SIZE, "RegionSize should have been 0x%x but was 0x%x\n", MAPPING_SIZE, (unsigned int)info.RegionSize); -todo_wine - ok(info.State == MEM_RESERVE, "State should have been MEM_RESERVE instead of 0x%x\n", info.State); -todo_wine - ok(info.Protect == 0, "Protect should have been 0 instead of 0x%x\n", info.Protect); - ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); - - ptr = VirtualAlloc(ptr, 0x10000, MEM_COMMIT, PAGE_READWRITE); - ok(ptr != NULL, "VirtualAlloc failed with error %d\n", GetLastError()); - - ret = VirtualQuery(ptr, &info, sizeof(info)); - ok(ret, "VirtualQuery failed with error %d\n", GetLastError()); - ok(info.BaseAddress == ptr, "BaseAddress should have been %p but was %p instead\n", ptr, info.BaseAddress); - ok(info.AllocationBase == ptr, "AllocationBase should have been %p but was %p instead\n", ptr, info.AllocationBase); - ok(info.AllocationProtect == PAGE_READWRITE, "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); -todo_wine - ok(info.RegionSize == 0x10000, "RegionSize should have been 0x10000 but was 0x%x\n", (unsigned int)info.RegionSize); - ok(info.State == MEM_COMMIT, "State should have been MEM_RESERVE instead of 0x%x\n", info.State); - ok(info.Protect == PAGE_READWRITE, "Protect should have been 0 instead of 0x%x\n", info.Protect); - ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); - - ptr2 = MapViewOfFile(mapping, FILE_MAP_WRITE, 0, 0, 0); - /* on NT ptr != ptr2 but on Win9x ptr == ptr2 */ - ok(ptr2 != NULL, "MapViewOfFile failed with error %d\n", GetLastError()); - trace("mapping same section resulted in views %p and %p\n", ptr, ptr2); - - /* shows that the VirtualAlloc above affects the mapping, not just the - * virtual memory in this process - it also affects all other processes - * with a view of the mapping, but that isn't tested here */ - ret = VirtualQuery(ptr2, &info, sizeof(info)); - ok(ret, "VirtualQuery failed with error %d\n", GetLastError()); - ok(info.BaseAddress == ptr2, "BaseAddress should have been %p but was %p instead\n", ptr2, info.BaseAddress); - ok(info.AllocationBase == ptr2, "AllocationBase should have been %p but was %p instead\n", ptr2, info.AllocationBase); - ok(info.AllocationProtect == PAGE_READWRITE, "AllocationProtect should have been PAGE_READWRITE but was 0x%x\n", info.AllocationProtect); -todo_wine - ok(info.RegionSize == 0x10000, "RegionSize should have been 0x10000 but was 0x%x\n", (unsigned int)info.RegionSize); - ok(info.State == MEM_COMMIT, "State should have been MEM_RESERVE instead of 0x%x\n", info.State); - ok(info.Protect == PAGE_READWRITE, "Protect should have been 0 instead of 0x%x\n", info.Protect); - ok(info.Type == MEM_MAPPED, "Type should have been MEM_MAPPED instead of 0x%x\n", info.Type); - - ret = UnmapViewOfFile(ptr2); - ok(ret, "UnmapViewOfFile failed with error %d\n", GetLastError()); - ret = UnmapViewOfFile(ptr); - ok(ret, "UnmapViewOfFile failed with error %d\n", GetLastError()); - CloseHandle(mapping); -} - -static DWORD (WINAPI *pNtMapViewOfSection)( HANDLE handle, HANDLE process, PVOID *addr_ptr, - ULONG zero_bits, SIZE_T commit_size, - const LARGE_INTEGER *offset_ptr, SIZE_T *size_ptr, - ULONG inherit, ULONG alloc_type, ULONG protect ); -static DWORD (WINAPI *pNtUnmapViewOfSection)( HANDLE process, PVOID addr ); - -static void test_NtMapViewOfSection(void) -{ - HANDLE hProcess; - - static const char testfile[] = "testfile.xxx"; - static const char data[] = "test data for NtMapViewOfSection"; - char buffer[sizeof(data)]; - HANDLE file, mapping; - void *ptr; - BOOL ret; - DWORD status, written; - SIZE_T size, result; - LARGE_INTEGER offset; - - pNtMapViewOfSection = (void *)GetProcAddress( GetModuleHandle("ntdll.dll"), "NtMapViewOfSection" ); - pNtUnmapViewOfSection = (void *)GetProcAddress( GetModuleHandle("ntdll.dll"), "NtUnmapViewOfSection" ); - if (!pNtMapViewOfSection || !pNtUnmapViewOfSection) - { - skip( "NtMapViewOfSection not found\n" ); - return; - } - - file = CreateFileA( testfile, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); - ok( file != INVALID_HANDLE_VALUE, "Failed to create test file\n" ); - WriteFile( file, data, sizeof(data), &written, NULL ); - SetFilePointer( file, 4096, NULL, FILE_BEGIN ); - SetEndOfFile( file ); - - /* read/write mapping */ - - mapping = CreateFileMappingA( file, NULL, PAGE_READWRITE, 0, 4096, NULL ); - ok( mapping != 0, "CreateFileMapping failed\n" ); - - hProcess = create_target_process("sleep"); - ok(hProcess != NULL, "Can't start process\n"); - - ptr = NULL; - size = 0; - offset.QuadPart = 0; - status = pNtMapViewOfSection( mapping, hProcess, &ptr, 0, 0, &offset, &size, 1, 0, PAGE_READWRITE ); - ok( !status, "NtMapViewOfSection failed status %x\n", status ); - - ret = ReadProcessMemory( hProcess, ptr, buffer, sizeof(buffer), &result ); - ok( ret, "ReadProcessMemory failed\n" ); - ok( result == sizeof(buffer), "ReadProcessMemory didn't read all data (%lx)\n", result ); - ok( !memcmp( buffer, data, sizeof(buffer) ), "Wrong data read\n" ); - - status = pNtUnmapViewOfSection( hProcess, ptr ); - ok( !status, "NtUnmapViewOfSection failed status %x\n", status ); - - CloseHandle( mapping ); - CloseHandle( file ); - DeleteFileA( testfile ); - - TerminateProcess(hProcess, 0); - CloseHandle(hProcess); -} - -static void test_BadPtr(void) -{ - void *ptr = (void*)1; - /* We assume address 1 is not mapped. */ - ok(IsBadReadPtr(ptr,1),"IsBadReadPtr(1) failed.\n"); - ok(IsBadWritePtr(ptr,1),"IsBadWritePtr(1) failed.\n"); - ok(IsBadCodePtr(ptr),"IsBadCodePtr(1) failed.\n"); -} - -START_TEST(virtual) -{ - int argc; - char **argv; - argc = winetest_get_mainargs( &argv ); - - if (argc >= 3) - { - if (!strcmp(argv[2], "sleep")) - { - Sleep(5000); /* spawned process runs for at most 5 seconds */ - return; - } - while (1) - { - void *mem; - BOOL ret; - mem = VirtualAlloc(NULL, 1<<20, MEM_COMMIT|MEM_RESERVE, - PAGE_EXECUTE_READWRITE); - ok(mem != NULL, "VirtualAlloc failed %u\n", GetLastError()); - if (mem == NULL) break; - ret = VirtualFree(mem, 0, MEM_RELEASE); - ok(ret, "VirtualFree failed %u\n", GetLastError()); - if (!ret) break; - } - return; - } - - hkernel32 = GetModuleHandleA("kernel32.dll"); - pVirtualAllocEx = (void *) GetProcAddress(hkernel32, "VirtualAllocEx"); - pVirtualFreeEx = (void *) GetProcAddress(hkernel32, "VirtualFreeEx"); - - test_VirtualAllocEx(); - test_VirtualAlloc(); - test_MapViewOfFile(); - test_NtMapViewOfSection(); - test_BadPtr(); -} diff --git a/rostests/winetests/kernel32/volume.c b/rostests/winetests/kernel32/volume.c deleted file mode 100644 index 9a21db1badc..00000000000 --- a/rostests/winetests/kernel32/volume.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Unit test suite - * - * Copyright 2006 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 - */ - -#include "wine/test.h" -#include "winbase.h" - -static HINSTANCE hdll; -static BOOL (WINAPI * pGetVolumeNameForVolumeMountPointA)(LPCSTR, LPSTR, DWORD); -static BOOL (WINAPI * pGetVolumeNameForVolumeMountPointW)(LPCWSTR, LPWSTR, DWORD); -static HANDLE (WINAPI *pFindFirstVolumeA)(LPSTR,DWORD); -static BOOL (WINAPI *pFindNextVolumeA)(HANDLE,LPSTR,DWORD); -static BOOL (WINAPI *pFindVolumeClose)(HANDLE); - -/* ############################### */ - -static void test_query_dos_deviceA(void) -{ - char drivestr[] = "a:"; - char *p, buffer[2000]; - DWORD ret; - BOOL found = FALSE; - - for (;drivestr[0] <= 'z'; drivestr[0]++) { - ret = QueryDosDeviceA( drivestr, buffer, sizeof(buffer)); - if(ret) { - for (p = buffer; *p; p++) *p = toupper(*p); - if (strstr(buffer, "HARDDISK") || strstr(buffer, "RAMDISK")) found = TRUE; - } - } - todo_wine ok(found, "expected at least one devicename to contain HARDDISK or RAMDISK\n"); -} - -static void test_FindFirstVolume(void) -{ - char volume[51]; - HANDLE handle; - - if (!pFindFirstVolumeA) { - skip("FindFirstVolumeA not found\n"); - return; - } - - handle = pFindFirstVolumeA( volume, 0 ); - ok( handle == INVALID_HANDLE_VALUE, "succeeded with short buffer\n" ); - ok( GetLastError() == ERROR_MORE_DATA || /* XP */ - GetLastError() == ERROR_FILENAME_EXCED_RANGE, /* Vista */ - "wrong error %u\n", GetLastError() ); - handle = pFindFirstVolumeA( volume, 49 ); - ok( handle == INVALID_HANDLE_VALUE, "succeeded with short buffer\n" ); - ok( GetLastError() == ERROR_FILENAME_EXCED_RANGE, "wrong error %u\n", GetLastError() ); - handle = pFindFirstVolumeA( volume, 51 ); - ok( handle != INVALID_HANDLE_VALUE, "failed err %u\n", GetLastError() ); - if (handle != INVALID_HANDLE_VALUE) - { - do - { - ok( strlen(volume) == 49, "bad volume name %s\n", volume ); - ok( !memcmp( volume, "\\\\?\\Volume{", 11 ), "bad volume name %s\n", volume ); - ok( !memcmp( volume + 47, "}\\", 2 ), "bad volume name %s\n", volume ); - } while (pFindNextVolumeA( handle, volume, MAX_PATH )); - ok( GetLastError() == ERROR_NO_MORE_FILES, "wrong error %u\n", GetLastError() ); - pFindVolumeClose( handle ); - } -} - -static void test_GetVolumeNameForVolumeMountPointA(void) -{ - BOOL ret; - char volume[MAX_PATH], path[] = "c:\\"; - DWORD len = sizeof(volume); - - /* not present before w2k */ - if (!pGetVolumeNameForVolumeMountPointA) { - skip("GetVolumeNameForVolumeMountPointA not found\n"); - return; - } - - ret = pGetVolumeNameForVolumeMountPointA(path, volume, 0); - ok(ret == FALSE, "GetVolumeNameForVolumeMountPointA succeeded\n"); - - if (0) { /* these crash on XP */ - ret = pGetVolumeNameForVolumeMountPointA(path, NULL, len); - ok(ret == FALSE, "GetVolumeNameForVolumeMountPointA succeeded\n"); - - ret = pGetVolumeNameForVolumeMountPointA(NULL, volume, len); - ok(ret == FALSE, "GetVolumeNameForVolumeMountPointA succeeded\n"); - } - - ret = pGetVolumeNameForVolumeMountPointA(path, volume, len); - ok(ret == TRUE, "GetVolumeNameForVolumeMountPointA failed\n"); -} - -static void test_GetVolumeNameForVolumeMountPointW(void) -{ - BOOL ret; - WCHAR volume[MAX_PATH], path[] = {'c',':','\\',0}; - DWORD len = sizeof(volume) / sizeof(WCHAR); - - /* not present before w2k */ - if (!pGetVolumeNameForVolumeMountPointW) { - skip("GetVolumeNameForVolumeMountPointW not found\n"); - return; - } - - ret = pGetVolumeNameForVolumeMountPointW(path, volume, 0); - ok(ret == FALSE, "GetVolumeNameForVolumeMountPointA succeeded\n"); - - if (0) { /* these crash on XP */ - ret = pGetVolumeNameForVolumeMountPointW(path, NULL, len); - ok(ret == FALSE, "GetVolumeNameForVolumeMountPointW succeeded\n"); - - ret = pGetVolumeNameForVolumeMountPointW(NULL, volume, len); - ok(ret == FALSE, "GetVolumeNameForVolumeMountPointW succeeded\n"); - } - - ret = pGetVolumeNameForVolumeMountPointW(path, volume, len); - ok(ret == TRUE, "GetVolumeNameForVolumeMountPointW failed\n"); -} - -START_TEST(volume) -{ - hdll = GetModuleHandleA("kernel32.dll"); - pGetVolumeNameForVolumeMountPointA = (void *) GetProcAddress(hdll, "GetVolumeNameForVolumeMountPointA"); - pGetVolumeNameForVolumeMountPointW = (void *) GetProcAddress(hdll, "GetVolumeNameForVolumeMountPointW"); - pFindFirstVolumeA = (void *) GetProcAddress(hdll, "FindFirstVolumeA"); - pFindNextVolumeA = (void *) GetProcAddress(hdll, "FindNextVolumeA"); - pFindVolumeClose = (void *) GetProcAddress(hdll, "FindVolumeClose"); - - test_query_dos_deviceA(); - test_FindFirstVolume(); - test_GetVolumeNameForVolumeMountPointA(); - test_GetVolumeNameForVolumeMountPointW(); -} diff --git a/rostests/winetests/lz32/lz32.rbuild b/rostests/winetests/lz32/lz32.rbuild deleted file mode 100644 index 9de6ea434d4..00000000000 --- a/rostests/winetests/lz32/lz32.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - - - - . - lzexpand_main.c - testlist.c - wine - lz32 - kernel32 - ntdll - - diff --git a/rostests/winetests/lz32/lzexpand_main.c b/rostests/winetests/lz32/lzexpand_main.c deleted file mode 100644 index a296b28e630..00000000000 --- a/rostests/winetests/lz32/lzexpand_main.c +++ /dev/null @@ -1,884 +0,0 @@ -/* - * Unit test suite for lz32 functions - * - * Copyright 2004 Evan Parry, Daniel Kegel - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 - -#include "wine/test.h" - -/* Compressed file names end with underscore. */ -static char filename [] = "testfile.xxx"; -static char filename_[] = "testfile.xx_"; -static WCHAR filenameW [] = {'t','e','s','t','f','i','l','e','.','x','x','x',0}; -static WCHAR filenameW_[] = {'t','e','s','t','f','i','l','e','.','x','x','_',0}; - -static char dotless [] = "dotless"; -static char dotless_[] = "dotless._"; -static WCHAR dotlessW [] = {'d','o','t','l','e','s','s', 0}; -static WCHAR dotlessW_[] = {'d','o','t','l','e','s','s','.','_', 0}; - -static char extless [] = "extless."; -static char extless_[] = "extless._"; -static WCHAR extlessW [] = {'e','x','t','l','e','s','s','.', 0}; -static WCHAR extlessW_[] = {'e','x','t','l','e','s','s','.','_', 0}; - -static char _terminated [] = "_terminated.xxxx_"; -static char _terminated_[] = "_terminated.xxxx_"; -static WCHAR _terminatedW [] = {'_','t','e','r','m','i','n','a','t','e','d','.','x','x','x','x','_', 0}; -static WCHAR _terminatedW_[] = {'_','t','e','r','m','i','n','a','t','e','d','.','x','x','x','x','_', 0}; - -static char filename2[] = "testfile.yyy"; - -/* This is the hex string representation of the file created by compressing - a simple text file with the contents "This is a test file." - - The file was created using COMPRESS.EXE from the Windows Server 2003 - Resource Kit from Microsoft. - */ -static const unsigned char compressed_file[] = - {0x53,0x5A,0x44,0x44,0x88,0xF0,0x27,0x33,0x41, - 0x74,0x75,0x14,0x00,0x00,0xDF,0x54,0x68,0x69, - 0x73,0x20,0xF2,0xF0,0x61,0x20,0xFF,0x74,0x65, - 0x73,0x74,0x20,0x66,0x69,0x6C,0x03,0x65,0x2E}; -static const DWORD compressed_file_size = sizeof(compressed_file); - -static const char uncompressed_data[] = "This is a test file."; -static const DWORD uncompressed_data_size = sizeof(uncompressed_data) - 1; - -static char *buf; - -static void full_file_path_name_in_a_CWD(const char *src, char *dst, BOOL expect_short) -{ - DWORD retval; - char shortname[MAX_PATH]; - - retval = GetCurrentDirectoryA(MAX_PATH, dst); - ok(retval > 0, "GetCurrentDirectoryA returned %d, GLE=%d\n", - retval, GetLastError()); - if(dst[retval-1] != '\\') - /* Append backslash only when it's missing */ - lstrcatA(dst, "\\"); - lstrcatA(dst, src); - if(expect_short) - { - memcpy(shortname, dst, MAX_PATH); - retval = GetShortPathName(shortname, dst, MAX_PATH-1); - ok(retval > 0, "GetShortPathName returned %d for '%s', GLE=%d\n", - retval, dst, GetLastError()); - } -} - -static void create_file(char *fname) -{ - INT file; - OFSTRUCT ofs; - DWORD retval; - - file = LZOpenFileA(fname, &ofs, OF_CREATE); - ok(file >= 0, "LZOpenFileA failed to create '%s'\n", fname); - LZClose(file); - retval = GetFileAttributesA(fname); - ok(retval != INVALID_FILE_ATTRIBUTES, "GetFileAttributesA('%s'): error %d\n", ofs.szPathName, GetLastError()); -} - -static void delete_file(char *fname) -{ - INT file; - OFSTRUCT ofs; - DWORD retval; - - file = LZOpenFileA(fname, &ofs, OF_DELETE); - ok(file >= 0, "LZOpenFileA failed to delete '%s'\n", fname); - LZClose(file); - retval = GetFileAttributesA(fname); - ok(retval == INVALID_FILE_ATTRIBUTES, "GetFileAttributesA succeeded on deleted file ('%s')\n", ofs.szPathName); -} - -static void test_LZOpenFileA_existing_compressed(void) -{ - OFSTRUCT test; - INT file; - char expected[MAX_PATH]; - char short_expected[MAX_PATH]; - char filled_0xA5[OFS_MAXPATHNAME]; - - /* Try to open existing compressed files: */ - create_file(filename_); - create_file(dotless_); - create_file(extless_); - create_file(_terminated_); - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(filename_, expected, FALSE); - SetLastError(0xfaceabee); - - /* a, using 8.3-conformant file name. */ - file = LZOpenFileA(filename, &test, OF_EXIST); - /* If the file "foo.xxx" does not exist, LZOpenFileA should then - check for the file "foo.xx_" and open that -- at least on some - operating systems. Doesn't seem to on my copy of Win98. - */ - if(file != LZERROR_BADINHANDLE) { - ok(file >= 0, "LZOpenFileA returns negative file descriptor for '%s'\n", filename); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == 0, "LZOpenFileA set test.nErrCode to %d\n", - test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileA returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - } else { /* Win9x */ - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - ok(test.cBytes == 0xA5, - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(strncmp(test.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, - "LZOpenFileA returned '%s', but was expected to return '%s'\n", - test.szPathName, filled_0xA5); - } - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(dotless_, expected, FALSE); - SetLastError(0xfaceabee); - - /* b, using dotless file name. */ - file = LZOpenFileA(dotless, &test, OF_EXIST); - if(file != LZERROR_BADINHANDLE) { - ok(file >= 0, "LZOpenFileA returns negative file descriptor for '%s'\n", dotless); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == 0, "LZOpenFileA set test.nErrCode to %d\n", - test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileA returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - } else { /* Win9x */ - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - todo_wine - ok(strncmp(test.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, - "LZOpenFileA returned '%s', but was expected to return '%s'\n", - test.szPathName, filled_0xA5); - } - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(extless_, expected, FALSE); - SetLastError(0xfaceabee); - - /* c, using extensionless file name. */ - file = LZOpenFileA(extless, &test, OF_EXIST); - if(file != LZERROR_BADINHANDLE) { - ok(file >= 0, "LZOpenFileA returns negative file descriptor for '%s'\n", extless); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == 0, "LZOpenFileA set test.nErrCode to %d\n", - test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileA returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - } else { /* Win9x */ - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - ok(test.cBytes == 0xA5, - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(strncmp(test.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, - "LZOpenFileA returned '%s', but was expected to return '%s'\n", - test.szPathName, filled_0xA5); - } - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(_terminated_, expected, FALSE); - full_file_path_name_in_a_CWD(_terminated_, short_expected, TRUE); - - /* d, using underscore-terminated file name. */ - file = LZOpenFileA(_terminated, &test, OF_EXIST); - ok(file >= 0, "LZOpenFileA failed on switching to a compressed file name\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == 0, "LZOpenFileA set test.nErrCode to %d\n", - test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - lstrcmpA(test.szPathName, short_expected) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, short_expected); - LZClose(file); - - delete_file(filename_); - delete_file(dotless_); - delete_file(extless_); - delete_file(_terminated_); -} - -static void test_LZOpenFileA_nonexisting_compressed(void) -{ - OFSTRUCT test; - INT file; - char expected[MAX_PATH]; - char filled_0xA5[OFS_MAXPATHNAME]; - - /* Try to open nonexisting compressed files: */ - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(filename_, expected, FALSE); - SetLastError(0xfaceabee); - - /* a, using 8.3-conformant file name. */ - file = LZOpenFileA(filename, &test, OF_EXIST); - /* If the file "foo.xxx" does not exist, LZOpenFileA should then - check for the file "foo.xx_" and open that -- at least on some - operating systems. Doesn't seem to on my copy of Win98. - */ - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileA succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - strncmp(test.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, filled_0xA5); - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(dotless_, expected, FALSE); - SetLastError(0xfaceabee); - - /* b, using dotless file name. */ - file = LZOpenFileA(dotless, &test, OF_EXIST); - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileA succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - strncmp(test.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, filled_0xA5); - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(extless_, expected, FALSE); - SetLastError(0xfaceabee); - - /* c, using extensionless file name. */ - file = LZOpenFileA(extless, &test, OF_EXIST); - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileA succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - strncmp(test.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, filled_0xA5); - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(_terminated_, expected, FALSE); - SetLastError(0xfaceabee); - - /* d, using underscore-terminated file name. */ - file = LZOpenFileA(_terminated, &test, OF_EXIST); - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileA succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - strncmp(test.szPathName, filled_0xA5, OFS_MAXPATHNAME) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, filled_0xA5); -} - -static void test_LZOpenFileA(void) -{ - OFSTRUCT test; - DWORD retval; - INT file; - static char badfilename_[] = "badfilename_"; - char expected[MAX_PATH]; - char short_expected[MAX_PATH]; - - SetLastError(0xfaceabee); - /* Check for nonexistent file. */ - file = LZOpenFileA(badfilename_, &test, OF_READ); - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileA succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(filename_, expected, FALSE); - - /* Create an empty file. */ - file = LZOpenFileA(filename_, &test, OF_CREATE); - ok(file >= 0, "LZOpenFileA failed on creation\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS || - test.nErrCode == ERROR_FILE_NOT_FOUND, /* win9x */ - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileA returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - retval = GetFileAttributesA(filename_); - ok(retval != INVALID_FILE_ATTRIBUTES, "GetFileAttributesA: error %d\n", - GetLastError()); - - /* Check various opening options: */ - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(filename_, short_expected, TRUE); - - /* a, for reading. */ - file = LZOpenFileA(filename_, &test, OF_READ); - ok(file >= 0, "LZOpenFileA failed on read\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - lstrcmpA(test.szPathName, short_expected) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, short_expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - - /* b, for writing. */ - file = LZOpenFileA(filename_, &test, OF_WRITE); - ok(file >= 0, "LZOpenFileA failed on write\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - lstrcmpA(test.szPathName, short_expected) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, short_expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - - /* c, for reading and writing. */ - file = LZOpenFileA(filename_, &test, OF_READWRITE); - ok(file >= 0, "LZOpenFileA failed on read/write\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - lstrcmpA(test.szPathName, short_expected) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, short_expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - - /* d, for checking file existence. */ - file = LZOpenFileA(filename_, &test, OF_EXIST); - ok(file >= 0, "LZOpenFileA failed on read/write\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - lstrcmpA(test.szPathName, short_expected) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, short_expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - - /* Delete the file then make sure it doesn't exist anymore. */ - file = LZOpenFileA(filename_, &test, OF_DELETE); - ok(file >= 0, "LZOpenFileA failed on delete\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileA set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileA set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0 || - lstrcmpA(test.szPathName, short_expected) == 0, /* Win9x */ - "LZOpenFileA returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, short_expected); - LZClose(file); - - retval = GetFileAttributesA(filename_); - ok(retval == INVALID_FILE_ATTRIBUTES, - "GetFileAttributesA succeeded on deleted file\n"); - - test_LZOpenFileA_existing_compressed(); - test_LZOpenFileA_nonexisting_compressed(); -} - -static void test_LZRead(void) -{ - HANDLE file; - DWORD ret; - int cfile; - OFSTRUCT test; - BOOL retok; - - /* Create the compressed file. */ - file = CreateFileA(filename_, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, 0); - ok(file != INVALID_HANDLE_VALUE, "Could not create test file\n"); - retok = WriteFile(file, compressed_file, compressed_file_size, &ret, 0); - ok( retok, "WriteFile: error %d\n", GetLastError()); - ok(ret == compressed_file_size, "Wrote wrong number of bytes with WriteFile?\n"); - CloseHandle(file); - - cfile = LZOpenFileA(filename_, &test, OF_READ); - ok(cfile > 0, "LZOpenFileA failed\n"); - - ret = LZRead(cfile, buf, uncompressed_data_size); - ok(ret == uncompressed_data_size, "Read wrong number of bytes\n"); - - /* Compare what we read with what we think we should read. */ - ok(memcmp(buf, uncompressed_data, uncompressed_data_size) == 0, - "buffer contents mismatch\n"); - - todo_wine { - /* Wine returns the number of bytes actually read instead of an error */ - ret = LZRead(cfile, buf, uncompressed_data_size); - ok(ret == LZERROR_READ, "Expected read-past-EOF to return LZERROR_READ\n"); - } - - LZClose(cfile); - - ret = DeleteFileA(filename_); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); -} - -static void test_LZCopy(void) -{ - HANDLE file; - DWORD ret; - int source, dest; - OFSTRUCT stest, dtest; - BOOL retok; - - /* Create the compressed file. */ - file = CreateFileA(filename_, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, 0); - ok(file != INVALID_HANDLE_VALUE, - "CreateFileA: error %d\n", GetLastError()); - retok = WriteFile(file, compressed_file, compressed_file_size, &ret, 0); - ok( retok, "WriteFile error %d\n", GetLastError()); - ok(ret == compressed_file_size, "Wrote wrong number of bytes\n"); - CloseHandle(file); - - source = LZOpenFileA(filename_, &stest, OF_READ); - ok(source >= 0, "LZOpenFileA failed on compressed file\n"); - dest = LZOpenFileA(filename2, &dtest, OF_CREATE); - ok(dest >= 0, "LZOpenFileA failed on creating new file %d\n", dest); - - ret = LZCopy(source, dest); - ok(ret > 0, "LZCopy error\n"); - - LZClose(source); - LZClose(dest); - - file = CreateFileA(filename2, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0); - ok(file != INVALID_HANDLE_VALUE, - "CreateFileA: error %d\n", GetLastError()); - - retok = ReadFile(file, buf, uncompressed_data_size*2, &ret, 0); - ok( retok && ret == uncompressed_data_size, "ReadFile: error %d\n", GetLastError()); - /* Compare what we read with what we think we should read. */ - ok(!memcmp(buf, uncompressed_data, uncompressed_data_size), - "buffer contents mismatch\n"); - CloseHandle(file); - - ret = DeleteFileA(filename_); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); - ret = DeleteFileA(filename2); - ok(ret, "DeleteFileA: error %d\n", GetLastError()); -} - -static void create_fileW(WCHAR *fnameW) -{ - INT file; - OFSTRUCT ofs; - DWORD retval; - - file = LZOpenFileW(fnameW, &ofs, OF_CREATE); - ok(file >= 0, "LZOpenFileW failed on creation\n"); - LZClose(file); - retval = GetFileAttributesW(fnameW); - ok(retval != INVALID_FILE_ATTRIBUTES, "GetFileAttributesW('%s'): error %d\n", ofs.szPathName, GetLastError()); -} - -static void delete_fileW(WCHAR *fnameW) -{ - INT file; - OFSTRUCT ofs; - DWORD retval; - - file = LZOpenFileW(fnameW, &ofs, OF_DELETE); - ok(file >= 0, "LZOpenFileW failed on delete\n"); - LZClose(file); - retval = GetFileAttributesW(fnameW); - ok(retval == INVALID_FILE_ATTRIBUTES, "GetFileAttributesW succeeded on deleted file ('%s')\n", ofs.szPathName); -} - -static void test_LZOpenFileW_existing_compressed(void) -{ - OFSTRUCT test; - INT file; - char expected[MAX_PATH]; - - /* Try to open existing compressed files: */ - create_fileW(filenameW_); - create_fileW(dotlessW_); - create_fileW(extlessW_); - create_fileW(_terminatedW_); - - full_file_path_name_in_a_CWD(filename_, expected, FALSE); - memset(&test, 0xA5, sizeof(test)); - - /* a, using 8.3-conformant file name. */ - file = LZOpenFileW(filenameW, &test, OF_EXIST); - /* If the file "foo.xxx" does not exist, LZOpenFileW should then - check for the file "foo.xx_" and open that. - */ - ok(file >= 0, "LZOpenFileW failed on switching to a compressed file name\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, "LZOpenFileW set test.nErrCode to %d\n", - test.nErrCode); - /* Note that W-function returns A-string by a OFSTRUCT.szPathName: */ - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(dotless_, expected, FALSE); - - /* b, using dotless file name. */ - file = LZOpenFileW(dotlessW, &test, OF_EXIST); - ok(file >= 0, "LZOpenFileW failed on switching to a compressed file name\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, "LZOpenFileW set test.nErrCode to %d\n", - test.nErrCode); - /* Note that W-function returns A-string by a OFSTRUCT.szPathName: */ - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(extless_, expected, FALSE); - - /* c, using extensionless file name. */ - file = LZOpenFileW(extlessW, &test, OF_EXIST); - ok(file >= 0, "LZOpenFileW failed on switching to a compressed file name\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, "LZOpenFileW set test.nErrCode to %d\n", - test.nErrCode); - /* Note that W-function returns A-string by a OFSTRUCT.szPathName: */ - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(_terminated_, expected, FALSE); - - /* d, using underscore-terminated file name. */ - file = LZOpenFileW(_terminatedW, &test, OF_EXIST); - ok(file >= 0, "LZOpenFileW failed on switching to a compressed file name\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, "LZOpenFileW set test.nErrCode to %d\n", - test.nErrCode); - /* Note that W-function returns A-string by a OFSTRUCT.szPathName: */ - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - delete_fileW(filenameW_); - delete_fileW(dotlessW_); - delete_fileW(extlessW_); - delete_fileW(_terminatedW_); -} - -static void test_LZOpenFileW_nonexisting_compressed(void) -{ - OFSTRUCT test; - INT file; - char expected[MAX_PATH]; - char filled_0xA5[OFS_MAXPATHNAME]; - - /* Try to open nonexisting compressed files: */ - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(filename_, expected, FALSE); - SetLastError(0xfaceabee); - - /* a, using 8.3-conformant file name. */ - file = LZOpenFileW(filenameW, &test, OF_EXIST); - /* If the file "foo.xxx" does not exist, LZOpenFileA should then - check for the file "foo.xx_" and open that -- at least on some - operating systems. Doesn't seem to on my copy of Win98. - */ - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileW succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, filled_0xA5); - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(dotless_, expected, FALSE); - SetLastError(0xfaceabee); - - /* b, using dotless file name. */ - file = LZOpenFileW(dotlessW, &test, OF_EXIST); - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileW succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, filled_0xA5); - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(extless_, expected, FALSE); - SetLastError(0xfaceabee); - - /* c, using extensionless file name. */ - file = LZOpenFileW(extlessW, &test, OF_EXIST); - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileW succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, filled_0xA5); - - memset(&filled_0xA5, 0xA5, OFS_MAXPATHNAME); - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(_terminated_, expected, FALSE); - SetLastError(0xfaceabee); - - /* d, using underscore-terminated file name. */ - file = LZOpenFileW(_terminatedW, &test, OF_EXIST); - ok(file == LZERROR_BADINHANDLE, - "LZOpenFileW succeeded on nonexistent file\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "GetLastError() returns %d\n", GetLastError()); - todo_wine - ok(test.cBytes == 0xA5, - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_FILE_NOT_FOUND, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s' or '%s'\n", - test.szPathName, expected, filled_0xA5); -} - -static void test_LZOpenFileW(void) -{ - OFSTRUCT test; - DWORD retval; - INT file; - static WCHAR badfilenameW[] = {'b','a','d','f','i','l','e','n','a','m','e','.','x','t','n',0}; - char expected[MAX_PATH]; - - SetLastError(0xfaceabee); - /* Check for nonexistent file. */ - file = LZOpenFileW(badfilenameW, &test, OF_READ); - ok(GetLastError() == ERROR_FILE_NOT_FOUND || GetLastError() == ERROR_CALL_NOT_IMPLEMENTED, - "GetLastError() returns %d\n", GetLastError()); - if(GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - trace("LZOpenFileW call not implemented, skipping rest of the test\n"); - return; - } - ok(file == LZERROR_BADINHANDLE, "LZOpenFileW succeeded on nonexistent file\n"); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - full_file_path_name_in_a_CWD(filename_, expected, FALSE); - - /* Create an empty file. */ - file = LZOpenFileW(filenameW_, &test, OF_CREATE); - ok(file >= 0, "LZOpenFile failed on creation\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - retval = GetFileAttributesW(filenameW_); - ok(retval != INVALID_FILE_ATTRIBUTES, "GetFileAttributes: error %d\n", - GetLastError()); - - /* Check various opening options: */ - memset(&test, 0xA5, sizeof(test)); - - /* a, for reading. */ - file = LZOpenFileW(filenameW_, &test, OF_READ); - ok(file >= 0, "LZOpenFileW failed on read\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - - /* b, for writing. */ - file = LZOpenFileW(filenameW_, &test, OF_WRITE); - ok(file >= 0, "LZOpenFileW failed on write\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - - /* c, for reading and writing. */ - file = LZOpenFileW(filenameW_, &test, OF_READWRITE); - ok(file >= 0, "LZOpenFileW failed on read/write\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - - /* d, for checking file existence. */ - file = LZOpenFileW(filenameW_, &test, OF_EXIST); - ok(file >= 0, "LZOpenFileW failed on read/write\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - memset(&test, 0xA5, sizeof(test)); - - /* Delete the file then make sure it doesn't exist anymore. */ - file = LZOpenFileW(filenameW_, &test, OF_DELETE); - ok(file >= 0, "LZOpenFileW failed on delete\n"); - ok(test.cBytes == sizeof(OFSTRUCT), - "LZOpenFileW set test.cBytes to %d\n", test.cBytes); - ok(test.nErrCode == ERROR_SUCCESS, - "LZOpenFileW set test.nErrCode to %d\n", test.nErrCode); - ok(lstrcmpA(test.szPathName, expected) == 0, - "LZOpenFileW returned '%s', but was expected to return '%s'\n", - test.szPathName, expected); - LZClose(file); - - retval = GetFileAttributesW(filenameW_); - ok(retval == INVALID_FILE_ATTRIBUTES, - "GetFileAttributesW succeeded on deleted file\n"); - - test_LZOpenFileW_existing_compressed(); - test_LZOpenFileW_nonexisting_compressed(); -} - - -START_TEST(lzexpand_main) -{ - buf = malloc(uncompressed_data_size * 2); - test_LZOpenFileA(); - test_LZOpenFileW(); - test_LZRead(); - test_LZCopy(); - free(buf); -} diff --git a/rostests/winetests/lz32/testlist.c b/rostests/winetests/lz32/testlist.c deleted file mode 100644 index f0503e71de7..00000000000 --- a/rostests/winetests/lz32/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_lzexpand_main(void); - -const struct test winetest_testlist[] = -{ - { "lzexpand_main", func_lzexpand_main }, - { 0, 0 } -}; diff --git a/rostests/winetests/mapi32/imalloc.c b/rostests/winetests/mapi32/imalloc.c deleted file mode 100644 index 63c66f27747..00000000000 --- a/rostests/winetests/mapi32/imalloc.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Unit test suite for MAPI IMalloc functions - * - * 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 - */ - -#define COBJMACROS -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "winerror.h" -#include "winnt.h" -#include "mapiutil.h" - -static HMODULE hMapi32 = 0; - -static SCODE (WINAPI *pScInitMapiUtil)(ULONG); -static LPMALLOC (WINAPI *pMAPIGetDefaultMalloc)(void); - -static void test_IMalloc(void) -{ - LPVOID lpMem; - ULONG ulRef; - int iRet; - HRESULT hRet; - LPMALLOC lpMalloc; - LPVOID lpVoid; - - pMAPIGetDefaultMalloc = (void*)GetProcAddress(hMapi32, - "MAPIGetDefaultMalloc@0"); - if (!pMAPIGetDefaultMalloc) - return; - - lpMalloc = pMAPIGetDefaultMalloc(); - if (!lpMalloc) - return; - - lpVoid = NULL; - hRet = IMalloc_QueryInterface(lpMalloc, &IID_IUnknown, &lpVoid); - ok (hRet == S_OK && lpVoid != NULL, - "IID_IUnknown: expected S_OK, non-null, got 0x%08x, %p\n", - hRet, lpVoid); - - lpVoid = NULL; - hRet = IMalloc_QueryInterface(lpMalloc, &IID_IMalloc, &lpVoid); - ok (hRet == S_OK && lpVoid != NULL, - "IID_IIMalloc: expected S_OK, non-null, got 0x%08x, %p\n", - hRet, lpVoid); - - /* Prove that native mapi uses LocalAlloc/LocalFree */ - lpMem = IMalloc_Alloc(lpMalloc, 61); - ok (lpMem && IMalloc_GetSize(lpMalloc, lpMem) == - LocalSize((HANDLE)lpMem), - "Expected non-null, same size, got %p, %s size\n", lpMem, - lpMem ? "different" : "same"); - - iRet = IMalloc_DidAlloc(lpMalloc, lpMem); - ok (iRet == -1, "DidAlloc, expected -1. got %d\n", iRet); - - IMalloc_HeapMinimize(lpMalloc); - - LocalFree(lpMem); - - ulRef = IMalloc_AddRef(lpMalloc); - ok (ulRef == 1u, "AddRef expected 1, returned %d\n", ulRef); - - ulRef = IMalloc_Release(lpMalloc); - ok (ulRef == 1u, "AddRef expected 1, returned %d\n", ulRef); - - IMalloc_Release(lpMalloc); -} - -START_TEST(imalloc) -{ - SCODE ret; - - hMapi32 = LoadLibraryA("mapi32.dll"); - - pScInitMapiUtil = (void*)GetProcAddress(hMapi32, "ScInitMapiUtil@4"); - if (!pScInitMapiUtil) - { - skip("ScInitMapiUtil is not available\n"); - FreeLibrary(hMapi32); - return; - } - - SetLastError(0xdeadbeef); - ret = pScInitMapiUtil(0); - if ((ret != S_OK) && (GetLastError() == ERROR_PROC_NOT_FOUND)) - { - skip("ScInitMapiUtil is not implemented\n"); - FreeLibrary(hMapi32); - return; - } - - test_IMalloc(); - - FreeLibrary(hMapi32); -} diff --git a/rostests/winetests/mapi32/mapi32.rbuild b/rostests/winetests/mapi32/mapi32.rbuild deleted file mode 100644 index 41653e5d05e..00000000000 --- a/rostests/winetests/mapi32/mapi32.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - - . - imalloc.c - prop.c - util.c - testlist.c - wine - kernel32 - uuid - ntdll - - diff --git a/rostests/winetests/mapi32/prop.c b/rostests/winetests/mapi32/prop.c deleted file mode 100644 index a2b92891934..00000000000 --- a/rostests/winetests/mapi32/prop.c +++ /dev/null @@ -1,1388 +0,0 @@ -/* - * Unit test suite for MAPI property functions - * - * 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 - */ - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "winerror.h" -#include "winnt.h" -#include "initguid.h" -#include "mapiutil.h" -#include "mapitags.h" - -static HMODULE hMapi32 = 0; - -static SCODE (WINAPI *pScInitMapiUtil)(ULONG); -static SCODE (WINAPI *pPropCopyMore)(LPSPropValue,LPSPropValue,ALLOCATEMORE*,LPVOID); -static ULONG (WINAPI *pUlPropSize)(LPSPropValue); -static BOOL (WINAPI *pFPropContainsProp)(LPSPropValue,LPSPropValue,ULONG); -static BOOL (WINAPI *pFPropCompareProp)(LPSPropValue,ULONG,LPSPropValue); -static LONG (WINAPI *pLPropCompareProp)(LPSPropValue,LPSPropValue); -static LPSPropValue (WINAPI *pPpropFindProp)(LPSPropValue,ULONG,ULONG); -static SCODE (WINAPI *pScCountProps)(INT,LPSPropValue,ULONG*); -static SCODE (WINAPI *pScCopyProps)(int,LPSPropValue,LPVOID,ULONG*); -static SCODE (WINAPI *pScRelocProps)(int,LPSPropValue,LPVOID,LPVOID,ULONG*); -static LPSPropValue (WINAPI *pLpValFindProp)(ULONG,ULONG,LPSPropValue); -static BOOL (WINAPI *pFBadRglpszA)(LPSTR*,ULONG); -static BOOL (WINAPI *pFBadRglpszW)(LPWSTR*,ULONG); -static BOOL (WINAPI *pFBadRowSet)(LPSRowSet); -static ULONG (WINAPI *pFBadPropTag)(ULONG); -static ULONG (WINAPI *pFBadRow)(LPSRow); -static ULONG (WINAPI *pFBadProp)(LPSPropValue); -static ULONG (WINAPI *pFBadColumnSet)(LPSPropTagArray); -static SCODE (WINAPI *pCreateIProp)(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*, - FREEBUFFER*,LPVOID,LPPROPDATA*); -static SCODE (WINAPI *pMAPIAllocateBuffer)(ULONG, LPVOID); -static SCODE (WINAPI *pMAPIAllocateMore)(ULONG, LPVOID, LPVOID); -static SCODE (WINAPI *pMAPIFreeBuffer)(LPVOID); - -static BOOL InitFuncPtrs(void) -{ - hMapi32 = LoadLibraryA("mapi32.dll"); - - pScInitMapiUtil = (void*)GetProcAddress(hMapi32, "ScInitMapiUtil@4"); - pMAPIAllocateBuffer = (void*)GetProcAddress(hMapi32, "MAPIAllocateBuffer"); - pMAPIAllocateMore = (void*)GetProcAddress(hMapi32, "MAPIAllocateMore"); - pMAPIFreeBuffer = (void*)GetProcAddress(hMapi32, "MAPIFreeBuffer"); - if(pScInitMapiUtil && pMAPIAllocateBuffer && pMAPIAllocateMore && pMAPIFreeBuffer) - return TRUE; - else - return FALSE; -} - -static ULONG ptTypes[] = { - PT_I2, PT_I4, PT_R4, PT_R8, PT_CURRENCY, PT_APPTIME, PT_SYSTIME, - PT_ERROR, PT_BOOLEAN, PT_I8, PT_CLSID, PT_STRING8, PT_BINARY, - PT_UNICODE -}; - -static inline int strcmpW(const WCHAR *str1, const WCHAR *str2) -{ - while (*str1 && (*str1 == *str2)) { str1++; str2++; } - return *str1 - *str2; -} - -static void test_PropCopyMore(void) -{ - static char szHiA[] = "Hi!"; - static WCHAR szHiW[] = { 'H', 'i', '!', '\0' }; - SPropValue *lpDest = NULL, *lpSrc = NULL; - ULONG i; - SCODE scode; - - pPropCopyMore = (void*)GetProcAddress(hMapi32, "PropCopyMore@16"); - - if (!pPropCopyMore) - return; - - scode = pMAPIAllocateBuffer(sizeof(LPSPropValue), (LPVOID *)lpDest); - if (FAILED(scode)) - return; - - scode = pMAPIAllocateMore(sizeof(LPSPropValue), lpDest, (LPVOID *)lpSrc); - if (FAILED(scode)) - return; - - for (i = 0; i < sizeof(ptTypes)/sizeof(ptTypes[0]); i++) - { - lpSrc->ulPropTag = ptTypes[i]; - - switch (ptTypes[i]) - { - case PT_STRING8: - lpSrc->Value.lpszA = szHiA; - break; - case PT_UNICODE: - lpSrc->Value.lpszW = szHiW; - break; - case PT_BINARY: - lpSrc->Value.bin.cb = 4; - lpSrc->Value.bin.lpb = (LPBYTE)szHiA; - break; - } - - memset(lpDest, 0xff, sizeof(SPropValue)); - - scode = pPropCopyMore(lpDest, lpSrc, (ALLOCATEMORE*)pMAPIAllocateMore, lpDest); - ok(!scode && lpDest->ulPropTag == lpSrc->ulPropTag, - "PropCopyMore: Expected 0x0,%d, got 0x%08x,%d\n", - lpSrc->ulPropTag, scode, lpDest->ulPropTag); - if (SUCCEEDED(scode)) - { - switch (ptTypes[i]) - { - case PT_STRING8: - ok(lstrcmpA(lpDest->Value.lpszA, lpSrc->Value.lpszA) == 0, - "PropCopyMore: Ascii string differs\n"); - break; - case PT_UNICODE: - ok(strcmpW(lpDest->Value.lpszW, lpSrc->Value.lpszW) == 0, - "PropCopyMore: Unicode string differs\n"); - break; - case PT_BINARY: - ok(lpDest->Value.bin.cb == 4 && - !memcmp(lpSrc->Value.bin.lpb, lpDest->Value.bin.lpb, 4), - "PropCopyMore: Binary array differs\n"); - break; - } - } - } - - /* Since all allocations are linked, freeing lpDest frees everything */ - pMAPIFreeBuffer(lpDest); -} - -static void test_UlPropSize(void) -{ - static char szHiA[] = "Hi!"; - static WCHAR szHiW[] = { 'H', 'i', '!', '\0' }; - LPSTR buffa[2]; - LPWSTR buffw[2]; - SBinary buffbin[2]; - ULONG pt, exp, res; - - pUlPropSize = (void*)GetProcAddress(hMapi32, "UlPropSize@4"); - - if (!pUlPropSize) - return; - - for (pt = 0; pt < PROP_ID_INVALID; pt++) - { - SPropValue pv; - - memset(&pv, 0 ,sizeof(pv)); - pv.ulPropTag = pt; - - exp = 1u; /* Default to one item for non-MV properties */ - - switch (PROP_TYPE(pt)) - { - case PT_MV_I2: pv.Value.MVi.cValues = exp = 2; - case PT_I2: exp *= sizeof(USHORT); break; - case PT_MV_I4: pv.Value.MVl.cValues = exp = 2; - case PT_I4: exp *= sizeof(LONG); break; - case PT_MV_R4: pv.Value.MVflt.cValues = exp = 2; - case PT_R4: exp *= sizeof(float); break; - case PT_MV_DOUBLE: pv.Value.MVdbl.cValues = exp = 2; - case PT_R8: exp *= sizeof(double); break; - case PT_MV_CURRENCY: pv.Value.MVcur.cValues = exp = 2; - case PT_CURRENCY: exp *= sizeof(CY); break; - case PT_MV_APPTIME: pv.Value.MVat.cValues = exp = 2; - case PT_APPTIME: exp *= sizeof(double); break; - case PT_MV_SYSTIME: pv.Value.MVft.cValues = exp = 2; - case PT_SYSTIME: exp *= sizeof(FILETIME); break; - case PT_ERROR: exp = sizeof(SCODE); break; - case PT_BOOLEAN: exp = sizeof(USHORT); break; - case PT_OBJECT: exp = 0; break; - case PT_MV_I8: pv.Value.MVli.cValues = exp = 2; - case PT_I8: exp *= sizeof(LONG64); break; -#if 0 - /* My version of native mapi returns 0 for PT_MV_CLSID even if a valid - * array is given. This _has_ to be a bug, so Wine does - * the right thing(tm) and we don't test it here. - */ - case PT_MV_CLSID: pv.Value.MVguid.cValues = exp = 2; -#endif - case PT_CLSID: exp *= sizeof(GUID); break; - case PT_STRING8: - pv.Value.lpszA = szHiA; - exp = 4; - break; - case PT_UNICODE: - pv.Value.lpszW = szHiW; - exp = 4 * sizeof(WCHAR); - break; - case PT_BINARY: - pv.Value.bin.cb = exp = 19; - break; - case PT_MV_STRING8: - pv.Value.MVszA.cValues = 2; - pv.Value.MVszA.lppszA = buffa; - buffa[0] = szHiA; - buffa[1] = szHiA; - exp = 8; - break; - case PT_MV_UNICODE: - pv.Value.MVszW.cValues = 2; - pv.Value.MVszW.lppszW = buffw; - buffw[0] = szHiW; - buffw[1] = szHiW; - exp = 8 * sizeof(WCHAR); - break; - case PT_MV_BINARY: - pv.Value.MVbin.cValues = 2; - pv.Value.MVbin.lpbin = buffbin; - buffbin[0].cb = 19; - buffbin[1].cb = 1; - exp = 20; - break; - default: - exp = 0; - } - - res = pUlPropSize(&pv); - ok(res == exp, "pt= %d: Expected %d, got %d\n", pt, exp, res); - } -} - -static void test_FPropContainsProp(void) -{ - static char szFull[] = "Full String"; - static char szFullLower[] = "full string"; - static char szPrefix[] = "Full"; - static char szPrefixLower[] = "full"; - static char szSubstring[] = "ll St"; - static char szSubstringLower[] = "ll st"; - SPropValue pvLeft, pvRight; - ULONG pt; - BOOL bRet; - - pFPropContainsProp = (void*)GetProcAddress(hMapi32, "FPropContainsProp@12"); - - if (!pFPropContainsProp) - return; - - /* Ensure that only PT_STRING8 and PT_BINARY are handled */ - for (pt = 0; pt < PROP_ID_INVALID; pt++) - { - if (pt == PT_STRING8 || pt == PT_BINARY) - continue; /* test these later */ - - memset(&pvLeft, 0 ,sizeof(pvLeft)); - memset(&pvRight, 0 ,sizeof(pvRight)); - pvLeft.ulPropTag = pvRight.ulPropTag = pt; - - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING); - ok(bRet == FALSE, "pt= %d: Expected FALSE, got %d\n", pt, bRet); - } - - /* test the various flag combinations */ - pvLeft.ulPropTag = pvRight.ulPropTag = PT_STRING8; - pvLeft.Value.lpszA = szFull; - pvRight.Value.lpszA = szFull; - - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING); - ok(bRet == TRUE, "(full,full)[] match failed\n"); - pvRight.Value.lpszA = szPrefix; - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING); - ok(bRet == FALSE, "(full,prefix)[] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX); - ok(bRet == TRUE, "(full,prefix)[PREFIX] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING); - ok(bRet == TRUE, "(full,prefix)[SUBSTRING] match failed\n"); - pvRight.Value.lpszA = szPrefixLower; - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX); - ok(bRet == FALSE, "(full,prefixlow)[PREFIX] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING); - ok(bRet == FALSE, "(full,prefixlow)[SUBSTRING] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX|FL_IGNORECASE); - ok(bRet == TRUE, "(full,prefixlow)[PREFIX|IGNORECASE] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING|FL_IGNORECASE); - ok(bRet == TRUE, "(full,prefixlow)[SUBSTRING|IGNORECASE] match failed\n"); - pvRight.Value.lpszA = szSubstring; - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING); - ok(bRet == FALSE, "(full,substr)[] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX); - ok(bRet == FALSE, "(full,substr)[PREFIX] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING); - ok(bRet == TRUE, "(full,substr)[SUBSTRING] match failed\n"); - pvRight.Value.lpszA = szSubstringLower; - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX); - ok(bRet == FALSE, "(full,substrlow)[PREFIX] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING); - ok(bRet == FALSE, "(full,substrlow)[SUBSTRING] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX|FL_IGNORECASE); - ok(bRet == FALSE, "(full,substrlow)[PREFIX|IGNORECASE] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING|FL_IGNORECASE); - ok(bRet == TRUE, "(full,substrlow)[SUBSTRING|IGNORECASE] match failed\n"); - pvRight.Value.lpszA = szFullLower; - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING|FL_IGNORECASE); - ok(bRet == TRUE, "(full,fulllow)[IGNORECASE] match failed\n"); - - pvLeft.ulPropTag = pvRight.ulPropTag = PT_BINARY; - pvLeft.Value.bin.lpb = (LPBYTE)szFull; - pvRight.Value.bin.lpb = (LPBYTE)szFull; - pvLeft.Value.bin.cb = pvRight.Value.bin.cb = strlen(szFull); - - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING); - ok(bRet == TRUE, "bin(full,full)[] match failed\n"); - pvRight.Value.bin.lpb = (LPBYTE)szPrefix; - pvRight.Value.bin.cb = strlen(szPrefix); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING); - ok(bRet == FALSE, "bin(full,prefix)[] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX); - ok(bRet == TRUE, "bin(full,prefix)[PREFIX] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING); - ok(bRet == TRUE, "bin(full,prefix)[SUBSTRING] match failed\n"); - pvRight.Value.bin.lpb = (LPBYTE)szPrefixLower; - pvRight.Value.bin.cb = strlen(szPrefixLower); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX); - ok(bRet == FALSE, "bin(full,prefixlow)[PREFIX] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING); - ok(bRet == FALSE, "bin(full,prefixlow)[SUBSTRING] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX|FL_IGNORECASE); - ok(bRet == FALSE, "bin(full,prefixlow)[PREFIX|IGNORECASE] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING|FL_IGNORECASE); - ok(bRet == FALSE, "bin(full,prefixlow)[SUBSTRING|IGNORECASE] match failed\n"); - pvRight.Value.bin.lpb = (LPBYTE)szSubstring; - pvRight.Value.bin.cb = strlen(szSubstring); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING); - ok(bRet == FALSE, "bin(full,substr)[] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX); - ok(bRet == FALSE, "bin(full,substr)[PREFIX] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING); - ok(bRet == TRUE, "bin(full,substr)[SUBSTRING] match failed\n"); - pvRight.Value.bin.lpb = (LPBYTE)szSubstringLower; - pvRight.Value.bin.cb = strlen(szSubstringLower); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX); - ok(bRet == FALSE, "bin(full,substrlow)[PREFIX] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING); - ok(bRet == FALSE, "bin(full,substrlow)[SUBSTRING] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX|FL_IGNORECASE); - ok(bRet == FALSE, "bin(full,substrlow)[PREFIX|IGNORECASE] match failed\n"); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING|FL_IGNORECASE); - ok(bRet == FALSE, "bin(full,substrlow)[SUBSTRING|IGNORECASE] match failed\n"); - pvRight.Value.bin.lpb = (LPBYTE)szFullLower; - pvRight.Value.bin.cb = strlen(szFullLower); - bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING|FL_IGNORECASE); - ok(bRet == FALSE, "bin(full,fulllow)[IGNORECASE] match failed\n"); -} - -typedef struct tagFPropCompareProp_Result -{ - SHORT lVal; - SHORT rVal; - ULONG relOp; - BOOL bRet; -} FPropCompareProp_Result; - -static const FPropCompareProp_Result FPCProp_Results[] = -{ - { 1, 2, RELOP_LT, TRUE }, - { 1, 1, RELOP_LT, FALSE }, - { 2, 1, RELOP_LT, FALSE }, - { 1, 2, RELOP_LE, TRUE }, - { 1, 1, RELOP_LE, TRUE }, - { 2, 1, RELOP_LE, FALSE }, - { 1, 2, RELOP_GT, FALSE }, - { 1, 1, RELOP_GT, FALSE }, - { 2, 1, RELOP_GT, TRUE }, - { 1, 2, RELOP_GE, FALSE }, - { 1, 1, RELOP_GE, TRUE }, - { 2, 1, RELOP_GE, TRUE }, - { 1, 2, RELOP_EQ, FALSE }, - { 1, 1, RELOP_EQ, TRUE }, - { 2, 1, RELOP_EQ, FALSE } -}; - -static const char *relops[] = { "RELOP_LT", "RELOP_LE", "RELOP_GT", "RELOP_GE", "RELOP_EQ" }; - -static void test_FPropCompareProp(void) -{ - SPropValue pvLeft, pvRight; - GUID lguid, rguid; - char lbuffa[2], rbuffa[2]; - WCHAR lbuffw[2], rbuffw[2]; - ULONG i, j; - BOOL bRet, bExp; - - pFPropCompareProp = (void*)GetProcAddress(hMapi32, "FPropCompareProp@12"); - - if (!pFPropCompareProp) - return; - - lbuffa[1] = '\0'; - rbuffa[1] = '\0'; - lbuffw[1] = '\0'; - rbuffw[1] = '\0'; - - for (i = 0; i < sizeof(ptTypes)/sizeof(ptTypes[0]); i++) - { - pvLeft.ulPropTag = pvRight.ulPropTag = ptTypes[i]; - - for (j = 0; j < sizeof(FPCProp_Results)/sizeof(FPCProp_Results[0]); j++) - { - SHORT lVal = FPCProp_Results[j].lVal; - SHORT rVal = FPCProp_Results[j].rVal; - - bExp = FPCProp_Results[j].bRet; - - switch (ptTypes[i]) - { - case PT_BOOLEAN: - /* Boolean values have no concept of less or greater than, only equality */ - if ((lVal == 1 && rVal == 2 && FPCProp_Results[j].relOp == RELOP_LT) || - (lVal == 2 && rVal == 1 && FPCProp_Results[j].relOp == RELOP_LE)|| - (lVal == 2 && rVal == 1 && FPCProp_Results[j].relOp == RELOP_GT)|| - (lVal == 1 && rVal == 2 && FPCProp_Results[j].relOp == RELOP_GE)|| - (lVal == 1 && rVal == 2 && FPCProp_Results[j].relOp == RELOP_EQ)|| - (lVal == 2 && rVal == 1 && FPCProp_Results[j].relOp == RELOP_EQ)) - bExp = !bExp; - /* Fall through ... */ - case PT_I2: - pvLeft.Value.i = lVal; - pvRight.Value.i = rVal; - break; - case PT_ERROR: - case PT_I4: - pvLeft.Value.l = lVal; - pvRight.Value.l = rVal; - break; - case PT_R4: - pvLeft.Value.flt = lVal; - pvRight.Value.flt = rVal; - break; - case PT_APPTIME: - case PT_R8: - pvLeft.Value.dbl = lVal; - pvRight.Value.dbl = rVal; - break; - case PT_CURRENCY: - pvLeft.Value.cur.int64 = lVal; - pvRight.Value.cur.int64 = rVal; - break; - case PT_SYSTIME: - pvLeft.Value.ft.dwLowDateTime = lVal; - pvLeft.Value.ft.dwHighDateTime = 0; - pvRight.Value.ft.dwLowDateTime = rVal; - pvRight.Value.ft.dwHighDateTime = 0; - break; - case PT_I8: - pvLeft.Value.li.u.LowPart = lVal; - pvLeft.Value.li.u.HighPart = 0; - pvRight.Value.li.u.LowPart = rVal; - pvRight.Value.li.u.HighPart = 0; - break; - case PT_CLSID: - memset(&lguid, 0, sizeof(GUID)); - memset(&rguid, 0, sizeof(GUID)); - lguid.Data4[7] = lVal; - rguid.Data4[7] = rVal; - pvLeft.Value.lpguid = &lguid; - pvRight.Value.lpguid = &rguid; - break; - case PT_STRING8: - pvLeft.Value.lpszA = lbuffa; - pvRight.Value.lpszA = rbuffa; - lbuffa[0] = '0' + lVal; - rbuffa[0] = '0' + rVal; - break; - case PT_UNICODE: - pvLeft.Value.lpszW = lbuffw; - pvRight.Value.lpszW = rbuffw; - lbuffw[0] = '0' + lVal; - rbuffw[0] = '0' + rVal; - break; - case PT_BINARY: - pvLeft.Value.bin.cb = 1; - pvRight.Value.bin.cb = 1; - pvLeft.Value.bin.lpb = (LPBYTE)lbuffa; - pvRight.Value.bin.lpb = (LPBYTE)rbuffa; - lbuffa[0] = lVal; - rbuffa[0] = rVal; - break; - } - - bRet = pFPropCompareProp(&pvLeft, FPCProp_Results[j].relOp, &pvRight); - ok(bRet == bExp, "pt %d (%d,%d,%s): expected %d, got %d\n", ptTypes[i], - FPCProp_Results[j].lVal, FPCProp_Results[j].rVal, - relops[FPCProp_Results[j].relOp], bExp, bRet); - } - } -} - -typedef struct tagLPropCompareProp_Result -{ - SHORT lVal; - SHORT rVal; - INT iRet; -} LPropCompareProp_Result; - -static const LPropCompareProp_Result LPCProp_Results[] = -{ - { 1, 2, -1 }, - { 1, 1, 0 }, - { 2, 1, 1 }, -}; - -static void test_LPropCompareProp(void) -{ - SPropValue pvLeft, pvRight; - GUID lguid, rguid; - char lbuffa[2], rbuffa[2]; - WCHAR lbuffw[2], rbuffw[2]; - ULONG i, j; - INT iRet, iExp; - - pLPropCompareProp = (void*)GetProcAddress(hMapi32, "LPropCompareProp@8"); - - if (!pLPropCompareProp) - return; - - lbuffa[1] = '\0'; - rbuffa[1] = '\0'; - lbuffw[1] = '\0'; - rbuffw[1] = '\0'; - - for (i = 0; i < sizeof(ptTypes)/sizeof(ptTypes[0]); i++) - { - pvLeft.ulPropTag = pvRight.ulPropTag = ptTypes[i]; - - for (j = 0; j < sizeof(LPCProp_Results)/sizeof(LPCProp_Results[0]); j++) - { - SHORT lVal = LPCProp_Results[j].lVal; - SHORT rVal = LPCProp_Results[j].rVal; - - iExp = LPCProp_Results[j].iRet; - - switch (ptTypes[i]) - { - case PT_BOOLEAN: - /* Boolean values have no concept of less or greater than, only equality */ - if (lVal && rVal) - iExp = 0; - /* Fall through ... */ - case PT_I2: - pvLeft.Value.i = lVal; - pvRight.Value.i = rVal; - break; - case PT_ERROR: - case PT_I4: - pvLeft.Value.l = lVal; - pvRight.Value.l = rVal; - break; - case PT_R4: - pvLeft.Value.flt = lVal; - pvRight.Value.flt = rVal; - break; - case PT_APPTIME: - case PT_R8: - pvLeft.Value.dbl = lVal; - pvRight.Value.dbl = rVal; - break; - case PT_CURRENCY: - pvLeft.Value.cur.int64 = lVal; - pvRight.Value.cur.int64 = rVal; - break; - case PT_SYSTIME: - pvLeft.Value.ft.dwLowDateTime = lVal; - pvLeft.Value.ft.dwHighDateTime = 0; - pvRight.Value.ft.dwLowDateTime = rVal; - pvRight.Value.ft.dwHighDateTime = 0; - break; - case PT_I8: - pvLeft.Value.li.u.LowPart = lVal; - pvLeft.Value.li.u.HighPart = 0; - pvRight.Value.li.u.LowPart = rVal; - pvRight.Value.li.u.HighPart = 0; - break; - case PT_CLSID: - memset(&lguid, 0, sizeof(GUID)); - memset(&rguid, 0, sizeof(GUID)); - lguid.Data4[7] = lVal; - rguid.Data4[7] = rVal; - pvLeft.Value.lpguid = &lguid; - pvRight.Value.lpguid = &rguid; - break; - case PT_STRING8: - pvLeft.Value.lpszA = lbuffa; - pvRight.Value.lpszA = rbuffa; - lbuffa[0] = '0' + lVal; - rbuffa[0] = '0' + rVal; - break; - case PT_UNICODE: - pvLeft.Value.lpszW = lbuffw; - pvRight.Value.lpszW = rbuffw; - lbuffw[0] = '0' + lVal; - rbuffw[0] = '0' + rVal; - break; - case PT_BINARY: - pvLeft.Value.bin.cb = 1; - pvRight.Value.bin.cb = 1; - pvLeft.Value.bin.lpb = (LPBYTE)lbuffa; - pvRight.Value.bin.lpb = (LPBYTE)rbuffa; - lbuffa[0] = lVal; - rbuffa[0] = rVal; - break; - } - - iRet = pLPropCompareProp(&pvLeft, &pvRight); - ok(iRet == iExp, "pt %d (%d,%d): expected %d, got %d\n", ptTypes[i], - LPCProp_Results[j].lVal, LPCProp_Results[j].rVal, iExp, iRet); - } - } -} - -static void test_PpropFindProp(void) -{ - SPropValue pvProp, *pRet; - ULONG i; - - pPpropFindProp = (void*)GetProcAddress(hMapi32, "PpropFindProp@12"); - - if (!pPpropFindProp) - return; - - for (i = 0; i < sizeof(ptTypes)/sizeof(ptTypes[0]); i++) - { - pvProp.ulPropTag = ptTypes[i]; - - pRet = pPpropFindProp(&pvProp, 1u, ptTypes[i]); - ok(pRet == &pvProp, "PpropFindProp[%d]: Didn't find existing propery\n", - ptTypes[i]); - - pRet = pPpropFindProp(&pvProp, 1u, i ? ptTypes[i-1] : ptTypes[i+1]); - ok(pRet == NULL, "PpropFindProp[%d]: Found nonexistent propery\n", - ptTypes[i]); - } - - pvProp.ulPropTag = PROP_TAG(PT_I2, 1u); - pRet = pPpropFindProp(&pvProp, 1u, PROP_TAG(PT_UNSPECIFIED, 0u)); - ok(pRet == NULL, "PpropFindProp[UNSPECIFIED]: Matched on different id\n"); - pRet = pPpropFindProp(&pvProp, 1u, PROP_TAG(PT_UNSPECIFIED, 1u)); - ok(pRet == &pvProp, "PpropFindProp[UNSPECIFIED]: Didn't match id\n"); -} - -static void test_ScCountProps(void) -{ - static char szHiA[] = "Hi!"; - static WCHAR szHiW[] = { 'H', 'i', '!', '\0' }; - static const ULONG ULHILEN = 4; /* chars in szHiA/W incl. NUL */ - LPSTR buffa[3]; - LPWSTR buffw[3]; - SBinary buffbin[3]; - GUID iids[4], *iid = iids; - SCODE res; - ULONG pt, exp, ulRet; - int success = 1; - - pScCountProps = (void*)GetProcAddress(hMapi32, "ScCountProps@12"); - - if (!pScCountProps) - return; - - for (pt = 0; pt < PROP_ID_INVALID && success; pt++) - { - SPropValue pv; - - memset(&pv, 0 ,sizeof(pv)); - pv.ulPropTag = PROP_TAG(pt, 1u); - - switch (PROP_TYPE(pt)) - { - case PT_I2: - case PT_I4: - case PT_R4: - case PT_R8: - case PT_CURRENCY: - case PT_APPTIME: - case PT_SYSTIME: - case PT_ERROR: - case PT_BOOLEAN: - case PT_OBJECT: - case PT_I8: - exp = sizeof(pv); - break; - case PT_CLSID: - pv.Value.lpguid = iid; - exp = sizeof(GUID) + sizeof(pv); - break; - case PT_STRING8: - pv.Value.lpszA = szHiA; - exp = 4 + sizeof(pv); - break; - case PT_UNICODE: - pv.Value.lpszW = szHiW; - exp = 4 * sizeof(WCHAR) + sizeof(pv); - break; - case PT_BINARY: - pv.Value.bin.cb = 2; - pv.Value.bin.lpb = (LPBYTE)iid; - exp = 2 + sizeof(pv); - break; - case PT_MV_I2: - pv.Value.MVi.cValues = 3; - pv.Value.MVi.lpi = (SHORT*)iid; - exp = 3 * sizeof(SHORT) + sizeof(pv); - break; - case PT_MV_I4: - pv.Value.MVl.cValues = 3; - pv.Value.MVl.lpl = (LONG*)iid; - exp = 3 * sizeof(LONG) + sizeof(pv); - break; - case PT_MV_I8: - pv.Value.MVli.cValues = 3; - pv.Value.MVli.lpli = (LARGE_INTEGER*)iid; - exp = 3 * sizeof(LARGE_INTEGER) + sizeof(pv); - break; - case PT_MV_R4: - pv.Value.MVflt.cValues = 3; - pv.Value.MVflt.lpflt = (float*)iid; - exp = 3 * sizeof(float) + sizeof(pv); - break; - case PT_MV_APPTIME: - case PT_MV_R8: - pv.Value.MVdbl.cValues = 3; - pv.Value.MVdbl.lpdbl = (double*)iid; - exp = 3 * sizeof(double) + sizeof(pv); - break; - case PT_MV_CURRENCY: - pv.Value.MVcur.cValues = 3; - pv.Value.MVcur.lpcur = (CY*)iid; - exp = 3 * sizeof(CY) + sizeof(pv); - break; - case PT_MV_SYSTIME: - pv.Value.MVft.cValues = 3; - pv.Value.MVft.lpft = (FILETIME*)iid; - exp = 3 * sizeof(CY) + sizeof(pv); - break; - case PT_MV_STRING8: - pv.Value.MVszA.cValues = 3; - pv.Value.MVszA.lppszA = buffa; - buffa[0] = szHiA; - buffa[1] = szHiA; - buffa[2] = szHiA; - exp = ULHILEN * 3 + 3 * sizeof(char*) + sizeof(pv); - break; - case PT_MV_UNICODE: - pv.Value.MVszW.cValues = 3; - pv.Value.MVszW.lppszW = buffw; - buffw[0] = szHiW; - buffw[1] = szHiW; - buffw[2] = szHiW; - exp = ULHILEN * 3 * sizeof(WCHAR) + 3 * sizeof(WCHAR*) + sizeof(pv); - break; - case PT_MV_BINARY: - pv.Value.MVbin.cValues = 3; - pv.Value.MVbin.lpbin = buffbin; - buffbin[0].cb = 17; - buffbin[0].lpb = (LPBYTE)&iid; - buffbin[1].cb = 2; - buffbin[1].lpb = (LPBYTE)&iid; - buffbin[2].cb = 1; - buffbin[2].lpb = (LPBYTE)&iid; - exp = 20 + sizeof(pv) + sizeof(SBinary) * 3; - break; - default: - exp = 0; - } - - ulRet = 0xffffffff; - res = pScCountProps(1, &pv, &ulRet); - if (!exp) { - success = res == MAPI_E_INVALID_PARAMETER && ulRet == 0xffffffff; - ok(success, "pt= %d: Expected failure, got %d, ret=0x%08X\n", - pt, ulRet, res); - } - else { - success = res == S_OK && ulRet == exp; - ok(success, "pt= %d: Expected %d, got %d, ret=0x%08X\n", - pt, exp, ulRet, res); - } - } - -} - -static void test_ScCopyRelocProps(void) -{ - static char szTestA[] = "Test"; - char buffer[512], buffer2[512], *lppszA[1]; - SPropValue pvProp, *lpResProp = (LPSPropValue)buffer; - ULONG ulCount; - SCODE sc; - - pScCopyProps = (void*)GetProcAddress(hMapi32, "ScCopyProps@16"); - pScRelocProps = (void*)GetProcAddress(hMapi32, "ScRelocProps@20"); - - if (!pScCopyProps || !pScRelocProps) - return; - - pvProp.ulPropTag = PROP_TAG(PT_MV_STRING8, 1u); - - lppszA[0] = szTestA; - pvProp.Value.MVszA.cValues = 1; - pvProp.Value.MVszA.lppszA = lppszA; - ulCount = 0; - - sc = pScCopyProps(1, &pvProp, buffer, &ulCount); - ok(sc == S_OK, "wrong ret %d\n", sc); - if(sc == S_OK) - { - ok(lpResProp->ulPropTag == pvProp.ulPropTag, "wrong tag %x\n",lpResProp->ulPropTag); - ok(lpResProp->Value.MVszA.cValues == 1, "wrong cValues %d\n", lpResProp->Value.MVszA.cValues); - ok(lpResProp->Value.MVszA.lppszA[0] == buffer + sizeof(SPropValue) + sizeof(char*), - "wrong lppszA[0] %p\n",lpResProp->Value.MVszA.lppszA[0]); - ok(ulCount == sizeof(SPropValue) + sizeof(char*) + 5, "wrong count %d\n", ulCount); - ok(!strcmp(lpResProp->Value.MVszA.lppszA[0], szTestA), - "wrong string '%s'\n", lpResProp->Value.MVszA.lppszA[0]); - } - - memcpy(buffer2, buffer, sizeof(buffer)); - - /* Clear the data in the source buffer. Since pointers in the copied buffer - * refer to the source buffer, this proves that native always assumes that - * the copied buffers pointers are bad (needing to be relocated first). - */ - memset(buffer, 0, sizeof(buffer)); - ulCount = 0; - - sc = pScRelocProps(1, (LPSPropValue)buffer2, buffer, buffer2, &ulCount); - lpResProp = (LPSPropValue)buffer2; - - ok(sc == S_OK, "wrong ret %d\n", sc); - if(sc == S_OK) - { - ok(lpResProp->ulPropTag == pvProp.ulPropTag, "wrong tag %x\n",lpResProp->ulPropTag); - ok(lpResProp->Value.MVszA.cValues == 1, "wrong cValues %d\n", lpResProp->Value.MVszA.cValues); - ok(lpResProp->Value.MVszA.lppszA[0] == buffer2 + sizeof(SPropValue) + sizeof(char*), - "wrong lppszA[0] %p\n",lpResProp->Value.MVszA.lppszA[0]); - /* Native has a bug whereby it calculates the size correctly when copying - * but when relocating does not (presumably it uses UlPropSize() which - * ignores multivalue pointers). Wine returns the correct value. - */ - ok(ulCount == sizeof(SPropValue) + sizeof(char*) + 5 || ulCount == sizeof(SPropValue) + 5, - "wrong count %d\n", ulCount); - ok(!strcmp(lpResProp->Value.MVszA.lppszA[0], szTestA), - "wrong string '%s'\n", lpResProp->Value.MVszA.lppszA[0]); - } - - /* Native crashes with lpNew or lpOld set to NULL so skip testing this */ -} - -static void test_LpValFindProp(void) -{ - SPropValue pvProp, *pRet; - ULONG i; - - pLpValFindProp = (void*)GetProcAddress(hMapi32, "LpValFindProp@12"); - - if (!pLpValFindProp) - return; - - for (i = 0; i < sizeof(ptTypes)/sizeof(ptTypes[0]); i++) - { - pvProp.ulPropTag = PROP_TAG(ptTypes[i], 1u); - - pRet = pLpValFindProp(PROP_TAG(ptTypes[i], 1u), 1u, &pvProp); - ok(pRet == &pvProp, "LpValFindProp[%d]: Didn't find existing propery id/type\n", - ptTypes[i]); - - pRet = pLpValFindProp(PROP_TAG(ptTypes[i], 0u), 1u, &pvProp); - ok(pRet == NULL, "LpValFindProp[%d]: Found nonexistent propery id\n", - ptTypes[i]); - - pRet = pLpValFindProp(PROP_TAG(PT_NULL, 0u), 1u, &pvProp); - ok(pRet == NULL, "LpValFindProp[%d]: Found nonexistent propery id/type\n", - ptTypes[i]); - - pRet = pLpValFindProp(PROP_TAG(PT_NULL, 1u), 1u, &pvProp); - ok(pRet == &pvProp, "LpValFindProp[%d]: Didn't find existing propery id\n", - ptTypes[i]); - } -} - -static void test_FBadRglpszA(void) -{ - LPSTR lpStrs[4]; - static CHAR szString[] = "A String"; - BOOL bRet; - - pFBadRglpszA = (void*)GetProcAddress(hMapi32, "FBadRglpszA@8"); - if (!pFBadRglpszA) - return; - - bRet = pFBadRglpszA(NULL, 10); - ok(bRet == TRUE, "FBadRglpszA(Null): expected TRUE, got FALSE\n"); - - lpStrs[0] = lpStrs[1] = lpStrs[2] = lpStrs[3] = NULL; - bRet = pFBadRglpszA(lpStrs, 4); - ok(bRet == TRUE, "FBadRglpszA(Nulls): expected TRUE, got FALSE\n"); - - lpStrs[0] = lpStrs[1] = lpStrs[2] = szString; - bRet = pFBadRglpszA(lpStrs, 3); - ok(bRet == FALSE, "FBadRglpszA(valid): expected FALSE, got TRUE\n"); - - bRet = pFBadRglpszA(lpStrs, 4); - ok(bRet == TRUE, "FBadRglpszA(1 invalid): expected TRUE, got FALSE\n"); -} - -static void test_FBadRglpszW(void) -{ - LPWSTR lpStrs[4]; - static WCHAR szString[] = { 'A',' ','S','t','r','i','n','g','\0' }; - BOOL bRet; - - pFBadRglpszW = (void*)GetProcAddress(hMapi32, "FBadRglpszW@8"); - if (!pFBadRglpszW) - return; - - bRet = pFBadRglpszW(NULL, 10); - ok(bRet == TRUE, "FBadRglpszW(Null): expected TRUE, got FALSE\n"); - - lpStrs[0] = lpStrs[1] = lpStrs[2] = lpStrs[3] = NULL; - bRet = pFBadRglpszW(lpStrs, 4); - ok(bRet == TRUE, "FBadRglpszW(Nulls): expected TRUE, got FALSE\n"); - - lpStrs[0] = lpStrs[1] = lpStrs[2] = szString; - bRet = pFBadRglpszW(lpStrs, 3); - ok(bRet == FALSE, "FBadRglpszW(valid): expected FALSE, got TRUE\n"); - - bRet = pFBadRglpszW(lpStrs, 4); - ok(bRet == TRUE, "FBadRglpszW(1 invalid): expected TRUE, got FALSE\n"); -} - -static void test_FBadRowSet(void) -{ - ULONG ulRet; - - pFBadRowSet = (void*)GetProcAddress(hMapi32, "FBadRowSet@4"); - if (!pFBadRowSet) - return; - - ulRet = pFBadRowSet(NULL); - ok(ulRet != 0, "FBadRow(null): Expected non-zero, got 0\n"); - - /* FIXME */ -} - -static void test_FBadPropTag(void) -{ - ULONG pt, res; - - pFBadPropTag = (void*)GetProcAddress(hMapi32, "FBadPropTag@4"); - if (!pFBadPropTag) - return; - - for (pt = 0; pt < PROP_ID_INVALID; pt++) - { - BOOL bBad = TRUE; - - switch (pt & (~MV_FLAG & PROP_TYPE_MASK)) - { - case PT_UNSPECIFIED: - case PT_NULL: case PT_I2: case PT_I4: case PT_R4: - case PT_R8: case PT_CURRENCY: case PT_APPTIME: - case PT_ERROR: case PT_BOOLEAN: case PT_OBJECT: - case PT_I8: case PT_STRING8: case PT_UNICODE: - case PT_SYSTIME: case PT_CLSID: case PT_BINARY: - bBad = FALSE; - } - - res = pFBadPropTag(pt); - if (bBad) - ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt); - else - ok(res == 0, "pt= %d: Expected zero, got %d\n", pt, res); - } -} - -static void test_FBadRow(void) -{ - ULONG ulRet; - - pFBadRow = (void*)GetProcAddress(hMapi32, "FBadRow@4"); - if (!pFBadRow) - return; - - ulRet = pFBadRow(NULL); - ok(ulRet != 0, "FBadRow(null): Expected non-zero, got 0\n"); - - /* FIXME */ -} - -static void test_FBadProp(void) -{ - static WCHAR szEmpty[] = { '\0' }; - GUID iid; - ULONG pt, res; - SPropValue pv; - - pFBadProp = (void*)GetProcAddress(hMapi32, "FBadProp@4"); - if (!pFBadProp) - return; - - for (pt = 0; pt < PROP_ID_INVALID; pt++) - { - BOOL bBad = TRUE; - - memset(&pv, 0, sizeof(pv)); - pv.ulPropTag = pt; - - /* Note that MV values are valid below because their array count is 0, - * so no pointers are validated. - */ - switch (PROP_TYPE(pt)) - { - case (MV_FLAG|PT_UNSPECIFIED): - case PT_UNSPECIFIED: - case (MV_FLAG|PT_NULL): - case PT_NULL: - case PT_MV_I2: - case PT_I2: - case PT_MV_I4: - case PT_I4: - case PT_MV_I8: - case PT_I8: - case PT_MV_R4: - case PT_R4: - case PT_MV_R8: - case PT_R8: - case PT_MV_CURRENCY: - case PT_CURRENCY: - case PT_MV_APPTIME: - case PT_APPTIME: - case (MV_FLAG|PT_ERROR): - case PT_ERROR: - case (MV_FLAG|PT_BOOLEAN): - case PT_BOOLEAN: - case (MV_FLAG|PT_OBJECT): - case PT_OBJECT: - case PT_MV_STRING8: - case PT_MV_UNICODE: - case PT_MV_SYSTIME: - case PT_SYSTIME: - case PT_MV_BINARY: - case PT_BINARY: - case PT_MV_CLSID: - bBad = FALSE; - break; - case PT_STRING8: - case PT_UNICODE: - pv.Value.lpszW = szEmpty; - bBad = FALSE; - break; - case PT_CLSID: - pv.Value.lpguid = &iid; - bBad = FALSE; - break; - } - - res = pFBadProp(&pv); - if (bBad) - ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt); - else - ok(res == 0, "pt= %d: Expected zero, got %d\n", pt, res); - } -} - -static void test_FBadColumnSet(void) -{ - SPropTagArray pta; - ULONG pt, res; - - pFBadColumnSet = (void*)GetProcAddress(hMapi32, "FBadColumnSet@4"); - if (!pFBadColumnSet) - return; - - res = pFBadColumnSet(NULL); - ok(res != 0, "(null): Expected non-zero, got 0\n"); - - pta.cValues = 1; - - for (pt = 0; pt < PROP_ID_INVALID; pt++) - { - BOOL bBad = TRUE; - - pta.aulPropTag[0] = pt; - - switch (pt & (~MV_FLAG & PROP_TYPE_MASK)) - { - case PT_UNSPECIFIED: - case PT_NULL: - case PT_I2: - case PT_I4: - case PT_R4: - case PT_R8: - case PT_CURRENCY: - case PT_APPTIME: - case PT_BOOLEAN: - case PT_OBJECT: - case PT_I8: - case PT_STRING8: - case PT_UNICODE: - case PT_SYSTIME: - case PT_CLSID: - case PT_BINARY: - bBad = FALSE; - } - if (pt == (MV_FLAG|PT_ERROR)) - bBad = FALSE; - - res = pFBadColumnSet(&pta); - if (bBad) - ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt); - else - ok(res == 0, "pt= %d: Expected zero, got %d\n", pt, res); - } -} - - -static void test_IProp(void) -{ - IPropData *lpIProp; - LPMAPIERROR lpError; - LPSPropProblemArray lpProbs; - LPSPropValue lpProps; - LPSPropTagArray lpTags; - SPropValue pvs[2]; - SizedSPropTagArray(2,tags); - ULONG access[2], count; - SCODE sc; - - pCreateIProp = (void*)GetProcAddress(hMapi32, "CreateIProp@24"); - - if (!pCreateIProp) - return; - - memset(&tags, 0 , sizeof(tags)); - - /* Create the object */ - lpIProp = NULL; - sc = pCreateIProp(&IID_IMAPIPropData, (ALLOCATEBUFFER *)pMAPIAllocateBuffer, (ALLOCATEMORE*)pMAPIAllocateMore, - (FREEBUFFER *)pMAPIFreeBuffer, NULL, &lpIProp); - ok(sc == S_OK && lpIProp, - "CreateIProp: expected S_OK, non-null, got 0x%08X,%p\n", sc, lpIProp); - - if (sc != S_OK || !lpIProp) - return; - - /* GetLastError - No errors set */ - lpError = NULL; - IPropData_GetLastError(lpIProp, E_INVALIDARG, 0, &lpError); - ok(sc == S_OK && !lpError, - "GetLastError: Expected S_OK, null, got 0x%08X,%p\n", sc, lpError); - - /* Get prop tags - succeeds returning 0 items */ - lpTags = NULL; - sc = IPropData_GetPropList(lpIProp, 0, &lpTags); - ok(sc == S_OK && lpTags && lpTags->cValues == 0, - "GetPropList(empty): Expected S_OK, non-null, 0, got 0x%08X,%p,%d\n", - sc, lpTags, lpTags ? lpTags->cValues : 0); - if (lpTags) - pMAPIFreeBuffer(lpTags); - - /* Get props - succeeds returning 0 items */ - lpProps = NULL; - count = 0; - tags.cValues = 1; - tags.aulPropTag[0] = PR_IMPORTANCE; - sc = IPropData_GetProps(lpIProp, (LPSPropTagArray)&tags, 0, &count, &lpProps); - ok(sc == MAPI_W_ERRORS_RETURNED && lpProps && count == 1, - "GetProps(empty): Expected ERRORS_RETURNED, non-null, 1, got 0x%08X,%p,%d\n", - sc, lpProps, count); - if (lpProps && count > 0) - { - ok(lpProps[0].ulPropTag == CHANGE_PROP_TYPE(PR_IMPORTANCE,PT_ERROR), - "GetProps(empty): Expected %x, got %x\n", - CHANGE_PROP_TYPE(PR_IMPORTANCE,PT_ERROR), lpProps[0].ulPropTag); - - pMAPIFreeBuffer(lpProps); - } - - /* Add (NULL) - Can't add NULLs */ - lpProbs = NULL; - pvs[0].ulPropTag = PROP_TAG(PT_NULL,0x01); - sc = IPropData_SetProps(lpIProp, 1, pvs, &lpProbs); - ok(sc == MAPI_E_INVALID_PARAMETER && !lpProbs, - "SetProps(): Expected INVALID_PARAMETER, null, got 0x%08X,%p\n", - sc, lpProbs); - - /* Add (OBJECT) - Can't add OBJECTs */ - lpProbs = NULL; - pvs[0].ulPropTag = PROP_TAG(PT_OBJECT,0x01); - sc = IPropData_SetProps(lpIProp, 1, pvs, &lpProbs); - ok(sc == MAPI_E_INVALID_PARAMETER && !lpProbs, - "SetProps(OBJECT): Expected INVALID_PARAMETER, null, got 0x%08X,%p\n", - sc, lpProbs); - - /* Add - Adds value */ - lpProbs = NULL; - pvs[0].ulPropTag = PR_IMPORTANCE; - sc = IPropData_SetProps(lpIProp, 1, pvs, &lpProbs); - ok(sc == S_OK && !lpProbs, - "SetProps(ERROR): Expected S_OK, null, got 0x%08X,%p\n", sc, lpProbs); - - /* Get prop list - returns 1 item */ - lpTags = NULL; - IPropData_GetPropList(lpIProp, 0, &lpTags); - ok(sc == S_OK && lpTags && lpTags->cValues == 1, - "GetPropList: Expected S_OK, non-null, 1, got 0x%08X,%p,%d\n", - sc, lpTags, lpTags ? lpTags->cValues : 0); - if (lpTags && lpTags->cValues > 0) - { - ok(lpTags->aulPropTag[0] == PR_IMPORTANCE, - "GetPropList: Expected %x, got %x\n", - PR_IMPORTANCE, lpTags->aulPropTag[0]); - pMAPIFreeBuffer(lpTags); - } - - /* Set access to read and write */ - sc = IPropData_HrSetObjAccess(lpIProp, IPROP_READWRITE); - ok(sc == S_OK, "SetObjAcess(WRITE): Expected S_OK got 0x%08X\n", sc); - - tags.cValues = 1; - tags.aulPropTag[0] = PR_IMPORTANCE; - - /* Set item access (bad access) - Fails */ - access[0] = 0; - sc = IPropData_HrSetPropAccess(lpIProp, (LPSPropTagArray)&tags, access); - ok(sc == MAPI_E_INVALID_PARAMETER, - "SetPropAcess(0): Expected INVALID_PARAMETER got 0x%08X\n",sc); - access[0] = IPROP_READWRITE; - sc = IPropData_HrSetPropAccess(lpIProp, (LPSPropTagArray)&tags, access); - ok(sc == MAPI_E_INVALID_PARAMETER, - "SetPropAcess(RW): Expected INVALID_PARAMETER got 0x%08X\n",sc); - access[0] = IPROP_CLEAN; - sc = IPropData_HrSetPropAccess(lpIProp, (LPSPropTagArray)&tags, access); - ok(sc == MAPI_E_INVALID_PARAMETER, - "SetPropAcess(C): Expected INVALID_PARAMETER got 0x%08X\n",sc); - - /* Set item access to read/write/clean */ - tags.cValues = 1; - tags.aulPropTag[0] = PR_IMPORTANCE; - access[0] = IPROP_READWRITE|IPROP_CLEAN; - sc = IPropData_HrSetPropAccess(lpIProp, (LPSPropTagArray)&tags, access); - ok(sc == S_OK, "SetPropAcess(RW/C): Expected S_OK got 0x%08X\n",sc); - - /* Set object access to read only */ - sc = IPropData_HrSetObjAccess(lpIProp, IPROP_READONLY); - ok(sc == S_OK, "SetObjAcess(READ): Expected S_OK got 0x%08X\n", sc); - - /* Set item access to read/write/dirty - doesn't care about RO object */ - access[0] = IPROP_READONLY|IPROP_DIRTY; - sc = IPropData_HrSetPropAccess(lpIProp, (LPSPropTagArray)&tags, access); - ok(sc == S_OK, "SetPropAcess(WRITE): Expected S_OK got 0x%08X\n", sc); - - /* Delete any item when set to read only - Error */ - lpProbs = NULL; - tags.aulPropTag[0] = PR_RESPONSE_REQUESTED; - sc = IPropData_DeleteProps(lpIProp, (LPSPropTagArray)&tags, &lpProbs); - ok(sc == E_ACCESSDENIED && !lpProbs, - "DeleteProps(nonexistent): Expected E_ACCESSDENIED null got 0x%08X %p\n", - sc, lpProbs); - - /* Set access to read and write */ - sc = IPropData_HrSetObjAccess(lpIProp, IPROP_READWRITE); - ok(sc == S_OK, "SetObjAcess(WRITE): Expected S_OK got 0x%08X\n", sc); - - /* Delete nonexistent item - No error */ - lpProbs = NULL; - tags.aulPropTag[0] = PR_RESPONSE_REQUESTED; - sc = IPropData_DeleteProps(lpIProp, (LPSPropTagArray)&tags, &lpProbs); - ok(sc == S_OK && !lpProbs, - "DeleteProps(nonexistent): Expected S_OK null got 0x%08X %p\n", - sc, lpProbs); - - /* Delete existing item (r/o) - No error, but lpProbs populated */ - lpProbs = NULL; - tags.aulPropTag[0] = PR_IMPORTANCE; - sc = IPropData_DeleteProps(lpIProp, (LPSPropTagArray)&tags, &lpProbs); - ok(sc == S_OK && lpProbs, - "DeleteProps(RO): Expected S_OK non-null got 0x%08X %p\n", sc, lpProbs); - - if (lpProbs && lpProbs->cProblem > 0) - { - ok(lpProbs->cProblem == 1 && - lpProbs->aProblem[0].ulIndex == 0 && - lpProbs->aProblem[0].ulPropTag == PR_IMPORTANCE && - lpProbs->aProblem[0].scode == E_ACCESSDENIED, - "DeleteProps(RO): Expected (1,0,%x,%x) got (%d,%x,%x)\n", - PR_IMPORTANCE, E_ACCESSDENIED, - lpProbs->aProblem[0].ulIndex, lpProbs->aProblem[0].ulPropTag, - lpProbs->aProblem[0].scode); - pMAPIFreeBuffer(lpProbs); - } - - lpProbs = NULL; - tags.cValues = 1; - tags.aulPropTag[0] = PR_RESPONSE_REQUESTED; - IPropData_HrAddObjProps(lpIProp, (LPSPropTagArray)&tags, &lpProbs); - ok(sc == S_OK && !lpProbs, - "AddObjProps(RO): Expected S_OK null got 0x%08X %p\n", sc, lpProbs); - - /* Get prop list - returns 1 item */ - lpTags = NULL; - IPropData_GetPropList(lpIProp, 0, &lpTags); - ok(sc == S_OK && lpTags && lpTags->cValues == 1, - "GetPropList: Expected S_OK, non-null, 1, got 0x%08X,%p,%d\n", - sc, lpTags, lpTags ? lpTags->cValues : 0); - if (lpTags && lpTags->cValues > 0) - { - ok(lpTags->aulPropTag[0] == PR_IMPORTANCE, - "GetPropList: Expected %x, got %x\n", - PR_IMPORTANCE, lpTags->aulPropTag[0]); - pMAPIFreeBuffer(lpTags); - } - - /* Set item to r/w again */ - access[0] = IPROP_READWRITE|IPROP_DIRTY; - sc = IPropData_HrSetPropAccess(lpIProp, (LPSPropTagArray)&tags, access); - ok(sc == S_OK, "SetPropAcess(WRITE): Expected S_OK got 0x%08X\n", sc); - - /* Delete existing item (r/w) - No error, no problems */ - lpProbs = NULL; - sc = IPropData_DeleteProps(lpIProp, (LPSPropTagArray)&tags, &lpProbs); - ok(sc == S_OK && !lpProbs, - "DeleteProps(RO): Expected S_OK null got 0x%08X %p\n", sc, lpProbs); - - /* Free the list */ - IPropData_Release(lpIProp); -} - -START_TEST(prop) -{ - SCODE ret; - - if(!InitFuncPtrs()) - { - skip("Needed functions are not available\n"); - return; - } - - SetLastError(0xdeadbeef); - ret = pScInitMapiUtil(0); - if ((ret != S_OK) && (GetLastError() == ERROR_PROC_NOT_FOUND)) - { - skip("ScInitMapiUtil is not implemented\n"); - FreeLibrary(hMapi32); - return; - } - - test_PropCopyMore(); - test_UlPropSize(); - test_FPropContainsProp(); - test_FPropCompareProp(); - test_LPropCompareProp(); - test_PpropFindProp(); - test_ScCountProps(); - test_ScCopyRelocProps(); - test_LpValFindProp(); - test_FBadRglpszA(); - test_FBadRglpszW(); - test_FBadRowSet(); - test_FBadPropTag(); - test_FBadRow(); - test_FBadProp(); - test_FBadColumnSet(); - - test_IProp(); - FreeLibrary(hMapi32); -} diff --git a/rostests/winetests/mapi32/testlist.c b/rostests/winetests/mapi32/testlist.c deleted file mode 100644 index 97ef6c9bbdb..00000000000 --- a/rostests/winetests/mapi32/testlist.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_imalloc(void); -extern void func_prop(void); -extern void func_util(void); - -const struct test winetest_testlist[] = -{ - { "imalloc", func_imalloc }, - { "prop", func_prop }, - { "util", func_util }, - { 0, 0 } -}; diff --git a/rostests/winetests/mapi32/util.c b/rostests/winetests/mapi32/util.c deleted file mode 100644 index 2ae42f1c814..00000000000 --- a/rostests/winetests/mapi32/util.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Unit test suite for MAPI utility functions - * - * 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 - */ - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "winerror.h" -#include "winnt.h" -#include "mapiutil.h" -#include "mapitags.h" - -static HMODULE hMapi32 = 0; - -static SCODE (WINAPI *pScInitMapiUtil)(ULONG); -static void (WINAPI *pSwapPword)(PUSHORT,ULONG); -static void (WINAPI *pSwapPlong)(PULONG,ULONG); -static void (WINAPI *pHexFromBin)(LPBYTE,int,LPWSTR); -static void (WINAPI *pFBinFromHex)(LPWSTR,LPBYTE); -static UINT (WINAPI *pUFromSz)(LPCSTR); -static ULONG (WINAPI *pUlFromSzHex)(LPCSTR); -static ULONG (WINAPI *pCbOfEncoded)(LPCSTR); -static BOOL (WINAPI *pIsBadBoundedStringPtr)(LPCSTR,ULONG); - -static void test_SwapPword(void) -{ - USHORT shorts[3]; - - pSwapPword = (void*)GetProcAddress(hMapi32, "SwapPword@8"); - if (!pSwapPword) - return; - - shorts[0] = 0xff01; - shorts[1] = 0x10ff; - shorts[2] = 0x2001; - pSwapPword(shorts, 2); - ok(shorts[0] == 0x01ff && shorts[1] == 0xff10 && shorts[2] == 0x2001, - "Expected {0x01ff,0xff10,0x2001}, got {0x%04x,0x%04x,0x%04x}\n", - shorts[0], shorts[1], shorts[2]); -} - -static void test_SwapPlong(void) -{ - ULONG longs[3]; - - pSwapPlong = (void*)GetProcAddress(hMapi32, "SwapPlong@8"); - if (!pSwapPlong) - return; - - longs[0] = 0xffff0001; - longs[1] = 0x1000ffff; - longs[2] = 0x20000001; - pSwapPlong(longs, 2); - ok(longs[0] == 0x0100ffff && longs[1] == 0xffff0010 && longs[2] == 0x20000001, - "Expected {0x0100ffff,0xffff0010,0x20000001}, got {0x%08x,0x%08x,0x%08x}\n", - longs[0], longs[1], longs[2]); -} - -static void test_HexFromBin(void) -{ - static char res[] = { "000102030405060708090A0B0C0D0E0F101112131415161" - "718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B" - "3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F6" - "06162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F8081828384" - "85868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A" - "9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCD" - "CECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F" - "2F3F4F5F6F7F8F9FAFBFCFDFE\0X" }; - BYTE data[255]; - WCHAR strw[256]; - BOOL bOk; - int i; - - pHexFromBin = (void*)GetProcAddress(hMapi32, "HexFromBin@12"); - pFBinFromHex = (void*)GetProcAddress(hMapi32, "FBinFromHex@8"); - if (!pHexFromBin || !pFBinFromHex) - return; - - for (i = 0; i < 255; i++) - data[i] = i; - memset(strw, 'X', sizeof(strw)); - pHexFromBin(data, sizeof(data), strw); - - ok(memcmp(strw, res, sizeof(res) - 1) == 0, "HexFromBin: Result differs\n"); - - memset(data, 0, sizeof(data)); - pFBinFromHex((LPWSTR)res, data); - bOk = TRUE; - for (i = 0; i < 255; i++) - if (data[i] != i) - bOk = FALSE; - ok(bOk == TRUE, "FBinFromHex: Result differs\n"); -} - -static void test_UFromSz(void) -{ - pUFromSz = (void*)GetProcAddress(hMapi32, "UFromSz@4"); - if (!pUFromSz) - return; - - ok(pUFromSz("105679") == 105679u, - "UFromSz: expected 105679, got %d\n", pUFromSz("105679")); - - ok(pUFromSz(" 4") == 0, "UFromSz: exected 0. got %d\n", - pUFromSz(" 4")); -} - -static void test_UlFromSzHex(void) -{ - pUlFromSzHex = (void*)GetProcAddress(hMapi32, "UlFromSzHex@4"); - if (!pUlFromSzHex) - return; - - ok(pUlFromSzHex("fF") == 0xffu, - "UlFromSzHex: expected 0xff, got 0x%x\n", pUlFromSzHex("fF")); - - ok(pUlFromSzHex(" c") == 0, "UlFromSzHex: exected 0x0. got 0x%x\n", - pUlFromSzHex(" c")); -} - -static void test_CbOfEncoded(void) -{ - char buff[129]; - unsigned int i; - - pCbOfEncoded = (void*)GetProcAddress(hMapi32, "CbOfEncoded@4"); - if (!pCbOfEncoded) - return; - - for (i = 0; i < sizeof(buff) - 1; i++) - { - ULONG ulRet, ulExpected = (((i | 3) >> 2) + 1) * 3; - - memset(buff, '\0', sizeof(buff)); - memset(buff, '?', i); - ulRet = pCbOfEncoded(buff); - ok(ulRet == ulExpected, "CbOfEncoded(length %d): expected %d, got %d\n", - i, ulExpected, ulRet); - } -} - -static void test_IsBadBoundedStringPtr(void) -{ - pIsBadBoundedStringPtr = (void*)GetProcAddress(hMapi32, "IsBadBoundedStringPtr@8"); - if (!pIsBadBoundedStringPtr) - return; - - ok(pIsBadBoundedStringPtr(NULL, 0) == TRUE, "IsBadBoundedStringPtr: expected TRUE\n"); - ok(pIsBadBoundedStringPtr("TEST", 4) == TRUE, "IsBadBoundedStringPtr: expected TRUE\n"); - ok(pIsBadBoundedStringPtr("TEST", 5) == FALSE, "IsBadBoundedStringPtr: expected FALSE\n"); -} - -START_TEST(util) -{ - SCODE ret; - - hMapi32 = LoadLibraryA("mapi32.dll"); - - pScInitMapiUtil = (void*)GetProcAddress(hMapi32, "ScInitMapiUtil@4"); - - if (!pScInitMapiUtil) - { - skip("ScInitMapiUtil is not available\n"); - FreeLibrary(hMapi32); - return; - } - - SetLastError(0xdeadbeef); - ret = pScInitMapiUtil(0); - if ((ret != S_OK) && (GetLastError() == ERROR_PROC_NOT_FOUND)) - { - skip("ScInitMapiUtil is not implemented\n"); - FreeLibrary(hMapi32); - return; - } - - test_SwapPword(); - test_SwapPlong(); - test_HexFromBin(); - test_UFromSz(); - test_UlFromSzHex(); - test_CbOfEncoded(); - test_IsBadBoundedStringPtr(); - - FreeLibrary(hMapi32); -} diff --git a/rostests/winetests/mlang/mlang.c b/rostests/winetests/mlang/mlang.c deleted file mode 100644 index 115080eb692..00000000000 --- a/rostests/winetests/mlang/mlang.c +++ /dev/null @@ -1,856 +0,0 @@ -/* - * Unit test suite for MLANG APIs. - * - * Copyright 2004 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 COBJMACROS - -#include - -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "mlang.h" - -#include "wine/test.h" - -#ifndef CP_UNICODE -#define CP_UNICODE 1200 -#endif - -#if 0 -#define DUMP_CP_INFO -#define DUMP_SCRIPT_INFO - -#if defined DUMP_CP_INFO || defined DUMP_SCRIPT_INFO -#include "wine/debug.h" -#endif -#endif /* 0 */ - -#define TRACE_2 OutputDebugStringA - -static CHAR string1[MAX_PATH], string2[MAX_PATH]; - -#define ok_w2(format, szString1, szString2) \ -\ - if (lstrcmpW(szString1, szString2) != 0) \ - { \ - WideCharToMultiByte(CP_ACP, 0, szString1, -1, string1, MAX_PATH, NULL, NULL); \ - WideCharToMultiByte(CP_ACP, 0, szString2, -1, string2, MAX_PATH, NULL, NULL); \ - ok(0, format, string1, string2); \ - } - -static BOOL (WINAPI *pGetCPInfoExA)(UINT,DWORD,LPCPINFOEXA); - -static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2) -{ - /* these APIs are broken regarding constness of the input buffer */ - char stringA[] = "Just a test string\0"; /* double 0 for CP_UNICODE tests */ - WCHAR stringW[] = {'J','u','s','t',' ','a',' ','t','e','s','t',' ','s','t','r','i','n','g',0}; - char bufA[256]; - WCHAR bufW[256]; - UINT lenA, lenW, expected_len; - HRESULT ret; - HMODULE hMlang; - FARPROC pConvertINetMultiByteToUnicode; - FARPROC pConvertINetUnicodeToMultiByte; - - hMlang = LoadLibraryA("mlang.dll"); - ok(hMlang != 0, "couldn't load mlang.dll\n"); - - pConvertINetMultiByteToUnicode = GetProcAddress(hMlang, "ConvertINetMultiByteToUnicode"); - ok(pConvertINetMultiByteToUnicode != NULL, "couldn't resolve ConvertINetMultiByteToUnicode\n"); - pConvertINetUnicodeToMultiByte = GetProcAddress(hMlang, "ConvertINetUnicodeToMultiByte"); - ok(pConvertINetUnicodeToMultiByte != NULL, "couldn't resolve ConvertINetUnicodeToMultiByte\n"); - - /* IMultiLanguage2_ConvertStringToUnicode tests */ - - memset(bufW, 'x', sizeof(bufW)); - lenA = 0; - lenW = sizeof(bufW)/sizeof(bufW[0]); - TRACE_2("Call IMultiLanguage2_ConvertStringToUnicode\n"); - ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, 1252, stringA, &lenA, bufW, &lenW); - ok(ret == S_OK, "IMultiLanguage2_ConvertStringToUnicode failed: %08x\n", ret); - ok(lenA == 0, "expected lenA 0, got %u\n", lenA); - ok(lenW == 0, "expected lenW 0, got %u\n", lenW); - - memset(bufW, 'x', sizeof(bufW)); - lenA = -1; - lenW = sizeof(bufW)/sizeof(bufW[0]); - TRACE_2("Call IMultiLanguage2_ConvertStringToUnicode\n"); - ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, 1252, stringA, &lenA, bufW, &lenW); - ok(ret == S_OK, "IMultiLanguage2_ConvertStringToUnicode failed: %08x\n", ret); - ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA); - ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW); - if (lenW < sizeof(bufW)/sizeof(bufW[0])) { - /* can only happen if the convert call fails */ - ok(bufW[lenW] != 0, "buf should not be 0 terminated\n"); - bufW[lenW] = 0; /* -1 doesn't include 0 terminator */ - } - ok(!lstrcmpW(bufW, stringW), "bufW/stringW mismatch\n"); - - memset(bufW, 'x', sizeof(bufW)); - lenA = -1; - lenW = 5; - TRACE_2("Call IMultiLanguage2_ConvertStringToUnicode\n"); - ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, 1252, stringA, &lenA, bufW, &lenW); - ok(ret == E_FAIL, "IMultiLanguage2_ConvertStringToUnicode should fail: %08x\n", ret); - ok(lenW == 0, "expected lenW 0, got %u\n", lenW); - /* still has to do partial conversion */ - ok(!memcmp(bufW, stringW, 5 * sizeof(WCHAR)), "bufW/stringW mismatch\n"); - - memset(bufW, 'x', sizeof(bufW)); - lenA = -1; - lenW = sizeof(bufW)/sizeof(bufW[0]); - TRACE_2("Call IMultiLanguage2_ConvertStringToUnicode\n"); - ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, CP_UNICODE, stringA, &lenA, bufW, &lenW); - ok(ret == S_OK, "IMultiLanguage2_ConvertStringToUnicode failed: %08x\n", ret); - ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA); - ok(lenW == lstrlenW(stringW)/(int)sizeof(WCHAR), "wrong lenW %u\n", lenW); - ok(bufW[lenW] != 0, "buf should not be 0 terminated\n"); - bufW[lenW] = 0; /* -1 doesn't include 0 terminator */ - ok(!lstrcmpA((LPCSTR)bufW, stringA), "bufW/stringA mismatch\n"); - - memset(bufW, 'x', sizeof(bufW)); - lenA = lstrlenA(stringA); - lenW = 0; - ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, 1252, stringA, &lenA, NULL, &lenW); - ok(ret == S_OK, "IMultiLanguage2_ConvertStringToUnicode failed: %08x\n", ret); - ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA); - expected_len = MultiByteToWideChar(1252, 0, stringA, lenA, NULL, 0); - ok(lenW == expected_len, "expected lenW %u, got %u\n", expected_len, lenW); - - memset(bufW, 'x', sizeof(bufW)); - lenA = lstrlenA(stringA); - lenW = sizeof(bufW)/sizeof(bufW[0]); - ret = pConvertINetMultiByteToUnicode(NULL, 1252, stringA, &lenA, NULL, &lenW); - ok(ret == S_OK, "ConvertINetMultiByteToUnicode failed: %08x\n", ret); - ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA); - expected_len = MultiByteToWideChar(1252, 0, stringA, lenA, NULL, 0); - ok(lenW == expected_len, "expected lenW %u, got %u\n", expected_len, lenW); - - memset(bufW, 'x', sizeof(bufW)); - lenA = lstrlenA(stringA); - lenW = 0; - ret = pConvertINetMultiByteToUnicode(NULL, 1252, stringA, &lenA, NULL, &lenW); - ok(ret == S_OK, "ConvertINetMultiByteToUnicode failed: %08x\n", ret); - ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA); - expected_len = MultiByteToWideChar(1252, 0, stringA, lenA, NULL, 0); - ok(lenW == expected_len, "expected lenW %u, got %u\n", expected_len, lenW); - - /* IMultiLanguage2_ConvertStringFromUnicode tests */ - - memset(bufA, 'x', sizeof(bufA)); - lenW = 0; - lenA = sizeof(bufA); - TRACE_2("Call IMultiLanguage2_ConvertStringFromUnicode\n"); - ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, stringW, &lenW, bufA, &lenA); - ok(ret == S_OK, "IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n", ret); - ok(lenA == 0, "expected lenA 0, got %u\n", lenA); - ok(lenW == 0, "expected lenW 0, got %u\n", lenW); - - memset(bufA, 'x', sizeof(bufA)); - lenW = -1; - lenA = sizeof(bufA); - TRACE_2("Call IMultiLanguage2_ConvertStringFromUnicode\n"); - ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, stringW, &lenW, bufA, &lenA); - ok(ret == S_OK, "IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n", ret); - ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA); - ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW); - ok(bufA[lenA] != 0, "buf should not be 0 terminated\n"); - bufA[lenA] = 0; /* -1 doesn't include 0 terminator */ - ok(!lstrcmpA(bufA, stringA), "bufA/stringA mismatch\n"); - - memset(bufA, 'x', sizeof(bufA)); - lenW = -1; - lenA = 5; - TRACE_2("Call IMultiLanguage2_ConvertStringFromUnicode\n"); - ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, stringW, &lenW, bufA, &lenA); - ok(ret == E_FAIL, "IMultiLanguage2_ConvertStringFromUnicode should fail: %08x\n", ret); - ok(lenA == 0, "expected lenA 0, got %u\n", lenA); - /* still has to do partial conversion */ - ok(!memcmp(bufA, stringA, 5), "bufW/stringW mismatch\n"); - - memset(bufA, 'x', sizeof(bufA)); - lenW = -1; - lenA = sizeof(bufA); - TRACE_2("Call IMultiLanguage2_ConvertStringFromUnicode\n"); - ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, CP_UNICODE, stringW, &lenW, bufA, &lenA); - ok(ret == S_OK, "IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n", ret); - ok(lenA == lstrlenA(stringA) * (int)sizeof(WCHAR), "wrong lenA %u\n", lenA); - ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW); - ok(bufA[lenA] != 0 && bufA[lenA+1] != 0, "buf should not be 0 terminated\n"); - bufA[lenA] = 0; /* -1 doesn't include 0 terminator */ - bufA[lenA+1] = 0; /* sizeof(WCHAR) */ - ok(!lstrcmpW((LPCWSTR)bufA, stringW), "bufA/stringW mismatch\n"); - - memset(bufA, 'x', sizeof(bufA)); - lenW = lstrlenW(stringW); - lenA = 0; - ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, stringW, &lenW, NULL, &lenA); - ok(ret == S_OK, "IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n", ret); - ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW); - expected_len = WideCharToMultiByte(1252, 0, stringW, lenW, NULL, 0, NULL, NULL); - ok(lenA == expected_len, "expected lenA %u, got %u\n", expected_len, lenA); - - memset(bufA, 'x', sizeof(bufA)); - lenW = lstrlenW(stringW); - lenA = sizeof(bufA); - ret = pConvertINetUnicodeToMultiByte(NULL, 1252, stringW, &lenW, NULL, &lenA); - ok(ret == S_OK, "ConvertINetUnicodeToMultiByte failed: %08x\n", ret); - ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW); - expected_len = WideCharToMultiByte(1252, 0, stringW, lenW, NULL, 0, NULL, NULL); - ok(lenA == expected_len, "expected lenA %u, got %u\n", expected_len, lenA); - - memset(bufA, 'x', sizeof(bufA)); - lenW = lstrlenW(stringW); - lenA = 0; - ret = pConvertINetUnicodeToMultiByte(NULL, 1252, stringW, &lenW, NULL, &lenA); - ok(ret == S_OK, "ConvertINetUnicodeToMultiByte failed: %08x\n", ret); - ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW); - expected_len = WideCharToMultiByte(1252, 0, stringW, lenW, NULL, 0, NULL, NULL); - ok(lenA == expected_len, "expected lenA %u, got %u\n", expected_len, lenA); -} - -static inline void cpinfo_cmp(MIMECPINFO *cpinfo1, MIMECPINFO *cpinfo2) -{ - ok(cpinfo1->dwFlags == cpinfo2->dwFlags, "dwFlags mismatch: %08x != %08x\n", cpinfo1->dwFlags, cpinfo2->dwFlags); - ok(cpinfo1->uiCodePage == cpinfo2->uiCodePage, "uiCodePage mismatch: %u != %u\n", cpinfo1->uiCodePage, cpinfo2->uiCodePage); - ok(cpinfo1->uiFamilyCodePage == cpinfo2->uiFamilyCodePage, "uiFamilyCodePage mismatch: %u != %u\n", cpinfo1->uiFamilyCodePage, cpinfo2->uiFamilyCodePage); - ok(!lstrcmpW(cpinfo1->wszDescription, cpinfo2->wszDescription), "wszDescription mismatch\n"); - ok(!lstrcmpW(cpinfo1->wszWebCharset, cpinfo2->wszWebCharset), "wszWebCharset mismatch\n"); - ok(!lstrcmpW(cpinfo1->wszHeaderCharset, cpinfo2->wszHeaderCharset), "wszHeaderCharset mismatch\n"); - ok(!lstrcmpW(cpinfo1->wszBodyCharset, cpinfo2->wszBodyCharset), "wszBodyCharset mismatch\n"); - ok(!lstrcmpW(cpinfo1->wszFixedWidthFont, cpinfo2->wszFixedWidthFont), "wszFixedWidthFont mismatch\n"); - ok(!lstrcmpW(cpinfo1->wszProportionalFont, cpinfo2->wszProportionalFont), "wszProportionalFont mismatch\n"); - ok(cpinfo1->bGDICharset == cpinfo2->bGDICharset, "bGDICharset mismatch: %d != %d\n", cpinfo1->bGDICharset, cpinfo2->bGDICharset); -} - -#ifdef DUMP_CP_INFO -static const char *dump_mime_flags(DWORD flags) -{ - static char buf[1024]; - - buf[0] = 0; - - if (flags & MIMECONTF_MAILNEWS) strcat(buf, " MIMECONTF_MAILNEWS"); - if (flags & MIMECONTF_BROWSER) strcat(buf, " MIMECONTF_BROWSER"); - if (flags & MIMECONTF_MINIMAL) strcat(buf, " MIMECONTF_MINIMAL"); - if (flags & MIMECONTF_IMPORT) strcat(buf, " MIMECONTF_IMPORT"); - if (flags & MIMECONTF_SAVABLE_MAILNEWS) strcat(buf, " MIMECONTF_SAVABLE_MAILNEWS"); - if (flags & MIMECONTF_SAVABLE_BROWSER) strcat(buf, " MIMECONTF_SAVABLE_BROWSER"); - if (flags & MIMECONTF_EXPORT) strcat(buf, " MIMECONTF_EXPORT"); - if (flags & MIMECONTF_PRIVCONVERTER) strcat(buf, " MIMECONTF_PRIVCONVERTER"); - if (flags & MIMECONTF_VALID) strcat(buf, " MIMECONTF_VALID"); - if (flags & MIMECONTF_VALID_NLS) strcat(buf, " MIMECONTF_VALID_NLS"); - if (flags & MIMECONTF_MIME_IE4) strcat(buf, " MIMECONTF_MIME_IE4"); - if (flags & MIMECONTF_MIME_LATEST) strcat(buf, " MIMECONTF_MIME_LATEST"); - if (flags & MIMECONTF_MIME_REGISTRY) strcat(buf, " MIMECONTF_MIME_REGISTRY"); - - return buf; -} -#endif - -static BOOL check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to) -{ - CHAR convert[MAX_PATH]; - BYTE dest[MAX_PATH]; - HRESULT hr; - UINT srcsz, destsz; - - static WCHAR strW[] = {'a','b','c',0}; - - srcsz = -1; - destsz = MAX_PATH; - hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, from, strW, - &srcsz, convert, &destsz); - if (hr != S_OK) - return FALSE; - - srcsz = -1; - destsz = MAX_PATH; - hr = IMultiLanguage2_ConvertString(iML2, NULL, from, to, (BYTE *)convert, - &srcsz, dest, &destsz); - if (hr != S_OK) - return FALSE; - - return TRUE; -} - -static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags) -{ - IEnumCodePage *iEnumCP = NULL; - MIMECPINFO *cpinfo; - MIMECPINFO cpinfo2; - HRESULT ret; - ULONG i, n; - UINT total; - - total = 0; - TRACE_2("Call IMultiLanguage2_GetNumberOfCodePageInfo\n"); - ret = IMultiLanguage2_GetNumberOfCodePageInfo(iML2, &total); - ok(ret == S_OK && total != 0, "IMultiLanguage2_GetNumberOfCodePageInfo: expected S_OK/!0, got %08x/%u\n", ret, total); - - trace("total mlang supported codepages %u\n", total); - - TRACE_2("Call IMultiLanguage2_EnumCodePages\n"); - ret = IMultiLanguage2_EnumCodePages(iML2, flags, LANG_NEUTRAL, &iEnumCP); - trace("IMultiLanguage2_EnumCodePages = %08x, iEnumCP = %p\n", ret, iEnumCP); - ok(ret == S_OK && iEnumCP, "IMultiLanguage2_EnumCodePages: expected S_OK/!NULL, got %08x/%p\n", ret, iEnumCP); - - TRACE_2("Call IEnumCodePage_Reset\n"); - ret = IEnumCodePage_Reset(iEnumCP); - ok(ret == S_OK, "IEnumCodePage_Reset: expected S_OK, got %08x\n", ret); - n = 65536; - TRACE_2("Call IEnumCodePage_Next\n"); - ret = IEnumCodePage_Next(iEnumCP, 0, NULL, &n); - ok(n == 0 && ret == S_FALSE, "IEnumCodePage_Next: expected 0/S_FALSE, got %u/%08x\n", n, ret); - TRACE_2("Call IEnumCodePage_Next\n"); - ret = IEnumCodePage_Next(iEnumCP, 0, NULL, NULL); - ok(ret == S_FALSE, "IEnumCodePage_Next: expected S_FALSE, got %08x\n", ret); - - cpinfo = HeapAlloc(GetProcessHeap(), 0, sizeof(*cpinfo) * total * 2); - - n = total * 2; - TRACE_2("Call IEnumCodePage_Next\n"); - ret = IEnumCodePage_Next(iEnumCP, 0, cpinfo, &n); - trace("IEnumCodePage_Next = %08x, n = %u\n", ret, n); - ok(ret == S_FALSE && n == 0, "IEnumCodePage_Next: expected S_FALSE/0, got %08x/%u\n", ret, n); - - n = total * 2; - TRACE_2("Call IEnumCodePage_Next\n"); - ret = IEnumCodePage_Next(iEnumCP, n, cpinfo, &n); - ok(ret == S_OK && n != 0, "IEnumCodePage_Next: expected S_OK/!0, got %08x/%u\n", ret, n); - - trace("flags %08x, enumerated codepages %u\n", flags, n); - - if (!flags) - { - ok(n == total, "IEnumCodePage_Next: expected %u, got %u\n", total, n); - - flags = MIMECONTF_MIME_LATEST; - } - - total = n; - - for (i = 0; i < n; i++) - { - CHARSETINFO csi; - MIMECSETINFO mcsi; - BOOL convertible; - HRESULT check = S_OK; - static const WCHAR autoW[] = {'_','a','u','t','o',0}; - -#ifdef DUMP_CP_INFO - trace("MIMECPINFO #%u:\n" - "dwFlags %08x %s\n" - "uiCodePage %u\n" - "uiFamilyCodePage %u\n" - "wszDescription %s\n" - "wszWebCharset %s\n" - "wszHeaderCharset %s\n" - "wszBodyCharset %s\n" - "wszFixedWidthFont %s\n" - "wszProportionalFont %s\n" - "bGDICharset %d\n\n", - i, - cpinfo[i].dwFlags, dump_mime_flags(cpinfo[i].dwFlags), - cpinfo[i].uiCodePage, - cpinfo[i].uiFamilyCodePage, - wine_dbgstr_w(cpinfo[i].wszDescription), - wine_dbgstr_w(cpinfo[i].wszWebCharset), - wine_dbgstr_w(cpinfo[i].wszHeaderCharset), - wine_dbgstr_w(cpinfo[i].wszBodyCharset), - wine_dbgstr_w(cpinfo[i].wszFixedWidthFont), - wine_dbgstr_w(cpinfo[i].wszProportionalFont), - cpinfo[i].bGDICharset); -#endif - ok(cpinfo[i].dwFlags & flags, "enumerated flags %08x do not include requested %08x\n", cpinfo[i].dwFlags, flags); - - if (TranslateCharsetInfo((DWORD *)cpinfo[i].uiFamilyCodePage, &csi, TCI_SRCCODEPAGE)) - ok(cpinfo[i].bGDICharset == csi.ciCharset, "%d != %d\n", cpinfo[i].bGDICharset, csi.ciCharset); - else - trace("TranslateCharsetInfo failed for cp %u\n", cpinfo[i].uiFamilyCodePage); - - trace("%u: codepage %u family %u\n", i, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage); - - /* Win95 does not support UTF-7 */ - if (cpinfo[i].uiCodePage == CP_UTF7) continue; - - /* support files for some codepages might be not installed, or - * the codepage is just an alias. - */ - if (IsValidCodePage(cpinfo[i].uiCodePage)) - { - TRACE_2("Call IMultiLanguage2_IsConvertible\n"); - ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UNICODE); - ok(ret == S_OK, "IMultiLanguage2_IsConvertible(%u -> CP_UNICODE) = %08x\n", cpinfo[i].uiCodePage, ret); - TRACE_2("Call IMultiLanguage2_IsConvertible\n"); - ret = IMultiLanguage2_IsConvertible(iML2, CP_UNICODE, cpinfo[i].uiCodePage); - ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UNICODE -> %u) = %08x\n", cpinfo[i].uiCodePage, ret); - - convertible = check_convertible(iML2, cpinfo[i].uiCodePage, CP_UTF8); - if (!convertible) - check = S_FALSE; - - TRACE_2("Call IMultiLanguage2_IsConvertible\n"); - ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UTF8); - ok(ret == check, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret); - TRACE_2("Call IMultiLanguage2_IsConvertible\n"); - ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, cpinfo[i].uiCodePage); - ok(ret == check, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret); - } - else - trace("IsValidCodePage failed for cp %u\n", cpinfo[i].uiCodePage); - - ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszWebCharset, &mcsi); - /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */ - if (memcmp(cpinfo[i].wszWebCharset, autoW, 5 * sizeof(WCHAR))) - { - ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret); -#ifdef DUMP_CP_INFO - trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszWebCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset)); -#endif - ok(!lstrcmpiW(cpinfo[i].wszWebCharset, mcsi.wszCharset), -#ifdef DUMP_CP_INFO - "%s != %s\n", - wine_dbgstr_w(cpinfo[i].wszWebCharset), wine_dbgstr_w(mcsi.wszCharset)); -#else - "wszWebCharset mismatch\n"); -#endif - - if (0) - { - /* native mlang returns completely messed up encodings in some cases */ - ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage, - "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage); - ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage, - "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage); - } - } - - ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszHeaderCharset, &mcsi); - /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */ - if (memcmp(cpinfo[i].wszHeaderCharset, autoW, 5 * sizeof(WCHAR))) - { - ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret); -#ifdef DUMP_CP_INFO - trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszHeaderCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset)); -#endif - ok(!lstrcmpiW(cpinfo[i].wszHeaderCharset, mcsi.wszCharset), -#ifdef DUMP_CP_INFO - "%s != %s\n", - wine_dbgstr_w(cpinfo[i].wszHeaderCharset), wine_dbgstr_w(mcsi.wszCharset)); -#else - "wszHeaderCharset mismatch\n"); -#endif - - if (0) - { - /* native mlang returns completely messed up encodings in some cases */ - ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage, - "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage); - ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage, - "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage); - } - } - - ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszBodyCharset, &mcsi); - /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */ - if (memcmp(cpinfo[i].wszBodyCharset, autoW, 5 * sizeof(WCHAR))) - { - ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret); -#ifdef DUMP_CP_INFO - trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszBodyCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset)); -#endif - ok(!lstrcmpiW(cpinfo[i].wszBodyCharset, mcsi.wszCharset), -#ifdef DUMP_CP_INFO - "%s != %s\n", - wine_dbgstr_w(cpinfo[i].wszBodyCharset), wine_dbgstr_w(mcsi.wszCharset)); -#else - "wszBodyCharset mismatch\n"); -#endif - - if (0) - { - /* native mlang returns completely messed up encodings in some cases */ - ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage, - "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage); - ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage, - "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage); - } - } - } - - /* now IEnumCodePage_Next should fail, since pointer is at the end */ - n = 1; - ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &n); - ok(ret == S_FALSE && n == 0, "IEnumCodePage_Next: expected S_FALSE/0, got %08x/%u\n", ret, n); - - ret = IEnumCodePage_Reset(iEnumCP); - ok(ret == S_OK, "IEnumCodePage_Reset: expected S_OK, got %08x\n", ret); - n = 0; - ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &n); - ok(n == 1 && ret == S_OK, "IEnumCodePage_Next: expected 1/S_OK, got %u/%08x\n", n, ret); - cpinfo_cmp(&cpinfo[0], &cpinfo2); - - if (0) - { - /* Due to a bug in MS' implementation of IEnumCodePage_Skip - * it's not used here. - */ - ret = IEnumCodePage_Skip(iEnumCP, 1); - ok(ret == S_OK, "IEnumCodePage_Skip: expected S_OK, got %08x\n", ret); - } - for (i = 0; i < total - 1; i++) - { - n = 0; - ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &n); - ok(n == 1 && ret == S_OK, "IEnumCodePage_Next: expected 1/S_OK, got %u/%08x\n", n, ret); - cpinfo_cmp(&cpinfo[i + 1], &cpinfo2); - } - - HeapFree(GetProcessHeap(), 0, cpinfo); - IEnumCodePage_Release(iEnumCP); -} - -static inline void scriptinfo_cmp(SCRIPTINFO *sinfo1, SCRIPTINFO *sinfo2) -{ - ok(sinfo1->ScriptId == sinfo2->ScriptId, "ScriptId mismatch: %d != %d\n", sinfo1->ScriptId, sinfo2->ScriptId); - ok(sinfo1->uiCodePage == sinfo2->uiCodePage, "uiCodePage mismatch: %u != %u\n", sinfo1->uiCodePage, sinfo2->uiCodePage); - ok(!lstrcmpW(sinfo1->wszDescription, sinfo2->wszDescription), "wszDescription mismatch\n"); - ok(!lstrcmpW(sinfo1->wszFixedWidthFont, sinfo2->wszFixedWidthFont), "wszFixedWidthFont mismatch\n"); - ok(!lstrcmpW(sinfo1->wszProportionalFont, sinfo2->wszProportionalFont), "wszProportionalFont mismatch\n"); -} - -static void test_EnumScripts(IMultiLanguage2 *iML2, DWORD flags) -{ - IEnumScript *iEnumScript = NULL; - SCRIPTINFO *sinfo; - SCRIPTINFO sinfo2; - HRESULT ret; - ULONG i, n; - UINT total; - - total = 0; - TRACE_2("Call IMultiLanguage2_GetNumberOfScripts\n"); - ret = IMultiLanguage2_GetNumberOfScripts(iML2, &total); - ok(ret == S_OK && total != 0, "IMultiLanguage2_GetNumberOfScripts: expected S_OK/!0, got %08x/%u\n", ret, total); - - trace("total mlang supported scripts %u\n", total); - - TRACE_2("Call IMultiLanguage2_EnumScripts\n"); - ret = IMultiLanguage2_EnumScripts(iML2, flags, LANG_NEUTRAL, &iEnumScript); - trace("IMultiLanguage2_EnumScripts = %08x, iEnumScript = %p\n", ret, iEnumScript); - ok(ret == S_OK && iEnumScript, "IMultiLanguage2_EnumScripts: expected S_OK/!NULL, got %08x/%p\n", ret, iEnumScript); - - TRACE_2("Call IEnumScript_Reset\n"); - ret = IEnumScript_Reset(iEnumScript); - ok(ret == S_OK, "IEnumScript_Reset: expected S_OK, got %08x\n", ret); - n = 65536; - TRACE_2("Call IEnumScript_Next\n"); - ret = IEnumScript_Next(iEnumScript, 0, NULL, &n); - ok(n == 65536 && ret == E_FAIL, "IEnumScript_Next: expected 65536/E_FAIL, got %u/%08x\n", n, ret); - TRACE_2("Call IEnumScript_Next\n"); - ret = IEnumScript_Next(iEnumScript, 0, NULL, NULL); - ok(ret == E_FAIL, "IEnumScript_Next: expected E_FAIL, got %08x\n", ret); - - sinfo = HeapAlloc(GetProcessHeap(), 0, sizeof(*sinfo) * total * 2); - - n = total * 2; - TRACE_2("Call IEnumScript_Next\n"); - ret = IEnumScript_Next(iEnumScript, 0, sinfo, &n); - ok(ret == S_FALSE && n == 0, "IEnumScript_Next: expected S_FALSE/0, got %08x/%u\n", ret, n); - - n = total * 2; - TRACE_2("Call IEnumScript_Next\n"); - ret = IEnumScript_Next(iEnumScript, n, sinfo, &n); - ok(ret == S_OK && n != 0, "IEnumScript_Next: expected S_OK, got %08x/%u\n", ret, n); - - trace("flags %08x, enumerated scripts %u\n", flags, n); - - if (!flags) - { - ok(n == total, "IEnumScript_Next: expected %u, got %u\n", total, n); - flags = SCRIPTCONTF_SCRIPT_USER | SCRIPTCONTF_SCRIPT_HIDE | SCRIPTCONTF_SCRIPT_SYSTEM; - } - - total = n; - - for (i = 0; pGetCPInfoExA && i < n; i++) - { -#ifdef DUMP_SCRIPT_INFO - trace("SCRIPTINFO #%u:\n" - "ScriptId %08x\n" - "uiCodePage %u\n" - "wszDescription %s\n" - "wszFixedWidthFont %s\n" - "wszProportionalFont %s\n\n", - i, - sinfo[i].ScriptId, - sinfo[i].uiCodePage, - wine_dbgstr_w(sinfo[i].wszDescription), - wine_dbgstr_w(sinfo[i].wszFixedWidthFont), - wine_dbgstr_w(sinfo[i].wszProportionalFont)); -#endif - trace("%u codepage %u\n", i, sinfo[i].uiCodePage); - } - - /* now IEnumScript_Next should fail, since pointer is at the end */ - n = 1; - ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &n); - ok(ret == S_FALSE && n == 0, "IEnumScript_Next: expected S_FALSE/0, got %08x/%u\n", ret, n); - - ret = IEnumScript_Reset(iEnumScript); - ok(ret == S_OK, "IEnumScript_Reset: expected S_OK, got %08x\n", ret); - n = 0; - ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &n); - ok(n == 1 && ret == S_OK, "IEnumScript_Next: expected 1/S_OK, got %u/%08x\n", n, ret); - scriptinfo_cmp(&sinfo[0], &sinfo2); - - if (0) - { - /* Due to a bug in MS' implementation of IEnumScript_Skip - * it's not used here. - */ - ret = IEnumScript_Skip(iEnumScript, 1); - ok(ret == S_OK, "IEnumScript_Skip: expected S_OK, got %08x\n", ret); - } - for (i = 0; i < total - 1; i++) - { - n = 0; - ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &n); - ok(n == 1 && ret == S_OK, "IEnumScript_Next: expected 1/S_OK, got %u/%08x\n", n, ret); - scriptinfo_cmp(&sinfo[i + 1], &sinfo2); - } - - HeapFree(GetProcessHeap(), 0, sinfo); - IEnumScript_Release(iEnumScript); -} - -static void IMLangFontLink_Test(IMLangFontLink* iMLFL) -{ - DWORD dwCodePages = 0; - DWORD dwManyCodePages = 0; - UINT CodePage = 0; - - ok(IMLangFontLink_CodePageToCodePages(iMLFL, 932, &dwCodePages)==S_OK, - "IMLangFontLink_CodePageToCodePages failed\n"); - ok (dwCodePages != 0, "No CodePages returned\n"); - ok(IMLangFontLink_CodePagesToCodePage(iMLFL, dwCodePages, 1035, - &CodePage)==S_OK, - "IMLangFontLink_CodePagesToCodePage failed\n"); - ok(CodePage == 932, "Incorrect CodePage Returned (%i)\n",CodePage); - - ok(IMLangFontLink_CodePageToCodePages(iMLFL, 1252, &dwCodePages)==S_OK, - "IMLangFontLink_CodePageToCodePages failed\n"); - dwManyCodePages = dwManyCodePages | dwCodePages; - ok(IMLangFontLink_CodePageToCodePages(iMLFL, 1256, &dwCodePages)==S_OK, - "IMLangFontLink_CodePageToCodePages failed\n"); - dwManyCodePages = dwManyCodePages | dwCodePages; - ok(IMLangFontLink_CodePageToCodePages(iMLFL, 874, &dwCodePages)==S_OK, - "IMLangFontLink_CodePageToCodePages failed\n"); - dwManyCodePages = dwManyCodePages | dwCodePages; - - ok(IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 1256, - &CodePage)==S_OK, - "IMLangFontLink_CodePagesToCodePage failed\n"); - ok(CodePage == 1256, "Incorrect CodePage Returned (%i)\n",CodePage); - - ok(IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 936, - &CodePage)==S_OK, - "IMLangFontLink_CodePagesToCodePage failed\n"); - ok(CodePage == 1252, "Incorrect CodePage Returned (%i)\n",CodePage); -} - -/* copied from libs/wine/string.c */ -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; -} - -static void test_rfc1766(IMultiLanguage2 *iML2) -{ - IEnumRfc1766 *pEnumRfc1766; - RFC1766INFO info; - ULONG n; - HRESULT ret; - BSTR rfcstr; - - ret = IMultiLanguage2_EnumRfc1766(iML2, LANG_NEUTRAL, &pEnumRfc1766); - ok(ret == S_OK, "IMultiLanguage2_EnumRfc1766 error %08x\n", ret); - - while (1) - { - ret = IEnumRfc1766_Next(pEnumRfc1766, 1, &info, &n); - if (ret != S_OK) break; - -#ifdef DUMP_CP_INFO - trace("lcid %04x rfc_name %s locale_name %s\n", - info.lcid, wine_dbgstr_w(info.wszRfc1766), wine_dbgstr_w(info.wszLocaleName)); -#endif - - ok(n == 1, "couldn't fetch 1 RFC1766INFO structure\n"); - - /* verify the Rfc1766 value */ - ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, info.lcid, &rfcstr); - ok(ret == S_OK, "Expected S_OK, got %08x\n", ret); - - /* not an exact 1:1 correspondence between lcid and rfc1766 in the - * mlang database, e.g., nb-no -> 1044 -> no */ - ok(strstrW(info.wszRfc1766, rfcstr) != NULL, - "Expected matching locale names\n"); - - SysFreeString(rfcstr); - } - IEnumRfc1766_Release(pEnumRfc1766); -} - -static void test_GetLcidFromRfc1766(IMultiLanguage2 *iML2) -{ - LCID lcid; - HRESULT ret; - - static WCHAR e[] = { 'e',0 }; - static WCHAR en[] = { 'e','n',0 }; - static WCHAR empty[] = { 0 }; - static WCHAR dash[] = { '-',0 }; - static WCHAR e_dash[] = { 'e','-',0 }; - static WCHAR en_gb[] = { 'e','n','-','g','b',0 }; - static WCHAR en_us[] = { 'e','n','-','u','s',0 }; - static WCHAR en_them[] = { 'e','n','-','t','h','e','m',0 }; - static WCHAR english[] = { 'e','n','g','l','i','s','h',0 }; - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, NULL, en); - ok(ret == E_INVALIDARG, "GetLcidFromRfc1766 returned: %08x\n", ret); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, NULL); - ok(ret == E_INVALIDARG, "GetLcidFromRfc1766 returned: %08x\n", ret); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, e); - ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, empty); - ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, dash); - ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, e_dash); - ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en_them); - ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, english); - ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret); - - lcid = 0; - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en); - ok(ret == S_OK, "GetLcidFromRfc1766 returned: %08x\n", ret); - ok(lcid == 9, "got wrong lcid: %04x\n", lcid); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en_gb); - ok(ret == S_OK, "GetLcidFromRfc1766 returned: %08x\n", ret); - ok(lcid == 0x809, "got wrong lcid: %04x\n", lcid); - - ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en_us); - ok(ret == S_OK, "GetLcidFromRfc1766 returned: %08x\n", ret); - ok(lcid == 0x409, "got wrong lcid: %04x\n", lcid); -} - -static void test_GetRfc1766FromLcid(IMultiLanguage2 *iML2) -{ - HRESULT hr; - BSTR rfcstr; - LCID lcid; - - static WCHAR kok[] = {'k','o','k',0}; - - hr = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, kok); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - hr = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - ok_w2("Expected \"%s\", got \"%s\"n", kok, rfcstr); - - SysFreeString(rfcstr); -} - -START_TEST(mlang) -{ - IMultiLanguage2 *iML2 = NULL; - IMLangFontLink *iMLFL = NULL; - HRESULT ret; - - pGetCPInfoExA = (void *)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetCPInfoExA"); - - CoInitialize(NULL); - TRACE_2("Call CoCreateInstance\n"); - ret = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, - &IID_IMultiLanguage2, (void **)&iML2); - - trace("ret = %08x, MultiLanguage2 iML2 = %p\n", ret, iML2); - if (ret != S_OK || !iML2) return; - - test_rfc1766(iML2); - test_GetLcidFromRfc1766(iML2); - test_GetRfc1766FromLcid(iML2); - - test_EnumCodePages(iML2, 0); - test_EnumCodePages(iML2, MIMECONTF_MIME_LATEST); - test_EnumCodePages(iML2, MIMECONTF_BROWSER); - test_EnumCodePages(iML2, MIMECONTF_MINIMAL); - test_EnumCodePages(iML2, MIMECONTF_VALID); - /* FIXME: why MIMECONTF_MIME_REGISTRY returns 0 of supported codepages? */ - /*test_EnumCodePages(iML2, MIMECONTF_MIME_REGISTRY);*/ - - test_EnumScripts(iML2, 0); - test_EnumScripts(iML2, SCRIPTCONTF_SCRIPT_USER); - test_EnumScripts(iML2, SCRIPTCONTF_SCRIPT_USER | SCRIPTCONTF_SCRIPT_HIDE | SCRIPTCONTF_SCRIPT_SYSTEM); - - TRACE_2("Call IMultiLanguage2_IsConvertible\n"); - ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, CP_UNICODE); - ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UTF8 -> CP_UNICODE) = %08x\n", ret); - TRACE_2("Call IMultiLanguage2_IsConvertible\n"); - ret = IMultiLanguage2_IsConvertible(iML2, CP_UNICODE, CP_UTF8); - ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UNICODE -> CP_UTF8) = %08x\n", ret); - - test_multibyte_to_unicode_translations(iML2); - - IMultiLanguage2_Release(iML2); - - ret = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, - &IID_IMLangFontLink, (void **)&iMLFL); - - trace("ret = %08x, IMLangFontLink iMLFL = %p\n", ret, iMLFL); - if (ret != S_OK || !iML2) return; - - IMLangFontLink_Test(iMLFL); - IMLangFontLink_Release(iMLFL); - - CoUninitialize(); -} diff --git a/rostests/winetests/mlang/mlang.rbuild b/rostests/winetests/mlang/mlang.rbuild deleted file mode 100644 index 4862e0226a5..00000000000 --- a/rostests/winetests/mlang/mlang.rbuild +++ /dev/null @@ -1,16 +0,0 @@ - - - - - . - mlang.c - testlist.c - wine - uuid - oleaut32 - ole32 - gdi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/mlang/testlist.c b/rostests/winetests/mlang/testlist.c deleted file mode 100644 index db8217cf963..00000000000 --- a/rostests/winetests/mlang/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_mlang(void); - -const struct test winetest_testlist[] = -{ - { "mlang", func_mlang }, - { 0, 0 } -}; diff --git a/rostests/winetests/msacm32/msacm.c b/rostests/winetests/msacm32/msacm.c deleted file mode 100644 index cfa6aea004c..00000000000 --- a/rostests/winetests/msacm32/msacm.c +++ /dev/null @@ -1,498 +0,0 @@ -/* - * Unit tests for msacm functions - * - * 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 - */ - -#include -#include -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winnls.h" -#include "mmsystem.h" -#define NOBITMAP -#include "wine/mmreg.h" -#include "wine/msacm.h" - -static BOOL CALLBACK FormatTagEnumProc(HACMDRIVERID hadid, - PACMFORMATTAGDETAILS paftd, - DWORD dwInstance, - DWORD fdwSupport) -{ - if (winetest_interactive) - trace(" Format 0x%04x: %s\n", paftd->dwFormatTag, paftd->szFormatTag); - - return TRUE; -} - -static BOOL CALLBACK FormatEnumProc(HACMDRIVERID hadid, - LPACMFORMATDETAILS pafd, - DWORD dwInstance, - DWORD fd) -{ - if (winetest_interactive) - trace(" 0x%04x, %s\n", pafd->dwFormatTag, pafd->szFormat); - - return TRUE; -} - -static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid, - DWORD dwInstance, - DWORD fdwSupport) -{ - MMRESULT rc; - ACMDRIVERDETAILSA dd; - HACMDRIVER had; - - DWORD dwDriverPriority; - DWORD dwDriverSupport; - - if (winetest_interactive) { - trace("id: %p\n", hadid); - trace(" Supports:\n"); - if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_ASYNC) - trace(" async conversions\n"); - if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) - trace(" different format conversions\n"); - if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER) - trace(" same format conversions\n"); - if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER) - trace(" filtering\n"); - } - - /* try an invalid pointer */ - rc = acmDriverDetails(hadid, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmDriverDetails(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try an invalid structure size */ - ZeroMemory(&dd, sizeof(dd)); - rc = acmDriverDetails(hadid, &dd, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmDriverDetails(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* MSDN says this should fail but it doesn't in practice */ - dd.cbStruct = 4; - rc = acmDriverDetails(hadid, &dd, 0); - ok(rc == MMSYSERR_NOERROR, - "acmDriverDetails(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - - /* try an invalid handle */ - dd.cbStruct = sizeof(dd); - rc = acmDriverDetails((HACMDRIVERID)1, &dd, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmDriverDetails(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try an invalid handle and pointer */ - rc = acmDriverDetails((HACMDRIVERID)1, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmDriverDetails(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try invalid details */ - rc = acmDriverDetails(hadid, &dd, -1); - ok(rc == MMSYSERR_INVALFLAG, - "acmDriverDetails(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALFLAG); - - /* try valid parameters */ - rc = acmDriverDetails(hadid, &dd, 0); - ok(rc == MMSYSERR_NOERROR, - "acmDriverDetails(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - - /* cbStruct should contain size of returned data (at most sizeof(dd)) - TODO: should it be *exactly* sizeof(dd), as tested here? - */ - if (rc == MMSYSERR_NOERROR) { - ok(dd.cbStruct == sizeof(dd), - "acmDriverDetails(): cbStruct = %08x, should be %08lx\n", - dd.cbStruct, (unsigned long)sizeof(dd)); - } - - if (rc == MMSYSERR_NOERROR && winetest_interactive) { - trace(" Short name: %s\n", dd.szShortName); - trace(" Long name: %s\n", dd.szLongName); - trace(" Copyright: %s\n", dd.szCopyright); - trace(" Licensing: %s\n", dd.szLicensing); - trace(" Features: %s\n", dd.szFeatures); - trace(" Supports %u formats\n", dd.cFormatTags); - trace(" Supports %u filter formats\n", dd.cFilterTags); - } - - /* try bad pointer */ - rc = acmMetrics((HACMOBJ)hadid, ACM_METRIC_DRIVER_PRIORITY, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try bad handle */ - rc = acmMetrics((HACMOBJ)1, ACM_METRIC_DRIVER_PRIORITY, &dwDriverPriority); - ok(rc == MMSYSERR_INVALHANDLE, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try bad pointer and handle */ - rc = acmMetrics((HACMOBJ)1, ACM_METRIC_DRIVER_PRIORITY, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try valid parameters */ - rc = acmMetrics((HACMOBJ)hadid, ACM_METRIC_DRIVER_PRIORITY, &dwDriverSupport); - ok(rc == MMSYSERR_NOERROR, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - - /* try bad pointer */ - rc = acmMetrics((HACMOBJ)hadid, ACM_METRIC_DRIVER_SUPPORT, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try bad handle */ - rc = acmMetrics((HACMOBJ)1, ACM_METRIC_DRIVER_SUPPORT, &dwDriverSupport); - ok(rc == MMSYSERR_INVALHANDLE, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try bad pointer and handle */ - rc = acmMetrics((HACMOBJ)1, ACM_METRIC_DRIVER_SUPPORT, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try valid parameters */ - rc = acmMetrics((HACMOBJ)hadid, ACM_METRIC_DRIVER_SUPPORT, &dwDriverSupport); - ok(rc == MMSYSERR_NOERROR, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - - /* try invalid pointer */ - rc = acmDriverOpen(0, hadid, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmDriverOpen(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try invalid handle */ - rc = acmDriverOpen(&had, (HACMDRIVERID)1, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmDriverOpen(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try invalid open */ - rc = acmDriverOpen(&had, hadid, -1); - ok(rc == MMSYSERR_INVALFLAG, - "acmDriverOpen(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALFLAG); - - /* try valid parameters */ - rc = acmDriverOpen(&had, hadid, 0); - ok(rc == MMSYSERR_NOERROR, - "acmDriverOpen(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - - if (rc == MMSYSERR_NOERROR) { - DWORD dwSize; - HACMDRIVERID hid; - - /* try bad pointer */ - rc = acmDriverID((HACMOBJ)had, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmDriverID(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try bad handle */ - rc = acmDriverID((HACMOBJ)1, &hid, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmDriverID(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try bad handle and pointer */ - rc = acmDriverID((HACMOBJ)1, 0, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmDriverID(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try bad flag */ - rc = acmDriverID((HACMOBJ)had, &hid, 1); - ok(rc == MMSYSERR_INVALFLAG, - "acmDriverID(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALFLAG); - - /* try valid parameters */ - rc = acmDriverID((HACMOBJ)had, &hid, 0); - ok(rc == MMSYSERR_NOERROR, - "acmDriverID(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - ok(hid == hadid, - "acmDriverID() returned ID %p doesn't equal %p\n", - hid, hadid); - - /* try bad pointer */ - rc = acmMetrics((HACMOBJ)had, ACM_METRIC_MAX_SIZE_FORMAT, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try bad handle */ - rc = acmMetrics((HACMOBJ)1, ACM_METRIC_MAX_SIZE_FORMAT, &dwSize); - ok(rc == MMSYSERR_INVALHANDLE, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try bad pointer and handle */ - rc = acmMetrics((HACMOBJ)1, ACM_METRIC_MAX_SIZE_FORMAT, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try valid parameters */ - rc = acmMetrics((HACMOBJ)had, ACM_METRIC_MAX_SIZE_FORMAT, &dwSize); - ok(rc == MMSYSERR_NOERROR, - "acmMetrics(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - if (rc == MMSYSERR_NOERROR) { - ACMFORMATDETAILSA fd; - WAVEFORMATEX * pwfx; - ACMFORMATTAGDETAILSA aftd; - - /* try bad pointer */ - rc = acmFormatEnum(had, 0, FormatEnumProc, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmFormatEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try bad structure size */ - ZeroMemory(&fd, sizeof(fd)); - rc = acmFormatEnum(had, &fd, FormatEnumProc, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmFormatEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - fd.cbStruct = sizeof(fd) - 1; - rc = acmFormatEnum(had, &fd, FormatEnumProc, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmFormatEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - if (dwSize < sizeof(WAVEFORMATEX)) - dwSize = sizeof(WAVEFORMATEX); - - pwfx = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize); - - pwfx->cbSize = LOWORD(dwSize) - sizeof(WAVEFORMATEX); - pwfx->wFormatTag = WAVE_FORMAT_UNKNOWN; - - fd.cbStruct = sizeof(fd); - fd.pwfx = pwfx; - fd.cbwfx = dwSize; - fd.dwFormatTag = WAVE_FORMAT_UNKNOWN; - - /* try valid parameters */ - rc = acmFormatEnum(had, &fd, FormatEnumProc, 0, 0); - ok(rc == MMSYSERR_NOERROR, - "acmFormatEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - - /* try bad pointer */ - rc = acmFormatTagEnum(had, 0, FormatTagEnumProc, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmFormatTagEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - /* try bad structure size */ - ZeroMemory(&aftd, sizeof(aftd)); - rc = acmFormatTagEnum(had, &aftd, FormatTagEnumProc, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmFormatTagEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - aftd.cbStruct = sizeof(aftd) - 1; - rc = acmFormatTagEnum(had, &aftd, FormatTagEnumProc, 0, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmFormatTagEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALPARAM); - - aftd.cbStruct = sizeof(aftd); - aftd.dwFormatTag = WAVE_FORMAT_UNKNOWN; - - /* try bad flag */ - rc = acmFormatTagEnum(had, &aftd, FormatTagEnumProc, 0, 1); - ok(rc == MMSYSERR_INVALFLAG, - "acmFormatTagEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALFLAG); - - /* try valid parameters */ - rc = acmFormatTagEnum(had, &aftd, FormatTagEnumProc, 0, 0); - ok(rc == MMSYSERR_NOERROR, - "acmFormatTagEnum(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - - HeapFree(GetProcessHeap(), 0, pwfx); - - /* try invalid handle */ - rc = acmDriverClose((HACMDRIVER)1, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmDriverClose(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - - /* try invalid flag */ - rc = acmDriverClose(had, 1); - ok(rc == MMSYSERR_INVALFLAG, - "acmDriverClose(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALFLAG); - - /* try valid parameters */ - rc = acmDriverClose(had, 0); - ok(rc == MMSYSERR_NOERROR, - "acmDriverClose(): rc = %08x, should be %08x\n", - rc, MMSYSERR_NOERROR); - - /* try closing again */ - rc = acmDriverClose(had, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmDriverClose(): rc = %08x, should be %08x\n", - rc, MMSYSERR_INVALHANDLE); - } - } - - return TRUE; -} - -static const char * get_metric(UINT uMetric) -{ - switch (uMetric) { - case ACM_METRIC_COUNT_CODECS: - return "ACM_METRIC_COUNT_CODECS"; - case ACM_METRIC_COUNT_CONVERTERS: - return "ACM_METRIC_COUNT_CONVERTERS"; - case ACM_METRIC_COUNT_DISABLED: - return "ACM_METRIC_COUNT_DISABLED"; - case ACM_METRIC_COUNT_DRIVERS: - return "ACM_METRIC_COUNT_DRIVERS"; - case ACM_METRIC_COUNT_FILTERS: - return "ACM_METRIC_COUNT_FILTERS"; - case ACM_METRIC_COUNT_HARDWARE: - return "ACM_METRIC_COUNT_HARDWARE"; - case ACM_METRIC_COUNT_LOCAL_CODECS: - return "ACM_METRIC_COUNT_LOCAL_CODECS"; - case ACM_METRIC_COUNT_LOCAL_CONVERTERS: - return "ACM_METRIC_COUNT_LOCAL_CONVERTERS"; - case ACM_METRIC_COUNT_LOCAL_DISABLED: - return "ACM_METRIC_COUNT_LOCAL_DISABLED"; - case ACM_METRIC_COUNT_LOCAL_DRIVERS: - return "ACM_METRIC_COUNT_LOCAL_DRIVERS"; - case ACM_METRIC_COUNT_LOCAL_FILTERS: - return "ACM_METRIC_COUNT_LOCAL_FILTERS"; - case ACM_METRIC_DRIVER_PRIORITY: - return "ACM_METRIC_DRIVER_PRIORITY"; - case ACM_METRIC_DRIVER_SUPPORT: - return "ACM_METRIC_DRIVER_SUPPORT"; - case ACM_METRIC_HARDWARE_WAVE_INPUT: - return "ACM_METRIC_HARDWARE_WAVE_INPUT"; - case ACM_METRIC_HARDWARE_WAVE_OUTPUT: - return "ACM_METRIC_HARDWARE_WAVE_OUTPUT"; - case ACM_METRIC_MAX_SIZE_FILTER: - return "ACM_METRIC_MAX_SIZE_FILTER"; - case ACM_METRIC_MAX_SIZE_FORMAT: - return "ACM_METRIC_MAX_SIZE_FORMAT"; - } - - return "UNKNOWN"; -} - -static DWORD check_count(UINT uMetric) -{ - DWORD dwMetric; - MMRESULT rc; - - /* try invalid result pointer */ - rc = acmMetrics(NULL, uMetric, 0); - ok(rc == MMSYSERR_INVALPARAM, - "acmMetrics(NULL, %s, 0): rc = 0x%08x, should be 0x%08x\n", - get_metric(uMetric), rc, MMSYSERR_INVALPARAM); - - /* try invalid handle */ - rc = acmMetrics((HACMOBJ)1, uMetric, &dwMetric); - ok(rc == MMSYSERR_INVALHANDLE, - "acmMetrics(1, %s, %p): rc = 0x%08x, should be 0x%08x\n", - get_metric(uMetric), &dwMetric, rc, MMSYSERR_INVALHANDLE); - - /* try invalid result pointer and handle */ - rc = acmMetrics((HACMOBJ)1, uMetric, 0); - ok(rc == MMSYSERR_INVALHANDLE, - "acmMetrics(1, %s, 0): rc = 0x%08x, should be 0x%08x\n", - get_metric(uMetric), rc, MMSYSERR_INVALHANDLE); - - /* try valid parameters */ - rc = acmMetrics(NULL, uMetric, &dwMetric); - ok(rc == MMSYSERR_NOERROR, "acmMetrics() failed: rc = 0x%08x\n", rc); - - if (rc == MMSYSERR_NOERROR && winetest_interactive) - trace("%s: %u\n", get_metric(uMetric), dwMetric); - - return dwMetric; -} - -static void msacm_tests(void) -{ - MMRESULT rc; - DWORD dwCount; - DWORD dwACMVersion = acmGetVersion(); - - if (winetest_interactive) { - trace("ACM version = %u.%02u build %u%s\n", - HIWORD(dwACMVersion) >> 8, - HIWORD(dwACMVersion) & 0xff, - LOWORD(dwACMVersion), - LOWORD(dwACMVersion) == 0 ? " (Retail)" : ""); - } - - dwCount = check_count(ACM_METRIC_COUNT_CODECS); - dwCount = check_count(ACM_METRIC_COUNT_CONVERTERS); - dwCount = check_count(ACM_METRIC_COUNT_DISABLED); - dwCount = check_count(ACM_METRIC_COUNT_DRIVERS); - dwCount = check_count(ACM_METRIC_COUNT_FILTERS); - dwCount = check_count(ACM_METRIC_COUNT_HARDWARE); - dwCount = check_count(ACM_METRIC_COUNT_LOCAL_CODECS); - dwCount = check_count(ACM_METRIC_COUNT_LOCAL_CONVERTERS); - dwCount = check_count(ACM_METRIC_COUNT_LOCAL_DISABLED); - dwCount = check_count(ACM_METRIC_COUNT_LOCAL_DRIVERS); - dwCount = check_count(ACM_METRIC_COUNT_LOCAL_FILTERS); - - if (winetest_interactive) - trace("enabled drivers:\n"); - - rc = acmDriverEnum(DriverEnumProc, 0, 0); - ok(rc == MMSYSERR_NOERROR, - "acmDriverEnum() failed, rc=%08x, should be 0x%08x\n", - rc, MMSYSERR_NOERROR); -} - -START_TEST(msacm) -{ - msacm_tests(); -} diff --git a/rostests/winetests/msacm32/msacm32.rbuild b/rostests/winetests/msacm32/msacm32.rbuild deleted file mode 100644 index 7172902e9df..00000000000 --- a/rostests/winetests/msacm32/msacm32.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - - - - . - wine - kernel32 - msacm32 - msacm.c - testlist.c - - diff --git a/rostests/winetests/msacm32/testlist.c b/rostests/winetests/msacm32/testlist.c deleted file mode 100644 index 7220247caf4..00000000000 --- a/rostests/winetests/msacm32/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_msacm(void); - -const struct test winetest_testlist[] = -{ - { "msacm", func_msacm }, - { 0, 0 } -}; diff --git a/rostests/winetests/mshtml/dom.c b/rostests/winetests/mshtml/dom.c deleted file mode 100644 index 4540ed405b8..00000000000 --- a/rostests/winetests/mshtml/dom.c +++ /dev/null @@ -1,2593 +0,0 @@ -/* - * 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 - */ - -#define COBJMACROS -#define CONST_VTABLE - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "ole2.h" -#include "mshtml.h" -#include "mshtmcid.h" -#include "mshtmhst.h" -#include "docobj.h" -#include "dispex.h" - -static const char doc_blank[] = ""; -static const char doc_str1[] = "test"; -static const char range_test_str[] = - "test \nabc\t123
        it's\r\n \t
        text
        "; -static const char range_test2_str[] = - "abc
        123

        def"; -static const char elem_test_str[] = - "test" - "text test" - "
        link" - "" - "" - "" - "
        " - "" - "" - "" - ""; -static const char indent_test_str[] = - "testabc
        123"; - -static const WCHAR noneW[] = {'N','o','n','e',0}; - -static WCHAR characterW[] = {'c','h','a','r','a','c','t','e','r',0}; -static WCHAR texteditW[] = {'t','e','x','t','e','d','i','t',0}; -static WCHAR wordW[] = {'w','o','r','d',0}; - -static const WCHAR text_javascriptW[] = {'t','e','x','t','/','j','a','v','a','s','c','r','i','p','t',0}; - -static const WCHAR idW[] = {'i','d',0}; - -typedef enum { - ET_NONE, - ET_HTML, - ET_HEAD, - ET_TITLE, - ET_BODY, - ET_A, - ET_INPUT, - ET_SELECT, - ET_TEXTAREA, - ET_OPTION, - ET_STYLE, - ET_BLOCKQUOTE, - ET_P, - ET_BR, - ET_TABLE, - ET_TBODY, - ET_SCRIPT, - ET_TEST, - ET_TESTG, - ET_COMMENT, - ET_IMG -} elem_type_t; - -static REFIID const none_iids[] = { - &IID_IUnknown, - NULL -}; - -static REFIID const elem_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const body_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLTextContainer, - &IID_IHTMLBodyElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const anchor_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLAnchorElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const input_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLInputElement, - &IID_IHTMLInputTextElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const select_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLSelectElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const textarea_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLTextAreaElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const option_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLOptionElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const table_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLTable, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const script_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLScriptElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const text_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLDOMTextNode, - NULL -}; - -static REFIID const location_iids[] = { - &IID_IDispatch, - &IID_IHTMLLocation, - NULL -}; - -static REFIID const window_iids[] = { - &IID_IDispatch, - &IID_IHTMLWindow2, - &IID_IHTMLWindow3, - &IID_IDispatchEx, - NULL -}; - -static REFIID const comment_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLCommentElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const img_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IDispatchEx, - &IID_IHTMLImgElement, - &IID_IConnectionPointContainer, - NULL -}; - -static REFIID const generic_iids[] = { - &IID_IHTMLDOMNode, - &IID_IHTMLDOMNode2, - &IID_IHTMLElement, - &IID_IHTMLElement2, - &IID_IHTMLGenericElement, - &IID_IDispatchEx, - &IID_IConnectionPointContainer, - NULL -}; - -typedef struct { - const char *tag; - REFIID *iids; - const IID *dispiid; -} elem_type_info_t; - -static const elem_type_info_t elem_type_infos[] = { - {"", none_iids, NULL}, - {"HTML", elem_iids, NULL}, - {"HEAD", elem_iids, NULL}, - {"TITLE", elem_iids, NULL}, - {"BODY", body_iids, NULL}, - {"A", anchor_iids, NULL}, - {"INPUT", input_iids, &DIID_DispHTMLInputElement}, - {"SELECT", select_iids, &DIID_DispHTMLSelectElement}, - {"TEXTAREA", textarea_iids, NULL}, - {"OPTION", option_iids, &DIID_DispHTMLOptionElement}, - {"STYLE", elem_iids, NULL}, - {"BLOCKQUOTE",elem_iids, NULL}, - {"P", elem_iids, NULL}, - {"BR", elem_iids, NULL}, - {"TABLE", table_iids, NULL}, - {"TBODY", elem_iids, NULL}, - {"SCRIPT", script_iids, NULL}, - {"TEST", elem_iids, &DIID_DispHTMLUnknownElement}, - {"TEST", generic_iids, &DIID_DispHTMLGenericElement}, - {"!", comment_iids, &DIID_DispHTMLCommentElement}, - {"IMG", img_iids, &DIID_DispHTMLImg} -}; - -static const char *dbgstr_w(LPCWSTR str) -{ - static char buf[512]; - if(!str) - return "(null)"; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - -static const char *dbgstr_guid(REFIID riid) -{ - static char buf[50]; - - sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], - riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], - riid->Data4[5], riid->Data4[6], riid->Data4[7]); - - return buf; -} - -static int strcmp_wa(LPCWSTR strw, const char *stra) -{ - WCHAR buf[512]; - MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, sizeof(buf)/sizeof(WCHAR)); - return lstrcmpW(strw, buf); -} - -static BSTR a2bstr(const char *str) -{ - BSTR ret; - int len; - - len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); - ret = SysAllocStringLen(NULL, len); - MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len); - - return ret; -} - -static IHTMLDocument2 *create_document(void) -{ - IHTMLDocument2 *doc; - HRESULT hres; - - hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, - &IID_IHTMLDocument2, (void**)&doc); - ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres); - - return doc; -} - -#define test_ifaces(i,ids) _test_ifaces(__LINE__,i,ids) -static void _test_ifaces(unsigned line, IUnknown *iface, REFIID *iids) -{ - const IID * const *piid; - IUnknown *unk; - HRESULT hres; - - for(piid = iids; *piid; piid++) { - hres = IDispatch_QueryInterface(iface, *piid, (void**)&unk); - ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", dbgstr_guid(*piid), hres); - if(SUCCEEDED(hres)) - IUnknown_Release(unk); - } -} - -#define test_disp(u,id) _test_disp(__LINE__,u,id) -static void _test_disp(unsigned line, IUnknown *unk, const IID *diid) -{ - IDispatchEx *dispex; - ITypeInfo *typeinfo; - UINT ticnt; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IDispatchEx, (void**)&dispex); - ok_(__FILE__,line) (hres == S_OK, "Could not get IDispatch: %08x\n", hres); - if(FAILED(hres)) - return; - - ticnt = 0xdeadbeef; - hres = IDispatchEx_GetTypeInfoCount(dispex, &ticnt); - ok_(__FILE__,line) (hres == S_OK, "GetTypeInfoCount failed: %08x\n", hres); - ok_(__FILE__,line) (ticnt == 1, "ticnt=%u\n", ticnt); - - hres = IDispatchEx_GetTypeInfo(dispex, 0, 0, &typeinfo); - ok_(__FILE__,line) (hres == S_OK, "GetTypeInfo failed: %08x\n", hres); - - if(SUCCEEDED(hres)) { - TYPEATTR *type_attr; - - hres = ITypeInfo_GetTypeAttr(typeinfo, &type_attr); - ok_(__FILE__,line) (hres == S_OK, "GetTypeAttr failed: %08x\n", hres); - ok_(__FILE__,line) (IsEqualGUID(&type_attr->guid, diid), "unexpected guid %s\n", dbgstr_guid(&type_attr->guid)); - - ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr); - ITypeInfo_Release(typeinfo); - } - - IDispatchEx_Release(dispex); -} - -#define get_elem_iface(u) _get_elem_iface(__LINE__,u) -static IHTMLElement *_get_elem_iface(unsigned line, IUnknown *unk) -{ - IHTMLElement *elem; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement, (void**)&elem); - ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLElement: %08x\n", hres); - return elem; -} - -#define get_elem2_iface(u) _get_elem2_iface(__LINE__,u) -static IHTMLElement2 *_get_elem2_iface(unsigned line, IUnknown *unk) -{ - IHTMLElement2 *elem; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement2, (void**)&elem); - ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLElement2: %08x\n", hres); - return elem; -} - -#define get_node_iface(u) _get_node_iface(__LINE__,u) -static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk) -{ - IHTMLDOMNode *node; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node); - ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLDOMNode: %08x\n", hres); - return node; -} - -#define get_img_iface(u) _get_img_iface(__LINE__,u) -static IHTMLImgElement *_get_img_iface(unsigned line, IUnknown *unk) -{ - IHTMLImgElement *img; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IHTMLImgElement, (void**)&img); - ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLImgElement: %08x\n", hres); - return img; -} - -#define test_node_name(u,n) _test_node_name(__LINE__,u,n) -static void _test_node_name(unsigned line, IUnknown *unk, const char *exname) -{ - IHTMLDOMNode *node = _get_node_iface(line, unk); - BSTR name; - HRESULT hres; - - hres = IHTMLDOMNode_get_nodeName(node, &name); - IHTMLDOMNode_Release(node); - ok_(__FILE__, line) (hres == S_OK, "get_nodeName failed: %08x\n", hres); - ok_(__FILE__, line) (!strcmp_wa(name, exname), "got name: %s, expected %s\n", dbgstr_w(name), exname); - - SysFreeString(name); -} - -#define test_elem_tag(u,n) _test_elem_tag(__LINE__,u,n) -static void _test_elem_tag(unsigned line, IUnknown *unk, const char *extag) -{ - IHTMLElement *elem = _get_elem_iface(line, unk); - BSTR tag; - HRESULT hres; - - hres = IHTMLElement_get_tagName(elem, &tag); - IHTMLElement_Release(elem); - ok_(__FILE__, line) (hres == S_OK, "get_tagName failed: %08x\n", hres); - ok_(__FILE__, line) (!strcmp_wa(tag, extag), "got tag: %s, expected %s\n", dbgstr_w(tag), extag); - - SysFreeString(tag); -} - -#define test_elem_type(ifc,t) _test_elem_type(__LINE__,ifc,t) -static void _test_elem_type(unsigned line, IUnknown *unk, elem_type_t type) -{ - _test_elem_tag(line, unk, elem_type_infos[type].tag); - _test_ifaces(line, unk, elem_type_infos[type].iids); - - if(elem_type_infos[type].dispiid) - _test_disp(line, unk, elem_type_infos[type].dispiid); -} - -#define test_elem_attr(e,n,v) _test_elem_attr(__LINE__,e,n,v) -static void _test_elem_attr(unsigned line, IHTMLElement *elem, LPCWSTR name, LPCWSTR exval) -{ - VARIANT value; - BSTR tmp; - HRESULT hres; - - VariantInit(&value); - - tmp = SysAllocString(name); - hres = IHTMLElement_getAttribute(elem, tmp, 0, &value); - SysFreeString(tmp); - ok_(__FILE__,line) (hres == S_OK, "getAttribute failed: %08x\n", hres); - - if(exval) { - ok_(__FILE__,line) (V_VT(&value) == VT_BSTR, "vt=%d\n", V_VT(&value)); - ok_(__FILE__,line) (!lstrcmpW(exval, V_BSTR(&value)), "unexpected value %s\n", dbgstr_w(V_BSTR(&value))); - }else { - ok_(__FILE__,line) (V_VT(&value) == VT_NULL, "vt=%d\n", V_VT(&value)); - } - - VariantClear(&value); -} - -#define test_elem_offset(u) _test_elem_offset(__LINE__,u) -static void _test_elem_offset(unsigned line, IUnknown *unk) -{ - IHTMLElement *elem = _get_elem_iface(line, unk); - long l; - HRESULT hres; - - hres = IHTMLElement_get_offsetTop(elem, &l); - ok_(__FILE__,line) (hres == S_OK, "get_offsetTop failed: %08x\n", hres); - - IHTMLElement_Release(elem); -} - -static void test_doc_elem(IHTMLDocument2 *doc) -{ - IHTMLElement *elem; - IHTMLDocument3 *doc3; - HRESULT hres; - - hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**)&doc3); - ok(hres == S_OK, "QueryInterface(IID_IHTMLDocument3) failed: %08x\n", hres); - - hres = IHTMLDocument3_get_documentElement(doc3, &elem); - IHTMLDocument3_Release(doc3); - ok(hres == S_OK, "get_documentElement failed: %08x\n", hres); - - test_node_name((IUnknown*)elem, "HTML"); - test_elem_tag((IUnknown*)elem, "HTML"); - - IHTMLElement_Release(elem); -} - -#define get_doc_elem(d) _get_doc_elem(__LINE__,d) -static IHTMLElement *_get_doc_elem(unsigned line, IHTMLDocument2 *doc) -{ - IHTMLElement *elem; - IHTMLDocument3 *doc3; - HRESULT hres; - - hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**)&doc3); - ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDocument3 interface: %08x\n", hres); - hres = IHTMLDocument3_get_documentElement(doc3, &elem); - ok_(__FILE__,line) (hres == S_OK, "get_documentElement failed: %08x\n", hres); - IHTMLDocument3_Release(doc3); - - return elem; -} - -#define test_option_text(o,t) _test_option_text(__LINE__,o,t) -static void _test_option_text(unsigned line, IHTMLOptionElement *option, const char *text) -{ - BSTR bstr; - HRESULT hres; - - hres = IHTMLOptionElement_get_text(option, &bstr); - ok_(__FILE__,line) (hres == S_OK, "get_text failed: %08x\n", hres); - ok_(__FILE__,line) (!strcmp_wa(bstr, text), "text=%s\n", dbgstr_w(bstr)); - SysFreeString(bstr); -} - -#define test_option_put_text(o,t) _test_option_put_text(__LINE__,o,t) -static void _test_option_put_text(unsigned line, IHTMLOptionElement *option, const char *text) -{ - BSTR bstr; - HRESULT hres; - - bstr = a2bstr(text); - hres = IHTMLOptionElement_put_text(option, bstr); - SysFreeString(bstr); - ok(hres == S_OK, "put_text failed: %08x\n", hres); - - _test_option_text(line, option, text); -} - -#define test_option_value(o,t) _test_option_value(__LINE__,o,t) -static void _test_option_value(unsigned line, IHTMLOptionElement *option, const char *value) -{ - BSTR bstr; - HRESULT hres; - - hres = IHTMLOptionElement_get_value(option, &bstr); - ok_(__FILE__,line) (hres == S_OK, "get_value failed: %08x\n", hres); - ok_(__FILE__,line) (!strcmp_wa(bstr, value), "value=%s\n", dbgstr_w(bstr)); - SysFreeString(bstr); -} - -#define test_option_put_value(o,t) _test_option_put_value(__LINE__,o,t) -static void _test_option_put_value(unsigned line, IHTMLOptionElement *option, const char *value) -{ - BSTR bstr; - HRESULT hres; - - bstr = a2bstr(value); - hres = IHTMLOptionElement_put_value(option, bstr); - SysFreeString(bstr); - ok(hres == S_OK, "put_value failed: %08x\n", hres); - - _test_option_value(line, option, value); -} - -#define create_option_elem(d,t,v) _create_option_elem(__LINE__,d,t,v) -static IHTMLOptionElement *_create_option_elem(unsigned line, IHTMLDocument2 *doc, - const char *txt, const char *val) -{ - IHTMLOptionElementFactory *factory; - IHTMLOptionElement *option; - IHTMLWindow2 *window; - VARIANT text, value, empty; - HRESULT hres; - - hres = IHTMLDocument2_get_parentWindow(doc, &window); - ok_(__FILE__,line) (hres == S_OK, "get_parentElement failed: %08x\n", hres); - - hres = IHTMLWindow2_get_Option(window, &factory); - IHTMLWindow2_Release(window); - ok_(__FILE__,line) (hres == S_OK, "get_Option failed: %08x\n", hres); - - V_VT(&text) = VT_BSTR; - V_BSTR(&text) = a2bstr(txt); - V_VT(&value) = VT_BSTR; - V_BSTR(&value) = a2bstr(val); - V_VT(&empty) = VT_EMPTY; - - hres = IHTMLOptionElementFactory_create(factory, text, value, empty, empty, &option); - ok_(__FILE__,line) (hres == S_OK, "create failed: %08x\n", hres); - - IHTMLOptionElementFactory_Release(factory); - VariantClear(&text); - VariantClear(&value); - - _test_option_text(line, option, txt); - _test_option_value(line, option, val); - - return option; -} - -#define test_select_length(s,l) _test_select_length(__LINE__,s,l) -static void _test_select_length(unsigned line, IHTMLSelectElement *select, long length) -{ - long len = 0xdeadbeef; - HRESULT hres; - - hres = IHTMLSelectElement_get_length(select, &len); - ok_(__FILE__,line) (hres == S_OK, "get_length failed: %08x\n", hres); - ok_(__FILE__,line) (len == length, "len=%ld, expected %ld\n", len, length); -} - -#define test_select_selidx(s,i) _test_select_selidx(__LINE__,s,i) -static void _test_select_selidx(unsigned line, IHTMLSelectElement *select, long index) -{ - long idx = 0xdeadbeef; - HRESULT hres; - - hres = IHTMLSelectElement_get_selectedIndex(select, &idx); - ok_(__FILE__,line) (hres == S_OK, "get_selectedIndex failed: %08x\n", hres); - ok_(__FILE__,line) (idx == index, "idx=%ld, expected %ld\n", idx, index); -} - -#define test_select_put_selidx(s,i) _test_select_put_selidx(__LINE__,s,i) -static void _test_select_put_selidx(unsigned line, IHTMLSelectElement *select, long index) -{ - HRESULT hres; - - hres = IHTMLSelectElement_put_selectedIndex(select, index); - ok_(__FILE__,line) (hres == S_OK, "get_selectedIndex failed: %08x\n", hres); - _test_select_selidx(line, select, index); -} - -#define test_select_value(s,v) _test_select_value(__LINE__,s,v) -static void _test_select_value(unsigned line, IHTMLSelectElement *select, const char *exval) -{ - BSTR val; - HRESULT hres; - - hres = IHTMLSelectElement_get_value(select, &val); - ok_(__FILE__,line) (hres == S_OK, "get_value failed: %08x\n", hres); - if(exval) - ok_(__FILE__,line) (!strcmp_wa(val, exval), "unexpected value %s\n", dbgstr_w(val)); - else - ok_(__FILE__,line) (val == NULL, "val=%s, expected NULL\n", dbgstr_w(val)); -} - -#define test_select_set_value(s,v) _test_select_set_value(__LINE__,s,v) -static void _test_select_set_value(unsigned line, IHTMLSelectElement *select, const char *val) -{ - BSTR bstr; - HRESULT hres; - - bstr = a2bstr(val); - hres = IHTMLSelectElement_put_value(select, bstr); - SysFreeString(bstr); - ok_(__FILE__,line) (hres == S_OK, "put_value failed: %08x\n", hres); -} - -#define test_select_type(s,t) _test_select_type(__LINE__,s,t) -static void _test_select_type(unsigned line, IHTMLSelectElement *select, const char *extype) -{ - BSTR type; - HRESULT hres; - - hres = IHTMLSelectElement_get_type(select, &type); - ok_(__FILE__,line) (hres == S_OK, "get_type failed: %08x\n", hres); - ok_(__FILE__,line) (!strcmp_wa(type, extype), "type=%s, expected %s\n", dbgstr_w(type), extype); -} - -#define test_range_text(r,t) _test_range_text(__LINE__,r,t) -static void _test_range_text(unsigned line, IHTMLTxtRange *range, const char *extext) -{ - BSTR text; - HRESULT hres; - - hres = IHTMLTxtRange_get_text(range, &text); - ok_(__FILE__, line) (hres == S_OK, "get_text failed: %08x\n", hres); - - if(extext) { - ok_(__FILE__, line) (text != NULL, "text == NULL\n"); - ok_(__FILE__, line) (!strcmp_wa(text, extext), "text=\"%s\", expected \"%s\"\n", dbgstr_w(text), extext); - }else { - ok_(__FILE__, line) (text == NULL, "text=\"%s\", expected NULL\n", dbgstr_w(text)); - } - - SysFreeString(text); - -} - -#define test_range_collapse(r,b) _test_range_collapse(__LINE__,r,b) -static void _test_range_collapse(unsigned line, IHTMLTxtRange *range, BOOL b) -{ - HRESULT hres; - - hres = IHTMLTxtRange_collapse(range, b); - ok_(__FILE__, line) (hres == S_OK, "collapse failed: %08x\n", hres); - _test_range_text(line, range, NULL); -} - -#define test_range_expand(r,u,b,t) _test_range_expand(__LINE__,r,u,b,t) -static void _test_range_expand(unsigned line, IHTMLTxtRange *range, LPWSTR unit, - VARIANT_BOOL exb, const char *extext) -{ - VARIANT_BOOL b = 0xe0e0; - HRESULT hres; - - hres = IHTMLTxtRange_expand(range, unit, &b); - ok_(__FILE__,line) (hres == S_OK, "expand failed: %08x\n", hres); - ok_(__FILE__,line) (b == exb, "b=%x, expected %x\n", b, exb); - _test_range_text(line, range, extext); -} - -#define test_range_move(r,u,c,e) _test_range_move(__LINE__,r,u,c,e) -static void _test_range_move(unsigned line, IHTMLTxtRange *range, LPWSTR unit, long cnt, long excnt) -{ - long c = 0xdeadbeef; - HRESULT hres; - - hres = IHTMLTxtRange_move(range, unit, cnt, &c); - ok_(__FILE__,line) (hres == S_OK, "move failed: %08x\n", hres); - ok_(__FILE__,line) (c == excnt, "count=%ld, expected %ld\n", c, excnt); - _test_range_text(line, range, NULL); -} - -#define test_range_movestart(r,u,c,e) _test_range_movestart(__LINE__,r,u,c,e) -static void _test_range_movestart(unsigned line, IHTMLTxtRange *range, - LPWSTR unit, long cnt, long excnt) -{ - long c = 0xdeadbeef; - HRESULT hres; - - hres = IHTMLTxtRange_moveStart(range, unit, cnt, &c); - ok_(__FILE__,line) (hres == S_OK, "move failed: %08x\n", hres); - ok_(__FILE__,line) (c == excnt, "count=%ld, expected %ld\n", c, excnt); -} - -#define test_range_moveend(r,u,c,e) _test_range_moveend(__LINE__,r,u,c,e) -static void _test_range_moveend(unsigned line, IHTMLTxtRange *range, LPWSTR unit, long cnt, long excnt) -{ - long c = 0xdeadbeef; - HRESULT hres; - - hres = IHTMLTxtRange_moveEnd(range, unit, cnt, &c); - ok_(__FILE__,line) (hres == S_OK, "move failed: %08x\n", hres); - ok_(__FILE__,line) (c == excnt, "count=%ld, expected %ld\n", c, excnt); -} - -#define test_range_put_text(r,t) _test_range_put_text(__LINE__,r,t) -static void _test_range_put_text(unsigned line, IHTMLTxtRange *range, const char *text) -{ - HRESULT hres; - BSTR bstr = a2bstr(text); - - hres = IHTMLTxtRange_put_text(range, bstr); - ok_(__FILE__,line) (hres == S_OK, "put_text failed: %08x\n", hres); - SysFreeString(bstr); - _test_range_text(line, range, NULL); -} - -#define test_range_inrange(r1,r2,b) _test_range_inrange(__LINE__,r1,r2,b) -static void _test_range_inrange(unsigned line, IHTMLTxtRange *range1, IHTMLTxtRange *range2, VARIANT_BOOL exb) -{ - VARIANT_BOOL b; - HRESULT hres; - - b = 0xe0e0; - hres = IHTMLTxtRange_inRange(range1, range2, &b); - ok_(__FILE__,line) (hres == S_OK, "(1->2) isEqual failed: %08x\n", hres); - ok_(__FILE__,line) (b == exb, "(1->2) b=%x, expected %x\n", b, exb); -} - -#define test_range_isequal(r1,r2,b) _test_range_isequal(__LINE__,r1,r2,b) -static void _test_range_isequal(unsigned line, IHTMLTxtRange *range1, IHTMLTxtRange *range2, VARIANT_BOOL exb) -{ - VARIANT_BOOL b; - HRESULT hres; - - b = 0xe0e0; - hres = IHTMLTxtRange_isEqual(range1, range2, &b); - ok_(__FILE__,line) (hres == S_OK, "(1->2) isEqual failed: %08x\n", hres); - ok_(__FILE__,line) (b == exb, "(1->2) b=%x, expected %x\n", b, exb); - - b = 0xe0e0; - hres = IHTMLTxtRange_isEqual(range2, range1, &b); - ok_(__FILE__,line) (hres == S_OK, "(2->1) isEqual failed: %08x\n", hres); - ok_(__FILE__,line) (b == exb, "(2->1) b=%x, expected %x\n", b, exb); - - if(exb) { - test_range_inrange(range1, range2, VARIANT_TRUE); - test_range_inrange(range2, range1, VARIANT_TRUE); - } -} - -#define test_range_parent(r,t) _test_range_parent(__LINE__,r,t) -static void _test_range_parent(unsigned line, IHTMLTxtRange *range, elem_type_t type) -{ - IHTMLElement *elem; - HRESULT hres; - - hres = IHTMLTxtRange_parentElement(range, &elem); - ok_(__FILE__,line) (hres == S_OK, "parentElement failed: %08x\n", hres); - - _test_elem_type(line, (IUnknown*)elem, type); - - IHTMLElement_Release(elem); -} - -#define test_elem_collection(c,t,l) _test_elem_collection(__LINE__,c,t,l) -static void _test_elem_collection(unsigned line, IUnknown *unk, - const elem_type_t *elem_types, long exlen) -{ - IHTMLElementCollection *col; - long len; - DWORD i; - VARIANT name, index; - IDispatch *disp; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IHTMLElementCollection, (void**)&col); - ok(hres == S_OK, "Could not get IHTMLElementCollection: %08x\n", hres); - - test_disp((IUnknown*)col, &DIID_DispHTMLElementCollection); - - hres = IHTMLElementCollection_get_length(col, &len); - ok_(__FILE__,line) (hres == S_OK, "get_length failed: %08x\n", hres); - ok_(__FILE__,line) (len == exlen, "len=%ld, expected %ld\n", len, exlen); - - if(len > exlen) - len = exlen; - - V_VT(&index) = VT_EMPTY; - V_VT(&name) = VT_I4; - - for(i=0; i -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "ole2.h" -#include "mshtml.h" -#include "docobj.h" -#include "mshtmhst.h" -#include "mshtmdid.h" -#include "mshtmcid.h" -#include "hlink.h" -#include "dispex.h" -#include "idispids.h" -#include "shlguid.h" - -#include "initguid.h" -DEFINE_OLEGUID(CGID_DocHostCmdPriv, 0x000214D4L, 0, 0); - -#define DEFINE_EXPECT(func) \ - static BOOL expect_ ## func = FALSE, called_ ## func = FALSE - -#define SET_EXPECT(func) \ - expect_ ## func = TRUE - -#define SET_CALLED(func) \ - called_ ## func = TRUE - -#define CHECK_EXPECT2(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_EXPECT(func) \ - do { \ - CHECK_EXPECT2(func); \ - expect_ ## func = FALSE; \ - }while(0) - -#define CHECK_CALLED(func) \ - do { \ - ok(called_ ## func, "expected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -static IOleDocumentView *view = NULL; -static HWND container_hwnd = NULL, hwnd = NULL, last_hwnd = NULL; - -DEFINE_EXPECT(LockContainer); -DEFINE_EXPECT(SetActiveObject); -DEFINE_EXPECT(SetActiveObject_null); -DEFINE_EXPECT(GetWindow); -DEFINE_EXPECT(CanInPlaceActivate); -DEFINE_EXPECT(OnInPlaceActivate); -DEFINE_EXPECT(OnInPlaceActivateEx); -DEFINE_EXPECT(OnUIActivate); -DEFINE_EXPECT(GetWindowContext); -DEFINE_EXPECT(OnUIDeactivate); -DEFINE_EXPECT(OnInPlaceDeactivate); -DEFINE_EXPECT(OnInPlaceDeactivateEx); -DEFINE_EXPECT(GetContainer); -DEFINE_EXPECT(ShowUI); -DEFINE_EXPECT(ActivateMe); -DEFINE_EXPECT(GetHostInfo); -DEFINE_EXPECT(HideUI); -DEFINE_EXPECT(GetOptionKeyPath); -DEFINE_EXPECT(GetOverrideKeyPath); -DEFINE_EXPECT(SetStatusText); -DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT); -DEFINE_EXPECT(QueryStatus_OPEN); -DEFINE_EXPECT(QueryStatus_NEW); -DEFINE_EXPECT(Exec_SETPROGRESSMAX); -DEFINE_EXPECT(Exec_SETPROGRESSPOS); -DEFINE_EXPECT(Exec_HTTPEQUIV_DONE); -DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0); -DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1); -DEFINE_EXPECT(Exec_ShellDocView_37); -DEFINE_EXPECT(Exec_ShellDocView_84); -DEFINE_EXPECT(Exec_ShellDocView_103); -DEFINE_EXPECT(Exec_UPDATECOMMANDS); -DEFINE_EXPECT(Exec_SETTITLE); -DEFINE_EXPECT(Exec_HTTPEQUIV); -DEFINE_EXPECT(Exec_MSHTML_PARSECOMPLETE); -DEFINE_EXPECT(Exec_Explorer_69); -DEFINE_EXPECT(Invoke_AMBIENT_USERMODE); -DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL); -DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); -DEFINE_EXPECT(Invoke_AMBIENT_SILENT); -DEFINE_EXPECT(Invoke_AMBIENT_USERAGENT); -DEFINE_EXPECT(Invoke_AMBIENT_PALETTE); -DEFINE_EXPECT(GetDropTarget); -DEFINE_EXPECT(UpdateUI); -DEFINE_EXPECT(Navigate); -DEFINE_EXPECT(OnFrameWindowActivate); -DEFINE_EXPECT(OnChanged_READYSTATE); -DEFINE_EXPECT(OnChanged_1005); -DEFINE_EXPECT(GetDisplayName); -DEFINE_EXPECT(BindToStorage); -DEFINE_EXPECT(IsSystemMoniker); -DEFINE_EXPECT(GetBindResult); -DEFINE_EXPECT(GetClassID); -DEFINE_EXPECT(Abort); -DEFINE_EXPECT(Read); -DEFINE_EXPECT(CreateInstance); -DEFINE_EXPECT(Start); -DEFINE_EXPECT(Terminate); -DEFINE_EXPECT(Protocol_Read); -DEFINE_EXPECT(LockRequest); -DEFINE_EXPECT(UnlockRequest); -DEFINE_EXPECT(OnFocus_TRUE); -DEFINE_EXPECT(OnFocus_FALSE); -DEFINE_EXPECT(RequestUIActivate); -DEFINE_EXPECT(InPlaceFrame_SetBorderSpace); -DEFINE_EXPECT(InPlaceUIWindow_SetActiveObject); -DEFINE_EXPECT(GetExternal); - -static IUnknown *doc_unk; -static BOOL expect_LockContainer_fLock; -static BOOL expect_InPlaceUIWindow_SetActiveObject_active = TRUE; -static BOOL ipsex; -static BOOL set_clientsite = FALSE, container_locked = FALSE; -static BOOL readystate_set_loading = FALSE, load_from_stream; -static BOOL editmode = FALSE; -static int stream_read, protocol_read; -static enum load_state_t { - LD_DOLOAD, - LD_LOADING, - LD_LOADED, - LD_INTERACTIVE, - LD_COMPLETE, - LD_NO -} load_state; - -static LPCOLESTR expect_status_text = NULL; - -static const char html_page[] = -"" -"" -"test" -""; - -static const char css_data[] = "body {color: red}"; - -static const WCHAR doc_url[] = {'w','i','n','e','t','e','s','t',':','d','o','c',0}; -static const WCHAR about_blank_url[] = {'a','b','o','u','t',':','b','l','a','n','k',0}; - -static HRESULT QueryInterface(REFIID riid, void **ppv); -static void test_MSHTML_QueryStatus(IUnknown*,DWORD); -static BOOL nogecko = FALSE; - -#define test_readyState(u) _test_readyState(__LINE__,u) -static void _test_readyState(unsigned,IUnknown*); - -static void test_GetCurMoniker(IUnknown*,IMoniker*,LPCWSTR); - -static const WCHAR wszTimesNewRoman[] = - {'T','i','m','e','s',' ','N','e','w',' ','R','o','m','a','n',0}; -static const WCHAR wszArial[] = - {'A','r','i','a','l',0}; - -static const char *debugstr_guid(REFIID riid) -{ - static char buf[50]; - - sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], - riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], - riid->Data4[5], riid->Data4[6], riid->Data4[7]); - - return buf; -} - -static const char *debugstr_w(LPCWSTR str) -{ - static char buf[1024]; - - if(!str) - return "(null)"; - - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - -#define EXPECT_UPDATEUI 1 -#define EXPECT_SETTITLE 2 - -static void test_timer(DWORD flags) -{ - BOOL *b = &called_Exec_SETTITLE; - MSG msg; - - if(flags & EXPECT_UPDATEUI) { - SET_EXPECT(UpdateUI); - SET_EXPECT(Exec_UPDATECOMMANDS); - b = &called_UpdateUI; - } - if(flags & EXPECT_SETTITLE) - SET_EXPECT(Exec_SETTITLE); - - while(!*b && GetMessage(&msg, hwnd, 0, 0)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - if(flags & EXPECT_UPDATEUI) { - CHECK_CALLED(UpdateUI); - CHECK_CALLED(Exec_UPDATECOMMANDS); - } - if(flags & EXPECT_SETTITLE) - CHECK_CALLED(Exec_SETTITLE); -} - -DEFINE_GUID(IID_External_unk,0x30510406,0x98B5,0x11CF,0xBB,0x82,0x00,0xAA,0x00,0xBD,0xCE,0x0B); - -static HRESULT WINAPI External_QueryInterface(IDispatch *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IDispatch, riid)) { - *ppv = iface; - return S_OK; - } - - if(IsEqualGUID(&IID_IProxyManager, riid)) - return E_NOINTERFACE; /* TODO */ - if(IsEqualGUID(&IID_IDispatchEx, riid)) - return E_NOINTERFACE; /* TODO */ - if(IsEqualGUID(&IID_External_unk, riid)) - return E_NOINTERFACE; /* TODO */ - - ok(0, "unexpected riid: %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -static ULONG WINAPI Dispatch_AddRef(IDispatch *iface) -{ - return 2; -} - -static ULONG WINAPI Dispatch_Release(IDispatch *iface) -{ - return 1; -} - -static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, - ITypeInfo **ppTInfo) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames, - UINT cNames, LCID lcid, DISPID *rgDispId) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI External_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid, - LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, - EXCEPINFO *pExcepInfo, UINT *puArgErr) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IDispatchVtbl ExternalVtbl = { - External_QueryInterface, - Dispatch_AddRef, - Dispatch_Release, - Dispatch_GetTypeInfoCount, - Dispatch_GetTypeInfo, - Dispatch_GetIDsOfNames, - External_Invoke -}; - -static IDispatch External = { &ExternalVtbl }; - -static HRESULT WINAPI Protocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocol, riid)) { - *ppv = iface; - return S_OK; - } - - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Protocol_AddRef(IInternetProtocol *iface) -{ - return 2; -} - -static ULONG WINAPI Protocol_Release(IInternetProtocol *iface) -{ - return 1; -} - -static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, - IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, - DWORD grfPI, DWORD dwReserved) -{ - BINDINFO bindinfo; - DWORD bindf = 0; - HRESULT hres; - - static const WCHAR wszTextCss[] = {'t','e','x','t','/','c','s','s',0}; - static const WCHAR empty_str = {0}; - - CHECK_EXPECT(Start); - - ok(pOIProtSink != NULL, "pOIProtSink == NULL\n"); - ok(pOIBindInfo != NULL, "pOIBindInfo == NULL\n"); - ok(!grfPI, "grfPI = %x\n", grfPI); - ok(!dwReserved, "dwReserved = %d\n", dwReserved); - - memset(&bindinfo, 0, sizeof(bindinfo)); - bindinfo.cbSize = sizeof(bindinfo); - hres = IInternetBindInfo_GetBindInfo(pOIBindInfo, &bindf, &bindinfo); - ok(hres == S_OK, "GetBindInfo failed: %08x\n", hres); - ok(bindf == (BINDF_FROMURLMON|BINDF_PULLDATA|BINDF_NEEDFILE|BINDF_ASYNCSTORAGE|BINDF_ASYNCHRONOUS), - "bindf = %x\n", bindf); - - ok(bindinfo.cbSize == sizeof(bindinfo), "bindinfo.cbSize=%d\n", bindinfo.cbSize); - ok(bindinfo.szExtraInfo == NULL, "bindinfo.szExtraInfo=%p\n", bindinfo.szExtraInfo); - /* TODO: test stgmedData */ - ok(bindinfo.grfBindInfoF == 0, "bindinfo.grfBinfInfoF=%08x\n", bindinfo.grfBindInfoF); - ok(bindinfo.dwBindVerb == 0, "bindinfo.dwBindVerb=%d\n", bindinfo.dwBindVerb); - ok(bindinfo.szCustomVerb == 0, "bindinfo.szCustomVerb=%p\n", bindinfo.szCustomVerb); - ok(bindinfo.cbstgmedData == 0, "bindinfo.cbstgmedData=%d\n", bindinfo.cbstgmedData); - ok(bindinfo.dwOptions == 0x80000 || - bindinfo.dwOptions == 0x4080000, /* win2k3 */ - "bindinfo.dwOptions=%x\n", bindinfo.dwOptions); - ok(bindinfo.dwOptionsFlags == 0, "bindinfo.dwOptionsFlags=%d\n", bindinfo.dwOptionsFlags); - /* TODO: test dwCodePage */ - /* TODO: test securityAttributes */ - ok(IsEqualGUID(&IID_NULL, &bindinfo.iid), "unexpected bindinfo.iid\n"); - ok(bindinfo.pUnk == NULL, "bindinfo.pUnk=%p\n", bindinfo.pUnk); - ok(bindinfo.dwReserved == 0, "bindinfo.dwReserved=%d\n", bindinfo.dwReserved); - - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, - BINDSTATUS_CACHEFILENAMEAVAILABLE, &empty_str); - ok(hres == S_OK, "ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE) failed: %08x\n", hres); - - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, - BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, wszTextCss); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE) failed: %08x\n", hres); - - hres = IInternetProtocolSink_ReportData(pOIProtSink, - BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION, 13, 13); - ok(hres == S_OK, "ReportData failed: %08x\n", hres); - - hres = IInternetProtocolSink_ReportResult(pOIProtSink, S_OK, 0, NULL); - ok(hres == S_OK, "ReportResult failed: %08x\n", hres); - - return S_OK; -} - -static HRESULT WINAPI Protocol_Continue(IInternetProtocol *iface, - PROTOCOLDATA *pProtocolData) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Abort(IInternetProtocol *iface, HRESULT hrReason, - DWORD dwOptions) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Terminate(IInternetProtocol *iface, DWORD dwOptions) -{ - CHECK_EXPECT(Terminate); - return S_OK; -} - -static HRESULT WINAPI Protocol_Suspend(IInternetProtocol *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Resume(IInternetProtocol *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv, - ULONG cb, ULONG *pcbRead) -{ - CHECK_EXPECT2(Protocol_Read); - - ok(pv != NULL, "pv == NULL\n"); - ok(cb > sizeof(css_data), "cb < sizeof(css_data)\n"); - ok(pcbRead != NULL, "pcbRead == NULL\n"); - ok(!*pcbRead, "*pcbRead=%d\n", *pcbRead); - - if(protocol_read) - return S_FALSE; - - protocol_read += *pcbRead = sizeof(css_data)-1; - memcpy(pv, css_data, sizeof(css_data)-1); - return S_OK; -} - -static HRESULT WINAPI Protocol_Seek(IInternetProtocol *iface, - LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions) -{ - CHECK_EXPECT(LockRequest); - return S_OK; -} - -static HRESULT WINAPI Protocol_UnlockRequest(IInternetProtocol *iface) -{ - CHECK_EXPECT(UnlockRequest); - return S_OK; -} - -static const IInternetProtocolVtbl ProtocolVtbl = { - Protocol_QueryInterface, - Protocol_AddRef, - Protocol_Release, - Protocol_Start, - Protocol_Continue, - Protocol_Abort, - Protocol_Terminate, - Protocol_Suspend, - Protocol_Resume, - Protocol_Read, - Protocol_Seek, - Protocol_LockRequest, - Protocol_UnlockRequest -}; - -static IInternetProtocol Protocol = { &ProtocolVtbl }; - -static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) -{ - if(!IsEqualGUID(&IID_IInternetProtocolInfo, riid)) - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) -{ - return 2; -} - -static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) -{ - return 1; -} - -static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *pOuter, - REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IInternetProtocolInfo, riid)) - return E_NOINTERFACE; - - CHECK_EXPECT(CreateInstance); - ok(ppv != NULL, "ppv == NULL\n"); - - *ppv = &Protocol; - return S_OK; -} - -static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock) -{ - ok(0, "unexpected call\n"); - return S_OK; -} - -static const IClassFactoryVtbl ClassFactoryVtbl = { - ClassFactory_QueryInterface, - ClassFactory_AddRef, - ClassFactory_Release, - ClassFactory_CreateInstance, - ClassFactory_LockServer -}; - -static IClassFactory ClassFactory = { &ClassFactoryVtbl }; - -static HRESULT WINAPI HlinkFrame_QueryInterface(IHlinkFrame *iface, REFIID riid, void **ppv) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static ULONG WINAPI HlinkFrame_AddRef(IHlinkFrame *iface) -{ - return 2; -} - -static ULONG WINAPI HlinkFrame_Release(IHlinkFrame *iface) -{ - return 1; -} - -static HRESULT WINAPI HlinkFrame_SetBrowseContext(IHlinkFrame *iface, - IHlinkBrowseContext *pihlbc) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI HlinkFrame_GetBrowseContext(IHlinkFrame *iface, - IHlinkBrowseContext **ppihlbc) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI HlinkFrame_Navigate(IHlinkFrame *iface, DWORD grfHLNF, LPBC pbc, - IBindStatusCallback *pibsc, IHlink *pihlNavigate) -{ - HRESULT hres; - - CHECK_EXPECT(Navigate); - - ok(grfHLNF == 0, "grfHLNF=%d, expected 0\n", grfHLNF); - ok(pbc != NULL, "pbc == NULL\n"); - ok(pibsc != NULL, "pubsc == NULL\n"); - ok(pihlNavigate != NULL, "puhlNavigate == NULL\n"); - - if(pihlNavigate) { - LPWSTR frame_name = (LPWSTR)0xdeadbeef; - LPWSTR location = (LPWSTR)0xdeadbeef; - IHlinkSite *site; - IMoniker *mon = NULL; - DWORD site_data = 0xdeadbeef; - - hres = IHlink_GetTargetFrameName(pihlNavigate, &frame_name); - ok(hres == S_FALSE, "GetTargetFrameName failed: %08x\n", hres); - ok(frame_name == NULL, "frame_name = %p\n", frame_name); - - hres = IHlink_GetMonikerReference(pihlNavigate, 1, &mon, &location); - ok(hres == S_OK, "GetMonikerReference failed: %08x\n", hres); - ok(location == NULL, "location = %p\n", location); - ok(mon != NULL, "mon == NULL\n"); - - hres = IHlink_GetHlinkSite(pihlNavigate, &site, &site_data); - ok(hres == S_OK, "GetHlinkSite failed: %08x\n", hres); - ok(site == NULL, "site = %p\n, expected NULL\n", site); - ok(site_data == 0xdeadbeef, "site_data = %x\n", site_data); - } - - return S_OK; -} - -static HRESULT WINAPI HlinkFrame_OnNavigate(IHlinkFrame *iface, DWORD grfHLNF, - IMoniker *pimkTarget, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName, DWORD dwreserved) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI HlinkFrame_UpdateHlink(IHlinkFrame *iface, ULONG uHLID, - IMoniker *pimkTarget, LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IHlinkFrameVtbl HlinkFrameVtbl = { - HlinkFrame_QueryInterface, - HlinkFrame_AddRef, - HlinkFrame_Release, - HlinkFrame_SetBrowseContext, - HlinkFrame_GetBrowseContext, - HlinkFrame_Navigate, - HlinkFrame_OnNavigate, - HlinkFrame_UpdateHlink -}; - -static IHlinkFrame HlinkFrame = { &HlinkFrameVtbl }; - -static HRESULT WINAPI PropertyNotifySink_QueryInterface(IPropertyNotifySink *iface, - REFIID riid, void**ppv) -{ - if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) { - *ppv = iface; - return S_OK; - } - - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI PropertyNotifySink_AddRef(IPropertyNotifySink *iface) -{ - return 2; -} - -static ULONG WINAPI PropertyNotifySink_Release(IPropertyNotifySink *iface) -{ - return 1; -} - -static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, DISPID dispID) -{ - switch(dispID) { - case DISPID_READYSTATE: - CHECK_EXPECT2(OnChanged_READYSTATE); - test_MSHTML_QueryStatus(NULL, OLECMDF_SUPPORTED - | (editmode && (load_state == LD_INTERACTIVE || load_state == LD_COMPLETE) - ? OLECMDF_ENABLED : 0)); - - if(readystate_set_loading) { - readystate_set_loading = FALSE; - load_state = LD_LOADING; - } - test_readyState(NULL); - return S_OK; - case 1005: - CHECK_EXPECT(OnChanged_1005); - test_readyState(NULL); - load_state = LD_INTERACTIVE; - return S_OK; - } - - ok(0, "unexpected id %d\n", dispID); - return E_NOTIMPL; -} - -static HRESULT WINAPI PropertyNotifySink_OnRequestEdit(IPropertyNotifySink *iface, DISPID dispID) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static IPropertyNotifySinkVtbl PropertyNotifySinkVtbl = { - PropertyNotifySink_QueryInterface, - PropertyNotifySink_AddRef, - PropertyNotifySink_Release, - PropertyNotifySink_OnChanged, - PropertyNotifySink_OnRequestEdit -}; - -static IPropertyNotifySink PropertyNotifySink = { &PropertyNotifySinkVtbl }; - -static HRESULT WINAPI Stream_QueryInterface(IStream *iface, REFIID riid, void **ppv) -{ - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI Stream_AddRef(IStream *iface) -{ - return 2; -} - -static ULONG WINAPI Stream_Release(IStream *iface) -{ - return 1; -} - -static HRESULT WINAPI Stream_Read(IStream *iface, void *pv, - ULONG cb, ULONG *pcbRead) -{ - CHECK_EXPECT2(Read); - ok(pv != NULL, "pv == NULL\n"); - ok(cb > sizeof(html_page), "cb = %d\n", cb); - ok(pcbRead != NULL, "pcbRead == NULL\n"); - ok(!*pcbRead, "*pcbRead = %d\n", *pcbRead); - - if(stream_read) - return S_FALSE; - - memcpy(pv, html_page, sizeof(html_page)-1); - stream_read += *pcbRead = sizeof(html_page)-1; - return S_OK; -} - -static HRESULT WINAPI Stream_Write(IStream *iface, const void *pv, - ULONG cb, ULONG *pcbWritten) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_Seek(IStream *iface, LARGE_INTEGER dlibMove, - DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_SetSize(IStream *iface, ULARGE_INTEGER libNewSize) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_CopyTo(IStream *iface, IStream *pstm, - ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_Commit(IStream *iface, DWORD grfCommitFlags) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_Revert(IStream *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_LockRegion(IStream *iface, ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, DWORD dwLockType) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_UnlockRegion(IStream *iface, - ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_Stat(IStream *iface, STATSTG *pstatstg, - DWORD dwStatFlag) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Stream_Clone(IStream *iface, IStream **ppstm) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IStreamVtbl StreamVtbl = { - Stream_QueryInterface, - Stream_AddRef, - Stream_Release, - Stream_Read, - Stream_Write, - Stream_Seek, - Stream_SetSize, - Stream_CopyTo, - Stream_Commit, - Stream_Revert, - Stream_LockRegion, - Stream_UnlockRegion, - Stream_Stat, - Stream_Clone -}; - -static IStream Stream = { &StreamVtbl }; - -static HRESULT WINAPI Binding_QueryInterface(IBinding *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IWinInetHttpInfo, riid)) - return E_NOINTERFACE; /* TODO */ - - if(IsEqualGUID(&IID_IWinInetInfo, riid)) - return E_NOINTERFACE; /* TODO */ - - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI Binding_AddRef(IBinding *iface) -{ - return 2; -} - -static ULONG WINAPI Binding_Release(IBinding *iface) -{ - return 1; -} - -static HRESULT WINAPI Binding_Abort(IBinding *iface) -{ - CHECK_EXPECT(Abort); - return S_OK; -} - -static HRESULT WINAPI Binding_Suspend(IBinding *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_Resume(IBinding *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_SetPriority(IBinding *iface, LONG nPriority) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_GetPriority(IBinding *iface, LONG *pnPriority) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_GetBindResult(IBinding *iface, CLSID *pclsidProtocol, - DWORD *pdwResult, LPOLESTR *pszResult, DWORD *pdwReserved) -{ - CHECK_EXPECT(GetBindResult); - return E_NOTIMPL; -} - -static const IBindingVtbl BindingVtbl = { - Binding_QueryInterface, - Binding_AddRef, - Binding_Release, - Binding_Abort, - Binding_Suspend, - Binding_Resume, - Binding_SetPriority, - Binding_GetPriority, - Binding_GetBindResult -}; - -static IBinding Binding = { &BindingVtbl }; - -DEFINE_GUID(IID_IMoniker_unk,0xA158A630,0xED6F,0x45FB,0xB9,0x87,0xF6,0x86,0x76,0xF5,0x77,0x52); -DEFINE_GUID(IID_IMoniker_unk2, 0x79EAC9D3,0xBAF9,0x11CE,0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B); - -static HRESULT WINAPI Moniker_QueryInterface(IMoniker *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(&IID_IMoniker_unk, riid)) - return E_NOINTERFACE; /* TODO */ - if(IsEqualGUID(&IID_IMoniker_unk2, riid)) - return E_NOINTERFACE; /* TODO */ - - ok(0, "unexpected riid: %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -static ULONG WINAPI Moniker_AddRef(IMoniker *iface) -{ - return 2; -} - -static ULONG WINAPI Moniker_Release(IMoniker *iface) -{ - return 1; -} - -static HRESULT WINAPI Moniker_GetClassID(IMoniker *iface, CLSID *pClassID) -{ - CHECK_EXPECT(GetClassID); - ok(IsEqualGUID(pClassID, &IID_NULL), "pClassID = %s\n", debugstr_guid(pClassID)); - return E_FAIL; -} - -static HRESULT WINAPI Moniker_IsDirty(IMoniker *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Load(IMoniker *iface, IStream *pStm) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Save(IMoniker *iface, IStream *pStm, BOOL fClearDirty) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_GetSizeMax(IMoniker *iface, ULARGE_INTEGER *pcbSize) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_BindToObject(IMoniker *iface, IBindCtx *pcb, IMoniker *pmkToLeft, - REFIID riidResult, void **ppvResult) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, - REFIID riid, void **ppv) -{ - IBindStatusCallback *callback = NULL; - FORMATETC formatetc = {0xc02d, NULL, 1, -1, TYMED_ISTREAM}; - STGMEDIUM stgmedium; - BINDINFO bindinfo; - DWORD bindf; - HRESULT hres; - - static OLECHAR BSCBHolder[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 }; - static const WCHAR wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0}; - - CHECK_EXPECT(BindToStorage); - - load_state = LD_LOADING; - - ok(pbc != NULL, "pbc == NULL\n"); - ok(pmkToLeft == NULL, "pmkToLeft=%p\n", pmkToLeft); - ok(IsEqualGUID(&IID_IStream, riid), "unexpected riid\n"); - ok(ppv != NULL, "ppv == NULL\n"); - ok(*ppv == NULL, "*ppv=%p\n", *ppv); - - hres = IBindCtx_GetObjectParam(pbc, BSCBHolder, (IUnknown**)&callback); - ok(hres == S_OK, "GetObjectParam failed: %08x\n", hres); - ok(callback != NULL, "callback == NULL\n"); - - memset(&bindinfo, 0xf0, sizeof(bindinfo)); - bindinfo.cbSize = sizeof(bindinfo); - - hres = IBindStatusCallback_GetBindInfo(callback, &bindf, &bindinfo); - ok(hres == S_OK, "GetBindInfo failed: %08x\n", hres); - ok(bindf == (BINDF_PULLDATA|BINDF_ASYNCSTORAGE|BINDF_ASYNCHRONOUS), "bindf = %08x\n", bindf); - ok(bindinfo.cbSize == sizeof(bindinfo), "bindinfo.cbSize=%d\n", bindinfo.cbSize); - ok(bindinfo.szExtraInfo == NULL, "bindinfo.szExtraInfo=%p\n", bindinfo.szExtraInfo); - /* TODO: test stgmedData */ - ok(bindinfo.grfBindInfoF == 0, "bindinfo.grfBinfInfoF=%08x\n", bindinfo.grfBindInfoF); - ok(bindinfo.dwBindVerb == 0, "bindinfo.dwBindVerb=%d\n", bindinfo.dwBindVerb); - ok(bindinfo.szCustomVerb == 0, "bindinfo.szCustomVerb=%p\n", bindinfo.szCustomVerb); - ok(bindinfo.cbstgmedData == 0, "bindinfo.cbstgmedData=%d\n", bindinfo.cbstgmedData); - ok(bindinfo.dwOptions == 0x80000 || bindinfo.dwOptions == 0x4080000, - "bindinfo.dwOptions=%x\n", bindinfo.dwOptions); - ok(bindinfo.dwOptionsFlags == 0, "bindinfo.dwOptionsFlags=%d\n", bindinfo.dwOptionsFlags); - /* TODO: test dwCodePage */ - /* TODO: test securityAttributes */ - ok(IsEqualGUID(&IID_NULL, &bindinfo.iid), "unexpected bindinfo.iid\n"); - ok(bindinfo.pUnk == NULL, "bindinfo.pUnk=%p\n", bindinfo.pUnk); - ok(bindinfo.dwReserved == 0, "bindinfo.dwReserved=%d\n", bindinfo.dwReserved); - - hres = IBindStatusCallback_OnStartBinding(callback, 0, &Binding); - ok(hres == S_OK, "OnStartBinding failed: %08x\n", hres); - - hres = IBindStatusCallback_OnProgress(callback, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE, - wszTextHtml); - ok(hres == S_OK, "OnProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08x\n", hres); - - hres = IBindStatusCallback_OnProgress(callback, sizeof(html_page)-1, sizeof(html_page)-1, - BINDSTATUS_BEGINDOWNLOADDATA, doc_url); - ok(hres == S_OK, "OnProgress(BINDSTATUS_BEGINDOWNLOADDATA) failed: %08x\n", hres); - - SET_EXPECT(Read); - stgmedium.tymed = TYMED_ISTREAM; - U(stgmedium).pstm = &Stream; - stgmedium.pUnkForRelease = (IUnknown*)iface; - hres = IBindStatusCallback_OnDataAvailable(callback, - BSCF_FIRSTDATANOTIFICATION|BSCF_LASTDATANOTIFICATION, - sizeof(html_page)-1, &formatetc, &stgmedium); - ok(hres == S_OK, "OnDataAvailable failed: %08x\n", hres); - CHECK_CALLED(Read); - - hres = IBindStatusCallback_OnProgress(callback, sizeof(html_page)-1, sizeof(html_page)-1, - BINDSTATUS_ENDDOWNLOADDATA, NULL); - ok(hres == S_OK, "OnProgress(BINDSTATUS_ENDDOWNLOADDATA) failed: %08x\n", hres); - - hres = IBindStatusCallback_OnStopBinding(callback, S_OK, NULL); - ok(hres == S_OK, "OnStopBinding failed: %08x\n", hres); - - IBindStatusCallback_Release(callback); - - return S_OK; -} - -static HRESULT WINAPI Moniker_Reduce(IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, - IMoniker **ppmkToLeft, IMoniker **ppmkReduced) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_ComposeWith(IMoniker *iface, IMoniker *pmkRight, - BOOL fOnlyIfNotGeneric, IMoniker **ppnkComposite) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Enum(IMoniker *iface, BOOL fForwrd, IEnumMoniker **ppenumMoniker) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_IsEqual(IMoniker *iface, IMoniker *pmkOtherMoniker) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Hash(IMoniker *iface, DWORD *pdwHash) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_IsRunning(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, - IMoniker *pmkNewlyRunning) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_GetTimeOfLastChange(IMoniker *iface, IBindCtx *pbc, - IMoniker *pmkToLeft, FILETIME *pFileTime) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_Inverse(IMoniker *iface, IMoniker **ppmk) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_CommonPrefixWith(IMoniker *iface, IMoniker *pmkOther, - IMoniker **ppmkPrefix) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_RelativePathTo(IMoniker *iface, IMoniker *pmkOther, - IMoniker **pmkRelPath) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_GetDisplayName(IMoniker *iface, IBindCtx *pbc, - IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName) -{ - CHECK_EXPECT2(GetDisplayName); - - /* ok(pbc != NULL, "pbc == NULL\n"); */ - ok(pmkToLeft == NULL, "pmkToLeft=%p\n", pmkToLeft); - ok(ppszDisplayName != NULL, "ppszDisplayName == NULL\n"); - - *ppszDisplayName = CoTaskMemAlloc(sizeof(doc_url)); - memcpy(*ppszDisplayName, doc_url, sizeof(doc_url)); - - return S_OK; -} - -static HRESULT WINAPI Moniker_ParseDisplayName(IMoniker *iface, IBindCtx *pbc, - IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Moniker_IsSystemMoniker(IMoniker *iface, DWORD *pdwMksys) -{ - CHECK_EXPECT(IsSystemMoniker); - return E_NOTIMPL; -} - -static const IMonikerVtbl MonikerVtbl = { - Moniker_QueryInterface, - Moniker_AddRef, - Moniker_Release, - Moniker_GetClassID, - Moniker_IsDirty, - Moniker_Load, - Moniker_Save, - Moniker_GetSizeMax, - Moniker_BindToObject, - Moniker_BindToStorage, - Moniker_Reduce, - Moniker_ComposeWith, - Moniker_Enum, - Moniker_IsEqual, - Moniker_Hash, - Moniker_IsRunning, - Moniker_GetTimeOfLastChange, - Moniker_Inverse, - Moniker_CommonPrefixWith, - Moniker_RelativePathTo, - Moniker_GetDisplayName, - Moniker_ParseDisplayName, - Moniker_IsSystemMoniker -}; - -static IMoniker Moniker = { &MonikerVtbl }; - -static HRESULT WINAPI OleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI OleContainer_AddRef(IOleContainer *iface) -{ - return 2; -} - -static ULONG WINAPI OleContainer_Release(IOleContainer *iface) -{ - return 1; -} - -static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc, - LPOLESTR pszDiaplayName, ULONG *pchEaten, IMoniker **ppmkOut) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags, - IEnumUnknown **ppenum) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleContainer_LockContainer(IOleContainer *iface, BOOL fLock) -{ - CHECK_EXPECT(LockContainer); - ok(expect_LockContainer_fLock == fLock, "fLock=%x, expected %x\n", fLock, expect_LockContainer_fLock); - return S_OK; -} - -static const IOleContainerVtbl OleContainerVtbl = { - OleContainer_QueryInterface, - OleContainer_AddRef, - OleContainer_Release, - OleContainer_ParseDisplayName, - OleContainer_EnumObjects, - OleContainer_LockContainer -}; - -static IOleContainer OleContainer = { &OleContainerVtbl }; - -static HRESULT WINAPI InPlaceFrame_QueryInterface(IOleInPlaceFrame *iface, REFIID riid, void **ppv) -{ - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI InPlaceFrame_AddRef(IOleInPlaceFrame *iface) -{ - return 2; -} - -static ULONG WINAPI InPlaceFrame_Release(IOleInPlaceFrame *iface) -{ - return 1; -} - -static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceFrame_ContextSensitiveHelp(IOleInPlaceFrame *iface, BOOL fEnterMode) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceFrame_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceFrame_RequestBorderSpace(IOleInPlaceFrame *iface, - LPCBORDERWIDTHS pborderwidths) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceFrame_SetBorderSpace(IOleInPlaceFrame *iface, - LPCBORDERWIDTHS pborderwidths) -{ - CHECK_EXPECT(InPlaceFrame_SetBorderSpace); - return S_OK; -} - -static HRESULT WINAPI InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame *iface, - IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName) -{ - static const WCHAR wszHTML_Document[] = - {'H','T','M','L',' ','D','o','c','u','m','e','n','t',0}; - - CHECK_EXPECT2(InPlaceUIWindow_SetActiveObject); - - if(expect_InPlaceUIWindow_SetActiveObject_active) { - ok(pActiveObject != NULL, "pActiveObject = NULL\n"); - if(pActiveObject && PRIMARYLANGID(GetSystemDefaultLangID()) == LANG_ENGLISH) - ok(!lstrcmpW(wszHTML_Document, pszObjName), "pszObjName != \"HTML Document\"\n"); - } - else { - ok(pActiveObject == NULL, "pActiveObject=%p, expected NULL\n", pActiveObject); - ok(pszObjName == NULL, "pszObjName=%p, expected NULL\n", pszObjName); - } - expect_InPlaceUIWindow_SetActiveObject_active = !expect_InPlaceUIWindow_SetActiveObject_active; - return S_OK; -} - -static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface, - IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName) -{ - static const WCHAR wszHTML_Document[] = - {'H','T','M','L',' ','D','o','c','u','m','e','n','t',0}; - - if(pActiveObject) { - CHECK_EXPECT2(SetActiveObject); - - if(pActiveObject && PRIMARYLANGID(GetSystemDefaultLangID()) == LANG_ENGLISH) - ok(!lstrcmpW(wszHTML_Document, pszObjName), "pszObjName != \"HTML Document\"\n"); - }else { - CHECK_EXPECT(SetActiveObject_null); - - ok(pActiveObject == NULL, "pActiveObject=%p, expected NULL\n", pActiveObject); - ok(pszObjName == NULL, "pszObjName=%p, expected NULL\n", pszObjName); - } - - return S_OK; -} - -static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared, - LPOLEMENUGROUPWIDTHS lpMenuWidths) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared, - HOLEMENU holemenu, HWND hwndActiveObject) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText) -{ - CHECK_EXPECT2(SetStatusText); - if(!expect_status_text) - ok(pszStatusText == NULL, "pszStatusText=%p, expected NULL\n", pszStatusText); - return S_OK; -} - -static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg, WORD wID) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = { - InPlaceFrame_QueryInterface, - InPlaceFrame_AddRef, - InPlaceFrame_Release, - InPlaceFrame_GetWindow, - InPlaceFrame_ContextSensitiveHelp, - InPlaceFrame_GetBorder, - InPlaceFrame_RequestBorderSpace, - InPlaceFrame_SetBorderSpace, - InPlaceFrame_SetActiveObject, - InPlaceFrame_InsertMenus, - InPlaceFrame_SetMenu, - InPlaceFrame_RemoveMenus, - InPlaceFrame_SetStatusText, - InPlaceFrame_EnableModeless, - InPlaceFrame_TranslateAccelerator -}; - -static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl }; - -static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl = { - InPlaceFrame_QueryInterface, - InPlaceFrame_AddRef, - InPlaceFrame_Release, - InPlaceFrame_GetWindow, - InPlaceFrame_ContextSensitiveHelp, - InPlaceFrame_GetBorder, - InPlaceFrame_RequestBorderSpace, - InPlaceFrame_SetBorderSpace, - InPlaceUIWindow_SetActiveObject, -}; - -static IOleInPlaceFrame InPlaceUIWindow = { &InPlaceUIWindowVtbl }; - -static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSiteEx *iface) -{ - return 2; -} - -static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSiteEx *iface) -{ - return 1; -} - -static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSiteEx *iface, HWND *phwnd) -{ - CHECK_EXPECT(GetWindow); - ok(phwnd != NULL, "phwnd = NULL\n"); - *phwnd = container_hwnd; - return S_OK; -} - -static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx *iface, BOOL fEnterMode) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx *iface) -{ - CHECK_EXPECT(CanInPlaceActivate); - return S_OK; -} - -static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx *iface) -{ - CHECK_EXPECT(OnInPlaceActivate); - return S_OK; -} - -static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSiteEx *iface) -{ - CHECK_EXPECT(OnUIActivate); - return S_OK; -} - -static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface, - IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect, - LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo) -{ - static const RECT rect = {0,0,500,500}; - - CHECK_EXPECT(GetWindowContext); - - ok(ppFrame != NULL, "ppFrame = NULL\n"); - if(ppFrame) - *ppFrame = &InPlaceFrame; - ok(ppDoc != NULL, "ppDoc = NULL\n"); - if(ppDoc) - *ppDoc = (IOleInPlaceUIWindow*)&InPlaceUIWindow; - ok(lprcPosRect != NULL, "lprcPosRect = NULL\n"); - if(lprcPosRect) - memcpy(lprcPosRect, &rect, sizeof(RECT)); - ok(lprcClipRect != NULL, "lprcClipRect = NULL\n"); - if(lprcClipRect) - memcpy(lprcClipRect, &rect, sizeof(RECT)); - ok(lpFrameInfo != NULL, "lpFrameInfo = NULL\n"); - if(lpFrameInfo) { - lpFrameInfo->cb = sizeof(*lpFrameInfo); - lpFrameInfo->fMDIApp = FALSE; - lpFrameInfo->hwndFrame = container_hwnd; - lpFrameInfo->haccel = NULL; - lpFrameInfo->cAccelEntries = 0; - } - - return S_OK; -} - -static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtant) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx *iface, BOOL fUndoable) -{ - CHECK_EXPECT(OnUIDeactivate); - ok(!fUndoable, "fUndoable = TRUE\n"); - return S_OK; -} - -static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx *iface) -{ - CHECK_EXPECT(OnInPlaceDeactivate); - return S_OK; -} - -static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx *iface, LPCRECT lprcPosRect) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI InPlaceSiteEx_OnInPlaceActivateEx(IOleInPlaceSiteEx *iface, BOOL *pfNoRedraw, DWORD dwFlags) -{ - CHECK_EXPECT(OnInPlaceActivateEx); - - ok(pfNoRedraw != NULL, "pfNoRedraw == NULL\n"); - ok(!*pfNoRedraw, "*pfNoRedraw == TRUE\n"); - ok(dwFlags == 0, "dwFlags = %08x\n", dwFlags); - - return S_OK; -} - -static HRESULT WINAPI InPlaceSiteEx_OnInPlaceDeactivateEx(IOleInPlaceSiteEx *iface, BOOL fNoRedraw) -{ - CHECK_EXPECT(OnInPlaceDeactivateEx); - - ok(fNoRedraw, "fNoRedraw == FALSE\n"); - - return S_OK; -} - -static HRESULT WINAPI InPlaceSiteEx_RequestUIActivate(IOleInPlaceSiteEx *iface) -{ - CHECK_EXPECT(RequestUIActivate); - return S_OK; -} - -static const IOleInPlaceSiteExVtbl InPlaceSiteVtbl = { - InPlaceSite_QueryInterface, - InPlaceSite_AddRef, - InPlaceSite_Release, - InPlaceSite_GetWindow, - InPlaceSite_ContextSensitiveHelp, - InPlaceSite_CanInPlaceActivate, - InPlaceSite_OnInPlaceActivate, - InPlaceSite_OnUIActivate, - InPlaceSite_GetWindowContext, - InPlaceSite_Scroll, - InPlaceSite_OnUIDeactivate, - InPlaceSite_OnInPlaceDeactivate, - InPlaceSite_DiscardUndoState, - InPlaceSite_DeactivateAndUndo, - InPlaceSite_OnPosRectChange, - InPlaceSiteEx_OnInPlaceActivateEx, - InPlaceSiteEx_OnInPlaceDeactivateEx, - InPlaceSiteEx_RequestUIActivate -}; - -static IOleInPlaceSiteEx InPlaceSiteEx = { &InPlaceSiteVtbl }; - -static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI ClientSite_AddRef(IOleClientSite *iface) -{ - return 2; -} - -static ULONG WINAPI ClientSite_Release(IOleClientSite *iface) -{ - return 1; -} - -static HRESULT WINAPI ClientSite_SaveObject(IOleClientSite *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAssign, DWORD dwWhichMoniker, - IMoniker **ppmon) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer) -{ - CHECK_EXPECT(GetContainer); - ok(ppContainer != NULL, "ppContainer = NULL\n"); - *ppContainer = &OleContainer; - return S_OK; -} - -static HRESULT WINAPI ClientSite_ShowObject(IOleClientSite *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ClientSite_OnShowWindow(IOleClientSite *iface, BOOL fShow) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ClientSite_RequestNewObjectLayout(IOleClientSite *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IOleClientSiteVtbl ClientSiteVtbl = { - ClientSite_QueryInterface, - ClientSite_AddRef, - ClientSite_Release, - ClientSite_SaveObject, - ClientSite_GetMoniker, - ClientSite_GetContainer, - ClientSite_ShowObject, - ClientSite_OnShowWindow, - ClientSite_RequestNewObjectLayout -}; - -static IOleClientSite ClientSite = { &ClientSiteVtbl }; - -static HRESULT WINAPI DocumentSite_QueryInterface(IOleDocumentSite *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI DocumentSite_AddRef(IOleDocumentSite *iface) -{ - return 2; -} - -static ULONG WINAPI DocumentSite_Release(IOleDocumentSite *iface) -{ - return 1; -} - -typedef enum -{ - CallUIActivate_None, - CallUIActivate_ActivateMe, - CallUIActivate_AfterShow, -} CallUIActivate; - -static BOOL call_UIActivate = CallUIActivate_ActivateMe; -static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocumentView *pViewToActivate) -{ - IOleDocument *document; - HRESULT hres; - - CHECK_EXPECT(ActivateMe); - ok(pViewToActivate != NULL, "pViewToActivate = NULL\n"); - - hres = IOleDocumentView_QueryInterface(pViewToActivate, &IID_IOleDocument, (void**)&document); - ok(hres == S_OK, "could not get IOleDocument: %08x\n", hres); - - if(SUCCEEDED(hres)) { - hres = IOleDocument_CreateView(document, (IOleInPlaceSite*)&InPlaceSiteEx, NULL, 0, &view); - ok(hres == S_OK, "CreateView failed: %08x\n", hres); - - if(SUCCEEDED(hres)) { - IOleInPlaceActiveObject *activeobj = NULL; - IOleInPlaceSite *inplacesite = NULL; - HWND tmp_hwnd = NULL; - static RECT rect = {0,0,400,500}; - - hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); - ok(hres == S_OK, "GetInPlaceSite failed: %08x\n", hres); - ok(inplacesite == (IOleInPlaceSite*)&InPlaceSiteEx, "inplacesite=%p, expected %p\n", - inplacesite, &InPlaceSiteEx); - - hres = IOleDocumentView_SetInPlaceSite(view, (IOleInPlaceSite*)&InPlaceSiteEx); - ok(hres == S_OK, "SetInPlaceSite failed: %08x\n", hres); - - hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); - ok(hres == S_OK, "GetInPlaceSite failed: %08x\n", hres); - ok(inplacesite == (IOleInPlaceSite*)&InPlaceSiteEx, "inplacesite=%p, expected %p\n", - inplacesite, &InPlaceSiteEx); - - hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobj); - ok(hres == S_OK, "Could not get IOleInPlaceActiveObject: %08x\n", hres); - - if(activeobj) { - IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd); - ok(hres == S_OK, "GetWindow failed: %08x\n", hres); - ok(hwnd == NULL, "hwnd=%p, expeted NULL\n", hwnd); - } - - if(call_UIActivate == CallUIActivate_ActivateMe) { - SET_EXPECT(CanInPlaceActivate); - SET_EXPECT(GetWindowContext); - SET_EXPECT(GetWindow); - if(ipsex) - SET_EXPECT(OnInPlaceActivateEx); - else - SET_EXPECT(OnInPlaceActivate); - SET_EXPECT(SetStatusText); - SET_EXPECT(Exec_SETPROGRESSMAX); - SET_EXPECT(Exec_SETPROGRESSPOS); - SET_EXPECT(OnUIActivate); - SET_EXPECT(SetActiveObject); - SET_EXPECT(ShowUI); - expect_status_text = NULL; - - hres = IOleDocumentView_UIActivate(view, TRUE); - - if(FAILED(hres)) { - skip("UIActivate failed: %08x\n", hres); - return hres; - } - ok(hres == S_OK, "UIActivate failed: %08x\n", hres); - - CHECK_CALLED(CanInPlaceActivate); - CHECK_CALLED(GetWindowContext); - CHECK_CALLED(GetWindow); - if(ipsex) - CHECK_CALLED(OnInPlaceActivateEx); - else - CHECK_CALLED(OnInPlaceActivate); - CHECK_CALLED(SetStatusText); - CHECK_CALLED(Exec_SETPROGRESSMAX); - CHECK_CALLED(Exec_SETPROGRESSPOS); - CHECK_CALLED(OnUIActivate); - CHECK_CALLED(SetActiveObject); - CHECK_CALLED(ShowUI); - - if(activeobj) { - hres = IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd); - ok(hres == S_OK, "GetWindow failed: %08x\n", hres); - ok(hwnd != NULL, "hwnd == NULL\n"); - if(last_hwnd) - ok(hwnd == last_hwnd, "hwnd != last_hwnd\n"); - } - - hres = IOleDocumentView_UIActivate(view, TRUE); - ok(hres == S_OK, "UIActivate failed: %08x\n", hres); - - if(activeobj) { - hres = IOleInPlaceActiveObject_GetWindow(activeobj, &tmp_hwnd); - ok(hres == S_OK, "GetWindow failed: %08x\n", hres); - ok(tmp_hwnd == hwnd, "tmp_hwnd=%p, expected %p\n", tmp_hwnd, hwnd); - } - } - - hres = IOleDocumentView_SetRect(view, &rect); - ok(hres == S_OK, "SetRect failed: %08x\n", hres); - - if(call_UIActivate == CallUIActivate_ActivateMe) { - hres = IOleDocumentView_Show(view, TRUE); - ok(hres == S_OK, "Show failed: %08x\n", hres); - }else { - SET_EXPECT(CanInPlaceActivate); - SET_EXPECT(GetWindowContext); - SET_EXPECT(GetWindow); - if(ipsex) - SET_EXPECT(OnInPlaceActivateEx); - else - SET_EXPECT(OnInPlaceActivate); - SET_EXPECT(SetStatusText); - SET_EXPECT(Exec_SETPROGRESSMAX); - SET_EXPECT(Exec_SETPROGRESSPOS); - SET_EXPECT(OnUIActivate); - expect_status_text = (load_state == LD_COMPLETE ? (LPCOLESTR)0xdeadbeef : NULL); - - hres = IOleDocumentView_Show(view, TRUE); - ok(hres == S_OK, "Show failed: %08x\n", hres); - - CHECK_CALLED(CanInPlaceActivate); - CHECK_CALLED(GetWindowContext); - CHECK_CALLED(GetWindow); - if(ipsex) - CHECK_CALLED(OnInPlaceActivateEx); - else - CHECK_CALLED(OnInPlaceActivate); - CHECK_CALLED(SetStatusText); - CHECK_CALLED(Exec_SETPROGRESSMAX); - CHECK_CALLED(Exec_SETPROGRESSPOS); - - if(activeobj) { - hres = IOleInPlaceActiveObject_GetWindow(activeobj, &hwnd); - ok(hres == S_OK, "GetWindow failed: %08x\n", hres); - ok(hwnd != NULL, "hwnd == NULL\n"); - if(last_hwnd) - ok(hwnd == last_hwnd, "hwnd != last_hwnd\n"); - } - } - - test_timer(EXPECT_UPDATEUI | ((load_state == LD_LOADING) ? EXPECT_SETTITLE : 0)); - - if(activeobj) - IOleInPlaceActiveObject_Release(activeobj); - } - - IOleDocument_Release(document); - } - - return S_OK; -} - -static const IOleDocumentSiteVtbl DocumentSiteVtbl = { - DocumentSite_QueryInterface, - DocumentSite_AddRef, - DocumentSite_Release, - DocumentSite_ActivateMe -}; - -static IOleDocumentSite DocumentSite = { &DocumentSiteVtbl }; - -static HRESULT WINAPI OleControlSite_QueryInterface(IOleControlSite *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI OleControlSite_AddRef(IOleControlSite *iface) -{ - return 2; -} - -static ULONG WINAPI OleControlSite_Release(IOleControlSite *iface) -{ - return 1; -} - -static HRESULT WINAPI OleControlSite_OnControlInfoChanged(IOleControlSite *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleControlSite_LockInPlaceActive(IOleControlSite *iface, BOOL fLock) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleControlSite_GetExtendedControl(IOleControlSite *iface, IDispatch **ppDisp) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleControlSite_TransformCoords(IOleControlSite *iface, POINTL *pPtHimetric, - POINTF *pPtfContainer, DWORD dwFlags) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleControlSite_TranslateAccelerator(IOleControlSite *iface, - MSG *pMsg, DWORD grfModifiers) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleControlSite_OnFocus(IOleControlSite *iface, BOOL fGotFocus) -{ - if(fGotFocus) - CHECK_EXPECT(OnFocus_TRUE); - else - CHECK_EXPECT2(OnFocus_FALSE); - return S_OK; -} - -static HRESULT WINAPI OleControlSite_ShowPropertyFrame(IOleControlSite *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IOleControlSiteVtbl OleControlSiteVtbl = { - OleControlSite_QueryInterface, - OleControlSite_AddRef, - OleControlSite_Release, - OleControlSite_OnControlInfoChanged, - OleControlSite_LockInPlaceActive, - OleControlSite_GetExtendedControl, - OleControlSite_TransformCoords, - OleControlSite_TranslateAccelerator, - OleControlSite_OnFocus, - OleControlSite_ShowPropertyFrame -}; - -static IOleControlSite OleControlSite = { &OleControlSiteVtbl }; - -static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface) -{ - return 2; -} - -static ULONG WINAPI DocHostUIHandler_Release(IDocHostUIHandler2 *iface) -{ - return 1; -} - -static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt, - IUnknown *pcmdtReserved, IDispatch *pdicpReserved) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo) -{ - CHECK_EXPECT(GetHostInfo); - ok(pInfo != NULL, "pInfo=NULL\n"); - if(pInfo) { - ok(pInfo->cbSize == sizeof(DOCHOSTUIINFO), "pInfo->cbSize=%u\n", pInfo->cbSize); - ok(!pInfo->dwFlags, "pInfo->dwFlags=%08x, expected 0\n", pInfo->dwFlags); - pInfo->dwFlags = DOCHOSTUIFLAG_DISABLE_HELP_MENU | DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE - | DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY | DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION - | DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION; - ok(!pInfo->dwDoubleClick, "pInfo->dwDoubleClick=%08x, expected 0\n", pInfo->dwDoubleClick); - ok(!pInfo->pchHostCss, "pInfo->pchHostCss=%p, expected NULL\n", pInfo->pchHostCss); - ok(!pInfo->pchHostNS, "pInfo->pchhostNS=%p, expected NULL\n", pInfo->pchHostNS); - } - return S_OK; -} - -static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID, - IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, - IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc) -{ - CHECK_EXPECT(ShowUI); - - if (editmode) - ok(dwID == DOCHOSTUITYPE_AUTHOR, "dwID=%d, expected DOCHOSTUITYPE_AUTHOR\n", dwID); - else - ok(dwID == DOCHOSTUITYPE_BROWSE, "dwID=%d, expected DOCHOSTUITYPE_BROWSE\n", dwID); - ok(pActiveObject != NULL, "pActiveObject = NULL\n"); - ok(pCommandTarget != NULL, "pCommandTarget = NULL\n"); - ok(pFrame == &InPlaceFrame, "pFrame=%p, expected %p\n", pFrame, &InPlaceFrame); - if (expect_InPlaceUIWindow_SetActiveObject_active) - ok(pDoc == (IOleInPlaceUIWindow *)&InPlaceUIWindow, "pDoc=%p, expected %p\n", pDoc, &InPlaceUIWindow); - else - ok(pDoc == NULL, "pDoc=%p, expected NULL\n", pDoc); - - return S_OK; -} - -static HRESULT WINAPI DocHostUIHandler_HideUI(IDocHostUIHandler2 *iface) -{ - CHECK_EXPECT(HideUI); - return S_OK; -} - -static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface) -{ - CHECK_EXPECT(UpdateUI); - return S_OK; -} - -static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static BOOL expect_OnFrameWindowActivate_fActivate; -static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate) -{ - CHECK_EXPECT2(OnFrameWindowActivate); - ok(fActivate == expect_OnFrameWindowActivate_fActivate, "fActivate=%x\n", fActivate); - return S_OK; -} - -static HRESULT WINAPI DocHostUIHandler_ResizeBorder(IDocHostUIHandler2 *iface, LPCRECT prcBorder, - IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *iface, LPMSG lpMsg, - const GUID *pguidCmdGroup, DWORD nCmdID) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface, - LPOLESTR *pchKey, DWORD dw) -{ - CHECK_EXPECT(GetOptionKeyPath); - ok(pchKey != NULL, "pchKey = NULL\n"); - ok(!dw, "dw=%d, expected 0\n", dw); - if(pchKey) - ok(!*pchKey, "*pchKey=%p, expected NULL\n", *pchKey); - return S_OK; -} - -static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface, - IDropTarget *pDropTarget, IDropTarget **ppDropTarget) -{ - CHECK_EXPECT(GetDropTarget); - /* TODO */ - return E_NOTIMPL; -} - -static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch) -{ - CHECK_EXPECT(GetExternal); - *ppDispatch = &External; - return S_FALSE; -} - -static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate, - OLECHAR *pchURLIn, OLECHAR **ppchURLOut) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO, - IDataObject **ppPORet) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface, - LPOLESTR *pchKey, DWORD dw) -{ - CHECK_EXPECT(GetOverrideKeyPath); - ok(pchKey != NULL, "pchKey = NULL\n"); - if(pchKey) - ok(!*pchKey, "*pchKey=%p, expected NULL\n", *pchKey); - ok(!dw, "dw=%d, xepected 0\n", dw); - return S_OK; -} - -static const IDocHostUIHandler2Vtbl DocHostUIHandlerVtbl = { - DocHostUIHandler_QueryInterface, - DocHostUIHandler_AddRef, - DocHostUIHandler_Release, - DocHostUIHandler_ShowContextMenu, - DocHostUIHandler_GetHostInfo, - DocHostUIHandler_ShowUI, - DocHostUIHandler_HideUI, - DocHostUIHandler_UpdateUI, - DocHostUIHandler_EnableModeless, - DocHostUIHandler_OnDocWindowActivate, - DocHostUIHandler_OnFrameWindowActivate, - DocHostUIHandler_ResizeBorder, - DocHostUIHandler_TranslateAccelerator, - DocHostUIHandler_GetOptionKeyPath, - DocHostUIHandler_GetDropTarget, - DocHostUIHandler_GetExternal, - DocHostUIHandler_TranslateUrl, - DocHostUIHandler_FilterDataObject, - DocHostUIHandler_GetOverrideKeyPath -}; - -static IDocHostUIHandler2 DocHostUIHandler = { &DocHostUIHandlerVtbl }; - -static HRESULT WINAPI OleCommandTarget_QueryInterface(IOleCommandTarget *iface, - REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI OleCommandTarget_AddRef(IOleCommandTarget *iface) -{ - return 2; -} - -static ULONG WINAPI OleCommandTarget_Release(IOleCommandTarget *iface) -{ - return 1; -} - -static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup, - ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) -{ - ok(!pguidCmdGroup, "pguidCmdGroup != MULL\n"); - ok(cCmds == 1, "cCmds=%d, expected 1\n", cCmds); - ok(!pCmdText, "pCmdText != NULL\n"); - - switch(prgCmds[0].cmdID) { - case OLECMDID_SETPROGRESSTEXT: - CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT); - prgCmds[0].cmdf = OLECMDF_ENABLED; - return S_OK; - case OLECMDID_OPEN: - CHECK_EXPECT(QueryStatus_OPEN); - prgCmds[0].cmdf = 0; - return S_OK; - case OLECMDID_NEW: - CHECK_EXPECT(QueryStatus_NEW); - prgCmds[0].cmdf = 0; - return S_OK; - default: - ok(0, "unexpected command %d\n", prgCmds[0].cmdID); - }; - - return E_FAIL; -} - -static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup, - DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) -{ - if(!pguidCmdGroup || !IsEqualGUID(pguidCmdGroup, &CGID_Explorer)) - test_readyState(NULL); - - if(!pguidCmdGroup) { - switch(nCmdID) { - case OLECMDID_SETPROGRESSMAX: - CHECK_EXPECT2(Exec_SETPROGRESSMAX); - ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt); - ok(pvaIn != NULL, "pvaIn == NULL\n"); - if(pvaIn) { - ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn)); - if(load_state == LD_NO) - ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%d, expected 0\n", V_I4(pvaIn)); - } - ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut); - return S_OK; - case OLECMDID_SETPROGRESSPOS: - CHECK_EXPECT2(Exec_SETPROGRESSPOS); - ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt); - ok(pvaIn != NULL, "pvaIn == NULL\n"); - if(pvaIn) { - ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn)); - if(load_state == LD_NO) - ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%d, expected 0\n", V_I4(pvaIn)); - } - ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut); - return S_OK; - case OLECMDID_HTTPEQUIV_DONE: - CHECK_EXPECT(Exec_HTTPEQUIV_DONE); - ok(nCmdexecopt == 0, "nCmdexecopts=%08x\n", nCmdexecopt); - ok(pvaOut == NULL, "pvaOut=%p\n", pvaOut); - ok(pvaIn == NULL, "pvaIn=%p\n", pvaIn); - load_state = LD_COMPLETE; - return S_OK; - case OLECMDID_SETDOWNLOADSTATE: - ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt); - ok(pvaOut == NULL, "pvaOut=%p\n", pvaOut); - ok(pvaIn != NULL, "pvaIn == NULL\n"); - ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d\n", V_VT(pvaIn)); - - switch(V_I4(pvaIn)) { - case 0: - CHECK_EXPECT(Exec_SETDOWNLOADSTATE_0); - load_state = LD_INTERACTIVE; - break; - case 1: - CHECK_EXPECT(Exec_SETDOWNLOADSTATE_1); - break; - default: - ok(0, "unexpevted V_I4(pvaIn)=%d\n", V_I4(pvaIn)); - } - - return S_OK; - case OLECMDID_UPDATECOMMANDS: - CHECK_EXPECT(Exec_UPDATECOMMANDS); - ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt); - ok(pvaIn == NULL, "pvaIn=%p\n", pvaIn); - ok(pvaOut == NULL, "pvaOut=%p\n", pvaOut); - return S_OK; - case OLECMDID_SETTITLE: - CHECK_EXPECT2(Exec_SETTITLE); - ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt); - ok(pvaIn != NULL, "pvaIn == NULL\n"); - ok(pvaOut == NULL, "pvaOut=%p\n", pvaOut); - ok(V_VT(pvaIn) == VT_BSTR, "V_VT(pvaIn)=%d\n", V_VT(pvaIn)); - ok(V_BSTR(pvaIn) != NULL, "V_BSTR(pvaIn) == NULL\n"); /* TODO */ - return S_OK; - case OLECMDID_HTTPEQUIV: - CHECK_EXPECT2(Exec_HTTPEQUIV); - ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt); - /* TODO */ - return S_OK; - default: - ok(0, "unexpected command %d\n", nCmdID); - return E_FAIL; - }; - } - - if(IsEqualGUID(&CGID_ShellDocView, pguidCmdGroup)) { - ok(nCmdexecopt == 0, "nCmdexecopts=%08x\n", nCmdexecopt); - - switch(nCmdID) { - case 37: - CHECK_EXPECT2(Exec_ShellDocView_37); - - if(load_from_stream) - test_GetCurMoniker(doc_unk, NULL, about_blank_url); - else if(!editmode) - test_GetCurMoniker(doc_unk, &Moniker, NULL); - - ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut); - ok(pvaIn != NULL, "pvaIn == NULL\n"); - if(pvaIn) { - ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d, expected VT_I4\n", V_VT(pvaIn)); - ok(V_I4(pvaIn) == 0, "V_I4(pvaIn)=%d, expected 0\n", V_I4(pvaIn)); - } - return S_OK; - case 84: - CHECK_EXPECT2(Exec_ShellDocView_84); - - ok(pvaIn == NULL, "pvaIn != NULL\n"); - ok(pvaOut != NULL, "pvaOut == NULL\n"); - if(pvaIn) - ok(V_VT(pvaOut) == VT_EMPTY, "V_VT(pvaOut)=%d\n", V_VT(pvaOut)); - - return E_NOTIMPL; - - case 103: - CHECK_EXPECT2(Exec_ShellDocView_103); - - ok(pvaIn == NULL, "pvaIn != NULL\n"); - ok(pvaOut == NULL, "pvaOut != NULL\n"); - - return E_NOTIMPL; - - default: - ok(0, "unexpected command %d\n", nCmdID); - return E_FAIL; - }; - } - - if(IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) { - ok(nCmdexecopt == 0, "nCmdexecopts=%08x\n", nCmdexecopt); - - switch(nCmdID) { - case IDM_PARSECOMPLETE: - CHECK_EXPECT(Exec_MSHTML_PARSECOMPLETE); - ok(pvaIn == NULL, "pvaIn != NULL\n"); - ok(pvaOut == NULL, "pvaOut != NULL\n"); - return S_OK; - default: - ok(0, "unexpected command %d\n", nCmdID); - }; - } - - if(IsEqualGUID(&CGID_DocHostCmdPriv, pguidCmdGroup)) - return E_FAIL; /* TODO */ - - if(IsEqualGUID(&CGID_Explorer, pguidCmdGroup)) { - ok(nCmdexecopt == 0, "nCmdexecopts=%08x\n", nCmdexecopt); - - switch(nCmdID) { - case 69: - CHECK_EXPECT2(Exec_Explorer_69); - ok(pvaIn == NULL, "pvaIn != NULL\n"); - ok(pvaOut != NULL, "pvaOut == NULL\n"); - return E_NOTIMPL; - default: - ok(0, "unexpected cmd %d of CGID_Explorer\n", nCmdID); - } - return E_NOTIMPL; - } - - if(IsEqualGUID(&CGID_DocHostCommandHandler, pguidCmdGroup)) { - switch (nCmdID) { - case OLECMDID_PAGEACTIONBLOCKED: /* win2k3 */ - SET_EXPECT(SetStatusText); - ok(pvaIn == NULL, "pvaIn != NULL\n"); - ok(pvaOut == NULL, "pvaOut != NULL\n"); - return S_OK; - default: - ok(0, "unexpected command %d\n", nCmdID); - return E_FAIL; - } - } - - ok(0, "unexpected pguidCmdGroup: %s\n", debugstr_guid(pguidCmdGroup)); - return E_NOTIMPL; -} - -static IOleCommandTargetVtbl OleCommandTargetVtbl = { - OleCommandTarget_QueryInterface, - OleCommandTarget_AddRef, - OleCommandTarget_Release, - OleCommandTarget_QueryStatus, - OleCommandTarget_Exec -}; - -static IOleCommandTarget OleCommandTarget = { &OleCommandTargetVtbl }; - -static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid, - LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, - EXCEPINFO *pExcepInfo, UINT *puArgErr) -{ - ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n"); - ok(pDispParams != NULL, "pDispParams == NULL\n"); - ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo); - ok(puArgErr != NULL, "puArgErr == NULL\n"); - ok(V_VT(pVarResult) == 0, "V_VT(pVarResult)=%d, expected 0\n", V_VT(pVarResult)); - ok(wFlags == DISPATCH_PROPERTYGET, "wFlags=%08x, expected DISPATCH_PROPERTYGET\n", wFlags); - test_readyState(NULL); - - switch(dispIdMember) { - case DISPID_AMBIENT_USERMODE: - CHECK_EXPECT2(Invoke_AMBIENT_USERMODE); - V_VT(pVarResult) = VT_BOOL; - V_BOOL(pVarResult) = VARIANT_TRUE; - return S_OK; - case DISPID_AMBIENT_DLCONTROL: - CHECK_EXPECT2(Invoke_AMBIENT_DLCONTROL); - return E_FAIL; - case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED: - CHECK_EXPECT2(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); - return E_FAIL; - case DISPID_AMBIENT_SILENT: - CHECK_EXPECT2(Invoke_AMBIENT_SILENT); - V_VT(pVarResult) = VT_BOOL; - V_BOOL(pVarResult) = VARIANT_FALSE; - return S_OK; - case DISPID_AMBIENT_USERAGENT: - CHECK_EXPECT(Invoke_AMBIENT_USERAGENT); - return E_FAIL; - case DISPID_AMBIENT_PALETTE: - CHECK_EXPECT(Invoke_AMBIENT_PALETTE); - return E_FAIL; - }; - - ok(0, "unexpected dispid %d\n", dispIdMember); - return E_FAIL; -} - -static IDispatchVtbl DispatchVtbl = { - Dispatch_QueryInterface, - Dispatch_AddRef, - Dispatch_Release, - Dispatch_GetTypeInfoCount, - Dispatch_GetTypeInfo, - Dispatch_GetIDsOfNames, - Dispatch_Invoke -}; - -static IDispatch Dispatch = { &DispatchVtbl }; - -static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, - REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface) -{ - return 2; -} - -static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface) -{ - return 1; -} - -static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, - REFIID riid, void **ppv) -{ - /* - * Services used by HTMLDocument: - * - * IOleUndoManager - * IInternetSecurityManager - * ITargetFrame - * {D5F78C80-5252-11CF-90FA-00AA0042106E} - * HTMLFrameBase - * IShellObject - * {3050F312-98B5-11CF-BB82-00AA00BDCE0B} - * {53A2D5B1-D2FC-11D0-84E0-006097C9987D} - * {AD7F6C62-F6BD-11D2-959B-006097C553C8} - * DefView (?) - * {6D12FE80-7911-11CF-9534-0000C05BAE0B} - * IElementBehaviorFactory - * {3050F429-98B5-11CF-BB82-00AA00BDCE0B} - * STopLevelBrowser - * IHTMLWindow2 - * IInternetProtocol - * IWebBrowserApp - * UrlHostory - * IHTMLEditHost - * IHlinkFrame - */ - - if(IsEqualGUID(&IID_IHlinkFrame, guidService)) { - ok(IsEqualGUID(&IID_IHlinkFrame, riid), "unexpected riid\n"); - *ppv = &HlinkFrame; - return S_OK; - } - - return E_NOINTERFACE; -} - -static const IServiceProviderVtbl ServiceProviderVtbl = { - ServiceProvider_QueryInterface, - ServiceProvider_AddRef, - ServiceProvider_Release, - ServiceProvider_QueryService -}; - -static IServiceProvider ServiceProvider = { &ServiceProviderVtbl }; - -DEFINE_GUID(IID_unk1, 0xD48A6EC6,0x6A4A,0x11CF,0x94,0xA7,0x44,0x45,0x53,0x54,0x00,0x00); /* HTMLWindow2 ? */ -DEFINE_GUID(IID_unk2, 0x7BB0B520,0xB1A7,0x11D2,0xBB,0x23,0x00,0xC0,0x4F,0x79,0xAB,0xCD); -DEFINE_GUID(IID_unk3, 0x000670BA,0x0000,0x0000,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46); - -static HRESULT QueryInterface(REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IOleClientSite, riid)) - *ppv = &ClientSite; - else if(IsEqualGUID(&IID_IOleDocumentSite, riid)) - *ppv = &DocumentSite; - else if(IsEqualGUID(&IID_IDocHostUIHandler, riid) || IsEqualGUID(&IID_IDocHostUIHandler2, riid)) - *ppv = &DocHostUIHandler; - else if(IsEqualGUID(&IID_IOleContainer, riid)) - *ppv = &OleContainer; - else if(IsEqualGUID(&IID_IOleWindow, riid) || IsEqualGUID(&IID_IOleInPlaceSite, riid)) - *ppv = &InPlaceSiteEx; - else if(IsEqualGUID(&IID_IOleCommandTarget , riid)) - *ppv = &OleCommandTarget; - else if(IsEqualGUID(&IID_IDispatch, riid)) - *ppv = &Dispatch; - else if(IsEqualGUID(&IID_IServiceProvider, riid)) - *ppv = &ServiceProvider; - else if(IsEqualGUID(&IID_IOleInPlaceSiteEx, riid)) - *ppv = ipsex ? &InPlaceSiteEx : NULL; - else if(IsEqualGUID(&IID_IOleControlSite, riid)) - *ppv = &OleControlSite; - else if(IsEqualGUID(&IID_IDocHostShowUI, riid)) - return E_NOINTERFACE; /* TODO */ - else if(IsEqualGUID(&IID_IProxyManager, riid)) - return E_NOINTERFACE; /* ? */ - else if(IsEqualGUID(&IID_unk1, riid)) - return E_NOINTERFACE; /* HTMLWindow2 ? */ - else if(IsEqualGUID(&IID_unk2, riid)) - return E_NOINTERFACE; /* ? */ - else if(IsEqualGUID(&IID_unk3, riid)) - return E_NOINTERFACE; /* ? */ - else - ok(0, "unexpected riid %s\n", debugstr_guid(riid)); - - if(*ppv) - return S_OK; - return E_NOINTERFACE; -} - -static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - return DefWindowProc(hwnd, msg, wParam, lParam); -} - -static void _test_readyState(unsigned line, IUnknown *unk) -{ - IHTMLDocument2 *htmldoc; - DISPPARAMS dispparams; - BSTR state; - VARIANT out; - HRESULT hres; - - static const WCHAR wszUninitialized[] = {'u','n','i','n','i','t','i','a','l','i','z','e','d',0}; - static const WCHAR wszLoading[] = {'l','o','a','d','i','n','g',0}; - static const WCHAR wszInteractive[] = {'i','n','t','e','r','a','c','t','i','v','e',0}; - static const WCHAR wszComplete[] = {'c','o','m','p','l','e','t','e',0}; - - static const LPCWSTR expected_state[] = { - wszUninitialized, - wszLoading, - NULL, - wszInteractive, - wszComplete, - wszUninitialized - }; - - if(!unk) - unk = doc_unk; - - hres = IUnknown_QueryInterface(unk, &IID_IHTMLDocument2, (void**)&htmldoc); - ok(hres == S_OK, "QueryInterface(IID_IHTMLDocument2) failed: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = IHTMLDocument2_get_readyState(htmldoc, NULL); - ok(hres == E_POINTER, "get_readyState failed: %08x, expected\n", hres); - - hres = IHTMLDocument2_get_readyState(htmldoc, &state); - ok(hres == S_OK, "get_ReadyState failed: %08x\n", hres); - ok_(__FILE__, line) - (!lstrcmpW(state, expected_state[load_state]), "unexpected state \"%s\", expected %d\n", - debugstr_w(state), load_state); - SysFreeString(state); - - dispparams.cArgs = 0; - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - - VariantInit(&out); - - hres = IHTMLDocument2_Invoke(htmldoc, DISPID_READYSTATE, &IID_NULL, 0, DISPATCH_PROPERTYGET, - &dispparams, &out, NULL, NULL); - ok(hres == S_OK, "Invoke(DISPID_READYSTATE) failed: %08x\n", hres); - - ok_(__FILE__,line) (V_VT(&out) == VT_I4, "V_VT(out)=%d\n", V_VT(&out)); - ok_(__FILE__,line) (V_I4(&out) == load_state%5, "VT_I4(out)=%d, expected %d\n", V_I4(&out), load_state%5); - - IHTMLDocument2_Release(htmldoc); -} - -static void test_ConnectionPoint(IConnectionPointContainer *container, REFIID riid) -{ - IConnectionPointContainer *tmp_container = NULL; - IConnectionPoint *cp; - IID iid; - HRESULT hres; - - hres = IConnectionPointContainer_FindConnectionPoint(container, riid, &cp); - ok(hres == S_OK, "FindConnectionPoint failed: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = IConnectionPoint_GetConnectionInterface(cp, &iid); - ok(hres == S_OK, "GetConnectionInterface failed: %08x\n", hres); - ok(IsEqualGUID(riid, &iid), "wrong iid\n"); - - hres = IConnectionPoint_GetConnectionInterface(cp, NULL); - ok(hres == E_POINTER, "GetConnectionInterface failed: %08x, expected E_POINTER\n", hres); - - hres = IConnectionPoint_GetConnectionPointContainer(cp, &tmp_container); - ok(hres == S_OK, "GetConnectionPointContainer failed: %08x\n", hres); - ok(tmp_container == container, "container != tmp_container\n"); - if(SUCCEEDED(hres)) - IConnectionPointContainer_Release(tmp_container); - - hres = IConnectionPoint_GetConnectionPointContainer(cp, NULL); - ok(hres == E_POINTER, "GetConnectionPointContainer failed: %08x, expected E_POINTER\n", hres); - - if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) { - DWORD cookie; - - hres = IConnectionPoint_Advise(cp, (IUnknown*)&PropertyNotifySink, &cookie); - ok(hres == S_OK, "Advise failed: %08x\n", hres); - } - - IConnectionPoint_Release(cp); -} - -static void test_ConnectionPointContainer(IUnknown *unk) -{ - IConnectionPointContainer *container; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container); - ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres); - if(FAILED(hres)) - return; - - test_ConnectionPoint(container, &IID_IPropertyNotifySink); - test_ConnectionPoint(container, &DIID_HTMLDocumentEvents); - test_ConnectionPoint(container, &DIID_HTMLDocumentEvents2); - - IConnectionPointContainer_Release(container); -} - -static void test_GetCurMoniker(IUnknown *unk, IMoniker *exmon, LPCWSTR exurl) -{ - IHTMLDocument2 *doc; - IPersistMoniker *permon; - IMoniker *mon = (void*)0xdeadbeef; - BSTR doc_url = (void*)0xdeadbeef; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IPersistMoniker, (void**)&permon); - ok(hres == S_OK, "QueryInterface(IID_IPersistMoniker) failed: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = IUnknown_QueryInterface(unk, &IID_IHTMLDocument2, (void**)&doc); - ok(hres == S_OK, "QueryInterface(IID_IHTMLDocument2) failed: %08x\n", hres); - - hres = IHTMLDocument2_get_URL(doc, &doc_url); - ok(hres == S_OK, "get_URL failed: %08x\n", hres); - - hres = IPersistMoniker_GetCurMoniker(permon, &mon); - IPersistMoniker_Release(permon); - - if(exmon) { - LPOLESTR url; - BOOL exb = expect_GetDisplayName; - BOOL clb = called_GetDisplayName; - - ok(hres == S_OK, "GetCurrentMoniker failed: %08x\n", hres); - ok(mon == exmon, "mon(%p) != exmon(%p)\n", mon, exmon); - - SET_EXPECT(GetDisplayName); - hres = IMoniker_GetDisplayName(mon, NULL, NULL, &url); - ok(hres == S_OK, "GetDisplayName failed: %08x\n", hres); - CHECK_CALLED(GetDisplayName); - expect_GetDisplayName = exb; - called_GetDisplayName = clb; - - ok(!lstrcmpW(url, doc_url), "url != doc_url\n"); - CoTaskMemFree(url); - }else if(exurl) { - LPOLESTR url; - - ok(hres == S_OK, "GetCurrentMoniker failed: %08x\n", hres); - - hres = IMoniker_GetDisplayName(mon, NULL, NULL, &url); - ok(hres == S_OK, "GetDisplayName failed: %08x\n", hres); - - ok(!lstrcmpW(url, exurl), "unexpected url\n"); - ok(!lstrcmpW(url, doc_url), "url != doc_url\n"); - - CoTaskMemFree(url); - }else { - ok(hres == E_UNEXPECTED, - "GetCurrentMoniker failed: %08x, expected E_UNEXPECTED\n", hres); - ok(mon == (IMoniker*)0xdeadbeef, "mon=%p\n", mon); - ok(!lstrcmpW(doc_url, about_blank_url), "doc_url is not about:blank\n"); - } - - SysFreeString(doc_url); - IHTMLDocument_Release(doc); - if(mon && mon != (void*)0xdeadbeef) - IMoniker_Release(mon); -} - -static void test_Load(IPersistMoniker *persist) -{ - IBindCtx *bind; - HRESULT hres; - WCHAR sz_html_clientsite_objectparam[MAX_PATH]; - - lstrcpyW(sz_html_clientsite_objectparam, SZ_HTML_CLIENTSITE_OBJECTPARAM); - - test_readyState((IUnknown*)persist); - - CreateBindCtx(0, &bind); - IBindCtx_RegisterObjectParam(bind, sz_html_clientsite_objectparam, - (IUnknown*)&ClientSite); - - SET_EXPECT(GetDisplayName); - if(!set_clientsite) { - SET_EXPECT(Invoke_AMBIENT_USERMODE); - SET_EXPECT(GetHostInfo); - SET_EXPECT(Invoke_AMBIENT_DLCONTROL); - SET_EXPECT(Invoke_AMBIENT_SILENT); - SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); - SET_EXPECT(Invoke_AMBIENT_USERAGENT); - SET_EXPECT(Invoke_AMBIENT_PALETTE); - SET_EXPECT(GetOptionKeyPath); - SET_EXPECT(GetOverrideKeyPath); - SET_EXPECT(GetWindow); - SET_EXPECT(QueryStatus_SETPROGRESSTEXT); - SET_EXPECT(Exec_SETPROGRESSMAX); - SET_EXPECT(Exec_SETPROGRESSPOS); - SET_EXPECT(Exec_ShellDocView_37); - } - if(!container_locked) { - SET_EXPECT(GetContainer); - SET_EXPECT(LockContainer); - } - SET_EXPECT(OnChanged_READYSTATE); - SET_EXPECT(Exec_ShellDocView_84); - SET_EXPECT(BindToStorage); - SET_EXPECT(SetActiveObject); - if(set_clientsite) { - SET_EXPECT(Invoke_AMBIENT_SILENT); - SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); - SET_EXPECT(Exec_ShellDocView_37); - } - load_state = LD_DOLOAD; - expect_LockContainer_fLock = TRUE; - readystate_set_loading = TRUE; - - hres = IPersistMoniker_Load(persist, FALSE, &Moniker, bind, 0x12); - ok(hres == S_OK, "Load failed: %08x\n", hres); - - CHECK_CALLED(GetDisplayName); - if(!set_clientsite) { - CHECK_CALLED(Invoke_AMBIENT_USERMODE); - CHECK_CALLED(GetHostInfo); - CHECK_CALLED(Invoke_AMBIENT_DLCONTROL); - CHECK_CALLED(Invoke_AMBIENT_SILENT); - CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); - CHECK_CALLED(Invoke_AMBIENT_USERAGENT); - CHECK_CALLED(Invoke_AMBIENT_PALETTE); - CHECK_CALLED(GetOptionKeyPath); - CHECK_CALLED(GetOverrideKeyPath); - CHECK_CALLED(GetWindow); - CHECK_CALLED(QueryStatus_SETPROGRESSTEXT); - CHECK_CALLED(Exec_SETPROGRESSMAX); - CHECK_CALLED(Exec_SETPROGRESSPOS); - CHECK_CALLED(Exec_ShellDocView_37); - } - if(!container_locked) { - CHECK_CALLED(GetContainer); - CHECK_CALLED(LockContainer); - container_locked = TRUE; - } - CHECK_CALLED(OnChanged_READYSTATE); - SET_CALLED(Exec_ShellDocView_84); - CHECK_CALLED(BindToStorage); - SET_CALLED(SetActiveObject); /* FIXME */ - if(set_clientsite) { - CHECK_CALLED(Invoke_AMBIENT_SILENT); - CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); - CHECK_CALLED(Exec_ShellDocView_37); - } - - set_clientsite = container_locked = TRUE; - - test_GetCurMoniker((IUnknown*)persist, &Moniker, NULL); - - IBindCtx_Release(bind); - - test_readyState((IUnknown*)persist); -} - -static void test_download(BOOL verb_done, BOOL css_dwl, BOOL css_try_dwl) -{ - HWND hwnd; - MSG msg; - - hwnd = FindWindowA("Internet Explorer_Hidden", NULL); - ok(hwnd != NULL, "Could not find hidden window\n"); - - test_readyState(NULL); - - if(verb_done) { - SET_EXPECT(Exec_SETPROGRESSMAX); - if(!load_from_stream) - SET_EXPECT(GetHostInfo); - } - SET_EXPECT(SetStatusText); - SET_EXPECT(Exec_SETDOWNLOADSTATE_1); - SET_EXPECT(GetDropTarget); - if(css_try_dwl) - SET_EXPECT(Exec_ShellDocView_84); - if(css_dwl) { - SET_EXPECT(CreateInstance); - SET_EXPECT(Start); - SET_EXPECT(LockRequest); - SET_EXPECT(Terminate); - SET_EXPECT(Protocol_Read); - SET_EXPECT(UnlockRequest); - } - SET_EXPECT(Exec_Explorer_69); - SET_EXPECT(OnChanged_1005); - SET_EXPECT(OnChanged_READYSTATE); - SET_EXPECT(Exec_SETPROGRESSPOS); - SET_EXPECT(Exec_SETDOWNLOADSTATE_0); - SET_EXPECT(Exec_ShellDocView_103); - SET_EXPECT(Exec_MSHTML_PARSECOMPLETE); - SET_EXPECT(Exec_HTTPEQUIV_DONE); - expect_status_text = (LPWSTR)0xdeadbeef; /* TODO */ - - while(!called_Exec_HTTPEQUIV_DONE && GetMessage(&msg, NULL, 0, 0)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - if(verb_done) { - CHECK_CALLED(Exec_SETPROGRESSMAX); - if(!load_from_stream) - CHECK_CALLED(GetHostInfo); - } - CHECK_CALLED(SetStatusText); - CHECK_CALLED(Exec_SETDOWNLOADSTATE_1); - CHECK_CALLED(GetDropTarget); - if(css_try_dwl) - SET_CALLED(Exec_ShellDocView_84); - if(css_dwl) { - if(called_CreateInstance) { - CHECK_CALLED(CreateInstance); - CHECK_CALLED(Start); - CHECK_CALLED(LockRequest); - CHECK_CALLED(Terminate); - CHECK_CALLED(Protocol_Read); - CHECK_CALLED(UnlockRequest); - }else { - skip("CreateInstance not called. Assuming no Gecko installed.\n"); - - SET_CALLED(Exec_ShellDocView_84); - SET_CALLED(CreateInstance); - SET_CALLED(Start); - SET_CALLED(LockRequest); - SET_CALLED(Terminate); - SET_CALLED(Protocol_Read); - SET_CALLED(UnlockRequest); - - nogecko = TRUE; - } - } - SET_CALLED(Exec_Explorer_69); - CHECK_CALLED(OnChanged_1005); - CHECK_CALLED(OnChanged_READYSTATE); - CHECK_CALLED(Exec_SETPROGRESSPOS); - CHECK_CALLED(Exec_SETDOWNLOADSTATE_0); - SET_CALLED(Exec_ShellDocView_103); - CHECK_CALLED(Exec_MSHTML_PARSECOMPLETE); - CHECK_CALLED(Exec_HTTPEQUIV_DONE); - - load_state = LD_COMPLETE; - - test_readyState(NULL); -} - -static void test_Persist(IUnknown *unk) -{ - IPersistMoniker *persist_mon; - IPersistFile *persist_file; - GUID guid; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IPersistFile, (void**)&persist_file); - ok(hres == S_OK, "QueryInterface(IID_IPersist) failed: %08x\n", hres); - if(SUCCEEDED(hres)) { - hres = IPersist_GetClassID(persist_file, NULL); - ok(hres == E_INVALIDARG, "GetClassID returned: %08x, expected E_INVALIDARG\n", hres); - - hres = IPersist_GetClassID(persist_file, &guid); - ok(hres == S_OK, "GetClassID failed: %08x\n", hres); - ok(IsEqualGUID(&CLSID_HTMLDocument, &guid), "guid != CLSID_HTMLDocument\n"); - - IPersist_Release(persist_file); - } - - hres = IUnknown_QueryInterface(unk, &IID_IPersistMoniker, (void**)&persist_mon); - ok(hres == S_OK, "QueryInterface(IID_IPersistMoniker) failed: %08x\n", hres); - if(SUCCEEDED(hres)) { - hres = IPersistMoniker_GetClassID(persist_mon, NULL); - ok(hres == E_INVALIDARG, "GetClassID returned: %08x, expected E_INVALIDARG\n", hres); - - hres = IPersistMoniker_GetClassID(persist_mon, &guid); - ok(hres == S_OK, "GetClassID failed: %08x\n", hres); - ok(IsEqualGUID(&CLSID_HTMLDocument, &guid), "guid != CLSID_HTMLDocument\n"); - - if(load_state == LD_DOLOAD) - test_Load(persist_mon); - - test_readyState(unk); - - IPersistMoniker_Release(persist_mon); - } -} - -static const OLECMDF expect_cmds[OLECMDID_GETPRINTTEMPLATE+1] = { - 0, - OLECMDF_SUPPORTED, /* OLECMDID_OPEN */ - OLECMDF_SUPPORTED, /* OLECMDID_NEW */ - OLECMDF_SUPPORTED, /* OLECMDID_SAVE */ - OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_SAVEAS */ - OLECMDF_SUPPORTED, /* OLECMDID_SAVECOPYAS */ - OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PRINT */ - OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PRINTPREVIEW */ - OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PAGESETUP */ - OLECMDF_SUPPORTED, /* OLECMDID_SPELL */ - OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_PROPERTIES */ - OLECMDF_SUPPORTED, /* OLECMDID_CUT */ - OLECMDF_SUPPORTED, /* OLECMDID_COPY */ - OLECMDF_SUPPORTED, /* OLECMDID_PASTE */ - OLECMDF_SUPPORTED, /* OLECMDID_PASTESPECIAL */ - OLECMDF_SUPPORTED, /* OLECMDID_UNDO */ - OLECMDF_SUPPORTED, /* OLECMDID_REDO */ - OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_SELECTALL */ - OLECMDF_SUPPORTED, /* OLECMDID_CLEARSELECTION */ - OLECMDF_SUPPORTED, /* OLECMDID_ZOOM */ - OLECMDF_SUPPORTED, /* OLECMDID_GETZOOMRANGE */ - 0, - OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_REFRESH */ - OLECMDF_SUPPORTED|OLECMDF_ENABLED, /* OLECMDID_STOP */ - 0,0,0,0,0,0, - OLECMDF_SUPPORTED, /* OLECMDID_STOPDOWNLOAD */ - 0,0, - OLECMDF_SUPPORTED, /* OLECMDID_DELETE */ - 0,0, - OLECMDF_SUPPORTED, /* OLECMDID_ENABLE_INTERACTION */ - OLECMDF_SUPPORTED, /* OLECMDID_ONUNLOAD */ - 0,0,0,0,0, - OLECMDF_SUPPORTED, /* OLECMDID_SHOWPAGESETUP */ - OLECMDF_SUPPORTED, /* OLECMDID_SHOWPRINT */ - 0,0, - OLECMDF_SUPPORTED, /* OLECMDID_CLOSE */ - 0,0,0, - OLECMDF_SUPPORTED, /* OLECMDID_SETPRINTTEMPLATE */ - OLECMDF_SUPPORTED /* OLECMDID_GETPRINTTEMPLATE */ -}; - -#define test_QueryStatus(u,cgid,cmdid,cmdf) _test_QueryStatus(__LINE__,u,cgid,cmdid,cmdf) -static void _test_QueryStatus(unsigned line, IUnknown *unk, REFIID cgid, ULONG cmdid, DWORD cmdf) -{ - IOleCommandTarget *cmdtrg; - OLECMD olecmd = {cmdid, 0}; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg); - ok_(__FILE__,line) (hres == S_OK, "QueryInterface(IID_IOleCommandTarget failed: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = IOleCommandTarget_QueryStatus(cmdtrg, cgid, 1, &olecmd, NULL); - ok(hres == S_OK, "QueryStatus(%u) failed: %08x\n", cmdid, hres); - - IOleCommandTarget_Release(cmdtrg); - - ok_(__FILE__,line) (olecmd.cmdID == cmdid, "cmdID changed\n"); - ok_(__FILE__,line) (olecmd.cmdf == cmdf, "(%u) cmdf=%08x, expected %08x\n", cmdid, olecmd.cmdf, cmdf); -} - -static void test_MSHTML_QueryStatus(IUnknown *unk, DWORD cmdf) -{ - if(!unk) - unk = doc_unk; - - test_QueryStatus(unk, &CGID_MSHTML, IDM_FONTNAME, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_FONTSIZE, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_SELECTALL, cmdf|OLECMDF_ENABLED); - test_QueryStatus(unk, &CGID_MSHTML, IDM_BOLD, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_FORECOLOR, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_JUSTIFYCENTER, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_JUSTIFYLEFT, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_JUSTIFYRIGHT, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_ITALIC, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_UNDERLINE, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_HORIZONTALLINE, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_ORDERLIST, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_UNORDERLIST, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_INDENT, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_OUTDENT, cmdf); - test_QueryStatus(unk, &CGID_MSHTML, IDM_DELETE, cmdf); -} - -static void test_OleCommandTarget(IUnknown *unk) -{ - IOleCommandTarget *cmdtrg; - OLECMD cmds[OLECMDID_GETPRINTTEMPLATE]; - int i; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg); - ok(hres == S_OK, "QueryInterface(IID_IOleCommandTarget failed: %08x\n", hres); - if(FAILED(hres)) - return; - - for(i=0; i -#include - -#include "windef.h" -#include "winbase.h" -#include "ole2.h" -#include "optary.h" - -#include "initguid.h" - -static void test_HTMLLoadOptions(void) -{ - IHtmlLoadOptions *loadopts; - BYTE buf[100]; - DWORD size, i, data = 0xdeadbeef; - HRESULT hres; - - hres = CoCreateInstance(&CLSID_HTMLLoadOptions, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, - &IID_IHtmlLoadOptions, (void**)&loadopts); - ok(hres == S_OK, "creating HTMLLoadOptions failed: %08x\n", hres); - if(FAILED(hres)) - return; - - for(i=0; i <= HTMLLOADOPTION_FRAMELOAD+3; i++) { - size = 0xdeadbeef; - memset(buf, 0xdd, sizeof(buf)); - hres = IHtmlLoadOptions_QueryOption(loadopts, i, NULL, &size); - ok(hres == S_OK, "QueryOption failed: %08x\n", hres); - ok(size == 0, "size = %d\n", size); - ok(buf[0] == 0xdd, "buf changed\n"); - } - - size = 0xdeadbeef; - hres = IHtmlLoadOptions_QueryOption(loadopts, HTMLLOADOPTION_CODEPAGE, NULL, &size); - ok(hres == S_OK, "QueryOption failed: %08x\n", hres); - ok(size == 0, "size = %d\n", size); - - hres = IHtmlLoadOptions_SetOption(loadopts, HTMLLOADOPTION_CODEPAGE, &data, sizeof(data)); - ok(hres == S_OK, "SetOption failed: %08x\n", hres); - - size = sizeof(data); - memset(buf, 0xdd, sizeof(buf)); - hres = IHtmlLoadOptions_QueryOption(loadopts, HTMLLOADOPTION_CODEPAGE, buf, &size); - ok(hres == S_OK, "QueryOption failed: %08x\n", hres); - ok(size == sizeof(data), "size = %d\n", size); - ok(*(DWORD*)buf == data, "unexpected buf\n"); - - size = sizeof(data)-1; - memset(buf, 0xdd, sizeof(buf)); - hres = IHtmlLoadOptions_QueryOption(loadopts, HTMLLOADOPTION_CODEPAGE, buf, &size); - ok(hres == E_FAIL, "QueryOption failed: %08x\n", hres); - ok(size == sizeof(data) || !size, "size = %d\n", size); - ok(buf[0] == 0xdd, "buf changed\n"); - - data = 100; - hres = IHtmlLoadOptions_SetOption(loadopts, HTMLLOADOPTION_CODEPAGE, &data, 0); - ok(hres == S_OK, "SetOption failed: %08x\n", hres); - - size = 0xdeadbeef; - memset(buf, 0xdd, sizeof(buf)); - hres = IHtmlLoadOptions_QueryOption(loadopts, HTMLLOADOPTION_CODEPAGE, buf, &size); - ok(hres == S_OK, "QueryOption failed: %08x\n", hres); - ok(size == 0, "size = %d\n", size); - ok(buf[0] == 0xdd, "buf changed\n"); - - hres = IHtmlLoadOptions_SetOption(loadopts, HTMLLOADOPTION_CODEPAGE, NULL, 0); - ok(hres == S_OK, "SetOption failed: %08x\n", hres); - - hres = IHtmlLoadOptions_SetOption(loadopts, 1000, &data, sizeof(data)); - ok(hres == S_OK, "SetOption failed: %08x\n", hres); - - size = sizeof(data); - memset(buf, 0xdd, sizeof(buf)); - hres = IHtmlLoadOptions_QueryOption(loadopts, 1000, buf, &size); - ok(hres == S_OK, "QueryOption failed: %08x\n", hres); - ok(size == sizeof(data), "size = %d\n", size); - ok(*(DWORD*)buf == data, "unexpected buf\n"); - - hres = IHtmlLoadOptions_SetOption(loadopts, 1000, buf, sizeof(buf)); - ok(hres == S_OK, "SetOption failed: %08x\n", hres); - - size = 0xdeadbeef; - hres = IHtmlLoadOptions_QueryOption(loadopts, 1000, buf, &size); - ok(hres == S_OK, "QueryOption failed: %08x\n", hres); - ok(size == sizeof(buf), "size = %d\n", size); - - IHtmlLoadOptions_Release(loadopts); -} - -START_TEST(misc) -{ - CoInitialize(NULL); - - test_HTMLLoadOptions(); - - CoUninitialize(); -} diff --git a/rostests/winetests/mshtml/mshtml.rbuild b/rostests/winetests/mshtml/mshtml.rbuild deleted file mode 100644 index 6290e8b04d0..00000000000 --- a/rostests/winetests/mshtml/mshtml.rbuild +++ /dev/null @@ -1,23 +0,0 @@ - - - - - . - dom.c - htmldoc.c - misc.c - protocol.c - script.c - testlist.c - wine - uuid - strmiids - ole32 - oleaut32 - user32 - urlmon - advapi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/mshtml/protocol.c b/rostests/winetests/mshtml/protocol.c deleted file mode 100644 index 4e8b3d0c79a..00000000000 --- a/rostests/winetests/mshtml/protocol.c +++ /dev/null @@ -1,781 +0,0 @@ -/* - * 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 - */ - -#define COBJMACROS - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "ole2.h" -#include "urlmon.h" -#include "shlwapi.h" - -#include "initguid.h" - -#define DEFINE_EXPECT(func) \ - static BOOL expect_ ## func = FALSE, called_ ## func = FALSE - -#define SET_EXPECT(func) \ - expect_ ## func = TRUE - -#define CHECK_EXPECT(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - expect_ ## func = FALSE; \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_EXPECT2(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_CALLED(func) \ - do { \ - ok(called_ ## func, "expected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -DEFINE_GUID(CLSID_ResProtocol, 0x3050F3BC, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); -DEFINE_GUID(CLSID_AboutProtocol, 0x3050F406, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); - -DEFINE_EXPECT(GetBindInfo); -DEFINE_EXPECT(ReportProgress); -DEFINE_EXPECT(ReportData); -DEFINE_EXPECT(ReportResult); - -static HRESULT expect_hrResult; -static BOOL expect_hr_win32err = FALSE; -static DWORD bindf; - -static const WCHAR about_blank_url[] = {'a','b','o','u','t',':','b','l','a','n','k',0}; -static const WCHAR about_test_url[] = {'a','b','o','u','t',':','t','e','s','t',0}; -static const WCHAR about_res_url[] = {'r','e','s',':','b','l','a','n','k',0}; - -static const char *debugstr_w(LPCWSTR str) -{ - static char buf[1024]; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - -static HRESULT WINAPI ProtocolSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocolSink, riid)) { - *ppv = iface; - return S_OK; - } - return E_NOINTERFACE; -} - -static ULONG WINAPI ProtocolSink_AddRef(IInternetProtocolSink *iface) -{ - return 2; -} - -static ULONG WINAPI ProtocolSink_Release(IInternetProtocolSink *iface) -{ - return 1; -} - -static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface, ULONG ulStatusCode, - LPCWSTR szStatusText) -{ - static const WCHAR text_html[] = {'t','e','x','t','/','h','t','m','l',0}; - - CHECK_EXPECT(ReportProgress); - - ok(ulStatusCode == BINDSTATUS_MIMETYPEAVAILABLE - || ulStatusCode == BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, - "ulStatusCode=%d\n", ulStatusCode); - ok(!lstrcmpW(szStatusText, text_html), "szStatusText != text/html\n"); - - return S_OK; -} - -static HRESULT WINAPI ProtocolSink_ReportData(IInternetProtocolSink *iface, DWORD grfBSCF, ULONG ulProgress, - ULONG ulProgressMax) -{ - CHECK_EXPECT(ReportData); - - ok(ulProgress == ulProgressMax, "ulProgress != ulProgressMax\n"); - ok(grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION | BSCF_DATAFULLYAVAILABLE), - "grcf = %08x\n", grfBSCF); - - return S_OK; -} - -static HRESULT WINAPI ProtocolSink_ReportResult(IInternetProtocolSink *iface, HRESULT hrResult, DWORD dwError, - LPCWSTR szResult) -{ - CHECK_EXPECT(ReportResult); - - if(expect_hr_win32err) - ok((hrResult&0xffff0000) == ((FACILITY_WIN32 << 16)|0x80000000) || expect_hrResult, - "expected win32 err or %08x got: %08x\n", expect_hrResult, hrResult); - else - ok(hrResult == expect_hrResult || ((expect_hrResult == E_INVALIDARG || - expect_hrResult == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND)) && - hrResult == MK_E_SYNTAX), "expected: %08x got: %08x\n", expect_hrResult, hrResult); - ok(dwError == 0, "dwError = %d\n", dwError); - ok(!szResult, "szResult != NULL\n"); - - return S_OK; -} - -static IInternetProtocolSinkVtbl protocol_sink_vtbl = { - ProtocolSink_QueryInterface, - ProtocolSink_AddRef, - ProtocolSink_Release, - ProtocolSink_Switch, - ProtocolSink_ReportProgress, - ProtocolSink_ReportData, - ProtocolSink_ReportResult -}; - -static IInternetProtocolSink protocol_sink = { - &protocol_sink_vtbl -}; - -static HRESULT WINAPI BindInfo_QueryInterface(IInternetBindInfo *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetBindInfo, riid)) { - *ppv = iface; - return S_OK; - } - return E_NOINTERFACE; -} - -static ULONG WINAPI BindInfo_AddRef(IInternetBindInfo *iface) -{ - return 2; -} - -static ULONG WINAPI BindInfo_Release(IInternetBindInfo *iface) -{ - return 1; -} - -static HRESULT WINAPI BindInfo_GetBindInfo(IInternetBindInfo *iface, DWORD *grfBINDF, BINDINFO *pbindinfo) -{ - CHECK_EXPECT(GetBindInfo); - - ok(grfBINDF != NULL, "grfBINDF == NULL\n"); - ok(pbindinfo != NULL, "pbindinfo == NULL\n"); - ok(pbindinfo->cbSize == sizeof(BINDINFO), "wrong size of pbindinfo: %d\n", pbindinfo->cbSize); - - *grfBINDF = bindf; - return S_OK; -} - -static HRESULT WINAPI BindInfo_GetBindString(IInternetBindInfo *iface, ULONG ulStringType, LPOLESTR *ppwzStr, - ULONG cEl, ULONG *pcElFetched) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static IInternetBindInfoVtbl bind_info_vtbl = { - BindInfo_QueryInterface, - BindInfo_AddRef, - BindInfo_Release, - BindInfo_GetBindInfo, - BindInfo_GetBindString -}; - -static IInternetBindInfo bind_info = { - &bind_info_vtbl -}; - -static void test_protocol_fail(IInternetProtocol *protocol, LPCWSTR url, HRESULT expected_hres, - BOOL expect_win32err) -{ - HRESULT hres; - - SET_EXPECT(GetBindInfo); - SET_EXPECT(ReportResult); - - expect_hrResult = expected_hres; - expect_hr_win32err = expect_win32err; - hres = IInternetProtocol_Start(protocol, url, &protocol_sink, &bind_info, 0, 0); - if(expect_win32err) - ok((hres&0xffff0000) == ((FACILITY_WIN32 << 16)|0x80000000) || hres == expect_hrResult, - "expected win32 err or %08x got: %08x\n", expected_hres, hres); - else - ok(hres == expected_hres || ((expected_hres == E_INVALIDARG || - expected_hres == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND)) && hres == MK_E_SYNTAX), - "expected: %08x got: %08x\n", expected_hres, hres); - - CHECK_CALLED(GetBindInfo); - CHECK_CALLED(ReportResult); -} - -static void protocol_start(IInternetProtocol *protocol, LPCWSTR url) -{ - HRESULT hres; - - SET_EXPECT(GetBindInfo); - SET_EXPECT(ReportResult); - SET_EXPECT(ReportProgress); - SET_EXPECT(ReportData); - expect_hrResult = S_OK; - expect_hr_win32err = FALSE; - - hres = IInternetProtocol_Start(protocol, url, &protocol_sink, &bind_info, 0, 0); - ok(hres == S_OK, "Start failed: %08x\n", hres); - - CHECK_CALLED(GetBindInfo); - CHECK_CALLED(ReportProgress); - CHECK_CALLED(ReportData); - CHECK_CALLED(ReportResult); -} - -static void res_sec_url_cmp(LPCWSTR url, DWORD size, LPCWSTR file) -{ - WCHAR buf[MAX_PATH]; - DWORD len; - - static const WCHAR fileW[] = {'f','i','l','e',':','/','/'}; - - if(size < sizeof(fileW)/sizeof(WCHAR) || memcmp(url, fileW, sizeof(fileW))) { - ok(0, "wrong URL protocol\n"); - return; - } - - len = SearchPathW(NULL, file, NULL, sizeof(buf)/sizeof(WCHAR), buf, NULL); - if(!len) { - ok(0, "SearchPath failed: %u\n", GetLastError()); - return; - } - - len += sizeof(fileW)/sizeof(WCHAR)+1; - ok(len == size, "wrong size %u, expected %u\n", size, len); - ok(!lstrcmpW(url + sizeof(fileW)/sizeof(WCHAR), buf), "wrong file part %s\n", debugstr_w(url)); -} - -static void test_res_protocol(void) -{ - IInternetProtocolInfo *protocol_info; - IUnknown *unk; - IClassFactory *factory; - HRESULT hres; - - static const WCHAR blank_url[] = - {'r','e','s',':','/','/','m','s','h','t','m','l','.','d','l','l','/','b','l','a','n','k','.','h','t','m',0}; - static const WCHAR test_part_url[] = {'r','e','s',':','/','/','C','S','S','/','t','e','s','t',0}; - static const WCHAR wrong_url1[] = - {'m','s','h','t','m','l','.','d','l','l','/','b','l','a','n','k','.','m','t','h',0}; - static const WCHAR wrong_url2[] = - {'r','e','s',':','/','/','m','s','h','t','m','l','.','d','l','l',0}; - static const WCHAR wrong_url3[] = - {'r','e','s',':','/','/','m','s','h','t','m','l','.','d','l','l','/','x','x','.','h','t','m',0}; - static const WCHAR wrong_url4[] = - {'r','e','s',':','/','/','x','x','.','d','l','l','/','b','l','a','n','k','.','h','t','m',0}; - static const WCHAR wrong_url5[] = - {'r','e','s',':','/','/','s','h','t','m','l','.','d','l','l','/','b','l','a','n','k','.','h','t','m',0}; - static const WCHAR mshtml_dllW[] = {'m','s','h','t','m','l','.','d','l','l',0}; - - hres = CoGetClassObject(&CLSID_ResProtocol, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk); - ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres); - if(!SUCCEEDED(hres)) - return; - - hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&protocol_info); - ok(hres == S_OK, "Could not get IInternetProtocolInfo interface: %08x\n", hres); - if(SUCCEEDED(hres)) { - WCHAR buf[128]; - DWORD size; - int i; - - for(i = PARSE_CANONICALIZE; i <= PARSE_UNESCAPE; i++) { - if(i != PARSE_SECURITY_URL && i != PARSE_DOMAIN) { - hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, i, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_DEFAULT_ACTION, - "[%d] failed: %08x, expected INET_E_DEFAULT_ACTION\n", i, hres); - } - } - - hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_SECURITY_URL, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK, "ParseUrl failed: %08x\n", hres); - res_sec_url_cmp(buf, size, mshtml_dllW); - - size = 0; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_SECURITY_URL, 0, buf, - 3, &size, 0); - ok(hres == S_FALSE, "ParseUrl failed: %08x, expected S_FALSE\n", hres); - ok(size, "size=0\n"); - - hres = IInternetProtocolInfo_ParseUrl(protocol_info, wrong_url1, PARSE_SECURITY_URL, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == MK_E_SYNTAX || hres == E_INVALIDARG, - "ParseUrl failed: %08x, expected MK_E_SYNTAX\n", hres); - - hres = IInternetProtocolInfo_ParseUrl(protocol_info, wrong_url5, PARSE_SECURITY_URL, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == MK_E_SYNTAX, "ParseUrl failed: %08x, expected MK_E_SYNTAX\n", hres); - - size = 0xdeadbeef; - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK || hres == E_FAIL, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - ok(size == sizeof(blank_url)/sizeof(WCHAR), "size=%d\n", size); - - size = 0xdeadbeef; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, wrong_url1, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK || hres == E_FAIL, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - ok(size == sizeof(wrong_url1)/sizeof(WCHAR), "size=%d\n", size); - - if (0) - { - /* Crashes on win9x */ - size = 0xdeadbeef; - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, NULL, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == E_FAIL, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - ok(size == 1, "size=%u, ezpected 1\n", size); - - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), NULL, 0); - ok(hres == E_POINTER, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, NULL, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), NULL, 0); - ok(hres == E_POINTER, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - } - - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_UNESCAPE+1, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_DEFAULT_ACTION, - "ParseUrl failed: %08x, expected INET_E_DEFAULT_ACTION\n", hres); - ok(buf[0] == '?', "buf changed\n"); - - size = 0xdeadbeef; - hres = IInternetProtocolInfo_CombineUrl(protocol_info, blank_url, test_part_url, - 0, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER, "CombineUrl failed: %08x\n", hres); - ok(size == 0xdeadbeef, "size=%d\n", size); - - size = 0xdeadbeef; - hres = IInternetProtocolInfo_CombineUrl(protocol_info, blank_url, test_part_url, - URL_FILE_USE_PATHURL, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER, "CombineUrl failed: %08x\n", hres); - ok(size == 0xdeadbeef, "size=%d\n", size); - - size = 0xdeadbeef; - hres = IInternetProtocolInfo_CombineUrl(protocol_info, NULL, NULL, - URL_FILE_USE_PATHURL, NULL, 0xdeadbeef, NULL, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER, "CombineUrl failed: %08x\n", hres); - ok(size == 0xdeadbeef, "size=%d\n", size); - - hres = IInternetProtocolInfo_CompareUrl(protocol_info, blank_url, blank_url, 0); - ok(hres == E_NOTIMPL, "CompareUrl failed: %08x\n", hres); - - hres = IInternetProtocolInfo_CompareUrl(protocol_info, NULL, NULL, 0xdeadbeef); - ok(hres == E_NOTIMPL, "CompareUrl failed: %08x\n", hres); - - for(i=0; i<30; i++) { - if(i == QUERY_USES_NETWORK || i == QUERY_IS_SECURE || i == QUERY_IS_SAFE) - continue; - - hres = IInternetProtocolInfo_QueryInfo(protocol_info, blank_url, i, 0, - buf, sizeof(buf), &size, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER, - "QueryInfo(%d) returned: %08x, expected INET_E_USE_DEFAULT_PROTOCOLHANDLER\n", i, hres); - } - - size = 0xdeadbeef; - memset(buf, '?', sizeof(buf)); - hres = IInternetProtocolInfo_QueryInfo(protocol_info, blank_url, QUERY_USES_NETWORK, 0, - buf, sizeof(buf), &size, 0); - ok(hres == S_OK, "QueryInfo(QUERY_USES_NETWORK) failed: %08x\n", hres); - ok(size == sizeof(DWORD), "size=%d\n", size); - ok(!*(DWORD*)buf, "buf=%d\n", *(DWORD*)buf); - - memset(buf, '?', sizeof(buf)); - hres = IInternetProtocolInfo_QueryInfo(protocol_info, blank_url, QUERY_USES_NETWORK, 0, - buf, sizeof(buf), NULL, 0); - ok(hres == S_OK, "QueryInfo(QUERY_USES_NETWORK) failed: %08x\n", hres); - ok(!*(DWORD*)buf, "buf=%d\n", *(DWORD*)buf); - - hres = IInternetProtocolInfo_QueryInfo(protocol_info, blank_url, QUERY_USES_NETWORK, 0, - buf, 3, &size, 0); - ok(hres == E_FAIL, "QueryInfo(QUERY_USES_NETWORK) failed: %08x, expected E_FAIL\n", hres); - - size = 0xdeadbeef; - memset(buf, '?', sizeof(buf)); - hres = IInternetProtocolInfo_QueryInfo(protocol_info, NULL, QUERY_USES_NETWORK, 0, - buf, sizeof(buf), &size, 0); - ok(hres == S_OK, "QueryInfo(QUERY_USES_NETWORK) failed: %08x, expected E_FAIL\n", hres); - ok(hres == S_OK, "QueryInfo(QUERY_USES_NETWORK) failed: %08x\n", hres); - ok(size == sizeof(DWORD), "size=%d\n", size); - ok(!*(DWORD*)buf, "buf=%d\n", *(DWORD*)buf); - - hres = IInternetProtocolInfo_QueryInfo(protocol_info, blank_url, QUERY_USES_NETWORK, 0, - NULL, sizeof(buf), &size, 0); - ok(hres == E_FAIL, "QueryInfo(QUERY_USES_NETWORK) failed: %08x, expected E_FAIL\n", hres); - - hres = IInternetProtocolInfo_QueryInfo(protocol_info, blank_url, 60, 0, - NULL, sizeof(buf), &size, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER, - "QueryInfo failed: %08x, expected INET_E_USE_DEFAULT_PROTOCOLHANDLER\n", hres); - - IInternetProtocolInfo_Release(protocol_info); - } - - hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&factory); - ok(hres == S_OK, "Could not get IClassFactory interface\n"); - if(SUCCEEDED(hres)) { - IInternetProtocol *protocol; - BYTE buf[512]; - ULONG cb; - hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol, (void**)&protocol); - ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres); - - if(SUCCEEDED(hres)) { - IInternetPriority *priority; - - hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, (void**)&priority); - ok(hres == E_NOINTERFACE, - "QueryInterface(IInternetPriority) returned %08x, expected E_NOINTEFACE\n", hres); - - test_protocol_fail(protocol, wrong_url1, E_INVALIDARG, FALSE); - test_protocol_fail(protocol, wrong_url2, - HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND), FALSE); - test_protocol_fail(protocol, wrong_url3, E_FAIL, TRUE); - test_protocol_fail(protocol, wrong_url4, E_FAIL, TRUE); - - cb = 0xdeadbeef; - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == E_FAIL, "Read returned %08x expected E_FAIL\n", hres); - ok(cb == 0xdeadbeef, "cb=%u expected 0xdeadbeef\n", cb); - - protocol_start(protocol, blank_url); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - ok(cb == 2, "cb=%u expected 2\n", cb); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_FALSE, "Read failed: %08x expected S_FALSE\n", hres); - ok(cb == 0, "cb=%u expected 0\n", cb); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - - protocol_start(protocol, blank_url); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - - protocol_start(protocol, blank_url); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Terminate(protocol, 0); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n\n", hres); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - hres = IInternetProtocol_Terminate(protocol, 0); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - ok(cb == 2, "cb=%u expected 2\n", cb); - - protocol_start(protocol, blank_url); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - protocol_start(protocol, blank_url); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - hres = IInternetProtocol_Terminate(protocol, 0); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - - IInternetProtocol_Release(protocol); - } - - IClassFactory_Release(factory); - } - - IUnknown_Release(unk); -} - -static void do_test_about_protocol(IClassFactory *factory, DWORD bf) -{ - IInternetProtocol *protocol; - IInternetPriority *priority; - BYTE buf[512]; - ULONG cb; - HRESULT hres; - - static const WCHAR blank_html[] = {0xfeff,'<','H','T','M','L','>','<','/','H','T','M','L','>',0}; - static const WCHAR test_html[] = - {0xfeff,'<','H','T','M','L','>','t','e','s','t','<','/','H','T','M','L','>',0}; - - bindf = bf; - - hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol, (void**)&protocol); - ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, (void**)&priority); - ok(hres == E_NOINTERFACE, - "QueryInterface(IInternetPriority) returned %08x, expected E_NOINTEFACE\n", hres); - - protocol_start(protocol, about_blank_url); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - ok(cb == sizeof(blank_html), "cb=%d\n", cb); - ok(!memcmp(buf, blank_html, cb), "Readed wrong data\n"); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - - protocol_start(protocol, about_test_url); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - ok(cb == sizeof(test_html), "cb=%d\n", cb); - ok(!memcmp(buf, test_html, cb), "Readed wrong data\n"); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - - protocol_start(protocol, about_res_url); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - ok(cb == sizeof(blank_html), "cb=%d\n", cb); - ok(!memcmp(buf, blank_html, cb), "Readed wrong data\n"); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - - IInternetProtocol_Release(protocol); -} - -static void test_about_protocol(void) -{ - IInternetProtocolInfo *protocol_info; - IUnknown *unk; - IClassFactory *factory; - HRESULT hres; - - hres = CoGetClassObject(&CLSID_AboutProtocol, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk); - ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres); - if(!SUCCEEDED(hres)) - return; - - hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&protocol_info); - ok(hres == S_OK, "Could not get IInternetProtocolInfo interface: %08x\n", hres); - if(SUCCEEDED(hres)) { - WCHAR buf[128]; - DWORD size; - int i; - - for(i = PARSE_CANONICALIZE; i <= PARSE_UNESCAPE; i++) { - if(i != PARSE_SECURITY_URL && i != PARSE_DOMAIN) { - hres = IInternetProtocolInfo_ParseUrl(protocol_info, about_blank_url, i, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_DEFAULT_ACTION, - "[%d] failed: %08x, expected INET_E_DEFAULT_ACTION\n", i, hres); - } - } - - hres = IInternetProtocolInfo_ParseUrl(protocol_info, about_blank_url, PARSE_SECURITY_URL, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK, "ParseUrl failed: %08x\n", hres); - ok(!lstrcmpW(about_blank_url, buf), "buf != blank_url\n"); - - hres = IInternetProtocolInfo_ParseUrl(protocol_info, about_blank_url, PARSE_SECURITY_URL, 0, buf, - 3, &size, 0); - ok(hres == S_FALSE, "ParseUrl failed: %08x, expected S_FALSE\n", hres); - - hres = IInternetProtocolInfo_ParseUrl(protocol_info, about_test_url, PARSE_SECURITY_URL, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK, "ParseUrl failed: %08x\n", hres); - ok(!lstrcmpW(about_test_url, buf), "buf != test_url\n"); - - size = 0xdeadbeef; - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, about_blank_url, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK || hres == E_FAIL, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - ok(size == sizeof(about_blank_url)/sizeof(WCHAR), "size=%d\n", size); - - if (0) - { - /* Crashes on win9x */ - size = 0xdeadbeef; - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, NULL, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == E_FAIL, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - ok(size == 1, "size=%u, ezpected 1\n", size); - - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, about_blank_url, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), NULL, 0); - ok(hres == E_POINTER, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - - buf[0] = '?'; - hres = IInternetProtocolInfo_ParseUrl(protocol_info, NULL, PARSE_DOMAIN, 0, buf, - sizeof(buf)/sizeof(buf[0]), NULL, 0); - ok(hres == E_POINTER, "ParseUrl failed: %08x\n", hres); - ok(buf[0] == '?', "buf changed\n"); - } - - hres = IInternetProtocolInfo_ParseUrl(protocol_info, about_blank_url, PARSE_UNESCAPE+1, 0, buf, - sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_DEFAULT_ACTION, - "ParseUrl failed: %08x, expected INET_E_DEFAULT_ACTION\n", hres); - - size = 0xdeadbeef; - hres = IInternetProtocolInfo_CombineUrl(protocol_info, about_blank_url, about_test_url, - 0, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER, "CombineUrl failed: %08x\n", hres); - ok(size == 0xdeadbeef, "size=%d\n", size); - - size = 0xdeadbeef; - hres = IInternetProtocolInfo_CombineUrl(protocol_info, about_blank_url, about_test_url, - URL_FILE_USE_PATHURL, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER, "CombineUrl failed: %08x\n", hres); - ok(size == 0xdeadbeef, "size=%d\n", size); - - size = 0xdeadbeef; - hres = IInternetProtocolInfo_CombineUrl(protocol_info, NULL, NULL, - URL_FILE_USE_PATHURL, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER, "CombineUrl failed: %08x\n", hres); - ok(size == 0xdeadbeef, "size=%d\n", size); - - hres = IInternetProtocolInfo_CompareUrl(protocol_info, about_blank_url, about_blank_url, 0); - ok(hres == E_NOTIMPL, "CompareUrl failed: %08x\n", hres); - - hres = IInternetProtocolInfo_CompareUrl(protocol_info, NULL, NULL, 0xdeadbeef); - ok(hres == E_NOTIMPL, "CompareUrl failed: %08x\n", hres); - - for(i=0; i<30; i++) { - switch(i) { - case QUERY_CAN_NAVIGATE: - case QUERY_USES_NETWORK: - case QUERY_IS_CACHED: - case QUERY_IS_INSTALLEDENTRY: - case QUERY_IS_CACHED_OR_MAPPED: - case QUERY_IS_SECURE: - case QUERY_IS_SAFE: - case QUERY_USES_HISTORYFOLDER: - break; - default: - hres = IInternetProtocolInfo_QueryInfo(protocol_info, about_blank_url, i, 0, - buf, sizeof(buf), &size, 0); - ok(hres == E_FAIL, "QueryInfo(%d) returned: %08x, expected E_FAIL\n", i, hres); - } - } - - hres = IInternetProtocolInfo_QueryInfo(protocol_info, about_blank_url, QUERY_CAN_NAVIGATE, 0, - buf, sizeof(buf), &size, 0); - ok(hres == INET_E_USE_DEFAULT_PROTOCOLHANDLER || - hres == E_FAIL, /* win2k */ - "QueryInfo returned: %08x, expected INET_E_USE_DEFAULT_PROTOCOLHANDLER or E_FAIL\n", hres); - - size = 0xdeadbeef; - memset(buf, '?', sizeof(buf)); - hres = IInternetProtocolInfo_QueryInfo(protocol_info, about_blank_url, QUERY_USES_NETWORK, 0, - buf, sizeof(buf), &size, 0); - ok(hres == S_OK, "QueryInfo(QUERY_USES_NETWORK) failed: %08x\n", hres); - ok(size == sizeof(DWORD), "size=%d\n", size); - ok(!*(DWORD*)buf, "buf=%d\n", *(DWORD*)buf); - - memset(buf, '?', sizeof(buf)); - hres = IInternetProtocolInfo_QueryInfo(protocol_info, about_blank_url, QUERY_USES_NETWORK, 0, - buf, sizeof(buf), NULL, 0); - ok(hres == S_OK, "QueryInfo(QUERY_USES_NETWORK) failed: %08x\n", hres); - ok(!*(DWORD*)buf, "buf=%d\n", *(DWORD*)buf); - - hres = IInternetProtocolInfo_QueryInfo(protocol_info, about_blank_url, QUERY_USES_NETWORK, 0, - buf, 3, &size, 0); - ok(hres == E_FAIL, "QueryInfo(QUERY_USES_NETWORK) failed: %08x, expected E_FAIL\n", hres); - - hres = IInternetProtocolInfo_QueryInfo(protocol_info, about_blank_url, QUERY_USES_NETWORK, 0, - NULL, sizeof(buf), &size, 0); - ok(hres == E_FAIL, "QueryInfo(QUERY_USES_NETWORK) failed: %08x, expected E_FAIL\n", hres); - - hres = IInternetProtocolInfo_QueryInfo(protocol_info, about_blank_url, 60, 0, - NULL, sizeof(buf), &size, 0); - ok(hres == E_FAIL, "QueryInfo failed: %08x, expected E_FAIL\n", hres); - - IInternetProtocolInfo_Release(protocol_info); - } - - hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&factory); - ok(hres == S_OK, "Could not get IClassFactory interface\n"); - if(SUCCEEDED(hres)) { - do_test_about_protocol(factory, 0); - do_test_about_protocol(factory, - BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NEEDFILE); - - IClassFactory_Release(factory); - } - - IUnknown_Release(unk); -} - -START_TEST(protocol) -{ - OleInitialize(NULL); - - test_res_protocol(); - test_about_protocol(); - - OleUninitialize(); -} diff --git a/rostests/winetests/mshtml/script.c b/rostests/winetests/mshtml/script.c deleted file mode 100644 index bbd9c3cca5f..00000000000 --- a/rostests/winetests/mshtml/script.c +++ /dev/null @@ -1,957 +0,0 @@ -/* - * 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 - */ - -#define COBJMACROS -#define CONST_VTABLE - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "ole2.h" -#include "dispex.h" -#include "mshtml.h" -#include "activscp.h" -#include "activdbg.h" -#include "objsafe.h" -#include "mshtmdid.h" - -#define DEFINE_EXPECT(func) \ - static BOOL expect_ ## func = FALSE, called_ ## func = FALSE - -#define SET_EXPECT(func) \ - do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0) - -#define CHECK_EXPECT2(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_EXPECT(func) \ - do { \ - CHECK_EXPECT2(func); \ - expect_ ## func = FALSE; \ - }while(0) - -#define CHECK_CALLED(func) \ - do { \ - ok(called_ ## func, "expected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -#define CHECK_NOT_CALLED(func) \ - do { \ - ok(!called_ ## func, "unexpected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -#define CLEAR_CALLED(func) \ - expect_ ## func = called_ ## func = FALSE - - -DEFINE_EXPECT(CreateInstance); -DEFINE_EXPECT(GetInterfaceSafetyOptions); -DEFINE_EXPECT(SetInterfaceSafetyOptions); -DEFINE_EXPECT(InitNew); -DEFINE_EXPECT(Close); -DEFINE_EXPECT(SetProperty); -DEFINE_EXPECT(SetScriptSite); -DEFINE_EXPECT(GetScriptState); -DEFINE_EXPECT(SetScriptState_STARTED); -DEFINE_EXPECT(SetScriptState_CONNECTED); -DEFINE_EXPECT(SetScriptState_DISCONNECTED); -DEFINE_EXPECT(AddNamedItem); -DEFINE_EXPECT(ParseScriptText); -DEFINE_EXPECT(GetScriptDispatch); - -#define TESTSCRIPT_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80746}" - -static const GUID CLSID_TestScript = - {0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x07,0x46}}; - -static IHTMLDocument2 *notif_doc; -static IDispatchEx *window_dispex; -static BOOL doc_complete; - -static const char *debugstr_w(LPCWSTR str) -{ - static char buf[1024]; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - -static const char *debugstr_guid(REFIID riid) -{ - static char buf[50]; - - sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], - riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], - riid->Data4[5], riid->Data4[6], riid->Data4[7]); - - return buf; -} - -static HRESULT WINAPI PropertyNotifySink_QueryInterface(IPropertyNotifySink *iface, - REFIID riid, void**ppv) -{ - if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) { - *ppv = iface; - return S_OK; - } - - return E_NOINTERFACE; -} - -static ULONG WINAPI PropertyNotifySink_AddRef(IPropertyNotifySink *iface) -{ - return 2; -} - -static ULONG WINAPI PropertyNotifySink_Release(IPropertyNotifySink *iface) -{ - return 1; -} - -static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, DISPID dispID) -{ - if(dispID == DISPID_READYSTATE){ - BSTR state; - HRESULT hres; - - static const WCHAR completeW[] = {'c','o','m','p','l','e','t','e',0}; - - hres = IHTMLDocument2_get_readyState(notif_doc, &state); - ok(hres == S_OK, "get_readyState failed: %08x\n", hres); - - if(!lstrcmpW(state, completeW)) - doc_complete = TRUE; - - SysFreeString(state); - } - - return S_OK; -} - -static HRESULT WINAPI PropertyNotifySink_OnRequestEdit(IPropertyNotifySink *iface, DISPID dispID) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static IPropertyNotifySinkVtbl PropertyNotifySinkVtbl = { - PropertyNotifySink_QueryInterface, - PropertyNotifySink_AddRef, - PropertyNotifySink_Release, - PropertyNotifySink_OnChanged, - PropertyNotifySink_OnRequestEdit -}; - -static IPropertyNotifySink PropertyNotifySink = { &PropertyNotifySinkVtbl }; - -static IHTMLDocument2 *create_document(void) -{ - IHTMLDocument2 *doc; - HRESULT hres; - - hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, - &IID_IHTMLDocument2, (void**)&doc); - ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres); - - return doc; -} - -static IHTMLDocument2 *create_doc_with_string(const char *str) -{ - IPersistStreamInit *init; - IStream *stream; - IHTMLDocument2 *doc; - HGLOBAL mem; - SIZE_T len; - - notif_doc = doc = create_document(); - if(!doc) - return NULL; - - doc_complete = FALSE; - len = strlen(str); - mem = GlobalAlloc(0, len); - memcpy(mem, str, len); - CreateStreamOnHGlobal(mem, TRUE, &stream); - - IHTMLDocument2_QueryInterface(doc, &IID_IPersistStreamInit, (void**)&init); - - IPersistStreamInit_Load(init, stream); - IPersistStreamInit_Release(init); - IStream_Release(stream); - - return doc; -} - -static void do_advise(IUnknown *unk, REFIID riid, IUnknown *unk_advise) -{ - IConnectionPointContainer *container; - IConnectionPoint *cp; - DWORD cookie; - HRESULT hres; - - hres = IUnknown_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container); - ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres); - - hres = IConnectionPointContainer_FindConnectionPoint(container, riid, &cp); - IConnectionPointContainer_Release(container); - ok(hres == S_OK, "FindConnectionPoint failed: %08x\n", hres); - - hres = IConnectionPoint_Advise(cp, unk_advise, &cookie); - IConnectionPoint_Release(cp); - ok(hres == S_OK, "Advise failed: %08x\n", hres); -} - -typedef void (*domtest_t)(IHTMLDocument2*); - -static IHTMLDocument2 *create_and_load_doc(const char *str) -{ - IHTMLDocument2 *doc; - IHTMLElement *body = NULL; - ULONG ref; - MSG msg; - HRESULT hres; - - doc = create_doc_with_string(str); - do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink); - - while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - hres = IHTMLDocument2_get_body(doc, &body); - ok(hres == S_OK, "get_body failed: %08x\n", hres); - - if(!body) { - skip("Could not get document body. Assuming no Gecko installed.\n"); - ref = IHTMLDocument2_Release(doc); - ok(!ref, "ref = %d\n", ref); - return NULL; - } - - IHTMLElement_Release(body); - return doc; -} - -static IActiveScriptSite *site; -static SCRIPTSTATE state; - -static HRESULT WINAPI ObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI ObjectSafety_AddRef(IObjectSafety *iface) -{ - return 2; -} - -static ULONG WINAPI ObjectSafety_Release(IObjectSafety *iface) -{ - return 1; -} - -static HRESULT WINAPI ObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, - DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions) -{ - CHECK_EXPECT(GetInterfaceSafetyOptions); - - ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", debugstr_guid(riid)); - ok(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n"); - ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n"); - - *pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER; - *pdwEnabledOptions = INTERFACE_USES_DISPEX; - - return S_OK; -} - -static HRESULT WINAPI ObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, - DWORD dwOptionSetMask, DWORD dwEnabledOptions) -{ - CHECK_EXPECT(SetInterfaceSafetyOptions); - - ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", debugstr_guid(riid)); - - ok(dwOptionSetMask == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER), - "dwOptionSetMask=%x\n", dwOptionSetMask); - ok(dwEnabledOptions == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER), - "dwEnabledOptions=%x\n", dwOptionSetMask); - - return S_OK; -} - -static const IObjectSafetyVtbl ObjectSafetyVtbl = { - ObjectSafety_QueryInterface, - ObjectSafety_AddRef, - ObjectSafety_Release, - ObjectSafety_GetInterfaceSafetyOptions, - ObjectSafety_SetInterfaceSafetyOptions -}; - -static IObjectSafety ObjectSafety = { &ObjectSafetyVtbl }; - -static HRESULT WINAPI ActiveScriptProperty_QueryInterface(IActiveScriptProperty *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI ActiveScriptProperty_AddRef(IActiveScriptProperty *iface) -{ - return 2; -} - -static ULONG WINAPI ActiveScriptProperty_Release(IActiveScriptProperty *iface) -{ - return 1; -} - -static HRESULT WINAPI ActiveScriptProperty_GetProperty(IActiveScriptProperty *iface, DWORD dwProperty, - VARIANT *pvarIndex, VARIANT *pvarValue) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScriptProperty_SetProperty(IActiveScriptProperty *iface, DWORD dwProperty, - VARIANT *pvarIndex, VARIANT *pvarValue) -{ - CHECK_EXPECT(SetProperty); - - ok(dwProperty == SCRIPTPROP_HACK_TRIDENTEVENTSINK, "unexpected property %d\n", dwProperty); - ok(!pvarIndex, "pvarIndex != NULL\n"); - ok(pvarValue != NULL, "pvarValue == NULL\n"); - ok(V_VT(pvarValue) == VT_BOOL, "V_VT(pvarValue)=%d\n", V_VT(pvarValue)); - ok(V_BOOL(pvarValue) == VARIANT_TRUE, "V_BOOL(pvarValue)=%x\n", V_BOOL(pvarValue)); - - return E_NOTIMPL; -} - -static const IActiveScriptPropertyVtbl ActiveScriptPropertyVtbl = { - ActiveScriptProperty_QueryInterface, - ActiveScriptProperty_AddRef, - ActiveScriptProperty_Release, - ActiveScriptProperty_GetProperty, - ActiveScriptProperty_SetProperty -}; - -static IActiveScriptProperty ActiveScriptProperty = { &ActiveScriptPropertyVtbl }; - -static HRESULT WINAPI ActiveScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI ActiveScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface) -{ - return 2; -} - -static ULONG WINAPI ActiveScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface) -{ - return 1; -} - -static HRESULT WINAPI ActiveScriptParseProcedure_ParseProcedureText(IActiveScriptParseProcedure2 *iface, - LPCOLESTR pstrCode, LPCOLESTR pstrFormalParams, LPCOLESTR pstrProcedureName, - LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter, - DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IActiveScriptParseProcedure2Vtbl ActiveScriptParseProcedureVtbl = { - ActiveScriptParseProcedure_QueryInterface, - ActiveScriptParseProcedure_AddRef, - ActiveScriptParseProcedure_Release, - ActiveScriptParseProcedure_ParseProcedureText -}; - -static IActiveScriptParseProcedure2 ActiveScriptParseProcedure = { &ActiveScriptParseProcedureVtbl }; - -static HRESULT WINAPI ActiveScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI ActiveScriptParse_AddRef(IActiveScriptParse *iface) -{ - return 2; -} - -static ULONG WINAPI ActiveScriptParse_Release(IActiveScriptParse *iface) -{ - return 1; -} - -static HRESULT WINAPI ActiveScriptParse_InitNew(IActiveScriptParse *iface) -{ - CHECK_EXPECT(InitNew); - return S_OK; -} - -static HRESULT WINAPI ActiveScriptParse_AddScriptlet(IActiveScriptParse *iface, - LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName, - LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter, - DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, - BSTR *pbstrName, EXCEPINFO *pexcepinfo) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScriptParse_ParseScriptText(IActiveScriptParse *iface, - LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext, - LPCOLESTR pstrDelimiter, DWORD dwSourceContextCookie, ULONG ulStartingLine, - DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo) -{ - IDispatchEx *document; - IUnknown *unk; - VARIANT var; - DISPPARAMS dp; - EXCEPINFO ei; - DISPID id, named_arg = DISPID_PROPERTYPUT; - BSTR tmp; - HRESULT hres; - - static const WCHAR documentW[] = {'d','o','c','u','m','e','n','t',0}; - static const WCHAR testW[] = {'t','e','s','t',0}; - - CHECK_EXPECT(ParseScriptText); - - SET_EXPECT(GetScriptDispatch); - - tmp = SysAllocString(documentW); - hres = IDispatchEx_GetDispID(window_dispex, tmp, fdexNameCaseSensitive, &id); - SysFreeString(tmp); - ok(hres == S_OK, "GetDispID(document) failed: %08x\n", hres); - ok(id == DISPID_IHTMLWINDOW2_DOCUMENT, "id=%x\n", id); - - todo_wine CHECK_CALLED(GetScriptDispatch); - - VariantInit(&var); - memset(&dp, 0, sizeof(dp)); - memset(&ei, 0, sizeof(ei)); - - hres = IDispatchEx_InvokeEx(window_dispex, id, LOCALE_NEUTRAL, INVOKE_PROPERTYGET, &dp, &var, &ei, NULL); - ok(hres == S_OK, "InvokeEx failed: %08x\n", hres); - ok(V_VT(&var) == VT_DISPATCH, "V_VT(var)=%d\n", V_VT(&var)); - ok(V_DISPATCH(&var) != NULL, "V_DISPATCH(&var) == NULL\n"); - - hres = IDispatch_QueryInterface(V_DISPATCH(&var), &IID_IDispatchEx, (void**)&document); - VariantClear(&var); - ok(hres == S_OK, "Could not get DispatchEx: %08x\n", hres); - - tmp = SysAllocString(testW); - hres = IDispatchEx_GetDispID(document, tmp, fdexNameCaseSensitive, &id); - ok(hres == DISP_E_UNKNOWNNAME, "GetDispID(document) failed: %08x, expected DISP_E_UNKNOWNNAME\n", hres); - hres = IDispatchEx_GetDispID(document, tmp, fdexNameCaseSensitive | fdexNameImplicit, &id); - ok(hres == DISP_E_UNKNOWNNAME, "GetDispID(document) failed: %08x, expected DISP_E_UNKNOWNNAME\n", hres); - SysFreeString(tmp); - - id = 0; - tmp = SysAllocString(testW); - hres = IDispatchEx_GetDispID(document, tmp, fdexNameCaseSensitive|fdexNameEnsure, &id); - SysFreeString(tmp); - ok(hres == S_OK, "GetDispID(document) failed: %08x\n", hres); - ok(id, "id == 0\n"); - - dp.cArgs = 1; - dp.rgvarg = &var; - dp.cNamedArgs = 1; - dp.rgdispidNamedArgs = &named_arg; - V_VT(&var) = VT_I4; - V_I4(&var) = 100; - - hres = IDispatchEx_InvokeEx(document, id, LOCALE_NEUTRAL, INVOKE_PROPERTYPUT, &dp, NULL, &ei, NULL); - ok(hres == S_OK, "InvokeEx failed: %08x\n", hres); - - tmp = SysAllocString(testW); - hres = IDispatchEx_GetDispID(document, tmp, fdexNameCaseSensitive, &id); - SysFreeString(tmp); - ok(hres == S_OK, "GetDispID(document) failed: %08x\n", hres); - - VariantInit(&var); - memset(&dp, 0, sizeof(dp)); - memset(&ei, 0, sizeof(ei)); - hres = IDispatchEx_InvokeEx(document, id, LOCALE_NEUTRAL, INVOKE_PROPERTYGET, &dp, &var, &ei, NULL); - ok(hres == S_OK, "InvokeEx failed: %08x\n", hres); - ok(V_VT(&var) == VT_I4, "V_VT(var)=%d\n", V_VT(&var)); - ok(V_I4(&var) == 100, "V_I4(&var) == NULL\n"); - - IDispatchEx_Release(document); - - unk = (void*)0xdeadbeef; - hres = IDispatchEx_GetNameSpaceParent(window_dispex, &unk); - ok(hres == S_OK, "GetNameSpaceParent failed: %08x\n", hres); - ok(!unk, "unk=%p, expected NULL\n", unk); - - return S_OK; -} - -static const IActiveScriptParseVtbl ActiveScriptParseVtbl = { - ActiveScriptParse_QueryInterface, - ActiveScriptParse_AddRef, - ActiveScriptParse_Release, - ActiveScriptParse_InitNew, - ActiveScriptParse_AddScriptlet, - ActiveScriptParse_ParseScriptText -}; - -static IActiveScriptParse ActiveScriptParse = { &ActiveScriptParseVtbl }; - -static HRESULT WINAPI ActiveScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IActiveScript, riid)) { - *ppv = iface; - return S_OK; - } - - if(IsEqualGUID(&IID_IActiveScriptParse, riid)) { - *ppv = &ActiveScriptParse; - return S_OK; - } - - if(IsEqualGUID(&IID_IActiveScriptParseProcedure2, riid)) { - *ppv = &ActiveScriptParseProcedure; - return S_OK; - } - - if(IsEqualGUID(&IID_IActiveScriptProperty, riid)) { - *ppv = &ActiveScriptProperty; - return S_OK; - } - - if(IsEqualGUID(&IID_IObjectSafety, riid)) { - *ppv = &ObjectSafety; - return S_OK; - } - - ok(0, "unexpected riid %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -static ULONG WINAPI ActiveScript_AddRef(IActiveScript *iface) -{ - return 2; -} - -static ULONG WINAPI ActiveScript_Release(IActiveScript *iface) -{ - return 1; -} - -static HRESULT WINAPI ActiveScript_SetScriptSite(IActiveScript *iface, IActiveScriptSite *pass) -{ - IActiveScriptSiteInterruptPoll *poll; - IActiveScriptSiteDebug *debug; - LCID lcid; - HRESULT hres; - - CHECK_EXPECT(SetScriptSite); - - ok(pass != NULL, "pass == NULL\n"); - - hres = IActiveScriptSite_QueryInterface(pass, &IID_IActiveScriptSiteInterruptPoll, (void**)&poll); - ok(hres == S_OK, "Could not get IActiveScriptSiteInterruptPoll interface: %08x\n", hres); - if(FAILED(hres)) - IActiveScriptSiteInterruptPoll_Release(poll); - - hres = IActiveScriptSite_GetLCID(pass, &lcid); - ok(hres == S_OK, "GetLCID failed: %08x\n", hres); - - hres = IActiveScriptSite_OnStateChange(pass, (state = SCRIPTSTATE_INITIALIZED)); - ok(hres == S_OK, "OnStateChange failed: %08x\n", hres); - - hres = IActiveScriptSite_QueryInterface(pass, &IID_IActiveScriptSiteDebug, (void**)&debug); - ok(hres == S_OK, "Could not get IActiveScriptSiteDebug interface: %08x\n", hres); - if(SUCCEEDED(hres)) - IActiveScriptSiteDebug32_Release(debug); - - site = pass; - IActiveScriptSite_AddRef(site); - return S_OK; -} - -static HRESULT WINAPI ActiveScript_GetScriptSite(IActiveScript *iface, REFIID riid, - void **ppvObject) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss) -{ - HRESULT hres; - - switch(ss) { - case SCRIPTSTATE_STARTED: - CHECK_EXPECT(SetScriptState_STARTED); - break; - case SCRIPTSTATE_CONNECTED: - CHECK_EXPECT(SetScriptState_CONNECTED); - break; - case SCRIPTSTATE_DISCONNECTED: - CHECK_EXPECT(SetScriptState_DISCONNECTED); - break; - default: - ok(0, "unexpected state %d\n", ss); - return E_NOTIMPL; - } - - hres = IActiveScriptSite_OnStateChange(site, (state = ss)); - return S_OK; -} - -static HRESULT WINAPI ActiveScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState) -{ - CHECK_EXPECT(GetScriptState); - - *pssState = state; - return S_OK; -} - -static HRESULT WINAPI ActiveScript_Close(IActiveScript *iface) -{ - CHECK_EXPECT(Close); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScript_AddNamedItem(IActiveScript *iface, - LPCOLESTR pstrName, DWORD dwFlags) -{ - IDispatch *disp; - IUnknown *unk = NULL, *unk2; - HRESULT hres; - - static const WCHAR windowW[] = {'w','i','n','d','o','w',0}; - - static const IID unknown_iid = {0x719C3050,0xF9D3,0x11CF,{0xA4,0x93,0x00,0x40,0x05,0x23,0xA8,0xA0}}; - - CHECK_EXPECT(AddNamedItem); - - ok(!lstrcmpW(pstrName, windowW), "pstrName=%s\n", debugstr_w(pstrName)); - ok(dwFlags == (SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS), "dwFlags=%x\n", dwFlags); - - hres = IActiveScriptSite_GetItemInfo(site, windowW, SCRIPTINFO_IUNKNOWN, &unk, NULL); - ok(hres == S_OK, "GetItemInfo failed: %08x\n", hres); - ok(unk != NULL, "unk == NULL\n"); - - hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&disp); - ok(hres == S_OK, "Could not get IDispatch interface: %08x\n", hres); - if(SUCCEEDED(hres)) - IDispatch_Release(disp); - - hres = IUnknown_QueryInterface(unk, &unknown_iid, (void**)&unk2); - ok(hres == E_NOINTERFACE, "Got ?? interface: %p\n", unk2); - if(SUCCEEDED(hres)) - IUnknown_Release(unk2); - - hres = IUnknown_QueryInterface(unk, &IID_IDispatchEx, (void**)&window_dispex); - ok(hres == S_OK, "Could not get IDispatchEx interface: %08x\n", hres); - - IUnknown_Release(unk); - return S_OK; -} - -static HRESULT WINAPI ActiveScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib, - DWORD dwMajor, DWORD dwMinor, DWORD dwFlags) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName, - IDispatch **ppdisp) -{ - CHECK_EXPECT(GetScriptDispatch); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScript_GetCurrentScriptThreadID(IActiveScript *iface, - SCRIPTTHREADID *pstridThread) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScript_GetScriptThreadID(IActiveScript *iface, - DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScript_GetScriptThreadState(IActiveScript *iface, - SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScript_InterruptScriptThread(IActiveScript *iface, - SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI ActiveScript_Clone(IActiveScript *iface, IActiveScript **ppscript) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IActiveScriptVtbl ActiveScriptVtbl = { - ActiveScript_QueryInterface, - ActiveScript_AddRef, - ActiveScript_Release, - ActiveScript_SetScriptSite, - ActiveScript_GetScriptSite, - ActiveScript_SetScriptState, - ActiveScript_GetScriptState, - ActiveScript_Close, - ActiveScript_AddNamedItem, - ActiveScript_AddTypeLib, - ActiveScript_GetScriptDispatch, - ActiveScript_GetCurrentScriptThreadID, - ActiveScript_GetScriptThreadID, - ActiveScript_GetScriptThreadState, - ActiveScript_InterruptScriptThread, - ActiveScript_Clone -}; - -static IActiveScript ActiveScript = { &ActiveScriptVtbl }; - -static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IClassFactory, riid)) { - *ppv = iface; - return S_OK; - } - - if(IsEqualGUID(&IID_IMarshal, riid)) - return E_NOINTERFACE; - if(IsEqualGUID(&CLSID_IdentityUnmarshal, riid)) - return E_NOINTERFACE; - - ok(0, "unexpected riid %s\n", debugstr_guid(riid)); - return E_NOTIMPL; -} - -static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) -{ - return 2; -} - -static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) -{ - return 1; -} - -static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) -{ - CHECK_EXPECT(CreateInstance); - - ok(!outer, "outer = %p\n", outer); - ok(IsEqualGUID(&IID_IActiveScript, riid), "unexpected riid %s\n", debugstr_guid(riid)); - *ppv = &ActiveScript; - return S_OK; -} - -static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock) -{ - ok(0, "unexpected call\n"); - return S_OK; -} - -static const IClassFactoryVtbl ClassFactoryVtbl = { - ClassFactory_QueryInterface, - ClassFactory_AddRef, - ClassFactory_Release, - ClassFactory_CreateInstance, - ClassFactory_LockServer -}; - -static IClassFactory script_cf = { &ClassFactoryVtbl }; - -static const char simple_script_str[] = - "" - "" - ""; - -static void test_simple_script(void) -{ - IHTMLDocument2 *doc; - - SET_EXPECT(CreateInstance); - SET_EXPECT(GetInterfaceSafetyOptions); - SET_EXPECT(SetInterfaceSafetyOptions); - SET_EXPECT(SetProperty); - SET_EXPECT(InitNew); - SET_EXPECT(SetScriptSite); - SET_EXPECT(GetScriptState); - SET_EXPECT(SetScriptState_STARTED); - SET_EXPECT(AddNamedItem); - SET_EXPECT(ParseScriptText); - SET_EXPECT(SetScriptState_CONNECTED); - - doc = create_and_load_doc(simple_script_str); - if(!doc) return; - - CHECK_CALLED(CreateInstance); - CHECK_CALLED(GetInterfaceSafetyOptions); - CHECK_CALLED(SetInterfaceSafetyOptions); - CHECK_CALLED(SetProperty); - CHECK_CALLED(InitNew); - CHECK_CALLED(SetScriptSite); - CHECK_CALLED(GetScriptState); - CHECK_CALLED(SetScriptState_STARTED); - CHECK_CALLED(AddNamedItem); - CHECK_CALLED(ParseScriptText); - CHECK_CALLED(SetScriptState_CONNECTED); - - if(site) - IActiveScriptSite_Release(site); - if(window_dispex) - IDispatchEx_Release(window_dispex); - - SET_EXPECT(SetScriptState_DISCONNECTED); - SET_EXPECT(Close); - - IHTMLDocument2_Release(doc); - - CHECK_CALLED(SetScriptState_DISCONNECTED); - CHECK_CALLED(Close); -} - -static BOOL init_key(const char *key_name, const char *def_value, BOOL init) -{ - HKEY hkey; - DWORD res; - - if(!init) { - RegDeleteKey(HKEY_CLASSES_ROOT, key_name); - return TRUE; - } - - res = RegCreateKeyA(HKEY_CLASSES_ROOT, key_name, &hkey); - if(res != ERROR_SUCCESS) - return FALSE; - - if(def_value) - res = RegSetValueA(hkey, NULL, REG_SZ, def_value, strlen(def_value)); - - RegCloseKey(hkey); - - return res == ERROR_SUCCESS; -} - -static BOOL init_registry(BOOL init) -{ - return init_key("TestScript\\CLSID", TESTSCRIPT_CLSID, init) - && init_key("CLSID\\"TESTSCRIPT_CLSID"\\Implemented Categories\\{F0B7A1A1-9847-11CF-8F20-00805F2CD064}", - NULL, init) - && init_key("CLSID\\"TESTSCRIPT_CLSID"\\Implemented Categories\\{F0B7A1A2-9847-11CF-8F20-00805F2CD064}", - NULL, init); -} - -static BOOL register_script_engine(void) -{ - DWORD regid; - HRESULT hres; - - if(!init_registry(TRUE)) { - init_registry(FALSE); - return FALSE; - } - - hres = CoRegisterClassObject(&CLSID_TestScript, (IUnknown *)&script_cf, - CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®id); - ok(hres == S_OK, "Could not register screipt engine: %08x\n", hres); - - return TRUE; -} - -static void gecko_installer_workaround(BOOL disable) -{ - HKEY hkey; - DWORD res; - - static BOOL has_url = FALSE; - static char url[2048]; - - if(!disable && !has_url) - return; - - res = RegOpenKey(HKEY_CURRENT_USER, "Software\\Wine\\MSHTML", &hkey); - if(res != ERROR_SUCCESS) - return; - - if(disable) { - DWORD type, size = sizeof(url); - - res = RegQueryValueEx(hkey, "GeckoUrl", NULL, &type, (PVOID)url, &size); - if(res == ERROR_SUCCESS && type == REG_SZ) - has_url = TRUE; - - RegDeleteValue(hkey, "GeckoUrl"); - }else { - RegSetValueEx(hkey, "GeckoUrl", 0, REG_SZ, (PVOID)url, lstrlenA(url)+1); - } - - RegCloseKey(hkey); -} - -START_TEST(script) -{ - gecko_installer_workaround(TRUE); - CoInitialize(NULL); - - if(register_script_engine()) { - test_simple_script(); - init_registry(FALSE); - }else { - skip("Could not register TestScript engine\n"); - } - - CoUninitialize(); - gecko_installer_workaround(FALSE); -} diff --git a/rostests/winetests/mshtml/testlist.c b/rostests/winetests/mshtml/testlist.c deleted file mode 100644 index 6039fe93ed2..00000000000 --- a/rostests/winetests/mshtml/testlist.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_dom(void); -extern void func_htmldoc(void); -extern void func_misc(void); -extern void func_protocol(void); -extern void func_script(void); - -const struct test winetest_testlist[] = -{ - { "dom", func_dom }, - { "htmldoc", func_htmldoc }, - { "misc", func_misc }, - { "protocol", func_protocol }, - { "script", func_script }, - { 0, 0 } -}; diff --git a/rostests/winetests/msi/automation.c b/rostests/winetests/msi/automation.c deleted file mode 100644 index 68b0f75c25c..00000000000 --- a/rostests/winetests/msi/automation.c +++ /dev/null @@ -1,2494 +0,0 @@ -/* - * Copyright (C) 2007 Mike McCormack for CodeWeavers - * Copyright (C) 2007 Misha Koshelev - * - * A test program for Microsoft Installer OLE automation functionality. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 - -#include - -#include -#include -#include -#include -#include - -#include "wine/test.h" - -static const char *msifile = "winetest.msi"; -static const WCHAR szMsifile[] = {'w','i','n','e','t','e','s','t','.','m','s','i',0}; -static const WCHAR szMSITEST[] = { 'M','S','I','T','E','S','T',0 }; -static const WCHAR szProductCode[] = { '{','F','1','C','3','A','F','5','0','-','8','B','5','6','-','4','A','6','9','-','A','0','0','C','-','0','0','7','7','3','F','E','4','2','F','3','0','}',0 }; -static const WCHAR szUpgradeCode[] = { '{','C','E','0','6','7','E','8','D','-','2','E','1','A','-','4','3','6','7','-','B','7','3','4','-','4','E','B','2','B','D','A','D','6','5','6','5','}',0 }; -static const WCHAR szProductInfoException[] = { 'P','r','o','d','u','c','t','I','n','f','o',',','P','r','o','d','u','c','t',',','A','t','t','r','i','b','u','t','e',0 }; -static const WCHAR WINE_INSTALLPROPERTY_PACKAGENAMEW[] = {'P','a','c','k','a','g','e','N','a','m','e',0}; -static const WCHAR WINE_INSTALLPROPERTY_PRODUCTNAMEW[] = {'P','r','o','d','u','c','t','N','a','m','e',0}; -static FILETIME systemtime; -static CHAR CURR_DIR[MAX_PATH]; -static EXCEPINFO excepinfo; - -/* - * OLE automation data - **/ -static const WCHAR szProgId[] = { 'W','i','n','d','o','w','s','I','n','s','t','a','l','l','e','r','.','I','n','s','t','a','l','l','e','r',0 }; -static IDispatch *pInstaller; - -/* msi database data */ - -static const CHAR component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "Five\t{8CC92E9D-14B2-4CA4-B2AA-B11D02078087}\tNEWDIR\t2\t\tfive.txt\n" - "Four\t{FD37B4EA-7209-45C0-8917-535F35A2F080}\tCABOUTDIR\t2\t\tfour.txt\n" - "One\t{783B242E-E185-4A56-AF86-C09815EC053C}\tMSITESTDIR\t2\t\tone.txt\n" - "Three\t{010B6ADD-B27D-4EDD-9B3D-34C4F7D61684}\tCHANGEDDIR\t2\t\tthree.txt\n" - "Two\t{BF03D1A6-20DA-4A65-82F3-6CAC995915CE}\tFIRSTDIR\t2\t\ttwo.txt\n" - "dangler\t{6091DF25-EF96-45F1-B8E9-A9B1420C7A3C}\tTARGETDIR\t4\t\tregdata\n" - "component\t\tMSITESTDIR\t0\t1\tfile\n" - "service_comp\t\tMSITESTDIR\t0\t1\tservice_file"; - -static const CHAR directory_dat[] = "Directory\tDirectory_Parent\tDefaultDir\n" - "s72\tS72\tl255\n" - "Directory\tDirectory\n" - "CABOUTDIR\tMSITESTDIR\tcabout\n" - "CHANGEDDIR\tMSITESTDIR\tchanged:second\n" - "FIRSTDIR\tMSITESTDIR\tfirst\n" - "MSITESTDIR\tProgramFilesFolder\tmsitest\n" - "NEWDIR\tCABOUTDIR\tnew\n" - "ProgramFilesFolder\tTARGETDIR\t.\n" - "TARGETDIR\t\tSourceDir"; - -static const CHAR feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n" - "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n" - "Feature\tFeature\n" - "Five\t\tFive\tThe Five Feature\t5\t3\tNEWDIR\t0\n" - "Four\t\tFour\tThe Four Feature\t4\t3\tCABOUTDIR\t0\n" - "One\t\tOne\tThe One Feature\t1\t3\tMSITESTDIR\t0\n" - "Three\tOne\tThree\tThe Three Feature\t3\t3\tCHANGEDDIR\t0\n" - "Two\tOne\tTwo\tThe Two Feature\t2\t3\tFIRSTDIR\t0\n" - "feature\t\t\t\t2\t1\tTARGETDIR\t0\n" - "service_feature\t\t\t\t2\t1\tTARGETDIR\t0"; - -static const CHAR feature_comp_dat[] = "Feature_\tComponent_\n" - "s38\ts72\n" - "FeatureComponents\tFeature_\tComponent_\n" - "Five\tFive\n" - "Four\tFour\n" - "One\tOne\n" - "Three\tThree\n" - "Two\tTwo\n" - "feature\tcomponent\n" - "service_feature\tservice_comp\n"; - -static const CHAR file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "five.txt\tFive\tfive.txt\t1000\t\t\t0\t5\n" - "four.txt\tFour\tfour.txt\t1000\t\t\t0\t4\n" - "one.txt\tOne\tone.txt\t1000\t\t\t0\t1\n" - "three.txt\tThree\tthree.txt\t1000\t\t\t0\t3\n" - "two.txt\tTwo\ttwo.txt\t1000\t\t\t0\t2\n" - "file\tcomponent\tfilename\t100\t\t\t8192\t1\n" - "service_file\tservice_comp\tservice.exe\t100\t\t\t8192\t1"; - -static const CHAR install_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallExecuteSequence\tAction\n" - "AllocateRegistrySpace\tNOT Installed\t1550\n" - "CostFinalize\t\t1000\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "InstallFiles\t\t4000\n" - "InstallServices\t\t5000\n" - "RegisterProduct\t\t6100\n" - "PublishProduct\t\t6400\n" - "InstallFinalize\t\t6600\n" - "InstallInitialize\t\t1500\n" - "InstallValidate\t\t1400\n" - "LaunchConditions\t\t100\n" - "WriteRegistryValues\tSourceDir And SOURCEDIR\t5000"; - -static const CHAR media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t5\t\t\tDISK1\t\n"; - -static const CHAR property_dat[] = "Property\tValue\n" - "s72\tl0\n" - "Property\tProperty\n" - "DefaultUIFont\tDlgFont8\n" - "HASUIRUN\t0\n" - "INSTALLLEVEL\t3\n" - "InstallMode\tTypical\n" - "Manufacturer\tWine\n" - "PIDTemplate\t12345<###-%%%%%%%>@@@@@\n" - "ProductCode\t{F1C3AF50-8B56-4A69-A00C-00773FE42F30}\n" - "ProductID\tnone\n" - "ProductLanguage\t1033\n" - "ProductName\tMSITEST\n" - "ProductVersion\t1.1.1\n" - "PROMPTROLLBACKCOST\tP\n" - "Setup\tSetup\n" - "UpgradeCode\t{CE067E8D-2E1A-4367-B734-4EB2BDAD6565}"; - -static const CHAR registry_dat[] = "Registry\tRoot\tKey\tName\tValue\tComponent_\n" - "s72\ti2\tl255\tL255\tL0\ts72\n" - "Registry\tRegistry\n" - "Apples\t2\tSOFTWARE\\Wine\\msitest\tName\timaname\tOne\n" - "Oranges\t2\tSOFTWARE\\Wine\\msitest\tnumber\t#314\tTwo\n" - "regdata\t2\tSOFTWARE\\Wine\\msitest\tblah\tbad\tdangler\n" - "OrderTest\t2\tSOFTWARE\\Wine\\msitest\tOrderTestName\tOrderTestValue\tcomponent"; - -static const CHAR service_install_dat[] = "ServiceInstall\tName\tDisplayName\tServiceType\tStartType\tErrorControl\t" - "LoadOrderGroup\tDependencies\tStartName\tPassword\tArguments\tComponent_\tDescription\n" - "s72\ts255\tL255\ti4\ti4\ti4\tS255\tS255\tS255\tS255\tS255\ts72\tL255\n" - "ServiceInstall\tServiceInstall\n" - "TestService\tTestService\tTestService\t2\t3\t0\t\t\tTestService\t\t\tservice_comp\t\t"; - -static const CHAR service_control_dat[] = "ServiceControl\tName\tEvent\tArguments\tWait\tComponent_\n" - "s72\tl255\ti2\tL255\tI2\ts72\n" - "ServiceControl\tServiceControl\n" - "ServiceControl\tTestService\t8\t\t0\tservice_comp"; - -typedef struct _msi_table -{ - const CHAR *filename; - const CHAR *data; - int size; -} msi_table; - -#define ADD_TABLE(x) {#x".idt", x##_dat, sizeof(x##_dat)} - -static const msi_table tables[] = -{ - ADD_TABLE(component), - ADD_TABLE(directory), - ADD_TABLE(feature), - ADD_TABLE(feature_comp), - ADD_TABLE(file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(media), - ADD_TABLE(property), - ADD_TABLE(registry), - ADD_TABLE(service_install), - ADD_TABLE(service_control) -}; - -typedef struct _msi_summary_info -{ - UINT property; - UINT datatype; - INT iValue; - FILETIME *pftValue; - const CHAR *szValue; -} msi_summary_info; - -#define ADD_INFO_I2(property, iValue) {property, VT_I2, iValue, NULL, NULL} -#define ADD_INFO_I4(property, iValue) {property, VT_I4, iValue, NULL, NULL} -#define ADD_INFO_LPSTR(property, szValue) {property, VT_LPSTR, 0, NULL, szValue} -#define ADD_INFO_FILETIME(property, pftValue) {property, VT_FILETIME, 0, pftValue, NULL} - -static const msi_summary_info summary_info[] = -{ - ADD_INFO_LPSTR(PID_TEMPLATE, ";1033"), - ADD_INFO_LPSTR(PID_REVNUMBER, "{004757CA-5092-49c2-AD20-28E1CE0DF5F2}"), - ADD_INFO_I4(PID_PAGECOUNT, 100), - ADD_INFO_I4(PID_WORDCOUNT, 0), - ADD_INFO_FILETIME(PID_CREATE_DTM, &systemtime), - ADD_INFO_FILETIME(PID_LASTPRINTED, &systemtime) -}; - -/* - * Database Helpers - */ - -static void write_file(const CHAR *filename, const char *data, int data_size) -{ - DWORD size; - - HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - WriteFile(hf, data, data_size, &size, NULL); - CloseHandle(hf); -} - -static void write_msi_summary_info(MSIHANDLE db, const msi_summary_info *info, int num_info) -{ - MSIHANDLE summary; - UINT r; - int j; - - r = MsiGetSummaryInformationA(db, NULL, num_info, &summary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - /* import summary information into the stream */ - for (j = 0; j < num_info; j++) - { - const msi_summary_info *entry = &info[j]; - - r = MsiSummaryInfoSetPropertyA(summary, entry->property, entry->datatype, - entry->iValue, entry->pftValue, entry->szValue); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - } - - /* write the summary changes back to the stream */ - r = MsiSummaryInfoPersist(summary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - MsiCloseHandle(summary); -} - -static void create_database(const CHAR *name, const msi_table *tables, int num_tables, - const msi_summary_info *info, int num_info) -{ - MSIHANDLE db; - UINT r; - int j; - - r = MsiOpenDatabaseA(name, MSIDBOPEN_CREATE, &db); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - /* import the tables into the database */ - for (j = 0; j < num_tables; j++) - { - const msi_table *table = &tables[j]; - - write_file(table->filename, table->data, (table->size - 1) * sizeof(char)); - - r = MsiDatabaseImportA(db, CURR_DIR, table->filename); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - DeleteFileA(table->filename); - } - - write_msi_summary_info(db, info, num_info); - - r = MsiDatabaseCommit(db); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - MsiCloseHandle(db); -} - -/* - * Installation helpers - */ - -static char PROG_FILES_DIR[MAX_PATH]; - -static BOOL get_program_files_dir(LPSTR buf) -{ - HKEY hkey; - DWORD type = REG_EXPAND_SZ, size; - - if (RegOpenKey(HKEY_LOCAL_MACHINE, - "Software\\Microsoft\\Windows\\CurrentVersion", &hkey)) - return FALSE; - - size = MAX_PATH; - if (RegQueryValueEx(hkey, "ProgramFilesDir", 0, &type, (LPBYTE)buf, &size)) - return FALSE; - - RegCloseKey(hkey); - return TRUE; -} - -static void create_file(const CHAR *name, DWORD size) -{ - HANDLE file; - DWORD written, left; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - - left = size - lstrlen(name) - 1; - - SetFilePointer(file, left, NULL, FILE_CURRENT); - SetEndOfFile(file); - - CloseHandle(file); -} - -static void create_test_files(void) -{ - CreateDirectoryA("msitest", NULL); - create_file("msitest\\one.txt", 100); - CreateDirectoryA("msitest\\first", NULL); - create_file("msitest\\first\\two.txt", 100); - CreateDirectoryA("msitest\\second", NULL); - create_file("msitest\\second\\three.txt", 100); - CreateDirectoryA("msitest\\cabout",NULL); - create_file("msitest\\cabout\\four.txt", 100); - CreateDirectoryA("msitest\\cabout\\new",NULL); - create_file("msitest\\cabout\\new\\five.txt", 100); - create_file("msitest\\filename", 100); - create_file("msitest\\service.exe", 100); -} - -static BOOL delete_pf(const CHAR *rel_path, BOOL is_file) -{ - CHAR path[MAX_PATH]; - - lstrcpyA(path, PROG_FILES_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, rel_path); - - if (is_file) - return DeleteFileA(path); - else - return RemoveDirectoryA(path); -} - -static void delete_test_files(void) -{ - DeleteFileA(msifile); - DeleteFileA("msitest\\cabout\\new\\five.txt"); - DeleteFileA("msitest\\cabout\\four.txt"); - DeleteFileA("msitest\\second\\three.txt"); - DeleteFileA("msitest\\first\\two.txt"); - DeleteFileA("msitest\\one.txt"); - DeleteFileA("msitest\\service.exe"); - DeleteFileA("msitest\\filename"); - RemoveDirectoryA("msitest\\cabout\\new"); - RemoveDirectoryA("msitest\\cabout"); - RemoveDirectoryA("msitest\\second"); - RemoveDirectoryA("msitest\\first"); - RemoveDirectoryA("msitest"); -} - -static void check_service_is_installed(void) -{ - SC_HANDLE scm, service; - BOOL res; - - scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - ok(scm != NULL, "Failed to open the SC Manager\n"); - - service = OpenService(scm, "TestService", SC_MANAGER_ALL_ACCESS); - ok(service != NULL, "Failed to open TestService\n"); - - res = DeleteService(service); - ok(res, "Failed to delete TestService\n"); - - CloseServiceHandle(service); - CloseServiceHandle(scm); -} - -/* - * Automation helpers and tests - */ - -/* ok-like statement which takes two unicode strings or one unicode and one ANSI string as arguments */ -static CHAR string1[MAX_PATH], string2[MAX_PATH]; - -#define ok_w2(format, szString1, szString2) \ -\ - if (lstrcmpW(szString1, szString2) != 0) \ - { \ - WideCharToMultiByte(CP_ACP, 0, szString1, -1, string1, MAX_PATH, NULL, NULL); \ - WideCharToMultiByte(CP_ACP, 0, szString2, -1, string2, MAX_PATH, NULL, NULL); \ - ok(0, format, string1, string2); \ - } - -#define ok_aw(format, aString, wString) \ -\ - WideCharToMultiByte(CP_ACP, 0, wString, -1, string1, MAX_PATH, NULL, NULL); \ - if (lstrcmpA(string1, aString) != 0) \ - ok(0, format, string1, aString); \ - -#define ok_awplus(format, extra, aString, wString) \ -\ - WideCharToMultiByte(CP_ACP, 0, wString, -1, string1, MAX_PATH, NULL, NULL); \ - if (lstrcmpA(string1, aString) != 0) \ - ok(0, format, extra, string1, aString); \ - -/* exception checker */ -static WCHAR szSource[] = {'M','s','i',' ','A','P','I',' ','E','r','r','o','r',0}; - -#define ok_exception(hr, szDescription) \ - if (hr == DISP_E_EXCEPTION) \ - { \ - /* Compare wtype, source, and destination */ \ - ok(excepinfo.wCode == 1000, "Exception info was %d, expected 1000\n", excepinfo.wCode); \ -\ - ok(excepinfo.bstrSource != NULL, "Exception source was NULL\n"); \ - if (excepinfo.bstrSource) \ - ok_w2("Exception source was \"%s\" but expected to be \"%s\"\n", excepinfo.bstrSource, szSource); \ -\ - ok(excepinfo.bstrDescription != NULL, "Exception description was NULL\n"); \ - if (excepinfo.bstrDescription) \ - ok_w2("Exception description was \"%s\" but expected to be \"%s\"\n", excepinfo.bstrDescription, szDescription); \ -\ - SysFreeString(excepinfo.bstrSource); \ - SysFreeString(excepinfo.bstrDescription); \ - SysFreeString(excepinfo.bstrHelpFile); \ - } - -static DISPID get_dispid( IDispatch *disp, const char *name ) -{ - LPOLESTR str; - UINT len; - DISPID id = -1; - HRESULT r; - - len = MultiByteToWideChar(CP_ACP, 0, name, -1, NULL, 0 ); - str = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR) ); - if (str) - { - len = MultiByteToWideChar(CP_ACP, 0, name, -1, str, len ); - r = IDispatch_GetIDsOfNames( disp, &IID_NULL, &str, 1, 0, &id ); - HeapFree(GetProcessHeap(), 0, str); - if (r != S_OK) - return -1; - } - - return id; -} - -static void test_dispid(void) -{ - DISPID dispid; - - dispid = get_dispid(pInstaller, "CreateRecord"); - ok(dispid == 1, "Expected 1, got %d\n", dispid); - dispid = get_dispid(pInstaller, "OpenPackage"); - ok(dispid == 2, "Expected 2, got %d\n", dispid); - dispid = get_dispid(pInstaller, "OpenDatabase"); - ok(dispid == 4, "Expected 4, got %d\n", dispid); - dispid = get_dispid( pInstaller, "UILevel" ); - ok(dispid == 6, "Expected 6, got %d\n", dispid); - dispid = get_dispid(pInstaller, "InstallProduct"); - ok(dispid == 8, "Expected 8, got %d\n", dispid); - dispid = get_dispid(pInstaller, "Version"); - ok(dispid == 9, "Expected 9, got %d\n", dispid); - dispid = get_dispid(pInstaller, "RegistryValue"); - ok(dispid == 11, "Expected 11, got %d\n", dispid); - todo_wine - { - dispid = get_dispid(pInstaller, "OpenProduct"); - ok(dispid == 3, "Expected 3, got %d\n", dispid); - dispid = get_dispid(pInstaller, "SummaryInformation"); - ok(dispid == 5, "Expected 5, got %d\n", dispid); - dispid = get_dispid(pInstaller, "EnableLog"); - ok(dispid == 7, "Expected 7, got %d\n", dispid); - dispid = get_dispid(pInstaller, "LastErrorRecord"); - ok(dispid == 10, "Expected 10, got %d\n", dispid); - dispid = get_dispid(pInstaller, "Environment"); - ok(dispid == 12, "Expected 12, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FileAttributes"); - ok(dispid == 13, "Expected 13, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FileSize"); - ok(dispid == 15, "Expected 15, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FileVersion"); - ok(dispid == 16, "Expected 16, got %d\n", dispid); - } - dispid = get_dispid(pInstaller, "ProductState"); - ok(dispid == 17, "Expected 17, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ProductInfo"); - ok(dispid == 18, "Expected 18, got %d\n", dispid); - todo_wine - { - dispid = get_dispid(pInstaller, "ConfigureProduct"); - ok(dispid == 19, "Expected 19, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ReinstallProduct"); - ok(dispid == 20 , "Expected 20, got %d\n", dispid); - dispid = get_dispid(pInstaller, "CollectUserInfo"); - ok(dispid == 21, "Expected 21, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ApplyPatch"); - ok(dispid == 22, "Expected 22, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FeatureParent"); - ok(dispid == 23, "Expected 23, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FeatureState"); - ok(dispid == 24, "Expected 24, got %d\n", dispid); - dispid = get_dispid(pInstaller, "UseFeature"); - ok(dispid == 25, "Expected 25, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FeatureUsageCount"); - ok(dispid == 26, "Expected 26, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FeatureUsageDate"); - ok(dispid == 27, "Expected 27, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ConfigureFeature"); - ok(dispid == 28, "Expected 28, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ReinstallFeature"); - ok(dispid == 29, "Expected 29, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ProvideComponent"); - ok(dispid == 30, "Expected 30, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ComponentPath"); - ok(dispid == 31, "Expected 31, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ProvideQualifiedComponent"); - ok(dispid == 32, "Expected 32, got %d\n", dispid); - dispid = get_dispid(pInstaller, "QualifierDescription"); - ok(dispid == 33, "Expected 33, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ComponentQualifiers"); - ok(dispid == 34, "Expected 34, got %d\n", dispid); - } - dispid = get_dispid(pInstaller, "Products"); - ok(dispid == 35, "Expected 35, got %d\n", dispid); - todo_wine - { - dispid = get_dispid(pInstaller, "Features"); - ok(dispid == 36, "Expected 36, got %d\n", dispid); - dispid = get_dispid(pInstaller, "Components"); - ok(dispid == 37, "Expected 37, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ComponentClients"); - ok(dispid == 38, "Expected 38, got %d\n", dispid); - dispid = get_dispid(pInstaller, "Patches"); - ok(dispid == 39, "Expected 39, got %d\n", dispid); - } - dispid = get_dispid(pInstaller, "RelatedProducts"); - ok(dispid == 40, "Expected 40, got %d\n", dispid); - todo_wine - { - dispid = get_dispid(pInstaller, "PatchInfo"); - ok(dispid == 41, "Expected 41, got %d\n", dispid); - dispid = get_dispid(pInstaller, "PatchTransforms"); - ok(dispid == 42, "Expected 42, got %d\n", dispid); - dispid = get_dispid(pInstaller, "AddSource"); - ok(dispid == 43, "Expected 43, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ClearSourceList"); - ok(dispid == 44, "Expected 44, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ForceSourceListResolution"); - ok(dispid == 45, "Expected 45, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ShortcutTarget"); - ok(dispid == 46, "Expected 46, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FileHash"); - ok(dispid == 47, "Expected 47, got %d\n", dispid); - dispid = get_dispid(pInstaller, "FileSignatureInfo"); - ok(dispid == 48, "Expected 48, got %d\n", dispid); - } - dispid = get_dispid(pInstaller, "RemovePatches"); - ok(dispid == 49 || dispid == -1, "Expected 49 or -1, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ApplyMultiplePatches"); - ok(dispid == 51 || dispid == -1, "Expected 51 or -1, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ProductsEx"); - ok(dispid == 52 || dispid == -1, "Expected 52 or -1, got %d\n", dispid); - dispid = get_dispid(pInstaller, "PatchesEx"); - ok(dispid == 55 || dispid == -1, "Expected 55 or -1, got %d\n", dispid); - dispid = get_dispid(pInstaller, "ExtractPatchXMLData"); - ok(dispid == 57 || dispid == -1, "Expected 57 or -1, got %d\n", dispid); - dispid = get_dispid( pInstaller, "ProductElevated" ); - ok(dispid == 59 || dispid == -1, "Expected 59 or -1, got %d\n", dispid); - dispid = get_dispid( pInstaller, "ProvideAssembly" ); - ok(dispid == 60 || dispid == -1, "Expected 60 or -1, got %d\n", dispid); - dispid = get_dispid( pInstaller, "ProductInfoFromScript" ); - ok(dispid == 61 || dispid == -1, "Expected 61 or -1, got %d\n", dispid); - dispid = get_dispid( pInstaller, "AdvertiseProduct" ); - ok(dispid == 62 || dispid == -1, "Expected 62 or -1, got %d\n", dispid); - dispid = get_dispid( pInstaller, "CreateAdvertiseScript" ); - ok(dispid == 63 || dispid == -1, "Expected 63 or -1, got %d\n", dispid); - dispid = get_dispid( pInstaller, "PatchFiles" ); - ok(dispid == 65 || dispid == -1, "Expected 65 or -1, got %d\n", dispid); -} - -/* Test basic IDispatch functions */ -static void test_dispatch(void) -{ - static WCHAR szOpenPackage[] = { 'O','p','e','n','P','a','c','k','a','g','e',0 }; - static WCHAR szOpenPackageException[] = {'O','p','e','n','P','a','c','k','a','g','e',',','P','a','c','k','a','g','e','P','a','t','h',',','O','p','t','i','o','n','s',0}; - static WCHAR szProductState[] = { 'P','r','o','d','u','c','t','S','t','a','t','e',0 }; - HRESULT hr; - DISPID dispid; - OLECHAR *name; - VARIANT varresult; - VARIANTARG vararg[2]; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - - /* Test getting ID of a function name that does not exist */ - name = (WCHAR *)szMsifile; - hr = IDispatch_GetIDsOfNames(pInstaller, &IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &dispid); - ok(hr == DISP_E_UNKNOWNNAME, "IDispatch::GetIDsOfNames returned 0x%08x\n", hr); - - /* Test invoking this function */ - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, NULL, NULL, NULL, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IDispatch::Invoke returned 0x%08x\n", hr); - - /* Test getting ID of a function name that does exist */ - name = (WCHAR *)szOpenPackage; - hr = IDispatch_GetIDsOfNames(pInstaller, &IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &dispid); - ok(hr == S_OK, "IDispatch::GetIDsOfNames returned 0x%08x\n", hr); - - /* Test invoking this function (without parameters passed) */ - if (0) /* All of these crash MSI on Windows XP */ - { - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, NULL, NULL, NULL, NULL); - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, NULL, NULL, &excepinfo, NULL); - VariantInit(&varresult); - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, NULL, &varresult, &excepinfo, NULL); - } - - /* Try with NULL params */ - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - todo_wine ok(hr == DISP_E_TYPEMISMATCH, "IDispatch::Invoke returned 0x%08x\n", hr); - - /* Try one empty parameter */ - dispparams.rgvarg = vararg; - dispparams.cArgs = 1; - VariantInit(&vararg[0]); - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - todo_wine ok(hr == DISP_E_TYPEMISMATCH, "IDispatch::Invoke returned 0x%08x\n", hr); - - /* Try one parameter, function requires two */ - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szMsifile); - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - VariantClear(&vararg[0]); - - ok(hr == DISP_E_EXCEPTION, "IDispatch::Invoke returned 0x%08x\n", hr); - ok_exception(hr, szOpenPackageException); - - /* Test invoking a method as a DISPATCH_PROPERTYGET or DISPATCH_PROPERTYPUT */ - VariantInit(&vararg[0]); - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IDispatch::Invoke returned 0x%08x\n", hr); - - VariantInit(&vararg[0]); - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IDispatch::Invoke returned 0x%08x\n", hr); - - /* Test invoking a read-only property as DISPATCH_PROPERTYPUT or as a DISPATCH_METHOD */ - name = (WCHAR *)szProductState; - hr = IDispatch_GetIDsOfNames(pInstaller, &IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &dispid); - ok(hr == S_OK, "IDispatch::GetIDsOfNames returned 0x%08x\n", hr); - - dispparams.rgvarg = NULL; - dispparams.cArgs = 0; - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IDispatch::Invoke returned 0x%08x\n", hr); - - dispparams.rgvarg = NULL; - dispparams.cArgs = 0; - hr = IDispatch_Invoke(pInstaller, dispid, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IDispatch::Invoke returned 0x%08x\n", hr); -} - -/* invocation helper function */ -static int _invoke_todo_vtResult = 0; - -static HRESULT invoke(IDispatch *pDispatch, LPCSTR szName, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, VARTYPE vtResult) -{ - OLECHAR *name = NULL; - DISPID dispid; - HRESULT hr; - UINT i; - UINT len; - - memset(pVarResult, 0, sizeof(VARIANT)); - VariantInit(pVarResult); - - len = MultiByteToWideChar(CP_ACP, 0, szName, -1, NULL, 0 ); - name = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR) ); - if (!name) return E_FAIL; - len = MultiByteToWideChar(CP_ACP, 0, szName, -1, name, len ); - hr = IDispatch_GetIDsOfNames(pDispatch, &IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &dispid); - HeapFree(GetProcessHeap(), 0, name); - ok(hr == S_OK, "IDispatch::GetIDsOfNames returned 0x%08x\n", hr); - if (!hr == S_OK) return hr; - - memset(&excepinfo, 0, sizeof(excepinfo)); - hr = IDispatch_Invoke(pDispatch, dispid, &IID_NULL, LOCALE_NEUTRAL, wFlags, pDispParams, pVarResult, &excepinfo, NULL); - - if (hr == S_OK) - { - if (_invoke_todo_vtResult) todo_wine - ok(V_VT(pVarResult) == vtResult, "Variant result type is %d, expected %d\n", V_VT(pVarResult), vtResult); - else - ok(V_VT(pVarResult) == vtResult, "Variant result type is %d, expected %d\n", V_VT(pVarResult), vtResult); - if (vtResult != VT_EMPTY) - { - hr = VariantChangeTypeEx(pVarResult, pVarResult, LOCALE_NEUTRAL, 0, vtResult); - ok(hr == S_OK, "VariantChangeTypeEx returned 0x%08x\n", hr); - } - } - - for (i=0; icArgs; i++) - VariantClear(&pDispParams->rgvarg[i]); - - return hr; -} - -/* Object_Property helper functions */ - -static HRESULT Installer_CreateRecord(int count, IDispatch **pRecord) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = count; - - hr = invoke(pInstaller, "CreateRecord", DISPATCH_METHOD, &dispparams, &varresult, VT_DISPATCH); - *pRecord = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT Installer_RegistryValue(HKEY hkey, LPCWSTR szKey, VARIANT vValue, VARIANT *pVarResult, VARTYPE vtExpect) -{ - VARIANTARG vararg[3]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - - VariantInit(&vararg[2]); - V_VT(&vararg[2]) = VT_I4; - V_I4(&vararg[2]) = (int)hkey; - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_BSTR; - V_BSTR(&vararg[1]) = SysAllocString(szKey); - VariantInit(&vararg[0]); - VariantCopy(&vararg[0], &vValue); - VariantClear(&vValue); - - return invoke(pInstaller, "RegistryValue", DISPATCH_METHOD, &dispparams, pVarResult, vtExpect); -} - -static HRESULT Installer_RegistryValueE(HKEY hkey, LPCWSTR szKey, BOOL *pBool) -{ - VARIANT varresult; - VARIANTARG vararg; - HRESULT hr; - - VariantInit(&vararg); - V_VT(&vararg) = VT_EMPTY; - hr = Installer_RegistryValue(hkey, szKey, vararg, &varresult, VT_BOOL); - *pBool = V_BOOL(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Installer_RegistryValueW(HKEY hkey, LPCWSTR szKey, LPCWSTR szValue, LPWSTR szString) -{ - VARIANT varresult; - VARIANTARG vararg; - HRESULT hr; - - VariantInit(&vararg); - V_VT(&vararg) = VT_BSTR; - V_BSTR(&vararg) = SysAllocString(szValue); - - hr = Installer_RegistryValue(hkey, szKey, vararg, &varresult, VT_BSTR); - if (V_BSTR(&varresult)) lstrcpyW(szString, V_BSTR(&varresult)); - VariantClear(&varresult); - return hr; -} - -static HRESULT Installer_RegistryValueI(HKEY hkey, LPCWSTR szKey, int iValue, LPWSTR szString, VARTYPE vtResult) -{ - VARIANT varresult; - VARIANTARG vararg; - HRESULT hr; - - VariantInit(&vararg); - V_VT(&vararg) = VT_I4; - V_I4(&vararg) = iValue; - - hr = Installer_RegistryValue(hkey, szKey, vararg, &varresult, vtResult); - if (vtResult == VT_BSTR) lstrcpyW(szString, V_BSTR(&varresult)); - VariantClear(&varresult); - return hr; -} - -static HRESULT Installer_OpenPackage(LPCWSTR szPackagePath, int options, IDispatch **pSession) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_BSTR; - V_BSTR(&vararg[1]) = SysAllocString(szPackagePath); - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = options; - - hr = invoke(pInstaller, "OpenPackage", DISPATCH_METHOD, &dispparams, &varresult, VT_DISPATCH); - *pSession = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT Installer_OpenDatabase(LPCWSTR szDatabasePath, int openmode, IDispatch **pDatabase) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_BSTR; - V_BSTR(&vararg[1]) = SysAllocString(szDatabasePath); - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = openmode; - - hr = invoke(pInstaller, "OpenDatabase", DISPATCH_METHOD, &dispparams, &varresult, VT_DISPATCH); - *pDatabase = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT Installer_InstallProduct(LPCWSTR szPackagePath, LPCWSTR szPropertyValues) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_BSTR; - V_BSTR(&vararg[1]) = SysAllocString(szPackagePath); - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szPropertyValues); - - return invoke(pInstaller, "InstallProduct", DISPATCH_METHOD, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT Installer_ProductState(LPCWSTR szProduct, int *pInstallState) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szProduct); - - hr = invoke(pInstaller, "ProductState", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); - *pInstallState = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Installer_ProductInfo(LPCWSTR szProduct, LPCWSTR szAttribute, LPWSTR szString) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_BSTR; - V_BSTR(&vararg[1]) = SysAllocString(szProduct); - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szAttribute); - - hr = invoke(pInstaller, "ProductInfo", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_BSTR); - if (V_BSTR(&varresult)) lstrcpyW(szString, V_BSTR(&varresult)); - VariantClear(&varresult); - return hr; -} - -static HRESULT Installer_Products(IDispatch **pStringList) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr; - - hr = invoke(pInstaller, "Products", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_DISPATCH); - *pStringList = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT Installer_RelatedProducts(LPCWSTR szProduct, IDispatch **pStringList) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szProduct); - - hr = invoke(pInstaller, "RelatedProducts", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_DISPATCH); - *pStringList = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT Installer_VersionGet(LPWSTR szVersion) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr; - - hr = invoke(pInstaller, "Version", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_BSTR); - if (V_BSTR(&varresult)) lstrcpyW(szVersion, V_BSTR(&varresult)); - VariantClear(&varresult); - return hr; -} - -static HRESULT Session_Installer(IDispatch *pSession, IDispatch **pInst) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr; - - hr = invoke(pSession, "Installer", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_DISPATCH); - *pInst = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT Session_PropertyGet(IDispatch *pSession, LPCWSTR szName, LPWSTR szReturn) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szName); - - hr = invoke(pSession, "Property", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_BSTR); - if (V_BSTR(&varresult)) lstrcpyW(szReturn, V_BSTR(&varresult)); - VariantClear(&varresult); - return hr; -} - -static HRESULT Session_PropertyPut(IDispatch *pSession, LPCWSTR szName, LPCWSTR szValue) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPID dispid = DISPID_PROPERTYPUT; - DISPPARAMS dispparams = {vararg, &dispid, sizeof(vararg)/sizeof(VARIANTARG), 1}; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_BSTR; - V_BSTR(&vararg[1]) = SysAllocString(szName); - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szValue); - - return invoke(pSession, "Property", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT Session_LanguageGet(IDispatch *pSession, UINT *pLangId) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr; - - hr = invoke(pSession, "Language", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); - *pLangId = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Session_ModeGet(IDispatch *pSession, int iFlag, BOOL *pMode) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = iFlag; - - hr = invoke(pSession, "Mode", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_BOOL); - *pMode = V_BOOL(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Session_ModePut(IDispatch *pSession, int iFlag, BOOL bMode) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPID dispid = DISPID_PROPERTYPUT; - DISPPARAMS dispparams = {vararg, &dispid, sizeof(vararg)/sizeof(VARIANTARG), 1}; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_I4; - V_I4(&vararg[1]) = iFlag; - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BOOL; - V_BOOL(&vararg[0]) = bMode; - - return invoke(pSession, "Mode", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT Session_Database(IDispatch *pSession, IDispatch **pDatabase) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr; - - hr = invoke(pSession, "Database", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_DISPATCH); - *pDatabase = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT Session_DoAction(IDispatch *pSession, LPCWSTR szAction, int *iReturn) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szAction); - - hr = invoke(pSession, "DoAction", DISPATCH_METHOD, &dispparams, &varresult, VT_I4); - *iReturn = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Session_EvaluateCondition(IDispatch *pSession, LPCWSTR szCondition, int *iReturn) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szCondition); - - hr = invoke(pSession, "EvaluateCondition", DISPATCH_METHOD, &dispparams, &varresult, VT_I4); - *iReturn = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Session_SetInstallLevel(IDispatch *pSession, long iInstallLevel) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = iInstallLevel; - - return invoke(pSession, "SetInstallLevel", DISPATCH_METHOD, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT Session_FeatureCurrentState(IDispatch *pSession, LPCWSTR szName, int *pState) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szName); - - hr = invoke(pSession, "FeatureCurrentState", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); - *pState = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Session_FeatureRequestStateGet(IDispatch *pSession, LPCWSTR szName, int *pState) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szName); - - hr = invoke(pSession, "FeatureRequestState", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); - *pState = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Session_FeatureRequestStatePut(IDispatch *pSession, LPCWSTR szName, int iState) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPID dispid = DISPID_PROPERTYPUT; - DISPPARAMS dispparams = {vararg, &dispid, sizeof(vararg)/sizeof(VARIANTARG), 1}; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_BSTR; - V_BSTR(&vararg[1]) = SysAllocString(szName); - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = iState; - - return invoke(pSession, "FeatureRequestState", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT Database_OpenView(IDispatch *pDatabase, LPCWSTR szSql, IDispatch **pView) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szSql); - - hr = invoke(pDatabase, "OpenView", DISPATCH_METHOD, &dispparams, &varresult, VT_DISPATCH); - *pView = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT Database_SummaryInformation(IDispatch *pDatabase, int iUpdateCount, IDispatch **pSummaryInfo) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = iUpdateCount; - - hr = invoke(pDatabase, "SummaryInformation", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_DISPATCH); - *pSummaryInfo = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT View_Execute(IDispatch *pView, IDispatch *pRecord) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_DISPATCH; - V_DISPATCH(&vararg[0]) = pRecord; - - return invoke(pView, "Execute", DISPATCH_METHOD, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT View_Fetch(IDispatch *pView, IDispatch **ppRecord) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr = invoke(pView, "Fetch", DISPATCH_METHOD, &dispparams, &varresult, VT_DISPATCH); - *ppRecord = V_DISPATCH(&varresult); - return hr; -} - -static HRESULT View_Modify(IDispatch *pView, int iMode, IDispatch *pRecord) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_I4; - V_I4(&vararg[1]) = iMode; - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_DISPATCH; - V_DISPATCH(&vararg[0]) = pRecord; - if (pRecord) - IDispatch_AddRef(pRecord); /* VariantClear in invoke will call IDispatch_Release */ - - return invoke(pView, "Modify", DISPATCH_METHOD, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT View_Close(IDispatch *pView) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - return invoke(pView, "Close", DISPATCH_METHOD, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT Record_FieldCountGet(IDispatch *pRecord, int *pFieldCount) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr = invoke(pRecord, "FieldCount", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); - *pFieldCount = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Record_StringDataGet(IDispatch *pRecord, int iField, LPWSTR szString) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = iField; - - hr = invoke(pRecord, "StringData", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_BSTR); - if (V_BSTR(&varresult)) lstrcpyW(szString, V_BSTR(&varresult)); - VariantClear(&varresult); - return hr; -} - -static HRESULT Record_StringDataPut(IDispatch *pRecord, int iField, LPCWSTR szString) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPID dispid = DISPID_PROPERTYPUT; - DISPPARAMS dispparams = {vararg, &dispid, sizeof(vararg)/sizeof(VARIANTARG), 1}; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_I4; - V_I4(&vararg[1]) = iField; - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = SysAllocString(szString); - - return invoke(pRecord, "StringData", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT Record_IntegerDataGet(IDispatch *pRecord, int iField, int *pValue) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = iField; - - hr = invoke(pRecord, "IntegerData", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); - *pValue = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT Record_IntegerDataPut(IDispatch *pRecord, int iField, int iValue) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPID dispid = DISPID_PROPERTYPUT; - DISPPARAMS dispparams = {vararg, &dispid, sizeof(vararg)/sizeof(VARIANTARG), 1}; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_I4; - V_I4(&vararg[1]) = iField; - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = iValue; - - return invoke(pRecord, "IntegerData", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT StringList__NewEnum(IDispatch *pList, IUnknown **ppEnumVARIANT) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr = invoke(pList, "_NewEnum", DISPATCH_METHOD, &dispparams, &varresult, VT_UNKNOWN); - *ppEnumVARIANT = V_UNKNOWN(&varresult); - return hr; -} - -static HRESULT StringList_Item(IDispatch *pStringList, int iIndex, LPWSTR szString) -{ - VARIANT varresult; - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - HRESULT hr; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = iIndex; - - hr = invoke(pStringList, "Item", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_BSTR); - if (V_BSTR(&varresult)) lstrcpyW(szString, V_BSTR(&varresult)); - VariantClear(&varresult); - return hr; -} - -static HRESULT StringList_Count(IDispatch *pStringList, int *pCount) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr = invoke(pStringList, "Count", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); - *pCount = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -static HRESULT SummaryInfo_PropertyGet(IDispatch *pSummaryInfo, int pid, VARIANT *pVarResult, VARTYPE vtExpect) -{ - VARIANTARG vararg[1]; - DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; - - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = pid; - return invoke(pSummaryInfo, "Property", DISPATCH_PROPERTYGET, &dispparams, pVarResult, vtExpect); -} - -static HRESULT SummaryInfo_PropertyPut(IDispatch *pSummaryInfo, int pid, VARIANT *pVariant) -{ - VARIANT varresult; - VARIANTARG vararg[2]; - DISPID dispid = DISPID_PROPERTYPUT; - DISPPARAMS dispparams = {vararg, &dispid, sizeof(vararg)/sizeof(VARIANTARG), 1}; - - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_I4; - V_I4(&vararg[1]) = pid; - VariantInit(&vararg[0]); - VariantCopyInd(vararg, pVariant); - - return invoke(pSummaryInfo, "Property", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY); -} - -static HRESULT SummaryInfo_PropertyCountGet(IDispatch *pSummaryInfo, int *pCount) -{ - VARIANT varresult; - DISPPARAMS dispparams = {NULL, NULL, 0, 0}; - HRESULT hr; - - hr = invoke(pSummaryInfo, "PropertyCount", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_I4); - *pCount = V_I4(&varresult); - VariantClear(&varresult); - return hr; -} - -/* Test the various objects */ - -#define TEST_SUMMARYINFO_PROPERTIES_MODIFIED 4 - -static void test_SummaryInfo(IDispatch *pSummaryInfo, const msi_summary_info *info, int num_info, BOOL readonly) -{ - static const WCHAR szPropertyException[] = { 'P','r','o','p','e','r','t','y',',','P','i','d',0 }; - static const WCHAR szTitle[] = { 'T','i','t','l','e',0 }; - VARIANT varresult, var; - SYSTEMTIME st; - HRESULT hr; - int j; - - /* SummaryInfo::PropertyCount */ - hr = SummaryInfo_PropertyCountGet(pSummaryInfo, &j); - ok(hr == S_OK, "SummaryInfo_PropertyCount failed, hresult 0x%08x\n", hr); - ok(j == num_info, "SummaryInfo_PropertyCount returned %d, expected %d\n", j, num_info); - - /* SummaryInfo::Property, get for properties we have set */ - for (j = 0; j < num_info; j++) - { - const msi_summary_info *entry = &info[j]; - - int vt = entry->datatype; - if (vt == VT_LPSTR) vt = VT_BSTR; - else if (vt == VT_FILETIME) vt = VT_DATE; - else if (vt == VT_I2) vt = VT_I4; - - hr = SummaryInfo_PropertyGet(pSummaryInfo, entry->property, &varresult, vt); - ok(hr == S_OK, "SummaryInfo_Property (pid %d) failed, hresult 0x%08x\n", entry->property, hr); - if (V_VT(&varresult) != vt) - skip("Skipping property tests due to type mismatch\n"); - else if (vt == VT_I4) - ok(V_I4(&varresult) == entry->iValue, "SummaryInfo_Property (pid %d) I4 result expected to be %d, but was %d\n", - entry->property, entry->iValue, V_I4(&varresult)); - else if (vt == VT_DATE) - { - FILETIME ft; - DATE d; - - FileTimeToLocalFileTime(entry->pftValue, &ft); - FileTimeToSystemTime(&ft, &st); - SystemTimeToVariantTime(&st, &d); - ok(d == V_DATE(&varresult), "SummaryInfo_Property (pid %d) DATE result expected to be %lf, but was %lf\n", entry->property, d, V_DATE(&varresult)); - } - else if (vt == VT_BSTR) - { - ok_awplus("SummaryInfo_Property (pid %d) BSTR result expected to be %s, but was %s\n", entry->property, entry->szValue, V_BSTR(&varresult)); - } - else - skip("SummaryInfo_Property (pid %d) unhandled result type %d\n", entry->property, vt); - - VariantClear(&varresult); - } - - /* SummaryInfo::Property, get; invalid arguments */ - - /* Invalid pids */ - hr = SummaryInfo_PropertyGet(pSummaryInfo, -1, &varresult, VT_EMPTY); - ok(hr == DISP_E_EXCEPTION, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - ok_exception(hr, szPropertyException); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, 1000, &varresult, VT_EMPTY); - ok(hr == DISP_E_EXCEPTION, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - ok_exception(hr, szPropertyException); - - /* Unsupported pids */ - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_DICTIONARY, &varresult, VT_EMPTY); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_THUMBNAIL, &varresult, VT_EMPTY); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - - /* Pids we have not set, one for each type */ - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_CODEPAGE, &varresult, VT_EMPTY); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_TITLE, &varresult, VT_EMPTY); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_EDITTIME, &varresult, VT_EMPTY); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_CHARCOUNT, &varresult, VT_EMPTY); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - - if (!readonly) - { - /* SummaryInfo::Property, put; one for each type */ - - /* VT_I2 */ - VariantInit(&var); - V_VT(&var) = VT_I2; - V_I2(&var) = 1; - hr = SummaryInfo_PropertyPut(pSummaryInfo, PID_CODEPAGE, &var); - ok(hr == S_OK, "SummaryInfo_PropertyPut failed, hresult 0x%08x\n", hr); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_CODEPAGE, &varresult, VT_I4 /* NOT VT_I2 */); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - ok(V_I2(&var) == V_I2(&varresult), "SummaryInfo_PropertyGet expected %d, but returned %d\n", V_I2(&var), V_I2(&varresult)); - VariantClear(&varresult); - VariantClear(&var); - - /* VT_BSTR */ - V_VT(&var) = VT_BSTR; - V_BSTR(&var) = SysAllocString(szTitle); - hr = SummaryInfo_PropertyPut(pSummaryInfo, PID_TITLE, &var); - ok(hr == S_OK, "SummaryInfo_PropertyPut failed, hresult 0x%08x\n", hr); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_TITLE, &varresult, V_VT(&var)); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - ok_w2("SummaryInfo_PropertyGet expected %s, but returned %s\n", V_BSTR(&var), V_BSTR(&varresult)); - VariantClear(&varresult); - VariantClear(&var); - - /* VT_DATE */ - V_VT(&var) = VT_DATE; - FileTimeToSystemTime(&systemtime, &st); - SystemTimeToVariantTime(&st, &V_DATE(&var)); - hr = SummaryInfo_PropertyPut(pSummaryInfo, PID_LASTSAVE_DTM, &var); - ok(hr == S_OK, "SummaryInfo_PropertyPut failed, hresult 0x%08x\n", hr); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_LASTSAVE_DTM, &varresult, V_VT(&var)); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - /* FIXME: Off by one second */ - todo_wine ok(V_DATE(&var) == V_DATE(&varresult), "SummaryInfo_PropertyGet expected %lf, but returned %lf\n", V_DATE(&var), V_DATE(&varresult)); - VariantClear(&varresult); - VariantClear(&var); - - /* VT_I4 */ - V_VT(&var) = VT_I4; - V_I4(&var) = 1000; - hr = SummaryInfo_PropertyPut(pSummaryInfo, PID_CHARCOUNT, &var); - ok(hr == S_OK, "SummaryInfo_PropertyPut failed, hresult 0x%08x\n", hr); - - hr = SummaryInfo_PropertyGet(pSummaryInfo, PID_CHARCOUNT, &varresult, V_VT(&var)); - ok(hr == S_OK, "SummaryInfo_PropertyGet failed, hresult 0x%08x\n", hr); - ok(V_I4(&var) == V_I4(&varresult), "SummaryInfo_PropertyGet expected %d, but returned %d\n", V_I4(&var), V_I4(&varresult)); - VariantClear(&varresult); - VariantClear(&var); - - /* SummaryInfo::PropertyCount */ - hr = SummaryInfo_PropertyCountGet(pSummaryInfo, &j); - ok(hr == S_OK, "SummaryInfo_PropertyCount failed, hresult 0x%08x\n", hr); - ok(j == num_info+4, "SummaryInfo_PropertyCount returned %d, expected %d\n", j, num_info); - } -} - -static void test_Database(IDispatch *pDatabase, BOOL readonly) -{ - static WCHAR szSql[] = { 'S','E','L','E','C','T',' ','`','F','e','a','t','u','r','e','`',' ','F','R','O','M',' ','`','F','e','a','t','u','r','e','`',' ','W','H','E','R','E',' ','`','F','e','a','t','u','r','e','_','P','a','r','e','n','t','`','=','\'','O','n','e','\'',0 }; - static WCHAR szThree[] = { 'T','h','r','e','e',0 }; - static WCHAR szTwo[] = { 'T','w','o',0 }; - static WCHAR szStringDataField[] = { 'S','t','r','i','n','g','D','a','t','a',',','F','i','e','l','d',0 }; - static WCHAR szModifyModeRecord[] = { 'M','o','d','i','f','y',',','M','o','d','e',',','R','e','c','o','r','d',0 }; - IDispatch *pView = NULL, *pSummaryInfo = NULL; - HRESULT hr; - - hr = Database_OpenView(pDatabase, szSql, &pView); - ok(hr == S_OK, "Database_OpenView failed, hresult 0x%08x\n", hr); - if (hr == S_OK) - { - IDispatch *pRecord = NULL; - WCHAR szString[MAX_PATH]; - - /* View::Execute */ - hr = View_Execute(pView, NULL); - ok(hr == S_OK, "View_Execute failed, hresult 0x%08x\n", hr); - - /* View::Fetch */ - hr = View_Fetch(pView, &pRecord); - ok(hr == S_OK, "View_Fetch failed, hresult 0x%08x\n", hr); - ok(pRecord != NULL, "View_Fetch should not have returned NULL record\n"); - if (pRecord) - { - /* Record::StringDataGet */ - memset(szString, 0, sizeof(szString)); - hr = Record_StringDataGet(pRecord, 1, szString); - ok(hr == S_OK, "Record_StringDataGet failed, hresult 0x%08x\n", hr); - ok_w2("Record_StringDataGet result was %s but expected %s\n", szString, szThree); - - /* Record::StringDataPut with correct index */ - hr = Record_StringDataPut(pRecord, 1, szTwo); - ok(hr == S_OK, "Record_StringDataPut failed, hresult 0x%08x\n", hr); - - /* Record::StringDataGet */ - memset(szString, 0, sizeof(szString)); - hr = Record_StringDataGet(pRecord, 1, szString); - ok(hr == S_OK, "Record_StringDataGet failed, hresult 0x%08x\n", hr); - ok_w2("Record_StringDataGet result was %s but expected %s\n", szString, szTwo); - - /* Record::StringDataPut with incorrect index */ - hr = Record_StringDataPut(pRecord, -1, szString); - ok(hr == DISP_E_EXCEPTION, "Record_StringDataPut failed, hresult 0x%08x\n", hr); - ok_exception(hr, szStringDataField); - - /* View::Modify with incorrect parameters */ - hr = View_Modify(pView, -5, NULL); - ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr); - ok_exception(hr, szModifyModeRecord); - - hr = View_Modify(pView, -5, pRecord); - ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr); - ok_exception(hr, szModifyModeRecord); - - hr = View_Modify(pView, MSIMODIFY_REFRESH, NULL); - ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr); - ok_exception(hr, szModifyModeRecord); - - hr = View_Modify(pView, MSIMODIFY_REFRESH, pRecord); - ok(hr == S_OK, "View_Modify failed, hresult 0x%08x\n", hr); - - /* Record::StringDataGet, confirm that the record is back to its unmodified value */ - memset(szString, 0, sizeof(szString)); - hr = Record_StringDataGet(pRecord, 1, szString); - ok(hr == S_OK, "Record_StringDataGet failed, hresult 0x%08x\n", hr); - todo_wine ok_w2("Record_StringDataGet result was %s but expected %s\n", szString, szThree); - - IDispatch_Release(pRecord); - } - - /* View::Fetch */ - hr = View_Fetch(pView, &pRecord); - ok(hr == S_OK, "View_Fetch failed, hresult 0x%08x\n", hr); - ok(pRecord != NULL, "View_Fetch should not have returned NULL record\n"); - if (pRecord) - { - /* Record::StringDataGet */ - memset(szString, 0, sizeof(szString)); - hr = Record_StringDataGet(pRecord, 1, szString); - ok(hr == S_OK, "Record_StringDataGet failed, hresult 0x%08x\n", hr); - ok_w2("Record_StringDataGet result was %s but expected %s\n", szString, szTwo); - - IDispatch_Release(pRecord); - } - - /* View::Fetch */ - hr = View_Fetch(pView, &pRecord); - ok(hr == S_OK, "View_Fetch failed, hresult 0x%08x\n", hr); - ok(pRecord == NULL, "View_Fetch should have returned NULL record\n"); - if (pRecord) - IDispatch_Release(pRecord); - - /* View::Close */ - hr = View_Close(pView); - ok(hr == S_OK, "View_Close failed, hresult 0x%08x\n", hr); - - IDispatch_Release(pView); - } - - /* Database::SummaryInformation */ - hr = Database_SummaryInformation(pDatabase, TEST_SUMMARYINFO_PROPERTIES_MODIFIED, &pSummaryInfo); - ok(hr == S_OK, "Database_SummaryInformation failed, hresult 0x%08x\n", hr); - ok(pSummaryInfo != NULL, "Database_SummaryInformation should not have returned NULL record\n"); - if (pSummaryInfo) - { - test_SummaryInfo(pSummaryInfo, summary_info, sizeof(summary_info)/sizeof(msi_summary_info), readonly); - IDispatch_Release(pSummaryInfo); - } -} - -static void test_Session(IDispatch *pSession) -{ - static WCHAR szProductName[] = { 'P','r','o','d','u','c','t','N','a','m','e',0 }; - static WCHAR szOne[] = { 'O','n','e',0 }; - static WCHAR szOneStateFalse[] = { '!','O','n','e','>','0',0 }; - static WCHAR szOneStateTrue[] = { '!','O','n','e','=','-','1',0 }; - static WCHAR szOneActionFalse[] = { '$','O','n','e','=','-','1',0 }; - static WCHAR szOneActionTrue[] = { '$','O','n','e','>','0',0 }; - static WCHAR szCostInitialize[] = { 'C','o','s','t','I','n','i','t','i','a','l','i','z','e',0 }; - static WCHAR szEmpty[] = { 0 }; - static WCHAR szEquals[] = { '=',0 }; - static WCHAR szPropertyName[] = { 'P','r','o','p','e','r','t','y',',','N','a','m','e',0 }; - WCHAR stringw[MAX_PATH]; - CHAR string[MAX_PATH]; - UINT len; - BOOL bool; - int myint; - IDispatch *pDatabase = NULL, *pInst = NULL; - HRESULT hr; - - /* Session::Installer */ - hr = Session_Installer(pSession, &pInst); - ok(hr == S_OK, "Session_Installer failed, hresult 0x%08x\n", hr); - ok(pInst != NULL, "Session_Installer returned NULL IDispatch pointer\n"); - ok(pInst == pInstaller, "Session_Installer does not match Installer instance from CoCreateInstance\n"); - - /* Session::Property, get */ - memset(stringw, 0, sizeof(stringw)); - hr = Session_PropertyGet(pSession, szProductName, stringw); - ok(hr == S_OK, "Session_PropertyGet failed, hresult 0x%08x\n", hr); - if (lstrcmpW(stringw, szMSITEST) != 0) - { - len = WideCharToMultiByte(CP_ACP, 0, stringw, -1, string, MAX_PATH, NULL, NULL); - ok(len, "WideCharToMultiByteChar returned error %d\n", GetLastError()); - ok(0, "Property \"ProductName\" expected to be \"MSITEST\" but was \"%s\"\n", string); - } - - /* Session::Property, put */ - hr = Session_PropertyPut(pSession, szProductName, szProductName); - ok(hr == S_OK, "Session_PropertyPut failed, hresult 0x%08x\n", hr); - memset(stringw, 0, sizeof(stringw)); - hr = Session_PropertyGet(pSession, szProductName, stringw); - ok(hr == S_OK, "Session_PropertyGet failed, hresult 0x%08x\n", hr); - if (lstrcmpW(stringw, szProductName) != 0) - { - len = WideCharToMultiByte(CP_ACP, 0, stringw, -1, string, MAX_PATH, NULL, NULL); - ok(len, "WideCharToMultiByteChar returned error %d\n", GetLastError()); - ok(0, "Property \"ProductName\" expected to be \"ProductName\" but was \"%s\"\n", string); - } - - /* Try putting a property using empty property identifier */ - hr = Session_PropertyPut(pSession, szEmpty, szProductName); - ok(hr == DISP_E_EXCEPTION, "Session_PropertyPut failed, hresult 0x%08x\n", hr); - ok_exception(hr, szPropertyName); - - /* Try putting a property using illegal property identifier */ - hr = Session_PropertyPut(pSession, szEquals, szProductName); - ok(hr == S_OK, "Session_PropertyPut failed, hresult 0x%08x\n", hr); - - /* Session::Language, get */ - hr = Session_LanguageGet(pSession, &len); - ok(hr == S_OK, "Session_LanguageGet failed, hresult 0x%08x\n", hr); - /* Not sure how to check the language is correct */ - - /* Session::Mode, get */ - hr = Session_ModeGet(pSession, MSIRUNMODE_REBOOTATEND, &bool); - ok(hr == S_OK, "Session_ModeGet failed, hresult 0x%08x\n", hr); - todo_wine ok(!bool, "Reboot at end session mode is %d\n", bool); - - /* Session::Mode, put */ - hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTATEND, TRUE); - todo_wine ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr); - hr = Session_ModeGet(pSession, MSIRUNMODE_REBOOTATEND, &bool); - ok(hr == S_OK, "Session_ModeGet failed, hresult 0x%08x\n", hr); - ok(bool, "Reboot at end session mode is %d, expected 1\n", bool); - hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTATEND, FALSE); /* set it again so we don't reboot */ - todo_wine ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr); - - /* Session::Database, get */ - hr = Session_Database(pSession, &pDatabase); - ok(hr == S_OK, "Session_Database failed, hresult 0x%08x\n", hr); - if (hr == S_OK) - { - test_Database(pDatabase, TRUE); - IDispatch_Release(pDatabase); - } - - /* Session::EvaluateCondition */ - hr = Session_EvaluateCondition(pSession, NULL, &myint); - ok(hr == S_OK, "Session_EvaluateCondition failed, hresult 0x%08x\n", hr); - ok(myint == MSICONDITION_NONE, "Feature current state was %d but expected %d\n", myint, INSTALLSTATE_UNKNOWN); - - hr = Session_EvaluateCondition(pSession, szEmpty, &myint); - ok(hr == S_OK, "Session_EvaluateCondition failed, hresult 0x%08x\n", hr); - ok(myint == MSICONDITION_NONE, "Feature current state was %d but expected %d\n", myint, INSTALLSTATE_UNKNOWN); - - hr = Session_EvaluateCondition(pSession, szEquals, &myint); - ok(hr == S_OK, "Session_EvaluateCondition failed, hresult 0x%08x\n", hr); - ok(myint == MSICONDITION_ERROR, "Feature current state was %d but expected %d\n", myint, INSTALLSTATE_UNKNOWN); - - /* Session::DoAction(CostInitialize) must occur before the next statements */ - hr = Session_DoAction(pSession, szCostInitialize, &myint); - ok(hr == S_OK, "Session_DoAction failed, hresult 0x%08x\n", hr); - ok(myint == IDOK, "DoAction(CostInitialize) returned %d, %d expected\n", myint, IDOK); - - /* Session::SetInstallLevel */ - hr = Session_SetInstallLevel(pSession, INSTALLLEVEL_MINIMUM); - ok(hr == S_OK, "Session_SetInstallLevel failed, hresult 0x%08x\n", hr); - - /* Session::FeatureCurrentState, get */ - hr = Session_FeatureCurrentState(pSession, szOne, &myint); - ok(hr == S_OK, "Session_FeatureCurrentState failed, hresult 0x%08x\n", hr); - ok(myint == INSTALLSTATE_UNKNOWN, "Feature current state was %d but expected %d\n", myint, INSTALLSTATE_UNKNOWN); - - /* Session::EvaluateCondition */ - hr = Session_EvaluateCondition(pSession, szOneStateFalse, &myint); - ok(hr == S_OK, "Session_EvaluateCondition failed, hresult 0x%08x\n", hr); - ok(myint == MSICONDITION_FALSE, "Feature current state was %d but expected %d\n", myint, INSTALLSTATE_UNKNOWN); - - hr = Session_EvaluateCondition(pSession, szOneStateTrue, &myint); - ok(hr == S_OK, "Session_EvaluateCondition failed, hresult 0x%08x\n", hr); - ok(myint == MSICONDITION_TRUE, "Feature current state was %d but expected %d\n", myint, INSTALLSTATE_UNKNOWN); - - /* Session::FeatureRequestState, put */ - hr = Session_FeatureRequestStatePut(pSession, szOne, INSTALLSTATE_ADVERTISED); - ok(hr == S_OK, "Session_FeatureRequestStatePut failed, hresult 0x%08x\n", hr); - hr = Session_FeatureRequestStateGet(pSession, szOne, &myint); - ok(hr == S_OK, "Session_FeatureRequestStateGet failed, hresult 0x%08x\n", hr); - ok(myint == INSTALLSTATE_ADVERTISED, "Feature request state was %d but expected %d\n", myint, INSTALLSTATE_ADVERTISED); - - /* Session::EvaluateCondition */ - hr = Session_EvaluateCondition(pSession, szOneActionFalse, &myint); - ok(hr == S_OK, "Session_EvaluateCondition failed, hresult 0x%08x\n", hr); - ok(myint == MSICONDITION_FALSE, "Feature current state was %d but expected %d\n", myint, INSTALLSTATE_UNKNOWN); - - hr = Session_EvaluateCondition(pSession, szOneActionTrue, &myint); - ok(hr == S_OK, "Session_EvaluateCondition failed, hresult 0x%08x\n", hr); - ok(myint == MSICONDITION_TRUE, "Feature current state was %d but expected %d\n", myint, INSTALLSTATE_UNKNOWN); -} - -/* delete key and all its subkeys */ -static DWORD delete_key( HKEY hkey ) -{ - char name[MAX_PATH]; - DWORD ret; - - while (!(ret = RegEnumKeyA(hkey, 0, name, sizeof(name)))) - { - HKEY tmp; - if (!(ret = RegOpenKeyExA( hkey, name, 0, KEY_ENUMERATE_SUB_KEYS, &tmp ))) - { - ret = delete_key( tmp ); - RegCloseKey( tmp ); - } - if (ret) break; - } - if (ret != ERROR_NO_MORE_ITEMS) return ret; - RegDeleteKeyA( hkey, "" ); - return 0; -} - -static void test_Installer_RegistryValue(void) -{ - static const DWORD qw[2] = { 0x12345678, 0x87654321 }; - static const WCHAR szKey[] = { 'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\','T','e','s','t',0 }; - static const WCHAR szOne[] = { 'O','n','e',0 }; - static const WCHAR szTwo[] = { 'T','w','o',0 }; - static const WCHAR szThree[] = { 'T','h','r','e','e',0 }; - static const WCHAR szREG_BINARY[] = { '(','R','E','G','_','B','I','N','A','R','Y',')',0 }; - static const WCHAR szFour[] = { 'F','o','u','r',0 }; - static const WCHAR szExpand[] = { '%','M','S','I','T','E','S','T','%',0 }; - static const WCHAR szFive[] = { 'F','i','v','e',0,'H','i',0,0 }; - static const WCHAR szFiveHi[] = { 'F','i','v','e','\n','H','i',0 }; - static const WCHAR szSix[] = { 'S','i','x',0 }; - static const WCHAR szREG_[] = { '(','R','E','G','_',']',0 }; - static const WCHAR szSeven[] = { 'S','e','v','e','n',0 }; - static const WCHAR szEight[] = { 'E','i','g','h','t',0 }; - static const WCHAR szBlank[] = { 0 }; - VARIANT varresult; - VARIANTARG vararg; - WCHAR szString[MAX_PATH]; - HKEY hkey, hkey_sub; - HKEY curr_user = (HKEY)1; - HRESULT hr; - BOOL bRet; - - /* Delete keys */ - if (!RegOpenKeyW( HKEY_CURRENT_USER, szKey, &hkey )) delete_key( hkey ); - - /* Does our key exist? Shouldn't; check with all three possible value parameter types */ - hr = Installer_RegistryValueE(curr_user, szKey, &bRet); - ok(hr == S_OK, "Installer_RegistryValueE failed, hresult 0x%08x\n", hr); - ok(!bRet, "Registry key expected to not exist, but Installer_RegistryValue claims it does\n"); - - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueW(curr_user, szKey, NULL, szString); - ok(hr == DISP_E_BADINDEX, "Installer_RegistryValueW failed, hresult 0x%08x\n", hr); - - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueI(curr_user, szKey, 0, szString, VT_BSTR); - ok(hr == DISP_E_BADINDEX, "Installer_RegistryValueI failed, hresult 0x%08x\n", hr); - - /* Create key */ - ok(!RegCreateKeyW( HKEY_CURRENT_USER, szKey, &hkey ), "RegCreateKeyW failed\n"); - - ok(!RegSetValueExW(hkey,szOne,0,REG_SZ, (const BYTE *)szOne, sizeof(szOne)), - "RegSetValueExW failed\n"); - ok(!RegSetValueExW(hkey,szTwo,0,REG_DWORD, (const BYTE *)qw, 4), - "RegSetValueExW failed\n"); - ok(!RegSetValueExW(hkey,szThree,0,REG_BINARY, (const BYTE *)qw, 4), - "RegSetValueExW failed\n"); - ok(SetEnvironmentVariableA("MSITEST", "Four"), "SetEnvironmentVariableA failed %d\n", GetLastError()); - ok(!RegSetValueExW(hkey,szFour,0,REG_EXPAND_SZ, (const BYTE *)szExpand, sizeof(szExpand)), - "RegSetValueExW failed\n"); - ok(!RegSetValueExW(hkey,szFive,0,REG_MULTI_SZ, (const BYTE *)szFive, sizeof(szFive)), - "RegSetValueExW failed\n"); - ok(!RegSetValueExW(hkey,szSix,0,REG_QWORD, (const BYTE *)qw, 8), - "RegSetValueExW failed\n"); - ok(!RegSetValueExW(hkey,szSeven,0,REG_NONE, (const BYTE *)NULL, 0), - "RegSetValueExW failed\n"); - - ok(!RegSetValueExW(hkey,NULL,0,REG_SZ, (const BYTE *)szOne, sizeof(szOne)), - "RegSetValueExW failed\n"); - - ok(!RegCreateKeyW( hkey, szEight, &hkey_sub ), "RegCreateKeyW failed\n"); - - /* Does our key exist? It should, and make sure we retrieve the correct default value */ - bRet = FALSE; - hr = Installer_RegistryValueE(curr_user, szKey, &bRet); - ok(hr == S_OK, "Installer_RegistryValueE failed, hresult 0x%08x\n", hr); - ok(bRet, "Registry key expected to exist, but Installer_RegistryValue claims it does not\n"); - - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueW(curr_user, szKey, NULL, szString); - ok(hr == S_OK, "Installer_RegistryValueW failed, hresult 0x%08x\n", hr); - ok_w2("Default registry value \"%s\" does not match expected \"%s\"\n", szString, szOne); - - /* Ask for the value of a nonexistent key */ - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueW(curr_user, szKey, szExpand, szString); - ok(hr == DISP_E_BADINDEX, "Installer_RegistryValueW failed, hresult 0x%08x\n", hr); - - /* Get values of keys */ - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueW(curr_user, szKey, szOne, szString); - ok(hr == S_OK, "Installer_RegistryValueW failed, hresult 0x%08x\n", hr); - ok_w2("Registry value \"%s\" does not match expected \"%s\"\n", szString, szOne); - - VariantInit(&vararg); - V_VT(&vararg) = VT_BSTR; - V_BSTR(&vararg) = SysAllocString(szTwo); - hr = Installer_RegistryValue(curr_user, szKey, vararg, &varresult, VT_I4); - ok(hr == S_OK, "Installer_RegistryValue failed, hresult 0x%08x\n", hr); - ok(V_I4(&varresult) == 305419896, "Registry value %d does not match expected value\n", V_I4(&varresult)); - VariantClear(&varresult); - - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueW(curr_user, szKey, szThree, szString); - ok(hr == S_OK, "Installer_RegistryValueW failed, hresult 0x%08x\n", hr); - ok_w2("Registry value \"%s\" does not match expected \"%s\"\n", szString, szREG_BINARY); - - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueW(curr_user, szKey, szFour, szString); - ok(hr == S_OK, "Installer_RegistryValueW failed, hresult 0x%08x\n", hr); - ok_w2("Registry value \"%s\" does not match expected \"%s\"\n", szString, szFour); - - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueW(curr_user, szKey, szFive, szString); - ok(hr == S_OK, "Installer_RegistryValueW failed, hresult 0x%08x\n", hr); - ok_w2("Registry value \"%s\" does not match expected \"%s\"\n", szString, szFiveHi); - - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueW(curr_user, szKey, szSix, szString); - ok(hr == S_OK, "Installer_RegistryValueW failed, hresult 0x%08x\n", hr); - ok_w2("Registry value \"%s\" does not match expected \"%s\"\n", szString, szREG_); - - VariantInit(&vararg); - V_VT(&vararg) = VT_BSTR; - V_BSTR(&vararg) = SysAllocString(szSeven); - hr = Installer_RegistryValue(curr_user, szKey, vararg, &varresult, VT_EMPTY); - ok(hr == S_OK, "Installer_RegistryValue failed, hresult 0x%08x\n", hr); - - /* Get string class name for the key */ - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueI(curr_user, szKey, 0, szString, VT_BSTR); - ok(hr == S_OK, "Installer_RegistryValueI failed, hresult 0x%08x\n", hr); - ok_w2("Registry name \"%s\" does not match expected \"%s\"\n", szString, szBlank); - - /* Get name of a value by positive number (RegEnumValue like), valid index */ - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueI(curr_user, szKey, 2, szString, VT_BSTR); - ok(hr == S_OK, "Installer_RegistryValueI failed, hresult 0x%08x\n", hr); - /* RegEnumValue order seems different on wine */ - todo_wine ok_w2("Registry name \"%s\" does not match expected \"%s\"\n", szString, szTwo); - - /* Get name of a value by positive number (RegEnumValue like), invalid index */ - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueI(curr_user, szKey, 10, szString, VT_EMPTY); - ok(hr == S_OK, "Installer_RegistryValueI failed, hresult 0x%08x\n", hr); - - /* Get name of a subkey by negative number (RegEnumValue like), valid index */ - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueI(curr_user, szKey, -1, szString, VT_BSTR); - ok(hr == S_OK, "Installer_RegistryValueI failed, hresult 0x%08x\n", hr); - ok_w2("Registry name \"%s\" does not match expected \"%s\"\n", szString, szEight); - - /* Get name of a subkey by negative number (RegEnumValue like), invalid index */ - memset(szString, 0, sizeof(szString)); - hr = Installer_RegistryValueI(curr_user, szKey, -10, szString, VT_EMPTY); - ok(hr == S_OK, "Installer_RegistryValueI failed, hresult 0x%08x\n", hr); - - /* clean up */ - delete_key(hkey); -} - -static void test_Installer_Products(BOOL bProductInstalled) -{ - WCHAR szString[MAX_PATH]; - HRESULT hr; - int idx; - IUnknown *pUnk = NULL; - IEnumVARIANT *pEnum = NULL; - VARIANT var; - ULONG celt; - int iCount, iValue; - IDispatch *pStringList = NULL; - BOOL bProductFound = FALSE; - - /* Installer::Products */ - hr = Installer_Products(&pStringList); - ok(hr == S_OK, "Installer_Products failed, hresult 0x%08x\n", hr); - if (hr == S_OK) - { - /* StringList::_NewEnum */ - hr = StringList__NewEnum(pStringList, &pUnk); - ok(hr == S_OK, "StringList_NewEnum failed, hresult 0x%08x\n", hr); - if (hr == S_OK) - { - hr = IUnknown_QueryInterface(pUnk, &IID_IEnumVARIANT, (void **)&pEnum); - ok (hr == S_OK, "IUnknown::QueryInterface returned 0x%08x\n", hr); - } - if (!pEnum) - skip("IEnumVARIANT tests\n"); - - /* StringList::Count */ - hr = StringList_Count(pStringList, &iCount); - ok(hr == S_OK, "StringList_Count failed, hresult 0x%08x\n", hr); - - for (idx=0; idx - -#include -#include -#include - -#include - -#include "wine/test.h" - -static const char *msifile = "winetest.msi"; -static const char *msifile2 = "winetst2.msi"; -static const char *mstfile = "winetst.mst"; - -static void test_msidatabase(void) -{ - MSIHANDLE hdb = 0, hdb2 = 0; - UINT res; - - DeleteFile(msifile); - - res = MsiOpenDatabase( msifile, msifile2, &hdb ); - ok( res == ERROR_OPEN_FAILED, "expected failure\n"); - - res = MsiOpenDatabase( msifile, (LPSTR) 0xff, &hdb ); - ok( res == ERROR_INVALID_PARAMETER, "expected failure\n"); - - res = MsiCloseHandle( hdb ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - /* create an empty database */ - res = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to create database\n" ); - - res = MsiDatabaseCommit( hdb ); - ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); - - ok( INVALID_FILE_ATTRIBUTES != GetFileAttributes( msifile ), "database should exist\n"); - - res = MsiCloseHandle( hdb ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - res = MsiOpenDatabase( msifile, msifile2, &hdb2 ); - ok( res == ERROR_SUCCESS , "Failed to open database\n" ); - - ok( INVALID_FILE_ATTRIBUTES != GetFileAttributes( msifile2 ), "database should exist\n"); - - res = MsiDatabaseCommit( hdb2 ); - ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); - - res = MsiCloseHandle( hdb2 ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - res = MsiOpenDatabase( msifile, msifile2, &hdb2 ); - ok( res == ERROR_SUCCESS , "Failed to open database\n" ); - - res = MsiCloseHandle( hdb2 ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - ok( INVALID_FILE_ATTRIBUTES == GetFileAttributes( msifile2 ), "uncommitted database should not exist\n"); - - res = MsiOpenDatabase( msifile, msifile2, &hdb2 ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - res = MsiDatabaseCommit( hdb2 ); - ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); - - res = MsiCloseHandle( hdb2 ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - ok( INVALID_FILE_ATTRIBUTES != GetFileAttributes( msifile2 ), "committed database should exist\n"); - - res = MsiOpenDatabase( msifile, MSIDBOPEN_READONLY, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to open database\n" ); - - res = MsiCloseHandle( hdb ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - res = MsiOpenDatabase( msifile, MSIDBOPEN_DIRECT, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to open database\n" ); - - res = MsiCloseHandle( hdb ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - res = MsiOpenDatabase( msifile, MSIDBOPEN_TRANSACT, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to open database\n" ); - - res = MsiCloseHandle( hdb ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - ok( INVALID_FILE_ATTRIBUTES != GetFileAttributes( msifile ), "database should exist\n"); - - /* MSIDBOPEN_CREATE deletes the database if MsiCommitDatabase isn't called */ - res = MsiOpenDatabase( msifile, MSIDBOPEN_CREATE, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to open database\n" ); - - ok( INVALID_FILE_ATTRIBUTES != GetFileAttributes( msifile ), "database should exist\n"); - - res = MsiCloseHandle( hdb ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - ok( INVALID_FILE_ATTRIBUTES == GetFileAttributes( msifile ), "database should exist\n"); - - res = MsiOpenDatabase( msifile, MSIDBOPEN_CREATE, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to open database\n" ); - - res = MsiDatabaseCommit( hdb ); - ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); - - ok( INVALID_FILE_ATTRIBUTES != GetFileAttributes( msifile ), "database should exist\n"); - - res = MsiCloseHandle( hdb ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - res = DeleteFile( msifile2 ); - ok( res == TRUE, "Failed to delete database\n" ); - - res = DeleteFile( msifile ); - ok( res == TRUE, "Failed to delete database\n" ); -} - -static UINT do_query(MSIHANDLE hdb, const char *query, MSIHANDLE *phrec) -{ - MSIHANDLE hview = 0; - UINT r, ret; - - /* open a select query */ - r = MsiDatabaseOpenView(hdb, query, &hview); - if (r != ERROR_SUCCESS) - return r; - r = MsiViewExecute(hview, 0); - if (r != ERROR_SUCCESS) - return r; - ret = MsiViewFetch(hview, phrec); - r = MsiViewClose(hview); - if (r != ERROR_SUCCESS) - return r; - r = MsiCloseHandle(hview); - if (r != ERROR_SUCCESS) - return r; - return ret; -} - -static UINT run_query( MSIHANDLE hdb, MSIHANDLE hrec, const char *query ) -{ - MSIHANDLE hview = 0; - UINT r; - - r = MsiDatabaseOpenView(hdb, query, &hview); - if( r != ERROR_SUCCESS ) - return r; - - r = MsiViewExecute(hview, hrec); - if( r == ERROR_SUCCESS ) - r = MsiViewClose(hview); - MsiCloseHandle(hview); - return r; -} - -static UINT create_component_table( MSIHANDLE hdb ) -{ - return run_query( hdb, 0, - "CREATE TABLE `Component` ( " - "`Component` CHAR(72) NOT NULL, " - "`ComponentId` CHAR(38), " - "`Directory_` CHAR(72) NOT NULL, " - "`Attributes` SHORT NOT NULL, " - "`Condition` CHAR(255), " - "`KeyPath` CHAR(72) " - "PRIMARY KEY `Component`)" ); -} - -static UINT create_feature_components_table( MSIHANDLE hdb ) -{ - return run_query( hdb, 0, - "CREATE TABLE `FeatureComponents` ( " - "`Feature_` CHAR(38) NOT NULL, " - "`Component_` CHAR(72) NOT NULL " - "PRIMARY KEY `Feature_`, `Component_` )" ); -} - -static UINT create_std_dlls_table( MSIHANDLE hdb ) -{ - return run_query( hdb, 0, - "CREATE TABLE `StdDlls` ( " - "`File` CHAR(255) NOT NULL, " - "`Binary_` CHAR(72) NOT NULL " - "PRIMARY KEY `File` )" ); -} - -static UINT create_binary_table( MSIHANDLE hdb ) -{ - return run_query( hdb, 0, - "CREATE TABLE `Binary` ( " - "`Name` CHAR(72) NOT NULL, " - "`Data` CHAR(72) NOT NULL " - "PRIMARY KEY `Name` )" ); -} - -static UINT add_component_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Component` " - "(`Component`, `ComponentId`, `Directory_`, `Attributes`, `Condition`, `KeyPath`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, 0, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_feature_components_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `FeatureComponents` " - "(`Feature_`, `Component_`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, 0, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_std_dlls_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `StdDlls` " - "(`File`, `Binary_`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, 0, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_binary_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Binary` " - "(`Name`, `Data`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, 0, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static void test_msiinsert(void) -{ - MSIHANDLE hdb = 0, hview = 0, hrec = 0; - UINT r; - const char *query; - char buf[80]; - DWORD sz; - - DeleteFile(msifile); - - /* just MsiOpenDatabase should not create a file */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); - - /* create a table */ - query = "CREATE TABLE `phone` ( " - "`id` INT, `name` CHAR(32), `number` CHAR(32) " - "PRIMARY KEY `id`)"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - /* insert a value into it */ - query = "INSERT INTO `phone` ( `id`, `name`, `number` )" - "VALUES('1', 'Abe', '8675309')"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - query = "SELECT * FROM `phone` WHERE `id` = 1"; - r = do_query(hdb, query, &hrec); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); - - /* check the record contains what we put in it */ - r = MsiRecordGetFieldCount(hrec); - ok(r == 3, "record count wrong\n"); - - todo_wine { - r = MsiRecordIsNull(hrec, 0); - ok(r == FALSE, "field 0 not null\n"); - } - - r = MsiRecordGetInteger(hrec, 1); - ok(r == 1, "field 1 contents wrong\n"); - sz = sizeof buf; - r = MsiRecordGetString(hrec, 2, buf, &sz); - ok(r == ERROR_SUCCESS, "field 2 content fetch failed\n"); - ok(!strcmp(buf,"Abe"), "field 2 content incorrect\n"); - sz = sizeof buf; - r = MsiRecordGetString(hrec, 3, buf, &sz); - ok(r == ERROR_SUCCESS, "field 3 content fetch failed\n"); - ok(!strcmp(buf,"8675309"), "field 3 content incorrect\n"); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - /* open a select query */ - hrec = 100; - query = "SELECT * FROM `phone` WHERE `id` >= 10"; - r = do_query(hdb, query, &hrec); - ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); - ok(hrec == 0, "hrec should be null\n"); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - query = "SELECT * FROM `phone` WHERE `id` < 0"; - r = do_query(hdb, query, &hrec); - ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); - - query = "SELECT * FROM `phone` WHERE `id` <= 0"; - r = do_query(hdb, query, &hrec); - ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); - - query = "SELECT * FROM `phone` WHERE `id` <> 1"; - r = do_query(hdb, query, &hrec); - ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); - - query = "SELECT * FROM `phone` WHERE `id` > 10"; - r = do_query(hdb, query, &hrec); - ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n"); - - /* now try a few bad INSERT xqueries */ - query = "INSERT INTO `phone` ( `id`, `name`, `number` )" - "VALUES(?, ?)"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_BAD_QUERY_SYNTAX, "MsiDatabaseOpenView failed\n"); - - /* construct a record to insert */ - hrec = MsiCreateRecord(4); - r = MsiRecordSetInteger(hrec, 1, 2); - ok(r == ERROR_SUCCESS, "MsiRecordSetInteger failed\n"); - r = MsiRecordSetString(hrec, 2, "Adam"); - ok(r == ERROR_SUCCESS, "MsiRecordSetString failed\n"); - r = MsiRecordSetString(hrec, 3, "96905305"); - ok(r == ERROR_SUCCESS, "MsiRecordSetString failed\n"); - - /* insert another value, using a record and wildcards */ - query = "INSERT INTO `phone` ( `id`, `name`, `number` )" - "VALUES(?, ?, ?)"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - - if (r == ERROR_SUCCESS) - { - r = MsiViewExecute(hview, hrec); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - } - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - r = MsiViewFetch(0, NULL); - ok(r == ERROR_INVALID_PARAMETER, "MsiViewFetch failed\n"); - - r = MsiDatabaseCommit(hdb); - ok(r == ERROR_SUCCESS, "MsiDatabaseCommit failed\n"); - - r = MsiCloseHandle(hdb); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - r = DeleteFile(msifile); - ok(r == TRUE, "file didn't exist after commit\n"); -} - -typedef UINT (WINAPI *fnMsiDecomposeDescriptorA)(LPCSTR, LPCSTR, LPSTR, LPSTR, DWORD *); -static fnMsiDecomposeDescriptorA pMsiDecomposeDescriptorA; - -static void test_msidecomposedesc(void) -{ - char prod[MAX_FEATURE_CHARS+1], comp[MAX_FEATURE_CHARS+1], feature[MAX_FEATURE_CHARS+1]; - const char *desc; - UINT r; - DWORD len; - HMODULE hmod; - - hmod = GetModuleHandle("msi.dll"); - pMsiDecomposeDescriptorA = (fnMsiDecomposeDescriptorA) - GetProcAddress(hmod, "MsiDecomposeDescriptorA"); - if (!pMsiDecomposeDescriptorA) - return; - - /* test a valid feature descriptor */ - desc = "']gAVn-}f(ZXfeAR6.jiFollowTheWhiteRabbit>3w2x^IGfe?CxI5heAvk."; - len = 0; - r = pMsiDecomposeDescriptorA(desc, prod, feature, comp, &len); - ok(r == ERROR_SUCCESS, "returned an error\n"); - ok(len == strlen(desc), "length was wrong\n"); - ok(strcmp(prod,"{90110409-6000-11D3-8CFE-0150048383C9}")==0, "product wrong\n"); - ok(strcmp(feature,"FollowTheWhiteRabbit")==0, "feature wrong\n"); - ok(strcmp(comp,"{A7CD68DB-EF74-49C8-FBB2-A7C463B2AC24}")==0,"component wrong\n"); - - /* test an invalid feature descriptor with too many characters */ - desc = "']gAVn-}f(ZXfeAR6.ji" - "ThisWillFailIfTheresMoreThanAGuidsChars>" - "3w2x^IGfe?CxI5heAvk."; - len = 0; - r = pMsiDecomposeDescriptorA(desc, prod, feature, comp, &len); - ok(r == ERROR_INVALID_PARAMETER, "returned wrong error\n"); - - /* - * Test a valid feature descriptor with the - * maximum number of characters and some trailing characters. - */ - desc = "']gAVn-}f(ZXfeAR6.ji" - "ThisWillWorkIfTheresLTEThanAGuidsChars>" - "3w2x^IGfe?CxI5heAvk." - "extra"; - len = 0; - r = pMsiDecomposeDescriptorA(desc, prod, feature, comp, &len); - ok(r == ERROR_SUCCESS, "returned wrong error\n"); - ok(len == (strlen(desc) - strlen("extra")), "length wrong\n"); - - len = 0; - r = pMsiDecomposeDescriptorA(desc, prod, feature, NULL, &len); - ok(r == ERROR_SUCCESS, "returned wrong error\n"); - ok(len == (strlen(desc) - strlen("extra")), "length wrong\n"); - - len = 0; - r = pMsiDecomposeDescriptorA(desc, prod, NULL, NULL, &len); - ok(r == ERROR_SUCCESS, "returned wrong error\n"); - ok(len == (strlen(desc) - strlen("extra")), "length wrong\n"); - - len = 0; - r = pMsiDecomposeDescriptorA(desc, NULL, NULL, NULL, &len); - ok(r == ERROR_SUCCESS, "returned wrong error\n"); - ok(len == (strlen(desc) - strlen("extra")), "length wrong\n"); - - len = 0; - r = pMsiDecomposeDescriptorA(NULL, NULL, NULL, NULL, &len); - ok(r == ERROR_INVALID_PARAMETER, "returned wrong error\n"); - ok(len == 0, "length wrong\n"); -} - -static UINT try_query_param( MSIHANDLE hdb, LPCSTR szQuery, MSIHANDLE hrec ) -{ - MSIHANDLE htab = 0; - UINT res; - - res = MsiDatabaseOpenView( hdb, szQuery, &htab ); - if(res == ERROR_SUCCESS ) - { - UINT r; - - r = MsiViewExecute( htab, hrec ); - if(r != ERROR_SUCCESS ) - res = r; - - r = MsiViewClose( htab ); - if(r != ERROR_SUCCESS ) - res = r; - - r = MsiCloseHandle( htab ); - if(r != ERROR_SUCCESS ) - res = r; - } - return res; -} - -static UINT try_query( MSIHANDLE hdb, LPCSTR szQuery ) -{ - return try_query_param( hdb, szQuery, 0 ); -} - -static UINT try_insert_query( MSIHANDLE hdb, LPCSTR szQuery ) -{ - MSIHANDLE hrec = 0; - UINT r; - - hrec = MsiCreateRecord( 1 ); - MsiRecordSetString( hrec, 1, "Hello"); - - r = try_query_param( hdb, szQuery, hrec ); - - MsiCloseHandle( hrec ); - return r; -} - -static void test_msibadqueries(void) -{ - MSIHANDLE hdb = 0; - UINT r; - - DeleteFile(msifile); - - /* just MsiOpenDatabase should not create a file */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); - - r = MsiDatabaseCommit( hdb ); - ok(r == ERROR_SUCCESS , "Failed to commit database\n"); - - r = MsiCloseHandle( hdb ); - ok(r == ERROR_SUCCESS , "Failed to close database\n"); - - /* open it readonly */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_READONLY, &hdb ); - ok(r == ERROR_SUCCESS , "Failed to open database r/o\n"); - - /* add a table to it */ - r = try_query( hdb, "select * from _Tables"); - ok(r == ERROR_SUCCESS , "query 1 failed\n"); - - r = MsiCloseHandle( hdb ); - ok(r == ERROR_SUCCESS , "Failed to close database r/o\n"); - - /* open it read/write */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_TRANSACT, &hdb ); - ok(r == ERROR_SUCCESS , "Failed to open database r/w\n"); - - /* a bunch of test queries that fail with the native MSI */ - - r = try_query( hdb, "CREATE TABLE"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2a return code\n"); - - r = try_query( hdb, "CREATE TABLE `a`"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2b return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` ()"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2c return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b`)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2d return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) )"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2e return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2f return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL PRIMARY)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2g return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL PRIMARY KEY)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2h return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL PRIMARY KEY)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2i return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL PRIMARY KEY 'b')"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2j return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL PRIMARY KEY `b')"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2k return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL PRIMARY KEY `b')"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2l return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHA(72) NOT NULL PRIMARY KEY `b`)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2m return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(-1) NOT NULL PRIMARY KEY `b`)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2n return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(720) NOT NULL PRIMARY KEY `b`)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2o return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL KEY `b`)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2p return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`` CHAR(72) NOT NULL PRIMARY KEY `b`)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "invalid query 2p return code\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL PRIMARY KEY `b`)"); - ok(r == ERROR_SUCCESS , "valid query 2z failed\n"); - - r = try_query( hdb, "CREATE TABLE `a` (`b` CHAR(72) NOT NULL PRIMARY KEY `b`)"); - ok(r == ERROR_BAD_QUERY_SYNTAX , "created same table again\n"); - - r = try_query( hdb, "CREATE TABLE `aa` (`b` CHAR(72) NOT NULL, `c` " - "CHAR(72), `d` CHAR(255) NOT NULL LOCALIZABLE PRIMARY KEY `b`)"); - ok(r == ERROR_SUCCESS , "query 4 failed\n"); - - r = MsiDatabaseCommit( hdb ); - ok(r == ERROR_SUCCESS , "Failed to commit database after write\n"); - - r = try_query( hdb, "CREATE TABLE `blah` (`foo` CHAR(72) NOT NULL " - "PRIMARY KEY `foo`)"); - ok(r == ERROR_SUCCESS , "query 4 failed\n"); - - r = try_insert_query( hdb, "insert into a ( `b` ) VALUES ( ? )"); - ok(r == ERROR_SUCCESS , "failed to insert record in db\n"); - - r = MsiDatabaseCommit( hdb ); - ok(r == ERROR_SUCCESS , "Failed to commit database after write\n"); - - r = try_query( hdb, "CREATE TABLE `boo` (`foo` CHAR(72) NOT NULL " - "PRIMARY KEY `ba`)"); - ok(r != ERROR_SUCCESS , "query 5 succeeded\n"); - - r = try_query( hdb,"CREATE TABLE `bee` (`foo` CHAR(72) NOT NULL )"); - ok(r != ERROR_SUCCESS , "query 6 succeeded\n"); - - r = try_query( hdb, "CREATE TABLE `temp` (`t` CHAR(72) NOT NULL " - "PRIMARY KEY `t`)"); - ok(r == ERROR_SUCCESS , "query 7 failed\n"); - - r = try_query( hdb, "CREATE TABLE `c` (`b` CHAR NOT NULL PRIMARY KEY `b`)"); - ok(r == ERROR_SUCCESS , "query 8 failed\n"); - - r = try_query( hdb, "select * from c"); - ok(r == ERROR_SUCCESS , "query failed\n"); - - r = try_query( hdb, "select * from c where b = 'x"); - todo_wine ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n"); - - r = try_query( hdb, "select * from 'c'"); - ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n"); - - r = try_query( hdb, "select * from ''"); - ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n"); - - r = try_query( hdb, "select * from c where b = x"); - ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n"); - - r = try_query( hdb, "select * from c where b = \"x\""); - ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n"); - - r = try_query( hdb, "select * from c where b = 'x'"); - ok(r == ERROR_SUCCESS, "query failed\n"); - - r = try_query( hdb, "select * from c where b = '\"x'"); - ok(r == ERROR_SUCCESS, "query failed\n"); - - if (0) /* FIXME: this query causes trouble with other tests */ - { - r = try_query( hdb, "select * from c where b = '\\\'x'"); - ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n"); - } - - r = try_query( hdb, "select * from 'c'"); - ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n"); - - r = MsiCloseHandle( hdb ); - ok(r == ERROR_SUCCESS , "Failed to close database transact\n"); - - r = DeleteFile( msifile ); - ok(r == TRUE, "file didn't exist after commit\n"); -} - -static void test_viewmodify(void) -{ - MSIHANDLE hdb = 0, hview = 0, hrec = 0; - UINT r; - MSIDBERROR err; - const char *query; - char buffer[0x100]; - DWORD sz; - - DeleteFile(msifile); - - /* just MsiOpenDatabase should not create a file */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); - - query = "CREATE TABLE `phone` ( " - "`id` INT, `name` CHAR(32), `number` CHAR(32) " - "PRIMARY KEY `id`)"; - r = run_query( hdb, 0, query ); - ok(r == ERROR_SUCCESS, "query failed\n"); - - /* check what the error function reports without doing anything */ - sz = 0; - /* passing NULL as the 3rd param make function to crash on older platforms */ - err = MsiViewGetError( 0, NULL, &sz ); - ok(err == MSIDBERROR_INVALIDARG, "MsiViewGetError return\n"); - - /* open a view */ - query = "SELECT * FROM `phone`"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - - /* see what happens with a good hview and bad args */ - err = MsiViewGetError( hview, NULL, NULL ); - ok(err == MSIDBERROR_INVALIDARG || err == MSIDBERROR_NOERROR, - "MsiViewGetError returns %u (expected -3)\n", err); - err = MsiViewGetError( hview, buffer, NULL ); - ok(err == MSIDBERROR_INVALIDARG, "MsiViewGetError return\n"); - - /* see what happens with a zero length buffer */ - sz = 0; - buffer[0] = 'x'; - err = MsiViewGetError( hview, buffer, &sz ); - ok(err == MSIDBERROR_MOREDATA, "MsiViewGetError return\n"); - ok(buffer[0] == 'x', "buffer cleared\n"); - ok(sz == 0, "size not zero\n"); - - /* ok this one is strange */ - sz = 0; - err = MsiViewGetError( hview, NULL, &sz ); - ok(err == MSIDBERROR_NOERROR, "MsiViewGetError return\n"); - ok(sz == 0, "size not zero\n"); - - /* see if it really has an error */ - sz = sizeof buffer; - buffer[0] = 'x'; - err = MsiViewGetError( hview, buffer, &sz ); - ok(err == MSIDBERROR_NOERROR, "MsiViewGetError return\n"); - ok(buffer[0] == 0, "buffer not cleared\n"); - ok(sz == 0, "size not zero\n"); - - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - - /* try some invalid records */ - r = MsiViewModify(hview, MSIMODIFY_INSERT, 0 ); - ok(r == ERROR_INVALID_HANDLE, "MsiViewModify failed\n"); - r = MsiViewModify(hview, -1, 0 ); - ok(r == ERROR_INVALID_HANDLE, "MsiViewModify failed\n"); - - /* try an small record */ - hrec = MsiCreateRecord(1); - r = MsiViewModify(hview, -1, hrec ); - ok(r == ERROR_INVALID_DATA, "MsiViewModify failed\n"); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "failed to close record\n"); - - /* insert a valid record */ - hrec = MsiCreateRecord(3); - - r = MsiRecordSetInteger(hrec, 1, 1); - ok(r == ERROR_SUCCESS, "failed to set integer\n"); - r = MsiRecordSetString(hrec, 2, "bob"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - r = MsiRecordSetString(hrec, 3, "7654321"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewModify(hview, MSIMODIFY_INSERT_TEMPORARY, hrec ); - ok(r == ERROR_SUCCESS, "MsiViewModify failed\n"); - - /* insert the same thing again */ - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - - /* should fail ... */ - r = MsiViewModify(hview, MSIMODIFY_INSERT_TEMPORARY, hrec ); - ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n"); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "failed to close record\n"); - - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - query = "SELECT * FROM `phone`"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - - r = MsiViewFetch(hview, &hrec); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); - - r = MsiRecordGetInteger(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - - sz = sizeof(buffer); - r = MsiRecordGetString(hrec, 2, buffer, &sz); - ok(r == ERROR_SUCCESS, "MsiRecordGetString failed\n"); - ok(!lstrcmp(buffer, "bob"), "Expected bob, got %s\n", buffer); - - sz = sizeof(buffer); - r = MsiRecordGetString(hrec, 3, buffer, &sz); - ok(r == ERROR_SUCCESS, "MsiRecordGetString failed\n"); - ok(!lstrcmp(buffer, "7654321"), "Expected 7654321, got %s\n", buffer); - - /* update the view, non-primary key */ - r = MsiRecordSetString(hrec, 3, "3141592"); - ok(r == ERROR_SUCCESS, "MsiRecordSetString failed\n"); - - r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - ok(r == ERROR_SUCCESS, "MsiViewModify failed\n"); - - /* do it again */ - r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r); - - /* update the view, primary key */ - r = MsiRecordSetInteger(hrec, 1, 5); - ok(r == ERROR_SUCCESS, "MsiRecordSetInteger failed\n"); - - r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n"); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "failed to close record\n"); - - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - query = "SELECT * FROM `phone`"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - - r = MsiViewFetch(hview, &hrec); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); - - r = MsiRecordGetInteger(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - - sz = sizeof(buffer); - r = MsiRecordGetString(hrec, 2, buffer, &sz); - ok(r == ERROR_SUCCESS, "MsiRecordGetString failed\n"); - ok(!lstrcmp(buffer, "bob"), "Expected bob, got %s\n", buffer); - - sz = sizeof(buffer); - r = MsiRecordGetString(hrec, 3, buffer, &sz); - ok(r == ERROR_SUCCESS, "MsiRecordGetString failed\n"); - ok(!lstrcmp(buffer, "3141592"), "Expected 3141592, got %s\n", buffer); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "failed to close record\n"); - - /* use a record that doesn't come from a view fetch */ - hrec = MsiCreateRecord(3); - ok(hrec != 0, "MsiCreateRecord failed\n"); - - r = MsiRecordSetInteger(hrec, 1, 3); - ok(r == ERROR_SUCCESS, "failed to set integer\n"); - r = MsiRecordSetString(hrec, 2, "jane"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - r = MsiRecordSetString(hrec, 3, "112358"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - - r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - ok(r == ERROR_FUNCTION_FAILED, "Expected ERROR_FUNCTION_FAILED, got %d\n", r); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "failed to close record\n"); - - /* use a record that doesn't come from a view fetch, primary key matches */ - hrec = MsiCreateRecord(3); - ok(hrec != 0, "MsiCreateRecord failed\n"); - - r = MsiRecordSetInteger(hrec, 1, 1); - ok(r == ERROR_SUCCESS, "failed to set integer\n"); - r = MsiRecordSetString(hrec, 2, "jane"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - r = MsiRecordSetString(hrec, 3, "112358"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - - r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - todo_wine - { - ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n"); - } - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "failed to close record\n"); - - hrec = MsiCreateRecord(3); - - r = MsiRecordSetInteger(hrec, 1, 2); - ok(r == ERROR_SUCCESS, "failed to set integer\n"); - r = MsiRecordSetString(hrec, 2, "nick"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - r = MsiRecordSetString(hrec, 3, "141421"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewModify(hview, MSIMODIFY_INSERT_TEMPORARY, hrec ); - ok(r == ERROR_SUCCESS, "MsiViewModify failed\n"); - - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - query = "SELECT * FROM `phone` WHERE `id` = 1"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewFetch(hview, &hrec); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); - - /* change the id to match the second row */ - r = MsiRecordSetInteger(hrec, 1, 2); - ok(r == ERROR_SUCCESS, "failed to set integer\n"); - r = MsiRecordSetString(hrec, 2, "jerry"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - - r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n"); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "failed to close record\n"); - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - /* broader search */ - query = "SELECT * FROM `phone` ORDER BY `id`"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewFetch(hview, &hrec); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); - - /* change the id to match the second row */ - r = MsiRecordSetInteger(hrec, 1, 2); - ok(r == ERROR_SUCCESS, "failed to set integer\n"); - r = MsiRecordSetString(hrec, 2, "jerry"); - ok(r == ERROR_SUCCESS, "failed to set string\n"); - - r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n"); - - r = MsiCloseHandle(hrec); - ok(r == ERROR_SUCCESS, "failed to close record\n"); - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - r = MsiCloseHandle( hdb ); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase close failed\n"); -} - -static MSIHANDLE create_db(void) -{ - MSIHANDLE hdb = 0; - UINT res; - - DeleteFile(msifile); - - /* create an empty database */ - res = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to create database\n" ); - if( res != ERROR_SUCCESS ) - return hdb; - - res = MsiDatabaseCommit( hdb ); - ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); - - return hdb; -} - -static void test_getcolinfo(void) -{ - MSIHANDLE hdb, hview = 0, rec = 0; - UINT r; - DWORD sz; - char buffer[0x20]; - - /* create an empty db */ - hdb = create_db(); - ok( hdb, "failed to create db\n"); - - /* tables should be present */ - r = MsiDatabaseOpenView(hdb, "select * from _Tables", &hview); - ok( r == ERROR_SUCCESS, "failed to open query\n"); - - r = MsiViewExecute(hview, 0); - ok( r == ERROR_SUCCESS, "failed to execute query\n"); - - /* check that NAMES works */ - rec = 0; - r = MsiViewGetColumnInfo( hview, MSICOLINFO_NAMES, &rec ); - ok( r == ERROR_SUCCESS, "failed to get names\n"); - sz = sizeof buffer; - r = MsiRecordGetString(rec, 1, buffer, &sz ); - ok( r == ERROR_SUCCESS, "failed to get string\n"); - ok( !strcmp(buffer,"Name"), "_Tables has wrong column name\n"); - r = MsiCloseHandle( rec ); - ok( r == ERROR_SUCCESS, "failed to close record handle\n"); - - /* check that TYPES works */ - rec = 0; - r = MsiViewGetColumnInfo( hview, MSICOLINFO_TYPES, &rec ); - ok( r == ERROR_SUCCESS, "failed to get names\n"); - sz = sizeof buffer; - r = MsiRecordGetString(rec, 1, buffer, &sz ); - ok( r == ERROR_SUCCESS, "failed to get string\n"); - ok( !strcmp(buffer,"s64"), "_Tables has wrong column type\n"); - r = MsiCloseHandle( rec ); - ok( r == ERROR_SUCCESS, "failed to close record handle\n"); - - /* check that invalid values fail */ - rec = 0; - r = MsiViewGetColumnInfo( hview, 100, &rec ); - ok( r == ERROR_INVALID_PARAMETER, "wrong error code\n"); - ok( rec == 0, "returned a record\n"); - - r = MsiViewGetColumnInfo( hview, MSICOLINFO_TYPES, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong error code\n"); - - r = MsiViewGetColumnInfo( 0, MSICOLINFO_TYPES, &rec ); - ok( r == ERROR_INVALID_HANDLE, "wrong error code\n"); - - r = MsiViewClose(hview); - ok( r == ERROR_SUCCESS, "failed to close view\n"); - r = MsiCloseHandle(hview); - ok( r == ERROR_SUCCESS, "failed to close view handle\n"); - r = MsiCloseHandle(hdb); - ok( r == ERROR_SUCCESS, "failed to close database\n"); -} - -static MSIHANDLE get_column_info(MSIHANDLE hdb, const char *query, MSICOLINFO type) -{ - MSIHANDLE hview = 0, rec = 0; - UINT r; - - r = MsiDatabaseOpenView(hdb, query, &hview); - if( r != ERROR_SUCCESS ) - return r; - - r = MsiViewExecute(hview, 0); - if( r == ERROR_SUCCESS ) - { - MsiViewGetColumnInfo( hview, type, &rec ); - MsiViewClose(hview); - } - MsiCloseHandle(hview); - return rec; -} - -static UINT get_columns_table_type(MSIHANDLE hdb, const char *table, UINT field) -{ - MSIHANDLE hview = 0, rec = 0; - UINT r, type = 0; - char query[0x100]; - - sprintf(query, "select * from `_Columns` where `Table` = '%s'", table ); - - r = MsiDatabaseOpenView(hdb, query, &hview); - if( r != ERROR_SUCCESS ) - return r; - - r = MsiViewExecute(hview, 0); - if( r == ERROR_SUCCESS ) - { - while (1) - { - r = MsiViewFetch( hview, &rec ); - if( r != ERROR_SUCCESS) - break; - r = MsiRecordGetInteger( rec, 2 ); - if (r == field) - type = MsiRecordGetInteger( rec, 4 ); - MsiCloseHandle( rec ); - } - - MsiViewClose(hview); - } - MsiCloseHandle(hview); - return type; -} - -static BOOL check_record( MSIHANDLE rec, UINT field, LPCSTR val ) -{ - CHAR buffer[0x20]; - UINT r; - DWORD sz; - - sz = sizeof buffer; - r = MsiRecordGetString( rec, field, buffer, &sz ); - return (r == ERROR_SUCCESS ) && !strcmp(val, buffer); -} - -static void test_viewgetcolumninfo(void) -{ - MSIHANDLE hdb = 0, rec; - UINT r; - - hdb = create_db(); - ok( hdb, "failed to create db\n"); - - r = run_query( hdb, 0, - "CREATE TABLE `Properties` " - "( `Property` CHAR(255), `Value` CHAR(1) PRIMARY KEY `Property`)" ); - ok( r == ERROR_SUCCESS , "Failed to create table\n" ); - - /* check the column types */ - rec = get_column_info( hdb, "select * from `Properties`", MSICOLINFO_TYPES ); - ok( rec, "failed to get column info record\n" ); - - ok( check_record( rec, 1, "S255"), "wrong record type\n"); - ok( check_record( rec, 2, "S1"), "wrong record type\n"); - - MsiCloseHandle( rec ); - - /* check the type in _Columns */ - ok( 0x3dff == get_columns_table_type(hdb, "Properties", 1 ), "_columns table wrong\n"); - ok( 0x1d01 == get_columns_table_type(hdb, "Properties", 2 ), "_columns table wrong\n"); - - /* now try the names */ - rec = get_column_info( hdb, "select * from `Properties`", MSICOLINFO_NAMES ); - ok( rec, "failed to get column info record\n" ); - - ok( check_record( rec, 1, "Property"), "wrong record type\n"); - ok( check_record( rec, 2, "Value"), "wrong record type\n"); - - MsiCloseHandle( rec ); - - r = run_query( hdb, 0, - "CREATE TABLE `Binary` " - "( `Name` CHAR(255), `Data` OBJECT PRIMARY KEY `Name`)" ); - ok( r == ERROR_SUCCESS , "Failed to create table\n" ); - - /* check the column types */ - rec = get_column_info( hdb, "select * from `Binary`", MSICOLINFO_TYPES ); - ok( rec, "failed to get column info record\n" ); - - ok( check_record( rec, 1, "S255"), "wrong record type\n"); - ok( check_record( rec, 2, "V0"), "wrong record type\n"); - - MsiCloseHandle( rec ); - - /* check the type in _Columns */ - ok( 0x3dff == get_columns_table_type(hdb, "Binary", 1 ), "_columns table wrong\n"); - ok( 0x1900 == get_columns_table_type(hdb, "Binary", 2 ), "_columns table wrong\n"); - - /* now try the names */ - rec = get_column_info( hdb, "select * from `Binary`", MSICOLINFO_NAMES ); - ok( rec, "failed to get column info record\n" ); - - ok( check_record( rec, 1, "Name"), "wrong record type\n"); - ok( check_record( rec, 2, "Data"), "wrong record type\n"); - MsiCloseHandle( rec ); - - r = run_query( hdb, 0, - "CREATE TABLE `UIText` " - "( `Key` CHAR(72) NOT NULL, `Text` CHAR(255) LOCALIZABLE PRIMARY KEY `Key`)" ); - ok( r == ERROR_SUCCESS , "Failed to create table\n" ); - - ok( 0x2d48 == get_columns_table_type(hdb, "UIText", 1 ), "_columns table wrong\n"); - ok( 0x1fff == get_columns_table_type(hdb, "UIText", 2 ), "_columns table wrong\n"); - - rec = get_column_info( hdb, "select * from `UIText`", MSICOLINFO_NAMES ); - ok( rec, "failed to get column info record\n" ); - ok( check_record( rec, 1, "Key"), "wrong record type\n"); - ok( check_record( rec, 2, "Text"), "wrong record type\n"); - MsiCloseHandle( rec ); - - rec = get_column_info( hdb, "select * from `UIText`", MSICOLINFO_TYPES ); - ok( rec, "failed to get column info record\n" ); - ok( check_record( rec, 1, "s72"), "wrong record type\n"); - ok( check_record( rec, 2, "L255"), "wrong record type\n"); - MsiCloseHandle( rec ); - - MsiCloseHandle( hdb ); -} - -static void test_msiexport(void) -{ - MSIHANDLE hdb = 0, hview = 0; - UINT r; - const char *query; - char path[MAX_PATH]; - const char file[] = "phone.txt"; - HANDLE handle; - char buffer[0x100]; - DWORD length; - const char expected[] = - "id\tname\tnumber\r\n" - "I2\tS32\tS32\r\n" - "phone\tid\r\n" - "1\tAbe\t8675309\r\n"; - - DeleteFile(msifile); - - /* just MsiOpenDatabase should not create a file */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); - - /* create a table */ - query = "CREATE TABLE `phone` ( " - "`id` INT, `name` CHAR(32), `number` CHAR(32) " - "PRIMARY KEY `id`)"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - /* insert a value into it */ - query = "INSERT INTO `phone` ( `id`, `name`, `number` )" - "VALUES('1', 'Abe', '8675309')"; - r = MsiDatabaseOpenView(hdb, query, &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - r = MsiViewClose(hview); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(hview); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - GetCurrentDirectory(MAX_PATH, path); - - r = MsiDatabaseExport(hdb, "phone", path, file); - ok(r == ERROR_SUCCESS, "MsiDatabaseExport failed\n"); - - MsiCloseHandle(hdb); - - lstrcat(path, "\\"); - lstrcat(path, file); - - /* check the data that was written */ - length = 0; - memset(buffer, 0, sizeof buffer); - handle = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); - if (handle != INVALID_HANDLE_VALUE) - { - ReadFile(handle, buffer, sizeof buffer, &length, NULL); - CloseHandle(handle); - DeleteFile(path); - } - else - ok(0, "failed to open file %s\n", path); - - ok( length == strlen(expected), "length of data wrong\n"); - ok( !lstrcmp(buffer, expected), "data doesn't match\n"); - DeleteFile(msifile); -} - -static void test_longstrings(void) -{ - const char insert_query[] = - "INSERT INTO `strings` ( `id`, `val` ) VALUES('1', 'Z')"; - char *str; - MSIHANDLE hdb = 0, hview = 0, hrec = 0; - DWORD len; - UINT r; - const DWORD STRING_LENGTH = 0x10005; - - DeleteFile(msifile); - /* just MsiOpenDatabase should not create a file */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); - - /* create a table */ - r = try_query( hdb, - "CREATE TABLE `strings` ( `id` INT, `val` CHAR(0) PRIMARY KEY `id`)"); - ok(r == ERROR_SUCCESS, "query failed\n"); - - /* try a insert a very long string */ - str = HeapAlloc(GetProcessHeap(), 0, STRING_LENGTH+sizeof insert_query); - len = strchr(insert_query, 'Z') - insert_query; - strcpy(str, insert_query); - memset(str+len, 'Z', STRING_LENGTH); - strcpy(str+len+STRING_LENGTH, insert_query+len+1); - r = try_query( hdb, str ); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - - HeapFree(GetProcessHeap(), 0, str); - - MsiDatabaseCommit(hdb); - ok(r == ERROR_SUCCESS, "MsiDatabaseCommit failed\n"); - MsiCloseHandle(hdb); - - r = MsiOpenDatabase(msifile, MSIDBOPEN_READONLY, &hdb); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); - - r = MsiDatabaseOpenView(hdb, "select * from `strings` where `id` = 1", &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - - r = MsiViewFetch(hview, &hrec); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); - - MsiCloseHandle(hview); - - r = MsiRecordGetString(hrec, 2, NULL, &len); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); - ok(len == STRING_LENGTH, "string length wrong\n"); - - MsiCloseHandle(hrec); - MsiCloseHandle(hdb); - DeleteFile(msifile); -} - -static void create_file(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); -} - -static void test_streamtable(void) -{ - MSIHANDLE hdb = 0, rec, view; - char file[MAX_PATH]; - char buf[MAX_PATH]; - DWORD size; - UINT r; - - hdb = create_db(); - ok( hdb, "failed to create db\n"); - - r = run_query( hdb, 0, - "CREATE TABLE `Properties` " - "( `Property` CHAR(255), `Value` CHAR(1) PRIMARY KEY `Property`)" ); - ok( r == ERROR_SUCCESS , "Failed to create table\n" ); - - r = run_query( hdb, 0, - "INSERT INTO `Properties` " - "( `Value`, `Property` ) VALUES ( 'Prop', 'value' )" ); - ok( r == ERROR_SUCCESS, "Failed to add to table\n" ); - - r = MsiDatabaseCommit( hdb ); - ok( r == ERROR_SUCCESS , "Failed to commit database\n" ); - - MsiCloseHandle( hdb ); - - r = MsiOpenDatabase(msifile, MSIDBOPEN_TRANSACT, &hdb ); - ok( r == ERROR_SUCCESS , "Failed to open database\n" ); - - /* check the column types */ - rec = get_column_info( hdb, "select * from `_Streams`", MSICOLINFO_TYPES ); - ok( rec, "failed to get column info record\n" ); - - ok( check_record( rec, 1, "s62"), "wrong record type\n"); - ok( check_record( rec, 2, "V0"), "wrong record type\n"); - - MsiCloseHandle( rec ); - - /* now try the names */ - rec = get_column_info( hdb, "select * from `_Streams`", MSICOLINFO_NAMES ); - ok( rec, "failed to get column info record\n" ); - - ok( check_record( rec, 1, "Name"), "wrong record type\n"); - ok( check_record( rec, 2, "Data"), "wrong record type\n"); - - MsiCloseHandle( rec ); - - /* insert a file into the _Streams table */ - create_file( "test.txt" ); - - rec = MsiCreateRecord( 2 ); - MsiRecordSetString( rec, 1, "data" ); - - r = MsiRecordSetStream( rec, 2, "test.txt" ); - ok( r == ERROR_SUCCESS, "Failed to add stream data to the record: %d\n", r); - - DeleteFile("test.txt"); - - r = MsiDatabaseOpenView( hdb, - "INSERT INTO `_Streams` ( `Name`, `Data` ) VALUES ( ?, ? )", &view ); - ok( r == ERROR_SUCCESS, "Failed to open database view: %d\n", r); - - r = MsiViewExecute( view, rec ); - ok( r == ERROR_SUCCESS, "Failed to execute view: %d\n", r); - - MsiCloseHandle( rec ); - MsiCloseHandle( view ); - - r = MsiDatabaseOpenView( hdb, - "SELECT `Name`, `Data` FROM `_Streams`", &view ); - ok( r == ERROR_SUCCESS, "Failed to open database view: %d\n", r); - - r = MsiViewExecute( view, 0 ); - ok( r == ERROR_SUCCESS, "Failed to execute view: %d\n", r); - - r = MsiViewFetch( view, &rec ); - ok( r == ERROR_SUCCESS, "Failed to fetch record: %d\n", r); - - size = MAX_PATH; - r = MsiRecordGetString( rec, 1, file, &size ); - ok( r == ERROR_SUCCESS, "Failed to get string: %d\n", r); - ok( !lstrcmp(file, "data"), "Expected 'data', got %s\n", file); - - size = MAX_PATH; - memset(buf, 0, MAX_PATH); - r = MsiRecordReadStream( rec, 2, buf, &size ); - ok( r == ERROR_SUCCESS, "Failed to get stream: %d\n", r); - ok( !lstrcmp(buf, "test.txt\n"), "Expected 'test.txt\\n', got %s\n", buf); - - MsiCloseHandle( rec ); - - r = MsiViewFetch( view, &rec ); - ok( r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - - MsiCloseHandle( view ); - MsiCloseHandle( hdb ); - DeleteFile(msifile); -} - -static void test_where(void) -{ - MSIHANDLE hdb = 0, rec, view; - LPCSTR query; - UINT r; - DWORD size; - CHAR buf[MAX_PATH]; - UINT count; - - hdb = create_db(); - ok( hdb, "failed to create db\n"); - - r = run_query( hdb, 0, - "CREATE TABLE `Media` (" - "`DiskId` SHORT NOT NULL, " - "`LastSequence` LONG, " - "`DiskPrompt` CHAR(64) LOCALIZABLE, " - "`Cabinet` CHAR(255), " - "`VolumeLabel` CHAR(32), " - "`Source` CHAR(72) " - "PRIMARY KEY `DiskId`)" ); - ok( r == S_OK, "cannot create Media table: %d\n", r ); - - r = run_query( hdb, 0, "INSERT INTO `Media` " - "( `DiskId`, `LastSequence`, `DiskPrompt`, `Cabinet`, `VolumeLabel`, `Source` ) " - "VALUES ( 1, 0, '', 'zero.cab', '', '' )" ); - ok( r == S_OK, "cannot add file to the Media table: %d\n", r ); - - r = run_query( hdb, 0, "INSERT INTO `Media` " - "( `DiskId`, `LastSequence`, `DiskPrompt`, `Cabinet`, `VolumeLabel`, `Source` ) " - "VALUES ( 2, 1, '', 'one.cab', '', '' )" ); - ok( r == S_OK, "cannot add file to the Media table: %d\n", r ); - - r = run_query( hdb, 0, "INSERT INTO `Media` " - "( `DiskId`, `LastSequence`, `DiskPrompt`, `Cabinet`, `VolumeLabel`, `Source` ) " - "VALUES ( 3, 2, '', 'two.cab', '', '' )" ); - ok( r == S_OK, "cannot add file to the Media table: %d\n", r ); - - query = "SELECT * FROM `Media`"; - r = do_query(hdb, query, &rec); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed: %d\n", r); - ok( check_record( rec, 4, "zero.cab"), "wrong cabinet\n"); - MsiCloseHandle( rec ); - - query = "SELECT * FROM `Media` WHERE `LastSequence` >= 1"; - r = do_query(hdb, query, &rec); - ok(r == ERROR_SUCCESS, "MsiViewFetch failed: %d\n", r); - ok( check_record( rec, 4, "one.cab"), "wrong cabinet\n"); - - r = MsiRecordGetInteger(rec, 1); - ok( 2 == r, "field wrong\n"); - r = MsiRecordGetInteger(rec, 2); - ok( 1 == r, "field wrong\n"); - MsiCloseHandle( rec ); - - query = "SELECT `DiskId` FROM `Media` WHERE `LastSequence` >= 1 AND DiskId >= 0"; - r = MsiDatabaseOpenView(hdb, query, &view); - ok( r == ERROR_SUCCESS, "failed to open view: %d\n", r ); - - r = MsiViewExecute(view, 0); - ok( r == ERROR_SUCCESS, "failed to execute view: %d\n", r ); - - r = MsiViewFetch(view, &rec); - ok( r == ERROR_SUCCESS, "failed to fetch view: %d\n", r ); - - count = MsiRecordGetFieldCount( rec ); - ok( count == 1, "Expected 1 record fields, got %d\n", count ); - - size = MAX_PATH; - r = MsiRecordGetString( rec, 1, buf, &size ); - ok( r == ERROR_SUCCESS, "failed to get record string: %d\n", r ); - ok( !lstrcmp( buf, "2" ), - "For (row %d, column 1) expected '%d', got %s\n", 0, 2, buf ); - MsiCloseHandle( rec ); - - r = MsiViewFetch(view, &rec); - ok( r == ERROR_SUCCESS, "failed to fetch view: %d\n", r ); - - size = MAX_PATH; - r = MsiRecordGetString( rec, 1, buf, &size ); - ok( r == ERROR_SUCCESS, "failed to get record string: %d\n", r ); - ok( !lstrcmp( buf, "3" ), - "For (row %d, column 1) expected '%d', got %s\n", 1, 3, buf ); - MsiCloseHandle( rec ); - - r = MsiViewFetch(view, &rec); - ok( r == ERROR_NO_MORE_ITEMS, "expected no more items: %d\n", r ); - - MsiViewClose(view); - MsiCloseHandle(view); - - MsiCloseHandle( rec ); - - rec = 0; - query = "SELECT * FROM `Media` WHERE `DiskPrompt` IS NULL"; - r = do_query(hdb, query, &rec); - ok( r == ERROR_SUCCESS, "query failed: %d\n", r ); - MsiCloseHandle( rec ); - - rec = MsiCreateRecord(1); - MsiRecordSetString(rec, 1, ""); - - query = "SELECT * FROM `Media` WHERE `DiskPrompt` = ?"; - r = MsiDatabaseOpenView(hdb, query, &view); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - r = MsiViewExecute(view, rec); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - MsiCloseHandle(rec); - - r = MsiViewFetch(view, &rec); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - MsiCloseHandle(rec); - MsiViewClose(view); - MsiCloseHandle(view); - - MsiCloseHandle( hdb ); - DeleteFile(msifile); -} - -static CHAR CURR_DIR[MAX_PATH]; - -static const CHAR test_data[] = "FirstPrimaryColumn\tSecondPrimaryColumn\tShortInt\tShortIntNullable\tLongInt\tLongIntNullable\tString\tLocalizableString\tLocalizableStringNullable\n" - "s255\ti2\ti2\tI2\ti4\tI4\tS255\tS0\ts0\n" - "TestTable\tFirstPrimaryColumn\n" - "stringage\t5\t2\t\t2147483640\t-2147483640\tanother string\tlocalizable\tduh\n"; - -static const CHAR two_primary[] = "PrimaryOne\tPrimaryTwo\n" - "s255\ts255\n" - "TwoPrimary\tPrimaryOne\tPrimaryTwo\n" - "papaya\tleaf\n" - "papaya\tflower\n"; - -static const CHAR endlines1[] = "A\tB\tC\tD\tE\tF\r\n" - "s72\ts72\ts72\ts72\ts72\ts72\n" - "Table\tA\r\n" - "a\tb\tc\td\te\tf\n" - "g\th\ti\t\rj\tk\tl\r\n"; - -static const CHAR endlines2[] = "A\tB\tC\tD\tE\tF\r" - "s72\ts72\ts72\ts72\ts72\ts72\n" - "Table2\tA\r\n" - "a\tb\tc\td\te\tf\n" - "g\th\ti\tj\tk\tl\r\n"; - -static void write_file(const CHAR *filename, const char *data, int data_size) -{ - DWORD size; - - HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - WriteFile(hf, data, data_size, &size, NULL); - CloseHandle(hf); -} - -static UINT add_table_to_db(MSIHANDLE hdb, LPCSTR table_data) -{ - UINT r; - - write_file("temp_file", table_data, (lstrlen(table_data) - 1) * sizeof(char)); - r = MsiDatabaseImportA(hdb, CURR_DIR, "temp_file"); - DeleteFileA("temp_file"); - - return r; -} - -static void test_msiimport(void) -{ - MSIHANDLE hdb, view, rec; - LPCSTR query; - UINT r, count; - signed int i; - - GetCurrentDirectoryA(MAX_PATH, CURR_DIR); - - r = MsiOpenDatabaseA(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_table_to_db(hdb, test_data); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_table_to_db(hdb, two_primary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_table_to_db(hdb, endlines1); - if (r == ERROR_FUNCTION_FAILED) - { - /* win9x doesn't handle this case */ - skip("endlines not handled correctly.\n"); - MsiCloseHandle(hdb); - DeleteFileA(msifile); - return; - } - - r = add_table_to_db(hdb, endlines2); - ok(r == ERROR_FUNCTION_FAILED, - "Expected ERROR_FUNCTION_FAILED, got %d\n", r); - - query = "SELECT * FROM `TestTable`"; - r = MsiDatabaseOpenView(hdb, query, &view); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiViewGetColumnInfo(view, MSICOLINFO_NAMES, &rec); - count = MsiRecordGetFieldCount(rec); - ok(count == 9, "Expected 9, got %d\n", count); - ok(check_record(rec, 1, "FirstPrimaryColumn"), "Expected FirstPrimaryColumn\n"); - ok(check_record(rec, 2, "SecondPrimaryColumn"), "Expected SecondPrimaryColumn\n"); - ok(check_record(rec, 3, "ShortInt"), "Expected ShortInt\n"); - ok(check_record(rec, 4, "ShortIntNullable"), "Expected ShortIntNullalble\n"); - ok(check_record(rec, 5, "LongInt"), "Expected LongInt\n"); - ok(check_record(rec, 6, "LongIntNullable"), "Expected LongIntNullalble\n"); - ok(check_record(rec, 7, "String"), "Expected String\n"); - ok(check_record(rec, 8, "LocalizableString"), "Expected LocalizableString\n"); - ok(check_record(rec, 9, "LocalizableStringNullable"), "Expected LocalizableStringNullable\n"); - MsiCloseHandle(rec); - - r = MsiViewGetColumnInfo(view, MSICOLINFO_TYPES, &rec); - count = MsiRecordGetFieldCount(rec); - ok(count == 9, "Expected 9, got %d\n", count); - ok(check_record(rec, 1, "s255"), "Expected s255\n"); - ok(check_record(rec, 2, "i2"), "Expected i2\n"); - ok(check_record(rec, 3, "i2"), "Expected i2\n"); - ok(check_record(rec, 4, "I2"), "Expected I2\n"); - ok(check_record(rec, 5, "i4"), "Expected i4\n"); - ok(check_record(rec, 6, "I4"), "Expected I4\n"); - ok(check_record(rec, 7, "S255"), "Expected S255\n"); - ok(check_record(rec, 8, "S0"), "Expected S0\n"); - ok(check_record(rec, 9, "s0"), "Expected s0\n"); - MsiCloseHandle(rec); - - query = "SELECT * FROM `TestTable`"; - r = do_query(hdb, query, &rec); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(check_record(rec, 1, "stringage"), "Expected 'stringage'\n"); - ok(check_record(rec, 7, "another string"), "Expected 'another string'\n"); - ok(check_record(rec, 8, "localizable"), "Expected 'localizable'\n"); - ok(check_record(rec, 9, "duh"), "Expected 'duh'\n"); - - i = MsiRecordGetInteger(rec, 2); - ok(i == 5, "Expected 5, got %d\n", i); - - i = MsiRecordGetInteger(rec, 3); - ok(i == 2, "Expected 2, got %d\n", i); - - i = MsiRecordGetInteger(rec, 4); - ok(i == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", i); - - i = MsiRecordGetInteger(rec, 5); - ok(i == 2147483640, "Expected 2147483640, got %d\n", i); - - i = MsiRecordGetInteger(rec, 6); - ok(i == -2147483640, "Expected -2147483640, got %d\n", i); - - MsiCloseHandle(rec); - MsiCloseHandle(view); - - query = "SELECT * FROM `TwoPrimary`"; - r = MsiDatabaseOpenView(hdb, query, &view); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiViewGetColumnInfo(view, MSICOLINFO_NAMES, &rec); - count = MsiRecordGetFieldCount(rec); - ok(count == 2, "Expected 2, got %d\n", count); - ok(check_record(rec, 1, "PrimaryOne"), "Expected PrimaryOne\n"); - ok(check_record(rec, 2, "PrimaryTwo"), "Expected PrimaryTwo\n"); - - MsiCloseHandle(rec); - - r = MsiViewGetColumnInfo(view, MSICOLINFO_TYPES, &rec); - count = MsiRecordGetFieldCount(rec); - ok(count == 2, "Expected 2, got %d\n", count); - ok(check_record(rec, 1, "s255"), "Expected s255\n"); - ok(check_record(rec, 2, "s255"), "Expected s255\n"); - MsiCloseHandle(rec); - - r = MsiViewExecute(view, 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiViewFetch(view, &rec); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - ok(check_record(rec, 1, "papaya"), "Expected 'papaya'\n"); - ok(check_record(rec, 2, "leaf"), "Expected 'leaf'\n"); - - MsiCloseHandle(rec); - - r = MsiViewFetch(view, &rec); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - ok(check_record(rec, 1, "papaya"), "Expected 'papaya'\n"); - ok(check_record(rec, 2, "flower"), "Expected 'flower'\n"); - - MsiCloseHandle(rec); - - r = MsiViewFetch(view, &rec); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - - r = MsiViewClose(view); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - MsiCloseHandle(view); - - query = "SELECT * FROM `Table`"; - r = MsiDatabaseOpenView(hdb, query, &view); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiViewGetColumnInfo(view, MSICOLINFO_NAMES, &rec); - count = MsiRecordGetFieldCount(rec); - ok(count == 6, "Expected 6, got %d\n", count); - ok(check_record(rec, 1, "A"), "Expected A\n"); - ok(check_record(rec, 2, "B"), "Expected B\n"); - ok(check_record(rec, 3, "C"), "Expected C\n"); - ok(check_record(rec, 4, "D"), "Expected D\n"); - ok(check_record(rec, 5, "E"), "Expected E\n"); - ok(check_record(rec, 6, "F"), "Expected F\n"); - MsiCloseHandle(rec); - - r = MsiViewGetColumnInfo(view, MSICOLINFO_TYPES, &rec); - count = MsiRecordGetFieldCount(rec); - ok(count == 6, "Expected 6, got %d\n", count); - ok(check_record(rec, 1, "s72"), "Expected s72\n"); - ok(check_record(rec, 2, "s72"), "Expected s72\n"); - ok(check_record(rec, 3, "s72"), "Expected s72\n"); - ok(check_record(rec, 4, "s72"), "Expected s72\n"); - ok(check_record(rec, 5, "s72"), "Expected s72\n"); - ok(check_record(rec, 6, "s72"), "Expected s72\n"); - MsiCloseHandle(rec); - - MsiViewClose(view); - MsiCloseHandle(view); - - query = "SELECT * FROM `Table`"; - r = MsiDatabaseOpenView(hdb, query, &view); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiViewExecute(view, 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiViewFetch(view, &rec); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(check_record(rec, 1, "a"), "Expected 'a'\n"); - ok(check_record(rec, 2, "b"), "Expected 'b'\n"); - ok(check_record(rec, 3, "c"), "Expected 'c'\n"); - ok(check_record(rec, 4, "d"), "Expected 'd'\n"); - ok(check_record(rec, 5, "e"), "Expected 'e'\n"); - ok(check_record(rec, 6, "f"), "Expected 'f'\n"); - - MsiCloseHandle(rec); - - r = MsiViewFetch(view, &rec); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(check_record(rec, 1, "g"), "Expected 'g'\n"); - ok(check_record(rec, 2, "h"), "Expected 'h'\n"); - ok(check_record(rec, 3, "i"), "Expected 'i'\n"); - ok(check_record(rec, 4, "j"), "Expected 'j'\n"); - ok(check_record(rec, 5, "k"), "Expected 'k'\n"); - ok(check_record(rec, 6, "l"), "Expected 'l'\n"); - - MsiCloseHandle(rec); - - r = MsiViewFetch(view, &rec); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - - MsiViewClose(view); - MsiCloseHandle(view); - MsiCloseHandle(hdb); - DeleteFileA(msifile); -} - -static void test_markers(void) -{ - MSIHANDLE hdb, rec; - LPCSTR query; - UINT r; - - hdb = create_db(); - ok( hdb, "failed to create db\n"); - - rec = MsiCreateRecord(3); - MsiRecordSetString(rec, 1, "Table"); - MsiRecordSetString(rec, 2, "Apples"); - MsiRecordSetString(rec, 3, "Oranges"); - - /* try a legit create */ - query = "CREATE TABLE `Table` ( `One` SHORT NOT NULL, `Two` CHAR(255) PRIMARY KEY `One`)"; - r = run_query(hdb, 0, query); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - MsiCloseHandle(rec); - - /* try table name as marker */ - rec = MsiCreateRecord(1); - MsiRecordSetString(rec, 1, "Fable"); - query = "CREATE TABLE `?` ( `One` SHORT NOT NULL, `Two` CHAR(255) PRIMARY KEY `One`)"; - r = run_query(hdb, rec, query); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* verify that we just created a table called '?', not 'Fable' */ - r = try_query(hdb, "SELECT * from `Fable`"); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - - r = try_query(hdb, "SELECT * from `?`"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* try table name as marker without backticks */ - MsiRecordSetString(rec, 1, "Mable"); - query = "CREATE TABLE ? ( `One` SHORT NOT NULL, `Two` CHAR(255) PRIMARY KEY `One`)"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - - /* try one column name as marker */ - MsiRecordSetString(rec, 1, "One"); - query = "CREATE TABLE `Mable` ( `?` SHORT NOT NULL, `Two` CHAR(255) PRIMARY KEY `One`)"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - MsiCloseHandle(rec); - - /* try column names as markers */ - rec = MsiCreateRecord(2); - MsiRecordSetString(rec, 1, "One"); - MsiRecordSetString(rec, 2, "Two"); - query = "CREATE TABLE `Mable` ( `?` SHORT NOT NULL, `?` CHAR(255) PRIMARY KEY `One`)"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - MsiCloseHandle(rec); - - /* try names with backticks */ - rec = MsiCreateRecord(3); - MsiRecordSetString(rec, 1, "One"); - MsiRecordSetString(rec, 2, "Two"); - MsiRecordSetString(rec, 3, "One"); - query = "CREATE TABLE `Mable` ( `?` SHORT NOT NULL, `?` CHAR(255) PRIMARY KEY `?`)"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - - /* try names with backticks, minus definitions */ - query = "CREATE TABLE `Mable` ( `?`, `?` PRIMARY KEY `?`)"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - - /* try names without backticks */ - query = "CREATE TABLE `Mable` ( ? SHORT NOT NULL, ? CHAR(255) PRIMARY KEY ?)"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - MsiCloseHandle(rec); - - /* try one long marker */ - rec = MsiCreateRecord(1); - MsiRecordSetString(rec, 1, "`One` SHORT NOT NULL, `Two` CHAR(255) PRIMARY KEY `One`"); - query = "CREATE TABLE `Mable` ( ? )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - MsiCloseHandle(rec); - - /* try all names as markers */ - rec = MsiCreateRecord(4); - MsiRecordSetString(rec, 1, "Mable"); - MsiRecordSetString(rec, 2, "One"); - MsiRecordSetString(rec, 3, "Two"); - MsiRecordSetString(rec, 4, "One"); - query = "CREATE TABLE `?` ( `?` SHORT NOT NULL, `?` CHAR(255) PRIMARY KEY `?`)"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - MsiCloseHandle(rec); - - /* try a legit insert */ - query = "INSERT INTO `Table` ( `One`, `Two` ) VALUES ( 5, 'hello' )"; - r = run_query(hdb, 0, query); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = try_query(hdb, "SELECT * from `Table`"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* try values as markers */ - rec = MsiCreateRecord(2); - MsiRecordSetInteger(rec, 1, 4); - MsiRecordSetString(rec, 2, "hi"); - query = "INSERT INTO `Table` ( `One`, `Two` ) VALUES ( ?, '?' )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - MsiCloseHandle(rec); - - /* try column names and values as markers */ - rec = MsiCreateRecord(4); - MsiRecordSetString(rec, 1, "One"); - MsiRecordSetString(rec, 2, "Two"); - MsiRecordSetInteger(rec, 3, 5); - MsiRecordSetString(rec, 4, "hi"); - query = "INSERT INTO `Table` ( `?`, `?` ) VALUES ( ?, '?' )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - MsiCloseHandle(rec); - - /* try column names as markers */ - rec = MsiCreateRecord(2); - MsiRecordSetString(rec, 1, "One"); - MsiRecordSetString(rec, 2, "Two"); - query = "INSERT INTO `Table` ( `?`, `?` ) VALUES ( 3, 'yellow' )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - MsiCloseHandle(rec); - - /* try table name as a marker */ - rec = MsiCreateRecord(1); - MsiRecordSetString(rec, 1, "Table"); - query = "INSERT INTO `?` ( `One`, `Two` ) VALUES ( 2, 'green' )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - MsiCloseHandle(rec); - - /* try table name and values as markers */ - rec = MsiCreateRecord(3); - MsiRecordSetString(rec, 1, "Table"); - MsiRecordSetInteger(rec, 2, 10); - MsiRecordSetString(rec, 3, "haha"); - query = "INSERT INTO `?` ( `One`, `Two` ) VALUES ( ?, '?' )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_FUNCTION_FAILED, "Expected ERROR_FUNCTION_FAILED, got %d\n", r); - MsiCloseHandle(rec); - - /* try all markers */ - rec = MsiCreateRecord(5); - MsiRecordSetString(rec, 1, "Table"); - MsiRecordSetString(rec, 1, "One"); - MsiRecordSetString(rec, 1, "Two"); - MsiRecordSetInteger(rec, 2, 10); - MsiRecordSetString(rec, 3, "haha"); - query = "INSERT INTO `?` ( `?`, `?` ) VALUES ( ?, '?' )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - MsiCloseHandle(rec); - - /* insert an integer as a string */ - rec = MsiCreateRecord(2); - MsiRecordSetString(rec, 1, "11"); - MsiRecordSetString(rec, 2, "hi"); - query = "INSERT INTO `Table` ( `One`, `Two` ) VALUES ( ?, '?' )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - MsiCloseHandle(rec); - - /* leave off the '' for the string */ - rec = MsiCreateRecord(2); - MsiRecordSetInteger(rec, 1, 12); - MsiRecordSetString(rec, 2, "hi"); - query = "INSERT INTO `Table` ( `One`, `Two` ) VALUES ( ?, ? )"; - r = run_query(hdb, rec, query); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - MsiCloseHandle(rec); - - MsiCloseHandle(hdb); - DeleteFileA(msifile); -} - -#define MY_NVIEWS 4000 /* Largest installer I've seen uses < 2k */ -static void test_handle_limit(void) -{ - int i; - MSIHANDLE hdb; - MSIHANDLE hviews[MY_NVIEWS]; - UINT r; - - /* create an empty db */ - hdb = create_db(); - ok( hdb, "failed to create db\n"); - - memset(hviews, 0, sizeof(hviews)); - - for (i=0; i -#include -#include -#include -#include - -#include "wine/test.h" - -static const char msifile[] = "winetest.msi"; - -static UINT run_query( MSIHANDLE hdb, const char *query ) -{ - MSIHANDLE hview = 0; - UINT r; - - r = MsiDatabaseOpenView(hdb, query, &hview); - if( r != ERROR_SUCCESS ) - return r; - - r = MsiViewExecute(hview, 0); - if( r == ERROR_SUCCESS ) - r = MsiViewClose(hview); - MsiCloseHandle(hview); - return r; -} - -static UINT create_feature_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `Feature` ( " - "`Feature` CHAR(38) NOT NULL, " - "`Feature_Parent` CHAR(38), " - "`Title` CHAR(64), " - "`Description` CHAR(255), " - "`Display` SHORT NOT NULL, " - "`Level` SHORT NOT NULL, " - "`Directory_` CHAR(72), " - "`Attributes` SHORT NOT NULL " - "PRIMARY KEY `Feature`)" ); -} - -static UINT create_component_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `Component` ( " - "`Component` CHAR(72) NOT NULL, " - "`ComponentId` CHAR(38), " - "`Directory_` CHAR(72) NOT NULL, " - "`Attributes` SHORT NOT NULL, " - "`Condition` CHAR(255), " - "`KeyPath` CHAR(72) " - "PRIMARY KEY `Component`)" ); -} - -static UINT create_feature_components_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `FeatureComponents` ( " - "`Feature_` CHAR(38) NOT NULL, " - "`Component_` CHAR(72) NOT NULL " - "PRIMARY KEY `Feature_`, `Component_` )" ); -} - -static UINT create_file_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `File` (" - "`File` CHAR(72) NOT NULL, " - "`Component_` CHAR(72) NOT NULL, " - "`FileName` CHAR(255) NOT NULL, " - "`FileSize` LONG NOT NULL, " - "`Version` CHAR(72), " - "`Language` CHAR(20), " - "`Attributes` SHORT, " - "`Sequence` SHORT NOT NULL " - "PRIMARY KEY `File`)" ); -} - -static UINT create_custom_action_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `CustomAction` (" - "`Action` CHAR(72) NOT NULL, " - "`Type` SHORT NOT NULL, " - "`Source` CHAR(75), " - "`Target` CHAR(255) " - "PRIMARY KEY `Action`)" ); -} - -static UINT add_feature_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Feature` (`Feature`, `Feature_Parent`, " - "`Title`, `Description`, `Display`, `Level`, `Directory_`, `Attributes`) VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_component_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Component` " - "(`Component`, `ComponentId`, `Directory_`, `Attributes`, `Condition`, `KeyPath`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_feature_components_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `FeatureComponents` " - "(`Feature_`, `Component_`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_file_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `File` " - "(`File`, `Component_`, `FileName`, `FileSize`, `Version`, `Language`, `Attributes`, `Sequence`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_directory_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Directory` (`Directory`,`Directory_Parent`,`DefaultDir`) VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_custom_action_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `CustomAction` (`Action`, `Type`, `Source`, " - "`Target`) VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT set_summary_info(MSIHANDLE hdb) -{ - UINT res; - MSIHANDLE suminfo; - - /* build summary info */ - res = MsiGetSummaryInformation(hdb, NULL, 7, &suminfo); - ok( res == ERROR_SUCCESS , "Failed to open summaryinfo\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,2, VT_LPSTR, 0,NULL, - "Installation Database"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,3, VT_LPSTR, 0,NULL, - "Installation Database"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,4, VT_LPSTR, 0,NULL, - "Wine Hackers"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,7, VT_LPSTR, 0,NULL, - ";1033"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,9, VT_LPSTR, 0,NULL, - "{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo, 14, VT_I4, 100, NULL, NULL); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo, 15, VT_I4, 0, NULL, NULL); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoPersist(suminfo); - ok( res == ERROR_SUCCESS , "Failed to make summary info persist\n" ); - - res = MsiCloseHandle( suminfo); - ok( res == ERROR_SUCCESS , "Failed to close suminfo\n" ); - - return res; -} - -static MSIHANDLE create_package_db(void) -{ - MSIHANDLE hdb = 0; - UINT res; - - DeleteFile(msifile); - - /* create an empty database */ - res = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to create database\n" ); - if( res != ERROR_SUCCESS ) - return hdb; - - res = MsiDatabaseCommit( hdb ); - ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); - - res = set_summary_info(hdb); - - res = run_query( hdb, - "CREATE TABLE `Directory` ( " - "`Directory` CHAR(255) NOT NULL, " - "`Directory_Parent` CHAR(255), " - "`DefaultDir` CHAR(255) NOT NULL " - "PRIMARY KEY `Directory`)" ); - ok( res == ERROR_SUCCESS , "Failed to create directory table\n" ); - - return hdb; -} - -static MSIHANDLE package_from_db(MSIHANDLE hdb) -{ - UINT res; - CHAR szPackage[10]; - MSIHANDLE hPackage; - - sprintf(szPackage,"#%li",hdb); - res = MsiOpenPackage(szPackage,&hPackage); - ok( res == ERROR_SUCCESS , "Failed to open package\n" ); - - res = MsiCloseHandle(hdb); - ok( res == ERROR_SUCCESS , "Failed to close db handle\n" ); - - return hPackage; -} - -static void create_test_file(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); -} - -static MSIHANDLE helper_createpackage( const char *szName ) -{ - MSIHANDLE hdb = 0; - UINT res; - CHAR szPackage[10]; - MSIHANDLE hPackage; - MSIHANDLE suminfo; - - DeleteFile(szName); - - /* create an empty database */ - res = MsiOpenDatabase(szName, MSIDBOPEN_CREATE, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to create database\n" ); - - res = MsiDatabaseCommit( hdb ); - ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); - - /* build summary info */ - res = MsiGetSummaryInformation(hdb, NULL, 7, &suminfo); - ok( res == ERROR_SUCCESS , "Failed to open summaryinfo\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,2, VT_LPSTR, 0,NULL, - "Installation Database"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,3, VT_LPSTR, 0,NULL, - "Installation Database"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,4, VT_LPSTR, 0,NULL, - "Wine Hackers"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,7, VT_LPSTR, 0,NULL, - ";1033"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,9, VT_LPSTR, 0,NULL, - "{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo, 14, VT_I4, 100, NULL, NULL); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo, 15, VT_I4, 0, NULL, NULL); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoPersist(suminfo); - ok( res == ERROR_SUCCESS , "Failed to make summary info persist\n" ); - - res = MsiCloseHandle( suminfo); - ok( res == ERROR_SUCCESS , "Failed to close suminfo\n" ); - - sprintf(szPackage,"#%li",hdb); - res = MsiOpenPackage(szPackage,&hPackage); - ok( res == ERROR_SUCCESS , "Failed to open package\n" ); - - res = MsiCloseHandle( hdb ); - ok( res == ERROR_SUCCESS , "Failed to close database\n" ); - - return hPackage; -} - -static void test_createpackage(void) -{ - static const CHAR filename[] = "winetest.msi"; - MSIHANDLE hPackage = 0; - UINT res; - - hPackage = helper_createpackage( filename ); - ok ( hPackage != 0, " Failed to create package\n"); - - res = MsiCloseHandle( hPackage); - ok( res == ERROR_SUCCESS , "Failed to close package\n" ); - - DeleteFile( filename ); -} - -static void test_formatrecord(void) -{ - char buffer[100]; - MSIHANDLE hrec; - UINT r; - DWORD sz; - - r = MsiFormatRecord(0, 0, NULL, NULL ); - ok( r == ERROR_INVALID_HANDLE, "wrong error\n"); - - hrec = MsiCreateRecord(0); - ok( hrec, "failed to create record\n"); - - /* format an empty record on a record with no parameters */ - sz = sizeof(buffer); - r = MsiFormatRecordA(0, hrec, buffer, &sz ); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong\n"); - - MsiCloseHandle( hrec ); - - hrec = MsiCreateRecord(4); - ok( hrec, "failed to create record\n"); - - /* format an empty record */ - r = MsiFormatRecord(0, hrec, NULL, NULL ); - ok( r == ERROR_SUCCESS, "format failed\n"); - buffer[0] = 'x'; - buffer[1] = 0; - sz=0; - r = MsiFormatRecord(0, hrec, buffer+1, &sz); - ok( r == ERROR_MORE_DATA && buffer[0] == 'x', "format failed measuring with buffer\n"); - ok( sz == 16, "size wrong\n"); - sz=100; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed with empty buffer\n"); - ok( sz == 16, "size wrong\n"); - ok( 0 == strcmp(buffer,"1: 2: 3: 4: "), "wrong output\n"); - - r = MsiCloseHandle(hrec); - ok(r==ERROR_SUCCESS, "Unable to close record\n"); - - hrec = MsiCreateRecord(6); - ok( hrec, "failed to create record\n"); - - sz = 100; - buffer[0] = 'x'; - buffer[1] = 0; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed with empty buffer\n"); - ok( sz == 24, "size wrong\n"); - ok( 0 == strcmp(buffer,"1: 2: 3: 4: 5: 6: "), "wrong output\n"); - - - /* format a format string with everything else empty */ - r = MsiRecordSetString(hrec, 0, "%1"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - r = MsiFormatRecord(0, hrec, NULL, NULL ); - ok( r == ERROR_SUCCESS, "format failed\n"); - r = MsiFormatRecord(0, hrec, buffer, NULL); - ok( r == ERROR_INVALID_PARAMETER, "wrong error\n"); - - sz = 123; - r = MsiFormatRecord(0, hrec, NULL, &sz); - ok( r == ERROR_SUCCESS, "format failed with empty buffer\n"); - ok( sz == 2, "size wrong (%i)\n",sz); - sz = sizeof buffer; - buffer[0] = 'x'; - buffer[1] = 0; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed with empty buffer\n"); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"%1"), "wrong output\n"); - - /* make the buffer too small */ - sz = 0; - buffer[0] = 'x'; - buffer[1] = 0; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_MORE_DATA, "format failed with empty buffer\n"); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"x"), "wrong output\n"); - - /* make the buffer a little bit bigger */ - sz = 1; - buffer[0] = 'x'; - buffer[1] = 0; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_MORE_DATA, "format failed with empty buffer\n"); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - /* and again */ - sz = 2; - buffer[0] = 'x'; - buffer[1] = 0; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_MORE_DATA, "format failed with empty buffer\n"); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"%"), "wrong output\n"); - - /* and again */ - sz = 3; - buffer[0] = 'x'; - buffer[1] = 0; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed with empty buffer\n"); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"%1"), "wrong output\n"); - - /* now try a real format string */ - r = MsiRecordSetString(hrec, 0, "[1]"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - - /* now put something in the first field */ - r = MsiRecordSetString(hrec, 1, "boo hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo hoo"), "wrong output\n"); - - /* now put something in the first field */ - r = MsiRecordSetString(hrec, 0, "[1] [2]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo hoo"), "wrong output\n"); - - /* empty string */ - r = MsiRecordSetString(hrec, 0, ""); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 30, "size wrong %i\n",sz); - ok( 0 == strcmp(buffer,"1: boo 2: hoo 3: 4: 5: 6: "), - "wrong output(%s)\n",buffer); - - /* play games with recursive lookups */ - r = MsiRecordSetString(hrec, 0, "[[1]] [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"hey hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[[1]] [2]"); - r = MsiRecordSetString(hrec, 1, "[2]"); - r = MsiRecordSetString(hrec, 2, "hey"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 9, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"[[2]] hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[[[3]]] [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"hey hey"), "wrong output (%s)\n",buffer); - - r = MsiCloseHandle(hrec); - ok(r==ERROR_SUCCESS, "Unable to close record\n"); - hrec = MsiCreateRecord(12); - ok( hrec, "failed to create record\n"); - - r = MsiRecordSetString(hrec, 0, "[[3][1]] [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"big hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[[3][4][1]] [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"big hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[[3][[4]][1]] [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 10, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"[1[]2] hey"), "wrong output (%s)\n",buffer); - - /* incorrect formats */ - r = MsiRecordSetString(hrec, 0, "[[[3][[4]][1]] [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 18, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"[[[3][[4]][1]] [2]"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[[3][[4]][1]] [2]]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 11, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"[1[]2] hey]"), "wrong output (%s)\n",buffer); - - - /* play games with {} */ - - r = MsiRecordSetString(hrec, 0, "{[3][1]} [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 6, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"12 hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[{[3][1]}] [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 8, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"[12] hey"), "wrong output (%s)\n",buffer); - - - r = MsiRecordSetString(hrec, 0, "{test} [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 10, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"{test} hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{[test]} [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 12, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"{[test]} hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{[1][2][3][4]} [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 4, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer," hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{[1][2][3][dummy]} [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 18, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"{2hey1[dummy]} hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{[1][2][3][4][dummy]} [2]"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 18, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"{2hey1[dummy]} hey"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{{[1][2]}[3][4][dummy]}"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 16, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"{{2hey}1[dummy]}"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{{[1][2]}[3]{[4][dummy]}}"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "hey"); - r = MsiRecordSetString(hrec, 3, "1"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{{[1][2]}[3]} {[1][2]}"); - r = MsiRecordSetString(hrec, 1, "1"); - r = MsiRecordSetString(hrec, 2, "2"); - r = MsiRecordSetString(hrec, 3, "3"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 12, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"{{12}3} {12}"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{[1][2]} {{[1][2]}[3]} {[1][2]}"); - r = MsiRecordSetString(hrec, 1, "1"); - r = MsiRecordSetString(hrec, 2, "2"); - r = MsiRecordSetString(hrec, 3, "3"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 15, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"12 {{12}3} {12}"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{[4]}{[1][2]} {{[1][2]}[3]} {[1][2]}"); - r = MsiRecordSetString(hrec, 1, "1"); - r = MsiRecordSetString(hrec, 2, "2"); - r = MsiRecordSetString(hrec, 3, "3"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 15, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"12 {{12}3} {12}"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{blah} {[4]}{[1][2]} {{[1][2]}[3]} {[1][2]}"); - r = MsiRecordSetString(hrec, 1, "1"); - r = MsiRecordSetString(hrec, 2, "2"); - r = MsiRecordSetString(hrec, 3, "3"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 22, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"{blah} 12 {{12}3} {12}"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{{[1]}[2]} {[4]}{[1][2]}"); - r = MsiRecordSetString(hrec, 1, "1"); - r = MsiRecordSetString(hrec, 2, "2"); - r = MsiRecordSetString(hrec, 3, "3"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 13, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer,"{{1}2} {}{12}"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{{[1]}} {[4]}{[1][2]}"); - r = MsiRecordSetString(hrec, 1, "1"); - r = MsiRecordSetString(hrec, 2, "2"); - r = MsiRecordSetString(hrec, 3, "3"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 3, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer," 12"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "{{{[1]}} {[4]}{[1][2]}"); - r = MsiRecordSetString(hrec, 1, "1"); - r = MsiRecordSetString(hrec, 2, "2"); - r = MsiRecordSetString(hrec, 3, "3"); - r = MsiRecordSetString(hrec, 4, NULL); - r = MsiRecordSetString(hrec, 12, "big"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - todo_wine{ - ok( sz == 3, "size wrong,(%i)\n",sz); - ok( 0 == strcmp(buffer," 12"), "wrong output (%s)\n",buffer); - } - - /* now put play games with escaping */ - r = MsiRecordSetString(hrec, 0, "[1] [2] [\\3asdf]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 16, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo hoo [\\3asdf]"), "wrong output\n"); - - /* now put play games with escaping */ - r = MsiRecordSetString(hrec, 0, "[1] [2] [\\x]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 12, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo hoo [\\x]"), "wrong output\n"); - - MsiRecordSetString(hrec, 0, "[\\x]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 4, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,"[\\x]"), "wrong output: %s\n", buffer); - - MsiRecordSetString(hrec, 0, "{\\x}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 4, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,"{\\x}"), "wrong output: %s\n", buffer); - - MsiRecordSetString(hrec, 0, "[abc\\x]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,"[abc\\x]"), "wrong output: %s\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\[]Bracket Text[\\]]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 20, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,"[\\[]Bracket Text[\\]]"), "wrong output: %s\n", buffer); - - /* now try other formats without a package */ - r = MsiRecordSetString(hrec, 0, "[1] [2] [property]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 18, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo hoo [property]"), "wrong output\n"); - - r = MsiRecordSetString(hrec, 0, "[1] [~] [2]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 11, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo [~] hoo"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[1]"); - r = MsiRecordSetInteger(hrec, 1, 123456); - ok( r == ERROR_SUCCESS, "set integer failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 6, "size wrong\n"); - ok( 0 == strcmp(buffer,"123456"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[~]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"[~]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"[]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - /* MsiFormatRecord doesn't seem to handle a negative too well */ - r = MsiRecordSetString(hrec, 0, "[-1]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer,"[-1]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[]}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer,"{[]}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[0]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"[0]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[100]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[1] [2]}"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 7, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo hoo"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{foo}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 5, "size wrong\n"); - ok( 0 == strcmp(buffer,"{foo}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{boo [1]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 7, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo hoo"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{[1]}}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{ {[1]}}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( 0 == strcmp(buffer," {hoo}"), "wrong output\n"); - ok( sz == 6, "size wrong\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{[1]} }"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 8, "size wrong\n"); - ok( 0 == strcmp(buffer,"{{hoo} }"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{ [1]}}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{[1] }}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{a}{b}{c }{ d}{any text}}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{a} }"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 6, "size wrong\n"); - ok( 0 == strcmp(buffer,"{{a} }"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{a} {b}}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - todo_wine { - r = MsiRecordSetString(hrec, 0, "{{a} b}}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{a b}}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{ }"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"{ }"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, " {{a}}}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer," }"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - todo_wine { - r = MsiRecordSetString(hrec, 0, "{{ almost {{ any }} text }}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 8, "size wrong\n"); - ok( 0 == strcmp(buffer," text }}"), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - todo_wine { - r = MsiRecordSetString(hrec, 0, "{{ } { hidden ][ [ }}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 0, "size wrong\n"); - ok( 0 == strcmp(buffer,""), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[ 1]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer,"[ 1]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[01]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"hoo"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - todo_wine { - r = MsiRecordSetString(hrec, 0, "{{test}} [01"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer," [01"), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[\\[]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer,"[\\[]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - MsiRecordSetString(hrec, 0, "[\\[]"); - MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof(buffer); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 4, "Expected 4, got %d\n", sz); - ok(!lstrcmpA(buffer, "[\\[]"), "Expected \"[\\[]\", got \"%s\"\n", buffer); - - r = MsiRecordSetString(hrec, 0, "[foo]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 5, "size wrong\n"); - ok( 0 == strcmp(buffer,"[foo]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[01.]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 5, "size wrong\n"); - ok( 0 == strcmp(buffer,"[01.]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - SetEnvironmentVariable("FOO", "BAR"); - r = MsiRecordSetString(hrec, 0, "[%FOO]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 6, "size wrong\n"); - ok( 0 == strcmp(buffer,"[%FOO]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{[1]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 6, "size wrong\n"); - ok( 0 == strcmp(buffer,"{{hoo}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{ {[1]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 8, "size wrong\n"); - ok( 0 == strcmp(buffer,"{{ {hoo}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{ {[1]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 8, "size wrong\n"); - ok( 0 == strcmp(buffer,"{{ {hoo}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{ {{[1]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 9, "size wrong\n"); - ok( 0 == strcmp(buffer,"{{ {{hoo}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[1]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer,"hoo}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{ {{a}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 7, "size wrong\n"); - ok( 0 == strcmp(buffer,"{{ {{a}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{ {{a}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 7, "size wrong\n"); - ok( 0 == strcmp(buffer,"{{ {{a}"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "0{1{2{3{4[1]5}6}7}8}9"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 19, "size wrong\n"); - ok( 0 == strcmp(buffer,"01{2{3{4hoo56}7}8}9"), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "0{1{2[1]3}4"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 9, "size wrong\n"); - ok( 0 == strcmp(buffer,"01{2hoo34"), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "0{1{2[1]3}4"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 9, "size wrong\n"); - ok( 0 == strcmp(buffer,"01{2hoo34"), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[1.} [1]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 9, "size wrong\n"); - todo_wine - { - ok( 0 == strcmp(buffer,"{[1.} hoo"), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[{[1]}]}"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "foo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 9, "size wrong\n"); - ok( 0 == strcmp(buffer,"{[{[1]}]}"), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[1][}"); - r = MsiRecordSetString(hrec, 1, "2"); - r = MsiRecordSetString(hrec, 2, "foo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"2["), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[1]"); - r = MsiRecordSetString(hrec, 1, "[2]"); - r = MsiRecordSetString(hrec, 2, "foo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"[2]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[{{boo}}1]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 3, "size wrong\n"); - todo_wine - { - ok( 0 == strcmp(buffer,"[1]"), "wrong output: %s\n", buffer); - } - - r = MsiRecordSetString(hrec, 0, "[{{boo}}1]"); - r = MsiRecordSetString(hrec, 0, "[1{{boo}}]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"[1]"), "wrong output\n"); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[1]{{boo} }}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 11, "size wrong\n"); - ok( 0 == strcmp(buffer,"hoo{{boo }}"), "wrong output\n"); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[1{{boo}}]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 12, "size wrong: got %u, expected 12\n", sz); - ok( 0 == strcmp(buffer,"{[1{{boo}}]}"), "wrong output: got %s, expected [1]\n", buffer); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{{[1]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 6, "size wrong: got %u, expected 3\n", sz); - ok( 0 == strcmp(buffer,"{{hoo}"), "wrong output: got %s, expected [1]\n", buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[1{{bo}o}}]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 13, "size wrong\n"); - ok( 0 == strcmp(buffer,"{[1{{bo}o}}]}"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[1{{b{o}o}}]}"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 14, "size wrong\n"); - ok( 0 == strcmp(buffer,"{[1{{b{o}o}}]}"), "wrong output %s\n",buffer); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{ {[1]}"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 5, "size wrong\n"); - ok( 0 == strcmp(buffer," {hoo"), "wrong output %s\n",buffer); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - /* {} inside a substitution does strange things... */ - r = MsiRecordSetString(hrec, 0, "[[1]{}]"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 5, "size wrong\n"); - ok( 0 == strcmp(buffer,"[[1]]"), "wrong output %s\n",buffer); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[[1]{}[1]]"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 6, "size wrong\n"); - ok( 0 == strcmp(buffer,"[[1]2]"), "wrong output %s\n",buffer); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[a[1]b[1]c{}d[1]e]"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 14, "size wrong\n"); - ok( 0 == strcmp(buffer,"[a[1]b[1]cd2e]"), "wrong output %s\n",buffer); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[a[1]b"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 6, "size wrong\n"); - ok( 0 == strcmp(buffer,"[a[1]b"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "a[1]b]"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer,"a2b]"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "]a[1]b"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer,"]a2b"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "]a[1]b"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 4, "size wrong\n"); - ok( 0 == strcmp(buffer,"]a2b"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "\\[1]"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"\\2"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "\\{[1]}"); - r = MsiRecordSetString(hrec, 1, "2"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"\\2"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "a{b[1]c}d"); - r = MsiRecordSetString(hrec, 1, NULL); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 2, "size wrong\n"); - ok( 0 == strcmp(buffer,"ad"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{a[0]b}"); - r = MsiRecordSetString(hrec, 1, "foo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 9, "size wrong\n"); - ok( 0 == strcmp(buffer,"a{a[0]b}b"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[foo]"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( sz == 5, "size wrong\n"); - ok( 0 == strcmp(buffer,"[foo]"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "{[1][-1][1]}"); - r = MsiRecordSetString(hrec, 1, "foo"); - sz = sizeof buffer; - r = MsiFormatRecord(0, hrec, buffer, &sz); - todo_wine - { - ok( sz == 12, "size wrong\n"); - ok( 0 == strcmp(buffer,"{foo[-1]foo}"), "wrong output %s\n",buffer); - } - ok( r == ERROR_SUCCESS, "format failed\n"); - - /* nested braces */ - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{abcd}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 6, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{abcd}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{a[one]bc[two]de[one]f}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 23, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{a[one]bc[two]de[one]f}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{a[one]bc[bad]de[two]f}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 23, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{a[one]bc[bad]de[two]f}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{[bad]}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{[bad]}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{abc{d[one]ef}"); /* missing final brace */ - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 14, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{abc{d[one]ef}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{abc{d[one]ef}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 15, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{abc{d[one]ef}}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{abc}{{def}hi{j[one]k}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 5, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{abc}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{def}hi{j[one]k}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{def}hi{jk}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{{def}}hi{jk}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - todo_wine - { - ok( sz == 7, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"hi{jk}}"), "wrong output (%s)\n",buffer); - } - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{def}hi{{jk}}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - todo_wine - { - ok( sz == 1, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"}"), "wrong output (%s)\n",buffer); - } - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{def}{jk}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{def}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{a{b}c}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{a{b}c}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{a{b}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 6, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{a{b}}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{b}c}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 6, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{{b}c}"), "wrong output (%s)\n",buffer); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{{{}}}}"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - todo_wine - { - ok( sz == 2, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"}}"), "wrong output (%s)\n",buffer); - } - - sz = sizeof buffer; - MsiRecordSetInteger(hrec, 1, 100); - MsiRecordSetInteger(hrec, 2, -100); - MsiRecordSetString(hrec, 0, "[1] [2]"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 8, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"100 -100"), "wrong output (%s)\n",buffer); - - sz = sizeof(buffer); - MsiRecordSetString(hrec, 0, "[1] {[noprop] [twoprop]} {abcdef}"); - MsiRecordSetString(hrec, 1, "one"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 33, "Expected 33, got %d\n",sz); - ok(!lstrcmpA(buffer, "one {[noprop] [twoprop]} {abcdef}"), - "Expected \"one {[noprop] [twoprop]} {abcdef}\", got \"%s\"\n", buffer); - - sz = sizeof(buffer); - MsiRecordSetString(hrec, 0, "[1] {[noprop] [one]} {abcdef}"); - MsiRecordSetString(hrec, 1, "one"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 29, "Expected 29, got %d\n",sz); - ok(!lstrcmpA(buffer, "one {[noprop] [one]} {abcdef}"), - "Expected \"one {[noprop] [one]} {abcdef}\", got \"%s\"\n", buffer); - - sz = sizeof(buffer); - MsiRecordSetString(hrec, 0, "[1] {[one]} {abcdef}"); - MsiRecordSetString(hrec, 1, "one"); - r = MsiFormatRecord(0, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 20, "Expected 20, got %d\n",sz); - ok(!lstrcmpA(buffer, "one {[one]} {abcdef}"), - "Expected \"one {[one]} {abcdef}\", got \"%s\"\n", buffer); - - MsiCloseHandle( hrec ); -} - -static void test_formatrecord_package(void) -{ - static const CHAR filename[] = "winetest.msi"; - char buffer[100]; - MSIHANDLE hrec; - MSIHANDLE package; - UINT r; - DWORD sz=100; - - package = helper_createpackage( filename ); - ok(package!=0, "Unable to create package\n"); - - hrec = MsiCreateRecord(12); - ok( hrec, "failed to create record\n"); - - r = MsiFormatRecord(package, 0, NULL, NULL ); - ok( r == ERROR_INVALID_HANDLE, "wrong error\n"); - - r = MsiFormatRecord(package, hrec, NULL, NULL ); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec,0,NULL); - r = MsiRecordSetString(hrec,1,NULL); - r = MsiRecordSetString(hrec,2,NULL); - r = MsiRecordSetString(hrec,3,NULL); - r = MsiRecordSetString(hrec,4,NULL); - r = MsiRecordSetString(hrec,5,NULL); - r = MsiRecordSetString(hrec,6,NULL); - r = MsiRecordSetString(hrec,7,NULL); - r = MsiRecordSetString(hrec,8,NULL); - r = MsiRecordSetString(hrec,9,NULL); - r = MsiRecordSetString(hrec,10,NULL); - r = MsiRecordSetString(hrec,11,NULL); - r = MsiRecordSetString(hrec,12,NULL); - ok( r == ERROR_SUCCESS, "set string failed\n"); - - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed with empty buffer (%i)\n",r); - ok( sz == 51, "size wrong (%i)\n",sz); - ok( 0 == strcmp(buffer,"1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: "), "wrong output(%s)\n",buffer); - - r = MsiSetProperty(package, "prop", "val"); - ok( r == ERROR_SUCCESS, "failed to set propertY: %d\n", r); - - r = MsiRecordSetString(hrec, 0, NULL); - r = MsiRecordSetString(hrec, 1, "[2]"); - r = MsiRecordSetString(hrec, 2, "stuff"); - r = MsiRecordSetString(hrec, 3, "prop"); - r = MsiRecordSetString(hrec, 4, "[prop]"); - r = MsiRecordSetString(hrec, 5, "[noprop]"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed with empty buffer (%i)\n",r); - todo_wine - { - ok( sz == 66, "size wrong (%i)\n",sz); - ok( !lstrcmpA(buffer, - "1: [2] 2: stuff 3: prop 4: val 5: 6: 7: 8: 9: 10: 11: 12: "), - "wrong output(%s)\n",buffer); - } - - /* now put play games with escaping */ - r = MsiRecordSetString(hrec, 0, "[1] [2] [\\3asdf]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 9, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"boo hoo 3"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[1] [2] [\\x]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 9, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"boo hoo x"), "wrong output (%s)\n",buffer); - - MsiRecordSetString(hrec, 0, "[\\x]"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 1, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,"x"), "wrong output: %s\n", buffer); - - MsiRecordSetString(hrec, 0, "{\\x}"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 4, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,"{\\x}"), "wrong output: %s\n", buffer); - - MsiRecordSetString(hrec, 0, "[abc\\x]"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,""), "wrong output: %s\n", buffer); - - MsiRecordSetString(hrec, 0, "[abc\\xdef]"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,""), "wrong output: %s\n", buffer); - - MsiRecordSetString(hrec, 0, "\\x"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 2, "Expected 2, got %d\n", sz); - ok(!lstrcmpA(buffer, "\\x"), "Expected \"\\x\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\["); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 3, "Expected 3, got %d\n", sz); - ok(!lstrcmpA(buffer, "[\\["), "Expected \"[\\[\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\[]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 1, "Expected 1, got %d\n", sz); - ok(!lstrcmpA(buffer, "["), "Expected \"[\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[[]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 3, "Expected 3, got %d\n", sz); - ok(!lstrcmpA(buffer, "[[]"), "Expected \"[]\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\[]]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 2, "Expected 2, got %d\n", sz); - ok(!lstrcmpA(buffer, "[]"), "Expected \"[]\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\[a]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 1, "Expected 1, got %d\n", sz); - ok(!lstrcmpA(buffer, "["), "Expected \"[\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\a[]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - todo_wine - { - ok(sz == 1, "Expected 1, got %d\n", sz); - ok(!lstrcmpA(buffer, "a"), "Expected \"a\", got \"%s\"\n", buffer); - } - - MsiRecordSetString(hrec, 0, "[prop]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 3, "Expected 3, got %d\n", sz); - ok(!lstrcmpA(buffer, "val"), "Expected \"val\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[prop] [pro\\pblah] [prop]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 8, "Expected 8, got %d\n", sz); - ok(!lstrcmpA(buffer, "val val"), "Expected \"val val\", got \"%s\"\n", buffer); - - MsiSetPropertyA(package, "b", "ball"); - MsiRecordSetString(hrec, 0, "[\\b]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 1, "Expected 1, got %d\n", sz); - ok(!lstrcmpA(buffer, "b"), "Expected \"b\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\c]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 1, "Expected 1, got %d\n", sz); - ok(!lstrcmpA(buffer, "c"), "Expected \"c\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\[]prop]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 6, "Expected 6, got %d\n", sz); - ok(!lstrcmpA(buffer, "[prop]"), "Expected \"[prop]\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\a]prop]"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 6, "Expected 6, got %d\n", sz); - ok(!lstrcmpA(buffer, "aprop]"), "Expected \"aprop]\", got \"%s\"\n", buffer); - - MsiRecordSetString(hrec, 0, "[\\[]Bracket Text[\\]]"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 14, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,"[Bracket Text]"), "wrong output: %s\n", buffer); - - /* null characters */ - r = MsiRecordSetString(hrec, 0, "[1] [~] [2]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 9, "size wrong: %d\n", sz); - ok( 0 == strcmp(buffer,"boo "), "wrong output: %s\n", buffer); - ok(!lstrcmpA(&buffer[5], " hoo"), - "Expected \" hoo\", got \"%s\"\n", &buffer[5]); - - MsiRecordSetString(hrec, 0, "[1] [~abc] [2]"); - MsiRecordSetString(hrec, 1, "boo"); - MsiRecordSetString(hrec, 2, "hoo"); - sz = sizeof(buffer); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 8, "Expected 8, got %d\n", sz); - ok(!lstrcmpA(buffer, "boo hoo"), "Expected \"boo hoo\", got \"%s\"\n", buffer); - - /* properties */ - r = MsiSetProperty(package,"dummy","Bork"); - ok( r == ERROR_SUCCESS, "set property failed\n"); - r = MsiRecordSetString(hrec, 0, "[1] [dummy] [2]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 12, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo Bork hoo"), "wrong output\n"); - - r = MsiRecordSetString(hrec, 0, "[1] [invalid] [2]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 8, "size wrong\n"); - ok( 0 == strcmp(buffer,"boo hoo"), "wrong output\n"); - - /* nesting tests */ - r = MsiSetProperty(package,"dummya","foo"); - r = MsiSetProperty(package,"dummyb","baa"); - r = MsiSetProperty(package,"adummyc","whoa"); - ok( r == ERROR_SUCCESS, "set property failed\n"); - r = MsiRecordSetString(hrec, 0, "[dummy[1]] [dummy[2]] [[1]dummy[3]]"); - r = MsiRecordSetString(hrec, 1, "a"); - r = MsiRecordSetString(hrec, 2, "b"); - r = MsiRecordSetString(hrec, 3, "c"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 12, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"foo baa whoa"), "wrong output (%s)\n",buffer); - - r = MsiSetProperty(package,"dummya","1"); - r = MsiSetProperty(package,"dummyb","[2]"); - ok( r == ERROR_SUCCESS, "set property failed\n"); - r = MsiRecordSetString(hrec, 0, "[dummya] [[dummya]] [dummyb]"); - r = MsiRecordSetString(hrec, 1, "aaa"); - r = MsiRecordSetString(hrec, 2, "bbb"); - r = MsiRecordSetString(hrec, 3, "ccc"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - todo_wine - { - ok( sz == 9, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"1 [1] [2]"), "wrong output (%s)\n",buffer); - } - - r = MsiSetProperty(package,"dummya","1"); - r = MsiSetProperty(package,"dummyb","a"); - r = MsiSetProperty(package,"dummyc","\\blath"); - r = MsiSetProperty(package,"dummyd","[\\blath]"); - ok( r == ERROR_SUCCESS, "set property failed\n"); - r = MsiRecordSetString(hrec, 0, "[dummyc] [[dummyc]] [dummy[dummyb]]"); - r = MsiRecordSetString(hrec, 1, "aaa"); - r = MsiRecordSetString(hrec, 2, "bbb"); - r = MsiRecordSetString(hrec, 3, "ccc"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 10, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"\\blath b 1"), "wrong output (%s)\n",buffer); - - r = MsiRecordSetString(hrec, 0, "[1] [2] [[\\3asdf]]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - r = MsiRecordSetString(hrec, 3, "yeah"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - todo_wine - { - ok( sz == 11, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"boo hoo [3]"), "wrong output (%s)\n",buffer); - } - - r = MsiRecordSetString(hrec, 0, "[1] [2] [[3]]"); - r = MsiRecordSetString(hrec, 1, "boo"); - r = MsiRecordSetString(hrec, 2, "hoo"); - r = MsiRecordSetString(hrec, 3, "\\help"); - ok( r == ERROR_SUCCESS, "set string failed\n"); - sz = sizeof buffer; - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 9, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"boo hoo h"), "wrong output (%s)\n",buffer); - - /* nested properties */ - MsiSetProperty(package, "PropA", "surprise"); - MsiSetProperty(package, "PropB", "[PropA]"); - MsiSetProperty(package, "PropC", "[PropB]"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "[PropC]"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"[PropB]"), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "PropA", "surprise"); - MsiSetProperty(package, "PropB", "PropA"); - MsiSetProperty(package, "PropC", "PropB"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "[PropC]"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 5, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"PropB"), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "PropA", "surprise"); - MsiSetProperty(package, "PropB", "[PropA]"); - MsiSetProperty(package, "PropC", "[PropB]"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "[[PropC]]"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "PropA", "surprise"); - MsiSetProperty(package, "PropB", "[PropA]"); - MsiSetProperty(package, "PropC", "PropB"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "[[PropC]]"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 7, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"[PropA]"), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "PropA", "surprise"); - MsiSetProperty(package, "PropB", "PropA"); - MsiSetProperty(package, "PropC", "PropB"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "[[PropC]]"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 5, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"PropA"), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "PropA", "surprise"); - MsiSetProperty(package, "PropB", "PropA"); - MsiSetProperty(package, "PropC", "PropB"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "[[[PropC]]]"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 8, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"surprise"), "wrong output (%s)\n",buffer); - - /* properties inside braces */ - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{abcd}"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 6, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{abcd}"), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "one", "mercury"); - MsiSetProperty(package, "two", "venus"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{a[one]bc[two]de[one]f}"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed: %d\n", r); - ok( sz == 25, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"amercurybcvenusdemercuryf"), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "one", "mercury"); - MsiSetProperty(package, "two", "venus"); - MsiSetProperty(package, "bad", ""); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{a[one]bc[bad]de[two]f}"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "bad", ""); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{[bad]}"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "one", "mercury"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{abc{d[one]ef}"); /* missing final brace */ - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - todo_wine - { - ok( sz == 14, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"abc{dmercuryef"), "wrong output (%s)\n",buffer); - } - - MsiSetProperty(package, "one", "mercury"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{abc{d[one]ef}}"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - todo_wine - { - ok( sz == 15, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"abc{dmercuryef}"), "wrong output (%s)\n",buffer); - } - - MsiSetProperty(package, "one", "mercury"); - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{abc}{{def}hi{j[one]k}}"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 5, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,"{abc}"), "wrong output (%s)\n",buffer); - - MsiSetProperty(package, "one", "mercury"); - - sz = sizeof buffer; - MsiRecordSetString(hrec, 0, "{{def}hi{j[one]k}}"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok( r == ERROR_SUCCESS, "format failed\n"); - ok( sz == 0, "size wrong(%i)\n",sz); - ok( 0 == strcmp(buffer,""), "wrong output (%s)\n",buffer); - - sz = sizeof(buffer); - MsiRecordSetString(hrec, 0, "[1] {[noprop] [twoprop]} {abcdef}"); - MsiRecordSetString(hrec, 1, "one"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 13, "Expected 13, got %d\n",sz); - ok(!lstrcmpA(buffer, "one {abcdef}"), - "Expected \"one {abcdef}\", got \"%s\"\n", buffer); - - sz = sizeof(buffer); - MsiRecordSetString(hrec, 0, "[1] {[noprop] [one]} {abcdef}"); - MsiRecordSetString(hrec, 1, "one"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 13, "Expected 13, got %d\n",sz); - ok(!lstrcmpA(buffer, "one {abcdef}"), - "Expected \"one {abcdef}\", got \"%s\"\n", buffer); - - sz = sizeof(buffer); - MsiRecordSetString(hrec, 0, "[1] {[one]} {abcdef}"); - MsiRecordSetString(hrec, 1, "one"); - r = MsiFormatRecord(package, hrec, buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 20, "Expected 20, got %d\n",sz); - ok(!lstrcmpA(buffer, "one mercury {abcdef}"), - "Expected \"one mercury {abcdef}\", got \"%s\"\n", buffer); - - MsiCloseHandle(hrec); - - r = MsiCloseHandle(package); - ok(r==ERROR_SUCCESS, "Unable to close package\n"); - - DeleteFile( filename ); -} - -static void test_formatrecord_tables(void) -{ - MSIHANDLE hdb, hpkg, hrec; - CHAR buf[MAX_PATH]; - CHAR curr_dir[MAX_PATH]; - CHAR expected[MAX_PATH]; - CHAR root[MAX_PATH]; - DWORD size; - UINT r; - - GetCurrentDirectory( MAX_PATH, curr_dir ); - - hdb = create_package_db(); - ok ( hdb, "failed to create package database\n"); - - r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'" ); - ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r); - - r = add_directory_entry( hdb, "'ReallyLongDir', 'TARGETDIR', " - "'I am a really long directory'" ); - ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r); - - r = create_feature_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Feature table: %d\n", r); - - r = add_feature_entry( hdb, "'occipitofrontalis', '', '', '', 2, 1, '', 0" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - r = create_component_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Component table: %d\n", r); - - r = add_component_entry( hdb, "'frontal', '', 'TARGETDIR', 0, '', 'frontal_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r); - - r = add_component_entry( hdb, "'parietal', '', 'TARGETDIR', 1, '', 'parietal_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r); - - r = add_component_entry( hdb, "'temporal', '', 'ReallyLongDir', 0, '', 'temporal_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r); - - r = create_feature_components_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create FeatureComponents table: %d\n", r); - - r = add_feature_components_entry( hdb, "'occipitofrontalis', 'frontal'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r); - - r = add_feature_components_entry( hdb, "'occipitofrontalis', 'parietal'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r); - - r = add_feature_components_entry( hdb, "'occipitofrontalis', 'temporal'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r); - - r = create_file_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create File table: %d\n", r); - - r = add_file_entry( hdb, "'frontal_file', 'frontal', 'frontal.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'parietal_file', 'parietal', 'parietal.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'temporal_file', 'temporal', 'temporal.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = create_custom_action_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create CustomAction table: %d\n", r); - - r = add_custom_action_entry( hdb, "'MyCustom', 51, 'prop', '[!temporal_file]'" ); - ok( r == ERROR_SUCCESS, "cannt add custom action: %d\n", r); - - r = add_custom_action_entry( hdb, "'EscapeIt1', 51, 'prop', '[\\[]Bracket Text[\\]]'" ); - ok( r == ERROR_SUCCESS, "cannt add custom action: %d\n", r); - - r = add_custom_action_entry( hdb, "'EscapeIt2', 51, 'prop', '[\\xabcd]'" ); - ok( r == ERROR_SUCCESS, "cannt add custom action: %d\n", r); - - r = add_custom_action_entry( hdb, "'EscapeIt3', 51, 'prop', '[abcd\\xefgh]'" ); - ok( r == ERROR_SUCCESS, "cannt add custom action: %d\n", r); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle( hdb ); - - r = MsiSetPropertyA( hpkg, "imaprop", "ringer" ); - ok( r == ERROR_SUCCESS, "cannot set property: %d\n", r); - - hrec = MsiCreateRecord( 1 ); - - /* property doesn't exist */ - size = MAX_PATH; - /*MsiRecordSetString( hrec, 0, "[1]" ); */ - MsiRecordSetString( hrec, 1, "[idontexist]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, "1: " ), "Expected '1: ', got %s\n", buf ); - - /* property exists */ - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[imaprop]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, "1: ringer " ), "Expected '1: ringer ', got %s\n", buf ); - - /* environment variable doesn't exist */ - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[%idontexist]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, "1: " ), "Expected '1: ', got %s\n", buf ); - - /* environment variable exists */ - size = MAX_PATH; - SetEnvironmentVariable( "crazyvar", "crazyval" ); - MsiRecordSetString( hrec, 1, "[%crazyvar]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, "1: crazyval " ), "Expected '1: crazyval ', got %s\n", buf ); - - /* file key before CostInitialize */ - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[#frontal_file]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, "1: " ), "Expected '1: ', got %s\n", buf ); - - r = MsiDoAction(hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "CostInitialize failed: %d\n", r); - - r = MsiDoAction(hpkg, "FileCost"); - ok( r == ERROR_SUCCESS, "FileCost failed: %d\n", r); - - r = MsiDoAction(hpkg, "CostFinalize"); - ok( r == ERROR_SUCCESS, "CostFinalize failed: %d\n", r); - - size = MAX_PATH; - MsiGetProperty( hpkg, "ROOTDRIVE", root, &size ); - - sprintf( expected, "1: %sfrontal.txt ", root); - - /* frontal full file key */ - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[#frontal_file]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, expected ), "Expected \"%s\", got \"%s\"\n", expected, buf); - - /* frontal short file key */ - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[!frontal_file]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, expected ), "Expected \"%s\", got \"%s\"\n", expected, buf); - - sprintf( expected, "1: %sI am a really long directory\\temporal.txt ", root); - - /* temporal full file key */ - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[#temporal_file]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, expected ), "Expected \"%s\", got \"%s\"\n", expected, buf); - - /* temporal short file key */ - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[!temporal_file]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, expected ), "Expected \"%s\", got \"%s\"\n", expected, buf); - - /* custom action 51, files don't exist */ - r = MsiDoAction( hpkg, "MyCustom" ); - ok( r == ERROR_SUCCESS, "MyCustom failed: %d\n", r); - - sprintf( expected, "%sI am a really long directory\\temporal.txt", root); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "prop", buf, &size ); - ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); - ok( !lstrcmp( buf, expected ), "Expected \"%s\", got \"%s\"\n", expected, buf); - - sprintf( buf, "%sI am a really long directory", root ); - CreateDirectory( buf, NULL ); - - lstrcat( buf, "\\temporal.txt" ); - create_test_file( buf ); - - /* custom action 51, files exist */ - r = MsiDoAction( hpkg, "MyCustom" ); - ok( r == ERROR_SUCCESS, "MyCustom failed: %d\n", r); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "prop", buf, &size ); - ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); - todo_wine - { - ok( !lstrcmp( buf, expected ), "Expected \"%s\", got \"%s\"\n", expected, buf); - } - - /* custom action 51, escaped text 1 */ - r = MsiDoAction( hpkg, "EscapeIt1" ); - ok( r == ERROR_SUCCESS, "EscapeIt failed: %d\n", r); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "prop", buf, &size ); - ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); - ok( !lstrcmp( buf, "[Bracket Text]" ), "Expected '[Bracket Text]', got %s\n", buf); - - /* custom action 51, escaped text 2 */ - r = MsiDoAction( hpkg, "EscapeIt2" ); - ok( r == ERROR_SUCCESS, "EscapeIt failed: %d\n", r); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "prop", buf, &size ); - ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); - ok( !lstrcmp( buf, "x" ), "Expected 'x', got %s\n", buf); - - /* custom action 51, escaped text 3 */ - r = MsiDoAction( hpkg, "EscapeIt3" ); - ok( r == ERROR_SUCCESS, "EscapeIt failed: %d\n", r); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "prop", buf, &size ); - ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); - ok( !lstrcmp( buf, "" ), "Expected '', got %s\n", buf); - - sprintf( expected, "1: %sI am a really long directory\\ ", root); - - /* component with INSTALLSTATE_LOCAL */ - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[$temporal]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, expected ), "Expected \"%s\", got \"%s\"\n", expected, buf); - - r = MsiSetComponentState( hpkg, "temporal", INSTALLSTATE_SOURCE ); - ok( r == ERROR_SUCCESS, "failed to set install state: %d\n", r); - - /* component with INSTALLSTATE_SOURCE */ - lstrcpy( expected, "1: " ); - lstrcat( expected, curr_dir ); - lstrcat( expected, "\\ " ); - size = MAX_PATH; - MsiRecordSetString( hrec, 1, "[$parietal]" ); - r = MsiFormatRecord( hpkg, hrec, buf, &size ); - ok( r == ERROR_SUCCESS, "format record failed: %d\n", r); - ok( !lstrcmp( buf, expected ), "Expected '%s', got %s\n", expected, buf); - - sprintf( buf, "%sI am a really long directory\\temporal.txt", root ); - DeleteFile( buf ); - - sprintf( buf, "%sI am a really long directory", root ); - RemoveDirectory( buf ); - - MsiCloseHandle( hrec ); - MsiCloseHandle( hpkg ); - DeleteFile( msifile ); -} - -static void test_processmessage(void) -{ - static const CHAR filename[] = "winetest.msi"; - MSIHANDLE hrec; - MSIHANDLE package; - int r; - - package = helper_createpackage( filename ); - ok(package!=0, "Unable to create package\n"); - - hrec = MsiCreateRecord(3); - ok( hrec, "failed to create record\n"); - - r = MsiRecordSetString(hrec, 1, ""); - ok( r == ERROR_SUCCESS, "set string failed\n"); - - r = MsiProcessMessage(package, INSTALLMESSAGE_ACTIONSTART, hrec); - ok( r == IDOK, "expected IDOK, got %i\n", r); - - MsiCloseHandle(hrec); - MsiCloseHandle(package); - - DeleteFile(filename); -} - -START_TEST(format) -{ - test_createpackage(); - test_formatrecord(); - test_formatrecord_package(); - test_formatrecord_tables(); - test_processmessage(); -} diff --git a/rostests/winetests/msi/install.c b/rostests/winetests/msi/install.c deleted file mode 100644 index 8fa729a0833..00000000000 --- a/rostests/winetests/msi/install.c +++ /dev/null @@ -1,4613 +0,0 @@ -/* - * Copyright (C) 2006 James Hawkins - * - * A test program for installing MSI products. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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_MSI 300 -#define COBJMACROS - -#include - -#include -#include -#include -#include -#include -#include - -#include "wine/test.h" - -static UINT (WINAPI *pMsiQueryComponentStateA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE*); -static UINT (WINAPI *pMsiSourceListEnumSourcesA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPSTR, LPDWORD); -static UINT (WINAPI *pMsiSourceListGetInfoA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD); - -static const char *msifile = "msitest.msi"; -static const char *msifile2 = "winetest2.msi"; -static const char *mstfile = "winetest.mst"; -static CHAR CURR_DIR[MAX_PATH]; -static CHAR PROG_FILES_DIR[MAX_PATH]; -static CHAR COMMON_FILES_DIR[MAX_PATH]; - -/* msi database data */ - -static const CHAR component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "Five\t{8CC92E9D-14B2-4CA4-B2AA-B11D02078087}\tNEWDIR\t2\t\tfive.txt\n" - "Four\t{FD37B4EA-7209-45C0-8917-535F35A2F080}\tCABOUTDIR\t2\t\tfour.txt\n" - "One\t{783B242E-E185-4A56-AF86-C09815EC053C}\tMSITESTDIR\t2\t\tone.txt\n" - "Three\t{010B6ADD-B27D-4EDD-9B3D-34C4F7D61684}\tCHANGEDDIR\t2\t\tthree.txt\n" - "Two\t{BF03D1A6-20DA-4A65-82F3-6CAC995915CE}\tFIRSTDIR\t2\t\ttwo.txt\n" - "dangler\t{6091DF25-EF96-45F1-B8E9-A9B1420C7A3C}\tTARGETDIR\t4\t\tregdata\n" - "component\t\tMSITESTDIR\t0\t1\tfile\n" - "service_comp\t\tMSITESTDIR\t0\t1\tservice_file"; - -static const CHAR directory_dat[] = "Directory\tDirectory_Parent\tDefaultDir\n" - "s72\tS72\tl255\n" - "Directory\tDirectory\n" - "CABOUTDIR\tMSITESTDIR\tcabout\n" - "CHANGEDDIR\tMSITESTDIR\tchanged:second\n" - "FIRSTDIR\tMSITESTDIR\tfirst\n" - "MSITESTDIR\tProgramFilesFolder\tmsitest\n" - "NEWDIR\tCABOUTDIR\tnew\n" - "ProgramFilesFolder\tTARGETDIR\t.\n" - "TARGETDIR\t\tSourceDir"; - -static const CHAR feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n" - "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n" - "Feature\tFeature\n" - "Five\t\tFive\tThe Five Feature\t5\t3\tNEWDIR\t0\n" - "Four\t\tFour\tThe Four Feature\t4\t3\tCABOUTDIR\t0\n" - "One\t\tOne\tThe One Feature\t1\t3\tMSITESTDIR\t0\n" - "Three\t\tThree\tThe Three Feature\t3\t3\tCHANGEDDIR\t0\n" - "Two\t\tTwo\tThe Two Feature\t2\t3\tFIRSTDIR\t0\n" - "feature\t\t\t\t2\t1\tTARGETDIR\t0\n" - "service_feature\t\t\t\t2\t1\tTARGETDIR\t0"; - -static const CHAR feature_comp_dat[] = "Feature_\tComponent_\n" - "s38\ts72\n" - "FeatureComponents\tFeature_\tComponent_\n" - "Five\tFive\n" - "Four\tFour\n" - "One\tOne\n" - "Three\tThree\n" - "Two\tTwo\n" - "feature\tcomponent\n" - "service_feature\tservice_comp\n"; - -static const CHAR file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "five.txt\tFive\tfive.txt\t1000\t\t\t16384\t5\n" - "four.txt\tFour\tfour.txt\t1000\t\t\t16384\t4\n" - "one.txt\tOne\tone.txt\t1000\t\t\t0\t1\n" - "three.txt\tThree\tthree.txt\t1000\t\t\t0\t3\n" - "two.txt\tTwo\ttwo.txt\t1000\t\t\t0\t2\n" - "file\tcomponent\tfilename\t100\t\t\t8192\t1\n" - "service_file\tservice_comp\tservice.exe\t100\t\t\t8192\t1"; - -static const CHAR install_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallExecuteSequence\tAction\n" - "AllocateRegistrySpace\tNOT Installed\t1550\n" - "CostFinalize\t\t1000\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "ResolveSource\t\t950\n" - "MoveFiles\t\t1700\n" - "InstallFiles\t\t4000\n" - "DuplicateFiles\t\t4500\n" - "InstallServices\t\t5000\n" - "InstallFinalize\t\t6600\n" - "InstallInitialize\t\t1500\n" - "InstallValidate\t\t1400\n" - "LaunchConditions\t\t100\n" - "WriteRegistryValues\tSourceDir And SOURCEDIR\t5000"; - -static const CHAR media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t3\t\t\tDISK1\t\n" - "2\t5\t\tmsitest.cab\tDISK2\t\n"; - -static const CHAR property_dat[] = "Property\tValue\n" - "s72\tl0\n" - "Property\tProperty\n" - "DefaultUIFont\tDlgFont8\n" - "HASUIRUN\t0\n" - "INSTALLLEVEL\t3\n" - "InstallMode\tTypical\n" - "Manufacturer\tWine\n" - "PIDTemplate\t12345<###-%%%%%%%>@@@@@\n" - "ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n" - "ProductID\tnone\n" - "ProductLanguage\t1033\n" - "ProductName\tMSITEST\n" - "ProductVersion\t1.1.1\n" - "PROMPTROLLBACKCOST\tP\n" - "Setup\tSetup\n" - "UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n" - "AdminProperties\tPOSTADMIN\n" - "ROOTDRIVE\tC:\\\n" - "SERVNAME\tTestService\n" - "SERVDISP\tTestServiceDisp\n"; - -static const CHAR registry_dat[] = "Registry\tRoot\tKey\tName\tValue\tComponent_\n" - "s72\ti2\tl255\tL255\tL0\ts72\n" - "Registry\tRegistry\n" - "Apples\t2\tSOFTWARE\\Wine\\msitest\tName\timaname\tOne\n" - "Oranges\t2\tSOFTWARE\\Wine\\msitest\tnumber\t#314\tTwo\n" - "regdata\t2\tSOFTWARE\\Wine\\msitest\tblah\tbad\tdangler\n" - "OrderTest\t2\tSOFTWARE\\Wine\\msitest\tOrderTestName\tOrderTestValue\tcomponent"; - -static const CHAR service_install_dat[] = "ServiceInstall\tName\tDisplayName\tServiceType\tStartType\tErrorControl\t" - "LoadOrderGroup\tDependencies\tStartName\tPassword\tArguments\tComponent_\tDescription\n" - "s72\ts255\tL255\ti4\ti4\ti4\tS255\tS255\tS255\tS255\tS255\ts72\tL255\n" - "ServiceInstall\tServiceInstall\n" - "TestService\t[SERVNAME]\t[SERVDISP]\t2\t3\t0\t\t\tTestService\t\t\tservice_comp\t\t"; - -static const CHAR service_control_dat[] = "ServiceControl\tName\tEvent\tArguments\tWait\tComponent_\n" - "s72\tl255\ti2\tL255\tI2\ts72\n" - "ServiceControl\tServiceControl\n" - "ServiceControl\tTestService\t8\t\t0\tservice_comp"; - -/* tables for test_continuouscabs */ -static const CHAR cc_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "maximus\t\tMSITESTDIR\t0\t1\tmaximus\n" - "augustus\t\tMSITESTDIR\t0\t1\taugustus\n" - "caesar\t\tMSITESTDIR\t0\t1\tcaesar\n"; - -static const CHAR cc2_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "maximus\t\tMSITESTDIR\t0\t1\tmaximus\n" - "augustus\t\tMSITESTDIR\t0\t0\taugustus\n" - "caesar\t\tMSITESTDIR\t0\t1\tcaesar\n"; - -static const CHAR cc_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n" - "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n" - "Feature\tFeature\n" - "feature\t\t\t\t2\t1\tTARGETDIR\t0"; - -static const CHAR cc_feature_comp_dat[] = "Feature_\tComponent_\n" - "s38\ts72\n" - "FeatureComponents\tFeature_\tComponent_\n" - "feature\tmaximus\n" - "feature\taugustus\n" - "feature\tcaesar"; - -static const CHAR cc_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n" - "augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n" - "caesar\tcaesar\tcaesar\t500\t\t\t16384\t12"; - -static const CHAR cc2_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n" - "augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n" - "tiberius\tmaximus\ttiberius\t500\t\t\t16384\t3\n" - "caesar\tcaesar\tcaesar\t500\t\t\t16384\t12"; - -static const CHAR cc_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t10\t\ttest1.cab\tDISK1\t\n" - "2\t2\t\ttest2.cab\tDISK2\t\n" - "3\t12\t\ttest3.cab\tDISK3\t\n"; - -static const CHAR co_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n" - "augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n" - "caesar\tcaesar\tcaesar\t500\t\t\t16384\t3"; - -static const CHAR co_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t10\t\ttest1.cab\tDISK1\t\n" - "2\t2\t\ttest2.cab\tDISK2\t\n" - "3\t3\t\ttest3.cab\tDISK3\t\n"; - -static const CHAR co2_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t10\t\ttest1.cab\tDISK1\t\n" - "2\t12\t\ttest3.cab\tDISK3\t\n" - "3\t2\t\ttest2.cab\tDISK2\t\n"; - -static const CHAR mm_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "maximus\tmaximus\tmaximus\t500\t\t\t512\t1\n" - "augustus\taugustus\taugustus\t500\t\t\t512\t2\n" - "caesar\tcaesar\tcaesar\t500\t\t\t16384\t3"; - -static const CHAR mm_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t3\t\ttest1.cab\tDISK1\t\n"; - -static const CHAR ss_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t2\t\ttest1.cab\tDISK1\t\n" - "2\t2\t\ttest2.cab\tDISK2\t\n" - "3\t12\t\ttest3.cab\tDISK3\t\n"; - -/* tables for test_uiLevelFlags */ -static const CHAR ui_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "maximus\t\tMSITESTDIR\t0\tHASUIRUN=1\tmaximus\n" - "augustus\t\tMSITESTDIR\t0\t1\taugustus\n" - "caesar\t\tMSITESTDIR\t0\t1\tcaesar\n"; - -static const CHAR ui_install_ui_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallUISequence\tAction\n" - "SetUIProperty\t\t5\n" - "ExecuteAction\t\t1100\n"; - -static const CHAR ui_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n" - "s72\ti2\tS64\tS0\tS255\n" - "CustomAction\tAction\n" - "SetUIProperty\t51\tHASUIRUN\t1\t\n"; - -static const CHAR rof_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "maximus\t\tMSITESTDIR\t0\t1\tmaximus\n"; - -static const CHAR rof_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n" - "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n" - "Feature\tFeature\n" - "feature\t\tFeature\tFeature\t2\t1\tTARGETDIR\t0\n" - "montecristo\t\tFeature\tFeature\t2\t1\tTARGETDIR\t0"; - -static const CHAR rof_feature_comp_dat[] = "Feature_\tComponent_\n" - "s38\ts72\n" - "FeatureComponents\tFeature_\tComponent_\n" - "feature\tmaximus\n" - "montecristo\tmaximus"; - -static const CHAR rof_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "maximus\tmaximus\tmaximus\t500\t\t\t8192\t1"; - -static const CHAR rof_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t1\t\t\tDISK1\t\n"; - -static const CHAR sdp_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallExecuteSequence\tAction\n" - "AllocateRegistrySpace\tNOT Installed\t1550\n" - "CostFinalize\t\t1000\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "InstallFiles\t\t4000\n" - "InstallFinalize\t\t6600\n" - "InstallInitialize\t\t1500\n" - "InstallValidate\t\t1400\n" - "LaunchConditions\t\t100\n" - "SetDirProperty\t\t950"; - -static const CHAR sdp_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n" - "s72\ti2\tS64\tS0\tS255\n" - "CustomAction\tAction\n" - "SetDirProperty\t51\tMSITESTDIR\t[CommonFilesFolder]msitest\\\t\n"; - -static const CHAR cie_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "maximus\t\tMSITESTDIR\t0\t1\tmaximus\n" - "augustus\t\tMSITESTDIR\t0\t1\taugustus\n" - "caesar\t\tMSITESTDIR\t0\t1\tcaesar\n" - "gaius\t\tMSITESTDIR\t0\t1\tgaius\n"; - -static const CHAR cie_feature_comp_dat[] = "Feature_\tComponent_\n" - "s38\ts72\n" - "FeatureComponents\tFeature_\tComponent_\n" - "feature\tmaximus\n" - "feature\taugustus\n" - "feature\tcaesar\n" - "feature\tgaius"; - -static const CHAR cie_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n" - "augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n" - "caesar\tcaesar\tcaesar\t500\t\t\t16384\t12\n" - "gaius\tgaius\tgaius\t500\t\t\t8192\t11"; - -static const CHAR cie_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t1\t\ttest1.cab\tDISK1\t\n" - "2\t2\t\ttest2.cab\tDISK2\t\n" - "3\t12\t\ttest3.cab\tDISK3\t\n"; - -static const CHAR ci_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallExecuteSequence\tAction\n" - "CostFinalize\t\t1000\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "InstallFiles\t\t4000\n" - "InstallServices\t\t5000\n" - "InstallFinalize\t\t6600\n" - "InstallInitialize\t\t1500\n" - "RunInstall\t\t1600\n" - "InstallValidate\t\t1400\n" - "LaunchConditions\t\t100"; - -static const CHAR ci_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n" - "s72\ti2\tS64\tS0\tS255\n" - "CustomAction\tAction\n" - "RunInstall\t87\tmsitest\\concurrent.msi\tMYPROP=[UILevel]\t\n"; - -static const CHAR ci_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "maximus\t{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}\tMSITESTDIR\t0\tUILevel=5\tmaximus\n"; - -static const CHAR ci2_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "augustus\t\tMSITESTDIR\t0\tUILevel=3 AND MYPROP=5\taugustus\n"; - -static const CHAR ci2_feature_comp_dat[] = "Feature_\tComponent_\n" - "s38\ts72\n" - "FeatureComponents\tFeature_\tComponent_\n" - "feature\taugustus"; - -static const CHAR ci2_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "augustus\taugustus\taugustus\t500\t\t\t8192\t1"; - -static const CHAR spf_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n" - "s72\ti2\tS64\tS0\tS255\n" - "CustomAction\tAction\n" - "SetFolderProp\t51\tMSITESTDIR\t[ProgramFilesFolder]\\msitest\\added\t\n"; - -static const CHAR spf_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallExecuteSequence\tAction\n" - "CostFinalize\t\t1000\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "SetFolderProp\t\t950\n" - "InstallFiles\t\t4000\n" - "InstallServices\t\t5000\n" - "InstallFinalize\t\t6600\n" - "InstallInitialize\t\t1500\n" - "InstallValidate\t\t1400\n" - "LaunchConditions\t\t100"; - -static const CHAR spf_install_ui_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallUISequence\tAction\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "CostFinalize\t\t1000\n" - "ExecuteAction\t\t1100\n"; - -static const CHAR pp_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallExecuteSequence\tAction\n" - "ValidateProductID\t\t700\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "CostFinalize\t\t1000\n" - "InstallValidate\t\t1400\n" - "InstallInitialize\t\t1500\n" - "ProcessComponents\tPROCESS_COMPONENTS=1 Or FULL=1\t1600\n" - "UnpublishFeatures\tUNPUBLISH_FEATURES=1 Or FULL=1\t1800\n" - "RemoveFiles\t\t3500\n" - "InstallFiles\t\t4000\n" - "RegisterUser\tREGISTER_USER=1 Or FULL=1\t6000\n" - "RegisterProduct\tREGISTER_PRODUCT=1 Or FULL=1\t6100\n" - "PublishFeatures\tPUBLISH_FEATURES=1 Or FULL=1\t6300\n" - "PublishProduct\tPUBLISH_PRODUCT=1 Or FULL=1\t6400\n" - "InstallFinalize\t\t6600"; - -static const CHAR tp_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "augustus\t\tMSITESTDIR\t0\tprop=\"val\"\taugustus\n"; - -static const CHAR cwd_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "augustus\t\tMSITESTDIR\t0\t\taugustus\n"; - -static const CHAR adm_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "augustus\t\tMSITESTDIR\t0\tPOSTADMIN=1\taugustus"; - -static const CHAR adm_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n" - "s72\ti2\tS64\tS0\tS255\n" - "CustomAction\tAction\n" - "SetPOSTADMIN\t51\tPOSTADMIN\t1\t\n"; - -static const CHAR adm_admin_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "AdminExecuteSequence\tAction\n" - "CostFinalize\t\t1000\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "SetPOSTADMIN\t\t950\n" - "InstallFiles\t\t4000\n" - "InstallFinalize\t\t6600\n" - "InstallInitialize\t\t1500\n" - "InstallValidate\t\t1400\n" - "LaunchConditions\t\t100"; - -static const CHAR amp_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "augustus\t\tMSITESTDIR\t0\tMYPROP=2718\taugustus\n"; - -static const CHAR rem_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "hydrogen\t{C844BD1E-1907-4C00-8BC9-150BD70DF0A1}\tMSITESTDIR\t0\t\thydrogen\n" - "helium\t{5AD3C142-CEF8-490D-B569-784D80670685}\tMSITESTDIR\t1\t\thelium\n" - "lithium\t\tMSITESTDIR\t2\t\tlithium\n"; - -static const CHAR rem_feature_comp_dat[] = "Feature_\tComponent_\n" - "s38\ts72\n" - "FeatureComponents\tFeature_\tComponent_\n" - "feature\thydrogen\n" - "feature\thelium\n" - "feature\tlithium"; - -static const CHAR rem_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "hydrogen\thydrogen\thydrogen\t0\t\t\t8192\t1\n" - "helium\thelium\thelium\t0\t\t\t8192\t1\n" - "lithium\tlithium\tlithium\t0\t\t\t8192\t1"; - -static const CHAR rem_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallExecuteSequence\tAction\n" - "ValidateProductID\t\t700\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "CostFinalize\t\t1000\n" - "InstallValidate\t\t1400\n" - "InstallInitialize\t\t1500\n" - "ProcessComponents\t\t1600\n" - "UnpublishFeatures\t\t1800\n" - "RemoveFiles\t\t3500\n" - "InstallFiles\t\t4000\n" - "RegisterProduct\t\t6100\n" - "PublishFeatures\t\t6300\n" - "PublishProduct\t\t6400\n" - "InstallFinalize\t\t6600"; - -static const CHAR rem_remove_files_dat[] = "FileKey\tComponent_\tFileName\tDirProperty\tInstallMode\n" - "s72\ts72\tS255\ts72\tI2\n" - "RemoveFile\tFileKey\n" - "furlong\thydrogen\tfurlong\tMSITESTDIR\t1\n" - "firkin\thelium\tfirkin\tMSITESTDIR\t1\n" - "fortnight\tlithium\tfortnight\tMSITESTDIR\t1\n" - "becquerel\thydrogen\tbecquerel\tMSITESTDIR\t2\n" - "dioptre\thelium\tdioptre\tMSITESTDIR\t2\n" - "attoparsec\tlithium\tattoparsec\tMSITESTDIR\t2\n" - "storeys\thydrogen\tstoreys\tMSITESTDIR\t3\n" - "block\thelium\tblock\tMSITESTDIR\t3\n" - "siriometer\tlithium\tsiriometer\tMSITESTDIR\t3\n"; - -static const CHAR mov_move_file_dat[] = "FileKey\tComponent_\tSourceName\tDestName\tSourceFolder\tDestFolder\tOptions\n" - "s72\ts72\tS255\tS255\tS72\ts72\ti2\n" - "MoveFile\tFileKey\n" - "abkhazia\taugustus\tnonexistent\tdest\tSourceDir\tMSITESTDIR\t0\n" - "bahamas\taugustus\tnonexistent\tdest\tSourceDir\tMSITESTDIR\t1\n" - "cambodia\taugustus\tcameroon\tcanada\tSourceDir\tMSITESTDIR\t0\n" - "denmark\taugustus\tdjibouti\tdominica\tSourceDir\tMSITESTDIR\t1\n" - "ecuador\taugustus\tegypt\telsalvador\tNotAProp\tMSITESTDIR\t1\n" - "fiji\taugustus\tfinland\tfrance\tSourceDir\tNotAProp\t1\n" - "gabon\taugustus\tgambia\tgeorgia\tSOURCEFULL\tMSITESTDIR\t1\n" - "haiti\taugustus\thonduras\thungary\tSourceDir\tDESTFULL\t1\n" - "iceland\taugustus\tindia\tindonesia\tMSITESTDIR\tMSITESTDIR\t1\n" - "jamaica\taugustus\tjapan\tjordan\tFILEPATHBAD\tMSITESTDIR\t1\n" - "kazakhstan\taugustus\t\tkiribati\tFILEPATHGOOD\tMSITESTDIR\t1\n" - "laos\taugustus\tlatvia\tlebanon\tSourceDir\tMSITESTDIR\t1\n" - "namibia\taugustus\tnauru\tkiribati\tSourceDir\tMSITESTDIR\t1\n" - "wildcard\taugustus\tapp*\twildcard\tSourceDir\tMSITESTDIR\t1\n" - "single\taugustus\tf?o\tsingle\tSourceDir\tMSITESTDIR\t1\n" - "wildcardnodest\taugustus\tbudd*\t\tSourceDir\tMSITESTDIR\t1\n" - "singlenodest\taugustus\tb?r\t\tSourceDir\tMSITESTDIR\t1\n"; - -static const CHAR mc_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "maximus\t\tMSITESTDIR\t0\t1\tmaximus\n" - "augustus\t\tMSITESTDIR\t0\t1\taugustus\n" - "caesar\t\tMSITESTDIR\t0\t1\tcaesar\n" - "gaius\t\tMSITESTDIR\t0\tGAIUS=1\tgaius\n"; - -static const CHAR mc_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n" - "augustus\taugustus\taugustus\t500\t\t\t0\t2\n" - "caesar\tcaesar\tcaesar\t500\t\t\t16384\t3\n" - "gaius\tgaius\tgaius\t500\t\t\t16384\t4"; - -static const CHAR mc_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t1\t\ttest1.cab\tDISK1\t\n" - "2\t2\t\ttest2.cab\tDISK2\t\n" - "3\t3\t\ttest3.cab\tDISK3\t\n" - "4\t4\t\ttest3.cab\tDISK3\t\n"; - -static const CHAR mc_file_hash_dat[] = "File_\tOptions\tHashPart1\tHashPart2\tHashPart3\tHashPart4\n" - "s72\ti2\ti4\ti4\ti4\ti4\n" - "MsiFileHash\tFile_\n" - "caesar\t0\t850433704\t-241429251\t675791761\t-1221108824"; - -static const CHAR df_directory_dat[] = "Directory\tDirectory_Parent\tDefaultDir\n" - "s72\tS72\tl255\n" - "Directory\tDirectory\n" - "THIS\tMSITESTDIR\tthis\n" - "DOESNOT\tTHIS\tdoesnot\n" - "NONEXISTENT\tDOESNOT\texist\n" - "MSITESTDIR\tProgramFilesFolder\tmsitest\n" - "ProgramFilesFolder\tTARGETDIR\t.\n" - "TARGETDIR\t\tSourceDir"; - -static const CHAR df_duplicate_file_dat[] = "FileKey\tComponent_\tFile_\tDestName\tDestFolder\n" - "s72\ts72\ts72\tS255\tS72\n" - "DuplicateFile\tFileKey\n" - "maximus\tmaximus\tmaximus\taugustus\t\n" - "caesar\tmaximus\tmaximus\t\tNONEXISTENT\n"; - -static const CHAR wrv_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "augustus\t\tMSITESTDIR\t0\t\taugustus\n"; - -static const CHAR wrv_registry_dat[] = "Registry\tRoot\tKey\tName\tValue\tComponent_\n" - "s72\ti2\tl255\tL255\tL0\ts72\n" - "Registry\tRegistry\n" - "regdata\t2\tSOFTWARE\\Wine\\msitest\tValue\t[~]one[~]two[~]three\taugustus"; - -static const CHAR ca51_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "augustus\t\tMSITESTDIR\t0\tMYPROP=42\taugustus\n"; - -static const CHAR ca51_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" - "s72\tS255\tI2\n" - "InstallExecuteSequence\tAction\n" - "ValidateProductID\t\t700\n" - "GoodSetProperty\t\t725\n" - "BadSetProperty\t\t750\n" - "CostInitialize\t\t800\n" - "FileCost\t\t900\n" - "CostFinalize\t\t1000\n" - "InstallValidate\t\t1400\n" - "InstallInitialize\t\t1500\n" - "InstallFiles\t\t4000\n" - "InstallFinalize\t\t6600"; - -static const CHAR ca51_custom_action_dat[] = "Action\tType\tSource\tTarget\n" - "s72\ti2\tS64\tS0\n" - "CustomAction\tAction\n" - "GoodSetProperty\t51\tMYPROP\t42\n" - "BadSetProperty\t51\t\tMYPROP\n"; - -static const CHAR is_feature_dat[] = "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n" - "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n" - "Feature\tFeature\n" - "one\t\t\t\t2\t1\t\t0\n" /* favorLocal */ - "two\t\t\t\t2\t1\t\t1\n" /* favorSource */ - "three\t\t\t\t2\t1\t\t4\n" /* favorAdvertise */ - "four\t\t\t\t2\t0\t\t0"; /* disabled */ - -static const CHAR is_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" - "s72\tS38\ts72\ti2\tS255\tS72\n" - "Component\tComponent\n" - "alpha\t\tMSITESTDIR\t0\t\talpha_file\n" /* favorLocal:Local */ - "beta\t\tMSITESTDIR\t1\t\tbeta_file\n" /* favorLocal:Source */ - "gamma\t\tMSITESTDIR\t2\t\tgamma_file\n" /* favorLocal:Optional */ - "theta\t\tMSITESTDIR\t0\t\ttheta_file\n" /* favorSource:Local */ - "delta\t\tMSITESTDIR\t1\t\tdelta_file\n" /* favorSource:Source */ - "epsilon\t\tMSITESTDIR\t2\t\tepsilon_file\n" /* favorSource:Optional */ - "zeta\t\tMSITESTDIR\t0\t\tzeta_file\n" /* favorAdvertise:Local */ - "iota\t\tMSITESTDIR\t1\t\tiota_file\n" /* favorAdvertise:Source */ - "eta\t\tMSITESTDIR\t2\t\teta_file\n" /* favorAdvertise:Optional */ - "kappa\t\tMSITESTDIR\t0\t\tkappa_file\n" /* disabled:Local */ - "lambda\t\tMSITESTDIR\t1\t\tlambda_file\n" /* disabled:Source */ - "mu\t\tMSITESTDIR\t2\t\tmu_file\n"; /* disabled:Optional */ - -static const CHAR is_feature_comp_dat[] = "Feature_\tComponent_\n" - "s38\ts72\n" - "FeatureComponents\tFeature_\tComponent_\n" - "one\talpha\n" - "one\tbeta\n" - "one\tgamma\n" - "two\ttheta\n" - "two\tdelta\n" - "two\tepsilon\n" - "three\tzeta\n" - "three\tiota\n" - "three\teta\n" - "four\tkappa\n" - "four\tlambda\n" - "four\tmu"; - -static const CHAR is_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" - "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" - "File\tFile\n" - "alpha_file\talpha\talpha\t500\t\t\t8192\t1\n" - "beta_file\tbeta\tbeta\t500\t\t\t8291\t2\n" - "gamma_file\tgamma\tgamma\t500\t\t\t8192\t3\n" - "theta_file\ttheta\ttheta\t500\t\t\t8192\t4\n" - "delta_file\tdelta\tdelta\t500\t\t\t8192\t5\n" - "epsilon_file\tepsilon\tepsilon\t500\t\t\t8192\t6\n" - "zeta_file\tzeta\tzeta\t500\t\t\t8192\t7\n" - "iota_file\tiota\tiota\t500\t\t\t8192\t8\n" - "eta_file\teta\teta\t500\t\t\t8192\t9\n" - "kappa_file\tkappa\tkappa\t500\t\t\t8192\t10\n" - "lambda_file\tlambda\tlambda\t500\t\t\t8192\t11\n" - "mu_file\tmu\tmu\t500\t\t\t8192\t12"; - -static const CHAR is_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" - "i2\ti4\tL64\tS255\tS32\tS72\n" - "Media\tDiskId\n" - "1\t12\t\t\tDISK1\t\n"; - -typedef struct _msi_table -{ - const CHAR *filename; - const CHAR *data; - int size; -} msi_table; - -#define ADD_TABLE(x) {#x".idt", x##_dat, sizeof(x##_dat)} - -static const msi_table tables[] = -{ - ADD_TABLE(component), - ADD_TABLE(directory), - ADD_TABLE(feature), - ADD_TABLE(feature_comp), - ADD_TABLE(file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(media), - ADD_TABLE(property), - ADD_TABLE(registry), - ADD_TABLE(service_install), - ADD_TABLE(service_control) -}; - -static const msi_table cc_tables[] = -{ - ADD_TABLE(cc_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cc_feature_comp), - ADD_TABLE(cc_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(cc_media), - ADD_TABLE(property), -}; - -static const msi_table cc2_tables[] = -{ - ADD_TABLE(cc2_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cc_feature_comp), - ADD_TABLE(cc2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(cc_media), - ADD_TABLE(property), -}; - -static const msi_table co_tables[] = -{ - ADD_TABLE(cc_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cc_feature_comp), - ADD_TABLE(co_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(co_media), - ADD_TABLE(property), -}; - -static const msi_table co2_tables[] = -{ - ADD_TABLE(cc_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cc_feature_comp), - ADD_TABLE(cc_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(co2_media), - ADD_TABLE(property), -}; - -static const msi_table mm_tables[] = -{ - ADD_TABLE(cc_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cc_feature_comp), - ADD_TABLE(mm_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(mm_media), - ADD_TABLE(property), -}; - -static const msi_table ss_tables[] = -{ - ADD_TABLE(cc_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cc_feature_comp), - ADD_TABLE(cc_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(ss_media), - ADD_TABLE(property), -}; - -static const msi_table ui_tables[] = -{ - ADD_TABLE(ui_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cc_feature_comp), - ADD_TABLE(cc_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(ui_install_ui_seq), - ADD_TABLE(ui_custom_action), - ADD_TABLE(cc_media), - ADD_TABLE(property), -}; - -static const msi_table rof_tables[] = -{ - ADD_TABLE(rof_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(rof_feature_comp), - ADD_TABLE(rof_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), -}; - -static const msi_table sdp_tables[] = -{ - ADD_TABLE(rof_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(rof_feature_comp), - ADD_TABLE(rof_file), - ADD_TABLE(sdp_install_exec_seq), - ADD_TABLE(sdp_custom_action), - ADD_TABLE(rof_media), - ADD_TABLE(property), -}; - -static const msi_table cie_tables[] = -{ - ADD_TABLE(cie_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cie_feature_comp), - ADD_TABLE(cie_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(cie_media), - ADD_TABLE(property), -}; - -static const msi_table ci_tables[] = -{ - ADD_TABLE(ci_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(rof_feature_comp), - ADD_TABLE(rof_file), - ADD_TABLE(ci_install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), - ADD_TABLE(ci_custom_action), -}; - -static const msi_table ci2_tables[] = -{ - ADD_TABLE(ci2_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), -}; - -static const msi_table spf_tables[] = -{ - ADD_TABLE(ci_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(rof_feature_comp), - ADD_TABLE(rof_file), - ADD_TABLE(spf_install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), - ADD_TABLE(spf_custom_action), - ADD_TABLE(spf_install_ui_seq), -}; - -static const msi_table pp_tables[] = -{ - ADD_TABLE(ci_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(rof_feature_comp), - ADD_TABLE(rof_file), - ADD_TABLE(pp_install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), -}; - -static const msi_table tp_tables[] = -{ - ADD_TABLE(tp_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), -}; - -static const msi_table cwd_tables[] = -{ - ADD_TABLE(cwd_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), -}; - -static const msi_table adm_tables[] = -{ - ADD_TABLE(adm_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), - ADD_TABLE(adm_custom_action), - ADD_TABLE(adm_admin_exec_seq), -}; - -static const msi_table amp_tables[] = -{ - ADD_TABLE(amp_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), -}; - -static const msi_table rem_tables[] = -{ - ADD_TABLE(rem_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(rem_feature_comp), - ADD_TABLE(rem_file), - ADD_TABLE(rem_install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), - ADD_TABLE(rem_remove_files), -}; - -static const msi_table mov_tables[] = -{ - ADD_TABLE(cwd_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), - ADD_TABLE(mov_move_file), -}; - -static const msi_table mc_tables[] = -{ - ADD_TABLE(mc_component), - ADD_TABLE(directory), - ADD_TABLE(cc_feature), - ADD_TABLE(cie_feature_comp), - ADD_TABLE(mc_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(mc_media), - ADD_TABLE(property), - ADD_TABLE(mc_file_hash), -}; - -static const msi_table df_tables[] = -{ - ADD_TABLE(rof_component), - ADD_TABLE(df_directory), - ADD_TABLE(rof_feature), - ADD_TABLE(rof_feature_comp), - ADD_TABLE(rof_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), - ADD_TABLE(df_duplicate_file), -}; - -static const msi_table wrv_tables[] = -{ - ADD_TABLE(wrv_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), - ADD_TABLE(wrv_registry), -}; - -static const msi_table sf_tables[] = -{ - ADD_TABLE(wrv_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), -}; - -static const msi_table ca51_tables[] = -{ - ADD_TABLE(ca51_component), - ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), - ADD_TABLE(ci2_file), - ADD_TABLE(ca51_install_exec_seq), - ADD_TABLE(rof_media), - ADD_TABLE(property), - ADD_TABLE(ca51_custom_action), -}; - -static const msi_table is_tables[] = -{ - ADD_TABLE(is_component), - ADD_TABLE(directory), - ADD_TABLE(is_feature), - ADD_TABLE(is_feature_comp), - ADD_TABLE(is_file), - ADD_TABLE(install_exec_seq), - ADD_TABLE(is_media), - ADD_TABLE(property), -}; - -/* cabinet definitions */ - -/* make the max size large so there is only one cab file */ -#define MEDIA_SIZE 0x7FFFFFFF -#define FOLDER_THRESHOLD 900000 - -/* the FCI callbacks */ - -static void *mem_alloc(ULONG cb) -{ - return HeapAlloc(GetProcessHeap(), 0, cb); -} - -static void mem_free(void *memory) -{ - HeapFree(GetProcessHeap(), 0, memory); -} - -static BOOL get_next_cabinet(PCCAB pccab, ULONG cbPrevCab, void *pv) -{ - sprintf(pccab->szCab, pv, pccab->iCab); - return TRUE; -} - -static long progress(UINT typeStatus, ULONG cb1, ULONG cb2, void *pv) -{ - return 0; -} - -static int file_placed(PCCAB pccab, char *pszFile, long cbFile, - BOOL fContinuation, void *pv) -{ - return 0; -} - -static INT_PTR fci_open(char *pszFile, int oflag, int pmode, int *err, void *pv) -{ - HANDLE handle; - DWORD dwAccess = 0; - DWORD dwShareMode = 0; - DWORD dwCreateDisposition = OPEN_EXISTING; - - dwAccess = GENERIC_READ | GENERIC_WRITE; - /* FILE_SHARE_DELETE is not supported by Windows Me/98/95 */ - dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; - - if (GetFileAttributesA(pszFile) != INVALID_FILE_ATTRIBUTES) - dwCreateDisposition = OPEN_EXISTING; - else - dwCreateDisposition = CREATE_NEW; - - handle = CreateFileA(pszFile, dwAccess, dwShareMode, NULL, - dwCreateDisposition, 0, NULL); - - ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszFile); - - return (INT_PTR)handle; -} - -static UINT fci_read(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD dwRead; - BOOL res; - - res = ReadFile(handle, memory, cb, &dwRead, NULL); - ok(res, "Failed to ReadFile\n"); - - return dwRead; -} - -static UINT fci_write(INT_PTR hf, void *memory, UINT cb, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD dwWritten; - BOOL res; - - res = WriteFile(handle, memory, cb, &dwWritten, NULL); - ok(res, "Failed to WriteFile\n"); - - return dwWritten; -} - -static int fci_close(INT_PTR hf, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - ok(CloseHandle(handle), "Failed to CloseHandle\n"); - - return 0; -} - -static long fci_seek(INT_PTR hf, long dist, int seektype, int *err, void *pv) -{ - HANDLE handle = (HANDLE)hf; - DWORD ret; - - ret = SetFilePointer(handle, dist, NULL, seektype); - ok(ret != INVALID_SET_FILE_POINTER, "Failed to SetFilePointer\n"); - - return ret; -} - -static int fci_delete(char *pszFile, int *err, void *pv) -{ - BOOL ret = DeleteFileA(pszFile); - ok(ret, "Failed to DeleteFile %s\n", pszFile); - - return 0; -} - -static void init_functionpointers(void) -{ - HMODULE hmsi = GetModuleHandleA("msi.dll"); - -#define GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hmsi, #func); \ - if(!p ## func) \ - trace("GetProcAddress(%s) failed\n", #func); - - GET_PROC(MsiQueryComponentStateA); - GET_PROC(MsiSourceListEnumSourcesA); - GET_PROC(MsiSourceListGetInfoA); - -#undef GET_PROC -} - -static void get_user_sid(LPSTR *usersid) -{ - HANDLE token; - BYTE buf[1024]; - DWORD size; - PTOKEN_USER user; - HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll"); - static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*); - - *usersid = NULL; - pConvertSidToStringSidA = (void *)GetProcAddress(hadvapi32, "ConvertSidToStringSidA"); - if (!pConvertSidToStringSidA) - return; - - OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token); - size = sizeof(buf); - GetTokenInformation(token, TokenUser, (void *)buf, size, &size); - user = (PTOKEN_USER)buf; - pConvertSidToStringSidA(user->User.Sid, usersid); -} - -static BOOL check_record(MSIHANDLE rec, UINT field, LPCSTR val) -{ - CHAR buffer[0x20]; - UINT r; - DWORD sz; - - sz = sizeof buffer; - r = MsiRecordGetString(rec, field, buffer, &sz); - return (r == ERROR_SUCCESS ) && !strcmp(val, buffer); -} - -static BOOL get_temp_file(char *pszTempName, int cbTempName, void *pv) -{ - LPSTR tempname; - - tempname = HeapAlloc(GetProcessHeap(), 0, MAX_PATH); - GetTempFileNameA(".", "xx", 0, tempname); - - if (tempname && (strlen(tempname) < (unsigned)cbTempName)) - { - lstrcpyA(pszTempName, tempname); - HeapFree(GetProcessHeap(), 0, tempname); - return TRUE; - } - - HeapFree(GetProcessHeap(), 0, tempname); - - return FALSE; -} - -static INT_PTR get_open_info(char *pszName, USHORT *pdate, USHORT *ptime, - USHORT *pattribs, int *err, void *pv) -{ - BY_HANDLE_FILE_INFORMATION finfo; - FILETIME filetime; - HANDLE handle; - DWORD attrs; - BOOL res; - - handle = CreateFile(pszName, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); - - ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszName); - - res = GetFileInformationByHandle(handle, &finfo); - ok(res, "Expected GetFileInformationByHandle to succeed\n"); - - FileTimeToLocalFileTime(&finfo.ftLastWriteTime, &filetime); - FileTimeToDosDateTime(&filetime, pdate, ptime); - - attrs = GetFileAttributes(pszName); - ok(attrs != INVALID_FILE_ATTRIBUTES, "Failed to GetFileAttributes\n"); - - return (INT_PTR)handle; -} - -static BOOL add_file(HFCI hfci, const char *file, TCOMP compress) -{ - char path[MAX_PATH]; - char filename[MAX_PATH]; - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, file); - - lstrcpyA(filename, file); - - return FCIAddFile(hfci, path, filename, FALSE, get_next_cabinet, - progress, get_open_info, compress); -} - -static void set_cab_parameters(PCCAB pCabParams, const CHAR *name, DWORD max_size) -{ - ZeroMemory(pCabParams, sizeof(CCAB)); - - pCabParams->cb = max_size; - pCabParams->cbFolderThresh = FOLDER_THRESHOLD; - pCabParams->setID = 0xbeef; - pCabParams->iCab = 1; - lstrcpyA(pCabParams->szCabPath, CURR_DIR); - lstrcatA(pCabParams->szCabPath, "\\"); - lstrcpyA(pCabParams->szCab, name); -} - -static void create_cab_file(const CHAR *name, DWORD max_size, const CHAR *files) -{ - CCAB cabParams; - LPCSTR ptr; - HFCI hfci; - ERF erf; - BOOL res; - - set_cab_parameters(&cabParams, name, max_size); - - hfci = FCICreate(&erf, file_placed, mem_alloc, mem_free, fci_open, - fci_read, fci_write, fci_close, fci_seek, fci_delete, - get_temp_file, &cabParams, NULL); - - ok(hfci != NULL, "Failed to create an FCI context\n"); - - ptr = files; - while (*ptr) - { - res = add_file(hfci, ptr, tcompTYPE_MSZIP); - ok(res, "Failed to add file: %s\n", ptr); - ptr += lstrlen(ptr) + 1; - } - - res = FCIFlushCabinet(hfci, FALSE, get_next_cabinet, progress); - ok(res, "Failed to flush the cabinet\n"); - - res = FCIDestroy(hfci); - ok(res, "Failed to destroy the cabinet\n"); -} - -static BOOL get_program_files_dir(LPSTR buf, LPSTR buf2) -{ - HKEY hkey; - DWORD type, size; - - if (RegOpenKey(HKEY_LOCAL_MACHINE, - "Software\\Microsoft\\Windows\\CurrentVersion", &hkey)) - return FALSE; - - size = MAX_PATH; - if (RegQueryValueExA(hkey, "ProgramFilesDir", 0, &type, (LPBYTE)buf, &size)) { - RegCloseKey(hkey); - return FALSE; - } - - size = MAX_PATH; - if (RegQueryValueExA(hkey, "CommonFilesDir", 0, &type, (LPBYTE)buf2, &size)) { - RegCloseKey(hkey); - return FALSE; - } - - RegCloseKey(hkey); - return TRUE; -} - -static void create_file_data(LPCSTR name, LPCSTR data, DWORD size) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, data, strlen(data), &written, NULL); - - if (size) - { - SetFilePointer(file, size, NULL, FILE_BEGIN); - SetEndOfFile(file); - } - - CloseHandle(file); -} - -#define create_file(name, size) create_file_data(name, name, size) - -static void create_test_files(void) -{ - CreateDirectoryA("msitest", NULL); - create_file("msitest\\one.txt", 100); - CreateDirectoryA("msitest\\first", NULL); - create_file("msitest\\first\\two.txt", 100); - CreateDirectoryA("msitest\\second", NULL); - create_file("msitest\\second\\three.txt", 100); - - create_file("four.txt", 100); - create_file("five.txt", 100); - create_cab_file("msitest.cab", MEDIA_SIZE, "four.txt\0five.txt\0"); - - create_file("msitest\\filename", 100); - create_file("msitest\\service.exe", 100); - - DeleteFileA("four.txt"); - DeleteFileA("five.txt"); -} - -static BOOL delete_pf(const CHAR *rel_path, BOOL is_file) -{ - CHAR path[MAX_PATH]; - - lstrcpyA(path, PROG_FILES_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, rel_path); - - if (is_file) - return DeleteFileA(path); - else - return RemoveDirectoryA(path); -} - -static BOOL delete_cf(const CHAR *rel_path, BOOL is_file) -{ - CHAR path[MAX_PATH]; - - lstrcpyA(path, COMMON_FILES_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, rel_path); - - if (is_file) - return DeleteFileA(path); - else - return RemoveDirectoryA(path); -} - -static void delete_test_files(void) -{ - DeleteFileA("msitest.msi"); - DeleteFileA("msitest.cab"); - DeleteFileA("msitest\\second\\three.txt"); - DeleteFileA("msitest\\first\\two.txt"); - DeleteFileA("msitest\\one.txt"); - DeleteFileA("msitest\\service.exe"); - DeleteFileA("msitest\\filename"); - RemoveDirectoryA("msitest\\second"); - RemoveDirectoryA("msitest\\first"); - RemoveDirectoryA("msitest"); -} - -static void write_file(const CHAR *filename, const char *data, int data_size) -{ - DWORD size; - - HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - WriteFile(hf, data, data_size, &size, NULL); - CloseHandle(hf); -} - -static void write_msi_summary_info(MSIHANDLE db) -{ - MSIHANDLE summary; - UINT r; - - r = MsiGetSummaryInformationA(db, NULL, 5, &summary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiSummaryInfoSetPropertyA(summary, PID_TEMPLATE, VT_LPSTR, 0, NULL, ";1033"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiSummaryInfoSetPropertyA(summary, PID_REVNUMBER, VT_LPSTR, 0, NULL, - "{004757CA-5092-49c2-AD20-28E1CE0DF5F2}"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiSummaryInfoSetPropertyA(summary, PID_PAGECOUNT, VT_I4, 100, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiSummaryInfoSetPropertyA(summary, PID_WORDCOUNT, VT_I4, 0, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiSummaryInfoSetPropertyA(summary, PID_TITLE, VT_LPSTR, 0, NULL, "MSITEST"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - /* write the summary changes back to the stream */ - r = MsiSummaryInfoPersist(summary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - MsiCloseHandle(summary); -} - -static void create_database(const CHAR *name, const msi_table *tables, int num_tables) -{ - MSIHANDLE db; - UINT r; - int j; - - r = MsiOpenDatabaseA(name, MSIDBOPEN_CREATE, &db); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - /* import the tables into the database */ - for (j = 0; j < num_tables; j++) - { - const msi_table *table = &tables[j]; - - write_file(table->filename, table->data, (table->size - 1) * sizeof(char)); - - r = MsiDatabaseImportA(db, CURR_DIR, table->filename); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - DeleteFileA(table->filename); - } - - write_msi_summary_info(db); - - r = MsiDatabaseCommit(db); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - MsiCloseHandle(db); -} - -static void check_service_is_installed(void) -{ - SC_HANDLE scm, service; - BOOL res; - - scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - ok(scm != NULL, "Failed to open the SC Manager\n"); - - service = OpenService(scm, "TestService", SC_MANAGER_ALL_ACCESS); - ok(service != NULL, "Failed to open TestService\n"); - - res = DeleteService(service); - ok(res, "Failed to delete TestService\n"); - - CloseServiceHandle(service); - CloseServiceHandle(scm); -} - -static void test_MsiInstallProduct(void) -{ - UINT r; - CHAR path[MAX_PATH]; - LONG res; - HKEY hkey; - DWORD num, size, type; - SC_HANDLE scm; - - scm = OpenSCManager(NULL, NULL, GENERIC_ALL); - if (!scm && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("Services are not implemented, we are most likely on win9x\n"); - return; - } - CloseServiceHandle(scm); - - create_test_files(); - create_database(msifile, tables, sizeof(tables) / sizeof(msi_table)); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\cabout\\new", FALSE), "File not installed\n"); - ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\cabout", FALSE), "File not installed\n"); - ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\changed", FALSE), "File not installed\n"); - ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\first", FALSE), "File not installed\n"); - ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\filename", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\service.exe", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - res = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest", &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - type = REG_SZ; - res = RegQueryValueExA(hkey, "Name", NULL, &type, (LPBYTE)path, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(path, "imaname"), "Expected imaname, got %s\n", path); - - size = MAX_PATH; - type = REG_SZ; - res = RegQueryValueExA(hkey, "blah", NULL, &type, (LPBYTE)path, &size); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - size = sizeof(num); - type = REG_DWORD; - res = RegQueryValueExA(hkey, "number", NULL, &type, (LPBYTE)&num, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(num == 314, "Expected 314, got %d\n", num); - - size = MAX_PATH; - type = REG_SZ; - res = RegQueryValueExA(hkey, "OrderTestName", NULL, &type, (LPBYTE)path, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(path, "OrderTestValue"), "Expected imaname, got %s\n", path); - - check_service_is_installed(); - - RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest"); - - delete_test_files(); -} - -static void test_MsiSetComponentState(void) -{ - INSTALLSTATE installed, action; - MSIHANDLE package; - char path[MAX_PATH]; - UINT r; - - create_database(msifile, tables, sizeof(tables) / sizeof(msi_table)); - - CoInitialize(NULL); - - lstrcpy(path, CURR_DIR); - lstrcat(path, "\\"); - lstrcat(path, msifile); - - r = MsiOpenPackage(path, &package); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiDoAction(package, "CostInitialize"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiDoAction(package, "FileCost"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiDoAction(package, "CostFinalize"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiGetComponentState(package, "dangler", &installed, &action); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(installed == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", installed); - ok(action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - r = MsiSetComponentState(package, "dangler", INSTALLSTATE_SOURCE); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - MsiCloseHandle(package); - CoUninitialize(); - - DeleteFileA(msifile); -} - -static void test_packagecoltypes(void) -{ - MSIHANDLE hdb, view, rec; - char path[MAX_PATH]; - LPCSTR query; - UINT r, count; - - create_database(msifile, tables, sizeof(tables) / sizeof(msi_table)); - - CoInitialize(NULL); - - lstrcpy(path, CURR_DIR); - lstrcat(path, "\\"); - lstrcat(path, msifile); - - r = MsiOpenDatabase(path, MSIDBOPEN_READONLY, &hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - query = "SELECT * FROM `Media`"; - r = MsiDatabaseOpenView( hdb, query, &view ); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - - r = MsiViewGetColumnInfo( view, MSICOLINFO_NAMES, &rec ); - count = MsiRecordGetFieldCount( rec ); - ok(r == ERROR_SUCCESS, "MsiViewGetColumnInfo failed\n"); - ok(count == 6, "Expected 6, got %d\n", count); - ok(check_record(rec, 1, "DiskId"), "wrong column label\n"); - ok(check_record(rec, 2, "LastSequence"), "wrong column label\n"); - ok(check_record(rec, 3, "DiskPrompt"), "wrong column label\n"); - ok(check_record(rec, 4, "Cabinet"), "wrong column label\n"); - ok(check_record(rec, 5, "VolumeLabel"), "wrong column label\n"); - ok(check_record(rec, 6, "Source"), "wrong column label\n"); - MsiCloseHandle(rec); - - r = MsiViewGetColumnInfo( view, MSICOLINFO_TYPES, &rec ); - count = MsiRecordGetFieldCount( rec ); - ok(r == ERROR_SUCCESS, "MsiViewGetColumnInfo failed\n"); - ok(count == 6, "Expected 6, got %d\n", count); - ok(check_record(rec, 1, "i2"), "wrong column label\n"); - ok(check_record(rec, 2, "i4"), "wrong column label\n"); - ok(check_record(rec, 3, "L64"), "wrong column label\n"); - ok(check_record(rec, 4, "S255"), "wrong column label\n"); - ok(check_record(rec, 5, "S32"), "wrong column label\n"); - ok(check_record(rec, 6, "S72"), "wrong column label\n"); - - MsiCloseHandle(rec); - MsiCloseHandle(view); - MsiCloseHandle(hdb); - DeleteFile(msifile); -} - -static void create_cc_test_files(void) -{ - CCAB cabParams; - HFCI hfci; - ERF erf; - static CHAR cab_context[] = "test%d.cab"; - BOOL res; - - create_file("maximus", 500); - create_file("augustus", 50000); - create_file("tiberius", 500); - create_file("caesar", 500); - - set_cab_parameters(&cabParams, "test1.cab", 40000); - - hfci = FCICreate(&erf, file_placed, mem_alloc, mem_free, fci_open, - fci_read, fci_write, fci_close, fci_seek, fci_delete, - get_temp_file, &cabParams, cab_context); - ok(hfci != NULL, "Failed to create an FCI context\n"); - - res = add_file(hfci, "maximus", tcompTYPE_NONE); - ok(res, "Failed to add file maximus\n"); - - res = add_file(hfci, "augustus", tcompTYPE_NONE); - ok(res, "Failed to add file augustus\n"); - - res = add_file(hfci, "tiberius", tcompTYPE_NONE); - ok(res, "Failed to add file tiberius\n"); - - res = FCIFlushCabinet(hfci, FALSE, get_next_cabinet, progress); - ok(res, "Failed to flush the cabinet\n"); - - res = FCIDestroy(hfci); - ok(res, "Failed to destroy the cabinet\n"); - - create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0"); - - DeleteFile("maximus"); - DeleteFile("augustus"); - DeleteFile("tiberius"); - DeleteFile("caesar"); -} - -static void delete_cab_files(void) -{ - SHFILEOPSTRUCT shfl; - CHAR path[MAX_PATH+10]; - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\*.cab"); - path[strlen(path) + 1] = '\0'; - - shfl.hwnd = NULL; - shfl.wFunc = FO_DELETE; - shfl.pFrom = path; - shfl.pTo = NULL; - shfl.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION | FOF_NORECURSION | FOF_SILENT; - - SHFileOperation(&shfl); -} - -static void test_continuouscabs(void) -{ - UINT r; - - create_cc_test_files(); - create_database(msifile, cc_tables, sizeof(cc_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - r = MsiInstallProductA(msifile, NULL); - if (r == ERROR_SUCCESS) /* win9x has a problem with this */ - { - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - } - - delete_cab_files(); - DeleteFile(msifile); - - create_cc_test_files(); - create_database(msifile, cc2_tables, sizeof(cc2_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n"); - ok(delete_pf("msitest\\tiberius", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - delete_cab_files(); - DeleteFile(msifile); -} - -static void test_caborder(void) -{ - UINT r; - - create_file("imperator", 100); - create_file("maximus", 500); - create_file("augustus", 50000); - create_file("caesar", 500); - - create_database(msifile, cc_tables, sizeof(cc_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0"); - create_cab_file("test2.cab", MEDIA_SIZE, "augustus\0"); - create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0"); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); - ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n"); - ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n"); - todo_wine - { - ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n"); - ok(!delete_pf("msitest", FALSE), "File is installed\n"); - } - - delete_cab_files(); - - create_cab_file("test1.cab", MEDIA_SIZE, "imperator\0"); - create_cab_file("test2.cab", MEDIA_SIZE, "maximus\0augustus\0"); - create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0"); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); - ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n"); - ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n"); - ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n"); - todo_wine - { - ok(!delete_pf("msitest", FALSE), "File is installed\n"); - } - - delete_cab_files(); - DeleteFile(msifile); - - create_cc_test_files(); - create_database(msifile, co_tables, sizeof(co_tables) / sizeof(msi_table)); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); - ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n"); - ok(!delete_pf("msitest", FALSE), "File is installed\n"); - todo_wine - { - ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n"); - ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n"); - } - - delete_cab_files(); - DeleteFile(msifile); - - create_cc_test_files(); - create_database(msifile, co2_tables, sizeof(co2_tables) / sizeof(msi_table)); - - r = MsiInstallProductA(msifile, NULL); - ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n"); - todo_wine - { - ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); - ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n"); - ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n"); - ok(!delete_pf("msitest", FALSE), "File is installed\n"); - } - - delete_cab_files(); - DeleteFile("imperator"); - DeleteFile("maximus"); - DeleteFile("augustus"); - DeleteFile("caesar"); - DeleteFile(msifile); -} - -static void test_mixedmedia(void) -{ - UINT r; - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - create_file("msitest\\augustus", 500); - create_file("caesar", 500); - - create_database(msifile, mm_tables, sizeof(mm_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - create_cab_file("test1.cab", MEDIA_SIZE, "caesar\0"); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - /* Delete the files in the temp (current) folder */ - DeleteFile("msitest\\maximus"); - DeleteFile("msitest\\augustus"); - RemoveDirectory("msitest"); - DeleteFile("caesar"); - DeleteFile("test1.cab"); - DeleteFile(msifile); -} - -static void test_samesequence(void) -{ - UINT r; - - create_cc_test_files(); - create_database(msifile, ss_tables, sizeof(ss_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - r = MsiInstallProductA(msifile, NULL); - if (r == ERROR_SUCCESS) /* win9x has a problem with this */ - { - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - } - - delete_cab_files(); - DeleteFile(msifile); -} - -static void test_uiLevelFlags(void) -{ - UINT r; - - create_cc_test_files(); - create_database(msifile, ui_tables, sizeof(ui_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE | INSTALLUILEVEL_SOURCERESONLY, NULL); - - r = MsiInstallProductA(msifile, NULL); - if (r == ERROR_SUCCESS) /* win9x has a problem with this */ - { - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(!delete_pf("msitest\\maximus", TRUE), "UI install occurred, but execute-only was requested.\n"); - ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - } - - delete_cab_files(); - DeleteFile(msifile); -} - -static BOOL file_matches(LPSTR path) -{ - CHAR buf[MAX_PATH]; - HANDLE file; - DWORD size; - - file = CreateFile(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, 0, NULL); - - ZeroMemory(buf, MAX_PATH); - ReadFile(file, buf, 15, &size, NULL); - CloseHandle(file); - - return !lstrcmp(buf, "msitest\\maximus"); -} - -static void test_readonlyfile(void) -{ - UINT r; - DWORD size; - HANDLE file; - CHAR path[MAX_PATH]; - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - create_database(msifile, rof_tables, sizeof(rof_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - lstrcpy(path, PROG_FILES_DIR); - lstrcat(path, "\\msitest"); - CreateDirectory(path, NULL); - - lstrcat(path, "\\maximus"); - file = CreateFile(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, CREATE_NEW, FILE_ATTRIBUTE_READONLY, NULL); - - WriteFile(file, "readonlyfile", 20, &size, NULL); - CloseHandle(file); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(file_matches(path), "Expected file to be overwritten\n"); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - /* Delete the files in the temp (current) folder */ - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); - DeleteFile(msifile); -} - -static void test_setdirproperty(void) -{ - UINT r; - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - create_database(msifile, sdp_tables, sizeof(sdp_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(delete_cf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_cf("msitest", FALSE), "File not installed\n"); - - /* Delete the files in the temp (current) folder */ - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); -} - -static void test_cabisextracted(void) -{ - UINT r; - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\gaius", 500); - create_file("maximus", 500); - create_file("augustus", 500); - create_file("caesar", 500); - - create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0"); - create_cab_file("test2.cab", MEDIA_SIZE, "augustus\0"); - create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0"); - - create_database(msifile, cie_tables, sizeof(cie_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\gaius", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - /* Delete the files in the temp (current) folder */ - delete_cab_files(); - DeleteFile(msifile); - DeleteFile("maximus"); - DeleteFile("augustus"); - DeleteFile("caesar"); - DeleteFile("msitest\\gaius"); - RemoveDirectory("msitest"); -} - -static void test_concurrentinstall(void) -{ - UINT r; - CHAR path[MAX_PATH]; - - CreateDirectoryA("msitest", NULL); - CreateDirectoryA("msitest\\msitest", NULL); - create_file("msitest\\maximus", 500); - create_file("msitest\\msitest\\augustus", 500); - - create_database(msifile, ci_tables, sizeof(ci_tables) / sizeof(msi_table)); - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\msitest\\concurrent.msi"); - create_database(path, ci2_tables, sizeof(ci2_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - if (!delete_pf("msitest\\augustus", TRUE)) - trace("concurrent installs not supported\n"); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - DeleteFile(path); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - DeleteFile(msifile); - DeleteFile("msitest\\msitest\\augustus"); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest\\msitest"); - RemoveDirectory("msitest"); -} - -static void test_setpropertyfolder(void) -{ - UINT r; - CHAR path[MAX_PATH]; - - lstrcpyA(path, PROG_FILES_DIR); - lstrcatA(path, "\\msitest\\added"); - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - - create_database(msifile, spf_tables, sizeof(spf_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - if (GetFileAttributesA(path) == FILE_ATTRIBUTE_DIRECTORY) - { - ok(delete_pf("msitest\\added\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest\\added", FALSE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - } - else - { - trace("changing folder property not supported\n"); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - } - - /* Delete the files in the temp (current) folder */ - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); -} - -static BOOL file_exists(LPCSTR file) -{ - return GetFileAttributes(file) != INVALID_FILE_ATTRIBUTES; -} - -static BOOL pf_exists(LPCSTR file) -{ - CHAR path[MAX_PATH]; - - lstrcpyA(path, PROG_FILES_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, file); - - return file_exists(path); -} - -static void delete_pfmsitest_files(void) -{ - SHFILEOPSTRUCT shfl; - CHAR path[MAX_PATH+11]; - - lstrcpyA(path, PROG_FILES_DIR); - lstrcatA(path, "\\msitest\\*"); - path[strlen(path) + 1] = '\0'; - - shfl.hwnd = NULL; - shfl.wFunc = FO_DELETE; - shfl.pFrom = path; - shfl.pTo = NULL; - shfl.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION | FOF_NORECURSION | FOF_SILENT; - - SHFileOperation(&shfl); - - lstrcpyA(path, PROG_FILES_DIR); - lstrcatA(path, "\\msitest"); - RemoveDirectoryA(path); -} - -static void check_reg_str(HKEY prodkey, LPCSTR name, LPCSTR expected, BOOL bcase, DWORD line) -{ - char val[MAX_PATH]; - DWORD size, type; - LONG res; - - size = MAX_PATH; - val[0] = '\0'; - res = RegQueryValueExA(prodkey, name, NULL, &type, (LPBYTE)val, &size); - - if (res != ERROR_SUCCESS || - (type != REG_SZ && type != REG_EXPAND_SZ && type != REG_MULTI_SZ)) - { - ok_(__FILE__, line)(FALSE, "Key doesn't exist or wrong type\n"); - return; - } - - if (!expected) - ok_(__FILE__, line)(lstrlenA(val) == 0, "Expected empty string, got %s\n", val); - else - { - if (bcase) - ok_(__FILE__, line)(!lstrcmpA(val, expected), "Expected %s, got %s\n", expected, val); - else - ok_(__FILE__, line)(!lstrcmpiA(val, expected), "Expected %s, got %s\n", expected, val); - } -} - -static void check_reg_dword(HKEY prodkey, LPCSTR name, DWORD expected, DWORD line) -{ - DWORD val, size, type; - LONG res; - - size = sizeof(DWORD); - res = RegQueryValueExA(prodkey, name, NULL, &type, (LPBYTE)&val, &size); - - if (res != ERROR_SUCCESS || type != REG_DWORD) - { - ok_(__FILE__, line)(FALSE, "Key doesn't exist or wrong type\n"); - return; - } - - ok_(__FILE__, line)(val == expected, "Expected %d, got %d\n", expected, val); -} - -#define CHECK_REG_STR(prodkey, name, expected) \ - check_reg_str(prodkey, name, expected, TRUE, __LINE__); - -#define CHECK_DEL_REG_STR(prodkey, name, expected) \ - check_reg_str(prodkey, name, expected, TRUE, __LINE__); \ - RegDeleteValueA(prodkey, name); - -#define CHECK_REG_ISTR(prodkey, name, expected) \ - check_reg_str(prodkey, name, expected, FALSE, __LINE__); - -#define CHECK_DEL_REG_ISTR(prodkey, name, expected) \ - check_reg_str(prodkey, name, expected, FALSE, __LINE__); \ - RegDeleteValueA(prodkey, name); - -#define CHECK_REG_DWORD(prodkey, name, expected) \ - check_reg_dword(prodkey, name, expected, __LINE__); - -#define CHECK_DEL_REG_DWORD(prodkey, name, expected) \ - check_reg_dword(prodkey, name, expected, __LINE__); \ - RegDeleteValueA(prodkey, name); - -static void get_date_str(LPSTR date) -{ - SYSTEMTIME systime; - - static const char date_fmt[] = "%d%02d%02d"; - GetLocalTime(&systime); - sprintf(date, date_fmt, systime.wYear, systime.wMonth, systime.wDay); -} - -static void test_publish_registerproduct(void) -{ - UINT r; - LONG res; - HKEY hkey; - HKEY props, usage; - LPSTR usersid; - char date[MAX_PATH]; - char temp[MAX_PATH]; - char keypath[MAX_PATH]; - - static const CHAR uninstall[] = "Software\\Microsoft\\Windows\\CurrentVersion" - "\\Uninstall\\{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"; - static const CHAR userdata[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Installer" - "\\UserData\\%s\\Products\\84A88FD7F6998CE40A22FB59F6B9C2BB"; - static const CHAR ugkey[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Installer" - "\\UpgradeCodes\\51AAE0C44620A5E4788506E91F249BD2"; - static const CHAR userugkey[] = "Software\\Microsoft\\Installer\\UpgradeCodes" - "\\51AAE0C44620A5E4788506E91F249BD2"; - - get_user_sid(&usersid); - if (!usersid) - { - skip("ConvertSidToStringSidA is not available\n"); - return; - } - - get_date_str(date); - GetTempPath(MAX_PATH, temp); - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - - create_database(msifile, pp_tables, sizeof(pp_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - /* RegisterProduct */ - r = MsiInstallProductA(msifile, "REGISTER_PRODUCT=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - res = RegOpenKeyA(HKEY_CURRENT_USER, userugkey, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, uninstall, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(hkey, "DisplayName", "MSITEST"); - CHECK_DEL_REG_STR(hkey, "DisplayVersion", "1.1.1"); - CHECK_DEL_REG_STR(hkey, "InstallDate", date); - CHECK_DEL_REG_STR(hkey, "InstallSource", temp); - CHECK_DEL_REG_ISTR(hkey, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_DEL_REG_STR(hkey, "Publisher", "Wine"); - CHECK_DEL_REG_STR(hkey, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_DEL_REG_STR(hkey, "AuthorizedCDFPrefix", NULL); - CHECK_DEL_REG_STR(hkey, "Comments", NULL); - CHECK_DEL_REG_STR(hkey, "Contact", NULL); - CHECK_DEL_REG_STR(hkey, "HelpLink", NULL); - CHECK_DEL_REG_STR(hkey, "HelpTelephone", NULL); - CHECK_DEL_REG_STR(hkey, "InstallLocation", NULL); - CHECK_DEL_REG_STR(hkey, "Readme", NULL); - CHECK_DEL_REG_STR(hkey, "Size", NULL); - CHECK_DEL_REG_STR(hkey, "URLInfoAbout", NULL); - CHECK_DEL_REG_STR(hkey, "URLUpdateInfo", NULL); - CHECK_DEL_REG_DWORD(hkey, "Language", 1033); - CHECK_DEL_REG_DWORD(hkey, "Version", 0x1010001); - CHECK_DEL_REG_DWORD(hkey, "VersionMajor", 1); - CHECK_DEL_REG_DWORD(hkey, "VersionMinor", 1); - CHECK_DEL_REG_DWORD(hkey, "WindowsInstaller", 1); - todo_wine - { - CHECK_DEL_REG_DWORD(hkey, "EstimatedSize", 12); - } - - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - sprintf(keypath, userdata, usersid); - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegOpenKeyA(hkey, "InstallProperties", &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - RegDeleteValueA(props, "LocalPackage"); /* LocalPackage is nondeterministic */ - CHECK_DEL_REG_STR(props, "DisplayName", "MSITEST"); - CHECK_DEL_REG_STR(props, "DisplayVersion", "1.1.1"); - CHECK_DEL_REG_STR(props, "InstallDate", date); - CHECK_DEL_REG_STR(props, "InstallSource", temp); - CHECK_DEL_REG_ISTR(props, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_DEL_REG_STR(props, "Publisher", "Wine"); - CHECK_DEL_REG_STR(props, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_DEL_REG_STR(props, "AuthorizedCDFPrefix", NULL); - CHECK_DEL_REG_STR(props, "Comments", NULL); - CHECK_DEL_REG_STR(props, "Contact", NULL); - CHECK_DEL_REG_STR(props, "HelpLink", NULL); - CHECK_DEL_REG_STR(props, "HelpTelephone", NULL); - CHECK_DEL_REG_STR(props, "InstallLocation", NULL); - CHECK_DEL_REG_STR(props, "Readme", NULL); - CHECK_DEL_REG_STR(props, "Size", NULL); - CHECK_DEL_REG_STR(props, "URLInfoAbout", NULL); - CHECK_DEL_REG_STR(props, "URLUpdateInfo", NULL); - CHECK_DEL_REG_DWORD(props, "Language", 1033); - CHECK_DEL_REG_DWORD(props, "Version", 0x1010001); - CHECK_DEL_REG_DWORD(props, "VersionMajor", 1); - CHECK_DEL_REG_DWORD(props, "VersionMinor", 1); - CHECK_DEL_REG_DWORD(props, "WindowsInstaller", 1); - todo_wine - { - CHECK_DEL_REG_DWORD(props, "EstimatedSize", 12); - } - - RegDeleteKeyA(props, ""); - RegCloseKey(props); - - res = RegOpenKeyA(hkey, "Usage", &usage); - todo_wine - { - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - } - - RegDeleteKeyA(usage, ""); - RegCloseKey(usage); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, ugkey, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(hkey, "84A88FD7F6998CE40A22FB59F6B9C2BB", NULL); - - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - /* RegisterProduct, machine */ - r = MsiInstallProductA(msifile, "REGISTER_PRODUCT=1 ALLUSERS=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, userugkey, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, uninstall, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(hkey, "DisplayName", "MSITEST"); - CHECK_DEL_REG_STR(hkey, "DisplayVersion", "1.1.1"); - CHECK_DEL_REG_STR(hkey, "InstallDate", date); - CHECK_DEL_REG_STR(hkey, "InstallSource", temp); - CHECK_DEL_REG_ISTR(hkey, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_DEL_REG_STR(hkey, "Publisher", "Wine"); - CHECK_DEL_REG_STR(hkey, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_DEL_REG_STR(hkey, "AuthorizedCDFPrefix", NULL); - CHECK_DEL_REG_STR(hkey, "Comments", NULL); - CHECK_DEL_REG_STR(hkey, "Contact", NULL); - CHECK_DEL_REG_STR(hkey, "HelpLink", NULL); - CHECK_DEL_REG_STR(hkey, "HelpTelephone", NULL); - CHECK_DEL_REG_STR(hkey, "InstallLocation", NULL); - CHECK_DEL_REG_STR(hkey, "Readme", NULL); - CHECK_DEL_REG_STR(hkey, "Size", NULL); - CHECK_DEL_REG_STR(hkey, "URLInfoAbout", NULL); - CHECK_DEL_REG_STR(hkey, "URLUpdateInfo", NULL); - CHECK_DEL_REG_DWORD(hkey, "Language", 1033); - CHECK_DEL_REG_DWORD(hkey, "Version", 0x1010001); - CHECK_DEL_REG_DWORD(hkey, "VersionMajor", 1); - CHECK_DEL_REG_DWORD(hkey, "VersionMinor", 1); - CHECK_DEL_REG_DWORD(hkey, "WindowsInstaller", 1); - todo_wine - { - CHECK_DEL_REG_DWORD(hkey, "EstimatedSize", 12); - } - - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - sprintf(keypath, userdata, "S-1-5-18"); - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegOpenKeyA(hkey, "InstallProperties", &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - RegDeleteValueA(props, "LocalPackage"); /* LocalPackage is nondeterministic */ - CHECK_DEL_REG_STR(props, "DisplayName", "MSITEST"); - CHECK_DEL_REG_STR(props, "DisplayVersion", "1.1.1"); - CHECK_DEL_REG_STR(props, "InstallDate", date); - CHECK_DEL_REG_STR(props, "InstallSource", temp); - CHECK_DEL_REG_ISTR(props, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_DEL_REG_STR(props, "Publisher", "Wine"); - CHECK_DEL_REG_STR(props, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_DEL_REG_STR(props, "AuthorizedCDFPrefix", NULL); - CHECK_DEL_REG_STR(props, "Comments", NULL); - CHECK_DEL_REG_STR(props, "Contact", NULL); - CHECK_DEL_REG_STR(props, "HelpLink", NULL); - CHECK_DEL_REG_STR(props, "HelpTelephone", NULL); - CHECK_DEL_REG_STR(props, "InstallLocation", NULL); - CHECK_DEL_REG_STR(props, "Readme", NULL); - CHECK_DEL_REG_STR(props, "Size", NULL); - CHECK_DEL_REG_STR(props, "URLInfoAbout", NULL); - CHECK_DEL_REG_STR(props, "URLUpdateInfo", NULL); - CHECK_DEL_REG_DWORD(props, "Language", 1033); - CHECK_DEL_REG_DWORD(props, "Version", 0x1010001); - CHECK_DEL_REG_DWORD(props, "VersionMajor", 1); - CHECK_DEL_REG_DWORD(props, "VersionMinor", 1); - CHECK_DEL_REG_DWORD(props, "WindowsInstaller", 1); - todo_wine - { - CHECK_DEL_REG_DWORD(props, "EstimatedSize", 12); - } - - RegDeleteKeyA(props, ""); - RegCloseKey(props); - - res = RegOpenKeyA(hkey, "Usage", &usage); - todo_wine - { - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - } - - RegDeleteKeyA(usage, ""); - RegCloseKey(usage); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, ugkey, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(hkey, "84A88FD7F6998CE40A22FB59F6B9C2BB", NULL); - - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); - HeapFree(GetProcessHeap(), 0, usersid); -} - -static void test_publish_publishproduct(void) -{ - UINT r; - LONG res; - LPSTR usersid; - HKEY sourcelist, net, props; - HKEY hkey, patches, media; - CHAR keypath[MAX_PATH]; - CHAR temp[MAX_PATH]; - CHAR path[MAX_PATH]; - - static const CHAR prodpath[] = "Software\\Microsoft\\Windows\\CurrentVersion" - "\\Installer\\UserData\\%s\\Products" - "\\84A88FD7F6998CE40A22FB59F6B9C2BB"; - static const CHAR cuprodpath[] = "Software\\Microsoft\\Installer\\Products" - "\\84A88FD7F6998CE40A22FB59F6B9C2BB"; - static const CHAR cuupgrades[] = "Software\\Microsoft\\Installer\\UpgradeCodes" - "\\51AAE0C44620A5E4788506E91F249BD2"; - static const CHAR badprod[] = "Software\\Microsoft\\Windows\\CurrentVersion" - "\\Installer\\Products" - "\\84A88FD7F6998CE40A22FB59F6B9C2BB"; - static const CHAR machprod[] = "Installer\\Products\\84A88FD7F6998CE40A22FB59F6B9C2BB"; - static const CHAR machup[] = "Installer\\UpgradeCodes\\51AAE0C44620A5E4788506E91F249BD2"; - - get_user_sid(&usersid); - if (!usersid) - { - skip("ConvertSidToStringSidA is not available\n"); - return; - } - - GetTempPath(MAX_PATH, temp); - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - - create_database(msifile, pp_tables, sizeof(pp_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - /* PublishProduct, current user */ - r = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, badprod, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - sprintf(keypath, prodpath, usersid); - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegOpenKeyA(hkey, "InstallProperties", &props); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - res = RegOpenKeyA(hkey, "Patches", &patches); - todo_wine - { - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(patches, "AllPatches", NULL); - } - - RegDeleteKeyA(patches, ""); - RegCloseKey(patches); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - res = RegOpenKeyA(HKEY_CURRENT_USER, cuprodpath, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(hkey, "ProductName", "MSITEST"); - CHECK_DEL_REG_STR(hkey, "PackageCode", "AC75740029052c94DA02821EECD05F2F"); - CHECK_DEL_REG_DWORD(hkey, "Language", 1033); - CHECK_DEL_REG_DWORD(hkey, "Version", 0x1010001); - CHECK_DEL_REG_DWORD(hkey, "AuthorizedLUAApp", 0); - CHECK_DEL_REG_DWORD(hkey, "Assignment", 0); - CHECK_DEL_REG_DWORD(hkey, "AdvertiseFlags", 0x184); - CHECK_DEL_REG_DWORD(hkey, "InstanceType", 0); - CHECK_DEL_REG_STR(hkey, "Clients", ":"); - - res = RegOpenKeyA(hkey, "SourceList", &sourcelist); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - lstrcpyA(path, "n;1;"); - lstrcatA(path, temp); - CHECK_DEL_REG_STR(sourcelist, "LastUsedSource", path); - CHECK_DEL_REG_STR(sourcelist, "PackageName", "msitest.msi"); - - res = RegOpenKeyA(sourcelist, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(net, "1", temp); - - RegDeleteKeyA(net, ""); - RegCloseKey(net); - - res = RegOpenKeyA(sourcelist, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(media, "1", "DISK1;"); - - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(sourcelist, ""); - RegCloseKey(sourcelist); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - res = RegOpenKeyA(HKEY_CURRENT_USER, cuupgrades, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(hkey, "84A88FD7F6998CE40A22FB59F6B9C2BB", NULL); - - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - /* PublishProduct, machine */ - r = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1 ALLUSERS=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, badprod, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - sprintf(keypath, prodpath, "S-1-5-18"); - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegOpenKeyA(hkey, "InstallProperties", &props); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - res = RegOpenKeyA(hkey, "Patches", &patches); - todo_wine - { - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(patches, "AllPatches", NULL); - } - - RegDeleteKeyA(patches, ""); - RegCloseKey(patches); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - res = RegOpenKeyA(HKEY_CLASSES_ROOT, machprod, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(hkey, "ProductName", "MSITEST"); - CHECK_DEL_REG_STR(hkey, "PackageCode", "AC75740029052c94DA02821EECD05F2F"); - CHECK_DEL_REG_DWORD(hkey, "Language", 1033); - CHECK_DEL_REG_DWORD(hkey, "Version", 0x1010001); - CHECK_DEL_REG_DWORD(hkey, "AuthorizedLUAApp", 0); - todo_wine CHECK_DEL_REG_DWORD(hkey, "Assignment", 1); - CHECK_DEL_REG_DWORD(hkey, "AdvertiseFlags", 0x184); - CHECK_DEL_REG_DWORD(hkey, "InstanceType", 0); - CHECK_DEL_REG_STR(hkey, "Clients", ":"); - - res = RegOpenKeyA(hkey, "SourceList", &sourcelist); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - lstrcpyA(path, "n;1;"); - lstrcatA(path, temp); - CHECK_DEL_REG_STR(sourcelist, "LastUsedSource", path); - CHECK_DEL_REG_STR(sourcelist, "PackageName", "msitest.msi"); - - res = RegOpenKeyA(sourcelist, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(net, "1", temp); - - RegDeleteKeyA(net, ""); - RegCloseKey(net); - - res = RegOpenKeyA(sourcelist, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(media, "1", "DISK1;"); - - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(sourcelist, ""); - RegCloseKey(sourcelist); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - res = RegOpenKeyA(HKEY_CLASSES_ROOT, machup, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_DEL_REG_STR(hkey, "84A88FD7F6998CE40A22FB59F6B9C2BB", NULL); - - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); - HeapFree(GetProcessHeap(), 0, usersid); -} - -static void test_publish_publishfeatures(void) -{ - UINT r; - LONG res; - HKEY hkey; - LPSTR usersid; - CHAR keypath[MAX_PATH]; - - static const CHAR cupath[] = "Software\\Microsoft\\Installer\\Features" - "\\84A88FD7F6998CE40A22FB59F6B9C2BB"; - static const CHAR udpath[] = "Software\\Microsoft\\Windows\\CurrentVersion" - "\\Installer\\UserData\\%s\\Products" - "\\84A88FD7F6998CE40A22FB59F6B9C2BB\\Features"; - static const CHAR featkey[] = "Software\\Microsoft\\Windows\\CurrentVersion" - "\\Installer\\Features"; - static const CHAR classfeat[] = "Software\\Classes\\Installer\\Features" - "\\84A88FD7F6998CE40A22FB59F6B9C2BB"; - - get_user_sid(&usersid); - if (!usersid) - { - skip("ConvertSidToStringSidA is not available\n"); - return; - } - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - - create_database(msifile, pp_tables, sizeof(pp_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - /* PublishFeatures, current user */ - r = MsiInstallProductA(msifile, "PUBLISH_FEATURES=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, featkey, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, classfeat, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - res = RegOpenKeyA(HKEY_CURRENT_USER, cupath, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(hkey, "feature", ""); - CHECK_REG_STR(hkey, "montecristo", ""); - - RegDeleteValueA(hkey, "feature"); - RegDeleteValueA(hkey, "montecristo"); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - sprintf(keypath, udpath, usersid); - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(hkey, "feature", "VGtfp^p+,?82@JU1j_KE"); - CHECK_REG_STR(hkey, "montecristo", "VGtfp^p+,?82@JU1j_KE"); - - RegDeleteValueA(hkey, "feature"); - RegDeleteValueA(hkey, "montecristo"); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - /* PublishFeatures, machine */ - r = MsiInstallProductA(msifile, "PUBLISH_FEATURES=1 ALLUSERS=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, featkey, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - res = RegOpenKeyA(HKEY_CURRENT_USER, cupath, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, classfeat, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(hkey, "feature", ""); - CHECK_REG_STR(hkey, "montecristo", ""); - - RegDeleteValueA(hkey, "feature"); - RegDeleteValueA(hkey, "montecristo"); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - sprintf(keypath, udpath, "S-1-5-18"); - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(hkey, "feature", "VGtfp^p+,?82@JU1j_KE"); - CHECK_REG_STR(hkey, "montecristo", "VGtfp^p+,?82@JU1j_KE"); - - RegDeleteValueA(hkey, "feature"); - RegDeleteValueA(hkey, "montecristo"); - RegDeleteKeyA(hkey, ""); - RegCloseKey(hkey); - - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); - HeapFree(GetProcessHeap(), 0, usersid); -} - -static LPSTR reg_get_val_str(HKEY hkey, LPCSTR name) -{ - DWORD len = 0; - LPSTR val; - LONG r; - - r = RegQueryValueExA(hkey, name, NULL, NULL, NULL, &len); - if (r != ERROR_SUCCESS) - return NULL; - - len += sizeof (WCHAR); - val = HeapAlloc(GetProcessHeap(), 0, len); - if (!val) return NULL; - val[0] = 0; - RegQueryValueExA(hkey, name, NULL, NULL, (LPBYTE)val, &len); - return val; -} - -static void get_owner_company(LPSTR *owner, LPSTR *company) -{ - LONG res; - HKEY hkey; - - *owner = *company = NULL; - - res = RegOpenKeyA(HKEY_CURRENT_USER, - "Software\\Microsoft\\MS Setup (ACME)\\User Info", &hkey); - if (res == ERROR_SUCCESS) - { - *owner = reg_get_val_str(hkey, "DefName"); - *company = reg_get_val_str(hkey, "DefCompany"); - RegCloseKey(hkey); - } - - if (!*owner || !*company) - { - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, - "Software\\Microsoft\\Windows\\CurrentVersion", &hkey); - if (res == ERROR_SUCCESS) - { - *owner = reg_get_val_str(hkey, "RegisteredOwner"); - *company = reg_get_val_str(hkey, "RegisteredOrganization"); - RegCloseKey(hkey); - } - } - - if (!*owner || !*company) - { - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, - "Software\\Microsoft\\Windows NT\\CurrentVersion", &hkey); - if (res == ERROR_SUCCESS) - { - *owner = reg_get_val_str(hkey, "RegisteredOwner"); - *company = reg_get_val_str(hkey, "RegisteredOrganization"); - RegCloseKey(hkey); - } - } -} - -static void test_publish_registeruser(void) -{ - UINT r; - LONG res; - HKEY props; - LPSTR usersid; - LPSTR owner, company; - CHAR keypath[MAX_PATH]; - - static const CHAR keyfmt[] = - "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\" - "UserData\\%s\\Products\\84A88FD7F6998CE40A22FB59F6B9C2BB\\InstallProperties"; - - get_user_sid(&usersid); - if (!usersid) - { - skip("ConvertSidToStringSidA is not available\n"); - return; - } - - get_owner_company(&owner, &company); - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - - create_database(msifile, pp_tables, sizeof(pp_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - /* RegisterUser, per-user */ - r = MsiInstallProductA(msifile, "REGISTER_USER=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - sprintf(keypath, keyfmt, usersid); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(props, "ProductID", "none"); - CHECK_REG_STR(props, "RegCompany", company); - CHECK_REG_STR(props, "RegOwner", owner); - - RegDeleteValueA(props, "ProductID"); - RegDeleteValueA(props, "RegCompany"); - RegDeleteValueA(props, "RegOwner"); - RegDeleteKeyA(props, ""); - RegCloseKey(props); - - /* RegisterUser, machine */ - r = MsiInstallProductA(msifile, "REGISTER_USER=1 ALLUSERS=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - sprintf(keypath, keyfmt, "S-1-5-18"); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(props, "ProductID", "none"); - CHECK_REG_STR(props, "RegCompany", company); - CHECK_REG_STR(props, "RegOwner", owner); - - RegDeleteValueA(props, "ProductID"); - RegDeleteValueA(props, "RegCompany"); - RegDeleteValueA(props, "RegOwner"); - RegDeleteKeyA(props, ""); - RegCloseKey(props); - - HeapFree(GetProcessHeap(), 0, company); - HeapFree(GetProcessHeap(), 0, owner); - - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); -} - -static void test_publish_processcomponents(void) -{ - UINT r; - LONG res; - DWORD size; - HKEY comp, hkey; - LPSTR usersid; - CHAR val[MAX_PATH]; - CHAR keypath[MAX_PATH]; - - static const CHAR keyfmt[] = - "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\" - "UserData\\%s\\Components\\CBABC2FDCCB35E749A8944D8C1C098B5"; - static const CHAR compkey[] = - "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Components"; - - get_user_sid(&usersid); - if (!usersid) - { - skip("ConvertSidToStringSidA is not available\n"); - return; - } - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - - create_database(msifile, pp_tables, sizeof(pp_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - /* ProcessComponents, per-user */ - r = MsiInstallProductA(msifile, "PROCESS_COMPONENTS=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - sprintf(keypath, keyfmt, usersid); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &comp); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - res = RegQueryValueExA(comp, "84A88FD7F6998CE40A22FB59F6B9C2BB", - NULL, NULL, (LPBYTE)val, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(val, "C:\\Program Files\\msitest\\maximus"), - "Expected \"%s\", got \"%s\"\n", "C:\\Program Files\\msitest\\maximus", val); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, compkey, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - RegDeleteValueA(comp, "84A88FD7F6998CE40A22FB59F6B9C2BB"); - RegDeleteKeyA(comp, ""); - RegCloseKey(comp); - - /* ProcessComponents, machine */ - r = MsiInstallProductA(msifile, "PROCESS_COMPONENTS=1 ALLUSERS=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "File not installed\n"); - - sprintf(keypath, keyfmt, "S-1-5-18"); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &comp); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - res = RegQueryValueExA(comp, "84A88FD7F6998CE40A22FB59F6B9C2BB", - NULL, NULL, (LPBYTE)val, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(val, "C:\\Program Files\\msitest\\maximus"), - "Expected \"%s\", got \"%s\"\n", "C:\\Program Files\\msitest\\maximus", val); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, compkey, &hkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - RegDeleteValueA(comp, "84A88FD7F6998CE40A22FB59F6B9C2BB"); - RegDeleteKeyA(comp, ""); - RegCloseKey(comp); - - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); -} - -static void test_publish(void) -{ - UINT r; - LONG res; - HKEY uninstall, prodkey; - INSTALLSTATE state; - CHAR prodcode[] = "{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"; - char date[MAX_PATH]; - char temp[MAX_PATH]; - - static const CHAR subkey[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; - - if (!pMsiQueryComponentStateA) - { - skip("MsiQueryComponentStateA is not available\n"); - return; - } - - get_date_str(date); - GetTempPath(MAX_PATH, temp); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, subkey, &uninstall); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - - create_database(msifile, pp_tables, sizeof(pp_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - /* nothing published */ - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - /* PublishProduct and RegisterProduct */ - r = MsiInstallProductA(msifile, "REGISTER_PRODUCT=1 PUBLISH_PRODUCT=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(prodkey, "DisplayName", "MSITEST"); - CHECK_REG_STR(prodkey, "DisplayVersion", "1.1.1"); - CHECK_REG_STR(prodkey, "InstallDate", date); - CHECK_REG_STR(prodkey, "InstallSource", temp); - CHECK_REG_ISTR(prodkey, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "Publisher", "Wine"); - CHECK_REG_STR(prodkey, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "AuthorizedCDFPrefix", NULL); - CHECK_REG_STR(prodkey, "Comments", NULL); - CHECK_REG_STR(prodkey, "Contact", NULL); - CHECK_REG_STR(prodkey, "HelpLink", NULL); - CHECK_REG_STR(prodkey, "HelpTelephone", NULL); - CHECK_REG_STR(prodkey, "InstallLocation", NULL); - CHECK_REG_STR(prodkey, "Readme", NULL); - CHECK_REG_STR(prodkey, "Size", NULL); - CHECK_REG_STR(prodkey, "URLInfoAbout", NULL); - CHECK_REG_STR(prodkey, "URLUpdateInfo", NULL); - CHECK_REG_DWORD(prodkey, "Language", 1033); - CHECK_REG_DWORD(prodkey, "Version", 0x1010001); - CHECK_REG_DWORD(prodkey, "VersionMajor", 1); - CHECK_REG_DWORD(prodkey, "VersionMinor", 1); - CHECK_REG_DWORD(prodkey, "WindowsInstaller", 1); - todo_wine - { - CHECK_REG_DWORD(prodkey, "EstimatedSize", 12); - } - - RegCloseKey(prodkey); - - r = MsiInstallProductA(msifile, "FULL=1 REMOVE=ALL"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(pf_exists("msitest\\maximus"), "File deleted\n"); - ok(pf_exists("msitest"), "File deleted\n"); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - /* complete install */ - r = MsiInstallProductA(msifile, "FULL=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(prodkey, "DisplayName", "MSITEST"); - CHECK_REG_STR(prodkey, "DisplayVersion", "1.1.1"); - CHECK_REG_STR(prodkey, "InstallDate", date); - CHECK_REG_STR(prodkey, "InstallSource", temp); - CHECK_REG_ISTR(prodkey, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "Publisher", "Wine"); - CHECK_REG_STR(prodkey, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "AuthorizedCDFPrefix", NULL); - CHECK_REG_STR(prodkey, "Comments", NULL); - CHECK_REG_STR(prodkey, "Contact", NULL); - CHECK_REG_STR(prodkey, "HelpLink", NULL); - CHECK_REG_STR(prodkey, "HelpTelephone", NULL); - CHECK_REG_STR(prodkey, "InstallLocation", NULL); - CHECK_REG_STR(prodkey, "Readme", NULL); - CHECK_REG_STR(prodkey, "Size", NULL); - CHECK_REG_STR(prodkey, "URLInfoAbout", NULL); - CHECK_REG_STR(prodkey, "URLUpdateInfo", NULL); - CHECK_REG_DWORD(prodkey, "Language", 1033); - CHECK_REG_DWORD(prodkey, "Version", 0x1010001); - CHECK_REG_DWORD(prodkey, "VersionMajor", 1); - CHECK_REG_DWORD(prodkey, "VersionMinor", 1); - CHECK_REG_DWORD(prodkey, "WindowsInstaller", 1); - todo_wine - { - CHECK_REG_DWORD(prodkey, "EstimatedSize", 12); - } - - RegCloseKey(prodkey); - - /* no UnpublishFeatures */ - r = MsiInstallProductA(msifile, "REMOVE=ALL"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - todo_wine - { - ok(!pf_exists("msitest\\maximus"), "File deleted\n"); - ok(!pf_exists("msitest"), "File deleted\n"); - } - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - /* complete install */ - r = MsiInstallProductA(msifile, "FULL=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(prodkey, "DisplayName", "MSITEST"); - CHECK_REG_STR(prodkey, "DisplayVersion", "1.1.1"); - CHECK_REG_STR(prodkey, "InstallDate", date); - CHECK_REG_STR(prodkey, "InstallSource", temp); - CHECK_REG_ISTR(prodkey, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "Publisher", "Wine"); - CHECK_REG_STR(prodkey, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "AuthorizedCDFPrefix", NULL); - CHECK_REG_STR(prodkey, "Comments", NULL); - CHECK_REG_STR(prodkey, "Contact", NULL); - CHECK_REG_STR(prodkey, "HelpLink", NULL); - CHECK_REG_STR(prodkey, "HelpTelephone", NULL); - CHECK_REG_STR(prodkey, "InstallLocation", NULL); - CHECK_REG_STR(prodkey, "Readme", NULL); - CHECK_REG_STR(prodkey, "Size", NULL); - CHECK_REG_STR(prodkey, "URLInfoAbout", NULL); - CHECK_REG_STR(prodkey, "URLUpdateInfo", NULL); - CHECK_REG_DWORD(prodkey, "Language", 1033); - CHECK_REG_DWORD(prodkey, "Version", 0x1010001); - CHECK_REG_DWORD(prodkey, "VersionMajor", 1); - CHECK_REG_DWORD(prodkey, "VersionMinor", 1); - CHECK_REG_DWORD(prodkey, "WindowsInstaller", 1); - todo_wine - { - CHECK_REG_DWORD(prodkey, "EstimatedSize", 12); - } - - RegCloseKey(prodkey); - - /* UnpublishFeatures, only feature removed. Only works when entire product is removed */ - r = MsiInstallProductA(msifile, "UNPUBLISH_FEATURES=1 REMOVE=feature"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(pf_exists("msitest\\maximus"), "File deleted\n"); - ok(pf_exists("msitest"), "File deleted\n"); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(prodkey, "DisplayName", "MSITEST"); - CHECK_REG_STR(prodkey, "DisplayVersion", "1.1.1"); - CHECK_REG_STR(prodkey, "InstallDate", date); - CHECK_REG_STR(prodkey, "InstallSource", temp); - CHECK_REG_ISTR(prodkey, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "Publisher", "Wine"); - CHECK_REG_STR(prodkey, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "AuthorizedCDFPrefix", NULL); - CHECK_REG_STR(prodkey, "Comments", NULL); - CHECK_REG_STR(prodkey, "Contact", NULL); - CHECK_REG_STR(prodkey, "HelpLink", NULL); - CHECK_REG_STR(prodkey, "HelpTelephone", NULL); - CHECK_REG_STR(prodkey, "InstallLocation", NULL); - CHECK_REG_STR(prodkey, "Readme", NULL); - CHECK_REG_STR(prodkey, "Size", NULL); - CHECK_REG_STR(prodkey, "URLInfoAbout", NULL); - CHECK_REG_STR(prodkey, "URLUpdateInfo", NULL); - CHECK_REG_DWORD(prodkey, "Language", 1033); - CHECK_REG_DWORD(prodkey, "Version", 0x1010001); - CHECK_REG_DWORD(prodkey, "VersionMajor", 1); - CHECK_REG_DWORD(prodkey, "VersionMinor", 1); - CHECK_REG_DWORD(prodkey, "WindowsInstaller", 1); - todo_wine - { - CHECK_REG_DWORD(prodkey, "EstimatedSize", 12); - } - - RegCloseKey(prodkey); - - /* complete install */ - r = MsiInstallProductA(msifile, "FULL=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(prodkey, "DisplayName", "MSITEST"); - CHECK_REG_STR(prodkey, "DisplayVersion", "1.1.1"); - CHECK_REG_STR(prodkey, "InstallDate", date); - CHECK_REG_STR(prodkey, "InstallSource", temp); - CHECK_REG_ISTR(prodkey, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "Publisher", "Wine"); - CHECK_REG_STR(prodkey, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "AuthorizedCDFPrefix", NULL); - CHECK_REG_STR(prodkey, "Comments", NULL); - CHECK_REG_STR(prodkey, "Contact", NULL); - CHECK_REG_STR(prodkey, "HelpLink", NULL); - CHECK_REG_STR(prodkey, "HelpTelephone", NULL); - CHECK_REG_STR(prodkey, "InstallLocation", NULL); - CHECK_REG_STR(prodkey, "Readme", NULL); - CHECK_REG_STR(prodkey, "Size", NULL); - CHECK_REG_STR(prodkey, "URLInfoAbout", NULL); - CHECK_REG_STR(prodkey, "URLUpdateInfo", NULL); - CHECK_REG_DWORD(prodkey, "Language", 1033); - CHECK_REG_DWORD(prodkey, "Version", 0x1010001); - CHECK_REG_DWORD(prodkey, "VersionMajor", 1); - CHECK_REG_DWORD(prodkey, "VersionMinor", 1); - CHECK_REG_DWORD(prodkey, "WindowsInstaller", 1); - todo_wine - { - CHECK_REG_DWORD(prodkey, "EstimatedSize", 12); - } - - RegCloseKey(prodkey); - - /* UnpublishFeatures, both features removed */ - r = MsiInstallProductA(msifile, "UNPUBLISH_FEATURES=1 REMOVE=feature,montecristo"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - todo_wine - { - ok(!pf_exists("msitest\\maximus"), "File not deleted\n"); - ok(!pf_exists("msitest"), "File not deleted\n"); - } - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - /* complete install */ - r = MsiInstallProductA(msifile, "FULL=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(prodkey, "DisplayName", "MSITEST"); - CHECK_REG_STR(prodkey, "DisplayVersion", "1.1.1"); - CHECK_REG_STR(prodkey, "InstallDate", date); - CHECK_REG_STR(prodkey, "InstallSource", temp); - CHECK_REG_ISTR(prodkey, "ModifyPath", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "Publisher", "Wine"); - CHECK_REG_STR(prodkey, "UninstallString", "MsiExec.exe /I{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - CHECK_REG_STR(prodkey, "AuthorizedCDFPrefix", NULL); - CHECK_REG_STR(prodkey, "Comments", NULL); - CHECK_REG_STR(prodkey, "Contact", NULL); - CHECK_REG_STR(prodkey, "HelpLink", NULL); - CHECK_REG_STR(prodkey, "HelpTelephone", NULL); - CHECK_REG_STR(prodkey, "InstallLocation", NULL); - CHECK_REG_STR(prodkey, "Readme", NULL); - CHECK_REG_STR(prodkey, "Size", NULL); - CHECK_REG_STR(prodkey, "URLInfoAbout", NULL); - CHECK_REG_STR(prodkey, "URLUpdateInfo", NULL); - CHECK_REG_DWORD(prodkey, "Language", 1033); - CHECK_REG_DWORD(prodkey, "Version", 0x1010001); - CHECK_REG_DWORD(prodkey, "VersionMajor", 1); - CHECK_REG_DWORD(prodkey, "VersionMinor", 1); - CHECK_REG_DWORD(prodkey, "WindowsInstaller", 1); - todo_wine - { - CHECK_REG_DWORD(prodkey, "EstimatedSize", 12); - } - - RegCloseKey(prodkey); - - /* complete uninstall */ - r = MsiInstallProductA(msifile, "FULL=1 REMOVE=ALL"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - todo_wine - { - ok(!pf_exists("msitest\\maximus"), "File not deleted\n"); - ok(!pf_exists("msitest"), "File not deleted\n"); - } - - state = MsiQueryProductState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - state = MsiQueryFeatureState("{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}", "montecristo"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - "{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}", &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegOpenKeyA(uninstall, prodcode, &prodkey); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - /* make sure 'Program Files\msitest' is removed */ - delete_pfmsitest_files(); - - RegCloseKey(uninstall); - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); -} - -static void test_publishsourcelist(void) -{ - UINT r; - DWORD size; - CHAR value[MAX_PATH]; - CHAR path[MAX_PATH]; - CHAR prodcode[] = "{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}"; - - if (!pMsiSourceListEnumSourcesA || !pMsiSourceListGetInfoA) - { - skip("MsiSourceListEnumSourcesA and/or MsiSourceListGetInfoA are not available\n"); - return; - } - - CreateDirectoryA("msitest", NULL); - create_file("msitest\\maximus", 500); - - create_database(msifile, pp_tables, sizeof(pp_tables) / sizeof(msi_table)); - - MsiSetInternalUI(INSTALLUILEVEL_FULL, NULL); - - r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - /* nothing published */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - r = MsiInstallProductA(msifile, "REGISTER_PRODUCT=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - /* after RegisterProduct */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - r = MsiInstallProductA(msifile, "PROCESS_COMPONENTS=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - /* after ProcessComponents */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - r = MsiInstallProductA(msifile, "PUBLISH_FEATURES=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - /* after PublishFeatures */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - r = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(pf_exists("msitest\\maximus"), "File not installed\n"); - ok(pf_exists("msitest"), "File not installed\n"); - - /* after PublishProduct */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "msitest.msi"), "Expected 'msitest.msi', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_MEDIAPACKAGEPATH, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value); - ok(size == 0, "Expected 0, got %d\n", size); - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_DISKPROMPT, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value); - ok(size == 0, "Expected 0, got %d\n", size); - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\"); - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCE, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, path), "Expected \"%s\", got \"%s\"\n", path, value); - ok(size == lstrlenA(path), "Expected %d, got %d\n", lstrlenA(path), size); - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value); - ok(size == 1, "Expected 1, got %d\n", size); - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, path), "Expected \"%s\", got \"%s\"\n", path, value); - ok(size == lstrlenA(path), "Expected %d, got %d\n", lstrlenA(path), size); - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 1, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* complete uninstall */ - r = MsiInstallProductA(msifile, "FULL=1 REMOVE=ALL"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - todo_wine - { - ok(!pf_exists("msitest\\maximus"), "File not deleted\n"); - ok(!pf_exists("msitest"), "File not deleted\n"); - } - - /* make sure 'Program Files\msitest' is removed */ - delete_pfmsitest_files(); - - DeleteFile(msifile); - DeleteFile("msitest\\maximus"); - RemoveDirectory("msitest"); -} - -static UINT run_query(MSIHANDLE hdb, MSIHANDLE hrec, const char *query) -{ - MSIHANDLE hview = 0; - UINT r; - - r = MsiDatabaseOpenView(hdb, query, &hview); - if(r != ERROR_SUCCESS) - return r; - - r = MsiViewExecute(hview, hrec); - if(r == ERROR_SUCCESS) - r = MsiViewClose(hview); - MsiCloseHandle(hview); - return r; -} - -static void set_transform_summary_info(void) -{ - UINT r; - MSIHANDLE suminfo = 0; - - /* build summary info */ - r = MsiGetSummaryInformation(0, mstfile, 3, &suminfo); - todo_wine - { - ok(r == ERROR_SUCCESS , "Failed to open summaryinfo\n"); - } - - r = MsiSummaryInfoSetProperty(suminfo, PID_TITLE, VT_LPSTR, 0, NULL, "MSITEST"); - todo_wine - { - ok(r == ERROR_SUCCESS, "Failed to set summary info\n"); - } - - r = MsiSummaryInfoSetProperty(suminfo, PID_REVNUMBER, VT_LPSTR, 0, NULL, - "{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}1.1.1;" - "{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}1.1.1;" - "{4C0EAA15-0264-4E5A-8758-609EF142B92D}"); - todo_wine - { - ok(r == ERROR_SUCCESS , "Failed to set summary info\n"); - } - - r = MsiSummaryInfoSetProperty(suminfo, PID_PAGECOUNT, VT_I4, 100, NULL, NULL); - todo_wine - { - ok(r == ERROR_SUCCESS, "Failed to set summary info\n"); - } - - r = MsiSummaryInfoPersist(suminfo); - todo_wine - { - ok(r == ERROR_SUCCESS , "Failed to make summary info persist\n"); - } - - r = MsiCloseHandle(suminfo); - ok(r == ERROR_SUCCESS , "Failed to close suminfo\n"); -} - -static void generate_transform(void) -{ - MSIHANDLE hdb1, hdb2; - LPCSTR query; - UINT r; - - /* start with two identical databases */ - CopyFile(msifile, msifile2, FALSE); - - r = MsiOpenDatabase(msifile2, MSIDBOPEN_TRANSACT, &hdb1); - ok(r == ERROR_SUCCESS , "Failed to create database\n"); - - r = MsiDatabaseCommit(hdb1); - ok(r == ERROR_SUCCESS , "Failed to commit database\n"); - - r = MsiOpenDatabase(msifile, MSIDBOPEN_READONLY, &hdb2); - ok(r == ERROR_SUCCESS , "Failed to create database\n"); - - query = "INSERT INTO `Property` ( `Property`, `Value` ) VALUES ( 'prop', 'val' )"; - r = run_query(hdb1, 0, query); - ok(r == ERROR_SUCCESS, "failed to add property\n"); - - /* database needs to be committed */ - MsiDatabaseCommit(hdb1); - - r = MsiDatabaseGenerateTransform(hdb1, hdb2, mstfile, 0, 0); - ok(r == ERROR_SUCCESS, "return code %d, should be ERROR_SUCCESS\n", r); - -#if 0 /* not implemented in wine yet */ - r = MsiCreateTransformSummaryInfo(hdb2, hdb2, mstfile, 0, 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); -#endif - - MsiCloseHandle(hdb1); - MsiCloseHandle(hdb2); -} - -/* data for generating a transform */ - -/* tables transform names - encoded as they would be in an msi database file */ -static const WCHAR name1[] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3b6a, 0x45e4, 0x4824, 0 }; /* _StringData */ -static const WCHAR name2[] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3e6a, 0x44b2, 0x482f, 0 }; /* _StringPool */ -static const WCHAR name3[] = { 0x4840, 0x4559, 0x44f2, 0x4568, 0x4737, 0 }; /* Property */ - -/* data in each table */ -static const char data1[] = /* _StringData */ - "propval"; /* all the strings squashed together */ - -static const WCHAR data2[] = { /* _StringPool */ -/* len, refs */ - 0, 0, /* string 0 '' */ - 4, 1, /* string 1 'prop' */ - 3, 1, /* string 2 'val' */ -}; - -static const WCHAR data3[] = { /* Property */ - 0x0201, 0x0001, 0x0002, -}; - -static const struct { - LPCWSTR name; - const void *data; - DWORD size; -} table_transform_data[] = -{ - { name1, data1, sizeof data1 - 1 }, - { name2, data2, sizeof data2 }, - { name3, data3, sizeof data3 }, -}; - -#define NUM_TRANSFORM_TABLES (sizeof table_transform_data/sizeof table_transform_data[0]) - -static void generate_transform_manual(void) -{ - IStorage *stg = NULL; - IStream *stm; - WCHAR name[0x20]; - HRESULT r; - DWORD i, count; - const DWORD mode = STGM_CREATE|STGM_READWRITE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE; - - const CLSID CLSID_MsiTransform = { 0xc1082,0,0,{0xc0,0,0,0,0,0,0,0x46}}; - - MultiByteToWideChar(CP_ACP, 0, mstfile, -1, name, 0x20); - - r = StgCreateDocfile(name, mode, 0, &stg); - ok(r == S_OK, "failed to create storage\n"); - if (!stg) - return; - - r = IStorage_SetClass(stg, &CLSID_MsiTransform); - ok(r == S_OK, "failed to set storage type\n"); - - for (i=0; i -#include -#include -#include -#include - -#include "wine/test.h" - -static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*); - -static INSTALLSTATE (WINAPI *pMsiGetComponentPathA) - (LPCSTR, LPCSTR, LPSTR, DWORD*); -static UINT (WINAPI *pMsiGetFileHashA) - (LPCSTR, DWORD, PMSIFILEHASHINFO); -static UINT (WINAPI *pMsiGetProductInfoExA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD); -static UINT (WINAPI *pMsiOpenPackageExA) - (LPCSTR, DWORD, MSIHANDLE*); -static UINT (WINAPI *pMsiOpenPackageExW) - (LPCWSTR, DWORD, MSIHANDLE*); -static UINT (WINAPI *pMsiQueryComponentStateA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE*); -static INSTALLSTATE (WINAPI *pMsiUseFeatureExA) - (LPCSTR, LPCSTR ,DWORD, DWORD ); - -static void init_functionpointers(void) -{ - HMODULE hmsi = GetModuleHandleA("msi.dll"); - HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll"); - -#define GET_PROC(dll, func) \ - p ## func = (void *)GetProcAddress(dll, #func); \ - if(!p ## func) \ - trace("GetProcAddress(%s) failed\n", #func); - - GET_PROC(hmsi, MsiGetComponentPathA) - GET_PROC(hmsi, MsiGetFileHashA) - GET_PROC(hmsi, MsiGetProductInfoExA) - GET_PROC(hmsi, MsiOpenPackageExA) - GET_PROC(hmsi, MsiOpenPackageExW) - GET_PROC(hmsi, MsiQueryComponentStateA) - GET_PROC(hmsi, MsiUseFeatureExA) - - GET_PROC(hadvapi32, ConvertSidToStringSidA) - -#undef GET_PROC -} - -static void test_usefeature(void) -{ - INSTALLSTATE r; - - if (!pMsiUseFeatureExA) - { - skip("MsiUseFeatureExA not implemented\n"); - return; - } - - r = MsiQueryFeatureState(NULL,NULL); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return val\n"); - - r = MsiQueryFeatureState("{9085040-6000-11d3-8cfe-0150048383c9}" ,NULL); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return val\n"); - - r = pMsiUseFeatureExA(NULL,NULL,0,0); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return val\n"); - - r = pMsiUseFeatureExA(NULL, "WORDVIEWFiles", -2, 1 ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return val\n"); - - r = pMsiUseFeatureExA("{90850409-6000-11d3-8cfe-0150048383c9}", - NULL, -2, 0 ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return val\n"); - - r = pMsiUseFeatureExA("{9085040-6000-11d3-8cfe-0150048383c9}", - "WORDVIEWFiles", -2, 0 ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return val\n"); - - r = pMsiUseFeatureExA("{0085040-6000-11d3-8cfe-0150048383c9}", - "WORDVIEWFiles", -2, 0 ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return val\n"); - - r = pMsiUseFeatureExA("{90850409-6000-11d3-8cfe-0150048383c9}", - "WORDVIEWFiles", -2, 1 ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return val\n"); -} - -static void test_null(void) -{ - MSIHANDLE hpkg; - UINT r; - HKEY hkey; - DWORD dwType, cbData; - LPBYTE lpData = NULL; - INSTALLSTATE state; - - r = pMsiOpenPackageExW(NULL, 0, &hpkg); - ok( r == ERROR_INVALID_PARAMETER,"wrong error\n"); - - state = MsiQueryProductStateW(NULL); - ok( state == INSTALLSTATE_INVALIDARG, "wrong return\n"); - - r = MsiEnumFeaturesW(NULL,0,NULL,NULL); - ok( r == ERROR_INVALID_PARAMETER,"wrong error\n"); - - r = MsiConfigureFeatureW(NULL, NULL, 0); - ok( r == ERROR_INVALID_PARAMETER, "wrong error\n"); - - r = MsiConfigureFeatureA("{00000000-0000-0000-0000-000000000000}", NULL, 0); - ok( r == ERROR_INVALID_PARAMETER, "wrong error\n"); - - r = MsiConfigureFeatureA("{00000000-0000-0000-0000-000000000000}", "foo", 0); - ok( r == ERROR_INVALID_PARAMETER, "wrong error %d\n", r); - - r = MsiConfigureFeatureA("{00000000-0000-0000-0000-000000000000}", "foo", INSTALLSTATE_DEFAULT); - ok( r == ERROR_UNKNOWN_PRODUCT, "wrong error %d\n", r); - - /* make sure empty string to MsiGetProductInfo is not a handle to default registry value, saving and restoring the - * necessary registry values */ - - /* empty product string */ - r = RegOpenKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", &hkey); - ok( r == ERROR_SUCCESS, "wrong error %d\n", r); - - r = RegQueryValueExA(hkey, NULL, 0, &dwType, lpData, &cbData); - ok ( r == ERROR_SUCCESS || r == ERROR_FILE_NOT_FOUND, "wrong error %d\n", r); - if ( r == ERROR_SUCCESS ) - { - lpData = HeapAlloc(GetProcessHeap(), 0, cbData); - if (!lpData) - skip("Out of memory\n"); - else - { - r = RegQueryValueExA(hkey, NULL, 0, &dwType, lpData, &cbData); - ok ( r == ERROR_SUCCESS, "wrong error %d\n", r); - } - } - - r = RegSetValueA(hkey, NULL, REG_SZ, "test", strlen("test")); - ok( r == ERROR_SUCCESS, "wrong error %d\n", r); - - r = MsiGetProductInfoA("", "", NULL, NULL); - ok ( r == ERROR_INVALID_PARAMETER, "wrong error %d\n", r); - - if (lpData) - { - r = RegSetValueExA(hkey, NULL, 0, dwType, lpData, cbData); - ok ( r == ERROR_SUCCESS, "wrong error %d\n", r); - - HeapFree(GetProcessHeap(), 0, lpData); - } - else - { - r = RegDeleteValueA(hkey, NULL); - ok ( r == ERROR_SUCCESS, "wrong error %d\n", r); - } - - r = RegCloseKey(hkey); - ok( r == ERROR_SUCCESS, "wrong error %d\n", r); - - /* empty attribute */ - r = RegCreateKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{F1C3AF50-8B56-4A69-A00C-00773FE42F30}", &hkey); - ok( r == ERROR_SUCCESS, "wrong error %d\n", r); - - r = RegSetValueA(hkey, NULL, REG_SZ, "test", strlen("test")); - ok( r == ERROR_SUCCESS, "wrong error %d\n", r); - - r = MsiGetProductInfoA("{F1C3AF50-8B56-4A69-A00C-00773FE42F30}", "", NULL, NULL); - ok ( r == ERROR_UNKNOWN_PROPERTY, "wrong error %d\n", r); - - r = RegCloseKey(hkey); - ok( r == ERROR_SUCCESS, "wrong error %d\n", r); - - r = RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{F1C3AF50-8B56-4A69-A00C-00773FE42F30}"); - ok( r == ERROR_SUCCESS, "wrong error %d\n", r); -} - -static void test_getcomponentpath(void) -{ - INSTALLSTATE r; - char buffer[0x100]; - DWORD sz; - - if(!pMsiGetComponentPathA) - return; - - r = pMsiGetComponentPathA( NULL, NULL, NULL, NULL ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return value\n"); - - r = pMsiGetComponentPathA( "bogus", "bogus", NULL, NULL ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return value\n"); - - r = pMsiGetComponentPathA( "bogus", "{00000000-0000-0000-000000000000}", NULL, NULL ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return value\n"); - - sz = sizeof buffer; - buffer[0]=0; - r = pMsiGetComponentPathA( "bogus", "{00000000-0000-0000-000000000000}", buffer, &sz ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return value\n"); - - r = pMsiGetComponentPathA( "{00000000-78E1-11D2-B60F-006097C998E7}", - "{00000000-0000-0000-0000-000000000000}", buffer, &sz ); - ok( r == INSTALLSTATE_UNKNOWN, "wrong return value\n"); - - r = pMsiGetComponentPathA( "{00000409-78E1-11D2-B60F-006097C998E7}", - "{00000000-0000-0000-0000-00000000}", buffer, &sz ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return value\n"); - - r = pMsiGetComponentPathA( "{00000409-78E1-11D2-B60F-006097C998E7}", - "{029E403D-A86A-1D11-5B5B0006799C897E}", buffer, &sz ); - ok( r == INSTALLSTATE_INVALIDARG, "wrong return value\n"); - - r = pMsiGetComponentPathA( "{00000000-78E1-11D2-B60F-006097C9987e}", - "{00000000-A68A-11d1-5B5B-0006799C897E}", buffer, &sz ); - ok( r == INSTALLSTATE_UNKNOWN, "wrong return value\n"); -} - -static void create_file(LPCSTR name, LPCSTR data, DWORD size) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, data, strlen(data), &written, NULL); - - if (size) - { - SetFilePointer(file, size, NULL, FILE_BEGIN); - SetEndOfFile(file); - } - - CloseHandle(file); -} - -#define HASHSIZE sizeof(MSIFILEHASHINFO) - -static const struct -{ - LPCSTR data; - DWORD size; - MSIFILEHASHINFO hash; -} hash_data[] = -{ - { "abc", 0, - { HASHSIZE, - { 0x98500190, 0xb04fd23c, 0x7d3f96d6, 0x727fe128 }, - }, - }, - - { "C:\\Program Files\\msitest\\caesar\n", 0, - { HASHSIZE, - { 0x2b566794, 0xfd42181b, 0x2514d6e4, 0x5768b4e2 }, - }, - }, - - { "C:\\Program Files\\msitest\\caesar\n", 500, - { HASHSIZE, - { 0x58095058, 0x805efeff, 0x10f3483e, 0x0147d653 }, - }, - }, -}; - -static void test_MsiGetFileHash(void) -{ - const char name[] = "msitest.bin"; - UINT r; - MSIFILEHASHINFO hash; - DWORD i; - - if (!pMsiGetFileHashA) - { - skip("MsiGetFileHash not implemented\n"); - return; - } - - hash.dwFileHashInfoSize = sizeof(MSIFILEHASHINFO); - - /* szFilePath is NULL */ - r = pMsiGetFileHashA(NULL, 0, &hash); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* szFilePath is empty */ - r = pMsiGetFileHashA("", 0, &hash); - ok(r == ERROR_PATH_NOT_FOUND || r == ERROR_BAD_PATHNAME, - "Expected ERROR_PATH_NOT_FOUND or ERROR_BAD_PATHNAME, got %d\n", r); - - /* szFilePath is nonexistent */ - r = pMsiGetFileHashA(name, 0, &hash); - ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", r); - - /* dwOptions is non-zero */ - r = pMsiGetFileHashA(name, 1, &hash); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* pHash.dwFileHashInfoSize is not correct */ - hash.dwFileHashInfoSize = 0; - r = pMsiGetFileHashA(name, 0, &hash); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* pHash is NULL */ - r = pMsiGetFileHashA(name, 0, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - for (i = 0; i < sizeof(hash_data) / sizeof(hash_data[0]); i++) - { - create_file(name, hash_data[i].data, hash_data[i].size); - - memset(&hash, 0, sizeof(MSIFILEHASHINFO)); - hash.dwFileHashInfoSize = sizeof(MSIFILEHASHINFO); - - r = pMsiGetFileHashA(name, 0, &hash); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!memcmp(&hash, &hash_data[i].hash, HASHSIZE), "Hash incorrect\n"); - - DeleteFile(name); - } -} - -/* copied from dlls/msi/registry.c */ -static BOOL squash_guid(LPCWSTR in, LPWSTR out) -{ - DWORD i,n=1; - GUID guid; - - if (FAILED(CLSIDFromString((LPOLESTR)in, &guid))) - return FALSE; - - for(i=0; i<8; i++) - out[7-i] = in[n++]; - n++; - for(i=0; i<4; i++) - out[11-i] = in[n++]; - n++; - for(i=0; i<4; i++) - out[15-i] = in[n++]; - n++; - for(i=0; i<2; i++) - { - out[17+i*2] = in[n++]; - out[16+i*2] = in[n++]; - } - n++; - for( ; i<8; i++) - { - out[17+i*2] = in[n++]; - out[16+i*2] = in[n++]; - } - out[32]=0; - return TRUE; -} - -static void create_test_guid(LPSTR prodcode, LPSTR squashed) -{ - WCHAR guidW[MAX_PATH]; - WCHAR squashedW[MAX_PATH]; - GUID guid; - HRESULT hr; - int size; - - hr = CoCreateGuid(&guid); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - - size = StringFromGUID2(&guid, (LPOLESTR)guidW, MAX_PATH); - ok(size == 39, "Expected 39, got %d\n", hr); - - WideCharToMultiByte(CP_ACP, 0, guidW, size, prodcode, MAX_PATH, NULL, NULL); - squash_guid(guidW, squashedW); - WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL); -} - -static void get_user_sid(LPSTR *usersid) -{ - HANDLE token; - BYTE buf[1024]; - DWORD size; - PTOKEN_USER user; - - OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token); - size = sizeof(buf); - GetTokenInformation(token, TokenUser, (void *)buf, size, &size); - user = (PTOKEN_USER)buf; - pConvertSidToStringSidA(user->User.Sid, usersid); -} - -static void test_MsiQueryProductState(void) -{ - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - LPSTR usersid; - INSTALLSTATE state; - LONG res; - HKEY userkey, localkey, props; - HKEY prodkey; - DWORD data; - - create_test_guid(prodcode, prod_squashed); - get_user_sid(&usersid); - - /* NULL prodcode */ - state = MsiQueryProductStateA(NULL); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* empty prodcode */ - state = MsiQueryProductStateA(""); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* garbage prodcode */ - state = MsiQueryProductStateA("garbage"); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* guid without brackets */ - state = MsiQueryProductStateA("6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D"); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* guid with brackets */ - state = MsiQueryProductStateA("{6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D}"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - /* same length as guid, but random */ - state = MsiQueryProductStateA("A938G02JF-2NF3N93-VN3-2NNF-3KGKALDNF93"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"); - lstrcatA(keypath, prodcode); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local uninstall key exists */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - data = 1; - res = RegSetValueExA(localkey, "WindowsInstaller", 0, REG_DWORD, (const BYTE *)&data, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* WindowsInstaller value exists */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - RegDeleteValueA(localkey, "WindowsInstaller"); - RegDeleteKeyA(localkey, ""); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local product key exists */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegCreateKeyA(localkey, "InstallProperties", &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* install properties key exists */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - data = 1; - res = RegSetValueExA(props, "WindowsInstaller", 0, REG_DWORD, (const BYTE *)&data, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* WindowsInstaller value exists */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - data = 2; - res = RegSetValueExA(props, "WindowsInstaller", 0, REG_DWORD, (const BYTE *)&data, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* WindowsInstaller value is not 1 */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - RegDeleteKeyA(userkey, ""); - - /* user product key does not exist */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - - RegDeleteValueA(props, "WindowsInstaller"); - RegDeleteKeyA(props, ""); - RegCloseKey(props); - RegDeleteKeyA(localkey, ""); - RegCloseKey(localkey); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, - "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, - "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegCreateKeyA(localkey, "InstallProperties", &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, - "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - data = 1; - res = RegSetValueExA(props, "WindowsInstaller", 0, REG_DWORD, (const BYTE *)&data, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* WindowsInstaller value exists */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - RegDeleteValueA(props, "WindowsInstaller"); - RegDeleteKeyA(props, ""); - RegCloseKey(props); - RegDeleteKeyA(localkey, ""); - RegCloseKey(localkey); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, "S-1-5-18\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, - "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegCreateKeyA(localkey, "InstallProperties", &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_ADVERTISED, - "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - data = 1; - res = RegSetValueExA(props, "WindowsInstaller", 0, REG_DWORD, (const BYTE *)&data, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* WindowsInstaller value exists */ - state = MsiQueryProductStateA(prodcode); - ok(state == INSTALLSTATE_DEFAULT, "Expected INSTALLSTATE_DEFAULT, got %d\n", state); - - RegDeleteValueA(props, "WindowsInstaller"); - RegDeleteKeyA(props, ""); - RegCloseKey(props); - RegDeleteKeyA(localkey, ""); - RegCloseKey(localkey); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - LocalFree(usersid); -} - -static const char table_enc85[] = -"!$%&'()*+,-.0123456789=?@ABCDEFGHIJKLMNO" -"PQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwx" -"yz{}~"; - -/* - * Encodes a base85 guid given a GUID pointer - * Caller should provide a 21 character buffer for the encoded string. - * - * returns TRUE if successful, FALSE if not - */ -static BOOL encode_base85_guid( GUID *guid, LPWSTR str ) -{ - unsigned int x, *p, i; - - p = (unsigned int*) guid; - for( i=0; i<4; i++ ) - { - x = p[i]; - *str++ = table_enc85[x%85]; - x = x/85; - *str++ = table_enc85[x%85]; - x = x/85; - *str++ = table_enc85[x%85]; - x = x/85; - *str++ = table_enc85[x%85]; - x = x/85; - *str++ = table_enc85[x%85]; - } - *str = 0; - - return TRUE; -} - -static void compose_base85_guid(LPSTR component, LPSTR comp_base85, LPSTR squashed) -{ - WCHAR guidW[MAX_PATH]; - WCHAR base85W[MAX_PATH]; - WCHAR squashedW[MAX_PATH]; - GUID guid; - HRESULT hr; - int size; - - hr = CoCreateGuid(&guid); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - - size = StringFromGUID2(&guid, (LPOLESTR)guidW, MAX_PATH); - ok(size == 39, "Expected 39, got %d\n", hr); - - WideCharToMultiByte(CP_ACP, 0, guidW, size, component, MAX_PATH, NULL, NULL); - encode_base85_guid(&guid, base85W); - WideCharToMultiByte(CP_ACP, 0, base85W, -1, comp_base85, MAX_PATH, NULL, NULL); - squash_guid(guidW, squashedW); - WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL); -} - -static void test_MsiQueryFeatureState(void) -{ - HKEY userkey, localkey, compkey; - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR component[MAX_PATH]; - CHAR comp_base85[MAX_PATH]; - CHAR comp_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - INSTALLSTATE state; - LPSTR usersid; - LONG res; - - create_test_guid(prodcode, prod_squashed); - compose_base85_guid(component, comp_base85, comp_squashed); - get_user_sid(&usersid); - - /* NULL prodcode */ - state = MsiQueryFeatureStateA(NULL, "feature"); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* empty prodcode */ - state = MsiQueryFeatureStateA("", "feature"); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* garbage prodcode */ - state = MsiQueryFeatureStateA("garbage", "feature"); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* guid without brackets */ - state = MsiQueryFeatureStateA("6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D", "feature"); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* guid with brackets */ - state = MsiQueryFeatureStateA("{6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D}", "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - /* same length as guid, but random */ - state = MsiQueryFeatureStateA("A938G02JF-2NF3N93-VN3-2NNF-3KGKALDNF93", "feature"); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* NULL szFeature */ - state = MsiQueryFeatureStateA(prodcode, NULL); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - - /* empty szFeature */ - state = MsiQueryFeatureStateA(prodcode, ""); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - /* feature key does not exist yet */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Features\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* feature key exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegSetValueExA(userkey, "feature", 0, REG_SZ, (const BYTE *)"", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* feature value exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\Features"); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* userdata features key exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaa", 20); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_BADCONFIG, "Expected INSTALLSTATE_BADCONFIG, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaaa", 21); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaaaa", 22); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 21); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"", 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(compkey, ""); - RegDeleteValueA(localkey, "feature"); - RegDeleteValueA(userkey, "feature"); - RegDeleteKeyA(userkey, ""); - RegCloseKey(compkey); - RegCloseKey(localkey); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Features\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* feature key exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegSetValueExA(userkey, "feature", 0, REG_SZ, (const BYTE *)"", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* feature value exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\Features"); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* userdata features key exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaa", 20); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_BADCONFIG, "Expected INSTALLSTATE_BADCONFIG, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaaa", 21); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaaaa", 22); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 21); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"", 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(compkey, ""); - RegDeleteValueA(localkey, "feature"); - RegDeleteValueA(userkey, "feature"); - RegDeleteKeyA(userkey, ""); - RegCloseKey(compkey); - RegCloseKey(localkey); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Features\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* feature key exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegSetValueExA(userkey, "feature", 0, REG_SZ, (const BYTE *)"", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* feature value exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, "S-1-5-18\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\Features"); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* userdata features key exists */ - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaa", 20); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_BADCONFIG, "Expected INSTALLSTATE_BADCONFIG, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaaa", 21); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)"aaaaaaaaaaaaaaaaaaaaa", 22); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 21); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, "S-1-5-18\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"", 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MsiQueryFeatureStateA(prodcode, "feature"); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(compkey, ""); - RegDeleteValueA(localkey, "feature"); - RegDeleteValueA(userkey, "feature"); - RegDeleteKeyA(userkey, ""); - RegCloseKey(compkey); - RegCloseKey(localkey); - RegCloseKey(userkey); -} - -static void test_MsiQueryComponentState(void) -{ - HKEY compkey, prodkey; - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR component[MAX_PATH]; - CHAR comp_base85[MAX_PATH]; - CHAR comp_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH]; - INSTALLSTATE state; - LPSTR usersid; - LONG res; - UINT r; - - static const INSTALLSTATE MAGIC_ERROR = 0xdeadbeef; - - if (!pMsiQueryComponentStateA) - { - skip("MsiQueryComponentStateA not implemented\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - compose_base85_guid(component, comp_base85, comp_squashed); - get_user_sid(&usersid); - - /* NULL szProductCode */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(NULL, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - /* empty szProductCode */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA("", NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - /* random szProductCode */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA("random", NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - /* GUID-length szProductCode */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA("DJANE93KNDNAS-2KN2NR93KMN3LN13=L1N3KDE", NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - /* GUID-length with brackets */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA("{JANE93KNDNAS-2KN2NR93KMN3LN13=L1N3KD}", NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - /* actual GUID */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - /* create local system product key */ - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\InstallProperties"); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local system product key exists */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - res = RegSetValueExA(prodkey, "LocalPackage", 0, REG_SZ, (const BYTE *)"msitest.msi", 11); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* component key exists */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"", 0); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* component\product exists */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_NOTUSED, "Expected INSTALLSTATE_NOTUSED, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"hi", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, component, &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - RegDeleteValueA(prodkey, "LocalPackage"); - RegDeleteKeyA(prodkey, ""); - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - RegCloseKey(compkey); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, component, &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, component, &state); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\InstallProperties"); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegSetValueExA(prodkey, "LocalPackage", 0, REG_SZ, (const BYTE *)"msitest.msi", 11); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - RegCloseKey(prodkey); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, component, &state); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* component key exists */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, component, &state); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"", 0); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* component\product exists */ - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, component, &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_NOTUSED, "Expected INSTALLSTATE_NOTUSED, got %d\n", state); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"hi", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, component, &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERMANAGED, component, &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERMANAGED, component, &state); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(state == MAGIC_ERROR, "Expected 0xdeadbeef, got %d\n", state); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERMANAGED, component, &state); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\InstallProperties"); - - res = RegOpenKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegSetValueExA(prodkey, "ManagedLocalPackage", 0, REG_SZ, (const BYTE *)"msitest.msi", 11); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - state = MAGIC_ERROR; - r = pMsiQueryComponentStateA(prodcode, NULL, MSIINSTALLCONTEXT_USERMANAGED, component, &state); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - - RegDeleteValueA(prodkey, "LocalPackage"); - RegDeleteValueA(prodkey, "ManagedLocalPackage"); - RegDeleteKeyA(prodkey, ""); - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(compkey, ""); - RegCloseKey(prodkey); - RegCloseKey(compkey); -} - -static void test_MsiGetComponentPath(void) -{ - HKEY compkey, prodkey, installprop; - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR component[MAX_PATH]; - CHAR comp_base85[MAX_PATH]; - CHAR comp_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH]; - CHAR path[MAX_PATH]; - INSTALLSTATE state; - LPSTR usersid; - DWORD size, val; - LONG res; - - create_test_guid(prodcode, prod_squashed); - compose_base85_guid(component, comp_base85, comp_squashed); - get_user_sid(&usersid); - - /* NULL szProduct */ - size = MAX_PATH; - state = MsiGetComponentPathA(NULL, component, path, &size); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - /* NULL szComponent */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, NULL, path, &size); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - /* NULL lpPathBuf */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, NULL, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - /* NULL pcchBuf */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, NULL); - ok(state == INSTALLSTATE_INVALIDARG, "Expected INSTALLSTATE_INVALIDARG, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - /* all params valid */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\S-1-5-18\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local system component key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\S-1-5-18\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\InstallProperties"); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &installprop); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - val = 1; - res = RegSetValueExA(installprop, "WindowsInstaller", 0, REG_DWORD, (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* install properties key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - create_file("C:\\imapath", "C:\\imapath", 11); - - /* file exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(compkey, ""); - RegDeleteValueA(installprop, "WindowsInstaller"); - RegDeleteKeyA(installprop, ""); - RegCloseKey(compkey); - RegCloseKey(installprop); - DeleteFileA("C:\\imapath"); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user managed component key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\S-1-5-18\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\InstallProperties"); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &installprop); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - val = 1; - res = RegSetValueExA(installprop, "WindowsInstaller", 0, REG_DWORD, (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* install properties key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - create_file("C:\\imapath", "C:\\imapath", 11); - - /* file exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(compkey, ""); - RegDeleteValueA(installprop, "WindowsInstaller"); - RegDeleteKeyA(installprop, ""); - RegCloseKey(compkey); - RegCloseKey(installprop); - DeleteFileA("C:\\imapath"); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user managed product key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user managed component key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\S-1-5-18\\Products\\"); - lstrcatA(keypath, prod_squashed); - lstrcatA(keypath, "\\InstallProperties"); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &installprop); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - val = 1; - res = RegSetValueExA(installprop, "WindowsInstaller", 0, REG_DWORD, (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* install properties key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - create_file("C:\\imapath", "C:\\imapath", 11); - - /* file exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(prodkey, ""); - RegDeleteKeyA(compkey, ""); - RegDeleteValueA(installprop, "WindowsInstaller"); - RegDeleteKeyA(installprop, ""); - RegCloseKey(prodkey); - RegCloseKey(compkey); - RegCloseKey(installprop); - DeleteFileA("C:\\imapath"); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user unmanaged product key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user unmanaged component key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - create_file("C:\\imapath", "C:\\imapath", 11); - - /* file exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(prodkey, ""); - RegDeleteKeyA(compkey, ""); - RegCloseKey(prodkey); - RegCloseKey(compkey); - RegCloseKey(installprop); - DeleteFileA("C:\\imapath"); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local classes product key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\S-1-5-18\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local user component key exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - create_file("C:\\imapath", "C:\\imapath", 11); - - /* file exists */ - size = MAX_PATH; - state = MsiGetComponentPathA(prodcode, component, path, &size); - ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - ok(!lstrcmpA(path, "C:\\imapath"), "Expected C:\\imapath, got %s\n", path); - ok(size == 10, "Expected 10, got %d\n", size); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteKeyA(prodkey, ""); - RegDeleteKeyA(compkey, ""); - RegCloseKey(prodkey); - RegCloseKey(compkey); - DeleteFileA("C:\\imapath"); -} - -static void test_MsiGetProductCode(void) -{ - HKEY compkey, prodkey; - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR prodcode2[MAX_PATH]; - CHAR prod2_squashed[MAX_PATH]; - CHAR component[MAX_PATH]; - CHAR comp_base85[MAX_PATH]; - CHAR comp_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH]; - CHAR product[MAX_PATH]; - LPSTR usersid; - LONG res; - UINT r; - - create_test_guid(prodcode, prod_squashed); - create_test_guid(prodcode2, prod2_squashed); - compose_base85_guid(component, comp_base85, comp_squashed); - get_user_sid(&usersid); - - /* szComponent is NULL */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(NULL, product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - /* szComponent is empty */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA("", product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - /* garbage szComponent */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA("garbage", product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - /* guid without brackets */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA("6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D", product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - /* guid with brackets */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA("{6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D}", product); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - /* same length as guid, but random */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA("A938G02JF-2NF3N93-VN3-2NNF-3KGKALDNF93", product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - /* all params correct, szComponent not published */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user unmanaged component key exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - res = RegSetValueExA(compkey, prod2_squashed, 0, REG_SZ, (const BYTE *)"C:\\another", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user managed product key of first product exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user unmanaged product key exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local classes product key exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod2_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user managed product key of second product exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode2), "Expected %s, got %s\n", prodcode2, product); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - RegDeleteValueA(compkey, prod_squashed); - RegDeleteValueA(compkey, prod2_squashed); - RegDeleteKeyA(compkey, ""); - RegCloseKey(compkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\S-1-5-18\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local user component key exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(!lstrcmpA(product, "prod"), "Expected product to be unchanged, got %s\n", product); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - res = RegSetValueExA(compkey, prod2_squashed, 0, REG_SZ, (const BYTE *)"C:\\another", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user managed product key of first product exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user unmanaged product key exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local classes product key exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod2_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user managed product key of second product exists */ - lstrcpyA(product, "prod"); - r = MsiGetProductCodeA(component, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode2), "Expected %s, got %s\n", prodcode2, product); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - RegDeleteValueA(compkey, prod_squashed); - RegDeleteValueA(compkey, prod2_squashed); - RegDeleteKeyA(compkey, ""); - RegCloseKey(compkey); -} - -static void test_MsiEnumClients(void) -{ - HKEY compkey; - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR prodcode2[MAX_PATH]; - CHAR prod2_squashed[MAX_PATH]; - CHAR component[MAX_PATH]; - CHAR comp_base85[MAX_PATH]; - CHAR comp_squashed[MAX_PATH]; - CHAR product[MAX_PATH]; - CHAR keypath[MAX_PATH]; - LPSTR usersid; - LONG res; - UINT r; - - create_test_guid(prodcode, prod_squashed); - create_test_guid(prodcode2, prod2_squashed); - compose_base85_guid(component, comp_base85, comp_squashed); - get_user_sid(&usersid); - - /* NULL szComponent */ - product[0] = '\0'; - r = MsiEnumClientsA(NULL, 0, product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - /* empty szComponent */ - product[0] = '\0'; - r = MsiEnumClientsA("", 0, product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - /* NULL lpProductBuf */ - r = MsiEnumClientsA(component, 0, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* all params correct, component missing */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user unmanaged component key exists */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - /* index > 0, no products exist */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 1, product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - /* try index 0 again */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - /* try index 1, second product value does not exist */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 1, product); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - res = RegSetValueExA(compkey, prod2_squashed, 0, REG_SZ, (const BYTE *)"C:\\another", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* try index 1, second product value does exist */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 1, product); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - } - - /* start the enumeration over */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode) || !lstrcmpA(product, prodcode2), - "Expected %s or %s, got %s\n", prodcode, prodcode2, product); - - /* correctly query second product */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 1, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode) || !lstrcmpA(product, prodcode2), - "Expected %s or %s, got %s\n", prodcode, prodcode2, product); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteValueA(compkey, prod2_squashed); - RegDeleteKeyA(compkey, ""); - RegCloseKey(compkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\S-1-5-18\\Components\\"); - lstrcatA(keypath, comp_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user local component key exists */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - /* index > 0, no products exist */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 1, product); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"C:\\imapath", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product value exists */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode), "Expected %s, got %s\n", prodcode, product); - - /* try index 0 again */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* try index 1, second product value does not exist */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 1, product); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - - res = RegSetValueExA(compkey, prod2_squashed, 0, REG_SZ, (const BYTE *)"C:\\another", 10); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* try index 1, second product value does exist */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 1, product); - todo_wine - { - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(product, ""), "Expected product to be unchanged, got %s\n", product); - } - - /* start the enumeration over */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 0, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode) || !lstrcmpA(product, prodcode2), - "Expected %s or %s, got %s\n", prodcode, prodcode2, product); - - /* correctly query second product */ - product[0] = '\0'; - r = MsiEnumClientsA(component, 1, product); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(product, prodcode) || !lstrcmpA(product, prodcode2), - "Expected %s or %s, got %s\n", prodcode, prodcode2, product); - - RegDeleteValueA(compkey, prod_squashed); - RegDeleteValueA(compkey, prod2_squashed); - RegDeleteKeyA(compkey, ""); - RegCloseKey(compkey); -} - -static void get_version_info(LPSTR path, LPSTR *vercheck, LPDWORD verchecksz, - LPSTR *langcheck, LPDWORD langchecksz) -{ - LPSTR version; - VS_FIXEDFILEINFO *ffi; - DWORD size = GetFileVersionInfoSizeA(path, NULL); - USHORT *lang; - - version = HeapAlloc(GetProcessHeap(), 0, size); - GetFileVersionInfoA(path, 0, size, version); - - VerQueryValueA(version, "\\", (LPVOID *)&ffi, &size); - *vercheck = HeapAlloc(GetProcessHeap(), 0, MAX_PATH); - sprintf(*vercheck, "%d.%d.%d.%d", HIWORD(ffi->dwFileVersionMS), - LOWORD(ffi->dwFileVersionMS), HIWORD(ffi->dwFileVersionLS), - LOWORD(ffi->dwFileVersionLS)); - *verchecksz = lstrlenA(*vercheck); - - VerQueryValue(version, "\\VarFileInfo\\Translation", (void **)&lang, &size); - *langcheck = HeapAlloc(GetProcessHeap(), 0, MAX_PATH); - sprintf(*langcheck, "%d", *lang); - *langchecksz = lstrlenA(*langcheck); - - HeapFree(GetProcessHeap(), 0, version); -} - -static void test_MsiGetFileVersion(void) -{ - UINT r; - DWORD versz, langsz; - char version[MAX_PATH]; - char lang[MAX_PATH]; - char path[MAX_PATH]; - LPSTR vercheck, langcheck; - DWORD verchecksz, langchecksz; - - /* NULL szFilePath */ - versz = MAX_PATH; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA(NULL, version, &versz, lang, &langsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(versz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, versz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(langsz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, langsz); - - /* empty szFilePath */ - versz = MAX_PATH; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA("", version, &versz, lang, &langsz); - ok(r == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", r); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(versz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, versz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(langsz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, langsz); - - /* nonexistent szFilePath */ - versz = MAX_PATH; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA("nonexistent", version, &versz, lang, &langsz); - ok(r == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", r); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(versz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, versz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(langsz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, langsz); - - /* nonexistent szFilePath, valid lpVersionBuf, NULL pcchVersionBuf */ - versz = MAX_PATH; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA("nonexistent", version, NULL, lang, &langsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(versz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, versz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(langsz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, langsz); - - /* nonexistent szFilePath, valid lpLangBuf, NULL pcchLangBuf */ - versz = MAX_PATH; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA("nonexistent", version, &versz, lang, NULL); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(versz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, versz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(langsz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, langsz); - - /* nonexistent szFilePath, valid lpVersionBuf, pcchVersionBuf is zero */ - versz = 0; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA("nonexistent", version, &versz, lang, &langsz); - ok(r == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", r); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(versz == 0, "Expected 0, got %d\n", versz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(langsz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, langsz); - - /* nonexistent szFilePath, valid lpLangBuf, pcchLangBuf is zero */ - versz = MAX_PATH; - langsz = 0; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA("nonexistent", version, &versz, lang, &langsz); - ok(r == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", r); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(versz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, versz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(langsz == 0, "Expected 0, got %d\n", langsz); - - /* nonexistent szFilePath, rest NULL */ - r = MsiGetFileVersionA("nonexistent", NULL, NULL, NULL, NULL); - ok(r == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", r); - - create_file("ver.txt", "ver.txt", 20); - - /* file exists, no version information */ - versz = MAX_PATH; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA("ver.txt", version, &versz, lang, &langsz); - ok(versz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, versz); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(langsz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, langsz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(r == ERROR_FILE_INVALID, - "Expected ERROR_FILE_INVALID, got %d\n", r); - - DeleteFileA("ver.txt"); - - /* relative path, has version information */ - versz = MAX_PATH; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA("kernel32.dll", version, &versz, lang, &langsz); - todo_wine - { - ok(r == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", r); - ok(!lstrcmpA(version, "version"), - "Expected version to be unchanged, got %s\n", version); - ok(versz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, versz); - ok(!lstrcmpA(lang, "lang"), - "Expected lang to be unchanged, got %s\n", lang); - ok(langsz == MAX_PATH, "Expected %d, got %d\n", MAX_PATH, langsz); - } - - GetSystemDirectoryA(path, MAX_PATH); - lstrcatA(path, "\\kernel32.dll"); - - get_version_info(path, &vercheck, &verchecksz, &langcheck, &langchecksz); - - /* absolute path, has version information */ - versz = MAX_PATH; - langsz = MAX_PATH; - lstrcpyA(version, "version"); - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA(path, version, &versz, lang, &langsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(versz == verchecksz, "Expected %d, got %d\n", verchecksz, versz); - ok(!lstrcmpA(lang, langcheck), "Expected %s, got %s\n", langcheck, lang); - ok(langsz == langchecksz, "Expected %d, got %d\n", langchecksz, langsz); - ok(!lstrcmpA(version, vercheck), - "Expected %s, got %s\n", vercheck, version); - - /* only check version */ - versz = MAX_PATH; - lstrcpyA(version, "version"); - r = MsiGetFileVersionA(path, version, &versz, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(versz == verchecksz, "Expected %d, got %d\n", verchecksz, versz); - ok(!lstrcmpA(version, vercheck), - "Expected %s, got %s\n", vercheck, version); - - /* only check language */ - langsz = MAX_PATH; - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA(path, NULL, NULL, lang, &langsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(lang, langcheck), "Expected %s, got %s\n", langcheck, lang); - ok(langsz == langchecksz, "Expected %d, got %d\n", langchecksz, langsz); - - /* check neither version nor language */ - r = MsiGetFileVersionA(path, NULL, NULL, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* get pcchVersionBuf */ - versz = MAX_PATH; - r = MsiGetFileVersionA(path, NULL, &versz, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(versz == verchecksz, "Expected %d, got %d\n", verchecksz, versz); - - /* get pcchLangBuf */ - langsz = MAX_PATH; - r = MsiGetFileVersionA(path, NULL, NULL, NULL, &langsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(langsz == langchecksz, "Expected %d, got %d\n", langchecksz, langsz); - - /* pcchVersionBuf not big enough */ - versz = 5; - lstrcpyA(version, "version"); - r = MsiGetFileVersionA(path, version, &versz, NULL, NULL); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!strncmp(version, vercheck, 4), - "Expected first 4 characters of %s, got %s\n", vercheck, version); - ok(versz == verchecksz, "Expected %d, got %d\n", verchecksz, versz); - - /* pcchLangBuf not big enough */ - langsz = 3; - lstrcpyA(lang, "lang"); - r = MsiGetFileVersionA(path, NULL, NULL, lang, &langsz); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!strncmp(lang, langcheck, 2), - "Expected first character of %s, got %s\n", langcheck, lang); - ok(langsz == langchecksz, "Expected %d, got %d\n", langchecksz, langsz); - - HeapFree(GetProcessHeap(), 0, vercheck); - HeapFree(GetProcessHeap(), 0, langcheck); -} - -static void test_MsiGetProductInfo(void) -{ - UINT r; - LONG res; - HKEY propkey, source; - HKEY prodkey, localkey; - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR packcode[MAX_PATH]; - CHAR pack_squashed[MAX_PATH]; - CHAR buf[MAX_PATH]; - CHAR keypath[MAX_PATH]; - LPSTR usersid; - DWORD sz, val = 42; - - create_test_guid(prodcode, prod_squashed); - create_test_guid(packcode, pack_squashed); - get_user_sid(&usersid); - - /* NULL szProduct */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(NULL, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* empty szProduct */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA("", INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* garbage szProduct */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA("garbage", INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* guid without brackets */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA("6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D", - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* guid with brackets */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA("{6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D}", - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* same length as guid, but random */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA("A938G02JF-2NF3N93-VN3-2NNF-3KGKALDNF93", - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* not installed, NULL szAttribute */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, NULL, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* not installed, NULL lpValueBuf */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, NULL, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* not installed, NULL pcchValueBuf */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, NULL); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* created guid cannot possibly be an installed product code */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* managed product code exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local user product code exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* both local and managed product code exist */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegCreateKeyA(localkey, "InstallProperties", &propkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "link"), "Expected \"link\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - /* pcchBuf is NULL */ - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* lpValueBuf is NULL */ - sz = MAX_PATH; - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, NULL, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 4, "Expected 4, got %d\n", sz); - - /* lpValueBuf is NULL, pcchValueBuf is too small */ - sz = 2; - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, NULL, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 4, "Expected 4, got %d\n", sz); - - /* lpValueBuf is NULL, pcchValueBuf is too small */ - sz = 2; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(!lstrcmpA(buf, "apple"), "Expected buf to remain unchanged, got \"%s\"\n", buf); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(sz == 4, "Expected 4, got %d\n", sz); - - /* lpValueBuf is NULL, pcchValueBuf is exactly 4 */ - sz = 4; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), - "Expected buf to remain unchanged, got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "IMadeThis", 0, REG_SZ, (LPBYTE)"random", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* random property not supported by MSI, value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, "IMadeThis", buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected \"apple\", got \"%s\"\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - RegDeleteValueA(propkey, "IMadeThis"); - RegDeleteValueA(propkey, "HelpLink"); - RegDeleteKeyA(propkey, ""); - RegDeleteKeyA(localkey, ""); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(propkey); - RegCloseKey(localkey); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected \"apple\", got \"%s\"\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local user product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected \"apple\", got \"%s\"\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegCreateKeyA(localkey, "InstallProperties", &propkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "link"), "Expected \"link\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - RegDeleteValueA(propkey, "HelpLink"); - RegDeleteKeyA(propkey, ""); - RegDeleteKeyA(localkey, ""); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(propkey); - RegCloseKey(localkey); - RegCloseKey(prodkey); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* classes product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected \"apple\", got \"%s\"\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local user product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected \"apple\", got \"%s\"\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegCreateKeyA(localkey, "InstallProperties", &propkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected \"apple\", got \"%s\"\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - RegDeleteKeyA(propkey, ""); - RegDeleteKeyA(localkey, ""); - RegCloseKey(propkey); - RegCloseKey(localkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, "S-1-5-18\\\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Local System product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected \"apple\", got \"%s\"\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegCreateKeyA(localkey, "InstallProperties", &propkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "link"), "Expected \"link\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpLink", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTALLEDPRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "name"), "Expected \"name\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayName", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayName type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTALLEDPRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayVersion", 0, REG_SZ, (LPBYTE)"1.1.1", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayVersion value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSIONSTRING, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "1.1.1"), "Expected \"1.1.1\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayVersion", 0, - REG_DWORD, (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayVersion type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSIONSTRING, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpTelephone", 0, REG_SZ, (LPBYTE)"tele", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpTelephone value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "tele"), "Expected \"tele\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpTelephone", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpTelephone type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallLocation", 0, REG_SZ, (LPBYTE)"loc", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallLocation value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTALLLOCATION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "loc"), "Expected \"loc\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallLocation", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallLocation type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTALLLOCATION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallSource", 0, REG_SZ, (LPBYTE)"source", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallSource value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTALLSOURCE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "source"), "Expected \"source\", got \"%s\"\n", buf); - ok(sz == 6, "Expected 6, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallSource", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallSource type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTALLSOURCE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallDate", 0, REG_SZ, (LPBYTE)"date", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallDate value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTALLDATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "date"), "Expected \"date\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallDate", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallDate type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTALLDATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "Publisher", 0, REG_SZ, (LPBYTE)"pub", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Publisher value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PUBLISHER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "pub"), "Expected \"pub\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "Publisher", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Publisher type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PUBLISHER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"pack", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_LOCALPACKAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "pack"), "Expected \"pack\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "LocalPackage", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_LOCALPACKAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "UrlInfoAbout", 0, REG_SZ, (LPBYTE)"about", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* UrlInfoAbout value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_URLINFOABOUT, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "about"), "Expected \"about\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "UrlInfoAbout", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* UrlInfoAbout type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_URLINFOABOUT, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "UrlUpdateInfo", 0, REG_SZ, (LPBYTE)"info", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* UrlUpdateInfo value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_URLUPDATEINFO, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "info"), "Expected \"info\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "UrlUpdateInfo", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* UrlUpdateInfo type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_URLUPDATEINFO, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMinor", 0, REG_SZ, (LPBYTE)"1", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMinor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSIONMINOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "1"), "Expected \"1\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMinor", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMinor type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSIONMINOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMajor", 0, REG_SZ, (LPBYTE)"1", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMajor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSIONMAJOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "1"), "Expected \"1\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMajor", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMajor type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSIONMAJOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductID", 0, REG_SZ, (LPBYTE)"id", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTID, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "id"), "Expected \"id\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductID", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTID, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegCompany", 0, REG_SZ, (LPBYTE)"comp", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_REGCOMPANY, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "comp"), "Expected \"comp\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegCompany", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_REGCOMPANY, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegOwner", 0, REG_SZ, (LPBYTE)"own", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_REGOWNER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "own"), "Expected \"own\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegOwner", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_REGOWNER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstanceType", 0, REG_SZ, (LPBYTE)"type", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstanceType value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTANCETYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstanceType", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstanceType type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTANCETYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "InstanceType", 0, REG_SZ, (LPBYTE)"type", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstanceType value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTANCETYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "type"), "Expected \"type\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "InstanceType", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstanceType type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_INSTANCETYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "Transforms", 0, REG_SZ, (LPBYTE)"tforms", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "Transforms", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Transforms", 0, REG_SZ, (LPBYTE)"tforms", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "tforms"), "Expected \"tforms\", got \"%s\"\n", buf); - ok(sz == 6, "Expected 6, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Transforms", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "Language", 0, REG_SZ, (LPBYTE)"lang", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "Language", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Language", 0, REG_SZ, (LPBYTE)"lang", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "lang"), "Expected \"lang\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Language", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductName", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "name"), "Expected \"name\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductName", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "Assignment", 0, REG_SZ, (LPBYTE)"at", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Assignment value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "Assignment", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Assignment type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Assignment", 0, REG_SZ, (LPBYTE)"at", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Assignment value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "at"), "Expected \"at\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Assignment", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Assignment type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "PackageCode", 0, REG_SZ, (LPBYTE)"code", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGECODE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "PackageCode", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageCode type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGECODE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "PackageCode", 0, REG_SZ, (LPBYTE)"code", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGECODE, buf, &sz); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - ok(!lstrcmpA(buf, "code"), "Expected \"code\", got \"%s\"\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "PackageCode", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageCode type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGECODE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(prodkey, "PackageCode", 0, REG_SZ, (LPBYTE)pack_squashed, 33); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGECODE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, packcode), "Expected \"%s\", got \"%s\"\n", packcode, buf); - ok(sz == 38, "Expected 38, got %d\n", sz); - - res = RegSetValueExA(propkey, "Version", 0, REG_SZ, (LPBYTE)"ver", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "Version", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Version", 0, REG_SZ, (LPBYTE)"ver", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "ver"), "Expected \"ver\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Version", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductIcon", 0, REG_SZ, (LPBYTE)"ico", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductIcon", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductIcon", 0, REG_SZ, (LPBYTE)"ico", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "ico"), "Expected \"ico\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductIcon", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegCreateKeyA(prodkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegSetValueExA(source, "PackageName", 0, REG_SZ, (LPBYTE)"packname", 9); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGENAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "packname"), "Expected \"packname\", got \"%s\"\n", buf); - ok(sz == 8, "Expected 8, got %d\n", sz); - - res = RegSetValueExA(source, "PackageName", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageName type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGENAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "AuthorizedLUAApp", 0, REG_SZ, (LPBYTE)"auth", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Authorized value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - if (r != ERROR_UNKNOWN_PROPERTY) - { - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - } - - res = RegSetValueExA(propkey, "AuthorizedLUAApp", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* AuthorizedLUAApp type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - if (r != ERROR_UNKNOWN_PROPERTY) - { - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - } - - res = RegSetValueExA(prodkey, "AuthorizedLUAApp", 0, REG_SZ, (LPBYTE)"auth", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Authorized value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - if (r != ERROR_UNKNOWN_PROPERTY) - { - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "auth"), "Expected \"auth\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - } - - res = RegSetValueExA(prodkey, "AuthorizedLUAApp", 0, REG_DWORD, - (const BYTE *)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* AuthorizedLUAApp type is REG_DWORD */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - if (r != ERROR_UNKNOWN_PROPERTY) - { - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - } - - RegDeleteValueA(propkey, "HelpLink"); - RegDeleteValueA(propkey, "DisplayName"); - RegDeleteValueA(propkey, "DisplayVersion"); - RegDeleteValueA(propkey, "HelpTelephone"); - RegDeleteValueA(propkey, "InstallLocation"); - RegDeleteValueA(propkey, "InstallSource"); - RegDeleteValueA(propkey, "InstallDate"); - RegDeleteValueA(propkey, "Publisher"); - RegDeleteValueA(propkey, "LocalPackage"); - RegDeleteValueA(propkey, "UrlInfoAbout"); - RegDeleteValueA(propkey, "UrlUpdateInfo"); - RegDeleteValueA(propkey, "VersionMinor"); - RegDeleteValueA(propkey, "VersionMajor"); - RegDeleteValueA(propkey, "ProductID"); - RegDeleteValueA(propkey, "RegCompany"); - RegDeleteValueA(propkey, "RegOwner"); - RegDeleteValueA(propkey, "InstanceType"); - RegDeleteValueA(propkey, "Transforms"); - RegDeleteValueA(propkey, "Language"); - RegDeleteValueA(propkey, "ProductName"); - RegDeleteValueA(propkey, "Assignment"); - RegDeleteValueA(propkey, "PackageCode"); - RegDeleteValueA(propkey, "Version"); - RegDeleteValueA(propkey, "ProductIcon"); - RegDeleteValueA(propkey, "AuthorizedLUAApp"); - RegDeleteKeyA(propkey, ""); - RegDeleteKeyA(localkey, ""); - RegDeleteValueA(prodkey, "InstanceType"); - RegDeleteValueA(prodkey, "Transforms"); - RegDeleteValueA(prodkey, "Language"); - RegDeleteValueA(prodkey, "ProductName"); - RegDeleteValueA(prodkey, "Assignment"); - RegDeleteValueA(prodkey, "PackageCode"); - RegDeleteValueA(prodkey, "Version"); - RegDeleteValueA(prodkey, "ProductIcon"); - RegDeleteValueA(prodkey, "AuthorizedLUAApp"); - RegDeleteValueA(source, "PackageName"); - RegDeleteKeyA(source, ""); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(propkey); - RegCloseKey(localkey); - RegCloseKey(source); - RegCloseKey(prodkey); -} - -static void test_MsiGetProductInfoEx(void) -{ - UINT r; - LONG res; - HKEY propkey, userkey; - HKEY prodkey, localkey; - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR packcode[MAX_PATH]; - CHAR pack_squashed[MAX_PATH]; - CHAR buf[MAX_PATH]; - CHAR keypath[MAX_PATH]; - LPSTR usersid; - DWORD sz; - - if (!pMsiGetProductInfoExA) - { - skip("MsiGetProductInfoExA is not available\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - create_test_guid(packcode, pack_squashed); - get_user_sid(&usersid); - - /* NULL szProductCode */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(NULL, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* empty szProductCode */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* garbage szProductCode */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* guid without brackets */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA("6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D", usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* guid with brackets */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA("{6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D}", usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* szValue is non-NULL while pcchValue is NULL */ - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, NULL); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - - /* dwContext is out of range */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, 42, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* szProperty is NULL */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - NULL, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* szProperty is empty */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - "", buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* szProperty is not a valid property */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - "notvalid", buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* same length as guid, but random */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA("A938G02JF-2NF3N93-VN3-2NNF-3KGKALDNF93", usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local user product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegCreateKeyA(localkey, "InstallProperties", &propkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "5"), "Expected \"5\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - RegDeleteValueA(propkey, "LocalPackage"); - - /* LocalPackage value must exist */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage exists, but HelpLink does not exist */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "link"), "Expected \"link\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpTelephone", 0, REG_SZ, (LPBYTE)"phone", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpTelephone value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "phone"), "Expected \"phone\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - /* szValue and pcchValue are NULL */ - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* pcchValue is exactly 5 */ - sz = 5; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_MORE_DATA, - "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 10, "Expected 10, got %d\n", sz); - - /* szValue is NULL, pcchValue is exactly 5 */ - sz = 5; - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, NULL, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 10, "Expected 10, got %d\n", sz); - - /* szValue is NULL, pcchValue is MAX_PATH */ - sz = MAX_PATH; - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, NULL, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(sz == 10, "Expected 10, got %d\n", sz); - - /* pcchValue is exactly 0 */ - sz = 0; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_MORE_DATA, - "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected \"apple\", got \"%s\"\n", buf); - ok(sz == 10, "Expected 10, got %d\n", sz); - - res = RegSetValueExA(propkey, "notvalid", 0, REG_SZ, (LPBYTE)"invalid", 8); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* szProperty is not a valid property */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - "notvalid", buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallDate", 0, REG_SZ, (LPBYTE)"date", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallDate value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_INSTALLDATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "date"), "Expected \"date\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_INSTALLEDPRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "name"), "Expected \"name\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallLocation", 0, REG_SZ, (LPBYTE)"loc", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallLocation value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_INSTALLLOCATION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "loc"), "Expected \"loc\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallSource", 0, REG_SZ, (LPBYTE)"source", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallSource value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_INSTALLSOURCE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "source"), "Expected \"source\", got \"%s\"\n", buf); - ok(sz == 6, "Expected 6, got %d\n", sz); - - res = RegSetValueExA(propkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_LOCALPACKAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "local"), "Expected \"local\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "Publisher", 0, REG_SZ, (LPBYTE)"pub", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Publisher value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PUBLISHER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "pub"), "Expected \"pub\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "URLInfoAbout", 0, REG_SZ, (LPBYTE)"about", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLInfoAbout value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_URLINFOABOUT, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "about"), "Expected \"about\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "URLUpdateInfo", 0, REG_SZ, (LPBYTE)"update", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLUpdateInfo value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_URLUPDATEINFO, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "update"), "Expected \"update\", got \"%s\"\n", buf); - ok(sz == 6, "Expected 6, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMinor", 0, REG_SZ, (LPBYTE)"2", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMinor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_VERSIONMINOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "2"), "Expected \"2\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMajor", 0, REG_SZ, (LPBYTE)"3", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMajor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_VERSIONMAJOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "3"), "Expected \"3\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayVersion", 0, REG_SZ, (LPBYTE)"3.2.1", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayVersion value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_VERSIONSTRING, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "3.2.1"), "Expected \"3.2.1\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductID", 0, REG_SZ, (LPBYTE)"id", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTID, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "id"), "Expected \"id\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegCompany", 0, REG_SZ, (LPBYTE)"comp", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_REGCOMPANY, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "comp"), "Expected \"comp\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_REGOWNER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "owner"), "Expected \"owner\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "Transforms", 0, REG_SZ, (LPBYTE)"trans", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "Language", 0, REG_SZ, (LPBYTE)"lang", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "AssignmentType", 0, REG_SZ, (LPBYTE)"type", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* AssignmentType value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "PackageCode", 0, REG_SZ, (LPBYTE)"code", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PACKAGECODE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "Version", 0, REG_SZ, (LPBYTE)"ver", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductIcon", 0, REG_SZ, (LPBYTE)"icon", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "PackageName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PACKAGENAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "AuthorizedLUAApp", 0, REG_SZ, (LPBYTE)"auth", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* AuthorizedLUAApp value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - RegDeleteValueA(propkey, "AuthorizedLUAApp"); - RegDeleteValueA(propkey, "PackageName"); - RegDeleteValueA(propkey, "ProductIcon"); - RegDeleteValueA(propkey, "Version"); - RegDeleteValueA(propkey, "PackageCode"); - RegDeleteValueA(propkey, "AssignmentType"); - RegDeleteValueA(propkey, "ProductName"); - RegDeleteValueA(propkey, "Language"); - RegDeleteValueA(propkey, "Transforms"); - RegDeleteValueA(propkey, "RegOwner"); - RegDeleteValueA(propkey, "RegCompany"); - RegDeleteValueA(propkey, "ProductID"); - RegDeleteValueA(propkey, "DisplayVersion"); - RegDeleteValueA(propkey, "VersionMajor"); - RegDeleteValueA(propkey, "VersionMinor"); - RegDeleteValueA(propkey, "URLUpdateInfo"); - RegDeleteValueA(propkey, "URLInfoAbout"); - RegDeleteValueA(propkey, "Publisher"); - RegDeleteValueA(propkey, "LocalPackage"); - RegDeleteValueA(propkey, "InstallSource"); - RegDeleteValueA(propkey, "InstallLocation"); - RegDeleteValueA(propkey, "DisplayName"); - RegDeleteValueA(propkey, "InstallDate"); - RegDeleteValueA(propkey, "HelpTelephone"); - RegDeleteValueA(propkey, "HelpLink"); - RegDeleteValueA(propkey, "LocalPackage"); - RegDeleteKeyA(propkey, ""); - RegCloseKey(propkey); - RegDeleteKeyA(localkey, ""); - RegCloseKey(localkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "1"), "Expected \"1\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(prodkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "HelpTelephone", 0, REG_SZ, (LPBYTE)"phone", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpTelephone value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "InstallDate", 0, REG_SZ, (LPBYTE)"date", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallDate value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_INSTALLDATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "DisplayName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_INSTALLEDPRODUCTNAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "InstallLocation", 0, REG_SZ, (LPBYTE)"loc", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallLocation value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_INSTALLLOCATION, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "InstallSource", 0, REG_SZ, (LPBYTE)"source", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallSource value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_INSTALLSOURCE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_LOCALPACKAGE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Publisher", 0, REG_SZ, (LPBYTE)"pub", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Publisher value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PUBLISHER, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "URLInfoAbout", 0, REG_SZ, (LPBYTE)"about", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLInfoAbout value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_URLINFOABOUT, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "URLUpdateInfo", 0, REG_SZ, (LPBYTE)"update", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLUpdateInfo value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_URLUPDATEINFO, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "VersionMinor", 0, REG_SZ, (LPBYTE)"2", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMinor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_VERSIONMINOR, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "VersionMajor", 0, REG_SZ, (LPBYTE)"3", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMajor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_VERSIONMAJOR, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "DisplayVersion", 0, REG_SZ, (LPBYTE)"3.2.1", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayVersion value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_VERSIONSTRING, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductID", 0, REG_SZ, (LPBYTE)"id", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTID, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "RegCompany", 0, REG_SZ, (LPBYTE)"comp", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_REGCOMPANY, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_REGOWNER, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Transforms", 0, REG_SZ, (LPBYTE)"trans", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "trans"), "Expected \"trans\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Language", 0, REG_SZ, (LPBYTE)"lang", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "lang"), "Expected \"lang\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "name"), "Expected \"name\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "AssignmentType", 0, REG_SZ, (LPBYTE)"type", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* AssignmentType value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "PackageCode", 0, REG_SZ, (LPBYTE)"code", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PACKAGECODE, buf, &sz); - todo_wine - { - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - } - - res = RegSetValueExA(prodkey, "Version", 0, REG_SZ, (LPBYTE)"ver", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "ver"), "Expected \"ver\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductIcon", 0, REG_SZ, (LPBYTE)"icon", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "icon"), "Expected \"icon\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "PackageName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_PACKAGENAME, buf, &sz); - todo_wine - { - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - } - - res = RegSetValueExA(prodkey, "AuthorizedLUAApp", 0, REG_SZ, (LPBYTE)"auth", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* AuthorizedLUAApp value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "auth"), "Expected \"auth\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - RegDeleteValueA(prodkey, "AuthorizedLUAApp"); - RegDeleteValueA(prodkey, "PackageName"); - RegDeleteValueA(prodkey, "ProductIcon"); - RegDeleteValueA(prodkey, "Version"); - RegDeleteValueA(prodkey, "PackageCode"); - RegDeleteValueA(prodkey, "AssignmentType"); - RegDeleteValueA(prodkey, "ProductName"); - RegDeleteValueA(prodkey, "Language"); - RegDeleteValueA(prodkey, "Transforms"); - RegDeleteValueA(prodkey, "RegOwner"); - RegDeleteValueA(prodkey, "RegCompany"); - RegDeleteValueA(prodkey, "ProductID"); - RegDeleteValueA(prodkey, "DisplayVersion"); - RegDeleteValueA(prodkey, "VersionMajor"); - RegDeleteValueA(prodkey, "VersionMinor"); - RegDeleteValueA(prodkey, "URLUpdateInfo"); - RegDeleteValueA(prodkey, "URLInfoAbout"); - RegDeleteValueA(prodkey, "Publisher"); - RegDeleteValueA(prodkey, "LocalPackage"); - RegDeleteValueA(prodkey, "InstallSource"); - RegDeleteValueA(prodkey, "InstallLocation"); - RegDeleteValueA(prodkey, "DisplayName"); - RegDeleteValueA(prodkey, "InstallDate"); - RegDeleteValueA(prodkey, "HelpTelephone"); - RegDeleteValueA(prodkey, "HelpLink"); - RegDeleteValueA(prodkey, "LocalPackage"); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local user product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegCreateKeyA(localkey, "InstallProperties", &propkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "ManagedLocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ManagedLocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "5"), "Expected \"5\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "link"), "Expected \"link\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpTelephone", 0, REG_SZ, (LPBYTE)"phone", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpTelephone value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "phone"), "Expected \"phone\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallDate", 0, REG_SZ, (LPBYTE)"date", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallDate value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_INSTALLDATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "date"), "Expected \"date\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_INSTALLEDPRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "name"), "Expected \"name\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallLocation", 0, REG_SZ, (LPBYTE)"loc", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallLocation value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_INSTALLLOCATION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "loc"), "Expected \"loc\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallSource", 0, REG_SZ, (LPBYTE)"source", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallSource value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_INSTALLSOURCE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "source"), "Expected \"source\", got \"%s\"\n", buf); - ok(sz == 6, "Expected 6, got %d\n", sz); - - res = RegSetValueExA(propkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_LOCALPACKAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "local"), "Expected \"local\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "Publisher", 0, REG_SZ, (LPBYTE)"pub", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Publisher value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PUBLISHER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "pub"), "Expected \"pub\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "URLInfoAbout", 0, REG_SZ, (LPBYTE)"about", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLInfoAbout value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_URLINFOABOUT, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "about"), "Expected \"about\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "URLUpdateInfo", 0, REG_SZ, (LPBYTE)"update", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLUpdateInfo value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_URLUPDATEINFO, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "update"), "Expected \"update\", got \"%s\"\n", buf); - ok(sz == 6, "Expected 6, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMinor", 0, REG_SZ, (LPBYTE)"2", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMinor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_VERSIONMINOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "2"), "Expected \"2\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMajor", 0, REG_SZ, (LPBYTE)"3", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMajor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_VERSIONMAJOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "3"), "Expected \"3\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayVersion", 0, REG_SZ, (LPBYTE)"3.2.1", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayVersion value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_VERSIONSTRING, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "3.2.1"), "Expected \"3.2.1\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductID", 0, REG_SZ, (LPBYTE)"id", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTID, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "id"), "Expected \"id\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegCompany", 0, REG_SZ, (LPBYTE)"comp", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_REGCOMPANY, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "comp"), "Expected \"comp\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_REGOWNER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "owner"), "Expected \"owner\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "Transforms", 0, REG_SZ, (LPBYTE)"trans", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "Language", 0, REG_SZ, (LPBYTE)"lang", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "AssignmentType", 0, REG_SZ, (LPBYTE)"type", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* AssignmentType value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "PackageCode", 0, REG_SZ, (LPBYTE)"code", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PACKAGECODE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "Version", 0, REG_SZ, (LPBYTE)"ver", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductIcon", 0, REG_SZ, (LPBYTE)"icon", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "PackageName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PACKAGENAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "AuthorizedLUAApp", 0, REG_SZ, (LPBYTE)"auth", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* AuthorizedLUAApp value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - RegDeleteValueA(propkey, "AuthorizedLUAApp"); - RegDeleteValueA(propkey, "PackageName"); - RegDeleteValueA(propkey, "ProductIcon"); - RegDeleteValueA(propkey, "Version"); - RegDeleteValueA(propkey, "PackageCode"); - RegDeleteValueA(propkey, "AssignmentType"); - RegDeleteValueA(propkey, "ProductName"); - RegDeleteValueA(propkey, "Language"); - RegDeleteValueA(propkey, "Transforms"); - RegDeleteValueA(propkey, "RegOwner"); - RegDeleteValueA(propkey, "RegCompany"); - RegDeleteValueA(propkey, "ProductID"); - RegDeleteValueA(propkey, "DisplayVersion"); - RegDeleteValueA(propkey, "VersionMajor"); - RegDeleteValueA(propkey, "VersionMinor"); - RegDeleteValueA(propkey, "URLUpdateInfo"); - RegDeleteValueA(propkey, "URLInfoAbout"); - RegDeleteValueA(propkey, "Publisher"); - RegDeleteValueA(propkey, "LocalPackage"); - RegDeleteValueA(propkey, "InstallSource"); - RegDeleteValueA(propkey, "InstallLocation"); - RegDeleteValueA(propkey, "DisplayName"); - RegDeleteValueA(propkey, "InstallDate"); - RegDeleteValueA(propkey, "HelpTelephone"); - RegDeleteValueA(propkey, "HelpLink"); - RegDeleteValueA(propkey, "ManagedLocalPackage"); - RegDeleteKeyA(propkey, ""); - RegCloseKey(propkey); - RegDeleteKeyA(localkey, ""); - RegCloseKey(localkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "1"), "Expected \"1\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* current user product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists, user product key does not exist */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegSetValueExA(userkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists, user product key does exist */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "HelpTelephone", 0, REG_SZ, (LPBYTE)"phone", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpTelephone value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "InstallDate", 0, REG_SZ, (LPBYTE)"date", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallDate value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_INSTALLDATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "DisplayName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_INSTALLEDPRODUCTNAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "InstallLocation", 0, REG_SZ, (LPBYTE)"loc", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallLocation value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_INSTALLLOCATION, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "InstallSource", 0, REG_SZ, (LPBYTE)"source", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallSource value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_INSTALLSOURCE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_LOCALPACKAGE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "Publisher", 0, REG_SZ, (LPBYTE)"pub", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Publisher value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PUBLISHER, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "URLInfoAbout", 0, REG_SZ, (LPBYTE)"about", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLInfoAbout value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_URLINFOABOUT, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "URLUpdateInfo", 0, REG_SZ, (LPBYTE)"update", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLUpdateInfo value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_URLUPDATEINFO, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "VersionMinor", 0, REG_SZ, (LPBYTE)"2", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMinor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_VERSIONMINOR, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "VersionMajor", 0, REG_SZ, (LPBYTE)"3", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMajor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_VERSIONMAJOR, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "DisplayVersion", 0, REG_SZ, (LPBYTE)"3.2.1", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayVersion value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_VERSIONSTRING, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "ProductID", 0, REG_SZ, (LPBYTE)"id", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTID, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "RegCompany", 0, REG_SZ, (LPBYTE)"comp", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_REGCOMPANY, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_REGOWNER, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(userkey, "Transforms", 0, REG_SZ, (LPBYTE)"trans", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "trans"), "Expected \"trans\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(userkey, "Language", 0, REG_SZ, (LPBYTE)"lang", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "lang"), "Expected \"lang\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(userkey, "ProductName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "name"), "Expected \"name\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(userkey, "AssignmentType", 0, REG_SZ, (LPBYTE)"type", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* AssignmentType value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(userkey, "PackageCode", 0, REG_SZ, (LPBYTE)"code", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PACKAGECODE, buf, &sz); - todo_wine - { - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - } - - res = RegSetValueExA(userkey, "Version", 0, REG_SZ, (LPBYTE)"ver", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "ver"), "Expected \"ver\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(userkey, "ProductIcon", 0, REG_SZ, (LPBYTE)"icon", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "icon"), "Expected \"icon\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(userkey, "PackageName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_PACKAGENAME, buf, &sz); - todo_wine - { - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - } - - res = RegSetValueExA(userkey, "AuthorizedLUAApp", 0, REG_SZ, (LPBYTE)"auth", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* AuthorizedLUAApp value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "auth"), "Expected \"auth\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - RegDeleteValueA(userkey, "AuthorizedLUAApp"); - RegDeleteValueA(userkey, "PackageName"); - RegDeleteValueA(userkey, "ProductIcon"); - RegDeleteValueA(userkey, "Version"); - RegDeleteValueA(userkey, "PackageCode"); - RegDeleteValueA(userkey, "AssignmentType"); - RegDeleteValueA(userkey, "ProductName"); - RegDeleteValueA(userkey, "Language"); - RegDeleteValueA(userkey, "Transforms"); - RegDeleteValueA(userkey, "RegOwner"); - RegDeleteValueA(userkey, "RegCompany"); - RegDeleteValueA(userkey, "ProductID"); - RegDeleteValueA(userkey, "DisplayVersion"); - RegDeleteValueA(userkey, "VersionMajor"); - RegDeleteValueA(userkey, "VersionMinor"); - RegDeleteValueA(userkey, "URLUpdateInfo"); - RegDeleteValueA(userkey, "URLInfoAbout"); - RegDeleteValueA(userkey, "Publisher"); - RegDeleteValueA(userkey, "LocalPackage"); - RegDeleteValueA(userkey, "InstallSource"); - RegDeleteValueA(userkey, "InstallLocation"); - RegDeleteValueA(userkey, "DisplayName"); - RegDeleteValueA(userkey, "InstallDate"); - RegDeleteValueA(userkey, "HelpTelephone"); - RegDeleteValueA(userkey, "HelpLink"); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - /* szUserSid is non-NULL */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, usersid, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &localkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local system product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegCreateKeyA(localkey, "InstallProperties", &propkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "5"), "Expected \"5\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "link"), "Expected \"link\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "HelpTelephone", 0, REG_SZ, (LPBYTE)"phone", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpTelephone value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "phone"), "Expected \"phone\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallDate", 0, REG_SZ, (LPBYTE)"date", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallDate value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_INSTALLDATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "date"), "Expected \"date\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_INSTALLEDPRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "name"), "Expected \"name\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallLocation", 0, REG_SZ, (LPBYTE)"loc", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallLocation value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_INSTALLLOCATION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "loc"), "Expected \"loc\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "InstallSource", 0, REG_SZ, (LPBYTE)"source", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallSource value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_INSTALLSOURCE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "source"), "Expected \"source\", got \"%s\"\n", buf); - ok(sz == 6, "Expected 6, got %d\n", sz); - - res = RegSetValueExA(propkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_LOCALPACKAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "local"), "Expected \"local\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "Publisher", 0, REG_SZ, (LPBYTE)"pub", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Publisher value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PUBLISHER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "pub"), "Expected \"pub\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(propkey, "URLInfoAbout", 0, REG_SZ, (LPBYTE)"about", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLInfoAbout value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_URLINFOABOUT, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "about"), "Expected \"about\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "URLUpdateInfo", 0, REG_SZ, (LPBYTE)"update", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLUpdateInfo value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_URLUPDATEINFO, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "update"), "Expected \"update\", got \"%s\"\n", buf); - ok(sz == 6, "Expected 6, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMinor", 0, REG_SZ, (LPBYTE)"2", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMinor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_VERSIONMINOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "2"), "Expected \"2\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "VersionMajor", 0, REG_SZ, (LPBYTE)"3", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMajor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_VERSIONMAJOR, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "3"), "Expected \"3\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(propkey, "DisplayVersion", 0, REG_SZ, (LPBYTE)"3.2.1", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayVersion value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_VERSIONSTRING, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "3.2.1"), "Expected \"3.2.1\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductID", 0, REG_SZ, (LPBYTE)"id", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTID, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "id"), "Expected \"id\", got \"%s\"\n", buf); - ok(sz == 2, "Expected 2, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegCompany", 0, REG_SZ, (LPBYTE)"comp", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_REGCOMPANY, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "comp"), "Expected \"comp\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(propkey, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_REGOWNER, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "owner"), "Expected \"owner\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(propkey, "Transforms", 0, REG_SZ, (LPBYTE)"trans", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "Language", 0, REG_SZ, (LPBYTE)"lang", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "AssignmentType", 0, REG_SZ, (LPBYTE)"type", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* AssignmentType value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "PackageCode", 0, REG_SZ, (LPBYTE)"code", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PACKAGECODE, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "Version", 0, REG_SZ, (LPBYTE)"ver", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "ProductIcon", 0, REG_SZ, (LPBYTE)"icon", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "PackageName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PACKAGENAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(propkey, "AuthorizedLUAApp", 0, REG_SZ, (LPBYTE)"auth", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* AuthorizedLUAApp value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - RegDeleteValueA(propkey, "AuthorizedLUAApp"); - RegDeleteValueA(propkey, "PackageName"); - RegDeleteValueA(propkey, "ProductIcon"); - RegDeleteValueA(propkey, "Version"); - RegDeleteValueA(propkey, "PackageCode"); - RegDeleteValueA(propkey, "AssignmentType"); - RegDeleteValueA(propkey, "ProductName"); - RegDeleteValueA(propkey, "Language"); - RegDeleteValueA(propkey, "Transforms"); - RegDeleteValueA(propkey, "RegOwner"); - RegDeleteValueA(propkey, "RegCompany"); - RegDeleteValueA(propkey, "ProductID"); - RegDeleteValueA(propkey, "DisplayVersion"); - RegDeleteValueA(propkey, "VersionMajor"); - RegDeleteValueA(propkey, "VersionMinor"); - RegDeleteValueA(propkey, "URLUpdateInfo"); - RegDeleteValueA(propkey, "URLInfoAbout"); - RegDeleteValueA(propkey, "Publisher"); - RegDeleteValueA(propkey, "LocalPackage"); - RegDeleteValueA(propkey, "InstallSource"); - RegDeleteValueA(propkey, "InstallLocation"); - RegDeleteValueA(propkey, "DisplayName"); - RegDeleteValueA(propkey, "InstallDate"); - RegDeleteValueA(propkey, "HelpTelephone"); - RegDeleteValueA(propkey, "HelpLink"); - RegDeleteValueA(propkey, "LocalPackage"); - RegDeleteKeyA(propkey, ""); - RegCloseKey(propkey); - RegDeleteKeyA(localkey, ""); - RegCloseKey(localkey); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* local classes product key exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTSTATE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "1"), "Expected \"1\", got \"%s\"\n", buf); - ok(sz == 1, "Expected 1, got %d\n", sz); - - res = RegSetValueExA(prodkey, "HelpLink", 0, REG_SZ, (LPBYTE)"link", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpLink value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_HELPLINK, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "HelpTelephone", 0, REG_SZ, (LPBYTE)"phone", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* HelpTelephone value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_HELPTELEPHONE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "InstallDate", 0, REG_SZ, (LPBYTE)"date", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallDate value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_INSTALLDATE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "DisplayName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_INSTALLEDPRODUCTNAME, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "InstallLocation", 0, REG_SZ, (LPBYTE)"loc", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallLocation value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_INSTALLLOCATION, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "InstallSource", 0, REG_SZ, (LPBYTE)"source", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallSource value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_INSTALLSOURCE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "LocalPackage", 0, REG_SZ, (LPBYTE)"local", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LocalPackage value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_LOCALPACKAGE, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Publisher", 0, REG_SZ, (LPBYTE)"pub", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Publisher value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PUBLISHER, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "URLInfoAbout", 0, REG_SZ, (LPBYTE)"about", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLInfoAbout value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_URLINFOABOUT, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "URLUpdateInfo", 0, REG_SZ, (LPBYTE)"update", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URLUpdateInfo value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_URLUPDATEINFO, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "VersionMinor", 0, REG_SZ, (LPBYTE)"2", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMinor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_VERSIONMINOR, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "VersionMajor", 0, REG_SZ, (LPBYTE)"3", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* VersionMajor value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_VERSIONMAJOR, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "DisplayVersion", 0, REG_SZ, (LPBYTE)"3.2.1", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* DisplayVersion value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_VERSIONSTRING, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductID", 0, REG_SZ, (LPBYTE)"id", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTID, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "RegCompany", 0, REG_SZ, (LPBYTE)"comp", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_REGCOMPANY, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_REGOWNER, buf, &sz); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Transforms", 0, REG_SZ, (LPBYTE)"trans", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Transforms value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_TRANSFORMS, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "trans"), "Expected \"trans\", got \"%s\"\n", buf); - ok(sz == 5, "Expected 5, got %d\n", sz); - - res = RegSetValueExA(prodkey, "Language", 0, REG_SZ, (LPBYTE)"lang", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Language value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_LANGUAGE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "lang"), "Expected \"lang\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTNAME, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "name"), "Expected \"name\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "AssignmentType", 0, REG_SZ, (LPBYTE)"type", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* AssignmentType value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_ASSIGNMENTTYPE, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - res = RegSetValueExA(prodkey, "PackageCode", 0, REG_SZ, (LPBYTE)"code", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* FIXME */ - - /* PackageCode value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PACKAGECODE, buf, &sz); - todo_wine - { - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - } - - res = RegSetValueExA(prodkey, "Version", 0, REG_SZ, (LPBYTE)"ver", 4); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Version value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_VERSION, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "ver"), "Expected \"ver\", got \"%s\"\n", buf); - ok(sz == 3, "Expected 3, got %d\n", sz); - - res = RegSetValueExA(prodkey, "ProductIcon", 0, REG_SZ, (LPBYTE)"icon", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductIcon value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PRODUCTICON, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "icon"), "Expected \"icon\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - res = RegSetValueExA(prodkey, "PackageName", 0, REG_SZ, (LPBYTE)"name", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageName value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_PACKAGENAME, buf, &sz); - todo_wine - { - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(buf, "apple"), "Expected buf to be unchanged, got %s\n", buf); - ok(sz == MAX_PATH, "Expected MAX_PATH, got %d\n", sz); - } - - res = RegSetValueExA(prodkey, "AuthorizedLUAApp", 0, REG_SZ, (LPBYTE)"auth", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* AuthorizedLUAApp value exists */ - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = pMsiGetProductInfoExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - INSTALLPROPERTY_AUTHORIZED_LUA_APP, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, "auth"), "Expected \"auth\", got \"%s\"\n", buf); - ok(sz == 4, "Expected 4, got %d\n", sz); - - RegDeleteValueA(prodkey, "AuthorizedLUAApp"); - RegDeleteValueA(prodkey, "PackageName"); - RegDeleteValueA(prodkey, "ProductIcon"); - RegDeleteValueA(prodkey, "Version"); - RegDeleteValueA(prodkey, "PackageCode"); - RegDeleteValueA(prodkey, "AssignmentType"); - RegDeleteValueA(prodkey, "ProductName"); - RegDeleteValueA(prodkey, "Language"); - RegDeleteValueA(prodkey, "Transforms"); - RegDeleteValueA(prodkey, "RegOwner"); - RegDeleteValueA(prodkey, "RegCompany"); - RegDeleteValueA(prodkey, "ProductID"); - RegDeleteValueA(prodkey, "DisplayVersion"); - RegDeleteValueA(prodkey, "VersionMajor"); - RegDeleteValueA(prodkey, "VersionMinor"); - RegDeleteValueA(prodkey, "URLUpdateInfo"); - RegDeleteValueA(prodkey, "URLInfoAbout"); - RegDeleteValueA(prodkey, "Publisher"); - RegDeleteValueA(prodkey, "LocalPackage"); - RegDeleteValueA(prodkey, "InstallSource"); - RegDeleteValueA(prodkey, "InstallLocation"); - RegDeleteValueA(prodkey, "DisplayName"); - RegDeleteValueA(prodkey, "InstallDate"); - RegDeleteValueA(prodkey, "HelpTelephone"); - RegDeleteValueA(prodkey, "HelpLink"); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); -} - -#define INIT_USERINFO() \ - lstrcpyA(user, "apple"); \ - lstrcpyA(org, "orange"); \ - lstrcpyA(serial, "banana"); \ - usersz = orgsz = serialsz = MAX_PATH; - -static void test_MsiGetUserInfo(void) -{ - USERINFOSTATE state; - CHAR user[MAX_PATH]; - CHAR org[MAX_PATH]; - CHAR serial[MAX_PATH]; - DWORD usersz, orgsz, serialsz; - CHAR keypath[MAX_PATH * 2]; - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - HKEY prodkey, userprod, props; - LPSTR usersid; - LONG res; - - create_test_guid(prodcode, prod_squashed); - get_user_sid(&usersid); - - /* NULL szProduct */ - INIT_USERINFO(); - state = MsiGetUserInfoA(NULL, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_INVALIDARG, - "Expected USERINFOSTATE_INVALIDARG, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* empty szProductCode */ - INIT_USERINFO(); - state = MsiGetUserInfoA("", user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_INVALIDARG, - "Expected USERINFOSTATE_INVALIDARG, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* garbage szProductCode */ - INIT_USERINFO(); - state = MsiGetUserInfoA("garbage", user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_INVALIDARG, - "Expected USERINFOSTATE_INVALIDARG, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* guid without brackets */ - INIT_USERINFO(); - state = MsiGetUserInfoA("6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D", - user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_INVALIDARG, - "Expected USERINFOSTATE_INVALIDARG, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* guid with brackets */ - INIT_USERINFO(); - state = MsiGetUserInfoA("{6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D}", - user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_UNKNOWN, - "Expected USERINFOSTATE_UNKNOWN, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* NULL lpUserNameBuf */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, NULL, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_UNKNOWN, - "Expected USERINFOSTATE_UNKNOWN, got %d\n", state); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* NULL pcchUserNameBuf */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, NULL, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_INVALIDARG, - "Expected USERINFOSTATE_INVALIDARG, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* both lpUserNameBuf and pcchUserNameBuf NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, NULL, NULL, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_UNKNOWN, - "Expected USERINFOSTATE_UNKNOWN, got %d\n", state); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* NULL lpOrgNameBuf */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, NULL, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_UNKNOWN, - "Expected USERINFOSTATE_UNKNOWN, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* NULL pcchOrgNameBuf */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, NULL, serial, &serialsz); - ok(state == USERINFOSTATE_INVALIDARG, - "Expected USERINFOSTATE_INVALIDARG, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* both lpOrgNameBuf and pcchOrgNameBuf NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, NULL, NULL, serial, &serialsz); - ok(state == USERINFOSTATE_UNKNOWN, - "Expected USERINFOSTATE_UNKNOWN, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* NULL lpSerialBuf */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, NULL, &serialsz); - ok(state == USERINFOSTATE_UNKNOWN, - "Expected USERINFOSTATE_UNKNOWN, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* NULL pcchSerialBuf */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, NULL); - ok(state == USERINFOSTATE_INVALIDARG, - "Expected USERINFOSTATE_INVALIDARG, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - - /* both lpSerialBuf and pcchSerialBuf NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, NULL, NULL); - ok(state == USERINFOSTATE_UNKNOWN, - "Expected USERINFOSTATE_UNKNOWN, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - /* create local system product key */ - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* managed product key exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userprod); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegCreateKeyA(userprod, "InstallProperties", &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* RegOwner doesn't exist, lpUserNameBuf and pcchUserNameBuf are NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, NULL, NULL, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(org, ""), "Expected empty string, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(orgsz == 0, "Expected 0, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - /* RegOwner, RegCompany don't exist, out params are NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, NULL, NULL, NULL, NULL, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, ""), "Expected empty string, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 0, "Expected 0, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "RegCompany", 0, REG_SZ, (LPBYTE)"company", 8); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, "company"), "Expected \"company\", got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 7, "Expected 7, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "ProductID", 0, REG_SZ, (LPBYTE)"ID", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_PRESENT, - "Expected USERINFOSTATE_PRESENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, "company"), "Expected \"company\", got \"%s\"\n", org); - ok(!lstrcmpA(serial, "ID"), "Expected \"ID\", got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 7, "Expected 7, got %d\n", orgsz); - ok(serialsz == 2, "Expected 2, got %d\n", serialsz); - - /* pcchUserNameBuf is too small */ - INIT_USERINFO(); - usersz = 0; - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_MOREDATA, - "Expected USERINFOSTATE_MOREDATA, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* pcchUserNameBuf has no room for NULL terminator */ - INIT_USERINFO(); - usersz = 5; - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_MOREDATA, - "Expected USERINFOSTATE_MOREDATA, got %d\n", state); - todo_wine - { - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - } - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* pcchUserNameBuf is too small, lpUserNameBuf is NULL */ - INIT_USERINFO(); - usersz = 0; - state = MsiGetUserInfoA(prodcode, NULL, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_PRESENT, - "Expected USERINFOSTATE_PRESENT, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "company"), "Expected \"company\", got \"%s\"\n", org); - ok(!lstrcmpA(serial, "ID"), "Expected \"ID\", got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 7, "Expected 7, got %d\n", orgsz); - ok(serialsz == 2, "Expected 2, got %d\n", serialsz); - - RegDeleteValueA(props, "ProductID"); - RegDeleteValueA(props, "RegCompany"); - RegDeleteValueA(props, "RegOwner"); - RegDeleteKeyA(props, ""); - RegCloseKey(props); - RegDeleteKeyA(userprod, ""); - RegCloseKey(userprod); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - /* create local system product key */ - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product key exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userprod); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegCreateKeyA(userprod, "InstallProperties", &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* RegOwner doesn't exist, lpUserNameBuf and pcchUserNameBuf are NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, NULL, NULL, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(org, ""), "Expected empty string, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(orgsz == 0, "Expected 0, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - /* RegOwner, RegCompany don't exist, out params are NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, NULL, NULL, NULL, NULL, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, ""), "Expected empty string, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 0, "Expected 0, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "RegCompany", 0, REG_SZ, (LPBYTE)"company", 8); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, "company"), "Expected \"company\", got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 7, "Expected 7, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "ProductID", 0, REG_SZ, (LPBYTE)"ID", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_PRESENT, - "Expected USERINFOSTATE_PRESENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, "company"), "Expected \"company\", got \"%s\"\n", org); - ok(!lstrcmpA(serial, "ID"), "Expected \"ID\", got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 7, "Expected 7, got %d\n", orgsz); - ok(serialsz == 2, "Expected 2, got %d\n", serialsz); - - RegDeleteValueA(props, "ProductID"); - RegDeleteValueA(props, "RegCompany"); - RegDeleteValueA(props, "RegOwner"); - RegDeleteKeyA(props, ""); - RegCloseKey(props); - RegDeleteKeyA(userprod, ""); - RegCloseKey(userprod); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - /* create local system product key */ - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product key exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH, "Expected MAX_PATH, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\"); - lstrcatA(keypath, "Installer\\UserData\\S-1-5-18"); - lstrcatA(keypath, "\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userprod); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegCreateKeyA(userprod, "InstallProperties", &props); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* InstallProperties key exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "apple"), "Expected user to be unchanged, got \"%s\"\n", user); - ok(!lstrcmpA(org, "orange"), "Expected org to be unchanged, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", usersz); - ok(orgsz == MAX_PATH, "Expected MAX_PATH, got %d\n", orgsz); - ok(serialsz == MAX_PATH, "Expected MAX_PATH, got %d\n", serialsz); - - /* RegOwner doesn't exist, lpUserNameBuf and pcchUserNameBuf are NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, NULL, NULL, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(org, ""), "Expected empty string, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(orgsz == 0, "Expected 0, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - /* RegOwner, RegCompany don't exist, out params are NULL */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, NULL, NULL, NULL, NULL, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "RegOwner", 0, REG_SZ, (LPBYTE)"owner", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegOwner value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, ""), "Expected empty string, got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 0, "Expected 0, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "RegCompany", 0, REG_SZ, (LPBYTE)"company", 8); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* RegCompany value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_ABSENT, - "Expected USERINFOSTATE_ABSENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, "company"), "Expected \"company\", got \"%s\"\n", org); - ok(!lstrcmpA(serial, "banana"), "Expected serial to be unchanged, got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 7, "Expected 7, got %d\n", orgsz); - ok(serialsz == MAX_PATH - 1, "Expected MAX_PATH - 1, got %d\n", serialsz); - - res = RegSetValueExA(props, "ProductID", 0, REG_SZ, (LPBYTE)"ID", 3); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* ProductID value exists */ - INIT_USERINFO(); - state = MsiGetUserInfoA(prodcode, user, &usersz, org, &orgsz, serial, &serialsz); - ok(state == USERINFOSTATE_PRESENT, - "Expected USERINFOSTATE_PRESENT, got %d\n", state); - ok(!lstrcmpA(user, "owner"), "Expected \"owner\", got \"%s\"\n", user); - ok(!lstrcmpA(org, "company"), "Expected \"company\", got \"%s\"\n", org); - ok(!lstrcmpA(serial, "ID"), "Expected \"ID\", got \"%s\"\n", serial); - ok(usersz == 5, "Expected 5, got %d\n", usersz); - ok(orgsz == 7, "Expected 7, got %d\n", orgsz); - ok(serialsz == 2, "Expected 2, got %d\n", serialsz); - - RegDeleteValueA(props, "ProductID"); - RegDeleteValueA(props, "RegCompany"); - RegDeleteValueA(props, "RegOwner"); - RegDeleteKeyA(props, ""); - RegCloseKey(props); - RegDeleteKeyA(userprod, ""); - RegCloseKey(userprod); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); -} - -START_TEST(msi) -{ - init_functionpointers(); - - test_usefeature(); - test_null(); - test_getcomponentpath(); - test_MsiGetFileHash(); - - if (!pConvertSidToStringSidA) - skip("ConvertSidToStringSidA not implemented\n"); - else - { - /* These tests rely on get_user_sid that needs ConvertSidToStringSidA */ - test_MsiQueryProductState(); - test_MsiQueryFeatureState(); - test_MsiQueryComponentState(); - test_MsiGetComponentPath(); - test_MsiGetProductCode(); - test_MsiEnumClients(); - test_MsiGetProductInfo(); - test_MsiGetProductInfoEx(); - test_MsiGetUserInfo(); - } - - test_MsiGetFileVersion(); -} diff --git a/rostests/winetests/msi/msi.rbuild b/rostests/winetests/msi/msi.rbuild deleted file mode 100644 index 40bd7b3464e..00000000000 --- a/rostests/winetests/msi/msi.rbuild +++ /dev/null @@ -1,29 +0,0 @@ - - - - - . - automation.c - db.c - format.c - install.c - msi.c - package.c - record.c - source.c - suminfo.c - testlist.c - wine - uuid - cabinet - msi - shell32 - ole32 - oleaut32 - user32 - advapi32 - kernel32 - version - ntdll - - diff --git a/rostests/winetests/msi/package.c b/rostests/winetests/msi/package.c deleted file mode 100644 index 5c8741bee7b..00000000000 --- a/rostests/winetests/msi/package.c +++ /dev/null @@ -1,5532 +0,0 @@ -/* - * tests for Microsoft Installer functionality - * - * Copyright 2005 Mike McCormack for CodeWeavers - * 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 - */ - -#define COBJMACROS - -#include -#include -#include -#include -#include - -#include "wine/test.h" - -static const char msifile[] = "winetest.msi"; -char CURR_DIR[MAX_PATH]; - -/* RegDeleteTreeW from dlls/advapi32/registry.c */ -LSTATUS WINAPI package_RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey) -{ - LONG ret; - DWORD dwMaxSubkeyLen, dwMaxValueLen; - DWORD dwMaxLen, dwSize; - WCHAR szNameBuf[MAX_PATH], *lpszName = szNameBuf; - HKEY hSubKey = hKey; - - if(lpszSubKey) - { - ret = RegOpenKeyExW(hKey, lpszSubKey, 0, KEY_READ, &hSubKey); - if (ret) return ret; - } - - ret = RegQueryInfoKeyW(hSubKey, NULL, NULL, NULL, NULL, - &dwMaxSubkeyLen, NULL, NULL, &dwMaxValueLen, NULL, NULL, NULL); - if (ret) goto cleanup; - - dwMaxSubkeyLen++; - dwMaxValueLen++; - dwMaxLen = max(dwMaxSubkeyLen, dwMaxValueLen); - if (dwMaxLen > sizeof(szNameBuf)/sizeof(WCHAR)) - { - /* Name too big: alloc a buffer for it */ - if (!(lpszName = HeapAlloc( GetProcessHeap(), 0, dwMaxLen*sizeof(WCHAR)))) - { - ret = ERROR_NOT_ENOUGH_MEMORY; - goto cleanup; - } - } - - /* Recursively delete all the subkeys */ - while (TRUE) - { - dwSize = dwMaxLen; - if (RegEnumKeyExW(hSubKey, 0, lpszName, &dwSize, NULL, - NULL, NULL, NULL)) break; - - ret = package_RegDeleteTreeW(hSubKey, lpszName); - if (ret) goto cleanup; - } - - if (lpszSubKey) - ret = RegDeleteKeyW(hKey, lpszSubKey); - else - while (TRUE) - { - dwSize = dwMaxLen; - if (RegEnumValueW(hKey, 0, lpszName, &dwSize, - NULL, NULL, NULL, NULL)) break; - - ret = RegDeleteValueW(hKey, lpszName); - if (ret) goto cleanup; - } - -cleanup: - if (lpszName != szNameBuf) - HeapFree(GetProcessHeap(), 0, lpszName); - if(lpszSubKey) - RegCloseKey(hSubKey); - return ret; -} - -static UINT do_query(MSIHANDLE hdb, const char *query, MSIHANDLE *phrec) -{ - MSIHANDLE hview = 0; - UINT r, ret; - - /* open a select query */ - r = MsiDatabaseOpenView(hdb, query, &hview); - if (r != ERROR_SUCCESS) - return r; - r = MsiViewExecute(hview, 0); - if (r != ERROR_SUCCESS) - return r; - ret = MsiViewFetch(hview, phrec); - r = MsiViewClose(hview); - if (r != ERROR_SUCCESS) - return r; - r = MsiCloseHandle(hview); - if (r != ERROR_SUCCESS) - return r; - return ret; -} - -static UINT run_query( MSIHANDLE hdb, const char *query ) -{ - MSIHANDLE hview = 0; - UINT r; - - r = MsiDatabaseOpenView(hdb, query, &hview); - if( r != ERROR_SUCCESS ) - return r; - - r = MsiViewExecute(hview, 0); - if( r == ERROR_SUCCESS ) - r = MsiViewClose(hview); - MsiCloseHandle(hview); - return r; -} - -static UINT create_component_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `Component` ( " - "`Component` CHAR(72) NOT NULL, " - "`ComponentId` CHAR(38), " - "`Directory_` CHAR(72) NOT NULL, " - "`Attributes` SHORT NOT NULL, " - "`Condition` CHAR(255), " - "`KeyPath` CHAR(72) " - "PRIMARY KEY `Component`)" ); -} - -static UINT create_feature_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `Feature` ( " - "`Feature` CHAR(38) NOT NULL, " - "`Feature_Parent` CHAR(38), " - "`Title` CHAR(64), " - "`Description` CHAR(255), " - "`Display` SHORT NOT NULL, " - "`Level` SHORT NOT NULL, " - "`Directory_` CHAR(72), " - "`Attributes` SHORT NOT NULL " - "PRIMARY KEY `Feature`)" ); -} - -static UINT create_feature_components_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `FeatureComponents` ( " - "`Feature_` CHAR(38) NOT NULL, " - "`Component_` CHAR(72) NOT NULL " - "PRIMARY KEY `Feature_`, `Component_` )" ); -} - -static UINT create_file_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `File` (" - "`File` CHAR(72) NOT NULL, " - "`Component_` CHAR(72) NOT NULL, " - "`FileName` CHAR(255) NOT NULL, " - "`FileSize` LONG NOT NULL, " - "`Version` CHAR(72), " - "`Language` CHAR(20), " - "`Attributes` SHORT, " - "`Sequence` SHORT NOT NULL " - "PRIMARY KEY `File`)" ); -} - -static UINT create_remove_file_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `RemoveFile` (" - "`FileKey` CHAR(72) NOT NULL, " - "`Component_` CHAR(72) NOT NULL, " - "`FileName` CHAR(255) LOCALIZABLE, " - "`DirProperty` CHAR(72) NOT NULL, " - "`InstallMode` SHORT NOT NULL " - "PRIMARY KEY `FileKey`)" ); -} - -static UINT create_appsearch_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `AppSearch` (" - "`Property` CHAR(72) NOT NULL, " - "`Signature_` CHAR(72) NOT NULL " - "PRIMARY KEY `Property`, `Signature_`)" ); -} - -static UINT create_reglocator_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `RegLocator` (" - "`Signature_` CHAR(72) NOT NULL, " - "`Root` SHORT NOT NULL, " - "`Key` CHAR(255) NOT NULL, " - "`Name` CHAR(255), " - "`Type` SHORT " - "PRIMARY KEY `Signature_`)" ); -} - -static UINT create_signature_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `Signature` (" - "`Signature` CHAR(72) NOT NULL, " - "`FileName` CHAR(255) NOT NULL, " - "`MinVersion` CHAR(20), " - "`MaxVersion` CHAR(20), " - "`MinSize` LONG, " - "`MaxSize` LONG, " - "`MinDate` LONG, " - "`MaxDate` LONG, " - "`Languages` CHAR(255) " - "PRIMARY KEY `Signature`)" ); -} - -static UINT create_launchcondition_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `LaunchCondition` (" - "`Condition` CHAR(255) NOT NULL, " - "`Description` CHAR(255) NOT NULL " - "PRIMARY KEY `Condition`)" ); -} - -static UINT create_property_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `Property` (" - "`Property` CHAR(72) NOT NULL, " - "`Value` CHAR(0) " - "PRIMARY KEY `Property`)" ); -} - -static UINT create_install_execute_sequence_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `InstallExecuteSequence` (" - "`Action` CHAR(72) NOT NULL, " - "`Condition` CHAR(255), " - "`Sequence` SHORT " - "PRIMARY KEY `Action`)" ); -} - -static UINT create_media_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `Media` (" - "`DiskId` SHORT NOT NULL, " - "`LastSequence` SHORT NOT NULL, " - "`DiskPrompt` CHAR(64), " - "`Cabinet` CHAR(255), " - "`VolumeLabel` CHAR(32), " - "`Source` CHAR(72) " - "PRIMARY KEY `DiskId`)" ); -} - -static UINT create_ccpsearch_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `CCPSearch` (" - "`Signature_` CHAR(72) NOT NULL " - "PRIMARY KEY `Signature_`)" ); -} - -static UINT create_drlocator_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `DrLocator` (" - "`Signature_` CHAR(72) NOT NULL, " - "`Parent` CHAR(72), " - "`Path` CHAR(255), " - "`Depth` SHORT " - "PRIMARY KEY `Signature_`, `Parent`, `Path`)" ); -} - -static UINT create_complocator_table( MSIHANDLE hdb ) -{ - return run_query( hdb, - "CREATE TABLE `CompLocator` (" - "`Signature_` CHAR(72) NOT NULL, " - "`ComponentId` CHAR(38) NOT NULL, " - "`Type` SHORT " - "PRIMARY KEY `Signature_`)" ); -} - -static UINT add_component_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Component` " - "(`Component`, `ComponentId`, `Directory_`, `Attributes`, `Condition`, `KeyPath`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_feature_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Feature` (`Feature`, `Feature_Parent`, " - "`Title`, `Description`, `Display`, `Level`, `Directory_`, `Attributes`) VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_feature_components_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `FeatureComponents` " - "(`Feature_`, `Component_`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_file_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `File` " - "(`File`, `Component_`, `FileName`, `FileSize`, `Version`, `Language`, `Attributes`, `Sequence`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_appsearch_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `AppSearch` " - "(`Property`, `Signature_`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_reglocator_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `RegLocator` " - "(`Signature_`, `Root`, `Key`, `Name`, `Type`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_signature_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Signature` " - "(`Signature`, `FileName`, `MinVersion`, `MaxVersion`," - " `MinSize`, `MaxSize`, `MinDate`, `MaxDate`, `Languages`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_launchcondition_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `LaunchCondition` " - "(`Condition`, `Description`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_property_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Property` " - "(`Property`, `Value`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_install_execute_sequence_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `InstallExecuteSequence` " - "(`Action`, `Condition`, `Sequence`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_media_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Media` " - "(`DiskId`, `LastSequence`, `DiskPrompt`, `Cabinet`, `VolumeLabel`, `Source`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_ccpsearch_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `CCPSearch` (`Signature_`) VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_drlocator_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `DrLocator` " - "(`Signature_`, `Parent`, `Path`, `Depth`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT add_complocator_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `CompLocator` " - "(`Signature_`, `ComponentId`, `Type`) " - "VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static UINT set_summary_info(MSIHANDLE hdb) -{ - UINT res; - MSIHANDLE suminfo; - - /* build summary info */ - res = MsiGetSummaryInformation(hdb, NULL, 7, &suminfo); - ok( res == ERROR_SUCCESS , "Failed to open summaryinfo\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,2, VT_LPSTR, 0,NULL, - "Installation Database"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,3, VT_LPSTR, 0,NULL, - "Installation Database"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,4, VT_LPSTR, 0,NULL, - "Wine Hackers"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,7, VT_LPSTR, 0,NULL, - ";1033"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo,9, VT_LPSTR, 0,NULL, - "{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}"); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo, 14, VT_I4, 100, NULL, NULL); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoSetProperty(suminfo, 15, VT_I4, 0, NULL, NULL); - ok( res == ERROR_SUCCESS , "Failed to set summary info\n" ); - - res = MsiSummaryInfoPersist(suminfo); - ok( res == ERROR_SUCCESS , "Failed to make summary info persist\n" ); - - res = MsiCloseHandle( suminfo); - ok( res == ERROR_SUCCESS , "Failed to close suminfo\n" ); - - return res; -} - - -static MSIHANDLE create_package_db(void) -{ - MSIHANDLE hdb = 0; - UINT res; - - DeleteFile(msifile); - - /* create an empty database */ - res = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb ); - ok( res == ERROR_SUCCESS , "Failed to create database\n" ); - if( res != ERROR_SUCCESS ) - return hdb; - - res = MsiDatabaseCommit( hdb ); - ok( res == ERROR_SUCCESS , "Failed to commit database\n" ); - - res = set_summary_info(hdb); - - res = run_query( hdb, - "CREATE TABLE `Directory` ( " - "`Directory` CHAR(255) NOT NULL, " - "`Directory_Parent` CHAR(255), " - "`DefaultDir` CHAR(255) NOT NULL " - "PRIMARY KEY `Directory`)" ); - ok( res == ERROR_SUCCESS , "Failed to create directory table\n" ); - - return hdb; -} - -static MSIHANDLE package_from_db(MSIHANDLE hdb) -{ - UINT res; - CHAR szPackage[10]; - MSIHANDLE hPackage; - - sprintf(szPackage,"#%li",hdb); - res = MsiOpenPackage(szPackage,&hPackage); - if (res != ERROR_SUCCESS) - return 0; - - res = MsiCloseHandle(hdb); - if (res != ERROR_SUCCESS) - return 0; - - return hPackage; -} - -static void create_test_file(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); -} - -static void test_createpackage(void) -{ - MSIHANDLE hPackage = 0; - UINT res; - - hPackage = package_from_db(create_package_db()); - ok( hPackage != 0, " Failed to create package\n"); - - res = MsiCloseHandle( hPackage); - ok( res == ERROR_SUCCESS , "Failed to close package\n" ); - DeleteFile(msifile); -} - -static void test_getsourcepath_bad( void ) -{ - static const char str[] = { 0 }; - char buffer[0x80]; - DWORD sz; - UINT r; - - r = MsiGetSourcePath( -1, NULL, NULL, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "return value wrong\n"); - - sz = 0; - r = MsiGetSourcePath( -1, NULL, buffer, &sz ); - ok( r == ERROR_INVALID_PARAMETER, "return value wrong\n"); - - sz = 0; - r = MsiGetSourcePath( -1, str, NULL, &sz ); - ok( r == ERROR_INVALID_HANDLE, "return value wrong\n"); - - sz = 0; - r = MsiGetSourcePath( -1, str, NULL, NULL ); - ok( r == ERROR_INVALID_HANDLE, "return value wrong\n"); - - sz = 0; - r = MsiGetSourcePath( -1, str, buffer, &sz ); - ok( r == ERROR_INVALID_HANDLE, "return value wrong\n"); -} - -static UINT add_directory_entry( MSIHANDLE hdb, const char *values ) -{ - char insert[] = "INSERT INTO `Directory` (`Directory`,`Directory_Parent`,`DefaultDir`) VALUES( %s )"; - char *query; - UINT sz, r; - - sz = strlen(values) + sizeof insert; - query = HeapAlloc(GetProcessHeap(),0,sz); - sprintf(query,insert,values); - r = run_query( hdb, query ); - HeapFree(GetProcessHeap(), 0, query); - return r; -} - -static void test_getsourcepath( void ) -{ - static const char str[] = { 0 }; - char buffer[0x80]; - DWORD sz; - UINT r; - MSIHANDLE hpkg, hdb; - - hpkg = package_from_db(create_package_db()); - ok( hpkg, "failed to create package\n"); - - sz = 0; - buffer[0] = 'x'; - r = MsiGetSourcePath( hpkg, str, buffer, &sz ); - ok( r == ERROR_DIRECTORY, "return value wrong\n"); - ok( buffer[0] == 'x', "buffer modified\n"); - - sz = 1; - buffer[0] = 'x'; - r = MsiGetSourcePath( hpkg, str, buffer, &sz ); - ok( r == ERROR_DIRECTORY, "return value wrong\n"); - ok( buffer[0] == 'x', "buffer modified\n"); - - MsiCloseHandle( hpkg ); - - - /* another test but try create a directory this time */ - hdb = create_package_db(); - ok( hdb, "failed to create database\n"); - - r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'"); - ok( r == S_OK, "failed\n"); - - hpkg = package_from_db(hdb); - ok( hpkg, "failed to create package\n"); - - sz = sizeof buffer -1; - strcpy(buffer,"x bad"); - r = MsiGetSourcePath( hpkg, "TARGETDIR", buffer, &sz ); - ok( r == ERROR_DIRECTORY, "return value wrong\n"); - - r = MsiDoAction( hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "cost init failed\n"); - r = MsiDoAction( hpkg, "CostFinalize"); - ok( r == ERROR_SUCCESS, "cost finalize failed\n"); - - sz = sizeof buffer -1; - buffer[0] = 'x'; - r = MsiGetSourcePath( hpkg, "TARGETDIR", buffer, &sz ); - ok( r == ERROR_SUCCESS, "return value wrong\n"); - ok( sz == strlen(buffer), "returned length wrong\n"); - - sz = 0; - strcpy(buffer,"x bad"); - r = MsiGetSourcePath( hpkg, "TARGETDIR", buffer, &sz ); - ok( r == ERROR_MORE_DATA, "return value wrong\n"); - ok( buffer[0] == 'x', "buffer modified\n"); - - r = MsiGetSourcePath( hpkg, "TARGETDIR", NULL, NULL ); - ok( r == ERROR_SUCCESS, "return value wrong\n"); - - r = MsiGetSourcePath( hpkg, "TARGETDIR ", NULL, NULL ); - ok( r == ERROR_DIRECTORY, "return value wrong\n"); - - r = MsiGetSourcePath( hpkg, "targetdir", NULL, NULL ); - ok( r == ERROR_DIRECTORY, "return value wrong\n"); - - r = MsiGetSourcePath( hpkg, "TARGETDIR", buffer, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "return value wrong\n"); - - r = MsiGetSourcePath( hpkg, "TARGETDIR", NULL, &sz ); - ok( r == ERROR_SUCCESS, "return value wrong\n"); - - MsiCloseHandle( hpkg ); - DeleteFile(msifile); -} - -static void test_doaction( void ) -{ - MSIHANDLE hpkg; - UINT r; - - r = MsiDoAction( -1, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - hpkg = package_from_db(create_package_db()); - ok( hpkg, "failed to create package\n"); - - r = MsiDoAction(hpkg, NULL); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - r = MsiDoAction(0, "boo"); - ok( r == ERROR_INVALID_HANDLE, "wrong return val\n"); - - r = MsiDoAction(hpkg, "boo"); - ok( r == ERROR_FUNCTION_NOT_CALLED, "wrong return val\n"); - - MsiCloseHandle( hpkg ); - DeleteFile(msifile); -} - -static void test_gettargetpath_bad(void) -{ - char buffer[0x80]; - MSIHANDLE hpkg; - DWORD sz; - UINT r; - - hpkg = package_from_db(create_package_db()); - ok( hpkg, "failed to create package\n"); - - r = MsiGetTargetPath( 0, NULL, NULL, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - r = MsiGetTargetPath( 0, NULL, NULL, &sz ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - r = MsiGetTargetPath( 0, "boo", NULL, NULL ); - ok( r == ERROR_INVALID_HANDLE, "wrong return val\n"); - - r = MsiGetTargetPath( 0, "boo", NULL, NULL ); - ok( r == ERROR_INVALID_HANDLE, "wrong return val\n"); - - r = MsiGetTargetPath( hpkg, "boo", NULL, NULL ); - ok( r == ERROR_DIRECTORY, "wrong return val\n"); - - r = MsiGetTargetPath( hpkg, "boo", buffer, NULL ); - ok( r == ERROR_DIRECTORY, "wrong return val\n"); - - MsiCloseHandle( hpkg ); - DeleteFile(msifile); -} - -static void query_file_path(MSIHANDLE hpkg, LPCSTR file, LPSTR buff) -{ - UINT r; - DWORD size; - MSIHANDLE rec; - - rec = MsiCreateRecord( 1 ); - ok(rec, "MsiCreate record failed\n"); - - r = MsiRecordSetString( rec, 0, file ); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r ); - - size = MAX_PATH; - r = MsiFormatRecord( hpkg, rec, buff, &size ); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r ); - - MsiCloseHandle( rec ); -} - -static void test_settargetpath(void) -{ - char tempdir[MAX_PATH+8], buffer[MAX_PATH], file[MAX_PATH]; - DWORD sz; - MSIHANDLE hpkg; - UINT r; - MSIHANDLE hdb; - - hdb = create_package_db(); - ok ( hdb, "failed to create package database\n" ); - - r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'" ); - ok( r == S_OK, "failed to add directory entry: %d\n" , r ); - - r = create_component_table( hdb ); - ok( r == S_OK, "cannot create Component table: %d\n", r ); - - r = add_component_entry( hdb, "'RootComp', '{83e2694d-0864-4124-9323-6d37630912a1}', 'TARGETDIR', 8, '', 'RootFile'" ); - ok( r == S_OK, "cannot add dummy component: %d\n", r ); - - r = add_component_entry( hdb, "'TestComp', '{A3FB59C8-C293-4F7E-B8C5-F0E1D8EEE4E5}', 'TestDir', 0, '', 'TestFile'" ); - ok( r == S_OK, "cannot add test component: %d\n", r ); - - r = create_feature_table( hdb ); - ok( r == S_OK, "cannot create Feature table: %d\n", r ); - - r = add_feature_entry( hdb, "'TestFeature', '', '', '', 0, 1, '', 0" ); - ok( r == ERROR_SUCCESS, "cannot add TestFeature to Feature table: %d\n", r ); - - r = create_feature_components_table( hdb ); - ok( r == S_OK, "cannot create FeatureComponents table: %d\n", r ); - - r = add_feature_components_entry( hdb, "'TestFeature', 'RootComp'" ); - ok( r == S_OK, "cannot insert component into FeatureComponents table: %d\n", r ); - - r = add_feature_components_entry( hdb, "'TestFeature', 'TestComp'" ); - ok( r == S_OK, "cannot insert component into FeatureComponents table: %d\n", r ); - - add_directory_entry( hdb, "'TestParent', 'TARGETDIR', 'TestParent'" ); - add_directory_entry( hdb, "'TestDir', 'TestParent', 'TestDir'" ); - - r = create_file_table( hdb ); - ok( r == S_OK, "cannot create File table: %d\n", r ); - - r = add_file_entry( hdb, "'RootFile', 'RootComp', 'rootfile.txt', 0, '', '1033', 8192, 1" ); - ok( r == S_OK, "cannot add file to the File table: %d\n", r ); - - r = add_file_entry( hdb, "'TestFile', 'TestComp', 'testfile.txt', 0, '', '1033', 8192, 1" ); - ok( r == S_OK, "cannot add file to the File table: %d\n", r ); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - r = MsiDoAction( hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "cost init failed\n"); - - r = MsiDoAction( hpkg, "FileCost"); - ok( r == ERROR_SUCCESS, "file cost failed\n"); - - r = MsiDoAction( hpkg, "CostFinalize"); - ok( r == ERROR_SUCCESS, "cost finalize failed\n"); - - r = MsiSetTargetPath( 0, NULL, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - r = MsiSetTargetPath( 0, "boo", "C:\\bogusx" ); - ok( r == ERROR_INVALID_HANDLE, "wrong return val\n"); - - r = MsiSetTargetPath( hpkg, "boo", NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - r = MsiSetTargetPath( hpkg, "boo", "c:\\bogusx" ); - ok( r == ERROR_DIRECTORY, "wrong return val\n"); - - sz = sizeof tempdir - 1; - r = MsiGetTargetPath( hpkg, "TARGETDIR", tempdir, &sz ); - sprintf( file, "%srootfile.txt", tempdir ); - query_file_path( hpkg, "[#RootFile]", buffer ); - ok( r == ERROR_SUCCESS, "failed to get target path: %d\n", r); - ok( !lstrcmp(buffer, file), "Expected %s, got %s\n", file, buffer ); - - GetTempFileName( tempdir, "_wt", 0, buffer ); - sprintf( tempdir, "%s\\subdir", buffer ); - - r = MsiSetTargetPath( hpkg, "TARGETDIR", buffer ); - ok( r == ERROR_SUCCESS || r == ERROR_DIRECTORY, - "MsiSetTargetPath on file returned %d\n", r ); - - r = MsiSetTargetPath( hpkg, "TARGETDIR", tempdir ); - ok( r == ERROR_SUCCESS || r == ERROR_DIRECTORY, - "MsiSetTargetPath on 'subdir' of file returned %d\n", r ); - - DeleteFile( buffer ); - - r = MsiSetTargetPath( hpkg, "TARGETDIR", buffer ); - ok( r == ERROR_SUCCESS, "MsiSetTargetPath returned %d\n", r ); - - r = GetFileAttributes( buffer ); - ok ( r == INVALID_FILE_ATTRIBUTES, "file/directory exists after MsiSetTargetPath. Attributes: %08X\n", r ); - - r = MsiSetTargetPath( hpkg, "TARGETDIR", tempdir ); - ok( r == ERROR_SUCCESS, "MsiSetTargetPath on subsubdir returned %d\n", r ); - - sz = sizeof buffer - 1; - lstrcat( tempdir, "\\" ); - r = MsiGetTargetPath( hpkg, "TARGETDIR", buffer, &sz ); - ok( r == ERROR_SUCCESS, "failed to get target path: %d\n", r); - ok( !lstrcmp(buffer, tempdir), "Expected %s, got %s\n", tempdir, buffer); - - sprintf( file, "%srootfile.txt", tempdir ); - query_file_path( hpkg, "[#RootFile]", buffer ); - ok( !lstrcmp(buffer, file), "Expected %s, got %s\n", file, buffer); - - r = MsiSetTargetPath( hpkg, "TestParent", "C:\\one\\two" ); - ok( r == ERROR_SUCCESS, "MsiSetTargetPath returned %d\n", r ); - - query_file_path( hpkg, "[#TestFile]", buffer ); - ok( !lstrcmp(buffer, "C:\\one\\two\\TestDir\\testfile.txt"), - "Expected C:\\one\\two\\TestDir\\testfile.txt, got %s\n", buffer ); - - sz = sizeof buffer - 1; - r = MsiGetTargetPath( hpkg, "TestParent", buffer, &sz ); - ok( r == ERROR_SUCCESS, "failed to get target path: %d\n", r); - ok( !lstrcmp(buffer, "C:\\one\\two\\"), "Expected C:\\one\\two\\, got %s\n", buffer); - - MsiCloseHandle( hpkg ); -} - -static void test_condition(void) -{ - MSICONDITION r; - MSIHANDLE hpkg; - - hpkg = package_from_db(create_package_db()); - ok( hpkg, "failed to create package\n"); - - r = MsiEvaluateCondition(0, NULL); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, NULL); - ok( r == MSICONDITION_NONE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, ""); - ok( r == MSICONDITION_NONE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "-1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 = 0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 <> 0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 = 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 > 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 ~> 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 > 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 ~> 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 >= 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 ~>= 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 >= 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 ~>= 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 < 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 ~< 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 < 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 ~< 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 <= 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 ~<= 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 <= 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 ~<= 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 >="); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " "); - ok( r == MSICONDITION_NONE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "LicView <> \"1\""); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "LicView <> \"0\""); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "LicView <> LicView"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "not 0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "not LicView"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "not \"A\""); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "~not \"A\""); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "\"0\""); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 and 2"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "not 0 and 3"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "not 0 and 0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "not 0 or 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "(0)"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "(((((1))))))"); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "(((((1)))))"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"A\" < \"B\" "); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"A\" > \"B\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"1\" > \"12\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"100\" < \"21\" "); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 < > 0"); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "(1<<1) == 2"); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"A\" = \"a\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"A\" ~ = \"a\" "); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"A\" ~= \"a\" "); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"A\" ~= 1 "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " \"A\" = 1 "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " 1 ~= 1 "); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " 1 ~= \"1\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " 1 = \"1\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " 0 = \"1\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " 0 < \"100\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, " 100 > \"0\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 XOR 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 IMP 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 IMP 0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 IMP 0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 EQV 0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 EQV 1"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 IMP 1 OR 0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 IMPL 1"); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "\"ASFD\" >< \"S\" "); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "\"ASFD\" ~>< \"s\" "); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "\"ASFD\" ~>< \"\" "); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "\"ASFD\" ~>< \"sss\" "); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "mm", "5" ); - - r = MsiEvaluateCondition(hpkg, "mm = 5"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "mm < 6"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "mm <= 5"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "mm > 4"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "mm < 12"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "mm = \"5\""); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 = \"\""); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 AND \"\""); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 AND \"\""); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "1 AND \"1\""); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "3 >< 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "3 >< 4"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "NOT 0 AND 0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "NOT 0 AND 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "NOT 1 OR 0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 AND 1 OR 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "0 AND 0 OR 1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "NOT 0 AND 1 OR 0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "_1 = _1"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "( 1 AND 1 ) = 2"); - ok( r == MSICONDITION_ERROR, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "NOT ( 1 AND 1 )"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "NOT A AND (BBBBBBBBBB=2 OR CCC=1) AND Ddddddddd"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "Installed<>\"\""); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "NOT 1 AND 0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "bandalmael<>0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "bandalmael<0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "bandalmael>0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "bandalmael>=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "bandalmael<=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - r = MsiEvaluateCondition(hpkg, "bandalmael~<>0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "0" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "asdf" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "0asdf" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "0 " ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "-0" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "0000000000000" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "--0" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "0x00" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "-" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "+0" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "bandalmael", "0.0" ); - r = MsiEvaluateCondition(hpkg, "bandalmael=0"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - r = MsiEvaluateCondition(hpkg, "bandalmael<>0"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hi"); - MsiSetProperty(hpkg, "two", "hithere"); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hithere"); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hello"); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hellohithere"); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", ""); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hi"); - MsiSetProperty(hpkg, "two", ""); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", ""); - MsiSetProperty(hpkg, "two", ""); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "1234"); - MsiSetProperty(hpkg, "two", "1"); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "one 1234"); - MsiSetProperty(hpkg, "two", "1"); - r = MsiEvaluateCondition(hpkg, "one >< two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hithere"); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hi"); - MsiSetProperty(hpkg, "two", "hithere"); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hi"); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "abcdhithere"); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", ""); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hithere"); - MsiSetProperty(hpkg, "two", ""); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", ""); - MsiSetProperty(hpkg, "two", ""); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "1234"); - MsiSetProperty(hpkg, "two", "1"); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "1234 one"); - MsiSetProperty(hpkg, "two", "1"); - r = MsiEvaluateCondition(hpkg, "one << two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hithere"); - MsiSetProperty(hpkg, "two", "there"); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "hithere"); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "there"); - MsiSetProperty(hpkg, "two", "hithere"); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "there"); - MsiSetProperty(hpkg, "two", "there"); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "abcdhithere"); - MsiSetProperty(hpkg, "two", "hi"); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", ""); - MsiSetProperty(hpkg, "two", "there"); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "there"); - MsiSetProperty(hpkg, "two", ""); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", ""); - MsiSetProperty(hpkg, "two", ""); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "1234"); - MsiSetProperty(hpkg, "two", "4"); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "one", "one 1234"); - MsiSetProperty(hpkg, "two", "4"); - r = MsiEvaluateCondition(hpkg, "one >> two"); - ok( r == MSICONDITION_TRUE, "wrong return val\n"); - - MsiSetProperty(hpkg, "MsiNetAssemblySupport", NULL); /* make sure it's empty */ - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1.4322\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport > \"1.1.4322\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport >= \"1.1.4322\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport <= \"1.1.4322\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport <> \"1.1.4322\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport ~< \"1.1.4322\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"abcd\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"a1.1.4322\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1.4322a\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"0000001.1.4322\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1.4322.1\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1.4322.1.1\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "\"2\" < \"1.1"); - ok( r == MSICONDITION_ERROR, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "\"2\" < \"1.1\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "\"2\" < \"12.1\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "\"02.1\" < \"2.11\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "\"02.1.1\" < \"2.1\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"0\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"-1\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"a\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"!\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"!\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"/\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \" \""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"azAZ_\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"a[a]\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"a[a]a\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"[a]\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"[a]a\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"{a}\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"{a\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"[a\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"a{\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"a]\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"A\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - MsiSetProperty(hpkg, "MsiNetAssemblySupport", "1.1.4322"); - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1.4322\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1.14322\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1.5\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1.1\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "MsiNetAssemblySupport < \"1\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - MsiSetProperty(hpkg, "one", "1"); - r = MsiEvaluateCondition(hpkg, "one < \"1\""); - ok( r == MSICONDITION_FALSE, "wrong return val\n"); - - MsiSetProperty(hpkg, "X", "5.0"); - - r = MsiEvaluateCondition(hpkg, "X != \"\""); - ok( r == MSICONDITION_ERROR, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "X =\"5.0\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "X =\"5.1\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "X =\"6.0\""); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "X =\"5.0\" or X =\"5.1\" or X =\"6.0\""); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "(X =\"5.0\" or X =\"5.1\" or X =\"6.0\")"); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "X !=\"\" and (X =\"5.0\" or X =\"5.1\" or X =\"6.0\")"); - ok( r == MSICONDITION_ERROR, "wrong return val (%d)\n", r); - - /* feature doesn't exist */ - r = MsiEvaluateCondition(hpkg, "&nofeature"); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - MsiSetProperty(hpkg, "A", "2"); - MsiSetProperty(hpkg, "X", "50"); - - r = MsiEvaluateCondition(hpkg, "2 <= X"); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "A <= X"); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "A <= 50"); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - MsiSetProperty(hpkg, "X", "50val"); - - r = MsiEvaluateCondition(hpkg, "2 <= X"); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "A <= X"); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - MsiSetProperty(hpkg, "A", "7"); - MsiSetProperty(hpkg, "X", "50"); - - r = MsiEvaluateCondition(hpkg, "7 <= X"); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "A <= X"); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "A <= 50"); - ok( r == MSICONDITION_TRUE, "wrong return val (%d)\n", r); - - MsiSetProperty(hpkg, "X", "50val"); - - r = MsiEvaluateCondition(hpkg, "2 <= X"); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - r = MsiEvaluateCondition(hpkg, "A <= X"); - ok( r == MSICONDITION_FALSE, "wrong return val (%d)\n", r); - - MsiCloseHandle( hpkg ); - DeleteFile(msifile); -} - -static BOOL check_prop_empty( MSIHANDLE hpkg, const char * prop) -{ - UINT r; - DWORD sz; - char buffer[2]; - - sz = sizeof buffer; - strcpy(buffer,"x"); - r = MsiGetProperty( hpkg, prop, buffer, &sz ); - return r == ERROR_SUCCESS && buffer[0] == 0 && sz == 0; -} - -static void test_props(void) -{ - MSIHANDLE hpkg, hdb; - UINT r; - DWORD sz; - char buffer[0x100]; - - hdb = create_package_db(); - r = run_query( hdb, - "CREATE TABLE `Property` ( " - "`Property` CHAR(255) NOT NULL, " - "`Value` CHAR(255) " - "PRIMARY KEY `Property`)" ); - ok( r == ERROR_SUCCESS , "Failed\n" ); - - r = run_query(hdb, - "INSERT INTO `Property` " - "(`Property`, `Value`) " - "VALUES( 'MetadataCompName', 'Photoshop.dll' )"); - ok( r == ERROR_SUCCESS , "Failed\n" ); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - /* test invalid values */ - r = MsiGetProperty( 0, NULL, NULL, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - r = MsiGetProperty( hpkg, NULL, NULL, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - r = MsiGetProperty( hpkg, "boo", NULL, NULL ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - - r = MsiGetProperty( hpkg, "boo", buffer, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - /* test retrieving an empty/nonexistent property */ - sz = sizeof buffer; - r = MsiGetProperty( hpkg, "boo", NULL, &sz ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( sz == 0, "wrong size returned\n"); - - check_prop_empty( hpkg, "boo"); - sz = 0; - strcpy(buffer,"x"); - r = MsiGetProperty( hpkg, "boo", buffer, &sz ); - ok( r == ERROR_MORE_DATA, "wrong return val\n"); - ok( !strcmp(buffer,"x"), "buffer was changed\n"); - ok( sz == 0, "wrong size returned\n"); - - sz = 1; - strcpy(buffer,"x"); - r = MsiGetProperty( hpkg, "boo", buffer, &sz ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( buffer[0] == 0, "buffer was not changed\n"); - ok( sz == 0, "wrong size returned\n"); - - /* set the property to something */ - r = MsiSetProperty( 0, NULL, NULL ); - ok( r == ERROR_INVALID_HANDLE, "wrong return val\n"); - - r = MsiSetProperty( hpkg, NULL, NULL ); - ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); - - r = MsiSetProperty( hpkg, "", NULL ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - - /* try set and get some illegal property identifiers */ - r = MsiSetProperty( hpkg, "", "asdf" ); - ok( r == ERROR_FUNCTION_FAILED, "wrong return val\n"); - - r = MsiSetProperty( hpkg, "=", "asdf" ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - - r = MsiSetProperty( hpkg, " ", "asdf" ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - - r = MsiSetProperty( hpkg, "'", "asdf" ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - - sz = sizeof buffer; - buffer[0]=0; - r = MsiGetProperty( hpkg, "'", buffer, &sz ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( !strcmp(buffer,"asdf"), "buffer was not changed\n"); - - /* set empty values */ - r = MsiSetProperty( hpkg, "boo", NULL ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( check_prop_empty( hpkg, "boo"), "prop wasn't empty\n"); - - r = MsiSetProperty( hpkg, "boo", "" ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( check_prop_empty( hpkg, "boo"), "prop wasn't empty\n"); - - /* set a non-empty value */ - r = MsiSetProperty( hpkg, "boo", "xyz" ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - - sz = 1; - strcpy(buffer,"x"); - r = MsiGetProperty( hpkg, "boo", buffer, &sz ); - ok( r == ERROR_MORE_DATA, "wrong return val\n"); - ok( buffer[0] == 0, "buffer was not changed\n"); - ok( sz == 3, "wrong size returned\n"); - - sz = 4; - strcpy(buffer,"x"); - r = MsiGetProperty( hpkg, "boo", buffer, &sz ); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( !strcmp(buffer,"xyz"), "buffer was not changed\n"); - ok( sz == 3, "wrong size returned\n"); - - sz = 3; - strcpy(buffer,"x"); - r = MsiGetProperty( hpkg, "boo", buffer, &sz ); - ok( r == ERROR_MORE_DATA, "wrong return val\n"); - ok( !strcmp(buffer,"xy"), "buffer was not changed\n"); - ok( sz == 3, "wrong size returned\n"); - - r = MsiSetProperty(hpkg, "SourceDir", "foo"); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - - sz = 4; - r = MsiGetProperty(hpkg, "SOURCEDIR", buffer, &sz); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( !strcmp(buffer,""), "buffer wrong\n"); - ok( sz == 0, "wrong size returned\n"); - - sz = 4; - r = MsiGetProperty(hpkg, "SOMERANDOMNAME", buffer, &sz); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( !strcmp(buffer,""), "buffer wrong\n"); - ok( sz == 0, "wrong size returned\n"); - - sz = 4; - r = MsiGetProperty(hpkg, "SourceDir", buffer, &sz); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - ok( !strcmp(buffer,"foo"), "buffer wrong\n"); - ok( sz == 3, "wrong size returned\n"); - - r = MsiSetProperty(hpkg, "MetadataCompName", "Photoshop.dll"); - ok( r == ERROR_SUCCESS, "wrong return val\n"); - - sz = 0; - r = MsiGetProperty(hpkg, "MetadataCompName", NULL, &sz ); - ok( r == ERROR_SUCCESS, "return wrong\n"); - ok( sz == 13, "size wrong (%d)\n", sz); - - sz = 13; - r = MsiGetProperty(hpkg, "MetadataCompName", buffer, &sz ); - ok( r == ERROR_MORE_DATA, "return wrong\n"); - ok( !strcmp(buffer,"Photoshop.dl"), "buffer wrong\n"); - - r = MsiSetProperty(hpkg, "property", "value"); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - sz = 6; - r = MsiGetProperty(hpkg, "property", buffer, &sz); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok( !strcmp(buffer, "value"), "Expected value, got %s\n", buffer); - - r = MsiSetProperty(hpkg, "property", NULL); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - sz = 6; - r = MsiGetProperty(hpkg, "property", buffer, &sz); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok( !strlen(buffer), "Expected empty string, got %s\n", buffer); - - MsiCloseHandle( hpkg ); - DeleteFile(msifile); -} - -static BOOL find_prop_in_property(MSIHANDLE hdb, LPCSTR prop, LPCSTR val) -{ - MSIHANDLE hview, hrec; - BOOL found; - CHAR buffer[MAX_PATH]; - DWORD sz; - UINT r; - - r = MsiDatabaseOpenView(hdb, "SELECT * FROM `_Property`", &hview); - ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); - r = MsiViewExecute(hview, 0); - ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); - - found = FALSE; - while (r == ERROR_SUCCESS && !found) - { - r = MsiViewFetch(hview, &hrec); - if (r != ERROR_SUCCESS) break; - - sz = MAX_PATH; - r = MsiRecordGetString(hrec, 1, buffer, &sz); - if (r == ERROR_SUCCESS && !lstrcmpA(buffer, prop)) - { - sz = MAX_PATH; - r = MsiRecordGetString(hrec, 2, buffer, &sz); - if (r == ERROR_SUCCESS && !lstrcmpA(buffer, val)) - found = TRUE; - } - - MsiCloseHandle(hrec); - } - - MsiViewClose(hview); - MsiCloseHandle(hview); - - return found; -} - -static void test_property_table(void) -{ - const char *query; - UINT r; - MSIHANDLE hpkg, hdb, hrec; - char buffer[MAX_PATH]; - DWORD sz; - BOOL found; - - hdb = create_package_db(); - ok( hdb, "failed to create package\n"); - - hpkg = package_from_db(hdb); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle(hdb); - - hdb = MsiGetActiveDatabase(hpkg); - - query = "CREATE TABLE `_Property` ( " - "`foo` INT NOT NULL, `bar` INT LOCALIZABLE PRIMARY KEY `foo`)"; - r = run_query(hdb, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - - MsiCloseHandle(hdb); - MsiCloseHandle(hpkg); - DeleteFile(msifile); - - hdb = create_package_db(); - ok( hdb, "failed to create package\n"); - - query = "CREATE TABLE `_Property` ( " - "`foo` INT NOT NULL, `bar` INT LOCALIZABLE PRIMARY KEY `foo`)"; - r = run_query(hdb, query); - ok(r == ERROR_SUCCESS, "failed to create table\n"); - - query = "ALTER `_Property` ADD `foo` INTEGER"; - r = run_query(hdb, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "failed to add column\n"); - - query = "ALTER TABLE `_Property` ADD `foo` INTEGER"; - r = run_query(hdb, query); - ok(r == ERROR_BAD_QUERY_SYNTAX, "failed to add column\n"); - - query = "ALTER TABLE `_Property` ADD `extra` INTEGER"; - r = run_query(hdb, query); - ok(r == ERROR_SUCCESS, "failed to add column\n"); - - hpkg = package_from_db(hdb); - todo_wine - { - ok(!hpkg, "package should not be created\n"); - } - - MsiCloseHandle(hdb); - MsiCloseHandle(hpkg); - DeleteFile(msifile); - - hdb = create_package_db(); - ok (hdb, "failed to create package database\n"); - - r = create_property_table(hdb); - ok(r == ERROR_SUCCESS, "cannot create Property table: %d\n", r); - - r = add_property_entry(hdb, "'prop', 'val'"); - ok(r == ERROR_SUCCESS, "cannot add property: %d\n", r); - - hpkg = package_from_db(hdb); - ok(hpkg, "failed to create package\n"); - - MsiCloseHandle(hdb); - - sz = MAX_PATH; - r = MsiGetProperty(hpkg, "prop", buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmp(buffer, "val"), "Expected val, got %s\n", buffer); - - hdb = MsiGetActiveDatabase(hpkg); - - found = find_prop_in_property(hdb, "prop", "val"); - ok(found, "prop should be in the _Property table\n"); - - r = add_property_entry(hdb, "'dantes', 'mercedes'"); - ok(r == ERROR_SUCCESS, "cannot add property: %d\n", r); - - query = "SELECT * FROM `_Property` WHERE `Property` = 'dantes'"; - r = do_query(hdb, query, &hrec); - ok(r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r); - - found = find_prop_in_property(hdb, "dantes", "mercedes"); - ok(found == FALSE, "dantes should not be in the _Property table\n"); - - sz = MAX_PATH; - lstrcpy(buffer, "aaa"); - r = MsiGetProperty(hpkg, "dantes", buffer, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(lstrlenA(buffer) == 0, "Expected empty string, got %s\n", buffer); - - r = MsiSetProperty(hpkg, "dantes", "mercedes"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - found = find_prop_in_property(hdb, "dantes", "mercedes"); - ok(found == TRUE, "dantes should be in the _Property table\n"); - - MsiCloseHandle(hdb); - MsiCloseHandle(hpkg); - DeleteFile(msifile); -} - -static UINT try_query_param( MSIHANDLE hdb, LPCSTR szQuery, MSIHANDLE hrec ) -{ - MSIHANDLE htab = 0; - UINT res; - - res = MsiDatabaseOpenView( hdb, szQuery, &htab ); - if( res == ERROR_SUCCESS ) - { - UINT r; - - r = MsiViewExecute( htab, hrec ); - if( r != ERROR_SUCCESS ) - { - res = r; - fprintf(stderr,"MsiViewExecute failed %08x\n", res); - } - - r = MsiViewClose( htab ); - if( r != ERROR_SUCCESS ) - res = r; - - r = MsiCloseHandle( htab ); - if( r != ERROR_SUCCESS ) - res = r; - } - return res; -} - -static UINT try_query( MSIHANDLE hdb, LPCSTR szQuery ) -{ - return try_query_param( hdb, szQuery, 0 ); -} - -static void set_summary_str(MSIHANDLE hdb, DWORD pid, LPCSTR value) -{ - MSIHANDLE summary; - UINT r; - - r = MsiGetSummaryInformationA(hdb, NULL, 1, &summary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiSummaryInfoSetPropertyA(summary, pid, VT_LPSTR, 0, NULL, value); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiSummaryInfoPersist(summary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - MsiCloseHandle(summary); -} - -static void set_summary_dword(MSIHANDLE hdb, DWORD pid, DWORD value) -{ - MSIHANDLE summary; - UINT r; - - r = MsiGetSummaryInformationA(hdb, NULL, 1, &summary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiSummaryInfoSetPropertyA(summary, pid, VT_I4, value, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - r = MsiSummaryInfoPersist(summary); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - - MsiCloseHandle(summary); -} - -static void test_msipackage(void) -{ - MSIHANDLE hdb = 0, hpack = 100; - UINT r; - const char *query; - char name[10]; - - /* NULL szPackagePath */ - r = MsiOpenPackage(NULL, &hpack); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szPackagePath */ - r = MsiOpenPackage("", &hpack); - todo_wine - { - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - } - - if (r == ERROR_SUCCESS) - MsiCloseHandle(hpack); - - /* nonexistent szPackagePath */ - r = MsiOpenPackage("nonexistent", &hpack); - ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", r); - - /* NULL hProduct */ - r = MsiOpenPackage(msifile, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - name[0]='#'; - name[1]=0; - r = MsiOpenPackage(name, &hpack); - ok(r == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got %d\n", r); - - r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* database exists, but is emtpy */ - sprintf(name, "#%ld", hdb); - r = MsiOpenPackage(name, &hpack); - ok(r == ERROR_INSTALL_PACKAGE_INVALID, - "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n", r); - - query = "CREATE TABLE `Property` ( " - "`Property` CHAR(72), `Value` CHAR(0) " - "PRIMARY KEY `Property`)"; - r = try_query(hdb, query); - ok(r == ERROR_SUCCESS, "failed to create Properties table\n"); - - query = "CREATE TABLE `InstallExecuteSequence` (" - "`Action` CHAR(72), `Condition` CHAR(0), `Sequence` INTEGER " - "PRIMARY KEY `Action`)"; - r = try_query(hdb, query); - ok(r == ERROR_SUCCESS, "failed to create InstallExecuteSequence table\n"); - - /* a few key tables exist */ - sprintf(name, "#%ld", hdb); - r = MsiOpenPackage(name, &hpack); - ok(r == ERROR_INSTALL_PACKAGE_INVALID, - "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n", r); - - MsiCloseHandle(hdb); - DeleteFile(msifile); - - /* start with a clean database to show what constitutes a valid package */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - sprintf(name, "#%ld", hdb); - - /* The following summary information props must exist: - * - PID_REVNUMBER - * - PID_PAGECOUNT - */ - - set_summary_dword(hdb, PID_PAGECOUNT, 100); - r = MsiOpenPackage(name, &hpack); - ok(r == ERROR_INSTALL_PACKAGE_INVALID, - "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n", r); - - set_summary_str(hdb, PID_REVNUMBER, "{004757CD-5092-49c2-AD20-28E1CE0DF5F2}"); - r = MsiOpenPackage(name, &hpack); - ok(r == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got %d\n", r); - - MsiCloseHandle(hpack); - MsiCloseHandle(hdb); - DeleteFile(msifile); -} - -static void test_formatrecord2(void) -{ - MSIHANDLE hpkg, hrec ; - char buffer[0x100]; - DWORD sz; - UINT r; - - hpkg = package_from_db(create_package_db()); - ok( hpkg, "failed to create package\n"); - - r = MsiSetProperty(hpkg, "Manufacturer", " " ); - ok( r == ERROR_SUCCESS, "set property failed\n"); - - hrec = MsiCreateRecord(2); - ok(hrec, "create record failed\n"); - - r = MsiRecordSetString( hrec, 0, "[ProgramFilesFolder][Manufacturer]\\asdf"); - ok( r == ERROR_SUCCESS, "format record failed\n"); - - buffer[0] = 0; - sz = sizeof buffer; - r = MsiFormatRecord( hpkg, hrec, buffer, &sz ); - - r = MsiRecordSetString(hrec, 0, "[foo][1]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(hpkg, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"hoo"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "x[~]x"); - sz = sizeof buffer; - r = MsiFormatRecord(hpkg, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"x"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[foo.$%}][1]"); - r = MsiRecordSetString(hrec, 1, "hoo"); - sz = sizeof buffer; - r = MsiFormatRecord(hpkg, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"hoo"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[\\[]"); - sz = sizeof buffer; - r = MsiFormatRecord(hpkg, hrec, buffer, &sz); - ok( sz == 1, "size wrong\n"); - ok( 0 == strcmp(buffer,"["), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - SetEnvironmentVariable("FOO", "BAR"); - r = MsiRecordSetString(hrec, 0, "[%FOO]"); - sz = sizeof buffer; - r = MsiFormatRecord(hpkg, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"BAR"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - r = MsiRecordSetString(hrec, 0, "[[1]]"); - r = MsiRecordSetString(hrec, 1, "%FOO"); - sz = sizeof buffer; - r = MsiFormatRecord(hpkg, hrec, buffer, &sz); - ok( sz == 3, "size wrong\n"); - ok( 0 == strcmp(buffer,"BAR"), "wrong output %s\n",buffer); - ok( r == ERROR_SUCCESS, "format failed\n"); - - MsiCloseHandle( hrec ); - MsiCloseHandle( hpkg ); - DeleteFile(msifile); -} - -/* FIXME: state is INSTALLSTATE_UNKNOWN if any features are removed and the - * feature in question is not in ADD* - */ -static void test_states(void) -{ - MSIHANDLE hpkg; - UINT r; - MSIHANDLE hdb; - INSTALLSTATE state, action; - - hdb = create_package_db(); - ok ( hdb, "failed to create package database\n" ); - - r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'"); - ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r ); - - r = create_property_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Property table: %d\n", r ); - - r = add_property_entry( hdb, "'ProductCode', '{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}'" ); - ok( r == ERROR_SUCCESS, "cannot add property entry: %d\n", r ); - - r = add_property_entry( hdb, "'ProductLanguage', '1033'" ); - ok( r == ERROR_SUCCESS, "cannot add property entry: %d\n", r ); - - r = add_property_entry( hdb, "'ProductName', 'MSITEST'" ); - ok( r == ERROR_SUCCESS, "cannot add property entry: %d\n", r ); - - r = add_property_entry( hdb, "'ProductVersion', '1.1.1'" ); - ok( r == ERROR_SUCCESS, "cannot add property entry: %d\n", r ); - - r = create_install_execute_sequence_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create InstallExecuteSequence table: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'CostInitialize', '', '800'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'FileCost', '', '900'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'CostFinalize', '', '1000'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'InstallValidate', '', '1400'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'InstallInitialize', '', '1500'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'ProcessComponents', '', '1600'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'UnpublishFeatures', '', '1800'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'RegisterProduct', '', '6100'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'PublishFeatures', '', '6300'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'PublishProduct', '', '6400'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = add_install_execute_sequence_entry( hdb, "'InstallFinalize', '', '6600'" ); - ok( r == ERROR_SUCCESS, "cannot add install execute sequence entry: %d\n", r ); - - r = create_media_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create media table: %d\n", r ); - - r = add_media_entry( hdb, "'1', '3', '', '', 'DISK1', ''"); - ok( r == ERROR_SUCCESS, "cannot add media entry: %d\n", r ); - - r = create_feature_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Feature table: %d\n", r ); - - r = create_component_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Component table: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal */ - r = add_feature_entry( hdb, "'one', '', '', '', 2, 1, '', 0" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesLocalOnly */ - r = add_component_entry( hdb, "'alpha', '{467EC132-739D-4784-A37B-677AA43DBC94}', 'TARGETDIR', 0, '', 'alpha_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesSourceOnly */ - r = add_component_entry( hdb, "'beta', '{2C1F189C-24A6-4C34-B26B-994A6C026506}', 'TARGETDIR', 1, '', 'beta_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesOptional */ - r = add_component_entry( hdb, "'gamma', '{C271E2A4-DE2E-4F70-86D1-6984AF7DE2CA}', 'TARGETDIR', 2, '', 'gamma_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesSharedDllRefCount */ - r = add_component_entry( hdb, "'theta', '{4EB3129D-81A8-48D5-9801-75600FED3DD9}', 'TARGETDIR', 8, '', 'theta_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource */ - r = add_feature_entry( hdb, "'two', '', '', '', 2, 1, '', 1" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:msidbComponentAttributesLocalOnly */ - r = add_component_entry( hdb, "'delta', '{938FD4F2-C648-4259-A03C-7AA3B45643F3}', 'TARGETDIR', 0, '', 'delta_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:msidbComponentAttributesSourceOnly */ - r = add_component_entry( hdb, "'epsilon', '{D59713B6-C11D-47F2-A395-1E5321781190}', 'TARGETDIR', 1, '', 'epsilon_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:msidbComponentAttributesOptional */ - r = add_component_entry( hdb, "'zeta', '{377D33AB-2FAA-42B9-A629-0C0DAE9B9C7A}', 'TARGETDIR', 2, '', 'zeta_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:msidbComponentAttributesSharedDllRefCount */ - r = add_component_entry( hdb, "'iota', '{5D36F871-B5ED-4801-9E0F-C46B9E5C9669}', 'TARGETDIR', 8, '', 'iota_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource */ - r = add_feature_entry( hdb, "'three', '', '', '', 2, 1, '', 1" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal */ - r = add_feature_entry( hdb, "'four', '', '', '', 2, 1, '', 0" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* disabled */ - r = add_feature_entry( hdb, "'five', '', '', '', 2, 0, '', 1" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:msidbComponentAttributesSourceOnly */ - r = add_component_entry( hdb, "'eta', '{DD89003F-0DD4-41B8-81C0-3411A7DA2695}', 'TARGETDIR', 1, '', 'eta_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* no feature parent:msidbComponentAttributesLocalOnly */ - r = add_component_entry( hdb, "'kappa', '{D6B93DC3-8DA5-4769-9888-42BFE156BB8B}', 'TARGETDIR', 1, '', 'kappa_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:removed */ - r = add_feature_entry( hdb, "'six', '', '', '', 2, 1, '', 0" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:removed:msidbComponentAttributesLocalOnly */ - r = add_component_entry( hdb, "'lambda', '{6528C5E4-02A4-4636-A214-7A66A6C35B64}', 'TARGETDIR', 0, '', 'lambda_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:removed:msidbComponentAttributesSourceOnly */ - r = add_component_entry( hdb, "'mu', '{97014BAB-6C56-4013-9A63-2BF913B42519}', 'TARGETDIR', 1, '', 'mu_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:removed:msidbComponentAttributesOptional */ - r = add_component_entry( hdb, "'nu', '{943DD0D8-5808-4954-8526-3B8493FEDDCD}', 'TARGETDIR', 2, '', 'nu_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:removed:msidbComponentAttributesSharedDllRefCount */ - r = add_component_entry( hdb, "'xi', '{D6CF9EF7-6FCF-4930-B34B-F938AEFF9BDB}', 'TARGETDIR', 8, '', 'xi_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:removed */ - r = add_feature_entry( hdb, "'seven', '', '', '', 2, 1, '', 1" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:removed:msidbComponentAttributesLocalOnly */ - r = add_component_entry( hdb, "'omicron', '{7B57521D-15DB-4141-9AA6-01D934A4433F}', 'TARGETDIR', 0, '', 'omicron_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:removed:msidbComponentAttributesSourceOnly */ - r = add_component_entry( hdb, "'pi', '{FB85346B-378E-4492-8769-792305471C81}', 'TARGETDIR', 1, '', 'pi_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:removed:msidbComponentAttributesOptional */ - r = add_component_entry( hdb, "'rho', '{798F2047-7B0C-4783-8BB0-D703E554114B}', 'TARGETDIR', 2, '', 'rho_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:removed:msidbComponentAttributesSharedDllRefCount */ - r = add_component_entry( hdb, "'sigma', '{5CE9DDA8-B67B-4736-9D93-99D61C5B93E7}', 'TARGETDIR', 8, '', 'sigma_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - r = create_feature_components_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create FeatureComponents table: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'alpha'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'beta'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'gamma'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'theta'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'two', 'delta'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'two', 'epsilon'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'two', 'zeta'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'two', 'iota'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'three', 'eta'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'four', 'eta'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'five', 'eta'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'six', 'lambda'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'six', 'mu'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'six', 'nu'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'six', 'xi'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'seven', 'omicron'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'seven', 'pi'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'seven', 'rho'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'seven', 'sigma'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = create_file_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create File table: %d\n", r ); - - r = add_file_entry( hdb, "'alpha_file', 'alpha', 'alpha.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'beta_file', 'beta', 'beta.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'gamma_file', 'gamma', 'gamma.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'theta_file', 'theta', 'theta.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'delta_file', 'delta', 'delta.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'epsilon_file', 'epsilon', 'epsilon.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'zeta_file', 'zeta', 'zeta.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'iota_file', 'iota', 'iota.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - /* compressed file */ - r = add_file_entry( hdb, "'eta_file', 'eta', 'eta.txt', 0, '', '1033', 16384, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'kappa_file', 'kappa', 'kappa.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'lambda_file', 'lambda', 'lambda.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'mu_file', 'mu', 'mu.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'nu_file', 'nu', 'nu.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'xi_file', 'xi', 'xi.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'omicron_file', 'omicron', 'omicron.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'pi_file', 'pi', 'pi.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'rho_file', 'rho', 'rho.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'sigma_file', 'sigma', 'sigma.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - MsiDatabaseCommit(hdb); - - /* these properties must not be in the saved msi file */ - r = add_property_entry( hdb, "'ADDLOCAL', 'one,four'"); - ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r ); - - r = add_property_entry( hdb, "'ADDSOURCE', 'two,three'"); - ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r ); - - r = add_property_entry( hdb, "'REMOVE', 'six,seven'"); - ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r ); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle(hdb); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "one", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "two", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "three", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "four", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "five", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "six", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "seven", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "alpha", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "beta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "gamma", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "theta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "epsilon", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "zeta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "iota", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "eta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "kappa", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lambda", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "mu", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "nu", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "xi", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "omicron", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "pi", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "rho", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "sigma", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - r = MsiDoAction( hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "cost init failed\n"); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "one", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "two", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "three", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "four", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "five", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "six", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "seven", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "alpha", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "beta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "gamma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "theta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "epsilon", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "zeta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "iota", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "eta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "kappa", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lambda", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "mu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "nu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "xi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "omicron", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "pi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "rho", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "sigma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - r = MsiDoAction( hpkg, "FileCost"); - ok( r == ERROR_SUCCESS, "file cost failed\n"); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "one", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "two", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "three", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "four", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "five", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "six", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "seven", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "alpha", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "beta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "gamma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "theta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "epsilon", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "zeta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "iota", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "eta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "kappa", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lambda", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "mu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "nu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "xi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "omicron", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "pi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "rho", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "sigma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - r = MsiDoAction( hpkg, "CostFinalize"); - ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "one", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "two", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "three", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "four", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "five", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "six", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "seven", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "alpha", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "beta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "gamma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "theta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "epsilon", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "zeta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "iota", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "eta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "kappa", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lambda", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "mu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "nu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "xi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "omicron", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "pi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "rho", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "sigma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - MsiCloseHandle( hpkg ); - - /* publish the features and components */ - r = MsiInstallProduct(msifile, "ADDLOCAL=one,four ADDSOURCE=two,three REMOVE=six,seven"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiOpenDatabase(msifile, MSIDBOPEN_DIRECT, &hdb); - ok(r == ERROR_SUCCESS, "failed to open database: %d\n", r); - - /* these properties must not be in the saved msi file */ - r = add_property_entry( hdb, "'ADDLOCAL', 'one,four'"); - ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r ); - - r = add_property_entry( hdb, "'ADDSOURCE', 'two,three'"); - ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r ); - - r = add_property_entry( hdb, "'REMOVE', 'six,seven'"); - ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r ); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle(hdb); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "one", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "two", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "three", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "four", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "five", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "six", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "seven", &state, &action); - ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "alpha", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "beta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "gamma", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "theta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "epsilon", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "zeta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "iota", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "eta", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "kappa", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lambda", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "mu", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "nu", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "xi", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "omicron", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "pi", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "rho", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "sigma", &state, &action); - ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r ); - ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state); - ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action); - - r = MsiDoAction( hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "cost init failed\n"); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "one", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "two", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "three", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "four", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "five", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "six", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "seven", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "alpha", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "beta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "gamma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "theta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "epsilon", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "zeta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "iota", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "eta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "kappa", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lambda", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "mu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "nu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "xi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "omicron", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "pi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "rho", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "sigma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - r = MsiDoAction( hpkg, "FileCost"); - ok( r == ERROR_SUCCESS, "file cost failed\n"); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "one", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "two", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "three", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "four", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "five", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "six", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "seven", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "alpha", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "beta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "gamma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "theta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "epsilon", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "zeta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "iota", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "eta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "kappa", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lambda", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "mu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "nu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "xi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "omicron", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "pi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "rho", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "sigma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - r = MsiDoAction( hpkg, "CostFinalize"); - ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "one", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "two", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state); - } - ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "three", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "four", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "five", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "six", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "seven", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "alpha", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "beta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state); - } - ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "gamma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "theta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "epsilon", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "zeta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "iota", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "eta", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - todo_wine - { - ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state); - } - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "kappa", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lambda", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "mu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "nu", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "xi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "omicron", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "pi", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "rho", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "sigma", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - todo_wine - { - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - } - - MsiCloseHandle(hpkg); - - /* uninstall the product */ - r = MsiInstallProduct(msifile, "REMOVE=ALL"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - DeleteFileA(msifile); -} - -static void test_getproperty(void) -{ - MSIHANDLE hPackage = 0; - char prop[100]; - static CHAR empty[] = ""; - DWORD size; - UINT r; - - hPackage = package_from_db(create_package_db()); - ok( hPackage != 0, " Failed to create package\n"); - - /* set the property */ - r = MsiSetProperty(hPackage, "Name", "Value"); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* retrieve the size, NULL pointer */ - size = 0; - r = MsiGetProperty(hPackage, "Name", NULL, &size); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok( size == 5, "Expected 5, got %d\n", size); - - /* retrieve the size, empty string */ - size = 0; - r = MsiGetProperty(hPackage, "Name", empty, &size); - ok( r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok( size == 5, "Expected 5, got %d\n", size); - - /* don't change size */ - r = MsiGetProperty(hPackage, "Name", prop, &size); - ok( r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok( size == 5, "Expected 5, got %d\n", size); - ok( !lstrcmp(prop, "Valu"), "Expected Valu, got %s\n", prop); - - /* increase the size by 1 */ - size++; - r = MsiGetProperty(hPackage, "Name", prop, &size); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok( size == 5, "Expected 5, got %d\n", size); - ok( !lstrcmp(prop, "Value"), "Expected Value, got %s\n", prop); - - r = MsiCloseHandle( hPackage); - ok( r == ERROR_SUCCESS , "Failed to close package\n" ); - DeleteFile(msifile); -} - -static void test_removefiles(void) -{ - MSIHANDLE hpkg; - UINT r; - MSIHANDLE hdb; - - hdb = create_package_db(); - ok ( hdb, "failed to create package database\n" ); - - r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'"); - ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r ); - - r = create_feature_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Feature table: %d\n", r ); - - r = create_component_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Component table: %d\n", r ); - - r = add_feature_entry( hdb, "'one', '', '', '', 2, 1, '', 0" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - r = add_component_entry( hdb, "'hydrogen', '', 'TARGETDIR', 0, '', 'hydrogen_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - r = add_component_entry( hdb, "'helium', '', 'TARGETDIR', 0, '', 'helium_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - r = add_component_entry( hdb, "'lithium', '', 'TARGETDIR', 0, '', 'lithium_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - r = add_component_entry( hdb, "'beryllium', '', 'TARGETDIR', 0, '', 'beryllium_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - r = add_component_entry( hdb, "'boron', '', 'TARGETDIR', 0, '', 'boron_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - r = add_component_entry( hdb, "'carbon', '', 'TARGETDIR', 0, '', 'carbon_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - r = create_feature_components_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create FeatureComponents table: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'hydrogen'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'helium'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'lithium'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'beryllium'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'boron'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'one', 'carbon'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = create_file_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create File table: %d\n", r ); - - r = add_file_entry( hdb, "'hydrogen_file', 'hydrogen', 'hydrogen.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'helium_file', 'helium', 'helium.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'lithium_file', 'lithium', 'lithium.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'beryllium_file', 'beryllium', 'beryllium.txt', 0, '', '1033', 16384, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'boron_file', 'boron', 'boron.txt', 0, '', '1033', 16384, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'carbon_file', 'carbon', 'carbon.txt', 0, '', '1033', 16384, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = create_remove_file_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Remove File table: %d\n", r); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle( hdb ); - - create_test_file( "hydrogen.txt" ); - create_test_file( "helium.txt" ); - create_test_file( "lithium.txt" ); - create_test_file( "beryllium.txt" ); - create_test_file( "boron.txt" ); - create_test_file( "carbon.txt" ); - - r = MsiSetProperty( hpkg, "TARGETDIR", CURR_DIR ); - ok( r == ERROR_SUCCESS, "set property failed\n"); - - r = MsiDoAction( hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "cost init failed\n"); - - r = MsiDoAction( hpkg, "FileCost"); - ok( r == ERROR_SUCCESS, "cost finalize failed\n"); - - r = MsiDoAction( hpkg, "CostFinalize"); - ok( r == ERROR_SUCCESS, "cost finalize failed\n"); - - r = MsiDoAction( hpkg, "InstallValidate"); - ok( r == ERROR_SUCCESS, "cost finalize failed\n"); - - r = MsiSetComponentState( hpkg, "hydrogen", INSTALLSTATE_ABSENT ); - ok( r == ERROR_SUCCESS, "failed to set component state: %d\n", r); - - r = MsiSetComponentState( hpkg, "helium", INSTALLSTATE_LOCAL ); - ok( r == ERROR_SUCCESS, "failed to set component state: %d\n", r); - - r = MsiSetComponentState( hpkg, "lithium", INSTALLSTATE_SOURCE ); - ok( r == ERROR_SUCCESS, "failed to set component state: %d\n", r); - - r = MsiSetComponentState( hpkg, "beryllium", INSTALLSTATE_ABSENT ); - ok( r == ERROR_SUCCESS, "failed to set component state: %d\n", r); - - r = MsiSetComponentState( hpkg, "boron", INSTALLSTATE_LOCAL ); - ok( r == ERROR_SUCCESS, "failed to set component state: %d\n", r); - - r = MsiSetComponentState( hpkg, "carbon", INSTALLSTATE_SOURCE ); - ok( r == ERROR_SUCCESS, "failed to set component state: %d\n", r); - - r = MsiDoAction( hpkg, "RemoveFiles"); - ok( r == ERROR_SUCCESS, "remove files failed\n"); - - ok(DeleteFileA("hydrogen.txt"), "Expected hydrogen.txt to exist\n"); - ok(DeleteFileA("lithium.txt"), "Expected lithium.txt to exist\n"); - ok(DeleteFileA("beryllium.txt"), "Expected beryllium.txt to exist\n"); - ok(DeleteFileA("carbon.txt"), "Expected carbon.txt to exist\n"); - ok(DeleteFileA("helium.txt"), "Expected helium.txt to exist\n"); - ok(DeleteFileA("boron.txt"), "Expected boron.txt to exist\n"); - - MsiCloseHandle( hpkg ); - DeleteFileA(msifile); -} - -static void test_appsearch(void) -{ - MSIHANDLE hpkg; - UINT r; - MSIHANDLE hdb; - CHAR prop[MAX_PATH]; - DWORD size = MAX_PATH; - - hdb = create_package_db(); - ok ( hdb, "failed to create package database\n" ); - - r = create_appsearch_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create AppSearch table: %d\n", r ); - - r = add_appsearch_entry( hdb, "'WEBBROWSERPROG', 'NewSignature1'" ); - ok( r == ERROR_SUCCESS, "cannot add entry: %d\n", r ); - - r = create_reglocator_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create RegLocator table: %d\n", r ); - - r = add_reglocator_entry( hdb, "'NewSignature1', 0, 'htmlfile\\shell\\open\\command', '', 1" ); - ok( r == ERROR_SUCCESS, "cannot create RegLocator table: %d\n", r ); - - r = create_signature_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Signature table: %d\n", r ); - - r = add_signature_entry( hdb, "'NewSignature1', 'FileName', '', '', '', '', '', '', ''" ); - ok( r == ERROR_SUCCESS, "cannot create Signature table: %d\n", r ); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle( hdb ); - - r = MsiDoAction( hpkg, "AppSearch" ); - ok( r == ERROR_SUCCESS, "AppSearch failed: %d\n", r); - - r = MsiGetPropertyA( hpkg, "WEBBROWSERPROG", prop, &size ); - ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); - ok( lstrlenA(prop) != 0, "Expected non-zero length\n"); - - MsiCloseHandle( hpkg ); - DeleteFileA(msifile); -} - -static void test_featureparents(void) -{ - MSIHANDLE hpkg; - UINT r; - MSIHANDLE hdb; - INSTALLSTATE state, action; - - hdb = create_package_db(); - ok ( hdb, "failed to create package database\n" ); - - r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'"); - ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r ); - - r = create_feature_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Feature table: %d\n", r ); - - r = create_component_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create Component table: %d\n", r ); - - r = create_feature_components_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create FeatureComponents table: %d\n", r ); - - r = create_file_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create File table: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal */ - r = add_feature_entry( hdb, "'zodiac', '', '', '', 2, 1, '', 0" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* msidbFeatureAttributesFavorSource */ - r = add_feature_entry( hdb, "'perseus', '', '', '', 2, 1, '', 1" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal */ - r = add_feature_entry( hdb, "'orion', '', '', '', 2, 1, '', 0" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* disabled because of install level */ - r = add_feature_entry( hdb, "'waters', '', '', '', 15, 101, '', 9" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* child feature of disabled feature */ - r = add_feature_entry( hdb, "'bayer', 'waters', '', '', 14, 1, '', 9" ); - ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r ); - - /* component of disabled feature (install level) */ - r = add_component_entry( hdb, "'delphinus', '', 'TARGETDIR', 0, '', 'delphinus_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* component of disabled child feature (install level) */ - r = add_component_entry( hdb, "'hydrus', '', 'TARGETDIR', 0, '', 'hydrus_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesLocalOnly */ - r = add_component_entry( hdb, "'leo', '', 'TARGETDIR', 0, '', 'leo_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesSourceOnly */ - r = add_component_entry( hdb, "'virgo', '', 'TARGETDIR', 1, '', 'virgo_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesOptional */ - r = add_component_entry( hdb, "'libra', '', 'TARGETDIR', 2, '', 'libra_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:msidbComponentAttributesLocalOnly */ - r = add_component_entry( hdb, "'cassiopeia', '', 'TARGETDIR', 0, '', 'cassiopeia_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:msidbComponentAttributesSourceOnly */ - r = add_component_entry( hdb, "'cepheus', '', 'TARGETDIR', 1, '', 'cepheus_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorSource:msidbComponentAttributesOptional */ - r = add_component_entry( hdb, "'andromeda', '', 'TARGETDIR', 2, '', 'andromeda_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesLocalOnly */ - r = add_component_entry( hdb, "'canis', '', 'TARGETDIR', 0, '', 'canis_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesSourceOnly */ - r = add_component_entry( hdb, "'monoceros', '', 'TARGETDIR', 1, '', 'monoceros_file'" ); - ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r ); - - /* msidbFeatureAttributesFavorLocal:msidbComponentAttributesOptional */ - r = add_component_entry( hdb, "'lepus', '', 'TARGETDIR', 2, '', 'lepus_file'" ); - - r = add_feature_components_entry( hdb, "'zodiac', 'leo'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'zodiac', 'virgo'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'zodiac', 'libra'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'perseus', 'cassiopeia'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'perseus', 'cepheus'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'perseus', 'andromeda'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'leo'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'virgo'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'libra'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'cassiopeia'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'cepheus'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'andromeda'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'canis'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'monoceros'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'orion', 'lepus'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'waters', 'delphinus'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_feature_components_entry( hdb, "'bayer', 'hydrus'" ); - ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r ); - - r = add_file_entry( hdb, "'leo_file', 'leo', 'leo.txt', 100, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'virgo_file', 'virgo', 'virgo.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'libra_file', 'libra', 'libra.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'cassiopeia_file', 'cassiopeia', 'cassiopeia.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'cepheus_file', 'cepheus', 'cepheus.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'andromeda_file', 'andromeda', 'andromeda.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'canis_file', 'canis', 'canis.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'monoceros_file', 'monoceros', 'monoceros.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'lepus_file', 'lepus', 'lepus.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'delphinus_file', 'delphinus', 'delphinus.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - r = add_file_entry( hdb, "'hydrus_file', 'hydrus', 'hydrus.txt', 0, '', '1033', 8192, 1" ); - ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle( hdb ); - - r = MsiDoAction( hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "cost init failed\n"); - - r = MsiDoAction( hpkg, "FileCost"); - ok( r == ERROR_SUCCESS, "file cost failed\n"); - - r = MsiDoAction( hpkg, "CostFinalize"); - ok( r == ERROR_SUCCESS, "cost finalize failed\n"); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "zodiac", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "perseus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "orion", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "waters", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "bayer", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "leo", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "virgo", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected virgo INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected virgo INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "libra", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected libra INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected libra INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "cassiopeia", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected cassiopeia INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected cassiopeia INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "cepheus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected cepheus INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected cepheus INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "andromeda", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected andromeda INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected andromeda INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "canis", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected canis INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected canis INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "monoceros", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected monoceros INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected monoceros INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lepus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected lepus INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected lepus INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delphinus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected delphinus INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected delphinus INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "hydrus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected hydrus INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected hydrus INSTALLSTATE_UNKNOWN, got %d\n", action); - - r = MsiSetFeatureState(hpkg, "orion", INSTALLSTATE_ABSENT); - ok( r == ERROR_SUCCESS, "failed to set feature state: %d\n", r); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "zodiac", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected zodiac INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected zodiac INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "perseus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected perseus INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected perseus INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetFeatureState(hpkg, "orion", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_ABSENT, "Expected orion INSTALLSTATE_ABSENT, got %d\n", state); - ok( action == INSTALLSTATE_ABSENT, "Expected orion INSTALLSTATE_ABSENT, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "leo", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected leo INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected leo INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "virgo", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected virgo INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected virgo INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "libra", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected libra INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected libra INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "cassiopeia", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected cassiopeia INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_LOCAL, "Expected cassiopeia INSTALLSTATE_LOCAL, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "cepheus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected cepheus INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected cepheus INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "andromeda", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected andromeda INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_SOURCE, "Expected andromeda INSTALLSTATE_SOURCE, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "canis", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected canis INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected canis INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "monoceros", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected monoceros INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected monoceros INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "lepus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected lepus INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected lepus INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "delphinus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected delphinus INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected delphinus INSTALLSTATE_UNKNOWN, got %d\n", action); - - state = 0xdeadbee; - action = 0xdeadbee; - r = MsiGetComponentState(hpkg, "hydrus", &state, &action); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); - ok( state == INSTALLSTATE_UNKNOWN, "Expected hydrus INSTALLSTATE_UNKNOWN, got %d\n", state); - ok( action == INSTALLSTATE_UNKNOWN, "Expected hydrus INSTALLSTATE_UNKNOWN, got %d\n", action); - - MsiCloseHandle(hpkg); - DeleteFileA(msifile); -} - -static void test_installprops(void) -{ - MSIHANDLE hpkg, hdb; - CHAR path[MAX_PATH]; - CHAR buf[MAX_PATH]; - DWORD size, type; - LANGID langid; - HKEY hkey1, hkey2; - int res; - UINT r; - - GetCurrentDirectory(MAX_PATH, path); - lstrcat(path, "\\"); - lstrcat(path, msifile); - - hdb = create_package_db(); - ok( hdb, "failed to create database\n"); - - hpkg = package_from_db(hdb); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle(hdb); - - size = MAX_PATH; - r = MsiGetProperty(hpkg, "DATABASE", buf, &size); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrcmp(buf, path), "Expected %s, got %s\n", path, buf); - - RegOpenKey(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\MS Setup (ACME)\\User Info", &hkey1); - - RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", &hkey2); - - size = MAX_PATH; - type = REG_SZ; - *path = '\0'; - if (RegQueryValueEx(hkey1, "DefName", NULL, &type, (LPBYTE)path, &size) != ERROR_SUCCESS) - { - size = MAX_PATH; - type = REG_SZ; - RegQueryValueEx(hkey2, "RegisteredOwner", NULL, &type, (LPBYTE)path, &size); - } - - /* win9x doesn't set this */ - if (*path) - { - size = MAX_PATH; - r = MsiGetProperty(hpkg, "USERNAME", buf, &size); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrcmp(buf, path), "Expected %s, got %s\n", path, buf); - } - - size = MAX_PATH; - type = REG_SZ; - *path = '\0'; - if (RegQueryValueEx(hkey1, "DefCompany", NULL, &type, (LPBYTE)path, &size) != ERROR_SUCCESS) - { - size = MAX_PATH; - type = REG_SZ; - RegQueryValueEx(hkey2, "RegisteredOrganization", NULL, &type, (LPBYTE)path, &size); - } - - if (*path) - { - size = MAX_PATH; - r = MsiGetProperty(hpkg, "COMPANYNAME", buf, &size); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrcmp(buf, path), "Expected %s, got %s\n", path, buf); - } - - size = MAX_PATH; - r = MsiGetProperty(hpkg, "VersionDatabase", buf, &size); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - trace("VersionDatabase = %s\n", buf); - - size = MAX_PATH; - r = MsiGetProperty(hpkg, "VersionMsi", buf, &size); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - trace("VersionMsi = %s\n", buf); - - size = MAX_PATH; - r = MsiGetProperty(hpkg, "Date", buf, &size); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - trace("Date = %s\n", buf); - - size = MAX_PATH; - r = MsiGetProperty(hpkg, "Time", buf, &size); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - trace("Time = %s\n", buf); - - size = MAX_PATH; - r = MsiGetProperty(hpkg, "PackageCode", buf, &size); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - trace("PackageCode = %s\n", buf); - - langid = GetUserDefaultLangID(); - sprintf(path, "%d", langid); - - size = MAX_PATH; - r = MsiGetProperty(hpkg, "UserLanguageID", buf, &size); - ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS< got %d\n", r); - ok( !lstrcmpA(buf, path), "Expected \"%s\", got \"%s\"\n", path, buf); - - res = GetSystemMetrics(SM_CXSCREEN); - size = MAX_PATH; - r = MsiGetProperty(hpkg, "ScreenX", buf, &size); - ok(atol(buf) == res, "Expected %d, got %ld\n", res, atol(buf)); - - res = GetSystemMetrics(SM_CYSCREEN); - size = MAX_PATH; - r = MsiGetProperty(hpkg, "ScreenY", buf, &size); - ok(atol(buf) == res, "Expected %d, got %ld\n", res, atol(buf)); - - CloseHandle(hkey1); - CloseHandle(hkey2); - MsiCloseHandle(hpkg); - DeleteFile(msifile); -} - -static void test_sourcedirprop(void) -{ - MSIHANDLE hpkg, hdb; - CHAR source_dir[MAX_PATH]; - CHAR path[MAX_PATH]; - DWORD size; - UINT r; - - hdb = create_package_db(); - ok ( hdb, "failed to create package database\n" ); - - r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'"); - ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r ); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle( hdb ); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "SourceDir", source_dir, &size ); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrlenA(source_dir), "Expected emtpy source dir, got %s\n", source_dir); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "SOURCEDIR", source_dir, &size ); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrlenA(source_dir), "Expected emtpy source dir, got %s\n", source_dir); - - r = MsiDoAction( hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "cost init failed\n"); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "SourceDir", source_dir, &size ); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrlenA(source_dir), "Expected emtpy source dir, got %s\n", source_dir); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "SOURCEDIR", source_dir, &size ); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrlenA(source_dir), "Expected emtpy source dir, got %s\n", source_dir); - - r = MsiDoAction( hpkg, "ResolveSource"); - ok( r == ERROR_SUCCESS, "file cost failed\n"); - - GetCurrentDirectory(MAX_PATH, path); - lstrcatA(path, "\\"); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "SourceDir", source_dir, &size ); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrcmpA(source_dir, path), "Expected %s, got %s\n", path, source_dir); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "SOURCEDIR", source_dir, &size ); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrcmpA(source_dir, path), "Expected %s, got %s\n", path, source_dir); - - size = MAX_PATH; - r = MsiGetProperty( hpkg, "SoUrCeDiR", source_dir, &size ); - ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); - ok( !lstrlenA(source_dir), "Expected emtpy source dir, got %s\n", source_dir); - - MsiCloseHandle(hpkg); - DeleteFileA(msifile); -} - -static void test_prop_path(void) -{ - MSIHANDLE hpkg, hdb; - char buffer[MAX_PATH], cwd[MAX_PATH]; - DWORD sz; - UINT r; - - GetCurrentDirectory(MAX_PATH, cwd); - strcat(cwd, "\\"); - - hdb = create_package_db(); - ok( hdb, "failed to create database\n"); - - r = add_directory_entry( hdb, "'TARGETDIR','','SourceDir'" ); - ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r ); - - r = add_directory_entry( hdb, "'foo','TARGETDIR','foosrc:footgt'" ); - ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r ); - - hpkg = package_from_db(hdb); - ok( hpkg, "failed to create package\n"); - - r = MsiGetSourcePath(hpkg, "SourceDir", buffer, &sz ); - ok( r == ERROR_DIRECTORY, "failed to get source path\n"); - - r = MsiGetSourcePath(hpkg, "SOURCEDIR", buffer, &sz ); - ok( r == ERROR_DIRECTORY, "failed to get source path\n"); - - r = MsiDoAction( hpkg, "CostInitialize"); - ok( r == ERROR_SUCCESS, "cost init failed\n"); - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetProperty(hpkg, "SourceDir", buffer, &sz); - ok( r == ERROR_SUCCESS, "property not set\n"); - ok( !buffer[0], "SourceDir should be empty\n"); - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetProperty(hpkg, "SOURCEDIR", buffer, &sz); - ok( r == ERROR_SUCCESS, "property not set\n"); - ok( !buffer[0], "SourceDir should be empty\n"); - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetSourcePath(hpkg, "SourceDir", buffer, &sz ); - ok( r == ERROR_SUCCESS, "failed to get source path\n"); - ok( !lstrcmpi(cwd, buffer), "SourceDir (%s) should be current dir (%s)\n", buffer, cwd); - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetProperty(hpkg, "SourceDir", buffer, &sz); - ok( r == ERROR_SUCCESS, "property not set\n"); - todo_wine { - ok( !lstrcmpi(cwd, buffer), "SourceDir (%s) should be current dir (%s)\n", buffer, cwd); - } - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetSourcePath(hpkg, "SOURCEDIR", buffer, &sz ); - ok( r == ERROR_DIRECTORY, "failed to get source path\n"); - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetProperty(hpkg, "SOURCEDIR", buffer, &sz); - ok( r == ERROR_SUCCESS, "property not set\n"); - todo_wine { - ok( !lstrcmpi(cwd, buffer), "SourceDir (%s) should be current dir (%s)\n", buffer, cwd); - } - - r = MsiSetProperty(hpkg, "SourceDir", "goo"); - ok( r == ERROR_SUCCESS, "property not set\n"); - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetProperty(hpkg, "SourceDir", buffer, &sz); - ok( r == ERROR_SUCCESS, "property not set\n"); - ok( !lstrcmpi(buffer, "goo"), "SourceDir (%s) should be goo\n", buffer); - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetSourcePath(hpkg, "SourceDir", buffer, &sz ); - ok( r == ERROR_SUCCESS, "failed to get source path\n"); - ok( !lstrcmpi(buffer, cwd), "SourceDir (%s) should be goo\n", buffer); - - sz = sizeof buffer; - buffer[0] = 0; - r = MsiGetProperty(hpkg, "SourceDir", buffer, &sz); - ok( r == ERROR_SUCCESS, "property not set\n"); - ok( !lstrcmpi(buffer, "goo"), "SourceDir (%s) should be goo\n", buffer); - - MsiCloseHandle( hpkg ); - DeleteFile(msifile); -} - -static void test_launchconditions(void) -{ - MSIHANDLE hpkg; - MSIHANDLE hdb; - UINT r; - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - hdb = create_package_db(); - ok( hdb, "failed to create package database\n" ); - - r = create_launchcondition_table( hdb ); - ok( r == ERROR_SUCCESS, "cannot create LaunchCondition table: %d\n", r ); - - r = add_launchcondition_entry( hdb, "'X = \"1\"', 'one'" ); - ok( r == ERROR_SUCCESS, "cannot add launch condition: %d\n", r ); - - /* invalid condition */ - r = add_launchcondition_entry( hdb, "'X != \"1\"', 'one'" ); - ok( r == ERROR_SUCCESS, "cannot add launch condition: %d\n", r ); - - hpkg = package_from_db( hdb ); - ok( hpkg, "failed to create package\n"); - - MsiCloseHandle( hdb ); - - r = MsiSetProperty( hpkg, "X", "1" ); - ok( r == ERROR_SUCCESS, "failed to set property\n" ); - - /* invalid conditions are ignored */ - r = MsiDoAction( hpkg, "LaunchConditions" ); - ok( r == ERROR_SUCCESS, "cost init failed\n" ); - - /* verify LaunchConditions still does some verification */ - r = MsiSetProperty( hpkg, "X", "2" ); - ok( r == ERROR_SUCCESS, "failed to set property\n" ); - - r = MsiDoAction( hpkg, "LaunchConditions" ); - ok( r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %d\n", r ); - - MsiCloseHandle( hpkg ); - DeleteFile( msifile ); -} - -static void test_ccpsearch(void) -{ - MSIHANDLE hdb, hpkg; - CHAR prop[MAX_PATH]; - DWORD size = MAX_PATH; - UINT r; - - MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); - - hdb = create_package_db(); - ok(hdb, "failed to create package database\n"); - - r = create_ccpsearch_table(hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_ccpsearch_entry(hdb, "'CCP_random'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_ccpsearch_entry(hdb, "'RMCCP_random'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = create_reglocator_table(hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_reglocator_entry(hdb, "'CCP_random', 0, 'htmlfile\\shell\\open\\nonexistent', '', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = create_drlocator_table(hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_drlocator_entry(hdb, "'RMCCP_random', '', 'C:\\', '0'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = create_signature_table(hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - hpkg = package_from_db(hdb); - ok(hpkg, "failed to create package\n"); - - MsiCloseHandle(hdb); - - r = MsiDoAction(hpkg, "CCPSearch"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = MsiGetPropertyA(hpkg, "CCP_Success", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, "1"), "Expected 1, got %s\n", prop); - - MsiCloseHandle(hpkg); - DeleteFileA(msifile); -} - -static BOOL squash_guid(LPCWSTR in, LPWSTR out) -{ - DWORD i,n=1; - GUID guid; - - if (FAILED(CLSIDFromString((LPOLESTR)in, &guid))) - return FALSE; - - for(i=0; i<8; i++) - out[7-i] = in[n++]; - n++; - for(i=0; i<4; i++) - out[11-i] = in[n++]; - n++; - for(i=0; i<4; i++) - out[15-i] = in[n++]; - n++; - for(i=0; i<2; i++) - { - out[17+i*2] = in[n++]; - out[16+i*2] = in[n++]; - } - n++; - for( ; i<8; i++) - { - out[17+i*2] = in[n++]; - out[16+i*2] = in[n++]; - } - out[32]=0; - return TRUE; -} - -static void set_component_path(LPCSTR filename, LPCSTR guid) -{ - WCHAR guidW[MAX_PATH]; - WCHAR squashedW[MAX_PATH]; - CHAR squashed[MAX_PATH]; - CHAR substr[MAX_PATH]; - CHAR path[MAX_PATH]; - HKEY hkey; - - MultiByteToWideChar(CP_ACP, 0, guid, -1, guidW, MAX_PATH); - squash_guid(guidW, squashedW); - WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL); - - lstrcpyA(substr, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\" - "Installer\\UserData\\S-1-5-18\\Components\\"); - lstrcatA(substr, squashed); - - RegCreateKeyA(HKEY_LOCAL_MACHINE, substr, &hkey); - - lstrcpyA(path, CURR_DIR); - lstrcatA(path, "\\"); - lstrcatA(path, filename); - - /* just using a random squashed product code */ - RegSetValueExA(hkey, "7D2F387510109040002000060BECB6AB", 0, - REG_SZ, (LPBYTE)path, lstrlenA(path)); - - RegCloseKey(hkey); - - lstrcpyA(substr, "SOFTWARE\\Classes\\Installer\\Products\\7D2F387510109040002000060BECB6AB"); - RegCreateKeyA(HKEY_LOCAL_MACHINE, substr, &hkey); -} - -static void delete_component_path(LPCSTR guid) -{ - WCHAR guidW[MAX_PATH]; - WCHAR squashedW[MAX_PATH]; - WCHAR substrW[MAX_PATH]; - CHAR squashed[MAX_PATH]; - CHAR substr[MAX_PATH]; - - MultiByteToWideChar(CP_ACP, 0, guid, -1, guidW, MAX_PATH); - squash_guid(guidW, squashedW); - WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL); - - lstrcpyA(substr, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\" - "Installer\\UserData\\S-1-5-18\\Components\\"); - lstrcatA(substr, squashed); - - MultiByteToWideChar(CP_ACP, 0, substr, -1, substrW, MAX_PATH); - package_RegDeleteTreeW(HKEY_LOCAL_MACHINE, substrW); - - lstrcpyA(substr, "SOFTWARE\\Classes\\Installer\\Products\\7D2F387510109040002000060BECB6AB"); - MultiByteToWideChar(CP_ACP, 0, substr, -1, substrW, MAX_PATH); - package_RegDeleteTreeW(HKEY_LOCAL_MACHINE, substrW); -} - -static void test_complocator(void) -{ - MSIHANDLE hdb, hpkg; - UINT r; - CHAR prop[MAX_PATH]; - CHAR expected[MAX_PATH]; - DWORD size = MAX_PATH; - - hdb = create_package_db(); - ok(hdb, "failed to create package database\n"); - - r = create_appsearch_table(hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'ABELISAURUS', 'abelisaurus'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'BACTROSAURUS', 'bactrosaurus'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'CAMELOTIA', 'camelotia'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'DICLONIUS', 'diclonius'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'ECHINODON', 'echinodon'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'FALCARIUS', 'falcarius'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'GALLIMIMUS', 'gallimimus'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'HAGRYPHUS', 'hagryphus'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'IGUANODON', 'iguanodon'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'JOBARIA', 'jobaria'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'KAKURU', 'kakuru'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'LABOCANIA', 'labocania'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'MEGARAPTOR', 'megaraptor'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'NEOSODON', 'neosodon'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'OLOROTITAN', 'olorotitan'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_appsearch_entry(hdb, "'PANTYDRACO', 'pantydraco'"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = create_complocator_table(hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'abelisaurus', '{E3619EED-305A-418C-B9C7-F7D7377F0934}', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'bactrosaurus', '{D56B688D-542F-42Ef-90FD-B6DA76EE8119}', 0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'camelotia', '{8211BE36-2466-47E3-AFB7-6AC72E51AED2}', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'diclonius', '{5C767B20-A33C-45A4-B80B-555E512F01AE}', 0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'echinodon', '{A19E16C5-C75D-4699-8111-C4338C40C3CB}', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'falcarius', '{17762FA1-A7AE-4CC6-8827-62873C35361D}', 0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'gallimimus', '{75EBF568-C959-41E0-A99E-9050638CF5FB}', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'hagrphus', '{D4969B72-17D9-4AB6-BE49-78F2FEE857AC}', 0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'iguanodon', '{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'jobaria', '{243C22B1-8C51-4151-B9D1-1AE5265E079E}', 0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'kakuru', '{5D0F03BA-50BC-44F2-ABB1-72C972F4E514}', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'labocania', '{C7DDB60C-7828-4046-A6F8-699D5E92F1ED}', 0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'megaraptor', '{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'neosodon', '{0B499649-197A-48EF-93D2-AF1C17ED6E90}', 0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'olorotitan', '{54E9E91F-AED2-46D5-A25A-7E50AFA24513}', 1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_complocator_entry(hdb, "'pantydraco', '{2A989951-5565-4FA7-93A7-E800A3E67D71}', 0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = create_signature_table(hdb); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_signature_entry(hdb, "'abelisaurus', 'abelisaurus', '', '', '', '', '', '', ''"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_signature_entry(hdb, "'bactrosaurus', 'bactrosaurus', '', '', '', '', '', '', ''"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_signature_entry(hdb, "'camelotia', 'camelotia', '', '', '', '', '', '', ''"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_signature_entry(hdb, "'diclonius', 'diclonius', '', '', '', '', '', '', ''"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_signature_entry(hdb, "'iguanodon', 'iguanodon', '', '', '', '', '', '', ''"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_signature_entry(hdb, "'jobaria', 'jobaria', '', '', '', '', '', '', ''"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_signature_entry(hdb, "'kakuru', 'kakuru', '', '', '', '', '', '', ''"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - r = add_signature_entry(hdb, "'labocania', 'labocania', '', '', '', '', '', '', ''"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - hpkg = package_from_db(hdb); - ok(hpkg, "failed to create package\n"); - - MsiCloseHandle(hdb); - - create_test_file("abelisaurus"); - create_test_file("bactrosaurus"); - create_test_file("camelotia"); - create_test_file("diclonius"); - create_test_file("echinodon"); - create_test_file("falcarius"); - create_test_file("gallimimus"); - create_test_file("hagryphus"); - CreateDirectoryA("iguanodon", NULL); - CreateDirectoryA("jobaria", NULL); - CreateDirectoryA("kakuru", NULL); - CreateDirectoryA("labocania", NULL); - CreateDirectoryA("megaraptor", NULL); - CreateDirectoryA("neosodon", NULL); - CreateDirectoryA("olorotitan", NULL); - CreateDirectoryA("pantydraco", NULL); - - set_component_path("abelisaurus", "{E3619EED-305A-418C-B9C7-F7D7377F0934}"); - set_component_path("bactrosaurus", "{D56B688D-542F-42Ef-90FD-B6DA76EE8119}"); - set_component_path("echinodon", "{A19E16C5-C75D-4699-8111-C4338C40C3CB}"); - set_component_path("falcarius", "{17762FA1-A7AE-4CC6-8827-62873C35361D}"); - set_component_path("iguanodon", "{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}"); - set_component_path("jobaria", "{243C22B1-8C51-4151-B9D1-1AE5265E079E}"); - set_component_path("megaraptor", "{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}"); - set_component_path("neosodon", "{0B499649-197A-48EF-93D2-AF1C17ED6E90}"); - - r = MsiDoAction(hpkg, "AppSearch"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "ABELISAURUS", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - lstrcpyA(expected, CURR_DIR); - lstrcatA(expected, "\\abelisaurus"); - ok(!lstrcmpA(prop, expected) || !lstrcmpA(prop, ""), - "Expected %s or empty string, got %s\n", expected, prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "BACTROSAURUS", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "CAMELOTIA", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "DICLONIUS", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "ECHINODON", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - lstrcpyA(expected, CURR_DIR); - lstrcatA(expected, "\\"); - ok(!lstrcmpA(prop, expected) || !lstrcmpA(prop, ""), - "Expected %s or empty string, got %s\n", expected, prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "FALCARIUS", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "GALLIMIMUS", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "HAGRYPHUS", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "IGUANODON", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "JOBARIA", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "KAKURU", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "LABOCANIA", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "MEGARAPTOR", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - lstrcpyA(expected, CURR_DIR); - lstrcatA(expected, "\\"); - ok(!lstrcmpA(prop, expected) || !lstrcmpA(prop, ""), - "Expected %s or empty string, got %s\n", expected, prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "NEOSODON", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - lstrcpyA(expected, CURR_DIR); - lstrcatA(expected, "\\neosodon\\"); - ok(!lstrcmpA(prop, expected) || !lstrcmpA(prop, ""), - "Expected %s or empty string, got %s\n", expected, prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "OLOROTITAN", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - size = MAX_PATH; - r = MsiGetPropertyA(hpkg, "PANTYDRACO", prop, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(prop, ""), "Expected , got %s\n", prop); - - MsiCloseHandle(hpkg); - DeleteFileA("abelisaurus"); - DeleteFileA("bactrosaurus"); - DeleteFileA("camelotia"); - DeleteFileA("diclonius"); - DeleteFileA("echinodon"); - DeleteFileA("falcarius"); - DeleteFileA("gallimimus"); - DeleteFileA("hagryphus"); - RemoveDirectoryA("iguanodon"); - RemoveDirectoryA("jobaria"); - RemoveDirectoryA("kakuru"); - RemoveDirectoryA("labocania"); - RemoveDirectoryA("megaraptor"); - RemoveDirectoryA("neosodon"); - RemoveDirectoryA("olorotitan"); - RemoveDirectoryA("pantydraco"); - delete_component_path("{E3619EED-305A-418C-B9C7-F7D7377F0934}"); - delete_component_path("{D56B688D-542F-42Ef-90FD-B6DA76EE8119}"); - delete_component_path("{A19E16C5-C75D-4699-8111-C4338C40C3CB}"); - delete_component_path("{17762FA1-A7AE-4CC6-8827-62873C35361D}"); - delete_component_path("{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}"); - delete_component_path("{243C22B1-8C51-4151-B9D1-1AE5265E079E}"); - delete_component_path("{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}"); - delete_component_path("{0B499649-197A-48EF-93D2-AF1C17ED6E90}"); - DeleteFileA(msifile); -} - -START_TEST(package) -{ - GetCurrentDirectoryA(MAX_PATH, CURR_DIR); - - test_createpackage(); - test_getsourcepath_bad(); - test_getsourcepath(); - test_doaction(); - test_gettargetpath_bad(); - test_settargetpath(); - test_props(); - test_property_table(); - test_condition(); - test_msipackage(); - test_formatrecord2(); - test_states(); - test_getproperty(); - test_removefiles(); - test_appsearch(); - test_featureparents(); - test_installprops(); - test_sourcedirprop(); - test_prop_path(); - test_launchconditions(); - test_ccpsearch(); - test_complocator(); -} diff --git a/rostests/winetests/msi/record.c b/rostests/winetests/msi/record.c deleted file mode 100644 index 471fc9ce372..00000000000 --- a/rostests/winetests/msi/record.c +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright (C) 2005 Mike McCormack for CodeWeavers - * - * A test program for MSI records - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" - -static BOOL create_temp_file(char *name) -{ - UINT r; - unsigned char buffer[26], i; - DWORD sz; - HANDLE handle; - - r = GetTempFileName(".", "msitest",0,name); - if(!r) - return r; - handle = CreateFile(name, GENERIC_READ|GENERIC_WRITE, - 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if(handle==INVALID_HANDLE_VALUE) - return 0; - for(i=0; i<26; i++) - buffer[i]=i+'a'; - r = WriteFile(handle,buffer,sizeof buffer,&sz,NULL); - CloseHandle(handle); - return r; -} - -static void test_msirecord(void) -{ - DWORD r, sz; - INT i; - MSIHANDLE h; - char buf[10]; - WCHAR bufW[10]; - const char str[] = "hello"; - const WCHAR strW[] = { 'h','e','l','l','o',0}; - char filename[MAX_PATH]; - - /* check behaviour with an invalid record */ - r = MsiRecordGetFieldCount(0); - ok(r==-1, "field count for invalid record not -1\n"); - SetLastError(0); - r = MsiRecordIsNull(0, 0); - ok(r==0, "invalid handle not considered to be non-null...\n"); - ok(GetLastError()==0, "MsiRecordIsNull set LastError\n"); - r = MsiRecordGetInteger(0,0); - ok(r == MSI_NULL_INTEGER, "got integer from invalid record\n"); - r = MsiRecordSetInteger(0,0,0); - ok(r == ERROR_INVALID_HANDLE, "MsiRecordSetInteger returned wrong error\n"); - r = MsiRecordSetInteger(0,-1,0); - ok(r == ERROR_INVALID_HANDLE, "MsiRecordSetInteger returned wrong error\n"); - SetLastError(0); - h = MsiCreateRecord(-1); - ok(h==0, "created record with -1 elements\n"); - h = MsiCreateRecord(0x10000); - ok(h==0, "created record with 0x10000 elements\n"); - /* doesn't set LastError */ - ok(GetLastError()==0, "MsiCreateRecord set last error\n"); - r = MsiRecordClearData(0); - ok(r == ERROR_INVALID_HANDLE, "MsiRecordClearData returned wrong error\n"); - r = MsiRecordDataSize(0,0); - ok(r == 0, "MsiRecordDataSize returned wrong error\n"); - - - /* check behaviour of a record with 0 elements */ - h = MsiCreateRecord(0); - ok(h!=0, "couldn't create record with zero elements\n"); - r = MsiRecordGetFieldCount(h); - ok(r==0, "field count should be zero\n"); - r = MsiRecordIsNull(h,0); - ok(r, "new record wasn't null\n"); - r = MsiRecordIsNull(h,1); - ok(r, "out of range record wasn't null\n"); - r = MsiRecordIsNull(h,-1); - ok(r, "out of range record wasn't null\n"); - r = MsiRecordDataSize(h,0); - ok(r==0, "size of null record is 0\n"); - sz = sizeof buf; - strcpy(buf,"x"); - r = MsiRecordGetString(h, 0, buf, &sz); - ok(r==ERROR_SUCCESS, "failed to get null string\n"); - ok(sz==0, "null string too long\n"); - ok(buf[0]==0, "null string not set\n"); - - /* same record, but add an integer to it */ - r = MsiRecordSetInteger(h, 0, 0); - ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 0\n"); - r = MsiRecordIsNull(h,0); - ok(r==0, "new record is null after setting an integer\n"); - r = MsiRecordDataSize(h,0); - ok(r==sizeof(DWORD), "size of integer record is 4\n"); - r = MsiRecordSetInteger(h, 0, 1); - ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 1\n"); - r = MsiRecordSetInteger(h, 1, 1); - ok(r == ERROR_INVALID_PARAMETER, "set integer at 1\n"); - r = MsiRecordSetInteger(h, -1, 0); - ok(r == ERROR_INVALID_PARAMETER, "set integer at -1\n"); - r = MsiRecordIsNull(h,0); - ok(r==0, "new record is null after setting an integer\n"); - r = MsiRecordGetInteger(h, 0); - ok(r == 1, "failed to get integer\n"); - - /* same record, but add a string to it */ - r = MsiRecordSetString(h, 0, NULL); - ok(r == ERROR_SUCCESS, "Failed to set null string at 0\n"); - r = MsiRecordIsNull(h, 0); - ok(r == TRUE, "null string not null field\n"); - r = MsiRecordSetString(h, 0, ""); - ok(r == ERROR_SUCCESS, "Failed to set empty string at 0\n"); - r = MsiRecordIsNull(h, 0); - ok(r == TRUE, "null string not null field\n"); - r = MsiRecordSetString(h,0,str); - ok(r == ERROR_SUCCESS, "Failed to set string at 0\n"); - r = MsiRecordGetInteger(h, 0); - ok(r == MSI_NULL_INTEGER, "should get invalid integer\n"); - r = MsiRecordDataSize(h,0); - ok(r==sizeof str-1, "size of string record is strlen\n"); - buf[0]=0; - sz = sizeof buf; - r = MsiRecordGetString(h,0,buf,&sz); - ok(r == ERROR_SUCCESS, "Failed to get string at 0\n"); - ok(0==strcmp(buf,str), "MsiRecordGetString returned the wrong string\n"); - ok(sz == sizeof str-1, "MsiRecordGetString returned the wrong length\n"); - buf[0]=0; - sz = sizeof str - 2; - r = MsiRecordGetString(h,0,buf,&sz); - ok(r == ERROR_MORE_DATA, "small buffer should yield ERROR_MORE_DATA\n"); - ok(sz == sizeof str-1, "MsiRecordGetString returned the wrong length\n"); - ok(0==strncmp(buf,str,sizeof str-3), "MsiRecordGetString returned the wrong string\n"); - ok(buf[sizeof str - 3]==0, "string wasn't nul terminated\n"); - - buf[0]=0; - sz = sizeof str; - r = MsiRecordGetString(h,0,buf,&sz); - ok(r == ERROR_SUCCESS, "wrong error\n"); - ok(sz == sizeof str-1, "MsiRecordGetString returned the wrong length\n"); - ok(0==strcmp(buf,str), "MsiRecordGetString returned the wrong string\n"); - - - memset(bufW, 0, sizeof bufW); - sz = 5; - r = MsiRecordGetStringW(h,0,bufW,&sz); - ok(r == ERROR_MORE_DATA, "wrong error\n"); - ok(sz == 5, "MsiRecordGetString returned the wrong length\n"); - ok(0==memcmp(bufW,strW,8), "MsiRecordGetString returned the wrong string\n"); - - sz = 0; - bufW[0] = 'x'; - r = MsiRecordGetStringW(h,0,bufW,&sz); - ok(r == ERROR_MORE_DATA, "wrong error\n"); - ok(sz == 5, "MsiRecordGetString returned the wrong length\n"); - ok('x'==bufW[0], "MsiRecordGetString returned the wrong string\n"); - - memset(buf, 0, sizeof buf); - sz = 5; - r = MsiRecordGetStringA(h,0,buf,&sz); - ok(r == ERROR_MORE_DATA, "wrong error\n"); - ok(sz == 5, "MsiRecordGetString returned the wrong length\n"); - ok(0==memcmp(buf,str,4), "MsiRecordGetString returned the wrong string\n"); - - sz = 0; - buf[0] = 'x'; - r = MsiRecordGetStringA(h,0,buf,&sz); - ok(r == ERROR_MORE_DATA, "wrong error\n"); - ok(sz == 5, "MsiRecordGetString returned the wrong length\n"); - ok('x'==buf[0], "MsiRecordGetString returned the wrong string\n"); - - /* same record, check we can wipe all the data */ - r = MsiRecordClearData(h); - ok(r == ERROR_SUCCESS, "Failed to clear record\n"); - r = MsiRecordClearData(h); - ok(r == ERROR_SUCCESS, "Failed to clear record again\n"); - r = MsiRecordIsNull(h,0); - ok(r, "cleared record wasn't null\n"); - - /* same record, try converting strings to integers */ - i = MsiRecordSetString(h,0,"42"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == 42, "should get invalid integer\n"); - i = MsiRecordSetString(h,0,"-42"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == -42, "should get invalid integer\n"); - i = MsiRecordSetString(h,0," 42"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == MSI_NULL_INTEGER, "should get invalid integer\n"); - i = MsiRecordSetString(h,0,"42 "); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == MSI_NULL_INTEGER, "should get invalid integer\n"); - i = MsiRecordSetString(h,0,"42.0"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == MSI_NULL_INTEGER, "should get invalid integer\n"); - i = MsiRecordSetString(h,0,"0x42"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == MSI_NULL_INTEGER, "should get invalid integer\n"); - i = MsiRecordSetString(h,0,"1000000000000000"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == -1530494976, "should get truncated integer\n"); - i = MsiRecordSetString(h,0,"2147483647"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == 2147483647, "should get maxint\n"); - i = MsiRecordSetString(h,0,"-2147483647"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == -2147483647, "should get -maxint-1\n"); - i = MsiRecordSetString(h,0,"4294967297"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == 1, "should get one\n"); - i = MsiRecordSetString(h,0,"foo"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == MSI_NULL_INTEGER, "should get zero\n"); - i = MsiRecordSetString(h,0,""); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == MSI_NULL_INTEGER, "should get zero\n"); - i = MsiRecordSetString(h,0,"+1"); - ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); - i = MsiRecordGetInteger(h, 0); - ok(i == MSI_NULL_INTEGER, "should get zero\n"); - - /* same record, try converting integers to strings */ - r = MsiRecordSetInteger(h, 0, 32); - ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 32\n"); - sz = 1; - r = MsiRecordGetString(h, 0, NULL, &sz); - ok(r == ERROR_SUCCESS, "failed to get string from integer\n"); - ok(sz == 2, "length wrong\n"); - buf[0]=0; - sz = sizeof buf; - r = MsiRecordGetString(h, 0, buf, &sz); - ok(r == ERROR_SUCCESS, "failed to get string from integer\n"); - ok(0==strcmp(buf,"32"), "failed to get string from integer\n"); - r = MsiRecordSetInteger(h, 0, -32); - ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 32\n"); - buf[0]=0; - sz = 1; - r = MsiRecordGetString(h, 0, NULL, &sz); - ok(r == ERROR_SUCCESS, "failed to get string from integer\n"); - ok(sz == 3, "length wrong\n"); - sz = sizeof buf; - r = MsiRecordGetString(h, 0, buf, &sz); - ok(r == ERROR_SUCCESS, "failed to get string from integer\n"); - ok(0==strcmp(buf,"-32"), "failed to get string from integer\n"); - buf[0]=0; - - /* same record, now try streams */ - r = MsiRecordSetStream(h, 0, NULL); - ok(r == ERROR_INVALID_PARAMETER, "set NULL stream\n"); - sz = sizeof buf; - r = MsiRecordReadStream(h, 0, buf, &sz); - ok(r == ERROR_INVALID_DATATYPE, "read non-stream type\n"); - ok(sz == sizeof buf, "set sz\n"); - r = MsiRecordDataSize( h, -1); - ok(r == 0,"MsiRecordDataSize returned wrong size\n"); - r = MsiRecordDataSize( h, 0); - ok(r == 4,"MsiRecordDataSize returned wrong size\n"); - - /* same record, now close it */ - r = MsiCloseHandle(h); - ok(r == ERROR_SUCCESS, "Failed to close handle\n"); - - /* now try streams in a new record - need to create a file to play with */ - r = create_temp_file(filename); - if(!r) - return; - - /* streams can't be inserted in field 0 for some reason */ - h = MsiCreateRecord(2); - ok(h, "couldn't create a two field record\n"); - r = MsiRecordSetStream(h, 0, filename); - ok(r == ERROR_INVALID_PARAMETER, "added stream to field 0\n"); - r = MsiRecordSetStream(h, 1, filename); - ok(r == ERROR_SUCCESS, "failed to add stream to record\n"); - r = MsiRecordReadStream(h, 1, buf, NULL); - ok(r == ERROR_INVALID_PARAMETER, "should return error\n"); - /* http://test.winehq.org/data/200503181000/98_jmelgarejo98casa/msi:record.txt */ - DeleteFile(filename); /* Windows 98 doesn't like this at all, so don't check return. */ - r = MsiRecordReadStream(h, 1, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "should return error\n"); - sz = sizeof buf; - r = MsiRecordReadStream(h, 1, NULL, &sz); - ok(r == ERROR_SUCCESS, "failed to read stream\n"); - ok(sz==26,"couldn't get size of stream\n"); - sz = 0; - r = MsiRecordReadStream(h, 1, buf, &sz); - ok(r == ERROR_SUCCESS, "failed to read stream\n"); - ok(sz==0,"short read\n"); - sz = sizeof buf; - r = MsiRecordReadStream(h, 1, buf, &sz); - ok(r == ERROR_SUCCESS, "failed to read stream\n"); - ok(sz==sizeof buf,"short read\n"); - ok(!strncmp(buf,"abcdefghij",10), "read the wrong thing\n"); - sz = sizeof buf; - r = MsiRecordReadStream(h, 1, buf, &sz); - ok(r == ERROR_SUCCESS, "failed to read stream\n"); - ok(sz==sizeof buf,"short read\n"); - ok(!strncmp(buf,"klmnopqrst",10), "read the wrong thing\n"); - memset(buf,0,sizeof buf); - sz = sizeof buf; - r = MsiRecordReadStream(h, 1, buf, &sz); - ok(r == ERROR_SUCCESS, "failed to read stream\n"); - ok(sz==6,"short read\n"); - ok(!strcmp(buf,"uvwxyz"), "read the wrong thing\n"); - memset(buf,0,sizeof buf); - sz = sizeof buf; - r = MsiRecordReadStream(h, 1, buf, &sz); - ok(r == ERROR_SUCCESS, "failed to read stream\n"); - ok(sz==0,"size non-zero at end of stream\n"); - ok(buf[0]==0, "read something at end of the stream\n"); - r = MsiRecordSetStream(h, 1, NULL); - ok(r == ERROR_SUCCESS, "failed to reset stream\n"); - sz = 0; - r = MsiRecordReadStream(h, 1, NULL, &sz); - ok(r == ERROR_SUCCESS, "bytes left wrong after reset\n"); - ok(sz==26,"couldn't get size of stream\n"); - r = MsiRecordDataSize(h,1); - ok(r == 26,"MsiRecordDataSize returned wrong size\n"); - - /* now close the stream record */ - r = MsiCloseHandle(h); - ok(r == ERROR_SUCCESS, "Failed to close handle\n"); - DeleteFile(filename); /* Delete it for sure, when everything else is closed. */ -} - -static void test_MsiRecordGetString(void) -{ - MSIHANDLE rec; - CHAR buf[MAX_PATH]; - DWORD sz; - UINT r; - - rec = MsiCreateRecord(2); - ok(rec != 0, "Expected a valid handle\n"); - - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiRecordGetString(rec, 1, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - sz = MAX_PATH; - lstrcpyA(buf, "apple"); - r = MsiRecordGetString(rec, 10, buf, &sz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); - ok(sz == 0, "Expected 0, got %d\n", sz); - - MsiCloseHandle(rec); -} - -START_TEST(record) -{ - test_msirecord(); - test_MsiRecordGetString(); -} diff --git a/rostests/winetests/msi/source.c b/rostests/winetests/msi/source.c deleted file mode 100644 index 148ea40382c..00000000000 --- a/rostests/winetests/msi/source.c +++ /dev/null @@ -1,3329 +0,0 @@ -/* - * Tests for MSI Source functions - * - * Copyright (C) 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 - */ - -#define _WIN32_MSI 300 - -#include - -#include -#include -#include -#include -#include - -#include "wine/test.h" - -static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*); -static UINT (WINAPI *pMsiSourceListAddMediaDiskA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCSTR, LPCSTR); -static UINT (WINAPI *pMsiSourceListAddSourceExA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, DWORD); -static UINT (WINAPI *pMsiSourceListEnumMediaDisksA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD, LPSTR, - LPDWORD, LPSTR, LPDWORD); -static UINT (WINAPI *pMsiSourceListEnumSourcesA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPSTR, LPDWORD); -static UINT (WINAPI *pMsiSourceListGetInfoA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD); -static UINT (WINAPI *pMsiSourceListSetInfoA) - (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD,LPCSTR, LPCSTR); -static UINT (WINAPI *pMsiSourceListAddSourceA) - (LPCSTR, LPCSTR, DWORD, LPCSTR); - -static void init_functionpointers(void) -{ - HMODULE hmsi = GetModuleHandleA("msi.dll"); - HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll"); - -#define GET_PROC(dll, func) \ - p ## func = (void *)GetProcAddress(dll, #func); \ - if(!p ## func) \ - trace("GetProcAddress(%s) failed\n", #func); - - GET_PROC(hmsi, MsiSourceListAddMediaDiskA) - GET_PROC(hmsi, MsiSourceListAddSourceExA) - GET_PROC(hmsi, MsiSourceListEnumMediaDisksA) - GET_PROC(hmsi, MsiSourceListEnumSourcesA) - GET_PROC(hmsi, MsiSourceListGetInfoA) - GET_PROC(hmsi, MsiSourceListSetInfoA) - GET_PROC(hmsi, MsiSourceListAddSourceA) - - GET_PROC(hadvapi32, ConvertSidToStringSidA) - -#undef GET_PROC -} - -/* copied from dlls/msi/registry.c */ -static BOOL squash_guid(LPCWSTR in, LPWSTR out) -{ - DWORD i,n=1; - GUID guid; - - if (FAILED(CLSIDFromString((LPOLESTR)in, &guid))) - return FALSE; - - for(i=0; i<8; i++) - out[7-i] = in[n++]; - n++; - for(i=0; i<4; i++) - out[11-i] = in[n++]; - n++; - for(i=0; i<4; i++) - out[15-i] = in[n++]; - n++; - for(i=0; i<2; i++) - { - out[17+i*2] = in[n++]; - out[16+i*2] = in[n++]; - } - n++; - for( ; i<8; i++) - { - out[17+i*2] = in[n++]; - out[16+i*2] = in[n++]; - } - out[32]=0; - return TRUE; -} - -static void create_test_guid(LPSTR prodcode, LPSTR squashed) -{ - WCHAR guidW[MAX_PATH]; - WCHAR squashedW[MAX_PATH]; - GUID guid; - HRESULT hr; - int size; - - hr = CoCreateGuid(&guid); - ok(hr == S_OK, "Expected S_OK, got %d\n", hr); - - size = StringFromGUID2(&guid, (LPOLESTR)guidW, MAX_PATH); - ok(size == 39, "Expected 39, got %d\n", hr); - - WideCharToMultiByte(CP_ACP, 0, guidW, size, prodcode, MAX_PATH, NULL, NULL); - squash_guid(guidW, squashedW); - WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL); -} - -static int get_user_sid(LPSTR *usersid) -{ - HANDLE token; - BYTE buf[1024]; - DWORD size; - PTOKEN_USER user; - BOOL rc; - - rc=OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token); - if (!rc && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return 0; - size = sizeof(buf); - GetTokenInformation(token, TokenUser, (void *)buf, size, &size); - user = (PTOKEN_USER)buf; - pConvertSidToStringSidA(user->User.Sid, usersid); - return 1; -} - -static void check_reg_str(HKEY prodkey, LPCSTR name, LPCSTR expected, BOOL bcase, DWORD line) -{ - char val[MAX_PATH]; - DWORD size, type; - LONG res; - - size = MAX_PATH; - val[0] = '\0'; - res = RegQueryValueExA(prodkey, name, NULL, &type, (LPBYTE)val, &size); - - if (res != ERROR_SUCCESS || (type != REG_SZ && type != REG_EXPAND_SZ)) - { - ok_(__FILE__, line)(FALSE, "Key doesn't exist or wrong type\n"); - return; - } - - if (!expected) - ok_(__FILE__, line)(lstrlenA(val) == 0, "Expected empty string, got %s\n", val); - else - { - if (bcase) - ok_(__FILE__, line)(!lstrcmpA(val, expected), "Expected %s, got %s\n", expected, val); - else - ok_(__FILE__, line)(!lstrcmpiA(val, expected), "Expected %s, got %s\n", expected, val); - } -} - -#define CHECK_REG_STR(prodkey, name, expected) \ - check_reg_str(prodkey, name, expected, TRUE, __LINE__); - -static void test_MsiSourceListGetInfo(void) -{ - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - CHAR value[MAX_PATH]; - LPSTR usersid; - LPCSTR data; - LONG res; - UINT r; - HKEY userkey, hkey, media; - DWORD size; - - if (!pMsiSourceListGetInfoA) - { - skip("Skipping MsiSourceListGetInfoA tests\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - if (!get_user_sid(&usersid)) - { - skip("User SID not available -> skipping MsiSourceListGetInfoA tests\n"); - return; - } - - /* NULL szProductCodeOrPatchCode */ - r = pMsiSourceListGetInfoA(NULL, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szProductCodeOrPatchCode */ - r = pMsiSourceListGetInfoA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* garbage szProductCodeOrPatchCode */ - r = pMsiSourceListGetInfoA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* szProductCodeOrPatchCode */ - r = pMsiSourceListGetInfoA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid without brackets */ - r = pMsiSourceListGetInfoA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid with brackets */ - r = pMsiSourceListGetInfoA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* same length as guid, but random */ - r = pMsiSourceListGetInfoA("ADKD-2KSDFF2-DKK1KNFJASD9GLKWME-1I3KAD", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* invalid context */ - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_NONE, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* another invalid context */ - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_ALLUSERMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* yet another invalid context */ - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_ALL, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* mix two valid contexts */ - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* invalid option */ - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - 4, INSTALLPROPERTY_PACKAGENAME, NULL, NULL); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* NULL property */ - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, NULL, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty property */ - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, "", NULL, NULL); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* value is non-NULL while size is NULL */ - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, value, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* size is non-NULL while value is NULL */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(size == 0, "Expected 0, got %d\n", size); - - data = "msitest.msi"; - res = RegSetValueExA(hkey, "PackageName", 0, REG_SZ, (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* PackageName value exists */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(size == 11, "Expected 11, got %d\n", size); - - /* read the value, don't change size */ - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, value, &size); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected 'aaa', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - /* read the value, fix size */ - size++; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "msitest.msi"), "Expected 'msitest.msi', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - /* empty property now that product key exists */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, "", NULL, &size); - ok(r == ERROR_UNKNOWN_PROPERTY, "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - /* nonexistent property now that product key exists */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, "nonexistent", NULL, &size); - ok(r == ERROR_UNKNOWN_PROPERTY, "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - data = "tester"; - res = RegSetValueExA(hkey, "nonexistent", 0, REG_SZ, (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* nonexistent property now that nonexistent value exists */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, "nonexistent", NULL, &size); - ok(r == ERROR_UNKNOWN_PROPERTY, "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - /* invalid option now that product key exists */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - 4, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(size == 11, "Expected 11, got %d\n", size); - - /* INSTALLPROPERTY_MEDIAPACKAGEPATH, media key does not exist */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_MEDIAPACKAGEPATH, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value); - ok(size == 0, "Expected 0, got %d\n", size); - - res = RegCreateKeyA(hkey, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - data = "path"; - res = RegSetValueExA(media, "MediaPackage", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_MEDIAPACKAGEPATH */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_MEDIAPACKAGEPATH, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "path"), "Expected \"path\", got \"%s\"\n", value); - ok(size == 4, "Expected 4, got %d\n", size); - - /* INSTALLPROPERTY_DISKPROMPT */ - data = "prompt"; - res = RegSetValueExA(media, "DiskPrompt", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_DISKPROMPT, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "prompt"), "Expected \"prompt\", got \"%s\"\n", value); - ok(size == 6, "Expected 6, got %d\n", size); - - data = ""; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDSOURCE, source is empty */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value); - ok(size == 0, "Expected 0, got %d\n", size); - - data = "source"; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDSOURCE */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "source"), "Expected \"source\", got \"%s\"\n", value); - ok(size == 6, "Expected 6, got %d\n", size); - - /* INSTALLPROPERTY_LASTUSEDSOURCE, size is too short */ - size = 4; - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCE, - value, &size); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got \"%s\"\n", value); - ok(size == 6, "Expected 6, got %d\n", size); - - /* INSTALLPROPERTY_LASTUSEDSOURCE, size is exactly 6 */ - size = 6; - lstrcpyA(value, "aaa"); - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCE, - value, &size); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got \"%s\"\n", value); - ok(size == 6, "Expected 6, got %d\n", size); - - data = "a;source"; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDSOURCE, one semi-colon */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "source"), "Expected \"source\", got \"%s\"\n", value); - ok(size == 6, "Expected 6, got %d\n", size); - - data = "a:source"; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDSOURCE, one colon */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "a:source"), "Expected \"a:source\", got \"%s\"\n", value); - ok(size == 8, "Expected 8, got %d\n", size); - - /* INSTALLPROPERTY_LASTUSEDTYPE, invalid source format */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value); - ok(size == 0, "Expected 0, got %d\n", size); - - data = "x;y;z"; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDTYPE, invalid source format */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, ""), "Expected \"\", got \"%s\"\n", value); - ok(size == 0, "Expected 0, got %d\n", size); - - data = "n;y;z"; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDTYPE */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value); - ok(size == 1, "Expected 1, got %d\n", size); - - data = "negatory"; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDTYPE */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "n"), "Expected \"n\", got \"%s\"\n", value); - ok(size == 1, "Expected 1, got %d\n", size); - - data = "megatron"; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDTYPE */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "m"), "Expected \"m\", got \"%s\"\n", value); - ok(size == 1, "Expected 1, got %d\n", size); - - data = "useless"; - res = RegSetValueExA(hkey, "LastUsedSource", 0, REG_SZ, - (const BYTE *)data, lstrlenA(data) + 1); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* INSTALLPROPERTY_LASTUSEDTYPE */ - size = MAX_PATH; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDTYPE, - value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "u"), "Expected \"u\", got \"%s\"\n", value); - ok(size == 1, "Expected 1, got %d\n", size); - - RegDeleteValueA(media, "MediaPackage"); - RegDeleteValueA(media, "DiskPrompt"); - RegDeleteKeyA(media, ""); - RegDeleteValueA(hkey, "LastUsedSource"); - RegDeleteValueA(hkey, "nonexistent"); - RegDeleteValueA(hkey, "PackageName"); - RegDeleteKeyA(hkey, ""); - RegDeleteKeyA(userkey, ""); - RegCloseKey(hkey); - RegCloseKey(userkey); - - /* try a patch */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PATCH, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_UNKNOWN_PATCH, "Expected ERROR_UNKNOWN_PATCH, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Patches\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* patch key exists - * NOTE: using prodcode guid, but it really doesn't matter - */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PATCH, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - res = RegCreateKeyA(userkey, "SourceList", &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - size = 0xdeadbeef; - r = pMsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PATCH, INSTALLPROPERTY_PACKAGENAME, NULL, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(size == 0, "Expected 0, got %d\n", size); - - RegDeleteKeyA(hkey, ""); - RegDeleteKeyA(userkey, ""); - RegCloseKey(hkey); - RegCloseKey(userkey); -} - -static void test_MsiSourceListAddSourceEx(void) -{ - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - CHAR value[MAX_PATH]; - LPSTR usersid; - LONG res; - UINT r; - HKEY prodkey, userkey, hkey; - HKEY url, net; - DWORD size; - - if (!pMsiSourceListAddSourceExA) - { - skip("Skipping MsiSourceListAddSourceExA tests\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - if (!get_user_sid(&usersid)) - { - skip("User SID not available -> skipping MsiSourceListAddSourceExA tests\n"); - return; - } - - /* GetLastError is not set by the function */ - - /* NULL szProductCodeOrPatchCode */ - r = pMsiSourceListAddSourceExA(NULL, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szProductCodeOrPatchCode */ - r = pMsiSourceListAddSourceExA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* garbage szProductCodeOrPatchCode */ - r = pMsiSourceListAddSourceExA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid without brackets */ - r = pMsiSourceListAddSourceExA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA", usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid with brackets */ - r = pMsiSourceListAddSourceExA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - RegCloseKey(url); - - /* SourceList key exists */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - res = RegOpenKeyA(userkey, "SourceList\\URL", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - res = RegQueryValueExA(url, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "C:\\source/"), "Expected 'C:\\source/', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - /* add another source, index 0 */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "another", 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - size = MAX_PATH; - res = RegQueryValueExA(url, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "C:\\source/"), "Expected 'C:\\source/', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "2", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "another/"), "Expected 'another/', got %s\n", value); - ok(size == 9, "Expected 9, got %d\n", size); - - /* add another source, index 1 */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "third/", 1); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - size = MAX_PATH; - res = RegQueryValueExA(url, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "third/"), "Expected 'third/', got %s\n", value); - ok(size == 7, "Expected 7, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "2", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "C:\\source/"), "Expected 'C:\\source/', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "3", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "another/"), "Expected 'another/', got %s\n", value); - ok(size == 9, "Expected 9, got %d\n", size); - - /* add another source, index > N */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "last/", 5); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - size = MAX_PATH; - res = RegQueryValueExA(url, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "third/"), "Expected 'third/', got %s\n", value); - ok(size == 7, "Expected 7, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "2", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "C:\\source/"), "Expected 'C:\\source/', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "3", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "another/"), "Expected 'another/', got %s\n", value); - ok(size == 9, "Expected 9, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "4", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "last/"), "Expected 'last/', got %s\n", value); - ok(size == 6, "Expected 6, got %d\n", size); - - /* just MSISOURCETYPE_NETWORK */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSISOURCETYPE_NETWORK, "source", 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - res = RegOpenKeyA(userkey, "SourceList\\Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - res = RegQueryValueExA(net, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "source\\"), "Expected 'source\\', got %s\n", value); - ok(size == 8, "Expected 8, got %d\n", size); - - /* just MSISOURCETYPE_URL */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSISOURCETYPE_URL, "source", 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - size = MAX_PATH; - res = RegQueryValueExA(url, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "third/"), "Expected 'third/', got %s\n", value); - ok(size == 7, "Expected 7, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "2", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "C:\\source/"), "Expected 'C:\\source/', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "3", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "another/"), "Expected 'another/', got %s\n", value); - ok(size == 9, "Expected 9, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "4", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "last/"), "Expected 'last/', got %s\n", value); - ok(size == 6, "Expected 6, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "5", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "source/"), "Expected 'source/', got %s\n", value); - ok(size == 8, "Expected 8, got %d\n", size); - - /* NULL szUserSid */ - r = pMsiSourceListAddSourceExA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSISOURCETYPE_NETWORK, "nousersid", 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - size = MAX_PATH; - res = RegQueryValueExA(net, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "source\\"), "Expected 'source\\', got %s\n", value); - ok(size == 8, "Expected 8, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(net, "2", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "nousersid\\"), "Expected 'nousersid\\', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - /* invalid options, must have source type */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, "source", 0); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PATCH, "source", 0); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* NULL szSource */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSISOURCETYPE_URL, NULL, 1); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szSource */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSISOURCETYPE_URL, "", 1); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* MSIINSTALLCONTEXT_USERMANAGED, non-NULL szUserSid */ - - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product key exists */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(prodkey, "SourceList", &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - RegCloseKey(hkey); - - /* SourceList exists */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - res = RegOpenKeyA(prodkey, "SourceList\\URL", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - res = RegQueryValueExA(url, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "C:\\source/"), "Expected 'C:\\source/', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - RegCloseKey(url); - - /* MSIINSTALLCONTEXT_USERMANAGED, NULL szUserSid */ - - r = pMsiSourceListAddSourceExA(prodcode, NULL, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "another", 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - res = RegOpenKeyA(prodkey, "SourceList\\URL", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - res = RegQueryValueExA(url, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "C:\\source/"), "Expected 'C:\\source/', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - size = MAX_PATH; - res = RegQueryValueExA(url, "2", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "another/"), "Expected 'another/', got %s\n", value); - ok(size == 9, "Expected 9, got %d\n", size); - - RegCloseKey(url); - RegCloseKey(prodkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - /* szUserSid must be NULL for MSIINSTALLCONTEXT_MACHINE */ - r = pMsiSourceListAddSourceExA(prodcode, usersid, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - r = pMsiSourceListAddSourceExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* product key exists */ - r = pMsiSourceListAddSourceExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(prodkey, "SourceList", &hkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - RegCloseKey(hkey); - - /* SourceList exists */ - r = pMsiSourceListAddSourceExA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, "C:\\source", 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - res = RegOpenKeyA(prodkey, "SourceList\\URL", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - size = MAX_PATH; - res = RegQueryValueExA(url, "1", NULL, NULL, (LPBYTE)value, &size); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - ok(!lstrcmpA(value, "C:\\source/"), "Expected 'C:\\source/', got %s\n", value); - ok(size == 11, "Expected 11, got %d\n", size); - - RegCloseKey(url); - RegCloseKey(prodkey); - HeapFree(GetProcessHeap(), 0, usersid); -} - -static void test_MsiSourceListEnumSources(void) -{ - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - CHAR value[MAX_PATH]; - LPSTR usersid; - LONG res; - UINT r; - HKEY prodkey, userkey; - HKEY url, net, source; - DWORD size; - - if (!pMsiSourceListEnumSourcesA) - { - skip("MsiSourceListEnumSourcesA is not available\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - if (!get_user_sid(&usersid)) - { - skip("User SID not available -> skipping MsiSourceListEnumSourcesA tests\n"); - return; - } - - /* GetLastError is not set by the function */ - - /* NULL szProductCodeOrPatchCode */ - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA(NULL, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - /* empty szProductCodeOrPatchCode */ - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - /* garbage szProductCodeOrPatchCode */ - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - /* guid without brackets */ - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - /* guid with brackets */ - size = 0xdeadbeef; - r = pMsiSourceListEnumSourcesA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(size == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", size); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(source, "URL", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URL key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegSetValueExA(url, "1", 0, REG_SZ, (LPBYTE)"first", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegSetValueExA(url, "2", 0, REG_SZ, (LPBYTE)"second", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - res = RegSetValueExA(url, "4", 0, REG_SZ, (LPBYTE)"fourth", 7); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* sources exist */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - /* try index 0 again */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - /* both szSource and pcchSource are NULL, index 0 */ - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* both szSource and pcchSource are NULL, index 1 */ - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 1, NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* size is exactly 5 */ - size = 5; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected \"aaa\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - /* szSource is non-NULL while pcchSource is NULL */ - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected \"aaa\", got %s\n", value); - - /* try index 1 after failure */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 1, value, &size); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected \"aaa\", got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* reset the enumeration */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - /* try index 1 */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 1, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "second"), "Expected \"second\", got %s\n", value); - ok(size == 6, "Expected 6, got %d\n", size); - - /* try index 1 again */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 1, value, &size); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* try index 2 */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 2, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* try index < 0 */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, -1, value, &size); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* NULL szUserSid */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - /* invalid dwOptions, must be one of MSICODE_ and MSISOURCETYPE_ */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, value, &size); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* invalid dwOptions, must be one of MSICODE_ and MSISOURCETYPE_ */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PATCH, 0, value, &size); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* invalid dwOptions, must be one of MSICODE_ and MSISOURCETYPE_ */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSICODE_PATCH | MSISOURCETYPE_URL, - 0, value, &size); - ok(r == ERROR_UNKNOWN_PATCH, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* invalid dwOptions, must be one of MSICODE_ and MSISOURCETYPE_ */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK | MSISOURCETYPE_URL, - 0, value, &size); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - RegDeleteValueA(url, "1"); - RegDeleteValueA(url, "2"); - RegDeleteValueA(url, "4"); - RegDeleteKeyA(url, ""); - RegCloseKey(url); - - /* SourceList key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Net key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegSetValueExA(net, "1", 0, REG_SZ, (LPBYTE)"first", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* sources exist */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - RegDeleteValueA(net, "1"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(source, "URL", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URL key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegSetValueExA(url, "1", 0, REG_SZ, (LPBYTE)"first", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* sources exist */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - /* NULL szUserSid */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - RegDeleteValueA(url, "1"); - RegDeleteKeyA(url, ""); - RegCloseKey(url); - - /* SourceList key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Net key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegSetValueExA(net, "1", 0, REG_SZ, (LPBYTE)"first", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* sources exist */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - RegDeleteValueA(net, "1"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - /* szUserSid is non-NULL */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, usersid, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - /* szUserSid is non-NULL */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(prodkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(source, "URL", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* URL key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegSetValueExA(url, "1", 0, REG_SZ, (LPBYTE)"first", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* sources exist */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - /* NULL szUserSid */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_URL, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - RegDeleteValueA(url, "1"); - RegDeleteKeyA(url, ""); - RegCloseKey(url); - - /* SourceList key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegCreateKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Net key exists */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(!lstrcmpA(value, "aaa"), "Expected value to be unchanged, got %s\n", value); - ok(size == MAX_PATH, "Expected MAX_PATH, got %d\n", size); - - res = RegSetValueExA(net, "1", 0, REG_SZ, (LPBYTE)"first", 6); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* sources exist */ - size = MAX_PATH; - lstrcpyA(value, "aaa"); - r = pMsiSourceListEnumSourcesA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, 0, value, &size); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(value, "first"), "Expected \"first\", got %s\n", value); - ok(size == 5, "Expected 5, got %d\n", size); - - RegDeleteValueA(net, "1"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); -} - -static void test_MsiSourceListSetInfo(void) -{ - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - HKEY prodkey, userkey; - HKEY net, url, media, source; - LPSTR usersid; - LONG res; - UINT r; - - if (!pMsiSourceListSetInfoA) - { - skip("MsiSourceListSetInfoA is not available\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - if (!get_user_sid(&usersid)) - { - skip("User SID not available -> skipping MsiSourceListSetInfoA tests\n"); - return; - } - - /* GetLastError is not set by the function */ - - /* NULL szProductCodeOrPatchCode */ - r = pMsiSourceListSetInfoA(NULL, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szProductCodeOrPatchCode */ - r = pMsiSourceListSetInfoA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* garbage szProductCodeOrPatchCode */ - r = pMsiSourceListSetInfoA("garbage", usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid without brackets */ - r = pMsiSourceListSetInfoA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid with brackets */ - r = pMsiSourceListSetInfoA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* dwOptions is MSICODE_PRODUCT */ - r = pMsiSourceListSetInfoA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* dwOptions is MSICODE_PATCH */ - r = pMsiSourceListSetInfoA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PATCH, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_UNKNOWN_PATCH, "Expected ERROR_UNKNOWN_PATCH, got %d\n", r); - - /* dwOptions is both MSICODE_PRODUCT and MSICODE_PATCH */ - r = pMsiSourceListSetInfoA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSICODE_PATCH | MSISOURCETYPE_URL, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_UNKNOWN_PATCH, "Expected ERROR_UNKNOWN_PATCH, got %d\n", r); - - /* dwOptions has both MSISOURCETYPE_NETWORK and MSISOURCETYPE_URL */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK | MSISOURCETYPE_URL, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* LastUsedSource and dwOptions has both - * MSISOURCETYPE_NETWORK and MSISOURCETYPE_URL - */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK | MSISOURCETYPE_URL, - INSTALLPROPERTY_LASTUSEDSOURCE, "path"); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* LastUsedSource and dwOptions has no source type */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_LASTUSEDSOURCE, "path"); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists, no source type */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Media key is created by MsiSourceListSetInfo */ - res = RegOpenKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - CHECK_REG_STR(media, "MediaPackage", "path"); - - /* set the info again */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path2"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - CHECK_REG_STR(media, "MediaPackage", "path2"); - - /* NULL szProperty */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - NULL, "path"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szProperty */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - "", "path"); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - - /* NULL szValue */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, NULL); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - - /* empty szValue */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, ""); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - CHECK_REG_STR(media, "MediaPackage", ""); - - /* INSTALLPROPERTY_MEDIAPACKAGEPATH, MSISOURCETYPE_NETWORK */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* INSTALLPROPERTY_MEDIAPACKAGEPATH, MSISOURCETYPE_URL */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* INSTALLPROPERTY_DISKPROMPT */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_DISKPROMPT, "prompt"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - CHECK_REG_STR(media, "DiskPrompt", "prompt"); - - /* INSTALLPROPERTY_DISKPROMPT, MSISOURCETYPE_NETWORK */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_DISKPROMPT, "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* INSTALLPROPERTY_DISKPROMPT, MSISOURCETYPE_URL */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, - INSTALLPROPERTY_DISKPROMPT, "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* INSTALLPROPERTY_LASTUSEDSOURCE */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_LASTUSEDSOURCE, "source"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* INSTALLPROPERTY_LASTUSEDSOURCE, MSISOURCETYPE_NETWORK */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_LASTUSEDSOURCE, "source"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Net key is created by MsiSourceListSetInfo */ - res = RegOpenKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - CHECK_REG_STR(net, "1", "source\\") - CHECK_REG_STR(source, "LastUsedSource", "n;1;source"); - - /* source has forward slash */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_LASTUSEDSOURCE, "source/"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - CHECK_REG_STR(net, "1", "source\\"); - CHECK_REG_STR(net, "2", "source/\\"); - CHECK_REG_STR(source, "LastUsedSource", "n;2;source/"); - - /* INSTALLPROPERTY_LASTUSEDSOURCE, MSISOURCETYPE_URL */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, - INSTALLPROPERTY_LASTUSEDSOURCE, "source"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* URL key is created by MsiSourceListSetInfo */ - res = RegOpenKeyA(source, "URL", &url); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - CHECK_REG_STR(url, "1", "source/"); - CHECK_REG_STR(source, "LastUsedSource", "u;1;source"); - - /* source has backslash */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, - INSTALLPROPERTY_LASTUSEDSOURCE, "source\\"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - CHECK_REG_STR(url, "1", "source/"); - CHECK_REG_STR(url, "2", "source\\/"); - CHECK_REG_STR(source, "LastUsedSource", "u;2;source\\"); - - /* INSTALLPROPERTY_LASTUSEDSOURCE, MSISOURCETYPE_MEDIA */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_MEDIA, - INSTALLPROPERTY_LASTUSEDSOURCE, "source"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* INSTALLPROPERTY_PACKAGENAME */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_PACKAGENAME, "name"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - CHECK_REG_STR(source, "PackageName", "name"); - - /* INSTALLPROPERTY_PACKAGENAME, MSISOURCETYPE_NETWORK */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - INSTALLPROPERTY_PACKAGENAME, "name"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* INSTALLPROPERTY_PACKAGENAME, MSISOURCETYPE_URL */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, - INSTALLPROPERTY_PACKAGENAME, "name"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* INSTALLPROPERTY_LASTUSEDTYPE */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_LASTUSEDTYPE, "type"); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - - /* definitely unknown property */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, MSICODE_PRODUCT, - "unknown", "val"); - ok(r == ERROR_UNKNOWN_PROPERTY, - "Expected ERROR_UNKNOWN_PROPERTY, got %d\n", r); - - RegDeleteValueA(net, "1"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - RegDeleteValueA(url, "1"); - RegDeleteKeyA(url, ""); - RegCloseKey(url); - RegDeleteValueA(media, "MediaPackage"); - RegDeleteValueA(media, "DiskPrompt"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteValueA(source, "PackageName"); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists, no source type */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_USERMANAGED, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Media key is created by MsiSourceListSetInfo */ - res = RegOpenKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - CHECK_REG_STR(media, "MediaPackage", "path"); - - RegDeleteValueA(media, "MediaPackage"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(prodkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists, no source type */ - r = pMsiSourceListSetInfoA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Media key is created by MsiSourceListSetInfo */ - res = RegOpenKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - CHECK_REG_STR(media, "MediaPackage", "path"); - - /* szUserSid is non-NULL */ - r = pMsiSourceListSetInfoA(prodcode, usersid, - MSIINSTALLCONTEXT_MACHINE, MSICODE_PRODUCT, - INSTALLPROPERTY_MEDIAPACKAGEPATH, "path"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - RegDeleteValueA(media, "MediaPackage"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); -} - -static void test_MsiSourceListAddMediaDisk(void) -{ - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - HKEY prodkey, userkey; - HKEY media, source; - LPSTR usersid; - LONG res; - UINT r; - - if (!pMsiSourceListAddMediaDiskA) - { - skip("MsiSourceListAddMediaDiskA is not available\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - if (!get_user_sid(&usersid)) - { - skip("User SID not available -> skipping MsiSourceListAddMediaDiskA tests\n"); - return; - } - - /* GetLastError is not set by the function */ - - /* NULL szProductCodeOrPatchCode */ - r = pMsiSourceListAddMediaDiskA(NULL, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szProductCodeOrPatchCode */ - r = pMsiSourceListAddMediaDiskA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* garbage szProductCodeOrPatchCode */ - r = pMsiSourceListAddMediaDiskA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid without brackets */ - r = pMsiSourceListAddMediaDiskA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid with brackets */ - r = pMsiSourceListAddMediaDiskA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* dwOptions has MSISOURCETYPE_NETWORK */ - r = pMsiSourceListAddMediaDiskA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - 1, "label", "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* dwOptions has MSISOURCETYPE_URL */ - r = pMsiSourceListAddMediaDiskA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, - 1, "label", "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* dwOptions has MSISOURCETYPE_MEDIA */ - r = pMsiSourceListAddMediaDiskA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_MEDIA, - 1, "label", "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Media subkey is created by MsiSourceListAddMediaDisk */ - res = RegOpenKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(media, "1", "label;prompt"); - - /* dwDiskId is random */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 42, "label42", "prompt42"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(media, "1", "label;prompt"); - CHECK_REG_STR(media, "42", "label42;prompt42"); - - /* dwDiskId is 0 */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, "label0", "prompt0"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(media, "0", "label0;prompt0"); - CHECK_REG_STR(media, "1", "label;prompt"); - CHECK_REG_STR(media, "42", "label42;prompt42"); - - /* dwDiskId is < 0 */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, -1, "label-1", "prompt-1"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(media, "-1", "label-1;prompt-1"); - CHECK_REG_STR(media, "0", "label0;prompt0"); - CHECK_REG_STR(media, "1", "label;prompt"); - CHECK_REG_STR(media, "42", "label42;prompt42"); - - /* update dwDiskId 1 */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "newlabel", "newprompt"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(media, "-1", "label-1;prompt-1"); - CHECK_REG_STR(media, "0", "label0;prompt0"); - CHECK_REG_STR(media, "1", "newlabel;newprompt"); - CHECK_REG_STR(media, "42", "label42;prompt42"); - - /* update dwDiskId 1, szPrompt is NULL */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "etiqueta", NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(media, "-1", "label-1;prompt-1"); - CHECK_REG_STR(media, "0", "label0;prompt0"); - CHECK_REG_STR(media, "1", "etiqueta;"); - CHECK_REG_STR(media, "42", "label42;prompt42"); - - /* update dwDiskId 1, szPrompt is empty */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "etikett", ""); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* update dwDiskId 1, szVolumeLabel is NULL */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, NULL, "provocar"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(media, "-1", "label-1;prompt-1"); - CHECK_REG_STR(media, "0", "label0;prompt0"); - CHECK_REG_STR(media, "1", ";provocar"); - CHECK_REG_STR(media, "42", "label42;prompt42"); - - /* update dwDiskId 1, szVolumeLabel is empty */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, "", "provoquer"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* szUserSid is NULL */ - r = pMsiSourceListAddMediaDiskA(prodcode, NULL, - MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, NULL, "provoquer"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(media, "-1", "label-1;prompt-1"); - CHECK_REG_STR(media, "0", "label0;prompt0"); - CHECK_REG_STR(media, "1", ";provoquer"); - CHECK_REG_STR(media, "42", "label42;prompt42"); - - RegDeleteValueA(media, "-1"); - RegDeleteValueA(media, "0"); - RegDeleteValueA(media, "1"); - RegDeleteValueA(media, "42"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Media subkey is created by MsiSourceListAddMediaDisk */ - res = RegOpenKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(media, "1", "label;prompt"); - - RegDeleteValueA(media, "1"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* machine product key exists */ - r = pMsiSourceListAddMediaDiskA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(prodkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - r = pMsiSourceListAddMediaDiskA(prodcode, NULL, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Media subkey is created by MsiSourceListAddMediaDisk */ - res = RegOpenKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(media, "1", "label;prompt"); - - /* szUserSid is non-NULL */ - r = pMsiSourceListAddMediaDiskA(prodcode, usersid, - MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT, 1, "label", "prompt"); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - RegDeleteValueA(media, "1"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); -} - -static void test_MsiSourceListEnumMediaDisks(void) -{ - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - CHAR label[MAX_PATH]; - CHAR prompt[MAX_PATH]; - HKEY prodkey, userkey; - HKEY media, source; - DWORD labelsz, promptsz; - LPSTR usersid; - DWORD val; - DWORD id; - LONG res; - UINT r; - - if (!pMsiSourceListEnumMediaDisksA) - { - skip("MsiSourceListEnumMediaDisksA is not available\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - if (!get_user_sid(&usersid)) - { - skip("User SID not available -> skipping MsiSourceListEnumMediaDisksA tests\n"); - return; - } - - /* GetLastError is not set by the function */ - - /* NULL szProductCodeOrPatchCode */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA(NULL, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szProductCodeOrPatchCode */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* garbage szProductCodeOrPatchCode */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid without brackets */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid with brackets */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", - usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_UNKNOWN_PRODUCT, - "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* dwOptions has MSISOURCETYPE_NETWORK */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_NETWORK, - 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* dwOptions has MSISOURCETYPE_URL */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT | MSISOURCETYPE_URL, - 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* dwIndex is non-zero */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - labelsz = sizeof(label); - promptsz = sizeof(prompt); - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = 0xdeadbeef; - lstrcpyA(prompt, "bbb"); - promptsz = 0xdeadbeef; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", promptsz); - - res = RegCreateKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Media key exists */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = 0xdeadbeef; - lstrcpyA(prompt, "bbb"); - promptsz = 0xdeadbeef; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", promptsz); - - res = RegSetValueExA(media, "1", 0, REG_SZ, (LPBYTE)"label;prompt", 13); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* disk exists */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - res = RegSetValueExA(media, "2", 0, REG_SZ, (LPBYTE)"one;two", 8); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* now disk 2 exists, get the sizes */ - id = 0; - labelsz = MAX_PATH; - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, &id, NULL, &labelsz, - NULL, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 2, "Expected 2, got %d\n", id); - ok(labelsz == 3, "Expected 3, got %d\n", labelsz); - ok(promptsz == 3, "Expected 3, got %d\n", promptsz); - - /* now fill in the values */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == MAX_PATH, "Expected MAX_PATH, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == MAX_PATH, "Expected MAX_PATH, got %d\n", promptsz); - - res = RegSetValueExA(media, "4", 0, REG_SZ, (LPBYTE)"three;four", 11); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* disks 1, 2, 4 exist, reset the enumeration */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* disks 1, 2, 4 exist, index 1 */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 2, "Expected 2, got %d\n", id); - ok(!lstrcmpA(label, "one"), "Expected \"one\", got \"%s\"\n", label); - ok(labelsz == 3, "Expected 3, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "two"), "Expected \"two\", got \"%s\"\n", prompt); - ok(promptsz == 3, "Expected 3, got %d\n", promptsz); - - /* disks 1, 2, 4 exist, index 2 */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 2, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 4, "Expected 4, got %d\n", id); - ok(!lstrcmpA(label, "three"), "Expected \"three\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "four"), "Expected \"four\", got \"%s\"\n", prompt); - ok(promptsz == 4, "Expected 4, got %d\n", promptsz); - - /* disks 1, 2, 4 exist, index 3, invalid */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 3, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == MAX_PATH, "Expected MAX_PATH, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == MAX_PATH, "Expected MAX_PATH, got %d\n", promptsz); - - /* disks 1, 2, 4 exist, reset the enumeration */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* try index 0 again */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* jump to index 2 */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 2, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == MAX_PATH, "Expected MAX_PATH, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == MAX_PATH, "Expected MAX_PATH, got %d\n", promptsz); - - /* after error, try index 1 */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 2, "Expected 2, got %d\n", id); - ok(!lstrcmpA(label, "one"), "Expected \"one\", got \"%s\"\n", label); - ok(labelsz == 3, "Expected 3, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "two"), "Expected \"two\", got \"%s\"\n", prompt); - ok(promptsz == 3, "Expected 3, got %d\n", promptsz); - - /* try index 1 again */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 1, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == MAX_PATH, "Expected MAX_PATH, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == MAX_PATH, "Expected MAX_PATH, got %d\n", promptsz); - - /* NULL pdwDiskId */ - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, NULL, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* szVolumeLabel is NULL */ - id = 0; - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, NULL, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* szVolumeLabel and pcchVolumeLabel are NULL */ - id = 0; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, NULL, NULL, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* szVolumeLabel is non-NULL while pcchVolumeLabel is NULL */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, NULL, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* szDiskPrompt is NULL */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - NULL, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* szDiskPrompt and pcchDiskPrompt are NULL */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - NULL, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - - /* szDiskPrompt is non-NULL while pcchDiskPrompt is NULL */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, NULL); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == MAX_PATH, "Expected MAX_PATH, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - - /* pcchVolumeLabel is exactly 5 */ - lstrcpyA(label, "aaa"); - labelsz = 5; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, NULL, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* pcchDiskPrompt is exactly 6 */ - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = 6; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, NULL, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - res = RegSetValueExA(media, "1", 0, REG_SZ, (LPBYTE)"label", 13); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* no semicolon */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "label"), "Expected \"label\", got \"%s\"\n", prompt); - ok(promptsz == 5, "Expected 5, got %d\n", promptsz); - - res = RegSetValueExA(media, "1", 0, REG_SZ, (LPBYTE)"label;", 13); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* semicolon, no disk prompt */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, ""), "Expected \"\", got \"%s\"\n", prompt); - ok(promptsz == 0, "Expected 0, got %d\n", promptsz); - - res = RegSetValueExA(media, "1", 0, REG_SZ, (LPBYTE)";prompt", 13); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* semicolon, label doesn't exist */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, ""), "Expected \"\", got \"%s\"\n", label); - ok(labelsz == 0, "Expected 0, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - res = RegSetValueExA(media, "1", 0, REG_SZ, (LPBYTE)";", 13); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* semicolon, neither label nor disk prompt exist */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - ok(!lstrcmpA(label, ""), "Expected \"\", got \"%s\"\n", label); - ok(labelsz == 0, "Expected 0, got %d\n", labelsz); - ok(!lstrcmpA(prompt, ""), "Expected \"\", got \"%s\"\n", prompt); - ok(promptsz == 0, "Expected 0, got %d\n", promptsz); - - val = 42; - res = RegSetValueExA(media, "1", 0, REG_DWORD, (LPBYTE)&val, sizeof(DWORD)); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* type is REG_DWORD */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 1, "Expected 1, got %d\n", id); - todo_wine - { - ok(!lstrcmpA(label, "#42"), "Expected \"#42\", got \"%s\"\n", label); - ok(labelsz == 3, "Expected 3, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "#42"), "Expected \"#42\", got \"%s\"\n", prompt); - ok(promptsz == 3, "Expected 3, got %d\n", promptsz); - } - - RegDeleteValueA(media, "1"); - RegDeleteValueA(media, "2"); - RegDeleteValueA(media, "4"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = 0xdeadbeef; - lstrcpyA(prompt, "bbb"); - promptsz = 0xdeadbeef; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", promptsz); - - res = RegCreateKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Media key exists */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = 0xdeadbeef; - lstrcpyA(prompt, "bbb"); - promptsz = 0xdeadbeef; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", promptsz); - - res = RegSetValueExA(media, "2", 0, REG_SZ, (LPBYTE)"label;prompt", 13); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* disk exists, but no id 1 */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 2, "Expected 2, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - RegDeleteValueA(media, "2"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* machine product key exists */ - r = pMsiSourceListEnumMediaDisksA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_BAD_CONFIGURATION, - "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(prodkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = 0xdeadbeef; - lstrcpyA(prompt, "bbb"); - promptsz = 0xdeadbeef; - r = pMsiSourceListEnumMediaDisksA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", promptsz); - - res = RegCreateKeyA(source, "Media", &media); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* Media key exists */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = 0xdeadbeef; - lstrcpyA(prompt, "bbb"); - promptsz = 0xdeadbeef; - r = pMsiSourceListEnumMediaDisksA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_NO_MORE_ITEMS, - "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", promptsz); - - res = RegSetValueExA(media, "2", 0, REG_SZ, (LPBYTE)"label;prompt", 13); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* disk exists, but no id 1 */ - id = 0; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, NULL, MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - ok(id == 2, "Expected 2, got %d\n", id); - ok(!lstrcmpA(label, "label"), "Expected \"label\", got \"%s\"\n", label); - ok(labelsz == 5, "Expected 5, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "prompt"), "Expected \"prompt\", got \"%s\"\n", prompt); - ok(promptsz == 6, "Expected 6, got %d\n", promptsz); - - /* szUserSid is non-NULL */ - id = 0xbeef; - lstrcpyA(label, "aaa"); - labelsz = MAX_PATH; - lstrcpyA(prompt, "bbb"); - promptsz = MAX_PATH; - r = pMsiSourceListEnumMediaDisksA(prodcode, usersid, MSIINSTALLCONTEXT_MACHINE, - MSICODE_PRODUCT, 0, &id, label, &labelsz, - prompt, &promptsz); - ok(r == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - ok(id == 0xbeef, "Expected 0xbeef, got %d\n", id); - ok(!lstrcmpA(label, "aaa"), "Expected \"aaa\", got \"%s\"\n", label); - ok(labelsz == MAX_PATH, "Expected MAX_PATH, got %d\n", labelsz); - ok(!lstrcmpA(prompt, "bbb"), "Expected \"bbb\", got \"%s\"\n", prompt); - ok(promptsz == MAX_PATH, "Expected MAX_PATH, got %d\n", promptsz); - - RegDeleteValueA(media, "2"); - RegDeleteKeyA(media, ""); - RegCloseKey(media); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); -} - -static void test_MsiSourceListAddSource(void) -{ - CHAR prodcode[MAX_PATH]; - CHAR prod_squashed[MAX_PATH]; - CHAR keypath[MAX_PATH*2]; - CHAR username[MAX_PATH]; - LPSTR usersid, ptr; - LONG res; - UINT r; - HKEY prodkey, userkey; - HKEY net, source; - DWORD size; - - if (!pMsiSourceListAddSourceA) - { - skip("Skipping MsiSourceListAddSourceA tests\n"); - return; - } - - create_test_guid(prodcode, prod_squashed); - if (!get_user_sid(&usersid)) - { - skip("User SID not available -> skipping MsiSourceListAddSourceA tests\n"); - return; - } - - /* MACHINENAME\username */ - size = MAX_PATH; - GetComputerNameA(username, &size); - lstrcatA(username, "\\"); - ptr = username + lstrlenA(username); - size = MAX_PATH; - GetUserNameA(ptr, &size); - - /* GetLastError is not set by the function */ - - /* NULL szProduct */ - r = pMsiSourceListAddSourceA(NULL, username, 0, "source"); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* empty szProduct */ - r = pMsiSourceListAddSourceA("", username, 0, "source"); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* garbage szProduct */ - r = pMsiSourceListAddSourceA("garbage", username, 0, "source"); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid without brackets */ - r = pMsiSourceListAddSourceA("51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA", username, 0, "source"); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* guid with brackets */ - r = pMsiSourceListAddSourceA("{51CD2AD5-0482-4C46-8DDD-0ED1022AA1AA}", username, 0, "source"); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - /* dwReserved is not 0 */ - r = pMsiSourceListAddSourceA(prodcode, username, 42, "source"); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* szSource is NULL */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, NULL); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* szSource is empty */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, ""); - ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r); - - /* MSIINSTALLCONTEXT_USERMANAGED */ - - r = pMsiSourceListAddSourceA(prodcode, username, 0, "source"); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\"); - lstrcatA(keypath, usersid); - lstrcatA(keypath, "\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, "source"); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, "source"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Net key is created */ - res = RegOpenKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LastUsedSource does not exist and it is not created */ - res = RegQueryValueExA(source, "LastUsedSource", 0, NULL, NULL, NULL); - ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res); - - CHECK_REG_STR(net, "1", "source\\"); - - RegDeleteValueA(net, "1"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - - res = RegSetValueExA(source, "LastUsedSource", 0, REG_SZ, (LPBYTE)"blah", 5); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LastUsedSource value exists */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, "source"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Net key is created */ - res = RegOpenKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(source, "LastUsedSource", "blah"); - CHECK_REG_STR(net, "1", "source\\"); - - RegDeleteValueA(net, "1"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - - res = RegSetValueExA(source, "LastUsedSource", 0, REG_SZ, (LPBYTE)"5", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LastUsedSource is an integer */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, "source"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Net key is created */ - res = RegOpenKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(source, "LastUsedSource", "5"); - CHECK_REG_STR(net, "1", "source\\"); - - /* Add a second source, has trailing backslash */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, "another\\"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(source, "LastUsedSource", "5"); - CHECK_REG_STR(net, "1", "source\\"); - CHECK_REG_STR(net, "2", "another\\"); - - res = RegSetValueExA(source, "LastUsedSource", 0, REG_SZ, (LPBYTE)"2", 2); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* LastUsedSource is in the source list */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, "third/"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(source, "LastUsedSource", "2"); - CHECK_REG_STR(net, "1", "source\\"); - CHECK_REG_STR(net, "2", "another\\"); - CHECK_REG_STR(net, "3", "third/\\"); - - RegDeleteValueA(net, "1"); - RegDeleteValueA(net, "2"); - RegDeleteValueA(net, "3"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_USERUNMANAGED */ - - r = pMsiSourceListAddSourceA(prodcode, username, 0, "source"); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - lstrcpyA(keypath, "Software\\Microsoft\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &userkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* user product key exists */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, "source"); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(userkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - r = pMsiSourceListAddSourceA(prodcode, username, 0, "source"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Net key is created */ - res = RegOpenKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(net, "1", "source\\"); - - RegDeleteValueA(net, "1"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(userkey, ""); - RegCloseKey(userkey); - - /* MSIINSTALLCONTEXT_MACHINE */ - - r = pMsiSourceListAddSourceA(prodcode, NULL, 0, "source"); - ok(r == ERROR_UNKNOWN_PRODUCT, "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); - - lstrcpyA(keypath, "Software\\Classes\\Installer\\Products\\"); - lstrcatA(keypath, prod_squashed); - - res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &prodkey); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* machine product key exists */ - r = pMsiSourceListAddSourceA(prodcode, NULL, 0, "source"); - ok(r == ERROR_BAD_CONFIGURATION, "Expected ERROR_BAD_CONFIGURATION, got %d\n", r); - - res = RegCreateKeyA(prodkey, "SourceList", &source); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - /* SourceList key exists */ - r = pMsiSourceListAddSourceA(prodcode, NULL, 0, "source"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - /* Net key is created */ - res = RegOpenKeyA(source, "Net", &net); - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res); - - CHECK_REG_STR(net, "1", "source\\"); - - /* empty szUserName */ - r = pMsiSourceListAddSourceA(prodcode, "", 0, "another"); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - - CHECK_REG_STR(net, "1", "source\\"); - CHECK_REG_STR(net, "2", "another\\"); - - RegDeleteValueA(net, "2"); - RegDeleteValueA(net, "1"); - RegDeleteKeyA(net, ""); - RegCloseKey(net); - RegDeleteKeyA(source, ""); - RegCloseKey(source); - RegDeleteKeyA(prodkey, ""); - RegCloseKey(prodkey); -} - -START_TEST(source) -{ - init_functionpointers(); - - test_MsiSourceListGetInfo(); - test_MsiSourceListAddSourceEx(); - test_MsiSourceListEnumSources(); - test_MsiSourceListSetInfo(); - test_MsiSourceListAddMediaDisk(); - test_MsiSourceListEnumMediaDisks(); - test_MsiSourceListAddSource(); -} diff --git a/rostests/winetests/msi/suminfo.c b/rostests/winetests/msi/suminfo.c deleted file mode 100644 index 3afd0d50d24..00000000000 --- a/rostests/winetests/msi/suminfo.c +++ /dev/null @@ -1,422 +0,0 @@ -/* - * Copyright (C) 2005 Mike McCormack for CodeWeavers - * - * A test program for MSI database files. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 - -#include -#include -#include -#include -#include - -#include "wine/test.h" - -/* - * The following are defined in Windows SDK's msidefs.h - * but that file doesn't exist in the msvc6 header set. - * - * Some are already defined in PropIdl.h - undefine them - */ -#undef PID_DICTIONARY -#undef PID_CODEPAGE -#undef PID_SUBJECT -#undef PID_SECURITY - -#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_EDITTINE 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 - -static void test_suminfo(void) -{ - const char *msifile = "winetest.msi"; - MSIHANDLE hdb = 0, hsuminfo; - UINT r, count, type; - DWORD sz; - INT val; - FILETIME ft; - char buf[0x10]; - - DeleteFile(msifile); - - /* just MsiOpenDatabase should not create a file */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); - - r = MsiGetSummaryInformation(hdb, NULL, 0, NULL); - ok(r == ERROR_INVALID_PARAMETER, "MsiGetSummaryInformation wrong error\n"); - - r = MsiGetSummaryInformation(hdb, NULL, 0, &hsuminfo); - ok(r == ERROR_SUCCESS, "MsiGetSummaryInformation failed\n"); - - r = MsiSummaryInfoGetPropertyCount(0, NULL); - ok(r == ERROR_INVALID_HANDLE, "getpropcount failed\n"); - - r = MsiSummaryInfoGetPropertyCount(hsuminfo, NULL); - ok(r == ERROR_SUCCESS, "getpropcount failed\n"); - - count = -1; - r = MsiSummaryInfoGetPropertyCount(hsuminfo, &count); - ok(r == ERROR_SUCCESS, "getpropcount failed\n"); - ok(count == 0, "count should be zero\n"); - - r = MsiSummaryInfoGetProperty(hsuminfo, 0, NULL, NULL, NULL, 0, NULL); - ok(r == ERROR_SUCCESS, "getpropcount failed\n"); - - r = MsiSummaryInfoGetProperty(hsuminfo, -1, NULL, NULL, NULL, 0, NULL); - ok(r == ERROR_UNKNOWN_PROPERTY, "MsiSummaryInfoGetProperty wrong error\n"); - - r = MsiSummaryInfoGetProperty(hsuminfo, PID_SECURITY+1, NULL, NULL, NULL, 0, NULL); - ok(r == ERROR_UNKNOWN_PROPERTY, "MsiSummaryInfoGetProperty wrong error\n"); - - type = -1; - r = MsiSummaryInfoGetProperty(hsuminfo, 0, &type, NULL, NULL, 0, NULL); - ok(r == ERROR_SUCCESS, "getpropcount failed\n"); - ok(type == 0, "wrong type\n"); - - type = -1; - val = 1234; - r = MsiSummaryInfoGetProperty(hsuminfo, 0, &type, &val, NULL, 0, NULL); - ok(r == ERROR_SUCCESS, "getpropcount failed\n"); - ok(type == 0, "wrong type\n"); - ok(val == 1234, "wrong val\n"); - - buf[0]='x'; - buf[1]=0; - sz = 0x10; - r = MsiSummaryInfoGetProperty(hsuminfo, PID_REVNUMBER, &type, &val, NULL, buf, &sz); - ok(r == ERROR_SUCCESS, "getpropcount failed\n"); - ok(buf[0]=='x', "cleared buffer\n"); - ok(sz == 0x10, "count wasn't zero\n"); - ok(type == VT_EMPTY, "should be empty\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 0, NULL, "Mike"); - ok(r == ERROR_FUNCTION_FAILED, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 1, NULL, "JungAh"); - ok(r == ERROR_FUNCTION_FAILED, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 1, &ft, "Mike"); - ok(r == ERROR_FUNCTION_FAILED, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_CODEPAGE, VT_I2, 1, &ft, "JungAh"); - ok(r == ERROR_FUNCTION_FAILED, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiCloseHandle(hsuminfo); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - /* try again with the update count set */ - r = MsiGetSummaryInformation(hdb, NULL, 1, &hsuminfo); - ok(r == ERROR_SUCCESS, "MsiGetSummaryInformation failed\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, 0, VT_LPSTR, 1, NULL, NULL); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_CODEPAGE, VT_LPSTR, 1, NULL, NULL); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_I4, 0, NULL, "Mike"); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_AUTHOR, VT_I4, 0, NULL, "JungAh"); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_KEYWORDS, VT_I2, 0, NULL, "Mike"); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_COMMENTS, VT_FILETIME, 0, NULL, "JungAh"); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_TEMPLATE, VT_I2, 0, NULL, "Mike"); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_LASTAUTHOR, VT_LPSTR, 0, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_LASTSAVE_DTM, VT_FILETIME, 0, NULL, NULL); - ok(r == ERROR_INVALID_PARAMETER, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_LASTAUTHOR, VT_LPWSTR, 0, NULL, "h\0i\0\0"); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_REVNUMBER, VT_I4, 0, NULL, "Jungah"); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_PAGECOUNT, VT_LPSTR, 1, NULL, NULL); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 0, NULL, "Mike"); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoSetProperty failed\n"); - - sz = 2; - strcpy(buf,"x"); - r = MsiSummaryInfoGetProperty(hsuminfo, PID_TITLE, &type, NULL, NULL, buf, &sz ); - ok(r == ERROR_MORE_DATA, "MsiSummaryInfoSetProperty failed\n"); - ok(sz == 4, "count was wrong\n"); - ok(type == VT_LPSTR, "type was wrong\n"); - ok(!strcmp(buf,"M"), "buffer was wrong\n"); - - sz = 4; - strcpy(buf,"x"); - r = MsiSummaryInfoGetProperty(hsuminfo, PID_TITLE, &type, NULL, NULL, buf, &sz ); - ok(r == ERROR_MORE_DATA, "MsiSummaryInfoSetProperty failed\n"); - ok(sz == 4, "count was wrong\n"); - ok(type == VT_LPSTR, "type was wrong\n"); - ok(!strcmp(buf,"Mik"), "buffer was wrong\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 0, NULL, "JungAh"); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoSetProperty failed\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_CODEPAGE, VT_I2, 1, &ft, "Mike"); - ok(r == ERROR_FUNCTION_FAILED, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiCloseHandle(hsuminfo); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - /* try again with a higher update count */ - r = MsiGetSummaryInformation(hdb, NULL, 10, &hsuminfo); - ok(r == ERROR_SUCCESS, "MsiGetSummaryInformation failed\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 0, NULL, "JungAh"); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoSetProperty failed\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_CODEPAGE, VT_LPSTR, 1, NULL, NULL); - ok(r == ERROR_DATATYPE_MISMATCH, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_CODEPAGE, VT_I2, 1, NULL, NULL); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_CODEPAGE, VT_I2, 1, &ft, "Mike"); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoSetProperty(hsuminfo, PID_AUTHOR, VT_LPSTR, 1, &ft, "Mike"); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoSetProperty wrong error\n"); - - r = MsiSummaryInfoPersist(hsuminfo); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoPersist failed\n"); - - MsiDatabaseCommit(hdb); - - r = MsiCloseHandle(hsuminfo); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - r = MsiCloseHandle(hdb); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - - r = DeleteFile(msifile); - ok(r, "DeleteFile failed\n"); -} - -static const WCHAR tb[] = { 0x4840, 0x3f7f, 0x4164, 0x422f, 0x4836, 0 }; /* _Tables */ -static const WCHAR sd[] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3b6a, 0x45e4, 0x4824, 0 }; /* _StringData */ -static const WCHAR sp[] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3e6a, 0x44b2, 0x482f, 0 }; /* _StringPool */ - -#define LOSE_CONST(x) ((LPSTR)(UINT_PTR)(x)) - -static void test_create_database_binary(void) -{ - static const CLSID CLSID_MsiDatabase = - { 0xc1084, 0, 0, {0xc0, 0, 0, 0, 0, 0, 0, 0x46 } }; - static const CLSID IID_IPropertySetStorage = - { 0x13a, 0, 0, {0xc0, 0, 0, 0, 0, 0, 0, 0x46 } }; - static const CLSID FMTID_SummaryInformation = - { 0xf29f85e0, 0x4ff9, 0x1068, {0xab, 0x91, 0x08, 0x00, 0x2b, 0x27, 0xb3, 0xd9}}; - DWORD mode = STGM_CREATE | STGM_READWRITE | STGM_DIRECT | STGM_SHARE_EXCLUSIVE; - static const WCHAR msifile[] = { - 'w','i','n','e','t','e','s','t','.','m','s','i',0 }; - IPropertySetStorage *pss = NULL; - IPropertyStorage *ps = NULL; - IStorage *stg = NULL; - IStream *stm = NULL; - HRESULT r; - PROPSPEC propspec[10]; - PROPVARIANT propvar[10]; - USHORT data[2] = { 0, 0 }; - - r = StgCreateDocfile( msifile, mode, 0, &stg ); - ok( r == S_OK, "failed to create database\n"); - - r = IStorage_SetClass( stg, &CLSID_MsiDatabase ); - ok( r == S_OK, "failed to set clsid\n"); - - /* create the _StringData stream */ - r = IStorage_CreateStream( stg, sd, STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm ); - ok( r == S_OK, "failed to create stream\n"); - - IStream_Release( stm ); - - /* create the _StringPool stream */ - r = IStorage_CreateStream( stg, sp, STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm ); - ok( r == S_OK, "failed to create stream\n"); - - r = IStream_Write( stm, data, sizeof data, NULL ); - ok( r == S_OK, "failed to write stream\n"); - - IStream_Release( stm ); - - /* create the _Tables stream */ - r = IStorage_CreateStream( stg, tb, STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm ); - ok( r == S_OK, "failed to create stream\n"); - - IStream_Release( stm ); - - r = IStorage_QueryInterface( stg, &IID_IPropertySetStorage, (void**) &pss ); - ok( r == S_OK, "failed to set clsid\n"); - - r = IPropertySetStorage_Create( pss, &FMTID_SummaryInformation, NULL, 0, mode, &ps ); - ok( r == S_OK, "failed to create property set\n"); - - r = IPropertyStorage_SetClass( ps, &FMTID_SummaryInformation ); - ok( r == S_OK, "failed to set class\n"); - - propspec[0].ulKind = PRSPEC_PROPID; - U(propspec[0]).propid = PID_TITLE; - propvar[0].vt = VT_LPSTR; - U(propvar[0]).pszVal = LOSE_CONST("test title"); - - propspec[1].ulKind = PRSPEC_PROPID; - U(propspec[1]).propid = PID_SUBJECT; - propvar[1].vt = VT_LPSTR; - U(propvar[1]).pszVal = LOSE_CONST("msi suminfo / property storage test"); - - propspec[2].ulKind = PRSPEC_PROPID; - U(propspec[2]).propid = PID_AUTHOR; - propvar[2].vt = VT_LPSTR; - U(propvar[2]).pszVal = LOSE_CONST("mike_m"); - - propspec[3].ulKind = PRSPEC_PROPID; - U(propspec[3]).propid = PID_TEMPLATE; - propvar[3].vt = VT_LPSTR; - U(propvar[3]).pszVal = LOSE_CONST(";1033"); /* actually the string table's codepage */ - - propspec[4].ulKind = PRSPEC_PROPID; - U(propspec[4]).propid = PID_REVNUMBER; - propvar[4].vt = VT_LPSTR; - U(propvar[4]).pszVal = LOSE_CONST("{913B8D18-FBB6-4CAC-A239-C74C11E3FA74}"); - - propspec[5].ulKind = PRSPEC_PROPID; - U(propspec[5]).propid = PID_PAGECOUNT; - propvar[5].vt = VT_I4; - U(propvar[5]).lVal = 100; - - propspec[6].ulKind = PRSPEC_PROPID; - U(propspec[6]).propid = PID_WORDCOUNT; - propvar[6].vt = VT_I4; - U(propvar[6]).lVal = 0; - - /* MSDN says that PID_LASTPRINTED should be a VT_FILETIME... */ - propspec[7].ulKind = PRSPEC_PROPID; - U(propspec[7]).propid = PID_LASTPRINTED; - propvar[7].vt = VT_LPSTR; - U(propvar[7]).pszVal = LOSE_CONST("7/1/1999 5:17"); - - r = IPropertyStorage_WriteMultiple( ps, 8, propspec, propvar, PID_FIRST_USABLE ); - ok( r == S_OK, "failed to write properties\n"); - - IPropertyStorage_Commit( ps, STGC_DEFAULT ); - - IPropertyStorage_Release( ps ); - IPropertySetStorage_Release( pss ); - - IStorage_Commit( stg, STGC_DEFAULT ); - IStorage_Release( stg ); -} - -static void test_summary_binary(void) -{ - const char *msifile = "winetest.msi"; - MSIHANDLE hdb = 0, hsuminfo = 0; - UINT r, type, count; - INT ival; - DWORD sz; - char sval[20]; - - DeleteFile( msifile ); - - test_create_database_binary(); - - ok( INVALID_FILE_ATTRIBUTES != GetFileAttributes(msifile), "file doesn't exist!\n"); - - /* just MsiOpenDatabase should not create a file */ - r = MsiOpenDatabase(msifile, MSIDBOPEN_READONLY, &hdb); - ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); - - r = MsiGetSummaryInformation(hdb, NULL, 0, &hsuminfo); - ok(r == ERROR_SUCCESS, "MsiGetSummaryInformation failed\n"); - - /* - * Check what reading PID_LASTPRINTED does... - * The string value is written to the msi file - * but it appears that we're not allowed to read it back again. - * We can still read its type though...? - */ - sz = sizeof sval; - sval[0] = 0; - type = 0; - r = MsiSummaryInfoGetProperty(hsuminfo, PID_LASTPRINTED, &type, NULL, NULL, sval, &sz); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoGetProperty failed\n"); - ok(!lstrcmpA(sval, "") || !lstrcmpA(sval, "7"), - "Expected empty string or \"7\", got \"%s\"\n", sval); - todo_wine { - ok(type == VT_LPSTR, "Expected VT_LPSTR, got %d\n", type); - ok(sz == 0 || sz == 1, "Expected 0 or 1, got %d\n", sz); - } - - ival = -1; - r = MsiSummaryInfoGetProperty(hsuminfo, PID_WORDCOUNT, &type, &ival, NULL, NULL, NULL); - ok(r == ERROR_SUCCESS, "MsiSummaryInfoGetProperty failed\n"); - todo_wine ok( ival == 0, "value incorrect\n"); - - /* looks like msi adds some of its own values in here */ - count = 0; - r = MsiSummaryInfoGetPropertyCount( hsuminfo, &count ); - ok(r == ERROR_SUCCESS, "getpropcount failed\n"); - todo_wine ok(count == 10, "prop count incorrect\n"); - - MsiCloseHandle( hsuminfo ); - MsiCloseHandle( hdb ); - - DeleteFile( msifile ); -} - -START_TEST(suminfo) -{ - test_suminfo(); - test_summary_binary(); -} diff --git a/rostests/winetests/msi/testlist.c b/rostests/winetests/msi/testlist.c deleted file mode 100644 index f8d7679f0d4..00000000000 --- a/rostests/winetests/msi/testlist.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_automation(void); -extern void func_db(void); -extern void func_format(void); -extern void func_install(void); -extern void func_msi(void); -extern void func_package(void); -extern void func_record(void); -extern void func_source(void); -extern void func_suminfo(void); - -const struct test winetest_testlist[] = -{ - { "automation", func_automation }, - { "db", func_db }, - { "format", func_format }, - { "install", func_install }, - { "msi", func_msi }, - { "package", func_package }, - { "record", func_record }, - { "source", func_source }, - { "suminfo", func_suminfo }, - { 0, 0 } -}; diff --git a/rostests/winetests/mstask/mstask.rbuild b/rostests/winetests/mstask/mstask.rbuild deleted file mode 100644 index 1fac78c2139..00000000000 --- a/rostests/winetests/mstask/mstask.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - - . - task.c - task_scheduler.c - task_trigger.c - testlist.c - wine - ole32 - kernel32 - ntdll - - diff --git a/rostests/winetests/mstask/task.c b/rostests/winetests/mstask/task.c deleted file mode 100644 index 7cb76737ed8..00000000000 --- a/rostests/winetests/mstask/task.c +++ /dev/null @@ -1,520 +0,0 @@ -/* - * Test suite for Task 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 - */ - -#define COBJMACROS - -#include "corerror.h" -#include "mstask.h" -#include "wine/test.h" - -static ITaskScheduler *test_task_scheduler; -static ITask *test_task; -static const WCHAR empty[] = {0}; - -/* allocate some tmp string space */ -/* FIXME: this is not 100% thread-safe */ -static char *get_tmp_space(int size) -{ - static char *list[16]; - static long pos; - char *ret; - int idx; - - idx = ++pos % (sizeof(list)/sizeof(list[0])); - if ((ret = realloc(list[idx], size))) - list[idx] = ret; - return ret; -} - -static const char *dbgstr_w(LPCWSTR str) -{ - char *buf; - int len; - if(!str) - return "(null)"; - len = lstrlenW(str) + 1; - buf = get_tmp_space(len); - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, len, NULL, NULL); - return buf; -} - -static BOOL setup_task(void) -{ - HRESULT hres; - const WCHAR task_name[] = {'T','e','s','t','i','n','g', 0}; - - hres = CoCreateInstance(&CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, - &IID_ITaskScheduler, (void **) &test_task_scheduler); - if(hres != S_OK) - return FALSE; - hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, &CLSID_CTask, - &IID_ITask, (IUnknown**)&test_task); - if(hres != S_OK) - { - ITaskScheduler_Release(test_task_scheduler); - return FALSE; - } - return TRUE; -} - -static void cleanup_task(void) -{ - ITask_Release(test_task); - ITaskScheduler_Release(test_task_scheduler); -} - -static LPCWSTR path_resolve_name(LPCWSTR base_name) -{ - static WCHAR buffer[MAX_PATH]; - int len; - - len = SearchPathW(NULL, base_name, NULL, 0, NULL, NULL); - if (len == 0) - return base_name; - else if (len < MAX_PATH) - { - SearchPathW(NULL, base_name, NULL, MAX_PATH, buffer, NULL); - return buffer; - } - return NULL; -} - -static void test_SetApplicationName_GetApplicationName(void) -{ - BOOL setup; - HRESULT hres; - LPWSTR stored_name; - LPCWSTR full_name; - const WCHAR non_application_name[] = {'N','o','S','u','c','h', - 'A','p','p','l','i','c','a','t','i','o','n', 0}; - const WCHAR notepad_exe[] = { - 'n','o','t','e','p','a','d','.','e','x','e', 0}; - const WCHAR notepad[] = {'n','o','t','e','p','a','d', 0}; - - setup = setup_task(); - ok(setup, "Failed to setup test_task\n"); - if (!setup) - { - skip("Failed to create task. Skipping tests.\n"); - return; - } - - /* Attempt getting before setting application name */ - hres = ITask_GetApplicationName(test_task, &stored_name); - ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(stored_name, empty), - "Got %s, expected empty string\n", dbgstr_w(stored_name)); - CoTaskMemFree(stored_name); - } - - /* Set application name to a nonexistent application and then get - * the application name that is actually stored */ - hres = ITask_SetApplicationName(test_task, non_application_name); - ok(hres == S_OK, "Failed setting name %s: %08x\n", - dbgstr_w(non_application_name), hres); - hres = ITask_GetApplicationName(test_task, &stored_name); - ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); - if (hres == S_OK) - { - full_name = path_resolve_name(non_application_name); - ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n", - dbgstr_w(stored_name), dbgstr_w(full_name)); - CoTaskMemFree(stored_name); - } - - /* Set a valid application name with program type extension and then - * get the stored name */ - hres = ITask_SetApplicationName(test_task, notepad_exe); - ok(hres == S_OK, "Failed setting name %s: %08x\n", - dbgstr_w(notepad_exe), hres); - hres = ITask_GetApplicationName(test_task, &stored_name); - ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); - if (hres == S_OK) - { - full_name = path_resolve_name(notepad_exe); - ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n", - dbgstr_w(stored_name), dbgstr_w(full_name)); - CoTaskMemFree(stored_name); - } - - /* Set a valid application name without program type extension and - * then get the stored name */ - hres = ITask_SetApplicationName(test_task, notepad); - ok(hres == S_OK, "Failed setting name %s: %08x\n", dbgstr_w(notepad), hres); - hres = ITask_GetApplicationName(test_task, &stored_name); - ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); - if (hres == S_OK) - { - full_name = path_resolve_name(notepad); - ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n", - dbgstr_w(stored_name), dbgstr_w(full_name)); - CoTaskMemFree(stored_name); - } - - /* After having a valid application name set, set application the name - * to a nonexistent application and then get the name that is - * actually stored */ - hres = ITask_SetApplicationName(test_task, non_application_name); - ok(hres == S_OK, "Failed setting name %s: %08x\n", - dbgstr_w(non_application_name), hres); - hres = ITask_GetApplicationName(test_task, &stored_name); - ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); - if (hres == S_OK) - { - full_name = path_resolve_name(non_application_name); - ok(!lstrcmpW(stored_name, full_name), "Got %s, expected %s\n", - dbgstr_w(stored_name), dbgstr_w(full_name)); - CoTaskMemFree(stored_name); - } - - /* Clear application name */ - hres = ITask_SetApplicationName(test_task, empty); - ok(hres == S_OK, "Failed setting name %s: %08x\n", dbgstr_w(empty), hres); - hres = ITask_GetApplicationName(test_task, &stored_name); - ok(hres == S_OK, "GetApplicationName failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(stored_name, empty), - "Got %s, expected empty string\n", dbgstr_w(stored_name)); - CoTaskMemFree(stored_name); - } - - cleanup_task(); - return; -} - -static void test_CreateTrigger(void) -{ - BOOL setup; - HRESULT hres; - WORD trigger_index; - ITaskTrigger *test_trigger; - - setup = setup_task(); - ok(setup, "Failed to setup test_task\n"); - if (!setup) - { - skip("Failed to create task. Skipping tests.\n"); - return; - } - - hres = ITask_CreateTrigger(test_task, &trigger_index, &test_trigger); - ok(hres == S_OK, "Failed to create trigger: 0x%08x\n", hres); - if (hres != S_OK) - { - cleanup_task(); - return; - } - - ITaskTrigger_Release(test_trigger); - cleanup_task(); - return; -} - -static void test_SetParameters_GetParameters(void) -{ - BOOL setup; - HRESULT hres; - LPWSTR parameters; - const WCHAR parameters_a[] = {'f','o','o','.','t','x','t', 0}; - const WCHAR parameters_b[] = {'f','o','o','.','t','x','t',' ', - 'b','a','r','.','t','x','t', 0}; - - setup = setup_task(); - ok(setup, "Failed to setup test_task\n"); - if (!setup) - { - skip("Failed to create task. Skipping tests.\n"); - return; - } - - /* Get parameters before setting them */ - hres = ITask_GetParameters(test_task, ¶meters); - ok(hres == S_OK, "GetParameters failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(parameters, empty), - "Got %s, expected empty string\n", dbgstr_w(parameters)); - CoTaskMemFree(parameters); - } - - /* Set parameters to a simple string */ - hres = ITask_SetParameters(test_task, parameters_a); - ok(hres == S_OK, "Failed setting parameters %s: %08x\n", - dbgstr_w(parameters_a), hres); - hres = ITask_GetParameters(test_task, ¶meters); - ok(hres == S_OK, "GetParameters failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(parameters, parameters_a), "Got %s, expected %s\n", - dbgstr_w(parameters), dbgstr_w(parameters_a)); - CoTaskMemFree(parameters); - } - - /* Update parameters to a different simple string */ - hres = ITask_SetParameters(test_task, parameters_b); - ok(hres == S_OK, "Failed setting parameters %s: %08x\n", - dbgstr_w(parameters_b), hres); - hres = ITask_GetParameters(test_task, ¶meters); - ok(hres == S_OK, "GetParameters failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(parameters, parameters_b), "Got %s, expected %s\n", - dbgstr_w(parameters), dbgstr_w(parameters_b)); - CoTaskMemFree(parameters); - } - - /* Clear parameters */ - hres = ITask_SetParameters(test_task, empty); - ok(hres == S_OK, "Failed setting parameters %s: %08x\n", - dbgstr_w(empty), hres); - hres = ITask_GetParameters(test_task, ¶meters); - ok(hres == S_OK, "GetParameters failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(parameters, empty), - "Got %s, expected empty string\n", dbgstr_w(parameters)); - CoTaskMemFree(parameters); - } - - cleanup_task(); - return; -} - -static void test_SetComment_GetComment(void) -{ - BOOL setup; - HRESULT hres; - LPWSTR comment; - const WCHAR comment_a[] = {'C','o','m','m','e','n','t','.', 0}; - const WCHAR comment_b[] = {'L','o','n','g','e','r',' ', - 'c','o','m','m','e','n','t','.', 0}; - - setup = setup_task(); - ok(setup, "Failed to setup test_task\n"); - if (!setup) - { - skip("Failed to create task. Skipping tests.\n"); - return; - } - - /* Get comment before setting it*/ - hres = ITask_GetComment(test_task, &comment); - ok(hres == S_OK, "GetComment failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(comment, empty), - "Got %s, expected empty string\n", dbgstr_w(comment)); - CoTaskMemFree(comment); - } - - /* Set comment to a simple string */ - hres = ITask_SetComment(test_task, comment_a); - ok(hres == S_OK, "Failed setting comment %s: %08x\n", - dbgstr_w(comment_a), hres); - hres = ITask_GetComment(test_task, &comment); - ok(hres == S_OK, "GetComment failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(comment, comment_a), "Got %s, expected %s\n", - dbgstr_w(comment), dbgstr_w(comment_a)); - CoTaskMemFree(comment); - } - - /* Update comment to a different simple string */ - hres = ITask_SetComment(test_task, comment_b); - ok(hres == S_OK, "Failed setting comment %s: %08x\n", - dbgstr_w(comment_b), hres); - hres = ITask_GetComment(test_task, &comment); - ok(hres == S_OK, "GetComment failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(comment, comment_b), "Got %s, expected %s\n", - dbgstr_w(comment), dbgstr_w(comment_b)); - CoTaskMemFree(comment); - } - - /* Clear comment */ - hres = ITask_SetComment(test_task, empty); - ok(hres == S_OK, "Failed setting comment %s: %08x\n", - dbgstr_w(empty), hres); - hres = ITask_GetComment(test_task, &comment); - ok(hres == S_OK, "GetComment failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(comment, empty), - "Got %s, expected empty string\n", dbgstr_w(comment)); - CoTaskMemFree(comment); - } - - cleanup_task(); - return; -} - -static void test_SetMaxRunTime_GetMaxRunTime(void) -{ - BOOL setup; - HRESULT hres; - DWORD max_run_time; - - setup = setup_task(); - ok(setup, "Failed to setup test_task\n"); - if (!setup) - { - skip("Failed to create task. Skipping tests.\n"); - return; - } - - /* Default time is 3 days: - * 3 days * 24 hours * 60 minutes * 60 seconds * 1000 ms = 259200000 */ - max_run_time = 0; - hres = ITask_GetMaxRunTime(test_task, &max_run_time); - ok(hres == S_OK, "Failed to get max runtime: 0x%08x\n", hres); - ok(max_run_time == 259200000, "Expected 259200000: %d\n", max_run_time); - - /* Basic set test */ - max_run_time = 0; - hres = ITask_SetMaxRunTime(test_task, 1234); - ok(hres == S_OK, "Failed to set max runtime: 0x%08x\n", hres); - hres = ITask_GetMaxRunTime(test_task, &max_run_time); - ok(hres == S_OK, "Failed to get max runtime: 0x%08x\n", hres); - ok(max_run_time == 1234, "Expected 1234: %d\n", max_run_time); - - /* Verify that time can be set to zero */ - max_run_time = 1; - hres = ITask_SetMaxRunTime(test_task, 0); - ok(hres == S_OK, "Failed to set max runtime: 0x%08x\n", hres); - hres = ITask_GetMaxRunTime(test_task, &max_run_time); - ok(hres == S_OK, "Failed to get max runtime: 0x%08x\n", hres); - ok(max_run_time == 0, "Expected 0: %d\n", max_run_time); - - /* Check resolution by setting time to one */ - max_run_time = 0; - hres = ITask_SetMaxRunTime(test_task, 1); - ok(hres == S_OK, "Failed to set max runtime: 0x%08x\n", hres); - hres = ITask_GetMaxRunTime(test_task, &max_run_time); - ok(hres == S_OK, "Failed to get max runtime: 0x%08x\n", hres); - ok(max_run_time == 1, "Expected 1: %d\n", max_run_time); - - /* Verify that time can be set to INFINITE */ - max_run_time = 0; - hres = ITask_SetMaxRunTime(test_task, INFINITE); - ok(hres == S_OK, "Failed to set max runtime: 0x%08x\n", hres); - hres = ITask_GetMaxRunTime(test_task, &max_run_time); - ok(hres == S_OK, "Failed to get max runtime: 0x%08x\n", hres); - ok(max_run_time == INFINITE, "Expected INFINITE: %d\n", max_run_time); - - cleanup_task(); - return; -} - -static void test_SetAccountInformation_GetAccountInformation(void) -{ - BOOL setup; - HRESULT hres; - LPWSTR account_name; - const WCHAR dummy_account_name[] = {'N', 'o', 'S', 'u', 'c', 'h', - 'A', 'c', 'c', 'o', 'u', 'n', 't', 0}; - const WCHAR dummy_account_name_b[] = {'N', 'o', 'S', 'u', 'c', 'h', - 'A', 'c', 'c', 'o', 'u', 'n', 't', 'B', 0}; - - setup = setup_task(); - ok(setup, "Failed to setup test_task\n"); - if (!setup) - { - skip("Failed to create task. Skipping tests.\n"); - return; - } - - /* Get account information before it is set */ - hres = ITask_GetAccountInformation(test_task, &account_name); - /* WinXP returns HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND): 0x80070002 but - * Win2K returns SCHED_E_CANNOT_OPEN_TASK: 0x8004130d - * Win9x doesn't support security services */ - if (hres == SCHED_E_NO_SECURITY_SERVICES) - { - win_skip("Security services are not supported\n"); - cleanup_task(); - return; - } - ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || - hres == SCHED_E_CANNOT_OPEN_TASK, - "Unset account name generated: 0x%08x\n", hres); - - /* Attempt to set to a dummy account without a password */ - /* This test passes on WinXP but fails on Win2K */ - hres = ITask_SetAccountInformation(test_task, dummy_account_name, NULL); - ok(hres == S_OK, - "Failed setting dummy account with no password: %08x\n", hres); - hres = ITask_GetAccountInformation(test_task, &account_name); - ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(account_name, dummy_account_name), - "Got %s, expected %s\n", dbgstr_w(account_name), - dbgstr_w(dummy_account_name)); - CoTaskMemFree(account_name); - } - - /* Attempt to set to a dummy account with a (invalid) password */ - /* This test passes on WinXP but fails on Win2K */ - hres = ITask_SetAccountInformation(test_task, dummy_account_name_b, - dummy_account_name_b); - ok(hres == S_OK, - "Failed setting dummy account with password: %08x\n", hres); - hres = ITask_GetAccountInformation(test_task, &account_name); - ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(account_name, dummy_account_name_b), - "Got %s, expected %s\n", dbgstr_w(account_name), - dbgstr_w(dummy_account_name_b)); - CoTaskMemFree(account_name); - } - - /* Attempt to set to the local system account */ - hres = ITask_SetAccountInformation(test_task, empty, NULL); - ok(hres == S_OK, "Failed setting system account: %08x\n", hres); - hres = ITask_GetAccountInformation(test_task, &account_name); - ok(hres == S_OK, "GetAccountInformation failed: %08x\n", hres); - if (hres == S_OK) - { - ok(!lstrcmpW(account_name, empty), - "Got %s, expected empty string\n", dbgstr_w(account_name)); - CoTaskMemFree(account_name); - } - - cleanup_task(); - return; -} - -START_TEST(task) -{ - CoInitialize(NULL); - test_SetApplicationName_GetApplicationName(); - test_CreateTrigger(); - test_SetParameters_GetParameters(); - test_SetComment_GetComment(); - test_SetMaxRunTime_GetMaxRunTime(); - test_SetAccountInformation_GetAccountInformation(); - CoUninitialize(); -} diff --git a/rostests/winetests/mstask/task_scheduler.c b/rostests/winetests/mstask/task_scheduler.c deleted file mode 100644 index 2de0e160496..00000000000 --- a/rostests/winetests/mstask/task_scheduler.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Test suite for TaskScheduler 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 - */ - -#define COBJMACROS - -#include "corerror.h" - -#include "initguid.h" -#include "mstask.h" -#include "wine/test.h" - -static ITaskScheduler *test_task_scheduler; - -static void test_NewWorkItem(void) -{ - HRESULT hres; - ITask *task; - const WCHAR task_name[] = {'T', 'e', 's', 't', 'i', 'n', 'g', 0}; - GUID GUID_BAD; - - /* Initialize a GUID that will not be a recognized CLSID or a IID */ - CoCreateGuid(&GUID_BAD); - - /* Create TaskScheduler */ - hres = CoCreateInstance(&CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, - &IID_ITaskScheduler, (void **) &test_task_scheduler); - ok(hres == S_OK, "CTaskScheduler CoCreateInstance failed: %08x\n", hres); - if (hres != S_OK) - { - skip("Failed to create task scheduler. Skipping tests.\n"); - return; - } - - /* Test basic task creation */ - hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, - &CLSID_CTask, &IID_ITask, (IUnknown**)&task); - ok(hres == S_OK, "NewNetworkItem failed: %08x\n", hres); - if (hres == S_OK) - ITask_Release(task); - - /* Task creation attempt using invalid work item class ID */ - hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, - &GUID_BAD, &IID_ITask, (IUnknown**)&task); - ok(hres == CLASS_E_CLASSNOTAVAILABLE, - "Expected CLASS_E_CLASSNOTAVAILABLE: %08x\n", hres); - - /* Task creation attempt using invalid interface ID */ - hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, - &CLSID_CTask, &GUID_BAD, (IUnknown**)&task); - ok(hres == E_NOINTERFACE, "Expected E_NOINTERFACE: %08x\n", hres); - - /* Task creation attempt using invalid work item class and interface ID */ - hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, - &GUID_BAD, &GUID_BAD, (IUnknown**)&task); - ok(hres == CLASS_E_CLASSNOTAVAILABLE, - "Expected CLASS_E_CLASSNOTAVAILABLE: %08x\n", hres); - - ITaskScheduler_Release(test_task_scheduler); - return; -} - -static void test_Activate(void) -{ - HRESULT hres; - ITask *task = NULL; - const WCHAR not_task_name[] = - {'N', 'o', 'S', 'u', 'c', 'h', 'T', 'a', 's', 'k', 0}; - - /* Create TaskScheduler */ - hres = CoCreateInstance(&CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, - &IID_ITaskScheduler, (void **) &test_task_scheduler); - ok(hres == S_OK, "CTaskScheduler CoCreateInstance failed: %08x\n", hres); - if (hres != S_OK) - { - skip("Failed to create task scheduler. Skipping tests.\n"); - return; - } - - /* Attempt to activate a nonexistent task */ - hres = ITaskScheduler_Activate(test_task_scheduler, not_task_name, - &IID_ITask, (IUnknown**)&task); - ok(hres == COR_E_FILENOTFOUND, "Expected COR_E_FILENOTFOUND: %08x\n", hres); - - ITaskScheduler_Release(test_task_scheduler); - return; -} - -START_TEST(task_scheduler) -{ - CoInitialize(NULL); - test_NewWorkItem(); - test_Activate(); - CoUninitialize(); -} diff --git a/rostests/winetests/mstask/task_trigger.c b/rostests/winetests/mstask/task_trigger.c deleted file mode 100644 index 7f1c57799be..00000000000 --- a/rostests/winetests/mstask/task_trigger.c +++ /dev/null @@ -1,380 +0,0 @@ -/* - * Test suite for Task 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 - */ - -#define COBJMACROS - -#include - -#include "mstask.h" -#include "wine/test.h" - -static ITaskScheduler *test_task_scheduler; -static ITask *test_task; -static ITaskTrigger *test_trigger; -static WORD trigger_index; - -static BOOL setup_trigger(void) -{ - HRESULT hres; - const WCHAR task_name[] = {'T','e','s','t','i','n','g', 0}; - - hres = CoCreateInstance(&CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, - &IID_ITaskScheduler, (void **) &test_task_scheduler); - if(hres != S_OK) - return FALSE; - hres = ITaskScheduler_NewWorkItem(test_task_scheduler, task_name, - &CLSID_CTask, &IID_ITask, (IUnknown**)&test_task); - if(hres != S_OK) - { - ITaskScheduler_Release(test_task_scheduler); - return FALSE; - } - hres = ITask_CreateTrigger(test_task, &trigger_index, &test_trigger); - if(hres != S_OK) - { - ITask_Release(test_task); - ITaskScheduler_Release(test_task_scheduler); - return FALSE; - } - return TRUE; -} - -static void cleanup_trigger(void) -{ - ITaskTrigger_Release(test_trigger); - ITask_Release(test_task); - ITaskScheduler_Release(test_task_scheduler); -} - -static BOOL compare_trigger_state(TASK_TRIGGER found_state, - TASK_TRIGGER expected_state) -{ - ok(found_state.cbTriggerSize == expected_state.cbTriggerSize, - "cbTriggerSize: Found %d but expected %d\n", - found_state.cbTriggerSize, expected_state.cbTriggerSize); - - ok(found_state.Reserved1 == expected_state.Reserved1, - "Reserved1: Found %d but expected %d\n", - found_state.Reserved1, expected_state.Reserved1); - - ok(found_state.wBeginYear == expected_state.wBeginYear, - "wBeginYear: Found %d but expected %d\n", - found_state.wBeginYear, expected_state.wBeginYear); - - ok(found_state.wBeginMonth == expected_state.wBeginMonth, - "wBeginMonth: Found %d but expected %d\n", - found_state.wBeginMonth, expected_state.wBeginMonth); - - ok(found_state.wBeginDay == expected_state.wBeginDay, - "wBeginDay: Found %d but expected %d\n", - found_state.wBeginDay, expected_state.wBeginDay); - - ok(found_state.wEndYear == expected_state.wEndYear, - "wEndYear: Found %d but expected %d\n", - found_state.wEndYear, expected_state.wEndYear); - - ok(found_state.wEndMonth == expected_state.wEndMonth, - "wEndMonth: Found %d but expected %d\n", - found_state.wEndMonth, expected_state.wEndMonth); - - ok(found_state.wEndDay == expected_state.wEndDay, - "wEndDay: Found %d but expected %d\n", - found_state.wEndDay, expected_state.wEndDay); - - ok(found_state.wStartHour == expected_state.wStartHour, - "wStartHour: Found %d but expected %d\n", - found_state.wStartHour, expected_state.wStartHour); - - ok(found_state.wStartMinute == expected_state.wStartMinute, - "wStartMinute: Found %d but expected %d\n", - found_state.wStartMinute, expected_state.wStartMinute); - - ok(found_state.MinutesDuration == expected_state.MinutesDuration, - "MinutesDuration: Found %d but expected %d\n", - found_state.MinutesDuration, expected_state.MinutesDuration); - - ok(found_state.MinutesInterval == expected_state.MinutesInterval, - "MinutesInterval: Found %d but expected %d\n", - found_state.MinutesInterval, expected_state.MinutesInterval); - - ok(found_state.rgFlags == expected_state.rgFlags, - "rgFlags: Found %d but expected %d\n", - found_state.rgFlags, expected_state.rgFlags); - - ok(found_state.TriggerType == expected_state.TriggerType, - "TriggerType: Found %d but expected %d\n", - found_state.TriggerType, expected_state.TriggerType); - - ok(found_state.Type.Daily.DaysInterval == expected_state.Type.Daily.DaysInterval, - "Type.Daily.DaysInterval: Found %d but expected %d\n", - found_state.Type.Daily.DaysInterval, expected_state.Type.Daily.DaysInterval); - - ok(found_state.Reserved2 == expected_state.Reserved2, - "Reserved2: Found %d but expected %d\n", - found_state.Reserved2, expected_state.Reserved2); - - ok(found_state.wRandomMinutesInterval == expected_state.wRandomMinutesInterval, - "wRandomMinutesInterval: Found %d but expected %d\n", - found_state.wRandomMinutesInterval, expected_state.wRandomMinutesInterval); - - return TRUE; -} - -static void test_SetTrigger_GetTrigger(void) -{ - BOOL setup; - HRESULT hres; - TASK_TRIGGER trigger_state; - TASK_TRIGGER empty_trigger_state = { - sizeof(trigger_state), 0, - 0, 0, 0, - 0, 0, 0, - 0, 0, 0, 0, - TASK_TRIGGER_FLAG_DISABLED, TASK_TIME_TRIGGER_DAILY, {{1}}, - 0, 0 - }; - TASK_TRIGGER normal_trigger_state = { - sizeof(trigger_state), 0, - 1980, 1, 1, - 2980, 2, 2, - 3, 3, - 0, 0, - TASK_TRIGGER_FLAG_DISABLED, TASK_TIME_TRIGGER_DAILY, {{1}}, - 0, 0 - }; - SYSTEMTIME time; - - setup = setup_trigger(); - ok(setup, "Failed to setup test_task\n"); - if (!setup) - { - skip("Failed to create task. Skipping tests.\n"); - return; - } - - /* Setup a trigger with base values for this test run */ - GetLocalTime(&time); - empty_trigger_state.wStartHour = time.wHour; - empty_trigger_state.wStartMinute = time.wMinute; - empty_trigger_state.wBeginYear = time.wYear; - empty_trigger_state.wBeginMonth = time.wMonth; - empty_trigger_state.wBeginDay = time.wDay; - - /* Test trigger state after trigger creation but before setting * state */ - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = sizeof(trigger_state); - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - compare_trigger_state(trigger_state, empty_trigger_state); - - /* Test setting basic empty trigger */ - hres = ITaskTrigger_SetTrigger(test_trigger, &empty_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = sizeof(trigger_state); - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(hres == S_OK, "Failed to GetTrigger\n"); - compare_trigger_state(trigger_state, empty_trigger_state); - - /* Test setting basic non-empty trigger */ - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = sizeof(trigger_state); - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(hres == S_OK, "Failed to GetTrigger\n"); - compare_trigger_state(trigger_state, normal_trigger_state); - - /* The following tests modify the normal_trigger_state structure - * before each test, and return the normal_trigger_state structure - * back to its original valid state after each test. This keeps - * each test run independent. */ - - /* Test setting trigger with invalid cbTriggerSize */ - normal_trigger_state.cbTriggerSize = sizeof(trigger_state) - 1; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.cbTriggerSize = sizeof(trigger_state) + 1; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.cbTriggerSize = sizeof(trigger_state); - - /* Test setting trigger with invalid Reserved fields */ - normal_trigger_state.Reserved1 = 80; - normal_trigger_state.Reserved2 = 80; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = sizeof(trigger_state); - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(trigger_state.Reserved1 == 0 && trigger_state.Reserved2 == 0, - "Reserved fields should be set to zero\n"); - normal_trigger_state.Reserved1 = 0; - normal_trigger_state.Reserved2 = 0; - - /* Test setting trigger with invalid month */ - normal_trigger_state.wBeginMonth = 0; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.wBeginMonth = 13; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.wBeginMonth = 1; - - /* Test setting trigger with invalid begin date */ - normal_trigger_state.wBeginDay = 0; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.wBeginDay = 32; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.wBeginMonth = 2; - normal_trigger_state.wBeginDay = 30; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.wBeginMonth = 1; - normal_trigger_state.wBeginDay = 1; - - /* Test setting trigger invalid end date */ - normal_trigger_state.wEndYear = 0; - normal_trigger_state.wEndMonth = 200; - normal_trigger_state.wEndDay = 200; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = sizeof(trigger_state); - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(trigger_state.wEndYear == 0, "End year should be 0: %d\n", - trigger_state.wEndYear); - ok(trigger_state.wEndMonth == 200, "End month should be 200: %d\n", - trigger_state.wEndMonth); - ok(trigger_state.wEndDay == 200, "End day should be 200: %d\n", - trigger_state.wEndDay); - normal_trigger_state.rgFlags = - TASK_TRIGGER_FLAG_DISABLED | TASK_TRIGGER_FLAG_HAS_END_DATE; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.rgFlags = TASK_TRIGGER_FLAG_DISABLED; - normal_trigger_state.wEndYear = 2980; - normal_trigger_state.wEndMonth = 1; - normal_trigger_state.wEndDay = 1; - - /* Test setting trigger with invalid hour or minute*/ - normal_trigger_state.wStartHour = 24; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.wStartHour = 3; - normal_trigger_state.wStartHour = 60; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.wStartHour = 3; - - /* Test setting trigger with invalid duration / interval pairs */ - normal_trigger_state.MinutesDuration = 5; - normal_trigger_state.MinutesInterval = 5; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.MinutesDuration = 5; - normal_trigger_state.MinutesInterval = 6; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.MinutesDuration = 0; - normal_trigger_state.MinutesInterval = 6; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.MinutesDuration = 5; - normal_trigger_state.MinutesInterval = 0; - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); - normal_trigger_state.MinutesDuration = 0; - normal_trigger_state.MinutesInterval = 0; - - /* Test setting trigger with end date before start date */ - normal_trigger_state.wEndYear = 1979; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - normal_trigger_state.rgFlags = - TASK_TRIGGER_FLAG_DISABLED | TASK_TRIGGER_FLAG_HAS_END_DATE; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - normal_trigger_state.rgFlags = TASK_TRIGGER_FLAG_DISABLED; - normal_trigger_state.wEndYear = 2980; - normal_trigger_state.wEndMonth = 1; - normal_trigger_state.wEndDay = 1; - - - /* Test setting trigger with invalid TriggerType and Type */ - normal_trigger_state.TriggerType = TASK_TIME_TRIGGER_ONCE; - normal_trigger_state.Type.Weekly.WeeksInterval = 2; - normal_trigger_state.Type.Weekly.rgfDaysOfTheWeek = (TASK_MONDAY | TASK_TUESDAY); - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = sizeof(trigger_state); - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(trigger_state.Type.Weekly.WeeksInterval == 0xcfcf, - "Expected WeeksInterval set remain untouched: %d\n", - trigger_state.Type.Weekly.WeeksInterval); - ok(trigger_state.Type.Weekly.rgfDaysOfTheWeek == 0xcfcf, - "Expected WeeksInterval set remain untouched: %d\n", - trigger_state.Type.Weekly.rgfDaysOfTheWeek); - normal_trigger_state.TriggerType = TASK_TIME_TRIGGER_DAILY; - normal_trigger_state.Type.Daily.DaysInterval = 1; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - - /* Test setting trigger with set wRandomMinutesInterval */ - normal_trigger_state.wRandomMinutesInterval = 5; - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = sizeof(trigger_state); - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(trigger_state.wRandomMinutesInterval == 0, - "wRandomMinutesInterval should be set to zero\n"); - normal_trigger_state.wRandomMinutesInterval = 0; - - /* Test GetTrigger using invalid cbTriggerSiz in pTrigger. In - * contrast to available documentation, this succeeds in practice. */ - hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); - ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = sizeof(trigger_state) - 1; - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(hres == S_OK, "Failed to GetTrigger\n"); - ok(compare_trigger_state(trigger_state, normal_trigger_state), - "Invalid state\n"); - memset(&trigger_state, 0xcf, sizeof(trigger_state)); - trigger_state.cbTriggerSize = 0; - hres = ITaskTrigger_GetTrigger(test_trigger, &trigger_state); - ok(hres == S_OK, "Failed to GetTrigger\n"); - ok(compare_trigger_state(trigger_state, normal_trigger_state), - "Invalid state\n"); - - - cleanup_trigger(); - return; -} - - -START_TEST(task_trigger) -{ - CoInitialize(NULL); - test_SetTrigger_GetTrigger(); - CoUninitialize(); -} diff --git a/rostests/winetests/mstask/testlist.c b/rostests/winetests/mstask/testlist.c deleted file mode 100644 index f27d0222901..00000000000 --- a/rostests/winetests/mstask/testlist.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_task(void); -extern void func_task_scheduler(void); -extern void func_task_trigger(void); - -const struct test winetest_testlist[] = -{ - { "task", func_task }, - { "task_scheduler", func_task_scheduler }, - { "task_trigger", func_task_trigger }, - { 0, 0 } -}; diff --git a/rostests/winetests/msvcrt/Makefile.in b/rostests/winetests/msvcrt/Makefile.in deleted file mode 100644 index fd8ae0d7e62..00000000000 --- a/rostests/winetests/msvcrt/Makefile.in +++ /dev/null @@ -1,21 +0,0 @@ -TOPSRCDIR = @top_srcdir@ -TOPOBJDIR = ../../.. -SRCDIR = @srcdir@ -VPATH = @srcdir@ -TESTDLL = msvcrt.dll -IMPORTS = msvcrt -EXTRAINCL = -I$(TOPSRCDIR)/include/msvcrt -I$(SRCDIR)/.. - -CTESTS = \ - cpp.c \ - environ.c \ - file.c \ - heap.c \ - printf.c \ - scanf.c \ - string.c \ - time.c - -@MAKE_TEST_RULES@ - -### Dependencies: diff --git a/rostests/winetests/msvcrt/cpp.c b/rostests/winetests/msvcrt/cpp.c deleted file mode 100644 index ef80cac2c4f..00000000000 --- a/rostests/winetests/msvcrt/cpp.c +++ /dev/null @@ -1,1020 +0,0 @@ -/* Unit test suite for msvcrt C++ objects - * - * 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 - * This tests is only valid for ix86 platforms, on others it's a no-op. - * Some tests cannot be checked with ok(), for example the dtors. We simply - * call them to ensure we don't crash ;-) - * - * If we build this test with VC++ in debug mode, we will fail in _chkstk() - * or at program exit malloc() checking if these methods haven't been - * implemented correctly (they have). - * - * Tested with a range of native msvcrt's from v4 -> v7. - */ -#include "wine/test.h" -#include "winbase.h" -#include "winnt.h" - -#ifndef __i386__ -/* Skip these tests for non x86 platforms */ -START_TEST(cpp) -{ -} -#else - -typedef struct __exception -{ - void *vtable; - char *name; - int do_free; -} exception; - -typedef struct __type_info -{ - void *vtable; - char *name; - char mangled[16]; -} type_info; - -/* Function pointers. We need to use these to call these funcs as __thiscall */ -static HMODULE hMsvcrt; - -static void* (*poperator_new)(unsigned int); -static void (*poperator_delete)(void*); -static void* (*pmalloc)(unsigned int); -static void (*pfree)(void*); - -/* exception */ -static void (WINAPI *pexception_ctor)(exception*,LPCSTR*); -static void (WINAPI *pexception_copy_ctor)(exception*,exception*); -static void (WINAPI *pexception_default_ctor)(exception*); -static void (WINAPI *pexception_dtor)(exception*); -static exception* (WINAPI *pexception_opequals)(exception*,exception*); -static char* (WINAPI *pexception_what)(exception*); -static void* (WINAPI *pexception_vtable)(exception*); -static void (WINAPI *pexception_vector_dtor)(exception*,unsigned int); -static void (WINAPI *pexception_scalar_dtor)(exception*,unsigned int); - -/* bad_typeid */ -static void (WINAPI *pbad_typeid_ctor)(exception*,LPCSTR); -static void (WINAPI *pbad_typeid_ctor_closure)(exception*); -static void (WINAPI *pbad_typeid_copy_ctor)(exception*,exception*); -static void (WINAPI *pbad_typeid_dtor)(exception*); -static exception* (WINAPI *pbad_typeid_opequals)(exception*,exception*); -static char* (WINAPI *pbad_typeid_what)(exception*); -static void* (WINAPI *pbad_typeid_vtable)(exception*); -static void (WINAPI *pbad_typeid_vector_dtor)(exception*,unsigned int); -static void (WINAPI *pbad_typeid_scalar_dtor)(exception*,unsigned int); - -/* bad_cast */ -static void (WINAPI *pbad_cast_ctor)(exception*,LPCSTR*); -static void (WINAPI *pbad_cast_ctor2)(exception*,LPCSTR); -static void (WINAPI *pbad_cast_ctor_closure)(exception*); -static void (WINAPI *pbad_cast_copy_ctor)(exception*,exception*); -static void (WINAPI *pbad_cast_dtor)(exception*); -static exception* (WINAPI *pbad_cast_opequals)(exception*,exception*); -static char* (WINAPI *pbad_cast_what)(exception*); -static void* (WINAPI *pbad_cast_vtable)(exception*); -static void (WINAPI *pbad_cast_vector_dtor)(exception*,unsigned int); -static void (WINAPI *pbad_cast_scalar_dtor)(exception*,unsigned int); - -/* __non_rtti_object */ -static void (WINAPI *p__non_rtti_object_ctor)(exception*,LPCSTR); -static void (WINAPI *p__non_rtti_object_copy_ctor)(exception*,exception*); -static void (WINAPI *p__non_rtti_object_dtor)(exception*); -static exception* (WINAPI *p__non_rtti_object_opequals)(exception*,exception*); -static char* (WINAPI *p__non_rtti_object_what)(exception*); -static void* (WINAPI *p__non_rtti_object_vtable)(exception*); -static void (WINAPI *p__non_rtti_object_vector_dtor)(exception*,unsigned int); -static void (WINAPI *p__non_rtti_object_scalar_dtor)(exception*,unsigned int); - -/* type_info */ -static void (WINAPI *ptype_info_dtor)(type_info*); -static char* (WINAPI *ptype_info_raw_name)(type_info*); -static char* (WINAPI *ptype_info_name)(type_info*); -static int (WINAPI *ptype_info_before)(type_info*,type_info*); -static int (WINAPI *ptype_info_opequals_equals)(type_info*,type_info*); -static int (WINAPI *ptype_info_opnot_equals)(type_info*,type_info*); - -/* RTTI */ -static type_info* (*p__RTtypeid)(void*); -static void* (*p__RTCastToVoid)(void*); -static void* (*p__RTDynamicCast)(void*,int,void*,void*,int); - -/*Demangle*/ -static char* (*p__unDName)(char*,const char*,int,void*,void*,unsigned short int); - - -/* _very_ early native versions have serious RTTI bugs, so we check */ -static void* bAncientVersion; - -/* Emulate a __thiscall */ -#ifdef _MSC_VER -static inline void* do_call_func1(void *func, void *_this) -{ - volatile void* retval = 0; - __asm - { - push ecx - mov ecx, _this - call func - mov retval, eax - pop ecx - } - return (void*)retval; -} - -static inline void* do_call_func2(void *func, void *_this, const void* arg) -{ - volatile void* retval = 0; - __asm - { - push ecx - push arg - mov ecx, _this - call func - mov retval, eax - pop ecx - } - return (void*)retval; -} -#else -static void* do_call_func1(void *func, void *_this) -{ - void* ret; - __asm__ __volatile__ ("call *%1" - : "=a" (ret) - : "g" (func), "c" (_this) - : "memory" ); - return ret; -} -static void* do_call_func2(void *func, void *_this, const void* arg) -{ - void* ret; - __asm__ __volatile__ ("pushl %2\n\tcall *%1" - : "=a" (ret) - : "r" (func), "g" (arg), "c" (_this) - : "memory" ); - return ret; -} -#endif - -#define call_func1(x,y) do_call_func1((void*)x,(void*)y) -#define call_func2(x,y,z) do_call_func2((void*)x,(void*)y,(const void*)z) - -/* Some exports are only available in later versions */ -#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hMsvcrt,y) -#define SET(x,y) SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y) - -static void InitFunctionPtrs(void) -{ - hMsvcrt = GetModuleHandleA("msvcrt.dll"); - if (!hMsvcrt) - hMsvcrt = GetModuleHandleA("msvcrtd.dll"); - ok(hMsvcrt != 0, "GetModuleHandleA failed\n"); - if (hMsvcrt) - { - SETNOFAIL(poperator_new, "??_U@YAPAXI@Z"); - SETNOFAIL(poperator_delete, "??_V@YAXPAX@Z"); - SET(pmalloc, "malloc"); - SET(pfree, "free"); - - if (!poperator_new) - poperator_new = pmalloc; - if (!poperator_delete) - poperator_delete = pfree; - - SET(pexception_ctor, "??0exception@@QAE@ABQBD@Z"); - SET(pexception_copy_ctor, "??0exception@@QAE@ABV0@@Z"); - SET(pexception_default_ctor, "??0exception@@QAE@XZ"); - SET(pexception_dtor, "??1exception@@UAE@XZ"); - SET(pexception_opequals, "??4exception@@QAEAAV0@ABV0@@Z"); - SET(pexception_what, "?what@exception@@UBEPBDXZ"); - SET(pexception_vtable, "??_7exception@@6B@"); - SET(pexception_vector_dtor, "??_Eexception@@UAEPAXI@Z"); - SET(pexception_scalar_dtor, "??_Gexception@@UAEPAXI@Z"); - - SET(pbad_typeid_ctor, "??0bad_typeid@@QAE@PBD@Z"); - SETNOFAIL(pbad_typeid_ctor_closure, "??_Fbad_typeid@@QAEXXZ"); - SET(pbad_typeid_copy_ctor, "??0bad_typeid@@QAE@ABV0@@Z"); - SET(pbad_typeid_dtor, "??1bad_typeid@@UAE@XZ"); - SET(pbad_typeid_opequals, "??4bad_typeid@@QAEAAV0@ABV0@@Z"); - SET(pbad_typeid_what, "?what@exception@@UBEPBDXZ"); - SET(pbad_typeid_vtable, "??_7bad_typeid@@6B@"); - SET(pbad_typeid_vector_dtor, "??_Ebad_typeid@@UAEPAXI@Z"); - SET(pbad_typeid_scalar_dtor, "??_Gbad_typeid@@UAEPAXI@Z"); - - SETNOFAIL(pbad_cast_ctor, "??0bad_cast@@QAE@ABQBD@Z"); - if (!pbad_cast_ctor) - SET(pbad_cast_ctor, "??0bad_cast@@AAE@PBQBD@Z"); - SETNOFAIL(pbad_cast_ctor2, "??0bad_cast@@QAE@PBD@Z"); - SETNOFAIL(pbad_cast_ctor_closure, "??_Fbad_cast@@QAEXXZ"); - SET(pbad_cast_copy_ctor, "??0bad_cast@@QAE@ABV0@@Z"); - SET(pbad_cast_dtor, "??1bad_cast@@UAE@XZ"); - SET(pbad_cast_opequals, "??4bad_cast@@QAEAAV0@ABV0@@Z"); - SET(pbad_cast_what, "?what@exception@@UBEPBDXZ"); - SET(pbad_cast_vtable, "??_7bad_cast@@6B@"); - SET(pbad_cast_vector_dtor, "??_Ebad_cast@@UAEPAXI@Z"); - SET(pbad_cast_scalar_dtor, "??_Gbad_cast@@UAEPAXI@Z"); - - SET(p__non_rtti_object_ctor, "??0__non_rtti_object@@QAE@PBD@Z"); - SET(p__non_rtti_object_copy_ctor, "??0__non_rtti_object@@QAE@ABV0@@Z"); - SET(p__non_rtti_object_dtor, "??1__non_rtti_object@@UAE@XZ"); - SET(p__non_rtti_object_opequals, "??4__non_rtti_object@@QAEAAV0@ABV0@@Z"); - SET(p__non_rtti_object_what, "?what@exception@@UBEPBDXZ"); - SET(p__non_rtti_object_vtable, "??_7__non_rtti_object@@6B@"); - SET(p__non_rtti_object_vector_dtor, "??_E__non_rtti_object@@UAEPAXI@Z"); - SET(p__non_rtti_object_scalar_dtor, "??_G__non_rtti_object@@UAEPAXI@Z"); - - SET(ptype_info_dtor, "??1type_info@@UAE@XZ"); - SET(ptype_info_raw_name, "?raw_name@type_info@@QBEPBDXZ"); - SET(ptype_info_name, "?name@type_info@@QBEPBDXZ"); - SET(ptype_info_before, "?before@type_info@@QBEHABV1@@Z"); - SET(ptype_info_opequals_equals, "??8type_info@@QBEHABV0@@Z"); - SET(ptype_info_opnot_equals, "??9type_info@@QBEHABV0@@Z"); - - SET(p__RTtypeid, "__RTtypeid"); - SET(p__RTCastToVoid, "__RTCastToVoid"); - SET(p__RTDynamicCast, "__RTDynamicCast"); - - SET(p__unDName,"__unDName"); - - /* Extremely early versions export logic_error, and crash in RTTI */ - SETNOFAIL(bAncientVersion, "??0logic_error@@QAE@ABQBD@Z"); - } -} - -static void test_exception(void) -{ - static const char* e_name = "An exception name"; - char* name; - exception e, e2, e3, *pe; - - if (!poperator_new || !poperator_delete || - !pexception_ctor || !pexception_copy_ctor || !pexception_default_ctor || - !pexception_dtor || !pexception_opequals || !pexception_what || - !pexception_vtable || !pexception_vector_dtor || !pexception_scalar_dtor) - return; - - /* 'const char*&' ctor */ - memset(&e, 0, sizeof(e)); - call_func2(pexception_ctor, &e, &e_name); - ok(e.vtable != NULL, "Null exception vtable for e\n"); - ok(e.name && e.name != e_name && !strcmp(e.name, "An exception name"), "Bad name '%s' for e\n", e.name); - ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free); - - /* Copy ctor */ - memset(&e2, 0, sizeof(e2)); - call_func2(pexception_copy_ctor, &e2, &e); - ok(e2.vtable != NULL, "Null exception vtable for e2\n"); - ok(e2.name && e2.name != e.name && !strcmp(e2.name, "An exception name"), "Bad exception name for e2\n"); - ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free); - - /* Default ctor */ - memset(&e3, 1, sizeof(e3)); - call_func1(pexception_default_ctor, &e3); - ok(e3.vtable != NULL, "Null exception vtable for e3\n"); - ok(e3.name == NULL, "Bad exception name for e3\n"); - ok(e3.do_free == 0, "do_free set to %d for e3\n", e3.do_free); - - ok(e.vtable == e2.vtable && e.vtable == e3.vtable, "exception vtables differ!\n"); - - /* Test calling the dtors */ - call_func1(pexception_dtor, &e2); - call_func1(pexception_dtor, &e3); - - /* Operator equals */ - memset(&e2, 0, sizeof(e2)); - pe = call_func2(pexception_opequals, &e2, &e); - ok(e2.vtable != NULL, "Null exception vtable for e2\n"); - ok(e2.name && e2.name != e.name && !strcmp(e2.name, "An exception name"), "Bad exception name for e2\n"); - ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free); - ok(pe == &e2, "opequals didn't return e2\n"); - - /* what() */ - name = call_func1(pexception_what, &e2); - ok(e2.name == name, "Bad exception name from e2::what()\n"); - - /* vtable ptr */ - ok(e2.vtable == pexception_vtable, "Bad vtable for e2\n"); - call_func1(pexception_dtor, &e2); - - /* new() */ - pe = poperator_new(sizeof(exception)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - call_func2(pexception_ctor, pe, &e_name); - /* scalar dtor */ - call_func2(pexception_scalar_dtor, pe, 0); /* Shouldn't delete pe */ - pe->name = NULL; - pe->do_free = 0; - call_func2(pexception_scalar_dtor, pe, 1); /* Should delete pe */ - } - - pe = poperator_new(sizeof(exception)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - /* vector dtor, single element */ - call_func2(pexception_ctor, pe, &e_name); - call_func2(pexception_vector_dtor, pe, 1); /* Should delete pe as single element*/ - } - - pe = poperator_new(sizeof(exception) * 4 + sizeof(int)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - /* vector dtor, multiple elements */ - char name[] = "a constant"; - *((int*)pe) = 3; - pe = (exception*)((int*)pe + 1); - call_func2(pexception_ctor, &pe[0], &e_name); - call_func2(pexception_ctor, &pe[1], &e_name); - call_func2(pexception_ctor, &pe[2], &e_name); - pe[3].name = name; - pe[3].do_free = 1; /* Crash if we try to free this */ - call_func2(pexception_vector_dtor, pe, 3); /* Should delete all 3 and then pe block */ - } - - /* test our exported vtable is kosher */ - pe = (void*)pexception_vtable; /* Use the exception struct to get vtable ptrs */ - pexception_vector_dtor = (void*)pe->vtable; - pexception_what = (void*)pe->name; - - name = call_func1(pexception_what, &e); - ok(e.name == name, "Bad exception name from vtable e::what()\n"); - - if (p__RTtypeid && !bAncientVersion) - { - /* Check the rtti */ - type_info *ti = p__RTtypeid(&e); - ok (ti && ti->mangled && - !strcmp(ti->mangled, ".?AVexception@@"), "bad rtti for e\n"); - - if (ti) - { - /* Check the returned type_info has rtti too */ - type_info *ti2 = p__RTtypeid(ti); - ok (ti2 != NULL && !strcmp(ti2->mangled, ".?AVtype_info@@"), "bad rtti for e's type_info\n"); - } - } - - call_func2(pexception_vector_dtor, &e, 0); /* Should delete e.name, but not e */ -} - -/* This test is basically a cut 'n' paste of the exception test. but it verifies that - * bad_typeid works the exact same way... */ -static void test_bad_typeid(void) -{ - static const char* e_name = "A bad_typeid name"; - char* name; - exception e, e2, e3, *pe; - - if (!poperator_new || !poperator_delete || - !pbad_typeid_ctor || !pbad_typeid_copy_ctor || - !pbad_typeid_dtor || !pbad_typeid_opequals || !pbad_typeid_what || - !pbad_typeid_vtable || !pbad_typeid_vector_dtor || !pbad_typeid_scalar_dtor) - return; - - /* 'const char*' ctor */ - memset(&e, 0, sizeof(e)); - call_func2(pbad_typeid_ctor, &e, e_name); - ok(e.vtable != NULL, "Null bad_typeid vtable for e\n"); - ok(e.name && e.name != e_name && !strcmp(e.name, "A bad_typeid name"), "Bad name '%s' for e\n", e.name); - ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free); - - /* Copy ctor */ - memset(&e2, 0, sizeof(e2)); - call_func2(pbad_typeid_copy_ctor, &e2, &e); - ok(e2.vtable != NULL, "Null bad_typeid vtable for e2\n"); - ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A bad_typeid name"), "Bad name '%s' for e2\n", e2.name); - ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free); - - /* Ctor closure */ - if (pbad_typeid_ctor_closure) - { - memset(&e3, 1, sizeof(e3)); - call_func1(pbad_typeid_ctor_closure, &e3); - ok(e3.vtable != NULL, "Null bad_typeid vtable for e3\n"); - ok(e3.name && !strcmp(e3.name, "bad typeid"), "Bad bad_typeid name for e3\n"); - ok(e3.do_free == 1, "do_free set to %d for e3\n", e3.do_free); - ok(e.vtable == e3.vtable, "bad_typeid closure vtables differ!\n"); - call_func1(pbad_typeid_dtor, &e3); - } - ok(e.vtable == e2.vtable, "bad_typeid vtables differ!\n"); - - /* Test calling the dtors */ - call_func1(pbad_typeid_dtor, &e2); - - /* Operator equals */ - memset(&e2, 1, sizeof(e2)); - pe = call_func2(pbad_typeid_opequals, &e2, &e); - ok(e2.vtable != NULL, "Null bad_typeid vtable for e2\n"); - ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A bad_typeid name"), "Bad bad_typeid name for e2\n"); - ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free); - ok(pe == &e2, "opequals didn't return e2\n"); - - /* what() */ - name = call_func1(pbad_typeid_what, &e2); - ok(e2.name == name, "Bad bad_typeid name from e2::what()\n"); - - /* vtable ptr */ - ok(e2.vtable == pexception_vtable, "Bad vtable for e2\n"); - call_func1(pbad_typeid_dtor, &e2); - - /* new() */ - pe = poperator_new(sizeof(exception)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - call_func2(pbad_typeid_ctor, pe, e_name); - /* scalar dtor */ - call_func2(pbad_typeid_scalar_dtor, pe, 0); /* Shouldn't delete pe */ - pe->name = NULL; - pe->do_free = 0; - call_func2(pbad_typeid_scalar_dtor, pe, 1); /* Should delete pe */ - } - - pe = poperator_new(sizeof(exception)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - /* vector dtor, single element */ - call_func2(pbad_typeid_ctor, pe, e_name); - call_func2(pbad_typeid_vector_dtor, pe, 1); /* Should delete pe as single element*/ - } - - pe = poperator_new(sizeof(exception) * 4 + sizeof(int)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - /* vector dtor, multiple elements */ - *((int*)pe) = 3; - pe = (exception*)((int*)pe + 1); - call_func2(pbad_typeid_ctor, &pe[0], e_name); - call_func2(pbad_typeid_ctor, &pe[1], e_name); - call_func2(pbad_typeid_ctor, &pe[2], e_name); - pe[3].name = 0; - pe[3].do_free = 1; /* Crash if we try to free this element */ - call_func2(pbad_typeid_vector_dtor, pe, 3); /* Should delete all 3 and then pe block */ - } - - /* test our exported vtable is kosher */ - pe = (void*)pbad_typeid_vtable; /* Use the exception struct to get vtable ptrs */ - pbad_typeid_vector_dtor = (void*)pe->vtable; - pbad_typeid_what = (void*)pe->name; - - name = call_func1(pbad_typeid_what, &e); - ok(e.name == name, "Bad bad_typeid name from vtable e::what()\n"); - - if (p__RTtypeid && !bAncientVersion) - { - /* Check the rtti */ - type_info *ti = p__RTtypeid(&e); - ok (ti != NULL && !strcmp(ti->mangled, ".?AVbad_typeid@@"), "bad rtti for e (%s)\n", - !ti ? "null" : ti->mangled); - } - - call_func2(pbad_typeid_vector_dtor, &e, 0); /* Should delete e.name, but not e */ -} - - -/* Ditto for this test... */ -static void test_bad_cast(void) -{ - static const char* e_name = "A bad_cast name"; - char* name; - exception e, e2, e3, *pe; - - if (!poperator_new || !poperator_delete || - !pbad_cast_ctor || !pbad_cast_copy_ctor || - !pbad_cast_dtor || !pbad_cast_opequals || !pbad_cast_what || - !pbad_cast_vtable || !pbad_cast_vector_dtor || !pbad_cast_scalar_dtor) - return; - - if (pbad_cast_ctor2) - { - /* 'const char*' ctor */ - memset(&e, 0, sizeof(e)); - call_func2(pbad_cast_ctor2, &e, e_name); - ok(e.vtable != NULL, "Null bad_cast vtable for e\n"); - ok(e.name && e.name != e_name && !strcmp(e.name, "A bad_cast name"), "Bad name '%s' for e\n", e.name); - ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free); - call_func1(pbad_cast_dtor, &e); - } - - /* 'const char*&' ctor */ - memset(&e, 0, sizeof(e)); - call_func2(pbad_cast_ctor, &e, &e_name); - ok(e.vtable != NULL, "Null bad_cast vtable for e\n"); - ok(e.name && e.name != e_name && !strcmp(e.name, "A bad_cast name"), "Bad name '%s' for e\n", e.name); - ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free); - - /* Copy ctor */ - memset(&e2, 0, sizeof(e2)); - call_func2(pbad_cast_copy_ctor, &e2, &e); - ok(e2.vtable != NULL, "Null bad_cast vtable for e2\n"); - ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A bad_cast name"), "Bad name '%s' for e2\n", e2.name); - ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free); - - /* Ctor closure */ - if (pbad_cast_ctor_closure) - { - memset(&e3, 1, sizeof(e3)); - call_func1(pbad_cast_ctor_closure, &e3); - ok(e3.vtable != NULL, "Null bad_cast vtable for e3\n"); - ok(e3.name && !strcmp(e3.name, "bad cast"), "Bad bad_cast name for e3\n"); - ok(e3.do_free == 1, "do_free set to %d for e3\n", e3.do_free); - ok(e.vtable == e3.vtable, "bad_cast closure vtables differ!\n"); - call_func1(pbad_cast_dtor, &e3); - } - ok(e.vtable == e2.vtable, "bad_cast vtables differ!\n"); - - /* Test calling the dtors */ - call_func1(pbad_cast_dtor, &e2); - - /* Operator equals */ - memset(&e2, 1, sizeof(e2)); - pe = call_func2(pbad_cast_opequals, &e2, &e); - ok(e2.vtable != NULL, "Null bad_cast vtable for e2\n"); - ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A bad_cast name"), "Bad bad_cast name for e2\n"); - ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free); - ok(pe == &e2, "opequals didn't return e2\n"); - - /* what() */ - name = call_func1(pbad_cast_what, &e2); - ok(e2.name == name, "Bad bad_cast name from e2::what()\n"); - - /* vtable ptr */ - ok(e2.vtable == pexception_vtable, "Bad vtable for e2\n"); - call_func1(pbad_cast_dtor, &e2); - - /* new() */ - pe = poperator_new(sizeof(exception)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - call_func2(pbad_cast_ctor, pe, &e_name); - /* scalar dtor */ - call_func2(pbad_cast_scalar_dtor, pe, 0); /* Shouldn't delete pe */ - pe->name = NULL; - pe->do_free = 0; - call_func2(pbad_cast_scalar_dtor, pe, 1); /* Should delete pe */ - } - - pe = poperator_new(sizeof(exception)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - /* vector dtor, single element */ - call_func2(pbad_cast_ctor, pe, &e_name); - call_func2(pbad_cast_vector_dtor, pe, 1); /* Should delete pe as single element*/ - } - - pe = poperator_new(sizeof(exception) * 4 + sizeof(int)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - /* vector dtor, multiple elements */ - *((int*)pe) = 3; - pe = (exception*)((int*)pe + 1); - call_func2(pbad_cast_ctor, &pe[0], &e_name); - call_func2(pbad_cast_ctor, &pe[1], &e_name); - call_func2(pbad_cast_ctor, &pe[2], &e_name); - pe[3].name = 0; - pe[3].do_free = 1; /* Crash if we try to free this element */ - call_func2(pbad_cast_vector_dtor, pe, 3); /* Should delete all 3 and then pe block */ - } - - /* test our exported vtable is kosher */ - pe = (void*)pbad_cast_vtable; /* Use the exception struct to get vtable ptrs */ - pbad_cast_vector_dtor = (void*)pe->vtable; - pbad_cast_what = (void*)pe->name; - - name = call_func1(pbad_cast_what, &e); - ok(e.name == name, "Bad bad_cast name from vtable e::what()\n"); - - if (p__RTtypeid && !bAncientVersion) - { - /* Check the rtti */ - type_info *ti = p__RTtypeid(&e); - ok (ti != NULL && !strcmp(ti->mangled, ".?AVbad_cast@@"), "bad rtti for e\n"); - } - call_func2(pbad_cast_vector_dtor, &e, 0); /* Should delete e.name, but not e */ -} - -/* ... and this one */ -static void test___non_rtti_object(void) -{ - static const char* e_name = "A __non_rtti_object name"; - char* name; - exception e, e2, *pe; - - if (!poperator_new || !poperator_delete || - !p__non_rtti_object_ctor || !p__non_rtti_object_copy_ctor || - !p__non_rtti_object_dtor || !p__non_rtti_object_opequals || !p__non_rtti_object_what || - !p__non_rtti_object_vtable || !p__non_rtti_object_vector_dtor || !p__non_rtti_object_scalar_dtor) - return; - - /* 'const char*' ctor */ - memset(&e, 0, sizeof(e)); - call_func2(p__non_rtti_object_ctor, &e, e_name); - ok(e.vtable != NULL, "Null __non_rtti_object vtable for e\n"); - ok(e.name && e.name != e_name && !strcmp(e.name, "A __non_rtti_object name"), "Bad name '%s' for e\n", e.name); - ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free); - - /* Copy ctor */ - memset(&e2, 0, sizeof(e2)); - call_func2(p__non_rtti_object_copy_ctor, &e2, &e); - ok(e2.vtable != NULL, "Null __non_rtti_object vtable for e2\n"); - ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A __non_rtti_object name"), "Bad name '%s' for e2\n", e2.name); - ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free); - ok(e.vtable == e2.vtable, "__non_rtti_object vtables differ!\n"); - - /* Test calling the dtors */ - call_func1(p__non_rtti_object_dtor, &e2); - - /* Operator equals */ - memset(&e2, 1, sizeof(e2)); - pe = call_func2(p__non_rtti_object_opequals, &e2, &e); - ok(e2.vtable != NULL, "Null __non_rtti_object vtable for e2\n"); - ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A __non_rtti_object name"), "Bad __non_rtti_object name for e2\n"); - ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free); - ok(pe == &e2, "opequals didn't return e2\n"); - - /* what() */ - name = call_func1(p__non_rtti_object_what, &e2); - ok(e2.name == name, "Bad __non_rtti_object name from e2::what()\n"); - - /* vtable ptr */ - ok(e2.vtable == pexception_vtable, "Bad vtable for e2\n"); - call_func1(p__non_rtti_object_dtor, &e2); - - /* new() */ - pe = poperator_new(sizeof(exception)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - call_func2(p__non_rtti_object_ctor, pe, e_name); - /* scalar dtor */ - call_func2(p__non_rtti_object_scalar_dtor, pe, 0); /* Shouldn't delete pe */ - pe->name = NULL; - pe->do_free = 0; - call_func2(p__non_rtti_object_scalar_dtor, pe, 1); /* Should delete pe */ - } - - pe = poperator_new(sizeof(exception)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - /* vector dtor, single element */ - call_func2(p__non_rtti_object_ctor, pe, e_name); - call_func2(p__non_rtti_object_vector_dtor, pe, 1); /* Should delete pe as single element*/ - } - - pe = poperator_new(sizeof(exception) * 4 + sizeof(int)); - ok(pe != NULL, "new() failed\n"); - if (pe) - { - /* vector dtor, multiple elements */ - *((int*)pe) = 3; - pe = (exception*)((int*)pe + 1); - call_func2(p__non_rtti_object_ctor, &pe[0], e_name); - call_func2(p__non_rtti_object_ctor, &pe[1], e_name); - call_func2(p__non_rtti_object_ctor, &pe[2], e_name); - pe[3].name = 0; - pe[3].do_free = 1; /* Crash if we try to free this element */ - call_func2(p__non_rtti_object_vector_dtor, pe, 3); /* Should delete all 3 and then pe block */ - } - - /* test our exported vtable is kosher */ - pe = (void*)p__non_rtti_object_vtable; /* Use the exception struct to get vtable ptrs */ - p__non_rtti_object_vector_dtor = (void*)pe->vtable; - p__non_rtti_object_what = (void*)pe->name; - - name = call_func1(p__non_rtti_object_what, &e); - ok(e.name == name, "Bad __non_rtti_object name from vtable e::what()\n"); - - if (p__RTtypeid && !bAncientVersion) - { - /* Check the rtti */ - type_info *ti = p__RTtypeid(&e); - ok (ti != NULL && !strcmp(ti->mangled, ".?AV__non_rtti_object@@"), "bad rtti for e\n"); - } - call_func2(p__non_rtti_object_vector_dtor, &e, 0); /* Should delete e.name, but not e */ -} - - -static void test_type_info(void) -{ - static type_info t1 = { NULL, NULL,{'.','?','A','V','t','e','s','t','1','@','@',0,0,0,0,0 } }; - static type_info t1_1 = { NULL, NULL,{'?','?','A','V','t','e','s','t','1','@','@',0,0,0,0,0 } }; - static type_info t2 = { NULL, NULL, {'.','?','A','V','t','e','s','t','2','@','@',0,0,0,0,0 } }; - char* name; - int res; - - if (!pmalloc || !pfree || !ptype_info_dtor || !ptype_info_raw_name || - !ptype_info_name || !ptype_info_before || - !ptype_info_opequals_equals || !ptype_info_opnot_equals) - return; - - /* Test calling the dtors */ - call_func1(ptype_info_dtor, &t1); /* No effect, since name is NULL */ - t1.name = pmalloc(64); - strcpy(t1.name, "foo"); - call_func1(ptype_info_dtor, &t1); /* Frees t1.name using 'free' */ - - /* raw_name */ - t1.name = NULL; - name = call_func1(ptype_info_raw_name, &t1); - - /* FIXME: This fails on native; it shouldn't though - native bug? - * ok(name && !strcmp(name, t1.mangled), "bad raw_name '%s' for t1 (expected '%s')\n", name, t1.mangled); - */ - ok(t1.name == NULL, "raw_name() set name for t1\n"); - - /* name */ - t1.name = NULL; - name = call_func1(ptype_info_name, &t1); - ok(name && t1.name && !strcmp(name, t1.name), "bad name '%s' for t1\n", name); - - ok(t1.name && !strcmp(t1.name, "class test1"), "demangled to '%s' for t1\n", t1.name); - call_func1(ptype_info_dtor, &t1); - - /* before */ - t1.name = NULL; - res = (int)call_func2(ptype_info_before, &t1, &t1); - ok(res == 0, "expected 0, got %d\n", res); - res = (int)call_func2(ptype_info_before, &t2, &t1); - ok(res == 0, "expected 0, got %d\n", res); - res = (int)call_func2(ptype_info_before, &t1, &t2); - ok(res == 1, "expected 1, got %d\n", res); - /* Doesn't check first char */ - res = (int)call_func2(ptype_info_before, &t1, &t1_1); - ok(res == 0, "expected 0, got %d\n", res); - - /* opequals_equals */ - t1.name = NULL; - res = (int)call_func2(ptype_info_opequals_equals, &t1, &t1); - ok(res == 1, "expected 1, got %d\n", res); - res = (int)call_func2(ptype_info_opequals_equals, &t1, &t2); - ok(res == 0, "expected 0, got %d\n", res); - res = (int)call_func2(ptype_info_opequals_equals, &t2, &t1); - ok(res == 0, "expected 0, got %d\n", res); - - /* opnot_equals */ - t1.name = NULL; - res = (int)call_func2(ptype_info_opnot_equals, &t1, &t1); - ok(res == 0, "expected 0, got %d\n", res); - res = (int)call_func2(ptype_info_opnot_equals, &t1, &t2); - ok(res == 1, "expected 1, got %d\n", res); - res = (int)call_func2(ptype_info_opnot_equals, &t2, &t1); - ok(res == 1, "expected 1, got %d\n", res); -} - -/* Test RTTI functions */ -static void test_rtti(void) -{ - static const char* e_name = "name"; - type_info *ti,*bti; - exception e,b; - void *casted; - - if (bAncientVersion || - !p__RTCastToVoid || !p__RTtypeid || !pexception_ctor || !pbad_typeid_ctor || !p__RTDynamicCast) - return; - - call_func2(pexception_ctor, &e, &e_name); - call_func2(pbad_typeid_ctor, &b, e_name); - - /* dynamic_cast to void* */ - casted = p__RTCastToVoid(&e); - ok (casted == (void*)&e, "failed cast to void\n"); - - /* dynamic_cast up */ - ti = p__RTtypeid(&e); - bti = p__RTtypeid(&b); - - casted = p__RTDynamicCast(&b, 0, NULL, ti, 0); - ok (casted == (void*)&b, "failed cast from bad_cast to exception\n"); - - /* dynamic_cast down */ - casted = p__RTDynamicCast(&e, 0, NULL, bti, 0); - ok (casted == NULL, "Cast succeeded\n"); -} - -struct _demangle { - LPCSTR mangled; - LPCSTR result; - BOOL test_in_wine; -}; - -static void test_demangle_datatype(void) -{ - char * name; - struct _demangle demangle[]={ -/* { "BlaBla"," ?? ::Bla", FALSE}, */ - { "ABVVec4@ref2@dice@@","class dice::ref2::Vec4 const &",TRUE}, - { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0H@@@", "class CDB_GEN_BIG_ENUM_FLAG", TRUE}, - { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HO@@@", "class CDB_GEN_BIG_ENUM_FLAG",TRUE}, - { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HOA@@@", "class CDB_GEN_BIG_ENUM_FLAG",TRUE}, - { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HOAA@@@", "class CDB_GEN_BIG_ENUM_FLAG",TRUE}, - { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$01@@@", "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$01@@@", FALSE}, -/* { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$011@@@", "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$011@@@",FALSE}, */ - }; - int i, num_test = (sizeof(demangle)/sizeof(struct _demangle)); - - for (i = 0; i < num_test; i++) - { - name = p__unDName(0, demangle[i].mangled, 0, pmalloc, pfree, 0x2800); - if (demangle[i].test_in_wine) - ok(name != NULL && !strcmp(name,demangle[i].result), "Got name \"%s\" for %d\n", name, i); - else - todo_wine ok(name != NULL && !strcmp(name,demangle[i].result), "Got name %s for %d\n", name, i); - - } -} - -/* Compare two strings treating multiple spaces (' ', ascii 0x20) in s2 - as single space. Needed for test_demangle as __unDName() returns sometimes - two spaces instead of one in some older native msvcrt dlls. */ -static int strcmp_space(const char *s1, const char *s2) -{ - const char* s2start = s2; - do { - while (*s1 == *s2 && *s1) { - s1++; - s2++; - } - if (*s2 == ' ' && s2 > s2start && *(s2 - 1) == ' ') - s2++; - else - break; - } while (*s1 && *s2); - return *s1 - *s2; -} - -static void test_demangle(void) -{ - static struct {const char* in; const char* out; unsigned int flags;} test[] = { -{"??0bad_alloc@std@@QAE@ABV01@@Z", "public: __thiscall std::bad_alloc::bad_alloc(class std::bad_alloc const &)"}, -{"??0bad_alloc@std@@QAE@PBD@Z", "public: __thiscall std::bad_alloc::bad_alloc(char const *)"}, -{"??0bad_cast@@AAE@PBQBD@Z", "private: __thiscall bad_cast::bad_cast(char const * const *)"}, -{"??0bad_cast@@QAE@ABQBD@Z", "public: __thiscall bad_cast::bad_cast(char const * const &)"}, -{"??0bad_cast@@QAE@ABV0@@Z", "public: __thiscall bad_cast::bad_cast(class bad_cast const &)"}, -{"??0bad_exception@std@@QAE@ABV01@@Z", "public: __thiscall std::bad_exception::bad_exception(class std::bad_exception const &)"}, -{"??0bad_exception@std@@QAE@PBD@Z", "public: __thiscall std::bad_exception::bad_exception(char const *)"}, -{"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@ABV01@@Z", "public: __thiscall std::basic_filebuf >::basic_filebuf >(class std::basic_filebuf > const &)"}, -{"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z", "public: __thiscall std::basic_filebuf >::basic_filebuf >(struct _iobuf *)"}, -{"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z", "public: __thiscall std::basic_filebuf >::basic_filebuf >(enum std::_Uninitialized)"}, -{"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@ABV01@@Z", "public: __thiscall std::basic_filebuf >::basic_filebuf >(class std::basic_filebuf > const &)"}, -{"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z", "public: __thiscall std::basic_filebuf >::basic_filebuf >(struct _iobuf *)"}, -{"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z", "public: __thiscall std::basic_filebuf >::basic_filebuf >(enum std::_Uninitialized)"}, -{"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z", "public: __thiscall std::basic_stringstream,class std::allocator >::basic_stringstream,class std::allocator >(class std::basic_stringstream,class std::allocator > const &)"}, -{"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z", "public: __thiscall std::basic_stringstream,class std::allocator >::basic_stringstream,class std::allocator >(class std::basic_string,class std::allocator > const &,int)"}, -{"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z", "public: __thiscall std::basic_stringstream,class std::allocator >::basic_stringstream,class std::allocator >(int)"}, -{"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z", "public: __thiscall std::basic_stringstream,class std::allocator >::basic_stringstream,class std::allocator >(class std::basic_stringstream,class std::allocator > const &)"}, -{"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z", "public: __thiscall std::basic_stringstream,class std::allocator >::basic_stringstream,class std::allocator >(class std::basic_string,class std::allocator > const &,int)"}, -{"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z", "public: __thiscall std::basic_stringstream,class std::allocator >::basic_stringstream,class std::allocator >(int)"}, -{"??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z", "public: __thiscall std::num_get > >::num_get > >(class std::_Locinfo const &,unsigned int)"}, -{"??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z", "public: __thiscall std::num_get > >::num_get > >(unsigned int)"}, -{"??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z", "public: __thiscall std::num_get > >::num_get > >(class std::_Locinfo const &,unsigned int)"}, -{"??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z", "public: __thiscall std::num_get > >::num_get > >(unsigned int)"}, -{"??0streambuf@@QAE@ABV0@@Z", "public: __thiscall streambuf::streambuf(class streambuf const &)"}, -{"??0strstreambuf@@QAE@ABV0@@Z", "public: __thiscall strstreambuf::strstreambuf(class strstreambuf const &)"}, -{"??0strstreambuf@@QAE@H@Z", "public: __thiscall strstreambuf::strstreambuf(int)"}, -{"??0strstreambuf@@QAE@P6APAXJ@ZP6AXPAX@Z@Z", "public: __thiscall strstreambuf::strstreambuf(void * (__cdecl*)(long),void (__cdecl*)(void *))"}, -{"??0strstreambuf@@QAE@PADH0@Z", "public: __thiscall strstreambuf::strstreambuf(char *,int,char *)"}, -{"??0strstreambuf@@QAE@PAEH0@Z", "public: __thiscall strstreambuf::strstreambuf(unsigned char *,int,unsigned char *)"}, -{"??0strstreambuf@@QAE@XZ", "public: __thiscall strstreambuf::strstreambuf(void)"}, -{"??1__non_rtti_object@std@@UAE@XZ", "public: virtual __thiscall std::__non_rtti_object::~__non_rtti_object(void)"}, -{"??1__non_rtti_object@@UAE@XZ", "public: virtual __thiscall __non_rtti_object::~__non_rtti_object(void)"}, -{"??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ", "public: virtual __thiscall std::num_get > >::~num_get > >(void)"}, -{"??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ", "public: virtual __thiscall std::num_get > >::~num_get > >(void)"}, -{"??4istream_withassign@@QAEAAV0@ABV0@@Z", "public: class istream_withassign & __thiscall istream_withassign::operator=(class istream_withassign const &)"}, -{"??4istream_withassign@@QAEAAVistream@@ABV1@@Z", "public: class istream & __thiscall istream_withassign::operator=(class istream const &)"}, -{"??4istream_withassign@@QAEAAVistream@@PAVstreambuf@@@Z", "public: class istream & __thiscall istream_withassign::operator=(class streambuf *)"}, -{"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAC@Z", "class std::basic_istream > & __cdecl std::operator>>(class std::basic_istream > &,signed char &)"}, -{"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAD@Z", "class std::basic_istream > & __cdecl std::operator>>(class std::basic_istream > &,char &)"}, -{"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAE@Z", "class std::basic_istream > & __cdecl std::operator>>(class std::basic_istream > &,unsigned char &)"}, -{"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z", "public: class std::basic_ostream > & __thiscall std::basic_ostream >::operator<<(class std::ios_base & (__cdecl*)(class std::ios_base &))"}, -{"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z", "public: class std::basic_ostream > & __thiscall std::basic_ostream >::operator<<(class std::basic_streambuf > *)"}, -{"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z", "public: class std::basic_ostream > & __thiscall std::basic_ostream >::operator<<(void const *)"}, -{"??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@", "const std::basic_fstream >::`vbtable'{for `std::basic_ostream >'}"}, -{"??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@", "const std::basic_fstream >::`vbtable'{for `std::basic_istream >'}"}, -{"??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@", "const std::basic_fstream >::`vbtable'{for `std::basic_ostream >'}"}, -{"??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z", "bool __cdecl std::operator!=(char const *,class std::basic_string,class std::allocator > const &)"}, -{"??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z", "bool __cdecl std::operator!=(unsigned short const *,class std::basic_string,class std::allocator > const &)"}, -{"??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z", "public: char & __thiscall std::basic_string,class std::allocator >::operator[](unsigned int)"}, -{"??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z", "public: char const & __thiscall std::basic_string,class std::allocator >::operator[](unsigned int)const "}, -{"??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z", "public: unsigned short & __thiscall std::basic_string,class std::allocator >::operator[](unsigned int)"}, -{"??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z", "public: unsigned short const & __thiscall std::basic_string,class std::allocator >::operator[](unsigned int)const "}, -{"?abs@std@@YAMABV?$complex@M@1@@Z", "float __cdecl std::abs(class std::complex const &)"}, -{"?abs@std@@YANABV?$complex@N@1@@Z", "double __cdecl std::abs(class std::complex const &)"}, -{"?abs@std@@YAOABV?$complex@O@1@@Z", "long double __cdecl std::abs(class std::complex const &)"}, -{"?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A", "class std::basic_istream > std::cin"}, -{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z", "protected: virtual class std::istreambuf_iterator > __thiscall std::num_get > >::do_get(class std::istreambuf_iterator >,class std::istreambuf_iterator >,class std::ios_base &,int &,unsigned short &)const "}, -{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z", "protected: virtual class std::istreambuf_iterator > __thiscall std::num_get > >::do_get(class std::istreambuf_iterator >,class std::istreambuf_iterator >,class std::ios_base &,int &,unsigned int &)const "}, -{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z", "protected: virtual class std::istreambuf_iterator > __thiscall std::num_get > >::do_get(class std::istreambuf_iterator >,class std::istreambuf_iterator >,class std::ios_base &,int &,long &)const "}, -{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z", "protected: virtual class std::istreambuf_iterator > __thiscall std::num_get > >::do_get(class std::istreambuf_iterator >,class std::istreambuf_iterator >,class std::ios_base &,int &,unsigned long &)const "}, -{"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z", "protected: virtual class std::istreambuf_iterator > __thiscall std::num_get > >::do_get(class std::istreambuf_iterator >,class std::istreambuf_iterator >,class std::ios_base &,int &,float &)const "}, -{"?_query_new_handler@@YAP6AHI@ZXZ", "int (__cdecl*__cdecl _query_new_handler(void))(unsigned int)"}, -{"?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z", "public: void __thiscall std::ios_base::register_callback(void (__cdecl*)(enum std::ios_base::event,class std::ios_base &,int),int)"}, -{"?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z", "public: class std::basic_istream > & __thiscall std::basic_istream >::seekg(long,enum std::ios_base::seekdir)"}, -{"?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z", "public: class std::basic_istream > & __thiscall std::basic_istream >::seekg(class std::fpos)"}, -{"?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z", "public: class std::basic_istream > & __thiscall std::basic_istream >::seekg(long,enum std::ios_base::seekdir)"}, -{"?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z", "public: class std::basic_istream > & __thiscall std::basic_istream >::seekg(class std::fpos)"}, -{"?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z", "protected: virtual class std::fpos __thiscall std::basic_filebuf >::seekoff(long,enum std::ios_base::seekdir,int)"}, -{"?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z", "protected: virtual class std::fpos __thiscall std::basic_filebuf >::seekoff(long,enum std::ios_base::seekdir,int)"}, -{"?set_new_handler@@YAP6AXXZP6AXXZ@Z", "void (__cdecl*__cdecl set_new_handler(void (__cdecl*)(void)))(void)"}, -{"?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_istringstream,class std::allocator >::str(class std::basic_string,class std::allocator > const &)"}, -{"?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string,class std::allocator > __thiscall std::basic_istringstream,class std::allocator >::str(void)const "}, -{"?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_istringstream,class std::allocator >::str(class std::basic_string,class std::allocator > const &)"}, -{"?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string,class std::allocator > __thiscall std::basic_istringstream,class std::allocator >::str(void)const "}, -{"?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_ostringstream,class std::allocator >::str(class std::basic_string,class std::allocator > const &)"}, -{"?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string,class std::allocator > __thiscall std::basic_ostringstream,class std::allocator >::str(void)const "}, -{"?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_ostringstream,class std::allocator >::str(class std::basic_string,class std::allocator > const &)"}, -{"?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string,class std::allocator > __thiscall std::basic_ostringstream,class std::allocator >::str(void)const "}, -{"?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_stringbuf,class std::allocator >::str(class std::basic_string,class std::allocator > const &)"}, -{"?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string,class std::allocator > __thiscall std::basic_stringbuf,class std::allocator >::str(void)const "}, -{"?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_stringbuf,class std::allocator >::str(class std::basic_string,class std::allocator > const &)"}, -{"?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string,class std::allocator > __thiscall std::basic_stringbuf,class std::allocator >::str(void)const "}, -{"?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_stringstream,class std::allocator >::str(class std::basic_string,class std::allocator > const &)"}, -{"?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string,class std::allocator > __thiscall std::basic_stringstream,class std::allocator >::str(void)const "}, -{"?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_stringstream,class std::allocator >::str(class std::basic_string,class std::allocator > const &)"}, -{"?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string,class std::allocator > __thiscall std::basic_stringstream,class std::allocator >::str(void)const "}, -{"?_Sync@ios_base@std@@0_NA", "private: static bool std::ios_base::_Sync"}, -{"??_U@YAPAXI@Z", "void * __cdecl operator new[](unsigned int)"}, -{"??_V@YAXPAX@Z", "void __cdecl operator delete[](void *)"}, -{"??X?$_Complex_base@M@std@@QAEAAV01@ABM@Z", "public: class std::_Complex_base & __thiscall std::_Complex_base::operator*=(float const &)"}, -{"??Xstd@@YAAAV?$complex@M@0@AAV10@ABV10@@Z", "class std::complex & __cdecl std::operator*=(class std::complex &,class std::complex const &)"}, -{"?aaa@@YAHAAUbbb@@@Z", "int __cdecl aaa(struct bbb &)"}, -{"?aaa@@YAHBAUbbb@@@Z", "int __cdecl aaa(struct bbb & volatile)"}, -{"?aaa@@YAHPAUbbb@@@Z", "int __cdecl aaa(struct bbb *)"}, -{"?aaa@@YAHQAUbbb@@@Z", "int __cdecl aaa(struct bbb * const)"}, -{"?aaa@@YAHRAUbbb@@@Z", "int __cdecl aaa(struct bbb * volatile)"}, -{"?aaa@@YAHSAUbbb@@@Z", "int __cdecl aaa(struct bbb * const volatile)"}, -{"??0aa.a@@QAE@XZ", "??0aa.a@@QAE@XZ"}, -{"??0aa$_3a@@QAE@XZ", "public: __thiscall aa$_3a::aa$_3a(void)"}, -{"??2?$aaa@AAUbbb@@AAUccc@@AAU2@@ddd@1eee@2@QAEHXZ", "public: int __thiscall eee::eee::ddd::ddd::aaa::operator new(void)"}, -{"?pSW@@3P6GHKPAX0PAU_tagSTACKFRAME@@0P6GH0K0KPAK@ZP6GPAX0K@ZP6GK0K@ZP6GK00PAU_tagADDRESS@@@Z@ZA", "int (__stdcall* pSW)(unsigned long,void *,void *,struct _tagSTACKFRAME *,void *,int (__stdcall*)(void *,unsigned long,void *,unsigned long,unsigned long *),void * (__stdcall*)(void *,unsigned long),unsigned long (__stdcall*)(void *,unsigned long),unsigned long (__stdcall*)(void *,void *,struct _tagADDRESS *))"}, -{"?$_aaa@Vbbb@@", "_aaa"}, -{"?$aaa@Vbbb@ccc@@Vddd@2@", "aaa"}, -{ "??0?$Foo@P6GHPAX0@Z@@QAE@PAD@Z", "public: __thiscall Foo::Foo(char *)"}, -{ "??0?$Foo@P6GHPAX0@Z@@QAE@PAD@Z", "__thiscall Foo::Foo(char *)", 0x880}, -{ "?Qux@Bar@@0PAP6AHPAV1@AAH1PAH@ZA", "private: static int (__cdecl** Bar::Qux)(class Bar *,int &,int &,int *)" }, -{ "?Qux@Bar@@0PAP6AHPAV1@AAH1PAH@ZA", "Bar::Qux", 0x1800}, -{"?$AAA@$DBAB@", "AAA<`template-parameter257'>"}, -{"?$AAA@?C@", "AAA<`template-parameter-2'>"}, -{"?$AAA@PAUBBB@@", "AAA"}, -{"??$ccccc@PAVaaa@@@bar@bb@foo@@DGPAV0@PAV0@PAVee@@IPAPAVaaa@@1@Z", "private: static class bar * __stdcall foo::bb::bar::ccccc(class bar *,class ee *,unsigned int,class aaa * *,class ee *)"}, -{"?f@T@@QAEHQCY1BE@BO@D@Z", "public: int __thiscall T::f(char (volatile * const)[20][30])"}, -{"?f@T@@QAEHQAY2BE@BO@CI@D@Z", "public: int __thiscall T::f(char (* const)[20][30][40])"}, -{"?f@T@@QAEHQAY1BE@BO@$$CBD@Z", "public: int __thiscall T::f(char const (* const)[20][30])"}, - - }; - int i, num_test = (sizeof(test)/sizeof(test[0])); - char* name; - - for (i = 0; i < num_test; i++) - { - name = p__unDName(0, test[i].in, 0, pmalloc, pfree, test[i].flags); - ok(name != NULL && !strcmp_space(test[i].out, name), - "Got name \"%s\" for %d\n", name, i ); - ok(name != NULL && !strcmp_space(test[i].out, name), - "Expected \"%s\"\n", test[i].out ); - pfree(name); - } -} - -START_TEST(cpp) -{ - InitFunctionPtrs(); - - test_exception(); - test_bad_typeid(); - test_bad_cast(); - test___non_rtti_object(); - test_type_info(); - test_rtti(); - test_demangle_datatype(); - test_demangle(); -} -#endif /* __i386__ */ diff --git a/rostests/winetests/msvcrt/data.c b/rostests/winetests/msvcrt/data.c deleted file mode 100644 index a981c876cb9..00000000000 --- a/rostests/winetests/msvcrt/data.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Tests msvcrt/data.c - * - * Copyright 2006 Andrew Ziem - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef void (*_INITTERMFUN)(void); -static void (*p_initterm)(_INITTERMFUN *start, _INITTERMFUN *end); - -static int callbacked; - -static void initcallback(void) -{ - callbacked++; -} - -#define initterm_test(start, end, expected) \ - callbacked = 0; \ - p_initterm(start, end); \ - ok(expected == callbacked,"_initterm: callbacks count mismatch: got %i, expected %i\n", callbacked, expected); - -static void test_initterm(void) -{ - int i; - static _INITTERMFUN callbacks[4]; - - if (!p_initterm) - return; - - for (i = 0; i < 4; i++) - { - callbacks[i] = initcallback; - } - - initterm_test(&callbacks[0], &callbacks[1], 1); - initterm_test(&callbacks[0], &callbacks[2], 2); - initterm_test(&callbacks[0], &callbacks[3], 3); - - callbacks[1] = NULL; - initterm_test(&callbacks[0], &callbacks[3], 2); -} - -START_TEST(data) -{ - HMODULE hmsvcrt; - hmsvcrt = GetModuleHandleA("msvcrt.dll"); - if (!hmsvcrt) - hmsvcrt = GetModuleHandleA("msvcrtd.dll"); - if (hmsvcrt) - p_initterm=(void*)GetProcAddress(hmsvcrt, "_initterm"); - test_initterm(); -} diff --git a/rostests/winetests/msvcrt/dir.c b/rostests/winetests/msvcrt/dir.c deleted file mode 100644 index 6929a76a5eb..00000000000 --- a/rostests/winetests/msvcrt/dir.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Unit test suite for dir functions - * - * Copyright 2006 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 - */ - -#include "wine/test.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static void test_makepath(void) -{ - char buffer[MAX_PATH]; - - _makepath(buffer, "C", "\\foo", "dummy", "txt"); - ok( strcmp(buffer, "C:\\foo\\dummy.txt") == 0, "unexpected result: %s\n", buffer); - _makepath(buffer, "C:", "\\foo\\", "dummy", ".txt"); - ok( strcmp(buffer, "C:\\foo\\dummy.txt") == 0, "unexpected result: %s\n", buffer); - - /* this works with native and e.g. Freelancer depends on it */ - strcpy(buffer, "foo"); - _makepath(buffer, NULL, buffer, "dummy.txt", NULL); - ok( strcmp(buffer, "foo\\dummy.txt") == 0, "unexpected result: %s\n", buffer); -} - -static void test_fullpath(void) -{ - char full[MAX_PATH]; - char tmppath[MAX_PATH]; - char prevpath[MAX_PATH]; - char level1[MAX_PATH]; - char level2[MAX_PATH]; - char teststring[MAX_PATH]; - char *freeme; - BOOL rc,free1,free2; - - free1=free2=TRUE; - GetCurrentDirectory(MAX_PATH, prevpath); - GetTempPath(MAX_PATH,tmppath); - strcpy(level1,tmppath); - strcat(level1,"msvcrt-test\\"); - - rc = CreateDirectory(level1,NULL); - if (!rc && GetLastError()==ERROR_ALREADY_EXISTS) - free1=FALSE; - - strcpy(level2,level1); - strcat(level2,"nextlevel\\"); - rc = CreateDirectory(level2,NULL); - if (!rc && GetLastError()==ERROR_ALREADY_EXISTS) - free2=FALSE; - SetCurrentDirectory(level2); - - ok(_fullpath(full,"test", MAX_PATH)!=NULL,"_fullpath failed\n"); - strcpy(teststring,level2); - strcat(teststring,"test"); - ok(strcmp(full,teststring)==0,"Invalid Path returned %s\n",full); - ok(_fullpath(full,"\\test", MAX_PATH)!=NULL,"_fullpath failed\n"); - strncpy(teststring,level2,3); - teststring[3]=0; - strcat(teststring,"test"); - ok(strcmp(full,teststring)==0,"Invalid Path returned %s\n",full); - ok(_fullpath(full,"..\\test", MAX_PATH)!=NULL,"_fullpath failed\n"); - strcpy(teststring,level1); - strcat(teststring,"test"); - ok(strcmp(full,teststring)==0,"Invalid Path returned %s\n",full); - ok(_fullpath(full,"..\\test", 10)==NULL,"_fullpath failed to generate error\n"); - - freeme = _fullpath(NULL,"test", 0); - ok(freeme!=NULL,"No path returned\n"); - strcpy(teststring,level2); - strcat(teststring,"test"); - ok(strcmp(freeme,teststring)==0,"Invalid Path returned %s\n",freeme); - free(freeme); - - SetCurrentDirectory(prevpath); - if (free2) - RemoveDirectory(level2); - if (free1) - RemoveDirectory(level1); -} - -START_TEST(dir) -{ - test_fullpath(); - test_makepath(); -} diff --git a/rostests/winetests/msvcrt/environ.c b/rostests/winetests/msvcrt/environ.c deleted file mode 100644 index 6175e14af69..00000000000 --- a/rostests/winetests/msvcrt/environ.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Unit tests for C library environment routines - * - * Copyright 2004 Mike Hearn - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include - -static const char *a_very_long_env_string = - "LIBRARY_PATH=" - "C:/Program Files/GLBasic/Compiler/platform/Win32/Bin/../lib/gcc/mingw32/3.4.2/;" - "C:/Program Files/GLBasic/Compiler/platform/Win32/Bin/../lib/gcc/;" - "/mingw/lib/gcc/mingw32/3.4.2/;" - "/usr/lib/gcc/mingw32/3.4.2/;" - "C:/Program Files/GLBasic/Compiler/platform/Win32/Bin/../lib/gcc/mingw32/3.4.2/../../../../mingw32/lib/mingw32/3.4.2/;" - "C:/Program Files/GLBasic/Compiler/platform/Win32/Bin/../lib/gcc/mingw32/3.4.2/../../../../mingw32/lib/;" - "/mingw/mingw32/lib/mingw32/3.4.2/;" - "/mingw/mingw32/lib/;" - "/mingw/lib/mingw32/3.4.2/;" - "/mingw/lib/;" - "C:/Program Files/GLBasic/Compiler/platform/Win32/Bin/../lib/gcc/mingw32/3.4.2/../../../mingw32/3.4.2/;" - "C:/Program Files/GLBasic/Compiler/platform/Win32/Bin/../lib/gcc/mingw32/3.4.2/../../../;" - "/mingw/lib/mingw32/3.4.2/;" - "/mingw/lib/;" - "/lib/mingw32/3.4.2/;" - "/lib/;" - "/usr/lib/mingw32/3.4.2/;" - "/usr/lib/"; - -START_TEST(environ) -{ - ok( _putenv("cat=") == 0, "_putenv failed on deletion of nonexistent environment variable\n" ); - ok( _putenv("cat=dog") == 0, "failed setting cat=dog\n" ); - ok( strcmp(getenv("cat"), "dog") == 0, "getenv did not return 'dog'\n" ); - ok( _putenv("cat=") == 0, "failed deleting cat\n" ); - - ok( _putenv("=") == -1, "should not accept '=' as input\n" ); - ok( _putenv("=dog") == -1, "should not accept '=dog' as input\n" ); - ok( _putenv(a_very_long_env_string) == 0, "_putenv failed for long environment string\n"); - - ok( getenv("nonexistent") == NULL, "getenv should fail with nonexistent var name\n" ); -} diff --git a/rostests/winetests/msvcrt/file.c b/rostests/winetests/msvcrt/file.c deleted file mode 100644 index aa58a329c65..00000000000 --- a/rostests/winetests/msvcrt/file.c +++ /dev/null @@ -1,1076 +0,0 @@ -/* - * Unit test suite for file functions - * - * Copyright 2002 Bill Currie - * Copyright 2005 Paul Rupe - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static HANDLE proc_handles[2]; - -static void test_fdopen( void ) -{ - static const char buffer[] = {0,1,2,3,4,5,6,7,8,9}; - char ibuf[10]; - int fd; - FILE *file; - - fd = open ("fdopen.tst", O_WRONLY | O_CREAT | O_BINARY, _S_IREAD |_S_IWRITE); - write (fd, buffer, sizeof (buffer)); - close (fd); - - fd = open ("fdopen.tst", O_RDONLY | O_BINARY); - lseek (fd, 5, SEEK_SET); - file = fdopen (fd, "rb"); - ok (fread (ibuf, 1, sizeof (buffer), file) == 5, "read wrong byte count\n"); - ok (memcmp (ibuf, buffer + 5, 5) == 0, "read wrong bytes\n"); - fclose (file); - unlink ("fdopen.tst"); -} - -static void test_fileops( void ) -{ - static const char outbuffer[] = "0,1,2,3,4,5,6,7,8,9"; - char buffer[256]; - WCHAR wbuffer[256]; - int fd; - FILE *file; - fpos_t pos; - int i, c; - - fd = open ("fdopen.tst", O_WRONLY | O_CREAT | O_BINARY, _S_IREAD |_S_IWRITE); - write (fd, outbuffer, sizeof (outbuffer)); - close (fd); - - fd = open ("fdopen.tst", O_RDONLY | O_BINARY); - file = fdopen (fd, "rb"); - ok(strlen(outbuffer) == (sizeof(outbuffer)-1),"strlen/sizeof error\n"); - ok(fgets(buffer,sizeof(buffer),file) !=0,"fgets failed unexpected\n"); - ok(fgets(buffer,sizeof(buffer),file) ==0,"fgets didn't signal EOF\n"); - ok(feof(file) !=0,"feof doesn't signal EOF\n"); - rewind(file); - ok(fgets(buffer,strlen(outbuffer),file) !=0,"fgets failed unexpected\n"); - ok(lstrlenA(buffer) == lstrlenA(outbuffer) -1,"fgets didn't read right size\n"); - ok(fgets(buffer,sizeof(outbuffer),file) !=0,"fgets failed unexpected\n"); - ok(strlen(buffer) == 1,"fgets dropped chars\n"); - ok(buffer[0] == outbuffer[strlen(outbuffer)-1],"fgets exchanged chars\n"); - - rewind(file); - for (i = 0, c = EOF; i < sizeof(outbuffer); i++) - { - ok((c = fgetc(file)) == outbuffer[i], "fgetc returned wrong data\n"); - } - ok((c = fgetc(file)) == EOF, "getc did not return EOF\n"); - ok(feof(file), "feof did not return EOF\n"); - ok(ungetc(c, file) == EOF, "ungetc(EOF) did not return EOF\n"); - ok(feof(file), "feof after ungetc(EOF) did not return EOF\n"); - ok((c = fgetc(file)) == EOF, "getc did not return EOF\n"); - c = outbuffer[sizeof(outbuffer) - 1]; - ok(ungetc(c, file) == c, "ungetc did not return its input\n"); - ok(!feof(file), "feof after ungetc returned EOF\n"); - ok((c = fgetc(file)) != EOF, "getc after ungetc returned EOF\n"); - ok(c == outbuffer[sizeof(outbuffer) - 1], - "getc did not return ungetc'd data\n"); - ok(!feof(file), "feof after getc returned EOF prematurely\n"); - ok((c = fgetc(file)) == EOF, "getc did not return EOF\n"); - ok(feof(file), "feof after getc did not return EOF\n"); - - rewind(file); - ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected\n"); - ok(pos == 0, "Unexpected result of fgetpos 0x%Lx\n", pos); - pos = (ULONGLONG)sizeof (outbuffer); - ok(fsetpos(file, &pos) == 0, "fsetpos failed unexpected\n"); - ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected\n"); - ok(pos == (ULONGLONG)sizeof (outbuffer), "Unexpected result of fgetpos 0x%Lx\n", pos); - - fclose (file); - fd = open ("fdopen.tst", O_RDONLY | O_TEXT); - file = fdopen (fd, "rt"); /* open in TEXT mode */ - ok(fgetws(wbuffer,sizeof(wbuffer),file) !=0,"fgetws failed unexpected\n"); - ok(fgetws(wbuffer,sizeof(wbuffer),file) ==0,"fgetws didn't signal EOF\n"); - ok(feof(file) !=0,"feof doesn't signal EOF\n"); - rewind(file); - ok(fgetws(wbuffer,strlen(outbuffer),file) !=0,"fgetws failed unexpected\n"); - ok(lstrlenW(wbuffer) == (lstrlenA(outbuffer) -1),"fgetws didn't read right size\n"); - ok(fgetws(wbuffer,sizeof(outbuffer),file) !=0,"fgets failed unexpected\n"); - ok(lstrlenW(wbuffer) == 1,"fgets dropped chars\n"); - fclose (file); - - file = fopen("fdopen.tst", "rb"); - ok( file != NULL, "fopen failed\n"); - /* sizeof(buffer) > content of file */ - ok(fread(buffer, sizeof(buffer), 1, file) == 0, "fread test failed\n"); - /* feof should be set now */ - ok(feof(file), "feof after fread failed\n"); - fclose (file); - - unlink ("fdopen.tst"); -} - -#define IOMODE (ao?"ascii mode":"binary mode") -static void test_readmode( BOOL ascii_mode ) -{ - static const char outbuffer[] = "0,1,2,3,4,5,6,7,8,9\r\n\r\nA,B,C,D,E\r\nX,Y,Z"; - static const char padbuffer[] = "ghjghjghjghj"; - static const char nlbuffer[] = "\r\n"; - char buffer[2*BUFSIZ+256]; - const char *optr; - int fd; - FILE *file; - const int *ip; - int i, j, m, ao, pl; - unsigned int fp; - long l; - - fd = open ("fdopen.tst", O_WRONLY | O_CREAT | O_BINARY, _S_IREAD |_S_IWRITE); - /* an internal buffer of BUFSIZ is maintained, so make a file big - * enough to test operations that cross the buffer boundary - */ - j = (2*BUFSIZ-4)/strlen(padbuffer); - for (i=0; i 0, "Couldn't open test file\n" ); - - count = _write( fd, temptext, sizeof(temptext) ); - ok( count > 0, "Couldn't write to test file\n" ); - - /* get current file pointer */ - cur = _lseek( fd, 0, SEEK_CUR ); - - /* make the file smaller */ - ok( _chsize( fd, sizeof(temptext) / 2 ) == 0, "_chsize() failed\n" ); - - pos = _lseek( fd, 0, SEEK_CUR ); - ok( cur == pos, "File pointer changed from: %ld to: %ld\n", cur, pos ); - ok( _filelength( fd ) == sizeof(temptext) / 2, "Wrong file size\n" ); - - /* enlarge the file */ - ok( _chsize( fd, sizeof(temptext) * 2 ) == 0, "_chsize() failed\n" ); - - pos = _lseek( fd, 0, SEEK_CUR ); - ok( cur == pos, "File pointer changed from: %ld to: %ld\n", cur, pos ); - ok( _filelength( fd ) == sizeof(temptext) * 2, "Wrong file size\n" ); - - _close( fd ); - _unlink( tempfile ); -} - -static void test_fopen_fclose_fcloseall( void ) -{ - char fname1[] = "empty1"; - char fname2[] = "empty2"; - char fname3[] = "empty3"; - FILE *stream1, *stream2, *stream3, *stream4; - int ret, numclosed; - - /* testing fopen() */ - stream1 = fopen(fname1, "w+"); - ok(stream1 != NULL, "The file '%s' was not opened\n", fname1); - stream2 = fopen(fname2, "w "); - ok(stream2 != NULL, "The file '%s' was not opened\n", fname2 ); - _unlink(fname3); - stream3 = fopen(fname3, "r"); - ok(stream3 == NULL, "The file '%s' shouldn't exist before\n", fname3 ); - stream3 = fopen(fname3, "w+"); - ok(stream3 != NULL, "The file '%s' should be opened now\n", fname3 ); - errno = 0xfaceabad; - stream4 = fopen("", "w+"); - ok(stream4 == NULL && errno == ENOENT, - "filename is empty, errno = %d (expected 2)\n", errno); - errno = 0xfaceabad; - stream4 = fopen(NULL, "w+"); - ok(stream4 == NULL && (errno == EINVAL || errno == ENOENT), - "filename is NULL, errno = %d (expected 2 or 22)\n", errno); - - /* testing fclose() */ - ret = fclose(stream2); - ok(ret == 0, "The file '%s' was not closed\n", fname2); - ret = fclose(stream3); - ok(ret == 0, "The file '%s' was not closed\n", fname3); - ret = fclose(stream2); - ok(ret == EOF, "Closing file '%s' returned %d\n", fname2, ret); - ret = fclose(stream3); - ok(ret == EOF, "Closing file '%s' returned %d\n", fname3, ret); - - /* testing fcloseall() */ - numclosed = _fcloseall(); - /* fname1 should be closed here */ - ok(numclosed == 1, "Number of files closed by fcloseall(): %u\n", numclosed); - numclosed = _fcloseall(); - ok(numclosed == 0, "Number of files closed by fcloseall(): %u\n", numclosed); - - ok(_unlink(fname1) == 0, "Couldn't unlink file named '%s'\n", fname1); - ok(_unlink(fname2) == 0, "Couldn't unlink file named '%s'\n", fname2); - ok(_unlink(fname3) == 0, "Couldn't unlink file named '%s'\n", fname3); -} - -static void test_get_osfhandle(void) -{ - int fd; - char fname[] = "t_get_osfhanle"; - DWORD bytes_written; - HANDLE handle; - - fd = _sopen(fname, _O_CREAT|_O_RDWR, _SH_DENYRW, _S_IREAD | _S_IWRITE); - handle = (HANDLE)_get_osfhandle(fd); - WriteFile(handle, "bar", 3, &bytes_written, NULL); - _close(fd); - fd = _open(fname, _O_RDONLY, 0); - ok(fd != -1, "Coudn't open '%s' after _get_osfhanle()\n", fname); - - _close(fd); - _unlink(fname); -} - -static void test_setmaxstdio(void) -{ - ok(2048 == _setmaxstdio(2048),"_setmaxstdio returned %d instead of 2048\n",_setmaxstdio(2048)); - ok(-1 == _setmaxstdio(2049),"_setmaxstdio returned %d instead of -1\n",_setmaxstdio(2049)); -} - -static void test_stat(void) -{ - int fd; - int pipes[2]; - struct stat buf; - - /* Tests for a file */ - fd = open("stat.tst", O_WRONLY | O_CREAT | O_BINARY, _S_IREAD |_S_IWRITE); - if (fd >= 0) - { - if (fstat(fd, &buf) == 0) - { - if ((buf.st_mode & _S_IFMT) == _S_IFREG) - { - ok(buf.st_dev == 0, "st_dev is %d, expected 0\n", buf.st_dev); - ok(buf.st_dev == buf.st_rdev, "st_dev (%d) and st_rdev (%d) differ\n", - buf.st_dev, buf.st_rdev); - ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n", - buf.st_nlink); - ok(buf.st_size == 0, "st_size is %d, expected 0\n", - buf.st_size); - } - else - skip("file is not a file?\n"); - } - else - skip("fstat failed, errno %d\n", errno); - close(fd); - remove("stat.tst"); - } - else - skip("open failed with errno %d\n", errno); - - /* Tests for a char device */ - if (_dup2(0, 10) == 0) - { - if (fstat(10, &buf) == 0) - { - if (buf.st_mode == _S_IFCHR) - { - ok(buf.st_dev == 10, "st_dev is %d, expected 10\n", buf.st_dev); - ok(buf.st_rdev == 10, "st_rdev is %d, expected 10\n", buf.st_rdev); - ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n", buf.st_nlink); - } - else - skip("stdin is not a char device?\n"); - } - else - skip("fstat failed with errno %d\n", errno); - close(10); - } - else - skip("_dup2 failed with errno %d\n", errno); - - /* Tests for pipes */ - if (_pipe(pipes, 1024, O_BINARY) == 0) - { - if (fstat(pipes[0], &buf) == 0) - { - if (buf.st_mode == _S_IFIFO) - { - ok(buf.st_dev == pipes[0], "st_dev is %d, expected %d\n", - buf.st_dev, pipes[0]); - ok(buf.st_rdev == pipes[0], "st_rdev is %d, expected %d\n", - buf.st_rdev, pipes[0]); - ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n", - buf.st_nlink); - } - else - skip("pipe() didn't make a pipe?\n"); - } - else - skip("fstat failed with errno %d\n", errno); - close(pipes[0]); - close(pipes[1]); - } - else - skip("pipe failed with errno %d\n", errno); -} - -static const char* pipe_string="Hello world"; - -/* How many messages to transfer over the pipe */ -#define N_TEST_MESSAGES 3 - -static void test_pipes_child(int argc, char** args) -{ - int fd; - int nwritten; - int i; - - if (argc < 5) - { - ok(0, "not enough parameters: %d\n", argc); - return; - } - - fd=atoi(args[3]); - ok(close(fd) == 0, "unable to close %d: %d\n", fd, errno); - - fd=atoi(args[4]); - - for (i=0; i 0) - buf[r]='\0'; - ok(strcmp(buf, pipe_string) == 0, "expected to read '%s', got '%s'\n", pipe_string, buf); - } - - r=read(pipes[0], buf, sizeof(buf)-1); - ok(r == 0, "expected to read 0 bytes, got %d\n", r); - ok(close(pipes[0]) == 0, "unable to close %d: %d\n", pipes[0], errno); - - /* Test reading from a pipe with fread() */ - if (_pipe(pipes, 1024, O_BINARY) < 0) - { - ok(0, "pipe failed with errno %d\n", errno); - return; - } - - arg_v[0] = selfname; - arg_v[1] = "tests/file.c"; - arg_v[2] = "pipes"; - arg_v[3] = str_fdr; sprintf(str_fdr, "%d", pipes[0]); - arg_v[4] = str_fdw; sprintf(str_fdw, "%d", pipes[1]); - arg_v[5] = NULL; - proc_handles[1] = (HANDLE)_spawnvp(_P_NOWAIT, selfname, arg_v); - ok(close(pipes[1]) == 0, "unable to close %d: %d\n", pipes[1], errno); - file=fdopen(pipes[0], "r"); - - /* In blocking mode, fread will keep calling read() until it gets - * enough bytes, or EOF, even on Unix. (If this were a Unix terminal - * in cooked mode instead of a pipe, it would also stop on EOL.) - */ - expected[0] = 0; - for (i=0; i 0) - buf[r]='\0'; - ok(strcmp(buf, expected) == 0, "got '%s' expected '%s'\n", buf, expected); - - /* Let child close the file before we read, so we can sense EOF reliably */ - Sleep(100); - r=fread(buf, 1, sizeof(buf)-1, file); - ok(r == 0, "fread() returned %d instead of 0\n", r); - ok(ferror(file) == 0, "got ferror() = %d\n", ferror(file)); - ok(feof(file), "feof() is false!\n"); - - ok(fclose(file) == 0, "unable to close the pipe: %d\n", errno); -} - -START_TEST(file) -{ - int arg_c; - char** arg_v; - - arg_c = winetest_get_mainargs( &arg_v ); - - /* testing low-level I/O */ - if (arg_c >= 3) - { - if (strcmp(arg_v[2], "inherit") == 0) - test_file_inherit_child(arg_v[3]); - else if (strcmp(arg_v[2], "inherit_no") == 0) - test_file_inherit_child_no(arg_v[3]); - else if (strcmp(arg_v[2], "pipes") == 0) - test_pipes_child(arg_c, arg_v); - else - ok(0, "invalid argument '%s'\n", arg_v[2]); - return; - } - test_file_inherit(arg_v[0]); - test_file_write_read(); - test_chsize(); - test_stat(); - - /* testing stream I/O */ - test_fdopen(); - test_fopen_fclose_fcloseall(); - test_fileops(); - test_asciimode(); - test_readmode(FALSE); /* binary mode */ - test_readmode(TRUE); /* ascii mode */ - test_fgetc(); - test_fgetwc(); - test_ctrlz(); - test_file_put_get(); - test_tmpnam(); - test_get_osfhandle(); - test_setmaxstdio(); - test_pipes(arg_v[0]); - - /* Wait for the (_P_NOWAIT) spawned processes to finish to make sure the report - * file contains lines in the correct order - */ - WaitForMultipleObjects(sizeof(proc_handles)/sizeof(proc_handles[0]), proc_handles, TRUE, 5000); -} diff --git a/rostests/winetests/msvcrt/headers.c b/rostests/winetests/msvcrt/headers.c deleted file mode 100644 index d909ac7bf43..00000000000 --- a/rostests/winetests/msvcrt/headers.c +++ /dev/null @@ -1,493 +0,0 @@ -/* - * Copyright 2004 Dimitrie O. Paun - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 contains tests to ensure the consistency between symbols - * defined in the regular msvcrt headers, and the corresponding duplicated - * symbols defined in msvcrt.h (prefixed by MSVCRT_). - */ - -#include "dos.h" -#include "math.h" -#include "stdlib.h" -#include "io.h" -#include "errno.h" -#include "fcntl.h" -#include "malloc.h" -#include "limits.h" -#include "mbctype.h" -#include "stdio.h" -#include "wchar.h" -#include "ctype.h" -//#include "crtdbg.h" -#include "share.h" -#include "search.h" -#include "wctype.h" -#include "float.h" -#include "stddef.h" -#include "mbstring.h" -#include "sys/locking.h" -#include "sys/utime.h" -#include "sys/types.h" -#include "sys/stat.h" -#include "sys/timeb.h" -#include "direct.h" -#include "conio.h" -#include "process.h" -#include "string.h" -#include "signal.h" -#include "time.h" -#include "locale.h" -#include "setjmp.h" -#include "wine/test.h" - -#ifdef __WINE_USE_MSVCRT -/* Wine-specific msvcrt headers */ -#define __WINE_MSVCRT_TEST -#include "eh.h" -#include "msvcrt.h" - -#ifdef __GNUC__ -#define TYPEOF(type) typeof(type) -#else -#define TYPEOF(type) int -#endif -#define MSVCRT(x) MSVCRT_##x -#define OFFSET(T,F) ((unsigned int)((char *)&((struct T *)0L)->F - (char *)0L)) -#define CHECK_SIZE(e) ok(sizeof(e) == sizeof(MSVCRT(e)), "Element has different sizes\n") -#define CHECK_TYPE(t) { TYPEOF(t) a = 0; TYPEOF(MSVCRT(t)) b = 0; a = b; CHECK_SIZE(t); } -#define CHECK_STRUCT(s) ok(sizeof(struct s) == sizeof(struct MSVCRT(s)), "Struct has different sizes\n") -#define CHECK_FIELD(s,e) ok(OFFSET(s,e) == OFFSET(MSVCRT(s),e), "Bad offset\n") -#define CHECK_DEF(d) ok(d == MSVCRT_##d, "Defines (MSVCRT_)" #d " are different: %d vs. %d\n", d, MSVCRT_##d) - -/************* Checking types ***************/ -static void test_types(void) -{ - CHECK_TYPE(wchar_t); - CHECK_TYPE(wint_t); - CHECK_TYPE(wctype_t); - CHECK_TYPE(_ino_t); - CHECK_TYPE(_fsize_t); - CHECK_TYPE(size_t); - CHECK_TYPE(intptr_t); - CHECK_TYPE(uintptr_t); - CHECK_TYPE(_dev_t); - CHECK_TYPE(_off_t); - CHECK_TYPE(clock_t); - CHECK_TYPE(time_t); - CHECK_TYPE(__time64_t); - CHECK_TYPE(fpos_t); - CHECK_SIZE(FILE); - CHECK_TYPE(terminate_handler); - CHECK_TYPE(terminate_function); - CHECK_TYPE(unexpected_handler); - CHECK_TYPE(unexpected_function); - CHECK_TYPE(_se_translator_function); - CHECK_TYPE(_beginthread_start_routine_t); - CHECK_TYPE(_onexit_t); - CHECK_TYPE(__sighandler_t); -} - -/************* Checking structs ***************/ -static void test_structs(void) -{ - CHECK_STRUCT(tm); - CHECK_FIELD(tm, tm_sec); - CHECK_FIELD(tm, tm_min); - CHECK_FIELD(tm, tm_hour); - CHECK_FIELD(tm, tm_mday); - CHECK_FIELD(tm, tm_mon); - CHECK_FIELD(tm, tm_year); - CHECK_FIELD(tm, tm_wday); - CHECK_FIELD(tm, tm_yday); - CHECK_FIELD(tm, tm_isdst); - CHECK_STRUCT(_timeb); - CHECK_FIELD(_timeb, time); - CHECK_FIELD(_timeb, millitm); - CHECK_FIELD(_timeb, timezone); - CHECK_FIELD(_timeb, dstflag); - CHECK_STRUCT(_iobuf); - CHECK_FIELD(_iobuf, _ptr); - CHECK_FIELD(_iobuf, _cnt); - CHECK_FIELD(_iobuf, _base); - CHECK_FIELD(_iobuf, _flag); - CHECK_FIELD(_iobuf, _file); - CHECK_FIELD(_iobuf, _charbuf); - CHECK_FIELD(_iobuf, _bufsiz); - CHECK_FIELD(_iobuf, _tmpfname); - CHECK_STRUCT(lconv); - CHECK_FIELD(lconv, decimal_point); - CHECK_FIELD(lconv, thousands_sep); - CHECK_FIELD(lconv, grouping); - CHECK_FIELD(lconv, int_curr_symbol); - CHECK_FIELD(lconv, currency_symbol); - CHECK_FIELD(lconv, mon_decimal_point); - CHECK_FIELD(lconv, mon_thousands_sep); - CHECK_FIELD(lconv, mon_grouping); - CHECK_FIELD(lconv, positive_sign); - CHECK_FIELD(lconv, negative_sign); - CHECK_FIELD(lconv, int_frac_digits); - CHECK_FIELD(lconv, frac_digits); - CHECK_FIELD(lconv, p_cs_precedes); - CHECK_FIELD(lconv, p_sep_by_space); - CHECK_FIELD(lconv, n_cs_precedes); - CHECK_FIELD(lconv, n_sep_by_space); - CHECK_FIELD(lconv, p_sign_posn); - CHECK_FIELD(lconv, n_sign_posn); - CHECK_STRUCT(_exception); - CHECK_FIELD(_exception, type); - CHECK_FIELD(_exception, name); - CHECK_FIELD(_exception, arg1); - CHECK_FIELD(_exception, arg2); - CHECK_FIELD(_exception, retval); - CHECK_STRUCT(_complex); - CHECK_FIELD(_complex, x); - CHECK_FIELD(_complex, y); - CHECK_STRUCT(_div_t); - CHECK_FIELD(_div_t, quot); - CHECK_FIELD(_div_t, rem); - CHECK_STRUCT(_ldiv_t); - CHECK_FIELD(_ldiv_t, quot); - CHECK_FIELD(_ldiv_t, rem); - CHECK_STRUCT(_heapinfo); - CHECK_FIELD(_heapinfo, _pentry); - CHECK_FIELD(_heapinfo, _size); - CHECK_FIELD(_heapinfo, _useflag); -#ifdef __i386__ - CHECK_STRUCT(__JUMP_BUFFER); - CHECK_FIELD(__JUMP_BUFFER, Ebp); - CHECK_FIELD(__JUMP_BUFFER, Ebx); - CHECK_FIELD(__JUMP_BUFFER, Edi); - CHECK_FIELD(__JUMP_BUFFER, Esi); - CHECK_FIELD(__JUMP_BUFFER, Esp); - CHECK_FIELD(__JUMP_BUFFER, Eip); - CHECK_FIELD(__JUMP_BUFFER, Registration); - CHECK_FIELD(__JUMP_BUFFER, TryLevel); - CHECK_FIELD(__JUMP_BUFFER, Cookie); - CHECK_FIELD(__JUMP_BUFFER, UnwindFunc); - CHECK_FIELD(__JUMP_BUFFER, UnwindData[6]); -#endif - CHECK_STRUCT(_diskfree_t); - CHECK_FIELD(_diskfree_t, total_clusters); - CHECK_FIELD(_diskfree_t, avail_clusters); - CHECK_FIELD(_diskfree_t, sectors_per_cluster); - CHECK_FIELD(_diskfree_t, bytes_per_sector); - CHECK_STRUCT(_finddata_t); - CHECK_FIELD(_finddata_t, attrib); - CHECK_FIELD(_finddata_t, time_create); - CHECK_FIELD(_finddata_t, time_access); - CHECK_FIELD(_finddata_t, time_write); - CHECK_FIELD(_finddata_t, size); - CHECK_FIELD(_finddata_t, name[260]); - CHECK_STRUCT(_finddatai64_t); - CHECK_FIELD(_finddatai64_t, attrib); - CHECK_FIELD(_finddatai64_t, time_create); - CHECK_FIELD(_finddatai64_t, time_access); - CHECK_FIELD(_finddatai64_t, time_write); - CHECK_FIELD(_finddatai64_t, size); - CHECK_FIELD(_finddatai64_t, name[260]); - CHECK_STRUCT(_wfinddata_t); - CHECK_FIELD(_wfinddata_t, attrib); - CHECK_FIELD(_wfinddata_t, time_create); - CHECK_FIELD(_wfinddata_t, time_access); - CHECK_FIELD(_wfinddata_t, time_write); - CHECK_FIELD(_wfinddata_t, size); - CHECK_FIELD(_wfinddata_t, name[260]); - CHECK_STRUCT(_wfinddatai64_t); - CHECK_FIELD(_wfinddatai64_t, attrib); - CHECK_FIELD(_wfinddatai64_t, time_create); - CHECK_FIELD(_wfinddatai64_t, time_access); - CHECK_FIELD(_wfinddatai64_t, time_write); - CHECK_FIELD(_wfinddatai64_t, size); - CHECK_FIELD(_wfinddatai64_t, name[260]); - CHECK_STRUCT(_utimbuf); - CHECK_FIELD(_utimbuf, actime); - CHECK_FIELD(_utimbuf, modtime); - CHECK_STRUCT(_stat); - CHECK_FIELD(_stat, st_dev); - CHECK_FIELD(_stat, st_ino); - CHECK_FIELD(_stat, st_mode); - CHECK_FIELD(_stat, st_nlink); - CHECK_FIELD(_stat, st_uid); - CHECK_FIELD(_stat, st_gid); - CHECK_FIELD(_stat, st_rdev); - CHECK_FIELD(_stat, st_size); - CHECK_FIELD(_stat, st_atime); - CHECK_FIELD(_stat, st_mtime); - CHECK_FIELD(_stat, st_ctime); - CHECK_FIELD(_stat, st_dev); - CHECK_FIELD(_stat, st_ino); - CHECK_FIELD(_stat, st_mode); - CHECK_FIELD(_stat, st_nlink); - CHECK_FIELD(_stat, st_uid); - CHECK_FIELD(_stat, st_gid); - CHECK_FIELD(_stat, st_rdev); - CHECK_FIELD(_stat, st_size); - CHECK_FIELD(_stat, st_atime); - CHECK_FIELD(_stat, st_mtime); - CHECK_FIELD(_stat, st_ctime); - CHECK_FIELD(_stat, st_dev); - CHECK_FIELD(_stat, st_ino); - CHECK_FIELD(_stat, st_mode); - CHECK_FIELD(_stat, st_nlink); - CHECK_FIELD(_stat, st_uid); - CHECK_FIELD(_stat, st_gid); - CHECK_FIELD(_stat, st_rdev); - CHECK_FIELD(_stat, st_size); - CHECK_FIELD(_stat, st_atime); - CHECK_FIELD(_stat, st_mtime); - CHECK_FIELD(_stat, st_ctime); - CHECK_STRUCT(stat); - CHECK_FIELD(stat, st_dev); - CHECK_FIELD(stat, st_ino); - CHECK_FIELD(stat, st_mode); - CHECK_FIELD(stat, st_nlink); - CHECK_FIELD(stat, st_uid); - CHECK_FIELD(stat, st_gid); - CHECK_FIELD(stat, st_rdev); - CHECK_FIELD(stat, st_size); - CHECK_FIELD(stat, st_atime); - CHECK_FIELD(stat, st_mtime); - CHECK_FIELD(stat, st_ctime); - CHECK_FIELD(stat, st_dev); - CHECK_FIELD(stat, st_ino); - CHECK_FIELD(stat, st_mode); - CHECK_FIELD(stat, st_nlink); - CHECK_FIELD(stat, st_uid); - CHECK_FIELD(stat, st_gid); - CHECK_FIELD(stat, st_rdev); - CHECK_FIELD(stat, st_size); - CHECK_FIELD(stat, st_atime); - CHECK_FIELD(stat, st_mtime); - CHECK_FIELD(stat, st_ctime); - CHECK_FIELD(stat, st_dev); - CHECK_FIELD(stat, st_ino); - CHECK_FIELD(stat, st_mode); - CHECK_FIELD(stat, st_nlink); - CHECK_FIELD(stat, st_uid); - CHECK_FIELD(stat, st_gid); - CHECK_FIELD(stat, st_rdev); - CHECK_FIELD(stat, st_size); - CHECK_FIELD(stat, st_atime); - CHECK_FIELD(stat, st_mtime); - CHECK_FIELD(stat, st_ctime); - CHECK_STRUCT(_stati64); - CHECK_FIELD(_stati64, st_dev); - CHECK_FIELD(_stati64, st_ino); - CHECK_FIELD(_stati64, st_mode); - CHECK_FIELD(_stati64, st_nlink); - CHECK_FIELD(_stati64, st_uid); - CHECK_FIELD(_stati64, st_gid); - CHECK_FIELD(_stati64, st_rdev); - CHECK_FIELD(_stati64, st_size); - CHECK_FIELD(_stati64, st_atime); - CHECK_FIELD(_stati64, st_mtime); - CHECK_FIELD(_stati64, st_ctime); - CHECK_STRUCT(_stat64); - CHECK_FIELD(_stat64, st_dev); - CHECK_FIELD(_stat64, st_ino); - CHECK_FIELD(_stat64, st_mode); - CHECK_FIELD(_stat64, st_nlink); - CHECK_FIELD(_stat64, st_uid); - CHECK_FIELD(_stat64, st_gid); - CHECK_FIELD(_stat64, st_rdev); - CHECK_FIELD(_stat64, st_size); - CHECK_FIELD(_stat64, st_atime); - CHECK_FIELD(_stat64, st_mtime); - CHECK_FIELD(_stat64, st_ctime); -} - -/************* Checking defines ***************/ -static void test_defines(void) -{ - CHECK_DEF(WEOF); - CHECK_DEF(EOF); - CHECK_DEF(TMP_MAX); - CHECK_DEF(RAND_MAX); - CHECK_DEF(BUFSIZ); - CHECK_DEF(STDIN_FILENO); - CHECK_DEF(STDOUT_FILENO); - CHECK_DEF(STDERR_FILENO); - CHECK_DEF(_IOFBF); - CHECK_DEF(_IONBF); - CHECK_DEF(_IOLBF); - CHECK_DEF(FILENAME_MAX); - CHECK_DEF(_P_WAIT); - CHECK_DEF(_P_NOWAIT); - CHECK_DEF(_P_OVERLAY); - CHECK_DEF(_P_NOWAITO); - CHECK_DEF(_P_DETACH); - CHECK_DEF(EPERM); - CHECK_DEF(ENOENT); - CHECK_DEF(ESRCH); - CHECK_DEF(EINTR); - CHECK_DEF(EIO); - CHECK_DEF(ENXIO); - CHECK_DEF(E2BIG); - CHECK_DEF(ENOEXEC); - CHECK_DEF(EBADF); - CHECK_DEF(ECHILD); - CHECK_DEF(EAGAIN); - CHECK_DEF(ENOMEM); - CHECK_DEF(EACCES); - CHECK_DEF(EFAULT); - CHECK_DEF(EBUSY); - CHECK_DEF(EEXIST); - CHECK_DEF(EXDEV); - CHECK_DEF(ENODEV); - CHECK_DEF(ENOTDIR); - CHECK_DEF(EISDIR); - CHECK_DEF(EINVAL); - CHECK_DEF(ENFILE); - CHECK_DEF(EMFILE); - CHECK_DEF(ENOTTY); - CHECK_DEF(EFBIG); - CHECK_DEF(ENOSPC); - CHECK_DEF(ESPIPE); - CHECK_DEF(EROFS); - CHECK_DEF(EMLINK); - CHECK_DEF(EPIPE); - CHECK_DEF(EDOM); - CHECK_DEF(ERANGE); - CHECK_DEF(EDEADLK); - CHECK_DEF(EDEADLOCK); - CHECK_DEF(ENAMETOOLONG); - CHECK_DEF(ENOLCK); - CHECK_DEF(ENOSYS); - CHECK_DEF(ENOTEMPTY); - CHECK_DEF(EILSEQ); - CHECK_DEF(LC_ALL); - CHECK_DEF(LC_COLLATE); - CHECK_DEF(LC_CTYPE); - CHECK_DEF(LC_MONETARY); - CHECK_DEF(LC_NUMERIC); - CHECK_DEF(LC_TIME); - CHECK_DEF(LC_MIN); - CHECK_DEF(LC_MAX); - CHECK_DEF(CLOCKS_PER_SEC); - CHECK_DEF(_HEAPEMPTY); - CHECK_DEF(_HEAPOK); - CHECK_DEF(_HEAPBADBEGIN); - CHECK_DEF(_HEAPBADNODE); - CHECK_DEF(_HEAPEND); - CHECK_DEF(_HEAPBADPTR); - CHECK_DEF(_FREEENTRY); - CHECK_DEF(_USEDENTRY); - CHECK_DEF(_OUT_TO_DEFAULT); - CHECK_DEF(_REPORT_ERRMODE); - CHECK_DEF(_UPPER); - CHECK_DEF(_LOWER); - CHECK_DEF(_DIGIT); - CHECK_DEF(_SPACE); - CHECK_DEF(_PUNCT); - CHECK_DEF(_CONTROL); - CHECK_DEF(_BLANK); - CHECK_DEF(_HEX); - CHECK_DEF(_LEADBYTE); - CHECK_DEF(_ALPHA); - CHECK_DEF(_IOREAD); - CHECK_DEF(_IOWRT); - CHECK_DEF(_IOMYBUF); - CHECK_DEF(_IOEOF); - CHECK_DEF(_IOERR); - CHECK_DEF(_IOSTRG); - CHECK_DEF(_IORW); - CHECK_DEF(_S_IEXEC); - CHECK_DEF(_S_IWRITE); - CHECK_DEF(_S_IREAD); - CHECK_DEF(_S_IFIFO); - CHECK_DEF(_S_IFCHR); - CHECK_DEF(_S_IFDIR); - CHECK_DEF(_S_IFREG); - CHECK_DEF(_S_IFMT); - CHECK_DEF(_LK_UNLCK); - CHECK_DEF(_LK_LOCK); - CHECK_DEF(_LK_NBLCK); - CHECK_DEF(_LK_RLCK); - CHECK_DEF(_LK_NBRLCK); - CHECK_DEF(_O_RDONLY); - CHECK_DEF(_O_WRONLY); - CHECK_DEF(_O_RDWR); - CHECK_DEF(_O_ACCMODE); - CHECK_DEF(_O_APPEND); - CHECK_DEF(_O_RANDOM); - CHECK_DEF(_O_SEQUENTIAL); - CHECK_DEF(_O_TEMPORARY); - CHECK_DEF(_O_NOINHERIT); - CHECK_DEF(_O_CREAT); - CHECK_DEF(_O_TRUNC); - CHECK_DEF(_O_EXCL); - CHECK_DEF(_O_SHORT_LIVED); - CHECK_DEF(_O_TEXT); - CHECK_DEF(_O_BINARY); - CHECK_DEF(_O_RAW); - CHECK_DEF(_SW_INEXACT); - CHECK_DEF(_SW_UNDERFLOW); - CHECK_DEF(_SW_OVERFLOW); - CHECK_DEF(_SW_ZERODIVIDE); - CHECK_DEF(_SW_INVALID); - CHECK_DEF(_SW_UNEMULATED); - CHECK_DEF(_SW_SQRTNEG); - CHECK_DEF(_SW_STACKOVERFLOW); - CHECK_DEF(_SW_STACKUNDERFLOW); - CHECK_DEF(_SW_DENORMAL); - CHECK_DEF(_FPCLASS_SNAN); - CHECK_DEF(_FPCLASS_QNAN); - CHECK_DEF(_FPCLASS_NINF); - CHECK_DEF(_FPCLASS_NN); - CHECK_DEF(_FPCLASS_ND); - CHECK_DEF(_FPCLASS_NZ); - CHECK_DEF(_FPCLASS_PZ); - CHECK_DEF(_FPCLASS_PD); - CHECK_DEF(_FPCLASS_PN); - CHECK_DEF(_FPCLASS_PINF); - CHECK_DEF(SIGINT); - CHECK_DEF(SIGILL); - CHECK_DEF(SIGFPE); - CHECK_DEF(SIGSEGV); - CHECK_DEF(SIGTERM); - CHECK_DEF(SIGBREAK); - CHECK_DEF(SIGABRT); - CHECK_DEF(NSIG); -#ifdef __i386__ - CHECK_DEF(_EM_INVALID); - CHECK_DEF(_EM_DENORMAL); - CHECK_DEF(_EM_ZERODIVIDE); - CHECK_DEF(_EM_OVERFLOW); - CHECK_DEF(_EM_UNDERFLOW); - CHECK_DEF(_EM_INEXACT); - CHECK_DEF(_IC_AFFINE); - CHECK_DEF(_IC_PROJECTIVE); - CHECK_DEF(_RC_CHOP); - CHECK_DEF(_RC_UP); - CHECK_DEF(_RC_DOWN); - CHECK_DEF(_RC_NEAR); - CHECK_DEF(_PC_24); - CHECK_DEF(_PC_53); - CHECK_DEF(_PC_64); -#endif -} - -#endif /* __WINE_USE_MSVCRT */ - -START_TEST(headers) -{ -#ifdef __WINE_USE_MSVCRT - test_types(); - test_structs(); - test_defines(); -#endif -} diff --git a/rostests/winetests/msvcrt/heap.c b/rostests/winetests/msvcrt/heap.c deleted file mode 100644 index ae98e3b8975..00000000000 --- a/rostests/winetests/msvcrt/heap.c +++ /dev/null @@ -1,440 +0,0 @@ -/* - * Unit test suite for memory functions - * - * Copyright 2003 Dimitrie O. Paun - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" - -static void (*p_aligned_free)(void*) = NULL; -static void * (*p_aligned_malloc)(size_t,size_t) = NULL; -static void * (*p_aligned_offset_malloc)(size_t,size_t,size_t) = NULL; -static void * (*p_aligned_realloc)(void*,size_t,size_t) = NULL; -static void * (*p_aligned_offset_realloc)(void*,size_t,size_t,size_t) = NULL; - -static void test_aligned_malloc(size_t size, size_t alignment) -{ - void *mem; - - mem = p_aligned_malloc(size, alignment); - - if ((alignment & (alignment - 1)) == 0) - ok(mem != NULL, "_aligned_malloc(%d, %d) failed\n", size, alignment); - else - ok(mem == NULL, "_aligned_malloc(%d, %d) should have failed\n", size, alignment); - - if (mem) - { - ok(((DWORD_PTR)mem & (alignment ? alignment - 1 : 0)) == 0, - "_aligned_malloc(%d, %d) not aligned: %p\n", size, alignment, mem); - if (winetest_debug > 1) - { - void *saved; - saved = *(void **)((DWORD_PTR)((char *)mem - sizeof(void *)) & ~(sizeof(void *) - 1)); - trace("_aligned_malloc(%3d, %3d) returns %p, saved = %p, diff = %d\n", - size, alignment, mem, saved, (char *)saved - (char *)mem); - } - p_aligned_free(mem); - } - else - ok(errno == EINVAL, "_aligned_malloc(%d, %d) errno: %d != %d\n", size, alignment, errno, EINVAL); -} - -static void test_aligned_offset_malloc(size_t size, size_t alignment, size_t offset) -{ - void *mem; - - mem = p_aligned_offset_malloc(size, alignment, offset); - - if ((alignment & (alignment - 1)) == 0) - if (offset < size) - ok(mem != NULL, "_aligned_offset_malloc(%d, %d, %d) failed\n", size, alignment, offset); - else - ok(errno == EINVAL, "_aligned_offset_malloc(%d, %d, %d) errno: %d != %d\n", size, alignment, offset, errno, EINVAL); - else - ok(mem == NULL, "_aligned_offset_malloc(%d, %d, %d) should have failed\n", size, alignment, offset); - - if (mem) - { - ok(((DWORD_PTR)((char *)mem + offset) & (alignment ? alignment - 1 : 0)) == 0, - "_aligned_offset_malloc(%d, %d, %d) not aligned: %p\n", size, alignment, offset, mem); - if (winetest_debug > 1) - { - void *saved; - saved = *(void **)((DWORD_PTR)((char *)mem - sizeof(void *)) & ~(sizeof(void *) - 1)); - trace("_aligned_offset_malloc(%3d, %3d, %3d) returns %p, saved = %p, diff = %d\n", - size, alignment, offset, mem, saved, (char *)saved - (char *)mem); - } - p_aligned_free(mem); - } - else - ok(errno == EINVAL, "_aligned_offset_malloc(%d, %d, %d) errno: %d != %d\n", size, alignment, offset, errno, EINVAL); -} - -static void test_aligned_realloc(size_t size1, size_t size2, size_t alignment) -{ - void *mem, *mem1, *mem2; - - mem = p_aligned_malloc(size1, alignment); - - if ((alignment & (alignment - 1)) == 0) - ok(mem != NULL, "_aligned_malloc(%d, %d) failed\n", size1, alignment); - else - ok(mem == NULL, "_aligned_malloc(%d, %d) should have failed\n", size1, alignment); - - if (mem) - { - mem1 = malloc(size1); - if (mem1) - { - int i; - for (i = 0; i < size1; i++) - ((char *)mem)[i] = i + 1; - memcpy(mem1, mem, size1); - } - - ok(((DWORD_PTR)mem & (alignment ? alignment - 1 : 0)) == 0, - "_aligned_malloc(%d, %d) not aligned: %p\n", size1, alignment, mem); - if (winetest_debug > 1) - { - void *saved; - saved = *(void **)((DWORD_PTR)((char *)mem - sizeof(void *)) & ~(sizeof(void *) - 1)); - trace("_aligned_malloc(%3d, %3d) returns %p, saved = %p, diff = %d\n", - size1, alignment, mem, saved, (char *)saved - (char *)mem); - } - - mem2 = p_aligned_realloc(mem, size2, alignment); - - ok(mem2 != NULL, "_aligned_realloc(%p, %d, %d) failed\n", mem, size2, alignment); - - if (mem2) - { - ok(((DWORD_PTR)mem2 & (alignment ? alignment - 1 : 0)) == 0, - "_aligned_realloc(%p, %d, %d) not aligned: %p\n", mem, size2, alignment, mem2); - if (winetest_debug > 1) - { - void *saved; - saved = *(void **)((DWORD_PTR)((char *)mem2 - sizeof(void *)) & ~(sizeof(void *) - 1)); - trace("_aligned_realloc(%p, %3d, %3d) returns %p, saved = %p, diff = %d\n", - mem, size2, alignment, mem2, saved, (char *)saved - (char *)mem2); - } - if (mem1) - { - ok(memcmp(mem2, mem1, min(size1, size2))==0, "_aligned_realloc(%p, %d, %d) has different data\n", mem, size2, alignment); - if (memcmp(mem2, mem1, min(size1, size2)) && winetest_debug > 1) - { - int i; - for (i = 0; i < min(size1, size2); i++) - { - if (((char *)mem2)[i] != ((char *)mem1)[i]) - trace("%d: %02x != %02x\n", i, ((char *)mem2)[i] & 0xff, ((char *)mem1)[i] & 0xff); - } - } - } - p_aligned_free(mem2); - } else { - ok(errno == EINVAL, "_aligned_realloc(%p, %d, %d) errno: %d != %d\n", mem, size2, alignment, errno, EINVAL); - p_aligned_free(mem); - } - - free(mem1); - } - else - ok(errno == EINVAL, "_aligned_malloc(%d, %d) errno: %d != %d\n", size1, alignment, errno, EINVAL); -} - -static void test_aligned_offset_realloc(size_t size1, size_t size2, size_t alignment, size_t offset) -{ - void *mem, *mem1, *mem2; - - mem = p_aligned_offset_malloc(size1, alignment, offset); - - if ((alignment & (alignment - 1)) == 0) - ok(mem != NULL, "_aligned_offset_malloc(%d, %d, %d) failed\n", size1, alignment, offset); - else - ok(mem == NULL, "_aligned_offset_malloc(%d, %d, %d) should have failed\n", size1, alignment, offset); - - if (mem) - { - mem1 = malloc(size1); - if (mem1) - { - int i; - for (i = 0; i < size1; i++) - ((char *)mem)[i] = i + 1; - memcpy(mem1, mem, size1); - } - - ok(((DWORD_PTR)((char *)mem + offset) & (alignment ? alignment - 1 : 0)) == 0, - "_aligned_offset_malloc(%d, %d, %d) not aligned: %p\n", size1, alignment, offset, mem); - if (winetest_debug > 1) - { - void *saved; - saved = *(void **)((DWORD_PTR)((char *)mem - sizeof(void *)) & ~(sizeof(void *) - 1)); - trace("_aligned_offset_malloc(%3d, %3d, %3d) returns %p, saved = %p, diff = %d\n", - size1, alignment, offset, mem, saved, (char *)saved - (char *)mem); - } - - mem2 = p_aligned_offset_realloc(mem, size2, alignment, offset); - - ok(mem2 != NULL, "_aligned_offset_realloc(%p, %d, %d, %d) failed\n", mem, size2, alignment, offset); - - if (mem2) - { - ok(((DWORD_PTR)((char *)mem + offset) & (alignment ? alignment - 1 : 0)) == 0, - "_aligned_offset_realloc(%p, %d, %d, %d) not aligned: %p\n", mem, size2, alignment, offset, mem2); - if (winetest_debug > 1) - { - void *saved; - saved = *(void **)((DWORD_PTR)((char *)mem2 - sizeof(void *)) & ~(sizeof(void *) - 1)); - trace("_aligned_offset_realloc(%p, %3d, %3d, %3d) returns %p, saved = %p, diff = %d\n", - mem, size2, alignment, offset, mem2, saved, (char *)saved - (char *)mem2); - } - if (mem1) - { - ok(memcmp(mem2, mem1, min(size1, size2))==0, "_aligned_offset_realloc(%p, %d, %d, %d) has different data\n", mem, size2, alignment, offset); - if (memcmp(mem2, mem1, min(size1, size2)) && winetest_debug > 1) - { - int i; - for (i = 0; i < min(size1, size2); i++) - { - if (((char *)mem2)[i] != ((char *)mem1)[i]) - trace("%d: %02x != %02x\n", i, ((char *)mem2)[i] & 0xff, ((char *)mem1)[i] & 0xff); - } - } - } - p_aligned_free(mem2); - } else { - ok(errno == EINVAL, "_aligned_offset_realloc(%p, %d, %d, %d) errno: %d != %d\n", mem, size2, alignment, offset, errno, EINVAL); - p_aligned_free(mem); - } - - free(mem1); - } - else - ok(errno == EINVAL, "_aligned_offset_malloc(%d, %d) errno: %d != %d\n", size1, alignment, errno, EINVAL); -} - -static void test_aligned(void) -{ - HMODULE msvcrt = GetModuleHandle("msvcrt.dll"); - - if (msvcrt == NULL) - return; - - p_aligned_free = (void*)GetProcAddress(msvcrt, "_aligned_free"); - p_aligned_malloc = (void*)GetProcAddress(msvcrt, "_aligned_malloc"); - p_aligned_offset_malloc = (void*)GetProcAddress(msvcrt, "_aligned_offset_malloc"); - p_aligned_realloc = (void*)GetProcAddress(msvcrt, "_aligned_realloc"); - p_aligned_offset_realloc = (void*)GetProcAddress(msvcrt, "_aligned_offset_realloc"); - - if (!p_aligned_free || !p_aligned_malloc || !p_aligned_offset_malloc || !p_aligned_realloc || !p_aligned_offset_realloc) - { - skip("aligned memory tests skipped\n"); - return; - } - - test_aligned_malloc(256, 0); - test_aligned_malloc(256, 1); - test_aligned_malloc(256, 2); - test_aligned_malloc(256, 3); - test_aligned_malloc(256, 4); - test_aligned_malloc(256, 8); - test_aligned_malloc(256, 16); - test_aligned_malloc(256, 32); - test_aligned_malloc(256, 64); - test_aligned_malloc(256, 127); - test_aligned_malloc(256, 128); - - test_aligned_offset_malloc(256, 0, 0); - test_aligned_offset_malloc(256, 1, 0); - test_aligned_offset_malloc(256, 2, 0); - test_aligned_offset_malloc(256, 3, 0); - test_aligned_offset_malloc(256, 4, 0); - test_aligned_offset_malloc(256, 8, 0); - test_aligned_offset_malloc(256, 16, 0); - test_aligned_offset_malloc(256, 32, 0); - test_aligned_offset_malloc(256, 64, 0); - test_aligned_offset_malloc(256, 127, 0); - test_aligned_offset_malloc(256, 128, 0); - - test_aligned_offset_malloc(256, 0, 4); - test_aligned_offset_malloc(256, 1, 4); - test_aligned_offset_malloc(256, 2, 4); - test_aligned_offset_malloc(256, 3, 4); - test_aligned_offset_malloc(256, 4, 4); - test_aligned_offset_malloc(256, 8, 4); - test_aligned_offset_malloc(256, 16, 4); - test_aligned_offset_malloc(256, 32, 4); - test_aligned_offset_malloc(256, 64, 4); - test_aligned_offset_malloc(256, 127, 4); - test_aligned_offset_malloc(256, 128, 4); - - test_aligned_offset_malloc(256, 8, 7); - test_aligned_offset_malloc(256, 8, 9); - test_aligned_offset_malloc(256, 8, 16); - test_aligned_offset_malloc(256, 8, 17); - test_aligned_offset_malloc(256, 8, 254); - test_aligned_offset_malloc(256, 8, 255); - test_aligned_offset_malloc(256, 8, 256); - test_aligned_offset_malloc(256, 8, 512); - - test_aligned_realloc(256, 512, 0); - test_aligned_realloc(256, 128, 0); - test_aligned_realloc(256, 512, 4); - test_aligned_realloc(256, 128, 4); - test_aligned_realloc(256, 512, 8); - test_aligned_realloc(256, 128, 8); - test_aligned_realloc(256, 512, 16); - test_aligned_realloc(256, 128, 16); - test_aligned_realloc(256, 512, 32); - test_aligned_realloc(256, 128, 32); - test_aligned_realloc(256, 512, 64); - test_aligned_realloc(256, 128, 64); - - test_aligned_offset_realloc(256, 512, 0, 0); - test_aligned_offset_realloc(256, 128, 0, 0); - test_aligned_offset_realloc(256, 512, 4, 0); - test_aligned_offset_realloc(256, 128, 4, 0); - test_aligned_offset_realloc(256, 512, 8, 0); - test_aligned_offset_realloc(256, 128, 8, 0); - test_aligned_offset_realloc(256, 512, 16, 0); - test_aligned_offset_realloc(256, 128, 16, 0); - test_aligned_offset_realloc(256, 512, 32, 0); - test_aligned_offset_realloc(256, 128, 32, 0); - test_aligned_offset_realloc(256, 512, 64, 0); - test_aligned_offset_realloc(256, 128, 64, 0); - - test_aligned_offset_realloc(256, 512, 0, 4); - test_aligned_offset_realloc(256, 128, 0, 4); - test_aligned_offset_realloc(256, 512, 4, 4); - test_aligned_offset_realloc(256, 128, 4, 4); - test_aligned_offset_realloc(256, 512, 8, 4); - test_aligned_offset_realloc(256, 128, 8, 4); - test_aligned_offset_realloc(256, 512, 16, 4); - test_aligned_offset_realloc(256, 128, 16, 4); - test_aligned_offset_realloc(256, 512, 32, 4); - test_aligned_offset_realloc(256, 128, 32, 4); - test_aligned_offset_realloc(256, 512, 64, 4); - test_aligned_offset_realloc(256, 128, 64, 4); - - test_aligned_offset_realloc(256, 512, 0, 8); - test_aligned_offset_realloc(256, 128, 0, 8); - test_aligned_offset_realloc(256, 512, 4, 8); - test_aligned_offset_realloc(256, 128, 4, 8); - test_aligned_offset_realloc(256, 512, 8, 8); - test_aligned_offset_realloc(256, 128, 8, 8); - test_aligned_offset_realloc(256, 512, 16, 8); - test_aligned_offset_realloc(256, 128, 16, 8); - test_aligned_offset_realloc(256, 512, 32, 8); - test_aligned_offset_realloc(256, 128, 32, 8); - test_aligned_offset_realloc(256, 512, 64, 8); - test_aligned_offset_realloc(256, 128, 64, 8); - - test_aligned_offset_realloc(256, 512, 0, 16); - test_aligned_offset_realloc(256, 128, 0, 16); - test_aligned_offset_realloc(256, 512, 4, 16); - test_aligned_offset_realloc(256, 128, 4, 16); - test_aligned_offset_realloc(256, 512, 8, 16); - test_aligned_offset_realloc(256, 128, 8, 16); - test_aligned_offset_realloc(256, 512, 16, 16); - test_aligned_offset_realloc(256, 128, 16, 16); - test_aligned_offset_realloc(256, 512, 32, 16); - test_aligned_offset_realloc(256, 128, 32, 16); - test_aligned_offset_realloc(256, 512, 64, 16); - test_aligned_offset_realloc(256, 128, 64, 16); - - test_aligned_offset_realloc(256, 512, 0, 32); - test_aligned_offset_realloc(256, 128, 0, 32); - test_aligned_offset_realloc(256, 512, 4, 32); - test_aligned_offset_realloc(256, 128, 4, 32); - test_aligned_offset_realloc(256, 512, 8, 32); - test_aligned_offset_realloc(256, 128, 8, 32); - test_aligned_offset_realloc(256, 512, 16, 32); - test_aligned_offset_realloc(256, 128, 16, 32); - test_aligned_offset_realloc(256, 512, 32, 32); - test_aligned_offset_realloc(256, 128, 32, 32); - test_aligned_offset_realloc(256, 512, 64, 32); - test_aligned_offset_realloc(256, 128, 64, 32); - - test_aligned_offset_realloc(256, 512, 0, 64); - test_aligned_offset_realloc(256, 128, 0, 64); - test_aligned_offset_realloc(256, 512, 4, 64); - test_aligned_offset_realloc(256, 128, 4, 64); - test_aligned_offset_realloc(256, 512, 8, 64); - test_aligned_offset_realloc(256, 128, 8, 64); - test_aligned_offset_realloc(256, 512, 16, 64); - test_aligned_offset_realloc(256, 128, 16, 64); - test_aligned_offset_realloc(256, 512, 32, 64); - test_aligned_offset_realloc(256, 128, 32, 64); - test_aligned_offset_realloc(256, 512, 64, 64); - test_aligned_offset_realloc(256, 128, 64, 64); - - test_aligned_offset_realloc(256, 512, 0, 96); - test_aligned_offset_realloc(256, 128, 0, 96); - test_aligned_offset_realloc(256, 512, 4, 96); - test_aligned_offset_realloc(256, 128, 4, 96); - test_aligned_offset_realloc(256, 512, 8, 96); - test_aligned_offset_realloc(256, 128, 8, 96); - test_aligned_offset_realloc(256, 512, 16, 96); - test_aligned_offset_realloc(256, 128, 16, 96); - test_aligned_offset_realloc(256, 512, 32, 96); - test_aligned_offset_realloc(256, 128, 32, 96); - test_aligned_offset_realloc(256, 512, 64, 96); - test_aligned_offset_realloc(256, 128, 64, 96); - - test_aligned_offset_realloc(256, 512, 0, 112); - test_aligned_offset_realloc(256, 128, 0, 112); - test_aligned_offset_realloc(256, 512, 4, 112); - test_aligned_offset_realloc(256, 128, 4, 112); - test_aligned_offset_realloc(256, 512, 8, 112); - test_aligned_offset_realloc(256, 128, 8, 112); - test_aligned_offset_realloc(256, 512, 16, 112); - test_aligned_offset_realloc(256, 128, 16, 112); - test_aligned_offset_realloc(256, 512, 32, 112); - test_aligned_offset_realloc(256, 128, 32, 112); - test_aligned_offset_realloc(256, 512, 64, 112); - test_aligned_offset_realloc(256, 128, 64, 112); -} - -START_TEST(heap) -{ - void *mem; - - mem = malloc(0); - ok(mem != NULL, "memory not allocated for size 0\n"); - free(mem); - - mem = realloc(NULL, 10); - ok(mem != NULL, "memory not allocated\n"); - - mem = realloc(mem, 20); - ok(mem != NULL, "memory not reallocated\n"); - - mem = realloc(mem, 0); - ok(mem == NULL, "memory not freed\n"); - - mem = realloc(NULL, 0); - ok(mem != NULL, "memory not (re)allocated for size 0\n"); - - free(mem); - - test_aligned(); -} diff --git a/rostests/winetests/msvcrt/msvcrt.rbuild b/rostests/winetests/msvcrt/msvcrt.rbuild deleted file mode 100644 index 7349580ac03..00000000000 --- a/rostests/winetests/msvcrt/msvcrt.rbuild +++ /dev/null @@ -1,23 +0,0 @@ - - - - - . - include/reactos/wine/msvcrt - - kernel32 - msvcrt - cpp.c - data.c - dir.c - environ.c - file.c - headers.c - heap.c - printf.c - scanf.c - string.c - testlist.c - time.c - - diff --git a/rostests/winetests/msvcrt/msvcrt_test.dsp b/rostests/winetests/msvcrt/msvcrt_test.dsp deleted file mode 100644 index 1e27830971b..00000000000 --- a/rostests/winetests/msvcrt/msvcrt_test.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="msvcrt_test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=msvcrt_test - Win32 Wine Headers -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "msvcrt_test.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "msvcrt_test.mak" CFG="msvcrt_test - Win32 Wine Headers" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "msvcrt_test - Win32 MSVC Headers" (based on "Win32 (x86) Console Application") -!MESSAGE "msvcrt_test - Win32 Wine Headers" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe -!IF "$(CFG)" == "msvcrt_test - Win32 MSVC Headers" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Output\Win32_MSVC_Headers" -# PROP BASE Intermediate_Dir "Output\Win32_MSVC_Headers" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Output\Win32_MSVC_Headers" -# PROP Intermediate_Dir "Output\Win32_MSVC_Headers" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WINVER=0x0501" /D "_WIN32_WINNT=0x0501" /D "_WIN32_IE=0x0600" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I ..\..\..\Output\\Win32_MSVC_Headers /D "WINVER=0x0501" /D "_WIN32_WINNT=0x0501" /D "_WIN32_IE=0x0600" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_MSVCRT_TEST_" /D "__WINE_USE_NATIVE_HEADERS" /D __WINETEST_OUTPUT_DIR=\"Output\\Win32_MSVC_Headers\" /D "__i386__" /D "_X86_" /D inline=__inline /FR /FD /GZ /c -# ADD BASE RSC /l 0x41d /d "_DEBUG" -# ADD RSC /l 0x41d /i "..\..\..\Output\\Win32_MSVC_Headers" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ELSEIF "$(CFG)" == "msvcrt_test - Win32 Wine Headers" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Output\Win32_Wine_Headers" -# PROP BASE Intermediate_Dir "Output\Win32_Wine_Headers" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Output\Win32_Wine_Headers" -# PROP Intermediate_Dir "Output\Win32_Wine_Headers" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WINVER=0x0501" /D "_WIN32_WINNT=0x0501" /D "_WIN32_IE=0x0600" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I ..\..\..\Output\\Win32_Wine_Headers /I ..\..\..\include /D "WINVER=0x0501" /D "_WIN32_WINNT=0x0501" /D "_WIN32_IE=0x0600" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_MSVCRT_TEST_" /D __WINETEST_OUTPUT_DIR=\"Output\\Win32_Wine_Headers\" /D "__i386__" /D "_X86_" /D inline=__inline /FR /FD /GZ /c -# ADD BASE RSC /l 0x41d /d "_DEBUG" -# ADD RSC /l 0x41d /i "..\..\..\Output\\Win32_Wine_Headers" /i "..\..\..\include" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "msvcrt_test - Win32 MSVC Headers" -# Name "msvcrt_test - Win32 Wine Headers" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\cpp.c -# End Source File -# Begin Source File - -SOURCE=.\\ -# End Source File -# Begin Source File - -SOURCE=.\testlist.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/rostests/winetests/msvcrt/printf.c b/rostests/winetests/msvcrt/printf.c deleted file mode 100644 index 7e07241f9b8..00000000000 --- a/rostests/winetests/msvcrt/printf.c +++ /dev/null @@ -1,654 +0,0 @@ -/* - * Conformance tests for *printf functions. - * - * Copyright 2002 Uwe Bonnes - * Copyright 2004 Aneurin Price - * Copyright 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 - */ - -/* With Visual Studio >= 2005, swprintf() takes an extra parameter unless - * the following macro is defined. - */ -#define _CRT_NON_CONFORMING_SWPRINTFS - -#include - -#include "wine/test.h" - -static void test_sprintf( void ) -{ - char buffer[100]; - const char *format; - double pnumber=789456123; - int x, r; - WCHAR wide[] = { 'w','i','d','e',0}; - - format = "%+#23.15e"; - r = sprintf(buffer,format,pnumber); - todo_wine { - ok(!strcmp(buffer,"+7.894561230000000e+008"),"exponent format incorrect\n"); - } - ok( r==23, "return count wrong\n"); - - format = "%I64d"; - r = sprintf(buffer,format,((ULONGLONG)0xffffffff)*0xffffffff); - ok(!strcmp(buffer,"-8589934591"),"Problem with long long\n"); - ok( r==11, "return count wrong\n"); - - format = "%+8I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer," +100") && r==8,"+8I64d failed: '%s'\n", buffer); - - format = "%+.8I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"+00000100") && r==9,"+.8I64d failed: '%s'\n", buffer); - - format = "%+10.8I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer," +00000100") && r==10,"+10.8I64d failed: '%s'\n", buffer); - format = "%_1I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"_1I64d") && r==6,"_1I64d failed\n"); - - format = "%-1.5I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"-00100") && r==6,"-1.5I64d failed: '%s'\n", buffer); - - format = "%5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer," 100") && r==5,"5I64d failed: '%s'\n", buffer); - - format = "%5I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer," -100") && r==5,"5I64d failed: '%s'\n", buffer); - - format = "%-5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"100 ") && r==5,"-5I64d failed: '%s'\n", buffer); - - format = "%-5I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"-100 ") && r==5,"-5I64d failed: '%s'\n", buffer); - - format = "%-.5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"00100") && r==5,"-.5I64d failed: '%s'\n", buffer); - - format = "%-.5I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"-00100") && r==6,"-.5I64d failed: '%s'\n", buffer); - - format = "%-8.5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"00100 ") && r==8,"-8.5I64d failed: '%s'\n", buffer); - - format = "%-8.5I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"-00100 ") && r==8,"-8.5I64d failed: '%s'\n", buffer); - - format = "%05I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"00100") && r==5,"05I64d failed: '%s'\n", buffer); - - format = "%05I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"-0100") && r==5,"05I64d failed: '%s'\n", buffer); - - format = "% I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer," 100") && r==4,"' I64d' failed: '%s'\n", buffer); - - format = "% I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"-100") && r==4,"' I64d' failed: '%s'\n", buffer); - - format = "% 5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer," 100") && r==5,"' 5I64d' failed: '%s'\n", buffer); - - format = "% 5I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer," -100") && r==5,"' 5I64d' failed: '%s'\n", buffer); - - format = "% .5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer," 00100") && r==6,"' .5I64d' failed: '%s'\n", buffer); - - format = "% .5I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"-00100") && r==6,"' .5I64d' failed: '%s'\n", buffer); - - format = "% 8.5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer," 00100") && r==8,"' 8.5I64d' failed: '%s'\n", buffer); - - format = "% 8.5I64d"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer," -00100") && r==8,"' 8.5I64d' failed: '%s'\n", buffer); - - format = "%.0I64d"; - r = sprintf(buffer,format,(LONGLONG)0); - ok(r==0,".0I64d failed: '%s'\n", buffer); - - format = "%#+21.18I64x"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer," 0x00ffffffffffffff9c") && r==21,"#+21.18I64x failed: '%s'\n", buffer); - - format = "%#.25I64o"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"0001777777777777777777634") && r==25,"#.25I64o failed: '%s'\n", buffer); - - format = "%#+24.20I64o"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer," 01777777777777777777634") && r==24,"#+24.20I64o failed: '%s'\n", buffer); - - format = "%#+18.21I64X"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"0X00000FFFFFFFFFFFFFF9C") && r==23,"#+18.21I64X failed: '%s '\n", buffer); - - format = "%#+20.24I64o"; - r = sprintf(buffer,format,(LONGLONG)-100); - ok(!strcmp(buffer,"001777777777777777777634") && r==24,"#+20.24I64o failed: '%s'\n", buffer); - - format = "%#+25.22I64u"; - r = sprintf(buffer,format,(LONGLONG)-1); - ok(!strcmp(buffer," 0018446744073709551615") && r==25,"#+25.22I64u conversion failed: '%s'\n", buffer); - - format = "%#+25.22I64u"; - r = sprintf(buffer,format,(LONGLONG)-1); - ok(!strcmp(buffer," 0018446744073709551615") && r==25,"#+25.22I64u failed: '%s'\n", buffer); - - format = "%#+30.25I64u"; - r = sprintf(buffer,format,(LONGLONG)-1); - ok(!strcmp(buffer," 0000018446744073709551615") && r==30,"#+30.25I64u failed: '%s'\n", buffer); - - format = "%+#25.22I64d"; - r = sprintf(buffer,format,(LONGLONG)-1); - ok(!strcmp(buffer," -0000000000000000000001") && r==25,"+#25.22I64d failed: '%s'\n", buffer); - - format = "%#-8.5I64o"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"00144 ") && r==8,"-8.5I64o failed: '%s'\n", buffer); - - format = "%#-+ 08.5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"+00100 ") && r==8,"'#-+ 08.5I64d failed: '%s'\n", buffer); - - format = "%#-+ 08.5I64d"; - r = sprintf(buffer,format,(LONGLONG)100); - ok(!strcmp(buffer,"+00100 ") && r==8,"#-+ 08.5I64d failed: '%s'\n", buffer); - - format = "%.80I64d"; - r = sprintf(buffer,format,(LONGLONG)1); - ok(r==80,"%s format failed\n", format); - - format = "% .80I64d"; - r = sprintf(buffer,format,(LONGLONG)1); - ok(r==81,"%s format failed\n", format); - - format = "% .80d"; - r = sprintf(buffer,format,1); - ok(r==81,"%s format failed\n", format); - - format = "%lld"; - r = sprintf(buffer,format,((ULONGLONG)0xffffffff)*0xffffffff); - ok(!strcmp(buffer, "1"), "Problem with \"ll\" interpretation\n"); - ok( r==1, "return count wrong\n"); - - format = "%I"; - r = sprintf(buffer,format,1); - ok(!strcmp(buffer, "I"), "Problem with \"I\" interpretation\n"); - ok( r==1, "return count wrong\n"); - - format = "%I0d"; - r = sprintf(buffer,format,1); - ok(!strcmp(buffer,"I0d"),"I0d failed\n"); - ok( r==3, "return count wrong\n"); - - format = "%I32d"; - r = sprintf(buffer,format,1); - ok(!strcmp(buffer,"1"),"I32d failed\n"); - ok( r==1, "return count wrong\n"); - - format = "%I64D"; - r = sprintf(buffer,format,(LONGLONG)-1); - ok(!strcmp(buffer,"D"),"I64D failed: %s\n",buffer); - ok( r==1, "return count wrong\n"); - - format = "% d"; - r = sprintf(buffer,format,1); - ok(!strcmp(buffer, " 1"),"Problem with sign place-holder: '%s'\n",buffer); - ok( r==2, "return count wrong\n"); - - format = "%+ d"; - r = sprintf(buffer,format,1); - ok(!strcmp(buffer, "+1"),"Problem with sign flags: '%s'\n",buffer); - ok( r==2, "return count wrong\n"); - - format = "%S"; - r = sprintf(buffer,format,wide); - ok(!strcmp(buffer,"wide"),"Problem with wide string format\n"); - ok( r==4, "return count wrong\n"); - - format = "%04c"; - r = sprintf(buffer,format,'1'); - ok(!strcmp(buffer,"0001"),"Character not zero-prefixed \"%s\"\n",buffer); - ok( r==4, "return count wrong\n"); - - format = "%-04c"; - r = sprintf(buffer,format,'1'); - ok(!strcmp(buffer,"1 "),"Character zero-padded and/or not left-adjusted \"%s\"\n",buffer); - ok( r==4, "return count wrong\n"); - - format = "%p"; - r = sprintf(buffer,format,(void *)57); - ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer); - ok( r==8, "return count wrong\n"); - - format = "%#012p"; - r = sprintf(buffer,format,(void *)57); - ok(!strcmp(buffer," 0X00000039"),"Pointer formatted incorrectly\n"); - ok( r==12, "return count wrong\n"); - - format = "%Fp"; - r = sprintf(buffer,format,(void *)57); - ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer); - ok( r==8, "return count wrong\n"); - - format = "%04s"; - r = sprintf(buffer,format,"foo"); - ok(!strcmp(buffer,"0foo"),"String not zero-prefixed \"%s\"\n",buffer); - ok( r==4, "return count wrong\n"); - - format = "%.1s"; - r = sprintf(buffer,format,"foo"); - ok(!strcmp(buffer,"f"),"Precision ignored \"%s\"\n",buffer); - ok( r==1, "return count wrong\n"); - - format = "%.*s"; - r = sprintf(buffer,format,1,"foo"); - ok(!strcmp(buffer,"f"),"Precision ignored \"%s\"\n",buffer); - ok( r==1, "return count wrong\n"); - - format = "%*s"; - r = sprintf(buffer,format,-5,"foo"); - ok(!strcmp(buffer,"foo "),"Negative field width ignored \"%s\"\n",buffer); - ok( r==5, "return count wrong\n"); - - format = "%#-012p"; - r = sprintf(buffer,format,(void *)57); - ok(!strcmp(buffer,"0X00000039 "),"Pointer formatted incorrectly\n"); - ok( r==12, "return count wrong\n"); - - format = "hello"; - r = sprintf(buffer, format); - ok(!strcmp(buffer,"hello"), "failed\n"); - ok( r==5, "return count wrong\n"); - - format = "%ws"; - r = sprintf(buffer, format, wide); - ok(!strcmp(buffer,"wide"), "failed\n"); - ok( r==4, "return count wrong\n"); - - format = "%-10ws"; - r = sprintf(buffer, format, wide ); - ok(!strcmp(buffer,"wide "), "failed\n"); - ok( r==10, "return count wrong\n"); - - format = "%10ws"; - r = sprintf(buffer, format, wide ); - ok(!strcmp(buffer," wide"), "failed\n"); - ok( r==10, "return count wrong\n"); - - format = "%#+ -03whlls"; - r = sprintf(buffer, format, wide ); - ok(!strcmp(buffer,"wide"), "failed\n"); - ok( r==4, "return count wrong\n"); - - format = "%w0s"; - r = sprintf(buffer, format, wide ); - ok(!strcmp(buffer,"0s"), "failed\n"); - ok( r==2, "return count wrong\n"); - - format = "%w-s"; - r = sprintf(buffer, format, wide ); - ok(!strcmp(buffer,"-s"), "failed\n"); - ok( r==2, "return count wrong\n"); - - format = "%ls"; - r = sprintf(buffer, format, wide ); - ok(!strcmp(buffer,"wide"), "failed\n"); - ok( r==4, "return count wrong\n"); - - format = "%Ls"; - r = sprintf(buffer, format, "not wide" ); - ok(!strcmp(buffer,"not wide"), "failed\n"); - ok( r==8, "return count wrong\n"); - - format = "%b"; - r = sprintf(buffer, format); - ok(!strcmp(buffer,"b"), "failed\n"); - ok( r==1, "return count wrong\n"); - - format = "%3c"; - r = sprintf(buffer, format,'a'); - ok(!strcmp(buffer," a"), "failed\n"); - ok( r==3, "return count wrong\n"); - - format = "%3d"; - r = sprintf(buffer, format,1234); - ok(!strcmp(buffer,"1234"), "failed\n"); - ok( r==4, "return count wrong\n"); - - format = "%3h"; - r = sprintf(buffer, format); - ok(!strcmp(buffer,""), "failed\n"); - ok( r==0, "return count wrong\n"); - - format = "%j%k%m%q%r%t%v%y%z"; - r = sprintf(buffer, format); - ok(!strcmp(buffer,"jkmqrtvyz"), "failed\n"); - ok( r==9, "return count wrong\n"); - - format = "asdf%n"; - x = 0; - r = sprintf(buffer, format, &x ); - ok(x == 4, "should write to x\n"); - ok(!strcmp(buffer,"asdf"), "failed\n"); - ok( r==4, "return count wrong\n"); - - format = "%-1d"; - r = sprintf(buffer, format,2); - ok(!strcmp(buffer,"2"), "failed\n"); - ok( r==1, "return count wrong\n"); - - format = "%2.4f"; - r = sprintf(buffer, format,8.6); - ok(!strcmp(buffer,"8.6000"), "failed\n"); - ok( r==6, "return count wrong\n"); - - format = "%0f"; - r = sprintf(buffer, format,0.6); - ok(!strcmp(buffer,"0.600000"), "failed\n"); - ok( r==8, "return count wrong\n"); - - format = "%.0f"; - r = sprintf(buffer, format,0.6); - ok(!strcmp(buffer,"1"), "failed\n"); - ok( r==1, "return count wrong\n"); - - todo_wine { - format = "%2.4e"; - r = sprintf(buffer, format,8.6); - ok(!strcmp(buffer,"8.6000e+000"), "failed\n"); - ok( r==11, "return count wrong\n"); - } - - format = "%2.4g"; - r = sprintf(buffer, format,8.6); - ok(!strcmp(buffer,"8.6"), "failed\n"); - ok( r==3, "return count wrong\n"); - - format = "%-i"; - r = sprintf(buffer, format,-1); - ok(!strcmp(buffer,"-1"), "failed\n"); - ok( r==2, "return count wrong\n"); - - format = "%-i"; - r = sprintf(buffer, format,1); - ok(!strcmp(buffer,"1"), "failed\n"); - ok( r==1, "return count wrong\n"); - - format = "%+i"; - r = sprintf(buffer, format,1); - ok(!strcmp(buffer,"+1"), "failed\n"); - ok( r==2, "return count wrong\n"); - - format = "%o"; - r = sprintf(buffer, format,10); - ok(!strcmp(buffer,"12"), "failed\n"); - ok( r==2, "return count wrong\n"); - - format = "%p"; - r = sprintf(buffer, format,0); - ok(!strcmp(buffer,"00000000"), "failed\n"); - ok( r==8, "return count wrong\n"); - - format = "%s"; - r = sprintf(buffer, format,0); - ok(!strcmp(buffer,"(null)"), "failed\n"); - ok( r==6, "return count wrong\n"); - - format = "%s"; - r = sprintf(buffer, format,"%%%%"); - ok(!strcmp(buffer,"%%%%"), "failed\n"); - ok( r==4, "return count wrong\n"); - - format = "%u"; - r = sprintf(buffer, format,-1); - ok(!strcmp(buffer,"4294967295"), "failed\n"); - ok( r==10, "return count wrong\n"); - - format = "%w"; - r = sprintf(buffer, format,-1); - ok(!strcmp(buffer,""), "failed\n"); - ok( r==0, "return count wrong\n"); - - format = "%h"; - r = sprintf(buffer, format,-1); - ok(!strcmp(buffer,""), "failed\n"); - ok( r==0, "return count wrong\n"); - - format = "%z"; - r = sprintf(buffer, format,-1); - ok(!strcmp(buffer,"z"), "failed\n"); - ok( r==1, "return count wrong\n"); - - format = "%j"; - r = sprintf(buffer, format,-1); - ok(!strcmp(buffer,"j"), "failed\n"); - ok( r==1, "return count wrong\n"); - - format = "%F"; - r = sprintf(buffer, format,-1); - ok(!strcmp(buffer,""), "failed\n"); - ok( r==0, "return count wrong\n"); - - format = "%H"; - r = sprintf(buffer, format,-1); - ok(!strcmp(buffer,"H"), "failed\n"); - ok( r==1, "return count wrong\n"); - - format = "x%cx"; - r = sprintf(buffer, format, 0x100+'X'); - ok(!strcmp(buffer,"xXx"), "failed\n"); - ok( r==3, "return count wrong\n"); - - format = "%%0"; - r = sprintf(buffer, format); - ok(!strcmp(buffer,"%0"), "failed: \"%s\"\n", buffer); - ok( r==2, "return count wrong\n"); -} - -static void test_swprintf( void ) -{ - wchar_t buffer[100]; - const wchar_t I64d[] = {'%','I','6','4','d',0}; - double pnumber=789456123; - const wchar_t TwentyThreePoint15e[]= {'%','+','#','2','3','.','1','5','e',0}; - const wchar_t e008[] = {'e','+','0','0','8',0}; - const wchar_t string_w[] = {'s','t','r','i','n','g',0}; - const char string[] = "string"; - const wchar_t S[]={'%','S',0}; - const wchar_t hs[] = {'%', 'h', 's', 0}; - - swprintf(buffer,TwentyThreePoint15e,pnumber); - todo_wine - { - ok(wcsstr(buffer,e008) != 0,"Sprintf different\n"); - } - swprintf(buffer,I64d,((ULONGLONG)0xffffffff)*0xffffffff); - ok(wcslen(buffer) == 11,"Problem with long long\n"); - swprintf(buffer,S,string); - ok(wcslen(buffer) == 6,"Problem with \"%%S\" interpretation\n"); - swprintf(buffer, hs, string); - ok( wcscmp(string_w,buffer) == 0, "swprintf failed with %%hs\n"); -} - -static void test_fwprintf( void ) -{ - const char *string="not a wide string"; - todo_wine - { - ok(fwprintf(fopen("nul","r+"),(const wchar_t *)string) == -1, - "Non-wide string should not be printed by fwprintf\n"); - } -} - -static void test_snprintf (void) -{ - struct snprintf_test { - const char *format; - int expected; - }; - /* Pre-2.1 libc behaviour, not C99 compliant. */ - const struct snprintf_test tests[] = {{"short", 5}, - {"justfit", 7}, - {"justfits", 8}, - {"muchlonger", -1}}; - char buffer[8]; - const int bufsiz = sizeof buffer; - unsigned int i; - - for (i = 0; i < sizeof tests / sizeof tests[0]; i++) { - const char *fmt = tests[i].format; - const int expect = tests[i].expected; - const int n = _snprintf (buffer, bufsiz, fmt); - const int valid = n < 0 ? bufsiz : (n == bufsiz ? n : n+1); - - ok (n == expect, "\"%s\": expected %d, returned %d\n", - fmt, expect, n); - ok (!memcmp (fmt, buffer, valid), - "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer); - }; -} - -static void test_fcvt(void) -{ - char *str; - int dec=100, sign=100; - - /* Numbers less than 1.0 with different precisions */ - str = _fcvt(0.0001, 1, &dec, &sign ); - ok( 0 == strcmp(str,""), "bad return '%s'\n", str); - ok( -3 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - str = _fcvt(0.0001, -10, &dec, &sign ); - ok( 0 == strcmp(str,""), "bad return '%s'\n", str); - ok( -3 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - str = _fcvt(0.0001, 10, &dec, &sign ); - ok( 0 == strcmp(str,"1000000"), "bad return '%s'\n", str); - ok( -3 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - /* Basic sign test */ - str = _fcvt(-111.0001, 5, &dec, &sign ); - ok( 0 == strcmp(str,"11100010"), "bad return '%s'\n", str); - ok( 3 == dec, "dec wrong %d\n", dec); - ok( 1 == sign, "sign wrong\n"); - - str = _fcvt(111.0001, 5, &dec, &sign ); - ok( 0 == strcmp(str,"11100010"), "bad return '%s'\n", str); - ok( 3 == dec, "dec wrong\n"); - ok( 0 == sign, "sign wrong\n"); - - /* 0.0 with different precisions */ - str = _fcvt(0.0, 5, &dec, &sign ); - ok( 0 == strcmp(str,"00000"), "bad return '%s'\n", str); - ok( 0 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - str = _fcvt(0.0, 0, &dec, &sign ); - ok( 0 == strcmp(str,""), "bad return '%s'\n", str); - ok( 0 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - str = _fcvt(0.0, -1, &dec, &sign ); - ok( 0 == strcmp(str,""), "bad return '%s'\n", str); - ok( 0 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - /* Numbers > 1.0 with 0 or -ve precision */ - str = _fcvt(-123.0001, 0, &dec, &sign ); - ok( 0 == strcmp(str,"123"), "bad return '%s'\n", str); - ok( 3 == dec, "dec wrong %d\n", dec); - ok( 1 == sign, "sign wrong\n"); - - str = _fcvt(-123.0001, -1, &dec, &sign ); - ok( 0 == strcmp(str,"12"), "bad return '%s'\n", str); - ok( 3 == dec, "dec wrong %d\n", dec); - ok( 1 == sign, "sign wrong\n"); - - str = _fcvt(-123.0001, -2, &dec, &sign ); - ok( 0 == strcmp(str,"1"), "bad return '%s'\n", str); - ok( 3 == dec, "dec wrong %d\n", dec); - ok( 1 == sign, "sign wrong\n"); - - str = _fcvt(-123.0001, -3, &dec, &sign ); - ok( 0 == strcmp(str,""), "bad return '%s'\n", str); - ok( 3 == dec, "dec wrong %d\n", dec); - ok( 1 == sign, "sign wrong\n"); - - /* Numbers > 1.0, but with rounding at the point of precision */ - str = _fcvt(99.99, 1, &dec, &sign ); - ok( 0 == strcmp(str,"1000"), "bad return '%s'\n", str); - ok( 3 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - /* Numbers < 1.0 where rounding occurs at the point of precision */ - str = _fcvt(0.00636, 2, &dec, &sign ); - ok( 0 == strcmp(str,"1"), "bad return '%s'\n", str); - ok( -1 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - str = _fcvt(0.00636, 3, &dec, &sign ); - ok( 0 == strcmp(str,"6"), "bad return '%s'\n", str); - ok( -2 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - str = _fcvt(0.09999999996, 2, &dec, &sign ); - ok( 0 == strcmp(str,"10"), "bad return '%s'\n", str); - ok( 0 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); - - str = _fcvt(0.6, 0, &dec, &sign ); - ok( 0 == strcmp(str,"1"), "bad return '%s'\n", str); - ok( 1 == dec, "dec wrong %d\n", dec); - ok( 0 == sign, "sign wrong\n"); -} - -START_TEST(printf) -{ - test_sprintf(); - test_swprintf(); - test_fwprintf(); - test_snprintf(); - test_fcvt(); -} diff --git a/rostests/winetests/msvcrt/scanf.c b/rostests/winetests/msvcrt/scanf.c deleted file mode 100644 index 65bea469036..00000000000 --- a/rostests/winetests/msvcrt/scanf.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Unit test suite for *scanf functions. - * - * Copyright 2002 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 - */ - -#include - -#include "wine/test.h" - -static void test_sscanf( void ) -{ - char buffer[100], buffer1[100]; - char format[20]; - int result, ret; - char c; - float res1= -82.6267f, res2= 27.76f, res11, res12; - static const char pname[]=" St. Petersburg, Florida\n"; - int hour=21,min=59,sec=20; - int number,number_so_far; - - - /* check EOF */ - strcpy(buffer,""); - ret = sscanf(buffer, "%d", &result); - ok( ret == EOF,"sscanf returns %x instead of %x\n", ret, EOF ); - - /* check %x */ - strcpy(buffer,"0x519"); - ok( sscanf(buffer, "%x", &result) == 1, "sscanf failed\n" ); - ok( result == 0x519,"sscanf reads %x instead of %x\n", result, 0x519 ); - - strcpy(buffer,"0x51a"); - ok( sscanf(buffer, "%x", &result) == 1, "sscanf failed\n" ); - ok( result == 0x51a ,"sscanf reads %x instead of %x\n", result, 0x51a ); - - strcpy(buffer,"0x51g"); - ok( sscanf(buffer, "%x", &result) == 1, "sscanf failed\n" ); - ok( result == 0x51, "sscanf reads %x instead of %x\n", result, 0x51 ); - - result = 0; - ret = sscanf("-1", "%x", &result); - ok(ret == 1, "Wrong number of arguments read: %d (expected 1)\n", ret); - ok(result == -1, "Read %d, expected -1\n", result); - - /* check % followed by any char */ - strcpy(buffer,"\"%12@"); - strcpy(format,"%\"%%%d%@"); /* work around gcc format check */ - ok( sscanf(buffer, format, &result) == 1, "sscanf failed\n" ); - ok( result == 12, "sscanf reads %x instead of %x\n", result, 12 ); - - /* Check float */ - ret = sprintf(buffer,"%f %f",res1, res2); - ret = sscanf(buffer,"%f%f",&res11, &res12); - ok( (res11 == res1) && (res12 == res2), "Error reading floats\n"); - - /* check strings */ - ret = sprintf(buffer," %s", pname); - ret = sscanf(buffer,"%*c%[^\n]",buffer1); - ok( ret == 1, "Error with format \"%s\"\n","%*c%[^\n]"); - ok( strncmp(pname,buffer1,strlen(buffer1)) == 0, "Error with \"%s\" \"%s\"\n",pname, buffer1); - - ret = sscanf("abcefgdh","%*[a-cg-e]%c",&buffer[0]); - ok( ret == 1, "Error with format \"%s\"\n","%*[a-cg-e]%c"); - ok( buffer[0] == 'd', "Error with \"abcefgdh\" \"%c\"\n", buffer[0]); - - ret = sscanf("abcefgdh","%*[a-cd-dg-e]%c",&buffer[0]); - ok( ret == 1, "Error with format \"%s\"\n","%*[a-cd-dg-e]%c"); - ok( buffer[0] == 'h', "Error with \"abcefgdh\" \"%c\"\n", buffer[0]); - - /* check digits */ - ret = sprintf(buffer,"%d:%d:%d",hour,min,sec); - ret = sscanf(buffer,"%d%n",&number,&number_so_far); - ok(ret == 1 , "problem with format arg \"%%d%%n\"\n"); - ok(number == hour,"Read wrong arg %d instead of %d\n",number, hour); - ok(number_so_far == 2,"Read wrong arg for \"%%n\" %d instead of 2\n",number_so_far); - - ret = sscanf(buffer+2,"%*c%n",&number_so_far); - ok(ret == 0 , "problem with format arg \"%%*c%%n\"\n"); - ok(number_so_far == 1,"Read wrong arg for \"%%n\" %d instead of 2\n",number_so_far); - - /* Check %i according to bug 1878 */ - strcpy(buffer,"123"); - ret = sscanf(buffer, "%i", &result); - ok(ret == 1, "Wrong number of arguments read: %d\n", ret); - ok(result == 123, "Wrong number read\n"); - result = 0; - ret = sscanf("-1", "%i", &result); - ok(ret == 1, "Wrong number of arguments read: %d (expected 1)\n", ret); - ok(result == -1, "Read %d, expected -1\n", result); - ret = sscanf(buffer, "%d", &result); - ok(ret == 1, "Wrong number of arguments read: %d\n", ret); - ok(result == 123, "Wrong number read\n"); - result = 0; - ret = sscanf("-1", "%d", &result); - ok(ret == 1, "Wrong number of arguments read: %d (expected 1)\n", ret); - ok(result == -1, "Read %d, expected -1\n", result); - - /* Check %i for octal and hexadecimal input */ - result = 0; - strcpy(buffer,"017"); - ret = sscanf(buffer, "%i", &result); - ok(ret == 1, "Wrong number of arguments read: %d\n", ret); - ok(result == 15, "Wrong number read\n"); - result = 0; - strcpy(buffer,"0x17"); - ret = sscanf(buffer, "%i", &result); - ok(ret == 1, "Wrong number of arguments read: %d\n", ret); - ok(result == 23, "Wrong number read\n"); - - /* %o */ - result = 0; - ret = sscanf("-1", "%o", &result); - ok(ret == 1, "Wrong number of arguments read: %d (expected 1)\n", ret); - ok(result == -1, "Read %d, expected -1\n", result); - - /* %u */ - result = 0; - ret = sscanf("-1", "%u", &result); - ok(ret == 1, "Wrong number of arguments read: %d (expected 1)\n", ret); - ok(result == -1, "Read %d, expected -1\n", result); - - /* Check %c */ - strcpy(buffer,"a"); - c = 0x55; - ret = sscanf(buffer, "%c", &c); - ok(ret == 1, "Wrong number of arguments read: %d\n", ret); - ok(c == 'a', "Field incorrect: '%c'\n", c); - - strcpy(buffer," a"); - c = 0x55; - ret = sscanf(buffer, "%c", &c); - ok(ret == 1, "Wrong number of arguments read: %d\n", ret); - ok(c == ' ', "Field incorrect: '%c'\n", c); - - strcpy(buffer,"18:59"); - c = 0x55; - ret = sscanf(buffer, "%d:%d%c", &hour, &min, &c); - ok(ret == 2, "Wrong number of arguments read: %d\n", ret); - ok(hour == 18, "Field 1 incorrect: %d\n", hour); - ok(min == 59, "Field 2 incorrect: %d\n", min); - ok(c == 0x55, "Field 3 incorrect: 0x%02x\n", c); - - /* Check %n (also whitespace in format strings and %s) */ - buffer[0]=0; buffer1[0]=0; - ret = sscanf("abc def", "%s %n%s", buffer, &number_so_far, buffer1); - ok(strcmp(buffer, "abc")==0, "First %%s read incorrectly: %s\n", buffer); - ok(strcmp(buffer1,"def")==0, "Second %%s read incorrectly: %s\n", buffer1); - ok(number_so_far==6, "%%n yielded wrong result: %d\n", number_so_far); - ok(ret == 2, "%%n shouldn't count as a conversion: %d\n", ret); - - /* Check where %n matches to EOF in buffer */ - strcpy(buffer, "3:45"); - ret = sscanf(buffer, "%d:%d%n", &hour, &min, &number_so_far); - ok(ret == 2, "Wrong number of arguments read: %d\n", ret); - ok(number_so_far == 4, "%%n yielded wrong result: %d\n", number_so_far); -} - -START_TEST(scanf) -{ - test_sscanf(); -} diff --git a/rostests/winetests/msvcrt/string.c b/rostests/winetests/msvcrt/string.c deleted file mode 100644 index 4febeea2d27..00000000000 --- a/rostests/winetests/msvcrt/string.c +++ /dev/null @@ -1,429 +0,0 @@ -/* - * Unit test suite for string functions. - * - * Copyright 2004 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 - */ - -#include "wine/test.h" -#include "winbase.h" -#include -#include -#include -#include -#include -#include - -size_t _mbstrlen(const char*); - -static char *buf_to_string(const unsigned char *bin, int len, int nr) -{ - static char buf[2][1024]; - char *w = buf[nr]; - int i; - - for (i = 0; i < len; i++) - { - sprintf(w, "%02x ", (unsigned char)bin[i]); - w += strlen(w); - } - return buf[nr]; -} - -#define expect_eq(expr, value, type, format) { type ret = (expr); ok((value) == ret, #expr " expected " format " got " format "\n", value, ret); } -#define expect_bin(buf, value, len) { ok(memcmp((buf), value, len) == 0, "Binary buffer mismatch - expected %s, got %s\n", buf_to_string((unsigned char *)value, len, 1), buf_to_string((buf), len, 0)); } - -static void* (*pmemcpy)(void *, const void *, size_t n); -static int* (*pmemcmp)(void *, const void *, size_t n); - -#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hMsvcrt,y) -#define SET(x,y) SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y) - -HMODULE hMsvcrt; - -static void test_swab( void ) { - char original[] = "BADCFEHGJILKNMPORQTSVUXWZY@#"; - char expected1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ@#"; - char expected2[] = "ABCDEFGHIJKLMNOPQRSTUVWX$"; - char expected3[] = "$"; - - char from[30]; - char to[30]; - - int testsize; - - /* Test 1 - normal even case */ - memset(to,'$', sizeof(to)); - memset(from,'@', sizeof(from)); - testsize = 26; - memcpy(from, original, testsize); - _swab( from, to, testsize ); - ok(memcmp(to,expected1,testsize) == 0, "Testing even size %d returned '%*.*s'\n", testsize, testsize, testsize, to); - - /* Test 2 - uneven case */ - memset(to,'$', sizeof(to)); - memset(from,'@', sizeof(from)); - testsize = 25; - memcpy(from, original, testsize); - _swab( from, to, testsize ); - ok(memcmp(to,expected2,testsize) == 0, "Testing odd size %d returned '%*.*s'\n", testsize, testsize, testsize, to); - - /* Test 3 - from = to */ - memset(to,'$', sizeof(to)); - memset(from,'@', sizeof(from)); - testsize = 26; - memcpy(to, original, testsize); - _swab( to, to, testsize ); - ok(memcmp(to,expected1,testsize) == 0, "Testing overlapped size %d returned '%*.*s'\n", testsize, testsize, testsize, to); - - /* Test 4 - 1 bytes */ - memset(to,'$', sizeof(to)); - memset(from,'@', sizeof(from)); - testsize = 1; - memcpy(from, original, testsize); - _swab( from, to, testsize ); - ok(memcmp(to,expected3,testsize) == 0, "Testing small size %d returned '%*.*s'\n", testsize, testsize, testsize, to); -} - -#if 0 /* use this to generate more tests */ - -static void test_codepage(int cp) -{ - int i; - int prev; - int count = 1; - - ok(_setmbcp(cp) == 0, "Couldn't set mbcp\n"); - - prev = _mbctype[0]; - printf("static int result_cp_%d_mbctype[] = { ", cp); - for (i = 1; i < 257; i++) - { - if (_mbctype[i] != prev) - { - printf("0x%x,%d, ", prev, count); - prev = _mbctype[i]; - count = 1; - } - else - count++; - } - printf("0x%x,%d };\n", prev, count); -} - -#define test_codepage_todo(cp, todo) test_codepage(cp) - -#else - -/* RLE-encoded mbctype tables for given codepages */ -static int result_cp_932_mbctype[] = { 0x0,65, 0x8,1, 0x18,26, 0x8,6, 0x28,26, 0x8,4, - 0x0,1, 0x8,1, 0xc,31, 0x8,1, 0xa,5, 0x9,58, 0xc,29, 0,3 }; -static int result_cp_936_mbctype[] = { 0x0,65, 0x8,1, 0x18,26, 0x8,6, 0x28,26, 0x8,6, - 0xc,126, 0,1 }; -static int result_cp_949_mbctype[] = { 0x0,66, 0x18,26, 0x8,6, 0x28,26, 0x8,6, 0xc,126, - 0,1 }; -static int result_cp_950_mbctype[] = { 0x0,65, 0x8,1, 0x18,26, 0x8,6, 0x28,26, 0x8,4, - 0x0,2, 0x4,32, 0xc,94, 0,1 }; - -static int todo_none[] = { -2 }; -static int todo_cp_932[] = { 254, -2 }; -#if 0 -void test_cp_table(int cp, int *result, int *todo) -{ - int i; - int count = 0; - int curr = 0; - _setmbcp(cp); - for (i = 0; i < 256; i++) - { - if (count == 0) - { - curr = result[0]; - count = result[1]; - result += 2; - } - if (i == *todo + 1) - { - todo_wine ok(_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, _mbctype[i], curr); - todo++; - } - else - ok(_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, _mbctype[i], curr); - count--; - } -} - -#define test_codepage(num) test_cp_table(num, result_cp_##num##_mbctype, todo_none); -#define test_codepage_todo(num, todo) test_cp_table(num, result_cp_##num##_mbctype, todo); -#endif -#endif - -static void test_mbcp(void) -{ - int mb_orig_max = __mb_cur_max; - int curr_mbcp = _getmbcp(); - unsigned char *mbstring = (unsigned char *)"\xb0\xb1\xb2 \xb3\xb4 \xb5"; /* incorrect string */ - unsigned char *mbstring2 = (unsigned char *)"\xb0\xb1\xb2\xb3Q\xb4\xb5"; /* correct string */ - unsigned char *mbsonlylead = (unsigned char *)"\xb0\0\xb1\xb2 \xb3"; - unsigned char buf[16]; - int step; - - /* _mbtype tests */ - - /* An SBCS codepage test. The ctype of characters on e.g. CP1252 or CP1250 differs slightly - * between versions of Windows. Also Windows 9x seems to ignore the codepage and always uses - * CP1252 (or the ACP?) so we test only a few ASCII characters */ - _setmbcp(1252); - expect_eq(_mbctype[10], 0, char, "%x"); - expect_eq(_mbctype[50], 0, char, "%x"); - expect_eq(_mbctype[66], _SBUP, char, "%x"); - expect_eq(_mbctype[100], _SBLOW, char, "%x"); - expect_eq(_mbctype[128], 0, char, "%x"); - _setmbcp(1250); - expect_eq(_mbctype[10], 0, char, "%x"); - expect_eq(_mbctype[50], 0, char, "%x"); - expect_eq(_mbctype[66], _SBUP, char, "%x"); - expect_eq(_mbctype[100], _SBLOW, char, "%x"); - expect_eq(_mbctype[128], 0, char, "%x"); - - /* double byte code pages */ - //test_codepage_todo(932, todo_cp_932); - //test_codepage(936); - //test_codepage(949); - //test_codepage(950); - - _setmbcp(936); - ok(__mb_cur_max == mb_orig_max, "__mb_cur_max shouldn't be updated (is %d != %d)\n", __mb_cur_max, mb_orig_max); - ok(_ismbblead('\354'), "\354 should be a lead byte\n"); - ok(_ismbblead(' ') == FALSE, "' ' should not be a lead byte\n"); - ok(_ismbblead(0x1234b0), "0x1234b0 should not be a lead byte\n"); - ok(_ismbblead(0x123420) == FALSE, "0x123420 should not be a lead byte\n"); - ok(_ismbbtrail('\xb0'), "\xa0 should be a trail byte\n"); - ok(_ismbbtrail(' ') == FALSE, "' ' should not be a trail byte\n"); - - /* _ismbslead */ - expect_eq(_ismbslead(mbstring, &mbstring[0]), -1, int, "%d"); - expect_eq(_ismbslead(mbstring, &mbstring[1]), FALSE, int, "%d"); - expect_eq(_ismbslead(mbstring, &mbstring[2]), -1, int, "%d"); - expect_eq(_ismbslead(mbstring, &mbstring[3]), FALSE, int, "%d"); - expect_eq(_ismbslead(mbstring, &mbstring[4]), -1, int, "%d"); - expect_eq(_ismbslead(mbstring, &mbstring[5]), FALSE, int, "%d"); - expect_eq(_ismbslead(mbstring, &mbstring[6]), FALSE, int, "%d"); - expect_eq(_ismbslead(mbstring, &mbstring[7]), -1, int, "%d"); - expect_eq(_ismbslead(mbstring, &mbstring[8]), FALSE, int, "%d"); - - expect_eq(_ismbslead(mbsonlylead, &mbsonlylead[0]), -1, int, "%d"); - expect_eq(_ismbslead(mbsonlylead, &mbsonlylead[1]), FALSE, int, "%d"); - expect_eq(_ismbslead(mbsonlylead, &mbsonlylead[2]), FALSE, int, "%d"); - expect_eq(_ismbslead(mbsonlylead, &mbsonlylead[5]), FALSE, int, "%d"); - - /* _ismbstrail */ - expect_eq(_ismbstrail(mbstring, &mbstring[0]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbstring, &mbstring[1]), -1, int, "%d"); - expect_eq(_ismbstrail(mbstring, &mbstring[2]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbstring, &mbstring[3]), -1, int, "%d"); - expect_eq(_ismbstrail(mbstring, &mbstring[4]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbstring, &mbstring[5]), -1, int, "%d"); - expect_eq(_ismbstrail(mbstring, &mbstring[6]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbstring, &mbstring[7]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbstring, &mbstring[8]), -1, int, "%d"); - - expect_eq(_ismbstrail(mbsonlylead, &mbsonlylead[0]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbsonlylead, &mbsonlylead[1]), -1, int, "%d"); - expect_eq(_ismbstrail(mbsonlylead, &mbsonlylead[2]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbsonlylead, &mbsonlylead[3]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbsonlylead, &mbsonlylead[4]), FALSE, int, "%d"); - expect_eq(_ismbstrail(mbsonlylead, &mbsonlylead[5]), FALSE, int, "%d"); - - /* _mbsbtype */ - expect_eq(_mbsbtype(mbstring, 0), _MBC_LEAD, int, "%d"); - expect_eq(_mbsbtype(mbstring, 1), _MBC_TRAIL, int, "%d"); - expect_eq(_mbsbtype(mbstring, 2), _MBC_LEAD, int, "%d"); - expect_eq(_mbsbtype(mbstring, 3), _MBC_ILLEGAL, int, "%d"); - expect_eq(_mbsbtype(mbstring, 4), _MBC_LEAD, int, "%d"); - expect_eq(_mbsbtype(mbstring, 5), _MBC_TRAIL, int, "%d"); - expect_eq(_mbsbtype(mbstring, 6), _MBC_SINGLE, int, "%d"); - expect_eq(_mbsbtype(mbstring, 7), _MBC_LEAD, int, "%d"); - expect_eq(_mbsbtype(mbstring, 8), _MBC_ILLEGAL, int, "%d"); - - expect_eq(_mbsbtype(mbsonlylead, 0), _MBC_LEAD, int, "%d"); - expect_eq(_mbsbtype(mbsonlylead, 1), _MBC_ILLEGAL, int, "%d"); - expect_eq(_mbsbtype(mbsonlylead, 2), _MBC_ILLEGAL, int, "%d"); - expect_eq(_mbsbtype(mbsonlylead, 3), _MBC_ILLEGAL, int, "%d"); - expect_eq(_mbsbtype(mbsonlylead, 4), _MBC_ILLEGAL, int, "%d"); - expect_eq(_mbsbtype(mbsonlylead, 5), _MBC_ILLEGAL, int, "%d"); - - /* _mbsnextc */ - expect_eq(_mbsnextc(mbstring), 0xb0b1, int, "%x"); - expect_eq(_mbsnextc(&mbstring[2]), 0xb220, int, "%x"); /* lead + invalid tail */ - expect_eq(_mbsnextc(&mbstring[3]), 0x20, int, "%x"); /* single char */ - - /* _mbclen/_mbslen */ - expect_eq(_mbclen(mbstring), 2, int, "%d"); - expect_eq(_mbclen(&mbstring[2]), 2, int, "%d"); - expect_eq(_mbclen(&mbstring[3]), 1, int, "%d"); - expect_eq(_mbslen(mbstring2), 4, int, "%d"); - expect_eq(_mbslen(mbsonlylead), 0, int, "%d"); /* lead + NUL not counted as character */ - expect_eq(_mbslen(mbstring), 4, int, "%d"); /* lead + invalid trail counted */ - - /* _mbccpy/_mbsncpy */ - memset(buf, 0xff, sizeof(buf)); - _mbccpy(buf, mbstring); - expect_bin(buf, "\xb0\xb1\xff", 3); - - memset(buf, 0xff, sizeof(buf)); - _mbsncpy(buf, mbstring, 1); - expect_bin(buf, "\xb0\xb1\xff", 3); - memset(buf, 0xff, sizeof(buf)); - _mbsncpy(buf, mbstring, 2); - expect_bin(buf, "\xb0\xb1\xb2 \xff", 5); - memset(buf, 0xff, sizeof(buf)); - _mbsncpy(buf, mbstring, 3); - expect_bin(buf, "\xb0\xb1\xb2 \xb3\xb4\xff", 7); - memset(buf, 0xff, sizeof(buf)); - _mbsncpy(buf, mbstring, 4); - expect_bin(buf, "\xb0\xb1\xb2 \xb3\xb4 \xff", 8); - memset(buf, 0xff, sizeof(buf)); - _mbsncpy(buf, mbstring, 5); - expect_bin(buf, "\xb0\xb1\xb2 \xb3\xb4 \0\0\xff", 10); - memset(buf, 0xff, sizeof(buf)); - _mbsncpy(buf, mbsonlylead, 6); - expect_bin(buf, "\0\0\0\0\0\0\0\xff", 8); - - memset(buf, 0xff, sizeof(buf)); - _mbsnbcpy(buf, mbstring2, 2); - expect_bin(buf, "\xb0\xb1\xff", 3); - _mbsnbcpy(buf, mbstring2, 3); - expect_bin(buf, "\xb0\xb1\0\xff", 4); - _mbsnbcpy(buf, mbstring2, 4); - expect_bin(buf, "\xb0\xb1\xb2\xb3\xff", 5); - memset(buf, 0xff, sizeof(buf)); - _mbsnbcpy(buf, mbsonlylead, 5); - expect_bin(buf, "\0\0\0\0\0\xff", 6); - - /* _mbsinc/mbsdec */ - step = _mbsinc(mbstring) - mbstring; - ok(step == 2, "_mbsinc adds %d (exp. 2)\n", step); - step = _mbsinc(&mbstring[2]) - &mbstring[2]; /* lead + invalid tail */ - ok(step == 2, "_mbsinc adds %d (exp. 2)\n", step); - - step = _mbsninc(mbsonlylead, 1) - mbsonlylead; - ok(step == 0, "_mbsninc adds %d (exp. 0)\n", step); - step = _mbsninc(mbsonlylead, 2) - mbsonlylead; /* lead + NUL byte + lead + char */ - ok(step == 0, "_mbsninc adds %d (exp. 0)\n", step); - step = _mbsninc(mbstring2, 0) - mbstring2; - ok(step == 0, "_mbsninc adds %d (exp. 2)\n", step); - step = _mbsninc(mbstring2, 1) - mbstring2; - ok(step == 2, "_mbsninc adds %d (exp. 2)\n", step); - step = _mbsninc(mbstring2, 2) - mbstring2; - ok(step == 4, "_mbsninc adds %d (exp. 4)\n", step); - step = _mbsninc(mbstring2, 3) - mbstring2; - ok(step == 5, "_mbsninc adds %d (exp. 5)\n", step); - step = _mbsninc(mbstring2, 4) - mbstring2; - ok(step == 7, "_mbsninc adds %d (exp. 7)\n", step); - step = _mbsninc(mbstring2, 5) - mbstring2; - ok(step == 7, "_mbsninc adds %d (exp. 7)\n", step); - step = _mbsninc(mbstring2, 17) - mbstring2; - ok(step == 7, "_mbsninc adds %d (exp. 7)\n", step); - - /* functions that depend on locale codepage, not mbcp. - * we hope the current locale to be SBCS because setlocale(LC_ALL, ".1252") seems not to work yet - * (as of Wine 0.9.43) - */ - if (__mb_cur_max == 1) - { - expect_eq(mblen((char *)mbstring, 3), 1, int, "%x"); - expect_eq(_mbstrlen((char *)mbstring2), 7, int, "%d"); - } - else - skip("Current locale has double-byte charset - could leave to false positives\n"); - - _setmbcp(curr_mbcp); -} - -static void test_mbsspn( void) -{ - unsigned char str1[]="cabernet"; - unsigned char str2[]="shiraz"; - unsigned char set[]="abc"; - unsigned char empty[]=""; - int ret; - ret=_mbsspn( str1, set); - ok( ret==3, "_mbsspn returns %d should be 3\n", ret); - ret=_mbsspn( str2, set); - ok( ret==0, "_mbsspn returns %d should be 0\n", ret); - ret=_mbsspn( str1, empty); - ok( ret==0, "_mbsspn returns %d should be 0\n", ret); -} - -static void test_mbsspnp( void) -{ - unsigned char str1[]="cabernet"; - unsigned char str2[]="shiraz"; - unsigned char set[]="abc"; - unsigned char empty[]=""; - unsigned char full[]="abcenrt"; - unsigned char* ret; - ret=_mbsspnp( str1, set); - ok( ret[0]=='e', "_mbsspnp returns %c should be e\n", ret[0]); - ret=_mbsspnp( str2, set); - ok( ret[0]=='s', "_mbsspnp returns %c should be s\n", ret[0]); - ret=_mbsspnp( str1, empty); - ok( ret[0]=='c', "_mbsspnp returns %c should be c\n", ret[0]); - ret=_mbsspnp( str1, full); - ok( ret==NULL, "_mbsspnp returns %p should be NULL\n", ret); -} - -static void test_strdup(void) -{ - char *str; - str = _strdup( 0 ); - ok( str == 0, "strdup returns %s should be 0\n", str); - free( str ); -} - -START_TEST(string) -{ - char mem[100]; - static const char xilstring[]="c:/xilinx"; - int nLen; - - hMsvcrt = GetModuleHandleA("msvcrt.dll"); - if (!hMsvcrt) - hMsvcrt = GetModuleHandleA("msvcrtd.dll"); - ok(hMsvcrt != 0, "GetModuleHandleA failed\n"); - SET(pmemcpy,"memcpy"); - SET(pmemcmp,"memcmp"); - - /* MSVCRT memcpy behaves like memmove for overlapping moves, - MFC42 CString::Insert seems to rely on that behaviour */ - strcpy(mem,xilstring); - nLen=strlen(xilstring); - pmemcpy(mem+5, mem,nLen+1); - ok(pmemcmp(mem+5,xilstring, nLen) == 0, - "Got result %s\n",mem+5); - - /* Test _swab function */ - test_swab(); - - /* Test ismbblead*/ - test_mbcp(); - /* test _mbsspn */ - test_mbsspn(); - test_mbsspnp(); - /* test _strdup */ - test_strdup(); -} diff --git a/rostests/winetests/msvcrt/testlist.c b/rostests/winetests/msvcrt/testlist.c deleted file mode 100644 index db41945d89d..00000000000 --- a/rostests/winetests/msvcrt/testlist.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_cpp(void); -extern void func_data(void); -extern void func_dir(void); -extern void func_environ(void); -extern void func_file(void); -extern void func_headers(void); -extern void func_heap(void); -extern void func_printf(void); -extern void func_scanf(void); -extern void func_string(void); -extern void func_time(void); - -const struct test winetest_testlist[] = -{ - { "cpp", func_cpp }, - { "data", func_data }, - { "dir", func_dir }, - { "environ", func_environ }, - { "file", func_file }, - { "headers", func_headers }, - { "heap", func_heap }, - { "printf", func_printf }, - { "scanf", func_scanf }, - { "string", func_string }, - { "time", func_time }, - { 0, 0 } -}; diff --git a/rostests/winetests/msvcrt/time.c b/rostests/winetests/msvcrt/time.c deleted file mode 100644 index 1fe6cbf3340..00000000000 --- a/rostests/winetests/msvcrt/time.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Unit test suite for time functions. - * - * Copyright 2004 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 - */ - -#include "wine/test.h" -#include "winbase.h" -#include "time.h" - -#include /*setenv*/ -#include /*printf*/ - -#define SECSPERDAY 86400 -#define SECSPERHOUR 3600 -#define SECSPERMIN 60 -#define MINSPERHOUR 60 -#define HOURSPERDAY 24 - -static void test_gmtime(void) -{ - time_t gmt = (time_t)NULL; - struct tm* gmt_tm = gmtime(&gmt); - if(gmt_tm == 0) - { - ok(0,"gmtime() error\n"); - return; - } - ok(((gmt_tm->tm_year == 70) && (gmt_tm->tm_mon == 0) && (gmt_tm->tm_yday == 0) && - (gmt_tm->tm_mday == 1) && (gmt_tm->tm_wday == 4) && (gmt_tm->tm_hour == 0) && - (gmt_tm->tm_min == 0) && (gmt_tm->tm_sec == 0) && (gmt_tm->tm_isdst == 0)), - "Wrong date:Year %4d mon %2d yday %3d mday %2d wday %1d hour%2d min %2d sec %2d dst %2d\n", - gmt_tm->tm_year, gmt_tm->tm_mon, gmt_tm->tm_yday, gmt_tm->tm_mday, gmt_tm->tm_wday, - gmt_tm->tm_hour, gmt_tm->tm_min, gmt_tm->tm_sec, gmt_tm->tm_isdst); - -} - -static void test_mktime(void) -{ - TIME_ZONE_INFORMATION tzinfo; - DWORD res = GetTimeZoneInformation(&tzinfo); - struct tm my_tm, sav_tm; - time_t nulltime, local_time; - char TZ_env[256]; - int secs; - - ok (res != TIME_ZONE_ID_INVALID, "GetTimeZoneInformation failed\n"); - /* Bias may be positive or negative, to use offset of one day */ - secs= SECSPERDAY - tzinfo.Bias * SECSPERMIN; - my_tm.tm_mday = 1 + secs/SECSPERDAY; - secs = secs % SECSPERDAY; - my_tm.tm_hour = secs / SECSPERHOUR; - secs = secs % SECSPERHOUR; - my_tm.tm_min = secs / SECSPERMIN; - secs = secs % SECSPERMIN; - my_tm.tm_sec = secs; - - my_tm.tm_year = 70; - my_tm.tm_mon = 0; - my_tm.tm_isdst= 0; - - sav_tm = my_tm; - - local_time = mktime(&my_tm); - ok(((DWORD)local_time == SECSPERDAY), "mktime returned %u, expected %u\n", - (DWORD)local_time, SECSPERDAY); - /* now test some unnormalized struct tm's */ - my_tm = sav_tm; - my_tm.tm_sec += 60; - my_tm.tm_min -= 1; - local_time = mktime(&my_tm); - ok(((DWORD)local_time == SECSPERDAY), "Unnormalized mktime returned %u, expected %u\n", - (DWORD)local_time, SECSPERDAY); - ok( my_tm.tm_year == sav_tm.tm_year && my_tm.tm_mon == sav_tm.tm_mon && - my_tm.tm_mday == sav_tm.tm_mday && my_tm.tm_hour == sav_tm.tm_hour && - my_tm.tm_sec == sav_tm.tm_sec, - "mktime returned %2d-%02d-%02d %02d:%02d expected %2d-%02d-%02d %02d:%02d\n", - my_tm.tm_year,my_tm.tm_mon,my_tm.tm_mday, - my_tm.tm_hour,my_tm.tm_sec, - sav_tm.tm_year,sav_tm.tm_mon,sav_tm.tm_mday, - sav_tm.tm_hour,sav_tm.tm_sec); - my_tm = sav_tm; - my_tm.tm_min -= 60; - my_tm.tm_hour += 1; - local_time = mktime(&my_tm); - ok(((DWORD)local_time == SECSPERDAY), "Unnormalized mktime returned %u, expected %u\n", - (DWORD)local_time, SECSPERDAY); - ok( my_tm.tm_year == sav_tm.tm_year && my_tm.tm_mon == sav_tm.tm_mon && - my_tm.tm_mday == sav_tm.tm_mday && my_tm.tm_hour == sav_tm.tm_hour && - my_tm.tm_sec == sav_tm.tm_sec, - "mktime returned %2d-%02d-%02d %02d:%02d expected %2d-%02d-%02d %02d:%02d\n", - my_tm.tm_year,my_tm.tm_mon,my_tm.tm_mday, - my_tm.tm_hour,my_tm.tm_sec, - sav_tm.tm_year,sav_tm.tm_mon,sav_tm.tm_mday, - sav_tm.tm_hour,sav_tm.tm_sec); - my_tm = sav_tm; - my_tm.tm_mon -= 12; - my_tm.tm_year += 1; - local_time = mktime(&my_tm); - ok(((DWORD)local_time == SECSPERDAY), "Unnormalized mktime returned %u, expected %u\n", - (DWORD)local_time, SECSPERDAY); - ok( my_tm.tm_year == sav_tm.tm_year && my_tm.tm_mon == sav_tm.tm_mon && - my_tm.tm_mday == sav_tm.tm_mday && my_tm.tm_hour == sav_tm.tm_hour && - my_tm.tm_sec == sav_tm.tm_sec, - "mktime returned %2d-%02d-%02d %02d:%02d expected %2d-%02d-%02d %02d:%02d\n", - my_tm.tm_year,my_tm.tm_mon,my_tm.tm_mday, - my_tm.tm_hour,my_tm.tm_sec, - sav_tm.tm_year,sav_tm.tm_mon,sav_tm.tm_mday, - sav_tm.tm_hour,sav_tm.tm_sec); - my_tm = sav_tm; - my_tm.tm_mon += 12; - my_tm.tm_year -= 1; - local_time = mktime(&my_tm); - ok(((DWORD)local_time == SECSPERDAY), "Unnormalized mktime returned %u, expected %u\n", - (DWORD)local_time, SECSPERDAY); - ok( my_tm.tm_year == sav_tm.tm_year && my_tm.tm_mon == sav_tm.tm_mon && - my_tm.tm_mday == sav_tm.tm_mday && my_tm.tm_hour == sav_tm.tm_hour && - my_tm.tm_sec == sav_tm.tm_sec, - "mktime returned %2d-%02d-%02d %02d:%02d expected %2d-%02d-%02d %02d:%02d\n", - my_tm.tm_year,my_tm.tm_mon,my_tm.tm_mday, - my_tm.tm_hour,my_tm.tm_sec, - sav_tm.tm_year,sav_tm.tm_mon,sav_tm.tm_mday, - sav_tm.tm_hour,sav_tm.tm_sec); - /* now a bad time example */ - my_tm = sav_tm; - my_tm.tm_year -= 1; - local_time = mktime(&my_tm); - ok((local_time == -1), "(bad time) mktime returned %d, expected -1\n", (int)local_time); - - my_tm = sav_tm; - /* TEST that we are independent from the TZ variable */ - /*Argh, msvcrt doesn't have setenv() */ - _snprintf(TZ_env,255,"TZ=%s",(getenv("TZ")?getenv("TZ"):"")); - putenv("TZ=GMT"); - nulltime = mktime(&my_tm); - ok(((DWORD)nulltime == SECSPERDAY),"mktime returned 0x%08x\n",(DWORD)nulltime); - putenv(TZ_env); -} - -static void test_localtime(void) -{ - TIME_ZONE_INFORMATION tzinfo; - DWORD res = GetTimeZoneInformation(&tzinfo); - time_t gmt = (time_t)(SECSPERDAY + tzinfo.Bias * SECSPERMIN); - - char TZ_env[256]; - struct tm* lt; - - ok (res != TIME_ZONE_ID_INVALID, "GetTimeZoneInformation failed\n"); - lt = localtime(&gmt); - ok(((lt->tm_year == 70) && (lt->tm_mon == 0) && (lt->tm_yday == 1) && - (lt->tm_mday == 2) && (lt->tm_wday == 5) && (lt->tm_hour == 0) && - (lt->tm_min == 0) && (lt->tm_sec == 0) && (lt->tm_isdst == 0)), - "Wrong date:Year %d mon %d yday %d mday %d wday %d hour %d min %d sec %d dst %d\n", - lt->tm_year, lt->tm_mon, lt->tm_yday, lt->tm_mday, lt->tm_wday, lt->tm_hour, - lt->tm_min, lt->tm_sec, lt->tm_isdst); - - _snprintf(TZ_env,255,"TZ=%s",(getenv("TZ")?getenv("TZ"):"")); - putenv("TZ=GMT"); - lt = localtime(&gmt); - ok(((lt->tm_year == 70) && (lt->tm_mon == 0) && (lt->tm_yday == 1) && - (lt->tm_mday == 2) && (lt->tm_wday == 5) && (lt->tm_hour == 0) && - (lt->tm_min == 0) && (lt->tm_sec == 0) && (lt->tm_isdst == 0)), - "Wrong date:Year %d mon %d yday %d mday %d wday %d hour %d min %d sec %d dst %d\n", - lt->tm_year, lt->tm_mon, lt->tm_yday, lt->tm_mday, lt->tm_wday, lt->tm_hour, - lt->tm_min, lt->tm_sec, lt->tm_isdst); - putenv(TZ_env); - - /* June 22 */ - gmt += 201 * SECSPERDAY; - lt = localtime(&gmt); - gmt += (lt->tm_isdst ? tzinfo.DaylightBias : tzinfo.StandardBias) * SECSPERMIN; - lt = localtime(&gmt); - ok(((lt->tm_year == 70) && (lt->tm_mon == 6) && (lt->tm_yday == 202) && - (lt->tm_mday == 22) && (lt->tm_wday == 3) && (lt->tm_hour == 0) && - (lt->tm_min == 0) && (lt->tm_sec == 0)), - "Wrong date:Year %d mon %d yday %d mday %d wday %d hour %d min %d sec %d dst %d\n", - lt->tm_year, lt->tm_mon, lt->tm_yday, lt->tm_mday, lt->tm_wday, lt->tm_hour, - lt->tm_min, lt->tm_sec, lt->tm_isdst); -} - -static void test_strdate(void) -{ - char date[16], * result; - int month, day, year, count, len; - - result = _strdate(date); - ok(result == date, "Wrong return value\n"); - len = strlen(date); - ok(len == 8, "Wrong length: returned %d, should be 8\n", len); - count = sscanf(date, "%02d/%02d/%02d", &month, &day, &year); - ok(count == 3, "Wrong format: count = %d, should be 3\n", count); -} - -static void test_strtime(void) -{ - char time[16], * result; - int hour, minute, second, count, len; - - result = _strtime(time); - ok(result == time, "Wrong return value\n"); - len = strlen(time); - ok(len == 8, "Wrong length: returned %d, should be 8\n", len); - count = sscanf(time, "%02d:%02d:%02d", &hour, &minute, &second); - ok(count == 3, "Wrong format: count = %d, should be 3\n", count); -} - -static void test_wstrdate(void) -{ - wchar_t date[16], * result; - int month, day, year, count, len; - wchar_t format[] = { '%','0','2','d','/','%','0','2','d','/','%','0','2','d',0 }; - - result = _wstrdate(date); - ok(result == date, "Wrong return value\n"); - len = wcslen(date); - ok(len == 8, "Wrong length: returned %d, should be 8\n", len); - count = swscanf(date, format, &month, &day, &year); - ok(count == 3, "Wrong format: count = %d, should be 3\n", count); -} - -static void test_wstrtime(void) -{ - wchar_t time[16], * result; - int hour, minute, second, count, len; - wchar_t format[] = { '%','0','2','d',':','%','0','2','d',':','%','0','2','d',0 }; - - result = _wstrtime(time); - ok(result == time, "Wrong return value\n"); - len = wcslen(time); - ok(len == 8, "Wrong length: returned %d, should be 8\n", len); - count = swscanf(time, format, &hour, &minute, &second); - ok(count == 3, "Wrong format: count = %d, should be 3\n", count); -} - -START_TEST(time) -{ - test_gmtime(); - test_mktime(); - test_localtime(); - test_strdate(); - test_strtime(); - test_wstrdate(); - test_wstrtime(); -} diff --git a/rostests/winetests/netapi32/access.c b/rostests/winetests/netapi32/access.c deleted file mode 100644 index f46cb7faf00..00000000000 --- a/rostests/winetests/netapi32/access.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright 2002 Andriy Palamarchuk - * - * Conformance test of the access functions. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 -#include - -#include "wine/test.h" - -WCHAR user_name[UNLEN + 1]; -WCHAR computer_name[MAX_COMPUTERNAME_LENGTH + 1]; - -static const WCHAR sNonexistentUser[] = {'N','o','n','e','x','i','s','t','e','n','t',' ', - 'U','s','e','r',0}; -static WCHAR sTooLongName[] = {'T','h','i','s',' ','i','s',' ','a',' ','b','a','d', - ' ','u','s','e','r','n','a','m','e',0}; -static WCHAR sTooLongPassword[] = {'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h','a','b','c','d','e','f','g','h', - 'a', 0}; - -static WCHAR sTestUserName[] = {'t', 'e', 's', 't', 'u', 's', 'e', 'r', 0}; -static WCHAR sTestUserOldPass[] = {'O', 'l', 'd', 'P', 'a', 's', 's', 'W', '0', 'r', 'd', 'S', 'e', 't', '!', '~', 0}; -static const WCHAR sBadNetPath[] = {'\\','\\','B','a',' ',' ','p','a','t','h',0}; -static const WCHAR sInvalidName[] = {'\\',0}; -static const WCHAR sInvalidName2[] = {'\\','\\',0}; -static const WCHAR sEmptyStr[] = { 0 }; - -static NET_API_STATUS (WINAPI *pNetApiBufferFree)(LPVOID)=NULL; -static NET_API_STATUS (WINAPI *pNetApiBufferSize)(LPVOID,LPDWORD)=NULL; -static NET_API_STATUS (WINAPI *pNetQueryDisplayInformation)(LPWSTR,DWORD,DWORD,DWORD,DWORD,LPDWORD,PVOID*)=NULL; -static NET_API_STATUS (WINAPI *pNetUserGetInfo)(LPCWSTR,LPCWSTR,DWORD,LPBYTE*)=NULL; -static NET_API_STATUS (WINAPI *pNetUserModalsGet)(LPCWSTR,DWORD,LPBYTE*)=NULL; -static NET_API_STATUS (WINAPI *pNetUserAdd)(LPCWSTR,DWORD,LPBYTE,LPDWORD)=NULL; -static NET_API_STATUS (WINAPI *pNetUserDel)(LPCWSTR,LPCWSTR)=NULL; - -static int init_access_tests(void) -{ - DWORD dwSize; - BOOL rc; - - user_name[0] = 0; - dwSize = sizeof(user_name); - rc=GetUserNameW(user_name, &dwSize); - if (rc==FALSE && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - skip("GetUserNameW is not available.\n"); - return 0; - } - ok(rc, "User Name Retrieved\n"); - - computer_name[0] = 0; - dwSize = sizeof(computer_name); - ok(GetComputerNameW(computer_name, &dwSize), "Computer Name Retrieved\n"); - return 1; -} - -static NET_API_STATUS create_test_user(void) -{ - USER_INFO_1 usri; - - usri.usri1_name = sTestUserName; - usri.usri1_password = sTestUserOldPass; - usri.usri1_priv = USER_PRIV_USER; - usri.usri1_home_dir = NULL; - usri.usri1_comment = NULL; - usri.usri1_flags = UF_SCRIPT; - usri.usri1_script_path = NULL; - - return pNetUserAdd(NULL, 1, (LPBYTE)&usri, NULL); -} - -static NET_API_STATUS delete_test_user(void) -{ - return pNetUserDel(NULL, sTestUserName); -} - -static void run_usergetinfo_tests(void) -{ - NET_API_STATUS rc; - PUSER_INFO_0 ui0 = NULL; - PUSER_INFO_10 ui10 = NULL; - DWORD dwSize; - - if((rc = create_test_user()) != NERR_Success ) - { - skip("Skipping usergetinfo_tests, create_test_user failed: 0x%08x\n", rc); - return; - } - - /* Level 0 */ - rc=pNetUserGetInfo(NULL, sTestUserName, 0, (LPBYTE *)&ui0); - ok(rc == NERR_Success, "NetUserGetInfo level 0 failed: 0x%08x.\n", rc); - ok(!lstrcmpW(sTestUserName, ui0->usri0_name),"Username mismatch for level 0.\n"); - pNetApiBufferSize(ui0, &dwSize); - ok(dwSize >= (sizeof(USER_INFO_0) + - (lstrlenW(ui0->usri0_name) + 1) * sizeof(WCHAR)), - "Is allocated with NetApiBufferAllocate\n"); - - /* Level 10 */ - rc=pNetUserGetInfo(NULL, sTestUserName, 10, (LPBYTE *)&ui10); - ok(rc == NERR_Success, "NetUserGetInfo level 10 failed: 0x%08x.\n", rc); - ok(!lstrcmpW(sTestUserName, ui10->usri10_name), "Username mismatch for level 10.\n"); - pNetApiBufferSize(ui10, &dwSize); - ok(dwSize >= (sizeof(USER_INFO_10) + - (lstrlenW(ui10->usri10_name) + 1 + - lstrlenW(ui10->usri10_comment) + 1 + - lstrlenW(ui10->usri10_usr_comment) + 1 + - lstrlenW(ui10->usri10_full_name) + 1) * sizeof(WCHAR)), - "Is allocated with NetApiBufferAllocate\n"); - - pNetApiBufferFree(ui0); - pNetApiBufferFree(ui10); - - /* NetUserGetInfo should always work for the current user. */ - rc=pNetUserGetInfo(NULL, user_name, 0, (LPBYTE*)&ui0); - ok(rc == NERR_Success, "NetUsetGetInfo for current user failed: 0x%08x.\n", rc); - pNetApiBufferFree(ui0); - - /* errors handling */ - rc=pNetUserGetInfo(NULL, sTestUserName, 10000, (LPBYTE *)&ui0); - ok(rc == ERROR_INVALID_LEVEL,"Invalid Level: rc=%d\n",rc); - rc=pNetUserGetInfo(NULL, sNonexistentUser, 0, (LPBYTE *)&ui0); - ok(rc == NERR_UserNotFound,"Invalid User Name: rc=%d\n",rc); - todo_wine { - /* FIXME - Currently Wine can't verify whether the network path is good or bad */ - rc=pNetUserGetInfo(sBadNetPath, sTestUserName, 0, (LPBYTE *)&ui0); - ok(rc == ERROR_BAD_NETPATH || rc == ERROR_NETWORK_UNREACHABLE, - "Bad Network Path: rc=%d\n",rc); - } - rc=pNetUserGetInfo(sEmptyStr, sTestUserName, 0, (LPBYTE *)&ui0); - ok(rc == ERROR_BAD_NETPATH || rc == NERR_Success, - "Bad Network Path: rc=%d\n",rc); - rc=pNetUserGetInfo(sInvalidName, sTestUserName, 0, (LPBYTE *)&ui0); - ok(rc == ERROR_INVALID_NAME,"Invalid Server Name: rc=%d\n",rc); - rc=pNetUserGetInfo(sInvalidName2, sTestUserName, 0, (LPBYTE *)&ui0); - ok(rc == ERROR_INVALID_NAME,"Invalid Server Name: rc=%d\n",rc); - - if(delete_test_user() != NERR_Success) - trace("Deleting the test user failed. You might have to manually delete it.\n"); -} - -/* checks Level 1 of NetQueryDisplayInformation - * FIXME: Needs to be rewritten to not depend on the spelling of the users, - * ideally based on the admin and guest user SIDs/RIDs.*/ -static void run_querydisplayinformation1_tests(void) -{ - PNET_DISPLAY_USER Buffer, rec; - DWORD Result, EntryCount; - DWORD i = 0; - BOOL hasAdmin = FALSE; - BOOL hasGuest = FALSE; - static const WCHAR sAdminUserName[] = {'A','d','m','i','n','i','s','t','r','a', - 't','o','r',0}; - static const WCHAR sGuestUserName[] = {'G','u','e','s','t',0}; - - do - { - Result = pNetQueryDisplayInformation( - NULL, 1, i, 1000, MAX_PREFERRED_LENGTH, &EntryCount, - (PVOID *)&Buffer); - - ok((Result == ERROR_SUCCESS) || (Result == ERROR_MORE_DATA), - "Information Retrieved\n"); - rec = Buffer; - for(; EntryCount > 0; EntryCount--) - { - if (!lstrcmpW(rec->usri1_name, sAdminUserName)) - { - ok(!hasAdmin, "One admin user\n"); - ok(rec->usri1_flags & UF_SCRIPT, "UF_SCRIPT flag is set\n"); - ok(rec->usri1_flags & UF_NORMAL_ACCOUNT, "UF_NORMAL_ACCOUNT flag is set\n"); - hasAdmin = TRUE; - } - else if (!lstrcmpW(rec->usri1_name, sGuestUserName)) - { - ok(!hasGuest, "One guest record\n"); - ok(rec->usri1_flags & UF_SCRIPT, "UF_SCRIPT flag is set\n"); - ok(rec->usri1_flags & UF_NORMAL_ACCOUNT, "UF_NORMAL_ACCOUNT flag is set\n"); - hasGuest = TRUE; - } - - i = rec->usri1_next_index; - rec++; - } - - pNetApiBufferFree(Buffer); - } while (Result == ERROR_MORE_DATA); - - ok(hasAdmin, "Has Administrator account\n"); -} - -static void run_usermodalsget_tests(void) -{ - NET_API_STATUS rc; - USER_MODALS_INFO_2 * umi2 = NULL; - - rc = pNetUserModalsGet(NULL, 2, (LPBYTE *)&umi2); - ok(rc == ERROR_SUCCESS, "NetUserModalsGet failed, rc = %d\n", rc); - - if (umi2) - pNetApiBufferFree(umi2); -} - -static void run_userhandling_tests(void) -{ - NET_API_STATUS ret; - USER_INFO_1 usri; - - usri.usri1_priv = USER_PRIV_USER; - usri.usri1_home_dir = NULL; - usri.usri1_comment = NULL; - usri.usri1_flags = UF_SCRIPT; - usri.usri1_script_path = NULL; - - usri.usri1_name = sTooLongName; - usri.usri1_password = sTestUserOldPass; - - ret = pNetUserAdd(NULL, 1, (LPBYTE)&usri, NULL); - if (ret == NERR_Success || ret == NERR_UserExists) - { - /* Windows NT4 does create the user. Delete the user and also if it already existed - * due to a previous test run on NT4. - */ - trace("We are on NT4, we have to delete the user with the too long username\n"); - ret = pNetUserDel(NULL, sTooLongName); - ok(ret == NERR_Success, "Deleting the user failed : %d\n", ret); - } - else - ok(ret == NERR_BadUsername, "Adding user with too long username returned 0x%08x\n", ret); - - usri.usri1_name = sTestUserName; - usri.usri1_password = sTooLongPassword; - - ret = pNetUserAdd(NULL, 1, (LPBYTE)&usri, NULL); - ok(ret == NERR_PasswordTooShort, "Adding user with too long password returned 0x%08x\n", ret); - - usri.usri1_name = sTooLongName; - usri.usri1_password = sTooLongPassword; - - ret = pNetUserAdd(NULL, 1, (LPBYTE)&usri, NULL); - /* NT4 doesn't have a problem with the username so it will report the too long password - * as the error. NERR_PasswordTooShort is reported for all kind of password related errors. - */ - ok(ret == NERR_BadUsername || ret == NERR_PasswordTooShort, - "Adding user with too long username/password returned 0x%08x\n", ret); - - usri.usri1_name = sTestUserName; - usri.usri1_password = sTestUserOldPass; - - ret = pNetUserAdd(NULL, 5, (LPBYTE)&usri, NULL); - ok(ret == ERROR_INVALID_LEVEL, "Adding user with level 5 returned 0x%08x\n", ret); - - ret = pNetUserAdd(NULL, 1, (LPBYTE)&usri, NULL); - if(ret == ERROR_ACCESS_DENIED) - { - skip("Insufficient permissions to add users. Skipping test.\n"); - return; - } - if(ret == NERR_UserExists) - { - skip("User already exists, skipping test to not mess up the system\n"); - return; - } - - ok(ret == NERR_Success, "Adding user failed with error 0x%08x\n", ret); - if(ret != NERR_Success) - return; - - /* On Windows XP (and newer), calling NetUserChangePassword with a NULL - * domainname parameter creates a user home directory, iff the machine is - * not member of a domain. - * Using \\127.0.0.1 as domain name does not work on standalone machines - * either, unless the ForceGuest option in the registry is turned off. - * So let's not test NetUserChangePassword for now. - */ - - ret = pNetUserDel(NULL, sTestUserName); - ok(ret == NERR_Success, "Deleting the user failed.\n"); - - ret = pNetUserDel(NULL, sTestUserName); - ok(ret == NERR_UserNotFound, "Deleting a nonexistent user returned 0x%08x\n",ret); -} - -START_TEST(access) -{ - HMODULE hnetapi32=LoadLibraryA("netapi32.dll"); - - pNetApiBufferFree=(void*)GetProcAddress(hnetapi32,"NetApiBufferFree"); - pNetApiBufferSize=(void*)GetProcAddress(hnetapi32,"NetApiBufferSize"); - pNetQueryDisplayInformation=(void*)GetProcAddress(hnetapi32,"NetQueryDisplayInformation"); - pNetUserGetInfo=(void*)GetProcAddress(hnetapi32,"NetUserGetInfo"); - pNetUserModalsGet=(void*)GetProcAddress(hnetapi32,"NetUserModalsGet"); - pNetUserAdd=(void*)GetProcAddress(hnetapi32, "NetUserAdd"); - pNetUserDel=(void*)GetProcAddress(hnetapi32, "NetUserDel"); - - /* These functions were introduced with NT. It's safe to assume that - * if one is not available, none are. - */ - if (!pNetApiBufferFree) { - skip("Needed functions are not available\n"); - FreeLibrary(hnetapi32); - return; - } - - if (init_access_tests()) { - run_userhandling_tests(); - run_usergetinfo_tests(); - run_querydisplayinformation1_tests(); - run_usermodalsget_tests(); - } - - FreeLibrary(hnetapi32); -} diff --git a/rostests/winetests/netapi32/apibuf.c b/rostests/winetests/netapi32/apibuf.c deleted file mode 100644 index 5589c1819d6..00000000000 --- a/rostests/winetests/netapi32/apibuf.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2002 Andriy Palamarchuk - * - * Conformance test of the network buffer function. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include -#include -#include -#include -#include -#include -#include - -static NET_API_STATUS (WINAPI *pNetApiBufferAllocate)(DWORD,LPVOID*)=NULL; -static NET_API_STATUS (WINAPI *pNetApiBufferFree)(LPVOID)=NULL; -static NET_API_STATUS (WINAPI *pNetApiBufferReallocate)(LPVOID,DWORD,LPVOID*)=NULL; -static NET_API_STATUS (WINAPI *pNetApiBufferSize)(LPVOID,LPDWORD)=NULL; - - -static void run_apibuf_tests(void) -{ - VOID *p; - DWORD dwSize; - NET_API_STATUS res; - - /* test normal logic */ - ok(pNetApiBufferAllocate(1024, (LPVOID *)&p) == NERR_Success, - "Reserved memory\n"); - ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n"); - ok(dwSize >= 1024, "The size is correct\n"); - - ok(pNetApiBufferReallocate(p, 1500, (LPVOID *) &p) == NERR_Success, - "Reallocated\n"); - ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n"); - ok(dwSize >= 1500, "The size is correct\n"); - - ok(pNetApiBufferFree(p) == NERR_Success, "Freed\n"); - - ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n"); - ok(pNetApiBufferSize(NULL, &dwSize) == ERROR_INVALID_PARAMETER, "Error for NULL pointer\n"); - - /* border reallocate cases */ - ok(pNetApiBufferReallocate(0, 1500, (LPVOID *) &p) == NERR_Success, "Reallocate with OldBuffer = NULL failed\n"); - ok(p != NULL, "No memory got allocated\n"); - ok(pNetApiBufferAllocate(1024, (LPVOID *)&p) == NERR_Success, "Memory not reserved\n"); - ok(pNetApiBufferReallocate(p, 0, (LPVOID *) &p) == NERR_Success, "Not freed\n"); - ok(p == NULL, "Pointer not cleared\n"); - - /* 0-length buffer */ - ok(pNetApiBufferAllocate(0, (LPVOID *)&p) == NERR_Success, - "Reserved memory\n"); - ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n"); - ok(dwSize < 0xFFFFFFFF, "The size of the 0-length buffer\n"); - ok(pNetApiBufferFree(p) == NERR_Success, "Freed\n"); - - /* NULL-Pointer */ - /* NT: ERROR_INVALID_PARAMETER, lasterror is untouched) */ - SetLastError(0xdeadbeef); - res = pNetApiBufferAllocate(0, (LPVOID *)NULL); - ok( (res == ERROR_INVALID_PARAMETER) && (GetLastError() == 0xdeadbeef), - "returned %d with 0x%x (expected ERROR_INVALID_PARAMETER with " - "0xdeadbeef)\n", res, GetLastError()); - - SetLastError(0xdeadbeef); - res = pNetApiBufferAllocate(1024, (LPVOID *)NULL); - ok( (res == ERROR_INVALID_PARAMETER) && (GetLastError() == 0xdeadbeef), - "returned %d with 0x%x (expected ERROR_INVALID_PARAMETER with " - "0xdeadbeef)\n", res, GetLastError()); -} - -START_TEST(apibuf) -{ - HMODULE hnetapi32=LoadLibraryA("netapi32.dll"); - - pNetApiBufferAllocate=(void*)GetProcAddress(hnetapi32,"NetApiBufferAllocate"); - pNetApiBufferFree=(void*)GetProcAddress(hnetapi32,"NetApiBufferFree"); - pNetApiBufferReallocate=(void*)GetProcAddress(hnetapi32,"NetApiBufferReallocate"); - pNetApiBufferSize=(void*)GetProcAddress(hnetapi32,"NetApiBufferSize"); - - if (pNetApiBufferAllocate && pNetApiBufferFree && pNetApiBufferReallocate && pNetApiBufferSize) - run_apibuf_tests(); - else - skip("Needed functions are not available\n"); - - FreeLibrary(hnetapi32); -} diff --git a/rostests/winetests/netapi32/ds.c b/rostests/winetests/netapi32/ds.c deleted file mode 100644 index 277a589b8ca..00000000000 --- a/rostests/winetests/netapi32/ds.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2005 Paul Vriens - * - * Conformance test of the ds functions. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 - -static DWORD (WINAPI *pDsRoleGetPrimaryDomainInformation)(LPCWSTR, DSROLE_PRIMARY_DOMAIN_INFO_LEVEL, PBYTE*); -static void (WINAPI *pDsRoleFreeMemory)(PVOID); - -static void test_params(void) -{ - DWORD ret; - PDSROLE_PRIMARY_DOMAIN_INFO_BASIC dpdi; - - SetLastError(0xdeadbeef); - ret = pDsRoleGetPrimaryDomainInformation(NULL, DsRolePrimaryDomainInfoBasic, NULL); - ok( ret == ERROR_INVALID_PARAMETER, "Expected error ERROR_INVALID_PARAMETER, got (%d)\n", ret); - - SetLastError(0xdeadbeef); - ret = pDsRoleGetPrimaryDomainInformation(NULL, 0, NULL); - ok( ret == ERROR_INVALID_PARAMETER, "Expected error ERROR_INVALID_PARAMETER, got (%d)\n", ret); - SetLastError(0xdeadbeef); - ret = pDsRoleGetPrimaryDomainInformation(NULL, 4, NULL); - ok( ret == ERROR_INVALID_PARAMETER, "Expected error ERROR_INVALID_PARAMETER, got (%d)\n", ret); - - SetLastError(0xdeadbeef); - ret = pDsRoleGetPrimaryDomainInformation(NULL, 4, (PBYTE *)&dpdi); - ok( ret == ERROR_INVALID_PARAMETER, "Expected error ERROR_INVALID_PARAMETER, got (%d)\n", ret); -} - -static void test_get(void) -{ - DWORD ret; - PDSROLE_PRIMARY_DOMAIN_INFO_BASIC dpdi; - PDSROLE_UPGRADE_STATUS_INFO dusi; - PDSROLE_OPERATION_STATE_INFO dosi; - - SetLastError(0xdeadbeef); - ret = pDsRoleGetPrimaryDomainInformation(NULL, DsRolePrimaryDomainInfoBasic, (PBYTE *)&dpdi); - ok( ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got (%d)\n", ret); - pDsRoleFreeMemory(dpdi); - - SetLastError(0xdeadbeef); - ret = pDsRoleGetPrimaryDomainInformation(NULL, DsRoleUpgradeStatus, (PBYTE *)&dusi); - todo_wine { ok( ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got (%d)\n", ret); } - pDsRoleFreeMemory(dusi); - - SetLastError(0xdeadbeef); - ret = pDsRoleGetPrimaryDomainInformation(NULL, DsRoleOperationState, (PBYTE *)&dosi); - todo_wine { ok( ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got (%d)\n", ret); } - pDsRoleFreeMemory(dosi); -} - - -START_TEST(ds) -{ - HMODULE hnetapi32 = LoadLibrary("netapi32.dll"); - - pDsRoleGetPrimaryDomainInformation=(void*)GetProcAddress(hnetapi32,"DsRoleGetPrimaryDomainInformation"); - if (pDsRoleGetPrimaryDomainInformation) - { - pDsRoleFreeMemory=(void*)GetProcAddress(hnetapi32,"DsRoleFreeMemory"); - - test_params(); - test_get(); - } - else - skip("DsRoleGetPrimaryDomainInformation is not available\n"); - - FreeLibrary(hnetapi32); -} diff --git a/rostests/winetests/netapi32/netapi32.rbuild b/rostests/winetests/netapi32/netapi32.rbuild deleted file mode 100644 index 8bfe6e590eb..00000000000 --- a/rostests/winetests/netapi32/netapi32.rbuild +++ /dev/null @@ -1,16 +0,0 @@ - - - - - . - access.c - apibuf.c - ds.c - wksta.c - testlist.c - wine - advapi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/netapi32/testlist.c b/rostests/winetests/netapi32/testlist.c deleted file mode 100644 index 5d8d227ef15..00000000000 --- a/rostests/winetests/netapi32/testlist.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_access(void); -extern void func_apibuf(void); -extern void func_ds(void); -extern void func_wksta(void); - -const struct test winetest_testlist[] = -{ - { "access", func_access }, - { "apibuf", func_apibuf }, - { "ds", func_ds }, - { "wksta", func_wksta }, - { 0, 0 } -}; diff --git a/rostests/winetests/netapi32/wksta.c b/rostests/winetests/netapi32/wksta.c deleted file mode 100644 index b4994f8a2d3..00000000000 --- a/rostests/winetests/netapi32/wksta.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright 2002 Andriy Palamarchuk - * - * Conformance test of the workstation functions. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winnls.h" -#include "winresrc.h" /* Ensure we use Unicode defns with native headers */ -#include "nb30.h" -#include "lmcons.h" -#include "lmerr.h" -#include "lmwksta.h" -#include "lmapibuf.h" - -static NET_API_STATUS (WINAPI *pNetApiBufferFree)(LPVOID)=NULL; -static NET_API_STATUS (WINAPI *pNetApiBufferSize)(LPVOID,LPDWORD)=NULL; -static NET_API_STATUS (WINAPI *pNetpGetComputerName)(LPWSTR*)=NULL; -static NET_API_STATUS (WINAPI *pNetWkstaUserGetInfo)(LPWSTR,DWORD,PBYTE*)=NULL; -static NET_API_STATUS (WINAPI *pNetWkstaTransportEnum)(LPWSTR,DWORD,LPBYTE*, - DWORD,LPDWORD,LPDWORD,LPDWORD)=NULL; - -WCHAR user_name[UNLEN + 1]; -WCHAR computer_name[MAX_COMPUTERNAME_LENGTH + 1]; - -static int init_wksta_tests(void) -{ - DWORD dwSize; - BOOL rc; - - user_name[0] = 0; - dwSize = sizeof(user_name)/sizeof(user_name[0]); - rc=GetUserNameW(user_name, &dwSize); - if (rc==FALSE && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) { - skip("GetUserNameW is not implemented\n"); - return 0; - } - ok(rc, "User Name Retrieved\n"); - - computer_name[0] = 0; - dwSize = sizeof(computer_name)/sizeof(computer_name[0]); - ok(GetComputerNameW(computer_name, &dwSize), "Computer Name Retrieved\n"); - return 1; -} - -static void run_get_comp_name_tests(void) -{ - LPWSTR ws = NULL; - - ok(pNetpGetComputerName(&ws) == NERR_Success, "Computer name is retrieved\n"); - ok(!lstrcmpW(computer_name, ws), "This is really computer name\n"); - pNetApiBufferFree(ws); -} - -static void run_wkstausergetinfo_tests(void) -{ - LPWKSTA_USER_INFO_0 ui0 = NULL; - LPWKSTA_USER_INFO_1 ui1 = NULL; - LPWKSTA_USER_INFO_1101 ui1101 = NULL; - DWORD dwSize; - - /* Level 0 */ - ok(pNetWkstaUserGetInfo(NULL, 0, (LPBYTE *)&ui0) == NERR_Success, - "NetWkstaUserGetInfo is unsuccessful\n"); - - ok(ui0 != NULL, "ui0 is NULL\n"); - /* This failure occurred when I ran sshd as service and didn't authenticate - * Since the test dereferences ui0, the rest of this test is worthless - */ - if (!ui0) - { - return; - } - - ok(!lstrcmpW(user_name, ui0->wkui0_username), "This is really user name\n"); - pNetApiBufferSize(ui0, &dwSize); - ok(dwSize >= (sizeof(WKSTA_USER_INFO_0) + - lstrlenW(ui0->wkui0_username) * sizeof(WCHAR)), - "Is allocated with NetApiBufferAllocate\n"); - - /* Level 1 */ - ok(pNetWkstaUserGetInfo(NULL, 1, (LPBYTE *)&ui1) == NERR_Success, - "NetWkstaUserGetInfo is successful\n"); - ok(lstrcmpW(ui1->wkui1_username, ui0->wkui0_username) == 0, - "the same name as returned for level 0\n"); - pNetApiBufferSize(ui1, &dwSize); - ok(dwSize >= (sizeof(WKSTA_USER_INFO_1) + - (lstrlenW(ui1->wkui1_username) + - lstrlenW(ui1->wkui1_logon_domain) + - lstrlenW(ui1->wkui1_oth_domains) + - lstrlenW(ui1->wkui1_logon_server)) * sizeof(WCHAR)), - "Is allocated with NetApiBufferAllocate\n"); - - /* Level 1101 */ - ok(pNetWkstaUserGetInfo(NULL, 1101, (LPBYTE *)&ui1101) == NERR_Success, - "NetWkstaUserGetInfo is successful\n"); - ok(lstrcmpW(ui1101->wkui1101_oth_domains, ui1->wkui1_oth_domains) == 0, - "the same oth_domains as returned for level 1\n"); - pNetApiBufferSize(ui1101, &dwSize); - ok(dwSize >= (sizeof(WKSTA_USER_INFO_1101) + - lstrlenW(ui1101->wkui1101_oth_domains) * sizeof(WCHAR)), - "Is allocated with NetApiBufferAllocate\n"); - - pNetApiBufferFree(ui0); - pNetApiBufferFree(ui1); - pNetApiBufferFree(ui1101); - - /* errors handling */ - ok(pNetWkstaUserGetInfo(NULL, 10000, (LPBYTE *)&ui0) == ERROR_INVALID_LEVEL, - "Invalid level\n"); -} - -static void run_wkstatransportenum_tests(void) -{ - LPBYTE bufPtr; - NET_API_STATUS apiReturn; - DWORD entriesRead, totalEntries; - - /* 1st check: is param 2 (level) correct? (only if param 5 passed?) */ - apiReturn = pNetWkstaTransportEnum(NULL, 1, NULL, MAX_PREFERRED_LENGTH, - NULL, &totalEntries, NULL); - ok(apiReturn == ERROR_INVALID_LEVEL || apiReturn == ERROR_INVALID_PARAMETER, - "NetWkstaTransportEnum returned %d\n", apiReturn); - - /* 2nd check: is param 5 passed? (only if level passes?) */ - apiReturn = pNetWkstaTransportEnum(NULL, 0, NULL, MAX_PREFERRED_LENGTH, - NULL, &totalEntries, NULL); - - /* if no network adapter present, bail, the rest of the test will fail */ - if (apiReturn == ERROR_NETWORK_UNREACHABLE) - return; - - ok(apiReturn == STATUS_ACCESS_VIOLATION || apiReturn == ERROR_INVALID_PARAMETER, - "NetWkstaTransportEnum returned %d\n", apiReturn); - - /* 3rd check: is param 3 passed? */ - apiReturn = pNetWkstaTransportEnum(NULL, 0, NULL, MAX_PREFERRED_LENGTH, - NULL, NULL, NULL); - ok(apiReturn == STATUS_ACCESS_VIOLATION || apiReturn == RPC_X_NULL_REF_POINTER || apiReturn == ERROR_INVALID_PARAMETER, - "NetWkstaTransportEnum returned %d\n", apiReturn); - - /* 4th check: is param 6 passed? */ - apiReturn = pNetWkstaTransportEnum(NULL, 0, &bufPtr, MAX_PREFERRED_LENGTH, - &entriesRead, NULL, NULL); - ok(apiReturn == RPC_X_NULL_REF_POINTER, "null pointer\n"); - - /* final check: valid return, actually get data back */ - apiReturn = pNetWkstaTransportEnum(NULL, 0, &bufPtr, MAX_PREFERRED_LENGTH, - &entriesRead, &totalEntries, NULL); - ok(apiReturn == NERR_Success || apiReturn == ERROR_NETWORK_UNREACHABLE, - "NetWkstaTransportEnum returned %d\n", apiReturn); - if (apiReturn == NERR_Success) { - /* WKSTA_TRANSPORT_INFO_0 *transports = (WKSTA_TRANSPORT_INFO_0 *)bufPtr; */ - - ok(bufPtr != NULL, "got data back\n"); - ok(entriesRead > 0, "read at least one transport\n"); - ok(totalEntries > 0, "at least one transport\n"); - pNetApiBufferFree(bufPtr); - } -} - -START_TEST(wksta) -{ - HMODULE hnetapi32=LoadLibraryA("netapi32.dll"); - - pNetApiBufferFree=(void*)GetProcAddress(hnetapi32,"NetApiBufferFree"); - pNetApiBufferSize=(void*)GetProcAddress(hnetapi32,"NetApiBufferSize"); - pNetpGetComputerName=(void*)GetProcAddress(hnetapi32,"NetpGetComputerName"); - pNetWkstaUserGetInfo=(void*)GetProcAddress(hnetapi32,"NetWkstaUserGetInfo"); - pNetWkstaTransportEnum=(void*)GetProcAddress(hnetapi32,"NetWkstaTransportEnum"); - - /* These functions were introduced with NT. It's safe to assume that - * if one is not available, none are. - */ - if (!pNetApiBufferFree) { - skip("Needed functions are not available\n"); - FreeLibrary(hnetapi32); - return; - } - - if (init_wksta_tests()) { - run_get_comp_name_tests(); - run_wkstausergetinfo_tests(); - run_wkstatransportenum_tests(); - } - - FreeLibrary(hnetapi32); -} diff --git a/rostests/winetests/ntdll/atom.c b/rostests/winetests/ntdll/atom.c deleted file mode 100755 index 87ea222a8f7..00000000000 --- a/rostests/winetests/ntdll/atom.c +++ /dev/null @@ -1,479 +0,0 @@ -/* Unit test suite for Ntdll atom API functions - * - * Copyright 2003 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 - * - * NOTES - * We use function pointers here as there is no import library for NTDLL on - * windows. - */ - -#include -#include - -#include "ntstatus.h" -/* Define WIN32_NO_STATUS so MSVC does not give us duplicate macro - * definition errors when we get to winnt.h - */ -#define WIN32_NO_STATUS - -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "winnls.h" -#include "wine/test.h" -#include "winternl.h" - -#ifndef __WINE_WINTERNL_H -typedef unsigned short RTL_ATOM, *PRTL_ATOM; -typedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE; -#endif - -/* Function pointers for ntdll calls */ -static HMODULE hntdll = 0; -static NTSTATUS (WINAPI *pRtlCreateAtomTable)(ULONG,PRTL_ATOM_TABLE); -static NTSTATUS (WINAPI *pRtlDestroyAtomTable)(RTL_ATOM_TABLE); -static NTSTATUS (WINAPI *pRtlEmptyAtomTable)(RTL_ATOM_TABLE,BOOLEAN); -static NTSTATUS (WINAPI *pRtlAddAtomToAtomTable)(RTL_ATOM_TABLE,PCWSTR,PRTL_ATOM); -static NTSTATUS (WINAPI *pRtlDeleteAtomFromAtomTable)(RTL_ATOM_TABLE,RTL_ATOM); -static NTSTATUS (WINAPI *pRtlLookupAtomInAtomTable)(RTL_ATOM_TABLE,PCWSTR,PRTL_ATOM); -static NTSTATUS (WINAPI *pRtlPinAtomInAtomTable)(RTL_ATOM_TABLE,RTL_ATOM); -static NTSTATUS (WINAPI *pRtlQueryAtomInAtomTable)(RTL_ATOM_TABLE,RTL_ATOM,PULONG,PULONG,PWSTR,PULONG); - -static NTSTATUS (WINAPI* pNtAddAtom)(LPCWSTR,ULONG,RTL_ATOM*); -static NTSTATUS (WINAPI* pNtQueryInformationAtom)(RTL_ATOM,DWORD,void*,ULONG,PULONG); - -static const WCHAR EmptyAtom[] = {0}; -static const WCHAR testAtom1[] = {'H','e','l','l','o',' ','W','o','r','l','d',0}; -static const WCHAR testAtom2[] = {'H','e','l','l','o',' ','W','o','r','l','d','2',0}; -static const WCHAR testAtom3[] = {'H','e','l','l','o',' ','W','o','r','l','d','3',0}; - -static const WCHAR testAtom1Cap[] = {'H','E','L','L','O',' ','W','O','R','L','D',0}; -static const WCHAR testAtom1Low[] = {'h','e','l','l','o',' ','w','o','r','l','d',0}; - -static const WCHAR testAtomInt[] = {'#','1','3','2',0}; -static const WCHAR testAtomIntInv[] = {'#','2','3','4','z',0}; -static const WCHAR testAtomOTT[] = {'#','1','2','3',0}; - -static void InitFunctionPtr(void) -{ - hntdll = LoadLibraryA("ntdll.dll"); - ok(hntdll != 0, "Unable to load ntdll.dll\n"); - - if (hntdll) - { - pRtlCreateAtomTable = (void *)GetProcAddress(hntdll, "RtlCreateAtomTable"); - pRtlDestroyAtomTable = (void *)GetProcAddress(hntdll, "RtlDestroyAtomTable"); - pRtlEmptyAtomTable = (void *)GetProcAddress(hntdll, "RtlEmptyAtomTable"); - pRtlAddAtomToAtomTable = (void *)GetProcAddress(hntdll, "RtlAddAtomToAtomTable"); - pRtlDeleteAtomFromAtomTable = (void *)GetProcAddress(hntdll, "RtlDeleteAtomFromAtomTable"); - pRtlLookupAtomInAtomTable = (void *)GetProcAddress(hntdll, "RtlLookupAtomInAtomTable"); - pRtlPinAtomInAtomTable = (void *)GetProcAddress(hntdll, "RtlPinAtomInAtomTable"); - pRtlQueryAtomInAtomTable = (void *)GetProcAddress(hntdll, "RtlQueryAtomInAtomTable"); - - pNtAddAtom = (void *)GetProcAddress(hntdll, "NtAddAtom"); - pNtQueryInformationAtom = (void *)GetProcAddress(hntdll, "NtQueryInformationAtom"); - } -} - -static DWORD WINAPI RtlAtomTestThread(LPVOID Table) -{ - RTL_ATOM_TABLE AtomTable = *(PRTL_ATOM_TABLE)Table; - RTL_ATOM Atom; - NTSTATUS res; - ULONG RefCount = 0, PinCount = 0, Len = 0; - WCHAR Name[64]; - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1, &Atom); - ok(!res, "Unable to find atom from another thread, retval: %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom2, &Atom); - ok(!res, "Unable to lookup pinned atom in table, retval: %x\n", res); - - res = pRtlQueryAtomInAtomTable(AtomTable, Atom, &RefCount, &PinCount, Name, &Len); - ok(res == STATUS_BUFFER_TOO_SMALL, "We got wrong retval: %x\n", res); - - Len = 64; - res = pRtlQueryAtomInAtomTable(AtomTable, Atom, &RefCount, &PinCount, Name, &Len); - ok(!res, "Failed with longenough buffer, retval: %x\n", res); - ok(RefCount == 1, "Refcount was not 1 but %x\n", RefCount); - ok(PinCount == 1, "Pincount was not 1 but %x\n", PinCount); - ok(!lstrcmpW(Name, testAtom2), "We found wrong atom!!\n"); - ok((lstrlenW(testAtom2) * sizeof(WCHAR)) == Len, "Returned wrong length %d\n", Len); - - Len = 64; - res = pRtlQueryAtomInAtomTable(AtomTable, Atom, NULL, NULL, Name, &Len); - ok(!res, "RtlQueryAtomInAtomTable with optional args invalid failed, retval: %x\n", res); - ok(!lstrcmpW(Name, testAtom2), "Found Wrong atom!\n"); - ok((lstrlenW(testAtom2) * sizeof(WCHAR)) == Len, "Returned wrong length %d\n", Len); - - res = pRtlPinAtomInAtomTable(AtomTable, Atom); - ok(!res, "Unable to pin atom in atom table, retval: %x\n", res); - - return 0; -} - -static void test_NtAtom(void) -{ - RTL_ATOM_TABLE AtomTable = NULL; - NTSTATUS res; - RTL_ATOM Atom1, Atom2, Atom3, testEAtom, testAtom; - HANDLE testThread; - ULONG RefCount = 0, PinCount = 0, Len = 0; - WCHAR Name[64]; - - /* If we pass a non-null string to create atom table, then it thinks that we - * have passed it an already allocated atom table */ - res = pRtlCreateAtomTable(0, &AtomTable); - ok(!res, "RtlCreateAtomTable should succeed with an atom table size of 0\n"); - - if (!res) - { - res = pRtlDestroyAtomTable(AtomTable); - ok(!res, "We could create the atom table, but we couldn't destroy it! retval: %x\n", res); - } - - AtomTable = NULL; - res = pRtlCreateAtomTable(37, &AtomTable); - ok(!res, "We're unable to create an atom table with a valid table size retval: %x\n", res); - if (!res) - { - res = pRtlAddAtomToAtomTable(AtomTable, testAtom1, &Atom1); - ok(!res, "We were unable to add a simple atom to the atom table, retval: %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1Cap, &testAtom); - ok(!res, "We were unable to find capital version of the atom, retval: %x\n", res); - ok(Atom1 == testAtom, "Found wrong atom in table when querying capital atom\n"); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1Low, &testAtom); - ok(!res, "Unable to find lowercase version of the atom, retval: %x\n", res); - ok(testAtom == Atom1, "Found wrong atom when querying lowercase atom\n"); - - res = pRtlAddAtomToAtomTable(AtomTable, EmptyAtom, &testEAtom); - ok(res == STATUS_OBJECT_NAME_INVALID, "Got wrong retval, retval: %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1, &testAtom); - ok(!res, "Failed to find totally legitimate atom, retval: %x\n", res); - ok(testAtom == Atom1, "Found wrong atom!\n"); - - res = pRtlAddAtomToAtomTable(AtomTable, testAtom2, &Atom2); - ok(!res, "Unable to add other legitimate atom to table, retval: %x\n", res); - - res = pRtlPinAtomInAtomTable(AtomTable, Atom2); - ok(!res, "Unable to pin atom in atom table, retval: %x\n", res); - - testThread = CreateThread(NULL, 0, RtlAtomTestThread, &AtomTable, 0, NULL); - WaitForSingleObject(testThread, INFINITE); - - Len = 64; - res = pRtlQueryAtomInAtomTable(AtomTable, Atom2, &RefCount, &PinCount, Name, &Len); - ok(!res, "Unable to query atom in atom table, retval: %x\n", res); - ok(RefCount == 1, "RefCount is not 1 but %x\n", RefCount); - ok(PinCount == 1, "PinCount is not 1 but %x\n", PinCount); - ok(!lstrcmpW(Name, testAtom2), "We found wrong atom\n"); - ok((lstrlenW(testAtom2) * sizeof(WCHAR)) == Len, "Returned wrong length %d\n", Len); - - res = pRtlEmptyAtomTable(AtomTable, FALSE); - ok(!res, "Unable to empty atom table, retval %x\n", res); - - Len = 64; - res = pRtlQueryAtomInAtomTable(AtomTable, Atom2, &RefCount, &PinCount, Name, &Len); - ok(!res, "It seems RtlEmptyAtomTable deleted our pinned atom eaven though we asked it not to, retval: %x\n", res); - ok(RefCount == 1, "RefCount is not 1 but %x\n", RefCount); - ok(PinCount == 1, "PinCount is not 1 but %x\n", PinCount); - ok(!lstrcmpW(Name, testAtom2), "We found wrong atom\n"); - ok((lstrlenW(testAtom2) * sizeof(WCHAR)) == Len, "Returned wrong length %d\n", Len); - - Len = 8; - Name[0] = Name[1] = Name[2] = Name[3] = Name[4] = 0x1337; - res = pRtlQueryAtomInAtomTable(AtomTable, Atom2, NULL, NULL, Name, &Len); - ok(!res, "query atom %x\n", res); - ok(Len == 6, "wrong length %u\n", Len); - ok(!memcmp(Name, testAtom2, Len), "wrong atom string\n"); - ok(!Name[3], "wrong string termination\n"); - ok(Name[4] == 0x1337, "buffer overwrite\n"); - - Len = lstrlenW(testAtom2) * sizeof(WCHAR); - memset(Name, '.', sizeof(Name)); - res = pRtlQueryAtomInAtomTable( AtomTable, Atom2, NULL, NULL, Name, &Len ); - ok(!res, "query atom %x\n", res); - ok(Len == (lstrlenW(testAtom2) - 1) * sizeof(WCHAR), "wrong length %u\n", Len); - ok(!memcmp(testAtom2, Name, (lstrlenW(testAtom2) - 1) * sizeof(WCHAR)), "wrong atom name\n"); - ok(Name[lstrlenW(testAtom2) - 1] == '\0', "wrong char\n"); - ok(Name[lstrlenW(testAtom2)] == ('.' << 8) + '.', "wrong char\n"); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom2, &testAtom); - ok(!res, "We can't find our pinned atom!! retval: %x\n", res); - ok(testAtom == Atom2, "We found wrong atom!!!\n"); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1, &testAtom); - ok(res == STATUS_OBJECT_NAME_NOT_FOUND, "We found the atom in our table eaven though we asked RtlEmptyAtomTable to remove it, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, testAtom3, &Atom3); - ok(!res, "Unable to add atom to table, retval: %x\n", res); - - res = pRtlEmptyAtomTable(AtomTable, TRUE); - ok(!res, "Unable to empty atom table, retval: %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom2, &testAtom); - ok(res == STATUS_OBJECT_NAME_NOT_FOUND, "The pinned atom should be removed, retval: %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom3, &testAtom); - ok(res == STATUS_OBJECT_NAME_NOT_FOUND, "Non pinned atom should also be removed, retval: %x\n", res); - - res = pRtlDestroyAtomTable(AtomTable); - ok(!res, "Can't destroy atom table, retval: %x\n", res); - } - - AtomTable = NULL; - res = pRtlCreateAtomTable(37, &AtomTable); - ok(!res, "Unable to create atom table, retval: %x\n", res); - - if (!res) - { - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1, &testAtom); - ok(res == STATUS_OBJECT_NAME_NOT_FOUND, "Didn't get expected retval with querying an empty atom table, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, testAtom1, &Atom1); - ok(!res, "Unable to add atom to atom table, retval %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1, &testAtom); - ok(!res, "Can't find previously added atom in table, retval: %x\n", res); - ok(testAtom == Atom1, "Found wrong atom! retval: %x\n", res); - - res = pRtlDeleteAtomFromAtomTable(AtomTable, Atom1); - ok(!res, "Unable to delete atom from table, retval: %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1, &testAtom); - ok(res == STATUS_OBJECT_NAME_NOT_FOUND, "Able to find previously deleted atom in table, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, testAtom1, &Atom1); - ok(!res, "Unable to add atom to atom table, retval: %x\n", res); - - Len = 0; - res = pRtlQueryAtomInAtomTable(AtomTable, Atom1, NULL, NULL, Name, &Len); - ok(res == STATUS_BUFFER_TOO_SMALL, "Got wrong retval, retval: %x\n", res); - ok((lstrlenW(testAtom1) * sizeof(WCHAR)) == Len, "Got wrong length %x\n", Len); - - res = pRtlPinAtomInAtomTable(AtomTable, Atom1); - ok(!res, "Unable to pin atom in atom table, retval: %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1, &testAtom); - ok(!res, "Unable to find atom in atom table, retval: %x\n", res); - ok(testAtom == Atom1, "Wrong atom found\n"); - - res = pRtlDeleteAtomFromAtomTable(AtomTable, Atom1); - ok(res == STATUS_WAS_LOCKED, "Unable to delete atom from table, retval: %x\n", res); - - res = pRtlLookupAtomInAtomTable(AtomTable, testAtom1, &testAtom); - ok(!res, "Able to find deleted atom in table\n"); - - res = pRtlDestroyAtomTable(AtomTable); - ok(!res, "Unable to destroy atom table\n"); - } -} - -/* Test Adding integer atoms to atom table */ -static void test_NtIntAtom(void) -{ - NTSTATUS res; - RTL_ATOM_TABLE AtomTable; - RTL_ATOM testAtom; - ULONG RefCount = 0, PinCount = 0; - int i; - WCHAR Name[64]; - ULONG Len; - - AtomTable = NULL; - res = pRtlCreateAtomTable(37, &AtomTable); - ok(!res, "Unable to create atom table, %x\n", res); - - if (!res) - { - /* According to the kernel32 functions, integer atoms are only allowed from - * 0x0001 to 0xbfff and not 0xc000 to 0xffff, which is correct */ - res = pRtlAddAtomToAtomTable(AtomTable, (PWSTR)0, &testAtom); - ok(res == STATUS_INVALID_PARAMETER, "Didn't get expected result from adding 0 int atom, retval: %x\n", res); - for (i = 1; i <= 0xbfff; i++) - { - res = pRtlAddAtomToAtomTable(AtomTable, (PWSTR)i, &testAtom); - ok(!res, "Unable to add valid integer atom %i, retval: %x\n", i, res); - } - - for (i = 1; i <= 0xbfff; i++) - { - res = pRtlLookupAtomInAtomTable(AtomTable, (PWSTR)i, &testAtom); - ok(!res, "Unable to find int atom %i, retval: %x\n", i, res); - if (!res) - { - res = pRtlPinAtomInAtomTable(AtomTable, testAtom); - ok(!res, "Unable to pin int atom %i, retval: %x\n", i, res); - } - } - - for (i = 0xc000; i <= 0xffff; i++) - { - res = pRtlAddAtomToAtomTable(AtomTable, (PWSTR)i, &testAtom); - ok(res, "Able to illeageal integer atom %i, retval: %x\n", i, res); - } - - res = pRtlDestroyAtomTable(AtomTable); - ok(!res, "Unable to destroy atom table, retval: %x\n", res); - } - - AtomTable = NULL; - res = pRtlCreateAtomTable(37, &AtomTable); - ok(!res, "Unable to create atom table, %x\n", res); - if (!res) - { - res = pRtlLookupAtomInAtomTable(AtomTable, (PWSTR)123, &testAtom); - ok(!res, "Unable to query atom in atom table, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, testAtomInt, &testAtom); - ok(!res, "Unable to add int atom to table, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, testAtomIntInv, &testAtom); - ok(!res, "Unable to add int atom to table, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, (PWSTR)123, &testAtom); - ok(!res, "Unable to add int atom to table, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, (PWSTR)123, &testAtom); - ok(!res, "Unable to re-add int atom to table, retval: %x\n", res); - - Len = 64; - res = pRtlQueryAtomInAtomTable(AtomTable, testAtom, &RefCount, &PinCount, Name, &Len); - ok(!res, "Unable to query atom in atom table, retval: %x\n", res); - ok(PinCount == 1, "Expected pincount 1 but got %x\n", PinCount); - ok(RefCount == 1, "Expected refcount 1 but got %x\n", RefCount); - ok(!lstrcmpW(testAtomOTT, Name), "Got wrong atom name\n"); - ok((lstrlenW(testAtomOTT) * sizeof(WCHAR)) == Len, "Got wrong len %d\n", Len); - - res = pRtlPinAtomInAtomTable(AtomTable, testAtom); - ok(!res, "Unable to pin int atom, retval: %x\n", res); - - res = pRtlPinAtomInAtomTable(AtomTable, testAtom); - ok(!res, "Unable to pin int atom, retval: %x\n", res); - - res = pRtlQueryAtomInAtomTable(AtomTable, testAtom, &RefCount, &PinCount, NULL, NULL); - ok(!res, "Unable to query atom in atom table, retval: %x\n", res); - ok(PinCount == 1, "Expected pincount 1 but got %x\n", PinCount); - ok(RefCount == 1, "Expected refcount 1 but got %x\n", RefCount); - - res = pRtlDestroyAtomTable(AtomTable); - ok(!res, "Unable to destroy atom table, retval: %x\n", res); - } -} - -/* Tests to see how the pincount and refcount actually works */ -static void test_NtRefPinAtom(void) -{ - RTL_ATOM_TABLE AtomTable; - RTL_ATOM Atom; - ULONG PinCount = 0, RefCount = 0; - NTSTATUS res; - - AtomTable = NULL; - res = pRtlCreateAtomTable(37, &AtomTable); - ok(!res, "Unable to create atom table, %x\n", res); - - if (!res) - { - res = pRtlAddAtomToAtomTable(AtomTable, testAtom1, &Atom); - ok(!res, "Unable to add our atom to the atom table, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, testAtom1, &Atom); - ok(!res, "Unable to add our atom to the atom table, retval: %x\n", res); - - res = pRtlAddAtomToAtomTable(AtomTable, testAtom1, &Atom); - ok(!res, "Unable to add our atom to the atom table, retval: %x\n", res); - - res = pRtlQueryAtomInAtomTable(AtomTable, Atom, &RefCount, &PinCount, NULL, NULL); - ok(!res, "Unable to query atom in atom table, retval: %x\n", res); - ok(PinCount == 0, "Expected pincount 0 but got %x\n", PinCount); - ok(RefCount == 3, "Expected refcount 3 but got %x\n", RefCount); - - res = pRtlPinAtomInAtomTable(AtomTable, Atom); - ok(!res, "Unable to pin atom in atom table, retval: %x\n", res); - - res = pRtlPinAtomInAtomTable(AtomTable, Atom); - ok(!res, "Unable to pin atom in atom table, retval: %x\n", res); - - res = pRtlPinAtomInAtomTable(AtomTable, Atom); - ok(!res, "Unable to pin atom in atom table, retval: %x\n", res); - - res = pRtlQueryAtomInAtomTable(AtomTable, Atom, &RefCount, &PinCount, NULL, NULL); - ok(!res, "Unable to query atom in atom table, retval: %x\n", res); - ok(PinCount == 1, "Expected pincount 1 but got %x\n", PinCount); - ok(RefCount == 3, "Expected refcount 3 but got %x\n", RefCount); - - res = pRtlDestroyAtomTable(AtomTable); - ok(!res, "Unable to destroy atom table, retval: %x\n", res); - } -} - -static void test_Global(void) -{ - NTSTATUS res; - RTL_ATOM atom; - char ptr[sizeof(ATOM_BASIC_INFORMATION) + 255 * sizeof(WCHAR)]; - ATOM_BASIC_INFORMATION* abi = (ATOM_BASIC_INFORMATION*)ptr; - ULONG ptr_size = sizeof(ATOM_BASIC_INFORMATION) + 255 * sizeof(WCHAR); - - res = pNtAddAtom(testAtom1, lstrlenW(testAtom1) * sizeof(WCHAR), &atom); - ok(!res, "Added atom (%x)\n", res); - - memset(abi->Name, 0xcc, 255 * sizeof(WCHAR)); - res = pNtQueryInformationAtom( atom, AtomBasicInformation, (void*)ptr, ptr_size, NULL ); - ok(!res, "atom lookup\n"); - ok(!lstrcmpW(abi->Name, testAtom1), "ok strings\n"); - ok(abi->NameLength == lstrlenW(testAtom1) * sizeof(WCHAR), "wrong string length\n"); - ok(abi->Name[lstrlenW(testAtom1)] == 0, "wrong string termination %x\n", abi->Name[lstrlenW(testAtom1)]); - ok(abi->Name[lstrlenW(testAtom1) + 1] == 0xcccc, "buffer overwrite %x\n", abi->Name[lstrlenW(testAtom1) + 1]); - - ptr_size = sizeof(ATOM_BASIC_INFORMATION); - res = pNtQueryInformationAtom( atom, AtomBasicInformation, (void*)ptr, ptr_size, NULL ); - ok(res == STATUS_BUFFER_TOO_SMALL, "wrong return status (%x)\n", res); - ok(abi->NameLength == lstrlenW(testAtom1) * sizeof(WCHAR), "ok string length\n"); - - memset(abi->Name, 0xcc, lstrlenW(testAtom1) * sizeof(WCHAR)); - ptr_size = sizeof(ATOM_BASIC_INFORMATION) + lstrlenW(testAtom1) * sizeof(WCHAR); - res = pNtQueryInformationAtom( atom, AtomBasicInformation, (void*)ptr, ptr_size, NULL ); - ok(!res, "atom lookup %x\n", res); - ok(!lstrcmpW(abi->Name, testAtom1), "strings don't match\n"); - ok(abi->NameLength == lstrlenW(testAtom1) * sizeof(WCHAR), "wrong string length\n"); - ok(abi->Name[lstrlenW(testAtom1)] == 0, "buffer overwrite %x\n", abi->Name[lstrlenW(testAtom1)]); - ok(abi->Name[lstrlenW(testAtom1) + 1] == 0xcccc, "buffer overwrite %x\n", abi->Name[lstrlenW(testAtom1) + 1]); - - ptr_size = sizeof(ATOM_BASIC_INFORMATION) + 4 * sizeof(WCHAR); - abi->Name[0] = abi->Name[1] = abi->Name[2] = abi->Name[3] = '\0'; - res = pNtQueryInformationAtom( atom, AtomBasicInformation, (void*)ptr, ptr_size, NULL ); - ok(!res, "couldn't find atom\n"); - ok(abi->NameLength == 8, "wrong string length %u\n", abi->NameLength); - ok(!memcmp(abi->Name, testAtom1, 8), "strings don't match\n"); -} - -START_TEST(atom) -{ - InitFunctionPtr(); - if (pRtlCreateAtomTable) - { - test_NtAtom(); - test_NtIntAtom(); - test_NtRefPinAtom(); - test_Global(); - } -} diff --git a/rostests/winetests/ntdll/change.c b/rostests/winetests/ntdll/change.c deleted file mode 100644 index d3ba58fc1c1..00000000000 --- a/rostests/winetests/ntdll/change.c +++ /dev/null @@ -1,338 +0,0 @@ -/* - * File change notification tests - * - * Copyright 2006 Mike McCormack 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 -#define WIN32_NO_STATUS -#include -#include -#include -#include -#include -#include "wine/test.h" - -typedef NTSTATUS (WINAPI *fnNtNotifyChangeDirectoryFile)( - HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID, - PIO_STATUS_BLOCK,PVOID,ULONG,ULONG,BOOLEAN); -fnNtNotifyChangeDirectoryFile pNtNotifyChangeDirectoryFile; - -typedef NTSTATUS (WINAPI *fnNtCancelIoFile)(HANDLE,PIO_STATUS_BLOCK); -fnNtCancelIoFile pNtCancelIoFile; - - -static void test_ntncdf(void) -{ - NTSTATUS r; - HANDLE hdir, hEvent; - char buffer[0x1000]; - DWORD fflags, filter = 0; - IO_STATUS_BLOCK iosb; - WCHAR path[MAX_PATH], subdir[MAX_PATH]; - static const WCHAR szBoo[] = { '\\','b','o','o',0 }; - static const WCHAR szHoo[] = { '\\','h','o','o',0 }; - PFILE_NOTIFY_INFORMATION pfni; - - r = GetTempPathW( MAX_PATH, path ); - ok( r != 0, "temp path failed\n"); - if (!r) - return; - - lstrcatW( path, szBoo ); - lstrcpyW( subdir, path ); - lstrcatW( subdir, szHoo ); - - RemoveDirectoryW( subdir ); - RemoveDirectoryW( path ); - - r = CreateDirectoryW(path, NULL); - ok( r == TRUE, "failed to create directory\n"); - - r = pNtNotifyChangeDirectoryFile(NULL,NULL,NULL,NULL,NULL,NULL,0,0,0); - ok(r==STATUS_ACCESS_VIOLATION, "should return access violation\n"); - - fflags = FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED; - hdir = CreateFileW(path, GENERIC_READ|SYNCHRONIZE, FILE_SHARE_READ, NULL, - OPEN_EXISTING, fflags, NULL); - ok( hdir != INVALID_HANDLE_VALUE, "failed to open directory\n"); - - hEvent = CreateEvent( NULL, 0, 0, NULL ); - - r = pNtNotifyChangeDirectoryFile(hdir,NULL,NULL,NULL,&iosb,NULL,0,0,0); - ok(r==STATUS_INVALID_PARAMETER, "should return invalid parameter\n"); - - r = pNtNotifyChangeDirectoryFile(hdir,hEvent,NULL,NULL,&iosb,NULL,0,0,0); - ok(r==STATUS_INVALID_PARAMETER, "should return invalid parameter\n"); - - filter = FILE_NOTIFY_CHANGE_FILE_NAME; - filter |= FILE_NOTIFY_CHANGE_DIR_NAME; - filter |= FILE_NOTIFY_CHANGE_ATTRIBUTES; - filter |= FILE_NOTIFY_CHANGE_SIZE; - filter |= FILE_NOTIFY_CHANGE_LAST_WRITE; - filter |= FILE_NOTIFY_CHANGE_LAST_ACCESS; - filter |= FILE_NOTIFY_CHANGE_CREATION; - filter |= FILE_NOTIFY_CHANGE_SECURITY; - - U(iosb).Status = 1; - iosb.Information = 1; - r = pNtNotifyChangeDirectoryFile(hdir,hEvent,NULL,NULL,&iosb,buffer,sizeof buffer,-1,0); - ok(r==STATUS_INVALID_PARAMETER, "should return invalid parameter\n"); - - ok( U(iosb).Status == 1, "information wrong\n"); - ok( iosb.Information == 1, "information wrong\n"); - - U(iosb).Status = 1; - iosb.Information = 0; - r = pNtNotifyChangeDirectoryFile(hdir,hEvent,NULL,NULL,&iosb,buffer,sizeof buffer,filter,0); - ok(r==STATUS_PENDING, "should return status pending\n"); - - r = WaitForSingleObject( hEvent, 0 ); - ok( r == STATUS_TIMEOUT, "should timeout\n" ); - - r = WaitForSingleObject( hdir, 0 ); - ok( r == STATUS_TIMEOUT, "should timeout\n" ); - - r = CreateDirectoryW( subdir, NULL ); - ok( r == TRUE, "failed to create directory\n"); - - r = WaitForSingleObject( hdir, 0 ); - ok( r == STATUS_TIMEOUT, "should timeout\n" ); - - r = WaitForSingleObject( hEvent, 0 ); - ok( r == WAIT_OBJECT_0, "event should be ready\n" ); - - ok( U(iosb).Status == STATUS_SUCCESS, "information wrong\n"); - ok( iosb.Information == 0x12, "information wrong\n"); - - pfni = (PFILE_NOTIFY_INFORMATION) buffer; - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - ok( pfni->Action == FILE_ACTION_ADDED, "action wrong\n" ); - ok( pfni->FileNameLength == 6, "len wrong\n" ); - ok( !memcmp(pfni->FileName,&szHoo[1],6), "name wrong\n" ); - - r = pNtNotifyChangeDirectoryFile(hdir,0,NULL,NULL,&iosb,buffer,sizeof buffer,0,0); - ok(r==STATUS_INVALID_PARAMETER, "should return invalid parameter\n"); - - r = pNtNotifyChangeDirectoryFile(hdir,hEvent,NULL,NULL,&iosb,buffer,sizeof buffer,0,0); - ok(r==STATUS_INVALID_PARAMETER, "should return invalid parameter\n"); - - filter = FILE_NOTIFY_CHANGE_SIZE; - - U(iosb).Status = 1; - iosb.Information = 1; - r = pNtNotifyChangeDirectoryFile(hdir,0,NULL,NULL,&iosb,NULL,0,filter,0); - ok(r==STATUS_PENDING, "should status pending\n"); - - ok( U(iosb).Status == 1, "information wrong\n"); - ok( iosb.Information == 1, "information wrong\n"); - - r = WaitForSingleObject( hdir, 0 ); - ok( r == STATUS_TIMEOUT, "should timeout\n" ); - - r = RemoveDirectoryW( subdir ); - ok( r == TRUE, "failed to remove directory\n"); - - r = WaitForSingleObject( hdir, 100 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - r = WaitForSingleObject( hdir, 100 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok( U(iosb).Status == STATUS_NOTIFY_ENUM_DIR, "information wrong\n"); - ok( iosb.Information == 0, "information wrong\n"); - - CloseHandle(hdir); - CloseHandle(hEvent); - - r = RemoveDirectoryW( path ); - ok( r == TRUE, "failed to remove directory\n"); -} - - -static void test_ntncdf_async(void) -{ - NTSTATUS r; - HANDLE hdir, hEvent; - char buffer[0x1000]; - DWORD fflags, filter = 0; - IO_STATUS_BLOCK iosb, iosb2; - WCHAR path[MAX_PATH], subdir[MAX_PATH]; - static const WCHAR szBoo[] = { '\\','b','o','o',0 }; - static const WCHAR szHoo[] = { '\\','h','o','o',0 }; - PFILE_NOTIFY_INFORMATION pfni; - - r = GetTempPathW( MAX_PATH, path ); - ok( r != 0, "temp path failed\n"); - if (!r) - return; - - lstrcatW( path, szBoo ); - lstrcpyW( subdir, path ); - lstrcatW( subdir, szHoo ); - - RemoveDirectoryW( subdir ); - RemoveDirectoryW( path ); - - r = CreateDirectoryW(path, NULL); - ok( r == TRUE, "failed to create directory\n"); - - r = pNtNotifyChangeDirectoryFile(NULL,NULL,NULL,NULL,NULL,NULL,0,0,0); - ok(r==STATUS_ACCESS_VIOLATION, "should return access violation\n"); - - fflags = FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED; - hdir = CreateFileW(path, GENERIC_READ|SYNCHRONIZE, FILE_SHARE_READ, NULL, - OPEN_EXISTING, fflags, NULL); - ok( hdir != INVALID_HANDLE_VALUE, "failed to open directory\n"); - - hEvent = CreateEvent( NULL, 0, 0, NULL ); - - filter = FILE_NOTIFY_CHANGE_FILE_NAME; - filter |= FILE_NOTIFY_CHANGE_DIR_NAME; - filter |= FILE_NOTIFY_CHANGE_ATTRIBUTES; - filter |= FILE_NOTIFY_CHANGE_SIZE; - filter |= FILE_NOTIFY_CHANGE_LAST_WRITE; - filter |= FILE_NOTIFY_CHANGE_LAST_ACCESS; - filter |= FILE_NOTIFY_CHANGE_CREATION; - filter |= FILE_NOTIFY_CHANGE_SECURITY; - - - U(iosb).Status = 0x01234567; - iosb.Information = 0x12345678; - r = pNtNotifyChangeDirectoryFile(hdir,0,NULL,NULL,&iosb,buffer,sizeof buffer,filter,0); - ok(r==STATUS_PENDING, "should status pending\n"); - ok(U(iosb).Status == 0x01234567, "status set too soon\n"); - ok(iosb.Information == 0x12345678, "info set too soon\n"); - - r = CreateDirectoryW( subdir, NULL ); - ok( r == TRUE, "failed to create directory\n"); - - r = WaitForSingleObject( hdir, 100 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok(U(iosb).Status == STATUS_SUCCESS, "status not successful\n"); - ok(iosb.Information == 0x12, "info not set\n"); - - pfni = (PFILE_NOTIFY_INFORMATION) buffer; - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - ok( pfni->Action == FILE_ACTION_ADDED, "action wrong\n" ); - ok( pfni->FileNameLength == 6, "len wrong\n" ); - ok( !memcmp(pfni->FileName,&szHoo[1],6), "name wrong\n" ); - - r = pNtNotifyChangeDirectoryFile(hdir,0,NULL,NULL,&iosb,buffer,sizeof buffer,filter,0); - ok(r==STATUS_PENDING, "should status pending\n"); - - r = RemoveDirectoryW( subdir ); - ok( r == TRUE, "failed to remove directory\n"); - - r = WaitForSingleObject( hdir, 0 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok(U(iosb).Status == STATUS_SUCCESS, "status not successful\n"); - ok(iosb.Information == 0x12, "info not set\n"); - - ok( pfni->NextEntryOffset == 0, "offset wrong\n" ); - ok( pfni->Action == FILE_ACTION_REMOVED, "action wrong\n" ); - ok( pfni->FileNameLength == 6, "len wrong\n" ); - ok( !memcmp(pfni->FileName,&szHoo[1],6), "name wrong\n" ); - - /* check APCs */ - U(iosb).Status = 0; - iosb.Information = 0; - - r = pNtNotifyChangeDirectoryFile(hdir,0,NULL,NULL,&iosb,NULL,0,filter,0); - ok(r==STATUS_PENDING, "should status pending\n"); - - r = CreateDirectoryW( subdir, NULL ); - ok( r == TRUE, "failed to create directory\n"); - - r = WaitForSingleObject( hdir, 0 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok(U(iosb).Status == STATUS_NOTIFY_ENUM_DIR, "status not successful\n"); - ok(iosb.Information == 0, "info not set\n"); - - U(iosb).Status = 0; - iosb.Information = 0; - - r = pNtNotifyChangeDirectoryFile(hdir,hEvent,NULL,NULL,&iosb,buffer,sizeof buffer,filter,0); - ok(r==STATUS_PENDING, "should status pending\n"); - - r = RemoveDirectoryW( subdir ); - ok( r == TRUE, "failed to remove directory\n"); - - r = WaitForSingleObject( hEvent, 0 ); - ok( r == WAIT_OBJECT_0, "should be ready\n" ); - - ok(U(iosb).Status == STATUS_SUCCESS, "status not successful\n"); - ok(iosb.Information == 0x12, "info not set\n"); - - - U(iosb).Status = 0x01234567; - iosb.Information = 0x12345678; - r = pNtNotifyChangeDirectoryFile(hdir,0,NULL,NULL,&iosb,buffer,sizeof buffer,filter,0); - ok(r==STATUS_PENDING, "should status pending\n"); - - U(iosb2).Status = 0x01234567; - iosb2.Information = 0x12345678; - r = pNtNotifyChangeDirectoryFile(hdir,0,NULL,NULL,&iosb2,buffer,sizeof buffer,filter,0); - ok(r==STATUS_PENDING, "should status pending\n"); - - ok(U(iosb).Status == 0x01234567, "status set too soon\n"); - ok(iosb.Information == 0x12345678, "info set too soon\n"); - - todo_wine { - r = pNtCancelIoFile(hdir, &iosb); - ok( r == STATUS_SUCCESS, "cancel failed\n"); - - CloseHandle(hdir); - - ok(U(iosb).Status == STATUS_SUCCESS, "status wrong\n"); - ok(U(iosb2).Status == STATUS_CANCELLED, "status wrong\n"); - } - ok(iosb.Information == 0, "info wrong\n"); - ok(iosb2.Information == 0, "info wrong\n"); - - r = RemoveDirectoryW( path ); - ok( r == TRUE, "failed to remove directory\n"); - - CloseHandle(hEvent); -} - -START_TEST(change) -{ - HMODULE hntdll = GetModuleHandle("ntdll"); - if (!hntdll) - { - skip("not running on NT, skipping test\n"); - return; - } - - pNtNotifyChangeDirectoryFile = (fnNtNotifyChangeDirectoryFile) - GetProcAddress(hntdll, "NtNotifyChangeDirectoryFile"); - pNtCancelIoFile = (fnNtCancelIoFile) - GetProcAddress(hntdll, "NtCancelIoFile"); - - if (!pNtNotifyChangeDirectoryFile || !pNtCancelIoFile) - { - skip("missing functions, skipping test\n"); - return; - } - - test_ntncdf(); - test_ntncdf_async(); -} diff --git a/rostests/winetests/ntdll/env.c b/rostests/winetests/ntdll/env.c deleted file mode 100755 index 3363e73484e..00000000000 --- a/rostests/winetests/ntdll/env.c +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Unit test suite for ntdll path functions - * - * Copyright 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 - */ - -#include - -#include "ntdll_test.h" - -static NTSTATUS (WINAPI *pRtlMultiByteToUnicodeN)( LPWSTR dst, DWORD dstlen, LPDWORD reslen, - LPCSTR src, DWORD srclen ); -static NTSTATUS (WINAPI *pRtlCreateEnvironment)(BOOLEAN, PWSTR*); -static NTSTATUS (WINAPI *pRtlDestroyEnvironment)(PWSTR); -static NTSTATUS (WINAPI *pRtlQueryEnvironmentVariable_U)(PWSTR, PUNICODE_STRING, PUNICODE_STRING); -static void (WINAPI *pRtlSetCurrentEnvironment)(PWSTR, PWSTR*); -static NTSTATUS (WINAPI *pRtlSetEnvironmentVariable)(PWSTR*, PUNICODE_STRING, PUNICODE_STRING); -static NTSTATUS (WINAPI *pRtlExpandEnvironmentStrings_U)(LPWSTR, PUNICODE_STRING, PUNICODE_STRING, PULONG); - -static WCHAR small_env[] = {'f','o','o','=','t','o','t','o',0, - 'f','o','=','t','i','t','i',0, - 'f','o','o','o','=','t','u','t','u',0, - 's','r','=','a','n','=','o','u','o',0, - 'g','=','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',0, - '=','o','O','H','=','I','I','I',0, - 'n','u','l','=',0, - 0}; - -static void testQuery(void) -{ - struct test - { - const char *var; - int len; - NTSTATUS status; - const char *val; - }; - - static const struct test tests[] = - { - {"foo", 256, STATUS_SUCCESS, "toto"}, - {"FoO", 256, STATUS_SUCCESS, "toto"}, - {"foo=", 256, STATUS_VARIABLE_NOT_FOUND, NULL}, - {"foo ", 256, STATUS_VARIABLE_NOT_FOUND, NULL}, - {"foo", 1, STATUS_BUFFER_TOO_SMALL, "toto"}, - {"foo", 3, STATUS_BUFFER_TOO_SMALL, "toto"}, - {"foo", 4, STATUS_SUCCESS, "toto"}, - {"fooo", 256, STATUS_SUCCESS, "tutu"}, - {"f", 256, STATUS_VARIABLE_NOT_FOUND, NULL}, - {"g", 256, STATUS_SUCCESS, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" -"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}, - {"sr=an", 256, STATUS_VARIABLE_NOT_FOUND, NULL}, - {"sr", 256, STATUS_SUCCESS, "an=ouo"}, - {"=oOH", 256, STATUS_SUCCESS, "III"}, - {"", 256, STATUS_VARIABLE_NOT_FOUND, NULL}, - {"nul", 256, STATUS_SUCCESS, ""}, - {NULL, 0, 0, NULL} - }; - - WCHAR bn[257]; - WCHAR bv[257]; - UNICODE_STRING name; - UNICODE_STRING value; - const struct test* test; - NTSTATUS nts; - - for (test = tests; test->var; test++) - { - name.Length = strlen(test->var) * 2; - name.MaximumLength = name.Length + 2; - name.Buffer = bn; - value.Length = 0; - value.MaximumLength = test->len * 2; - value.Buffer = bv; - bv[test->len] = '@'; - - pRtlMultiByteToUnicodeN( bn, sizeof(bn), NULL, test->var, strlen(test->var)+1 ); - nts = pRtlQueryEnvironmentVariable_U(small_env, &name, &value); - ok( nts == test->status, "[%d]: Wrong status for '%s', expecting %x got %x\n", - test - tests, test->var, test->status, nts ); - if (nts == test->status) switch (nts) - { - case STATUS_SUCCESS: - pRtlMultiByteToUnicodeN( bn, sizeof(bn), NULL, test->val, strlen(test->val)+1 ); - ok( value.Length == strlen(test->val) * sizeof(WCHAR), "Wrong length %d for %s\n", - value.Length, test->var ); - ok((value.Length == strlen(test->val) * sizeof(WCHAR) && memcmp(bv, bn, test->len*sizeof(WCHAR)) == 0) || - lstrcmpW(bv, bn) == 0, - "Wrong result for %s/%d\n", test->var, test->len); - ok(bv[test->len] == '@', "Writing too far away in the buffer for %s/%d\n", test->var, test->len); - break; - case STATUS_BUFFER_TOO_SMALL: - ok( value.Length == strlen(test->val) * sizeof(WCHAR), - "Wrong returned length %d (too small buffer) for %s\n", value.Length, test->var ); - break; - } - } -} - -static void testSetHelper(LPWSTR* env, const char* var, const char* val, NTSTATUS ret) -{ - WCHAR bvar[256], bval1[256], bval2[256]; - UNICODE_STRING uvar; - UNICODE_STRING uval; - NTSTATUS nts; - - uvar.Length = strlen(var) * sizeof(WCHAR); - uvar.MaximumLength = uvar.Length + sizeof(WCHAR); - uvar.Buffer = bvar; - pRtlMultiByteToUnicodeN( bvar, sizeof(bvar), NULL, var, strlen(var)+1 ); - if (val) - { - uval.Length = strlen(val) * sizeof(WCHAR); - uval.MaximumLength = uval.Length + sizeof(WCHAR); - uval.Buffer = bval1; - pRtlMultiByteToUnicodeN( bval1, sizeof(bval1), NULL, val, strlen(val)+1 ); - } - nts = pRtlSetEnvironmentVariable(env, &uvar, val ? &uval : NULL); - ok(nts == ret, "Setting var %s=%s (%x/%x)\n", var, val, nts, ret); - if (nts == STATUS_SUCCESS) - { - uval.Length = 0; - uval.MaximumLength = sizeof(bval2); - uval.Buffer = bval2; - nts = pRtlQueryEnvironmentVariable_U(*env, &uvar, &uval); - switch (nts) - { - case STATUS_SUCCESS: - ok(lstrcmpW(bval1, bval2) == 0, "Cannot get value written to environment\n"); - break; - case STATUS_VARIABLE_NOT_FOUND: - ok(val == NULL, "Couldn't find variable, but didn't delete it. val = %s\n", val); - break; - default: - ok(0, "Wrong ret %u for %s\n", nts, var); - break; - } - } -} - -static void testSet(void) -{ - LPWSTR env; - char tmp[16]; - int i; - - ok(pRtlCreateEnvironment(FALSE, &env) == STATUS_SUCCESS, "Creating environment\n"); - memmove(env, small_env, sizeof(small_env)); - - testSetHelper(&env, "cat", "dog", STATUS_SUCCESS); - testSetHelper(&env, "cat", "horse", STATUS_SUCCESS); - testSetHelper(&env, "cat", "zz", STATUS_SUCCESS); - testSetHelper(&env, "cat", NULL, STATUS_SUCCESS); - testSetHelper(&env, "cat", NULL, STATUS_VARIABLE_NOT_FOUND); - testSetHelper(&env, "foo", "meouw", STATUS_SUCCESS); - testSetHelper(&env, "me=too", "also", STATUS_INVALID_PARAMETER); - testSetHelper(&env, "me", "too=also", STATUS_SUCCESS); - testSetHelper(&env, "=too", "also", STATUS_SUCCESS); - testSetHelper(&env, "=", "also", STATUS_SUCCESS); - - for (i = 0; i < 128; i++) - { - sprintf(tmp, "zork%03d", i); - testSetHelper(&env, tmp, "is alive", STATUS_SUCCESS); - } - - for (i = 0; i < 128; i++) - { - sprintf(tmp, "zork%03d", i); - testSetHelper(&env, tmp, NULL, STATUS_SUCCESS); - } - testSetHelper(&env, "fOo", NULL, STATUS_SUCCESS); - - ok(pRtlDestroyEnvironment(env) == STATUS_SUCCESS, "Destroying environment\n"); -} - -static void testExpand(void) -{ - static const struct test - { - const char *src; - const char *dst; - } tests[] = - { - {"hello%foo%world", "hellototoworld"}, - {"hello%=oOH%world", "helloIIIworld"}, - {"hello%foo", "hello%foo"}, - {"hello%bar%world", "hello%bar%world"}, - /* - * {"hello%foo%world%=oOH%eeck", "hellototoworldIIIeeck"}, - * Interestingly enough, with a 8 WCHAR buffers, we get on 2k: - * helloIII - * so it seems like strings overflowing the buffer are written - * (truncated) but the write cursor is not advanced :-/ - */ - {NULL, NULL} - }; - - const struct test* test; - NTSTATUS nts; - UNICODE_STRING us_src, us_dst; - WCHAR src[256], dst[256], rst[256]; - ULONG ul; - - for (test = tests; test->src; test++) - { - pRtlMultiByteToUnicodeN(src, sizeof(src), NULL, test->src, strlen(test->src)+1); - pRtlMultiByteToUnicodeN(rst, sizeof(rst), NULL, test->dst, strlen(test->dst)+1); - - us_src.Length = strlen(test->src) * sizeof(WCHAR); - us_src.MaximumLength = us_src.Length + 2; - us_src.Buffer = src; - - us_dst.Length = 0; - us_dst.MaximumLength = 0; - us_dst.Buffer = NULL; - - nts = pRtlExpandEnvironmentStrings_U(small_env, &us_src, &us_dst, &ul); - ok(ul == strlen(test->dst) * sizeof(WCHAR) + sizeof(WCHAR), - "Wrong returned length for %s: %u\n", test->src, ul ); - - us_dst.Length = 0; - us_dst.MaximumLength = sizeof(dst); - us_dst.Buffer = dst; - - nts = pRtlExpandEnvironmentStrings_U(small_env, &us_src, &us_dst, &ul); - ok(nts == STATUS_SUCCESS, "Call failed (%u)\n", nts); - ok(ul == us_dst.Length + sizeof(WCHAR), - "Wrong returned length for %s: %u\n", test->src, ul); - ok(ul == strlen(test->dst) * sizeof(WCHAR) + sizeof(WCHAR), - "Wrong returned length for %s: %u\n", test->src, ul); - ok(lstrcmpW(dst, rst) == 0, "Wrong result for %s: expecting %s\n", - test->src, test->dst); - - us_dst.Length = 0; - us_dst.MaximumLength = 8 * sizeof(WCHAR); - us_dst.Buffer = dst; - dst[8] = '-'; - nts = pRtlExpandEnvironmentStrings_U(small_env, &us_src, &us_dst, &ul); - ok(nts == STATUS_BUFFER_TOO_SMALL, "Call failed (%u)\n", nts); - ok(ul == strlen(test->dst) * sizeof(WCHAR) + sizeof(WCHAR), - "Wrong returned length for %s (with buffer too small): %u\n", test->src, ul); - ok(memcmp(dst, rst, 8*sizeof(WCHAR)) == 0, - "Wrong result for %s (with buffer too small): expecting %s\n", - test->src, test->dst); - ok(dst[8] == '-', "Writing too far in buffer (got %c/%d)\n", dst[8], dst[8]); - } - -} - -START_TEST(env) -{ - HMODULE mod = GetModuleHandleA("ntdll.dll"); - - pRtlMultiByteToUnicodeN = (void *)GetProcAddress(mod,"RtlMultiByteToUnicodeN"); - pRtlCreateEnvironment = (void*)GetProcAddress(mod, "RtlCreateEnvironment"); - pRtlDestroyEnvironment = (void*)GetProcAddress(mod, "RtlDestroyEnvironment"); - pRtlQueryEnvironmentVariable_U = (void*)GetProcAddress(mod, "RtlQueryEnvironmentVariable_U"); - pRtlSetCurrentEnvironment = (void*)GetProcAddress(mod, "RtlSetCurrentEnvironment"); - pRtlSetEnvironmentVariable = (void*)GetProcAddress(mod, "RtlSetEnvironmentVariable"); - pRtlExpandEnvironmentStrings_U = (void*)GetProcAddress(mod, "RtlExpandEnvironmentStrings_U"); - - if (pRtlQueryEnvironmentVariable_U) - testQuery(); - if (pRtlSetEnvironmentVariable) - testSet(); - if (pRtlExpandEnvironmentStrings_U) - testExpand(); -} diff --git a/rostests/winetests/ntdll/error.c b/rostests/winetests/ntdll/error.c deleted file mode 100755 index b00b83bd661..00000000000 --- a/rostests/winetests/ntdll/error.c +++ /dev/null @@ -1,945 +0,0 @@ -/* - * Unit tests for RtlNtStatusToDosError function - * - * 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 - */ - -#include -#include - -#include "ntstatus.h" -#define WIN32_NO_STATUS - -#include "wine/test.h" - -#include "windef.h" -#include "winbase.h" -#include "rpcnterr.h" -#include "winreg.h" -#include "winternl.h" - -/* FIXME!!! this test checks only mappings, defined by MSDN - * It is necessary to add other mappings and to test them up to Windows XP. - * - * Some Windows platforms don't know about all the mappings, and in such - * cases they return somewhat strange results (Win98) or a generic error - * like ERROR_MR_MID_NOT_FOUND (NT4). Our tests have to know about these to - * not fail, but we would very much prefer Wine not to return such garbage. - * To you can pass the 'strict' option to this test to force it to only check - * results against the first listed value. This test should pass in strict - * mode on the latest Windows platform (currently XP) and in Wine. - * (of course older Windows platforms will fail to pass the strict mode) - */ - -static ULONG (WINAPI *pRtlNtStatusToDosError)(NTSTATUS Status); -static int strict; - -static int prepare_test(void) -{ - HMODULE ntdll; - int argc; - char** argv; - - ntdll = LoadLibraryA("ntdll.dll"); - pRtlNtStatusToDosError = (void*)GetProcAddress(ntdll, "RtlNtStatusToDosError"); - if (!pRtlNtStatusToDosError) - return 0; - - argc = winetest_get_mainargs(&argv); - strict=(argc >= 3 && strcmp(argv[2],"strict")==0); - return 1; -} - -static void cmp_call(NTSTATUS win_nt, ULONG win32, const char* message) -{ - ULONG err; - - err = pRtlNtStatusToDosError(win_nt); - ok(err == win32, - "%s (%x): got %u, expected %u\n", - message, win_nt, err, win32); -} - -static void cmp_call2(NTSTATUS win_nt, ULONG win32, const char* message) -{ - ULONG err; - - err = pRtlNtStatusToDosError(win_nt); - ok(err == win32 || - (!strict && err == ERROR_MR_MID_NOT_FOUND), - "%s (%x): got %u, expected %u (or MID_NOT_FOUND)\n", - message, win_nt, err, win32); -} - -static void cmp_call3(NTSTATUS win_nt, ULONG win32_1, ULONG win32_2, const char* message) -{ - ULONG err; - - err = pRtlNtStatusToDosError(win_nt); - ok(err == win32_1 || (!strict && err == win32_2), - "%s (%x): got %u, expected %u or %u\n", - message, win_nt, err, win32_1, win32_2); -} - -static void cmp_call4(NTSTATUS win_nt, ULONG win32_1, ULONG win32_2, const char* message) -{ - ULONG err; - - err = pRtlNtStatusToDosError(win_nt); - ok(err == win32_1 || - (!strict && (err == win32_2 || err == ERROR_MR_MID_NOT_FOUND)), - "%s (%x): got %u, expected %u or %u\n", - message, win_nt, err, win32_1, win32_2); -} - -#define cmp(status, error) \ - cmp_call(status, error, #status) -#define cmp2(status, error) \ - cmp_call2(status, error, #status) -#define cmp3(status, error1, error2) \ - cmp_call3(status, error1, error2, #status) -#define cmp4(status, error1, error2) \ - cmp_call4(status, error1, error2, #status) - -static void run_error_tests(void) -{ - cmp(STATUS_DATATYPE_MISALIGNMENT, ERROR_NOACCESS); - cmp(STATUS_ACCESS_VIOLATION, ERROR_NOACCESS); - cmp2(STATUS_DATATYPE_MISALIGNMENT_ERROR, ERROR_NOACCESS); - cmp(STATUS_CTL_FILE_NOT_SUPPORTED, ERROR_NOT_SUPPORTED); - cmp(STATUS_PORT_ALREADY_SET, ERROR_INVALID_PARAMETER); - cmp(STATUS_SECTION_NOT_IMAGE, ERROR_INVALID_PARAMETER); - cmp(STATUS_BAD_WORKING_SET_LIMIT, ERROR_INVALID_PARAMETER); - cmp(STATUS_WORKING_SET_LIMIT_RANGE, ERROR_INVALID_PARAMETER); - cmp(STATUS_INCOMPATIBLE_FILE_MAP, ERROR_INVALID_PARAMETER); - cmp(STATUS_PORT_DISCONNECTED, ERROR_INVALID_HANDLE); - cmp(STATUS_NOT_LOCKED, ERROR_NOT_LOCKED); - cmp(STATUS_NOT_MAPPED_VIEW, ERROR_INVALID_ADDRESS); - cmp(STATUS_UNABLE_TO_FREE_VM, ERROR_INVALID_PARAMETER); - cmp(STATUS_UNABLE_TO_DELETE_SECTION, ERROR_INVALID_PARAMETER); - cmp(STATUS_MORE_PROCESSING_REQUIRED, ERROR_MORE_DATA); - cmp(STATUS_INVALID_CID, ERROR_INVALID_PARAMETER); - cmp(STATUS_STACK_OVERFLOW, ERROR_STACK_OVERFLOW); - cmp(STATUS_BAD_INITIAL_STACK, ERROR_STACK_OVERFLOW); - cmp(STATUS_INVALID_VOLUME_LABEL, ERROR_LABEL_TOO_LONG); - cmp(STATUS_SECTION_NOT_EXTENDED, ERROR_OUTOFMEMORY); - cmp(STATUS_NOT_MAPPED_DATA, ERROR_INVALID_ADDRESS); - cmp2(STATUS_NO_LDT, ERROR_INVALID_THREAD_ID); - cmp(STATUS_INFO_LENGTH_MISMATCH, ERROR_BAD_LENGTH); - cmp(STATUS_INVALID_INFO_CLASS, ERROR_INVALID_PARAMETER); - cmp(STATUS_SUSPEND_COUNT_EXCEEDED, ERROR_SIGNAL_REFUSED); - cmp(STATUS_NOTIFY_ENUM_DIR, ERROR_NOTIFY_ENUM_DIR); - cmp(STATUS_REGISTRY_RECOVERED, ERROR_REGISTRY_RECOVERED); - cmp(STATUS_REGISTRY_IO_FAILED, ERROR_REGISTRY_IO_FAILED); - cmp(STATUS_NOT_REGISTRY_FILE, ERROR_NOT_REGISTRY_FILE); - cmp(STATUS_KEY_DELETED, ERROR_KEY_DELETED); - cmp(STATUS_NO_LOG_SPACE, ERROR_NO_LOG_SPACE); - cmp(STATUS_KEY_HAS_CHILDREN, ERROR_KEY_HAS_CHILDREN); - cmp(STATUS_CHILD_MUST_BE_VOLATILE, ERROR_CHILD_MUST_BE_VOLATILE); - cmp(STATUS_REGISTRY_CORRUPT, ERROR_BADDB); - cmp(STATUS_DLL_NOT_FOUND, ERROR_MOD_NOT_FOUND); - cmp(STATUS_DLL_INIT_FAILED, ERROR_DLL_INIT_FAILED); - cmp2(STATUS_INVALID_IMPORT_OF_NON_DLL, ERROR_INVALID_IMPORT_OF_NON_DLL); - cmp(STATUS_ORDINAL_NOT_FOUND, ERROR_INVALID_ORDINAL); - cmp(STATUS_DRIVER_ORDINAL_NOT_FOUND, ERROR_INVALID_ORDINAL); - cmp2(STATUS_DRIVER_UNABLE_TO_LOAD, ERROR_BAD_DRIVER); - cmp(STATUS_ENTRYPOINT_NOT_FOUND, ERROR_PROC_NOT_FOUND); - cmp(STATUS_DRIVER_ENTRYPOINT_NOT_FOUND, ERROR_PROC_NOT_FOUND); - cmp(STATUS_PENDING, ERROR_IO_PENDING); - cmp(STATUS_MORE_ENTRIES, ERROR_MORE_DATA); - cmp(STATUS_INTEGER_OVERFLOW, ERROR_ARITHMETIC_OVERFLOW); - cmp(STATUS_BUFFER_OVERFLOW, ERROR_MORE_DATA); - cmp(STATUS_NO_MORE_FILES, ERROR_NO_MORE_FILES); - cmp(STATUS_NO_INHERITANCE, ERROR_NO_INHERITANCE); - cmp(STATUS_NO_MORE_EAS, ERROR_NO_MORE_ITEMS); - cmp(STATUS_NO_MORE_ENTRIES, ERROR_NO_MORE_ITEMS); - cmp(STATUS_GUIDS_EXHAUSTED, ERROR_NO_MORE_ITEMS); - cmp(STATUS_AGENTS_EXHAUSTED, ERROR_NO_MORE_ITEMS); - cmp(STATUS_UNSUCCESSFUL, ERROR_GEN_FAILURE); - cmp(STATUS_TOO_MANY_LINKS, ERROR_TOO_MANY_LINKS); - cmp(STATUS_NOT_IMPLEMENTED, ERROR_INVALID_FUNCTION); - cmp(STATUS_ILLEGAL_FUNCTION, ERROR_INVALID_FUNCTION); - cmp(STATUS_IN_PAGE_ERROR, ERROR_SWAPERROR); - cmp(STATUS_PAGEFILE_QUOTA, ERROR_PAGEFILE_QUOTA); - cmp(STATUS_COMMITMENT_LIMIT, ERROR_COMMITMENT_LIMIT); - cmp(STATUS_SECTION_TOO_BIG, ERROR_NOT_ENOUGH_MEMORY); - cmp(RPC_NT_SS_IN_NULL_CONTEXT, ERROR_INVALID_HANDLE); - cmp(RPC_NT_INVALID_BINDING, ERROR_INVALID_HANDLE); - cmp(STATUS_INVALID_HANDLE, ERROR_INVALID_HANDLE); - cmp(STATUS_OBJECT_TYPE_MISMATCH, ERROR_INVALID_HANDLE); - cmp(STATUS_FILE_CLOSED, ERROR_INVALID_HANDLE); - cmp(STATUS_INVALID_PORT_HANDLE, ERROR_INVALID_HANDLE); - cmp(STATUS_HANDLE_NOT_CLOSABLE, ERROR_INVALID_HANDLE); - cmp(STATUS_NOT_COMMITTED, ERROR_INVALID_ADDRESS); - cmp(STATUS_PARTIAL_COPY, ERROR_PARTIAL_COPY); - cmp(STATUS_LPC_REPLY_LOST, ERROR_INTERNAL_ERROR); - cmp(STATUS_INVALID_PARAMETER, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_1, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_2, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_3, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_4, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_5, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_6, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_7, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_8, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_9, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_10, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_11, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_12, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PARAMETER_MIX, ERROR_INVALID_PARAMETER); - cmp(STATUS_INVALID_PAGE_PROTECTION, ERROR_INVALID_PARAMETER); - cmp(STATUS_SECTION_PROTECTION, ERROR_INVALID_PARAMETER); - cmp(STATUS_RESOURCE_DATA_NOT_FOUND, ERROR_RESOURCE_DATA_NOT_FOUND); - cmp(STATUS_RESOURCE_TYPE_NOT_FOUND, ERROR_RESOURCE_TYPE_NOT_FOUND); - cmp(STATUS_RESOURCE_NAME_NOT_FOUND, ERROR_RESOURCE_NAME_NOT_FOUND); - cmp(STATUS_RESOURCE_LANG_NOT_FOUND, ERROR_RESOURCE_LANG_NOT_FOUND); - cmp(STATUS_NO_SUCH_DEVICE, ERROR_FILE_NOT_FOUND); - cmp(STATUS_NO_SUCH_FILE, ERROR_FILE_NOT_FOUND); - cmp(STATUS_INVALID_DEVICE_REQUEST, ERROR_INVALID_FUNCTION); - cmp2(STATUS_VOLUME_NOT_UPGRADED, ERROR_INVALID_FUNCTION); - cmp(STATUS_END_OF_FILE, ERROR_HANDLE_EOF); - cmp(STATUS_FILE_FORCED_CLOSED, ERROR_HANDLE_EOF); - cmp(STATUS_WRONG_VOLUME, ERROR_WRONG_DISK); - cmp(STATUS_NO_MEDIA, ERROR_NO_MEDIA_IN_DRIVE); - cmp(STATUS_NO_MEDIA_IN_DEVICE, ERROR_NOT_READY); - cmp(STATUS_VOLUME_DISMOUNTED, ERROR_NOT_READY); - cmp(STATUS_NONEXISTENT_SECTOR, ERROR_SECTOR_NOT_FOUND); - cmp(STATUS_WORKING_SET_QUOTA, ERROR_WORKING_SET_QUOTA); - cmp(STATUS_NO_MEMORY, ERROR_NOT_ENOUGH_MEMORY); - cmp(STATUS_CONFLICTING_ADDRESSES, ERROR_INVALID_ADDRESS); - cmp(STATUS_INVALID_SYSTEM_SERVICE, ERROR_INVALID_FUNCTION); - cmp(STATUS_THREAD_IS_TERMINATING, ERROR_ACCESS_DENIED); - cmp(STATUS_PROCESS_IS_TERMINATING, ERROR_ACCESS_DENIED); - cmp(STATUS_INVALID_LOCK_SEQUENCE, ERROR_ACCESS_DENIED); - cmp(STATUS_INVALID_VIEW_SIZE, ERROR_ACCESS_DENIED); - cmp(STATUS_ALREADY_COMMITTED, ERROR_ACCESS_DENIED); - cmp(STATUS_ACCESS_DENIED, ERROR_ACCESS_DENIED); - cmp(STATUS_FILE_IS_A_DIRECTORY, ERROR_ACCESS_DENIED); - cmp(STATUS_CANNOT_DELETE, ERROR_ACCESS_DENIED); - cmp(STATUS_INVALID_COMPUTER_NAME, ERROR_INVALID_COMPUTERNAME); - cmp(STATUS_FILE_DELETED, ERROR_ACCESS_DENIED); - cmp2(STATUS_FILE_RENAMED, ERROR_ACCESS_DENIED); - cmp(STATUS_DELETE_PENDING, ERROR_ACCESS_DENIED); - cmp(STATUS_PORT_CONNECTION_REFUSED, ERROR_ACCESS_DENIED); - cmp(STATUS_NO_SUCH_PRIVILEGE, ERROR_NO_SUCH_PRIVILEGE); - cmp(STATUS_PRIVILEGE_NOT_HELD, ERROR_PRIVILEGE_NOT_HELD); - cmp(STATUS_CANNOT_IMPERSONATE, ERROR_CANNOT_IMPERSONATE); - cmp(STATUS_LOGON_FAILURE, ERROR_LOGON_FAILURE); - cmp2(STATUS_MUTUAL_AUTHENTICATION_FAILED, ERROR_MUTUAL_AUTH_FAILED); - cmp2(STATUS_TIME_DIFFERENCE_AT_DC, ERROR_TIME_SKEW); - cmp2(STATUS_PKINIT_FAILURE, ERROR_PKINIT_FAILURE); - cmp2(STATUS_SMARTCARD_SUBSYSTEM_FAILURE, ERROR_SMARTCARD_SUBSYSTEM_FAILURE); - cmp2(STATUS_DOWNGRADE_DETECTED, ERROR_DOWNGRADE_DETECTED); - cmp4(STATUS_SMARTCARD_CERT_REVOKED, SEC_E_SMARTCARD_CERT_REVOKED, 1266); /* FIXME: real name? */ - cmp4(STATUS_ISSUING_CA_UNTRUSTED, SEC_E_ISSUING_CA_UNTRUSTED, 1267); /* FIXME: real name? */ - cmp4(STATUS_REVOCATION_OFFLINE_C, SEC_E_REVOCATION_OFFLINE_C, 1268); /* FIXME: real name? */ - cmp4(STATUS_PKINIT_CLIENT_FAILURE, SEC_E_PKINIT_CLIENT_FAILURE, 1269); /* FIXME: real name? */ - cmp4(STATUS_SMARTCARD_CERT_EXPIRED, SEC_E_SMARTCARD_CERT_EXPIRED, 1270); /* FIXME: real name? */ - cmp2(STATUS_NO_KERB_KEY, SEC_E_NO_KERB_KEY); - cmp2(STATUS_CURRENT_DOMAIN_NOT_ALLOWED, ERROR_CURRENT_DOMAIN_NOT_ALLOWED); - cmp2(STATUS_SMARTCARD_WRONG_PIN, SCARD_W_WRONG_CHV); - cmp2(STATUS_SMARTCARD_CARD_BLOCKED, SCARD_W_CHV_BLOCKED); - cmp2(STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED,SCARD_W_CARD_NOT_AUTHENTICATED); - cmp2(STATUS_SMARTCARD_NO_CARD, SCARD_E_NO_SMARTCARD); - cmp2(STATUS_SMARTCARD_NO_KEY_CONTAINER, NTE_NO_KEY); - cmp2(STATUS_SMARTCARD_NO_CERTIFICATE, SCARD_E_NO_SUCH_CERTIFICATE); - cmp2(STATUS_SMARTCARD_NO_KEYSET, NTE_BAD_KEYSET); - cmp2(STATUS_SMARTCARD_IO_ERROR, SCARD_E_COMM_DATA_LOST); - cmp(STATUS_ACCOUNT_RESTRICTION, ERROR_ACCOUNT_RESTRICTION); - cmp(STATUS_INVALID_LOGON_HOURS, ERROR_INVALID_LOGON_HOURS); - cmp(STATUS_INVALID_WORKSTATION, ERROR_INVALID_WORKSTATION); - cmp(STATUS_BUFFER_TOO_SMALL, ERROR_INSUFFICIENT_BUFFER); - cmp(STATUS_UNABLE_TO_DECOMMIT_VM, ERROR_INVALID_ADDRESS); - cmp(STATUS_DISK_CORRUPT_ERROR, ERROR_DISK_CORRUPT); - cmp(STATUS_FT_MISSING_MEMBER, ERROR_IO_DEVICE); - cmp(STATUS_FT_ORPHANING, ERROR_IO_DEVICE); - cmp(STATUS_VARIABLE_NOT_FOUND, ERROR_ENVVAR_NOT_FOUND); - cmp(STATUS_OBJECT_NAME_INVALID, ERROR_INVALID_NAME); - cmp(STATUS_OBJECT_NAME_NOT_FOUND, ERROR_FILE_NOT_FOUND); - cmp(STATUS_OBJECT_NAME_COLLISION, ERROR_ALREADY_EXISTS); - cmp(STATUS_OBJECT_PATH_INVALID, ERROR_BAD_PATHNAME); - cmp(STATUS_OBJECT_PATH_NOT_FOUND, ERROR_PATH_NOT_FOUND); - cmp(STATUS_DFS_EXIT_PATH_FOUND, ERROR_PATH_NOT_FOUND); - cmp2(STATUS_DFS_UNAVAILABLE, ERROR_CONNECTION_UNAVAIL); - cmp(STATUS_OBJECT_PATH_SYNTAX_BAD, ERROR_BAD_PATHNAME); - cmp(STATUS_NAME_TOO_LONG, ERROR_FILENAME_EXCED_RANGE); - cmp(STATUS_DATA_OVERRUN, ERROR_IO_DEVICE); - cmp(STATUS_DATA_LATE_ERROR, ERROR_IO_DEVICE); - cmp(STATUS_DATA_ERROR, ERROR_CRC); - cmp(STATUS_CRC_ERROR, ERROR_CRC); - cmp(STATUS_SHARING_VIOLATION, ERROR_SHARING_VIOLATION); - cmp(STATUS_QUOTA_EXCEEDED, ERROR_NOT_ENOUGH_QUOTA); - cmp(STATUS_MUTANT_NOT_OWNED, ERROR_NOT_OWNER); - cmp(STATUS_SEMAPHORE_LIMIT_EXCEEDED, ERROR_TOO_MANY_POSTS); - cmp(STATUS_DISK_FULL, ERROR_DISK_FULL); - cmp(STATUS_LOCK_NOT_GRANTED, ERROR_LOCK_VIOLATION); - cmp(STATUS_FILE_LOCK_CONFLICT, ERROR_LOCK_VIOLATION); - cmp(STATUS_NOT_A_DIRECTORY, ERROR_DIRECTORY); - cmp2(STATUS_CANNOT_MAKE, ERROR_CANNOT_MAKE); - cmp(STATUS_UNKNOWN_REVISION, ERROR_UNKNOWN_REVISION); - cmp(STATUS_REVISION_MISMATCH, ERROR_REVISION_MISMATCH); - cmp(STATUS_INVALID_OWNER, ERROR_INVALID_OWNER); - cmp(STATUS_INVALID_PRIMARY_GROUP, ERROR_INVALID_PRIMARY_GROUP); - cmp(STATUS_NO_IMPERSONATION_TOKEN, ERROR_NO_IMPERSONATION_TOKEN); - cmp(STATUS_CANT_DISABLE_MANDATORY, ERROR_CANT_DISABLE_MANDATORY); - cmp(STATUS_NO_LOGON_SERVERS, ERROR_NO_LOGON_SERVERS); - cmp(STATUS_DOMAIN_CONTROLLER_NOT_FOUND, ERROR_DOMAIN_CONTROLLER_NOT_FOUND); - cmp(STATUS_NO_SUCH_LOGON_SESSION, ERROR_NO_SUCH_LOGON_SESSION); - cmp(STATUS_INVALID_ACCOUNT_NAME, ERROR_INVALID_ACCOUNT_NAME); - cmp(STATUS_USER_EXISTS, ERROR_USER_EXISTS); - cmp(STATUS_NO_SUCH_USER, ERROR_NO_SUCH_USER); - cmp(STATUS_GROUP_EXISTS, ERROR_GROUP_EXISTS); - cmp(STATUS_NO_SUCH_GROUP, ERROR_NO_SUCH_GROUP); - cmp(STATUS_SPECIAL_GROUP, ERROR_SPECIAL_GROUP); - cmp(STATUS_MEMBER_IN_GROUP, ERROR_MEMBER_IN_GROUP); - cmp(STATUS_MEMBER_NOT_IN_GROUP, ERROR_MEMBER_NOT_IN_GROUP); - cmp(STATUS_LAST_ADMIN, ERROR_LAST_ADMIN); - cmp(STATUS_WRONG_PASSWORD, ERROR_INVALID_PASSWORD); - cmp(STATUS_WRONG_PASSWORD_CORE, ERROR_INVALID_PASSWORD); - cmp(STATUS_ILL_FORMED_PASSWORD, ERROR_ILL_FORMED_PASSWORD); - cmp(STATUS_PASSWORD_RESTRICTION, ERROR_PASSWORD_RESTRICTION); - cmp(STATUS_PASSWORD_EXPIRED, ERROR_PASSWORD_EXPIRED); - cmp(STATUS_PASSWORD_MUST_CHANGE, ERROR_PASSWORD_MUST_CHANGE); - cmp(STATUS_ACCOUNT_DISABLED, ERROR_ACCOUNT_DISABLED); - cmp(STATUS_ACCOUNT_LOCKED_OUT, ERROR_ACCOUNT_LOCKED_OUT); - cmp(STATUS_NONE_MAPPED, ERROR_NONE_MAPPED); - cmp(STATUS_TOO_MANY_LUIDS_REQUESTED, ERROR_TOO_MANY_LUIDS_REQUESTED); - cmp(STATUS_LUIDS_EXHAUSTED, ERROR_LUIDS_EXHAUSTED); - cmp(STATUS_INVALID_SUB_AUTHORITY, ERROR_INVALID_SUB_AUTHORITY); - cmp(STATUS_INVALID_ACL, ERROR_INVALID_ACL); - cmp(STATUS_INVALID_SID, ERROR_INVALID_SID); - cmp(STATUS_INVALID_SECURITY_DESCR, ERROR_INVALID_SECURITY_DESCR); - cmp(STATUS_PROCEDURE_NOT_FOUND, ERROR_PROC_NOT_FOUND); - cmp(STATUS_BAD_INITIAL_PC, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_INVALID_FILE_FOR_SECTION, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_INVALID_IMAGE_FORMAT, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_IMAGE_MP_UP_MISMATCH, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_INVALID_IMAGE_NOT_MZ, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_IMAGE_CHECKSUM_MISMATCH, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_INVALID_IMAGE_PROTECT, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_INVALID_IMAGE_LE_FORMAT, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_INVALID_IMAGE_NE_FORMAT, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_INVALID_IMAGE_WIN_16, ERROR_BAD_EXE_FORMAT); - cmp2(STATUS_INVALID_IMAGE_WIN_32, ERROR_BAD_EXE_FORMAT); - cmp2(STATUS_INVALID_IMAGE_WIN_64, ERROR_BAD_EXE_FORMAT); - cmp(STATUS_NO_TOKEN, ERROR_NO_TOKEN); - cmp(STATUS_RANGE_NOT_LOCKED, ERROR_NOT_LOCKED); - cmp(STATUS_SERVER_DISABLED, ERROR_SERVER_DISABLED); - cmp(STATUS_SERVER_NOT_DISABLED, ERROR_SERVER_NOT_DISABLED); - cmp(STATUS_INVALID_ID_AUTHORITY, ERROR_INVALID_ID_AUTHORITY); - cmp(STATUS_ALLOTTED_SPACE_EXCEEDED, ERROR_ALLOTTED_SPACE_EXCEEDED); - cmp(STATUS_TOO_MANY_PAGING_FILES, ERROR_NOT_ENOUGH_MEMORY); - cmp(STATUS_INSUFFICIENT_RESOURCES, ERROR_NO_SYSTEM_RESOURCES); - cmp(STATUS_INSUFF_SERVER_RESOURCES, ERROR_NOT_ENOUGH_SERVER_MEMORY); - cmp(STATUS_FILE_INVALID, ERROR_FILE_INVALID); - cmp(STATUS_MAPPED_FILE_SIZE_ZERO, ERROR_FILE_INVALID); - cmp(STATUS_DEVICE_PAPER_EMPTY, ERROR_OUT_OF_PAPER); - cmp(STATUS_DEVICE_POWERED_OFF, ERROR_NOT_READY); - cmp(STATUS_DEVICE_OFF_LINE, ERROR_NOT_READY); - cmp(STATUS_DEVICE_DATA_ERROR, ERROR_CRC); - cmp(STATUS_DEVICE_NOT_READY, ERROR_NOT_READY); - cmp3(STATUS_DEVICE_NOT_CONNECTED, ERROR_DEVICE_NOT_CONNECTED, ERROR_NOT_READY); - cmp(STATUS_DEVICE_POWER_FAILURE, ERROR_NOT_READY); - cmp2(STATUS_NOT_FOUND, ERROR_NOT_FOUND); - cmp2(STATUS_NO_MATCH, ERROR_NO_MATCH); - cmp2(STATUS_PROPSET_NOT_FOUND, ERROR_SET_NOT_FOUND); - cmp(STATUS_DEVICE_BUSY, ERROR_BUSY); - cmp(STATUS_FREE_VM_NOT_AT_BASE, ERROR_INVALID_ADDRESS); - cmp(STATUS_MEMORY_NOT_ALLOCATED, ERROR_INVALID_ADDRESS); - cmp(STATUS_NOT_SAME_DEVICE, ERROR_NOT_SAME_DEVICE); - cmp(STATUS_NOT_SUPPORTED, ERROR_NOT_SUPPORTED); - cmp(STATUS_REMOTE_NOT_LISTENING, ERROR_REM_NOT_LIST); - cmp(STATUS_DUPLICATE_NAME, ERROR_DUP_NAME); - cmp(STATUS_BAD_NETWORK_PATH, ERROR_BAD_NETPATH); - cmp(STATUS_NETWORK_BUSY, ERROR_NETWORK_BUSY); - cmp2(STATUS_ONLY_IF_CONNECTED, ERROR_ONLY_IF_CONNECTED); - cmp(STATUS_DEVICE_DOES_NOT_EXIST, ERROR_DEV_NOT_EXIST); - cmp(STATUS_TOO_MANY_COMMANDS, ERROR_TOO_MANY_CMDS); - cmp(STATUS_ADAPTER_HARDWARE_ERROR, ERROR_ADAP_HDW_ERR); - cmp(STATUS_REDIRECTOR_NOT_STARTED, ERROR_PATH_NOT_FOUND); - cmp(STATUS_INVALID_EA_NAME, ERROR_INVALID_EA_NAME); - cmp(STATUS_EA_LIST_INCONSISTENT, ERROR_EA_LIST_INCONSISTENT); - cmp(STATUS_EA_TOO_LARGE, ERROR_EA_LIST_INCONSISTENT); - cmp(STATUS_INVALID_EA_FLAG, ERROR_EA_LIST_INCONSISTENT); - cmp2(STATUS_EAS_NOT_SUPPORTED, ERROR_EAS_NOT_SUPPORTED); - cmp(STATUS_FILE_CORRUPT_ERROR, ERROR_FILE_CORRUPT); - cmp(STATUS_EA_CORRUPT_ERROR, ERROR_FILE_CORRUPT); - cmp(STATUS_NONEXISTENT_EA_ENTRY, ERROR_FILE_CORRUPT); - cmp(STATUS_NO_EAS_ON_FILE, ERROR_FILE_CORRUPT); - cmp2(STATUS_NOT_A_REPARSE_POINT, ERROR_NOT_A_REPARSE_POINT); - cmp4(STATUS_IO_REPARSE_TAG_INVALID, ERROR_REPARSE_TAG_INVALID, ERROR_INVALID_PARAMETER); - cmp4(STATUS_IO_REPARSE_TAG_MISMATCH, ERROR_REPARSE_TAG_MISMATCH, ERROR_INVALID_PARAMETER); - cmp2(STATUS_IO_REPARSE_TAG_NOT_HANDLED, ERROR_CANT_ACCESS_FILE); - cmp2(STATUS_REPARSE_POINT_NOT_RESOLVED, ERROR_CANT_RESOLVE_FILENAME); - cmp2(STATUS_DIRECTORY_IS_A_REPARSE_POINT, ERROR_BAD_PATHNAME); - cmp2(STATUS_REPARSE_ATTRIBUTE_CONFLICT, ERROR_REPARSE_ATTRIBUTE_CONFLICT); - cmp4(STATUS_IO_REPARSE_DATA_INVALID, ERROR_INVALID_REPARSE_DATA, ERROR_INVALID_PARAMETER); - cmp2(STATUS_FILE_IS_OFFLINE, ERROR_FILE_OFFLINE); - cmp2(STATUS_REMOTE_STORAGE_NOT_ACTIVE, ERROR_REMOTE_STORAGE_NOT_ACTIVE); - cmp2(STATUS_REMOTE_STORAGE_MEDIA_ERROR, ERROR_REMOTE_STORAGE_MEDIA_ERROR); - cmp2(STATUS_NO_TRACKING_SERVICE, ERROR_NO_TRACKING_SERVICE); - cmp2(STATUS_JOURNAL_DELETE_IN_PROGRESS, ERROR_JOURNAL_DELETE_IN_PROGRESS); - cmp2(STATUS_JOURNAL_NOT_ACTIVE, ERROR_JOURNAL_NOT_ACTIVE); - cmp2(STATUS_JOURNAL_ENTRY_DELETED, ERROR_JOURNAL_ENTRY_DELETED); - cmp(STATUS_INVALID_NETWORK_RESPONSE, ERROR_BAD_NET_RESP); - cmp(STATUS_USER_SESSION_DELETED, ERROR_UNEXP_NET_ERR); - cmp(STATUS_UNEXPECTED_NETWORK_ERROR, ERROR_UNEXP_NET_ERR); - cmp(STATUS_BAD_REMOTE_ADAPTER, ERROR_BAD_REM_ADAP); - cmp(STATUS_PRINT_QUEUE_FULL, ERROR_PRINTQ_FULL); - cmp(STATUS_NO_SPOOL_SPACE, ERROR_NO_SPOOL_SPACE); - cmp(STATUS_PRINT_CANCELLED, ERROR_PRINT_CANCELLED); - cmp(STATUS_NETWORK_NAME_DELETED, ERROR_NETNAME_DELETED); - cmp(STATUS_NETWORK_ACCESS_DENIED, ERROR_NETWORK_ACCESS_DENIED); - cmp(STATUS_BAD_DEVICE_TYPE, ERROR_BAD_DEV_TYPE); - cmp(STATUS_BAD_NETWORK_NAME, ERROR_BAD_NET_NAME); - cmp(STATUS_TOO_MANY_NAMES, ERROR_TOO_MANY_NAMES); - cmp(STATUS_TOO_MANY_GUIDS_REQUESTED, ERROR_TOO_MANY_NAMES); - cmp(STATUS_TOO_MANY_ADDRESSES, ERROR_TOO_MANY_NAMES); - cmp(STATUS_TOO_MANY_NODES, ERROR_TOO_MANY_NAMES); - cmp(STATUS_TOO_MANY_SESSIONS, ERROR_TOO_MANY_SESS); - cmp(STATUS_SHARING_PAUSED, ERROR_SHARING_PAUSED); - cmp(STATUS_REQUEST_NOT_ACCEPTED, ERROR_REQ_NOT_ACCEP); - cmp(STATUS_REDIRECTOR_PAUSED, ERROR_REDIR_PAUSED); - cmp(STATUS_NET_WRITE_FAULT, ERROR_NET_WRITE_FAULT); - cmp(STATUS_VIRTUAL_CIRCUIT_CLOSED, ERROR_VC_DISCONNECTED); - cmp(STATUS_INVALID_PIPE_STATE, ERROR_BAD_PIPE); - cmp(STATUS_INVALID_READ_MODE, ERROR_BAD_PIPE); - cmp(STATUS_PIPE_CLOSING, ERROR_NO_DATA); - cmp(STATUS_PIPE_EMPTY, ERROR_NO_DATA); - cmp(STATUS_PIPE_CONNECTED, ERROR_PIPE_CONNECTED); - cmp(STATUS_PIPE_DISCONNECTED, ERROR_PIPE_NOT_CONNECTED); - cmp(STATUS_PIPE_LISTENING, ERROR_PIPE_LISTENING); - cmp(STATUS_PIPE_NOT_AVAILABLE, ERROR_PIPE_BUSY); - cmp(STATUS_INSTANCE_NOT_AVAILABLE, ERROR_PIPE_BUSY); - cmp(STATUS_PIPE_BUSY, ERROR_PIPE_BUSY); - cmp(STATUS_PIPE_BROKEN, ERROR_BROKEN_PIPE); - cmp(STATUS_DIRECTORY_NOT_EMPTY, ERROR_DIR_NOT_EMPTY); - cmp(STATUS_TOO_MANY_OPENED_FILES, ERROR_TOO_MANY_OPEN_FILES); - cmp(STATUS_IO_TIMEOUT, ERROR_SEM_TIMEOUT); - cmp(STATUS_CANCELLED, ERROR_OPERATION_ABORTED); - cmp(STATUS_UNRECOGNIZED_MEDIA, ERROR_UNRECOGNIZED_MEDIA); - cmp(STATUS_INVALID_LEVEL, ERROR_INVALID_LEVEL); - cmp(STATUS_UNRECOGNIZED_VOLUME, ERROR_UNRECOGNIZED_VOLUME); - cmp(STATUS_MEDIA_WRITE_PROTECTED, ERROR_WRITE_PROTECT); - cmp(STATUS_TOO_LATE, ERROR_WRITE_PROTECT); - cmp(STATUS_SUCCESS, NO_ERROR); - cmp(STATUS_FULLSCREEN_MODE, ERROR_FULLSCREEN_MODE); - cmp(STATUS_END_OF_MEDIA, ERROR_END_OF_MEDIA); - cmp(STATUS_EOM_OVERFLOW, ERROR_EOM_OVERFLOW); - cmp(STATUS_BEGINNING_OF_MEDIA, ERROR_BEGINNING_OF_MEDIA); - cmp(STATUS_MEDIA_CHANGED, ERROR_MEDIA_CHANGED); - cmp(STATUS_BUS_RESET, ERROR_BUS_RESET); - cmp(STATUS_FILEMARK_DETECTED, ERROR_FILEMARK_DETECTED); - cmp(STATUS_SETMARK_DETECTED, ERROR_SETMARK_DETECTED); - cmp(STATUS_NO_DATA_DETECTED, ERROR_NO_DATA_DETECTED); - cmp(STATUS_PARTITION_FAILURE, ERROR_PARTITION_FAILURE); - cmp(STATUS_INVALID_BLOCK_LENGTH, ERROR_INVALID_BLOCK_LENGTH); - cmp(STATUS_DEVICE_NOT_PARTITIONED, ERROR_DEVICE_NOT_PARTITIONED); - cmp(STATUS_UNABLE_TO_LOCK_MEDIA, ERROR_UNABLE_TO_LOCK_MEDIA); - cmp(STATUS_UNABLE_TO_UNLOAD_MEDIA, ERROR_UNABLE_TO_UNLOAD_MEDIA); - cmp(STATUS_UNMAPPABLE_CHARACTER, ERROR_NO_UNICODE_TRANSLATION); - cmp(STATUS_NOT_ALL_ASSIGNED, ERROR_NOT_ALL_ASSIGNED); - cmp(STATUS_SOME_NOT_MAPPED, ERROR_SOME_NOT_MAPPED); - cmp(STATUS_NO_QUOTAS_FOR_ACCOUNT, ERROR_NO_QUOTAS_FOR_ACCOUNT); - cmp(STATUS_LOCAL_USER_SESSION_KEY, ERROR_LOCAL_USER_SESSION_KEY); - cmp(STATUS_NULL_LM_PASSWORD, ERROR_NULL_LM_PASSWORD); - cmp(STATUS_BAD_INHERITANCE_ACL, ERROR_BAD_INHERITANCE_ACL); - cmp(STATUS_INVALID_GROUP_ATTRIBUTES, ERROR_INVALID_GROUP_ATTRIBUTES); - cmp(STATUS_BAD_IMPERSONATION_LEVEL, ERROR_BAD_IMPERSONATION_LEVEL); - cmp(STATUS_CANT_OPEN_ANONYMOUS, ERROR_CANT_OPEN_ANONYMOUS); - cmp(STATUS_BAD_VALIDATION_CLASS, ERROR_BAD_VALIDATION_CLASS); - cmp(STATUS_BAD_TOKEN_TYPE, ERROR_BAD_TOKEN_TYPE); - cmp2(STATUS_BAD_MASTER_BOOT_RECORD, ERROR_INVALID_PARAMETER); - cmp(STATUS_NO_SECURITY_ON_OBJECT, ERROR_NO_SECURITY_ON_OBJECT); - cmp(STATUS_CANT_ACCESS_DOMAIN_INFO, ERROR_CANT_ACCESS_DOMAIN_INFO); - cmp(STATUS_INVALID_SERVER_STATE, ERROR_INVALID_SERVER_STATE); - cmp(STATUS_INVALID_DOMAIN_STATE, ERROR_INVALID_DOMAIN_STATE); - cmp(STATUS_INVALID_DOMAIN_ROLE, ERROR_INVALID_DOMAIN_ROLE); - cmp(STATUS_NO_SUCH_DOMAIN, ERROR_NO_SUCH_DOMAIN); - cmp(STATUS_DOMAIN_EXISTS, ERROR_DOMAIN_EXISTS); - cmp(STATUS_DOMAIN_LIMIT_EXCEEDED, ERROR_DOMAIN_LIMIT_EXCEEDED); - cmp2(STATUS_OPLOCK_NOT_GRANTED, ERROR_OPLOCK_NOT_GRANTED); - cmp2(STATUS_INVALID_OPLOCK_PROTOCOL, ERROR_INVALID_OPLOCK_PROTOCOL); - cmp(STATUS_INTERNAL_DB_CORRUPTION, ERROR_INTERNAL_DB_CORRUPTION); - cmp(STATUS_INTERNAL_ERROR, ERROR_INTERNAL_ERROR); - cmp(STATUS_GENERIC_NOT_MAPPED, ERROR_GENERIC_NOT_MAPPED); - cmp(STATUS_BAD_DESCRIPTOR_FORMAT, ERROR_BAD_DESCRIPTOR_FORMAT); - cmp(STATUS_NOT_LOGON_PROCESS, ERROR_NOT_LOGON_PROCESS); - cmp(STATUS_LOGON_SESSION_EXISTS, ERROR_LOGON_SESSION_EXISTS); - cmp(STATUS_NO_SUCH_PACKAGE, ERROR_NO_SUCH_PACKAGE); - cmp(STATUS_BAD_LOGON_SESSION_STATE, ERROR_BAD_LOGON_SESSION_STATE); - cmp(STATUS_LOGON_SESSION_COLLISION, ERROR_LOGON_SESSION_COLLISION); - cmp(STATUS_INVALID_LOGON_TYPE, ERROR_INVALID_LOGON_TYPE); - cmp(STATUS_RXACT_INVALID_STATE, ERROR_RXACT_INVALID_STATE); - cmp(STATUS_RXACT_COMMIT_FAILURE, ERROR_RXACT_COMMIT_FAILURE); - cmp(STATUS_SPECIAL_ACCOUNT, ERROR_SPECIAL_ACCOUNT); - cmp(STATUS_SPECIAL_USER, ERROR_SPECIAL_USER); - cmp(STATUS_MEMBERS_PRIMARY_GROUP, ERROR_MEMBERS_PRIMARY_GROUP); - cmp(STATUS_TOKEN_ALREADY_IN_USE, ERROR_TOKEN_ALREADY_IN_USE); - cmp(STATUS_NO_SUCH_ALIAS, ERROR_NO_SUCH_ALIAS); - cmp(STATUS_MEMBER_NOT_IN_ALIAS, ERROR_MEMBER_NOT_IN_ALIAS); - cmp(STATUS_MEMBER_IN_ALIAS, ERROR_MEMBER_IN_ALIAS); - cmp(STATUS_ALIAS_EXISTS, ERROR_ALIAS_EXISTS); - cmp(STATUS_LOGON_NOT_GRANTED, ERROR_LOGON_NOT_GRANTED); - cmp(STATUS_TOO_MANY_SECRETS, ERROR_TOO_MANY_SECRETS); - cmp(STATUS_SECRET_TOO_LONG, ERROR_SECRET_TOO_LONG); - cmp(STATUS_INTERNAL_DB_ERROR, ERROR_INTERNAL_DB_ERROR); - cmp(STATUS_TOO_MANY_CONTEXT_IDS, ERROR_TOO_MANY_CONTEXT_IDS); - cmp(STATUS_LOGON_TYPE_NOT_GRANTED, ERROR_LOGON_TYPE_NOT_GRANTED); - cmp(STATUS_NT_CROSS_ENCRYPTION_REQUIRED, ERROR_NT_CROSS_ENCRYPTION_REQUIRED); - cmp(STATUS_NO_SUCH_MEMBER, ERROR_NO_SUCH_MEMBER); - cmp(STATUS_INVALID_MEMBER, ERROR_INVALID_MEMBER); - cmp(STATUS_TOO_MANY_SIDS, ERROR_TOO_MANY_SIDS); - cmp(STATUS_LM_CROSS_ENCRYPTION_REQUIRED, ERROR_LM_CROSS_ENCRYPTION_REQUIRED); - cmp(STATUS_MESSAGE_NOT_FOUND, ERROR_MR_MID_NOT_FOUND); - cmp(STATUS_LOCAL_DISCONNECT, ERROR_NETNAME_DELETED); - cmp(STATUS_REMOTE_DISCONNECT, ERROR_NETNAME_DELETED); - cmp(STATUS_REMOTE_RESOURCES, ERROR_REM_NOT_LIST); - cmp(STATUS_LINK_FAILED, ERROR_UNEXP_NET_ERR); - cmp(STATUS_LINK_TIMEOUT, ERROR_UNEXP_NET_ERR); - cmp(STATUS_INVALID_CONNECTION, ERROR_UNEXP_NET_ERR); - cmp(STATUS_INVALID_ADDRESS, ERROR_UNEXP_NET_ERR); - cmp(STATUS_IO_DEVICE_ERROR, ERROR_IO_DEVICE); - cmp(STATUS_DEVICE_PROTOCOL_ERROR, ERROR_IO_DEVICE); - cmp(STATUS_DRIVER_INTERNAL_ERROR, ERROR_IO_DEVICE); - cmp(STATUS_INVALID_DEVICE_STATE, ERROR_BAD_COMMAND); - cmp(STATUS_DEVICE_CONFIGURATION_ERROR, ERROR_INVALID_PARAMETER); - cmp2(STATUS_SOURCE_ELEMENT_EMPTY, ERROR_SOURCE_ELEMENT_EMPTY); - cmp2(STATUS_DESTINATION_ELEMENT_FULL, ERROR_DESTINATION_ELEMENT_FULL); - cmp2(STATUS_ILLEGAL_ELEMENT_ADDRESS, ERROR_ILLEGAL_ELEMENT_ADDRESS); - cmp2(STATUS_MAGAZINE_NOT_PRESENT, ERROR_MAGAZINE_NOT_PRESENT); - cmp2(STATUS_REINITIALIZATION_NEEDED, ERROR_DEVICE_REINITIALIZATION_NEEDED); - cmp2(STATUS_DEVICE_REQUIRES_CLEANING, ERROR_DEVICE_REQUIRES_CLEANING); - cmp2(STATUS_DEVICE_DOOR_OPEN, ERROR_DEVICE_DOOR_OPEN); - cmp2(STATUS_TRANSPORT_FULL, ERROR_TRANSPORT_FULL); - cmp2(STATUS_CLEANER_CARTRIDGE_INSTALLED, ERROR_CLEANER_CARTRIDGE_INSTALLED); - cmp2(STATUS_REG_NAT_CONSUMPTION, ERROR_REG_NAT_CONSUMPTION); - cmp4(STATUS_ENCRYPTION_FAILED, ERROR_ACCESS_DENIED, ERROR_ENCRYPTION_FAILED); - cmp4(STATUS_DECRYPTION_FAILED, ERROR_ACCESS_DENIED, ERROR_DECRYPTION_FAILED); - cmp4(STATUS_NO_RECOVERY_POLICY, ERROR_ACCESS_DENIED, ERROR_NO_RECOVERY_POLICY); - cmp4(STATUS_NO_EFS, ERROR_ACCESS_DENIED, ERROR_NO_EFS); - cmp4(STATUS_WRONG_EFS, ERROR_ACCESS_DENIED, ERROR_WRONG_EFS); - cmp4(STATUS_NO_USER_KEYS, ERROR_ACCESS_DENIED, ERROR_NO_USER_KEYS); - cmp2(STATUS_FILE_NOT_ENCRYPTED, ERROR_FILE_NOT_ENCRYPTED); - cmp2(STATUS_NOT_EXPORT_FORMAT, ERROR_NOT_EXPORT_FORMAT); - cmp2(STATUS_FILE_ENCRYPTED, ERROR_FILE_ENCRYPTED); - cmp2(STATUS_EFS_ALG_BLOB_TOO_BIG, ERROR_EFS_ALG_BLOB_TOO_BIG); - cmp(STATUS_INVALID_USER_BUFFER, ERROR_INVALID_USER_BUFFER); - cmp(STATUS_SERIAL_NO_DEVICE_INITED, ERROR_SERIAL_NO_DEVICE); - cmp(STATUS_SHARED_IRQ_BUSY, ERROR_IRQ_BUSY); - cmp(STATUS_SERIAL_MORE_WRITES, ERROR_MORE_WRITES); - cmp(STATUS_SERIAL_COUNTER_TIMEOUT, ERROR_COUNTER_TIMEOUT); - cmp(STATUS_FLOPPY_ID_MARK_NOT_FOUND, ERROR_FLOPPY_ID_MARK_NOT_FOUND); - cmp(STATUS_FLOPPY_WRONG_CYLINDER, ERROR_FLOPPY_WRONG_CYLINDER); - cmp(STATUS_FLOPPY_UNKNOWN_ERROR, ERROR_FLOPPY_UNKNOWN_ERROR); - cmp(STATUS_FLOPPY_BAD_REGISTERS, ERROR_FLOPPY_BAD_REGISTERS); - cmp(STATUS_DISK_RECALIBRATE_FAILED, ERROR_DISK_RECALIBRATE_FAILED); - cmp(STATUS_DISK_OPERATION_FAILED, ERROR_DISK_OPERATION_FAILED); - cmp(STATUS_DISK_RESET_FAILED, ERROR_DISK_RESET_FAILED); - cmp(STATUS_EVENTLOG_FILE_CORRUPT, ERROR_EVENTLOG_FILE_CORRUPT); - cmp(STATUS_EVENTLOG_CANT_START, ERROR_EVENTLOG_CANT_START); - cmp(STATUS_NETLOGON_NOT_STARTED, ERROR_NETLOGON_NOT_STARTED); - cmp(STATUS_ACCOUNT_EXPIRED, ERROR_ACCOUNT_EXPIRED); - cmp(STATUS_NETWORK_CREDENTIAL_CONFLICT, ERROR_SESSION_CREDENTIAL_CONFLICT); - cmp(STATUS_REMOTE_SESSION_LIMIT, ERROR_REMOTE_SESSION_LIMIT_EXCEEDED); - cmp(STATUS_INVALID_BUFFER_SIZE, ERROR_INVALID_USER_BUFFER); - cmp(STATUS_INVALID_ADDRESS_COMPONENT, ERROR_INVALID_NETNAME); - cmp(STATUS_INVALID_ADDRESS_WILDCARD, ERROR_INVALID_NETNAME); - cmp(STATUS_ADDRESS_ALREADY_EXISTS, ERROR_DUP_NAME); - cmp(STATUS_ADDRESS_CLOSED, ERROR_NETNAME_DELETED); - cmp(STATUS_CONNECTION_DISCONNECTED, ERROR_NETNAME_DELETED); - cmp(STATUS_CONNECTION_RESET, ERROR_NETNAME_DELETED); - cmp(STATUS_TRANSACTION_ABORTED, ERROR_UNEXP_NET_ERR); - cmp(STATUS_TRANSACTION_TIMED_OUT, ERROR_UNEXP_NET_ERR); - cmp(STATUS_TRANSACTION_NO_RELEASE, ERROR_UNEXP_NET_ERR); - cmp(STATUS_TRANSACTION_NO_MATCH, ERROR_UNEXP_NET_ERR); - cmp(STATUS_TRANSACTION_RESPONDED, ERROR_UNEXP_NET_ERR); - cmp(STATUS_TRANSACTION_INVALID_ID, ERROR_UNEXP_NET_ERR); - cmp(STATUS_TRANSACTION_INVALID_TYPE, ERROR_UNEXP_NET_ERR); - cmp(STATUS_NOT_SERVER_SESSION, ERROR_NOT_SUPPORTED); - cmp(STATUS_NOT_CLIENT_SESSION, ERROR_NOT_SUPPORTED); - cmp(STATUS_USER_MAPPED_FILE, ERROR_USER_MAPPED_FILE); - cmp(STATUS_PLUGPLAY_NO_DEVICE, ERROR_SERVICE_DISABLED); - cmp2(STATUS_WMI_GUID_NOT_FOUND, ERROR_WMI_GUID_NOT_FOUND); - cmp2(STATUS_WMI_INSTANCE_NOT_FOUND, ERROR_WMI_INSTANCE_NOT_FOUND); - cmp2(STATUS_WMI_ITEMID_NOT_FOUND, ERROR_WMI_ITEMID_NOT_FOUND); - cmp2(STATUS_WMI_TRY_AGAIN, ERROR_WMI_TRY_AGAIN); - cmp2(STATUS_WMI_READ_ONLY, ERROR_WMI_READ_ONLY); - cmp2(STATUS_WMI_SET_FAILURE, ERROR_WMI_SET_FAILURE); - cmp2(STATUS_WMI_NOT_SUPPORTED, ERROR_NOT_SUPPORTED); - cmp2(STATUS_WMI_GUID_DISCONNECTED, ERROR_WMI_GUID_DISCONNECTED); - cmp2(STATUS_WMI_ALREADY_DISABLED, ERROR_WMI_ALREADY_DISABLED); - cmp2(STATUS_WMI_ALREADY_ENABLED, ERROR_WMI_ALREADY_ENABLED); - cmp2(STATUS_COPY_PROTECTION_FAILURE, STG_E_STATUS_COPY_PROTECTION_FAILURE); - cmp2(STATUS_CSS_AUTHENTICATION_FAILURE, STG_E_CSS_AUTHENTICATION_FAILURE); - cmp2(STATUS_CSS_KEY_NOT_PRESENT, STG_E_CSS_KEY_NOT_PRESENT); - cmp2(STATUS_CSS_KEY_NOT_ESTABLISHED, STG_E_CSS_KEY_NOT_ESTABLISHED); - cmp2(STATUS_CSS_SCRAMBLED_SECTOR, STG_E_CSS_SCRAMBLED_SECTOR); - cmp2(STATUS_CSS_REGION_MISMATCH, STG_E_CSS_REGION_MISMATCH); - cmp2(STATUS_CSS_RESETS_EXHAUSTED, STG_E_RESETS_EXHAUSTED); - cmp(RPC_NT_SERVER_UNAVAILABLE, RPC_S_SERVER_UNAVAILABLE); - cmp(RPC_NT_INVALID_STRING_BINDING, RPC_S_INVALID_STRING_BINDING); - cmp(RPC_NT_WRONG_KIND_OF_BINDING, RPC_S_WRONG_KIND_OF_BINDING); - cmp(RPC_NT_PROTSEQ_NOT_SUPPORTED, RPC_S_PROTSEQ_NOT_SUPPORTED); - cmp(RPC_NT_INVALID_RPC_PROTSEQ, RPC_S_INVALID_RPC_PROTSEQ); - cmp(RPC_NT_INVALID_STRING_UUID, RPC_S_INVALID_STRING_UUID); - cmp(RPC_NT_INVALID_ENDPOINT_FORMAT, RPC_S_INVALID_ENDPOINT_FORMAT); - cmp(RPC_NT_INVALID_NET_ADDR, RPC_S_INVALID_NET_ADDR); - cmp(RPC_NT_NO_ENDPOINT_FOUND, RPC_S_NO_ENDPOINT_FOUND); - cmp(RPC_NT_INVALID_TIMEOUT, RPC_S_INVALID_TIMEOUT); - cmp(RPC_NT_OBJECT_NOT_FOUND, RPC_S_OBJECT_NOT_FOUND); - cmp(RPC_NT_ALREADY_REGISTERED, RPC_S_ALREADY_REGISTERED); - cmp(RPC_NT_TYPE_ALREADY_REGISTERED, RPC_S_TYPE_ALREADY_REGISTERED); - cmp(RPC_NT_ALREADY_LISTENING, RPC_S_ALREADY_LISTENING); - cmp(RPC_NT_NO_PROTSEQS_REGISTERED, RPC_S_NO_PROTSEQS_REGISTERED); - cmp(RPC_NT_NOT_LISTENING, RPC_S_NOT_LISTENING); - cmp(RPC_NT_UNKNOWN_MGR_TYPE, RPC_S_UNKNOWN_MGR_TYPE); - cmp(RPC_NT_UNKNOWN_IF, RPC_S_UNKNOWN_IF); - cmp(RPC_NT_NO_BINDINGS, RPC_S_NO_BINDINGS); - cmp(RPC_NT_NO_MORE_BINDINGS, RPC_S_NO_MORE_BINDINGS); - cmp(RPC_NT_NO_PROTSEQS, RPC_S_NO_PROTSEQS); - cmp(RPC_NT_CANT_CREATE_ENDPOINT, RPC_S_CANT_CREATE_ENDPOINT); - cmp(RPC_NT_OUT_OF_RESOURCES, RPC_S_OUT_OF_RESOURCES); - cmp(RPC_NT_SERVER_TOO_BUSY, RPC_S_SERVER_TOO_BUSY); - cmp(RPC_NT_INVALID_NETWORK_OPTIONS, RPC_S_INVALID_NETWORK_OPTIONS); - cmp(RPC_NT_NO_CALL_ACTIVE, RPC_S_NO_CALL_ACTIVE); - cmp(RPC_NT_CALL_FAILED, RPC_S_CALL_FAILED); - cmp(RPC_NT_CALL_FAILED_DNE, RPC_S_CALL_FAILED_DNE); - cmp(RPC_NT_PROTOCOL_ERROR, RPC_S_PROTOCOL_ERROR); - cmp(RPC_NT_UNSUPPORTED_TRANS_SYN, RPC_S_UNSUPPORTED_TRANS_SYN); - cmp(RPC_NT_UNSUPPORTED_TYPE, RPC_S_UNSUPPORTED_TYPE); - cmp(RPC_NT_INVALID_TAG, RPC_S_INVALID_TAG); - cmp(RPC_NT_INVALID_BOUND, RPC_S_INVALID_BOUND); - cmp(RPC_NT_NO_ENTRY_NAME, RPC_S_NO_ENTRY_NAME); - cmp(RPC_NT_INVALID_NAME_SYNTAX, RPC_S_INVALID_NAME_SYNTAX); - cmp(RPC_NT_UNSUPPORTED_NAME_SYNTAX, RPC_S_UNSUPPORTED_NAME_SYNTAX); - cmp(RPC_NT_UUID_NO_ADDRESS, RPC_S_UUID_NO_ADDRESS); - cmp(RPC_NT_DUPLICATE_ENDPOINT, RPC_S_DUPLICATE_ENDPOINT); - cmp(RPC_NT_UNKNOWN_AUTHN_TYPE, RPC_S_UNKNOWN_AUTHN_TYPE); - cmp(RPC_NT_MAX_CALLS_TOO_SMALL, RPC_S_MAX_CALLS_TOO_SMALL); - cmp(RPC_NT_STRING_TOO_LONG, RPC_S_STRING_TOO_LONG); - cmp(RPC_NT_PROTSEQ_NOT_FOUND, RPC_S_PROTSEQ_NOT_FOUND); - cmp(RPC_NT_PROCNUM_OUT_OF_RANGE, RPC_S_PROCNUM_OUT_OF_RANGE); - cmp(RPC_NT_BINDING_HAS_NO_AUTH, RPC_S_BINDING_HAS_NO_AUTH); - cmp(RPC_NT_UNKNOWN_AUTHN_SERVICE, RPC_S_UNKNOWN_AUTHN_SERVICE); - cmp(RPC_NT_UNKNOWN_AUTHN_LEVEL, RPC_S_UNKNOWN_AUTHN_LEVEL); - cmp(RPC_NT_INVALID_AUTH_IDENTITY, RPC_S_INVALID_AUTH_IDENTITY); - cmp(RPC_NT_UNKNOWN_AUTHZ_SERVICE, RPC_S_UNKNOWN_AUTHZ_SERVICE); - cmp(EPT_NT_INVALID_ENTRY, EPT_S_INVALID_ENTRY); - cmp(EPT_NT_CANT_PERFORM_OP, EPT_S_CANT_PERFORM_OP); - cmp(EPT_NT_NOT_REGISTERED, EPT_S_NOT_REGISTERED); - cmp(RPC_NT_NOTHING_TO_EXPORT, RPC_S_NOTHING_TO_EXPORT); - cmp(RPC_NT_INCOMPLETE_NAME, RPC_S_INCOMPLETE_NAME); - cmp(RPC_NT_INVALID_VERS_OPTION, RPC_S_INVALID_VERS_OPTION); - cmp(RPC_NT_NO_MORE_MEMBERS, RPC_S_NO_MORE_MEMBERS); - cmp(RPC_NT_NOT_ALL_OBJS_UNEXPORTED, RPC_S_NOT_ALL_OBJS_UNEXPORTED); - cmp(RPC_NT_INTERFACE_NOT_FOUND, RPC_S_INTERFACE_NOT_FOUND); - cmp(RPC_NT_ENTRY_ALREADY_EXISTS, RPC_S_ENTRY_ALREADY_EXISTS); - cmp(RPC_NT_ENTRY_NOT_FOUND, RPC_S_ENTRY_NOT_FOUND); - cmp(RPC_NT_NAME_SERVICE_UNAVAILABLE, RPC_S_NAME_SERVICE_UNAVAILABLE); - cmp(RPC_NT_INVALID_NAF_ID, RPC_S_INVALID_NAF_ID); - cmp(RPC_NT_CANNOT_SUPPORT, RPC_S_CANNOT_SUPPORT); - cmp(RPC_NT_NO_CONTEXT_AVAILABLE, RPC_S_NO_CONTEXT_AVAILABLE); - cmp(RPC_NT_INTERNAL_ERROR, RPC_S_INTERNAL_ERROR); - cmp(RPC_NT_ZERO_DIVIDE, RPC_S_ZERO_DIVIDE); - cmp(RPC_NT_ADDRESS_ERROR, RPC_S_ADDRESS_ERROR); - cmp(RPC_NT_FP_DIV_ZERO, RPC_S_FP_DIV_ZERO); - cmp(RPC_NT_FP_UNDERFLOW, RPC_S_FP_UNDERFLOW); - cmp(RPC_NT_FP_OVERFLOW, RPC_S_FP_OVERFLOW); - cmp(RPC_NT_NO_MORE_ENTRIES, RPC_X_NO_MORE_ENTRIES); - cmp(RPC_NT_SS_CHAR_TRANS_OPEN_FAIL, RPC_X_SS_CHAR_TRANS_OPEN_FAIL); - cmp(RPC_NT_SS_CHAR_TRANS_SHORT_FILE, RPC_X_SS_CHAR_TRANS_SHORT_FILE); - cmp(RPC_NT_SS_CONTEXT_MISMATCH, ERROR_INVALID_HANDLE); - cmp(RPC_NT_SS_CONTEXT_DAMAGED, RPC_X_SS_CONTEXT_DAMAGED); - cmp(RPC_NT_SS_HANDLES_MISMATCH, RPC_X_SS_HANDLES_MISMATCH); - cmp(RPC_NT_SS_CANNOT_GET_CALL_HANDLE, RPC_X_SS_CANNOT_GET_CALL_HANDLE); - cmp(RPC_NT_NULL_REF_POINTER, RPC_X_NULL_REF_POINTER); - cmp(RPC_NT_ENUM_VALUE_OUT_OF_RANGE, RPC_X_ENUM_VALUE_OUT_OF_RANGE); - cmp(RPC_NT_BYTE_COUNT_TOO_SMALL, RPC_X_BYTE_COUNT_TOO_SMALL); - cmp(RPC_NT_BAD_STUB_DATA, RPC_X_BAD_STUB_DATA); - cmp(RPC_NT_INVALID_OBJECT, RPC_S_INVALID_OBJECT); - cmp(STATUS_NO_TRUST_LSA_SECRET, ERROR_NO_TRUST_LSA_SECRET); - cmp(STATUS_NO_TRUST_SAM_ACCOUNT, ERROR_NO_TRUST_SAM_ACCOUNT); - cmp(STATUS_TRUSTED_DOMAIN_FAILURE, ERROR_TRUSTED_DOMAIN_FAILURE); - cmp(STATUS_TRUSTED_RELATIONSHIP_FAILURE, ERROR_TRUSTED_RELATIONSHIP_FAILURE); - cmp(STATUS_TRUST_FAILURE, ERROR_TRUST_FAILURE); - cmp(RPC_NT_CALL_IN_PROGRESS, RPC_S_CALL_IN_PROGRESS); - cmp(STATUS_LOG_FILE_FULL, ERROR_LOG_FILE_FULL); - cmp(STATUS_EVENTLOG_FILE_CHANGED, ERROR_EVENTLOG_FILE_CHANGED); - cmp(STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT, ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT); - cmp(STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT, ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT); - cmp(STATUS_NOLOGON_SERVER_TRUST_ACCOUNT, ERROR_NOLOGON_SERVER_TRUST_ACCOUNT); - cmp(STATUS_DOMAIN_TRUST_INCONSISTENT, ERROR_DOMAIN_TRUST_INCONSISTENT); - cmp(STATUS_NO_USER_SESSION_KEY, ERROR_NO_USER_SESSION_KEY); - cmp(STATUS_POSSIBLE_DEADLOCK, ERROR_POSSIBLE_DEADLOCK); - cmp(STATUS_IMAGE_ALREADY_LOADED, ERROR_SERVICE_ALREADY_RUNNING); - cmp(RPC_NT_GROUP_MEMBER_NOT_FOUND, RPC_S_GROUP_MEMBER_NOT_FOUND); - cmp(RPC_NT_NO_INTERFACES, RPC_S_NO_INTERFACES); - cmp(RPC_NT_CALL_CANCELLED, RPC_S_CALL_CANCELLED); - cmp(RPC_NT_BINDING_INCOMPLETE, RPC_S_BINDING_INCOMPLETE); - cmp(RPC_NT_COMM_FAILURE, RPC_S_COMM_FAILURE); - cmp(RPC_NT_UNSUPPORTED_AUTHN_LEVEL, RPC_S_UNSUPPORTED_AUTHN_LEVEL); - cmp(RPC_NT_NO_PRINC_NAME, RPC_S_NO_PRINC_NAME); - cmp(RPC_NT_NOT_RPC_ERROR, RPC_S_NOT_RPC_ERROR); - cmp(RPC_NT_UUID_LOCAL_ONLY, RPC_S_UUID_LOCAL_ONLY); - cmp(RPC_NT_SEC_PKG_ERROR, RPC_S_SEC_PKG_ERROR); - cmp(RPC_NT_NOT_CANCELLED, RPC_S_NOT_CANCELLED); - cmp(RPC_NT_INVALID_ES_ACTION, RPC_X_INVALID_ES_ACTION); - cmp(RPC_NT_WRONG_ES_VERSION, RPC_X_WRONG_ES_VERSION); - cmp(RPC_NT_WRONG_STUB_VERSION, RPC_X_WRONG_STUB_VERSION); - cmp(RPC_NT_INVALID_PIPE_OBJECT, RPC_X_INVALID_PIPE_OBJECT); - cmp(RPC_NT_INVALID_PIPE_OPERATION, RPC_X_INVALID_PIPE_OPERATION); - cmp(RPC_NT_WRONG_PIPE_VERSION, RPC_X_WRONG_PIPE_VERSION); - cmp(EPT_NT_CANT_CREATE, EPT_S_CANT_CREATE); - cmp(RPC_NT_SEND_INCOMPLETE, RPC_S_SEND_INCOMPLETE); - cmp2(RPC_NT_INVALID_ASYNC_HANDLE, RPC_S_INVALID_ASYNC_HANDLE); - cmp2(RPC_NT_INVALID_ASYNC_CALL, RPC_S_INVALID_ASYNC_CALL); - cmp2(RPC_NT_PIPE_CLOSED, RPC_X_PIPE_CLOSED); - cmp2(RPC_NT_PIPE_EMPTY, RPC_X_PIPE_EMPTY); - cmp2(RPC_NT_PIPE_DISCIPLINE_ERROR, RPC_X_PIPE_DISCIPLINE_ERROR); - cmp(STATUS_NO_BROWSER_SERVERS_FOUND, ERROR_NO_BROWSER_SERVERS_FOUND); - cmp(STATUS_MAPPED_ALIGNMENT, ERROR_MAPPED_ALIGNMENT); - cmp(STATUS_CONNECTION_IN_USE, ERROR_DEVICE_IN_USE); - cmp(STATUS_VERIFY_REQUIRED, ERROR_MEDIA_CHANGED); - cmp(STATUS_ALREADY_DISCONNECTED, ERROR_ACTIVE_CONNECTIONS); - cmp(STATUS_CONNECTION_REFUSED, ERROR_CONNECTION_REFUSED); - cmp(STATUS_GRACEFUL_DISCONNECT, ERROR_GRACEFUL_DISCONNECT); - cmp(STATUS_ADDRESS_ALREADY_ASSOCIATED, ERROR_ADDRESS_ALREADY_ASSOCIATED); - cmp(STATUS_ADDRESS_NOT_ASSOCIATED, ERROR_ADDRESS_NOT_ASSOCIATED); - cmp(STATUS_CONNECTION_INVALID, ERROR_CONNECTION_INVALID); - cmp(STATUS_CONNECTION_ACTIVE, ERROR_CONNECTION_ACTIVE); - cmp(STATUS_NETWORK_UNREACHABLE, ERROR_NETWORK_UNREACHABLE); - cmp(STATUS_HOST_UNREACHABLE, ERROR_HOST_UNREACHABLE); - cmp2(STATUS_HOST_DOWN, ERROR_HOST_DOWN); - cmp(STATUS_PROTOCOL_UNREACHABLE, ERROR_PROTOCOL_UNREACHABLE); - cmp(STATUS_PORT_UNREACHABLE, ERROR_PORT_UNREACHABLE); - cmp(STATUS_REQUEST_ABORTED, ERROR_REQUEST_ABORTED); - cmp(STATUS_CONNECTION_ABORTED, ERROR_CONNECTION_ABORTED); - cmp(STATUS_CONNECTION_COUNT_LIMIT, ERROR_CONNECTION_COUNT_LIMIT); - cmp(STATUS_PATH_NOT_COVERED, ERROR_HOST_UNREACHABLE); - cmp(STATUS_LOGIN_TIME_RESTRICTION, ERROR_LOGIN_TIME_RESTRICTION); - cmp(STATUS_LOGIN_WKSTA_RESTRICTION, ERROR_LOGIN_WKSTA_RESTRICTION); - cmp(STATUS_LICENSE_QUOTA_EXCEEDED, ERROR_LICENSE_QUOTA_EXCEEDED); - cmp(STATUS_RESOURCE_NOT_OWNED, ERROR_NOT_OWNER); - cmp(STATUS_DUPLICATE_OBJECTID, STATUS_DUPLICATE_OBJECTID); - cmp(STATUS_OBJECTID_EXISTS, STATUS_OBJECTID_EXISTS); - cmp2(STATUS_OBJECTID_NOT_FOUND, ERROR_FILE_NOT_FOUND); - cmp2(STATUS_MFT_TOO_FRAGMENTED, ERROR_DISK_TOO_FRAGMENTED); - cmp(SEC_E_INSUFFICIENT_MEMORY, ERROR_NO_SYSTEM_RESOURCES); - cmp(SEC_E_INVALID_HANDLE, ERROR_INVALID_HANDLE); - cmp(SEC_E_UNSUPPORTED_FUNCTION, ERROR_INVALID_FUNCTION); - cmp(SEC_E_TARGET_UNKNOWN, ERROR_BAD_NETPATH); - cmp(SEC_E_INTERNAL_ERROR, ERROR_INTERNAL_ERROR); - cmp(SEC_E_SECPKG_NOT_FOUND, ERROR_NO_SUCH_PACKAGE); - cmp(SEC_E_NOT_OWNER, ERROR_NOT_OWNER); - cmp(SEC_E_CANNOT_INSTALL, ERROR_NO_SUCH_PACKAGE); - cmp(SEC_E_INVALID_TOKEN, ERROR_INVALID_PARAMETER); - cmp(SEC_E_CANNOT_PACK, ERROR_INVALID_PARAMETER); - cmp(SEC_E_QOP_NOT_SUPPORTED, ERROR_NOT_SUPPORTED); - cmp(SEC_E_NO_IMPERSONATION, ERROR_CANNOT_IMPERSONATE); - cmp2(SEC_E_MULTIPLE_ACCOUNTS, ERROR_CANNOT_IMPERSONATE); - cmp(SEC_E_LOGON_DENIED, ERROR_LOGON_FAILURE); - cmp(SEC_E_UNKNOWN_CREDENTIALS, ERROR_INVALID_PARAMETER); - cmp2(SEC_E_INCOMPLETE_CREDENTIALS, ERROR_INVALID_PARAMETER); - cmp(SEC_E_NO_CREDENTIALS, ERROR_NO_SUCH_LOGON_SESSION); - cmp(SEC_E_MESSAGE_ALTERED, ERROR_ACCESS_DENIED); - cmp(SEC_E_OUT_OF_SEQUENCE, ERROR_ACCESS_DENIED); - cmp(SEC_E_NO_AUTHENTICATING_AUTHORITY, ERROR_NO_LOGON_SERVERS); - cmp(SEC_E_BAD_PKGID, ERROR_NO_SUCH_PACKAGE); - cmp4(SEC_E_WRONG_PRINCIPAL, ERROR_WRONG_TARGET_NAME, 1462); - cmp2(SEC_E_INCOMPLETE_MESSAGE, ERROR_INVALID_USER_BUFFER); - cmp2(SEC_E_BUFFER_TOO_SMALL, ERROR_INSUFFICIENT_BUFFER); - cmp2(SEC_E_UNTRUSTED_ROOT, ERROR_TRUST_FAILURE); - cmp2(SEC_E_ILLEGAL_MESSAGE, ERROR_INVALID_PARAMETER); - cmp2(SEC_E_CERT_UNKNOWN, ERROR_INVALID_PARAMETER); - cmp2(SEC_E_CERT_EXPIRED, ERROR_PASSWORD_EXPIRED); - cmp2(SEC_E_ENCRYPT_FAILURE, ERROR_ENCRYPTION_FAILED); - cmp2(SEC_E_DECRYPT_FAILURE, ERROR_DECRYPTION_FAILED); - cmp2(SEC_E_ALGORITHM_MISMATCH, ERROR_INVALID_FUNCTION); - cmp2(SEC_E_CONTEXT_EXPIRED, ERROR_CONTEXT_EXPIRED); - cmp2(STATUS_BAD_BINDINGS, SEC_E_BAD_BINDINGS); - cmp2(TRUST_E_CERT_SIGNATURE, ERROR_MUTUAL_AUTH_FAILED); - cmp2(CRYPT_E_REVOKED, ERROR_MUTUAL_AUTH_FAILED); - cmp2(CRYPT_E_NO_REVOCATION_CHECK, ERROR_MUTUAL_AUTH_FAILED); - cmp2(CRYPT_E_REVOCATION_OFFLINE, ERROR_MUTUAL_AUTH_FAILED); - cmp2(STATUS_SHUTDOWN_IN_PROGRESS, ERROR_SHUTDOWN_IN_PROGRESS); - cmp2(STATUS_SERVER_SHUTDOWN_IN_PROGRESS, ERROR_SERVER_SHUTDOWN_IN_PROGRESS); - cmp4(STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY, ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY, 1922); - cmp4(STATUS_DS_NO_ATTRIBUTE_OR_VALUE, ERROR_DS_NO_ATTRIBUTE_OR_VALUE, 1923); - cmp4(STATUS_DS_INVALID_ATTRIBUTE_SYNTAX, ERROR_DS_INVALID_ATTRIBUTE_SYNTAX, 1924); - cmp4(STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED, ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED, 1925); - cmp4(STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS, ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS, 1926); - cmp4(STATUS_DS_BUSY, ERROR_DS_BUSY, 1927); - cmp4(STATUS_DS_UNAVAILABLE, ERROR_DS_UNAVAILABLE, 1928); - cmp4(STATUS_DS_NO_RIDS_ALLOCATED, ERROR_DS_NO_RIDS_ALLOCATED, 1929); - cmp4(STATUS_DS_NO_MORE_RIDS, ERROR_DS_NO_MORE_RIDS, 1930); - cmp4(STATUS_DS_INCORRECT_ROLE_OWNER, ERROR_DS_INCORRECT_ROLE_OWNER, 1931); - cmp4(STATUS_DS_RIDMGR_INIT_ERROR, ERROR_DS_RIDMGR_INIT_ERROR, 1932); - cmp4(STATUS_DS_OBJ_CLASS_VIOLATION, ERROR_DS_OBJ_CLASS_VIOLATION, 1933); - cmp4(STATUS_DS_CANT_ON_NON_LEAF, ERROR_DS_CANT_ON_NON_LEAF, 1934); - cmp4(STATUS_DS_CANT_ON_RDN, ERROR_DS_CANT_ON_RDN, 1935); - cmp4(STATUS_DS_CROSS_DOM_MOVE_FAILED, ERROR_DS_CROSS_DOM_MOVE_ERROR, 1937); - cmp4(STATUS_DS_GC_NOT_AVAILABLE, ERROR_DS_GC_NOT_AVAILABLE, 1938); - cmp2(STATUS_DS_CANT_MOD_OBJ_CLASS, ERROR_DS_CANT_MOD_OBJ_CLASS); - cmp2(STATUS_DS_ADMIN_LIMIT_EXCEEDED, ERROR_DS_ADMIN_LIMIT_EXCEEDED); - cmp2(STATUS_DIRECTORY_SERVICE_REQUIRED, ERROR_DS_DS_REQUIRED); - cmp2(STATUS_DS_SAM_INIT_FAILURE, ERROR_DS_SAM_INIT_FAILURE); - cmp2(STATUS_DS_CANT_START, ERROR_DS_CANT_START); - cmp2(STATUS_DS_INIT_FAILURE, ERROR_DS_INIT_FAILURE); - cmp2(STATUS_SAM_INIT_FAILURE, ERROR_SAM_INIT_FAILURE); - cmp2(STATUS_DS_SENSITIVE_GROUP_VIOLATION, ERROR_DS_SENSITIVE_GROUP_VIOLATION); - cmp2(STATUS_DS_CANT_MOD_PRIMARYGROUPID, ERROR_DS_CANT_MOD_PRIMARYGROUPID); - cmp2(STATUS_DS_INVALID_GROUP_TYPE, ERROR_DS_INVALID_GROUP_TYPE); - cmp2(STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN, ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN); - cmp2(STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN, ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN); - cmp2(STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER, ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER); - cmp2(STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER, ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER); - cmp2(STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER, ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER); - cmp2(STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER, ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER); - cmp2(STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER, ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER); - cmp2(STATUS_DS_HAVE_PRIMARY_MEMBERS, ERROR_DS_HAVE_PRIMARY_MEMBERS); - cmp2(STATUS_DS_GC_REQUIRED, ERROR_DS_GC_REQUIRED); - cmp2(STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY, ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY); - cmp2(STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS, ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS); - cmp2(STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED,ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED); - cmp2(STATUS_SAM_NEED_BOOTKEY_PASSWORD, ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD); - cmp2(STATUS_SAM_NEED_BOOTKEY_FLOPPY, ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY); - cmp2(STATUS_DS_INIT_FAILURE_CONSOLE, ERROR_DS_INIT_FAILURE_CONSOLE); - cmp2(STATUS_DS_SAM_INIT_FAILURE_CONSOLE, ERROR_DS_SAM_INIT_FAILURE_CONSOLE); - cmp2(STATUS_UNFINISHED_CONTEXT_DELETED, SEC_E_UNFINISHED_CONTEXT_DELETED); - cmp2(STATUS_NO_TGT_REPLY, SEC_E_NO_TGT_REPLY); - cmp2(STATUS_NO_IP_ADDRESSES, SEC_E_NO_IP_ADDRESSES); - cmp2(STATUS_WRONG_CREDENTIAL_HANDLE, SEC_E_WRONG_CREDENTIAL_HANDLE); - cmp2(STATUS_CRYPTO_SYSTEM_INVALID, SEC_E_CRYPTO_SYSTEM_INVALID); - cmp2(STATUS_MAX_REFERRALS_EXCEEDED, SEC_E_MAX_REFERRALS_EXCEEDED); - cmp2(STATUS_MUST_BE_KDC, SEC_E_MUST_BE_KDC); - cmp2(STATUS_STRONG_CRYPTO_NOT_SUPPORTED, SEC_E_STRONG_CRYPTO_NOT_SUPPORTED); - cmp2(STATUS_TOO_MANY_PRINCIPALS, SEC_E_TOO_MANY_PRINCIPALS); - cmp2(STATUS_NO_PA_DATA, SEC_E_NO_PA_DATA); - cmp2(STATUS_PKINIT_NAME_MISMATCH, SEC_E_PKINIT_NAME_MISMATCH); - cmp2(STATUS_SMARTCARD_LOGON_REQUIRED, SEC_E_SMARTCARD_LOGON_REQUIRED); - cmp2(STATUS_KDC_INVALID_REQUEST, SEC_E_KDC_INVALID_REQUEST); - cmp2(STATUS_KDC_UNABLE_TO_REFER, SEC_E_KDC_UNABLE_TO_REFER); - cmp2(STATUS_KDC_UNKNOWN_ETYPE, SEC_E_KDC_UNKNOWN_ETYPE); - cmp2(STATUS_UNSUPPORTED_PREAUTH, SEC_E_UNSUPPORTED_PREAUTH); - cmp4(STATUS_SHARED_POLICY, ERROR_SHARED_POLICY, 1939); - cmp4(STATUS_POLICY_OBJECT_NOT_FOUND, ERROR_POLICY_OBJECT_NOT_FOUND, 1940); - cmp4(STATUS_POLICY_ONLY_IN_DS, ERROR_POLICY_ONLY_IN_DS, 1941); - cmp4(STATUS_DEVICE_REMOVED, ERROR_DEVICE_REMOVED, 617); - cmp2(STATUS_RETRY, ERROR_RETRY); - cmp2(STATUS_NOT_SUPPORTED_ON_SBS, ERROR_NOT_SUPPORTED_ON_SBS); - cmp2(STATUS_DRIVER_BLOCKED_CRITICAL, ERROR_DRIVER_BLOCKED); - cmp2(STATUS_DRIVER_BLOCKED, ERROR_DRIVER_BLOCKED); - cmp2(STATUS_PRENT4_MACHINE_ACCOUNT, ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4); - cmp2(STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER,ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER); - cmp2(STATUS_DS_SHUTTING_DOWN, ERROR_DS_SHUTTING_DOWN); - cmp2(STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT, ERROR_ACCESS_DISABLED_BY_POLICY); - cmp2(STATUS_ACCESS_DISABLED_BY_POLICY_PATH, ERROR_ACCESS_DISABLED_BY_POLICY); - cmp2(STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER, ERROR_ACCESS_DISABLED_BY_POLICY); - cmp2(STATUS_ACCESS_DISABLED_BY_POLICY_OTHER, ERROR_ACCESS_DISABLED_BY_POLICY); - cmp2(STATUS_FAIL_CHECK, ERROR_INVALID_PARAMETER); - cmp2(STATUS_CTX_CLOSE_PENDING, ERROR_CTX_CLOSE_PENDING); - cmp2(STATUS_CTX_NO_OUTBUF, ERROR_CTX_NO_OUTBUF); - cmp2(STATUS_CTX_MODEM_INF_NOT_FOUND, ERROR_CTX_MODEM_INF_NOT_FOUND); - cmp2(STATUS_CTX_INVALID_MODEMNAME, ERROR_CTX_INVALID_MODEMNAME); - cmp2(STATUS_CTX_RESPONSE_ERROR, ERROR_CTX_MODEM_RESPONSE_ERROR); - cmp2(STATUS_CTX_MODEM_RESPONSE_TIMEOUT, ERROR_CTX_MODEM_RESPONSE_TIMEOUT); - cmp2(STATUS_CTX_MODEM_RESPONSE_NO_CARRIER, ERROR_CTX_MODEM_RESPONSE_NO_CARRIER); - cmp2(STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE, ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE); - cmp2(STATUS_CTX_MODEM_RESPONSE_BUSY, ERROR_CTX_MODEM_RESPONSE_BUSY); - cmp2(STATUS_CTX_MODEM_RESPONSE_VOICE, ERROR_CTX_MODEM_RESPONSE_VOICE); - cmp2(STATUS_CTX_TD_ERROR, ERROR_CTX_TD_ERROR); - cmp2(STATUS_CTX_WINSTATION_NAME_INVALID, ERROR_CTX_WINSTATION_NAME_INVALID); - cmp2(STATUS_CTX_WINSTATION_NOT_FOUND, ERROR_CTX_WINSTATION_NOT_FOUND); - cmp2(STATUS_CTX_WINSTATION_NAME_COLLISION, ERROR_CTX_WINSTATION_ALREADY_EXISTS); - cmp2(STATUS_CTX_WINSTATION_BUSY, ERROR_CTX_WINSTATION_BUSY); - cmp2(STATUS_CTX_GRAPHICS_INVALID, ERROR_CTX_GRAPHICS_INVALID); - cmp2(STATUS_CTX_BAD_VIDEO_MODE, ERROR_CTX_BAD_VIDEO_MODE); - cmp2(STATUS_CTX_NOT_CONSOLE, ERROR_CTX_NOT_CONSOLE); - cmp2(STATUS_CTX_CLIENT_QUERY_TIMEOUT, ERROR_CTX_CLIENT_QUERY_TIMEOUT); - cmp2(STATUS_CTX_CONSOLE_DISCONNECT, ERROR_CTX_CONSOLE_DISCONNECT); - cmp2(STATUS_CTX_CONSOLE_CONNECT, ERROR_CTX_CONSOLE_CONNECT); - cmp2(STATUS_CTX_SHADOW_DENIED, ERROR_CTX_SHADOW_DENIED); - cmp2(STATUS_CTX_SHADOW_INVALID, ERROR_CTX_SHADOW_INVALID); - cmp2(STATUS_CTX_SHADOW_DISABLED, ERROR_CTX_SHADOW_DISABLED); - cmp2(STATUS_CTX_WINSTATION_ACCESS_DENIED, ERROR_CTX_WINSTATION_ACCESS_DENIED); - cmp2(STATUS_CTX_INVALID_PD, ERROR_CTX_INVALID_PD); - cmp2(STATUS_CTX_PD_NOT_FOUND, ERROR_CTX_PD_NOT_FOUND); - cmp2(STATUS_CTX_INVALID_WD, ERROR_CTX_INVALID_WD); - cmp2(STATUS_CTX_WD_NOT_FOUND, ERROR_CTX_WD_NOT_FOUND); - cmp2(STATUS_CTX_CLIENT_LICENSE_IN_USE, ERROR_CTX_CLIENT_LICENSE_IN_USE); - cmp2(STATUS_CTX_CLIENT_LICENSE_NOT_SET, ERROR_CTX_CLIENT_LICENSE_NOT_SET); - cmp2(STATUS_CTX_LICENSE_NOT_AVAILABLE, ERROR_CTX_LICENSE_NOT_AVAILABLE); - cmp2(STATUS_CTX_LICENSE_CLIENT_INVALID, ERROR_CTX_LICENSE_CLIENT_INVALID); - cmp2(STATUS_CTX_LICENSE_EXPIRED, ERROR_CTX_LICENSE_EXPIRED); - cmp2(STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE, ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE); - cmp2(STATUS_CTX_SHADOW_NOT_RUNNING, ERROR_CTX_SHADOW_NOT_RUNNING); - cmp2(STATUS_LICENSE_VIOLATION, ERROR_CTX_LICENSE_NOT_AVAILABLE); -#if 0 - /* FIXME - unknown STATUS values, see bug 1001 */ - cmp(STATUS_ENDPOINT_CLOSED, ERROR_DEV_NOT_EXIST); - cmp(STATUS_DISCONNECTED, ERROR_DEV_NOT_EXIST); - cmp(STATUS_NONEXISTENT_NET_NAME, ERROR_DEV_NOT_EXIST); -#endif - cmp2(STATUS_NETWORK_SESSION_EXPIRED, ERROR_NO_USER_SESSION_KEY); - cmp2(STATUS_FILES_OPEN, ERROR_OPEN_FILES); - cmp2(STATUS_SXS_SECTION_NOT_FOUND, ERROR_SXS_SECTION_NOT_FOUND); - cmp2(STATUS_SXS_CANT_GEN_ACTCTX, ERROR_SXS_CANT_GEN_ACTCTX); - cmp2(STATUS_SXS_INVALID_ACTCTXDATA_FORMAT, ERROR_SXS_INVALID_ACTCTXDATA_FORMAT); - cmp2(STATUS_SXS_ASSEMBLY_NOT_FOUND, ERROR_SXS_ASSEMBLY_NOT_FOUND); - cmp2(STATUS_SXS_MANIFEST_FORMAT_ERROR, ERROR_SXS_MANIFEST_FORMAT_ERROR); - cmp2(STATUS_SXS_MANIFEST_PARSE_ERROR, ERROR_SXS_MANIFEST_PARSE_ERROR); - cmp2(STATUS_SXS_ACTIVATION_CONTEXT_DISABLED, ERROR_SXS_ACTIVATION_CONTEXT_DISABLED); - cmp2(STATUS_SXS_KEY_NOT_FOUND, ERROR_SXS_KEY_NOT_FOUND); - cmp2(STATUS_SXS_WRONG_SECTION_TYPE, ERROR_SXS_WRONG_SECTION_TYPE); - cmp2(STATUS_SXS_THREAD_QUERIES_DISABLED, ERROR_SXS_THREAD_QUERIES_DISABLED); - cmp2(STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET, ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET); - cmp2(STATUS_REDIRECTOR_STARTED, ERROR_SERVICE_ALREADY_RUNNING); - cmp2(STATUS_AUDITING_DISABLED, ERROR_AUDITING_DISABLED); - cmp2(STATUS_CLUSTER_NODE_ALREADY_UP, ERROR_CLUSTER_NODE_ALREADY_UP); - cmp2(STATUS_CLUSTER_NODE_ALREADY_DOWN, ERROR_CLUSTER_NODE_ALREADY_DOWN); - cmp2(STATUS_CLUSTER_NETWORK_ALREADY_ONLINE, ERROR_CLUSTER_NETWORK_ALREADY_ONLINE); - cmp2(STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE, ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE); - cmp2(STATUS_CLUSTER_NODE_ALREADY_MEMBER, ERROR_CLUSTER_NODE_ALREADY_MEMBER); - cmp2(STATUS_CLUSTER_INVALID_NODE, ERROR_CLUSTER_INVALID_NODE); - cmp2(STATUS_CLUSTER_NODE_EXISTS, ERROR_CLUSTER_NODE_EXISTS); - cmp2(STATUS_CLUSTER_JOIN_IN_PROGRESS, ERROR_CLUSTER_JOIN_IN_PROGRESS); - cmp2(STATUS_CLUSTER_NODE_NOT_FOUND, ERROR_CLUSTER_NODE_NOT_FOUND); - cmp2(STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND, ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND); - cmp2(STATUS_CLUSTER_NETWORK_EXISTS, ERROR_CLUSTER_NETWORK_EXISTS); - cmp2(STATUS_CLUSTER_NETWORK_NOT_FOUND, ERROR_CLUSTER_NETWORK_NOT_FOUND); - cmp2(STATUS_CLUSTER_NETINTERFACE_EXISTS, ERROR_CLUSTER_NETINTERFACE_EXISTS); - cmp2(STATUS_CLUSTER_NETINTERFACE_NOT_FOUND, ERROR_CLUSTER_NETINTERFACE_NOT_FOUND); - cmp2(STATUS_CLUSTER_INVALID_REQUEST, ERROR_CLUSTER_INVALID_REQUEST); - cmp2(STATUS_CLUSTER_INVALID_NETWORK_PROVIDER,ERROR_CLUSTER_INVALID_NETWORK_PROVIDER); - cmp2(STATUS_CLUSTER_NODE_DOWN, ERROR_CLUSTER_NODE_DOWN); - cmp2(STATUS_CLUSTER_NODE_UNREACHABLE, ERROR_CLUSTER_NODE_UNREACHABLE); - cmp2(STATUS_CLUSTER_NODE_NOT_MEMBER, ERROR_CLUSTER_NODE_NOT_MEMBER); - cmp2(STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS, ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS); - cmp2(STATUS_CLUSTER_INVALID_NETWORK, ERROR_CLUSTER_INVALID_NETWORK); - cmp2(STATUS_CLUSTER_NODE_UP, ERROR_CLUSTER_NODE_UP); - cmp2(STATUS_CLUSTER_NODE_PAUSED, ERROR_CLUSTER_NODE_PAUSED); - cmp2(STATUS_CLUSTER_NODE_NOT_PAUSED, ERROR_CLUSTER_NODE_NOT_PAUSED); - cmp2(STATUS_CLUSTER_NO_SECURITY_CONTEXT, ERROR_CLUSTER_NO_SECURITY_CONTEXT); - cmp2(STATUS_CLUSTER_NETWORK_NOT_INTERNAL, ERROR_CLUSTER_NETWORK_NOT_INTERNAL); -} - -START_TEST(error) -{ - if (prepare_test()) - run_error_tests(); -} diff --git a/rostests/winetests/ntdll/exception.c b/rostests/winetests/ntdll/exception.c deleted file mode 100644 index e256e187066..00000000000 --- a/rostests/winetests/ntdll/exception.c +++ /dev/null @@ -1,910 +0,0 @@ -/* - * Unit test suite for ntdll exceptions - * - * 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 - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "windef.h" -#include "winbase.h" -#include "winnt.h" -#include "winreg.h" -#include "winternl.h" -#include "wine/exception.h" -#include "wine/test.h" - -#ifdef __i386__ -static int my_argc; -static char** my_argv; -static int test_stage; - -static struct _TEB * (WINAPI *pNtCurrentTeb)(void); -static NTSTATUS (WINAPI *pNtGetContextThread)(HANDLE,CONTEXT*); -static NTSTATUS (WINAPI *pNtSetContextThread)(HANDLE,CONTEXT*); -static NTSTATUS (WINAPI *pRtlRaiseException)(EXCEPTION_RECORD *rec); -static PVOID (WINAPI *pRtlAddVectoredExceptionHandler)(ULONG first, PVECTORED_EXCEPTION_HANDLER func); -static ULONG (WINAPI *pRtlRemoveVectoredExceptionHandler)(PVOID handler); -static NTSTATUS (WINAPI *pNtReadVirtualMemory)(HANDLE, const void*, void*, SIZE_T, SIZE_T*); -static NTSTATUS (WINAPI *pNtTerminateProcess)(HANDLE handle, LONG exit_code); -static void *code_mem; - -/* Test various instruction combinations that cause a protection fault on the i386, - * and check what the resulting exception looks like. - */ - -static const struct exception -{ - BYTE code[18]; /* asm code */ - BYTE offset; /* offset of faulting instruction */ - BYTE length; /* length of faulting instruction */ - NTSTATUS status; /* expected status code */ - DWORD nb_params; /* expected number of parameters */ - DWORD params[4]; /* expected parameters */ -} exceptions[] = -{ - /* test some privileged instructions */ - { { 0xfb, 0xc3 }, /* sti; ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x6c, 0xc3 }, /* insb (%dx); ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x6d, 0xc3 }, /* insl (%dx); ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x6e, 0xc3 }, /* outsb (%dx); ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x6f, 0xc3 }, /* outsl (%dx); ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xe4, 0x11, 0xc3 }, /* inb $0x11,%al; ret */ - 0, 2, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xe5, 0x11, 0xc3 }, /* inl $0x11,%eax; ret */ - 0, 2, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xe6, 0x11, 0xc3 }, /* outb %al,$0x11; ret */ - 0, 2, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xe7, 0x11, 0xc3 }, /* outl %eax,$0x11; ret */ - 0, 2, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xed, 0xc3 }, /* inl (%dx),%eax; ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xee, 0xc3 }, /* outb %al,(%dx); ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xef, 0xc3 }, /* outl %eax,(%dx); ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xf4, 0xc3 }, /* hlt; ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xfa, 0xc3 }, /* cli; ret */ - 0, 1, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - - /* test long jump to invalid selector */ - { { 0xea, 0, 0, 0, 0, 0, 0, 0xc3 }, /* ljmp $0,$0; ret */ - 0, 7, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, - - /* test iret to invalid selector */ - { { 0x6a, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0xcf, 0x83, 0xc4, 0x0c, 0xc3 }, - /* pushl $0; pushl $0; pushl $0; iret; addl $12,%esp; ret */ - 6, 1, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, - - /* test loading an invalid selector */ - { { 0xb8, 0xef, 0xbe, 0x00, 0x00, 0x8e, 0xe8, 0xc3 }, /* mov $beef,%ax; mov %ax,%gs; ret */ - 5, 2, STATUS_ACCESS_VIOLATION, 2, { 0, 0xbee8 } }, /* 0xbee8 or 0xffffffff */ - - /* test accessing a zero selector */ - { { 0x06, 0x31, 0xc0, 0x8e, 0xc0, 0x26, 0xa1, 0, 0, 0, 0, 0x07, 0xc3 }, - /* push %es; xor %eax,%eax; mov %ax,%es; mov %es:(0),%ax; pop %es */ - 5, 6, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, - - /* test moving %cs -> %ss */ - { { 0x0e, 0x17, 0x58, 0xc3 }, /* pushl %cs; popl %ss; popl %eax; ret */ - 1, 1, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, - - /* test overlong instruction (limit is 16 bytes) */ - { { 0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0xfa,0xc3 }, - 0, 16, STATUS_ILLEGAL_INSTRUCTION, 0 }, - { { 0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0xfa,0xc3 }, - 0, 15, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - - /* test invalid interrupt */ - { { 0xcd, 0xff, 0xc3 }, /* int $0xff; ret */ - 0, 2, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, - - /* test moves to/from Crx */ - { { 0x0f, 0x20, 0xc0, 0xc3 }, /* movl %cr0,%eax; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x20, 0xe0, 0xc3 }, /* movl %cr4,%eax; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x22, 0xc0, 0xc3 }, /* movl %eax,%cr0; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x22, 0xe0, 0xc3 }, /* movl %eax,%cr4; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - - /* test moves to/from Drx */ - { { 0x0f, 0x21, 0xc0, 0xc3 }, /* movl %dr0,%eax; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x21, 0xc8, 0xc3 }, /* movl %dr1,%eax; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x21, 0xf8, 0xc3 }, /* movl %dr7,%eax; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x23, 0xc0, 0xc3 }, /* movl %eax,%dr0; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x23, 0xc8, 0xc3 }, /* movl %eax,%dr1; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x23, 0xf8, 0xc3 }, /* movl %eax,%dr7; ret */ - 0, 3, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - - /* test memory reads */ - { { 0xa1, 0xfc, 0xff, 0xff, 0xff, 0xc3 }, /* movl 0xfffffffc,%eax; ret */ - 0, 5, STATUS_ACCESS_VIOLATION, 2, { 0, 0xfffffffc } }, - { { 0xa1, 0xfd, 0xff, 0xff, 0xff, 0xc3 }, /* movl 0xfffffffd,%eax; ret */ - 0, 5, STATUS_ACCESS_VIOLATION, 2, { 0, 0xfffffffd } }, - { { 0xa1, 0xfe, 0xff, 0xff, 0xff, 0xc3 }, /* movl 0xfffffffe,%eax; ret */ - 0, 5, STATUS_ACCESS_VIOLATION, 2, { 0, 0xfffffffe } }, - { { 0xa1, 0xff, 0xff, 0xff, 0xff, 0xc3 }, /* movl 0xffffffff,%eax; ret */ - 0, 5, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, - - /* test memory writes */ - { { 0xa3, 0xfc, 0xff, 0xff, 0xff, 0xc3 }, /* movl %eax,0xfffffffc; ret */ - 0, 5, STATUS_ACCESS_VIOLATION, 2, { 1, 0xfffffffc } }, - { { 0xa3, 0xfd, 0xff, 0xff, 0xff, 0xc3 }, /* movl %eax,0xfffffffd; ret */ - 0, 5, STATUS_ACCESS_VIOLATION, 2, { 1, 0xfffffffd } }, - { { 0xa3, 0xfe, 0xff, 0xff, 0xff, 0xc3 }, /* movl %eax,0xfffffffe; ret */ - 0, 5, STATUS_ACCESS_VIOLATION, 2, { 1, 0xfffffffe } }, - { { 0xa3, 0xff, 0xff, 0xff, 0xff, 0xc3 }, /* movl %eax,0xffffffff; ret */ - 0, 5, STATUS_ACCESS_VIOLATION, 2, { 1, 0xffffffff } }, -}; - -static int got_exception; -static BOOL have_vectored_api; - -static void run_exception_test(void *handler, const void* context, - const void *code, unsigned int code_size) -{ - struct { - EXCEPTION_REGISTRATION_RECORD frame; - const void *context; - } exc_frame; - void (*func)(void) = code_mem; - - exc_frame.frame.Handler = handler; - exc_frame.frame.Prev = pNtCurrentTeb()->Tib.ExceptionList; - exc_frame.context = context; - - memcpy(code_mem, code, code_size); - - pNtCurrentTeb()->Tib.ExceptionList = &exc_frame.frame; - func(); - pNtCurrentTeb()->Tib.ExceptionList = exc_frame.frame.Prev; -} - -LONG CALLBACK rtlraiseexception_vectored_handler(EXCEPTION_POINTERS *ExceptionInfo) -{ - PCONTEXT context = ExceptionInfo->ContextRecord; - PEXCEPTION_RECORD rec = ExceptionInfo->ExceptionRecord; - trace("vect. handler %08x addr:%p context.Eip:%x\n", rec->ExceptionCode, - rec->ExceptionAddress, context->Eip); - - todo_wine { - ok(rec->ExceptionAddress == (char *)code_mem + 0xb, "ExceptionAddress at %p instead of %p\n", - rec->ExceptionAddress, (char *)code_mem + 0xb); - - if (pNtCurrentTeb()->Peb->BeingDebugged) - ok((void *)context->Eax == pRtlRaiseException, "debugger managed to modify Eax to %x should be %p\n", - context->Eax, pRtlRaiseException); - } - - /* check that context.Eip is fixed up only for EXCEPTION_BREAKPOINT - * even if raised by RtlRaiseException - */ - if(rec->ExceptionCode == EXCEPTION_BREAKPOINT) - { - ok(context->Eip == (DWORD)code_mem + 0xa, "Eip at %x instead of %x\n", - context->Eip, (DWORD)code_mem + 0xa); - } - else - { - ok(context->Eip == (DWORD)code_mem + 0xb, "Eip at %x instead of %x\n", - context->Eip, (DWORD)code_mem + 0xb); - } - - /* test if context change is preserved from vectored handler to stack handlers */ - context->Eax = 0xf00f00f0; - return EXCEPTION_CONTINUE_SEARCH; -} - -static DWORD rtlraiseexception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ - trace( "exception: %08x flags:%x addr:%p context: Eip:%x\n", - rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress, context->Eip ); - - todo_wine { - ok(rec->ExceptionAddress == (char *)code_mem + 0xb, "ExceptionAddress at %p instead of %p\n", - rec->ExceptionAddress, (char *)code_mem + 0xb); - } - - /* check that context.Eip is fixed up only for EXCEPTION_BREAKPOINT - * even if raised by RtlRaiseException - */ - if(rec->ExceptionCode == EXCEPTION_BREAKPOINT) - { - ok(context->Eip == (DWORD)code_mem + 0xa, "Eip at %x instead of %x\n", - context->Eip, (DWORD)code_mem + 0xa); - } - else - { - ok(context->Eip == (DWORD)code_mem + 0xb, "Eip at %x instead of %x\n", - context->Eip, (DWORD)code_mem + 0xb); - } - - if(have_vectored_api) - ok(context->Eax == 0xf00f00f0, "Eax is %x, should have been set to 0xf00f00f0 in vectored handler\n", - context->Eax); - - /* give the debugger a chance to examine the state a second time */ - /* without the exception handler changing Eip */ - if (test_stage == 2) - return ExceptionContinueSearch; - - /* Eip in context is decreased by 1 - * Increase it again, else execution will continue in the middle of a instruction */ - if(rec->ExceptionCode == EXCEPTION_BREAKPOINT && (context->Eip == (DWORD)code_mem + 0xa)) - context->Eip += 1; - return ExceptionContinueExecution; -} - - -static const BYTE call_one_arg_code[] = { - 0x8b, 0x44, 0x24, 0x08, /* mov 0x8(%esp),%eax */ - 0x50, /* push %eax */ - 0x8b, 0x44, 0x24, 0x08, /* mov 0x8(%esp),%eax */ - 0xff, 0xd0, /* call *%eax */ - 0x90, /* nop */ - 0x90, /* nop */ - 0x90, /* nop */ - 0x90, /* nop */ - 0xc3, /* ret */ -}; - - -static void run_rtlraiseexception_test(DWORD exceptioncode) -{ - EXCEPTION_REGISTRATION_RECORD frame; - EXCEPTION_RECORD record; - PVOID vectored_handler = NULL; - - void (*func)(void* function, EXCEPTION_RECORD* record) = code_mem; - - record.ExceptionCode = exceptioncode; - record.ExceptionFlags = 0; - record.ExceptionRecord = NULL; - record.ExceptionAddress = NULL; /* does not matter, copied return address */ - record.NumberParameters = 0; - - frame.Handler = rtlraiseexception_handler; - frame.Prev = pNtCurrentTeb()->Tib.ExceptionList; - - memcpy(code_mem, call_one_arg_code, sizeof(call_one_arg_code)); - - pNtCurrentTeb()->Tib.ExceptionList = &frame; - if (have_vectored_api) - { - vectored_handler = pRtlAddVectoredExceptionHandler(TRUE, &rtlraiseexception_vectored_handler); - ok(vectored_handler != 0, "RtlAddVectoredExceptionHandler failed\n"); - } - - func(pRtlRaiseException, &record); - - if (have_vectored_api) - pRtlRemoveVectoredExceptionHandler(vectored_handler); - pNtCurrentTeb()->Tib.ExceptionList = frame.Prev; -} - -static void test_rtlraiseexception(void) -{ - if (!pRtlRaiseException) - { - skip("RtlRaiseException not found\n"); - return; - } - - /* test without debugger */ - run_rtlraiseexception_test(0x12345); - run_rtlraiseexception_test(EXCEPTION_BREAKPOINT); - run_rtlraiseexception_test(EXCEPTION_INVALID_HANDLE); -} - -static DWORD handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ - const struct exception *except = *(const struct exception **)(frame + 1); - unsigned int i, entry = except - exceptions; - - got_exception++; - trace( "exception: %x flags:%x addr:%p\n", - rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress ); - - ok( rec->ExceptionCode == except->status, - "%u: Wrong exception code %x/%x\n", entry, rec->ExceptionCode, except->status ); - ok( rec->ExceptionAddress == (char*)code_mem + except->offset, - "%u: Wrong exception address %p/%p\n", entry, - rec->ExceptionAddress, (char*)code_mem + except->offset ); - - ok( rec->NumberParameters == except->nb_params, - "%u: Wrong number of parameters %u/%u\n", entry, rec->NumberParameters, except->nb_params ); - - /* Most CPUs (except Intel Core apparently) report a segment limit violation */ - /* instead of page faults for accesses beyond 0xffffffff */ - if (except->nb_params == 2 && except->params[1] >= 0xfffffffd) - { - if (rec->ExceptionInformation[0] == 0 && rec->ExceptionInformation[1] == 0xffffffff) - goto skip_params; - } - - /* Seems that both 0xbee8 and 0xfffffffff can be returned in windows */ - if (except->nb_params == 2 && rec->NumberParameters == 2 - && except->params[1] == 0xbee8 && rec->ExceptionInformation[1] == 0xffffffff - && except->params[0] == rec->ExceptionInformation[0]) - { - goto skip_params; - } - - for (i = 0; i < rec->NumberParameters; i++) - ok( rec->ExceptionInformation[i] == except->params[i], - "%u: Wrong parameter %d: %lx/%x\n", - entry, i, rec->ExceptionInformation[i], except->params[i] ); - -skip_params: - /* don't handle exception if it's not the address we expected */ - if (rec->ExceptionAddress != (char*)code_mem + except->offset) return ExceptionContinueSearch; - - context->Eip += except->length; - return ExceptionContinueExecution; -} - -static void test_prot_fault(void) -{ - unsigned int i; - - for (i = 0; i < sizeof(exceptions)/sizeof(exceptions[0]); i++) - { - got_exception = 0; - run_exception_test(handler, &exceptions[i], &exceptions[i].code, - sizeof(exceptions[i].code)); - if (!i && !got_exception) - { - trace( "No exception, assuming win9x, no point in testing further\n" ); - break; - } - ok( got_exception == (exceptions[i].status != 0), - "%u: bad exception count %d\n", i, got_exception ); - } -} - -/* test handling of debug registers */ -static DWORD dreg_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ - context->Eip += 2; /* Skips the popl (%eax) */ - context->Dr0 = 0x42424242; - context->Dr1 = 0; - context->Dr2 = 0; - context->Dr3 = 0; - context->Dr6 = 0; - context->Dr7 = 0x155; - return ExceptionContinueExecution; -} - -static const BYTE segfault_code[5] = { - 0x31, 0xc0, /* xor %eax,%eax */ - 0x8f, 0x00, /* popl (%eax) - cause exception */ - 0xc3 /* ret */ -}; - -/* test the single step exception behaviour */ -static DWORD single_step_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ - got_exception++; - ok (!(context->EFlags & 0x100), "eflags has single stepping bit set\n"); - - if( got_exception < 3) - context->EFlags |= 0x100; /* single step until popf instruction */ - else { - /* show that the last single step exception on the popf instruction - * (which removed the TF bit), still is a EXCEPTION_SINGLE_STEP exception */ - ok( rec->ExceptionCode == EXCEPTION_SINGLE_STEP, - "exception is not EXCEPTION_SINGLE_STEP: %x\n", rec->ExceptionCode); - } - - return ExceptionContinueExecution; -} - -static const BYTE single_stepcode[] = { - 0x9c, /* pushf */ - 0x58, /* pop %eax */ - 0x0d,0,1,0,0, /* or $0x100,%eax */ - 0x50, /* push %eax */ - 0x9d, /* popf */ - 0x35,0,1,0,0, /* xor $0x100,%eax */ - 0x50, /* push %eax */ - 0x9d, /* popf */ - 0xc3 -}; - -/* Test the alignment check (AC) flag handling. */ -static const BYTE align_check_code[] = { - 0x55, /* push %ebp */ - 0x89,0xe5, /* mov %esp,%ebp */ - 0x9c, /* pushf */ - 0x58, /* pop %eax */ - 0x0d,0,0,4,0, /* or $0x40000,%eax */ - 0x50, /* push %eax */ - 0x9d, /* popf */ - 0x89,0xe0, /* mov %esp, %eax */ - 0x8b,0x40,0x1, /* mov 0x1(%eax), %eax - cause exception */ - 0x9c, /* pushf */ - 0x58, /* pop %eax */ - 0x35,0,0,4,0, /* xor $0x40000,%eax */ - 0x50, /* push %eax */ - 0x9d, /* popf */ - 0x5d, /* pop %ebp */ - 0xc3, /* ret */ -}; - -static DWORD align_check_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ - ok (!(context->EFlags & 0x40000), "eflags has AC bit set\n"); - got_exception++; - return ExceptionContinueExecution; -} - -/* Test the direction flag handling. */ -static const BYTE direction_flag_code[] = { - 0x55, /* push %ebp */ - 0x89,0xe5, /* mov %esp,%ebp */ - 0xfd, /* std */ - 0xfa, /* cli - cause exception */ - 0x5d, /* pop %ebp */ - 0xc3, /* ret */ -}; - -static DWORD direction_flag_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ -#ifdef __GNUC__ - unsigned int flags; - __asm__("pushfl; popl %0" : "=r" (flags) ); - /* older windows versions don't clear DF properly so don't test */ - if (flags & 0x400) trace( "eflags has DF bit set\n" ); -#endif - ok( context->EFlags & 0x400, "context eflags has DF bit cleared\n" ); - got_exception++; - context->Eip++; /* skip cli */ - return ExceptionContinueExecution; -} - -/* test single stepping over hardware breakpoint */ -static DWORD bpx_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ - got_exception++; - ok( rec->ExceptionCode == EXCEPTION_SINGLE_STEP, - "wrong exception code: %x\n", rec->ExceptionCode); - - if(got_exception == 1) { - /* hw bp exception on first nop */ - ok( context->Eip == (DWORD)code_mem, "eip is wrong: %x instead of %x\n", - context->Eip, (DWORD)code_mem); - ok( (context->Dr6 & 0xf) == 1, "B0 flag is not set in Dr6\n"); - ok( !(context->Dr6 & 0x4000), "BS flag is set in Dr6\n"); - context->Dr0 = context->Dr0 + 1; /* set hw bp again on next instruction */ - context->EFlags |= 0x100; /* enable single stepping */ - } else if( got_exception == 2) { - /* single step exception on second nop */ - ok( context->Eip == (DWORD)code_mem + 1, "eip is wrong: %x instead of %x\n", - context->Eip, (DWORD)code_mem + 1); - ok( (context->Dr6 & 0x4000), "BS flag is not set in Dr6\n"); - /* depending on the win version the B0 bit is already set here as well - ok( (context->Dr6 & 0xf) == 0, "B0...3 flags in Dr6 shouldn't be set\n"); */ - context->EFlags |= 0x100; - } else if( got_exception == 3) { - /* hw bp exception on second nop */ - ok( context->Eip == (DWORD)code_mem + 1, "eip is wrong: %x instead of %x\n", - context->Eip, (DWORD)code_mem + 1); - ok( (context->Dr6 & 0xf) == 1, "B0 flag is not set in Dr6\n"); - ok( !(context->Dr6 & 0x4000), "BS flag is set in Dr6\n"); - context->Dr0 = 0; /* clear breakpoint */ - context->EFlags |= 0x100; - } else { - /* single step exception on ret */ - ok( context->Eip == (DWORD)code_mem + 2, "eip is wrong: %x instead of %x\n", - context->Eip, (DWORD)code_mem + 2); - ok( (context->Dr6 & 0xf) == 0, "B0...3 flags in Dr6 shouldn't be set\n"); - ok( (context->Dr6 & 0x4000), "BS flag is not set in Dr6\n"); - } - - context->Dr6 = 0; /* clear status register */ - return ExceptionContinueExecution; -} - -static const BYTE dummy_code[] = { 0x90, 0x90, 0xc3 }; /* nop, nop, ret */ - -/* test int3 handling */ -static DWORD int3_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ - ok( rec->ExceptionAddress == code_mem, "exception address not at: %p, but at %p\n", - code_mem, rec->ExceptionAddress); - ok( context->Eip == (DWORD)code_mem, "eip not at: %p, but at %#x\n", code_mem, context->Eip); - if(context->Eip == (DWORD)code_mem) context->Eip++; /* skip breakpoint */ - - return ExceptionContinueExecution; -} - -static const BYTE int3_code[] = { 0xCC, 0xc3 }; /* int 3, ret */ - - -static void test_exceptions(void) -{ - CONTEXT ctx; - NTSTATUS res; - - if (!pNtGetContextThread || !pNtSetContextThread) - { - skip( "NtGetContextThread/NtSetContextThread not found\n" ); - return; - } - - /* test handling of debug registers */ - run_exception_test(dreg_handler, NULL, &segfault_code, sizeof(segfault_code)); - - ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS; - res = pNtGetContextThread(GetCurrentThread(), &ctx); - ok (res == STATUS_SUCCESS,"NtGetContextThread failed with %x\n", res); - ok(ctx.Dr0 == 0x42424242,"failed to set debugregister 0 to 0x42424242, got %x\n", ctx.Dr0); - ok((ctx.Dr7 & ~0xdc00) == 0x155,"failed to set debugregister 7 to 0x155, got %x\n", ctx.Dr7); - - /* test single stepping behavior */ - got_exception = 0; - run_exception_test(single_step_handler, NULL, &single_stepcode, sizeof(single_stepcode)); - ok(got_exception == 3, "expected 3 single step exceptions, got %d\n", got_exception); - - /* test alignment exceptions */ - got_exception = 0; - run_exception_test(align_check_handler, NULL, align_check_code, sizeof(align_check_code)); - ok(got_exception == 0, "got %d alignment faults, expected 0\n", got_exception); - - /* test direction flag */ - got_exception = 0; - run_exception_test(direction_flag_handler, NULL, direction_flag_code, sizeof(direction_flag_code)); - ok(got_exception == 1, "got %d exceptions, expected 1\n", got_exception); - - /* test single stepping over hardware breakpoint */ - memset(&ctx, 0, sizeof(ctx)); - ctx.Dr0 = (DWORD) code_mem; /* set hw bp on first nop */ - ctx.Dr7 = 3; - ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS; - res = pNtSetContextThread( GetCurrentThread(), &ctx); - ok( res == STATUS_SUCCESS, "NtSetContextThread faild with %x\n", res); - - got_exception = 0; - run_exception_test(bpx_handler, NULL, dummy_code, sizeof(dummy_code)); - ok( got_exception == 4,"expected 4 exceptions, got %d\n", got_exception); - - /* test int3 handling */ - run_exception_test(int3_handler, NULL, int3_code, sizeof(int3_code)); -} - -static void test_debugger(void) -{ - char cmdline[MAX_PATH]; - PROCESS_INFORMATION pi; - STARTUPINFO si = { 0 }; - DEBUG_EVENT de; - DWORD continuestatus; - PVOID code_mem_address = NULL; - NTSTATUS status; - SIZE_T size_read; - BOOL ret; - int counter = 0; - si.cb = sizeof(si); - - if(!pNtGetContextThread || !pNtSetContextThread || !pNtReadVirtualMemory || !pNtTerminateProcess) - { - skip("NtGetContextThread, NtSetContextThread, NtReadVirtualMemory or NtTerminateProcess not found\n)"); - return; - } - - sprintf(cmdline, "%s %s %s %p", my_argv[0], my_argv[1], "debuggee", &test_stage); - ret = CreateProcess(NULL, cmdline, NULL, NULL, FALSE, DEBUG_PROCESS, NULL, NULL, &si, &pi); - ok(ret, "could not create child process error: %u\n", GetLastError()); - if (!ret) - return; - - do - { - continuestatus = DBG_CONTINUE; - ok(WaitForDebugEvent(&de, INFINITE), "reading debug event\n"); - - if (de.dwThreadId != pi.dwThreadId) - { - trace("event %d not coming from main thread, ignoring\n", de.dwDebugEventCode); - ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE); - continue; - } - - if (de.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT) - { - if(de.u.CreateProcessInfo.lpBaseOfImage != pNtCurrentTeb()->Peb->ImageBaseAddress) - { - skip("child process loaded at different address, terminating it\n"); - pNtTerminateProcess(pi.hProcess, 0); - } - } - else if (de.dwDebugEventCode == EXCEPTION_DEBUG_EVENT) - { - CONTEXT ctx; - int stage; - - counter++; - status = pNtReadVirtualMemory(pi.hProcess, &code_mem, &code_mem_address, - sizeof(code_mem_address), &size_read); - ok(!status,"NtReadVirtualMemory failed with 0x%x\n", status); - status = pNtReadVirtualMemory(pi.hProcess, &test_stage, &stage, - sizeof(stage), &size_read); - ok(!status,"NtReadVirtualMemory failed with 0x%x\n", status); - - ctx.ContextFlags = CONTEXT_FULL; - status = pNtGetContextThread(pi.hThread, &ctx); - ok(!status, "NtGetContextThread failed with 0x%x\n", status); - - trace("exception 0x%x at %p firstchance=%d Eip=0x%x, Eax=0x%x\n", - de.u.Exception.ExceptionRecord.ExceptionCode, - de.u.Exception.ExceptionRecord.ExceptionAddress, de.u.Exception.dwFirstChance, ctx.Eip, ctx.Eax); - - if (counter > 100) - { - ok(FALSE, "got way too many exceptions, probaby caught in a infinite loop, terminating child\n"); - pNtTerminateProcess(pi.hProcess, 1); - } - else if (counter >= 2) /* skip startup breakpoint */ - { - if (stage == 1) - { - ok((char *)ctx.Eip == (char *)code_mem_address + 0xb, "Eip at %x instead of %p\n", - ctx.Eip, (char *)code_mem_address + 0xb); - /* setting the context from debugger does not affect the context, the exception handlers gets */ - /* uncomment once wine is fixed */ - /* ctx.Eip = 0x12345; */ - ctx.Eax = 0xf00f00f1; - - /* let the debuggee handle the exception */ - continuestatus = DBG_EXCEPTION_NOT_HANDLED; - } - else if (stage == 2) - { - if (de.u.Exception.dwFirstChance) - { - /* debugger gets first chance exception with unmodified ctx.Eip */ - ok((char *)ctx.Eip == (char *)code_mem_address + 0xb, "Eip at 0x%x instead of %p\n", - ctx.Eip, (char *)code_mem_address + 0xb); - - /* setting the context from debugger does not affect the context, the exception handlers gets */ - /* uncomment once wine is fixed */ - /* ctx.Eip = 0x12345; */ - ctx.Eax = 0xf00f00f1; - - /* pass exception to debuggee - * exception will not be handled and - * a second chance exception will be raised */ - continuestatus = DBG_EXCEPTION_NOT_HANDLED; - } - else - { - /* debugger gets context after exception handler has played with it */ - /* ctx.Eip is the same value the exception handler got */ - if (de.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT) - { - ok((char *)ctx.Eip == (char *)code_mem_address + 0xa, "Eip at 0x%x instead of %p\n", - ctx.Eip, (char *)code_mem_address + 0xa); - /* need to fixup Eip for debuggee */ - if ((char *)ctx.Eip == (char *)code_mem_address + 0xa) - ctx.Eip += 1; - } - else - ok((char *)ctx.Eip == (char *)code_mem_address + 0xb, "Eip at 0x%x instead of %p\n", - ctx.Eip, (char *)code_mem_address + 0xb); - /* here we handle exception */ - } - } - else - ok(FALSE, "unexpected stage %x\n", stage); - - status = pNtSetContextThread(pi.hThread, &ctx); - ok(!status, "NtSetContextThread failed with 0x%x\n", status); - } - } - - ContinueDebugEvent(de.dwProcessId, de.dwThreadId, continuestatus); - - } while (de.dwDebugEventCode != EXIT_PROCESS_DEBUG_EVENT); - - winetest_wait_child_process( pi.hProcess ); - ok(CloseHandle(pi.hThread) != 0, "error %u\n", GetLastError()); - ok(CloseHandle(pi.hProcess) != 0, "error %u\n", GetLastError()); - - return; -} - -static DWORD simd_fault_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame, - CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher ) -{ - int *stage = *(int **)(frame + 1); - - got_exception++; - - if( *stage == 1) { - /* fault while executing sse instruction */ - context->Eip += 3; /* skip addps */ - return ExceptionContinueExecution; - } - - /* stage 2 - divide by zero fault */ - if( rec->ExceptionCode == EXCEPTION_ILLEGAL_INSTRUCTION) - skip("system doesn't support SIMD exceptions\n"); - else { - ok( rec->ExceptionCode == STATUS_FLOAT_MULTIPLE_TRAPS, - "exception code: %#x, should be %#x\n", - rec->ExceptionCode, STATUS_FLOAT_MULTIPLE_TRAPS); - ok( rec->NumberParameters == 1, "# of params: %i, should be 1\n", - rec->NumberParameters); - if( rec->NumberParameters == 1 ) - ok( rec->ExceptionInformation[0] == 0, "param #1: %lx, should be 0\n", rec->ExceptionInformation[0]); - } - - context->Eip += 3; /* skip divps */ - - return ExceptionContinueExecution; -} - -static const BYTE simd_exception_test[] = { - 0x83, 0xec, 0x4, /* sub $0x4, %esp */ - 0x0f, 0xae, 0x1c, 0x24, /* stmxcsr (%esp) */ - 0x66, 0x81, 0x24, 0x24, 0xff, 0xfd, /* andw $0xfdff,(%esp) * enable divide by */ - 0x0f, 0xae, 0x14, 0x24, /* ldmxcsr (%esp) * zero exceptions */ - 0x6a, 0x01, /* push $0x1 */ - 0x6a, 0x01, /* push $0x1 */ - 0x6a, 0x01, /* push $0x1 */ - 0x6a, 0x01, /* push $0x1 */ - 0x0f, 0x10, 0x0c, 0x24, /* movups (%esp),%xmm1 * fill dividend */ - 0x0f, 0x57, 0xc0, /* xorps %xmm0,%xmm0 * clear divisor */ - 0x0f, 0x5e, 0xc8, /* divps %xmm0,%xmm1 * generate fault */ - 0x83, 0xc4, 0x10, /* add $0x10,%esp */ - 0x66, 0x81, 0x0c, 0x24, 0x00, 0x02, /* orw $0x200,(%esp) * disable exceptions */ - 0x0f, 0xae, 0x14, 0x24, /* ldmxcsr (%esp) */ - 0x83, 0xc4, 0x04, /* add $0x4,%esp */ - 0xc3, /* ret */ -}; - -static const BYTE sse_check[] = { - 0x0f, 0x58, 0xc8, /* addps %xmm0,%xmm1 */ - 0xc3, /* ret */ -}; - -static void test_simd_exceptions(void) -{ - int stage; - - /* test if CPU & OS can do sse */ - stage = 1; - got_exception = 0; - run_exception_test(simd_fault_handler, &stage, sse_check, sizeof(sse_check)); - if(got_exception) { - skip("system doesn't support SSE\n"); - return; - } - - /* generate a SIMD exception */ - stage = 2; - got_exception = 0; - run_exception_test(simd_fault_handler, &stage, simd_exception_test, - sizeof(simd_exception_test)); - ok( got_exception == 1, "got exception: %i, should be 1\n", got_exception); -} - -#endif /* __i386__ */ - -START_TEST(exception) -{ -#ifdef __i386__ - HMODULE hntdll = GetModuleHandleA("ntdll.dll"); - - pNtCurrentTeb = (void *)GetProcAddress( hntdll, "NtCurrentTeb" ); - pNtGetContextThread = (void *)GetProcAddress( hntdll, "NtGetContextThread" ); - pNtSetContextThread = (void *)GetProcAddress( hntdll, "NtSetContextThread" ); - pNtReadVirtualMemory = (void *)GetProcAddress( hntdll, "NtReadVirtualMemory" ); - pRtlRaiseException = (void *)GetProcAddress( hntdll, "RtlRaiseException" ); - pNtTerminateProcess = (void *)GetProcAddress( hntdll, "NtTerminateProcess" ); - pRtlAddVectoredExceptionHandler = (void *)GetProcAddress( hntdll, - "RtlAddVectoredExceptionHandler" ); - pRtlRemoveVectoredExceptionHandler = (void *)GetProcAddress( hntdll, - "RtlRemoveVectoredExceptionHandler" ); - if (!pNtCurrentTeb) - { - skip( "NtCurrentTeb not found\n" ); - return; - } - - if (pRtlAddVectoredExceptionHandler && pRtlRemoveVectoredExceptionHandler) - have_vectored_api = TRUE; - else - skip("RtlAddVectoredExceptionHandler or RtlRemoveVectoredExceptionHandler not found\n"); - - /* 1024 byte should be sufficient */ - code_mem = VirtualAlloc(NULL, 1024, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); - if(!code_mem) { - trace("VirtualAlloc failed\n"); - return; - } - - my_argc = winetest_get_mainargs( &my_argv ); - if (my_argc >= 4) - { - void *addr; - sscanf( my_argv[3], "%p", &addr ); - - if (addr != &test_stage) - { - skip( "child process not mapped at same address (%p/%p)\n", &test_stage, addr); - return; - } - - /* child must be run under a debugger */ - if (!pNtCurrentTeb()->Peb->BeingDebugged) - { - ok(FALSE, "child process not being debugged?\n"); - return; - } - - if (pRtlRaiseException) - { - test_stage = 1; - run_rtlraiseexception_test(0x12345); - run_rtlraiseexception_test(EXCEPTION_BREAKPOINT); - run_rtlraiseexception_test(EXCEPTION_INVALID_HANDLE); - test_stage = 2; - run_rtlraiseexception_test(0x12345); - run_rtlraiseexception_test(EXCEPTION_BREAKPOINT); - run_rtlraiseexception_test(EXCEPTION_INVALID_HANDLE); - } - else - skip( "RtlRaiseException not found\n" ); - - /* rest of tests only run in parent */ - return; - } - - test_prot_fault(); - test_exceptions(); - test_rtlraiseexception(); - test_debugger(); - test_simd_exceptions(); - - VirtualFree(code_mem, 1024, MEM_RELEASE); -#endif -} diff --git a/rostests/winetests/ntdll/file.c b/rostests/winetests/ntdll/file.c deleted file mode 100644 index 6d37390f0b9..00000000000 --- a/rostests/winetests/ntdll/file.c +++ /dev/null @@ -1,627 +0,0 @@ -/* Unit test suite for Ntdll file functions - * - * Copyright 2007 Jeff Latimer - * Copyright 2007 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 - * - * NOTES - * We use function pointers here as there is no import library for NTDLL on - * windows. - */ - -#include -#include - -#include "ntstatus.h" - -/* Define WIN32_NO_STATUS so MSVC does not give us duplicate macro - * definition errors when we get to winnt.h - */ -#define WIN32_NO_STATUS - -#include "wine/test.h" -#include "winternl.h" - -#ifndef IO_COMPLETION_ALL_ACCESS -#define IO_COMPLETION_ALL_ACCESS 0x001F0003 -#endif - -static VOID (WINAPI *pRtlInitUnicodeString)( PUNICODE_STRING, LPCWSTR ); -static NTSTATUS (WINAPI *pNtCreateMailslotFile)( PHANDLE, ULONG, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, - ULONG, ULONG, ULONG, PLARGE_INTEGER ); -static NTSTATUS (WINAPI *pNtReadFile)(HANDLE hFile, HANDLE hEvent, - PIO_APC_ROUTINE apc, void* apc_user, - PIO_STATUS_BLOCK io_status, void* buffer, ULONG length, - PLARGE_INTEGER offset, PULONG key); -static NTSTATUS (WINAPI *pNtWriteFile)(HANDLE hFile, HANDLE hEvent, - PIO_APC_ROUTINE apc, void* apc_user, - PIO_STATUS_BLOCK io_status, - const void* buffer, ULONG length, - PLARGE_INTEGER offset, PULONG key); -static NTSTATUS (WINAPI *pNtClose)( PHANDLE ); - -static NTSTATUS (WINAPI *pNtCreateIoCompletion)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG); -static NTSTATUS (WINAPI *pNtOpenIoCompletion)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); -static NTSTATUS (WINAPI *pNtQueryIoCompletion)(HANDLE, IO_COMPLETION_INFORMATION_CLASS, PVOID, ULONG, PULONG); -static NTSTATUS (WINAPI *pNtRemoveIoCompletion)(HANDLE, PULONG_PTR, PULONG_PTR, PIO_STATUS_BLOCK, PLARGE_INTEGER); -static NTSTATUS (WINAPI *pNtSetIoCompletion)(HANDLE, ULONG_PTR, ULONG_PTR, NTSTATUS, ULONG); -static NTSTATUS (WINAPI *pNtSetInformationFile)(HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FILE_INFORMATION_CLASS); - -static inline BOOL is_signaled( HANDLE obj ) -{ - return WaitForSingleObject( obj, 0 ) == 0; -} - -#define PIPENAME "\\\\.\\pipe\\ntdll_tests_file.c" - -static BOOL create_pipe( HANDLE *read, HANDLE *write, ULONG flags, ULONG size ) -{ - *read = CreateNamedPipe(PIPENAME, PIPE_ACCESS_INBOUND | flags, PIPE_TYPE_BYTE | PIPE_WAIT, - 1, size, size, NMPWAIT_USE_DEFAULT_WAIT, NULL); - ok(*read != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); - - *write = CreateFileA(PIPENAME, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); - ok(*write != INVALID_HANDLE_VALUE, "CreateFile failed (%d)\n", GetLastError()); - - return TRUE; -} - -static HANDLE create_temp_file( ULONG flags ) -{ - char buffer[MAX_PATH]; - HANDLE handle; - - GetTempFileNameA( ".", "foo", 0, buffer ); - handle = CreateFileA(buffer, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - flags | FILE_FLAG_DELETE_ON_CLOSE, 0); - ok( handle != INVALID_HANDLE_VALUE, "failed to create temp file\n" ); - return (handle == INVALID_HANDLE_VALUE) ? 0 : handle; -} - -#define CVALUE_FIRST 0xfffabbcc -#define CKEY_FIRST 0x1030341 -#define CKEY_SECOND 0x132E46 - -ULONG_PTR completionKey; -IO_STATUS_BLOCK ioSb; -ULONG_PTR completionValue; - -static long get_pending_msgs(HANDLE h) -{ - NTSTATUS res; - ULONG a, req; - - res = pNtQueryIoCompletion( h, IoCompletionBasicInformation, (PVOID)&a, sizeof(a), &req ); - ok( res == STATUS_SUCCESS, "NtQueryIoCompletion failed: %x\n", res ); - if (res != STATUS_SUCCESS) return -1; - ok( req == sizeof(a), "Unexpected response size: %x\n", req ); - return a; -} - -static BOOL get_msg(HANDLE h) -{ - LARGE_INTEGER timeout = {{-10000000*3}}; - DWORD res = pNtRemoveIoCompletion( h, &completionKey, &completionValue, &ioSb, &timeout); - ok( res == STATUS_SUCCESS, "NtRemoveIoCompletion failed: %x\n", res ); - if (res != STATUS_SUCCESS) - { - completionKey = completionValue = 0; - memset(&ioSb, 0, sizeof(ioSb)); - return FALSE; - } - return TRUE; -} - - -static void WINAPI apc( void *arg, IO_STATUS_BLOCK *iosb, ULONG reserved ) -{ - int *count = arg; - - trace( "apc called block %p iosb.status %x iosb.info %lu\n", - iosb, U(*iosb).Status, iosb->Information ); - (*count)++; - ok( !reserved, "reserved is not 0: %x\n", reserved ); -} - -static void read_file_test(void) -{ - const char text[] = "foobar"; - HANDLE handle, read, write; - NTSTATUS status; - IO_STATUS_BLOCK iosb; - DWORD written; - int apc_count = 0; - char buffer[128]; - LARGE_INTEGER offset; - HANDLE event = CreateEventA( NULL, TRUE, FALSE, NULL ); - - buffer[0] = 1; - - if (!create_pipe( &read, &write, FILE_FLAG_OVERLAPPED, 4096 )) return; - - /* try read with no data */ - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - ok( is_signaled( read ), "read handle is not signaled\n" ); - status = pNtReadFile( read, event, apc, &apc_count, &iosb, buffer, 1, NULL, NULL ); - ok( status == STATUS_PENDING, "wrong status %x\n", status ); - ok( !is_signaled( read ), "read handle is signaled\n" ); - ok( !is_signaled( event ), "event is signaled\n" ); - ok( U(iosb).Status == 0xdeadbabe, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 0xdeadbeef, "wrong info %lu\n", iosb.Information ); - ok( !apc_count, "apc was called\n" ); - WriteFile( write, buffer, 1, &written, NULL ); - /* iosb updated here by async i/o */ - Sleep(1); /* FIXME: needed for wine to run the i/o apc */ - ok( U(iosb).Status == 0, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 1, "wrong info %lu\n", iosb.Information ); - ok( !is_signaled( read ), "read handle is signaled\n" ); - ok( is_signaled( event ), "event is not signaled\n" ); - ok( !apc_count, "apc was called\n" ); - apc_count = 0; - SleepEx( 1, FALSE ); /* non-alertable sleep */ - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( apc_count == 1, "apc not called\n" ); - - /* with no event, the pipe handle itself gets signaled */ - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - ok( !is_signaled( read ), "read handle is not signaled\n" ); - status = pNtReadFile( read, 0, apc, &apc_count, &iosb, buffer, 1, NULL, NULL ); - ok( status == STATUS_PENDING, "wrong status %x\n", status ); - ok( !is_signaled( read ), "read handle is signaled\n" ); - ok( U(iosb).Status == 0xdeadbabe, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 0xdeadbeef, "wrong info %lu\n", iosb.Information ); - ok( !apc_count, "apc was called\n" ); - WriteFile( write, buffer, 1, &written, NULL ); - /* iosb updated here by async i/o */ - Sleep(1); /* FIXME: needed for wine to run the i/o apc */ - ok( U(iosb).Status == 0, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 1, "wrong info %lu\n", iosb.Information ); - ok( is_signaled( read ), "read handle is signaled\n" ); - ok( !apc_count, "apc was called\n" ); - apc_count = 0; - SleepEx( 1, FALSE ); /* non-alertable sleep */ - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( apc_count == 1, "apc not called\n" ); - - /* now read with data ready */ - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - ResetEvent( event ); - WriteFile( write, buffer, 1, &written, NULL ); - status = pNtReadFile( read, event, apc, &apc_count, &iosb, buffer, 1, NULL, NULL ); - ok( status == STATUS_SUCCESS, "wrong status %x\n", status ); - ok( U(iosb).Status == 0, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 1, "wrong info %lu\n", iosb.Information ); - ok( is_signaled( event ), "event is not signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, FALSE ); /* non-alertable sleep */ - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( apc_count == 1, "apc not called\n" ); - - /* try read with no data */ - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - ok( is_signaled( event ), "event is not signaled\n" ); /* check that read resets the event */ - status = pNtReadFile( read, event, apc, &apc_count, &iosb, buffer, 2, NULL, NULL ); - ok( status == STATUS_PENDING, "wrong status %x\n", status ); - ok( !is_signaled( event ), "event is signaled\n" ); - ok( U(iosb).Status == 0xdeadbabe, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 0xdeadbeef, "wrong info %lu\n", iosb.Information ); - ok( !apc_count, "apc was called\n" ); - WriteFile( write, buffer, 1, &written, NULL ); - /* partial read is good enough */ - Sleep(1); /* FIXME: needed for wine to run the i/o apc */ - ok( is_signaled( event ), "event is signaled\n" ); - ok( U(iosb).Status == 0, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 1, "wrong info %lu\n", iosb.Information ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( apc_count == 1, "apc was not called\n" ); - - /* read from disconnected pipe */ - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - CloseHandle( write ); - status = pNtReadFile( read, event, apc, &apc_count, &iosb, buffer, 1, NULL, NULL ); - ok( status == STATUS_PIPE_BROKEN, "wrong status %x\n", status ); - ok( U(iosb).Status == 0xdeadbabe, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 0xdeadbeef, "wrong info %lu\n", iosb.Information ); - ok( !is_signaled( event ), "event is signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( !apc_count, "apc was called\n" ); - CloseHandle( read ); - - /* read from closed handle */ - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - SetEvent( event ); - status = pNtReadFile( read, event, apc, &apc_count, &iosb, buffer, 1, NULL, NULL ); - ok( status == STATUS_INVALID_HANDLE, "wrong status %x\n", status ); - ok( U(iosb).Status == 0xdeadbabe, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 0xdeadbeef, "wrong info %lu\n", iosb.Information ); - ok( is_signaled( event ), "event is signaled\n" ); /* not reset on invalid handle */ - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( !apc_count, "apc was called\n" ); - - /* disconnect while async read is in progress */ - if (!create_pipe( &read, &write, FILE_FLAG_OVERLAPPED, 4096 )) return; - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - status = pNtReadFile( read, event, apc, &apc_count, &iosb, buffer, 2, NULL, NULL ); - ok( status == STATUS_PENDING, "wrong status %x\n", status ); - ok( !is_signaled( event ), "event is signaled\n" ); - ok( U(iosb).Status == 0xdeadbabe, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 0xdeadbeef, "wrong info %lu\n", iosb.Information ); - ok( !apc_count, "apc was called\n" ); - CloseHandle( write ); - Sleep(1); /* FIXME: needed for wine to run the i/o apc */ - ok( U(iosb).Status == STATUS_PIPE_BROKEN, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 0, "wrong info %lu\n", iosb.Information ); - ok( is_signaled( event ), "event is signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( apc_count == 1, "apc was not called\n" ); - CloseHandle( read ); - - /* now try a real file */ - if (!(handle = create_temp_file( FILE_FLAG_OVERLAPPED ))) return; - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - offset.QuadPart = 0; - ResetEvent( event ); - pNtWriteFile( handle, event, apc, &apc_count, &iosb, text, strlen(text), &offset, NULL ); - ok( status == STATUS_PENDING, "wrong status %x\n", status ); - ok( U(iosb).Status == STATUS_SUCCESS, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == strlen(text), "wrong info %lu\n", iosb.Information ); - ok( is_signaled( event ), "event is signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( apc_count == 1, "apc was not called\n" ); - - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - offset.QuadPart = 0; - ResetEvent( event ); - status = pNtReadFile( handle, event, apc, &apc_count, &iosb, buffer, strlen(text) + 10, &offset, NULL ); - ok( status == STATUS_SUCCESS, "wrong status %x\n", status ); - ok( U(iosb).Status == STATUS_SUCCESS, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == strlen(text), "wrong info %lu\n", iosb.Information ); - ok( is_signaled( event ), "event is signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( apc_count == 1, "apc was not called\n" ); - - /* read beyond eof */ - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - offset.QuadPart = strlen(text) + 2; - status = pNtReadFile( handle, event, apc, &apc_count, &iosb, buffer, 2, &offset, NULL ); - ok( status == STATUS_END_OF_FILE, "wrong status %x\n", status ); - ok( U(iosb).Status == 0xdeadbabe, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == 0xdeadbeef, "wrong info %lu\n", iosb.Information ); - ok( !is_signaled( event ), "event is signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( !apc_count, "apc was called\n" ); - CloseHandle( handle ); - - /* now a non-overlapped file */ - if (!(handle = create_temp_file(0))) return; - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - offset.QuadPart = 0; - pNtWriteFile( handle, event, apc, &apc_count, &iosb, text, strlen(text), &offset, NULL ); - ok( status == STATUS_END_OF_FILE, "wrong status %x\n", status ); - ok( U(iosb).Status == STATUS_SUCCESS, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == strlen(text), "wrong info %lu\n", iosb.Information ); - ok( is_signaled( event ), "event is signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( apc_count == 1, "apc was not called\n" ); - - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - offset.QuadPart = 0; - ResetEvent( event ); - status = pNtReadFile( handle, event, apc, &apc_count, &iosb, buffer, strlen(text) + 10, &offset, NULL ); - ok( status == STATUS_SUCCESS, "wrong status %x\n", status ); - ok( U(iosb).Status == STATUS_SUCCESS, "wrong status %x\n", U(iosb).Status ); - ok( iosb.Information == strlen(text), "wrong info %lu\n", iosb.Information ); - ok( is_signaled( event ), "event is signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - todo_wine ok( !apc_count, "apc was called\n" ); - - /* read beyond eof */ - apc_count = 0; - U(iosb).Status = 0xdeadbabe; - iosb.Information = 0xdeadbeef; - offset.QuadPart = strlen(text) + 2; - ResetEvent( event ); - status = pNtReadFile( handle, event, apc, &apc_count, &iosb, buffer, 2, &offset, NULL ); - ok( status == STATUS_END_OF_FILE, "wrong status %x\n", status ); - todo_wine ok( U(iosb).Status == STATUS_END_OF_FILE, "wrong status %x\n", U(iosb).Status ); - todo_wine ok( iosb.Information == 0, "wrong info %lu\n", iosb.Information ); - todo_wine ok( is_signaled( event ), "event is not signaled\n" ); - ok( !apc_count, "apc was called\n" ); - SleepEx( 1, TRUE ); /* alertable sleep */ - ok( !apc_count, "apc was called\n" ); - - CloseHandle( handle ); - - CloseHandle( event ); -} - -static void nt_mailslot_test(void) -{ - HANDLE hslot; - ACCESS_MASK DesiredAccess; - OBJECT_ATTRIBUTES attr; - - ULONG CreateOptions; - ULONG MailslotQuota; - ULONG MaxMessageSize; - LARGE_INTEGER TimeOut; - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS rc; - UNICODE_STRING str; - WCHAR buffer1[] = { '\\','?','?','\\','M','A','I','L','S','L','O','T','\\', - 'R',':','\\','F','R','E','D','\0' }; - - TimeOut.QuadPart = -1; - - pRtlInitUnicodeString(&str, buffer1); - InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL); - DesiredAccess = CreateOptions = MailslotQuota = MaxMessageSize = 0; - - /* - * Check for NULL pointer handling - */ - rc = pNtCreateMailslotFile(NULL, DesiredAccess, - &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize, - &TimeOut); - ok( rc == STATUS_ACCESS_VIOLATION, "rc = %x not c0000005 STATUS_ACCESS_VIOLATION\n", rc); - - /* - * Test to see if the Timeout can be NULL - */ - rc = pNtCreateMailslotFile(&hslot, DesiredAccess, - &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize, - NULL); - ok( rc == STATUS_SUCCESS, "rc = %x not STATUS_SUCCESS\n", rc); - ok( hslot != 0, "Handle is invalid\n"); - - if ( rc == STATUS_SUCCESS ) rc = pNtClose(hslot); - - /* - * Test that the length field is checked properly - */ - attr.Length = 0; - rc = pNtCreateMailslotFile(&hslot, DesiredAccess, - &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize, - &TimeOut); - todo_wine ok( rc == STATUS_INVALID_PARAMETER, "rc = %x not c000000d STATUS_INVALID_PARAMETER\n", rc); - - if (rc == STATUS_SUCCESS) pNtClose(hslot); - - attr.Length = sizeof(OBJECT_ATTRIBUTES)+1; - rc = pNtCreateMailslotFile(&hslot, DesiredAccess, - &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize, - &TimeOut); - todo_wine ok( rc == STATUS_INVALID_PARAMETER, "rc = %x not c000000d STATUS_INVALID_PARAMETER\n", rc); - - if (rc == STATUS_SUCCESS) pNtClose(hslot); - - /* - * Test handling of a NULL unicode string in ObjectName - */ - InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL); - attr.ObjectName = NULL; - rc = pNtCreateMailslotFile(&hslot, DesiredAccess, - &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize, - &TimeOut); - ok( rc == STATUS_OBJECT_PATH_SYNTAX_BAD, "rc = %x not c000003b STATUS_OBJECT_PATH_SYNTAX_BAD\n", rc); - - if (rc == STATUS_SUCCESS) pNtClose(hslot); - - /* - * Test a valid call - */ - InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL); - rc = pNtCreateMailslotFile(&hslot, DesiredAccess, - &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize, - &TimeOut); - ok( rc == STATUS_SUCCESS, "Create MailslotFile failed rc = %x %u\n", rc, GetLastError()); - ok( hslot != 0, "Handle is invalid\n"); - - rc = pNtClose(hslot); - ok( rc == STATUS_SUCCESS, "NtClose failed\n"); -} - -static void test_iocp_setcompletion(HANDLE h) -{ - NTSTATUS res; - long count; - - res = pNtSetIoCompletion( h, CKEY_FIRST, CVALUE_FIRST, STATUS_INVALID_DEVICE_REQUEST, 3 ); - ok( res == STATUS_SUCCESS, "NtSetIoCompletion failed: %x\n", res ); - - count = get_pending_msgs(h); - ok( count == 1, "Unexpected msg count: %ld\n", count ); - - if (get_msg(h)) - { - ok( completionKey == CKEY_FIRST, "Invalid completion key: %lx\n", completionKey ); - ok( ioSb.Information == 3, "Invalid ioSb.Information: %ld\n", ioSb.Information ); - ok( U(ioSb).Status == STATUS_INVALID_DEVICE_REQUEST, "Invalid ioSb.Status: %x\n", U(ioSb).Status); - ok( completionValue == CVALUE_FIRST, "Invalid completion value: %lx\n", completionValue ); - } - - count = get_pending_msgs(h); - ok( !count, "Unexpected msg count: %ld\n", count ); -} - -static void test_iocp_fileio(HANDLE h) -{ - static const char pipe_name[] = "\\\\.\\pipe\\iocompletiontestnamedpipe"; - - IO_STATUS_BLOCK iosb; - FILE_COMPLETION_INFORMATION fci = {h, CKEY_SECOND}; - HANDLE hPipeSrv, hPipeClt; - NTSTATUS res; - - hPipeSrv = CreateNamedPipeA( pipe_name, PIPE_ACCESS_INBOUND, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 4, 1024, 1024, 1000, NULL ); - ok( hPipeSrv != INVALID_HANDLE_VALUE, "Cannot create named pipe\n" ); - if (hPipeSrv != INVALID_HANDLE_VALUE ) - { - hPipeClt = CreateFileA( pipe_name, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING | FILE_FLAG_OVERLAPPED, NULL ); - ok( hPipeClt != INVALID_HANDLE_VALUE, "Cannot connect to pipe\n" ); - if (hPipeClt != INVALID_HANDLE_VALUE) - { - res = pNtSetInformationFile( hPipeSrv, &iosb, &fci, sizeof(fci), FileCompletionInformation ); - ok( res == STATUS_INVALID_PARAMETER, "Unexpected NtSetInformationFile on non-overlapped handle: %x\n", res ); - CloseHandle(hPipeClt); - } - CloseHandle( hPipeSrv ); - } - - hPipeSrv = CreateNamedPipeA( pipe_name, PIPE_ACCESS_INBOUND | FILE_FLAG_OVERLAPPED, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 4, 1024, 1024, 1000, NULL ); - ok( hPipeSrv != INVALID_HANDLE_VALUE, "Cannot create named pipe\n" ); - if (hPipeSrv == INVALID_HANDLE_VALUE ) - return; - - hPipeClt = CreateFileA( pipe_name, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING | FILE_FLAG_OVERLAPPED, NULL ); - ok( hPipeClt != INVALID_HANDLE_VALUE, "Cannot connect to pipe\n" ); - if (hPipeClt != INVALID_HANDLE_VALUE) - { - OVERLAPPED o = {0,}; - BYTE buf[3]; - DWORD read; - long count; - - NTSTATUS res = pNtSetInformationFile( hPipeSrv, &iosb, &fci, sizeof(fci), FileCompletionInformation ); - ok( res == STATUS_SUCCESS, "NtSetInformationFile failed: %x\n", res ); - ok( U(iosb).Status == STATUS_SUCCESS, "iosb.Status invalid: %x\n", U(iosb).Status ); - - count = get_pending_msgs(h); - ok( !count, "Unexpected msg count: %ld\n", count ); - ReadFile( hPipeSrv, buf, 3, &read, &o); - count = get_pending_msgs(h); - ok( !count, "Unexpected msg count: %ld\n", count ); - WriteFile( hPipeClt, buf, 3, &read, NULL ); - - if (get_msg(h)) - { - ok( completionKey == CKEY_SECOND, "Invalid completion key: %lx\n", completionKey ); - ok( ioSb.Information == 3, "Invalid ioSb.Information: %ld\n", ioSb.Information ); - ok( U(ioSb).Status == STATUS_SUCCESS, "Invalid ioSb.Status: %x\n", U(ioSb).Status); - ok( completionValue == (ULONG_PTR)&o, "Invalid completion value: %lx\n", completionValue ); - } - count = get_pending_msgs(h); - ok( !count, "Unexpected msg count: %ld\n", count ); - - WriteFile( hPipeClt, buf, 2, &read, NULL ); - count = get_pending_msgs(h); - ok( !count, "Unexpected msg count: %ld\n", count ); - ReadFile( hPipeSrv, buf, 2, &read, &o); - count = get_pending_msgs(h); - ok( count == 1, "Unexpected msg count: %ld\n", count ); - if (get_msg(h)) - { - ok( completionKey == CKEY_SECOND, "Invalid completion key: %lx\n", completionKey ); - ok( ioSb.Information == 2, "Invalid ioSb.Information: %ld\n", ioSb.Information ); - ok( U(ioSb).Status == STATUS_SUCCESS, "Invalid ioSb.Status: %x\n", U(ioSb).Status); - ok( completionValue == (ULONG_PTR)&o, "Invalid completion value: %lx\n", completionValue ); - } - - ReadFile( hPipeSrv, buf, sizeof(buf), &read, &o); - CloseHandle( hPipeSrv ); - count = get_pending_msgs(h); - ok( count == 1, "Unexpected msg count: %ld\n", count ); - if (get_msg(h)) - { - ok( completionKey == CKEY_SECOND, "Invalid completion key: %lx\n", completionKey ); - ok( ioSb.Information == 0, "Invalid ioSb.Information: %ld\n", ioSb.Information ); - /* wine sends wrong status here */ - todo_wine ok( U(ioSb).Status == STATUS_PIPE_BROKEN, "Invalid ioSb.Status: %x\n", U(ioSb).Status); - ok( completionValue == (ULONG_PTR)&o, "Invalid completion value: %lx\n", completionValue ); - } - } - - CloseHandle( hPipeClt ); -} - -static void test_iocompletion(void) -{ - HANDLE h = INVALID_HANDLE_VALUE; - NTSTATUS res; - - res = pNtCreateIoCompletion( &h, IO_COMPLETION_ALL_ACCESS, NULL, 0); - - ok( res == 0, "NtCreateIoCompletion anonymous failed: %x\n", res ); - ok( h && h != INVALID_HANDLE_VALUE, "Invalid handle returned\n" ); - - if ( h && h != INVALID_HANDLE_VALUE) - { - test_iocp_setcompletion(h); - test_iocp_fileio(h); - pNtClose(h); - } -} - -START_TEST(file) -{ - HMODULE hntdll = GetModuleHandleA("ntdll.dll"); - if (!hntdll) - { - skip("not running on NT, skipping test\n"); - return; - } - - pRtlInitUnicodeString = (void *)GetProcAddress(hntdll, "RtlInitUnicodeString"); - pNtCreateMailslotFile = (void *)GetProcAddress(hntdll, "NtCreateMailslotFile"); - pNtReadFile = (void *)GetProcAddress(hntdll, "NtReadFile"); - pNtWriteFile = (void *)GetProcAddress(hntdll, "NtWriteFile"); - pNtClose = (void *)GetProcAddress(hntdll, "NtClose"); - pNtCreateIoCompletion = (void *)GetProcAddress(hntdll, "NtCreateIoCompletion"); - pNtOpenIoCompletion = (void *)GetProcAddress(hntdll, "NtOpenIoCompletion"); - pNtQueryIoCompletion = (void *)GetProcAddress(hntdll, "NtQueryIoCompletion"); - pNtRemoveIoCompletion = (void *)GetProcAddress(hntdll, "NtRemoveIoCompletion"); - pNtSetIoCompletion = (void *)GetProcAddress(hntdll, "NtSetIoCompletion"); - pNtSetInformationFile = (void *)GetProcAddress(hntdll, "NtSetInformationFile"); - - read_file_test(); - nt_mailslot_test(); - test_iocompletion(); -} diff --git a/rostests/winetests/ntdll/generated.c b/rostests/winetests/ntdll/generated.c deleted file mode 100755 index 4818c9e50eb..00000000000 --- a/rostests/winetests/ntdll/generated.c +++ /dev/null @@ -1,2391 +0,0 @@ -/* File generated automatically from tools/winapi/test.dat; do not edit! */ -/* This file can be copied, modified and distributed without restriction. */ - -/* - * Unit tests for data structure packing - */ - -#define WINVER 0x0501 -#define _WIN32_IE 0x0501 -#define _WIN32_WINNT 0x0501 - -#define WINE_NOWINSOCK - -#include "ntdll_test.h" - -#include "wine/test.h" - -/*********************************************************************** - * Compatibility macros - */ - -#define DWORD_PTR UINT_PTR -#define LONG_PTR INT_PTR -#define ULONG_PTR UINT_PTR - -/*********************************************************************** - * Windows API extension - */ - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field) -#elif defined(__GNUC__) -# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field) -#else -/* FIXME: Not sure if is possible to do without compiler extension */ -#endif - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define _TYPE_ALIGNMENT(type) __alignof(type) -#elif defined(__GNUC__) -# define _TYPE_ALIGNMENT(type) __alignof__(type) -#else -/* - * FIXME: Not sure if is possible to do without compiler extension - * (if type is not just a name that is, if so the normal) - * TYPE_ALIGNMENT can be used) - */ -#endif - -#if defined(TYPE_ALIGNMENT) && defined(_MSC_VER) && _MSC_VER >= 800 && !defined(__cplusplus) -#pragma warning(disable:4116) -#endif - -#if !defined(TYPE_ALIGNMENT) && defined(_TYPE_ALIGNMENT) -# define TYPE_ALIGNMENT _TYPE_ALIGNMENT -#endif - -/*********************************************************************** - * Test helper macros - */ - -#ifdef FIELD_ALIGNMENT -# define TEST_FIELD_ALIGNMENT(type, field, align) \ - ok(FIELD_ALIGNMENT(type, field) == align, \ - "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \ - (int)FIELD_ALIGNMENT(type, field)) -#else -# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0) -#endif - -#define TEST_FIELD_OFFSET(type, field, offset) \ - ok(FIELD_OFFSET(type, field) == offset, \ - "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \ - (long int)FIELD_OFFSET(type, field)) - -#ifdef _TYPE_ALIGNMENT -#define TEST__TYPE_ALIGNMENT(type, align) \ - ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type)) -#else -# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#ifdef TYPE_ALIGNMENT -#define TEST_TYPE_ALIGNMENT(type, align) \ - ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type)) -#else -# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#define TEST_TYPE_SIZE(type, size) \ - ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type))) - -/*********************************************************************** - * Test macros - */ - -#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \ - TEST_TYPE_SIZE(field_type, field_size); \ - TEST_FIELD_ALIGNMENT(type, field_name, field_align); \ - TEST_FIELD_OFFSET(type, field_name, field_offset); \ - -#define TEST_TYPE(type, size, align) \ - TEST_TYPE_ALIGNMENT(type, align); \ - TEST_TYPE_SIZE(type, size) - -#define TEST_TYPE_POINTER(type, size, align) \ - TEST__TYPE_ALIGNMENT(*(type)0, align); \ - TEST_TYPE_SIZE(*(type)0, size) - -#define TEST_TYPE_SIGNED(type) \ - ok((type) -1 < 0, "(" #type ") -1 < 0\n"); - -#define TEST_TYPE_UNSIGNED(type) \ - ok((type) -1 > 0, "(" #type ") -1 > 0\n"); - -static void test_pack_DWORD32(void) -{ - /* DWORD32 */ - TEST_TYPE(DWORD32, 4, 4); - TEST_TYPE_UNSIGNED(DWORD32); -} - -static void test_pack_DWORD64(void) -{ - /* DWORD64 */ - TEST_TYPE(DWORD64, 8, 8); - TEST_TYPE_UNSIGNED(DWORD64); -} - -static void test_pack_DWORD_PTR(void) -{ - /* DWORD_PTR */ - TEST_TYPE(DWORD_PTR, 4, 4); -} - -static void test_pack_HALF_PTR(void) -{ - /* HALF_PTR */ - TEST_TYPE(HALF_PTR, 2, 2); - TEST_TYPE_SIGNED(HALF_PTR); -} - -static void test_pack_INT16(void) -{ - /* INT16 */ - TEST_TYPE(INT16, 2, 2); - TEST_TYPE_SIGNED(INT16); -} - -static void test_pack_INT32(void) -{ - /* INT32 */ - TEST_TYPE(INT32, 4, 4); - TEST_TYPE_SIGNED(INT32); -} - -static void test_pack_INT64(void) -{ - /* INT64 */ - TEST_TYPE(INT64, 8, 8); - TEST_TYPE_SIGNED(INT64); -} - -static void test_pack_INT8(void) -{ - /* INT8 */ - TEST_TYPE(INT8, 1, 1); - TEST_TYPE_SIGNED(INT8); -} - -static void test_pack_INT_PTR(void) -{ - /* INT_PTR */ - TEST_TYPE(INT_PTR, 4, 4); - TEST_TYPE_SIGNED(INT_PTR); -} - -static void test_pack_LONG32(void) -{ - /* LONG32 */ - TEST_TYPE(LONG32, 4, 4); - TEST_TYPE_SIGNED(LONG32); -} - -static void test_pack_LONG64(void) -{ - /* LONG64 */ - TEST_TYPE(LONG64, 8, 8); - TEST_TYPE_SIGNED(LONG64); -} - -static void test_pack_LONG_PTR(void) -{ - /* LONG_PTR */ - TEST_TYPE(LONG_PTR, 4, 4); - TEST_TYPE_SIGNED(LONG_PTR); -} - -static void test_pack_SIZE_T(void) -{ - /* SIZE_T */ - TEST_TYPE(SIZE_T, 4, 4); -} - -static void test_pack_SSIZE_T(void) -{ - /* SSIZE_T */ - TEST_TYPE(SSIZE_T, 4, 4); -} - -static void test_pack_UHALF_PTR(void) -{ - /* UHALF_PTR */ - TEST_TYPE(UHALF_PTR, 2, 2); - TEST_TYPE_UNSIGNED(UHALF_PTR); -} - -static void test_pack_UINT16(void) -{ - /* UINT16 */ - TEST_TYPE(UINT16, 2, 2); - TEST_TYPE_UNSIGNED(UINT16); -} - -static void test_pack_UINT32(void) -{ - /* UINT32 */ - TEST_TYPE(UINT32, 4, 4); - TEST_TYPE_UNSIGNED(UINT32); -} - -static void test_pack_UINT64(void) -{ - /* UINT64 */ - TEST_TYPE(UINT64, 8, 8); - TEST_TYPE_UNSIGNED(UINT64); -} - -static void test_pack_UINT8(void) -{ - /* UINT8 */ - TEST_TYPE(UINT8, 1, 1); - TEST_TYPE_UNSIGNED(UINT8); -} - -static void test_pack_UINT_PTR(void) -{ - /* UINT_PTR */ - TEST_TYPE(UINT_PTR, 4, 4); - TEST_TYPE_UNSIGNED(UINT_PTR); -} - -static void test_pack_ULONG32(void) -{ - /* ULONG32 */ - TEST_TYPE(ULONG32, 4, 4); - TEST_TYPE_UNSIGNED(ULONG32); -} - -static void test_pack_ULONG64(void) -{ - /* ULONG64 */ - TEST_TYPE(ULONG64, 8, 8); - TEST_TYPE_UNSIGNED(ULONG64); -} - -static void test_pack_ULONG_PTR(void) -{ - /* ULONG_PTR */ - TEST_TYPE(ULONG_PTR, 4, 4); - TEST_TYPE_UNSIGNED(ULONG_PTR); -} - -static void test_pack_ACCESS_ALLOWED_ACE(void) -{ - /* ACCESS_ALLOWED_ACE (pack 4) */ - TEST_TYPE(ACCESS_ALLOWED_ACE, 12, 4); - TEST_FIELD(ACCESS_ALLOWED_ACE, ACE_HEADER, Header, 0, 4, 2); - TEST_FIELD(ACCESS_ALLOWED_ACE, DWORD, Mask, 4, 4, 4); - TEST_FIELD(ACCESS_ALLOWED_ACE, DWORD, SidStart, 8, 4, 4); -} - -static void test_pack_ACCESS_DENIED_ACE(void) -{ - /* ACCESS_DENIED_ACE (pack 4) */ - TEST_TYPE(ACCESS_DENIED_ACE, 12, 4); - TEST_FIELD(ACCESS_DENIED_ACE, ACE_HEADER, Header, 0, 4, 2); - TEST_FIELD(ACCESS_DENIED_ACE, DWORD, Mask, 4, 4, 4); - TEST_FIELD(ACCESS_DENIED_ACE, DWORD, SidStart, 8, 4, 4); -} - -static void test_pack_ACCESS_MASK(void) -{ - /* ACCESS_MASK */ - TEST_TYPE(ACCESS_MASK, 4, 4); - TEST_TYPE_UNSIGNED(ACCESS_MASK); -} - -static void test_pack_ACE_HEADER(void) -{ - /* ACE_HEADER (pack 4) */ - TEST_TYPE(ACE_HEADER, 4, 2); - TEST_FIELD(ACE_HEADER, BYTE, AceType, 0, 1, 1); - TEST_FIELD(ACE_HEADER, BYTE, AceFlags, 1, 1, 1); - TEST_FIELD(ACE_HEADER, WORD, AceSize, 2, 2, 2); -} - -static void test_pack_ACL(void) -{ - /* ACL (pack 4) */ - TEST_TYPE(ACL, 8, 2); - TEST_FIELD(ACL, BYTE, AclRevision, 0, 1, 1); - TEST_FIELD(ACL, BYTE, Sbz1, 1, 1, 1); - TEST_FIELD(ACL, WORD, AclSize, 2, 2, 2); - TEST_FIELD(ACL, WORD, AceCount, 4, 2, 2); - TEST_FIELD(ACL, WORD, Sbz2, 6, 2, 2); -} - -static void test_pack_ACL_REVISION_INFORMATION(void) -{ - /* ACL_REVISION_INFORMATION (pack 4) */ - TEST_TYPE(ACL_REVISION_INFORMATION, 4, 4); - TEST_FIELD(ACL_REVISION_INFORMATION, DWORD, AclRevision, 0, 4, 4); -} - -static void test_pack_ACL_SIZE_INFORMATION(void) -{ - /* ACL_SIZE_INFORMATION (pack 4) */ - TEST_TYPE(ACL_SIZE_INFORMATION, 12, 4); - TEST_FIELD(ACL_SIZE_INFORMATION, DWORD, AceCount, 0, 4, 4); - TEST_FIELD(ACL_SIZE_INFORMATION, DWORD, AclBytesInUse, 4, 4, 4); - TEST_FIELD(ACL_SIZE_INFORMATION, DWORD, AclBytesFree, 8, 4, 4); -} - -static void test_pack_BOOLEAN(void) -{ - /* BOOLEAN */ - TEST_TYPE(BOOLEAN, 1, 1); - TEST_TYPE_UNSIGNED(BOOLEAN); -} - -static void test_pack_CCHAR(void) -{ - /* CCHAR */ - TEST_TYPE(CCHAR, 1, 1); - TEST_TYPE_SIGNED(CCHAR); -} - -static void test_pack_CHAR(void) -{ - /* CHAR */ - TEST_TYPE(CHAR, 1, 1); - TEST_TYPE_SIGNED(CHAR); -} - -static void test_pack_DWORDLONG(void) -{ - /* DWORDLONG */ - TEST_TYPE(DWORDLONG, 8, 8); - TEST_TYPE_UNSIGNED(DWORDLONG); -} - -static void test_pack_EXCEPTION_POINTERS(void) -{ - /* EXCEPTION_POINTERS (pack 4) */ - TEST_TYPE(EXCEPTION_POINTERS, 8, 4); - TEST_FIELD(EXCEPTION_POINTERS, PEXCEPTION_RECORD, ExceptionRecord, 0, 4, 4); - TEST_FIELD(EXCEPTION_POINTERS, PCONTEXT, ContextRecord, 4, 4, 4); -} - -static void test_pack_EXCEPTION_RECORD(void) -{ - /* EXCEPTION_RECORD (pack 4) */ - TEST_TYPE(EXCEPTION_RECORD, 80, 4); - TEST_FIELD(EXCEPTION_RECORD, DWORD, ExceptionCode, 0, 4, 4); - TEST_FIELD(EXCEPTION_RECORD, DWORD, ExceptionFlags, 4, 4, 4); - TEST_FIELD(EXCEPTION_RECORD, struct _EXCEPTION_RECORD *, ExceptionRecord, 8, 4, 4); - TEST_FIELD(EXCEPTION_RECORD, PVOID, ExceptionAddress, 12, 4, 4); - TEST_FIELD(EXCEPTION_RECORD, DWORD, NumberParameters, 16, 4, 4); - TEST_FIELD(EXCEPTION_RECORD, ULONG_PTR[EXCEPTION_MAXIMUM_PARAMETERS], ExceptionInformation, 20, 60, 4); -} - -static void test_pack_EXECUTION_STATE(void) -{ - /* EXECUTION_STATE */ - TEST_TYPE(EXECUTION_STATE, 4, 4); - TEST_TYPE_UNSIGNED(EXECUTION_STATE); -} - -static void test_pack_FLOATING_SAVE_AREA(void) -{ - /* FLOATING_SAVE_AREA (pack 4) */ - TEST_TYPE(FLOATING_SAVE_AREA, 112, 4); - TEST_FIELD(FLOATING_SAVE_AREA, DWORD, ControlWord, 0, 4, 4); - TEST_FIELD(FLOATING_SAVE_AREA, DWORD, StatusWord, 4, 4, 4); - TEST_FIELD(FLOATING_SAVE_AREA, DWORD, TagWord, 8, 4, 4); - TEST_FIELD(FLOATING_SAVE_AREA, DWORD, ErrorOffset, 12, 4, 4); - TEST_FIELD(FLOATING_SAVE_AREA, DWORD, ErrorSelector, 16, 4, 4); - TEST_FIELD(FLOATING_SAVE_AREA, DWORD, DataOffset, 20, 4, 4); - TEST_FIELD(FLOATING_SAVE_AREA, DWORD, DataSelector, 24, 4, 4); - TEST_FIELD(FLOATING_SAVE_AREA, BYTE[SIZE_OF_80387_REGISTERS], RegisterArea, 28, 80, 1); - TEST_FIELD(FLOATING_SAVE_AREA, DWORD, Cr0NpxState, 108, 4, 4); -} - -static void test_pack_FPO_DATA(void) -{ - /* FPO_DATA (pack 4) */ - TEST_TYPE(FPO_DATA, 16, 4); - TEST_FIELD(FPO_DATA, DWORD, ulOffStart, 0, 4, 4); - TEST_FIELD(FPO_DATA, DWORD, cbProcSize, 4, 4, 4); - TEST_FIELD(FPO_DATA, DWORD, cdwLocals, 8, 4, 4); - TEST_FIELD(FPO_DATA, WORD, cdwParams, 12, 2, 2); -} - -static void test_pack_GENERIC_MAPPING(void) -{ - /* GENERIC_MAPPING (pack 4) */ - TEST_TYPE(GENERIC_MAPPING, 16, 4); - TEST_FIELD(GENERIC_MAPPING, ACCESS_MASK, GenericRead, 0, 4, 4); - TEST_FIELD(GENERIC_MAPPING, ACCESS_MASK, GenericWrite, 4, 4, 4); - TEST_FIELD(GENERIC_MAPPING, ACCESS_MASK, GenericExecute, 8, 4, 4); - TEST_FIELD(GENERIC_MAPPING, ACCESS_MASK, GenericAll, 12, 4, 4); -} - -static void test_pack_HANDLE(void) -{ - /* HANDLE */ - TEST_TYPE(HANDLE, 4, 4); -} - -static void test_pack_HRESULT(void) -{ - /* HRESULT */ - TEST_TYPE(HRESULT, 4, 4); -} - -static void test_pack_IMAGE_ARCHIVE_MEMBER_HEADER(void) -{ - /* IMAGE_ARCHIVE_MEMBER_HEADER (pack 4) */ - TEST_TYPE(IMAGE_ARCHIVE_MEMBER_HEADER, 60, 1); - TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[16], Name, 0, 16, 1); - TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[12], Date, 16, 12, 1); - TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[6], UserID, 28, 6, 1); - TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[6], GroupID, 34, 6, 1); - TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[8], Mode, 40, 8, 1); - TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[10], Size, 48, 10, 1); - TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[2], EndHeader, 58, 2, 1); -} - -static void test_pack_IMAGE_AUX_SYMBOL(void) -{ - /* IMAGE_AUX_SYMBOL (pack 2) */ -} - -static void test_pack_IMAGE_BASE_RELOCATION(void) -{ - /* IMAGE_BASE_RELOCATION (pack 4) */ - TEST_TYPE(IMAGE_BASE_RELOCATION, 8, 4); - TEST_FIELD(IMAGE_BASE_RELOCATION, DWORD, VirtualAddress, 0, 4, 4); - TEST_FIELD(IMAGE_BASE_RELOCATION, DWORD, SizeOfBlock, 4, 4, 4); -} - -static void test_pack_IMAGE_BOUND_FORWARDER_REF(void) -{ - /* IMAGE_BOUND_FORWARDER_REF (pack 4) */ - TEST_TYPE(IMAGE_BOUND_FORWARDER_REF, 8, 4); - TEST_FIELD(IMAGE_BOUND_FORWARDER_REF, DWORD, TimeDateStamp, 0, 4, 4); - TEST_FIELD(IMAGE_BOUND_FORWARDER_REF, WORD, OffsetModuleName, 4, 2, 2); - TEST_FIELD(IMAGE_BOUND_FORWARDER_REF, WORD, Reserved, 6, 2, 2); -} - -static void test_pack_IMAGE_BOUND_IMPORT_DESCRIPTOR(void) -{ - /* IMAGE_BOUND_IMPORT_DESCRIPTOR (pack 4) */ - TEST_TYPE(IMAGE_BOUND_IMPORT_DESCRIPTOR, 8, 4); - TEST_FIELD(IMAGE_BOUND_IMPORT_DESCRIPTOR, DWORD, TimeDateStamp, 0, 4, 4); - TEST_FIELD(IMAGE_BOUND_IMPORT_DESCRIPTOR, WORD, OffsetModuleName, 4, 2, 2); - TEST_FIELD(IMAGE_BOUND_IMPORT_DESCRIPTOR, WORD, NumberOfModuleForwarderRefs, 6, 2, 2); -} - -static void test_pack_IMAGE_COFF_SYMBOLS_HEADER(void) -{ - /* IMAGE_COFF_SYMBOLS_HEADER (pack 4) */ - TEST_TYPE(IMAGE_COFF_SYMBOLS_HEADER, 32, 4); - TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, NumberOfSymbols, 0, 4, 4); - TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, LvaToFirstSymbol, 4, 4, 4); - TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, NumberOfLinenumbers, 8, 4, 4); - TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, LvaToFirstLinenumber, 12, 4, 4); - TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, RvaToFirstByteOfCode, 16, 4, 4); - TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, RvaToLastByteOfCode, 20, 4, 4); - TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, RvaToFirstByteOfData, 24, 4, 4); - TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, RvaToLastByteOfData, 28, 4, 4); -} - -static void test_pack_IMAGE_DATA_DIRECTORY(void) -{ - /* IMAGE_DATA_DIRECTORY (pack 4) */ - TEST_TYPE(IMAGE_DATA_DIRECTORY, 8, 4); - TEST_FIELD(IMAGE_DATA_DIRECTORY, DWORD, VirtualAddress, 0, 4, 4); - TEST_FIELD(IMAGE_DATA_DIRECTORY, DWORD, Size, 4, 4, 4); -} - -static void test_pack_IMAGE_DEBUG_DIRECTORY(void) -{ - /* IMAGE_DEBUG_DIRECTORY (pack 4) */ - TEST_TYPE(IMAGE_DEBUG_DIRECTORY, 28, 4); - TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, Characteristics, 0, 4, 4); - TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, TimeDateStamp, 4, 4, 4); - TEST_FIELD(IMAGE_DEBUG_DIRECTORY, WORD, MajorVersion, 8, 2, 2); - TEST_FIELD(IMAGE_DEBUG_DIRECTORY, WORD, MinorVersion, 10, 2, 2); - TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, Type, 12, 4, 4); - TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, SizeOfData, 16, 4, 4); - TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, AddressOfRawData, 20, 4, 4); - TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, PointerToRawData, 24, 4, 4); -} - -static void test_pack_IMAGE_DEBUG_MISC(void) -{ - /* IMAGE_DEBUG_MISC (pack 4) */ - TEST_TYPE(IMAGE_DEBUG_MISC, 16, 4); - TEST_FIELD(IMAGE_DEBUG_MISC, DWORD, DataType, 0, 4, 4); - TEST_FIELD(IMAGE_DEBUG_MISC, DWORD, Length, 4, 4, 4); - TEST_FIELD(IMAGE_DEBUG_MISC, BYTE, Unicode, 8, 1, 1); - TEST_FIELD(IMAGE_DEBUG_MISC, BYTE[ 3 ], Reserved, 9, 3, 1); - TEST_FIELD(IMAGE_DEBUG_MISC, BYTE[ 1 ], Data, 12, 1, 1); -} - -static void test_pack_IMAGE_DOS_HEADER(void) -{ - /* IMAGE_DOS_HEADER (pack 2) */ - TEST_TYPE(IMAGE_DOS_HEADER, 64, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_magic, 0, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_cblp, 2, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_cp, 4, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_crlc, 6, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_cparhdr, 8, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_minalloc, 10, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_maxalloc, 12, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_ss, 14, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_sp, 16, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_csum, 18, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_ip, 20, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_cs, 22, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_lfarlc, 24, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_ovno, 26, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD[4], e_res, 28, 8, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_oemid, 36, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_oeminfo, 38, 2, 2); - TEST_FIELD(IMAGE_DOS_HEADER, WORD[10], e_res2, 40, 20, 2); - TEST_FIELD(IMAGE_DOS_HEADER, DWORD, e_lfanew, 60, 4, 2); -} - -static void test_pack_IMAGE_EXPORT_DIRECTORY(void) -{ - /* IMAGE_EXPORT_DIRECTORY (pack 4) */ - TEST_TYPE(IMAGE_EXPORT_DIRECTORY, 40, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, Characteristics, 0, 4, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, TimeDateStamp, 4, 4, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, WORD, MajorVersion, 8, 2, 2); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, WORD, MinorVersion, 10, 2, 2); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, Name, 12, 4, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, Base, 16, 4, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, NumberOfFunctions, 20, 4, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, NumberOfNames, 24, 4, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, AddressOfFunctions, 28, 4, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, AddressOfNames, 32, 4, 4); - TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, AddressOfNameOrdinals, 36, 4, 4); -} - -static void test_pack_IMAGE_FILE_HEADER(void) -{ - /* IMAGE_FILE_HEADER (pack 4) */ - TEST_TYPE(IMAGE_FILE_HEADER, 20, 4); - TEST_FIELD(IMAGE_FILE_HEADER, WORD, Machine, 0, 2, 2); - TEST_FIELD(IMAGE_FILE_HEADER, WORD, NumberOfSections, 2, 2, 2); - TEST_FIELD(IMAGE_FILE_HEADER, DWORD, TimeDateStamp, 4, 4, 4); - TEST_FIELD(IMAGE_FILE_HEADER, DWORD, PointerToSymbolTable, 8, 4, 4); - TEST_FIELD(IMAGE_FILE_HEADER, DWORD, NumberOfSymbols, 12, 4, 4); - TEST_FIELD(IMAGE_FILE_HEADER, WORD, SizeOfOptionalHeader, 16, 2, 2); - TEST_FIELD(IMAGE_FILE_HEADER, WORD, Characteristics, 18, 2, 2); -} - -static void test_pack_IMAGE_FUNCTION_ENTRY(void) -{ - /* IMAGE_FUNCTION_ENTRY (pack 4) */ - TEST_TYPE(IMAGE_FUNCTION_ENTRY, 12, 4); - TEST_FIELD(IMAGE_FUNCTION_ENTRY, DWORD, StartingAddress, 0, 4, 4); - TEST_FIELD(IMAGE_FUNCTION_ENTRY, DWORD, EndingAddress, 4, 4, 4); - TEST_FIELD(IMAGE_FUNCTION_ENTRY, DWORD, EndOfPrologue, 8, 4, 4); -} - -static void test_pack_IMAGE_IMPORT_BY_NAME(void) -{ - /* IMAGE_IMPORT_BY_NAME (pack 4) */ - TEST_TYPE(IMAGE_IMPORT_BY_NAME, 4, 2); - TEST_FIELD(IMAGE_IMPORT_BY_NAME, WORD, Hint, 0, 2, 2); - TEST_FIELD(IMAGE_IMPORT_BY_NAME, BYTE[1], Name, 2, 1, 1); -} - -static void test_pack_IMAGE_IMPORT_DESCRIPTOR(void) -{ - /* IMAGE_IMPORT_DESCRIPTOR (pack 4) */ -} - -static void test_pack_IMAGE_LINENUMBER(void) -{ - /* IMAGE_LINENUMBER (pack 2) */ -} - -static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY(void) -{ - /* IMAGE_LOAD_CONFIG_DIRECTORY (pack 4) */ - TEST_TYPE(IMAGE_LOAD_CONFIG_DIRECTORY, 72, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, Size, 0, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, TimeDateStamp, 4, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, WORD, MajorVersion, 8, 2, 2); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, WORD, MinorVersion, 10, 2, 2); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, GlobalFlagsClear, 12, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, GlobalFlagsSet, 16, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, CriticalSectionDefaultTimeout, 20, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, DeCommitFreeBlockThreshold, 24, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, DeCommitTotalFreeThreshold, 28, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, PVOID, LockPrefixTable, 32, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, MaximumAllocationSize, 36, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, VirtualMemoryThreshold, 40, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, ProcessHeapFlags, 44, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, ProcessAffinityMask, 48, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, WORD, CSDVersion, 52, 2, 2); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, WORD, Reserved1, 54, 2, 2); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, PVOID, EditList, 56, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, SecurityCookie, 60, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, SEHandlerTable, 64, 4, 4); - TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, SEHandlerCount, 68, 4, 4); -} - -static void test_pack_IMAGE_NT_HEADERS(void) -{ - /* IMAGE_NT_HEADERS */ - TEST_TYPE(IMAGE_NT_HEADERS, 248, 4); -} - -static void test_pack_IMAGE_OS2_HEADER(void) -{ - /* IMAGE_OS2_HEADER (pack 2) */ - TEST_TYPE(IMAGE_OS2_HEADER, 64, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_magic, 0, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, BYTE, ne_ver, 2, 1, 1); - TEST_FIELD(IMAGE_OS2_HEADER, BYTE, ne_rev, 3, 1, 1); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_enttab, 4, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cbenttab, 6, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, LONG, ne_crc, 8, 4, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_flags, 12, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_autodata, 14, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_heap, 16, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_stack, 18, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, DWORD, ne_csip, 20, 4, 2); - TEST_FIELD(IMAGE_OS2_HEADER, DWORD, ne_sssp, 24, 4, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cseg, 28, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cmod, 30, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cbnrestab, 32, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_segtab, 34, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_rsrctab, 36, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_restab, 38, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_modtab, 40, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_imptab, 42, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, DWORD, ne_nrestab, 44, 4, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cmovent, 48, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_align, 50, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cres, 52, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, BYTE, ne_exetyp, 54, 1, 1); - TEST_FIELD(IMAGE_OS2_HEADER, BYTE, ne_flagsothers, 55, 1, 1); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_pretthunks, 56, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_psegrefbytes, 58, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_swaparea, 60, 2, 2); - TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_expver, 62, 2, 2); -} - -static void test_pack_IMAGE_RELOCATION(void) -{ - /* IMAGE_RELOCATION (pack 2) */ -} - -static void test_pack_IMAGE_RESOURCE_DATA_ENTRY(void) -{ - /* IMAGE_RESOURCE_DATA_ENTRY (pack 4) */ - TEST_TYPE(IMAGE_RESOURCE_DATA_ENTRY, 16, 4); - TEST_FIELD(IMAGE_RESOURCE_DATA_ENTRY, DWORD, OffsetToData, 0, 4, 4); - TEST_FIELD(IMAGE_RESOURCE_DATA_ENTRY, DWORD, Size, 4, 4, 4); - TEST_FIELD(IMAGE_RESOURCE_DATA_ENTRY, DWORD, CodePage, 8, 4, 4); - TEST_FIELD(IMAGE_RESOURCE_DATA_ENTRY, DWORD, Reserved, 12, 4, 4); -} - -static void test_pack_IMAGE_RESOURCE_DIRECTORY(void) -{ - /* IMAGE_RESOURCE_DIRECTORY (pack 4) */ - TEST_TYPE(IMAGE_RESOURCE_DIRECTORY, 16, 4); - TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, DWORD, Characteristics, 0, 4, 4); - TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, DWORD, TimeDateStamp, 4, 4, 4); - TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, WORD, MajorVersion, 8, 2, 2); - TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, WORD, MinorVersion, 10, 2, 2); - TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, WORD, NumberOfNamedEntries, 12, 2, 2); - TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, WORD, NumberOfIdEntries, 14, 2, 2); -} - -static void test_pack_IMAGE_RESOURCE_DIRECTORY_ENTRY(void) -{ - /* IMAGE_RESOURCE_DIRECTORY_ENTRY (pack 4) */ -} - -static void test_pack_IMAGE_RESOURCE_DIRECTORY_STRING(void) -{ - /* IMAGE_RESOURCE_DIRECTORY_STRING (pack 4) */ - TEST_TYPE(IMAGE_RESOURCE_DIRECTORY_STRING, 4, 2); - TEST_FIELD(IMAGE_RESOURCE_DIRECTORY_STRING, WORD, Length, 0, 2, 2); - TEST_FIELD(IMAGE_RESOURCE_DIRECTORY_STRING, CHAR[ 1 ], NameString, 2, 1, 1); -} - -static void test_pack_IMAGE_RESOURCE_DIR_STRING_U(void) -{ - /* IMAGE_RESOURCE_DIR_STRING_U (pack 4) */ - TEST_TYPE(IMAGE_RESOURCE_DIR_STRING_U, 4, 2); - TEST_FIELD(IMAGE_RESOURCE_DIR_STRING_U, WORD, Length, 0, 2, 2); - TEST_FIELD(IMAGE_RESOURCE_DIR_STRING_U, WCHAR[ 1 ], NameString, 2, 2, 2); -} - -static void test_pack_IMAGE_SECTION_HEADER(void) -{ - /* IMAGE_SECTION_HEADER (pack 4) */ - TEST_FIELD(IMAGE_SECTION_HEADER, BYTE[IMAGE_SIZEOF_SHORT_NAME], Name, 0, 8, 1); -} - -static void test_pack_IMAGE_SEPARATE_DEBUG_HEADER(void) -{ - /* IMAGE_SEPARATE_DEBUG_HEADER (pack 4) */ - TEST_TYPE(IMAGE_SEPARATE_DEBUG_HEADER, 48, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, WORD, Signature, 0, 2, 2); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, WORD, Flags, 2, 2, 2); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, WORD, Machine, 4, 2, 2); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, WORD, Characteristics, 6, 2, 2); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, TimeDateStamp, 8, 4, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, CheckSum, 12, 4, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, ImageBase, 16, 4, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, SizeOfImage, 20, 4, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, NumberOfSections, 24, 4, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, ExportedNamesSize, 28, 4, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, DebugDirectorySize, 32, 4, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, SectionAlignment, 36, 4, 4); - TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD[ 2 ], Reserved, 40, 8, 4); -} - -static void test_pack_IMAGE_SYMBOL(void) -{ - /* IMAGE_SYMBOL (pack 2) */ -} - -static void test_pack_IMAGE_THUNK_DATA(void) -{ - /* IMAGE_THUNK_DATA */ -} - -static void test_pack_IMAGE_TLS_DIRECTORY(void) -{ - /* IMAGE_TLS_DIRECTORY */ - TEST_TYPE(IMAGE_TLS_DIRECTORY, 24, 4); -} - -static void test_pack_IMAGE_VXD_HEADER(void) -{ - /* IMAGE_VXD_HEADER (pack 2) */ - TEST_TYPE(IMAGE_VXD_HEADER, 196, 2); - TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_magic, 0, 2, 2); - TEST_FIELD(IMAGE_VXD_HEADER, BYTE, e32_border, 2, 1, 1); - TEST_FIELD(IMAGE_VXD_HEADER, BYTE, e32_worder, 3, 1, 1); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_level, 4, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_cpu, 8, 2, 2); - TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_os, 10, 2, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_ver, 12, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_mflags, 16, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_mpages, 20, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_startobj, 24, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_eip, 28, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_stackobj, 32, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_esp, 36, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_pagesize, 40, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_lastpagesize, 44, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_fixupsize, 48, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_fixupsum, 52, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_ldrsize, 56, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_ldrsum, 60, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_objtab, 64, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_objcnt, 68, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_objmap, 72, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_itermap, 76, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_rsrctab, 80, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_rsrccnt, 84, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_restab, 88, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_enttab, 92, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_dirtab, 96, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_dircnt, 100, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_fpagetab, 104, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_frectab, 108, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_impmod, 112, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_impmodcnt, 116, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_impproc, 120, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_pagesum, 124, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_datapage, 128, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_preload, 132, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_nrestab, 136, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_cbnrestab, 140, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_nressum, 144, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_autodata, 148, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_debuginfo, 152, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_debuglen, 156, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_instpreload, 160, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_instdemand, 164, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_heapsize, 168, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, BYTE[12], e32_res3, 172, 12, 1); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_winresoff, 184, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_winreslen, 188, 4, 2); - TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_devid, 192, 2, 2); - TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_ddkver, 194, 2, 2); -} - -static void test_pack_IO_COUNTERS(void) -{ - /* IO_COUNTERS (pack 8) */ - TEST_TYPE(IO_COUNTERS, 48, 8); - TEST_FIELD(IO_COUNTERS, ULONGLONG, ReadOperationCount, 0, 8, 8); - TEST_FIELD(IO_COUNTERS, ULONGLONG, WriteOperationCount, 8, 8, 8); - TEST_FIELD(IO_COUNTERS, ULONGLONG, OtherOperationCount, 16, 8, 8); - TEST_FIELD(IO_COUNTERS, ULONGLONG, ReadTransferCount, 24, 8, 8); - TEST_FIELD(IO_COUNTERS, ULONGLONG, WriteTransferCount, 32, 8, 8); - TEST_FIELD(IO_COUNTERS, ULONGLONG, OtherTransferCount, 40, 8, 8); -} - -static void test_pack_LANGID(void) -{ - /* LANGID */ - TEST_TYPE(LANGID, 2, 2); - TEST_TYPE_UNSIGNED(LANGID); -} - -static void test_pack_LARGE_INTEGER(void) -{ - /* LARGE_INTEGER (pack 4) */ -} - -static void test_pack_LCID(void) -{ - /* LCID */ - TEST_TYPE(LCID, 4, 4); - TEST_TYPE_UNSIGNED(LCID); -} - -static void test_pack_LIST_ENTRY(void) -{ - /* LIST_ENTRY (pack 4) */ - TEST_TYPE(LIST_ENTRY, 8, 4); - TEST_FIELD(LIST_ENTRY, struct _LIST_ENTRY *, Flink, 0, 4, 4); - TEST_FIELD(LIST_ENTRY, struct _LIST_ENTRY *, Blink, 4, 4, 4); -} - -static void test_pack_LONG(void) -{ - /* LONG */ - TEST_TYPE(LONG, 4, 4); - TEST_TYPE_SIGNED(LONG); -} - -static void test_pack_LONGLONG(void) -{ - /* LONGLONG */ - TEST_TYPE(LONGLONG, 8, 8); - TEST_TYPE_SIGNED(LONGLONG); -} - -static void test_pack_LUID(void) -{ - /* LUID (pack 4) */ - TEST_TYPE(LUID, 8, 4); - TEST_FIELD(LUID, DWORD, LowPart, 0, 4, 4); - TEST_FIELD(LUID, LONG, HighPart, 4, 4, 4); -} - -static void test_pack_LUID_AND_ATTRIBUTES(void) -{ - /* LUID_AND_ATTRIBUTES (pack 4) */ - TEST_TYPE(LUID_AND_ATTRIBUTES, 12, 4); - TEST_FIELD(LUID_AND_ATTRIBUTES, LUID, Luid, 0, 8, 4); - TEST_FIELD(LUID_AND_ATTRIBUTES, DWORD, Attributes, 8, 4, 4); -} - -static void test_pack_MEMORY_BASIC_INFORMATION(void) -{ - /* MEMORY_BASIC_INFORMATION (pack 4) */ - TEST_TYPE(MEMORY_BASIC_INFORMATION, 28, 4); - TEST_FIELD(MEMORY_BASIC_INFORMATION, LPVOID, BaseAddress, 0, 4, 4); - TEST_FIELD(MEMORY_BASIC_INFORMATION, LPVOID, AllocationBase, 4, 4, 4); - TEST_FIELD(MEMORY_BASIC_INFORMATION, DWORD, AllocationProtect, 8, 4, 4); - TEST_FIELD(MEMORY_BASIC_INFORMATION, SIZE_T, RegionSize, 12, 4, 4); - TEST_FIELD(MEMORY_BASIC_INFORMATION, DWORD, State, 16, 4, 4); - TEST_FIELD(MEMORY_BASIC_INFORMATION, DWORD, Protect, 20, 4, 4); - TEST_FIELD(MEMORY_BASIC_INFORMATION, DWORD, Type, 24, 4, 4); -} - -static void test_pack_MESSAGE_RESOURCE_BLOCK(void) -{ - /* MESSAGE_RESOURCE_BLOCK (pack 4) */ - TEST_TYPE(MESSAGE_RESOURCE_BLOCK, 12, 4); - TEST_FIELD(MESSAGE_RESOURCE_BLOCK, DWORD, LowId, 0, 4, 4); - TEST_FIELD(MESSAGE_RESOURCE_BLOCK, DWORD, HighId, 4, 4, 4); - TEST_FIELD(MESSAGE_RESOURCE_BLOCK, DWORD, OffsetToEntries, 8, 4, 4); -} - -static void test_pack_MESSAGE_RESOURCE_DATA(void) -{ - /* MESSAGE_RESOURCE_DATA (pack 4) */ - TEST_TYPE(MESSAGE_RESOURCE_DATA, 16, 4); - TEST_FIELD(MESSAGE_RESOURCE_DATA, DWORD, NumberOfBlocks, 0, 4, 4); - TEST_FIELD(MESSAGE_RESOURCE_DATA, MESSAGE_RESOURCE_BLOCK[ 1 ], Blocks, 4, 12, 4); -} - -static void test_pack_MESSAGE_RESOURCE_ENTRY(void) -{ - /* MESSAGE_RESOURCE_ENTRY (pack 4) */ - TEST_TYPE(MESSAGE_RESOURCE_ENTRY, 6, 2); - TEST_FIELD(MESSAGE_RESOURCE_ENTRY, WORD, Length, 0, 2, 2); - TEST_FIELD(MESSAGE_RESOURCE_ENTRY, WORD, Flags, 2, 2, 2); - TEST_FIELD(MESSAGE_RESOURCE_ENTRY, BYTE[1], Text, 4, 1, 1); -} - -static void test_pack_NT_TIB(void) -{ - /* NT_TIB (pack 4) */ - TEST_FIELD(NT_TIB, struct _EXCEPTION_REGISTRATION_RECORD *, ExceptionList, 0, 4, 4); - TEST_FIELD(NT_TIB, PVOID, StackBase, 4, 4, 4); - TEST_FIELD(NT_TIB, PVOID, StackLimit, 8, 4, 4); - TEST_FIELD(NT_TIB, PVOID, SubSystemTib, 12, 4, 4); -} - -static void test_pack_OBJECT_TYPE_LIST(void) -{ - /* OBJECT_TYPE_LIST (pack 4) */ - TEST_TYPE(OBJECT_TYPE_LIST, 8, 4); - TEST_FIELD(OBJECT_TYPE_LIST, WORD, Level, 0, 2, 2); - TEST_FIELD(OBJECT_TYPE_LIST, WORD, Sbz, 2, 2, 2); - TEST_FIELD(OBJECT_TYPE_LIST, GUID *, ObjectType, 4, 4, 4); -} - -static void test_pack_PACCESS_ALLOWED_ACE(void) -{ - /* PACCESS_ALLOWED_ACE */ - TEST_TYPE(PACCESS_ALLOWED_ACE, 4, 4); - TEST_TYPE_POINTER(PACCESS_ALLOWED_ACE, 12, 4); -} - -static void test_pack_PACCESS_DENIED_ACE(void) -{ - /* PACCESS_DENIED_ACE */ - TEST_TYPE(PACCESS_DENIED_ACE, 4, 4); - TEST_TYPE_POINTER(PACCESS_DENIED_ACE, 12, 4); -} - -static void test_pack_PACCESS_TOKEN(void) -{ - /* PACCESS_TOKEN */ - TEST_TYPE(PACCESS_TOKEN, 4, 4); -} - -static void test_pack_PACE_HEADER(void) -{ - /* PACE_HEADER */ - TEST_TYPE(PACE_HEADER, 4, 4); - TEST_TYPE_POINTER(PACE_HEADER, 4, 2); -} - -static void test_pack_PACL(void) -{ - /* PACL */ - TEST_TYPE(PACL, 4, 4); - TEST_TYPE_POINTER(PACL, 8, 2); -} - -static void test_pack_PACL_REVISION_INFORMATION(void) -{ - /* PACL_REVISION_INFORMATION */ - TEST_TYPE(PACL_REVISION_INFORMATION, 4, 4); - TEST_TYPE_POINTER(PACL_REVISION_INFORMATION, 4, 4); -} - -static void test_pack_PACL_SIZE_INFORMATION(void) -{ - /* PACL_SIZE_INFORMATION */ - TEST_TYPE(PACL_SIZE_INFORMATION, 4, 4); - TEST_TYPE_POINTER(PACL_SIZE_INFORMATION, 12, 4); -} - -static void test_pack_PCCH(void) -{ - /* PCCH */ - TEST_TYPE(PCCH, 4, 4); - TEST_TYPE_POINTER(PCCH, 1, 1); -} - -static void test_pack_PCH(void) -{ - /* PCH */ - TEST_TYPE(PCH, 4, 4); - TEST_TYPE_POINTER(PCH, 1, 1); -} - -static void test_pack_PCSTR(void) -{ - /* PCSTR */ - TEST_TYPE(PCSTR, 4, 4); - TEST_TYPE_POINTER(PCSTR, 1, 1); -} - -static void test_pack_PCTSTR(void) -{ - /* PCTSTR */ - TEST_TYPE(PCTSTR, 4, 4); -} - -static void test_pack_PCWCH(void) -{ - /* PCWCH */ - TEST_TYPE(PCWCH, 4, 4); - TEST_TYPE_POINTER(PCWCH, 2, 2); -} - -static void test_pack_PCWSTR(void) -{ - /* PCWSTR */ - TEST_TYPE(PCWSTR, 4, 4); - TEST_TYPE_POINTER(PCWSTR, 2, 2); -} - -static void test_pack_PEXCEPTION_POINTERS(void) -{ - /* PEXCEPTION_POINTERS */ - TEST_TYPE(PEXCEPTION_POINTERS, 4, 4); - TEST_TYPE_POINTER(PEXCEPTION_POINTERS, 8, 4); -} - -static void test_pack_PEXCEPTION_RECORD(void) -{ - /* PEXCEPTION_RECORD */ - TEST_TYPE(PEXCEPTION_RECORD, 4, 4); - TEST_TYPE_POINTER(PEXCEPTION_RECORD, 80, 4); -} - -static void test_pack_PFLOATING_SAVE_AREA(void) -{ - /* PFLOATING_SAVE_AREA */ - TEST_TYPE(PFLOATING_SAVE_AREA, 4, 4); - TEST_TYPE_POINTER(PFLOATING_SAVE_AREA, 112, 4); -} - -static void test_pack_PFPO_DATA(void) -{ - /* PFPO_DATA */ - TEST_TYPE(PFPO_DATA, 4, 4); - TEST_TYPE_POINTER(PFPO_DATA, 16, 4); -} - -static void test_pack_PGENERIC_MAPPING(void) -{ - /* PGENERIC_MAPPING */ - TEST_TYPE(PGENERIC_MAPPING, 4, 4); - TEST_TYPE_POINTER(PGENERIC_MAPPING, 16, 4); -} - -static void test_pack_PHANDLE(void) -{ - /* PHANDLE */ - TEST_TYPE(PHANDLE, 4, 4); - TEST_TYPE_POINTER(PHANDLE, 4, 4); -} - -static void test_pack_PIMAGE_ARCHIVE_MEMBER_HEADER(void) -{ - /* PIMAGE_ARCHIVE_MEMBER_HEADER */ - TEST_TYPE(PIMAGE_ARCHIVE_MEMBER_HEADER, 4, 4); - TEST_TYPE_POINTER(PIMAGE_ARCHIVE_MEMBER_HEADER, 60, 1); -} - -static void test_pack_PIMAGE_AUX_SYMBOL(void) -{ - /* PIMAGE_AUX_SYMBOL */ - TEST_TYPE(PIMAGE_AUX_SYMBOL, 4, 4); -} - -static void test_pack_PIMAGE_BASE_RELOCATION(void) -{ - /* PIMAGE_BASE_RELOCATION */ - TEST_TYPE(PIMAGE_BASE_RELOCATION, 4, 4); - TEST_TYPE_POINTER(PIMAGE_BASE_RELOCATION, 8, 4); -} - -static void test_pack_PIMAGE_BOUND_FORWARDER_REF(void) -{ - /* PIMAGE_BOUND_FORWARDER_REF */ - TEST_TYPE(PIMAGE_BOUND_FORWARDER_REF, 4, 4); - TEST_TYPE_POINTER(PIMAGE_BOUND_FORWARDER_REF, 8, 4); -} - -static void test_pack_PIMAGE_BOUND_IMPORT_DESCRIPTOR(void) -{ - /* PIMAGE_BOUND_IMPORT_DESCRIPTOR */ - TEST_TYPE(PIMAGE_BOUND_IMPORT_DESCRIPTOR, 4, 4); - TEST_TYPE_POINTER(PIMAGE_BOUND_IMPORT_DESCRIPTOR, 8, 4); -} - -static void test_pack_PIMAGE_COFF_SYMBOLS_HEADER(void) -{ - /* PIMAGE_COFF_SYMBOLS_HEADER */ - TEST_TYPE(PIMAGE_COFF_SYMBOLS_HEADER, 4, 4); - TEST_TYPE_POINTER(PIMAGE_COFF_SYMBOLS_HEADER, 32, 4); -} - -static void test_pack_PIMAGE_DATA_DIRECTORY(void) -{ - /* PIMAGE_DATA_DIRECTORY */ - TEST_TYPE(PIMAGE_DATA_DIRECTORY, 4, 4); - TEST_TYPE_POINTER(PIMAGE_DATA_DIRECTORY, 8, 4); -} - -static void test_pack_PIMAGE_DEBUG_DIRECTORY(void) -{ - /* PIMAGE_DEBUG_DIRECTORY */ - TEST_TYPE(PIMAGE_DEBUG_DIRECTORY, 4, 4); - TEST_TYPE_POINTER(PIMAGE_DEBUG_DIRECTORY, 28, 4); -} - -static void test_pack_PIMAGE_DEBUG_MISC(void) -{ - /* PIMAGE_DEBUG_MISC */ - TEST_TYPE(PIMAGE_DEBUG_MISC, 4, 4); - TEST_TYPE_POINTER(PIMAGE_DEBUG_MISC, 16, 4); -} - -static void test_pack_PIMAGE_DOS_HEADER(void) -{ - /* PIMAGE_DOS_HEADER */ - TEST_TYPE(PIMAGE_DOS_HEADER, 4, 4); - TEST_TYPE_POINTER(PIMAGE_DOS_HEADER, 64, 2); -} - -static void test_pack_PIMAGE_EXPORT_DIRECTORY(void) -{ - /* PIMAGE_EXPORT_DIRECTORY */ - TEST_TYPE(PIMAGE_EXPORT_DIRECTORY, 4, 4); - TEST_TYPE_POINTER(PIMAGE_EXPORT_DIRECTORY, 40, 4); -} - -static void test_pack_PIMAGE_FILE_HEADER(void) -{ - /* PIMAGE_FILE_HEADER */ - TEST_TYPE(PIMAGE_FILE_HEADER, 4, 4); - TEST_TYPE_POINTER(PIMAGE_FILE_HEADER, 20, 4); -} - -static void test_pack_PIMAGE_FUNCTION_ENTRY(void) -{ - /* PIMAGE_FUNCTION_ENTRY */ - TEST_TYPE(PIMAGE_FUNCTION_ENTRY, 4, 4); - TEST_TYPE_POINTER(PIMAGE_FUNCTION_ENTRY, 12, 4); -} - -static void test_pack_PIMAGE_IMPORT_BY_NAME(void) -{ - /* PIMAGE_IMPORT_BY_NAME */ - TEST_TYPE(PIMAGE_IMPORT_BY_NAME, 4, 4); - TEST_TYPE_POINTER(PIMAGE_IMPORT_BY_NAME, 4, 2); -} - -static void test_pack_PIMAGE_IMPORT_DESCRIPTOR(void) -{ - /* PIMAGE_IMPORT_DESCRIPTOR */ - TEST_TYPE(PIMAGE_IMPORT_DESCRIPTOR, 4, 4); -} - -static void test_pack_PIMAGE_LINENUMBER(void) -{ - /* PIMAGE_LINENUMBER */ - TEST_TYPE(PIMAGE_LINENUMBER, 4, 4); -} - -static void test_pack_PIMAGE_LOAD_CONFIG_DIRECTORY(void) -{ - /* PIMAGE_LOAD_CONFIG_DIRECTORY */ - TEST_TYPE(PIMAGE_LOAD_CONFIG_DIRECTORY, 4, 4); - TEST_TYPE_POINTER(PIMAGE_LOAD_CONFIG_DIRECTORY, 72, 4); -} - -static void test_pack_PIMAGE_NT_HEADERS(void) -{ - /* PIMAGE_NT_HEADERS */ - TEST_TYPE(PIMAGE_NT_HEADERS, 4, 4); -} - -static void test_pack_PIMAGE_OPTIONAL_HEADER(void) -{ - /* PIMAGE_OPTIONAL_HEADER */ - TEST_TYPE(PIMAGE_OPTIONAL_HEADER, 4, 4); -} - -static void test_pack_PIMAGE_OS2_HEADER(void) -{ - /* PIMAGE_OS2_HEADER */ - TEST_TYPE(PIMAGE_OS2_HEADER, 4, 4); - TEST_TYPE_POINTER(PIMAGE_OS2_HEADER, 64, 2); -} - -static void test_pack_PIMAGE_RELOCATION(void) -{ - /* PIMAGE_RELOCATION */ - TEST_TYPE(PIMAGE_RELOCATION, 4, 4); -} - -static void test_pack_PIMAGE_RESOURCE_DATA_ENTRY(void) -{ - /* PIMAGE_RESOURCE_DATA_ENTRY */ - TEST_TYPE(PIMAGE_RESOURCE_DATA_ENTRY, 4, 4); - TEST_TYPE_POINTER(PIMAGE_RESOURCE_DATA_ENTRY, 16, 4); -} - -static void test_pack_PIMAGE_RESOURCE_DIRECTORY(void) -{ - /* PIMAGE_RESOURCE_DIRECTORY */ - TEST_TYPE(PIMAGE_RESOURCE_DIRECTORY, 4, 4); - TEST_TYPE_POINTER(PIMAGE_RESOURCE_DIRECTORY, 16, 4); -} - -static void test_pack_PIMAGE_RESOURCE_DIRECTORY_ENTRY(void) -{ - /* PIMAGE_RESOURCE_DIRECTORY_ENTRY */ - TEST_TYPE(PIMAGE_RESOURCE_DIRECTORY_ENTRY, 4, 4); -} - -static void test_pack_PIMAGE_RESOURCE_DIRECTORY_STRING(void) -{ - /* PIMAGE_RESOURCE_DIRECTORY_STRING */ - TEST_TYPE(PIMAGE_RESOURCE_DIRECTORY_STRING, 4, 4); - TEST_TYPE_POINTER(PIMAGE_RESOURCE_DIRECTORY_STRING, 4, 2); -} - -static void test_pack_PIMAGE_RESOURCE_DIR_STRING_U(void) -{ - /* PIMAGE_RESOURCE_DIR_STRING_U */ - TEST_TYPE(PIMAGE_RESOURCE_DIR_STRING_U, 4, 4); - TEST_TYPE_POINTER(PIMAGE_RESOURCE_DIR_STRING_U, 4, 2); -} - -static void test_pack_PIMAGE_SECTION_HEADER(void) -{ - /* PIMAGE_SECTION_HEADER */ - TEST_TYPE(PIMAGE_SECTION_HEADER, 4, 4); -} - -static void test_pack_PIMAGE_SEPARATE_DEBUG_HEADER(void) -{ - /* PIMAGE_SEPARATE_DEBUG_HEADER */ - TEST_TYPE(PIMAGE_SEPARATE_DEBUG_HEADER, 4, 4); - TEST_TYPE_POINTER(PIMAGE_SEPARATE_DEBUG_HEADER, 48, 4); -} - -static void test_pack_PIMAGE_SYMBOL(void) -{ - /* PIMAGE_SYMBOL */ - TEST_TYPE(PIMAGE_SYMBOL, 4, 4); -} - -static void test_pack_PIMAGE_THUNK_DATA(void) -{ - /* PIMAGE_THUNK_DATA */ - TEST_TYPE(PIMAGE_THUNK_DATA, 4, 4); -} - -static void test_pack_PIMAGE_TLS_CALLBACK(void) -{ - /* PIMAGE_TLS_CALLBACK */ - TEST_TYPE(PIMAGE_TLS_CALLBACK, 4, 4); -} - -static void test_pack_PIMAGE_TLS_DIRECTORY(void) -{ - /* PIMAGE_TLS_DIRECTORY */ - TEST_TYPE(PIMAGE_TLS_DIRECTORY, 4, 4); -} - -static void test_pack_PIMAGE_VXD_HEADER(void) -{ - /* PIMAGE_VXD_HEADER */ - TEST_TYPE(PIMAGE_VXD_HEADER, 4, 4); - TEST_TYPE_POINTER(PIMAGE_VXD_HEADER, 196, 2); -} - -static void test_pack_PIO_COUNTERS(void) -{ - /* PIO_COUNTERS */ - TEST_TYPE(PIO_COUNTERS, 4, 4); - TEST_TYPE_POINTER(PIO_COUNTERS, 48, 8); -} - -static void test_pack_PISECURITY_DESCRIPTOR(void) -{ - /* PISECURITY_DESCRIPTOR */ - TEST_TYPE(PISECURITY_DESCRIPTOR, 4, 4); - TEST_TYPE_POINTER(PISECURITY_DESCRIPTOR, 20, 4); -} - -static void test_pack_PISECURITY_DESCRIPTOR_RELATIVE(void) -{ - /* PISECURITY_DESCRIPTOR_RELATIVE */ - TEST_TYPE(PISECURITY_DESCRIPTOR_RELATIVE, 4, 4); - TEST_TYPE_POINTER(PISECURITY_DESCRIPTOR_RELATIVE, 20, 4); -} - -static void test_pack_PISID(void) -{ - /* PISID */ - TEST_TYPE(PISID, 4, 4); - TEST_TYPE_POINTER(PISID, 12, 4); -} - -static void test_pack_PLARGE_INTEGER(void) -{ - /* PLARGE_INTEGER */ - TEST_TYPE(PLARGE_INTEGER, 4, 4); -} - -static void test_pack_PLIST_ENTRY(void) -{ - /* PLIST_ENTRY */ - TEST_TYPE(PLIST_ENTRY, 4, 4); - TEST_TYPE_POINTER(PLIST_ENTRY, 8, 4); -} - -static void test_pack_PLUID(void) -{ - /* PLUID */ - TEST_TYPE(PLUID, 4, 4); - TEST_TYPE_POINTER(PLUID, 8, 4); -} - -static void test_pack_PLUID_AND_ATTRIBUTES(void) -{ - /* PLUID_AND_ATTRIBUTES */ - TEST_TYPE(PLUID_AND_ATTRIBUTES, 4, 4); - TEST_TYPE_POINTER(PLUID_AND_ATTRIBUTES, 12, 4); -} - -static void test_pack_PMEMORY_BASIC_INFORMATION(void) -{ - /* PMEMORY_BASIC_INFORMATION */ - TEST_TYPE(PMEMORY_BASIC_INFORMATION, 4, 4); - TEST_TYPE_POINTER(PMEMORY_BASIC_INFORMATION, 28, 4); -} - -static void test_pack_PMESSAGE_RESOURCE_BLOCK(void) -{ - /* PMESSAGE_RESOURCE_BLOCK */ - TEST_TYPE(PMESSAGE_RESOURCE_BLOCK, 4, 4); - TEST_TYPE_POINTER(PMESSAGE_RESOURCE_BLOCK, 12, 4); -} - -static void test_pack_PMESSAGE_RESOURCE_DATA(void) -{ - /* PMESSAGE_RESOURCE_DATA */ - TEST_TYPE(PMESSAGE_RESOURCE_DATA, 4, 4); - TEST_TYPE_POINTER(PMESSAGE_RESOURCE_DATA, 16, 4); -} - -static void test_pack_PMESSAGE_RESOURCE_ENTRY(void) -{ - /* PMESSAGE_RESOURCE_ENTRY */ - TEST_TYPE(PMESSAGE_RESOURCE_ENTRY, 4, 4); - TEST_TYPE_POINTER(PMESSAGE_RESOURCE_ENTRY, 6, 2); -} - -static void test_pack_PNT_TIB(void) -{ - /* PNT_TIB */ - TEST_TYPE(PNT_TIB, 4, 4); -} - -static void test_pack_POBJECT_TYPE_LIST(void) -{ - /* POBJECT_TYPE_LIST */ - TEST_TYPE(POBJECT_TYPE_LIST, 4, 4); - TEST_TYPE_POINTER(POBJECT_TYPE_LIST, 8, 4); -} - -static void test_pack_PPRIVILEGE_SET(void) -{ - /* PPRIVILEGE_SET */ - TEST_TYPE(PPRIVILEGE_SET, 4, 4); - TEST_TYPE_POINTER(PPRIVILEGE_SET, 20, 4); -} - -static void test_pack_PRIVILEGE_SET(void) -{ - /* PRIVILEGE_SET (pack 4) */ - TEST_TYPE(PRIVILEGE_SET, 20, 4); - TEST_FIELD(PRIVILEGE_SET, DWORD, PrivilegeCount, 0, 4, 4); - TEST_FIELD(PRIVILEGE_SET, DWORD, Control, 4, 4, 4); - TEST_FIELD(PRIVILEGE_SET, LUID_AND_ATTRIBUTES[ANYSIZE_ARRAY], Privilege, 8, 12, 4); -} - -static void test_pack_PRLIST_ENTRY(void) -{ - /* PRLIST_ENTRY */ - TEST_TYPE(PRLIST_ENTRY, 4, 4); - TEST_TYPE_POINTER(PRLIST_ENTRY, 8, 4); -} - -static void test_pack_PRTL_CRITICAL_SECTION(void) -{ - /* PRTL_CRITICAL_SECTION */ - TEST_TYPE(PRTL_CRITICAL_SECTION, 4, 4); - TEST_TYPE_POINTER(PRTL_CRITICAL_SECTION, 24, 4); -} - -static void test_pack_PRTL_CRITICAL_SECTION_DEBUG(void) -{ - /* PRTL_CRITICAL_SECTION_DEBUG */ - TEST_TYPE(PRTL_CRITICAL_SECTION_DEBUG, 4, 4); -} - -static void test_pack_PRTL_OSVERSIONINFOEXW(void) -{ - /* PRTL_OSVERSIONINFOEXW */ - TEST_TYPE(PRTL_OSVERSIONINFOEXW, 4, 4); - TEST_TYPE_POINTER(PRTL_OSVERSIONINFOEXW, 284, 4); -} - -static void test_pack_PRTL_OSVERSIONINFOW(void) -{ - /* PRTL_OSVERSIONINFOW */ - TEST_TYPE(PRTL_OSVERSIONINFOW, 4, 4); - TEST_TYPE_POINTER(PRTL_OSVERSIONINFOW, 276, 4); -} - -static void test_pack_PRTL_RESOURCE_DEBUG(void) -{ - /* PRTL_RESOURCE_DEBUG */ - TEST_TYPE(PRTL_RESOURCE_DEBUG, 4, 4); -} - -static void test_pack_PSECURITY_DESCRIPTOR(void) -{ - /* PSECURITY_DESCRIPTOR */ - TEST_TYPE(PSECURITY_DESCRIPTOR, 4, 4); -} - -static void test_pack_PSECURITY_QUALITY_OF_SERVICE(void) -{ - /* PSECURITY_QUALITY_OF_SERVICE */ - TEST_TYPE(PSECURITY_QUALITY_OF_SERVICE, 4, 4); -} - -static void test_pack_PSID(void) -{ - /* PSID */ - TEST_TYPE(PSID, 4, 4); -} - -static void test_pack_PSID_IDENTIFIER_AUTHORITY(void) -{ - /* PSID_IDENTIFIER_AUTHORITY */ - TEST_TYPE(PSID_IDENTIFIER_AUTHORITY, 4, 4); - TEST_TYPE_POINTER(PSID_IDENTIFIER_AUTHORITY, 6, 1); -} - -static void test_pack_PSINGLE_LIST_ENTRY(void) -{ - /* PSINGLE_LIST_ENTRY */ - TEST_TYPE(PSINGLE_LIST_ENTRY, 4, 4); - TEST_TYPE_POINTER(PSINGLE_LIST_ENTRY, 4, 4); -} - -static void test_pack_PSTR(void) -{ - /* PSTR */ - TEST_TYPE(PSTR, 4, 4); - TEST_TYPE_POINTER(PSTR, 1, 1); -} - -static void test_pack_PSYSTEM_ALARM_ACE(void) -{ - /* PSYSTEM_ALARM_ACE */ - TEST_TYPE(PSYSTEM_ALARM_ACE, 4, 4); - TEST_TYPE_POINTER(PSYSTEM_ALARM_ACE, 12, 4); -} - -static void test_pack_PSYSTEM_AUDIT_ACE(void) -{ - /* PSYSTEM_AUDIT_ACE */ - TEST_TYPE(PSYSTEM_AUDIT_ACE, 4, 4); - TEST_TYPE_POINTER(PSYSTEM_AUDIT_ACE, 12, 4); -} - -static void test_pack_PTOKEN_GROUPS(void) -{ - /* PTOKEN_GROUPS */ - TEST_TYPE(PTOKEN_GROUPS, 4, 4); - TEST_TYPE_POINTER(PTOKEN_GROUPS, 12, 4); -} - -static void test_pack_PTOKEN_PRIVILEGES(void) -{ - /* PTOKEN_PRIVILEGES */ - TEST_TYPE(PTOKEN_PRIVILEGES, 4, 4); - TEST_TYPE_POINTER(PTOKEN_PRIVILEGES, 16, 4); -} - -static void test_pack_PTOKEN_USER(void) -{ - /* PTOKEN_USER */ - TEST_TYPE(PTOKEN_USER, 4, 4); - TEST_TYPE_POINTER(PTOKEN_USER, 8, 4); -} - -static void test_pack_PTSTR(void) -{ - /* PTSTR */ - TEST_TYPE(PTSTR, 4, 4); -} - -static void test_pack_PULARGE_INTEGER(void) -{ - /* PULARGE_INTEGER */ - TEST_TYPE(PULARGE_INTEGER, 4, 4); -} - -static void test_pack_PVECTORED_EXCEPTION_HANDLER(void) -{ - /* PVECTORED_EXCEPTION_HANDLER */ - TEST_TYPE(PVECTORED_EXCEPTION_HANDLER, 4, 4); -} - -static void test_pack_PVOID(void) -{ - /* PVOID */ - TEST_TYPE(PVOID, 4, 4); -} - -static void test_pack_PWCH(void) -{ - /* PWCH */ - TEST_TYPE(PWCH, 4, 4); - TEST_TYPE_POINTER(PWCH, 2, 2); -} - -static void test_pack_PWSTR(void) -{ - /* PWSTR */ - TEST_TYPE(PWSTR, 4, 4); - TEST_TYPE_POINTER(PWSTR, 2, 2); -} - -static void test_pack_RTL_CRITICAL_SECTION(void) -{ - /* RTL_CRITICAL_SECTION (pack 4) */ - TEST_TYPE(RTL_CRITICAL_SECTION, 24, 4); - TEST_FIELD(RTL_CRITICAL_SECTION, PRTL_CRITICAL_SECTION_DEBUG, DebugInfo, 0, 4, 4); - TEST_FIELD(RTL_CRITICAL_SECTION, LONG, LockCount, 4, 4, 4); - TEST_FIELD(RTL_CRITICAL_SECTION, LONG, RecursionCount, 8, 4, 4); - TEST_FIELD(RTL_CRITICAL_SECTION, HANDLE, OwningThread, 12, 4, 4); - TEST_FIELD(RTL_CRITICAL_SECTION, HANDLE, LockSemaphore, 16, 4, 4); - TEST_FIELD(RTL_CRITICAL_SECTION, ULONG_PTR, SpinCount, 20, 4, 4); -} - -static void test_pack_RTL_CRITICAL_SECTION_DEBUG(void) -{ - /* RTL_CRITICAL_SECTION_DEBUG (pack 4) */ - TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, WORD, Type, 0, 2, 2); - TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, WORD, CreatorBackTraceIndex, 2, 2, 2); - TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, struct _RTL_CRITICAL_SECTION *, CriticalSection, 4, 4, 4); - TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, LIST_ENTRY, ProcessLocksList, 8, 8, 4); - TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, DWORD, EntryCount, 16, 4, 4); - TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, DWORD, ContentionCount, 20, 4, 4); -} - -static void test_pack_RTL_OSVERSIONINFOEXW(void) -{ - /* RTL_OSVERSIONINFOEXW (pack 4) */ - TEST_TYPE(RTL_OSVERSIONINFOEXW, 284, 4); - TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwOSVersionInfoSize, 0, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwMajorVersion, 4, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwMinorVersion, 8, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwBuildNumber, 12, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwPlatformId, 16, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOEXW, WCHAR[128], szCSDVersion, 20, 256, 2); - TEST_FIELD(RTL_OSVERSIONINFOEXW, WORD, wServicePackMajor, 276, 2, 2); - TEST_FIELD(RTL_OSVERSIONINFOEXW, WORD, wServicePackMinor, 278, 2, 2); - TEST_FIELD(RTL_OSVERSIONINFOEXW, WORD, wSuiteMask, 280, 2, 2); - TEST_FIELD(RTL_OSVERSIONINFOEXW, BYTE, wProductType, 282, 1, 1); - TEST_FIELD(RTL_OSVERSIONINFOEXW, BYTE, wReserved, 283, 1, 1); -} - -static void test_pack_RTL_OSVERSIONINFOW(void) -{ - /* RTL_OSVERSIONINFOW (pack 4) */ - TEST_TYPE(RTL_OSVERSIONINFOW, 276, 4); - TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwOSVersionInfoSize, 0, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwMajorVersion, 4, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwMinorVersion, 8, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwBuildNumber, 12, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwPlatformId, 16, 4, 4); - TEST_FIELD(RTL_OSVERSIONINFOW, WCHAR[128], szCSDVersion, 20, 256, 2); -} - -static void test_pack_RTL_RESOURCE_DEBUG(void) -{ - /* RTL_RESOURCE_DEBUG (pack 4) */ - TEST_FIELD(RTL_RESOURCE_DEBUG, WORD, Type, 0, 2, 2); - TEST_FIELD(RTL_RESOURCE_DEBUG, WORD, CreatorBackTraceIndex, 2, 2, 2); - TEST_FIELD(RTL_RESOURCE_DEBUG, struct _RTL_CRITICAL_SECTION *, CriticalSection, 4, 4, 4); - TEST_FIELD(RTL_RESOURCE_DEBUG, LIST_ENTRY, ProcessLocksList, 8, 8, 4); - TEST_FIELD(RTL_RESOURCE_DEBUG, DWORD, EntryCount, 16, 4, 4); - TEST_FIELD(RTL_RESOURCE_DEBUG, DWORD, ContentionCount, 20, 4, 4); -} - -static void test_pack_SECURITY_CONTEXT_TRACKING_MODE(void) -{ - /* SECURITY_CONTEXT_TRACKING_MODE */ - TEST_TYPE(SECURITY_CONTEXT_TRACKING_MODE, 1, 1); -} - -static void test_pack_SECURITY_DESCRIPTOR(void) -{ - /* SECURITY_DESCRIPTOR (pack 4) */ - TEST_TYPE(SECURITY_DESCRIPTOR, 20, 4); - TEST_FIELD(SECURITY_DESCRIPTOR, BYTE, Revision, 0, 1, 1); - TEST_FIELD(SECURITY_DESCRIPTOR, BYTE, Sbz1, 1, 1, 1); - TEST_FIELD(SECURITY_DESCRIPTOR, SECURITY_DESCRIPTOR_CONTROL, Control, 2, 2, 2); - TEST_FIELD(SECURITY_DESCRIPTOR, PSID, Owner, 4, 4, 4); - TEST_FIELD(SECURITY_DESCRIPTOR, PSID, Group, 8, 4, 4); - TEST_FIELD(SECURITY_DESCRIPTOR, PACL, Sacl, 12, 4, 4); - TEST_FIELD(SECURITY_DESCRIPTOR, PACL, Dacl, 16, 4, 4); -} - -static void test_pack_SECURITY_DESCRIPTOR_CONTROL(void) -{ - /* SECURITY_DESCRIPTOR_CONTROL */ - TEST_TYPE(SECURITY_DESCRIPTOR_CONTROL, 2, 2); - TEST_TYPE_UNSIGNED(SECURITY_DESCRIPTOR_CONTROL); -} - -static void test_pack_SECURITY_DESCRIPTOR_RELATIVE(void) -{ - /* SECURITY_DESCRIPTOR_RELATIVE (pack 4) */ - TEST_TYPE(SECURITY_DESCRIPTOR_RELATIVE, 20, 4); - TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, BYTE, Revision, 0, 1, 1); - TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, BYTE, Sbz1, 1, 1, 1); - TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, SECURITY_DESCRIPTOR_CONTROL, Control, 2, 2, 2); - TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, DWORD, Owner, 4, 4, 4); - TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, DWORD, Group, 8, 4, 4); - TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, DWORD, Sacl, 12, 4, 4); - TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, DWORD, Dacl, 16, 4, 4); -} - -static void test_pack_SECURITY_INFORMATION(void) -{ - /* SECURITY_INFORMATION */ - TEST_TYPE(SECURITY_INFORMATION, 4, 4); - TEST_TYPE_UNSIGNED(SECURITY_INFORMATION); -} - -static void test_pack_SECURITY_QUALITY_OF_SERVICE(void) -{ - /* SECURITY_QUALITY_OF_SERVICE (pack 4) */ - TEST_FIELD(SECURITY_QUALITY_OF_SERVICE, DWORD, Length, 0, 4, 4); -} - -static void test_pack_SHORT(void) -{ - /* SHORT */ - TEST_TYPE(SHORT, 2, 2); - TEST_TYPE_SIGNED(SHORT); -} - -static void test_pack_SID(void) -{ - /* SID (pack 4) */ - TEST_TYPE(SID, 12, 4); - TEST_FIELD(SID, BYTE, Revision, 0, 1, 1); - TEST_FIELD(SID, BYTE, SubAuthorityCount, 1, 1, 1); - TEST_FIELD(SID, SID_IDENTIFIER_AUTHORITY, IdentifierAuthority, 2, 6, 1); - TEST_FIELD(SID, DWORD[1], SubAuthority, 8, 4, 4); -} - -static void test_pack_SID_AND_ATTRIBUTES(void) -{ - /* SID_AND_ATTRIBUTES (pack 4) */ - TEST_TYPE(SID_AND_ATTRIBUTES, 8, 4); - TEST_FIELD(SID_AND_ATTRIBUTES, PSID, Sid, 0, 4, 4); - TEST_FIELD(SID_AND_ATTRIBUTES, DWORD, Attributes, 4, 4, 4); -} - -static void test_pack_SID_IDENTIFIER_AUTHORITY(void) -{ - /* SID_IDENTIFIER_AUTHORITY (pack 4) */ - TEST_TYPE(SID_IDENTIFIER_AUTHORITY, 6, 1); - TEST_FIELD(SID_IDENTIFIER_AUTHORITY, BYTE[6], Value, 0, 6, 1); -} - -static void test_pack_SINGLE_LIST_ENTRY(void) -{ - /* SINGLE_LIST_ENTRY (pack 4) */ - TEST_TYPE(SINGLE_LIST_ENTRY, 4, 4); - TEST_FIELD(SINGLE_LIST_ENTRY, struct _SINGLE_LIST_ENTRY *, Next, 0, 4, 4); -} - -static void test_pack_SYSTEM_ALARM_ACE(void) -{ - /* SYSTEM_ALARM_ACE (pack 4) */ - TEST_TYPE(SYSTEM_ALARM_ACE, 12, 4); - TEST_FIELD(SYSTEM_ALARM_ACE, ACE_HEADER, Header, 0, 4, 2); - TEST_FIELD(SYSTEM_ALARM_ACE, DWORD, Mask, 4, 4, 4); - TEST_FIELD(SYSTEM_ALARM_ACE, DWORD, SidStart, 8, 4, 4); -} - -static void test_pack_SYSTEM_AUDIT_ACE(void) -{ - /* SYSTEM_AUDIT_ACE (pack 4) */ - TEST_TYPE(SYSTEM_AUDIT_ACE, 12, 4); - TEST_FIELD(SYSTEM_AUDIT_ACE, ACE_HEADER, Header, 0, 4, 2); - TEST_FIELD(SYSTEM_AUDIT_ACE, DWORD, Mask, 4, 4, 4); - TEST_FIELD(SYSTEM_AUDIT_ACE, DWORD, SidStart, 8, 4, 4); -} - -static void test_pack_TCHAR(void) -{ - /* TCHAR */ - TEST_TYPE(TCHAR, 1, 1); -} - -static void test_pack_TOKEN_DEFAULT_DACL(void) -{ - /* TOKEN_DEFAULT_DACL (pack 4) */ - TEST_TYPE(TOKEN_DEFAULT_DACL, 4, 4); - TEST_FIELD(TOKEN_DEFAULT_DACL, PACL, DefaultDacl, 0, 4, 4); -} - -static void test_pack_TOKEN_GROUPS(void) -{ - /* TOKEN_GROUPS (pack 4) */ - TEST_TYPE(TOKEN_GROUPS, 12, 4); - TEST_FIELD(TOKEN_GROUPS, DWORD, GroupCount, 0, 4, 4); - TEST_FIELD(TOKEN_GROUPS, SID_AND_ATTRIBUTES[ANYSIZE_ARRAY], Groups, 4, 8, 4); -} - -static void test_pack_TOKEN_OWNER(void) -{ - /* TOKEN_OWNER (pack 4) */ - TEST_TYPE(TOKEN_OWNER, 4, 4); - TEST_FIELD(TOKEN_OWNER, PSID, Owner, 0, 4, 4); -} - -static void test_pack_TOKEN_PRIMARY_GROUP(void) -{ - /* TOKEN_PRIMARY_GROUP (pack 4) */ - TEST_TYPE(TOKEN_PRIMARY_GROUP, 4, 4); - TEST_FIELD(TOKEN_PRIMARY_GROUP, PSID, PrimaryGroup, 0, 4, 4); -} - -static void test_pack_TOKEN_PRIVILEGES(void) -{ - /* TOKEN_PRIVILEGES (pack 4) */ - TEST_TYPE(TOKEN_PRIVILEGES, 16, 4); - TEST_FIELD(TOKEN_PRIVILEGES, DWORD, PrivilegeCount, 0, 4, 4); - TEST_FIELD(TOKEN_PRIVILEGES, LUID_AND_ATTRIBUTES[ANYSIZE_ARRAY], Privileges, 4, 12, 4); -} - -static void test_pack_TOKEN_SOURCE(void) -{ - /* TOKEN_SOURCE (pack 4) */ - TEST_TYPE(TOKEN_SOURCE, 16, 4); - TEST_FIELD(TOKEN_SOURCE, char[TOKEN_SOURCE_LENGTH], SourceName, 0, 8, 1); - TEST_FIELD(TOKEN_SOURCE, LUID, SourceIdentifier, 8, 8, 4); -} - -static void test_pack_TOKEN_STATISTICS(void) -{ - /* TOKEN_STATISTICS (pack 4) */ - TEST_FIELD(TOKEN_STATISTICS, LUID, TokenId, 0, 8, 4); - TEST_FIELD(TOKEN_STATISTICS, LUID, AuthenticationId, 8, 8, 4); - TEST_FIELD(TOKEN_STATISTICS, LARGE_INTEGER, ExpirationTime, 16, 8, 4); -} - -static void test_pack_TOKEN_USER(void) -{ - /* TOKEN_USER (pack 4) */ - TEST_TYPE(TOKEN_USER, 8, 4); - TEST_FIELD(TOKEN_USER, SID_AND_ATTRIBUTES, User, 0, 8, 4); -} - -static void test_pack_ULARGE_INTEGER(void) -{ - /* ULARGE_INTEGER (pack 4) */ -} - -static void test_pack_ULONGLONG(void) -{ - /* ULONGLONG */ - TEST_TYPE(ULONGLONG, 8, 8); - TEST_TYPE_UNSIGNED(ULONGLONG); -} - -static void test_pack_WAITORTIMERCALLBACKFUNC(void) -{ - /* WAITORTIMERCALLBACKFUNC */ - TEST_TYPE(WAITORTIMERCALLBACKFUNC, 4, 4); -} - -static void test_pack_WCHAR(void) -{ - /* WCHAR */ - TEST_TYPE(WCHAR, 2, 2); - TEST_TYPE_UNSIGNED(WCHAR); -} - -static void test_pack_ATOM(void) -{ - /* ATOM */ - TEST_TYPE(ATOM, 2, 2); - TEST_TYPE_UNSIGNED(ATOM); -} - -static void test_pack_BOOL(void) -{ - /* BOOL */ - TEST_TYPE(BOOL, 4, 4); - TEST_TYPE_SIGNED(BOOL); -} - -static void test_pack_BYTE(void) -{ - /* BYTE */ - TEST_TYPE(BYTE, 1, 1); - TEST_TYPE_UNSIGNED(BYTE); -} - -static void test_pack_COLORREF(void) -{ - /* COLORREF */ - TEST_TYPE(COLORREF, 4, 4); - TEST_TYPE_UNSIGNED(COLORREF); -} - -static void test_pack_DWORD(void) -{ - /* DWORD */ - TEST_TYPE(DWORD, 4, 4); - TEST_TYPE_UNSIGNED(DWORD); -} - -static void test_pack_FARPROC(void) -{ - /* FARPROC */ - TEST_TYPE(FARPROC, 4, 4); -} - -static void test_pack_FLOAT(void) -{ - /* FLOAT */ - TEST_TYPE(FLOAT, 4, 4); -} - -static void test_pack_GLOBALHANDLE(void) -{ - /* GLOBALHANDLE */ - TEST_TYPE(GLOBALHANDLE, 4, 4); -} - -static void test_pack_HCURSOR(void) -{ - /* HCURSOR */ - TEST_TYPE(HCURSOR, 4, 4); - TEST_TYPE_UNSIGNED(HCURSOR); -} - -static void test_pack_HFILE(void) -{ - /* HFILE */ - TEST_TYPE(HFILE, 4, 4); - TEST_TYPE_SIGNED(HFILE); -} - -static void test_pack_HGDIOBJ(void) -{ - /* HGDIOBJ */ - TEST_TYPE(HGDIOBJ, 4, 4); -} - -static void test_pack_HGLOBAL(void) -{ - /* HGLOBAL */ - TEST_TYPE(HGLOBAL, 4, 4); -} - -static void test_pack_HLOCAL(void) -{ - /* HLOCAL */ - TEST_TYPE(HLOCAL, 4, 4); -} - -static void test_pack_HMODULE(void) -{ - /* HMODULE */ - TEST_TYPE(HMODULE, 4, 4); - TEST_TYPE_UNSIGNED(HMODULE); -} - -static void test_pack_INT(void) -{ - /* INT */ - TEST_TYPE(INT, 4, 4); - TEST_TYPE_SIGNED(INT); -} - -static void test_pack_LOCALHANDLE(void) -{ - /* LOCALHANDLE */ - TEST_TYPE(LOCALHANDLE, 4, 4); -} - -static void test_pack_LPARAM(void) -{ - /* LPARAM */ - TEST_TYPE(LPARAM, 4, 4); -} - -static void test_pack_LPCRECT(void) -{ - /* LPCRECT */ - TEST_TYPE(LPCRECT, 4, 4); - TEST_TYPE_POINTER(LPCRECT, 16, 4); -} - -static void test_pack_LPCRECTL(void) -{ - /* LPCRECTL */ - TEST_TYPE(LPCRECTL, 4, 4); - TEST_TYPE_POINTER(LPCRECTL, 16, 4); -} - -static void test_pack_LPCVOID(void) -{ - /* LPCVOID */ - TEST_TYPE(LPCVOID, 4, 4); -} - -static void test_pack_LPPOINT(void) -{ - /* LPPOINT */ - TEST_TYPE(LPPOINT, 4, 4); - TEST_TYPE_POINTER(LPPOINT, 8, 4); -} - -static void test_pack_LPRECT(void) -{ - /* LPRECT */ - TEST_TYPE(LPRECT, 4, 4); - TEST_TYPE_POINTER(LPRECT, 16, 4); -} - -static void test_pack_LPRECTL(void) -{ - /* LPRECTL */ - TEST_TYPE(LPRECTL, 4, 4); - TEST_TYPE_POINTER(LPRECTL, 16, 4); -} - -static void test_pack_LPSIZE(void) -{ - /* LPSIZE */ - TEST_TYPE(LPSIZE, 4, 4); - TEST_TYPE_POINTER(LPSIZE, 8, 4); -} - -static void test_pack_LRESULT(void) -{ - /* LRESULT */ - TEST_TYPE(LRESULT, 4, 4); -} - -static void test_pack_POINT(void) -{ - /* POINT (pack 4) */ - TEST_TYPE(POINT, 8, 4); - TEST_FIELD(POINT, LONG, x, 0, 4, 4); - TEST_FIELD(POINT, LONG, y, 4, 4, 4); -} - -static void test_pack_POINTL(void) -{ - /* POINTL (pack 4) */ - TEST_TYPE(POINTL, 8, 4); - TEST_FIELD(POINTL, LONG, x, 0, 4, 4); - TEST_FIELD(POINTL, LONG, y, 4, 4, 4); -} - -static void test_pack_PPOINT(void) -{ - /* PPOINT */ - TEST_TYPE(PPOINT, 4, 4); - TEST_TYPE_POINTER(PPOINT, 8, 4); -} - -static void test_pack_PPOINTL(void) -{ - /* PPOINTL */ - TEST_TYPE(PPOINTL, 4, 4); - TEST_TYPE_POINTER(PPOINTL, 8, 4); -} - -static void test_pack_PRECT(void) -{ - /* PRECT */ - TEST_TYPE(PRECT, 4, 4); - TEST_TYPE_POINTER(PRECT, 16, 4); -} - -static void test_pack_PRECTL(void) -{ - /* PRECTL */ - TEST_TYPE(PRECTL, 4, 4); - TEST_TYPE_POINTER(PRECTL, 16, 4); -} - -static void test_pack_PROC(void) -{ - /* PROC */ - TEST_TYPE(PROC, 4, 4); -} - -static void test_pack_PSIZE(void) -{ - /* PSIZE */ - TEST_TYPE(PSIZE, 4, 4); - TEST_TYPE_POINTER(PSIZE, 8, 4); -} - -static void test_pack_PSZ(void) -{ - /* PSZ */ - TEST_TYPE(PSZ, 4, 4); -} - -static void test_pack_RECT(void) -{ - /* RECT (pack 4) */ - TEST_TYPE(RECT, 16, 4); - TEST_FIELD(RECT, LONG, left, 0, 4, 4); - TEST_FIELD(RECT, LONG, top, 4, 4, 4); - TEST_FIELD(RECT, LONG, right, 8, 4, 4); - TEST_FIELD(RECT, LONG, bottom, 12, 4, 4); -} - -static void test_pack_RECTL(void) -{ - /* RECTL (pack 4) */ - TEST_TYPE(RECTL, 16, 4); - TEST_FIELD(RECTL, LONG, left, 0, 4, 4); - TEST_FIELD(RECTL, LONG, top, 4, 4, 4); - TEST_FIELD(RECTL, LONG, right, 8, 4, 4); - TEST_FIELD(RECTL, LONG, bottom, 12, 4, 4); -} - -static void test_pack_SIZE(void) -{ - /* SIZE (pack 4) */ - TEST_TYPE(SIZE, 8, 4); - TEST_FIELD(SIZE, LONG, cx, 0, 4, 4); - TEST_FIELD(SIZE, LONG, cy, 4, 4, 4); -} - -static void test_pack_SIZEL(void) -{ - /* SIZEL */ - TEST_TYPE(SIZEL, 8, 4); -} - -static void test_pack_UCHAR(void) -{ - /* UCHAR */ - TEST_TYPE(UCHAR, 1, 1); - TEST_TYPE_UNSIGNED(UCHAR); -} - -static void test_pack_UINT(void) -{ - /* UINT */ - TEST_TYPE(UINT, 4, 4); - TEST_TYPE_UNSIGNED(UINT); -} - -static void test_pack_ULONG(void) -{ - /* ULONG */ - TEST_TYPE(ULONG, 4, 4); - TEST_TYPE_UNSIGNED(ULONG); -} - -static void test_pack_USHORT(void) -{ - /* USHORT */ - TEST_TYPE(USHORT, 2, 2); - TEST_TYPE_UNSIGNED(USHORT); -} - -static void test_pack_WORD(void) -{ - /* WORD */ - TEST_TYPE(WORD, 2, 2); - TEST_TYPE_UNSIGNED(WORD); -} - -static void test_pack_WPARAM(void) -{ - /* WPARAM */ - TEST_TYPE(WPARAM, 4, 4); -} - -static void test_pack(void) -{ - test_pack_ACCESS_ALLOWED_ACE(); - test_pack_ACCESS_DENIED_ACE(); - test_pack_ACCESS_MASK(); - test_pack_ACE_HEADER(); - test_pack_ACL(); - test_pack_ACL_REVISION_INFORMATION(); - test_pack_ACL_SIZE_INFORMATION(); - test_pack_ATOM(); - test_pack_BOOL(); - test_pack_BOOLEAN(); - test_pack_BYTE(); - test_pack_CCHAR(); - test_pack_CHAR(); - test_pack_COLORREF(); - test_pack_DWORD(); - test_pack_DWORD32(); - test_pack_DWORD64(); - test_pack_DWORDLONG(); - test_pack_DWORD_PTR(); - test_pack_EXCEPTION_POINTERS(); - test_pack_EXCEPTION_RECORD(); - test_pack_EXECUTION_STATE(); - test_pack_FARPROC(); - test_pack_FLOAT(); - test_pack_FLOATING_SAVE_AREA(); - test_pack_FPO_DATA(); - test_pack_GENERIC_MAPPING(); - test_pack_GLOBALHANDLE(); - test_pack_HALF_PTR(); - test_pack_HANDLE(); - test_pack_HCURSOR(); - test_pack_HFILE(); - test_pack_HGDIOBJ(); - test_pack_HGLOBAL(); - test_pack_HLOCAL(); - test_pack_HMODULE(); - test_pack_HRESULT(); - test_pack_IMAGE_ARCHIVE_MEMBER_HEADER(); - test_pack_IMAGE_AUX_SYMBOL(); - test_pack_IMAGE_BASE_RELOCATION(); - test_pack_IMAGE_BOUND_FORWARDER_REF(); - test_pack_IMAGE_BOUND_IMPORT_DESCRIPTOR(); - test_pack_IMAGE_COFF_SYMBOLS_HEADER(); - test_pack_IMAGE_DATA_DIRECTORY(); - test_pack_IMAGE_DEBUG_DIRECTORY(); - test_pack_IMAGE_DEBUG_MISC(); - test_pack_IMAGE_DOS_HEADER(); - test_pack_IMAGE_EXPORT_DIRECTORY(); - test_pack_IMAGE_FILE_HEADER(); - test_pack_IMAGE_FUNCTION_ENTRY(); - test_pack_IMAGE_IMPORT_BY_NAME(); - test_pack_IMAGE_IMPORT_DESCRIPTOR(); - test_pack_IMAGE_LINENUMBER(); - test_pack_IMAGE_LOAD_CONFIG_DIRECTORY(); - test_pack_IMAGE_NT_HEADERS(); - test_pack_IMAGE_OS2_HEADER(); - test_pack_IMAGE_RELOCATION(); - test_pack_IMAGE_RESOURCE_DATA_ENTRY(); - test_pack_IMAGE_RESOURCE_DIRECTORY(); - test_pack_IMAGE_RESOURCE_DIRECTORY_ENTRY(); - test_pack_IMAGE_RESOURCE_DIRECTORY_STRING(); - test_pack_IMAGE_RESOURCE_DIR_STRING_U(); - test_pack_IMAGE_SECTION_HEADER(); - test_pack_IMAGE_SEPARATE_DEBUG_HEADER(); - test_pack_IMAGE_SYMBOL(); - test_pack_IMAGE_THUNK_DATA(); - test_pack_IMAGE_TLS_DIRECTORY(); - test_pack_IMAGE_VXD_HEADER(); - test_pack_INT(); - test_pack_INT16(); - test_pack_INT32(); - test_pack_INT64(); - test_pack_INT8(); - test_pack_INT_PTR(); - test_pack_IO_COUNTERS(); - test_pack_LANGID(); - test_pack_LARGE_INTEGER(); - test_pack_LCID(); - test_pack_LIST_ENTRY(); - test_pack_LOCALHANDLE(); - test_pack_LONG(); - test_pack_LONG32(); - test_pack_LONG64(); - test_pack_LONGLONG(); - test_pack_LONG_PTR(); - test_pack_LPARAM(); - test_pack_LPCRECT(); - test_pack_LPCRECTL(); - test_pack_LPCVOID(); - test_pack_LPPOINT(); - test_pack_LPRECT(); - test_pack_LPRECTL(); - test_pack_LPSIZE(); - test_pack_LRESULT(); - test_pack_LUID(); - test_pack_LUID_AND_ATTRIBUTES(); - test_pack_MEMORY_BASIC_INFORMATION(); - test_pack_MESSAGE_RESOURCE_BLOCK(); - test_pack_MESSAGE_RESOURCE_DATA(); - test_pack_MESSAGE_RESOURCE_ENTRY(); - test_pack_NT_TIB(); - test_pack_OBJECT_TYPE_LIST(); - test_pack_PACCESS_ALLOWED_ACE(); - test_pack_PACCESS_DENIED_ACE(); - test_pack_PACCESS_TOKEN(); - test_pack_PACE_HEADER(); - test_pack_PACL(); - test_pack_PACL_REVISION_INFORMATION(); - test_pack_PACL_SIZE_INFORMATION(); - test_pack_PCCH(); - test_pack_PCH(); - test_pack_PCSTR(); - test_pack_PCTSTR(); - test_pack_PCWCH(); - test_pack_PCWSTR(); - test_pack_PEXCEPTION_POINTERS(); - test_pack_PEXCEPTION_RECORD(); - test_pack_PFLOATING_SAVE_AREA(); - test_pack_PFPO_DATA(); - test_pack_PGENERIC_MAPPING(); - test_pack_PHANDLE(); - test_pack_PIMAGE_ARCHIVE_MEMBER_HEADER(); - test_pack_PIMAGE_AUX_SYMBOL(); - test_pack_PIMAGE_BASE_RELOCATION(); - test_pack_PIMAGE_BOUND_FORWARDER_REF(); - test_pack_PIMAGE_BOUND_IMPORT_DESCRIPTOR(); - test_pack_PIMAGE_COFF_SYMBOLS_HEADER(); - test_pack_PIMAGE_DATA_DIRECTORY(); - test_pack_PIMAGE_DEBUG_DIRECTORY(); - test_pack_PIMAGE_DEBUG_MISC(); - test_pack_PIMAGE_DOS_HEADER(); - test_pack_PIMAGE_EXPORT_DIRECTORY(); - test_pack_PIMAGE_FILE_HEADER(); - test_pack_PIMAGE_FUNCTION_ENTRY(); - test_pack_PIMAGE_IMPORT_BY_NAME(); - test_pack_PIMAGE_IMPORT_DESCRIPTOR(); - test_pack_PIMAGE_LINENUMBER(); - test_pack_PIMAGE_LOAD_CONFIG_DIRECTORY(); - test_pack_PIMAGE_NT_HEADERS(); - test_pack_PIMAGE_OPTIONAL_HEADER(); - test_pack_PIMAGE_OS2_HEADER(); - test_pack_PIMAGE_RELOCATION(); - test_pack_PIMAGE_RESOURCE_DATA_ENTRY(); - test_pack_PIMAGE_RESOURCE_DIRECTORY(); - test_pack_PIMAGE_RESOURCE_DIRECTORY_ENTRY(); - test_pack_PIMAGE_RESOURCE_DIRECTORY_STRING(); - test_pack_PIMAGE_RESOURCE_DIR_STRING_U(); - test_pack_PIMAGE_SECTION_HEADER(); - test_pack_PIMAGE_SEPARATE_DEBUG_HEADER(); - test_pack_PIMAGE_SYMBOL(); - test_pack_PIMAGE_THUNK_DATA(); - test_pack_PIMAGE_TLS_CALLBACK(); - test_pack_PIMAGE_TLS_DIRECTORY(); - test_pack_PIMAGE_VXD_HEADER(); - test_pack_PIO_COUNTERS(); - test_pack_PISECURITY_DESCRIPTOR(); - test_pack_PISECURITY_DESCRIPTOR_RELATIVE(); - test_pack_PISID(); - test_pack_PLARGE_INTEGER(); - test_pack_PLIST_ENTRY(); - test_pack_PLUID(); - test_pack_PLUID_AND_ATTRIBUTES(); - test_pack_PMEMORY_BASIC_INFORMATION(); - test_pack_PMESSAGE_RESOURCE_BLOCK(); - test_pack_PMESSAGE_RESOURCE_DATA(); - test_pack_PMESSAGE_RESOURCE_ENTRY(); - test_pack_PNT_TIB(); - test_pack_POBJECT_TYPE_LIST(); - test_pack_POINT(); - test_pack_POINTL(); - test_pack_PPOINT(); - test_pack_PPOINTL(); - test_pack_PPRIVILEGE_SET(); - test_pack_PRECT(); - test_pack_PRECTL(); - test_pack_PRIVILEGE_SET(); - test_pack_PRLIST_ENTRY(); - test_pack_PROC(); - test_pack_PRTL_CRITICAL_SECTION(); - test_pack_PRTL_CRITICAL_SECTION_DEBUG(); - test_pack_PRTL_OSVERSIONINFOEXW(); - test_pack_PRTL_OSVERSIONINFOW(); - test_pack_PRTL_RESOURCE_DEBUG(); - test_pack_PSECURITY_DESCRIPTOR(); - test_pack_PSECURITY_QUALITY_OF_SERVICE(); - test_pack_PSID(); - test_pack_PSID_IDENTIFIER_AUTHORITY(); - test_pack_PSINGLE_LIST_ENTRY(); - test_pack_PSIZE(); - test_pack_PSTR(); - test_pack_PSYSTEM_ALARM_ACE(); - test_pack_PSYSTEM_AUDIT_ACE(); - test_pack_PSZ(); - test_pack_PTOKEN_GROUPS(); - test_pack_PTOKEN_PRIVILEGES(); - test_pack_PTOKEN_USER(); - test_pack_PTSTR(); - test_pack_PULARGE_INTEGER(); - test_pack_PVECTORED_EXCEPTION_HANDLER(); - test_pack_PVOID(); - test_pack_PWCH(); - test_pack_PWSTR(); - test_pack_RECT(); - test_pack_RECTL(); - test_pack_RTL_CRITICAL_SECTION(); - test_pack_RTL_CRITICAL_SECTION_DEBUG(); - test_pack_RTL_OSVERSIONINFOEXW(); - test_pack_RTL_OSVERSIONINFOW(); - test_pack_RTL_RESOURCE_DEBUG(); - test_pack_SECURITY_CONTEXT_TRACKING_MODE(); - test_pack_SECURITY_DESCRIPTOR(); - test_pack_SECURITY_DESCRIPTOR_CONTROL(); - test_pack_SECURITY_DESCRIPTOR_RELATIVE(); - test_pack_SECURITY_INFORMATION(); - test_pack_SECURITY_QUALITY_OF_SERVICE(); - test_pack_SHORT(); - test_pack_SID(); - test_pack_SID_AND_ATTRIBUTES(); - test_pack_SID_IDENTIFIER_AUTHORITY(); - test_pack_SINGLE_LIST_ENTRY(); - test_pack_SIZE(); - test_pack_SIZEL(); - test_pack_SIZE_T(); - test_pack_SSIZE_T(); - test_pack_SYSTEM_ALARM_ACE(); - test_pack_SYSTEM_AUDIT_ACE(); - test_pack_TCHAR(); - test_pack_TOKEN_DEFAULT_DACL(); - test_pack_TOKEN_GROUPS(); - test_pack_TOKEN_OWNER(); - test_pack_TOKEN_PRIMARY_GROUP(); - test_pack_TOKEN_PRIVILEGES(); - test_pack_TOKEN_SOURCE(); - test_pack_TOKEN_STATISTICS(); - test_pack_TOKEN_USER(); - test_pack_UCHAR(); - test_pack_UHALF_PTR(); - test_pack_UINT(); - test_pack_UINT16(); - test_pack_UINT32(); - test_pack_UINT64(); - test_pack_UINT8(); - test_pack_UINT_PTR(); - test_pack_ULARGE_INTEGER(); - test_pack_ULONG(); - test_pack_ULONG32(); - test_pack_ULONG64(); - test_pack_ULONGLONG(); - test_pack_ULONG_PTR(); - test_pack_USHORT(); - test_pack_WAITORTIMERCALLBACKFUNC(); - test_pack_WCHAR(); - test_pack_WORD(); - test_pack_WPARAM(); -} - -START_TEST(generated) -{ - test_pack(); -} diff --git a/rostests/winetests/ntdll/info.c b/rostests/winetests/ntdll/info.c deleted file mode 100755 index 9fab8065969..00000000000 --- a/rostests/winetests/ntdll/info.c +++ /dev/null @@ -1,933 +0,0 @@ -/* Unit test suite for *Information* Registry API functions - * - * 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 - * - */ - -#include "ntdll_test.h" -#include - -static NTSTATUS (WINAPI * pNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG); -static NTSTATUS (WINAPI * pNtQueryInformationProcess)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG); -static NTSTATUS (WINAPI * pNtReadVirtualMemory)(HANDLE, const void*, void*, SIZE_T, SIZE_T*); - -/* one_before_last_pid is used to be able to compare values of a still running process - with the output of the test_query_process_times and test_query_process_handlecount tests. -*/ -static DWORD one_before_last_pid = 0; - -#define NTDLL_GET_PROC(func) do { \ - p ## func = (void*)GetProcAddress(hntdll, #func); \ - if(!p ## func) { \ - trace("GetProcAddress(%s) failed\n", #func); \ - return FALSE; \ - } \ - } while(0) - -static BOOL InitFunctionPtrs(void) -{ - /* All needed functions are NT based, so using GetModuleHandle is a good check */ - HMODULE hntdll = GetModuleHandle("ntdll"); - if (!hntdll) - { - skip("Not running on NT\n"); - return FALSE; - } - - NTDLL_GET_PROC(NtQuerySystemInformation); - NTDLL_GET_PROC(NtQueryInformationProcess); - NTDLL_GET_PROC(NtReadVirtualMemory); - - return TRUE; -} - -static void test_query_basic(void) -{ - DWORD status; - ULONG ReturnLength; - SYSTEM_BASIC_INFORMATION sbi; - - /* This test also covers some basic parameter testing that should be the same for - * every information class - */ - - /* Use a nonexistent info class */ - trace("Check nonexistent info class\n"); - status = pNtQuerySystemInformation(-1, NULL, 0, NULL); - ok( status == STATUS_INVALID_INFO_CLASS, "Expected STATUS_INVALID_INFO_CLASS, got %08x\n", status); - - /* Use an existing class but with a zero-length buffer */ - trace("Check zero-length buffer\n"); - status = pNtQuerySystemInformation(SystemBasicInformation, NULL, 0, NULL); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - /* Use an existing class, correct length but no SystemInformation buffer */ - trace("Check no SystemInformation buffer\n"); - status = pNtQuerySystemInformation(SystemBasicInformation, NULL, sizeof(sbi), NULL); - ok( status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got %08x\n", status); - - /* Use a existing class, correct length, a pointer to a buffer but no ReturnLength pointer */ - trace("Check no ReturnLength pointer\n"); - status = pNtQuerySystemInformation(SystemBasicInformation, &sbi, sizeof(sbi), NULL); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - - /* Check a too large buffer size */ - trace("Check a too large buffer size\n"); - status = pNtQuerySystemInformation(SystemBasicInformation, &sbi, sizeof(sbi) * 2, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - /* Finally some correct calls */ - trace("Check with correct parameters\n"); - status = pNtQuerySystemInformation(SystemBasicInformation, &sbi, sizeof(sbi), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(sbi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - /* Check if we have some return values */ - trace("Number of Processors : %d\n", sbi.NumberOfProcessors); - ok( sbi.NumberOfProcessors > 0, "Expected more than 0 processors, got %d\n", sbi.NumberOfProcessors); -} - -static void test_query_cpu(void) -{ - DWORD status; - ULONG ReturnLength; - SYSTEM_CPU_INFORMATION sci; - - status = pNtQuerySystemInformation(SystemCpuInformation, &sci, sizeof(sci), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(sci) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - /* Check if we have some return values */ - trace("Processor FeatureSet : %08x\n", sci.FeatureSet); - ok( sci.FeatureSet != 0, "Expected some features for this processor, got %08x\n", sci.FeatureSet); -} - -static void test_query_performance(void) -{ - DWORD status; - ULONG ReturnLength; - SYSTEM_PERFORMANCE_INFORMATION spi; - - status = pNtQuerySystemInformation(SystemPerformanceInformation, &spi, 0, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - status = pNtQuerySystemInformation(SystemPerformanceInformation, &spi, sizeof(spi), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(spi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - status = pNtQuerySystemInformation(SystemPerformanceInformation, &spi, sizeof(spi) + 2, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(spi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - /* Not return values yet, as struct members are unknown */ -} - -static void test_query_timeofday(void) -{ - DWORD status; - ULONG ReturnLength; - - /* Copy of our winternl.h structure turned into a private one */ - typedef struct _SYSTEM_TIMEOFDAY_INFORMATION_PRIVATE { - LARGE_INTEGER liKeBootTime; - LARGE_INTEGER liKeSystemTime; - LARGE_INTEGER liExpTimeZoneBias; - ULONG uCurrentTimeZoneId; - DWORD dwUnknown1[5]; - } SYSTEM_TIMEOFDAY_INFORMATION_PRIVATE, *PSYSTEM_TIMEOFDAY_INFORMATION_PRIVATE; - - SYSTEM_TIMEOFDAY_INFORMATION_PRIVATE sti; - - /* The struct size for NT (32 bytes) and Win2K/XP (48 bytes) differ. - * - * Windows 2000 and XP return STATUS_INFO_LENGTH_MISMATCH if the given buffer size is greater - * then 48 and 0 otherwise - * Windows NT returns STATUS_INFO_LENGTH_MISMATCH when the given buffer size is not correct - * and 0 otherwise - * - * Windows 2000 and XP copy the given buffer size into the provided buffer, if the return code is STATUS_SUCCESS - * NT only fills the buffer if the return code is STATUS_SUCCESS - * - */ - - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, sizeof(sti), &ReturnLength); - - if (status == STATUS_INFO_LENGTH_MISMATCH) - { - trace("Windows version is NT, we have to cater for differences with W2K/WinXP\n"); - - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, 0, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - ok( 0 == ReturnLength, "ReturnLength should be 0, it is (%d)\n", ReturnLength); - - sti.uCurrentTimeZoneId = 0xdeadbeef; - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, 28, &ReturnLength); - ok( 0xdeadbeef == sti.uCurrentTimeZoneId, "This part of the buffer should not have been filled\n"); - - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, 32, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( 32 == ReturnLength, "ReturnLength should be 0, it is (%d)\n", ReturnLength); - } - else - { - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, 0, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( 0 == ReturnLength, "ReturnLength should be 0, it is (%d)\n", ReturnLength); - - sti.uCurrentTimeZoneId = 0xdeadbeef; - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, 24, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( 24 == ReturnLength, "ReturnLength should be 24, it is (%d)\n", ReturnLength); - ok( 0xdeadbeef == sti.uCurrentTimeZoneId, "This part of the buffer should not have been filled\n"); - - sti.uCurrentTimeZoneId = 0xdeadbeef; - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, 32, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( 32 == ReturnLength, "ReturnLength should be 32, it is (%d)\n", ReturnLength); - ok( 0xdeadbeef != sti.uCurrentTimeZoneId, "Buffer should have been partially filled\n"); - - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, 49, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - ok( 0 == ReturnLength, "ReturnLength should be 0, it is (%d)\n", ReturnLength); - - status = pNtQuerySystemInformation(SystemTimeOfDayInformation, &sti, sizeof(sti), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(sti) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - } - - /* Check if we have some return values */ - trace("uCurrentTimeZoneId : (%d)\n", sti.uCurrentTimeZoneId); -} - -static void test_query_process(void) -{ - DWORD status; - DWORD last_pid; - ULONG ReturnLength; - int i = 0, k = 0; - int is_nt = 0; - SYSTEM_BASIC_INFORMATION sbi; - - /* Copy of our winternl.h structure turned into a private one */ - typedef struct _SYSTEM_PROCESS_INFORMATION_PRIVATE { - DWORD dwOffset; - DWORD dwThreadCount; - DWORD dwUnknown1[6]; - FILETIME ftCreationTime; - FILETIME ftUserTime; - FILETIME ftKernelTime; - UNICODE_STRING ProcessName; - DWORD dwBasePriority; - DWORD dwProcessID; - DWORD dwParentProcessID; - DWORD dwHandleCount; - DWORD dwUnknown3; - DWORD dwUnknown4; - VM_COUNTERS vmCounters; - IO_COUNTERS ioCounters; - SYSTEM_THREAD_INFORMATION ti[1]; - } SYSTEM_PROCESS_INFORMATION_PRIVATE, *PSYSTEM_PROCESS_INFORMATION_PRIVATE; - - ULONG SystemInformationLength = sizeof(SYSTEM_PROCESS_INFORMATION_PRIVATE); - SYSTEM_PROCESS_INFORMATION_PRIVATE* spi = HeapAlloc(GetProcessHeap(), 0, SystemInformationLength); - - /* Only W2K3 returns the needed length, the rest returns 0, so we have to loop */ - - for (;;) - { - status = pNtQuerySystemInformation(SystemProcessInformation, spi, SystemInformationLength, &ReturnLength); - - if (status != STATUS_INFO_LENGTH_MISMATCH) break; - - spi = HeapReAlloc(GetProcessHeap(), 0, spi , SystemInformationLength *= 2); - } - - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - - /* Get the first dwOffset, from this we can deduce the OS version we're running - * - * W2K/WinXP/W2K3: - * dwOffset for a process is 184 + (no. of threads) * sizeof(SYSTEM_THREAD_INFORMATION) - * NT: - * dwOffset for a process is 136 + (no. of threads) * sizeof(SYSTEM_THREAD_INFORMATION) - * Wine (with every windows version): - * dwOffset for a process is 0 if just this test is running - * dwOffset for a process is 184 + (no. of threads) * sizeof(SYSTEM_THREAD_INFORMATION) + - * ProcessName.MaximumLength - * if more wine processes are running - * - * Note : On windows the first process is in fact the Idle 'process' with a thread for every processor - */ - - pNtQuerySystemInformation(SystemBasicInformation, &sbi, sizeof(sbi), &ReturnLength); - - is_nt = ( spi->dwOffset - (sbi.NumberOfProcessors * sizeof(SYSTEM_THREAD_INFORMATION)) == 136); - - if (is_nt) skip("Windows version is NT, we will skip thread tests\n"); - - /* Check if we have some return values - * - * On windows there will be several processes running (Including the always present Idle and System) - * On wine we only have one (if this test is the only wine process running) - */ - - /* Loop through the processes */ - - for (;;) - { - i++; - - last_pid = spi->dwProcessID; - - ok( spi->dwThreadCount > 0, "Expected some threads for this process, got 0\n"); - - /* Loop through the threads, skip NT4 for now */ - - if (!is_nt) - { - DWORD j; - for ( j = 0; j < spi->dwThreadCount; j++) - { - k++; - ok ( spi->ti[j].dwOwningPID == spi->dwProcessID, - "The owning pid of the thread (%d) doesn't equal the pid (%d) of the process\n", - spi->ti[j].dwOwningPID, spi->dwProcessID); - } - } - - if (!spi->dwOffset) break; - - one_before_last_pid = last_pid; - - spi = (SYSTEM_PROCESS_INFORMATION_PRIVATE*)((char*)spi + spi->dwOffset); - } - trace("Total number of running processes : %d\n", i); - if (!is_nt) trace("Total number of running threads : %d\n", k); - - if (one_before_last_pid == 0) one_before_last_pid = last_pid; - - HeapFree( GetProcessHeap(), 0, spi); -} - -static void test_query_procperf(void) -{ - DWORD status; - ULONG ReturnLength; - ULONG NeededLength; - SYSTEM_BASIC_INFORMATION sbi; - SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION* sppi; - - /* Find out the number of processors */ - status = pNtQuerySystemInformation(SystemBasicInformation, &sbi, sizeof(sbi), &ReturnLength); - NeededLength = sbi.NumberOfProcessors * sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION); - - sppi = HeapAlloc(GetProcessHeap(), 0, NeededLength); - - status = pNtQuerySystemInformation(SystemProcessorPerformanceInformation, sppi, 0, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - /* Try it for 1 processor */ - status = pNtQuerySystemInformation(SystemProcessorPerformanceInformation, sppi, - sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) == ReturnLength, - "Inconsistent length %d\n", ReturnLength); - - /* Try it for all processors */ - status = pNtQuerySystemInformation(SystemProcessorPerformanceInformation, sppi, NeededLength, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( NeededLength == ReturnLength, "Inconsistent length (%d) <-> (%d)\n", NeededLength, ReturnLength); - - /* A too large given buffer size */ - sppi = HeapReAlloc(GetProcessHeap(), 0, sppi , NeededLength + 2); - status = pNtQuerySystemInformation(SystemProcessorPerformanceInformation, sppi, NeededLength + 2, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( NeededLength == ReturnLength, "Inconsistent length (%d) <-> (%d)\n", NeededLength, ReturnLength); - - HeapFree( GetProcessHeap(), 0, sppi); -} - -static void test_query_module(void) -{ - DWORD status; - ULONG ReturnLength; - ULONG ModuleCount, i; - - ULONG SystemInformationLength = sizeof(SYSTEM_MODULE_INFORMATION); - SYSTEM_MODULE_INFORMATION* smi = HeapAlloc(GetProcessHeap(), 0, SystemInformationLength); - SYSTEM_MODULE* sm; - - /* Request the needed length */ - status = pNtQuerySystemInformation(SystemModuleInformation, smi, 0, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - ok( ReturnLength > 0, "Expected a ReturnLength to show the needed length\n"); - - SystemInformationLength = ReturnLength; - smi = HeapReAlloc(GetProcessHeap(), 0, smi , SystemInformationLength); - status = pNtQuerySystemInformation(SystemModuleInformation, smi, SystemInformationLength, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - - ModuleCount = smi->ModulesCount; - sm = &smi->Modules[0]; - /* our implementation is a stub for now */ - ok( ModuleCount > 0, "Expected some modules to be loaded\n"); - - /* Loop through all the modules/drivers, Wine doesn't get here (yet) */ - for (i = 0; i < ModuleCount ; i++) - { - ok( i == sm->Id, "Id (%d) should have matched %u\n", sm->Id, i); - sm++; - } - - HeapFree( GetProcessHeap(), 0, smi); -} - -static void test_query_handle(void) -{ - DWORD status; - ULONG ReturnLength; - ULONG SystemInformationLength = sizeof(SYSTEM_HANDLE_INFORMATION); - SYSTEM_HANDLE_INFORMATION* shi = HeapAlloc(GetProcessHeap(), 0, SystemInformationLength); - - /* Request the needed length : a SystemInformationLength greater than one struct sets ReturnLength */ - status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength); - - /* The following check assumes more than one handle on any given system */ - todo_wine - { - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - } - ok( ReturnLength > 0, "Expected ReturnLength to be > 0, it was %d\n", ReturnLength); - - SystemInformationLength = ReturnLength; - shi = HeapReAlloc(GetProcessHeap(), 0, shi , SystemInformationLength); - status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - - /* Check if we have some return values */ - trace("Number of Handles : %d\n", shi->Count); - todo_wine - { - /* our implementation is a stub for now */ - ok( shi->Count > 1, "Expected more than 1 handles, got (%d)\n", shi->Count); - } - - HeapFree( GetProcessHeap(), 0, shi); -} - -static void test_query_cache(void) -{ - DWORD status; - ULONG ReturnLength; - SYSTEM_CACHE_INFORMATION sci; - - status = pNtQuerySystemInformation(SystemCacheInformation, &sci, 0, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - status = pNtQuerySystemInformation(SystemCacheInformation, &sci, sizeof(sci), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(sci) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - status = pNtQuerySystemInformation(SystemCacheInformation, &sci, sizeof(sci) + 2, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(sci) == ReturnLength, "Inconsistent length %d\n", ReturnLength); -} - -static void test_query_interrupt(void) -{ - DWORD status; - ULONG ReturnLength; - ULONG NeededLength; - SYSTEM_BASIC_INFORMATION sbi; - SYSTEM_INTERRUPT_INFORMATION* sii; - - /* Find out the number of processors */ - status = pNtQuerySystemInformation(SystemBasicInformation, &sbi, sizeof(sbi), &ReturnLength); - NeededLength = sbi.NumberOfProcessors * sizeof(SYSTEM_INTERRUPT_INFORMATION); - - sii = HeapAlloc(GetProcessHeap(), 0, NeededLength); - - status = pNtQuerySystemInformation(SystemInterruptInformation, sii, 0, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - /* Try it for all processors */ - status = pNtQuerySystemInformation(SystemInterruptInformation, sii, NeededLength, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - - /* Windows XP and W2K3 (and others?) always return 0 for the ReturnLength - * No test added for this as it's highly unlikely that an app depends on this - */ - - HeapFree( GetProcessHeap(), 0, sii); -} - -static void test_query_kerndebug(void) -{ - DWORD status; - ULONG ReturnLength; - SYSTEM_KERNEL_DEBUGGER_INFORMATION skdi; - - status = pNtQuerySystemInformation(SystemKernelDebuggerInformation, &skdi, 0, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - status = pNtQuerySystemInformation(SystemKernelDebuggerInformation, &skdi, sizeof(skdi), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(skdi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - status = pNtQuerySystemInformation(SystemKernelDebuggerInformation, &skdi, sizeof(skdi) + 2, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(skdi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); -} - -static void test_query_regquota(void) -{ - DWORD status; - ULONG ReturnLength; - SYSTEM_REGISTRY_QUOTA_INFORMATION srqi; - - status = pNtQuerySystemInformation(SystemRegistryQuotaInformation, &srqi, 0, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - status = pNtQuerySystemInformation(SystemRegistryQuotaInformation, &srqi, sizeof(srqi), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(srqi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - status = pNtQuerySystemInformation(SystemRegistryQuotaInformation, &srqi, sizeof(srqi) + 2, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(srqi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); -} - -static void test_query_process_basic(void) -{ - DWORD status; - ULONG ReturnLength; - - typedef struct _PROCESS_BASIC_INFORMATION_PRIVATE { - DWORD ExitStatus; - DWORD PebBaseAddress; - DWORD AffinityMask; - DWORD BasePriority; - ULONG UniqueProcessId; - ULONG InheritedFromUniqueProcessId; - } PROCESS_BASIC_INFORMATION_PRIVATE, *PPROCESS_BASIC_INFORMATION_PRIVATE; - - PROCESS_BASIC_INFORMATION_PRIVATE pbi; - - /* This test also covers some basic parameter testing that should be the same for - * every information class - */ - - /* Use a nonexistent info class */ - trace("Check nonexistent info class\n"); - status = pNtQueryInformationProcess(NULL, -1, NULL, 0, NULL); - ok( status == STATUS_INVALID_INFO_CLASS, "Expected STATUS_INVALID_INFO_CLASS, got %08x\n", status); - - /* Do not give a handle and buffer */ - trace("Check NULL handle and buffer and zero-length buffersize\n"); - status = pNtQueryInformationProcess(NULL, ProcessBasicInformation, NULL, 0, NULL); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - /* Use a correct info class and buffer size, but still no handle and buffer */ - trace("Check NULL handle and buffer\n"); - status = pNtQueryInformationProcess(NULL, ProcessBasicInformation, NULL, sizeof(pbi), NULL); - ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE, - "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_HANDLE(W2K3), got %08x\n", status); - - /* Use a correct info class and buffer size, but still no handle */ - trace("Check NULL handle\n"); - status = pNtQueryInformationProcess(NULL, ProcessBasicInformation, &pbi, sizeof(pbi), NULL); - ok( status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got %08x\n", status); - - /* Use a greater buffer size */ - trace("Check NULL handle and too large buffersize\n"); - status = pNtQueryInformationProcess(NULL, ProcessBasicInformation, &pbi, sizeof(pbi) * 2, NULL); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - /* Use no ReturnLength */ - trace("Check NULL ReturnLength\n"); - status = pNtQueryInformationProcess(GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi), NULL); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - - /* Finally some correct calls */ - trace("Check with correct parameters\n"); - status = pNtQueryInformationProcess(GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(pbi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - /* Everything is correct except a too large buffersize */ - trace("Too large buffersize\n"); - status = pNtQueryInformationProcess(GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi) * 2, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - ok( sizeof(pbi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - /* Check if we have some return values */ - trace("ProcessID : %d\n", pbi.UniqueProcessId); - ok( pbi.UniqueProcessId > 0, "Expected a ProcessID > 0, got 0\n"); -} - -static void test_query_process_vm(void) -{ - DWORD status; - ULONG ReturnLength; - VM_COUNTERS pvi; - - status = pNtQueryInformationProcess(NULL, ProcessVmCounters, NULL, sizeof(pvi), NULL); - ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE, - "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_HANDLE(W2K3), got %08x\n", status); - - status = pNtQueryInformationProcess(NULL, ProcessVmCounters, &pvi, sizeof(pvi), NULL); - ok( status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got %08x\n", status); - - /* Windows XP and W2K3 will report success for a size of 44 AND 48 ! - Windows W2K will only report success for 44. - For now we only care for 44, which is sizeof(VM_COUNTERS) - If an app depends on it, we have to implement this in ntdll/process.c - */ - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessVmCounters, &pvi, 24, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessVmCounters, &pvi, sizeof(pvi), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(pvi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessVmCounters, &pvi, 46, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - ok( sizeof(pvi) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - /* Check if we have some return values */ - trace("WorkingSetSize : %ld\n", pvi.WorkingSetSize); - todo_wine - { - ok( pvi.WorkingSetSize > 0, "Expected a WorkingSetSize > 0\n"); - } -} - -static void test_query_process_io(void) -{ - DWORD status; - ULONG ReturnLength; - IO_COUNTERS pii; - - /* NT4 doesn't support this information class, so check for it */ - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessIoCounters, &pii, sizeof(pii), &ReturnLength); - if (status == STATUS_NOT_SUPPORTED) - { - skip("ProcessIoCounters information class is not supported\n"); - return; - } - - status = pNtQueryInformationProcess(NULL, ProcessIoCounters, NULL, sizeof(pii), NULL); - ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE, - "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_HANDLE(W2K3), got %08x\n", status); - - status = pNtQueryInformationProcess(NULL, ProcessIoCounters, &pii, sizeof(pii), NULL); - ok( status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got %08x\n", status); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessIoCounters, &pii, 24, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessIoCounters, &pii, sizeof(pii), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(pii) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessIoCounters, &pii, sizeof(pii) * 2, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - ok( sizeof(pii) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - /* Check if we have some return values */ - trace("OtherOperationCount : 0x%x%08x\n", (DWORD)(pii.OtherOperationCount >> 32), (DWORD)pii.OtherOperationCount); - todo_wine - { - ok( pii.OtherOperationCount > 0, "Expected an OtherOperationCount > 0\n"); - } -} - -static void test_query_process_times(void) -{ - DWORD status; - ULONG ReturnLength; - HANDLE process; - SYSTEMTIME UTC, Local; - KERNEL_USER_TIMES spti; - - status = pNtQueryInformationProcess(NULL, ProcessTimes, NULL, sizeof(spti), NULL); - ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE, - "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_HANDLE(W2K3), got %08x\n", status); - - status = pNtQueryInformationProcess(NULL, ProcessTimes, &spti, sizeof(spti), NULL); - ok( status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got %08x\n", status); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessTimes, &spti, 24, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, one_before_last_pid); - if (!process) - { - trace("Could not open process with ID : %d, error : %u. Going to use current one.\n", one_before_last_pid, GetLastError()); - process = GetCurrentProcess(); - trace("ProcessTimes for current process\n"); - } - else - trace("ProcessTimes for process with ID : %d\n", one_before_last_pid); - - status = pNtQueryInformationProcess( process, ProcessTimes, &spti, sizeof(spti), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(spti) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - CloseHandle(process); - - FileTimeToSystemTime((const FILETIME *)&spti.CreateTime, &UTC); - SystemTimeToTzSpecificLocalTime(NULL, &UTC, &Local); - trace("CreateTime : %02d/%02d/%04d %02d:%02d:%02d\n", Local.wMonth, Local.wDay, Local.wYear, - Local.wHour, Local.wMinute, Local.wSecond); - - FileTimeToSystemTime((const FILETIME *)&spti.ExitTime, &UTC); - SystemTimeToTzSpecificLocalTime(NULL, &UTC, &Local); - trace("ExitTime : %02d/%02d/%04d %02d:%02d:%02d\n", Local.wMonth, Local.wDay, Local.wYear, - Local.wHour, Local.wMinute, Local.wSecond); - - FileTimeToSystemTime((const FILETIME *)&spti.KernelTime, &Local); - trace("KernelTime : %02d:%02d:%02d.%03d\n", Local.wHour, Local.wMinute, Local.wSecond, Local.wMilliseconds); - - FileTimeToSystemTime((const FILETIME *)&spti.UserTime, &Local); - trace("UserTime : %02d:%02d:%02d.%03d\n", Local.wHour, Local.wMinute, Local.wSecond, Local.wMilliseconds); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessTimes, &spti, sizeof(spti) * 2, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - ok( sizeof(spti) == ReturnLength, "Inconsistent length %d\n", ReturnLength); -} - -static void test_query_process_handlecount(void) -{ - DWORD status; - ULONG ReturnLength; - DWORD handlecount; - HANDLE process; - - status = pNtQueryInformationProcess(NULL, ProcessHandleCount, NULL, sizeof(handlecount), NULL); - ok( status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_HANDLE, - "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_HANDLE(W2K3), got %08x\n", status); - - status = pNtQueryInformationProcess(NULL, ProcessHandleCount, &handlecount, sizeof(handlecount), NULL); - ok( status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got %08x\n", status); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessHandleCount, &handlecount, 2, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, one_before_last_pid); - if (!process) - { - trace("Could not open process with ID : %d, error : %u. Going to use current one.\n", one_before_last_pid, GetLastError()); - process = GetCurrentProcess(); - trace("ProcessHandleCount for current process\n"); - } - else - trace("ProcessHandleCount for process with ID : %d\n", one_before_last_pid); - - status = pNtQueryInformationProcess( process, ProcessHandleCount, &handlecount, sizeof(handlecount), &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( sizeof(handlecount) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - CloseHandle(process); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessHandleCount, &handlecount, sizeof(handlecount) * 2, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - ok( sizeof(handlecount) == ReturnLength, "Inconsistent length %d\n", ReturnLength); - - /* Check if we have some return values */ - trace("HandleCount : %d\n", handlecount); - todo_wine - { - ok( handlecount > 0, "Expected some handles, got 0\n"); - } -} - -static void test_query_process_image_file_name(void) -{ - DWORD status; - ULONG ReturnLength; - UNICODE_STRING image_file_name; - void *buffer; - char *file_nameA; - INT len; - - status = pNtQueryInformationProcess(NULL, ProcessImageFileName, &image_file_name, sizeof(image_file_name), NULL); - if (status == STATUS_INVALID_INFO_CLASS) - { - skip("ProcessImageFileName is not supported\n"); - return; - } - ok( status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got %08x\n", status); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessImageFileName, &image_file_name, 2, &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessImageFileName, &image_file_name, sizeof(image_file_name), &ReturnLength); - ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status); - - buffer = HeapAlloc(GetProcessHeap(), 0, ReturnLength); - status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessImageFileName, buffer, ReturnLength, &ReturnLength); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - memcpy(&image_file_name, buffer, sizeof(image_file_name)); - len = WideCharToMultiByte(CP_ACP, 0, image_file_name.Buffer, image_file_name.Length/sizeof(WCHAR), NULL, 0, NULL, NULL); - file_nameA = HeapAlloc(GetProcessHeap(), 0, len + 1); - WideCharToMultiByte(CP_ACP, 0, image_file_name.Buffer, image_file_name.Length/sizeof(WCHAR), file_nameA, len, NULL, NULL); - file_nameA[len] = '\0'; - HeapFree(GetProcessHeap(), 0, buffer); - trace("process image file name: %s\n", file_nameA); - HeapFree(GetProcessHeap(), 0, file_nameA); -} - - -static void test_readvirtualmemory(void) -{ - HANDLE process; - DWORD status; - SIZE_T readcount; - static const char teststring[] = "test string"; - char buffer[12]; - - process = OpenProcess(PROCESS_VM_READ, FALSE, GetCurrentProcessId()); - ok(process != 0, "Expected to be able to open own process for reading memory\n"); - - /* normal operation */ - status = pNtReadVirtualMemory(process, teststring, buffer, 12, &readcount); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( readcount == 12, "Expected to read 12 bytes, got %ld\n",readcount); - ok( strcmp(teststring, buffer) == 0, "Expected read memory to be the same as original memory\n"); - - /* no number of bytes */ - memset(buffer, 0, 12); - status = pNtReadVirtualMemory(process, teststring, buffer, 12, NULL); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( strcmp(teststring, buffer) == 0, "Expected read memory to be the same as original memory\n"); - - /* illegal remote address */ - todo_wine{ - status = pNtReadVirtualMemory(process, (void *) 0x1234, buffer, 12, &readcount); - ok( status == STATUS_PARTIAL_COPY, "Expected STATUS_PARTIAL_COPY, got %08x\n", status); - ok( readcount == 0, "Expected to read 0 bytes, got %ld\n",readcount); - } - - /* 0 handle */ - status = pNtReadVirtualMemory(0, teststring, buffer, 12, &readcount); - ok( status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got %08x\n", status); - ok( readcount == 0, "Expected to read 0 bytes, got %ld\n",readcount); - - /* pseudo handle for current process*/ - memset(buffer, 0, 12); - status = pNtReadVirtualMemory((HANDLE)-1, teststring, buffer, 12, &readcount); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - ok( readcount == 12, "Expected to read 12 bytes, got %ld\n",readcount); - ok( strcmp(teststring, buffer) == 0, "Expected read memory to be the same as original memory\n"); - - /* this test currently crashes wine with "wine client error:: read: Bad address" - * because the reply from wine server is directly read into the buffer and that fails with EFAULT - */ - /* illegal local address */ - /*status = pNtReadVirtualMemory(process, teststring, (void *)0x1234, 12, &readcount); - ok( status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got %08lx\n", status); - ok( readcount == 0, "Expected to read 0 bytes, got %ld\n",readcount); - */ - - CloseHandle(process); -} - -START_TEST(info) -{ - if(!InitFunctionPtrs()) - return; - - /* NtQuerySystemInformation */ - - /* 0x0 SystemBasicInformation */ - trace("Starting test_query_basic()\n"); - test_query_basic(); - - /* 0x1 SystemCpuInformation */ - trace("Starting test_query_cpu()\n"); - test_query_cpu(); - - /* 0x2 SystemPerformanceInformation */ - trace("Starting test_query_performance()\n"); - test_query_performance(); - - /* 0x3 SystemTimeOfDayInformation */ - trace("Starting test_query_timeofday()\n"); - test_query_timeofday(); - - /* 0x5 SystemProcessInformation */ - trace("Starting test_query_process()\n"); - test_query_process(); - - /* 0x8 SystemProcessorPerformanceInformation */ - trace("Starting test_query_procperf()\n"); - test_query_procperf(); - - /* 0xb SystemModuleInformation */ - trace("Starting test_query_module()\n"); - test_query_module(); - - /* 0x10 SystemHandleInformation */ - trace("Starting test_query_handle()\n"); - test_query_handle(); - - /* 0x15 SystemCacheInformation */ - trace("Starting test_query_cache()\n"); - test_query_cache(); - - /* 0x17 SystemInterruptInformation */ - trace("Starting test_query_interrupt()\n"); - test_query_interrupt(); - - /* 0x23 SystemKernelDebuggerInformation */ - trace("Starting test_query_kerndebug()\n"); - test_query_kerndebug(); - - /* 0x25 SystemRegistryQuotaInformation */ - trace("Starting test_query_regquota()\n"); - test_query_regquota(); - - /* NtQueryInformationProcess */ - - /* 0x0 ProcessBasicInformation */ - trace("Starting test_query_process_basic()\n"); - test_query_process_basic(); - - /* 0x2 ProcessIoCounters */ - trace("Starting test_query_process_io()\n"); - test_query_process_io(); - - /* 0x3 ProcessVmCounters */ - trace("Starting test_query_process_vm()\n"); - test_query_process_vm(); - - /* 0x4 ProcessTimes */ - trace("Starting test_query_process_times()\n"); - test_query_process_times(); - - /* 0x14 ProcessHandleCount */ - trace("Starting test_query_process_handlecount()\n"); - test_query_process_handlecount(); - - /* 27 ProcessImageFileName */ - trace("Starting test_query_process_image_file_name()\n"); - test_query_process_image_file_name(); - - /* belongs into it's own file */ - trace("Starting test_readvirtualmemory()\n"); - test_readvirtualmemory(); -} diff --git a/rostests/winetests/ntdll/large_int.c b/rostests/winetests/ntdll/large_int.c deleted file mode 100755 index bec8ad9bf8f..00000000000 --- a/rostests/winetests/ntdll/large_int.c +++ /dev/null @@ -1,436 +0,0 @@ -/* Unit test suite for Rtl large integer functions - * - * 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 - * - * NOTES - * We use function pointers here as there is no import library for NTDLL on - * windows. - */ - -#include - -#include "ntdll_test.h" - - -/* Function ptrs for ntdll calls */ -static HMODULE hntdll = 0; -static LONGLONG (WINAPI *pRtlExtendedMagicDivide)(LONGLONG, LONGLONG, INT); -static VOID (WINAPI *pRtlFreeAnsiString)(PSTRING); -static NTSTATUS (WINAPI *pRtlInt64ToUnicodeString)(ULONGLONG, ULONG, UNICODE_STRING *); -static NTSTATUS (WINAPI *pRtlLargeIntegerToChar)(ULONGLONG *, ULONG, ULONG, PCHAR); -static NTSTATUS (WINAPI *pRtlUnicodeStringToAnsiString)(STRING *, const UNICODE_STRING *, BOOLEAN); - - -static void InitFunctionPtrs(void) -{ - hntdll = LoadLibraryA("ntdll.dll"); - ok(hntdll != 0, "LoadLibrary failed\n"); - if (hntdll) { - pRtlExtendedMagicDivide = (void *)GetProcAddress(hntdll, "RtlExtendedMagicDivide"); - pRtlFreeAnsiString = (void *)GetProcAddress(hntdll, "RtlFreeAnsiString"); - pRtlInt64ToUnicodeString = (void *)GetProcAddress(hntdll, "RtlInt64ToUnicodeString"); - pRtlLargeIntegerToChar = (void *)GetProcAddress(hntdll, "RtlLargeIntegerToChar"); - pRtlUnicodeStringToAnsiString = (void *)GetProcAddress(hntdll, "RtlUnicodeStringToAnsiString"); - } /* if */ -} - -#define ULL(a,b) (((ULONGLONG)(a) << 32) | (b)) - -typedef struct { - LONGLONG a; - LONGLONG b; - INT shift; - LONGLONG result; -} magic_divide_t; - -static const magic_divide_t magic_divide[] = { - { 3, ULL(0x55555555,0x55555555), 0, 0}, /* 1 */ - { 333333333, ULL(0x55555555,0x55555555), 0, 111111110}, /* 111111111 */ - { ULL(0x7fffffff,0xffffffff), ULL(0x55555555,0x55555555), 0, ULL(0x2aaaaaaa,0xaaaaaaaa)}, - { 3, ULL(0xaaaaaaaa,0xaaaaaaaa), 1, 0}, /* 1 */ - { 333333333, ULL(0xaaaaaaaa,0xaaaaaaaa), 1, 111111110}, /* 111111111 */ - { ULL(0x7fffffff,0xffffffff), ULL(0xaaaaaaaa,0xaaaaaaaa), 1, ULL(0x2aaaaaaa,0xaaaaaaaa)}, - { -3, ULL(0x55555555,0x55555555), 0, 0}, /* -1 */ - { -333333333, ULL(0x55555555,0x55555555), 0, -111111110}, /* -111111111 */ - {-ULL(0x7fffffff,0xffffffff), ULL(0x55555555,0x55555555), 0, -ULL(0x2aaaaaaa,0xaaaaaaaa)}, - { -3, ULL(0xaaaaaaaa,0xaaaaaaaa), 1, 0}, /* -1 */ - { -333333333, ULL(0xaaaaaaaa,0xaaaaaaaa), 1, -111111110}, /* -111111111 */ - {-ULL(0x7fffffff,0xffffffff), ULL(0xaaaaaaaa,0xaaaaaaaa), 1, -ULL(0x2aaaaaaa,0xaaaaaaaa)}, - { -3, -ULL(0x55555555,0x55555555), 0, -2}, /* -1 */ - { -333333333, -ULL(0x55555555,0x55555555), 0, -222222222}, /* -111111111 */ - {-ULL(0x7fffffff,0xffffffff), -ULL(0x55555555,0x55555555), 0, -ULL(0x55555555,0x55555554)}, - { -3, -ULL(0xaaaaaaaa,0xaaaaaaaa), 1, 0}, /* -1 */ - { -333333333, -ULL(0xaaaaaaaa,0xaaaaaaaa), 1, -55555555}, /* -111111111 */ - {-ULL(0x7fffffff,0xffffffff), -ULL(0xaaaaaaaa,0xaaaaaaaa), 1, -ULL(0x15555555,0x55555555)}, - { 3, -ULL(0x55555555,0x55555555), 0, 2}, /* -1 */ - { 333333333, -ULL(0x55555555,0x55555555), 0, 222222222}, /* -111111111 */ - { ULL(0x7fffffff,0xffffffff), -ULL(0x55555555,0x55555555), 0, ULL(0x55555555,0x55555554)}, - { 3, -ULL(0xaaaaaaaa,0xaaaaaaaa), 1, 0}, /* -1 */ - { 333333333, -ULL(0xaaaaaaaa,0xaaaaaaaa), 1, 55555555}, /* -111111111 */ - { ULL(0x7fffffff,0xffffffff), -ULL(0xaaaaaaaa,0xaaaaaaaa), 1, ULL(0x15555555,0x55555555)}, - { 3, ULL(0xaaaaaaaa,0xaaaaa800), 1, 0}, /* 1 */ - { 333333333, ULL(0xaaaaaaaa,0xaaaaa800), 1, 111111110}, /* 111111111 */ - { ULL(0x7fffffff,0xffffffff), ULL(0xaaaaaaaa,0xaaaaa800), 1, ULL(0x2aaaaaaa,0xaaaaa9ff)}, /* 0x2aaaaaaaaaaaaaaa */ - { 5, ULL(0x33333333,0x333333ff), 0, 1}, - { 555555555, ULL(0x33333333,0x333333ff), 0, 111111111}, - { ULL(0x7fffffff,0xffffffff), ULL(0x33333333,0x333333ff), 0, ULL(0x19999999,0x999999ff)}, /* 0x199999999999999a */ - { 5, ULL(0x66666666,0x666667fe), 1, 1}, - { 555555555, ULL(0x66666666,0x666667fe), 1, 111111111}, - { ULL(0x7fffffff,0xffffffff), ULL(0x66666666,0x666667fe), 1, ULL(0x19999999,0x999999ff)}, /* 0x199999999999999a */ - { 5, ULL(0xcccccccc,0xcccccffd), 2, 1}, - { 555555555, ULL(0xcccccccc,0xcccccffd), 2, 111111111}, - { ULL(0x7fffffff,0xffffffff), ULL(0xcccccccc,0xcccccffd), 2, ULL(0x19999999,0x999999ff)}, /* 0x199999999999999a */ - { ULL(0x00000add,0xcafeface), ULL(0x002f1e28,0xfd1b5cca), 33, 1}, - { ULL(0x081ac1b9,0xc2310a80), ULL(0x002f1e28,0xfd1b5cca), 33, 0xbeef}, - { ULL(0x74ae3b5f,0x1558c800), ULL(0x002f1e28,0xfd1b5cca), 33, 0xabcde}, - { ULL(0x00000add,0xcafeface), ULL(0x2f1e28fd,0x1b5cca00), 41, 1}, - { ULL(0x081ac1b9,0xc2310a80), ULL(0x2f1e28fd,0x1b5cca00), 41, 0xbeef}, - { ULL(0x74ae3b5f,0x1558c800), ULL(0x2f1e28fd,0x1b5cca00), 41, 0xabcde}, - -}; -#define NB_MAGIC_DIVIDE (sizeof(magic_divide)/sizeof(*magic_divide)) - - -static void test_RtlExtendedMagicDivide(void) -{ - int i; - LONGLONG result; - - for (i = 0; i < NB_MAGIC_DIVIDE; i++) { - result = pRtlExtendedMagicDivide(magic_divide[i].a, magic_divide[i].b, magic_divide[i].shift); - ok(result == magic_divide[i].result, - "call failed: RtlExtendedMagicDivide(0x%x%08x, 0x%x%08x, %d) has result 0x%x%08x, expected 0x%x%08x\n", - (DWORD)(magic_divide[i].a >> 32), (DWORD)magic_divide[i].a, (DWORD)(magic_divide[i].b >> 32), - (DWORD)magic_divide[i].b, magic_divide[i].shift, (DWORD)(result >> 32), (DWORD)result, - (DWORD)(magic_divide[i].result >> 32), (DWORD)magic_divide[i].result); - } -} - - -#define LARGE_STRI_BUFFER_LENGTH 67 - -typedef struct { - int base; - ULONGLONG value; - USHORT Length; - USHORT MaximumLength; - const char *Buffer; - NTSTATUS result; -} largeint2str_t; - -/* - * The native DLL does produce garbage or STATUS_BUFFER_OVERFLOW for - * base 2, 8 and 16 when the value is larger than 0xFFFFFFFF. - * Therefore these testcases are commented out. - */ - -static const largeint2str_t largeint2str[] = { - {10, 123, 3, 11, "123\0---------------------------------------------------------------", STATUS_SUCCESS}, - - { 0, 0x80000000U, 10, 11, "2147483648\0--------------------------------------------------------", STATUS_SUCCESS}, - { 0, -2147483647, 20, 21, "18446744071562067969\0----------------------------------------------", STATUS_SUCCESS}, - { 0, -2, 20, 21, "18446744073709551614\0----------------------------------------------", STATUS_SUCCESS}, - { 0, -1, 20, 21, "18446744073709551615\0----------------------------------------------", STATUS_SUCCESS}, - { 0, 0, 1, 11, "0\0-----------------------------------------------------------------", STATUS_SUCCESS}, - { 0, 1, 1, 11, "1\0-----------------------------------------------------------------", STATUS_SUCCESS}, - { 0, 12, 2, 11, "12\0----------------------------------------------------------------", STATUS_SUCCESS}, - { 0, 123, 3, 11, "123\0---------------------------------------------------------------", STATUS_SUCCESS}, - { 0, 1234, 4, 11, "1234\0--------------------------------------------------------------", STATUS_SUCCESS}, - { 0, 12345, 5, 11, "12345\0-------------------------------------------------------------", STATUS_SUCCESS}, - { 0, 123456, 6, 11, "123456\0------------------------------------------------------------", STATUS_SUCCESS}, - { 0, 1234567, 7, 11, "1234567\0-----------------------------------------------------------", STATUS_SUCCESS}, - { 0, 12345678, 8, 11, "12345678\0----------------------------------------------------------", STATUS_SUCCESS}, - { 0, 123456789, 9, 11, "123456789\0---------------------------------------------------------", STATUS_SUCCESS}, - { 0, 2147483646, 10, 11, "2147483646\0--------------------------------------------------------", STATUS_SUCCESS}, - { 0, 2147483647, 10, 11, "2147483647\0--------------------------------------------------------", STATUS_SUCCESS}, - { 0, 2147483648U, 10, 11, "2147483648\0--------------------------------------------------------", STATUS_SUCCESS}, - { 0, 2147483649U, 10, 11, "2147483649\0--------------------------------------------------------", STATUS_SUCCESS}, - { 0, 4294967294U, 10, 11, "4294967294\0--------------------------------------------------------", STATUS_SUCCESS}, - { 0, 4294967295U, 10, 11, "4294967295\0--------------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0x2,0xdfdc1c35), 11, 12, "12345678901\0-------------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0xe5,0xf4c8f374), 12, 13, "987654321012\0------------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0x1c0,0xfc161e3e), 13, 14, "1928374656574\0-----------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0xbad,0xcafeface), 14, 15, "12841062955726\0----------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0x5bad,0xcafeface), 15, 16, "100801993177806\0---------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0xaface,0xbeefcafe), 16, 20, "3090515640699646\0--------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0xa5beef,0xabcdcafe), 17, 20, "46653307746110206\0-------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0x1f8cf9b,0xf2df3af1), 18, 20, "142091656963767025\0------------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0x0fffffff,0xffffffff), 19, 20, "1152921504606846975\0-----------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0xffffffff,0xfffffffe), 20, 21, "18446744073709551614\0----------------------------------------------", STATUS_SUCCESS}, - { 0, ULL(0xffffffff,0xffffffff), 20, 21, "18446744073709551615\0----------------------------------------------", STATUS_SUCCESS}, - - { 2, 0x80000000U, 32, 33, "10000000000000000000000000000000\0----------------------------------", STATUS_SUCCESS}, -/* - * { 2, -2147483647, 64, 65, "1111111111111111111111111111111110000000000000000000000000000001\0--", STATUS_SUCCESS}, - * { 2, -2, 64, 65, "1111111111111111111111111111111111111111111111111111111111111110\0--", STATUS_SUCCESS}, - * { 2, -1, 64, 65, "1111111111111111111111111111111111111111111111111111111111111111\0--", STATUS_SUCCESS}, - */ - { 2, 0, 1, 33, "0\0-----------------------------------------------------------------", STATUS_SUCCESS}, - { 2, 1, 1, 33, "1\0-----------------------------------------------------------------", STATUS_SUCCESS}, - { 2, 10, 4, 33, "1010\0--------------------------------------------------------------", STATUS_SUCCESS}, - { 2, 100, 7, 33, "1100100\0-----------------------------------------------------------", STATUS_SUCCESS}, - { 2, 1000, 10, 33, "1111101000\0--------------------------------------------------------", STATUS_SUCCESS}, - { 2, 10000, 14, 33, "10011100010000\0----------------------------------------------------", STATUS_SUCCESS}, - { 2, 32767, 15, 33, "111111111111111\0---------------------------------------------------", STATUS_SUCCESS}, - { 2, 32768, 16, 33, "1000000000000000\0--------------------------------------------------", STATUS_SUCCESS}, - { 2, 65535, 16, 33, "1111111111111111\0--------------------------------------------------", STATUS_SUCCESS}, - { 2, 100000, 17, 33, "11000011010100000\0-------------------------------------------------", STATUS_SUCCESS}, - { 2, 1000000, 20, 33, "11110100001001000000\0----------------------------------------------", STATUS_SUCCESS}, - { 2, 10000000, 24, 33, "100110001001011010000000\0------------------------------------------", STATUS_SUCCESS}, - { 2, 100000000, 27, 33, "101111101011110000100000000\0---------------------------------------", STATUS_SUCCESS}, - { 2, 1000000000, 30, 33, "111011100110101100101000000000\0------------------------------------", STATUS_SUCCESS}, - { 2, 1073741823, 30, 33, "111111111111111111111111111111\0------------------------------------", STATUS_SUCCESS}, - { 2, 2147483646, 31, 33, "1111111111111111111111111111110\0-----------------------------------", STATUS_SUCCESS}, - { 2, 2147483647, 31, 33, "1111111111111111111111111111111\0-----------------------------------", STATUS_SUCCESS}, - { 2, 2147483648U, 32, 33, "10000000000000000000000000000000\0----------------------------------", STATUS_SUCCESS}, - { 2, 2147483649U, 32, 33, "10000000000000000000000000000001\0----------------------------------", STATUS_SUCCESS}, - { 2, 4294967294U, 32, 33, "11111111111111111111111111111110\0----------------------------------", STATUS_SUCCESS}, - { 2, 0xFFFFFFFF, 32, 33, "11111111111111111111111111111111\0----------------------------------", STATUS_SUCCESS}, -/* - * { 2, 0x1FFFFFFFF, 33, 34, "111111111111111111111111111111111\0---------------------------------", STATUS_SUCCESS}, - * { 2, 0x3FFFFFFFF, 34, 35, "1111111111111111111111111111111111\0--------------------------------", STATUS_SUCCESS}, - * { 2, 0x7FFFFFFFF, 35, 36, "11111111111111111111111111111111111\0-------------------------------", STATUS_SUCCESS}, - * { 2, 0xFFFFFFFFF, 36, 37, "111111111111111111111111111111111111\0------------------------------", STATUS_SUCCESS}, - * { 2, 0x1FFFFFFFFF, 37, 38, "1111111111111111111111111111111111111\0-----------------------------", STATUS_SUCCESS}, - * { 2, 0x3FFFFFFFFF, 38, 39, "11111111111111111111111111111111111111\0----------------------------", STATUS_SUCCESS}, - * { 2, 0x7FFFFFFFFF, 39, 40, "111111111111111111111111111111111111111\0---------------------------", STATUS_SUCCESS}, - * { 2, 0xFFFFFFFFFF, 40, 41, "1111111111111111111111111111111111111111\0--------------------------", STATUS_SUCCESS}, - */ - - { 8, 0x80000000U, 11, 12, "20000000000\0-------------------------------------------------------", STATUS_SUCCESS}, -/* - * { 8, -2147483647, 22, 23, "1777777777760000000001\0--------------------------------------------", STATUS_SUCCESS}, - * { 8, -2, 22, 23, "1777777777777777777776\0--------------------------------------------", STATUS_SUCCESS}, - * { 8, -1, 22, 23, "1777777777777777777777\0--------------------------------------------", STATUS_SUCCESS}, - */ - { 8, 0, 1, 12, "0\0-----------------------------------------------------------------", STATUS_SUCCESS}, - { 8, 1, 1, 12, "1\0-----------------------------------------------------------------", STATUS_SUCCESS}, - { 8, 2147483646, 11, 12, "17777777776\0-------------------------------------------------------", STATUS_SUCCESS}, - { 8, 2147483647, 11, 12, "17777777777\0-------------------------------------------------------", STATUS_SUCCESS}, - { 8, 2147483648U, 11, 12, "20000000000\0-------------------------------------------------------", STATUS_SUCCESS}, - { 8, 2147483649U, 11, 12, "20000000001\0-------------------------------------------------------", STATUS_SUCCESS}, - { 8, 4294967294U, 11, 12, "37777777776\0-------------------------------------------------------", STATUS_SUCCESS}, - { 8, 4294967295U, 11, 12, "37777777777\0-------------------------------------------------------", STATUS_SUCCESS}, - - {10, 0x80000000U, 10, 11, "2147483648\0--------------------------------------------------------", STATUS_SUCCESS}, - {10, -2147483647, 20, 21, "18446744071562067969\0----------------------------------------------", STATUS_SUCCESS}, - {10, -2, 20, 21, "18446744073709551614\0----------------------------------------------", STATUS_SUCCESS}, - {10, -1, 20, 21, "18446744073709551615\0----------------------------------------------", STATUS_SUCCESS}, - {10, 0, 1, 11, "0\0-----------------------------------------------------------------", STATUS_SUCCESS}, - {10, 1, 1, 11, "1\0-----------------------------------------------------------------", STATUS_SUCCESS}, - {10, 2147483646, 10, 11, "2147483646\0--------------------------------------------------------", STATUS_SUCCESS}, - {10, 2147483647, 10, 11, "2147483647\0--------------------------------------------------------", STATUS_SUCCESS}, - {10, 2147483648U, 10, 11, "2147483648\0--------------------------------------------------------", STATUS_SUCCESS}, - {10, 2147483649U, 10, 11, "2147483649\0--------------------------------------------------------", STATUS_SUCCESS}, - {10, 4294967294U, 10, 11, "4294967294\0--------------------------------------------------------", STATUS_SUCCESS}, - {10, 4294967295U, 10, 11, "4294967295\0--------------------------------------------------------", STATUS_SUCCESS}, - - {16, 0, 1, 9, "0\0-----------------------------------------------------------------", STATUS_SUCCESS}, - {16, 1, 1, 9, "1\0-----------------------------------------------------------------", STATUS_SUCCESS}, - {16, 2147483646, 8, 9, "7FFFFFFE\0----------------------------------------------------------", STATUS_SUCCESS}, - {16, 2147483647, 8, 9, "7FFFFFFF\0----------------------------------------------------------", STATUS_SUCCESS}, - {16, 0x80000000, 8, 9, "80000000\0----------------------------------------------------------", STATUS_SUCCESS}, - {16, 0x80000001, 8, 9, "80000001\0----------------------------------------------------------", STATUS_SUCCESS}, - {16, 0xFFFFFFFE, 8, 9, "FFFFFFFE\0----------------------------------------------------------", STATUS_SUCCESS}, - {16, 0xFFFFFFFF, 8, 9, "FFFFFFFF\0----------------------------------------------------------", STATUS_SUCCESS}, -/* - * {16, 0x100000000, 9, 10, "100000000\0---------------------------------------------------------", STATUS_SUCCESS}, - * {16, 0xBADDEADBEEF, 11, 12, "BADDEADBEEF\0-------------------------------------------------------", STATUS_SUCCESS}, - * {16, 0x8000000000000000, 16, 17, "8000000000000000\0--------------------------------------------------", STATUS_SUCCESS}, - * {16, 0xFEDCBA9876543210, 16, 17, "FEDCBA9876543210\0--------------------------------------------------", STATUS_SUCCESS}, - * {16, 0xFFFFFFFF80000001, 16, 17, "FFFFFFFF80000001\0--------------------------------------------------", STATUS_SUCCESS}, - * {16, 0xFFFFFFFFFFFFFFFE, 16, 17, "FFFFFFFFFFFFFFFE\0--------------------------------------------------", STATUS_SUCCESS}, - * {16, 0xFFFFFFFFFFFFFFFF, 16, 17, "FFFFFFFFFFFFFFFF\0--------------------------------------------------", STATUS_SUCCESS}, - */ - - { 2, 32768, 16, 17, "1000000000000000\0--------------------------------------------------", STATUS_SUCCESS}, - { 2, 32768, 16, 16, "1000000000000000---------------------------------------------------", STATUS_SUCCESS}, - { 2, 65536, 17, 18, "10000000000000000\0-------------------------------------------------", STATUS_SUCCESS}, - { 2, 65536, 17, 17, "10000000000000000--------------------------------------------------", STATUS_SUCCESS}, - { 2, 131072, 18, 19, "100000000000000000\0------------------------------------------------", STATUS_SUCCESS}, - { 2, 131072, 18, 18, "100000000000000000-------------------------------------------------", STATUS_SUCCESS}, - {16, 0xffffffff, 8, 9, "FFFFFFFF\0----------------------------------------------------------", STATUS_SUCCESS}, - {16, 0xffffffff, 8, 8, "FFFFFFFF-----------------------------------------------------------", STATUS_SUCCESS}, - {16, 0xffffffff, 8, 7, "-------------------------------------------------------------------", STATUS_BUFFER_OVERFLOW}, - {16, 0xa, 1, 2, "A\0-----------------------------------------------------------------", STATUS_SUCCESS}, - {16, 0xa, 1, 1, "A------------------------------------------------------------------", STATUS_SUCCESS}, - {16, 0, 1, 0, "-------------------------------------------------------------------", STATUS_BUFFER_OVERFLOW}, - {20, 0xdeadbeef, 0, 9, "-------------------------------------------------------------------", STATUS_INVALID_PARAMETER}, - {-8, 07654321, 0, 12, "-------------------------------------------------------------------", STATUS_INVALID_PARAMETER}, -}; -#define NB_LARGEINT2STR (sizeof(largeint2str)/sizeof(*largeint2str)) - - -static void one_RtlInt64ToUnicodeString_test(int test_num, const largeint2str_t *largeint2str) -{ - int pos; - WCHAR expected_str_Buffer[LARGE_STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING expected_unicode_string; - STRING expected_ansi_str; - WCHAR str_Buffer[LARGE_STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING unicode_string; - STRING ansi_str; - NTSTATUS result; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - expected_str_Buffer[pos] = largeint2str->Buffer[pos]; - } /* for */ - expected_unicode_string.Length = largeint2str->Length * sizeof(WCHAR); - expected_unicode_string.MaximumLength = largeint2str->MaximumLength * sizeof(WCHAR); - expected_unicode_string.Buffer = expected_str_Buffer; - pRtlUnicodeStringToAnsiString(&expected_ansi_str, &expected_unicode_string, 1); - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - str_Buffer[pos] = '-'; - } /* for */ - unicode_string.Length = 0; - unicode_string.MaximumLength = largeint2str->MaximumLength * sizeof(WCHAR); - unicode_string.Buffer = str_Buffer; - - if (largeint2str->base == 0) { - result = pRtlInt64ToUnicodeString(largeint2str->value, 10, &unicode_string); - } else { - result = pRtlInt64ToUnicodeString(largeint2str->value, largeint2str->base, &unicode_string); - } /* if */ - pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); - if (result == STATUS_BUFFER_OVERFLOW) { - /* On BUFFER_OVERFLOW the string Buffer should be unchanged */ - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - expected_str_Buffer[pos] = '-'; - } /* for */ - /* w2k: The native function has two reasons for BUFFER_OVERFLOW: */ - /* If the value is too large to convert: The Length is unchanged */ - /* If str is too small to hold the string: Set str->Length to the length */ - /* the string would have (which can be larger than the MaximumLength). */ - /* To allow all this in the tests we do the following: */ - if (expected_unicode_string.Length >= 64) { - /* The value is too large to convert only triggerd when testing native */ - /* Length is not filled with the expected string length (garbage?) */ - expected_unicode_string.Length = unicode_string.Length; - } /* if */ - } else { - ok(result == largeint2str->result, - "(test %d): RtlInt64ToUnicodeString(0x%x%08x, %d, [out]) has result %x, expected: %x\n", - test_num, (DWORD)(largeint2str->value >> 32), (DWORD)largeint2str->value, - largeint2str->base, result, largeint2str->result); - if (result == STATUS_SUCCESS) { - ok(unicode_string.Buffer[unicode_string.Length/sizeof(WCHAR)] == '\0', - "(test %d): RtlInt64ToUnicodeString(0x%x%08x, %d, [out]) string \"%s\" is not NULL terminated\n", - test_num, (DWORD)(largeint2str->value >> 32), (DWORD)largeint2str->value, - largeint2str->base, ansi_str.Buffer); - } /* if */ - } /* if */ - ok(memcmp(unicode_string.Buffer, expected_unicode_string.Buffer, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, - "(test %d): RtlInt64ToUnicodeString(0x%x%08x, %d, [out]) assigns string \"%s\", expected: \"%s\"\n", - test_num, (DWORD)(largeint2str->value >>32), (DWORD)largeint2str->value, largeint2str->base, - ansi_str.Buffer, expected_ansi_str.Buffer); - ok(unicode_string.Length == expected_unicode_string.Length, - "(test %d): RtlInt64ToUnicodeString(0x%x%08x, %d, [out]) string has Length %d, expected: %d\n", - test_num, (DWORD)(largeint2str->value >> 32), (DWORD)largeint2str->value, largeint2str->base, - unicode_string.Length, expected_unicode_string.Length); - ok(unicode_string.MaximumLength == expected_unicode_string.MaximumLength, - "(test %d): RtlInt64ToUnicodeString(0x%x%08x, %d, [out]) string has MaximumLength %d, expected: %d\n", - test_num, (DWORD)(largeint2str->value >> 32), (DWORD)largeint2str->value, largeint2str->base, - unicode_string.MaximumLength, expected_unicode_string.MaximumLength); - pRtlFreeAnsiString(&expected_ansi_str); - pRtlFreeAnsiString(&ansi_str); -} - - -static void test_RtlInt64ToUnicodeString(void) -{ - int test_num; - - for (test_num = 0; test_num < NB_LARGEINT2STR; test_num++) { - one_RtlInt64ToUnicodeString_test(test_num, &largeint2str[test_num]); - } /* for */ -} - - -static void one_RtlLargeIntegerToChar_test(int test_num, const largeint2str_t *largeint2str) -{ - NTSTATUS result; - char dest_str[LARGE_STRI_BUFFER_LENGTH + 1]; - ULONGLONG value; - - memset(dest_str, '-', LARGE_STRI_BUFFER_LENGTH); - dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0'; - value = largeint2str->value; - if (largeint2str->base == 0) { - result = pRtlLargeIntegerToChar(&value, 10, largeint2str->MaximumLength, dest_str); - } else { - result = pRtlLargeIntegerToChar(&value, largeint2str->base, largeint2str->MaximumLength, dest_str); - } /* if */ - ok(result == largeint2str->result, - "(test %d): RtlLargeIntegerToChar(0x%x%08x, %d, %d, [out]) has result %x, expected: %x\n", - test_num, (DWORD)(largeint2str->value >> 32), (DWORD)largeint2str->value, largeint2str->base, - largeint2str->MaximumLength, result, largeint2str->result); - ok(memcmp(dest_str, largeint2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0, - "(test %d): RtlLargeIntegerToChar(0x%x%08x, %d, %d, [out]) assigns string \"%s\", expected: \"%s\"\n", - test_num, (DWORD)(largeint2str->value >> 32), (DWORD)largeint2str->value, largeint2str->base, - largeint2str->MaximumLength, dest_str, largeint2str->Buffer); -} - - -static void test_RtlLargeIntegerToChar(void) -{ - NTSTATUS result; - int test_num; - ULONGLONG value; - - for (test_num = 0; test_num < NB_LARGEINT2STR; test_num++) { - one_RtlLargeIntegerToChar_test(test_num, &largeint2str[test_num]); - } /* for */ - - value = largeint2str[0].value; - result = pRtlLargeIntegerToChar(&value, 20, largeint2str[0].MaximumLength, NULL); - ok(result == STATUS_INVALID_PARAMETER, - "(test a): RtlLargeIntegerToChar(0x%x%08x, %d, %d, NULL) has result %x, expected: %x\n", - (DWORD)(largeint2str[0].value >> 32), (DWORD)largeint2str[0].value, 20, - largeint2str[0].MaximumLength, result, STATUS_INVALID_PARAMETER); - - result = pRtlLargeIntegerToChar(&value, 20, 0, NULL); - ok(result == STATUS_INVALID_PARAMETER, - "(test b): RtlLargeIntegerToChar(0x%x%08x, %d, %d, NULL) has result %x, expected: %x\n", - (DWORD)(largeint2str[0].value >> 32), (DWORD)largeint2str[0].value, 20, - largeint2str[0].MaximumLength, result, STATUS_INVALID_PARAMETER); - - result = pRtlLargeIntegerToChar(&value, largeint2str[0].base, 0, NULL); - ok(result == STATUS_BUFFER_OVERFLOW, - "(test c): RtlLargeIntegerToChar(0x%x%08x, %d, %d, NULL) has result %x, expected: %x\n", - (DWORD)(largeint2str[0].value >> 32), (DWORD)largeint2str[0].value, - largeint2str[0].base, 0, result, STATUS_BUFFER_OVERFLOW); - - result = pRtlLargeIntegerToChar(&value, largeint2str[0].base, largeint2str[0].MaximumLength, NULL); - ok(result == STATUS_ACCESS_VIOLATION, - "(test d): RtlLargeIntegerToChar(0x%x%08x, %d, %d, NULL) has result %x, expected: %x\n", - (DWORD)(largeint2str[0].value >> 32), (DWORD)largeint2str[0].value, - largeint2str[0].base, largeint2str[0].MaximumLength, result, STATUS_ACCESS_VIOLATION); -} - - -START_TEST(large_int) -{ - InitFunctionPtrs(); - - if (pRtlExtendedMagicDivide) - test_RtlExtendedMagicDivide(); - if (pRtlInt64ToUnicodeString) - test_RtlInt64ToUnicodeString(); - if (pRtlLargeIntegerToChar) - test_RtlLargeIntegerToChar(); -} diff --git a/rostests/winetests/ntdll/ntdll.rbuild b/rostests/winetests/ntdll/ntdll.rbuild deleted file mode 100644 index 08f50782ea7..00000000000 --- a/rostests/winetests/ntdll/ntdll.rbuild +++ /dev/null @@ -1,28 +0,0 @@ - - - - - . - - kernel32 - ntdll - atom.c - change.c - env.c - error.c - exception.c - file.c - info.c - large_int.c - om.c - path.c - port.c - reg.c - rtlbitmap.c - rtl.c - rtlstr.c - string.c - time.c - testlist.c - - diff --git a/rostests/winetests/ntdll/ntdll_test.h b/rostests/winetests/ntdll/ntdll_test.h deleted file mode 100755 index 167e5ca708c..00000000000 --- a/rostests/winetests/ntdll/ntdll_test.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Unit test suite for ntdll path functions - * - * Copyright 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 - */ - -#include - -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x500 /* For NTSTATUS */ -#endif - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "windef.h" -#include "winbase.h" -#include "winnt.h" -#include "winreg.h" -#include "winternl.h" - -#include "wine/test.h" diff --git a/rostests/winetests/ntdll/om.c b/rostests/winetests/ntdll/om.c deleted file mode 100644 index d211ea00432..00000000000 --- a/rostests/winetests/ntdll/om.c +++ /dev/null @@ -1,577 +0,0 @@ -/* - * Unit test suite for object manager functions - * - * Copyright 2005 Robert Shearman - * Copyright 2005 Vitaliy Margolen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "ntdll_test.h" -#include "winternl.h" -#include "stdio.h" -#include "winnt.h" -#include "stdlib.h" - -static HANDLE (WINAPI *pCreateWaitableTimerA)(SECURITY_ATTRIBUTES*, BOOL, LPCSTR); -static NTSTATUS (WINAPI *pRtlCreateUnicodeStringFromAsciiz)(PUNICODE_STRING, LPCSTR); -static VOID (WINAPI *pRtlInitUnicodeString)( PUNICODE_STRING, LPCWSTR ); -static VOID (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING); -static NTSTATUS (WINAPI *pNtCreateEvent) ( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES, BOOLEAN, BOOLEAN); -static NTSTATUS (WINAPI *pNtCreateMutant)( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES, BOOLEAN ); -static NTSTATUS (WINAPI *pNtOpenMutant) ( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES ); -static NTSTATUS (WINAPI *pNtCreateSemaphore)( PHANDLE, ACCESS_MASK,const POBJECT_ATTRIBUTES,LONG,LONG ); -static NTSTATUS (WINAPI *pNtCreateTimer) ( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES, TIMER_TYPE ); -static NTSTATUS (WINAPI *pNtCreateSection)( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES, const PLARGE_INTEGER, - ULONG, ULONG, HANDLE ); -static NTSTATUS (WINAPI *pNtOpenFile) ( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, ULONG, ULONG ); -static NTSTATUS (WINAPI *pNtClose) ( HANDLE ); -static NTSTATUS (WINAPI *pNtCreateNamedPipeFile)( PHANDLE, ULONG, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, - ULONG, ULONG, ULONG, ULONG, ULONG, ULONG, ULONG, ULONG, ULONG, PLARGE_INTEGER ); -static NTSTATUS (WINAPI *pNtOpenDirectoryObject)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); -static NTSTATUS (WINAPI *pNtCreateDirectoryObject)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); -static NTSTATUS (WINAPI *pNtOpenSymbolicLinkObject)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES); -static NTSTATUS (WINAPI *pNtCreateSymbolicLinkObject)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PUNICODE_STRING); - - -static void test_case_sensitive (void) -{ - static const WCHAR buffer1[] = {'\\','B','a','s','e','N','a','m','e','d','O','b','j','e','c','t','s','\\','t','e','s','t',0}; - static const WCHAR buffer2[] = {'\\','B','a','s','e','N','a','m','e','d','O','b','j','e','c','t','s','\\','T','e','s','t',0}; - static const WCHAR buffer3[] = {'\\','B','a','s','e','N','a','m','e','d','O','b','j','e','c','t','s','\\','T','E','s','t',0}; - static const WCHAR buffer4[] = {'\\','B','A','S','E','N','a','m','e','d','O','b','j','e','c','t','s','\\','t','e','s','t',0}; - NTSTATUS status; - OBJECT_ATTRIBUTES attr; - UNICODE_STRING str; - HANDLE Event, Mutant, h; - - pRtlInitUnicodeString(&str, buffer1); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - status = pNtCreateMutant(&Mutant, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_SUCCESS, "Failed to create Mutant(%08x)\n", status); - - status = pNtCreateEvent(&Event, GENERIC_ALL, &attr, FALSE, FALSE); - ok(status == STATUS_OBJECT_NAME_COLLISION, - "NtCreateEvent should have failed with STATUS_OBJECT_NAME_COLLISION got(%08x)\n", status); - - pRtlInitUnicodeString(&str, buffer2); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - status = pNtCreateEvent(&Event, GENERIC_ALL, &attr, FALSE, FALSE); - ok(status == STATUS_SUCCESS, "Failed to create Event(%08x)\n", status); - - pRtlInitUnicodeString(&str, buffer3); - InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL); - status = pNtOpenMutant(&h, GENERIC_ALL, &attr); - ok(status == STATUS_OBJECT_TYPE_MISMATCH, - "NtOpenMutant should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08x)\n", status); - - pNtClose(Mutant); - - pRtlInitUnicodeString(&str, buffer4); - InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL); - status = pNtCreateMutant(&Mutant, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_OBJECT_NAME_COLLISION, - "NtCreateMutant should have failed with STATUS_OBJECT_NAME_COLLISION got(%08x)\n", status); - - status = pNtCreateEvent(&h, GENERIC_ALL, &attr, FALSE, FALSE); - ok(status == STATUS_OBJECT_NAME_COLLISION, - "NtCreateEvent should have failed with STATUS_OBJECT_NAME_COLLISION got(%08x)\n", status); - - attr.Attributes = 0; - status = pNtCreateMutant(&Mutant, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_OBJECT_PATH_NOT_FOUND, - "NtCreateMutant should have failed with STATUS_OBJECT_PATH_NOT_FOUND got(%08x)\n", status); - - pNtClose(Event); -} - -static void test_namespace_pipe(void) -{ - static const WCHAR buffer1[] = {'\\','?','?','\\','P','I','P','E','\\','t','e','s','t','\\','p','i','p','e',0}; - static const WCHAR buffer2[] = {'\\','?','?','\\','P','I','P','E','\\','T','E','S','T','\\','P','I','P','E',0}; - static const WCHAR buffer3[] = {'\\','?','?','\\','p','i','p','e','\\','t','e','s','t','\\','p','i','p','e',0}; - static const WCHAR buffer4[] = {'\\','?','?','\\','p','i','p','e','\\','t','e','s','t',0}; - OBJECT_ATTRIBUTES attr; - UNICODE_STRING str; - IO_STATUS_BLOCK iosb; - NTSTATUS status; - LARGE_INTEGER timeout; - HANDLE pipe, h; - - timeout.QuadPart = -10000; - - pRtlInitUnicodeString(&str, buffer1); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - status = pNtCreateNamedPipeFile(&pipe, GENERIC_READ|GENERIC_WRITE, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, - FILE_CREATE, FILE_PIPE_FULL_DUPLEX, FALSE, FALSE, FALSE, 1, 256, 256, &timeout); - ok(status == STATUS_SUCCESS, "Failed to create NamedPipe(%08x)\n", status); - - status = pNtCreateNamedPipeFile(&pipe, GENERIC_READ|GENERIC_WRITE, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, - FILE_CREATE, FILE_PIPE_FULL_DUPLEX, FALSE, FALSE, FALSE, 1, 256, 256, &timeout); - ok(status == STATUS_INSTANCE_NOT_AVAILABLE, - "NtCreateNamedPipeFile should have failed with STATUS_INSTANCE_NOT_AVAILABLE got(%08x)\n", status); - - pRtlInitUnicodeString(&str, buffer2); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - status = pNtCreateNamedPipeFile(&pipe, GENERIC_READ|GENERIC_WRITE, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, - FILE_CREATE, FILE_PIPE_FULL_DUPLEX, FALSE, FALSE, FALSE, 1, 256, 256, &timeout); - ok(status == STATUS_INSTANCE_NOT_AVAILABLE, - "NtCreateNamedPipeFile should have failed with STATUS_INSTANCE_NOT_AVAILABLE got(%08x)\n", status); - - attr.Attributes = OBJ_CASE_INSENSITIVE; - status = pNtOpenFile(&h, GENERIC_READ, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN); - ok(status == STATUS_SUCCESS, "Failed to open NamedPipe(%08x)\n", status); - pNtClose(h); - - pRtlInitUnicodeString(&str, buffer3); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - status = pNtOpenFile(&h, GENERIC_READ, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN); - ok(status == STATUS_OBJECT_PATH_NOT_FOUND || status == STATUS_PIPE_NOT_AVAILABLE, - "NtOpenFile should have failed with STATUS_OBJECT_PATH_NOT_FOUND got(%08x)\n", status); - - pRtlInitUnicodeString(&str, buffer4); - InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL); - status = pNtOpenFile(&h, GENERIC_READ, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN); - ok(status == STATUS_OBJECT_NAME_NOT_FOUND, - "NtOpenFile should have failed with STATUS_OBJECT_NAME_NOT_FOUND got(%08x)\n", status); - - pNtClose(pipe); -} - -#define DIRECTORY_QUERY (0x0001) -#define SYMBOLIC_LINK_QUERY 0x0001 - -#define DIR_TEST_CREATE_FAILURE(h,e) \ - status = pNtCreateDirectoryObject(h, DIRECTORY_QUERY, &attr);\ - ok(status == e,"NtCreateDirectoryObject should have failed with %s got(%08x)\n", #e, status); -#define DIR_TEST_OPEN_FAILURE(h,e) \ - status = pNtOpenDirectoryObject(h, DIRECTORY_QUERY, &attr);\ - ok(status == e,"NtOpenDirectoryObject should have failed with %s got(%08x)\n", #e, status); -#define DIR_TEST_CREATE_OPEN_FAILURE(h,n,e) \ - pRtlCreateUnicodeStringFromAsciiz(&str, n);\ - DIR_TEST_CREATE_FAILURE(h,e) DIR_TEST_OPEN_FAILURE(h,e)\ - pRtlFreeUnicodeString(&str); - -#define DIR_TEST_CREATE_SUCCESS(h) \ - status = pNtCreateDirectoryObject(h, DIRECTORY_QUERY, &attr); \ - ok(status == STATUS_SUCCESS, "Failed to create Directory(%08x)\n", status); -#define DIR_TEST_OPEN_SUCCESS(h) \ - status = pNtOpenDirectoryObject(h, DIRECTORY_QUERY, &attr); \ - ok(status == STATUS_SUCCESS, "Failed to open Directory(%08x)\n", status); -#define DIR_TEST_CREATE_OPEN_SUCCESS(h,n) \ - pRtlCreateUnicodeStringFromAsciiz(&str, n);\ - DIR_TEST_CREATE_SUCCESS(&h) pNtClose(h); DIR_TEST_OPEN_SUCCESS(&h) pNtClose(h); \ - pRtlFreeUnicodeString(&str); - -static void test_name_collisions(void) -{ - NTSTATUS status; - UNICODE_STRING str; - OBJECT_ATTRIBUTES attr; - HANDLE dir, h, h1, h2; - DWORD winerr; - LARGE_INTEGER size; - - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - pRtlCreateUnicodeStringFromAsciiz(&str, "\\"); - DIR_TEST_CREATE_FAILURE(&h, STATUS_OBJECT_NAME_COLLISION) - InitializeObjectAttributes(&attr, &str, OBJ_OPENIF, 0, NULL); - - DIR_TEST_CREATE_FAILURE(&h, STATUS_OBJECT_NAME_EXISTS) - pNtClose(h); - status = pNtCreateMutant(&h, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_OBJECT_TYPE_MISMATCH, - "NtCreateMutant should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08x)\n", status); - pRtlFreeUnicodeString(&str); - - pRtlCreateUnicodeStringFromAsciiz(&str, "\\??\\PIPE\\om.c-mutant"); - status = pNtCreateMutant(&h, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_OBJECT_TYPE_MISMATCH || status == STATUS_OBJECT_PATH_NOT_FOUND, - "NtCreateMutant should have failed with STATUS_OBJECT_TYPE_MISMATCH got(%08x)\n", status); - pRtlFreeUnicodeString(&str); - - - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects"); - DIR_TEST_OPEN_SUCCESS(&dir) - pRtlCreateUnicodeStringFromAsciiz(&str, "om.c-test"); - InitializeObjectAttributes(&attr, &str, OBJ_OPENIF, dir, NULL); - - h = CreateMutexA(NULL, FALSE, "om.c-test"); - ok(h != 0, "CreateMutexA failed got ret=%p (%d)\n", h, GetLastError()); - status = pNtCreateMutant(&h1, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_OBJECT_NAME_EXISTS && h1 != NULL, - "NtCreateMutant should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08x)\n", status); - h2 = CreateMutexA(NULL, FALSE, "om.c-test"); - winerr = GetLastError(); - ok(h2 != 0 && winerr == ERROR_ALREADY_EXISTS, - "CreateMutexA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%d)\n", h2, winerr); - pNtClose(h); - pNtClose(h1); - pNtClose(h2); - - h = CreateEventA(NULL, FALSE, FALSE, "om.c-test"); - ok(h != 0, "CreateEventA failed got ret=%p (%d)\n", h, GetLastError()); - status = pNtCreateEvent(&h1, GENERIC_ALL, &attr, FALSE, FALSE); - ok(status == STATUS_OBJECT_NAME_EXISTS && h1 != NULL, - "NtCreateEvent should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08x)\n", status); - h2 = CreateEventA(NULL, FALSE, FALSE, "om.c-test"); - winerr = GetLastError(); - ok(h2 != 0 && winerr == ERROR_ALREADY_EXISTS, - "CreateEventA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%d)\n", h2, winerr); - pNtClose(h); - pNtClose(h1); - pNtClose(h2); - - h = CreateSemaphoreA(NULL, 1, 2, "om.c-test"); - ok(h != 0, "CreateSemaphoreA failed got ret=%p (%d)\n", h, GetLastError()); - status = pNtCreateSemaphore(&h1, GENERIC_ALL, &attr, 1, 2); - ok(status == STATUS_OBJECT_NAME_EXISTS && h1 != NULL, - "NtCreateSemaphore should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08x)\n", status); - h2 = CreateSemaphoreA(NULL, 1, 2, "om.c-test"); - winerr = GetLastError(); - ok(h2 != 0 && winerr == ERROR_ALREADY_EXISTS, - "CreateSemaphoreA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%d)\n", h2, winerr); - pNtClose(h); - pNtClose(h1); - pNtClose(h2); - - h = pCreateWaitableTimerA(NULL, TRUE, "om.c-test"); - ok(h != 0, "CreateWaitableTimerA failed got ret=%p (%d)\n", h, GetLastError()); - status = pNtCreateTimer(&h1, GENERIC_ALL, &attr, NotificationTimer); - ok(status == STATUS_OBJECT_NAME_EXISTS && h1 != NULL, - "NtCreateTimer should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08x)\n", status); - h2 = pCreateWaitableTimerA(NULL, TRUE, "om.c-test"); - winerr = GetLastError(); - ok(h2 != 0 && winerr == ERROR_ALREADY_EXISTS, - "CreateWaitableTimerA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%d)\n", h2, winerr); - pNtClose(h); - pNtClose(h1); - pNtClose(h2); - - h = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 256, "om.c-test"); - ok(h != 0, "CreateFileMappingA failed got ret=%p (%d)\n", h, GetLastError()); - size.u.LowPart = 256; - size.u.HighPart = 0; - status = pNtCreateSection(&h1, SECTION_MAP_WRITE, &attr, &size, PAGE_READWRITE, SEC_COMMIT, 0); - ok(status == STATUS_OBJECT_NAME_EXISTS && h1 != NULL, - "NtCreateSection should have succeeded with STATUS_OBJECT_NAME_EXISTS got(%08x)\n", status); - h2 = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 256, "om.c-test"); - winerr = GetLastError(); - ok(h2 != 0 && winerr == ERROR_ALREADY_EXISTS, - "CreateFileMappingA should have succeeded with ERROR_ALREADY_EXISTS got ret=%p (%d)\n", h2, winerr); - pNtClose(h); - pNtClose(h1); - pNtClose(h2); - - pRtlFreeUnicodeString(&str); - pNtClose(dir); -} - -static void test_directory(void) -{ - NTSTATUS status; - UNICODE_STRING str; - OBJECT_ATTRIBUTES attr; - HANDLE dir, dir1, h; - - /* No name and/or no attributes */ - status = pNtCreateDirectoryObject(NULL, DIRECTORY_QUERY, &attr); - ok(status == STATUS_ACCESS_VIOLATION, - "NtCreateDirectoryObject should have failed with STATUS_ACCESS_VIOLATION got(%08x)\n", status); - status = pNtOpenDirectoryObject(NULL, DIRECTORY_QUERY, &attr); - ok(status == STATUS_ACCESS_VIOLATION, - "NtOpenDirectoryObject should have failed with STATUS_ACCESS_VIOLATION got(%08x)\n", status); - - status = pNtCreateDirectoryObject(&h, DIRECTORY_QUERY, NULL); - ok(status == STATUS_SUCCESS, "Failed to create Directory without attributes(%08x)\n", status); - pNtClose(h); - status = pNtOpenDirectoryObject(&h, DIRECTORY_QUERY, NULL); - ok(status == STATUS_INVALID_PARAMETER, - "NtOpenDirectoryObject should have failed with STATUS_INVALID_PARAMETER got(%08x)\n", status); - - InitializeObjectAttributes(&attr, NULL, 0, 0, NULL); - DIR_TEST_CREATE_SUCCESS(&dir) - DIR_TEST_OPEN_FAILURE(&h, STATUS_OBJECT_PATH_SYNTAX_BAD) - - /* Bad name */ - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - - pRtlCreateUnicodeStringFromAsciiz(&str, ""); - DIR_TEST_CREATE_SUCCESS(&h) - pNtClose(h); - DIR_TEST_OPEN_FAILURE(&h, STATUS_OBJECT_PATH_SYNTAX_BAD) - pRtlFreeUnicodeString(&str); - pNtClose(dir); - - DIR_TEST_CREATE_OPEN_FAILURE(&h, "BaseNamedObjects", STATUS_OBJECT_PATH_SYNTAX_BAD) - DIR_TEST_CREATE_OPEN_FAILURE(&h, "\\BaseNamedObjects\\", STATUS_OBJECT_NAME_INVALID) - DIR_TEST_CREATE_OPEN_FAILURE(&h, "\\\\BaseNamedObjects", STATUS_OBJECT_NAME_INVALID) - DIR_TEST_CREATE_OPEN_FAILURE(&h, "\\BaseNamedObjects\\\\om.c-test", STATUS_OBJECT_NAME_INVALID) - DIR_TEST_CREATE_OPEN_FAILURE(&h, "\\BaseNamedObjects\\om.c-test\\", STATUS_OBJECT_PATH_NOT_FOUND) - - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\om.c-test"); - DIR_TEST_CREATE_SUCCESS(&h) - DIR_TEST_OPEN_SUCCESS(&dir1) - pRtlFreeUnicodeString(&str); - pNtClose(h); - pNtClose(dir1); - - - /* Use of root directory */ - - /* Can't use symlinks as a directory */ - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\Local"); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - status = pNtOpenSymbolicLinkObject(&dir, SYMBOLIC_LINK_QUERY, &attr); - ok(status == STATUS_SUCCESS, "Failed to open SymbolicLink(%08x)\n", status); - pRtlFreeUnicodeString(&str); - InitializeObjectAttributes(&attr, &str, 0, dir, NULL); - pRtlCreateUnicodeStringFromAsciiz(&str, "one more level"); - DIR_TEST_CREATE_FAILURE(&h, STATUS_OBJECT_TYPE_MISMATCH) - pRtlFreeUnicodeString(&str); - pNtClose(h); - pNtClose(dir); - - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects"); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - DIR_TEST_OPEN_SUCCESS(&dir) - pRtlFreeUnicodeString(&str); - - InitializeObjectAttributes(&attr, NULL, 0, dir, NULL); - DIR_TEST_OPEN_FAILURE(&h, STATUS_OBJECT_NAME_INVALID) - - InitializeObjectAttributes(&attr, &str, 0, dir, NULL); - DIR_TEST_CREATE_OPEN_SUCCESS(h, "") - DIR_TEST_CREATE_OPEN_FAILURE(&h, "\\", STATUS_OBJECT_PATH_SYNTAX_BAD) - DIR_TEST_CREATE_OPEN_FAILURE(&h, "\\om.c-test", STATUS_OBJECT_PATH_SYNTAX_BAD) - DIR_TEST_CREATE_OPEN_FAILURE(&h, "\\om.c-test\\", STATUS_OBJECT_PATH_SYNTAX_BAD) - DIR_TEST_CREATE_OPEN_FAILURE(&h, "om.c-test\\", STATUS_OBJECT_PATH_NOT_FOUND) - - pRtlCreateUnicodeStringFromAsciiz(&str, "om.c-test"); - DIR_TEST_CREATE_SUCCESS(&dir1) - DIR_TEST_OPEN_SUCCESS(&h) - pRtlFreeUnicodeString(&str); - - pNtClose(h); - pNtClose(dir1); - pNtClose(dir); - - /* Nested directories */ - pRtlCreateUnicodeStringFromAsciiz(&str, "\\"); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - DIR_TEST_OPEN_SUCCESS(&dir) - InitializeObjectAttributes(&attr, &str, 0, dir, NULL); - DIR_TEST_OPEN_FAILURE(&h, STATUS_OBJECT_PATH_SYNTAX_BAD) - pRtlFreeUnicodeString(&str); - pNtClose(dir); - - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\om.c-test"); - DIR_TEST_CREATE_SUCCESS(&dir) - pRtlFreeUnicodeString(&str); - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\om.c-test\\one more level"); - DIR_TEST_CREATE_SUCCESS(&h) - pRtlFreeUnicodeString(&str); - pNtClose(h); - InitializeObjectAttributes(&attr, &str, 0, dir, NULL); - pRtlCreateUnicodeStringFromAsciiz(&str, "one more level"); - DIR_TEST_CREATE_SUCCESS(&h) - pRtlFreeUnicodeString(&str); - pNtClose(h); - - pNtClose(dir); - - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\Global\\om.c-test"); - DIR_TEST_CREATE_SUCCESS(&dir) - pRtlFreeUnicodeString(&str); - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects\\Local\\om.c-test\\one more level"); - DIR_TEST_CREATE_SUCCESS(&h) - pRtlFreeUnicodeString(&str); - pNtClose(h); - InitializeObjectAttributes(&attr, &str, 0, dir, NULL); - pRtlCreateUnicodeStringFromAsciiz(&str, "one more level"); - DIR_TEST_CREATE_SUCCESS(&dir) - pRtlFreeUnicodeString(&str); - pNtClose(h); - - pNtClose(dir); - - - /* Create other objects using RootDirectory */ - - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects"); - DIR_TEST_OPEN_SUCCESS(&dir) - pRtlFreeUnicodeString(&str); - InitializeObjectAttributes(&attr, &str, 0, dir, NULL); - - /* Test invalid paths */ - pRtlCreateUnicodeStringFromAsciiz(&str, "\\om.c-mutant"); - status = pNtCreateMutant(&h, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_OBJECT_PATH_SYNTAX_BAD, - "NtCreateMutant should have failed with STATUS_OBJECT_PATH_SYNTAX_BAD got(%08x)\n", status); - pRtlFreeUnicodeString(&str); - pRtlCreateUnicodeStringFromAsciiz(&str, "\\om.c-mutant\\"); - status = pNtCreateMutant(&h, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_OBJECT_PATH_SYNTAX_BAD, - "NtCreateMutant should have failed with STATUS_OBJECT_PATH_SYNTAX_BAD got(%08x)\n", status); - pRtlFreeUnicodeString(&str); - - pRtlCreateUnicodeStringFromAsciiz(&str, "om.c\\-mutant"); - status = pNtCreateMutant(&h, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_OBJECT_PATH_NOT_FOUND, - "NtCreateMutant should have failed with STATUS_OBJECT_PATH_NOT_FOUND got(%08x)\n", status); - pRtlFreeUnicodeString(&str); - - pRtlCreateUnicodeStringFromAsciiz(&str, "om.c-mutant"); - status = pNtCreateMutant(&h, GENERIC_ALL, &attr, FALSE); - ok(status == STATUS_SUCCESS, "Failed to create Mutant(%08x)\n", status); - pRtlFreeUnicodeString(&str); - pNtClose(h); - - pNtClose(dir); -} - -#define SYMLNK_TEST_CREATE_FAILURE(h,e) \ - status = pNtCreateSymbolicLinkObject(h, SYMBOLIC_LINK_QUERY, &attr, &target);\ - ok(status == e,"NtCreateSymbolicLinkObject should have failed with %s got(%08x)\n", #e, status); -#define SYMLNK_TEST_OPEN_FAILURE(h,e) \ - status = pNtOpenSymbolicLinkObject(h, SYMBOLIC_LINK_QUERY, &attr);\ - ok(status == e,"NtOpenSymbolicLinkObject should have failed with %s got(%08x)\n", #e, status); -#define SYMLNK_TEST_CREATE_OPEN_FAILURE(h,n,t,e) \ - pRtlCreateUnicodeStringFromAsciiz(&str, n);\ - pRtlCreateUnicodeStringFromAsciiz(&target, t);\ - SYMLNK_TEST_CREATE_FAILURE(h,e)\ - SYMLNK_TEST_OPEN_FAILURE(h,e)\ - pRtlFreeUnicodeString(&target);\ - pRtlFreeUnicodeString(&str); - -#define SYMLNK_TEST_CREATE_SUCCESS(h) \ - status = pNtCreateSymbolicLinkObject(h, SYMBOLIC_LINK_QUERY, &attr, &target); \ - ok(status == STATUS_SUCCESS, "Failed to create SymbolicLink(%08x)\n", status); -#define SYMLNK_TEST_OPEN_SUCCESS(h) \ - status = pNtOpenSymbolicLinkObject(h, SYMBOLIC_LINK_QUERY, &attr); \ - ok(status == STATUS_SUCCESS, "Failed to open SymbolicLink(%08x)\n", status); - -static void test_symboliclink(void) -{ - NTSTATUS status; - UNICODE_STRING str, target; - OBJECT_ATTRIBUTES attr; - HANDLE dir, link, h; - IO_STATUS_BLOCK iosb; - - /* No name and/or no attributes */ - SYMLNK_TEST_CREATE_OPEN_FAILURE(NULL, "", "", STATUS_ACCESS_VIOLATION) - - status = pNtCreateSymbolicLinkObject(&h, SYMBOLIC_LINK_QUERY, NULL, NULL); - ok(status == STATUS_ACCESS_VIOLATION, - "NtCreateSymbolicLinkObject should have failed with STATUS_ACCESS_VIOLATION got(%08x)\n", status); - status = pNtOpenSymbolicLinkObject(&h, SYMBOLIC_LINK_QUERY, NULL); - ok(status == STATUS_INVALID_PARAMETER, - "NtOpenSymbolicLinkObject should have failed with STATUS_INVALID_PARAMETER got(%08x)\n", status); - - /* No attributes */ - pRtlCreateUnicodeStringFromAsciiz(&target, "\\DosDevices"); - status = pNtCreateSymbolicLinkObject(&h, SYMBOLIC_LINK_QUERY, NULL, &target); - ok(status == STATUS_SUCCESS, "NtCreateSymbolicLinkObject failed(%08x)\n", status); - pRtlFreeUnicodeString(&target); - pNtClose(h); - - InitializeObjectAttributes(&attr, NULL, 0, 0, NULL); - SYMLNK_TEST_CREATE_FAILURE(&link, STATUS_INVALID_PARAMETER) - SYMLNK_TEST_OPEN_FAILURE(&h, STATUS_OBJECT_PATH_SYNTAX_BAD) - - /* Bad name */ - pRtlCreateUnicodeStringFromAsciiz(&target, "anywhere"); - InitializeObjectAttributes(&attr, &str, 0, 0, NULL); - - pRtlCreateUnicodeStringFromAsciiz(&str, ""); - SYMLNK_TEST_CREATE_SUCCESS(&link) - SYMLNK_TEST_OPEN_FAILURE(&h, STATUS_OBJECT_PATH_SYNTAX_BAD) - pNtClose(link); - pRtlFreeUnicodeString(&str); - - pRtlCreateUnicodeStringFromAsciiz(&str, "\\"); - todo_wine {SYMLNK_TEST_CREATE_FAILURE(&h, STATUS_OBJECT_TYPE_MISMATCH)} - pRtlFreeUnicodeString(&str); - pRtlFreeUnicodeString(&target); - - SYMLNK_TEST_CREATE_OPEN_FAILURE(&h, "BaseNamedObjects", "->Somewhere", STATUS_OBJECT_PATH_SYNTAX_BAD) - SYMLNK_TEST_CREATE_OPEN_FAILURE(&h, "\\BaseNamedObjects\\", "->Somewhere", STATUS_OBJECT_NAME_INVALID) - SYMLNK_TEST_CREATE_OPEN_FAILURE(&h, "\\\\BaseNamedObjects", "->Somewhere", STATUS_OBJECT_NAME_INVALID) - SYMLNK_TEST_CREATE_OPEN_FAILURE(&h, "\\BaseNamedObjects\\\\om.c-test", "->Somewhere", STATUS_OBJECT_NAME_INVALID) - SYMLNK_TEST_CREATE_OPEN_FAILURE(&h, "\\BaseNamedObjects\\om.c-test\\", "->Somewhere", STATUS_OBJECT_NAME_INVALID) - - - /* Compaund test */ - pRtlCreateUnicodeStringFromAsciiz(&str, "\\BaseNamedObjects"); - DIR_TEST_OPEN_SUCCESS(&dir) - pRtlFreeUnicodeString(&str); - - InitializeObjectAttributes(&attr, &str, 0, dir, NULL); - pRtlCreateUnicodeStringFromAsciiz(&str, "Local\\test-link"); - pRtlCreateUnicodeStringFromAsciiz(&target, "\\DosDevices"); - SYMLNK_TEST_CREATE_SUCCESS(&link) - pRtlFreeUnicodeString(&str); - pRtlFreeUnicodeString(&target); - - pRtlCreateUnicodeStringFromAsciiz(&str, "Local\\test-link\\PIPE"); - status = pNtOpenFile(&h, GENERIC_READ, &attr, &iosb, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN); - todo_wine ok(status == STATUS_SUCCESS, "Failed to open NamedPipe(%08x)\n", status); - pRtlFreeUnicodeString(&str); - - pNtClose(h); - pNtClose(link); - pNtClose(dir); -} - -START_TEST(om) -{ - HMODULE hntdll = GetModuleHandleA("ntdll.dll"); - HMODULE hkernel32 = GetModuleHandleA("kernel32.dll"); - - if (!hntdll) - { - skip("not running on NT, skipping test\n"); - return; - } - - pCreateWaitableTimerA = (void *)GetProcAddress(hkernel32, "CreateWaitableTimerA"); - - pRtlCreateUnicodeStringFromAsciiz = (void *)GetProcAddress(hntdll, "RtlCreateUnicodeStringFromAsciiz"); - pRtlFreeUnicodeString = (void *)GetProcAddress(hntdll, "RtlFreeUnicodeString"); - pNtCreateEvent = (void *)GetProcAddress(hntdll, "NtCreateEvent"); - pNtCreateMutant = (void *)GetProcAddress(hntdll, "NtCreateMutant"); - pNtOpenMutant = (void *)GetProcAddress(hntdll, "NtOpenMutant"); - pNtOpenFile = (void *)GetProcAddress(hntdll, "NtOpenFile"); - pNtClose = (void *)GetProcAddress(hntdll, "NtClose"); - pRtlInitUnicodeString = (void *)GetProcAddress(hntdll, "RtlInitUnicodeString"); - pNtCreateNamedPipeFile = (void *)GetProcAddress(hntdll, "NtCreateNamedPipeFile"); - pNtOpenDirectoryObject = (void *)GetProcAddress(hntdll, "NtOpenDirectoryObject"); - pNtCreateDirectoryObject= (void *)GetProcAddress(hntdll, "NtCreateDirectoryObject"); - pNtOpenSymbolicLinkObject = (void *)GetProcAddress(hntdll, "NtOpenSymbolicLinkObject"); - pNtCreateSymbolicLinkObject = (void *)GetProcAddress(hntdll, "NtCreateSymbolicLinkObject"); - pNtCreateSemaphore = (void *)GetProcAddress(hntdll, "NtCreateSemaphore"); - pNtCreateTimer = (void *)GetProcAddress(hntdll, "NtCreateTimer"); - pNtCreateSection = (void *)GetProcAddress(hntdll, "NtCreateSection"); - - test_case_sensitive(); - test_namespace_pipe(); - test_name_collisions(); - test_directory(); - test_symboliclink(); -} diff --git a/rostests/winetests/ntdll/path.c b/rostests/winetests/ntdll/path.c deleted file mode 100755 index 99d94829bcb..00000000000 --- a/rostests/winetests/ntdll/path.c +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Unit test suite for ntdll path 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 "ntdll_test.h" - -static NTSTATUS (WINAPI *pRtlMultiByteToUnicodeN)( LPWSTR dst, DWORD dstlen, LPDWORD reslen, - LPCSTR src, DWORD srclen ); -static NTSTATUS (WINAPI *pRtlUnicodeToMultiByteN)(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD); -static UINT (WINAPI *pRtlDetermineDosPathNameType_U)( PCWSTR path ); -static ULONG (WINAPI *pRtlIsDosDeviceName_U)( PCWSTR dos_name ); -static NTSTATUS (WINAPI *pRtlOemStringToUnicodeString)(UNICODE_STRING *, const STRING *, BOOLEAN ); -static BOOLEAN (WINAPI *pRtlIsNameLegalDOS8Dot3)(const UNICODE_STRING*,POEM_STRING,PBOOLEAN); -static DWORD (WINAPI *pRtlGetFullPathName_U)(const WCHAR*,ULONG,WCHAR*,WCHAR**); - - -static void test_RtlDetermineDosPathNameType(void) -{ - struct test - { - const char *path; - UINT ret; - }; - - static const struct test tests[] = - { - { "\\\\foo", 1 }, - { "//foo", 1 }, - { "\\/foo", 1 }, - { "/\\foo", 1 }, - { "\\\\", 1 }, - { "//", 1 }, - { "c:\\foo", 2 }, - { "c:/foo", 2 }, - { "c://foo", 2 }, - { "c:\\", 2 }, - { "c:/", 2 }, - { "c:foo", 3 }, - { "c:f\\oo", 3 }, - { "c:foo/bar", 3 }, - { "\\foo", 4 }, - { "/foo", 4 }, - { "\\", 4 }, - { "/", 4 }, - { "foo", 5 }, - { "", 5 }, - { "\0:foo", 5 }, - { "\\\\.\\foo", 6 }, - { "//./foo", 6 }, - { "/\\./foo", 6 }, - { "\\\\.foo", 1 }, - { "//.foo", 1 }, - { "\\\\.", 7 }, - { "//.", 7 }, - { NULL, 0 } - }; - - const struct test *test; - WCHAR buffer[MAX_PATH]; - UINT ret; - - for (test = tests; test->path; test++) - { - pRtlMultiByteToUnicodeN( buffer, sizeof(buffer), NULL, test->path, strlen(test->path)+1 ); - ret = pRtlDetermineDosPathNameType_U( buffer ); - ok( ret == test->ret, "Wrong result %d/%d for %s\n", ret, test->ret, test->path ); - } -} - - -static void test_RtlIsDosDeviceName(void) -{ - struct test - { - const char *path; - WORD pos; - WORD len; - }; - - static const struct test tests[] = - { - { "\\\\.\\CON", 8, 6 }, - { "\\\\.\\con", 8, 6 }, - { "\\\\.\\CON2", 0, 0 }, - { "", 0, 0 }, - { "\\\\foo\\nul", 0, 0 }, - { "c:\\nul:", 6, 6 }, - { "c:\\nul::", 6, 6 }, - { "c:\\nul::::::", 6, 6 }, - { "c:prn ", 4, 6 }, - { "c:prn.......", 4, 6 }, - { "c:prn... ...", 4, 6 }, - { "c:NUL .... ", 4, 6 }, - { "c: . . .", 0, 0 }, - { "c:", 0, 0 }, - { " . . . :", 0, 0 }, - { ":", 0, 0 }, - { "c:nul. . . :", 4, 6 }, - { "c:nul . . :", 4, 6 }, - { "c:nul0", 0, 0 }, - { "c:PRN:.txt", 4, 6 }, - { "c:aux:.txt...", 4, 6 }, - { "c:prn:.txt:", 4, 6 }, - { "con:", 0, 6 }, - { "lpt1:", 0, 8 }, - { "c:com5:", 4, 8 }, - { "CoM4:", 0, 8 }, - { "lpt9:", 0, 8 }, - { "c:\\lpt0.txt", 0, 0 }, - { "c:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\nul.txt", 1000, 6 }, - { NULL, 0 } - }; - - const struct test *test; - WCHAR buffer[2000]; - ULONG ret; - - for (test = tests; test->path; test++) - { - pRtlMultiByteToUnicodeN( buffer, sizeof(buffer), NULL, test->path, strlen(test->path)+1 ); - ret = pRtlIsDosDeviceName_U( buffer ); - ok( ret == MAKELONG( test->len, test->pos ), - "Wrong result (%d,%d)/(%d,%d) for %s\n", - HIWORD(ret), LOWORD(ret), test->pos, test->len, test->path ); - } - - pRtlMultiByteToUnicodeN( buffer, sizeof(buffer), NULL, "c:prn:aaa", strlen("c:prn:aaa")+1 ); - ret = pRtlIsDosDeviceName_U( buffer ); - ok( ret == MAKELONG( 6, 4 ) || /* NT */ - ret == MAKELONG( 0, 0), /* win9x */ - "Wrong result (%d,%d)/(4,6) or (0,0) for c:prn:aaa\n", HIWORD(ret), LOWORD(ret) ); - - pRtlMultiByteToUnicodeN( buffer, sizeof(buffer), NULL, "c:nul:aaa", strlen("c:nul:aaa")+1 ); - ret = pRtlIsDosDeviceName_U( buffer ); - ok( ret == MAKELONG( 6, 4 ) || /* NT */ - ret == MAKELONG( 0, 0), /* win9x */ - "Wrong result (%d,%d)/(4,6) or (0,0) for c:nul:aaa\n", HIWORD(ret), LOWORD(ret) ); -} - -static void test_RtlIsNameLegalDOS8Dot3(void) -{ - struct test - { - const char *path; - BOOLEAN result; - BOOLEAN spaces; - }; - - static const struct test tests[] = - { - { "12345678", TRUE, FALSE }, - { "123 5678", TRUE, TRUE }, - { "12345678.", FALSE, 2 /*not set*/ }, - { "1234 678.", FALSE, 2 /*not set*/ }, - { "12345678.a", TRUE, FALSE }, - { "12345678.a ", FALSE, 2 /*not set*/ }, - { "12345678.a c", TRUE, TRUE }, - { " 2345678.a ", FALSE, 2 /*not set*/ }, - { "1 345678.abc", TRUE, TRUE }, - { "1 8.a c", TRUE, TRUE }, - { "1 3 5 7 .abc", FALSE, 2 /*not set*/ }, - { "12345678. c", TRUE, TRUE }, - { "123456789.a", FALSE, 2 /*not set*/ }, - { "12345.abcd", FALSE, 2 /*not set*/ }, - { "12345.ab d", FALSE, 2 /*not set*/ }, - { ".abc", FALSE, 2 /*not set*/ }, - { "12.abc.d", FALSE, 2 /*not set*/ }, - { ".", TRUE, FALSE }, - { "..", TRUE, FALSE }, - { "...", FALSE, 2 /*not set*/ }, - { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", FALSE, 2 /*not set*/ }, - { NULL, 0 } - }; - - const struct test *test; - UNICODE_STRING ustr; - OEM_STRING oem, oem_ret; - WCHAR buffer[200]; - char buff2[12]; - BOOLEAN ret, spaces; - - ustr.MaximumLength = sizeof(buffer); - ustr.Buffer = buffer; - for (test = tests; test->path; test++) - { - char path[100]; - strcpy(path, test->path); - oem.Buffer = path; - oem.Length = strlen(test->path); - oem.MaximumLength = oem.Length + 1; - pRtlOemStringToUnicodeString( &ustr, &oem, FALSE ); - spaces = 2; - oem_ret.Length = oem_ret.MaximumLength = sizeof(buff2); - oem_ret.Buffer = buff2; - ret = pRtlIsNameLegalDOS8Dot3( &ustr, &oem_ret, &spaces ); - ok( ret == test->result, "Wrong result %d/%d for '%s'\n", ret, test->result, test->path ); - ok( spaces == test->spaces, "Wrong spaces value %d/%d for '%s'\n", spaces, test->spaces, test->path ); - if (strlen(test->path) <= 12) - { - char str[13]; - int i; - strcpy( str, test->path ); - for (i = 0; str[i]; i++) str[i] = toupper(str[i]); - ok( oem_ret.Length == strlen(test->path), "Wrong length %d/%d for '%s'\n", - oem_ret.Length, lstrlenA(test->path), test->path ); - ok( !memcmp( oem_ret.Buffer, str, oem_ret.Length ), - "Wrong string '%.*s'/'%s'\n", oem_ret.Length, oem_ret.Buffer, str ); - } - } -} -static void test_RtlGetFullPathName_U(void) -{ - struct test - { - const char *path; - const char *rname; - const char *rfile; - }; - - static const struct test tests[] = - { - { "c:/test", "c:\\test", "test"}, - { "c:/test ", "c:\\test", "test"}, - { "c:/test.", "c:\\test", "test"}, - { "c:/test .... .. ", "c:\\test", "test"}, - { "c:/test/ .... .. ", "c:\\test\\", NULL}, - { "c:/test/..", "c:\\", NULL}, - { "c:/test/.. ", "c:\\test\\", NULL}, - { "c:/TEST", "c:\\test", "test"}, - { "c:/test/file", "c:\\test\\file", "file"}, - { "c:/test./file", "c:\\test\\file", "file"}, - { "c:/test../file", "c:\\test.\\file", "file"}, - { "c:/test.. /file", "c:\\test.. \\file","file"}, - { "c:/test/././file", "c:\\test\\file", "file"}, - { "c:/test\\.\\.\\file", "c:\\test\\file", "file"}, - { "c:/test/\\.\\.\\file", "c:\\test\\file", "file"}, - { "c:/test\\\\.\\.\\file", "c:\\test\\file", "file"}, - { "c:/test\\test1\\..\\.\\file", "c:\\test\\file", "file"}, - { "c:///test\\.\\.\\file//", "c:\\test\\file\\", NULL}, - { "c:///test\\..\\file\\..\\//", "c:\\", NULL}, - { NULL, NULL, NULL} - }; - - const struct test *test; - WCHAR pathbufW[2*MAX_PATH], rbufferW[MAX_PATH]; - CHAR rbufferA[MAX_PATH], rfileA[MAX_PATH]; - ULONG ret; - WCHAR *file_part; - DWORD reslen; - UINT len; - - for (test = tests; test->path; test++) - { - len= strlen(test->rname) * sizeof(WCHAR); - pRtlMultiByteToUnicodeN(pathbufW , sizeof(pathbufW), NULL, test->path, strlen(test->path)+1 ); - ret = pRtlGetFullPathName_U( pathbufW,MAX_PATH, rbufferW, &file_part); - ok( ret == len, "Wrong result %d/%d for \"%s\"\n", ret, len, test->path ); - ok(pRtlUnicodeToMultiByteN(rbufferA,MAX_PATH,&reslen,rbufferW,(lstrlenW(rbufferW) + 1) * sizeof(WCHAR)) == STATUS_SUCCESS, - "RtlUnicodeToMultiByteN failed\n"); - ok(lstrcmpiA(rbufferA,test->rname) == 0, "Got \"%s\" expected \"%s\"\n",rbufferA,test->rname); - if (file_part) - { - ok(pRtlUnicodeToMultiByteN(rfileA,MAX_PATH,&reslen,file_part,(lstrlenW(file_part) + 1) * sizeof(WCHAR)) == STATUS_SUCCESS, - "RtlUnicodeToMultiByteN failed\n"); - ok(test->rfile && !lstrcmpiA(rfileA,test->rfile), "Got \"%s\" expected \"%s\"\n",rfileA,test->rfile); - } - else - { - ok( !test->rfile, "Got NULL expected \"%s\"\n", test->rfile ); - } - } - -} - -START_TEST(path) -{ - HMODULE mod = GetModuleHandleA("ntdll.dll"); - pRtlMultiByteToUnicodeN = (void *)GetProcAddress(mod,"RtlMultiByteToUnicodeN"); - pRtlUnicodeToMultiByteN = (void *)GetProcAddress(mod,"RtlUnicodeToMultiByteN"); - pRtlDetermineDosPathNameType_U = (void *)GetProcAddress(mod,"RtlDetermineDosPathNameType_U"); - pRtlIsDosDeviceName_U = (void *)GetProcAddress(mod,"RtlIsDosDeviceName_U"); - pRtlOemStringToUnicodeString = (void *)GetProcAddress(mod,"RtlOemStringToUnicodeString"); - pRtlIsNameLegalDOS8Dot3 = (void *)GetProcAddress(mod,"RtlIsNameLegalDOS8Dot3"); - pRtlGetFullPathName_U = (void *)GetProcAddress(mod,"RtlGetFullPathName_U"); - if (pRtlDetermineDosPathNameType_U) - test_RtlDetermineDosPathNameType(); - if (pRtlIsDosDeviceName_U) - test_RtlIsDosDeviceName(); - if (pRtlIsNameLegalDOS8Dot3) - test_RtlIsNameLegalDOS8Dot3(); - if (pRtlGetFullPathName_U && pRtlMultiByteToUnicodeN) - test_RtlGetFullPathName_U(); -} diff --git a/rostests/winetests/ntdll/port.c b/rostests/winetests/ntdll/port.c deleted file mode 100644 index 971591737a7..00000000000 --- a/rostests/winetests/ntdll/port.c +++ /dev/null @@ -1,312 +0,0 @@ -/* Unit test suite for Ntdll Port API functions - * - * 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 - */ - -#include -#include - -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "winreg.h" -#include "winnls.h" -#include "wine/test.h" -#include "winternl.h" - -#ifndef __WINE_WINTERNL_H - -typedef struct _CLIENT_ID -{ - HANDLE UniqueProcess; - HANDLE UniqueThread; -} CLIENT_ID, *PCLIENT_ID; - -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 MessageId; - ULONG SectionSize; - UCHAR Data[ANYSIZE_ARRAY]; -} LPC_MESSAGE, *PLPC_MESSAGE; - -#endif - -/* Types of LPC messages */ -#define UNUSED_MSG_TYPE 0 -#define LPC_REQUEST 1 -#define LPC_REPLY 2 -#define LPC_DATAGRAM 3 -#define LPC_LOST_REPLY 4 -#define LPC_PORT_CLOSED 5 -#define LPC_CLIENT_DIED 6 -#define LPC_EXCEPTION 7 -#define LPC_DEBUG_EVENT 8 -#define LPC_ERROR_EVENT 9 -#define LPC_CONNECTION_REQUEST 10 - -static const WCHAR PORTNAME[] = {'\\','M','y','P','o','r','t',0}; - -#define REQUEST1 "Request1" -#define REQUEST2 "Request2" -#define REPLY "Reply" - -#define MAX_MESSAGE_LEN 30 - -UNICODE_STRING port; -static char selfname[MAX_PATH]; -static int myARGC; -static char** myARGV; - -/* Function pointers for ntdll calls */ -static HMODULE hntdll = 0; -static NTSTATUS (WINAPI *pNtCompleteConnectPort)(HANDLE); -static NTSTATUS (WINAPI *pNtAcceptConnectPort)(PHANDLE,ULONG,PLPC_MESSAGE,ULONG, - ULONG,PLPC_SECTION_READ); -static NTSTATUS (WINAPI *pNtReplyPort)(HANDLE,PLPC_MESSAGE); -static NTSTATUS (WINAPI *pNtReplyWaitReceivePort)(PHANDLE,PULONG,PLPC_MESSAGE, - PLPC_MESSAGE); -static NTSTATUS (WINAPI *pNtCreatePort)(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,ULONG); -static NTSTATUS (WINAPI *pNtRequestWaitReplyPort)(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE); -static NTSTATUS (WINAPI *pNtRequestPort)(HANDLE,PLPC_MESSAGE); -static NTSTATUS (WINAPI *pNtRegisterThreadTerminatePort)(HANDLE); -static NTSTATUS (WINAPI *pNtConnectPort)(PHANDLE,PUNICODE_STRING, - PSECURITY_QUALITY_OF_SERVICE, - PLPC_SECTION_WRITE,PLPC_SECTION_READ, - PVOID,PVOID,PULONG); -static NTSTATUS (WINAPI *pRtlInitUnicodeString)(PUNICODE_STRING,LPCWSTR); -static NTSTATUS (WINAPI *pNtWaitForSingleObject)(HANDLE,BOOLEAN,PLARGE_INTEGER); - -static BOOL init_function_ptrs(void) -{ - hntdll = LoadLibraryA("ntdll.dll"); - - if (hntdll) - { - pNtCompleteConnectPort = (void *)GetProcAddress(hntdll, "NtCompleteConnectPort"); - pNtAcceptConnectPort = (void *)GetProcAddress(hntdll, "NtAcceptConnectPort"); - pNtReplyPort = (void *)GetProcAddress(hntdll, "NtReplyPort"); - pNtReplyWaitReceivePort = (void *)GetProcAddress(hntdll, "NtReplyWaitReceivePort"); - pNtCreatePort = (void *)GetProcAddress(hntdll, "NtCreatePort"); - pNtRequestWaitReplyPort = (void *)GetProcAddress(hntdll, "NtRequestWaitReplyPort"); - pNtRequestPort = (void *)GetProcAddress(hntdll, "NtRequestPort"); - pNtRegisterThreadTerminatePort = (void *)GetProcAddress(hntdll, "NtRegisterThreadTerminatePort"); - pNtConnectPort = (void *)GetProcAddress(hntdll, "NtConnectPort"); - pRtlInitUnicodeString = (void *)GetProcAddress(hntdll, "RtlInitUnicodeString"); - pNtWaitForSingleObject = (void *)GetProcAddress(hntdll, "NtWaitForSingleObject"); - } - - if (!pNtCompleteConnectPort || !pNtAcceptConnectPort || - !pNtReplyWaitReceivePort || !pNtCreatePort || !pNtRequestWaitReplyPort || - !pNtRequestPort || !pNtRegisterThreadTerminatePort || - !pNtConnectPort || !pRtlInitUnicodeString) - { - return FALSE; - } - - return TRUE; -} - -static void ProcessConnectionRequest(PLPC_MESSAGE LpcMessage, PHANDLE pAcceptPortHandle) -{ - NTSTATUS status; - - ok(LpcMessage->MessageType == LPC_CONNECTION_REQUEST, - "Expected LPC_CONNECTION_REQUEST, got %d\n", LpcMessage->MessageType); - ok(!*LpcMessage->Data, "Expected empty string!\n"); - - status = pNtAcceptConnectPort(pAcceptPortHandle, 0, LpcMessage, 1, 0, NULL); - ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status); - - status = pNtCompleteConnectPort(*pAcceptPortHandle); - ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status); -} - -static void ProcessLpcRequest(HANDLE PortHandle, PLPC_MESSAGE LpcMessage) -{ - NTSTATUS status; - - ok(LpcMessage->MessageType == LPC_REQUEST, - "Expected LPC_REQUEST, got %d\n", LpcMessage->MessageType); - ok(!lstrcmp((LPSTR)LpcMessage->Data, REQUEST2), - "Expected %s, got %s\n", REQUEST2, LpcMessage->Data); - - lstrcpy((LPSTR)LpcMessage->Data, REPLY); - - status = pNtReplyPort(PortHandle, LpcMessage); - ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status); - ok(LpcMessage->MessageType == LPC_REQUEST, - "Expected LPC_REQUEST, got %d\n", LpcMessage->MessageType); - ok(!lstrcmp((LPSTR)LpcMessage->Data, REPLY), - "Expected %s, got %s\n", REPLY, LpcMessage->Data); -} - -static DWORD WINAPI test_ports_client(LPVOID arg) -{ - SECURITY_QUALITY_OF_SERVICE sqos; - LPC_MESSAGE *LpcMessage, *out; - HANDLE PortHandle; - ULONG len, size; - NTSTATUS status; - - sqos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE); - sqos.ImpersonationLevel = SecurityImpersonation; - sqos.ContextTrackingMode = SECURITY_STATIC_TRACKING; - sqos.EffectiveOnly = TRUE; - - status = pNtConnectPort(&PortHandle, &port, &sqos, 0, 0, &len, NULL, NULL); - todo_wine ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status); - if (status != STATUS_SUCCESS) return 1; - - status = pNtRegisterThreadTerminatePort(PortHandle); - ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status); - - size = FIELD_OFFSET(LPC_MESSAGE, Data) + MAX_MESSAGE_LEN; - LpcMessage = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); - out = HeapAlloc(GetProcessHeap(), 0, size); - - LpcMessage->DataSize = lstrlen(REQUEST1) + 1; - LpcMessage->MessageSize = FIELD_OFFSET(LPC_MESSAGE, Data) + LpcMessage->DataSize; - lstrcpy((LPSTR)LpcMessage->Data, REQUEST1); - - status = pNtRequestPort(PortHandle, LpcMessage); - ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status); - ok(LpcMessage->MessageType == 0, "Expected 0, got %d\n", LpcMessage->MessageType); - ok(!lstrcmp((LPSTR)LpcMessage->Data, REQUEST1), - "Expected %s, got %s\n", REQUEST1, LpcMessage->Data); - - /* Fill in the message */ - memset(LpcMessage, 0, size); - LpcMessage->DataSize = lstrlen(REQUEST2) + 1; - LpcMessage->MessageSize = FIELD_OFFSET(LPC_MESSAGE, Data) + LpcMessage->DataSize; - lstrcpy((LPSTR)LpcMessage->Data, REQUEST2); - - /* Send the message and wait for the reply */ - status = pNtRequestWaitReplyPort(PortHandle, LpcMessage, out); - ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status); - ok(!lstrcmp((LPSTR)out->Data, REPLY), "Expected %s, got %s\n", REPLY, out->Data); - ok(out->MessageType == LPC_REPLY, "Expected LPC_REPLY, got %d\n", out->MessageType); - - return 0; -} - -static void test_ports_server(void) -{ - OBJECT_ATTRIBUTES obj; - HANDLE PortHandle; - HANDLE AcceptPortHandle; - PLPC_MESSAGE LpcMessage; - ULONG size; - NTSTATUS status; - BOOL done = FALSE; - - pRtlInitUnicodeString(&port, PORTNAME); - - memset(&obj, 0, sizeof(OBJECT_ATTRIBUTES)); - obj.Length = sizeof(OBJECT_ATTRIBUTES); - obj.ObjectName = &port; - - status = pNtCreatePort(&PortHandle, &obj, 100, 100, 0); - todo_wine - { - ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status); - } - if (status != STATUS_SUCCESS) return; - - size = FIELD_OFFSET(LPC_MESSAGE, Data) + MAX_MESSAGE_LEN; - LpcMessage = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); - - while (TRUE) - { - status = pNtReplyWaitReceivePort(PortHandle, NULL, NULL, LpcMessage); - todo_wine - { - ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d(%x)\n", status, status); - } - /* STATUS_INVALID_HANDLE: win2k without admin rights will perform an - * endless loop here - */ - if ((status == STATUS_NOT_IMPLEMENTED) || - (status == STATUS_INVALID_HANDLE)) return; - - switch (LpcMessage->MessageType) - { - case LPC_CONNECTION_REQUEST: - ProcessConnectionRequest(LpcMessage, &AcceptPortHandle); - break; - - case LPC_REQUEST: - ProcessLpcRequest(PortHandle, LpcMessage); - done = TRUE; - break; - - case LPC_DATAGRAM: - ok(!lstrcmp((LPSTR)LpcMessage->Data, REQUEST1), - "Expected %s, got %s\n", REQUEST1, LpcMessage->Data); - break; - - case LPC_CLIENT_DIED: - ok(done, "Expected LPC request to be completed!\n"); - return; - - default: - ok(FALSE, "Unexpected message: %d\n", LpcMessage->MessageType); - break; - } - } -} - -START_TEST(port) -{ - HANDLE thread; - DWORD id; - - if (!init_function_ptrs()) - return; - - myARGC = winetest_get_mainargs(&myARGV); - strcpy(selfname, myARGV[0]); - - thread = CreateThread(NULL, 0, test_ports_client, NULL, 0, &id); - ok(thread != NULL, "Expected non-NULL thread handle!\n"); - - test_ports_server(); - CloseHandle(thread); -} diff --git a/rostests/winetests/ntdll/reg.c b/rostests/winetests/ntdll/reg.c deleted file mode 100755 index 3efdfabaf45..00000000000 --- a/rostests/winetests/ntdll/reg.c +++ /dev/null @@ -1,602 +0,0 @@ -/* Unit test suite for Rtl* Registry API functions - * - * Copyright 2003 Thomas Mertes - * Copyright 2005 Brad DeMorrow - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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: I don't test every RelativeTo value because it would be redundant, all calls go through - * helper function RTL_GetKeyHandle().--Brad DeMorrow - * - */ - -#include "ntdll_test.h" -#include "winternl.h" -#include "stdio.h" -#include "winnt.h" -#include "winnls.h" -#include "stdlib.h" - -#ifndef __WINE_WINTERNL_H - -/* RtlQueryRegistryValues 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_VALUE_BASIC_INFORMATION { - ULONG TitleIndex; - ULONG Type; - ULONG NameLength; - WCHAR Name[1]; -} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; - -typedef struct _KEY_VALUE_PARTIAL_INFORMATION { - ULONG TitleIndex; - ULONG Type; - ULONG DataLength; - UCHAR Data[1]; -} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_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 enum _KEY_VALUE_INFORMATION_CLASS { - KeyValueBasicInformation, - KeyValueFullInformation, - KeyValuePartialInformation, - KeyValueFullInformationAlign64, - KeyValuePartialInformationAlign64 -} KEY_VALUE_INFORMATION_CLASS; - -#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) - -#endif - -static NTSTATUS (WINAPI * pRtlCreateUnicodeStringFromAsciiz)(PUNICODE_STRING, LPCSTR); -static NTSTATUS (WINAPI * pRtlFreeUnicodeString)(PUNICODE_STRING); -static NTSTATUS (WINAPI * pNtDeleteValueKey)(IN HANDLE, IN PUNICODE_STRING); -static NTSTATUS (WINAPI * pRtlQueryRegistryValues)(IN ULONG, IN PCWSTR,IN PRTL_QUERY_REGISTRY_TABLE, IN PVOID,IN PVOID); -static NTSTATUS (WINAPI * pRtlCheckRegistryKey)(IN ULONG,IN PWSTR); -static NTSTATUS (WINAPI * pRtlOpenCurrentUser)(IN ACCESS_MASK, OUT PHKEY); -static NTSTATUS (WINAPI * pNtOpenKey)(PHANDLE, IN ACCESS_MASK, IN POBJECT_ATTRIBUTES); -static NTSTATUS (WINAPI * pNtClose)(IN HANDLE); -static NTSTATUS (WINAPI * pNtDeleteValueKey)(IN HANDLE, IN PUNICODE_STRING); -static NTSTATUS (WINAPI * pNtFlushKey)(HKEY); -static NTSTATUS (WINAPI * pNtDeleteKey)(HKEY); -static NTSTATUS (WINAPI * pNtCreateKey)( PHKEY retkey, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr, - ULONG TitleIndex, const UNICODE_STRING *class, ULONG options, - PULONG dispos ); -static NTSTATUS (WINAPI * pNtQueryValueKey)(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *); -static NTSTATUS (WINAPI * pNtSetValueKey)( PHKEY, const PUNICODE_STRING, ULONG, - ULONG, const PVOID, ULONG ); -static NTSTATUS (WINAPI * pRtlFormatCurrentUserKeyPath)(PUNICODE_STRING); -static NTSTATUS (WINAPI * pRtlCreateUnicodeString)( PUNICODE_STRING, LPCWSTR); -static NTSTATUS (WINAPI * pRtlReAllocateHeap)(IN PVOID, IN ULONG, IN PVOID, IN ULONG); -static NTSTATUS (WINAPI * pRtlAppendUnicodeToString)(PUNICODE_STRING, PCWSTR); -static NTSTATUS (WINAPI * pRtlUnicodeStringToAnsiString)(PSTRING, PUNICODE_STRING, BOOL); -static NTSTATUS (WINAPI * pRtlFreeHeap)(PVOID, ULONG, PVOID); -static NTSTATUS (WINAPI * pRtlAllocateHeap)(PVOID,ULONG,ULONG); -static NTSTATUS (WINAPI * pRtlZeroMemory)(PVOID, ULONG); -static NTSTATUS (WINAPI * pRtlpNtQueryValueKey)(HANDLE,ULONG*,PBYTE,DWORD*); - -static HMODULE hntdll = 0; -static int CurrentTest = 0; -static UNICODE_STRING winetestpath; - -#define NTDLL_GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hntdll, #func); \ - if(!p ## func) { \ - trace("GetProcAddress(%s) failed\n", #func); \ - FreeLibrary(hntdll); \ - return FALSE; \ - } - -static BOOL InitFunctionPtrs(void) -{ - hntdll = LoadLibraryA("ntdll.dll"); - if(!hntdll) { - trace("Could not load ntdll.dll\n"); - return FALSE; - } - if (hntdll) - { - NTDLL_GET_PROC(RtlCreateUnicodeStringFromAsciiz) - NTDLL_GET_PROC(RtlCreateUnicodeString) - NTDLL_GET_PROC(RtlFreeUnicodeString) - NTDLL_GET_PROC(NtDeleteValueKey) - NTDLL_GET_PROC(RtlQueryRegistryValues) - NTDLL_GET_PROC(RtlCheckRegistryKey) - NTDLL_GET_PROC(RtlOpenCurrentUser) - NTDLL_GET_PROC(NtClose) - NTDLL_GET_PROC(NtDeleteValueKey) - NTDLL_GET_PROC(NtCreateKey) - NTDLL_GET_PROC(NtFlushKey) - NTDLL_GET_PROC(NtDeleteKey) - NTDLL_GET_PROC(NtQueryValueKey) - NTDLL_GET_PROC(NtSetValueKey) - NTDLL_GET_PROC(NtOpenKey) - NTDLL_GET_PROC(RtlFormatCurrentUserKeyPath) - NTDLL_GET_PROC(RtlReAllocateHeap) - NTDLL_GET_PROC(RtlAppendUnicodeToString) - NTDLL_GET_PROC(RtlUnicodeStringToAnsiString) - NTDLL_GET_PROC(RtlFreeHeap) - NTDLL_GET_PROC(RtlAllocateHeap) - NTDLL_GET_PROC(RtlZeroMemory) - NTDLL_GET_PROC(RtlpNtQueryValueKey) - } - return TRUE; -} -#undef NTDLL_GET_PROC - -static NTSTATUS WINAPI QueryRoutine (IN PCWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, - IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext) -{ - NTSTATUS ret = STATUS_SUCCESS; - int ValueNameLength = 0; - LPSTR ValName = 0; - trace("**Test %d**\n", CurrentTest); - - if(ValueName) - { - ValueNameLength = lstrlenW(ValueName); - - ValName = (LPSTR)pRtlAllocateHeap(GetProcessHeap(), 0, ValueNameLength); - - WideCharToMultiByte(0, 0, ValueName, ValueNameLength+1,ValName, ValueNameLength, 0, 0); - - trace("ValueName: %s\n", ValName); - } - else - trace("ValueName: (null)\n"); - - switch(ValueType) - { - case REG_NONE: - trace("ValueType: REG_NONE\n"); - trace("ValueData: %d\n", (int)ValueData); - break; - - case REG_BINARY: - trace("ValueType: REG_BINARY\n"); - trace("ValueData: %d\n", *(unsigned int *)ValueData); - break; - - case REG_SZ: - trace("ValueType: REG_SZ\n"); - trace("ValueData: %s\n", (char*)ValueData); - break; - - case REG_MULTI_SZ: - trace("ValueType: REG_MULTI_SZ\n"); - trace("ValueData: %s\n", (char*)ValueData); - break; - - case REG_EXPAND_SZ: - trace("ValueType: REG_EXPAND_SZ\n"); - trace("ValueData: %s\n", (char*)ValueData); - break; - - case REG_DWORD: - trace("ValueType: REG_DWORD\n"); - trace("ValueData: %d\n", *(unsigned int *)ValueData); - break; - }; - trace("ValueLength: %d\n", (int)ValueLength); - - if(CurrentTest == 0) - ok(1, "\n"); /*checks that QueryRoutine is called*/ - if(CurrentTest > 7) - ok(!1, "Invalid Test Specified!\n"); - - CurrentTest++; - - if(ValName) - pRtlFreeHeap(GetProcessHeap(), 0, ValName); - - return ret; -} - -static void test_RtlQueryRegistryValues(void) -{ - - /* - ****************************** - * QueryTable Flags * - ****************************** - *RTL_QUERY_REGISTRY_SUBKEY * Name is the name of a subkey relative to Path - *RTL_QUERY_REGISTRY_TOPKEY * Resets location to original RelativeTo and Path - *RTL_QUERY_REGISTRY_REQUIRED * Key required. returns STATUS_OBJECT_NAME_NOT_FOUND if not present - *RTL_QUERY_REGISTRY_NOVALUE * We just want a call-back - *RTL_QUERY_REGISTRY_NOEXPAND * Don't expand the variables! - *RTL_QUERY_REGISTRY_DIRECT * Results of query will be stored in EntryContext(QueryRoutine ignored) - *RTL_QUERY_REGISTRY_DELETE * Delete value key after query - ****************************** - - - **Test layout(numbered according to CurrentTest value)** - 0)NOVALUE Just make sure call-back works - 1)Null Name See if QueryRoutine is called for every value in current key - 2)SUBKEY See if we can use SUBKEY to change the current path on the fly - 3)REQUIRED Test for value that's not there - 4)NOEXPAND See if it will return multiple strings(no expand should split strings up) - 5)DIRECT Make it store data directly in EntryContext and not call QueryRoutine - 6)DefaultType Test return values when key isn't present - 7)DefaultValue Test Default Value returned with key isn't present(and no REQUIRED flag set) - 8)DefaultLength Test Default Length with DefaultType = REG_SZ - 9)DefaultLength Test Default Length with DefaultType = REG_MULTI_SZ - 10)DefaultLength Test Default Length with DefaultType = REG_EXPAND_SZ - 11)DefaultData Test whether DefaultData is used while DefaultType = REG_NONE(shouldn't be) - 12)Delete Try to delete value key - - */ - NTSTATUS status; - ULONG RelativeTo; - - PRTL_QUERY_REGISTRY_TABLE QueryTable = NULL; - RelativeTo = RTL_REGISTRY_ABSOLUTE;/*Only using absolute - no need to test all relativeto variables*/ - - QueryTable = (PRTL_QUERY_REGISTRY_TABLE)pRtlAllocateHeap(GetProcessHeap(), 0, sizeof(RTL_QUERY_REGISTRY_TABLE)*26); - - pRtlZeroMemory( QueryTable, sizeof(RTL_QUERY_REGISTRY_TABLE) * 26); - - QueryTable[0].QueryRoutine = QueryRoutine; - QueryTable[0].Flags = RTL_QUERY_REGISTRY_NOVALUE; - QueryTable[0].Name = NULL; - QueryTable[0].EntryContext = NULL; - QueryTable[0].DefaultType = REG_BINARY; - QueryTable[0].DefaultData = NULL; - QueryTable[0].DefaultLength = 100; - - QueryTable[1].QueryRoutine = QueryRoutine; - QueryTable[1].Flags = 0; - QueryTable[1].Name = NULL; - QueryTable[1].EntryContext = 0; - QueryTable[1].DefaultType = REG_NONE; - QueryTable[1].DefaultData = NULL; - QueryTable[1].DefaultLength = 0; - - QueryTable[2].QueryRoutine = NULL; - QueryTable[2].Flags = 0; - QueryTable[2].Name = NULL; - QueryTable[2].EntryContext = 0; - QueryTable[2].DefaultType = REG_NONE; - QueryTable[2].DefaultData = NULL; - QueryTable[2].DefaultLength = 0; - - status = pRtlQueryRegistryValues(RelativeTo, winetestpath.Buffer, QueryTable, 0, 0); - ok(status == STATUS_SUCCESS, "RtlQueryRegistryValues return: 0x%08x\n", status); - - pRtlFreeHeap(GetProcessHeap(), 0, QueryTable); -} - -static void test_NtOpenKey(void) -{ - HANDLE key; - NTSTATUS status; - OBJECT_ATTRIBUTES attr; - ACCESS_MASK am = KEY_READ; - - if (0) - { - /* Crashes Wine */ - /* All NULL */ - status = pNtOpenKey(NULL, 0, NULL); - ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got: 0x%08x\n", status); - - /* NULL attributes */ - status = pNtOpenKey(&key, 0, NULL); - ok(status == STATUS_ACCESS_VIOLATION /* W2K3/XP/W2K */ || status == STATUS_INVALID_PARAMETER /* NT4 */, - "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_PARAMETER(NT4), got: 0x%08x\n", status); - } - - InitializeObjectAttributes(&attr, &winetestpath, 0, 0, 0); - - /* NULL key */ - status = pNtOpenKey(NULL, 0, &attr); - todo_wine - ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got: 0x%08x\n", status); - - /* Length > sizeof(OBJECT_ATTRIBUTES) */ - attr.Length *= 2; - status = pNtOpenKey(&key, am, &attr); - todo_wine - ok(status == STATUS_INVALID_PARAMETER, "Expected STATUS_INVALID_PARAMETER, got: 0x%08x\n", status); -} - -static void test_NtCreateKey(void) -{ - /*Create WineTest*/ - OBJECT_ATTRIBUTES attr; - HKEY key; - ACCESS_MASK am = GENERIC_ALL; - NTSTATUS status; - - /* All NULL */ - status = pNtCreateKey(NULL, 0, NULL, 0, 0, 0, 0); - ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got: 0x%08x\n", status); - - /* Only the key */ - status = pNtCreateKey(&key, 0, NULL, 0, 0, 0, 0); - ok(status == STATUS_ACCESS_VIOLATION /* W2K3/XP/W2K */ || status == STATUS_INVALID_PARAMETER /* NT4 */, - "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_PARAMETER(NT4), got: 0x%08x\n", status); - - /* Only accessmask */ - status = pNtCreateKey(NULL, am, NULL, 0, 0, 0, 0); - ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got: 0x%08x\n", status); - - /* Key and accessmask */ - status = pNtCreateKey(&key, am, NULL, 0, 0, 0, 0); - ok(status == STATUS_ACCESS_VIOLATION /* W2K3/XP/W2K */ || status == STATUS_INVALID_PARAMETER /* NT4 */, - "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_PARAMETER(NT4), got: 0x%08x\n", status); - - InitializeObjectAttributes(&attr, &winetestpath, 0, 0, 0); - - /* Only attributes */ - status = pNtCreateKey(NULL, 0, &attr, 0, 0, 0, 0); - ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got: 0x%08x\n", status); - - status = pNtCreateKey(&key, am, &attr, 0, 0, 0, 0); - ok(status == STATUS_SUCCESS, "NtCreateKey Failed: 0x%08x\n", status); - - /* Length > sizeof(OBJECT_ATTRIBUTES) */ - attr.Length *= 2; - status = pNtCreateKey(&key, am, &attr, 0, 0, 0, 0); - ok(status == STATUS_INVALID_PARAMETER, "Expected STATUS_INVALID_PARAMETER, got: 0x%08x\n", status); - - pNtClose(key); -} - -static void test_NtSetValueKey(void) -{ - HANDLE key; - NTSTATUS status; - OBJECT_ATTRIBUTES attr; - ACCESS_MASK am = KEY_WRITE; - UNICODE_STRING ValName; - DWORD data = 711; - - pRtlCreateUnicodeStringFromAsciiz(&ValName, "deletetest"); - - InitializeObjectAttributes(&attr, &winetestpath, 0, 0, 0); - status = pNtOpenKey(&key, am, &attr); - ok(status == STATUS_SUCCESS, "NtOpenKey Failed: 0x%08x\n", status); - - status = pNtSetValueKey(key, &ValName, 0, REG_DWORD, &data, sizeof(data)); - ok(status == STATUS_SUCCESS, "NtSetValueKey Failed: 0x%08x\n", status); - - pRtlFreeUnicodeString(&ValName); - pNtClose(key); -} - -static void test_RtlOpenCurrentUser(void) -{ - NTSTATUS status; - HKEY handle; - status=pRtlOpenCurrentUser(KEY_READ, &handle); - ok(status == STATUS_SUCCESS, "RtlOpenCurrentUser Failed: 0x%08x\n", status); - pNtClose(handle); -} - -static void test_RtlCheckRegistryKey(void) -{ - NTSTATUS status; - - status = pRtlCheckRegistryKey(RTL_REGISTRY_ABSOLUTE, winetestpath.Buffer); - ok(status == STATUS_SUCCESS, "RtlCheckRegistryKey with RTL_REGISTRY_ABSOLUTE: 0x%08x\n", status); - - status = pRtlCheckRegistryKey((RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL), winetestpath.Buffer); - ok(status == STATUS_SUCCESS, "RtlCheckRegistryKey with RTL_REGISTRY_ABSOLUTE and RTL_REGISTRY_OPTIONAL: 0x%08x\n", status); -} - -static void test_NtFlushKey(void) -{ - NTSTATUS status; - HANDLE hkey; - OBJECT_ATTRIBUTES attr; - ACCESS_MASK am = KEY_ALL_ACCESS; - - status = pNtFlushKey(NULL); - ok(status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got: 0x%08x\n", status); - - InitializeObjectAttributes(&attr, &winetestpath, 0, 0, 0); - pNtOpenKey(&hkey, am, &attr); - - status = pNtFlushKey(hkey); - ok(status == STATUS_SUCCESS, "NtDeleteKey Failed: 0x%08x\n", status); - - pNtClose(hkey); -} - -static void test_NtQueryValueKey(void) -{ - HANDLE key; - NTSTATUS status; - OBJECT_ATTRIBUTES attr; - UNICODE_STRING ValName; - KEY_VALUE_BASIC_INFORMATION *basic_info; - KEY_VALUE_PARTIAL_INFORMATION *partial_info; - KEY_VALUE_FULL_INFORMATION *full_info; - DWORD len; - - pRtlCreateUnicodeStringFromAsciiz(&ValName, "deletetest"); - - InitializeObjectAttributes(&attr, &winetestpath, 0, 0, 0); - status = pNtOpenKey(&key, KEY_READ, &attr); - ok(status == STATUS_SUCCESS, "NtOpenKey Failed: 0x%08x\n", status); - - len = FIELD_OFFSET(KEY_VALUE_BASIC_INFORMATION, Name[0]); - basic_info = HeapAlloc(GetProcessHeap(), 0, len); - status = pNtQueryValueKey(key, &ValName, KeyValueBasicInformation, basic_info, len, &len); - ok(status == STATUS_BUFFER_OVERFLOW, "NtQueryValueKey should have returned STATUS_BUFFER_OVERFLOW instead of 0x%08x\n", status); - ok(basic_info->TitleIndex == 0, "NtQueryValueKey returned wrong TitleIndex %d\n", basic_info->Type); - ok(basic_info->Type == REG_DWORD, "NtQueryValueKey returned wrong Type %d\n", basic_info->Type); - ok(basic_info->NameLength == 20, "NtQueryValueKey returned wrong NameLength %d\n", basic_info->NameLength); - ok(len == FIELD_OFFSET(KEY_VALUE_BASIC_INFORMATION, Name[basic_info->NameLength/sizeof(WCHAR)]), "NtQueryValueKey returned wrong len %d\n", len); - - basic_info = HeapReAlloc(GetProcessHeap(), 0, basic_info, len); - status = pNtQueryValueKey(key, &ValName, KeyValueBasicInformation, basic_info, len, &len); - ok(status == STATUS_SUCCESS, "NtQueryValueKey should have returned STATUS_SUCCESS instead of 0x%08x\n", status); - ok(basic_info->TitleIndex == 0, "NtQueryValueKey returned wrong TitleIndex %d\n", basic_info->Type); - ok(basic_info->Type == REG_DWORD, "NtQueryValueKey returned wrong Type %d\n", basic_info->Type); - ok(basic_info->NameLength == 20, "NtQueryValueKey returned wrong NameLength %d\n", basic_info->NameLength); - ok(len == FIELD_OFFSET(KEY_VALUE_BASIC_INFORMATION, Name[basic_info->NameLength/sizeof(WCHAR)]), "NtQueryValueKey returned wrong len %d\n", len); - ok(!memcmp(basic_info->Name, ValName.Buffer, ValName.Length), "incorrect Name returned\n"); - HeapFree(GetProcessHeap(), 0, basic_info); - - len = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data[0]); - partial_info = HeapAlloc(GetProcessHeap(), 0, len); - status = pNtQueryValueKey(key, &ValName, KeyValuePartialInformation, partial_info, len, &len); - ok(status == STATUS_BUFFER_OVERFLOW, "NtQueryValueKey should have returned STATUS_BUFFER_OVERFLOW instead of 0x%08x\n", status); - ok(partial_info->TitleIndex == 0, "NtQueryValueKey returned wrong TitleIndex %d\n", partial_info->Type); - ok(partial_info->Type == REG_DWORD, "NtQueryValueKey returned wrong Type %d\n", partial_info->Type); - ok(partial_info->DataLength == 4, "NtQueryValueKey returned wrong DataLength %d\n", partial_info->DataLength); - ok(len == FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data[partial_info->DataLength]), "NtQueryValueKey returned wrong len %d\n", len); - - partial_info = HeapReAlloc(GetProcessHeap(), 0, partial_info, len); - status = pNtQueryValueKey(key, &ValName, KeyValuePartialInformation, partial_info, len, &len); - ok(status == STATUS_SUCCESS, "NtQueryValueKey should have returned STATUS_SUCCESS instead of 0x%08x\n", status); - ok(partial_info->TitleIndex == 0, "NtQueryValueKey returned wrong TitleIndex %d\n", partial_info->Type); - ok(partial_info->Type == REG_DWORD, "NtQueryValueKey returned wrong Type %d\n", partial_info->Type); - ok(partial_info->DataLength == 4, "NtQueryValueKey returned wrong DataLength %d\n", partial_info->DataLength); - ok(len == FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data[partial_info->DataLength]), "NtQueryValueKey returned wrong len %d\n", len); - ok(*(DWORD *)partial_info->Data == 711, "incorrect Data returned: 0x%x\n", *(DWORD *)partial_info->Data); - HeapFree(GetProcessHeap(), 0, partial_info); - - len = FIELD_OFFSET(KEY_VALUE_FULL_INFORMATION, Name[0]); - full_info = HeapAlloc(GetProcessHeap(), 0, len); - status = pNtQueryValueKey(key, &ValName, KeyValueFullInformation, full_info, len, &len); - ok(status == STATUS_BUFFER_OVERFLOW, "NtQueryValueKey should have returned STATUS_BUFFER_OVERFLOW instead of 0x%08x\n", status); - ok(full_info->TitleIndex == 0, "NtQueryValueKey returned wrong TitleIndex %d\n", full_info->Type); - ok(full_info->Type == REG_DWORD, "NtQueryValueKey returned wrong Type %d\n", full_info->Type); - ok(full_info->DataLength == 4, "NtQueryValueKey returned wrong DataLength %d\n", full_info->DataLength); - ok(full_info->NameLength == 20, "NtQueryValueKey returned wrong NameLength %d\n", full_info->NameLength); - ok(len == FIELD_OFFSET(KEY_VALUE_FULL_INFORMATION, Name[0]) + full_info->DataLength + full_info->NameLength, - "NtQueryValueKey returned wrong len %d\n", len); - len = FIELD_OFFSET(KEY_VALUE_FULL_INFORMATION, Name[0]) + full_info->DataLength + full_info->NameLength; - - full_info = HeapReAlloc(GetProcessHeap(), 0, full_info, len); - status = pNtQueryValueKey(key, &ValName, KeyValueFullInformation, full_info, len, &len); - ok(status == STATUS_SUCCESS, "NtQueryValueKey should have returned STATUS_SUCCESS instead of 0x%08x\n", status); - ok(full_info->TitleIndex == 0, "NtQueryValueKey returned wrong TitleIndex %d\n", full_info->Type); - ok(full_info->Type == REG_DWORD, "NtQueryValueKey returned wrong Type %d\n", full_info->Type); - ok(full_info->DataLength == 4, "NtQueryValueKey returned wrong DataLength %d\n", full_info->DataLength); - ok(full_info->NameLength == 20, "NtQueryValueKey returned wrong NameLength %d\n", full_info->NameLength); - ok(!memcmp(full_info->Name, ValName.Buffer, ValName.Length), "incorrect Name returned\n"); - ok(*(DWORD *)((char *)full_info + full_info->DataOffset) == 711, "incorrect Data returned: 0x%x\n", - *(DWORD *)((char *)full_info + full_info->DataOffset)); - HeapFree(GetProcessHeap(), 0, full_info); - - pRtlFreeUnicodeString(&ValName); - pNtClose(key); -} - -static void test_NtDeleteKey(void) -{ - NTSTATUS status; - HANDLE hkey; - OBJECT_ATTRIBUTES attr; - ACCESS_MASK am = KEY_ALL_ACCESS; - - status = pNtDeleteKey(NULL); - ok(status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got: 0x%08x\n", status); - - InitializeObjectAttributes(&attr, &winetestpath, 0, 0, 0); - status = pNtOpenKey(&hkey, am, &attr); - - status = pNtDeleteKey(hkey); - ok(status == STATUS_SUCCESS, "NtDeleteKey Failed: 0x%08x\n", status); -} - -static void test_RtlpNtQueryValueKey(void) -{ - NTSTATUS status; - - status = pRtlpNtQueryValueKey(NULL, NULL, NULL, NULL); - ok(status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got: 0x%08x\n", status); -} - -START_TEST(reg) -{ - static const WCHAR winetest[] = {'\\','W','i','n','e','T','e','s','t','\\',0}; - if(!InitFunctionPtrs()) - return; - pRtlFormatCurrentUserKeyPath(&winetestpath); - winetestpath.Buffer = (PWSTR)pRtlReAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, winetestpath.Buffer, - winetestpath.MaximumLength + sizeof(winetest)*sizeof(WCHAR)); - winetestpath.MaximumLength = winetestpath.MaximumLength + sizeof(winetest)*sizeof(WCHAR); - - pRtlAppendUnicodeToString(&winetestpath, winetest); - - test_NtOpenKey(); - test_NtCreateKey(); - test_NtSetValueKey(); - test_RtlCheckRegistryKey(); - test_RtlOpenCurrentUser(); - test_RtlQueryRegistryValues(); - test_RtlpNtQueryValueKey(); - test_NtFlushKey(); - test_NtQueryValueKey(); - test_NtDeleteKey(); - - pRtlFreeUnicodeString(&winetestpath); - - FreeLibrary(hntdll); -} diff --git a/rostests/winetests/ntdll/rtl.c b/rostests/winetests/ntdll/rtl.c deleted file mode 100755 index 443b987c1f2..00000000000 --- a/rostests/winetests/ntdll/rtl.c +++ /dev/null @@ -1,959 +0,0 @@ -/* Unit test suite for Rtl* API functions - * - * 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 - * - * NOTES - * We use function pointers here as there is no import library for NTDLL on - * windows. - */ - -#include - -#include "ntdll_test.h" - -#ifndef __WINE_WINTERNL_H - -typedef struct _RTL_HANDLE -{ - struct _RTL_HANDLE * Next; -} RTL_HANDLE; - -typedef struct _RTL_HANDLE_TABLE -{ - ULONG MaxHandleCount; - ULONG HandleSize; - ULONG Unused[2]; - PVOID NextFree; - PVOID FirstHandle; - PVOID ReservedMemory; - PVOID MaxHandle; -} RTL_HANDLE_TABLE; - -#endif - -/* Function ptrs for ntdll calls */ -static HMODULE hntdll = 0; -static SIZE_T (WINAPI *pRtlCompareMemory)(LPCVOID,LPCVOID,SIZE_T); -static SIZE_T (WINAPI *pRtlCompareMemoryUlong)(PULONG, SIZE_T, ULONG); -static VOID (WINAPI *pRtlMoveMemory)(LPVOID,LPCVOID,SIZE_T); -static VOID (WINAPI *pRtlFillMemory)(LPVOID,SIZE_T,BYTE); -static VOID (WINAPI *pRtlFillMemoryUlong)(LPVOID,SIZE_T,ULONG); -static VOID (WINAPI *pRtlZeroMemory)(LPVOID,SIZE_T); -static ULONGLONG (WINAPIV *pRtlUlonglongByteSwap)(ULONGLONG source); -static ULONG (WINAPI *pRtlUniform)(PULONG); -static ULONG (WINAPI *pRtlRandom)(PULONG); -static BOOLEAN (WINAPI *pRtlAreAllAccessesGranted)(ACCESS_MASK, ACCESS_MASK); -static BOOLEAN (WINAPI *pRtlAreAnyAccessesGranted)(ACCESS_MASK, ACCESS_MASK); -static DWORD (WINAPI *pRtlComputeCrc32)(DWORD,const BYTE*,INT); -static void (WINAPI * pRtlInitializeHandleTable)(ULONG, ULONG, RTL_HANDLE_TABLE *); -static BOOLEAN (WINAPI * pRtlIsValidIndexHandle)(const RTL_HANDLE_TABLE *, ULONG, RTL_HANDLE **); -static NTSTATUS (WINAPI * pRtlDestroyHandleTable)(RTL_HANDLE_TABLE *); -static RTL_HANDLE * (WINAPI * pRtlAllocateHandle)(RTL_HANDLE_TABLE *, ULONG *); -static BOOLEAN (WINAPI * pRtlFreeHandle)(RTL_HANDLE_TABLE *, RTL_HANDLE *); -static NTSTATUS (WINAPI *pRtlAllocateAndInitializeSid)(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID*); -static NTSTATUS (WINAPI *pRtlFreeSid)(PSID); -#define LEN 16 -static const char* src_src = "This is a test!"; /* 16 bytes long, incl NUL */ -static ULONG src_aligned_block[4]; -static ULONG dest_aligned_block[32]; -static const char *src = (const char*)src_aligned_block; -static char* dest = (char*)dest_aligned_block; - -static void InitFunctionPtrs(void) -{ - hntdll = LoadLibraryA("ntdll.dll"); - ok(hntdll != 0, "LoadLibrary failed\n"); - if (hntdll) { - pRtlCompareMemory = (void *)GetProcAddress(hntdll, "RtlCompareMemory"); - pRtlCompareMemoryUlong = (void *)GetProcAddress(hntdll, "RtlCompareMemoryUlong"); - pRtlMoveMemory = (void *)GetProcAddress(hntdll, "RtlMoveMemory"); - pRtlFillMemory = (void *)GetProcAddress(hntdll, "RtlFillMemory"); - pRtlFillMemoryUlong = (void *)GetProcAddress(hntdll, "RtlFillMemoryUlong"); - pRtlZeroMemory = (void *)GetProcAddress(hntdll, "RtlZeroMemory"); - pRtlUlonglongByteSwap = (void *)GetProcAddress(hntdll, "RtlUlonglongByteSwap"); - pRtlUniform = (void *)GetProcAddress(hntdll, "RtlUniform"); - pRtlRandom = (void *)GetProcAddress(hntdll, "RtlRandom"); - pRtlAreAllAccessesGranted = (void *)GetProcAddress(hntdll, "RtlAreAllAccessesGranted"); - pRtlAreAnyAccessesGranted = (void *)GetProcAddress(hntdll, "RtlAreAnyAccessesGranted"); - pRtlComputeCrc32 = (void *)GetProcAddress(hntdll, "RtlComputeCrc32"); - pRtlInitializeHandleTable = (void *)GetProcAddress(hntdll, "RtlInitializeHandleTable"); - pRtlIsValidIndexHandle = (void *)GetProcAddress(hntdll, "RtlIsValidIndexHandle"); - pRtlDestroyHandleTable = (void *)GetProcAddress(hntdll, "RtlDestroyHandleTable"); - pRtlAllocateHandle = (void *)GetProcAddress(hntdll, "RtlAllocateHandle"); - pRtlFreeHandle = (void *)GetProcAddress(hntdll, "RtlFreeHandle"); - pRtlAllocateAndInitializeSid = (void *)GetProcAddress(hntdll, "RtlAllocateAndInitializeSid"); - pRtlFreeSid = (void *)GetProcAddress(hntdll, "RtlFreeSid"); - } - strcpy((char*)src_aligned_block, src_src); - ok(strlen(src) == 15, "Source must be 16 bytes long!\n"); -} - -#define COMP(str1,str2,cmplen,len) size = pRtlCompareMemory(str1, str2, cmplen); \ - ok(size == len, "Expected %ld, got %ld\n", size, (SIZE_T)len) - -static void test_RtlCompareMemory(void) -{ - SIZE_T size; - - if (!pRtlCompareMemory) - return; - - strcpy(dest, src); - - COMP(src,src,0,0); - COMP(src,src,LEN,LEN); - dest[0] = 'x'; - COMP(src,dest,LEN,0); -} - -static void test_RtlCompareMemoryUlong(void) -{ - ULONG a[10]; - ULONG result; - - a[0]= 0x0123; - a[1]= 0x4567; - a[2]= 0x89ab; - a[3]= 0xcdef; - result = pRtlCompareMemoryUlong(a, 0, 0x0123); - ok(result == 0, "RtlCompareMemoryUlong(%p, 0, 0x0123) returns %u, expected 0\n", a, result); - result = pRtlCompareMemoryUlong(a, 3, 0x0123); - ok(result == 0, "RtlCompareMemoryUlong(%p, 3, 0x0123) returns %u, expected 0\n", a, result); - result = pRtlCompareMemoryUlong(a, 4, 0x0123); - ok(result == 4, "RtlCompareMemoryUlong(%p, 4, 0x0123) returns %u, expected 4\n", a, result); - result = pRtlCompareMemoryUlong(a, 5, 0x0123); - ok(result == 4, "RtlCompareMemoryUlong(%p, 5, 0x0123) returns %u, expected 4\n", a, result); - result = pRtlCompareMemoryUlong(a, 7, 0x0123); - ok(result == 4, "RtlCompareMemoryUlong(%p, 7, 0x0123) returns %u, expected 4\n", a, result); - result = pRtlCompareMemoryUlong(a, 8, 0x0123); - ok(result == 4, "RtlCompareMemoryUlong(%p, 8, 0x0123) returns %u, expected 4\n", a, result); - result = pRtlCompareMemoryUlong(a, 9, 0x0123); - ok(result == 4, "RtlCompareMemoryUlong(%p, 9, 0x0123) returns %u, expected 4\n", a, result); - result = pRtlCompareMemoryUlong(a, 4, 0x0127); - ok(result == 0, "RtlCompareMemoryUlong(%p, 4, 0x0127) returns %u, expected 0\n", a, result); - result = pRtlCompareMemoryUlong(a, 4, 0x7123); - ok(result == 0, "RtlCompareMemoryUlong(%p, 4, 0x7123) returns %u, expected 0\n", a, result); - result = pRtlCompareMemoryUlong(a, 16, 0x4567); - ok(result == 0, "RtlCompareMemoryUlong(%p, 16, 0x4567) returns %u, expected 0\n", a, result); - - a[1]= 0x0123; - result = pRtlCompareMemoryUlong(a, 3, 0x0123); - ok(result == 0, "RtlCompareMemoryUlong(%p, 3, 0x0123) returns %u, expected 0\n", a, result); - result = pRtlCompareMemoryUlong(a, 4, 0x0123); - ok(result == 4, "RtlCompareMemoryUlong(%p, 4, 0x0123) returns %u, expected 4\n", a, result); - result = pRtlCompareMemoryUlong(a, 5, 0x0123); - ok(result == 4, "RtlCompareMemoryUlong(%p, 5, 0x0123) returns %u, expected 4\n", a, result); - result = pRtlCompareMemoryUlong(a, 7, 0x0123); - ok(result == 4, "RtlCompareMemoryUlong(%p, 7, 0x0123) returns %u, expected 4\n", a, result); - result = pRtlCompareMemoryUlong(a, 8, 0x0123); - ok(result == 8, "RtlCompareMemoryUlong(%p, 8, 0x0123) returns %u, expected 8\n", a, result); - result = pRtlCompareMemoryUlong(a, 9, 0x0123); - ok(result == 8, "RtlCompareMemoryUlong(%p, 9, 0x0123) returns %u, expected 8\n", a, result); -} - -#define COPY(len) memset(dest,0,sizeof(dest_aligned_block)); pRtlMoveMemory(dest, src, len) -#define CMP(str) ok(strcmp(dest,str) == 0, "Expected '%s', got '%s'\n", str, dest) - -static void test_RtlMoveMemory(void) -{ - if (!pRtlMoveMemory) - return; - - /* Length should be in bytes and not rounded. Use strcmp to ensure we - * didn't write past the end (it checks for the final NUL left by memset) - */ - COPY(0); CMP(""); - COPY(1); CMP("T"); - COPY(2); CMP("Th"); - COPY(3); CMP("Thi"); - COPY(4); CMP("This"); - COPY(5); CMP("This "); - COPY(6); CMP("This i"); - COPY(7); CMP("This is"); - COPY(8); CMP("This is "); - COPY(9); CMP("This is a"); - - /* Overlapping */ - strcpy(dest, src); pRtlMoveMemory(dest, dest + 1, strlen(src) - 1); - CMP("his is a test!!"); - strcpy(dest, src); pRtlMoveMemory(dest + 1, dest, strlen(src)); - CMP("TThis is a test!"); -} - -#define FILL(len) memset(dest,0,sizeof(dest_aligned_block)); strcpy(dest, src); pRtlFillMemory(dest,len,'x') - -static void test_RtlFillMemory(void) -{ - if (!pRtlFillMemory) - return; - - /* Length should be in bytes and not rounded. Use strcmp to ensure we - * didn't write past the end (the remainder of the string should match) - */ - FILL(0); CMP("This is a test!"); - FILL(1); CMP("xhis is a test!"); - FILL(2); CMP("xxis is a test!"); - FILL(3); CMP("xxxs is a test!"); - FILL(4); CMP("xxxx is a test!"); - FILL(5); CMP("xxxxxis a test!"); - FILL(6); CMP("xxxxxxs a test!"); - FILL(7); CMP("xxxxxxx a test!"); - FILL(8); CMP("xxxxxxxxa test!"); - FILL(9); CMP("xxxxxxxxx test!"); -} - -#define LFILL(len) memset(dest,0,sizeof(dest_aligned_block)); strcpy(dest, src); pRtlFillMemoryUlong(dest,len,val) - -static void test_RtlFillMemoryUlong(void) -{ - ULONG val = ('x' << 24) | ('x' << 16) | ('x' << 8) | 'x'; - if (!pRtlFillMemoryUlong) - return; - - /* Length should be in bytes and not rounded. Use strcmp to ensure we - * didn't write past the end (the remainder of the string should match) - */ - LFILL(0); CMP("This is a test!"); - LFILL(1); CMP("This is a test!"); - LFILL(2); CMP("This is a test!"); - LFILL(3); CMP("This is a test!"); - LFILL(4); CMP("xxxx is a test!"); - LFILL(5); CMP("xxxx is a test!"); - LFILL(6); CMP("xxxx is a test!"); - LFILL(7); CMP("xxxx is a test!"); - LFILL(8); CMP("xxxxxxxxa test!"); - LFILL(9); CMP("xxxxxxxxa test!"); -} - -#define ZERO(len) memset(dest,0,sizeof(dest_aligned_block)); strcpy(dest, src); pRtlZeroMemory(dest,len) -#define MCMP(str) ok(memcmp(dest,str,LEN) == 0, "Memcmp failed\n") - -static void test_RtlZeroMemory(void) -{ - if (!pRtlZeroMemory) - return; - - /* Length should be in bytes and not rounded. */ - ZERO(0); MCMP("This is a test!"); - ZERO(1); MCMP("\0his is a test!"); - ZERO(2); MCMP("\0\0is is a test!"); - ZERO(3); MCMP("\0\0\0s is a test!"); - ZERO(4); MCMP("\0\0\0\0 is a test!"); - ZERO(5); MCMP("\0\0\0\0\0is a test!"); - ZERO(6); MCMP("\0\0\0\0\0\0s a test!"); - ZERO(7); MCMP("\0\0\0\0\0\0\0 a test!"); - ZERO(8); MCMP("\0\0\0\0\0\0\0\0a test!"); - ZERO(9); MCMP("\0\0\0\0\0\0\0\0\0 test!"); -} - -static void test_RtlUlonglongByteSwap(void) -{ - ULONGLONG result; - - result = pRtlUlonglongByteSwap( ((ULONGLONG)0x76543210 << 32) | 0x87654321 ); - ok( (((ULONGLONG)0x21436587 << 32) | 0x10325476) == result, - "RtlUlonglongByteSwap(0x7654321087654321) returns 0x%x%08x, expected 0x2143658710325476\n", - (DWORD)(result >> 32), (DWORD)result); -} - - -static void test_RtlUniform(void) -{ - ULONGLONG num; - ULONG seed; - ULONG seed_bak; - ULONG expected; - ULONG result; - -/* - * According to the documentation RtlUniform is using D.H. Lehmer's 1948 - * algorithm. This algorithm is: - * - * seed = (seed * const_1 + const_2) % const_3; - * - * According to the documentation the random number is distributed over - * [0..MAXLONG]. Therefore const_3 is MAXLONG + 1: - * - * seed = (seed * const_1 + const_2) % (MAXLONG + 1); - * - * Because MAXLONG is 0x7fffffff (and MAXLONG + 1 is 0x80000000) the - * algorithm can be expressed without division as: - * - * seed = (seed * const_1 + const_2) & MAXLONG; - * - * To find out const_2 we just call RtlUniform with seed set to 0: - */ - seed = 0; - expected = 0x7fffffc3; - result = pRtlUniform(&seed); - ok(result == expected, - "RtlUniform(&seed (seed == 0)) returns %x, expected %x\n", - result, expected); -/* - * The algorithm is now: - * - * seed = (seed * const_1 + 0x7fffffc3) & MAXLONG; - * - * To find out const_1 we can use: - * - * const_1 = RtlUniform(1) - 0x7fffffc3; - * - * If that does not work a search loop can try all possible values of - * const_1 and compare to the result to RtlUniform(1). - * This way we find out that const_1 is 0xffffffed. - * - * For seed = 1 the const_2 is 0x7fffffc4: - */ - seed = 1; - expected = seed * 0xffffffed + 0x7fffffc3 + 1; - result = pRtlUniform(&seed); - ok(result == expected, - "RtlUniform(&seed (seed == 1)) returns %x, expected %x\n", - result, expected); -/* - * For seed = 2 the const_2 is 0x7fffffc3: - */ - seed = 2; - expected = seed * 0xffffffed + 0x7fffffc3; - result = pRtlUniform(&seed); - -/* - * Windows Vista uses different algorithms, so skip the rest of the tests - * until that is figured out. Trace output for the failures is about 10.5 MB! - */ - - if (result == 0x7fffff9f) { - skip("Most likely running on Windows Vista which uses a different algorithm\n"); - return; - } - - ok(result == expected, - "RtlUniform(&seed (seed == 2)) returns %x, expected %x\n", - result, expected); - -/* - * More tests show that if seed is odd the result must be incremented by 1: - */ - seed = 3; - expected = seed * 0xffffffed + 0x7fffffc3 + (seed & 1); - result = pRtlUniform(&seed); - ok(result == expected, - "RtlUniform(&seed (seed == 3)) returns %x, expected %x\n", - result, expected); - - seed = 0x6bca1aa; - expected = seed * 0xffffffed + 0x7fffffc3; - result = pRtlUniform(&seed); - ok(result == expected, - "RtlUniform(&seed (seed == 0x6bca1aa)) returns %x, expected %x\n", - result, expected); - - seed = 0x6bca1ab; - expected = seed * 0xffffffed + 0x7fffffc3 + 1; - result = pRtlUniform(&seed); - ok(result == expected, - "RtlUniform(&seed (seed == 0x6bca1ab)) returns %x, expected %x\n", - result, expected); -/* - * When seed is 0x6bca1ac there is an exception: - */ - seed = 0x6bca1ac; - expected = seed * 0xffffffed + 0x7fffffc3 + 2; - result = pRtlUniform(&seed); - ok(result == expected, - "RtlUniform(&seed (seed == 0x6bca1ac)) returns %x, expected %x\n", - result, expected); -/* - * Note that up to here const_3 is not used - * (the highest bit of the result is not set). - * - * Starting with 0x6bca1ad: If seed is even the result must be incremented by 1: - */ - seed = 0x6bca1ad; - expected = (seed * 0xffffffed + 0x7fffffc3) & MAXLONG; - result = pRtlUniform(&seed); - ok(result == expected, - "RtlUniform(&seed (seed == 0x6bca1ad)) returns %x, expected %x\n", - result, expected); - - seed = 0x6bca1ae; - expected = (seed * 0xffffffed + 0x7fffffc3 + 1) & MAXLONG; - result = pRtlUniform(&seed); - ok(result == expected, - "RtlUniform(&seed (seed == 0x6bca1ae)) returns %x, expected %x\n", - result, expected); -/* - * There are several ranges where for odd or even seed the result must be - * incremented by 1. You can see this ranges in the following test. - * - * For a full test use one of the following loop heads: - * - * for (num = 0; num <= 0xffffffff; num++) { - * seed = num; - * ... - * - * seed = 0; - * for (num = 0; num <= 0xffffffff; num++) { - * ... - */ - seed = 0; - for (num = 0; num <= 100000; num++) { - - expected = seed * 0xffffffed + 0x7fffffc3; - if (seed < 0x6bca1ac) { - expected = expected + (seed & 1); - } else if (seed == 0x6bca1ac) { - expected = (expected + 2) & MAXLONG; - } else if (seed < 0xd79435c) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x1435e50b) { - expected = expected + (seed & 1); - } else if (seed < 0x1af286ba) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x21af2869) { - expected = expected + (seed & 1); - } else if (seed < 0x286bca18) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x2f286bc7) { - expected = expected + (seed & 1); - } else if (seed < 0x35e50d77) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x3ca1af26) { - expected = expected + (seed & 1); - } else if (seed < 0x435e50d5) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x4a1af284) { - expected = expected + (seed & 1); - } else if (seed < 0x50d79433) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x579435e2) { - expected = expected + (seed & 1); - } else if (seed < 0x5e50d792) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x650d7941) { - expected = expected + (seed & 1); - } else if (seed < 0x6bca1af0) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x7286bc9f) { - expected = expected + (seed & 1); - } else if (seed < 0x79435e4e) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x7ffffffd) { - expected = expected + (seed & 1); - } else if (seed < 0x86bca1ac) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed == 0x86bca1ac) { - expected = (expected + 1) & MAXLONG; - } else if (seed < 0x8d79435c) { - expected = expected + (seed & 1); - } else if (seed < 0x9435e50b) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0x9af286ba) { - expected = expected + (seed & 1); - } else if (seed < 0xa1af2869) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0xa86bca18) { - expected = expected + (seed & 1); - } else if (seed < 0xaf286bc7) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed == 0xaf286bc7) { - expected = (expected + 2) & MAXLONG; - } else if (seed < 0xb5e50d77) { - expected = expected + (seed & 1); - } else if (seed < 0xbca1af26) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0xc35e50d5) { - expected = expected + (seed & 1); - } else if (seed < 0xca1af284) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0xd0d79433) { - expected = expected + (seed & 1); - } else if (seed < 0xd79435e2) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0xde50d792) { - expected = expected + (seed & 1); - } else if (seed < 0xe50d7941) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0xebca1af0) { - expected = expected + (seed & 1); - } else if (seed < 0xf286bc9f) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else if (seed < 0xf9435e4e) { - expected = expected + (seed & 1); - } else if (seed < 0xfffffffd) { - expected = (expected + (~seed & 1)) & MAXLONG; - } else { - expected = expected + (seed & 1); - } /* if */ - seed_bak = seed; - result = pRtlUniform(&seed); - ok(result == expected, - "test: 0x%x%08x RtlUniform(&seed (seed == %x)) returns %x, expected %x\n", - (DWORD)(num >> 32), (DWORD)num, seed_bak, result, expected); - ok(seed == expected, - "test: 0x%x%08x RtlUniform(&seed (seed == %x)) sets seed to %x, expected %x\n", - (DWORD)(num >> 32), (DWORD)num, seed_bak, result, expected); - } /* for */ -/* - * Further investigation shows: In the different regions the highest bit - * is set or cleared when even or odd seeds need an increment by 1. - * This leads to a simplified algorithm: - * - * seed = seed * 0xffffffed + 0x7fffffc3; - * if (seed == 0xffffffff || seed == 0x7ffffffe) { - * seed = (seed + 2) & MAXLONG; - * } else if (seed == 0x7fffffff) { - * seed = 0; - * } else if ((seed & 0x80000000) == 0) { - * seed = seed + (~seed & 1); - * } else { - * seed = (seed + (seed & 1)) & MAXLONG; - * } - * - * This is also the algorithm used for RtlUniform of wine (see dlls/ntdll/rtl.c). - * - * Now comes the funny part: - * It took me one weekend, to find the complicated algorithm and one day more, - * to find the simplified algorithm. Several weeks later I found out: The value - * MAXLONG (=0x7fffffff) is never returned, neither with the native function - * nor with the simplified algorithm. In reality the native function and our - * function return a random number distributed over [0..MAXLONG-1]. Note - * that this is different from what native documentation states [0..MAXLONG]. - * Expressed with D.H. Lehmer's 1948 algorithm it looks like: - * - * seed = (seed * const_1 + const_2) % MAXLONG; - * - * Further investigations show that the real algorithm is: - * - * seed = (seed * 0x7fffffed + 0x7fffffc3) % MAXLONG; - * - * This is checked with the test below: - */ - seed = 0; - for (num = 0; num <= 100000; num++) { - expected = (seed * 0x7fffffed + 0x7fffffc3) % 0x7fffffff; - seed_bak = seed; - result = pRtlUniform(&seed); - ok(result == expected, - "test: 0x%x%08x RtlUniform(&seed (seed == %x)) returns %x, expected %x\n", - (DWORD)(num >> 32), (DWORD)num, seed_bak, result, expected); - ok(seed == expected, - "test: 0x%x%08x RtlUniform(&seed (seed == %x)) sets seed to %x, expected %x\n", - (DWORD)(num >> 32), (DWORD)num, seed_bak, result, expected); - } /* for */ -/* - * More tests show that RtlUniform does not return 0x7ffffffd for seed values - * in the range [0..MAXLONG-1]. Additionally 2 is returned twice. This shows - * that there is more than one cycle of generated randon numbers ... - */ -} - - -static ULONG WINAPI my_RtlRandom(PULONG seed) -{ - static ULONG saved_value[128] = - { /* 0 */ 0x4c8bc0aa, 0x4c022957, 0x2232827a, 0x2f1e7626, 0x7f8bdafb, 0x5c37d02a, 0x0ab48f72, 0x2f0c4ffa, - /* 8 */ 0x290e1954, 0x6b635f23, 0x5d3885c0, 0x74b49ff8, 0x5155fa54, 0x6214ad3f, 0x111e9c29, 0x242a3a09, - /* 16 */ 0x75932ae1, 0x40ac432e, 0x54f7ba7a, 0x585ccbd5, 0x6df5c727, 0x0374dad1, 0x7112b3f1, 0x735fc311, - /* 24 */ 0x404331a9, 0x74d97781, 0x64495118, 0x323e04be, 0x5974b425, 0x4862e393, 0x62389c1d, 0x28a68b82, - /* 32 */ 0x0f95da37, 0x7a50bbc6, 0x09b0091c, 0x22cdb7b4, 0x4faaed26, 0x66417ccd, 0x189e4bfa, 0x1ce4e8dd, - /* 40 */ 0x5274c742, 0x3bdcf4dc, 0x2d94e907, 0x32eac016, 0x26d33ca3, 0x60415a8a, 0x31f57880, 0x68c8aa52, - /* 48 */ 0x23eb16da, 0x6204f4a1, 0x373927c1, 0x0d24eb7c, 0x06dd7379, 0x2b3be507, 0x0f9c55b1, 0x2c7925eb, - /* 56 */ 0x36d67c9a, 0x42f831d9, 0x5e3961cb, 0x65d637a8, 0x24bb3820, 0x4d08e33d, 0x2188754f, 0x147e409e, - /* 64 */ 0x6a9620a0, 0x62e26657, 0x7bd8ce81, 0x11da0abb, 0x5f9e7b50, 0x23e444b6, 0x25920c78, 0x5fc894f0, - /* 72 */ 0x5e338cbb, 0x404237fd, 0x1d60f80f, 0x320a1743, 0x76013d2b, 0x070294ee, 0x695e243b, 0x56b177fd, - /* 80 */ 0x752492e1, 0x6decd52f, 0x125f5219, 0x139d2e78, 0x1898d11e, 0x2f7ee785, 0x4db405d8, 0x1a028a35, - /* 88 */ 0x63f6f323, 0x1f6d0078, 0x307cfd67, 0x3f32a78a, 0x6980796c, 0x462b3d83, 0x34b639f2, 0x53fce379, - /* 96 */ 0x74ba50f4, 0x1abc2c4b, 0x5eeaeb8d, 0x335a7a0d, 0x3973dd20, 0x0462d66b, 0x159813ff, 0x1e4643fd, - /* 104 */ 0x06bc5c62, 0x3115e3fc, 0x09101613, 0x47af2515, 0x4f11ec54, 0x78b99911, 0x3db8dd44, 0x1ec10b9b, - /* 112 */ 0x5b5506ca, 0x773ce092, 0x567be81a, 0x5475b975, 0x7a2cde1a, 0x494536f5, 0x34737bb4, 0x76d9750b, - /* 120 */ 0x2a1f6232, 0x2e49644d, 0x7dddcbe7, 0x500cebdb, 0x619dab9e, 0x48c626fe, 0x1cda3193, 0x52dabe9d }; - ULONG rand; - int pos; - ULONG result; - - rand = (*seed * 0x7fffffed + 0x7fffffc3) % 0x7fffffff; - *seed = (rand * 0x7fffffed + 0x7fffffc3) % 0x7fffffff; - pos = *seed & 0x7f; - result = saved_value[pos]; - saved_value[pos] = rand; - return(result); -} - - -static void test_RtlRandom(void) -{ - ULONGLONG num; - ULONG seed; - ULONG seed_bak; - ULONG seed_expected; - ULONG result; - ULONG result_expected; - -/* - * Unlike RtlUniform, RtlRandom is not documented. We guess that for - * RtlRandom D.H. Lehmer's 1948 algorithm is used like stated in - * the documentation of the RtlUniform function. This algorithm is: - * - * seed = (seed * const_1 + const_2) % const_3; - * - * According to the RtlUniform documentation the random number is - * distributed over [0..MAXLONG], but in reality it is distributed - * over [0..MAXLONG-1]. Therefore const_3 might be MAXLONG + 1 or - * MAXLONG: - * - * seed = (seed * const_1 + const_2) % (MAXLONG + 1); - * - * or - * - * seed = (seed * const_1 + const_2) % MAXLONG; - * - * To find out const_2 we just call RtlRandom with seed set to 0: - */ - seed = 0; - result_expected = 0x320a1743; - seed_expected =0x44b; - result = pRtlRandom(&seed); - -/* - * Windows Vista uses different algorithms, so skip the rest of the tests - * until that is figured out. Trace output for the failures is about 10.5 MB! - */ - - if (seed == 0x3fc) { - skip("Most likely running on Windows Vista which uses a different algorithm\n"); - return; - } - - ok(result == result_expected, - "pRtlRandom(&seed (seed == 0)) returns %x, expected %x\n", - result, result_expected); - ok(seed == seed_expected, - "pRtlRandom(&seed (seed == 0)) sets seed to %x, expected %x\n", - seed, seed_expected); -/* - * Seed is not equal to result as with RtlUniform. To see more we - * call RtlRandom again with seed set to 0: - */ - seed = 0; - result_expected = 0x7fffffc3; - seed_expected =0x44b; - result = pRtlRandom(&seed); - ok(result == result_expected, - "RtlRandom(&seed (seed == 0)) returns %x, expected %x\n", - result, result_expected); - ok(seed == seed_expected, - "RtlRandom(&seed (seed == 0)) sets seed to %x, expected %x\n", - seed, seed_expected); -/* - * Seed is set to the same value as before but the result is different. - * To see more we call RtlRandom again with seed set to 0: - */ - seed = 0; - result_expected = 0x7fffffc3; - seed_expected =0x44b; - result = pRtlRandom(&seed); - ok(result == result_expected, - "RtlRandom(&seed (seed == 0)) returns %x, expected %x\n", - result, result_expected); - ok(seed == seed_expected, - "RtlRandom(&seed (seed == 0)) sets seed to %x, expected %x\n", - seed, seed_expected); -/* - * Seed is again set to the same value as before. This time we also - * have the same result as before. Interestingly the value of the - * result is 0x7fffffc3 which is the same value used in RtlUniform - * as const_2. If we do - * - * seed = 0; - * result = RtlUniform(&seed); - * - * we get the same result (0x7fffffc3) as with - * - * seed = 0; - * RtlRandom(&seed); - * seed = 0; - * result = RtlRandom(&seed); - * - * And there is another interesting thing. If we do - * - * seed = 0; - * RtlUniform(&seed); - * RtlUniform(&seed); - * - * seed is set to the value 0x44b which ist the same value that - * - * seed = 0; - * RtlRandom(&seed); - * - * assigns to seed. Putting these two findings together leads to - * the conclusion that RtlRandom saves the value in some variable, - * like in the following algorithm: - * - * result = saved_value; - * saved_value = RtlUniform(&seed); - * RtlUniform(&seed); - * return(result); - * - * Now we do further tests with seed set to 1: - */ - seed = 1; - result_expected = 0x7a50bbc6; - seed_expected =0x5a1; - result = pRtlRandom(&seed); - ok(result == result_expected, - "RtlRandom(&seed (seed == 1)) returns %x, expected %x\n", - result, result_expected); - ok(seed == seed_expected, - "RtlRandom(&seed (seed == 1)) sets seed to %x, expected %x\n", - seed, seed_expected); -/* - * If there is just one saved_value the result now would be - * 0x7fffffc3. From this test we can see that there is more than - * one saved_value, like with this algorithm: - * - * result = saved_value[pos]; - * saved_value[pos] = RtlUniform(&seed); - * RtlUniform(&seed); - * return(result); - * - * But how is the value of pos determined? The calls to RtlUniform - * create a sequence of random numbers. Every second random number - * is put into the saved_value array and is used in some later call - * of RtlRandom as result. The only reasonable source to determine - * pos are the random numbers generated by RtlUniform which are not - * put into the saved_value array. This are the values of seed - * between the two calls of RtlUniform as in this algorithm: - * - * rand = RtlUniform(&seed); - * RtlUniform(&seed); - * pos = position(seed); - * result = saved_value[pos]; - * saved_value[pos] = rand; - * return(result); - * - * What remains to be determined is: The size of the saved_value array, - * the initial values of the saved_value array and the function - * position(seed). These tests are not shown here. - * The result of these tests is: The size of the saved_value array - * is 128, the initial values can be seen in the my_RtlRandom - * function and the position(seed) function is (seed & 0x7f). - * - * For a full test of RtlRandom use one of the following loop heads: - * - * for (num = 0; num <= 0xffffffff; num++) { - * seed = num; - * ... - * - * seed = 0; - * for (num = 0; num <= 0xffffffff; num++) { - * ... - */ - seed = 0; - for (num = 0; num <= 100000; num++) { - seed_bak = seed; - seed_expected = seed; - result_expected = my_RtlRandom(&seed_expected); - /* The following corrections are necessary because the */ - /* previous tests changed the saved_value array */ - if (num == 0) { - result_expected = 0x7fffffc3; - } else if (num == 81) { - result_expected = 0x7fffffb1; - } /* if */ - result = pRtlRandom(&seed); - ok(result == result_expected, - "test: 0x%x%08x RtlUniform(&seed (seed == %x)) returns %x, expected %x\n", - (DWORD)(num >> 32), (DWORD)num, seed_bak, result, result_expected); - ok(seed == seed_expected, - "test: 0x%x%08x RtlUniform(&seed (seed == %x)) sets seed to %x, expected %x\n", - (DWORD)(num >> 32), (DWORD)num, seed_bak, result, seed_expected); - } /* for */ -} - - -typedef struct { - ACCESS_MASK GrantedAccess; - ACCESS_MASK DesiredAccess; - BOOLEAN result; -} all_accesses_t; - -static const all_accesses_t all_accesses[] = { - {0xFEDCBA76, 0xFEDCBA76, 1}, - {0x00000000, 0xFEDCBA76, 0}, - {0xFEDCBA76, 0x00000000, 1}, - {0x00000000, 0x00000000, 1}, - {0xFEDCBA76, 0xFEDCBA70, 1}, - {0xFEDCBA70, 0xFEDCBA76, 0}, - {0xFEDCBA76, 0xFEDC8A76, 1}, - {0xFEDC8A76, 0xFEDCBA76, 0}, - {0xFEDCBA76, 0xC8C4B242, 1}, - {0xC8C4B242, 0xFEDCBA76, 0}, -}; -#define NB_ALL_ACCESSES (sizeof(all_accesses)/sizeof(*all_accesses)) - - -static void test_RtlAreAllAccessesGranted(void) -{ - unsigned int test_num; - BOOLEAN result; - - for (test_num = 0; test_num < NB_ALL_ACCESSES; test_num++) { - result = pRtlAreAllAccessesGranted(all_accesses[test_num].GrantedAccess, - all_accesses[test_num].DesiredAccess); - ok(all_accesses[test_num].result == result, - "(test %d): RtlAreAllAccessesGranted(%08x, %08x) returns %d, expected %d\n", - test_num, all_accesses[test_num].GrantedAccess, - all_accesses[test_num].DesiredAccess, - result, all_accesses[test_num].result); - } /* for */ -} - - -typedef struct { - ACCESS_MASK GrantedAccess; - ACCESS_MASK DesiredAccess; - BOOLEAN result; -} any_accesses_t; - -static const any_accesses_t any_accesses[] = { - {0xFEDCBA76, 0xFEDCBA76, 1}, - {0x00000000, 0xFEDCBA76, 0}, - {0xFEDCBA76, 0x00000000, 0}, - {0x00000000, 0x00000000, 0}, - {0xFEDCBA76, 0x01234589, 0}, - {0x00040000, 0xFEDCBA76, 1}, - {0x00040000, 0xFED8BA76, 0}, - {0xFEDCBA76, 0x00040000, 1}, - {0xFED8BA76, 0x00040000, 0}, -}; -#define NB_ANY_ACCESSES (sizeof(any_accesses)/sizeof(*any_accesses)) - - -static void test_RtlAreAnyAccessesGranted(void) -{ - unsigned int test_num; - BOOLEAN result; - - for (test_num = 0; test_num < NB_ANY_ACCESSES; test_num++) { - result = pRtlAreAnyAccessesGranted(any_accesses[test_num].GrantedAccess, - any_accesses[test_num].DesiredAccess); - ok(any_accesses[test_num].result == result, - "(test %d): RtlAreAnyAccessesGranted(%08x, %08x) returns %d, expected %d\n", - test_num, any_accesses[test_num].GrantedAccess, - any_accesses[test_num].DesiredAccess, - result, any_accesses[test_num].result); - } /* for */ -} - -static void test_RtlComputeCrc32(void) -{ - DWORD crc = 0; - - if (!pRtlComputeCrc32) - return; - - crc = pRtlComputeCrc32(crc, (const BYTE *)src, LEN); - ok(crc == 0x40861dc2,"Expected 0x40861dc2, got %8x\n", crc); -} - - -typedef struct MY_HANDLE -{ - RTL_HANDLE RtlHandle; - void * MyValue; -} MY_HANDLE; - -static inline void RtlpMakeHandleAllocated(RTL_HANDLE * Handle) -{ - ULONG_PTR *AllocatedBit = (ULONG_PTR *)(&Handle->Next); - *AllocatedBit = *AllocatedBit | 1; -} - -static void test_HandleTables(void) -{ - BOOLEAN result; - NTSTATUS status; - ULONG Index; - MY_HANDLE * MyHandle; - RTL_HANDLE_TABLE HandleTable; - - pRtlInitializeHandleTable(0x3FFF, sizeof(MY_HANDLE), &HandleTable); - MyHandle = (MY_HANDLE *)pRtlAllocateHandle(&HandleTable, &Index); - ok(MyHandle != NULL, "RtlAllocateHandle failed\n"); - RtlpMakeHandleAllocated(&MyHandle->RtlHandle); - MyHandle = NULL; - result = pRtlIsValidIndexHandle(&HandleTable, Index, (RTL_HANDLE **)&MyHandle); - ok(result, "Handle %p wasn't valid\n", MyHandle); - result = pRtlFreeHandle(&HandleTable, &MyHandle->RtlHandle); - ok(result, "Couldn't free handle %p\n", MyHandle); - status = pRtlDestroyHandleTable(&HandleTable); - ok(status == STATUS_SUCCESS, "RtlDestroyHandleTable failed with error 0x%08x\n", status); -} - -static void test_RtlAllocateAndInitializeSid(void) -{ - NTSTATUS ret; - SID_IDENTIFIER_AUTHORITY sia = {{ 1, 2, 3, 4, 5, 6 }}; - PSID psid; - - ret = pRtlAllocateAndInitializeSid(&sia, 0, 1, 2, 3, 4, 5, 6, 7, 8, &psid); - ok(!ret, "RtlAllocateAndInitializeSid error %08x\n", ret); - ret = pRtlFreeSid(psid); - ok(!ret, "RtlFreeSid error %08x\n", ret); - - /* these tests crash on XP - ret = pRtlAllocateAndInitializeSid(NULL, 0, 1, 2, 3, 4, 5, 6, 7, 8, &psid); - ret = pRtlAllocateAndInitializeSid(&sia, 0, 1, 2, 3, 4, 5, 6, 7, 8, NULL);*/ - - ret = pRtlAllocateAndInitializeSid(&sia, 9, 1, 2, 3, 4, 5, 6, 7, 8, &psid); - ok(ret == STATUS_INVALID_SID, "wrong error %08x\n", ret); -} - -START_TEST(rtl) -{ - InitFunctionPtrs(); - - if (pRtlCompareMemory) - test_RtlCompareMemory(); - if (pRtlCompareMemoryUlong) - test_RtlCompareMemoryUlong(); - if (pRtlMoveMemory) - test_RtlMoveMemory(); - if (pRtlFillMemory) - test_RtlFillMemory(); - if (pRtlFillMemoryUlong) - test_RtlFillMemoryUlong(); - if (pRtlZeroMemory) - test_RtlZeroMemory(); - if (pRtlUlonglongByteSwap) - test_RtlUlonglongByteSwap(); - if (pRtlUniform) - test_RtlUniform(); - if (pRtlRandom) - test_RtlRandom(); - if (pRtlAreAllAccessesGranted) - test_RtlAreAllAccessesGranted(); - if (pRtlAreAnyAccessesGranted) - test_RtlAreAnyAccessesGranted(); - if (pRtlComputeCrc32) - test_RtlComputeCrc32(); - if (pRtlInitializeHandleTable) - test_HandleTables(); - if (pRtlAllocateAndInitializeSid) - test_RtlAllocateAndInitializeSid(); -} diff --git a/rostests/winetests/ntdll/rtlbitmap.c b/rostests/winetests/ntdll/rtlbitmap.c deleted file mode 100755 index fc7f6c55fc9..00000000000 --- a/rostests/winetests/ntdll/rtlbitmap.c +++ /dev/null @@ -1,644 +0,0 @@ -/* Unit test suite for Rtl bitmap functions - * - * Copyright 2002 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 - * We use function pointers here as some of the bitmap functions exist only - * in later versions of ntdll. - */ - -#include "ntdll_test.h" - -#ifdef __WINE_WINTERNL_H - -/* Function ptrs for ordinal calls */ -static HMODULE hntdll = 0; -static VOID (WINAPI *pRtlInitializeBitMap)(PRTL_BITMAP,LPBYTE,ULONG); -static VOID (WINAPI *pRtlSetAllBits)(PRTL_BITMAP); -static VOID (WINAPI *pRtlClearAllBits)(PRTL_BITMAP); -static VOID (WINAPI *pRtlSetBits)(PRTL_BITMAP,ULONG,ULONG); -static VOID (WINAPI *pRtlClearBits)(PRTL_BITMAP,ULONG,ULONG); -static BOOLEAN (WINAPI *pRtlAreBitsSet)(PRTL_BITMAP,ULONG,ULONG); -static BOOLEAN (WINAPI *pRtlAreBitsClear)(PRTL_BITMAP,ULONG,ULONG); -static ULONG (WINAPI *pRtlFindSetBitsAndClear)(PRTL_BITMAP,ULONG,ULONG); -static ULONG (WINAPI *pRtlFindClearBitsAndSet)(PRTL_BITMAP,ULONG,ULONG); -static CCHAR (WINAPI *pRtlFindMostSignificantBit)(ULONGLONG); -static CCHAR (WINAPI *pRtlFindLeastSignificantBit)(ULONGLONG); -static ULONG (WINAPI *pRtlFindSetRuns)(PRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN); -static ULONG (WINAPI *pRtlFindClearRuns)(PRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN); -static ULONG (WINAPI *pRtlNumberOfSetBits)(PRTL_BITMAP); -static ULONG (WINAPI *pRtlNumberOfClearBits)(PRTL_BITMAP); -static ULONG (WINAPI *pRtlFindLongestRunSet)(PRTL_BITMAP,PULONG); -static ULONG (WINAPI *pRtlFindLongestRunClear)(PRTL_BITMAP,PULONG); - -static BYTE buff[256]; -static RTL_BITMAP bm; - -static void InitFunctionPtrs(void) -{ - hntdll = LoadLibraryA("ntdll.dll"); - ok(hntdll != 0, "LoadLibrary failed\n"); - if (hntdll) - { - pRtlInitializeBitMap = (void *)GetProcAddress(hntdll, "RtlInitializeBitMap"); - pRtlSetAllBits = (void *)GetProcAddress(hntdll, "RtlSetAllBits"); - pRtlClearAllBits = (void *)GetProcAddress(hntdll, "RtlClearAllBits"); - pRtlSetBits = (void *)GetProcAddress(hntdll, "RtlSetBits"); - pRtlClearBits = (void *)GetProcAddress(hntdll, "RtlClearBits"); - pRtlAreBitsSet = (void *)GetProcAddress(hntdll, "RtlAreBitsSet"); - pRtlAreBitsClear = (void *)GetProcAddress(hntdll, "RtlAreBitsClear"); - pRtlNumberOfSetBits = (void *)GetProcAddress(hntdll, "RtlNumberOfSetBits"); - pRtlNumberOfClearBits = (void *)GetProcAddress(hntdll, "RtlNumberOfClearBits"); - pRtlFindSetBitsAndClear = (void *)GetProcAddress(hntdll, "RtlFindSetBitsAndClear"); - pRtlFindClearBitsAndSet = (void *)GetProcAddress(hntdll, "RtlFindClearBitsAndSet"); - pRtlFindMostSignificantBit = (void *)GetProcAddress(hntdll, "RtlFindMostSignificantBit"); - pRtlFindLeastSignificantBit = (void *)GetProcAddress(hntdll, "RtlFindLeastSignificantBit"); - pRtlFindSetRuns = (void *)GetProcAddress(hntdll, "RtlFindSetRuns"); - pRtlFindClearRuns = (void *)GetProcAddress(hntdll, "RtlFindClearRuns"); - pRtlFindLongestRunSet = (void *)GetProcAddress(hntdll, "RtlFindLongestRunSet"); - pRtlFindLongestRunClear = (void *)GetProcAddress(hntdll, "RtlFindLongestRunClear"); - } -} - -static void test_RtlInitializeBitMap(void) -{ - bm.SizeOfBitMap = 0; - bm.Buffer = 0; - - memset(buff, 0, sizeof(buff)); - buff[0] = 77; /* Check buffer is not written to during init */ - buff[79] = 77; - - pRtlInitializeBitMap(&bm, buff, 800); - ok(bm.SizeOfBitMap == 800, "size uninitialised\n"); - ok(bm.Buffer == (PULONG)buff,"buffer uninitialised\n"); - ok(buff[0] == 77 && buff[79] == 77, "wrote to buffer\n"); -} - -static void test_RtlSetAllBits(void) -{ - if (!pRtlSetAllBits) - return; - - memset(buff, 0 , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, 1); - - pRtlSetAllBits(&bm); - ok(buff[0] == 0xff && buff[1] == 0xff && buff[2] == 0xff && - buff[3] == 0xff, "didn't round up size\n"); - ok(buff[4] == 0, "set more than rounded size\n"); -} - -static void test_RtlClearAllBits(void) -{ - if (!pRtlClearAllBits) - return; - - memset(buff, 0xff , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, 1); - - pRtlClearAllBits(&bm); - ok(!buff[0] && !buff[1] && !buff[2] && !buff[3], "didn't round up size\n"); - ok(buff[4] == 0xff, "cleared more than rounded size\n"); -} - -static void test_RtlSetBits(void) -{ - if (!pRtlSetBits) - return; - - memset(buff, 0 , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - pRtlSetBits(&bm, 0, 1); - ok(buff[0] == 1, "didn't set 1st bit\n"); - - buff[0] = 0; - pRtlSetBits(&bm, 7, 2); - ok(buff[0] == 0x80 && buff[1] == 1, "didn't span w/len < 8\n"); - - buff[0] = buff[1] = 0; - pRtlSetBits(&bm, 7, 10); - ok(buff[0] == 0x80 && buff[1] == 0xff && buff[2] == 1, "didn't span w/len > 8\n"); - - buff[0] = buff[1] = buff[2] = 0; - pRtlSetBits(&bm, 0, 8); /* 1st byte */ - ok(buff[0] == 0xff, "didn't set all bits\n"); - ok(!buff[1], "set too many bits\n"); - - pRtlSetBits(&bm, sizeof(buff)*8-1, 1); /* last bit */ - ok(buff[sizeof(buff)-1] == 0x80, "didn't set last bit\n"); -} - -static void test_RtlClearBits(void) -{ - if (!pRtlClearBits) - return; - - memset(buff, 0xff , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - pRtlClearBits(&bm, 0, 1); - ok(buff[0] == 0xfe, "didn't clear 1st bit\n"); - - buff[0] = 0xff; - pRtlClearBits(&bm, 7, 2); - ok(buff[0] == 0x7f && buff[1] == 0xfe, "didn't span w/len < 8\n"); - - buff[0] = buff[1] = 0xff; - pRtlClearBits(&bm, 7, 10); - ok(buff[0] == 0x7f && buff[1] == 0 && buff[2] == 0xfe, "didn't span w/len > 8\n"); - - buff[0] = buff[1] = buff[2] = 0xff; - pRtlClearBits(&bm, 0, 8); /* 1st byte */ - ok(!buff[0], "didn't clear all bits\n"); - ok(buff[1] == 0xff, "cleared too many bits\n"); - - pRtlClearBits(&bm, sizeof(buff)*8-1, 1); - ok(buff[sizeof(buff)-1] == 0x7f, "didn't set last bit\n"); -} - -static void test_RtlCheckBit(void) -{ - BOOLEAN bRet; - - memset(buff, 0 , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - pRtlSetBits(&bm, 0, 1); - pRtlSetBits(&bm, 7, 2); - pRtlSetBits(&bm, sizeof(buff)*8-1, 1); - - bRet = RtlCheckBit(&bm, 0); - ok (bRet, "didn't find set bit\n"); - bRet = RtlCheckBit(&bm, 7); - ok (bRet, "didn't find set bit\n"); - bRet = RtlCheckBit(&bm, 8); - ok (bRet, "didn't find set bit\n"); - bRet = RtlCheckBit(&bm, sizeof(buff)*8-1); - ok (bRet, "didn't find set bit\n"); - bRet = RtlCheckBit(&bm, 1); - ok (!bRet, "found non set bit\n"); - bRet = RtlCheckBit(&bm, sizeof(buff)*8-2); - ok (!bRet, "found non set bit\n"); -} - -static void test_RtlAreBitsSet(void) -{ - BOOLEAN bRet; - - if (!pRtlAreBitsSet) - return; - - memset(buff, 0 , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - bRet = pRtlAreBitsSet(&bm, 0, 1); - ok (!bRet, "found set bits after init\n"); - - pRtlSetBits(&bm, 0, 1); - bRet = pRtlAreBitsSet(&bm, 0, 1); - ok (bRet, "didn't find set bits\n"); - - buff[0] = 0; - pRtlSetBits(&bm, 7, 2); - bRet = pRtlAreBitsSet(&bm, 7, 2); - ok(bRet, "didn't find w/len < 8\n"); - bRet = pRtlAreBitsSet(&bm, 6, 3); - ok(!bRet, "found non set bit\n"); - bRet = pRtlAreBitsSet(&bm, 7, 3); - ok(!bRet, "found non set bit\n"); - - buff[0] = buff[1] = 0; - pRtlSetBits(&bm, 7, 10); - bRet = pRtlAreBitsSet(&bm, 7, 10); - ok(bRet, "didn't find w/len < 8\n"); - bRet = pRtlAreBitsSet(&bm, 6, 11); - ok(!bRet, "found non set bit\n"); - bRet = pRtlAreBitsSet(&bm, 7, 11); - ok(!bRet, "found non set bit\n"); - - buff[0] = buff[1] = buff[2] = 0; - pRtlSetBits(&bm, 0, 8); /* 1st byte */ - bRet = pRtlAreBitsSet(&bm, 0, 8); - ok(bRet, "didn't find whole byte\n"); - - pRtlSetBits(&bm, sizeof(buff)*8-1, 1); - bRet = pRtlAreBitsSet(&bm, sizeof(buff)*8-1, 1); - ok(bRet, "didn't find last bit\n"); -} - -static void test_RtlAreBitsClear(void) -{ - BOOLEAN bRet; - - if (!pRtlAreBitsClear) - return; - - memset(buff, 0xff , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - bRet = pRtlAreBitsClear(&bm, 0, 1); - ok (!bRet, "found clear bits after init\n"); - - pRtlClearBits(&bm, 0, 1); - bRet = pRtlAreBitsClear(&bm, 0, 1); - ok (bRet, "didn't find set bits\n"); - - buff[0] = 0xff; - pRtlClearBits(&bm, 7, 2); - bRet = pRtlAreBitsClear(&bm, 7, 2); - ok(bRet, "didn't find w/len < 8\n"); - bRet = pRtlAreBitsClear(&bm, 6, 3); - ok(!bRet, "found non clear bit\n"); - bRet = pRtlAreBitsClear(&bm, 7, 3); - ok(!bRet, "found non clear bit\n"); - - buff[0] = buff[1] = 0xff; - pRtlClearBits(&bm, 7, 10); - bRet = pRtlAreBitsClear(&bm, 7, 10); - ok(bRet, "didn't find w/len < 8\n"); - bRet = pRtlAreBitsClear(&bm, 6, 11); - ok(!bRet, "found non clear bit\n"); - bRet = pRtlAreBitsClear(&bm, 7, 11); - ok(!bRet, "found non clear bit\n"); - - buff[0] = buff[1] = buff[2] = 0xff; - pRtlClearBits(&bm, 0, 8); /* 1st byte */ - bRet = pRtlAreBitsClear(&bm, 0, 8); - ok(bRet, "didn't find whole byte\n"); - - pRtlClearBits(&bm, sizeof(buff)*8-1, 1); - bRet = pRtlAreBitsClear(&bm, sizeof(buff)*8-1, 1); - ok(bRet, "didn't find last bit\n"); -} - -static void test_RtlNumberOfSetBits(void) -{ - ULONG ulCount; - - if (!pRtlNumberOfSetBits) - return; - - memset(buff, 0 , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - ulCount = pRtlNumberOfSetBits(&bm); - ok(ulCount == 0, "set bits after init\n"); - - pRtlSetBits(&bm, 0, 1); /* Set 1st bit */ - ulCount = pRtlNumberOfSetBits(&bm); - ok(ulCount == 1, "count wrong\n"); - - pRtlSetBits(&bm, 7, 8); /* 8 more, spanning bytes 1-2 */ - ulCount = pRtlNumberOfSetBits(&bm); - ok(ulCount == 8+1, "count wrong\n"); - - pRtlSetBits(&bm, 17, 33); /* 33 more crossing ULONG boundary */ - ulCount = pRtlNumberOfSetBits(&bm); - ok(ulCount == 8+1+33, "count wrong\n"); - - pRtlSetBits(&bm, sizeof(buff)*8-1, 1); /* Set last bit */ - ulCount = pRtlNumberOfSetBits(&bm); - ok(ulCount == 8+1+33+1, "count wrong\n"); -} - -static void test_RtlNumberOfClearBits(void) -{ - ULONG ulCount; - - if (!pRtlNumberOfClearBits) - return; - - memset(buff, 0xff , sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - ulCount = pRtlNumberOfClearBits(&bm); - ok(ulCount == 0, "cleared bits after init\n"); - - pRtlClearBits(&bm, 0, 1); /* Set 1st bit */ - ulCount = pRtlNumberOfClearBits(&bm); - ok(ulCount == 1, "count wrong\n"); - - pRtlClearBits(&bm, 7, 8); /* 8 more, spanning bytes 1-2 */ - ulCount = pRtlNumberOfClearBits(&bm); - ok(ulCount == 8+1, "count wrong\n"); - - pRtlClearBits(&bm, 17, 33); /* 33 more crossing ULONG boundary */ - ulCount = pRtlNumberOfClearBits(&bm); - ok(ulCount == 8+1+33, "count wrong\n"); - - pRtlClearBits(&bm, sizeof(buff)*8-1, 1); /* Set last bit */ - ulCount = pRtlNumberOfClearBits(&bm); - ok(ulCount == 8+1+33+1, "count wrong\n"); -} - -/* Note: this tests RtlFindSetBits also */ -static void test_RtlFindSetBitsAndClear(void) -{ - BOOLEAN bRet; - ULONG ulPos; - - if (!pRtlFindSetBitsAndClear) - return; - - memset(buff, 0, sizeof(buff)); - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - pRtlSetBits(&bm, 0, 32); - ulPos = pRtlFindSetBitsAndClear(&bm, 32, 0); - ok (ulPos == 0, "didn't find bits\n"); - if(ulPos == 0) - { - bRet = pRtlAreBitsClear(&bm, 0, 32); - ok (bRet, "found but didn't clear\n"); - } - - memset(buff, 0 , sizeof(buff)); - pRtlSetBits(&bm, 40, 77); - ulPos = pRtlFindSetBitsAndClear(&bm, 77, 0); - ok (ulPos == 40, "didn't find bits\n"); - if(ulPos == 40) - { - bRet = pRtlAreBitsClear(&bm, 40, 77); - ok (bRet, "found but didn't clear\n"); - } -} - -/* Note: this tests RtlFindClearBits also */ -static void test_RtlFindClearBitsAndSet(void) -{ - BOOLEAN bRet; - ULONG ulPos; - - if (!pRtlFindClearBitsAndSet) - return; - - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - memset(buff, 0xff, sizeof(buff)); - pRtlSetBits(&bm, 0, 32); - ulPos = pRtlFindSetBitsAndClear(&bm, 32, 0); - ok (ulPos == 0, "didn't find bits\n"); - if(ulPos == 0) - { - bRet = pRtlAreBitsClear(&bm, 0, 32); - ok (bRet, "found but didn't clear\n"); - } - - memset(buff, 0xff , sizeof(buff)); - pRtlClearBits(&bm, 40, 77); - ulPos = pRtlFindClearBitsAndSet(&bm, 77, 50); - ok (ulPos == 40, "didn't find bits\n"); - if(ulPos == 40) - { - bRet = pRtlAreBitsSet(&bm, 40, 77); - ok (bRet, "found but didn't set\n"); - } -} - -static void test_RtlFindMostSignificantBit(void) -{ - int i; - CCHAR cPos; - ULONGLONG ulLong; - - if (!pRtlFindMostSignificantBit) - return; - - for (i = 0; i < 64; i++) - { - ulLong = 1ul; - ulLong <<= i; - - cPos = pRtlFindMostSignificantBit(ulLong); - ok (cPos == i, "didn't find MSB 0x%x%08x %d %d\n", - (DWORD)(ulLong >> 32), (DWORD)ulLong, i, cPos); - - /* Set all bits lower than bit i */ - ulLong = ((ulLong - 1) << 1) | 1; - - cPos = pRtlFindMostSignificantBit(ulLong); - ok (cPos == i, "didn't find MSB 0x%x%08x %d %d\n", - (DWORD)(ulLong >> 32), (DWORD)ulLong, i, cPos); - } - cPos = pRtlFindMostSignificantBit(0); - ok (cPos == -1, "found bit when not set\n"); -} - -static void test_RtlFindLeastSignificantBit(void) -{ - int i; - CCHAR cPos; - ULONGLONG ulLong; - - if (!pRtlFindLeastSignificantBit) - return; - - for (i = 0; i < 64; i++) - { - ulLong = (ULONGLONG)1 << i; - - cPos = pRtlFindLeastSignificantBit(ulLong); - ok (cPos == i, "didn't find LSB 0x%x%08x %d %d\n", - (DWORD)(ulLong >> 32), (DWORD)ulLong, i, cPos); - - ulLong = ~((ULONGLONG)0) << i; - - cPos = pRtlFindLeastSignificantBit(ulLong); - ok (cPos == i, "didn't find LSB 0x%x%08x %d %d\n", - (DWORD)(ulLong >> 32), (DWORD)ulLong, i, cPos); - } - cPos = pRtlFindLeastSignificantBit(0); - ok (cPos == -1, "found bit when not set\n"); -} - -/* Note: Also tests RtlFindLongestRunSet() */ -static void test_RtlFindSetRuns(void) -{ - RTL_BITMAP_RUN runs[16]; - ULONG ulCount; - - if (!pRtlFindSetRuns) - return; - - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - memset(buff, 0, sizeof(buff)); - ulCount = pRtlFindSetRuns(&bm, runs, 16, TRUE); - ok (ulCount == 0, "found set bits in empty bitmap\n"); - - memset(runs, 0, sizeof(runs)); - memset(buff, 0xff, sizeof(buff)); - ulCount = pRtlFindSetRuns(&bm, runs, 16, TRUE); - ok (ulCount == 1, "didn't find set bits\n"); - ok (runs[0].StartingIndex == 0,"bad start\n"); - ok (runs[0].NumberOfBits == sizeof(buff)*8,"bad size\n"); - - /* Set up 3 runs */ - memset(runs, 0, sizeof(runs)); - memset(buff, 0, sizeof(buff)); - pRtlSetBits(&bm, 7, 19); - pRtlSetBits(&bm, 101, 3); - pRtlSetBits(&bm, 1877, 33); - - /* Get first 2 */ - ulCount = pRtlFindSetRuns(&bm, runs, 2, FALSE); - ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 101,"bad find\n"); - ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 101,"bad find\n"); - ok (runs[0].NumberOfBits + runs[1].NumberOfBits == 19 + 3,"bad size\n"); - ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n"); - ok (runs[2].StartingIndex == 0,"found extra run\n"); - - /* Get longest 3 */ - memset(runs, 0, sizeof(runs)); - ulCount = pRtlFindSetRuns(&bm, runs, 2, TRUE); - ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 1877,"bad find\n"); - ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 1877,"bad find\n"); - ok (runs[0].NumberOfBits + runs[1].NumberOfBits == 33 + 19,"bad size\n"); - ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n"); - ok (runs[2].StartingIndex == 0,"found extra run\n"); - - /* Get all 3 */ - memset(runs, 0, sizeof(runs)); - ulCount = pRtlFindSetRuns(&bm, runs, 3, TRUE); - ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 101 || - runs[0].StartingIndex == 1877,"bad find\n"); - ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 101 || - runs[1].StartingIndex == 1877,"bad find\n"); - ok (runs[2].StartingIndex == 7 || runs[2].StartingIndex == 101 || - runs[2].StartingIndex == 1877,"bad find\n"); - ok (runs[0].NumberOfBits + runs[1].NumberOfBits - + runs[2].NumberOfBits == 19 + 3 + 33,"bad size\n"); - ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n"); - ok (runs[1].StartingIndex != runs[2].StartingIndex,"found run twice\n"); - ok (runs[3].StartingIndex == 0,"found extra run\n"); - - if (pRtlFindLongestRunSet) - { - ULONG ulStart = 0; - - ulCount = pRtlFindLongestRunSet(&bm, &ulStart); - ok(ulCount == 33 && ulStart == 1877,"didn't find longest %d %d\n",ulCount,ulStart); - - memset(buff, 0, sizeof(buff)); - ulCount = pRtlFindLongestRunSet(&bm, &ulStart); - ok(ulCount == 0,"found longest when none set\n"); - } -} - -/* Note: Also tests RtlFindLongestRunClear() */ -static void test_RtlFindClearRuns(void) -{ - RTL_BITMAP_RUN runs[16]; - ULONG ulCount; - - if (!pRtlFindClearRuns) - return; - - pRtlInitializeBitMap(&bm, buff, sizeof(buff)*8); - - memset(buff, 0xff, sizeof(buff)); - ulCount = pRtlFindClearRuns(&bm, runs, 16, TRUE); - ok (ulCount == 0, "found clear bits in full bitmap\n"); - - memset(runs, 0, sizeof(runs)); - memset(buff, 0, sizeof(buff)); - ulCount = pRtlFindClearRuns(&bm, runs, 16, TRUE); - ok (ulCount == 1, "didn't find clear bits\n"); - ok (runs[0].StartingIndex == 0,"bad start\n"); - ok (runs[0].NumberOfBits == sizeof(buff)*8,"bad size\n"); - - /* Set up 3 runs */ - memset(runs, 0, sizeof(runs)); - memset(buff, 0xff, sizeof(buff)); - pRtlClearBits(&bm, 7, 19); - pRtlClearBits(&bm, 101, 3); - pRtlClearBits(&bm, 1877, 33); - - /* Get first 2 */ - ulCount = pRtlFindClearRuns(&bm, runs, 2, FALSE); - ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 101,"bad find\n"); - ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 101,"bad find\n"); - ok (runs[0].NumberOfBits + runs[1].NumberOfBits == 19 + 3,"bad size\n"); - ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n"); - ok (runs[2].StartingIndex == 0,"found extra run\n"); - - /* Get longest 3 */ - memset(runs, 0, sizeof(runs)); - ulCount = pRtlFindClearRuns(&bm, runs, 2, TRUE); - ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 1877,"bad find\n"); - ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 1877,"bad find\n"); - ok (runs[0].NumberOfBits + runs[1].NumberOfBits == 33 + 19,"bad size\n"); - ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n"); - ok (runs[2].StartingIndex == 0,"found extra run\n"); - - /* Get all 3 */ - memset(runs, 0, sizeof(runs)); - ulCount = pRtlFindClearRuns(&bm, runs, 3, TRUE); - ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 101 || - runs[0].StartingIndex == 1877,"bad find\n"); - ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 101 || - runs[1].StartingIndex == 1877,"bad find\n"); - ok (runs[2].StartingIndex == 7 || runs[2].StartingIndex == 101 || - runs[2].StartingIndex == 1877,"bad find\n"); - ok (runs[0].NumberOfBits + runs[1].NumberOfBits - + runs[2].NumberOfBits == 19 + 3 + 33,"bad size\n"); - ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n"); - ok (runs[1].StartingIndex != runs[2].StartingIndex,"found run twice\n"); - ok (runs[3].StartingIndex == 0,"found extra run\n"); - - if (pRtlFindLongestRunClear) - { - ULONG ulStart = 0; - - ulCount = pRtlFindLongestRunClear(&bm, &ulStart); - ok(ulCount == 33 && ulStart == 1877,"didn't find longest\n"); - - memset(buff, 0xff, sizeof(buff)); - ulCount = pRtlFindLongestRunClear(&bm, &ulStart); - ok(ulCount == 0,"found longest when none clear\n"); - } - -} -#endif - -START_TEST(rtlbitmap) -{ -#ifdef __WINE_WINTERNL_H - InitFunctionPtrs(); - - if (pRtlInitializeBitMap) - { - test_RtlInitializeBitMap(); - test_RtlSetAllBits(); - test_RtlClearAllBits(); - test_RtlSetBits(); - test_RtlClearBits(); - test_RtlCheckBit(); - test_RtlAreBitsSet(); - test_RtlAreBitsClear(); - test_RtlNumberOfSetBits(); - test_RtlNumberOfClearBits(); - test_RtlFindSetBitsAndClear(); - test_RtlFindClearBitsAndSet(); - test_RtlFindMostSignificantBit(); - test_RtlFindLeastSignificantBit(); - test_RtlFindSetRuns(); - test_RtlFindClearRuns(); - } -#endif -} diff --git a/rostests/winetests/ntdll/rtlstr.c b/rostests/winetests/ntdll/rtlstr.c deleted file mode 100755 index 5239de07e04..00000000000 --- a/rostests/winetests/ntdll/rtlstr.c +++ /dev/null @@ -1,1804 +0,0 @@ -/* Unit test suite for Rtl string functions - * - * Copyright 2002 Robert Shearman - * 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 - * - * NOTES - * We use function pointers here as there is no import library for NTDLL on - * windows. - */ - -#include - -#define INITGUID - -#include "ntdll_test.h" -#include "winnls.h" -#include "guiddef.h" - -/* Function ptrs for ntdll calls */ -static HMODULE hntdll = 0; -static NTSTATUS (WINAPI *pRtlAnsiStringToUnicodeString)(PUNICODE_STRING, PCANSI_STRING, BOOLEAN); -static NTSTATUS (WINAPI *pRtlAppendAsciizToString)(STRING *, LPCSTR); -static NTSTATUS (WINAPI *pRtlAppendStringToString)(STRING *, const STRING *); -static NTSTATUS (WINAPI *pRtlAppendUnicodeStringToString)(UNICODE_STRING *, const UNICODE_STRING *); -static NTSTATUS (WINAPI *pRtlAppendUnicodeToString)(UNICODE_STRING *, LPCWSTR); -static NTSTATUS (WINAPI *pRtlCharToInteger)(PCSZ, ULONG, int *); -static VOID (WINAPI *pRtlCopyString)(STRING *, const STRING *); -static BOOLEAN (WINAPI *pRtlCreateUnicodeString)(PUNICODE_STRING, LPCWSTR); -static BOOLEAN (WINAPI *pRtlCreateUnicodeStringFromAsciiz)(PUNICODE_STRING, LPCSTR); -static NTSTATUS (WINAPI *pRtlDowncaseUnicodeString)(UNICODE_STRING *, const UNICODE_STRING *, BOOLEAN); -static NTSTATUS (WINAPI *pRtlDuplicateUnicodeString)(long, UNICODE_STRING *, UNICODE_STRING *); -static BOOLEAN (WINAPI *pRtlEqualUnicodeString)(const UNICODE_STRING *, const UNICODE_STRING *, BOOLEAN); -static NTSTATUS (WINAPI *pRtlFindCharInUnicodeString)(int, const UNICODE_STRING *, const UNICODE_STRING *, USHORT *); -static VOID (WINAPI *pRtlFreeAnsiString)(PSTRING); -static VOID (WINAPI *pRtlInitAnsiString)(PSTRING, LPCSTR); -static VOID (WINAPI *pRtlInitString)(PSTRING, LPCSTR); -static VOID (WINAPI *pRtlInitUnicodeString)(PUNICODE_STRING, LPCWSTR); -static NTSTATUS (WINAPI *pRtlInitUnicodeStringEx)(PUNICODE_STRING, LPCWSTR); -static NTSTATUS (WINAPI *pRtlIntegerToChar)(ULONG, ULONG, ULONG, PCHAR); -static NTSTATUS (WINAPI *pRtlIntegerToUnicodeString)(ULONG, ULONG, UNICODE_STRING *); -static NTSTATUS (WINAPI *pRtlMultiAppendUnicodeStringBuffer)(UNICODE_STRING *, long, UNICODE_STRING *); -static NTSTATUS (WINAPI *pRtlUnicodeStringToAnsiString)(STRING *, const UNICODE_STRING *, BOOLEAN); -static NTSTATUS (WINAPI *pRtlUnicodeStringToInteger)(const UNICODE_STRING *, int, int *); -static WCHAR (WINAPI *pRtlUpcaseUnicodeChar)(WCHAR); -static NTSTATUS (WINAPI *pRtlUpcaseUnicodeString)(UNICODE_STRING *, const UNICODE_STRING *, BOOLEAN); -static CHAR (WINAPI *pRtlUpperChar)(CHAR); -static NTSTATUS (WINAPI *pRtlUpperString)(STRING *, const STRING *); -static NTSTATUS (WINAPI *pRtlValidateUnicodeString)(long, UNICODE_STRING *); -static NTSTATUS (WINAPI *pRtlGUIDFromString)(const UNICODE_STRING*,GUID*); -static NTSTATUS (WINAPI *pRtlStringFromGUID)(const GUID*, UNICODE_STRING*); -static BOOLEAN (WINAPI *pRtlIsTextUnicode)(LPVOID, INT, INT *); - -/*static VOID (WINAPI *pRtlFreeOemString)(PSTRING);*/ -/*static VOID (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING);*/ -/*static VOID (WINAPI *pRtlCopyUnicodeString)(UNICODE_STRING *, const UNICODE_STRING *);*/ -/*static VOID (WINAPI *pRtlEraseUnicodeString)(UNICODE_STRING *);*/ -/*static LONG (WINAPI *pRtlCompareString)(const STRING *,const STRING *,BOOLEAN);*/ -/*static LONG (WINAPI *pRtlCompareUnicodeString)(const UNICODE_STRING *,const UNICODE_STRING *,BOOLEAN);*/ -/*static BOOLEAN (WINAPI *pRtlEqualString)(const STRING *,const STRING *,BOOLEAN);*/ -/*static BOOLEAN (WINAPI *pRtlPrefixString)(const STRING *, const STRING *, BOOLEAN);*/ -/*static BOOLEAN (WINAPI *pRtlPrefixUnicodeString)(const UNICODE_STRING *, const UNICODE_STRING *, BOOLEAN);*/ -/*static NTSTATUS (WINAPI *pRtlOemStringToUnicodeString)(PUNICODE_STRING, const STRING *, BOOLEAN);*/ -/*static NTSTATUS (WINAPI *pRtlUnicodeStringToOemString)(STRING *, const UNICODE_STRING *, BOOLEAN);*/ -/*static NTSTATUS (WINAPI *pRtlMultiByteToUnicodeN)(LPWSTR, DWORD, LPDWORD, LPCSTR, DWORD);*/ -/*static NTSTATUS (WINAPI *pRtlOemToUnicodeN)(LPWSTR, DWORD, LPDWORD, LPCSTR, DWORD);*/ -/*static NTSTATUS (WINAPI *pRtlUpcaseUnicodeStringToAnsiString)(STRING *, const UNICODE_STRING *, BOOLEAN);*/ -/*static NTSTATUS (WINAPI *pRtlUpcaseUnicodeStringToOemString)(STRING *, const UNICODE_STRING *, BOOLEAN);*/ -/*static NTSTATUS (WINAPI *pRtlUpcaseUnicodeToMultiByteN)(LPSTR, DWORD, LPDWORD, LPCWSTR, DWORD);*/ -/*static NTSTATUS (WINAPI *pRtlUpcaseUnicodeToOemN)(LPSTR, DWORD, LPDWORD, LPCWSTR, DWORD);*/ -/*static UINT (WINAPI *pRtlOemToUnicodeSize)(const STRING *);*/ -/*static DWORD (WINAPI *pRtlAnsiStringToUnicodeSize)(const STRING *);*/ - - -static WCHAR* AtoW( const char* p ) -{ - WCHAR* buffer; - DWORD len = MultiByteToWideChar( CP_ACP, 0, p, -1, NULL, 0 ); - buffer = malloc( len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_ACP, 0, p, -1, buffer, len ); - return buffer; -} - - -static void InitFunctionPtrs(void) -{ - hntdll = LoadLibraryA("ntdll.dll"); - ok(hntdll != 0, "LoadLibrary failed\n"); - if (hntdll) { - pRtlAnsiStringToUnicodeString = (void *)GetProcAddress(hntdll, "RtlAnsiStringToUnicodeString"); - pRtlAppendAsciizToString = (void *)GetProcAddress(hntdll, "RtlAppendAsciizToString"); - pRtlAppendStringToString = (void *)GetProcAddress(hntdll, "RtlAppendStringToString"); - pRtlAppendUnicodeStringToString = (void *)GetProcAddress(hntdll, "RtlAppendUnicodeStringToString"); - pRtlAppendUnicodeToString = (void *)GetProcAddress(hntdll, "RtlAppendUnicodeToString"); - pRtlCharToInteger = (void *)GetProcAddress(hntdll, "RtlCharToInteger"); - pRtlCopyString = (void *)GetProcAddress(hntdll, "RtlCopyString"); - pRtlCreateUnicodeString = (void *)GetProcAddress(hntdll, "RtlCreateUnicodeString"); - pRtlCreateUnicodeStringFromAsciiz = (void *)GetProcAddress(hntdll, "RtlCreateUnicodeStringFromAsciiz"); - pRtlDowncaseUnicodeString = (void *)GetProcAddress(hntdll, "RtlDowncaseUnicodeString"); - pRtlDuplicateUnicodeString = (void *)GetProcAddress(hntdll, "RtlDuplicateUnicodeString"); - pRtlEqualUnicodeString = (void *)GetProcAddress(hntdll, "RtlEqualUnicodeString"); - pRtlFindCharInUnicodeString = (void *)GetProcAddress(hntdll, "RtlFindCharInUnicodeString"); - pRtlFreeAnsiString = (void *)GetProcAddress(hntdll, "RtlFreeAnsiString"); - pRtlInitAnsiString = (void *)GetProcAddress(hntdll, "RtlInitAnsiString"); - pRtlInitString = (void *)GetProcAddress(hntdll, "RtlInitString"); - pRtlInitUnicodeString = (void *)GetProcAddress(hntdll, "RtlInitUnicodeString"); - pRtlInitUnicodeStringEx = (void *)GetProcAddress(hntdll, "RtlInitUnicodeStringEx"); - pRtlIntegerToChar = (void *)GetProcAddress(hntdll, "RtlIntegerToChar"); - pRtlIntegerToUnicodeString = (void *)GetProcAddress(hntdll, "RtlIntegerToUnicodeString"); - pRtlMultiAppendUnicodeStringBuffer = (void *)GetProcAddress(hntdll, "RtlMultiAppendUnicodeStringBuffer"); - pRtlUnicodeStringToAnsiString = (void *)GetProcAddress(hntdll, "RtlUnicodeStringToAnsiString"); - pRtlUnicodeStringToInteger = (void *)GetProcAddress(hntdll, "RtlUnicodeStringToInteger"); - pRtlUpcaseUnicodeChar = (void *)GetProcAddress(hntdll, "RtlUpcaseUnicodeChar"); - pRtlUpcaseUnicodeString = (void *)GetProcAddress(hntdll, "RtlUpcaseUnicodeString"); - pRtlUpperChar = (void *)GetProcAddress(hntdll, "RtlUpperChar"); - pRtlUpperString = (void *)GetProcAddress(hntdll, "RtlUpperString"); - pRtlValidateUnicodeString = (void *)GetProcAddress(hntdll, "RtlValidateUnicodeString"); - pRtlGUIDFromString = (void *)GetProcAddress(hntdll, "RtlGUIDFromString"); - pRtlStringFromGUID = (void *)GetProcAddress(hntdll, "RtlStringFromGUID"); - pRtlIsTextUnicode = (void *)GetProcAddress(hntdll, "RtlIsTextUnicode"); - } -} - - -static void test_RtlInitString(void) -{ - static const char teststring[] = "Some Wild String"; - STRING str; - - str.Length = 0; - str.MaximumLength = 0; - str.Buffer = (void *)0xdeadbeef; - pRtlInitString(&str, teststring); - ok(str.Length == sizeof(teststring) - sizeof(char), "Length uninitialized\n"); - ok(str.MaximumLength == sizeof(teststring), "MaximumLength uninitialized\n"); - ok(str.Buffer == teststring, "Buffer not equal to teststring\n"); - ok(strcmp(str.Buffer, "Some Wild String") == 0, "Buffer written to\n"); - pRtlInitString(&str, NULL); - ok(str.Length == 0, "Length uninitialized\n"); - ok(str.MaximumLength == 0, "MaximumLength uninitialized\n"); - ok(str.Buffer == NULL, "Buffer not equal to NULL\n"); -/* pRtlInitString(NULL, teststring); */ -} - - -static void test_RtlInitUnicodeString(void) -{ -#define STRINGW {'S','o','m','e',' ','W','i','l','d',' ','S','t','r','i','n','g',0} - static const WCHAR teststring[] = STRINGW; - static const WCHAR originalstring[] = STRINGW; -#undef STRINGW - UNICODE_STRING uni; - - uni.Length = 0; - uni.MaximumLength = 0; - uni.Buffer = (void *)0xdeadbeef; - pRtlInitUnicodeString(&uni, teststring); - ok(uni.Length == sizeof(teststring) - sizeof(WCHAR), "Length uninitialized\n"); - ok(uni.MaximumLength == sizeof(teststring), "MaximumLength uninitialized\n"); - ok(uni.Buffer == teststring, "Buffer not equal to teststring\n"); - ok(lstrcmpW(uni.Buffer, originalstring) == 0, "Buffer written to\n"); - pRtlInitUnicodeString(&uni, NULL); - ok(uni.Length == 0, "Length uninitialized\n"); - ok(uni.MaximumLength == 0, "MaximumLength uninitialized\n"); - ok(uni.Buffer == NULL, "Buffer not equal to NULL\n"); -/* pRtlInitUnicodeString(NULL, teststring); */ -} - - -#define TESTSTRING2_LEN 1000000 -/* #define TESTSTRING2_LEN 32766 */ - - -static void test_RtlInitUnicodeStringEx(void) -{ - static const WCHAR teststring[] = {'S','o','m','e',' ','W','i','l','d',' ','S','t','r','i','n','g',0}; - WCHAR *teststring2; - UNICODE_STRING uni; - NTSTATUS result; - - teststring2 = (WCHAR *) malloc((TESTSTRING2_LEN + 1) * sizeof(WCHAR)); - memset(teststring2, 'X', TESTSTRING2_LEN * sizeof(WCHAR)); - teststring2[TESTSTRING2_LEN] = '\0'; - - uni.Length = 12345; - uni.MaximumLength = 12345; - uni.Buffer = (void *) 0xdeadbeef; - result = pRtlInitUnicodeStringEx(&uni, teststring); - ok(result == STATUS_SUCCESS, - "pRtlInitUnicodeStringEx(&uni, 0) returns %x, expected 0\n", - result); - ok(uni.Length == 32, - "pRtlInitUnicodeStringEx(&uni, 0) sets Length to %u, expected %u\n", - uni.Length, 32); - ok(uni.MaximumLength == 34, - "pRtlInitUnicodeStringEx(&uni, 0) sets MaximumLength to %u, expected %u\n", - uni.MaximumLength, 34); - ok(uni.Buffer == teststring, - "pRtlInitUnicodeStringEx(&uni, 0) sets Buffer to %p, expected %p\n", - uni.Buffer, teststring); - - uni.Length = 12345; - uni.MaximumLength = 12345; - uni.Buffer = (void *) 0xdeadbeef; - pRtlInitUnicodeString(&uni, teststring); - ok(uni.Length == 32, - "pRtlInitUnicodeString(&uni, 0) sets Length to %u, expected %u\n", - uni.Length, 32); - ok(uni.MaximumLength == 34, - "pRtlInitUnicodeString(&uni, 0) sets MaximumLength to %u, expected %u\n", - uni.MaximumLength, 34); - ok(uni.Buffer == teststring, - "pRtlInitUnicodeString(&uni, 0) sets Buffer to %p, expected %p\n", - uni.Buffer, teststring); - - uni.Length = 12345; - uni.MaximumLength = 12345; - uni.Buffer = (void *) 0xdeadbeef; - result = pRtlInitUnicodeStringEx(&uni, teststring2); - ok(result == STATUS_NAME_TOO_LONG, - "pRtlInitUnicodeStringEx(&uni, 0) returns %x, expected %x\n", - result, STATUS_NAME_TOO_LONG); - ok(uni.Length == 12345, - "pRtlInitUnicodeStringEx(&uni, 0) sets Length to %u, expected %u\n", - uni.Length, 12345); - ok(uni.MaximumLength == 12345, - "pRtlInitUnicodeStringEx(&uni, 0) sets MaximumLength to %u, expected %u\n", - uni.MaximumLength, 12345); - ok(uni.Buffer == (void *) 0xdeadbeef, - "pRtlInitUnicodeStringEx(&uni, 0) sets Buffer to %p, expected %x\n", - uni.Buffer, 0xdeadbeef); - - uni.Length = 12345; - uni.MaximumLength = 12345; - uni.Buffer = (void *) 0xdeadbeef; - pRtlInitUnicodeString(&uni, teststring2); - ok(uni.Length == 33920 /* <= Win2000 */ || uni.Length == 65532 /* >= Win XP */, - "pRtlInitUnicodeString(&uni, 0) sets Length to %u, expected %u\n", - uni.Length, 65532); - ok(uni.MaximumLength == 33922 /* <= Win2000 */ || uni.MaximumLength == 65534 /* >= Win XP */, - "pRtlInitUnicodeString(&uni, 0) sets MaximumLength to %u, expected %u\n", - uni.MaximumLength, 65534); - ok(uni.Buffer == teststring2, - "pRtlInitUnicodeString(&uni, 0) sets Buffer to %p, expected %p\n", - uni.Buffer, teststring2); - ok(memcmp(uni.Buffer, teststring2, (TESTSTRING2_LEN + 1) * sizeof(WCHAR)) == 0, - "pRtlInitUnicodeString(&uni, 0) changes Buffer\n"); - - uni.Length = 12345; - uni.MaximumLength = 12345; - uni.Buffer = (void *) 0xdeadbeef; - result = pRtlInitUnicodeStringEx(&uni, 0); - ok(result == STATUS_SUCCESS, - "pRtlInitUnicodeStringEx(&uni, 0) returns %x, expected 0\n", - result); - ok(uni.Length == 0, - "pRtlInitUnicodeStringEx(&uni, 0) sets Length to %u, expected %u\n", - uni.Length, 0); - ok(uni.MaximumLength == 0, - "pRtlInitUnicodeStringEx(&uni, 0) sets MaximumLength to %u, expected %u\n", - uni.MaximumLength, 0); - ok(uni.Buffer == NULL, - "pRtlInitUnicodeStringEx(&uni, 0) sets Buffer to %p, expected %p\n", - uni.Buffer, NULL); - - uni.Length = 12345; - uni.MaximumLength = 12345; - uni.Buffer = (void *) 0xdeadbeef; - pRtlInitUnicodeString(&uni, 0); - ok(uni.Length == 0, - "pRtlInitUnicodeString(&uni, 0) sets Length to %u, expected %u\n", - uni.Length, 0); - ok(uni.MaximumLength == 0, - "pRtlInitUnicodeString(&uni, 0) sets MaximumLength to %u, expected %u\n", - uni.MaximumLength, 0); - ok(uni.Buffer == NULL, - "pRtlInitUnicodeString(&uni, 0) sets Buffer to %p, expected %p\n", - uni.Buffer, NULL); - - free(teststring2); -} - - -typedef struct { - int add_nul; - int source_Length; - int source_MaximumLength; - int source_buf_size; - const char *source_buf; - int dest_Length; - int dest_MaximumLength; - int dest_buf_size; - const char *dest_buf; - int res_Length; - int res_MaximumLength; - int res_buf_size; - const char *res_buf; - NTSTATUS result; -} dupl_ustr_t; - -static const dupl_ustr_t dupl_ustr[] = { - { 0, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 32, 32, 32, "This is a string", STATUS_SUCCESS}, - { 0, 32, 32, 32, "This is a string", 40, 42, 42, "--------------------", 32, 32, 32, "This is a string", STATUS_SUCCESS}, - { 0, 32, 30, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 0, 32, 34, 34, "This is a string", 40, 42, 42, NULL, 32, 32, 32, "This is a string", STATUS_SUCCESS}, - { 0, 32, 32, 32, "This is a string", 40, 42, 42, NULL, 32, 32, 32, "This is a string", STATUS_SUCCESS}, - { 0, 32, 30, 34, "This is a string", 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 1, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 32, 34, 34, "This is a string", STATUS_SUCCESS}, - { 1, 32, 32, 32, "This is a string", 40, 42, 42, "--------------------", 32, 34, 34, "This is a string", STATUS_SUCCESS}, - { 1, 32, 30, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 1, 32, 34, 34, "This is a string", 40, 42, 42, NULL, 32, 34, 34, "This is a string", STATUS_SUCCESS}, - { 1, 32, 32, 32, "This is a string", 40, 42, 42, NULL, 32, 34, 34, "This is a string", STATUS_SUCCESS}, - { 1, 32, 30, 34, "This is a string", 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 2, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 2, 32, 32, 32, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 2, 32, 30, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 2, 32, 34, 34, "This is a string", 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 2, 32, 32, 32, "This is a string", 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 2, 32, 30, 34, "This is a string", 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 3, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 32, 34, 34, "This is a string", STATUS_SUCCESS}, - { 3, 32, 32, 32, "This is a string", 40, 42, 42, "--------------------", 32, 34, 34, "This is a string", STATUS_SUCCESS}, - { 3, 32, 30, 32, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 3, 32, 34, 34, "This is a string", 40, 42, 42, NULL, 32, 34, 34, "This is a string", STATUS_SUCCESS}, - { 3, 32, 32, 32, "This is a string", 40, 42, 42, NULL, 32, 34, 34, "This is a string", STATUS_SUCCESS}, - { 3, 32, 30, 32, "This is a string", 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 4, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 5, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 6, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 7, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 8, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 9, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {10, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {11, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {12, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {13, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {14, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {15, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {16, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {-1, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {-5, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - {-9, 32, 34, 34, "This is a string", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 0, 0, 2, 2, "", 40, 42, 42, "--------------------", 0, 0, 0, NULL, STATUS_SUCCESS}, - { 0, 0, 0, 0, "", 40, 42, 42, "--------------------", 0, 0, 0, NULL, STATUS_SUCCESS}, - { 0, 0, 2, 2, "", 40, 42, 42, NULL, 0, 0, 0, NULL, STATUS_SUCCESS}, - { 0, 0, 0, 0, "", 40, 42, 42, NULL, 0, 0, 0, NULL, STATUS_SUCCESS}, - { 0, 0, 2, 2, NULL, 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 0, 0, 0, 0, NULL, 40, 42, 42, "--------------------", 0, 0, 0, NULL, STATUS_SUCCESS}, - { 0, 0, 2, 2, NULL, 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 0, 0, 0, 0, NULL, 40, 42, 42, NULL, 0, 0, 0, NULL, STATUS_SUCCESS}, - { 1, 0, 2, 2, "", 40, 42, 42, "--------------------", 0, 0, 0, NULL, STATUS_SUCCESS}, - { 1, 0, 0, 0, "", 40, 42, 42, "--------------------", 0, 0, 0, NULL, STATUS_SUCCESS}, - { 1, 0, 2, 2, "", 40, 42, 42, NULL, 0, 0, 0, NULL, STATUS_SUCCESS}, - { 1, 0, 0, 0, "", 40, 42, 42, NULL, 0, 0, 0, NULL, STATUS_SUCCESS}, - { 1, 0, 2, 2, NULL, 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 1, 0, 0, 0, NULL, 40, 42, 42, "--------------------", 0, 0, 0, NULL, STATUS_SUCCESS}, - { 1, 0, 2, 2, NULL, 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 1, 0, 0, 0, NULL, 40, 42, 42, NULL, 0, 0, 0, NULL, STATUS_SUCCESS}, - { 2, 0, 2, 2, "", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 2, 0, 0, 0, "", 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 2, 0, 2, 2, "", 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 2, 0, 0, 0, "", 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 2, 0, 2, 2, NULL, 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 2, 0, 0, 0, NULL, 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 2, 0, 2, 2, NULL, 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 2, 0, 0, 0, NULL, 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 3, 0, 2, 2, "", 40, 42, 42, "--------------------", 0, 2, 2, "", STATUS_SUCCESS}, - { 3, 0, 0, 0, "", 40, 42, 42, "--------------------", 0, 2, 2, "", STATUS_SUCCESS}, - { 3, 0, 2, 2, "", 40, 42, 42, NULL, 0, 2, 2, "", STATUS_SUCCESS}, - { 3, 0, 0, 0, "", 40, 42, 42, NULL, 0, 2, 2, "", STATUS_SUCCESS}, - { 3, 0, 2, 2, NULL, 40, 42, 42, "--------------------", 40, 42, 42, "--------------------", STATUS_INVALID_PARAMETER}, - { 3, 0, 0, 0, NULL, 40, 42, 42, "--------------------", 0, 2, 2, "", STATUS_SUCCESS}, - { 3, 0, 2, 2, NULL, 40, 42, 42, NULL, 40, 42, 0, NULL, STATUS_INVALID_PARAMETER}, - { 3, 0, 0, 0, NULL, 40, 42, 42, NULL, 0, 2, 2, "", STATUS_SUCCESS}, -}; -#define NB_DUPL_USTR (sizeof(dupl_ustr)/sizeof(*dupl_ustr)) - - -static void test_RtlDuplicateUnicodeString(void) -{ - size_t pos; - WCHAR source_buf[257]; - WCHAR dest_buf[257]; - WCHAR res_buf[257]; - UNICODE_STRING source_str; - UNICODE_STRING dest_str; - UNICODE_STRING res_str; - CHAR dest_ansi_buf[257]; - STRING dest_ansi_str; - NTSTATUS result; - unsigned int test_num; - - for (test_num = 0; test_num < NB_DUPL_USTR; test_num++) { - source_str.Length = dupl_ustr[test_num].source_Length; - source_str.MaximumLength = dupl_ustr[test_num].source_MaximumLength; - if (dupl_ustr[test_num].source_buf != NULL) { - for (pos = 0; pos < dupl_ustr[test_num].source_buf_size/sizeof(WCHAR); pos++) { - source_buf[pos] = dupl_ustr[test_num].source_buf[pos]; - } - source_str.Buffer = source_buf; - } else { - source_str.Buffer = NULL; - } - dest_str.Length = dupl_ustr[test_num].dest_Length; - dest_str.MaximumLength = dupl_ustr[test_num].dest_MaximumLength; - if (dupl_ustr[test_num].dest_buf != NULL) { - for (pos = 0; pos < dupl_ustr[test_num].dest_buf_size/sizeof(WCHAR); pos++) { - dest_buf[pos] = dupl_ustr[test_num].dest_buf[pos]; - } - dest_str.Buffer = dest_buf; - } else { - dest_str.Buffer = NULL; - } - res_str.Length = dupl_ustr[test_num].res_Length; - res_str.MaximumLength = dupl_ustr[test_num].res_MaximumLength; - if (dupl_ustr[test_num].res_buf != NULL) { - for (pos = 0; pos < dupl_ustr[test_num].res_buf_size/sizeof(WCHAR); pos++) { - res_buf[pos] = dupl_ustr[test_num].res_buf[pos]; - } - res_str.Buffer = res_buf; - } else { - res_str.Buffer = NULL; - } - result = pRtlDuplicateUnicodeString(dupl_ustr[test_num].add_nul, &source_str, &dest_str); - dest_ansi_str.Length = dest_str.Length / sizeof(WCHAR); - dest_ansi_str.MaximumLength = dest_ansi_str.Length + 1; - for (pos = 0; pos < dest_ansi_str.Length; pos++) { - dest_ansi_buf[pos] = (char)dest_buf[pos]; - } - dest_ansi_buf[dest_ansi_str.Length] = '\0'; - dest_ansi_str.Buffer = dest_ansi_buf; - ok(result == dupl_ustr[test_num].result, - "(test %d): RtlDuplicateUnicodeString(%d, source, dest) has result %x, expected %x\n", - test_num, dupl_ustr[test_num].add_nul, result, dupl_ustr[test_num].result); - ok(dest_str.Length == dupl_ustr[test_num].res_Length, - "(test %d): RtlDuplicateUnicodeString(%d, source, dest) destination has Length %d, expected %d\n", - test_num, dupl_ustr[test_num].add_nul, dest_str.Length, dupl_ustr[test_num].res_Length); - ok(dest_str.MaximumLength == dupl_ustr[test_num].res_MaximumLength, - "(test %d): RtlDuplicateUnicodeString(%d, source, dest) destination has MaximumLength %d, expected %d\n", - test_num, dupl_ustr[test_num].add_nul, dest_str.MaximumLength, dupl_ustr[test_num].res_MaximumLength); - if (result == STATUS_INVALID_PARAMETER) { - ok((dest_str.Buffer == NULL && res_str.Buffer == NULL) || - dest_str.Buffer == dest_buf, - "(test %d): RtlDuplicateUnicodeString(%d, source, dest) destination buffer changed %p expected %p\n", - test_num, dupl_ustr[test_num].add_nul, dest_str.Buffer, dest_buf); - } else { - ok(dest_str.Buffer != dest_buf, - "(test %d): RtlDuplicateUnicodeString(%d, source, dest) has destination buffer unchanged %p\n", - test_num, dupl_ustr[test_num].add_nul, dest_str.Buffer); - } - if (dest_str.Buffer != NULL && dupl_ustr[test_num].res_buf != NULL) { - ok(memcmp(dest_str.Buffer, res_str.Buffer, dupl_ustr[test_num].res_buf_size) == 0, - "(test %d): RtlDuplicateUnicodeString(%d, source, dest) has destination \"%s\" expected \"%s\"\n", - test_num, dupl_ustr[test_num].add_nul, dest_ansi_str.Buffer, dupl_ustr[test_num].res_buf); - } else { - ok(dest_str.Buffer == NULL && dupl_ustr[test_num].res_buf == NULL, - "(test %d): RtlDuplicateUnicodeString(%d, source, dest) has destination %p expected %p\n", - test_num, dupl_ustr[test_num].add_nul, dest_str.Buffer, dupl_ustr[test_num].res_buf); - } - } -} - - -static void test_RtlCopyString(void) -{ - static const char teststring[] = "Some Wild String"; - char deststring[] = " "; - STRING str; - STRING deststr; - - pRtlInitString(&str, teststring); - pRtlInitString(&deststr, deststring); - pRtlCopyString(&deststr, &str); - ok(strncmp(str.Buffer, deststring, str.Length) == 0, "String not copied\n"); -} - - -static void test_RtlUpperChar(void) -{ - int ch; - int upper_ch; - int expected_upper_ch; - int byte_ch; - - for (ch = -1; ch <= 1024; ch++) { - upper_ch = pRtlUpperChar(ch); - byte_ch = ch & 0xff; - if (byte_ch >= 'a' && byte_ch <= 'z') { - expected_upper_ch = (CHAR) (byte_ch - 'a' + 'A'); - } else { - expected_upper_ch = (CHAR) byte_ch; - } - ok(upper_ch == expected_upper_ch, - "RtlUpperChar('%c'[=0x%x]) has result '%c'[=0x%x], expected '%c'[=0x%x]\n", - ch, ch, upper_ch, upper_ch, expected_upper_ch, expected_upper_ch); - } -} - - -static void test_RtlUpperString(void) -{ - int i; - CHAR ch; - CHAR upper_ch; - char ascii_buf[257]; - char result_buf[257]; - char upper_buf[257]; - STRING ascii_str; - STRING result_str; - STRING upper_str; - - for (i = 0; i <= 255; i++) { - ch = (CHAR) i; - if (ch >= 'a' && ch <= 'z') { - upper_ch = ch - 'a' + 'A'; - } else { - upper_ch = ch; - } - ascii_buf[i] = ch; - result_buf[i] = '\0'; - upper_buf[i] = upper_ch; - } - ascii_buf[i] = '\0'; - result_buf[i] = '\0'; - upper_buf[i] = '\0'; - ascii_str.Length = 256; - ascii_str.MaximumLength = 256; - ascii_str.Buffer = ascii_buf; - result_str.Length = 256; - result_str.MaximumLength = 256; - result_str.Buffer = result_buf; - upper_str.Length = 256; - upper_str.MaximumLength = 256; - upper_str.Buffer = upper_buf; - - pRtlUpperString(&result_str, &ascii_str); - ok(memcmp(result_str.Buffer, upper_str.Buffer, 256) == 0, - "RtlUpperString does not work as expected\n"); -} - - -static void test_RtlUpcaseUnicodeChar(void) -{ - int i; - WCHAR ch; - WCHAR upper_ch; - WCHAR expected_upper_ch; - - for (i = 0; i <= 255; i++) { - ch = (WCHAR) i; - upper_ch = pRtlUpcaseUnicodeChar(ch); - if (ch >= 'a' && ch <= 'z') { - expected_upper_ch = ch - 'a' + 'A'; - } else if (ch >= 0xe0 && ch <= 0xfe && ch != 0xf7) { - expected_upper_ch = ch - 0x20; - } else if (ch == 0xff) { - expected_upper_ch = 0x178; - } else { - expected_upper_ch = ch; - } - ok(upper_ch == expected_upper_ch, - "RtlUpcaseUnicodeChar('%c'[=0x%x]) has result '%c'[=0x%x], expected: '%c'[=0x%x]\n", - ch, ch, upper_ch, upper_ch, expected_upper_ch, expected_upper_ch); - } -} - - -static void test_RtlUpcaseUnicodeString(void) -{ - int i; - WCHAR ch; - WCHAR upper_ch; - WCHAR ascii_buf[257]; - WCHAR result_buf[257]; - WCHAR upper_buf[257]; - UNICODE_STRING ascii_str; - UNICODE_STRING result_str; - UNICODE_STRING upper_str; - - for (i = 0; i <= 255; i++) { - ch = (WCHAR) i; - if (ch >= 'a' && ch <= 'z') { - upper_ch = ch - 'a' + 'A'; - } else if (ch >= 0xe0 && ch <= 0xfe && ch != 0xf7) { - upper_ch = ch - 0x20; - } else if (ch == 0xff) { - upper_ch = 0x178; - } else { - upper_ch = ch; - } - ascii_buf[i] = ch; - result_buf[i] = '\0'; - upper_buf[i] = upper_ch; - } - ascii_buf[i] = '\0'; - result_buf[i] = '\0'; - upper_buf[i] = '\0'; - ascii_str.Length = 512; - ascii_str.MaximumLength = 512; - ascii_str.Buffer = ascii_buf; - result_str.Length = 512; - result_str.MaximumLength = 512; - result_str.Buffer = result_buf; - upper_str.Length = 512; - upper_str.MaximumLength = 512; - upper_str.Buffer = upper_buf; - - pRtlUpcaseUnicodeString(&result_str, &ascii_str, 0); - for (i = 0; i <= 255; i++) { - ok(result_str.Buffer[i] == upper_str.Buffer[i], - "RtlUpcaseUnicodeString works wrong: '%c'[=0x%x] is converted to '%c'[=0x%x], expected: '%c'[=0x%x]\n", - ascii_str.Buffer[i], ascii_str.Buffer[i], - result_str.Buffer[i], result_str.Buffer[i], - upper_str.Buffer[i], upper_str.Buffer[i]); - } -} - - -static void test_RtlDowncaseUnicodeString(void) -{ - int i; - WCHAR ch; - WCHAR lower_ch; - WCHAR source_buf[1025]; - WCHAR result_buf[1025]; - WCHAR lower_buf[1025]; - UNICODE_STRING source_str; - UNICODE_STRING result_str; - UNICODE_STRING lower_str; - - for (i = 0; i < 1024; i++) { - ch = (WCHAR) i; - if (ch >= 'A' && ch <= 'Z') { - lower_ch = ch - 'A' + 'a'; - } else if (ch >= 0xc0 && ch <= 0xde && ch != 0xd7) { - lower_ch = ch + 0x20; - } else if (ch >= 0x391 && ch <= 0x3ab && ch != 0x3a2) { - lower_ch = ch + 0x20; - } else { - switch (ch) { - case 0x178: lower_ch = 0xff; break; - case 0x181: lower_ch = 0x253; break; - case 0x186: lower_ch = 0x254; break; - case 0x189: lower_ch = 0x256; break; - case 0x18a: lower_ch = 0x257; break; - case 0x18e: lower_ch = 0x1dd; break; - case 0x18f: lower_ch = 0x259; break; - case 0x190: lower_ch = 0x25b; break; - case 0x193: lower_ch = 0x260; break; - case 0x194: lower_ch = 0x263; break; - case 0x196: lower_ch = 0x269; break; - case 0x197: lower_ch = 0x268; break; - case 0x19c: lower_ch = 0x26f; break; - case 0x19d: lower_ch = 0x272; break; - case 0x19f: lower_ch = 0x275; break; - case 0x1a9: lower_ch = 0x283; break; - case 0x1ae: lower_ch = 0x288; break; - case 0x1b1: lower_ch = 0x28a; break; - case 0x1b2: lower_ch = 0x28b; break; - case 0x1b7: lower_ch = 0x292; break; - case 0x1c4: lower_ch = 0x1c6; break; - case 0x1c7: lower_ch = 0x1c9; break; - case 0x1ca: lower_ch = 0x1cc; break; - case 0x1f1: lower_ch = 0x1f3; break; - case 0x386: lower_ch = 0x3ac; break; - case 0x388: lower_ch = 0x3ad; break; - case 0x389: lower_ch = 0x3ae; break; - case 0x38a: lower_ch = 0x3af; break; - case 0x38c: lower_ch = 0x3cc; break; - case 0x38e: lower_ch = 0x3cd; break; - case 0x38f: lower_ch = 0x3ce; break; - default: lower_ch = ch; break; - } /* switch */ - } - source_buf[i] = ch; - result_buf[i] = '\0'; - lower_buf[i] = lower_ch; - } - source_buf[i] = '\0'; - result_buf[i] = '\0'; - lower_buf[i] = '\0'; - source_str.Length = 2048; - source_str.MaximumLength = 2048; - source_str.Buffer = source_buf; - result_str.Length = 2048; - result_str.MaximumLength = 2048; - result_str.Buffer = result_buf; - lower_str.Length = 2048; - lower_str.MaximumLength = 2048; - lower_str.Buffer = lower_buf; - - pRtlDowncaseUnicodeString(&result_str, &source_str, 0); - for (i = 0; i <= 1024; i++) { - ok(result_str.Buffer[i] == lower_str.Buffer[i] || result_str.Buffer[i] == source_str.Buffer[i] + 1, - "RtlDowncaseUnicodeString works wrong: '%c'[=0x%x] is converted to '%c'[=0x%x], expected: '%c'[=0x%x]\n", - source_str.Buffer[i], source_str.Buffer[i], - result_str.Buffer[i], result_str.Buffer[i], - lower_str.Buffer[i], lower_str.Buffer[i]); - } -} - - -typedef struct { - int ansi_Length; - int ansi_MaximumLength; - int ansi_buf_size; - const char *ansi_buf; - int uni_Length; - int uni_MaximumLength; - int uni_buf_size; - const char *uni_buf; - BOOLEAN doalloc; - int res_Length; - int res_MaximumLength; - int res_buf_size; - const char *res_buf; - NTSTATUS result; -} ustr2astr_t; - -static const ustr2astr_t ustr2astr[] = { - { 10, 12, 12, "------------", 0, 0, 0, "", TRUE, 0, 1, 1, "", STATUS_SUCCESS}, - { 10, 12, 12, "------------", 12, 12, 12, "abcdef", TRUE, 6, 7, 7, "abcdef", STATUS_SUCCESS}, - { 0, 2, 12, "------------", 12, 12, 12, "abcdef", TRUE, 6, 7, 7, "abcdef", STATUS_SUCCESS}, - { 10, 12, 12, NULL, 12, 12, 12, "abcdef", TRUE, 6, 7, 7, "abcdef", STATUS_SUCCESS}, - { 0, 0, 12, "------------", 12, 12, 12, "abcdef", FALSE, 6, 0, 0, "", STATUS_BUFFER_OVERFLOW}, - { 0, 1, 12, "------------", 12, 12, 12, "abcdef", FALSE, 0, 1, 1, "", STATUS_BUFFER_OVERFLOW}, - { 0, 2, 12, "------------", 12, 12, 12, "abcdef", FALSE, 1, 2, 2, "a", STATUS_BUFFER_OVERFLOW}, - { 0, 3, 12, "------------", 12, 12, 12, "abcdef", FALSE, 2, 3, 3, "ab", STATUS_BUFFER_OVERFLOW}, - { 0, 5, 12, "------------", 12, 12, 12, "abcdef", FALSE, 4, 5, 5, "abcd", STATUS_BUFFER_OVERFLOW}, - { 8, 5, 12, "------------", 12, 12, 12, "abcdef", FALSE, 4, 5, 5, "abcd", STATUS_BUFFER_OVERFLOW}, - { 8, 6, 12, "------------", 12, 12, 12, "abcdef", FALSE, 5, 6, 6, "abcde", STATUS_BUFFER_OVERFLOW}, - { 8, 7, 12, "------------", 12, 12, 12, "abcdef", FALSE, 6, 7, 7, "abcdef", STATUS_SUCCESS}, - { 8, 7, 12, "------------", 0, 12, 12, NULL, FALSE, 0, 7, 0, "", STATUS_SUCCESS}, - { 0, 0, 12, NULL, 10, 10, 12, NULL, FALSE, 5, 0, 0, NULL, STATUS_BUFFER_OVERFLOW}, -}; -#define NB_USTR2ASTR (sizeof(ustr2astr)/sizeof(*ustr2astr)) - - -static void test_RtlUnicodeStringToAnsiString(void) -{ - size_t pos; - CHAR ansi_buf[257]; - WCHAR uni_buf[257]; - STRING ansi_str; - UNICODE_STRING uni_str; - NTSTATUS result; - unsigned int test_num; - - for (test_num = 0; test_num < NB_USTR2ASTR; test_num++) { - ansi_str.Length = ustr2astr[test_num].ansi_Length; - ansi_str.MaximumLength = ustr2astr[test_num].ansi_MaximumLength; - if (ustr2astr[test_num].ansi_buf != NULL) { - memcpy(ansi_buf, ustr2astr[test_num].ansi_buf, ustr2astr[test_num].ansi_buf_size); - ansi_buf[ustr2astr[test_num].ansi_buf_size] = '\0'; - ansi_str.Buffer = ansi_buf; - } else { - ansi_str.Buffer = NULL; - } - uni_str.Length = ustr2astr[test_num].uni_Length; - uni_str.MaximumLength = ustr2astr[test_num].uni_MaximumLength; - if (ustr2astr[test_num].uni_buf != NULL) { - for (pos = 0; pos < ustr2astr[test_num].uni_buf_size/sizeof(WCHAR); pos++) { - uni_buf[pos] = ustr2astr[test_num].uni_buf[pos]; - } - uni_str.Buffer = uni_buf; - } else { - uni_str.Buffer = NULL; - } - result = pRtlUnicodeStringToAnsiString(&ansi_str, &uni_str, ustr2astr[test_num].doalloc); - ok(result == ustr2astr[test_num].result, - "(test %d): RtlUnicodeStringToAnsiString(ansi, uni, %d) has result %x, expected %x\n", - test_num, ustr2astr[test_num].doalloc, result, ustr2astr[test_num].result); - ok(ansi_str.Length == ustr2astr[test_num].res_Length, - "(test %d): RtlUnicodeStringToAnsiString(ansi, uni, %d) ansi has Length %d, expected %d\n", - test_num, ustr2astr[test_num].doalloc, ansi_str.Length, ustr2astr[test_num].res_Length); - ok(ansi_str.MaximumLength == ustr2astr[test_num].res_MaximumLength, - "(test %d): RtlUnicodeStringToAnsiString(ansi, uni, %d) ansi has MaximumLength %d, expected %d\n", - test_num, ustr2astr[test_num].doalloc, ansi_str.MaximumLength, ustr2astr[test_num].res_MaximumLength); - ok(memcmp(ansi_str.Buffer, ustr2astr[test_num].res_buf, ustr2astr[test_num].res_buf_size) == 0, - "(test %d): RtlUnicodeStringToAnsiString(ansi, uni, %d) has ansi \"%s\" expected \"%s\"\n", - test_num, ustr2astr[test_num].doalloc, ansi_str.Buffer, ustr2astr[test_num].res_buf); - } -} - - -typedef struct { - int dest_Length; - int dest_MaximumLength; - int dest_buf_size; - const char *dest_buf; - const char *src; - int res_Length; - int res_MaximumLength; - int res_buf_size; - const char *res_buf; - NTSTATUS result; -} app_asc2str_t; - -static const app_asc2str_t app_asc2str[] = { - { 5, 12, 15, "TestS01234abcde", "tring", 10, 12, 15, "TestStringabcde", STATUS_SUCCESS}, - { 5, 11, 15, "TestS01234abcde", "tring", 10, 11, 15, "TestStringabcde", STATUS_SUCCESS}, - { 5, 10, 15, "TestS01234abcde", "tring", 10, 10, 15, "TestStringabcde", STATUS_SUCCESS}, - { 5, 9, 15, "TestS01234abcde", "tring", 5, 9, 15, "TestS01234abcde", STATUS_BUFFER_TOO_SMALL}, - { 5, 0, 15, "TestS01234abcde", "tring", 5, 0, 15, "TestS01234abcde", STATUS_BUFFER_TOO_SMALL}, - { 5, 14, 15, "TestS01234abcde", "tring", 10, 14, 15, "TestStringabcde", STATUS_SUCCESS}, - { 5, 14, 15, "TestS01234abcde", NULL, 5, 14, 15, "TestS01234abcde", STATUS_SUCCESS}, - { 5, 14, 15, NULL, NULL, 5, 14, 15, NULL, STATUS_SUCCESS}, - { 5, 12, 15, "Tst\0S01234abcde", "tr\0i", 7, 12, 15, "Tst\0Str234abcde", STATUS_SUCCESS}, -}; -#define NB_APP_ASC2STR (sizeof(app_asc2str)/sizeof(*app_asc2str)) - - -static void test_RtlAppendAsciizToString(void) -{ - CHAR dest_buf[257]; - STRING dest_str; - NTSTATUS result; - unsigned int test_num; - - for (test_num = 0; test_num < NB_APP_ASC2STR; test_num++) { - dest_str.Length = app_asc2str[test_num].dest_Length; - dest_str.MaximumLength = app_asc2str[test_num].dest_MaximumLength; - if (app_asc2str[test_num].dest_buf != NULL) { - memcpy(dest_buf, app_asc2str[test_num].dest_buf, app_asc2str[test_num].dest_buf_size); - dest_buf[app_asc2str[test_num].dest_buf_size] = '\0'; - dest_str.Buffer = dest_buf; - } else { - dest_str.Buffer = NULL; - } - result = pRtlAppendAsciizToString(&dest_str, app_asc2str[test_num].src); - ok(result == app_asc2str[test_num].result, - "(test %d): RtlAppendAsciizToString(dest, src) has result %x, expected %x\n", - test_num, result, app_asc2str[test_num].result); - ok(dest_str.Length == app_asc2str[test_num].res_Length, - "(test %d): RtlAppendAsciizToString(dest, src) dest has Length %d, expected %d\n", - test_num, dest_str.Length, app_asc2str[test_num].res_Length); - ok(dest_str.MaximumLength == app_asc2str[test_num].res_MaximumLength, - "(test %d): RtlAppendAsciizToString(dest, src) dest has MaximumLength %d, expected %d\n", - test_num, dest_str.MaximumLength, app_asc2str[test_num].res_MaximumLength); - if (dest_str.Buffer == dest_buf) { - ok(memcmp(dest_buf, app_asc2str[test_num].res_buf, app_asc2str[test_num].res_buf_size) == 0, - "(test %d): RtlAppendAsciizToString(dest, src) has dest \"%s\" expected \"%s\"\n", - test_num, dest_buf, app_asc2str[test_num].res_buf); - } else { - ok(dest_str.Buffer == app_asc2str[test_num].res_buf, - "(test %d): RtlAppendAsciizToString(dest, src) dest has Buffer %p expected %p\n", - test_num, dest_str.Buffer, app_asc2str[test_num].res_buf); - } - } -} - - -typedef struct { - int dest_Length; - int dest_MaximumLength; - int dest_buf_size; - const char *dest_buf; - int src_Length; - int src_MaximumLength; - int src_buf_size; - const char *src_buf; - int res_Length; - int res_MaximumLength; - int res_buf_size; - const char *res_buf; - NTSTATUS result; -} app_str2str_t; - -static const app_str2str_t app_str2str[] = { - { 5, 12, 15, "TestS01234abcde", 5, 5, 7, "tringZY", 10, 12, 15, "TestStringabcde", STATUS_SUCCESS}, - { 5, 11, 15, "TestS01234abcde", 5, 5, 7, "tringZY", 10, 11, 15, "TestStringabcde", STATUS_SUCCESS}, - { 5, 10, 15, "TestS01234abcde", 5, 5, 7, "tringZY", 10, 10, 15, "TestStringabcde", STATUS_SUCCESS}, - { 5, 9, 15, "TestS01234abcde", 5, 5, 7, "tringZY", 5, 9, 15, "TestS01234abcde", STATUS_BUFFER_TOO_SMALL}, - { 5, 0, 15, "TestS01234abcde", 0, 0, 7, "tringZY", 5, 0, 15, "TestS01234abcde", STATUS_SUCCESS}, - { 5, 14, 15, "TestS01234abcde", 0, 0, 7, "tringZY", 5, 14, 15, "TestS01234abcde", STATUS_SUCCESS}, - { 5, 14, 15, "TestS01234abcde", 0, 0, 7, NULL, 5, 14, 15, "TestS01234abcde", STATUS_SUCCESS}, - { 5, 14, 15, NULL, 0, 0, 7, NULL, 5, 14, 15, NULL, STATUS_SUCCESS}, - { 5, 12, 15, "Tst\0S01234abcde", 4, 4, 7, "tr\0iZY", 9, 12, 15, "Tst\0Str\0i4abcde", STATUS_SUCCESS}, -}; -#define NB_APP_STR2STR (sizeof(app_str2str)/sizeof(*app_str2str)) - - -static void test_RtlAppendStringToString(void) -{ - CHAR dest_buf[257]; - CHAR src_buf[257]; - STRING dest_str; - STRING src_str; - NTSTATUS result; - unsigned int test_num; - - for (test_num = 0; test_num < NB_APP_STR2STR; test_num++) { - dest_str.Length = app_str2str[test_num].dest_Length; - dest_str.MaximumLength = app_str2str[test_num].dest_MaximumLength; - if (app_str2str[test_num].dest_buf != NULL) { - memcpy(dest_buf, app_str2str[test_num].dest_buf, app_str2str[test_num].dest_buf_size); - dest_buf[app_str2str[test_num].dest_buf_size] = '\0'; - dest_str.Buffer = dest_buf; - } else { - dest_str.Buffer = NULL; - } - src_str.Length = app_str2str[test_num].src_Length; - src_str.MaximumLength = app_str2str[test_num].src_MaximumLength; - if (app_str2str[test_num].src_buf != NULL) { - memcpy(src_buf, app_str2str[test_num].src_buf, app_str2str[test_num].src_buf_size); - src_buf[app_str2str[test_num].src_buf_size] = '\0'; - src_str.Buffer = src_buf; - } else { - src_str.Buffer = NULL; - } - result = pRtlAppendStringToString(&dest_str, &src_str); - ok(result == app_str2str[test_num].result, - "(test %d): RtlAppendStringToString(dest, src) has result %x, expected %x\n", - test_num, result, app_str2str[test_num].result); - ok(dest_str.Length == app_str2str[test_num].res_Length, - "(test %d): RtlAppendStringToString(dest, src) dest has Length %d, expected %d\n", - test_num, dest_str.Length, app_str2str[test_num].res_Length); - ok(dest_str.MaximumLength == app_str2str[test_num].res_MaximumLength, - "(test %d): RtlAppendStringToString(dest, src) dest has MaximumLength %d, expected %d\n", - test_num, dest_str.MaximumLength, app_str2str[test_num].res_MaximumLength); - if (dest_str.Buffer == dest_buf) { - ok(memcmp(dest_buf, app_str2str[test_num].res_buf, app_str2str[test_num].res_buf_size) == 0, - "(test %d): RtlAppendStringToString(dest, src) has dest \"%s\" expected \"%s\"\n", - test_num, dest_buf, app_str2str[test_num].res_buf); - } else { - ok(dest_str.Buffer == app_str2str[test_num].res_buf, - "(test %d): RtlAppendStringToString(dest, src) dest has Buffer %p expected %p\n", - test_num, dest_str.Buffer, app_str2str[test_num].res_buf); - } - } -} - - -typedef struct { - int dest_Length; - int dest_MaximumLength; - int dest_buf_size; - const char *dest_buf; - const char *src; - int res_Length; - int res_MaximumLength; - int res_buf_size; - const char *res_buf; - NTSTATUS result; -} app_uni2str_t; - -static const app_uni2str_t app_uni2str[] = { - { 4, 12, 14, "Fake0123abcdef", "Ustr\0", 8, 12, 14, "FakeUstr\0\0cdef", STATUS_SUCCESS}, - { 4, 11, 14, "Fake0123abcdef", "Ustr\0", 8, 11, 14, "FakeUstr\0\0cdef", STATUS_SUCCESS}, - { 4, 10, 14, "Fake0123abcdef", "Ustr\0", 8, 10, 14, "FakeUstr\0\0cdef", STATUS_SUCCESS}, -/* In the following test the native function writes beyond MaximumLength - * { 4, 9, 14, "Fake0123abcdef", "Ustr\0", 8, 9, 14, "FakeUstrabcdef", STATUS_SUCCESS}, - */ - { 4, 8, 14, "Fake0123abcdef", "Ustr\0", 8, 8, 14, "FakeUstrabcdef", STATUS_SUCCESS}, - { 4, 7, 14, "Fake0123abcdef", "Ustr\0", 4, 7, 14, "Fake0123abcdef", STATUS_BUFFER_TOO_SMALL}, - { 4, 0, 14, "Fake0123abcdef", "Ustr\0", 4, 0, 14, "Fake0123abcdef", STATUS_BUFFER_TOO_SMALL}, - { 4, 14, 14, "Fake0123abcdef", "Ustr\0", 8, 14, 14, "FakeUstr\0\0cdef", STATUS_SUCCESS}, - { 4, 14, 14, "Fake0123abcdef", NULL, 4, 14, 14, "Fake0123abcdef", STATUS_SUCCESS}, - { 4, 14, 14, NULL, NULL, 4, 14, 14, NULL, STATUS_SUCCESS}, - { 4, 14, 14, "Fake0123abcdef", "U\0stri\0", 10, 14, 14, "FakeU\0stri\0\0ef", STATUS_SUCCESS}, - { 6, 14, 16, "Te\0\0stabcdefghij", "St\0\0ri", 8, 14, 16, "Te\0\0stSt\0\0efghij", STATUS_SUCCESS}, -}; -#define NB_APP_UNI2STR (sizeof(app_uni2str)/sizeof(*app_uni2str)) - - -static void test_RtlAppendUnicodeToString(void) -{ - WCHAR dest_buf[257]; - UNICODE_STRING dest_str; - NTSTATUS result; - unsigned int test_num; - - for (test_num = 0; test_num < NB_APP_UNI2STR; test_num++) { - dest_str.Length = app_uni2str[test_num].dest_Length; - dest_str.MaximumLength = app_uni2str[test_num].dest_MaximumLength; - if (app_uni2str[test_num].dest_buf != NULL) { - memcpy(dest_buf, app_uni2str[test_num].dest_buf, app_uni2str[test_num].dest_buf_size); - dest_buf[app_uni2str[test_num].dest_buf_size/sizeof(WCHAR)] = '\0'; - dest_str.Buffer = dest_buf; - } else { - dest_str.Buffer = NULL; - } - result = pRtlAppendUnicodeToString(&dest_str, (LPCWSTR) app_uni2str[test_num].src); - ok(result == app_uni2str[test_num].result, - "(test %d): RtlAppendUnicodeToString(dest, src) has result %x, expected %x\n", - test_num, result, app_uni2str[test_num].result); - ok(dest_str.Length == app_uni2str[test_num].res_Length, - "(test %d): RtlAppendUnicodeToString(dest, src) dest has Length %d, expected %d\n", - test_num, dest_str.Length, app_uni2str[test_num].res_Length); - ok(dest_str.MaximumLength == app_uni2str[test_num].res_MaximumLength, - "(test %d): RtlAppendUnicodeToString(dest, src) dest has MaximumLength %d, expected %d\n", - test_num, dest_str.MaximumLength, app_uni2str[test_num].res_MaximumLength); - if (dest_str.Buffer == dest_buf) { - ok(memcmp(dest_buf, app_uni2str[test_num].res_buf, app_uni2str[test_num].res_buf_size) == 0, - "(test %d): RtlAppendUnicodeToString(dest, src) has dest \"%s\" expected \"%s\"\n", - test_num, (char *) dest_buf, app_uni2str[test_num].res_buf); - } else { - ok(dest_str.Buffer == (WCHAR *) app_uni2str[test_num].res_buf, - "(test %d): RtlAppendUnicodeToString(dest, src) dest has Buffer %p expected %p\n", - test_num, dest_str.Buffer, app_uni2str[test_num].res_buf); - } - } -} - - -typedef struct { - int dest_Length; - int dest_MaximumLength; - int dest_buf_size; - const char *dest_buf; - int src_Length; - int src_MaximumLength; - int src_buf_size; - const char *src_buf; - int res_Length; - int res_MaximumLength; - int res_buf_size; - const char *res_buf; - NTSTATUS result; -} app_ustr2str_t; - -static const app_ustr2str_t app_ustr2str[] = { - { 4, 12, 14, "Fake0123abcdef", 4, 6, 8, "UstrZYXW", 8, 12, 14, "FakeUstr\0\0cdef", STATUS_SUCCESS}, - { 4, 11, 14, "Fake0123abcdef", 4, 6, 8, "UstrZYXW", 8, 11, 14, "FakeUstr\0\0cdef", STATUS_SUCCESS}, - { 4, 10, 14, "Fake0123abcdef", 4, 6, 8, "UstrZYXW", 8, 10, 14, "FakeUstr\0\0cdef", STATUS_SUCCESS}, -/* In the following test the native function writes beyond MaximumLength - * { 4, 9, 14, "Fake0123abcdef", 4, 6, 8, "UstrZYXW", 8, 9, 14, "FakeUstrabcdef", STATUS_SUCCESS}, - */ - { 4, 8, 14, "Fake0123abcdef", 4, 6, 8, "UstrZYXW", 8, 8, 14, "FakeUstrabcdef", STATUS_SUCCESS}, - { 4, 7, 14, "Fake0123abcdef", 4, 6, 8, "UstrZYXW", 4, 7, 14, "Fake0123abcdef", STATUS_BUFFER_TOO_SMALL}, - { 4, 0, 14, "Fake0123abcdef", 0, 0, 8, "UstrZYXW", 4, 0, 14, "Fake0123abcdef", STATUS_SUCCESS}, - { 4, 14, 14, "Fake0123abcdef", 0, 0, 8, "UstrZYXW", 4, 14, 14, "Fake0123abcdef", STATUS_SUCCESS}, - { 4, 14, 14, "Fake0123abcdef", 0, 0, 8, NULL, 4, 14, 14, "Fake0123abcdef", STATUS_SUCCESS}, - { 4, 14, 14, NULL, 0, 0, 8, NULL, 4, 14, 14, NULL, STATUS_SUCCESS}, - { 6, 14, 16, "Te\0\0stabcdefghij", 6, 8, 8, "St\0\0riZY", 12, 14, 16, "Te\0\0stSt\0\0ri\0\0ij", STATUS_SUCCESS}, -}; -#define NB_APP_USTR2STR (sizeof(app_ustr2str)/sizeof(*app_ustr2str)) - - -static void test_RtlAppendUnicodeStringToString(void) -{ - WCHAR dest_buf[257]; - WCHAR src_buf[257]; - UNICODE_STRING dest_str; - UNICODE_STRING src_str; - NTSTATUS result; - unsigned int test_num; - - for (test_num = 0; test_num < NB_APP_USTR2STR; test_num++) { - dest_str.Length = app_ustr2str[test_num].dest_Length; - dest_str.MaximumLength = app_ustr2str[test_num].dest_MaximumLength; - if (app_ustr2str[test_num].dest_buf != NULL) { - memcpy(dest_buf, app_ustr2str[test_num].dest_buf, app_ustr2str[test_num].dest_buf_size); - dest_buf[app_ustr2str[test_num].dest_buf_size/sizeof(WCHAR)] = '\0'; - dest_str.Buffer = dest_buf; - } else { - dest_str.Buffer = NULL; - } - src_str.Length = app_ustr2str[test_num].src_Length; - src_str.MaximumLength = app_ustr2str[test_num].src_MaximumLength; - if (app_ustr2str[test_num].src_buf != NULL) { - memcpy(src_buf, app_ustr2str[test_num].src_buf, app_ustr2str[test_num].src_buf_size); - src_buf[app_ustr2str[test_num].src_buf_size/sizeof(WCHAR)] = '\0'; - src_str.Buffer = src_buf; - } else { - src_str.Buffer = NULL; - } - result = pRtlAppendUnicodeStringToString(&dest_str, &src_str); - ok(result == app_ustr2str[test_num].result, - "(test %d): RtlAppendStringToString(dest, src) has result %x, expected %x\n", - test_num, result, app_ustr2str[test_num].result); - ok(dest_str.Length == app_ustr2str[test_num].res_Length, - "(test %d): RtlAppendStringToString(dest, src) dest has Length %d, expected %d\n", - test_num, dest_str.Length, app_ustr2str[test_num].res_Length); - ok(dest_str.MaximumLength == app_ustr2str[test_num].res_MaximumLength, - "(test %d): RtlAppendStringToString(dest, src) dest has MaximumLength %d, expected %d\n", - test_num, dest_str.MaximumLength, app_ustr2str[test_num].res_MaximumLength); - if (dest_str.Buffer == dest_buf) { - ok(memcmp(dest_buf, app_ustr2str[test_num].res_buf, app_ustr2str[test_num].res_buf_size) == 0, - "(test %d): RtlAppendStringToString(dest, src) has dest \"%s\" expected \"%s\"\n", - test_num, (char *) dest_buf, app_ustr2str[test_num].res_buf); - } else { - ok(dest_str.Buffer == (WCHAR *) app_ustr2str[test_num].res_buf, - "(test %d): RtlAppendStringToString(dest, src) dest has Buffer %p expected %p\n", - test_num, dest_str.Buffer, app_ustr2str[test_num].res_buf); - } - } -} - - -typedef struct { - int flags; - const char *main_str; - const char *search_chars; - USHORT pos; - NTSTATUS result; -} find_ch_in_ustr_t; - -static const find_ch_in_ustr_t find_ch_in_ustr[] = { - { 0, "Some Wild String", "S", 2, STATUS_SUCCESS}, - { 0, "This is a String", "String", 6, STATUS_SUCCESS}, - { 1, "This is a String", "String", 30, STATUS_SUCCESS}, - { 2, "This is a String", "String", 2, STATUS_SUCCESS}, - { 3, "This is a String", "String", 18, STATUS_SUCCESS}, - { 0, "This is a String", "Wild", 6, STATUS_SUCCESS}, - { 1, "This is a String", "Wild", 26, STATUS_SUCCESS}, - { 2, "This is a String", "Wild", 2, STATUS_SUCCESS}, - { 3, "This is a String", "Wild", 30, STATUS_SUCCESS}, - { 0, "abcdefghijklmnopqrstuvwxyz", "", 0, STATUS_NOT_FOUND}, - { 0, "abcdefghijklmnopqrstuvwxyz", "123", 0, STATUS_NOT_FOUND}, - { 0, "abcdefghijklmnopqrstuvwxyz", "a", 2, STATUS_SUCCESS}, - { 0, "abcdefghijklmnopqrstuvwxyz", "12a34", 2, STATUS_SUCCESS}, - { 0, "abcdefghijklmnopqrstuvwxyz", "12b34", 4, STATUS_SUCCESS}, - { 0, "abcdefghijklmnopqrstuvwxyz", "12y34", 50, STATUS_SUCCESS}, - { 0, "abcdefghijklmnopqrstuvwxyz", "12z34", 52, STATUS_SUCCESS}, - { 0, "abcdefghijklmnopqrstuvwxyz", "rvz", 36, STATUS_SUCCESS}, - { 0, "abcdefghijklmmlkjihgfedcba", "egik", 10, STATUS_SUCCESS}, - { 1, "abcdefghijklmnopqrstuvwxyz", "", 0, STATUS_NOT_FOUND}, - { 1, "abcdefghijklmnopqrstuvwxyz", "rvz", 50, STATUS_SUCCESS}, - { 1, "abcdefghijklmnopqrstuvwxyz", "ravy", 48, STATUS_SUCCESS}, - { 1, "abcdefghijklmnopqrstuvwxyz", "raxv", 46, STATUS_SUCCESS}, - { 2, "abcdefghijklmnopqrstuvwxyz", "", 2, STATUS_SUCCESS}, - { 2, "abcdefghijklmnopqrstuvwxyz", "rvz", 2, STATUS_SUCCESS}, - { 2, "abcdefghijklmnopqrstuvwxyz", "vaz", 4, STATUS_SUCCESS}, - { 2, "abcdefghijklmnopqrstuvwxyz", "ravbz", 6, STATUS_SUCCESS}, - { 3, "abcdefghijklmnopqrstuvwxyz", "", 50, STATUS_SUCCESS}, - { 3, "abcdefghijklmnopqrstuvwxyz", "123", 50, STATUS_SUCCESS}, - { 3, "abcdefghijklmnopqrstuvwxyz", "ahp", 50, STATUS_SUCCESS}, - { 3, "abcdefghijklmnopqrstuvwxyz", "rvz", 48, STATUS_SUCCESS}, - { 0, NULL, "abc", 0, STATUS_NOT_FOUND}, - { 1, NULL, "abc", 0, STATUS_NOT_FOUND}, - { 2, NULL, "abc", 0, STATUS_NOT_FOUND}, - { 3, NULL, "abc", 0, STATUS_NOT_FOUND}, - { 0, "abcdefghijklmnopqrstuvwxyz", NULL, 0, STATUS_NOT_FOUND}, - { 1, "abcdefghijklmnopqrstuvwxyz", NULL, 0, STATUS_NOT_FOUND}, - { 2, "abcdefghijklmnopqrstuvwxyz", NULL, 2, STATUS_SUCCESS}, - { 3, "abcdefghijklmnopqrstuvwxyz", NULL, 50, STATUS_SUCCESS}, - { 0, NULL, NULL, 0, STATUS_NOT_FOUND}, - { 1, NULL, NULL, 0, STATUS_NOT_FOUND}, - { 2, NULL, NULL, 0, STATUS_NOT_FOUND}, - { 3, NULL, NULL, 0, STATUS_NOT_FOUND}, - { 0, "abcdabcdabcdabcdabcdabcd", "abcd", 2, STATUS_SUCCESS}, - { 1, "abcdabcdabcdabcdabcdabcd", "abcd", 46, STATUS_SUCCESS}, - { 2, "abcdabcdabcdabcdabcdabcd", "abcd", 0, STATUS_NOT_FOUND}, - { 3, "abcdabcdabcdabcdabcdabcd", "abcd", 0, STATUS_NOT_FOUND}, -}; -#define NB_FIND_CH_IN_USTR (sizeof(find_ch_in_ustr)/sizeof(*find_ch_in_ustr)) - - -static void test_RtlFindCharInUnicodeString(void) -{ - WCHAR main_str_buf[257]; - WCHAR search_chars_buf[257]; - UNICODE_STRING main_str; - UNICODE_STRING search_chars; - USHORT pos; - NTSTATUS result; - unsigned int idx; - unsigned int test_num; - - for (test_num = 0; test_num < NB_FIND_CH_IN_USTR; test_num++) { - if (find_ch_in_ustr[test_num].main_str != NULL) { - main_str.Length = strlen(find_ch_in_ustr[test_num].main_str) * sizeof(WCHAR); - main_str.MaximumLength = main_str.Length + sizeof(WCHAR); - for (idx = 0; idx < main_str.Length / sizeof(WCHAR); idx++) { - main_str_buf[idx] = find_ch_in_ustr[test_num].main_str[idx]; - } - main_str.Buffer = main_str_buf; - } else { - main_str.Length = 0; - main_str.MaximumLength = 0; - main_str.Buffer = NULL; - } - if (find_ch_in_ustr[test_num].search_chars != NULL) { - search_chars.Length = strlen(find_ch_in_ustr[test_num].search_chars) * sizeof(WCHAR); - search_chars.MaximumLength = search_chars.Length + sizeof(WCHAR); - for (idx = 0; idx < search_chars.Length / sizeof(WCHAR); idx++) { - search_chars_buf[idx] = find_ch_in_ustr[test_num].search_chars[idx]; - } - search_chars.Buffer = search_chars_buf; - } else { - search_chars.Length = 0; - search_chars.MaximumLength = 0; - search_chars.Buffer = NULL; - } - pos = 12345; - result = pRtlFindCharInUnicodeString(find_ch_in_ustr[test_num].flags, &main_str, &search_chars, &pos); - ok(result == find_ch_in_ustr[test_num].result, - "(test %d): RtlFindCharInUnicodeString(%d, %s, %s, [out]) has result %x, expected %x\n", - test_num, find_ch_in_ustr[test_num].flags, - find_ch_in_ustr[test_num].main_str, find_ch_in_ustr[test_num].search_chars, - result, find_ch_in_ustr[test_num].result); - ok(pos == find_ch_in_ustr[test_num].pos, - "(test %d): RtlFindCharInUnicodeString(%d, %s, %s, [out]) assigns %d to pos, expected %d\n", - test_num, find_ch_in_ustr[test_num].flags, - find_ch_in_ustr[test_num].main_str, find_ch_in_ustr[test_num].search_chars, - pos, find_ch_in_ustr[test_num].pos); - } -} - - -typedef struct { - int base; - const char *str; - int value; - NTSTATUS result; -} str2int_t; - -static const str2int_t str2int[] = { - { 0, "1011101100", 1011101100, STATUS_SUCCESS}, - { 0, "1234567", 1234567, STATUS_SUCCESS}, - { 0, "-214", -214, STATUS_SUCCESS}, - { 0, "+214", 214, STATUS_SUCCESS}, /* The + sign is allowed also */ - { 0, "--214", 0, STATUS_SUCCESS}, /* Do not accept more than one sign */ - { 0, "-+214", 0, STATUS_SUCCESS}, - { 0, "++214", 0, STATUS_SUCCESS}, - { 0, "+-214", 0, STATUS_SUCCESS}, - { 0, "\001\002\003\00411", 11, STATUS_SUCCESS}, /* whitespace char 1 to 4 */ - { 0, "\005\006\007\01012", 12, STATUS_SUCCESS}, /* whitespace char 5 to 8 */ - { 0, "\011\012\013\01413", 13, STATUS_SUCCESS}, /* whitespace char 9 to 12 */ - { 0, "\015\016\017\02014", 14, STATUS_SUCCESS}, /* whitespace char 13 to 16 */ - { 0, "\021\022\023\02415", 15, STATUS_SUCCESS}, /* whitespace char 17 to 20 */ - { 0, "\025\026\027\03016", 16, STATUS_SUCCESS}, /* whitespace char 21 to 24 */ - { 0, "\031\032\033\03417", 17, STATUS_SUCCESS}, /* whitespace char 25 to 28 */ - { 0, "\035\036\037\04018", 18, STATUS_SUCCESS}, /* whitespace char 29 to 32 */ - { 0, " \n \r \t214", 214, STATUS_SUCCESS}, - { 0, " \n \r \t+214", 214, STATUS_SUCCESS}, /* Signs can be used after whitespace */ - { 0, " \n \r \t-214", -214, STATUS_SUCCESS}, - { 0, "+214 0", 214, STATUS_SUCCESS}, /* Space terminates the number */ - { 0, " 214.01", 214, STATUS_SUCCESS}, /* Decimal point not accepted */ - { 0, " 214,01", 214, STATUS_SUCCESS}, /* Decimal comma not accepted */ - { 0, "f81", 0, STATUS_SUCCESS}, - { 0, "0x12345", 0x12345, STATUS_SUCCESS}, /* Hex */ - { 0, "00x12345", 0, STATUS_SUCCESS}, - { 0, "0xx12345", 0, STATUS_SUCCESS}, - { 0, "1x34", 1, STATUS_SUCCESS}, - { 0, "-9999999999", -1410065407, STATUS_SUCCESS}, /* Big negative integer */ - { 0, "-2147483649", 2147483647, STATUS_SUCCESS}, /* Too small to fit in 32 Bits */ - { 0, "-2147483648", 0x80000000L, STATUS_SUCCESS}, /* Smallest negative integer */ - { 0, "-2147483647", -2147483647, STATUS_SUCCESS}, - { 0, "-1", -1, STATUS_SUCCESS}, - { 0, "0", 0, STATUS_SUCCESS}, - { 0, "1", 1, STATUS_SUCCESS}, - { 0, "2147483646", 2147483646, STATUS_SUCCESS}, - { 0, "2147483647", 2147483647, STATUS_SUCCESS}, /* Largest signed positive integer */ - { 0, "2147483648", 0x80000000L, STATUS_SUCCESS}, /* Positive int equal to smallest negative int */ - { 0, "2147483649", -2147483647, STATUS_SUCCESS}, - { 0, "4294967294", -2, STATUS_SUCCESS}, - { 0, "4294967295", -1, STATUS_SUCCESS}, /* Largest unsigned integer */ - { 0, "4294967296", 0, STATUS_SUCCESS}, /* Too big to fit in 32 Bits */ - { 0, "9999999999", 1410065407, STATUS_SUCCESS}, /* Big positive integer */ - { 0, "056789", 56789, STATUS_SUCCESS}, /* Leading zero and still decimal */ - { 0, "b1011101100", 0, STATUS_SUCCESS}, /* Binary (b-notation) */ - { 0, "-b1011101100", 0, STATUS_SUCCESS}, /* Negative Binary (b-notation) */ - { 0, "b10123456789", 0, STATUS_SUCCESS}, /* Binary with nonbinary digits (2-9) */ - { 0, "0b1011101100", 748, STATUS_SUCCESS}, /* Binary (0b-notation) */ - { 0, "-0b1011101100", -748, STATUS_SUCCESS}, /* Negative binary (0b-notation) */ - { 0, "0b10123456789", 5, STATUS_SUCCESS}, /* Binary with nonbinary digits (2-9) */ - { 0, "-0b10123456789", -5, STATUS_SUCCESS}, /* Negative binary with nonbinary digits (2-9) */ - { 0, "0b1", 1, STATUS_SUCCESS}, /* one digit binary */ - { 0, "0b2", 0, STATUS_SUCCESS}, /* empty binary */ - { 0, "0b", 0, STATUS_SUCCESS}, /* empty binary */ - { 0, "o1234567", 0, STATUS_SUCCESS}, /* Octal (o-notation) */ - { 0, "-o1234567", 0, STATUS_SUCCESS}, /* Negative Octal (o-notation) */ - { 0, "o56789", 0, STATUS_SUCCESS}, /* Octal with nonoctal digits (8 and 9) */ - { 0, "0o1234567", 01234567, STATUS_SUCCESS}, /* Octal (0o-notation) */ - { 0, "-0o1234567", -01234567, STATUS_SUCCESS}, /* Negative octal (0o-notation) */ - { 0, "0o56789", 0567, STATUS_SUCCESS}, /* Octal with nonoctal digits (8 and 9) */ - { 0, "-0o56789", -0567, STATUS_SUCCESS}, /* Negative octal with nonoctal digits (8 and 9) */ - { 0, "0o7", 7, STATUS_SUCCESS}, /* one digit octal */ - { 0, "0o8", 0, STATUS_SUCCESS}, /* empty octal */ - { 0, "0o", 0, STATUS_SUCCESS}, /* empty octal */ - { 0, "0d1011101100", 0, STATUS_SUCCESS}, /* explicit decimal with 0d */ - { 0, "x89abcdef", 0, STATUS_SUCCESS}, /* Hex with lower case digits a-f (x-notation) */ - { 0, "xFEDCBA00", 0, STATUS_SUCCESS}, /* Hex with upper case digits A-F (x-notation) */ - { 0, "-xFEDCBA00", 0, STATUS_SUCCESS}, /* Negative Hexadecimal (x-notation) */ - { 0, "0x89abcdef", 0x89abcdef, STATUS_SUCCESS}, /* Hex with lower case digits a-f (0x-notation) */ - { 0, "0xFEDCBA00", 0xFEDCBA00, STATUS_SUCCESS}, /* Hex with upper case digits A-F (0x-notation) */ - { 0, "-0xFEDCBA00", 19088896, STATUS_SUCCESS}, /* Negative Hexadecimal (0x-notation) */ - { 0, "0xabcdefgh", 0xabcdef, STATUS_SUCCESS}, /* Hex with illegal lower case digits (g-z) */ - { 0, "0xABCDEFGH", 0xABCDEF, STATUS_SUCCESS}, /* Hex with illegal upper case digits (G-Z) */ - { 0, "0xF", 0xf, STATUS_SUCCESS}, /* one digit hexadecimal */ - { 0, "0xG", 0, STATUS_SUCCESS}, /* empty hexadecimal */ - { 0, "0x", 0, STATUS_SUCCESS}, /* empty hexadecimal */ - { 0, "", 0, STATUS_SUCCESS}, /* empty string */ - { 2, "1011101100", 748, STATUS_SUCCESS}, - { 2, "-1011101100", -748, STATUS_SUCCESS}, - { 2, "2", 0, STATUS_SUCCESS}, - { 2, "0b1011101100", 0, STATUS_SUCCESS}, - { 2, "0o1011101100", 0, STATUS_SUCCESS}, - { 2, "0d1011101100", 0, STATUS_SUCCESS}, - { 2, "0x1011101100", 0, STATUS_SUCCESS}, - { 2, "", 0, STATUS_SUCCESS}, /* empty string */ - { 8, "1011101100", 136610368, STATUS_SUCCESS}, - { 8, "-1011101100", -136610368, STATUS_SUCCESS}, - { 8, "8", 0, STATUS_SUCCESS}, - { 8, "0b1011101100", 0, STATUS_SUCCESS}, - { 8, "0o1011101100", 0, STATUS_SUCCESS}, - { 8, "0d1011101100", 0, STATUS_SUCCESS}, - { 8, "0x1011101100", 0, STATUS_SUCCESS}, - { 8, "", 0, STATUS_SUCCESS}, /* empty string */ - {10, "1011101100", 1011101100, STATUS_SUCCESS}, - {10, "-1011101100", -1011101100, STATUS_SUCCESS}, - {10, "0b1011101100", 0, STATUS_SUCCESS}, - {10, "0o1011101100", 0, STATUS_SUCCESS}, - {10, "0d1011101100", 0, STATUS_SUCCESS}, - {10, "0x1011101100", 0, STATUS_SUCCESS}, - {10, "o12345", 0, STATUS_SUCCESS}, /* Octal although base is 10 */ - {10, "", 0, STATUS_SUCCESS}, /* empty string */ - {16, "1011101100", 286265600, STATUS_SUCCESS}, - {16, "-1011101100", -286265600, STATUS_SUCCESS}, - {16, "G", 0, STATUS_SUCCESS}, - {16, "g", 0, STATUS_SUCCESS}, - {16, "0b1011101100", 286265600, STATUS_SUCCESS}, - {16, "0o1011101100", 0, STATUS_SUCCESS}, - {16, "0d1011101100", 286265600, STATUS_SUCCESS}, - {16, "0x1011101100", 0, STATUS_SUCCESS}, - {16, "", 0, STATUS_SUCCESS}, /* empty string */ - {20, "0", 0xdeadbeef, STATUS_INVALID_PARAMETER}, /* illegal base */ - {-8, "0", 0xdeadbeef, STATUS_INVALID_PARAMETER}, /* Negative base */ -/* { 0, NULL, 0, STATUS_SUCCESS}, */ /* NULL as string */ -}; -#define NB_STR2INT (sizeof(str2int)/sizeof(*str2int)) - - -static void test_RtlUnicodeStringToInteger(void) -{ - unsigned int test_num; - int value; - NTSTATUS result; - WCHAR *wstr; - UNICODE_STRING uni; - - for (test_num = 0; test_num < NB_STR2INT; test_num++) { - wstr = AtoW(str2int[test_num].str); - value = 0xdeadbeef; - pRtlInitUnicodeString(&uni, wstr); - result = pRtlUnicodeStringToInteger(&uni, str2int[test_num].base, &value); - ok(result == str2int[test_num].result, - "(test %d): RtlUnicodeStringToInteger(\"%s\", %d, [out]) has result %x, expected: %x\n", - test_num, str2int[test_num].str, str2int[test_num].base, result, str2int[test_num].result); - ok(value == str2int[test_num].value, - "(test %d): RtlUnicodeStringToInteger(\"%s\", %d, [out]) assigns value %d, expected: %d\n", - test_num, str2int[test_num].str, str2int[test_num].base, value, str2int[test_num].value); - free(wstr); - } - - wstr = AtoW(str2int[1].str); - pRtlInitUnicodeString(&uni, wstr); - result = pRtlUnicodeStringToInteger(&uni, str2int[1].base, NULL); - ok(result == STATUS_ACCESS_VIOLATION, - "call failed: RtlUnicodeStringToInteger(\"%s\", %d, NULL) has result %x\n", - str2int[1].str, str2int[1].base, result); - result = pRtlUnicodeStringToInteger(&uni, 20, NULL); - ok(result == STATUS_INVALID_PARAMETER, - "call failed: RtlUnicodeStringToInteger(\"%s\", 20, NULL) has result %x\n", - str2int[1].str, result); - - uni.Length = 10; /* Make Length shorter (5 WCHARS instead of 7) */ - result = pRtlUnicodeStringToInteger(&uni, str2int[1].base, &value); - ok(result == STATUS_SUCCESS, - "call failed: RtlUnicodeStringToInteger(\"12345\", %d, [out]) has result %x\n", - str2int[1].base, result); - ok(value == 12345, - "didn't return expected value (test a): expected: %d, got: %d\n", - 12345, value); - - uni.Length = 5; /* Use odd Length (2.5 WCHARS) */ - result = pRtlUnicodeStringToInteger(&uni, str2int[1].base, &value); - ok(result == STATUS_SUCCESS, - "call failed: RtlUnicodeStringToInteger(\"12\", %d, [out]) has result %x\n", - str2int[1].base, result); - ok(value == 12, - "didn't return expected value (test b): expected: %d, got: %d\n", - 12, value); - - uni.Length = 2; - result = pRtlUnicodeStringToInteger(&uni, str2int[1].base, &value); - ok(result == STATUS_SUCCESS, - "call failed: RtlUnicodeStringToInteger(\"1\", %d, [out]) has result %x\n", - str2int[1].base, result); - ok(value == 1, - "didn't return expected value (test c): expected: %d, got: %d\n", - 1, value); - /* w2k: uni.Length = 0 returns value 11234567 instead of 0 */ - free(wstr); -} - - -static void test_RtlCharToInteger(void) -{ - unsigned int test_num; - int value; - NTSTATUS result; - - for (test_num = 0; test_num < NB_STR2INT; test_num++) { - /* w2k skips a leading '\0' and processes the string after */ - if (str2int[test_num].str[0] != '\0') { - value = 0xdeadbeef; - result = pRtlCharToInteger(str2int[test_num].str, str2int[test_num].base, &value); - ok(result == str2int[test_num].result, - "(test %d): call failed: RtlCharToInteger(\"%s\", %d, [out]) has result %x, expected: %x\n", - test_num, str2int[test_num].str, str2int[test_num].base, result, str2int[test_num].result); - ok(value == str2int[test_num].value, - "(test %d): call failed: RtlCharToInteger(\"%s\", %d, [out]) assigns value %d, expected: %d\n", - test_num, str2int[test_num].str, str2int[test_num].base, value, str2int[test_num].value); - } - } - - result = pRtlCharToInteger(str2int[1].str, str2int[1].base, NULL); - ok(result == STATUS_ACCESS_VIOLATION, - "call failed: RtlCharToInteger(\"%s\", %d, NULL) has result %x\n", - str2int[1].str, str2int[1].base, result); - - result = pRtlCharToInteger(str2int[1].str, 20, NULL); - ok(result == STATUS_INVALID_PARAMETER, - "call failed: RtlCharToInteger(\"%s\", 20, NULL) has result %x\n", - str2int[1].str, result); -} - - -#define STRI_BUFFER_LENGTH 35 - -typedef struct { - int base; - ULONG value; - USHORT Length; - USHORT MaximumLength; - const char *Buffer; - NTSTATUS result; -} int2str_t; - -static const int2str_t int2str[] = { - {10, 123, 3, 11, "123\0-------------------------------", STATUS_SUCCESS}, - - { 0, 0x80000000U, 10, 11, "2147483648\0------------------------", STATUS_SUCCESS}, /* min signed int */ - { 0, -2147483647, 10, 11, "2147483649\0------------------------", STATUS_SUCCESS}, - { 0, -2, 10, 11, "4294967294\0------------------------", STATUS_SUCCESS}, - { 0, -1, 10, 11, "4294967295\0------------------------", STATUS_SUCCESS}, - { 0, 0, 1, 11, "0\0---------------------------------", STATUS_SUCCESS}, - { 0, 1, 1, 11, "1\0---------------------------------", STATUS_SUCCESS}, - { 0, 12, 2, 11, "12\0--------------------------------", STATUS_SUCCESS}, - { 0, 123, 3, 11, "123\0-------------------------------", STATUS_SUCCESS}, - { 0, 1234, 4, 11, "1234\0------------------------------", STATUS_SUCCESS}, - { 0, 12345, 5, 11, "12345\0-----------------------------", STATUS_SUCCESS}, - { 0, 123456, 6, 11, "123456\0----------------------------", STATUS_SUCCESS}, - { 0, 1234567, 7, 11, "1234567\0---------------------------", STATUS_SUCCESS}, - { 0, 12345678, 8, 11, "12345678\0--------------------------", STATUS_SUCCESS}, - { 0, 123456789, 9, 11, "123456789\0-------------------------", STATUS_SUCCESS}, - { 0, 2147483646, 10, 11, "2147483646\0------------------------", STATUS_SUCCESS}, - { 0, 2147483647, 10, 11, "2147483647\0------------------------", STATUS_SUCCESS}, /* max signed int */ - { 0, 2147483648U, 10, 11, "2147483648\0------------------------", STATUS_SUCCESS}, /* uint = -max int */ - { 0, 2147483649U, 10, 11, "2147483649\0------------------------", STATUS_SUCCESS}, - { 0, 4294967294U, 10, 11, "4294967294\0------------------------", STATUS_SUCCESS}, - { 0, 4294967295U, 10, 11, "4294967295\0------------------------", STATUS_SUCCESS}, /* max unsigned int */ - - { 2, 0x80000000U, 32, 33, "10000000000000000000000000000000\0--", STATUS_SUCCESS}, /* min signed int */ - { 2, -2147483647, 32, 33, "10000000000000000000000000000001\0--", STATUS_SUCCESS}, - { 2, -2, 32, 33, "11111111111111111111111111111110\0--", STATUS_SUCCESS}, - { 2, -1, 32, 33, "11111111111111111111111111111111\0--", STATUS_SUCCESS}, - { 2, 0, 1, 33, "0\0---------------------------------", STATUS_SUCCESS}, - { 2, 1, 1, 33, "1\0---------------------------------", STATUS_SUCCESS}, - { 2, 10, 4, 33, "1010\0------------------------------", STATUS_SUCCESS}, - { 2, 100, 7, 33, "1100100\0---------------------------", STATUS_SUCCESS}, - { 2, 1000, 10, 33, "1111101000\0------------------------", STATUS_SUCCESS}, - { 2, 10000, 14, 33, "10011100010000\0--------------------", STATUS_SUCCESS}, - { 2, 32767, 15, 33, "111111111111111\0-------------------", STATUS_SUCCESS}, - { 2, 32768, 16, 33, "1000000000000000\0------------------", STATUS_SUCCESS}, - { 2, 65535, 16, 33, "1111111111111111\0------------------", STATUS_SUCCESS}, - { 2, 65536, 17, 33, "10000000000000000\0-----------------", STATUS_SUCCESS}, - { 2, 100000, 17, 33, "11000011010100000\0-----------------", STATUS_SUCCESS}, - { 2, 1000000, 20, 33, "11110100001001000000\0--------------", STATUS_SUCCESS}, - { 2, 10000000, 24, 33, "100110001001011010000000\0----------", STATUS_SUCCESS}, - { 2, 100000000, 27, 33, "101111101011110000100000000\0-------", STATUS_SUCCESS}, - { 2, 1000000000, 30, 33, "111011100110101100101000000000\0----", STATUS_SUCCESS}, - { 2, 1073741823, 30, 33, "111111111111111111111111111111\0----", STATUS_SUCCESS}, - { 2, 2147483646, 31, 33, "1111111111111111111111111111110\0---", STATUS_SUCCESS}, - { 2, 2147483647, 31, 33, "1111111111111111111111111111111\0---", STATUS_SUCCESS}, /* max signed int */ - { 2, 2147483648U, 32, 33, "10000000000000000000000000000000\0--", STATUS_SUCCESS}, /* uint = -max int */ - { 2, 2147483649U, 32, 33, "10000000000000000000000000000001\0--", STATUS_SUCCESS}, - { 2, 4294967294U, 32, 33, "11111111111111111111111111111110\0--", STATUS_SUCCESS}, - { 2, 4294967295U, 32, 33, "11111111111111111111111111111111\0--", STATUS_SUCCESS}, /* max unsigned int */ - - { 8, 0x80000000U, 11, 12, "20000000000\0-----------------------", STATUS_SUCCESS}, /* min signed int */ - { 8, -2147483647, 11, 12, "20000000001\0-----------------------", STATUS_SUCCESS}, - { 8, -2, 11, 12, "37777777776\0-----------------------", STATUS_SUCCESS}, - { 8, -1, 11, 12, "37777777777\0-----------------------", STATUS_SUCCESS}, - { 8, 0, 1, 12, "0\0---------------------------------", STATUS_SUCCESS}, - { 8, 1, 1, 12, "1\0---------------------------------", STATUS_SUCCESS}, - { 8, 2147483646, 11, 12, "17777777776\0-----------------------", STATUS_SUCCESS}, - { 8, 2147483647, 11, 12, "17777777777\0-----------------------", STATUS_SUCCESS}, /* max signed int */ - { 8, 2147483648U, 11, 12, "20000000000\0-----------------------", STATUS_SUCCESS}, /* uint = -max int */ - { 8, 2147483649U, 11, 12, "20000000001\0-----------------------", STATUS_SUCCESS}, - { 8, 4294967294U, 11, 12, "37777777776\0-----------------------", STATUS_SUCCESS}, - { 8, 4294967295U, 11, 12, "37777777777\0-----------------------", STATUS_SUCCESS}, /* max unsigned int */ - - {10, 0x80000000U, 10, 11, "2147483648\0------------------------", STATUS_SUCCESS}, /* min signed int */ - {10, -2147483647, 10, 11, "2147483649\0------------------------", STATUS_SUCCESS}, - {10, -2, 10, 11, "4294967294\0------------------------", STATUS_SUCCESS}, - {10, -1, 10, 11, "4294967295\0------------------------", STATUS_SUCCESS}, - {10, 0, 1, 11, "0\0---------------------------------", STATUS_SUCCESS}, - {10, 1, 1, 11, "1\0---------------------------------", STATUS_SUCCESS}, - {10, 2147483646, 10, 11, "2147483646\0------------------------", STATUS_SUCCESS}, - {10, 2147483647, 10, 11, "2147483647\0------------------------", STATUS_SUCCESS}, /* max signed int */ - {10, 2147483648U, 10, 11, "2147483648\0------------------------", STATUS_SUCCESS}, /* uint = -max int */ - {10, 2147483649U, 10, 11, "2147483649\0------------------------", STATUS_SUCCESS}, - {10, 4294967294U, 10, 11, "4294967294\0------------------------", STATUS_SUCCESS}, - {10, 4294967295U, 10, 11, "4294967295\0------------------------", STATUS_SUCCESS}, /* max unsigned int */ - - {16, 0x80000000U, 8, 9, "80000000\0--------------------------", STATUS_SUCCESS}, /* min signed int */ - {16, -2147483647, 8, 9, "80000001\0--------------------------", STATUS_SUCCESS}, - {16, -2, 8, 9, "FFFFFFFE\0--------------------------", STATUS_SUCCESS}, - {16, -1, 8, 9, "FFFFFFFF\0--------------------------", STATUS_SUCCESS}, - {16, 0, 1, 9, "0\0---------------------------------", STATUS_SUCCESS}, - {16, 1, 1, 9, "1\0---------------------------------", STATUS_SUCCESS}, - {16, 2147483646, 8, 9, "7FFFFFFE\0--------------------------", STATUS_SUCCESS}, - {16, 2147483647, 8, 9, "7FFFFFFF\0--------------------------", STATUS_SUCCESS}, /* max signed int */ - {16, 2147483648U, 8, 9, "80000000\0--------------------------", STATUS_SUCCESS}, /* uint = -max int */ - {16, 2147483649U, 8, 9, "80000001\0--------------------------", STATUS_SUCCESS}, - {16, 4294967294U, 8, 9, "FFFFFFFE\0--------------------------", STATUS_SUCCESS}, - {16, 4294967295U, 8, 9, "FFFFFFFF\0--------------------------", STATUS_SUCCESS}, /* max unsigned int */ - - { 2, 32768, 16, 17, "1000000000000000\0------------------", STATUS_SUCCESS}, - { 2, 32768, 16, 16, "1000000000000000-------------------", STATUS_SUCCESS}, - { 2, 65536, 17, 18, "10000000000000000\0-----------------", STATUS_SUCCESS}, - { 2, 65536, 17, 17, "10000000000000000------------------", STATUS_SUCCESS}, - { 2, 131072, 18, 19, "100000000000000000\0----------------", STATUS_SUCCESS}, - { 2, 131072, 18, 18, "100000000000000000-----------------", STATUS_SUCCESS}, - {16, 0xffffffff, 8, 9, "FFFFFFFF\0--------------------------", STATUS_SUCCESS}, - {16, 0xffffffff, 8, 8, "FFFFFFFF---------------------------", STATUS_SUCCESS}, /* No \0 term */ - {16, 0xffffffff, 8, 7, "-----------------------------------", STATUS_BUFFER_OVERFLOW}, /* Too short */ - {16, 0xa, 1, 2, "A\0---------------------------------", STATUS_SUCCESS}, - {16, 0xa, 1, 1, "A----------------------------------", STATUS_SUCCESS}, /* No \0 term */ - {16, 0, 1, 0, "-----------------------------------", STATUS_BUFFER_OVERFLOW}, - {20, 0xdeadbeef, 0, 9, "-----------------------------------", STATUS_INVALID_PARAMETER}, /* ill. base */ - {-8, 07654321, 0, 12, "-----------------------------------", STATUS_INVALID_PARAMETER}, /* neg. base */ -}; -#define NB_INT2STR (sizeof(int2str)/sizeof(*int2str)) - - -static void one_RtlIntegerToUnicodeString_test(int test_num, const int2str_t *int2str) -{ - int pos; - WCHAR expected_str_Buffer[STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING expected_unicode_string; - STRING expected_ansi_str; - WCHAR str_Buffer[STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING unicode_string; - STRING ansi_str; - NTSTATUS result; - - for (pos = 0; pos < STRI_BUFFER_LENGTH; pos++) { - expected_str_Buffer[pos] = int2str->Buffer[pos]; - } - expected_unicode_string.Length = int2str->Length * sizeof(WCHAR); - expected_unicode_string.MaximumLength = int2str->MaximumLength * sizeof(WCHAR); - expected_unicode_string.Buffer = expected_str_Buffer; - pRtlUnicodeStringToAnsiString(&expected_ansi_str, &expected_unicode_string, 1); - - for (pos = 0; pos < STRI_BUFFER_LENGTH; pos++) { - str_Buffer[pos] = '-'; - } - unicode_string.Length = 0; - unicode_string.MaximumLength = int2str->MaximumLength * sizeof(WCHAR); - unicode_string.Buffer = str_Buffer; - - result = pRtlIntegerToUnicodeString(int2str->value, int2str->base, &unicode_string); - pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); - if (result == STATUS_BUFFER_OVERFLOW) { - /* On BUFFER_OVERFLOW the string Buffer should be unchanged */ - for (pos = 0; pos < STRI_BUFFER_LENGTH; pos++) { - expected_str_Buffer[pos] = '-'; - } - /* w2k: The native function has two reasons for BUFFER_OVERFLOW: */ - /* If the value is too large to convert: The Length is unchanged */ - /* If str is too small to hold the string: Set str->Length to the length */ - /* the string would have (which can be larger than the MaximumLength). */ - /* To allow all this in the tests we do the following: */ - if (expected_unicode_string.Length > 32 && unicode_string.Length == 0) { - /* The value is too large to convert only triggerd when testing native */ - expected_unicode_string.Length = 0; - } - } else { - ok(result == int2str->result, - "(test %d): RtlIntegerToUnicodeString(%u, %d, [out]) has result %x, expected: %x\n", - test_num, int2str->value, int2str->base, result, int2str->result); - if (result == STATUS_SUCCESS) { - ok(unicode_string.Buffer[unicode_string.Length/sizeof(WCHAR)] == '\0', - "(test %d): RtlIntegerToUnicodeString(%u, %d, [out]) string \"%s\" is not NULL terminated\n", - test_num, int2str->value, int2str->base, ansi_str.Buffer); - } - } - ok(memcmp(unicode_string.Buffer, expected_unicode_string.Buffer, STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, - "(test %d): RtlIntegerToUnicodeString(%u, %d, [out]) assigns string \"%s\", expected: \"%s\"\n", - test_num, int2str->value, int2str->base, ansi_str.Buffer, expected_ansi_str.Buffer); - ok(unicode_string.Length == expected_unicode_string.Length, - "(test %d): RtlIntegerToUnicodeString(%u, %d, [out]) string has Length %d, expected: %d\n", - test_num, int2str->value, int2str->base, unicode_string.Length, expected_unicode_string.Length); - ok(unicode_string.MaximumLength == expected_unicode_string.MaximumLength, - "(test %d): RtlIntegerToUnicodeString(%u, %d, [out]) string has MaximumLength %d, expected: %d\n", - test_num, int2str->value, int2str->base, unicode_string.MaximumLength, expected_unicode_string.MaximumLength); - pRtlFreeAnsiString(&expected_ansi_str); - pRtlFreeAnsiString(&ansi_str); -} - - -static void test_RtlIntegerToUnicodeString(void) -{ - size_t test_num; - - for (test_num = 0; test_num < NB_INT2STR; test_num++) - one_RtlIntegerToUnicodeString_test(test_num, &int2str[test_num]); -} - - -static void one_RtlIntegerToChar_test(int test_num, const int2str_t *int2str) -{ - NTSTATUS result; - char dest_str[STRI_BUFFER_LENGTH + 1]; - - memset(dest_str, '-', STRI_BUFFER_LENGTH); - dest_str[STRI_BUFFER_LENGTH] = '\0'; - result = pRtlIntegerToChar(int2str->value, int2str->base, int2str->MaximumLength, dest_str); - ok(result == int2str->result, - "(test %d): RtlIntegerToChar(%u, %d, %d, [out]) has result %x, expected: %x\n", - test_num, int2str->value, int2str->base, int2str->MaximumLength, result, int2str->result); - ok(memcmp(dest_str, int2str->Buffer, STRI_BUFFER_LENGTH) == 0, - "(test %d): RtlIntegerToChar(%u, %d, %d, [out]) assigns string \"%s\", expected: \"%s\"\n", - test_num, int2str->value, int2str->base, int2str->MaximumLength, dest_str, int2str->Buffer); -} - - -static void test_RtlIntegerToChar(void) -{ - NTSTATUS result; - size_t test_num; - - for (test_num = 0; test_num < NB_INT2STR; test_num++) - one_RtlIntegerToChar_test(test_num, &int2str[test_num]); - - result = pRtlIntegerToChar(int2str[0].value, 20, int2str[0].MaximumLength, NULL); - ok(result == STATUS_INVALID_PARAMETER, - "(test a): RtlIntegerToChar(%u, %d, %d, NULL) has result %x, expected: %x\n", - int2str[0].value, 20, int2str[0].MaximumLength, result, STATUS_INVALID_PARAMETER); - - result = pRtlIntegerToChar(int2str[0].value, 20, 0, NULL); - ok(result == STATUS_INVALID_PARAMETER, - "(test b): RtlIntegerToChar(%u, %d, %d, NULL) has result %x, expected: %x\n", - int2str[0].value, 20, 0, result, STATUS_INVALID_PARAMETER); - - result = pRtlIntegerToChar(int2str[0].value, int2str[0].base, 0, NULL); - ok(result == STATUS_BUFFER_OVERFLOW, - "(test c): RtlIntegerToChar(%u, %d, %d, NULL) has result %x, expected: %x\n", - int2str[0].value, int2str[0].base, 0, result, STATUS_BUFFER_OVERFLOW); - - result = pRtlIntegerToChar(int2str[0].value, int2str[0].base, int2str[0].MaximumLength, NULL); - ok(result == STATUS_ACCESS_VIOLATION, - "(test d): RtlIntegerToChar(%u, %d, %d, NULL) has result %x, expected: %x\n", - int2str[0].value, int2str[0].base, int2str[0].MaximumLength, result, STATUS_ACCESS_VIOLATION); -} - -static void test_RtlIsTextUnicode(void) -{ - char ascii[] = "A simple string"; - WCHAR unicode[] = {'A',' ','U','n','i','c','o','d','e',' ','s','t','r','i','n','g',0}; - WCHAR *be_unicode; - int flags; - int i; - - ok(!pRtlIsTextUnicode(ascii, sizeof(ascii), NULL), "ASCII text detected as Unicode\n"); - - ok(pRtlIsTextUnicode(unicode, sizeof(unicode), NULL), "Text should be Unicode\n"); - ok(!pRtlIsTextUnicode(unicode, sizeof(unicode) - 1, NULL), "Text should be Unicode\n"); - - flags = IS_TEXT_UNICODE_UNICODE_MASK; - ok(pRtlIsTextUnicode(unicode, sizeof(unicode), &flags), "Text should not pass a Unicode\n"); - todo_wine - ok(flags == (IS_TEXT_UNICODE_STATISTICS | IS_TEXT_UNICODE_CONTROLS), - "Expected flags 0x6, obtained %x\n", flags); - - flags = IS_TEXT_UNICODE_REVERSE_MASK; - ok(!pRtlIsTextUnicode(unicode, sizeof(unicode), &flags), "Text should not pass reverse Unicode tests\n"); - ok(flags == 0, "Expected flags 0, obtained %x\n", flags); - - flags = IS_TEXT_UNICODE_ODD_LENGTH; - ok(!pRtlIsTextUnicode(unicode, sizeof(unicode) - 1, &flags), "Odd length test should have passed\n"); - ok(flags == IS_TEXT_UNICODE_ODD_LENGTH, "Expected flags 0x200, obtained %x\n", flags); - - be_unicode = HeapAlloc(GetProcessHeap(), 0, sizeof(unicode) + sizeof(WCHAR)); - be_unicode[0] = 0xfffe; - for (i = 0; i < sizeof(unicode)/sizeof(unicode[0]); i++) - { - be_unicode[i + 1] = (unicode[i] >> 8) | ((unicode[i] & 0xff) << 8); - } - ok(!pRtlIsTextUnicode(be_unicode, sizeof(unicode) + 2, NULL), "Reverse endian should not be Unicode\n"); - todo_wine ok(!pRtlIsTextUnicode(&be_unicode[1], sizeof(unicode), NULL), "Reverse endian should not be Unicode\n"); - - flags = IS_TEXT_UNICODE_REVERSE_MASK; - ok(!pRtlIsTextUnicode(&be_unicode[1], sizeof(unicode), &flags), "Reverse endian should be Unicode\n"); - todo_wine - ok(flags == (IS_TEXT_UNICODE_REVERSE_ASCII16 | IS_TEXT_UNICODE_REVERSE_STATISTICS | IS_TEXT_UNICODE_REVERSE_CONTROLS), - "Expected flags 0x70, obtained %x\n", flags); - - flags = IS_TEXT_UNICODE_REVERSE_MASK; - ok(!pRtlIsTextUnicode(be_unicode, sizeof(unicode) + 2, &flags), "Reverse endian should be Unicode\n"); - todo_wine - ok(flags == (IS_TEXT_UNICODE_REVERSE_CONTROLS | IS_TEXT_UNICODE_REVERSE_SIGNATURE), - "Expected flags 0xc0, obtained %x\n", flags); - HeapFree(GetProcessHeap(), 0, be_unicode); -} - -static const WCHAR szGuid[] = { '{','0','1','0','2','0','3','0','4','-', - '0','5','0','6','-' ,'0','7','0','8','-','0','9','0','A','-', - '0','B','0','C','0','D','0','E','0','F','0','A','}','\0' }; -static const WCHAR szGuid2[] = { '{','0','1','0','2','0','3','0','4','-', - '0','5','0','6','-' ,'0','7','0','8','-','0','9','0','A','-', - '0','B','0','C','0','D','0','E','0','F','0','A',']','\0' }; -DEFINE_GUID(IID_Endianess, 0x01020304, 0x0506, 0x0708, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, 0x0A); - -static void test_RtlGUIDFromString(void) -{ - GUID guid; - UNICODE_STRING str; - NTSTATUS ret; - - str.Length = str.MaximumLength = sizeof(szGuid) - sizeof(WCHAR); - str.Buffer = (LPWSTR)szGuid; - - ret = pRtlGUIDFromString(&str, &guid); - ok(ret == 0, "expected ret=0, got 0x%0x\n", ret); - ok(memcmp(&guid, &IID_Endianess, sizeof(guid)) == 0, "Endianess broken\n"); - - str.Length = str.MaximumLength = sizeof(szGuid2) - sizeof(WCHAR); - str.Buffer = (LPWSTR)szGuid2; - - ret = pRtlGUIDFromString(&str, &guid); - ok(ret, "expected ret!=0\n"); -} - -static void test_RtlStringFromGUID(void) -{ - UNICODE_STRING str; - NTSTATUS ret; - - str.Length = str.MaximumLength = 0; - str.Buffer = NULL; - - ret = pRtlStringFromGUID(&IID_Endianess, &str); - ok(ret == 0, "expected ret=0, got 0x%0x\n", ret); - ok(str.Buffer && !lstrcmpiW(str.Buffer, szGuid), "Endianess broken\n"); -} - -START_TEST(rtlstr) -{ - InitFunctionPtrs(); - if (pRtlInitAnsiString) { - test_RtlInitString(); - test_RtlInitUnicodeString(); - test_RtlCopyString(); - test_RtlUnicodeStringToInteger(); - test_RtlCharToInteger(); - test_RtlIntegerToUnicodeString(); - test_RtlIntegerToChar(); - test_RtlUpperChar(); - test_RtlUpperString(); - test_RtlUnicodeStringToAnsiString(); - test_RtlAppendAsciizToString(); - test_RtlAppendStringToString(); - test_RtlAppendUnicodeToString(); - test_RtlAppendUnicodeStringToString(); - } - - if (pRtlInitUnicodeStringEx) - test_RtlInitUnicodeStringEx(); - if (pRtlDuplicateUnicodeString) - test_RtlDuplicateUnicodeString(); - if (pRtlFindCharInUnicodeString) - test_RtlFindCharInUnicodeString(); - if (pRtlGUIDFromString) - test_RtlGUIDFromString(); - if (pRtlStringFromGUID) - test_RtlStringFromGUID(); - if (pRtlIsTextUnicode) - test_RtlIsTextUnicode(); - if(0) - { - test_RtlUpcaseUnicodeChar(); - test_RtlUpcaseUnicodeString(); - test_RtlDowncaseUnicodeString(); - } -} diff --git a/rostests/winetests/ntdll/string.c b/rostests/winetests/ntdll/string.c deleted file mode 100755 index e9bf5e10704..00000000000 --- a/rostests/winetests/ntdll/string.c +++ /dev/null @@ -1,1098 +0,0 @@ -/* Unit test suite for string functions and some wcstring functions - * - * 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 - * - * NOTES - * We use function pointers here as there is no import library for NTDLL on - * windows. - */ - -#include - -#include "ntdll_test.h" - - -/* Function ptrs for ntdll calls */ -static HMODULE hntdll = 0; -static NTSTATUS (WINAPI *pRtlUnicodeStringToAnsiString)(STRING *, const UNICODE_STRING *, BOOLEAN); -static VOID (WINAPI *pRtlFreeAnsiString)(PSTRING); -static BOOLEAN (WINAPI *pRtlCreateUnicodeStringFromAsciiz)(PUNICODE_STRING,LPCSTR); -static VOID (WINAPI *pRtlFreeUnicodeString)(PUNICODE_STRING); - -static int (WINAPIV *patoi)(const char *); -static long (WINAPIV *patol)(const char *); -static LONGLONG (WINAPIV *p_atoi64)(const char *); -static LPSTR (WINAPIV *p_itoa)(int, LPSTR, INT); -static LPSTR (WINAPIV *p_ltoa)(long, LPSTR, INT); -static LPSTR (WINAPIV *p_ultoa)(unsigned long, LPSTR, INT); -static LPSTR (WINAPIV *p_i64toa)(LONGLONG, LPSTR, INT); -static LPSTR (WINAPIV *p_ui64toa)(ULONGLONG, LPSTR, INT); - -static int (WINAPIV *p_wtoi)(LPWSTR); -static long (WINAPIV *p_wtol)(LPWSTR); -static LONGLONG (WINAPIV *p_wtoi64)(LPWSTR); -static LPWSTR (WINAPIV *p_itow)(int, LPWSTR, int); -static LPWSTR (WINAPIV *p_ltow)(long, LPWSTR, INT); -static LPWSTR (WINAPIV *p_ultow)(unsigned long, LPWSTR, INT); -static LPWSTR (WINAPIV *p_i64tow)(LONGLONG, LPWSTR, INT); -static LPWSTR (WINAPIV *p_ui64tow)(ULONGLONG, LPWSTR, INT); - -static long (WINAPIV *pwcstol)(LPCWSTR, LPWSTR *, INT); -static ULONG (WINAPIV *pwcstoul)(LPCWSTR, LPWSTR *, INT); - -static LPWSTR (WINAPIV *p_wcschr)(LPCWSTR, WCHAR); -static LPWSTR (WINAPIV *p_wcsrchr)(LPCWSTR, WCHAR); - -static void InitFunctionPtrs(void) -{ - hntdll = LoadLibraryA("ntdll.dll"); - ok(hntdll != 0, "LoadLibrary failed\n"); - if (hntdll) { - pRtlUnicodeStringToAnsiString = (void *)GetProcAddress(hntdll, "RtlUnicodeStringToAnsiString"); - pRtlFreeAnsiString = (void *)GetProcAddress(hntdll, "RtlFreeAnsiString"); - pRtlCreateUnicodeStringFromAsciiz = (void *)GetProcAddress(hntdll, "RtlCreateUnicodeStringFromAsciiz"); - pRtlFreeUnicodeString = (void *)GetProcAddress(hntdll, "RtlFreeUnicodeString"); - - patoi = (void *)GetProcAddress(hntdll, "atoi"); - patol = (void *)GetProcAddress(hntdll, "atol"); - p_atoi64 = (void *)GetProcAddress(hntdll, "_atoi64"); - p_itoa = (void *)GetProcAddress(hntdll, "_itoa"); - p_ltoa = (void *)GetProcAddress(hntdll, "_ltoa"); - p_ultoa = (void *)GetProcAddress(hntdll, "_ultoa"); - p_i64toa = (void *)GetProcAddress(hntdll, "_i64toa"); - p_ui64toa = (void *)GetProcAddress(hntdll, "_ui64toa"); - - p_wtoi = (void *)GetProcAddress(hntdll, "_wtoi"); - p_wtol = (void *)GetProcAddress(hntdll, "_wtol"); - p_wtoi64 = (void *)GetProcAddress(hntdll, "_wtoi64"); - p_itow = (void *)GetProcAddress(hntdll, "_itow"); - p_ltow = (void *)GetProcAddress(hntdll, "_ltow"); - p_ultow = (void *)GetProcAddress(hntdll, "_ultow"); - p_i64tow = (void *)GetProcAddress(hntdll, "_i64tow"); - p_ui64tow = (void *)GetProcAddress(hntdll, "_ui64tow"); - - pwcstol = (void *)GetProcAddress(hntdll, "wcstol"); - pwcstoul = (void *)GetProcAddress(hntdll, "wcstoul"); - - p_wcschr= (void *)GetProcAddress(hntdll, "wcschr"); - p_wcsrchr= (void *)GetProcAddress(hntdll, "wcsrchr"); - } /* if */ -} - - -#define LARGE_STRI_BUFFER_LENGTH 67 - -typedef struct { - int base; - ULONG value; - const char *Buffer; - int mask; /* ntdll/msvcrt: 0x01=itoa, 0x02=ltoa, 0x04=ultoa */ - /* 0x10=itow, 0x20=ltow, 0x40=ultow */ -} ulong2str_t; - -static const ulong2str_t ulong2str[] = { - {10, 123, "123\0---------------------------------------------------------------", 0x77}, - - { 2, 0x80000000U, "10000000000000000000000000000000\0----------------------------------", 0x67}, - { 2, -2147483647, "10000000000000000000000000000001\0----------------------------------", 0x67}, - { 2, -65537, "11111111111111101111111111111111\0----------------------------------", 0x67}, - { 2, -65536, "11111111111111110000000000000000\0----------------------------------", 0x67}, - { 2, -65535, "11111111111111110000000000000001\0----------------------------------", 0x67}, - { 2, -32768, "11111111111111111000000000000000\0----------------------------------", 0x67}, - { 2, -32767, "11111111111111111000000000000001\0----------------------------------", 0x67}, - { 2, -2, "11111111111111111111111111111110\0----------------------------------", 0x67}, - { 2, -1, "11111111111111111111111111111111\0----------------------------------", 0x67}, - { 2, 0, "0\0-----------------------------------------------------------------", 0x77}, - { 2, 1, "1\0-----------------------------------------------------------------", 0x77}, - { 2, 10, "1010\0--------------------------------------------------------------", 0x77}, - { 2, 100, "1100100\0-----------------------------------------------------------", 0x77}, - { 2, 1000, "1111101000\0--------------------------------------------------------", 0x77}, - { 2, 10000, "10011100010000\0----------------------------------------------------", 0x77}, - { 2, 32767, "111111111111111\0---------------------------------------------------", 0x77}, - { 2, 32768, "1000000000000000\0--------------------------------------------------", 0x77}, - { 2, 65535, "1111111111111111\0--------------------------------------------------", 0x77}, - { 2, 100000, "11000011010100000\0-------------------------------------------------", 0x77}, - { 2, 234567, "111001010001000111\0------------------------------------------------", 0x77}, - { 2, 300000, "1001001001111100000\0-----------------------------------------------", 0x77}, - { 2, 524287, "1111111111111111111\0-----------------------------------------------", 0x77}, - { 2, 524288, "10000000000000000000\0----------------------------------------------", 0x67}, - { 2, 1000000, "11110100001001000000\0----------------------------------------------", 0x67}, - { 2, 10000000, "100110001001011010000000\0------------------------------------------", 0x67}, - { 2, 100000000, "101111101011110000100000000\0---------------------------------------", 0x67}, - { 2, 1000000000, "111011100110101100101000000000\0------------------------------------", 0x67}, - { 2, 1073741823, "111111111111111111111111111111\0------------------------------------", 0x67}, - { 2, 2147483646, "1111111111111111111111111111110\0-----------------------------------", 0x67}, - { 2, 2147483647, "1111111111111111111111111111111\0-----------------------------------", 0x67}, - { 2, 2147483648U, "10000000000000000000000000000000\0----------------------------------", 0x67}, - { 2, 2147483649U, "10000000000000000000000000000001\0----------------------------------", 0x67}, - { 2, 4294967294U, "11111111111111111111111111111110\0----------------------------------", 0x67}, - { 2, 0xFFFFFFFF, "11111111111111111111111111111111\0----------------------------------", 0x67}, - - { 8, 0x80000000U, "20000000000\0-------------------------------------------------------", 0x77}, - { 8, -2147483647, "20000000001\0-------------------------------------------------------", 0x77}, - { 8, -2, "37777777776\0-------------------------------------------------------", 0x77}, - { 8, -1, "37777777777\0-------------------------------------------------------", 0x77}, - { 8, 0, "0\0-----------------------------------------------------------------", 0x77}, - { 8, 1, "1\0-----------------------------------------------------------------", 0x77}, - { 8, 2147483646, "17777777776\0-------------------------------------------------------", 0x77}, - { 8, 2147483647, "17777777777\0-------------------------------------------------------", 0x77}, - { 8, 2147483648U, "20000000000\0-------------------------------------------------------", 0x77}, - { 8, 2147483649U, "20000000001\0-------------------------------------------------------", 0x77}, - { 8, 4294967294U, "37777777776\0-------------------------------------------------------", 0x77}, - { 8, 4294967295U, "37777777777\0-------------------------------------------------------", 0x77}, - - {10, 0x80000000U, "-2147483648\0-------------------------------------------------------", 0x33}, - {10, 0x80000000U, "2147483648\0--------------------------------------------------------", 0x44}, - {10, -2147483647, "-2147483647\0-------------------------------------------------------", 0x33}, - {10, -2147483647, "2147483649\0--------------------------------------------------------", 0x44}, - {10, -2, "-2\0----------------------------------------------------------------", 0x33}, - {10, -2, "4294967294\0--------------------------------------------------------", 0x44}, - {10, -1, "-1\0----------------------------------------------------------------", 0x33}, - {10, -1, "4294967295\0--------------------------------------------------------", 0x44}, - {10, 0, "0\0-----------------------------------------------------------------", 0x77}, - {10, 1, "1\0-----------------------------------------------------------------", 0x77}, - {10, 12, "12\0----------------------------------------------------------------", 0x77}, - {10, 123, "123\0---------------------------------------------------------------", 0x77}, - {10, 1234, "1234\0--------------------------------------------------------------", 0x77}, - {10, 12345, "12345\0-------------------------------------------------------------", 0x77}, - {10, 123456, "123456\0------------------------------------------------------------", 0x77}, - {10, 1234567, "1234567\0-----------------------------------------------------------", 0x77}, - {10, 12345678, "12345678\0----------------------------------------------------------", 0x77}, - {10, 123456789, "123456789\0---------------------------------------------------------", 0x77}, - {10, 2147483646, "2147483646\0--------------------------------------------------------", 0x77}, - {10, 2147483647, "2147483647\0--------------------------------------------------------", 0x77}, - {10, 2147483648U, "-2147483648\0-------------------------------------------------------", 0x33}, - {10, 2147483648U, "2147483648\0--------------------------------------------------------", 0x44}, - {10, 2147483649U, "-2147483647\0-------------------------------------------------------", 0x33}, - {10, 2147483649U, "2147483649\0--------------------------------------------------------", 0x44}, - {10, 4294967294U, "-2\0----------------------------------------------------------------", 0x33}, - {10, 4294967294U, "4294967294\0--------------------------------------------------------", 0x44}, - {10, 4294967295U, "-1\0----------------------------------------------------------------", 0x33}, - {10, 4294967295U, "4294967295\0--------------------------------------------------------", 0x44}, - - {16, 0, "0\0-----------------------------------------------------------------", 0x77}, - {16, 1, "1\0-----------------------------------------------------------------", 0x77}, - {16, 2147483646, "7ffffffe\0----------------------------------------------------------", 0x77}, - {16, 2147483647, "7fffffff\0----------------------------------------------------------", 0x77}, - {16, 0x80000000, "80000000\0----------------------------------------------------------", 0x77}, - {16, 0x80000001, "80000001\0----------------------------------------------------------", 0x77}, - {16, 0xFFFFFFFE, "fffffffe\0----------------------------------------------------------", 0x77}, - {16, 0xFFFFFFFF, "ffffffff\0----------------------------------------------------------", 0x77}, - - { 2, 32768, "1000000000000000\0--------------------------------------------------", 0x77}, - { 2, 65536, "10000000000000000\0-------------------------------------------------", 0x77}, - { 2, 131072, "100000000000000000\0------------------------------------------------", 0x77}, - {16, 0xffffffff, "ffffffff\0----------------------------------------------------------", 0x77}, - {16, 0xa, "a\0-----------------------------------------------------------------", 0x77}, - {16, 0, "0\0-----------------------------------------------------------------", 0x77}, - {20, 3368421, "111111\0------------------------------------------------------------", 0x77}, - {36, 62193781, "111111\0------------------------------------------------------------", 0x77}, - {37, 71270178, "111111\0------------------------------------------------------------", 0x77}, -}; -#define NB_ULONG2STR (sizeof(ulong2str)/sizeof(*ulong2str)) - - -static void one_itoa_test(int test_num, const ulong2str_t *ulong2str) -{ - char dest_str[LARGE_STRI_BUFFER_LENGTH + 1]; - int value; - LPSTR result; - - memset(dest_str, '-', LARGE_STRI_BUFFER_LENGTH); - dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0'; - value = ulong2str->value; - result = p_itoa(value, dest_str, ulong2str->base); - ok(result == dest_str, - "(test %d): _itoa(%d, [out], %d) has result %p, expected: %p\n", - test_num, value, ulong2str->base, result, dest_str); - ok(memcmp(dest_str, ulong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0, - "(test %d): _itoa(%d, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, value, ulong2str->base, dest_str, ulong2str->Buffer); -} - - -static void one_ltoa_test(int test_num, const ulong2str_t *ulong2str) -{ - char dest_str[LARGE_STRI_BUFFER_LENGTH + 1]; - long value; - LPSTR result; - - memset(dest_str, '-', LARGE_STRI_BUFFER_LENGTH); - dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0'; - value = ulong2str->value; - result = p_ltoa(ulong2str->value, dest_str, ulong2str->base); - ok(result == dest_str, - "(test %d): _ltoa(%ld, [out], %d) has result %p, expected: %p\n", - test_num, value, ulong2str->base, result, dest_str); - ok(memcmp(dest_str, ulong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0, - "(test %d): _ltoa(%ld, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, value, ulong2str->base, dest_str, ulong2str->Buffer); -} - - -static void one_ultoa_test(int test_num, const ulong2str_t *ulong2str) -{ - char dest_str[LARGE_STRI_BUFFER_LENGTH + 1]; - unsigned long value; - LPSTR result; - - memset(dest_str, '-', LARGE_STRI_BUFFER_LENGTH); - dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0'; - value = ulong2str->value; - result = p_ultoa(ulong2str->value, dest_str, ulong2str->base); - ok(result == dest_str, - "(test %d): _ultoa(%lu, [out], %d) has result %p, expected: %p\n", - test_num, value, ulong2str->base, result, dest_str); - ok(memcmp(dest_str, ulong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0, - "(test %d): _ultoa(%lu, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, value, ulong2str->base, dest_str, ulong2str->Buffer); -} - - -static void test_ulongtoa(void) -{ - int test_num; - - for (test_num = 0; test_num < NB_ULONG2STR; test_num++) { - if (ulong2str[test_num].mask & 0x01) { - one_itoa_test(test_num, &ulong2str[test_num]); - } /* if */ - if (ulong2str[test_num].mask & 0x02) { - one_ltoa_test(test_num, &ulong2str[test_num]); - } /* if */ - if (ulong2str[test_num].mask & 0x04) { - one_ultoa_test(test_num, &ulong2str[test_num]); - } /* if */ - } /* for */ -} - - -static void one_itow_test(int test_num, const ulong2str_t *ulong2str) -{ - int pos; - WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - WCHAR dest_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING unicode_string; - STRING ansi_str; - int value; - LPWSTR result; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - expected_wstr[pos] = ulong2str->Buffer[pos]; - } /* for */ - expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - dest_wstr[pos] = '-'; - } /* for */ - dest_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - unicode_string.Length = LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR); - unicode_string.MaximumLength = unicode_string.Length + sizeof(WCHAR); - unicode_string.Buffer = dest_wstr; - value = ulong2str->value; - result = p_itow(value, dest_wstr, ulong2str->base); - pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); - ok(result == dest_wstr, - "(test %d): _itow(%d, [out], %d) has result %p, expected: %p\n", - test_num, value, ulong2str->base, result, dest_wstr); - ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, - "(test %d): _itow(%d, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, value, ulong2str->base, ansi_str.Buffer, ulong2str->Buffer); - pRtlFreeAnsiString(&ansi_str); -} - - -static void one_ltow_test(int test_num, const ulong2str_t *ulong2str) -{ - int pos; - WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - WCHAR dest_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING unicode_string; - STRING ansi_str; - long value; - LPWSTR result; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - expected_wstr[pos] = ulong2str->Buffer[pos]; - } /* for */ - expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - dest_wstr[pos] = '-'; - } /* for */ - dest_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - unicode_string.Length = LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR); - unicode_string.MaximumLength = unicode_string.Length + sizeof(WCHAR); - unicode_string.Buffer = dest_wstr; - - value = ulong2str->value; - result = p_ltow(value, dest_wstr, ulong2str->base); - pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); - ok(result == dest_wstr, - "(test %d): _ltow(%ld, [out], %d) has result %p, expected: %p\n", - test_num, value, ulong2str->base, result, dest_wstr); - ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, - "(test %d): _ltow(%ld, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, value, ulong2str->base, ansi_str.Buffer, ulong2str->Buffer); - pRtlFreeAnsiString(&ansi_str); -} - - -static void one_ultow_test(int test_num, const ulong2str_t *ulong2str) -{ - int pos; - WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - WCHAR dest_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING unicode_string; - STRING ansi_str; - unsigned long value; - LPWSTR result; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - expected_wstr[pos] = ulong2str->Buffer[pos]; - } /* for */ - expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - dest_wstr[pos] = '-'; - } /* for */ - dest_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - unicode_string.Length = LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR); - unicode_string.MaximumLength = unicode_string.Length + sizeof(WCHAR); - unicode_string.Buffer = dest_wstr; - - value = ulong2str->value; - result = p_ultow(value, dest_wstr, ulong2str->base); - pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); - ok(result == dest_wstr, - "(test %d): _ultow(%lu, [out], %d) has result %p, expected: %p\n", - test_num, value, ulong2str->base, result, dest_wstr); - ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, - "(test %d): _ultow(%lu, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, value, ulong2str->base, ansi_str.Buffer, ulong2str->Buffer); - pRtlFreeAnsiString(&ansi_str); -} - - -static void test_ulongtow(void) -{ - int test_num; - LPWSTR result; - - for (test_num = 0; test_num < NB_ULONG2STR; test_num++) { - if (ulong2str[test_num].mask & 0x10) { - one_itow_test(test_num, &ulong2str[test_num]); - } /* if */ - if (ulong2str[test_num].mask & 0x20) { - one_ltow_test(test_num, &ulong2str[test_num]); - } /* if */ - if (ulong2str[test_num].mask & 0x40) { - one_ultow_test(test_num, &ulong2str[test_num]); - } /* if */ - } /* for */ - - if (0) { - /* Crashes on XP and W2K3 */ - result = p_itow(ulong2str[0].value, NULL, 10); - ok(result == NULL, - "(test a): _itow(%d, NULL, 10) has result %p, expected: NULL\n", - ulong2str[0].value, result); - } - - if (0) { - /* Crashes on XP and W2K3 */ - result = p_ltow(ulong2str[0].value, NULL, 10); - ok(result == NULL, - "(test b): _ltow(%d, NULL, 10) has result %p, expected: NULL\n", - ulong2str[0].value, result); - } - - if (0) { - /* Crashes on XP and W2K3 */ - result = p_ultow(ulong2str[0].value, NULL, 10); - ok(result == NULL, - "(test c): _ultow(%d, NULL, 10) has result %p, expected: NULL\n", - ulong2str[0].value, result); - } -} - -#define ULL(a,b) (((ULONGLONG)(a) << 32) | (b)) - -typedef struct { - int base; - ULONGLONG value; - const char *Buffer; - int mask; /* ntdll/msvcrt: 0x01=i64toa, 0x02=ui64toa, 0x04=wrong _i64toa try next example */ - /* 0x10=i64tow, 0x20=ui64tow, 0x40=wrong _i64tow try next example */ -} ulonglong2str_t; - -static const ulonglong2str_t ulonglong2str[] = { - {10, 123, "123\0---------------------------------------------------------------", 0x33}, - - { 2, 0x80000000U, "10000000000000000000000000000000\0----------------------------------", 0x33}, - { 2, -2147483647, "1111111111111111111111111111111110000000000000000000000000000001\0--", 0x33}, - { 2, -65537, "1111111111111111111111111111111111111111111111101111111111111111\0--", 0x33}, - { 2, -65536, "1111111111111111111111111111111111111111111111110000000000000000\0--", 0x33}, - { 2, -65535, "1111111111111111111111111111111111111111111111110000000000000001\0--", 0x33}, - { 2, -32768, "1111111111111111111111111111111111111111111111111000000000000000\0--", 0x33}, - { 2, -32767, "1111111111111111111111111111111111111111111111111000000000000001\0--", 0x33}, - { 2, -2, "1111111111111111111111111111111111111111111111111111111111111110\0--", 0x33}, - { 2, -1, "1111111111111111111111111111111111111111111111111111111111111111\0--", 0x33}, - { 2, 0, "0\0-----------------------------------------------------------------", 0x33}, - { 2, 1, "1\0-----------------------------------------------------------------", 0x33}, - { 2, 10, "1010\0--------------------------------------------------------------", 0x33}, - { 2, 100, "1100100\0-----------------------------------------------------------", 0x33}, - { 2, 1000, "1111101000\0--------------------------------------------------------", 0x33}, - { 2, 10000, "10011100010000\0----------------------------------------------------", 0x33}, - { 2, 32767, "111111111111111\0---------------------------------------------------", 0x33}, - { 2, 32768, "1000000000000000\0--------------------------------------------------", 0x33}, - { 2, 65535, "1111111111111111\0--------------------------------------------------", 0x33}, - { 2, 100000, "11000011010100000\0-------------------------------------------------", 0x33}, - { 2, 234567, "111001010001000111\0------------------------------------------------", 0x33}, - { 2, 300000, "1001001001111100000\0-----------------------------------------------", 0x33}, - { 2, 524287, "1111111111111111111\0-----------------------------------------------", 0x33}, - { 2, 524288, "10000000000000000000\0----------------------------------------------", 0x33}, - { 2, 1000000, "11110100001001000000\0----------------------------------------------", 0x33}, - { 2, 10000000, "100110001001011010000000\0------------------------------------------", 0x33}, - { 2, 100000000, "101111101011110000100000000\0---------------------------------------", 0x33}, - { 2, 1000000000, "111011100110101100101000000000\0------------------------------------", 0x33}, - { 2, 1073741823, "111111111111111111111111111111\0------------------------------------", 0x33}, - { 2, 2147483646, "1111111111111111111111111111110\0-----------------------------------", 0x33}, - { 2, 2147483647, "1111111111111111111111111111111\0-----------------------------------", 0x33}, - { 2, 2147483648U, "10000000000000000000000000000000\0----------------------------------", 0x33}, - { 2, 2147483649U, "10000000000000000000000000000001\0----------------------------------", 0x33}, - { 2, 4294967294U, "11111111111111111111111111111110\0----------------------------------", 0x33}, - { 2, 0xFFFFFFFF, "11111111111111111111111111111111\0----------------------------------", 0x33}, - { 2, ULL(0x1,0xffffffff), "111111111111111111111111111111111\0---------------------------------", 0x33}, - { 2, ((ULONGLONG)100000)*100000, "1001010100000010111110010000000000\0--------------------------------", 0x33}, - { 2, ULL(0x3,0xffffffff), "1111111111111111111111111111111111\0--------------------------------", 0x33}, - { 2, ULL(0x7,0xffffffff), "11111111111111111111111111111111111\0-------------------------------", 0x33}, - { 2, ULL(0xf,0xffffffff), "111111111111111111111111111111111111\0------------------------------", 0x33}, - { 2, ((ULONGLONG)100000)*1000000, "1011101001000011101101110100000000000\0-----------------------------", 0x33}, - { 2, ULL(0x1f,0xffffffff), "1111111111111111111111111111111111111\0-----------------------------", 0x33}, - { 2, ULL(0x3f,0xffffffff), "11111111111111111111111111111111111111\0----------------------------", 0x33}, - { 2, ULL(0x7f,0xffffffff), "111111111111111111111111111111111111111\0---------------------------", 0x33}, - { 2, ULL(0xff,0xffffffff), "1111111111111111111111111111111111111111\0--------------------------", 0x33}, - - { 8, 0x80000000U, "20000000000\0-------------------------------------------------------", 0x33}, - { 8, -2147483647, "1777777777760000000001\0--------------------------------------------", 0x33}, - { 8, -2, "1777777777777777777776\0--------------------------------------------", 0x33}, - { 8, -1, "1777777777777777777777\0--------------------------------------------", 0x33}, - { 8, 0, "0\0-----------------------------------------------------------------", 0x33}, - { 8, 1, "1\0-----------------------------------------------------------------", 0x33}, - { 8, 2147483646, "17777777776\0-------------------------------------------------------", 0x33}, - { 8, 2147483647, "17777777777\0-------------------------------------------------------", 0x33}, - { 8, 2147483648U, "20000000000\0-------------------------------------------------------", 0x33}, - { 8, 2147483649U, "20000000001\0-------------------------------------------------------", 0x33}, - { 8, 4294967294U, "37777777776\0-------------------------------------------------------", 0x33}, - { 8, 4294967295U, "37777777777\0-------------------------------------------------------", 0x33}, - - {10, 0x80000000U, "2147483648\0--------------------------------------------------------", 0x33}, - {10, -2147483647, "-2147483647\0-------------------------------------------------------", 0x55}, - {10, -2147483647, "-18446744071562067969\0---------------------------------------------", 0x00}, - {10, -2147483647, "18446744071562067969\0----------------------------------------------", 0x22}, - {10, -2, "-2\0----------------------------------------------------------------", 0x55}, - {10, -2, "-18446744073709551614\0---------------------------------------------", 0x00}, - {10, -2, "18446744073709551614\0----------------------------------------------", 0x22}, - {10, -1, "-1\0----------------------------------------------------------------", 0x55}, - {10, -1, "-18446744073709551615\0---------------------------------------------", 0x00}, - {10, -1, "18446744073709551615\0----------------------------------------------", 0x22}, - {10, 0, "0\0-----------------------------------------------------------------", 0x33}, - {10, 1, "1\0-----------------------------------------------------------------", 0x33}, - {10, 12, "12\0----------------------------------------------------------------", 0x33}, - {10, 123, "123\0---------------------------------------------------------------", 0x33}, - {10, 1234, "1234\0--------------------------------------------------------------", 0x33}, - {10, 12345, "12345\0-------------------------------------------------------------", 0x33}, - {10, 123456, "123456\0------------------------------------------------------------", 0x33}, - {10, 1234567, "1234567\0-----------------------------------------------------------", 0x33}, - {10, 12345678, "12345678\0----------------------------------------------------------", 0x33}, - {10, 123456789, "123456789\0---------------------------------------------------------", 0x33}, - {10, 2147483646, "2147483646\0--------------------------------------------------------", 0x33}, - {10, 2147483647, "2147483647\0--------------------------------------------------------", 0x33}, - {10, 2147483648U, "2147483648\0--------------------------------------------------------", 0x33}, - {10, 2147483649U, "2147483649\0--------------------------------------------------------", 0x33}, - {10, 4294967294U, "4294967294\0--------------------------------------------------------", 0x33}, - {10, 4294967295U, "4294967295\0--------------------------------------------------------", 0x33}, - {10, ULL(0x2,0xdfdc1c35), "12345678901\0-------------------------------------------------------", 0x33}, - {10, ULL(0xe5,0xf4c8f374), "987654321012\0------------------------------------------------------", 0x33}, - {10, ULL(0x1c0,0xfc161e3e), "1928374656574\0-----------------------------------------------------", 0x33}, - {10, ULL(0xbad,0xcafeface), "12841062955726\0----------------------------------------------------", 0x33}, - {10, ULL(0x5bad,0xcafeface), "100801993177806\0---------------------------------------------------", 0x33}, - {10, ULL(0xaface,0xbeefcafe), "3090515640699646\0--------------------------------------------------", 0x33}, - {10, ULL(0xa5beef,0xabcdcafe), "46653307746110206\0-------------------------------------------------", 0x33}, - {10, ULL(0x1f8cf9b,0xf2df3af1), "142091656963767025\0------------------------------------------------", 0x33}, - {10, ULL(0x0fffffff,0xffffffff), "1152921504606846975\0-----------------------------------------------", 0x33}, - {10, ULL(0x7fffffff,0xffffffff), "9223372036854775807\0-----------------------------------------------", 0x33}, - {10, ULL(0x80000000,0x00000000), "-9223372036854775808\0----------------------------------------------", 0x11}, - {10, ULL(0x80000000,0x00000000), "9223372036854775808\0-----------------------------------------------", 0x22}, - {10, ULL(0x80000000,0x00000001), "-9223372036854775807\0----------------------------------------------", 0x55}, - {10, ULL(0x80000000,0x00000001), "-9223372036854775809\0----------------------------------------------", 0x00}, - {10, ULL(0x80000000,0x00000001), "9223372036854775809\0-----------------------------------------------", 0x22}, - {10, ULL(0x80000000,0x00000002), "-9223372036854775806\0----------------------------------------------", 0x55}, - {10, ULL(0x80000000,0x00000002), "-9223372036854775810\0----------------------------------------------", 0x00}, - {10, ULL(0x80000000,0x00000002), "9223372036854775810\0-----------------------------------------------", 0x22}, - {10, ULL(0xffffffff,0xfffffffe), "-2\0----------------------------------------------------------------", 0x55}, - {10, ULL(0xffffffff,0xfffffffe), "-18446744073709551614\0---------------------------------------------", 0x00}, - {10, ULL(0xffffffff,0xfffffffe), "18446744073709551614\0----------------------------------------------", 0x22}, - {10, ULL(0xffffffff,0xffffffff), "-1\0----------------------------------------------------------------", 0x55}, - {10, ULL(0xffffffff,0xffffffff), "-18446744073709551615\0---------------------------------------------", 0x00}, - {10, ULL(0xffffffff,0xffffffff), "18446744073709551615\0----------------------------------------------", 0x22}, - - {16, 0, "0\0-----------------------------------------------------------------", 0x33}, - {16, 1, "1\0-----------------------------------------------------------------", 0x33}, - {16, 2147483646, "7ffffffe\0----------------------------------------------------------", 0x33}, - {16, 2147483647, "7fffffff\0----------------------------------------------------------", 0x33}, - {16, 0x80000000, "80000000\0----------------------------------------------------------", 0x33}, - {16, 0x80000001, "80000001\0----------------------------------------------------------", 0x33}, - {16, 0xFFFFFFFE, "fffffffe\0----------------------------------------------------------", 0x33}, - {16, 0xFFFFFFFF, "ffffffff\0----------------------------------------------------------", 0x33}, - {16, ULL(0x1,0x00000000), "100000000\0---------------------------------------------------------", 0x33}, - {16, ULL(0xbad,0xdeadbeef), "baddeadbeef\0-------------------------------------------------------", 0x33}, - {16, ULL(0x80000000,0x00000000), "8000000000000000\0--------------------------------------------------", 0x33}, - {16, ULL(0xfedcba98,0x76543210), "fedcba9876543210\0--------------------------------------------------", 0x33}, - {16, ULL(0xffffffff,0x80000001), "ffffffff80000001\0--------------------------------------------------", 0x33}, - {16, ULL(0xffffffff,0xfffffffe), "fffffffffffffffe\0--------------------------------------------------", 0x33}, - {16, ULL(0xffffffff,0xffffffff), "ffffffffffffffff\0--------------------------------------------------", 0x33}, - - { 2, 32768, "1000000000000000\0--------------------------------------------------", 0x33}, - { 2, 65536, "10000000000000000\0-------------------------------------------------", 0x33}, - { 2, 131072, "100000000000000000\0------------------------------------------------", 0x33}, - {16, 0xffffffff, "ffffffff\0----------------------------------------------------------", 0x33}, - {16, 0xa, "a\0-----------------------------------------------------------------", 0x33}, - {16, 0, "0\0-----------------------------------------------------------------", 0x33}, - {20, 3368421, "111111\0------------------------------------------------------------", 0x33}, - {36, 62193781, "111111\0------------------------------------------------------------", 0x33}, - {37, 71270178, "111111\0------------------------------------------------------------", 0x33}, - {99, ULL(0x2,0x3c9e468c), "111111\0------------------------------------------------------------", 0x33}, -}; -#define NB_ULONGLONG2STR (sizeof(ulonglong2str)/sizeof(*ulonglong2str)) - - -static void one_i64toa_test(int test_num, const ulonglong2str_t *ulonglong2str) -{ - LPSTR result; - char dest_str[LARGE_STRI_BUFFER_LENGTH + 1]; - - memset(dest_str, '-', LARGE_STRI_BUFFER_LENGTH); - dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0'; - result = p_i64toa(ulonglong2str->value, dest_str, ulonglong2str->base); - ok(result == dest_str, - "(test %d): _i64toa(%Lu, [out], %d) has result %p, expected: %p\n", - test_num, ulonglong2str->value, ulonglong2str->base, result, dest_str); - if (ulonglong2str->mask & 0x04) { - if (memcmp(dest_str, ulonglong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) != 0) { - if (memcmp(dest_str, ulonglong2str[1].Buffer, LARGE_STRI_BUFFER_LENGTH) != 0) { - ok(memcmp(dest_str, ulonglong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0, - "(test %d): _i64toa(%Lu, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, ulonglong2str->value, ulonglong2str->base, dest_str, ulonglong2str->Buffer); - } /* if */ - } /* if */ - } else { - ok(memcmp(dest_str, ulonglong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0, - "(test %d): _i64toa(%Lu, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, ulonglong2str->value, ulonglong2str->base, dest_str, ulonglong2str->Buffer); - } /* if */ -} - - -static void one_ui64toa_test(int test_num, const ulonglong2str_t *ulonglong2str) -{ - LPSTR result; - char dest_str[LARGE_STRI_BUFFER_LENGTH + 1]; - - memset(dest_str, '-', LARGE_STRI_BUFFER_LENGTH); - dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0'; - result = p_ui64toa(ulonglong2str->value, dest_str, ulonglong2str->base); - ok(result == dest_str, - "(test %d): _ui64toa(%Lu, [out], %d) has result %p, expected: %p\n", - test_num, ulonglong2str->value, ulonglong2str->base, result, dest_str); - ok(memcmp(dest_str, ulonglong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0, - "(test %d): _ui64toa(%Lu, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, ulonglong2str->value, ulonglong2str->base, dest_str, ulonglong2str->Buffer); -} - - -static void test_ulonglongtoa(void) -{ - int test_num; - - for (test_num = 0; test_num < NB_ULONGLONG2STR; test_num++) { - if (ulonglong2str[test_num].mask & 0x01) { - one_i64toa_test(test_num, &ulonglong2str[test_num]); - } /* if */ - if (p_ui64toa != NULL) { - if (ulonglong2str[test_num].mask & 0x02) { - one_ui64toa_test(test_num, &ulonglong2str[test_num]); - } /* if */ - } /* if */ - } /* for */ -} - - -static void one_i64tow_test(int test_num, const ulonglong2str_t *ulonglong2str) -{ - int pos; - WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - WCHAR dest_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING unicode_string; - STRING ansi_str; - LPWSTR result; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - expected_wstr[pos] = ulonglong2str->Buffer[pos]; - } /* for */ - expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - dest_wstr[pos] = '-'; - } /* for */ - dest_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - unicode_string.Length = LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR); - unicode_string.MaximumLength = unicode_string.Length + sizeof(WCHAR); - unicode_string.Buffer = dest_wstr; - - result = p_i64tow(ulonglong2str->value, dest_wstr, ulonglong2str->base); - pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); - ok(result == dest_wstr, - "(test %d): _i64tow(0x%x%08x, [out], %d) has result %p, expected: %p\n", - test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value, - ulonglong2str->base, result, dest_wstr); - if (ulonglong2str->mask & 0x04) { - if (memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) != 0) { - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - expected_wstr[pos] = ulonglong2str[1].Buffer[pos]; - } /* for */ - expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - if (memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) != 0) { - ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, - "(test %d): _i64tow(0x%x%08x, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value, - ulonglong2str->base, ansi_str.Buffer, ulonglong2str->Buffer); - } /* if */ - } /* if */ - } else { - ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, - "(test %d): _i64tow(0x%x%08x, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value, - ulonglong2str->base, ansi_str.Buffer, ulonglong2str->Buffer); - } /* if */ - pRtlFreeAnsiString(&ansi_str); -} - - -static void one_ui64tow_test(int test_num, const ulonglong2str_t *ulonglong2str) -{ - int pos; - WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - WCHAR dest_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; - UNICODE_STRING unicode_string; - STRING ansi_str; - LPWSTR result; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - expected_wstr[pos] = ulonglong2str->Buffer[pos]; - } /* for */ - expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - - for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { - dest_wstr[pos] = '-'; - } /* for */ - dest_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; - unicode_string.Length = LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR); - unicode_string.MaximumLength = unicode_string.Length + sizeof(WCHAR); - unicode_string.Buffer = dest_wstr; - - result = p_ui64tow(ulonglong2str->value, dest_wstr, ulonglong2str->base); - pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); - ok(result == dest_wstr, - "(test %d): _ui64tow(0x%x%08x, [out], %d) has result %p, expected: %p\n", - test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value, - ulonglong2str->base, result, dest_wstr); - ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, - "(test %d): _ui64tow(0x%x%08x, [out], %d) assigns string \"%s\", expected: \"%s\"\n", - test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value, - ulonglong2str->base, ansi_str.Buffer, ulonglong2str->Buffer); - pRtlFreeAnsiString(&ansi_str); -} - - -static void test_ulonglongtow(void) -{ - int test_num; - LPWSTR result; - - for (test_num = 0; test_num < NB_ULONGLONG2STR; test_num++) { - if (ulonglong2str[test_num].mask & 0x10) { - one_i64tow_test(test_num, &ulonglong2str[test_num]); - } /* if */ - if (p_ui64tow) { - if (ulonglong2str[test_num].mask & 0x20) { - one_ui64tow_test(test_num, &ulonglong2str[test_num]); - } /* if */ - } /* if */ - } /* for */ - - if (0) { - /* Crashes on XP and W2K3 */ - result = p_i64tow(ulonglong2str[0].value, NULL, 10); - ok(result == NULL, - "(test d): _i64tow(0x%x%08x, NULL, 10) has result %p, expected: NULL\n", - (DWORD)(ulonglong2str[0].value >> 32), (DWORD)ulonglong2str[0].value, result); - } - - if (p_ui64tow) { - if (0) { - /* Crashes on XP and W2K3 */ - result = p_ui64tow(ulonglong2str[0].value, NULL, 10); - ok(result == NULL, - "(test e): _ui64tow(0x%x%08x, NULL, 10) has result %p, expected: NULL\n", - (DWORD)(ulonglong2str[0].value >> 32), (DWORD)ulonglong2str[0].value, result); - } - } /* if */ -} - - -typedef struct { - const char *str; - LONG value; -} str2long_t; - -static const str2long_t str2long[] = { - { "1011101100", 1011101100 }, - { "1234567", 1234567 }, - { "-214", -214 }, - { "+214", 214 }, /* The + sign is allowed also */ - { "--214", 0 }, /* Do not accept more than one sign */ - { "-+214", 0 }, - { "++214", 0 }, - { "+-214", 0 }, - { "\00141", 0 }, /* not whitespace char 1 */ - { "\00242", 0 }, /* not whitespace char 2 */ - { "\00343", 0 }, /* not whitespace char 3 */ - { "\00444", 0 }, /* not whitespace char 4 */ - { "\00545", 0 }, /* not whitespace char 5 */ - { "\00646", 0 }, /* not whitespace char 6 */ - { "\00747", 0 }, /* not whitespace char 7 */ - { "\01050", 0 }, /* not whitespace char 8 */ - { "\01151", 51 }, /* is whitespace char 9 (tab) */ - { "\01252", 52 }, /* is whitespace char 10 (lf) */ - { "\01353", 53 }, /* is whitespace char 11 (vt) */ - { "\01454", 54 }, /* is whitespace char 12 (ff) */ - { "\01555", 55 }, /* is whitespace char 13 (cr) */ - { "\01656", 0 }, /* not whitespace char 14 */ - { "\01757", 0 }, /* not whitespace char 15 */ - { "\02060", 0 }, /* not whitespace char 16 */ - { "\02161", 0 }, /* not whitespace char 17 */ - { "\02262", 0 }, /* not whitespace char 18 */ - { "\02363", 0 }, /* not whitespace char 19 */ - { "\02464", 0 }, /* not whitespace char 20 */ - { "\02565", 0 }, /* not whitespace char 21 */ - { "\02666", 0 }, /* not whitespace char 22 */ - { "\02767", 0 }, /* not whitespace char 23 */ - { "\03070", 0 }, /* not whitespace char 24 */ - { "\03171", 0 }, /* not whitespace char 25 */ - { "\03272", 0 }, /* not whitespace char 26 */ - { "\03373", 0 }, /* not whitespace char 27 */ - { "\03474", 0 }, /* not whitespace char 28 */ - { "\03575", 0 }, /* not whitespace char 29 */ - { "\03676", 0 }, /* not whitespace char 30 */ - { "\03777", 0 }, /* not whitespace char 31 */ - { "\04080", 80 }, /* is whitespace char 32 (space) */ - { " \n \r \t214", 214 }, - { " \n \r \t+214", 214 }, /* Signs can be used after whitespace */ - { " \n \r \t-214", -214 }, - { "+214 0", 214 }, /* Space terminates the number */ - { " 214.01", 214 }, /* Decimal point not accepted */ - { " 214,01", 214 }, /* Decimal comma not accepted */ - { "f81", 0 }, - { "0x12345", 0 }, /* Hex not accepted */ - { "00x12345", 0 }, - { "0xx12345", 0 }, - { "1x34", 1 }, - { "-9999999999", -1410065407 }, /* Big negative integer */ - { "-2147483649", 2147483647 }, /* Too small to fit in 32 Bits */ - { "-2147483648", 0x80000000 }, /* Smallest negative integer */ - { "-2147483647", -2147483647 }, - { "-1", -1 }, - { "0", 0 }, - { "1", 1 }, - { "2147483646", 2147483646 }, - { "2147483647", 2147483647 }, /* Largest signed positive integer */ - { "2147483648", 2147483648UL }, /* Positive int equal to smallest negative int */ - { "2147483649", 2147483649UL }, - { "4294967294", 4294967294UL }, - { "4294967295", 4294967295UL }, /* Largest unsigned integer */ - { "4294967296", 0 }, /* Too big to fit in 32 Bits */ - { "9999999999", 1410065407 }, /* Big positive integer */ - { "056789", 56789 }, /* Leading zero and still decimal */ - { "b1011101100", 0 }, /* Binary (b-notation) */ - { "-b1011101100", 0 }, /* Negative Binary (b-notation) */ - { "b10123456789", 0 }, /* Binary with nonbinary digits (2-9) */ - { "0b1011101100", 0 }, /* Binary (0b-notation) */ - { "-0b1011101100", 0 }, /* Negative binary (0b-notation) */ - { "0b10123456789", 0 }, /* Binary with nonbinary digits (2-9) */ - { "-0b10123456789", 0 }, /* Negative binary with nonbinary digits (2-9) */ - { "0b1", 0 }, /* one digit binary */ - { "0b2", 0 }, /* empty binary */ - { "0b", 0 }, /* empty binary */ - { "o1234567", 0 }, /* Octal (o-notation) */ - { "-o1234567", 0 }, /* Negative Octal (o-notation) */ - { "o56789", 0 }, /* Octal with nonoctal digits (8 and 9) */ - { "0o1234567", 0 }, /* Octal (0o-notation) */ - { "-0o1234567", 0 }, /* Negative octal (0o-notation) */ - { "0o56789", 0 }, /* Octal with nonoctal digits (8 and 9) */ - { "-0o56789", 0 }, /* Negative octal with nonoctal digits (8 and 9) */ - { "0o7", 0 }, /* one digit octal */ - { "0o8", 0 }, /* empty octal */ - { "0o", 0 }, /* empty octal */ - { "0d1011101100", 0 }, /* explicit decimal with 0d */ - { "x89abcdef", 0 }, /* Hex with lower case digits a-f (x-notation) */ - { "xFEDCBA00", 0 }, /* Hex with upper case digits A-F (x-notation) */ - { "-xFEDCBA00", 0 }, /* Negative Hexadecimal (x-notation) */ - { "0x89abcdef", 0 }, /* Hex with lower case digits a-f (0x-notation) */ - { "0xFEDCBA00", 0 }, /* Hex with upper case digits A-F (0x-notation) */ - { "-0xFEDCBA00", 0 }, /* Negative Hexadecimal (0x-notation) */ - { "0xabcdefgh", 0 }, /* Hex with illegal lower case digits (g-z) */ - { "0xABCDEFGH", 0 }, /* Hex with illegal upper case digits (G-Z) */ - { "0xF", 0 }, /* one digit hexadecimal */ - { "0xG", 0 }, /* empty hexadecimal */ - { "0x", 0 }, /* empty hexadecimal */ - { "", 0 }, /* empty string */ -/* { NULL, 0 }, */ /* NULL as string */ -}; -#define NB_STR2LONG (sizeof(str2long)/sizeof(*str2long)) - - -static void test_wtoi(void) -{ - int test_num; - UNICODE_STRING uni; - int result; - - for (test_num = 0; test_num < NB_STR2LONG; test_num++) { - pRtlCreateUnicodeStringFromAsciiz(&uni, str2long[test_num].str); - result = p_wtoi(uni.Buffer); - ok(result == str2long[test_num].value, - "(test %d): call failed: _wtoi(\"%s\") has result %d, expected: %d\n", - test_num, str2long[test_num].str, result, str2long[test_num].value); - pRtlFreeUnicodeString(&uni); - } /* for */ -} - - -static void test_wtol(void) -{ - int test_num; - UNICODE_STRING uni; - LONG result; - - for (test_num = 0; test_num < NB_STR2LONG; test_num++) { - pRtlCreateUnicodeStringFromAsciiz(&uni, str2long[test_num].str); - result = p_wtol(uni.Buffer); - ok(result == str2long[test_num].value, - "(test %d): call failed: _wtol(\"%s\") has result %d, expected: %d\n", - test_num, str2long[test_num].str, result, str2long[test_num].value); - pRtlFreeUnicodeString(&uni); - } /* for */ -} - - -typedef struct { - const char *str; - LONGLONG value; -} str2longlong_t; - -static const str2longlong_t str2longlong[] = { - { "1011101100", 1011101100 }, - { "1234567", 1234567 }, - { "-214", -214 }, - { "+214", 214 }, /* The + sign is allowed also */ - { "--214", 0 }, /* Do not accept more than one sign */ - { "-+214", 0 }, - { "++214", 0 }, - { "+-214", 0 }, - { "\00141", 0 }, /* not whitespace char 1 */ - { "\00242", 0 }, /* not whitespace char 2 */ - { "\00343", 0 }, /* not whitespace char 3 */ - { "\00444", 0 }, /* not whitespace char 4 */ - { "\00545", 0 }, /* not whitespace char 5 */ - { "\00646", 0 }, /* not whitespace char 6 */ - { "\00747", 0 }, /* not whitespace char 7 */ - { "\01050", 0 }, /* not whitespace char 8 */ - { "\01151", 51 }, /* is whitespace char 9 (tab) */ - { "\01252", 52 }, /* is whitespace char 10 (lf) */ - { "\01353", 53 }, /* is whitespace char 11 (vt) */ - { "\01454", 54 }, /* is whitespace char 12 (ff) */ - { "\01555", 55 }, /* is whitespace char 13 (cr) */ - { "\01656", 0 }, /* not whitespace char 14 */ - { "\01757", 0 }, /* not whitespace char 15 */ - { "\02060", 0 }, /* not whitespace char 16 */ - { "\02161", 0 }, /* not whitespace char 17 */ - { "\02262", 0 }, /* not whitespace char 18 */ - { "\02363", 0 }, /* not whitespace char 19 */ - { "\02464", 0 }, /* not whitespace char 20 */ - { "\02565", 0 }, /* not whitespace char 21 */ - { "\02666", 0 }, /* not whitespace char 22 */ - { "\02767", 0 }, /* not whitespace char 23 */ - { "\03070", 0 }, /* not whitespace char 24 */ - { "\03171", 0 }, /* not whitespace char 25 */ - { "\03272", 0 }, /* not whitespace char 26 */ - { "\03373", 0 }, /* not whitespace char 27 */ - { "\03474", 0 }, /* not whitespace char 28 */ - { "\03575", 0 }, /* not whitespace char 29 */ - { "\03676", 0 }, /* not whitespace char 30 */ - { "\03777", 0 }, /* not whitespace char 31 */ - { "\04080", 80 }, /* is whitespace char 32 (space) */ - { " \n \r \t214", 214 }, - { " \n \r \t+214", 214 }, /* Signs can be used after whitespace */ - { " \n \r \t-214", -214 }, - { "+214 0", 214 }, /* Space terminates the number */ - { " 214.01", 214 }, /* Decimal point not accepted */ - { " 214,01", 214 }, /* Decimal comma not accepted */ - { "f81", 0 }, - { "0x12345", 0 }, /* Hex not accepted */ - { "00x12345", 0 }, - { "0xx12345", 0 }, - { "1x34", 1 }, - { "-99999999999999999999", -ULL(0x6bc75e2d,0x630fffff) }, /* Big negative integer */ - { "-9223372036854775809", ULL(0x7fffffff,0xffffffff) }, /* Too small to fit in 64 bits */ - { "-9223372036854775808", ULL(0x80000000,0x00000000) }, /* Smallest negative 64 bit integer */ - { "-9223372036854775807", -ULL(0x7fffffff,0xffffffff) }, - { "-9999999999", -ULL(0x00000002,0x540be3ff) }, - { "-2147483649", -ULL(0x00000000,0x80000001) }, /* Too small to fit in 32 bits */ - { "-2147483648", -ULL(0x00000000,0x80000000) }, /* Smallest 32 bits negative integer */ - { "-2147483647", -2147483647 }, - { "-1", -1 }, - { "0", 0 }, - { "1", 1 }, - { "2147483646", 2147483646 }, - { "2147483647", 2147483647 }, /* Largest signed positive 32 bit integer */ - { "2147483648", ULL(0x00000000,0x80000000) }, /* Pos int equal to smallest neg 32 bit int */ - { "2147483649", ULL(0x00000000,0x80000001) }, - { "4294967294", ULL(0x00000000,0xfffffffe) }, - { "4294967295", ULL(0x00000000,0xffffffff) }, /* Largest unsigned 32 bit integer */ - { "4294967296", ULL(0x00000001,0x00000000) }, /* Too big to fit in 32 Bits */ - { "9999999999", ULL(0x00000002,0x540be3ff) }, - { "9223372036854775806", ULL(0x7fffffff,0xfffffffe) }, - { "9223372036854775807", ULL(0x7fffffff,0xffffffff) }, /* Largest signed positive 64 bit integer */ - { "9223372036854775808", ULL(0x80000000,0x00000000) }, /* Pos int equal to smallest neg 64 bit int */ - { "9223372036854775809", ULL(0x80000000,0x00000001) }, - { "18446744073709551614", ULL(0xffffffff,0xfffffffe) }, - { "18446744073709551615", ULL(0xffffffff,0xffffffff) }, /* Largest unsigned 64 bit integer */ - { "18446744073709551616", 0 }, /* Too big to fit in 64 bits */ - { "99999999999999999999", ULL(0x6bc75e2d,0x630fffff) }, /* Big positive integer */ - { "056789", 56789 }, /* Leading zero and still decimal */ - { "b1011101100", 0 }, /* Binary (b-notation) */ - { "-b1011101100", 0 }, /* Negative Binary (b-notation) */ - { "b10123456789", 0 }, /* Binary with nonbinary digits (2-9) */ - { "0b1011101100", 0 }, /* Binary (0b-notation) */ - { "-0b1011101100", 0 }, /* Negative binary (0b-notation) */ - { "0b10123456789", 0 }, /* Binary with nonbinary digits (2-9) */ - { "-0b10123456789", 0 }, /* Negative binary with nonbinary digits (2-9) */ - { "0b1", 0 }, /* one digit binary */ - { "0b2", 0 }, /* empty binary */ - { "0b", 0 }, /* empty binary */ - { "o1234567", 0 }, /* Octal (o-notation) */ - { "-o1234567", 0 }, /* Negative Octal (o-notation) */ - { "o56789", 0 }, /* Octal with nonoctal digits (8 and 9) */ - { "0o1234567", 0 }, /* Octal (0o-notation) */ - { "-0o1234567", 0 }, /* Negative octal (0o-notation) */ - { "0o56789", 0 }, /* Octal with nonoctal digits (8 and 9) */ - { "-0o56789", 0 }, /* Negative octal with nonoctal digits (8 and 9) */ - { "0o7", 0 }, /* one digit octal */ - { "0o8", 0 }, /* empty octal */ - { "0o", 0 }, /* empty octal */ - { "0d1011101100", 0 }, /* explicit decimal with 0d */ - { "x89abcdef", 0 }, /* Hex with lower case digits a-f (x-notation) */ - { "xFEDCBA00", 0 }, /* Hex with upper case digits A-F (x-notation) */ - { "-xFEDCBA00", 0 }, /* Negative Hexadecimal (x-notation) */ - { "0x89abcdef", 0 }, /* Hex with lower case digits a-f (0x-notation) */ - { "0xFEDCBA00", 0 }, /* Hex with upper case digits A-F (0x-notation) */ - { "-0xFEDCBA00", 0 }, /* Negative Hexadecimal (0x-notation) */ - { "0xabcdefgh", 0 }, /* Hex with illegal lower case digits (g-z) */ - { "0xABCDEFGH", 0 }, /* Hex with illegal upper case digits (G-Z) */ - { "0xF", 0 }, /* one digit hexadecimal */ - { "0xG", 0 }, /* empty hexadecimal */ - { "0x", 0 }, /* empty hexadecimal */ - { "", 0 }, /* empty string */ -/* { NULL, 0 }, */ /* NULL as string */ -}; -#define NB_STR2LONGLONG (sizeof(str2longlong)/sizeof(*str2longlong)) - - -static void test_atoi64(void) -{ - int test_num; - LONGLONG result; - - for (test_num = 0; test_num < NB_STR2LONGLONG; test_num++) { - result = p_atoi64(str2longlong[test_num].str); - ok(result == str2longlong[test_num].value, - "(test %d): call failed: _atoi64(\"%s\") has result 0x%x%08x, expected: 0x%x%08x\n", - test_num, str2longlong[test_num].str, (DWORD)(result >> 32), (DWORD)result, - (DWORD)(str2longlong[test_num].value >> 32), (DWORD)str2longlong[test_num].value); - } /* for */ -} - - -static void test_wtoi64(void) -{ - int test_num; - UNICODE_STRING uni; - LONGLONG result; - - for (test_num = 0; test_num < NB_STR2LONGLONG; test_num++) { - pRtlCreateUnicodeStringFromAsciiz(&uni, str2longlong[test_num].str); - result = p_wtoi64(uni.Buffer); - ok(result == str2longlong[test_num].value, - "(test %d): call failed: _wtoi64(\"%s\") has result 0x%x%08x, expected: 0x%x%08x\n", - test_num, str2longlong[test_num].str, (DWORD)(result >> 32), (DWORD)result, - (DWORD)(str2longlong[test_num].value >> 32), (DWORD)str2longlong[test_num].value); - pRtlFreeUnicodeString(&uni); - } /* for */ -} - -static void test_wcsfuncs(void) -{ - static const WCHAR testing[] = {'T','e','s','t','i','n','g',0}; - ok (p_wcschr(testing,0)!=NULL, "wcschr Not finding terminating character\n"); - ok (p_wcsrchr(testing,0)!=NULL, "wcsrchr Not finding terminating character\n"); -} - -START_TEST(string) -{ - InitFunctionPtrs(); - - if (p_ultoa) - test_ulongtoa(); - if (p_ui64toa) - test_ulonglongtoa(); - if (p_atoi64) - test_atoi64(); - if (p_ultow) - test_ulongtow(); - if (p_ui64tow) - test_ulonglongtow(); - if (p_wtoi) - test_wtoi(); - if (p_wtol) - test_wtol(); - if (p_wtoi64) - test_wtoi64(); - if (p_wcschr && p_wcsrchr) - test_wcsfuncs(); -} diff --git a/rostests/winetests/ntdll/testlist.c b/rostests/winetests/ntdll/testlist.c deleted file mode 100644 index 0162d0f8937..00000000000 --- a/rostests/winetests/ntdll/testlist.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_atom(void); -extern void func_change(void); -extern void func_env(void); -extern void func_error(void); -extern void func_exception(void); -extern void func_file(void); -extern void func_generated(void); -extern void func_info(void); -extern void func_large_int(void); -extern void func_om(void); -extern void func_path(void); -extern void func_port(void); -extern void func_reg(void); -extern void func_rtl(void); -extern void func_rtlbitmap(void); -extern void func_rtlstr(void); -extern void func_string(void); -extern void func_time(void); - -const struct test winetest_testlist[] = -{ - { "atom", func_atom }, - { "change", func_change }, - { "env", func_env }, - { "error", func_error }, - { "exception", func_exception }, - { "file", func_file }, - //{ "generated", func_generated }, - { "info", func_info }, - { "large_int", func_large_int }, - { "om", func_om }, - { "path", func_path }, - { "port", func_port }, - { "reg", func_reg }, - { "rtl", func_rtl }, - { "rtlbitmap", func_rtlbitmap }, - { "rtlstr", func_rtlstr }, - { "string", func_string }, - { "time", func_time }, - { 0, 0 } -}; diff --git a/rostests/winetests/ntdll/time.c b/rostests/winetests/ntdll/time.c deleted file mode 100755 index 2e9adbc11a5..00000000000 --- a/rostests/winetests/ntdll/time.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Unit test suite for ntdll time functions - * - * Copyright 2004 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 - */ - -#include "ntdll_test.h" - -#ifdef __WINE_WINTERNL_H - -#define TICKSPERSEC 10000000 -#define TICKSPERMSEC 10000 -#define SECSPERDAY 86400 - -static VOID (WINAPI *pRtlTimeToTimeFields)( const LARGE_INTEGER *liTime, PTIME_FIELDS TimeFields) ; -static VOID (WINAPI *pRtlTimeFieldsToTime)( PTIME_FIELDS TimeFields, PLARGE_INTEGER Time) ; - -static const int MonthLengths[2][12] = -{ - { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, - { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } -}; - -static inline int IsLeapYear(int Year) -{ - return Year % 4 == 0 && (Year % 100 != 0 || Year % 400 == 0) ? 1 : 0; -} - -/* start time of the tests */ -TIME_FIELDS tftest = {1889,12,31,23,59,59,0,0}; - -static void test_pRtlTimeToTimeFields(void) -{ - LARGE_INTEGER litime , liresult; - TIME_FIELDS tfresult; - int i=0; - litime.QuadPart = ((ULONGLONG)0x0144017a << 32) | 0xf0b0a980; - while( tftest.Year < 2110 ) { - /* test at the last second of the month */ - pRtlTimeToTimeFields( &litime, &tfresult); - ok( tfresult.Year == tftest.Year && tfresult.Month == tftest.Month && - tfresult.Day == tftest.Day && tfresult.Hour == tftest.Hour && - tfresult.Minute == tftest.Minute && tfresult.Second == tftest.Second, - "#%d expected: %d-%d-%d %d:%d:%d got: %d-%d-%d %d:%d:%d\n", ++i, - tftest.Year, tftest.Month, tftest.Day, - tftest.Hour, tftest.Minute,tftest.Second, - tfresult.Year, tfresult.Month, tfresult.Day, - tfresult.Hour, tfresult.Minute, tfresult.Second); - /* test the inverse */ - pRtlTimeFieldsToTime( &tfresult, &liresult); - ok( liresult.QuadPart == litime.QuadPart," TimeFieldsToTime failed on %d-%d-%d %d:%d:%d. Error is %d ticks\n", - tfresult.Year, tfresult.Month, tfresult.Day, - tfresult.Hour, tfresult.Minute, tfresult.Second, - (int) (liresult.QuadPart - litime.QuadPart) ); - /* one second later is beginning of next month */ - litime.QuadPart += TICKSPERSEC ; - pRtlTimeToTimeFields( &litime, &tfresult); - ok( tfresult.Year == tftest.Year + (tftest.Month ==12) && - tfresult.Month == tftest.Month % 12 + 1 && - tfresult.Day == 1 && tfresult.Hour == 0 && - tfresult.Minute == 0 && tfresult.Second == 0, - "#%d expected: %d-%d-%d %d:%d:%d got: %d-%d-%d %d:%d:%d\n", ++i, - tftest.Year + (tftest.Month ==12), - tftest.Month % 12 + 1, 1, 0, 0, 0, - tfresult.Year, tfresult.Month, tfresult.Day, - tfresult.Hour, tfresult.Minute, tfresult.Second); - /* test the inverse */ - pRtlTimeFieldsToTime( &tfresult, &liresult); - ok( liresult.QuadPart == litime.QuadPart," TimeFieldsToTime failed on %d-%d-%d %d:%d:%d. Error is %d ticks\n", - tfresult.Year, tfresult.Month, tfresult.Day, - tfresult.Hour, tfresult.Minute, tfresult.Second, - (int) (liresult.QuadPart - litime.QuadPart) ); - /* advance to the end of the month */ - litime.QuadPart -= TICKSPERSEC ; - if( tftest.Month == 12) { - tftest.Month = 1; - tftest.Year += 1; - } else - tftest.Month += 1; - tftest.Day = MonthLengths[IsLeapYear(tftest.Year)][tftest.Month - 1]; - litime.QuadPart += (LONGLONG) tftest.Day * TICKSPERSEC * SECSPERDAY; - } -} -#endif - -START_TEST(time) -{ -#ifdef __WINE_WINTERNL_H - HMODULE mod = GetModuleHandleA("ntdll.dll"); - pRtlTimeToTimeFields = (void *)GetProcAddress(mod,"RtlTimeToTimeFields"); - pRtlTimeFieldsToTime = (void *)GetProcAddress(mod,"RtlTimeFieldsToTime"); - if (pRtlTimeToTimeFields && pRtlTimeFieldsToTime) - test_pRtlTimeToTimeFields(); -#endif -} diff --git a/rostests/winetests/odbccp32/misc.c b/rostests/winetests/odbccp32/misc.c deleted file mode 100644 index ba8e5f45f87..00000000000 --- a/rostests/winetests/odbccp32/misc.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2007 Bill Medland - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "odbcinst.h" - -static void test_SQLConfigMode(void) -{ - BOOL bool_ret; - DWORD error_code; - RETCODE sql_ret; - UWORD config_mode; - int i; - - ok(SQLGetConfigMode(NULL), "SQLGetConfigMode(NULL) should succeed\n"); - - bool_ret = SQLGetConfigMode(&config_mode); - ok(bool_ret && config_mode == ODBC_BOTH_DSN, "Failed to get the initial SQLGetConfigMode or it was not both\n"); - - bool_ret = SQLSetConfigMode(3); - sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); - ok(!bool_ret && sql_ret == SQL_SUCCESS_WITH_INFO && error_code == ODBC_ERROR_INVALID_PARAM_SEQUENCE, "SQLSetConfigMode with invalid argument did not fail correctly\n"); - - ok (ODBC_SYSTEM_DSN == 2 && ODBC_USER_DSN == 1 && ODBC_BOTH_DSN == 0, "SQLSetConfigMode modes not as expected\n"); - for (i = ODBC_SYSTEM_DSN; i >= ODBC_BOTH_DSN; --i) - { - ok(SQLSetConfigMode((UWORD)i), "SQLSetConfigMode Failed to set config mode\n"); - bool_ret = SQLGetConfigMode(&config_mode); - ok(bool_ret && config_mode == i, "Failed to confirm SQLSetConfigMode.\n"); - } - /* And that leaves it correctly on BOTH */ -} - -static void test_SQLInstallerError(void) -{ - RETCODE sql_ret; - - /* MSDN states that the error number should be between 1 and 8. Passing 0 is an error */ - sql_ret = SQLInstallerError(0, NULL, NULL, 0, NULL); - ok(sql_ret == SQL_ERROR, "SQLInstallerError(0...) failed with %d instead of SQL_ERROR\n", sql_ret); - /* However numbers greater than 8 do not return SQL_ERROR. - * I am currently unsure as to whether it should return SQL_NO_DATA or "the same as for error 8"; - * I have never been able to generate 8 errors to test it - */ - sql_ret = SQLInstallerError(65535, NULL, NULL, 0, NULL); - ok(sql_ret == SQL_NO_DATA, "SQLInstallerError(>8...) failed with %d instead of SQL_NO_DATA\n", sql_ret); - - /* Force an error to work with. This should generate ODBC_ERROR_INVALID_BUFF_LEN */ - ok(!SQLGetInstalledDrivers(0, 0, 0), "Failed to force an error for testing\n"); - sql_ret = SQLInstallerError(2, NULL, NULL, 0, NULL); - ok(sql_ret == SQL_NO_DATA, "Too many errors when forcing an error for testing\n"); - - /* Null pointers are acceptable in all obvious places */ - sql_ret = SQLInstallerError(1, NULL, NULL, 0, NULL); - ok(sql_ret == SQL_SUCCESS_WITH_INFO, "SQLInstallerError(null addresses) failed with %d instead of SQL_SUCCESS_WITH_INFO\n", sql_ret); -} - -static void test_SQLInstallDriverManager(void) -{ - BOOL bool_ret; - RETCODE sql_ret; - DWORD error_code; - CHAR target_path[MAX_PATH]; - WORD path_out; - - /* NULL check */ - bool_ret = SQLInstallDriverManager(NULL, 0, NULL); - sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); - ok(!bool_ret, "SQLInstallDriverManager unexpectedly succeeded\n"); - todo_wine - ok(sql_ret == SQL_SUCCESS_WITH_INFO && error_code == ODBC_ERROR_INVALID_BUFF_LEN, - "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n"); - - /* Length smaller than MAX_PATH */ - bool_ret = SQLInstallDriverManager(target_path, MAX_PATH / 2, NULL); - sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); - todo_wine { - ok(!bool_ret, "SQLInstallDriverManager unexpectedly succeeded\n"); - ok(sql_ret == SQL_SUCCESS_WITH_INFO && error_code == ODBC_ERROR_INVALID_BUFF_LEN, - "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n"); - } - - path_out = 0xcafe; - bool_ret = SQLInstallDriverManager(target_path, MAX_PATH / 2, &path_out); - sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); - todo_wine { - ok(!bool_ret, "SQLInstallDriverManager unexpectedly succeeded\n"); - ok(sql_ret == SQL_SUCCESS_WITH_INFO && error_code == ODBC_ERROR_INVALID_BUFF_LEN, - "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n"); - ok(path_out == 0xcafe, "Expected path_out to not have changed\n"); - } - - /* Length OK */ - bool_ret = SQLInstallDriverManager(target_path, MAX_PATH, NULL); - sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); - ok(bool_ret, "SQLInstallDriverManager unexpectedly failed\n"); - ok(sql_ret == SQL_NO_DATA, "Expected SQL_NO_DATA, got %d\n", sql_ret); - - path_out = 0xcafe; - bool_ret = SQLInstallDriverManager(target_path, MAX_PATH, &path_out); - sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL); - ok(bool_ret, "SQLInstallDriverManager unexpectedly failed\n"); - ok(sql_ret == SQL_NO_DATA, "Expected SQL_NO_DATA, got %d\n", sql_ret); - /* path_out should in practice be less than 0xcafe */ - ok(path_out != 0xcafe, "Expected path_out to show the correct amount of bytes\n"); -} - -START_TEST(misc) -{ - test_SQLConfigMode(); - test_SQLInstallerError(); - test_SQLInstallDriverManager(); -} diff --git a/rostests/winetests/odbccp32/odbccp32.rbuild b/rostests/winetests/odbccp32/odbccp32.rbuild deleted file mode 100644 index 34e26f98e74..00000000000 --- a/rostests/winetests/odbccp32/odbccp32.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - - - - . - misc.c - testlist.c - wine - odbccp32 - kernel32 - ntdll - - diff --git a/rostests/winetests/odbccp32/testlist.c b/rostests/winetests/odbccp32/testlist.c deleted file mode 100644 index a92d75f6c40..00000000000 --- a/rostests/winetests/odbccp32/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_misc(void); - -const struct test winetest_testlist[] = -{ - { "misc", func_misc }, - { 0, 0 } -}; diff --git a/rostests/winetests/ole32/clipboard.c b/rostests/winetests/ole32/clipboard.c deleted file mode 100644 index ee912ce773e..00000000000 --- a/rostests/winetests/ole32/clipboard.c +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Clipboard unit tests - * - * Copyright 2006 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 - */ - -#define COBJMACROS - -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" - -#include "wine/test.h" - -#define InitFormatEtc(fe, cf, med) \ - {\ - (fe).cfFormat=cf;\ - (fe).dwAspect=DVASPECT_CONTENT;\ - (fe).ptd=NULL;\ - (fe).tymed=med;\ - (fe).lindex=-1;\ - }; - -typedef struct DataObjectImpl { - const IDataObjectVtbl *lpVtbl; - LONG ref; - - FORMATETC *fmtetc; - UINT fmtetc_cnt; - - HANDLE text; -} DataObjectImpl; - -typedef struct EnumFormatImpl { - const IEnumFORMATETCVtbl *lpVtbl; - LONG ref; - - FORMATETC *fmtetc; - UINT fmtetc_cnt; - - UINT cur; -} EnumFormatImpl; - -static BOOL expect_DataObjectImpl_QueryGetData = TRUE; -static ULONG DataObjectImpl_GetData_calls = 0; - -static HRESULT EnumFormatImpl_Create(FORMATETC *fmtetc, UINT size, LPENUMFORMATETC *lplpformatetc); - -static HRESULT WINAPI EnumFormatImpl_QueryInterface(IEnumFORMATETC *iface, REFIID riid, LPVOID *ppvObj) -{ - EnumFormatImpl *This = (EnumFormatImpl*)iface; - - if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IEnumFORMATETC)) { - IEnumFORMATETC_AddRef(iface); - *ppvObj = (LPVOID)This; - return S_OK; - } - *ppvObj = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI EnumFormatImpl_AddRef(IEnumFORMATETC *iface) -{ - EnumFormatImpl *This = (EnumFormatImpl*)iface; - LONG ref = InterlockedIncrement(&This->ref); - return ref; -} - -static ULONG WINAPI EnumFormatImpl_Release(IEnumFORMATETC *iface) -{ - EnumFormatImpl *This = (EnumFormatImpl*)iface; - ULONG ref = InterlockedDecrement(&This->ref); - - if(!ref) { - HeapFree(GetProcessHeap(), 0, This->fmtetc); - HeapFree(GetProcessHeap(), 0, This); - } - - return ref; -} - -static HRESULT WINAPI EnumFormatImpl_Next(IEnumFORMATETC *iface, ULONG celt, - FORMATETC *rgelt, ULONG *pceltFetched) -{ - EnumFormatImpl *This = (EnumFormatImpl*)iface; - ULONG count = 0; - - if(!rgelt) - return E_INVALIDARG; - - count = min(celt, This->fmtetc_cnt-This->cur); - if(count > 0) { - memcpy(rgelt, This->fmtetc+This->cur, count*sizeof(FORMATETC)); - This->cur += count; - } - if(pceltFetched) - *pceltFetched = count; - return count == celt ? S_OK : S_FALSE; -} - -static HRESULT WINAPI EnumFormatImpl_Skip(IEnumFORMATETC *iface, ULONG celt) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI EnumFormatImpl_Reset(IEnumFORMATETC *iface) -{ - EnumFormatImpl *This = (EnumFormatImpl*)iface; - - This->cur = 0; - return S_OK; -} - -static HRESULT WINAPI EnumFormatImpl_Clone(IEnumFORMATETC *iface, IEnumFORMATETC **ppenum) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IEnumFORMATETCVtbl VT_EnumFormatImpl = { - EnumFormatImpl_QueryInterface, - EnumFormatImpl_AddRef, - EnumFormatImpl_Release, - EnumFormatImpl_Next, - EnumFormatImpl_Skip, - EnumFormatImpl_Reset, - EnumFormatImpl_Clone -}; - -static HRESULT EnumFormatImpl_Create(FORMATETC *fmtetc, UINT fmtetc_cnt, IEnumFORMATETC **lplpformatetc) -{ - EnumFormatImpl *ret; - - ret = HeapAlloc(GetProcessHeap(), 0, sizeof(EnumFormatImpl)); - ret->lpVtbl = &VT_EnumFormatImpl; - ret->ref = 1; - ret->cur = 0; - ret->fmtetc_cnt = fmtetc_cnt; - ret->fmtetc = HeapAlloc(GetProcessHeap(), 0, fmtetc_cnt*sizeof(FORMATETC)); - memcpy(ret->fmtetc, fmtetc, fmtetc_cnt*sizeof(FORMATETC)); - *lplpformatetc = (LPENUMFORMATETC)ret; - return S_OK; -} - -static HRESULT WINAPI DataObjectImpl_QueryInterface(IDataObject *iface, REFIID riid, LPVOID *ppvObj) -{ - DataObjectImpl *This = (DataObjectImpl*)iface; - - if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDataObject)) { - IDataObject_AddRef(iface); - *ppvObj = (LPVOID)This; - return S_OK; - } - *ppvObj = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI DataObjectImpl_AddRef(IDataObject* iface) -{ - DataObjectImpl *This = (DataObjectImpl*)iface; - ULONG ref = InterlockedIncrement(&This->ref); - return ref; -} - -static ULONG WINAPI DataObjectImpl_Release(IDataObject* iface) -{ - DataObjectImpl *This = (DataObjectImpl*)iface; - ULONG ref = InterlockedDecrement(&This->ref); - - if(!ref) { - if(This->text) GlobalFree(This->text); - if(This->fmtetc) GlobalFree(This->fmtetc); - HeapFree(GetProcessHeap(), 0, This); - } - - return ref; -} - -static HRESULT WINAPI DataObjectImpl_GetData(IDataObject* iface, FORMATETC *pformatetc, STGMEDIUM *pmedium) -{ - DataObjectImpl *This = (DataObjectImpl*)iface; - - DataObjectImpl_GetData_calls++; - - if(pformatetc->lindex != -1) - return DV_E_LINDEX; - - if(!(pformatetc->tymed & TYMED_HGLOBAL)) - return DV_E_TYMED; - - if(This->text && pformatetc->cfFormat == CF_TEXT) - U(*pmedium).hGlobal = This->text; - else - return DV_E_FORMATETC; - - pmedium->tymed = TYMED_HGLOBAL; - pmedium->pUnkForRelease = (LPUNKNOWN)iface; - IUnknown_AddRef(pmedium->pUnkForRelease); - return S_OK; -} - -static HRESULT WINAPI DataObjectImpl_GetDataHere(IDataObject* iface, FORMATETC *pformatetc, STGMEDIUM *pmedium) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObjectImpl_QueryGetData(IDataObject* iface, FORMATETC *pformatetc) -{ - DataObjectImpl *This = (DataObjectImpl*)iface; - UINT i; - BOOL foundFormat = FALSE; - - if (!expect_DataObjectImpl_QueryGetData) - ok(0, "unexpected call to DataObjectImpl_QueryGetData\n"); - - if(pformatetc->lindex != -1) - return DV_E_LINDEX; - - for(i=0; ifmtetc_cnt; i++) { - if(This->fmtetc[i].cfFormat == pformatetc->cfFormat) { - foundFormat = TRUE; - if(This->fmtetc[i].tymed == pformatetc->tymed) - return S_OK; - } - } - return foundFormat?DV_E_FORMATETC:DV_E_TYMED; -} - -static HRESULT WINAPI DataObjectImpl_GetCanonicalFormatEtc(IDataObject* iface, FORMATETC *pformatectIn, - FORMATETC *pformatetcOut) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObjectImpl_SetData(IDataObject* iface, FORMATETC *pformatetc, - STGMEDIUM *pmedium, BOOL fRelease) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObjectImpl_EnumFormatEtc(IDataObject* iface, DWORD dwDirection, - IEnumFORMATETC **ppenumFormatEtc) -{ - DataObjectImpl *This = (DataObjectImpl*)iface; - - if(dwDirection != DATADIR_GET) { - ok(0, "unexpected direction %d\n", dwDirection); - return E_NOTIMPL; - } - return EnumFormatImpl_Create(This->fmtetc, This->fmtetc_cnt, ppenumFormatEtc); -} - -static HRESULT WINAPI DataObjectImpl_DAdvise(IDataObject* iface, FORMATETC *pformatetc, DWORD advf, - IAdviseSink *pAdvSink, DWORD *pdwConnection) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObjectImpl_DUnadvise(IDataObject* iface, DWORD dwConnection) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObjectImpl_EnumDAdvise(IDataObject* iface, IEnumSTATDATA **ppenumAdvise) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IDataObjectVtbl VT_DataObjectImpl = -{ - DataObjectImpl_QueryInterface, - DataObjectImpl_AddRef, - DataObjectImpl_Release, - DataObjectImpl_GetData, - DataObjectImpl_GetDataHere, - DataObjectImpl_QueryGetData, - DataObjectImpl_GetCanonicalFormatEtc, - DataObjectImpl_SetData, - DataObjectImpl_EnumFormatEtc, - DataObjectImpl_DAdvise, - DataObjectImpl_DUnadvise, - DataObjectImpl_EnumDAdvise -}; - -static HRESULT DataObjectImpl_CreateText(LPCSTR text, LPDATAOBJECT *lplpdataobj) -{ - DataObjectImpl *obj; - - obj = HeapAlloc(GetProcessHeap(), 0, sizeof(DataObjectImpl)); - obj->lpVtbl = &VT_DataObjectImpl; - obj->ref = 1; - obj->text = GlobalAlloc(GMEM_MOVEABLE, strlen(text) + 1); - strcpy(GlobalLock(obj->text), text); - GlobalUnlock(obj->text); - - obj->fmtetc_cnt = 1; - obj->fmtetc = HeapAlloc(GetProcessHeap(), 0, obj->fmtetc_cnt*sizeof(FORMATETC)); - InitFormatEtc(obj->fmtetc[0], CF_TEXT, TYMED_HGLOBAL); - - *lplpdataobj = (LPDATAOBJECT)obj; - return S_OK; -} - -static void test_get_clipboard(void) -{ - HRESULT hr; - IDataObject *data_obj; - FORMATETC fmtetc; - STGMEDIUM stgmedium; - - hr = OleGetClipboard(NULL); - ok(hr == E_INVALIDARG, "OleGetClipboard(NULL) should return E_INVALIDARG instead of 0x%08x\n", hr); - - hr = OleGetClipboard(&data_obj); - ok(hr == S_OK, "OleGetClipboard failed with error 0x%08x\n", hr); - - /* test IDataObject_QueryGetData */ - - /* clipboard's IDataObject_QueryGetData shouldn't defer to our IDataObject_QueryGetData */ - expect_DataObjectImpl_QueryGetData = FALSE; - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - hr = IDataObject_QueryGetData(data_obj, &fmtetc); - ok(hr == S_OK, "IDataObject_QueryGetData failed with error 0x%08x\n", hr); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.dwAspect = 0xdeadbeef; - hr = IDataObject_QueryGetData(data_obj, &fmtetc); - ok(hr == DV_E_FORMATETC, "IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.dwAspect = DVASPECT_THUMBNAIL; - hr = IDataObject_QueryGetData(data_obj, &fmtetc); - ok(hr == DV_E_FORMATETC, "IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.lindex = 256; - hr = IDataObject_QueryGetData(data_obj, &fmtetc); - ok(hr == DV_E_FORMATETC, "IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.cfFormat = CF_RIFF; - hr = IDataObject_QueryGetData(data_obj, &fmtetc); - ok(hr == DV_E_CLIPFORMAT, "IDataObject_QueryGetData should have failed with DV_E_CLIPFORMAT instead of 0x%08x\n", hr); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.tymed = TYMED_FILE; - hr = IDataObject_QueryGetData(data_obj, &fmtetc); - ok(hr == S_OK, "IDataObject_QueryGetData failed with error 0x%08x\n", hr); - - expect_DataObjectImpl_QueryGetData = TRUE; - - /* test IDataObject_GetData */ - - DataObjectImpl_GetData_calls = 0; - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium); - ok(hr == S_OK, "IDataObject_GetData failed with error 0x%08x\n", hr); - ReleaseStgMedium(&stgmedium); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.dwAspect = 0xdeadbeef; - hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium); - ok(hr == S_OK, "IDataObject_GetData failed with error 0x%08x\n", hr); - ReleaseStgMedium(&stgmedium); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.dwAspect = DVASPECT_THUMBNAIL; - hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium); - ok(hr == S_OK, "IDataObject_GetData failed with error 0x%08x\n", hr); - ReleaseStgMedium(&stgmedium); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.lindex = 256; - hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium); - todo_wine - ok(hr == DV_E_FORMATETC, "IDataObject_GetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.cfFormat = CF_RIFF; - hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium); - ok(hr == DV_E_FORMATETC, "IDataObject_GetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr); - - InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL); - fmtetc.tymed = TYMED_FILE; - hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium); - ok(hr == DV_E_TYMED, "IDataObject_GetData should have failed with DV_E_TYMED instead of 0x%08x\n", hr); - - ok(DataObjectImpl_GetData_calls == 6, "DataObjectImpl_GetData should have been called 6 times instead of %d times\n", DataObjectImpl_GetData_calls); - - IDataObject_Release(data_obj); -} - -static void test_set_clipboard(void) -{ - HRESULT hr; - ULONG ref; - LPDATAOBJECT data1, data2; - hr = DataObjectImpl_CreateText("data1", &data1); - ok(SUCCEEDED(hr), "Failed to create data1 object: 0x%08x\n", hr); - if(FAILED(hr)) - return; - hr = DataObjectImpl_CreateText("data2", &data2); - ok(SUCCEEDED(hr), "Failed to create data2 object: 0x%08x\n", hr); - if(FAILED(hr)) - return; - - hr = OleSetClipboard(data1); - todo_wine - ok(hr == CO_E_NOTINITIALIZED, "OleSetClipboard should have failed with CO_E_NOTINITIALIZED instead of 0x%08x\n", hr); - - CoInitialize(NULL); - hr = OleSetClipboard(data1); - todo_wine - ok(hr == CO_E_NOTINITIALIZED || - hr == CLIPBRD_E_CANT_SET, /* win9x */ - "OleSetClipboard should have failed with " - "CO_E_NOTINITIALIZED or CLIPBRD_E_CANT_SET instead of 0x%08x\n", hr); - CoUninitialize(); - - hr = OleInitialize(NULL); - ok(hr == S_OK, "OleInitialize failed with error 0x%08x\n", hr); - - hr = OleSetClipboard(data1); - ok(hr == S_OK, "failed to set clipboard to data1, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(data1); - ok(hr == S_OK, "expected current clipboard to be data1, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(data2); - ok(hr == S_FALSE, "did not expect current clipboard to be data2, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(NULL); - ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr); - - test_get_clipboard(); - - hr = OleSetClipboard(data2); - ok(hr == S_OK, "failed to set clipboard to data2, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(data1); - ok(hr == S_FALSE, "did not expect current clipboard to be data1, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(data2); - ok(hr == S_OK, "expected current clipboard to be data2, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(NULL); - ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr); - - hr = OleFlushClipboard(); - ok(hr == S_OK, "failed to flush clipboard, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(data1); - ok(hr == S_FALSE, "did not expect current clipboard to be data1, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(data2); - ok(hr == S_FALSE, "did not expect current clipboard to be data2, hr = 0x%08x\n", hr); - hr = OleIsCurrentClipboard(NULL); - ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr); - - ok(OleSetClipboard(NULL) == S_OK, "failed to clear clipboard, hr = 0x%08x\n", hr); - - ref = IDataObject_Release(data1); - ok(ref == 0, "expected data1 ref=0, got %d\n", ref); - ref = IDataObject_Release(data2); - ok(ref == 0, "expected data2 ref=0, got %d\n", ref); - - OleUninitialize(); -} - - -START_TEST(clipboard) -{ - test_set_clipboard(); -} diff --git a/rostests/winetests/ole32/compobj.c b/rostests/winetests/ole32/compobj.c deleted file mode 100644 index bdc34d9b69b..00000000000 --- a/rostests/winetests/ole32/compobj.c +++ /dev/null @@ -1,1053 +0,0 @@ -/* - * Component Object Tests - * - * 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 - */ - -#define COBJMACROS -#define CONST_VTABLE - -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" -#include "shlguid.h" -#include "urlmon.h" /* for CLSID_FileProtocol */ - -#include "wine/test.h" - -/* functions that are not present on all versions of Windows */ -HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit); -HRESULT (WINAPI * pCoGetObjectContext)(REFIID riid, LPVOID *ppv); - -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) -#define ok_more_than_one_lock() ok(cLocks > 0, "Number of locks should be > 0, but actually is %d\n", cLocks) -#define ok_no_locks() ok(cLocks == 0, "Number of locks should be 0, but actually is %d\n", cLocks) - -static const CLSID CLSID_non_existent = { 0x12345678, 0x1234, 0x1234, { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 } }; -static const CLSID CLSID_CDeviceMoniker = { 0x4315d437, 0x5b8c, 0x11d0, { 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86 } }; -static WCHAR devicedotone[] = {'d','e','v','i','c','e','.','1',0}; -static const WCHAR wszNonExistent[] = {'N','o','n','E','x','i','s','t','e','n','t',0}; -static WCHAR wszCLSID_CDeviceMoniker[] = -{ - '{', - '4','3','1','5','d','4','3','7','-', - '5','b','8','c','-', - '1','1','d','0','-', - 'b','d','3','b','-', - '0','0','a','0','c','9','1','1','c','e','8','6', - '}',0 -}; - -static const IID IID_IWineTest = -{ - 0x5201163f, - 0x8164, - 0x4fd0, - {0xa1, 0xa2, 0x5d, 0x5a, 0x36, 0x54, 0xd3, 0xbd} -}; /* 5201163f-8164-4fd0-a1a2-5d5a3654d3bd */ -static const CLSID CLSID_WineOOPTest = { - 0x5201163f, - 0x8164, - 0x4fd0, - {0xa1, 0xa2, 0x5d, 0x5a, 0x36, 0x54, 0xd3, 0xbd} -}; /* 5201163f-8164-4fd0-a1a2-5d5a3654d3bd */ - -static LONG cLocks; - -static void LockModule(void) -{ - InterlockedIncrement(&cLocks); -} - -static void UnlockModule(void) -{ - InterlockedDecrement(&cLocks); -} - -static HRESULT WINAPI Test_IClassFactory_QueryInterface( - LPCLASSFACTORY iface, - REFIID riid, - LPVOID *ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IClassFactory)) - { - *ppvObj = (LPVOID)iface; - IClassFactory_AddRef(iface); - return S_OK; - } - - *ppvObj = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Test_IClassFactory_AddRef(LPCLASSFACTORY iface) -{ - LockModule(); - return 2; /* non-heap-based object */ -} - -static ULONG WINAPI Test_IClassFactory_Release(LPCLASSFACTORY iface) -{ - UnlockModule(); - return 1; /* non-heap-based object */ -} - -static HRESULT WINAPI Test_IClassFactory_CreateInstance( - LPCLASSFACTORY iface, - LPUNKNOWN pUnkOuter, - REFIID riid, - LPVOID *ppvObj) -{ - *ppvObj = NULL; - if (pUnkOuter) return CLASS_E_NOAGGREGATION; - return E_NOINTERFACE; -} - -static HRESULT WINAPI Test_IClassFactory_LockServer( - LPCLASSFACTORY iface, - BOOL fLock) -{ - return S_OK; -} - -static const IClassFactoryVtbl TestClassFactory_Vtbl = -{ - Test_IClassFactory_QueryInterface, - Test_IClassFactory_AddRef, - Test_IClassFactory_Release, - Test_IClassFactory_CreateInstance, - Test_IClassFactory_LockServer -}; - -static IClassFactory Test_ClassFactory = { &TestClassFactory_Vtbl }; - -static void test_ProgIDFromCLSID(void) -{ - LPWSTR progid; - HRESULT hr = ProgIDFromCLSID(&CLSID_CDeviceMoniker, &progid); - ok(hr == S_OK, "ProgIDFromCLSID failed with error 0x%08x\n", hr); - if (hr == S_OK) - { - ok(!lstrcmpiW(progid, devicedotone), "Didn't get expected prog ID\n"); - CoTaskMemFree(progid); - } - - progid = (LPWSTR)0xdeadbeef; - hr = ProgIDFromCLSID(&CLSID_non_existent, &progid); - ok(hr == REGDB_E_CLASSNOTREG, "ProgIDFromCLSID returned %08x\n", hr); - ok(progid == NULL, "ProgIDFromCLSID returns with progid %p\n", progid); - - hr = ProgIDFromCLSID(&CLSID_CDeviceMoniker, NULL); - ok(hr == E_INVALIDARG, "ProgIDFromCLSID should return E_INVALIDARG instead of 0x%08x\n", hr); -} - -static void test_CLSIDFromProgID(void) -{ - CLSID clsid; - HRESULT hr = CLSIDFromProgID(devicedotone, &clsid); - ok(hr == S_OK, "CLSIDFromProgID failed with error 0x%08x\n", hr); - ok(IsEqualCLSID(&clsid, &CLSID_CDeviceMoniker), "clsid wasn't equal to CLSID_CDeviceMoniker\n"); - - hr = CLSIDFromString(devicedotone, &clsid); - ok_ole_success(hr, "CLSIDFromString"); - ok(IsEqualCLSID(&clsid, &CLSID_CDeviceMoniker), "clsid wasn't equal to CLSID_CDeviceMoniker\n"); - - /* test some failure cases */ - - hr = CLSIDFromProgID(wszNonExistent, NULL); - ok(hr == E_INVALIDARG, "CLSIDFromProgID should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CLSIDFromProgID(NULL, &clsid); - ok(hr == E_INVALIDARG, "CLSIDFromProgID should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - memset(&clsid, 0xcc, sizeof(clsid)); - hr = CLSIDFromProgID(wszNonExistent, &clsid); - ok(hr == CO_E_CLASSSTRING, "CLSIDFromProgID on nonexistent ProgID should have returned CO_E_CLASSSTRING instead of 0x%08x\n", hr); - ok(IsEqualCLSID(&clsid, &CLSID_NULL), "CLSIDFromProgID should have set clsid to all-zeros on failure\n"); -} - -static void test_CLSIDFromString(void) -{ - CLSID clsid; - HRESULT hr = CLSIDFromString(wszCLSID_CDeviceMoniker, &clsid); - ok_ole_success(hr, "CLSIDFromString"); - ok(IsEqualCLSID(&clsid, &CLSID_CDeviceMoniker), "clsid wasn't equal to CLSID_CDeviceMoniker\n"); - - hr = CLSIDFromString(NULL, &clsid); - ok_ole_success(hr, "CLSIDFromString"); - ok(IsEqualCLSID(&clsid, &CLSID_NULL), "clsid wasn't equal to CLSID_NULL\n"); -} - -static void test_StringFromGUID2(void) -{ - WCHAR str[50]; - int len; - /* Test corner cases for buffer size */ - len = StringFromGUID2(&CLSID_CDeviceMoniker,str,50); - ok(len == 39, "len: %d (expected 39)\n", len); - ok(!lstrcmpiW(str, wszCLSID_CDeviceMoniker),"string wan't equal for CLSID_CDeviceMoniker\n"); - - memset(str,0,sizeof str); - len = StringFromGUID2(&CLSID_CDeviceMoniker,str,39); - ok(len == 39, "len: %d (expected 39)\n", len); - ok(!lstrcmpiW(str, wszCLSID_CDeviceMoniker),"string wan't equal for CLSID_CDeviceMoniker\n"); - - len = StringFromGUID2(&CLSID_CDeviceMoniker,str,38); - ok(len == 0, "len: %d (expected 0)\n", len); - - len = StringFromGUID2(&CLSID_CDeviceMoniker,str,30); - ok(len == 0, "len: %d (expected 0)\n", len); -} - -static void test_CoCreateInstance(void) -{ - REFCLSID rclsid = &CLSID_MyComputer; - IUnknown *pUnk = (IUnknown *)0xdeadbeef; - HRESULT hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&pUnk); - ok(hr == CO_E_NOTINITIALIZED, "CoCreateInstance should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr); - ok(pUnk == NULL, "CoCreateInstance should have changed the passed in pointer to NULL, instead of %p\n", pUnk); - - OleInitialize(NULL); - hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&pUnk); - ok_ole_success(hr, "CoCreateInstance"); - if(pUnk) IUnknown_Release(pUnk); - OleUninitialize(); - - hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&pUnk); - ok(hr == CO_E_NOTINITIALIZED, "CoCreateInstance should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr); -} - -static void test_CoGetClassObject(void) -{ - IUnknown *pUnk = (IUnknown *)0xdeadbeef; - HRESULT hr = CoGetClassObject(&CLSID_MyComputer, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void **)&pUnk); - ok(hr == CO_E_NOTINITIALIZED, "CoGetClassObject should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr); - ok(pUnk == NULL, "CoGetClassObject should have changed the passed in pointer to NULL, instead of %p\n", pUnk); - - hr = CoGetClassObject(&CLSID_MyComputer, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, NULL); - ok(hr == E_INVALIDARG || - broken(hr == CO_E_NOTINITIALIZED), /* win9x */ - "CoGetClassObject should have returned E_INVALIDARG instead of 0x%08x\n", hr); -} - -static ATOM register_dummy_class(void) -{ - WNDCLASS wc = - { - 0, - DefWindowProc, - 0, - 0, - GetModuleHandle(NULL), - NULL, - LoadCursor(NULL, IDC_ARROW), - (HBRUSH)(COLOR_BTNFACE+1), - NULL, - TEXT("WineOleTestClass"), - }; - - return RegisterClass(&wc); -} - -static void test_ole_menu(void) -{ - HWND hwndFrame; - HRESULT hr; - - hwndFrame = CreateWindow(MAKEINTATOM(register_dummy_class()), "Test", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL); - hr = OleSetMenuDescriptor(NULL, hwndFrame, NULL, NULL, NULL); - todo_wine ok_ole_success(hr, "OleSetMenuDescriptor"); - - DestroyWindow(hwndFrame); -} - - -static HRESULT WINAPI MessageFilter_QueryInterface(IMessageFilter *iface, REFIID riid, void ** ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IClassFactory)) - { - *ppvObj = (LPVOID)iface; - IMessageFilter_AddRef(iface); - return S_OK; - } - - return E_NOINTERFACE; -} - -static ULONG WINAPI MessageFilter_AddRef(IMessageFilter *iface) -{ - return 2; /* non-heap object */ -} - -static ULONG WINAPI MessageFilter_Release(IMessageFilter *iface) -{ - return 1; /* non-heap object */ -} - -static DWORD WINAPI MessageFilter_HandleInComingCall( - IMessageFilter *iface, - DWORD dwCallType, - HTASK threadIDCaller, - DWORD dwTickCount, - LPINTERFACEINFO lpInterfaceInfo) -{ - trace("HandleInComingCall\n"); - return SERVERCALL_ISHANDLED; -} - -static DWORD WINAPI MessageFilter_RetryRejectedCall( - IMessageFilter *iface, - HTASK threadIDCallee, - DWORD dwTickCount, - DWORD dwRejectType) -{ - trace("RetryRejectedCall\n"); - return 0; -} - -static DWORD WINAPI MessageFilter_MessagePending( - IMessageFilter *iface, - HTASK threadIDCallee, - DWORD dwTickCount, - DWORD dwPendingType) -{ - trace("MessagePending\n"); - return PENDINGMSG_WAITNOPROCESS; -} - -static const IMessageFilterVtbl MessageFilter_Vtbl = -{ - MessageFilter_QueryInterface, - MessageFilter_AddRef, - MessageFilter_Release, - MessageFilter_HandleInComingCall, - MessageFilter_RetryRejectedCall, - MessageFilter_MessagePending -}; - -static IMessageFilter MessageFilter = { &MessageFilter_Vtbl }; - -static void test_CoRegisterMessageFilter(void) -{ - HRESULT hr; - IMessageFilter *prev_filter; - - hr = CoRegisterMessageFilter(&MessageFilter, &prev_filter); - ok(hr == CO_E_NOT_SUPPORTED, - "CoRegisterMessageFilter should have failed with CO_E_NOT_SUPPORTED instead of 0x%08x\n", - hr); - - pCoInitializeEx(NULL, COINIT_MULTITHREADED); - prev_filter = (IMessageFilter *)0xdeadbeef; - hr = CoRegisterMessageFilter(&MessageFilter, &prev_filter); - ok(hr == CO_E_NOT_SUPPORTED, - "CoRegisterMessageFilter should have failed with CO_E_NOT_SUPPORTED instead of 0x%08x\n", - hr); - ok(prev_filter == (IMessageFilter *)0xdeadbeef, - "prev_filter should have been set to %p\n", prev_filter); - CoUninitialize(); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoRegisterMessageFilter(NULL, NULL); - ok_ole_success(hr, "CoRegisterMessageFilter"); - - prev_filter = (IMessageFilter *)0xdeadbeef; - hr = CoRegisterMessageFilter(NULL, &prev_filter); - ok_ole_success(hr, "CoRegisterMessageFilter"); - ok(prev_filter == NULL, "prev_filter should have been set to NULL instead of %p\n", prev_filter); - - hr = CoRegisterMessageFilter(&MessageFilter, &prev_filter); - ok_ole_success(hr, "CoRegisterMessageFilter"); - ok(prev_filter == NULL, "prev_filter should have been set to NULL instead of %p\n", prev_filter); - - hr = CoRegisterMessageFilter(NULL, NULL); - ok_ole_success(hr, "CoRegisterMessageFilter"); - - CoUninitialize(); -} - -static HRESULT WINAPI Test_IUnknown_QueryInterface( - LPUNKNOWN iface, - REFIID riid, - LPVOID *ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualIID(riid, &IID_IUnknown) || - IsEqualIID(riid, &IID_IWineTest)) - { - *ppvObj = (LPVOID)iface; - IUnknown_AddRef(iface); - return S_OK; - } - - *ppvObj = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Test_IUnknown_AddRef(LPUNKNOWN iface) -{ - return 2; /* non-heap-based object */ -} - -static ULONG WINAPI Test_IUnknown_Release(LPUNKNOWN iface) -{ - return 1; /* non-heap-based object */ -} - -static const IUnknownVtbl TestUnknown_Vtbl = -{ - Test_IUnknown_QueryInterface, - Test_IUnknown_AddRef, - Test_IUnknown_Release, -}; - -static IUnknown Test_Unknown = { &TestUnknown_Vtbl }; - -static HRESULT WINAPI PSFactoryBuffer_QueryInterface( - IPSFactoryBuffer * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject) -{ - if (IsEqualIID(riid, &IID_IUnknown) || - IsEqualIID(riid, &IID_IPSFactoryBuffer)) - { - *ppvObject = This; - IPSFactoryBuffer_AddRef(This); - return S_OK; - } - return E_NOINTERFACE; -} - -static ULONG WINAPI PSFactoryBuffer_AddRef( - IPSFactoryBuffer * This) -{ - return 2; -} - -static ULONG WINAPI PSFactoryBuffer_Release( - IPSFactoryBuffer * This) -{ - return 1; -} - -static HRESULT WINAPI PSFactoryBuffer_CreateProxy( - IPSFactoryBuffer * This, - /* [in] */ IUnknown *pUnkOuter, - /* [in] */ REFIID riid, - /* [out] */ IRpcProxyBuffer **ppProxy, - /* [out] */ void **ppv) -{ - return E_NOTIMPL; -} - -static HRESULT WINAPI PSFactoryBuffer_CreateStub( - IPSFactoryBuffer * This, - /* [in] */ REFIID riid, - /* [unique][in] */ IUnknown *pUnkServer, - /* [out] */ IRpcStubBuffer **ppStub) -{ - return E_NOTIMPL; -} - -static IPSFactoryBufferVtbl PSFactoryBufferVtbl = -{ - PSFactoryBuffer_QueryInterface, - PSFactoryBuffer_AddRef, - PSFactoryBuffer_Release, - PSFactoryBuffer_CreateProxy, - PSFactoryBuffer_CreateStub -}; - -static IPSFactoryBuffer PSFactoryBuffer = { &PSFactoryBufferVtbl }; - -static const CLSID CLSID_WineTestPSFactoryBuffer = -{ - 0x52011640, - 0x8164, - 0x4fd0, - {0xa1, 0xa2, 0x5d, 0x5a, 0x36, 0x54, 0xd3, 0xbd} -}; /* 52011640-8164-4fd0-a1a2-5d5a3654d3bd */ - -static void test_CoRegisterPSClsid(void) -{ - HRESULT hr; - DWORD dwRegistrationKey; - IStream *stream; - CLSID clsid; - - hr = CoRegisterPSClsid(&IID_IWineTest, &CLSID_WineTestPSFactoryBuffer); - ok(hr == CO_E_NOTINITIALIZED, "CoRegisterPSClsid should have returened CO_E_NOTINITIALIZED instead of 0x%08x\n", hr); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoRegisterClassObject(&CLSID_WineTestPSFactoryBuffer, (IUnknown *)&PSFactoryBuffer, - CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &dwRegistrationKey); - ok_ole_success(hr, "CoRegisterClassObject"); - - hr = CoRegisterPSClsid(&IID_IWineTest, &CLSID_WineTestPSFactoryBuffer); - ok_ole_success(hr, "CoRegisterPSClsid"); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - - hr = CoMarshalInterface(stream, &IID_IWineTest, (IUnknown *)&Test_Unknown, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok(hr == E_NOTIMPL, "CoMarshalInterface should have returned E_NOTIMPL instead of 0x%08x\n", hr); - IStream_Release(stream); - - hr = CoRevokeClassObject(dwRegistrationKey); - ok_ole_success(hr, "CoRevokeClassObject"); - - CoUninitialize(); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoGetPSClsid(&IID_IWineTest, &clsid); - ok(hr == REGDB_E_IIDNOTREG, "CoGetPSClsid should have returned REGDB_E_IIDNOTREG instead of 0x%08x\n", hr); - - CoUninitialize(); -} - -static void test_CoGetPSClsid(void) -{ - HRESULT hr; - CLSID clsid; - - hr = CoGetPSClsid(&IID_IClassFactory, &clsid); - ok(hr == CO_E_NOTINITIALIZED, - "CoGetPSClsid should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", - hr); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoGetPSClsid(&IID_IClassFactory, &clsid); - ok_ole_success(hr, "CoGetPSClsid"); - - hr = CoGetPSClsid(&IID_IWineTest, &clsid); - ok(hr == REGDB_E_IIDNOTREG, - "CoGetPSClsid for random IID returned 0x%08x instead of REGDB_E_IIDNOTREG\n", - hr); - - hr = CoGetPSClsid(&IID_IClassFactory, NULL); - ok(hr == E_INVALIDARG, - "CoGetPSClsid for null clsid returned 0x%08x instead of E_INVALIDARG\n", - hr); - - CoUninitialize(); -} - -/* basic test, mainly for invalid arguments. see marshal.c for more */ -static void test_CoUnmarshalInterface(void) -{ - IUnknown *pProxy; - IStream *pStream; - HRESULT hr; - - hr = CoUnmarshalInterface(NULL, &IID_IUnknown, (void **)&pProxy); - ok(hr == E_INVALIDARG, "CoUnmarshalInterface should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - - hr = CoUnmarshalInterface(pStream, &IID_IUnknown, (void **)&pProxy); - todo_wine - ok(hr == CO_E_NOTINITIALIZED, "CoUnmarshalInterface should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoUnmarshalInterface(pStream, &IID_IUnknown, (void **)&pProxy); - ok(hr == STG_E_READFAULT, "CoUnmarshalInterface should have returned STG_E_READFAULT instead of 0x%08x\n", hr); - - CoUninitialize(); - - hr = CoUnmarshalInterface(pStream, &IID_IUnknown, NULL); - ok(hr == E_INVALIDARG, "CoUnmarshalInterface should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - IStream_Release(pStream); -} - -static void test_CoGetInterfaceAndReleaseStream(void) -{ - HRESULT hr; - IUnknown *pUnk; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoGetInterfaceAndReleaseStream(NULL, &IID_IUnknown, (void**)&pUnk); - ok(hr == E_INVALIDARG, "hr %08x\n", hr); - - CoUninitialize(); -} - -/* basic test, mainly for invalid arguments. see marshal.c for more */ -static void test_CoMarshalInterface(void) -{ - IStream *pStream; - HRESULT hr; - static const LARGE_INTEGER llZero; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - - hr = CoMarshalInterface(pStream, &IID_IUnknown, NULL, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok(hr == E_INVALIDARG, "CoMarshalInterface should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CoMarshalInterface(NULL, &IID_IUnknown, (IUnknown *)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok(hr == E_INVALIDARG, "CoMarshalInterface should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CoMarshalInterface(pStream, &IID_IUnknown, (IUnknown *)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, "CoMarshalInterface"); - - /* stream not rewound */ - hr = CoReleaseMarshalData(pStream); - ok(hr == STG_E_READFAULT, "CoReleaseMarshalData should have returned STG_E_READFAULT instead of 0x%08x\n", hr); - - hr = IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - ok_ole_success(hr, "IStream_Seek"); - - hr = CoReleaseMarshalData(pStream); - ok_ole_success(hr, "CoReleaseMarshalData"); - - IStream_Release(pStream); - - CoUninitialize(); -} - -static void test_CoMarshalInterThreadInterfaceInStream(void) -{ - IStream *pStream; - HRESULT hr; - IClassFactory *pProxy; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - cLocks = 0; - - hr = CoMarshalInterThreadInterfaceInStream(&IID_IUnknown, (IUnknown *)&Test_ClassFactory, NULL); - ok(hr == E_INVALIDARG, "CoMarshalInterThreadInterfaceInStream should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CoMarshalInterThreadInterfaceInStream(&IID_IUnknown, NULL, &pStream); - ok(hr == E_INVALIDARG, "CoMarshalInterThreadInterfaceInStream should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - ok_no_locks(); - - hr = CoMarshalInterThreadInterfaceInStream(&IID_IUnknown, (IUnknown *)&Test_ClassFactory, &pStream); - ok_ole_success(hr, "CoMarshalInterThreadInterfaceInStream"); - - ok_more_than_one_lock(); - - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, "CoUnmarshalInterface"); - - IClassFactory_Release(pProxy); - IStream_Release(pStream); - - ok_no_locks(); - - CoUninitialize(); -} - -static void test_CoRegisterClassObject(void) -{ - DWORD cookie; - HRESULT hr; - IClassFactory *pcf; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - /* CLSCTX_INPROC_SERVER */ - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_INPROC_SERVER, REGCLS_SINGLEUSE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_INPROC_SERVER, REGCLS_MULTI_SEPARATE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - /* CLSCTX_LOCAL_SERVER */ - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_LOCAL_SERVER, REGCLS_SINGLEUSE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_LOCAL_SERVER, REGCLS_MULTI_SEPARATE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - /* CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER */ - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, REGCLS_SINGLEUSE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - /* test whether registered class becomes invalid when apartment is destroyed */ - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_INPROC_SERVER, REGCLS_SINGLEUSE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - - CoUninitialize(); - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoGetClassObject(&CLSID_WineOOPTest, CLSCTX_INPROC_SERVER, NULL, - &IID_IClassFactory, (void **)&pcf); - ok(hr == REGDB_E_CLASSNOTREG, "object registered in an apartment shouldn't accessible after it is destroyed\n"); - - /* crashes with at least win9x DCOM! */ - if (0) - hr = CoRevokeClassObject(cookie); - - CoUninitialize(); -} - -static HRESULT get_class_object(CLSCTX clsctx) -{ - HRESULT hr; - IClassFactory *pcf; - - hr = CoGetClassObject(&CLSID_WineOOPTest, clsctx, NULL, &IID_IClassFactory, - (void **)&pcf); - - if (SUCCEEDED(hr)) - IClassFactory_Release(pcf); - - return hr; -} - -static DWORD CALLBACK get_class_object_thread(LPVOID pv) -{ - CLSCTX clsctx = (CLSCTX)(DWORD_PTR)pv; - HRESULT hr; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = get_class_object(clsctx); - - CoUninitialize(); - - return hr; -} - -static DWORD CALLBACK get_class_object_proxy_thread(LPVOID pv) -{ - CLSCTX clsctx = (CLSCTX)(DWORD_PTR)pv; - HRESULT hr; - IClassFactory *pcf; - IMultiQI *pMQI; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoGetClassObject(&CLSID_WineOOPTest, clsctx, NULL, &IID_IClassFactory, - (void **)&pcf); - - if (SUCCEEDED(hr)) - { - hr = IClassFactory_QueryInterface(pcf, &IID_IMultiQI, (void **)&pMQI); - if (SUCCEEDED(hr)) - IMultiQI_Release(pMQI); - IClassFactory_Release(pcf); - } - - CoUninitialize(); - - return hr; -} - -static DWORD CALLBACK register_class_object_thread(LPVOID pv) -{ - HRESULT hr; - DWORD cookie; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_INPROC_SERVER, REGCLS_SINGLEUSE, &cookie); - - CoUninitialize(); - - return hr; -} - -static DWORD CALLBACK revoke_class_object_thread(LPVOID pv) -{ - DWORD cookie = (DWORD_PTR)pv; - HRESULT hr; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoRevokeClassObject(cookie); - - CoUninitialize(); - - return hr; -} - -static void test_registered_object_thread_affinity(void) -{ - HRESULT hr; - DWORD cookie; - HANDLE thread; - DWORD tid; - DWORD exitcode; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - /* CLSCTX_INPROC_SERVER */ - - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_INPROC_SERVER, REGCLS_SINGLEUSE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - - thread = CreateThread(NULL, 0, get_class_object_thread, (LPVOID)CLSCTX_INPROC_SERVER, 0, &tid); - ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError()); - WaitForSingleObject(thread, INFINITE); - GetExitCodeThread(thread, &exitcode); - hr = exitcode; - ok(hr == REGDB_E_CLASSNOTREG, "CoGetClassObject on inproc object " - "registered in different thread should return REGDB_E_CLASSNOTREG " - "instead of 0x%08x\n", hr); - - hr = get_class_object(CLSCTX_INPROC_SERVER); - ok(hr == S_OK, "CoGetClassObject on inproc object registered in same " - "thread should return S_OK instead of 0x%08x\n", hr); - - thread = CreateThread(NULL, 0, register_class_object_thread, NULL, 0, &tid); - ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError()); - WaitForSingleObject(thread, INFINITE); - GetExitCodeThread(thread, &exitcode); - hr = exitcode; - ok(hr == S_OK, "CoRegisterClassObject with same CLSID but in different thread should return S_OK instead of 0x%08x\n", hr); - - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - /* CLSCTX_LOCAL_SERVER */ - - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, - CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &cookie); - ok_ole_success(hr, "CoRegisterClassObject"); - - thread = CreateThread(NULL, 0, get_class_object_proxy_thread, (LPVOID)CLSCTX_LOCAL_SERVER, 0, &tid); - ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError()); - while (MsgWaitForMultipleObjects(1, &thread, FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0 + 1) - { - MSG msg; - while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)) - { - TranslateMessage(&msg); - DispatchMessageA(&msg); - } - } - GetExitCodeThread(thread, &exitcode); - hr = exitcode; - ok(hr == S_OK, "CoGetClassObject on local server object " - "registered in different thread should return S_OK " - "instead of 0x%08x\n", hr); - - hr = get_class_object(CLSCTX_LOCAL_SERVER); - ok(hr == S_OK, "CoGetClassObject on local server object registered in same " - "thread should return S_OK instead of 0x%08x\n", hr); - - thread = CreateThread(NULL, 0, revoke_class_object_thread, (LPVOID)cookie, 0, &tid); - ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError()); - WaitForSingleObject(thread, INFINITE); - GetExitCodeThread(thread, &exitcode); - hr = exitcode; - ok(hr == RPC_E_WRONG_THREAD, "CoRevokeClassObject called from different " - "thread to where registered should return RPC_E_WRONG_THREAD instead of 0x%08x\n", hr); - - thread = CreateThread(NULL, 0, register_class_object_thread, NULL, 0, &tid); - ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError()); - WaitForSingleObject(thread, INFINITE); - GetExitCodeThread(thread, &exitcode); - hr = exitcode; - ok(hr == S_OK, "CoRegisterClassObject with same CLSID but in different " - "thread should return S_OK instead of 0x%08x\n", hr); - - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, "CoRevokeClassObject"); - - CoUninitialize(); -} - -static DWORD CALLBACK free_libraries_thread(LPVOID p) -{ - CoFreeUnusedLibraries(); - return 0; -} - -static inline BOOL is_module_loaded(const char *module) -{ - return GetModuleHandle(module) ? TRUE : FALSE; -} - -static void test_CoFreeUnusedLibraries(void) -{ - HRESULT hr; - IUnknown *pUnk; - DWORD tid; - HANDLE thread; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - ok(!is_module_loaded("urlmon.dll"), "urlmon.dll shouldn't be loaded\n"); - - hr = CoCreateInstance(&CLSID_FileProtocol, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&pUnk); - if (hr == REGDB_E_CLASSNOTREG) - { - trace("IE not installed so can't run CoFreeUnusedLibraries test\n"); - return; - } - ok_ole_success(hr, "CoCreateInstance"); - - ok(is_module_loaded("urlmon.dll"), "urlmon.dll should be loaded\n"); - - ok(pUnk != NULL || - broken(pUnk == NULL), /* win9x */ - "Expected a valid pointer\n"); - if (pUnk) - IUnknown_Release(pUnk); - - ok(is_module_loaded("urlmon.dll"), "urlmon.dll should be loaded\n"); - - thread = CreateThread(NULL, 0, free_libraries_thread, NULL, 0, &tid); - WaitForSingleObject(thread, INFINITE); - CloseHandle(thread); - - ok(is_module_loaded("urlmon.dll"), "urlmon.dll should be loaded\n"); - - CoFreeUnusedLibraries(); - - ok(!is_module_loaded("urlmon.dll"), "urlmon.dll shouldn't be loaded\n"); - - CoUninitialize(); -} - -static void test_CoGetObjectContext(void) -{ - HRESULT hr; - ULONG refs; - IComThreadingInfo *pComThreadingInfo; - APTTYPE apttype; - THDTYPE thdtype; - - if (!pCoGetObjectContext) - { - skip("CoGetObjectContext not present\n"); - return; - } - - hr = pCoGetObjectContext(&IID_IComThreadingInfo, (void **)&pComThreadingInfo); - ok(hr == CO_E_NOTINITIALIZED, "CoGetObjectContext should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr); - ok(pComThreadingInfo == NULL, "pComThreadingInfo should have been set to NULL\n"); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = pCoGetObjectContext(&IID_IComThreadingInfo, (void **)&pComThreadingInfo); - ok_ole_success(hr, "CoGetObjectContext"); - - hr = IComThreadingInfo_GetCurrentApartmentType(pComThreadingInfo, &apttype); - ok_ole_success(hr, "IComThreadingInfo_GetCurrentApartmentType"); - ok(apttype == APTTYPE_MAINSTA, "apartment type should be APTTYPE_MAINSTA instead of %d\n", apttype); - - hr = IComThreadingInfo_GetCurrentThreadType(pComThreadingInfo, &thdtype); - ok_ole_success(hr, "IComThreadingInfo_GetCurrentThreadType"); - ok(thdtype == THDTYPE_PROCESSMESSAGES, "thread type should be THDTYPE_PROCESSMESSAGES instead of %d\n", thdtype); - - refs = IComThreadingInfo_Release(pComThreadingInfo); - ok(refs == 0, "pComThreadingInfo should have 0 refs instead of %d refs\n", refs); - - CoUninitialize(); - - pCoInitializeEx(NULL, COINIT_MULTITHREADED); - - hr = pCoGetObjectContext(&IID_IComThreadingInfo, (void **)&pComThreadingInfo); - ok_ole_success(hr, "CoGetObjectContext"); - - hr = IComThreadingInfo_GetCurrentApartmentType(pComThreadingInfo, &apttype); - ok_ole_success(hr, "IComThreadingInfo_GetCurrentApartmentType"); - ok(apttype == APTTYPE_MTA, "apartment type should be APTTYPE_MTA instead of %d\n", apttype); - - hr = IComThreadingInfo_GetCurrentThreadType(pComThreadingInfo, &thdtype); - ok_ole_success(hr, "IComThreadingInfo_GetCurrentThreadType"); - ok(thdtype == THDTYPE_BLOCKMESSAGES, "thread type should be THDTYPE_BLOCKMESSAGES instead of %d\n", thdtype); - - refs = IComThreadingInfo_Release(pComThreadingInfo); - ok(refs == 0, "pComThreadingInfo should have 0 refs instead of %d refs\n", refs); - - CoUninitialize(); -} - -START_TEST(compobj) -{ - HMODULE hOle32 = GetModuleHandle("ole32"); - pCoGetObjectContext = (void*)GetProcAddress(hOle32, "CoGetObjectContext"); - if (!(pCoInitializeEx = (void*)GetProcAddress(hOle32, "CoInitializeEx"))) - { - trace("You need DCOM95 installed to run this test\n"); - return; - } - - test_ProgIDFromCLSID(); - test_CLSIDFromProgID(); - test_CLSIDFromString(); - test_StringFromGUID2(); - test_CoCreateInstance(); - test_ole_menu(); - test_CoGetClassObject(); - test_CoRegisterMessageFilter(); - test_CoRegisterPSClsid(); - test_CoGetPSClsid(); - test_CoUnmarshalInterface(); - test_CoGetInterfaceAndReleaseStream(); - test_CoMarshalInterface(); - test_CoMarshalInterThreadInterfaceInStream(); - test_CoRegisterClassObject(); - test_registered_object_thread_affinity(); - test_CoFreeUnusedLibraries(); - test_CoGetObjectContext(); -} diff --git a/rostests/winetests/ole32/dragdrop.c b/rostests/winetests/ole32/dragdrop.c deleted file mode 100644 index 15610661c29..00000000000 --- a/rostests/winetests/ole32/dragdrop.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Drag and Drop Tests - * - * Copyright 2007 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 - */ - -#define _WIN32_DCOM -#define COBJMACROS -#define CONST_VTABLE - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" - -#include "wine/test.h" - -/* functions that are not present on all versions of Windows */ -HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit); - -static int droptarget_addref_called; -static int droptarget_release_called; - -/* helper macros to make tests a bit leaner */ -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) - -static HRESULT WINAPI DropTarget_QueryInterface(IDropTarget* iface, REFIID riid, - void** ppvObject) -{ - trace("DropTarget_QueryInterface\n"); - if (IsEqualIID(riid, &IID_IUnknown) || - IsEqualIID(riid, &IID_IDropTarget)) - { - IUnknown_AddRef(iface); - *ppvObject = iface; - return S_OK; - } - *ppvObject = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI DropTarget_AddRef(IDropTarget* iface) -{ - droptarget_addref_called++; - return 2; -} - -static ULONG WINAPI DropTarget_Release(IDropTarget* iface) -{ - droptarget_release_called++; - return 1; -} - -static HRESULT WINAPI DropTarget_DragEnter(IDropTarget* iface, - IDataObject* pDataObj, - DWORD grfKeyState, POINTL pt, - DWORD* pdwEffect) -{ - return E_NOTIMPL; -} - -static HRESULT WINAPI DropTarget_DragOver(IDropTarget* iface, - DWORD grfKeyState, - POINTL pt, - DWORD* pdwEffect) -{ - return E_NOTIMPL; -} - -static HRESULT WINAPI DropTarget_DragLeave(IDropTarget* iface) -{ - return E_NOTIMPL; -} - -static HRESULT WINAPI DropTarget_Drop(IDropTarget* iface, - IDataObject* pDataObj, DWORD grfKeyState, - POINTL pt, DWORD* pdwEffect) -{ - return E_NOTIMPL; -} - -static const IDropTargetVtbl DropTarget_VTbl = -{ - DropTarget_QueryInterface, - DropTarget_AddRef, - DropTarget_Release, - DropTarget_DragEnter, - DropTarget_DragOver, - DropTarget_DragLeave, - DropTarget_Drop -}; - -static IDropTarget DropTarget = { &DropTarget_VTbl }; - -START_TEST(dragdrop) -{ - HRESULT hr; - - hr = RegisterDragDrop(GetDesktopWindow(), &DropTarget); - ok(hr == E_OUTOFMEMORY, "RegisterDragDrop without OLE initialized should have returned E_OUTOFMEMORY instead of 0x%08x\n", hr); - - OleInitialize(NULL); - - hr = RegisterDragDrop(GetDesktopWindow(), NULL); - ok(hr == E_INVALIDARG, "RegisterDragDrop with NULL IDropTarget * should return E_INVALIDARG instead of 0x%08x\n", hr); - - hr = RegisterDragDrop(NULL, &DropTarget); - ok(hr == DRAGDROP_E_INVALIDHWND, "RegisterDragDrop with NULL hwnd should return DRAGDROP_E_INVALIDHWND instead of 0x%08x\n", hr); - - hr = RegisterDragDrop((HWND)0xdeadbeef, &DropTarget); - ok(hr == DRAGDROP_E_INVALIDHWND, "RegisterDragDrop with garbage hwnd should return DRAGDROP_E_INVALIDHWND instead of 0x%08x\n", hr); - - ok(droptarget_addref_called == 0, "DropTarget_AddRef shouldn't have been called\n"); - hr = RegisterDragDrop(GetDesktopWindow(), &DropTarget); - ok_ole_success(hr, "RegisterDragDrop"); - ok(droptarget_addref_called == 1, "DropTarget_AddRef should have been called once, not %d times\n", droptarget_addref_called); - - hr = RegisterDragDrop(GetDesktopWindow(), &DropTarget); - ok(hr == DRAGDROP_E_ALREADYREGISTERED, "RegisterDragDrop with already registered hwnd should return DRAGDROP_E_ALREADYREGISTERED instead of 0x%08x\n", hr); - - ok(droptarget_release_called == 0, "DropTarget_Release shouldn't have been called\n"); - OleUninitialize(); - ok(droptarget_release_called == 0, "DropTarget_Release shouldn't have been called\n"); - - hr = RevokeDragDrop(GetDesktopWindow()); - ok_ole_success(hr, "RevokeDragDrop"); - ok(droptarget_release_called == 1, "DropTarget_Release should have been called once, not %d times\n", droptarget_release_called); - - hr = RevokeDragDrop(NULL); - ok(hr == DRAGDROP_E_INVALIDHWND, "RevokeDragDrop with NULL hwnd should return DRAGDROP_E_INVALIDHWND instead of 0x%08x\n", hr); -} diff --git a/rostests/winetests/ole32/errorinfo.c b/rostests/winetests/ole32/errorinfo.c deleted file mode 100644 index f55d480ef20..00000000000 --- a/rostests/winetests/ole32/errorinfo.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Error Info Tests - * - * Copyright 2007 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 - */ - -#define COBJMACROS -#define CONST_VTABLE - -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" - -#include "wine/test.h" - -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) - -static const CLSID CLSID_WineTest = -{ /* 9474ba1a-258b-490b-bc13-516e9239ace0 */ - 0x9474ba1a, - 0x258b, - 0x490b, - {0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xe0} -}; - -static void test_error_info(void) -{ - HRESULT hr; - ICreateErrorInfo *pCreateErrorInfo; - IErrorInfo *pErrorInfo; - static WCHAR wszDescription[] = {'F','a','i','l','e','d',' ','S','p','r','o','c','k','e','t',0}; - static WCHAR wszHelpFile[] = {'s','p','r','o','c','k','e','t','.','h','l','p',0}; - static WCHAR wszSource[] = {'s','p','r','o','c','k','e','t',0}; - - hr = CreateErrorInfo(&pCreateErrorInfo); - ok_ole_success(hr, "CreateErrorInfo"); - - hr = ICreateErrorInfo_SetDescription(pCreateErrorInfo, NULL); - ok_ole_success(hr, "ICreateErrorInfo_SetDescription"); - - hr = ICreateErrorInfo_SetDescription(pCreateErrorInfo, wszDescription); - ok_ole_success(hr, "ICreateErrorInfo_SetDescription"); - - hr = ICreateErrorInfo_SetGUID(pCreateErrorInfo, &CLSID_WineTest); - ok_ole_success(hr, "ICreateErrorInfo_SetGUID"); - - hr = ICreateErrorInfo_SetHelpContext(pCreateErrorInfo, 0xdeadbeef); - ok_ole_success(hr, "ICreateErrorInfo_SetHelpContext"); - - hr = ICreateErrorInfo_SetHelpFile(pCreateErrorInfo, NULL); - ok_ole_success(hr, "ICreateErrorInfo_SetHelpFile"); - - hr = ICreateErrorInfo_SetHelpFile(pCreateErrorInfo, wszHelpFile); - ok_ole_success(hr, "ICreateErrorInfo_SetHelpFile"); - - hr = ICreateErrorInfo_SetSource(pCreateErrorInfo, NULL); - ok_ole_success(hr, "ICreateErrorInfo_SetSource"); - - hr = ICreateErrorInfo_SetSource(pCreateErrorInfo, wszSource); - ok_ole_success(hr, "ICreateErrorInfo_SetSource"); - - hr = ICreateErrorInfo_QueryInterface(pCreateErrorInfo, &IID_IErrorInfo, (void **)&pErrorInfo); - ok_ole_success(hr, "ICreateErrorInfo_QueryInterface"); - - ICreateErrorInfo_Release(pCreateErrorInfo); - - hr = SetErrorInfo(0, pErrorInfo); - ok_ole_success(hr, "SetErrorInfo"); - - IErrorInfo_Release(pErrorInfo); - pErrorInfo = NULL; - - hr = GetErrorInfo(0, &pErrorInfo); - ok_ole_success(hr, "GetErrorInfo"); - - IErrorInfo_Release(pErrorInfo); - - hr = GetErrorInfo(0, &pErrorInfo); - ok(hr == S_FALSE, "GetErrorInfo should have returned S_FALSE instead of 0x%08x\n", hr); - ok(!pErrorInfo, "pErrorInfo should be set to NULL\n"); - - hr = SetErrorInfo(0, NULL); - ok_ole_success(hr, "SetErrorInfo"); - - hr = GetErrorInfo(0xdeadbeef, &pErrorInfo); - ok(hr == E_INVALIDARG, "GetErrorInfo should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = SetErrorInfo(0xdeadbeef, NULL); - ok(hr == E_INVALIDARG, "SetErrorInfo should have returned E_INVALIDARG instead of 0x%08x\n", hr); -} - -START_TEST(errorinfo) -{ - test_error_info(); -} diff --git a/rostests/winetests/ole32/hglobalstream.c b/rostests/winetests/ole32/hglobalstream.c deleted file mode 100644 index eb98a18c44a..00000000000 --- a/rostests/winetests/ole32/hglobalstream.c +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Stream on HGLOBAL Tests - * - * 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 - */ - -#define COBJMACROS - -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" - -#include "wine/test.h" - -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) - -static char const * const *expected_method_list; - -#define CHECK_EXPECTED_METHOD(method_name) \ -do { \ - ok(*expected_method_list != NULL, "Extra method %s called\n", method_name); \ - if (*expected_method_list) \ - { \ - ok(!strcmp(*expected_method_list, method_name), "Expected %s to be called instead of %s\n", \ - *expected_method_list, method_name); \ - expected_method_list++; \ - } \ -} while(0) - -static void test_streamonhglobal(IStream *pStream) -{ - const char data[] = "Test String"; - ULARGE_INTEGER ull; - LARGE_INTEGER ll; - char buffer[128]; - ULONG read; - STATSTG statstg; - HRESULT hr; - - ull.QuadPart = sizeof(data); - hr = IStream_SetSize(pStream, ull); - ok_ole_success(hr, "IStream_SetSize"); - - hr = IStream_Write(pStream, data, sizeof(data), NULL); - ok_ole_success(hr, "IStream_Write"); - - ll.QuadPart = 0; - hr = IStream_Seek(pStream, ll, STREAM_SEEK_SET, NULL); - ok_ole_success(hr, "IStream_Seek"); - - /* should return S_OK, not S_FALSE */ - hr = IStream_Read(pStream, buffer, sizeof(buffer), &read); - ok_ole_success(hr, "IStream_Read"); - ok(read == sizeof(data), "IStream_Read returned read %d\n", read); - - /* ignores HighPart */ - ull.u.HighPart = -1; - ull.u.LowPart = 0; - hr = IStream_SetSize(pStream, ull); - ok_ole_success(hr, "IStream_SetSize"); - - hr = IStream_Commit(pStream, STGC_DEFAULT); - ok_ole_success(hr, "IStream_Commit"); - - hr = IStream_Revert(pStream); - ok_ole_success(hr, "IStream_Revert"); - - hr = IStream_LockRegion(pStream, ull, ull, LOCK_WRITE); - ok(hr == STG_E_INVALIDFUNCTION, "IStream_LockRegion should have returned STG_E_INVALIDFUNCTION instead of 0x%08x\n", hr); - - hr = IStream_Stat(pStream, &statstg, STATFLAG_DEFAULT); - ok_ole_success(hr, "IStream_Stat"); - ok(statstg.type == STGTY_STREAM, "statstg.type should have been STGTY_STREAM instead of %d\n", statstg.type); - - /* test OOM condition */ - ull.u.HighPart = -1; - ull.u.LowPart = -1; - hr = IStream_SetSize(pStream, ull); - ok(hr == E_OUTOFMEMORY, "IStream_SetSize with large size should have returned E_OUTOFMEMORY instead of 0x%08x\n", hr); -} - -static HRESULT WINAPI TestStream_QueryInterface(IStream *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IUnknown) || - IsEqualIID(riid, &IID_ISequentialStream) || - IsEqualIID(riid, &IID_IStream)) - { - *ppv = iface; - IUnknown_AddRef(iface); - return S_OK; - } - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI TestStream_AddRef(IStream *iface) -{ - return 2; -} - -static ULONG WINAPI TestStream_Release(IStream *iface) -{ - return 1; -} - -static HRESULT WINAPI TestStream_Read(IStream *iface, void *pv, ULONG cb, ULONG *pcbRead) -{ - CHECK_EXPECTED_METHOD("TestStream_Read"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_Write(IStream *iface, const void *pv, ULONG cb, ULONG *pcbWritten) -{ - CHECK_EXPECTED_METHOD("TestStream_Write"); - *pcbWritten = 5; - return S_OK; -} - -static HRESULT WINAPI TestStream_Seek(IStream *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) -{ - CHECK_EXPECTED_METHOD("TestStream_Seek"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_SetSize(IStream *iface, ULARGE_INTEGER libNewSize) -{ - CHECK_EXPECTED_METHOD("TestStream_SetSize"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_CopyTo(IStream *iface, IStream *pStream, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten) -{ - CHECK_EXPECTED_METHOD("TestStream_CopyTo"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_Commit(IStream *iface, DWORD grfCommitFlags) -{ - CHECK_EXPECTED_METHOD("TestStream_Commit"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_Revert(IStream *iface) -{ - CHECK_EXPECTED_METHOD("TestStream_Revert"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_LockRegion(IStream *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) -{ - CHECK_EXPECTED_METHOD("TestStream_LockRegion"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_UnlockRegion(IStream *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) -{ - CHECK_EXPECTED_METHOD("TestStream_UnlockRegion"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_Stat(IStream *iface, STATSTG *pstatstg, DWORD grfStatFlag) -{ - CHECK_EXPECTED_METHOD("TestStream_Stat"); - return E_NOTIMPL; -} - -static HRESULT WINAPI TestStream_Clone(IStream *iface, IStream **pStream) -{ - CHECK_EXPECTED_METHOD("TestStream_Clone"); - return E_NOTIMPL; -} - -static /*const*/ IStreamVtbl StreamVtbl = -{ - TestStream_QueryInterface, - TestStream_AddRef, - TestStream_Release, - TestStream_Read, - TestStream_Write, - TestStream_Seek, - TestStream_SetSize, - TestStream_CopyTo, - TestStream_Commit, - TestStream_Revert, - TestStream_LockRegion, - TestStream_UnlockRegion, - TestStream_Stat, - TestStream_Clone -}; - -static IStream Test_Stream = { &StreamVtbl }; - -static void test_copyto(void) -{ - IStream *pStream, *pStream2; - HRESULT hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - static const char szHello[] = "Hello"; - ULARGE_INTEGER cb; - static const char *methods_copyto[] = - { - "TestStream_Write", - NULL - }; - ULONG written; - ULARGE_INTEGER ullRead; - ULARGE_INTEGER ullWritten; - ULARGE_INTEGER libNewPosition; - static const LARGE_INTEGER llZero; - char buffer[15]; - - expected_method_list = methods_copyto; - - hr = IStream_Write(pStream, szHello, sizeof(szHello), &written); - ok_ole_success(hr, "IStream_Write"); - ok(written == sizeof(szHello), "only %d bytes written\n", written); - - hr = IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - ok_ole_success(hr, "IStream_Seek"); - - cb.QuadPart = sizeof(szHello); - hr = IStream_CopyTo(pStream, &Test_Stream, cb, &ullRead, &ullWritten); - ok(ullWritten.QuadPart == 5, "ullWritten was %d instead\n", (ULONG)ullWritten.QuadPart); - ok(ullRead.QuadPart == sizeof(szHello), "only %d bytes read\n", (ULONG)ullRead.QuadPart); - ok_ole_success(hr, "IStream_CopyTo"); - - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - hr = IStream_Clone(pStream, &pStream2); - ok_ole_success(hr, "IStream_Clone"); - - hr = IStream_Seek(pStream2, llZero, STREAM_SEEK_CUR, &libNewPosition); - ok_ole_success(hr, "IStream_Seek"); - ok(libNewPosition.QuadPart == sizeof(szHello), "libNewPosition wasn't set correctly for the cloned stream\n"); - - hr = IStream_Seek(pStream2, llZero, STREAM_SEEK_SET, NULL); - ok_ole_success(hr, "IStream_Seek"); - - hr = IStream_Read(pStream2, buffer, sizeof(buffer), NULL); - ok_ole_success(hr, "IStream_Read"); - ok(!strcmp(buffer, szHello), "read data \"%s\" didn't match originally written data\n", buffer); - - IStream_Release(pStream2); - IStream_Release(pStream); -} - -static void test_freed_hglobal(void) -{ - HRESULT hr; - IStream *pStream; - HGLOBAL hglobal; - char *p; - char buffer[10]; - ULARGE_INTEGER ull; - ULONG read, written; - - hglobal = GlobalAlloc(GMEM_DDESHARE|GMEM_NODISCARD|GMEM_MOVEABLE, strlen("Rob") + 1); - ok(hglobal != NULL, "GlobalAlloc failed with error %d\n", GetLastError()); - p = GlobalLock(hglobal); - strcpy(p, "Rob"); - GlobalUnlock(hglobal); - - hr = CreateStreamOnHGlobal(hglobal, FALSE, &pStream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - - hr = IStream_Read(pStream, buffer, sizeof(buffer), &read); - ok_ole_success(hr, "IStream_Read"); - ok(!strcmp(buffer, "Rob"), "buffer data %s differs\n", buffer); - ok(read == strlen("Rob") + 1, "read should be 4 instead of %d\n", read); - - GlobalFree(hglobal); - - memset(buffer, 0, sizeof(buffer)); - read = -1; - hr = IStream_Read(pStream, buffer, sizeof(buffer), &read); - ok_ole_success(hr, "IStream_Read"); - ok(buffer[0] == 0, "buffer data should be untouched\n"); - ok(read == 0, "read should be 0 instead of %d\n", read); - - ull.QuadPart = sizeof(buffer); - hr = IStream_SetSize(pStream, ull); - ok(hr == E_OUTOFMEMORY, "IStream_SetSize with invalid HGLOBAL should return E_OUTOFMEMORY instead of 0x%08x\n", hr); - - hr = IStream_Write(pStream, buffer, sizeof(buffer), &written); - ok(hr == E_OUTOFMEMORY, "IStream_Write with invalid HGLOBAL should return E_OUTOFMEMORY instead of 0x%08x\n", hr); - ok(written == 0, "written should be 0 instead of %d\n", written); - - IStream_Release(pStream); -} - -START_TEST(hglobalstream) -{ - HRESULT hr; - IStream *pStream; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - - test_streamonhglobal(pStream); - IStream_Release(pStream); - test_copyto(); - test_freed_hglobal(); -} diff --git a/rostests/winetests/ole32/marshal.c b/rostests/winetests/ole32/marshal.c deleted file mode 100644 index 0443b63291a..00000000000 --- a/rostests/winetests/ole32/marshal.c +++ /dev/null @@ -1,3061 +0,0 @@ -/* - * Marshaling Tests - * - * 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 - */ - -#define _WIN32_DCOM -#define COBJMACROS -#define CONST_VTABLE - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "initguid.h" -#include "objbase.h" -#include "olectl.h" -#include "shlguid.h" -#include "shobjidl.h" - -#include "wine/test.h" - -DEFINE_GUID(CLSID_StdGlobalInterfaceTable,0x00000323,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46); - -/* functions that are not present on all versions of Windows */ -HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit); - -/* helper macros to make tests a bit leaner */ -#define ok_more_than_one_lock() ok(cLocks > 0, "Number of locks should be > 0, but actually is %d\n", cLocks) -#define ok_no_locks() ok(cLocks == 0, "Number of locks should be 0, but actually is %d\n", cLocks) -#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error 0x%08x\n", hr) - -static const IID IID_IWineTest = -{ - 0x5201163f, - 0x8164, - 0x4fd0, - {0xa1, 0xa2, 0x5d, 0x5a, 0x36, 0x54, 0xd3, 0xbd} -}; /* 5201163f-8164-4fd0-a1a2-5d5a3654d3bd */ - -static const IID IID_IRemUnknown = -{ - 0x00000131, - 0x0000, - 0x0000, - {0xc0,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} -}; - -#define EXTENTID_WineTest IID_IWineTest -#define CLSID_WineTest IID_IWineTest - -static const CLSID CLSID_WineOOPTest = -{ - 0x5201163f, - 0x8164, - 0x4fd0, - {0xa1, 0xa2, 0x5d, 0x5a, 0x36, 0x54, 0xd3, 0xbd} -}; /* 5201163f-8164-4fd0-a1a2-5d5a3654d3bd */ - -static void test_cocreateinstance_proxy(void) -{ - IUnknown *pProxy; - IMultiQI *pMQI; - HRESULT hr; - - pCoInitializeEx(NULL, COINIT_MULTITHREADED); - - hr = CoCreateInstance(&CLSID_ShellDesktop, NULL, CLSCTX_INPROC, &IID_IUnknown, (void **)&pProxy); - ok_ole_success(hr, CoCreateInstance); - hr = IUnknown_QueryInterface(pProxy, &IID_IMultiQI, (void **)&pMQI); - ok(hr == S_OK, "created object is not a proxy, so was created in the wrong apartment\n"); - if (hr == S_OK) - IMultiQI_Release(pMQI); - IUnknown_Release(pProxy); - - CoUninitialize(); -} - -static const LARGE_INTEGER ullZero; -static LONG cLocks; - -static void LockModule(void) -{ - InterlockedIncrement(&cLocks); -} - -static void UnlockModule(void) -{ - InterlockedDecrement(&cLocks); -} - - -static HRESULT WINAPI Test_IUnknown_QueryInterface( - LPUNKNOWN iface, - REFIID riid, - LPVOID *ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown)) - { - *ppvObj = (LPVOID)iface; - IUnknown_AddRef(iface); - return S_OK; - } - - *ppvObj = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Test_IUnknown_AddRef(LPUNKNOWN iface) -{ - LockModule(); - return 2; /* non-heap-based object */ -} - -static ULONG WINAPI Test_IUnknown_Release(LPUNKNOWN iface) -{ - UnlockModule(); - return 1; /* non-heap-based object */ -} - -static const IUnknownVtbl TestUnknown_Vtbl = -{ - Test_IUnknown_QueryInterface, - Test_IUnknown_AddRef, - Test_IUnknown_Release, -}; - -static IUnknown Test_Unknown = { &TestUnknown_Vtbl }; - - -static HRESULT WINAPI Test_IClassFactory_QueryInterface( - LPCLASSFACTORY iface, - REFIID riid, - LPVOID *ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IClassFactory) || - /* the only other interface Wine is currently able to marshal (for testing two proxies) */ - IsEqualGUID(riid, &IID_IRemUnknown)) - { - *ppvObj = (LPVOID)iface; - IClassFactory_AddRef(iface); - return S_OK; - } - - *ppvObj = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Test_IClassFactory_AddRef(LPCLASSFACTORY iface) -{ - LockModule(); - return 2; /* non-heap-based object */ -} - -static ULONG WINAPI Test_IClassFactory_Release(LPCLASSFACTORY iface) -{ - UnlockModule(); - return 1; /* non-heap-based object */ -} - -static HRESULT WINAPI Test_IClassFactory_CreateInstance( - LPCLASSFACTORY iface, - LPUNKNOWN pUnkOuter, - REFIID riid, - LPVOID *ppvObj) -{ - if (pUnkOuter) return CLASS_E_NOAGGREGATION; - return IUnknown_QueryInterface((IUnknown*)&Test_Unknown, riid, ppvObj); -} - -static HRESULT WINAPI Test_IClassFactory_LockServer( - LPCLASSFACTORY iface, - BOOL fLock) -{ - return S_OK; -} - -static const IClassFactoryVtbl TestClassFactory_Vtbl = -{ - Test_IClassFactory_QueryInterface, - Test_IClassFactory_AddRef, - Test_IClassFactory_Release, - Test_IClassFactory_CreateInstance, - Test_IClassFactory_LockServer -}; - -static IClassFactory Test_ClassFactory = { &TestClassFactory_Vtbl }; - -#define RELEASEMARSHALDATA WM_USER - -struct host_object_data -{ - IStream *stream; - IID iid; - IUnknown *object; - MSHLFLAGS marshal_flags; - HANDLE marshal_event; - IMessageFilter *filter; -}; - -static DWORD CALLBACK host_object_proc(LPVOID p) -{ - struct host_object_data *data = (struct host_object_data *)p; - HRESULT hr; - MSG msg; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - if (data->filter) - { - IMessageFilter * prev_filter = NULL; - hr = CoRegisterMessageFilter(data->filter, &prev_filter); - if (prev_filter) IMessageFilter_Release(prev_filter); - ok_ole_success(hr, CoRegisterMessageFilter); - } - - hr = CoMarshalInterface(data->stream, &data->iid, data->object, MSHCTX_INPROC, NULL, data->marshal_flags); - ok_ole_success(hr, CoMarshalInterface); - - /* force the message queue to be created before signaling parent thread */ - PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE); - - SetEvent(data->marshal_event); - - while (GetMessage(&msg, NULL, 0, 0)) - { - if (msg.hwnd == NULL && msg.message == RELEASEMARSHALDATA) - { - CoReleaseMarshalData(data->stream); - SetEvent((HANDLE)msg.lParam); - } - else - DispatchMessage(&msg); - } - - HeapFree(GetProcessHeap(), 0, data); - - CoUninitialize(); - - return hr; -} - -static DWORD start_host_object2(IStream *stream, REFIID riid, IUnknown *object, MSHLFLAGS marshal_flags, IMessageFilter *filter, HANDLE *thread) -{ - DWORD tid = 0; - HANDLE marshal_event = CreateEvent(NULL, FALSE, FALSE, NULL); - struct host_object_data *data = HeapAlloc(GetProcessHeap(), 0, sizeof(*data)); - - data->stream = stream; - data->iid = *riid; - data->object = object; - data->marshal_flags = marshal_flags; - data->marshal_event = marshal_event; - data->filter = filter; - - *thread = CreateThread(NULL, 0, host_object_proc, data, 0, &tid); - - /* wait for marshaling to complete before returning */ - WaitForSingleObject(marshal_event, INFINITE); - CloseHandle(marshal_event); - - return tid; -} - -static DWORD start_host_object(IStream *stream, REFIID riid, IUnknown *object, MSHLFLAGS marshal_flags, HANDLE *thread) -{ - return start_host_object2(stream, riid, object, marshal_flags, NULL, thread); -} - -/* asks thread to release the marshal data because it has to be done by the - * same thread that marshaled the interface in the first place. */ -static void release_host_object(DWORD tid) -{ - HANDLE event = CreateEvent(NULL, FALSE, FALSE, NULL); - PostThreadMessage(tid, RELEASEMARSHALDATA, 0, (LPARAM)event); - WaitForSingleObject(event, INFINITE); - CloseHandle(event); -} - -static void end_host_object(DWORD tid, HANDLE thread) -{ - BOOL ret = PostThreadMessage(tid, WM_QUIT, 0, 0); - ok(ret, "PostThreadMessage failed with error %d\n", GetLastError()); - /* be careful of races - don't return until hosting thread has terminated */ - WaitForSingleObject(thread, INFINITE); - CloseHandle(thread); -} - -/* tests failure case of interface not having a marshaler specified in the - * registry */ -static void test_no_marshaler(void) -{ - IStream *pStream; - HRESULT hr; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - hr = CoMarshalInterface(pStream, &IID_IWineTest, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok(hr == E_NOINTERFACE, "CoMarshalInterface should have returned E_NOINTERFACE instead of 0x%08x\n", hr); - - IStream_Release(pStream); -} - -/* tests normal marshal and then release without unmarshaling */ -static void test_normal_marshal_and_release(void) -{ - HRESULT hr; - IStream *pStream = NULL; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - hr = CoMarshalInterface(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoReleaseMarshalData(pStream); - ok_ole_success(hr, CoReleaseMarshalData); - IStream_Release(pStream); - - ok_no_locks(); -} - -/* tests success case of a same-thread marshal and unmarshal */ -static void test_normal_marshal_and_unmarshal(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - hr = CoMarshalInterface(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy); - - ok_no_locks(); -} - -/* tests failure case of unmarshaling a freed object */ -static void test_marshal_and_unmarshal_invalid(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IClassFactory *pProxy = NULL; - DWORD tid; - void * dummy; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoReleaseMarshalData(pStream); - ok_ole_success(hr, CoReleaseMarshalData); - - ok_no_locks(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - todo_wine { ok_ole_success(hr, CoUnmarshalInterface); } - - ok_no_locks(); - - if (pProxy) - { - hr = IClassFactory_CreateInstance(pProxy, NULL, &IID_IUnknown, &dummy); - ok(hr == RPC_E_DISCONNECTED, "Remote call should have returned RPC_E_DISCONNECTED, instead of 0x%08x\n", hr); - - IClassFactory_Release(pProxy); - } - - IStream_Release(pStream); - - end_host_object(tid, thread); -} - -static void test_same_apartment_unmarshal_failure(void) -{ - HRESULT hr; - IStream *pStream; - IUnknown *pProxy; - static const LARGE_INTEGER llZero; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - - hr = CoMarshalInterface(pStream, &IID_IUnknown, (IUnknown *)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - ok_more_than_one_lock(); - - hr = IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - ok_ole_success(hr, IStream_Seek); - - hr = CoUnmarshalInterface(pStream, &IID_IParseDisplayName, (void **)&pProxy); - ok(hr == E_NOINTERFACE, "CoUnmarshalInterface should have returned E_NOINTERFACE instead of 0x%08x\n", hr); - - ok_no_locks(); - - IStream_Release(pStream); -} - -/* tests success case of an interthread marshal */ -static void test_interthread_marshal_and_unmarshal(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy); - - ok_no_locks(); - - end_host_object(tid, thread); -} - -/* the number of external references that Wine's proxy manager normally gives - * out, so we can test the border case of running out of references */ -#define NORMALEXTREFS 5 - -/* tests success case of an interthread marshal and then marshaling the proxy */ -static void test_proxy_marshal_and_unmarshal(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - IUnknown *pProxy2 = NULL; - DWORD tid; - HANDLE thread; - int i; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - /* marshal the proxy */ - hr = CoMarshalInterface(pStream, &IID_IClassFactory, pProxy, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - ok_more_than_one_lock(); - - /* marshal 5 more times to exhaust the normal external references of 5 */ - for (i = 0; i < NORMALEXTREFS; i++) - { - hr = CoMarshalInterface(pStream, &IID_IClassFactory, pProxy, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - } - - ok_more_than_one_lock(); - - /* release the original proxy to test that we successfully keep the - * original object alive */ - IUnknown_Release(pProxy); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy2); - - /* unmarshal all of the proxies to check that the object stub still exists */ - for (i = 0; i < NORMALEXTREFS; i++) - { - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - ok_ole_success(hr, CoUnmarshalInterface); - - IUnknown_Release(pProxy2); - } - - ok_no_locks(); - - IStream_Release(pStream); - - end_host_object(tid, thread); -} - -/* tests success case of an interthread marshal and then marshaling the proxy - * using an iid that hasn't previously been unmarshaled */ -static void test_proxy_marshal_and_unmarshal2(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - IUnknown *pProxy2 = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IUnknown, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IUnknown, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - /* marshal the proxy */ - hr = CoMarshalInterface(pStream, &IID_IClassFactory, pProxy, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - /* unmarshal the second proxy to the object */ - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - /* now the proxies should be as follows: - * pProxy -> &Test_ClassFactory - * pProxy2 -> &Test_ClassFactory - * they should NOT be as follows: - * pProxy -> &Test_ClassFactory - * pProxy2 -> pProxy - * the above can only really be tested by looking in +ole traces - */ - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy2); - - ok_no_locks(); - - end_host_object(tid, thread); -} - -/* tests success case of an interthread marshal and then table-weak-marshaling the proxy */ -static void test_proxy_marshal_and_unmarshal_weak(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - IUnknown *pProxy2 = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - /* marshal the proxy */ - hr = CoMarshalInterface(pStream, &IID_IClassFactory, pProxy, MSHCTX_INPROC, NULL, MSHLFLAGS_TABLEWEAK); - ok_ole_success(hr, CoMarshalInterface); - - ok_more_than_one_lock(); - - /* release the original proxy to test that we successfully keep the - * original object alive */ - IUnknown_Release(pProxy); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - todo_wine - ok(hr == CO_E_OBJNOTREG, "CoUnmarshalInterface should return CO_E_OBJNOTREG instead of 0x%08x\n", hr); - - ok_no_locks(); - - IStream_Release(pStream); - - end_host_object(tid, thread); -} - -/* tests success case of an interthread marshal and then table-strong-marshaling the proxy */ -static void test_proxy_marshal_and_unmarshal_strong(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - IUnknown *pProxy2 = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - /* marshal the proxy */ - hr = CoMarshalInterface(pStream, &IID_IClassFactory, pProxy, MSHCTX_INPROC, NULL, MSHLFLAGS_TABLESTRONG); - ok(hr == S_OK /* WinNT */ || hr == E_INVALIDARG /* Win9x */, - "CoMarshalInterface should have return S_OK or E_INVALIDARG instead of 0x%08x\n", hr); - if (FAILED(hr)) - { - IUnknown_Release(pProxy); - goto end; - } - - ok_more_than_one_lock(); - - /* release the original proxy to test that we successfully keep the - * original object alive */ - IUnknown_Release(pProxy); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy2); - - ok_more_than_one_lock(); - -end: - IStream_Release(pStream); - - end_host_object(tid, thread); - - ok_no_locks(); -} - -/* tests that stubs are released when the containing apartment is destroyed */ -static void test_marshal_stub_apartment_shutdown(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - end_host_object(tid, thread); - - ok_no_locks(); - - IUnknown_Release(pProxy); - - ok_no_locks(); -} - -/* tests that proxies are released when the containing apartment is destroyed */ -static void test_marshal_proxy_apartment_shutdown(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - CoUninitialize(); - - ok_no_locks(); - - IUnknown_Release(pProxy); - - ok_no_locks(); - - end_host_object(tid, thread); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); -} - -/* tests that proxies are released when the containing mta apartment is destroyed */ -static void test_marshal_proxy_mta_apartment_shutdown(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - DWORD tid; - HANDLE thread; - - CoUninitialize(); - pCoInitializeEx(NULL, COINIT_MULTITHREADED); - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - CoUninitialize(); - - ok_no_locks(); - - IUnknown_Release(pProxy); - - ok_no_locks(); - - end_host_object(tid, thread); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); -} - -struct ncu_params -{ - LPSTREAM stream; - HANDLE marshal_event; - HANDLE unmarshal_event; -}; - -/* helper for test_no_couninitialize_server */ -static DWORD CALLBACK no_couninitialize_server_proc(LPVOID p) -{ - struct ncu_params *ncu_params = (struct ncu_params *)p; - HRESULT hr; - - pCoInitializeEx(NULL, COINIT_MULTITHREADED); - - hr = CoMarshalInterface(ncu_params->stream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - SetEvent(ncu_params->marshal_event); - - WaitForSingleObject(ncu_params->unmarshal_event, INFINITE); - - /* die without calling CoUninitialize */ - - return 0; -} - -/* tests apartment that an apartment with a stub is released without deadlock - * if the owning thread exits */ -static void test_no_couninitialize_server(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - DWORD tid; - HANDLE thread; - struct ncu_params ncu_params; - - cLocks = 0; - - ncu_params.marshal_event = CreateEvent(NULL, TRUE, FALSE, NULL); - ncu_params.unmarshal_event = CreateEvent(NULL, TRUE, FALSE, NULL); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - ncu_params.stream = pStream; - - thread = CreateThread(NULL, 0, no_couninitialize_server_proc, &ncu_params, 0, &tid); - - WaitForSingleObject(ncu_params.marshal_event, INFINITE); - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - SetEvent(ncu_params.unmarshal_event); - WaitForSingleObject(thread, INFINITE); - - ok_no_locks(); - - CloseHandle(thread); - CloseHandle(ncu_params.marshal_event); - CloseHandle(ncu_params.unmarshal_event); - - IUnknown_Release(pProxy); - - ok_no_locks(); -} - -/* STA -> STA call during DLL_THREAD_DETACH */ -static DWORD CALLBACK no_couninitialize_client_proc(LPVOID p) -{ - struct ncu_params *ncu_params = (struct ncu_params *)p; - HRESULT hr; - IUnknown *pProxy = NULL; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoUnmarshalInterface(ncu_params->stream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(ncu_params->stream); - - ok_more_than_one_lock(); - - /* die without calling CoUninitialize */ - - return 0; -} - -/* tests STA -> STA call during DLL_THREAD_DETACH doesn't deadlock */ -static void test_no_couninitialize_client(void) -{ - HRESULT hr; - IStream *pStream = NULL; - DWORD tid; - DWORD host_tid; - HANDLE thread; - HANDLE host_thread; - struct ncu_params ncu_params; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - ncu_params.stream = pStream; - - /* NOTE: assumes start_host_object uses an STA to host the object, as MTAs - * always deadlock when called from within DllMain */ - host_tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown *)&Test_ClassFactory, MSHLFLAGS_NORMAL, &host_thread); - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - - ok_more_than_one_lock(); - - thread = CreateThread(NULL, 0, no_couninitialize_client_proc, &ncu_params, 0, &tid); - - WaitForSingleObject(thread, INFINITE); - CloseHandle(thread); - - ok_no_locks(); - - end_host_object(host_tid, host_thread); -} - -/* tests success case of a same-thread table-weak marshal, unmarshal, unmarshal */ -static void test_tableweak_marshal_and_unmarshal_twice(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy1 = NULL; - IUnknown *pProxy2 = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_TABLEWEAK, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy1); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - IStream_Release(pStream); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy1); - IUnknown_Release(pProxy2); - - /* this line is shows the difference between weak and strong table marshaling: - * weak has cLocks == 0 - * strong has cLocks > 0 */ - ok_no_locks(); - - end_host_object(tid, thread); -} - -/* tests releasing after unmarshaling one object */ -static void test_tableweak_marshal_releasedata1(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy1 = NULL; - IUnknown *pProxy2 = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_TABLEWEAK, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy1); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - /* release the remaining reference on the object by calling - * CoReleaseMarshalData in the hosting thread */ - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - release_host_object(tid); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy1); - if (pProxy2) - IUnknown_Release(pProxy2); - - /* this line is shows the difference between weak and strong table marshaling: - * weak has cLocks == 0 - * strong has cLocks > 0 */ - ok_no_locks(); - - end_host_object(tid, thread); -} - -/* tests releasing after unmarshaling one object */ -static void test_tableweak_marshal_releasedata2(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_TABLEWEAK, &thread); - - ok_more_than_one_lock(); - - /* release the remaining reference on the object by calling - * CoReleaseMarshalData in the hosting thread */ - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - release_host_object(tid); - - ok_no_locks(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - todo_wine - { - ok(hr == CO_E_OBJNOTREG, - "CoUnmarshalInterface should have failed with CO_E_OBJNOTREG, but returned 0x%08x instead\n", - hr); - } - IStream_Release(pStream); - - ok_no_locks(); - - end_host_object(tid, thread); -} - -struct weak_and_normal_marshal_data -{ - IStream *pStreamWeak; - IStream *pStreamNormal; - HANDLE hReadyEvent; - HANDLE hQuitEvent; -}; - -static DWORD CALLBACK weak_and_normal_marshal_thread_proc(void *p) -{ - HRESULT hr; - struct weak_and_normal_marshal_data *data = p; - HANDLE hQuitEvent = data->hQuitEvent; - MSG msg; - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = CoMarshalInterface(data->pStreamWeak, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_TABLEWEAK); - ok_ole_success(hr, "CoMarshalInterface"); - - hr = CoMarshalInterface(data->pStreamNormal, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, "CoMarshalInterface"); - - /* force the message queue to be created before signaling parent thread */ - PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE); - - SetEvent(data->hReadyEvent); - - while (WAIT_OBJECT_0 + 1 == MsgWaitForMultipleObjects(1, &hQuitEvent, FALSE, INFINITE, QS_ALLINPUT)) - { - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) - DispatchMessage(&msg); - } - CloseHandle(hQuitEvent); - - CoUninitialize(); - - return 0; -} - -/* tests interaction between table-weak and normal marshalling of an object */ -static void test_tableweak_and_normal_marshal_and_unmarshal(void) -{ - HRESULT hr; - IUnknown *pProxyWeak = NULL; - IUnknown *pProxyNormal = NULL; - DWORD tid; - HANDLE thread; - struct weak_and_normal_marshal_data data; - - cLocks = 0; - - data.hReadyEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - data.hQuitEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - hr = CreateStreamOnHGlobal(NULL, TRUE, &data.pStreamWeak); - ok_ole_success(hr, CreateStreamOnHGlobal); - hr = CreateStreamOnHGlobal(NULL, TRUE, &data.pStreamNormal); - ok_ole_success(hr, CreateStreamOnHGlobal); - - thread = CreateThread(NULL, 0, weak_and_normal_marshal_thread_proc, &data, 0, &tid); - WaitForSingleObject(data.hReadyEvent, INFINITE); - CloseHandle(data.hReadyEvent); - - ok_more_than_one_lock(); - - IStream_Seek(data.pStreamWeak, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(data.pStreamWeak, &IID_IClassFactory, (void **)&pProxyWeak); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(data.pStreamNormal, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(data.pStreamNormal, &IID_IClassFactory, (void **)&pProxyNormal); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxyNormal); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxyWeak); - - ok_no_locks(); - - IStream_Release(data.pStreamWeak); - IStream_Release(data.pStreamNormal); - - SetEvent(data.hQuitEvent); - WaitForSingleObject(thread, INFINITE); - CloseHandle(thread); -} - -/* tests success case of a same-thread table-strong marshal, unmarshal, unmarshal */ -static void test_tablestrong_marshal_and_unmarshal_twice(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy1 = NULL; - IUnknown *pProxy2 = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_TABLESTRONG, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy1); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - if (pProxy1) IUnknown_Release(pProxy1); - if (pProxy2) IUnknown_Release(pProxy2); - - /* this line is shows the difference between weak and strong table marshaling: - * weak has cLocks == 0 - * strong has cLocks > 0 */ - ok_more_than_one_lock(); - - /* release the remaining reference on the object by calling - * CoReleaseMarshalData in the hosting thread */ - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - release_host_object(tid); - IStream_Release(pStream); - - ok_no_locks(); - - end_host_object(tid, thread); -} - -/* tests CoLockObjectExternal */ -static void test_lock_object_external(void) -{ - HRESULT hr; - IStream *pStream = NULL; - - cLocks = 0; - - /* test the stub manager creation aspect of CoLockObjectExternal when the - * object hasn't been marshaled yet */ - CoLockObjectExternal((IUnknown*)&Test_ClassFactory, TRUE, TRUE); - - ok_more_than_one_lock(); - - CoDisconnectObject((IUnknown*)&Test_ClassFactory, 0); - - ok_no_locks(); - - /* test our empty stub manager being handled correctly in - * CoMarshalInterface */ - CoLockObjectExternal((IUnknown*)&Test_ClassFactory, TRUE, TRUE); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - hr = CoMarshalInterface(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - CoLockObjectExternal((IUnknown*)&Test_ClassFactory, TRUE, TRUE); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoReleaseMarshalData(pStream); - ok_ole_success(hr, CoReleaseMarshalData); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - CoLockObjectExternal((IUnknown*)&Test_ClassFactory, FALSE, TRUE); - - ok_more_than_one_lock(); - - CoLockObjectExternal((IUnknown*)&Test_ClassFactory, FALSE, TRUE); - - ok_no_locks(); -} - -/* tests disconnecting stubs */ -static void test_disconnect_stub(void) -{ - HRESULT hr; - IStream *pStream = NULL; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - hr = CoMarshalInterface(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - CoLockObjectExternal((IUnknown*)&Test_ClassFactory, TRUE, TRUE); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoReleaseMarshalData(pStream); - ok_ole_success(hr, CoReleaseMarshalData); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - CoDisconnectObject((IUnknown*)&Test_ClassFactory, 0); - - ok_no_locks(); -} - -/* tests failure case of a same-thread marshal and unmarshal twice */ -static void test_normal_marshal_and_unmarshal_twice(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy1 = NULL; - IUnknown *pProxy2 = NULL; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - hr = CoMarshalInterface(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy1); - ok_ole_success(hr, CoUnmarshalInterface); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy2); - ok(hr == CO_E_OBJNOTCONNECTED, - "CoUnmarshalInterface should have failed with error CO_E_OBJNOTCONNECTED for double unmarshal, instead of 0x%08x\n", hr); - - IStream_Release(pStream); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy1); - - ok_no_locks(); -} - -/* tests success case of marshaling and unmarshaling an HRESULT */ -static void test_hresult_marshaling(void) -{ - HRESULT hr; - HRESULT hr_marshaled = 0; - IStream *pStream = NULL; - static const HRESULT E_DEADBEEF = 0xdeadbeef; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - - hr = CoMarshalHresult(pStream, E_DEADBEEF); - ok_ole_success(hr, CoMarshalHresult); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = IStream_Read(pStream, &hr_marshaled, sizeof(HRESULT), NULL); - ok_ole_success(hr, IStream_Read); - - ok(hr_marshaled == E_DEADBEEF, "Didn't marshal HRESULT as expected: got value 0x%08x instead\n", hr_marshaled); - - hr_marshaled = 0; - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalHresult(pStream, &hr_marshaled); - ok_ole_success(hr, CoUnmarshalHresult); - - ok(hr_marshaled == E_DEADBEEF, "Didn't marshal HRESULT as expected: got value 0x%08x instead\n", hr_marshaled); - - IStream_Release(pStream); -} - - -/* helper for test_proxy_used_in_wrong_thread */ -static DWORD CALLBACK bad_thread_proc(LPVOID p) -{ - IClassFactory * cf = (IClassFactory *)p; - HRESULT hr; - IUnknown * proxy = NULL; - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (LPVOID*)&proxy); - todo_wine - ok(hr == CO_E_NOTINITIALIZED, - "COM should have failed with CO_E_NOTINITIALIZED on using proxy without apartment, but instead returned 0x%08x\n", - hr); - - hr = IClassFactory_QueryInterface(cf, &IID_IMultiQI, (LPVOID *)&proxy); - /* Win9x returns S_OK, whilst NT returns RPC_E_WRONG_THREAD */ - trace("call to proxy's QueryInterface for local interface without apartment returned 0x%08x\n", hr); - if (SUCCEEDED(hr)) - IUnknown_Release(proxy); - - hr = IClassFactory_QueryInterface(cf, &IID_IStream, (LPVOID *)&proxy); - /* Win9x returns E_NOINTERFACE, whilst NT returns RPC_E_WRONG_THREAD */ - trace("call to proxy's QueryInterface without apartment returned 0x%08x\n", hr); - if (SUCCEEDED(hr)) - IUnknown_Release(proxy); - - pCoInitializeEx(NULL, COINIT_MULTITHREADED); - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (LPVOID*)&proxy); - if (proxy) IUnknown_Release(proxy); - ok(hr == RPC_E_WRONG_THREAD, - "COM should have failed with RPC_E_WRONG_THREAD on using proxy from wrong apartment, but instead returned 0x%08x\n", - hr); - - hr = IClassFactory_QueryInterface(cf, &IID_IStream, (LPVOID *)&proxy); - /* Win9x returns E_NOINTERFACE, whilst NT returns RPC_E_WRONG_THREAD */ - trace("call to proxy's QueryInterface from wrong apartment returned 0x%08x\n", hr); - - /* this statement causes Win9x DCOM to crash during CoUninitialize of - * other apartment, so don't test this on Win9x (signified by NT-only - * export of CoRegisterSurrogateEx) */ - if (GetProcAddress(GetModuleHandle("ole32"), "CoRegisterSurrogateEx")) - /* now be really bad and release the proxy from the wrong apartment */ - IUnknown_Release(cf); - else - skip("skipping test for releasing proxy from wrong apartment that will succeed, but cause a crash during CoUninitialize\n"); - - CoUninitialize(); - - return 0; -} - -/* tests failure case of a using a proxy in the wrong apartment */ -static void test_proxy_used_in_wrong_thread(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - DWORD tid, tid2; - HANDLE thread; - HANDLE host_thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &host_thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - /* do a call that will fail, but result in IRemUnknown being used by the proxy */ - IClassFactory_QueryInterface(pProxy, &IID_IStream, (LPVOID *)&pStream); - - /* create a thread that we can misbehave in */ - thread = CreateThread(NULL, 0, bad_thread_proc, (LPVOID)pProxy, 0, &tid2); - - WaitForSingleObject(thread, INFINITE); - CloseHandle(thread); - - /* do release statement on Win9x that we should have done above */ - if (!GetProcAddress(GetModuleHandle("ole32"), "CoRegisterSurrogateEx")) - IUnknown_Release(pProxy); - - ok_no_locks(); - - end_host_object(tid, host_thread); -} - -static HRESULT WINAPI MessageFilter_QueryInterface(IMessageFilter *iface, REFIID riid, void ** ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IClassFactory)) - { - *ppvObj = (LPVOID)iface; - IClassFactory_AddRef(iface); - return S_OK; - } - - return E_NOINTERFACE; -} - -static ULONG WINAPI MessageFilter_AddRef(IMessageFilter *iface) -{ - return 2; /* non-heap object */ -} - -static ULONG WINAPI MessageFilter_Release(IMessageFilter *iface) -{ - return 1; /* non-heap object */ -} - -static DWORD WINAPI MessageFilter_HandleInComingCall( - IMessageFilter *iface, - DWORD dwCallType, - HTASK threadIDCaller, - DWORD dwTickCount, - LPINTERFACEINFO lpInterfaceInfo) -{ - static int callcount = 0; - DWORD ret; - trace("HandleInComingCall\n"); - switch (callcount) - { - case 0: - ret = SERVERCALL_REJECTED; - break; - case 1: - ret = SERVERCALL_RETRYLATER; - break; - default: - ret = SERVERCALL_ISHANDLED; - break; - } - callcount++; - return ret; -} - -static DWORD WINAPI MessageFilter_RetryRejectedCall( - IMessageFilter *iface, - HTASK threadIDCallee, - DWORD dwTickCount, - DWORD dwRejectType) -{ - trace("RetryRejectedCall\n"); - return 0; -} - -static DWORD WINAPI MessageFilter_MessagePending( - IMessageFilter *iface, - HTASK threadIDCallee, - DWORD dwTickCount, - DWORD dwPendingType) -{ - trace("MessagePending\n"); - return PENDINGMSG_WAITNOPROCESS; -} - -static const IMessageFilterVtbl MessageFilter_Vtbl = -{ - MessageFilter_QueryInterface, - MessageFilter_AddRef, - MessageFilter_Release, - MessageFilter_HandleInComingCall, - MessageFilter_RetryRejectedCall, - MessageFilter_MessagePending -}; - -static IMessageFilter MessageFilter = { &MessageFilter_Vtbl }; - -static void test_message_filter(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IClassFactory *cf = NULL; - DWORD tid; - IUnknown *proxy = NULL; - IMessageFilter *prev_filter = NULL; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object2(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &MessageFilter, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&cf); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (LPVOID*)&proxy); - ok(hr == RPC_E_CALL_REJECTED, "Call should have returned RPC_E_CALL_REJECTED, but return 0x%08x instead\n", hr); - if (proxy) IUnknown_Release(proxy); - proxy = NULL; - - hr = CoRegisterMessageFilter(&MessageFilter, &prev_filter); - ok_ole_success(hr, CoRegisterMessageFilter); - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (LPVOID*)&proxy); - ok_ole_success(hr, IClassFactory_CreateInstance); - - IUnknown_Release(proxy); - - IClassFactory_Release(cf); - - ok_no_locks(); - - end_host_object(tid, thread); - - hr = CoRegisterMessageFilter(prev_filter, NULL); - ok_ole_success(hr, CoRegisterMessageFilter); -} - -/* test failure case of trying to unmarshal from bad stream */ -static void test_bad_marshal_stream(void) -{ - HRESULT hr; - IStream *pStream = NULL; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - hr = CoMarshalInterface(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - ok_more_than_one_lock(); - - /* try to read beyond end of stream */ - hr = CoReleaseMarshalData(pStream); - ok(hr == STG_E_READFAULT, "Should have failed with STG_E_READFAULT, but returned 0x%08x instead\n", hr); - - /* now release for real */ - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoReleaseMarshalData(pStream); - ok_ole_success(hr, CoReleaseMarshalData); - - IStream_Release(pStream); -} - -/* tests that proxies implement certain interfaces */ -static void test_proxy_interfaces(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - IUnknown *pOtherUnknown = NULL; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IUnknown, (void **)&pProxy); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - hr = IUnknown_QueryInterface(pProxy, &IID_IUnknown, (LPVOID*)&pOtherUnknown); - ok_ole_success(hr, IUnknown_QueryInterface IID_IUnknown); - if (hr == S_OK) IUnknown_Release(pOtherUnknown); - - hr = IUnknown_QueryInterface(pProxy, &IID_IClientSecurity, (LPVOID*)&pOtherUnknown); - ok_ole_success(hr, IUnknown_QueryInterface IID_IClientSecurity); - if (hr == S_OK) IUnknown_Release(pOtherUnknown); - - hr = IUnknown_QueryInterface(pProxy, &IID_IMultiQI, (LPVOID*)&pOtherUnknown); - ok_ole_success(hr, IUnknown_QueryInterface IID_IMultiQI); - if (hr == S_OK) IUnknown_Release(pOtherUnknown); - - hr = IUnknown_QueryInterface(pProxy, &IID_IMarshal, (LPVOID*)&pOtherUnknown); - ok_ole_success(hr, IUnknown_QueryInterface IID_IMarshal); - if (hr == S_OK) IUnknown_Release(pOtherUnknown); - - /* IMarshal2 is also supported on NT-based systems, but is pretty much - * useless as it has no more methods over IMarshal that it inherits from. */ - - IUnknown_Release(pProxy); - - ok_no_locks(); - - end_host_object(tid, thread); -} - -typedef struct -{ - const IUnknownVtbl *lpVtbl; - ULONG refs; -} HeapUnknown; - -static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IUnknown)) - { - IUnknown_AddRef(iface); - *ppv = (LPVOID)iface; - return S_OK; - } - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI HeapUnknown_AddRef(IUnknown *iface) -{ - HeapUnknown *This = (HeapUnknown *)iface; - return InterlockedIncrement((LONG*)&This->refs); -} - -static ULONG WINAPI HeapUnknown_Release(IUnknown *iface) -{ - HeapUnknown *This = (HeapUnknown *)iface; - ULONG refs = InterlockedDecrement((LONG*)&This->refs); - if (!refs) HeapFree(GetProcessHeap(), 0, This); - return refs; -} - -static const IUnknownVtbl HeapUnknown_Vtbl = -{ - HeapUnknown_QueryInterface, - HeapUnknown_AddRef, - HeapUnknown_Release -}; - -static void test_proxybuffer(REFIID riid) -{ - HRESULT hr; - IPSFactoryBuffer *psfb; - IRpcProxyBuffer *proxy; - LPVOID lpvtbl; - ULONG refs; - CLSID clsid; - HeapUnknown *pUnkOuter = HeapAlloc(GetProcessHeap(), 0, sizeof(*pUnkOuter)); - - pUnkOuter->lpVtbl = &HeapUnknown_Vtbl; - pUnkOuter->refs = 1; - - hr = CoGetPSClsid(riid, &clsid); - ok_ole_success(hr, CoGetPSClsid); - - hr = CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IPSFactoryBuffer, (LPVOID*)&psfb); - ok_ole_success(hr, CoGetClassObject); - - hr = IPSFactoryBuffer_CreateProxy(psfb, (IUnknown*)pUnkOuter, riid, &proxy, &lpvtbl); - ok_ole_success(hr, IPSFactoryBuffer_CreateProxy); - ok(lpvtbl != NULL, "IPSFactoryBuffer_CreateProxy succeeded, but returned a NULL vtable!\n"); - - /* release our reference to the outer unknown object - the PS factory - * buffer will have AddRef's it in the CreateProxy call */ - refs = IUnknown_Release((IUnknown *)pUnkOuter); - ok(refs == 1, "Ref count of outer unknown should have been 1 instead of %d\n", refs); - - refs = IPSFactoryBuffer_Release(psfb); - if (0) - { - /* not reliable on native. maybe it leaks references! */ - ok(refs == 0, "Ref-count leak of %d on IPSFactoryBuffer\n", refs); - } - - refs = IUnknown_Release((IUnknown *)lpvtbl); - ok(refs == 0, "Ref-count leak of %d on IRpcProxyBuffer\n", refs); - - refs = IRpcProxyBuffer_Release(proxy); - ok(refs == 0, "Ref-count leak of %d on IRpcProxyBuffer\n", refs); -} - -static void test_stubbuffer(REFIID riid) -{ - HRESULT hr; - IPSFactoryBuffer *psfb; - IRpcStubBuffer *stub; - ULONG refs; - CLSID clsid; - - cLocks = 0; - - hr = CoGetPSClsid(riid, &clsid); - ok_ole_success(hr, CoGetPSClsid); - - hr = CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IPSFactoryBuffer, (LPVOID*)&psfb); - ok_ole_success(hr, CoGetClassObject); - - hr = IPSFactoryBuffer_CreateStub(psfb, riid, (IUnknown*)&Test_ClassFactory, &stub); - ok_ole_success(hr, IPSFactoryBuffer_CreateStub); - - refs = IPSFactoryBuffer_Release(psfb); - if (0) - { - /* not reliable on native. maybe it leaks references */ - ok(refs == 0, "Ref-count leak of %d on IPSFactoryBuffer\n", refs); - } - - ok_more_than_one_lock(); - - IRpcStubBuffer_Disconnect(stub); - - ok_no_locks(); - - refs = IRpcStubBuffer_Release(stub); - ok(refs == 0, "Ref-count leak of %d on IRpcProxyBuffer\n", refs); -} - -static HWND hwnd_app; - -static HRESULT WINAPI TestRE_IClassFactory_CreateInstance( - LPCLASSFACTORY iface, - LPUNKNOWN pUnkOuter, - REFIID riid, - LPVOID *ppvObj) -{ - DWORD_PTR res; - if (IsEqualIID(riid, &IID_IWineTest)) - { - BOOL ret = SendMessageTimeout(hwnd_app, WM_NULL, 0, 0, SMTO_BLOCK, 5000, &res); - ok(ret, "Timed out sending a message to originating window during RPC call\n"); - } - return S_FALSE; -} - -static const IClassFactoryVtbl TestREClassFactory_Vtbl = -{ - Test_IClassFactory_QueryInterface, - Test_IClassFactory_AddRef, - Test_IClassFactory_Release, - TestRE_IClassFactory_CreateInstance, - Test_IClassFactory_LockServer -}; - -IClassFactory TestRE_ClassFactory = { &TestREClassFactory_Vtbl }; - -static LRESULT CALLBACK window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_USER: - { - HRESULT hr; - IStream *pStream = NULL; - IClassFactory *proxy = NULL; - IUnknown *object; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&TestRE_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&proxy); - ok_ole_success(hr, CoReleaseMarshalData); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - /* note the use of the magic IID_IWineTest value to tell remote thread - * to try to send a message back to us */ - hr = IClassFactory_CreateInstance(proxy, NULL, &IID_IWineTest, (void **)&object); - - IClassFactory_Release(proxy); - - ok_no_locks(); - - end_host_object(tid, thread); - - PostMessage(hwnd, WM_QUIT, 0, 0); - - return 0; - } - case WM_USER+1: - { - HRESULT hr; - IStream *pStream = NULL; - IClassFactory *proxy = NULL; - IUnknown *object; - DWORD tid; - HANDLE thread; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&TestRE_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&proxy); - ok_ole_success(hr, CoReleaseMarshalData); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - /* post quit message before a doing a COM call to show that a pending - * WM_QUIT message doesn't stop the call from succeeding */ - PostMessage(hwnd, WM_QUIT, 0, 0); - hr = IClassFactory_CreateInstance(proxy, NULL, &IID_IUnknown, (void **)&object); - - IClassFactory_Release(proxy); - - ok_no_locks(); - - end_host_object(tid, thread); - - return 0; - } - case WM_USER+2: - { - HRESULT hr; - IStream *pStream = NULL; - IClassFactory *proxy = NULL; - IUnknown *object; - DWORD tid; - HANDLE thread; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&proxy); - ok_ole_success(hr, CoReleaseMarshalData); - IStream_Release(pStream); - - /* shows that COM calls executed during the processing of sent - * messages should fail */ - hr = IClassFactory_CreateInstance(proxy, NULL, &IID_IUnknown, (void **)&object); - ok(hr == RPC_E_CANTCALLOUT_ININPUTSYNCCALL, - "COM call during processing of sent message should return RPC_E_CANTCALLOUT_ININPUTSYNCCALL instead of 0x%08x\n", hr); - - IClassFactory_Release(proxy); - - end_host_object(tid, thread); - - PostQuitMessage(0); - - return 0; - } - default: - return DefWindowProc(hwnd, msg, wparam, lparam); - } -} - -static void register_test_window(void) -{ - WNDCLASS wndclass; - - memset(&wndclass, 0, sizeof(wndclass)); - wndclass.lpfnWndProc = window_proc; - wndclass.lpszClassName = "WineCOMTest"; - RegisterClass(&wndclass); -} - -static void test_message_reentrancy(void) -{ - MSG msg; - - hwnd_app = CreateWindow("WineCOMTest", NULL, 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, 0); - ok(hwnd_app != NULL, "Window creation failed\n"); - - /* start message re-entrancy test */ - PostMessage(hwnd_app, WM_USER, 0, 0); - - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - DestroyWindow(hwnd_app); -} - -static HRESULT WINAPI TestMsg_IClassFactory_CreateInstance( - LPCLASSFACTORY iface, - LPUNKNOWN pUnkOuter, - REFIID riid, - LPVOID *ppvObj) -{ - *ppvObj = NULL; - SendMessage(hwnd_app, WM_USER+2, 0, 0); - return S_OK; -} - -static IClassFactoryVtbl TestMsgClassFactory_Vtbl = -{ - Test_IClassFactory_QueryInterface, - Test_IClassFactory_AddRef, - Test_IClassFactory_Release, - TestMsg_IClassFactory_CreateInstance, - Test_IClassFactory_LockServer -}; - -IClassFactory TestMsg_ClassFactory = { &TestMsgClassFactory_Vtbl }; - -static void test_call_from_message(void) -{ - MSG msg; - IStream *pStream; - HRESULT hr; - IClassFactory *proxy; - DWORD tid; - HANDLE thread; - IUnknown *object; - - hwnd_app = CreateWindow("WineCOMTest", NULL, 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, 0); - ok(hwnd_app != NULL, "Window creation failed\n"); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&TestMsg_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&proxy); - ok_ole_success(hr, CoReleaseMarshalData); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - /* start message re-entrancy test */ - hr = IClassFactory_CreateInstance(proxy, NULL, &IID_IUnknown, (void **)&object); - ok_ole_success(hr, IClassFactory_CreateInstance); - - IClassFactory_Release(proxy); - - ok_no_locks(); - - end_host_object(tid, thread); - - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - DestroyWindow(hwnd_app); -} - -static void test_WM_QUIT_handling(void) -{ - MSG msg; - - hwnd_app = CreateWindow("WineCOMTest", NULL, 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, 0); - ok(hwnd_app != NULL, "Window creation failed\n"); - - /* start WM_QUIT handling test */ - PostMessage(hwnd_app, WM_USER+1, 0, 0); - - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } -} - -static void test_freethreadedmarshaldata(IStream *pStream, MSHCTX mshctx, void *ptr, DWORD mshlflags) -{ - HGLOBAL hglobal; - DWORD size; - char *marshal_data; - HRESULT hr; - - hr = GetHGlobalFromStream(pStream, &hglobal); - ok_ole_success(hr, GetHGlobalFromStream); - - size = GlobalSize(hglobal); - - marshal_data = (char *)GlobalLock(hglobal); - - if (mshctx == MSHCTX_INPROC) - { - DWORD expected_size = sizeof(DWORD) + sizeof(void *) + sizeof(DWORD) + sizeof(GUID); - ok(size == expected_size, "size should have been %d instead of %d\n", expected_size, size); - - ok(*(DWORD *)marshal_data == mshlflags, "expected 0x%x, but got 0x%x for mshctx\n", mshlflags, *(DWORD *)marshal_data); - marshal_data += sizeof(DWORD); - ok(*(void **)marshal_data == ptr, "expected %p, but got %p for mshctx\n", ptr, *(void **)marshal_data); - marshal_data += sizeof(void *); - ok(*(DWORD *)marshal_data == 0, "expected 0x0, but got 0x%x\n", *(DWORD *)marshal_data); - marshal_data += sizeof(DWORD); - trace("got guid data: {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n", - ((GUID *)marshal_data)->Data1, ((GUID *)marshal_data)->Data2, ((GUID *)marshal_data)->Data3, - ((GUID *)marshal_data)->Data4[0], ((GUID *)marshal_data)->Data4[1], ((GUID *)marshal_data)->Data4[2], ((GUID *)marshal_data)->Data4[3], - ((GUID *)marshal_data)->Data4[4], ((GUID *)marshal_data)->Data4[5], ((GUID *)marshal_data)->Data4[6], ((GUID *)marshal_data)->Data4[7]); - } - else - { - ok(size > sizeof(DWORD), "size should have been > sizeof(DWORD), not %d\n", size); - ok(*(DWORD *)marshal_data == 0x574f454d /* MEOW */, - "marshal data should be filled by standard marshal and start with MEOW signature\n"); - } - - GlobalUnlock(hglobal); -} - -static void test_freethreadedmarshaler(void) -{ - HRESULT hr; - IUnknown *pFTUnknown; - IMarshal *pFTMarshal; - IStream *pStream; - IUnknown *pProxy; - static const LARGE_INTEGER llZero; - - cLocks = 0; - hr = CoCreateFreeThreadedMarshaler(NULL, &pFTUnknown); - ok_ole_success(hr, CoCreateFreeThreadedMarshaler); - hr = IUnknown_QueryInterface(pFTUnknown, &IID_IMarshal, (void **)&pFTMarshal); - ok_ole_success(hr, IUnknown_QueryInterface); - IUnknown_Release(pFTUnknown); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - - /* inproc normal marshaling */ - - hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, - (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, IMarshal_MarshalInterface); - - ok_more_than_one_lock(); - - test_freethreadedmarshaldata(pStream, MSHCTX_INPROC, &Test_ClassFactory, MSHLFLAGS_NORMAL); - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_UnmarshalInterface(pFTMarshal, pStream, &IID_IUnknown, (void **)&pProxy); - ok_ole_success(hr, IMarshal_UnmarshalInterface); - - IUnknown_Release(pProxy); - - ok_no_locks(); - -/* native doesn't allow us to unmarshal or release the stream data, - * presumably because it wants us to call CoMarshalInterface instead */ - if (0) - { - /* local normal marshaling */ - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHCTX_LOCAL, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, IMarshal_MarshalInterface); - - ok_more_than_one_lock(); - - test_freethreadedmarshaldata(pStream, MSHCTX_LOCAL, &Test_ClassFactory, MSHLFLAGS_NORMAL); - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_ReleaseMarshalData(pFTMarshal, pStream); - ok_ole_success(hr, IMarshal_ReleaseMarshalData); - - ok_no_locks(); - } - - /* inproc table-strong marshaling */ - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, - (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, (void *)0xdeadbeef, - MSHLFLAGS_TABLESTRONG); - ok_ole_success(hr, IMarshal_MarshalInterface); - - ok_more_than_one_lock(); - - test_freethreadedmarshaldata(pStream, MSHCTX_INPROC, &Test_ClassFactory, MSHLFLAGS_TABLESTRONG); - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_UnmarshalInterface(pFTMarshal, pStream, &IID_IUnknown, (void **)&pProxy); - ok_ole_success(hr, IMarshal_UnmarshalInterface); - - IUnknown_Release(pProxy); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_ReleaseMarshalData(pFTMarshal, pStream); - ok_ole_success(hr, IMarshal_ReleaseMarshalData); - - ok_no_locks(); - - /* inproc table-weak marshaling */ - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, - (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, (void *)0xdeadbeef, - MSHLFLAGS_TABLEWEAK); - ok_ole_success(hr, IMarshal_MarshalInterface); - - ok_no_locks(); - - test_freethreadedmarshaldata(pStream, MSHCTX_INPROC, &Test_ClassFactory, MSHLFLAGS_TABLEWEAK); - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_UnmarshalInterface(pFTMarshal, pStream, &IID_IUnknown, (void **)&pProxy); - ok_ole_success(hr, IMarshal_UnmarshalInterface); - - ok_more_than_one_lock(); - - IUnknown_Release(pProxy); - - ok_no_locks(); - - /* inproc normal marshaling (for extraordinary cases) */ - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, - (IUnknown*)&Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, IMarshal_MarshalInterface); - - ok_more_than_one_lock(); - - /* this call shows that DisconnectObject does nothing */ - hr = IMarshal_DisconnectObject(pFTMarshal, 0); - ok_ole_success(hr, IMarshal_DisconnectObject); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_ReleaseMarshalData(pFTMarshal, pStream); - ok_ole_success(hr, IMarshal_ReleaseMarshalData); - - ok_no_locks(); - - /* doesn't enforce marshaling rules here and allows us to unmarshal the - * interface, even though it was freed above */ - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_UnmarshalInterface(pFTMarshal, pStream, &IID_IUnknown, (void **)&pProxy); - ok_ole_success(hr, IMarshal_UnmarshalInterface); - - ok_no_locks(); - - IStream_Release(pStream); - IMarshal_Release(pFTMarshal); -} - -static void test_inproc_handler(void) -{ - HRESULT hr; - IUnknown *pObject; - IUnknown *pObject2; - char buffer[256]; - LPOLESTR pszClsid; - HKEY hkey; - DWORD dwDisposition; - DWORD error; - - hr = StringFromCLSID(&CLSID_WineTest, &pszClsid); - ok_ole_success(hr, "StringFromCLSID"); - strcpy(buffer, "CLSID\\"); - WideCharToMultiByte(CP_ACP, 0, pszClsid, -1, buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), NULL, NULL); - CoTaskMemFree(pszClsid); - strcat(buffer, "\\InprocHandler32"); - error = RegCreateKeyEx(HKEY_CLASSES_ROOT, buffer, 0, NULL, 0, KEY_SET_VALUE, NULL, &hkey, &dwDisposition); - ok(error == ERROR_SUCCESS, "RegCreateKeyEx failed with error %d\n", error); - error = RegSetValueEx(hkey, NULL, 0, REG_SZ, (const unsigned char *)"ole32.dll", strlen("ole32.dll") + 1); - ok(error == ERROR_SUCCESS, "RegSetValueEx failed with error %d\n", error); - RegCloseKey(hkey); - - hr = CoCreateInstance(&CLSID_WineTest, NULL, CLSCTX_INPROC_HANDLER, &IID_IUnknown, (void **)&pObject); - todo_wine - ok_ole_success(hr, "CoCreateInstance"); - - if (SUCCEEDED(hr)) - { - hr = IUnknown_QueryInterface(pObject, &IID_IWineTest, (void **)&pObject2); - ok(hr == E_NOINTERFACE, "IUnknown_QueryInterface on handler for invalid interface returned 0x%08x instead of E_NOINTERFACE\n", hr); - - /* it's a handler as it supports IOleObject */ - hr = IUnknown_QueryInterface(pObject, &IID_IOleObject, (void **)&pObject2); - ok_ole_success(hr, "IUnknown_QueryInterface(&IID_IOleObject)"); - IUnknown_Release(pObject2); - - IUnknown_Release(pObject); - } - - RegDeleteKey(HKEY_CLASSES_ROOT, buffer); - *strrchr(buffer, '\\') = '\0'; - RegDeleteKey(HKEY_CLASSES_ROOT, buffer); -} - -static HRESULT WINAPI Test_SMI_QueryInterface( - IStdMarshalInfo *iface, - REFIID riid, - LPVOID *ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IStdMarshalInfo)) - { - *ppvObj = (LPVOID)iface; - IClassFactory_AddRef(iface); - return S_OK; - } - - return E_NOINTERFACE; -} - -static ULONG WINAPI Test_SMI_AddRef(IStdMarshalInfo *iface) -{ - LockModule(); - return 2; /* non-heap-based object */ -} - -static ULONG WINAPI Test_SMI_Release(IStdMarshalInfo *iface) -{ - UnlockModule(); - return 1; /* non-heap-based object */ -} - -static HRESULT WINAPI Test_SMI_GetClassForHandler( - IStdMarshalInfo *iface, - DWORD dwDestContext, - void *pvDestContext, - CLSID *pClsid) -{ - *pClsid = CLSID_WineTest; - return S_OK; -} - -static const IStdMarshalInfoVtbl Test_SMI_Vtbl = -{ - Test_SMI_QueryInterface, - Test_SMI_AddRef, - Test_SMI_Release, - Test_SMI_GetClassForHandler -}; - -static IStdMarshalInfo Test_SMI = {&Test_SMI_Vtbl}; - -static void test_handler_marshaling(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IUnknown *pProxy = NULL; - IUnknown *pObject; - DWORD tid; - HANDLE thread; - static const LARGE_INTEGER ullZero; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - tid = start_host_object(pStream, &IID_IUnknown, (IUnknown*)&Test_SMI, MSHLFLAGS_NORMAL, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IUnknown, (void **)&pProxy); - ok_ole_success(hr, "CoUnmarshalInterface"); - IStream_Release(pStream); - - if(hr == S_OK) - { - ok_more_than_one_lock(); - - hr = IUnknown_QueryInterface(pProxy, &IID_IWineTest, (void **)&pObject); - ok(hr == E_NOINTERFACE, "IUnknown_QueryInterface with unknown IID should have returned E_NOINTERFACE instead of 0x%08x\n", hr); - - /* it's a handler as it supports IOleObject */ - hr = IUnknown_QueryInterface(pProxy, &IID_IOleObject, (void **)&pObject); - todo_wine - ok_ole_success(hr, "IUnknown_QueryInterface(&IID_IOleObject)"); - if (SUCCEEDED(hr)) IUnknown_Release(pObject); - - IUnknown_Release(pProxy); - - ok_no_locks(); - } - - end_host_object(tid, thread); - - /* FIXME: test IPersist interface has the same effect as IStdMarshalInfo */ -} - - -static void test_client_security(void) -{ - HRESULT hr; - IStream *pStream = NULL; - IClassFactory *pProxy = NULL; - IUnknown *pProxy2 = NULL; - IUnknown *pUnknown1 = NULL; - IUnknown *pUnknown2 = NULL; - IClientSecurity *pCliSec = NULL; - IMarshal *pMarshal; - DWORD tid; - HANDLE thread; - static const LARGE_INTEGER ullZero; - DWORD dwAuthnSvc; - DWORD dwAuthzSvc; - OLECHAR *pServerPrincName; - DWORD dwAuthnLevel; - DWORD dwImpLevel; - void *pAuthInfo; - DWORD dwCapabilities; - void *pv; - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - tid = start_host_object(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &thread); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&pProxy); - ok_ole_success(hr, "CoUnmarshalInterface"); - IStream_Release(pStream); - - hr = IUnknown_QueryInterface(pProxy, &IID_IUnknown, (LPVOID*)&pUnknown1); - ok_ole_success(hr, "IUnknown_QueryInterface IID_IUnknown"); - - hr = IUnknown_QueryInterface(pProxy, &IID_IRemUnknown, (LPVOID*)&pProxy2); - ok_ole_success(hr, "IUnknown_QueryInterface IID_IStream"); - - hr = IUnknown_QueryInterface(pProxy2, &IID_IUnknown, (LPVOID*)&pUnknown2); - ok_ole_success(hr, "IUnknown_QueryInterface IID_IUnknown"); - - ok(pUnknown1 == pUnknown2, "both proxy's IUnknowns should be the same - %p, %p\n", pUnknown1, pUnknown2); - - hr = IUnknown_QueryInterface(pProxy, &IID_IMarshal, (LPVOID*)&pMarshal); - ok_ole_success(hr, "IUnknown_QueryInterface IID_IMarshal"); - - hr = IUnknown_QueryInterface(pProxy, &IID_IClientSecurity, (LPVOID*)&pCliSec); - ok_ole_success(hr, "IUnknown_QueryInterface IID_IClientSecurity"); - - hr = IClientSecurity_QueryBlanket(pCliSec, (IUnknown *)pProxy, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - todo_wine ok_ole_success(hr, "IClientSecurity_QueryBlanket (all NULLs)"); - - hr = IClientSecurity_QueryBlanket(pCliSec, (IUnknown *)pMarshal, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - todo_wine ok(hr == E_NOINTERFACE, "IClientSecurity_QueryBlanket with local interface should have returned E_NOINTERFACE instead of 0x%08x\n", hr); - - hr = IClientSecurity_QueryBlanket(pCliSec, (IUnknown *)pProxy, &dwAuthnSvc, &dwAuthzSvc, &pServerPrincName, &dwAuthnLevel, &dwImpLevel, &pAuthInfo, &dwCapabilities); - todo_wine ok_ole_success(hr, "IClientSecurity_QueryBlanket"); - - hr = IClientSecurity_SetBlanket(pCliSec, (IUnknown *)pProxy, dwAuthnSvc, dwAuthzSvc, pServerPrincName, dwAuthnLevel, RPC_C_IMP_LEVEL_IMPERSONATE, pAuthInfo, dwCapabilities); - todo_wine ok_ole_success(hr, "IClientSecurity_SetBlanket"); - - hr = IClassFactory_CreateInstance(pProxy, NULL, &IID_IWineTest, &pv); - ok(hr == E_NOINTERFACE, "COM call should have succeeded instead of returning 0x%08x\n", hr); - - hr = IClientSecurity_SetBlanket(pCliSec, (IUnknown *)pMarshal, dwAuthnSvc, dwAuthzSvc, pServerPrincName, dwAuthnLevel, dwImpLevel, pAuthInfo, dwCapabilities); - todo_wine ok(hr == E_NOINTERFACE, "IClientSecurity_SetBlanket with local interface should have returned E_NOINTERFACE instead of 0x%08x\n", hr); - - hr = IClientSecurity_SetBlanket(pCliSec, (IUnknown *)pProxy, 0xdeadbeef, dwAuthzSvc, pServerPrincName, dwAuthnLevel, dwImpLevel, pAuthInfo, dwCapabilities); - todo_wine ok(hr == E_INVALIDARG, "IClientSecurity_SetBlanke with invalid dwAuthnSvc should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - CoTaskMemFree(pServerPrincName); - - hr = IClientSecurity_QueryBlanket(pCliSec, (IUnknown *)pUnknown1, &dwAuthnSvc, &dwAuthzSvc, &pServerPrincName, &dwAuthnLevel, &dwImpLevel, &pAuthInfo, &dwCapabilities); - todo_wine ok_ole_success(hr, "IClientSecurity_QueryBlanket(IUnknown)"); - - CoTaskMemFree(pServerPrincName); - - IClassFactory_Release(pProxy); - IUnknown_Release(pProxy2); - IUnknown_Release(pUnknown1); - IUnknown_Release(pUnknown2); - IMarshal_Release(pMarshal); - IClientSecurity_Release(pCliSec); - - end_host_object(tid, thread); -} - -static HANDLE heventShutdown; - -static void LockModuleOOP(void) -{ - InterlockedIncrement(&cLocks); /* for test purposes only */ - CoAddRefServerProcess(); -} - -static void UnlockModuleOOP(void) -{ - InterlockedDecrement(&cLocks); /* for test purposes only */ - if (!CoReleaseServerProcess()) - SetEvent(heventShutdown); -} - -static HWND hwnd_app; - -static HRESULT WINAPI TestOOP_IClassFactory_QueryInterface( - LPCLASSFACTORY iface, - REFIID riid, - LPVOID *ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IClassFactory)) - { - *ppvObj = (LPVOID)iface; - IClassFactory_AddRef(iface); - return S_OK; - } - - return E_NOINTERFACE; -} - -static ULONG WINAPI TestOOP_IClassFactory_AddRef(LPCLASSFACTORY iface) -{ - return 2; /* non-heap-based object */ -} - -static ULONG WINAPI TestOOP_IClassFactory_Release(LPCLASSFACTORY iface) -{ - return 1; /* non-heap-based object */ -} - -static HRESULT WINAPI TestOOP_IClassFactory_CreateInstance( - LPCLASSFACTORY iface, - LPUNKNOWN pUnkOuter, - REFIID riid, - LPVOID *ppvObj) -{ - if (IsEqualIID(riid, &IID_IClassFactory) || IsEqualIID(riid, &IID_IUnknown)) - { - *ppvObj = iface; - return S_OK; - } - return CLASS_E_CLASSNOTAVAILABLE; -} - -static HRESULT WINAPI TestOOP_IClassFactory_LockServer( - LPCLASSFACTORY iface, - BOOL fLock) -{ - if (fLock) - LockModuleOOP(); - else - UnlockModuleOOP(); - return S_OK; -} - -static const IClassFactoryVtbl TestClassFactoryOOP_Vtbl = -{ - TestOOP_IClassFactory_QueryInterface, - TestOOP_IClassFactory_AddRef, - TestOOP_IClassFactory_Release, - TestOOP_IClassFactory_CreateInstance, - TestOOP_IClassFactory_LockServer -}; - -static IClassFactory TestOOP_ClassFactory = { &TestClassFactoryOOP_Vtbl }; - -static void test_register_local_server(void) -{ - DWORD cookie; - HRESULT hr; - HANDLE ready_event; - HANDLE quit_event; - DWORD wait; - - heventShutdown = CreateEvent(NULL, TRUE, FALSE, NULL); - - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&TestOOP_ClassFactory, - CLSCTX_LOCAL_SERVER, REGCLS_SINGLEUSE, &cookie); - ok_ole_success(hr, CoRegisterClassObject); - - ready_event = CreateEvent(NULL, FALSE, FALSE, "Wine COM Test Ready Event"); - SetEvent(ready_event); - - quit_event = CreateEvent(NULL, FALSE, FALSE, "Wine COM Test Quit Event"); - - do - { - wait = MsgWaitForMultipleObjects(1, &quit_event, FALSE, INFINITE, QS_ALLINPUT); - if (wait == WAIT_OBJECT_0+1) - { - MSG msg; - BOOL ret = PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); - if (ret) - { - trace("Message 0x%x\n", msg.message); - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - } - while (wait == WAIT_OBJECT_0+1); - - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, CoRevokeClassObject); -} - -static HANDLE create_target_process(const char *arg) -{ - char **argv; - char cmdline[MAX_PATH]; - PROCESS_INFORMATION pi; - STARTUPINFO si = { 0 }; - si.cb = sizeof(si); - - pi.hThread = NULL; - pi.hProcess = NULL; - winetest_get_mainargs( &argv ); - sprintf(cmdline, "%s %s %s", argv[0], argv[1], arg); - ok(CreateProcess(argv[0], cmdline, NULL, NULL, FALSE, 0, NULL, NULL, - &si, &pi) != 0, "CreateProcess failed with error: %u\n", GetLastError()); - if (pi.hThread) CloseHandle(pi.hThread); - return pi.hProcess; -} - -/* tests functions commonly used by out of process COM servers */ -static void test_local_server(void) -{ - DWORD cookie; - HRESULT hr; - IClassFactory * cf; - DWORD ret; - HANDLE process; - HANDLE quit_event; - HANDLE ready_event; - - heventShutdown = CreateEvent(NULL, TRUE, FALSE, NULL); - - cLocks = 0; - - /* Start the object suspended */ - hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&TestOOP_ClassFactory, - CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED, &cookie); - ok_ole_success(hr, CoRegisterClassObject); - - /* ... and CoGetClassObject does not find it and fails when it looks for the - * class in the registry */ - hr = CoGetClassObject(&CLSID_WineOOPTest, CLSCTX_INPROC_SERVER, - NULL, &IID_IClassFactory, (LPVOID*)&cf); - ok(hr == REGDB_E_CLASSNOTREG || /* NT */ - hr == S_OK /* Win9x */, - "CoGetClassObject should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr); - - /* Resume the object suspended above ... */ - hr = CoResumeClassObjects(); - ok_ole_success(hr, CoResumeClassObjects); - - /* ... and now it should succeed */ - hr = CoGetClassObject(&CLSID_WineOOPTest, CLSCTX_INPROC_SERVER, - NULL, &IID_IClassFactory, (LPVOID*)&cf); - ok_ole_success(hr, CoGetClassObject); - - /* Now check the locking is working */ - /* NOTE: we are accessing the class directly, not through a proxy */ - - ok_no_locks(); - - hr = IClassFactory_LockServer(cf, TRUE); - ok_ole_success(hr, IClassFactory_LockServer); - - ok_more_than_one_lock(); - - IClassFactory_LockServer(cf, FALSE); - ok_ole_success(hr, IClassFactory_LockServer); - - ok_no_locks(); - - IClassFactory_Release(cf); - - /* wait for shutdown signal */ - ret = WaitForSingleObject(heventShutdown, 0); - ok(ret != WAIT_TIMEOUT, "Server didn't shut down\n"); - - /* try to connect again after SCM has suspended registered class objects */ - hr = CoGetClassObject(&CLSID_WineOOPTest, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, NULL, - &IID_IClassFactory, (LPVOID*)&cf); - ok(hr == CO_E_SERVER_STOPPING || /* NT */ - hr == REGDB_E_CLASSNOTREG || /* win2k */ - hr == S_OK /* Win9x */, - "CoGetClassObject should have returned CO_E_SERVER_STOPPING or REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr); - - hr = CoRevokeClassObject(cookie); - ok_ole_success(hr, CoRevokeClassObject); - - CloseHandle(heventShutdown); - - process = create_target_process("-Embedding"); - ok(process != NULL, "couldn't start local server process, error was %d\n", GetLastError()); - - ready_event = CreateEvent(NULL, FALSE, FALSE, "Wine COM Test Ready Event"); - WaitForSingleObject(ready_event, INFINITE); - CloseHandle(ready_event); - - hr = CoCreateInstance(&CLSID_WineOOPTest, NULL, CLSCTX_LOCAL_SERVER, &IID_IClassFactory, (void **)&cf); - ok_ole_success(hr, CoCreateInstance); - - IClassFactory_Release(cf); - - hr = CoCreateInstance(&CLSID_WineOOPTest, NULL, CLSCTX_LOCAL_SERVER, &IID_IClassFactory, (void **)&cf); - ok(hr == REGDB_E_CLASSNOTREG, "Second CoCreateInstance on REGCLS_SINGLEUSE object should have failed\n"); - - quit_event = CreateEvent(NULL, FALSE, FALSE, "Wine COM Test Quit Event"); - SetEvent(quit_event); - - winetest_wait_child_process( process ); - CloseHandle(quit_event); - CloseHandle(process); -} - -struct git_params -{ - DWORD cookie; - IGlobalInterfaceTable *git; -}; - -static DWORD CALLBACK get_global_interface_proc(LPVOID pv) -{ - HRESULT hr; - struct git_params *params = (struct git_params *)pv; - IClassFactory *cf; - - hr = IGlobalInterfaceTable_GetInterfaceFromGlobal(params->git, params->cookie, &IID_IClassFactory, (void **)&cf); - ok(hr == CO_E_NOTINITIALIZED || - hr == E_UNEXPECTED, /* win2k */ - "IGlobalInterfaceTable_GetInterfaceFromGlobal should have failed with error CO_E_NOTINITIALIZED or E_UNEXPECTED instead of 0x%08x\n", - hr); - - CoInitialize(NULL); - - hr = IGlobalInterfaceTable_GetInterfaceFromGlobal(params->git, params->cookie, &IID_IClassFactory, (void **)&cf); - ok_ole_success(hr, IGlobalInterfaceTable_GetInterfaceFromGlobal); - - IClassFactory_Release(cf); - - CoUninitialize(); - - return hr; -} - -static void test_globalinterfacetable(void) -{ - HRESULT hr; - IGlobalInterfaceTable *git; - DWORD cookie; - HANDLE thread; - DWORD tid; - struct git_params params; - DWORD ret; - IUnknown *object; - - trace("test_globalinterfacetable\n"); - cLocks = 0; - - hr = CoCreateInstance(&CLSID_StdGlobalInterfaceTable, NULL, CLSCTX_INPROC_SERVER, &IID_IGlobalInterfaceTable, (void **)&git); - ok_ole_success(hr, CoCreateInstance); - - hr = IGlobalInterfaceTable_RegisterInterfaceInGlobal(git, (IUnknown *)&Test_ClassFactory, &IID_IClassFactory, &cookie); - ok_ole_success(hr, IGlobalInterfaceTable_RegisterInterfaceInGlobal); - - ok_more_than_one_lock(); - - params.cookie = cookie; - params.git = git; - /* note: params is on stack so we MUST wait for get_global_interface_proc - * to exit before we can return */ - thread = CreateThread(NULL, 0, get_global_interface_proc, ¶ms, 0, &tid); - - ret = MsgWaitForMultipleObjects(1, &thread, FALSE, INFINITE, QS_ALLINPUT); - while (ret == WAIT_OBJECT_0 + 1) - { - MSG msg; - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) - DispatchMessage(&msg); - ret = MsgWaitForMultipleObjects(1, &thread, FALSE, INFINITE, QS_ALLINPUT); - } - - CloseHandle(thread); - - /* test getting interface from global with different iid */ - hr = IGlobalInterfaceTable_GetInterfaceFromGlobal(git, cookie, &IID_IUnknown, (void **)&object); - ok_ole_success(hr, IGlobalInterfaceTable_GetInterfaceFromGlobal); - IUnknown_Release(object); - - /* test getting interface from global with same iid */ - hr = IGlobalInterfaceTable_GetInterfaceFromGlobal(git, cookie, &IID_IClassFactory, (void **)&object); - ok_ole_success(hr, IGlobalInterfaceTable_GetInterfaceFromGlobal); - IUnknown_Release(object); - - hr = IGlobalInterfaceTable_RevokeInterfaceFromGlobal(git, cookie); - ok_ole_success(hr, IGlobalInterfaceTable_RevokeInterfaceFromGlobal); - - ok_no_locks(); - - IGlobalInterfaceTable_Release(git); -} - -static const char *debugstr_iid(REFIID riid) -{ - static char name[256]; - HKEY hkeyInterface; - WCHAR bufferW[39]; - char buffer[39]; - LONG name_size = sizeof(name); - StringFromGUID2(riid, bufferW, sizeof(bufferW)/sizeof(bufferW[0])); - WideCharToMultiByte(CP_ACP, 0, bufferW, sizeof(bufferW)/sizeof(bufferW[0]), buffer, sizeof(buffer), NULL, NULL); - if (RegOpenKeyEx(HKEY_CLASSES_ROOT, "Interface", 0, KEY_QUERY_VALUE, &hkeyInterface) != ERROR_SUCCESS) - { - memcpy(name, buffer, sizeof(buffer)); - goto done; - } - if (RegQueryValue(hkeyInterface, buffer, name, &name_size) != ERROR_SUCCESS) - { - memcpy(name, buffer, sizeof(buffer)); - goto done; - } - RegCloseKey(hkeyInterface); -done: - return name; -} - -static HRESULT WINAPI TestChannelHook_QueryInterface(IChannelHook *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IChannelHook)) - { - *ppv = iface; - IUnknown_AddRef(iface); - return S_OK; - } - - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI TestChannelHook_AddRef(IChannelHook *iface) -{ - return 2; -} - -static ULONG WINAPI TestChannelHook_Release(IChannelHook *iface) -{ - return 1; -} - -static void WINAPI TestChannelHook_ClientGetSize( - IChannelHook *iface, - REFGUID uExtent, - REFIID riid, - ULONG *pDataSize ) -{ - SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid; - trace("TestChannelHook_ClientGetBuffer\n"); - trace("\t%s method %d\n", debugstr_iid(riid), info->iMethod); - trace("\tcid: %s\n", debugstr_iid(&info->uCausality)); - ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of %d\n", info->cbSize, (int)sizeof(*info)); - ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId()); - ok(!info->pObject, "info->pObject should be NULL\n"); - ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't correct\n"); - - *pDataSize = 1; -} - -static void WINAPI TestChannelHook_ClientFillBuffer( - IChannelHook *iface, - REFGUID uExtent, - REFIID riid, - ULONG *pDataSize, - void *pDataBuffer ) -{ - SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid; - trace("TestChannelHook_ClientFillBuffer\n"); - ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of %d\n", info->cbSize, (int)sizeof(*info)); - ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId()); - ok(!info->pObject, "info->pObject should be NULL\n"); - ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't correct\n"); - - *(unsigned char *)pDataBuffer = 0xcc; - *pDataSize = 1; -} - -static void WINAPI TestChannelHook_ClientNotify( - IChannelHook *iface, - REFGUID uExtent, - REFIID riid, - ULONG cbDataSize, - void *pDataBuffer, - DWORD lDataRep, - HRESULT hrFault ) -{ - SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid; - trace("TestChannelHook_ClientNotify hrFault = 0x%08x\n", hrFault); - ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of %d\n", info->cbSize, (int)sizeof(*info)); - ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId()); - todo_wine { - ok(info->pObject != NULL, "info->pObject shouldn't be NULL\n"); - } - ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't correct\n"); -} - -static void WINAPI TestChannelHook_ServerNotify( - IChannelHook *iface, - REFGUID uExtent, - REFIID riid, - ULONG cbDataSize, - void *pDataBuffer, - DWORD lDataRep ) -{ - SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid; - trace("TestChannelHook_ServerNotify\n"); - ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of %d\n", info->cbSize, (int)sizeof(*info)); - ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId()); - ok(info->pObject != NULL, "info->pObject shouldn't be NULL\n"); - ok(cbDataSize == 1, "cbDataSize should have been 1 instead of %d\n", cbDataSize); - ok(*(unsigned char *)pDataBuffer == 0xcc, "pDataBuffer should have contained 0xcc instead of 0x%x\n", *(unsigned char *)pDataBuffer); - ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't correct\n"); -} - -static void WINAPI TestChannelHook_ServerGetSize( - IChannelHook *iface, - REFGUID uExtent, - REFIID riid, - HRESULT hrFault, - ULONG *pDataSize ) -{ - SChannelHookCallInfo *info = (SChannelHookCallInfo *)riid; - trace("TestChannelHook_ServerGetSize\n"); - trace("\t%s method %d\n", debugstr_iid(riid), info->iMethod); - ok(info->cbSize == sizeof(*info), "info->cbSize was %d instead of %d\n", info->cbSize, (int)sizeof(*info)); - ok(info->dwServerPid == GetCurrentProcessId(), "info->dwServerPid was 0x%x instead of 0x%x\n", info->dwServerPid, GetCurrentProcessId()); - ok(info->pObject != NULL, "info->pObject shouldn't be NULL\n"); - ok(IsEqualGUID(uExtent, &EXTENTID_WineTest), "uExtent wasn't correct\n"); - if (hrFault != S_OK) - trace("\thrFault = 0x%08x\n", hrFault); - - *pDataSize = 0; -} - -static void WINAPI TestChannelHook_ServerFillBuffer( - IChannelHook *iface, - REFGUID uExtent, - REFIID riid, - ULONG *pDataSize, - void *pDataBuffer, - HRESULT hrFault ) -{ - trace("TestChannelHook_ServerFillBuffer\n"); - ok(0, "TestChannelHook_ServerFillBuffer shouldn't be called\n"); -} - -static const IChannelHookVtbl TestChannelHookVtbl = -{ - TestChannelHook_QueryInterface, - TestChannelHook_AddRef, - TestChannelHook_Release, - TestChannelHook_ClientGetSize, - TestChannelHook_ClientFillBuffer, - TestChannelHook_ClientNotify, - TestChannelHook_ServerNotify, - TestChannelHook_ServerGetSize, - TestChannelHook_ServerFillBuffer, -}; - -static IChannelHook TestChannelHook = { &TestChannelHookVtbl }; - -static void test_channel_hook(void) -{ - IStream *pStream = NULL; - IClassFactory *cf = NULL; - DWORD tid; - IUnknown *proxy = NULL; - HANDLE thread; - HRESULT hr; - - hr = CoRegisterChannelHook(&EXTENTID_WineTest, &TestChannelHook); - ok_ole_success(hr, CoRegisterChannelHook); - - hr = CoRegisterMessageFilter(&MessageFilter, NULL); - ok_ole_success(hr, CoRegisterMessageFilter); - - cLocks = 0; - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object2(pStream, &IID_IClassFactory, (IUnknown*)&Test_ClassFactory, MSHLFLAGS_NORMAL, &MessageFilter, &thread); - - ok_more_than_one_lock(); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IClassFactory, (void **)&cf); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - ok_more_than_one_lock(); - - hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (LPVOID*)&proxy); - ok_ole_success(hr, IClassFactory_CreateInstance); - IUnknown_Release(proxy); - - IClassFactory_Release(cf); - - ok_no_locks(); - - end_host_object(tid, thread); - - hr = CoRegisterMessageFilter(NULL, NULL); - ok_ole_success(hr, CoRegisterMessageFilter); -} - -START_TEST(marshal) -{ - HMODULE hOle32 = GetModuleHandle("ole32"); - int argc; - char **argv; - - if (!(pCoInitializeEx = (void*)GetProcAddress(hOle32, "CoInitializeEx"))) goto no_test; - - argc = winetest_get_mainargs( &argv ); - if (argc > 2 && (!strcmp(argv[2], "-Embedding"))) - { - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - test_register_local_server(); - CoUninitialize(); - - return; - } - - register_test_window(); - - test_cocreateinstance_proxy(); - - pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - /* FIXME: test CoCreateInstanceEx */ - - /* lifecycle management and marshaling tests */ - test_no_marshaler(); - test_normal_marshal_and_release(); - test_normal_marshal_and_unmarshal(); - test_marshal_and_unmarshal_invalid(); - test_same_apartment_unmarshal_failure(); - test_interthread_marshal_and_unmarshal(); - test_proxy_marshal_and_unmarshal(); - test_proxy_marshal_and_unmarshal2(); - test_proxy_marshal_and_unmarshal_weak(); - test_proxy_marshal_and_unmarshal_strong(); - test_marshal_stub_apartment_shutdown(); - test_marshal_proxy_apartment_shutdown(); - test_marshal_proxy_mta_apartment_shutdown(); - test_no_couninitialize_server(); - test_no_couninitialize_client(); - test_tableweak_marshal_and_unmarshal_twice(); - test_tableweak_marshal_releasedata1(); - test_tableweak_marshal_releasedata2(); - test_tableweak_and_normal_marshal_and_unmarshal(); - test_tablestrong_marshal_and_unmarshal_twice(); - test_lock_object_external(); - test_disconnect_stub(); - test_normal_marshal_and_unmarshal_twice(); - test_hresult_marshaling(); - test_proxy_used_in_wrong_thread(); - test_message_filter(); - test_bad_marshal_stream(); - test_proxy_interfaces(); - test_stubbuffer(&IID_IClassFactory); - test_proxybuffer(&IID_IClassFactory); - test_message_reentrancy(); - test_call_from_message(); - test_WM_QUIT_handling(); - test_freethreadedmarshaler(); - test_inproc_handler(); - test_handler_marshaling(); - test_client_security(); - - test_local_server(); - - test_globalinterfacetable(); - - /* must be last test as channel hooks can't be unregistered */ - test_channel_hook(); - - CoUninitialize(); - return; - -no_test: - trace("You need DCOM95 installed to run this test\n"); - return; -} diff --git a/rostests/winetests/ole32/moniker.c b/rostests/winetests/ole32/moniker.c deleted file mode 100644 index 468eb62de74..00000000000 --- a/rostests/winetests/ole32/moniker.c +++ /dev/null @@ -1,1848 +0,0 @@ -/* - * Moniker Tests - * - * 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 - */ - -#define _WIN32_DCOM -#define COBJMACROS -#define CONST_VTABLE - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" -#include "comcat.h" -#include "olectl.h" - -#include "wine/test.h" - -#define ok_more_than_one_lock() ok(cLocks > 0, "Number of locks should be > 0, but actually is %d\n", cLocks) -#define ok_no_locks() ok(cLocks == 0, "Number of locks should be 0, but actually is %d\n", cLocks) -#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error 0x%08x\n", hr) -#define COUNTOF(x) (sizeof(x) / sizeof(x[0])) - -#define CHECK_EXPECTED_METHOD(method_name) \ -do { \ - trace("%s\n", method_name); \ - ok(*expected_method_list != NULL, "Extra method %s called\n", method_name); \ - if (*expected_method_list) \ - { \ - ok(!strcmp(*expected_method_list, method_name), "Expected %s to be called instead of %s\n", \ - *expected_method_list, method_name); \ - expected_method_list++; \ - } \ -} while(0) - -static char const * const *expected_method_list; -static const WCHAR wszFileName1[] = {'c',':','\\','w','i','n','d','o','w','s','\\','t','e','s','t','1','.','d','o','c',0}; -static const WCHAR wszFileName2[] = {'c',':','\\','w','i','n','d','o','w','s','\\','t','e','s','t','2','.','d','o','c',0}; - -static const CLSID CLSID_WineTest = -{ /* 9474ba1a-258b-490b-bc13-516e9239ace0 */ - 0x9474ba1a, - 0x258b, - 0x490b, - {0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xe0} -}; - -static const CLSID CLSID_TestMoniker = -{ /* b306bfbc-496e-4f53-b93e-2ff9c83223d7 */ - 0xb306bfbc, - 0x496e, - 0x4f53, - {0xb9, 0x3e, 0x2f, 0xf9, 0xc8, 0x32, 0x23, 0xd7} -}; - -static LONG cLocks; - -static void LockModule(void) -{ - InterlockedIncrement(&cLocks); -} - -static void UnlockModule(void) -{ - InterlockedDecrement(&cLocks); -} - -static HRESULT WINAPI Test_IClassFactory_QueryInterface( - LPCLASSFACTORY iface, - REFIID riid, - LPVOID *ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IClassFactory)) - { - *ppvObj = (LPVOID)iface; - IClassFactory_AddRef(iface); - return S_OK; - } - - *ppvObj = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Test_IClassFactory_AddRef(LPCLASSFACTORY iface) -{ - LockModule(); - return 2; /* non-heap-based object */ -} - -static ULONG WINAPI Test_IClassFactory_Release(LPCLASSFACTORY iface) -{ - UnlockModule(); - return 1; /* non-heap-based object */ -} - -static HRESULT WINAPI Test_IClassFactory_CreateInstance( - LPCLASSFACTORY iface, - LPUNKNOWN pUnkOuter, - REFIID riid, - LPVOID *ppvObj) -{ - return E_NOTIMPL; -} - -static HRESULT WINAPI Test_IClassFactory_LockServer( - LPCLASSFACTORY iface, - BOOL fLock) -{ - return S_OK; -} - -static const IClassFactoryVtbl TestClassFactory_Vtbl = -{ - Test_IClassFactory_QueryInterface, - Test_IClassFactory_AddRef, - Test_IClassFactory_Release, - Test_IClassFactory_CreateInstance, - Test_IClassFactory_LockServer -}; - -static IClassFactory Test_ClassFactory = { &TestClassFactory_Vtbl }; - -typedef struct -{ - const IUnknownVtbl *lpVtbl; - ULONG refs; -} HeapUnknown; - -static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IUnknown)) - { - IUnknown_AddRef(iface); - *ppv = (LPVOID)iface; - return S_OK; - } - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI HeapUnknown_AddRef(IUnknown *iface) -{ - HeapUnknown *This = (HeapUnknown *)iface; - return InterlockedIncrement((LONG*)&This->refs); -} - -static ULONG WINAPI HeapUnknown_Release(IUnknown *iface) -{ - HeapUnknown *This = (HeapUnknown *)iface; - ULONG refs = InterlockedDecrement((LONG*)&This->refs); - if (!refs) HeapFree(GetProcessHeap(), 0, This); - return refs; -} - -static const IUnknownVtbl HeapUnknown_Vtbl = -{ - HeapUnknown_QueryInterface, - HeapUnknown_AddRef, - HeapUnknown_Release -}; - -static HRESULT WINAPI -MonikerNoROTData_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject) -{ - if (!ppvObject) - return E_INVALIDARG; - - *ppvObject = 0; - - if (IsEqualIID(&IID_IUnknown, riid) || - IsEqualIID(&IID_IPersist, riid) || - IsEqualIID(&IID_IPersistStream,riid) || - IsEqualIID(&IID_IMoniker, riid)) - *ppvObject = iface; - if (IsEqualIID(&IID_IROTData, riid)) - CHECK_EXPECTED_METHOD("Moniker_QueryInterface(IID_IROTData)"); - - if ((*ppvObject)==0) - return E_NOINTERFACE; - - IMoniker_AddRef(iface); - - return S_OK; -} - -static ULONG WINAPI -Moniker_AddRef(IMoniker* iface) -{ - return 2; -} - -static ULONG WINAPI -Moniker_Release(IMoniker* iface) -{ - return 1; -} - -static HRESULT WINAPI -Moniker_GetClassID(IMoniker* iface, CLSID *pClassID) -{ - CHECK_EXPECTED_METHOD("Moniker_GetClassID"); - - *pClassID = CLSID_TestMoniker; - - return S_OK; -} - -static HRESULT WINAPI -Moniker_IsDirty(IMoniker* iface) -{ - CHECK_EXPECTED_METHOD("Moniker_IsDirty"); - - return S_FALSE; -} - -static HRESULT WINAPI -Moniker_Load(IMoniker* iface, IStream* pStm) -{ - CHECK_EXPECTED_METHOD("Moniker_Load"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty) -{ - CHECK_EXPECTED_METHOD("Moniker_Save"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_GetSizeMax(IMoniker* iface, ULARGE_INTEGER* pcbSize) -{ - CHECK_EXPECTED_METHOD("Moniker_GetSizeMax"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_BindToObject(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, - REFIID riid, VOID** ppvResult) -{ - CHECK_EXPECTED_METHOD("Moniker_BindToObject"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_BindToStorage(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, - REFIID riid, VOID** ppvObject) -{ - CHECK_EXPECTED_METHOD("Moniker_BindToStorage"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_Reduce(IMoniker* iface, IBindCtx* pbc, DWORD dwReduceHowFar, - IMoniker** ppmkToLeft, IMoniker** ppmkReduced) -{ - CHECK_EXPECTED_METHOD("Moniker_Reduce"); - - if (ppmkReduced==NULL) - return E_POINTER; - - IMoniker_AddRef(iface); - - *ppmkReduced=iface; - - return MK_S_REDUCED_TO_SELF; -} - -static HRESULT WINAPI -Moniker_ComposeWith(IMoniker* iface, IMoniker* pmkRight, - BOOL fOnlyIfNotGeneric, IMoniker** ppmkComposite) -{ - CHECK_EXPECTED_METHOD("Moniker_ComposeWith"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_Enum(IMoniker* iface,BOOL fForward, IEnumMoniker** ppenumMoniker) -{ - CHECK_EXPECTED_METHOD("Moniker_Enum"); - - if (ppenumMoniker == NULL) - return E_POINTER; - - *ppenumMoniker = NULL; - - return S_OK; -} - -static HRESULT WINAPI -Moniker_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker) -{ - CHECK_EXPECTED_METHOD("Moniker_IsEqual"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_Hash(IMoniker* iface,DWORD* pdwHash) -{ - CHECK_EXPECTED_METHOD("Moniker_Hash"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_IsRunning(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, - IMoniker* pmkNewlyRunning) -{ - CHECK_EXPECTED_METHOD("Moniker_IsRunning"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_GetTimeOfLastChange(IMoniker* iface, IBindCtx* pbc, - IMoniker* pmkToLeft, FILETIME* pFileTime) -{ - CHECK_EXPECTED_METHOD("Moniker_GetTimeOfLastChange"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_Inverse(IMoniker* iface,IMoniker** ppmk) -{ - CHECK_EXPECTED_METHOD("Moniker_Inverse"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther,IMoniker** ppmkPrefix) -{ - CHECK_EXPECTED_METHOD("Moniker_CommonPrefixWith"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppmkRelPath) -{ - CHECK_EXPECTED_METHOD("Moniker_RelativePathTo"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_GetDisplayName(IMoniker* iface, IBindCtx* pbc, - IMoniker* pmkToLeft, LPOLESTR *ppszDisplayName) -{ - static const WCHAR wszDisplayName[] = {'*','*','G','e','m','m','a',0}; - CHECK_EXPECTED_METHOD("Moniker_GetDisplayName"); - *ppszDisplayName = (LPOLESTR)CoTaskMemAlloc(sizeof(wszDisplayName)); - memcpy(*ppszDisplayName, wszDisplayName, sizeof(wszDisplayName)); - return S_OK; -} - -static HRESULT WINAPI -Moniker_ParseDisplayName(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, - LPOLESTR pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut) -{ - CHECK_EXPECTED_METHOD("Moniker_ParseDisplayName"); - return E_NOTIMPL; -} - -static HRESULT WINAPI -Moniker_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys) -{ - CHECK_EXPECTED_METHOD("Moniker_IsSystemMoniker"); - - if (!pwdMksys) - return E_POINTER; - - (*pwdMksys)=MKSYS_NONE; - - return S_FALSE; -} - -static const IMonikerVtbl MonikerNoROTDataVtbl = -{ - MonikerNoROTData_QueryInterface, - Moniker_AddRef, - Moniker_Release, - Moniker_GetClassID, - Moniker_IsDirty, - Moniker_Load, - Moniker_Save, - Moniker_GetSizeMax, - Moniker_BindToObject, - Moniker_BindToStorage, - Moniker_Reduce, - Moniker_ComposeWith, - Moniker_Enum, - Moniker_IsEqual, - Moniker_Hash, - Moniker_IsRunning, - Moniker_GetTimeOfLastChange, - Moniker_Inverse, - Moniker_CommonPrefixWith, - Moniker_RelativePathTo, - Moniker_GetDisplayName, - Moniker_ParseDisplayName, - Moniker_IsSystemMoniker -}; - -static IMoniker MonikerNoROTData = { &MonikerNoROTDataVtbl }; - -static IMoniker Moniker; - -static HRESULT WINAPI -ROTData_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObject) -{ - return IMoniker_QueryInterface(&Moniker, riid, ppvObject); -} - -static ULONG WINAPI -ROTData_AddRef(IROTData *iface) -{ - return 2; -} - -static ULONG WINAPI -ROTData_Release(IROTData* iface) -{ - return 1; -} - -static HRESULT WINAPI -ROTData_GetComparisonData(IROTData* iface, BYTE* pbData, - ULONG cbMax, ULONG* pcbData) -{ - CHECK_EXPECTED_METHOD("ROTData_GetComparisonData"); - - *pcbData = 1; - if (cbMax < *pcbData) - return E_OUTOFMEMORY; - - *pbData = 0xde; - - return S_OK; -} - -static IROTDataVtbl ROTDataVtbl = -{ - ROTData_QueryInterface, - ROTData_AddRef, - ROTData_Release, - ROTData_GetComparisonData -}; - -static IROTData ROTData = { &ROTDataVtbl }; - -static HRESULT WINAPI -Moniker_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject) -{ - if (!ppvObject) - return E_INVALIDARG; - - *ppvObject = 0; - - if (IsEqualIID(&IID_IUnknown, riid) || - IsEqualIID(&IID_IPersist, riid) || - IsEqualIID(&IID_IPersistStream,riid) || - IsEqualIID(&IID_IMoniker, riid)) - *ppvObject = iface; - if (IsEqualIID(&IID_IROTData, riid)) - { - CHECK_EXPECTED_METHOD("Moniker_QueryInterface(IID_IROTData)"); - *ppvObject = &ROTData; - } - - if ((*ppvObject)==0) - return E_NOINTERFACE; - - IMoniker_AddRef(iface); - - return S_OK; -} - -static const IMonikerVtbl MonikerVtbl = -{ - Moniker_QueryInterface, - Moniker_AddRef, - Moniker_Release, - Moniker_GetClassID, - Moniker_IsDirty, - Moniker_Load, - Moniker_Save, - Moniker_GetSizeMax, - Moniker_BindToObject, - Moniker_BindToStorage, - Moniker_Reduce, - Moniker_ComposeWith, - Moniker_Enum, - Moniker_IsEqual, - Moniker_Hash, - Moniker_IsRunning, - Moniker_GetTimeOfLastChange, - Moniker_Inverse, - Moniker_CommonPrefixWith, - Moniker_RelativePathTo, - Moniker_GetDisplayName, - Moniker_ParseDisplayName, - Moniker_IsSystemMoniker -}; - -static IMoniker Moniker = { &MonikerVtbl }; - -static void test_ROT(void) -{ - static const WCHAR wszFileName[] = {'B','E','2','0','E','2','F','5','-', - '1','9','0','3','-','4','A','A','E','-','B','1','A','F','-', - '2','0','4','6','E','5','8','6','C','9','2','5',0}; - HRESULT hr; - IMoniker *pMoniker = NULL; - IRunningObjectTable *pROT = NULL; - DWORD dwCookie; - static const char *methods_register_no_ROTData[] = - { - "Moniker_Reduce", - "Moniker_GetTimeOfLastChange", - "Moniker_QueryInterface(IID_IROTData)", - "Moniker_GetDisplayName", - "Moniker_GetClassID", - NULL - }; - static const char *methods_register[] = - { - "Moniker_Reduce", - "Moniker_GetTimeOfLastChange", - "Moniker_QueryInterface(IID_IROTData)", - "ROTData_GetComparisonData", - NULL - }; - static const char *methods_isrunning_no_ROTData[] = - { - "Moniker_Reduce", - "Moniker_QueryInterface(IID_IROTData)", - "Moniker_GetDisplayName", - "Moniker_GetClassID", - NULL - }; - static const char *methods_isrunning[] = - { - "Moniker_Reduce", - "Moniker_QueryInterface(IID_IROTData)", - "ROTData_GetComparisonData", - NULL - }; - - cLocks = 0; - - hr = GetRunningObjectTable(0, &pROT); - ok_ole_success(hr, GetRunningObjectTable); - - expected_method_list = methods_register_no_ROTData; - /* try with our own moniker that doesn't support IROTData */ - hr = IRunningObjectTable_Register(pROT, ROTFLAGS_REGISTRATIONKEEPSALIVE, - (IUnknown*)&Test_ClassFactory, &MonikerNoROTData, &dwCookie); - ok_ole_success(hr, IRunningObjectTable_Register); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - ok_more_than_one_lock(); - - expected_method_list = methods_isrunning_no_ROTData; - hr = IRunningObjectTable_IsRunning(pROT, &MonikerNoROTData); - ok_ole_success(hr, IRunningObjectTable_IsRunning); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - hr = IRunningObjectTable_Revoke(pROT, dwCookie); - ok_ole_success(hr, IRunningObjectTable_Revoke); - - ok_no_locks(); - - expected_method_list = methods_register; - /* try with our own moniker */ - hr = IRunningObjectTable_Register(pROT, ROTFLAGS_REGISTRATIONKEEPSALIVE, - (IUnknown*)&Test_ClassFactory, &Moniker, &dwCookie); - ok_ole_success(hr, IRunningObjectTable_Register); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - ok_more_than_one_lock(); - - expected_method_list = methods_isrunning; - hr = IRunningObjectTable_IsRunning(pROT, &Moniker); - ok_ole_success(hr, IRunningObjectTable_IsRunning); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - hr = IRunningObjectTable_Revoke(pROT, dwCookie); - ok_ole_success(hr, IRunningObjectTable_Revoke); - - ok_no_locks(); - - hr = CreateFileMoniker(wszFileName, &pMoniker); - ok_ole_success(hr, CreateClassMoniker); - - /* test flags: 0 */ - hr = IRunningObjectTable_Register(pROT, 0, (IUnknown*)&Test_ClassFactory, - pMoniker, &dwCookie); - ok_ole_success(hr, IRunningObjectTable_Register); - - ok_more_than_one_lock(); - - hr = IRunningObjectTable_Revoke(pROT, dwCookie); - ok_ole_success(hr, IRunningObjectTable_Revoke); - - ok_no_locks(); - - /* test flags: ROTFLAGS_REGISTRATIONKEEPSALIVE */ - hr = IRunningObjectTable_Register(pROT, ROTFLAGS_REGISTRATIONKEEPSALIVE, - (IUnknown*)&Test_ClassFactory, pMoniker, &dwCookie); - ok_ole_success(hr, IRunningObjectTable_Register); - - ok_more_than_one_lock(); - - hr = IRunningObjectTable_Revoke(pROT, dwCookie); - ok_ole_success(hr, IRunningObjectTable_Revoke); - - ok_no_locks(); - - /* test flags: ROTFLAGS_REGISTRATIONKEEPSALIVE|ROTFLAGS_ALLOWANYCLIENT */ - /* only succeeds when process is started by SCM and has LocalService - * or RunAs AppId values */ - hr = IRunningObjectTable_Register(pROT, - ROTFLAGS_REGISTRATIONKEEPSALIVE|ROTFLAGS_ALLOWANYCLIENT, - (IUnknown*)&Test_ClassFactory, pMoniker, &dwCookie); - todo_wine { - ok(hr == CO_E_WRONG_SERVER_IDENTITY, "IRunningObjectTable_Register should have returned CO_E_WRONG_SERVER_IDENTITY instead of 0x%08x\n", hr); - } - if (hr == S_OK) IRunningObjectTable_Revoke(pROT, dwCookie); - - hr = IRunningObjectTable_Register(pROT, 0xdeadbeef, - (IUnknown*)&Test_ClassFactory, pMoniker, &dwCookie); - ok(hr == E_INVALIDARG, "IRunningObjectTable_Register should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - IMoniker_Release(pMoniker); - - IRunningObjectTable_Release(pROT); -} - -static void test_ROT_multiple_entries(void) -{ - HRESULT hr; - IMoniker *pMoniker = NULL; - IRunningObjectTable *pROT = NULL; - DWORD dwCookie1, dwCookie2; - IUnknown *pObject = NULL; - static const WCHAR moniker_path[] = - {'\\', 'w','i','n','d','o','w','s','\\','s','y','s','t','e','m','\\','t','e','s','t','1','.','d','o','c',0}; - - hr = GetRunningObjectTable(0, &pROT); - ok_ole_success(hr, GetRunningObjectTable); - - hr = CreateFileMoniker(moniker_path, &pMoniker); - ok_ole_success(hr, CreateFileMoniker); - - hr = IRunningObjectTable_Register(pROT, 0, (IUnknown *)&Test_ClassFactory, pMoniker, &dwCookie1); - ok_ole_success(hr, IRunningObjectTable_Register); - - hr = IRunningObjectTable_Register(pROT, 0, (IUnknown *)&Test_ClassFactory, pMoniker, &dwCookie2); - ok(hr == MK_S_MONIKERALREADYREGISTERED, "IRunningObjectTable_Register should have returned MK_S_MONIKERALREADYREGISTERED instead of 0x%08x\n", hr); - - ok(dwCookie1 != dwCookie2, "cookie returned for registering duplicate object shouldn't match cookie of original object (0x%x)\n", dwCookie1); - - hr = IRunningObjectTable_GetObject(pROT, pMoniker, &pObject); - ok_ole_success(hr, IRunningObjectTable_GetObject); - IUnknown_Release(pObject); - - hr = IRunningObjectTable_Revoke(pROT, dwCookie1); - ok_ole_success(hr, IRunningObjectTable_Revoke); - - hr = IRunningObjectTable_GetObject(pROT, pMoniker, &pObject); - ok_ole_success(hr, IRunningObjectTable_GetObject); - IUnknown_Release(pObject); - - hr = IRunningObjectTable_Revoke(pROT, dwCookie2); - ok_ole_success(hr, IRunningObjectTable_Revoke); - - IMoniker_Release(pMoniker); - - IRunningObjectTable_Release(pROT); -} - -static HRESULT WINAPI ParseDisplayName_QueryInterface(IParseDisplayName *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IUnknown) || - IsEqualIID(riid, &IID_IParseDisplayName)) - { - *ppv = iface; - IUnknown_AddRef(iface); - return S_OK; - } - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI ParseDisplayName_AddRef(IParseDisplayName *iface) -{ - return 2; -} - -static ULONG WINAPI ParseDisplayName_Release(IParseDisplayName *iface) -{ - return 1; -} - -static LPCWSTR expected_display_name; - -static HRESULT WINAPI ParseDisplayName_ParseDisplayName(IParseDisplayName *iface, - IBindCtx *pbc, - LPOLESTR pszDisplayName, - ULONG *pchEaten, - IMoniker **ppmkOut) -{ - char display_nameA[256]; - WideCharToMultiByte(CP_ACP, 0, pszDisplayName, -1, display_nameA, sizeof(display_nameA), NULL, NULL); - ok(!lstrcmpW(pszDisplayName, expected_display_name), "unexpected display name \"%s\"\n", display_nameA); - ok(pszDisplayName == expected_display_name, "pszDisplayName should be the same pointer as passed into MkParseDisplayName\n"); - *pchEaten = lstrlenW(pszDisplayName); - return CreateAntiMoniker(ppmkOut); -} - -static const IParseDisplayNameVtbl ParseDisplayName_Vtbl = -{ - ParseDisplayName_QueryInterface, - ParseDisplayName_AddRef, - ParseDisplayName_Release, - ParseDisplayName_ParseDisplayName -}; - -static IParseDisplayName ParseDisplayName = { &ParseDisplayName_Vtbl }; - -static int count_moniker_matches(IBindCtx * pbc, IEnumMoniker * spEM) -{ - IMoniker * spMoniker; - int monCnt=0, matchCnt=0; - - while ((IEnumMoniker_Next(spEM, 1, &spMoniker, NULL)==S_OK)) - { - HRESULT hr; - WCHAR * szDisplayn; - monCnt++; - hr=IMoniker_GetDisplayName(spMoniker, pbc, NULL, &szDisplayn); - if (SUCCEEDED(hr)) - { - if (!lstrcmpiW(szDisplayn, wszFileName1) || !lstrcmpiW(szDisplayn, wszFileName2)) - matchCnt++; - CoTaskMemFree(szDisplayn); - } - } - trace("Total number of monikers is %i\n", monCnt); - return matchCnt; -} - -static void test_MkParseDisplayName(void) -{ - IBindCtx * pbc = NULL; - HRESULT hr; - IMoniker * pmk = NULL; - IMoniker * pmk1 = NULL; - IMoniker * pmk2 = NULL; - ULONG eaten; - int matchCnt; - IUnknown * object = NULL; - - IUnknown *lpEM1; - - IEnumMoniker *spEM1 = NULL; - IEnumMoniker *spEM2 = NULL; - IEnumMoniker *spEM3 = NULL; - - DWORD pdwReg1=0; - DWORD grflags=0; - DWORD pdwReg2=0; - DWORD moniker_type; - IRunningObjectTable * pprot=NULL; - - /* CLSID of My Computer */ - static const WCHAR wszDisplayName[] = {'c','l','s','i','d',':', - '2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-','A','2','D','8','-','0','8','0','0','2','B','3','0','3','0','9','D',':',0}; - static const WCHAR wszDisplayNameClsid[] = {'c','l','s','i','d',':',0}; - static const WCHAR wszNonExistentProgId[] = {'N','o','n','E','x','i','s','t','e','n','t','P','r','o','g','I','d',':',0}; - static const WCHAR wszDisplayNameRunning[] = {'W','i','n','e','T','e','s','t','R','u','n','n','i','n','g',0}; - static const WCHAR wszDisplayNameProgId1[] = {'S','t','d','F','o','n','t',':',0}; - static const WCHAR wszDisplayNameProgId2[] = {'@','S','t','d','F','o','n','t',0}; - static const WCHAR wszDisplayNameProgIdFail[] = {'S','t','d','F','o','n','t',0}; - char szDisplayNameFile[256]; - WCHAR wszDisplayNameFile[256]; - - hr = CreateBindCtx(0, &pbc); - ok_ole_success(hr, CreateBindCtx); - - hr = MkParseDisplayName(pbc, wszNonExistentProgId, &eaten, &pmk); - ok(hr == MK_E_SYNTAX || hr == MK_E_CANTOPENFILE /* Win9x */, - "MkParseDisplayName should have failed with MK_E_SYNTAX or MK_E_CANTOPENFILE instead of 0x%08x\n", hr); - - /* no special handling of "clsid:" without the string form of the clsid - * following */ - hr = MkParseDisplayName(pbc, wszDisplayNameClsid, &eaten, &pmk); - ok(hr == MK_E_SYNTAX || hr == MK_E_CANTOPENFILE /* Win9x */, - "MkParseDisplayName should have failed with MK_E_SYNTAX or MK_E_CANTOPENFILE instead of 0x%08x\n", hr); - - /* shows clsid has higher precedence than a running object */ - hr = CreateFileMoniker(wszDisplayName, &pmk); - ok_ole_success(hr, CreateFileMoniker); - hr = IBindCtx_GetRunningObjectTable(pbc, &pprot); - ok_ole_success(hr, IBindCtx_GetRunningObjectTable); - hr = IRunningObjectTable_Register(pprot, 0, (IUnknown *)&Test_ClassFactory, pmk, &pdwReg1); - ok_ole_success(hr, IRunningObjectTable_Register); - IMoniker_Release(pmk); - pmk = NULL; - hr = MkParseDisplayName(pbc, wszDisplayName, &eaten, &pmk); - ok_ole_success(hr, MkParseDisplayName); - if (pmk) - { - IMoniker_IsSystemMoniker(pmk, &moniker_type); - ok(moniker_type == MKSYS_CLASSMONIKER, "moniker_type was %d instead of MKSYS_CLASSMONIKER\n", moniker_type); - IMoniker_Release(pmk); - } - hr = IRunningObjectTable_Revoke(pprot, pdwReg1); - ok_ole_success(hr, IRunningObjectTable_Revoke); - IRunningObjectTable_Release(pprot); - - hr = CreateFileMoniker(wszDisplayNameRunning, &pmk); - ok_ole_success(hr, CreateFileMoniker); - hr = IBindCtx_GetRunningObjectTable(pbc, &pprot); - ok_ole_success(hr, IBindCtx_GetRunningObjectTable); - hr = IRunningObjectTable_Register(pprot, 0, (IUnknown *)&Test_ClassFactory, pmk, &pdwReg1); - ok_ole_success(hr, IRunningObjectTable_Register); - IMoniker_Release(pmk); - pmk = NULL; - hr = MkParseDisplayName(pbc, wszDisplayNameRunning, &eaten, &pmk); - ok_ole_success(hr, MkParseDisplayName); - if (pmk) - { - IMoniker_IsSystemMoniker(pmk, &moniker_type); - ok(moniker_type == MKSYS_FILEMONIKER, "moniker_type was %d instead of MKSYS_FILEMONIKER\n", moniker_type); - IMoniker_Release(pmk); - } - hr = IRunningObjectTable_Revoke(pprot, pdwReg1); - ok_ole_success(hr, IRunningObjectTable_Revoke); - IRunningObjectTable_Release(pprot); - - hr = CoRegisterClassObject(&CLSID_StdFont, (IUnknown *)&ParseDisplayName, CLSCTX_INPROC_SERVER, REGCLS_MULTI_SEPARATE, &pdwReg1); - ok_ole_success(hr, CoRegisterClassObject); - - expected_display_name = wszDisplayNameProgId1; - hr = MkParseDisplayName(pbc, wszDisplayNameProgId1, &eaten, &pmk); - ok_ole_success(hr, MkParseDisplayName); - if (pmk) - { - IMoniker_IsSystemMoniker(pmk, &moniker_type); - ok(moniker_type == MKSYS_ANTIMONIKER, "moniker_type was %d instead of MKSYS_ANTIMONIKER\n", moniker_type); - IMoniker_Release(pmk); - } - - expected_display_name = wszDisplayNameProgId2; - hr = MkParseDisplayName(pbc, wszDisplayNameProgId2, &eaten, &pmk); - ok_ole_success(hr, MkParseDisplayName); - if (pmk) - { - IMoniker_IsSystemMoniker(pmk, &moniker_type); - ok(moniker_type == MKSYS_ANTIMONIKER, "moniker_type was %d instead of MKSYS_ANTIMONIKER\n", moniker_type); - IMoniker_Release(pmk); - } - - hr = MkParseDisplayName(pbc, wszDisplayNameProgIdFail, &eaten, &pmk); - ok(hr == MK_E_SYNTAX || hr == MK_E_CANTOPENFILE /* Win9x */, - "MkParseDisplayName with ProgId without marker should fail with MK_E_SYNTAX or MK_E_CANTOPENFILE instead of 0x%08x\n", hr); - - hr = CoRevokeClassObject(pdwReg1); - ok_ole_success(hr, CoRevokeClassObject); - - GetSystemDirectoryA(szDisplayNameFile, sizeof(szDisplayNameFile)); - strcat(szDisplayNameFile, "\\kernel32.dll"); - MultiByteToWideChar(CP_ACP, 0, szDisplayNameFile, -1, wszDisplayNameFile, sizeof(wszDisplayNameFile)/sizeof(wszDisplayNameFile[0])); - hr = MkParseDisplayName(pbc, wszDisplayNameFile, &eaten, &pmk); - ok_ole_success(hr, MkParseDisplayName); - if (pmk) - { - IMoniker_IsSystemMoniker(pmk, &moniker_type); - ok(moniker_type == MKSYS_FILEMONIKER, "moniker_type was %d instead of MKSYS_FILEMONIKER\n", moniker_type); - IMoniker_Release(pmk); - } - - hr = MkParseDisplayName(pbc, wszDisplayName, &eaten, &pmk); - ok_ole_success(hr, MkParseDisplayName); - - if (pmk) - { - hr = IMoniker_BindToObject(pmk, pbc, NULL, &IID_IUnknown, (LPVOID*)&object); - ok_ole_success(hr, IMoniker_BindToObject); - - IUnknown_Release(object); - IMoniker_Release(pmk); - } - IBindCtx_Release(pbc); - - /* Test the EnumMoniker interface */ - hr = CreateBindCtx(0, &pbc); - ok_ole_success(hr, CreateBindCtx); - - hr = CreateFileMoniker(wszFileName1, &pmk1); - ok(hr==0, "CreateFileMoniker for file hr=%08x\n", hr); - hr = CreateFileMoniker(wszFileName2, &pmk2); - ok(hr==0, "CreateFileMoniker for file hr=%08x\n", hr); - hr = IBindCtx_GetRunningObjectTable(pbc, &pprot); - ok(hr==0, "IBindCtx_GetRunningObjectTable hr=%08x\n", hr); - - /* Check EnumMoniker before registering */ - hr = IRunningObjectTable_EnumRunning(pprot, &spEM1); - ok(hr==0, "IRunningObjectTable_EnumRunning hr=%08x\n", hr); - hr = IEnumMoniker_QueryInterface(spEM1, &IID_IUnknown, (void*) &lpEM1); - /* Register a couple of Monikers and check is ok */ - ok(hr==0, "IEnumMoniker_QueryInterface hr %08x %p\n", hr, lpEM1); - hr = MK_E_NOOBJECT; - - matchCnt = count_moniker_matches(pbc, spEM1); - trace("Number of matches is %i\n", matchCnt); - - grflags= grflags | ROTFLAGS_REGISTRATIONKEEPSALIVE; - hr = IRunningObjectTable_Register(pprot, grflags, lpEM1, pmk1, &pdwReg1); - ok(hr==0, "IRunningObjectTable_Register hr=%08x %p %08x %p %p %d\n", - hr, pprot, grflags, lpEM1, pmk1, pdwReg1); - - trace("IROT::Register\n"); - grflags=0; - grflags= grflags | ROTFLAGS_REGISTRATIONKEEPSALIVE; - hr = IRunningObjectTable_Register(pprot, grflags, lpEM1, pmk2, &pdwReg2); - ok(hr==0, "IRunningObjectTable_Register hr=%08x %p %08x %p %p %d\n", hr, - pprot, grflags, lpEM1, pmk2, pdwReg2); - - hr = IRunningObjectTable_EnumRunning(pprot, &spEM2); - ok(hr==0, "IRunningObjectTable_EnumRunning hr=%08x\n", hr); - - matchCnt = count_moniker_matches(pbc, spEM2); - ok(matchCnt==2, "Number of matches should be equal to 2 not %i\n", matchCnt); - - trace("IEnumMoniker::Clone\n"); - IEnumMoniker_Clone(spEM2, &spEM3); - - matchCnt = count_moniker_matches(pbc, spEM3); - ok(matchCnt==0, "Number of matches should be equal to 0 not %i\n", matchCnt); - trace("IEnumMoniker::Reset\n"); - IEnumMoniker_Reset(spEM3); - - matchCnt = count_moniker_matches(pbc, spEM3); - ok(matchCnt==2, "Number of matches should be equal to 2 not %i\n", matchCnt); - - IRunningObjectTable_Revoke(pprot,pdwReg1); - IRunningObjectTable_Revoke(pprot,pdwReg2); - IUnknown_Release(lpEM1); - IEnumMoniker_Release(spEM1); - IEnumMoniker_Release(spEM2); - IEnumMoniker_Release(spEM3); - IMoniker_Release(pmk1); - IMoniker_Release(pmk2); - IRunningObjectTable_Release(pprot); - - IBindCtx_Release(pbc); -} - -static const LARGE_INTEGER llZero; - -static const BYTE expected_class_moniker_marshal_data[] = -{ - 0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x1a,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00, - 0x05,0xe0,0x02,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00, -}; - -static const BYTE expected_class_moniker_saved_data[] = -{ - 0x05,0xe0,0x02,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00, -}; - -static const BYTE expected_class_moniker_comparison_data[] = -{ - 0x1a,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x05,0xe0,0x02,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, -}; - -static const WCHAR expected_class_moniker_display_name[] = -{ - 'c','l','s','i','d',':','0','0','0','2','E','0','0','5','-','0','0','0', - '0','-','0','0','0','0','-','C','0','0','0','-','0','0','0','0','0','0', - '0','0','0','0','4','6',':',0 -}; - -static const BYTE expected_item_moniker_comparison_data[] = -{ - 0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x21,0x00,0x54,0x00,0x45,0x00,0x53,0x00, - 0x54,0x00,0x00,0x00, -}; - -static const BYTE expected_item_moniker_saved_data[] = -{ - 0x02,0x00,0x00,0x00,0x21,0x00,0x05,0x00, - 0x00,0x00,0x54,0x65,0x73,0x74,0x00, -}; - -static const BYTE expected_item_moniker_marshal_data[] = -{ - 0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00,0x21,0x00,0x05,0x00, - 0x00,0x00,0x54,0x65,0x73,0x74,0x00, -}; - -static const BYTE expected_anti_moniker_marshal_data[] = -{ - 0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00, -}; - -static const BYTE expected_anti_moniker_saved_data[] = -{ - 0x01,0x00,0x00,0x00, -}; - -static const BYTE expected_anti_moniker_comparison_data[] = -{ - 0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x01,0x00,0x00,0x00, -}; - -static const BYTE expected_gc_moniker_marshal_data[] = -{ - 0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x09,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00,0x2c,0x01,0x00,0x00, - 0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00,0x21,0x00,0x05,0x00, - 0x00,0x00,0x54,0x65,0x73,0x74,0x00,0x4d, - 0x45,0x4f,0x57,0x04,0x00,0x00,0x00,0x0f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x04, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, - 0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x00, - 0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x02, - 0x00,0x00,0x00,0x23,0x00,0x05,0x00,0x00, - 0x00,0x57,0x69,0x6e,0x65,0x00, -}; - -static const BYTE expected_gc_moniker_saved_data[] = -{ - 0x02,0x00,0x00,0x00,0x04,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x00, - 0x21,0x00,0x05,0x00,0x00,0x00,0x54,0x65, - 0x73,0x74,0x00,0x04,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00, - 0x00,0x00,0x46,0x02,0x00,0x00,0x00,0x23, - 0x00,0x05,0x00,0x00,0x00,0x57,0x69,0x6e, - 0x65,0x00, -}; - -static const BYTE expected_gc_moniker_comparison_data[] = -{ - 0x09,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x21,0x00,0x54,0x00,0x45,0x00,0x53,0x00, - 0x54,0x00,0x00,0x00,0x04,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x46,0x23,0x00,0x57,0x00, - 0x49,0x00,0x4e,0x00,0x45,0x00,0x00,0x00, -}; - -static void test_moniker( - const char *testname, IMoniker *moniker, - const BYTE *expected_moniker_marshal_data, unsigned int sizeof_expected_moniker_marshal_data, - const BYTE *expected_moniker_saved_data, unsigned int sizeof_expected_moniker_saved_data, - const BYTE *expected_moniker_comparison_data, unsigned int sizeof_expected_moniker_comparison_data, - LPCWSTR expected_display_name) -{ - IStream * stream; - IROTData * rotdata; - HRESULT hr; - HGLOBAL hglobal; - LPBYTE moniker_data; - DWORD moniker_size; - DWORD i; - BOOL same = TRUE; - BYTE buffer[128]; - IMoniker * moniker_proxy; - LPOLESTR display_name; - IBindCtx *bindctx; - - hr = IMoniker_IsDirty(moniker); - ok(hr == S_FALSE, "%s: IMoniker_IsDirty should return S_FALSE, not 0x%08x\n", testname, hr); - - /* Display Name */ - - hr = CreateBindCtx(0, &bindctx); - ok_ole_success(hr, CreateBindCtx); - - hr = IMoniker_GetDisplayName(moniker, bindctx, NULL, &display_name); - ok_ole_success(hr, IMoniker_GetDisplayName); - ok(!lstrcmpW(display_name, expected_display_name), "%s: display name wasn't what was expected\n", testname); - - CoTaskMemFree(display_name); - IBindCtx_Release(bindctx); - - hr = IMoniker_IsDirty(moniker); - ok(hr == S_FALSE, "%s: IMoniker_IsDirty should return S_FALSE, not 0x%08x\n", testname, hr); - - /* IROTData::GetComparisonData test */ - - hr = IMoniker_QueryInterface(moniker, &IID_IROTData, (void **)&rotdata); - ok_ole_success(hr, IMoniker_QueryInterface_IID_IROTData); - - hr = IROTData_GetComparisonData(rotdata, buffer, sizeof(buffer), &moniker_size); - ok_ole_success(hr, IROTData_GetComparisonData); - - if (hr != S_OK) moniker_size = 0; - - /* first check we have the right amount of data */ - ok(moniker_size == sizeof_expected_moniker_comparison_data, - "%s: Size of comparison data differs (expected %d, actual %d)\n", - testname, sizeof_expected_moniker_comparison_data, moniker_size); - - /* then do a byte-by-byte comparison */ - for (i = 0; i < min(moniker_size, sizeof_expected_moniker_comparison_data); i++) - { - if (expected_moniker_comparison_data[i] != buffer[i]) - { - same = FALSE; - break; - } - } - - ok(same, "%s: Comparison data differs\n", testname); - if (!same) - { - for (i = 0; i < moniker_size; i++) - { - if (i % 8 == 0) printf(" "); - printf("0x%02x,", buffer[i]); - if (i % 8 == 7) printf("\n"); - } - printf("\n"); - } - - IROTData_Release(rotdata); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); - - /* Saving */ - - hr = IMoniker_Save(moniker, stream, TRUE); - ok_ole_success(hr, IMoniker_Save); - - hr = GetHGlobalFromStream(stream, &hglobal); - ok_ole_success(hr, GetHGlobalFromStream); - - moniker_size = GlobalSize(hglobal); - - moniker_data = GlobalLock(hglobal); - - /* first check we have the right amount of data */ - ok(moniker_size == sizeof_expected_moniker_saved_data, - "%s: Size of saved data differs (expected %d, actual %d)\n", - testname, sizeof_expected_moniker_saved_data, moniker_size); - - /* then do a byte-by-byte comparison */ - for (i = 0; i < min(moniker_size, sizeof_expected_moniker_saved_data); i++) - { - if (expected_moniker_saved_data[i] != moniker_data[i]) - { - same = FALSE; - break; - } - } - - ok(same, "%s: Saved data differs\n", testname); - if (!same) - { - for (i = 0; i < moniker_size; i++) - { - if (i % 8 == 0) printf(" "); - printf("0x%02x,", moniker_data[i]); - if (i % 8 == 7) printf("\n"); - } - printf("\n"); - } - - GlobalUnlock(hglobal); - - IStream_Release(stream); - - /* Marshaling tests */ - - hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); - ok_ole_success(hr, CreateStreamOnHGlobal); - - hr = CoMarshalInterface(stream, &IID_IMoniker, (IUnknown *)moniker, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - hr = GetHGlobalFromStream(stream, &hglobal); - ok_ole_success(hr, GetHGlobalFromStream); - - moniker_size = GlobalSize(hglobal); - - moniker_data = GlobalLock(hglobal); - - /* first check we have the right amount of data */ - ok(moniker_size == sizeof_expected_moniker_marshal_data, - "%s: Size of marshaled data differs (expected %d, actual %d)\n", - testname, sizeof_expected_moniker_marshal_data, moniker_size); - - /* then do a byte-by-byte comparison */ - if (expected_moniker_marshal_data) - { - for (i = 0; i < min(moniker_size, sizeof_expected_moniker_marshal_data); i++) - { - if (expected_moniker_marshal_data[i] != moniker_data[i]) - { - same = FALSE; - break; - } - } - } - - ok(same, "%s: Marshaled data differs\n", testname); - if (!same) - { - for (i = 0; i < moniker_size; i++) - { - if (i % 8 == 0) printf(" "); - printf("0x%02x,", moniker_data[i]); - if (i % 8 == 7) printf("\n"); - } - printf("\n"); - } - - GlobalUnlock(hglobal); - - IStream_Seek(stream, llZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(stream, &IID_IMoniker, (void **)&moniker_proxy); - ok_ole_success(hr, CoUnmarshalInterface); - - IStream_Release(stream); - IMoniker_Release(moniker_proxy); -} - -static void test_class_moniker(void) -{ - HRESULT hr; - IMoniker *moniker; - DWORD moniker_type; - DWORD hash; - IBindCtx *bindctx; - IMoniker *inverse; - IUnknown *unknown; - FILETIME filetime; - - hr = CreateClassMoniker(&CLSID_StdComponentCategoriesMgr, &moniker); - ok_ole_success(hr, CreateClassMoniker); - if (!moniker) return; - - test_moniker("class moniker", moniker, - expected_class_moniker_marshal_data, sizeof(expected_class_moniker_marshal_data), - expected_class_moniker_saved_data, sizeof(expected_class_moniker_saved_data), - expected_class_moniker_comparison_data, sizeof(expected_class_moniker_comparison_data), - expected_class_moniker_display_name); - - /* Hashing */ - - hr = IMoniker_Hash(moniker, &hash); - ok_ole_success(hr, IMoniker_Hash); - - ok(hash == CLSID_StdComponentCategoriesMgr.Data1, - "Hash value != Data1 field of clsid, instead was 0x%08x\n", - hash); - - /* IsSystemMoniker test */ - - hr = IMoniker_IsSystemMoniker(moniker, &moniker_type); - ok_ole_success(hr, IMoniker_IsSystemMoniker); - - ok(moniker_type == MKSYS_CLASSMONIKER, - "dwMkSys != MKSYS_CLASSMONIKER, instead was 0x%08x\n", - moniker_type); - - hr = CreateBindCtx(0, &bindctx); - ok_ole_success(hr, CreateBindCtx); - - /* IsRunning test */ - hr = IMoniker_IsRunning(moniker, bindctx, NULL, NULL); - ok(hr == E_NOTIMPL, "IMoniker_IsRunning should return E_NOTIMPL, not 0x%08x\n", hr); - - hr = IMoniker_GetTimeOfLastChange(moniker, bindctx, NULL, &filetime); - ok(hr == MK_E_UNAVAILABLE, "IMoniker_GetTimeOfLastChange should return MK_E_UNAVAILABLE, not 0x%08x\n", hr); - - hr = IMoniker_BindToObject(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok_ole_success(hr, IMoniker_BindToObject); - IUnknown_Release(unknown); - - hr = IMoniker_BindToStorage(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok_ole_success(hr, IMoniker_BindToStorage); - IUnknown_Release(unknown); - - IBindCtx_Release(bindctx); - - hr = IMoniker_Inverse(moniker, &inverse); - ok_ole_success(hr, IMoniker_Inverse); - IMoniker_Release(inverse); - - IMoniker_Release(moniker); -} - -static void test_file_moniker(WCHAR* path) -{ - IStream *stream; - IMoniker *moniker1 = NULL, *moniker2 = NULL; - HRESULT hr; - - hr = CreateFileMoniker(path, &moniker1); - ok_ole_success(hr, CreateFileMoniker); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); - - /* Marshal */ - hr = CoMarshalInterface(stream, &IID_IMoniker, (IUnknown *)moniker1, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, CoMarshalInterface); - - /* Rewind */ - hr = IStream_Seek(stream, llZero, STREAM_SEEK_SET, NULL); - ok_ole_success(hr, IStream_Seek); - - /* Unmarshal */ - hr = CoUnmarshalInterface(stream, &IID_IMoniker, (void**)&moniker2); - ok_ole_success(hr, CoUnmarshalInterface); - - hr = IMoniker_IsEqual(moniker1, moniker2); - ok_ole_success(hr, IsEqual); - - IStream_Release(stream); - if (moniker1) - IMoniker_Release(moniker1); - if (moniker2) - IMoniker_Release(moniker2); -} - -static void test_file_monikers(void) -{ - static WCHAR wszFile[][30] = { - {'\\', 'w','i','n','d','o','w','s','\\','s','y','s','t','e','m','\\','t','e','s','t','1','.','d','o','c',0}, - {'\\', 'a','b','c','d','e','f','g','\\','h','i','j','k','l','\\','m','n','o','p','q','r','s','t','u','.','m','n','o',0}, - /* These map to themselves in Windows-1252 & 932 (Shift-JIS) */ - {0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0}, - /* U+2020 = DAGGER = 0x86 (1252) = 0x813f (932) - * U+20AC = EURO SIGN = 0x80 (1252) = undef (932) - * U+0100 .. = Latin extended-A - */ - {0x20ac, 0x2020, 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10a, 0x10b, 0x10c, 0}, - }; - - int i; - - trace("ACP is %u\n", GetACP()); - - for (i = 0; i < COUNTOF(wszFile); ++i) - { - int j ; - for (j = lstrlenW(wszFile[i]); j > 0; --j) - { - wszFile[i][j] = 0; - test_file_moniker(wszFile[i]); - } - } -} - -static void test_item_moniker(void) -{ - HRESULT hr; - IMoniker *moniker; - DWORD moniker_type; - DWORD hash; - IBindCtx *bindctx; - IMoniker *inverse; - IUnknown *unknown; - static const WCHAR wszDelimeter[] = {'!',0}; - static const WCHAR wszObjectName[] = {'T','e','s','t',0}; - static const WCHAR expected_display_name[] = { '!','T','e','s','t',0 }; - - hr = CreateItemMoniker(wszDelimeter, wszObjectName, &moniker); - ok_ole_success(hr, CreateItemMoniker); - - test_moniker("item moniker", moniker, - expected_item_moniker_marshal_data, sizeof(expected_item_moniker_marshal_data), - expected_item_moniker_saved_data, sizeof(expected_item_moniker_saved_data), - expected_item_moniker_comparison_data, sizeof(expected_item_moniker_comparison_data), - expected_display_name); - - /* Hashing */ - - hr = IMoniker_Hash(moniker, &hash); - ok_ole_success(hr, IMoniker_Hash); - - ok(hash == 0x73c, - "Hash value != 0x73c, instead was 0x%08x\n", - hash); - - /* IsSystemMoniker test */ - - hr = IMoniker_IsSystemMoniker(moniker, &moniker_type); - ok_ole_success(hr, IMoniker_IsSystemMoniker); - - ok(moniker_type == MKSYS_ITEMMONIKER, - "dwMkSys != MKSYS_ITEMMONIKER, instead was 0x%08x\n", - moniker_type); - - hr = CreateBindCtx(0, &bindctx); - ok_ole_success(hr, CreateBindCtx); - - /* IsRunning test */ - hr = IMoniker_IsRunning(moniker, bindctx, NULL, NULL); - ok(hr == S_FALSE, "IMoniker_IsRunning should return S_FALSE, not 0x%08x\n", hr); - - hr = IMoniker_BindToObject(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok(hr == E_INVALIDARG, "IMoniker_BindToStorage should return E_INVALIDARG, not 0x%08x\n", hr); - - hr = IMoniker_BindToStorage(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok(hr == E_INVALIDARG, "IMoniker_BindToObject should return E_INVALIDARG, not 0x%08x\n", hr); - - IBindCtx_Release(bindctx); - - hr = IMoniker_Inverse(moniker, &inverse); - ok_ole_success(hr, IMoniker_Inverse); - IMoniker_Release(inverse); - - IMoniker_Release(moniker); -} - -static void test_anti_moniker(void) -{ - HRESULT hr; - IMoniker *moniker; - DWORD moniker_type; - DWORD hash; - IBindCtx *bindctx; - FILETIME filetime; - IMoniker *inverse; - IUnknown *unknown; - static const WCHAR expected_display_name[] = { '\\','.','.',0 }; - - hr = CreateAntiMoniker(&moniker); - ok_ole_success(hr, CreateAntiMoniker); - if (!moniker) return; - - test_moniker("anti moniker", moniker, - expected_anti_moniker_marshal_data, sizeof(expected_anti_moniker_marshal_data), - expected_anti_moniker_saved_data, sizeof(expected_anti_moniker_saved_data), - expected_anti_moniker_comparison_data, sizeof(expected_anti_moniker_comparison_data), - expected_display_name); - - /* Hashing */ - hr = IMoniker_Hash(moniker, &hash); - ok_ole_success(hr, IMoniker_Hash); - ok(hash == 0x80000001, - "Hash value != 0x80000001, instead was 0x%08x\n", - hash); - - /* IsSystemMoniker test */ - hr = IMoniker_IsSystemMoniker(moniker, &moniker_type); - ok_ole_success(hr, IMoniker_IsSystemMoniker); - ok(moniker_type == MKSYS_ANTIMONIKER, - "dwMkSys != MKSYS_ANTIMONIKER, instead was 0x%08x\n", - moniker_type); - - hr = IMoniker_Inverse(moniker, &inverse); - ok(hr == MK_E_NOINVERSE, "IMoniker_Inverse should have returned MK_E_NOINVERSE instead of 0x%08x\n", hr); - ok(inverse == NULL, "inverse should have been set to NULL instead of %p\n", inverse); - - hr = CreateBindCtx(0, &bindctx); - ok_ole_success(hr, CreateBindCtx); - - /* IsRunning test */ - hr = IMoniker_IsRunning(moniker, bindctx, NULL, NULL); - ok(hr == S_FALSE, "IMoniker_IsRunning should return S_FALSE, not 0x%08x\n", hr); - - hr = IMoniker_GetTimeOfLastChange(moniker, bindctx, NULL, &filetime); - ok(hr == E_NOTIMPL, "IMoniker_GetTimeOfLastChange should return E_NOTIMPL, not 0x%08x\n", hr); - - hr = IMoniker_BindToObject(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok(hr == E_NOTIMPL, "IMoniker_BindToObject should return E_NOTIMPL, not 0x%08x\n", hr); - - hr = IMoniker_BindToStorage(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok(hr == E_NOTIMPL, "IMoniker_BindToStorage should return E_NOTIMPL, not 0x%08x\n", hr); - - IBindCtx_Release(bindctx); - - IMoniker_Release(moniker); -} - -static void test_generic_composite_moniker(void) -{ - HRESULT hr; - IMoniker *moniker; - IMoniker *moniker1; - IMoniker *moniker2; - DWORD moniker_type; - DWORD hash; - IBindCtx *bindctx; - FILETIME filetime; - IMoniker *inverse; - IUnknown *unknown; - static const WCHAR wszDelimeter1[] = {'!',0}; - static const WCHAR wszObjectName1[] = {'T','e','s','t',0}; - static const WCHAR wszDelimeter2[] = {'#',0}; - static const WCHAR wszObjectName2[] = {'W','i','n','e',0}; - static const WCHAR expected_display_name[] = { '!','T','e','s','t','#','W','i','n','e',0 }; - - hr = CreateItemMoniker(wszDelimeter1, wszObjectName1, &moniker1); - ok_ole_success(hr, CreateItemMoniker); - hr = CreateItemMoniker(wszDelimeter2, wszObjectName2, &moniker2); - ok_ole_success(hr, CreateItemMoniker); - hr = CreateGenericComposite(moniker1, moniker2, &moniker); - ok_ole_success(hr, CreateGenericComposite); - - test_moniker("generic composite moniker", moniker, - expected_gc_moniker_marshal_data, sizeof(expected_gc_moniker_marshal_data), - expected_gc_moniker_saved_data, sizeof(expected_gc_moniker_saved_data), - expected_gc_moniker_comparison_data, sizeof(expected_gc_moniker_comparison_data), - expected_display_name); - - /* Hashing */ - - hr = IMoniker_Hash(moniker, &hash); - ok_ole_success(hr, IMoniker_Hash); - - ok(hash == 0xd87, - "Hash value != 0xd87, instead was 0x%08x\n", - hash); - - /* IsSystemMoniker test */ - - hr = IMoniker_IsSystemMoniker(moniker, &moniker_type); - ok_ole_success(hr, IMoniker_IsSystemMoniker); - - ok(moniker_type == MKSYS_GENERICCOMPOSITE, - "dwMkSys != MKSYS_GENERICCOMPOSITE, instead was 0x%08x\n", - moniker_type); - - hr = CreateBindCtx(0, &bindctx); - ok_ole_success(hr, CreateBindCtx); - - /* IsRunning test */ - hr = IMoniker_IsRunning(moniker, bindctx, NULL, NULL); - todo_wine - ok(hr == S_FALSE, "IMoniker_IsRunning should return S_FALSE, not 0x%08x\n", hr); - - hr = IMoniker_GetTimeOfLastChange(moniker, bindctx, NULL, &filetime); - ok(hr == MK_E_NOTBINDABLE, "IMoniker_GetTimeOfLastChange should return MK_E_NOTBINDABLE, not 0x%08x\n", hr); - - hr = IMoniker_BindToObject(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - todo_wine - ok(hr == E_INVALIDARG, "IMoniker_BindToObject should return E_INVALIDARG, not 0x%08x\n", hr); - - todo_wine - hr = IMoniker_BindToStorage(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok(hr == E_INVALIDARG, "IMoniker_BindToStorage should return E_INVALIDARG, not 0x%08x\n", hr); - - IBindCtx_Release(bindctx); - - hr = IMoniker_Inverse(moniker, &inverse); - ok_ole_success(hr, IMoniker_Inverse); - IMoniker_Release(inverse); - - IMoniker_Release(moniker); -} - -static void test_pointer_moniker(void) -{ - HRESULT hr; - IMoniker *moniker; - DWORD moniker_type; - DWORD hash; - IBindCtx *bindctx; - FILETIME filetime; - IMoniker *inverse; - IUnknown *unknown; - IStream *stream; - IROTData *rotdata; - LPOLESTR display_name; - - cLocks = 0; - - hr = CreatePointerMoniker((IUnknown *)&Test_ClassFactory, NULL); - ok(hr == E_INVALIDARG, "CreatePointerMoniker(x, NULL) should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CreatePointerMoniker((IUnknown *)&Test_ClassFactory, &moniker); - ok_ole_success(hr, CreatePointerMoniker); - if (!moniker) return; - - ok_more_than_one_lock(); - - /* Display Name */ - - hr = CreateBindCtx(0, &bindctx); - ok_ole_success(hr, CreateBindCtx); - - hr = IMoniker_GetDisplayName(moniker, bindctx, NULL, &display_name); - ok(hr == E_NOTIMPL, "IMoniker_GetDisplayName should have returned E_NOTIMPL instead of 0x%08x\n", hr); - - IBindCtx_Release(bindctx); - - hr = IMoniker_IsDirty(moniker); - ok(hr == S_FALSE, "IMoniker_IsDirty should return S_FALSE, not 0x%08x\n", hr); - - /* IROTData::GetComparisonData test */ - - hr = IMoniker_QueryInterface(moniker, &IID_IROTData, (void **)&rotdata); - ok(hr == E_NOINTERFACE, "IMoniker_QueryInterface(IID_IROTData) should have returned E_NOINTERFACE instead of 0x%08x\n", hr); - - /* Saving */ - - hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); - ok_ole_success(hr, CreateStreamOnHGlobal); - - hr = IMoniker_Save(moniker, stream, TRUE); - ok(hr == E_NOTIMPL, "IMoniker_Save should have returned E_NOTIMPL instead of 0x%08x\n", hr); - - IStream_Release(stream); - - /* Hashing */ - hr = IMoniker_Hash(moniker, &hash); - ok_ole_success(hr, IMoniker_Hash); - ok(hash == (DWORD)&Test_ClassFactory, - "Hash value should have been 0x%08x, instead of 0x%08x\n", - (DWORD)&Test_ClassFactory, hash); - - /* IsSystemMoniker test */ - hr = IMoniker_IsSystemMoniker(moniker, &moniker_type); - ok_ole_success(hr, IMoniker_IsSystemMoniker); - ok(moniker_type == MKSYS_POINTERMONIKER, - "dwMkSys != MKSYS_POINTERMONIKER, instead was 0x%08x\n", - moniker_type); - - hr = IMoniker_Inverse(moniker, &inverse); - ok_ole_success(hr, IMoniker_Inverse); - IMoniker_Release(inverse); - - hr = CreateBindCtx(0, &bindctx); - ok_ole_success(hr, CreateBindCtx); - - /* IsRunning test */ - hr = IMoniker_IsRunning(moniker, bindctx, NULL, NULL); - ok(hr == S_OK, "IMoniker_IsRunning should return S_OK, not 0x%08x\n", hr); - - hr = IMoniker_GetTimeOfLastChange(moniker, bindctx, NULL, &filetime); - ok(hr == E_NOTIMPL, "IMoniker_GetTimeOfLastChange should return E_NOTIMPL, not 0x%08x\n", hr); - - hr = IMoniker_BindToObject(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok_ole_success(hr, IMoniker_BindToObject); - IUnknown_Release(unknown); - - hr = IMoniker_BindToStorage(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok_ole_success(hr, IMoniker_BindToStorage); - IUnknown_Release(unknown); - - IMoniker_Release(moniker); - - ok_no_locks(); - - hr = CreatePointerMoniker(NULL, &moniker); - ok_ole_success(hr, CreatePointerMoniker); - - hr = IMoniker_BindToObject(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok(hr == E_UNEXPECTED, "IMoniker_BindToObject should have returned E_UNEXPECTED instead of 0x%08x\n", hr); - - hr = IMoniker_BindToStorage(moniker, bindctx, NULL, &IID_IUnknown, (void **)&unknown); - ok(hr == E_UNEXPECTED, "IMoniker_BindToStorage should have returned E_UNEXPECTED instead of 0x%08x\n", hr); - - IBindCtx_Release(bindctx); - - IMoniker_Release(moniker); -} - -static void test_bind_context(void) -{ - HRESULT hr; - IBindCtx *pBindCtx; - IEnumString *pEnumString; - BIND_OPTS2 bind_opts; - HeapUnknown *unknown; - HeapUnknown *unknown2; - IUnknown *param_obj; - ULONG refs; - static const WCHAR wszParamName[] = {'G','e','m','m','a',0}; - static const WCHAR wszNonExistent[] = {'N','o','n','E','x','i','s','t','e','n','t',0}; - - hr = CreateBindCtx(0, NULL); - ok(hr == E_INVALIDARG, "CreateBindCtx with NULL ppbc should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CreateBindCtx(0xdeadbeef, &pBindCtx); - ok(hr == E_INVALIDARG, "CreateBindCtx with reserved value non-zero should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CreateBindCtx(0, &pBindCtx); - ok_ole_success(hr, "CreateBindCtx"); - - bind_opts.cbStruct = -1; - hr = IBindCtx_GetBindOptions(pBindCtx, (BIND_OPTS *)&bind_opts); - ok_ole_success(hr, "IBindCtx_GetBindOptions"); - ok(bind_opts.cbStruct == sizeof(bind_opts) || - bind_opts.cbStruct == 36, /* Vista */ - "bind_opts.cbStruct was %d\n", bind_opts.cbStruct); - - bind_opts.cbStruct = sizeof(BIND_OPTS); - hr = IBindCtx_GetBindOptions(pBindCtx, (BIND_OPTS *)&bind_opts); - ok_ole_success(hr, "IBindCtx_GetBindOptions"); - ok(bind_opts.cbStruct == sizeof(BIND_OPTS), "bind_opts.cbStruct was %d\n", bind_opts.cbStruct); - - bind_opts.cbStruct = sizeof(bind_opts); - hr = IBindCtx_GetBindOptions(pBindCtx, (BIND_OPTS *)&bind_opts); - ok_ole_success(hr, "IBindCtx_GetBindOptions"); - ok(bind_opts.cbStruct == sizeof(bind_opts), "bind_opts.cbStruct was %d\n", bind_opts.cbStruct); - ok(bind_opts.grfFlags == 0, "bind_opts.grfFlags was 0x%x instead of 0\n", bind_opts.grfFlags); - ok(bind_opts.grfMode == STGM_READWRITE, "bind_opts.grfMode was 0x%x instead of STGM_READWRITE\n", bind_opts.grfMode); - ok(bind_opts.dwTickCountDeadline == 0, "bind_opts.dwTickCountDeadline was %d instead of 0\n", bind_opts.dwTickCountDeadline); - ok(bind_opts.dwTrackFlags == 0, "bind_opts.dwTrackFlags was 0x%x instead of 0\n", bind_opts.dwTrackFlags); - ok(bind_opts.dwClassContext == (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER), - "bind_opts.dwClassContext should have been 0x15 instead of 0x%x\n", bind_opts.dwClassContext); - ok(bind_opts.locale == GetThreadLocale(), "bind_opts.locale should have been 0x%x instead of 0x%x\n", GetThreadLocale(), bind_opts.locale); - ok(bind_opts.pServerInfo == NULL, "bind_opts.pServerInfo should have been NULL instead of %p\n", bind_opts.pServerInfo); - - bind_opts.cbStruct = -1; - hr = IBindCtx_SetBindOptions(pBindCtx, (BIND_OPTS *)&bind_opts); - ok(hr == E_INVALIDARG, "IBindCtx_SetBindOptions with bad cbStruct should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = IBindCtx_RegisterObjectParam(pBindCtx, (WCHAR *)wszParamName, NULL); - ok(hr == E_INVALIDARG, "IBindCtx_RegisterObjectParam should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - unknown = HeapAlloc(GetProcessHeap(), 0, sizeof(*unknown)); - unknown->lpVtbl = &HeapUnknown_Vtbl; - unknown->refs = 1; - hr = IBindCtx_RegisterObjectParam(pBindCtx, (WCHAR *)wszParamName, (IUnknown *)&unknown->lpVtbl); - ok_ole_success(hr, "IBindCtx_RegisterObjectParam"); - - hr = IBindCtx_GetObjectParam(pBindCtx, (WCHAR *)wszParamName, ¶m_obj); - ok_ole_success(hr, "IBindCtx_GetObjectParam"); - IUnknown_Release(param_obj); - - hr = IBindCtx_GetObjectParam(pBindCtx, (WCHAR *)wszNonExistent, ¶m_obj); - ok(hr == E_FAIL, "IBindCtx_GetObjectParam with nonexistent key should have failed with E_FAIL instead of 0x%08x\n", hr); - ok(param_obj == NULL, "IBindCtx_GetObjectParam with nonexistent key should have set output parameter to NULL instead of %p\n", param_obj); - - hr = IBindCtx_RevokeObjectParam(pBindCtx, (WCHAR *)wszNonExistent); - ok(hr == E_FAIL, "IBindCtx_RevokeObjectParam with nonexistent key should have failed with E_FAIL instead of 0x%08x\n", hr); - - hr = IBindCtx_EnumObjectParam(pBindCtx, &pEnumString); - ok(hr == E_NOTIMPL, "IBindCtx_EnumObjectParam should have returned E_NOTIMPL instead of 0x%08x\n", hr); - ok(!pEnumString, "pEnumString should be NULL\n"); - - hr = IBindCtx_RegisterObjectBound(pBindCtx, NULL); - ok_ole_success(hr, "IBindCtx_RegisterObjectBound(NULL)"); - - hr = IBindCtx_RevokeObjectBound(pBindCtx, NULL); - ok(hr == E_INVALIDARG, "IBindCtx_RevokeObjectBound(NULL) should have return E_INVALIDARG instead of 0x%08x\n", hr); - - unknown2 = HeapAlloc(GetProcessHeap(), 0, sizeof(*unknown)); - unknown2->lpVtbl = &HeapUnknown_Vtbl; - unknown2->refs = 1; - hr = IBindCtx_RegisterObjectBound(pBindCtx, (IUnknown *)&unknown2->lpVtbl); - ok_ole_success(hr, "IBindCtx_RegisterObjectBound"); - - hr = IBindCtx_RevokeObjectBound(pBindCtx, (IUnknown *)&unknown2->lpVtbl); - ok_ole_success(hr, "IBindCtx_RevokeObjectBound"); - - hr = IBindCtx_RevokeObjectBound(pBindCtx, (IUnknown *)&unknown2->lpVtbl); - ok(hr == MK_E_NOTBOUND, "IBindCtx_RevokeObjectBound with not bound object should have returned MK_E_NOTBOUND instead of 0x%08x\n", hr); - - IBindCtx_Release(pBindCtx); - - refs = IUnknown_Release((IUnknown *)&unknown->lpVtbl); - ok(!refs, "object param should have been destroyed, instead of having %d refs\n", refs); - - refs = IUnknown_Release((IUnknown *)&unknown2->lpVtbl); - ok(!refs, "bound object should have been destroyed, instead of having %d refs\n", refs); -} - -START_TEST(moniker) -{ - CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - test_ROT(); - test_ROT_multiple_entries(); - test_MkParseDisplayName(); - test_class_moniker(); - test_file_monikers(); - test_item_moniker(); - test_anti_moniker(); - test_generic_composite_moniker(); - test_pointer_moniker(); - - /* FIXME: test moniker creation funcs and parsing other moniker formats */ - - test_bind_context(); - - CoUninitialize(); -} diff --git a/rostests/winetests/ole32/ole2.c b/rostests/winetests/ole32/ole2.c deleted file mode 100644 index cc3476d60f7..00000000000 --- a/rostests/winetests/ole32/ole2.c +++ /dev/null @@ -1,1554 +0,0 @@ -/* - * Object Linking and Embedding Tests - * - * 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 - */ - -#define COBJMACROS -#define CONST_VTABLE - -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" -#include "shlguid.h" - -#include "wine/test.h" - -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) - -static IPersistStorage OleObjectPersistStg; -static IOleCache *cache; -static IRunnableObject *runnable; - -static const CLSID CLSID_WineTest = -{ /* 9474ba1a-258b-490b-bc13-516e9239ace0 */ - 0x9474ba1a, - 0x258b, - 0x490b, - {0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xe0} -}; - -static char const * const *expected_method_list; - -BOOL g_showRunnable = TRUE; -BOOL g_isRunning = TRUE; - -#define CHECK_EXPECTED_METHOD(method_name) \ - do { \ - trace("%s\n", method_name); \ - ok(*expected_method_list != NULL, "Extra method %s called\n", method_name); \ - if (*expected_method_list) \ - { \ - ok(!strcmp(*expected_method_list, method_name), "Expected %s to be called instead of %s\n", \ - *expected_method_list, method_name); \ - expected_method_list++; \ - } \ - } while(0) - -static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, void **ppv) -{ - CHECK_EXPECTED_METHOD("OleObject_QueryInterface"); - - *ppv = NULL; - - if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IOleObject)) - *ppv = (void *)iface; - else if (IsEqualIID(riid, &IID_IPersistStorage)) - *ppv = &OleObjectPersistStg; - else if (IsEqualIID(riid, &IID_IOleCache)) - *ppv = cache; - else if (IsEqualIID(riid, &IID_IRunnableObject) && g_showRunnable) - *ppv = runnable; - - if(*ppv) { - IUnknown_AddRef((IUnknown*)*ppv); - return S_OK; - } - - trace("OleObject_QueryInterface: returning E_NOINTERFACE\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI OleObject_AddRef(IOleObject *iface) -{ - CHECK_EXPECTED_METHOD("OleObject_AddRef"); - return 2; -} - -static ULONG WINAPI OleObject_Release(IOleObject *iface) -{ - CHECK_EXPECTED_METHOD("OleObject_Release"); - return 1; -} - -static HRESULT WINAPI OleObject_SetClientSite - ( - IOleObject *iface, - IOleClientSite *pClientSite - ) -{ - CHECK_EXPECTED_METHOD("OleObject_SetClientSite"); - return S_OK; -} - -static HRESULT WINAPI OleObject_GetClientSite - ( - IOleObject *iface, - IOleClientSite **ppClientSite - ) -{ - CHECK_EXPECTED_METHOD("OleObject_GetClientSite"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObject_SetHostNames - ( - IOleObject *iface, - LPCOLESTR szContainerApp, - LPCOLESTR szContainerObj - ) -{ - CHECK_EXPECTED_METHOD("OleObject_SetHostNames"); - return S_OK; -} - -static HRESULT WINAPI OleObject_Close - ( - IOleObject *iface, - DWORD dwSaveOption - ) -{ - CHECK_EXPECTED_METHOD("OleObject_Close"); - return S_OK; -} - -static HRESULT WINAPI OleObject_SetMoniker - ( - IOleObject *iface, - DWORD dwWhichMoniker, - IMoniker *pmk - ) -{ - CHECK_EXPECTED_METHOD("OleObject_SetMoniker"); - return S_OK; -} - -static HRESULT WINAPI OleObject_GetMoniker - ( - IOleObject *iface, - DWORD dwAssign, - DWORD dwWhichMoniker, - IMoniker **ppmk - ) -{ - CHECK_EXPECTED_METHOD("OleObject_GetMoniker"); - return S_OK; -} - -static HRESULT WINAPI OleObject_InitFromData - ( - IOleObject *iface, - IDataObject *pDataObject, - BOOL fCreation, - DWORD dwReserved - ) -{ - CHECK_EXPECTED_METHOD("OleObject_InitFromData"); - return S_OK; -} - -static HRESULT WINAPI OleObject_GetClipboardData - ( - IOleObject *iface, - DWORD dwReserved, - IDataObject **ppDataObject - ) -{ - CHECK_EXPECTED_METHOD("OleObject_GetClipboardData"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObject_DoVerb - ( - IOleObject *iface, - LONG iVerb, - LPMSG lpmsg, - IOleClientSite *pActiveSite, - LONG lindex, - HWND hwndParent, - LPCRECT lprcPosRect - ) -{ - CHECK_EXPECTED_METHOD("OleObject_DoVerb"); - return S_OK; -} - -static HRESULT WINAPI OleObject_EnumVerbs - ( - IOleObject *iface, - IEnumOLEVERB **ppEnumOleVerb - ) -{ - CHECK_EXPECTED_METHOD("OleObject_EnumVerbs"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObject_Update - ( - IOleObject *iface - ) -{ - CHECK_EXPECTED_METHOD("OleObject_Update"); - return S_OK; -} - -static HRESULT WINAPI OleObject_IsUpToDate - ( - IOleObject *iface - ) -{ - CHECK_EXPECTED_METHOD("OleObject_IsUpToDate"); - return S_OK; -} - -static HRESULT WINAPI OleObject_GetUserClassID -( - IOleObject *iface, - CLSID *pClsid -) -{ - CHECK_EXPECTED_METHOD("OleObject_GetUserClassID"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObject_GetUserType -( - IOleObject *iface, - DWORD dwFormOfType, - LPOLESTR *pszUserType -) -{ - CHECK_EXPECTED_METHOD("OleObject_GetUserType"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObject_SetExtent -( - IOleObject *iface, - DWORD dwDrawAspect, - SIZEL *psizel -) -{ - CHECK_EXPECTED_METHOD("OleObject_SetExtent"); - return S_OK; -} - -static HRESULT WINAPI OleObject_GetExtent -( - IOleObject *iface, - DWORD dwDrawAspect, - SIZEL *psizel -) -{ - CHECK_EXPECTED_METHOD("OleObject_GetExtent"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObject_Advise -( - IOleObject *iface, - IAdviseSink *pAdvSink, - DWORD *pdwConnection -) -{ - CHECK_EXPECTED_METHOD("OleObject_Advise"); - return S_OK; -} - -static HRESULT WINAPI OleObject_Unadvise -( - IOleObject *iface, - DWORD dwConnection -) -{ - CHECK_EXPECTED_METHOD("OleObject_Unadvise"); - return S_OK; -} - -static HRESULT WINAPI OleObject_EnumAdvise -( - IOleObject *iface, - IEnumSTATDATA **ppenumAdvise -) -{ - CHECK_EXPECTED_METHOD("OleObject_EnumAdvise"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObject_GetMiscStatus -( - IOleObject *iface, - DWORD dwAspect, - DWORD *pdwStatus -) -{ - CHECK_EXPECTED_METHOD("OleObject_GetMiscStatus"); - *pdwStatus = DVASPECT_CONTENT; - return S_OK; -} - -static HRESULT WINAPI OleObject_SetColorScheme -( - IOleObject *iface, - LOGPALETTE *pLogpal -) -{ - CHECK_EXPECTED_METHOD("OleObject_SetColorScheme"); - return E_NOTIMPL; -} - -static const IOleObjectVtbl OleObjectVtbl = -{ - OleObject_QueryInterface, - OleObject_AddRef, - OleObject_Release, - OleObject_SetClientSite, - OleObject_GetClientSite, - OleObject_SetHostNames, - OleObject_Close, - OleObject_SetMoniker, - OleObject_GetMoniker, - OleObject_InitFromData, - OleObject_GetClipboardData, - OleObject_DoVerb, - OleObject_EnumVerbs, - OleObject_Update, - OleObject_IsUpToDate, - OleObject_GetUserClassID, - OleObject_GetUserType, - OleObject_SetExtent, - OleObject_GetExtent, - OleObject_Advise, - OleObject_Unadvise, - OleObject_EnumAdvise, - OleObject_GetMiscStatus, - OleObject_SetColorScheme -}; - -static IOleObject OleObject = { &OleObjectVtbl }; - -static HRESULT WINAPI OleObjectPersistStg_QueryInterface(IPersistStorage *iface, REFIID riid, void **ppv) -{ - trace("OleObjectPersistStg_QueryInterface\n"); - return IUnknown_QueryInterface((IUnknown *)&OleObject, riid, ppv); -} - -static ULONG WINAPI OleObjectPersistStg_AddRef(IPersistStorage *iface) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_AddRef"); - return 2; -} - -static ULONG WINAPI OleObjectPersistStg_Release(IPersistStorage *iface) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_Release"); - return 1; -} - -static HRESULT WINAPI OleObjectPersistStg_GetClassId(IPersistStorage *iface, CLSID *clsid) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_GetClassId"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObjectPersistStg_IsDirty -( - IPersistStorage *iface -) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_IsDirty"); - return S_OK; -} - -static HRESULT WINAPI OleObjectPersistStg_InitNew -( - IPersistStorage *iface, - IStorage *pStg -) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_InitNew"); - return S_OK; -} - -static HRESULT WINAPI OleObjectPersistStg_Load -( - IPersistStorage *iface, - IStorage *pStg -) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_Load"); - return S_OK; -} - -static HRESULT WINAPI OleObjectPersistStg_Save -( - IPersistStorage *iface, - IStorage *pStgSave, - BOOL fSameAsLoad -) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_Save"); - return S_OK; -} - -static HRESULT WINAPI OleObjectPersistStg_SaveCompleted -( - IPersistStorage *iface, - IStorage *pStgNew -) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_SaveCompleted"); - return S_OK; -} - -static HRESULT WINAPI OleObjectPersistStg_HandsOffStorage -( - IPersistStorage *iface -) -{ - CHECK_EXPECTED_METHOD("OleObjectPersistStg_HandsOffStorage"); - return S_OK; -} - -static const IPersistStorageVtbl OleObjectPersistStgVtbl = -{ - OleObjectPersistStg_QueryInterface, - OleObjectPersistStg_AddRef, - OleObjectPersistStg_Release, - OleObjectPersistStg_GetClassId, - OleObjectPersistStg_IsDirty, - OleObjectPersistStg_InitNew, - OleObjectPersistStg_Load, - OleObjectPersistStg_Save, - OleObjectPersistStg_SaveCompleted, - OleObjectPersistStg_HandsOffStorage -}; - -static IPersistStorage OleObjectPersistStg = { &OleObjectPersistStgVtbl }; - -static HRESULT WINAPI OleObjectCache_QueryInterface(IOleCache *iface, REFIID riid, void **ppv) -{ - return IUnknown_QueryInterface((IUnknown *)&OleObject, riid, ppv); -} - -static ULONG WINAPI OleObjectCache_AddRef(IOleCache *iface) -{ - CHECK_EXPECTED_METHOD("OleObjectCache_AddRef"); - return 2; -} - -static ULONG WINAPI OleObjectCache_Release(IOleCache *iface) -{ - CHECK_EXPECTED_METHOD("OleObjectCache_Release"); - return 1; -} - -static HRESULT WINAPI OleObjectCache_Cache -( - IOleCache *iface, - FORMATETC *pformatetc, - DWORD advf, - DWORD *pdwConnection -) -{ - CHECK_EXPECTED_METHOD("OleObjectCache_Cache"); - return S_OK; -} - -static HRESULT WINAPI OleObjectCache_Uncache -( - IOleCache *iface, - DWORD dwConnection -) -{ - CHECK_EXPECTED_METHOD("OleObjectCache_Uncache"); - return S_OK; -} - -static HRESULT WINAPI OleObjectCache_EnumCache -( - IOleCache *iface, - IEnumSTATDATA **ppenumSTATDATA -) -{ - CHECK_EXPECTED_METHOD("OleObjectCache_EnumCache"); - return S_OK; -} - - -static HRESULT WINAPI OleObjectCache_InitCache -( - IOleCache *iface, - IDataObject *pDataObject -) -{ - CHECK_EXPECTED_METHOD("OleObjectCache_InitCache"); - return S_OK; -} - - -static HRESULT WINAPI OleObjectCache_SetData -( - IOleCache *iface, - FORMATETC *pformatetc, - STGMEDIUM *pmedium, - BOOL fRelease -) -{ - CHECK_EXPECTED_METHOD("OleObjectCache_SetData"); - return S_OK; -} - - -static const IOleCacheVtbl OleObjectCacheVtbl = -{ - OleObjectCache_QueryInterface, - OleObjectCache_AddRef, - OleObjectCache_Release, - OleObjectCache_Cache, - OleObjectCache_Uncache, - OleObjectCache_EnumCache, - OleObjectCache_InitCache, - OleObjectCache_SetData -}; - -static IOleCache OleObjectCache = { &OleObjectCacheVtbl }; - -static HRESULT WINAPI OleObjectCF_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IClassFactory)) - { - *ppv = iface; - IUnknown_AddRef(iface); - return S_OK; - } - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI OleObjectCF_AddRef(IClassFactory *iface) -{ - return 2; -} - -static ULONG WINAPI OleObjectCF_Release(IClassFactory *iface) -{ - return 1; -} - -static HRESULT WINAPI OleObjectCF_CreateInstance(IClassFactory *iface, IUnknown *punkOuter, REFIID riid, void **ppv) -{ - return IUnknown_QueryInterface((IUnknown *)&OleObject, riid, ppv); -} - -static HRESULT WINAPI OleObjectCF_LockServer(IClassFactory *iface, BOOL lock) -{ - return S_OK; -} - -static const IClassFactoryVtbl OleObjectCFVtbl = -{ - OleObjectCF_QueryInterface, - OleObjectCF_AddRef, - OleObjectCF_Release, - OleObjectCF_CreateInstance, - OleObjectCF_LockServer -}; - -static IClassFactory OleObjectCF = { &OleObjectCFVtbl }; - -static HRESULT WINAPI OleObjectRunnable_QueryInterface(IRunnableObject *iface, REFIID riid, void **ppv) -{ - return IUnknown_QueryInterface((IUnknown *)&OleObject, riid, ppv); -} - -static ULONG WINAPI OleObjectRunnable_AddRef(IRunnableObject *iface) -{ - CHECK_EXPECTED_METHOD("OleObjectRunnable_AddRef"); - return 2; -} - -static ULONG WINAPI OleObjectRunnable_Release(IRunnableObject *iface) -{ - CHECK_EXPECTED_METHOD("OleObjectRunnable_Release"); - return 1; -} - -static HRESULT WINAPI OleObjectRunnable_GetRunningClass( - IRunnableObject *iface, - LPCLSID lpClsid) -{ - CHECK_EXPECTED_METHOD("OleObjectRunnable_GetRunningClass"); - return E_NOTIMPL; -} - -static HRESULT WINAPI OleObjectRunnable_Run( - IRunnableObject *iface, - LPBINDCTX pbc) -{ - CHECK_EXPECTED_METHOD("OleObjectRunnable_Run"); - return S_OK; -} - -static BOOL WINAPI OleObjectRunnable_IsRunning(IRunnableObject *iface) -{ - CHECK_EXPECTED_METHOD("OleObjectRunnable_IsRunning"); - return g_isRunning; -} - -static HRESULT WINAPI OleObjectRunnable_LockRunning( - IRunnableObject *iface, - BOOL fLock, - BOOL fLastUnlockCloses) -{ - CHECK_EXPECTED_METHOD("OleObjectRunnable_LockRunning"); - return S_OK; -} - -static HRESULT WINAPI OleObjectRunnable_SetContainedObject( - IRunnableObject *iface, - BOOL fContained) -{ - CHECK_EXPECTED_METHOD("OleObjectRunnable_SetContainedObject"); - return S_OK; -} - -static const IRunnableObjectVtbl OleObjectRunnableVtbl = -{ - OleObjectRunnable_QueryInterface, - OleObjectRunnable_AddRef, - OleObjectRunnable_Release, - OleObjectRunnable_GetRunningClass, - OleObjectRunnable_Run, - OleObjectRunnable_IsRunning, - OleObjectRunnable_LockRunning, - OleObjectRunnable_SetContainedObject -}; - -static IRunnableObject OleObjectRunnable = { &OleObjectRunnableVtbl }; - -static const CLSID CLSID_Equation3 = {0x0002CE02, 0x0000, 0x0000, {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} }; - -static void test_OleCreate(IStorage *pStorage) -{ - HRESULT hr; - IOleObject *pObject; - FORMATETC formatetc; - static const char *methods_olerender_none[] = - { - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_QueryInterface", - "OleObjectPersistStg_AddRef", - "OleObjectPersistStg_InitNew", - "OleObjectPersistStg_Release", - "OleObject_Release", - NULL - }; - static const char *methods_olerender_draw[] = - { - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_QueryInterface", - "OleObjectPersistStg_AddRef", - "OleObjectPersistStg_InitNew", - "OleObjectPersistStg_Release", - "OleObject_QueryInterface", - "OleObjectRunnable_AddRef", - "OleObjectRunnable_Run", - "OleObjectRunnable_Release", - "OleObject_QueryInterface", - "OleObjectCache_AddRef", - "OleObjectCache_Cache", - "OleObjectCache_Release", - "OleObject_Release", - NULL - }; - static const char *methods_olerender_format[] = - { - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_GetMiscStatus", - "OleObject_QueryInterface", - "OleObjectPersistStg_AddRef", - "OleObjectPersistStg_InitNew", - "OleObjectPersistStg_Release", - "OleObject_SetClientSite", - "OleObject_Release", - "OleObject_QueryInterface", - "OleObjectRunnable_AddRef", - "OleObjectRunnable_Run", - "OleObjectRunnable_Release", - "OleObject_QueryInterface", - "OleObjectCache_AddRef", - "OleObjectCache_Cache", - "OleObjectCache_Release", - "OleObject_Release", - NULL - }; - static const char *methods_olerender_asis[] = - { - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_QueryInterface", - "OleObjectPersistStg_AddRef", - "OleObjectPersistStg_InitNew", - "OleObjectPersistStg_Release", - "OleObject_Release", - NULL - }; - static const char *methods_olerender_draw_no_runnable[] = - { - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_QueryInterface", - "OleObjectPersistStg_AddRef", - "OleObjectPersistStg_InitNew", - "OleObjectPersistStg_Release", - "OleObject_QueryInterface", - "OleObject_QueryInterface", - "OleObjectCache_AddRef", - "OleObjectCache_Cache", - "OleObjectCache_Release", - "OleObject_Release", - NULL - }; - static const char *methods_olerender_draw_no_cache[] = - { - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_QueryInterface", - "OleObjectPersistStg_AddRef", - "OleObjectPersistStg_InitNew", - "OleObjectPersistStg_Release", - "OleObject_QueryInterface", - "OleObjectRunnable_AddRef", - "OleObjectRunnable_Run", - "OleObjectRunnable_Release", - "OleObject_QueryInterface", - "OleObject_Release", - NULL - }; - - runnable = &OleObjectRunnable; - cache = &OleObjectCache; - expected_method_list = methods_olerender_none; - trace("OleCreate with OLERENDER_NONE:\n"); - hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_NONE, NULL, NULL, pStorage, (void **)&pObject); - ok_ole_success(hr, "OleCreate"); - IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - expected_method_list = methods_olerender_draw; - trace("OleCreate with OLERENDER_DRAW:\n"); - hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject); - ok_ole_success(hr, "OleCreate"); - IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - formatetc.cfFormat = CF_TEXT; - formatetc.ptd = NULL; - formatetc.dwAspect = DVASPECT_CONTENT; - formatetc.lindex = -1; - formatetc.tymed = TYMED_HGLOBAL; - expected_method_list = methods_olerender_format; - trace("OleCreate with OLERENDER_FORMAT:\n"); - hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_FORMAT, &formatetc, (IOleClientSite *)0xdeadbeef, pStorage, (void **)&pObject); - ok(hr == S_OK || - broken(hr == E_INVALIDARG), /* win2k */ - "OleCreate failed with error 0x%08x\n", hr); - if (pObject) - { - IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - } - - expected_method_list = methods_olerender_asis; - trace("OleCreate with OLERENDER_ASIS:\n"); - hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_ASIS, NULL, NULL, pStorage, (void **)&pObject); - ok_ole_success(hr, "OleCreate"); - IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - runnable = NULL; - expected_method_list = methods_olerender_draw_no_runnable; - trace("OleCreate with OLERENDER_DRAW (no IOlObjectRunnable):\n"); - hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject); - ok_ole_success(hr, "OleCreate"); - IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - runnable = &OleObjectRunnable; - cache = NULL; - expected_method_list = methods_olerender_draw_no_cache; - trace("OleCreate with OLERENDER_DRAW (no IOlObjectRunnable):\n"); - hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject); - ok_ole_success(hr, "OleCreate"); - IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - trace("end\n"); -} - -static void test_OleLoad(IStorage *pStorage) -{ - HRESULT hr; - IOleObject *pObject; - - static const char *methods_oleload[] = - { - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_QueryInterface", - "OleObject_AddRef", - "OleObject_GetMiscStatus", - "OleObject_QueryInterface", - "OleObjectPersistStg_AddRef", - "OleObjectPersistStg_Load", - "OleObjectPersistStg_Release", - "OleObject_SetClientSite", - "OleObject_Release", - "OleObject_QueryInterface", - "OleObject_Release", - NULL - }; - - expected_method_list = methods_oleload; - trace("OleLoad:\n"); - hr = OleLoad(pStorage, &IID_IOleObject, (IOleClientSite *)0xdeadbeef, (void **)&pObject); - ok(hr == S_OK || - broken(hr == E_INVALIDARG), /* win98 and win2k */ - "OleLoad failed with error 0x%08x\n", hr); - if (pObject) - { - IOleObject_Release(pObject); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - } -} - -static BOOL STDMETHODCALLTYPE draw_continue(ULONG_PTR param) -{ - CHECK_EXPECTED_METHOD("draw_continue"); - return TRUE; -} - -static HRESULT WINAPI AdviseSink_QueryInterface(IAdviseSink *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IAdviseSink) || IsEqualIID(riid, &IID_IUnknown)) - { - *ppv = iface; - IUnknown_AddRef(iface); - return S_OK; - } - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI AdviseSink_AddRef(IAdviseSink *iface) -{ - return 2; -} - -static ULONG WINAPI AdviseSink_Release(IAdviseSink *iface) -{ - return 1; -} - - -static void WINAPI AdviseSink_OnDataChange( - IAdviseSink *iface, - FORMATETC *pFormatetc, - STGMEDIUM *pStgmed) -{ - CHECK_EXPECTED_METHOD("AdviseSink_OnDataChange"); -} - -static void WINAPI AdviseSink_OnViewChange( - IAdviseSink *iface, - DWORD dwAspect, - LONG lindex) -{ - CHECK_EXPECTED_METHOD("AdviseSink_OnViewChange"); -} - -static void WINAPI AdviseSink_OnRename( - IAdviseSink *iface, - IMoniker *pmk) -{ - CHECK_EXPECTED_METHOD("AdviseSink_OnRename"); -} - -static void WINAPI AdviseSink_OnSave(IAdviseSink *iface) -{ - CHECK_EXPECTED_METHOD("AdviseSink_OnSave"); -} - -static void WINAPI AdviseSink_OnClose(IAdviseSink *iface) -{ - CHECK_EXPECTED_METHOD("AdviseSink_OnClose"); -} - -static const IAdviseSinkVtbl AdviseSinkVtbl = -{ - AdviseSink_QueryInterface, - AdviseSink_AddRef, - AdviseSink_Release, - AdviseSink_OnDataChange, - AdviseSink_OnViewChange, - AdviseSink_OnRename, - AdviseSink_OnSave, - AdviseSink_OnClose -}; - -static IAdviseSink AdviseSink = { &AdviseSinkVtbl }; - -static HRESULT WINAPI DataObject_QueryInterface( - IDataObject* iface, - REFIID riid, - void** ppvObject) -{ - if (IsEqualIID(riid, &IID_IDataObject) || IsEqualIID(riid, &IID_IUnknown)) - { - *ppvObject = iface; - return S_OK; - } - *ppvObject = NULL; - return S_OK; -} - -static ULONG WINAPI DataObject_AddRef( - IDataObject* iface) -{ - return 2; -} - -static ULONG WINAPI DataObject_Release( - IDataObject* iface) -{ - return 1; -} - -static HRESULT WINAPI DataObject_GetData( - IDataObject* iface, - LPFORMATETC pformatetcIn, - STGMEDIUM* pmedium) -{ - CHECK_EXPECTED_METHOD("DataObject_GetData"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObject_GetDataHere( - IDataObject* iface, - LPFORMATETC pformatetc, - STGMEDIUM* pmedium) -{ - CHECK_EXPECTED_METHOD("DataObject_GetDataHere"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObject_QueryGetData( - IDataObject* iface, - LPFORMATETC pformatetc) -{ - CHECK_EXPECTED_METHOD("DataObject_QueryGetData"); - return S_OK; -} - -static HRESULT WINAPI DataObject_GetCanonicalFormatEtc( - IDataObject* iface, - LPFORMATETC pformatectIn, - LPFORMATETC pformatetcOut) -{ - CHECK_EXPECTED_METHOD("DataObject_GetCanonicalFormatEtc"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObject_SetData( - IDataObject* iface, - LPFORMATETC pformatetc, - STGMEDIUM* pmedium, - BOOL fRelease) -{ - CHECK_EXPECTED_METHOD("DataObject_SetData"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObject_EnumFormatEtc( - IDataObject* iface, - DWORD dwDirection, - IEnumFORMATETC** ppenumFormatEtc) -{ - CHECK_EXPECTED_METHOD("DataObject_EnumFormatEtc"); - return E_NOTIMPL; -} - -static HRESULT WINAPI DataObject_DAdvise( - IDataObject* iface, - FORMATETC* pformatetc, - DWORD advf, - IAdviseSink* pAdvSink, - DWORD* pdwConnection) -{ - CHECK_EXPECTED_METHOD("DataObject_DAdvise"); - *pdwConnection = 1; - return S_OK; -} - -static HRESULT WINAPI DataObject_DUnadvise( - IDataObject* iface, - DWORD dwConnection) -{ - CHECK_EXPECTED_METHOD("DataObject_DUnadvise"); - return S_OK; -} - -static HRESULT WINAPI DataObject_EnumDAdvise( - IDataObject* iface, - IEnumSTATDATA** ppenumAdvise) -{ - CHECK_EXPECTED_METHOD("DataObject_EnumDAdvise"); - return OLE_E_ADVISENOTSUPPORTED; -} - -static IDataObjectVtbl DataObjectVtbl = -{ - DataObject_QueryInterface, - DataObject_AddRef, - DataObject_Release, - DataObject_GetData, - DataObject_GetDataHere, - DataObject_QueryGetData, - DataObject_GetCanonicalFormatEtc, - DataObject_SetData, - DataObject_EnumFormatEtc, - DataObject_DAdvise, - DataObject_DUnadvise, - DataObject_EnumDAdvise -}; - -static IDataObject DataObject = { &DataObjectVtbl }; - -static void test_data_cache(void) -{ - HRESULT hr; - IOleCache2 *pOleCache; - IStorage *pStorage; - IPersistStorage *pPS; - IViewObject *pViewObject; - IOleCacheControl *pOleCacheControl; - FORMATETC fmtetc; - STGMEDIUM stgmedium; - DWORD dwConnection; - DWORD dwFreeze; - RECTL rcBounds; - HDC hdcMem; - CLSID clsid; - char szSystemDir[MAX_PATH]; - WCHAR wszPath[MAX_PATH]; - static const WCHAR wszShell32[] = {'\\','s','h','e','l','l','3','2','.','d','l','l',0}; - - static const char *methods_cacheinitnew[] = - { - "AdviseSink_OnViewChange", - "AdviseSink_OnViewChange", - "draw_continue", - "DataObject_DAdvise", - "DataObject_DAdvise", - "DataObject_DUnadvise", - "DataObject_DUnadvise", - NULL - }; - static const char *methods_cacheload[] = - { - "AdviseSink_OnViewChange", - "draw_continue", - "draw_continue", - "draw_continue", - "DataObject_GetData", - "DataObject_GetData", - "DataObject_GetData", - NULL - }; - - GetSystemDirectory(szSystemDir, sizeof(szSystemDir)/sizeof(szSystemDir[0])); - - expected_method_list = methods_cacheinitnew; - - fmtetc.cfFormat = CF_METAFILEPICT; - fmtetc.dwAspect = DVASPECT_ICON; - fmtetc.lindex = -1; - fmtetc.ptd = NULL; - fmtetc.tymed = TYMED_MFPICT; - - hr = StgCreateDocfile(NULL, STGM_READWRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_DELETEONRELEASE, 0, &pStorage); - ok_ole_success(hr, "StgCreateDocfile"); - - /* Test with new data */ - - hr = CreateDataCache(NULL, &CLSID_NULL, &IID_IOleCache2, (LPVOID *)&pOleCache); - ok_ole_success(hr, "CreateDataCache"); - - hr = IOleCache_QueryInterface(pOleCache, &IID_IPersistStorage, (LPVOID *)&pPS); - ok_ole_success(hr, "IOleCache_QueryInterface(IID_IPersistStorage)"); - hr = IOleCache_QueryInterface(pOleCache, &IID_IViewObject, (LPVOID *)&pViewObject); - ok_ole_success(hr, "IOleCache_QueryInterface(IID_IViewObject)"); - hr = IOleCache_QueryInterface(pOleCache, &IID_IOleCacheControl, (LPVOID *)&pOleCacheControl); - ok_ole_success(hr, "IOleCache_QueryInterface(IID_IOleCacheControl)"); - - hr = IViewObject_SetAdvise(pViewObject, DVASPECT_ICON, ADVF_PRIMEFIRST, &AdviseSink); - ok_ole_success(hr, "IViewObject_SetAdvise"); - - hr = IPersistStorage_InitNew(pPS, pStorage); - ok_ole_success(hr, "IPersistStorage_InitNew"); - - hr = IPersistStorage_IsDirty(pPS); - ok_ole_success(hr, "IPersistStorage_IsDirty"); - - hr = IPersistStorage_GetClassID(pPS, &clsid); - ok_ole_success(hr, "IPersistStorage_GetClassID"); - ok(IsEqualCLSID(&clsid, &IID_NULL), "clsid should be blank\n"); - - hr = IOleCache_Uncache(pOleCache, 0xdeadbeef); - ok(hr == OLE_E_NOCONNECTION, "IOleCache_Uncache with invalid value should return OLE_E_NOCONNECTION instead of 0x%x\n", hr); - - /* Both tests crash on NT4 and below. StgCreatePropSetStg is only available on w2k and above. */ - if (GetProcAddress(GetModuleHandleA("ole32.dll"), "StgCreatePropSetStg")) - { - hr = IOleCache_Cache(pOleCache, NULL, 0, &dwConnection); - ok(hr == E_INVALIDARG, "IOleCache_Cache with NULL fmtetc should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = IOleCache_Cache(pOleCache, NULL, 0, NULL); - ok(hr == E_INVALIDARG, "IOleCache_Cache with NULL pdwConnection should have returned E_INVALIDARG instead of 0x%08x\n", hr); - } - else - { - skip("tests with NULL parameters will crash on NT4 and below\n"); - } - - for (fmtetc.cfFormat = CF_TEXT; fmtetc.cfFormat < CF_MAX; fmtetc.cfFormat++) - { - int i; - fmtetc.dwAspect = DVASPECT_THUMBNAIL; - for (i = 0; i < 7; i++) - { - fmtetc.tymed = 1 << i; - hr = IOleCache_Cache(pOleCache, &fmtetc, 0, &dwConnection); - if ((fmtetc.cfFormat == CF_METAFILEPICT && fmtetc.tymed == TYMED_MFPICT) || - (fmtetc.cfFormat == CF_BITMAP && fmtetc.tymed == TYMED_GDI) || - (fmtetc.cfFormat == CF_DIB && fmtetc.tymed == TYMED_HGLOBAL) || - (fmtetc.cfFormat == CF_ENHMETAFILE && fmtetc.tymed == TYMED_ENHMF)) - ok(hr == S_OK, "IOleCache_Cache cfFormat = %d, tymed = %d should have returned S_OK instead of 0x%08x\n", - fmtetc.cfFormat, fmtetc.tymed, hr); - else if (fmtetc.tymed == TYMED_HGLOBAL) - ok(hr == CACHE_S_FORMATETC_NOTSUPPORTED, - "IOleCache_Cache cfFormat = %d, tymed = %d should have returned CACHE_S_FORMATETC_NOTSUPPORTED instead of 0x%08x\n", - fmtetc.cfFormat, fmtetc.tymed, hr); - else - ok(hr == DV_E_TYMED, "IOleCache_Cache cfFormat = %d, tymed = %d should have returned DV_E_TYMED instead of 0x%08x\n", - fmtetc.cfFormat, fmtetc.tymed, hr); - if (SUCCEEDED(hr)) - { - hr = IOleCache_Uncache(pOleCache, dwConnection); - ok_ole_success(hr, "IOleCache_Uncache"); - } - } - } - - fmtetc.cfFormat = CF_BITMAP; - fmtetc.dwAspect = DVASPECT_THUMBNAIL; - fmtetc.tymed = TYMED_GDI; - hr = IOleCache_Cache(pOleCache, &fmtetc, 0, &dwConnection); - ok_ole_success(hr, "IOleCache_Cache"); - - fmtetc.cfFormat = 0; - fmtetc.dwAspect = DVASPECT_ICON; - fmtetc.tymed = TYMED_MFPICT; - hr = IOleCache_Cache(pOleCache, &fmtetc, 0, &dwConnection); - ok_ole_success(hr, "IOleCache_Cache"); - - MultiByteToWideChar(CP_ACP, 0, szSystemDir, -1, wszPath, sizeof(wszPath)/sizeof(wszPath[0])); - memcpy(wszPath+lstrlenW(wszPath), wszShell32, sizeof(wszShell32)); - - fmtetc.cfFormat = CF_METAFILEPICT; - stgmedium.tymed = TYMED_MFPICT; - U(stgmedium).hMetaFilePict = OleMetafilePictFromIconAndLabel( - LoadIcon(NULL, IDI_APPLICATION), wszPath, wszPath, 0); - stgmedium.pUnkForRelease = NULL; - - fmtetc.dwAspect = DVASPECT_CONTENT; - hr = IOleCache_SetData(pOleCache, &fmtetc, &stgmedium, FALSE); - ok(hr == OLE_E_BLANK, "IOleCache_SetData for aspect not in cache should have return OLE_E_BLANK instead of 0x%08x\n", hr); - - fmtetc.dwAspect = DVASPECT_ICON; - hr = IOleCache_SetData(pOleCache, &fmtetc, &stgmedium, FALSE); - ok_ole_success(hr, "IOleCache_SetData"); - - hr = IViewObject_Freeze(pViewObject, DVASPECT_ICON, -1, NULL, &dwFreeze); - todo_wine { - ok_ole_success(hr, "IViewObject_Freeze"); - hr = IViewObject_Freeze(pViewObject, DVASPECT_CONTENT, -1, NULL, &dwFreeze); - ok(hr == OLE_E_BLANK, "IViewObject_Freeze with uncached aspect should have returned OLE_E_BLANK instead of 0x%08x\n", hr); - } - - rcBounds.left = 0; - rcBounds.top = 0; - rcBounds.right = 100; - rcBounds.bottom = 100; - hdcMem = CreateCompatibleDC(NULL); - - hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef); - ok_ole_success(hr, "IViewObject_Draw"); - - hr = IViewObject_Draw(pViewObject, DVASPECT_CONTENT, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef); - ok(hr == OLE_E_BLANK, "IViewObject_Draw with uncached aspect should have returned OLE_E_BLANK instead of 0x%08x\n", hr); - - DeleteDC(hdcMem); - - hr = IOleCacheControl_OnRun(pOleCacheControl, &DataObject); - todo_wine { - ok_ole_success(hr, "IOleCacheControl_OnRun"); - } - - hr = IPersistStorage_Save(pPS, pStorage, TRUE); - ok_ole_success(hr, "IPersistStorage_Save"); - - hr = IPersistStorage_SaveCompleted(pPS, NULL); - ok_ole_success(hr, "IPersistStorage_SaveCompleted"); - - hr = IPersistStorage_IsDirty(pPS); - ok(hr == S_FALSE, "IPersistStorage_IsDirty should have returned S_FALSE instead of 0x%x\n", hr); - - IPersistStorage_Release(pPS); - IViewObject_Release(pViewObject); - IOleCache_Release(pOleCache); - IOleCacheControl_Release(pOleCacheControl); - - todo_wine { - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - } - - /* Test with loaded data */ - trace("Testing loaded data with CreateDataCache:\n"); - expected_method_list = methods_cacheload; - - hr = CreateDataCache(NULL, &CLSID_NULL, &IID_IOleCache2, (LPVOID *)&pOleCache); - ok_ole_success(hr, "CreateDataCache"); - - hr = IOleCache_QueryInterface(pOleCache, &IID_IPersistStorage, (LPVOID *)&pPS); - ok_ole_success(hr, "IOleCache_QueryInterface(IID_IPersistStorage)"); - hr = IOleCache_QueryInterface(pOleCache, &IID_IViewObject, (LPVOID *)&pViewObject); - ok_ole_success(hr, "IOleCache_QueryInterface(IID_IViewObject)"); - - hr = IViewObject_SetAdvise(pViewObject, DVASPECT_ICON, ADVF_PRIMEFIRST, &AdviseSink); - ok_ole_success(hr, "IViewObject_SetAdvise"); - - hr = IPersistStorage_Load(pPS, pStorage); - ok_ole_success(hr, "IPersistStorage_Load"); - - hr = IPersistStorage_IsDirty(pPS); - ok(hr == S_FALSE, "IPersistStorage_IsDirty should have returned S_FALSE instead of 0x%x\n", hr); - - fmtetc.cfFormat = 0; - fmtetc.dwAspect = DVASPECT_ICON; - fmtetc.lindex = -1; - fmtetc.ptd = NULL; - fmtetc.tymed = TYMED_MFPICT; - hr = IOleCache_Cache(pOleCache, &fmtetc, 0, &dwConnection); - ok(hr == CACHE_S_SAMECACHE, "IOleCache_Cache with already loaded data format type should return CACHE_S_SAMECACHE instead of 0x%x\n", hr); - - rcBounds.left = 0; - rcBounds.top = 0; - rcBounds.right = 100; - rcBounds.bottom = 100; - hdcMem = CreateCompatibleDC(NULL); - - hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef); - ok_ole_success(hr, "IViewObject_Draw"); - - hr = IViewObject_Draw(pViewObject, DVASPECT_CONTENT, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef); - ok(hr == OLE_E_BLANK, "IViewObject_Draw with uncached aspect should have returned OLE_E_BLANK instead of 0x%08x\n", hr); - - /* unload the cached storage object, causing it to be reloaded */ - hr = IOleCache2_DiscardCache(pOleCache, DISCARDCACHE_NOSAVE); - ok_ole_success(hr, "IOleCache2_DiscardCache"); - hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef); - ok_ole_success(hr, "IViewObject_Draw"); - - /* unload the cached storage object, but don't allow it to be reloaded */ - hr = IPersistStorage_HandsOffStorage(pPS); - ok_ole_success(hr, "IPersistStorage_HandsOffStorage"); - hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef); - ok_ole_success(hr, "IViewObject_Draw"); - hr = IOleCache2_DiscardCache(pOleCache, DISCARDCACHE_NOSAVE); - ok_ole_success(hr, "IOleCache2_DiscardCache"); - hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef); - ok(hr == OLE_E_BLANK, "IViewObject_Draw with uncached aspect should have returned OLE_E_BLANK instead of 0x%08x\n", hr); - - DeleteDC(hdcMem); - - todo_wine { - hr = IOleCache_InitCache(pOleCache, &DataObject); - ok(hr == CACHE_E_NOCACHE_UPDATED, "IOleCache_InitCache should have returned CACHE_E_NOCACHE_UPDATED instead of 0x%08x\n", hr); - } - - IPersistStorage_Release(pPS); - IViewObject_Release(pViewObject); - IOleCache_Release(pOleCache); - - todo_wine { - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - } - - IStorage_Release(pStorage); - ReleaseStgMedium(&stgmedium); -} - -static void test_default_handler(void) -{ - HRESULT hr; - IOleObject *pObject; - IRunnableObject *pRunnableObject; - IOleClientSite *pClientSite; - IDataObject *pDataObject; - SIZEL sizel; - DWORD dwStatus; - CLSID clsid; - LPOLESTR pszUserType; - LOGPALETTE palette; - DWORD dwAdvConn; - IMoniker *pMoniker; - FORMATETC fmtetc; - IOleInPlaceObject *pInPlaceObj; - IEnumOLEVERB *pEnumVerbs; - static const WCHAR wszUnknown[] = {'U','n','k','n','o','w','n',0}; - static const WCHAR wszHostName[] = {'W','i','n','e',' ','T','e','s','t',' ','P','r','o','g','r','a','m',0}; - static const WCHAR wszDelim[] = {'!',0}; - - hr = CoCreateInstance(&CLSID_WineTest, NULL, CLSCTX_INPROC_HANDLER, &IID_IOleObject, (void **)&pObject); - ok(hr == REGDB_E_CLASSNOTREG, "CoCreateInstance should have failed with REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr); - - hr = OleCreateDefaultHandler(&CLSID_WineTest, NULL, &IID_IOleObject, (void **)&pObject); - ok_ole_success(hr, "OleCreateDefaultHandler"); - - hr = IOleObject_QueryInterface(pObject, &IID_IOleInPlaceObject, (void **)&pInPlaceObj); - ok(hr == E_NOINTERFACE, "IOleObject_QueryInterface(&IID_IOleInPlaceObject) should return E_NOINTERFACE instead of 0x%08x\n", hr); - - hr = IOleObject_Advise(pObject, &AdviseSink, &dwAdvConn); - ok_ole_success(hr, "IOleObject_Advise"); - - hr = IOleObject_Close(pObject, OLECLOSE_NOSAVE); - ok_ole_success(hr, "IOleObject_Close"); - - /* FIXME: test IOleObject_EnumAdvise */ - - hr = IOleObject_EnumVerbs(pObject, &pEnumVerbs); - ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_EnumVerbs should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr); - - hr = IOleObject_GetClientSite(pObject, &pClientSite); - ok_ole_success(hr, "IOleObject_GetClientSite"); - - hr = IOleObject_GetClipboardData(pObject, 0, &pDataObject); - ok(hr == OLE_E_NOTRUNNING, - "IOleObject_GetClipboardData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", - hr); - - hr = IOleObject_GetExtent(pObject, DVASPECT_CONTENT, &sizel); - ok(hr == OLE_E_BLANK, "IOleObject_GetExtent should have returned OLE_E_BLANK instead of 0x%08x\n", - hr); - - hr = IOleObject_GetMiscStatus(pObject, DVASPECT_CONTENT, &dwStatus); - todo_wine - ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_GetMiscStatus should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr); - - hr = IOleObject_GetUserClassID(pObject, &clsid); - ok_ole_success(hr, "IOleObject_GetUserClassID"); - ok(IsEqualCLSID(&clsid, &CLSID_WineTest), "clsid != CLSID_WineTest\n"); - - hr = IOleObject_GetUserType(pObject, USERCLASSTYPE_FULL, &pszUserType); - todo_wine { - ok_ole_success(hr, "IOleObject_GetUserType"); - ok(!lstrcmpW(pszUserType, wszUnknown), "Retrieved user type was wrong\n"); - } - - hr = IOleObject_InitFromData(pObject, NULL, TRUE, 0); - ok(hr == OLE_E_NOTRUNNING, "IOleObject_InitFromData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr); - - hr = IOleObject_IsUpToDate(pObject); - ok(hr == OLE_E_NOTRUNNING, "IOleObject_IsUpToDate should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr); - - palette.palNumEntries = 1; - palette.palVersion = 2; - memset(&palette.palPalEntry[0], 0, sizeof(palette.palPalEntry[0])); - hr = IOleObject_SetColorScheme(pObject, &palette); - ok(hr == OLE_E_NOTRUNNING, "IOleObject_SetColorScheme should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr); - - sizel.cx = sizel.cy = 0; - hr = IOleObject_SetExtent(pObject, DVASPECT_CONTENT, &sizel); - - hr = IOleObject_SetHostNames(pObject, wszHostName, NULL); - ok_ole_success(hr, "IOleObject_SetHostNames"); - - hr = CreateItemMoniker(wszDelim, wszHostName, &pMoniker); - ok_ole_success(hr, "CreateItemMoniker"); - hr = IOleObject_SetMoniker(pObject, OLEWHICHMK_CONTAINER, pMoniker); - ok_ole_success(hr, "IOleObject_SetMoniker"); - IMoniker_Release(pMoniker); - - hr = IOleObject_GetMoniker(pObject, OLEGETMONIKER_ONLYIFTHERE, OLEWHICHMK_CONTAINER, &pMoniker); - ok(hr == E_FAIL, "IOleObject_GetMoniker should have returned E_FAIL instead of 0x%08x\n", hr); - - hr = IOleObject_Update(pObject); - todo_wine - ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_Update should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr); - - hr = IOleObject_QueryInterface(pObject, &IID_IDataObject, (void **)&pDataObject); - ok_ole_success(hr, "IOleObject_QueryInterface"); - - fmtetc.cfFormat = CF_TEXT; - fmtetc.ptd = NULL; - fmtetc.dwAspect = DVASPECT_CONTENT; - fmtetc.lindex = -1; - fmtetc.tymed = TYMED_NULL; - hr = IDataObject_DAdvise(pDataObject, &fmtetc, 0, &AdviseSink, &dwAdvConn); - ok_ole_success(hr, "IDataObject_DAdvise"); - - fmtetc.cfFormat = CF_ENHMETAFILE; - fmtetc.ptd = NULL; - fmtetc.dwAspect = DVASPECT_CONTENT; - fmtetc.lindex = -1; - fmtetc.tymed = TYMED_ENHMF; - hr = IDataObject_DAdvise(pDataObject, &fmtetc, 0, &AdviseSink, &dwAdvConn); - ok_ole_success(hr, "IDataObject_DAdvise"); - - fmtetc.cfFormat = CF_ENHMETAFILE; - fmtetc.ptd = NULL; - fmtetc.dwAspect = DVASPECT_CONTENT; - fmtetc.lindex = -1; - fmtetc.tymed = TYMED_ENHMF; - hr = IDataObject_QueryGetData(pDataObject, &fmtetc); - todo_wine - ok(hr == OLE_E_NOTRUNNING, "IDataObject_QueryGetData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr); - - fmtetc.cfFormat = CF_TEXT; - fmtetc.ptd = NULL; - fmtetc.dwAspect = DVASPECT_CONTENT; - fmtetc.lindex = -1; - fmtetc.tymed = TYMED_NULL; - hr = IDataObject_QueryGetData(pDataObject, &fmtetc); - todo_wine - ok(hr == OLE_E_NOTRUNNING, "IDataObject_QueryGetData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr); - - hr = IOleObject_QueryInterface(pObject, &IID_IRunnableObject, (void **)&pRunnableObject); - ok_ole_success(hr, "IOleObject_QueryInterface"); - - hr = IRunnableObject_SetContainedObject(pRunnableObject, TRUE); - ok_ole_success(hr, "IRunnableObject_SetContainedObject"); - - hr = IRunnableObject_Run(pRunnableObject, NULL); - ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_Run should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr); - - hr = IOleObject_Close(pObject, OLECLOSE_NOSAVE); - ok_ole_success(hr, "IOleObject_Close"); - - IRunnableObject_Release(pRunnableObject); - IOleObject_Release(pObject); -} - -void test_runnable(void) -{ - static const char *methods_query_runnable[] = - { - "OleObject_QueryInterface", - "OleObjectRunnable_AddRef", - "OleObjectRunnable_IsRunning", - "OleObjectRunnable_Release", - NULL - }; - - static const char *methods_no_runnable[] = - { - "OleObject_QueryInterface", - NULL - }; - - IOleObject *object = (IOleObject *)&OleObject; - - expected_method_list = methods_query_runnable; - ok(OleIsRunning(object), "Object should be running\n"); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - g_isRunning = FALSE; - expected_method_list = methods_query_runnable; - ok(OleIsRunning(object) == FALSE, "Object should not be running\n"); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - g_showRunnable = FALSE; /* QueryInterface(IID_IRunnableObject, ...) will fail */ - expected_method_list = methods_no_runnable; - ok(OleIsRunning(object), "Object without IRunnableObject should be running\n"); - ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list); - - g_isRunning = TRUE; - g_showRunnable = TRUE; -} - -START_TEST(ole2) -{ - DWORD dwRegister; - IStorage *pStorage; - STATSTG statstg; - HRESULT hr; - - CoInitialize(NULL); - - hr = CoRegisterClassObject(&CLSID_Equation3, (IUnknown *)&OleObjectCF, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &dwRegister); - ok_ole_success(hr, "CoRegisterClassObject"); - - hr = StgCreateDocfile(NULL, STGM_READWRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_DELETEONRELEASE, 0, &pStorage); - ok_ole_success(hr, "StgCreateDocfile"); - - test_OleCreate(pStorage); - - hr = IStorage_Stat(pStorage, &statstg, STATFLAG_NONAME); - ok_ole_success(hr, "IStorage_Stat"); - ok(IsEqualCLSID(&CLSID_Equation3, &statstg.clsid), "Wrong CLSID in storage\n"); - - test_OleLoad(pStorage); - - IStorage_Release(pStorage); - - hr = CoRevokeClassObject(dwRegister); - ok_ole_success(hr, "CoRevokeClassObject"); - - test_data_cache(); - test_default_handler(); - test_runnable(); - - CoUninitialize(); -} diff --git a/rostests/winetests/ole32/ole32.rbuild b/rostests/winetests/ole32/ole32.rbuild deleted file mode 100644 index 78c763d48fc..00000000000 --- a/rostests/winetests/ole32/ole32.rbuild +++ /dev/null @@ -1,29 +0,0 @@ - - - - - . - clipboard.c - compobj.c - dragdrop.c - errorinfo.c - hglobalstream.c - marshal.c - moniker.c - ole2.c - propvariant.c - stg_prop.c - storage32.c - usrmarshal.c - testlist.c - wine - oleaut32 - ole32 - user32 - gdi32 - advapi32 - kernel32 - uuid - ntdll - - diff --git a/rostests/winetests/ole32/propvariant.c b/rostests/winetests/ole32/propvariant.c deleted file mode 100644 index f1cbc76ecdc..00000000000 --- a/rostests/winetests/ole32/propvariant.c +++ /dev/null @@ -1,242 +0,0 @@ -/* - * PropVariant Tests - * - * 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 "windows.h" - -#include "wine/test.h" - -/* invalid in all versions */ -#define PROP_INV 255 -/* valid in v0 and above (NT4+) */ -#define PROP_V0 0 -/* valid in v1 and above (Win2k+) */ -#define PROP_V1 1 -/* valid in v1a and above (WinXP+) */ -#define PROP_V1A 2 - -struct valid_mapping -{ - BYTE simple; - BYTE with_array; - BYTE with_vector; - BYTE byref; -} valid_types[] = -{ - { PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_EMPTY */ - { PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_NULL */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_I2 */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_I4 */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_R4 */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_R8 */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_CY */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_DATE */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_BSTR */ - { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_DISPATCH */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_ERROR */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_BOOL */ - { PROP_V1 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_VARIANT */ - { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_UNKNOWN */ - { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_DECIMAL */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 15 */ - { PROP_V1 , PROP_V1 , PROP_V1 , PROP_V1 }, /* VT_I1 */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_UI1 */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_UI2 */ - { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_UI4 */ - { PROP_V0 , PROP_V1A, PROP_V0 , PROP_V1A }, /* VT_I8 */ - { PROP_V0 , PROP_V1A, PROP_V0 , PROP_V1A }, /* VT_UI8 */ - { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_INT */ - { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_UINT */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_VOID */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_HRESULT */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_PTR */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_SAFEARRAY */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_CARRAY */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_USERDEFINED */ - { PROP_V0 , PROP_INV, PROP_V0 , PROP_INV }, /* VT_LPSTR */ - { PROP_V0 , PROP_INV, PROP_V0 , PROP_INV }, /* VT_LPWSTR */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 32 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 33 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 34 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 35 */ - { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_RECORD */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_INT_PTR */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_UINT_PTR */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 39 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 40 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 41 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 42 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 43 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 44 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 45 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 46 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 47 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 48 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 49 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 50 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 51 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 52 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 53 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 54 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 55 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 56 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 57 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 58 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 59 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 60 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 61 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 62 */ - { PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 63 */ - { PROP_V0 , PROP_INV, PROP_V0 , PROP_INV }, /* VT_FILETIME */ - { PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_BLOB */ - { PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_STREAM */ - { PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_STORAGE */ - { PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_STREAMED_OBJECT */ - { PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_STORED_OBJECT */ - { PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_BLOB_OBJECT */ - { PROP_V0 , PROP_INV, PROP_V0 , PROP_INV } /* VT_CF */ -}; - -static const char* wine_vtypes[VT_CLSID+1] = -{ - "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" -}; - -static void test_validtypes(void) -{ - PROPVARIANT propvar; - HRESULT hr; - unsigned int i; - BYTE version; - - memset(&propvar, 0, sizeof(propvar)); - - /* detect version */ - propvar.vt = VT_I2 | VT_ARRAY; - hr = PropVariantClear(&propvar); - if (hr == S_OK) - { - propvar.vt = VT_I8 | VT_ARRAY; - hr = PropVariantClear(&propvar); - if (hr == S_OK) - { - version = PROP_V1A; - trace("detected prop variant v1a\n"); - } - else - { - version = PROP_V1; - trace("detected prop variant v1\n"); - } - } - else - { - version = PROP_V0; - trace("detected prop variant v0\n"); - } - - for (i = 0; i < sizeof(valid_types)/sizeof(valid_types[0]); i++) - { - BOOL expected_result; - - propvar.vt = i; - hr = PropVariantClear(&propvar); - expected_result = (valid_types[i].simple <= version ? TRUE : FALSE); - ok(expected_result == !(hr == STG_E_INVALIDPARAMETER), - "PropVariantClear(%s) should have returned 0x%08x, but returned 0x%08x\n", - wine_vtypes[i], - expected_result ? S_OK : STG_E_INVALIDPARAMETER, hr); - - propvar.vt = i | VT_ARRAY; - hr = PropVariantClear(&propvar); - expected_result = (valid_types[i].with_array <= version ? TRUE : FALSE); - ok(expected_result == !(hr == STG_E_INVALIDPARAMETER), - "PropVariantClear(%s|VT_ARRAY) should have returned 0x%08x, but returned 0x%08x\n", - wine_vtypes[i], - expected_result ? S_OK : STG_E_INVALIDPARAMETER, hr); - - propvar.vt = i | VT_VECTOR; - hr = PropVariantClear(&propvar); - expected_result = (valid_types[i].with_vector <= version ? TRUE : FALSE); - ok(expected_result == !(hr == STG_E_INVALIDPARAMETER), - "PropVariantClear(%s|VT_VECTOR) should have returned 0x%08x, but returned 0x%08x\n", - wine_vtypes[i], - expected_result ? S_OK : STG_E_INVALIDPARAMETER, hr); - - propvar.vt = i | VT_BYREF; - hr = PropVariantClear(&propvar); - expected_result = (valid_types[i].byref <= version ? TRUE : FALSE); - ok(expected_result == !(hr == STG_E_INVALIDPARAMETER), - "PropVariantClear(%s|VT_BYREF) should have returned 0x%08x, but returned 0x%08x\n", - wine_vtypes[i], - expected_result ? S_OK : STG_E_INVALIDPARAMETER, hr); - } -} - -static void test_copy(void) -{ - static char szTestString[] = "Test String"; - static WCHAR wszTestString[] = {'T','e','s','t',' ','S','t','r','i','n','g',0}; - PROPVARIANT propvarSrc; - PROPVARIANT propvarDst; - HRESULT hr; - - propvarSrc.vt = VT_BSTR; - U(propvarSrc).bstrVal = SysAllocString(wszTestString); - - hr = PropVariantCopy(&propvarDst, &propvarSrc); - ok(hr == S_OK, "PropVariantCopy(...VT_BSTR...) failed\n"); - ok(!lstrcmpW(U(propvarSrc).bstrVal, U(propvarDst).bstrVal), "BSTR not copied properly\n"); - hr = PropVariantClear(&propvarSrc); - ok(hr == S_OK, "PropVariantClear(...VT_BSTR...) failed\n"); - hr = PropVariantClear(&propvarDst); - ok(hr == S_OK, "PropVariantClear(...VT_BSTR...) failed\n"); - - propvarSrc.vt = VT_LPWSTR; - U(propvarSrc).pwszVal = wszTestString; - hr = PropVariantCopy(&propvarDst, &propvarSrc); - ok(hr == S_OK, "PropVariantCopy(...VT_LPWSTR...) failed\n"); - ok(!lstrcmpW(U(propvarSrc).pwszVal, U(propvarDst).pwszVal), "Wide string not copied properly\n"); - hr = PropVariantClear(&propvarDst); - ok(hr == S_OK, "PropVariantClear(...VT_LPWSTR...) failed\n"); - memset(&propvarSrc, 0, sizeof(propvarSrc)); - - propvarSrc.vt = VT_LPSTR; - U(propvarSrc).pszVal = szTestString; - hr = PropVariantCopy(&propvarDst, &propvarSrc); - ok(hr == S_OK, "PropVariantCopy(...VT_LPSTR...) failed\n"); - ok(!strcmp(U(propvarSrc).pszVal, U(propvarDst).pszVal), "String not copied properly\n"); - hr = PropVariantClear(&propvarDst); - ok(hr == S_OK, "PropVariantClear(...VT_LPSTR...) failed\n"); - memset(&propvarSrc, 0, sizeof(propvarSrc)); -} - -START_TEST(propvariant) -{ - test_validtypes(); - test_copy(); -} diff --git a/rostests/winetests/ole32/stg_prop.c b/rostests/winetests/ole32/stg_prop.c deleted file mode 100644 index a7024b38296..00000000000 --- a/rostests/winetests/ole32/stg_prop.c +++ /dev/null @@ -1,535 +0,0 @@ -/* IPropertyStorage unit tests - * 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 - */ -#include -#define COBJMACROS -#include "objbase.h" -#include "wine/test.h" -#include "initguid.h" - -DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); -DEFINE_GUID(FMTID_SummaryInformation,0xF29F85E0,0x4FF9,0x1068,0xAB,0x91,0x08,0x00,0x2B,0x27,0xB3,0xD9); -DEFINE_GUID(FMTID_DocSummaryInformation,0xD5CDD502,0x2E9C,0x101B,0x93,0x97,0x08,0x00,0x2B,0x2C,0xF9,0xAE); -DEFINE_GUID(FMTID_UserDefinedProperties,0xD5CDD505,0x2E9C,0x101B,0x93,0x97,0x08,0x00,0x2B,0x2C,0xF9,0xAE); - -#ifndef PID_BEHAVIOR -#define PID_BEHAVIOR 0x80000003 -#endif - -static HRESULT (WINAPI *pFmtIdToPropStgName)(const FMTID *, LPOLESTR); -static HRESULT (WINAPI *pPropStgNameToFmtId)(const LPOLESTR, FMTID *); -static HRESULT (WINAPI *pStgCreatePropSetStg)(IStorage *, DWORD, IPropertySetStorage **); - -static void init_function_pointers(void) -{ - HMODULE hmod = GetModuleHandleA("ole32.dll"); - pFmtIdToPropStgName = (void*)GetProcAddress(hmod, "FmtIdToPropStgName"); - pPropStgNameToFmtId = (void*)GetProcAddress(hmod, "PropStgNameToFmtId"); - pStgCreatePropSetStg = (void*)GetProcAddress(hmod, "StgCreatePropSetStg"); -} -/* FIXME: this creates an ANSI storage, try to find conditions under which - * Unicode translation fails - */ -static void testProps(void) -{ - static const WCHAR szDot[] = { '.',0 }; - static const WCHAR szPrefix[] = { 's','t','g',0 }; - static WCHAR propName[] = { 'p','r','o','p',0 }; - static char val[] = "l33t auth0r"; - WCHAR filename[MAX_PATH]; - HRESULT hr; - IStorage *storage = NULL; - IPropertySetStorage *propSetStorage = NULL; - IPropertyStorage *propertyStorage = NULL; - PROPSPEC spec; - PROPVARIANT var; - CLIPDATA clipdata; - unsigned char clipcontent[] = "foobar"; - - if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) - return; - - DeleteFileW(filename); - - hr = StgCreateDocfile(filename, - STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, &storage); - ok(hr == S_OK, "StgCreateDocfile failed: 0x%08x\n", hr); - - if(!pStgCreatePropSetStg) - { - IStorage_Release(storage); - DeleteFileW(filename); - return; - } - hr = pStgCreatePropSetStg(storage, 0, &propSetStorage); - ok(hr == S_OK, "StgCreatePropSetStg failed: 0x%08x\n", hr); - - hr = IPropertySetStorage_Create(propSetStorage, - &FMTID_SummaryInformation, NULL, PROPSETFLAG_ANSI, - STGM_READWRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, - &propertyStorage); - ok(hr == S_OK, "IPropertySetStorage_Create failed: 0x%08x\n", hr); - - hr = IPropertyStorage_WriteMultiple(propertyStorage, 0, NULL, NULL, 0); - ok(hr == S_OK, "WriteMultiple with 0 args failed: 0x%08x\n", hr); - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, NULL, NULL, 0); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got 0x%08x\n", hr); - - /* test setting one that I can't set */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_DICTIONARY; - var.vt = VT_I4; - U(var).lVal = 1; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == STG_E_INVALIDPARAMETER, - "Expected STG_E_INVALIDPARAMETER, got 0x%08x\n", hr); - - /* test setting one by name with an invalid propidNameFirst */ - spec.ulKind = PRSPEC_LPWSTR; - U(spec).lpwstr = (LPOLESTR)propName; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, - PID_DICTIONARY); - ok(hr == STG_E_INVALIDPARAMETER, - "Expected STG_E_INVALIDPARAMETER, got 0x%08x\n", hr); - - /* test setting behavior (case-sensitive) */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_BEHAVIOR; - U(var).lVal = 1; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == STG_E_INVALIDPARAMETER, - "Expected STG_E_INVALIDPARAMETER, got 0x%08x\n", hr); - - /* set one by value.. */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_FIRST_USABLE; - U(var).lVal = 1; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - - /* set one by name */ - spec.ulKind = PRSPEC_LPWSTR; - U(spec).lpwstr = (LPOLESTR)propName; - U(var).lVal = 2; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, - PID_FIRST_USABLE); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - - /* set a string value */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PIDSI_AUTHOR; - var.vt = VT_LPSTR; - U(var).pszVal = val; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - - /* set a clipboard value */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PIDSI_THUMBNAIL; - var.vt = VT_CF; - clipdata.cbSize = sizeof clipcontent + sizeof (ULONG); - clipdata.ulClipFmt = CF_ENHMETAFILE; - clipdata.pClipData = clipcontent; - U(var).pclipdata = &clipdata; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - - - /* check reading */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 0, NULL, NULL); - ok(hr == S_FALSE, "ReadMultiple with 0 args failed: 0x%08x\n", hr); - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, NULL, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got 0x%08x\n", hr); - /* read by propid */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_FIRST_USABLE; - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_I4 && U(var).lVal == 1, - "Didn't get expected type or value for property (got type %d, value %ld)\n", - var.vt, U(var).lVal); - /* read by name */ - spec.ulKind = PRSPEC_LPWSTR; - U(spec).lpwstr = (LPOLESTR)propName; - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_I4 && U(var).lVal == 2, - "Didn't get expected type or value for property (got type %d, value %ld)\n", - var.vt, U(var).lVal); - /* read string value */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PIDSI_AUTHOR; - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_LPSTR && !lstrcmpA(U(var).pszVal, val), - "Didn't get expected type or value for property (got type %d, value %s)\n", - var.vt, U(var).pszVal); - - /* read clipboard format */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PIDSI_THUMBNAIL; - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(SUCCEEDED(hr), "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_CF, "variant type wrong\n"); - ok(U(var).pclipdata->ulClipFmt == CF_ENHMETAFILE, - "clipboard type wrong\n"); - ok(U(var).pclipdata->cbSize == sizeof clipcontent + sizeof (ULONG), - "clipboard size wrong\n"); - ok(!memcmp(U(var).pclipdata->pClipData, clipcontent, sizeof clipcontent), - "clipboard contents wrong\n"); - ok(S_OK == PropVariantClear(&var), "failed to clear variant\n"); - - /* check deleting */ - hr = IPropertyStorage_DeleteMultiple(propertyStorage, 0, NULL); - ok(hr == S_OK, "DeleteMultiple with 0 args failed: 0x%08x\n", hr); - hr = IPropertyStorage_DeleteMultiple(propertyStorage, 1, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got 0x%08x\n", hr); - /* contrary to what the docs say, you can't delete the dictionary */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_DICTIONARY; - hr = IPropertyStorage_DeleteMultiple(propertyStorage, 1, &spec); - ok(hr == STG_E_INVALIDPARAMETER, - "Expected STG_E_INVALIDPARAMETER, got 0x%08x\n", hr); - /* now delete the first value.. */ - U(spec).propid = PID_FIRST_USABLE; - hr = IPropertyStorage_DeleteMultiple(propertyStorage, 1, &spec); - ok(hr == S_OK, "DeleteMultiple failed: 0x%08x\n", hr); - /* and check that it's no longer readable */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_FALSE, "Expected S_FALSE, got 0x%08x\n", hr); - - hr = IPropertyStorage_Commit(propertyStorage, STGC_DEFAULT); - ok(hr == S_OK, "Commit failed: 0x%08x\n", hr); - - /* check reverting */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_FIRST_USABLE; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - hr = IPropertyStorage_Revert(propertyStorage); - ok(hr == S_OK, "Revert failed: 0x%08x\n", hr); - /* now check that it's still not there */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_FALSE, "Expected S_FALSE, got 0x%08x\n", hr); - /* set an integer value again */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_FIRST_USABLE; - var.vt = VT_I4; - U(var).lVal = 1; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - /* commit it */ - hr = IPropertyStorage_Commit(propertyStorage, STGC_DEFAULT); - ok(hr == S_OK, "Commit failed: 0x%08x\n", hr); - /* set it to a string value */ - var.vt = VT_LPSTR; - U(var).pszVal = (LPSTR)val; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - /* revert it */ - hr = IPropertyStorage_Revert(propertyStorage); - ok(hr == S_OK, "Revert failed: 0x%08x\n", hr); - /* Oddly enough, there's no guarantee that a successful revert actually - * implies the value wasn't saved. Maybe transactional mode needs to be - * used for that? - */ - - IPropertyStorage_Release(propertyStorage); - propertyStorage = NULL; - IPropertySetStorage_Release(propSetStorage); - propSetStorage = NULL; - IStorage_Release(storage); - storage = NULL; - - /* now open it again */ - hr = StgOpenStorage(filename, NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, - NULL, 0, &storage); - ok(hr == S_OK, "StgOpenStorage failed: 0x%08x\n", hr); - - hr = pStgCreatePropSetStg(storage, 0, &propSetStorage); - ok(hr == S_OK, "StgCreatePropSetStg failed: 0x%08x\n", hr); - - hr = IPropertySetStorage_Open(propSetStorage, &FMTID_SummaryInformation, - STGM_READWRITE | STGM_SHARE_EXCLUSIVE, &propertyStorage); - ok(hr == S_OK, "IPropertySetStorage_Open failed: 0x%08x\n", hr); - - /* check properties again */ - spec.ulKind = PRSPEC_LPWSTR; - U(spec).lpwstr = (LPOLESTR)propName; - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_I4 && U(var).lVal == 2, - "Didn't get expected type or value for property (got type %d, value %ld)\n", - var.vt, U(var).lVal); - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PIDSI_AUTHOR; - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_LPSTR && !lstrcmpA(U(var).pszVal, val), - "Didn't get expected type or value for property (got type %d, value %s)\n", - var.vt, U(var).pszVal); - - IPropertyStorage_Release(propertyStorage); - IPropertySetStorage_Release(propSetStorage); - IStorage_Release(storage); - - DeleteFileW(filename); -} - -static void testCodepage(void) -{ - static const WCHAR szDot[] = { '.',0 }; - static const WCHAR szPrefix[] = { 's','t','g',0 }; - static CHAR aval[] = "hi"; - static WCHAR wval[] = { 'h','i',0 }; - HRESULT hr; - IStorage *storage = NULL; - IPropertySetStorage *propSetStorage = NULL; - IPropertyStorage *propertyStorage = NULL; - PROPSPEC spec; - PROPVARIANT var; - WCHAR fileName[MAX_PATH]; - - if(!GetTempFileNameW(szDot, szPrefix, 0, fileName)) - return; - - hr = StgCreateDocfile(fileName, - STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, &storage); - ok(hr == S_OK, "StgCreateDocfile failed: 0x%08x\n", hr); - - if(!pStgCreatePropSetStg) - { - IStorage_Release(storage); - DeleteFileW(fileName); - return; - } - hr = pStgCreatePropSetStg(storage, 0, &propSetStorage); - ok(hr == S_OK, "StgCreatePropSetStg failed: 0x%08x\n", hr); - - hr = IPropertySetStorage_Create(propSetStorage, - &FMTID_SummaryInformation, NULL, PROPSETFLAG_DEFAULT, - STGM_READWRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, - &propertyStorage); - ok(hr == S_OK, "IPropertySetStorage_Create failed: 0x%08x\n", hr); - - PropVariantInit(&var); - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_CODEPAGE; - /* check code page before it's been explicitly set */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_I2 && U(var).iVal == 1200, - "Didn't get expected type or value for property\n"); - /* Set the code page to ascii */ - var.vt = VT_I2; - U(var).iVal = 1252; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - /* check code page */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_I2 && U(var).iVal == 1252, - "Didn't get expected type or value for property\n"); - /* Set code page to Unicode */ - U(var).iVal = 1200; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - /* check code page */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_I2 && U(var).iVal == 1200, - "Didn't get expected type or value for property\n"); - /* Set a string value */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_FIRST_USABLE; - var.vt = VT_LPSTR; - U(var).pszVal = aval; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_LPSTR && !strcmp(U(var).pszVal, "hi"), - "Didn't get expected type or value for property\n"); - /* This seemingly non-sensical test is to show that the string is indeed - * interpreted according to the current system code page, not according to - * the property set's code page. (If the latter were true, the whole - * string would be maintained. As it is, only the first character is.) - */ - U(var).pszVal = (LPSTR)wval; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_LPSTR && !strcmp(U(var).pszVal, "h"), - "Didn't get expected type or value for property\n"); - /* now that a property's been set, you can't change the code page */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_CODEPAGE; - var.vt = VT_I2; - U(var).iVal = 1200; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == STG_E_INVALIDPARAMETER, - "Expected STG_E_INVALIDPARAMETER, got 0x%08x\n", hr); - - IPropertyStorage_Release(propertyStorage); - IPropertySetStorage_Release(propSetStorage); - IStorage_Release(storage); - - DeleteFileW(fileName); - - /* same tests, but with PROPSETFLAG_ANSI */ - hr = StgCreateDocfile(fileName, - STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, &storage); - ok(hr == S_OK, "StgCreateDocfile failed: 0x%08x\n", hr); - - hr = pStgCreatePropSetStg(storage, 0, &propSetStorage); - ok(hr == S_OK, "StgCreatePropSetStg failed: 0x%08x\n", hr); - - hr = IPropertySetStorage_Create(propSetStorage, - &FMTID_SummaryInformation, NULL, PROPSETFLAG_ANSI, - STGM_READWRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, - &propertyStorage); - ok(hr == S_OK, "IPropertySetStorage_Create failed: 0x%08x\n", hr); - - /* check code page before it's been explicitly set */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_I2 && U(var).iVal == 1252, - "Didn't get expected type or value for property\n"); - /* Set code page to Unicode */ - U(var).iVal = 1200; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - /* check code page */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_I2 && U(var).iVal == 1200, - "Didn't get expected type or value for property\n"); - /* This test is commented out for documentation. It fails under Wine, - * and I expect it would under Windows as well, yet it succeeds. There's - * obviously something about string conversion I don't understand. - */ - if(0) { - static unsigned char strVal[] = { 0x81, 0xff, 0x04, 0 }; - /* Set code page to 950 (Traditional Chinese) */ - U(var).iVal = 950; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - /* Try writing an invalid string: lead byte 0x81 is unused in Traditional - * Chinese. - */ - spec.ulKind = PRSPEC_PROPID; - U(spec).propid = PID_FIRST_USABLE; - var.vt = VT_LPSTR; - U(var).pszVal = (LPSTR)strVal; - hr = IPropertyStorage_WriteMultiple(propertyStorage, 1, &spec, &var, 0); - ok(hr == S_OK, "WriteMultiple failed: 0x%08x\n", hr); - /* Check returned string */ - hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var); - ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr); - ok(var.vt == VT_LPSTR && !strcmp(U(var).pszVal, (LPCSTR)strVal), - "Didn't get expected type or value for property\n"); - } - - IPropertyStorage_Release(propertyStorage); - IPropertySetStorage_Release(propSetStorage); - IStorage_Release(storage); - - DeleteFileW(fileName); -} - -static void testFmtId(void) -{ - WCHAR szSummaryInfo[] = { 5,'S','u','m','m','a','r','y', - 'I','n','f','o','r','m','a','t','i','o','n',0 }; - WCHAR szDocSummaryInfo[] = { 5,'D','o','c','u','m','e','n','t', - 'S','u','m','m','a','r','y','I','n','f','o','r','m','a','t','i','o','n', - 0 }; - WCHAR szIID_IPropSetStg[] = { 5,'0','j','a','a','a','a','a', - 'a','A','a','a','a','a','a','d','a','A','a','a','a','a','a','a','a','G', - 'c',0 }; - WCHAR name[32]; - FMTID fmtid; - HRESULT hr; - - if (pFmtIdToPropStgName) { - hr = pFmtIdToPropStgName(NULL, name); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got 0x%08x\n", hr); - hr = pFmtIdToPropStgName(&FMTID_SummaryInformation, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got 0x%08x\n", hr); - hr = pFmtIdToPropStgName(&FMTID_SummaryInformation, name); - ok(hr == S_OK, "FmtIdToPropStgName failed: 0x%08x\n", hr); - ok(!memcmp(name, szSummaryInfo, (lstrlenW(szSummaryInfo) + 1) * - sizeof(WCHAR)), "Got wrong name for FMTID_SummaryInformation\n"); - hr = pFmtIdToPropStgName(&FMTID_DocSummaryInformation, name); - ok(hr == S_OK, "FmtIdToPropStgName failed: 0x%08x\n", hr); - ok(!memcmp(name, szDocSummaryInfo, (lstrlenW(szDocSummaryInfo) + 1) * - sizeof(WCHAR)), "Got wrong name for FMTID_DocSummaryInformation\n"); - hr = pFmtIdToPropStgName(&FMTID_UserDefinedProperties, name); - ok(hr == S_OK, "FmtIdToPropStgName failed: 0x%08x\n", hr); - ok(!memcmp(name, szDocSummaryInfo, (lstrlenW(szDocSummaryInfo) + 1) * - sizeof(WCHAR)), "Got wrong name for FMTID_DocSummaryInformation\n"); - hr = pFmtIdToPropStgName(&IID_IPropertySetStorage, name); - ok(hr == S_OK, "FmtIdToPropStgName failed: 0x%08x\n", hr); - ok(!memcmp(name, szIID_IPropSetStg, (lstrlenW(szIID_IPropSetStg) + 1) * - sizeof(WCHAR)), "Got wrong name for IID_IPropertySetStorage\n"); - } - - if(pPropStgNameToFmtId) { - /* test args first */ - hr = pPropStgNameToFmtId(NULL, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got 0x%08x\n", hr); - hr = pPropStgNameToFmtId(NULL, &fmtid); - ok(hr == STG_E_INVALIDNAME, "Expected STG_E_INVALIDNAME, got 0x%08x\n", - hr); - hr = pPropStgNameToFmtId(szDocSummaryInfo, NULL); - ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got 0x%08x\n", hr); - /* test the known format IDs */ - hr = pPropStgNameToFmtId(szSummaryInfo, &fmtid); - ok(hr == S_OK, "PropStgNameToFmtId failed: 0x%08x\n", hr); - ok(!memcmp(&fmtid, &FMTID_SummaryInformation, sizeof(fmtid)), - "Got unexpected FMTID, expected FMTID_SummaryInformation\n"); - hr = pPropStgNameToFmtId(szDocSummaryInfo, &fmtid); - ok(hr == S_OK, "PropStgNameToFmtId failed: 0x%08x\n", hr); - ok(!memcmp(&fmtid, &FMTID_DocSummaryInformation, sizeof(fmtid)), - "Got unexpected FMTID, expected FMTID_DocSummaryInformation\n"); - /* test another GUID */ - hr = pPropStgNameToFmtId(szIID_IPropSetStg, &fmtid); - ok(hr == S_OK, "PropStgNameToFmtId failed: 0x%08x\n", hr); - ok(!memcmp(&fmtid, &IID_IPropertySetStorage, sizeof(fmtid)), - "Got unexpected FMTID, expected IID_IPropertySetStorage\n"); - /* now check case matching */ - CharUpperW(szDocSummaryInfo + 1); - hr = pPropStgNameToFmtId(szDocSummaryInfo, &fmtid); - ok(hr == S_OK, "PropStgNameToFmtId failed: 0x%08x\n", hr); - ok(!memcmp(&fmtid, &FMTID_DocSummaryInformation, sizeof(fmtid)), - "Got unexpected FMTID, expected FMTID_DocSummaryInformation\n"); - CharUpperW(szIID_IPropSetStg + 1); - hr = pPropStgNameToFmtId(szIID_IPropSetStg, &fmtid); - ok(hr == S_OK, "PropStgNameToFmtId failed: 0x%08x\n", hr); - ok(!memcmp(&fmtid, &IID_IPropertySetStorage, sizeof(fmtid)), - "Got unexpected FMTID, expected IID_IPropertySetStorage\n"); - } -} - -START_TEST(stg_prop) -{ - init_function_pointers(); - testProps(); - testCodepage(); - testFmtId(); -} diff --git a/rostests/winetests/ole32/storage32.c b/rostests/winetests/ole32/storage32.c deleted file mode 100644 index d825ab66bfa..00000000000 --- a/rostests/winetests/ole32/storage32.c +++ /dev/null @@ -1,1226 +0,0 @@ -/* - * Unit tests for OLE storage - * - * 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 - */ - -#include - -#define COBJMACROS - -#include -#include "wine/test.h" - -#include "ole2.h" -#include "objidl.h" -#include "initguid.h" - -DEFINE_GUID( test_stg_cls, 0x88888888, 0x0425, 0x0000, 0,0,0,0,0,0,0,0); - -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) - -static void test_hglobal_storage_stat(void) -{ - ILockBytes *ilb = NULL; - IStorage *stg = NULL; - HRESULT r; - STATSTG stat; - DWORD mode, refcount; - - r = CreateILockBytesOnHGlobal( NULL, TRUE, &ilb ); - ok( r == S_OK, "CreateILockBytesOnHGlobal failed\n"); - - mode = STGM_CREATE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE;/*0x1012*/ - r = StgCreateDocfileOnILockBytes( ilb, mode, 0, &stg ); - ok( r == S_OK, "StgCreateDocfileOnILockBytes failed\n"); - - r = WriteClassStg( stg, &test_stg_cls ); - ok( r == S_OK, "WriteClassStg failed\n"); - - memset( &stat, 0, sizeof stat ); - r = IStorage_Stat( stg, &stat, 0 ); - - ok( stat.pwcsName == NULL, "storage name not null\n"); - ok( stat.type == 1, "type is wrong\n"); - ok( stat.grfMode == 0x12, "grf mode is incorrect\n"); - ok( !memcmp(&stat.clsid, &test_stg_cls, sizeof test_stg_cls), "CLSID is wrong\n"); - - refcount = IStorage_Release( stg ); - ok( refcount == 0, "IStorage refcount is wrong\n"); - refcount = ILockBytes_Release( ilb ); - ok( refcount == 0, "ILockBytes refcount is wrong\n"); -} - -static void test_create_storage_modes(void) -{ - static const WCHAR szPrefix[] = { 's','t','g',0 }; - static const WCHAR szDot[] = { '.',0 }; - WCHAR filename[MAX_PATH]; - IStorage *stg = NULL; - HRESULT r; - - if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) - return; - - DeleteFileW(filename); - - /* test with some invalid parameters */ - r = StgCreateDocfile( NULL, 0, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, 0, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_CREATE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_CREATE | STGM_READWRITE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, NULL); - ok(r==STG_E_INVALIDPOINTER, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 1, &stg); - ok(r==STG_E_INVALIDPARAMETER, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_DENY_WRITE | STGM_READWRITE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READ, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_PRIORITY, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - - /* StgCreateDocfile seems to be very particular about the flags it accepts */ - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED | STGM_WRITE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED | 8, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED | 0x80, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED | 0x800, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED | 0x8000, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED | 0x80000, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED | 0x800000, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - ok(stg == NULL, "stg was set\n"); - - /* check what happens if the file already exists (which is how it's meant to be used) */ - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==STG_E_FILEALREADYEXISTS, "StgCreateDocfile wrong error\n"); /* FAILIFTHERE is default */ - r = StgCreateDocfile( filename, STGM_READ, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); /* need at least readmode and sharemode */ - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_DENY_WRITE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_SHARE_DENY_NONE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile failed\n"); - r = StgCreateDocfile( filename, STGM_SHARE_DENY_NONE | STGM_TRANSACTED, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile failed\n"); - r = StgCreateDocfile( filename, STGM_SHARE_DENY_NONE | STGM_READWRITE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile failed\n"); - r = StgCreateDocfile( filename, STGM_SHARE_DENY_NONE | STGM_WRITE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile failed\n"); - r = StgCreateDocfile( filename, STGM_SHARE_DENY_WRITE | STGM_WRITE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile failed\n"); - r = StgCreateDocfile( filename, STGM_SHARE_DENY_WRITE | STGM_READ, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile wrong error\n"); - r = StgCreateDocfile( filename, STGM_TRANSACTED | STGM_SHARE_DENY_WRITE | STGM_READ, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile wrong error\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); - - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED |STGM_FAILIFTHERE, 0, &stg); - ok(r==STG_E_FILEALREADYEXISTS, "StgCreateDocfile wrong error\n"); - r = StgCreateDocfile( filename, STGM_SHARE_EXCLUSIVE | STGM_WRITE, 0, &stg); - ok(r==STG_E_FILEALREADYEXISTS, "StgCreateDocfile wrong error\n"); - - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_DENY_WRITE | STGM_READWRITE, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgCreateDocfile succeeded\n"); - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); - - r = StgCreateDocfile( filename, STGM_CREATE | STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); - - /* test the way excel uses StgCreateDocFile */ - r = StgCreateDocfile( filename, STGM_TRANSACTED|STGM_CREATE|STGM_SHARE_DENY_WRITE|STGM_READWRITE, 0, &stg); - ok(r==S_OK, "StgCreateDocfile the excel way failed\n"); - if(r == S_OK) - { - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); - } - - /* and the way windows media uses it ... */ - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_DENY_NONE | STGM_READWRITE | STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile the windows media way failed\n"); - if (r == S_OK) - { - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); - } - - /* looks like we need STGM_TRANSACTED or STGM_CREATE */ - r = StgCreateDocfile( filename, STGM_TRANSACTED|STGM_SHARE_DENY_WRITE|STGM_READWRITE, 0, &stg); - ok(r==S_OK, "StgCreateDocfile the excel way failed\n"); - if(r == S_OK) - { - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); - } - - r = StgCreateDocfile( filename, STGM_TRANSACTED|STGM_CREATE|STGM_SHARE_DENY_WRITE|STGM_WRITE, 0, &stg); - ok(r==S_OK, "StgCreateDocfile the excel way failed\n"); - if(r == S_OK) - { - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); - } - - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, &stg); - ok(r==S_OK, "StgCreateDocfile the powerpoint way failed\n"); - if(r == S_OK) - { - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); - } - - /* test the way msi uses StgCreateDocfile */ - r = StgCreateDocfile( filename, STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, &stg); - ok(r==S_OK, "StgCreateDocFile failed\n"); - r = IStorage_Release(stg); - ok(r == 0, "storage not released\n"); - ok(DeleteFileW(filename), "failed to delete file\n"); -} - -static void test_storage_stream(void) -{ - static const WCHAR stmname[] = { 'C','O','N','T','E','N','T','S',0 }; - static const WCHAR szPrefix[] = { 's','t','g',0 }; - static const WCHAR szDot[] = { '.',0 }; - static const WCHAR longname[] = { - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', - 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',0 - }; - WCHAR filename[MAX_PATH]; - IStorage *stg = NULL; - HRESULT r; - IStream *stm = NULL; - IStream *stm2 = NULL; - ULONG count = 0; - LARGE_INTEGER pos; - ULARGE_INTEGER p; - unsigned char buffer[0x100]; - - if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) - return; - - DeleteFileW(filename); - - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - - /* try create some invalid streams */ - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 1, 0, &stm ); - ok(r==STG_E_INVALIDPARAMETER, "IStorage->CreateStream wrong error\n"); - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 1, &stm ); - ok(r==STG_E_INVALIDPARAMETER, "IStorage->CreateStream wrong error\n"); - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, NULL ); - ok(r==STG_E_INVALIDPOINTER, "IStorage->CreateStream wrong error\n"); - r = IStorage_CreateStream(stg, NULL, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==STG_E_INVALIDNAME, "IStorage->CreateStream wrong error\n"); - r = IStorage_CreateStream(stg, longname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==STG_E_INVALIDNAME, "IStorage->CreateStream wrong error, got %d GetLastError()=%d\n", r, GetLastError()); - r = IStorage_CreateStream(stg, stmname, STGM_READWRITE, 0, 0, &stm ); - ok(r==STG_E_INVALIDFLAG, "IStorage->CreateStream wrong error\n"); - r = IStorage_CreateStream(stg, stmname, STGM_READ, 0, 0, &stm ); - ok(r==STG_E_INVALIDFLAG, "IStorage->CreateStream wrong error\n"); - r = IStorage_CreateStream(stg, stmname, STGM_WRITE, 0, 0, &stm ); - ok(r==STG_E_INVALIDFLAG, "IStorage->CreateStream wrong error\n"); - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_DENY_NONE | STGM_READWRITE, 0, 0, &stm ); - ok(r==STG_E_INVALIDFLAG, "IStorage->CreateStream wrong error\n"); - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_DENY_NONE | STGM_READ, 0, 0, &stm ); - ok(r==STG_E_INVALIDFLAG, "IStorage->CreateStream wrong error\n"); - - /* now really create a stream and delete it */ - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==S_OK, "IStorage->CreateStream failed\n"); - r = IStream_Release(stm); - ok(r == 0, "wrong ref count\n"); - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==STG_E_FILEALREADYEXISTS, "IStorage->CreateStream failed\n"); - r = IStorage_DestroyElement(stg,stmname); - ok(r==S_OK, "IStorage->DestroyElement failed\n"); - - /* create a stream and write to it */ - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==S_OK, "IStorage->CreateStream failed\n"); - - r = IStream_Clone(stm, &stm2); - ok(r==S_OK, "failed to clone stream\n"); - - r = IStream_Write(stm, NULL, 0, NULL ); - ok(r==STG_E_INVALIDPOINTER, "IStream->Write wrong error\n"); - r = IStream_Write(stm, "Hello\n", 0, NULL ); - ok(r==S_OK, "failed to write stream\n"); - r = IStream_Write(stm, "Hello\n", 0, &count ); - ok(r==S_OK, "failed to write stream\n"); - r = IStream_Write(stm, "Hello\n", 6, &count ); - ok(r==S_OK, "failed to write stream\n"); - r = IStream_Commit(stm, STGC_DEFAULT ); - ok(r==S_OK, "failed to commit stream\n"); - r = IStream_Commit(stm, STGC_DEFAULT ); - ok(r==S_OK, "failed to commit stream\n"); - - /* seek round a bit, reset the stream size */ - pos.QuadPart = 0; - r = IStream_Seek(stm, pos, 3, &p ); - ok(r==STG_E_INVALIDFUNCTION, "IStream->Seek returned wrong error\n"); - r = IStream_Seek(stm, pos, STREAM_SEEK_SET, NULL); - ok(r==S_OK, "failed to seek stream\n"); - r = IStream_Seek(stm, pos, STREAM_SEEK_SET, &p ); - ok(r==S_OK, "failed to seek stream\n"); - r = IStream_SetSize(stm,p); - ok(r==S_OK, "failed to set pos\n"); - pos.QuadPart = 10; - r = IStream_Seek(stm, pos, STREAM_SEEK_SET, &p ); - ok(r==S_OK, "failed to seek stream\n"); - ok(p.QuadPart == 10, "at wrong place\n"); - pos.QuadPart = 0; - r = IStream_Seek(stm, pos, STREAM_SEEK_END, &p ); - ok(r==S_OK, "failed to seek stream\n"); - ok(p.QuadPart == 0, "at wrong place\n"); - r = IStream_Read(stm, buffer, sizeof buffer, &count ); - ok(r==S_OK, "failed to set pos\n"); - ok(count == 0, "read bytes from empty stream\n"); - - /* wrap up */ - r = IStream_Release(stm2); - ok(r == 0, "wrong ref count\n"); - - /* create a stream and write to it */ - r = IStorage_CreateStream(stg, stmname, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm2 ); - ok(r==S_OK, "IStorage->CreateStream failed\n"); - - r = IStream_Seek(stm, pos, STREAM_SEEK_SET, &p); - ok(r==STG_E_REVERTED, "overwritten stream should return STG_E_REVERTED instead of 0x%08x\n", r); - - r = IStream_Release(stm2); - ok(r == 0, "wrong ref count\n"); - r = IStream_Release(stm); - ok(r == 0, "wrong ref count\n"); - - r = IStorage_Release(stg); - ok(r == 0, "wrong ref count\n"); - r = DeleteFileW(filename); - ok(r, "file should exist\n"); -} - -static BOOL touch_file(LPCWSTR filename) -{ - HANDLE file; - - file = CreateFileW(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if (file==INVALID_HANDLE_VALUE) - return FALSE; - CloseHandle(file); - return TRUE; -} - -static BOOL is_zero_length(LPCWSTR filename) -{ - HANDLE file; - DWORD len; - - file = CreateFileW(filename, GENERIC_READ, 0, NULL, - OPEN_EXISTING, 0, NULL); - if (file==INVALID_HANDLE_VALUE) - return FALSE; - len = GetFileSize(file, NULL); - CloseHandle(file); - return len == 0; -} - -static BOOL is_existing_file(LPCWSTR filename) -{ - HANDLE file; - - file = CreateFileW(filename, GENERIC_READ, 0, NULL, - OPEN_EXISTING, 0, NULL); - if (file==INVALID_HANDLE_VALUE) - return FALSE; - CloseHandle(file); - return TRUE; -} - -static void test_open_storage(void) -{ - static const WCHAR szPrefix[] = { 's','t','g',0 }; - static const WCHAR szNonExist[] = { 'n','o','n','e','x','i','s','t',0 }; - static const WCHAR szDot[] = { '.',0 }; - WCHAR filename[MAX_PATH]; - IStorage *stg = NULL, *stg2 = NULL; - HRESULT r; - DWORD stgm; - - if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) - return; - - /* try opening a zero length file - it should stay zero length */ - DeleteFileW(filename); - touch_file(filename); - stgm = STGM_NOSCRATCH | STGM_TRANSACTED | STGM_SHARE_DENY_WRITE | STGM_READWRITE; - r = StgOpenStorage( filename, NULL, stgm, NULL, 0, &stg); - ok(r==STG_E_FILEALREADYEXISTS, "StgOpenStorage didn't fail\n"); - - stgm = STGM_SHARE_EXCLUSIVE | STGM_READWRITE; - r = StgOpenStorage( filename, NULL, stgm, NULL, 0, &stg); - ok(r==STG_E_FILEALREADYEXISTS, "StgOpenStorage didn't fail\n"); - ok(is_zero_length(filename), "file length changed\n"); - - DeleteFileW(filename); - - /* try opening a nonexistent file - it should not create it */ - stgm = STGM_DIRECT | STGM_SHARE_EXCLUSIVE | STGM_READWRITE; - r = StgOpenStorage( filename, NULL, stgm, NULL, 0, &stg); - ok(r!=S_OK, "StgOpenStorage failed: 0x%08x\n", r); - if (r==S_OK) IStorage_Release(stg); - ok(!is_existing_file(filename), "StgOpenStorage should not create a file\n"); - DeleteFileW(filename); - - /* create the file */ - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - IStorage_Release(stg); - - r = StgOpenStorage( filename, NULL, 0, NULL, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgOpenStorage wrong error\n"); - r = StgOpenStorage( NULL, NULL, STGM_SHARE_EXCLUSIVE, NULL, 0, &stg); - ok(r==STG_E_INVALIDNAME, "StgOpenStorage wrong error\n"); - r = StgOpenStorage( filename, NULL, STGM_SHARE_EXCLUSIVE | STGM_READ, NULL, 0, NULL); - ok(r==STG_E_INVALIDPOINTER, "StgOpenStorage wrong error\n"); - r = StgOpenStorage( filename, NULL, STGM_SHARE_EXCLUSIVE | STGM_READ, NULL, 1, &stg); - ok(r==STG_E_INVALIDPARAMETER, "StgOpenStorage wrong error\n"); - r = StgOpenStorage( szNonExist, NULL, STGM_SHARE_EXCLUSIVE | STGM_READ, NULL, 0, &stg); - ok(r==STG_E_FILENOTFOUND, "StgOpenStorage failed\n"); - r = StgOpenStorage( filename, NULL, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READ, NULL, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgOpenStorage failed\n"); - r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_NONE | STGM_READ, NULL, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgOpenStorage failed\n"); - r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_READ | STGM_READ, NULL, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgOpenStorage failed\n"); - r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_WRITE | STGM_READWRITE, NULL, 0, &stg); - ok(r==STG_E_INVALIDFLAG, "StgOpenStorage failed\n"); - - /* open it for real */ - r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_NONE | STGM_READ | STGM_TRANSACTED, NULL, 0, &stg); /* XLViewer 97/2000 */ - ok(r==S_OK, "StgOpenStorage failed\n"); - if(stg) - { - r = IStorage_Release(stg); - ok(r == 0, "wrong ref count\n"); - } - - r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_WRITE | STGM_READ, NULL, 0, &stg); - ok(r==S_OK, "StgOpenStorage failed\n"); - if(stg) - { - r = IStorage_Release(stg); - ok(r == 0, "wrong ref count\n"); - } - - /* test the way word opens its custom dictionary */ - r = StgOpenStorage( filename, NULL, STGM_NOSCRATCH | STGM_TRANSACTED | - STGM_SHARE_DENY_WRITE | STGM_READWRITE, NULL, 0, &stg); - ok(r==S_OK, "StgOpenStorage failed\n"); - if(stg) - { - r = IStorage_Release(stg); - ok(r == 0, "wrong ref count\n"); - } - - r = StgOpenStorage( filename, NULL, STGM_SHARE_EXCLUSIVE | STGM_READ, NULL, 0, &stg); - ok(r==S_OK, "StgOpenStorage failed\n"); - r = StgOpenStorage( filename, NULL, STGM_SHARE_EXCLUSIVE | STGM_READ, NULL, 0, &stg2); - ok(r==STG_E_SHAREVIOLATION, "StgOpenStorage failed\n"); - if(stg) - { - r = IStorage_Release(stg); - ok(r == 0, "wrong ref count\n"); - } - - /* now try write to a storage file we opened read-only */ - r = StgOpenStorage( filename, NULL, STGM_SHARE_EXCLUSIVE | STGM_READ, NULL, 0, &stg); - ok(r==S_OK, "StgOpenStorage failed\n"); - if(stg) - { - static const WCHAR stmname[] = { 'w','i','n','e','t','e','s','t',0}; - IStream *stm = NULL; - IStorage *stg2 = NULL; - - r = IStorage_CreateStream( stg, stmname, STGM_WRITE | STGM_SHARE_EXCLUSIVE, - 0, 0, &stm ); - ok(r == STG_E_ACCESSDENIED, "CreateStream should fail\n"); - r = IStorage_CreateStorage( stg, stmname, STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stg2); - ok(r == STG_E_ACCESSDENIED, "CreateStream should fail\n"); - - r = IStorage_Release(stg); - ok(r == 0, "wrong ref count\n"); - } - - /* open like visio 2003 */ - stg = NULL; - r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_SHARE_DENY_NONE, NULL, 0, &stg); - ok(r == S_OK, "should succeed\n"); - if (stg) - IStorage_Release(stg); - - /* test other sharing modes with STGM_PRIORITY */ - stg = NULL; - r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_SHARE_EXCLUSIVE, NULL, 0, &stg); - ok(r == S_OK, "should succeed\n"); - if (stg) - IStorage_Release(stg); - - stg = NULL; - r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_SHARE_DENY_WRITE, NULL, 0, &stg); - ok(r == S_OK, "should succeed\n"); - if (stg) - IStorage_Release(stg); - - stg = NULL; - r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_SHARE_DENY_READ, NULL, 0, &stg); - ok(r == S_OK, "should succeed\n"); - if (stg) - IStorage_Release(stg); - - /* open like Project 2003 */ - stg = NULL; - r = StgOpenStorage( filename, NULL, STGM_PRIORITY, NULL, 0, &stg); - ok(r == S_OK, "should succeed\n"); - r = StgOpenStorage( filename, NULL, STGM_PRIORITY, NULL, 0, &stg2); - ok(r == S_OK, "should succeed\n"); - if (stg2) - IStorage_Release(stg2); - if (stg) - IStorage_Release(stg); - - stg = NULL; - r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_READWRITE, NULL, 0, &stg); - ok(r == STG_E_INVALIDFLAG, "should fail\n"); - - r = StgOpenStorage( filename, NULL, STGM_TRANSACTED | STGM_PRIORITY, NULL, 0, &stg); - ok(r == STG_E_INVALIDFLAG, "should fail\n"); - - r = StgOpenStorage( filename, NULL, STGM_SIMPLE | STGM_PRIORITY, NULL, 0, &stg); - ok(r == STG_E_INVALIDFLAG, "should fail\n"); - - r = StgOpenStorage( filename, NULL, STGM_DELETEONRELEASE | STGM_PRIORITY, NULL, 0, &stg); - ok(r == STG_E_INVALIDFUNCTION, "should fail\n"); - - r = StgOpenStorage( filename, NULL, STGM_NOSCRATCH | STGM_PRIORITY, NULL, 0, &stg); - ok(r == STG_E_INVALIDFLAG, "should fail\n"); - - r = StgOpenStorage( filename, NULL, STGM_NOSNAPSHOT | STGM_PRIORITY, NULL, 0, &stg); - ok(r == STG_E_INVALIDFLAG, "should fail\n"); - - r = DeleteFileW(filename); - ok(r, "file didn't exist\n"); -} - -static void test_storage_suminfo(void) -{ - static const WCHAR szDot[] = { '.',0 }; - static const WCHAR szPrefix[] = { 's','t','g',0 }; - WCHAR filename[MAX_PATH]; - IStorage *stg = NULL; - IPropertySetStorage *propset = NULL; - IPropertyStorage *ps = NULL; - HRESULT r; - - if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) - return; - - DeleteFileW(filename); - - /* create the file */ - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | - STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - - r = IStorage_QueryInterface( stg, &IID_IPropertySetStorage, (LPVOID) &propset ); - ok(r == S_OK, "query interface failed\n"); - - /* delete it */ - r = IPropertySetStorage_Delete( propset, &FMTID_SummaryInformation ); - ok(r == STG_E_FILENOTFOUND, "deleted property set storage\n"); - - r = IPropertySetStorage_Open( propset, &FMTID_SummaryInformation, - STGM_READ | STGM_SHARE_EXCLUSIVE, &ps ); - ok(r == STG_E_FILENOTFOUND, "opened property set storage\n"); - - r = IPropertySetStorage_Create( propset, &FMTID_SummaryInformation, NULL, 0, - STGM_READ | STGM_SHARE_EXCLUSIVE, &ps ); - ok(r == STG_E_INVALIDFLAG, "created property set storage\n"); - - r = IPropertySetStorage_Create( propset, &FMTID_SummaryInformation, NULL, 0, - STGM_READ, &ps ); - ok(r == STG_E_INVALIDFLAG, "created property set storage\n"); - - r = IPropertySetStorage_Create( propset, &FMTID_SummaryInformation, NULL, 0, 0, &ps ); - ok(r == STG_E_INVALIDFLAG, "created property set storage\n"); - - r = IPropertySetStorage_Create( propset, &FMTID_SummaryInformation, NULL, 0, - STGM_WRITE|STGM_SHARE_EXCLUSIVE, &ps ); - ok(r == STG_E_INVALIDFLAG, "created property set storage\n"); - - r = IPropertySetStorage_Create( propset, &FMTID_SummaryInformation, NULL, 0, - STGM_CREATE|STGM_WRITE|STGM_SHARE_EXCLUSIVE, &ps ); - ok(r == STG_E_INVALIDFLAG, "created property set storage\n"); - - /* now try really creating a property set */ - r = IPropertySetStorage_Create( propset, &FMTID_SummaryInformation, NULL, 0, - STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &ps ); - ok(r == S_OK, "failed to create property set storage\n"); - - if( ps ) - IPropertyStorage_Release(ps); - - /* now try creating the same thing again */ - r = IPropertySetStorage_Create( propset, &FMTID_SummaryInformation, NULL, 0, - STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &ps ); - ok(r == S_OK, "failed to create property set storage\n"); - if( ps ) - IPropertyStorage_Release(ps); - - /* should be able to open it */ - r = IPropertySetStorage_Open( propset, &FMTID_SummaryInformation, - STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &ps); - ok(r == S_OK, "open failed\n"); - if(r == S_OK) - IPropertyStorage_Release(ps); - - /* delete it */ - r = IPropertySetStorage_Delete( propset, &FMTID_SummaryInformation ); - ok(r == S_OK, "failed to delete property set storage\n"); - - /* try opening with an invalid FMTID */ - r = IPropertySetStorage_Open( propset, NULL, - STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &ps); - ok(r == E_INVALIDARG, "open succeeded\n"); - if(r == S_OK) - IPropertyStorage_Release(ps); - - /* try a bad guid */ - r = IPropertySetStorage_Open( propset, &IID_IStorage, - STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &ps); - ok(r == STG_E_FILENOTFOUND, "open succeeded\n"); - if(r == S_OK) - IPropertyStorage_Release(ps); - - - /* try some invalid flags */ - r = IPropertySetStorage_Open( propset, &FMTID_SummaryInformation, - STGM_CREATE | STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &ps); - ok(r == STG_E_INVALIDFLAG, "open succeeded\n"); - if(r == S_OK) - IPropertyStorage_Release(ps); - - /* after deleting it, it should be gone */ - r = IPropertySetStorage_Open( propset, &FMTID_SummaryInformation, - STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &ps); - ok(r == STG_E_FILENOTFOUND, "open failed\n"); - if(r == S_OK) - IPropertyStorage_Release(ps); - - r = IPropertySetStorage_Release( propset ); - ok(r == 1, "ref count wrong\n"); - - r = IStorage_Release(stg); - ok(r == 0, "ref count wrong\n"); - - DeleteFileW(filename); -} - -static void test_storage_refcount(void) -{ - static const WCHAR szPrefix[] = { 's','t','g',0 }; - static const WCHAR szDot[] = { '.',0 }; - WCHAR filename[MAX_PATH]; - IStorage *stg = NULL; - IStorage *stgprio = NULL; - HRESULT r; - IStream *stm = NULL; - static const WCHAR stmname[] = { 'C','O','N','T','E','N','T','S',0 }; - LARGE_INTEGER pos; - ULARGE_INTEGER upos; - STATSTG stat; - char buffer[10]; - - if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) - return; - - DeleteFileW(filename); - - /* create the file */ - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | - STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - - r = WriteClassStg( stg, &test_stg_cls ); - ok( r == S_OK, "WriteClassStg failed\n"); - - r = IStorage_Commit( stg, STGC_DEFAULT ); - ok( r == S_OK, "IStorage_Commit failed\n"); - - /* now create a stream */ - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==S_OK, "IStorage->CreateStream failed\n"); - - r = IStorage_Release( stg ); - ok (r == 0, "storage not released\n"); - - pos.QuadPart = 0; - r = IStream_Seek( stm, pos, 0, &upos ); - ok (r == STG_E_REVERTED, "seek should fail\n"); - - r = IStream_Stat( stm, &stat, STATFLAG_DEFAULT ); - ok (r == STG_E_REVERTED, "stat should fail\n"); - - r = IStream_Write( stm, "Test string", strlen("Test string"), NULL); - ok (r == STG_E_REVERTED, "IStream_Write should return STG_E_REVERTED instead of 0x%08x\n", r); - - r = IStream_Read( stm, buffer, sizeof(buffer), NULL); - ok (r == STG_E_REVERTED, "IStream_Read should return STG_E_REVERTED instead of 0x%08x\n", r); - - r = IStream_Release(stm); - ok (r == 0, "stream not released\n"); - - /* tests that STGM_PRIORITY doesn't prevent readwrite access from other - * StgOpenStorage calls in transacted mode */ - r = StgOpenStorage( filename, NULL, STGM_PRIORITY, NULL, 0, &stgprio); - ok(r==S_OK, "StgOpenStorage failed with error 0x%08x\n", r); - - todo_wine { - /* non-transacted mode read/write fails */ - r = StgOpenStorage( filename, NULL, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, NULL, 0, &stg); - ok(r==STG_E_LOCKVIOLATION, "StgOpenStorage should return STG_E_LOCKVIOLATION instead of 0x%08x\n", r); - } - - /* non-transacted mode read-only succeeds */ - r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_WRITE|STGM_READ, NULL, 0, &stg); - ok(r==S_OK, "StgOpenStorage failed with error 0x%08x\n", r); - IStorage_Release(stg); - - r = StgOpenStorage( filename, NULL, STGM_TRANSACTED|STGM_SHARE_DENY_WRITE|STGM_READWRITE, NULL, 0, &stg); - ok(r==S_OK, "StgOpenStorage failed with error 0x%08x\n", r); - if(stg) - { - static const WCHAR stgname[] = { ' ',' ',' ','2','9',0 }; - static const WCHAR stgname2[] = { 'C','V','_','i','e','w',0 }; - static const WCHAR stmname2[] = { 'V','a','r','2','D','a','t','a',0 }; - IStorage *stg2; - IStorage *stg3; - STATSTG statstg; - - r = IStorage_Stat( stg, &statstg, STATFLAG_NONAME ); - ok(r == S_OK, "Stat should have succeded instead of returning 0x%08x\n", r); - ok(statstg.type == STGTY_STORAGE, "Statstg type should have been STGTY_STORAGE instead of %d\n", statstg.type); - ok(U(statstg.cbSize).LowPart == 0, "Statstg cbSize.LowPart should have been 0 instead of %d\n", U(statstg.cbSize).LowPart); - ok(U(statstg.cbSize).HighPart == 0, "Statstg cbSize.HighPart should have been 0 instead of %d\n", U(statstg.cbSize).HighPart); - ok(statstg.grfMode == (STGM_TRANSACTED|STGM_SHARE_DENY_WRITE|STGM_READWRITE), - "Statstg grfMode should have been 0x10022 instead of 0x%x\n", statstg.grfMode); - ok(statstg.grfLocksSupported == 0, "Statstg grfLocksSupported should have been 0 instead of %d\n", statstg.grfLocksSupported); - ok(IsEqualCLSID(&statstg.clsid, &test_stg_cls), "Statstg clsid is not test_stg_cls\n"); - ok(statstg.grfStateBits == 0, "Statstg grfStateBits should have been 0 instead of %d\n", statstg.grfStateBits); - ok(statstg.reserved == 0, "Statstg reserved should have been 0 instead of %d\n", statstg.reserved); - - r = IStorage_CreateStorage( stg, stgname, STGM_SHARE_EXCLUSIVE, 0, 0, &stg2 ); - ok(r == S_OK, "CreateStorage should have succeeded instead of returning 0x%08x\n", r); - - r = IStorage_Stat( stg2, &statstg, STATFLAG_DEFAULT ); - ok(r == S_OK, "Stat should have succeded instead of returning 0x%08x\n", r); - ok(!lstrcmpW(statstg.pwcsName, stgname), - "Statstg pwcsName should have been the name the storage was created with\n"); - ok(statstg.type == STGTY_STORAGE, "Statstg type should have been STGTY_STORAGE instead of %d\n", statstg.type); - ok(U(statstg.cbSize).LowPart == 0, "Statstg cbSize.LowPart should have been 0 instead of %d\n", U(statstg.cbSize).LowPart); - ok(U(statstg.cbSize).HighPart == 0, "Statstg cbSize.HighPart should have been 0 instead of %d\n", U(statstg.cbSize).HighPart); - ok(statstg.grfMode == STGM_SHARE_EXCLUSIVE, - "Statstg grfMode should have been STGM_SHARE_EXCLUSIVE instead of 0x%x\n", statstg.grfMode); - ok(statstg.grfLocksSupported == 0, "Statstg grfLocksSupported should have been 0 instead of %d\n", statstg.grfLocksSupported); - ok(IsEqualCLSID(&statstg.clsid, &CLSID_NULL), "Statstg clsid is not CLSID_NULL\n"); - ok(statstg.grfStateBits == 0, "Statstg grfStateBits should have been 0 instead of %d\n", statstg.grfStateBits); - ok(statstg.reserved == 0, "Statstg reserved should have been 0 instead of %d\n", statstg.reserved); - CoTaskMemFree(statstg.pwcsName); - - r = IStorage_CreateStorage( stg2, stgname2, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, 0, &stg3 ); - ok(r == STG_E_ACCESSDENIED, "CreateStorage should have returned STG_E_ACCESSDENIED instead of 0x%08x\n", r); - - r = IStorage_CreateStream( stg2, stmname2, STGM_CREATE|STGM_SHARE_EXCLUSIVE, 0, 0, &stm ); - ok(r == STG_E_ACCESSDENIED, "CreateStream should have returned STG_E_ACCESSDENIED instead of 0x%08x\n", r); - - IStorage_Release(stg2); - - r = IStorage_Release(stg); - ok(r == 0, "wrong ref count\n"); - } - IStorage_Release(stgprio); - - DeleteFileW(filename); -} - -static void test_streamenum(void) -{ - static const WCHAR szPrefix[] = { 's','t','g',0 }; - static const WCHAR szDot[] = { '.',0 }; - WCHAR filename[MAX_PATH]; - IStorage *stg = NULL; - HRESULT r; - IStream *stm = NULL; - static const WCHAR stmname[] = { 'C','O','N','T','E','N','T','S',0 }; - STATSTG stat; - IEnumSTATSTG *ee = NULL; - ULONG count; - - if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) - return; - - DeleteFileW(filename); - - /* create the file */ - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | - STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - - r = WriteClassStg( stg, &test_stg_cls ); - ok( r == S_OK, "WriteClassStg failed\n"); - - r = IStorage_Commit( stg, STGC_DEFAULT ); - ok( r == S_OK, "IStorage_Commit failed\n"); - - /* now create a stream */ - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==S_OK, "IStorage->CreateStream failed\n"); - - r = IStream_Release(stm); - - /* first enum ... should be 1 stream */ - r = IStorage_EnumElements(stg, 0, NULL, 0, &ee); - ok(r==S_OK, "IStorage->EnumElements failed\n"); - - count = 0xf00; - r = IEnumSTATSTG_Next(ee, 1, &stat, &count); - ok(r==S_OK, "IEnumSTATSTG->Next failed\n"); - ok(count == 1, "count wrong\n"); - - r = IEnumSTATSTG_Release(ee); - - /* second enum... destroy the stream before reading */ - r = IStorage_EnumElements(stg, 0, NULL, 0, &ee); - ok(r==S_OK, "IStorage->EnumElements failed\n"); - - r = IStorage_DestroyElement(stg, stmname); - ok(r==S_OK, "IStorage->EnumElements failed\n"); - - todo_wine { - count = 0xf00; - r = IEnumSTATSTG_Next(ee, 1, &stat, &count); - ok(r==S_FALSE, "IEnumSTATSTG->Next failed\n"); - ok(count == 0, "count wrong\n"); - } - - /* reset and try again */ - r = IEnumSTATSTG_Reset(ee); - ok(r==S_OK, "IEnumSTATSTG->Reset failed\n"); - - count = 0xf00; - r = IEnumSTATSTG_Next(ee, 1, &stat, &count); - ok(r==S_FALSE, "IEnumSTATSTG->Next failed\n"); - ok(count == 0, "count wrong\n"); - - r = IEnumSTATSTG_Release(ee); - ok (r == 0, "enum not released\n"); - - r = IStorage_Release( stg ); - ok (r == 0, "storage not released\n"); - - DeleteFileW(filename); -} - -static void test_transact(void) -{ - static const WCHAR szPrefix[] = { 's','t','g',0 }; - static const WCHAR szDot[] = { '.',0 }; - WCHAR filename[MAX_PATH]; - IStorage *stg = NULL, *stg2 = NULL; - HRESULT r; - IStream *stm = NULL; - static const WCHAR stmname[] = { 'C','O','N','T','E','N','T','S',0 }; - static const WCHAR stmname2[] = { 'F','O','O',0 }; - - if(!GetTempFileNameW(szDot, szPrefix, 0, filename)) - return; - - DeleteFileW(filename); - - /* create the file */ - r = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | - STGM_READWRITE |STGM_TRANSACTED, 0, &stg); - ok(r==S_OK, "StgCreateDocfile failed\n"); - - /* now create a stream, but don't commit it */ - r = IStorage_CreateStream(stg, stmname2, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==S_OK, "IStorage->CreateStream failed\n"); - - r = IStream_Write(stm, "this is stream 1\n", 16, NULL); - ok(r==S_OK, "IStream->Write failed\n"); - - r = IStream_Release(stm); - - r = IStorage_Commit(stg, 0); - ok(r==S_OK, "IStorage->Commit failed\n"); - - /* now create a stream, but don't commit it */ - stm = NULL; - r = IStorage_CreateStream(stg, stmname, STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, 0, &stm ); - ok(r==S_OK, "IStorage->CreateStream failed\n"); - - r = IStream_Write(stm, "this is stream 2\n", 16, NULL); - ok(r==S_OK, "IStream->Write failed\n"); - - r = IStream_Commit(stm, STGC_ONLYIFCURRENT | STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE); - ok(r==S_OK, "IStream->Commit failed\n"); - - r = IStream_Release(stm); - - IStorage_Release(stg); - - stm = NULL; - stg = NULL; - r = StgOpenStorage( filename, NULL, STGM_SHARE_DENY_NONE | STGM_READ | STGM_TRANSACTED, NULL, 0, &stg); - ok(r==S_OK, "StgOpenStorage failed\n"); - - if (!stg) - return; - - r = IStorage_OpenStream(stg, stmname, NULL, STGM_SHARE_DENY_NONE|STGM_READ, 0, &stm ); - ok(r==STG_E_INVALIDFLAG, "IStorage->OpenStream failed %08x\n", r); - - r = IStorage_OpenStream(stg, stmname, NULL, STGM_DELETEONRELEASE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm ); - ok(r==STG_E_INVALIDFUNCTION, "IStorage->OpenStream failed %08x\n", r); - - r = IStorage_OpenStream(stg, stmname, NULL, STGM_TRANSACTED|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm ); - ok(r==STG_E_INVALIDFUNCTION, "IStorage->OpenStream failed %08x\n", r); - - r = IStorage_OpenStorage(stg, stmname, NULL, STGM_TRANSACTED|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, NULL, 0, &stg2 ); - ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream failed %08x\n", r); - - todo_wine { - r = IStorage_OpenStream(stg, stmname, NULL, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm ); - ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream should fail %08x\n", r); - } - if (stm) - r = IStream_Release(stm); - - r = IStorage_OpenStorage(stg, stmname2, NULL, STGM_TRANSACTED|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, NULL, 0, &stg2 ); - ok(r==STG_E_FILENOTFOUND, "IStorage->OpenStream failed %08x\n", r); - - r = IStorage_OpenStream(stg, stmname2, NULL, STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &stm ); - ok(r==S_OK, "IStorage->OpenStream should fail %08x\n", r); - if (stm) - r = IStream_Release(stm); - - IStorage_Release(stg); - - r = DeleteFileW(filename); - ok( r == TRUE, "deleted file\n"); -} - -static void test_ReadClassStm(void) -{ - CLSID clsid; - HRESULT hr; - IStream *pStream; - static const LARGE_INTEGER llZero; - - hr = ReadClassStm(NULL, &clsid); - ok(hr == E_INVALIDARG, "ReadClassStm should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - hr = WriteClassStm(pStream, &test_stg_cls); - ok_ole_success(hr, "WriteClassStm"); - - hr = ReadClassStm(pStream, NULL); - ok(hr == E_INVALIDARG, "ReadClassStm should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - /* test not rewound stream */ - hr = ReadClassStm(pStream, &clsid); - ok(hr == STG_E_READFAULT, "ReadClassStm should have returned STG_E_READFAULT instead of 0x%08x\n", hr); - ok(IsEqualCLSID(&clsid, &CLSID_NULL), "clsid should have been zeroed\n"); - - hr = IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - ok_ole_success(hr, "IStream_Seek"); - hr = ReadClassStm(pStream, &clsid); - ok_ole_success(hr, "ReadClassStm"); - ok(IsEqualCLSID(&clsid, &test_stg_cls), "clsid should have been set to CLSID_WineTest\n"); -} - -struct access_res -{ - BOOL gothandle; - DWORD lasterr; -}; - -static const struct access_res create[16] = -{ - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { TRUE, ERROR_SUCCESS }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { TRUE, ERROR_SUCCESS }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { TRUE, ERROR_SUCCESS } -}; - -static const struct access_res create_commit[16] = -{ - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { TRUE, ERROR_SUCCESS }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { TRUE, ERROR_SUCCESS }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { FALSE, ERROR_SHARING_VIOLATION }, - { TRUE, ERROR_SUCCESS } -}; - -static const struct access_res create_close[16] = -{ - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS }, - { TRUE, ERROR_SUCCESS } -}; - -static void _test_file_access(LPCSTR file, const struct access_res *ares, DWORD line) -{ - DWORD access = 0, share = 0; - DWORD lasterr; - HANDLE hfile; - int i, j, idx = 0; - - for (i = 0; i < 4; i++) - { - if (i == 0) access = 0; - if (i == 1) access = GENERIC_READ; - if (i == 2) access = GENERIC_WRITE; - if (i == 3) access = GENERIC_READ | GENERIC_WRITE; - - for (j = 0; j < 4; j++) - { - if (j == 0) share = 0; - if (j == 1) share = FILE_SHARE_READ; - if (j == 2) share = FILE_SHARE_WRITE; - if (j == 3) share = FILE_SHARE_READ | FILE_SHARE_WRITE; - - SetLastError(0xdeadbeef); - hfile = CreateFileA(file, access, share, NULL, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, 0); - lasterr = GetLastError(); - - ok((hfile != INVALID_HANDLE_VALUE) == ares[idx].gothandle, - "(%d, handle, %d): Expected %d, got %d\n", - line, idx, ares[idx].gothandle, - (hfile != INVALID_HANDLE_VALUE)); - - ok(lasterr == ares[idx].lasterr, - "(%d, lasterr, %d): Expected %d, got %d\n", - line, idx, ares[idx].lasterr, lasterr); - - CloseHandle(hfile); - idx++; - } - } -} - -#define test_file_access(file, ares) _test_file_access(file, ares, __LINE__) - -static void test_access(void) -{ - IStorage *stg; - HRESULT hr; - - static const WCHAR fileW[] = {'w','i','n','e','t','e','s','t',0}; - - /* STGM_TRANSACTED */ - - hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | - STGM_SHARE_EXCLUSIVE | STGM_TRANSACTED, 0, &stg); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create); - - hr = IStorage_Commit(stg, STGC_DEFAULT); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create_commit); - - IStorage_Release(stg); - - test_file_access("winetest", create_close); - - DeleteFileA("winetest"); - - /* STGM_DIRECT */ - - hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | - STGM_SHARE_EXCLUSIVE | STGM_DIRECT, 0, &stg); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create); - - hr = IStorage_Commit(stg, STGC_DEFAULT); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create_commit); - - IStorage_Release(stg); - - test_file_access("winetest", create_close); - - DeleteFileA("winetest"); - - /* STGM_SHARE_DENY_NONE */ - - hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | - STGM_SHARE_DENY_NONE | STGM_TRANSACTED, 0, &stg); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create); - - hr = IStorage_Commit(stg, STGC_DEFAULT); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create_commit); - - IStorage_Release(stg); - - test_file_access("winetest", create_close); - - DeleteFileA("winetest"); - - /* STGM_SHARE_DENY_READ */ - - hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | - STGM_SHARE_DENY_READ | STGM_TRANSACTED, 0, &stg); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create); - - hr = IStorage_Commit(stg, STGC_DEFAULT); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create_commit); - - IStorage_Release(stg); - - test_file_access("winetest", create_close); - - DeleteFileA("winetest"); - - /* STGM_SHARE_DENY_WRITE */ - - hr = StgCreateDocfile(fileW, STGM_CREATE | STGM_READWRITE | - STGM_SHARE_DENY_WRITE | STGM_TRANSACTED, 0, &stg); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create); - - hr = IStorage_Commit(stg, STGC_DEFAULT); - ok(hr == S_OK, "Expected S_OK, got %08x\n", hr); - - test_file_access("winetest", create_commit); - - IStorage_Release(stg); - - test_file_access("winetest", create_close); - - DeleteFileA("winetest"); -} - -START_TEST(storage32) -{ - test_hglobal_storage_stat(); - test_create_storage_modes(); - test_storage_stream(); - test_open_storage(); - test_storage_suminfo(); - test_storage_refcount(); - test_streamenum(); - test_transact(); - test_ReadClassStm(); - test_access(); -} diff --git a/rostests/winetests/ole32/testlist.c b/rostests/winetests/ole32/testlist.c deleted file mode 100644 index 0d19af299c6..00000000000 --- a/rostests/winetests/ole32/testlist.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_clipboard(void); -extern void func_compobj(void); -extern void func_dragdrop(void); -extern void func_errorinfo(void); -extern void func_hglobalstream(void); -extern void func_marshal(void); -extern void func_moniker(void); -extern void func_ole2(void); -extern void func_propvariant(void); -extern void func_stg_prop(void); -extern void func_storage32(void); -extern void func_usrmarshal(void); - -const struct test winetest_testlist[] = -{ - { "clipboard", func_clipboard }, - { "compobj", func_compobj }, - { "dragdrop", func_dragdrop }, - { "errorinfo", func_errorinfo }, - { "hglobalstream", func_hglobalstream }, - { "marshal", func_marshal }, - { "moniker", func_moniker }, - { "ole2", func_ole2 }, - { "propvariant", func_propvariant }, - { "stg_prop", func_stg_prop }, - { "storage32", func_storage32 }, - { "usrmarshal", func_usrmarshal }, - { 0, 0 } -}; diff --git a/rostests/winetests/ole32/usrmarshal.c b/rostests/winetests/ole32/usrmarshal.c deleted file mode 100644 index 60e85cf5544..00000000000 --- a/rostests/winetests/ole32/usrmarshal.c +++ /dev/null @@ -1,494 +0,0 @@ -/* - * User Marshaling Tests - * - * Copyright 2004-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 - */ - -#define COBJMACROS -#define CONST_VTABLE -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" -#include "objidl.h" - -#include "wine/test.h" - -ULONG __RPC_USER HMETAFILE_UserSize(ULONG *, unsigned long, HMETAFILE *); -unsigned char * __RPC_USER HMETAFILE_UserMarshal(ULONG *, unsigned char *, HMETAFILE *); -unsigned char * __RPC_USER HMETAFILE_UserUnmarshal(ULONG *, unsigned char *, HMETAFILE *); -void __RPC_USER HMETAFILE_UserFree(ULONG *, HMETAFILE *); - -static const char cf_marshaled[] = -{ - 0x9, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x9, 0x0, 0x0, 0x0, - 'M', 0x0, 'y', 0x0, - 'F', 0x0, 'o', 0x0, - 'r', 0x0, 'm', 0x0, - 'a', 0x0, 't', 0x0, - 0x0, 0x0 -}; - -static void test_marshal_CLIPFORMAT(void) -{ - unsigned char *buffer; - ULONG size; - ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION); - wireCLIPFORMAT wirecf; - CLIPFORMAT cf = RegisterClipboardFormatA("MyFormat"); - CLIPFORMAT cf2; - - size = CLIPFORMAT_UserSize(&flags, 0, &cf); - ok(size == sizeof(*wirecf) + sizeof(cf_marshaled), "Wrong size %d\n", size); - - buffer = HeapAlloc(GetProcessHeap(), 0, size); - CLIPFORMAT_UserMarshal(&flags, buffer, &cf); - wirecf = (wireCLIPFORMAT)buffer; - ok(wirecf->fContext == WDT_REMOTE_CALL, "Context should be WDT_REMOTE_CALL instead of 0x%08lx\n", wirecf->fContext); - ok(wirecf->u.dwValue == cf, "Marshaled value should be 0x%04x instead of 0x%04x\n", cf, wirecf->u.dwValue); - ok(!memcmp(wirecf+1, cf_marshaled, sizeof(cf_marshaled)), "Marshaled data differs\n"); - - CLIPFORMAT_UserUnmarshal(&flags, buffer, &cf2); - ok(cf == cf2, "Didn't unmarshal properly\n"); - HeapFree(GetProcessHeap(), 0, buffer); - - CLIPFORMAT_UserFree(&flags, &cf2); -} - -static void test_marshal_HWND(void) -{ - unsigned char *buffer; - ULONG size; - ULONG flags = MAKELONG(MSHCTX_LOCAL, NDR_LOCAL_DATA_REPRESENTATION); - HWND hwnd = GetDesktopWindow(); - HWND hwnd2; - wireHWND wirehwnd; - - size = HWND_UserSize(&flags, 0, &hwnd); - ok(size == sizeof(*wirehwnd), "Wrong size %d\n", size); - - buffer = HeapAlloc(GetProcessHeap(), 0, size); - HWND_UserMarshal(&flags, buffer, &hwnd); - wirehwnd = (wireHWND)buffer; - ok(wirehwnd->fContext == WDT_INPROC_CALL, "Context should be WDT_INPROC_CALL instead of 0x%08lx\n", wirehwnd->fContext); - ok(wirehwnd->u.hInproc == (LONG_PTR)hwnd, "Marshaled value should be %p instead of %p\n", hwnd, (HANDLE)wirehwnd->u.hRemote); - - HWND_UserUnmarshal(&flags, buffer, &hwnd2); - ok(hwnd == hwnd2, "Didn't unmarshal properly\n"); - HeapFree(GetProcessHeap(), 0, buffer); - - HWND_UserFree(&flags, &hwnd2); -} - -static void test_marshal_HGLOBAL(void) -{ - unsigned char *buffer; - ULONG size; - ULONG flags = MAKELONG(MSHCTX_LOCAL, NDR_LOCAL_DATA_REPRESENTATION); - HGLOBAL hglobal; - HGLOBAL hglobal2; - unsigned char *wirehglobal; - int i; - - hglobal = NULL; - flags = MAKELONG(MSHCTX_LOCAL, NDR_LOCAL_DATA_REPRESENTATION); - size = HGLOBAL_UserSize(&flags, 0, &hglobal); - /* native is poorly programmed and allocates 4 bytes more than it needs to - * here - Wine doesn't have to emulate that */ - ok((size == 8) || (size == 12), "Size should be 12, instead of %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - HGLOBAL_UserMarshal(&flags, buffer, &hglobal); - wirehglobal = buffer; - ok(*(ULONG *)wirehglobal == WDT_REMOTE_CALL, "Context should be WDT_REMOTE_CALL instead of 0x%08x\n", *(ULONG *)wirehglobal); - wirehglobal += sizeof(ULONG); - ok(*(ULONG *)wirehglobal == (ULONG)hglobal, "buffer+4 should be HGLOBAL\n"); - HGLOBAL_UserUnmarshal(&flags, buffer, &hglobal2); - ok(hglobal2 == hglobal, "Didn't unmarshal properly\n"); - HeapFree(GetProcessHeap(), 0, buffer); - HGLOBAL_UserFree(&flags, &hglobal2); - - hglobal = GlobalAlloc(0, 4); - buffer = GlobalLock(hglobal); - for (i = 0; i < 4; i++) - buffer[i] = i; - GlobalUnlock(hglobal); - flags = MAKELONG(MSHCTX_LOCAL, NDR_LOCAL_DATA_REPRESENTATION); - size = HGLOBAL_UserSize(&flags, 0, &hglobal); - /* native is poorly programmed and allocates 4 bytes more than it needs to - * here - Wine doesn't have to emulate that */ - ok((size == 24) || (size == 28), "Size should be 24 or 28, instead of %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - HGLOBAL_UserMarshal(&flags, buffer, &hglobal); - wirehglobal = buffer; - ok(*(ULONG *)wirehglobal == WDT_REMOTE_CALL, "Context should be WDT_REMOTE_CALL instead of 0x%08x\n", *(ULONG *)wirehglobal); - wirehglobal += sizeof(ULONG); - ok(*(ULONG *)wirehglobal == (ULONG)hglobal, "buffer+0x4 should be HGLOBAL\n"); - wirehglobal += sizeof(ULONG); - ok(*(ULONG *)wirehglobal == 4, "buffer+0x8 should be size of HGLOBAL\n"); - wirehglobal += sizeof(ULONG); - ok(*(ULONG *)wirehglobal == (ULONG)hglobal, "buffer+0xc should be HGLOBAL\n"); - wirehglobal += sizeof(ULONG); - ok(*(ULONG *)wirehglobal == 4, "buffer+0x10 should be size of HGLOBAL\n"); - wirehglobal += sizeof(ULONG); - for (i = 0; i < 4; i++) - ok(wirehglobal[i] == i, "buffer+0x%x should be %d\n", 0x10 + i, i); - HGLOBAL_UserUnmarshal(&flags, buffer, &hglobal2); - ok(hglobal2 != NULL, "Didn't unmarshal properly\n"); - HeapFree(GetProcessHeap(), 0, buffer); - HGLOBAL_UserFree(&flags, &hglobal2); - GlobalFree(hglobal); -} - -static HENHMETAFILE create_emf(void) -{ - RECT rect = {0, 0, 100, 100}; - HDC hdc = CreateEnhMetaFile(NULL, NULL, &rect, "HENHMETAFILE Marshaling Test\0Test\0\0"); - ExtTextOut(hdc, 0, 0, ETO_OPAQUE, NULL, "Test String", strlen("Test String"), NULL); - return CloseEnhMetaFile(hdc); -} - -static void test_marshal_HENHMETAFILE(void) -{ - unsigned char *buffer; - ULONG size; - ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION); - HENHMETAFILE hemf; - HENHMETAFILE hemf2 = NULL; - unsigned char *wirehemf; - - hemf = create_emf(); - - size = HENHMETAFILE_UserSize(&flags, 0, &hemf); - ok(size > 20, "size should be at least 20 bytes, not %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - HENHMETAFILE_UserMarshal(&flags, buffer, &hemf); - wirehemf = buffer; - ok(*(DWORD *)wirehemf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehemf); - wirehemf += sizeof(DWORD); - ok(*(DWORD *)wirehemf == (DWORD)(DWORD_PTR)hemf, "wirestgm + 0x4 should be hemf instead of 0x%08x\n", *(DWORD *)wirehemf); - wirehemf += sizeof(DWORD); - ok(*(DWORD *)wirehemf == (size - 0x10), "wirestgm + 0x8 should be size - 0x10 instead of 0x%08x\n", *(DWORD *)wirehemf); - wirehemf += sizeof(DWORD); - ok(*(DWORD *)wirehemf == (size - 0x10), "wirestgm + 0xc should be size - 0x10 instead of 0x%08x\n", *(DWORD *)wirehemf); - wirehemf += sizeof(DWORD); - ok(*(DWORD *)wirehemf == EMR_HEADER, "wirestgm + 0x10 should be EMR_HEADER instead of %d\n", *(DWORD *)wirehemf); - wirehemf += sizeof(DWORD); - /* ... rest of data not tested - refer to tests for GetEnhMetaFileBits - * at this point */ - - HENHMETAFILE_UserUnmarshal(&flags, buffer, &hemf2); - ok(hemf2 != NULL, "HENHMETAFILE didn't unmarshal\n"); - HeapFree(GetProcessHeap(), 0, buffer); - HENHMETAFILE_UserFree(&flags, &hemf2); - DeleteEnhMetaFile(hemf); - - /* test NULL emf */ - hemf = NULL; - - size = HENHMETAFILE_UserSize(&flags, 0, &hemf); - ok(size == 8, "size should be 8 bytes, not %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - HENHMETAFILE_UserMarshal(&flags, buffer, &hemf); - wirehemf = buffer; - ok(*(DWORD *)wirehemf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehemf); - wirehemf += sizeof(DWORD); - ok(*(DWORD *)wirehemf == (DWORD)(DWORD_PTR)hemf, "wirestgm + 0x4 should be hemf instead of 0x%08x\n", *(DWORD *)wirehemf); - wirehemf += sizeof(DWORD); - - HENHMETAFILE_UserUnmarshal(&flags, buffer, &hemf2); - ok(hemf2 == NULL, "NULL HENHMETAFILE didn't unmarshal\n"); - HeapFree(GetProcessHeap(), 0, buffer); - HENHMETAFILE_UserFree(&flags, &hemf2); -} - -static HMETAFILE create_mf(void) -{ - RECT rect = {0, 0, 100, 100}; - HDC hdc = CreateMetaFile(NULL); - ExtTextOut(hdc, 0, 0, ETO_OPAQUE, &rect, "Test String", strlen("Test String"), NULL); - return CloseMetaFile(hdc); -} - -static void test_marshal_HMETAFILE(void) -{ - unsigned char *buffer; - ULONG size; - ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION); - HMETAFILE hmf; - HMETAFILE hmf2 = NULL; - unsigned char *wirehmf; - - hmf = create_mf(); - - size = HMETAFILE_UserSize(&flags, 0, &hmf); - ok(size > 20, "size should be at least 20 bytes, not %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - HMETAFILE_UserMarshal(&flags, buffer, &hmf); - wirehmf = buffer; - ok(*(DWORD *)wirehmf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmf); - wirehmf += sizeof(DWORD); - ok(*(DWORD *)wirehmf == (DWORD)(DWORD_PTR)hmf, "wirestgm + 0x4 should be hmf instead of 0x%08x\n", *(DWORD *)wirehmf); - wirehmf += sizeof(DWORD); - ok(*(DWORD *)wirehmf == (size - 0x10), "wirestgm + 0x8 should be size - 0x10 instead of 0x%08x\n", *(DWORD *)wirehmf); - wirehmf += sizeof(DWORD); - ok(*(DWORD *)wirehmf == (size - 0x10), "wirestgm + 0xc should be size - 0x10 instead of 0x%08x\n", *(DWORD *)wirehmf); - wirehmf += sizeof(DWORD); - ok(*(WORD *)wirehmf == 1, "wirestgm + 0x10 should be 1 instead of 0x%08x\n", *(DWORD *)wirehmf); - wirehmf += sizeof(DWORD); - /* ... rest of data not tested - refer to tests for GetMetaFileBits - * at this point */ - - HMETAFILE_UserUnmarshal(&flags, buffer, &hmf2); - ok(hmf2 != NULL, "HMETAFILE didn't unmarshal\n"); - HeapFree(GetProcessHeap(), 0, buffer); - HMETAFILE_UserFree(&flags, &hmf2); - DeleteMetaFile(hmf); - - /* test NULL emf */ - hmf = NULL; - - size = HMETAFILE_UserSize(&flags, 0, &hmf); - ok(size == 8, "size should be 8 bytes, not %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - HMETAFILE_UserMarshal(&flags, buffer, &hmf); - wirehmf = buffer; - ok(*(DWORD *)wirehmf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmf); - wirehmf += sizeof(DWORD); - ok(*(DWORD *)wirehmf == (DWORD)(DWORD_PTR)hmf, "wirestgm + 0x4 should be hmf instead of 0x%08x\n", *(DWORD *)wirehmf); - wirehmf += sizeof(DWORD); - - HMETAFILE_UserUnmarshal(&flags, buffer, &hmf2); - ok(hmf2 == NULL, "NULL HMETAFILE didn't unmarshal\n"); - HeapFree(GetProcessHeap(), 0, buffer); - HMETAFILE_UserFree(&flags, &hmf2); -} - -#define USER_MARSHAL_PTR_PREFIX \ - ( (DWORD)'U' | ( (DWORD)'s' << 8 ) | \ - ( (DWORD)'e' << 16 ) | ( (DWORD)'r' << 24 ) ) - -static void test_marshal_HMETAFILEPICT(void) -{ - unsigned char *buffer, *buffer_end; - ULONG size; - ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION); - HMETAFILEPICT hmfp; - HMETAFILEPICT hmfp2 = NULL; - METAFILEPICT *pmfp; - unsigned char *wirehmfp; - - hmfp = GlobalAlloc(GMEM_MOVEABLE, sizeof(*pmfp)); - pmfp = GlobalLock(hmfp); - pmfp->mm = MM_ISOTROPIC; - pmfp->xExt = 1; - pmfp->yExt = 2; - pmfp->hMF = create_mf(); - GlobalUnlock(hmfp); - - size = HMETAFILEPICT_UserSize(&flags, 0, &hmfp); - ok(size > 20, "size should be at least 20 bytes, not %d\n", size); - trace("size is %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - buffer_end = HMETAFILEPICT_UserMarshal(&flags, buffer, &hmfp); - wirehmfp = buffer; - ok(*(DWORD *)wirehmfp == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(DWORD *)wirehmfp == (DWORD)(DWORD_PTR)hmfp, "wirestgm + 0x4 should be hmf instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(DWORD *)wirehmfp == MM_ISOTROPIC, "wirestgm + 0x8 should be MM_ISOTROPIC instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(DWORD *)wirehmfp == 1, "wirestgm + 0xc should be 1 instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(DWORD *)wirehmfp == 2, "wirestgm + 0x10 should be 2 instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(DWORD *)wirehmfp == USER_MARSHAL_PTR_PREFIX, "wirestgm + 0x14 should be \"User\" instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(DWORD *)wirehmfp == WDT_REMOTE_CALL, "wirestgm + 0x18 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - pmfp = GlobalLock(hmfp); - ok(*(DWORD *)wirehmfp == (DWORD)(DWORD_PTR)pmfp->hMF, "wirestgm + 0x1c should be pmfp->hMF instead of 0x%08x\n", *(DWORD *)wirehmfp); - GlobalUnlock(hmfp); - wirehmfp += sizeof(DWORD); - /* Note use (buffer_end - buffer) instead of size here, because size is an - * overestimate with native */ - ok(*(DWORD *)wirehmfp == (buffer_end - buffer - 0x28), "wirestgm + 0x20 should be size - 0x34 instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(DWORD *)wirehmfp == (buffer_end - buffer - 0x28), "wirestgm + 0x24 should be size - 0x34 instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(WORD *)wirehmfp == 1, "wirehmfp + 0x28 should be 1 instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - /* ... rest of data not tested - refer to tests for GetMetaFileBits - * at this point */ - - HMETAFILEPICT_UserUnmarshal(&flags, buffer, &hmfp2); - ok(hmfp2 != NULL, "HMETAFILEPICT didn't unmarshal\n"); - HeapFree(GetProcessHeap(), 0, buffer); - HMETAFILEPICT_UserFree(&flags, &hmfp2); - pmfp = GlobalLock(hmfp); - DeleteMetaFile(pmfp->hMF); - GlobalUnlock(hmfp); - GlobalFree(hmfp); - - /* test NULL emf */ - hmfp = NULL; - - size = HMETAFILEPICT_UserSize(&flags, 0, &hmfp); - ok(size == 8, "size should be 8 bytes, not %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - HMETAFILEPICT_UserMarshal(&flags, buffer, &hmfp); - wirehmfp = buffer; - ok(*(DWORD *)wirehmfp == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - ok(*(DWORD *)wirehmfp == (DWORD)(DWORD_PTR)hmfp, "wirestgm + 0x4 should be hmf instead of 0x%08x\n", *(DWORD *)wirehmfp); - wirehmfp += sizeof(DWORD); - - hmfp2 = NULL; - HMETAFILEPICT_UserUnmarshal(&flags, buffer, &hmfp2); - ok(hmfp2 == NULL, "NULL HMETAFILE didn't unmarshal\n"); - HeapFree(GetProcessHeap(), 0, buffer); - HMETAFILEPICT_UserFree(&flags, &hmfp2); -} - -static HRESULT WINAPI Test_IUnknown_QueryInterface( - LPUNKNOWN iface, - REFIID riid, - LPVOID *ppvObj) -{ - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown)) - { - *ppvObj = (LPVOID)iface; - IUnknown_AddRef(iface); - return S_OK; - } - - *ppvObj = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Test_IUnknown_AddRef(LPUNKNOWN iface) -{ - return 2; /* non-heap-based object */ -} - -static ULONG WINAPI Test_IUnknown_Release(LPUNKNOWN iface) -{ - return 1; /* non-heap-based object */ -} - -static const IUnknownVtbl TestUnknown_Vtbl = -{ - Test_IUnknown_QueryInterface, - Test_IUnknown_AddRef, - Test_IUnknown_Release, -}; - -static IUnknown Test_Unknown = { &TestUnknown_Vtbl }; - -ULONG __RPC_USER WdtpInterfacePointer_UserSize(ULONG *, ULONG, ULONG, IUnknown *, REFIID); -unsigned char * __RPC_USER WdtpInterfacePointer_UserMarshal(ULONG *, ULONG, unsigned char *, IUnknown *, REFIID); -unsigned char * __RPC_USER WdtpInterfacePointer_UserUnmarshal(ULONG *, unsigned char *, IUnknown **, REFIID); -void __RPC_USER WdtpInterfacePointer_UserFree(IUnknown *); - -static void test_marshal_WdtpInterfacePointer(void) -{ - unsigned char *buffer, *buffer_end; - ULONG size; - MIDL_STUB_MESSAGE stubmsg; - USER_MARSHAL_CB umcb; - IUnknown *unk; - IUnknown *unk2; - unsigned char *wireip; - const IID *iid; - - memset(&stubmsg, 0xcc, sizeof(stubmsg)); - stubmsg.dwDestContext = MSHCTX_INPROC; - stubmsg.pvDestContext = NULL; - - memset(&umcb, 0xcc, sizeof(umcb)); - umcb.Flags = MAKELONG(MSHCTX_INPROC, NDR_LOCAL_DATA_REPRESENTATION); - umcb.pStubMsg = &stubmsg; - - /* shows that the WdtpInterfacePointer functions don't marshal anything for - * NULL pointers, so code using these functions must handle that case - * itself */ - unk = NULL; - size = WdtpInterfacePointer_UserSize(&umcb.Flags, umcb.Flags, 0, unk, &IID_IUnknown); - ok(size == 0, "size should be 0 bytes, not %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - buffer_end = WdtpInterfacePointer_UserMarshal(&umcb.Flags, umcb.Flags, buffer, unk, &IID_IUnknown); - wireip = buffer; - HeapFree(GetProcessHeap(), 0, buffer); - - unk = &Test_Unknown; - size = WdtpInterfacePointer_UserSize(&umcb.Flags, umcb.Flags, 0, unk, &IID_IUnknown); - todo_wine - ok(size > 28, "size should be > 28 bytes, not %d\n", size); - trace("WdtpInterfacePointer_UserSize returned %d\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - buffer_end = WdtpInterfacePointer_UserMarshal(&umcb.Flags, umcb.Flags, buffer, unk, &IID_IUnknown); - wireip = buffer; - if (size >= 28) - { - ok(*(DWORD *)wireip == 0x44, "wireip + 0x0 should be 0x44 instead of 0x%08x\n", *(DWORD *)wireip); - wireip += sizeof(DWORD); - ok(*(DWORD *)wireip == 0x44, "wireip + 0x4 should be 0x44 instead of 0x%08x\n", *(DWORD *)wireip); - wireip += sizeof(DWORD); - ok(*(DWORD *)wireip == 0x574f454d /* 'MEOW' */, "wireip + 0x8 should be 0x574f454d instead of 0x%08x\n", *(DWORD *)wireip); - wireip += sizeof(DWORD); - ok(*(DWORD *)wireip == 0x1, "wireip + 0xc should be 0x1 instead of 0x%08x\n", *(DWORD *)wireip); - wireip += sizeof(DWORD); - iid = (const IID *)wireip; - ok(IsEqualIID(iid, &IID_IUnknown), - "wireip + 0x10 should be IID_IUnknown instead of {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n", - iid->Data1, iid->Data2, iid->Data3, - iid->Data4[0], iid->Data4[1], iid->Data4[2], iid->Data4[3], - iid->Data4[4], iid->Data4[5], iid->Data4[6], iid->Data4[7]); - wireip += sizeof(IID); - ok(*(DWORD *)wireip == 0, "wireip + 0x1c should be 0 instead of 0x%08x\n", *(DWORD *)wireip); - wireip += sizeof(DWORD); - ok(*(DWORD *)wireip == 5, "wireip + 0x20 should be 5 instead of %d\n", *(DWORD *)wireip); - wireip += sizeof(DWORD); - /* the rest is dynamic so can't really be tested */ - } - - unk2 = NULL; - WdtpInterfacePointer_UserUnmarshal(&umcb.Flags, buffer, &unk2, &IID_IUnknown); - todo_wine - ok(unk2 != NULL, "IUnknown object didn't unmarshal properly\n"); - HeapFree(GetProcessHeap(), 0, buffer); - WdtpInterfacePointer_UserFree(unk2); -} - -START_TEST(usrmarshal) -{ - CoInitialize(NULL); - - test_marshal_CLIPFORMAT(); - test_marshal_HWND(); - test_marshal_HGLOBAL(); - test_marshal_HENHMETAFILE(); - test_marshal_HMETAFILE(); - test_marshal_HMETAFILEPICT(); - test_marshal_WdtpInterfacePointer(); - - CoUninitialize(); -} diff --git a/rostests/winetests/oleaut32/oleaut32.rbuild b/rostests/winetests/oleaut32/oleaut32.rbuild deleted file mode 100644 index 0cbe838153a..00000000000 --- a/rostests/winetests/oleaut32/oleaut32.rbuild +++ /dev/null @@ -1,29 +0,0 @@ - - - - - . - wine - oleaut32 - ole32 - shlwapi - rpcrt4 - user32 - gdi32 - advapi32 - kernel32 - uuid - ntdll - olefont.c - olepicture.c - safearray.c - tmarshal.c - typelib.c - usrmarshal.c - varformat.c - vartest.c - vartype.c - tmarshal.rc - testlist.c - - diff --git a/rostests/winetests/oleaut32/olefont.c b/rostests/winetests/oleaut32/olefont.c deleted file mode 100644 index 1e6678b3499..00000000000 --- a/rostests/winetests/oleaut32/olefont.c +++ /dev/null @@ -1,828 +0,0 @@ -/* - * OLEFONT test program - * - * Copyright 2003 Marcus Meissner - * Copyright 2006 (Google) Benjamin Arai - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 COBJMACROS - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static WCHAR MSSansSerif_font[] = {'M','S',' ','S','a','n','s',' ','S','e','r','i','f',0}; -static WCHAR system_font[] = { 'S','y','s','t','e','m',0 }; -static WCHAR arial_font[] = { 'A','r','i','a','l',0 }; - -static HMODULE hOleaut32; - -static HRESULT (WINAPI *pOleCreateFontIndirect)(LPFONTDESC,REFIID,LPVOID*); - -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) - -/* Create a font with cySize given by lo_size, hi_size, */ -/* SetRatio to ratio_logical, ratio_himetric, */ -/* check that resulting hfont has height hfont_height. */ -/* Various checks along the way. */ - -static void test_ifont_sizes(long lo_size, long hi_size, - long ratio_logical, long ratio_himetric, - long hfont_height, const char * test_name) -{ - FONTDESC fd; - LPVOID pvObj = NULL; - IFont* ifnt = NULL; - HFONT hfont; - LOGFONT lf; - CY psize; - HRESULT hres; - - fd.cbSizeofstruct = sizeof(FONTDESC); - fd.lpstrName = system_font; - S(fd.cySize).Lo = lo_size; - S(fd.cySize).Hi = hi_size; - fd.sWeight = 0; - fd.sCharset = 0; - fd.fItalic = 0; - fd.fUnderline = 0; - fd.fStrikethrough = 0; - - /* Create font, test that it worked. */ - hres = pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj); - ifnt = pvObj; - ok(hres == S_OK,"%s: OCFI returns 0x%08x instead of S_OK.\n", - test_name, hres); - ok(pvObj != NULL,"%s: OCFI returns NULL.\n", test_name); - - /* Read back size. Hi part was ignored. */ - hres = IFont_get_Size(ifnt, &psize); - ok(hres == S_OK,"%s: IFont_get_size returns 0x%08x instead of S_OK.\n", - test_name, hres); - ok(S(psize).Lo == lo_size && S(psize).Hi == 0, - "%s: get_Size: Lo=%d, Hi=%d; expected Lo=%ld, Hi=%ld.\n", - test_name, S(psize).Lo, S(psize).Hi, lo_size, 0L); - - /* Change ratio, check size unchanged. Standard is 72, 2540. */ - hres = IFont_SetRatio(ifnt, ratio_logical, ratio_himetric); - ok(hres == S_OK,"%s: IFont_SR returns 0x%08x instead of S_OK.\n", - test_name, hres); - hres = IFont_get_Size(ifnt, &psize); - ok(hres == S_OK,"%s: IFont_get_size returns 0x%08x instead of S_OK.\n", - test_name, hres); - ok(S(psize).Lo == lo_size && S(psize).Hi == 0, - "%s: gS after SR: Lo=%d, Hi=%d; expected Lo=%ld, Hi=%ld.\n", - test_name, S(psize).Lo, S(psize).Hi, lo_size, 0L); - - /* Check hFont size with this ratio. This tests an important */ - /* conversion for which MSDN is very wrong. */ - hres = IFont_get_hFont (ifnt, &hfont); - ok(hres == S_OK, "%s: IFont_get_hFont returns 0x%08x instead of S_OK.\n", - test_name, hres); - hres = GetObject (hfont, sizeof(LOGFONT), &lf); - ok(lf.lfHeight == hfont_height, - "%s: hFont has lf.lfHeight=%d, expected %ld.\n", - test_name, lf.lfHeight, hfont_height); - - /* Free IFont. */ - IFont_Release(ifnt); -} - -static void test_QueryInterface(void) -{ - LPVOID pvObj = NULL; - HRESULT hres; - IFont* font = NULL; - LONG ret; - - hres = pOleCreateFontIndirect(NULL, &IID_IFont, &pvObj); - font = pvObj; - - ok(hres == S_OK,"OCFI (NULL,..) does not return 0, but 0x%08x\n",hres); - ok(font != NULL,"OCFI (NULL,..) returns NULL, instead of !NULL\n"); - - pvObj = NULL; - hres = IFont_QueryInterface( font, &IID_IFont, &pvObj); - - /* Test if QueryInterface increments ref counter for IFONTs */ - ret = IFont_AddRef(font); - ok(ret == 3, "IFont_QI expected ref value 3 but instead got %12u\n",ret); - IFont_Release(font); - - ok(hres == S_OK,"IFont_QI does not return S_OK, but 0x%08x\n", hres); - ok(pvObj != NULL,"IFont_QI does return NULL, instead of a ptr\n"); - - /* Orignial ref and QueryInterface ref both have to be released */ - IFont_Release(font); - IFont_Release(font); -} - -static void test_type_info(void) -{ - LPVOID pvObj = NULL; - HRESULT hres; - IFontDisp* fontdisp = NULL; - ITypeInfo* pTInfo; - WCHAR name_Name[] = {'N','a','m','e',0}; - BSTR names[3]; - UINT n; - LCID en_us = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), - SORT_DEFAULT); - DISPPARAMS dispparams; - VARIANT varresult; - - pOleCreateFontIndirect(NULL, &IID_IFontDisp, &pvObj); - fontdisp = pvObj; - - hres = IFontDisp_GetTypeInfo(fontdisp, 0, en_us, &pTInfo); - ok(hres == S_OK, "GTI returned 0x%08x instead of S_OK.\n", hres); - ok(pTInfo != NULL, "GTI returned NULL.\n"); - - hres = ITypeInfo_GetNames(pTInfo, DISPID_FONT_NAME, names, 3, &n); - ok(hres == S_OK, "GetNames returned 0x%08x instead of S_OK.\n", hres); - ok(n == 1, "GetNames returned %d names instead of 1.\n", n); - ok(!lstrcmpiW(names[0],name_Name), "DISPID_FONT_NAME doesn't get 'Names'.\n"); - - ITypeInfo_Release(pTInfo); - - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 0; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hres = IFontDisp_Invoke(fontdisp, DISPID_FONT_NAME, &IID_NULL, - LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, - NULL, NULL); - ok(hres == S_OK, "IFontDisp_Invoke return 0x%08x instead of S_OK.\n", hres); - VariantClear(&varresult); - - IFontDisp_Release(fontdisp); -} - -static HRESULT WINAPI FontEventsDisp_QueryInterface( - IFontEventsDisp *iface, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject) -{ - if (IsEqualIID(riid, &IID_IFontEventsDisp) || IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDispatch)) - { - IUnknown_AddRef(iface); - *ppvObject = iface; - return S_OK; - } - else - { - *ppvObject = NULL; - return E_NOINTERFACE; - } -} - -static ULONG WINAPI FontEventsDisp_AddRef( - IFontEventsDisp *iface) -{ - return 2; -} - -static ULONG WINAPI FontEventsDisp_Release( - IFontEventsDisp *iface) -{ - return 1; -} - -static int fonteventsdisp_invoke_called = 0; - -static HRESULT WINAPI FontEventsDisp_Invoke( - IFontEventsDisp __RPC_FAR * iface, - /* [in] */ DISPID dispIdMember, - /* [in] */ REFIID riid, - /* [in] */ LCID lcid, - /* [in] */ WORD wFlags, - /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, - /* [out] */ VARIANT __RPC_FAR *pVarResult, - /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, - /* [out] */ UINT __RPC_FAR *puArgErr) -{ - static const WCHAR wszBold[] = {'B','o','l','d',0}; - ok(wFlags == INVOKE_FUNC, "invoke flags should have been INVOKE_FUNC instead of 0x%x\n", wFlags); - ok(dispIdMember == DISPID_FONT_CHANGED, "dispIdMember should have been DISPID_FONT_CHANGED instead of 0x%x\n", dispIdMember); - ok(pDispParams->cArgs == 1, "pDispParams->cArgs should have been 1 instead of %d\n", pDispParams->cArgs); - ok(V_VT(&pDispParams->rgvarg[0]) == VT_BSTR, "VT of first param should have been VT_BSTR instead of %d\n", V_VT(&pDispParams->rgvarg[0])); - ok(!lstrcmpW(V_BSTR(&pDispParams->rgvarg[0]), wszBold), "String in first param should have been \"Bold\"\n"); - - fonteventsdisp_invoke_called++; - return S_OK; -} - -static IFontEventsDispVtbl FontEventsDisp_Vtbl = -{ - FontEventsDisp_QueryInterface, - FontEventsDisp_AddRef, - FontEventsDisp_Release, - NULL, - NULL, - NULL, - FontEventsDisp_Invoke -}; - -static IFontEventsDisp FontEventsDisp = { &FontEventsDisp_Vtbl }; - -static void test_font_events_disp(void) -{ - IFont *pFont; - IFont *pFont2; - IConnectionPointContainer *pCPC; - IConnectionPoint *pCP; - FONTDESC fontdesc; - HRESULT hr; - DWORD dwCookie; - IFontDisp *pFontDisp; - DISPPARAMS dispparams; - VARIANTARG vararg; - - fontdesc.cbSizeofstruct = sizeof(fontdesc); - fontdesc.lpstrName = MSSansSerif_font; - fontdesc.cySize.int64 = 12 * 10000; /* 12 pt */ - fontdesc.sWeight = FW_NORMAL; - fontdesc.sCharset = 0; - fontdesc.fItalic = FALSE; - fontdesc.fUnderline = FALSE; - fontdesc.fStrikethrough = FALSE; - - hr = pOleCreateFontIndirect(&fontdesc, &IID_IFont, (void **)&pFont); - ok_ole_success(hr, "OleCreateFontIndirect"); - - hr = IFont_QueryInterface(pFont, &IID_IConnectionPointContainer, (void **)&pCPC); - ok_ole_success(hr, "IFont_QueryInterface"); - - hr = IConnectionPointContainer_FindConnectionPoint(pCPC, &IID_IFontEventsDisp, &pCP); - ok_ole_success(hr, "IConnectionPointContainer_FindConnectionPoint"); - IConnectionPointContainer_Release(pCPC); - - hr = IConnectionPoint_Advise(pCP, (IUnknown *)&FontEventsDisp, &dwCookie); - ok_ole_success(hr, "IConnectionPoint_Advise"); - IConnectionPoint_Release(pCP); - - hr = IFont_put_Bold(pFont, TRUE); - ok_ole_success(hr, "IFont_put_Bold"); - - ok(fonteventsdisp_invoke_called == 1, "IFontEventDisp::Invoke wasn't called once\n"); - - hr = IFont_QueryInterface(pFont, &IID_IFontDisp, (void **)&pFontDisp); - ok_ole_success(hr, "IFont_QueryInterface"); - - V_VT(&vararg) = VT_BOOL; - V_BOOL(&vararg) = VARIANT_FALSE; - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 1; - dispparams.rgvarg = &vararg; - hr = IFontDisp_Invoke(pFontDisp, DISPID_FONT_BOLD, &IID_NULL, 0, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL); - - IFontDisp_Release(pFontDisp); - - ok(fonteventsdisp_invoke_called == 2, "IFontEventDisp::Invoke was called %d times instead of twice\n", - fonteventsdisp_invoke_called); - - hr = IFont_Clone(pFont, &pFont2); - ok_ole_success(hr, "IFont_Clone"); - IFont_Release(pFont); - - hr = IFont_put_Bold(pFont2, FALSE); - ok_ole_success(hr, "IFont_put_Bold"); - - /* this test shows that the notification routine isn't called again */ - ok(fonteventsdisp_invoke_called == 2, "IFontEventDisp::Invoke was called %d times instead of twice\n", - fonteventsdisp_invoke_called); - - IFont_Release(pFont2); -} - -static void test_names_ids(WCHAR* w_name_1, const char* a_name_1, - WCHAR* w_name_2, const char* a_name_2, - LCID lcid, DISPID id_1, DISPID id_2, - HRESULT hres_expect, int numnames) -{ - LPVOID pvObj = NULL; - IFontDisp *fontdisp = NULL; - HRESULT hres; - DISPID rgDispId[2] = {0xdeadbeef, 0xdeadbeef}; - LPOLESTR names[2] = {w_name_1, w_name_2}; - - pOleCreateFontIndirect(NULL, &IID_IFontDisp, &pvObj); - fontdisp = pvObj; - - hres = IFontDisp_GetIDsOfNames(fontdisp, &IID_NULL, names, numnames, - lcid, rgDispId); - - /* test hres */ - ok(hres == hres_expect, - "GetIDsOfNames: \"%s\", \"%s\" returns 0x%08x, expected 0x%08x.\n", - a_name_1, a_name_2, hres, hres_expect); - - /* test first DISPID */ - ok(rgDispId[0]==id_1, - "GetIDsOfNames: \"%s\" gets DISPID 0x%08x, expected 0x%08x.\n", - a_name_1, rgDispId[0], id_1); - - /* test second DISPID is present */ - if (numnames == 2) - { - ok(rgDispId[1]==id_2, - "GetIDsOfNames: ..., \"%s\" gets DISPID 0x%08x, expected 0x%08x.\n", - a_name_2, rgDispId[1], id_2); - } - - IFontDisp_Release(fontdisp); -} - -static void test_GetIDsOfNames(void) -{ - WCHAR name_Name[] = {'N','a','m','e',0}; - WCHAR name_Italic[] = {'I','t','a','l','i','c',0}; - WCHAR name_Size[] = {'S','i','z','e',0}; - WCHAR name_Bold[] = {'B','o','l','d',0}; - WCHAR name_Underline[] = {'U','n','d','e','r','l','i','n','e',0}; - WCHAR name_Strikethrough[] = {'S','t','r','i','k','e','t','h','r','o','u','g','h',0}; - WCHAR name_Weight[] = {'W','e','i','g','h','t',0}; - WCHAR name_Charset[] = {'C','h','a','r','s','e','t',0}; - WCHAR name_Foo[] = {'F','o','o',0}; - WCHAR name_nAmE[] = {'n','A','m','E',0}; - WCHAR name_Nom[] = {'N','o','m',0}; - - LCID en_us = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), - SORT_DEFAULT); - LCID fr_fr = MAKELCID(MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH), - SORT_DEFAULT); - - /* Test DISPID_FONTs for the various properties. */ - test_names_ids(name_Name, "Name", NULL, "", en_us, - DISPID_FONT_NAME, 0, S_OK,1); - test_names_ids(name_Size, "Size", NULL, "", en_us, - DISPID_FONT_SIZE, 0, S_OK,1); - test_names_ids(name_Bold, "Bold", NULL, "", en_us, - DISPID_FONT_BOLD, 0, S_OK,1); - test_names_ids(name_Italic, "Italic", NULL, "", en_us, - DISPID_FONT_ITALIC, 0, S_OK,1); - test_names_ids(name_Underline, "Underline", NULL, "", en_us, - DISPID_FONT_UNDER, 0, S_OK,1); - test_names_ids(name_Strikethrough, "Strikethrough", NULL, "", en_us, - DISPID_FONT_STRIKE, 0, S_OK,1); - test_names_ids(name_Weight, "Weight", NULL, "", en_us, - DISPID_FONT_WEIGHT, 0, S_OK,1); - test_names_ids(name_Charset, "Charset", NULL, "", en_us, - DISPID_FONT_CHARSET, 0, S_OK,1); - - /* Capitalization doesn't matter. */ - test_names_ids(name_nAmE, "nAmE", NULL, "", en_us, - DISPID_FONT_NAME, 0, S_OK,1); - - /* Unknown name. */ - test_names_ids(name_Foo, "Foo", NULL, "", en_us, - DISPID_UNKNOWN, 0, DISP_E_UNKNOWNNAME,1); - - /* Pass several names: first is processed, */ - /* second gets DISPID_UNKNOWN and doesn't affect retval. */ - test_names_ids(name_Italic, "Italic", name_Name, "Name", en_us, - DISPID_FONT_ITALIC, DISPID_UNKNOWN, S_OK,2); - test_names_ids(name_Italic, "Italic", name_Foo, "Foo", en_us, - DISPID_FONT_ITALIC, DISPID_UNKNOWN, S_OK,2); - - /* Locale ID has no effect. */ - test_names_ids(name_Name, "Name", NULL, "", fr_fr, - DISPID_FONT_NAME, 0, S_OK,1); - test_names_ids(name_Nom, "This is not a font", NULL, "", fr_fr, - DISPID_UNKNOWN, 0, DISP_E_UNKNOWNNAME,1); - - /* One of the arguments are invalid */ - test_names_ids(name_Name, "Name", NULL, "", en_us, - 0xdeadbeef, 0xdeadbeef, E_INVALIDARG,0); - test_names_ids(name_Italic, "Italic", NULL, "", en_us, - 0xdeadbeef, 0xdeadbeef, E_INVALIDARG,0); - test_names_ids(name_Foo, "Foo", NULL, "", en_us, - 0xdeadbeef, 0xdeadbeef, E_INVALIDARG,0); - - /* Crazy locale ID? */ - test_names_ids(name_Name, "Name", NULL, "", -1, - DISPID_FONT_NAME, 0, S_OK,1); -} - -static void test_Invoke(void) -{ - IFontDisp *fontdisp; - HRESULT hr; - VARIANTARG vararg; - DISPPARAMS dispparams; - VARIANT varresult; - - hr = pOleCreateFontIndirect(NULL, &IID_IFontDisp, (void **)&fontdisp); - ok_ole_success(hr, "OleCreateFontIndirect"); - - V_VT(&vararg) = VT_BOOL; - V_BOOL(&vararg) = VARIANT_FALSE; - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 1; - dispparams.rgvarg = &vararg; - hr = IFontDisp_Invoke(fontdisp, DISPID_FONT_BOLD, &IID_IFontDisp, 0, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL); - ok(hr == DISP_E_UNKNOWNINTERFACE, "IFontDisp_Invoke should have returned DISP_E_UNKNOWNINTERFACE instead of 0x%08x\n", hr); - - dispparams.cArgs = 0; - dispparams.rgvarg = NULL; - hr = IFontDisp_Invoke(fontdisp, DISPID_FONT_BOLD, &IID_NULL, 0, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL); - ok(hr == DISP_E_BADPARAMCOUNT, "IFontDisp_Invoke should have returned DISP_E_BADPARAMCOUNT instead of 0x%08x\n", hr); - - hr = IFontDisp_Invoke(fontdisp, DISPID_FONT_BOLD, &IID_NULL, 0, DISPATCH_PROPERTYPUT, NULL, NULL, NULL, NULL); - ok(hr == DISP_E_PARAMNOTOPTIONAL, "IFontDisp_Invoke should have returned DISP_E_PARAMNOTOPTIONAL instead of 0x%08x\n", hr); - - hr = IFontDisp_Invoke(fontdisp, DISPID_FONT_BOLD, &IID_NULL, 0, DISPATCH_PROPERTYGET, NULL, NULL, NULL, NULL); - ok(hr == DISP_E_PARAMNOTOPTIONAL, "IFontDisp_Invoke should have returned DISP_E_PARAMNOTOPTIONAL instead of 0x%08x\n", hr); - - hr = IFontDisp_Invoke(fontdisp, DISPID_FONT_BOLD, &IID_NULL, 0, DISPATCH_PROPERTYGET, NULL, &varresult, NULL, NULL); - ok_ole_success(hr, "IFontDisp_Invoke"); - - hr = IFontDisp_Invoke(fontdisp, DISPID_FONT_BOLD, &IID_NULL, 0, DISPATCH_METHOD, NULL, &varresult, NULL, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IFontDisp_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - - hr = IFontDisp_Invoke(fontdisp, 0xdeadbeef, &IID_NULL, 0, DISPATCH_PROPERTYGET, NULL, &varresult, NULL, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IFontDisp_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - - dispparams.cArgs = 1; - dispparams.rgvarg = &vararg; - hr = IFontDisp_Invoke(fontdisp, DISPID_FONT_BOLD, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); - ok_ole_success(hr, "IFontDisp_Invoke"); - - IFontDisp_Release(fontdisp); -} - -static void test_IsEqual(void) -{ - FONTDESC fd; - LPVOID pvObj = NULL; - LPVOID pvObj2 = NULL; - IFont* ifnt = NULL; - IFont* ifnt2 = NULL; - HRESULT hres; - - /* Basic font description */ - fd.cbSizeofstruct = sizeof(FONTDESC); - fd.lpstrName = system_font; - S(fd.cySize).Lo = 100; - S(fd.cySize).Hi = 100; - fd.sWeight = 0; - fd.sCharset = 0; - fd.fItalic = 0; - fd.fUnderline = 0; - fd.fStrikethrough = 0; - - /* Create font */ - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj); - ifnt = pvObj; - - /* Test equal fonts */ - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - ifnt2 = pvObj2; - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_OK, - "IFont_IsEqual: (EQUAL) Expected S_OK but got 0x%08x\n",hres); - IFont_Release(ifnt2); - - /* Check for bad pointer */ - hres = IFont_IsEqual(ifnt,NULL); - ok(hres == E_POINTER, - "IFont_IsEqual: (NULL) Expected 0x80004003 but got 0x%08x\n",hres); - - /* Test strName */ - fd.lpstrName = arial_font; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_FALSE, - "IFont_IsEqual: (strName) Expected S_FALSE but got 0x%08x\n",hres); - fd.lpstrName = system_font; - IFont_Release(ifnt2); - - /* Test lo font size */ - S(fd.cySize).Lo = 10000; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - ifnt2 = pvObj2; - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_FALSE, - "IFont_IsEqual: (Lo font size) Expected S_FALSE but got 0x%08x\n",hres); - S(fd.cySize).Lo = 100; - IFont_Release(ifnt2); - - /* Test hi font size */ - S(fd.cySize).Hi = 10000; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - ifnt2 = pvObj2; - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_FALSE, - "IFont_IsEqual: (Hi font size) Expected S_FALSE but got 0x%08x\n",hres); - S(fd.cySize).Hi = 100; - IFont_Release(ifnt2); - - /* Test font weight */ - fd.sWeight = 100; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - ifnt2 = pvObj2; - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_FALSE, - "IFont_IsEqual: (Weight) Expected S_FALSE but got 0x%08x\n",hres); - fd.sWeight = 0; - IFont_Release(ifnt2); - - /* Test charset */ - fd.sCharset = 1; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_FALSE, - "IFont_IsEqual: (Charset) Expected S_FALSE but got 0x%08x\n",hres); - fd.sCharset = 0; - IFont_Release(ifnt2); - - /* Test italic setting */ - fd.fItalic = 1; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_FALSE, - "IFont_IsEqual: (Italic) Expected S_FALSE but got 0x%08x\n",hres); - fd.fItalic = 0; - IFont_Release(ifnt2); - - /* Test underline setting */ - fd.fUnderline = 1; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_FALSE, - "IFont_IsEqual: (Underline) Expected S_FALSE but got 0x%08x\n",hres); - fd.fUnderline = 0; - IFont_Release(ifnt2); - - /* Test strikethrough setting */ - fd.fStrikethrough = 1; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - hres = IFont_IsEqual(ifnt,ifnt2); - ok(hres == S_FALSE, - "IFont_IsEqual: (Strikethrough) Expected S_FALSE but got 0x%08x\n",hres); - fd.fStrikethrough = 0; - IFont_Release(ifnt2); - - /* Free IFont. */ - IFont_Release(ifnt); -} - -static void test_ReleaseHfont(void) -{ - FONTDESC fd; - LPVOID pvObj1 = NULL; - LPVOID pvObj2 = NULL; - IFont* ifnt1 = NULL; - IFont* ifnt2 = NULL; - HFONT hfnt1 = 0; - HFONT hfnt2 = 0; - HRESULT hres; - - /* Basic font description */ - fd.cbSizeofstruct = sizeof(FONTDESC); - fd.lpstrName = system_font; - S(fd.cySize).Lo = 100; - S(fd.cySize).Hi = 100; - fd.sWeight = 0; - fd.sCharset = 0; - fd.fItalic = 0; - fd.fUnderline = 0; - fd.fStrikethrough = 0; - - /* Create HFONTs and IFONTs */ - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj1); - ifnt1 = pvObj1; - IFont_get_hFont(ifnt1,&hfnt1); - fd.lpstrName = arial_font; - pOleCreateFontIndirect(&fd, &IID_IFont, &pvObj2); - ifnt2 = pvObj2; - IFont_get_hFont(ifnt2,&hfnt2); - - /* Try invalid HFONT */ - hres = IFont_ReleaseHfont(ifnt1,NULL); - ok(hres == E_INVALIDARG, - "IFont_ReleaseHfont: (Bad HFONT) Expected E_INVALIDARG but got 0x%08x\n", - hres); - - /* Try to add a bad HFONT */ - hres = IFont_ReleaseHfont(ifnt1,(HFONT)32); - ok(hres == S_FALSE, - "IFont_ReleaseHfont: (Bad HFONT) Expected S_FALSE but got 0x%08x\n", - hres); - - /* Release all refs */ - hres = IFont_ReleaseHfont(ifnt1,hfnt1); - ok(hres == S_OK, - "IFont_AddRefHfont: (Release ref) Expected S_OK but got 0x%08x\n", - hres); - - hres = IFont_ReleaseHfont(ifnt2,hfnt2); - ok(hres == S_OK, - "IFont_AddRefHfont: (Release ref) Expected S_OK but got 0x%08x\n", - hres); - - /* Check that both lists are empty */ - hres = IFont_ReleaseHfont(ifnt1,hfnt1); - ok(hres == S_FALSE, - "IFont_AddRefHfont: (Release ref) Expected S_FALSE but got 0x%08x\n", - hres); - - /* The list should be empty */ - hres = IFont_ReleaseHfont(ifnt2,hfnt2); - ok(hres == S_FALSE, - "IFont_AddRefHfont: (Release ref) Expected S_FALSE but got 0x%08x\n", - hres); - - IFont_Release(ifnt1); - IFont_Release(ifnt2); -} - -static void test_AddRefHfont(void) -{ - FONTDESC fd; - IFont* ifnt1 = NULL; - IFont* ifnt2 = NULL; - IFont* ifnt3 = NULL; - HFONT hfnt1 = 0; - HFONT hfnt2 = 0; - HFONT hfnt3 = 0; - HRESULT hres; - - /* Basic font description */ - fd.cbSizeofstruct = sizeof(FONTDESC); - fd.lpstrName = system_font; - S(fd.cySize).Lo = 100; - S(fd.cySize).Hi = 100; - fd.sWeight = 0; - fd.sCharset = 0; - fd.fItalic = 0; - fd.fUnderline = 0; - fd.fStrikethrough = 0; - - /* Create HFONTs and IFONTs */ - pOleCreateFontIndirect(&fd, &IID_IFont, (void **)&ifnt1); - IFont_get_hFont(ifnt1,&hfnt1); - fd.lpstrName = arial_font; - pOleCreateFontIndirect(&fd, &IID_IFont, (void **)&ifnt2); - IFont_get_hFont(ifnt2,&hfnt2); - - /* Try invalid HFONT */ - hres = IFont_AddRefHfont(ifnt1,NULL); - ok(hres == E_INVALIDARG, - "IFont_AddRefHfont: (Bad HFONT) Expected E_INVALIDARG but got 0x%08x\n", - hres); - - /* Try to add a bad HFONT */ - hres = IFont_AddRefHfont(ifnt1,(HFONT)32); - ok(hres == S_FALSE, - "IFont_AddRefHfont: (Bad HFONT) Expected S_FALSE but got 0x%08x\n", - hres); - - /* Add simple IFONT HFONT pair */ - hres = IFont_AddRefHfont(ifnt1,hfnt1); - ok(hres == S_OK, - "IFont_AddRefHfont: (Add ref) Expected S_OK but got 0x%08x\n", - hres); - - /* IFONT and HFONT do not have to be the same (always looks at HFONT) */ - hres = IFont_AddRefHfont(ifnt2,hfnt1); - ok(hres == S_OK, - "IFont_AddRefHfont: (Add ref) Expected S_OK but got 0x%08x\n", - hres); - - /* Release all hfnt1 refs */ - hres = IFont_ReleaseHfont(ifnt1,hfnt1); - ok(hres == S_OK, - "IFont_AddRefHfont: (Release ref) Expected S_OK but got 0x%08x\n", - hres); - - hres = IFont_ReleaseHfont(ifnt1,hfnt1); - ok(hres == S_OK, - "IFont_AddRefHfont: (Release ref) Expected S_OK but got 0x%08x\n", - hres); - - hres = IFont_ReleaseHfont(ifnt1,hfnt1); - ok(hres == S_OK, - "IFont_AddRefHfont: (Release ref) Expected S_OK but got 0x%08x\n", - hres); - - /* Check if hfnt1 is empty */ - hres = IFont_ReleaseHfont(ifnt1,hfnt1); - ok(hres == S_FALSE, - "IFont_AddRefHfont: (Release ref) Expected S_FALSE but got 0x%08x\n", - hres); - - /* Release all hfnt2 refs */ - hres = IFont_ReleaseHfont(ifnt2,hfnt2); - ok(hres == S_OK, - "IFont_AddRefHfont: (Release ref) Expected S_OK but got 0x%08x\n", - hres); - - /* Check if hfnt2 is empty */ - hres = IFont_ReleaseHfont(ifnt2,hfnt2); - ok(hres == S_FALSE, - "IFont_AddRefHfont: (Release ref) Expected S_FALSE but got 0x%08x\n", - hres); - - /* Show that releasing an IFONT does not always release it from the HFONT cache. */ - - IFont_Release(ifnt1); - - /* Add a reference for destroyed hfnt1 */ - hres = IFont_AddRefHfont(ifnt2,hfnt1); - ok(hres == S_OK, - "IFont_AddRefHfont: (Add ref) Expected S_OK but got 0x%08x\n", - hres); - - /* Decrement reference for destroyed hfnt1 */ - hres = IFont_ReleaseHfont(ifnt2,hfnt1); - ok(hres == S_OK, - "IFont_AddRefHfont: (Release ref) Expected S_OK but got 0x%08x\n", - hres); - - /* Shows that releasing all IFONT's does clear the HFONT cache. */ - - IFont_Release(ifnt2); - - /* Need to make a new IFONT for testing */ - fd.fUnderline = 1; - pOleCreateFontIndirect(&fd, &IID_IFont, (void **)&ifnt3); - IFont_get_hFont(ifnt3,&hfnt3); - - /* Add a reference for destroyed hfnt1 */ - hres = IFont_AddRefHfont(ifnt3,hfnt1); - ok(hres == S_FALSE, - "IFont_AddRefHfont: (Add ref) Expected S_OK but got 0x%08x\n", - hres); - - /* Decrement reference for destroyed hfnt1 */ - hres = IFont_ReleaseHfont(ifnt3,hfnt1); - ok(hres == S_FALSE, - "IFont_AddRefHfont: (Release ref) Expected S_OK but got 0x%08x\n", - hres); - - IFont_Release(ifnt3); -} - -START_TEST(olefont) -{ - hOleaut32 = GetModuleHandleA("oleaut32.dll"); - pOleCreateFontIndirect = (void*)GetProcAddress(hOleaut32, "OleCreateFontIndirect"); - if (!pOleCreateFontIndirect) - { - skip("OleCreateFontIndirect not available\n"); - return; - } - - test_QueryInterface(); - test_type_info(); - - /* Test various size operations and conversions. */ - /* Add more as needed. */ - test_ifont_sizes(180000, 0, 72, 2540, -18, "default"); - test_ifont_sizes(180000, 0, 144, 2540, -36, "ratio1"); /* change ratio */ - test_ifont_sizes(180000, 0, 72, 1270, -36, "ratio2"); /* 2nd part of ratio */ - - /* These depend on details of how IFont rounds sizes internally. */ - test_ifont_sizes(0, 0, 72, 2540, 0, "zero size"); /* zero size */ - test_ifont_sizes(186000, 0, 72, 2540, -19, "rounding"); /* test rounding */ - - test_font_events_disp(); - test_GetIDsOfNames(); - test_Invoke(); - test_IsEqual(); - test_ReleaseHfont(); - test_AddRefHfont(); -} diff --git a/rostests/winetests/oleaut32/olepicture.c b/rostests/winetests/oleaut32/olepicture.c deleted file mode 100644 index c0d0de9d969..00000000000 --- a/rostests/winetests/oleaut32/olepicture.c +++ /dev/null @@ -1,799 +0,0 @@ -/* - * OLEPICTURE test program - * - * Copyright 2005 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 -#include -#include - -#define COBJMACROS - -#include "wine/test.h" -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define expect_eq(expr, value, type, format) { type ret = (expr); ok((value) == ret, #expr " expected " format " got " format "\n", value, ret); } - -#define ole_expect(expr, expect) { \ - HRESULT r = expr; \ - ok(r == (expect), #expr " returned %x, expected %s (%x)\n", r, #expect, expect); \ -} - -#define ole_check(expr) ole_expect(expr, S_OK); - -static HMODULE hOleaut32; - -static HRESULT (WINAPI *pOleLoadPicture)(LPSTREAM,LONG,BOOL,REFIID,LPVOID*); -static HRESULT (WINAPI *pOleCreatePictureIndirect)(PICTDESC*,REFIID,BOOL,LPVOID*); - -#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) - -/* 1x1 pixel gif */ -static const unsigned char gifimage[35] = { -0x47,0x49,0x46,0x38,0x37,0x61,0x01,0x00,0x01,0x00,0x80,0x00,0x00,0xff,0xff,0xff, -0xff,0xff,0xff,0x2c,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x02,0x02,0x44, -0x01,0x00,0x3b -}; - -/* 1x1 pixel jpg */ -static const unsigned char jpgimage[285] = { -0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01,0x01,0x01,0x01,0x2c, -0x01,0x2c,0x00,0x00,0xff,0xdb,0x00,0x43,0x00,0x05,0x03,0x04,0x04,0x04,0x03,0x05, -0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x07,0x0c,0x08,0x07,0x07,0x07,0x07,0x0f,0x0b, -0x0b,0x09,0x0c,0x11,0x0f,0x12,0x12,0x11,0x0f,0x11,0x11,0x13,0x16,0x1c,0x17,0x13, -0x14,0x1a,0x15,0x11,0x11,0x18,0x21,0x18,0x1a,0x1d,0x1d,0x1f,0x1f,0x1f,0x13,0x17, -0x22,0x24,0x22,0x1e,0x24,0x1c,0x1e,0x1f,0x1e,0xff,0xdb,0x00,0x43,0x01,0x05,0x05, -0x05,0x07,0x06,0x07,0x0e,0x08,0x08,0x0e,0x1e,0x14,0x11,0x14,0x1e,0x1e,0x1e,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0xff,0xc0, -0x00,0x11,0x08,0x00,0x01,0x00,0x01,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11, -0x01,0xff,0xc4,0x00,0x15,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xff,0xc4,0x00,0x14,0x10,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xc4, -0x00,0x14,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xff,0xc4,0x00,0x14,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xda,0x00,0x0c,0x03,0x01, -0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xb2,0xc0,0x07,0xff,0xd9 -}; - -/* 1x1 pixel png */ -static const unsigned char pngimage[285] = { -0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52, -0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x08,0x02,0x00,0x00,0x00,0x90,0x77,0x53, -0xde,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b, -0x13,0x01,0x00,0x9a,0x9c,0x18,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd5, -0x06,0x03,0x0f,0x07,0x2d,0x12,0x10,0xf0,0xfd,0x00,0x00,0x00,0x0c,0x49,0x44,0x41, -0x54,0x08,0xd7,0x63,0xf8,0xff,0xff,0x3f,0x00,0x05,0xfe,0x02,0xfe,0xdc,0xcc,0x59, -0xe7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; - -/* 1x1 pixel bmp */ -static const unsigned char bmpimage[66] = { -0x42,0x4d,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x28,0x00, -0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x04,0x00,0x00,0x00,0x12,0x0b,0x00,0x00,0x12,0x0b,0x00,0x00,0x02,0x00, -0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0x00,0x00, -0x00,0x00 -}; - -/* 2x2 pixel gif */ -static const unsigned char gif4pixel[42] = { -0x47,0x49,0x46,0x38,0x37,0x61,0x02,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,0x00,0x00, -0x39,0x62,0xfc,0xff,0x1a,0xe5,0xff,0xff,0xff,0x2c,0x00,0x00,0x00,0x00,0x02,0x00, -0x02,0x00,0x00,0x02,0x03,0x14,0x16,0x05,0x00,0x3b -}; - -/* APM with an empty metafile with some padding zeros - looks like under Window the - * metafile data should be at least 20 bytes */ -static const unsigned char apmdata[] = { -0xd7,0xcd,0xc6,0x9a, 0x00,0x00,0x00,0x00, 0x00,0x00,0xee,0x02, 0xb1,0x03,0xa0,0x05, -0x00,0x00,0x00,0x00, 0xee,0x53,0x01,0x00, 0x09,0x00,0x00,0x03, 0x13,0x00,0x00,0x00, -0x01,0x00,0x05,0x00, 0x00,0x00,0x00,0x00, 0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00 -}; - -struct NoStatStreamImpl -{ - const IStreamVtbl *lpVtbl; - LONG ref; - - HGLOBAL supportHandle; - ULARGE_INTEGER streamSize; - ULARGE_INTEGER currentPosition; -}; -typedef struct NoStatStreamImpl NoStatStreamImpl; -static NoStatStreamImpl* NoStatStreamImpl_Construct(HGLOBAL hGlobal); - -static void -test_pic_with_stream(LPSTREAM stream, unsigned int imgsize) -{ - IPicture* pic = NULL; - HRESULT hres; - LPVOID pvObj = NULL; - OLE_HANDLE handle, hPal; - OLE_XSIZE_HIMETRIC width; - OLE_YSIZE_HIMETRIC height; - short type; - DWORD attr; - ULONG res; - - pvObj = NULL; - hres = pOleLoadPicture(stream, imgsize, TRUE, &IID_IPicture, &pvObj); - pic = pvObj; - - ok(hres == S_OK,"OLP (NULL,..) does not return 0, but 0x%08x\n",hres); - ok(pic != NULL,"OLP (NULL,..) returns NULL, instead of !NULL\n"); - if (pic == NULL) - return; - - pvObj = NULL; - hres = IPicture_QueryInterface (pic, &IID_IPicture, &pvObj); - - ok(hres == S_OK,"IPicture_QI does not return S_OK, but 0x%08x\n", hres); - ok(pvObj != NULL,"IPicture_QI does return NULL, instead of a ptr\n"); - - IPicture_Release ((IPicture*)pvObj); - - handle = 0; - hres = IPicture_get_Handle (pic, &handle); - ok(hres == S_OK,"IPicture_get_Handle does not return S_OK, but 0x%08x\n", hres); - ok(handle != 0, "IPicture_get_Handle returns a NULL handle, but it should be non NULL\n"); - - width = 0; - hres = IPicture_get_Width (pic, &width); - ok(hres == S_OK,"IPicture_get_Width does not return S_OK, but 0x%08x\n", hres); - ok(width != 0, "IPicture_get_Width returns 0, but it should not be 0.\n"); - - height = 0; - hres = IPicture_get_Height (pic, &height); - ok(hres == S_OK,"IPicture_get_Height does not return S_OK, but 0x%08x\n", hres); - ok(height != 0, "IPicture_get_Height returns 0, but it should not be 0.\n"); - - type = 0; - hres = IPicture_get_Type (pic, &type); - ok(hres == S_OK,"IPicture_get_Type does not return S_OK, but 0x%08x\n", hres); - ok(type == PICTYPE_BITMAP, "IPicture_get_Type returns %d, but it should be PICTYPE_BITMAP(%d).\n", type, PICTYPE_BITMAP); - - attr = 0; - hres = IPicture_get_Attributes (pic, &attr); - ok(hres == S_OK,"IPicture_get_Attributes does not return S_OK, but 0x%08x\n", hres); - ok(attr == 0, "IPicture_get_Attributes returns %d, but it should be 0.\n", attr); - - hPal = 0; - hres = IPicture_get_hPal (pic, &hPal); - ok(hres == S_OK,"IPicture_get_hPal does not return S_OK, but 0x%08x\n", hres); - /* a single pixel b/w image has no palette */ - ok(hPal == 0, "IPicture_get_hPal returns %d, but it should be 0.\n", hPal); - - res = IPicture_Release (pic); - ok (res == 0, "refcount after release is %d, but should be 0?\n", res); -} - -static void -test_pic(const unsigned char *imgdata, unsigned int imgsize) -{ - LPSTREAM stream; - HGLOBAL hglob; - LPBYTE data; - HRESULT hres; - LARGE_INTEGER seekto; - ULARGE_INTEGER newpos1; - DWORD * header; - unsigned int i,j; - - /* Let the fun begin */ - hglob = GlobalAlloc (0, imgsize); - data = GlobalLock (hglob); - memcpy(data, imgdata, imgsize); - GlobalUnlock(hglob); data = NULL; - - hres = CreateStreamOnHGlobal (hglob, FALSE, &stream); - ok (hres == S_OK, "createstreamonhglobal failed? doubt it... hres 0x%08x\n", hres); - - memset(&seekto,0,sizeof(seekto)); - hres = IStream_Seek(stream,seekto,SEEK_CUR,&newpos1); - ok (hres == S_OK, "istream seek failed? doubt it... hres 0x%08x\n", hres); - test_pic_with_stream(stream, imgsize); - - IStream_Release(stream); - - /* again with Non Statable and Non Seekable stream */ - stream = (LPSTREAM)NoStatStreamImpl_Construct(hglob); - hglob = 0; /* Non-statable impl always deletes on release */ - test_pic_with_stream(stream, 0); - - IStream_Release(stream); - for (i = 1; i <= 8; i++) { - /* more fun!!! */ - hglob = GlobalAlloc (0, imgsize + i * (2 * sizeof(DWORD))); - data = GlobalLock (hglob); - header = (DWORD *)data; - - /* multiple copies of header */ - memcpy(data,"lt\0\0",4); - header[1] = imgsize; - for (j = 2; j <= i; j++) { - memcpy(&(header[2 * (j - 1)]), header, 2 * sizeof(DWORD)); - } - memcpy(data + i * (2 * sizeof(DWORD)), imgdata, imgsize); - GlobalUnlock(hglob); data = NULL; - - hres = CreateStreamOnHGlobal (hglob, FALSE, &stream); - ok (hres == S_OK, "createstreamonhglobal failed? doubt it... hres 0x%08x\n", hres); - - memset(&seekto,0,sizeof(seekto)); - hres = IStream_Seek(stream,seekto,SEEK_CUR,&newpos1); - ok (hres == S_OK, "istream seek failed? doubt it... hres 0x%08x\n", hres); - test_pic_with_stream(stream, imgsize); - - IStream_Release(stream); - - /* again with Non Statable and Non Seekable stream */ - stream = (LPSTREAM)NoStatStreamImpl_Construct(hglob); - hglob = 0; /* Non-statable impl always deletes on release */ - test_pic_with_stream(stream, 0); - - IStream_Release(stream); - } -} - -static void test_empty_image(void) { - LPBYTE data; - LPSTREAM stream; - IPicture* pic = NULL; - HRESULT hres; - LPVOID pvObj = NULL; - HGLOBAL hglob; - OLE_HANDLE handle; - ULARGE_INTEGER newpos1; - LARGE_INTEGER seekto; - short type; - - /* Empty image. Happens occasionally in VB programs. */ - hglob = GlobalAlloc (0, 8); - data = GlobalLock (hglob); - memcpy(data,"lt\0\0",4); - ((DWORD*)data)[1] = 0; - hres = CreateStreamOnHGlobal (hglob, TRUE, &stream); - ok (hres == S_OK, "CreatestreamOnHGlobal failed? doubt it... hres 0x%08x\n", hres); - - memset(&seekto,0,sizeof(seekto)); - hres = IStream_Seek(stream,seekto,SEEK_CUR,&newpos1); - ok (hres == S_OK, "istream seek failed? doubt it... hres 0x%08x\n", hres); - - pvObj = NULL; - hres = pOleLoadPicture(stream, 8, TRUE, &IID_IPicture, &pvObj); - pic = pvObj; - ok(hres == S_OK,"empty picture not loaded, hres 0x%08x\n", hres); - ok(pic != NULL,"empty picture not loaded, pic is NULL\n"); - - hres = IPicture_get_Type (pic, &type); - ok (hres == S_OK,"empty picture get type failed with hres 0x%08x\n", hres); - ok (type == PICTYPE_NONE,"type is %d, but should be PICTYPE_NONE(0)\n", type); - - hres = IPicture_get_Handle (pic, &handle); - ok (hres == S_OK,"empty picture get handle failed with hres 0x%08x\n", hres); - ok (handle == 0, "empty picture get handle did not return 0, but 0x%08x\n", handle); - IPicture_Release (pic); -} - -static void test_empty_image_2(void) { - LPBYTE data; - LPSTREAM stream; - IPicture* pic = NULL; - HRESULT hres; - LPVOID pvObj = NULL; - HGLOBAL hglob; - ULARGE_INTEGER newpos1; - LARGE_INTEGER seekto; - short type; - - /* Empty image at random stream position. */ - hglob = GlobalAlloc (0, 200); - data = GlobalLock (hglob); - data += 42; - memcpy(data,"lt\0\0",4); - ((DWORD*)data)[1] = 0; - hres = CreateStreamOnHGlobal (hglob, TRUE, &stream); - ok (hres == S_OK, "CreatestreamOnHGlobal failed? doubt it... hres 0x%08x\n", hres); - - memset(&seekto,0,sizeof(seekto)); - seekto.u.LowPart = 42; - hres = IStream_Seek(stream,seekto,SEEK_CUR,&newpos1); - ok (hres == S_OK, "istream seek failed? doubt it... hres 0x%08x\n", hres); - - pvObj = NULL; - hres = pOleLoadPicture(stream, 8, TRUE, &IID_IPicture, &pvObj); - pic = pvObj; - ok(hres == S_OK,"empty picture not loaded, hres 0x%08x\n", hres); - ok(pic != NULL,"empty picture not loaded, pic is NULL\n"); - - hres = IPicture_get_Type (pic, &type); - ok (hres == S_OK,"empty picture get type failed with hres 0x%08x\n", hres); - ok (type == PICTYPE_NONE,"type is %d, but should be PICTYPE_NONE(0)\n", type); - - IPicture_Release (pic); -} - -static void test_Invoke(void) -{ - IPictureDisp *picdisp; - HRESULT hr; - VARIANTARG vararg; - DISPPARAMS dispparams; - VARIANT varresult; - IStream *stream; - HGLOBAL hglob; - void *data; - - hglob = GlobalAlloc (0, sizeof(gifimage)); - data = GlobalLock(hglob); - memcpy(data, gifimage, sizeof(gifimage)); - GlobalUnlock(hglob); - - hr = CreateStreamOnHGlobal (hglob, FALSE, &stream); - ok_ole_success(hr, "CreateStreamOnHGlobal"); - - hr = pOleLoadPicture(stream, sizeof(gifimage), TRUE, &IID_IPictureDisp, (void **)&picdisp); - IStream_Release(stream); - ok_ole_success(hr, "OleLoadPicture"); - - V_VT(&vararg) = VT_BOOL; - V_BOOL(&vararg) = VARIANT_FALSE; - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 1; - dispparams.rgvarg = &vararg; - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_IPictureDisp, 0, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL); - ok(hr == DISP_E_UNKNOWNNAME, "IPictureDisp_Invoke should have returned DISP_E_UNKNOWNNAME instead of 0x%08x\n", hr); - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_IUnknown, 0, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL); - ok(hr == DISP_E_UNKNOWNNAME, "IPictureDisp_Invoke should have returned DISP_E_UNKNOWNNAME instead of 0x%08x\n", hr); - - dispparams.cArgs = 0; - dispparams.rgvarg = NULL; - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL); - ok(hr == DISP_E_BADPARAMCOUNT, "IPictureDisp_Invoke should have returned DISP_E_BADPARAMCOUNT instead of 0x%08x\n", hr); - - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYPUT, NULL, NULL, NULL, NULL); - ok(hr == DISP_E_PARAMNOTOPTIONAL, "IPictureDisp_Invoke should have returned DISP_E_PARAMNOTOPTIONAL instead of 0x%08x\n", hr); - - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYGET, NULL, NULL, NULL, NULL); - ok(hr == DISP_E_PARAMNOTOPTIONAL, "IPictureDisp_Invoke should have returned DISP_E_PARAMNOTOPTIONAL instead of 0x%08x\n", hr); - - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYGET, NULL, &varresult, NULL, NULL); - ok(hr == DISP_E_PARAMNOTOPTIONAL, "IPictureDisp_Invoke should have returned DISP_E_PARAMNOTOPTIONAL instead of 0x%08x\n", hr); - - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); - ok_ole_success(hr, "IPictureDisp_Invoke"); - ok(V_VT(&varresult) == VT_I4, "V_VT(&varresult) should have been VT_UINT instead of %d\n", V_VT(&varresult)); - - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_METHOD, &dispparams, &varresult, NULL, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IPictureDisp_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - - hr = IPictureDisp_Invoke(picdisp, 0xdeadbeef, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "IPictureDisp_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - - dispparams.cArgs = 1; - dispparams.rgvarg = &vararg; - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); - ok(hr == DISP_E_BADPARAMCOUNT, "IPictureDisp_Invoke should have returned DISP_E_BADPARAMCOUNT instead of 0x%08x\n", hr); - - dispparams.cArgs = 1; - dispparams.rgvarg = &vararg; - hr = IPictureDisp_Invoke(picdisp, DISPID_PICT_HPAL, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dispparams, &varresult, NULL, NULL); - ok(hr == DISP_E_BADPARAMCOUNT, "IPictureDisp_Invoke should have returned DISP_E_BADPARAMCOUNT instead of 0x%08x\n", hr); - - IPictureDisp_Release(picdisp); -} - -static void test_OleCreatePictureIndirect(void) -{ - IPicture *pict; - HRESULT hr; - short type; - OLE_HANDLE handle; - - if(!pOleCreatePictureIndirect) - { - skip("Skipping OleCreatePictureIndirect tests\n"); - return; - } - - hr = pOleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (void**)&pict); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = IPicture_get_Type(pict, &type); - ok(hr == S_OK, "hr %08x\n", hr); - ok(type == PICTYPE_UNINITIALIZED, "type %d\n", type); - - hr = IPicture_get_Handle(pict, &handle); - ok(hr == S_OK, "hr %08x\n", hr); - ok(handle == 0, "handle %08x\n", handle); - - IPicture_Release(pict); -} - -static void test_apm() -{ - OLE_HANDLE handle; - LPSTREAM stream; - IPicture *pict; - HGLOBAL hglob; - LPBYTE *data; - LONG cxy; - BOOL keep; - short type; - - hglob = GlobalAlloc (0, sizeof(apmdata)); - data = GlobalLock(hglob); - memcpy(data, apmdata, sizeof(apmdata)); - - ole_check(CreateStreamOnHGlobal(hglob, TRUE, &stream)); - ole_check(OleLoadPictureEx(stream, sizeof(apmdata), TRUE, &IID_IPicture, 100, 100, 0, (LPVOID *)&pict)); - - ole_check(IPicture_get_Handle(pict, &handle)); - ok(handle != 0, "handle is null\n"); - - ole_check(IPicture_get_Type(pict, &type)); - expect_eq(type, PICTYPE_METAFILE, short, "%d"); - - ole_check(IPicture_get_Height(pict, &cxy)); - expect_eq(cxy, 1667, LONG, "%d"); - - ole_check(IPicture_get_Width(pict, &cxy)); - expect_eq(cxy, 1323, LONG, "%d"); - - ole_check(IPicture_get_KeepOriginalFormat(pict, &keep)); - todo_wine expect_eq(keep, FALSE, LONG, "%d"); - - ole_expect(IPicture_get_hPal(pict, &handle), E_FAIL); - IPicture_Release(pict); - IStream_Release(stream); -} - -START_TEST(olepicture) -{ - hOleaut32 = GetModuleHandleA("oleaut32.dll"); - pOleLoadPicture = (void*)GetProcAddress(hOleaut32, "OleLoadPicture"); - pOleCreatePictureIndirect = (void*)GetProcAddress(hOleaut32, "OleCreatePictureIndirect"); - if (!pOleLoadPicture) - { - skip("OleLoadPicture is not available\n"); - return; - } - - /* Test regular 1x1 pixel images of gif, jpg, bmp type */ - test_pic(gifimage, sizeof(gifimage)); - test_pic(jpgimage, sizeof(jpgimage)); - test_pic(bmpimage, sizeof(bmpimage)); - test_pic(gif4pixel, sizeof(gif4pixel)); - /* FIXME: No PNG support yet in Wine or in older Windows... */ - if (0) test_pic(pngimage, sizeof(pngimage)); - test_empty_image(); - test_empty_image_2(); - test_apm(); - - test_Invoke(); - test_OleCreatePictureIndirect(); -} - - -/* Helper functions only ... */ - - -static void NoStatStreamImpl_Destroy(NoStatStreamImpl* This) -{ - GlobalFree(This->supportHandle); - This->supportHandle=0; - HeapFree(GetProcessHeap(), 0, This); -} - -static ULONG WINAPI NoStatStreamImpl_AddRef( - IStream* iface) -{ - NoStatStreamImpl* const This=(NoStatStreamImpl*)iface; - return InterlockedIncrement(&This->ref); -} - -static HRESULT WINAPI NoStatStreamImpl_QueryInterface( - IStream* iface, - REFIID riid, /* [in] */ - void** ppvObject) /* [iid_is][out] */ -{ - NoStatStreamImpl* const This=(NoStatStreamImpl*)iface; - if (ppvObject==0) return E_INVALIDARG; - *ppvObject = 0; - if (memcmp(&IID_IUnknown, riid, sizeof(IID_IUnknown)) == 0) - { - *ppvObject = (IStream*)This; - } - else if (memcmp(&IID_IStream, riid, sizeof(IID_IStream)) == 0) - { - *ppvObject = (IStream*)This; - } - - if ((*ppvObject)==0) - return E_NOINTERFACE; - NoStatStreamImpl_AddRef(iface); - return S_OK; -} - -static ULONG WINAPI NoStatStreamImpl_Release( - IStream* iface) -{ - NoStatStreamImpl* const This=(NoStatStreamImpl*)iface; - ULONG newRef = InterlockedDecrement(&This->ref); - if (newRef==0) - NoStatStreamImpl_Destroy(This); - return newRef; -} - -static HRESULT WINAPI NoStatStreamImpl_Read( - IStream* iface, - void* pv, /* [length_is][size_is][out] */ - ULONG cb, /* [in] */ - ULONG* pcbRead) /* [out] */ -{ - NoStatStreamImpl* const This=(NoStatStreamImpl*)iface; - void* supportBuffer; - ULONG bytesReadBuffer; - ULONG bytesToReadFromBuffer; - - if (pcbRead==0) - pcbRead = &bytesReadBuffer; - bytesToReadFromBuffer = min( This->streamSize.u.LowPart - This->currentPosition.u.LowPart, cb); - supportBuffer = GlobalLock(This->supportHandle); - memcpy(pv, (char *) supportBuffer+This->currentPosition.u.LowPart, bytesToReadFromBuffer); - This->currentPosition.u.LowPart+=bytesToReadFromBuffer; - *pcbRead = bytesToReadFromBuffer; - GlobalUnlock(This->supportHandle); - if(*pcbRead == cb) - return S_OK; - return S_FALSE; -} - -static HRESULT WINAPI NoStatStreamImpl_Write( - IStream* iface, - const void* pv, /* [size_is][in] */ - ULONG cb, /* [in] */ - ULONG* pcbWritten) /* [out] */ -{ - NoStatStreamImpl* const This=(NoStatStreamImpl*)iface; - void* supportBuffer; - ULARGE_INTEGER newSize; - ULONG bytesWritten = 0; - - if (pcbWritten == 0) - pcbWritten = &bytesWritten; - if (cb == 0) - return S_OK; - newSize.u.HighPart = 0; - newSize.u.LowPart = This->currentPosition.u.LowPart + cb; - if (newSize.u.LowPart > This->streamSize.u.LowPart) - IStream_SetSize(iface, newSize); - - supportBuffer = GlobalLock(This->supportHandle); - memcpy((char *) supportBuffer+This->currentPosition.u.LowPart, pv, cb); - This->currentPosition.u.LowPart+=cb; - *pcbWritten = cb; - GlobalUnlock(This->supportHandle); - return S_OK; -} - -static HRESULT WINAPI NoStatStreamImpl_Seek( - IStream* iface, - LARGE_INTEGER dlibMove, /* [in] */ - DWORD dwOrigin, /* [in] */ - ULARGE_INTEGER* plibNewPosition) /* [out] */ -{ - NoStatStreamImpl* const This=(NoStatStreamImpl*)iface; - ULARGE_INTEGER newPosition; - switch (dwOrigin) - { - case STREAM_SEEK_SET: - newPosition.u.HighPart = 0; - newPosition.u.LowPart = 0; - break; - case STREAM_SEEK_CUR: - newPosition = This->currentPosition; - break; - case STREAM_SEEK_END: - newPosition = This->streamSize; - break; - default: - return STG_E_INVALIDFUNCTION; - } - if (dlibMove.QuadPart < 0 && newPosition.QuadPart < -dlibMove.QuadPart) - return STG_E_INVALIDFUNCTION; - newPosition.QuadPart += dlibMove.QuadPart; - if (plibNewPosition) *plibNewPosition = newPosition; - This->currentPosition = newPosition; - return S_OK; -} - -static HRESULT WINAPI NoStatStreamImpl_SetSize( - IStream* iface, - ULARGE_INTEGER libNewSize) /* [in] */ -{ - NoStatStreamImpl* const This=(NoStatStreamImpl*)iface; - HGLOBAL supportHandle; - if (libNewSize.u.HighPart != 0) - return STG_E_INVALIDFUNCTION; - if (This->streamSize.u.LowPart == libNewSize.u.LowPart) - return S_OK; - supportHandle = GlobalReAlloc(This->supportHandle, libNewSize.u.LowPart, 0); - if (supportHandle == 0) - return STG_E_MEDIUMFULL; - This->supportHandle = supportHandle; - This->streamSize.u.LowPart = libNewSize.u.LowPart; - return S_OK; -} - -static HRESULT WINAPI NoStatStreamImpl_CopyTo( - IStream* iface, - IStream* 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; - - if ( pstm == 0 ) - return STG_E_INVALIDPOINTER; - totalBytesRead.u.LowPart = totalBytesRead.u.HighPart = 0; - totalBytesWritten.u.LowPart = totalBytesWritten.u.HighPart = 0; - - while ( cb.u.LowPart > 0 ) - { - if ( cb.u.LowPart >= 128 ) - copySize = 128; - else - copySize = cb.u.LowPart; - IStream_Read(iface, tmpBuffer, copySize, &bytesRead); - totalBytesRead.u.LowPart += bytesRead; - IStream_Write(pstm, tmpBuffer, bytesRead, &bytesWritten); - totalBytesWritten.u.LowPart += bytesWritten; - if (bytesRead != bytesWritten) - { - hr = STG_E_MEDIUMFULL; - break; - } - if (bytesRead!=copySize) - cb.u.LowPart = 0; - else - cb.u.LowPart -= bytesRead; - } - if (pcbRead) - { - pcbRead->u.LowPart = totalBytesRead.u.LowPart; - pcbRead->u.HighPart = totalBytesRead.u.HighPart; - } - - if (pcbWritten) - { - pcbWritten->u.LowPart = totalBytesWritten.u.LowPart; - pcbWritten->u.HighPart = totalBytesWritten.u.HighPart; - } - return hr; -} - -static HRESULT WINAPI NoStatStreamImpl_Commit(IStream* iface,DWORD grfCommitFlags) -{ - return S_OK; -} -static HRESULT WINAPI NoStatStreamImpl_Revert(IStream* iface) { return S_OK; } - -static HRESULT WINAPI NoStatStreamImpl_LockRegion( - IStream* iface, - ULARGE_INTEGER libOffset, /* [in] */ - ULARGE_INTEGER cb, /* [in] */ - DWORD dwLockType) /* [in] */ -{ - return S_OK; -} - -static HRESULT WINAPI NoStatStreamImpl_UnlockRegion( - IStream* iface, - ULARGE_INTEGER libOffset, /* [in] */ - ULARGE_INTEGER cb, /* [in] */ - DWORD dwLockType) /* [in] */ -{ - return S_OK; -} - -static HRESULT WINAPI NoStatStreamImpl_Stat( - IStream* iface, - STATSTG* pstatstg, /* [out] */ - DWORD grfStatFlag) /* [in] */ -{ - return E_NOTIMPL; -} - -static HRESULT WINAPI NoStatStreamImpl_Clone( - IStream* iface, - IStream** ppstm) /* [out] */ -{ - return E_NOTIMPL; -} -static const IStreamVtbl NoStatStreamImpl_Vtbl; - -/* - Build an object that implements IStream, without IStream_Stat capabilities. - Receives a memory handle with data buffer. If memory handle is non-null, - it is assumed to be unlocked, otherwise an internal memory handle is allocated. - In any case the object takes ownership of memory handle and will free it on - object release. - */ -static NoStatStreamImpl* NoStatStreamImpl_Construct(HGLOBAL hGlobal) -{ - NoStatStreamImpl* newStream; - - newStream = HeapAlloc(GetProcessHeap(), 0, sizeof(NoStatStreamImpl)); - if (newStream!=0) - { - newStream->lpVtbl = &NoStatStreamImpl_Vtbl; - newStream->ref = 1; - newStream->supportHandle = hGlobal; - - if (!newStream->supportHandle) - newStream->supportHandle = GlobalAlloc(GMEM_MOVEABLE | GMEM_NODISCARD | - GMEM_SHARE, 0); - newStream->currentPosition.u.HighPart = 0; - newStream->currentPosition.u.LowPart = 0; - newStream->streamSize.u.HighPart = 0; - newStream->streamSize.u.LowPart = GlobalSize(newStream->supportHandle); - } - return newStream; -} - - -static const IStreamVtbl NoStatStreamImpl_Vtbl = -{ - NoStatStreamImpl_QueryInterface, - NoStatStreamImpl_AddRef, - NoStatStreamImpl_Release, - NoStatStreamImpl_Read, - NoStatStreamImpl_Write, - NoStatStreamImpl_Seek, - NoStatStreamImpl_SetSize, - NoStatStreamImpl_CopyTo, - NoStatStreamImpl_Commit, - NoStatStreamImpl_Revert, - NoStatStreamImpl_LockRegion, - NoStatStreamImpl_UnlockRegion, - NoStatStreamImpl_Stat, - NoStatStreamImpl_Clone -}; diff --git a/rostests/winetests/oleaut32/safearray.c b/rostests/winetests/oleaut32/safearray.c deleted file mode 100644 index 1857ab5a5ca..00000000000 --- a/rostests/winetests/oleaut32/safearray.c +++ /dev/null @@ -1,1712 +0,0 @@ -/* - * SafeArray test program - * - * 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 -#include -#include -#include -#include - -#define COBJMACROS -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "wingdi.h" -#include "winnls.h" -#include "winsock.h" -#include "winerror.h" -#include "winnt.h" - -#include "wtypes.h" -#include "oleauto.h" - -static HMODULE hOleaut32; - -static HRESULT (WINAPI *pSafeArrayAllocDescriptorEx)(VARTYPE,UINT,SAFEARRAY**); -static HRESULT (WINAPI *pSafeArrayCopyData)(SAFEARRAY*,SAFEARRAY*); -static HRESULT (WINAPI *pSafeArrayGetIID)(SAFEARRAY*,GUID*); -static HRESULT (WINAPI *pSafeArraySetIID)(SAFEARRAY*,REFGUID); -static HRESULT (WINAPI *pSafeArrayGetVartype)(SAFEARRAY*,VARTYPE*); -static HRESULT (WINAPI *pSafeArrayGetRecordInfo)(SAFEARRAY*,IRecordInfo**); -static SAFEARRAY* (WINAPI *pSafeArrayCreateEx)(VARTYPE,UINT,SAFEARRAYBOUND*,LPVOID); -static SAFEARRAY* (WINAPI *pSafeArrayCreateVector)(VARTYPE,LONG,ULONG); - -#define GETPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func) - -/* Is a given function exported from oleaut32? */ -#define HAVE_FUNC(func) ((void*)GetProcAddress(hOleaut32, #func) != NULL) - -/* Have IRecordInfo data type? */ -#define HAVE_OLEAUT32_RECORD HAVE_FUNC(SafeArraySetRecordInfo) -/* Have R8 data type? */ -#define HAVE_OLEAUT32_R8 HAVE_FUNC(VarR8FromI1) -/* Have I8/UI8 data type? */ -#define HAVE_OLEAUT32_I8 HAVE_FUNC(VarI8FromI1) -/* Have the decimal type? */ -#define HAVE_OLEAUT32_DECIMAL HAVE_FUNC(VarDecAdd) -/* Have INT_PTR/UINT_PTR type? */ -static BOOL HAVE_OLEAUT32_INT_PTR; - -/* very old version? */ -#define IS_ANCIENT (!HAVE_FUNC(VarI1FromI2)) - -#define START_REF_COUNT 1 -#define RECORD_SIZE 64 -#define RECORD_SIZE_FAIL 17 -/************************************************************************ - * Dummy IRecordInfo Implementation - */ -typedef struct IRecordInfoImpl -{ - const IRecordInfoVtbl *lpvtbl; - LONG ref; - DWORD sizeCalled; - DWORD clearCalled; -} IRecordInfoImpl; - -static const IRecordInfoVtbl IRecordInfoImpl_VTable; - -static IRecordInfoImpl *IRecordInfoImpl_Construct(void) -{ - IRecordInfoImpl *rec; - - rec = HeapAlloc(GetProcessHeap(), 0, sizeof(IRecordInfoImpl)); - rec->lpvtbl = &IRecordInfoImpl_VTable; - rec->ref = START_REF_COUNT; - rec->clearCalled = 0; - rec->sizeCalled = 0; - return rec; -} - -static ULONG CALLBACK IRecordInfoImpl_AddRef(IRecordInfo *iface) -{ - IRecordInfoImpl* This=(IRecordInfoImpl*)iface; - return InterlockedIncrement(&This->ref); -} - -static ULONG CALLBACK IRecordInfoImpl_Release(IRecordInfo *iface) -{ - IRecordInfoImpl* This=(IRecordInfoImpl*)iface; - return InterlockedDecrement(&This->ref); -} - -static BOOL fail_GetSize; /* Whether to fail the GetSize call */ - -static HRESULT CALLBACK IRecordInfoImpl_RecordClear(IRecordInfo *iface, PVOID pvExisting) -{ - IRecordInfoImpl* This=(IRecordInfoImpl*)iface; - This->clearCalled++; - return S_OK; -} - -static HRESULT CALLBACK IRecordInfoImpl_GetSize(IRecordInfo *iface, ULONG* size) -{ - IRecordInfoImpl* This=(IRecordInfoImpl*)iface; - This->sizeCalled++; - *size = 17; - if (fail_GetSize) - return E_UNEXPECTED; - *size = RECORD_SIZE; - return S_OK; -} - -static HRESULT CALLBACK IRecordInfoImpl_Dummy(IRecordInfo *iface) -{ - trace("Called an unexpected IRecordInfo method - please report!\n"); - /* Quit because we'll just crash anyway */ - fflush(NULL); - exit(255); -} - -static const IRecordInfoVtbl IRecordInfoImpl_VTable = -{ - (PVOID)IRecordInfoImpl_Dummy, - IRecordInfoImpl_AddRef, - IRecordInfoImpl_Release, - (PVOID)IRecordInfoImpl_Dummy, - IRecordInfoImpl_RecordClear, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_GetSize, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy, - (PVOID)IRecordInfoImpl_Dummy -}; - -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: - if (HAVE_OLEAUT32_R8) - return sizeof(LONG64); - case VT_I8: - case VT_UI8: - if (HAVE_OLEAUT32_I8) - return sizeof(LONG64); - break; - case VT_INT: - case VT_UINT: return sizeof(INT); - case VT_INT_PTR: - case VT_UINT_PTR: - if (HAVE_OLEAUT32_INT_PTR) - return sizeof(UINT_PTR); - break; - 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: - if (HAVE_OLEAUT32_DECIMAL) - return sizeof(DECIMAL); - break; - } - return 0; -} - -static void check_for_VT_INT_PTR(void) -{ - /* Set a global flag if VT_INT_PTR is supported */ - - SAFEARRAY* a; - SAFEARRAYBOUND bound; - bound.cElements = 0; - bound.lLbound = 0; - a = SafeArrayCreate(VT_INT_PTR, 1, &bound); - if (a) { - trace("VT_INT_PTR is supported\n"); - HAVE_OLEAUT32_INT_PTR = TRUE; - SafeArrayDestroy(a); - } - else { - trace("VT_INT_PTR is not supported\n"); - HAVE_OLEAUT32_INT_PTR = FALSE; - } -} - -#define VARTYPE_NOT_SUPPORTED 0 -static struct { - VARTYPE vt; /* VT */ - UINT elemsize; /* elementsize by VT */ - UINT expflags; /* fFeatures from SafeArrayAllocDescriptorEx */ - UINT addflags; /* additional fFeatures from SafeArrayCreate */ -} vttypes[] = { -{VT_EMPTY, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_NULL, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_I2, 2, FADF_HAVEVARTYPE,0}, -{VT_I4, 4, FADF_HAVEVARTYPE,0}, -{VT_R4, 4, FADF_HAVEVARTYPE,0}, -{VT_R8, 8, FADF_HAVEVARTYPE,0}, -{VT_CY, 8, FADF_HAVEVARTYPE,0}, -{VT_DATE, 8, FADF_HAVEVARTYPE,0}, -{VT_BSTR, sizeof(BSTR), FADF_HAVEVARTYPE,FADF_BSTR}, -{VT_DISPATCH, sizeof(LPDISPATCH), FADF_HAVEIID, FADF_DISPATCH}, -{VT_ERROR, 4, FADF_HAVEVARTYPE,0}, -{VT_BOOL, 2, FADF_HAVEVARTYPE,0}, -{VT_VARIANT, sizeof(VARIANT), FADF_HAVEVARTYPE,FADF_VARIANT}, -{VT_UNKNOWN, sizeof(LPUNKNOWN), FADF_HAVEIID, FADF_UNKNOWN}, -{VT_DECIMAL, sizeof(DECIMAL), FADF_HAVEVARTYPE,0}, -{15, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, /* no VT_xxx */ -{VT_I1, 1, FADF_HAVEVARTYPE,0}, -{VT_UI1, 1, FADF_HAVEVARTYPE,0}, -{VT_UI2, 2, FADF_HAVEVARTYPE,0}, -{VT_UI4, 4, FADF_HAVEVARTYPE,0}, -{VT_I8, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_UI8, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_INT, sizeof(INT), FADF_HAVEVARTYPE,0}, -{VT_UINT, sizeof(UINT), FADF_HAVEVARTYPE,0}, -{VT_VOID, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_HRESULT, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_PTR, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_SAFEARRAY,VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_CARRAY, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_USERDEFINED,VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_LPSTR, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_LPWSTR, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_FILETIME, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_RECORD, VARTYPE_NOT_SUPPORTED,FADF_RECORD,0}, -{VT_BLOB, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_STREAM, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_STORAGE, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_STREAMED_OBJECT,VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_STORED_OBJECT,VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_BLOB_OBJECT,VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_CF, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -{VT_CLSID, VARTYPE_NOT_SUPPORTED,FADF_HAVEVARTYPE,0}, -}; - -static void test_safearray(void) -{ - SAFEARRAY *a, b, *c; - unsigned int i; - LONG indices[2]; - HRESULT hres; - SAFEARRAYBOUND bound, bounds[2]; - VARIANT v; - LPVOID data; - IID iid; - VARTYPE vt; - LONG l; - unsigned char *ptr1, *ptr2; - - hres = SafeArrayDestroy( NULL); - ok( hres == S_OK, "SafeArrayDestroy( NULL) returned 0x%x\n", hres); - - bound.cElements = 1; - bound.lLbound = 0; - a = SafeArrayCreate(-1, 1, &bound); - ok(NULL == a,"SAC(-1,1,[1,0]) not failed?\n"); - - bound.cElements = 0; - bound.lLbound = 42; - a = SafeArrayCreate(VT_I4, 1, &bound); - ok(NULL != a,"SAC(VT_I4,1,[0,0]) failed.\n"); - - hres = SafeArrayGetLBound(a, 1, &l); - ok(hres == S_OK, "SAGLB of 0 size dimensioned array failed with %x\n",hres); - ok(l == 42, "SAGLB of 0 size dimensioned array failed to return 42, but returned %d\n",l); - hres = SafeArrayGetUBound(a, 1, &l); - ok(hres == S_OK, "SAGUB of 0 size dimensioned array failed with %x\n",hres); - ok(l == 41, "SAGUB of 0 size dimensioned array failed to return 41, but returned %d\n",l); - - hres = SafeArrayAccessData(a, &data); - ok(hres == S_OK, "SafeArrayAccessData of 0 size dimensioned array failed with %x\n", hres); - SafeArrayUnaccessData(a); - - bound.cElements = 2; - hres = SafeArrayRedim(a, &bound); - ok(hres == S_OK,"SAR of a 0 elements dimension failed with hres %x\n", hres); - bound.cElements = 0; - hres = SafeArrayRedim(a, &bound); - ok(hres == S_OK || hres == E_OUTOFMEMORY, - "SAR to a 0 elements dimension failed with hres %x\n", hres); - hres = SafeArrayDestroy(a); - ok(hres == S_OK,"SAD of 0 dim array faild with hres %x\n", hres); - - SafeArrayAllocDescriptor(2, &a); - a->rgsabound[0].cElements = 2; - a->rgsabound[0].lLbound = 1; - a->rgsabound[1].cElements = 4; - a->rgsabound[1].lLbound = 1; - a->cbElements = 2; - SafeArrayAllocData(a); - - indices[0] = 4; - indices[1] = 2; - hres = SafeArrayPtrOfIndex(a, indices, (void **)&ptr1); - ok(hres == S_OK, "SAPOI failed with hres %x\n", hres); - SafeArrayAccessData(a, (void **)&ptr2); - ok(ptr1 - ptr2 == 14, "SAPOI got wrong ptr\n"); - *(WORD *)ptr1 = 0x55aa; - SafeArrayUnaccessData(a); - - bound.cElements = 10; - bound.lLbound = 1; - SafeArrayRedim(a, &bound); - ptr1 = NULL; - SafeArrayPtrOfIndex(a, indices, (void **)&ptr1); - ok(*(WORD *)ptr1 == 0x55aa, "Data not preserved when resizing array\n"); - - bound.cElements = 10; - bound.lLbound = 0; - SafeArrayRedim(a, &bound); - SafeArrayPtrOfIndex(a, indices, (void **)&ptr1); - ok(*(WORD *)ptr1 == 0, "Expanded area not zero-initialized\n"); - - indices[1] = 1; - SafeArrayPtrOfIndex(a, indices, (void **)&ptr1); - ok(*(WORD *)ptr1 == 0x55aa, "Data not preserved when resizing array\n"); - - bounds[0].cElements = 0; bounds[0].lLbound = 1; - bounds[1].cElements = 2; bounds[1].lLbound = 23; - a = SafeArrayCreate(VT_I4,2,bounds); - ok(a != NULL,"SAC(VT_INT32,2,...) with 0 element dim failed.\n"); - bounds[0].cElements = 1; bounds[0].lLbound = 1; - bounds[1].cElements = 0; bounds[1].lLbound = 23; - a = SafeArrayCreate(VT_I4,2,bounds); - ok(a != NULL,"SAC(VT_INT32,2,...) with 0 element dim failed.\n"); - - bounds[0].cElements = 42; bounds[0].lLbound = 1; - bounds[1].cElements = 2; bounds[1].lLbound = 23; - a = SafeArrayCreate(VT_I4,2,bounds); - ok(a != NULL,"SAC(VT_INT32,2,...) failed.\n"); - - hres = SafeArrayGetLBound (a, 0, &l); - ok (hres == DISP_E_BADINDEX, "SAGLB 0 failed with %x\n", hres); - hres = SafeArrayGetLBound (a, 1, &l); - ok (hres == S_OK, "SAGLB 1 failed with %x\n", hres); - ok (l == 1, "SAGLB 1 returned %d instead of 1\n", l); - hres = SafeArrayGetLBound (a, 2, &l); - ok (hres == S_OK, "SAGLB 2 failed with %x\n", hres); - ok (l == 23, "SAGLB 2 returned %d instead of 23\n", l); - hres = SafeArrayGetLBound (a, 3, &l); - ok (hres == DISP_E_BADINDEX, "SAGLB 3 failed with %x\n", hres); - - hres = SafeArrayGetUBound (a, 0, &l); - ok (hres == DISP_E_BADINDEX, "SAGUB 0 failed with %x\n", hres); - hres = SafeArrayGetUBound (a, 1, &l); - ok (hres == S_OK, "SAGUB 1 failed with %x\n", hres); - ok (l == 42, "SAGUB 1 returned %d instead of 42\n", l); - hres = SafeArrayGetUBound (a, 2, &l); - ok (hres == S_OK, "SAGUB 2 failed with %x\n", hres); - ok (l == 24, "SAGUB 2 returned %d instead of 24\n", l); - hres = SafeArrayGetUBound (a, 3, &l); - ok (hres == DISP_E_BADINDEX, "SAGUB 3 failed with %x\n", hres); - - i = SafeArrayGetDim(a); - ok(i == 2, "getdims of 2 din array returned %d\n",i); - - indices[0] = 0; - indices[1] = 23; - hres = SafeArrayGetElement(a, indices, &i); - ok(DISP_E_BADINDEX == hres,"SAGE failed [0,23], hres 0x%x\n",hres); - - indices[0] = 1; - indices[1] = 22; - hres = SafeArrayGetElement(a, indices, &i); - ok(DISP_E_BADINDEX == hres,"SAGE failed [1,22], hres 0x%x\n",hres); - - indices[0] = 1; - indices[1] = 23; - hres = SafeArrayGetElement(a, indices, &i); - ok(S_OK == hres,"SAGE failed [1,23], hres 0x%x\n",hres); - - indices[0] = 1; - indices[1] = 25; - hres = SafeArrayGetElement(a, indices, &i); - ok(DISP_E_BADINDEX == hres,"SAGE failed [1,24], hres 0x%x\n",hres); - - indices[0] = 3; - indices[1] = 23; - hres = SafeArrayGetElement(a, indices, &i); - ok(S_OK == hres,"SAGE failed [42,23], hres 0x%x\n",hres); - - hres = SafeArrayAccessData(a, (void**)&ptr1); - ok(S_OK == hres, "SAAD failed with 0x%x\n", hres); - - indices[0] = 3; - indices[1] = 23; - hres = SafeArrayPtrOfIndex(a, indices, (void**)&ptr2); - ok(S_OK == hres,"SAPOI failed [1,23], hres 0x%x\n",hres); - ok(ptr2 - ptr1 == 8,"ptr difference is not 8, but %d (%p vs %p)\n", ptr2-ptr1, ptr2, ptr1); - - indices[0] = 3; - indices[1] = 24; - hres = SafeArrayPtrOfIndex(a, indices, (void**)&ptr2); - ok(S_OK == hres,"SAPOI failed [5,24], hres 0x%x\n",hres); - ok(ptr2 - ptr1 == 176,"ptr difference is not 176, but %d (%p vs %p)\n", ptr2-ptr1, ptr2, ptr1); - - indices[0] = 20; - indices[1] = 23; - hres = SafeArrayPtrOfIndex(a, indices, (void**)&ptr2); - ok(S_OK == hres,"SAPOI failed [20,23], hres 0x%x\n",hres); - ok(ptr2 - ptr1 == 76,"ptr difference is not 76, but %d (%p vs %p)\n", ptr2-ptr1, ptr2, ptr1); - - hres = SafeArrayUnaccessData(a); - ok(S_OK == hres, "SAUAD failed with 0x%x\n", hres); - - for (i=0;icbElements) || - (IS_ANCIENT && (vttypes[i].vt == VT_DECIMAL || vttypes[i].vt == VT_I1 || - vttypes[i].vt == VT_UI2 || vttypes[i].vt == VT_UI4 || vttypes[i].vt == VT_INT || - vttypes[i].vt == VT_UINT)), - "SAC(%d,1,[1,0]), %p result %d, expected %d\n", - vttypes[i].vt,a,(a?a->cbElements:0),vttypes[i].elemsize); - - if (a) - { - if (!HAVE_OLEAUT32_RECORD) - vttypes[i].expflags = 0; - ok(a->fFeatures == (vttypes[i].expflags | vttypes[i].addflags), - "SAC of %d returned feature flags %x, expected %x\n", - vttypes[i].vt, a->fFeatures, - vttypes[i].expflags|vttypes[i].addflags); - ok(SafeArrayGetElemsize(a) == vttypes[i].elemsize, - "SAGE for vt %d returned elemsize %d instead of expected %d\n", - vttypes[i].vt, SafeArrayGetElemsize(a),vttypes[i].elemsize); - } - - if (!a) continue; - - if (pSafeArrayGetVartype) - { - hres = pSafeArrayGetVartype(a, &vt); - ok(hres == S_OK, "SAGVT of arra y with vt %d failed with %x\n", vttypes[i].vt, hres); - if (vttypes[i].vt == VT_DISPATCH) { - /* Special case. Checked against Windows. */ - ok(vt == VT_UNKNOWN, "SAGVT of a rray with VT_DISPATCH returned not VT_UNKNOWN, but %d\n", vt); - } else { - ok(vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); - } - } - - hres = SafeArrayCopy(a, &c); - ok(hres == S_OK, "failed to copy safearray of vt %d with hres %x\n", vttypes[i].vt, hres); - - ok(vttypes[i].elemsize == c->cbElements,"copy of SAC(%d,1,[1,0]), result %d, expected %d\n",vttypes[i].vt,(c?c->cbElements:0),vttypes[i].elemsize - ); - ok(c->fFeatures == (vttypes[i].expflags | vttypes[i].addflags),"SAC of %d returned feature flags %x, expected %x\n", vttypes[i].vt, c->fFeatures, vttypes[i].expflags|vttypes[i].addflags); - ok(SafeArrayGetElemsize(c) == vttypes[i].elemsize,"SAGE for vt %d returned elemsize %d instead of expected %d\n",vttypes[i].vt, SafeArrayGetElemsize(c),vttypes[i].elemsize); - - if (pSafeArrayGetVartype) { - hres = pSafeArrayGetVartype(c, &vt); - ok(hres == S_OK, "SAGVT of array with vt %d failed with %x\n", vttypes[i].vt, hres); - if (vttypes[i].vt == VT_DISPATCH) { - /* Special case. Checked against Windows. */ - ok(vt == VT_UNKNOWN, "SAGVT of array with VT_DISPATCH returned not VT_UNKNOWN, but %d\n", vt); - } else { - ok(vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); - } - } - - if (pSafeArrayCopyData) { - hres = pSafeArrayCopyData(a, c); - ok(hres == S_OK, "failed to copy safearray data of vt %d with hres %x\n", vttypes[i].vt, hres); - - hres = SafeArrayDestroyData(c); - ok(hres == S_OK,"SADD of copy of array with vt %d failed with hres %x\n", vttypes[i].vt, hres); - } - - hres = SafeArrayDestroy(a); - ok(hres == S_OK,"SAD of array with vt %d failed with hres %x\n", vttypes[i].vt, hres); - } - - /* Test conversion of type|VT_ARRAY <-> VT_BSTR */ - bound.lLbound = 0; - bound.cElements = 10; - a = SafeArrayCreate(VT_UI1, 1, &bound); - ok(a != NULL, "SAC failed.\n"); - ok(S_OK == SafeArrayAccessData(a, &data),"SACD failed\n"); - memcpy(data,"Hello World\n",10); - ok(S_OK == SafeArrayUnaccessData(a),"SAUD failed\n"); - V_VT(&v) = VT_ARRAY|VT_UI1; - V_ARRAY(&v) = a; - hres = VariantChangeTypeEx(&v, &v, 0, 0, VT_BSTR); - ok(hres==S_OK, "CTE VT_ARRAY|VT_UI1 -> VT_BSTR failed with %x\n",hres); - ok(V_VT(&v) == VT_BSTR,"CTE VT_ARRAY|VT_UI1 -> VT_BSTR did not return VT_BSTR, but %d.v\n",V_VT(&v)); - ok(V_BSTR(&v)[0] == 0x6548,"First letter are not 'He', but %x\n", V_BSTR(&v)[0]); - - /* check locking functions */ - a = SafeArrayCreate(VT_I4, 1, &bound); - ok(a!=NULL,"SAC should not fail\n"); - - hres = SafeArrayAccessData(a, &data); - ok(hres == S_OK,"SAAD failed with hres %x\n",hres); - - hres = SafeArrayDestroy(a); - ok(hres == DISP_E_ARRAYISLOCKED,"locked safe array destroy not failed with DISP_E_ARRAYISLOCKED, but with hres %x\n", hres); - - hres = SafeArrayDestroyData(a); - ok(hres == DISP_E_ARRAYISLOCKED,"locked safe array destroy data not failed with DISP_E_ARRAYISLOCKED, but with hres %x\n", hres); - - hres = SafeArrayDestroyDescriptor(a); - ok(hres == DISP_E_ARRAYISLOCKED,"locked safe array destroy descriptor not failed with DISP_E_ARRAYISLOCKED, but with hres %x\n", hres); - - hres = SafeArrayUnaccessData(a); - ok(hres == S_OK,"SAUD failed after lock/destroy test\n"); - - hres = SafeArrayDestroy(a); - ok(hres == S_OK,"SAD failed after lock/destroy test\n"); - - /* Test if we need to destroy data before descriptor */ - a = SafeArrayCreate(VT_I4, 1, &bound); - ok(a!=NULL,"SAC should not fail\n"); - hres = SafeArrayDestroyDescriptor(a); - ok(hres == S_OK,"SADD with data in array failed with hres %x\n",hres); - - - /* IID functions */ - /* init a small stack safearray */ - if (pSafeArraySetIID) { - memset(&b, 0, sizeof(b)); - b.cDims = 1; - memset(&iid, 0x42, sizeof(IID)); - hres = pSafeArraySetIID(&b,&iid); - ok(hres == E_INVALIDARG,"SafeArraySetIID of non IID capable safearray did not return E_INVALIDARG, but %x\n",hres); - - hres = SafeArrayAllocDescriptor(1,&a); - ok((a->fFeatures & FADF_HAVEIID) == 0,"newly allocated descriptor with SAAD should not have FADF_HAVEIID\n"); - hres = pSafeArraySetIID(a,&iid); - ok(hres == E_INVALIDARG,"SafeArraySetIID of newly allocated descriptor with SAAD should return E_INVALIDARG, but %x\n",hres); - } - - if (!pSafeArrayAllocDescriptorEx) - return; - - for (i=0;ifFeatures == vttypes[i].expflags,"SAADE(%d) resulted with flags %x, expected %x\n", vttypes[i].vt, a->fFeatures, vttypes[i].expflags); - if (a->fFeatures & FADF_HAVEIID) { - hres = pSafeArrayGetIID(a, &iid); - ok(hres == S_OK,"SAGIID failed for vt %d with hres %x\n", vttypes[i].vt,hres); - switch (vttypes[i].vt) { - case VT_UNKNOWN: - ok(IsEqualGUID(((GUID*)a)-1,&IID_IUnknown),"guid for VT_UNKNOWN is not IID_IUnknown\n"); - ok(IsEqualGUID(&iid, &IID_IUnknown),"SAGIID returned wrong GUID for IUnknown\n"); - break; - case VT_DISPATCH: - ok(IsEqualGUID(((GUID*)a)-1,&IID_IDispatch),"guid for VT_UNKNOWN is not IID_IDispatch\n"); - ok(IsEqualGUID(&iid, &IID_IDispatch),"SAGIID returned wrong GUID for IDispatch\n"); - break; - default: - ok(FALSE,"unknown vt %d with FADF_HAVEIID\n",vttypes[i].vt); - break; - } - } else { - hres = pSafeArrayGetIID(a, &iid); - ok(hres == E_INVALIDARG,"SAGIID did not fail for vt %d with hres %x\n", vttypes[i].vt,hres); - } - if (a->fFeatures & FADF_RECORD) { - ok(vttypes[i].vt == VT_RECORD,"FADF_RECORD for non record %d\n",vttypes[i].vt); - } - if (a->fFeatures & FADF_HAVEVARTYPE) { - ok(vttypes[i].vt == ((DWORD*)a)[-1], "FADF_HAVEVARTYPE set, but vt %d mismatch stored %d\n",vttypes[i].vt,((DWORD*)a)[-1]); - } - - hres = pSafeArrayGetVartype(a, &vt); - ok(hres == S_OK, "SAGVT of array with vt %d failed with %x\n", vttypes[i].vt, hres); - - if (vttypes[i].vt == VT_DISPATCH) { - /* Special case. Checked against Windows. */ - ok(vt == VT_UNKNOWN, "SAGVT of array with VT_DISPATCH returned not VT_UNKNOWN, but %d\n", vt); - } else { - ok(vt == vttypes[i].vt, "SAGVT of array with vt %d returned %d\n", vttypes[i].vt, vt); - } - - if (a->fFeatures & FADF_HAVEIID) { - hres = pSafeArraySetIID(a, &IID_IStorage); /* random IID */ - ok(hres == S_OK,"SASIID failed with FADF_HAVEIID set for vt %d with %x\n", vttypes[i].vt, hres); - hres = pSafeArrayGetIID(a, &iid); - ok(hres == S_OK,"SAGIID failed with FADF_HAVEIID set for vt %d with %x\n", vttypes[i].vt, hres); - ok(IsEqualGUID(&iid, &IID_IStorage),"returned iid is not IID_IStorage\n"); - } else { - hres = pSafeArraySetIID(a, &IID_IStorage); /* random IID */ - ok(hres == E_INVALIDARG,"SASIID did not failed with !FADF_HAVEIID set for vt %d with %x\n", vttypes[i].vt, hres); - } - hres = SafeArrayDestroyDescriptor(a); - ok(hres == S_OK,"SADD failed with hres %x\n",hres); - } -} - -static void test_SafeArrayAllocDestroyDescriptor(void) -{ - SAFEARRAY *sa; - HRESULT hres; - int i; - - /* Failure cases */ - hres = SafeArrayAllocDescriptor(0, &sa); - ok(hres == E_INVALIDARG, "0 dimensions gave hres 0x%x\n", hres); - - hres = SafeArrayAllocDescriptor(65536, &sa); - ok(IS_ANCIENT || hres == E_INVALIDARG, - "65536 dimensions gave hres 0x%x\n", hres); - - if (0) - { - /* Crashes on 95: XP & Wine return E_POINTER */ - hres=SafeArrayAllocDescriptor(1, NULL); - ok(hres == E_POINTER,"NULL parm gave hres 0x%x\n", hres); - } - - /* Test up to the dimension boundary case */ - for (i = 5; i <= 65535; i += 30) - { - hres = SafeArrayAllocDescriptor(i, &sa); - ok(hres == S_OK, "%d dimensions failed; hres 0x%x\n", i, hres); - - if (hres == S_OK) - { - ok(SafeArrayGetDim(sa) == (UINT)i, "Dimension is %d; should be %d\n", - SafeArrayGetDim(sa), i); - - hres = SafeArrayDestroyDescriptor(sa); - ok(hres == S_OK, "destroy failed; hres 0x%x\n", hres); - } - } - - if (!pSafeArrayAllocDescriptorEx) - return; - - hres = pSafeArrayAllocDescriptorEx(VT_UI1, 0, &sa); - ok(hres == E_INVALIDARG, "0 dimensions gave hres 0x%x\n", hres); - - hres = pSafeArrayAllocDescriptorEx(VT_UI1, 65536, &sa); - ok(hres == E_INVALIDARG, "65536 dimensions gave hres 0x%x\n", hres); - - hres = pSafeArrayAllocDescriptorEx(VT_UI1, 1, NULL); - ok(hres == E_POINTER,"NULL parm gave hres 0x%x\n", hres); - - hres = pSafeArrayAllocDescriptorEx(-1, 1, &sa); - ok(hres == S_OK, "VT = -1 gave hres 0x%x\n", hres); - - sa->rgsabound[0].cElements = 0; - sa->rgsabound[0].lLbound = 1; - - hres = SafeArrayAllocData(sa); - ok(hres == S_OK, "SafeArrayAllocData gave hres 0x%x\n", hres); -} - -static void test_SafeArrayCreateLockDestroy(void) -{ - SAFEARRAYBOUND sab[4]; - SAFEARRAY *sa; - HRESULT hres; - VARTYPE vt; - int dimension; - -#define NUM_DIMENSIONS (int)(sizeof(sab) / sizeof(sab[0])) - - for (dimension = 0; dimension < NUM_DIMENSIONS; dimension++) - { - sab[dimension].lLbound = 0; - sab[dimension].cElements = 8; - } - - /* Failure cases */ -/* This test crashes very early versions with no error checking... - sa = SafeArrayCreate(VT_UI1, 1, NULL); - ok(sa == NULL, "NULL bounds didn't fail\n"); -*/ - sa = SafeArrayCreate(VT_UI1, 65536, sab); - ok(IS_ANCIENT || !sa, "Max bounds didn't fail\n"); - - memset(sab, 0, sizeof(sab)); - - /* Don't test 0 sized dimensions, as Windows has a bug which allows this */ - - for (dimension = 0; dimension < NUM_DIMENSIONS; dimension++) - sab[dimension].cElements = 8; - - /* Test all VARTYPES in 1-4 dimensions */ - for (dimension = 1; dimension < 4; dimension++) - { - for (vt = VT_EMPTY; vt < VT_CLSID; vt++) - { - DWORD dwLen = SAFEARRAY_GetVTSize(vt); - - sa = SafeArrayCreate(vt, dimension, sab); - - if (dwLen) - ok(sa || (IS_ANCIENT && (vt == VT_DECIMAL || vt == VT_I1 || vt == VT_UI2 || - vt == VT_UI4 || vt == VT_INT || vt == VT_UINT)), - "VARTYPE %d (@%d dimensions) failed\n", vt, dimension); - else - ok(sa == NULL || vt == VT_R8, - "VARTYPE %d (@%d dimensions) succeeded!\n", vt, dimension); - - if (sa) - { - ok(SafeArrayGetDim(sa) == (UINT)dimension, - "VARTYPE %d (@%d dimensions) cDims is %d, expected %d\n", - vt, dimension, SafeArrayGetDim(sa), dimension); - ok(SafeArrayGetElemsize(sa) == dwLen || vt == VT_R8, - "VARTYPE %d (@%d dimensions) cbElements is %d, expected %d\n", - vt, dimension, SafeArrayGetElemsize(sa), dwLen); - - if (vt != VT_UNKNOWN && vt != VT_DISPATCH) - { - ok((sa->fFeatures & FADF_HAVEIID) == 0, - "Non interface type should not have FADF_HAVEIID\n"); - if (pSafeArraySetIID) - { - hres = pSafeArraySetIID(sa, &IID_IUnknown); - ok(hres == E_INVALIDARG, - "Non interface type allowed SetIID(), hres %x\n", hres); - } - if (vt != VT_RECORD) - { - VARTYPE aVt; - - ok(IS_ANCIENT || sa->fFeatures & FADF_HAVEVARTYPE, - "Non interface type should have FADF_HAVEVARTYPE\n"); - if (pSafeArrayGetVartype) - { - hres = pSafeArrayGetVartype(sa, &aVt); - ok(hres == S_OK && aVt == vt, - "Non interface type %d: bad type %d, hres %x\n", vt, aVt, hres); - } - } - } - else - { - ok(IS_ANCIENT || sa->fFeatures & FADF_HAVEIID, - "Interface type should have FADF_HAVEIID\n"); - if (pSafeArraySetIID) - { - hres = pSafeArraySetIID(sa, &IID_IUnknown); - ok(hres == S_OK, - "Non interface type disallowed SetIID(), hres %x\n", hres); - } - ok((sa->fFeatures & FADF_HAVEVARTYPE) == 0, - "Interface type %d should not have FADF_HAVEVARTYPE\n", vt); - } - - hres = SafeArrayLock(sa); - ok(hres == S_OK, "Lock VARTYPE %d (@%d dimensions) failed; hres 0x%x\n", - vt, dimension, hres); - - if (hres == S_OK) - { - hres = SafeArrayDestroy(sa); - ok(hres == DISP_E_ARRAYISLOCKED,"Destroy() got hres %x\n", hres); - - hres = SafeArrayDestroyData(sa); - ok(hres == DISP_E_ARRAYISLOCKED,"DestroyData() got hres %x\n", hres); - - hres = SafeArrayDestroyDescriptor(sa); - ok(hres == DISP_E_ARRAYISLOCKED,"DestroyDescriptor() got hres %x\n", hres); - - hres = SafeArrayUnlock(sa); - ok(hres == S_OK, "Unlock VARTYPE %d (@%d dims) hres 0x%x\n", - vt, dimension, hres); - - hres = SafeArrayDestroyDescriptor(sa); - ok(hres == S_OK, "destroy VARTYPE %d (@%d dims) hres 0x%x\n", - vt, dimension, hres); - } - } - } - } -} - -static void test_VectorCreateLockDestroy(void) -{ - SAFEARRAY *sa; - HRESULT hres; - VARTYPE vt; - int element; - - if (!pSafeArrayCreateVector) - return; - sa = pSafeArrayCreateVector(VT_UI1, 0, 0); - ok(sa != NULL, "SACV with 0 elements failed.\n"); - - /* Test all VARTYPES in different lengths */ - for (element = 1; element <= 101; element += 10) - { - for (vt = VT_EMPTY; vt < VT_CLSID; vt++) - { - DWORD dwLen = SAFEARRAY_GetVTSize(vt); - - sa = pSafeArrayCreateVector(vt, 0, element); - - if (dwLen) - ok(sa != NULL, "VARTYPE %d (@%d elements) failed\n", vt, element); - else - ok(sa == NULL, "VARTYPE %d (@%d elements) succeeded!\n", vt, element); - - if (sa) - { - ok(SafeArrayGetDim(sa) == 1, "VARTYPE %d (@%d elements) cDims %d, not 1\n", - vt, element, SafeArrayGetDim(sa)); - ok(SafeArrayGetElemsize(sa) == dwLen, - "VARTYPE %d (@%d elements) cbElements is %d, expected %d\n", - vt, element, SafeArrayGetElemsize(sa), dwLen); - - hres = SafeArrayLock(sa); - ok(hres == S_OK, "Lock VARTYPE %d (@%d elements) failed; hres 0x%x\n", - vt, element, hres); - - if (hres == S_OK) - { - hres = SafeArrayUnlock(sa); - ok(hres == S_OK, "Unlock VARTYPE %d (@%d elements) failed; hres 0x%x\n", - vt, element, hres); - - hres = SafeArrayDestroyDescriptor(sa); - ok(hres == S_OK, "destroy VARTYPE %d (@%d elements) failed; hres 0x%x\n", - vt, element, hres); - } - } - } - } -} - -static void test_LockUnlock(void) -{ - SAFEARRAYBOUND sab[4]; - SAFEARRAY *sa; - HRESULT hres; - BOOL bVector = FALSE; - int dimension; - - /* Failure cases */ - hres = SafeArrayLock(NULL); - ok(hres == E_INVALIDARG, "Lock NULL array hres 0x%x\n", hres); - hres = SafeArrayUnlock(NULL); - ok(hres == E_INVALIDARG, "Lock NULL array hres 0x%x\n", hres); - - for (dimension = 0; dimension < NUM_DIMENSIONS; dimension++) - { - sab[dimension].lLbound = 0; - sab[dimension].cElements = 8; - } - - sa = SafeArrayCreate(VT_UI1, NUM_DIMENSIONS, sab); - - /* Test maximum locks */ -test_LockUnlock_Vector: - if (sa) - { - int count = 0; - - hres = SafeArrayUnlock(sa); - ok (hres == E_UNEXPECTED, "Bad %sUnlock gave hres 0x%x\n", - bVector ? "vector " : "\n", hres); - - while ((hres = SafeArrayLock(sa)) == S_OK) - count++; - ok (count == 65535 && hres == E_UNEXPECTED, "Lock %sfailed at %d; hres 0x%x\n", - bVector ? "vector " : "\n", count, hres); - - if (count == 65535 && hres == E_UNEXPECTED) - { - while ((hres = SafeArrayUnlock(sa)) == S_OK) - count--; - ok (count == 0 && hres == E_UNEXPECTED, "Unlock %sfailed at %d; hres 0x%x\n", - bVector ? "vector " : "\n", count, hres); - } - - SafeArrayDestroy(sa); - } - - if (bVector == FALSE && pSafeArrayCreateVector) - { - /* Test again with a vector */ - sa = pSafeArrayCreateVector(VT_UI1, 0, 100); - bVector = TRUE; - goto test_LockUnlock_Vector; - } -} - -static void test_SafeArrayGetPutElement(void) -{ - SAFEARRAYBOUND sab[4]; - LONG indices[NUM_DIMENSIONS]; - SAFEARRAY *sa; - HRESULT hres; - int value = 0, gotvalue, dimension; - unsigned int x,y,z,a; - - for (dimension = 0; dimension < NUM_DIMENSIONS; dimension++) - { - sab[dimension].lLbound = dimension * 2 + 1; - sab[dimension].cElements = dimension * 3 + 1; - } - - sa = SafeArrayCreate(VT_INT, NUM_DIMENSIONS, sab); - if (!sa) - return; /* Some early versions can't handle > 3 dims */ - - ok(sa->cbElements == sizeof(value), "int size mismatch\n"); - if (sa->cbElements != sizeof(value)) - return; - - /* Failure cases */ - for (x = 0; x < NUM_DIMENSIONS; x++) - { - indices[0] = sab[0].lLbound; - indices[1] = sab[1].lLbound; - indices[2] = sab[2].lLbound; - indices[3] = sab[3].lLbound; - - indices[x] = indices[x] - 1; - hres = SafeArrayPutElement(sa, indices, &value); - ok(hres == DISP_E_BADINDEX, "Put allowed too small index in dimension %d\n", x); - hres = SafeArrayGetElement(sa, indices, &value); - ok(hres == DISP_E_BADINDEX, "Get allowed too small index in dimension %d\n", x); - - indices[x] = sab[x].lLbound + sab[x].cElements; - hres = SafeArrayPutElement(sa, indices, &value); - ok(hres == DISP_E_BADINDEX, "Put allowed too big index in dimension %d\n", x); - hres = SafeArrayGetElement(sa, indices, &value); - ok(hres == DISP_E_BADINDEX, "Get allowed too big index in dimension %d\n", x); - } - - indices[0] = sab[0].lLbound; - indices[1] = sab[1].lLbound; - indices[2] = sab[2].lLbound; - indices[3] = sab[3].lLbound; - - hres = SafeArrayPutElement(NULL, indices, &value); - ok(hres == E_INVALIDARG, "Put NULL array hres 0x%x\n", hres); - hres = SafeArrayGetElement(NULL, indices, &value); - ok(hres == E_INVALIDARG, "Get NULL array hres 0x%x\n", hres); - - hres = SafeArrayPutElement(sa, NULL, &value); - ok(hres == E_INVALIDARG, "Put NULL indices hres 0x%x\n", hres); - hres = SafeArrayGetElement(sa, NULL, &value); - ok(hres == E_INVALIDARG, "Get NULL indices hres 0x%x\n", hres); - - if (0) - { - /* This is retarded. Windows checks every case of invalid parameters - * except the following, which crashes. We ERR this in Wine. - */ - hres = SafeArrayPutElement(sa, indices, NULL); - ok(hres == E_INVALIDARG, "Put NULL value hres 0x%x\n", hres); - } - - hres = SafeArrayGetElement(sa, indices, NULL); - ok(hres == E_INVALIDARG, "Get NULL value hres 0x%x\n", hres); - - value = 0; - - /* Make sure we can read and get back the correct values in 4 dimensions, - * Each with a different size and lower bound. - */ - for (x = 0; x < sab[0].cElements; x++) - { - indices[0] = sab[0].lLbound + x; - for (y = 0; y < sab[1].cElements; y++) - { - indices[1] = sab[1].lLbound + y; - for (z = 0; z < sab[2].cElements; z++) - { - indices[2] = sab[2].lLbound + z; - for (a = 0; a < sab[3].cElements; a++) - { - indices[3] = sab[3].lLbound + a; - hres = SafeArrayPutElement(sa, indices, &value); - ok(hres == S_OK, "Failed to put element at (%d,%d,%d,%d) hres 0x%x\n", - x, y, z, a, hres); - value++; - } - } - } - } - - value = 0; - - for (x = 0; x < sab[0].cElements; x++) - { - indices[0] = sab[0].lLbound + x; - for (y = 0; y < sab[1].cElements; y++) - { - indices[1] = sab[1].lLbound + y; - for (z = 0; z < sab[2].cElements; z++) - { - indices[2] = sab[2].lLbound + z; - for (a = 0; a < sab[3].cElements; a++) - { - indices[3] = sab[3].lLbound + a; - gotvalue = value / 3; - hres = SafeArrayGetElement(sa, indices, &gotvalue); - ok(hres == S_OK, "Failed to get element at (%d,%d,%d,%d) hres 0x%x\n", - x, y, z, a, hres); - if (hres == S_OK) - ok(value == gotvalue, "Got value %d instead of %d at (%d,%d,%d,%d)\n", - gotvalue, value, x, y, z, a); - value++; - } - } - } - } - SafeArrayDestroy(sa); -} - -static void test_SafeArrayGetPutElement_BSTR(void) -{ - SAFEARRAYBOUND sab; - LONG indices[1]; - SAFEARRAY *sa; - HRESULT hres; - BSTR value = 0, gotvalue; - const OLECHAR szTest[5] = { 'T','e','s','t','\0' }; - - sab.lLbound = 1; - sab.cElements = 1; - - sa = SafeArrayCreate(VT_BSTR, 1, &sab); - ok(sa != NULL, "BSTR test couldn't create array\n"); - if (!sa) - return; - - ok(sa->cbElements == sizeof(BSTR), "BSTR size mismatch\n"); - if (sa->cbElements != sizeof(BSTR)) - return; - - indices[0] = sab.lLbound; - value = SysAllocString(szTest); - ok (value != NULL, "Expected non-NULL\n"); - hres = SafeArrayPutElement(sa, indices, value); - ok(hres == S_OK, "Failed to put bstr element hres 0x%x\n", hres); - gotvalue = NULL; - hres = SafeArrayGetElement(sa, indices, &gotvalue); - ok(hres == S_OK, "Failed to get bstr element at hres 0x%x\n", hres); - if (hres == S_OK) - ok(SysStringLen(value) == SysStringLen(gotvalue), "Got len %d instead of %d\n", SysStringLen(gotvalue), SysStringLen(value)); - SafeArrayDestroy(sa); -} - -static int tunk_xref = 0; -static HRESULT WINAPI tunk_QueryInterface(LPUNKNOWN punk,REFIID riid, LPVOID *x) { - return E_FAIL; -} -static ULONG WINAPI tunk_AddRef(LPUNKNOWN punk) { - return ++tunk_xref; -} - -static ULONG WINAPI tunk_Release(LPUNKNOWN punk) { - return --tunk_xref; -} - -static const IUnknownVtbl xtunk_vtbl = { - tunk_QueryInterface, - tunk_AddRef, - tunk_Release -}; - -static struct xtunk_iface { - const IUnknownVtbl *lpvtbl; -} xtunk_iface; - - -static void test_SafeArrayGetPutElement_IUnknown(void) -{ - SAFEARRAYBOUND sab; - LONG indices[1]; - SAFEARRAY *sa; - HRESULT hres; - LPUNKNOWN value = 0, gotvalue; - - sab.lLbound = 1; - sab.cElements = 1; - sa = SafeArrayCreate(VT_UNKNOWN, 1, &sab); - ok(sa != NULL, "UNKNOWN test couldn't create array\n"); - if (!sa) - return; - - ok(sa->cbElements == sizeof(LPUNKNOWN), "LPUNKNOWN size mismatch\n"); - if (sa->cbElements != sizeof(LPUNKNOWN)) - return; - - indices[0] = sab.lLbound; - xtunk_iface.lpvtbl = &xtunk_vtbl; - value = (LPUNKNOWN)&xtunk_iface; - tunk_xref = 1; - ok (value != NULL, "Expected non-NULL\n"); - hres = SafeArrayPutElement(sa, indices, value); - ok(hres == S_OK, "Failed to put bstr element hres 0x%x\n", hres); - ok(tunk_xref == 2,"Failed to increment refcount of iface.\n"); - gotvalue = NULL; - hres = SafeArrayGetElement(sa, indices, &gotvalue); - ok(tunk_xref == 3,"Failed to increment refcount of iface.\n"); - ok(hres == S_OK, "Failed to get bstr element at hres 0x%x\n", hres); - if (hres == S_OK) - ok(value == gotvalue, "Got %p instead of %p\n", gotvalue, value); - SafeArrayDestroy(sa); - ok(tunk_xref == 2,"Failed to decrement refcount of iface.\n"); -} - -static void test_SafeArrayRedim_IUnknown(void) -{ - SAFEARRAYBOUND sab; - LONG indices[1]; - SAFEARRAY *sa; - HRESULT hres; - LPUNKNOWN value; - - sab.lLbound = 1; - sab.cElements = 2; - sa = SafeArrayCreate(VT_UNKNOWN, 1, &sab); - ok(sa != NULL, "UNKNOWN test couldn't create array\n"); - if (!sa) - return; - - ok(sa->cbElements == sizeof(LPUNKNOWN), "LPUNKNOWN size mismatch\n"); - if (sa->cbElements != sizeof(LPUNKNOWN)) - return; - - indices[0] = 2; - xtunk_iface.lpvtbl = &xtunk_vtbl; - value = (LPUNKNOWN)&xtunk_iface; - tunk_xref = 1; - hres = SafeArrayPutElement(sa, indices, value); - ok(hres == S_OK, "Failed to put IUnknown element hres 0x%x\n", hres); - ok(tunk_xref == 2,"Failed to increment refcount of iface.\n"); - sab.cElements = 1; - hres = SafeArrayRedim(sa, &sab); - ok(hres == S_OK, "Failed to shrink array hres 0x%x\n", hres); - ok(tunk_xref == 1, "Failed to decrement refcount\n"); - SafeArrayDestroy(sa); -} - -static void test_SafeArrayGetPutElement_VARIANT(void) -{ - SAFEARRAYBOUND sab; - LONG indices[1]; - SAFEARRAY *sa; - HRESULT hres; - VARIANT value, gotvalue; - - sab.lLbound = 1; - sab.cElements = 1; - sa = SafeArrayCreate(VT_VARIANT, 1, &sab); - ok(sa != NULL, "VARIANT test couldn't create array\n"); - if (!sa) - return; - - ok(sa->cbElements == sizeof(VARIANT), "VARIANT size mismatch\n"); - if (sa->cbElements != sizeof(VARIANT)) - return; - - indices[0] = sab.lLbound; - V_VT(&value) = VT_I4; - V_I4(&value) = 0x42424242; - hres = SafeArrayPutElement(sa, indices, &value); - ok(hres == S_OK, "Failed to put Variant I4 element hres 0x%x\n", hres); - - V_VT(&gotvalue) = 0xdead; - hres = SafeArrayGetElement(sa, indices, &gotvalue); - ok(hres == S_OK, "Failed to get variant element at hres 0x%x\n", hres); - - V_VT(&gotvalue) = VT_EMPTY; - hres = SafeArrayGetElement(sa, indices, &gotvalue); - ok(hres == S_OK, "Failed to get variant element at hres 0x%x\n", hres); - if (hres == S_OK) { - ok(V_VT(&value) == V_VT(&gotvalue), "Got type 0x%x instead of 0x%x\n", V_VT(&value), V_VT(&gotvalue)); - if (V_VT(&value) == V_VT(&gotvalue)) - ok(V_I4(&value) == V_I4(&gotvalue), "Got %d instead of %d\n", V_I4(&value), V_VT(&gotvalue)); - } - SafeArrayDestroy(sa); -} - - -static void test_SafeArrayCopyData(void) -{ - SAFEARRAYBOUND sab[4]; - SAFEARRAY *sa; - SAFEARRAY *sacopy; - HRESULT hres; - int dimension,size=1; - - if (!pSafeArrayCopyData) - return; - - for (dimension = 0; dimension < NUM_DIMENSIONS; dimension++) - { - sab[dimension].lLbound = dimension * 2 + 2; - sab[dimension].cElements = dimension * 3 + 1; - size *= sab[dimension].cElements; - } - - sa = SafeArrayCreate(VT_INT, NUM_DIMENSIONS, sab); - ok(sa != NULL, "Copy test couldn't create array\n"); - sacopy = SafeArrayCreate(VT_INT, NUM_DIMENSIONS, sab); - ok(sacopy != NULL, "Copy test couldn't create copy array\n"); - - if (!sa || !sacopy) - return; - - ok(sa->cbElements == sizeof(int), "int size mismatch\n"); - if (sa->cbElements != sizeof(int)) - return; - - /* Fill the source array with some data; it doesn't matter what */ - for (dimension = 0; dimension < size; dimension++) - { - int* data = (int*)sa->pvData; - data[dimension] = dimension; - } - - hres = pSafeArrayCopyData(sa, sacopy); - ok(hres == S_OK, "copy data failed hres 0x%x\n", hres); - if (hres == S_OK) - { - ok(!memcmp(sa->pvData, sacopy->pvData, size * sizeof(int)), "compared different\n"); - } - - /* Failure cases */ - hres = pSafeArrayCopyData(NULL, sacopy); - ok(hres == E_INVALIDARG, "Null copy source hres 0x%x\n", hres); - hres = pSafeArrayCopyData(sa, NULL); - ok(hres == E_INVALIDARG, "Null copy hres 0x%x\n", hres); - - sacopy->rgsabound[0].cElements += 1; - hres = pSafeArrayCopyData(sa, sacopy); - ok(hres == E_INVALIDARG, "Bigger copy first dimension hres 0x%x\n", hres); - - sacopy->rgsabound[0].cElements -= 2; - hres = pSafeArrayCopyData(sa, sacopy); - ok(hres == E_INVALIDARG, "Smaller copy first dimension hres 0x%x\n", hres); - sacopy->rgsabound[0].cElements += 1; - - sacopy->rgsabound[3].cElements += 1; - hres = pSafeArrayCopyData(sa, sacopy); - ok(hres == E_INVALIDARG, "Bigger copy last dimension hres 0x%x\n", hres); - - sacopy->rgsabound[3].cElements -= 2; - hres = pSafeArrayCopyData(sa, sacopy); - ok(hres == E_INVALIDARG, "Smaller copy last dimension hres 0x%x\n", hres); - sacopy->rgsabound[3].cElements += 1; - - SafeArrayDestroy(sacopy); - sacopy = NULL; - hres = pSafeArrayCopyData(sa, sacopy); - ok(hres == E_INVALIDARG, "->Null copy hres 0x%x\n", hres); - - hres = SafeArrayCopy(sa, &sacopy); - ok(hres == S_OK, "copy failed hres 0x%x\n", hres); - if (hres == S_OK) - { - ok(SafeArrayGetElemsize(sa) == SafeArrayGetElemsize(sacopy),"elemsize wrong\n"); - ok(SafeArrayGetDim(sa) == SafeArrayGetDim(sacopy),"dimensions wrong\n"); - ok(!memcmp(sa->pvData, sacopy->pvData, size * sizeof(int)), "compared different\n"); - } - - SafeArrayDestroy(sa); -} - -static void test_SafeArrayCreateEx(void) -{ - IRecordInfoImpl* iRec; - SAFEARRAYBOUND sab[4]; - SAFEARRAY *sa; - HRESULT hres; - int dimension; - - if (!pSafeArrayCreateEx) - return; - - for (dimension = 0; dimension < NUM_DIMENSIONS; dimension++) - { - sab[dimension].lLbound = 0; - sab[dimension].cElements = 8; - } - - /* Failure cases */ - sa = pSafeArrayCreateEx(VT_UI1, 1, NULL, NULL); - ok(sa == NULL, "CreateEx NULL bounds didn't fail\n"); - - /* test IID storage & defaulting */ - sa = pSafeArrayCreateEx(VT_DISPATCH, 1, sab, (PVOID)&IID_ITypeInfo); - ok(sa != NULL, "CreateEx (ITypeInfo) failed\n"); - - if (sa) - { - GUID guid; - if (pSafeArrayGetIID) - { - hres = pSafeArrayGetIID(sa, &guid); - ok(hres == S_OK, "CreateEx (ITypeInfo) no IID hres 0x%x\n", hres); - if (hres == S_OK) - { - ok(IsEqualGUID(&guid, &IID_ITypeInfo), "CreateEx (ITypeInfo) bad IID\n"); - } - } - if (pSafeArraySetIID) - { - hres = pSafeArraySetIID(sa, &IID_IUnknown); - ok(hres == S_OK, "Failed to set IID, hres = %8x\n", hres); - if (hres == S_OK && pSafeArrayGetIID) - { - hres = pSafeArrayGetIID(sa, &guid); - ok(hres == S_OK && IsEqualGUID(&guid, &IID_IUnknown), "Set bad IID\n"); - } - } - SafeArrayDestroy(sa); - } - - sa = pSafeArrayCreateEx(VT_DISPATCH, 1, sab, NULL); - ok(sa != NULL, "CreateEx (NULL) failed\n"); - - if (sa) - { - GUID guid; - if (pSafeArrayGetIID) - { - hres = pSafeArrayGetIID(sa, &guid); - ok(hres == S_OK, "CreateEx (NULL) no IID hres 0x%x\n", hres); - if (hres == S_OK) - { - ok(IsEqualGUID(&guid, &IID_IDispatch), "CreateEx (NULL) bad IID\n"); - } - } - SafeArrayDestroy(sa); - } - - sa = pSafeArrayCreateEx(VT_UNKNOWN, 1, sab, NULL); - ok(sa != NULL, "CreateEx (NULL-Unk) failed\n"); - - if (sa) - { - GUID guid; - if (pSafeArrayGetIID) - { - hres = pSafeArrayGetIID(sa, &guid); - ok(hres == S_OK, "CreateEx (NULL-Unk) no IID hres 0x%x\n", hres); - if (hres == S_OK) - { - ok(IsEqualGUID(&guid, &IID_IUnknown), "CreateEx (NULL-Unk) bad IID\n"); - } - } - SafeArrayDestroy(sa); - } - - /* VT_RECORD failure case */ - sa = pSafeArrayCreateEx(VT_RECORD, 1, sab, NULL); - ok(sa == NULL, "CreateEx (NULL-Rec) succeded\n"); - - iRec = IRecordInfoImpl_Construct(); - - /* Win32 doesn't care if GetSize fails */ - fail_GetSize = TRUE; - sa = pSafeArrayCreateEx(VT_RECORD, 1, sab, (LPVOID)iRec); - ok(sa != NULL, "CreateEx (Fail Size) failed\n"); - ok(iRec->ref == START_REF_COUNT + 1, "Wrong iRec refcount %d\n", iRec->ref); - ok(iRec->sizeCalled == 1, "GetSize called %d times\n", iRec->sizeCalled); - ok(iRec->clearCalled == 0, "Clear called %d times\n", iRec->clearCalled); - if (sa) - { - ok(sa->cbElements == RECORD_SIZE_FAIL, "Altered size to %d\n", sa->cbElements); - SafeArrayDestroy(sa); - ok(iRec->clearCalled == sab[0].cElements, "Destroy->Clear called %d times\n", iRec->clearCalled); - } - - /* Test VT_RECORD array */ - fail_GetSize = FALSE; - iRec->ref = START_REF_COUNT; - iRec->sizeCalled = 0; - iRec->clearCalled = 0; - sa = pSafeArrayCreateEx(VT_RECORD, 1, sab, (LPVOID)iRec); - ok(sa != NULL, "CreateEx (Rec) failed\n"); - ok(iRec->ref == START_REF_COUNT + 1, "Wrong iRec refcount %d\n", iRec->ref); - ok(iRec->sizeCalled == 1, "GetSize called %d times\n", iRec->sizeCalled); - ok(iRec->clearCalled == 0, "Clear called %d times\n", iRec->clearCalled); - if (sa && pSafeArrayGetRecordInfo) - { - IRecordInfo* saRec = NULL; - hres = pSafeArrayGetRecordInfo(sa, &saRec); - - ok(hres == S_OK,"GRI failed\n"); - ok(saRec == (IRecordInfo*)iRec,"Different saRec\n"); - ok(iRec->ref == START_REF_COUNT + 2, "Didn't AddRef %d\n", iRec->ref); - if (iRec->ref == START_REF_COUNT + 2) - IRecordInfo_Release(saRec); - - ok(sa->cbElements == RECORD_SIZE,"Elemsize is %d\n", sa->cbElements); - - SafeArrayDestroy(sa); - ok(iRec->sizeCalled == 1, "Destroy->GetSize called %d times\n", iRec->sizeCalled); - ok(iRec->clearCalled == sab[0].cElements, "Destroy->Clear called %d times\n", iRec->clearCalled); - ok(iRec->ref == START_REF_COUNT, "Wrong iRec refcount %d\n", iRec->ref); - } -} - -static void test_SafeArrayClear(void) -{ - SAFEARRAYBOUND sab; - SAFEARRAY *sa; - VARIANTARG v; - HRESULT hres; - - sab.lLbound = 0; - sab.cElements = 10; - sa = SafeArrayCreate(VT_UI1, 1, &sab); - ok(sa != NULL, "Create() failed.\n"); - if (!sa) - return; - - /* Test clearing non-NULL variants containing arrays */ - V_VT(&v) = VT_ARRAY|VT_UI1; - V_ARRAY(&v) = sa; - hres = VariantClear(&v); - ok(hres == S_OK && V_VT(&v) == VT_EMPTY, "VariantClear: hres 0x%x, Type %d\n", hres, V_VT(&v)); - ok(V_ARRAY(&v) == sa, "VariantClear: Overwrote value\n"); - - sa = SafeArrayCreate(VT_UI1, 1, &sab); - ok(sa != NULL, "Create() failed.\n"); - if (!sa) - return; - - V_VT(&v) = VT_SAFEARRAY; - V_ARRAY(&v) = sa; - hres = VariantClear(&v); - ok(hres == DISP_E_BADVARTYPE, "VariantClear: hres 0x%x\n", hres); - - V_VT(&v) = VT_SAFEARRAY|VT_BYREF; - V_ARRAYREF(&v) = &sa; - hres = VariantClear(&v); - ok(hres == DISP_E_BADVARTYPE, "VariantClear: hres 0x%x\n", hres); - - SafeArrayDestroy(sa); -} - -static void test_SafeArrayCopy(void) -{ - SAFEARRAYBOUND sab; - SAFEARRAY *sa, *sa2; - VARIANTARG vSrc, vDst; - HRESULT hres; - - sab.lLbound = 0; - sab.cElements = 10; - sa = SafeArrayCreate(VT_UI1, 1, &sab); - ok(sa != NULL, "Create() failed.\n"); - if (!sa) - return; - - /* Test copying non-NULL variants containing arrays */ - V_VT(&vSrc) = (VT_ARRAY|VT_BYREF|VT_UI1); - V_ARRAYREF(&vSrc) = &sa; - V_VT(&vDst) = VT_EMPTY; - - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && V_VT(&vDst) == (VT_ARRAY|VT_BYREF|VT_UI1), - "VariantCopy: hres 0x%x, Type %d\n", hres, V_VT(&vDst)); - ok(V_ARRAYREF(&vDst) == &sa, "VariantClear: Performed deep copy\n"); - - V_VT(&vSrc) = (VT_ARRAY|VT_UI1); - V_ARRAY(&vSrc) = sa; - V_VT(&vDst) = VT_EMPTY; - - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && V_VT(&vDst) == (VT_ARRAY|VT_UI1), - "VariantCopy: hres 0x%x, Type %d\n", hres, V_VT(&vDst)); - ok(V_ARRAY(&vDst) != sa, "VariantClear: Performed shallow copy\n"); - - SafeArrayDestroy(V_ARRAY(&vSrc)); - SafeArrayDestroy(V_ARRAY(&vDst)); - - hres = SafeArrayAllocDescriptor(1, &sa); - ok(hres == S_OK, "SafeArrayAllocDescriptor failed with error 0x%08x\n", hres); - - hres = SafeArrayCopy(sa, &sa2); - ok(hres == E_INVALIDARG, - "SafeArrayCopy with empty array should have failed with error E_INVALIDARG instead of 0x%08x\n", - hres); - sa->cbElements = 16; - hres = SafeArrayCopy(sa, &sa2); - ok(hres == S_OK, "SafeArrayCopy failed with error 0x%08x\n", hres); - - SafeArrayDestroy(sa); -} - -#define MKARRAY(low,num,typ) sab.lLbound = low; sab.cElements = num; \ - sa = SafeArrayCreate(typ, 1, &sab); ok(sa != NULL, "Create() failed.\n"); \ - if (!sa) return; \ - V_VT(&v) = VT_ARRAY|typ; V_ARRAY(&v) = sa; VariantInit(&v2) - -#define MKARRAYCONT(low,num,typ) sab.lLbound = low; sab.cElements = num; \ - sa = SafeArrayCreate(typ, 1, &sab); if (!sa) continue; \ - V_VT(&v) = VT_ARRAY|typ; V_ARRAY(&v) = sa; VariantInit(&v2) - -static void test_SafeArrayChangeTypeEx(void) -{ - static const char *szHello = "Hello World"; - SAFEARRAYBOUND sab; - SAFEARRAY *sa; - VARIANTARG v,v2; - VARTYPE vt; - HRESULT hres; - - /* VT_ARRAY|VT_UI1 -> VT_BSTR */ - MKARRAY(0,strlen(szHello)+1,VT_UI1); - memcpy(sa->pvData, szHello, strlen(szHello)+1); - - hres = VariantChangeTypeEx(&v2, &v, 0, 0, VT_BSTR); - ok(hres == S_OK, "CTE VT_ARRAY|VT_UI1 -> VT_BSTR failed with %x\n", hres); - if (hres == S_OK) - { - ok(V_VT(&v2) == VT_BSTR, "CTE VT_ARRAY|VT_UI1 -> VT_BSTR did not return VT_BSTR, but %d.\n",V_VT(&v2)); - ok(strcmp((char*)V_BSTR(&v2),szHello) == 0,"Expected string '%s', got '%s'\n", szHello, - (char*)V_BSTR(&v2)); - VariantClear(&v2); - } - - /* VT_VECTOR|VT_UI1 -> VT_BSTR */ - SafeArrayDestroy(sa); - if (pSafeArrayCreateVector) - { - sa = pSafeArrayCreateVector(VT_UI1, 0, strlen(szHello)+1); - ok(sa != NULL, "CreateVector() failed.\n"); - if (!sa) - return; - - memcpy(sa->pvData, szHello, strlen(szHello)+1); - V_VT(&v) = VT_VECTOR|VT_UI1; - V_ARRAY(&v) = sa; - VariantInit(&v2); - - hres = VariantChangeTypeEx(&v2, &v, 0, 0, VT_BSTR); - ok(hres == DISP_E_BADVARTYPE, "CTE VT_VECTOR|VT_UI1 returned %x\n", hres); - - /* (vector)VT_ARRAY|VT_UI1 -> VT_BSTR (In place) */ - V_VT(&v) = VT_ARRAY|VT_UI1; - hres = VariantChangeTypeEx(&v, &v, 0, 0, VT_BSTR); - ok(hres == S_OK, "CTE VT_ARRAY|VT_UI1 -> VT_BSTR failed with %x\n", hres); - if (hres == S_OK) - { - ok(V_VT(&v) == VT_BSTR, "CTE VT_ARRAY|VT_UI1 -> VT_BSTR did not return VT_BSTR, but %d.\n",V_VT(&v)); - ok(strcmp((char*)V_BSTR(&v),szHello) == 0,"Expected string '%s', got '%s'\n", szHello, - (char*)V_BSTR(&v)); - VariantClear(&v); - } - } - - /* To/from BSTR only works with arrays of VT_UI1 */ - for (vt = 0; vt <= VT_CLSID; vt++) - { - if (vt == VT_UI1) - continue; - - MKARRAYCONT(0,1,vt); - hres = VariantChangeTypeEx(&v2, &v, 0, 0, VT_BSTR); - ok(hres != S_OK, "CTE VT_ARRAY|VT %d->BSTR succeeded\n", vt); - VariantClear(&v2); - } - - /* Can't change an array of one type into array of another type , even - * if the other type is the same size - */ - if (pSafeArrayCreateVector) - { - sa = pSafeArrayCreateVector(VT_UI1, 0, 1); - ok(sa != NULL, "CreateVector() failed.\n"); - if (!sa) - return; - - V_VT(&v) = VT_ARRAY|VT_UI1; - V_ARRAY(&v) = sa; - hres = VariantChangeTypeEx(&v2, &v, 0, 0, VT_ARRAY|VT_I1); - ok(hres == DISP_E_TYPEMISMATCH, "CTE VT_ARRAY|VT_UI1->VT_ARRAY|VT_I1 returned %x\n", hres); - - /* But can change to the same array type */ - SafeArrayDestroy(sa); - sa = pSafeArrayCreateVector(VT_UI1, 0, 1); - ok(sa != NULL, "CreateVector() failed.\n"); - if (!sa) - return; - V_VT(&v) = VT_ARRAY|VT_UI1; - V_ARRAY(&v) = sa; - hres = VariantChangeTypeEx(&v2, &v, 0, 0, VT_ARRAY|VT_UI1); - ok(hres == S_OK, "CTE VT_ARRAY|VT_UI1->VT_ARRAY|VT_UI1 returned %x\n", hres); - } - - /* NULL/EMPTY */ - MKARRAY(0,1,VT_UI1); - hres = VariantChangeTypeEx(&v2, &v, 0, 0, VT_NULL); - ok(hres == DISP_E_TYPEMISMATCH, "CTE VT_ARRAY|VT_UI1 returned %x\n", hres); - MKARRAY(0,1,VT_UI1); - hres = VariantChangeTypeEx(&v2, &v, 0, 0, VT_EMPTY); - ok(hres == DISP_E_TYPEMISMATCH, "CTE VT_ARRAY|VT_UI1 returned %x\n", hres); - -} - -static void test_SafeArrayDestroyData (void) -{ - SAFEARRAYBOUND sab; - SAFEARRAY *sa; - HRESULT hres; - int value = 0xdeadbeef; - LONG index[1]; - void HUGEP *temp_pvData; - - sab.lLbound = 0; - sab.cElements = 10; - sa = SafeArrayCreate(VT_INT, 1, &sab); - ok(sa != NULL, "Create() failed.\n"); - if (!sa) - return; - index[0] = 1; - SafeArrayPutElement (sa, index, &value); - -/* SafeArrayDestroyData shouldn't free pvData if FADF_STATIC is set. */ - sa->fFeatures |= FADF_STATIC; - temp_pvData = sa->pvData; - hres = SafeArrayDestroyData(sa); - ok(hres == S_OK, "SADData FADF_STATIC failed, error code %x.\n",hres); - ok(sa->pvData == temp_pvData, "SADData FADF_STATIC: pvData=%p, expected %p (fFeatures = %d).\n", - sa->pvData, temp_pvData, sa->fFeatures); - SafeArrayGetElement (sa, index, &value); - ok(value == 0, "Data not cleared after SADData\n"); - -/* Clear FADF_STATIC, now really destroy the data. */ - sa->fFeatures ^= FADF_STATIC; - hres = SafeArrayDestroyData(sa); - ok(hres == S_OK, "SADData !FADF_STATIC failed, error code %x.\n",hres); - ok(sa->pvData == NULL, "SADData !FADF_STATIC: pvData=%p, expected NULL.\n", sa->pvData); - - hres = SafeArrayDestroy(sa); - ok(hres == S_OK, "SAD failed, error code %x.\n", hres); -} - -START_TEST(safearray) -{ - hOleaut32 = GetModuleHandleA("oleaut32.dll"); - - GETPTR(SafeArrayAllocDescriptorEx); - GETPTR(SafeArrayCopyData); - GETPTR(SafeArrayGetIID); - GETPTR(SafeArraySetIID); - GETPTR(SafeArrayGetVartype); - GETPTR(SafeArrayCreateEx); - GETPTR(SafeArrayCreateVector); - - check_for_VT_INT_PTR(); - test_safearray(); - test_SafeArrayAllocDestroyDescriptor(); - test_SafeArrayCreateLockDestroy(); - test_VectorCreateLockDestroy(); - test_LockUnlock(); - test_SafeArrayChangeTypeEx(); - test_SafeArrayCopy(); - test_SafeArrayClear(); - test_SafeArrayCreateEx(); - test_SafeArrayCopyData(); - test_SafeArrayDestroyData(); - test_SafeArrayGetPutElement(); - test_SafeArrayGetPutElement_BSTR(); - test_SafeArrayGetPutElement_IUnknown(); - test_SafeArrayRedim_IUnknown(); - test_SafeArrayGetPutElement_VARIANT(); -} diff --git a/rostests/winetests/oleaut32/test_tlb.idl b/rostests/winetests/oleaut32/test_tlb.idl deleted file mode 100644 index 91b6a7680af..00000000000 --- a/rostests/winetests/oleaut32/test_tlb.idl +++ /dev/null @@ -1,39 +0,0 @@ -/* - * ITypeLib test IDL - we dump it and compare results in typelib.c - * - * 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 - */ - -import "oaidl.idl"; /* needed by widl */ - -[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784)] -library Test -{ - importlib("stdole2.tlb"); - - [dual,uuid(b14b6bb5-904e-4ff9-b247-bd361f7aaedd)] - interface IDualIface : IDispatch - { - HRESULT test(); - } - - [uuid(ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009)] - interface ISimpleIface : IDispatch - { - HRESULT test(); - } -} diff --git a/rostests/winetests/oleaut32/testlist.c b/rostests/winetests/oleaut32/testlist.c deleted file mode 100644 index 324c7b74570..00000000000 --- a/rostests/winetests/oleaut32/testlist.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_olefont(void); -extern void func_olepicture(void); -extern void func_safearray(void); -extern void func_tmarshal(void); -extern void func_typelib(void); -extern void func_usrmarshal(void); -extern void func_varformat(void); -extern void func_vartest(void); -extern void func_vartype(void); - -const struct test winetest_testlist[] = -{ - { "olefont", func_olefont }, - { "olepicture", func_olepicture }, - { "safearray", func_safearray }, - { "tmarshal", func_tmarshal }, - { "typelib", func_typelib }, - { "usrmarshal", func_usrmarshal }, - { "varformat", func_varformat }, - { "vartest", func_vartest }, - { "vartype", func_vartype }, - { 0, 0 } -}; diff --git a/rostests/winetests/oleaut32/tmarshal.c b/rostests/winetests/oleaut32/tmarshal.c deleted file mode 100644 index c96fb33d618..00000000000 --- a/rostests/winetests/oleaut32/tmarshal.c +++ /dev/null @@ -1,1178 +0,0 @@ -/* - * Copyright (C) 2005-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 - * - */ - -#define COBJMACROS - -#include -#include -#include - -#include - -#include "tmarshal.h" -#include "tmarshal_dispids.h" - -#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error 0x%08lx\n", (unsigned long int)hr) - -/* Debugging functions from wine/libs/wine/debug.c */ - -/* allocate some tmp string space */ -/* FIXME: this is not 100% thread-safe */ -static char *get_tmp_space( int size ) -{ - static char *list[32]; - static long pos; - char *ret; - int idx; - - idx = ++pos % (sizeof(list)/sizeof(list[0])); - if ((ret = realloc( list[idx], size ))) list[idx] = ret; - return ret; -} - -/* default implementation of wine_dbgstr_wn */ -static const char *default_dbgstr_wn( const WCHAR *str, int n ) -{ - char *dst, *res; - - if (!HIWORD(str)) - { - if (!str) return "(null)"; - res = get_tmp_space( 6 ); - sprintf( res, "#%04x", LOWORD(str) ); - return res; - } - if (n == -1) n = lstrlenW(str); - if (n < 0) n = 0; - else if (n > 200) n = 200; - dst = res = get_tmp_space( n * 5 + 7 ); - *dst++ = 'L'; - *dst++ = '"'; - while (n-- > 0) - { - 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++ = (char)c; - else - { - *dst++ = '\\'; - sprintf(dst,"%04x",c); - dst+=4; - } - } - } - *dst++ = '"'; - if (*str) - { - *dst++ = '.'; - *dst++ = '.'; - *dst++ = '.'; - } - *dst = 0; - return res; -} - -const char *wine_dbgstr_wn( const WCHAR *s, int n ) -{ - return default_dbgstr_wn(s, n); -} - -const char *wine_dbgstr_w( const WCHAR *s ) -{ - return default_dbgstr_wn( s, -1 ); -} - - -#define RELEASEMARSHALDATA WM_USER - -struct host_object_data -{ - IStream *stream; - IID iid; - IUnknown *object; - MSHLFLAGS marshal_flags; - HANDLE marshal_event; - IMessageFilter *filter; -}; - -static DWORD CALLBACK host_object_proc(LPVOID p) -{ - struct host_object_data *data = (struct host_object_data *)p; - HRESULT hr; - MSG msg; - - CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - if (data->filter) - { - IMessageFilter * prev_filter = NULL; - hr = CoRegisterMessageFilter(data->filter, &prev_filter); - if (prev_filter) IMessageFilter_Release(prev_filter); - ok_ole_success(hr, CoRegisterMessageFilter); - } - - hr = CoMarshalInterface(data->stream, &data->iid, data->object, MSHCTX_INPROC, NULL, data->marshal_flags); - ok_ole_success(hr, CoMarshalInterface); - - /* force the message queue to be created before signaling parent thread */ - PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE); - - SetEvent(data->marshal_event); - - while (GetMessage(&msg, NULL, 0, 0)) - { - if (msg.hwnd == NULL && msg.message == RELEASEMARSHALDATA) - { - trace("releasing marshal data\n"); - CoReleaseMarshalData(data->stream); - SetEvent((HANDLE)msg.lParam); - } - else - DispatchMessage(&msg); - } - - HeapFree(GetProcessHeap(), 0, data); - - CoUninitialize(); - - return hr; -} - -static DWORD start_host_object2(IStream *stream, REFIID riid, IUnknown *object, MSHLFLAGS marshal_flags, IMessageFilter *filter, HANDLE *thread) -{ - DWORD tid = 0; - HANDLE marshal_event = CreateEvent(NULL, FALSE, FALSE, NULL); - struct host_object_data *data = HeapAlloc(GetProcessHeap(), 0, sizeof(*data)); - - data->stream = stream; - data->iid = *riid; - data->object = object; - data->marshal_flags = marshal_flags; - data->marshal_event = marshal_event; - data->filter = filter; - - *thread = CreateThread(NULL, 0, host_object_proc, data, 0, &tid); - - /* wait for marshaling to complete before returning */ - WaitForSingleObject(marshal_event, INFINITE); - CloseHandle(marshal_event); - - return tid; -} - -static DWORD start_host_object(IStream *stream, REFIID riid, IUnknown *object, MSHLFLAGS marshal_flags, HANDLE *thread) -{ - return start_host_object2(stream, riid, object, marshal_flags, NULL, thread); -} - -#if 0 /* not used */ -/* asks thread to release the marshal data because it has to be done by the - * same thread that marshaled the interface in the first place. */ -static void release_host_object(DWORD tid) -{ - HANDLE event = CreateEvent(NULL, FALSE, FALSE, NULL); - PostThreadMessage(tid, RELEASEMARSHALDATA, 0, (LPARAM)event); - WaitForSingleObject(event, INFINITE); - CloseHandle(event); -} -#endif - -static void end_host_object(DWORD tid, HANDLE thread) -{ - BOOL ret = PostThreadMessage(tid, WM_QUIT, 0, 0); - ok(ret, "PostThreadMessage failed with error %d\n", GetLastError()); - /* be careful of races - don't return until hosting thread has terminated */ - WaitForSingleObject(thread, INFINITE); - CloseHandle(thread); -} - -typedef struct Widget -{ - const IWidgetVtbl *lpVtbl; - LONG refs; - IUnknown *pDispatchUnknown; -} Widget; - -HRESULT WINAPI Widget_QueryInterface( - IWidget *iface, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject) -{ - if (IsEqualIID(riid, &IID_IWidget) || IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDispatch)) - { - IWidget_AddRef(iface); - *ppvObject = iface; - return S_OK; - } - else - { - *ppvObject = NULL; - return E_NOINTERFACE; - } -} - -ULONG WINAPI Widget_AddRef( - IWidget *iface) -{ - Widget *This = (Widget *)iface; - - return InterlockedIncrement(&This->refs); -} - -ULONG WINAPI Widget_Release( - IWidget *iface) -{ - Widget *This = (Widget *)iface; - ULONG refs = InterlockedDecrement(&This->refs); - if (!refs) - { - IUnknown_Release(This->pDispatchUnknown); - memset(This, 0xcc, sizeof(*This)); - HeapFree(GetProcessHeap(), 0, This); - trace("Widget destroyed!\n"); - } - - return refs; -} - -HRESULT WINAPI Widget_GetTypeInfoCount( - IWidget *iface, - /* [out] */ UINT __RPC_FAR *pctinfo) -{ - Widget *This = (Widget *)iface; - IDispatch *pDispatch; - HRESULT hr = IUnknown_QueryInterface(This->pDispatchUnknown, &IID_IDispatch, (void **)&pDispatch); - if (SUCCEEDED(hr)) - { - hr = IDispatch_GetTypeInfoCount(pDispatch, pctinfo); - IDispatch_Release(pDispatch); - } - return hr; -} - -HRESULT WINAPI Widget_GetTypeInfo( - IWidget __RPC_FAR * iface, - /* [in] */ UINT iTInfo, - /* [in] */ LCID lcid, - /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo) -{ - Widget *This = (Widget *)iface; - IDispatch *pDispatch; - HRESULT hr = IUnknown_QueryInterface(This->pDispatchUnknown, &IID_IDispatch, (void **)&pDispatch); - if (SUCCEEDED(hr)) - { - hr = IDispatch_GetTypeInfo(pDispatch, iTInfo, lcid, ppTInfo); - IDispatch_Release(pDispatch); - } - return hr; -} - -HRESULT WINAPI Widget_GetIDsOfNames( - IWidget __RPC_FAR * iface, - /* [in] */ REFIID riid, - /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, - /* [in] */ UINT cNames, - /* [in] */ LCID lcid, - /* [size_is][out] */ DISPID __RPC_FAR *rgDispId) -{ - Widget *This = (Widget *)iface; - IDispatch *pDispatch; - HRESULT hr = IUnknown_QueryInterface(This->pDispatchUnknown, &IID_IDispatch, (void **)&pDispatch); - if (SUCCEEDED(hr)) - { - hr = IDispatch_GetIDsOfNames(pDispatch, riid, rgszNames, cNames, lcid, rgDispId); - IDispatch_Release(pDispatch); - } - return hr; -} - -HRESULT WINAPI Widget_Invoke( - IWidget __RPC_FAR * iface, - /* [in] */ DISPID dispIdMember, - /* [in] */ REFIID riid, - /* [in] */ LCID lcid, - /* [in] */ WORD wFlags, - /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, - /* [out] */ VARIANT __RPC_FAR *pVarResult, - /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, - /* [out] */ UINT __RPC_FAR *puArgErr) -{ - Widget *This = (Widget *)iface; - IDispatch *pDispatch; - HRESULT hr = IUnknown_QueryInterface(This->pDispatchUnknown, &IID_IDispatch, (void **)&pDispatch); - if (SUCCEEDED(hr)) - { - hr = IDispatch_Invoke(pDispatch, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); - IDispatch_Release(pDispatch); - } - return hr; -} - -HRESULT WINAPI Widget_put_Name( - IWidget __RPC_FAR * iface, - /* [in] */ BSTR name) -{ - trace("put_Name(%s)\n", wine_dbgstr_w(name)); - return S_OK; -} - -HRESULT WINAPI Widget_get_Name( - IWidget __RPC_FAR * iface, - /* [out] */ BSTR __RPC_FAR *name) -{ - static const WCHAR szCat[] = { 'C','a','t',0 }; - trace("get_Name()\n"); - *name = SysAllocString(szCat); - return S_OK; -} - -HRESULT WINAPI Widget_DoSomething( - IWidget __RPC_FAR * iface, - /* [in] */ double number, - /* [out] */ BSTR *str1, - /* [defaultvalue][in] */ BSTR str2, - /* [optional][in] */ VARIANT __RPC_FAR *opt) -{ - static const WCHAR szString[] = { 'S','t','r','i','n','g',0 }; - trace("DoSomething()\n"); - - ok(number == 3.141, "number(%f) != 3.141\n", number); - ok(*str2 == '\0', "str2(%s) != \"\"\n", wine_dbgstr_w(str2)); - ok(V_VT(opt) == VT_ERROR, "V_VT(opt) should be VT_ERROR instead of 0x%x\n", V_VT(opt)); - ok(V_ERROR(opt) == DISP_E_PARAMNOTFOUND, "V_ERROR(opt) should be DISP_E_PARAMNOTFOUND instead of 0x%08x\n", V_ERROR(opt)); - *str1 = SysAllocString(szString); - - return S_FALSE; -} - -HRESULT WINAPI Widget_get_State( - IWidget __RPC_FAR * iface, - /* [retval][out] */ STATE __RPC_FAR *state) -{ - trace("get_State() = STATE_WIDGETIFIED\n"); - *state = STATE_WIDGETIFIED; - return S_OK; -} - -HRESULT WINAPI Widget_put_State( - IWidget __RPC_FAR * iface, - /* [in] */ STATE state) -{ - trace("put_State(%d)\n", state); - return S_OK; -} - -HRESULT WINAPI Widget_Map( - IWidget * iface, - BSTR bstrId, - BSTR *sValue) -{ - trace("Map(%s, %p)\n", wine_dbgstr_w(bstrId), sValue); - *sValue = SysAllocString(bstrId); - return S_OK; -} - -HRESULT WINAPI Widget_SetOleColor( - IWidget * iface, - OLE_COLOR val) -{ - trace("SetOleColor(0x%x)\n", val); - return S_OK; -} - -HRESULT WINAPI Widget_GetOleColor( - IWidget * iface, - OLE_COLOR *pVal) -{ - trace("GetOleColor() = 0x8000000f\n"); - *pVal = 0x8000000f; - return S_FALSE; -} - -HRESULT WINAPI Widget_Clone( - IWidget *iface, - IWidget **ppVal) -{ - trace("Clone()\n"); - return Widget_QueryInterface(iface, &IID_IWidget, (void **)ppVal); -} - -HRESULT WINAPI Widget_CloneDispatch( - IWidget *iface, - IDispatch **ppVal) -{ - trace("CloneDispatch()\n"); - return Widget_QueryInterface(iface, &IID_IWidget, (void **)ppVal); -} - -HRESULT WINAPI Widget_CloneCoclass( - IWidget *iface, - ApplicationObject2 **ppVal) -{ - trace("CloneCoclass()\n"); - return S_OK; -} - -HRESULT WINAPI Widget_Value( - IWidget __RPC_FAR * iface, - VARIANT *value, - VARIANT *retval) -{ - trace("Value(%p, %p)\n", value, retval); - ok(V_VT(value) == VT_I2, "V_VT(value) was %d instead of VT_I2\n", V_VT(value)); - ok(V_I2(value) == 1, "V_I2(value) was %d instead of 1\n", V_I2(value)); - V_VT(retval) = VT_I2; - V_I2(retval) = 1234; - return S_OK; -} - -HRESULT WINAPI Widget_Array( - IWidget * iface, - SAFEARRAY * values) -{ - trace("Array(%p)\n", values); - return S_OK; -} - -HRESULT WINAPI Widget_VariantArrayPtr( - IWidget * iface, - SAFEARRAY ** values) -{ - trace("VariantArrayPtr(%p)\n", values); - return S_OK; -} - -void WINAPI Widget_Variant( - IWidget __RPC_FAR * iface, - VARIANT var) -{ - trace("Variant()\n"); - ok(V_VT(&var) == VT_CY, "V_VT(&var) was %d\n", V_VT(&var)); - ok(S(V_CY(&var)).Hi == 0xdababe, "V_CY(&var).Hi was 0x%x\n", S(V_CY(&var)).Hi); - ok(S(V_CY(&var)).Lo == 0xdeadbeef, "V_CY(&var).Lo was 0x%x\n", S(V_CY(&var)).Lo); -} - -void WINAPI Widget_VarArg( - IWidget * iface, - int numexpect, - SAFEARRAY * values) -{ - LONG lbound, ubound, i; - VARIANT * data; - HRESULT hr; - - trace("VarArg(%p)\n", values); - - hr = SafeArrayGetLBound(values, 1, &lbound); - ok(hr == S_OK, "SafeArrayGetLBound failed with %x\n", hr); - ok(lbound == 0, "SafeArrayGetLBound returned %d\n", lbound); - - hr = SafeArrayGetUBound(values, 1, &ubound); - ok(hr == S_OK, "SafeArrayGetUBound failed with %x\n", hr); - ok(ubound == numexpect-1, "SafeArrayGetUBound returned %d, but expected %d\n", ubound, numexpect-1); - - hr = SafeArrayAccessData(values, (LPVOID)&data); - ok(hr == S_OK, "SafeArrayAccessData failed with %x\n", hr); - - for (i=0; i<=ubound-lbound; i++) - { - ok(V_VT(&data[i]) == VT_I4, "V_VT(&data[%d]) was %d\n", i, V_VT(&data[i])); - ok(V_I4(&data[i]) == i, "V_I4(&data[%d]) was %d\n", i, V_I4(&data[i])); - } - - hr = SafeArrayUnaccessData(values); - ok(hr == S_OK, "SafeArrayUnaccessData failed with %x\n", hr); -} - -HRESULT WINAPI Widget_Error( - IWidget __RPC_FAR * iface) -{ - trace("Error()\n"); - return E_NOTIMPL; -} - -HRESULT WINAPI Widget_CloneInterface( - IWidget __RPC_FAR * iface, - ISomethingFromDispatch **ppVal) -{ - trace("CloneInterface()\n"); - *ppVal = 0; - return S_OK; -} - -static const struct IWidgetVtbl Widget_VTable = -{ - Widget_QueryInterface, - Widget_AddRef, - Widget_Release, - Widget_GetTypeInfoCount, - Widget_GetTypeInfo, - Widget_GetIDsOfNames, - Widget_Invoke, - Widget_put_Name, - Widget_get_Name, - Widget_DoSomething, - Widget_get_State, - Widget_put_State, - Widget_Map, - Widget_SetOleColor, - Widget_GetOleColor, - Widget_Clone, - Widget_CloneDispatch, - Widget_CloneCoclass, - Widget_Value, - Widget_Array, - Widget_VariantArrayPtr, - Widget_Variant, - Widget_VarArg, - Widget_Error, - Widget_CloneInterface -}; - - -typedef struct KindaEnum -{ - const IKindaEnumWidgetVtbl *lpVtbl; - LONG refs; -} KindaEnum; - -static HRESULT register_current_module_typelib(void) -{ - WCHAR path[MAX_PATH]; - HRESULT hr; - ITypeLib *typelib; - - GetModuleFileNameW(NULL, path, MAX_PATH); - - hr = LoadTypeLib(path, &typelib); - if (SUCCEEDED(hr)) - { - hr = RegisterTypeLib(typelib, path, NULL); - ITypeLib_Release(typelib); - } - return hr; -} - -static IWidget *Widget_Create(void) -{ - Widget *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); - HRESULT hr; - ITypeLib *pTypeLib; - - This->lpVtbl = &Widget_VTable; - This->refs = 1; - - hr = LoadRegTypeLib(&LIBID_TestTypelib, 1, 0, LOCALE_NEUTRAL, &pTypeLib); - ok_ole_success(hr, LoadRegTypeLib); - if (SUCCEEDED(hr)) - { - ITypeInfo *pTypeInfo; - hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_IWidget, &pTypeInfo); - ok_ole_success(hr, ITypeLib_GetTypeInfoOfGuid); - if (SUCCEEDED(hr)) - { - This->pDispatchUnknown = NULL; - hr = CreateStdDispatch((IUnknown *)&This->lpVtbl, This, pTypeInfo, &This->pDispatchUnknown); - ok_ole_success(hr, CreateStdDispatch); - ITypeInfo_Release(pTypeInfo); - } - } - - if (SUCCEEDED(hr)) - return (IWidget *)&This->lpVtbl; - else - { - HeapFree(GetProcessHeap(), 0, This); - return NULL; - } -} - -HRESULT WINAPI KindaEnum_QueryInterface( - IKindaEnumWidget *iface, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject) -{ - if (IsEqualIID(riid, &IID_IKindaEnumWidget) || IsEqualIID(riid, &IID_IUnknown)) - { - IKindaEnumWidget_AddRef(iface); - *ppvObject = iface; - return S_OK; - } - else - { - *ppvObject = NULL; - return E_NOINTERFACE; - } -} - -ULONG WINAPI KindaEnum_AddRef( - IKindaEnumWidget *iface) -{ - KindaEnum *This = (KindaEnum *)iface; - - return InterlockedIncrement(&This->refs); -} - -ULONG WINAPI KindaEnum_Release( - IKindaEnumWidget *iface) -{ - KindaEnum *This = (KindaEnum *)iface; - ULONG refs = InterlockedDecrement(&This->refs); - if (!refs) - { - memset(This, 0xcc, sizeof(*This)); - HeapFree(GetProcessHeap(), 0, This); - trace("KindaEnumWidget destroyed!\n"); - } - - return refs; -} - -HRESULT WINAPI KindaEnum_Next( - IKindaEnumWidget *iface, - /* [out] */ IWidget __RPC_FAR *__RPC_FAR *widget) -{ - *widget = Widget_Create(); - if (*widget) - return S_OK; - else - return E_OUTOFMEMORY; -} - -HRESULT WINAPI KindaEnum_Count( - IKindaEnumWidget *iface, - /* [out] */ unsigned long __RPC_FAR *count) -{ - return E_NOTIMPL; -} - -HRESULT WINAPI KindaEnum_Reset( - IKindaEnumWidget *iface) -{ - return E_NOTIMPL; -} - -HRESULT WINAPI KindaEnum_Clone( - IKindaEnumWidget *iface, - /* [out] */ IKindaEnumWidget __RPC_FAR *__RPC_FAR *ppenum) -{ - return E_NOTIMPL; -} - -static const IKindaEnumWidgetVtbl KindaEnumWidget_VTable = -{ - KindaEnum_QueryInterface, - KindaEnum_AddRef, - KindaEnum_Release, - KindaEnum_Next, - KindaEnum_Count, - KindaEnum_Reset, - KindaEnum_Clone -}; - -static IKindaEnumWidget *KindaEnumWidget_Create(void) -{ - KindaEnum *This; - - This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); - if (!This) return NULL; - This->lpVtbl = &KindaEnumWidget_VTable; - This->refs = 1; - return (IKindaEnumWidget *)This; -} - -static HRESULT WINAPI NonOleAutomation_QueryInterface(INonOleAutomation *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_INonOleAutomation)) - { - *(INonOleAutomation **)ppv = iface; - return S_OK; - } - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI NonOleAutomation_AddRef(INonOleAutomation *iface) -{ - return 2; -} - -static ULONG WINAPI NonOleAutomation_Release(INonOleAutomation *iface) -{ - return 1; -} - -static BSTR WINAPI NonOleAutomation_BstrRet(INonOleAutomation *iface) -{ - static const WCHAR wszTestString[] = {'T','h','i','s',' ','i','s',' ','a',' ','t','e','s','t',' ','s','t','r','i','n','g',0}; - return SysAllocString(wszTestString); -} - -static INonOleAutomationVtbl NonOleAutomation_VTable = -{ - NonOleAutomation_QueryInterface, - NonOleAutomation_AddRef, - NonOleAutomation_Release, - NonOleAutomation_BstrRet, -}; - -static INonOleAutomation NonOleAutomation = { &NonOleAutomation_VTable }; - -static ITypeInfo *NonOleAutomation_GetTypeInfo(void) -{ - ITypeLib *pTypeLib; - HRESULT hr = LoadRegTypeLib(&LIBID_TestTypelib, 1, 0, LOCALE_NEUTRAL, &pTypeLib); - ok_ole_success(hr, LoadRegTypeLib); - if (SUCCEEDED(hr)) - { - ITypeInfo *pTypeInfo; - hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_INonOleAutomation, &pTypeInfo); - ok_ole_success(hr, ITypeLib_GetTypeInfoOfGuid); - return pTypeInfo; - } - return NULL; -} - -static void test_typelibmarshal(void) -{ - static const WCHAR szCat[] = { 'C','a','t',0 }; - static const WCHAR szTestTest[] = { 'T','e','s','t','T','e','s','t',0 }; - static WCHAR szSuperman[] = { 'S','u','p','e','r','m','a','n',0 }; - HRESULT hr; - IKindaEnumWidget *pKEW = KindaEnumWidget_Create(); - IWidget *pWidget; - IStream *pStream; - IDispatch *pDispatch; - static const LARGE_INTEGER ullZero; - EXCEPINFO excepinfo; - VARIANT varresult; - DISPID dispidNamed = DISPID_PROPERTYPUT; - DISPPARAMS dispparams; - VARIANTARG vararg[4]; - STATE the_state; - HANDLE thread; - DWORD tid; - BSTR bstr; - ITypeInfo *pTypeInfo; - - ok(pKEW != NULL, "Widget creation failed\n"); - - hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream); - ok_ole_success(hr, CreateStreamOnHGlobal); - tid = start_host_object(pStream, &IID_IKindaEnumWidget, (IUnknown *)pKEW, MSHLFLAGS_NORMAL, &thread); - - IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); - hr = CoUnmarshalInterface(pStream, &IID_IKindaEnumWidget, (void **)&pKEW); - ok_ole_success(hr, CoUnmarshalInterface); - IStream_Release(pStream); - - hr = IKindaEnumWidget_Next(pKEW, &pWidget); - ok_ole_success(hr, IKindaEnumWidget_Next); - - IKindaEnumWidget_Release(pKEW); - - hr = IWidget_QueryInterface(pWidget, &IID_IDispatch, (void **)&pDispatch); - - /* call put_Name */ - VariantInit(&vararg[0]); - dispparams.cNamedArgs = 1; - dispparams.rgdispidNamedArgs = &dispidNamed; - dispparams.cArgs = 1; - dispparams.rgvarg = vararg; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_NAME, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, - "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", - excepinfo.wCode, excepinfo.scode); - VariantClear(&varresult); - - /* call put_Name (direct) */ - bstr = SysAllocString(szSuperman); - hr = IWidget_put_Name(pWidget, bstr); - ok_ole_success(hr, IWidget_put_Name); - SysFreeString(bstr); - - /* call get_Name */ - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 0; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_NAME, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, - "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", - excepinfo.wCode, excepinfo.scode); - trace("Name = %s\n", wine_dbgstr_w(V_BSTR(&varresult))); - VariantClear(&varresult); - - /* call get_Name (direct) */ - bstr = NULL; - hr = IWidget_get_Name(pWidget, &bstr); - ok_ole_success(hr, IWidget_get_Name); - ok(!lstrcmpW(bstr, szCat), "IWidget_get_Name should have returned string \"Cat\" instead of %s\n", wine_dbgstr_w(bstr)); - SysFreeString(bstr); - - /* call DoSomething */ - VariantInit(&vararg[0]); - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_R8; - V_R8(&vararg[1]) = 3.141; - dispparams.cNamedArgs = 0; - dispparams.cArgs = 2; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = vararg; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_DOSOMETHING, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - ok(V_VT(&varresult) == VT_EMPTY, "varresult should be VT_EMPTY\n"); - VariantClear(&varresult); - - /* call get_State */ - dispparams.cNamedArgs = 0; - dispparams.cArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - hr = IDispatch_Invoke(pDispatch, DISPID_TM_STATE, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - ok((V_VT(&varresult) == VT_I4) && (V_I4(&varresult) == STATE_WIDGETIFIED), "Return val mismatch\n"); - - /* call get_State (direct) */ - hr = IWidget_get_State(pWidget, &the_state); - ok_ole_success(hr, IWidget_get_state); - ok(the_state == STATE_WIDGETIFIED, "should have returned WIDGET_WIDGETIFIED instead of %d\n", the_state); - - /* call put_State */ - the_state = STATE_WIDGETIFIED; - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BYREF|VT_I4; - V_I4REF(&vararg[0]) = (int *)&the_state; - dispparams.cNamedArgs = 1; - dispparams.cArgs = 1; - dispparams.rgdispidNamedArgs = &dispidNamed; - dispparams.rgvarg = vararg; - hr = IDispatch_Invoke(pDispatch, DISPID_TM_STATE, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - - /* call Map */ - bstr = SysAllocString(szTestTest); - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BYREF|VT_BSTR; - V_BSTRREF(&vararg[0]) = &bstr; - dispparams.cNamedArgs = 0; - dispparams.cArgs = 1; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = vararg; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_MAP, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - ok(V_VT(&varresult) == VT_BSTR, "Return value should be of type BSTR instead of %d\n", V_VT(&varresult)); - ok(!lstrcmpW(V_BSTR(&varresult), szTestTest), "Return value should have been \"TestTest\" instead of %s\n", wine_dbgstr_w(V_BSTR(&varresult))); - VariantClear(&varresult); - - /* call SetOleColor with large negative VT_I4 param */ - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = 0x80000005; - dispparams.cNamedArgs = 0; - dispparams.cArgs = 1; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = vararg; - hr = IDispatch_Invoke(pDispatch, DISPID_TM_SETOLECOLOR, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - - /* call GetOleColor */ - dispparams.cNamedArgs = 0; - dispparams.cArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_GETOLECOLOR, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - VariantClear(&varresult); - - /* call Clone */ - dispparams.cNamedArgs = 0; - dispparams.cArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_CLONE, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - ok(V_VT(&varresult) == VT_DISPATCH, "vt %x\n", V_VT(&varresult)); - VariantClear(&varresult); - - /* call CloneInterface */ - dispparams.cNamedArgs = 0; - dispparams.cArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_CLONEINTERFACE, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - ok(V_VT(&varresult) == VT_DISPATCH, "vt %x\n", V_VT(&varresult)); - VariantClear(&varresult); - - /* call CloneDispatch with automatic value getting */ - V_VT(&vararg[0]) = VT_I2; - V_I2(&vararg[0]) = 1; - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 1; - dispparams.rgvarg = vararg; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_CLONEDISPATCH, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - - ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, - "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", - excepinfo.wCode, excepinfo.scode); - - ok(V_VT(&varresult) == VT_I2, "V_VT(&varresult) was %d instead of VT_I2\n", V_VT(&varresult)); - ok(V_I2(&varresult) == 1234, "V_I2(&varresult) was %d instead of 1234\n", V_I2(&varresult)); - VariantClear(&varresult); - - /* call CloneCoclass */ - dispparams.cNamedArgs = 0; - dispparams.cArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_CLONECOCLASS, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - - ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, - "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", - excepinfo.wCode, excepinfo.scode); - - ok(V_VT(&varresult) == VT_DISPATCH, "V_VT(&varresult) was %d instead of VT_DISPATCH\n", V_VT(&varresult)); - ok(!V_DISPATCH(&varresult), "V_DISPATCH(&varresult) should be NULL instead of %p\n", V_DISPATCH(&varresult)); - VariantClear(&varresult); - - /* call Value with a VT_VARIANT|VT_BYREF type */ - V_VT(&vararg[0]) = VT_VARIANT|VT_BYREF; - V_VARIANTREF(&vararg[0]) = &vararg[1]; - V_VT(&vararg[1]) = VT_I2; - V_I2(&vararg[1]) = 1; - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 1; - dispparams.rgvarg = vararg; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_VALUE, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, IDispatch_Invoke); - - ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, - "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", - excepinfo.wCode, excepinfo.scode); - - ok(V_VT(&varresult) == VT_I2, "V_VT(&varresult) was %d instead of VT_I2\n", V_VT(&varresult)); - ok(V_I2(&varresult) == 1234, "V_I2(&varresult) was %d instead of 1234\n", V_I2(&varresult)); - VariantClear(&varresult); - - /* call Variant - exercises variant copying in ITypeInfo::Invoke and - * handling of void return types */ - /* use a big type to ensure that the variant was properly copied into the - * destination function's args */ - V_VT(&vararg[0]) = VT_CY; - S(V_CY(&vararg[0])).Hi = 0xdababe; - S(V_CY(&vararg[0])).Lo = 0xdeadbeef; - dispparams.cNamedArgs = 0; - dispparams.cArgs = 1; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = vararg; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARIANT, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); - ok_ole_success(hr, IDispatch_Invoke); - VariantClear(&varresult); - - /* call VarArg */ - VariantInit(&vararg[3]); - V_VT(&vararg[3]) = VT_I4; - V_I4(&vararg[3]) = 3; - VariantInit(&vararg[2]); - V_VT(&vararg[2]) = VT_I4; - V_I4(&vararg[2]) = 0; - VariantInit(&vararg[1]); - V_VT(&vararg[1]) = VT_I4; - V_I4(&vararg[1]) = 1; - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_I4; - V_I4(&vararg[0]) = 2; - dispparams.cNamedArgs = 0; - dispparams.cArgs = 4; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = vararg; - hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARG, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); - ok_ole_success(hr, ITypeInfo_Invoke); - - /* call VarArg, even one (non-optional, non-safearray) named argument is not allowed */ - dispidNamed = 0; - dispparams.cNamedArgs = 1; - dispparams.rgdispidNamedArgs = &dispidNamed; - hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARG, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); - ok(hr == DISP_E_NONAMEDARGS, "IDispatch_Invoke should have returned DISP_E_NONAMEDARGS instead of 0x%08x\n", hr); - dispidNamed = DISPID_PROPERTYPUT; - - /* call Error */ - dispparams.cNamedArgs = 0; - dispparams.cArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_ERROR, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, &excepinfo, NULL); - ok(hr == DISP_E_EXCEPTION, "IDispatch_Invoke should have returned DISP_E_EXCEPTION instead of 0x%08x\n", hr); - ok(excepinfo.wCode == 0x0 && excepinfo.scode == E_NOTIMPL, - "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", - excepinfo.wCode, excepinfo.scode); - VariantClear(&varresult); - - /* call BstrRet */ - pTypeInfo = NonOleAutomation_GetTypeInfo(); - dispparams.cNamedArgs = 0; - dispparams.cArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hr = ITypeInfo_Invoke(pTypeInfo, &NonOleAutomation, DISPID_NOA_BSTRRET, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - ok_ole_success(hr, ITypeInfo_Invoke); - ok(V_VT(&varresult) == VT_BSTR, "V_VT(&varresult) should be VT_BSTR instead of %d\n", V_VT(&varresult)); - ok(V_BSTR(&varresult) != NULL, "V_BSTR(&varresult) should not be NULL\n"); - - VariantClear(&varresult); - ITypeInfo_Release(pTypeInfo); - - /* tests call put_Name without named arg */ - VariantInit(&vararg[0]); - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 1; - dispparams.rgvarg = vararg; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_NAME, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_PARAMNOTFOUND, "IDispatch_Invoke should have returned DISP_E_PARAMNOTFOUND instead of 0x%08x\n", hr); - VariantClear(&varresult); - - /* tests param type that cannot be coerced */ - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_UNKNOWN; - V_UNKNOWN(&vararg[0]) = NULL; - dispparams.cNamedArgs = 1; - dispparams.rgdispidNamedArgs = &dispidNamed; - dispparams.cArgs = 1; - dispparams.rgvarg = vararg; - VariantInit(&varresult); -#if 0 /* NULL unknown not currently marshaled correctly */ - hr = IDispatch_Invoke(pDispatch, DISPID_TM_NAME, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_TYPEMISMATCH, "IDispatch_Invoke should have returned DISP_E_TYPEMISMATCH instead of 0x%08x\n", hr); -#endif - VariantClear(&varresult); - - /* tests bad param type */ - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_CLSID; - V_BYREF(&vararg[0]) = NULL; - dispparams.cNamedArgs = 1; - dispparams.rgdispidNamedArgs = &dispidNamed; - dispparams.cArgs = 1; - dispparams.rgvarg = vararg; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_NAME, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_BADVARTYPE, "IDispatch_Invoke should have returned DISP_E_BADVARTYPE instead of 0x%08x\n", hr); - VariantClear(&varresult); - - /* tests too small param count */ - dispparams.cNamedArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.cArgs = 0; - dispparams.rgvarg = NULL; - VariantInit(&varresult); - hr = IDispatch_Invoke(pDispatch, DISPID_TM_DOSOMETHING, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_BADPARAMCOUNT, "IDispatch_Invoke should have returned DISP_E_BADPARAMCOUNT instead of 0x%08x\n", hr); - VariantClear(&varresult); - - /* tests propget function with large param count */ - VariantInit(&vararg[0]); - V_VT(&vararg[0]) = VT_BSTR; - V_BSTR(&vararg[0]) = NULL; - V_VT(&vararg[1]) = VT_I4; - V_I4(&vararg[1]) = 1; - dispparams.cNamedArgs = 0; - dispparams.cArgs = 2; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = vararg; - hr = IDispatch_Invoke(pDispatch, DISPID_TM_STATE, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); - ok(hr == DISP_E_NOTACOLLECTION, "IDispatch_Invoke should have returned DISP_E_NOTACOLLECTION instead of 0x%08x\n", hr); - - IDispatch_Release(pDispatch); - IWidget_Release(pWidget); - - trace("calling end_host_object\n"); - end_host_object(tid, thread); -} - -static void test_DispCallFunc(void) -{ - static const WCHAR szEmpty[] = { 0 }; - VARTYPE rgvt[] = { VT_R8, VT_BSTR, VT_BSTR, VT_VARIANT|VT_BYREF }; - VARIANTARG vararg[4]; - VARIANTARG varref; - VARIANTARG *rgpvarg[4] = { &vararg[0], &vararg[1], &vararg[2], &vararg[3] }; - VARIANTARG varresult; - HRESULT hr; - IWidget *pWidget = Widget_Create(); - V_VT(&vararg[0]) = VT_R8; - V_R8(&vararg[0]) = 3.141; - V_VT(&vararg[1]) = VT_BSTR; - V_BSTR(&vararg[1]) = SysAllocString(szEmpty); - V_VT(&vararg[2]) = VT_BSTR; - V_BSTR(&vararg[2]) = SysAllocString(szEmpty); - V_VT(&vararg[3]) = VT_VARIANT|VT_BYREF; - V_VARIANTREF(&vararg[3]) = &varref; - V_VT(&varref) = VT_ERROR; - V_ERROR(&varref) = DISP_E_PARAMNOTFOUND; - VariantInit(&varresult); - hr = DispCallFunc(pWidget, 36, CC_STDCALL, VT_UI4, 4, rgvt, rgpvarg, &varresult); - ok_ole_success(hr, DispCallFunc); - VariantClear(&varresult); -} - -START_TEST(tmarshal) -{ - HRESULT hr; - - CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - hr = register_current_module_typelib(); - ok_ole_success(hr, register_current_module_typelib); - - test_typelibmarshal(); - test_DispCallFunc(); - - CoUninitialize(); -} diff --git a/rostests/winetests/oleaut32/tmarshal.idl b/rostests/winetests/oleaut32/tmarshal.idl deleted file mode 100644 index 9b94843b46e..00000000000 --- a/rostests/winetests/oleaut32/tmarshal.idl +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (C) 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 "tmarshal_dispids.h" -import "ocidl.idl"; - -[ - uuid(d96d8a3e-78b6-4c8d-8f27-059db959be8a), - version(1.0), - helpstring("Test Typelib") -] -library TestTypelib -{ - importlib("stdole2.tlb"); - - typedef enum tagSTATE - { - STATE_UNWIDGETIFIED = 1, - STATE_WIDGETIFIED - } STATE; - - coclass ApplicationObject2; - - [ - odl, - uuid(12345678-1234-4321-1234-121212121212) - ] - interface ISomethingFromDispatch : IDispatch - { - HRESULT anotherfn(void); - } - - [ - odl, - uuid(a1f8cae3-c947-4c5f-b57d-c87b9b5f3586), - oleautomation, - dual - ] - interface IWidget : IDispatch - { - [propput, id(DISPID_TM_NAME)] - HRESULT Name([in] BSTR name); - [propget, id(DISPID_TM_NAME)] - HRESULT Name([out, retval] BSTR *name); - - [id(DISPID_TM_DOSOMETHING)] - HRESULT DoSomething([in] double number, [out] BSTR *str1, [in, defaultvalue("")] BSTR str2, [in, optional] VARIANT *opt); - - [propget, id(DISPID_TM_STATE)] - HRESULT State([out, retval] STATE *state); - [propput, id(DISPID_TM_STATE)] - HRESULT State([in] STATE state); - - [id(DISPID_TM_MAP)] - HRESULT Map([in] BSTR bstrId, [out, retval] BSTR *sValue); - - [id(DISPID_TM_SETOLECOLOR)] - HRESULT SetOleColor([in] OLE_COLOR val); - - [id(DISPID_TM_GETOLECOLOR)] - HRESULT GetOleColor([out, retval] OLE_COLOR *pVal); - - [propget, id(DISPID_TM_CLONE)] - HRESULT Clone([out, retval] IWidget **ppVal); - - [propget, id(DISPID_TM_CLONEDISPATCH)] - HRESULT CloneDispatch([out, retval] IDispatch **ppVal); - - [propget, id(DISPID_TM_CLONECOCLASS)] - HRESULT CloneCoclass([out, retval] ApplicationObject2 **ppVal); - - [propget, id(DISPID_VALUE)] - HRESULT Value([in] VARIANT *value, [out, retval] VARIANT *retval); - - [id(DISPID_TM_ARRAY)] - HRESULT Array([in] SAFEARRAY(BSTR) values); - - [id(DISPID_TM_VARARRAYPTR)] - HRESULT VariantArrayPtr([in] SAFEARRAY(VARIANT) *values); - - [id(DISPID_TM_VARIANT)] - void Variant([in] VARIANT var); - - [vararg, id(DISPID_TM_VARARG)] - void VarArg([in] int numexpect, [in] SAFEARRAY(VARIANT) values); - - [id(DISPID_TM_ERROR)] - HRESULT Error(); - - [propget, id(DISPID_TM_CLONEINTERFACE)] - HRESULT CloneInterface([out, retval] ISomethingFromDispatch **ppVal); - - } - - [ - odl, - uuid(a028db05-30f0-4b93-b17a-41c72f831d84), -#if 0 /* FIXME: commented out as causes widl to generate incorrect typelib */ - dual, -#endif - oleautomation - ] - interface IKindaEnumWidget : IUnknown - { - HRESULT Next( - [out] IWidget **widget); - - HRESULT Count( - [out] unsigned long *count); - - HRESULT Reset(); - - HRESULT Clone( - [out] IKindaEnumWidget **ppenum); - } - - [ - odl, - uuid(a028db06-30f0-4b93-b17a-41c72f831d84), - ] - interface INonOleAutomation : IUnknown - { - [id(DISPID_NOA_BSTRRET)] - BSTR BstrRet(); - } - - - [ - dllname("comm.drv"), - uuid(d377f60b-8639-4261-8ee7-75c8340d2cc9), - ] - module BadModule - { - [ - entry("Foo"), - ] - HRESULT BadModuleFoo(); - }; - - [ - dllname("oleaut32.dll"), - uuid(d377f60c-8639-4261-8ee7-75c8340d2cc9), - ] - module BadEntry - { - [ - entry("Foo"), - ] - HRESULT BadEntryFoo(); - }; - - [ - uuid(bb171948-10ec-407a-9a57-2f85f797ff1a), - appobject, - ] - coclass ApplicationObject2 - { - interface IWidget; - [source] interface IWidget; - }; - - [ - odl, - uuid(375f8a9d-33d0-44f3-b972-61f8407899e0) - ] - interface ItestIF1 : IUnknown - { - HRESULT fn1([in] int x); - HRESULT fn2([out,retval] int *x); - } - - [ - odl, - uuid(094056a3-666f-4956-be12-1859668310b8) - ] - interface ItestIF2 : ItestIF1 - { - HRESULT fn3([in] int y); - } - - [ - odl, - uuid(33baba09-2e68-43ab-81fe-d84b403df2e5) - ] - dispinterface ItestIF3 - { - interface ItestIF2; - } - - [ - odl, - uuid(a01005c7-7491-42eb-94f3-668e37ce60a6) - ] - dispinterface ItestIF4 - { - properties: - methods: - [id(0x1c)] HRESULT fn([in] int z); - } - - [ - odl, - uuid(4ab61e25-c09f-4239-8f7f-7a018ea0199f), - dual - ] - interface ItestIF5 : ItestIF2 - { - [id(0x1234)] HRESULT fn4([in] int a); - [id(0x1235)] HRESULT fn5([in] int a); - } - - [ - odl, - uuid(ec236d8e-2cc7-44f2-b394-36c86ff3da74) - ] - interface ItestIF6 : IDispatch - { - [id(0x1234)] HRESULT fn4([in] int a); - [id(0x1235)] HRESULT fn5([in] int a); - } - - [ - odl, - uuid(f711b105-554d-4751-818c-46fcc5d7c0d5), - dual - ] - interface ItestIF7 : ItestIF6 - { - [id(0x1236)] HRESULT fn6([in] int a); - } - - [ - odl, - uuid(bdfa260b-ef40-43d3-b071-cddec919f132) - ] - interface ItestIF8 - { - HRESULT fn1([in] int x); - HRESULT fn2([out,retval] int *x); - } - - [ - odl, - uuid(51033a23-dc37-4f19-aa34-4d8a670458a0) - - ] - interface ItestIF9 : ItestIF8 - { - HRESULT fn3([in] int y); - } - - [ - odl, - uuid(2e8f14fe-0bce-42f0-8b7d-3af8393c7967) - ] - dispinterface ItestIF10 - { - interface ItestIF9; - } - - [ - odl, - uuid(7d9e9371-482e-4944-9b19-511fc705236f) - ] - dispinterface ItestIF11 - { - interface ItestIF7; - } - -}; diff --git a/rostests/winetests/oleaut32/tmarshal.rc b/rostests/winetests/oleaut32/tmarshal.rc deleted file mode 100644 index aabf61181b9..00000000000 --- a/rostests/winetests/oleaut32/tmarshal.rc +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Resource file for tmarshaltest - * - * 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 "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "winnls.h" - -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL - -#include "wine/wine_common_ver.rc" - -1 TYPELIB LOADONCALL DISCARDABLE tmarshal.tlb diff --git a/rostests/winetests/oleaut32/tmarshal_dispids.h b/rostests/winetests/oleaut32/tmarshal_dispids.h deleted file mode 100644 index 4bf47cdf629..00000000000 --- a/rostests/winetests/oleaut32/tmarshal_dispids.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2005-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 - * - */ - -#define DISPID_TM_NAME 1 -#define DISPID_TM_DOSOMETHING 2 -#define DISPID_TM_STATE 3 -#define DISPID_TM_MAP 4 -#define DISPID_TM_SETOLECOLOR 5 -#define DISPID_TM_GETOLECOLOR 6 -#define DISPID_TM_CLONE 7 -#define DISPID_TM_CLONEDISPATCH 8 -#define DISPID_TM_CLONECOCLASS 9 -#define DISPID_TM_ARRAY 10 -#define DISPID_TM_VARARRAYPTR 11 -#define DISPID_TM_VARIANT 12 -#define DISPID_TM_VARARG 13 -#define DISPID_TM_ERROR 14 -#define DISPID_TM_CLONEINTERFACE 15 - -#define DISPID_NOA_BSTRRET 1 diff --git a/rostests/winetests/oleaut32/typelib.c b/rostests/winetests/oleaut32/typelib.c deleted file mode 100644 index e022b8263de..00000000000 --- a/rostests/winetests/oleaut32/typelib.c +++ /dev/null @@ -1,1285 +0,0 @@ -/* - * ITypeLib and ITypeInfo test - * - * Copyright 2004 Jacek Caban - * Copyright 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 - */ - -#define COBJMACROS - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "oleauto.h" -#include "ocidl.h" -#include "shlwapi.h" -#include "tmarshal.h" - -#define expect_eq(expr, value, type, format) { type _ret = (expr); ok((value) == _ret, #expr " expected " format " got " format "\n", value, _ret); } -#define expect_int(expr, value) expect_eq(expr, (int)value, int, "%d") -#define expect_hex(expr, value) expect_eq(expr, (int)value, int, "0x%x") -#define expect_null(expr) expect_eq(expr, NULL, const void *, "%p") - -#define expect_wstr_utf8val(expr, value) \ - { \ - CHAR buf[260]; \ - expect_eq(!WideCharToMultiByte(CP_UTF8, 0, (expr), -1, buf, 260, NULL, NULL), 0, int, "%d"); \ - ok(lstrcmp(value, buf) == 0, #expr " expected \"%s\" got \"%s\"\n", value, buf); \ - } - -#define ole_expect(expr, expect) { \ - HRESULT r = expr; \ - ok(r == (expect), #expr " returned %x, expected %s (%x)\n", r, #expect, expect); \ -} - -#define ole_check(expr) ole_expect(expr, S_OK); - -#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error 0x%08x\n", hr) - -static const WCHAR wszStdOle2[] = {'s','t','d','o','l','e','2','.','t','l','b',0}; - -static void ref_count_test(LPCWSTR type_lib) -{ - ITypeLib *iface; - ITypeInfo *iti1, *iti2; - HRESULT hRes; - int ref_count; - - trace("Loading type library\n"); - hRes = LoadTypeLib(type_lib, &iface); - ok(hRes == S_OK, "Could not load type library\n"); - if(hRes != S_OK) - return; - - hRes = ITypeLib_GetTypeInfo(iface, 1, &iti1); - ok(hRes == S_OK, "ITypeLib_GetTypeInfo failed on index = 1\n"); - ok(ref_count=ITypeLib_Release(iface) > 0, "ITypeLib destroyed while ITypeInfo has back pointer\n"); - if(!ref_count) - return; - - hRes = ITypeLib_GetTypeInfo(iface, 1, &iti2); - ok(hRes == S_OK, "ITypeLib_GetTypeInfo failed on index = 1\n"); - ok(iti1 == iti2, "ITypeLib_GetTypeInfo returned different pointers for same indexes\n"); - - ITypeLib_AddRef(iface); - ITypeInfo_Release(iti2); - ITypeInfo_Release(iti1); - ok(ITypeLib_Release(iface) == 0, "ITypeLib should be destroyed here.\n"); -} - -static void test_TypeComp(void) -{ - ITypeLib *pTypeLib; - ITypeComp *pTypeComp; - HRESULT hr; - ULONG ulHash; - DESCKIND desckind; - BINDPTR bindptr; - ITypeInfo *pTypeInfo; - ITypeInfo *pFontTypeInfo; - static WCHAR wszStdFunctions[] = {'S','t','d','F','u','n','c','t','i','o','n','s',0}; - static WCHAR wszSavePicture[] = {'S','a','v','e','P','i','c','t','u','r','e',0}; - static WCHAR wszOLE_TRISTATE[] = {'O','L','E','_','T','R','I','S','T','A','T','E',0}; - static WCHAR wszUnchecked[] = {'U','n','c','h','e','c','k','e','d',0}; - static WCHAR wszIUnknown[] = {'I','U','n','k','n','o','w','n',0}; - static WCHAR wszFont[] = {'F','o','n','t',0}; - static WCHAR wszGUID[] = {'G','U','I','D',0}; - static WCHAR wszStdPicture[] = {'S','t','d','P','i','c','t','u','r','e',0}; - static WCHAR wszOLE_COLOR[] = {'O','L','E','_','C','O','L','O','R',0}; - static WCHAR wszClone[] = {'C','l','o','n','e',0}; - static WCHAR wszclone[] = {'c','l','o','n','e',0}; - - hr = LoadTypeLib(wszStdOle2, &pTypeLib); - ok_ole_success(hr, LoadTypeLib); - - hr = ITypeLib_GetTypeComp(pTypeLib, &pTypeComp); - ok_ole_success(hr, ITypeLib_GetTypeComp); - - /* test getting a TKIND_MODULE */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszStdFunctions); - hr = ITypeComp_Bind(pTypeComp, wszStdFunctions, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_TYPECOMP, - "desckind should have been DESCKIND_TYPECOMP instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - - ITypeComp_Release(bindptr.lptcomp); - - /* test getting a TKIND_MODULE with INVOKE_PROPERTYGET */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszStdFunctions); - hr = ITypeComp_Bind(pTypeComp, wszStdFunctions, ulHash, INVOKE_PROPERTYGET, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_TYPECOMP, - "desckind should have been DESCKIND_TYPECOMP instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - ITypeComp_Release(bindptr.lptcomp); - - /* test getting a function within a TKIND_MODULE */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszSavePicture); - hr = ITypeComp_Bind(pTypeComp, wszSavePicture, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_FUNCDESC, - "desckind should have been DESCKIND_FUNCDESC instead of %d\n", - desckind); - ok(bindptr.lpfuncdesc != NULL, "bindptr.lpfuncdesc should not have been set to NULL\n"); - ITypeInfo_ReleaseFuncDesc(pTypeInfo, bindptr.lpfuncdesc); - ITypeInfo_Release(pTypeInfo); - - /* test getting a function within a TKIND_MODULE with INVOKE_PROPERTYGET */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszSavePicture); - hr = ITypeComp_Bind(pTypeComp, wszSavePicture, ulHash, INVOKE_PROPERTYGET, &pTypeInfo, &desckind, &bindptr); - todo_wine ok(hr == TYPE_E_TYPEMISMATCH, - "ITypeComp_Bind should have failed with TYPE_E_TYPEMISMATCH instead of 0x%08x\n", - hr); - - ok(desckind == DESCKIND_NONE, - "desckind should have been DESCKIND_NONE instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - ok(!bindptr.lptcomp, "bindptr should have been set to NULL\n"); - - /* test getting a TKIND_ENUM */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszOLE_TRISTATE); - hr = ITypeComp_Bind(pTypeComp, wszOLE_TRISTATE, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_TYPECOMP, - "desckind should have been DESCKIND_TYPECOMP instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - - ITypeComp_Release(bindptr.lptcomp); - - /* test getting a value within a TKIND_ENUM */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszUnchecked); - hr = ITypeComp_Bind(pTypeComp, wszUnchecked, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_VARDESC, - "desckind should have been DESCKIND_VARDESC instead of %d\n", - desckind); - ITypeInfo_ReleaseVarDesc(pTypeInfo, bindptr.lpvardesc); - ITypeInfo_Release(pTypeInfo); - - /* test getting a TKIND_INTERFACE */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszIUnknown); - hr = ITypeComp_Bind(pTypeComp, wszIUnknown, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_NONE, - "desckind should have been DESCKIND_NONE instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - ok(!bindptr.lptcomp, "bindptr should have been set to NULL\n"); - - /* test getting a TKIND_DISPATCH */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszFont); - hr = ITypeComp_Bind(pTypeComp, wszFont, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_NONE, - "desckind should have been DESCKIND_NONE instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - ok(!bindptr.lptcomp, "bindptr should have been set to NULL\n"); - - /* test getting a TKIND_RECORD/TKIND_ALIAS */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszGUID); - hr = ITypeComp_Bind(pTypeComp, wszGUID, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_NONE, - "desckind should have been DESCKIND_NONE instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - ok(!bindptr.lptcomp, "bindptr should have been set to NULL\n"); - - /* test getting a TKIND_ALIAS */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszOLE_COLOR); - hr = ITypeComp_Bind(pTypeComp, wszOLE_COLOR, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_NONE, - "desckind should have been DESCKIND_NONE instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - ok(!bindptr.lptcomp, "bindptr should have been set to NULL\n"); - - /* test getting a TKIND_COCLASS */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszStdPicture); - hr = ITypeComp_Bind(pTypeComp, wszStdPicture, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_NONE, - "desckind should have been DESCKIND_NONE instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - ok(!bindptr.lptcomp, "bindptr should have been set to NULL\n"); - - ITypeComp_Release(pTypeComp); - - /* tests for ITypeComp on an interface */ - hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_IFont, &pFontTypeInfo); - ok_ole_success(hr, ITypeLib_GetTypeInfoOfGuid); - - hr = ITypeInfo_GetTypeComp(pFontTypeInfo, &pTypeComp); - ok_ole_success(hr, ITypeLib_GetTypeComp); - - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszClone); - hr = ITypeComp_Bind(pTypeComp, wszClone, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_FUNCDESC, - "desckind should have been DESCKIND_FUNCDESC instead of %d\n", - desckind); - ok(bindptr.lpfuncdesc != NULL, "bindptr.lpfuncdesc should not have been set to NULL\n"); - ITypeInfo_ReleaseFuncDesc(pTypeInfo, bindptr.lpfuncdesc); - ITypeInfo_Release(pTypeInfo); - - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszClone); - hr = ITypeComp_Bind(pTypeComp, wszClone, ulHash, INVOKE_PROPERTYGET, &pTypeInfo, &desckind, &bindptr); - ok(hr == TYPE_E_TYPEMISMATCH, "ITypeComp_Bind should have failed with TYPE_E_TYPEMISMATCH instead of 0x%08x\n", hr); - - ok(desckind == DESCKIND_NONE, - "desckind should have been DESCKIND_NONE instead of %d\n", - desckind); - ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n"); - ok(!bindptr.lptcomp, "bindptr should have been set to NULL\n"); - - /* tests that the compare is case-insensitive */ - ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszclone); - hr = ITypeComp_Bind(pTypeComp, wszclone, ulHash, 0, &pTypeInfo, &desckind, &bindptr); - ok_ole_success(hr, ITypeComp_Bind); - - ok(desckind == DESCKIND_FUNCDESC, - "desckind should have been DESCKIND_FUNCDESC instead of %d\n", - desckind); - ok(bindptr.lpfuncdesc != NULL, "bindptr.lpfuncdesc should not have been set to NULL\n"); - ITypeInfo_ReleaseFuncDesc(pTypeInfo, bindptr.lpfuncdesc); - ITypeInfo_Release(pTypeInfo); - - ITypeComp_Release(pTypeComp); - ITypeInfo_Release(pFontTypeInfo); - ITypeLib_Release(pTypeLib); -} - -static void test_CreateDispTypeInfo(void) -{ - ITypeInfo *pTypeInfo, *pTI2; - HRESULT hr; - INTERFACEDATA ifdata; - METHODDATA methdata[4]; - PARAMDATA parms1[2]; - PARAMDATA parms3[1]; - TYPEATTR *pTypeAttr; - HREFTYPE href; - FUNCDESC *pFuncDesc; - MEMBERID memid; - - static WCHAR func1[] = {'f','u','n','c','1',0}; - static const WCHAR func2[] = {'f','u','n','c','2',0}; - static const WCHAR func3[] = {'f','u','n','c','3',0}; - static const WCHAR parm1[] = {'p','a','r','m','1',0}; - static const WCHAR parm2[] = {'p','a','r','m','2',0}; - OLECHAR *name = func1; - - ifdata.pmethdata = methdata; - ifdata.cMembers = sizeof(methdata) / sizeof(methdata[0]); - - methdata[0].szName = SysAllocString(func1); - methdata[0].ppdata = parms1; - methdata[0].dispid = 0x123; - methdata[0].iMeth = 0; - methdata[0].cc = CC_STDCALL; - methdata[0].cArgs = 2; - methdata[0].wFlags = DISPATCH_METHOD; - methdata[0].vtReturn = VT_HRESULT; - parms1[0].szName = SysAllocString(parm1); - parms1[0].vt = VT_I4; - parms1[1].szName = SysAllocString(parm2); - parms1[1].vt = VT_BSTR; - - methdata[1].szName = SysAllocString(func2); - methdata[1].ppdata = NULL; - methdata[1].dispid = 0x124; - methdata[1].iMeth = 1; - methdata[1].cc = CC_STDCALL; - methdata[1].cArgs = 0; - methdata[1].wFlags = DISPATCH_PROPERTYGET; - methdata[1].vtReturn = VT_I4; - - methdata[2].szName = SysAllocString(func3); - methdata[2].ppdata = parms3; - methdata[2].dispid = 0x125; - methdata[2].iMeth = 3; - methdata[2].cc = CC_STDCALL; - methdata[2].cArgs = 1; - methdata[2].wFlags = DISPATCH_PROPERTYPUT; - methdata[2].vtReturn = VT_HRESULT; - parms3[0].szName = SysAllocString(parm1); - parms3[0].vt = VT_I4; - - methdata[3].szName = SysAllocString(func3); - methdata[3].ppdata = NULL; - methdata[3].dispid = 0x125; - methdata[3].iMeth = 4; - methdata[3].cc = CC_STDCALL; - methdata[3].cArgs = 0; - methdata[3].wFlags = DISPATCH_PROPERTYGET; - methdata[3].vtReturn = VT_I4; - - hr = CreateDispTypeInfo(&ifdata, LOCALE_NEUTRAL, &pTypeInfo); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = ITypeInfo_GetTypeAttr(pTypeInfo, &pTypeAttr); - ok(hr == S_OK, "hr %08x\n", hr); - - ok(pTypeAttr->typekind == TKIND_COCLASS, "typekind %0x\n", pTypeAttr->typekind); - ok(pTypeAttr->cImplTypes == 1, "cImplTypes %d\n", pTypeAttr->cImplTypes); - ok(pTypeAttr->cFuncs == 0, "cFuncs %d\n", pTypeAttr->cFuncs); - ok(pTypeAttr->wTypeFlags == 0, "wTypeFlags %04x\n", pTypeAttr->cFuncs); - ITypeInfo_ReleaseTypeAttr(pTypeInfo, pTypeAttr); - - hr = ITypeInfo_GetRefTypeOfImplType(pTypeInfo, 0, &href); - ok(hr == S_OK, "hr %08x\n", hr); - ok(href == 0, "href = 0x%x\n", href); - hr = ITypeInfo_GetRefTypeInfo(pTypeInfo, href, &pTI2); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetTypeAttr(pTI2, &pTypeAttr); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pTypeAttr->typekind == TKIND_INTERFACE, "typekind %0x\n", pTypeAttr->typekind); - ok(pTypeAttr->cFuncs == 4, "cFuncs %d\n", pTypeAttr->cFuncs); - ok(IsEqualGUID(&pTypeAttr->guid, &GUID_NULL), "guid {%08x-...}\n", pTypeAttr->guid.Data1); - ok(pTypeAttr->wTypeFlags == 0, "typeflags %08x\n", pTypeAttr->wTypeFlags); - - ITypeInfo_ReleaseTypeAttr(pTI2, pTypeAttr); - - hr = ITypeInfo_GetFuncDesc(pTI2, 0, &pFuncDesc); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFuncDesc->memid == 0x123, "memid %x\n", pFuncDesc->memid); - ok(pFuncDesc->funckind == FUNC_VIRTUAL, "funckind %d\n", pFuncDesc->funckind); - ok(pFuncDesc->invkind == methdata[0].wFlags, "invkind %d\n", pFuncDesc->invkind); - ok(pFuncDesc->callconv == methdata[0].cc, "callconv %d\n", pFuncDesc->callconv); - ok(pFuncDesc->cParams == methdata[0].cArgs, "cParams %d\n", pFuncDesc->cParams); - ok(pFuncDesc->oVft == 0, "oVft %d\n", pFuncDesc->oVft); - ok(pFuncDesc->wFuncFlags == 0, "oVft %d\n", pFuncDesc->wFuncFlags); - ok(pFuncDesc->elemdescFunc.tdesc.vt == VT_HRESULT, "ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt); - ok(pFuncDesc->lprgelemdescParam[0].tdesc.vt == VT_I4, "parm 0 vt %x\n", pFuncDesc->lprgelemdescParam[0].tdesc.vt); - ok(U(pFuncDesc->lprgelemdescParam[0]).paramdesc.wParamFlags == PARAMFLAG_NONE, "parm 0 flags %x\n", U(pFuncDesc->lprgelemdescParam[0]).paramdesc.wParamFlags); - - ok(pFuncDesc->lprgelemdescParam[1].tdesc.vt == VT_BSTR, "parm 1 vt %x\n", pFuncDesc->lprgelemdescParam[1].tdesc.vt); - ok(U(pFuncDesc->lprgelemdescParam[1]).paramdesc.wParamFlags == PARAMFLAG_NONE, "parm 1 flags %x\n", U(pFuncDesc->lprgelemdescParam[1]).paramdesc.wParamFlags); - ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc); - - hr = ITypeInfo_GetFuncDesc(pTI2, 1, &pFuncDesc); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFuncDesc->funckind == FUNC_VIRTUAL, "funckind %d\n", pFuncDesc->funckind); - ok(pFuncDesc->invkind == methdata[1].wFlags, "invkind %d\n", pFuncDesc->invkind); - ok(pFuncDesc->callconv == methdata[1].cc, "callconv %d\n", pFuncDesc->callconv); - ok(pFuncDesc->cParams == methdata[1].cArgs, "cParams %d\n", pFuncDesc->cParams); - ok(pFuncDesc->oVft == 4, "oVft %d\n", pFuncDesc->oVft); - ok(pFuncDesc->wFuncFlags == 0, "oVft %d\n", pFuncDesc->wFuncFlags); - ok(pFuncDesc->elemdescFunc.tdesc.vt == VT_I4, "ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt); - ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc); - - hr = ITypeInfo_GetFuncDesc(pTI2, 2, &pFuncDesc); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFuncDesc->funckind == FUNC_VIRTUAL, "funckind %d\n", pFuncDesc->funckind); - ok(pFuncDesc->invkind == methdata[2].wFlags, "invkind %d\n", pFuncDesc->invkind); - ok(pFuncDesc->callconv == methdata[2].cc, "callconv %d\n", pFuncDesc->callconv); - ok(pFuncDesc->cParams == methdata[2].cArgs, "cParams %d\n", pFuncDesc->cParams); - ok(pFuncDesc->oVft == 12, "oVft %d\n", pFuncDesc->oVft); - ok(pFuncDesc->wFuncFlags == 0, "oVft %d\n", pFuncDesc->wFuncFlags); - ok(pFuncDesc->elemdescFunc.tdesc.vt == VT_HRESULT, "ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt); - ok(pFuncDesc->lprgelemdescParam[0].tdesc.vt == VT_I4, "parm 0 vt %x\n", pFuncDesc->lprgelemdescParam[0].tdesc.vt); - ok(U(pFuncDesc->lprgelemdescParam[0]).paramdesc.wParamFlags == PARAMFLAG_NONE, "parm 0 flags %x\n", U(pFuncDesc->lprgelemdescParam[0]).paramdesc.wParamFlags); - ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc); - - hr = ITypeInfo_GetFuncDesc(pTI2, 3, &pFuncDesc); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFuncDesc->funckind == FUNC_VIRTUAL, "funckind %d\n", pFuncDesc->funckind); - ok(pFuncDesc->invkind == methdata[3].wFlags, "invkind %d\n", pFuncDesc->invkind); - ok(pFuncDesc->callconv == methdata[3].cc, "callconv %d\n", pFuncDesc->callconv); - ok(pFuncDesc->cParams == methdata[3].cArgs, "cParams %d\n", pFuncDesc->cParams); - ok(pFuncDesc->oVft == 16, "oVft %d\n", pFuncDesc->oVft); - ok(pFuncDesc->wFuncFlags == 0, "oVft %d\n", pFuncDesc->wFuncFlags); - ok(pFuncDesc->elemdescFunc.tdesc.vt == VT_I4, "ret vt %x\n", pFuncDesc->elemdescFunc.tdesc.vt); - ITypeInfo_ReleaseFuncDesc(pTI2, pFuncDesc); - - /* test GetIDsOfNames on a coclass to see if it searches its interfaces */ - hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &name, 1, &memid); - ok(hr == S_OK, "hr 0x%08x\n", hr); - ok(memid == 0x123, "memid 0x%08x\n", memid); - - ITypeInfo_Release(pTI2); - ITypeInfo_Release(pTypeInfo); - - SysFreeString(parms1[0].szName); - SysFreeString(parms1[1].szName); - SysFreeString(parms3[0].szName); - SysFreeString(methdata[0].szName); - SysFreeString(methdata[1].szName); - SysFreeString(methdata[2].szName); - SysFreeString(methdata[3].szName); -} - -static void test_TypeInfo(void) -{ - ITypeLib *pTypeLib; - ITypeInfo *pTypeInfo; - HRESULT hr; - static WCHAR wszBogus[] = { 'b','o','g','u','s',0 }; - static WCHAR wszGetTypeInfo[] = { 'G','e','t','T','y','p','e','I','n','f','o',0 }; - static WCHAR wszClone[] = {'C','l','o','n','e',0}; - OLECHAR* bogus = wszBogus; - OLECHAR* pwszGetTypeInfo = wszGetTypeInfo; - OLECHAR* pwszClone = wszClone; - DISPID dispidMember; - DISPPARAMS dispparams; - - hr = LoadTypeLib(wszStdOle2, &pTypeLib); - ok_ole_success(hr, LoadTypeLib); - - hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_IFont, &pTypeInfo); - ok_ole_success(hr, ITypeLib_GetTypeInfoOfGuid); - - /* test nonexistent method name */ - hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &bogus, 1, &dispidMember); - ok(hr == DISP_E_UNKNOWNNAME, - "ITypeInfo_GetIDsOfNames should have returned DISP_E_UNKNOWNNAME instead of 0x%08x\n", - hr); - - /* test invalid memberid */ - dispparams.cNamedArgs = 0; - dispparams.cArgs = 0; - dispparams.rgdispidNamedArgs = NULL; - dispparams.rgvarg = NULL; - hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, 0xdeadbeef, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - - hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &pwszClone, 1, &dispidMember); - ok_ole_success(hr, ITypeInfo_GetIDsOfNames); - - /* test correct memberid, but wrong flags */ - hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_PROPERTYGET, &dispparams, NULL, NULL, NULL); - ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - - /* test NULL dispparams */ - hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, NULL, NULL, NULL, NULL); - ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - /* test dispparams->cNamedArgs being bigger than dispparams->cArgs */ - dispparams.cNamedArgs = 1; - hr = ITypeInfo_Invoke(pTypeInfo, (void *)0xdeadbeef, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); - ok(hr == E_INVALIDARG, "ITypeInfo_Invoke should have returned E_INVALIDARG instead of 0x%08x\n", hr); - - ITypeInfo_Release(pTypeInfo); - - hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_IDispatch, &pTypeInfo); - ok_ole_success(hr, ITypeLib_GetTypeInfoOfGuid); - - hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &pwszGetTypeInfo, 1, &dispidMember); - ok_ole_success(hr, ITypeInfo_GetIDsOfNames); - - /* test invoking a method with a [restricted] keyword */ - hr = ITypeInfo_Invoke(pTypeInfo, NULL, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); - todo_wine { - ok(hr == DISP_E_MEMBERNOTFOUND, "ITypeInfo_Invoke should have returned DISP_E_MEMBERNOTFOUND instead of 0x%08x\n", hr); - } - - ITypeInfo_Release(pTypeInfo); - ITypeLib_Release(pTypeLib); -} - -static BOOL do_typelib_reg_key(GUID *uid, WORD maj, WORD min, LPCWSTR base, BOOL remove) -{ - static const WCHAR typelibW[] = {'T','y','p','e','l','i','b','\\',0}; - static const WCHAR formatW[] = {'\\','%','u','.','%','u','\\','0','\\','w','i','n','3','2',0}; - static const WCHAR format2W[] = {'%','s','_','%','u','_','%','u','.','d','l','l',0}; - WCHAR buf[128]; - HKEY hkey; - BOOL ret = TRUE; - - memcpy(buf, typelibW, sizeof(typelibW)); - StringFromGUID2(uid, buf + lstrlenW(buf), 40); - - if (remove) - { - ok(SHDeleteKeyW(HKEY_CLASSES_ROOT, buf) == ERROR_SUCCESS, "SHDeleteKey failed\n"); - return TRUE; - } - - wsprintfW(buf + lstrlenW(buf), formatW, maj, min ); - - if (RegCreateKeyExW(HKEY_CLASSES_ROOT, buf, 0, NULL, 0, - KEY_WRITE, NULL, &hkey, NULL) != ERROR_SUCCESS) - { - trace("RegCreateKeyExW failed\n"); - return FALSE; - } - - wsprintfW(buf, format2W, base, maj, min); - if (RegSetValueExW(hkey, NULL, 0, REG_SZ, - (BYTE *)buf, (lstrlenW(buf) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) - { - trace("RegSetValueExW failed\n"); - ret = FALSE; - } - RegCloseKey(hkey); - return ret; -} - -static void test_QueryPathOfRegTypeLib(void) -{ - static const struct test_data - { - WORD maj, min; - HRESULT ret; - const WCHAR path[16]; - } td[] = { - { 1, 0, TYPE_E_LIBNOTREGISTERED, { 0 } }, - { 3, 0, S_OK, {'f','a','k','e','_','3','_','0','.','d','l','l',0 } }, - { 3, 1, S_OK, {'f','a','k','e','_','3','_','1','.','d','l','l',0 } }, - { 3, 22, S_OK, {'f','a','k','e','_','3','_','3','7','.','d','l','l',0 } }, - { 3, 37, S_OK, {'f','a','k','e','_','3','_','3','7','.','d','l','l',0 } }, - { 3, 40, S_OK, {'f','a','k','e','_','3','_','3','7','.','d','l','l',0 } }, - { 4, 0, TYPE_E_LIBNOTREGISTERED, { 0 } } - }; - static const WCHAR base[] = {'f','a','k','e',0}; - UINT i; - RPC_STATUS status; - GUID uid; - WCHAR uid_str[40]; - HRESULT ret; - BSTR path; - - status = UuidCreate(&uid); - ok(!status, "UuidCreate error %08lx\n", status); - - StringFromGUID2(&uid, uid_str, 40); - /*trace("GUID: %s\n", wine_dbgstr_w(uid_str));*/ - - if (!do_typelib_reg_key(&uid, 3, 0, base, 0)) return; - if (!do_typelib_reg_key(&uid, 3, 1, base, 0)) return; - if (!do_typelib_reg_key(&uid, 3, 37, base, 0)) return; - - for (i = 0; i < sizeof(td)/sizeof(td[0]); i++) - { - ret = QueryPathOfRegTypeLib(&uid, td[i].maj, td[i].min, 0, &path); - ok(ret == td[i].ret, "QueryPathOfRegTypeLib(%u.%u) returned %08x\n", td[i].maj, td[i].min, ret); - if (ret == S_OK) - { - ok(!lstrcmpW(td[i].path, path), "typelib %u.%u path doesn't match\n", td[i].maj, td[i].min); - SysFreeString(path); - } - } - - do_typelib_reg_key(&uid, 0, 0, NULL, 1); -} - -static void test_inheritance(void) -{ - HRESULT hr; - ITypeLib *pTL; - ITypeInfo *pTI, *pTI_p; - TYPEATTR *pTA; - HREFTYPE href; - FUNCDESC *pFD; - WCHAR path[MAX_PATH]; - static const WCHAR tl_path[] = {'.','\\','m','i','d','l','_','t','m','a','r','s','h','a','l','.','t','l','b',0}; - - BOOL use_midl_tlb = 0; - - GetModuleFileNameW(NULL, path, MAX_PATH); - - if(use_midl_tlb) - memcpy(path, tl_path, sizeof(tl_path)); - - hr = LoadTypeLib(path, &pTL); - if(FAILED(hr)) return; - - - /* ItestIF3 is a syntax 2 dispinterface */ - hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF3, &pTI); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = ITypeInfo_GetTypeAttr(pTI, &pTA); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); - ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags); -if(use_midl_tlb) { - ok(pTA->cFuncs == 6, "cfuncs %d\n", pTA->cFuncs); - ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); - ITypeInfo_ReleaseTypeAttr(pTI, pTA); - - hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA); - ok(IsEqualGUID(&pTA->guid, &IID_IDispatch), "guid {%08x-....\n", pTA->guid.Data1); - ITypeInfo_ReleaseTypeAttr(pTI_p, pTA); - ITypeInfo_Release(pTI_p); - - /* Should have six methods */ - hr = ITypeInfo_GetFuncDesc(pTI, 6, &pFD); - ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr); - hr = ITypeInfo_GetFuncDesc(pTI, 5, &pFD); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFD->memid == 0x60020000, "memid %08x\n", pFD->memid); - ok(pFD->oVft == 20, "oVft %d\n", pFD->oVft); - ITypeInfo_ReleaseFuncDesc(pTI, pFD); -} - ITypeInfo_Release(pTI); - - - /* ItestIF4 is a syntax 1 dispinterface */ - hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF4, &pTI); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = ITypeInfo_GetTypeAttr(pTI, &pTA); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); - ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags); - ok(pTA->cFuncs == 1, "cfuncs %d\n", pTA->cFuncs); - ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); - ITypeInfo_ReleaseTypeAttr(pTI, pTA); - - hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA); - ok(IsEqualGUID(&pTA->guid, &IID_IDispatch), "guid {%08x-....\n", pTA->guid.Data1); - ITypeInfo_ReleaseTypeAttr(pTI_p, pTA); - ITypeInfo_Release(pTI_p); - hr = ITypeInfo_GetFuncDesc(pTI, 1, &pFD); - ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr); - hr = ITypeInfo_GetFuncDesc(pTI, 0, &pFD); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFD->memid == 0x1c, "memid %08x\n", pFD->memid); - ITypeInfo_ReleaseFuncDesc(pTI, pFD); - ITypeInfo_Release(pTI); - - - /* ItestIF5 is dual with inherited ifaces which derive from IUnknown but not IDispatch */ - hr = ITypeLib_GetTypeInfoOfGuid(pTL, &IID_ItestIF5, &pTI); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = ITypeInfo_GetTypeAttr(pTI, &pTA); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); -if(use_midl_tlb) { - ok(pTA->wTypeFlags == TYPEFLAG_FDUAL, "typeflags %x\n", pTA->wTypeFlags); - } - ok(pTA->cFuncs == 8, "cfuncs %d\n", pTA->cFuncs); - ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); - ITypeInfo_ReleaseTypeAttr(pTI, pTA); - - hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA); - ok(IsEqualGUID(&pTA->guid, &IID_IDispatch), "guid {%08x-....\n", pTA->guid.Data1); - ITypeInfo_ReleaseTypeAttr(pTI_p, pTA); - ITypeInfo_Release(pTI_p); -if(use_midl_tlb) { - hr = ITypeInfo_GetFuncDesc(pTI, 6, &pFD); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFD->memid == 0x1234, "memid %08x\n", pFD->memid); - ITypeInfo_ReleaseFuncDesc(pTI, pFD); -} - ITypeInfo_Release(pTI); - - /* ItestIF7 is dual with inherited ifaces which derive from Dispatch */ - hr = ITypeLib_GetTypeInfoOfGuid(pTL, &IID_ItestIF7, &pTI); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = ITypeInfo_GetTypeAttr(pTI, &pTA); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); - ok(pTA->wTypeFlags == (TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL), "typeflags %x\n", pTA->wTypeFlags); - ok(pTA->cFuncs == 10, "cfuncs %d\n", pTA->cFuncs); - ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); - ITypeInfo_ReleaseTypeAttr(pTI, pTA); - - hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA); - ok(IsEqualGUID(&pTA->guid, &IID_IDispatch), "guid {%08x-....\n", pTA->guid.Data1); - ITypeInfo_ReleaseTypeAttr(pTI_p, pTA); - ITypeInfo_Release(pTI_p); - - hr = ITypeInfo_GetFuncDesc(pTI, 9, &pFD); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFD->memid == 0x1236, "memid %08x\n", pFD->memid); - ITypeInfo_ReleaseFuncDesc(pTI, pFD); - ITypeInfo_Release(pTI); - - /* ItestIF10 is a syntax 2 dispinterface which doesn't derive from IUnknown */ - hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF10, &pTI); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = ITypeInfo_GetTypeAttr(pTI, &pTA); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); - ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags); -if(use_midl_tlb) { - ok(pTA->cFuncs == 3, "cfuncs %d\n", pTA->cFuncs); - ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); - ITypeInfo_ReleaseTypeAttr(pTI, pTA); - - hr = ITypeInfo_GetRefTypeOfImplType(pTI, -1, &href); - ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr); - hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA); - ok(IsEqualGUID(&pTA->guid, &IID_IDispatch), "guid {%08x-....\n", pTA->guid.Data1); - ITypeInfo_ReleaseTypeAttr(pTI_p, pTA); - ITypeInfo_Release(pTI_p); - - /* Should have three methods */ - hr = ITypeInfo_GetFuncDesc(pTI, 3, &pFD); - ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr); - hr = ITypeInfo_GetFuncDesc(pTI, 2, &pFD); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFD->memid == 0x60010000, "memid %08x\n", pFD->memid); - ok(pFD->oVft == 8, "oVft %d\n", pFD->oVft); - ITypeInfo_ReleaseFuncDesc(pTI, pFD); -} - ITypeInfo_Release(pTI); - - /* ItestIF11 is a syntax 2 dispinterface which derives from IDispatch */ - hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF11, &pTI); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = ITypeInfo_GetTypeAttr(pTI, &pTA); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft); - ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags); -if(use_midl_tlb) { - ok(pTA->cFuncs == 10, "cfuncs %d\n", pTA->cFuncs); - ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); - ITypeInfo_ReleaseTypeAttr(pTI, pTA); - - hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p); - ok(hr == S_OK, "hr %08x\n", hr); - hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA); - ok(IsEqualGUID(&pTA->guid, &IID_IDispatch), "guid {%08x-....\n", pTA->guid.Data1); - ITypeInfo_ReleaseTypeAttr(pTI_p, pTA); - ITypeInfo_Release(pTI_p); - - /* Should have ten methods */ - hr = ITypeInfo_GetFuncDesc(pTI, 10, &pFD); - ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr); - hr = ITypeInfo_GetFuncDesc(pTI, 9, &pFD); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFD->memid == 0x1236, "memid %08x\n", pFD->memid); - ok(pFD->oVft == 36, "oVft %d\n", pFD->oVft); - ITypeInfo_ReleaseFuncDesc(pTI, pFD); -} - ITypeInfo_Release(pTI); - - - /* ItestIF2 is an interface which derives from IUnknown */ - hr = ITypeLib_GetTypeInfoOfGuid(pTL, &IID_ItestIF2, &pTI); - ok(hr == S_OK, "hr %08x\n", hr); - - hr = ITypeInfo_GetTypeAttr(pTI, &pTA); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pTA->typekind == TKIND_INTERFACE, "kind %04x\n", pTA->typekind); - ok(pTA->cbSizeVft == 24, "sizevft %d\n", pTA->cbSizeVft); - ok(pTA->wTypeFlags == 0, "typeflags %x\n", pTA->wTypeFlags); -if(use_midl_tlb) { - ok(pTA->cFuncs == 1, "cfuncs %d\n", pTA->cFuncs); - ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes); - ITypeInfo_ReleaseTypeAttr(pTI, pTA); - - /* Should have one method */ - hr = ITypeInfo_GetFuncDesc(pTI, 1, &pFD); - ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr); - hr = ITypeInfo_GetFuncDesc(pTI, 0, &pFD); - ok(hr == S_OK, "hr %08x\n", hr); - ok(pFD->memid == 0x60020000, "memid %08x\n", pFD->memid); - ok(pFD->oVft == 20, "oVft %d\n", pFD->oVft); - ITypeInfo_ReleaseFuncDesc(pTI, pFD); -} - ITypeInfo_Release(pTI); - - ITypeLib_Release(pTL); - - return; -} - -#if 0 /* use this to generate more tests */ - -#define OLE_CHECK(x) { HRESULT hr = x; if (FAILED(hr)) { printf(#x "failed - %x\n", hr); return; } } - -static char *dump_string(LPWSTR wstr) -{ - int size = lstrlenW(wstr)+3; - char *out = CoTaskMemAlloc(size); - WideCharToMultiByte(20127, 0, wstr, -1, out+1, size, NULL, NULL); - out[0] = '\"'; - strcat(out, "\""); - return out; -} - -struct map_entry -{ - DWORD value; - const char *name; -}; - -#define MAP_ENTRY(x) { x, #x } -static const struct map_entry tkind_map[] = { - MAP_ENTRY(TKIND_ENUM), - MAP_ENTRY(TKIND_RECORD), - MAP_ENTRY(TKIND_MODULE), - MAP_ENTRY(TKIND_INTERFACE), - MAP_ENTRY(TKIND_DISPATCH), - MAP_ENTRY(TKIND_COCLASS), - MAP_ENTRY(TKIND_ALIAS), - MAP_ENTRY(TKIND_UNION), - MAP_ENTRY(TKIND_MAX), - {0, NULL} -}; - -static const struct map_entry funckind_map[] = { - MAP_ENTRY(FUNC_VIRTUAL), - MAP_ENTRY(FUNC_PUREVIRTUAL), - MAP_ENTRY(FUNC_NONVIRTUAL), - MAP_ENTRY(FUNC_STATIC), - MAP_ENTRY(FUNC_DISPATCH), - {0, NULL} -}; - -static const struct map_entry invkind_map[] = { - MAP_ENTRY(INVOKE_FUNC), - MAP_ENTRY(INVOKE_PROPERTYGET), - MAP_ENTRY(INVOKE_PROPERTYPUT), - MAP_ENTRY(INVOKE_PROPERTYPUTREF), - {0, NULL} -}; - -#undef MAP_ENTRY - -static const char *map_value(DWORD val, const struct map_entry *map) -{ - static int map_id; - static char bufs[16][256]; - char *buf; - - while (map->name) - { - if (map->value == val) - return map->name; - map++; - } - - buf = bufs[(map_id++)%16]; - sprintf(buf, "0x%x", val); - return buf; -} - -static void test_dump_typelib(const char *name) -{ - WCHAR wszString[260]; - ITypeInfo *info; - ITypeLib *lib; - int count; - int i; - - MultiByteToWideChar(CP_ACP, 0, name, -1, wszString, 260); - OLE_CHECK(LoadTypeLib(wszString, &lib)); - count = ITypeLib_GetTypeInfoCount(lib); - printf("/* interfaces count: %d */\n", count); - for (i = 0; i < count; i++) - { - TYPEATTR *attr; - BSTR name; - int f = 0; - - OLE_CHECK(ITypeLib_GetDocumentation(lib, i, &name, NULL, NULL, NULL)); - printf("{\n" - " %s,\n", dump_string(name)); - SysFreeString(name); - - OLE_CHECK(ITypeLib_GetTypeInfo(lib, i, &info)); - ITypeInfo_GetTypeAttr(info, &attr); - printf(" /*kind*/ %s, /*flags*/ 0x%x, /*align*/ %d, /*size*/ %d,\n" - " /*#vtbl*/ %d, /*#func*/ %d,\n" - " {\n", - map_value(attr->typekind, tkind_map), attr->wTypeFlags, attr->cbAlignment, attr->cbSizeInstance, attr->cbSizeVft, - attr->cFuncs); - ITypeInfo_ReleaseTypeAttr(info, attr); - while (1) - { - FUNCDESC *desc; - BSTR tab[256]; - UINT cNames; - int p; - - if (FAILED(ITypeInfo_GetFuncDesc(info, f, &desc))) - break; - printf(" {\n" - " 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ 0x%x,\n", - desc->memid, map_value(desc->funckind, funckind_map), map_value(desc->invkind, invkind_map), - desc->callconv); - printf(" /*#param*/ %d, /*#opt*/ %d, /*vtbl*/ %d, /*#scodes*/ %d, /*flags*/ 0x%x,\n", - desc->cParams, desc->cParamsOpt, desc->oVft, desc->cScodes, desc->wFuncFlags); - printf(" {%d, %x}, /* ret */\n", desc->elemdescFunc.tdesc.vt, desc->elemdescFunc.paramdesc.wParamFlags); - printf(" { /* params */\n"); - for (p = 0; p < desc->cParams; p++) - { - ELEMDESC e = desc->lprgelemdescParam[p]; - printf(" {%d, %x},\n", e.tdesc.vt, e.paramdesc.wParamFlags); - } - printf(" {-1, -1}\n"); - printf(" },\n"); - printf(" { /* names */\n"); - OLE_CHECK(ITypeInfo_GetNames(info, desc->memid, tab, 256, &cNames)); - for (p = 0; p < cNames; p++) - { - printf(" %s,\n", dump_string(tab[p])); - SysFreeString(tab[p]); - } - printf(" NULL,\n"); - printf(" },\n"); - printf(" },\n"); - ITypeInfo_ReleaseFuncDesc(info, desc); - f++; - } - printf(" }\n"); - printf("},\n"); - ITypeInfo_Release(info); - } - ITypeLib_Release(lib); -} - -#else - -typedef struct _element_info -{ - VARTYPE vt; - USHORT wParamFlags; -} element_info; - -typedef struct _function_info -{ - MEMBERID memid; - FUNCKIND funckind; - INVOKEKIND invkind; - CALLCONV callconv; - short cParams; - short cParamsOpt; - short oVft; - short cScodes; - WORD wFuncFlags; - element_info ret_type; - element_info params[15]; - LPCSTR names[15]; -} function_info; - -typedef struct _interface_info -{ - LPCSTR name; - TYPEKIND type; - WORD wTypeFlags; - USHORT cbAlignment; - USHORT cbSizeInstance; - USHORT cbSizeVft; - USHORT cFuncs; - function_info funcs[20]; -} interface_info; - -static const interface_info info[] = { -/* interfaces count: 2 */ -{ - "IDualIface", - /*kind*/ TKIND_DISPATCH, /*flags*/ 0x1040, /*align*/ 4, /*size*/ 4, - /*#vtbl*/ 28, /*#func*/ 8, - { - { - 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ - { /* params */ - {26, 1}, - {26, 2}, - {-1, -1} - }, - { /* names */ - "QueryInterface", - "riid", - "ppvObj", - NULL, - }, - }, - { - 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0x1, - {19, 0}, /* ret */ - { /* params */ - {-1, -1} - }, - { /* names */ - "AddRef", - NULL, - }, - }, - { - 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0x1, - {19, 0}, /* ret */ - { /* params */ - {-1, -1} - }, - { /* names */ - "Release", - NULL, - }, - }, - { - 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ - { /* params */ - {26, 2}, - {-1, -1} - }, - { /* names */ - "GetTypeInfoCount", - "pctinfo", - NULL, - }, - }, - { - 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 16, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ - { /* params */ - {23, 1}, - {19, 1}, - {26, 2}, - {-1, -1} - }, - { /* names */ - "GetTypeInfo", - "itinfo", - "lcid", - "pptinfo", - NULL, - }, - }, - { - 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 20, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ - { /* params */ - {26, 1}, - {26, 1}, - {23, 1}, - {19, 1}, - {26, 2}, - {-1, -1} - }, - { /* names */ - "GetIDsOfNames", - "riid", - "rgszNames", - "cNames", - "lcid", - "rgdispid", - NULL, - }, - }, - { - 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 24, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ - { /* params */ - {3, 1}, - {26, 1}, - {19, 1}, - {18, 1}, - {26, 1}, - {26, 2}, - {26, 2}, - {26, 2}, - {-1, -1} - }, - { /* names */ - "Invoke", - "dispidMember", - "riid", - "lcid", - "wFlags", - "pdispparams", - "pvarResult", - "pexcepinfo", - "puArgErr", - NULL, - }, - }, - { - 0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 28, /*#scodes*/ 0, /*flags*/ 0x0, - {24, 0}, /* ret */ - { /* params */ - {-1, -1} - }, - { /* names */ - "Test", - NULL, - }, - }, - } -}, -{ - "ISimpleIface", - /*kind*/ TKIND_INTERFACE, /*flags*/ 0x1000, /*align*/ 4, /*size*/ 4, - /*#vtbl*/ 32, /*#func*/ 1, - { - { - 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ 0x4, - /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 28, /*#scodes*/ 0, /*flags*/ 0x0, - {25, 0}, /* ret */ - { /* params */ - {-1, -1} - }, - { /* names */ - "Test", - NULL, - }, - }, - } -}, -}; - -#define check_type(elem, info) { \ - expect_int((elem)->tdesc.vt, (info)->vt); \ - expect_hex(U(*(elem)).paramdesc.wParamFlags, (info)->wParamFlags); \ - } - -static void test_dump_typelib(const char *name) -{ - WCHAR wszName[MAX_PATH]; - ITypeLib *typelib; - int ifcount = sizeof(info)/sizeof(info[0]); - int iface, func; - - MultiByteToWideChar(CP_UTF8, 0, name, -1, wszName, MAX_PATH); - ole_check(LoadTypeLibEx(wszName, REGKIND_NONE, &typelib)); - expect_eq(ITypeLib_GetTypeInfoCount(typelib), ifcount, UINT, "%d"); - for (iface = 0; iface < ifcount; iface++) - { - const interface_info *if_info = &info[iface]; - ITypeInfo *typeinfo; - TYPEATTR *typeattr; - BSTR bstrIfName; - - trace("Interface %s\n", if_info->name); - ole_check(ITypeLib_GetTypeInfo(typelib, iface, &typeinfo)); - ole_check(ITypeLib_GetDocumentation(typelib, iface, &bstrIfName, NULL, NULL, NULL)); - expect_wstr_utf8val(bstrIfName, if_info->name); - SysFreeString(bstrIfName); - - ole_check(ITypeInfo_GetTypeAttr(typeinfo, &typeattr)); - expect_int(typeattr->typekind, if_info->type); - expect_hex(typeattr->wTypeFlags, if_info->wTypeFlags); - expect_int(typeattr->cbAlignment, if_info->cbAlignment); - expect_int(typeattr->cbSizeInstance, if_info->cbSizeInstance); - expect_int(typeattr->cbSizeVft, if_info->cbSizeVft); - expect_int(typeattr->cFuncs, if_info->cFuncs); - - for (func = 0; func < typeattr->cFuncs; func++) - { - function_info *fn_info = (function_info *)&if_info->funcs[func]; - FUNCDESC *desc; - BSTR namesTab[256]; - UINT cNames; - int i; - - trace("Function %s\n", fn_info->names[0]); - ole_check(ITypeInfo_GetFuncDesc(typeinfo, func, &desc)); - expect_int(desc->memid, fn_info->memid); - expect_int(desc->funckind, fn_info->funckind); - expect_int(desc->invkind, fn_info->invkind); - expect_int(desc->callconv, fn_info->callconv); - expect_int(desc->cParams, fn_info->cParams); - expect_int(desc->cParamsOpt, fn_info->cParamsOpt); - expect_int(desc->oVft, fn_info->oVft); - expect_int(desc->cScodes, fn_info->cScodes); - expect_int(desc->wFuncFlags, fn_info->wFuncFlags); - ole_check(ITypeInfo_GetNames(typeinfo, desc->memid, namesTab, 256, &cNames)); - for (i = 0; i < cNames; i++) - { - expect_wstr_utf8val(namesTab[i], fn_info->names[i]); - SysFreeString(namesTab[i]); - } - expect_null(fn_info->names[cNames]); - - check_type(&desc->elemdescFunc, &fn_info->ret_type); - for (i = 0 ; i < desc->cParams; i++) - { - check_type(&desc->lprgelemdescParam[i], &fn_info->params[i]); - } - expect_int(fn_info->params[desc->cParams].vt, (VARTYPE)-1); - - ITypeInfo_ReleaseFuncDesc(typeinfo, desc); - } - - ITypeInfo_ReleaseTypeAttr(typeinfo, typeattr); - ITypeInfo_Release(typeinfo); - } - ITypeLib_Release(typelib); -} - -#endif - -START_TEST(typelib) -{ - ref_count_test(wszStdOle2); - test_TypeComp(); - test_CreateDispTypeInfo(); - test_TypeInfo(); - test_QueryPathOfRegTypeLib(); - test_inheritance(); - test_dump_typelib("test_tlb.tlb"); -} diff --git a/rostests/winetests/oleaut32/usrmarshal.c b/rostests/winetests/oleaut32/usrmarshal.c deleted file mode 100644 index 633a382fba1..00000000000 --- a/rostests/winetests/oleaut32/usrmarshal.c +++ /dev/null @@ -1,1282 +0,0 @@ -/* - * Marshaling Tests - * - * 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 - */ - -#define COBJMACROS - -#include - -#include "windef.h" -#include "winbase.h" -#include "objbase.h" -#include "propidl.h" /* for LPSAFEARRAY_User* routines */ - -#include "wine/test.h" - -#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION) -# define V_U2(A) ((A)->n1.n2) -#else -# define V_U2(A) (*(A)) -#endif - -/* doesn't work on Windows due to needing more of the - * MIDL_STUB_MESSAGE structure to be filled out */ -#define LPSAFEARRAY_UNMARSHAL_WORKS 0 -#define BSTR_UNMARSHAL_WORKS 0 -#define VARIANT_UNMARSHAL_WORKS 1 - -static inline SF_TYPE get_union_type(SAFEARRAY *psa) -{ - VARTYPE vt; - HRESULT hr; - - hr = SafeArrayGetVartype(psa, &vt); - if (FAILED(hr)) - { - if(psa->fFeatures & FADF_VARIANT) return SF_VARIANT; - - switch(psa->cbElements) - { - case 1: vt = VT_I1; break; - case 2: vt = VT_I2; break; - case 4: vt = VT_I4; break; - case 8: vt = VT_I8; break; - default: return 0; - } - } - - if (psa->fFeatures & FADF_HAVEIID) - return SF_HAVEIID; - - switch (vt) - { - case VT_I1: - case VT_UI1: return SF_I1; - case VT_BOOL: - case VT_I2: - case VT_UI2: return SF_I2; - case VT_INT: - case VT_UINT: - case VT_I4: - case VT_UI4: - case VT_R4: return SF_I4; - case VT_DATE: - case VT_CY: - case VT_R8: - case VT_I8: - case VT_UI8: return SF_I8; - case VT_INT_PTR: - case VT_UINT_PTR: return (sizeof(UINT_PTR) == 4 ? SF_I4 : SF_I8); - case VT_BSTR: return SF_BSTR; - case VT_DISPATCH: return SF_DISPATCH; - case VT_VARIANT: return SF_VARIANT; - case VT_UNKNOWN: return SF_UNKNOWN; - /* 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 SF_RECORD; - default: return SF_ERROR; - } -} - -static ULONG get_cell_count(const SAFEARRAY *psa) -{ - const SAFEARRAYBOUND* psab = psa->rgsabound; - USHORT cCount = psa->cDims; - ULONG ulNumCells = 1; - - while (cCount--) - { - if (!psab->cElements) - return 0; - ulNumCells *= psab->cElements; - psab++; - } - return ulNumCells; -} - -static void check_safearray(void *buffer, LPSAFEARRAY lpsa) -{ - unsigned char *wiresa = buffer; - VARTYPE vt; - SF_TYPE sftype; - ULONG cell_count; - - if(!lpsa) - { - ok(*(void **)wiresa == NULL, "wiresa + 0x0 should be NULL instead of 0x%08x\n", *(DWORD *)wiresa); - return; - } - - if(FAILED(SafeArrayGetVartype(lpsa, &vt))) - vt = 0; - - sftype = get_union_type(lpsa); - cell_count = get_cell_count(lpsa); - - ok(*(DWORD *)wiresa, "wiresa + 0x0 should be non-NULL instead of 0x%08x\n", *(DWORD *)wiresa); /* win2k: this is lpsa. winxp: this is 0x00000001 */ - wiresa += sizeof(DWORD); - ok(*(DWORD *)wiresa == lpsa->cDims, "wiresa + 0x4 should be lpsa->cDims instead of 0x%08x\n", *(DWORD *)wiresa); - wiresa += sizeof(DWORD); - ok(*(WORD *)wiresa == lpsa->cDims, "wiresa + 0x8 should be lpsa->cDims instead of 0x%04x\n", *(WORD *)wiresa); - wiresa += sizeof(WORD); - ok(*(WORD *)wiresa == lpsa->fFeatures, "wiresa + 0xc should be lpsa->fFeatures instead of 0x%08x\n", *(WORD *)wiresa); - wiresa += sizeof(WORD); - ok(*(DWORD *)wiresa == lpsa->cbElements, "wiresa + 0x10 should be lpsa->cbElements instead of 0x%08x\n", *(DWORD *)wiresa); - wiresa += sizeof(DWORD); - ok(*(WORD *)wiresa == lpsa->cLocks, "wiresa + 0x16 should be lpsa->cLocks instead of 0x%04x\n", *(WORD *)wiresa); - wiresa += sizeof(WORD); - ok(*(WORD *)wiresa == vt, "wiresa + 0x14 should be %04x instead of 0x%04x\n", vt, *(WORD *)wiresa); - wiresa += sizeof(WORD); - ok(*(DWORD *)wiresa == sftype, "wiresa + 0x18 should be %08x instead of 0x%08x\n", (DWORD)sftype, *(DWORD *)wiresa); - wiresa += sizeof(DWORD); - ok(*(DWORD *)wiresa == cell_count, "wiresa + 0x1c should be %u instead of %u\n", cell_count, *(DWORD *)wiresa); - wiresa += sizeof(DWORD); - ok(*(DWORD_PTR *)wiresa == (DWORD_PTR)lpsa->pvData, "wiresa + 0x20 should be lpsa->pvData instead of 0x%08lx\n", *(DWORD_PTR *)wiresa); - wiresa += sizeof(DWORD_PTR); - if(sftype == SF_HAVEIID) - { - GUID guid; - SafeArrayGetIID(lpsa, &guid); - ok(IsEqualGUID(&guid, (GUID*)wiresa), "guid mismatch\n"); - wiresa += sizeof(GUID); - } - ok(!memcmp(wiresa, lpsa->rgsabound, sizeof(lpsa->rgsabound[0]) * lpsa->cDims), "bounds mismatch\n"); - wiresa += sizeof(lpsa->rgsabound[0]) * lpsa->cDims; - - ok(*(DWORD *)wiresa == cell_count, "wiresa + 0x2c should be %u instead of %u\n", cell_count, *(DWORD*)wiresa); - wiresa += sizeof(DWORD); - /* elements are now pointed to by wiresa */ -} - -static void test_marshal_LPSAFEARRAY(void) -{ - unsigned char *buffer; - unsigned long size; - LPSAFEARRAY lpsa; - LPSAFEARRAY lpsa2 = NULL; - SAFEARRAYBOUND sab; - MIDL_STUB_MESSAGE stubMsg = { 0 }; - USER_MARSHAL_CB umcb = { 0 }; - HRESULT hr; - VARTYPE vt; - - umcb.Flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION); - umcb.pReserve = NULL; - umcb.pStubMsg = &stubMsg; - - sab.lLbound = 5; - sab.cElements = 10; - - lpsa = SafeArrayCreate(VT_I2, 1, &sab); - *(DWORD *)lpsa->pvData = 0xcafebabe; - - lpsa->cLocks = 7; - size = LPSAFEARRAY_UserSize(&umcb.Flags, 1, &lpsa); - ok(size == 68, "size should be 68 bytes, not %ld\n", size); - size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa); - ok(size == 64, "size should be 64 bytes, not %ld\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa); - - check_safearray(buffer, lpsa); - - if (LPSAFEARRAY_UNMARSHAL_WORKS) - { - VARTYPE vt, vt2; - LPSAFEARRAY_UserUnmarshal(&umcb.Flags, buffer, &lpsa2); - ok(lpsa2 != NULL, "LPSAFEARRAY didn't unmarshal\n"); - SafeArrayGetVartype(lpsa, &vt); - SafeArrayGetVartype(lpsa2, &vt2); - ok(vt == vt2, "vts differ %x %x\n", vt, vt2); - LPSAFEARRAY_UserFree(&umcb.Flags, &lpsa2); - } - HeapFree(GetProcessHeap(), 0, buffer); - SafeArrayDestroy(lpsa); - - /* test NULL safe array */ - lpsa = NULL; - - size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa); - ok(size == 4, "size should be 4 bytes, not %ld\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa); - check_safearray(buffer, lpsa); - - if (LPSAFEARRAY_UNMARSHAL_WORKS) - { - LPSAFEARRAY_UserUnmarshal(&umcb.Flags, buffer, &lpsa2); - ok(lpsa2 == NULL, "NULL LPSAFEARRAY didn't unmarshal\n"); - LPSAFEARRAY_UserFree(&umcb.Flags, &lpsa2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - sab.lLbound = 5; - sab.cElements = 10; - - lpsa = SafeArrayCreate(VT_R8, 1, &sab); - *(double *)lpsa->pvData = 3.1415; - - lpsa->cLocks = 7; - size = LPSAFEARRAY_UserSize(&umcb.Flags, 1, &lpsa); - ok(size == 128, "size should be 128 bytes, not %ld\n", size); - size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa); - ok(size == 128, "size should be 128 bytes, not %ld\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa); - - check_safearray(buffer, lpsa); - - HeapFree(GetProcessHeap(), 0, buffer); - SafeArrayDestroy(lpsa); - - /* VARTYPE-less arrays can be marshaled if cbElements is 1,2,4 or 8 as type SF_In */ - hr = SafeArrayAllocDescriptor(1, &lpsa); - ok(hr == S_OK, "saad failed %08x\n", hr); - lpsa->cbElements = 8; - lpsa->rgsabound[0].lLbound = 2; - lpsa->rgsabound[0].cElements = 48; - hr = SafeArrayAllocData(lpsa); - ok(hr == S_OK, "saad failed %08x\n", hr); - - hr = SafeArrayGetVartype(lpsa, &vt); - ok(hr == E_INVALIDARG, "ret %08x\n", hr); - - size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa); - ok(size == 432, "size %ld\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa); - check_safearray(buffer, lpsa); - HeapFree(GetProcessHeap(), 0, buffer); - SafeArrayDestroyData(lpsa); - SafeArrayDestroyDescriptor(lpsa); - - /* VARTYPE-less arrays with FADF_VARIANT */ - hr = SafeArrayAllocDescriptor(1, &lpsa); - ok(hr == S_OK, "saad failed %08x\n", hr); - lpsa->cbElements = 16; - lpsa->fFeatures = FADF_VARIANT; - lpsa->rgsabound[0].lLbound = 2; - lpsa->rgsabound[0].cElements = 48; - hr = SafeArrayAllocData(lpsa); - ok(hr == S_OK, "saad failed %08x\n", hr); - - hr = SafeArrayGetVartype(lpsa, &vt); - ok(hr == E_INVALIDARG, "ret %08x\n", hr); - - size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa); - todo_wine - ok(size == 1388, "size %ld\n", size); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa); - check_safearray(buffer, lpsa); - HeapFree(GetProcessHeap(), 0, buffer); - SafeArrayDestroyData(lpsa); - SafeArrayDestroyDescriptor(lpsa); -} - -static void check_bstr(void *buffer, BSTR b) -{ - DWORD *wireb = buffer; - DWORD len = SysStringByteLen(b); - - ok(*wireb == (len + 1) / 2, "wv[0] %08x\n", *wireb); - wireb++; - if(b) - ok(*wireb == len, "wv[1] %08x\n", *wireb); - else - ok(*wireb == 0xffffffff, "wv[1] %08x\n", *wireb); - wireb++; - ok(*wireb == (len + 1) / 2, "wv[2] %08x\n", *wireb); - if(len) - { - wireb++; - ok(!memcmp(wireb, b, (len + 1) & ~1), "strings differ\n"); - } - return; -} - -static void test_marshal_BSTR(void) -{ - unsigned long size; - MIDL_STUB_MESSAGE stubMsg = { 0 }; - USER_MARSHAL_CB umcb = { 0 }; - unsigned char *buffer, *next; - BSTR b, b2; - WCHAR str[] = {'m','a','r','s','h','a','l',' ','t','e','s','t','1',0}; - DWORD len; - - umcb.Flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION); - umcb.pReserve = NULL; - umcb.pStubMsg = &stubMsg; - - b = SysAllocString(str); - len = SysStringLen(b); - ok(len == 13, "get %d\n", len); - - /* BSTRs are DWORD aligned */ - size = BSTR_UserSize(&umcb.Flags, 1, &b); - ok(size == 42, "size %ld\n", size); - - size = BSTR_UserSize(&umcb.Flags, 0, &b); - ok(size == 38, "size %ld\n", size); - - buffer = HeapAlloc(GetProcessHeap(), 0, size); - next = BSTR_UserMarshal(&umcb.Flags, buffer, &b); - ok(next == buffer + size, "got %p expect %p\n", next, buffer + size); - check_bstr(buffer, b); - - if (BSTR_UNMARSHAL_WORKS) - { - b2 = NULL; - next = BSTR_UserUnmarshal(&umcb.Flags, buffer, &b2); - ok(next == buffer + size, "got %p expect %p\n", next, buffer + size); - ok(b2 != NULL, "BSTR didn't unmarshal\n"); - ok(!memcmp(b, b2, (len + 1) * 2), "strings differ\n"); - BSTR_UserFree(&umcb.Flags, &b2); - } - - HeapFree(GetProcessHeap(), 0, buffer); - SysFreeString(b); - - b = NULL; - size = BSTR_UserSize(&umcb.Flags, 0, &b); - ok(size == 12, "size %ld\n", size); - - buffer = HeapAlloc(GetProcessHeap(), 0, size); - next = BSTR_UserMarshal(&umcb.Flags, buffer, &b); - ok(next == buffer + size, "got %p expect %p\n", next, buffer + size); - - check_bstr(buffer, b); - if (BSTR_UNMARSHAL_WORKS) - { - b2 = NULL; - next = BSTR_UserUnmarshal(&umcb.Flags, buffer, &b2); - ok(next == buffer + size, "got %p expect %p\n", next, buffer + size); - ok(b2 == NULL, "NULL BSTR didn't unmarshal\n"); - BSTR_UserFree(&umcb.Flags, &b2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - b = SysAllocStringByteLen("abc", 3); - *(((char*)b) + 3) = 'd'; - len = SysStringLen(b); - ok(len == 1, "get %d\n", len); - len = SysStringByteLen(b); - ok(len == 3, "get %d\n", len); - - size = BSTR_UserSize(&umcb.Flags, 0, &b); - ok(size == 16, "size %ld\n", size); - - buffer = HeapAlloc(GetProcessHeap(), 0, size); - memset(buffer, 0xcc, size); - next = BSTR_UserMarshal(&umcb.Flags, buffer, &b); - ok(next == buffer + size, "got %p expect %p\n", next, buffer + size); - check_bstr(buffer, b); - ok(buffer[15] == 'd', "buffer[15] %02x\n", buffer[15]); - - if (BSTR_UNMARSHAL_WORKS) - { - b2 = NULL; - next = BSTR_UserUnmarshal(&umcb.Flags, buffer, &b2); - ok(next == buffer + size, "got %p expect %p\n", next, buffer + size); - ok(b2 != NULL, "BSTR didn't unmarshal\n"); - ok(!memcmp(b, b2, len), "strings differ\n"); - BSTR_UserFree(&umcb.Flags, &b2); - } - HeapFree(GetProcessHeap(), 0, buffer); - SysFreeString(b); - - b = SysAllocStringByteLen("", 0); - len = SysStringLen(b); - ok(len == 0, "get %d\n", len); - len = SysStringByteLen(b); - ok(len == 0, "get %d\n", len); - - size = BSTR_UserSize(&umcb.Flags, 0, &b); - ok(size == 12, "size %ld\n", size); - - buffer = HeapAlloc(GetProcessHeap(), 0, size); - next = BSTR_UserMarshal(&umcb.Flags, buffer, &b); - ok(next == buffer + size, "got %p expect %p\n", next, buffer + size); - check_bstr(buffer, b); - - if (BSTR_UNMARSHAL_WORKS) - { - b2 = NULL; - next = BSTR_UserUnmarshal(&umcb.Flags, buffer, &b2); - ok(next == buffer + size, "got %p expect %p\n", next, buffer + size); - ok(b2 != NULL, "NULL LPSAFEARRAY didn't unmarshal\n"); - len = SysStringByteLen(b2); - ok(len == 0, "byte len %d\n", len); - BSTR_UserFree(&umcb.Flags, &b2); - } - HeapFree(GetProcessHeap(), 0, buffer); - SysFreeString(b); -} - -typedef struct -{ - const IUnknownVtbl *lpVtbl; - ULONG refs; -} HeapUnknown; - -static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv) -{ - if (IsEqualIID(riid, &IID_IUnknown)) - { - IUnknown_AddRef(iface); - *ppv = (LPVOID)iface; - return S_OK; - } - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI HeapUnknown_AddRef(IUnknown *iface) -{ - HeapUnknown *This = (HeapUnknown *)iface; - return InterlockedIncrement((LONG*)&This->refs); -} - -static ULONG WINAPI HeapUnknown_Release(IUnknown *iface) -{ - HeapUnknown *This = (HeapUnknown *)iface; - ULONG refs = InterlockedDecrement((LONG*)&This->refs); - if (!refs) HeapFree(GetProcessHeap(), 0, This); - return refs; -} - -static const IUnknownVtbl HeapUnknown_Vtbl = -{ - HeapUnknown_QueryInterface, - HeapUnknown_AddRef, - HeapUnknown_Release -}; - -static void check_variant_header(DWORD *wirev, VARIANT *v, unsigned long size) -{ - WORD *wp; - DWORD switch_is; - - ok(*wirev == (size + 7) >> 3, "wv[0] %08x, expected %08lx\n", *wirev, (size + 7) >> 3); - wirev++; - ok(*wirev == 0, "wv[1] %08x\n", *wirev); - wirev++; - wp = (WORD*)wirev; - ok(*wp == V_VT(v), "vt %04x expected %04x\n", *wp, V_VT(v)); - wp++; - ok(*wp == V_U2(v).wReserved1, "res1 %04x expected %04x\n", *wp, V_U2(v).wReserved1); - wp++; - ok(*wp == V_U2(v).wReserved2, "res2 %04x expected %04x\n", *wp, V_U2(v).wReserved2); - wp++; - ok(*wp == V_U2(v).wReserved3, "res3 %04x expected %04x\n", *wp, V_U2(v).wReserved3); - wp++; - wirev = (DWORD*)wp; - switch_is = V_VT(v); - if(switch_is & VT_ARRAY) - switch_is &= ~VT_TYPEMASK; - ok(*wirev == switch_is, "switch_is %08x expected %08x\n", *wirev, switch_is); -} - -static void test_marshal_VARIANT(void) -{ - VARIANT v, v2; - MIDL_STUB_MESSAGE stubMsg = { 0 }; - RPC_MESSAGE rpcMsg = { 0 }; - USER_MARSHAL_CB umcb = { 0 }; - unsigned char *buffer, *next; - ULONG ul; - short s; - double d; - DWORD *wirev; - BSTR b; - WCHAR str[] = {'m','a','r','s','h','a','l',' ','t','e','s','t',0}; - SAFEARRAYBOUND sab; - LPSAFEARRAY lpsa; - DECIMAL dec, dec2; - HeapUnknown *heap_unknown; - - stubMsg.RpcMsg = &rpcMsg; - - umcb.Flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION); - umcb.pStubMsg = &stubMsg; - umcb.pReserve = NULL; - umcb.Signature = USER_MARSHAL_CB_SIGNATURE; - umcb.CBType = USER_MARSHAL_CB_UNMARSHALL; - - /*** I1 ***/ - VariantInit(&v); - V_VT(&v) = VT_I1; - V_I1(&v) = 0x12; - - /* Variants have an alignment of 8 */ - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 1, &v); - ok(stubMsg.BufferLength == 29, "size %d\n", stubMsg.BufferLength); - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 21, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*(char*)wirev == V_I1(&v), "wv[5] %08x\n", *wirev); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(V_I1(&v) == V_I1(&v2), "got i1 %x expect %x\n", V_I1(&v), V_I1(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** I2 ***/ - VariantInit(&v); - V_VT(&v) = VT_I2; - V_I2(&v) = 0x1234; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 22, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*(short*)wirev == V_I2(&v), "wv[5] %08x\n", *wirev); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(V_I2(&v) == V_I2(&v2), "got i2 %x expect %x\n", V_I2(&v), V_I2(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** I2 BYREF ***/ - VariantInit(&v); - V_VT(&v) = VT_I2 | VT_BYREF; - s = 0x1234; - V_I2REF(&v) = &s; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 26, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 0x4, "wv[5] %08x\n", *wirev); - wirev++; - ok(*(short*)wirev == s, "wv[6] %08x\n", *wirev); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(*V_I2REF(&v) == *V_I2REF(&v2), "got i2 ref %x expect ui4 ref %x\n", *V_I2REF(&v), *V_I2REF(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** I4 ***/ - VariantInit(&v); - V_VT(&v) = VT_I4; - V_I4(&v) = 0x1234; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 24, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == V_I4(&v), "wv[5] %08x\n", *wirev); - - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(V_I4(&v) == V_I4(&v2), "got i4 %x expect %x\n", V_I4(&v), V_I4(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - - HeapFree(GetProcessHeap(), 0, buffer); - - /*** UI4 ***/ - VariantInit(&v); - V_VT(&v) = VT_UI4; - V_UI4(&v) = 0x1234; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 24, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 0x1234, "wv[5] %08x\n", *wirev); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(V_UI4(&v) == V_UI4(&v2), "got ui4 %x expect %x\n", V_UI4(&v), V_UI4(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - - HeapFree(GetProcessHeap(), 0, buffer); - - /*** UI4 BYREF ***/ - VariantInit(&v); - V_VT(&v) = VT_UI4 | VT_BYREF; - ul = 0x1234; - V_UI4REF(&v) = &ul; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 28, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 0x4, "wv[5] %08x\n", *wirev); - wirev++; - ok(*wirev == ul, "wv[6] %08x\n", *wirev); - - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(*V_UI4REF(&v) == *V_UI4REF(&v2), "got ui4 ref %x expect ui4 ref %x\n", *V_UI4REF(&v), *V_UI4REF(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** R4 ***/ - VariantInit(&v); - V_VT(&v) = VT_R4; - V_R8(&v) = 3.1415; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 24, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*(float*)wirev == V_R4(&v), "wv[5] %08x\n", *wirev); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(V_R4(&v) == V_R4(&v2), "got r4 %f expect %f\n", V_R4(&v), V_R4(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** R8 ***/ - VariantInit(&v); - V_VT(&v) = VT_R8; - V_R8(&v) = 3.1415; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 32, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - memset(buffer, 0xcc, stubMsg.BufferLength); - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 0xcccccccc, "wv[5] %08x\n", *wirev); /* pad */ - wirev++; - ok(*(double*)wirev == V_R8(&v), "wv[6] %08x, wv[7] %08x\n", *wirev, *(wirev+1)); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(V_R8(&v) == V_R8(&v2), "got r8 %f expect %f\n", V_R8(&v), V_R8(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** R8 BYREF ***/ - VariantInit(&v); - V_VT(&v) = VT_R8 | VT_BYREF; - d = 3.1415; - V_R8REF(&v) = &d; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 32, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 8, "wv[5] %08x\n", *wirev); - wirev++; - ok(*(double*)wirev == d, "wv[6] %08x wv[7] %08x\n", *wirev, *(wirev+1)); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(*V_R8REF(&v) == *V_R8REF(&v2), "got r8 ref %f expect %f\n", *V_R8REF(&v), *V_R8REF(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** VARIANT_BOOL ***/ - VariantInit(&v); - V_VT(&v) = VT_BOOL; - V_BOOL(&v) = 0x1234; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 22, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*(short*)wirev == V_BOOL(&v), "wv[5] %04x\n", *(WORD*)wirev); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(V_BOOL(&v) == V_BOOL(&v2), "got bool %x expect %x\n", V_BOOL(&v), V_BOOL(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** DECIMAL ***/ - VarDecFromI4(0x12345678, &dec); - VariantInit(&v); - V_DECIMAL(&v) = dec; - V_VT(&v) = VT_DECIMAL; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 40, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - memset(buffer, 0xcc, stubMsg.BufferLength); - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 0xcccccccc, "wirev[5] %08x\n", *wirev); /* pad */ - wirev++; - dec2 = dec; - dec2.wReserved = VT_DECIMAL; - ok(!memcmp(wirev, &dec2, sizeof(dec2)), "wirev[6] %08x wirev[7] %08x wirev[8] %08x wirev[9] %08x\n", - *wirev, *(wirev + 1), *(wirev + 2), *(wirev + 3)); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(!memcmp(&V_DECIMAL(&v), & V_DECIMAL(&v2), sizeof(DECIMAL)), "decimals differ\n"); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** DECIMAL BYREF ***/ - VariantInit(&v); - V_VT(&v) = VT_DECIMAL | VT_BYREF; - V_DECIMALREF(&v) = &dec; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 40, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 16, "wv[5] %08x\n", *wirev); - wirev++; - ok(!memcmp(wirev, &dec, sizeof(dec)), "wirev[6] %08x wirev[7] %08x wirev[8] %08x wirev[9] %08x\n", *wirev, *(wirev + 1), *(wirev + 2), *(wirev + 3)); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(!memcmp(V_DECIMALREF(&v), V_DECIMALREF(&v2), sizeof(DECIMAL)), "decimals differ\n"); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** EMPTY ***/ - VariantInit(&v); - V_VT(&v) = VT_EMPTY; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 20, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** NULL ***/ - VariantInit(&v); - V_VT(&v) = VT_NULL; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 20, "size %d\n", stubMsg.BufferLength); - - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** BSTR ***/ - b = SysAllocString(str); - VariantInit(&v); - V_VT(&v) = VT_BSTR; - V_BSTR(&v) = b; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 60, "size %d\n", stubMsg.BufferLength); - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev, "wv[5] %08x\n", *wirev); /* win2k: this is b. winxp: this is (char*)b + 1 */ - wirev++; - check_bstr(wirev, V_BSTR(&v)); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(SysStringByteLen(V_BSTR(&v)) == SysStringByteLen(V_BSTR(&v2)), "bstr string lens differ\n"); - ok(!memcmp(V_BSTR(&v), V_BSTR(&v2), SysStringByteLen(V_BSTR(&v))), "bstrs differ\n"); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** BSTR BYREF ***/ - VariantInit(&v); - V_VT(&v) = VT_BSTR | VT_BYREF; - V_BSTRREF(&v) = &b; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 64, "size %d\n", stubMsg.BufferLength); - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 0x4, "wv[5] %08x\n", *wirev); - wirev++; - ok(*wirev, "wv[6] %08x\n", *wirev); /* win2k: this is b. winxp: this is (char*)b + 1 */ - wirev++; - check_bstr(wirev, b); - if (VARIANT_UNMARSHAL_WORKS) - { - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(SysStringByteLen(*V_BSTRREF(&v)) == SysStringByteLen(*V_BSTRREF(&v2)), "bstr string lens differ\n"); - ok(!memcmp(*V_BSTRREF(&v), *V_BSTRREF(&v2), SysStringByteLen(*V_BSTRREF(&v))), "bstrs differ\n"); - - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - SysFreeString(b); - - /*** ARRAY ***/ - sab.lLbound = 5; - sab.cElements = 10; - - lpsa = SafeArrayCreate(VT_R8, 1, &sab); - *(DWORD *)lpsa->pvData = 0xcafebabe; - *((DWORD *)lpsa->pvData + 1) = 0xdeadbeef; - lpsa->cLocks = 7; - - VariantInit(&v); - V_VT(&v) = VT_UI4 | VT_ARRAY; - V_ARRAY(&v) = lpsa; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 152, "size %d\n", stubMsg.BufferLength); - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev, "wv[5] %08x\n", *wirev); /* win2k: this is lpsa. winxp: this is (char*)lpsa + 1 */ - wirev++; - check_safearray(wirev, lpsa); - if (VARIANT_UNMARSHAL_WORKS) - { - LONG bound, bound2; - VARTYPE vt, vt2; - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(SafeArrayGetDim(V_ARRAY(&v)) == SafeArrayGetDim(V_ARRAY(&v)), "array dims differ\n"); - SafeArrayGetLBound(V_ARRAY(&v), 1, &bound); - SafeArrayGetLBound(V_ARRAY(&v2), 1, &bound2); - ok(bound == bound2, "array lbounds differ\n"); - SafeArrayGetUBound(V_ARRAY(&v), 1, &bound); - SafeArrayGetUBound(V_ARRAY(&v2), 1, &bound2); - ok(bound == bound2, "array ubounds differ\n"); - SafeArrayGetVartype(V_ARRAY(&v), &vt); - SafeArrayGetVartype(V_ARRAY(&v2), &vt2); - ok(vt == vt2, "array vts differ %x %x\n", vt, vt2); - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** ARRAY BYREF ***/ - VariantInit(&v); - V_VT(&v) = VT_UI4 | VT_ARRAY | VT_BYREF; - V_ARRAYREF(&v) = &lpsa; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 152, "size %d\n", stubMsg.BufferLength); - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - ok(*wirev == 4, "wv[5] %08x\n", *wirev); - wirev++; - ok(*wirev, "wv[6] %08x\n", *wirev); /* win2k: this is lpsa. winxp: this is (char*)lpsa + 1 */ - wirev++; - check_safearray(wirev, lpsa); - if (VARIANT_UNMARSHAL_WORKS) - { - LONG bound, bound2; - VARTYPE vt, vt2; - VariantInit(&v2); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2)); - ok(SafeArrayGetDim(*V_ARRAYREF(&v)) == SafeArrayGetDim(*V_ARRAYREF(&v)), "array dims differ\n"); - SafeArrayGetLBound(*V_ARRAYREF(&v), 1, &bound); - SafeArrayGetLBound(*V_ARRAYREF(&v2), 1, &bound2); - ok(bound == bound2, "array lbounds differ\n"); - SafeArrayGetUBound(*V_ARRAYREF(&v), 1, &bound); - SafeArrayGetUBound(*V_ARRAYREF(&v2), 1, &bound2); - ok(bound == bound2, "array ubounds differ\n"); - SafeArrayGetVartype(*V_ARRAYREF(&v), &vt); - SafeArrayGetVartype(*V_ARRAYREF(&v2), &vt2); - ok(vt == vt2, "array vts differ %x %x\n", vt, vt2); - VARIANT_UserFree(&umcb.Flags, &v2); - } - HeapFree(GetProcessHeap(), 0, buffer); - SafeArrayDestroy(lpsa); - - /*** VARIANT BYREF ***/ - VariantInit(&v); - VariantInit(&v2); - V_VT(&v2) = VT_R8; - V_R8(&v2) = 3.1415; - V_VT(&v) = VT_VARIANT | VT_BYREF; - V_VARIANTREF(&v) = &v2; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength == 64, "size %d\n", stubMsg.BufferLength); - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - memset(buffer, 0xcc, stubMsg.BufferLength); - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, stubMsg.BufferLength); - wirev += 5; - - ok(*wirev == 16, "wv[5] %08x\n", *wirev); - wirev++; - ok(*wirev == ('U' | 's' << 8 | 'e' << 16 | 'r' << 24), "wv[6] %08x\n", *wirev); /* 'User' */ - wirev++; - ok(*wirev == 0xcccccccc, "wv[7] %08x\n", *wirev); /* pad */ - wirev++; - check_variant_header(wirev, &v2, stubMsg.BufferLength - 32); - wirev += 5; - ok(*wirev == 0xcccccccc, "wv[13] %08x\n", *wirev); /* pad for VT_R8 */ - wirev++; - ok(*(double*)wirev == V_R8(&v2), "wv[6] %08x wv[7] %08x\n", *wirev, *(wirev+1)); - if (VARIANT_UNMARSHAL_WORKS) - { - VARIANT v3; - VariantInit(&v3); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v3); - ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength); - ok(V_VT(&v) == V_VT(&v3), "got vt %d expect %d\n", V_VT(&v), V_VT(&v3)); - ok(V_VT(V_VARIANTREF(&v)) == V_VT(V_VARIANTREF(&v3)), "vts differ %x %x\n", - V_VT(V_VARIANTREF(&v)), V_VT(V_VARIANTREF(&v3))); - ok(V_R8(V_VARIANTREF(&v)) == V_R8(V_VARIANTREF(&v3)), "r8s differ\n"); - VARIANT_UserFree(&umcb.Flags, &v3); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** UNKNOWN ***/ - heap_unknown = HeapAlloc(GetProcessHeap(), 0, sizeof(*heap_unknown)); - heap_unknown->lpVtbl = &HeapUnknown_Vtbl; - heap_unknown->refs = 1; - VariantInit(&v); - VariantInit(&v2); - V_VT(&v) = VT_UNKNOWN; - V_UNKNOWN(&v) = (IUnknown *)heap_unknown; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength > 32, "size %d\n", stubMsg.BufferLength); - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - memset(buffer, 0xcc, stubMsg.BufferLength); - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, next - buffer); - wirev += 5; - - todo_wine - ok(*wirev == (DWORD_PTR)V_UNKNOWN(&v) /* Win9x */ || - *wirev == (DWORD_PTR)V_UNKNOWN(&v) + 1 /* NT */, "wv[5] %08x\n", *wirev); - wirev++; - todo_wine - ok(*wirev == next - buffer - 0x20, "wv[6] %08x\n", *wirev); - wirev++; - todo_wine - ok(*wirev == next - buffer - 0x20, "wv[7] %08x\n", *wirev); - wirev++; - todo_wine - ok(*wirev == 0x574f454d, "wv[8] %08x\n", *wirev); - if (VARIANT_UNMARSHAL_WORKS) - { - VARIANT v3; - VariantInit(&v3); - V_VT(&v3) = VT_UNKNOWN; - V_UNKNOWN(&v3) = (IUnknown *)heap_unknown; - IUnknown_AddRef(V_UNKNOWN(&v3)); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v3); - ok(V_VT(&v) == V_VT(&v3), "got vt %d expect %d\n", V_VT(&v), V_VT(&v3)); - ok(V_VT(V_VARIANTREF(&v)) == V_VT(V_VARIANTREF(&v3)), "vts differ %x %x\n", - V_VT(V_VARIANTREF(&v)), V_VT(V_VARIANTREF(&v3))); - ok(V_R8(V_VARIANTREF(&v)) == V_R8(V_VARIANTREF(&v3)), "r8s differ\n"); - VARIANT_UserFree(&umcb.Flags, &v3); - ok(heap_unknown->refs == 1, "%d refcounts of IUnknown leaked\n", heap_unknown->refs - 1); - IUnknown_Release((IUnknown *)heap_unknown); - } - HeapFree(GetProcessHeap(), 0, buffer); - - /*** UNKNOWN BYREF ***/ - heap_unknown = HeapAlloc(GetProcessHeap(), 0, sizeof(*heap_unknown)); - heap_unknown->lpVtbl = &HeapUnknown_Vtbl; - heap_unknown->refs = 1; - VariantInit(&v); - VariantInit(&v2); - V_VT(&v) = VT_UNKNOWN | VT_BYREF; - V_UNKNOWNREF(&v) = (IUnknown **)&heap_unknown; - - rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0, &v); - ok(stubMsg.BufferLength > 36, "size %d\n", stubMsg.BufferLength); - buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart = HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength); - stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength; - memset(buffer, 0xcc, stubMsg.BufferLength); - next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v); - wirev = (DWORD*)buffer; - check_variant_header(wirev, &v, next - buffer); - wirev += 5; - - ok(*wirev == 4, "wv[5] %08x\n", *wirev); - wirev++; - todo_wine - ok(*wirev == (DWORD_PTR)heap_unknown /* Win9x, Win2000 */ || - *wirev == (DWORD_PTR)heap_unknown + 1 /* XP */, "wv[6] %08x\n", *wirev); - wirev++; - todo_wine - ok(*wirev == next - buffer - 0x24, "wv[7] %08x\n", *wirev); - wirev++; - todo_wine - ok(*wirev == next - buffer - 0x24, "wv[8] %08x\n", *wirev); - wirev++; - todo_wine - ok(*wirev == 0x574f454d, "wv[9] %08x\n", *wirev); - if (VARIANT_UNMARSHAL_WORKS) - { - VARIANT v3; - VariantInit(&v3); - V_VT(&v3) = VT_UNKNOWN; - V_UNKNOWN(&v3) = (IUnknown *)heap_unknown; - IUnknown_AddRef(V_UNKNOWN(&v3)); - stubMsg.Buffer = buffer; - next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v3); - ok(V_VT(&v) == V_VT(&v3), "got vt %d expect %d\n", V_VT(&v), V_VT(&v3)); - ok(*V_UNKNOWNREF(&v) == *V_UNKNOWNREF(&v3), "got %p expect %p\n", *V_UNKNOWNREF(&v), *V_UNKNOWNREF(&v3)); - VARIANT_UserFree(&umcb.Flags, &v3); - ok(heap_unknown->refs == 1, "%d refcounts of IUnknown leaked\n", heap_unknown->refs - 1); - IUnknown_Release((IUnknown *)heap_unknown); - } - HeapFree(GetProcessHeap(), 0, buffer); -} - - -START_TEST(usrmarshal) -{ - CoInitialize(NULL); - - test_marshal_LPSAFEARRAY(); - test_marshal_BSTR(); - test_marshal_VARIANT(); - - CoUninitialize(); -} diff --git a/rostests/winetests/oleaut32/varformat.c b/rostests/winetests/oleaut32/varformat.c deleted file mode 100644 index f7c7c28bd8d..00000000000 --- a/rostests/winetests/oleaut32/varformat.c +++ /dev/null @@ -1,401 +0,0 @@ -/* - * VARFORMAT test program - * - * Copyright 1998 Jean-Claude Cote - * Copyright 2006 Google (Benjamin Arai) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "winsock.h" -#include "wine/test.h" -#include "winuser.h" -#include "wingdi.h" -#include "winnls.h" -#include "winerror.h" -#include "winnt.h" - -#include "wtypes.h" -#include "oleauto.h" - -static HMODULE hOleaut32; - -static HRESULT (WINAPI *pVarFormatNumber)(LPVARIANT,int,int,int,int,ULONG,BSTR*); -static HRESULT (WINAPI *pVarFormat)(LPVARIANT,LPOLESTR,int,int,ULONG,BSTR*); - -/* Have I8/UI8 data type? */ -#define HAVE_OLEAUT32_I8 HAVE_FUNC(VarI8FromI1) - -/* Is a given function exported from oleaut32? */ -#define HAVE_FUNC(func) ((void*)GetProcAddress(hOleaut32, #func) != NULL) - -/* Get a conversion function ptr, return if function not available */ -#define CHECKPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func); \ - if (!p##func) { trace("function " # func " not available, not testing it\n"); return; } - -static inline int strcmpW( const WCHAR *str1, const WCHAR *str2 ) -{ - while (*str1 && (*str1 == *str2)) { str1++; str2++; } - return *str1 - *str2; -} - -#define FMT_NUMBER(vt,val) \ - VariantInit(&v); V_VT(&v) = vt; val(&v) = 1; \ - hres = pVarFormatNumber(&v,2,0,0,0,0,&str); \ - ok(hres == S_OK, "VarFormatNumber (vt %d): returned %8x\n", vt, hres); \ - if (hres == S_OK) \ - ok(str && strcmpW(str,szResult1) == 0, \ - "VarFormatNumber (vt %d): string different\n", vt) - -static void test_VarFormatNumber(void) -{ - static const WCHAR szSrc1[] = { '1','\0' }; - static const WCHAR szResult1[] = { '1','.','0','0','\0' }; - static const WCHAR szSrc2[] = { '-','1','\0' }; - static const WCHAR szResult2[] = { '(','1','.','0','0',')','\0' }; - char buff[8]; - HRESULT hres; - VARIANT v; - BSTR str = NULL; - - CHECKPTR(VarFormatNumber); - - GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, buff, sizeof(buff)/sizeof(char)); - if (buff[0] != '.' || buff[1]) - { - skip("Skipping VarFormatNumber tests as decimal separator is '%s'\n", buff); - return; - } - - FMT_NUMBER(VT_I1, V_I1); - FMT_NUMBER(VT_UI1, V_UI1); - FMT_NUMBER(VT_I2, V_I2); - FMT_NUMBER(VT_UI2, V_UI2); - FMT_NUMBER(VT_I4, V_I4); - FMT_NUMBER(VT_UI4, V_UI4); - if (HAVE_OLEAUT32_I8) - { - FMT_NUMBER(VT_I8, V_I8); - FMT_NUMBER(VT_UI8, V_UI8); - } - FMT_NUMBER(VT_R4, V_R4); - FMT_NUMBER(VT_R8, V_R8); - FMT_NUMBER(VT_BOOL, V_BOOL); - - V_VT(&v) = VT_BSTR; - V_BSTR(&v) = SysAllocString(szSrc1); - - hres = pVarFormatNumber(&v,2,0,0,0,0,&str); - ok(hres == S_OK, "VarFormatNumber (bstr): returned %8x\n", hres); - if (hres == S_OK) - ok(str && strcmpW(str, szResult1) == 0, "VarFormatNumber (bstr): string different\n"); - SysFreeString(V_BSTR(&v)); - SysFreeString(str); - - V_BSTR(&v) = SysAllocString(szSrc2); - hres = pVarFormatNumber(&v,2,0,-1,0,0,&str); - ok(hres == S_OK, "VarFormatNumber (bstr): returned %8x\n", hres); - if (hres == S_OK) - ok(str && strcmpW(str, szResult2) == 0, "VarFormatNumber (-bstr): string different\n"); - SysFreeString(V_BSTR(&v)); - SysFreeString(str); -} - -#define SIGNED_VTBITS (VTBIT_I1|VTBIT_I2|VTBIT_I4|VTBIT_I8|VTBIT_R4|VTBIT_R8) - -static const char *szVarFmtFail = "VT %d|0x%04x Format %s: expected 0x%08x, '%s', got 0x%08x, '%s'\n"; -#define VARFMT(vt,v,val,fmt,ret,str) do { \ - if (out) SysFreeString(out); out = NULL; \ - V_VT(&in) = (vt); v(&in) = val; \ - if (fmt) MultiByteToWideChar(CP_ACP, 0, fmt, -1, buffW, sizeof(buffW)/sizeof(WCHAR)); \ - hres = pVarFormat(&in,fmt ? buffW : NULL,fd,fw,flags,&out); \ - if (SUCCEEDED(hres)) WideCharToMultiByte(CP_ACP, 0, out, -1, buff, sizeof(buff),0,0); \ - else buff[0] = '\0'; \ - ok(hres == ret && (FAILED(ret) || !strcmp(buff, str)), \ - szVarFmtFail, \ - (vt)&VT_TYPEMASK,(vt)&~VT_TYPEMASK,fmt?fmt:"",ret,str,hres,buff); \ - } while(0) - -typedef struct tagFMTRES -{ - LPCSTR fmt; - LPCSTR one_res; - LPCSTR zero_res; -} FMTRES; - -static const FMTRES VarFormat_results[] = -{ - { NULL, "1", "0" }, - { "", "1", "0" }, - { "General Number", "1", "0" }, - { "Percent", "100.00%", "0.00%" }, - { "Standard", "1.00", "0.00" }, - { "Scientific","1.00E+00", "0.00E+00" }, - { "True/False", "True", "False" }, - { "On/Off", "On", "Off" }, - { "Yes/No", "Yes", "No" }, - { "#", "1", "" }, - { "##", "1", "" }, - { "#.#", "1.", "." }, - { "0", "1", "0" }, - { "00", "01", "00" }, - { "0.0", "1.0", "0.0" }, - { "00\\c\\o\\p\\y", "01copy","00copy" }, - { "\"pos\";\"neg\"", "pos", "pos" }, - { "\"pos\";\"neg\";\"zero\"","pos", "zero" } -}; - -typedef struct tagFMTDATERES -{ - DATE val; - LPCSTR fmt; - LPCSTR res; -} FMTDATERES; - -static const FMTDATERES VarFormat_date_results[] = -{ - { 0.0, "w", "7" }, - { 0.0, "w", "6" }, - { 0.0, "w", "5" }, - { 0.0, "w", "4" }, - { 0.0, "w", "3" }, - { 0.0, "w", "2" }, - { 0.0, "w", "1" }, /* First 7 entries must remain in this order! */ - { 2.525, "am/pm", "pm" }, - { 2.525, "AM/PM", "PM" }, - { 2.525, "A/P", "P" }, - { 2.525, "a/p", "p" }, - { 2.525, "q", "1" }, - { 2.525, "d", "1" }, - { 2.525, "dd", "01" }, - { 2.525, "ddd", "Mon" }, - { 2.525, "dddd", "Monday" }, - { 2.525, "mmm", "Jan" }, - { 2.525, "mmmm", "January" }, - { 2.525, "y", "1" }, - { 2.525, "yy", "00" }, - { 2.525, "yyy", "001" }, - { 2.525, "yyyy", "1900" }, - { 2.525, "dd mm yyyy hh:mm:ss", "01 01 1900 12:36:00" }, - { 2.525, "dd mm yyyy mm", "01 01 1900 01" }, - { 2.525, "dd mm yyyy :mm", "01 01 1900 :01" }, - { 2.525, "dd mm yyyy hh:mm", "01 01 1900 12:36" }, - { 2.525, "mm mm", "01 01" }, - { 2.525, "mm :mm:ss", "01 :01:00" }, - { 2.525, "mm :ss:mm", "01 :00:01" }, - { 2.525, "hh:mm :ss:mm", "12:36 :00:01" }, - { 2.525, "hh:dd :mm:mm", "12:01 :01:01" }, - { 2.525, "dd:hh :mm:mm", "01:12 :36:01" }, - { 2.525, "hh :mm:mm", "12 :36:01" }, - { 2.525, "dd :mm:mm", "01 :01:01" }, - { 2.525, "dd :mm:nn", "01 :01:36" }, - { 2.725, "hh:nn:ss A/P", "05:24:00 P" } -}; - -#define VNUMFMT(vt,v) \ - for (i = 0; i < sizeof(VarFormat_results)/sizeof(FMTRES); i++) \ - { \ - VARFMT(vt,v,1,VarFormat_results[i].fmt,S_OK,VarFormat_results[i].one_res); \ - VARFMT(vt,v,0,VarFormat_results[i].fmt,S_OK,VarFormat_results[i].zero_res); \ - } \ - if ((1 << vt) & SIGNED_VTBITS) \ - { \ - VARFMT(vt,v,-1,"\"pos\";\"neg\"",S_OK,"neg"); \ - VARFMT(vt,v,-1,"\"pos\";\"neg\";\"zero\"",S_OK,"neg"); \ - } - -static void test_VarFormat(void) -{ - static const WCHAR szTesting[] = { 't','e','s','t','i','n','g','\0' }; - size_t i; - WCHAR buffW[256]; - char buff[256]; - VARIANT in; - VARIANT_BOOL bTrue = VARIANT_TRUE, bFalse = VARIANT_FALSE; - int fd = 0, fw = 0; - ULONG flags = 0; - BSTR bstrin, out = NULL; - HRESULT hres; - - CHECKPTR(VarFormat); - - if (PRIMARYLANGID(LANGIDFROMLCID(GetUserDefaultLCID())) != LANG_ENGLISH) - { - skip("Skipping VarFormat tests for non english language\n"); - return; - } - GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, buff, sizeof(buff)/sizeof(char)); - if (buff[0] != '.' || buff[1]) - { - skip("Skipping VarFormat tests as decimal separator is '%s'\n", buff); - return; - } - GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_IDIGITS, buff, sizeof(buff)/sizeof(char)); - if (buff[0] != '2' || buff[1]) - { - skip("Skipping VarFormat tests as decimal places is '%s'\n", buff); - return; - } - - VARFMT(VT_BOOL,V_BOOL,VARIANT_TRUE,"True/False",S_OK,"True"); - VARFMT(VT_BOOL,V_BOOL,VARIANT_FALSE,"True/False",S_OK,"False"); - - VNUMFMT(VT_I1,V_I1); - VNUMFMT(VT_I2,V_I2); - VNUMFMT(VT_I4,V_I4); - if (HAVE_OLEAUT32_I8) - { - VNUMFMT(VT_I8,V_I8); - } - VNUMFMT(VT_INT,V_INT); - VNUMFMT(VT_UI1,V_UI1); - VNUMFMT(VT_UI2,V_UI2); - VNUMFMT(VT_UI4,V_UI4); - if (HAVE_OLEAUT32_I8) - { - VNUMFMT(VT_UI8,V_UI8); - } - VNUMFMT(VT_UINT,V_UINT); - VNUMFMT(VT_R4,V_R4); - VNUMFMT(VT_R8,V_R8); - - /* Reference types are dereferenced */ - VARFMT(VT_BOOL|VT_BYREF,V_BOOLREF,&bTrue,"True/False",S_OK,"True"); - VARFMT(VT_BOOL|VT_BYREF,V_BOOLREF,&bFalse,"True/False",S_OK,"False"); - - /* Dates */ - for (i = 0; i < sizeof(VarFormat_date_results)/sizeof(FMTDATERES); i++) - { - if (i < 7) - fd = i + 1; /* Test first day */ - else - fd = 0; - VARFMT(VT_DATE,V_DATE,VarFormat_date_results[i].val, - VarFormat_date_results[i].fmt,S_OK, - VarFormat_date_results[i].res); - } - - /* Strings */ - bstrin = SysAllocString(szTesting); - VARFMT(VT_BSTR,V_BSTR,bstrin,"",S_OK,"testing"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"@",S_OK,"testing"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"&",S_OK,"testing"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"\\x@\\x@",S_OK,"xtxesting"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"\\x&\\x&",S_OK,"xtxesting"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"@\\x",S_OK,"txesting"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"@@@@@@@@",S_OK," testing"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"@\\x@@@@@@@",S_OK," xtesting"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"&&&&&&&&",S_OK,"testing"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"!&&&&&&&",S_OK,"testing"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"&&&&&&&!",S_OK,"testing"); - VARFMT(VT_BSTR,V_BSTR,bstrin,">&&",S_OK,"TESTING"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"<&&",S_OK,"testing"); - VARFMT(VT_BSTR,V_BSTR,bstrin,"<&>&",S_OK,"testing"); - SysFreeString(bstrin); - /* Numeric values are converted to strings then output */ - VARFMT(VT_I1,V_I1,1,"<&>&",S_OK,"1"); - - /* Number formats */ - VARFMT(VT_I4,V_I4,1,"#00000000",S_OK,"00000001"); - VARFMT(VT_I4,V_I4,1,"000###",S_OK,"000001"); - VARFMT(VT_I4,V_I4,1,"#00##00#0",S_OK,"00000001"); - VARFMT(VT_I4,V_I4,1,"1#####0000",S_OK,"10001"); - todo_wine { - VARFMT(VT_I4,V_I4,100000,"#,###,###,###",S_OK,"100,000"); - } - VARFMT(VT_R8,V_R8,1.23456789,"0#.0#0#0#0#0",S_OK,"01.234567890"); - VARFMT(VT_R8,V_R8,1.2,"0#.0#0#0#0#0",S_OK,"01.200000000"); - VARFMT(VT_R8,V_R8,9.87654321,"#0.#0#0#0#0#",S_OK,"9.87654321"); - VARFMT(VT_R8,V_R8,9.8,"#0.#0#0#0#0#",S_OK,"9.80000000"); - VARFMT(VT_R8,V_R8,0.00000008,"#0.#0#0#0#0#0",S_OK,"0.0000000800"); - VARFMT(VT_R8,V_R8,0.00010705,"#0.##########",S_OK,"0.00010705"); - VARFMT(VT_I4,V_I4,17,"#0",S_OK,"17"); - VARFMT(VT_I4,V_I4,4711,"#0",S_OK,"4711"); - VARFMT(VT_I4,V_I4,17,"#00",S_OK,"17"); - VARFMT(VT_I4,V_I4,100,"0##",S_OK,"100"); - VARFMT(VT_I4,V_I4,17,"#000",S_OK,"017"); - VARFMT(VT_I4,V_I4,17,"#0.00",S_OK,"17.00"); - VARFMT(VT_I4,V_I4,17,"#0000.00",S_OK,"0017.00"); - VARFMT(VT_I4,V_I4,17,"#.00",S_OK,"17.00"); - VARFMT(VT_R8,V_R8,1.7,"#.00",S_OK,"1.70"); - VARFMT(VT_R8,V_R8,.17,"#.00",S_OK,".17"); - VARFMT(VT_I4,V_I4,17,"#3",S_OK,"173"); - VARFMT(VT_I4,V_I4,17,"#33",S_OK,"1733"); - VARFMT(VT_I4,V_I4,17,"#3.33",S_OK,"173.33"); - VARFMT(VT_I4,V_I4,17,"#3333.33",S_OK,"173333.33"); - VARFMT(VT_I4,V_I4,17,"#.33",S_OK,"17.33"); - VARFMT(VT_R8,V_R8,.17,"#.33",S_OK,".33"); - VARFMT(VT_R8,V_R8,1.7,"0.0000E-000",S_OK,"1.7000E000"); - VARFMT(VT_R8,V_R8,1.7,"0.0000e-1",S_OK,"1.7000e01"); - VARFMT(VT_R8,V_R8,86.936849,"#0.000000000000e-000",S_OK,"86.936849000000e000"); - VARFMT(VT_R8,V_R8,1.7,"#0",S_OK,"2"); - VARFMT(VT_R8,V_R8,1.7,"#.33",S_OK,"2.33"); - VARFMT(VT_R8,V_R8,1.7,"#3",S_OK,"23"); - VARFMT(VT_R8,V_R8,1.73245,"0.0000E+000",S_OK,"1.7325E+000"); - VARFMT(VT_R8,V_R8,9.9999999,"#0.000000",S_OK,"10.000000"); - VARFMT(VT_R8,V_R8,1.7,"0.0000e+0#",S_OK,"1.7000e+0"); - VARFMT(VT_R8,V_R8,100.0001e+0,"0.0000E+0",S_OK,"1.0000E+2"); - VARFMT(VT_R8,V_R8,1000001,"0.0000e+1",S_OK,"1.0000e+61"); - VARFMT(VT_R8,V_R8,100.0001e+25,"0.0000e+0",S_OK,"1.0000e+27"); - VARFMT(VT_R8,V_R8,450.0001e+43,"#000.0000e+0",S_OK,"4500.0010e+42"); - VARFMT(VT_R8,V_R8,0.0001e-11,"##00.0000e-0",S_OK,"1000.0000e-18"); - VARFMT(VT_R8,V_R8,0.0317e-11,"0000.0000e-0",S_OK,"3170.0000e-16"); - VARFMT(VT_R8,V_R8,0.0021e-11,"00##.0000e-0",S_OK,"2100.0000e-17"); - VARFMT(VT_R8,V_R8,1.0001e-27,"##00.0000e-0",S_OK,"1000.1000e-30"); - VARFMT(VT_R8,V_R8,47.11,".0000E+0",S_OK,".4711E+2"); - VARFMT(VT_R8,V_R8,3.0401e-13,"#####.####e-0%",S_OK,"30401.e-15%"); - - - /* 'out' is not cleared */ - out = (BSTR)0x1; - pVarFormat(&in,NULL,fd,fw,flags,&out); /* Would crash if out is cleared */ - out = NULL; - - /* VT_NULL */ - V_VT(&in) = VT_NULL; - hres = pVarFormat(&in,NULL,fd,fw,0,&out); - ok(hres == S_OK, "VarFormat failed with 0x%08x\n", hres); - ok(out == NULL, "expected NULL formatted string\n"); - - /* Invalid args */ - hres = pVarFormat(&in,NULL,fd,fw,flags,NULL); - ok(hres == E_INVALIDARG, "Null out: expected E_INVALIDARG, got 0x%08x\n", hres); - hres = pVarFormat(NULL,NULL,fd,fw,flags,&out); - ok(hres == E_INVALIDARG, "Null in: expected E_INVALIDARG, got 0x%08x\n", hres); - fd = -1; - VARFMT(VT_BOOL,V_BOOL,VARIANT_TRUE,"",E_INVALIDARG,""); - fd = 8; - VARFMT(VT_BOOL,V_BOOL,VARIANT_TRUE,"",E_INVALIDARG,""); - fd = 0; fw = -1; - VARFMT(VT_BOOL,V_BOOL,VARIANT_TRUE,"",E_INVALIDARG,""); - fw = 4; - VARFMT(VT_BOOL,V_BOOL,VARIANT_TRUE,"",E_INVALIDARG,""); -} - -START_TEST(varformat) -{ - hOleaut32 = GetModuleHandleA("oleaut32.dll"); - - test_VarFormatNumber(); - test_VarFormat(); -} diff --git a/rostests/winetests/oleaut32/vartest.c b/rostests/winetests/oleaut32/vartest.c deleted file mode 100644 index fd95361b4e8..00000000000 --- a/rostests/winetests/oleaut32/vartest.c +++ /dev/null @@ -1,8442 +0,0 @@ -/* - * VARIANT test program - * - * Copyright 1998 Jean-Claude Cote - * Copyright 2006 Google (Benjamin Arai) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "winsock.h" -#include "wine/test.h" -#include "winuser.h" -#include "wingdi.h" -#include "winnls.h" -#include "winerror.h" -#include "winnt.h" - -#include "wtypes.h" -#include "oleauto.h" - -static HMODULE hOleaut32; - -static HRESULT (WINAPI *pVarUdateFromDate)(DATE,ULONG,UDATE*); -static HRESULT (WINAPI *pVarDateFromUdate)(UDATE*,ULONG,DATE*); -static INT (WINAPI *pSystemTimeToVariantTime)(LPSYSTEMTIME,double*); -static INT (WINAPI *pVariantTimeToSystemTime)(double,LPSYSTEMTIME); -static INT (WINAPI *pDosDateTimeToVariantTime)(USHORT,USHORT,double*); -static INT (WINAPI *pVariantTimeToDosDateTime)(double,USHORT*,USHORT *); - -/* Get a conversion function ptr, return if function not available */ -#define CHECKPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func); \ - if (!p##func) { trace("function " # func " not available, not testing it\n"); return; } - -/* Have IRecordInfo data type? */ -static int HAVE_OLEAUT32_RECORD = 0; -/* Have I8/UI8 data type? */ -static int HAVE_OLEAUT32_I8 = 0; -/* Is this an ancient version with support for only I2/I4/R4/R8/DATE? */ -static int IS_ANCIENT = 0; - -/* When comparing floating point values we cannot expect an exact match - * because the rounding errors depend on the exact algorithm. - */ -#define EQ_DOUBLE(a,b) (fabs((a)-(b)) / (1.0+fabs(a)+fabs(b)) < 1e-14) -#define EQ_FLOAT(a,b) (fabs((a)-(b)) / (1.0+fabs(a)+fabs(b)) < 1e-7) - -#define SKIPTESTS(a) if((a > VT_CLSID+10) && (a < VT_BSTR_BLOB-10)) continue - -/* Allow our test macros to work for VT_NULL and VT_EMPTY too */ -#define V_EMPTY(v) V_I4(v) -#define V_NULL(v) V_I4(v) - -/* Size constraints for overflow tests */ -#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 FLT_MAX -#define R4_MIN FLT_MIN -#define R8_MAX DBL_MAX -#define R8_MIN DBL_MIN - -static void init(void) -{ - hOleaut32 = GetModuleHandle("oleaut32.dll"); - - /* Is a given function exported from oleaut32? */ -#define HAVE_FUNC(func) ((void*)GetProcAddress(hOleaut32, #func) != NULL) - - HAVE_OLEAUT32_I8 = HAVE_FUNC(VarI8FromI1); - if (!HAVE_OLEAUT32_I8) - skip("No support for I8 and UI8 data types\n"); - - HAVE_OLEAUT32_RECORD = HAVE_FUNC(SafeArraySetRecordInfo); - IS_ANCIENT = (!HAVE_FUNC(VarI1FromI2)); - -#undef HAVE_FUNC -} - -/* Functions to set a DECIMAL */ -static void setdec(DECIMAL* dec, BYTE scl, BYTE sgn, ULONG hi32, ULONG64 lo64) -{ - S(U(*dec)).scale = scl; - S(U(*dec)).sign = sgn; - dec->Hi32 = hi32; - U1(*dec).Lo64 = lo64; -} - -static void setdec64(DECIMAL* dec, BYTE scl, BYTE sgn, ULONG hi32, ULONG mid32, ULONG lo32) -{ - S(U(*dec)).scale = scl; - S(U(*dec)).sign = sgn; - dec->Hi32 = hi32; - S1(U1(*dec)).Mid32 = mid32; - S1(U1(*dec)).Lo32 = lo32; -} - -static inline int strcmpW( const WCHAR *str1, const WCHAR *str2 ) -{ - while (*str1 && (*str1 == *str2)) { str1++; str2++; } - return *str1 - *str2; -} - -/* return the string text of a given variant type */ -static char vtstr_buffer[16][256]; -static int vtstr_current=0; -static const char *vtstr(int x) -{ - switch(x) { -#define CASE(vt) case VT_##vt: return #vt - CASE(EMPTY); - CASE(NULL); - CASE(I2); - CASE(I4); - CASE(R4); - CASE(R8); - CASE(CY); - CASE(DATE); - CASE(BSTR); - CASE(DISPATCH); - CASE(ERROR); - CASE(BOOL); - CASE(VARIANT); - CASE(UNKNOWN); - CASE(DECIMAL); - CASE(I1); - CASE(UI1); - CASE(UI2); - CASE(UI4); - CASE(I8); - CASE(UI8); - CASE(INT); - CASE(UINT); - CASE(VOID); - CASE(HRESULT); - CASE(PTR); - CASE(SAFEARRAY); - CASE(CARRAY); - CASE(USERDEFINED); - CASE(LPSTR); - CASE(LPWSTR); - CASE(RECORD); - CASE(INT_PTR); - CASE(UINT_PTR); - CASE(FILETIME); - CASE(BLOB); - CASE(STREAM); - CASE(STORAGE); - CASE(STREAMED_OBJECT); - CASE(STORED_OBJECT); - CASE(BLOB_OBJECT); - CASE(CF); - CASE(CLSID); - CASE(VERSIONED_STREAM); - CASE(VECTOR); - CASE(ARRAY); - CASE(BYREF); - CASE(RESERVED); - CASE(ILLEGAL); -#undef CASE - - case 0xfff: - return "VT_BSTR_BLOB/VT_ILLEGALMASKED/VT_TYPEMASK"; - - default: - vtstr_current %= sizeof(vtstr_buffer)/sizeof(*vtstr_buffer); - sprintf(vtstr_buffer[vtstr_current], "unknown variant type %d", x); - return vtstr_buffer[vtstr_current++]; - } -} - -static const char *variantstr( const VARIANT *var ) -{ - vtstr_current %= sizeof(vtstr_buffer)/sizeof(*vtstr_buffer); - switch(V_VT(var)) - { - case VT_I1: - sprintf( vtstr_buffer[vtstr_current], "VT_I1(%d)", V_I1(var) ); break; - case VT_I2: - sprintf( vtstr_buffer[vtstr_current], "VT_I2(%d)", V_I2(var) ); break; - case VT_I4: - sprintf( vtstr_buffer[vtstr_current], "VT_I4(%d)", V_I4(var) ); break; - case VT_INT: - sprintf( vtstr_buffer[vtstr_current], "VT_INT(%d)", V_INT(var) ); break; - case VT_I8: - sprintf( vtstr_buffer[vtstr_current], "VT_I8(%x%08x)", (UINT)(V_I8(var) >> 32), (UINT)V_I8(var) ); break; - case VT_UI8: - sprintf( vtstr_buffer[vtstr_current], "VT_UI8(%x%08x)", (UINT)(V_UI8(var) >> 32), (UINT)V_UI8(var) ); break; - case VT_R4: - sprintf( vtstr_buffer[vtstr_current], "VT_R4(%g)", V_R4(var) ); break; - case VT_R8: - sprintf( vtstr_buffer[vtstr_current], "VT_R8(%g)", V_R8(var) ); break; - case VT_UI1: - sprintf( vtstr_buffer[vtstr_current], "VT_UI1(%u)", V_UI1(var) ); break; - case VT_UI2: - sprintf( vtstr_buffer[vtstr_current], "VT_UI2(%u)", V_UI2(var) ); break; - case VT_UI4: - sprintf( vtstr_buffer[vtstr_current], "VT_UI4(%u)", V_UI4(var) ); break; - case VT_UINT: - sprintf( vtstr_buffer[vtstr_current], "VT_UINT(%d)", V_UINT(var) ); break; - case VT_CY: - sprintf( vtstr_buffer[vtstr_current], "VT_CY(%x%08x)", S(V_CY(var)).Hi, S(V_CY(var)).Lo ); break; - case VT_DATE: - sprintf( vtstr_buffer[vtstr_current], "VT_DATE(%g)", V_DATE(var) ); break; - default: - return vtstr(V_VT(var)); - } - return vtstr_buffer[vtstr_current++]; -} - -static BOOL is_expected_variant( const VARIANT *result, const VARIANT *expected ) -{ - if (V_VT(result) != V_VT(expected)) return FALSE; - switch(V_VT(expected)) - { - case VT_EMPTY: - case VT_NULL: - return TRUE; - -#define CASE(vt) case VT_##vt: return (V_##vt(result) == V_##vt(expected)) - CASE(BOOL); - CASE(I1); - CASE(UI1); - CASE(I2); - CASE(UI2); - CASE(I4); - CASE(UI4); - CASE(I8); - CASE(UI8); - CASE(INT); - CASE(UINT); -#undef CASE - - case VT_DATE: - return EQ_FLOAT(V_DATE(result), V_DATE(expected)); - case VT_R4: - return EQ_FLOAT(V_R4(result), V_R4(expected)); - case VT_R8: - return EQ_FLOAT(V_R8(result), V_R8(expected)); - case VT_CY: - return (V_CY(result).int64 == V_CY(expected).int64); - case VT_BSTR: - return !lstrcmpW( V_BSTR(result), V_BSTR(expected) ); - case VT_DECIMAL: - return !memcmp( &V_DECIMAL(result), &V_DECIMAL(expected), sizeof(DECIMAL) ); - default: - ok(0, "unhandled variant type %s\n",vtstr(V_VT(expected))); - return 0; - } -} - -static void test_var_call1( int line, HRESULT (WINAPI *func)(LPVARIANT,LPVARIANT), - VARIANT *arg, VARIANT *expected ) -{ - VARIANT old_arg = *arg; - VARIANT result; - HRESULT hres; - - memset( &result, 0, sizeof(result) ); - hres = func( arg, &result ); - ok_(__FILE__,line)( hres == S_OK, "wrong result %x\n", hres ); - if (hres == S_OK) - ok_(__FILE__,line)( is_expected_variant( &result, expected ), - "got %s expected %s\n", variantstr(&result), variantstr(expected) ); - ok_(__FILE__,line)( is_expected_variant( arg, &old_arg ), "Modified argument %s / %s\n", - variantstr(&old_arg), variantstr(arg)); -} - -static void test_var_call2( int line, HRESULT (WINAPI *func)(LPVARIANT,LPVARIANT,LPVARIANT), - VARIANT *left, VARIANT *right, VARIANT *expected ) -{ - VARIANT old_left = *left, old_right = *right; - VARIANT result; - HRESULT hres; - - memset( &result, 0, sizeof(result) ); - hres = func( left, right, &result ); - ok_(__FILE__,line)( hres == S_OK, "wrong result %x\n", hres ); - if (hres == S_OK) - ok_(__FILE__,line)( is_expected_variant( &result, expected ), - "got %s expected %s\n", variantstr(&result), variantstr(expected) ); - ok_(__FILE__,line)( is_expected_variant( left, &old_left ), "Modified left argument %s / %s\n", - variantstr(&old_left), variantstr(left)); - ok_(__FILE__,line)( is_expected_variant( right, &old_right ), "Modified right argument %s / %s\n", - variantstr(&old_right), variantstr(right)); -} - - -static void test_VariantInit(void) -{ - VARIANTARG v1, v2; - - /* Test that VariantInit() only sets the type */ - memset(&v1, -1, sizeof(v1)); - v2 = v1; - V_VT(&v2) = VT_EMPTY; - VariantInit(&v1); - ok(!memcmp(&v1, &v2, sizeof(v1)), "VariantInit() set extra fields\n"); -} - -/* All possible combinations of extra V_VT() flags */ -static const VARTYPE ExtraFlags[16] = -{ - 0, - VT_VECTOR, - VT_ARRAY, - VT_BYREF, - VT_RESERVED, - VT_VECTOR|VT_ARRAY, - VT_VECTOR|VT_BYREF, - VT_VECTOR|VT_RESERVED, - VT_VECTOR|VT_ARRAY|VT_BYREF, - VT_VECTOR|VT_ARRAY|VT_RESERVED, - VT_VECTOR|VT_BYREF|VT_RESERVED, - VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED, - VT_ARRAY|VT_BYREF, - VT_ARRAY|VT_RESERVED, - VT_ARRAY|VT_BYREF|VT_RESERVED, - VT_BYREF|VT_RESERVED, -}; - -/* Determine if a vt is valid for VariantClear() */ -static int IsValidVariantClearVT(VARTYPE vt, VARTYPE extraFlags) -{ - int ret = 0; - - /* Only the following flags/types are valid */ - if ((vt <= VT_LPWSTR || vt == VT_RECORD || vt == VT_CLSID) && - vt != (VARTYPE)15 && - (vt < (VARTYPE)24 || vt > (VARTYPE)31) && - (!(extraFlags & (VT_BYREF|VT_ARRAY)) || vt > VT_NULL) && - (extraFlags == 0 || extraFlags == VT_BYREF || extraFlags == VT_ARRAY || - extraFlags == (VT_ARRAY|VT_BYREF))) - ret = 1; /* ok */ - - if ((vt == VT_RECORD && !HAVE_OLEAUT32_RECORD) || - ((vt == VT_I8 || vt == VT_UI8) && !HAVE_OLEAUT32_I8)) - ret = 0; /* Old versions of oleaut32 */ - return ret; -} - -typedef struct -{ - const IUnknownVtbl *lpVtbl; - LONG ref; - LONG events; -} test_VariantClearImpl; - -static HRESULT WINAPI VC_QueryInterface(LPUNKNOWN iface,REFIID riid,LPVOID *ppobj) -{ - test_VariantClearImpl *This = (test_VariantClearImpl *)iface; - This->events |= 0x1; - return E_NOINTERFACE; -} - -static ULONG WINAPI VC_AddRef(LPUNKNOWN iface) { - test_VariantClearImpl *This = (test_VariantClearImpl *)iface; - This->events |= 0x2; - return InterlockedIncrement(&This->ref); -} - -static ULONG WINAPI VC_Release(LPUNKNOWN iface) { - test_VariantClearImpl *This = (test_VariantClearImpl *)iface; - /* static class, won't be freed */ - This->events |= 0x4; - return InterlockedDecrement(&This->ref); -} - -static const IUnknownVtbl test_VariantClear_vtbl = { - VC_QueryInterface, - VC_AddRef, - VC_Release, -}; - -static test_VariantClearImpl test_myVariantClearImpl = {&test_VariantClear_vtbl, 1, 0}; - -static void test_VariantClear(void) -{ - HRESULT hres; - VARIANTARG v; - VARIANT v2; - size_t i; - LONG i4; - IUnknown *punk; - - /* Crashes: Native does not test input for NULL, so neither does Wine */ - if (0) hres = VariantClear(NULL); - - /* Only the type field is set, to VT_EMPTY */ - V_VT(&v) = VT_UI4; - V_UI4(&v) = ~0u; - hres = VariantClear(&v); - ok((hres == S_OK && V_VT(&v) == VT_EMPTY) || - (IS_ANCIENT && hres == DISP_E_BADVARTYPE && V_VT(&v) == VT_UI4), - "VariantClear: Type set to %d, res %08x\n", V_VT(&v), hres); - ok(V_UI4(&v) == ~0u, "VariantClear: Overwrote value\n"); - - /* Test all possible V_VT values. - * Also demonstrates that null pointers in 'v' are not dereferenced. - * Individual variant tests should test VariantClear() with non-NULL values. - */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]) && !IS_ANCIENT; i++) - { - VARTYPE vt; - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT hExpected = DISP_E_BADVARTYPE; - - SKIPTESTS(vt); - - memset(&v, 0, sizeof(v)); - V_VT(&v) = vt | ExtraFlags[i]; - - hres = VariantClear(&v); - - if (IsValidVariantClearVT(vt, ExtraFlags[i])) - hExpected = S_OK; - - ok(hres == hExpected, "VariantClear: expected 0x%X, got 0x%X for vt %d | 0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - } - } - - /* Some BYREF tests with non-NULL ptrs */ - - /* VARIANT BYREF */ - V_VT(&v2) = VT_I4; - V_I4(&v2) = 0x1234; - V_VT(&v) = VT_VARIANT | VT_BYREF; - V_VARIANTREF(&v) = &v2; - - hres = VariantClear(&v); - ok(hres == S_OK, "ret %08x\n", hres); - ok(V_VT(&v) == 0, "vt %04x\n", V_VT(&v)); - ok(V_VARIANTREF(&v) == &v2, "variant ref %p\n", V_VARIANTREF(&v2)); - ok(V_VT(&v2) == VT_I4, "vt %04x\n", V_VT(&v2)); - ok(V_I4(&v2) == 0x1234, "i4 %04x\n", V_I4(&v2)); - - /* I4 BYREF */ - i4 = 0x4321; - V_VT(&v) = VT_I4 | VT_BYREF; - V_I4REF(&v) = &i4; - - hres = VariantClear(&v); - ok(hres == S_OK, "ret %08x\n", hres); - ok(V_VT(&v) == 0, "vt %04x\n", V_VT(&v)); - ok(V_I4REF(&v) == &i4, "i4 ref %p\n", V_I4REF(&v2)); - ok(i4 == 0x4321, "i4 changed %08x\n", i4); - - - /* UNKNOWN */ - V_VT(&v) = VT_UNKNOWN; - V_UNKNOWN(&v) = (IUnknown*)&test_myVariantClearImpl; - test_myVariantClearImpl.events = 0; - hres = VariantClear(&v); - ok(hres == S_OK, "ret %08x\n", hres); - ok(V_VT(&v) == 0, "vt %04x\n", V_VT(&v)); - ok(V_UNKNOWN(&v) == (IUnknown*)&test_myVariantClearImpl, "unknown %p\n", V_UNKNOWN(&v)); - /* Check that Release got called, but nothing else */ - ok(test_myVariantClearImpl.events == 0x4, "Unexpected call. events %08x\n", test_myVariantClearImpl.events); - - /* UNKNOWN BYREF */ - punk = (IUnknown*)&test_myVariantClearImpl; - V_VT(&v) = VT_UNKNOWN | VT_BYREF; - V_UNKNOWNREF(&v) = &punk; - test_myVariantClearImpl.events = 0; - hres = VariantClear(&v); - ok(hres == S_OK, "ret %08x\n", hres); - ok(V_VT(&v) == 0, "vt %04x\n", V_VT(&v)); - ok(V_UNKNOWNREF(&v) == &punk, "unknown ref %p\n", V_UNKNOWNREF(&v)); - /* Check that nothing got called */ - ok(test_myVariantClearImpl.events == 0, "Unexpected call. events %08x\n", test_myVariantClearImpl.events); - - /* DISPATCH */ - V_VT(&v) = VT_DISPATCH; - V_DISPATCH(&v) = (IDispatch*)&test_myVariantClearImpl; - test_myVariantClearImpl.events = 0; - hres = VariantClear(&v); - ok(hres == S_OK, "ret %08x\n", hres); - ok(V_VT(&v) == 0, "vt %04x\n", V_VT(&v)); - ok(V_DISPATCH(&v) == (IDispatch*)&test_myVariantClearImpl, "dispatch %p\n", V_DISPATCH(&v)); - /* Check that Release got called, but nothing else */ - ok(test_myVariantClearImpl.events == 0x4, "Unexpected call. events %08x\n", test_myVariantClearImpl.events); - - /* DISPATCH BYREF */ - punk = (IUnknown*)&test_myVariantClearImpl; - V_VT(&v) = VT_DISPATCH | VT_BYREF; - V_DISPATCHREF(&v) = (IDispatch**)&punk; - test_myVariantClearImpl.events = 0; - hres = VariantClear(&v); - ok(hres == S_OK, "ret %08x\n", hres); - ok(V_VT(&v) == 0, "vt %04x\n", V_VT(&v)); - ok(V_DISPATCHREF(&v) == (IDispatch**)&punk, "dispatch ref %p\n", V_DISPATCHREF(&v)); - /* Check that nothing got called */ - ok(test_myVariantClearImpl.events == 0, "Unexpected call. events %08x\n", test_myVariantClearImpl.events); -} - -static void test_VariantCopy(void) -{ - VARIANTARG vSrc, vDst; - VARTYPE vt; - size_t i; - HRESULT hres, hExpected; - - /* Establish that the failure/other cases are dealt with. Individual tests - * for each type should verify that data is copied correctly, references - * are updated, etc. - */ - - /* vSrc == vDst */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]) && !IS_ANCIENT; i++) - { - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - SKIPTESTS(vt); - - memset(&vSrc, 0, sizeof(vSrc)); - V_VT(&vSrc) = vt | ExtraFlags[i]; - - hExpected = DISP_E_BADVARTYPE; - /* src is allowed to be a VT_CLSID */ - if (vt != VT_CLSID && IsValidVariantClearVT(vt, ExtraFlags[i])) - hExpected = S_OK; - - hres = VariantCopy(&vSrc, &vSrc); - - ok(hres == hExpected, - "Copy(src==dst): expected 0x%X, got 0x%X for src==dest vt %d|0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - } - } - - /* Test that if VariantClear() fails on dest, the function fails. This also - * shows that dest is in fact cleared and not just overwritten - */ - memset(&vSrc, 0, sizeof(vSrc)); - V_VT(&vSrc) = VT_UI1; - - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]) && !IS_ANCIENT; i++) - { - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - SKIPTESTS(vt); - - hExpected = DISP_E_BADVARTYPE; - - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = vt | ExtraFlags[i]; - - if (IsValidVariantClearVT(vt, ExtraFlags[i])) - hExpected = S_OK; - - hres = VariantCopy(&vDst, &vSrc); - - ok(hres == hExpected, - "Copy(bad dst): expected 0x%X, got 0x%X for dest vt %d|0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - if (hres == S_OK) - ok(V_VT(&vDst) == VT_UI1, - "Copy(bad dst): expected vt = VT_UI1, got %d\n", V_VT(&vDst)); - } - } - - /* Test that VariantClear() checks vSrc for validity before copying */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]) && !IS_ANCIENT; i++) - { - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - SKIPTESTS(vt); - - hExpected = DISP_E_BADVARTYPE; - - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = VT_EMPTY; - - memset(&vSrc, 0, sizeof(vSrc)); - V_VT(&vSrc) = vt | ExtraFlags[i]; - - /* src is allowed to be a VT_CLSID */ - if (vt != VT_CLSID && IsValidVariantClearVT(vt, ExtraFlags[i])) - hExpected = S_OK; - - hres = VariantCopy(&vDst, &vSrc); - - ok(hres == hExpected, - "Copy(bad src): expected 0x%X, got 0x%X for src vt %d|0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - if (hres == S_OK) - ok(V_VT(&vDst) == (vt|ExtraFlags[i]), - "Copy(bad src): expected vt = %d, got %d\n", - vt | ExtraFlags[i], V_VT(&vDst)); - } - } - - /* Test that copying a NULL BSTR results in an empty BSTR */ - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = VT_EMPTY; - memset(&vSrc, 0, sizeof(vSrc)); - V_VT(&vSrc) = VT_BSTR; - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK, "Copy(NULL BSTR): Failed to copy a NULL BSTR\n"); - if (hres == S_OK) - { - ok((V_VT(&vDst) == VT_BSTR) && V_BSTR(&vDst), - "Copy(NULL BSTR): should have non-NULL result\n"); - if ((V_VT(&vDst) == VT_BSTR) && V_BSTR(&vDst)) - { - ok(*V_BSTR(&vDst) == 0, "Copy(NULL BSTR): result not empty\n"); - } - } -} - -/* Determine if a vt is valid for VariantCopyInd() */ -static int IsValidVariantCopyIndVT(VARTYPE vt, VARTYPE extraFlags) -{ - int ret = 0; - - if ((extraFlags & VT_ARRAY) || - (vt > VT_NULL && vt != (VARTYPE)15 && vt < VT_VOID && - !(extraFlags & (VT_VECTOR|VT_RESERVED)))) - { - ret = 1; /* ok */ - } - return ret; -} - -static void test_VariantCopyInd(void) -{ - VARIANTARG vSrc, vDst, vRef, vRef2; - VARTYPE vt; - size_t i; - BYTE buffer[64]; - HRESULT hres, hExpected; - - memset(buffer, 0, sizeof(buffer)); - - /* vSrc == vDst */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]) && !IS_ANCIENT; i++) - { - if (ExtraFlags[i] & VT_ARRAY) - continue; /* Native crashes on NULL safearray */ - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - SKIPTESTS(vt); - - memset(&vSrc, 0, sizeof(vSrc)); - V_VT(&vSrc) = vt | ExtraFlags[i]; - - hExpected = DISP_E_BADVARTYPE; - if (!(ExtraFlags[i] & VT_BYREF)) - { - /* if src is not by-reference, acts as VariantCopy() */ - if (vt != VT_CLSID && IsValidVariantClearVT(vt, ExtraFlags[i])) - hExpected = S_OK; - } - else - { - if (vt == VT_SAFEARRAY || vt == VT_BSTR || vt == VT_UNKNOWN || - vt == VT_DISPATCH || vt == VT_RECORD) - continue; /* Need valid ptrs for deep copies */ - - V_BYREF(&vSrc) = &buffer; - hExpected = E_INVALIDARG; - - if ((vt == VT_I8 || vt == VT_UI8) && - ExtraFlags[i] == VT_BYREF) - { - if (HAVE_OLEAUT32_I8) - hExpected = S_OK; /* Only valid if I8 is a known type */ - } - else if (IsValidVariantCopyIndVT(vt, ExtraFlags[i])) - hExpected = S_OK; - } - - hres = VariantCopyInd(&vSrc, &vSrc); - - ok(hres == hExpected, - "CopyInd(src==dst): expected 0x%X, got 0x%X for src==dst vt %d|0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - } - } - - /* Bad dest */ - memset(&vSrc, 0, sizeof(vSrc)); - V_VT(&vSrc) = VT_UI1|VT_BYREF; - V_BYREF(&vSrc) = &buffer; - - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]) && !IS_ANCIENT; i++) - { - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - SKIPTESTS(vt); - - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = vt | ExtraFlags[i]; - - hExpected = DISP_E_BADVARTYPE; - - if (IsValidVariantClearVT(vt, ExtraFlags[i])) - hExpected = S_OK; - - hres = VariantCopyInd(&vDst, &vSrc); - - ok(hres == hExpected, - "CopyInd(bad dst): expected 0x%X, got 0x%X for dst vt %d|0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - if (hres == S_OK) - ok(V_VT(&vDst) == VT_UI1, - "CopyInd(bad dst): expected vt = VT_UI1, got %d\n", V_VT(&vDst)); - } - } - - /* bad src */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]) && !IS_ANCIENT; i++) - { - if (ExtraFlags[i] & VT_ARRAY) - continue; /* Native crashes on NULL safearray */ - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - SKIPTESTS(vt); - - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = VT_EMPTY; - - memset(&vSrc, 0, sizeof(vSrc)); - V_VT(&vSrc) = vt | ExtraFlags[i]; - - hExpected = DISP_E_BADVARTYPE; - if (!(ExtraFlags[i] & VT_BYREF)) - { - /* if src is not by-reference, acts as VariantCopy() */ - if (vt != VT_CLSID && IsValidVariantClearVT(vt, ExtraFlags[i])) - hExpected = S_OK; - } - else - { - if (vt == VT_SAFEARRAY || vt == VT_BSTR || vt == VT_UNKNOWN || - vt == VT_DISPATCH || vt == VT_RECORD) - continue; /* Need valid ptrs for deep copies, see vartype.c */ - - V_BYREF(&vSrc) = &buffer; - - hExpected = E_INVALIDARG; - - if ((vt == VT_I8 || vt == VT_UI8) && - ExtraFlags[i] == VT_BYREF) - { - if (HAVE_OLEAUT32_I8) - hExpected = S_OK; /* Only valid if I8 is a known type */ - } - else if (IsValidVariantCopyIndVT(vt, ExtraFlags[i])) - hExpected = S_OK; - } - - hres = VariantCopyInd(&vDst, &vSrc); - - ok(hres == hExpected, - "CopyInd(bad src): expected 0x%X, got 0x%X for src vt %d|0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - if (hres == S_OK) - { - if (vt == VT_VARIANT && ExtraFlags[i] == VT_BYREF) - { - /* Type of vDst should be the type of the referenced variant. - * Since we set the buffer to all zeros, its type should be - * VT_EMPTY. - */ - ok(V_VT(&vDst) == VT_EMPTY, - "CopyInd(bad src): expected dst vt = VT_EMPTY, got %d|0x%X\n", - V_VT(&vDst) & VT_TYPEMASK, V_VT(&vDst) & ~VT_TYPEMASK); - } - else - { - ok(V_VT(&vDst) == (vt|(ExtraFlags[i] & ~VT_BYREF)), - "CopyInd(bad src): expected dst vt = %d|0x%X, got %d|0x%X\n", - vt, ExtraFlags[i] & ~VT_BYREF, - V_VT(&vDst) & VT_TYPEMASK, V_VT(&vDst) & ~VT_TYPEMASK); - } - } - } - } - - /* By-reference variants are dereferenced */ - V_VT(&vRef) = VT_UI1; - V_UI1(&vRef) = 0x77; - V_VT(&vSrc) = VT_VARIANT|VT_BYREF; - V_VARIANTREF(&vSrc) = &vRef; - VariantInit(&vDst); - - hres = VariantCopyInd(&vDst, &vSrc); - ok(V_VT(&vDst) == VT_UI1 && V_UI1(&vDst) == 0x77, - "CopyInd(deref): expected dst vt = VT_UI1, val 0x77, got %d|0x%X, 0x%2X\n", - V_VT(&vDst) & VT_TYPEMASK, V_VT(&vDst) & ~VT_TYPEMASK, V_UI1(&vDst)); - - /* By-reference variant to a by-reference type succeeds */ - V_VT(&vRef) = VT_UI1|VT_BYREF; - V_UI1REF(&vRef) = buffer; buffer[0] = 0x88; - V_VT(&vSrc) = VT_VARIANT|VT_BYREF; - V_VARIANTREF(&vSrc) = &vRef; - VariantInit(&vDst); - - hres = VariantCopyInd(&vDst, &vSrc); - ok(V_VT(&vDst) == VT_UI1 && V_UI1(&vDst) == 0x88, - "CopyInd(deref): expected dst vt = VT_UI1, val 0x77, got %d|0x%X, 0x%2X\n", - V_VT(&vDst) & VT_TYPEMASK, V_VT(&vDst) & ~VT_TYPEMASK, V_UI1(&vDst)); - - /* But a by-reference variant to a by-reference variant fails */ - V_VT(&vRef2) = VT_UI1; - V_UI1(&vRef2) = 0x77; - V_VT(&vRef) = VT_VARIANT|VT_BYREF; - V_VARIANTREF(&vRef) = &vRef2; - V_VT(&vSrc) = VT_VARIANT|VT_BYREF; - V_VARIANTREF(&vSrc) = &vRef; - VariantInit(&vDst); - - hres = VariantCopyInd(&vDst, &vSrc); - ok(hres == E_INVALIDARG, - "CopyInd(ref->ref): expected E_INVALIDARG, got 0x%08x\n", hres); -} - -static HRESULT (WINAPI *pVarParseNumFromStr)(OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*); - -/* Macros for converting and testing the result of VarParseNumFromStr */ -#define FAILDIG 255 - -static HRESULT convert_str( const char *str, INT dig, ULONG flags, - NUMPARSE *np, BYTE rgb[128], LCID lcid ) -{ - OLECHAR buff[128]; - MultiByteToWideChar( CP_ACP,0, str, -1, buff, sizeof(buff)/sizeof(WCHAR) ); - memset( rgb, FAILDIG, 128 ); - memset( np, 255, sizeof(*np) ); - np->cDig = dig; - np->dwInFlags = flags; - return pVarParseNumFromStr( buff, lcid, LOCALE_NOUSEROVERRIDE, np, rgb); -} - -static void expect_NumFromStr( int line, HRESULT hres, NUMPARSE *np, INT a, ULONG b, ULONG c, - INT d, INT e, INT f ) -{ - if (hres == (HRESULT)S_OK) - { - ok_(__FILE__,line)(np->cDig == a, "Expected cDig = %d, got %d\n", a, np->cDig); - ok_(__FILE__,line)(np->dwInFlags == b, "Expected dwInFlags = 0x%x, got 0x%x\n", b, np->dwInFlags); - ok_(__FILE__,line)(np->dwOutFlags == c, "Expected dwOutFlags = 0x%x, got 0x%x\n", c, np->dwOutFlags); - ok_(__FILE__,line)(np->cchUsed == d, "Expected cchUsed = %d, got %d\n", d, np->cchUsed); - ok_(__FILE__,line)(np->nBaseShift == e, "Expected nBaseShift = %d, got %d\n", e, np->nBaseShift); - ok_(__FILE__,line)(np->nPwr10 == f, "Expected nPwr10 = %d, got %d\n", f, np->nPwr10); - } -} - -#define CONVERTN(str,dig,flags) hres = convert_str( str, dig, flags, &np, rgb, lcid ) -#define CONVERT(str,flags) CONVERTN(str,sizeof(rgb),flags) -#define EXPECT(a,b,c,d,e,f) expect_NumFromStr( __LINE__, hres, &np, a, b, c, d, e, f ) -#define EXPECTRGB(a,b) ok(rgb[a] == b, "Digit[%d], expected %d, got %d\n", a, b, rgb[a]) -#define EXPECTFAIL ok(hres == (HRESULT)DISP_E_TYPEMISMATCH, "Call succeeded, hres = %08x\n", hres) -#define EXPECT2(a,b) EXPECTRGB(0,a); EXPECTRGB(1,b) - -static void test_VarParseNumFromStr(void) -{ - HRESULT hres; - /* Ensure all tests are using the same locale characters for '$', ',' etc */ - LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - NUMPARSE np; - BYTE rgb[128]; - - /** No flags **/ - - CHECKPTR(VarParseNumFromStr); - - /* Consume a single digit */ - CONVERT("7", 0); - EXPECT(1,0,0,1,0,0); - EXPECT2(7,FAILDIG); - - /* cDig is not literal digits - zeros are suppressed and nPwr10 is increased */ - CONVERT("10", 0); - EXPECT(1,0,0,2,0,1); - /* Note: Win32 writes the trailing zeros if they are within cDig's limits, - * but then excludes them from the returned cDig count. - * In our implementation we don't bother writing them at all. - */ - EXPECTRGB(0, 1); - - /* if cDig is too small and numbers follow, sets INEXACT */ - CONVERTN("11",1, 0); - EXPECT(1,0,NUMPRS_INEXACT,2,0,1); - EXPECT2(1,FAILDIG); - - /* Strips leading zeros */ - CONVERT("01", 0); - EXPECT(1,0,0,2,0,0); - EXPECT2(1,FAILDIG); - - /* Strips leading zeros */ - CONVERTN("01",1, 0); - EXPECT(1,0,0,2,0,0); - EXPECT2(1,FAILDIG); - - - /* Fails on non digits */ - CONVERT("a", 0); - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); - - /** NUMPRS_LEADING_WHITE/NUMPRS_TRAILING_WHITE **/ - - /* Without flag, fails on whitespace */ - CONVERT(" 0", 0); - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); - - - /* With flag, consumes whitespace */ - CONVERT(" 0", NUMPRS_LEADING_WHITE); - EXPECT(1,NUMPRS_LEADING_WHITE,NUMPRS_LEADING_WHITE,2,0,0); - EXPECT2(0,FAILDIG); - - /* Test TAB once, then assume it acts as space for all cases */ - CONVERT("\t0", NUMPRS_LEADING_WHITE); - EXPECT(1,NUMPRS_LEADING_WHITE,NUMPRS_LEADING_WHITE,2,0,0); - EXPECT2(0,FAILDIG); - - - /* Doesn't pick up trailing whitespace without flag */ - CONVERT("0 ", 0); - EXPECT(1,0,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* With flag, consumes trailing whitespace */ - CONVERT("0 ", NUMPRS_TRAILING_WHITE); - EXPECT(1,NUMPRS_TRAILING_WHITE,NUMPRS_TRAILING_WHITE,2,0,0); - EXPECT2(0,FAILDIG); - - /* Leading flag only consumes leading */ - CONVERT(" 0 ", NUMPRS_LEADING_WHITE); - EXPECT(1,NUMPRS_LEADING_WHITE,NUMPRS_LEADING_WHITE,2,0,0); - EXPECT2(0,FAILDIG); - - /* Both flags consumes both */ - CONVERT(" 0 ", NUMPRS_LEADING_WHITE|NUMPRS_TRAILING_WHITE); - EXPECT(1,NUMPRS_LEADING_WHITE|NUMPRS_TRAILING_WHITE,NUMPRS_LEADING_WHITE|NUMPRS_TRAILING_WHITE,3,0,0); - EXPECT2(0,FAILDIG); - - /** NUMPRS_LEADING_PLUS/NUMPRS_TRAILING_PLUS **/ - - /* Without flag, fails on + */ - CONVERT("+0", 0); - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); - - /* With flag, consumes + */ - CONVERT("+0", NUMPRS_LEADING_PLUS); - EXPECT(1,NUMPRS_LEADING_PLUS,NUMPRS_LEADING_PLUS,2,0,0); - EXPECT2(0,FAILDIG); - - /* Without flag, doesn't consume trailing + */ - CONVERT("0+", 0); - EXPECT(1,0,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* With flag, consumes trailing + */ - CONVERT("0+", NUMPRS_TRAILING_PLUS); - EXPECT(1,NUMPRS_TRAILING_PLUS,NUMPRS_TRAILING_PLUS,2,0,0); - EXPECT2(0,FAILDIG); - - /* With leading flag, doesn't consume trailing + */ - CONVERT("+0+", NUMPRS_LEADING_PLUS); - EXPECT(1,NUMPRS_LEADING_PLUS,NUMPRS_LEADING_PLUS,2,0,0); - EXPECT2(0,FAILDIG); - - /* Trailing + doesn't get consumed if we specify both (unlike whitespace) */ - CONVERT("+0+", NUMPRS_LEADING_PLUS|NUMPRS_TRAILING_PLUS); - EXPECT(1,NUMPRS_LEADING_PLUS|NUMPRS_TRAILING_PLUS,NUMPRS_LEADING_PLUS,2,0,0); - EXPECT2(0,FAILDIG); - - /** NUMPRS_LEADING_MINUS/NUMPRS_TRAILING_MINUS **/ - - /* Without flag, fails on - */ - CONVERT("-0", 0); - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); - - /* With flag, consumes - */ - CONVERT("-0", NUMPRS_LEADING_MINUS); - EXPECT(1,NUMPRS_LEADING_MINUS,NUMPRS_NEG|NUMPRS_LEADING_MINUS,2,0,0); - EXPECT2(0,FAILDIG); - - /* Without flag, doesn't consume trailing - */ - CONVERT("0-", 0); - EXPECT(1,0,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* With flag, consumes trailing - */ - CONVERT("0-", NUMPRS_TRAILING_MINUS); - EXPECT(1,NUMPRS_TRAILING_MINUS,NUMPRS_NEG|NUMPRS_TRAILING_MINUS,2,0,0); - EXPECT2(0,FAILDIG); - - /* With leading flag, doesn't consume trailing - */ - CONVERT("-0-", NUMPRS_LEADING_MINUS); - EXPECT(1,NUMPRS_LEADING_MINUS,NUMPRS_NEG|NUMPRS_LEADING_MINUS,2,0,0); - EXPECT2(0,FAILDIG); - - /* Trailing - doesn't get consumed if we specify both (unlike whitespace) */ - CONVERT("-0-", NUMPRS_LEADING_MINUS|NUMPRS_TRAILING_MINUS); - EXPECT(1,NUMPRS_LEADING_MINUS|NUMPRS_TRAILING_MINUS,NUMPRS_NEG|NUMPRS_LEADING_MINUS,2,0,0); - EXPECT2(0,FAILDIG); - - /** NUMPRS_HEX_OCT **/ - - /* Could be hex, octal or decimal - With flag reads as decimal */ - CONVERT("0", NUMPRS_HEX_OCT); - EXPECT(1,NUMPRS_HEX_OCT,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* Doesn't recognise hex in .asm sytax */ - CONVERT("0h", NUMPRS_HEX_OCT); - EXPECT(1,NUMPRS_HEX_OCT,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* Doesn't fail with valid leading string but no digits */ - CONVERT("0x", NUMPRS_HEX_OCT); - EXPECT(1,NUMPRS_HEX_OCT,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* Doesn't recognise hex format humbers at all! */ - CONVERT("0x0", NUMPRS_HEX_OCT); - EXPECT(1,NUMPRS_HEX_OCT,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* Doesn't recognise plain hex digits either */ - CONVERT("FE", NUMPRS_HEX_OCT); - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); - - /* Octal */ - CONVERT("0100", NUMPRS_HEX_OCT); - EXPECT(1,NUMPRS_HEX_OCT,0,4,0,2); - EXPECTRGB(0,1); - EXPECTRGB(1,0); - EXPECTRGB(2,0); - EXPECTRGB(3,FAILDIG); - - /* VB hex */ - CONVERT("&HF800", NUMPRS_HEX_OCT); - EXPECT(4,NUMPRS_HEX_OCT,0x40,6,4,0); - EXPECTRGB(0,15); - EXPECTRGB(1,8); - EXPECTRGB(2,0); - EXPECTRGB(3,0); - EXPECTRGB(4,FAILDIG); - - /* VB hex lower case and leading zero */ - CONVERT("&h0abcdef", NUMPRS_HEX_OCT); - EXPECT(6,NUMPRS_HEX_OCT,0x40,9,4,0); - EXPECTRGB(0,10); - EXPECTRGB(1,11); - EXPECTRGB(2,12); - EXPECTRGB(3,13); - EXPECTRGB(4,14); - EXPECTRGB(5,15); - EXPECTRGB(6,FAILDIG); - - /* VB oct */ - CONVERT("&O300", NUMPRS_HEX_OCT); - EXPECT(3,NUMPRS_HEX_OCT,0x40,5,3,0); - EXPECTRGB(0,3); - EXPECTRGB(1,0); - EXPECTRGB(2,0); - EXPECTRGB(3,FAILDIG); - - /* VB oct lower case and leading zero */ - CONVERT("&o0777", NUMPRS_HEX_OCT); - EXPECT(3,NUMPRS_HEX_OCT,0x40,6,3,0); - EXPECTRGB(0,7); - EXPECTRGB(1,7); - EXPECTRGB(2,7); - EXPECTRGB(3,FAILDIG); - - /* VB oct char bigger than 7 */ - CONVERT("&o128", NUMPRS_HEX_OCT); -/* - Native versions 2.x of oleaut32 allow this to succeed: later versions and Wine don't - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); -*/ - /** NUMPRS_PARENS **/ - - /* Empty parens = error */ - CONVERT("()", NUMPRS_PARENS); - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); - - /* With flag, trailing parens not consumed */ - CONVERT("0()", NUMPRS_PARENS); - EXPECT(1,NUMPRS_PARENS,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* With flag, Number in parens made negative and parens consumed */ - CONVERT("(0)", NUMPRS_PARENS); - EXPECT(1,NUMPRS_PARENS,NUMPRS_NEG|NUMPRS_PARENS,3,0,0); - EXPECT2(0,FAILDIG); - - /** NUMPRS_THOUSANDS **/ - - /* With flag, thousands sep. not needed */ - CONVERT("0", NUMPRS_THOUSANDS); - EXPECT(1,NUMPRS_THOUSANDS,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* With flag, thousands sep. and following digits consumed */ - CONVERT("1,000", NUMPRS_THOUSANDS); - EXPECT(1,NUMPRS_THOUSANDS,NUMPRS_THOUSANDS,5,0,3); - EXPECTRGB(0,1); - - /* With flag and decimal point, thousands sep. but not decimals consumed */ - CONVERT("1,000.0", NUMPRS_THOUSANDS); - EXPECT(1,NUMPRS_THOUSANDS,NUMPRS_THOUSANDS,5,0,3); - EXPECTRGB(0,1); - - /** NUMPRS_CURRENCY **/ - - /* Without flag, chokes on currency sign */ - CONVERT("$11", 0); - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); - - /* With flag, consumes currency sign */ - CONVERT("$11", NUMPRS_CURRENCY); - EXPECT(2,NUMPRS_CURRENCY,NUMPRS_CURRENCY,3,0,0); - EXPECT2(1,1); - EXPECTRGB(2,FAILDIG); - - /* With flag only, doesn't consume decimal point */ - CONVERT("$11.1", NUMPRS_CURRENCY); - EXPECT(2,NUMPRS_CURRENCY,NUMPRS_CURRENCY,3,0,0); - EXPECT2(1,1); - EXPECTRGB(2,FAILDIG); - - /* With flag and decimal flag, consumes decimal point and following digits */ - CONVERT("$11.1", NUMPRS_CURRENCY|NUMPRS_DECIMAL); - EXPECT(3,NUMPRS_CURRENCY|NUMPRS_DECIMAL,NUMPRS_CURRENCY|NUMPRS_DECIMAL,5,0,-1); - EXPECT2(1,1); - EXPECTRGB(2,1); - EXPECTRGB(3,FAILDIG); - - /* Thousands flag can only be used with currency */ - CONVERT("$1,234", NUMPRS_CURRENCY|NUMPRS_THOUSANDS); - EXPECT(4,NUMPRS_CURRENCY|NUMPRS_THOUSANDS,NUMPRS_CURRENCY|NUMPRS_THOUSANDS,6,0,0); - EXPECT2(1,2); - EXPECTRGB(2,3); - EXPECTRGB(3,4); - EXPECTRGB(4,FAILDIG); - - /** NUMPRS_DECIMAL **/ - - /* With flag, consumes decimal point */ - CONVERT("1.1", NUMPRS_DECIMAL); - EXPECT(2,NUMPRS_DECIMAL,NUMPRS_DECIMAL,3,0,-1); - EXPECT2(1,1); - EXPECTRGB(2,FAILDIG); - - /* With flag, consumes decimal point. Skipping the decimal part is not an error */ - CONVERT("1.", NUMPRS_DECIMAL); - EXPECT(1,NUMPRS_DECIMAL,NUMPRS_DECIMAL,2,0,0); - EXPECT2(1,FAILDIG); - - /* Consumes only one decimal point */ - CONVERT("1.1.", NUMPRS_DECIMAL); - EXPECT(2,NUMPRS_DECIMAL,NUMPRS_DECIMAL,3,0,-1); - EXPECT2(1,1); - EXPECTRGB(2,FAILDIG); - - /** NUMPRS_EXPONENT **/ - - /* Without flag, doesn't consume exponent */ - CONVERT("1e1", 0); - EXPECT(1,0,0,1,0,0); - EXPECT2(1,FAILDIG); - - /* With flag, consumes exponent */ - CONVERT("1e1", NUMPRS_EXPONENT); - EXPECT(1,NUMPRS_EXPONENT,NUMPRS_EXPONENT,3,0,1); - EXPECT2(1,FAILDIG); - - /* Negative exponents are accepted without flags */ - CONVERT("1e-1", NUMPRS_EXPONENT); - EXPECT(1,NUMPRS_EXPONENT,NUMPRS_EXPONENT,4,0,-1); - EXPECT2(1,FAILDIG); - - /* As are positive exponents and leading exponent 0s */ - CONVERT("1e+01", NUMPRS_EXPONENT); - EXPECT(1,NUMPRS_EXPONENT,NUMPRS_EXPONENT,5,0,1); - EXPECT2(1,FAILDIG); - - /* The same for zero exponents */ - CONVERT("1e0", NUMPRS_EXPONENT); - EXPECT(1,NUMPRS_EXPONENT,NUMPRS_EXPONENT,3,0,0); - EXPECT2(1,FAILDIG); - - /* Sign on a zero exponent doesn't matter */ - CONVERT("1e+0", NUMPRS_EXPONENT); - EXPECT(1,NUMPRS_EXPONENT,NUMPRS_EXPONENT,4,0,0); - EXPECT2(1,FAILDIG); - - CONVERT("1e-0", NUMPRS_EXPONENT); - EXPECT(1,NUMPRS_EXPONENT,NUMPRS_EXPONENT,4,0,0); - EXPECT2(1,FAILDIG); - - /* Doesn't consume a real number exponent */ - CONVERT("1e1.", NUMPRS_EXPONENT); - EXPECT(1,NUMPRS_EXPONENT,NUMPRS_EXPONENT,3,0,1); - EXPECT2(1,FAILDIG); - - /* Powers of 10 are calculated from the position of any decimal point */ - CONVERT("1.5e20", NUMPRS_EXPONENT|NUMPRS_DECIMAL); - EXPECT(2,NUMPRS_EXPONENT|NUMPRS_DECIMAL,NUMPRS_EXPONENT|NUMPRS_DECIMAL,6,0,19); - EXPECT2(1,5); - - CONVERT("1.5e-20", NUMPRS_EXPONENT|NUMPRS_DECIMAL); - EXPECT(2,NUMPRS_EXPONENT|NUMPRS_DECIMAL,NUMPRS_EXPONENT|NUMPRS_DECIMAL,7,0,-21); - EXPECT2(1,5); - - /** NUMPRS_USE_ALL **/ - - /* Flag expects all digits */ - CONVERT("0", NUMPRS_USE_ALL); - EXPECT(1,NUMPRS_USE_ALL,0,1,0,0); - EXPECT2(0,FAILDIG); - - /* Rejects anything trailing */ - CONVERT("0 ", NUMPRS_USE_ALL); - EXPECTFAIL; - EXPECT2(0,FAILDIG); - - /* Unless consumed by trailing flag */ - CONVERT("0 ", NUMPRS_USE_ALL|NUMPRS_TRAILING_WHITE); - EXPECT(1,NUMPRS_USE_ALL|NUMPRS_TRAILING_WHITE,NUMPRS_TRAILING_WHITE,2,0,0); - EXPECT2(0,FAILDIG); - - /** Combinations **/ - - /* Leading whitespace and plus, doesn't consume trailing whitespace */ - CONVERT("+ 0 ", NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE); - EXPECT(1,NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE,NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE,3,0,0); - EXPECT2(0,FAILDIG); - - /* Order of whitespace and plus is unimportant */ - CONVERT(" +0", NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE); - EXPECT(1,NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE,NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE,3,0,0); - EXPECT2(0,FAILDIG); - - /* Leading whitespace can be repeated */ - CONVERT(" + 0", NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE); - EXPECT(1,NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE,NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE,4,0,0); - EXPECT2(0,FAILDIG); - - /* But plus/minus etc. cannot */ - CONVERT("+ +0", NUMPRS_LEADING_PLUS|NUMPRS_LEADING_WHITE); - EXPECTFAIL; - EXPECTRGB(0,FAILDIG); - - /* Inexact is not set if trailing zeros are removed */ - CONVERTN("10", 1, 0); - EXPECT(1,0,0,2,0,1); - EXPECT2(1,FAILDIG); - - /* Make sure a leading 0 is stripped but decimals after it get read */ - CONVERT("-0.51", NUMPRS_STD); - EXPECT(2,NUMPRS_STD,NUMPRS_NEG|NUMPRS_DECIMAL|NUMPRS_LEADING_MINUS,5,0,-2); - EXPECT2(5,1); - - /* Keep trailing zeros on whole number part of a decimal */ - CONVERT("10.1", NUMPRS_STD); - EXPECT(3,NUMPRS_STD,NUMPRS_DECIMAL,4,0,-1); - EXPECT2(1,0); - EXPECTRGB(2,1); - - /* Zeros after decimal sign */ - CONVERT("0.01", NUMPRS_STD); - EXPECT(1,NUMPRS_STD,NUMPRS_DECIMAL,4,0,-2); - EXPECT2(1,FAILDIG); - - /* Trailing zeros after decimal part */ - CONVERT("0.10", NUMPRS_STD); - EXPECT(1,NUMPRS_STD,NUMPRS_DECIMAL,4,0,-1); - EXPECT2(1,0); -} - -static HRESULT (WINAPI *pVarNumFromParseNum)(NUMPARSE*,BYTE*,ULONG,VARIANT*); - -/* Macros for converting and testing the result of VarNumFromParseNum */ -#define SETRGB(indx,val) if (!indx) memset(rgb, FAILDIG, sizeof(rgb)); rgb[indx] = val -#undef CONVERT -#define CONVERT(a,b,c,d,e,f,bits) \ - np.cDig = (a); np.dwInFlags = (b); np.dwOutFlags = (c); np.cchUsed = (d); \ - np.nBaseShift = (e); np.nPwr10 = (f); hres = pVarNumFromParseNum(&np, rgb, bits, &vOut) -static const char *szFailOverflow = "Expected overflow, hres = %08x\n"; -#define EXPECT_OVERFLOW ok(hres == (HRESULT)DISP_E_OVERFLOW, szFailOverflow, hres) -static const char *szFailOk = "Call failed, hres = %08x\n"; -#define EXPECT_OK ok(hres == (HRESULT)S_OK, szFailOk, hres); \ - if (hres == (HRESULT)S_OK) -#define EXPECT_TYPE(typ) ok(V_VT(&vOut) == typ,"Expected Type = " #typ ", got %d\n", V_VT(&vOut)) -#define EXPECT_I1(val) EXPECT_OK { EXPECT_TYPE(VT_I1); \ - ok(V_I1(&vOut) == val, "Expected i1 = %d, got %d\n", (signed char)val, V_I1(&vOut)); } -#define EXPECT_UI1(val) EXPECT_OK { EXPECT_TYPE(VT_UI1); \ - ok(V_UI1(&vOut) == val, "Expected ui1 = %d, got %d\n", (BYTE)val, V_UI1(&vOut)); } -#define EXPECT_I2(val) EXPECT_OK { EXPECT_TYPE(VT_I2); \ - ok(V_I2(&vOut) == val, "Expected i2 = %d, got %d\n", (SHORT)val, V_I2(&vOut)); } -#define EXPECT_UI2(val) EXPECT_OK { EXPECT_TYPE(VT_UI2); \ - ok(V_UI2(&vOut) == val, "Expected ui2 = %d, got %d\n", (USHORT)val, V_UI2(&vOut)); } -#define EXPECT_I4(val) EXPECT_OK { EXPECT_TYPE(VT_I4); \ - ok(V_I4(&vOut) == val, "Expected i4 = %d, got %d\n", (LONG)val, V_I4(&vOut)); } -#define EXPECT_UI4(val) EXPECT_OK { EXPECT_TYPE(VT_UI4); \ - ok(V_UI4(&vOut) == val, "Expected ui4 = %d, got %d\n", (ULONG)val, V_UI4(&vOut)); } -#define EXPECT_I8(high,low) EXPECT_OK { EXPECT_TYPE(VT_I8); \ - ok(V_I8(&vOut) == ((((LONG64)(high))<<32)|(low)), "Expected i8 = %x%08x, got %x%08x\n", \ - (LONG)(high), (LONG)(low), (LONG)(V_I8(&vOut)>>32), (LONG)V_I8(&vOut) ); } -#define EXPECT_UI8(val) EXPECT_OK { EXPECT_TYPE(VT_UI8); \ - ok(V_UI8(&vOut) == val, "Expected ui8 = 0x%x%08x, got 0x%x%08x\n", \ - (DWORD)((ULONG64)val >> 32), (DWORD)(ULONG64)val, (DWORD)(V_UI8(&vOut) >> 32), (DWORD)V_UI8(&vOut)); } -#define EXPECT_R4(val) EXPECT_OK { EXPECT_TYPE(VT_R4); \ - ok(V_R4(&vOut) == val, "Expected r4 = %f, got %f\n", val, V_R4(&vOut)); } -#define EXPECT_R8(val) EXPECT_OK { EXPECT_TYPE(VT_R8); \ - ok(V_R8(&vOut) == val, "Expected r8 = %g, got %g\n", val, V_R8(&vOut)); } -#define CY_MULTIPLIER 10000 -#define EXPECT_CY(val) EXPECT_OK { EXPECT_TYPE(VT_CY); \ - ok(V_CY(&vOut).int64 == (LONG64)(val * CY_MULTIPLIER), "Expected r8 = 0x%x%08x, got 0x%x%08x\n", \ - (DWORD)((LONG64)val >> 23), (DWORD)(LONG64)val, (DWORD)(V_CY(&vOut).int64 >>32), (DWORD)V_CY(&vOut).int64); } -#define EXPECT_DECIMAL(valHi, valMid, valLo) EXPECT_OK { EXPECT_TYPE(VT_DECIMAL); \ - ok((V_DECIMAL(&vOut).Hi32 == valHi) && (S1(U1(V_DECIMAL(&vOut))).Mid32 == valMid) && \ - (S1(U1(V_DECIMAL(&vOut))).Lo32 == valLo), \ - "Expected decimal = %x/0x%x%08x, got %x/0x%x%08x\n", valHi, valMid, valLo, \ - V_DECIMAL(&vOut).Hi32, S1(U1(V_DECIMAL(&vOut))).Mid32, S1(U1(V_DECIMAL(&vOut))).Lo32); } - -static void test_VarNumFromParseNum(void) -{ - HRESULT hres; - NUMPARSE np; - BYTE rgb[128]; - VARIANT vOut; - - CHECKPTR(VarNumFromParseNum); - - /* Convert the number 1 to different types */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_I1); EXPECT_I1(1); - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_UI1); EXPECT_UI1(1); - /* Prefers a signed type to unsigned of the same size */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_I1|VTBIT_UI1); EXPECT_I1(1); - /* But takes the smaller size if possible */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_I2|VTBIT_UI1); EXPECT_UI1(1); - - /* Try different integer sizes */ -#define INTEGER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2|VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8) - - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, INTEGER_VTBITS); EXPECT_I1(1); - /* 127 */ - SETRGB(0, 1); SETRGB(1, 2); SETRGB(2, 7); - CONVERT(3,0,0,3,0,0, INTEGER_VTBITS); EXPECT_I1(127); - /* 128 */ - SETRGB(0, 1); SETRGB(1, 2); SETRGB(2, 8); - CONVERT(3,0,0,3,0,0, INTEGER_VTBITS); EXPECT_UI1(128); - /* 255 */ - SETRGB(0, 2); SETRGB(1, 5); SETRGB(2, 5); - CONVERT(3,0,0,3,0,0, INTEGER_VTBITS); EXPECT_UI1(255); - /* 256 */ - SETRGB(0, 2); SETRGB(1, 5); SETRGB(2, 6); - CONVERT(3,0,0,3,0,0, INTEGER_VTBITS); EXPECT_I2(256); - /* 32767 */ - SETRGB(0, 3); SETRGB(1, 2); SETRGB(2, 7); SETRGB(3, 6); SETRGB(4, 7); - CONVERT(5,0,0,5,0,0, INTEGER_VTBITS); EXPECT_I2(32767); - /* 32768 */ - SETRGB(0, 3); SETRGB(1, 2); SETRGB(2, 7); SETRGB(3, 6); SETRGB(4, 8); - CONVERT(5,0,0,5,0,0, INTEGER_VTBITS); EXPECT_UI2(32768); - - /* Assume the above pattern holds for remaining positive integers; test negative */ - - /* -128 */ - SETRGB(0, 1); SETRGB(1, 2); SETRGB(2, 8); - CONVERT(3,0,NUMPRS_NEG,3,0,0, INTEGER_VTBITS); EXPECT_I1(-128); - /* -129 */ - SETRGB(0, 1); SETRGB(1, 2); SETRGB(2, 9); - CONVERT(3,0,NUMPRS_NEG,3,0,0, INTEGER_VTBITS); EXPECT_I2(-129); - /* -32768 */ - SETRGB(0, 3); SETRGB(1, 2); SETRGB(2, 7); SETRGB(3, 6); SETRGB(4, 8); - CONVERT(5,0,NUMPRS_NEG,5,0,0, INTEGER_VTBITS); EXPECT_I2(-32768); - /* -32768 */ - SETRGB(0, 3); SETRGB(1, 2); SETRGB(2, 7); SETRGB(3, 6); SETRGB(4, 9); - CONVERT(5,0,NUMPRS_NEG,5,0,0, INTEGER_VTBITS); EXPECT_I4(-32769); - - /* Assume the above pattern holds for remaining negative integers */ - - /* Test hexadecimal conversions */ - SETRGB(0, 1); CONVERT(1,0,0,1,4,0, INTEGER_VTBITS); EXPECT_I1(0x01); - /* 0x7f */ - SETRGB(0, 7); SETRGB(1, 0xf); - CONVERT(2,0,0,2,4,0, INTEGER_VTBITS); EXPECT_I1(0x7f); - SETRGB(0, 7); SETRGB(1, 0xf); - CONVERT(2,0,0,2,4,0, VTBIT_DECIMAL); EXPECT_DECIMAL(0,0,0x7f); - /* 0x7fff */ - SETRGB(0, 7); SETRGB(1, 0xf); SETRGB(2, 0xf); SETRGB(3, 0xf); - CONVERT(4,0,0,4,4,0, INTEGER_VTBITS); EXPECT_I2(0x7fff); - /* 0x7fffffff */ - SETRGB(0, 7); SETRGB(1, 0xf); SETRGB(2, 0xf); SETRGB(3, 0xf); - SETRGB(4, 0xf); SETRGB(5, 0xf); SETRGB(6, 0xf); SETRGB(7, 0xf); - CONVERT(8,0,0,8,4,0, INTEGER_VTBITS); EXPECT_I4(0x7fffffffL); - /* 0x7fffffffffffffff (64 bits) */ - SETRGB(0, 7); SETRGB(1, 0xf); SETRGB(2, 0xf); SETRGB(3, 0xf); - SETRGB(4, 0xf); SETRGB(5, 0xf); SETRGB(6, 0xf); SETRGB(7, 0xf); - SETRGB(8, 0xf); SETRGB(9, 0xf); SETRGB(10, 0xf); SETRGB(11, 0xf); - SETRGB(12, 0xf); SETRGB(13, 0xf); SETRGB(14, 0xf); SETRGB(15, 0xf); - if (HAVE_OLEAUT32_I8) - { - /* We cannot use INTEGER_VTBITS as WinXP and Win2003 are broken(?). They - truncate the number to the smallest integer size requested: - CONVERT(16,0,0,16,4,0, INTEGER_VTBITS); EXPECT_I1((signed char)0xff); */ - CONVERT(16,0,0,16,4,0, VTBIT_I8); EXPECT_I8(0x7fffffff,0xffffffff); - } - - /* Assume the above pattern holds for numbers without hi-bit set, test (preservation of) hi-bit */ - /* 0x82 */ - SETRGB(0, 8); SETRGB(1, 2); - CONVERT(2,0,0,2,4,0, INTEGER_VTBITS); - EXPECT_I1((signed char)0x82); - /* 0x8002 */ - SETRGB(0, 8); SETRGB(1, 0); SETRGB(2, 0); SETRGB(3, 2); - CONVERT(4,0,0,4,4,0, INTEGER_VTBITS); - EXPECT_I2((signed short)0x8002); - /* 0x80000002 */ - SETRGB(0, 8); SETRGB(1, 0); SETRGB(2, 0); SETRGB(3, 0); - SETRGB(4, 0); SETRGB(5, 0); SETRGB(6, 0); SETRGB(7, 2); - CONVERT(8,0,0,8,4,0, INTEGER_VTBITS); EXPECT_I4(0x80000002); - /* 0x8000000000000002 (64 bits) */ - SETRGB(0, 8); SETRGB(1, 0); SETRGB(2, 0); SETRGB(3, 0); - SETRGB(4, 0); SETRGB(5, 0); SETRGB(6, 0); SETRGB(7, 0); - SETRGB(8, 0); SETRGB(9, 0); SETRGB(10, 0); SETRGB(11, 0); - SETRGB(12, 0); SETRGB(13, 0); SETRGB(14, 0); SETRGB(15, 2); - if (HAVE_OLEAUT32_I8) - { - /* We cannot use INTEGER_VTBITS as WinXP and Win2003 are broken(?). They - truncate the number to the smallest integer size requested: - CONVERT(16,0,0,16,4,0, INTEGER_VTBITS & ~VTBIT_I1); - EXPECT_I2((signed short)0x0002); */ - CONVERT(16,0,0,16,4,0, VTBIT_I8); EXPECT_I8(0x80000000,0x00000002); - } - - /* Test (preservation of) hi-bit with STRICT type requesting */ - /* 0x82 */ - SETRGB(0, 8); SETRGB(1, 2); - CONVERT(2,0,0,2,4,0, VTBIT_I1); - EXPECT_I1((signed char)0x82); - /* 0x8002 */ - SETRGB(0, 8); SETRGB(1, 0); SETRGB(2, 0); SETRGB(3, 2); - CONVERT(4,0,0,4,4,0, VTBIT_I2); - EXPECT_I2((signed short)0x8002); - /* 0x80000002 */ - SETRGB(0, 8); SETRGB(1, 0); SETRGB(2, 0); SETRGB(3, 0); - SETRGB(4, 0); SETRGB(5, 0); SETRGB(6, 0); SETRGB(7, 2); - CONVERT(8,0,0,8,4,0, VTBIT_I4); EXPECT_I4(0x80000002); - /* 0x8000000000000002 (64 bits) */ - SETRGB(0, 8); SETRGB(1, 0); SETRGB(2, 0); SETRGB(3, 0); - SETRGB(4, 0); SETRGB(5, 0); SETRGB(6, 0); SETRGB(7, 0); - SETRGB(8, 0); SETRGB(9, 0); SETRGB(10, 0); SETRGB(11, 0); - SETRGB(12, 0); SETRGB(13, 0); SETRGB(14, 0); SETRGB(15, 2); - if (HAVE_OLEAUT32_I8) - { - CONVERT(16,0,0,16,4,0, VTBIT_I8); EXPECT_I8(0x80000000,0x00000002); - } - /* Assume the above pattern holds for numbers with hi-bit set */ - - /* Negative numbers overflow if we have only unsigned outputs */ - /* -1 */ - SETRGB(0, 1); CONVERT(1,0,NUMPRS_NEG,1,0,0, VTBIT_UI1); EXPECT_OVERFLOW; - /* -0.6 */ - SETRGB(0, 6); CONVERT(1,0,NUMPRS_NEG,1,0,~0u, VTBIT_UI1); EXPECT_OVERFLOW; - - /* Except that rounding is done first, so -0.5 to 0 are accepted as 0 */ - /* -0.5 */ - SETRGB(0, 5); CONVERT(1,0,NUMPRS_NEG,1,0,~0u, VTBIT_UI1); EXPECT_UI1(0); - - /* Floating point zero is OK */ - /* 0.00000000E0 */ - SETRGB(0, 0); CONVERT(1,0,NUMPRS_DECIMAL|NUMPRS_EXPONENT,12,0,-8, VTBIT_R8); - EXPECT_R8(0.0); - - /* Float is acceptable for an integer input value */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_R4); EXPECT_R4(1.0f); - /* As is double */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_R8); EXPECT_R8(1.0); - /* As is currency */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_CY); EXPECT_CY(1); - - /* Float is preferred over double */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_R4|VTBIT_R8); EXPECT_R4(1.0f); - - /* Double is preferred over currency */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_R8|VTBIT_CY); EXPECT_R8(1.0); - - /* Currency is preferred over decimal */ - SETRGB(0, 1); CONVERT(1,0,0,1,0,0, VTBIT_CY|VTBIT_DECIMAL); EXPECT_CY(1); -} - - -static void test_UdateFromDate( int line, DATE dt, ULONG flags, HRESULT r, WORD d, WORD m, WORD y, - WORD h, WORD mn, WORD s, WORD ms, WORD dw, WORD dy) -{ - UDATE ud; - HRESULT res; - - memset(&ud, 0, sizeof(ud)); - res = pVarUdateFromDate(dt, flags, &ud); - ok_(__FILE__,line)(r == res, "Wrong result %x/%x\n", r, res); - if (SUCCEEDED(res)) - ok_(__FILE__,line)(ud.st.wYear == y && ud.st.wMonth == m && ud.st.wDay == d && - ud.st.wHour == h && ud.st.wMinute == mn && ud.st.wSecond == s && - ud.st.wMilliseconds == ms && ud.st.wDayOfWeek == dw && ud.wDayOfYear == dy, - "%.16g expected %d,%d,%d,%d,%d,%d,%d %d %d, got %d,%d,%d,%d,%d,%d,%d %d %d\n", - dt, d, m, y, h, mn, s, ms, dw, dy, - ud.st.wDay, ud.st.wMonth, ud.st.wYear, ud.st.wHour, ud.st.wMinute, - ud.st.wSecond, ud.st.wMilliseconds, ud.st.wDayOfWeek, ud.wDayOfYear ); -} -#define DT2UD(dt,flags,r,d,m,y,h,mn,s,ms,dw,dy) test_UdateFromDate(__LINE__,dt,flags,r,d,m,y,h,mn,s,ms,dw,dy) - -static void test_VarUdateFromDate(void) -{ - CHECKPTR(VarUdateFromDate); - DT2UD(29221.0,0,S_OK,1,1,1980,0,0,0,0,2,1); /* 1 Jan 1980 */ - DT2UD(29222.0,0,S_OK,2,1,1980,0,0,0,0,3,2); /* 2 Jan 1980 */ - DT2UD(33238.0,0,S_OK,31,12,1990,0,0,0,0,1,365); /* 31 Dec 1990 */ - DT2UD(0.0,0,S_OK,30,12,1899,0,0,0,0,6,364); /* 30 Dec 1899 - VT_DATE 0.0 */ - DT2UD(-657434.0,0,S_OK,1,1,100,0,0,0,0,5,1); /* 1 Jan 100 - Min */ - DT2UD(-657435.0,0,E_INVALIDARG,0,0,0,0,0,0,0,0,0); /* < 1 Jan 100 => err */ - DT2UD(2958465.0,0,S_OK,31,12,9999,0,0,0,0,5,365); /* 31 Dec 9999 - Max */ - DT2UD(2958466.0,0,E_INVALIDARG,0,0,0,0,0,0,0,0,0); /* > 31 Dec 9999 => err */ - - /* VAR_VALIDDATE doesn't prevent upper and lower bounds being checked */ - DT2UD(-657435.0,VAR_VALIDDATE,E_INVALIDARG,0,0,0,0,0,0,0,0,0); - DT2UD(2958466.0,VAR_VALIDDATE,E_INVALIDARG,0,0,0,0,0,0,0,0,0); - - /* Times */ - DT2UD(29221.25,0,S_OK,1,1,1980,6,0,0,0,2,1); /* 6 AM */ - DT2UD(29221.33333333,0,S_OK,1,1,1980,8,0,0,0,2,1); /* 8 AM */ - DT2UD(29221.5,0,S_OK,1,1,1980,12,0,0,0,2,1); /* 12 AM */ - DT2UD(29221.9888884444,0,S_OK,1,1,1980,23,44,0,0,2,1); /* 11:44 PM */ - DT2UD(29221.7508765432,0,S_OK,1,1,1980,18,1,16,0,2,1); /* 6:18:02 PM */ -} - - -static void test_DateFromUDate( int line, WORD d, WORD m, WORD y, WORD h, WORD mn, WORD s, WORD ms, - WORD dw, WORD dy, ULONG flags, HRESULT r, DATE dt ) -{ - UDATE ud; - double out; - HRESULT res; - - ud.st.wYear = y; - ud.st.wMonth = m; - ud.st.wDay = d; - ud.st.wHour = h; - ud.st.wMinute = mn; - ud.st.wSecond = s; - ud.st.wMilliseconds = ms; - ud.st.wDayOfWeek = dw; - ud.wDayOfYear = dy; - res = pVarDateFromUdate(&ud, flags, &out); - ok_(__FILE__,line)(r == res && (FAILED(r) || EQ_DOUBLE(out, dt)), - "expected %x, %.16g, got %x, %.16g\n", r, dt, res, out); -} -#define UD2T(d,m,y,h,mn,s,ms,dw,dy,flags,r,dt) test_DateFromUDate(__LINE__,d,m,y,h,mn,s,ms,dw,dy,flags,r,dt) - -static void test_VarDateFromUdate(void) -{ - CHECKPTR(VarDateFromUdate); - UD2T(1,1,1980,0,0,0,0,2,1,0,S_OK,29221.0); /* 1 Jan 1980 */ - UD2T(2,1,1980,0,0,0,0,3,2,0,S_OK,29222.0); /* 2 Jan 1980 */ - UD2T(31,12,1990,0,0,0,0,0,0,0,S_OK,33238.0); /* 31 Dec 1990 */ - UD2T(31,12,90,0,0,0,0,0,0,0,S_OK,33238.0); /* year < 100 is 1900+year! */ - UD2T(30,12,1899,0,0,0,0,6,364,0,S_OK,0.0); /* 30 Dec 1899 - VT_DATE 0.0 */ - UD2T(1,1,100,0,0,0,0,0,0,0,S_OK,-657434.0); /* 1 Jan 100 - Min */ - UD2T(31,12,9999,0,0,0,0,0,0,0,S_OK,2958465.0); /* 31 Dec 9999 - Max */ - UD2T(1,1,10000,0,0,0,0,0,0,0,E_INVALIDARG,0.0); /* > 31 Dec 9999 => err */ - - UD2T(1,1,1980,18,1,16,0,2,1,0,S_OK,29221.75087962963); /* 6:18:02 PM */ - - UD2T(0,1,1980,0,0,0,0,2,1,0,S_OK,29220.0); /* Rolls back to 31 Dec 1899 */ - UD2T(1,13,1980,0,0,0,0,2,1,0,S_OK,29587.0); /* Rolls fwd to 1/1/1981 */ -} - -static void test_st2dt(int line, WORD d, WORD m, WORD y, WORD h, WORD mn, - WORD s, WORD ms, INT r, double dt) -{ - SYSTEMTIME st; - double out; - INT res; - - st.wYear = y; - st.wMonth = m; - st.wDay = d; - st.wHour = h; - st.wMinute = mn; - st.wSecond = s; - st.wMilliseconds = ms; - st.wDayOfWeek = 0; - res = pSystemTimeToVariantTime(&st, &out); - ok_(__FILE__,line)(r == res && (!r || EQ_DOUBLE(out, dt)), - "expected %d, %.16g, got %d, %.16g\n", r, dt, res, out); -} -#define ST2DT(d,m,y,h,mn,s,ms,r,dt) test_st2dt(__LINE__,d,m,y,h,mn,s,ms,r,dt) - -static void test_SystemTimeToVariantTime(void) -{ - CHECKPTR(SystemTimeToVariantTime); - ST2DT(1,1,1980,0,0,0,0,TRUE,29221.0); - ST2DT(2,1,1980,0,0,0,0,TRUE,29222.0); - ST2DT(0,1,1980,0,0,0,0,TRUE,29220.0); /* Rolls back to 31 Dec 1899 */ - ST2DT(1,13,1980,0,0,0,0,FALSE,29587.0); /* Fails on invalid month */ - ST2DT(31,12,90,0,0,0,0,TRUE,33238.0); /* year < 100 is 1900+year! */ -} - -static void test_dt2st(int line, double dt, INT r, WORD d, WORD m, WORD y, - WORD h, WORD mn, WORD s, WORD ms) -{ - SYSTEMTIME st; - INT res; - - memset(&st, 0, sizeof(st)); - res = pVariantTimeToSystemTime(dt, &st); - ok_(__FILE__,line)(r == res && - (!r || (st.wYear == y && st.wMonth == m && st.wDay == d && - st.wHour == h && st.wMinute == mn && - st.wSecond == s && st.wMilliseconds == ms)), - "%.16g expected %d, %d,%d,%d,%d,%d,%d,%d, got %d, %d,%d,%d,%d,%d,%d,%d\n", - dt, r, d, m, y, h, mn, s, ms, res, st.wDay, st.wMonth, - st.wYear, st.wHour, st.wMinute, st.wSecond, - st.wMilliseconds); -} -#define DT2ST(dt,r,d,m,y,h,mn,s,ms) test_dt2st(__LINE__,dt,r,d,m,y,h,mn,s,ms) - -static void test_VariantTimeToSystemTime(void) -{ - CHECKPTR(VariantTimeToSystemTime); - DT2ST(29221.0,1,1,1,1980,0,0,0,0); - DT2ST(29222.0,1,2,1,1980,0,0,0,0); -} - -#define MKDOSDATE(d,m,y) ((d & 0x1f) | ((m & 0xf) << 5) | (((y-1980) & 0x7f) << 9)) -#define MKDOSTIME(h,m,s) (((s>>1) & 0x1f) | ((m & 0x3f) << 5) | ((h & 0x1f) << 11)) - -static void test_dos2dt(int line, WORD d, WORD m, WORD y, WORD h, WORD mn, - WORD s, INT r, double dt) -{ - unsigned short dosDate, dosTime; - double out; - INT res; - - out = 0.0; - dosDate = MKDOSDATE(d, m, y); - dosTime = MKDOSTIME(h, mn, s); - res = pDosDateTimeToVariantTime(dosDate, dosTime, &out); - ok_(__FILE__,line)(r == res && (!r || EQ_DOUBLE(out, dt)), - "expected %d, %.16g, got %d, %.16g\n", r, dt, res, out); -} -#define DOS2DT(d,m,y,h,mn,s,r,dt) test_dos2dt(__LINE__,d,m,y,h,mn,s,r,dt) - -static void test_DosDateTimeToVariantTime(void) -{ - CHECKPTR(DosDateTimeToVariantTime); - - /* Date */ - DOS2DT(1,1,1980,0,0,0,1,29221.0); /* 1/1/1980 */ - DOS2DT(31,12,2099,0,0,0,1,73050.0); /* 31/12/2099 */ - /* Dates are limited to the dos date max of 31/12/2099 */ - DOS2DT(31,12,2100,0,0,0,0,0.0); /* 31/12/2100 */ - /* Days and months of 0 cause date to roll back 1 day or month */ - DOS2DT(0,1,1980,0,0,0,1,29220.0); /* 0 Day => 31/12/1979 */ - DOS2DT(1,0,1980,0,0,0,1,29190.0); /* 0 Mth => 1/12/1979 */ - DOS2DT(0,0,1980,0,0,0,1,29189.0); /* 0 D/M => 30/11/1979 */ - /* Days > days in the month cause date to roll forward 1 month */ - DOS2DT(29,2,1981,0,0,0,1,29646.0); /* 29/2/1981 -> 3/1/1980 */ - DOS2DT(30,2,1981,0,0,0,1,29647.0); /* 30/2/1981 -> 4/1/1980 */ - /* Takes leap years into account when rolling forward */ - DOS2DT(29,2,1980,0,0,0,1,29280.0); /* 2/29/1980 */ - /* Months > 12 cause an error */ - DOS2DT(2,13,1980,0,0,0,0,0.0); - - /* Time */ - DOS2DT(1,1,1980,0,0,29,1,29221.00032407407); /* 1/1/1980 12:00:28 AM */ - DOS2DT(1,1,1980,0,0,31,1,29221.00034722222); /* 1/1/1980 12:00:30 AM */ - DOS2DT(1,1,1980,0,59,0,1,29221.04097222222); /* 1/1/1980 12:59:00 AM */ - DOS2DT(1,1,1980,0,60,0,0,0.0); /* Invalid seconds */ - DOS2DT(1,1,1980,23,0,0,1,29221.95833333333); /* 1/1/1980 11:00:00 PM */ - DOS2DT(1,1,1980,24,0,0,0,0.0); /* Invalid hours */ -} - -static void test_dt2dos(int line, double dt, INT r, WORD d, WORD m, WORD y, - WORD h, WORD mn, WORD s) -{ - unsigned short dosDate, dosTime, expDosDate, expDosTime; - INT res; - - dosTime = dosDate = 0; - expDosDate = MKDOSDATE(d,m,y); - expDosTime = MKDOSTIME(h,mn,s); - res = pVariantTimeToDosDateTime(dt, &dosDate, &dosTime); - ok_(__FILE__,line)(r == res && (!r || (dosTime == expDosTime && dosDate == expDosDate)), - "%g: expected %d,%d(%d/%d/%d),%d(%d:%d:%d) got %d,%d(%d/%d/%d),%d(%d:%d:%d)\n", - dt, r, expDosDate, expDosDate & 0x1f, - (expDosDate >> 5) & 0xf, 1980 + (expDosDate >> 9), - expDosTime, expDosTime >> 11, (expDosTime >> 5) & 0x3f, - (expDosTime & 0x1f), - res, dosDate, dosDate & 0x1f, (dosDate >> 5) & 0xf, - 1980 + (dosDate >> 9), dosTime, dosTime >> 11, - (dosTime >> 5) & 0x3f, (dosTime & 0x1f)); -} -#define DT2DOS(dt,r,d,m,y,h,mn,s) test_dt2dos(__LINE__,dt,r,d,m,y,h,mn,s) - -static void test_VariantTimeToDosDateTime(void) -{ - CHECKPTR(VariantTimeToDosDateTime); - - /* Date */ - DT2DOS(29221.0,1,1,1,1980,0,0,0); /* 1/1/1980 */ - DT2DOS(73050.0,1,31,12,2099,0,0,0); /* 31/12/2099 */ - DT2DOS(29220.0,0,0,0,0,0,0,0); /* 31/12/1979 - out of range */ - DT2DOS(73415.0,0,0,0,0,0,0,0); /* 31/12/2100 - out of range */ - - /* Time */ - DT2DOS(29221.00032407407,1,1,1,1980,0,0,29); /* 1/1/1980 12:00:28 AM */ - DT2DOS(29221.00034722222,1,1,1,1980,0,0,31); /* 1/1/1980 12:00:30 AM */ - DT2DOS(29221.04097222222,1,1,1,1980,0,59,0); /* 1/1/1980 12:59:00 AM */ - DT2DOS(29221.95833333333,1,1,1,1980,23,0,0); /* 1/1/1980 11:00:00 PM */ -} - -static HRESULT (WINAPI *pVarAbs)(LPVARIANT,LPVARIANT); - -#define VARABS(vt,val,rvt,rval) \ - V_VT(&v) = VT_##vt; V_##vt(&v) = val; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call1( __LINE__, pVarAbs, &v, &exp ) - -static void test_VarAbs(void) -{ - static WCHAR szNum[] = {'-','1','.','1','\0' }; - char buff[8]; - HRESULT hres; - VARIANT v, vDst, exp; - size_t i; - - CHECKPTR(VarAbs); - - /* Test all possible V_VT values. - */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE vt; - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT hExpected = DISP_E_BADVARTYPE; - - SKIPTESTS(vt); - - memset(&v, 0, sizeof(v)); - V_VT(&v) = vt | ExtraFlags[i]; - V_VT(&vDst) = VT_EMPTY; - - hres = pVarAbs(&v,&vDst); - if (ExtraFlags[i] & (VT_ARRAY|VT_ARRAY) || - (!ExtraFlags[i] && (vt == VT_UNKNOWN || vt == VT_BSTR || - vt == VT_DISPATCH || vt == VT_ERROR || vt == VT_RECORD))) - { - hExpected = DISP_E_TYPEMISMATCH; - } - else if (ExtraFlags[i] || vt >= VT_CLSID || vt == VT_VARIANT) - { - hExpected = DISP_E_BADVARTYPE; - } - else if (IsValidVariantClearVT(vt, ExtraFlags[i])) - hExpected = S_OK; - - /* Native always fails on some vartypes that should be valid. don't - * check that Wine does the same; these are bugs in native. - */ - if (vt == VT_I8 || vt == VT_UI8 || vt == VT_INT || vt == VT_UINT || - vt == VT_I1 || vt == VT_UI2 || vt == VT_UI4) - continue; - ok(hres == hExpected, "VarAbs: expected 0x%X, got 0x%X for vt %d | 0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - } - } - - /* BOOL->I2, BSTR->R8, all others remain the same */ - VARABS(BOOL,VARIANT_TRUE,I2,-VARIANT_TRUE); - VARABS(BOOL,VARIANT_FALSE,I2,VARIANT_FALSE); - VARABS(EMPTY,0,I2,0); - VARABS(EMPTY,1,I2,0); - VARABS(NULL,0,NULL,0); - VARABS(NULL,1,NULL,0); - VARABS(I2,1,I2,1); - VARABS(I2,-1,I2,1); - VARABS(I4,1,I4,1); - VARABS(I4,-1,I4,1); - VARABS(UI1,1,UI1,1); - VARABS(R4,1,R4,1); - VARABS(R4,-1,R4,1); - VARABS(R8,1,R8,1); - VARABS(R8,-1,R8,1); - VARABS(DATE,1,DATE,1); - VARABS(DATE,-1,DATE,1); - V_VT(&v) = VT_CY; - V_CY(&v).int64 = -10000; - memset(&vDst,0,sizeof(vDst)); - hres = pVarAbs(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_CY && V_CY(&vDst).int64 == 10000, - "VarAbs(CY): expected 0x0 got 0x%X\n", hres); - GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, buff, sizeof(buff)/sizeof(char)); - if (buff[1]) - { - trace("Skipping VarAbs(BSTR) as decimal separator is '%s'\n", buff); - return; - } else { - szNum[2] = buff[0]; - } - V_VT(&v) = VT_BSTR; - V_BSTR(&v) = (BSTR)szNum; - memset(&vDst,0,sizeof(vDst)); - hres = pVarAbs(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_R8 && V_R8(&vDst) == 1.1, - "VarAbs: expected 0x0,%d,%g, got 0x%X,%d,%g\n", VT_R8, 1.1, hres, V_VT(&vDst), V_R8(&vDst)); -} - -static HRESULT (WINAPI *pVarNot)(LPVARIANT,LPVARIANT); - -#define VARNOT(vt,val,rvt,rval) \ - V_VT(&v) = VT_##vt; V_##vt(&v) = val; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call1( __LINE__, pVarNot, &v, &exp ) - -static void test_VarNot(void) -{ - static const WCHAR szNum0[] = {'0','\0' }; - static const WCHAR szNum1[] = {'1','\0' }; - HRESULT hres; - VARIANT v, exp, vDst; - DECIMAL *pdec = &V_DECIMAL(&v); - CY *pcy = &V_CY(&v); - size_t i; - - CHECKPTR(VarNot); - - /* Test all possible V_VT values */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE vt; - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT hExpected = DISP_E_BADVARTYPE; - - SKIPTESTS(vt); - - memset(&v, 0, sizeof(v)); - V_VT(&v) = vt | ExtraFlags[i]; - V_VT(&vDst) = VT_EMPTY; - - switch (V_VT(&v)) - { - case VT_I1: case VT_UI1: case VT_I2: case VT_UI2: - case VT_INT: case VT_UINT: case VT_I4: case VT_UI4: - case VT_R4: case VT_R8: - case VT_DECIMAL: case VT_BOOL: case VT_NULL: case VT_EMPTY: - case VT_DATE: case VT_CY: - hExpected = S_OK; - break; - case VT_I8: case VT_UI8: - if (HAVE_OLEAUT32_I8) - hExpected = S_OK; - break; - case VT_RECORD: - if (HAVE_OLEAUT32_RECORD) - hExpected = DISP_E_TYPEMISMATCH; - break; - case VT_UNKNOWN: case VT_BSTR: case VT_DISPATCH: case VT_ERROR: - hExpected = DISP_E_TYPEMISMATCH; - break; - default: - if (IsValidVariantClearVT(vt, ExtraFlags[i]) && vt != VT_CLSID) - hExpected = DISP_E_TYPEMISMATCH; - break; - } - - hres = pVarNot(&v,&vDst); - ok(hres == hExpected, "VarNot: expected 0x%X, got 0x%X vt %d|0x%X\n", - hExpected, hres, vt, ExtraFlags[i]); - } - } - /* Test the values returned by all cases that can succeed */ - VARNOT(EMPTY,0,I2,-1); - VARNOT(EMPTY,1,I2,-1); - VARNOT(NULL,0,NULL,0); - VARNOT(NULL,1,NULL,0); - VARNOT(BOOL,VARIANT_TRUE,BOOL,VARIANT_FALSE); - VARNOT(BOOL,VARIANT_FALSE,BOOL,VARIANT_TRUE); - VARNOT(I1,-1,I4,0); - VARNOT(I1,0,I4,-1); - VARNOT(I2,-1,I2,0); - VARNOT(I2,0,I2,-1); - VARNOT(I2,1,I2,-2); - VARNOT(I4,1,I4,-2); - VARNOT(I4,0,I4,-1); - VARNOT(UI1,1,UI1,254); - VARNOT(UI1,0,UI1,255); - VARNOT(UI2,0,I4,-1); - VARNOT(UI2,1,I4,-2); - VARNOT(UI4,0,I4,-1); - VARNOT(UI4,1,I4,-2); - VARNOT(INT,0,I4,-1); - VARNOT(INT,1,I4,-2); - VARNOT(UINT,0,I4,-1); - VARNOT(UINT,1,I4,-2); - if (HAVE_OLEAUT32_I8) - { - VARNOT(I8,1,I8,-2); - VARNOT(I8,0,I8,-1); - VARNOT(UI8,0,I4,-1); - VARNOT(UI8,1,I4,-2); - } - VARNOT(R4,1,I4,-2); - VARNOT(R4,0,I4,-1); - VARNOT(R8,1,I4,-2); - VARNOT(R8,0,I4,-1); - VARNOT(DATE,1,I4,-2); - VARNOT(DATE,0,I4,-1); - VARNOT(BSTR,(BSTR)szNum0,I4,-1); - ok(V_VT(&v) == VT_BSTR && V_BSTR(&v) == szNum0, "VarNot(0): changed input\n"); - VARNOT(BSTR,(BSTR)szNum1,I4,-2); - ok(V_VT(&v) == VT_BSTR && V_BSTR(&v) == szNum1, "VarNot(1): changed input\n"); - - V_VT(&v) = VT_DECIMAL; - S(U(*pdec)).sign = DECIMAL_NEG; - S(U(*pdec)).scale = 0; - pdec->Hi32 = 0; - S1(U1(*pdec)).Mid32 = 0; - S1(U1(*pdec)).Lo32 = 1; - VARNOT(DECIMAL,*pdec,I4,0); - - pcy->int64 = 10000; - VARNOT(CY,*pcy,I4,-2); - - pcy->int64 = 0; - VARNOT(CY,*pcy,I4,-1); - - pcy->int64 = -1; - VARNOT(CY,*pcy,I4,-1); -} - -static HRESULT (WINAPI *pVarSub)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARSUB(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarSub, &left, &right, &exp ) - -static void test_VarSub(void) -{ - static const WCHAR sz12[] = {'1','2','\0'}; - VARIANT left, right, exp, result, cy, dec; - VARTYPE i; - BSTR lbstr, rbstr; - HRESULT hres, expectedhres; - double r; - - CHECKPTR(VarSub); - - lbstr = SysAllocString(sz12); - rbstr = SysAllocString(sz12); - - VariantInit(&left); - VariantInit(&right); - VariantInit(&result); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - - SKIPTESTS(leftvt); - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - - SKIPTESTS(rightvt); - expectedhres = S_OK; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - if (leftvt == VT_BSTR) - V_BSTR(&left) = lbstr; - V_VT(&right) = rightvt | ExtraFlags[i]; - if (rightvt == VT_BSTR) - V_BSTR(&right) = rbstr; - V_VT(&result) = VT_EMPTY; - resvt = VT_ERROR; - - /* All extra flags produce errors */ - if (ExtraFlags[i] == (VT_VECTOR|VT_BYREF|VT_RESERVED) || - ExtraFlags[i] == (VT_VECTOR|VT_RESERVED) || - ExtraFlags[i] == (VT_VECTOR|VT_BYREF) || - ExtraFlags[i] == (VT_BYREF|VT_RESERVED) || - ExtraFlags[i] == VT_VECTOR || - ExtraFlags[i] == VT_BYREF || - ExtraFlags[i] == VT_RESERVED) - { - expectedhres = DISP_E_BADVARTYPE; - resvt = VT_EMPTY; - } - else if (ExtraFlags[i] >= VT_ARRAY) - { - expectedhres = DISP_E_TYPEMISMATCH; - resvt = VT_EMPTY; - } - /* Native VarSub cannot handle: VT_I1, VT_UI2, VT_UI4, - VT_INT, VT_UINT and VT_UI8. Tested with WinXP */ - else if (!IsValidVariantClearVT(leftvt, ExtraFlags[i]) || - !IsValidVariantClearVT(rightvt, ExtraFlags[i]) || - 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) - expectedhres = DISP_E_TYPEMISMATCH; - else if (leftvt < VT_UI1 && rightvt == VT_RECORD) - expectedhres = DISP_E_TYPEMISMATCH; - else if (leftvt >= VT_UI1 && rightvt == VT_RECORD) - expectedhres = DISP_E_TYPEMISMATCH; - else if (leftvt == VT_RECORD && rightvt <= VT_UI1) - expectedhres = DISP_E_TYPEMISMATCH; - else if (leftvt == VT_RECORD && rightvt > VT_UI1) - expectedhres = DISP_E_BADVARTYPE; - else - expectedhres = DISP_E_BADVARTYPE; - resvt = VT_EMPTY; - } - 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) - { - resvt = VT_EMPTY; - expectedhres = DISP_E_TYPEMISMATCH; - } - 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 - { - resvt = VT_EMPTY; - expectedhres = DISP_E_TYPEMISMATCH; - } - - hres = pVarSub(&left, &right, &result); - - ok(hres == expectedhres && V_VT(&result) == resvt, - "VarSub: %d|0x%X, %d|0x%X: Expected failure 0x%X, " - "got 0x%X, expected vt %d got vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], - expectedhres, hres, resvt, V_VT(&result)); - } - } - } - - /* Test returned values */ - VARSUB(I4,4,I4,2,I4,2); - VARSUB(I2,4,I2,2,I2,2); - VARSUB(I2,-13,I4,5,I4,-18); - VARSUB(I4,-13,I4,5,I4,-18); - VARSUB(I2,7,R4,0.5f,R4,6.5f); - VARSUB(R4,0.5f,I4,5,R8,-4.5); - VARSUB(R8,7.1,BOOL,0,R8,7.1); - VARSUB(BSTR,lbstr,I2,4,R8,8); - VARSUB(BSTR,lbstr,BOOL,1,R8,11); - VARSUB(BSTR,lbstr,R4,0.1f,R8,11.9); - VARSUB(R4,0.2f,BSTR,rbstr,R8,-11.8); - VARSUB(DATE,2.25,I4,7,DATE,-4.75); - VARSUB(DATE,1.25,R4,-1.7f,DATE,2.95); - - VARSUB(UI1, UI1_MAX, UI1, UI1_MAX, UI1, 0); - VARSUB(I2, I2_MAX, I2, I2_MAX, I2, 0); - VARSUB(I2, I2_MIN, I2, I2_MIN, I2, 0); - VARSUB(I4, I4_MAX, I4, I4_MAX, I4, 0); - VARSUB(I4, I4_MIN, I4, I4_MIN, I4, 0); - VARSUB(R4, R4_MAX, R4, R4_MAX, R4, 0.0f); - VARSUB(R4, R4_MAX, R4, R4_MIN, R4, R4_MAX - R4_MIN); - VARSUB(R4, R4_MIN, R4, R4_MIN, R4, 0.0f); - VARSUB(R8, R8_MAX, R8, R8_MIN, R8, R8_MAX - R8_MIN); - VARSUB(R8, R8_MIN, R8, R8_MIN, R8, 0.0); - - /* Manually test BSTR + BSTR */ - V_VT(&left) = VT_BSTR; - V_BSTR(&left) = lbstr; - V_VT(&right) = VT_BSTR; - V_BSTR(&right) = rbstr; - hres = VarSub(&left, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VarSub: expected coerced type VT_R8, got %s!\n", vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 0), - "VarSub: BSTR + BSTR, expected %f got %f\n", 0.0, V_R8(&result)); - - /* Manually test some VT_CY and VT_DECIMAL variants */ - V_VT(&cy) = VT_CY; - hres = VarCyFromI4(4711, &V_CY(&cy)); - ok(hres == S_OK, "VarCyFromI4 failed!\n"); - V_VT(&dec) = VT_DECIMAL; - hres = VarDecFromR8(-4.2, &V_DECIMAL(&dec)); - ok(hres == S_OK, "VarDecFromR4 failed!\n"); - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = VT_I4; - V_I4(&left) = -11; - V_VT(&right) = VT_UI1; - V_UI1(&right) = 9; - - hres = VarSub(&cy, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_CY, - "VarSub: expected coerced type VT_CY, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromCy(V_CY(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, 4702), - "VarSub: CY value %f, expected %f\n", r, (double)4720); - - hres = VarSub(&left, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_DECIMAL, - "VarSub: expected coerced type VT_DECIMAL, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromDec(&V_DECIMAL(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, -6.8), - "VarSub: DECIMAL value %f, expected %f\n", r, (double)-15.2); - - SysFreeString(lbstr); - SysFreeString(rbstr); -} - -static HRESULT (WINAPI *pVarMod)(LPVARIANT,LPVARIANT,LPVARIANT); - -static void test_Mod( int line, VARIANT *left, VARIANT *right, VARIANT *expected, HRESULT expres ) -{ - VARIANT result; - HRESULT hres; - - memset( &result, 0, sizeof(result) ); - hres = pVarMod( left, right, &result ); - ok_(__FILE__,line)( hres == expres, "wrong result %x/%x\n", hres, expres ); - if (hres == S_OK) - ok_(__FILE__,line)( is_expected_variant( &result, expected ), - "got %s expected %s\n", variantstr(&result), variantstr(expected) ); -} - -#define VARMOD(vt1,vt2,val1,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarMod, &left, &right, &exp ) - -#define VARMOD2(vt1,vt2,val1,val2,rvt,rval,hexpected) \ - V_VT(&left) = VT_##vt1; V_I4(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_I4(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_I4(&exp) = rval; \ - test_Mod( __LINE__, &left, &right, &exp, hexpected ) - -static void test_VarMod(void) -{ - VARIANT v1, v2, vDst, left, right, exp; - HRESULT hres; - HRESULT hexpected = 0; - static const WCHAR szNum0[] = {'1','2','5','\0'}; - static const WCHAR szNum1[] = {'1','0','\0'}; - int l, r; - BOOL lFound, rFound; - BOOL lValid, rValid; - BSTR strNum0, strNum1; - - CHECKPTR(VarMod); - - VARMOD(I1,BOOL,100,10,I4,0); - VARMOD(I1,I1,100,10,I4,0); - VARMOD(I1,UI1,100,10,I4,0); - VARMOD(I1,I2,100,10,I4,0); - VARMOD(I1,UI2,100,10,I4,0); - VARMOD(I1,I4,100,10,I4,0); - VARMOD(I1,UI4,100,10,I4,0); - VARMOD(I1,R4,100,10,I4,0); - VARMOD(I1,R8,100,10,I4,0); - - VARMOD(UI1,BOOL,100,10,I2,0); - VARMOD(UI1,I1,100,10,I4,0); - VARMOD(UI1,UI1,100,10,UI1,0); - VARMOD(UI1,I2,100,10,I2,0); - VARMOD(UI1,UI2,100,10,I4,0); - VARMOD(UI1,I4,100,10,I4,0); - VARMOD(UI1,UI4,100,10,I4,0); - VARMOD(UI1,R4,100,10,I4,0); - VARMOD(UI1,R8,100,10,I4,0); - - VARMOD(I2,BOOL,100,10,I2,0); - VARMOD(I2,I1,100,10,I4,0); - VARMOD(I2,UI1,100,10,I2,0); - VARMOD(I2,I2,100,10,I2,0); - VARMOD(I2,UI2,100,10,I4,0); - VARMOD(I2,I4,100,10,I4,0); - VARMOD(I2,UI4,100,10,I4,0); - VARMOD(I2,R4,100,10,I4,0); - VARMOD(I2,R8,100,10,I4,0); - - VARMOD(I4,BOOL,100,10,I4,0); - VARMOD(I4,I1,100,10,I4,0); - VARMOD(I4,UI1,100,10,I4,0); - VARMOD(I4,I2,100,10,I4,0); - VARMOD(I4,UI2,100,10,I4,0); - VARMOD(I4,I4,100,10,I4,0); - VARMOD(I4,UI4,100,10,I4,0); - VARMOD(I4,R4,100,10,I4,0); - VARMOD(I4,R8,100,10,I4,0); - VARMOD(UI4,BOOL,100,10,I4,0); - VARMOD(UI4,I1,100,10,I4,0); - VARMOD(UI4,UI1,100,10,I4,0); - VARMOD(UI4,I2,100,10,I4,0); - VARMOD(UI4,UI2,100,10,I4,0); - VARMOD(UI4,I4,100,10,I4,0); - VARMOD(UI4,UI4,100,10,I4,0); - VARMOD(UI4,R4,100,10,I4,0); - VARMOD(UI4,R8,100,10,I4,0); - VARMOD(R4,BOOL,100,10,I4,0); - VARMOD(R4,I1,100,10,I4,0); - VARMOD(R4,UI1,100,10,I4,0); - VARMOD(R4,I2,100,10,I4,0); - VARMOD(R4,UI2,100,10,I4,0); - VARMOD(R4,I4,100,10,I4,0); - VARMOD(R4,UI4,100,10,I4,0); - VARMOD(R4,R4,100,10,I4,0); - VARMOD(R4,R8,100,10,I4,0); - VARMOD(R8,BOOL,100,10,I4,0); - VARMOD(R8,I1,100,10,I4,0); - VARMOD(R8,UI1,100,10,I4,0); - VARMOD(R8,I2,100,10,I4,0); - VARMOD(R8,UI2,100,10,I4,0); - VARMOD(R8,I4,100,10,I4,0); - VARMOD(R8,UI4,100,10,I4,0); - VARMOD(R8,R4,100,10,I4,0); - VARMOD(R8,R8,100,10,I4,0); - - VARMOD(INT,INT,100,10,I4,0); - VARMOD(INT,UINT,100,10,I4,0); - - VARMOD(BOOL,BOOL,100,10,I2,0); - VARMOD(BOOL,I1,100,10,I4,0); - VARMOD(BOOL,UI1,100,10,I2,0); - VARMOD(BOOL,I2,100,10,I2,0); - VARMOD(BOOL,UI2,100,10,I4,0); - VARMOD(BOOL,I4,100,10,I4,0); - VARMOD(BOOL,UI4,100,10,I4,0); - VARMOD(BOOL,R4,100,10,I4,0); - VARMOD(BOOL,R8,100,10,I4,0); - VARMOD(BOOL,DATE,100,10,I4,0); - - VARMOD(DATE,BOOL,100,10,I4,0); - VARMOD(DATE,I1,100,10,I4,0); - VARMOD(DATE,UI1,100,10,I4,0); - VARMOD(DATE,I2,100,10,I4,0); - VARMOD(DATE,UI2,100,10,I4,0); - VARMOD(DATE,I4,100,10,I4,0); - VARMOD(DATE,UI4,100,10,I4,0); - VARMOD(DATE,R4,100,10,I4,0); - VARMOD(DATE,R8,100,10,I4,0); - VARMOD(DATE,DATE,100,10,I4,0); - - strNum0 = SysAllocString(szNum0); - strNum1 = SysAllocString(szNum1); - VARMOD(BSTR,BSTR,strNum0,strNum1,I4,5); - VARMOD(BSTR,I1,strNum0,10,I4,5); - VARMOD(BSTR,I2,strNum0,10,I4,5); - VARMOD(BSTR,I4,strNum0,10,I4,5); - VARMOD(BSTR,R4,strNum0,10,I4,5); - VARMOD(BSTR,R8,strNum0,10,I4,5); - VARMOD(I4,BSTR,125,strNum1,I4,5); - - if (HAVE_OLEAUT32_I8) - { - VARMOD(BOOL,I8,100,10,I8,0); - VARMOD(I1,I8,100,10,I8,0); - VARMOD(UI1,I8,100,10,I8,0); - VARMOD(I2,I8,100,10,I8,0); - VARMOD(I4,I8,100,10,I8,0); - VARMOD(UI4,I8,100,10,I8,0); - VARMOD(R4,I8,100,10,I8,0); - VARMOD(R8,I8,100,10,I8,0); - VARMOD(DATE,I8,100,10,I8,0); - - VARMOD(I8,BOOL,100,10,I8,0); - VARMOD(I8,I1,100,10,I8,0); - VARMOD(I8,UI1,100,10,I8,0); - VARMOD(I8,I2,100,10,I8,0); - VARMOD(I8,UI2,100,10,I8,0); - VARMOD(I8,I4,100,10,I8,0); - VARMOD(I8,UI4,100,10,I8,0); - VARMOD(I8,R4,100,10,I8,0); - VARMOD(I8,R8,100,10,I8,0); - VARMOD(I8,I8,100,10,I8,0); - - VARMOD(BSTR,I8,strNum0,10,I8,5); - } - - /* test all combinations of types */ - for(l = 0; l < VT_BSTR_BLOB; l++) - { - SKIPTESTS(l); - - for(r = 0; r < VT_BSTR_BLOB; r++) - { - SKIPTESTS(r); - - if(l == VT_BSTR) continue; - if(l == VT_DISPATCH) continue; - if(r == VT_BSTR) continue; - if(r == VT_DISPATCH) continue; - - lFound = TRUE; - lValid = TRUE; - switch(l) - { - case VT_EMPTY: - case VT_NULL: - case VT_I1: - case VT_UI1: - case VT_I2: - case VT_UI2: - case VT_I4: - case VT_I8: - case VT_UI4: - case VT_UI8: - case VT_INT: - case VT_UINT: - case VT_R4: - case VT_R8: - case VT_BOOL: - case VT_DATE: - case VT_CY: - case VT_DECIMAL: - hexpected = S_OK; - break; - case VT_ERROR: - case VT_VARIANT: - case VT_UNKNOWN: - case VT_RECORD: - lValid = FALSE; - break; - default: - lFound = FALSE; - hexpected = DISP_E_BADVARTYPE; - break; - } - - rFound = TRUE; - rValid = TRUE; - switch(r) - { - case VT_EMPTY: - case VT_NULL: - case VT_I1: - case VT_UI1: - case VT_I2: - case VT_UI2: - case VT_I4: - case VT_I8: - case VT_UI4: - case VT_UI8: - case VT_INT: - case VT_UINT: - case VT_R4: - case VT_R8: - case VT_BOOL: - case VT_DATE: - case VT_DECIMAL: - case VT_CY: - hexpected = S_OK; - break; - case VT_ERROR: - case VT_VARIANT: - case VT_UNKNOWN: - case VT_RECORD: - rValid = FALSE; - break; - default: - rFound = FALSE; - break; - } - - if(((l == VT_I8) && (r == VT_INT)) || ((l == VT_INT) && (r == VT_I8))) - { - hexpected = DISP_E_TYPEMISMATCH; - } else if((l == VT_EMPTY) && (r == VT_NULL)) - { - hexpected = S_OK; - } else if((l == VT_NULL) && (r == VT_EMPTY)) - { - hexpected = S_OK; - } else if((l == VT_EMPTY) && (r == VT_CY)) - { - hexpected = S_OK; - } else if((l == VT_EMPTY) && (r == VT_RECORD)) - { - hexpected = DISP_E_TYPEMISMATCH; - } else if((r == VT_EMPTY) && lFound && lValid) - { - hexpected = DISP_E_DIVBYZERO; - } else if((l == VT_ERROR) || ((r == VT_ERROR) && lFound && lValid)) - { - hexpected = DISP_E_TYPEMISMATCH; - } else if((l == VT_NULL) && (r == VT_NULL)) - { - hexpected = S_OK; - } else if((l == VT_VARIANT) || ((r == VT_VARIANT) && lFound && lValid)) - { - hexpected = DISP_E_TYPEMISMATCH; - } else if((l == VT_NULL) && (r == VT_RECORD)) - { - hexpected = DISP_E_TYPEMISMATCH; - } else if((l == VT_I8) && (r == VT_DECIMAL)) - { - hexpected = S_OK; - } else if((l == VT_DECIMAL) && (r == VT_I8)) - { - hexpected = S_OK; - } else if((l == VT_UNKNOWN) || ((r == VT_UNKNOWN) && lFound && lValid)) - { - hexpected = DISP_E_TYPEMISMATCH; - } else if((l == VT_NULL) && rFound) - { - hexpected = S_OK; - } else if(l == VT_RECORD) - { - hexpected = DISP_E_TYPEMISMATCH; - } else if((r == VT_RECORD) && lValid && lFound) - { - hexpected = DISP_E_TYPEMISMATCH; - } else if((l == VT_EMPTY) && (r == VT_EMPTY)) - { - hexpected = DISP_E_DIVBYZERO; - } else if((l == VT_CY) && !rFound) - { - hexpected = DISP_E_BADVARTYPE; - } else if(lFound && !rFound) - { - hexpected = DISP_E_BADVARTYPE; - } else if(!lFound && rFound) - { - hexpected = DISP_E_BADVARTYPE; - } else if((r == VT_NULL) && lFound && lValid) - { - hexpected = S_OK; - } else if((l == VT_NULL) || (r == VT_NULL)) - { - hexpected = DISP_E_BADVARTYPE; - } else if((l == VT_VARIANT) || (r == VT_VARIANT)) - { - hexpected = DISP_E_BADVARTYPE; - } else if(lFound && !rFound) - { - hexpected = DISP_E_BADVARTYPE; - } else if(!lFound && !rFound) - { - hexpected = DISP_E_BADVARTYPE; - } - - V_VT(&v1) = l; - V_VT(&v2) = r; - - if(l == VT_CY) - V_CY(&v1).int64 = 1000000; - else if(l == VT_R4) - V_R4(&v1) = 100; - else if(l == VT_R8) - V_R8(&v1) = 100; - else if(l == VT_UI8) - V_UI8(&v1) = 100; - else if(l == VT_I8) - V_I8(&v1) = 100; - else if(l == VT_DATE) - V_DATE(&v1) = 1000; - else if (l == VT_DECIMAL) - { - V_DECIMAL(&v1).Hi32 = 0; - U1(V_DECIMAL(&v1)).Lo64 = 100; - U(V_DECIMAL(&v1)).signscale = 0; - } - else - V_I4(&v1) = 10000; - - if(r == VT_CY) - V_CY(&v2).int64 = 10000; - else if(r == VT_R4) - V_R4(&v2) = 100; - else if(r == VT_R8) - V_R8(&v2) = 100; - else if(r == VT_UI8) - V_UI8(&v2) = 100; - else if(r == VT_I8) - V_I8(&v2) = 100; - else if(r == VT_DATE) - V_DATE(&v2) = 1000; - else if (r == VT_DECIMAL) - { - V_DECIMAL(&v2).Hi32 = 0; - U1(V_DECIMAL(&v2)).Lo64 = 100; - U(V_DECIMAL(&v2)).signscale = 0; - } - else - V_I4(&v2) = 10000; - - if ((l != VT_I8 && l != VT_UI8 && r != VT_I8 && r != VT_UI8) || HAVE_OLEAUT32_I8) - { - hres = pVarMod(&v1,&v2,&vDst); - ok(hres == hexpected, - "VarMod: expected 0x%x, got 0x%X for l type of %d, r type of %d,\n", hexpected, hres, l, r); - } - } - } - - - /****************************/ - /* test some bad parameters */ - VARMOD(I4,I4,-1,-1,I4,0); - - /* test modulus with zero */ - VARMOD2(I4,I4,100,0,EMPTY,0,DISP_E_DIVBYZERO); - - VARMOD(I4,I4,0,10,I4,0); /* test 0 mod 10 */ - - /* right parameter is type empty */ - VARMOD2(I4,EMPTY,100,10,EMPTY,0,DISP_E_DIVBYZERO); - - /* left parameter is type empty */ - VARMOD2(EMPTY,I4,100,10,I4,0,S_OK); - - /* mod with a null left value */ - VARMOD2(NULL,I4,125,10,NULL,0,S_OK); - - /* mod with a null right value */ - VARMOD2(I4,NULL,100,10,NULL,0,S_OK); - - /* void left value */ - VARMOD2(VOID,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - - /* void right value */ - VARMOD2(I4,VOID,100,10,EMPTY,0,DISP_E_BADVARTYPE); - - /* null left value, void right value */ - VARMOD2(NULL,VOID,100,10,EMPTY, 0, DISP_E_BADVARTYPE); - - /* void left value, null right value */ - VARMOD2(VOID,NULL,100,10,EMPTY,0,DISP_E_BADVARTYPE); - - /* some currencies */ - V_VT(&v1) = VT_CY; - V_VT(&v2) = VT_CY; - V_CY(&v1).int64 = 100000; - V_CY(&v2).int64 = 100000; - hres = pVarMod(&v1,&v2,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_I4 && V_I4(&vDst) == 0, - "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n", S_OK, VT_I4, 0, hres, V_VT(&vDst), V_I4(&vDst)); - - V_VT(&v1) = VT_I4; - V_VT(&v2) = VT_CY; - V_I4(&v1) = 100; - V_CY(&v2).int64 = 100000; - hres = pVarMod(&v1,&v2,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_I4 && V_I4(&vDst) == 0, - "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n", S_OK, VT_I4, 0, hres, V_VT(&vDst), V_I4(&vDst)); - - /* some decimals */ - V_VT(&v1) = VT_DECIMAL; - V_VT(&v2) = VT_DECIMAL; - VarDecFromI4(100, &V_DECIMAL(&v1)); - VarDecFromI4(10, &V_DECIMAL(&v2)); - hres = pVarMod(&v1,&v2,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_I4 && V_I4(&vDst) == 0, - "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n", S_OK, VT_I4, 0, hres, V_VT(&vDst), V_I4(&vDst)); - - V_VT(&v1) = VT_I4; - V_VT(&v2) = VT_DECIMAL; - V_I4(&v1) = 100; - VarDecFromI4(10, &V_DECIMAL(&v2)); - hres = pVarMod(&v1,&v2,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_I4 && V_I4(&vDst) == 0, - "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n", S_OK, VT_I4, 0, hres, V_VT(&vDst), V_I4(&vDst)); - - VARMOD2(UINT,I4,100,10,I4,0,S_OK); - - /* test that an error results in the type of the result changing but not its value */ - V_VT(&v1) = VT_UNKNOWN; - V_VT(&v2) = VT_EMPTY; - V_I4(&v1) = 100; - V_CY(&v2).int64 = 100000; - V_VT(&vDst) = VT_I4; - V_I4(&vDst) = 1231; - hres = pVarMod(&v1,&v2,&vDst); - ok(hres == DISP_E_TYPEMISMATCH && V_VT(&vDst) == VT_EMPTY && V_I4(&vDst) == 1231, - "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n", DISP_E_TYPEMISMATCH, VT_EMPTY, 1231, hres, V_VT(&vDst), V_I4(&vDst)); - - - /* test some invalid types */ - /*TODO: not testing VT_DISPATCH */ - if (HAVE_OLEAUT32_I8) - { - VARMOD2(I8,INT,100,10,EMPTY,0,DISP_E_TYPEMISMATCH); - } - VARMOD2(ERROR,I4,100,10,EMPTY,0,DISP_E_TYPEMISMATCH); - VARMOD2(VARIANT,I4,100,10,EMPTY,0,DISP_E_TYPEMISMATCH); - VARMOD2(UNKNOWN,I4,100,10,EMPTY,0,DISP_E_TYPEMISMATCH); - VARMOD2(VOID,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(HRESULT,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(PTR,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(SAFEARRAY,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(CARRAY,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(USERDEFINED,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(LPSTR,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(LPWSTR,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(RECORD,I4,100,10,EMPTY,0,DISP_E_TYPEMISMATCH); - VARMOD2(FILETIME,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(BLOB,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(STREAM,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(STORAGE,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(STREAMED_OBJECT,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(STORED_OBJECT,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(BLOB_OBJECT,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(CF,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(CLSID,CLSID,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(VECTOR,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(ARRAY,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - VARMOD2(BYREF,I4,100,10,EMPTY,0,DISP_E_BADVARTYPE); - - /* test some more invalid types */ - V_VT(&v1) = 456; - V_VT(&v2) = 234; - V_I4(&v1) = 100; - V_I4(&v2)= 10; - hres = pVarMod(&v1,&v2,&vDst); - ok(hres == DISP_E_BADVARTYPE && V_VT(&vDst) == VT_EMPTY, - "VarMod: expected 0x%x,%d, got 0x%X,%d\n", DISP_E_BADVARTYPE, VT_EMPTY, hres, V_VT(&vDst)); -} - -static HRESULT (WINAPI *pVarFix)(LPVARIANT,LPVARIANT); - -#define VARFIX(vt,val,rvt,rval) \ - V_VT(&v) = VT_##vt; V_##vt(&v) = val; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call1( __LINE__, pVarFix, &v, &exp ) - -static void test_VarFix(void) -{ - static const WCHAR szNumMinus1[] = {'-','1','\0' }; - HRESULT hres; - VARIANT v, exp, vDst; - DECIMAL *pdec = &V_DECIMAL(&v); - CY *pcy = &V_CY(&v); - size_t i; - - CHECKPTR(VarFix); - - /* Test all possible V_VT values */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE vt; - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT bFail = TRUE; - - SKIPTESTS(vt); - - memset(&v, 0, sizeof(v)); - V_VT(&v) = vt | ExtraFlags[i]; - V_VT(&vDst) = VT_EMPTY; - - switch (V_VT(&v)) - { - case VT_UI1: case VT_I2: case VT_I4: case VT_R4: case VT_R8: - case VT_DECIMAL: case VT_BOOL: case VT_NULL: case VT_EMPTY: - case VT_DATE: case VT_CY: - bFail = FALSE; - break; - case VT_I8: - if (HAVE_OLEAUT32_I8) - bFail = FALSE; - break; - } - - hres = pVarFix(&v,&vDst); - if (bFail) - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarFix: expected failure, got 0x%X vt %d|0x%X\n", - hres, vt, ExtraFlags[i]); - else - ok(hres == S_OK, "VarFix: expected S_OK, got 0x%X vt %d|0x%X\n", - hres, vt, ExtraFlags[i]); - } - } - - VARFIX(BOOL,VARIANT_TRUE,I2,VARIANT_TRUE); - VARFIX(BOOL,VARIANT_FALSE,I2,0); - VARFIX(BOOL,1,I2,1); - VARFIX(UI1,1,UI1,1); - VARFIX(I2,-1,I2,-1); - VARFIX(I4,-1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARFIX(I8,-1,I8,-1); - } - VARFIX(R4,1.4f,R4,1); - VARFIX(R4,1.5f,R4,1); - VARFIX(R4,1.6f,R4,1); - VARFIX(R4,-1.4f,R4,-1); - VARFIX(R4,-1.5f,R4,-1); - VARFIX(R4,-1.6f,R4,-1); - /* DATE & R8 round as for R4 */ - VARFIX(DATE,-1,DATE,-1); - VARFIX(R8,-1,R8,-1); - VARFIX(BSTR,(BSTR)szNumMinus1,R8,-1); - - V_VT(&v) = VT_EMPTY; - hres = pVarFix(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_I2 && V_I2(&vDst) == 0, - "VarFix: expected 0x0,%d,0 got 0x%X,%d,%d\n", VT_EMPTY, - hres, V_VT(&vDst), V_I2(&vDst)); - - V_VT(&v) = VT_NULL; - hres = pVarFix(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_NULL, - "VarFix: expected 0x0,%d got 0x%X,%d\n", VT_NULL, hres, V_VT(&vDst)); - - V_VT(&v) = VT_DECIMAL; - S(U(*pdec)).sign = DECIMAL_NEG; - S(U(*pdec)).scale = 0; - pdec->Hi32 = 0; - S1(U1(*pdec)).Mid32 = 0; - S1(U1(*pdec)).Lo32 = 1; - hres = pVarFix(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && !memcmp(&v, &vDst, sizeof(v)), - "VarFix: expected 0x0,%d,identical, got 0x%X,%d\n", VT_DECIMAL, - hres, V_VT(&vDst)); - - /* FIXME: Test some fractional decimals when VarDecFix is implemented */ - - V_VT(&v) = VT_CY; - pcy->int64 = -10000; - hres = pVarFix(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_CY && V_CY(&vDst).int64 == -10000, - "VarFix: VT_CY wrong, hres=0x%X\n", hres); - - V_VT(&v) = VT_CY; - pcy->int64 = -16000; - hres = pVarFix(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_CY && V_CY(&vDst).int64 == -10000, - "VarFix: VT_CY wrong, hres=0x%X\n", hres); -} - -static HRESULT (WINAPI *pVarInt)(LPVARIANT,LPVARIANT); - -#define VARINT(vt,val,rvt,rval) \ - V_VT(&v) = VT_##vt; V_##vt(&v) = val; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call1( __LINE__, pVarInt, &v, &exp ) - -static void test_VarInt(void) -{ - static const WCHAR szNumMinus1[] = {'-','1','\0' }; - HRESULT hres; - VARIANT v, exp, vDst; - DECIMAL *pdec = &V_DECIMAL(&v); - CY *pcy = &V_CY(&v); - size_t i; - - CHECKPTR(VarInt); - - /* Test all possible V_VT values */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE vt; - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT bFail = TRUE; - - SKIPTESTS(vt); - - memset(&v, 0, sizeof(v)); - V_VT(&v) = vt | ExtraFlags[i]; - V_VT(&vDst) = VT_EMPTY; - - switch (V_VT(&v)) - { - case VT_UI1: case VT_I2: case VT_I4: case VT_R4: case VT_R8: - case VT_DECIMAL: case VT_BOOL: case VT_NULL: case VT_EMPTY: - case VT_DATE: case VT_CY: - bFail = FALSE; - break; - case VT_I8: - if (HAVE_OLEAUT32_I8) - bFail = FALSE; - break; - } - - hres = pVarInt(&v,&vDst); - if (bFail) - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarInt: expected failure, got 0x%X vt %d|0x%X\n", - hres, vt, ExtraFlags[i]); - else - ok(hres == S_OK, "VarInt: expected S_OK, got 0x%X vt %d|0x%X\n", - hres, vt, ExtraFlags[i]); - } - } - - VARINT(BOOL,VARIANT_TRUE,I2,VARIANT_TRUE); - VARINT(BOOL,VARIANT_FALSE,I2,0); - VARINT(BOOL,1,I2,1); - VARINT(UI1,1,UI1,1); - VARINT(I2,-1,I2,-1); - VARINT(I4,-1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARINT(I8,-1,I8,-1); - } - VARINT(R4,1.4f,R4,1); - VARINT(R4,1.5f,R4,1); - VARINT(R4,1.6f,R4,1); - VARINT(R4,-1.4f,R4,-2); /* Note these 3 are different from VarFix */ - VARINT(R4,-1.5f,R4,-2); - VARINT(R4,-1.6f,R4,-2); - /* DATE & R8 round as for R4 */ - VARINT(DATE,-1,DATE,-1); - VARINT(R8,-1,R8,-1); - VARINT(BSTR,(BSTR)szNumMinus1,R8,-1); - - V_VT(&v) = VT_EMPTY; - hres = pVarInt(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_I2 && V_I2(&vDst) == 0, - "VarInt: expected 0x0,%d,0 got 0x%X,%d,%d\n", VT_EMPTY, - hres, V_VT(&vDst), V_I2(&vDst)); - - V_VT(&v) = VT_NULL; - hres = pVarInt(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_NULL, - "VarInt: expected 0x0,%d got 0x%X,%d\n", VT_NULL, hres, V_VT(&vDst)); - - V_VT(&v) = VT_DECIMAL; - S(U(*pdec)).sign = DECIMAL_NEG; - S(U(*pdec)).scale = 0; - pdec->Hi32 = 0; - S1(U1(*pdec)).Mid32 = 0; - S1(U1(*pdec)).Lo32 = 1; - hres = pVarInt(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && !memcmp(&v, &vDst, sizeof(v)), - "VarInt: expected 0x0,%d,identical, got 0x%X,%d\n", VT_DECIMAL, - hres, V_VT(&vDst)); - - /* FIXME: Test some fractional decimals when VarDecInt is implemented */ - - V_VT(&v) = VT_CY; - pcy->int64 = -10000; - hres = pVarInt(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_CY && V_CY(&vDst).int64 == -10000, - "VarInt: VT_CY wrong, hres=0x%X\n", hres); - - V_VT(&v) = VT_CY; - pcy->int64 = -11000; - hres = pVarInt(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_CY && V_CY(&vDst).int64 == -20000, - "VarInt: VT_CY wrong, hres=0x%X 0x%x%08x\n", - hres, (DWORD)(V_CY(&vDst).int64 >> 32), (DWORD)V_CY(&vDst).int64); -} - -static HRESULT (WINAPI *pVarNeg)(LPVARIANT,LPVARIANT); - -#define VARNEG(vt,val,rvt,rval) \ - V_VT(&v) = VT_##vt; V_##vt(&v) = val; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call1( __LINE__, pVarNeg, &v, &exp ) - -static void test_VarNeg(void) -{ - static const WCHAR szNumMinus1[] = {'-','1','\0' }; - static const WCHAR szNum1[] = {'1','\0' }; - HRESULT hres; - VARIANT v, exp, vDst; - DECIMAL *pdec = &V_DECIMAL(&v); - CY *pcy = &V_CY(&v); - size_t i; - - CHECKPTR(VarNeg); - - /* Test all possible V_VT values. But don't test the exact return values - * except for success/failure, since M$ made a hash of them in the - * native version. This at least ensures (as with all tests here) that - * we will notice if/when new vtypes/flags are added in native. - */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE vt; - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT bFail = TRUE; - - SKIPTESTS(vt); - - memset(&v, 0, sizeof(v)); - V_VT(&v) = vt | ExtraFlags[i]; - V_VT(&vDst) = VT_EMPTY; - - switch (V_VT(&v)) - { - case VT_UI1: case VT_I2: case VT_I4: - case VT_R4: case VT_R8: - case VT_DECIMAL: case VT_BOOL: case VT_NULL: case VT_EMPTY: - case VT_DATE: case VT_CY: - bFail = FALSE; - break; - case VT_I8: - if (HAVE_OLEAUT32_I8) - bFail = FALSE; - } - - hres = pVarNeg(&v,&vDst); - if (bFail) - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarNeg: expected failure, got 0x%X vt %d|0x%X\n", - hres, vt, ExtraFlags[i]); - else - ok(hres == S_OK, "VarNeg: expected S_OK, got 0x%X vt %d|0x%X\n", - hres, vt, ExtraFlags[i]); - } - } - - VARNEG(BOOL,VARIANT_TRUE,I2,1); - VARNEG(BOOL,VARIANT_FALSE,I2,0); - VARNEG(BOOL,1,I2,-1); - VARNEG(UI1,1,I2,-1); - VARNEG(UI1,254,I2,-254); - VARNEG(I2,-32768,I4,32768); - VARNEG(I2,-1,I2,1); - VARNEG(I2,1,I2,-1); - VARNEG(I4,-((int)(~0u >> 1)) - 1,R8,-2147483648u); - VARNEG(I4,-1,I4,1); - VARNEG(I4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARNEG(I8,1,I8,-1); - VARNEG(I8,-1,I8,1); - } - VARNEG(R4,1,R4,-1); - VARNEG(R4,-1,R4,1); - VARNEG(DATE,1,DATE,-1); - VARNEG(DATE,-1,DATE,1); - VARNEG(R8,1,R8,-1); - VARNEG(R8,-1,R8,1); - VARNEG(BSTR,(BSTR)szNumMinus1,R8,1); - VARNEG(BSTR,(BSTR)szNum1,R8,-1); - - V_VT(&v) = VT_EMPTY; - hres = pVarNeg(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_I2 && V_I2(&vDst) == 0, - "VarNeg: expected 0x0,%d,0 got 0x%X,%d,%d\n", VT_EMPTY, - hres, V_VT(&vDst), V_I2(&vDst)); - - V_VT(&v) = VT_NULL; - hres = pVarNeg(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_NULL, - "VarNeg: expected 0x0,%d got 0x%X,%d\n", VT_NULL, hres, V_VT(&vDst)); - - V_VT(&v) = VT_DECIMAL; - S(U(*pdec)).sign = DECIMAL_NEG; - S(U(*pdec)).scale = 0; - pdec->Hi32 = 0; - S1(U1(*pdec)).Mid32 = 0; - S1(U1(*pdec)).Lo32 = 1; - hres = pVarNeg(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && - S(U(V_DECIMAL(&vDst))).sign == 0, - "VarNeg: expected 0x0,%d,0x00, got 0x%X,%d,%02x\n", VT_DECIMAL, - hres, V_VT(&vDst), S(U(V_DECIMAL(&vDst))).sign); - - S(U(*pdec)).sign = 0; - hres = pVarNeg(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && - S(U(V_DECIMAL(&vDst))).sign == DECIMAL_NEG, - "VarNeg: expected 0x0,%d,0x7f, got 0x%X,%d,%02x\n", VT_DECIMAL, - hres, V_VT(&vDst), S(U(V_DECIMAL(&vDst))).sign); - - V_VT(&v) = VT_CY; - pcy->int64 = -10000; - hres = pVarNeg(&v,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_CY && V_CY(&vDst).int64 == 10000, - "VarNeg: VT_CY wrong, hres=0x%X\n", hres); -} - -static HRESULT (WINAPI *pVarRound)(LPVARIANT,int,LPVARIANT); - -static void test_Round( int line, VARIANT *arg, int deci, VARIANT *expected ) -{ - VARIANT result; - HRESULT hres; - - memset( &result, 0, sizeof(result) ); - hres = pVarRound( arg, deci, &result ); - ok_(__FILE__,line)( hres == S_OK, "wrong result %x\n", hres ); - if (hres == S_OK) - ok_(__FILE__,line)( is_expected_variant( &result, expected ), - "got %s expected %s\n", variantstr(&result), variantstr(expected) ); -} -#define VARROUND(vt,val,deci,rvt,rval) \ - V_VT(&v) = VT_##vt; V_##vt(&v) = val; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_Round( __LINE__, &v, deci, &exp ) - -static void test_VarRound(void) -{ - static WCHAR szNumMin[] = {'-','1','.','4','5','\0' }; - static WCHAR szNum[] = {'1','.','4','5','\0' }; - HRESULT hres; - VARIANT v, exp, vDst; - CY *pcy = &V_CY(&v); - char buff[8]; - - CHECKPTR(VarRound); - - /* first check valid integer types */ - VARROUND(BOOL,VARIANT_TRUE,0,I2,-1); - VARROUND(BOOL,VARIANT_FALSE,0,I2,0); - VARROUND(BOOL,1,0,I2,1); - VARROUND(UI1,1,0,UI1,1); - VARROUND(UI1,254,0,UI1,254); - VARROUND(I2,-32768,0,I2,-32768); - VARROUND(I2,-1,0,I2,-1); - VARROUND(I2,1,0,I2,1); - VARROUND(I4,-((int)(~0u >> 1)) - 1,0,I4,-((int)(~0u >> 1)) - 1); - VARROUND(I4,-1,0,I4,-1); - VARROUND(I4,1,0,I4,1); - - - /* MSDN states that rounding of R4/R8 is dependent on the underlying - * bit pattern of the number and so is architecture dependent. In this - * case Wine returns .2 (which is more correct) and Native returns .3 - */ - - VARROUND(R4,1.0f,0,R4,1.0f); - VARROUND(R4,-1.0f,0,R4,-1.0f); - VARROUND(R8,1.0,0,R8,1.0); - VARROUND(R8,-1.0,0,R8,-1.0); - - /* floating point numbers aren't exactly equal and we can't just - * compare the first few digits. */ - VARROUND(DATE,1.451,1,DATE,1.5); - VARROUND(DATE,-1.45,1,DATE,-1.4); - - /* replace the decimal separator */ - GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, buff, sizeof(buff)/sizeof(char)); - if (!buff[1]) { - szNumMin[2] = buff[0]; - szNum[1] = buff[0]; - VARROUND(BSTR,(BSTR)szNumMin,1,R8,-1.40); - if (0) { VARROUND(BSTR,(BSTR)szNum,1,R8,1.50); } - } else { - skip("Skipping VarRound(BSTR) as decimal separator is '%s'\n", buff); - } - - VARROUND(R4,1.23456f,0,R4,1.0f); - VARROUND(R4,1.23456f,1,R4,1.2f); - VARROUND(R4,1.23456f,2,R4,1.23f); - VARROUND(R4,1.23456f,3,R4,1.235f); - VARROUND(R4,1.23456f,4,R4,1.2346f); - VARROUND(R4,-1.23456f,0,R4,-1.0f); - VARROUND(R4,-1.23456f,1,R4,-1.2f); - VARROUND(R4,-1.23456f,2,R4,-1.23f); - VARROUND(R4,-1.23456f,3,R4,-1.235f); - VARROUND(R4,-1.23456f,4,R4,-1.2346f); - - VARROUND(R8,1.23456,0,R8,1.0); - VARROUND(R8,1.23456,1,R8,1.2); - VARROUND(R8,1.23456,2,R8,1.23); - VARROUND(R8,1.23456,3,R8,1.235); - VARROUND(R8,1.23456,4,R8,1.2346); - VARROUND(R8,-1.23456,0,R8,-1.0); - VARROUND(R8,-1.23456,1,R8,-1.2); - VARROUND(R8,-1.23456,2,R8,-1.23); - VARROUND(R8,-1.23456,3,R8,-1.235); - VARROUND(R8,-1.23456,4,R8,-1.2346); - - V_VT(&v) = VT_EMPTY; - hres = pVarRound(&v,0,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_I2 && V_I2(&vDst) == 0, - "VarRound: expected 0x0,%d,0 got 0x%X,%d,%d\n", VT_EMPTY, - hres, V_VT(&vDst), V_I2(&vDst)); - - V_VT(&v) = VT_NULL; - hres = pVarRound(&v,0,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_NULL, - "VarRound: expected 0x0,%d got 0x%X,%d\n", VT_NULL, hres, V_VT(&vDst)); - - /* not yet implemented so no use testing yet - todo_wine { - DECIMAL *pdec = &V_DECIMAL(&v); - V_VT(&v) = VT_DECIMAL; - S(U(*pdec)).sign = DECIMAL_NEG; - S(U(*pdec)).scale = 0; - pdec->Hi32 = 0; - S1(U1(*pdec)).Mid32 = 0; - S1(U1(*pdec)).Lo32 = 1; - hres = pVarRound(&v,0,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && - S(U(V_DECIMAL(&vDst))).sign == 0, - "VarRound: expected 0x0,%d,0x00, got 0x%X,%d,%02x\n", VT_DECIMAL, - hres, V_VT(&vDst), S(U(V_DECIMAL(&vDst))).sign); - - S(U(*pdec)).sign = 0; - hres = pVarRound(&v,0,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && - S(U(V_DECIMAL(&vDst))).sign == DECIMAL_NEG, - "VarRound: expected 0x0,%d,0x7f, got 0x%X,%d,%02x\n", VT_DECIMAL, - hres, V_VT(&vDst), S(U(V_DECIMAL(&vDst))).sign); - } - */ - - V_VT(&v) = VT_CY; - pcy->int64 = 10000; - hres = pVarRound(&v,0,&vDst); - ok(hres == S_OK && V_VT(&vDst) == VT_CY && V_CY(&vDst).int64 == 10000, - "VarRound: VT_CY wrong, hres=0x%X\n", hres); - -} - -static HRESULT (WINAPI *pVarXor)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARXOR(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarXor, &left, &right, &exp ) - -#define VARXORCY(vt1,val1,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarXor, &left, &right, &exp ) - -static void test_VarXor(void) -{ - static const WCHAR szFalse[] = { '#','F','A','L','S','E','#','\0' }; - static const WCHAR szTrue[] = { '#','T','R','U','E','#','\0' }; - VARIANT left, right, exp, result; - BSTR lbstr, rbstr; - VARTYPE i; - HRESULT hres; - - CHECKPTR(VarXor); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - - SKIPTESTS(leftvt); - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - - SKIPTESTS(rightvt); - - if (leftvt == VT_BSTR || rightvt == VT_BSTR || - leftvt == VT_DISPATCH || rightvt == VT_DISPATCH || - leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - V_VT(&right) = rightvt | ExtraFlags[i]; - V_VT(&result) = VT_EMPTY; - resvt = VT_I4; - - if (ExtraFlags[i] & VT_ARRAY || ExtraFlags[i] & VT_BYREF || - !IsValidVariantClearVT(leftvt, ExtraFlags[i]) || - !IsValidVariantClearVT(rightvt, ExtraFlags[i]) || - leftvt == VT_CLSID || rightvt == VT_CLSID || - leftvt == VT_RECORD || rightvt == VT_RECORD || - leftvt == VT_VARIANT || rightvt == VT_VARIANT || - leftvt == VT_ERROR || rightvt == VT_ERROR) - { - bFail = TRUE; - } - if (leftvt == VT_EMPTY || rightvt == VT_EMPTY) - { - if (leftvt == rightvt || - leftvt == VT_I2 || rightvt == VT_I2 || - leftvt == VT_UI1 || rightvt == VT_UI1 || - leftvt == VT_BOOL || rightvt == VT_BOOL) - resvt = VT_I2; - else if (leftvt == VT_NULL || rightvt == VT_NULL) - resvt = VT_NULL; - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_NULL || rightvt == VT_NULL) - { - resvt = VT_NULL; - } - else if (leftvt == VT_UI1 || rightvt == VT_UI1) - { - if (leftvt == rightvt) - resvt = VT_UI1; - else if (leftvt == rightvt || - leftvt == VT_I2 || rightvt == VT_I2 || - leftvt == VT_BOOL || rightvt == VT_BOOL) - { - resvt = VT_I2; - } - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_I2 || rightvt == VT_I2) - { - if (leftvt == rightvt || - leftvt == VT_BOOL || rightvt == VT_BOOL) - resvt = VT_I2; - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_BOOL && rightvt == VT_BOOL) - { - resvt = VT_BOOL; - } - else if (leftvt == VT_I8 || rightvt == VT_I8) - { - if (leftvt == VT_INT || rightvt == VT_INT) - bFail = TRUE; - else - resvt = VT_I8; - } - hres = pVarXor(&left, &right, &result); - if (bFail) - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarXor: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], hres, - V_VT(&result)); - else - ok(hres == S_OK && V_VT(&result) == resvt, - "VarXor: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], resvt, hres, - V_VT(&result)); - } - } - } - - /* Test returned values - * FIXME: Test VT_DECIMAL/VT_DISPATCH - */ - VARXOR(EMPTY,0,EMPTY,0,I2,0); - VARXOR(EMPTY,1,EMPTY,0,I2,0); - VARXOR(EMPTY,0,NULL,0,NULL,0); - VARXOR(EMPTY,0,I1,0,I4,0); - VARXOR(EMPTY,0,I1,1,I4,1); - VARXOR(EMPTY,0,UI1,0,I2,0); - VARXOR(EMPTY,0,UI1,1,I2,1); - VARXOR(EMPTY,0,I2,0,I2,0); - VARXOR(EMPTY,0,I2,1,I2,1); - VARXOR(EMPTY,0,UI2,0,I4,0); - VARXOR(EMPTY,0,UI2,1,I4,1); - VARXOR(EMPTY,0,I4,0,I4,0); - VARXOR(EMPTY,0,I4,1,I4,1); - VARXOR(EMPTY,0,UI4,0,I4,0); - VARXOR(EMPTY,0,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VARXOR(EMPTY,0,I8,0,I8,0); - VARXOR(EMPTY,0,I8,1,I8,1); - VARXOR(EMPTY,0,UI8,0,I4,0); - VARXOR(EMPTY,0,UI8,1,I4,1); - } - VARXOR(EMPTY,0,INT,0,I4,0); - VARXOR(EMPTY,0,INT,1,I4,1); - VARXOR(EMPTY,0,UINT,0,I4,0); - VARXOR(EMPTY,0,UINT,1,I4,1); - VARXOR(EMPTY,0,BOOL,0,I2,0); - VARXOR(EMPTY,0,BOOL,1,I2,1); - VARXOR(EMPTY,0,R4,0,I4,0); - VARXOR(EMPTY,0,R4,1,I4,1); - VARXOR(EMPTY,0,R8,0,I4,0); - VARXOR(EMPTY,0,R8,1,I4,1); - rbstr = SysAllocString(szFalse); - VARXOR(EMPTY,0,BSTR,rbstr,I2,0); - rbstr = SysAllocString(szTrue); - VARXOR(EMPTY,0,BSTR,rbstr,I2,-1); - VARXORCY(EMPTY,0,10000,I4,1); - - /* NULL OR 0 = NULL. NULL OR n = n */ - VARXOR(NULL,0,NULL,0,NULL,0); - VARXOR(NULL,1,NULL,0,NULL,0); - VARXOR(NULL,0,I1,0,NULL,0); - VARXOR(NULL,0,I1,1,NULL,0); - VARXOR(NULL,0,UI1,0,NULL,0); - VARXOR(NULL,0,UI1,1,NULL,0); - VARXOR(NULL,0,I2,0,NULL,0); - VARXOR(NULL,0,I2,1,NULL,0); - VARXOR(NULL,0,UI2,0,NULL,0); - VARXOR(NULL,0,UI2,1,NULL,0); - VARXOR(NULL,0,I4,0,NULL,0); - VARXOR(NULL,0,I4,1,NULL,0); - VARXOR(NULL,0,UI4,0,NULL,0); - VARXOR(NULL,0,UI4,1,NULL,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(NULL,0,I8,0,NULL,0); - VARXOR(NULL,0,I8,1,NULL,0); - VARXOR(NULL,0,UI8,0,NULL,0); - VARXOR(NULL,0,UI8,1,NULL,0); - } - VARXOR(NULL,0,INT,0,NULL,0); - VARXOR(NULL,0,INT,1,NULL,0); - VARXOR(NULL,0,UINT,0,NULL,0); - VARXOR(NULL,0,UINT,1,NULL,0); - VARXOR(NULL,0,BOOL,0,NULL,0); - VARXOR(NULL,0,BOOL,1,NULL,0); - VARXOR(NULL,0,R4,0,NULL,0); - VARXOR(NULL,0,R4,1,NULL,0); - VARXOR(NULL,0,R8,0,NULL,0); - VARXOR(NULL,0,R8,1,NULL,0); - rbstr = SysAllocString(szFalse); - VARXOR(NULL,0,BSTR,rbstr,NULL,0); - rbstr = SysAllocString(szTrue); - VARXOR(NULL,0,BSTR,rbstr,NULL,0); - VARXORCY(NULL,0,10000,NULL,0); - VARXORCY(NULL,0,0,NULL,0); - - VARXOR(BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE,BOOL,VARIANT_FALSE); - VARXOR(BOOL,VARIANT_TRUE,BOOL,VARIANT_FALSE,BOOL,VARIANT_TRUE); - VARXOR(BOOL,VARIANT_FALSE,BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE); - VARXOR(BOOL,VARIANT_FALSE,BOOL,VARIANT_FALSE,BOOL,VARIANT_FALSE); - /* Assume x,y & y,x are the same from now on to reduce the number of tests */ - VARXOR(BOOL,VARIANT_TRUE,I1,-1,I4,0); - VARXOR(BOOL,VARIANT_TRUE,I1,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,I1,0,I4,0); - VARXOR(BOOL,VARIANT_TRUE,UI1,255,I2,-256); - VARXOR(BOOL,VARIANT_TRUE,UI1,0,I2,-1); - VARXOR(BOOL,VARIANT_FALSE,UI1,0,I2,0); - VARXOR(BOOL,VARIANT_TRUE,I2,-1,I2,0); - VARXOR(BOOL,VARIANT_TRUE,I2,0,I2,-1); - VARXOR(BOOL,VARIANT_FALSE,I2,0,I2,0); - VARXOR(BOOL,VARIANT_TRUE,UI2,65535,I4,-65536); - VARXOR(BOOL,VARIANT_TRUE,UI2,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,UI2,0,I4,0); - VARXOR(BOOL,VARIANT_TRUE,I4,-1,I4,0); - VARXOR(BOOL,VARIANT_TRUE,I4,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,I4,0,I4,0); - VARXOR(BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,0); - VARXOR(BOOL,VARIANT_TRUE,UI4,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,UI4,0,I4,0); - VARXOR(BOOL,VARIANT_TRUE,R4,-1,I4,0); - VARXOR(BOOL,VARIANT_TRUE,R4,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,R4,0,I4,0); - VARXOR(BOOL,VARIANT_TRUE,R8,-1,I4,0); - VARXOR(BOOL,VARIANT_TRUE,R8,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,R8,0,I4,0); - VARXOR(BOOL,VARIANT_TRUE,DATE,-1,I4,0); - VARXOR(BOOL,VARIANT_TRUE,DATE,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(BOOL,VARIANT_TRUE,I8,-1,I8,0); - VARXOR(BOOL,VARIANT_TRUE,I8,0,I8,-1); - VARXOR(BOOL,VARIANT_FALSE,I8,0,I8,0); - /* This returns DISP_E_OVERFLOW which indicates that a conversion - * to I4 is performed. - */ - /* VARXOR(BOOL,VARIANT_TRUE,UI8,-1,I4,-1); */ - VARXOR(BOOL,VARIANT_TRUE,UI8,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,UI8,0,I4,0); - } - VARXOR(BOOL,VARIANT_TRUE,INT,-1,I4,0); - VARXOR(BOOL,VARIANT_TRUE,INT,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,INT,0,I4,0); - VARXOR(BOOL,VARIANT_TRUE,UINT,0xffffffff,I4,0); - VARXOR(BOOL,VARIANT_TRUE,UINT,0,I4,-1); - VARXOR(BOOL,VARIANT_FALSE,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(BOOL,VARIANT_FALSE,BSTR,rbstr,BOOL,VARIANT_FALSE); - VARXOR(BOOL,VARIANT_TRUE,BSTR,rbstr,BOOL,VARIANT_TRUE); - rbstr = SysAllocString(szTrue); - VARXOR(BOOL,VARIANT_FALSE,BSTR,rbstr,BOOL,VARIANT_TRUE); - VARXOR(BOOL,VARIANT_TRUE,BSTR,rbstr,BOOL,VARIANT_FALSE); - VARXORCY(BOOL,VARIANT_TRUE,10000,I4,-2); - VARXORCY(BOOL,VARIANT_TRUE,0,I4,-1); - VARXORCY(BOOL,VARIANT_FALSE,0,I4,0); - - VARXOR(I1,-1,I1,-1,I4,0); - VARXOR(I1,-1,I1,0,I4,-1); - VARXOR(I1,0,I1,0,I4,0); - VARXOR(I1,-1,UI1,255,I4,-256); - VARXOR(I1,-1,UI1,0,I4,-1); - VARXOR(I1,0,UI1,0,I4,0); - VARXOR(I1,-1,I2,-1,I4,0); - VARXOR(I1,-1,I2,0,I4,-1); - VARXOR(I1,0,I2,0,I4,0); - VARXOR(I1,-1,UI2,65535,I4,-65536); - VARXOR(I1,-1,UI2,0,I4,-1); - VARXOR(I1,0,UI2,0,I4,0); - VARXOR(I1,-1,I4,-1,I4,0); - VARXOR(I1,-1,I4,0,I4,-1); - VARXOR(I1,0,I4,0,I4,0); - VARXOR(I1,-1,UI4,0xffffffff,I4,0); - VARXOR(I1,-1,UI4,0,I4,-1); - VARXOR(I1,0,UI4,0,I4,0); - VARXOR(I1,-1,R4,-1,I4,0); - VARXOR(I1,-1,R4,0,I4,-1); - VARXOR(I1,0,R4,0,I4,0); - VARXOR(I1,-1,R8,-1,I4,0); - VARXOR(I1,-1,R8,0,I4,-1); - VARXOR(I1,0,R8,0,I4,0); - VARXOR(I1,-1,DATE,-1,I4,0); - VARXOR(I1,-1,DATE,0,I4,-1); - VARXOR(I1,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(I1,-1,I8,-1,I8,0); - VARXOR(I1,-1,I8,0,I8,-1); - VARXOR(I1,0,I8,0,I8,0); - VARXOR(I1,-1,UI8,0,I4,-1); - VARXOR(I1,0,UI8,0,I4,0); - } - VARXOR(I1,-1,INT,-1,I4,0); - VARXOR(I1,-1,INT,0,I4,-1); - VARXOR(I1,0,INT,0,I4,0); - VARXOR(I1,-1,UINT,0xffffffff,I4,0); - VARXOR(I1,-1,UINT,0,I4,-1); - VARXOR(I1,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(I1,0,BSTR,rbstr,I4,0); - VARXOR(I1,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VARXOR(I1,0,BSTR,rbstr,I4,-1); - VARXOR(I1,-1,BSTR,rbstr,I4,0); - VARXORCY(I1,-1,10000,I4,-2); - VARXORCY(I1,-1,0,I4,-1); - VARXORCY(I1,0,0,I4,0); - - VARXOR(UI1,255,UI1,255,UI1,0); - VARXOR(UI1,255,UI1,0,UI1,255); - VARXOR(UI1,0,UI1,0,UI1,0); - VARXOR(UI1,255,I2,-1,I2,-256); - VARXOR(UI1,255,I2,0,I2,255); - VARXOR(UI1,0,I2,0,I2,0); - VARXOR(UI1,255,UI2,65535,I4,65280); - VARXOR(UI1,255,UI2,0,I4,255); - VARXOR(UI1,0,UI2,0,I4,0); - VARXOR(UI1,255,I4,-1,I4,-256); - VARXOR(UI1,255,I4,0,I4,255); - VARXOR(UI1,0,I4,0,I4,0); - VARXOR(UI1,255,UI4,0xffffffff,I4,-256); - VARXOR(UI1,255,UI4,0,I4,255); - VARXOR(UI1,0,UI4,0,I4,0); - VARXOR(UI1,255,R4,-1,I4,-256); - VARXOR(UI1,255,R4,0,I4,255); - VARXOR(UI1,0,R4,0,I4,0); - VARXOR(UI1,255,R8,-1,I4,-256); - VARXOR(UI1,255,R8,0,I4,255); - VARXOR(UI1,0,R8,0,I4,0); - VARXOR(UI1,255,DATE,-1,I4,-256); - VARXOR(UI1,255,DATE,0,I4,255); - VARXOR(UI1,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(UI1,255,I8,-1,I8,-256); - VARXOR(UI1,255,I8,0,I8,255); - VARXOR(UI1,0,I8,0,I8,0); - VARXOR(UI1,255,UI8,0,I4,255); - VARXOR(UI1,0,UI8,0,I4,0); - } - VARXOR(UI1,255,INT,-1,I4,-256); - VARXOR(UI1,255,INT,0,I4,255); - VARXOR(UI1,0,INT,0,I4,0); - VARXOR(UI1,255,UINT,0xffffffff,I4,-256); - VARXOR(UI1,255,UINT,0,I4,255); - VARXOR(UI1,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(UI1,0,BSTR,rbstr,I2,0); - VARXOR(UI1,255,BSTR,rbstr,I2,255); - rbstr = SysAllocString(szTrue); - VARXOR(UI1,0,BSTR,rbstr,I2,-1); - VARXOR(UI1,255,BSTR,rbstr,I2,-256); - VARXORCY(UI1,255,10000,I4,254); - VARXORCY(UI1,255,0,I4,255); - VARXORCY(UI1,0,0,I4,0); - - VARXOR(I2,-1,I2,-1,I2,0); - VARXOR(I2,-1,I2,0,I2,-1); - VARXOR(I2,0,I2,0,I2,0); - VARXOR(I2,-1,UI2,65535,I4,-65536); - VARXOR(I2,-1,UI2,0,I4,-1); - VARXOR(I2,0,UI2,0,I4,0); - VARXOR(I2,-1,I4,-1,I4,0); - VARXOR(I2,-1,I4,0,I4,-1); - VARXOR(I2,0,I4,0,I4,0); - VARXOR(I2,-1,UI4,0xffffffff,I4,0); - VARXOR(I2,-1,UI4,0,I4,-1); - VARXOR(I2,0,UI4,0,I4,0); - VARXOR(I2,-1,R4,-1,I4,0); - VARXOR(I2,-1,R4,0,I4,-1); - VARXOR(I2,0,R4,0,I4,0); - VARXOR(I2,-1,R8,-1,I4,0); - VARXOR(I2,-1,R8,0,I4,-1); - VARXOR(I2,0,R8,0,I4,0); - VARXOR(I2,-1,DATE,-1,I4,0); - VARXOR(I2,-1,DATE,0,I4,-1); - VARXOR(I2,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(I2,-1,I8,-1,I8,0); - VARXOR(I2,-1,I8,0,I8,-1); - VARXOR(I2,0,I8,0,I8,0); - VARXOR(I2,-1,UI8,0,I4,-1); - VARXOR(I2,0,UI8,0,I4,0); - } - VARXOR(I2,-1,INT,-1,I4,0); - VARXOR(I2,-1,INT,0,I4,-1); - VARXOR(I2,0,INT,0,I4,0); - VARXOR(I2,-1,UINT,0xffffffff,I4,0); - VARXOR(I2,-1,UINT,0,I4,-1); - VARXOR(I2,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(I2,0,BSTR,rbstr,I2,0); - VARXOR(I2,-1,BSTR,rbstr,I2,-1); - rbstr = SysAllocString(szTrue); - VARXOR(I2,0,BSTR,rbstr,I2,-1); - VARXOR(I2,-1,BSTR,rbstr,I2,0); - VARXORCY(I2,-1,10000,I4,-2); - VARXORCY(I2,-1,0,I4,-1); - VARXORCY(I2,0,0,I4,0); - - VARXOR(UI2,65535,UI2,65535,I4,0); - VARXOR(UI2,65535,UI2,0,I4,65535); - VARXOR(UI2,0,UI2,0,I4,0); - VARXOR(UI2,65535,I4,-1,I4,-65536); - VARXOR(UI2,65535,I4,0,I4,65535); - VARXOR(UI2,0,I4,0,I4,0); - VARXOR(UI2,65535,UI4,0xffffffff,I4,-65536); - VARXOR(UI2,65535,UI4,0,I4,65535); - VARXOR(UI2,0,UI4,0,I4,0); - VARXOR(UI2,65535,R4,-1,I4,-65536); - VARXOR(UI2,65535,R4,0,I4,65535); - VARXOR(UI2,0,R4,0,I4,0); - VARXOR(UI2,65535,R8,-1,I4,-65536); - VARXOR(UI2,65535,R8,0,I4,65535); - VARXOR(UI2,0,R8,0,I4,0); - VARXOR(UI2,65535,DATE,-1,I4,-65536); - VARXOR(UI2,65535,DATE,0,I4,65535); - VARXOR(UI2,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(UI2,65535,I8,-1,I8,-65536); - VARXOR(UI2,65535,I8,0,I8,65535); - VARXOR(UI2,0,I8,0,I8,0); - VARXOR(UI2,65535,UI8,0,I4,65535); - VARXOR(UI2,0,UI8,0,I4,0); - } - VARXOR(UI2,65535,INT,-1,I4,-65536); - VARXOR(UI2,65535,INT,0,I4,65535); - VARXOR(UI2,0,INT,0,I4,0); - VARXOR(UI2,65535,UINT,0xffffffff,I4,-65536); - VARXOR(UI2,65535,UINT,0,I4,65535); - VARXOR(UI2,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(UI2,0,BSTR,rbstr,I4,0); - VARXOR(UI2,65535,BSTR,rbstr,I4,65535); - rbstr = SysAllocString(szTrue); - VARXOR(UI2,0,BSTR,rbstr,I4,-1); - VARXOR(UI2,65535,BSTR,rbstr,I4,-65536); - VARXORCY(UI2,65535,10000,I4,65534); - VARXORCY(UI2,65535,0,I4,65535); - VARXORCY(UI2,0,0,I4,0); - - VARXOR(I4,-1,I4,-1,I4,0); - VARXOR(I4,-1,I4,0,I4,-1); - VARXOR(I4,0,I4,0,I4,0); - VARXOR(I4,-1,UI4,0xffffffff,I4,0); - VARXOR(I4,-1,UI4,0,I4,-1); - VARXOR(I4,0,UI4,0,I4,0); - VARXOR(I4,-1,R4,-1,I4,0); - VARXOR(I4,-1,R4,0,I4,-1); - VARXOR(I4,0,R4,0,I4,0); - VARXOR(I4,-1,R8,-1,I4,0); - VARXOR(I4,-1,R8,0,I4,-1); - VARXOR(I4,0,R8,0,I4,0); - VARXOR(I4,-1,DATE,-1,I4,0); - VARXOR(I4,-1,DATE,0,I4,-1); - VARXOR(I4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(I4,-1,I8,-1,I8,0); - VARXOR(I4,-1,I8,0,I8,-1); - VARXOR(I4,0,I8,0,I8,0); - VARXOR(I4,-1,UI8,0,I4,-1); - VARXOR(I4,0,UI8,0,I4,0); - } - VARXOR(I4,-1,INT,-1,I4,0); - VARXOR(I4,-1,INT,0,I4,-1); - VARXOR(I4,0,INT,0,I4,0); - VARXOR(I4,-1,UINT,0xffffffff,I4,0); - VARXOR(I4,-1,UINT,0,I4,-1); - VARXOR(I4,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(I4,0,BSTR,rbstr,I4,0); - VARXOR(I4,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VARXOR(I4,0,BSTR,rbstr,I4,-1); - VARXOR(I4,-1,BSTR,rbstr,I4,0); - VARXORCY(I4,-1,10000,I4,-2); - VARXORCY(I4,-1,0,I4,-1); - VARXORCY(I4,0,0,I4,0); - - VARXOR(UI4,0xffffffff,UI4,0xffffffff,I4,0); - VARXOR(UI4,0xffffffff,UI4,0,I4,-1); - VARXOR(UI4,0,UI4,0,I4,0); - VARXOR(UI4,0xffffffff,R4,-1,I4,0); - VARXOR(UI4,0xffffffff,R4,0,I4,-1); - VARXOR(UI4,0,R4,0,I4,0); - VARXOR(UI4,0xffffffff,R8,-1,I4,0); - VARXOR(UI4,0xffffffff,R8,0,I4,-1); - VARXOR(UI4,0,R8,0,I4,0); - VARXOR(UI4,0xffffffff,DATE,-1,I4,0); - VARXOR(UI4,0xffffffff,DATE,0,I4,-1); - VARXOR(UI4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(UI4,0xffffffff,I8,0,I8,0xffffffff); - VARXOR(UI4,VARIANT_FALSE,I8,VARIANT_FALSE,I8,0); - VARXOR(UI4,0,I8,0,I8,0); - VARXOR(UI4,0xffffffff,UI8,0,I4,-1); - VARXOR(UI4,0,UI8,0,I4,0); - } - VARXOR(UI4,0xffffffff,INT,-1,I4,0); - VARXOR(UI4,0xffffffff,INT,0,I4,-1); - VARXOR(UI4,0,INT,0,I4,0); - VARXOR(UI4,0xffffffff,UINT,0xffffffff,I4,0); - VARXOR(UI4,0xffffffff,UINT,0,I4,-1); - VARXOR(UI4,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(UI4,0,BSTR,rbstr,I4,0); - VARXOR(UI4,0xffffffff,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VARXOR(UI4,0,BSTR,rbstr,I4,-1); - VARXOR(UI4,0xffffffff,BSTR,rbstr,I4,0); - VARXORCY(UI4,0xffffffff,10000,I4,-2); - VARXORCY(UI4,0xffffffff,0,I4,-1); - VARXORCY(UI4,0,0,I4,0); - - VARXOR(R4,-1,R4,-1,I4,0); - VARXOR(R4,-1,R4,0,I4,-1); - VARXOR(R4,0,R4,0,I4,0); - VARXOR(R4,-1,R8,-1,I4,0); - VARXOR(R4,-1,R8,0,I4,-1); - VARXOR(R4,0,R8,0,I4,0); - VARXOR(R4,-1,DATE,-1,I4,0); - VARXOR(R4,-1,DATE,0,I4,-1); - VARXOR(R4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(R4,-1,I8,-1,I8,0); - VARXOR(R4,-1,I8,0,I8,-1); - VARXOR(R4,0,I8,0,I8,0); - VARXOR(R4,-1,UI8,0,I4,-1); - VARXOR(R4,0,UI8,0,I4,0); - } - VARXOR(R4,-1,INT,-1,I4,0); - VARXOR(R4,-1,INT,0,I4,-1); - VARXOR(R4,0,INT,0,I4,0); - VARXOR(R4,-1,UINT,0xffffffff,I4,0); - VARXOR(R4,-1,UINT,0,I4,-1); - VARXOR(R4,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(R4,0,BSTR,rbstr,I4,0); - VARXOR(R4,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VARXOR(R4,0,BSTR,rbstr,I4,-1); - VARXOR(R4,-1,BSTR,rbstr,I4,0); - VARXORCY(R4,-1,10000,I4,-2); - VARXORCY(R4,-1,0,I4,-1); - VARXORCY(R4,0,0,I4,0); - - VARXOR(R8,-1,R8,-1,I4,0); - VARXOR(R8,-1,R8,0,I4,-1); - VARXOR(R8,0,R8,0,I4,0); - VARXOR(R8,-1,DATE,-1,I4,0); - VARXOR(R8,-1,DATE,0,I4,-1); - VARXOR(R8,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(R8,-1,I8,-1,I8,0); - VARXOR(R8,-1,I8,0,I8,-1); - VARXOR(R8,0,I8,0,I8,0); - VARXOR(R8,-1,UI8,0,I4,-1); - VARXOR(R8,0,UI8,0,I4,0); - } - VARXOR(R8,-1,INT,-1,I4,0); - VARXOR(R8,-1,INT,0,I4,-1); - VARXOR(R8,0,INT,0,I4,0); - VARXOR(R8,-1,UINT,0xffffffff,I4,0); - VARXOR(R8,-1,UINT,0,I4,-1); - VARXOR(R8,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(R8,0,BSTR,rbstr,I4,0); - VARXOR(R8,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VARXOR(R8,0,BSTR,rbstr,I4,-1); - VARXOR(R8,-1,BSTR,rbstr,I4,0); - VARXORCY(R8,-1,10000,I4,-2); - VARXORCY(R8,-1,0,I4,-1); - VARXORCY(R8,0,0,I4,0); - - VARXOR(DATE,-1,DATE,-1,I4,0); - VARXOR(DATE,-1,DATE,0,I4,-1); - VARXOR(DATE,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARXOR(DATE,-1,I8,-1,I8,0); - VARXOR(DATE,-1,I8,0,I8,-1); - VARXOR(DATE,0,I8,0,I8,0); - VARXOR(DATE,-1,UI8,0,I4,-1); - VARXOR(DATE,0,UI8,0,I4,0); - } - VARXOR(DATE,-1,INT,-1,I4,0); - VARXOR(DATE,-1,INT,0,I4,-1); - VARXOR(DATE,0,INT,0,I4,0); - VARXOR(DATE,-1,UINT,0xffffffff,I4,0); - VARXOR(DATE,-1,UINT,0,I4,-1); - VARXOR(DATE,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(DATE,0,BSTR,rbstr,I4,0); - VARXOR(DATE,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VARXOR(DATE,0,BSTR,rbstr,I4,-1); - VARXOR(DATE,-1,BSTR,rbstr,I4,0); - VARXORCY(DATE,-1,10000,I4,-2); - VARXORCY(DATE,-1,0,I4,-1); - VARXORCY(DATE,0,0,I4,0); - - if (HAVE_OLEAUT32_I8) - { - VARXOR(I8,-1,I8,-1,I8,0); - VARXOR(I8,-1,I8,0,I8,-1); - VARXOR(I8,0,I8,0,I8,0); - VARXOR(I8,-1,UI8,0,I8,-1); - VARXOR(I8,0,UI8,0,I8,0); - VARXOR(I8,-1,UINT,0,I8,-1); - VARXOR(I8,0,UINT,0,I8,0); - rbstr = SysAllocString(szFalse); - VARXOR(I8,0,BSTR,rbstr,I8,0); - VARXOR(I8,-1,BSTR,rbstr,I8,-1); - rbstr = SysAllocString(szTrue); - VARXOR(I8,0,BSTR,rbstr,I8,-1); - VARXOR(I8,-1,BSTR,rbstr,I8,0); - VARXORCY(I8,-1,10000,I8,-2); - VARXORCY(I8,-1,0,I8,-1); - VARXORCY(I8,0,0,I8,0); - - VARXOR(UI8,0xffff,UI8,0xffff,I4,0); - VARXOR(UI8,0xffff,UI8,0,I4,0xffff); - VARXOR(UI8,0,UI8,0,I4,0); - VARXOR(UI8,0xffff,INT,-1,I4,-65536); - VARXOR(UI8,0xffff,INT,0,I4,0xffff); - VARXOR(UI8,0,INT,0,I4,0); - VARXOR(UI8,0xffff,UINT,0xffff,I4,0); - VARXOR(UI8,0xffff,UINT,0,I4,0xffff); - VARXOR(UI8,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(UI8,0,BSTR,rbstr,I4,0); - VARXOR(UI8,0xffff,BSTR,rbstr,I4,0xffff); - rbstr = SysAllocString(szTrue); - VARXOR(UI8,0,BSTR,rbstr,I4,-1); - VARXOR(UI8,0xffff,BSTR,rbstr,I4,-65536); - VARXORCY(UI8,0xffff,10000,I4,65534); - VARXORCY(UI8,0xffff,0,I4,0xffff); - VARXORCY(UI8,0,0,I4,0); - } - - VARXOR(INT,-1,INT,-1,I4,0); - VARXOR(INT,-1,INT,0,I4,-1); - VARXOR(INT,0,INT,0,I4,0); - VARXOR(INT,-1,UINT,0xffff,I4,-65536); - VARXOR(INT,-1,UINT,0,I4,-1); - VARXOR(INT,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(INT,0,BSTR,rbstr,I4,0); - VARXOR(INT,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VARXOR(INT,0,BSTR,rbstr,I4,-1); - VARXOR(INT,-1,BSTR,rbstr,I4,0); - VARXORCY(INT,-1,10000,I4,-2); - VARXORCY(INT,-1,0,I4,-1); - VARXORCY(INT,0,0,I4,0); - - VARXOR(UINT,0xffff,UINT,0xffff,I4,0); - VARXOR(UINT,0xffff,UINT,0,I4,0xffff); - VARXOR(UINT,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VARXOR(UINT,0,BSTR,rbstr,I4,0); - VARXOR(UINT,0xffff,BSTR,rbstr,I4,0xffff); - rbstr = SysAllocString(szTrue); - VARXOR(UINT,0,BSTR,rbstr,I4,-1); - VARXOR(UINT,0xffff,BSTR,rbstr,I4,-65536); - VARXORCY(UINT,0xffff,10000,I4,65534); - VARXORCY(UINT,0xffff,0,I4,0xffff); - VARXORCY(UINT,0,0,I4,0); - - lbstr = SysAllocString(szFalse); - rbstr = SysAllocString(szFalse); - VARXOR(BSTR,lbstr,BSTR,rbstr,BOOL,0); - rbstr = SysAllocString(szTrue); - VARXOR(BSTR,lbstr,BSTR,rbstr,BOOL,VARIANT_TRUE); - lbstr = SysAllocString(szTrue); - VARXOR(BSTR,lbstr,BSTR,rbstr,BOOL,VARIANT_FALSE); - VARXORCY(BSTR,lbstr,10000,I4,-2); - lbstr = SysAllocString(szFalse); - VARXORCY(BSTR,lbstr,10000,I4,1); -} - -static HRESULT (WINAPI *pVarOr)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VAROR(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarOr, &left, &right, &exp ) - -#define VARORCY(vt1,val1,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarOr, &left, &right, &exp ) - -static void test_VarOr(void) -{ - static const WCHAR szFalse[] = { '#','F','A','L','S','E','#','\0' }; - static const WCHAR szTrue[] = { '#','T','R','U','E','#','\0' }; - VARIANT left, right, exp, result; - BSTR lbstr, rbstr; - VARTYPE i; - HRESULT hres; - - CHECKPTR(VarOr); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - - SKIPTESTS(leftvt); - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - - SKIPTESTS(rightvt); - - if (leftvt == VT_BSTR || rightvt == VT_BSTR || - leftvt == VT_DISPATCH || rightvt == VT_DISPATCH || - leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - V_VT(&right) = rightvt | ExtraFlags[i]; - V_VT(&result) = VT_EMPTY; - resvt = VT_I4; - - if (ExtraFlags[i] & VT_ARRAY || ExtraFlags[i] & VT_BYREF || - !IsValidVariantClearVT(leftvt, ExtraFlags[i]) || - !IsValidVariantClearVT(rightvt, ExtraFlags[i]) || - leftvt == VT_CLSID || rightvt == VT_CLSID || - leftvt == VT_RECORD || rightvt == VT_RECORD || - leftvt == VT_VARIANT || rightvt == VT_VARIANT || - leftvt == VT_ERROR || rightvt == VT_ERROR) - { - bFail = TRUE; - } - if (leftvt == VT_EMPTY || rightvt == VT_EMPTY) - { - if (leftvt == rightvt || - leftvt == VT_I2 || rightvt == VT_I2 || - leftvt == VT_UI1 || rightvt == VT_UI1 || - leftvt == VT_BOOL || rightvt == VT_BOOL) - resvt = VT_I2; - else if (leftvt == VT_NULL || rightvt == VT_NULL) - resvt = VT_NULL; - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_NULL || rightvt == VT_NULL) - { - resvt = VT_NULL; - } - else if (leftvt == VT_UI1 || rightvt == VT_UI1) - { - if (leftvt == rightvt) - resvt = VT_UI1; - else if (leftvt == rightvt || - leftvt == VT_I2 || rightvt == VT_I2 || - leftvt == VT_BOOL || rightvt == VT_BOOL) - { - resvt = VT_I2; - } - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_I2 || rightvt == VT_I2) - { - if (leftvt == rightvt || - leftvt == VT_BOOL || rightvt == VT_BOOL) - resvt = VT_I2; - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_BOOL && rightvt == VT_BOOL) - { - resvt = VT_BOOL; - } - else if (leftvt == VT_I8 || rightvt == VT_I8) - { - if (leftvt == VT_INT || rightvt == VT_INT) - bFail = TRUE; - else - resvt = VT_I8; - } - hres = pVarOr(&left, &right, &result); - if (bFail) - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarOr: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], hres, - V_VT(&result)); - else - ok(hres == S_OK && V_VT(&result) == resvt, - "VarOr: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], resvt, hres, - V_VT(&result)); - } - } - } - - /* Test returned values. Since we know the returned type is correct - * and that we handle all combinations of invalid types, just check - * that good type combinations produce the desired value. - * FIXME: Test VT_DECIMAL/VT_DISPATCH - */ - VAROR(EMPTY,0,EMPTY,0,I2,0); - VAROR(EMPTY,1,EMPTY,0,I2,0); - VAROR(EMPTY,0,NULL,0,NULL,0); - VAROR(EMPTY,0,I1,0,I4,0); - VAROR(EMPTY,0,I1,1,I4,1); - VAROR(EMPTY,0,UI1,0,I2,0); - VAROR(EMPTY,0,UI1,1,I2,1); - VAROR(EMPTY,0,I2,0,I2,0); - VAROR(EMPTY,0,I2,1,I2,1); - VAROR(EMPTY,0,UI2,0,I4,0); - VAROR(EMPTY,0,UI2,1,I4,1); - VAROR(EMPTY,0,I4,0,I4,0); - VAROR(EMPTY,0,I4,1,I4,1); - VAROR(EMPTY,0,UI4,0,I4,0); - VAROR(EMPTY,0,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VAROR(EMPTY,0,I8,0,I8,0); - VAROR(EMPTY,0,I8,1,I8,1); - VAROR(EMPTY,0,UI8,0,I4,0); - VAROR(EMPTY,0,UI8,1,I4,1); - } - VAROR(EMPTY,0,INT,0,I4,0); - VAROR(EMPTY,0,INT,1,I4,1); - VAROR(EMPTY,0,UINT,0,I4,0); - VAROR(EMPTY,0,UINT,1,I4,1); - VAROR(EMPTY,0,BOOL,0,I2,0); - VAROR(EMPTY,0,BOOL,1,I2,1); - VAROR(EMPTY,0,R4,0,I4,0); - VAROR(EMPTY,0,R4,1,I4,1); - VAROR(EMPTY,0,R8,0,I4,0); - VAROR(EMPTY,0,R8,1,I4,1); - rbstr = SysAllocString(szFalse); - VAROR(EMPTY,0,BSTR,rbstr,I2,0); - rbstr = SysAllocString(szTrue); - VAROR(EMPTY,0,BSTR,rbstr,I2,-1); - VARORCY(EMPTY,0,10000,I4,1); - - /* NULL OR 0 = NULL. NULL OR n = n */ - VAROR(NULL,0,NULL,0,NULL,0); - VAROR(NULL,1,NULL,0,NULL,0); - VAROR(NULL,0,I1,0,NULL,0); - VAROR(NULL,0,I1,1,I4,1); - VAROR(NULL,0,UI1,0,NULL,0); - VAROR(NULL,0,UI1,1,UI1,1); - VAROR(NULL,0,I2,0,NULL,0); - VAROR(NULL,0,I2,1,I2,1); - VAROR(NULL,0,UI2,0,NULL,0); - VAROR(NULL,0,UI2,1,I4,1); - VAROR(NULL,0,I4,0,NULL,0); - VAROR(NULL,0,I4,1,I4,1); - VAROR(NULL,0,UI4,0,NULL,0); - VAROR(NULL,0,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VAROR(NULL,0,I8,0,NULL,0); - VAROR(NULL,0,I8,1,I8,1); - VAROR(NULL,0,UI8,0,NULL,0); - VAROR(NULL,0,UI8,1,I4,1); - } - VAROR(NULL,0,INT,0,NULL,0); - VAROR(NULL,0,INT,1,I4,1); - VAROR(NULL,0,UINT,0,NULL,0); - VAROR(NULL,0,UINT,1,I4,1); - VAROR(NULL,0,BOOL,0,NULL,0); - VAROR(NULL,0,BOOL,1,BOOL,1); - VAROR(NULL,0,R4,0,NULL,0); - VAROR(NULL,0,R4,1,I4,1); - VAROR(NULL,0,R8,0,NULL,0); - VAROR(NULL,0,R8,1,I4,1); - rbstr = SysAllocString(szFalse); - VAROR(NULL,0,BSTR,rbstr,NULL,0); - rbstr = SysAllocString(szTrue); - VAROR(NULL,0,BSTR,rbstr,BOOL,VARIANT_TRUE); - VARORCY(NULL,0,10000,I4,1); - VARORCY(NULL,0,0,NULL,0); - - VAROR(BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE); - VAROR(BOOL,VARIANT_TRUE,BOOL,VARIANT_FALSE,BOOL,VARIANT_TRUE); - VAROR(BOOL,VARIANT_FALSE,BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE); - VAROR(BOOL,VARIANT_FALSE,BOOL,VARIANT_FALSE,BOOL,VARIANT_FALSE); - /* Assume x,y & y,x are the same from now on to reduce the number of tests */ - VAROR(BOOL,VARIANT_TRUE,I1,-1,I4,-1); - VAROR(BOOL,VARIANT_TRUE,I1,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,I1,0,I4,0); - VAROR(BOOL,VARIANT_TRUE,UI1,255,I2,-1); - VAROR(BOOL,VARIANT_TRUE,UI1,0,I2,-1); - VAROR(BOOL,VARIANT_FALSE,UI1,0,I2,0); - VAROR(BOOL,VARIANT_TRUE,I2,-1,I2,-1); - VAROR(BOOL,VARIANT_TRUE,I2,0,I2,-1); - VAROR(BOOL,VARIANT_FALSE,I2,0,I2,0); - VAROR(BOOL,VARIANT_TRUE,UI2,65535,I4,-1); - VAROR(BOOL,VARIANT_TRUE,UI2,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,UI2,0,I4,0); - VAROR(BOOL,VARIANT_TRUE,I4,-1,I4,-1); - VAROR(BOOL,VARIANT_TRUE,I4,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,I4,0,I4,0); - VAROR(BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,-1); - VAROR(BOOL,VARIANT_TRUE,UI4,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,UI4,0,I4,0); - VAROR(BOOL,VARIANT_TRUE,R4,-1,I4,-1); - VAROR(BOOL,VARIANT_TRUE,R4,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,R4,0,I4,0); - VAROR(BOOL,VARIANT_TRUE,R8,-1,I4,-1); - VAROR(BOOL,VARIANT_TRUE,R8,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,R8,0,I4,0); - VAROR(BOOL,VARIANT_TRUE,DATE,-1,I4,-1); - VAROR(BOOL,VARIANT_TRUE,DATE,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(BOOL,VARIANT_TRUE,I8,-1,I8,-1); - VAROR(BOOL,VARIANT_TRUE,I8,0,I8,-1); - VAROR(BOOL,VARIANT_FALSE,I8,0,I8,0); - /* This returns DISP_E_OVERFLOW which indicates that a conversion - * to I4 is performed. - */ - /* VAROR(BOOL,VARIANT_TRUE,UI8,-1,I4,-1); */ - VAROR(BOOL,VARIANT_TRUE,UI8,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,UI8,0,I4,0); - } - VAROR(BOOL,VARIANT_TRUE,INT,-1,I4,-1); - VAROR(BOOL,VARIANT_TRUE,INT,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,INT,0,I4,0); - VAROR(BOOL,VARIANT_TRUE,UINT,0xffffffff,I4,-1); - VAROR(BOOL,VARIANT_TRUE,UINT,0,I4,-1); - VAROR(BOOL,VARIANT_FALSE,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(BOOL,VARIANT_FALSE,BSTR,rbstr,BOOL,VARIANT_FALSE); - VAROR(BOOL,VARIANT_TRUE,BSTR,rbstr,BOOL,VARIANT_TRUE); - rbstr = SysAllocString(szTrue); - VAROR(BOOL,VARIANT_FALSE,BSTR,rbstr,BOOL,VARIANT_TRUE); - VAROR(BOOL,VARIANT_TRUE,BSTR,rbstr,BOOL,VARIANT_TRUE); - VARORCY(BOOL,VARIANT_TRUE,10000,I4,-1); - VARORCY(BOOL,VARIANT_TRUE,0,I4,-1); - VARORCY(BOOL,VARIANT_FALSE,0,I4,0); - - VAROR(I1,-1,I1,-1,I4,-1); - VAROR(I1,-1,I1,0,I4,-1); - VAROR(I1,0,I1,0,I4,0); - VAROR(I1,-1,UI1,255,I4,-1); - VAROR(I1,-1,UI1,0,I4,-1); - VAROR(I1,0,UI1,0,I4,0); - VAROR(I1,-1,I2,-1,I4,-1); - VAROR(I1,-1,I2,0,I4,-1); - VAROR(I1,0,I2,0,I4,0); - VAROR(I1,-1,UI2,65535,I4,-1); - VAROR(I1,-1,UI2,0,I4,-1); - VAROR(I1,0,UI2,0,I4,0); - VAROR(I1,-1,I4,-1,I4,-1); - VAROR(I1,-1,I4,0,I4,-1); - VAROR(I1,0,I4,0,I4,0); - VAROR(I1,-1,UI4,0xffffffff,I4,-1); - VAROR(I1,-1,UI4,0,I4,-1); - VAROR(I1,0,UI4,0,I4,0); - VAROR(I1,-1,R4,-1,I4,-1); - VAROR(I1,-1,R4,0,I4,-1); - VAROR(I1,0,R4,0,I4,0); - VAROR(I1,-1,R8,-1,I4,-1); - VAROR(I1,-1,R8,0,I4,-1); - VAROR(I1,0,R8,0,I4,0); - VAROR(I1,-1,DATE,-1,I4,-1); - VAROR(I1,-1,DATE,0,I4,-1); - VAROR(I1,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(I1,-1,I8,-1,I8,-1); - VAROR(I1,-1,I8,0,I8,-1); - VAROR(I1,0,I8,0,I8,0); - VAROR(I1,-1,UI8,0,I4,-1); - VAROR(I1,0,UI8,0,I4,0); - } - VAROR(I1,-1,INT,-1,I4,-1); - VAROR(I1,-1,INT,0,I4,-1); - VAROR(I1,0,INT,0,I4,0); - VAROR(I1,-1,UINT,0xffffffff,I4,-1); - VAROR(I1,-1,UINT,0,I4,-1); - VAROR(I1,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(I1,0,BSTR,rbstr,I4,0); - VAROR(I1,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VAROR(I1,0,BSTR,rbstr,I4,-1); - VAROR(I1,-1,BSTR,rbstr,I4,-1); - VARORCY(I1,-1,10000,I4,-1); - VARORCY(I1,-1,0,I4,-1); - VARORCY(I1,0,0,I4,0); - - VAROR(UI1,255,UI1,255,UI1,255); - VAROR(UI1,255,UI1,0,UI1,255); - VAROR(UI1,0,UI1,0,UI1,0); - VAROR(UI1,255,I2,-1,I2,-1); - VAROR(UI1,255,I2,0,I2,255); - VAROR(UI1,0,I2,0,I2,0); - VAROR(UI1,255,UI2,65535,I4,65535); - VAROR(UI1,255,UI2,0,I4,255); - VAROR(UI1,0,UI2,0,I4,0); - VAROR(UI1,255,I4,-1,I4,-1); - VAROR(UI1,255,I4,0,I4,255); - VAROR(UI1,0,I4,0,I4,0); - VAROR(UI1,255,UI4,0xffffffff,I4,-1); - VAROR(UI1,255,UI4,0,I4,255); - VAROR(UI1,0,UI4,0,I4,0); - VAROR(UI1,255,R4,-1,I4,-1); - VAROR(UI1,255,R4,0,I4,255); - VAROR(UI1,0,R4,0,I4,0); - VAROR(UI1,255,R8,-1,I4,-1); - VAROR(UI1,255,R8,0,I4,255); - VAROR(UI1,0,R8,0,I4,0); - VAROR(UI1,255,DATE,-1,I4,-1); - VAROR(UI1,255,DATE,0,I4,255); - VAROR(UI1,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(UI1,255,I8,-1,I8,-1); - VAROR(UI1,255,I8,0,I8,255); - VAROR(UI1,0,I8,0,I8,0); - VAROR(UI1,255,UI8,0,I4,255); - VAROR(UI1,0,UI8,0,I4,0); - } - VAROR(UI1,255,INT,-1,I4,-1); - VAROR(UI1,255,INT,0,I4,255); - VAROR(UI1,0,INT,0,I4,0); - VAROR(UI1,255,UINT,0xffffffff,I4,-1); - VAROR(UI1,255,UINT,0,I4,255); - VAROR(UI1,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(UI1,0,BSTR,rbstr,I2,0); - VAROR(UI1,255,BSTR,rbstr,I2,255); - rbstr = SysAllocString(szTrue); - VAROR(UI1,0,BSTR,rbstr,I2,-1); - VAROR(UI1,255,BSTR,rbstr,I2,-1); - VARORCY(UI1,255,10000,I4,255); - VARORCY(UI1,255,0,I4,255); - VARORCY(UI1,0,0,I4,0); - - VAROR(I2,-1,I2,-1,I2,-1); - VAROR(I2,-1,I2,0,I2,-1); - VAROR(I2,0,I2,0,I2,0); - VAROR(I2,-1,UI2,65535,I4,-1); - VAROR(I2,-1,UI2,0,I4,-1); - VAROR(I2,0,UI2,0,I4,0); - VAROR(I2,-1,I4,-1,I4,-1); - VAROR(I2,-1,I4,0,I4,-1); - VAROR(I2,0,I4,0,I4,0); - VAROR(I2,-1,UI4,0xffffffff,I4,-1); - VAROR(I2,-1,UI4,0,I4,-1); - VAROR(I2,0,UI4,0,I4,0); - VAROR(I2,-1,R4,-1,I4,-1); - VAROR(I2,-1,R4,0,I4,-1); - VAROR(I2,0,R4,0,I4,0); - VAROR(I2,-1,R8,-1,I4,-1); - VAROR(I2,-1,R8,0,I4,-1); - VAROR(I2,0,R8,0,I4,0); - VAROR(I2,-1,DATE,-1,I4,-1); - VAROR(I2,-1,DATE,0,I4,-1); - VAROR(I2,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(I2,-1,I8,-1,I8,-1); - VAROR(I2,-1,I8,0,I8,-1); - VAROR(I2,0,I8,0,I8,0); - VAROR(I2,-1,UI8,0,I4,-1); - VAROR(I2,0,UI8,0,I4,0); - } - VAROR(I2,-1,INT,-1,I4,-1); - VAROR(I2,-1,INT,0,I4,-1); - VAROR(I2,0,INT,0,I4,0); - VAROR(I2,-1,UINT,0xffffffff,I4,-1); - VAROR(I2,-1,UINT,0,I4,-1); - VAROR(I2,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(I2,0,BSTR,rbstr,I2,0); - VAROR(I2,-1,BSTR,rbstr,I2,-1); - rbstr = SysAllocString(szTrue); - VAROR(I2,0,BSTR,rbstr,I2,-1); - VAROR(I2,-1,BSTR,rbstr,I2,-1); - VARORCY(I2,-1,10000,I4,-1); - VARORCY(I2,-1,0,I4,-1); - VARORCY(I2,0,0,I4,0); - - VAROR(UI2,65535,UI2,65535,I4,65535); - VAROR(UI2,65535,UI2,0,I4,65535); - VAROR(UI2,0,UI2,0,I4,0); - VAROR(UI2,65535,I4,-1,I4,-1); - VAROR(UI2,65535,I4,0,I4,65535); - VAROR(UI2,0,I4,0,I4,0); - VAROR(UI2,65535,UI4,0xffffffff,I4,-1); - VAROR(UI2,65535,UI4,0,I4,65535); - VAROR(UI2,0,UI4,0,I4,0); - VAROR(UI2,65535,R4,-1,I4,-1); - VAROR(UI2,65535,R4,0,I4,65535); - VAROR(UI2,0,R4,0,I4,0); - VAROR(UI2,65535,R8,-1,I4,-1); - VAROR(UI2,65535,R8,0,I4,65535); - VAROR(UI2,0,R8,0,I4,0); - VAROR(UI2,65535,DATE,-1,I4,-1); - VAROR(UI2,65535,DATE,0,I4,65535); - VAROR(UI2,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(UI2,65535,I8,-1,I8,-1); - VAROR(UI2,65535,I8,0,I8,65535); - VAROR(UI2,0,I8,0,I8,0); - VAROR(UI2,65535,UI8,0,I4,65535); - VAROR(UI2,0,UI8,0,I4,0); - } - VAROR(UI2,65535,INT,-1,I4,-1); - VAROR(UI2,65535,INT,0,I4,65535); - VAROR(UI2,0,INT,0,I4,0); - VAROR(UI2,65535,UINT,0xffffffff,I4,-1); - VAROR(UI2,65535,UINT,0,I4,65535); - VAROR(UI2,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(UI2,0,BSTR,rbstr,I4,0); - VAROR(UI2,65535,BSTR,rbstr,I4,65535); - rbstr = SysAllocString(szTrue); - VAROR(UI2,0,BSTR,rbstr,I4,-1); - VAROR(UI2,65535,BSTR,rbstr,I4,-1); - VARORCY(UI2,65535,10000,I4,65535); - VARORCY(UI2,65535,0,I4,65535); - VARORCY(UI2,0,0,I4,0); - - VAROR(I4,-1,I4,-1,I4,-1); - VAROR(I4,-1,I4,0,I4,-1); - VAROR(I4,0,I4,0,I4,0); - VAROR(I4,-1,UI4,0xffffffff,I4,-1); - VAROR(I4,-1,UI4,0,I4,-1); - VAROR(I4,0,UI4,0,I4,0); - VAROR(I4,-1,R4,-1,I4,-1); - VAROR(I4,-1,R4,0,I4,-1); - VAROR(I4,0,R4,0,I4,0); - VAROR(I4,-1,R8,-1,I4,-1); - VAROR(I4,-1,R8,0,I4,-1); - VAROR(I4,0,R8,0,I4,0); - VAROR(I4,-1,DATE,-1,I4,-1); - VAROR(I4,-1,DATE,0,I4,-1); - VAROR(I4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(I4,-1,I8,-1,I8,-1); - VAROR(I4,-1,I8,0,I8,-1); - VAROR(I4,0,I8,0,I8,0); - VAROR(I4,-1,UI8,0,I4,-1); - VAROR(I4,0,UI8,0,I4,0); - } - VAROR(I4,-1,INT,-1,I4,-1); - VAROR(I4,-1,INT,0,I4,-1); - VAROR(I4,0,INT,0,I4,0); - VAROR(I4,-1,UINT,0xffffffff,I4,-1); - VAROR(I4,-1,UINT,0,I4,-1); - VAROR(I4,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(I4,0,BSTR,rbstr,I4,0); - VAROR(I4,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VAROR(I4,0,BSTR,rbstr,I4,-1); - VAROR(I4,-1,BSTR,rbstr,I4,-1); - VARORCY(I4,-1,10000,I4,-1); - VARORCY(I4,-1,0,I4,-1); - VARORCY(I4,0,0,I4,0); - - VAROR(UI4,0xffffffff,UI4,0xffffffff,I4,-1); - VAROR(UI4,0xffffffff,UI4,0,I4,-1); - VAROR(UI4,0,UI4,0,I4,0); - VAROR(UI4,0xffffffff,R4,-1,I4,-1); - VAROR(UI4,0xffffffff,R4,0,I4,-1); - VAROR(UI4,0,R4,0,I4,0); - VAROR(UI4,0xffffffff,R8,-1,I4,-1); - VAROR(UI4,0xffffffff,R8,0,I4,-1); - VAROR(UI4,0,R8,0,I4,0); - VAROR(UI4,0xffffffff,DATE,-1,I4,-1); - VAROR(UI4,0xffffffff,DATE,0,I4,-1); - VAROR(UI4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(UI4,0xffffffff,I8,-1,I8,-1); - VAROR(UI4,0xffffffff,I8,0,I8,0xffffffff); - VAROR(UI4,0,I8,0,I8,0); - VAROR(UI4,0xffffffff,UI8,0,I4,-1); - VAROR(UI4,0,UI8,0,I4,0); - } - VAROR(UI4,0xffffffff,INT,-1,I4,-1); - VAROR(UI4,0xffffffff,INT,0,I4,-1); - VAROR(UI4,0,INT,0,I4,0); - VAROR(UI4,0xffffffff,UINT,0xffffffff,I4,-1); - VAROR(UI4,0xffffffff,UINT,0,I4,-1); - VAROR(UI4,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(UI4,0,BSTR,rbstr,I4,0); - VAROR(UI4,0xffffffff,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VAROR(UI4,0,BSTR,rbstr,I4,-1); - VAROR(UI4,0xffffffff,BSTR,rbstr,I4,-1); - VARORCY(UI4,0xffffffff,10000,I4,-1); - VARORCY(UI4,0xffffffff,0,I4,-1); - VARORCY(UI4,0,0,I4,0); - - VAROR(R4,-1,R4,-1,I4,-1); - VAROR(R4,-1,R4,0,I4,-1); - VAROR(R4,0,R4,0,I4,0); - VAROR(R4,-1,R8,-1,I4,-1); - VAROR(R4,-1,R8,0,I4,-1); - VAROR(R4,0,R8,0,I4,0); - VAROR(R4,-1,DATE,-1,I4,-1); - VAROR(R4,-1,DATE,0,I4,-1); - VAROR(R4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(R4,-1,I8,-1,I8,-1); - VAROR(R4,-1,I8,0,I8,-1); - VAROR(R4,0,I8,0,I8,0); - VAROR(R4,-1,UI8,0,I4,-1); - VAROR(R4,0,UI8,0,I4,0); - } - VAROR(R4,-1,INT,-1,I4,-1); - VAROR(R4,-1,INT,0,I4,-1); - VAROR(R4,0,INT,0,I4,0); - VAROR(R4,-1,UINT,0xffffffff,I4,-1); - VAROR(R4,-1,UINT,0,I4,-1); - VAROR(R4,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(R4,0,BSTR,rbstr,I4,0); - VAROR(R4,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VAROR(R4,0,BSTR,rbstr,I4,-1); - VAROR(R4,-1,BSTR,rbstr,I4,-1); - VARORCY(R4,-1,10000,I4,-1); - VARORCY(R4,-1,0,I4,-1); - VARORCY(R4,0,0,I4,0); - - VAROR(R8,-1,R8,-1,I4,-1); - VAROR(R8,-1,R8,0,I4,-1); - VAROR(R8,0,R8,0,I4,0); - VAROR(R8,-1,DATE,-1,I4,-1); - VAROR(R8,-1,DATE,0,I4,-1); - VAROR(R8,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(R8,-1,I8,-1,I8,-1); - VAROR(R8,-1,I8,0,I8,-1); - VAROR(R8,0,I8,0,I8,0); - VAROR(R8,-1,UI8,0,I4,-1); - VAROR(R8,0,UI8,0,I4,0); - } - VAROR(R8,-1,INT,-1,I4,-1); - VAROR(R8,-1,INT,0,I4,-1); - VAROR(R8,0,INT,0,I4,0); - VAROR(R8,-1,UINT,0xffffffff,I4,-1); - VAROR(R8,-1,UINT,0,I4,-1); - VAROR(R8,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(R8,0,BSTR,rbstr,I4,0); - VAROR(R8,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VAROR(R8,0,BSTR,rbstr,I4,-1); - VAROR(R8,-1,BSTR,rbstr,I4,-1); - VARORCY(R8,-1,10000,I4,-1); - VARORCY(R8,-1,0,I4,-1); - VARORCY(R8,0,0,I4,0); - - VAROR(DATE,-1,DATE,-1,I4,-1); - VAROR(DATE,-1,DATE,0,I4,-1); - VAROR(DATE,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VAROR(DATE,-1,I8,-1,I8,-1); - VAROR(DATE,-1,I8,0,I8,-1); - VAROR(DATE,0,I8,0,I8,0); - VAROR(DATE,-1,UI8,0,I4,-1); - VAROR(DATE,0,UI8,0,I4,0); - } - VAROR(DATE,-1,INT,-1,I4,-1); - VAROR(DATE,-1,INT,0,I4,-1); - VAROR(DATE,0,INT,0,I4,0); - VAROR(DATE,-1,UINT,0xffffffff,I4,-1); - VAROR(DATE,-1,UINT,0,I4,-1); - VAROR(DATE,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(DATE,0,BSTR,rbstr,I4,0); - VAROR(DATE,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VAROR(DATE,0,BSTR,rbstr,I4,-1); - VAROR(DATE,-1,BSTR,rbstr,I4,-1); - VARORCY(DATE,-1,10000,I4,-1); - VARORCY(DATE,-1,0,I4,-1); - VARORCY(DATE,0,0,I4,0); - - if (HAVE_OLEAUT32_I8) - { - VAROR(I8,-1,I8,-1,I8,-1); - VAROR(I8,-1,I8,0,I8,-1); - VAROR(I8,0,I8,0,I8,0); - VAROR(I8,-1,UI8,0,I8,-1); - VAROR(I8,0,UI8,0,I8,0); - /* These overflow under native and Wine - VAROR(I8,-1,INT,-1,I4,-1); - VAROR(I8,-1,INT,0,I4,-1); - VAROR(I8,0,INT,0,I4,0); */ - VAROR(I8,-1,UINT,0xffffffff,I8,-1); - VAROR(I8,-1,UINT,0,I8,-1); - VAROR(I8,0,UINT,0,I8,0); - rbstr = SysAllocString(szFalse); - VAROR(I8,0,BSTR,rbstr,I8,0); - VAROR(I8,-1,BSTR,rbstr,I8,-1); - rbstr = SysAllocString(szTrue); - VAROR(I8,0,BSTR,rbstr,I8,-1); - VAROR(I8,-1,BSTR,rbstr,I8,-1); - VARORCY(I8,-1,10000,I8,-1); - VARORCY(I8,-1,0,I8,-1); - VARORCY(I8,0,0,I8,0); - - VAROR(UI8,0xffff,UI8,0xffff,I4,0xffff); - VAROR(UI8,0xffff,UI8,0,I4,0xffff); - VAROR(UI8,0,UI8,0,I4,0); - VAROR(UI8,0xffff,INT,-1,I4,-1); - VAROR(UI8,0xffff,INT,0,I4,0xffff); - VAROR(UI8,0,INT,0,I4,0); - VAROR(UI8,0xffff,UINT,0xffff,I4,0xffff); - VAROR(UI8,0xffff,UINT,0,I4,0xffff); - VAROR(UI8,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(UI8,0,BSTR,rbstr,I4,0); - VAROR(UI8,0xffff,BSTR,rbstr,I4,0xffff); - rbstr = SysAllocString(szTrue); - VAROR(UI8,0,BSTR,rbstr,I4,-1); - VAROR(UI8,0xffff,BSTR,rbstr,I4,-1); - VARORCY(UI8,0xffff,10000,I4,0xffff); - VARORCY(UI8,0xffff,0,I4,0xffff); - VARORCY(UI8,0,0,I4,0); - } - - VAROR(INT,-1,INT,-1,I4,-1); - VAROR(INT,-1,INT,0,I4,-1); - VAROR(INT,0,INT,0,I4,0); - VAROR(INT,-1,UINT,0xffff,I4,-1); - VAROR(INT,-1,UINT,0,I4,-1); - VAROR(INT,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(INT,0,BSTR,rbstr,I4,0); - VAROR(INT,-1,BSTR,rbstr,I4,-1); - rbstr = SysAllocString(szTrue); - VAROR(INT,0,BSTR,rbstr,I4,-1); - VAROR(INT,-1,BSTR,rbstr,I4,-1); - VARORCY(INT,-1,10000,I4,-1); - VARORCY(INT,-1,0,I4,-1); - VARORCY(INT,0,0,I4,0); - - VAROR(UINT,0xffff,UINT,0xffff,I4,0xffff); - VAROR(UINT,0xffff,UINT,0,I4,0xffff); - VAROR(UINT,0,UINT,0,I4,0); - rbstr = SysAllocString(szFalse); - VAROR(UINT,0,BSTR,rbstr,I4,0); - VAROR(UINT,0xffff,BSTR,rbstr,I4,0xffff); - rbstr = SysAllocString(szTrue); - VAROR(UINT,0,BSTR,rbstr,I4,-1); - VAROR(UINT,0xffff,BSTR,rbstr,I4,-1); - VARORCY(UINT,0xffff,10000,I4,0xffff); - VARORCY(UINT,0xffff,0,I4,0xffff); - VARORCY(UINT,0,0,I4,0); - - lbstr = SysAllocString(szFalse); - rbstr = SysAllocString(szFalse); - VAROR(BSTR,lbstr,BSTR,rbstr,BOOL,0); - rbstr = SysAllocString(szTrue); - VAROR(BSTR,lbstr,BSTR,rbstr,BOOL,VARIANT_TRUE); - lbstr = SysAllocString(szTrue); - VAROR(BSTR,lbstr,BSTR,rbstr,BOOL,VARIANT_TRUE); - VARORCY(BSTR,lbstr,10000,I4,-1); - lbstr = SysAllocString(szFalse); - VARORCY(BSTR,lbstr,10000,I4,1); -} - -static HRESULT (WINAPI *pVarEqv)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VAREQV(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarEqv, &left, &right, &exp ) - -static void test_VarEqv(void) -{ - VARIANT left, right, exp, result; - VARTYPE i; - HRESULT hres; - - CHECKPTR(VarEqv); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - SKIPTESTS(leftvt); - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - - SKIPTESTS(rightvt); - - if (leftvt == VT_BSTR || rightvt == VT_BSTR || - leftvt == VT_DISPATCH || rightvt == VT_DISPATCH || - leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - V_VT(&right) = rightvt | ExtraFlags[i]; - V_VT(&result) = VT_EMPTY; - resvt = VT_I4; - - if (ExtraFlags[i] & VT_ARRAY || ExtraFlags[i] & VT_BYREF || - !IsValidVariantClearVT(leftvt, ExtraFlags[i]) || - !IsValidVariantClearVT(rightvt, ExtraFlags[i]) || - leftvt == VT_CLSID || rightvt == VT_CLSID || - leftvt == VT_RECORD || rightvt == VT_RECORD || - leftvt == VT_VARIANT || rightvt == VT_VARIANT || - leftvt == VT_ERROR || rightvt == VT_ERROR) - { - bFail = TRUE; - } - if (leftvt == VT_EMPTY || rightvt == VT_EMPTY) - { - if (leftvt == rightvt || - leftvt == VT_I2 || rightvt == VT_I2 || - leftvt == VT_UI1 || rightvt == VT_UI1 || - leftvt == VT_BOOL || rightvt == VT_BOOL) - resvt = VT_I2; - else if (leftvt == VT_NULL || rightvt == VT_NULL) - resvt = VT_NULL; - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_NULL || rightvt == VT_NULL) - { - resvt = VT_NULL; - } - else if (leftvt == VT_UI1 || rightvt == VT_UI1) - { - if (leftvt == rightvt) - resvt = VT_UI1; - else if (leftvt == rightvt || - leftvt == VT_I2 || rightvt == VT_I2 || - leftvt == VT_BOOL || rightvt == VT_BOOL) - { - resvt = VT_I2; - } - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_I2 || rightvt == VT_I2) - { - if (leftvt == rightvt || - leftvt == VT_BOOL || rightvt == VT_BOOL) - resvt = VT_I2; - else if (leftvt == VT_I8 || rightvt == VT_I8) - resvt = VT_I8; - } - else if (leftvt == VT_BOOL && rightvt == VT_BOOL) - { - resvt = VT_BOOL; - } - else if (leftvt == VT_I8 || rightvt == VT_I8) - { - if (leftvt == VT_INT || rightvt == VT_INT) - bFail = TRUE; - else - resvt = VT_I8; - } - hres = pVarEqv(&left, &right, &result); - if (bFail) - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarEqv: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], hres, - V_VT(&result)); - else - ok(hres == S_OK && V_VT(&result) == resvt, - "VarEqv: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], resvt, hres, - V_VT(&result)); - } - } - } - - /* Test returned values */ - VAREQV(BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE); - VAREQV(BOOL,VARIANT_FALSE,BOOL,VARIANT_TRUE,BOOL,VARIANT_FALSE); - VAREQV(BOOL,TRUE,BOOL,TRUE,BOOL,VARIANT_TRUE); - VAREQV(BOOL,FALSE,BOOL,FALSE,BOOL,VARIANT_TRUE); - VAREQV(BOOL,TRUE,BOOL,FALSE,BOOL,-2); - VAREQV(BOOL,FALSE,BOOL,TRUE,BOOL,-2); - VAREQV(BOOL,6,BOOL,7,BOOL,-2); - VAREQV(BOOL,6,BOOL,6,BOOL,VARIANT_TRUE); - VAREQV(BOOL,VARIANT_TRUE,I2,VARIANT_TRUE,I2,VARIANT_TRUE); - VAREQV(BOOL,VARIANT_TRUE,I2,VARIANT_FALSE,I2,VARIANT_FALSE); - VAREQV(BOOL,6,I2,7,I2,-2); - VAREQV(UI1,1,UI1,1,UI1,255); - VAREQV(UI1,1,UI1,0,UI1,254); - VAREQV(UI1,0,UI1,1,UI1,254); - if (HAVE_OLEAUT32_I8) - { - VAREQV(UI4,VARIANT_FALSE,I8,VARIANT_FALSE,I8,-1); - VAREQV(UI4,5,I8,19,I8,-23); - VAREQV(UI4,VARIANT_FALSE,UI8,VARIANT_FALSE,I4,-1); - } -} - -static HRESULT (WINAPI *pVarMul)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARMUL(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarMul, &left, &right, &exp ) - -static void test_VarMul(void) -{ - static const WCHAR sz12[] = {'1','2','\0'}; - VARIANT left, right, exp, result, cy, dec; - VARTYPE i; - BSTR lbstr, rbstr; - HRESULT hres; - double r; - - CHECKPTR(VarMul); - - lbstr = SysAllocString(sz12); - rbstr = SysAllocString(sz12); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - - SKIPTESTS(leftvt); - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - - SKIPTESTS(rightvt); - - if (leftvt == VT_DISPATCH || rightvt == VT_DISPATCH || - leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - if (leftvt == VT_BSTR) - V_BSTR(&left) = lbstr; - V_VT(&right) = rightvt | ExtraFlags[i]; - if (rightvt == VT_BSTR) - V_BSTR(&right) = rbstr; - V_VT(&result) = VT_EMPTY; - resvt = VT_UNKNOWN; - - /* Don't ask me why but native VarMul cannot handle: - VT_I1, VT_UI2, VT_UI4, VT_INT, VT_UINT and VT_UI8. - Tested with DCOM98, Win2k, WinXP */ - if (ExtraFlags[i] & VT_ARRAY || ExtraFlags[i] & VT_BYREF || - !IsValidVariantClearVT(leftvt, ExtraFlags[i]) || - !IsValidVariantClearVT(rightvt, ExtraFlags[i]) || - leftvt == VT_CLSID || rightvt == VT_CLSID || - leftvt == VT_RECORD || rightvt == VT_RECORD || - leftvt == VT_VARIANT || rightvt == VT_VARIANT || - leftvt == VT_ERROR || rightvt == VT_ERROR || - 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) { - bFail = TRUE; - } - - if (leftvt == VT_NULL || rightvt == VT_NULL) - resvt = VT_NULL; - else if (leftvt == VT_DECIMAL || rightvt == VT_DECIMAL) - resvt = VT_DECIMAL; - else if (leftvt == VT_R8 || rightvt == VT_R8 || - leftvt == VT_BSTR || rightvt == VT_BSTR || - leftvt == VT_DATE || rightvt == VT_DATE) - resvt = VT_R8; - else if (leftvt == VT_R4 || rightvt == VT_R4) { - if (leftvt == VT_I4 || rightvt == VT_I4 || - leftvt == VT_I8 || rightvt == VT_I8 || - leftvt == VT_CY || rightvt == VT_CY) - resvt = VT_R8; - else - resvt = VT_R4; - } else if (leftvt == VT_CY || rightvt == VT_CY) - resvt = VT_CY; - 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; - - hres = pVarMul(&left, &right, &result); - if (bFail) { - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarMul: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], hres, - V_VT(&result)); - } else { - ok(hres == S_OK && V_VT(&result) == resvt, - "VarMul: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], resvt, hres, - V_VT(&result)); - } - } - } - } - - /* Test returned values */ - VARMUL(I4,4,I4,2,I4,8); - VARMUL(I2,4,I2,2,I2,8); - VARMUL(I2,-13,I4,5,I4,-65); - VARMUL(I4,-13,I4,5,I4,-65); - VARMUL(I2,7,R4,0.5f,R4,3.5f); - VARMUL(R4,0.5f,I4,5,R8,2.5); - VARMUL(R8,7.1,BOOL,0,R8,0); - VARMUL(BSTR,lbstr,I2,4,R8,48); - VARMUL(BSTR,lbstr,BOOL,1,R8,12); - VARMUL(BSTR,lbstr,R4,0.1f,R8,1.2); - VARMUL(BSTR,lbstr,BSTR,rbstr,R8,144); - VARMUL(R4,0.2f,BSTR,rbstr,R8,2.4); - VARMUL(DATE,2.25,I4,7,R8,15.75); - - VARMUL(UI1, UI1_MAX, UI1, UI1_MAX, I4, UI1_MAX * UI1_MAX); - VARMUL(I2, I2_MAX, I2, I2_MAX, I4, I2_MAX * I2_MAX); - VARMUL(I2, I2_MAX, I2, I2_MIN, I4, I2_MAX * I2_MIN); - VARMUL(I2, I2_MIN, I2, I2_MIN, I4, I2_MIN * I2_MIN); - VARMUL(I4, I4_MAX, I4, I4_MAX, R8, (double)I4_MAX * I4_MAX); - VARMUL(I4, I4_MAX, I4, I4_MIN, R8, (double)I4_MAX * I4_MIN); - VARMUL(I4, I4_MIN, I4, I4_MIN, R8, (double)I4_MIN * I4_MIN); - VARMUL(R4, R4_MAX, R4, R4_MAX, R8, (double)R4_MAX * R4_MAX); - VARMUL(R4, R4_MAX, R4, R4_MIN, R4, R4_MAX * R4_MIN); - VARMUL(R4, R4_MIN, R4, R4_MIN, R4, R4_MIN * R4_MIN); - VARMUL(R8, R8_MAX, R8, R8_MIN, R8, R8_MAX * R8_MIN); - VARMUL(R8, R8_MIN, R8, R8_MIN, R8, R8_MIN * R8_MIN); - - /* Manuly test some VT_CY and VT_DECIMAL variants */ - V_VT(&cy) = VT_CY; - hres = VarCyFromI4(4711, &V_CY(&cy)); - ok(hres == S_OK, "VarCyFromI4 failed!\n"); - V_VT(&dec) = VT_DECIMAL; - hres = VarDecFromR8(-4.2, &V_DECIMAL(&dec)); - ok(hres == S_OK, "VarDecFromR4 failed!\n"); - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = VT_I4; - V_I4(&left) = -11; - V_VT(&right) = VT_UI1; - V_UI1(&right) = 9; - - hres = VarMul(&cy, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_CY, "VarMul: expected coerced type VT_CY, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromCy(V_CY(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, 42399), "VarMul: CY value %f, expected %f\n", r, (double)42399); - - hres = VarMul(&left, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_DECIMAL, "VarMul: expected coerced type VT_DECIMAL, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromDec(&V_DECIMAL(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, 46.2), "VarMul: DECIMAL value %f, expected %f\n", r, (double)46.2); - - SysFreeString(lbstr); - SysFreeString(rbstr); -} - -static HRESULT (WINAPI *pVarAdd)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARADD(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarAdd, &left, &right, &exp ) - -static void test_VarAdd(void) -{ - static const WCHAR sz12[] = {'1','2','\0'}; - VARIANT left, right, exp, result, cy, dec; - VARTYPE i; - BSTR lbstr, rbstr; - HRESULT hres; - double r; - - CHECKPTR(VarAdd); - - lbstr = SysAllocString(sz12); - rbstr = SysAllocString(sz12); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - - SKIPTESTS(leftvt); - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - - SKIPTESTS(rightvt); - - if (leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - if (leftvt == VT_BSTR) - V_BSTR(&left) = lbstr; - V_VT(&right) = rightvt | ExtraFlags[i]; - if (rightvt == VT_BSTR) - V_BSTR(&right) = rbstr; - V_VT(&result) = VT_EMPTY; - resvt = VT_ERROR; - - /* Don't ask me why but native VarAdd cannot handle: - VT_I1, VT_UI2, VT_UI4, VT_INT, VT_UINT and VT_UI8. - Tested with DCOM98, Win2k, WinXP */ - if (ExtraFlags[i] & VT_ARRAY || ExtraFlags[i] & VT_BYREF || - !IsValidVariantClearVT(leftvt, ExtraFlags[i]) || - !IsValidVariantClearVT(rightvt, ExtraFlags[i]) || - leftvt == VT_CLSID || rightvt == VT_CLSID || - leftvt == VT_RECORD || rightvt == VT_RECORD || - leftvt == VT_VARIANT || rightvt == VT_VARIANT || - leftvt == VT_ERROR || rightvt == VT_ERROR || - 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) { - bFail = TRUE; - } - - if (leftvt == VT_NULL || rightvt == VT_NULL) - resvt = VT_NULL; - else if (leftvt == VT_DISPATCH || rightvt == VT_DISPATCH) - bFail = TRUE; - 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) { - if ((leftvt == VT_BSTR && rightvt == VT_BSTR) || - leftvt == VT_EMPTY || rightvt == VT_EMPTY) - resvt = VT_BSTR; - else - 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; - - hres = pVarAdd(&left, &right, &result); - if (bFail) { - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarAdd: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], hres, - V_VT(&result)); - } else { - ok(hres == S_OK && V_VT(&result) == resvt, - "VarAdd: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], resvt, hres, - V_VT(&result)); - } - } - } - } - - /* Test returned values */ - VARADD(I4,4,I4,2,I4,6); - VARADD(I2,4,I2,2,I2,6); - VARADD(I2,-13,I4,5,I4,-8); - VARADD(I4,-13,I4,5,I4,-8); - VARADD(I2,7,R4,0.5f,R4,7.5f); - VARADD(R4,0.5f,I4,5,R8,5.5); - VARADD(R8,7.1,BOOL,0,R8,7.1); - VARADD(BSTR,lbstr,I2,4,R8,16); - VARADD(BSTR,lbstr,BOOL,1,R8,13); - VARADD(BSTR,lbstr,R4,0.1f,R8,12.1); - VARADD(R4,0.2f,BSTR,rbstr,R8,12.2); - VARADD(DATE,2.25,I4,7,DATE,9.25); - VARADD(DATE,1.25,R4,-1.7f,DATE,-0.45); - - VARADD(UI1, UI1_MAX, UI1, UI1_MAX, I2, UI1_MAX + UI1_MAX); - VARADD(I2, I2_MAX, I2, I2_MAX, I4, I2_MAX + I2_MAX); - VARADD(I2, I2_MAX, I2, I2_MIN, I2, I2_MAX + I2_MIN); - VARADD(I2, I2_MIN, I2, I2_MIN, I4, I2_MIN + I2_MIN); - VARADD(I4, I4_MAX, I4, I4_MIN, I4, I4_MAX + I4_MIN); - VARADD(I4, I4_MAX, I4, I4_MAX, R8, (double)I4_MAX + I4_MAX); - VARADD(I4, I4_MIN, I4, I4_MIN, R8, (double)I4_MIN + I4_MIN); - VARADD(R4, R4_MAX, R4, R4_MAX, R8, (double)R4_MAX + R4_MAX); - VARADD(R4, R4_MAX, R4, R4_MIN, R4, R4_MAX + R4_MIN); - VARADD(R4, R4_MIN, R4, R4_MIN, R4, R4_MIN + R4_MIN); - VARADD(R8, R8_MAX, R8, R8_MIN, R8, R8_MAX + R8_MIN); - VARADD(R8, R8_MIN, R8, R8_MIN, R8, R8_MIN + R8_MIN); - - /* Manually test BSTR + BSTR */ - V_VT(&left) = VT_BSTR; - V_BSTR(&left) = lbstr; - V_VT(&right) = VT_BSTR; - V_BSTR(&right) = rbstr; - hres = VarAdd(&left, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_BSTR, "VarAdd: expected coerced type VT_BSTR, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromStr(V_BSTR(&result), 0, 0, &r); - ok(hres == S_OK && EQ_DOUBLE(r, 1212), "VarAdd: BSTR value %f, expected %f\n", r, (double)1212); - - /* Manuly test some VT_CY and VT_DECIMAL variants */ - V_VT(&cy) = VT_CY; - hres = VarCyFromI4(4711, &V_CY(&cy)); - ok(hres == S_OK, "VarCyFromI4 failed!\n"); - V_VT(&dec) = VT_DECIMAL; - hres = VarDecFromR8(-4.2, &V_DECIMAL(&dec)); - ok(hres == S_OK, "VarDecFromR4 failed!\n"); - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = VT_I4; - V_I4(&left) = -11; - V_VT(&right) = VT_UI1; - V_UI1(&right) = 9; - - hres = VarAdd(&cy, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_CY, "VarAdd: expected coerced type VT_CY, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromCy(V_CY(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, 4720), "VarAdd: CY value %f, expected %f\n", r, (double)4720); - - hres = VarAdd(&left, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_DECIMAL, "VarAdd: expected coerced type VT_DECIMAL, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromDec(&V_DECIMAL(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, -15.2), "VarAdd: DECIMAL value %f, expected %f\n", r, (double)-15.2); - - SysFreeString(lbstr); - SysFreeString(rbstr); -} - -static void test_VarCat(void) -{ - LCID lcid; - VARIANT left, right, result, expected; - static const WCHAR sz12[] = {'1','2','\0'}; - static const WCHAR sz34[] = {'3','4','\0'}; - static const WCHAR sz1234[] = {'1','2','3','4','\0'}; - static const WCHAR date_sz12[] = {'9','/','3','0','/','1','9','8','0','1','2','\0'}; - static const WCHAR sz12_date[] = {'1','2','9','/','3','0','/','1','9','8','0','\0'}; - static const WCHAR sz_empty[] = {'\0'}; - static const WCHAR sz12_true[] = {'1','2','T','r','u','e','\0'}; - static const WCHAR sz12_false[] = {'1','2','F','a','l','s','e','\0'}; - TCHAR orig_date_format[128]; - VARTYPE leftvt, rightvt, resultvt; - HRESULT hres; - HRESULT expected_error_num; - - /* Set date format for testing */ - lcid = LOCALE_USER_DEFAULT; - GetLocaleInfo(lcid,LOCALE_SSHORTDATE,orig_date_format,128); - SetLocaleInfo(lcid,LOCALE_SSHORTDATE,"M/d/yyyy"); - - VariantInit(&left); - VariantInit(&right); - VariantInit(&result); - VariantInit(&expected); - - /* Check expected types for all combinations */ - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - - SKIPTESTS(leftvt); - - /* Check if we need/have support for I8 and/or UI8 */ - if ((leftvt == VT_I8 || leftvt == VT_UI8) && !HAVE_OLEAUT32_I8) - continue; - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - - SKIPTESTS(rightvt); - expected_error_num = S_OK; - resultvt = VT_EMPTY; - - if (leftvt == VT_DISPATCH || rightvt == VT_DISPATCH || - leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN || - leftvt == VT_RECORD || rightvt == VT_RECORD || - leftvt == 15 || rightvt == 15 /* Undefined type */) - continue; - - /* Check if we need/have support for I8 and/or UI8 */ - if ((rightvt == VT_I8 || rightvt == VT_UI8) && !HAVE_OLEAUT32_I8) - continue; - - if (leftvt == VT_NULL && rightvt == VT_NULL) - resultvt = VT_NULL; - else if (leftvt == VT_VARIANT && (rightvt == VT_ERROR || - rightvt == VT_DATE || rightvt == VT_DECIMAL)) - expected_error_num = 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_DECIMAL || - leftvt == VT_DATE) - && - (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_DECIMAL || - rightvt == VT_DATE)) - resultvt = VT_BSTR; - else if (rightvt == VT_ERROR && leftvt < VT_VOID) - expected_error_num = DISP_E_TYPEMISMATCH; - else if (leftvt == VT_ERROR && (rightvt == VT_DATE || - rightvt == VT_ERROR || rightvt == VT_DECIMAL)) - expected_error_num = DISP_E_TYPEMISMATCH; - else if (rightvt == VT_DATE || rightvt == VT_ERROR || - rightvt == VT_DECIMAL) - expected_error_num = DISP_E_BADVARTYPE; - else if (leftvt == VT_ERROR || rightvt == VT_ERROR) - expected_error_num = DISP_E_TYPEMISMATCH; - else if (leftvt == VT_VARIANT) - expected_error_num = 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 - )) - expected_error_num = DISP_E_TYPEMISMATCH; - else - expected_error_num = DISP_E_BADVARTYPE; - - V_VT(&left) = leftvt; - V_VT(&right) = rightvt; - - if (leftvt == VT_BSTR) - V_BSTR(&left) = SysAllocString(sz_empty); - if (rightvt == VT_BSTR) - V_BSTR(&right) = SysAllocString(sz_empty); - if (leftvt == VT_DATE) - V_DATE(&left) = 0.0; - if (rightvt == VT_DATE) - V_DATE(&right) = 0.0; - if (leftvt == VT_DECIMAL) - VarDecFromR8(0.0, &V_DECIMAL(&left)); - if (rightvt == VT_DECIMAL) - VarDecFromR8(0.0, &V_DECIMAL(&right)); - - hres = VarCat(&left, &right, &result); - - /* Determine the error code for the vt combination */ - ok(hres == expected_error_num, - "VarCat: %d, %d returned error, 0x%X expected 0x%X.\n", - leftvt, rightvt, expected_error_num, hres); - - /* Check types are correct */ - ok(V_VT(&result) == resultvt, - "VarCat: %d, %d: expected vt %d, got vt %d\n", - leftvt, rightvt, resultvt, V_VT(&result)); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - } - } - - /* Runnning single comparison tests to compare outputs */ - - /* Test concat strings */ - V_VT(&left) = VT_BSTR; - V_VT(&right) = VT_BSTR; - V_VT(&expected) = VT_BSTR; - V_BSTR(&left) = SysAllocString(sz12); - V_BSTR(&right) = SysAllocString(sz34); - V_BSTR(&expected) = SysAllocString(sz1234); - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ, - "VarCat: VT_BSTR concat with VT_BSTR failed to return correct result\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - - /* Test if expression is VT_ERROR */ - V_VT(&left) = VT_ERROR; - V_VT(&right) = VT_BSTR; - V_BSTR(&right) = SysAllocString(sz1234); - hres = VarCat(&left,&right,&result); - ok(hres == DISP_E_TYPEMISMATCH, "VarCat should have returned DISP_E_TYPEMISMATCH instead of 0x%08x\n", hres); - ok(V_VT(&result) == VT_EMPTY, - "VarCat: VT_ERROR concat with VT_BSTR should have returned VT_EMPTY\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - - V_VT(&left) = VT_BSTR; - V_VT(&right) = VT_ERROR; - V_BSTR(&left) = SysAllocString(sz1234); - hres = VarCat(&left,&right,&result); - ok(hres == DISP_E_TYPEMISMATCH, "VarCat should have returned DISP_E_TYPEMISMATCH instead of 0x%08x\n", hres); - ok(V_VT(&result) == VT_EMPTY, - "VarCat: VT_BSTR concat with VT_ERROR should have returned VT_EMPTY\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - VariantClear(&expected); - - /* Test combining boolean with number */ - V_VT(&left) = VT_INT; - V_VT(&right) = VT_BOOL; - V_VT(&expected) = VT_BSTR; - V_INT(&left) = 12; - V_BOOL(&right) = TRUE; - V_BSTR(&expected) = SysAllocString(sz12_true); - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ, - "VarCat: VT_INT concat with VT_BOOL (TRUE) returned incorrect result\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - VariantClear(&expected); - - V_VT(&left) = VT_INT; - V_VT(&right) = VT_BOOL; - V_VT(&expected) = VT_BSTR; - V_INT(&left) = 12; - V_BOOL(&right) = FALSE; - V_BSTR(&expected) = SysAllocString(sz12_false); - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ, - "VarCat: VT_INT concat with VT_BOOL (FALSE) returned inncorrect result\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - VariantClear(&expected); - - /* Test when both expressions are numeric */ - V_VT(&left) = VT_INT; - V_VT(&right) = VT_INT; - V_VT(&expected) = VT_BSTR; - V_INT(&left) = 12; - V_INT(&right) = 34; - V_BSTR(&expected) = SysAllocString(sz1234); - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ, - "VarCat: NUMBER concat with NUMBER returned inncorrect result\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - - /* Test if one expression is numeric and the other is a string */ - V_VT(&left) = VT_INT; - V_VT(&right) = VT_BSTR; - V_INT(&left) = 12; - V_BSTR(&right) = SysAllocString(sz34); - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ, - "VarCat: NUMBER concat with VT_BSTR, inncorrect result\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - - V_VT(&left) = VT_BSTR; - V_VT(&right) = VT_INT; - V_BSTR(&left) = SysAllocString(sz12); - V_INT(&right) = 34; - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ, - "VarCat: VT_BSTR concat with NUMBER, inncorrect result\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - - /* Test concat dates with strings */ - V_VT(&left) = VT_BSTR; - V_VT(&right) = VT_DATE; - V_VT(&expected) = VT_BSTR; - V_BSTR(&left) = SysAllocString(sz12); - V_DATE(&right) = 29494.0; - V_BSTR(&expected)= SysAllocString(sz12_date); - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ, - "VarCat: VT_BSTR concat with VT_DATE returned inncorrect result\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - VariantClear(&expected); - - V_VT(&left) = VT_DATE; - V_VT(&right) = VT_BSTR; - V_VT(&expected) = VT_BSTR; - V_DATE(&left) = 29494.0; - V_BSTR(&right) = SysAllocString(sz12); - V_BSTR(&expected)= SysAllocString(date_sz12); - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ, - "VarCat: VT_DATE concat with VT_BSTR returned inncorrect result\n"); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - VariantClear(&expected); - - /* Test of both expressions are empty */ - V_VT(&left) = VT_BSTR; - V_VT(&right) = VT_BSTR; - V_VT(&expected) = VT_BSTR; - V_BSTR(&left) = SysAllocString(sz_empty); - V_BSTR(&right) = SysAllocString(sz_empty); - V_BSTR(&expected)= SysAllocString(sz_empty); - hres = VarCat(&left,&right,&result); - ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); - ok(VarCmp(&result,&left,lcid,0) == VARCMP_EQ, - "VarCat: EMPTY concat with EMPTY did not return empty VT_BSTR\n"); - - /* Restore original date format settings */ - SetLocaleInfo(lcid,LOCALE_SSHORTDATE,orig_date_format); - - VariantClear(&left); - VariantClear(&right); - VariantClear(&result); - VariantClear(&expected); -} - -static HRESULT (WINAPI *pVarAnd)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARAND(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarAnd, &left, &right, &exp ) - -#define VARANDCY(vt1,val1,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarAnd, &left, &right, &exp ) - -/* Skip any type that is not defined or produces an error for every case */ -#define SKIPTESTAND(a) \ - if (a == VT_ERROR || a == VT_VARIANT || \ - a == VT_DISPATCH || a == VT_UNKNOWN || \ - a > VT_UINT || a == 15 /*not defined*/) \ - continue - -static void test_VarAnd(void) -{ - static const WCHAR szFalse[] = { '#','F','A','L','S','E','#','\0' }; - static const WCHAR szTrue[] = { '#','T','R','U','E','#','\0' }; - VARIANT left, right, exp, result; - BSTR false_str, true_str; - VARTYPE i; - HRESULT hres; - - true_str = SysAllocString(szTrue); - false_str = SysAllocString(szFalse); - - CHECKPTR(VarAnd); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - SKIPTESTAND(leftvt); - - /* Check if we need/have support for I8 and/or UI8 */ - if ((leftvt == VT_I8 || leftvt == VT_UI8) && !HAVE_OLEAUT32_I8) - continue; - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - SKIPTESTAND(rightvt); - - /* Check if we need/have support for I8 and/or UI8 */ - if ((rightvt == VT_I8 || rightvt == VT_UI8) && !HAVE_OLEAUT32_I8) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - V_VT(&right) = rightvt | ExtraFlags[i]; - V_VT(&result) = VT_EMPTY; - resvt = VT_EMPTY; - if ((leftvt | ExtraFlags[i]) == VT_BSTR) - V_BSTR(&left) = true_str; - if ((rightvt | ExtraFlags[i]) == VT_BSTR) - V_BSTR(&right) = true_str; - - /* 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[i] != 0) - bFail = TRUE; - - /* 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_UINT || rightvt == VT_UINT || - 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 - bFail = TRUE; - - hres = pVarAnd(&left, &right, &result); - - /* Check expected HRESULT and if result variant type is correct */ - if (bFail) - ok (hres == DISP_E_BADVARTYPE || hres == DISP_E_TYPEMISMATCH, - "VarAnd: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], - vtstr(V_VT(&result)), hres); - else - ok (hres == S_OK && resvt == V_VT(&result), - "VarAnd: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], vtstr(resvt), - S_OK, vtstr(V_VT(&result)), hres); - } - } - } - - /* - * Test returned values. Since we know the returned type is correct - * and that we handle all combinations of invalid types, just check - * that good type combinations produce the desired value. - * FIXME: Test VT_DECIMAL - */ - VARAND(EMPTY,0,EMPTY,0,I2,0); - VARAND(EMPTY,1,EMPTY,0,I2,0); - VARAND(EMPTY,1,EMPTY,1,I2,0); - VARAND(EMPTY,0,NULL,0,I2,0); - VARAND(EMPTY,1,NULL,0,I2,0); - VARAND(EMPTY,1,NULL,1,I2,0); - VARAND(EMPTY,0,I1,0,I4,0); - VARAND(EMPTY,0,I1,1,I4,0); - VARAND(EMPTY,1,I1,1,I4,0); - VARAND(EMPTY,0,UI1,0,I2,0); - VARAND(EMPTY,0,UI1,1,I2,0); - VARAND(EMPTY,1,UI1,1,I2,0); - VARAND(EMPTY,0,I2,0,I2,0); - VARAND(EMPTY,0,I2,1,I2,0); - VARAND(EMPTY,1,I2,1,I2,0); - VARAND(EMPTY,0,UI2,0,I4,0); - VARAND(EMPTY,0,UI2,1,I4,0); - VARAND(EMPTY,1,UI2,1,I4,0); - VARAND(EMPTY,0,I4,0,I4,0); - VARAND(EMPTY,0,I4,1,I4,0); - VARAND(EMPTY,1,I4,1,I4,0); - VARAND(EMPTY,0,UI4,0,I4,0); - VARAND(EMPTY,0,UI4,1,I4,0); - VARAND(EMPTY,1,UI4,1,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(EMPTY,0,I8,0,I8,0); - VARAND(EMPTY,0,I8,1,I8,0); - VARAND(EMPTY,1,I8,1,I8,0); - VARAND(EMPTY,0,UI8,0,I4,0); - VARAND(EMPTY,0,UI8,1,I4,0); - VARAND(EMPTY,1,UI8,1,I4,0); - } - VARAND(EMPTY,0,INT,0,I4,0); - VARAND(EMPTY,0,INT,1,I4,0); - VARAND(EMPTY,1,INT,1,I4,0); - VARAND(EMPTY,0,UINT,0,I4,0); - VARAND(EMPTY,0,UINT,1,I4,0); - VARAND(EMPTY,1,UINT,1,I4,0); - VARAND(EMPTY,0,BOOL,0,I2,0); - VARAND(EMPTY,0,BOOL,1,I2,0); - VARAND(EMPTY,1,BOOL,1,I2,0); - VARAND(EMPTY,0,R4,0,I4,0); - VARAND(EMPTY,0,R4,1,I4,0); - VARAND(EMPTY,1,R4,1,I4,0); - VARAND(EMPTY,0,R8,0,I4,0); - VARAND(EMPTY,0,R8,1,I4,0); - VARAND(EMPTY,1,R8,1,I4,0); - VARAND(EMPTY,0,BSTR,false_str,I2,0); - VARAND(EMPTY,0,BSTR,true_str,I2,0); - VARANDCY(EMPTY,0,10000,I4,0); - - /* NULL OR 0 = NULL. NULL OR n = n */ - VARAND(NULL,0,NULL,0,NULL,0); - VARAND(NULL,1,NULL,0,NULL,0); - VARAND(NULL,0,I1,0,I4,0); - VARAND(NULL,0,I1,1,NULL,0); - VARAND(NULL,0,UI1,0,UI1,0); - VARAND(NULL,0,UI1,1,NULL,0); - VARAND(NULL,0,I2,0,I2,0); - VARAND(NULL,0,I2,1,NULL,0); - VARAND(NULL,0,UI2,0,I4,0); - VARAND(NULL,0,UI2,1,NULL,0); - VARAND(NULL,0,I4,0,I4,0); - VARAND(NULL,0,I4,1,NULL,0); - VARAND(NULL,0,UI4,0,I4,0); - VARAND(NULL,0,UI4,1,NULL,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(NULL,0,I8,0,I8,0); - VARAND(NULL,0,I8,1,NULL,0); - VARAND(NULL,0,UI8,0,I4,0); - VARAND(NULL,0,UI8,1,NULL,0); - } - VARAND(NULL,0,INT,0,I4,0); - VARAND(NULL,0,INT,1,NULL,0); - VARAND(NULL,0,UINT,0,I4,0); - VARAND(NULL,0,UINT,1,NULL,0); - VARAND(NULL,0,BOOL,0,BOOL,0); - VARAND(NULL,0,BOOL,1,NULL,0); - VARAND(NULL,0,R4,0,I4,0); - VARAND(NULL,0,R4,1,NULL,0); - VARAND(NULL,0,R8,0,I4,0); - VARAND(NULL,0,R8,1,NULL,0); - VARAND(NULL,0,BSTR,false_str,BOOL,0); - VARAND(NULL,0,BSTR,true_str,NULL,VARIANT_FALSE); - VARANDCY(NULL,0,10000,NULL,0); - VARANDCY(NULL,0,0,I4,0); - VARAND(BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE); - VARAND(BOOL,VARIANT_TRUE,BOOL,VARIANT_FALSE,BOOL,VARIANT_FALSE); - VARAND(BOOL,VARIANT_FALSE,BOOL,VARIANT_TRUE,BOOL,VARIANT_FALSE); - VARAND(BOOL,VARIANT_FALSE,BOOL,VARIANT_FALSE,BOOL,VARIANT_FALSE); - - /* Assume x,y & y,x are the same from now on to reduce the number of tests */ - VARAND(BOOL,VARIANT_TRUE,I1,-1,I4,-1); - VARAND(BOOL,VARIANT_TRUE,I1,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,I1,0,I4,0); - VARAND(BOOL,VARIANT_TRUE,UI1,255,I2,255); - VARAND(BOOL,VARIANT_TRUE,UI1,0,I2,0); - VARAND(BOOL,VARIANT_FALSE,UI1,0,I2,0); - VARAND(BOOL,VARIANT_TRUE,I2,-1,I2,-1); - VARAND(BOOL,VARIANT_TRUE,I2,0,I2,0); - VARAND(BOOL,VARIANT_FALSE,I2,0,I2,0); - VARAND(BOOL,VARIANT_TRUE,UI2,65535,I4,65535); - VARAND(BOOL,VARIANT_TRUE,UI2,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,UI2,0,I4,0); - VARAND(BOOL,VARIANT_TRUE,I4,-1,I4,-1); - VARAND(BOOL,VARIANT_TRUE,I4,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,I4,0,I4,0); - VARAND(BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,-1); - VARAND(BOOL,VARIANT_TRUE,UI4,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,UI4,0,I4,0); - VARAND(BOOL,VARIANT_TRUE,R4,-1,I4,-1); - VARAND(BOOL,VARIANT_TRUE,R4,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,R4,0,I4,0); - VARAND(BOOL,VARIANT_TRUE,R8,-1,I4,-1); - VARAND(BOOL,VARIANT_TRUE,R8,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,R8,0,I4,0); - VARAND(BOOL,VARIANT_TRUE,DATE,-1,I4,-1); - VARAND(BOOL,VARIANT_TRUE,DATE,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(BOOL,VARIANT_TRUE,I8,-1,I8,-1); - VARAND(BOOL,VARIANT_TRUE,I8,0,I8,0); - VARAND(BOOL,VARIANT_FALSE,I8,0,I8,0); - VARAND(BOOL,VARIANT_TRUE,UI8,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,UI8,0,I4,0); - } - VARAND(BOOL,VARIANT_TRUE,INT,-1,I4,-1); - VARAND(BOOL,VARIANT_TRUE,INT,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,INT,0,I4,0); - VARAND(BOOL,VARIANT_TRUE,UINT,0xffffffff,I4,-1); - VARAND(BOOL,VARIANT_TRUE,UINT,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,UINT,0,I4,0); - VARAND(BOOL,VARIANT_FALSE,BSTR,false_str,BOOL,VARIANT_FALSE); - VARAND(BOOL,VARIANT_TRUE,BSTR,false_str,BOOL,VARIANT_FALSE); - VARAND(BOOL,VARIANT_FALSE,BSTR,true_str,BOOL,VARIANT_FALSE); - VARAND(BOOL,VARIANT_TRUE,BSTR,true_str,BOOL,VARIANT_TRUE); - VARANDCY(BOOL,VARIANT_TRUE,10000,I4,1); - VARANDCY(BOOL,VARIANT_TRUE,0,I4,0); - VARANDCY(BOOL,VARIANT_FALSE,0,I4,0); - VARAND(I1,-1,I1,-1,I4,-1); - VARAND(I1,-1,I1,0,I4,0); - VARAND(I1,0,I1,0,I4,0); - VARAND(I1,-1,UI1,255,I4,255); - VARAND(I1,-1,UI1,0,I4,0); - VARAND(I1,0,UI1,0,I4,0); - VARAND(I1,-1,I2,-1,I4,-1); - VARAND(I1,-1,I2,0,I4,0); - VARAND(I1,0,I2,0,I4,0); - VARAND(I1,-1,UI2,65535,I4,65535); - VARAND(I1,-1,UI2,0,I4,0); - VARAND(I1,0,UI2,0,I4,0); - VARAND(I1,-1,I4,-1,I4,-1); - VARAND(I1,-1,I4,0,I4,0); - VARAND(I1,0,I4,0,I4,0); - VARAND(I1,-1,UI4,0xffffffff,I4,-1); - VARAND(I1,-1,UI4,0,I4,0); - VARAND(I1,0,UI4,0,I4,0); - VARAND(I1,-1,R4,-1,I4,-1); - VARAND(I1,-1,R4,0,I4,0); - VARAND(I1,0,R4,0,I4,0); - VARAND(I1,-1,R8,-1,I4,-1); - VARAND(I1,-1,R8,0,I4,0); - VARAND(I1,0,R8,0,I4,0); - VARAND(I1,-1,DATE,-1,I4,-1); - VARAND(I1,-1,DATE,0,I4,0); - VARAND(I1,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(I1,-1,I8,-1,I8,-1); - VARAND(I1,-1,I8,0,I8,0); - VARAND(I1,0,I8,0,I8,0); - VARAND(I1,-1,UI8,0,I4,0); - VARAND(I1,0,UI8,0,I4,0); - } - VARAND(I1,-1,INT,-1,I4,-1); - VARAND(I1,-1,INT,0,I4,0); - VARAND(I1,0,INT,0,I4,0); - VARAND(I1,-1,UINT,0xffffffff,I4,-1); - VARAND(I1,-1,UINT,0,I4,0); - VARAND(I1,0,UINT,0,I4,0); - VARAND(I1,0,BSTR,false_str,I4,0); - VARAND(I1,-1,BSTR,false_str,I4,0); - VARAND(I1,0,BSTR,true_str,I4,0); - VARAND(I1,-1,BSTR,true_str,I4,-1); - VARANDCY(I1,-1,10000,I4,1); - VARANDCY(I1,-1,0,I4,0); - VARANDCY(I1,0,0,I4,0); - - VARAND(UI1,255,UI1,255,UI1,255); - VARAND(UI1,255,UI1,0,UI1,0); - VARAND(UI1,0,UI1,0,UI1,0); - VARAND(UI1,255,I2,-1,I2,255); - VARAND(UI1,255,I2,0,I2,0); - VARAND(UI1,0,I2,0,I2,0); - VARAND(UI1,255,UI2,65535,I4,255); - VARAND(UI1,255,UI2,0,I4,0); - VARAND(UI1,0,UI2,0,I4,0); - VARAND(UI1,255,I4,-1,I4,255); - VARAND(UI1,255,I4,0,I4,0); - VARAND(UI1,0,I4,0,I4,0); - VARAND(UI1,255,UI4,0xffffffff,I4,255); - VARAND(UI1,255,UI4,0,I4,0); - VARAND(UI1,0,UI4,0,I4,0); - VARAND(UI1,255,R4,-1,I4,255); - VARAND(UI1,255,R4,0,I4,0); - VARAND(UI1,0,R4,0,I4,0); - VARAND(UI1,255,R8,-1,I4,255); - VARAND(UI1,255,R8,0,I4,0); - VARAND(UI1,0,R8,0,I4,0); - VARAND(UI1,255,DATE,-1,I4,255); - VARAND(UI1,255,DATE,0,I4,0); - VARAND(UI1,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(UI1,255,I8,-1,I8,255); - VARAND(UI1,255,I8,0,I8,0); - VARAND(UI1,0,I8,0,I8,0); - VARAND(UI1,255,UI8,0,I4,0); - VARAND(UI1,0,UI8,0,I4,0); - } - VARAND(UI1,255,INT,-1,I4,255); - VARAND(UI1,255,INT,0,I4,0); - VARAND(UI1,0,INT,0,I4,0); - VARAND(UI1,255,UINT,0xffffffff,I4,255); - VARAND(UI1,255,UINT,0,I4,0); - VARAND(UI1,0,UINT,0,I4,0); - VARAND(UI1,0,BSTR,false_str,I2,0); - VARAND(UI1,255,BSTR,false_str,I2,0); - VARAND(UI1,0,BSTR,true_str,I2,0); - VARAND(UI1,255,BSTR,true_str,I2,255); - VARANDCY(UI1,255,10000,I4,1); - VARANDCY(UI1,255,0,I4,0); - VARANDCY(UI1,0,0,I4,0); - - VARAND(I2,-1,I2,-1,I2,-1); - VARAND(I2,-1,I2,0,I2,0); - VARAND(I2,0,I2,0,I2,0); - VARAND(I2,-1,UI2,65535,I4,65535); - VARAND(I2,-1,UI2,0,I4,0); - VARAND(I2,0,UI2,0,I4,0); - VARAND(I2,-1,I4,-1,I4,-1); - VARAND(I2,-1,I4,0,I4,0); - VARAND(I2,0,I4,0,I4,0); - VARAND(I2,-1,UI4,0xffffffff,I4,-1); - VARAND(I2,-1,UI4,0,I4,0); - VARAND(I2,0,UI4,0,I4,0); - VARAND(I2,-1,R4,-1,I4,-1); - VARAND(I2,-1,R4,0,I4,0); - VARAND(I2,0,R4,0,I4,0); - VARAND(I2,-1,R8,-1,I4,-1); - VARAND(I2,-1,R8,0,I4,0); - VARAND(I2,0,R8,0,I4,0); - VARAND(I2,-1,DATE,-1,I4,-1); - VARAND(I2,-1,DATE,0,I4,0); - VARAND(I2,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(I2,-1,I8,-1,I8,-1); - VARAND(I2,-1,I8,0,I8,0); - VARAND(I2,0,I8,0,I8,0); - VARAND(I2,-1,UI8,0,I4,0); - VARAND(I2,0,UI8,0,I4,0); - } - VARAND(I2,-1,INT,-1,I4,-1); - VARAND(I2,-1,INT,0,I4,0); - VARAND(I2,0,INT,0,I4,0); - VARAND(I2,-1,UINT,0xffffffff,I4,-1); - VARAND(I2,-1,UINT,0,I4,0); - VARAND(I2,0,UINT,0,I4,0); - VARAND(I2,0,BSTR,false_str,I2,0); - VARAND(I2,-1,BSTR,false_str,I2,0); - VARAND(I2,0,BSTR,true_str,I2,0); - VARAND(I2,-1,BSTR,true_str,I2,-1); - VARANDCY(I2,-1,10000,I4,1); - VARANDCY(I2,-1,0,I4,0); - VARANDCY(I2,0,0,I4,0); - - VARAND(UI2,65535,UI2,65535,I4,65535); - VARAND(UI2,65535,UI2,0,I4,0); - VARAND(UI2,0,UI2,0,I4,0); - VARAND(UI2,65535,I4,-1,I4,65535); - VARAND(UI2,65535,I4,0,I4,0); - VARAND(UI2,0,I4,0,I4,0); - VARAND(UI2,65535,UI4,0xffffffff,I4,65535); - VARAND(UI2,65535,UI4,0,I4,0); - VARAND(UI2,0,UI4,0,I4,0); - VARAND(UI2,65535,R4,-1,I4,65535); - VARAND(UI2,65535,R4,0,I4,0); - VARAND(UI2,0,R4,0,I4,0); - VARAND(UI2,65535,R8,-1,I4,65535); - VARAND(UI2,65535,R8,0,I4,0); - VARAND(UI2,0,R8,0,I4,0); - VARAND(UI2,65535,DATE,-1,I4,65535); - VARAND(UI2,65535,DATE,0,I4,0); - VARAND(UI2,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(UI2,65535,I8,-1,I8,65535); - VARAND(UI2,65535,I8,0,I8,0); - VARAND(UI2,0,I8,0,I8,0); - VARAND(UI2,65535,UI8,0,I4,0); - VARAND(UI2,0,UI8,0,I4,0); - } - VARAND(UI2,65535,INT,-1,I4,65535); - VARAND(UI2,65535,INT,0,I4,0); - VARAND(UI2,0,INT,0,I4,0); - VARAND(UI2,65535,UINT,0xffffffff,I4,65535); - VARAND(UI2,65535,UINT,0,I4,0); - VARAND(UI2,0,UINT,0,I4,0); - VARAND(UI2,0,BSTR,false_str,I4,0); - VARAND(UI2,65535,BSTR,false_str,I4,0); - VARAND(UI2,0,BSTR,true_str,I4,0); - VARAND(UI2,65535,BSTR,true_str,I4,65535); - VARANDCY(UI2,65535,10000,I4,1); - VARANDCY(UI2,65535,0,I4,0); - VARANDCY(UI2,0,0,I4,0); - - VARAND(I4,-1,I4,-1,I4,-1); - VARAND(I4,-1,I4,0,I4,0); - VARAND(I4,0,I4,0,I4,0); - VARAND(I4,-1,UI4,0xffffffff,I4,-1); - VARAND(I4,-1,UI4,0,I4,0); - VARAND(I4,0,UI4,0,I4,0); - VARAND(I4,-1,R4,-1,I4,-1); - VARAND(I4,-1,R4,0,I4,0); - VARAND(I4,0,R4,0,I4,0); - VARAND(I4,-1,R8,-1,I4,-1); - VARAND(I4,-1,R8,0,I4,0); - VARAND(I4,0,R8,0,I4,0); - VARAND(I4,-1,DATE,-1,I4,-1); - VARAND(I4,-1,DATE,0,I4,0); - VARAND(I4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(I4,-1,I8,-1,I8,-1); - VARAND(I4,-1,I8,0,I8,0); - VARAND(I4,0,I8,0,I8,0); - VARAND(I4,-1,UI8,0,I4,0); - VARAND(I4,0,UI8,0,I4,0); - } - VARAND(I4,-1,INT,-1,I4,-1); - VARAND(I4,-1,INT,0,I4,0); - VARAND(I4,0,INT,0,I4,0); - VARAND(I4,-1,UINT,0xffffffff,I4,-1); - VARAND(I4,-1,UINT,0,I4,0); - VARAND(I4,0,UINT,0,I4,0); - VARAND(I4,0,BSTR,false_str,I4,0); - VARAND(I4,-1,BSTR,false_str,I4,0); - VARAND(I4,0,BSTR,true_str,I4,0); - VARAND(I4,-1,BSTR,true_str,I4,-1); - VARANDCY(I4,-1,10000,I4,1); - VARANDCY(I4,-1,0,I4,0); - VARANDCY(I4,0,0,I4,0); - - VARAND(UI4,0xffffffff,UI4,0xffffffff,I4,-1); - VARAND(UI4,0xffffffff,UI4,0,I4,0); - VARAND(UI4,0,UI4,0,I4,0); - VARAND(UI4,0xffffffff,R4,-1,I4,-1); - VARAND(UI4,0xffffffff,R4,0,I4,0); - VARAND(UI4,0,R4,0,I4,0); - VARAND(UI4,0xffffffff,R8,-1,I4,-1); - VARAND(UI4,0xffffffff,R8,0,I4,0); - VARAND(UI4,0,R8,0,I4,0); - VARAND(UI4,0xffffffff,DATE,-1,I4,-1); - VARAND(UI4,0xffffffff,DATE,0,I4,0); - VARAND(UI4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(UI4,0xffffffff,I8,0,I8,0); - VARAND(UI4,0,I8,0,I8,0); - VARAND(UI4,0xffffffff,UI8,0,I4,0); - VARAND(UI4,0,UI8,0,I4,0); - } - VARAND(UI4,0xffffffff,INT,-1,I4,-1); - VARAND(UI4,0xffffffff,INT,0,I4,0); - VARAND(UI4,0,INT,0,I4,0); - VARAND(UI4,0xffffffff,UINT,0xffffffff,I4,-1); - VARAND(UI4,0xffffffff,UINT,0,I4,0); - VARAND(UI4,0,UINT,0,I4,0); - VARAND(UI4,0,BSTR,false_str,I4,0); - VARAND(UI4,0xffffffff,BSTR,false_str,I4,0); - VARAND(UI4,0,BSTR,true_str,I4,0); - VARAND(UI4,0xffffffff,BSTR,true_str,I4,-1); - VARANDCY(UI4,0xffffffff,10000,I4,1); - VARANDCY(UI4,0xffffffff,0,I4,0); - VARANDCY(UI4,0,0,I4,0); - - VARAND(R4,-1,R4,-1,I4,-1); - VARAND(R4,-1,R4,0,I4,0); - VARAND(R4,0,R4,0,I4,0); - VARAND(R4,-1,R8,-1,I4,-1); - VARAND(R4,-1,R8,0,I4,0); - VARAND(R4,0,R8,0,I4,0); - VARAND(R4,-1,DATE,-1,I4,-1); - VARAND(R4,-1,DATE,0,I4,0); - VARAND(R4,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(R4,-1,I8,-1,I8,-1); - VARAND(R4,-1,I8,0,I8,0); - VARAND(R4,0,I8,0,I8,0); - VARAND(R4,-1,UI8,0,I4,0); - VARAND(R4,0,UI8,0,I4,0); - } - VARAND(R4,-1,INT,-1,I4,-1); - VARAND(R4,-1,INT,0,I4,0); - VARAND(R4,0,INT,0,I4,0); - VARAND(R4,-1,UINT,0xffffffff,I4,-1); - VARAND(R4,-1,UINT,0,I4,0); - VARAND(R4,0,UINT,0,I4,0); - VARAND(R4,0,BSTR,false_str,I4,0); - VARAND(R4,-1,BSTR,false_str,I4,0); - VARAND(R4,0,BSTR,true_str,I4,0); - VARAND(R4,-1,BSTR,true_str,I4,-1); - VARANDCY(R4,-1,10000,I4,1); - VARANDCY(R4,-1,0,I4,0); - VARANDCY(R4,0,0,I4,0); - - VARAND(R8,-1,R8,-1,I4,-1); - VARAND(R8,-1,R8,0,I4,0); - VARAND(R8,0,R8,0,I4,0); - VARAND(R8,-1,DATE,-1,I4,-1); - VARAND(R8,-1,DATE,0,I4,0); - VARAND(R8,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(R8,-1,I8,-1,I8,-1); - VARAND(R8,-1,I8,0,I8,0); - VARAND(R8,0,I8,0,I8,0); - VARAND(R8,-1,UI8,0,I4,0); - VARAND(R8,0,UI8,0,I4,0); - } - VARAND(R8,-1,INT,-1,I4,-1); - VARAND(R8,-1,INT,0,I4,0); - VARAND(R8,0,INT,0,I4,0); - VARAND(R8,-1,UINT,0xffffffff,I4,-1); - VARAND(R8,-1,UINT,0,I4,0); - VARAND(R8,0,UINT,0,I4,0); - VARAND(R8,0,BSTR,false_str,I4,0); - VARAND(R8,-1,BSTR,false_str,I4,0); - VARAND(R8,0,BSTR,true_str,I4,0); - VARAND(R8,-1,BSTR,true_str,I4,-1); - VARANDCY(R8,-1,10000,I4,1); - VARANDCY(R8,-1,0,I4,0); - VARANDCY(R8,0,0,I4,0); - - VARAND(DATE,-1,DATE,-1,I4,-1); - VARAND(DATE,-1,DATE,0,I4,0); - VARAND(DATE,0,DATE,0,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARAND(DATE,-1,I8,-1,I8,-1); - VARAND(DATE,-1,I8,0,I8,0); - VARAND(DATE,0,I8,0,I8,0); - VARAND(DATE,-1,UI8,0,I4,0); - VARAND(DATE,0,UI8,0,I4,0); - } - VARAND(DATE,-1,INT,-1,I4,-1); - VARAND(DATE,-1,INT,0,I4,0); - VARAND(DATE,0,INT,0,I4,0); - VARAND(DATE,-1,UINT,0xffffffff,I4,-1); - VARAND(DATE,-1,UINT,0,I4,0); - VARAND(DATE,0,UINT,0,I4,0); - VARAND(DATE,0,BSTR,false_str,I4,0); - VARAND(DATE,-1,BSTR,false_str,I4,0); - VARAND(DATE,0,BSTR,true_str,I4,0); - VARAND(DATE,-1,BSTR,true_str,I4,-1); - VARANDCY(DATE,-1,10000,I4,1); - VARANDCY(DATE,-1,0,I4,0); - VARANDCY(DATE,0,0,I4,0); - - if (HAVE_OLEAUT32_I8) - { - VARAND(I8,-1,I8,-1,I8,-1); - VARAND(I8,-1,I8,0,I8,0); - VARAND(I8,0,I8,0,I8,0); - VARAND(I8,-1,UI8,0,I8,0); - VARAND(I8,0,UI8,0,I8,0); - VARAND(I8,-1,UINT,0,I8,0); - VARAND(I8,0,UINT,0,I8,0); - VARAND(I8,0,BSTR,false_str,I8,0); - VARAND(I8,-1,BSTR,false_str,I8,0); - VARAND(I8,0,BSTR,true_str,I8,0); - VARAND(I8,-1,BSTR,true_str,I8,-1); - VARANDCY(I8,-1,10000,I8,1); - VARANDCY(I8,-1,0,I8,0); - VARANDCY(I8,0,0,I8,0); - - VARAND(UI8,0xffff,UI8,0xffff,I4,0xffff); - VARAND(UI8,0xffff,UI8,0,I4,0); - VARAND(UI8,0,UI8,0,I4,0); - VARAND(UI8,0xffff,INT,-1,I4,65535); - VARAND(UI8,0xffff,INT,0,I4,0); - VARAND(UI8,0,INT,0,I4,0); - VARAND(UI8,0xffff,UINT,0xffff,I4,0xffff); - VARAND(UI8,0xffff,UINT,0,I4,0); - VARAND(UI8,0,UINT,0,I4,0); - VARAND(UI8,0,BSTR,false_str,I4,0); - VARAND(UI8,0xffff,BSTR,false_str,I4,0); - VARAND(UI8,0,BSTR,true_str,I4,0); - VARAND(UI8,0xffff,BSTR,true_str,I4,65535); - VARANDCY(UI8,0xffff,10000,I4,1); - VARANDCY(UI8,0xffff,0,I4,0); - VARANDCY(UI8,0,0,I4,0); - } - - VARAND(INT,-1,INT,-1,I4,-1); - VARAND(INT,-1,INT,0,I4,0); - VARAND(INT,0,INT,0,I4,0); - VARAND(INT,-1,UINT,0xffff,I4,65535); - VARAND(INT,-1,UINT,0,I4,0); - VARAND(INT,0,UINT,0,I4,0); - VARAND(INT,0,BSTR,false_str,I4,0); - VARAND(INT,-1,BSTR,false_str,I4,0); - VARAND(INT,0,BSTR,true_str,I4,0); - VARAND(INT,-1,BSTR,true_str,I4,-1); - VARANDCY(INT,-1,10000,I4,1); - VARANDCY(INT,-1,0,I4,0); - VARANDCY(INT,0,0,I4,0); - - VARAND(UINT,0xffff,UINT,0xffff,I4,0xffff); - VARAND(UINT,0xffff,UINT,0,I4,0); - VARAND(UINT,0,UINT,0,I4,0); - VARAND(UINT,0,BSTR,false_str,I4,0); - VARAND(UINT,0xffff,BSTR, false_str,I4,0); - VARAND(UINT,0,BSTR,true_str,I4,0); - VARAND(UINT,0xffff,BSTR,true_str,I4,65535); - VARANDCY(UINT,0xffff,10000,I4,1); - VARANDCY(UINT,0xffff,0,I4,0); - VARANDCY(UINT,0,0,I4,0); - - VARAND(BSTR,false_str,BSTR,false_str,BOOL,0); - VARAND(BSTR,true_str,BSTR,false_str,BOOL,VARIANT_FALSE); - VARAND(BSTR,true_str,BSTR,true_str,BOOL,VARIANT_TRUE); - VARANDCY(BSTR,true_str,10000,I4,1); - VARANDCY(BSTR,false_str,10000,I4,0); - - SysFreeString(true_str); - SysFreeString(false_str); -} - -static HRESULT (WINAPI *pVarCmp)(LPVARIANT,LPVARIANT,LCID,ULONG); - -static void test_cmp( int line, LCID lcid, UINT flags, VARIANT *left, VARIANT *right, HRESULT result ) -{ - HRESULT hres; - - hres = pVarCmp(left,right,lcid,flags); - ok_(__FILE__,line)(hres == result, "VarCmp(%s,%s): expected 0x%x, got hres=0x%x\n", - variantstr(left), variantstr(right), result, hres ); -} -static void test_cmpex( int line, LCID lcid, VARIANT *left, VARIANT *right, - HRESULT res1, HRESULT res2, HRESULT res3, HRESULT res4 ) -{ - test_cmp( line, lcid, 0, left, right, res1 ); - V_VT(left) |= VT_RESERVED; - test_cmp( line, lcid, 0, left, right, res2 ); - V_VT(left) &= ~VT_RESERVED; - V_VT(right) |= VT_RESERVED; - test_cmp( line, lcid, 0, left, right, res3 ); - V_VT(left) |= VT_RESERVED; - test_cmp( line, lcid, 0, left, right, res4 ); - ok_(__FILE__,line)(V_VT(left) & V_VT(right) & VT_RESERVED, "VT_RESERVED filtered out\n"); -} - -/* ERROR from wingdi.h is interfering here */ -#undef ERROR -#define _VARCMP(vt1,val1,vtfl1,vt2,val2,vtfl2,lcid,flags,result) \ - V_##vt1(&left) = val1; V_VT(&left) = VT_##vt1 | vtfl1; \ - V_##vt2(&right) = val2; V_VT(&right) = VT_##vt2 | vtfl2; \ - test_cmp( __LINE__, lcid, flags, &left, &right, result ) -#define VARCMPEX(vt1,val1,vt2,val2,res1,res2,res3,res4) \ - V_##vt1(&left) = val1; V_VT(&left) = VT_##vt1; \ - V_##vt2(&right) = val2; V_VT(&right) = VT_##vt2; \ - test_cmpex( __LINE__, lcid, &left, &right, res1, res2, res3, res4 ) -#define VARCMP(vt1,val1,vt2,val2,result) \ - VARCMPEX(vt1,val1,vt2,val2,result,result,result,result) -/* The above macros do not work for VT_NULL as NULL gets expanded first */ -#define V_NULL_ V_NULL -#define VT_NULL_ VT_NULL - -static void test_VarCmp(void) -{ - VARIANT left, right; - VARTYPE i; - LCID lcid; - HRESULT hres; - DECIMAL dec; - static const WCHAR szhuh[] = {'h','u','h','?','\0'}; - static const WCHAR sz2cents[] = {'2','c','e','n','t','s','\0'}; - static const WCHAR szempty[] = {'\0'}; - static const WCHAR sz0[] = {'0','\0'}; - static const WCHAR sz1[] = {'1','\0'}; - static const WCHAR sz7[] = {'7','\0'}; - static const WCHAR sz42[] = {'4','2','\0'}; - static const WCHAR sz1neg[] = {'-','1','\0'}; - static const WCHAR sz666neg[] = {'-','6','6','6','\0'}; - static const WCHAR sz1few[] = {'1','.','0','0','0','0','0','0','0','1','\0'}; - BSTR bstrhuh, bstrempty, bstr0, bstr1, bstr7, bstr42, bstr1neg, bstr666neg; - BSTR bstr2cents, bstr1few; - - CHECKPTR(VarCmp); - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - bstrempty = SysAllocString(szempty); - bstrhuh = SysAllocString(szhuh); - bstr2cents = SysAllocString(sz2cents); - bstr0 = SysAllocString(sz0); - bstr1 = SysAllocString(sz1); - bstr7 = SysAllocString(sz7); - bstr42 = SysAllocString(sz42); - bstr1neg = SysAllocString(sz1neg); - bstr666neg = SysAllocString(sz666neg); - bstr1few = SysAllocString(sz1few); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - - SKIPTESTS(leftvt); - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - HRESULT expect = VARCMP_EQ; - - SKIPTESTS(rightvt); - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - if (leftvt == VT_BSTR) { - V_BSTR(&left) = bstr1neg; - if (ExtraFlags[i] & VT_RESERVED) - expect = VARCMP_LT; - else - expect = VARCMP_GT; - } - V_VT(&right) = rightvt | ExtraFlags[i]; - if (rightvt == VT_BSTR) { - V_BSTR(&right) = bstr1neg; - if (ExtraFlags[i] & VT_RESERVED) - expect = VARCMP_GT; - else - expect = VARCMP_LT; - } - - /* Don't ask me why but native VarCmp cannot handle: - VT_I1, VT_UI2, VT_UI4, VT_UINT and VT_UI8. - VT_INT is only supported as left variant. Go figure. - Tested with DCOM98, Win2k, WinXP */ - if (ExtraFlags[i] & VT_ARRAY || ExtraFlags[i] & VT_BYREF || - !IsValidVariantClearVT(leftvt, ExtraFlags[i] & ~VT_RESERVED) || - !IsValidVariantClearVT(rightvt, ExtraFlags[i] & ~VT_RESERVED) || - leftvt == VT_CLSID || rightvt == VT_CLSID || - leftvt == VT_DISPATCH || rightvt == VT_DISPATCH || - leftvt == VT_ERROR || rightvt == VT_ERROR || - leftvt == VT_RECORD || rightvt == VT_RECORD || - leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN || - 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 || - rightvt == VT_INT || - leftvt == VT_UINT || rightvt == VT_UINT) { - bFail = TRUE; - } - - if (leftvt == VT_ERROR && rightvt == VT_ERROR && - !(ExtraFlags[i] & ~VT_RESERVED)) { - expect = VARCMP_EQ; - bFail = FALSE; - } else if (leftvt == VT_NULL || rightvt == VT_NULL) - expect = VARCMP_NULL; - else if (leftvt == VT_BSTR && rightvt == VT_BSTR) - expect = VARCMP_EQ; - else if (leftvt == VT_BSTR && rightvt == VT_EMPTY) - expect = VARCMP_GT; - else if (leftvt == VT_EMPTY && rightvt == VT_BSTR) - expect = VARCMP_LT; - - hres = pVarCmp(&left, &right, LOCALE_USER_DEFAULT, 0); - if (bFail) { - ok(hres == DISP_E_TYPEMISMATCH || hres == DISP_E_BADVARTYPE, - "VarCmp: %d|0x%X, %d|0x%X: Expected failure, got 0x%X\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], hres); - } else { - ok(hres == expect, - "VarCmp: %d|0x%X, %d|0x%X: Expected 0x%X, got 0x%X\n", - leftvt, ExtraFlags[i], rightvt, ExtraFlags[i], expect, - hres); - } - } - } - } - - /* VARCMP{,EX} run each 4 tests with a permutation of all posible - input variants with (1) and without (0) VT_RESERVED set. The order - of the permutations is (0,0); (1,0); (0,1); (1,1) */ - VARCMP(INT,4711,I2,4711,VARCMP_EQ); - VARCMP(INT,4711,I2,-4711,VARCMP_GT); - VARCMP(ERROR,0,ERROR,0,VARCMP_EQ); - VARCMP(ERROR,0,UI1,0,DISP_E_TYPEMISMATCH); - VARCMP(EMPTY,0,EMPTY,0,VARCMP_EQ); - VARCMP(I4,1,R8,1.0,VARCMP_EQ); - VARCMP(EMPTY,19,I2,0,VARCMP_EQ); - ok(V_EMPTY(&left) == 19, "VT_EMPTY modified!\n"); - VARCMP(I4,1,UI1,1,VARCMP_EQ); - VARCMP(I2,2,I2,2,VARCMP_EQ); - VARCMP(I2,1,I2,2,VARCMP_LT); - VARCMP(I2,2,I2,1,VARCMP_GT); - VARCMP(I2,2,EMPTY,1,VARCMP_GT); - VARCMP(I2,2,NULL_,1,VARCMP_NULL); - - /* BSTR handling, especially in conjunction with VT_RESERVED */ - VARCMP(BSTR,bstr0,NULL_,0,VARCMP_NULL); - VARCMP(BSTR,bstr0,BSTR,bstr0,VARCMP_EQ); - VARCMP(BSTR,bstrempty,BSTR,bstr0,VARCMP_LT); - VARCMP(BSTR,bstr7,BSTR,bstr0,VARCMP_GT); - VARCMP(BSTR,bstr7,BSTR,bstr1neg,VARCMP_GT); - VARCMP(BSTR,bstr0,BSTR,NULL,VARCMP_GT); - VARCMP(BSTR,NULL,BSTR,NULL,VARCMP_EQ); - VARCMP(BSTR,bstrempty,BSTR,NULL,VARCMP_EQ); - VARCMP(BSTR,NULL,EMPTY,0,VARCMP_EQ); - VARCMP(EMPTY,0,BSTR,NULL,VARCMP_EQ); - VARCMP(EMPTY,0,BSTR,bstrempty,VARCMP_EQ); - VARCMP(EMPTY,1,BSTR,bstrempty,VARCMP_EQ); - VARCMP(BSTR,bstr0,EMPTY,0,VARCMP_GT); - VARCMP(BSTR,bstr42,EMPTY,0,VARCMP_GT); - VARCMPEX(BSTR,bstrempty,UI1,0,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_GT); - VARCMPEX(BSTR,bstrempty,I2,-1,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_GT); - VARCMPEX(I4,0,BSTR,bstrempty,VARCMP_LT,VARCMP_LT,VARCMP_GT,VARCMP_LT); - VARCMPEX(BSTR,NULL,UI1,0,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_GT); - VARCMPEX(I4,7,BSTR,NULL,VARCMP_LT,VARCMP_LT,VARCMP_GT,VARCMP_LT); - _VARCMP(BSTR,(BSTR)100,0,I2,100,0,lcid,0,VARCMP_GT); - VARCMPEX(BSTR,bstr0,UI1,0,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_GT); - VARCMPEX(I2,0,BSTR,bstr0,VARCMP_LT,VARCMP_EQ,VARCMP_EQ,VARCMP_LT); - VARCMP(BSTR,bstrhuh,I4,I4_MAX,VARCMP_GT); - VARCMP(BSTR,bstr2cents,I4,2,VARCMP_GT); - VARCMPEX(BSTR,bstr2cents,I4,42,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_GT); - VARCMP(BSTR,bstr2cents,I4,-1,VARCMP_GT); - VARCMPEX(BSTR,bstr2cents,I4,-666,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_GT); - VARCMPEX(BSTR,bstr0,I2,0,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_GT); - VARCMPEX(BSTR,bstr0,I4,0,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_GT); - VARCMPEX(BSTR,bstr0,I4,-666,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_GT); - VARCMP(BSTR,bstr1,I4,0,VARCMP_GT); - VARCMPEX(BSTR,bstr1,I4,1,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_GT); - VARCMPEX(BSTR,bstr1,I4,I4_MAX,VARCMP_GT,VARCMP_LT,VARCMP_LT,VARCMP_GT); - VARCMPEX(BSTR,bstr1,I4,-1,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_GT); - VARCMP(BSTR,bstr7,I4,1,VARCMP_GT); - VARCMPEX(BSTR,bstr7,I4,7,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_GT); - VARCMPEX(BSTR,bstr7,I4,42,VARCMP_GT,VARCMP_GT,VARCMP_LT,VARCMP_GT); - VARCMPEX(BSTR,bstr42,I4,7,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_GT); - VARCMPEX(BSTR,bstr42,I4,42,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_GT); - VARCMPEX(BSTR,bstr42,I4,I4_MAX,VARCMP_GT,VARCMP_GT,VARCMP_LT,VARCMP_GT); - VARCMPEX(BSTR,bstr1neg,I4,1,VARCMP_GT,VARCMP_GT,VARCMP_LT,VARCMP_LT); - VARCMPEX(BSTR,bstr1neg,I4,42,VARCMP_GT,VARCMP_LT,VARCMP_LT,VARCMP_LT); - VARCMPEX(BSTR,bstr1neg,I4,-1,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_LT); - VARCMPEX(BSTR,bstr1neg,I4,-666,VARCMP_GT,VARCMP_LT,VARCMP_GT,VARCMP_LT); - VARCMPEX(BSTR,bstr666neg,I4,1,VARCMP_GT,VARCMP_GT,VARCMP_LT,VARCMP_LT); - VARCMPEX(BSTR,bstr666neg,I4,7,VARCMP_GT,VARCMP_LT,VARCMP_LT,VARCMP_LT); - VARCMPEX(BSTR,bstr666neg,I4,42,VARCMP_GT,VARCMP_GT,VARCMP_LT,VARCMP_LT); - VARCMPEX(BSTR,bstr666neg,I4,I4_MAX,VARCMP_GT,VARCMP_GT,VARCMP_LT,VARCMP_LT); - VARCMPEX(BSTR,bstr666neg,I4,-1,VARCMP_GT,VARCMP_GT,VARCMP_LT,VARCMP_LT); - VARCMPEX(BSTR,bstr666neg,I4,-666,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_LT); - VARCMPEX(BSTR,bstr7,R8,7.0,VARCMP_GT,VARCMP_EQ,VARCMP_EQ,VARCMP_GT); - VARCMPEX(R8,3.141592,BSTR,NULL,VARCMP_LT,VARCMP_LT,VARCMP_GT,VARCMP_LT); - VARCMP(BSTR,bstr7,BSTR,bstr7,VARCMP_EQ); - VARCMP(BSTR,bstr7,BSTR,bstr42,VARCMP_GT); - VARCMP(BSTR,bstr42,BSTR,bstr7,VARCMP_LT); - - /* DECIMAL handling */ - setdec(&dec,0,0,0,0); - VARCMPEX(DECIMAL,dec,BSTR,bstr0,VARCMP_LT,VARCMP_EQ,VARCMP_EQ,VARCMP_LT); - setdec64(&dec,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF); /* max DECIMAL */ - VARCMP(DECIMAL,dec,R8,R8_MAX,VARCMP_LT); /* R8 has bigger range */ - VARCMP(DECIMAL,dec,DATE,R8_MAX,VARCMP_LT); /* DATE has bigger range */ - setdec64(&dec,0,0x80,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF); - VARCMP(DECIMAL,dec,R8,-R8_MAX,VARCMP_GT); - setdec64(&dec,20,0,0x5,0x6BC75E2D,0x63100001); /* 1+1e-20 */ - VARCMP(DECIMAL,dec,R8,1,VARCMP_GT); /* DECIMAL has higher precision */ - - /* Show that DATE is handled just as a R8 */ - VARCMP(DATE,DATE_MAX,DATE,DATE_MAX+1,VARCMP_LT); - VARCMP(DATE,DATE_MIN,DATE,DATE_MIN-1,VARCMP_GT); - VARCMP(DATE,R8_MIN,R8,R8_MIN,VARCMP_EQ); - VARCMP(DATE,1,DATE,1+1e-15,VARCMP_LT); /* 1e-15 == 8.64e-11 seconds */ - VARCMP(DATE,25570.0,DATE,25570.0,VARCMP_EQ); - VARCMP(DATE,25570.0,DATE,25571.0,VARCMP_LT); - VARCMP(DATE,25571.0,DATE,25570.0,VARCMP_GT); - VARCMP(DATE,25570.0,EMPTY,0,VARCMP_GT); - VARCMP(DATE,25570.0,NULL_,0,VARCMP_NULL); - - /* R4 precision handling */ - VARCMP(R4,1,R8,1+1e-8,VARCMP_EQ); - VARCMP(R8,1+1e-8,R4,1,VARCMP_EQ); - VARCMP(R8,1+1e-8,R8,1,VARCMP_GT); - VARCMP(R8,R4_MAX*1.1,R4,R4_MAX,VARCMP_GT); - VARCMP(R4,R4_MAX,R8,R8_MAX,VARCMP_LT); - VARCMP(R4,1,DATE,1+1e-8,VARCMP_EQ); - VARCMP(R4,1,BSTR,bstr1few,VARCMP_LT); /* bstr1few == 1+1e-8 */ - setdec(&dec,8,0,0,0x5F5E101); /* 1+1e-8 */ - VARCMP(R4,1,DECIMAL,dec,VARCMP_LT); - - SysFreeString(bstrhuh); - SysFreeString(bstrempty); - SysFreeString(bstr0); - SysFreeString(bstr1); - SysFreeString(bstr7); - SysFreeString(bstr42); - SysFreeString(bstr1neg); - SysFreeString(bstr666neg); - SysFreeString(bstr2cents); - SysFreeString(bstr1few); -} - -static HRESULT (WINAPI *pVarPow)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARPOW(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarPow, &left, &right, &exp ) - -/* Skip any type that is not defined or produces an error for every case */ -#define SKIPTESTPOW(a) \ - if (a == VT_ERROR || a == VT_VARIANT || \ - a == VT_DISPATCH || a == VT_UNKNOWN || \ - a == VT_RECORD || a > VT_UINT || \ - a == 15 /*not defined*/) \ - continue - -static void test_VarPow(void) -{ - static const WCHAR str2[] = { '2','\0' }; - static const WCHAR str3[] = { '3','\0' }; - VARIANT left, right, exp, result, cy, dec; - BSTR num2_str, num3_str; - VARTYPE i; - HRESULT hres; - - CHECKPTR(VarPow); - - num2_str = SysAllocString(str2); - num3_str = SysAllocString(str3); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - SKIPTESTPOW(leftvt); - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - SKIPTESTPOW(rightvt); - - /* Native crashes with VT_BYREF */ - if (ExtraFlags[i] == VT_BYREF) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - V_VT(&right) = rightvt | ExtraFlags[i]; - V_VT(&result) = VT_EMPTY; - resvt = VT_EMPTY; - - if (leftvt == VT_BSTR) - V_BSTR(&left) = num2_str; - if (rightvt == VT_BSTR) - V_BSTR(&right) = num2_str; - - /* Native VarPow always returns an error when using extra flags */ - if (ExtraFlags[i] != 0) - bFail = TRUE; - - /* Determine return type */ - else if ((leftvt == VT_NULL || rightvt == VT_NULL) && - ((leftvt != VT_I8 && leftvt != VT_UI8 && - rightvt != VT_I8 && rightvt != VT_UI8) || HAVE_OLEAUT32_I8)) - resvt = VT_NULL; - 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_UI4) || - (HAVE_OLEAUT32_I8 && (leftvt == VT_I8 || leftvt == VT_UI8)) || - leftvt == VT_INT || 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_UI4) || - (HAVE_OLEAUT32_I8 && (rightvt == VT_I8 || rightvt == VT_UI8)) || - rightvt == VT_INT || rightvt == VT_UINT)) - resvt = VT_R8; - else - bFail = TRUE; - - hres = pVarPow(&left, &right, &result); - - /* Check expected HRESULT and if result variant type is correct */ - if (bFail) - ok (hres == DISP_E_BADVARTYPE || hres == DISP_E_TYPEMISMATCH, - "VarPow: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], - vtstr(V_VT(&result)), hres); - else - ok (hres == S_OK && resvt == V_VT(&result), - "VarPow: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], vtstr(resvt), - S_OK, vtstr(V_VT(&result)), hres); - } - } - } - - /* Check return values for valid variant type combinations */ - VARPOW(EMPTY,0,EMPTY,0,R8,1.0); - VARPOW(EMPTY,0,NULL,0,NULL,0); - VARPOW(EMPTY,0,I2,3,R8,0.0); - VARPOW(EMPTY,0,I4,3,R8,0.0); - VARPOW(EMPTY,0,R4,3.0f,R8,0.0); - VARPOW(EMPTY,0,R8,3.0,R8,0.0); - VARPOW(EMPTY,0,DATE,3,R8,0.0); - VARPOW(EMPTY,0,BSTR,num3_str,R8,0.0); - VARPOW(EMPTY,0,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(EMPTY,0,I1,3,R8,0.0); - VARPOW(EMPTY,0,UI1,3,R8,0.0); - VARPOW(EMPTY,0,UI2,3,R8,0.0); - VARPOW(EMPTY,0,UI4,3,R8,0.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(EMPTY,0,I8,3,R8,0.0); - VARPOW(EMPTY,0,UI8,3,R8,0.0); - } - VARPOW(EMPTY,0,INT,3,R8,0.0); - VARPOW(EMPTY,0,UINT,3,R8,0.0); - VARPOW(NULL,0,EMPTY,0,NULL,0); - VARPOW(NULL,0,NULL,0,NULL,0); - VARPOW(NULL,0,I2,3,NULL,0); - VARPOW(NULL,0,I4,3,NULL,0); - VARPOW(NULL,0,R4,3.0f,NULL,0); - VARPOW(NULL,0,R8,3.0,NULL,0); - VARPOW(NULL,0,DATE,3,NULL,0); - VARPOW(NULL,0,BSTR,num3_str,NULL,0); - VARPOW(NULL,0,BOOL,VARIANT_TRUE,NULL,0); - VARPOW(NULL,0,I1,3,NULL,0); - VARPOW(NULL,0,UI1,3,NULL,0); - VARPOW(NULL,0,UI2,3,NULL,0); - VARPOW(NULL,0,UI4,3,NULL,0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(NULL,0,I8,3,NULL,0); - VARPOW(NULL,0,UI8,3,NULL,0); - } - VARPOW(NULL,0,INT,3,NULL,0); - VARPOW(NULL,0,UINT,3,NULL,0); - VARPOW(I2,2,EMPTY,0,R8,1.0); - VARPOW(I2,2,NULL,0,NULL,0); - VARPOW(I2,2,I2,3,R8,8.0); - VARPOW(I2,2,I4,3,R8,8.0); - VARPOW(I2,2,R4,3.0f,R8,8.0); - VARPOW(I2,2,R8,3.0,R8,8.0); - VARPOW(I2,2,DATE,3,R8,8.0); - VARPOW(I2,2,BSTR,num3_str,R8,8.0); - VARPOW(I2,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(I2,2,I1,3,R8,8.0); - VARPOW(I2,2,UI1,3,R8,8.0); - VARPOW(I2,2,UI2,3,R8,8.0); - VARPOW(I2,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(I2,2,I8,3,R8,8.0); - VARPOW(I2,2,UI8,3,R8,8.0); - } - VARPOW(I2,2,INT,3,R8,8.0); - VARPOW(I2,2,UINT,3,R8,8.0); - VARPOW(I4,2,EMPTY,0,R8,1.0); - VARPOW(I4,2,NULL,0,NULL,0); - VARPOW(I4,2,I2,3,R8,8.0); - VARPOW(I4,2,I4,3,R8,8.0); - VARPOW(I4,2,R4,3.0f,R8,8.0); - VARPOW(I4,2,R8,3.0,R8,8.0); - VARPOW(I4,2,DATE,3,R8,8.0); - VARPOW(I4,2,BSTR,num3_str,R8,8.0); - VARPOW(I4,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(I4,2,I1,3,R8,8.0); - VARPOW(I4,2,UI1,3,R8,8.0); - VARPOW(I4,2,UI2,3,R8,8.0); - VARPOW(I4,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(I4,2,I8,3,R8,8.0); - VARPOW(I4,2,UI8,3,R8,8.0); - } - VARPOW(I4,2,INT,3,R8,8.0); - VARPOW(I4,2,UINT,3,R8,8.0); - VARPOW(R4,2,EMPTY,0,R8,1.0); - VARPOW(R4,2,NULL,0,NULL,0); - VARPOW(R4,2,I2,3,R8,8.0); - VARPOW(R4,2,I4,3,R8,8.0); - VARPOW(R4,2,R4,3.0f,R8,8.0); - VARPOW(R4,2,R8,3.0,R8,8.0); - VARPOW(R4,2,DATE,3,R8,8.0); - VARPOW(R4,2,BSTR,num3_str,R8,8.0); - VARPOW(R4,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(R4,2,I1,3,R8,8.0); - VARPOW(R4,2,UI1,3,R8,8.0); - VARPOW(R4,2,UI2,3,R8,8.0); - VARPOW(R4,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(R4,2,I8,3,R8,8.0); - VARPOW(R4,2,UI8,3,R8,8.0); - } - VARPOW(R4,2,INT,3,R8,8.0); - VARPOW(R4,2,UINT,3,R8,8.0); - VARPOW(R8,2,EMPTY,0,R8,1.0); - VARPOW(R8,2,NULL,0,NULL,0); - VARPOW(R8,2,I2,3,R8,8.0); - VARPOW(R8,2,I4,3,R8,8.0); - VARPOW(R8,2,R4,3.0f,R8,8.0); - VARPOW(R8,2,R8,3.0,R8,8.0); - VARPOW(R8,2,DATE,3,R8,8.0); - VARPOW(R8,2,BSTR,num3_str,R8,8.0); - VARPOW(R8,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(R8,2,I1,3,R8,8.0); - VARPOW(R8,2,UI1,3,R8,8.0); - VARPOW(R8,2,UI2,3,R8,8.0); - VARPOW(R8,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(R8,2,I8,3,R8,8.0); - VARPOW(R8,2,UI8,3,R8,8.0); - } - VARPOW(R8,2,INT,3,R8,8.0); - VARPOW(R8,2,UINT,3,R8,8.0); - VARPOW(DATE,2,EMPTY,0,R8,1.0); - VARPOW(DATE,2,NULL,0,NULL,0); - VARPOW(DATE,2,I2,3,R8,8.0); - VARPOW(DATE,2,I4,3,R8,8.0); - VARPOW(DATE,2,R4,3.0f,R8,8.0); - VARPOW(DATE,2,R8,3.0,R8,8.0); - VARPOW(DATE,2,DATE,3,R8,8.0); - VARPOW(DATE,2,BSTR,num3_str,R8,8.0); - VARPOW(DATE,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(DATE,2,I1,3,R8,8.0); - VARPOW(DATE,2,UI1,3,R8,8.0); - VARPOW(DATE,2,UI2,3,R8,8.0); - VARPOW(DATE,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(DATE,2,I8,3,R8,8.0); - VARPOW(DATE,2,UI8,3,R8,8.0); - } - VARPOW(DATE,2,INT,3,R8,8.0); - VARPOW(DATE,2,UINT,3,R8,8.0); - VARPOW(BSTR,num2_str,EMPTY,0,R8,1.0); - VARPOW(BSTR,num2_str,NULL,0,NULL,0); - VARPOW(BSTR,num2_str,I2,3,R8,8.0); - VARPOW(BSTR,num2_str,I4,3,R8,8.0); - VARPOW(BSTR,num2_str,R4,3.0f,R8,8.0); - VARPOW(BSTR,num2_str,R8,3.0,R8,8.0); - VARPOW(BSTR,num2_str,DATE,3,R8,8.0); - VARPOW(BSTR,num2_str,BSTR,num3_str,R8,8.0); - VARPOW(BSTR,num2_str,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(BSTR,num2_str,I1,3,R8,8.0); - VARPOW(BSTR,num2_str,UI1,3,R8,8.0); - VARPOW(BSTR,num2_str,UI2,3,R8,8.0); - VARPOW(BSTR,num2_str,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(BSTR,num2_str,I8,3,R8,8.0); - VARPOW(BSTR,num2_str,UI8,3,R8,8.0); - } - VARPOW(BSTR,num2_str,INT,3,R8,8.0); - VARPOW(BSTR,num2_str,UINT,3,R8,8.0); - VARPOW(BOOL,VARIANT_TRUE,EMPTY,0,R8,1.0); - VARPOW(BOOL,VARIANT_TRUE,NULL,0,NULL,0); - VARPOW(BOOL,VARIANT_TRUE,I2,3,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,I4,3,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,R4,3.0f,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,R8,3.0,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,DATE,3,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,BSTR,num3_str,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,I1,3,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,UI1,3,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,UI2,3,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,UI4,3,R8,-1.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(BOOL,VARIANT_TRUE,I8,3,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,UI8,3,R8,-1.0); - } - VARPOW(BOOL,VARIANT_TRUE,INT,3,R8,-1.0); - VARPOW(BOOL,VARIANT_TRUE,UINT,3,R8,-1.0); - VARPOW(I1,2,EMPTY,0,R8,1.0); - VARPOW(I1,2,NULL,0,NULL,0); - VARPOW(I1,2,I2,3,R8,8.0); - VARPOW(I1,2,I4,3,R8,8.0); - VARPOW(I1,2,R4,3.0f,R8,8.0); - VARPOW(I1,2,R8,3.0,R8,8.0); - VARPOW(I1,2,DATE,3,R8,8.0); - VARPOW(I1,2,BSTR,num3_str,R8,8.0); - VARPOW(I1,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(I1,2,I1,3,R8,8.0); - VARPOW(I1,2,UI1,3,R8,8.0); - VARPOW(I1,2,UI2,3,R8,8.0); - VARPOW(I1,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(I1,2,I8,3,R8,8.0); - VARPOW(I1,2,UI8,3,R8,8.0); - } - VARPOW(I1,2,INT,3,R8,8.0); - VARPOW(I1,2,UINT,3,R8,8.0); - VARPOW(UI1,2,EMPTY,0,R8,1.0); - VARPOW(UI1,2,NULL,0,NULL,0); - VARPOW(UI1,2,I2,3,R8,8.0); - VARPOW(UI1,2,I4,3,R8,8.0); - VARPOW(UI1,2,R4,3.0f,R8,8.0); - VARPOW(UI1,2,R8,3.0,R8,8.0); - VARPOW(UI1,2,DATE,3,R8,8.0); - VARPOW(UI1,2,BSTR,num3_str,R8,8.0); - VARPOW(UI1,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(UI1,2,I1,3,R8,8.0); - VARPOW(UI1,2,UI1,3,R8,8.0); - VARPOW(UI1,2,UI2,3,R8,8.0); - VARPOW(UI1,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(UI1,2,I8,3,R8,8.0); - VARPOW(UI1,2,UI8,3,R8,8.0); - } - VARPOW(UI1,2,INT,3,R8,8.0); - VARPOW(UI1,2,UINT,3,R8,8.0); - VARPOW(UI2,2,EMPTY,0,R8,1.0); - VARPOW(UI2,2,NULL,0,NULL,0); - VARPOW(UI2,2,I2,3,R8,8.0); - VARPOW(UI2,2,I4,3,R8,8.0); - VARPOW(UI2,2,R4,3.0f,R8,8.0); - VARPOW(UI2,2,R8,3.0,R8,8.0); - VARPOW(UI2,2,DATE,3,R8,8.0); - VARPOW(UI2,2,BSTR,num3_str,R8,8.0); - VARPOW(UI2,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(UI2,2,I1,3,R8,8.0); - VARPOW(UI2,2,UI1,3,R8,8.0); - VARPOW(UI2,2,UI2,3,R8,8.0); - VARPOW(UI2,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(UI2,2,I8,3,R8,8.0); - VARPOW(UI2,2,UI8,3,R8,8.0); - } - VARPOW(UI2,2,INT,3,R8,8.0); - VARPOW(UI2,2,UINT,3,R8,8.0); - VARPOW(UI4,2,EMPTY,0,R8,1.0); - VARPOW(UI4,2,NULL,0,NULL,0); - VARPOW(UI4,2,I2,3,R8,8.0); - VARPOW(UI4,2,I4,3,R8,8.0); - VARPOW(UI4,2,R4,3.0f,R8,8.0); - VARPOW(UI4,2,R8,3.0,R8,8.0); - VARPOW(UI4,2,DATE,3,R8,8.0); - VARPOW(UI4,2,BSTR,num3_str,R8,8.0); - VARPOW(UI4,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(UI4,2,I1,3,R8,8.0); - VARPOW(UI4,2,UI1,3,R8,8.0); - VARPOW(UI4,2,UI2,3,R8,8.0); - VARPOW(UI4,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(UI4,2,I8,3,R8,8.0); - VARPOW(UI4,2,UI8,3,R8,8.0); - } - VARPOW(UI4,2,INT,3,R8,8.0); - VARPOW(UI4,2,UINT,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(I8,2,EMPTY,0,R8,1.0); - VARPOW(I8,2,NULL,0,NULL,0); - VARPOW(I8,2,I2,3,R8,8.0); - VARPOW(I8,2,I4,3,R8,8.0); - VARPOW(I8,2,R4,3.0f,R8,8.0); - VARPOW(I8,2,R8,3.0,R8,8.0); - VARPOW(I8,2,DATE,3,R8,8.0); - VARPOW(I8,2,BSTR,num3_str,R8,8.0); - VARPOW(I8,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(I8,2,I1,3,R8,8.0); - VARPOW(I8,2,UI1,3,R8,8.0); - VARPOW(I8,2,UI2,3,R8,8.0); - VARPOW(I8,2,UI4,3,R8,8.0); - VARPOW(I8,2,I8,3,R8,8.0); - VARPOW(I8,2,UI8,3,R8,8.0); - VARPOW(I8,2,INT,3,R8,8.0); - VARPOW(I8,2,UINT,3,R8,8.0); - VARPOW(UI8,2,EMPTY,0,R8,1.0); - VARPOW(UI8,2,NULL,0,NULL,0); - VARPOW(UI8,2,I2,3,R8,8.0); - VARPOW(UI8,2,I4,3,R8,8.0); - VARPOW(UI8,2,R4,3.0f,R8,8.0); - VARPOW(UI8,2,R8,3.0,R8,8.0); - VARPOW(UI8,2,DATE,3,R8,8.0); - VARPOW(UI8,2,BSTR,num3_str,R8,8.0); - VARPOW(UI8,2,I1,3,R8,8.0); - VARPOW(UI8,2,UI1,3,R8,8.0); - VARPOW(UI8,2,UI2,3,R8,8.0); - VARPOW(UI8,2,UI4,3,R8,8.0); - VARPOW(UI8,2,I8,3,R8,8.0); - VARPOW(UI8,2,UI8,3,R8,8.0); - VARPOW(UI8,2,INT,3,R8,8.0); - VARPOW(UI8,2,UINT,3,R8,8.0); - } - VARPOW(INT,2,EMPTY,0,R8,1.0); - VARPOW(INT,2,NULL,0,NULL,0); - VARPOW(INT,2,I2,3,R8,8.0); - VARPOW(INT,2,I4,3,R8,8.0); - VARPOW(INT,2,R4,3.0f,R8,8.0); - VARPOW(INT,2,R8,3.0,R8,8.0); - VARPOW(INT,2,DATE,3,R8,8.0); - VARPOW(INT,2,BSTR,num3_str,R8,8.0); - VARPOW(INT,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(INT,2,I1,3,R8,8.0); - VARPOW(INT,2,UI1,3,R8,8.0); - VARPOW(INT,2,UI2,3,R8,8.0); - VARPOW(INT,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(INT,2,I8,3,R8,8.0); - VARPOW(INT,2,UI8,3,R8,8.0); - } - VARPOW(INT,2,INT,3,R8,8.0); - VARPOW(INT,2,UINT,3,R8,8.0); - VARPOW(UINT,2,EMPTY,0,R8,1.0); - VARPOW(UINT,2,NULL,0,NULL,0); - VARPOW(UINT,2,I2,3,R8,8.0); - VARPOW(UINT,2,I4,3,R8,8.0); - VARPOW(UINT,2,R4,3.0f,R8,8.0); - VARPOW(UINT,2,R8,3.0,R8,8.0); - VARPOW(UINT,2,DATE,3,R8,8.0); - VARPOW(UINT,2,BSTR,num3_str,R8,8.0); - VARPOW(UINT,2,BOOL,VARIANT_FALSE,R8,1.0); - VARPOW(UINT,2,I1,3,R8,8.0); - VARPOW(UINT,2,UI1,3,R8,8.0); - VARPOW(UINT,2,UI2,3,R8,8.0); - VARPOW(UINT,2,UI4,3,R8,8.0); - if (HAVE_OLEAUT32_I8) - { - VARPOW(UINT,2,I8,3,R8,8.0); - VARPOW(UINT,2,UI8,3,R8,8.0); - } - VARPOW(UINT,2,INT,3,R8,8.0); - VARPOW(UINT,2,UINT,3,R8,8.0); - - /* Manually test some VT_CY, VT_DECIMAL variants */ - V_VT(&cy) = VT_CY; - hres = VarCyFromI4(2, &V_CY(&cy)); - ok(hres == S_OK, "VarCyFromI4 failed!\n"); - V_VT(&dec) = VT_DECIMAL; - hres = VarDecFromR8(2.0, &V_DECIMAL(&dec)); - ok(hres == S_OK, "VarDecFromR4 failed!\n"); - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = VT_I4; - V_I4(&left) = 100; - V_VT(&right) = VT_I8; - V_UI1(&right) = 2; - - hres = pVarPow(&cy, &cy, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 4.0), - "VARPOW: CY value %f, expected %f\n", V_R8(&result), 4.0); - - hres = pVarPow(&cy, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 4.0), - "VARPOW: CY value %f, expected %f\n", V_R8(&result), 4.0); - - hres = pVarPow(&left, &cy, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 10000.0), - "VARPOW: CY value %f, expected %f\n", V_R8(&result), 10000.0); - - hres = pVarPow(&left, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result),10000.0), - "VARPOW: DECIMAL value %f, expected %f\n", V_R8(&result), 10000.0); - - hres = pVarPow(&dec, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 4.0), - "VARPOW: DECIMAL value %f, expected %f\n", V_R8(&result), 4.0); - - hres = pVarPow(&dec, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 4.0), - "VARPOW: DECIMAL value %f, expected %f\n", V_R8(&result), 4.0); - - SysFreeString(num2_str); - SysFreeString(num3_str); -} - -static HRESULT (WINAPI *pVarDiv)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARDIV(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarDiv, &left, &right, &exp ) - -/* Skip any type that is not defined or produces an error for every case */ -#define SKIPTESTDIV(a) \ - if (a == VT_ERROR || a == VT_VARIANT || \ - a == VT_DISPATCH || a == VT_UNKNOWN || \ - a == VT_RECORD || a > VT_UINT || \ - a == VT_I1 || a == VT_UI8 || \ - a == VT_INT || a == VT_UINT || \ - a == VT_UI2 || a == VT_UI4 || \ - a == 15 /*not defined*/) \ - continue - -static void test_VarDiv(void) -{ - static const WCHAR str1[] = { '1','\0' }; - static const WCHAR str2[] = { '2','\0' }; - VARIANT left, right, exp, result, cy, dec; - BSTR num1_str, num2_str; - VARTYPE i; - HRESULT hres, expectedhres; - double r; - - num1_str = SysAllocString(str1); - num2_str = SysAllocString(str2); - - CHECKPTR(VarDiv); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - SKIPTESTDIV(leftvt); - - /* Check if we need/have support for I8 */ - if (leftvt == VT_I8 && !HAVE_OLEAUT32_I8) - continue; - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - SKIPTESTDIV(rightvt); - - /* Check if we need/have support for I8 */ - if (rightvt == VT_I8 && !HAVE_OLEAUT32_I8) - continue; - - /* Native crashes with VT_BYREF */ - if (ExtraFlags[i] == VT_BYREF) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - V_VT(&right) = rightvt | ExtraFlags[i]; - V_VT(&result) = VT_EMPTY; - resvt = VT_EMPTY; - expectedhres = S_OK; - - if (leftvt == VT_BSTR) - V_BSTR(&left) = num2_str; - else if (leftvt == VT_DECIMAL) - { - VarDecFromR8(2.0, &V_DECIMAL(&left)); - V_VT(&left) = leftvt | ExtraFlags[i]; - } - - /* Division by 0 is undefined */ - switch(rightvt) - { - case VT_BSTR: - V_BSTR(&right) = num2_str; - break; - case VT_DECIMAL: - VarDecFromR8(2.0, &V_DECIMAL(&right)); - V_VT(&right) = rightvt | ExtraFlags[i]; - break; - case VT_BOOL: - V_BOOL(&right) = VARIANT_TRUE; - break; - case VT_I2: V_I2(&right) = 2; break; - case VT_I4: V_I4(&right) = 2; break; - case VT_R4: V_R4(&right) = 2.0f; break; - case VT_R8: V_R8(&right) = 2.0; break; - case VT_CY: V_CY(&right).int64 = 2; break; - case VT_DATE: V_DATE(&right) = 2; break; - case VT_UI1: V_UI1(&right) = 2; break; - case VT_I8: V_I8(&right) = 2; break; - default: break; - } - - /* Determine return type */ - if (!(rightvt == VT_EMPTY)) - { - if (leftvt == VT_NULL || rightvt == VT_NULL) - resvt = VT_NULL; - 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 && rightvt == VT_EMPTY) - resvt = VT_NULL; - else - bFail = TRUE; - - /* Native VarDiv always returns an error when using extra flags */ - if (ExtraFlags[i] != 0) - bFail = TRUE; - - hres = pVarDiv(&left, &right, &result); - - /* Check expected HRESULT and if result variant type is correct */ - if (bFail) - ok (hres == DISP_E_BADVARTYPE || hres == DISP_E_TYPEMISMATCH || - hres == DISP_E_OVERFLOW || hres == DISP_E_DIVBYZERO, - "VarDiv: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], - vtstr(V_VT(&result)), hres); - else - ok (hres == S_OK && resvt == V_VT(&result), - "VarDiv: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], vtstr(resvt), - S_OK, vtstr(V_VT(&result)), hres); - } - } - } - - /* Test return values for all the good cases */ - VARDIV(EMPTY,0,NULL,0,NULL,0); - VARDIV(EMPTY,0,I2,2,R8,0.0); - VARDIV(EMPTY,0,I4,2,R8,0.0); - VARDIV(EMPTY,0,R4,2.0f,R4,0.0f); - VARDIV(EMPTY,0,R8,2.0,R8,0.0); - VARDIV(EMPTY,0,DATE,2.0,R8,0.0); - VARDIV(EMPTY,0,BSTR,num2_str,R8,0.0); - VARDIV(EMPTY,0,BOOL,VARIANT_TRUE,R8,0.0); - VARDIV(EMPTY,0,UI1,2,R8,0.0); - if (HAVE_OLEAUT32_I8) - { - VARDIV(EMPTY,0,I8,2,R8,0.0); - } - VARDIV(NULL,0,EMPTY,0,NULL,0); - VARDIV(NULL,0,NULL,0,NULL,0); - VARDIV(NULL,0,I2,2,NULL,0); - VARDIV(NULL,0,I4,2,NULL,0); - VARDIV(NULL,0,R4,2.0f,NULL,0); - VARDIV(NULL,0,R8,2.0,NULL,0); - VARDIV(NULL,0,DATE,2,NULL,0); - VARDIV(NULL,0,BSTR,num2_str,NULL,0); - VARDIV(NULL,0,BOOL,VARIANT_TRUE,NULL,0); - VARDIV(NULL,0,UI1,2,NULL,0); - if (HAVE_OLEAUT32_I8) - { - VARDIV(NULL,0,I8,2,NULL,0); - } - VARDIV(I2,2,NULL,0,NULL,0); - VARDIV(I2,1,I2,2,R8,0.5); - VARDIV(I2,1,I4,2,R8,0.5); - VARDIV(I2,1,R4,2,R4,0.5f); - VARDIV(I2,1,R8,2.0,R8,0.5); - VARDIV(I2,1,DATE,2,R8,0.5); - VARDIV(I2,1,BOOL,VARIANT_TRUE,R8,-1.0); - VARDIV(I2,1,UI1,2,R8,0.5); - if (HAVE_OLEAUT32_I8) - { - VARDIV(I2,1,I8,2,R8,0.5); - } - VARDIV(I4,1,NULL,0,NULL,0); - VARDIV(I4,1,I2,2,R8,0.5); - VARDIV(I4,1,I4,2,R8,0.5); - VARDIV(I4,1,R4,2.0f,R8,0.5); - VARDIV(I4,1,R8,2.0,R8,0.5); - VARDIV(I4,1,DATE,2,R8,0.5); - VARDIV(I4,1,BSTR,num2_str,R8,0.5); - VARDIV(I4,1,BOOL,VARIANT_TRUE,R8,-1.0); - VARDIV(I4,1,UI1,2,R8,0.5); - if (HAVE_OLEAUT32_I8) - { - VARDIV(I4,1,I8,2,R8,0.5); - } - VARDIV(R4,1.0f,NULL,0,NULL,0); - VARDIV(R4,1.0f,I2,2,R4,0.5f); - VARDIV(R4,1.0f,I4,2,R8,0.5); - VARDIV(R4,1.0f,R4,2.0f,R4,0.5f); - VARDIV(R4,1.0f,R8,2.0,R8,0.5); - VARDIV(R4,1.0f,DATE,2,R8,0.5); - VARDIV(R4,1.0f,BSTR,num2_str,R8,0.5); - VARDIV(R4,1.0f,BOOL,VARIANT_TRUE,R4,-1); - VARDIV(R4,1.0f,UI1,2,R4,0.5f); - if (HAVE_OLEAUT32_I8) - { - VARDIV(R4,1.0f,I8,2,R8,0.5); - } - VARDIV(R8,1.0,NULL,0,NULL,0); - VARDIV(R8,1.0,I2,2,R8,0.5); - VARDIV(R8,1.0,I4,2,R8,0.5); - VARDIV(R8,1.0,R4,2.0f,R8,0.5); - VARDIV(R8,1.0,R8,2.0,R8,0.5); - VARDIV(R8,1.0,DATE,2,R8,0.5); - VARDIV(R8,1.0,BSTR,num2_str,R8,0.5); - VARDIV(R8,1.0,BOOL,VARIANT_TRUE,R8,-1.0); - VARDIV(R8,1.0,UI1,2,R8,0.5); - if (HAVE_OLEAUT32_I8) - { - VARDIV(R8,1.0,I8,2,R8,0.5); - } - VARDIV(DATE,1,NULL,0,NULL,0); - VARDIV(DATE,1,I2,2,R8,0.5); - VARDIV(DATE,1,I4,2,R8,0.5); - VARDIV(DATE,1,R4,2.0f,R8,0.5); - VARDIV(DATE,1,R8,2.0,R8,0.5); - VARDIV(DATE,1,DATE,2,R8,0.5); - VARDIV(DATE,1,BSTR,num2_str,R8,0.5); - VARDIV(DATE,1,BOOL,VARIANT_TRUE,R8,-1.0); - VARDIV(DATE,1,UI1,2,R8,0.5); - if (HAVE_OLEAUT32_I8) - { - VARDIV(DATE,1,I8,2,R8,0.5); - } - VARDIV(BSTR,num1_str,NULL,0,NULL,0); - VARDIV(BSTR,num1_str,I2,2,R8,0.5); - VARDIV(BSTR,num1_str,I4,2,R8,0.5); - VARDIV(BSTR,num1_str,R4,2.0f,R8,0.5); - VARDIV(BSTR,num1_str,R8,2.0,R8,0.5); - VARDIV(BSTR,num1_str,DATE,2,R8,0.5); - VARDIV(BSTR,num1_str,BSTR,num2_str,R8,0.5); - VARDIV(BSTR,num1_str,BOOL,VARIANT_TRUE,R8,-1); - VARDIV(BSTR,num1_str,UI1,2,R8,0.5); - if (HAVE_OLEAUT32_I8) - { - VARDIV(BSTR,num1_str,I8,2,R8,0.5); - } - VARDIV(BOOL,VARIANT_TRUE,NULL,0,NULL,0); - VARDIV(BOOL,VARIANT_TRUE,I2,1,R8,-1.0); - VARDIV(BOOL,VARIANT_FALSE,I2,1,R8,0.0); - VARDIV(BOOL,VARIANT_TRUE,I4,1,R8,-1.0); - VARDIV(BOOL,VARIANT_FALSE,I4,1,R8,0.0); - VARDIV(BOOL,VARIANT_TRUE,R4,1,R4,-1.0f); - VARDIV(BOOL,VARIANT_FALSE,R4,1,R4,0.0f); - VARDIV(BOOL,VARIANT_TRUE,R8,1.0,R8,-1.0); - VARDIV(BOOL,VARIANT_FALSE,R8,1.0,R8,0.0); - VARDIV(BOOL,VARIANT_FALSE,DATE,2,R8,0.0); - VARDIV(BOOL,VARIANT_FALSE,BSTR,num2_str,R8,0.0); - VARDIV(BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE,R8,1.0); - VARDIV(BOOL,VARIANT_FALSE,BOOL,VARIANT_TRUE,R8,0.0); - VARDIV(BOOL,VARIANT_TRUE,UI1,1,R8,-1.0); - if (HAVE_OLEAUT32_I8) - { - VARDIV(BOOL,VARIANT_TRUE,I8,1,R8,-1.0); - } - VARDIV(UI1,1,NULL,0,NULL,0); - VARDIV(UI1,1,I2,2,R8,0.5); - VARDIV(UI1,1,I4,2,R8,0.5); - VARDIV(UI1,1,R4,2.0f,R4,0.5f); - VARDIV(UI1,1,R8,2.0,R8,0.5); - VARDIV(UI1,1,DATE,2,R8,0.5); - VARDIV(UI1,1,BSTR,num2_str,R8,0.5); - VARDIV(UI1,1,BOOL,VARIANT_TRUE,R8,-1); - VARDIV(UI1,1,UI1,2,R8,0.5); - if (HAVE_OLEAUT32_I8) - { - VARDIV(UI1,1,I8,2,R8,0.5); - VARDIV(I8,1,NULL,0,NULL,0); - VARDIV(I8,1,I2,2,R8,0.5); - VARDIV(I8,1,I4,2,R8,0.5); - VARDIV(I8,1,R4,2.0f,R8,0.5); - VARDIV(I8,1,R8,2.0,R8,0.5); - VARDIV(I8,1,DATE,2,R8,0.5); - VARDIV(I8,1,BSTR,num2_str,R8,0.5); - VARDIV(I8,1,BOOL,VARIANT_TRUE,R8,-1); - VARDIV(I8,1,UI1,2,R8,0.5); - VARDIV(I8,1,I8,2,R8,0.5); - } - - /* Manually test some VT_CY, VT_DECIMAL variants */ - V_VT(&cy) = VT_CY; - hres = VarCyFromI4(10000, &V_CY(&cy)); - ok(hres == S_OK, "VarCyFromI4 failed!\n"); - V_VT(&dec) = VT_DECIMAL; - hres = VarDecFromR8(2.0, &V_DECIMAL(&dec)); - ok(hres == S_OK, "VarDecFromR4 failed!\n"); - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = VT_I4; - V_I4(&left) = 100; - V_VT(&right) = VT_UI1; - V_UI1(&right) = 2; - - hres = pVarDiv(&cy, &cy, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARDIV: expected coerced type VT_R8, got %s!\n", vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 1.0), - "VARDIV: CY value %f, expected %f\n", V_R8(&result), (double)1.0); - - hres = pVarDiv(&cy, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARDIV: expected coerced type VT_R8, got %s!\n", vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 5000.0), - "VARDIV: CY value %f, expected %f\n", V_R8(&result), (double)5000.0); - - hres = pVarDiv(&left, &cy, &result); - ok(hres == S_OK && V_VT(&result) == VT_R8, - "VARDIV: expected coerced type VT_R8, got %s!\n", vtstr(V_VT(&result))); - ok(hres == S_OK && EQ_DOUBLE(V_R8(&result), 0.01), - "VARDIV: CY value %f, expected %f\n", V_R8(&result), (double)0.01); - - hres = pVarDiv(&left, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_DECIMAL, - "VARDIV: expected coerced type VT_DECIMAL, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromDec(&V_DECIMAL(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, 50.0), - "VARDIV: DECIMAL value %f, expected %f\n", r, (double)50.0); - - hres = pVarDiv(&dec, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_DECIMAL, - "VARDIV: expected coerced type VT_DECIMAL, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromDec(&V_DECIMAL(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, 1.0), - "VARDIV: DECIMAL value %f, expected %f\n", r, (double)1.0); - - hres = pVarDiv(&dec, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_DECIMAL, - "VARDIV: expected coerced type VT_DECIMAL, got %s!\n", vtstr(V_VT(&result))); - hres = VarR8FromDec(&V_DECIMAL(&result), &r); - ok(hres == S_OK && EQ_DOUBLE(r, 1.0), - "VARDIV: DECIMAL value %f, expected %f\n", r, (double)1.0); - - /* Check for division by zero and overflow */ - V_VT(&left) = VT_R8; - V_I4(&left) = 1; - V_VT(&right) = VT_R8; - V_I4(&right) = 0; - hres = pVarDiv(&left, &right, &result); - ok(hres == DISP_E_DIVBYZERO && V_VT(&result) == VT_EMPTY, - "VARDIV: Division by (1.0/0.0) should result in DISP_E_DIVBYZERO but got 0x%X\n", hres); - - V_VT(&left) = VT_R8; - V_I4(&left) = 0; - V_VT(&right) = VT_R8; - V_I4(&right) = 0; - hres = pVarDiv(&left, &right, &result); - ok(hres == DISP_E_OVERFLOW && V_VT(&result) == VT_EMPTY, - "VARDIV: Division by (0.0/0.0) should result in DISP_E_OVERFLOW but got 0x%X\n", hres); - - SysFreeString(num1_str); - SysFreeString(num2_str); -} - -static HRESULT (WINAPI *pVarIdiv)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARIDIV(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarIdiv, &left, &right, &exp ) - -/* Skip any type that is not defined or produces an error for every case */ -#define SKIPTESTIDIV(a) \ - if (a == VT_ERROR || a == VT_VARIANT || \ - a == VT_DISPATCH || a == VT_UNKNOWN || \ - a == VT_RECORD || a > VT_UINT || \ - a == 15 /*not defined*/) \ - continue - -static void test_VarIdiv(void) -{ - static const WCHAR str1[] = { '1','\0' }; - static const WCHAR str2[] = { '2','\0' }; - VARIANT left, right, exp, result, cy, dec; - BSTR num1_str, num2_str; - VARTYPE i; - HRESULT hres; - - CHECKPTR(VarIdiv); - - num1_str = SysAllocString(str1); - num2_str = SysAllocString(str2); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - SKIPTESTIDIV(leftvt); - - /* Check if we need/have support for I8 and/or UI8 */ - if ((leftvt == VT_I8 || leftvt == VT_UI8) && !HAVE_OLEAUT32_I8) - continue; - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - SKIPTESTIDIV(rightvt); - - /* Native crashes with extra flag VT_BYREF */ - if (ExtraFlags[i] == VT_BYREF) - continue; - - /* Check if we need/have support for I8 and/or UI8 */ - if ((rightvt == VT_I8 || rightvt == VT_UI8) && !HAVE_OLEAUT32_I8) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - V_VT(&right) = rightvt | ExtraFlags[i]; - V_VT(&result) = VT_EMPTY; - resvt = VT_EMPTY; - - if (leftvt == VT_BSTR) - V_BSTR(&left) = num2_str; - else if (leftvt == VT_DECIMAL) - { - VarDecFromR8(2.0, &V_DECIMAL(&left)); - V_VT(&left) = leftvt | ExtraFlags[i]; - } - - /* Division by 0 is undefined */ - switch(rightvt) - { - case VT_BSTR: - V_BSTR(&right) = num2_str; - break; - case VT_DECIMAL: - VarDecFromR8(2.0, &V_DECIMAL(&right)); - V_VT(&right) = rightvt | ExtraFlags[i]; - break; - case VT_BOOL: - V_BOOL(&right) = VARIANT_TRUE; - break; - case VT_CY: - VarCyFromI4(10000, &V_CY(&right)); - V_VT(&right) = rightvt | ExtraFlags[i]; - break; - case VT_I2: V_I2(&right) = 2; break; - case VT_I4: V_I4(&right) = 2; break; - case VT_R4: V_R4(&right) = 2.0f; break; - case VT_R8: V_R8(&right) = 2.0; break; - case VT_DATE: V_DATE(&right) = 2; break; - case VT_I1: V_I1(&right) = 2; break; - case VT_UI1: V_UI1(&right) = 2; break; - case VT_UI2: V_UI2(&right) = 2; break; - case VT_UI4: V_UI4(&right) = 2; break; - case VT_I8: V_I8(&right) = 2; break; - case VT_UI8: V_UI8(&right) = 2; break; - case VT_INT: V_INT(&right) = 2; break; - case VT_UINT: V_UINT(&right) = 2; break; - default: break; - } - - /* 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[i] != 0) - bFail = TRUE; - - /* Determine variant type */ - else if (leftvt == VT_NULL || rightvt == VT_NULL) - resvt = VT_NULL; - 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 - bFail = TRUE; - - hres = pVarIdiv(&left, &right, &result); - - /* Check expected HRESULT and if result variant type is correct */ - if (bFail) - ok (hres == DISP_E_BADVARTYPE || hres == DISP_E_TYPEMISMATCH || - hres == DISP_E_DIVBYZERO, - "VarIdiv: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], - vtstr(V_VT(&result)), hres); - else - ok (hres == S_OK && resvt == V_VT(&result), - "VarIdiv: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], vtstr(resvt), - S_OK, vtstr(V_VT(&result)), hres); - } - } - } - - /* Test return values for all the good cases */ - VARIDIV(EMPTY,0,NULL,0,NULL,0); - VARIDIV(EMPTY,0,I2,1,I2,0); - VARIDIV(EMPTY,0,I4,1,I4,0); - VARIDIV(EMPTY,0,R4,1.0f,I4,0); - VARIDIV(EMPTY,0,R8,1.0,I4,0); - VARIDIV(EMPTY,0,DATE,1.0,I4,0); - VARIDIV(EMPTY,0,BSTR,num1_str,I4,0); - VARIDIV(EMPTY,0,BOOL,VARIANT_TRUE,I2,0); - VARIDIV(EMPTY,0,I1,1,I4,0); - VARIDIV(EMPTY,0,UI1,1,I2,0); - VARIDIV(EMPTY,0,UI2,1,I4,0); - VARIDIV(EMPTY,0,UI4,1,I4,0); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(EMPTY,0,I8,1,I8,0); - VARIDIV(EMPTY,0,UI8,1,I4,0); - } - VARIDIV(EMPTY,0,INT,1,I4,0); - VARIDIV(EMPTY,0,UINT,1,I4,0); - VARIDIV(NULL,0,EMPTY,0,NULL,0); - VARIDIV(NULL,0,NULL,0,NULL,0); - VARIDIV(NULL,0,I2,1,NULL,0); - VARIDIV(NULL,0,I4,1,NULL,0); - VARIDIV(NULL,0,R4,1,NULL,0); - VARIDIV(NULL,0,R8,1,NULL,0); - VARIDIV(NULL,0,DATE,1,NULL,0); - VARIDIV(NULL,0,BSTR,num1_str,NULL,0); - VARIDIV(NULL,0,BOOL,VARIANT_TRUE,NULL,0); - VARIDIV(NULL,0,I1,1,NULL,0); - VARIDIV(NULL,0,UI1,1,NULL,0); - VARIDIV(NULL,0,UI2,1,NULL,0); - VARIDIV(NULL,0,UI4,1,NULL,0); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(NULL,0,I8,1,NULL,0); - VARIDIV(NULL,0,UI8,1,NULL,0); - } - VARIDIV(NULL,0,INT,1,NULL,0); - VARIDIV(NULL,0,UINT,1,NULL,0); - VARIDIV(I2,2,NULL,0,NULL,0); - VARIDIV(I2,2,I2,1,I2,2); - VARIDIV(I2,2,I4,1,I4,2); - VARIDIV(I2,2,R4,1,I4,2); - VARIDIV(I2,2,R8,1,I4,2); - VARIDIV(I2,2,DATE,1,I4,2); - VARIDIV(I2,2,BSTR,num1_str,I4,2); - VARIDIV(I2,2,BOOL,VARIANT_TRUE,I2,-2); - VARIDIV(I2,2,I1,1,I4,2); - VARIDIV(I2,2,UI1,1,I2,2); - VARIDIV(I2,2,UI2,1,I4,2); - VARIDIV(I2,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(I2,2,I8,1,I8,2); - VARIDIV(I2,2,UI8,1,I4,2); - } - VARIDIV(I2,2,INT,1,I4,2); - VARIDIV(I2,2,UINT,1,I4,2); - VARIDIV(I4,2,NULL,0,NULL,0); - VARIDIV(I4,2,I2,1,I4,2); - VARIDIV(I4,2,I4,1,I4,2); - VARIDIV(I4,2,R4,1,I4,2); - VARIDIV(I4,2,R8,1,I4,2); - VARIDIV(I4,2,DATE,1,I4,2); - VARIDIV(I4,2,BSTR,num1_str,I4,2); - VARIDIV(I4,2,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(I4,2,I1,1,I4,2); - VARIDIV(I4,2,UI1,1,I4,2); - VARIDIV(I4,2,UI2,1,I4,2); - VARIDIV(I4,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(I4,2,I8,1,I8,2); - VARIDIV(I4,2,UI8,1,I4,2); - } - VARIDIV(I4,2,INT,1,I4,2); - VARIDIV(I4,2,UINT,1,I4,2); - VARIDIV(R4,2.0f,NULL,0,NULL,0); - VARIDIV(R4,2.0f,I2,1,I4,2); - VARIDIV(R4,2.0f,I4,1,I4,2); - VARIDIV(R4,2.0f,R4,1.0f,I4,2); - VARIDIV(R4,2.0f,R8,1.0,I4,2); - VARIDIV(R4,2.0f,DATE,1,I4,2); - VARIDIV(R4,2.0f,BSTR,num1_str,I4,2); - VARIDIV(R4,2.0f,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(R4,2.0f,I1,1,I4,2); - VARIDIV(R4,2.0f,UI1,1,I4,2); - VARIDIV(R4,2.0f,UI2,1,I4,2); - VARIDIV(R4,2.0f,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(R4,2.0f,I8,1,I8,2); - VARIDIV(R4,2.0f,UI8,1,I4,2); - } - VARIDIV(R4,2.0f,INT,1,I4,2); - VARIDIV(R4,2.0f,UINT,1,I4,2); - VARIDIV(R8,2.0,NULL,0,NULL,0); - VARIDIV(R8,2.0,I2,1,I4,2); - VARIDIV(R8,2.0,I4,1,I4,2); - VARIDIV(R8,2.0,R4,1,I4,2); - VARIDIV(R8,2.0,R8,1,I4,2); - VARIDIV(R8,2.0,DATE,1,I4,2); - VARIDIV(R8,2.0,BSTR,num1_str,I4,2); - VARIDIV(R8,2.0,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(R8,2.0,I1,1,I4,2); - VARIDIV(R8,2.0,UI1,1,I4,2); - VARIDIV(R8,2.0,UI2,1,I4,2); - VARIDIV(R8,2.0,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(R8,2.0,I8,1,I8,2); - VARIDIV(R8,2.0,UI8,1,I4,2); - } - VARIDIV(R8,2.0,INT,1,I4,2); - VARIDIV(R8,2.0,UINT,1,I4,2); - VARIDIV(DATE,2,NULL,0,NULL,0); - VARIDIV(DATE,2,I2,1,I4,2); - VARIDIV(DATE,2,I4,1,I4,2); - VARIDIV(DATE,2,R4,1,I4,2); - VARIDIV(DATE,2,R8,1,I4,2); - VARIDIV(DATE,2,DATE,1,I4,2); - VARIDIV(DATE,2,BSTR,num1_str,I4,2); - VARIDIV(DATE,2,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(DATE,2,I1,1,I4,2); - VARIDIV(DATE,2,UI1,1,I4,2); - VARIDIV(DATE,2,UI2,1,I4,2); - VARIDIV(DATE,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(DATE,2,I8,1,I8,2); - VARIDIV(DATE,2,UI8,1,I4,2); - } - VARIDIV(DATE,2,INT,1,I4,2); - VARIDIV(DATE,2,UINT,1,I4,2); - VARIDIV(BSTR,num2_str,NULL,0,NULL,0); - VARIDIV(BSTR,num2_str,I2,1,I4,2); - VARIDIV(BSTR,num2_str,I4,1,I4,2); - VARIDIV(BSTR,num2_str,R4,1.0f,I4,2); - VARIDIV(BSTR,num2_str,R8,1.0,I4,2); - VARIDIV(BSTR,num2_str,DATE,1,I4,2); - VARIDIV(BSTR,num2_str,BSTR,num1_str,I4,2); - VARIDIV(BSTR,num2_str,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(BSTR,num2_str,I1,1,I4,2); - VARIDIV(BSTR,num2_str,UI1,1,I4,2); - VARIDIV(BSTR,num2_str,UI2,1,I4,2); - VARIDIV(BSTR,num2_str,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(BSTR,num2_str,I8,1,I8,2); - VARIDIV(BSTR,num2_str,UI8,1,I4,2); - } - VARIDIV(BSTR,num2_str,INT,1,I4,2); - VARIDIV(BSTR,num2_str,UINT,1,I4,2); - VARIDIV(BOOL,VARIANT_TRUE,NULL,0,NULL,0); - VARIDIV(BOOL,VARIANT_TRUE,I2,1,I2,-1); - VARIDIV(BOOL,VARIANT_TRUE,I4,1,I4,-1); - VARIDIV(BOOL,VARIANT_TRUE,R4,1.0f,I4,-1); - VARIDIV(BOOL,VARIANT_TRUE,R8,1.0,I4,-1); - VARIDIV(BOOL,VARIANT_TRUE,DATE,1,I4,-1); - VARIDIV(BOOL,VARIANT_TRUE,BSTR,num1_str,I4,-1); - VARIDIV(BOOL,VARIANT_TRUE,BOOL,VARIANT_TRUE,I2,1); - VARIDIV(BOOL,VARIANT_TRUE,I1,1,I4,-1); - VARIDIV(BOOL,VARIANT_TRUE,UI1,1,I2,-1); - VARIDIV(BOOL,VARIANT_TRUE,UI2,1,I4,-1); - VARIDIV(BOOL,VARIANT_TRUE,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(BOOL,VARIANT_TRUE,I8,1,I8,-1); - VARIDIV(BOOL,VARIANT_TRUE,UI8,1,I4,-1); - } - VARIDIV(BOOL,VARIANT_TRUE,INT,1,I4,-1); - VARIDIV(BOOL,VARIANT_TRUE,UINT,1,I4,-1); - VARIDIV(I1,2,NULL,0,NULL,0); - VARIDIV(I1,2,I2,1,I4,2); - VARIDIV(I1,2,I4,1,I4,2); - VARIDIV(I1,2,R4,1.0f,I4,2); - VARIDIV(I1,2,R8,1.0,I4,2); - VARIDIV(I1,2,DATE,1,I4,2); - VARIDIV(I1,2,BSTR,num1_str,I4,2); - VARIDIV(I1,2,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(I1,2,I1,1,I4,2); - VARIDIV(I1,2,UI1,1,I4,2); - VARIDIV(I1,2,UI2,1,I4,2); - VARIDIV(I1,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(I1,2,I8,1,I8,2); - VARIDIV(I1,2,UI8,1,I4,2); - } - VARIDIV(I1,2,INT,1,I4,2); - VARIDIV(I1,2,UINT,1,I4,2); - VARIDIV(UI1,2,NULL,0,NULL,0); - VARIDIV(UI1,2,I2,1,I2,2); - VARIDIV(UI1,2,I4,1,I4,2); - VARIDIV(UI1,2,R4,1.0f,I4,2); - VARIDIV(UI1,2,R8,1.0,I4,2); - VARIDIV(UI1,2,DATE,1,I4,2); - VARIDIV(UI1,2,BSTR,num1_str,I4,2); - VARIDIV(UI1,2,BOOL,VARIANT_TRUE,I2,-2); - VARIDIV(UI1,2,I1,1,I4,2); - VARIDIV(UI1,2,UI1,1,UI1,2); - VARIDIV(UI1,2,UI2,1,I4,2); - VARIDIV(UI1,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(UI1,2,I8,1,I8,2); - VARIDIV(UI1,2,UI8,1,I4,2); - } - VARIDIV(UI1,2,INT,1,I4,2); - VARIDIV(UI1,2,UINT,1,I4,2); - VARIDIV(UI2,2,NULL,0,NULL,0); - VARIDIV(UI2,2,I2,1,I4,2); - VARIDIV(UI2,2,I4,1,I4,2); - VARIDIV(UI2,2,R4,1.0f,I4,2); - VARIDIV(UI2,2,R8,1.0,I4,2); - VARIDIV(UI2,2,DATE,1,I4,2); - VARIDIV(UI2,2,BSTR,num1_str,I4,2); - VARIDIV(UI2,2,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(UI2,2,I1,1,I4,2); - VARIDIV(UI2,2,UI1,1,I4,2); - VARIDIV(UI2,2,UI2,1,I4,2); - VARIDIV(UI2,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(UI2,2,I8,1,I8,2); - VARIDIV(UI2,2,UI8,1,I4,2); - } - VARIDIV(UI2,2,INT,1,I4,2); - VARIDIV(UI2,2,UINT,1,I4,2); - VARIDIV(UI4,2,NULL,0,NULL,0); - VARIDIV(UI4,2,I2,1,I4,2); - VARIDIV(UI4,2,I4,1,I4,2); - VARIDIV(UI4,2,R4,1.0f,I4,2); - VARIDIV(UI4,2,R8,1.0,I4,2); - VARIDIV(UI4,2,DATE,1,I4,2); - VARIDIV(UI4,2,BSTR,num1_str,I4,2); - VARIDIV(UI4,2,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(UI4,2,I1,1,I4,2); - VARIDIV(UI4,2,UI1,1,I4,2); - VARIDIV(UI4,2,UI2,1,I4,2); - VARIDIV(UI4,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(UI4,2,I8,1,I8,2); - VARIDIV(UI4,2,UI8,1,I4,2); - } - VARIDIV(UI4,2,INT,1,I4,2); - VARIDIV(UI4,2,UINT,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(I8,2,NULL,0,NULL,0); - VARIDIV(I8,2,I2,1,I8,2); - VARIDIV(I8,2,I4,1,I8,2); - VARIDIV(I8,2,R4,1.0f,I8,2); - VARIDIV(I8,2,R8,1.0,I8,2); - VARIDIV(I8,2,DATE,1,I8,2); - VARIDIV(I8,2,BSTR,num1_str,I8,2); - VARIDIV(I8,2,BOOL,1,I8,2); - VARIDIV(I8,2,I1,1,I8,2); - VARIDIV(I8,2,UI1,1,I8,2); - VARIDIV(I8,2,UI2,1,I8,2); - VARIDIV(I8,2,UI4,1,I8,2); - VARIDIV(I8,2,I8,1,I8,2); - VARIDIV(I8,2,UI8,1,I8,2); - VARIDIV(I8,2,UINT,1,I8,2); - VARIDIV(UI8,2,NULL,0,NULL,0); - VARIDIV(UI8,2,I2,1,I4,2); - VARIDIV(UI8,2,I4,1,I4,2); - VARIDIV(UI8,2,R4,1.0f,I4,2); - VARIDIV(UI8,2,R8,1.0,I4,2); - VARIDIV(UI8,2,DATE,1,I4,2); - VARIDIV(UI8,2,BSTR,num1_str,I4,2); - VARIDIV(UI8,2,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(UI8,2,I1,1,I4,2); - VARIDIV(UI8,2,UI1,1,I4,2); - VARIDIV(UI8,2,UI2,1,I4,2); - VARIDIV(UI8,2,UI4,1,I4,2); - VARIDIV(UI8,2,I8,1,I8,2); - VARIDIV(UI8,2,UI8,1,I4,2); - VARIDIV(UI8,2,INT,1,I4,2); - VARIDIV(UI8,2,UINT,1,I4,2); - } - VARIDIV(INT,2,NULL,0,NULL,0); - VARIDIV(INT,2,I2,1,I4,2); - VARIDIV(INT,2,I4,1,I4,2); - VARIDIV(INT,2,R4,1.0f,I4,2); - VARIDIV(INT,2,R8,1.0,I4,2); - VARIDIV(INT,2,DATE,1,I4,2); - VARIDIV(INT,2,BSTR,num1_str,I4,2); - VARIDIV(INT,2,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(INT,2,I1,1,I4,2); - VARIDIV(INT,2,UI1,1,I4,2); - VARIDIV(INT,2,UI2,1,I4,2); - VARIDIV(INT,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(INT,2,UI8,1,I4,2); - } - VARIDIV(INT,2,INT,1,I4,2); - VARIDIV(INT,2,UINT,1,I4,2); - VARIDIV(UINT,2,NULL,0,NULL,0); - VARIDIV(UINT,2,I2,1,I4,2); - VARIDIV(UINT,2,I4,1,I4,2); - VARIDIV(UINT,2,R4,1.0f,I4,2); - VARIDIV(UINT,2,R8,1.0,I4,2); - VARIDIV(UINT,2,DATE,1,I4,2); - VARIDIV(UINT,2,BSTR,num1_str,I4,2); - VARIDIV(UINT,2,BOOL,VARIANT_TRUE,I4,-2); - VARIDIV(UINT,2,I1,1,I4,2); - VARIDIV(UINT,2,UI1,1,I4,2); - VARIDIV(UINT,2,UI2,1,I4,2); - VARIDIV(UINT,2,UI4,1,I4,2); - if (HAVE_OLEAUT32_I8) - { - VARIDIV(UINT,2,I8,1,I8,2); - VARIDIV(UINT,2,UI8,1,I4,2); - } - VARIDIV(UINT,2,INT,1,I4,2); - VARIDIV(UINT,2,UINT,1,I4,2); - - /* Manually test some VT_CY, VT_DECIMAL variants */ - V_VT(&cy) = VT_CY; - hres = VarCyFromI4(10000, &V_CY(&cy)); - ok(hres == S_OK, "VarCyFromI4 failed!\n"); - V_VT(&dec) = VT_DECIMAL; - hres = VarDecFromR8(2.0, &V_DECIMAL(&dec)); - ok(hres == S_OK, "VarDecFromR4 failed!\n"); - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = VT_I4; - V_I4(&left) = 100; - V_VT(&right) = VT_I8; - V_UI1(&right) = 2; - - hres = VarIdiv(&cy, &cy, &result); - ok(hres == S_OK && V_VT(&result) == VT_I4, - "VARIDIV: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I4(&result) == 1, - "VARIDIV: CY value %d, expected %d\n", V_I4(&result), 1); - - if (HAVE_OLEAUT32_I8) - { - hres = VarIdiv(&cy, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_I8, - "VARIDIV: expected coerced hres 0x%X type VT_I8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I8(&result) == 5000, - "VARIDIV: CY value 0x%x%08x, expected 0x%x\n", - (DWORD)(V_I8(&result) >>32), (DWORD)V_I8(&result), 5000); - } - - hres = VarIdiv(&left, &cy, &result); - ok(hres == S_OK && V_VT(&result) == VT_I4, - "VARIDIV: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I4(&result) == 0, - "VARIDIV: CY value %d, expected %d\n", V_I4(&result), 0); - - hres = VarIdiv(&left, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_I4, - "VARIDIV: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I4(&result) == 50, - "VARIDIV: DECIMAL value %d, expected %d\n", V_I4(&result), 50); - - hres = VarIdiv(&dec, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_I4, - "VARIDIV: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I4(&result) == 1, - "VARIDIV: DECIMAL value %d, expected %d\n", V_I4(&result), 1); - - if (HAVE_OLEAUT32_I8) - { - hres = VarIdiv(&dec, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_I8, - "VARIDIV: expected coerced hres 0x%X type VT_I8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I8(&result) == 1, - "VARIDIV: DECIMAL value 0x%x%08x, expected %d\n", - (DWORD)(V_I8(&result) >> 32), (DWORD)V_I8(&result), 1); - } - - /* Check for division by zero */ - V_VT(&left) = VT_INT; - V_I4(&left) = 1; - V_VT(&right) = VT_INT; - V_I4(&right) = 0; - hres = pVarIdiv(&left, &right, &result); - ok(hres == DISP_E_DIVBYZERO && V_VT(&result) == VT_EMPTY, - "VARIDIV: Division by 0 should result in DISP_E_DIVBYZERO but got 0x%X\n", hres); - - V_VT(&left) = VT_INT; - V_I4(&left) = 0; - V_VT(&right) = VT_INT; - V_I4(&right) = 0; - hres = pVarIdiv(&left, &right, &result); - ok(hres == DISP_E_DIVBYZERO && V_VT(&result) == VT_EMPTY, - "VARIDIV: Division by 0 should result in DISP_E_DIVBYZERO but got 0x%X\n", hres); - - SysFreeString(num1_str); - SysFreeString(num2_str); -} - - -static HRESULT (WINAPI *pVarImp)(LPVARIANT,LPVARIANT,LPVARIANT); - -#define VARIMP(vt1,val1,vt2,val2,rvt,rval) \ - V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \ - V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \ - V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \ - test_var_call2( __LINE__, pVarImp, &left, &right, &exp ) - -/* Skip any type that is not defined or produces an error for every case */ -#define SKIPTESTIMP(a) \ - if (a == VT_ERROR || a == VT_VARIANT || \ - a == VT_DISPATCH || a == VT_UNKNOWN || \ - a == VT_RECORD || a > VT_UINT || \ - a == 15 /*not defined*/) \ - continue - -static void test_VarImp(void) -{ - static const WCHAR szFalse[] = { '#','F','A','L','S','E','#','\0' }; - static const WCHAR szTrue[] = { '#','T','R','U','E','#','\0' }; - VARIANT left, right, exp, result, cy, dec; - BSTR true_str, false_str; - VARTYPE i; - HRESULT hres; - - CHECKPTR(VarImp); - - true_str = SysAllocString(szTrue); - false_str = SysAllocString(szFalse); - - /* Test all possible flag/vt combinations & the resulting vt type */ - for (i = 0; i < sizeof(ExtraFlags)/sizeof(ExtraFlags[0]); i++) - { - VARTYPE leftvt, rightvt, resvt; - - for (leftvt = 0; leftvt <= VT_BSTR_BLOB; leftvt++) - { - SKIPTESTIMP(leftvt); - - /* Check if we need/have support for I8 and/or UI8 */ - if ((leftvt == VT_I8 || leftvt == VT_UI8) && !HAVE_OLEAUT32_I8) - continue; - - for (rightvt = 0; rightvt <= VT_BSTR_BLOB; rightvt++) - { - BOOL bFail = FALSE; - SKIPTESTIMP(rightvt); - - /* Native crashes when using the extra flag VT_BYREF - * or with the following VT combinations - */ - if ((leftvt == VT_UI4 && rightvt == VT_BSTR) || - (leftvt == VT_UI8 && rightvt == VT_BSTR) || - ExtraFlags[i] == VT_BYREF) - continue; - - /* Check if we need/have support for I8 and/or UI8 */ - if ((rightvt == VT_I8 || rightvt == VT_UI8) && !HAVE_OLEAUT32_I8) - continue; - - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = leftvt | ExtraFlags[i]; - V_VT(&right) = rightvt | ExtraFlags[i]; - V_VT(&result) = VT_EMPTY; - resvt = VT_EMPTY; - - if (leftvt == VT_BSTR) - V_BSTR(&left) = true_str; - - /* This allows us to test return types that are not NULL - * (NULL Imp value = n, NULL Imp 0 = NULL) - */ - switch(rightvt) - { - case VT_BSTR: - V_BSTR(&right) = true_str; - break; - case VT_DECIMAL: - VarDecFromR8(2.0, &V_DECIMAL(&right)); - V_VT(&right) = rightvt | ExtraFlags[i]; - break; - case VT_BOOL: - V_BOOL(&right) = VARIANT_TRUE; - break; - case VT_I1: V_I1(&right) = 2; break; - case VT_I2: V_I2(&right) = 2; break; - case VT_I4: V_I4(&right) = 2; break; - case VT_R4: V_R4(&right) = 2.0f; break; - case VT_R8: V_R8(&right) = 2.0; break; - case VT_CY: V_CY(&right).int64 = 10000; break; - case VT_DATE: V_DATE(&right) = 2; break; - case VT_I8: V_I8(&right) = 2; break; - case VT_INT: V_INT(&right) = 2; break; - case VT_UINT: V_UINT(&right) = 2; break; - case VT_UI1: V_UI1(&right) = 2; break; - case VT_UI2: V_UI2(&right) = 2; break; - case VT_UI4: V_UI4(&right) = 2; break; - case VT_UI8: V_UI8(&right) = 2; break; - default: break; - } - - /* 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[i] != 0) - bFail = TRUE; - - /* Determine result type */ - else if ((leftvt == VT_BSTR && rightvt == VT_NULL) || - (leftvt == VT_NULL && rightvt == VT_NULL) || - (leftvt == VT_NULL && rightvt == VT_EMPTY)) - resvt = VT_NULL; - 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; - - hres = pVarImp(&left, &right, &result); - - /* Check expected HRESULT and if result variant type is correct */ - if (bFail) - ok (hres == DISP_E_BADVARTYPE || hres == DISP_E_TYPEMISMATCH, - "VarImp: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], - vtstr(V_VT(&result)), hres); - else - ok (hres == S_OK && resvt == V_VT(&result), - "VarImp: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n", - vtstr(leftvt), ExtraFlags[i], vtstr(rightvt), ExtraFlags[i], vtstr(resvt), - S_OK, vtstr(V_VT(&result)), hres); - } - } - } - - VARIMP(EMPTY,0,EMPTY,0,I2,-1); - VARIMP(EMPTY,0,NULL,0,I2,-1); - VARIMP(EMPTY,0,I2,-1,I2,-1); - VARIMP(EMPTY,0,I4,-1,I4,-1); - VARIMP(EMPTY,0,R4,0.0f,I4,-1); - VARIMP(EMPTY,0,R8,-1.0,I4,-1); - VARIMP(EMPTY,0,DATE,0,I4,-1); - VARIMP(EMPTY,0,BSTR,true_str,I2,-1); - VARIMP(EMPTY,0,BOOL,VARIANT_FALSE,I2,-1); - VARIMP(EMPTY,0,I1,0,I4,-1); - VARIMP(EMPTY,0,UI1,1,I2,-1); - VARIMP(EMPTY,0,UI2,1,I4,-1); - VARIMP(EMPTY,0,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(EMPTY,0,I8,1,I8,-1); - VARIMP(EMPTY,0,UI8,1,I4,-1); - } - VARIMP(EMPTY,0,INT,-1,I4,-1); - VARIMP(EMPTY,0,UINT,1,I4,-1); - VARIMP(NULL,0,EMPTY,0,NULL,0); - VARIMP(NULL,0,NULL,0,NULL,0); - VARIMP(NULL,0,I2,-1,I2,-1); - VARIMP(NULL,0,I4,-1,I4,-1); - VARIMP(NULL,0,R4,0.0f,NULL,0); - VARIMP(NULL,0,R8,-1.0,I4,-1); - VARIMP(NULL,0,DATE,0,NULL,0); - VARIMP(NULL,0,BSTR,true_str,BOOL,-1); - VARIMP(NULL,0,BOOL,VARIANT_FALSE,NULL,0); - VARIMP(NULL,0,I1,0,NULL,0); - VARIMP(NULL,0,UI1,1,UI1,1); - VARIMP(NULL,0,UI2,1,I4,1); - VARIMP(NULL,0,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(NULL,0,I8,1,I8,1); - VARIMP(NULL,0,UI8,1,I4,1); - } - VARIMP(NULL,0,INT,-1,I4,-1); - VARIMP(NULL,0,UINT,1,I4,1); - VARIMP(I2,-1,EMPTY,0,I2,0); - VARIMP(I2,-1,I2,-1,I2,-1); - VARIMP(I2,-1,I4,-1,I4,-1); - VARIMP(I2,-1,R4,0.0f,I4,0); - VARIMP(I2,-1,R8,-1.0,I4,-1); - VARIMP(I2,-1,DATE,0,I4,0); - VARIMP(I2,-1,BSTR,true_str,I2,-1); - VARIMP(I2,-1,BOOL,VARIANT_FALSE,I2,0); - VARIMP(I2,-1,I1,0,I4,0); - VARIMP(I2,-1,UI1,1,I2,1); - VARIMP(I2,-1,UI2,1,I4,1); - VARIMP(I2,-1,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(I2,-1,I8,1,I8,1); - VARIMP(I2,-1,UI8,1,I4,1); - } - VARIMP(I2,-1,INT,-1,I4,-1); - VARIMP(I2,-1,UINT,1,I4,1); - VARIMP(I4,2,EMPTY,0,I4,-3); - VARIMP(I4,2,NULL,0,I4,-3); - VARIMP(I4,2,I2,-1,I4,-1); - VARIMP(I4,2,I4,-1,I4,-1); - VARIMP(I4,2,R4,0.0f,I4,-3); - VARIMP(I4,2,R8,-1.0,I4,-1); - VARIMP(I4,2,DATE,0,I4,-3); - VARIMP(I4,2,BSTR,true_str,I4,-1); - VARIMP(I4,2,BOOL,VARIANT_FALSE,I4,-3); - VARIMP(I4,2,I1,0,I4,-3); - VARIMP(I4,2,UI1,1,I4,-3); - VARIMP(I4,2,UI2,1,I4,-3); - VARIMP(I4,2,UI4,1,I4,-3); - if (HAVE_OLEAUT32_I8) - { - VARIMP(I4,2,I8,1,I8,-3); - VARIMP(I4,2,UI8,1,I4,-3); - } - VARIMP(I4,2,INT,-1,I4,-1); - VARIMP(I4,2,UINT,1,I4,-3); - VARIMP(R4,-1.0f,EMPTY,0,I4,0); - VARIMP(R4,-1.0f,NULL,0,NULL,0); - VARIMP(R4,-1.0f,I2,-1,I4,-1); - VARIMP(R4,-1.0f,I4,-1,I4,-1); - VARIMP(R4,-1.0f,R4,0.0f,I4,0); - VARIMP(R4,-1.0f,R8,-1.0,I4,-1); - VARIMP(R4,-1.0f,DATE,1,I4,1); - VARIMP(R4,-1.0f,BSTR,true_str,I4,-1); - VARIMP(R4,-1.0f,BOOL,VARIANT_FALSE,I4,0); - VARIMP(R4,-1.0f,I1,0,I4,0); - VARIMP(R4,-1.0f,UI1,1,I4,1); - VARIMP(R4,-1.0f,UI2,1,I4,1); - VARIMP(R4,-1.0f,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(R4,-1.0f,I8,1,I8,1); - VARIMP(R4,-1.0f,UI8,1,I4,1); - } - VARIMP(R4,-1.0f,INT,-1,I4,-1); - VARIMP(R4,-1.0f,UINT,1,I4,1); - VARIMP(R8,1.0,EMPTY,0,I4,-2); - VARIMP(R8,1.0,NULL,0,I4,-2); - VARIMP(R8,1.0,I2,-1,I4,-1); - VARIMP(R8,1.0,I4,-1,I4,-1); - VARIMP(R8,1.0,R4,0.0f,I4,-2); - VARIMP(R8,1.0,R8,-1.0,I4,-1); - VARIMP(R8,1.0,DATE,0,I4,-2); - VARIMP(R8,1.0,BSTR,true_str,I4,-1); - VARIMP(R8,1.0,BOOL,VARIANT_FALSE,I4,-2); - VARIMP(R8,1.0,I1,0,I4,-2); - VARIMP(R8,1.0,UI1,1,I4,-1); - VARIMP(R8,1.0,UI2,1,I4,-1); - VARIMP(R8,1.0,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(R8,1.0,I8,1,I8,-1); - VARIMP(R8,1.0,UI8,1,I4,-1); - } - VARIMP(R8,1.0,INT,-1,I4,-1); - VARIMP(R8,1.0,UINT,1,I4,-1); - VARIMP(DATE,0,EMPTY,0,I4,-1); - VARIMP(DATE,0,NULL,0,I4,-1); - VARIMP(DATE,0,I2,-1,I4,-1); - VARIMP(DATE,0,I4,-1,I4,-1); - VARIMP(DATE,0,R4,0.0f,I4,-1); - VARIMP(DATE,0,R8,-1.0,I4,-1); - VARIMP(DATE,0,DATE,0,I4,-1); - VARIMP(DATE,0,BSTR,true_str,I4,-1); - VARIMP(DATE,0,BOOL,VARIANT_FALSE,I4,-1); - VARIMP(DATE,0,I1,0,I4,-1); - VARIMP(DATE,0,UI1,1,I4,-1); - VARIMP(DATE,0,UI2,1,I4,-1); - VARIMP(DATE,0,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(DATE,0,I8,1,I8,-1); - VARIMP(DATE,0,UI8,1,I4,-1); - } - VARIMP(DATE,0,INT,-1,I4,-1); - VARIMP(DATE,0,UINT,1,I4,-1); - VARIMP(BSTR,false_str,EMPTY,0,I2,-1); - VARIMP(BSTR,false_str,NULL,0,BOOL,-1); - VARIMP(BSTR,false_str,I2,-1,I2,-1); - VARIMP(BSTR,false_str,I4,-1,I4,-1); - VARIMP(BSTR,false_str,R4,0.0f,I4,-1); - VARIMP(BSTR,false_str,R8,-1.0,I4,-1); - VARIMP(BSTR,false_str,DATE,0,I4,-1); - VARIMP(BSTR,false_str,BSTR,true_str,BOOL,-1); - VARIMP(BSTR,false_str,BOOL,VARIANT_FALSE,BOOL,-1); - VARIMP(BSTR,false_str,I1,0,I4,-1); - VARIMP(BSTR,false_str,UI1,1,I2,-1); - VARIMP(BSTR,false_str,UI2,1,I4,-1); - VARIMP(BSTR,false_str,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(BSTR,false_str,I8,1,I8,-1); - VARIMP(BSTR,false_str,UI8,1,I4,-1); - } - VARIMP(BSTR,false_str,INT,-1,I4,-1); - VARIMP(BSTR,false_str,UINT,1,I4,-1); - VARIMP(BOOL,VARIANT_TRUE,EMPTY,0,I2,0); - VARIMP(BOOL,VARIANT_TRUE,NULL,0,NULL,0); - VARIMP(BOOL,VARIANT_TRUE,I2,-1,I2,-1); - VARIMP(BOOL,VARIANT_TRUE,I4,-1,I4,-1); - VARIMP(BOOL,VARIANT_TRUE,R4,0.0f,I4,0); - VARIMP(BOOL,VARIANT_TRUE,R8,-1.0,I4,-1); - VARIMP(BOOL,VARIANT_TRUE,DATE,0,I4,0); - VARIMP(BOOL,VARIANT_TRUE,BSTR,true_str,BOOL,-1); - VARIMP(BOOL,VARIANT_TRUE,BOOL,VARIANT_FALSE,BOOL,0); - VARIMP(BOOL,VARIANT_TRUE,I1,0,I4,0); - VARIMP(BOOL,VARIANT_TRUE,UI1,1,I2,1); - VARIMP(BOOL,VARIANT_TRUE,UI2,1,I4,1); - VARIMP(BOOL,VARIANT_TRUE,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(BOOL,VARIANT_TRUE,I8,1,I8,1); - VARIMP(BOOL,VARIANT_TRUE,UI8,1,I4,1); - } - VARIMP(BOOL,VARIANT_TRUE,INT,-1,I4,-1); - VARIMP(BOOL,VARIANT_TRUE,UINT,1,I4,1); - VARIMP(I1,-1,EMPTY,0,I4,0); - VARIMP(I1,-1,NULL,0,NULL,0); - VARIMP(I1,-1,I2,-1,I4,-1); - VARIMP(I1,-1,I4,-1,I4,-1); - VARIMP(I1,-1,R4,0.0f,I4,0); - VARIMP(I1,-1,R8,-1.0,I4,-1); - VARIMP(I1,-1,DATE,0,I4,0); - VARIMP(I1,-1,BSTR,true_str,I4,-1); - VARIMP(I1,-1,BOOL,VARIANT_FALSE,I4,0); - VARIMP(I1,-1,I1,0,I4,0); - VARIMP(I1,-1,UI1,1,I4,1); - VARIMP(I1,-1,UI2,1,I4,1); - VARIMP(I1,-1,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(I1,-1,I8,1,I8,1); - VARIMP(I1,-1,UI8,1,I4,1); - } - VARIMP(I1,-1,INT,-1,I4,-1); - VARIMP(I1,-1,UINT,1,I4,1); - VARIMP(UI1,0,EMPTY,0,I2,-1); - VARIMP(UI1,0,NULL,0,UI1,255); - VARIMP(UI1,0,I2,-1,I2,-1); - VARIMP(UI1,0,I4,-1,I4,-1); - VARIMP(UI1,0,R4,0.0f,I4,-1); - VARIMP(UI1,0,R8,-1.0,I4,-1); - VARIMP(UI1,0,DATE,0,I4,-1); - VARIMP(UI1,0,BSTR,true_str,I2,-1); - VARIMP(UI1,0,BOOL,VARIANT_FALSE,I2,-1); - VARIMP(UI1,0,I1,0,I4,-1); - VARIMP(UI1,0,UI1,1,UI1,255); - VARIMP(UI1,0,UI2,1,I4,-1); - VARIMP(UI1,0,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(UI1,0,I8,1,I8,-1); - VARIMP(UI1,0,UI8,1,I4,-1); - } - VARIMP(UI1,0,INT,-1,I4,-1); - VARIMP(UI1,0,UINT,1,I4,-1); - VARIMP(UI2,0,EMPTY,0,I4,-1); - VARIMP(UI2,0,NULL,0,I4,-1); - VARIMP(UI2,0,I2,-1,I4,-1); - VARIMP(UI2,0,I4,-1,I4,-1); - VARIMP(UI2,0,R4,0.0f,I4,-1); - VARIMP(UI2,0,R8,-1.0,I4,-1); - VARIMP(UI2,0,DATE,0,I4,-1); - VARIMP(UI2,0,BSTR,true_str,I4,-1); - VARIMP(UI2,0,BOOL,VARIANT_FALSE,I4,-1); - VARIMP(UI2,0,I1,0,I4,-1); - VARIMP(UI2,0,UI1,1,I4,-1); - VARIMP(UI2,0,UI2,1,I4,-1); - VARIMP(UI2,0,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(UI2,0,I8,1,I8,-1); - VARIMP(UI2,0,UI8,1,I4,-1); - } - VARIMP(UI2,0,INT,-1,I4,-1); - VARIMP(UI2,0,UINT,1,I4,-1); - VARIMP(UI4,0,EMPTY,0,I4,-1); - VARIMP(UI4,0,NULL,0,I4,-1); - VARIMP(UI4,0,I2,-1,I4,-1); - VARIMP(UI4,0,I4,-1,I4,-1); - VARIMP(UI4,0,R4,0.0f,I4,-1); - VARIMP(UI4,0,R8,-1.0,I4,-1); - VARIMP(UI4,0,DATE,0,I4,-1); - VARIMP(UI4,0,BSTR,true_str,I4,-1); - VARIMP(UI4,0,BOOL,VARIANT_FALSE,I4,-1); - VARIMP(UI4,0,I1,0,I4,-1); - VARIMP(UI4,0,UI1,1,I4,-1); - VARIMP(UI4,0,UI2,1,I4,-1); - VARIMP(UI4,0,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(UI4,0,I8,1,I8,-1); - VARIMP(UI4,0,UI8,1,I4,-1); - } - VARIMP(UI4,0,INT,-1,I4,-1); - VARIMP(UI4,0,UINT,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(I8,-1,EMPTY,0,I8,0); - VARIMP(I8,-1,NULL,0,NULL,0); - VARIMP(I8,-1,I2,-1,I8,-1); - VARIMP(I8,-1,I4,-1,I8,-1); - VARIMP(I8,-1,R4,0.0f,I8,0); - VARIMP(I8,-1,R8,-1.0,I8,-1); - VARIMP(I8,-1,DATE,0,I8,0); - VARIMP(I8,-1,BSTR,true_str,I8,-1); - VARIMP(I8,-1,BOOL,VARIANT_FALSE,I8,0); - VARIMP(I8,-1,I1,0,I8,0); - VARIMP(I8,-1,UI1,1,I8,1); - VARIMP(I8,-1,UI2,1,I8,1); - VARIMP(I8,-1,UI4,1,I8,1); - VARIMP(I8,-1,I8,1,I8,1); - VARIMP(I8,-1,UI8,1,I8,1); - VARIMP(I8,-1,UINT,1,I8,1); - VARIMP(UI8,0,EMPTY,0,I4,-1); - VARIMP(UI8,0,NULL,0,I4,-1); - VARIMP(UI8,0,I2,-1,I4,-1); - VARIMP(UI8,0,I4,-1,I4,-1); - VARIMP(UI8,0,R4,0.0f,I4,-1); - VARIMP(UI8,0,R8,-1.0,I4,-1); - VARIMP(UI8,0,DATE,0,I4,-1); - VARIMP(UI8,0,BSTR,true_str,I4,-1); - VARIMP(UI8,0,BOOL,VARIANT_FALSE,I4,-1); - VARIMP(UI8,0,I1,0,I4,-1); - VARIMP(UI8,0,UI1,1,I4,-1); - VARIMP(UI8,0,UI2,1,I4,-1); - VARIMP(UI8,0,UI4,1,I4,-1); - VARIMP(UI8,0,I8,1,I8,-1); - VARIMP(UI8,0,UI8,1,I4,-1); - VARIMP(UI8,0,INT,-1,I4,-1); - VARIMP(UI8,0,UINT,1,I4,-1); - } - VARIMP(INT,-1,EMPTY,0,I4,0); - VARIMP(INT,-1,NULL,0,NULL,0); - VARIMP(INT,-1,I2,-1,I4,-1); - VARIMP(INT,-1,I4,-1,I4,-1); - VARIMP(INT,-1,R4,0.0f,I4,0); - VARIMP(INT,-1,R8,-1.0,I4,-1); - VARIMP(INT,-1,DATE,0,I4,0); - VARIMP(INT,-1,BSTR,true_str,I4,-1); - VARIMP(INT,-1,BOOL,VARIANT_FALSE,I4,0); - VARIMP(INT,-1,I1,0,I4,0); - VARIMP(INT,-1,UI1,1,I4,1); - VARIMP(INT,-1,UI2,1,I4,1); - VARIMP(INT,-1,UI4,1,I4,1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(INT,-1,I8,1,I8,1); - VARIMP(INT,-1,UI8,1,I4,1); - } - VARIMP(INT,-1,INT,-1,I4,-1); - VARIMP(INT,-1,UINT,1,I4,1); - VARIMP(UINT,1,EMPTY,0,I4,-2); - VARIMP(UINT,1,NULL,0,I4,-2); - VARIMP(UINT,1,I2,-1,I4,-1); - VARIMP(UINT,1,I4,-1,I4,-1); - VARIMP(UINT,1,R4,0.0f,I4,-2); - VARIMP(UINT,1,R8,-1.0,I4,-1); - VARIMP(UINT,1,DATE,0,I4,-2); - VARIMP(UINT,1,BSTR,true_str,I4,-1); - VARIMP(UINT,1,BOOL,VARIANT_FALSE,I4,-2); - VARIMP(UINT,1,I1,0,I4,-2); - VARIMP(UINT,1,UI1,1,I4,-1); - VARIMP(UINT,1,UI2,1,I4,-1); - VARIMP(UINT,1,UI4,1,I4,-1); - if (HAVE_OLEAUT32_I8) - { - VARIMP(UINT,1,I8,1,I8,-1); - VARIMP(UINT,1,UI8,1,I4,-1); - } - VARIMP(UINT,1,INT,-1,I4,-1); - VARIMP(UINT,1,UINT,1,I4,-1); - - /* Manually test some VT_CY, VT_DECIMAL variants */ - V_VT(&cy) = VT_CY; - hres = VarCyFromI4(1, &V_CY(&cy)); - ok(hres == S_OK, "VarCyFromI4 failed!\n"); - V_VT(&dec) = VT_DECIMAL; - hres = VarDecFromR8(2.0, &V_DECIMAL(&dec)); - ok(hres == S_OK, "VarDecFromR4 failed!\n"); - memset(&left, 0, sizeof(left)); - memset(&right, 0, sizeof(right)); - V_VT(&left) = VT_I4; - V_I4(&left) = 0; - V_VT(&right) = VT_I8; - V_UI1(&right) = 0; - - hres = pVarImp(&cy, &cy, &result); - ok(hres == S_OK && V_VT(&result) == VT_I4, - "VARIMP: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I4(&result) == -1, - "VARIMP: CY value %d, expected %d\n", V_I4(&result), -1); - - if (HAVE_OLEAUT32_I8) - { - hres = pVarImp(&cy, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_I8, - "VARIMP: expected coerced hres 0x%X type VT_I8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I8(&result) == -2, - "VARIMP: CY value %x%08x, expected %d\n", - (DWORD)((V_I8(&result)) >> 32), (DWORD)(V_I8(&result)), -2); - } - - hres = pVarImp(&left, &cy, &result); - ok(hres == S_OK && V_VT(&result) == VT_I4, - "VARIMP: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I4(&result) == -1, - "VARIMP: CY value %d, expected %d\n", V_I4(&result), -1); - - hres = pVarImp(&left, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_I4, - "VARIMP: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I4(&result) == -1, - "VARIMP: DECIMAL value %d, expected %d\n", V_I4(&result), -1); - - hres = pVarImp(&dec, &dec, &result); - ok(hres == S_OK && V_VT(&result) == VT_I4, - "VARIMP: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I4(&result) == -1, - "VARIMP: DECIMAL value %d, expected %d\n", V_I4(&result), -1); - - if (HAVE_OLEAUT32_I8) - { - hres = pVarImp(&dec, &right, &result); - ok(hres == S_OK && V_VT(&result) == VT_I8, - "VARIMP: expected coerced hres 0x%X type VT_I8, got hres 0x%X type %s!\n", - S_OK, hres, vtstr(V_VT(&result))); - ok(hres == S_OK && V_I8(&result) == -3, - "VARIMP: DECIMAL value 0x%x%08x, expected %d\n", - (DWORD)(V_I8(&result) >>32), (DWORD)V_I8(&result), -3); - } - - SysFreeString(false_str); - SysFreeString(true_str); -} - -START_TEST(vartest) -{ - init(); - - test_VariantInit(); - test_VariantClear(); - test_VariantCopy(); - test_VariantCopyInd(); - test_VarParseNumFromStr(); - test_VarNumFromParseNum(); - test_VarUdateFromDate(); - test_VarDateFromUdate(); - test_SystemTimeToVariantTime(); - test_VariantTimeToSystemTime(); - test_DosDateTimeToVariantTime(); - test_VariantTimeToDosDateTime(); - test_VarAbs(); - test_VarNot(); - test_VarSub(); - test_VarMod(); - test_VarFix(); - test_VarInt(); - test_VarNeg(); - test_VarRound(); - test_VarXor(); - test_VarOr(); - test_VarPow(); - test_VarEqv(); - test_VarMul(); - test_VarAdd(); - test_VarCat(); - test_VarCmp(); - test_VarAnd(); - test_VarDiv(); - test_VarIdiv(); - test_VarImp(); -} diff --git a/rostests/winetests/oleaut32/vartype.c b/rostests/winetests/oleaut32/vartype.c deleted file mode 100644 index 2292036027f..00000000000 --- a/rostests/winetests/oleaut32/vartype.c +++ /dev/null @@ -1,6074 +0,0 @@ -/* - * Low level variant tests - * - * 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 "wine/test.h" -#include "oleauto.h" -#include - -/* Some Visual C++ versions choke on __uint64 to float conversions. - * To fix this you need either VC++ 6.0 plus the processor pack - * or Visual C++ >=7.0. - */ -#ifndef _MSC_VER -# define HAS_UINT64_TO_FLOAT -#else -# if _MSC_VER >= 1300 -# define HAS_UINT64_TO_FLOAT -# else -# include -# if defined(_mm_free) -/* _mm_free is defined if the Processor Pack has been installed */ -# define HAS_UINT64_TO_FLOAT -# endif - -# endif -#endif - -static HMODULE hOleaut32; - -/* Get a conversion function ptr, return if function not available */ -#define CHECKPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func); \ - if (!p##func) { \ - skip("function " # func " not available, not testing it\n"); return; } - -/* Is a given function exported from oleaut32? */ -#define HAVE_FUNC(func) ((void*)GetProcAddress(hOleaut32, #func) != NULL) - -/* Have IRecordInfo data type? */ -#define HAVE_OLEAUT32_RECORD HAVE_FUNC(SafeArraySetRecordInfo) -/* Have DECIMAL data type with new error checking? */ -#define HAVE_OLEAUT32_DECIMAL HAVE_FUNC(VarDecAdd) -/* Have CY data type? */ -#define HAVE_OLEAUT32_CY HAVE_FUNC(VarCyAdd) -/* Have I8/UI8 data type? */ -#define HAVE_OLEAUT32_I8 HAVE_FUNC(VarI8FromI1) -/* Have proper locale conversions? */ -#define HAVE_OLEAUT32_LOCALES (HAVE_FUNC(GetVarConversionLocaleSetting) && HAVE_OLEAUT32_I8) -/* Is this an ancient version with support for only I2/I4/R4/R8/DATE? */ -#define IS_ANCIENT (!HAVE_FUNC(VarI1FromI2)) -/* Is vt a type unavailable to ancient versions? */ -#define IS_MODERN_VTYPE(vt) (vt==VT_VARIANT||vt==VT_DECIMAL|| \ - vt==VT_I1||vt==VT_UI2||vt==VT_UI4||vt == VT_INT||vt == VT_UINT) - -/* Macros for converting and testing results */ -#define CONVVARS(typ) HRESULT hres; CONV_TYPE out; typ in - -#define _EXPECTRES(res, x, fs) \ - ok((hres == S_OK && out == (CONV_TYPE)(x)) || ((HRESULT)res != S_OK && hres == (HRESULT)res), \ - "expected " #x ", got " fs "; hres=0x%08x\n", out, hres) -#define EXPECT(x) EXPECTRES(S_OK, (x)) -#define EXPECT_OVERFLOW EXPECTRES(DISP_E_OVERFLOW, DISP_E_OVERFLOW) -#define EXPECT_MISMATCH EXPECTRES(DISP_E_TYPEMISMATCH,DISP_E_TYPEMISMATCH) -#define EXPECT_BADVAR EXPECTRES(DISP_E_BADVARTYPE, DISP_E_BADVARTYPE) -#define EXPECT_INVALID EXPECTRES(E_INVALIDARG, E_INVALIDARG) -#define EXPECT_LT EXPECTRES(VARCMP_LT, VARCMP_LT) -#define EXPECT_GT EXPECTRES(VARCMP_GT, VARCMP_GT) -#define EXPECT_EQ EXPECTRES(VARCMP_EQ, VARCMP_EQ) -#define EXPECT_DBL(x) \ - ok(hres == S_OK && fabs(out-(x))<=1e-14*(x), "expected %16.16g, got %16.16g; hres=0x%08x\n", (x), out, hres) - -#define CONVERT(func, val) in = val; hres = p##func(in, &out) -#define CONVERTRANGE(func,start,end) for (i = start; i < end; i+=1) { CONVERT(func, i); EXPECT(i); }; -#define OVERFLOWRANGE(func,start,end) for (i = start; i < end; i+=1) { CONVERT(func, i); EXPECT_OVERFLOW; }; - -#define CY_MULTIPLIER 10000 - -#define DATE_MIN -657434 -#define DATE_MAX 2958465 - -#define CONVERT_I8(func,hi,lo) in = hi; in = (in << 32) | lo; hres = p##func(in, &out) - -#define CONVERT_CY(func,val) in.int64 = (LONGLONG)(val * CY_MULTIPLIER); hres = p##func(in, &out) - -#define CONVERT_CY64(func,hi,lo) S(in).Hi = hi; S(in).Lo = lo; in.int64 *= CY_MULTIPLIER; hres = p##func(in, &out) - -#define SETDEC(dec, scl, sgn, hi, lo) S(U(dec)).scale = (BYTE)scl; S(U(dec)).sign = (BYTE)sgn; \ - dec.Hi32 = (ULONG)hi; U1(dec).Lo64 = (ULONG64)lo - -#define SETDEC64(dec, scl, sgn, hi, mid, lo) S(U(dec)).scale = (BYTE)scl; S(U(dec)).sign = (BYTE)sgn; \ - dec.Hi32 = (ULONG)hi; S1(U1(dec)).Mid32 = mid; S1(U1(dec)).Lo32 = lo; - -#define CONVERT_DEC(func,scl,sgn,hi,lo) SETDEC(in,scl,sgn,hi,lo); hres = p##func(&in, &out) - -#define CONVERT_DEC64(func,scl,sgn,hi,mid,lo) SETDEC64(in,scl,sgn,hi,mid,lo); hres = p##func(&in, &out) - -#define CONVERT_BADDEC(func) \ - if (HAVE_OLEAUT32_DECIMAL) \ - { \ - CONVERT_DEC(func,29,0,0,0); EXPECT_INVALID; \ - CONVERT_DEC(func,0,0x1,0,0); EXPECT_INVALID; \ - CONVERT_DEC(func,0,0x40,0,0); EXPECT_INVALID; \ - CONVERT_DEC(func,0,0x7f,0,0); EXPECT_INVALID; \ - } - -#define CONVERT_STR(func,str,flags) \ - SetLastError(0); \ - if (str) MultiByteToWideChar(CP_ACP,0,str,-1,buff,sizeof(buff)/sizeof(WCHAR)); \ - hres = p##func(str ? buff : NULL,in,flags,&out) - -#define COPYTEST(val, vt, srcval, dstval, srcref, dstref, fs) do { \ - HRESULT hres; VARIANTARG vSrc, vDst; CONV_TYPE in = val; \ - VariantInit(&vSrc); VariantInit(&vDst); \ - V_VT(&vSrc) = vt; srcval = in; \ - hres = VariantCopy(&vDst, &vSrc); \ - ok(hres == S_OK && V_VT(&vDst) == vt && dstval == in, \ - "copy hres 0x%X, type %d, value (" fs ") " fs "\n", hres, V_VT(&vDst), val, dstval); \ - V_VT(&vSrc) = vt|VT_BYREF; srcref = ∈ \ - hres = VariantCopy(&vDst, &vSrc); \ - ok(hres == S_OK && V_VT(&vDst) == (vt|VT_BYREF) && dstref == &in, \ - "ref hres 0x%X, type %d, ref (%p) %p\n", hres, V_VT(&vDst), &in, dstref); \ - hres = VariantCopyInd(&vDst, &vSrc); \ - ok(hres == S_OK && V_VT(&vDst) == vt && dstval == in, \ - "ind hres 0x%X, type %d, value (" fs ") " fs "\n", hres, V_VT(&vDst), val, dstval); \ - } while(0) - -#define CHANGETYPEEX(typ) hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, typ) - -#define TYPETEST(typ,res,fs) CHANGETYPEEX(typ); \ - ok(hres == S_OK && V_VT(&vDst) == typ && (CONV_TYPE)res == in, \ - "hres=0x%X, type=%d (should be %d(" #typ ")), value=" fs " (should be " fs ")\n", \ - hres, V_VT(&vDst), typ, (CONV_TYPE)res, in); -#define TYPETESTI8(typ,res) CHANGETYPEEX(typ); \ - ok(hres == S_OK && V_VT(&vDst) == typ && (CONV_TYPE)res == in, \ - "hres=0x%X, type=%d (should be %d(" #typ ")), value=%d (should be 1)\n", \ - hres, V_VT(&vDst), typ, (int)res); -#define BADVAR(typ) CHANGETYPEEX(typ); out = (CONV_TYPE)hres; EXPECT_BADVAR -#define MISMATCH(typ) CHANGETYPEEX(typ); out = (CONV_TYPE)hres; EXPECT_MISMATCH - -#define INITIAL_TYPETEST(vt, val, fs) \ - VariantInit(&vSrc); \ - VariantInit(&vDst); \ - V_VT(&vSrc) = vt; \ - (val(&vSrc)) = in; \ - if (!IS_ANCIENT) { \ - TYPETEST(VT_I1, V_I1(&vDst), fs); \ - TYPETEST(VT_UI2, V_UI2(&vDst), fs); \ - TYPETEST(VT_UI4, V_UI4(&vDst), fs); \ - TYPETEST(VT_INT, V_INT(&vDst), fs); \ - TYPETEST(VT_UINT, V_UINT(&vDst), fs); \ - } else { \ - BADVAR(VT_I1); BADVAR(VT_UI2); BADVAR(VT_UI4); \ - BADVAR(VT_INT); BADVAR(VT_UINT); \ - } \ - TYPETEST(VT_UI1, V_UI1(&vDst), fs); \ - TYPETEST(VT_I2, V_I2(&vDst), fs); \ - TYPETEST(VT_I4, V_I4(&vDst), fs); \ - TYPETEST(VT_R4, V_R4(&vDst), fs); \ - TYPETEST(VT_R8, V_R8(&vDst), fs); \ - TYPETEST(VT_DATE, V_DATE(&vDst), fs); \ - if (HAVE_OLEAUT32_I8) \ - { \ - TYPETEST(VT_I8, V_I8(&vDst), fs); \ - TYPETEST(VT_UI8, V_UI8(&vDst), fs); \ - } -#define NEGATIVE_TYPETEST(vt, val, fs, vtneg, valneg) \ - in = -in; \ - VariantInit(&vSrc); \ - VariantInit(&vDst); \ - V_VT(&vSrc) = vt; \ - (val(&vSrc)) = in; \ - if (!IS_ANCIENT) { \ - TYPETEST(vtneg, valneg(&vDst), fs); \ - } - -#define INITIAL_TYPETESTI8(vt, val) \ - VariantInit(&vSrc); \ - VariantInit(&vDst); \ - V_VT(&vSrc) = vt; \ - (val(&vSrc)) = in; \ - TYPETESTI8(VT_I1, V_I1(&vDst)); \ - TYPETESTI8(VT_UI1, V_UI1(&vDst)); \ - TYPETESTI8(VT_I2, V_I2(&vDst)); \ - TYPETESTI8(VT_UI2, V_UI2(&vDst)); \ - TYPETESTI8(VT_I4, V_I4(&vDst)); \ - TYPETESTI8(VT_UI4, V_UI4(&vDst)); \ - TYPETESTI8(VT_INT, V_INT(&vDst)); \ - TYPETESTI8(VT_UINT, V_UINT(&vDst)); \ - TYPETESTI8(VT_R4, V_R4(&vDst)); \ - TYPETESTI8(VT_R8, V_R8(&vDst)); \ - TYPETESTI8(VT_DATE, V_DATE(&vDst)); \ - TYPETESTI8(VT_I8, V_I8(&vDst)); \ - TYPETESTI8(VT_UI8, V_UI8(&vDst)) - -#define COMMON_TYPETEST \ - hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, VT_BOOL); \ - ok(hres == S_OK && V_VT(&vDst) == VT_BOOL && \ - (V_BOOL(&vDst) == VARIANT_TRUE || (V_VT(&vSrc) == VT_BOOL && V_BOOL(&vDst) == 1)), \ - "->VT_BOOL hres=0x%X, type=%d (should be VT_BOOL), value %d (should be VARIANT_TRUE)\n", \ - hres, V_VT(&vDst), V_BOOL(&vDst)); \ - if (HAVE_OLEAUT32_CY) \ - { \ - hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, VT_CY); \ - ok(hres == S_OK && V_VT(&vDst) == VT_CY && V_CY(&vDst).int64 == CY_MULTIPLIER, \ - "->VT_CY hres=0x%X, type=%d (should be VT_CY), value (%08x,%08x) (should be CY_MULTIPLIER)\n", \ - hres, V_VT(&vDst), S(V_CY(&vDst)).Hi, S(V_CY(&vDst)).Lo); \ - } \ - if (V_VT(&vSrc) != VT_DATE) \ - { \ - hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, VT_BSTR); \ - ok(hres == S_OK && V_VT(&vDst) == VT_BSTR && \ - V_BSTR(&vDst) && V_BSTR(&vDst)[0] == '1' && V_BSTR(&vDst)[1] == '\0', \ - "->VT_BSTR hres=0x%X, type=%d (should be VT_BSTR), *bstr='%c'\n", \ - hres, V_VT(&vDst), V_BSTR(&vDst) ? *V_BSTR(&vDst) : '?'); \ - } \ - if (HAVE_OLEAUT32_DECIMAL) \ - { \ - hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, VT_DECIMAL); \ - ok(hres == S_OK && V_VT(&vDst) == VT_DECIMAL && \ - S(U(V_DECIMAL(&vDst))).sign == 0 && S(U(V_DECIMAL(&vDst))).scale == 0 && \ - V_DECIMAL(&vDst).Hi32 == 0 && U1(V_DECIMAL(&vDst)).Lo64 == (ULONGLONG)in, \ - "->VT_DECIMAL hres=0x%X, type=%d (should be VT_DECIMAL), sign=%d, scale=%d, hi=%u, lo=(%8x %8x),\n", \ - hres, V_VT(&vDst), S(U(V_DECIMAL(&vDst))).sign, S(U(V_DECIMAL(&vDst))).scale, \ - V_DECIMAL(&vDst).Hi32, S1(U1(V_DECIMAL(&vDst))).Mid32, S1(U1(V_DECIMAL(&vDst))).Lo32); \ - } \ - hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, VT_EMPTY); \ - ok(hres == S_OK && V_VT(&vDst) == VT_EMPTY, "->VT_EMPTY hres=0x%X, type=%d (should be VT_EMPTY)\n", hres, V_VT(&vDst)); \ - hres = VariantChangeTypeEx(&vDst, &vSrc, 0, 0, VT_NULL); \ - ok(hres == S_OK && V_VT(&vDst) == VT_NULL, "->VT_NULL hres=0x%X, type=%d (should be VT_NULL)\n", hres, V_VT(&vDst)); \ - MISMATCH(VT_DISPATCH); \ - MISMATCH(VT_ERROR); \ - MISMATCH(VT_UNKNOWN); \ - if (!IS_ANCIENT) { MISMATCH(VT_VARIANT); } else { BADVAR(VT_VARIANT); } \ - if (HAVE_OLEAUT32_RECORD) \ - { \ - MISMATCH(VT_RECORD); \ - } \ - BADVAR(VT_VOID); \ - BADVAR(VT_HRESULT); \ - BADVAR(VT_SAFEARRAY); \ - BADVAR(VT_CARRAY); \ - BADVAR(VT_USERDEFINED); \ - BADVAR(VT_LPSTR); \ - BADVAR(VT_LPWSTR); \ - BADVAR(VT_PTR); \ - BADVAR(VT_INT_PTR); \ - BADVAR(VT_UINT_PTR); \ - BADVAR(VT_FILETIME); \ - BADVAR(VT_BLOB); \ - BADVAR(VT_STREAM); \ - BADVAR(VT_STORAGE); \ - BADVAR(VT_STREAMED_OBJECT); \ - BADVAR(VT_STORED_OBJECT); \ - BADVAR(VT_BLOB_OBJECT); \ - BADVAR(VT_CF); \ - BADVAR(VT_CLSID); \ - BADVAR(VT_BSTR_BLOB) - -/* Early versions of oleaut32 are missing many functions */ -static HRESULT (WINAPI *pVarI1FromUI1)(BYTE,signed char*); -static HRESULT (WINAPI *pVarI1FromI2)(SHORT,signed char*); -static HRESULT (WINAPI *pVarI1FromI4)(LONG,signed char*); -static HRESULT (WINAPI *pVarI1FromR4)(FLOAT,signed char*); -static HRESULT (WINAPI *pVarI1FromR8)(double,signed char*); -static HRESULT (WINAPI *pVarI1FromDate)(DATE,signed char*); -static HRESULT (WINAPI *pVarI1FromCy)(CY,signed char*); -static HRESULT (WINAPI *pVarI1FromStr)(OLECHAR*,LCID,ULONG,signed char*); -static HRESULT (WINAPI *pVarI1FromBool)(VARIANT_BOOL,signed char*); -static HRESULT (WINAPI *pVarI1FromUI2)(USHORT,signed char*); -static HRESULT (WINAPI *pVarI1FromUI4)(ULONG,signed char*); -static HRESULT (WINAPI *pVarI1FromDec)(DECIMAL*,signed char*); -static HRESULT (WINAPI *pVarI1FromI8)(LONG64,signed char*); -static HRESULT (WINAPI *pVarI1FromUI8)(ULONG64,signed char*); -static HRESULT (WINAPI *pVarUI1FromI2)(SHORT,BYTE*); -static HRESULT (WINAPI *pVarUI1FromI4)(LONG,BYTE*); -static HRESULT (WINAPI *pVarUI1FromR4)(FLOAT,BYTE*); -static HRESULT (WINAPI *pVarUI1FromR8)(double,BYTE*); -static HRESULT (WINAPI *pVarUI1FromCy)(CY,BYTE*); -static HRESULT (WINAPI *pVarUI1FromDate)(DATE,BYTE*); -static HRESULT (WINAPI *pVarUI1FromStr)(OLECHAR*,LCID,ULONG,BYTE*); -static HRESULT (WINAPI *pVarUI1FromBool)(VARIANT_BOOL,BYTE*); -static HRESULT (WINAPI *pVarUI1FromI1)(signed char,BYTE*); -static HRESULT (WINAPI *pVarUI1FromUI2)(USHORT,BYTE*); -static HRESULT (WINAPI *pVarUI1FromUI4)(ULONG,BYTE*); -static HRESULT (WINAPI *pVarUI1FromDec)(DECIMAL*,BYTE*); -static HRESULT (WINAPI *pVarUI1FromI8)(LONG64,BYTE*); -static HRESULT (WINAPI *pVarUI1FromUI8)(ULONG64,BYTE*); -static HRESULT (WINAPI *pVarUI1FromDisp)(IDispatch*,LCID,BYTE*); - -static HRESULT (WINAPI *pVarI2FromUI1)(BYTE,SHORT*); -static HRESULT (WINAPI *pVarI2FromI4)(LONG,SHORT*); -static HRESULT (WINAPI *pVarI2FromR4)(FLOAT,SHORT*); -static HRESULT (WINAPI *pVarI2FromR8)(double,SHORT*); -static HRESULT (WINAPI *pVarI2FromCy)(CY,SHORT*); -static HRESULT (WINAPI *pVarI2FromDate)(DATE,SHORT*); -static HRESULT (WINAPI *pVarI2FromStr)(OLECHAR*,LCID,ULONG,SHORT*); -static HRESULT (WINAPI *pVarI2FromBool)(VARIANT_BOOL,SHORT*); -static HRESULT (WINAPI *pVarI2FromI1)(signed char,SHORT*); -static HRESULT (WINAPI *pVarI2FromUI2)(USHORT,SHORT*); -static HRESULT (WINAPI *pVarI2FromUI4)(ULONG,SHORT*); -static HRESULT (WINAPI *pVarI2FromDec)(DECIMAL*,SHORT*); -static HRESULT (WINAPI *pVarI2FromI8)(LONG64,SHORT*); -static HRESULT (WINAPI *pVarI2FromUI8)(ULONG64,SHORT*); -static HRESULT (WINAPI *pVarUI2FromUI1)(BYTE,USHORT*); -static HRESULT (WINAPI *pVarUI2FromI2)(SHORT,USHORT*); -static HRESULT (WINAPI *pVarUI2FromI4)(LONG,USHORT*); -static HRESULT (WINAPI *pVarUI2FromR4)(FLOAT,USHORT*); -static HRESULT (WINAPI *pVarUI2FromR8)(double,USHORT*); -static HRESULT (WINAPI *pVarUI2FromDate)(DATE,USHORT*); -static HRESULT (WINAPI *pVarUI2FromCy)(CY,USHORT*); -static HRESULT (WINAPI *pVarUI2FromStr)(OLECHAR*,LCID,ULONG,USHORT*); -static HRESULT (WINAPI *pVarUI2FromBool)(VARIANT_BOOL,USHORT*); -static HRESULT (WINAPI *pVarUI2FromI1)(signed char,USHORT*); -static HRESULT (WINAPI *pVarUI2FromUI4)(ULONG,USHORT*); -static HRESULT (WINAPI *pVarUI2FromDec)(DECIMAL*,USHORT*); -static HRESULT (WINAPI *pVarUI2FromI8)(LONG64,USHORT*); -static HRESULT (WINAPI *pVarUI2FromUI8)(ULONG64,USHORT*); - -static HRESULT (WINAPI *pVarI4FromUI1)(BYTE,LONG*); -static HRESULT (WINAPI *pVarI4FromI2)(SHORT,LONG*); -static HRESULT (WINAPI *pVarI4FromR4)(FLOAT,LONG*); -static HRESULT (WINAPI *pVarI4FromR8)(DOUBLE,LONG*); -static HRESULT (WINAPI *pVarI4FromCy)(CY,LONG*); -static HRESULT (WINAPI *pVarI4FromDate)(DATE,LONG*); -static HRESULT (WINAPI *pVarI4FromStr)(OLECHAR*,LCID,ULONG,LONG*); -static HRESULT (WINAPI *pVarI4FromBool)(VARIANT_BOOL,LONG*); -static HRESULT (WINAPI *pVarI4FromI1)(signed char,LONG*); -static HRESULT (WINAPI *pVarI4FromUI2)(USHORT,LONG*); -static HRESULT (WINAPI *pVarI4FromUI4)(ULONG,LONG*); -static HRESULT (WINAPI *pVarI4FromDec)(DECIMAL*,LONG*); -static HRESULT (WINAPI *pVarI4FromI8)(LONG64,LONG*); -static HRESULT (WINAPI *pVarI4FromUI8)(ULONG64,LONG*); -static HRESULT (WINAPI *pVarUI4FromUI1)(BYTE,ULONG*); -static HRESULT (WINAPI *pVarUI4FromI2)(SHORT,ULONG*); -static HRESULT (WINAPI *pVarUI4FromI4)(LONG,ULONG*); -static HRESULT (WINAPI *pVarUI4FromR4)(FLOAT,ULONG*); -static HRESULT (WINAPI *pVarUI4FromR8)(DOUBLE,ULONG*); -static HRESULT (WINAPI *pVarUI4FromDate)(DATE,ULONG*); -static HRESULT (WINAPI *pVarUI4FromCy)(CY,ULONG*); -static HRESULT (WINAPI *pVarUI4FromStr)(OLECHAR*,LCID,ULONG,ULONG*); -static HRESULT (WINAPI *pVarUI4FromBool)(VARIANT_BOOL,ULONG*); -static HRESULT (WINAPI *pVarUI4FromI1)(signed char,ULONG*); -static HRESULT (WINAPI *pVarUI4FromUI2)(USHORT,ULONG*); -static HRESULT (WINAPI *pVarUI4FromDec)(DECIMAL*,ULONG*); -static HRESULT (WINAPI *pVarUI4FromI8)(LONG64,ULONG*); -static HRESULT (WINAPI *pVarUI4FromUI8)(ULONG64,ULONG*); - -static HRESULT (WINAPI *pVarI8FromUI1)(BYTE,LONG64*); -static HRESULT (WINAPI *pVarI8FromI2)(SHORT,LONG64*); -static HRESULT (WINAPI *pVarI8FromR4)(FLOAT,LONG64*); -static HRESULT (WINAPI *pVarI8FromR8)(double,LONG64*); -static HRESULT (WINAPI *pVarI8FromCy)(CY,LONG64*); -static HRESULT (WINAPI *pVarI8FromDate)(DATE,LONG64*); -static HRESULT (WINAPI *pVarI8FromStr)(OLECHAR*,LCID,ULONG,LONG64*); -static HRESULT (WINAPI *pVarI8FromBool)(VARIANT_BOOL,LONG64*); -static HRESULT (WINAPI *pVarI8FromI1)(signed char,LONG64*); -static HRESULT (WINAPI *pVarI8FromUI2)(USHORT,LONG64*); -static HRESULT (WINAPI *pVarI8FromUI4)(ULONG,LONG64*); -static HRESULT (WINAPI *pVarI8FromDec)(DECIMAL*,LONG64*); -static HRESULT (WINAPI *pVarI8FromUI8)(ULONG64,LONG64*); -static HRESULT (WINAPI *pVarUI8FromI8)(LONG64,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromUI1)(BYTE,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromI2)(SHORT,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromR4)(FLOAT,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromR8)(double,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromCy)(CY,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromDate)(DATE,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromStr)(OLECHAR*,LCID,ULONG,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromBool)(VARIANT_BOOL,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromI1)(signed char,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromUI2)(USHORT,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromUI4)(ULONG,ULONG64*); -static HRESULT (WINAPI *pVarUI8FromDec)(DECIMAL*,ULONG64*); - -static HRESULT (WINAPI *pVarR4FromUI1)(BYTE,float*); -static HRESULT (WINAPI *pVarR4FromI2)(SHORT,float*); -static HRESULT (WINAPI *pVarR4FromI4)(LONG,float*); -static HRESULT (WINAPI *pVarR4FromR8)(double,float*); -static HRESULT (WINAPI *pVarR4FromCy)(CY,float*); -static HRESULT (WINAPI *pVarR4FromDate)(DATE,float*); -static HRESULT (WINAPI *pVarR4FromStr)(OLECHAR*,LCID,ULONG,float*); -static HRESULT (WINAPI *pVarR4FromBool)(VARIANT_BOOL,float*); -static HRESULT (WINAPI *pVarR4FromI1)(signed char,float*); -static HRESULT (WINAPI *pVarR4FromUI2)(USHORT,float*); -static HRESULT (WINAPI *pVarR4FromUI4)(ULONG,float*); -static HRESULT (WINAPI *pVarR4FromDec)(DECIMAL*,float*); -static HRESULT (WINAPI *pVarR4FromI8)(LONG64,float*); -static HRESULT (WINAPI *pVarR4FromUI8)(ULONG64,float*); - -static HRESULT (WINAPI *pVarR8FromUI1)(BYTE,double*); -static HRESULT (WINAPI *pVarR8FromI2)(SHORT,double*); -static HRESULT (WINAPI *pVarR8FromI4)(LONG,double*); -static HRESULT (WINAPI *pVarR8FromR4)(FLOAT,double*); -static HRESULT (WINAPI *pVarR8FromCy)(CY,double*); -static HRESULT (WINAPI *pVarR8FromDate)(DATE,double*); -static HRESULT (WINAPI *pVarR8FromStr)(OLECHAR*,LCID,ULONG,double*); -static HRESULT (WINAPI *pVarR8FromBool)(VARIANT_BOOL,double*); -static HRESULT (WINAPI *pVarR8FromI1)(signed char,double*); -static HRESULT (WINAPI *pVarR8FromUI2)(USHORT,double*); -static HRESULT (WINAPI *pVarR8FromUI4)(ULONG,double*); -static HRESULT (WINAPI *pVarR8FromDec)(DECIMAL*,double*); -static HRESULT (WINAPI *pVarR8FromI8)(LONG64,double*); -static HRESULT (WINAPI *pVarR8FromUI8)(ULONG64,double*); -static HRESULT (WINAPI *pVarR8Round)(double,int,double*); - -static HRESULT (WINAPI *pVarDateFromUI1)(BYTE,DATE*); -static HRESULT (WINAPI *pVarDateFromI2)(SHORT,DATE*); -static HRESULT (WINAPI *pVarDateFromI4)(LONG,DATE*); -static HRESULT (WINAPI *pVarDateFromR4)(FLOAT,DATE*); -static HRESULT (WINAPI *pVarDateFromCy)(CY,DATE*); -static HRESULT (WINAPI *pVarDateFromR8)(double,DATE*); -static HRESULT (WINAPI *pVarDateFromStr)(OLECHAR*,LCID,ULONG,DATE*); -static HRESULT (WINAPI *pVarDateFromBool)(VARIANT_BOOL,DATE*); -static HRESULT (WINAPI *pVarDateFromI1)(signed char,DATE*); -static HRESULT (WINAPI *pVarDateFromUI2)(USHORT,DATE*); -static HRESULT (WINAPI *pVarDateFromUI4)(ULONG,DATE*); -static HRESULT (WINAPI *pVarDateFromDec)(DECIMAL*,DATE*); -static HRESULT (WINAPI *pVarDateFromI8)(LONG64,DATE*); -static HRESULT (WINAPI *pVarDateFromUI8)(ULONG64,DATE*); - -static HRESULT (WINAPI *pVarCyFromUI1)(BYTE,CY*); -static HRESULT (WINAPI *pVarCyFromI2)(SHORT,CY*); -static HRESULT (WINAPI *pVarCyFromI4)(LONG,CY*); -static HRESULT (WINAPI *pVarCyFromR4)(FLOAT,CY*); -static HRESULT (WINAPI *pVarCyFromR8)(double,CY*); -static HRESULT (WINAPI *pVarCyFromDate)(DATE,CY*); -static HRESULT (WINAPI *pVarCyFromBool)(VARIANT_BOOL,CY*); -static HRESULT (WINAPI *pVarCyFromI1)(signed char,CY*); -static HRESULT (WINAPI *pVarCyFromUI2)(USHORT,CY*); -static HRESULT (WINAPI *pVarCyFromUI4)(ULONG,CY*); -static HRESULT (WINAPI *pVarCyFromDec)(DECIMAL*,CY*); -static HRESULT (WINAPI *pVarCyFromI8)(LONG64,CY*); -static HRESULT (WINAPI *pVarCyFromUI8)(ULONG64,CY*); -static HRESULT (WINAPI *pVarCyAdd)(const CY,const CY,CY*); -static HRESULT (WINAPI *pVarCyMul)(const CY,const CY,CY*); -static HRESULT (WINAPI *pVarCyMulI4)(const CY,LONG,CY*); -static HRESULT (WINAPI *pVarCySub)(const CY,const CY,CY*); -static HRESULT (WINAPI *pVarCyAbs)(const CY,CY*); -static HRESULT (WINAPI *pVarCyFix)(const CY,CY*); -static HRESULT (WINAPI *pVarCyInt)(const CY,CY*); -static HRESULT (WINAPI *pVarCyNeg)(const CY,CY*); -static HRESULT (WINAPI *pVarCyRound)(const CY,int,CY*); -static HRESULT (WINAPI *pVarCyCmp)(const CY,const CY); -static HRESULT (WINAPI *pVarCyCmpR8)(const CY,double); -static HRESULT (WINAPI *pVarCyMulI8)(const CY,LONG64,CY*); - -static HRESULT (WINAPI *pVarDecFromUI1)(BYTE,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromI2)(SHORT,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromI4)(LONG,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromI8)(LONG64,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromR4)(FLOAT,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromR8)(DOUBLE,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromDate)(DATE,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromStr)(OLECHAR*,LCID,ULONG,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromBool)(VARIANT_BOOL,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromI1)(signed char,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromUI2)(USHORT,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromUI4)(ULONG,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromUI8)(ULONG64,DECIMAL*); -static HRESULT (WINAPI *pVarDecFromCy)(CY,DECIMAL*); -static HRESULT (WINAPI *pVarDecAbs)(const DECIMAL*,DECIMAL*); -static HRESULT (WINAPI *pVarDecAdd)(const DECIMAL*,const DECIMAL*,DECIMAL*); -static HRESULT (WINAPI *pVarDecSub)(const DECIMAL*,const DECIMAL*,DECIMAL*); -static HRESULT (WINAPI *pVarDecMul)(const DECIMAL*,const DECIMAL*,DECIMAL*); -static HRESULT (WINAPI *pVarDecDiv)(const DECIMAL*,const DECIMAL*,DECIMAL*); -static HRESULT (WINAPI *pVarDecCmp)(const DECIMAL*,const DECIMAL*); -static HRESULT (WINAPI *pVarDecNeg)(const DECIMAL*,DECIMAL*); - -static HRESULT (WINAPI *pVarBoolFromUI1)(BYTE,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromI2)(SHORT,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromI4)(LONG,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromR4)(FLOAT,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromR8)(DOUBLE,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromDate)(DATE,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromCy)(CY,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromStr)(OLECHAR*,LCID,ULONG,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromI1)(signed char,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromUI2)(USHORT,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromUI4)(ULONG,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromDec)(DECIMAL*,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromI8)(LONG64,VARIANT_BOOL*); -static HRESULT (WINAPI *pVarBoolFromUI8)(ULONG64,VARIANT_BOOL*); - -static HRESULT (WINAPI *pVarBstrFromR4)(FLOAT,LCID,ULONG,BSTR*); -static HRESULT (WINAPI *pVarBstrFromDate)(DATE,LCID,ULONG,BSTR*); -static HRESULT (WINAPI *pVarBstrFromDec)(DECIMAL*,LCID,ULONG,BSTR*); -static HRESULT (WINAPI *pVarBstrCmp)(BSTR,BSTR,LCID,ULONG); - -static INT (WINAPI *pSystemTimeToVariantTime)(LPSYSTEMTIME,double*); -static void (WINAPI *pClearCustData)(LPCUSTDATA); - -/* Internal representation of a BSTR */ -typedef struct tagINTERNAL_BSTR -{ - DWORD dwLen; - OLECHAR szString[1]; -} INTERNAL_BSTR, *LPINTERNAL_BSTR; - -typedef struct -{ - const IDispatchVtbl *lpVtbl; - LONG ref; - VARTYPE vt; - BOOL bFailInvoke; -} DummyDispatch; - -static DummyDispatch dispatch; - -static ULONG WINAPI DummyDispatch_AddRef(LPDISPATCH iface) -{ - trace("AddRef(%p)\n", iface); - return InterlockedIncrement(&((DummyDispatch*)iface)->ref); -} - -static ULONG WINAPI DummyDispatch_Release(LPDISPATCH iface) -{ - trace("Release(%p)\n", iface); - return InterlockedDecrement(&((DummyDispatch*)iface)->ref); -} - -static HRESULT WINAPI DummyDispatch_QueryInterface(LPDISPATCH iface, - REFIID riid, - void** ppvObject) -{ - trace("QueryInterface(%p)\n", iface); - if (ppvObject) - { - *ppvObject = NULL; - if (IsEqualIID(riid, &IID_IDispatch)) - { - trace("Asked for IID_IDispatch\n"); - *ppvObject = iface; - } - else if (IsEqualIID(riid, &IID_IUnknown)) - { - trace("Asked for IID_IUnknown\n"); - *ppvObject = iface; - } - if (*ppvObject) - { - DummyDispatch_AddRef((IDispatch*)*ppvObject); - return S_OK; - } - } - return E_NOINTERFACE; -} - -static HRESULT WINAPI DummyDispatch_Invoke(LPDISPATCH iface, - DISPID dispIdMember, REFIID riid, - LCID lcid, WORD wFlags, - DISPPARAMS *pDispParams, - VARIANT *pVarResult, - EXCEPINFO *pExcepInfo, - UINT *puArgErr) -{ - trace("Invoke(%p)\n", iface); - ok(wFlags == DISPATCH_PROPERTYGET, "Flags wrong\n"); - ok(pDispParams->cArgs == 0, "Property get has args\n"); - - if (dispatch.bFailInvoke) - return E_OUTOFMEMORY; - - memset(pVarResult, 0, sizeof(*pVarResult)); - V_VT(pVarResult) = dispatch.vt; - return S_OK; -} - -static const IDispatchVtbl DummyDispatch_VTable = -{ - DummyDispatch_QueryInterface, - DummyDispatch_AddRef, - DummyDispatch_Release, - NULL, - NULL, - NULL, - DummyDispatch_Invoke -}; - -static DummyDispatch dispatch = { &DummyDispatch_VTable, 1, 0, 0 }; - -/* - * VT_I1/VT_UI1 - */ - -#undef CONV_TYPE -#define CONV_TYPE signed char -#undef EXPECTRES -#define EXPECTRES(res, x) _EXPECTRES(res, x, "%d") - -static void test_VarI1FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarI1FromI2); - OVERFLOWRANGE(VarI1FromI2, -32768, -128); - CONVERTRANGE(VarI1FromI2, -128, 128); - OVERFLOWRANGE(VarI1FromI2, 129, 32768); -} - -static void test_VarI1FromI4(void) -{ - CONVVARS(LONG); - int i; - - CHECKPTR(VarI1FromI4); - CONVERT(VarI1FromI4, -129); EXPECT_OVERFLOW; - CONVERTRANGE(VarI1FromI4, -128, 128); - CONVERT(VarI1FromI4, 128); EXPECT_OVERFLOW; -} - -static void test_VarI1FromI8(void) -{ - CONVVARS(LONG64); - int i; - - CHECKPTR(VarI1FromI8); - CONVERT(VarI1FromI8, -129); EXPECT_OVERFLOW; - CONVERTRANGE(VarI1FromI8, -127, 128); - CONVERT(VarI1FromI8, 128); EXPECT_OVERFLOW; -} - -static void test_VarI1FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarI1FromUI1); - CONVERTRANGE(VarI1FromUI1, 0, 127); - OVERFLOWRANGE(VarI1FromUI1, 128, 255); -} - -static void test_VarI1FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarI1FromUI2); - CONVERTRANGE(VarI1FromUI2, 0, 127); - OVERFLOWRANGE(VarI1FromUI2, 128, 32768); -} - -static void test_VarI1FromUI4(void) -{ - CONVVARS(ULONG); - int i; - - CHECKPTR(VarI1FromUI4); - CONVERTRANGE(VarI1FromUI4, 0, 127); - CONVERT(VarI1FromUI4, 128); EXPECT_OVERFLOW; -} - -static void test_VarI1FromUI8(void) -{ - CONVVARS(ULONG64); - int i; - - CHECKPTR(VarI1FromUI8); - CONVERTRANGE(VarI1FromUI8, 0, 127); - CONVERT(VarI1FromUI8, 128); EXPECT_OVERFLOW; -} - -static void test_VarI1FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarI1FromBool); - /* Note that conversions from bool wrap around! */ - CONVERT(VarI1FromBool, -129); EXPECT(127); - CONVERTRANGE(VarI1FromBool, -128, 128); - CONVERT(VarI1FromBool, 128); EXPECT(-128); -} - -static void test_VarI1FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarI1FromR4); - CONVERT(VarI1FromR4, -129.0f); EXPECT_OVERFLOW; - CONVERT(VarI1FromR4, -128.0f); EXPECT(-128); - CONVERT(VarI1FromR4, -1.0f); EXPECT(-1); - CONVERT(VarI1FromR4, 0.0f); EXPECT(0); - CONVERT(VarI1FromR4, 1.0f); EXPECT(1); - CONVERT(VarI1FromR4, 127.0f); EXPECT(127); - CONVERT(VarI1FromR4, 128.0f); EXPECT_OVERFLOW; - - CONVERT(VarI1FromR4, -1.5f); EXPECT(-2); - CONVERT(VarI1FromR4, -0.6f); EXPECT(-1); - CONVERT(VarI1FromR4, -0.5f); EXPECT(0); - CONVERT(VarI1FromR4, -0.4f); EXPECT(0); - CONVERT(VarI1FromR4, 0.4f); EXPECT(0); - CONVERT(VarI1FromR4, 0.5f); EXPECT(0); - CONVERT(VarI1FromR4, 0.6f); EXPECT(1); - CONVERT(VarI1FromR4, 1.5f); EXPECT(2); -} - -static void test_VarI1FromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarI1FromR8); - CONVERT(VarI1FromR8, -129.0); EXPECT_OVERFLOW; - CONVERT(VarI1FromR8, -128.0); EXPECT(-128); - CONVERT(VarI1FromR8, -1.0); EXPECT(-1); - CONVERT(VarI1FromR8, 0.0); EXPECT(0); - CONVERT(VarI1FromR8, 1.0); EXPECT(1); - CONVERT(VarI1FromR8, 127.0); EXPECT(127); - CONVERT(VarI1FromR8, 128.0); EXPECT_OVERFLOW; - - CONVERT(VarI1FromR8, -1.5); EXPECT(-2); - CONVERT(VarI1FromR8, -0.6); EXPECT(-1); - CONVERT(VarI1FromR8, -0.5); EXPECT(0); - CONVERT(VarI1FromR8, -0.4); EXPECT(0); - CONVERT(VarI1FromR8, 0.4); EXPECT(0); - CONVERT(VarI1FromR8, 0.5); EXPECT(0); - CONVERT(VarI1FromR8, 0.6); EXPECT(1); - CONVERT(VarI1FromR8, 1.5); EXPECT(2); -} - -static void test_VarI1FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarI1FromDate); - CONVERT(VarI1FromDate, -129.0); EXPECT_OVERFLOW; - CONVERT(VarI1FromDate, -128.0); EXPECT(-128); - CONVERT(VarI1FromDate, -1.0); EXPECT(-1); - CONVERT(VarI1FromDate, 0.0); EXPECT(0); - CONVERT(VarI1FromDate, 1.0); EXPECT(1); - CONVERT(VarI1FromDate, 127.0); EXPECT(127); - CONVERT(VarI1FromDate, 128.0); EXPECT_OVERFLOW; - - CONVERT(VarI1FromDate, -1.5); EXPECT(-2); - CONVERT(VarI1FromDate, -0.6); EXPECT(-1); - CONVERT(VarI1FromDate, -0.5); EXPECT(0); - CONVERT(VarI1FromDate, -0.4); EXPECT(0); - CONVERT(VarI1FromDate, 0.4); EXPECT(0); - CONVERT(VarI1FromDate, 0.5); EXPECT(0); - CONVERT(VarI1FromDate, 0.6); EXPECT(1); - CONVERT(VarI1FromDate, 1.5); EXPECT(2); -} - -static void test_VarI1FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarI1FromCy); - CONVERT_CY(VarI1FromCy,-129); EXPECT_OVERFLOW; - CONVERT_CY(VarI1FromCy,-128); EXPECT(128); - CONVERT_CY(VarI1FromCy,-1); EXPECT(-1); - CONVERT_CY(VarI1FromCy,0); EXPECT(0); - CONVERT_CY(VarI1FromCy,1); EXPECT(1); - CONVERT_CY(VarI1FromCy,127); EXPECT(127); - CONVERT_CY(VarI1FromCy,128); EXPECT_OVERFLOW; - - CONVERT_CY(VarI1FromCy,-1.5); EXPECT(-2); - CONVERT_CY(VarI1FromCy,-0.6); EXPECT(-1); - CONVERT_CY(VarI1FromCy,-0.5); EXPECT(0); - CONVERT_CY(VarI1FromCy,-0.4); EXPECT(0); - CONVERT_CY(VarI1FromCy,0.4); EXPECT(0); - CONVERT_CY(VarI1FromCy,0.5); EXPECT(0); - CONVERT_CY(VarI1FromCy,0.6); EXPECT(1); - CONVERT_CY(VarI1FromCy,1.5); EXPECT(2); -} - -static void test_VarI1FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarI1FromDec); - - CONVERT_BADDEC(VarI1FromDec); - - CONVERT_DEC(VarI1FromDec,0,0x80,0,129); EXPECT_OVERFLOW; - CONVERT_DEC(VarI1FromDec,0,0x80,0,128); EXPECT(-128); - CONVERT_DEC(VarI1FromDec,0,0x80,0,1); EXPECT(-1); - CONVERT_DEC(VarI1FromDec,0,0,0,0); EXPECT(0); - CONVERT_DEC(VarI1FromDec,0,0,0,1); EXPECT(1); - CONVERT_DEC(VarI1FromDec,0,0,0,127); EXPECT(127); - CONVERT_DEC(VarI1FromDec,0,0,0,128); EXPECT_OVERFLOW; - - CONVERT_DEC(VarI1FromDec,2,0x80,0,12800); EXPECT(-128); - CONVERT_DEC(VarI1FromDec,2,0,0,12700); EXPECT(127); -} - -static void test_VarI1FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarI1FromStr); - - CONVERT_STR(VarI1FromStr,NULL, 0); EXPECT_MISMATCH; - CONVERT_STR(VarI1FromStr,"0", 0); EXPECT(0); - CONVERT_STR(VarI1FromStr,"-129", 0); EXPECT_OVERFLOW; - CONVERT_STR(VarI1FromStr,"-128", 0); EXPECT(-128); - CONVERT_STR(VarI1FromStr,"127", 0); EXPECT(127); - CONVERT_STR(VarI1FromStr,"128", 0); EXPECT_OVERFLOW; - - CONVERT_STR(VarI1FromStr,"-1.5", LOCALE_NOUSEROVERRIDE); EXPECT(-2); - CONVERT_STR(VarI1FromStr,"-0.6", LOCALE_NOUSEROVERRIDE); EXPECT(-1); - CONVERT_STR(VarI1FromStr,"-0.5", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI1FromStr,"-0.4", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI1FromStr,"0.4", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI1FromStr,"0.5", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI1FromStr,"0.6", LOCALE_NOUSEROVERRIDE); EXPECT(1); - CONVERT_STR(VarI1FromStr,"1.5", LOCALE_NOUSEROVERRIDE); EXPECT(2); -} - -static void test_VarI1Copy(void) -{ - if (!IS_ANCIENT) - { - COPYTEST(1, VT_I1, V_I1(&vSrc), V_I1(&vDst), V_I1REF(&vSrc), V_I1REF(&vDst), "%d"); - } -} - -static void test_VarI1ChangeTypeEx(void) -{ - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - in = 1; - - if (!IS_ANCIENT) - { - INITIAL_TYPETEST(VT_I1, V_I1, "%d"); - COMMON_TYPETEST; - NEGATIVE_TYPETEST(VT_I1, V_I1, "%d", VT_UI1, V_UI1); - } -} - -#undef CONV_TYPE -#define CONV_TYPE BYTE - -static void test_VarUI1FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarUI1FromI1); - OVERFLOWRANGE(VarUI1FromI1, -128, 0); - CONVERTRANGE(VarUI1FromI1, 0, 128); -} - -static void test_VarUI1FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarUI1FromI2); - OVERFLOWRANGE(VarUI1FromI2, -32768, 0); - CONVERTRANGE(VarUI1FromI2, 0, 256); - OVERFLOWRANGE(VarUI1FromI2, 256, 32768); -} - -static void test_VarUI1FromI4(void) -{ - CONVVARS(LONG); - int i; - - CHECKPTR(VarUI1FromI4); - CONVERT(VarUI1FromI4, -1); EXPECT_OVERFLOW; - CONVERTRANGE(VarUI1FromI4, 0, 256); - CONVERT(VarUI1FromI4, 256); EXPECT_OVERFLOW; -} - -static void test_VarUI1FromI8(void) -{ - CONVVARS(LONG64); - int i; - - CHECKPTR(VarUI1FromI8); - CONVERT(VarUI1FromI8, -1); EXPECT_OVERFLOW; - CONVERTRANGE(VarUI1FromI8, 0, 256); - CONVERT(VarUI1FromI8, 256); EXPECT_OVERFLOW; -} - -static void test_VarUI1FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarUI1FromUI2); - CONVERTRANGE(VarUI1FromUI2, 0, 256); - OVERFLOWRANGE(VarUI1FromUI2, 256, 65536); -} - -static void test_VarUI1FromUI4(void) -{ - CONVVARS(ULONG); - int i; - - CHECKPTR(VarUI1FromUI4); - CONVERTRANGE(VarUI1FromUI4, 0, 256); - CONVERT(VarUI1FromUI4, 256); EXPECT_OVERFLOW; -} - -static void test_VarUI1FromUI8(void) -{ - CONVVARS(ULONG64); - int i; - - CHECKPTR(VarUI1FromUI8); - CONVERTRANGE(VarUI1FromUI8, 0, 256); - CONVERT(VarUI1FromUI8, 256); EXPECT_OVERFLOW; -} - -static void test_VarUI1FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarUI1FromBool); - /* Note that conversions from bool overflow! */ - CONVERT(VarUI1FromBool, -1); EXPECT(255); - CONVERTRANGE(VarUI1FromBool, 0, 256); - CONVERT(VarUI1FromBool, 256); EXPECT(0); -} - -static void test_VarUI1FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarUI1FromR4); - CONVERT(VarUI1FromR4, -1.0f); EXPECT_OVERFLOW; - CONVERT(VarUI1FromR4, 0.0f); EXPECT(0); - CONVERT(VarUI1FromR4, 1.0f); EXPECT(1); - CONVERT(VarUI1FromR4, 255.0f); EXPECT(255); - CONVERT(VarUI1FromR4, 256.0f); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarUI1FromR4, -1.5f); EXPECT_OVERFLOW; - CONVERT(VarUI1FromR4, -0.6f); EXPECT_OVERFLOW; - CONVERT(VarUI1FromR4, -0.5f); EXPECT(0); - CONVERT(VarUI1FromR4, -0.4f); EXPECT(0); - CONVERT(VarUI1FromR4, 0.4f); EXPECT(0); - CONVERT(VarUI1FromR4, 0.5f); EXPECT(0); - CONVERT(VarUI1FromR4, 0.6f); EXPECT(1); - CONVERT(VarUI1FromR4, 1.5f); EXPECT(2); -} - -static void test_VarUI1FromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarUI1FromR8); - CONVERT(VarUI1FromR8, -1.0); EXPECT_OVERFLOW; - CONVERT(VarUI1FromR8, 0.0); EXPECT(0); - CONVERT(VarUI1FromR8, 1.0); EXPECT(1); - CONVERT(VarUI1FromR8, 255.0); EXPECT(255); - CONVERT(VarUI1FromR8, 256.0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarUI1FromR8, -1.5); EXPECT_OVERFLOW; - CONVERT(VarUI1FromR8, -0.6); EXPECT_OVERFLOW; - CONVERT(VarUI1FromR8, -0.5); EXPECT(0); - CONVERT(VarUI1FromR8, -0.4); EXPECT(0); - CONVERT(VarUI1FromR8, 0.4); EXPECT(0); - CONVERT(VarUI1FromR8, 0.5); EXPECT(0); - CONVERT(VarUI1FromR8, 0.6); EXPECT(1); - CONVERT(VarUI1FromR8, 1.5); EXPECT(2); -} - -static void test_VarUI1FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarUI1FromDate); - CONVERT(VarUI1FromDate, -1.0); EXPECT_OVERFLOW; - CONVERT(VarUI1FromDate, 0.0); EXPECT(0); - CONVERT(VarUI1FromDate, 1.0); EXPECT(1); - CONVERT(VarUI1FromDate, 255.0); EXPECT(255); - CONVERT(VarUI1FromDate, 256.0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarUI1FromDate, -1.5); EXPECT_OVERFLOW; - CONVERT(VarUI1FromDate, -0.6); EXPECT_OVERFLOW; - CONVERT(VarUI1FromDate, -0.5); EXPECT(0); - CONVERT(VarUI1FromDate, -0.4); EXPECT(0); - CONVERT(VarUI1FromDate, 0.4); EXPECT(0); - CONVERT(VarUI1FromDate, 0.5); EXPECT(0); - CONVERT(VarUI1FromDate, 0.6); EXPECT(1); - CONVERT(VarUI1FromDate, 1.5); EXPECT(2); -} - -static void test_VarUI1FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarUI1FromCy); - CONVERT_CY(VarUI1FromCy,-1); EXPECT_OVERFLOW; - CONVERT_CY(VarUI1FromCy,0); EXPECT(0); - CONVERT_CY(VarUI1FromCy,1); EXPECT(1); - CONVERT_CY(VarUI1FromCy,255); EXPECT(255); - CONVERT_CY(VarUI1FromCy,256); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT_CY(VarUI1FromCy,-1.5); EXPECT_OVERFLOW; - CONVERT_CY(VarUI1FromCy,-0.6); EXPECT_OVERFLOW; - CONVERT_CY(VarUI1FromCy,-0.5); EXPECT(0); - CONVERT_CY(VarUI1FromCy,-0.4); EXPECT(0); - CONVERT_CY(VarUI1FromCy,0.4); EXPECT(0); - CONVERT_CY(VarUI1FromCy,0.5); EXPECT(0); - CONVERT_CY(VarUI1FromCy,0.6); EXPECT(1); - CONVERT_CY(VarUI1FromCy,1.5); EXPECT(2); -} - -static void test_VarUI1FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarUI1FromDec); - - CONVERT_BADDEC(VarUI1FromDec); - - CONVERT_DEC(VarUI1FromDec,0,0x80,0,1); EXPECT_OVERFLOW; - CONVERT_DEC(VarUI1FromDec,0,0,0,0); EXPECT(0); - CONVERT_DEC(VarUI1FromDec,0,0,0,1); EXPECT(1); - CONVERT_DEC(VarUI1FromDec,0,0,0,255); EXPECT(255); - CONVERT_DEC(VarUI1FromDec,0,0,0,256); EXPECT_OVERFLOW; - - CONVERT_DEC(VarUI1FromDec,2,0x80,0,100); EXPECT_OVERFLOW; - CONVERT_DEC(VarUI1FromDec,2,0,0,25500); EXPECT(255); -} - -static void test_VarUI1FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarUI1FromStr); - - CONVERT_STR(VarUI1FromStr,NULL, 0); EXPECT_MISMATCH; - CONVERT_STR(VarUI1FromStr,"0", 0); EXPECT(0); - CONVERT_STR(VarUI1FromStr,"-1", 0); EXPECT_OVERFLOW; - CONVERT_STR(VarUI1FromStr,"255", 0); EXPECT(255); - CONVERT_STR(VarUI1FromStr,"256", 0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT_STR(VarUI1FromStr,"-1.5", LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; - CONVERT_STR(VarUI1FromStr,"-0.6", LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; - CONVERT_STR(VarUI1FromStr,"-0.5", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI1FromStr,"-0.4", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI1FromStr,"0.4", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI1FromStr,"0.5", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI1FromStr,"0.6", LOCALE_NOUSEROVERRIDE); EXPECT(1); - CONVERT_STR(VarUI1FromStr,"1.5", LOCALE_NOUSEROVERRIDE); EXPECT(2); -} - -static void test_VarUI1FromDisp(void) -{ - CONVVARS(LCID); - VARIANTARG vSrc, vDst; - - CHECKPTR(VarUI1FromDisp); - - /* FIXME - * Conversions from IDispatch should get the default 'value' property - * from the IDispatch pointer and return it. The following tests this. - * However, I can't get these tests to return a valid value under native - * oleaut32, regardless of the value returned in response to the Invoke() - * call (early versions of oleaut32 call AddRef/Release, but not Invoke. - * I'm obviously missing something, as these conversions work fine - * when called through VBA on an object to get its default value property. - * - * Should this test be corrected so that it works under native it should be - * generalised and the remaining types checked as well. - */ - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - VariantInit(&vSrc); - VariantInit(&vDst); - - V_VT(&vSrc) = VT_DISPATCH; - V_DISPATCH(&vSrc) = (IDispatch*)&dispatch; - dispatch.vt = VT_UI1; - dispatch.bFailInvoke = FALSE; - - hres = VarUI1FromDisp((IDispatch*)&dispatch, in, &out); - trace("0x%08x\n", hres); - - hres = VariantChangeTypeEx(&vDst, &vSrc, in, 0, VT_UI1); - trace("0x%08x\n", hres); - - dispatch.bFailInvoke = TRUE; - - hres = VarUI1FromDisp((IDispatch*)&dispatch, in, &out); - trace("0x%08x\n", hres); - - hres = VariantChangeTypeEx(&vDst, &vSrc, in, 0, VT_UI1); - trace("0x%08x\n", hres); -} - -static void test_VarUI1Copy(void) -{ - COPYTEST(1, VT_UI1, V_UI1(&vSrc), V_UI1(&vDst), V_UI1REF(&vSrc), V_UI1REF(&vDst), "%d"); -} - -static void test_VarUI1ChangeTypeEx(void) -{ - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - in = 1; - - INITIAL_TYPETEST(VT_UI1, V_UI1, "%d"); - COMMON_TYPETEST; - NEGATIVE_TYPETEST(VT_UI1, V_UI1, "%d", VT_I1, V_I1); -} - -/* - * VT_I2/VT_UI2 - */ - -#undef CONV_TYPE -#define CONV_TYPE SHORT -#undef EXPECTRES -#define EXPECTRES(res, x) _EXPECTRES(res, x, "%d") - -static void test_VarI2FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarI2FromI1); - CONVERTRANGE(VarI2FromI1, -128, 128); -} - -static void test_VarI2FromI4(void) -{ - CONVVARS(LONG); - int i; - - CHECKPTR(VarI2FromI4); - CONVERT(VarI2FromI4, -32769); EXPECT_OVERFLOW; - CONVERTRANGE(VarI2FromI4, -32768, 32768); - CONVERT(VarI2FromI4, 32768); EXPECT_OVERFLOW; -} - -static void test_VarI2FromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarI2FromI8); - CONVERT(VarI2FromI8, -32769); EXPECT_OVERFLOW; - CONVERT(VarI2FromI8, -32768); EXPECT(-32768); - CONVERT(VarI2FromI8, 32767); EXPECT(32767); - CONVERT(VarI2FromI8, 32768); EXPECT_OVERFLOW; -} - -static void test_VarI2FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarI2FromUI1); - CONVERTRANGE(VarI2FromUI1, 0, 256); -} - -static void test_VarI2FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarI2FromUI2); - CONVERTRANGE(VarI2FromUI2, 0, 32768); - CONVERT(VarI2FromUI2, 32768); EXPECT_OVERFLOW; -} - -static void test_VarI2FromUI4(void) -{ - CONVVARS(ULONG); - int i; - - CHECKPTR(VarI2FromUI4); - CONVERTRANGE(VarI2FromUI4, 0, 32768); - CONVERT(VarI2FromUI4, 32768); EXPECT_OVERFLOW; -} - -static void test_VarI2FromUI8(void) -{ - CONVVARS(ULONG64); - int i; - - CHECKPTR(VarI2FromUI8); - CONVERTRANGE(VarI2FromUI8, 0, 32768); - CONVERT(VarI2FromUI8, 32768); EXPECT_OVERFLOW; -} - -static void test_VarI2FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarI2FromBool); - CONVERTRANGE(VarI2FromBool, -32768, 32768); -} - -static void test_VarI2FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarI2FromR4); - CONVERT(VarI2FromR4, -32769.0f); EXPECT_OVERFLOW; - CONVERT(VarI2FromR4, -32768.0f); EXPECT(-32768); - CONVERT(VarI2FromR4, -1.0f); EXPECT(-1); - CONVERT(VarI2FromR4, 0.0f); EXPECT(0); - CONVERT(VarI2FromR4, 1.0f); EXPECT(1); - CONVERT(VarI2FromR4, 32767.0f); EXPECT(32767); - CONVERT(VarI2FromR4, 32768.0f); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarI2FromR4, -1.5f); EXPECT(-2); - CONVERT(VarI2FromR4, -0.6f); EXPECT(-1); - CONVERT(VarI2FromR4, -0.5f); EXPECT(0); - CONVERT(VarI2FromR4, -0.4f); EXPECT(0); - CONVERT(VarI2FromR4, 0.4f); EXPECT(0); - CONVERT(VarI2FromR4, 0.5f); EXPECT(0); - CONVERT(VarI2FromR4, 0.6f); EXPECT(1); - CONVERT(VarI2FromR4, 1.5f); EXPECT(2); -} - -static void test_VarI2FromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarI2FromR8); - CONVERT(VarI2FromR8, -32769.0); EXPECT_OVERFLOW; - CONVERT(VarI2FromR8, -32768.0); EXPECT(-32768); - CONVERT(VarI2FromR8, -1.0); EXPECT(-1); - CONVERT(VarI2FromR8, 0.0); EXPECT(0); - CONVERT(VarI2FromR8, 1.0); EXPECT(1); - CONVERT(VarI2FromR8, 32767.0); EXPECT(32767); - CONVERT(VarI2FromR8, 32768.0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarI2FromR8, -1.5); EXPECT(-2); - CONVERT(VarI2FromR8, -0.6); EXPECT(-1); - CONVERT(VarI2FromR8, -0.5); EXPECT(0); - CONVERT(VarI2FromR8, -0.4); EXPECT(0); - CONVERT(VarI2FromR8, 0.4); EXPECT(0); - CONVERT(VarI2FromR8, 0.5); EXPECT(0); - CONVERT(VarI2FromR8, 0.6); EXPECT(1); - CONVERT(VarI2FromR8, 1.5); EXPECT(2); -} - -static void test_VarI2FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarI2FromDate); - CONVERT(VarI2FromDate, -32769.0); EXPECT_OVERFLOW; - CONVERT(VarI2FromDate, -32768.0); EXPECT(-32768); - CONVERT(VarI2FromDate, -1.0); EXPECT(-1); - CONVERT(VarI2FromDate, 0.0); EXPECT(0); - CONVERT(VarI2FromDate, 1.0); EXPECT(1); - CONVERT(VarI2FromDate, 32767.0); EXPECT(32767); - CONVERT(VarI2FromDate, 32768.0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarI2FromDate, -1.5); EXPECT(-2); - CONVERT(VarI2FromDate, -0.6); EXPECT(-1); - CONVERT(VarI2FromDate, -0.5); EXPECT(0); - CONVERT(VarI2FromDate, -0.4); EXPECT(0); - CONVERT(VarI2FromDate, 0.4); EXPECT(0); - CONVERT(VarI2FromDate, 0.5); EXPECT(0); - CONVERT(VarI2FromDate, 0.6); EXPECT(1); - CONVERT(VarI2FromDate, 1.5); EXPECT(2); -} - -static void test_VarI2FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarI2FromCy); - CONVERT_CY(VarI2FromCy,-32769); EXPECT_OVERFLOW; - CONVERT_CY(VarI2FromCy,-32768); EXPECT(32768); - CONVERT_CY(VarI2FromCy,-1); EXPECT(-1); - CONVERT_CY(VarI2FromCy,0); EXPECT(0); - CONVERT_CY(VarI2FromCy,1); EXPECT(1); - CONVERT_CY(VarI2FromCy,32767); EXPECT(32767); - CONVERT_CY(VarI2FromCy,32768); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT_CY(VarI2FromCy,-1.5); EXPECT(-2); - CONVERT_CY(VarI2FromCy,-0.6); EXPECT(-1); - CONVERT_CY(VarI2FromCy,-0.5); EXPECT(0); - CONVERT_CY(VarI2FromCy,-0.4); EXPECT(0); - CONVERT_CY(VarI2FromCy,0.4); EXPECT(0); - CONVERT_CY(VarI2FromCy,0.5); EXPECT(0); - CONVERT_CY(VarI2FromCy,0.6); EXPECT(1); - CONVERT_CY(VarI2FromCy,1.5); EXPECT(2); -} - -static void test_VarI2FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarI2FromDec); - - CONVERT_BADDEC(VarI2FromDec); - - CONVERT_DEC(VarI2FromDec,0,0x80,0,32769); EXPECT_OVERFLOW; - CONVERT_DEC(VarI2FromDec,0,0x80,0,32768); EXPECT(-32768); - CONVERT_DEC(VarI2FromDec,0,0x80,0,1); EXPECT(-1); - CONVERT_DEC(VarI2FromDec,0,0,0,0); EXPECT(0); - CONVERT_DEC(VarI2FromDec,0,0,0,1); EXPECT(1); - CONVERT_DEC(VarI2FromDec,0,0,0,32767); EXPECT(32767); - CONVERT_DEC(VarI2FromDec,0,0,0,32768); EXPECT_OVERFLOW; - - CONVERT_DEC(VarI2FromDec,2,0x80,0,3276800); EXPECT(-32768); - CONVERT_DEC(VarI2FromDec,2,0,0,3276700); EXPECT(32767); - CONVERT_DEC(VarI2FromDec,2,0,0,3276800); EXPECT_OVERFLOW; -} - -static void test_VarI2FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarI2FromStr); - - CONVERT_STR(VarI2FromStr,NULL, 0); EXPECT_MISMATCH; - CONVERT_STR(VarI2FromStr,"0", 0); EXPECT(0); - CONVERT_STR(VarI2FromStr,"-32769", 0); EXPECT_OVERFLOW; - CONVERT_STR(VarI2FromStr,"-32768", 0); EXPECT(-32768); - CONVERT_STR(VarI2FromStr,"32767", 0); EXPECT(32767); - CONVERT_STR(VarI2FromStr,"32768", 0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT_STR(VarI2FromStr,"-1.5", LOCALE_NOUSEROVERRIDE); EXPECT(-2); - CONVERT_STR(VarI2FromStr,"-0.6", LOCALE_NOUSEROVERRIDE); EXPECT(-1); - CONVERT_STR(VarI2FromStr,"-0.5", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI2FromStr,"-0.4", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI2FromStr,"0.4", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI2FromStr,"0.5", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI2FromStr,"0.6", LOCALE_NOUSEROVERRIDE); EXPECT(1); - CONVERT_STR(VarI2FromStr,"1.5", LOCALE_NOUSEROVERRIDE); EXPECT(2); -} - -static void test_VarI2Copy(void) -{ - COPYTEST(1, VT_I2, V_I2(&vSrc), V_I2(&vDst), V_I2REF(&vSrc), V_I2REF(&vDst), "%d"); -} - -static void test_VarI2ChangeTypeEx(void) -{ - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - in = 1; - - INITIAL_TYPETEST(VT_I2, V_I2, "%d"); - COMMON_TYPETEST; - NEGATIVE_TYPETEST(VT_I2, V_I2, "%d", VT_UI2, V_UI2); -} - -#undef CONV_TYPE -#define CONV_TYPE USHORT - -static void test_VarUI2FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarUI2FromI1); - OVERFLOWRANGE(VarUI2FromI1, -128, 0); - CONVERTRANGE(VarUI2FromI1, 0, 128); -} - -static void test_VarUI2FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarUI2FromI2); - OVERFLOWRANGE(VarUI2FromI2, -32768, 0); - CONVERTRANGE(VarUI2FromI2, 0, 32768); -} - -static void test_VarUI2FromI4(void) -{ - CONVVARS(LONG); - int i; - - CHECKPTR(VarUI2FromI4); - OVERFLOWRANGE(VarUI2FromI4, -32768, 0); - CONVERT(VarUI2FromI4, 0); EXPECT(0); - CONVERT(VarUI2FromI4, 65535); EXPECT(65535); - CONVERT(VarUI2FromI4, 65536); EXPECT_OVERFLOW; -} - -static void test_VarUI2FromI8(void) -{ - CONVVARS(LONG64); - int i; - - CHECKPTR(VarUI2FromI8); - OVERFLOWRANGE(VarUI2FromI8, -32768, 0); - CONVERT(VarUI2FromI8, 0); EXPECT(0); - CONVERT(VarUI2FromI8, 65535); EXPECT(65535); - CONVERT(VarUI2FromI8, 65536); EXPECT_OVERFLOW; -} - -static void test_VarUI2FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarUI2FromUI1); - CONVERTRANGE(VarUI2FromUI1, 0, 256); -} - -static void test_VarUI2FromUI4(void) -{ - CONVVARS(ULONG); - - CHECKPTR(VarUI2FromUI4); - CONVERT(VarUI2FromUI4, 0); EXPECT(0); - CONVERT(VarUI2FromUI4, 65535); EXPECT(65535); - CONVERT(VarUI2FromUI4, 65536); EXPECT_OVERFLOW; -} - -static void test_VarUI2FromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarUI2FromUI8); - CONVERT(VarUI2FromUI8, 0); EXPECT(0); - CONVERT(VarUI2FromUI8, 65535); EXPECT(65535); - CONVERT(VarUI2FromUI8, 65536); EXPECT_OVERFLOW; -} - -static void test_VarUI2FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarUI2FromBool); - CONVERT(VarUI2FromBool, -1); EXPECT(65535); /* Wraps! */ - CONVERTRANGE(VarUI2FromBool, 0, 32768); -} - -static void test_VarUI2FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarUI2FromR4); - CONVERT(VarUI2FromR4, -1.0f); EXPECT_OVERFLOW; - CONVERT(VarUI2FromR4, 0.0f); EXPECT(0); - CONVERT(VarUI2FromR4, 1.0f); EXPECT(1); - CONVERT(VarUI2FromR4, 65535.0f); EXPECT(65535); - CONVERT(VarUI2FromR4, 65536.0f); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarUI2FromR4, -1.5f); EXPECT_OVERFLOW; - CONVERT(VarUI2FromR4, -0.6f); EXPECT_OVERFLOW; - CONVERT(VarUI2FromR4, -0.5f); EXPECT(0); - CONVERT(VarUI2FromR4, -0.4f); EXPECT(0); - CONVERT(VarUI2FromR4, 0.4f); EXPECT(0); - CONVERT(VarUI2FromR4, 0.5f); EXPECT(0); - CONVERT(VarUI2FromR4, 0.6f); EXPECT(1); - CONVERT(VarUI2FromR4, 1.5f); EXPECT(2); -} - -static void test_VarUI2FromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarUI2FromR8); - CONVERT(VarUI2FromR8, -1.0); EXPECT_OVERFLOW; - CONVERT(VarUI2FromR8, 0.0); EXPECT(0); - CONVERT(VarUI2FromR8, 1.0); EXPECT(1); - CONVERT(VarUI2FromR8, 65535.0); EXPECT(65535); - CONVERT(VarUI2FromR8, 65536.0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarUI2FromR8, -1.5); EXPECT_OVERFLOW; - CONVERT(VarUI2FromR8, -0.6); EXPECT_OVERFLOW; - CONVERT(VarUI2FromR8, -0.5); EXPECT(0); - CONVERT(VarUI2FromR8, -0.4); EXPECT(0); - CONVERT(VarUI2FromR8, 0.4); EXPECT(0); - CONVERT(VarUI2FromR8, 0.5); EXPECT(0); - CONVERT(VarUI2FromR8, 0.6); EXPECT(1); - CONVERT(VarUI2FromR8, 1.5); EXPECT(2); -} - -static void test_VarUI2FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarUI2FromDate); - CONVERT(VarUI2FromDate, -1.0); EXPECT_OVERFLOW; - CONVERT(VarUI2FromDate, 0.0); EXPECT(0); - CONVERT(VarUI2FromDate, 1.0); EXPECT(1); - CONVERT(VarUI2FromDate, 65535.0); EXPECT(65535); - CONVERT(VarUI2FromDate, 65536.0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarUI2FromDate, -1.5); EXPECT_OVERFLOW; - CONVERT(VarUI2FromDate, -0.6); EXPECT_OVERFLOW; - CONVERT(VarUI2FromDate, -0.5); EXPECT(0); - CONVERT(VarUI2FromDate, -0.4); EXPECT(0); - CONVERT(VarUI2FromDate, 0.4); EXPECT(0); - CONVERT(VarUI2FromDate, 0.5); EXPECT(0); - CONVERT(VarUI2FromDate, 0.6); EXPECT(1); - CONVERT(VarUI2FromDate, 1.5); EXPECT(2); -} - -static void test_VarUI2FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarUI2FromCy); - CONVERT_CY(VarUI2FromCy,-1); EXPECT_OVERFLOW; - CONVERT_CY(VarUI2FromCy,0); EXPECT(0); - CONVERT_CY(VarUI2FromCy,1); EXPECT(1); - CONVERT_CY(VarUI2FromCy,65535); EXPECT(65535); - CONVERT_CY(VarUI2FromCy,65536); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT_CY(VarUI2FromCy,-1.5); EXPECT_OVERFLOW; - CONVERT_CY(VarUI2FromCy,-0.6); EXPECT_OVERFLOW; - CONVERT_CY(VarUI2FromCy,-0.5); EXPECT(0); - CONVERT_CY(VarUI2FromCy,-0.4); EXPECT(0); - CONVERT_CY(VarUI2FromCy,0.4); EXPECT(0); - CONVERT_CY(VarUI2FromCy,0.5); EXPECT(0); - CONVERT_CY(VarUI2FromCy,0.6); EXPECT(1); - CONVERT_CY(VarUI2FromCy,1.5); EXPECT(2); -} - -static void test_VarUI2FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarUI2FromDec); - - CONVERT_BADDEC(VarUI2FromDec); - - CONVERT_DEC(VarUI2FromDec,0,0x80,0,1); EXPECT_OVERFLOW; - CONVERT_DEC(VarUI2FromDec,0,0,0,0); EXPECT(0); - CONVERT_DEC(VarUI2FromDec,0,0,0,1); EXPECT(1); - CONVERT_DEC(VarUI2FromDec,0,0,0,65535); EXPECT(65535); - CONVERT_DEC(VarUI2FromDec,0,0,0,65536); EXPECT_OVERFLOW; - - CONVERT_DEC(VarUI2FromDec,2,0x80,0,100); EXPECT_OVERFLOW; - CONVERT_DEC(VarUI2FromDec,2,0,0,6553500); EXPECT(65535); - CONVERT_DEC(VarUI2FromDec,2,0,0,6553600); EXPECT_OVERFLOW; -} - -static void test_VarUI2FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarUI2FromStr); - - CONVERT_STR(VarUI2FromStr,NULL, 0); EXPECT_MISMATCH; - CONVERT_STR(VarUI2FromStr,"0", 0); EXPECT(0); - CONVERT_STR(VarUI2FromStr,"-1", 0); EXPECT_OVERFLOW; - CONVERT_STR(VarUI2FromStr,"65535", 0); EXPECT(65535); - CONVERT_STR(VarUI2FromStr,"65536", 0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT_STR(VarUI2FromStr,"-1.5", LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; - CONVERT_STR(VarUI2FromStr,"-0.6", LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; - CONVERT_STR(VarUI2FromStr,"-0.5", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI2FromStr,"-0.4", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI2FromStr,"0.4", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI2FromStr,"0.5", LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI2FromStr,"0.6", LOCALE_NOUSEROVERRIDE); EXPECT(1); - CONVERT_STR(VarUI2FromStr,"1.5", LOCALE_NOUSEROVERRIDE); EXPECT(2); -} - -static void test_VarUI2Copy(void) -{ - if (!IS_ANCIENT) - { - COPYTEST(1, VT_UI2, V_UI2(&vSrc), V_UI2(&vDst), V_UI2REF(&vSrc), V_UI2REF(&vDst), "%d"); - } -} - -static void test_VarUI2ChangeTypeEx(void) -{ - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - in = 1; - - if (!IS_ANCIENT) - { - INITIAL_TYPETEST(VT_UI2, V_UI2, "%d"); - COMMON_TYPETEST; - NEGATIVE_TYPETEST(VT_UI2, V_UI2, "%d", VT_I2, V_I2); - } -} - -/* - * VT_I4/VT_UI4 - */ - -#undef CONV_TYPE -#define CONV_TYPE LONG -#undef EXPECTRES -#define EXPECTRES(res, x) _EXPECTRES(res, x, "%d") - - -static void test_VarI4FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarI4FromI1); - CONVERTRANGE(VarI4FromI1, -128, 128); -} - -static void test_VarI4FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarI4FromI2); - CONVERTRANGE(VarI4FromI2, -32768, 32768); -} - -static void test_VarI4FromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarI4FromI8); - CHECKPTR(VarI4FromDec); - - CONVERT(VarI4FromI8, -1); EXPECT(-1); - CONVERT(VarI4FromI8, 0); EXPECT(0); - CONVERT(VarI4FromI8, 1); EXPECT(1); - - CONVERT_I8(VarI4FromI8, -1, 2147483647ul); EXPECT_OVERFLOW; - CONVERT_I8(VarI4FromI8, -1, 2147483648ul); EXPECT(-2147483647 - 1); - CONVERT_I8(VarI4FromI8, 0, 2147483647ul); EXPECT(2147483647); - CONVERT_I8(VarI4FromI8, 0, 2147483648ul); EXPECT_OVERFLOW; -} - -static void test_VarI4FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarI4FromUI1); - CONVERTRANGE(VarI4FromUI1, 0, 256); -} - -static void test_VarI4FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarI4FromUI2); - CONVERTRANGE(VarI4FromUI2, 0, 65536); -} - -static void test_VarI4FromUI4(void) -{ - CONVVARS(ULONG); - - CHECKPTR(VarI4FromUI4); - CONVERT(VarI4FromUI4, 0); EXPECT(0); - CONVERT(VarI4FromUI4, 1); EXPECT(1); - CONVERT(VarI4FromUI4, 2147483647); EXPECT(2147483647); - CONVERT(VarI4FromUI4, 2147483648ul); EXPECT_OVERFLOW; -} - -static void test_VarI4FromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarI4FromUI8); - CONVERT(VarI4FromUI8, 0); EXPECT(0); - CONVERT(VarI4FromUI8, 1); EXPECT(1); - CONVERT(VarI4FromUI8, 2147483647); EXPECT(2147483647); - CONVERT(VarI4FromUI8, 2147483648ul); EXPECT_OVERFLOW; -} - -static void test_VarI4FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarI4FromBool); - CONVERTRANGE(VarI4FromBool, -32768, 32768); -} - -static void test_VarI4FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarI4FromR4); - - /* min/max values are not exactly representable in a float */ - CONVERT(VarI4FromR4, -1.0f); EXPECT(-1); - CONVERT(VarI4FromR4, 0.0f); EXPECT(0); - CONVERT(VarI4FromR4, 1.0f); EXPECT(1); - - CONVERT(VarI4FromR4, -1.5f); EXPECT(-2); - CONVERT(VarI4FromR4, -0.6f); EXPECT(-1); - CONVERT(VarI4FromR4, -0.5f); EXPECT(0); - CONVERT(VarI4FromR4, -0.4f); EXPECT(0); - CONVERT(VarI4FromR4, 0.4f); EXPECT(0); - CONVERT(VarI4FromR4, 0.5f); EXPECT(0); - CONVERT(VarI4FromR4, 0.6f); EXPECT(1); - CONVERT(VarI4FromR4, 1.5f); EXPECT(2); -} - -static void test_VarI4FromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarI4FromR8); - CONVERT(VarI4FromR8, -2147483649.0); EXPECT_OVERFLOW; - CONVERT(VarI4FromR8, -2147483648.0); EXPECT(-2147483647 - 1); - CONVERT(VarI4FromR8, -1.0); EXPECT(-1); - CONVERT(VarI4FromR8, 0.0); EXPECT(0); - CONVERT(VarI4FromR8, 1.0); EXPECT(1); - CONVERT(VarI4FromR8, 2147483647.0); EXPECT(2147483647); - CONVERT(VarI4FromR8, 2147483648.0); EXPECT_OVERFLOW; - - CONVERT(VarI4FromR8, -1.5); EXPECT(-2); - CONVERT(VarI4FromR8, -0.6); EXPECT(-1); - CONVERT(VarI4FromR8, -0.5); EXPECT(0); - CONVERT(VarI4FromR8, -0.4); EXPECT(0); - CONVERT(VarI4FromR8, 0.4); EXPECT(0); - CONVERT(VarI4FromR8, 0.5); EXPECT(0); - CONVERT(VarI4FromR8, 0.6); EXPECT(1); - CONVERT(VarI4FromR8, 1.5); EXPECT(2); -} - -static void test_VarI4FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarI4FromDate); - CONVERT(VarI4FromDate, -2147483649.0); EXPECT_OVERFLOW; - CONVERT(VarI4FromDate, -2147483648.0); EXPECT(-2147483647 - 1); - CONVERT(VarI4FromDate, -1.0); EXPECT(-1); - CONVERT(VarI4FromDate, 0.0); EXPECT(0); - CONVERT(VarI4FromDate, 1.0); EXPECT(1); - CONVERT(VarI4FromDate, 2147483647.0); EXPECT(2147483647); - CONVERT(VarI4FromDate, 2147483648.0); EXPECT_OVERFLOW; - - CONVERT(VarI4FromDate, -1.5); EXPECT(-2); - CONVERT(VarI4FromDate, -0.6); EXPECT(-1); - CONVERT(VarI4FromDate, -0.5); EXPECT(0); - CONVERT(VarI4FromDate, -0.4); EXPECT(0); - CONVERT(VarI4FromDate, 0.4); EXPECT(0); - CONVERT(VarI4FromDate, 0.5); EXPECT(0); - CONVERT(VarI4FromDate, 0.6); EXPECT(1); - CONVERT(VarI4FromDate, 1.5); EXPECT(2); -} - -static void test_VarI4FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarI4FromCy); - CONVERT_CY(VarI4FromCy,-1); EXPECT(-1); - CONVERT_CY(VarI4FromCy,0); EXPECT(0); - CONVERT_CY(VarI4FromCy,1); EXPECT(1); - - CONVERT_CY64(VarI4FromCy,-1,2147483647ul); EXPECT_OVERFLOW; - CONVERT_CY64(VarI4FromCy,-1,2147483648ul); EXPECT(-2147483647 - 1); - CONVERT_CY64(VarI4FromCy,0,2147483647ul); EXPECT(2147483647ul); - CONVERT_CY64(VarI4FromCy,0,2147483648ul); EXPECT_OVERFLOW; - - CONVERT_CY(VarI4FromCy,-1.5); EXPECT(-2); - CONVERT_CY(VarI4FromCy,-0.6); EXPECT(-1); - CONVERT_CY(VarI4FromCy,-0.5); EXPECT(0); - CONVERT_CY(VarI4FromCy,-0.4); EXPECT(0); - CONVERT_CY(VarI4FromCy,0.4); EXPECT(0); - CONVERT_CY(VarI4FromCy,0.5); EXPECT(0); - CONVERT_CY(VarI4FromCy,0.6); EXPECT(1); - CONVERT_CY(VarI4FromCy,1.5); EXPECT(2); -} - -static void test_VarI4FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarI4FromDec); - - CONVERT_BADDEC(VarI4FromDec); - - CONVERT_DEC(VarI4FromDec,0,0x80,0,1); EXPECT(-1); - CONVERT_DEC(VarI4FromDec,0,0,0,0); EXPECT(0); - CONVERT_DEC(VarI4FromDec,0,0,0,1); EXPECT(1); - - CONVERT_DEC64(VarI4FromDec,0,0x80,0,0,2147483649ul); EXPECT_OVERFLOW; - CONVERT_DEC64(VarI4FromDec,0,0x80,0,0,2147483648ul); EXPECT(-2147483647 - 1); - CONVERT_DEC64(VarI4FromDec,0,0,0,0,2147483647ul); EXPECT(2147483647ul); - CONVERT_DEC64(VarI4FromDec,0,0,0,0,2147483648ul); EXPECT_OVERFLOW; - - CONVERT_DEC64(VarI4FromDec,2,0x80,0,50,100); EXPECT_OVERFLOW; - CONVERT_DEC64(VarI4FromDec,2,0x80,0,50,0); EXPECT(-2147483647 - 1); - CONVERT_DEC64(VarI4FromDec,2,0,0,49,4294967196ul); EXPECT(2147483647); - CONVERT_DEC64(VarI4FromDec,2,0,0,50,0); EXPECT_OVERFLOW; -} - -static void test_VarI4FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarI4FromStr); - - CONVERT_STR(VarI4FromStr,NULL,0); EXPECT_MISMATCH; - CONVERT_STR(VarI4FromStr,"0",0); EXPECT(0); - CONVERT_STR(VarI4FromStr,"-2147483649",0); EXPECT_OVERFLOW; - CONVERT_STR(VarI4FromStr,"-2147483648",0); EXPECT(-2147483647 -1); - CONVERT_STR(VarI4FromStr,"2147483647",0); EXPECT(2147483647); - CONVERT_STR(VarI4FromStr,"2147483648",0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT_STR(VarI4FromStr,"-1.5",LOCALE_NOUSEROVERRIDE); EXPECT(-2); - CONVERT_STR(VarI4FromStr,"-0.6",LOCALE_NOUSEROVERRIDE); EXPECT(-1); - CONVERT_STR(VarI4FromStr,"-0.5",LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI4FromStr,"-0.4",LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI4FromStr,"0.4",LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI4FromStr,"0.5",LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarI4FromStr,"0.6",LOCALE_NOUSEROVERRIDE); EXPECT(1); - CONVERT_STR(VarI4FromStr,"1.5",LOCALE_NOUSEROVERRIDE); EXPECT(2); -} - -static void test_VarI4Copy(void) -{ - COPYTEST(1, VT_I4, V_I4(&vSrc), V_I4(&vDst), V_I4REF(&vSrc), V_I4REF(&vDst), "%d"); -} - -static void test_VarI4ChangeTypeEx(void) -{ - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - in = 1; - - INITIAL_TYPETEST(VT_I4, V_I4, "%d"); - COMMON_TYPETEST; - NEGATIVE_TYPETEST(VT_I4, V_I4, "%d", VT_UI4, V_UI4); -} - -#undef CONV_TYPE -#define CONV_TYPE ULONG -#undef EXPECTRES -#define EXPECTRES(res, x) _EXPECTRES(res, x, "%u") - -static void test_VarUI4FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarUI4FromI1); - OVERFLOWRANGE(VarUI4FromI1, -127, 0); - CONVERTRANGE(VarUI4FromI1, 0, 128); -} - -static void test_VarUI4FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarUI4FromI2); - OVERFLOWRANGE(VarUI4FromI2, -32768, 0); - CONVERTRANGE(VarUI4FromI2, 0, 32768); -} - -static void test_VarUI4FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarUI4FromUI2); - CONVERTRANGE(VarUI4FromUI2, 0, 65536); -} - -static void test_VarUI4FromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarUI4FromI8); - CONVERT(VarUI4FromI8, -1); EXPECT_OVERFLOW; - CONVERT(VarUI4FromI8, 0); EXPECT(0); - CONVERT(VarUI4FromI8, 1); EXPECT(1); - CONVERT(VarUI4FromI8, 4294967295ul); EXPECT(4294967295ul); - CONVERT_I8(VarUI4FromI8, 1, 0); EXPECT_OVERFLOW; -} - -static void test_VarUI4FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarUI4FromUI1); - CONVERTRANGE(VarUI4FromUI1, 0, 256); -} - -static void test_VarUI4FromI4(void) -{ - CONVVARS(int); - - CHECKPTR(VarUI4FromI4); - CONVERT(VarUI4FromI4, -1); EXPECT_OVERFLOW; - CONVERT(VarUI4FromI4, 0); EXPECT(0); - CONVERT(VarUI4FromI4, 1); EXPECT(1); - CONVERT(VarUI4FromI4, 2147483647); EXPECT(2147483647); -} - -static void test_VarUI4FromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarUI4FromUI8); - CONVERT(VarUI4FromUI8, 0); EXPECT(0); - CONVERT(VarUI4FromUI8, 1); EXPECT(1); - CONVERT(VarUI4FromI8, 4294967295ul); EXPECT(4294967295ul); - CONVERT_I8(VarUI4FromI8, 1, 0); EXPECT_OVERFLOW; -} - -static void test_VarUI4FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarUI4FromBool); - CONVERTRANGE(VarUI4FromBool, -32768, 32768); -} - -static void test_VarUI4FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarUI4FromR4); - /* We can't test max values as they are not exactly representable in a float */ - CONVERT(VarUI4FromR4, -1.0f); EXPECT_OVERFLOW; - CONVERT(VarUI4FromR4, 0.0f); EXPECT(0); - CONVERT(VarUI4FromR4, 1.0f); EXPECT(1); - - CONVERT(VarUI4FromR4, -1.5f); EXPECT_OVERFLOW; - CONVERT(VarUI4FromR4, -0.6f); EXPECT_OVERFLOW; - CONVERT(VarUI4FromR4, -0.5f); EXPECT(0); - CONVERT(VarUI4FromR4, -0.4f); EXPECT(0); - CONVERT(VarUI4FromR4, 0.4f); EXPECT(0); - CONVERT(VarUI4FromR4, 0.5f); EXPECT(0); - CONVERT(VarUI4FromR4, 0.6f); EXPECT(1); - CONVERT(VarUI4FromR4, 1.5f); EXPECT(2); - -} - -static void test_VarUI4FromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarUI4FromR8); - CONVERT(VarUI4FromR8, -1.0); EXPECT_OVERFLOW; - CONVERT(VarUI4FromR8, 0.0); EXPECT(0); - CONVERT(VarUI4FromR8, 1.0); EXPECT(1); - CONVERT(VarUI4FromR8, 4294967295.0); EXPECT(4294967295ul); - CONVERT(VarUI4FromR8, 4294967296.0); EXPECT_OVERFLOW; - - CONVERT(VarUI4FromR8, -1.5); EXPECT_OVERFLOW; - CONVERT(VarUI4FromR8, -0.6); EXPECT_OVERFLOW; - CONVERT(VarUI4FromR8, -0.5); EXPECT(0); - CONVERT(VarUI4FromR8, -0.4); EXPECT(0); - CONVERT(VarUI4FromR8, 0.4); EXPECT(0); - CONVERT(VarUI4FromR8, 0.5); EXPECT(0); - CONVERT(VarUI4FromR8, 0.6); EXPECT(1); - CONVERT(VarUI4FromR8, 1.5); EXPECT(2); -} - -static void test_VarUI4FromDate(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarUI4FromDate); - CONVERT(VarUI4FromDate, -1.0); EXPECT_OVERFLOW; - CONVERT(VarUI4FromDate, 0.0); EXPECT(0); - CONVERT(VarUI4FromDate, 1.0); EXPECT(1); - CONVERT(VarUI4FromDate, 4294967295.0); EXPECT(4294967295ul); - CONVERT(VarUI4FromDate, 4294967296.0); EXPECT_OVERFLOW; - - CONVERT(VarUI4FromDate, -1.5); EXPECT_OVERFLOW; - CONVERT(VarUI4FromDate, -0.6); EXPECT_OVERFLOW; - CONVERT(VarUI4FromDate, -0.5); EXPECT(0); - CONVERT(VarUI4FromDate, -0.4); EXPECT(0); - CONVERT(VarUI4FromDate, 0.4); EXPECT(0); - CONVERT(VarUI4FromDate, 0.5); EXPECT(0); - CONVERT(VarUI4FromDate, 0.6); EXPECT(1); - CONVERT(VarUI4FromDate, 1.5); EXPECT(2); -} - -static void test_VarUI4FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarUI4FromCy); - CONVERT_CY(VarUI4FromCy,-1); EXPECT_OVERFLOW; - CONVERT_CY(VarUI4FromCy,0); EXPECT(0); - CONVERT_CY(VarUI4FromCy,1); EXPECT(1); - CONVERT_CY64(VarUI4FromCy,0,4294967295ul); EXPECT(4294967295ul); - CONVERT_CY64(VarUI4FromCy,1,0); EXPECT_OVERFLOW; - - CONVERT_CY(VarUI4FromCy,-1.5); EXPECT_OVERFLOW; - CONVERT_CY(VarUI4FromCy,-0.6); EXPECT_OVERFLOW; - CONVERT_CY(VarUI4FromCy,-0.5); EXPECT(0); - CONVERT_CY(VarUI4FromCy,-0.4); EXPECT(0); - CONVERT_CY(VarUI4FromCy,0.4); EXPECT(0); - CONVERT_CY(VarUI4FromCy,0.5); EXPECT(0); - CONVERT_CY(VarUI4FromCy,0.6); EXPECT(1); - CONVERT_CY(VarUI4FromCy,1.5); EXPECT(2); -} - -static void test_VarUI4FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarUI4FromDec); - - CONVERT_BADDEC(VarUI4FromDec); - - CONVERT_DEC(VarUI4FromDec,0,0x80,0,1); EXPECT_OVERFLOW; - CONVERT_DEC(VarUI4FromDec,0,0,0,0); EXPECT(0); - CONVERT_DEC(VarUI4FromDec,0,0,0,1); EXPECT(1); - CONVERT_DEC64(VarUI4FromDec,0,0,0,0,4294967295ul); EXPECT(4294967295ul); - CONVERT_DEC64(VarUI4FromDec,0,0,0,1,0); EXPECT_OVERFLOW; - - CONVERT_DEC64(VarUI4FromDec,2,0,0,99,4294967196ul); EXPECT(4294967295ul); - CONVERT_DEC64(VarUI4FromDec,2,0,0,100,0); EXPECT_OVERFLOW; -} - -static void test_VarUI4FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarUI4FromStr); - - CONVERT_STR(VarUI4FromStr,NULL,0); EXPECT_MISMATCH; - CONVERT_STR(VarUI4FromStr,"-1",0); EXPECT_OVERFLOW; - CONVERT_STR(VarUI4FromStr,"0",0); EXPECT(0); - CONVERT_STR(VarUI4FromStr,"4294967295",0); EXPECT(4294967295ul); - CONVERT_STR(VarUI4FromStr,"4294967296",0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT_STR(VarUI4FromStr,"-1.5",LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; - CONVERT_STR(VarUI4FromStr,"-0.6",LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; - CONVERT_STR(VarUI4FromStr,"-0.5",LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI4FromStr,"-0.4",LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI4FromStr,"0.4",LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI4FromStr,"0.5",LOCALE_NOUSEROVERRIDE); EXPECT(0); - CONVERT_STR(VarUI4FromStr,"0.6",LOCALE_NOUSEROVERRIDE); EXPECT(1); - CONVERT_STR(VarUI4FromStr,"1.5",LOCALE_NOUSEROVERRIDE); EXPECT(2); -} - -static void test_VarUI4Copy(void) -{ - if (!IS_ANCIENT) - { - COPYTEST(1u, VT_UI4, V_UI4(&vSrc), V_UI4(&vDst), V_UI4REF(&vSrc), V_UI4REF(&vDst), "%u"); - } -} - -static void test_VarUI4ChangeTypeEx(void) -{ - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - in = 1; - - if (!IS_ANCIENT) - { - INITIAL_TYPETEST(VT_UI4, V_UI4, "%u"); - COMMON_TYPETEST; - NEGATIVE_TYPETEST(VT_UI4, V_UI4, "%u", VT_I4, V_I4); - } -} - -/* - * VT_I8/VT_UI8 - */ - -#undef CONV_TYPE -#define CONV_TYPE LONG64 -#undef EXPECTRES -#define EXPECTRES(res, x) \ - ok(hres == S_OK || ((HRESULT)res != S_OK && hres == (HRESULT)res), \ - "expected hres " #x ", got hres=0x%08x\n", hres) - -#define EXPECTI8(x) \ - ok((hres == S_OK && out == (CONV_TYPE)(x)), \ - "expected " #x "(%u,%u), got (%u,%u); hres=0x%08x\n", \ - (ULONG)((LONG64)(x) >> 32), (ULONG)((x) & 0xffffffff), \ - (ULONG)(out >> 32), (ULONG)(out & 0xffffffff), hres) - -#define EXPECTI864(x,y) \ - ok(hres == S_OK && (out >> 32) == (CONV_TYPE)(x) && (out & 0xffffffff) == (CONV_TYPE)(y), \ - "expected " #x "(%u,%u), got (%u,%u); hres=0x%08x\n", \ - (ULONG)(x), (ULONG)(y), \ - (ULONG)(out >> 32), (ULONG)(out & 0xffffffff), hres) - -static void test_VarI8FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarI8FromI1); - for (i = -128; i < 128; i++) - { - CONVERT(VarI8FromI1,i); EXPECTI8(i); - } -} - -static void test_VarI8FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarI8FromUI1); - for (i = 0; i < 256; i++) - { - CONVERT(VarI8FromUI1,i); EXPECTI8(i); - } -} - -static void test_VarI8FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarI8FromI2); - for (i = -32768; i < 32768; i++) - { - CONVERT(VarI8FromI2,i); EXPECTI8(i); - } -} - -static void test_VarI8FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarI8FromUI2); - for (i = -0; i < 65535; i++) - { - CONVERT(VarI8FromUI2,i); EXPECTI8(i); - } -} - -static void test_VarI8FromUI4(void) -{ - CONVVARS(ULONG); - - CHECKPTR(VarI8FromUI4); - CONVERT(VarI8FromUI4, 0); EXPECTI8(0); - CONVERT(VarI8FromUI4, 1); EXPECTI8(1); - CONVERT(VarI8FromUI4, 4294967295ul); EXPECTI8(4294967295ul); -} - -static void test_VarI8FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarI8FromR4); - - CONVERT(VarI8FromR4, -128.0f); EXPECTI8(-128); - CONVERT(VarI8FromR4, -1.0f); EXPECTI8(-1); - CONVERT(VarI8FromR4, 0.0f); EXPECTI8(0); - CONVERT(VarI8FromR4, 1.0f); EXPECTI8(1); - CONVERT(VarI8FromR4, 127.0f); EXPECTI8(127); - - CONVERT(VarI8FromR4, -1.5f); EXPECTI8(-2); - CONVERT(VarI8FromR4, -0.6f); EXPECTI8(-1); - CONVERT(VarI8FromR4, -0.5f); EXPECTI8(0); - CONVERT(VarI8FromR4, -0.4f); EXPECTI8(0); - CONVERT(VarI8FromR4, 0.4f); EXPECTI8(0); - CONVERT(VarI8FromR4, 0.5f); EXPECTI8(0); - CONVERT(VarI8FromR4, 0.6f); EXPECTI8(1); - CONVERT(VarI8FromR4, 1.5f); EXPECTI8(2); -} - -static void test_VarI8FromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarI8FromR8); - CONVERT(VarI8FromR8, -128.0); EXPECTI8(-128); - CONVERT(VarI8FromR8, -1.0); EXPECTI8(-1); - CONVERT(VarI8FromR8, 0.0); EXPECTI8(0); - CONVERT(VarI8FromR8, 1.0); EXPECTI8(1); - CONVERT(VarI8FromR8, 127.0); EXPECTI8(127); - - CONVERT(VarI8FromR8, -1.5); EXPECTI8(-2); - CONVERT(VarI8FromR8, -0.6); EXPECTI8(-1); - CONVERT(VarI8FromR8, -0.5); EXPECTI8(0); - CONVERT(VarI8FromR8, -0.4); EXPECTI8(0); - CONVERT(VarI8FromR8, 0.4); EXPECTI8(0); - CONVERT(VarI8FromR8, 0.5); EXPECTI8(0); - CONVERT(VarI8FromR8, 0.6); EXPECTI8(1); - CONVERT(VarI8FromR8, 1.5); EXPECTI8(2); -} - -static void test_VarI8FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarI8FromDate); - CONVERT(VarI8FromDate, -128.0); EXPECTI8(-128); - CONVERT(VarI8FromDate, -1.0); EXPECTI8(-1); - CONVERT(VarI8FromDate, 0.0); EXPECTI8(0); - CONVERT(VarI8FromDate, 1.0); EXPECTI8(1); - CONVERT(VarI8FromDate, 127.0); EXPECTI8(127); - - CONVERT(VarI8FromDate, -1.5); EXPECTI8(-2); - CONVERT(VarI8FromDate, -0.6); EXPECTI8(-1); - CONVERT(VarI8FromDate, -0.5); EXPECTI8(0); - CONVERT(VarI8FromDate, -0.4); EXPECTI8(0); - CONVERT(VarI8FromDate, 0.4); EXPECTI8(0); - CONVERT(VarI8FromDate, 0.5); EXPECTI8(0); - CONVERT(VarI8FromDate, 0.6); EXPECTI8(1); - CONVERT(VarI8FromDate, 1.5); EXPECTI8(2); -} - -static void test_VarI8FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarI8FromBool); - for (i = -32768; i < 32768; i++) - { - CONVERT(VarI8FromBool,i); EXPECTI8(i); - } -} - -static void test_VarI8FromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarI8FromUI8); - CONVERT(VarI8FromUI8, 0); EXPECTI8(0); - CONVERT(VarI8FromUI8, 1); EXPECTI8(1); - CONVERT_I8(VarI8FromUI8, 0x7fffffff, 0xffffffff); EXPECTI864(0x7fffffff, 0xffffffff); - CONVERT_I8(VarI8FromUI8, 0x80000000, 0); EXPECT_OVERFLOW; -} - -static void test_VarI8FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarI8FromCy); - CONVERT_CY(VarI8FromCy,-128); EXPECTI8(-129); - CONVERT_CY(VarI8FromCy,-1); EXPECTI8(-2); - CONVERT_CY(VarI8FromCy,0); EXPECTI8(0); - CONVERT_CY(VarI8FromCy,1); EXPECTI8(1); - CONVERT_CY(VarI8FromCy,127); EXPECTI8(127); - - CONVERT_CY(VarI8FromCy,-1.5); EXPECTI8(-2); - CONVERT_CY(VarI8FromCy,-0.6); EXPECTI8(-1); - CONVERT_CY(VarI8FromCy,-0.5); EXPECTI8(-1); - CONVERT_CY(VarI8FromCy,-0.4); EXPECTI8(-1); - CONVERT_CY(VarI8FromCy,0.4); EXPECTI8(0); - CONVERT_CY(VarI8FromCy,0.5); EXPECTI8(0); - CONVERT_CY(VarI8FromCy,0.6); EXPECTI8(1); - CONVERT_CY(VarI8FromCy,1.5); EXPECTI8(2); -} - -static void test_VarI8FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarI8FromDec); - - CONVERT_BADDEC(VarI8FromDec); - - CONVERT_DEC(VarI8FromDec,0,0x80,0,128); EXPECTI8(-128); - CONVERT_DEC(VarI8FromDec,0,0x80,0,1); EXPECTI8(-1); - CONVERT_DEC(VarI8FromDec,0,0,0,0); EXPECTI8(0); - CONVERT_DEC(VarI8FromDec,0,0,0,1); EXPECTI8(1); - CONVERT_DEC(VarI8FromDec,0,0,0,127); EXPECTI8(127); - - CONVERT_DEC(VarI8FromDec,2,0x80,0,12700); EXPECTI8(-127); - CONVERT_DEC(VarI8FromDec,2,0,0,12700); EXPECTI8(127); -} - -static void test_VarI8FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarI8FromStr); - - CONVERT_STR(VarI8FromStr,NULL,0); EXPECT_MISMATCH; - CONVERT_STR(VarI8FromStr,"0",0); EXPECTI8(0); - CONVERT_STR(VarI8FromStr,"-1",0); EXPECTI8(-1); - CONVERT_STR(VarI8FromStr,"2147483647",0); EXPECTI8(2147483647); - - CONVERT_STR(VarI8FromStr,"-1.5",LOCALE_NOUSEROVERRIDE); EXPECTI8(-2); - CONVERT_STR(VarI8FromStr,"-0.6",LOCALE_NOUSEROVERRIDE); EXPECTI8(-1); - CONVERT_STR(VarI8FromStr,"-0.5",LOCALE_NOUSEROVERRIDE); EXPECTI8(0); - CONVERT_STR(VarI8FromStr,"-0.4",LOCALE_NOUSEROVERRIDE); EXPECTI8(0); - CONVERT_STR(VarI8FromStr,"0.4",LOCALE_NOUSEROVERRIDE); EXPECTI8(0); - CONVERT_STR(VarI8FromStr,"0.5",LOCALE_NOUSEROVERRIDE); EXPECTI8(0); - CONVERT_STR(VarI8FromStr,"0.6",LOCALE_NOUSEROVERRIDE); EXPECTI8(1); - CONVERT_STR(VarI8FromStr,"1.5",LOCALE_NOUSEROVERRIDE); EXPECTI8(2); -} - -static void test_VarI8Copy(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - LONGLONG in = 1; - - if (!HAVE_OLEAUT32_I8) - { - skip("I8 and UI8 data types are not available\n"); - return; - } - - VariantInit(&vSrc); - VariantInit(&vDst); - V_VT(&vSrc) = VT_I8; - V_I8(&vSrc) = in; - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && V_VT(&vDst) == VT_I8 && V_I8(&vDst) == in, - "copy hres 0x%X, type %d, value (%x%08x) %x%08x\n", - hres, V_VT(&vDst), (UINT)(in >> 32), (UINT)in, (UINT)(V_I8(&vDst) >> 32), (UINT)V_I8(&vDst) ); - V_VT(&vSrc) = VT_I8|VT_BYREF; - V_I8REF(&vSrc) = ∈ - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && V_VT(&vDst) == (VT_I8|VT_BYREF) && V_I8REF(&vDst) == &in, - "ref hres 0x%X, type %d, ref (%p) %p\n", hres, V_VT(&vDst), &in, V_I8REF(&vDst)); - hres = VariantCopyInd(&vDst, &vSrc); - ok(hres == S_OK && V_VT(&vDst) == VT_I8 && V_I8(&vDst) == in, - "copy hres 0x%X, type %d, value (%x%08x) %x%08x\n", - hres, V_VT(&vDst), (UINT)(in >> 32), (UINT)in, (UINT)(V_I8(&vDst) >> 32), (UINT)V_I8(&vDst) ); -} - -static void test_VarI8ChangeTypeEx(void) -{ - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - if (!HAVE_OLEAUT32_I8) - { - skip("I8 and UI8 data types are not available\n"); - return; - } - - in = 1; - - INITIAL_TYPETESTI8(VT_I8, V_I8); - COMMON_TYPETEST; -} - -/* Adapt the test macros to UI8 */ -#undef CONV_TYPE -#define CONV_TYPE ULONG64 - -static void test_VarUI8FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarUI8FromI1); - for (i = -128; i < 128; i++) - { - CONVERT(VarUI8FromI1,i); - if (i < 0) - EXPECT_OVERFLOW; - else - EXPECTI8(i); - } -} - -static void test_VarUI8FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarUI8FromUI1); - for (i = 0; i < 256; i++) - { - CONVERT(VarUI8FromUI1,i); EXPECTI8(i); - } -} - -static void test_VarUI8FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarUI8FromI2); - for (i = -32768; i < 32768; i++) - { - CONVERT(VarUI8FromI2,i); - if (i < 0) - EXPECT_OVERFLOW; - else - EXPECTI8(i); - } -} - -static void test_VarUI8FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarUI8FromUI2); - for (i = 0; i < 65535; i++) - { - CONVERT(VarUI8FromUI2,i); EXPECTI8(i); - } -} - -static void test_VarUI8FromUI4(void) -{ - CONVVARS(ULONG); - - CHECKPTR(VarUI8FromUI4); - CONVERT(VarUI8FromUI4, 0); EXPECTI8(0); - CONVERT(VarUI8FromUI4, 0xffffffff); EXPECTI8(0xffffffff); -} - -static void test_VarUI8FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarUI8FromR4); - CONVERT(VarUI8FromR4, -1.0f); EXPECT_OVERFLOW; - CONVERT(VarUI8FromR4, 0.0f); EXPECTI8(0); - CONVERT(VarUI8FromR4, 1.0f); EXPECTI8(1); - CONVERT(VarUI8FromR4, 255.0f); EXPECTI8(255); - - CONVERT(VarUI8FromR4, -1.5f); EXPECT_OVERFLOW; - CONVERT(VarUI8FromR4, -0.6f); EXPECT_OVERFLOW; - CONVERT(VarUI8FromR4, -0.5f); EXPECTI8(0); - CONVERT(VarUI8FromR4, -0.4f); EXPECTI8(0); - CONVERT(VarUI8FromR4, 0.4f); EXPECTI8(0); - CONVERT(VarUI8FromR4, 0.5f); EXPECTI8(0); - CONVERT(VarUI8FromR4, 0.6f); EXPECTI8(1); - CONVERT(VarUI8FromR4, 1.5f); EXPECTI8(2); -} - -static void test_VarUI8FromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarUI8FromR8); - CONVERT(VarUI8FromR8, -1.0); EXPECT_OVERFLOW; - CONVERT(VarUI8FromR8, 0.0); EXPECTI8(0); - CONVERT(VarUI8FromR8, 1.0); EXPECTI8(1); - CONVERT(VarUI8FromR8, 255.0); EXPECTI8(255); - - CONVERT(VarUI8FromR8, -1.5); EXPECT_OVERFLOW; - CONVERT(VarUI8FromR8, -0.6); EXPECT_OVERFLOW; - CONVERT(VarUI8FromR8, -0.5); EXPECTI8(0); - CONVERT(VarUI8FromR8, -0.4); EXPECTI8(0); - CONVERT(VarUI8FromR8, 0.4); EXPECTI8(0); - CONVERT(VarUI8FromR8, 0.5); EXPECTI8(0); - CONVERT(VarUI8FromR8, 0.6); EXPECTI8(1); - CONVERT(VarUI8FromR8, 1.5); EXPECTI8(2); -} - -static void test_VarUI8FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarUI8FromDate); - CONVERT(VarUI8FromDate, -1.0); EXPECT_OVERFLOW; - CONVERT(VarUI8FromDate, 0.0); EXPECTI8(0); - CONVERT(VarUI8FromDate, 1.0); EXPECTI8(1); - CONVERT(VarUI8FromDate, 255.0); EXPECTI8(255); - - CONVERT(VarUI8FromDate, -1.5); EXPECT_OVERFLOW; - CONVERT(VarUI8FromDate, -0.6); EXPECT_OVERFLOW; - CONVERT(VarUI8FromDate, -0.5); EXPECTI8(0); - CONVERT(VarUI8FromDate, -0.4); EXPECTI8(0); - CONVERT(VarUI8FromDate, 0.4); EXPECTI8(0); - CONVERT(VarUI8FromDate, 0.5); EXPECTI8(0); - CONVERT(VarUI8FromDate, 0.6); EXPECTI8(1); - CONVERT(VarUI8FromDate, 1.5); EXPECTI8(2); -} - -static void test_VarUI8FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarUI8FromBool); - CONVERTRANGE(VarUI8FromBool, -32768, 32768); -} - -static void test_VarUI8FromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarUI8FromI8); - CONVERT(VarUI8FromI8, -1); EXPECT_OVERFLOW; - CONVERT(VarUI8FromI8, 0); EXPECTI8(0); - CONVERT(VarUI8FromI8, 1); EXPECTI8(1); -} - -static void test_VarUI8FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarUI8FromCy); - CONVERT_CY(VarUI8FromCy,-1); EXPECT_OVERFLOW; - CONVERT_CY(VarUI8FromCy,0); EXPECTI8(0); - CONVERT_CY(VarUI8FromCy,1); EXPECTI8(1); - CONVERT_CY(VarUI8FromCy,255); EXPECTI8(255); - - CONVERT_CY(VarUI8FromCy,-1.5); EXPECT_OVERFLOW; - CONVERT_CY(VarUI8FromCy,-0.6); EXPECT_OVERFLOW; - CONVERT_CY(VarUI8FromCy,-0.5); EXPECTI8(0); - CONVERT_CY(VarUI8FromCy,-0.4); EXPECTI8(0); - CONVERT_CY(VarUI8FromCy,0.4); EXPECTI8(0); - CONVERT_CY(VarUI8FromCy,0.5); EXPECTI8(0); - CONVERT_CY(VarUI8FromCy,0.6); EXPECTI8(1); - CONVERT_CY(VarUI8FromCy,1.5); EXPECTI8(2); -} - -static void test_VarUI8FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarUI8FromDec); - - CONVERT_BADDEC(VarUI8FromDec); - - /* This returns 1 under native; Wine fixes this bug and returns overflow */ - if (0) - { - CONVERT_DEC(VarUI8FromDec,0,0x80,0,1); - } - - CONVERT_DEC(VarUI8FromDec,0,0,0,0); EXPECTI8(0); - CONVERT_DEC(VarUI8FromDec,0,0,0,1); EXPECTI8(1); - CONVERT_DEC(VarUI8FromDec,0,0,0,255); EXPECTI8(255); - - CONVERT_DEC(VarUI8FromDec,2,0x80,0,100); EXPECT_OVERFLOW; - CONVERT_DEC(VarUI8FromDec,2,0,0,25500); EXPECTI8(255); -} - -static void test_VarUI8FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarUI8FromStr); - - CONVERT_STR(VarUI8FromStr,NULL,0); EXPECT_MISMATCH; - CONVERT_STR(VarUI8FromStr,"0",0); EXPECTI8(0); - CONVERT_STR(VarUI8FromStr,"-1",0); EXPECT_OVERFLOW; - CONVERT_STR(VarUI8FromStr,"2147483647",0); EXPECTI8(2147483647); - - CONVERT_STR(VarUI8FromStr,"-1.5",LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; - CONVERT_STR(VarUI8FromStr,"-0.6",LOCALE_NOUSEROVERRIDE); EXPECT_OVERFLOW; - CONVERT_STR(VarUI8FromStr,"-0.5",LOCALE_NOUSEROVERRIDE); EXPECTI8(0); - CONVERT_STR(VarUI8FromStr,"-0.4",LOCALE_NOUSEROVERRIDE); EXPECTI8(0); - CONVERT_STR(VarUI8FromStr,"0.4",LOCALE_NOUSEROVERRIDE); EXPECTI8(0); - CONVERT_STR(VarUI8FromStr,"0.5",LOCALE_NOUSEROVERRIDE); EXPECTI8(0); - CONVERT_STR(VarUI8FromStr,"0.6",LOCALE_NOUSEROVERRIDE); EXPECTI8(1); - CONVERT_STR(VarUI8FromStr,"1.5",LOCALE_NOUSEROVERRIDE); EXPECTI8(2); -} - -static void test_VarUI8Copy(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - ULONGLONG in = 1; - - if (!HAVE_OLEAUT32_I8) - { - skip("I8 and UI8 data types are not available\n"); - return; - } - - VariantInit(&vSrc); - VariantInit(&vDst); - V_VT(&vSrc) = VT_UI8; - V_UI8(&vSrc) = in; - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && V_VT(&vDst) == VT_UI8 && V_UI8(&vDst) == in, - "copy hres 0x%X, type %d, value (%x%08x) %x%08x\n", - hres, V_VT(&vDst), (UINT)(in >> 32), (UINT)in, (UINT)(V_UI8(&vDst) >> 32), (UINT)V_UI8(&vDst) ); - V_VT(&vSrc) = VT_UI8|VT_BYREF; - V_UI8REF(&vSrc) = ∈ - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && V_VT(&vDst) == (VT_UI8|VT_BYREF) && V_UI8REF(&vDst) == &in, - "ref hres 0x%X, type %d, ref (%p) %p\n", hres, V_VT(&vDst), &in, V_UI8REF(&vDst)); - hres = VariantCopyInd(&vDst, &vSrc); - ok(hres == S_OK && V_VT(&vDst) == VT_UI8 && V_UI8(&vDst) == in, - "copy hres 0x%X, type %d, value (%x%08x) %x%08x\n", - hres, V_VT(&vDst), (UINT)(in >> 32), (UINT)in, (UINT)(V_UI8(&vDst) >> 32), (UINT)V_UI8(&vDst) ); -} - -static void test_VarUI8ChangeTypeEx(void) -{ - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - if (!HAVE_OLEAUT32_I8) - { - skip("I8 and UI8 data types are not available\n"); - return; - } - - in = 1; - - INITIAL_TYPETESTI8(VT_UI8, V_UI8); - COMMON_TYPETEST; -} - -/* - * VT_R4 - */ - -#undef CONV_TYPE -#define CONV_TYPE float -#undef EXPECTRES -#define EXPECTRES(res, x) _EXPECTRES(res, x, "%15.15f") - -static void test_VarR4FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarR4FromI1); - CONVERTRANGE(VarR4FromI1, -128, 128); -} - -static void test_VarR4FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarR4FromUI1); - CONVERTRANGE(VarR4FromUI1, 0, 256); -} - -static void test_VarR4FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarR4FromI2); - CONVERTRANGE(VarR4FromI2, -32768, 32768); -} - -static void test_VarR4FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarR4FromUI2); - CONVERTRANGE(VarR4FromUI2, 0, 65536); -} - -static void test_VarR4FromI4(void) -{ - CONVVARS(int); - - CHECKPTR(VarR4FromI4); - CONVERT(VarR4FromI4, -2147483647-1); EXPECT(-2147483648.0f); - CONVERT(VarR4FromI4, -1); EXPECT(-1.0f); - CONVERT(VarR4FromI4, 0); EXPECT(0.0f); - CONVERT(VarR4FromI4, 1); EXPECT(1.0f); - CONVERT(VarR4FromI4, 2147483647); EXPECT(2147483647.0f); -} - -static void test_VarR4FromUI4(void) -{ - CONVVARS(unsigned int); - - CHECKPTR(VarR4FromUI4); - CONVERT(VarR4FromUI4, 0); EXPECT(0.0f); - CONVERT(VarR4FromUI4, 1); EXPECT(1.0f); -#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__)) - CONVERT(VarR4FromUI4, 0xffffffff); EXPECT(4294967296.0f); -#endif -} - -static void test_VarR4FromR8(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarR4FromR8); - CONVERT(VarR4FromR8, -1.0); EXPECT(-1.0f); - CONVERT(VarR4FromR8, 0.0); EXPECT(0.0f); - CONVERT(VarR4FromR8, 1.0); EXPECT(1.0f); - CONVERT(VarR4FromR8, 1.5); EXPECT(1.5f); - - /* Skip rounding tests - no rounding is done */ -} - -static void test_VarR4FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - - CHECKPTR(VarR4FromBool); - CONVERT(VarR4FromBool, VARIANT_TRUE); EXPECT(VARIANT_TRUE * 1.0f); - CONVERT(VarR4FromBool, VARIANT_FALSE); EXPECT(VARIANT_FALSE * 1.0f); -} - -static void test_VarR4FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarR4FromCy); - CONVERT_CY(VarR4FromCy,-32768); EXPECT(-32768.0f); - CONVERT_CY(VarR4FromCy,-1); EXPECT(-1.0f); - CONVERT_CY(VarR4FromCy,0); EXPECT(0.0f); - CONVERT_CY(VarR4FromCy,1); EXPECT(1.0f); - CONVERT_CY(VarR4FromCy,32768); EXPECT(32768.0f); - - CONVERT_CY(VarR4FromCy,-1.5); EXPECT(-1.5f); - CONVERT_CY(VarR4FromCy,-0.6); EXPECT(-0.6f); - CONVERT_CY(VarR4FromCy,-0.5); EXPECT(-0.5f); - CONVERT_CY(VarR4FromCy,-0.4); EXPECT(-0.4f); - CONVERT_CY(VarR4FromCy,0.4); EXPECT(0.4f); - CONVERT_CY(VarR4FromCy,0.5); EXPECT(0.5f); - CONVERT_CY(VarR4FromCy,0.6); EXPECT(0.6f); - CONVERT_CY(VarR4FromCy,1.5); EXPECT(1.5f); -} - -static void test_VarR4FromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarR4FromI8); - CONVERT(VarR4FromI8, -1); EXPECT(-1.0f); - CONVERT(VarR4FromI8, 0); EXPECT(0.0f); - CONVERT(VarR4FromI8, 1); EXPECT(1.0f); -} - -static void test_VarR4FromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarR4FromUI8); - CONVERT(VarR4FromUI8, 0); EXPECT(0.0f); - CONVERT(VarR4FromUI8, 1); EXPECT(1.0f); -} - -static void test_VarR4FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarR4FromDec); - - CONVERT_BADDEC(VarR4FromDec); - - CONVERT_DEC(VarR4FromDec,0,0x80,0,32768); EXPECT(-32768.0f); - CONVERT_DEC(VarR4FromDec,0,0x80,0,1); EXPECT(-1.0f); - CONVERT_DEC(VarR4FromDec,0,0,0,0); EXPECT(0.0f); - CONVERT_DEC(VarR4FromDec,0,0,0,1); EXPECT(1.0f); - CONVERT_DEC(VarR4FromDec,0,0,0,32767); EXPECT(32767.0f); - - CONVERT_DEC(VarR4FromDec,2,0x80,0,3276800); EXPECT(-32768.0f); - CONVERT_DEC(VarR4FromDec,2,0,0,3276700); EXPECT(32767.0f); - - CONVERT_DEC(VarR4FromDec,0,0,1,0); EXPECT(18446744073709551616.0f); -} - -static void test_VarR4FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarR4FromDate); - CONVERT(VarR4FromDate, -1.0); EXPECT(-1.0f); - CONVERT(VarR4FromDate, 0.0); EXPECT(0.0f); - CONVERT(VarR4FromDate, 1.0); EXPECT(1.0f); -} - -static void test_VarR4FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarR4FromStr); - - CONVERT_STR(VarR4FromStr,NULL,0); EXPECT_MISMATCH; - CONVERT_STR(VarR4FromStr,"-1", 0); EXPECT(-1.0f); - CONVERT_STR(VarR4FromStr,"0", 0); EXPECT(0.0f); - CONVERT_STR(VarR4FromStr,"1", 0); EXPECT(1.0f); - - CONVERT_STR(VarR4FromStr,"-1.5",LOCALE_NOUSEROVERRIDE); EXPECT(-1.5f); - CONVERT_STR(VarR4FromStr,"-0.6",LOCALE_NOUSEROVERRIDE); EXPECT(-0.6f); - CONVERT_STR(VarR4FromStr,"-0.5",LOCALE_NOUSEROVERRIDE); EXPECT(-0.5f); - CONVERT_STR(VarR4FromStr,"-0.4",LOCALE_NOUSEROVERRIDE); EXPECT(-0.4f); - CONVERT_STR(VarR4FromStr,"0.4",LOCALE_NOUSEROVERRIDE); EXPECT(0.4f); - CONVERT_STR(VarR4FromStr,"0.5",LOCALE_NOUSEROVERRIDE); EXPECT(0.5f); - CONVERT_STR(VarR4FromStr,"0.6",LOCALE_NOUSEROVERRIDE); EXPECT(0.6f); - CONVERT_STR(VarR4FromStr,"1.5",LOCALE_NOUSEROVERRIDE); EXPECT(1.5f); -} - -static void test_VarR4Copy(void) -{ - COPYTEST(77665544.0f, VT_R4, V_R4(&vSrc), V_R4(&vDst), V_R4REF(&vSrc),V_R4REF(&vDst), "%15.15f"); -} - -static void test_VarR4ChangeTypeEx(void) -{ -#ifdef HAS_UINT64_TO_FLOAT - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - in = 1.0f; - - INITIAL_TYPETEST(VT_R4, V_R4, "%f"); - COMMON_TYPETEST; -#endif -} - -/* - * VT_R8 - */ - -#undef CONV_TYPE -#define CONV_TYPE double -#undef EXPECTRES -#define EXPECTRES(res, x) _EXPECTRES(res, x, "%15.15f") - -static void test_VarR8FromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarR8FromI1); - CONVERTRANGE(VarR8FromI1, -128, 128); -} - -static void test_VarR8FromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarR8FromUI1); - CONVERTRANGE(VarR8FromUI1, 0, 256); -} - -static void test_VarR8FromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarR8FromI2); - CONVERTRANGE(VarR8FromI2, -32768, 32768); -} - -static void test_VarR8FromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarR8FromUI2); - CONVERTRANGE(VarR8FromUI2, 0, 65536); -} - -static void test_VarR8FromI4(void) -{ - CONVVARS(int); - - CHECKPTR(VarR8FromI4); - CONVERT(VarR8FromI4, -2147483647-1); EXPECT(-2147483648.0); - CONVERT(VarR8FromI4, -1); EXPECT(-1.0); - CONVERT(VarR8FromI4, 0); EXPECT(0.0); - CONVERT(VarR8FromI4, 1); EXPECT(1.0); - CONVERT(VarR8FromI4, 0x7fffffff); EXPECT(2147483647.0); -} - -static void test_VarR8FromUI4(void) -{ - CONVVARS(unsigned int); - - CHECKPTR(VarR8FromUI4); - CONVERT(VarR8FromUI4, 0); EXPECT(0.0); - CONVERT(VarR8FromUI4, 1); EXPECT(1.0); - CONVERT(VarR8FromUI4, 0xffffffff); EXPECT(4294967295.0); -} - -static void test_VarR8FromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarR8FromR4); - CONVERT(VarR8FromR4, -1.0f); EXPECT(-1.0); - CONVERT(VarR8FromR4, 0.0f); EXPECT(0.0); - CONVERT(VarR8FromR4, 1.0f); EXPECT(1.0); - CONVERT(VarR8FromR4, 1.5f); EXPECT(1.5); - - /* Skip rounding tests - no rounding is done */ -} - -static void test_VarR8FromBool(void) -{ - CONVVARS(VARIANT_BOOL); - - CHECKPTR(VarR8FromBool); - CONVERT(VarR8FromBool, VARIANT_TRUE); EXPECT(VARIANT_TRUE * 1.0); - CONVERT(VarR8FromBool, VARIANT_FALSE); EXPECT(VARIANT_FALSE * 1.0); -} - -static void test_VarR8FromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarR8FromCy); - CONVERT_CY(VarR8FromCy,-32769); EXPECT(-32769.0); - CONVERT_CY(VarR8FromCy,-32768); EXPECT(-32768.0); - CONVERT_CY(VarR8FromCy,-1); EXPECT(-1.0); - CONVERT_CY(VarR8FromCy,0); EXPECT(0.0); - CONVERT_CY(VarR8FromCy,1); EXPECT(1.0); - CONVERT_CY(VarR8FromCy,32767); EXPECT(32767.0); - CONVERT_CY(VarR8FromCy,32768); EXPECT(32768.0); - - CONVERT_CY(VarR8FromCy,-1.5); EXPECT(-1.5); - CONVERT_CY(VarR8FromCy,-0.6); EXPECT(-0.6); - CONVERT_CY(VarR8FromCy,-0.5); EXPECT(-0.5); - CONVERT_CY(VarR8FromCy,-0.4); EXPECT(-0.4); - CONVERT_CY(VarR8FromCy,0.4); EXPECT(0.4); - CONVERT_CY(VarR8FromCy,0.5); EXPECT(0.5); - CONVERT_CY(VarR8FromCy,0.6); EXPECT(0.6); - CONVERT_CY(VarR8FromCy,1.5); EXPECT(1.5); -} - -static void test_VarR8FromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarR8FromI8); - CONVERT(VarR8FromI8, -1); EXPECT(-1.0); - CONVERT(VarR8FromI8, 0); EXPECT(0.0); - CONVERT(VarR8FromI8, 1); EXPECT(1.0); -#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__)) - CONVERT_I8(VarR8FromI8, 0x7fffffff,0xffffffff); EXPECT(9223372036854775808.0); -#endif -} - -static void test_VarR8FromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarR8FromUI8); - CONVERT(VarR8FromUI8, 0); EXPECT(0.0); - CONVERT(VarR8FromUI8, 1); EXPECT(1.0); -#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__)) - CONVERT_I8(VarR8FromUI8, 0x80000000,0); EXPECT(9223372036854775808.0); -#endif -} - -static void test_VarR8FromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarR8FromDec); - - CONVERT_BADDEC(VarR8FromDec); - - CONVERT_DEC(VarR8FromDec,0,0x80,0,32768); EXPECT(-32768.0); - CONVERT_DEC(VarR8FromDec,0,0x80,0,1); EXPECT(-1.0); - CONVERT_DEC(VarR8FromDec,0,0,0,0); EXPECT(0.0); - CONVERT_DEC(VarR8FromDec,0,0,0,1); EXPECT(1.0); - CONVERT_DEC(VarR8FromDec,0,0,0,32767); EXPECT(32767.0); - - CONVERT_DEC(VarR8FromDec,2,0x80,0,3276800); EXPECT(-32768.0); - CONVERT_DEC(VarR8FromDec,2,0,0,3276700); EXPECT(32767.0); - - CONVERT_DEC(VarR8FromDec,0,0,1,0); EXPECT(18446744073709551616.0); -} - -static void test_VarR8FromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarR8FromDate); - CONVERT(VarR8FromDate, -1.0); EXPECT(-1.0); - CONVERT(VarR8FromDate, -0.0); EXPECT(0.0); - CONVERT(VarR8FromDate, 1.0); EXPECT(1.0); -} - -static void test_VarR8FromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - in = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarR8FromStr); - - CONVERT_STR(VarR8FromStr,NULL,0); EXPECT_MISMATCH; - CONVERT_STR(VarR8FromStr,"",0); EXPECT_MISMATCH; - CONVERT_STR(VarR8FromStr," ",0); EXPECT_MISMATCH; - - CONVERT_STR(VarR8FromStr,"0",LOCALE_NOUSEROVERRIDE); EXPECT(0.0); - CONVERT_STR(VarR8FromStr,"-1.5",LOCALE_NOUSEROVERRIDE); EXPECT(-1.5); - CONVERT_STR(VarR8FromStr,"-0.6",LOCALE_NOUSEROVERRIDE); EXPECT(-0.6); - CONVERT_STR(VarR8FromStr,"-0.5",LOCALE_NOUSEROVERRIDE); EXPECT(-0.5); - CONVERT_STR(VarR8FromStr,"-0.4",LOCALE_NOUSEROVERRIDE); EXPECT(-0.4); - CONVERT_STR(VarR8FromStr,"0.4",LOCALE_NOUSEROVERRIDE); EXPECT(0.4); - CONVERT_STR(VarR8FromStr,"0.5",LOCALE_NOUSEROVERRIDE); EXPECT(0.5); - CONVERT_STR(VarR8FromStr,"0.6",LOCALE_NOUSEROVERRIDE); EXPECT(0.6); - CONVERT_STR(VarR8FromStr,"1.5",LOCALE_NOUSEROVERRIDE); EXPECT(1.5); - - /* We already have exhaustive tests for number parsing, so skip those tests here */ -} - -static void test_VarR8Copy(void) -{ - COPYTEST(77665544.0, VT_R8, V_R8(&vSrc), V_R8(&vDst), V_R8REF(&vSrc),V_R8REF(&vDst), "%16.16g"); -} - -static void test_VarR8ChangeTypeEx(void) -{ -#ifdef HAS_UINT64_TO_FLOAT - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - - in = 1.0; - - INITIAL_TYPETEST(VT_R8, V_R8, "%g"); - COMMON_TYPETEST; -#endif -} - -#define MATHRND(l, r) left = l; right = r; hres = pVarR8Round(left, right, &out) - -static void test_VarR8Round(void) -{ - HRESULT hres; - double left = 0.0, out; - int right; - - CHECKPTR(VarR8Round); - MATHRND(0.5432, 5); EXPECT(0.5432); - MATHRND(0.5432, 4); EXPECT(0.5432); - MATHRND(0.5432, 3); EXPECT(0.543); - MATHRND(0.5432, 2); EXPECT(0.54); - MATHRND(0.5432, 1); EXPECT(0.5); - MATHRND(0.5532, 0); EXPECT(1); - MATHRND(0.5532, -1); EXPECT_INVALID; - - MATHRND(0.5568, 5); EXPECT(0.5568); - MATHRND(0.5568, 4); EXPECT(0.5568); - MATHRND(0.5568, 3); EXPECT(0.557); - MATHRND(0.5568, 2); EXPECT(0.56); - MATHRND(0.5568, 1); EXPECT(0.6); - MATHRND(0.5568, 0); EXPECT(1); - MATHRND(0.5568, -1); EXPECT_INVALID; - - MATHRND(0.4999, 0); EXPECT(0); - MATHRND(0.5000, 0); EXPECT(0); - MATHRND(0.5001, 0); EXPECT(1); - MATHRND(1.4999, 0); EXPECT(1); - MATHRND(1.5000, 0); EXPECT(2); - MATHRND(1.5001, 0); EXPECT(2); -} - -/* - * VT_DATE - */ - -#undef CONV_TYPE -#define CONV_TYPE DATE - -static void test_VarDateFromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarDateFromI1); - CONVERTRANGE(VarDateFromI1, -128, 128); -} - -static void test_VarDateFromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarDateFromUI1); - CONVERTRANGE(VarDateFromUI1, 0, 256); -} - -static void test_VarDateFromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarDateFromI2); - CONVERTRANGE(VarDateFromI2, -32768, 32768); -} - -static void test_VarDateFromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarDateFromUI2); - CONVERTRANGE(VarDateFromUI2, 0, 65536); -} - -static void test_VarDateFromI4(void) -{ - CONVVARS(int); - - CHECKPTR(VarDateFromI4); - CONVERT(VarDateFromI4, DATE_MIN-1); - if (hres != DISP_E_TYPEMISMATCH) /* Early versions return this, incorrectly */ - EXPECT_OVERFLOW; - CONVERT(VarDateFromI4, DATE_MIN); EXPECT(DATE_MIN); - CONVERT(VarDateFromI4, -1); EXPECT(-1.0); - CONVERT(VarDateFromI4, 0); EXPECT(0.0); - CONVERT(VarDateFromI4, 1); EXPECT(1.0); - CONVERT(VarDateFromI4, DATE_MAX); EXPECT(DATE_MAX); - CONVERT(VarDateFromI4, DATE_MAX+1); - if (hres != DISP_E_TYPEMISMATCH) /* Early versions return this, incorrectly */ - EXPECT_OVERFLOW; -} - -static void test_VarDateFromUI4(void) -{ - CONVVARS(unsigned int); - - CHECKPTR(VarDateFromUI4); - CONVERT(VarDateFromUI4, 0); EXPECT(0.0); - CONVERT(VarDateFromUI4, 1); EXPECT(1.0); - CONVERT(VarDateFromUI4, DATE_MAX); EXPECT(DATE_MAX); - CONVERT(VarDateFromUI4, DATE_MAX+1); - if (hres != DISP_E_TYPEMISMATCH) /* Early versions return this, incorrectly */ - EXPECT_OVERFLOW; -} - -static void test_VarDateFromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarDateFromR4); - CONVERT(VarDateFromR4, -1.0f); EXPECT(-1.0); - CONVERT(VarDateFromR4, 0.0f); EXPECT(0.0); - CONVERT(VarDateFromR4, 1.0f); EXPECT(1.0); - CONVERT(VarDateFromR4, 1.5f); EXPECT(1.5); -} - -static void test_VarDateFromR8(void) -{ - CONVVARS(double); - - CHECKPTR(VarDateFromR8); - CONVERT(VarDateFromR8, -1.0f); EXPECT(-1.0); - CONVERT(VarDateFromR8, 0.0f); EXPECT(0.0); - CONVERT(VarDateFromR8, 1.0f); EXPECT(1.0); - CONVERT(VarDateFromR8, 1.5f); EXPECT(1.5); -} - -static void test_VarDateFromBool(void) -{ - CONVVARS(VARIANT_BOOL); - - CHECKPTR(VarDateFromBool); - CONVERT(VarDateFromBool, VARIANT_TRUE); EXPECT(VARIANT_TRUE * 1.0); - CONVERT(VarDateFromBool, VARIANT_FALSE); EXPECT(VARIANT_FALSE * 1.0); -} - -static void test_VarDateFromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarDateFromCy); - CONVERT_CY(VarDateFromCy,-32769); EXPECT(-32769.0); - CONVERT_CY(VarDateFromCy,-32768); EXPECT(-32768.0); - CONVERT_CY(VarDateFromCy,-1); EXPECT(-1.0); - CONVERT_CY(VarDateFromCy,0); EXPECT(0.0); - CONVERT_CY(VarDateFromCy,1); EXPECT(1.0); - CONVERT_CY(VarDateFromCy,32767); EXPECT(32767.0); - CONVERT_CY(VarDateFromCy,32768); EXPECT(32768.0); - - CONVERT_CY(VarDateFromCy,-1.5); EXPECT(-1.5); - CONVERT_CY(VarDateFromCy,-0.6); EXPECT(-0.6); - CONVERT_CY(VarDateFromCy,-0.5); EXPECT(-0.5); - CONVERT_CY(VarDateFromCy,-0.4); EXPECT(-0.4); - CONVERT_CY(VarDateFromCy,0.4); EXPECT(0.4); - CONVERT_CY(VarDateFromCy,0.5); EXPECT(0.5); - CONVERT_CY(VarDateFromCy,0.6); EXPECT(0.6); - CONVERT_CY(VarDateFromCy,1.5); EXPECT(1.5); -} - -static void test_VarDateFromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarDateFromI8); - CONVERT(VarDateFromI8, DATE_MIN-1); EXPECT_OVERFLOW; - CONVERT(VarDateFromI8, DATE_MIN); EXPECT(DATE_MIN); - CONVERT(VarDateFromI8, -1); EXPECT(-1.0); - CONVERT(VarDateFromI8, 0); EXPECT(0.0); - CONVERT(VarDateFromI8, 1); EXPECT(1.0); - CONVERT(VarDateFromI8, DATE_MAX); EXPECT(DATE_MAX); - CONVERT(VarDateFromI8, DATE_MAX+1); EXPECT_OVERFLOW; -} - -static void test_VarDateFromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarDateFromUI8); - CONVERT(VarDateFromUI8, 0); EXPECT(0.0); - CONVERT(VarDateFromUI8, 1); EXPECT(1.0); - CONVERT(VarDateFromUI8, DATE_MAX); EXPECT(DATE_MAX); - CONVERT(VarDateFromUI8, DATE_MAX+1); EXPECT_OVERFLOW; -} - -static void test_VarDateFromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarDateFromDec); - - CONVERT_BADDEC(VarDateFromDec); - - CONVERT_DEC(VarDateFromDec,0,0x80,0,32768); EXPECT(-32768.0); - CONVERT_DEC(VarDateFromDec,0,0x80,0,1); EXPECT(-1.0); - CONVERT_DEC(VarDateFromDec,0,0,0,0); EXPECT(0.0); - CONVERT_DEC(VarDateFromDec,0,0,0,1); EXPECT(1.0); - CONVERT_DEC(VarDateFromDec,0,0,0,32767); EXPECT(32767.0); - - CONVERT_DEC(VarDateFromDec,2,0x80,0,3276800); EXPECT(-32768.0); - CONVERT_DEC(VarDateFromDec,2,0,0,3276700); EXPECT(32767.0); -} - -#define DFS(str) \ - buff[0] = '\0'; out = 0.0; \ - if (str) MultiByteToWideChar(CP_ACP,0,str,-1,buff,sizeof(buff)/sizeof(WCHAR)); \ - hres = pVarDateFromStr(str ? buff : NULL,lcid,LOCALE_NOUSEROVERRIDE,&out) - -#define MKRELDATE(day,mth) st.wMonth = mth; st.wDay = day; \ - pSystemTimeToVariantTime(&st,&relative) - -static const char * const BadDateStrings[] = -{ - "True", "False", /* Plain text */ - "0.", ".0", "-1.1", "1.1-", /* Partial specifications */ - "1;2;3", "1*2*3", "1@2@3", "1#2#3", "(1:2)","<1:2>","1|2|3", /* Bad chars */ - "0", "1", /* 1 element */ - "0.60", "24.00", "0:60", "24:00", "1 2 am", "1 am 2", /* 2 elements */ - "1.5 2", "1 5.2", "2 32 3", "1 2 am 3", /* 3 elements */ - "1 2.3 4", "1.2.3 4", "1 2.3.4", "1.2 3.4", "1.2.3.4", "1 2 3 4", - "1 am 2 3.4", "1 2 am 3.4", "1.2 3 am 4", "1.2 3 4 am", /* 4 elements */ - "1.2.3.4.5", "1.2.3.4 5", "1.2.3 4.5", "1.2 3.4.5", "1.2 3.4 5", "1.2 3 4.5", - "1 2.3.4.5", "1 2.3.4 5", "1 2.3 4.5", "1 2.3 4 5", "1 2 3.4 5", "1 2 3 4 5", - "1.2.3 4 am 5", "1.2.3 4 5 am", "1.2 3 am 4 5", - "1.2 3 4 am 5", "1.2 3 4 5 am", "1 am 2 3.4.5", "1 2 am 3.4.5", - "1 am 2 3 4.5", "1 2 am 3 4.5", "1 2 3 am 4.5", /* 5 elements */ - /* 6 elements */ - "1.2.3.4.5.6", "1.2.3.4.5 6", "1.2.3.4 5.6", "1.2.3.4 5 6", "1.2.3 4.5.6", - "1.2.3 4.5 6", "1.2.3 4 5.6", "1.2 3.4.5.6", "1.2 3.4.5 6", "1.2 3.4 5.6", - "1.2 3.4 5 6", "1.2 3 4.5.6", "1.2 3 4.5 6", "1.2 3 4 5.6", "1.2 3 4 5 6", - "1 2.3.4.5.6", "1 2.3.4.5 6", "1 2.3.4 5.6", "1 2.3.4 5 6", "1 2.3 4.5.6", -#if 0 - /* following throws an exception on winME */ - "1 2.3 4.5 6", "1 2.3 4 5.6", "1 2.3 4 5 6", "1 2 3.4.5.6", "1 2 3.4.5 6", -#endif - "1 2 3.4 5.6", "1 2 3.4 5 6", "1 2 3 4.5 6", "1 2 3 4 5.6", "1 2 3 4 5 6", -#if 0 - /* following throws an exception on winME */ - "1.2.3 4 am 5 6", "1.2.3 4 5 am 6", "1.2.3 4 5 6 am", "1 am 2 3 4.5.6", -#endif - "1 2 am 3 4.5.6", "1 2 3 am 4.5.6" -}; - -static void test_VarDateFromStr(void) -{ - LCID lcid; - DATE out, relative; - HRESULT hres; - SYSTEMTIME st; - OLECHAR buff[128]; - size_t i; - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - CHECKPTR(VarDateFromStr); - CHECKPTR(SystemTimeToVariantTime); - - /* Some date formats are relative, so we need to find the cuurent year */ - GetSystemTime(&st); - st.wHour = st.wMinute = st.wSecond = st.wMilliseconds = 0; - DFS(NULL); EXPECT_MISMATCH; - - /* Floating point number are not recognised */ - DFS("0.0"); - if (hres == S_OK) - EXPECT_DBL(0.0); /* Very old versions accept this string */ - else - EXPECT_MISMATCH; - - /* 1 element - can only be a time, and only if it has am/pm */ - DFS("1 am"); EXPECT_DBL(0.04166666666666666); - /* 2 elements */ - /* A decimal point is treated as a time separator. - * The following are converted as hours/minutes. - */ - DFS("0.1"); EXPECT_DBL(0.0006944444444444445); - DFS("0.40"); EXPECT_DBL(0.02777777777777778); - DFS("2.5"); EXPECT_DBL(0.08680555555555555); - /* A colon acts as a decimal point */ - DFS("0:1"); EXPECT_DBL(0.0006944444444444445); - DFS("0:20"); EXPECT_DBL(0.01388888888888889); - DFS("0:40"); EXPECT_DBL(0.02777777777777778); - DFS("3:5"); EXPECT_DBL(0.1284722222222222); - /* Check the am/pm limits */ - DFS("00:00 AM"); EXPECT_DBL(0.0); - DFS("00:00 a"); EXPECT_DBL(0.0); - DFS("12:59 AM"); EXPECT_DBL(0.04097222222222222); - DFS("12:59 A"); EXPECT_DBL(0.04097222222222222); - DFS("00:00 pm"); EXPECT_DBL(0.5); - DFS("00:00 p"); EXPECT_DBL(0.5); - DFS("12:59 pm"); EXPECT_DBL(0.5409722222222222); - DFS("12:59 p"); EXPECT_DBL(0.5409722222222222); - /* AM/PM is ignored if hours > 12 */ - DFS("13:00 AM"); EXPECT_DBL(0.5416666666666666); - DFS("13:00 PM"); EXPECT_DBL(0.5416666666666666); - - /* Space, dash and slash all indicate a date format. */ - /* If both numbers are valid month values => month/day of current year */ - DFS("1 2"); MKRELDATE(2,1); EXPECT_DBL(relative); - DFS("2 1"); MKRELDATE(1,2); EXPECT_DBL(relative); - /* one number not valid month, is a valid day, other number valid month: - * that number becomes the day. - */ - DFS("14 1"); MKRELDATE(14,1); EXPECT_DBL(relative); - DFS("1 14"); EXPECT_DBL(relative); - /* If the numbers can't be day/month, they are assumed to be year/month */ - DFS("30 2"); EXPECT_DBL(10990.0); - DFS("2 30"); EXPECT_DBL(10990.0); - DFS("32 49"); EXPECT_MISMATCH; /* Can't be any format */ - DFS("0 49"); EXPECT_MISMATCH; /* Can't be any format */ - /* If a month name is given the other number is the day */ - DFS("Jan 2"); MKRELDATE(2,1); EXPECT_DBL(relative); - DFS("2 Jan"); EXPECT_DBL(relative); - /* Unless it can't be, in which case it becomes the year */ - DFS("Jan 35"); EXPECT_DBL(12785.0); - DFS("35 Jan"); EXPECT_DBL(12785.0); - DFS("Jan-35"); EXPECT_DBL(12785.0); - DFS("35-Jan"); EXPECT_DBL(12785.0); - DFS("Jan/35"); EXPECT_DBL(12785.0); - DFS("35/Jan"); EXPECT_DBL(12785.0); - /* 3 elements */ - /* 3 numbers and time separator => h:m:s */ - DFS("0.1.0"); EXPECT_DBL(0.0006944444444444445); - DFS("1.5.2"); EXPECT_DBL(0.04516203703703704); - /* 3 numbers => picks date giving preference to lcid format */ - DFS("1 2 3"); EXPECT_DBL(37623.0); - DFS("14 2 3"); EXPECT_DBL(41673.0); - DFS("2 14 3"); EXPECT_DBL(37666.0); - DFS("2 3 14"); EXPECT_DBL(41673.0); - DFS("32 2 3"); EXPECT_DBL(11722.0); - DFS("2 3 32"); EXPECT_DBL(11722.0); - DFS("1 2 29"); EXPECT_DBL(47120.0); - /* After 30, two digit dates are expected to be in the 1900's */ - DFS("1 2 30"); EXPECT_DBL(10960.0); - DFS("1 2 31"); EXPECT_DBL(11325.0); - DFS("3 am 1 2"); MKRELDATE(2,1); relative += 0.125; EXPECT_DBL(relative); - DFS("1 2 3 am"); EXPECT_DBL(relative); - - /* 4 elements -interpreted as 2 digit date & time */ - DFS("1.2 3 4"); MKRELDATE(4,3); relative += 0.04305555556; EXPECT_DBL(relative); - DFS("3 4 1.2"); EXPECT_DBL(relative); - /* 5 elements - interpreted as 2 & 3 digit date/times */ - DFS("1.2.3 4 5"); MKRELDATE(5,4); relative += 0.04309027778; EXPECT_DBL(relative); - DFS("1.2 3 4 5"); EXPECT_DBL(38415.04305555556); -#if 0 - /* following throws an exception on winME */ - DFS("1 2 3.4.5"); MKRELDATE(2,1); relative += 0.12783564815; EXPECT_DBL(relative); -#endif - DFS("1 2 3 4.5"); EXPECT_DBL(37623.17013888889); - /* 6 elements - interpreted as 3 digit date/times */ - DFS("1.2.3 4 5 6"); EXPECT_DBL(38812.04309027778); - DFS("1 2 3 4.5.6"); EXPECT_DBL(37623.17020833334); - - for (i = 0; i < sizeof(BadDateStrings)/sizeof(char*); i++) - { - DFS(BadDateStrings[i]); EXPECT_MISMATCH; - } - - /* Some normal-ish strings */ - DFS("2 January, 1970"); EXPECT_DBL(25570.0); - DFS("2 January 1970"); EXPECT_DBL(25570.0); - DFS("2 Jan 1970"); EXPECT_DBL(25570.0); - DFS("2/Jan/1970"); EXPECT_DBL(25570.0); - DFS("2-Jan-1970"); EXPECT_DBL(25570.0); - DFS("1 2 1970"); EXPECT_DBL(25570.0); - DFS("1/2/1970"); EXPECT_DBL(25570.0); - DFS("1-2-1970"); EXPECT_DBL(25570.0); - /* Native fails "1999 January 3, 9AM". I consider that a bug in native */ -} - -static void test_VarDateCopy(void) -{ - COPYTEST(77665544.0, VT_DATE, V_DATE(&vSrc), V_DATE(&vDst), V_DATEREF(&vSrc), - V_DATEREF(&vDst), "%16.16g"); -} - -static const char* wtoascii(LPWSTR lpszIn) -{ - static char buff[256]; - WideCharToMultiByte(CP_ACP, 0, lpszIn, -1, buff, sizeof(buff), NULL, NULL); - return buff; -} - -static void test_VarDateChangeTypeEx(void) -{ - static const WCHAR sz25570[] = { - '1','/','2','/','1','9','7','0','\0' }; - static const WCHAR sz25570_2[] = { - '1','/','2','/','7','0','\0' }; - static const WCHAR sz25570Nls[] = { - '1','/','2','/','1','9','7','0',' ','1','2',':','0','0',':','0','0',' ','A','M','\0' }; - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - LCID lcid; - - in = 1.0; - -#ifdef HAS_UINT64_TO_FLOAT - INITIAL_TYPETEST(VT_DATE, V_DATE, "%g"); - COMMON_TYPETEST; -#endif - - V_VT(&vDst) = VT_EMPTY; - V_VT(&vSrc) = VT_DATE; - V_DATE(&vSrc) = 25570.0; - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, VARIANT_NOUSEROVERRIDE, VT_BSTR); - ok(hres == S_OK && V_VT(&vDst) == VT_BSTR && V_BSTR(&vDst) && - (!lstrcmpW(V_BSTR(&vDst), sz25570) || !lstrcmpW(V_BSTR(&vDst), sz25570_2)), - "hres=0x%X, type=%d (should be VT_BSTR), *bstr=%s\n", - hres, V_VT(&vDst), V_BSTR(&vDst) ? wtoascii(V_BSTR(&vDst)) : "?"); - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - if (HAVE_OLEAUT32_LOCALES) - { - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, VARIANT_NOUSEROVERRIDE|VARIANT_USE_NLS, VT_BSTR); - ok(hres == S_OK && V_VT(&vDst) == VT_BSTR && V_BSTR(&vDst) && !lstrcmpW(V_BSTR(&vDst), sz25570Nls), - "hres=0x%X, type=%d (should be VT_BSTR), *bstr=%s\n", - hres, V_VT(&vDst), V_BSTR(&vDst) ? wtoascii(V_BSTR(&vDst)) : "?"); - } -} - -/* - * VT_CY - */ - -#undef CONV_TYPE -#define CONV_TYPE CY -#undef EXPECTRES -#define EXPECTRES(res, x) \ - ok(hres == S_OK || ((HRESULT)res != S_OK && hres == (HRESULT)res), \ - "expected hres " #x ", got hres=0x%08x\n", hres) - -#define EXPECTCY(x) \ - ok((hres == S_OK && out.int64 == (LONGLONG)(x*CY_MULTIPLIER)), \ - "expected " #x "*CY_MULTIPLIER, got (%8x %8x); hres=0x%08x\n", S(out).Hi, S(out).Lo, hres) - -#define EXPECTCY64(x,y) \ - ok(hres == S_OK && S(out).Hi == (LONG)x && S(out).Lo == y, \ - "expected " #x #y "(%u,%u), got (%u,%u); hres=0x%08x\n", \ - (ULONG)(x), (ULONG)(y), S(out).Hi, S(out).Lo, hres) - -static void test_VarCyFromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarCyFromI1); - for (i = -128; i < 128; i++) - { - CONVERT(VarCyFromI1,i); EXPECTCY(i); - } -} - -static void test_VarCyFromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarCyFromUI1); - for (i = 0; i < 256; i++) - { - CONVERT(VarCyFromUI1,i); EXPECTCY(i); - } -} - -static void test_VarCyFromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarCyFromI2); - for (i = -16384; i < 16384; i++) - { - CONVERT(VarCyFromI2,i); EXPECTCY(i); - } -} - -static void test_VarCyFromUI2(void) -{ - CONVVARS(int); - int i; - - CHECKPTR(VarCyFromUI2); - for (i = 0; i < 32768; i++) - { - CONVERT(VarCyFromUI2,i); EXPECTCY(i); - } -} - -static void test_VarCyFromI4(void) -{ - CONVVARS(int); - - CHECKPTR(VarCyFromI4); - CONVERT(VarCyFromI4, -1); EXPECTCY(-1); - CONVERT(VarCyFromI4, 0); EXPECTCY(0); - CONVERT(VarCyFromI4, 1); EXPECTCY(1); - CONVERT(VarCyFromI4, 0x7fffffff); EXPECTCY64(0x1387, 0xffffd8f0); - CONVERT(VarCyFromI4, 0x80000000); EXPECTCY64(0xffffec78, 0); -} - -static void test_VarCyFromUI4(void) -{ - CONVVARS(unsigned int); - - CHECKPTR(VarCyFromUI4); - CONVERT(VarCyFromUI4, 0); EXPECTCY(0); - CONVERT(VarCyFromUI4, 1); EXPECTCY(1); - CONVERT(VarCyFromUI4, 0x80000000); EXPECTCY64(5000, 0); -} - -static void test_VarCyFromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarCyFromR4); - CONVERT(VarCyFromR4, -1.0f); EXPECTCY(-1); - CONVERT(VarCyFromR4, 0.0f); EXPECTCY(0); - CONVERT(VarCyFromR4, 1.0f); EXPECTCY(1); - CONVERT(VarCyFromR4, 1.5f); EXPECTCY(1.5); - - CONVERT(VarCyFromR4, -1.5f); EXPECTCY(-1.5); - CONVERT(VarCyFromR4, -0.6f); EXPECTCY(-0.6); - CONVERT(VarCyFromR4, -0.5f); EXPECTCY(-0.5); - CONVERT(VarCyFromR4, -0.4f); EXPECTCY(-0.4); - CONVERT(VarCyFromR4, 0.4f); EXPECTCY(0.4); - CONVERT(VarCyFromR4, 0.5f); EXPECTCY(0.5); - CONVERT(VarCyFromR4, 0.6f); EXPECTCY(0.6); - CONVERT(VarCyFromR4, 1.5f); EXPECTCY(1.5); - CONVERT(VarCyFromR4, 1.00009f); EXPECTCY(1.0001); - CONVERT(VarCyFromR4, -1.00001f); EXPECTCY(-1); - CONVERT(VarCyFromR4, -1.00005f); EXPECTCY(-1); - CONVERT(VarCyFromR4, -0.00009f); EXPECTCY(-0.0001); - CONVERT(VarCyFromR4, -0.00005f); EXPECTCY(0); - CONVERT(VarCyFromR4, -0.00001f); EXPECTCY(0); - CONVERT(VarCyFromR4, 0.00001f); EXPECTCY(0); - CONVERT(VarCyFromR4, 0.00005f); EXPECTCY(0); - CONVERT(VarCyFromR4, 0.00009f); EXPECTCY(0.0001); - CONVERT(VarCyFromR4, -1.00001f); EXPECTCY(-1); - CONVERT(VarCyFromR4, -1.00005f); EXPECTCY(-1); - CONVERT(VarCyFromR4, -1.00009f); EXPECTCY(-1.0001); -} - -static void test_VarCyFromR8(void) -{ - CONVVARS(DOUBLE); - - CHECKPTR(VarCyFromR8); - -#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__)) - /* Test our rounding is exactly the same. This fails if the special x86 - * code is taken out of VarCyFromR8. - */ - CONVERT(VarCyFromR8, -461168601842738.7904); EXPECTCY64(0xbfffffff, 0xffffff23); -#endif - - CONVERT(VarCyFromR8, -4611686018427388416.1); EXPECT_OVERFLOW; - CONVERT(VarCyFromR8, -1.0); EXPECTCY(-1); - CONVERT(VarCyFromR8, -0.0); EXPECTCY(0); - CONVERT(VarCyFromR8, 1.0); EXPECTCY(1); - CONVERT(VarCyFromR8, 4611686018427387648.0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarCyFromR8, -1.5f); EXPECTCY(-1.5); - CONVERT(VarCyFromR8, -0.6f); EXPECTCY(-0.6); - CONVERT(VarCyFromR8, -0.5f); EXPECTCY(-0.5); - CONVERT(VarCyFromR8, -0.4f); EXPECTCY(-0.4); - CONVERT(VarCyFromR8, 0.4f); EXPECTCY(0.4); - CONVERT(VarCyFromR8, 0.5f); EXPECTCY(0.5); - CONVERT(VarCyFromR8, 0.6f); EXPECTCY(0.6); - CONVERT(VarCyFromR8, 1.5f); EXPECTCY(1.5); - CONVERT(VarCyFromR8, 1.00009f); EXPECTCY(1.0001); - CONVERT(VarCyFromR8, -1.00001f); EXPECTCY(-1); - CONVERT(VarCyFromR8, -1.00005f); EXPECTCY(-1); - CONVERT(VarCyFromR8, -0.00009f); EXPECTCY(-0.0001); - CONVERT(VarCyFromR8, -0.00005f); EXPECTCY(0); - CONVERT(VarCyFromR8, -0.00001f); EXPECTCY(0); - CONVERT(VarCyFromR8, 0.00001f); EXPECTCY(0); - CONVERT(VarCyFromR8, 0.00005f); EXPECTCY(0); - CONVERT(VarCyFromR8, 0.00009f); EXPECTCY(0.0001); - CONVERT(VarCyFromR8, -1.00001f); EXPECTCY(-1); - CONVERT(VarCyFromR8, -1.00005f); EXPECTCY(-1); - CONVERT(VarCyFromR8, -1.00009f); EXPECTCY(-1.0001); -} - -static void test_VarCyFromBool(void) -{ - CONVVARS(VARIANT_BOOL); - int i; - - CHECKPTR(VarCyFromBool); - for (i = -32768; i < 32768; i++) - { - CONVERT(VarCyFromBool, i); EXPECTCY(i); - } -} - -static void test_VarCyFromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarCyFromI8); - CONVERT_I8(VarCyFromI8, -214749, 2728163227ul); EXPECT_OVERFLOW; - CONVERT_I8(VarCyFromI8, -214749, 2728163228ul); EXPECTCY64(2147483648ul,15808); - CONVERT(VarCyFromI8, -1); EXPECTCY(-1); - CONVERT(VarCyFromI8, 0); EXPECTCY(0); - CONVERT(VarCyFromI8, 1); EXPECTCY(1); - CONVERT_I8(VarCyFromI8, 214748, 1566804068); EXPECTCY64(2147483647ul, 4294951488ul); - CONVERT_I8(VarCyFromI8, 214748, 1566804069); EXPECT_OVERFLOW; -} - -static void test_VarCyFromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarCyFromUI8); - CONVERT(VarCyFromUI8, 0); EXPECTCY(0); - CONVERT(VarCyFromUI8, 1); EXPECTCY(1); - CONVERT_I8(VarCyFromUI8, 214748, 1566804068); EXPECTCY64(2147483647ul, 4294951488ul); - CONVERT_I8(VarCyFromUI8, 214748, 1566804069); EXPECT_OVERFLOW; -} - -static void test_VarCyFromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarCyFromDec); - - CONVERT_BADDEC(VarCyFromDec); - - CONVERT_DEC(VarCyFromDec,0,0x80,0,1); EXPECTCY(-1); - CONVERT_DEC(VarCyFromDec,0,0,0,0); EXPECTCY(0); - CONVERT_DEC(VarCyFromDec,0,0,0,1); EXPECTCY(1); - - CONVERT_DEC64(VarCyFromDec,0,0,0,214748, 1566804068); EXPECTCY64(2147483647ul, 4294951488ul); - CONVERT_DEC64(VarCyFromDec,0,0,0,214748, 1566804069); EXPECT_OVERFLOW; - - CONVERT_DEC(VarCyFromDec,2,0,0,100); EXPECTCY(1); - CONVERT_DEC(VarCyFromDec,2,0x80,0,100); EXPECTCY(-1); - CONVERT_DEC(VarCyFromDec,2,0x80,0,1); EXPECTCY(-0.01); - CONVERT_DEC(VarCyFromDec,2,0,0,1); EXPECTCY(0.01); - CONVERT_DEC(VarCyFromDec,2,0x80,0,1); EXPECTCY(-0.01); - CONVERT_DEC(VarCyFromDec,2,0,0,999); EXPECTCY(9.99); - CONVERT_DEC(VarCyFromDec,2,0x80,0,999); EXPECTCY(-9.99); - CONVERT_DEC(VarCyFromDec,2,0,0,1500); EXPECTCY(15); - CONVERT_DEC(VarCyFromDec,2,0x80,0,1500); EXPECTCY(-15); -} - -static void test_VarCyFromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarCyFromDate); - -#if defined(__i386__) && (defined(_MSC_VER) || defined(__GNUC__)) - CONVERT(VarCyFromR8, -461168601842738.7904); EXPECTCY64(0xbfffffff, 0xffffff23); -#endif - - CONVERT(VarCyFromDate, -1.0); EXPECTCY(-1); - CONVERT(VarCyFromDate, -0.0); EXPECTCY(0); - CONVERT(VarCyFromDate, 1.0); EXPECTCY(1); - CONVERT(VarCyFromDate, -4611686018427388416.1); EXPECT_OVERFLOW; - CONVERT(VarCyFromDate, 4611686018427387648.0); EXPECT_OVERFLOW; - - /* Rounding */ - CONVERT(VarCyFromDate, -1.5f); EXPECTCY(-1.5); - CONVERT(VarCyFromDate, -0.6f); EXPECTCY(-0.6); - CONVERT(VarCyFromDate, -0.5f); EXPECTCY(-0.5); - CONVERT(VarCyFromDate, -0.4f); EXPECTCY(-0.4); - CONVERT(VarCyFromDate, 0.4f); EXPECTCY(0.4); - CONVERT(VarCyFromDate, 0.5f); EXPECTCY(0.5); - CONVERT(VarCyFromDate, 0.6f); EXPECTCY(0.6); - CONVERT(VarCyFromDate, 1.5f); EXPECTCY(1.5); - CONVERT(VarCyFromDate, 1.00009f); EXPECTCY(1.0001); - CONVERT(VarCyFromDate, -1.00001f); EXPECTCY(-1); - CONVERT(VarCyFromDate, -1.00005f); EXPECTCY(-1); - CONVERT(VarCyFromDate, -0.00009f); EXPECTCY(-0.0001); - CONVERT(VarCyFromDate, -0.00005f); EXPECTCY(0); - CONVERT(VarCyFromDate, -0.00001f); EXPECTCY(0); - CONVERT(VarCyFromDate, 0.00001f); EXPECTCY(0); - CONVERT(VarCyFromDate, 0.00005f); EXPECTCY(0); - CONVERT(VarCyFromDate, 0.00009f); EXPECTCY(0.0001); - CONVERT(VarCyFromDate, -1.00001f); EXPECTCY(-1); - CONVERT(VarCyFromDate, -1.00005f); EXPECTCY(-1); - CONVERT(VarCyFromDate, -1.00009f); EXPECTCY(-1.0001); -} - -#define MATHVARS1 HRESULT hres; double left = 0.0; CY cyLeft, out -#define MATHVARS2 MATHVARS1; double right = 0.0; CY cyRight -#define MATH1(func, l) left = (double)l; pVarCyFromR8(left, &cyLeft); hres = p##func(cyLeft, &out) -#define MATH2(func, l, r) left = (double)l; right = (double)r; \ - pVarCyFromR8(left, &cyLeft); pVarCyFromR8(right, &cyRight); \ - hres = p##func(cyLeft, cyRight, &out) - -static void test_VarCyAdd(void) -{ - MATHVARS2; - - CHECKPTR(VarCyAdd); - MATH2(VarCyAdd, 0.5, 0.5); EXPECTCY(1); - MATH2(VarCyAdd, 0.5, -0.4); EXPECTCY(0.1); - MATH2(VarCyAdd, 0.5, -0.6); EXPECTCY(-0.1); - MATH2(VarCyAdd, -0.5, -0.5); EXPECTCY(-1); - MATH2(VarCyAdd, -922337203685476.0, -922337203685476.0); EXPECT_OVERFLOW; - MATH2(VarCyAdd, -922337203685476.0, 922337203685476.0); EXPECTCY(0); - MATH2(VarCyAdd, 922337203685476.0, -922337203685476.0); EXPECTCY(0); - MATH2(VarCyAdd, 922337203685476.0, 922337203685476.0); EXPECT_OVERFLOW; -} - -static void test_VarCyMul(void) -{ - MATHVARS2; - - CHECKPTR(VarCyMul); - MATH2(VarCyMul, 534443.0, 0.0); EXPECTCY(0); - MATH2(VarCyMul, 0.5, 0.5); EXPECTCY(0.25); - MATH2(VarCyMul, 0.5, -0.4); EXPECTCY(-0.2); - MATH2(VarCyMul, 0.5, -0.6); EXPECTCY(-0.3); - MATH2(VarCyMul, -0.5, -0.5); EXPECTCY(0.25); - MATH2(VarCyMul, 922337203685476.0, 20000); EXPECT_OVERFLOW; -} - -static void test_VarCySub(void) -{ - MATHVARS2; - - CHECKPTR(VarCySub); - MATH2(VarCySub, 0.5, 0.5); EXPECTCY(0); - MATH2(VarCySub, 0.5, -0.4); EXPECTCY(0.9); - MATH2(VarCySub, 0.5, -0.6); EXPECTCY(1.1); - MATH2(VarCySub, -0.5, -0.5); EXPECTCY(0); - MATH2(VarCySub, -922337203685476.0, -922337203685476.0); EXPECTCY(0); - MATH2(VarCySub, -922337203685476.0, 922337203685476.0); EXPECT_OVERFLOW; - MATH2(VarCySub, 922337203685476.0, -922337203685476.0); EXPECT_OVERFLOW; - MATH2(VarCySub, 922337203685476.0, 922337203685476.0); EXPECTCY(0); -} - -static void test_VarCyAbs(void) -{ - MATHVARS1; - - CHECKPTR(VarCyAbs); - MATH1(VarCyAbs, 0.5); EXPECTCY(0.5); - MATH1(VarCyAbs, -0.5); EXPECTCY(0.5); - MATH1(VarCyAbs, 922337203685476.0); EXPECTCY64(2147483647ul,4294951488ul); - MATH1(VarCyAbs, -922337203685476.0); EXPECTCY64(2147483647ul,4294951488ul); -} - -static void test_VarCyNeg(void) -{ - MATHVARS1; - - CHECKPTR(VarCyNeg); - MATH1(VarCyNeg, 0.5); EXPECTCY(-0.5); - MATH1(VarCyNeg, -0.5); EXPECTCY(0.5); - MATH1(VarCyNeg, 922337203685476.0); EXPECTCY64(2147483648ul,15808); - MATH1(VarCyNeg, -922337203685476.0); EXPECTCY64(2147483647ul,4294951488ul); -} - -#define MATHMULI4(l, r) left = l; right = r; pVarCyFromR8(left, &cyLeft); \ - hres = pVarCyMulI4(cyLeft, right, &out) - -static void test_VarCyMulI4(void) -{ - MATHVARS1; - LONG right; - - CHECKPTR(VarCyMulI4); - MATHMULI4(534443.0, 0); EXPECTCY(0); - MATHMULI4(0.5, 1); EXPECTCY(0.5); - MATHMULI4(0.5, 2); EXPECTCY(1); - MATHMULI4(922337203685476.0, 1); EXPECTCY64(2147483647ul,4294951488ul); - MATHMULI4(922337203685476.0, 2); EXPECT_OVERFLOW; -} - -#define MATHMULI8(l, r) left = l; right = r; pVarCyFromR8(left, &cyLeft); \ - hres = pVarCyMulI8(cyLeft, right, &out) - -static void test_VarCyMulI8(void) -{ - MATHVARS1; - LONG64 right; - - CHECKPTR(VarCyMulI8); - MATHMULI8(534443.0, 0); EXPECTCY(0); - MATHMULI8(0.5, 1); EXPECTCY(0.5); - MATHMULI8(0.5, 2); EXPECTCY(1); - MATHMULI8(922337203685476.0, 1); EXPECTCY64(2147483647ul,4294951488ul); - MATHMULI8(922337203685476.0, 2); EXPECT_OVERFLOW; -} - -#define MATHCMP(l, r) left = l; right = r; pVarCyFromR8(left, &cyLeft); pVarCyFromR8(right, &cyRight); \ - hres = pVarCyCmp(cyLeft, cyRight); out.int64 = hres - -static void test_VarCyCmp(void) -{ - MATHVARS2; - - CHECKPTR(VarCyCmp); - MATHCMP(-1.0, -1.0); EXPECT_EQ; - MATHCMP(-1.0, 0.0); EXPECT_LT; - MATHCMP(-1.0, 1.0); EXPECT_LT; - MATHCMP(-1.0, 2.0); EXPECT_LT; - MATHCMP(0.0, 1.0); EXPECT_LT; - MATHCMP(0.0, 0.0); EXPECT_EQ; - MATHCMP(0.0, -1.0); EXPECT_GT; - MATHCMP(1.0, -1.0); EXPECT_GT; - MATHCMP(1.0, 0.0); EXPECT_GT; - MATHCMP(1.0, 1.0); EXPECT_EQ; - MATHCMP(1.0, 2.0); EXPECT_LT; -} - -#define MATHCMPR8(l, r) left = l; right = r; pVarCyFromR8(left, &cyLeft); \ - hres = pVarCyCmpR8(cyLeft, right); out.int64 = hres - -static void test_VarCyCmpR8(void) -{ - MATHVARS1; - double right; - - CHECKPTR(VarCyCmpR8); - MATHCMPR8(-1.0, -1.0); EXPECT_EQ; - MATHCMPR8(-1.0, 0.0); EXPECT_LT; - MATHCMPR8(-1.0, 1.0); EXPECT_LT; - MATHCMPR8(-1.0, 2.0); EXPECT_LT; - MATHCMPR8(0.0, 1.0); EXPECT_LT; - MATHCMPR8(0.0, 0.0); EXPECT_EQ; - MATHCMPR8(0.0, -1.0); EXPECT_GT; - MATHCMPR8(1.0, -1.0); EXPECT_GT; - MATHCMPR8(1.0, 0.0); EXPECT_GT; - MATHCMPR8(1.0, 1.0); EXPECT_EQ; - MATHCMPR8(1.0, 2.0); EXPECT_LT; -} - -#undef MATHRND -#define MATHRND(l, r) left = l; right = r; pVarCyFromR8(left, &cyLeft); \ - hres = pVarCyRound(cyLeft, right, &out) - -static void test_VarCyRound(void) -{ - MATHVARS1; - int right; - - CHECKPTR(VarCyRound); - MATHRND(0.5432, 5); EXPECTCY(0.5432); - MATHRND(0.5432, 4); EXPECTCY(0.5432); - MATHRND(0.5432, 3); EXPECTCY(0.543); - MATHRND(0.5432, 2); EXPECTCY(0.54); - MATHRND(0.5432, 1); EXPECTCY(0.5); - MATHRND(0.5532, 0); EXPECTCY(1); - MATHRND(0.5532, -1); EXPECT_INVALID; - - MATHRND(0.5568, 5); EXPECTCY(0.5568); - MATHRND(0.5568, 4); EXPECTCY(0.5568); - MATHRND(0.5568, 3); EXPECTCY(0.557); - MATHRND(0.5568, 2); EXPECTCY(0.56); - MATHRND(0.5568, 1); EXPECTCY(0.6); - MATHRND(0.5568, 0); EXPECTCY(1); - MATHRND(0.5568, -1); EXPECT_INVALID; - - MATHRND(0.4999, 0); EXPECTCY(0); - MATHRND(0.5000, 0); EXPECTCY(0); - MATHRND(0.5001, 0); EXPECTCY(1); - MATHRND(1.4999, 0); EXPECTCY(1); - MATHRND(1.5000, 0); EXPECTCY(2); - MATHRND(1.5001, 0); EXPECTCY(2); -} - -#define MATHFIX(l) left = l; pVarCyFromR8(left, &cyLeft); \ - hres = pVarCyFix(cyLeft, &out) - -static void test_VarCyFix(void) -{ - MATHVARS1; - - CHECKPTR(VarCyFix); - MATHFIX(-1.0001); EXPECTCY(-1); - MATHFIX(-1.4999); EXPECTCY(-1); - MATHFIX(-1.5001); EXPECTCY(-1); - MATHFIX(-1.9999); EXPECTCY(-1); - MATHFIX(-0.0001); EXPECTCY(0); - MATHFIX(-0.4999); EXPECTCY(0); - MATHFIX(-0.5001); EXPECTCY(0); - MATHFIX(-0.9999); EXPECTCY(0); - MATHFIX(0.0001); EXPECTCY(0); - MATHFIX(0.4999); EXPECTCY(0); - MATHFIX(0.5001); EXPECTCY(0); - MATHFIX(0.9999); EXPECTCY(0); - MATHFIX(1.0001); EXPECTCY(1); - MATHFIX(1.4999); EXPECTCY(1); - MATHFIX(1.5001); EXPECTCY(1); - MATHFIX(1.9999); EXPECTCY(1); -} - -#define MATHINT(l) left = l; pVarCyFromR8(left, &cyLeft); \ - hres = pVarCyInt(cyLeft, &out) - -static void test_VarCyInt(void) -{ - MATHVARS1; - - CHECKPTR(VarCyInt); - MATHINT(-1.0001); EXPECTCY(-2); - MATHINT(-1.4999); EXPECTCY(-2); - MATHINT(-1.5001); EXPECTCY(-2); - MATHINT(-1.9999); EXPECTCY(-2); - MATHINT(-0.0001); EXPECTCY(-1); - MATHINT(-0.4999); EXPECTCY(-1); - MATHINT(-0.5001); EXPECTCY(-1); - MATHINT(-0.9999); EXPECTCY(-1); - MATHINT(0.0001); EXPECTCY(0); - MATHINT(0.4999); EXPECTCY(0); - MATHINT(0.5001); EXPECTCY(0); - MATHINT(0.9999); EXPECTCY(0); - MATHINT(1.0001); EXPECTCY(1); - MATHINT(1.4999); EXPECTCY(1); - MATHINT(1.5001); EXPECTCY(1); - MATHINT(1.9999); EXPECTCY(1); -} - -/* - * VT_DECIMAL - */ - -#undef CONV_TYPE -#define CONV_TYPE DECIMAL -#undef EXPECTRES -#define EXPECTRES(res, x) \ - ok(hres == S_OK || ((HRESULT)res != S_OK && hres == (HRESULT)res), \ - "expected hres " #x ", got hres=0x%08x\n", hres) - -#define EXPECTDEC(scl, sgn, hi, lo) ok(hres == S_OK && \ - S(U(out)).scale == (BYTE)(scl) && S(U(out)).sign == (BYTE)(sgn) && \ - out.Hi32 == (ULONG)(hi) && U1(out).Lo64 == (ULONG64)(lo), \ - "expected (%d,%d,%d,(%x %x)), got (%d,%d,%d,(%x %x)) hres 0x%08x\n", \ - scl, sgn, hi, (LONG)((LONG64)(lo) >> 32), (LONG)((lo) & 0xffffffff), S(U(out)).scale, \ - S(U(out)).sign, out.Hi32, S1(U1(out)).Mid32, S1(U1(out)).Lo32, hres) - -#define EXPECTDEC64(scl, sgn, hi, mid, lo) ok(hres == S_OK && \ - S(U(out)).scale == (BYTE)(scl) && S(U(out)).sign == (BYTE)(sgn) && \ - out.Hi32 == (ULONG)(hi) && S1(U1(out)).Mid32 == (ULONG)(mid) && \ - S1(U1(out)).Lo32 == (ULONG)(lo), \ - "expected (%d,%d,%d,(%x %x)), got (%d,%d,%d,(%x %x)) hres 0x%08x\n", \ - scl, sgn, hi, (LONG)(mid), (LONG)(lo), S(U(out)).scale, \ - S(U(out)).sign, out.Hi32, S1(U1(out)).Mid32, S1(U1(out)).Lo32, hres) - -#define EXPECTDECI if (i < 0) EXPECTDEC(0, 0x80, 0, -i); else EXPECTDEC(0, 0, 0, i) - -static void test_VarDecFromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarDecFromI1); - for (i = -128; i < 128; i++) - { - CONVERT(VarDecFromI1,i); EXPECTDECI; - } -} - -static void test_VarDecFromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarDecFromI2); - for (i = -32768; i < 32768; i++) - { - CONVERT(VarDecFromI2,i); EXPECTDECI; - } -} - -static void test_VarDecFromI4(void) -{ - CONVVARS(LONG); - int i; - - CHECKPTR(VarDecFromI4); - for (i = -32768; i < 32768; i++) - { - CONVERT(VarDecFromI4,i); EXPECTDECI; - } -} - -static void test_VarDecFromI8(void) -{ - CONVVARS(LONG64); - int i; - - CHECKPTR(VarDecFromI8); - for (i = -32768; i < 32768; i++) - { - CONVERT(VarDecFromI8,i); EXPECTDECI; - } -} - -static void test_VarDecFromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarDecFromUI1); - for (i = 0; i < 256; i++) - { - CONVERT(VarDecFromUI1,i); EXPECTDECI; - } -} - -static void test_VarDecFromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarDecFromUI2); - for (i = 0; i < 65536; i++) - { - CONVERT(VarDecFromUI2,i); EXPECTDECI; - } -} - -static void test_VarDecFromUI4(void) -{ - CONVVARS(ULONG); - int i; - - CHECKPTR(VarDecFromUI4); - for (i = 0; i < 65536; i++) - { - CONVERT(VarDecFromUI4,i); EXPECTDECI; - } -} - -static void test_VarDecFromUI8(void) -{ - CONVVARS(ULONG64); - int i; - - CHECKPTR(VarDecFromUI8); - for (i = 0; i < 65536; i++) - { - CONVERT(VarDecFromUI8,i); EXPECTDECI; - } -} - -static void test_VarDecFromBool(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarDecFromBool); - /* Test all possible type values. Note that the result is reduced to 0 or -1 */ - for (i = -32768; i < 0; i++) - { - CONVERT(VarDecFromBool,i); - if (i) - EXPECTDEC(0,0x80,0,1); - else - EXPECTDEC(0,0,0,0); - } -} - -static void test_VarDecFromR4(void) -{ - CONVVARS(float); - - CHECKPTR(VarDecFromR4); - - CONVERT(VarDecFromR4,-0.6f); EXPECTDEC(1,0x80,0,6); - CONVERT(VarDecFromR4,-0.5f); EXPECTDEC(1,0x80,0,5); - CONVERT(VarDecFromR4,-0.4f); EXPECTDEC(1,0x80,0,4); - CONVERT(VarDecFromR4,0.0f); EXPECTDEC(0,0,0,0); - CONVERT(VarDecFromR4,0.4f); EXPECTDEC(1,0,0,4); - CONVERT(VarDecFromR4,0.5f); EXPECTDEC(1,0,0,5); - CONVERT(VarDecFromR4,0.6f); EXPECTDEC(1,0,0,6); -} - -static void test_VarDecFromR8(void) -{ - CONVVARS(double); - - CHECKPTR(VarDecFromR8); - - CONVERT(VarDecFromR8,-0.6); EXPECTDEC(1,0x80,0,6); - CONVERT(VarDecFromR8,-0.5); EXPECTDEC(1,0x80,0,5); - CONVERT(VarDecFromR8,-0.4); EXPECTDEC(1,0x80,0,4); - CONVERT(VarDecFromR8,0.0); EXPECTDEC(0,0,0,0); - CONVERT(VarDecFromR8,0.4); EXPECTDEC(1,0,0,4); - CONVERT(VarDecFromR8,0.5); EXPECTDEC(1,0,0,5); - CONVERT(VarDecFromR8,0.6); EXPECTDEC(1,0,0,6); -} - -static void test_VarDecFromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarDecFromDate); - - CONVERT(VarDecFromDate,-0.6); EXPECTDEC(1,0x80,0,6); - CONVERT(VarDecFromDate,-0.5); EXPECTDEC(1,0x80,0,5); - CONVERT(VarDecFromDate,-0.4); EXPECTDEC(1,0x80,0,4); - CONVERT(VarDecFromDate,0.0); EXPECTDEC(0,0,0,0); - CONVERT(VarDecFromDate,0.4); EXPECTDEC(1,0,0,4); - CONVERT(VarDecFromDate,0.5); EXPECTDEC(1,0,0,5); - CONVERT(VarDecFromDate,0.6); EXPECTDEC(1,0,0,6); -} - -static void test_VarDecFromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - CHECKPTR(VarDecFromStr); - - in = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - CONVERT_STR(VarDecFromStr,NULL,0); EXPECT_MISMATCH; - CONVERT_STR(VarDecFromStr,"-1", LOCALE_NOUSEROVERRIDE); EXPECTDEC(0,0x80,0,1); - CONVERT_STR(VarDecFromStr,"0", LOCALE_NOUSEROVERRIDE); EXPECTDEC(0,0,0,0); - CONVERT_STR(VarDecFromStr,"1", LOCALE_NOUSEROVERRIDE); EXPECTDEC(0,0,0,1); - CONVERT_STR(VarDecFromStr,"0.5", LOCALE_NOUSEROVERRIDE); EXPECTDEC(1,0,0,5); - CONVERT_STR(VarDecFromStr,"4294967296", LOCALE_NOUSEROVERRIDE); EXPECTDEC64(0,0,0,1,0); - CONVERT_STR(VarDecFromStr,"18446744073709551616", LOCALE_NOUSEROVERRIDE); EXPECTDEC(0,0,1,0); - CONVERT_STR(VarDecFromStr,"4294967296.0", LOCALE_NOUSEROVERRIDE); EXPECTDEC64(0,0,0,1,0); - CONVERT_STR(VarDecFromStr,"18446744073709551616.0", LOCALE_NOUSEROVERRIDE); EXPECTDEC(0,0,1,0); -} - -static void test_VarDecFromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarDecFromCy); - - CONVERT_CY(VarDecFromCy, -1); EXPECTDEC(4,0x80,0,10000); - CONVERT_CY(VarDecFromCy, 0); EXPECTDEC(4,0,0,0); - CONVERT_CY(VarDecFromCy, 1); EXPECTDEC(4,0,0,10000); - CONVERT_CY(VarDecFromCy, 0.5); EXPECTDEC(4,0,0,5000); -} - -#undef MATHVARS1 -#define MATHVARS1 HRESULT hres; DECIMAL l, out -#undef MATHVARS2 -#define MATHVARS2 MATHVARS1; DECIMAL r -#undef MATH1 -#define MATH1(func) hres = p##func(&l, &out) -#undef MATH2 -#define MATH2(func) hres = p##func(&l, &r, &out) - -static void test_VarDecAbs(void) -{ - MATHVARS1; - - CHECKPTR(VarDecAbs); - SETDEC(l,0,0x80,0,1); MATH1(VarDecAbs); EXPECTDEC(0,0,0,1); - SETDEC(l,0,0,0,0); MATH1(VarDecAbs); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0x80,0,0); MATH1(VarDecAbs); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0,0,1); MATH1(VarDecAbs); EXPECTDEC(0,0,0,1); - - /* Doesn't check for invalid input */ - SETDEC(l,0,0x7f,0,1); MATH1(VarDecAbs); EXPECTDEC(0,0x7f,0,1); - SETDEC(l,0,0x80,29,1); MATH1(VarDecAbs); EXPECTDEC(0,0,29,1); -} - -static void test_VarDecNeg(void) -{ - MATHVARS1; - - CHECKPTR(VarDecNeg); - SETDEC(l,0,0x80,0,1); MATH1(VarDecNeg); EXPECTDEC(0,0,0,1); - SETDEC(l,0,0,0,0); MATH1(VarDecNeg); EXPECTDEC(0,0x80,0,0); /* '-0'! */ - SETDEC(l,0,0x80,0,0); MATH1(VarDecNeg); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0,0,1); MATH1(VarDecNeg); EXPECTDEC(0,0x80,0,1); - - /* Doesn't check for invalid input */ - SETDEC(l,0,0x7f,0,1); MATH1(VarDecNeg); EXPECTDEC(0,0xff,0,1); - SETDEC(l,0,0x80,29,1); MATH1(VarDecNeg); EXPECTDEC(0,0,29,1); - SETDEC(l,0,0,29,1); MATH1(VarDecNeg); EXPECTDEC(0,0x80,29,1); -} - -static void test_VarDecAdd(void) -{ - MATHVARS2; - - CHECKPTR(VarDecAdd); - SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecAdd); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0,0,0); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,1); - SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,1); - - SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,0); MATH2(VarDecAdd); EXPECTDEC(0,0,0,1); - SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,2); - SETDEC(l,0,0,0,1); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,0); /* '-0'! */ - SETDEC(l,0,0,0,1); SETDEC(r,0,0x80,0,2); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,1); - - SETDEC(l,0,0x80,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,1); - SETDEC(l,0,0x80,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0x80,0,1); SETDEC(r,0,0,0,2); MATH2(VarDecAdd); EXPECTDEC(0,0,0,1); - SETDEC(l,0,0x80,0,1); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,2); - SETDEC(l,0,0x80,0,2); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0x80,0,1); - - SETDEC(l,0,0,0,0xffffffff); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,0xfffffffe); - SETDEC(l,0,0,0,0xffffffff); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,(ULONG64)1 << 32); - SETDEC(l,0,0,0,0xffffffff); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0,(ULONG64)1 << 32); - - SETDEC64(l,0,0,0,0xffffffff,0); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC64(0,0,0,0xffffffff,1); - SETDEC64(l,0,0,0,0xffffffff,0); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); - EXPECTDEC64(0,0,0,0xfffffffe,0xffffffff); - - SETDEC64(l,0,0,0,0xffffffff,0xffffffff); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,1,0); - SETDEC64(l,0,0,0,0xffffffff,0xffffffff); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); - EXPECTDEC64(0,0,0,0xffffffff,0xfffffffe); - - SETDEC(l,0,0,0xffffffff,0); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(0,0,0xffffffff,1); - SETDEC(l,0,0,0xffffffff,0); SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); - EXPECTDEC64(0,0,0xfffffffe,0xffffffff,0xffffffff); - - SETDEC64(l,0,0,0xffffffff,0xffffffff,0xffffffff);SETDEC(r,0,0x80,0,1); MATH2(VarDecAdd); - EXPECTDEC64(0,0,0xffffffff,0xffffffff,0xfffffffe); - SETDEC64(l,0,0,0xffffffff,0xffffffff,0xffffffff);SETDEC(r,0,0,0,1); MATH2(VarDecAdd); - ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%d,(%8x,%8x)x) hres 0x%08x\n", - S(U(out)).scale, S(U(out)).sign, out.Hi32, S1(U1(out)).Mid32, S1(U1(out)).Lo32, hres); - - /* Promotes to the highest scale, so here the results are in the scale of 2 */ - SETDEC(l,2,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecAdd); EXPECTDEC(2,0,0,0); - SETDEC(l,2,0,0,100); SETDEC(r,0,0,0,1); MATH2(VarDecAdd); EXPECTDEC(2,0,0,200); -} - -static void test_VarDecSub(void) -{ - MATHVARS2; - - CHECKPTR(VarDecSub); - SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecSub); EXPECTDEC(0,0x80,0,0); - SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecSub); EXPECTDEC(0,0x80,0,1); - SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecSub); EXPECTDEC(0,0x80,0,0); - SETDEC(l,0,0,0,1); SETDEC(r,0,0x80,0,1); MATH2(VarDecSub); EXPECTDEC(0,0,0,2); -} - -static void test_VarDecMul(void) -{ - MATHVARS2; - - CHECKPTR(VarDecMul); - SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecMul); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,0); MATH2(VarDecMul); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecMul); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecMul); EXPECTDEC(0,0,0,1); - SETDEC(l,0,0,0,45000);SETDEC(r,0,0,0,2); MATH2(VarDecMul); EXPECTDEC(0,0,0,90000); - SETDEC(l,0,0,0,2); SETDEC(r,0,0,0,45000); MATH2(VarDecMul); EXPECTDEC(0,0,0,90000); - - SETDEC(l,0,0x80,0,2); SETDEC(r,0,0,0,2); MATH2(VarDecMul); EXPECTDEC(0,0x80,0,4); - SETDEC(l,0,0,0,2); SETDEC(r,0,0x80,0,2); MATH2(VarDecMul); EXPECTDEC(0,0x80,0,4); - SETDEC(l,0,0x80,0,2); SETDEC(r,0,0x80,0,2); MATH2(VarDecMul); EXPECTDEC(0,0,0,4); - - SETDEC(l,4,0,0,2); SETDEC(r,0,0,0,2); MATH2(VarDecMul); EXPECTDEC(4,0,0,4); - SETDEC(l,0,0,0,2); SETDEC(r,3,0,0,2); MATH2(VarDecMul); EXPECTDEC(3,0,0,4); - SETDEC(l,4,0,0,2); SETDEC(r,3,0,0,2); MATH2(VarDecMul); EXPECTDEC(7,0,0,4); - /* this last one shows that native oleaut32 does *not* gratuitously seize opportunities - to reduce the scale if possible - the canonical result for the expected value is (6,0,0,1) - */ - SETDEC(l,4,0,0,5); SETDEC(r,3,0,0,2); MATH2(VarDecMul); EXPECTDEC(7,0,0,10); - - SETDEC64(l,0,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC(r,0,0,0,2); MATH2(VarDecMul); EXPECTDEC64(0,0,1,0xFFFFFFFF,0xFFFFFFFE); - SETDEC(l,0,0,0,2); SETDEC64(r,0,0,0,0xFFFFFFFF,0xFFFFFFFF); MATH2(VarDecMul); EXPECTDEC64(0,0,1,0xFFFFFFFF,0xFFFFFFFE); - SETDEC(l,0,0,1,1); SETDEC(r,0,0,0,0x80000000); MATH2(VarDecMul); EXPECTDEC(0,0,0x80000000,0x80000000); - SETDEC(l,0,0,0,0x80000000); SETDEC(r,0,0,1,1); MATH2(VarDecMul); EXPECTDEC(0,0,0x80000000,0x80000000); - - /* near-overflow, used as a reference */ - SETDEC64(l,0,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC(r,0,0,0,2000000000); MATH2(VarDecMul);EXPECTDEC64(0,0,1999999999,0xFFFFFFFF,0x88CA6C00); - /* actual overflow - right operand is 10 times the previous value */ - SETDEC64(l,0,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC64(r,0,0,0,4,0xA817C800); MATH2(VarDecMul); - ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%d,(%8x,%8x)x) hres 0x%08x\n", - S(U(out)).scale, S(U(out)).sign, out.Hi32, S1(U1(out)).Mid32, S1(U1(out)).Lo32, hres); - /* here, native oleaut32 has an opportunity to avert the overflow, by reducing the scale of the result */ - SETDEC64(l,1,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC64(r,0,0,0,4,0xA817C800); MATH2(VarDecMul);EXPECTDEC64(0,0,1999999999,0xFFFFFFFF,0x88CA6C00); - - /* near-overflow, used as a reference */ - SETDEC64(l,0,0,1,0xFFFFFFFF,0xFFFFFFFE); SETDEC(r,0,0,0,1000000000); MATH2(VarDecMul);EXPECTDEC64(0,0,1999999999,0xFFFFFFFF,0x88CA6C00); - /* actual overflow - right operand is 10 times the previous value */ - SETDEC64(l,0,0,1,0xFFFFFFFF,0xFFFFFFFE); SETDEC64(r,0,0,0,2,0x540BE400); MATH2(VarDecMul); - ok(hres == DISP_E_OVERFLOW,"Expected overflow, got (%d,%d,%d,(%8x,%8x)x) hres 0x%08x\n", - S(U(out)).scale, S(U(out)).sign, out.Hi32, S1(U1(out)).Mid32, S1(U1(out)).Lo32, hres); - /* here, native oleaut32 has an opportunity to avert the overflow, by reducing the scale of the result */ - SETDEC64(l,1,0,1,0xFFFFFFFF,0xFFFFFFFE); SETDEC64(r,0,0,0,2,0x540BE400); MATH2(VarDecMul);EXPECTDEC64(0,0,1999999999,0xFFFFFFFF,0x88CA6C00); - - /* this one shows that native oleaut32 is willing to lose significant digits in order to avert an overflow */ - SETDEC64(l,2,0,0,0xFFFFFFFF,0xFFFFFFFF); SETDEC64(r,0,0,0,9,0x502F9001); MATH2(VarDecMul);EXPECTDEC64(1,0,0xee6b2800,0x19999998,0xab2e719a); -} - -static void test_VarDecDiv(void) -{ - MATHVARS2; - - CHECKPTR(VarDecDiv); - /* identity divisions */ - SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,1); MATH2(VarDecDiv); EXPECTDEC(0,0,0,0); - SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecDiv); EXPECTDEC(0,0,0,1); - SETDEC(l,1,0,0,1); SETDEC(r,0,0,0,1); MATH2(VarDecDiv); EXPECTDEC(1,0,0,1); - - /* exact divisions */ - SETDEC(l,0,0,0,45); SETDEC(r,0,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0,0,5); - SETDEC(l,1,0,0,45); SETDEC(r,0,0,0,9); MATH2(VarDecDiv); EXPECTDEC(1,0,0,5); - SETDEC(l,0,0,0,45); SETDEC(r,1,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0,0,50); - SETDEC(l,1,0,0,45); SETDEC(r,2,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0,0,50); - /* these last three results suggest that native oleaut32 scales both operands down to zero - before the division, but does *not* try to scale the result, even if it is possible - - analogous to multiplication behavior - */ - SETDEC(l,1,0,0,45); SETDEC(r,1,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0,0,5); - SETDEC(l,2,0,0,450); SETDEC(r,1,0,0,9); MATH2(VarDecDiv); EXPECTDEC(1,0,0,50); - - /* inexact divisions */ - SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,180700362,0x14b700cb,0x05555555); - SETDEC(l,1,0,0,1); SETDEC(r,0,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,18070036,0x35458014,0x4d555555); - SETDEC(l,0,0,0,1); SETDEC(r,1,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,1807003620,0xcf2607ee,0x35555555); - SETDEC(l,1,0,0,1); SETDEC(r,2,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,1807003620,0xcf2607ee,0x35555555); - SETDEC(l,1,0,0,1); SETDEC(r,1,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,180700362,0x14b700cb,0x05555555); - SETDEC(l,2,0,0,10); SETDEC(r,1,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,180700362,0x14b700cb,0x05555555); - - /* this one shows that native oleaut32 rounds up the result */ - SETDEC(l,0,0,0,2); SETDEC(r,0,0,0,3); MATH2(VarDecDiv); EXPECTDEC64(28,0,361400724,0x296e0196,0x0aaaaaab); - - /* sign tests */ - SETDEC(l,0,0x80,0,45); SETDEC(r,0,0,0,9); MATH2(VarDecDiv); EXPECTDEC(0,0x80,0,5); - SETDEC(l,0,0,0,45); SETDEC(r,0,0x80,0,9); MATH2(VarDecDiv);EXPECTDEC(0,0x80,0,5); - SETDEC(l,0,0x80,0,45); SETDEC(r,0,0x80,0,9); MATH2(VarDecDiv);EXPECTDEC(0,0,0,5); - - /* oddballs */ - SETDEC(l,0,0,0,0); SETDEC(r,0,0,0,0); MATH2(VarDecDiv);/* indeterminate */ - ok(hres == DISP_E_DIVBYZERO,"Expected division-by-zero, got (%d,%d,%d,(%8x,%8x)x) hres 0x%08x\n", - S(U(out)).scale, S(U(out)).sign, out.Hi32, S1(U1(out)).Mid32, S1(U1(out)).Lo32, hres); - SETDEC(l,0,0,0,1); SETDEC(r,0,0,0,0); MATH2(VarDecDiv);/* division by zero */ - ok(hres == DISP_E_DIVBYZERO,"Expected division-by-zero, got (%d,%d,%d,(%8x,%8x)x) hres 0x%08x\n", - S(U(out)).scale, S(U(out)).sign, out.Hi32, S1(U1(out)).Mid32, S1(U1(out)).Lo32, hres); - -} - -static void test_VarDecCmp(void) -{ - MATHVARS1; - - CHECKPTR(VarDecCmp); - SETDEC(l,0,0,0,1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_EQ; - SETDEC(l,0,0,0,1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT; - SETDEC(l,0,0,0,0); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT; -} - -/* - * VT_BOOL - */ - -#undef CONV_TYPE -#define CONV_TYPE VARIANT_BOOL -#undef _EXPECTRES -#define _EXPECTRES(res, x, fs) \ - ok((hres == S_OK && out == (CONV_TYPE)(x)) || ((HRESULT)res != S_OK && hres == (HRESULT)res), \ - "expected " #x ", got " fs "; hres=0x%08x\n", out, hres) -#undef EXPECTRES -#define EXPECTRES(res, x) _EXPECTRES(res, x, "%d") -#undef CONVERTRANGE -#define CONVERTRANGE(func,start,end) for (i = start; i < end; i++) { \ - CONVERT(func, i); if (i) { EXPECT(VARIANT_TRUE); } else { EXPECT(VARIANT_FALSE); } } - -static void test_VarBoolFromI1(void) -{ - CONVVARS(signed char); - int i; - - CHECKPTR(VarBoolFromI1); - CONVERTRANGE(VarBoolFromI1, -128, 128); -} - -static void test_VarBoolFromUI1(void) -{ - CONVVARS(BYTE); - int i; - - CHECKPTR(VarBoolFromUI1); - CONVERTRANGE(VarBoolFromUI1, 0, 256); -} - -static void test_VarBoolFromI2(void) -{ - CONVVARS(SHORT); - int i; - - CHECKPTR(VarBoolFromI2); - CONVERTRANGE(VarBoolFromI2, -32768, 32768); -} - -static void test_VarBoolFromUI2(void) -{ - CONVVARS(USHORT); - int i; - - CHECKPTR(VarBoolFromUI2); - CONVERTRANGE(VarBoolFromUI2, 0, 65536); -} - -static void test_VarBoolFromI4(void) -{ - CONVVARS(int); - - CHECKPTR(VarBoolFromI4); - CONVERT(VarBoolFromI4, 0x80000000); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromI4, -1); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromI4, 0); EXPECT(VARIANT_FALSE); - CONVERT(VarBoolFromI4, 1); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromI4, 0x7fffffff); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromUI4(void) -{ - CONVVARS(ULONG); - - CHECKPTR(VarBoolFromUI4); - CONVERT(VarBoolFromI4, 0); EXPECT(VARIANT_FALSE); - CONVERT(VarBoolFromI4, 1); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromI4, 0x80000000); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromR4(void) -{ - CONVVARS(FLOAT); - - CHECKPTR(VarBoolFromR4); - CONVERT(VarBoolFromR4, -1.0f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, 0.0f); EXPECT(VARIANT_FALSE); - CONVERT(VarBoolFromR4, 1.0f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, 1.5f); EXPECT(VARIANT_TRUE); - - /* Rounding */ - CONVERT(VarBoolFromR4, -1.5f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, -0.6f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, -0.5f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, -0.4f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, 0.4f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, 0.5f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, 0.6f); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR4, 1.5f); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromR8(void) -{ - CONVVARS(DOUBLE); - - /* Hopefully we made the point with R4 above that rounding is - * irrelevant, so we'll skip that for R8 and Date - */ - CHECKPTR(VarBoolFromR8); - CONVERT(VarBoolFromR8, -1.0); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromR8, -0.0); EXPECT(VARIANT_FALSE); - CONVERT(VarBoolFromR8, 1.0); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromCy(void) -{ - CONVVARS(CY); - - CHECKPTR(VarBoolFromCy); - CONVERT_CY(VarBoolFromCy, -32769); EXPECT(VARIANT_TRUE); - CONVERT_CY(VarBoolFromCy, -32768); EXPECT(VARIANT_TRUE); - CONVERT_CY(VarBoolFromCy, -1); EXPECT(VARIANT_TRUE); - CONVERT_CY(VarBoolFromCy, 0); EXPECT(VARIANT_FALSE); - CONVERT_CY(VarBoolFromCy, 1); EXPECT(VARIANT_TRUE); - CONVERT_CY(VarBoolFromCy, 32767); EXPECT(VARIANT_TRUE); - CONVERT_CY(VarBoolFromCy, 32768); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromI8(void) -{ - CONVVARS(LONG64); - - CHECKPTR(VarBoolFromI8); - CONVERT(VarBoolFromI8, -1); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromI8, 0); EXPECT(VARIANT_FALSE); - CONVERT(VarBoolFromI8, 1); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromUI8(void) -{ - CONVVARS(ULONG64); - - CHECKPTR(VarBoolFromUI8); - CONVERT(VarBoolFromUI8, 0); EXPECT(VARIANT_FALSE); - CONVERT(VarBoolFromUI8, 1); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromDec(void) -{ - CONVVARS(DECIMAL); - - CHECKPTR(VarBoolFromDec); - CONVERT_BADDEC(VarBoolFromDec); - - if (HAVE_OLEAUT32_DECIMAL) - { - /* Early versions of oleaut32 don't catch these errors */ - CONVERT_DEC(VarBoolFromDec,29,0,0,0); EXPECT_INVALID; - CONVERT_DEC(VarBoolFromDec,0,0x1,0,0); EXPECT_INVALID; - CONVERT_DEC(VarBoolFromDec,0,0x40,0,0); EXPECT_INVALID; - CONVERT_DEC(VarBoolFromDec,0,0x7f,0,0); EXPECT_INVALID; - } - - CONVERT_DEC(VarBoolFromDec,0,0x80,0,1); EXPECT(VARIANT_TRUE); - CONVERT_DEC(VarBoolFromDec,0,0,0,0); EXPECT(VARIANT_FALSE); - CONVERT_DEC(VarBoolFromDec,0,0,0,1); EXPECT(VARIANT_TRUE); - CONVERT_DEC(VarBoolFromDec,0,0,1,0); EXPECT(VARIANT_TRUE); - - CONVERT_DEC(VarBoolFromDec,2,0,0,CY_MULTIPLIER); EXPECT(VARIANT_TRUE); - CONVERT_DEC(VarBoolFromDec,2,0x80,0,CY_MULTIPLIER); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromDate(void) -{ - CONVVARS(DATE); - - CHECKPTR(VarBoolFromDate); - CONVERT(VarBoolFromDate, -1.0); EXPECT(VARIANT_TRUE); - CONVERT(VarBoolFromDate, -0.0); EXPECT(VARIANT_FALSE); - CONVERT(VarBoolFromDate, 1.0); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolFromStr(void) -{ - CONVVARS(LCID); - OLECHAR buff[128]; - - CHECKPTR(VarBoolFromStr); - - in = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - CONVERT_STR(VarBoolFromStr,NULL,0); - if (hres != E_INVALIDARG) - EXPECT_MISMATCH; - - /* #FALSE# and #TRUE# Are always accepted */ - CONVERT_STR(VarBoolFromStr,"#FALSE#",0); EXPECT(VARIANT_FALSE); - CONVERT_STR(VarBoolFromStr,"#TRUE#",0); EXPECT(VARIANT_TRUE); - - /* Match of #FALSE# and #TRUE# is case sensitive */ - CONVERT_STR(VarBoolFromStr,"#False#",0); EXPECT_MISMATCH; - /* But match against English is not */ - CONVERT_STR(VarBoolFromStr,"false",0); EXPECT(VARIANT_FALSE); - CONVERT_STR(VarBoolFromStr,"False",0); EXPECT(VARIANT_FALSE); - /* On/Off and yes/no are not acceptable inputs, with any flags set */ - CONVERT_STR(VarBoolFromStr,"On",0xffffffff); EXPECT_MISMATCH; - CONVERT_STR(VarBoolFromStr,"Yes",0xffffffff); EXPECT_MISMATCH; - - /* Change the LCID. This doesn't make any difference for text,unless we ask - * to check local boolean text with the VARIANT_LOCALBOOL flag. */ - in = MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT); - - /* #FALSE# and #TRUE# are accepted in all locales */ - CONVERT_STR(VarBoolFromStr,"#FALSE#",0); EXPECT(VARIANT_FALSE); - CONVERT_STR(VarBoolFromStr,"#TRUE#",0); EXPECT(VARIANT_TRUE); - CONVERT_STR(VarBoolFromStr,"#FALSE#",VARIANT_LOCALBOOL); EXPECT(VARIANT_FALSE); - CONVERT_STR(VarBoolFromStr,"#TRUE#",VARIANT_LOCALBOOL); EXPECT(VARIANT_TRUE); - - /* English is accepted regardless of the locale */ - CONVERT_STR(VarBoolFromStr,"false",0); EXPECT(VARIANT_FALSE); - /* And is still not case sensitive */ - CONVERT_STR(VarBoolFromStr,"False",0); EXPECT(VARIANT_FALSE); - - if (HAVE_OLEAUT32_LOCALES) - { - /* French is rejected without VARIANT_LOCALBOOL */ - CONVERT_STR(VarBoolFromStr,"faux",0); EXPECT_MISMATCH; - /* But accepted if this flag is given */ - CONVERT_STR(VarBoolFromStr,"faux",VARIANT_LOCALBOOL); EXPECT(VARIANT_FALSE); - /* Regardless of case - from this we assume locale text comparisons ignore case */ - CONVERT_STR(VarBoolFromStr,"Faux",VARIANT_LOCALBOOL); EXPECT(VARIANT_FALSE); - - /* Changing the locale prevents the localised text from being compared - - * this demonstrates that only the indicated LCID and English are searched */ - in = MAKELCID(MAKELANGID(LANG_POLISH, SUBLANG_DEFAULT), SORT_DEFAULT); - CONVERT_STR(VarBoolFromStr,"faux",VARIANT_LOCALBOOL); EXPECT_MISMATCH; - } - - /* Numeric strings are read as 0 or non-0 */ - CONVERT_STR(VarBoolFromStr,"0",0); EXPECT(VARIANT_FALSE); - CONVERT_STR(VarBoolFromStr,"-1",0); EXPECT(VARIANT_TRUE); - CONVERT_STR(VarBoolFromStr,"+1",0); EXPECT(VARIANT_TRUE); - - if (HAVE_OLEAUT32_LOCALES) - { - /* Numeric strings are read as floating point numbers. The line below fails - * because '.' is not a valid decimal separator for Polish numbers */ - CONVERT_STR(VarBoolFromStr,"0.1",LOCALE_NOUSEROVERRIDE); EXPECT_MISMATCH; - } - - /* Changing the lcid back to US English reads the r8 correctly */ - in = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - CONVERT_STR(VarBoolFromStr,"0.1",LOCALE_NOUSEROVERRIDE); EXPECT(VARIANT_TRUE); -} - -static void test_VarBoolCopy(void) -{ - COPYTEST(1, VT_BOOL, V_BOOL(&vSrc), V_BOOL(&vDst), V_BOOLREF(&vSrc), V_BOOLREF(&vDst), "%d"); -} - -#define BOOL_STR(flags, str) hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, flags, VT_BSTR); \ - ok(hres == S_OK && V_VT(&vDst) == VT_BSTR && \ - V_BSTR(&vDst) && !memcmp(V_BSTR(&vDst), str, sizeof(str)), \ - "hres=0x%X, type=%d (should be VT_BSTR), *bstr='%c'\n", \ - hres, V_VT(&vDst), V_BSTR(&vDst) ? *V_BSTR(&vDst) : '?') - -static void test_VarBoolChangeTypeEx(void) -{ - static const WCHAR szTrue[] = { 'T','r','u','e','\0' }; - static const WCHAR szFalse[] = { 'F','a','l','s','e','\0' }; - static const WCHAR szFaux[] = { 'F','a','u','x','\0' }; - CONVVARS(CONV_TYPE); - VARIANTARG vSrc, vDst; - LCID lcid; - - in = 1; - - INITIAL_TYPETEST(VT_BOOL, V_BOOL, "%d"); - COMMON_TYPETEST; - - /* The common tests convert to a number. Try the different flags */ - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - V_VT(&vSrc) = VT_BOOL; - V_BOOL(&vSrc) = 1; - - if (!IS_ANCIENT) - { - BOOL_STR(VARIANT_ALPHABOOL, szTrue); - V_BOOL(&vSrc) = 0; - BOOL_STR(VARIANT_ALPHABOOL, szFalse); - } - - if (HAVE_OLEAUT32_LOCALES) - { - lcid = MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT); - - /* VARIANT_ALPHABOOL is always English */ - BOOL_STR(VARIANT_ALPHABOOL, szFalse); - /* VARIANT_LOCALBOOL uses the localised text */ - BOOL_STR(VARIANT_LOCALBOOL, szFaux); - /* Both flags together acts as VARIANT_LOCALBOOL */ - BOOL_STR(VARIANT_ALPHABOOL|VARIANT_LOCALBOOL, szFaux); - } -} - -/* - * BSTR - */ - -static void test_VarBstrFromR4(void) -{ - static const WCHAR szNative[] = { '6','5','4','3','2','2','.','3','\0' }; - static const WCHAR szZero[] = {'0', '\0'}; - static const WCHAR szOneHalf_English[] = { '0','.','5','\0' }; /* uses period */ - static const WCHAR szOneHalf_Spanish[] = { '0',',','5','\0' }; /* uses comma */ - LCID lcid; - LCID lcid_spanish; - HRESULT hres; - BSTR bstr = NULL; - - float f; - - CHECKPTR(VarBstrFromR4); - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - lcid_spanish = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH), SORT_DEFAULT); - f = 654322.23456f; - hres = pVarBstrFromR4(f, lcid, 0, &bstr); - ok(hres == S_OK, "got hres 0x%08x\n", hres); - if (bstr) - { - todo_wine { - /* MSDN states that rounding of R4/R8 is dependent on the underlying - * bit pattern of the number and so is architecture dependent. In this - * case Wine returns .2 (which is more correct) and Native returns .3 - */ - ok(memcmp(bstr, szNative, sizeof(szNative)) == 0, "string different\n"); - } - } - - f = -0.0; - hres = pVarBstrFromR4(f, lcid, 0, &bstr); - ok(hres == S_OK, "got hres 0x%08x\n", hres); - if (bstr) - { - ok(memcmp(bstr, szZero, sizeof(szZero)) == 0, "negative zero (got %s)\n", wtoascii(bstr)); - } - - /* The following tests that lcid is used for decimal separator even without LOCALE_USE_NLS */ - f = 0.5; - hres = pVarBstrFromR4(f, lcid, LOCALE_NOUSEROVERRIDE, &bstr); - ok(hres == S_OK, "got hres 0x%08x\n", hres); - if (bstr) - { - ok(memcmp(bstr, szOneHalf_English, sizeof(szOneHalf_English)) == 0, "English locale failed (got %s)\n", wtoascii(bstr)); - } - f = 0.5; - hres = pVarBstrFromR4(f, lcid_spanish, LOCALE_NOUSEROVERRIDE, &bstr); - ok(hres == S_OK, "got hres 0x%08x\n", hres); - if (bstr) - { - ok(memcmp(bstr, szOneHalf_Spanish, sizeof(szOneHalf_Spanish)) == 0, "Spanish locale failed (got %s)\n", wtoascii(bstr)); - } -} - -#define BSTR_DATE(dt,str) SysFreeString(bstr); bstr = NULL; \ - hres = pVarBstrFromDate(dt,lcid,LOCALE_NOUSEROVERRIDE,&bstr); \ - if (bstr) WideCharToMultiByte(CP_ACP, 0, bstr, -1, buff, sizeof(buff), 0, 0); \ - else buff[0] = 0; \ - ok(hres == S_OK && !strcmp(str,buff), "Expected '%s', got '%s', hres = 0x%08x\n", \ - str, buff, hres) - -static void test_VarBstrFromDate(void) -{ - char buff[256]; - LCID lcid; - HRESULT hres; - BSTR bstr = NULL; - - CHECKPTR(VarBstrFromDate); - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - BSTR_DATE(0.0, "12:00:00 AM"); - BSTR_DATE(3.34, "1/2/1900 8:09:36 AM"); - BSTR_DATE(3339.34, "2/20/1909 8:09:36 AM"); - BSTR_DATE(365.00, "12/30/1900"); - BSTR_DATE(365.25, "12/30/1900 6:00:00 AM"); - BSTR_DATE(1461.0, "12/31/1903"); - BSTR_DATE(1461.5, "12/31/1903 12:00:00 PM"); - todo_wine { BSTR_DATE(-657434.0, "1/1/100"); } - BSTR_DATE(2958465.0, "12/31/9999"); -} - -#define BSTR_DEC(l, a, b, c, d, e) \ - SETDEC(l, a,b,c,d);\ - hres = VarBstrFromDec(&l, lcid, LOCALE_NOUSEROVERRIDE, &bstr);\ - ok(hres == S_OK, "got hres 0x%08x\n", hres);\ - if (hres== S_OK && bstr)\ - {\ - ok(lstrcmpW(bstr, e) == 0, "invalid number (got %s)\n", wtoascii(bstr));\ - } - -#define BSTR_DEC64(l, a, b, c, x, d, e) \ - SETDEC64(l, a,b,c,x,d);\ - hres = VarBstrFromDec(&l, lcid, LOCALE_NOUSEROVERRIDE, &bstr);\ - ok(hres == S_OK, "got hres 0x%08x\n", hres);\ - if (hres== S_OK && bstr)\ - {\ - ok(lstrcmpW(bstr, e) == 0, "invalid number (got %s)\n", wtoascii(bstr));\ - } - -static void test_VarBstrFromDec(void) -{ - LCID lcid; - HRESULT hres; - BSTR bstr = NULL; - DECIMAL l; - - static const WCHAR szZero[] = {'0', '\0'}; - static const WCHAR szOne[] = {'1', '\0'}; - static const WCHAR szOnePointFive[] = {'1','.','5','\0'}; - static const WCHAR szMinusOnePointFive[] = {'-','1','.','5','\0'}; - static const WCHAR szBigNum1[] = {'4','2','9','4','9','6','7','2','9','5','\0'}; /* (1 << 32) - 1 */ - static const WCHAR szBigNum2[] = {'4','2','9','4','9','6','7','2','9','6','\0'}; /* (1 << 32) */ - static const WCHAR szBigNum3[] = {'1','8','4','4','6','7','4','4','0','7','3','7','0','9','5','5','1','6','1','5','\0'}; /* (1 << 64) - 1 */ - static const WCHAR szBigNum4[] = {'1','8','4','4','6','7','4','4','0','7','3','7','0','9','5','5','1','6','1','6','\0'}; /* (1 << 64) */ - static const WCHAR szBigNum5[] = {'7','9','2','2','8','1','6','2','5','1','4','2','6','4','3','3','7','5','9','3','5','4','3','9','5','0','3','3','5','\0'}; /* (1 << 96) - 1 */ - static const WCHAR szBigScale1[] = {'0','.','0','0','0','0','0','0','0','0','0','1','\0'}; /* 1 * 10^-10 */ - static const WCHAR szBigScale2[] = {'7','9','2','2','8','1','6','2','5','1','4','2','6','4','3','3','7','5','9','.','3','5','4','3','9','5','0','3','3','5','\0'}; /* ((1 << 96) - 1) * 10^-10 */ - static const WCHAR szBigScale3[] = {'7','.','9','2','2','8','1','6','2','5','1','4','2','6','4','3','3','7','5','9','3','5','4','3','9','5','0','3','3','5','\0'}; /* ((1 << 96) - 1) * 10^-28 */ - - static const WCHAR szSmallNumber_English[] = {'0','.','0','0','0','9','\0'}; - static const WCHAR szSmallNumber_Spanish[] = {'0',',','0','0','0','9','\0'}; - - CHECKPTR(VarBstrFromDec); - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - - /* check zero */ - BSTR_DEC(l, 0,0,0,0, szZero); - - /* check one */ - BSTR_DEC(l, 0,0,0,1, szOne); - BSTR_DEC(l, 1,0,0,10,szOne); - BSTR_DEC(l, 2,0,0,100,szOne); - BSTR_DEC(l, 3,0,0,1000,szOne); - - /* check one point five */ - BSTR_DEC(l, 1,0,0,15, szOnePointFive); - BSTR_DEC(l, 2,0,0,150, szOnePointFive); - BSTR_DEC(l, 3,0,0,1500, szOnePointFive); - - /* check minus one point five */ - BSTR_DEC(l, 1,0x80,0,15, szMinusOnePointFive); - - /* check bignum (1) */ - BSTR_DEC(l, 0,0,0,0xffffffff, szBigNum1); - - /* check bignum (2) */ - BSTR_DEC64(l, 0,0,0,1,0, szBigNum2); - - /* check bignum (3) */ - BSTR_DEC64(l, 0,0,0,0xffffffff,0xffffffff, szBigNum3); - - /* check bignum (4) */ - BSTR_DEC(l, 0,0,1,0, szBigNum4); - - /* check bignum (5) */ - BSTR_DEC64(l, 0,0,0xffffffff,0xffffffff,0xffffffff, szBigNum5); - - /* check bigscale (1) */ - BSTR_DEC(l, 10,0,0,1, szBigScale1); - - /* check bigscale (2) */ - BSTR_DEC64(l, 10,0,0xffffffffUL,0xffffffff,0xffffffff, szBigScale2); - - /* check bigscale (3) */ - BSTR_DEC64(l, 28,0,0xffffffffUL,0xffffffff,0xffffffff, szBigScale3); - - /* check leading zeros and decimal sep. for English locale */ - BSTR_DEC(l, 4,0,0,9, szSmallNumber_English); - BSTR_DEC(l, 5,0,0,90, szSmallNumber_English); - BSTR_DEC(l, 6,0,0,900, szSmallNumber_English); - BSTR_DEC(l, 7,0,0,9000, szSmallNumber_English); - - lcid = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_DEFAULT), SORT_DEFAULT); - - /* check leading zeros and decimal sep. for Spanish locale */ - BSTR_DEC(l, 4,0,0,9, szSmallNumber_Spanish); - BSTR_DEC(l, 5,0,0,90, szSmallNumber_Spanish); - BSTR_DEC(l, 6,0,0,900, szSmallNumber_Spanish); - BSTR_DEC(l, 7,0,0,9000, szSmallNumber_Spanish); -} -#undef BSTR_DEC -#undef BSTR_DEC64 - -#define _VARBSTRCMP(left,right,lcid,flags,result) \ - hres = pVarBstrCmp(left,right,lcid,flags); \ - ok(hres == result, "VarBstrCmp: expected " #result ", got hres=0x%x\n", hres) -#define VARBSTRCMP(left,right,flags,result) \ - _VARBSTRCMP(left,right,lcid,flags,result) - -static void test_VarBstrCmp(void) -{ - LCID lcid; - HRESULT hres; - static const WCHAR sz[] = {'W','u','r','s','c','h','t','\0'}; - static const WCHAR szempty[] = {'\0'}; - static const WCHAR sz1[] = { 'a',0 }; - static const WCHAR sz2[] = { 'A',0 }; - static const WCHAR s1[] = { 'a',0 }; - static const WCHAR s2[] = { 'a',0,'b' }; - static const char sb1[] = {1,0,1}; - static const char sb2[] = {1,0,2}; - BSTR bstr, bstrempty, bstr2; - - CHECKPTR(VarBstrCmp); - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT); - bstr = SysAllocString(sz); - bstrempty = SysAllocString(szempty); - - /* NULL handling. Yepp, MSDN is totaly wrong here */ - VARBSTRCMP(NULL,NULL,0,VARCMP_EQ); - VARBSTRCMP(bstr,NULL,0,VARCMP_GT); - VARBSTRCMP(NULL,bstr,0,VARCMP_LT); - - /* NULL and empty string comparisions */ - VARBSTRCMP(bstrempty,NULL,0,VARCMP_EQ); - VARBSTRCMP(NULL,bstrempty,0,VARCMP_EQ); - - SysFreeString(bstr); - bstr = SysAllocString(sz1); - - bstr2 = SysAllocString(sz2); - VARBSTRCMP(bstr,bstr2,0,VARCMP_LT); - VARBSTRCMP(bstr,bstr2,NORM_IGNORECASE,VARCMP_EQ); - SysFreeString(bstr2); - /* These two strings are considered equal even though one is - * NULL-terminated and the other not. - */ - bstr2 = SysAllocStringLen(s1, sizeof(s1) / sizeof(WCHAR)); - VARBSTRCMP(bstr,bstr2,0,VARCMP_EQ); - SysFreeString(bstr2); - - /* These two strings are not equal */ - bstr2 = SysAllocStringLen(s2, sizeof(s2) / sizeof(WCHAR)); - VARBSTRCMP(bstr,bstr2,0,VARCMP_LT); - SysFreeString(bstr2); - - SysFreeString(bstr); - - /* When (LCID == 0) it should be a binary comparison - * so these two strings could not match. - */ - bstr = SysAllocStringByteLen(sb1, sizeof(sb1)); - bstr2 = SysAllocStringByteLen(sb2, sizeof(sb2)); - lcid = 0; - VARBSTRCMP(bstr,bstr2,0,VARCMP_LT); - SysFreeString(bstr2); - SysFreeString(bstr); -} - -/* Get the internal representation of a BSTR */ -static inline LPINTERNAL_BSTR Get(const BSTR lpszString) -{ - return lpszString ? (LPINTERNAL_BSTR)((char*)lpszString - sizeof(DWORD)) : NULL; -} - -static inline BSTR GetBSTR(const LPINTERNAL_BSTR bstr) -{ - return (BSTR)bstr->szString; -} - -static void test_SysStringLen(void) -{ - INTERNAL_BSTR bstr; - BSTR str = GetBSTR(&bstr); - - bstr.dwLen = 0; - ok (SysStringLen(str) == 0, "Expected dwLen 0, got %d\n", SysStringLen(str)); - bstr.dwLen = 2; - ok (SysStringLen(str) == 1, "Expected dwLen 1, got %d\n", SysStringLen(str)); -} - -static void test_SysStringByteLen(void) -{ - INTERNAL_BSTR bstr; - BSTR str = GetBSTR(&bstr); - - bstr.dwLen = 0; - ok (SysStringByteLen(str) == 0, "Expected dwLen 0, got %d\n", SysStringLen(str)); - bstr.dwLen = 2; - ok (SysStringByteLen(str) == 2, "Expected dwLen 2, got %d\n", SysStringByteLen(str)); -} - -static void test_SysAllocString(void) -{ - const OLECHAR szTest[5] = { 'T','e','s','t','\0' }; - BSTR str; - - str = SysAllocString(NULL); - ok (str == NULL, "Expected NULL, got %p\n", str); - - str = SysAllocString(szTest); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - LPINTERNAL_BSTR bstr = Get(str); - - ok (bstr->dwLen == 8, "Expected 8, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szTest), "String different\n"); - SysFreeString(str); - } -} - -static void test_SysAllocStringLen(void) -{ - const OLECHAR szTest[5] = { 'T','e','s','t','\0' }; - BSTR str; - - /* Very early native dlls do not limit the size of strings, so skip this test */ - if (0) - { - str = SysAllocStringLen(szTest, 0x80000000); - todo_wine { - ok (str == NULL, "Expected NULL, got %p\n", str); - } - } - - str = SysAllocStringLen(NULL, 0); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - LPINTERNAL_BSTR bstr = Get(str); - - ok (bstr->dwLen == 0, "Expected 0, got %d\n", bstr->dwLen); - ok (!bstr->szString[0], "String not empty\n"); - SysFreeString(str); - } - - str = SysAllocStringLen(szTest, 4); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - LPINTERNAL_BSTR bstr = Get(str); - - ok (bstr->dwLen == 8, "Expected 8, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szTest), "String different\n"); - SysFreeString(str); - } -} - -static void test_SysAllocStringByteLen(void) -{ - const OLECHAR szTest[10] = { 'T','e','s','t','\0' }; - const CHAR szTestA[6] = { 'T','e','s','t','\0','?' }; - BSTR str; - - str = SysAllocStringByteLen(szTestA, 0x80000000); - ok (str == NULL, "Expected NULL, got %p\n", str); - - str = SysAllocStringByteLen(szTestA, 0xffffffff); - ok (str == NULL, "Expected NULL, got %p\n", str); - - str = SysAllocStringByteLen(NULL, 0); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - LPINTERNAL_BSTR bstr = Get(str); - - ok (bstr->dwLen == 0, "Expected 0, got %d\n", bstr->dwLen); - ok (!bstr->szString[0], "String not empty\n"); - SysFreeString(str); - } - - str = SysAllocStringByteLen(szTestA, 4); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - LPINTERNAL_BSTR bstr = Get(str); - - ok (bstr->dwLen == 4, "Expected 4, got %d\n", bstr->dwLen); - ok (!lstrcmpA((LPCSTR)bstr->szString, szTestA), "String different\n"); - SysFreeString(str); - } - - /* Odd lengths are allocated rounded up, but truncated at the right position */ - str = SysAllocStringByteLen(szTestA, 3); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - const CHAR szTestTruncA[4] = { 'T','e','s','\0' }; - LPINTERNAL_BSTR bstr = Get(str); - - ok (bstr->dwLen == 3, "Expected 3, got %d\n", bstr->dwLen); - ok (!lstrcmpA((LPCSTR)bstr->szString, szTestTruncA), "String different\n"); - SysFreeString(str); - } - - str = SysAllocStringByteLen((LPCSTR)szTest, 8); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - LPINTERNAL_BSTR bstr = Get(str); - - ok (bstr->dwLen == 8, "Expected 8, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szTest), "String different\n"); - SysFreeString(str); - } -} - -static void test_SysReAllocString(void) -{ - const OLECHAR szTest[5] = { 'T','e','s','t','\0' }; - const OLECHAR szSmaller[2] = { 'x','\0' }; - const OLECHAR szLarger[7] = { 'L','a','r','g','e','r','\0' }; - BSTR str; - - str = SysAllocStringLen(szTest, 4); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - LPINTERNAL_BSTR bstr; - BSTR oldstr = str; - int changed; - - bstr = Get(str); - ok (bstr->dwLen == 8, "Expected 8, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szTest), "String different\n"); - - changed = SysReAllocString(&str, szSmaller); - ok (changed == 1, "Expected 1, got %d\n", changed); - ok (str == oldstr, "Created new string\n"); - bstr = Get(str); - ok (bstr->dwLen == 2, "Expected 2, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szSmaller), "String different\n"); - - oldstr = str; - changed = SysReAllocString(&str, szLarger); - ok (changed == 1, "Expected 1, got %d\n", changed); - /* Early versions always make new strings rather than resizing */ - /* ok (str == oldstr, "Created new string\n"); */ - bstr = Get(str); - ok (bstr->dwLen == 12, "Expected 12, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szLarger), "String different\n"); - - SysFreeString(str); - } -} - -static void test_SysReAllocStringLen(void) -{ - const OLECHAR szTest[5] = { 'T','e','s','t','\0' }; - const OLECHAR szSmaller[2] = { 'x','\0' }; - const OLECHAR szLarger[7] = { 'L','a','r','g','e','r','\0' }; - BSTR str; - - str = SysAllocStringLen(szTest, 4); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - LPINTERNAL_BSTR bstr; - BSTR oldstr = str; - int changed; - - bstr = Get(str); - ok (bstr->dwLen == 8, "Expected 8, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szTest), "String different\n"); - - changed = SysReAllocStringLen(&str, szSmaller, 1); - ok (changed == 1, "Expected 1, got %d\n", changed); - ok (str == oldstr, "Created new string\n"); - bstr = Get(str); - ok (bstr->dwLen == 2, "Expected 2, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szSmaller), "String different\n"); - - oldstr = str; - changed = SysReAllocStringLen(&str, szLarger, 6); - ok (changed == 1, "Expected 1, got %d\n", changed); - /* Early versions always make new strings rather than resizing */ - /* ok (str == oldstr, "Created new string\n"); */ - bstr = Get(str); - ok (bstr->dwLen == 12, "Expected 12, got %d\n", bstr->dwLen); - ok (!lstrcmpW(bstr->szString, szLarger), "String different\n"); - - changed = SysReAllocStringLen(&str, str, 6); - ok (changed == 1, "Expected 1, got %d\n", changed); - - SysFreeString(str); - } -} - -static void test_BstrCopy(void) -{ - const CHAR szTestA[6] = { 'T','e','s','t','\0','?' }; - const CHAR szTestTruncA[4] = { 'T','e','s','\0' }; - LPINTERNAL_BSTR bstr; - BSTR str; - HRESULT hres; - VARIANT vt1, vt2; - - str = SysAllocStringByteLen(szTestA, 3); - ok (str != NULL, "Expected non-NULL\n"); - if (str) - { - V_VT(&vt1) = VT_BSTR; - V_BSTR(&vt1) = str; - V_VT(&vt2) = VT_EMPTY; - hres = VariantCopy(&vt2, &vt1); - ok (hres == S_OK,"Failed to copy binary bstring with hres 0x%08x\n", hres); - bstr = Get(V_BSTR(&vt2)); - ok (bstr->dwLen == 3, "Expected 3, got %d\n", bstr->dwLen); - ok (!lstrcmpA((LPCSTR)bstr->szString, szTestTruncA), "String different\n"); - } -} - -static void test_VarBstrCat(void) -{ - static const WCHAR sz1[] = { 'a',0 }; - static const WCHAR sz2[] = { 'b',0 }; - static const WCHAR sz1sz2[] = { 'a','b',0 }; - static const WCHAR s1[] = { 'a',0 }; - static const WCHAR s2[] = { 'b',0 }; - static const WCHAR s1s2[] = { 'a',0,'b',0 }; - HRESULT ret; - BSTR str1, str2, res; - - /* Crash - ret = VarBstrCat(NULL, NULL, NULL); - */ - - /* Concatenation of two NULL strings works */ - ret = VarBstrCat(NULL, NULL, &res); - ok(ret == S_OK, "VarBstrCat failed: %08x\n", ret); - ok(res != NULL, "Expected a string\n"); - ok(SysStringLen(res) == 0, "Expected a 0-length string\n"); - SysFreeString(res); - - str1 = SysAllocString(sz1); - - /* Concatenation with one NULL arg */ - ret = VarBstrCat(NULL, str1, &res); - ok(ret == S_OK, "VarBstrCat failed: %08x\n", ret); - ok(res != NULL, "Expected a string\n"); - ok(SysStringLen(res) == SysStringLen(str1), "Unexpected length\n"); - ok(!memcmp(res, sz1, SysStringLen(str1)), "Unexpected value\n"); - SysFreeString(res); - ret = VarBstrCat(str1, NULL, &res); - ok(ret == S_OK, "VarBstrCat failed: %08x\n", ret); - ok(res != NULL, "Expected a string\n"); - ok(SysStringLen(res) == SysStringLen(str1), "Unexpected length\n"); - ok(!memcmp(res, sz1, SysStringLen(str1)), "Unexpected value\n"); - SysFreeString(res); - - /* Concatenation of two zero-terminated strings */ - str2 = SysAllocString(sz2); - ret = VarBstrCat(str1, str2, &res); - ok(ret == S_OK, "VarBstrCat failed: %08x\n", ret); - ok(res != NULL, "Expected a string\n"); - ok(SysStringLen(res) == sizeof(sz1sz2) / sizeof(WCHAR) - 1, - "Unexpected length\n"); - ok(!memcmp(res, sz1sz2, sizeof(sz1sz2)), "Unexpected value\n"); - SysFreeString(res); - - SysFreeString(str2); - SysFreeString(str1); - - /* Concatenation of two strings with embedded NULLs */ - str1 = SysAllocStringLen(s1, sizeof(s1) / sizeof(WCHAR)); - str2 = SysAllocStringLen(s2, sizeof(s2) / sizeof(WCHAR)); - - ret = VarBstrCat(str1, str2, &res); - ok(ret == S_OK, "VarBstrCat failed: %08x\n", ret); - ok(res != NULL, "Expected a string\n"); - ok(SysStringLen(res) == sizeof(s1s2) / sizeof(WCHAR), - "Unexpected length\n"); - ok(!memcmp(res, s1s2, sizeof(s1s2)), "Unexpected value\n"); - SysFreeString(res); - - SysFreeString(str2); - SysFreeString(str1); -} - -/* IUnknown */ - -static void test_IUnknownClear(void) -{ - HRESULT hres; - VARIANTARG v; - DummyDispatch u = { &DummyDispatch_VTable, 1, VT_UI1, FALSE }; - IUnknown* pu = (IUnknown*)&u; - - /* Test that IUnknown_Release is called on by-value */ - V_VT(&v) = VT_UNKNOWN; - V_UNKNOWN(&v) = (IUnknown*)&u; - hres = VariantClear(&v); - ok(hres == S_OK && u.ref == 0 && V_VT(&v) == VT_EMPTY, - "clear unknown: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 0, VT_EMPTY, hres, u.ref, V_VT(&v)); - - /* But not when clearing a by-reference*/ - u.ref = 1; - V_VT(&v) = VT_UNKNOWN|VT_BYREF; - V_UNKNOWNREF(&v) = &pu; - hres = VariantClear(&v); - ok(hres == S_OK && u.ref == 1 && V_VT(&v) == VT_EMPTY, - "clear dispatch: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 1, VT_EMPTY, hres, u.ref, V_VT(&v)); -} - -static void test_IUnknownCopy(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - DummyDispatch u = { &DummyDispatch_VTable, 1, VT_UI1, FALSE }; - IUnknown* pu = (IUnknown*)&u; - - /* AddRef is called on by-value copy */ - VariantInit(&vDst); - V_VT(&vSrc) = VT_UNKNOWN; - V_UNKNOWN(&vSrc) = pu; - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && u.ref == 2 && V_VT(&vDst) == VT_UNKNOWN, - "copy unknown: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 2, VT_EMPTY, hres, u.ref, V_VT(&vDst)); - - /* AddRef is skipped on copy of by-reference IDispatch */ - VariantInit(&vDst); - u.ref = 1; - V_VT(&vSrc) = VT_UNKNOWN|VT_BYREF; - V_UNKNOWNREF(&vSrc) = &pu; - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && u.ref == 1 && V_VT(&vDst) == (VT_UNKNOWN|VT_BYREF), - "copy unknown: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 1, VT_DISPATCH, hres, u.ref, V_VT(&vDst)); - - /* AddRef is called copying by-reference IDispatch with indirection */ - VariantInit(&vDst); - u.ref = 1; - V_VT(&vSrc) = VT_UNKNOWN|VT_BYREF; - V_UNKNOWNREF(&vSrc) = &pu; - hres = VariantCopyInd(&vDst, &vSrc); - ok(hres == S_OK && u.ref == 2 && V_VT(&vDst) == VT_UNKNOWN, - "copy unknown: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 2, VT_DISPATCH, hres, u.ref, V_VT(&vDst)); - - /* Indirection in place also calls AddRef */ - u.ref = 1; - V_VT(&vSrc) = VT_UNKNOWN|VT_BYREF; - V_UNKNOWNREF(&vSrc) = &pu; - hres = VariantCopyInd(&vSrc, &vSrc); - ok(hres == S_OK && u.ref == 2 && V_VT(&vSrc) == VT_UNKNOWN, - "copy unknown: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 2, VT_DISPATCH, hres, u.ref, V_VT(&vSrc)); -} - -static void test_IUnknownChangeTypeEx(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - LCID lcid; - VARTYPE vt; - DummyDispatch u = { &DummyDispatch_VTable, 1, VT_UI1, FALSE }; - IUnknown* pu = (IUnknown*)&u; - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - V_VT(&vSrc) = VT_UNKNOWN; - V_UNKNOWN(&vSrc) = pu; - - /* =>IDispatch in place */ - hres = VariantChangeTypeEx(&vSrc, &vSrc, lcid, 0, VT_DISPATCH); - ok(hres == S_OK && u.ref == 1 && - V_VT(&vSrc) == VT_DISPATCH && V_DISPATCH(&vSrc) == (IDispatch*)pu, - "change unk(src=src): expected 0x%08x,%d,%d,%p, got 0x%08x,%d,%d,%p\n", - S_OK, 1, VT_DISPATCH, pu, hres, u.ref, V_VT(&vSrc), V_DISPATCH(&vSrc)); - - /* =>IDispatch */ - u.ref = 1; - V_VT(&vSrc) = VT_UNKNOWN; - V_UNKNOWN(&vSrc) = (IUnknown*)pu; - VariantInit(&vDst); - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_UNKNOWN); - /* Note vSrc is not cleared, as final refcount is 2 */ - ok(hres == S_OK && u.ref == 2 && - V_VT(&vDst) == VT_UNKNOWN && V_UNKNOWN(&vDst) == (IUnknown*)pu, - "change unk(src,dst): expected 0x%08x,%d,%d,%p, got 0x%08x,%d,%d,%p\n", - S_OK, 2, VT_UNKNOWN, pu, hres, u.ref, V_VT(&vDst), V_UNKNOWN(&vDst)); - - /* Can't change unknown to anything else */ - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT hExpected = DISP_E_BADVARTYPE; - - V_VT(&vSrc) = VT_UNKNOWN; - V_UNKNOWN(&vSrc) = (IUnknown*)pu; - VariantInit(&vDst); - - if (vt == VT_UNKNOWN || vt == VT_DISPATCH || vt == VT_EMPTY || vt == VT_NULL) - hExpected = S_OK; - else - { - if (vt == VT_I8 || vt == VT_UI8) - { - if (HAVE_OLEAUT32_I8) - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt == VT_RECORD) - { - if (HAVE_OLEAUT32_RECORD) - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt >= VT_I2 && vt <= VT_UINT && vt != (VARTYPE)15) - hExpected = DISP_E_TYPEMISMATCH; - } - if (IS_ANCIENT && IS_MODERN_VTYPE(vt)) - hExpected = DISP_E_BADVARTYPE; - - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt); - ok(hres == hExpected, - "change unk(badvar): vt %d expected 0x%08x, got 0x%08x\n", - vt, hExpected, hres); - } -} - -/* IDispatch */ -static void test_IDispatchClear(void) -{ - HRESULT hres; - VARIANTARG v; - DummyDispatch d = { &DummyDispatch_VTable, 1, VT_UI1, FALSE }; - IDispatch* pd = (IDispatch*)&d; - - /* As per IUnknown */ - - V_VT(&v) = VT_DISPATCH; - V_DISPATCH(&v) = pd; - hres = VariantClear(&v); - ok(hres == S_OK && d.ref == 0 && V_VT(&v) == VT_EMPTY, - "clear dispatch: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 0, VT_EMPTY, hres, d.ref, V_VT(&v)); - - d.ref = 1; - V_VT(&v) = VT_DISPATCH|VT_BYREF; - V_DISPATCHREF(&v) = &pd; - hres = VariantClear(&v); - ok(hres == S_OK && d.ref == 1 && V_VT(&v) == VT_EMPTY, - "clear dispatch: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 1, VT_EMPTY, hres, d.ref, V_VT(&v)); -} - -static void test_IDispatchCopy(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - DummyDispatch d = { &DummyDispatch_VTable, 1, VT_UI1, FALSE }; - IDispatch* pd = (IDispatch*)&d; - - /* As per IUnknown */ - - VariantInit(&vDst); - V_VT(&vSrc) = VT_DISPATCH; - V_DISPATCH(&vSrc) = pd; - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && d.ref == 2 && V_VT(&vDst) == VT_DISPATCH, - "copy dispatch: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 2, VT_EMPTY, hres, d.ref, V_VT(&vDst)); - - VariantInit(&vDst); - d.ref = 1; - V_VT(&vSrc) = VT_DISPATCH|VT_BYREF; - V_DISPATCHREF(&vSrc) = &pd; - hres = VariantCopy(&vDst, &vSrc); - ok(hres == S_OK && d.ref == 1 && V_VT(&vDst) == (VT_DISPATCH|VT_BYREF), - "copy dispatch: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 1, VT_DISPATCH, hres, d.ref, V_VT(&vDst)); - - VariantInit(&vDst); - d.ref = 1; - V_VT(&vSrc) = VT_DISPATCH|VT_BYREF; - V_DISPATCHREF(&vSrc) = &pd; - hres = VariantCopyInd(&vDst, &vSrc); - ok(hres == S_OK && d.ref == 2 && V_VT(&vDst) == VT_DISPATCH, - "copy dispatch: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 2, VT_DISPATCH, hres, d.ref, V_VT(&vDst)); - - d.ref = 1; - V_VT(&vSrc) = VT_DISPATCH|VT_BYREF; - V_DISPATCHREF(&vSrc) = &pd; - hres = VariantCopyInd(&vSrc, &vSrc); - ok(hres == S_OK && d.ref == 2 && V_VT(&vSrc) == VT_DISPATCH, - "copy dispatch: expected 0x%08x, %d, %d, got 0x%08x, %d, %d\n", - S_OK, 2, VT_DISPATCH, hres, d.ref, V_VT(&vSrc)); -} - -static void test_IDispatchChangeTypeEx(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - LCID lcid; - DummyDispatch d = { &DummyDispatch_VTable, 1, VT_UI1, FALSE }; - IDispatch* pd = (IDispatch*)&d; - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - V_VT(&vSrc) = VT_DISPATCH; - V_DISPATCH(&vSrc) = pd; - - /* =>IUnknown in place */ - hres = VariantChangeTypeEx(&vSrc, &vSrc, lcid, 0, VT_UNKNOWN); - ok(hres == S_OK && d.ref == 1 && - V_VT(&vSrc) == VT_UNKNOWN && V_UNKNOWN(&vSrc) == (IUnknown*)pd, - "change disp(src=src): expected 0x%08x,%d,%d,%p, got 0x%08x,%d,%d,%p\n", - S_OK, 1, VT_UNKNOWN, pd, hres, d.ref, V_VT(&vSrc), V_UNKNOWN(&vSrc)); - - /* =>IUnknown */ - d.ref = 1; - V_VT(&vSrc) = VT_DISPATCH; - V_DISPATCH(&vSrc) = pd; - VariantInit(&vDst); - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_UNKNOWN); - /* Note vSrc is not cleared, as final refcount is 2 */ - ok(hres == S_OK && d.ref == 2 && - V_VT(&vDst) == VT_UNKNOWN && V_UNKNOWN(&vDst) == (IUnknown*)pd, - "change disp(src,dst): expected 0x%08x,%d,%d,%p, got 0x%08x,%d,%d,%p\n", - S_OK, 2, VT_UNKNOWN, pd, hres, d.ref, V_VT(&vDst), V_UNKNOWN(&vDst)); - - /* FIXME: Verify that VARIANT_NOVALUEPROP prevents conversion to integral - * types. this requires that the xxxFromDisp tests work first. - */ -} - -/* VT_ERROR */ -static void test_ErrorChangeTypeEx(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - VARTYPE vt; - LCID lcid; - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT hExpected = DISP_E_BADVARTYPE; - - V_VT(&vSrc) = VT_ERROR; - V_ERROR(&vSrc) = 1; - VariantInit(&vDst); - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt); - - if (vt == VT_ERROR) - hExpected = S_OK; - else - { - if (vt == VT_I8 || vt == VT_UI8) - { - if (HAVE_OLEAUT32_I8) - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt == VT_RECORD) - { - if (HAVE_OLEAUT32_RECORD) - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt <= VT_UINT && vt != (VARTYPE)15) - hExpected = DISP_E_TYPEMISMATCH; - } - if (IS_ANCIENT && IS_MODERN_VTYPE(vt)) - hExpected = DISP_E_BADVARTYPE; - - ok(hres == hExpected, - "change err: vt %d expected 0x%08x, got 0x%08x\n", vt, hExpected, hres); - } -} - -/* VT_EMPTY */ -static void test_EmptyChangeTypeEx(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - VARTYPE vt; - LCID lcid; - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT hExpected = DISP_E_BADVARTYPE; - - VariantInit(&vSrc); - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = VT_EMPTY; - - if (vt == VT_I8 || vt == VT_UI8) - { - if (HAVE_OLEAUT32_I8) - hExpected = S_OK; - } - else if (vt == VT_RECORD) - { - if (HAVE_OLEAUT32_RECORD) - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt == VT_VARIANT || vt == VT_DISPATCH || - vt == VT_UNKNOWN || vt == VT_ERROR) - { - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt <= VT_UINT && vt != (VARTYPE)15) - hExpected = S_OK; - - if (IS_ANCIENT && IS_MODERN_VTYPE(vt)) - hExpected = DISP_E_BADVARTYPE; - - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt); - - ok(hres == hExpected && (hres != S_OK || V_VT(&vDst) == vt), - "change empty: vt %d expected 0x%08x, got 0x%08x, vt %d\n", - vt, hExpected, hres, V_VT(&vDst)); - } -} - -/* VT_NULL */ -static void test_NullChangeTypeEx(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - VARTYPE vt; - LCID lcid; - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - for (vt = 0; vt <= VT_BSTR_BLOB; vt++) - { - HRESULT hExpected = DISP_E_BADVARTYPE; - - VariantInit(&vSrc); - V_VT(&vSrc) = VT_NULL; - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = VT_EMPTY; - - if (vt == VT_I8 || vt == VT_UI8) - { - if (HAVE_OLEAUT32_I8) - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt == VT_RECORD) - { - if (HAVE_OLEAUT32_RECORD) - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt == VT_NULL) - { - hExpected = S_OK; - } - else if (vt == VT_VARIANT || vt == VT_DISPATCH || - vt == VT_UNKNOWN || vt == VT_ERROR || - (vt <= VT_UINT && vt != (VARTYPE)15)) - hExpected = DISP_E_TYPEMISMATCH; - - if (IS_ANCIENT && IS_MODERN_VTYPE(vt)) - hExpected = DISP_E_BADVARTYPE; - - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt); - - ok(hres == hExpected && (hres != S_OK || V_VT(&vDst) == vt), - "change null: vt %d expected 0x%08x, got 0x%08x, vt %d\n", - vt, hExpected, hres, V_VT(&vDst)); - } -} - - -/* VT_UINT */ -static void test_UintChangeTypeEx(void) -{ - HRESULT hres; - VARIANTARG vSrc, vDst; - LCID lcid; - - lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT); - - /* Converting a VT_UINT to a VT_INT does not check for overflow */ - V_VT(&vDst) = VT_EMPTY; - V_VT(&vSrc) = VT_UINT; - V_UI4(&vSrc) = -1; - hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, VT_I4); - ok(hres == S_OK && V_VT(&vDst) == VT_I4 && V_I4(&vDst) == -1, - "change uint: Expected %d,0x%08x,%d got %d,0x%08x,%d\n", - VT_I4, S_OK, -1, V_VT(&vDst), hres, V_I4(&vDst)); -} - -#define NUM_CUST_ITEMS 16 - -static void test_ClearCustData(void) -{ - WCHAR buff[sizeof(CUSTDATAITEM) * NUM_CUST_ITEMS / sizeof(WCHAR)]; - CUSTDATA ci; - unsigned i; - - CHECKPTR(ClearCustData); - - memset(buff, 0, sizeof(buff)); - - ci.cCustData = NUM_CUST_ITEMS; - /* This is a bit tricky. We use SysAllocStringByteLen to allocate the - * array, since native uses an internal IMalloc interface for allocating - * its memory, while Wine uses HeapAlloc(). Doing this ensures we allocate - * using the correct function whether with native or builtin. - */ - ci.prgCustData = (LPCUSTDATAITEM)SysAllocStringByteLen((LPCSTR)buff, sizeof(buff)); - for (i = 0; i < NUM_CUST_ITEMS; i++) - VariantInit(&ci.prgCustData[i].varValue); - pClearCustData(&ci); - ok(!ci.cCustData && !ci.prgCustData, "ClearCustData didn't clear fields!\n"); -} - -static void test_NullByRef(void) -{ - VARIANT v1, v2; - HRESULT hRes; - - VariantClear(&v1); - VariantClear(&v2); - V_VT(&v1) = VT_BYREF|VT_VARIANT; - V_BYREF(&v1) = 0; - - hRes = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_I4); - ok(hRes == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx should return DISP_E_TYPEMISMATCH\n"); - - VariantClear(&v1); - V_VT(&v1) = VT_BYREF|VT_VARIANT; - V_BYREF(&v1) = 0; - V_VT(&v2) = VT_I4; - V_I4(&v2) = 123; - - hRes = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_VARIANT); - ok(hRes == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx should return DISP_E_TYPEMISMATCH\n"); - ok(V_VT(&v2) == VT_I4 && V_I4(&v2) == 123, "VariantChangeTypeEx shouldn't change pvargDest\n"); - - hRes = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_BYREF|VT_I4); - ok(hRes == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx should return DISP_E_TYPEMISMATCH\n"); - - hRes = VariantChangeTypeEx(&v2, &v1, 0, 0, 0x3847); - ok(hRes == DISP_E_BADVARTYPE, "VariantChangeTypeEx should return DISP_E_BADVARTYPE\n"); -} - -/* Dst Variant should remain unchanged if VariantChangeType cannot convert */ -static void test_ChangeType_keep_dst(void) -{ - VARIANT v1, v2; - BSTR bstr; - static const WCHAR testW[] = {'t','e','s','t',0}; - HRESULT hres; - - bstr = SysAllocString(testW); - VariantClear(&v1); - VariantClear(&v2); - V_VT(&v1) = VT_BSTR; - V_BSTR(&v1) = bstr; - hres = VariantChangeTypeEx(&v1, &v1, 0, 0, VT_INT); - ok(hres == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx returns %08x\n", hres); - ok(V_VT(&v1) == VT_BSTR && V_BSTR(&v1) == bstr, "VariantChangeTypeEx changed dst variant\n"); - V_VT(&v2) = VT_INT; - V_INT(&v2) = 4; - hres = VariantChangeTypeEx(&v2, &v1, 0, 0, VT_INT); - ok(hres == DISP_E_TYPEMISMATCH, "VariantChangeTypeEx returns %08x\n", hres); - ok(V_VT(&v2) == VT_INT && V_INT(&v2) == 4, "VariantChangeTypeEx changed dst variant\n"); - SysFreeString(bstr); -} - -START_TEST(vartype) -{ - hOleaut32 = GetModuleHandleA("oleaut32.dll"); - - trace("LCID's: System=0x%08x, User=0x%08x\n", GetSystemDefaultLCID(), - GetUserDefaultLCID()); - - test_VarI1FromI2(); - test_VarI1FromI4(); - test_VarI1FromI8(); - test_VarI1FromUI1(); - test_VarI1FromUI2(); - test_VarI1FromUI4(); - test_VarI1FromUI8(); - test_VarI1FromBool(); - test_VarI1FromR4(); - test_VarI1FromR8(); - test_VarI1FromDate(); - test_VarI1FromCy(); - test_VarI1FromDec(); - test_VarI1FromStr(); - test_VarUI1FromDisp(); - test_VarI1Copy(); - test_VarI1ChangeTypeEx(); - - test_VarUI1FromI1(); - test_VarUI1FromI2(); - test_VarUI1FromI4(); - test_VarUI1FromI8(); - test_VarUI1FromUI2(); - test_VarUI1FromUI4(); - test_VarUI1FromUI8(); - test_VarUI1FromBool(); - test_VarUI1FromR4(); - test_VarUI1FromR8(); - test_VarUI1FromDate(); - test_VarUI1FromCy(); - test_VarUI1FromDec(); - test_VarUI1FromStr(); - test_VarUI1Copy(); - test_VarUI1ChangeTypeEx(); - - test_VarI2FromI1(); - test_VarI2FromI4(); - test_VarI2FromI8(); - test_VarI2FromUI1(); - test_VarI2FromUI2(); - test_VarI2FromUI4(); - test_VarI2FromUI8(); - test_VarI2FromBool(); - test_VarI2FromR4(); - test_VarI2FromR8(); - test_VarI2FromDate(); - test_VarI2FromCy(); - test_VarI2FromDec(); - test_VarI2FromStr(); - test_VarI2Copy(); - test_VarI2ChangeTypeEx(); - - test_VarUI2FromI1(); - test_VarUI2FromI2(); - test_VarUI2FromI4(); - test_VarUI2FromI8(); - test_VarUI2FromUI1(); - test_VarUI2FromUI4(); - test_VarUI2FromUI8(); - test_VarUI2FromBool(); - test_VarUI2FromR4(); - test_VarUI2FromR8(); - test_VarUI2FromDate(); - test_VarUI2FromCy(); - test_VarUI2FromDec(); - test_VarUI2FromStr(); - test_VarUI2Copy(); - test_VarUI2ChangeTypeEx(); - - test_VarI4FromI1(); - test_VarI4FromI2(); - test_VarI4FromI8(); - test_VarI4FromUI1(); - test_VarI4FromUI2(); - test_VarI4FromUI4(); - test_VarI4FromUI8(); - test_VarI4FromBool(); - test_VarI4FromR4(); - test_VarI4FromR8(); - test_VarI4FromDate(); - test_VarI4FromCy(); - test_VarI4FromDec(); - test_VarI4FromStr(); - test_VarI4Copy(); - test_VarI4ChangeTypeEx(); - - test_VarUI4FromI1(); - test_VarUI4FromI2(); - test_VarUI4FromUI2(); - test_VarUI4FromI8(); - test_VarUI4FromUI1(); - test_VarUI4FromI4(); - test_VarUI4FromUI8(); - test_VarUI4FromBool(); - test_VarUI4FromR4(); - test_VarUI4FromR8(); - test_VarUI4FromDate(); - test_VarUI4FromCy(); - test_VarUI4FromDec(); - test_VarUI4FromStr(); - test_VarUI4Copy(); - test_VarUI4ChangeTypeEx(); - - test_VarI8FromI1(); - test_VarI8FromUI1(); - test_VarI8FromI2(); - test_VarI8FromUI2(); - test_VarI8FromUI4(); - test_VarI8FromR4(); - test_VarI8FromR8(); - test_VarI8FromBool(); - test_VarI8FromUI8(); - test_VarI8FromCy(); - test_VarI8FromDec(); - test_VarI8FromDate(); - test_VarI8FromStr(); - test_VarI8Copy(); - test_VarI8ChangeTypeEx(); - - test_VarUI8FromI1(); - test_VarUI8FromUI1(); - test_VarUI8FromI2(); - test_VarUI8FromUI2(); - test_VarUI8FromUI4(); - test_VarUI8FromR4(); - test_VarUI8FromR8(); - test_VarUI8FromBool(); - test_VarUI8FromI8(); - test_VarUI8FromCy(); - test_VarUI8FromDec(); - test_VarUI8FromDate(); - test_VarUI8FromStr(); - test_VarUI8Copy(); - test_VarUI8ChangeTypeEx(); - - test_VarR4FromI1(); - test_VarR4FromUI1(); - test_VarR4FromI2(); - test_VarR4FromUI2(); - test_VarR4FromI4(); - test_VarR4FromUI4(); - test_VarR4FromR8(); - test_VarR4FromBool(); - test_VarR4FromCy(); - test_VarR4FromI8(); - test_VarR4FromUI8(); - test_VarR4FromDec(); - test_VarR4FromDate(); - test_VarR4FromStr(); - test_VarR4Copy(); - test_VarR4ChangeTypeEx(); - - test_VarR8FromI1(); - test_VarR8FromUI1(); - test_VarR8FromI2(); - test_VarR8FromUI2(); - test_VarR8FromI4(); - test_VarR8FromUI4(); - test_VarR8FromR4(); - test_VarR8FromBool(); - test_VarR8FromCy(); - test_VarR8FromI8(); - test_VarR8FromUI8(); - test_VarR8FromDec(); - test_VarR8FromDate(); - test_VarR8FromStr(); - test_VarR8Copy(); - test_VarR8ChangeTypeEx(); - test_VarR8Round(); - - test_VarDateFromI1(); - test_VarDateFromUI1(); - test_VarDateFromI2(); - test_VarDateFromUI2(); - test_VarDateFromI4(); - test_VarDateFromUI4(); - test_VarDateFromR4(); - test_VarDateFromR8(); - test_VarDateFromBool(); - test_VarDateFromCy(); - test_VarDateFromI8(); - test_VarDateFromUI8(); - test_VarDateFromDec(); - test_VarDateFromStr(); - test_VarDateCopy(); - test_VarDateChangeTypeEx(); - - test_VarCyFromI1(); - test_VarCyFromUI1(); - test_VarCyFromI2(); - test_VarCyFromUI2(); - test_VarCyFromI4(); - test_VarCyFromUI4(); - test_VarCyFromR4(); - test_VarCyFromR8(); - test_VarCyFromBool(); - test_VarCyFromI8(); - test_VarCyFromUI8(); - test_VarCyFromDec(); - test_VarCyFromDate(); - - test_VarCyAdd(); - test_VarCyMul(); - test_VarCySub(); - test_VarCyAbs(); - test_VarCyNeg(); - test_VarCyMulI4(); - test_VarCyMulI8(); - test_VarCyCmp(); - test_VarCyCmpR8(); - test_VarCyRound(); - test_VarCyFix(); - test_VarCyInt(); - - test_VarDecFromI1(); - test_VarDecFromI2(); - test_VarDecFromI4(); - test_VarDecFromI8(); - test_VarDecFromUI1(); - test_VarDecFromUI2(); - test_VarDecFromUI4(); - test_VarDecFromUI8(); - test_VarDecFromR4(); - test_VarDecFromR8(); - test_VarDecFromDate(); - test_VarDecFromStr(); - test_VarDecFromCy(); - test_VarDecFromDate(); - test_VarDecFromBool(); - - test_VarDecAbs(); - test_VarDecNeg(); - test_VarDecAdd(); - test_VarDecSub(); - test_VarDecCmp(); - test_VarDecMul(); - test_VarDecDiv(); - - test_VarBoolFromI1(); - test_VarBoolFromUI1(); - test_VarBoolFromI2(); - test_VarBoolFromUI2(); - test_VarBoolFromI4(); - test_VarBoolFromUI4(); - test_VarBoolFromR4(); - test_VarBoolFromR8(); - test_VarBoolFromCy(); - test_VarBoolFromI8(); - test_VarBoolFromUI8(); - test_VarBoolFromDec(); - test_VarBoolFromDate(); - test_VarBoolFromStr(); - test_VarBoolCopy(); - test_VarBoolChangeTypeEx(); - - test_VarBstrFromR4(); - test_VarBstrFromDate(); - test_VarBstrFromDec(); - test_VarBstrCmp(); - test_SysStringLen(); - test_SysStringByteLen(); - test_SysAllocString(); - test_SysAllocStringLen(); - test_SysAllocStringByteLen(); - test_SysReAllocString(); - test_SysReAllocStringLen(); - test_BstrCopy(); - test_VarBstrCat(); - - test_IUnknownClear(); - test_IUnknownCopy(); - test_IUnknownChangeTypeEx(); - - test_IDispatchClear(); - test_IDispatchCopy(); - test_IDispatchChangeTypeEx(); - - test_ErrorChangeTypeEx(); - test_EmptyChangeTypeEx(); - test_NullChangeTypeEx(); - test_UintChangeTypeEx(); - - test_ClearCustData(); - - test_NullByRef(); - test_ChangeType_keep_dst(); -} diff --git a/rostests/winetests/powrprof/powrprof.rbuild b/rostests/winetests/powrprof/powrprof.rbuild deleted file mode 100644 index 4d21fb5ca28..00000000000 --- a/rostests/winetests/powrprof/powrprof.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - . - - - - powrprof - ntdll - advapi32 - kernel32 - testlist.c - pwrprof.c - diff --git a/rostests/winetests/powrprof/pwrprof.c b/rostests/winetests/powrprof/pwrprof.c deleted file mode 100644 index 4bd1271dae7..00000000000 --- a/rostests/winetests/powrprof/pwrprof.c +++ /dev/null @@ -1,1095 +0,0 @@ -#include -#include "ntstatus.h" -#define WIN32_NO_STATUS -#define STANDALONE -#include "wine/test.h" -#include "winternl.h" -#include "windef.h" -#include "winbase.h" -#include "powrprof.h" -#include "assert.h" - -#include "wine/unicode.h" -/* - LONG WINAPI RegOpenCurrentUser(REGSAM a,PHKEY b) - { - *b = HKEY_CURRENT_USER; - return ERROR_SUCCESS; - } - */ -unsigned int g_NumPwrSchemes = 0; -unsigned int g_NumPwrSchemesEnumerated = 0; -unsigned int g_ActivePwrScheme = 3; -unsigned int g_TempPwrScheme = 99; - -#if 0 // FIXME: needed to build. Please update pwrprof winetest. -typedef struct _PROCESSOR_POWER_INFORMATION { - ULONG Number; - ULONG MaxMhz; - ULONG CurrentMhz; - ULONG MhzLimit; - ULONG MaxIdleState; - ULONG CurrentIdleState; -} PROCESSOR_POWER_INFORMATION, -*PPROCESSOR_POWER_INFORMATION; -#endif - -POWER_POLICY g_PowerPolicy; - -static const WCHAR szMachPowerPoliciesSubKey[] = { 'S', 'O', 'F', 'T', 'W', 'A', 'R', - 'E', '\\', 'M', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', '\\', 'W', 'i', 'n', 'd', - 'o', 'w', 's', '\\', 'C', 'u', 'r', 'r', 'e', 'n', 't', 'V', 'e', 'r', 's', 'i', - 'o', 'n', '\\', 'C', 'o', 'n', 't', 'r', 'o', 'l', 's', ' ', 'F', 'o', 'l', 'd', - 'e', 'r', '\\', 'P', 'o', 'w', 'e', 'r', 'C', 'f', 'g', '\\', 'P', 'o', 'w', 'e', - 'r', 'P', 'o', 'l', 'i', 'c', 'i', 'e', 's', 0}; - -static const WCHAR szTempPwrScheme[] = { '9', '9', 0 }; - -ULONG DbgPrint(PCCH X,...) -{ - return (ULONG)NULL; -} - -void test_CallNtPowerInformation(void) -{ - DWORD retval; - ADMINISTRATOR_POWER_POLICY apolicy; - ULONGLONG atime, ctime; - PROCESSOR_POWER_INFORMATION ppi, *pppi; - PROCESSOR_POWER_POLICY ppp; - SYSTEM_BATTERY_STATE sbs; - SYSTEM_POWER_CAPABILITIES spc; - SYSTEM_POWER_INFORMATION spi; - SYSTEM_POWER_POLICY spp; - HANDLE x=NULL; - - /* AdministratorPowerPolicy tests */ - retval = CallNtPowerInformation(AdministratorPowerPolicy, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(AdministratorPowerPolicy, 0, 0, &apolicy, sizeof(ADMINISTRATOR_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(AdministratorPowerPolicy, &apolicy, sizeof(ADMINISTRATOR_POWER_POLICY), 0, 0); - ok(retval != STATUS_PRIVILEGE_NOT_HELD, "Privileg not held!!!! more errors to expect"); - ok(retval == STATUS_SUCCESS, "function expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* LastSleepTime tests */ - retval = CallNtPowerInformation(LastSleepTime, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(LastSleepTime, &atime, sizeof(sizeof(ULONGLONG)), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(LastSleepTime, &atime, sizeof(ULONGLONG), &ctime, sizeof(ULONGLONG)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(LastSleepTime, 0, 0, &atime, sizeof(ULONGLONG)); - ok(retval == STATUS_SUCCESS, "function expected STATUS_SUCCESS but got %d\n",(UINT)retval); - - /* LastWakeTime tests */ - retval = CallNtPowerInformation(LastWakeTime, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(LastWakeTime, &atime, sizeof(sizeof(ULONGLONG)), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(LastWakeTime, &atime, sizeof(ULONGLONG), &ctime, sizeof(ULONGLONG)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(LastWakeTime, 0, 0, &atime, sizeof(ULONGLONG)); - ok(retval == STATUS_SUCCESS, "function expected STATUS_SUCCESS but got %d\n",(UINT)retval); - - /* ProcessorInformation tests */ - retval = CallNtPowerInformation(ProcessorInformation, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorInformation, 0, 0, &ppi, sizeof(PROCESSOR_POWER_INFORMATION)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorInformation, &ppi, sizeof(PROCESSOR_POWER_INFORMATION), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorInformation, &ppi, sizeof(PROCESSOR_POWER_INFORMATION), &ppi, sizeof(PROCESSOR_POWER_INFORMATION)); - - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorInformation, 0, 0, &pppi, sizeof(PPROCESSOR_POWER_INFORMATION)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorInformation, &pppi, sizeof(PPROCESSOR_POWER_INFORMATION), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorInformation, &pppi, sizeof(PPROCESSOR_POWER_INFORMATION), &pppi, sizeof(PPROCESSOR_POWER_INFORMATION)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* ProcessorPowerPolicyAc tests */ - retval = CallNtPowerInformation(ProcessorPowerPolicyAc, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyAc, 0, 0, &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyAc, &ppp, sizeof(PROCESSOR_POWER_POLICY), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyAc, &ppp, sizeof(PROCESSOR_POWER_POLICY), &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* ProcessorPowerPolicyCurrent tests */ - retval = CallNtPowerInformation(ProcessorPowerPolicyCurrent, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyCurrent, 0, 0, &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyCurrent, &ppp, sizeof(PROCESSOR_POWER_POLICY), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyCurrent, &ppp, sizeof(PROCESSOR_POWER_POLICY), &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - - /* ProcessorPowerPolicyDc tests */ - retval = CallNtPowerInformation(ProcessorPowerPolicyDc, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyDc, 0, 0, &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyDc, &ppp, sizeof(PROCESSOR_POWER_POLICY), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorPowerPolicyDc, &ppp, sizeof(PROCESSOR_POWER_POLICY), &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* SystemBatteryState tests */ - retval = CallNtPowerInformation(SystemBatteryState, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemBatteryState, 0, 0, &sbs, sizeof(SYSTEM_BATTERY_STATE)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemBatteryState, &sbs, sizeof(SYSTEM_BATTERY_STATE), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemBatteryState, &sbs, sizeof(SYSTEM_BATTERY_STATE), &sbs, sizeof(SYSTEM_BATTERY_STATE)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* SystemExecutionState tests */ - retval = CallNtPowerInformation(SystemExecutionState, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* SystemPowerCapabilities tests */ - retval = CallNtPowerInformation(SystemPowerCapabilities, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerCapabilities, 0, 0, &spc, sizeof(SYSTEM_POWER_CAPABILITIES)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerCapabilities, &spc, sizeof(SYSTEM_POWER_CAPABILITIES), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerCapabilities, &spc, sizeof(SYSTEM_POWER_CAPABILITIES), &spc, sizeof(SYSTEM_POWER_CAPABILITIES)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - - /* SystemPowerInformation tests */ - retval = CallNtPowerInformation(SystemPowerInformation, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerInformation, 0, 0, &spi, sizeof(SYSTEM_POWER_INFORMATION)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerInformation, &spi, sizeof(SYSTEM_POWER_INFORMATION), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerInformation, &spi, sizeof(SYSTEM_POWER_INFORMATION), &spi, sizeof(SYSTEM_POWER_INFORMATION)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerInformation, &spp, sizeof(SYSTEM_POWER_POLICY), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerInformation, &spp, sizeof(SYSTEM_POWER_POLICY), &spi, sizeof(SYSTEM_POWER_INFORMATION)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* SystemPowerPolicyAc tests */ - retval = CallNtPowerInformation(SystemPowerPolicyAc, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyAc, 0, 0, &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyAc, &spp, sizeof(SYSTEM_POWER_POLICY), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyAc, &spp, sizeof(SYSTEM_POWER_POLICY), &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* SystemPowerPolicyCurrent tests */ - retval = CallNtPowerInformation(SystemPowerPolicyCurrent, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyCurrent, 0, 0, &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyCurrent, &spp, sizeof(SYSTEM_POWER_POLICY), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyCurrent, &spp, sizeof(SYSTEM_POWER_POLICY), &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - - /* SystemPowerPolicyDc tests */ - retval = CallNtPowerInformation(SystemPowerPolicyDc, 0, 0, 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyDc, 0, 0, &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyDc, &spp, sizeof(SYSTEM_POWER_POLICY), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerPolicyDc, &spp, sizeof(SYSTEM_POWER_POLICY), &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* SystemReserveHiberFile tests */ -/* - retval = CallNtPowerInformation(SystemReserveHiberFile, 0, 0, 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %ld\n", retval); - bln=TRUE; - retval = CallNtPowerInformation(SystemReserveHiberFile, &bln, sizeof(bln), 0, 0); - ok(retval == STATUS_DISK_FULL, "function result wrong expected STATUS_DISK_FULL but got %ld\n", nret); - bln=FALSE; - retval = CallNtPowerInformation(SystemReserveHiberFile, &bln, sizeof(bln), 0, 0); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %ld\n", nret); - - bln2=TRUE; - nret = CallNtPowerInformation(SystemReserveHiberFile, 0, 0, &bln2, sizeof(bln2)); - ok(nret == STATUS_DATATYPE_MISALIGNMENT, "function result wrong expected STATUS_DATATYPE_MISALIGNMENT but got %ld\n", nret); - bln2=FALSE; - nret = CallNtPowerInformation(SystemReserveHiberFile, 0, 0, &bln2, sizeof(bln2)); - ok(nret == STATUS_DATATYPE_MISALIGNMENT, "function result wrong expected STATUS_DATATYPE_MISALIGNMENT but got %ld\n", nret); - - bln=TRUE; - bln2=TRUE; - nret = CallNtPowerInformation(SystemReserveHiberFile, &bln, sizeof(bln), &bln2, sizeof(bln2)); - ok(nret == STATUS_DATATYPE_MISALIGNMENT, "function result wrong expected STATUS_DATATYPE_MISALIGNMENT but got %ld\n", nret); - bln2=FALSE; - nret = CallNtPowerInformation(SystemReserveHiberFile, &bln, sizeof(bln), &bln2, sizeof(bln2)); - ok(nret == STATUS_DATATYPE_MISALIGNMENT, "function result wrong expected STATUS_DATATYPE_MISALIGNMENT but got %ld\n", nret); - bln=FALSE; - bln2=TRUE; - nret = CallNtPowerInformation(SystemReserveHiberFile, &bln, sizeof(bln), &bln2, sizeof(bln2)); - ok(nret == STATUS_DATATYPE_MISALIGNMENT, "function result wrong expected STATUS_DATATYPE_MISALIGNMENT but got %ld\n", nret); - bln2=FALSE; - nret = CallNtPowerInformation(SystemReserveHiberFile, &bln, sizeof(bln), &bln2, sizeof(bln2)); - ok(nret == STATUS_DATATYPE_MISALIGNMENT, "function result wrong expected STATUS_DATATYPE_MISALIGNMENT but got %ld\n", nret); - */ - - /* VerifyProcessorPowerPolicyAc tests */ - retval = CallNtPowerInformation(VerifyProcessorPowerPolicyAc, 0, 0, 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifyProcessorPowerPolicyAc, 0, 0, &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifyProcessorPowerPolicyAc, &ppp, sizeof(PROCESSOR_POWER_POLICY), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifyProcessorPowerPolicyAc, &ppp, sizeof(PROCESSOR_POWER_POLICY), &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* VerifyProcessorPowerPolicyDc tests */ - retval = CallNtPowerInformation(VerifyProcessorPowerPolicyDc, 0, 0, 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifyProcessorPowerPolicyDc, 0, 0, &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifyProcessorPowerPolicyDc, &ppp, sizeof(PROCESSOR_POWER_POLICY), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifyProcessorPowerPolicyDc, &ppp, sizeof(PROCESSOR_POWER_POLICY), &ppp, sizeof(PROCESSOR_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* VerifySystemPolicyAc tests */ - retval = CallNtPowerInformation(VerifySystemPolicyAc, 0, 0, 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifySystemPolicyAc, 0, 0, &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifySystemPolicyAc, &spp, sizeof(SYSTEM_POWER_POLICY), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifySystemPolicyAc, &spp, sizeof(SYSTEM_POWER_POLICY), &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* VerifySystemPolicyDc tests */ - retval = CallNtPowerInformation(VerifySystemPolicyDc, 0, 0, 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifySystemPolicyDc, 0, 0, &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifySystemPolicyDc, &spp, sizeof(SYSTEM_POWER_POLICY), 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(VerifySystemPolicyDc, &spp, sizeof(SYSTEM_POWER_POLICY), &spp, sizeof(SYSTEM_POWER_POLICY)); - ok(retval == STATUS_SUCCESS, "function result wrong expected STATUS_SUCCESS but got %d\n", (UINT)retval); - - /* SystemPowerStateHandler tests */ - retval = CallNtPowerInformation(SystemPowerStateHandler, 0, 0, 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerStateHandler, 0, 0, x, sizeof(HANDLE)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - - /* ProcessorStateHandler tests */ - retval = CallNtPowerInformation(ProcessorStateHandler, 0, 0, 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorStateHandler, 0, 0, x, sizeof(HANDLE)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - - /* ProcessorStateHandler2 tests */ - retval = CallNtPowerInformation(ProcessorStateHandler2, 0, 0, 0, 0); - ok(retval == STATUS_ACCESS_DENIED, "function result wrong expected STATUS_ACCESS_DENIED but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(ProcessorStateHandler2, 0, 0, x, sizeof(HANDLE)); - ok(retval == STATUS_ACCESS_DENIED, "function result wrong expected STATUS_ACCESS_DENIED but got %d\n", (UINT)retval); - - /* SystemPowerStateNotifyHandler tests */ - retval = CallNtPowerInformation(SystemPowerStateNotifyHandler, 0, 0, 0, 0); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - retval = CallNtPowerInformation(SystemPowerStateNotifyHandler, 0, 0, x, sizeof(HANDLE)); - ok(retval == STATUS_INVALID_PARAMETER, "function result wrong expected STATUS_INVALID_PARAMETER but got %d\n", (UINT)retval); - -} - -/* - @implemented - */ -void test_CanUserWritePwrScheme(void) -{ - DWORD error, retval; - - retval = CanUserWritePwrScheme(); - - error = GetLastError(); - - if (retval) - ok(retval, "function failed?"); - else - ok(error == ERROR_ACCESS_DENIED, "function last error wrong expected ERROR_ACCESS_DENIED but got %d\n", (UINT)error); - -} -BOOLEAN CALLBACK test_callback_EnumPwrScheme(UINT uiIndex, DWORD dwName, LPWSTR sName, DWORD dwDesc, - LPWSTR sDesc, PPOWER_POLICY pp,LPARAM lParam ) -{ - ok(uiIndex == g_NumPwrSchemes, "expected power scheme index of %d but got %d\n", g_NumPwrSchemes, uiIndex); - g_NumPwrSchemes++; - - ok(lParam == 0xDEADBEEF, "expected function lParam to be 0xDEADBEEF but got %d\n", (UINT)lParam); - - return TRUE; -} - -BOOLEAN CALLBACK test_callback_stop_EnumPwrScheme(UINT uiIndex, DWORD dwName, LPWSTR sName, DWORD dwDesc, - LPWSTR sDesc, PPOWER_POLICY pp,LPARAM lParam ) -{ - ok((!uiIndex || g_NumPwrSchemesEnumerated + 1 == uiIndex), "expected power scheme %d but got %d\n",g_NumPwrSchemesEnumerated+1, uiIndex); - g_NumPwrSchemesEnumerated = uiIndex; - - ok(uiIndex <= (UINT)lParam, "enumeration should have already been stopped at index %d current index %d\n", (UINT)lParam, uiIndex); - if (uiIndex == (UINT)lParam) - return FALSE; - else - return TRUE; -} - -void test_DeletePwrScheme(void) -{ - DWORD retval; - HKEY hSubKey = NULL; - - - /* - * try inexistant profile number, should fail - */ - - retval = DeletePwrScheme(0xFFFFFFFF); - ok(!retval, "function should have failed error %x\n",(UINT)GetLastError()); - - /* - * delete active power scheme, should fail - */ - - retval = GetActivePwrScheme(&g_ActivePwrScheme); - ok(retval, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - retval = DeletePwrScheme(g_ActivePwrScheme); - ok(!retval, "function should have failed\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED, "function should have failed with ERROR_ACCESS_DENIED but got %x\n", (UINT)GetLastError()); - - /* - * delete a temporarly created power scheme - */ - retval = DeletePwrScheme(g_TempPwrScheme); - ok(retval, "function should have succeeded\n"); - -/* - * clean up, delete illegal entry, witch was created for this test - */ - - if (RegOpenKeyW(HKEY_LOCAL_MACHINE, szMachPowerPoliciesSubKey, &hSubKey) == ERROR_SUCCESS) - { - if (RegDeleteKeyW(hSubKey, szTempPwrScheme) != STATUS_SUCCESS) - printf("failed to delete subkey %i (testentry)\n", g_TempPwrScheme); - RegCloseKey(hSubKey); - } - -} - -void test_EnumPwrSchemes(void) -{ - BOOLEAN retval; - - /* - * test EnumPwrScheme with null pointer callback - */ - - retval = EnumPwrSchemes(0, 0); - ok(!retval, "function was expected to fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER but got %x\n",(UINT)GetLastError()); - - /* - * enumerate power schemes, should succeed - */ - - retval = EnumPwrSchemes(test_callback_EnumPwrScheme, 0xDEADBEEF); - ok(retval, "function was expected to succeed %d\n",retval); - ok(g_NumPwrSchemes, "Warning: no power schemes available\n"); - - /* - * stop enumeration after first power scheme - */ - - retval = EnumPwrSchemes(test_callback_stop_EnumPwrScheme, (LPARAM)0); - ok(!retval, "function was expected to false\n"); - - /* - * enumerate half of all avalailble profiles - */ - - g_NumPwrSchemesEnumerated = 0; - retval = EnumPwrSchemes(test_callback_stop_EnumPwrScheme, (LPARAM)g_NumPwrSchemes / 2); - ok(retval, "function was expected to succeed but got %i\n", (UINT)retval); - ok(g_NumPwrSchemesEnumerated == g_NumPwrSchemes / 2, "function did not enumerate requested num of profiles %d enumerated %d\n", g_NumPwrSchemes / 2, g_NumPwrSchemesEnumerated); - - -} - -void test_GetSetActivePwrScheme(void) -{ - DWORD retval; - UINT current_scheme = 2; - UINT temp_scheme = 0; - - /* - * read active power scheme - */ - - retval = GetActivePwrScheme(&g_ActivePwrScheme); - - ok(retval, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - ok(retval <= g_NumPwrSchemes, "expected index lower as power scheme count %d but got %d\n", g_NumPwrSchemes, g_ActivePwrScheme); - - /* - * sets active power scheme to inexistant profile - * -> corrupts power scheme enumeration on Windows XP SP2 - */ - //corrupts registry - //retval = SetActivePwrScheme(0xFFFFFFFF, 0, 0); - //ok(!retval, "function was expected to fail"); - //current_scheme = min(active_scheme+1, g_NumPwrSchemes-1); - - /* - * sets the active power scheme to profile with index 0 - */ - - retval = SetActivePwrScheme(current_scheme, 0, 0); - ok(retval, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - /* - * read back the active power scheme - */ - - retval = GetActivePwrScheme(&temp_scheme); - ok(retval, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - ok(temp_scheme == current_scheme, "expected %d but got %d\n", (UINT)current_scheme, (UINT)temp_scheme); - - /* - * restore previous active power scheme - */ - - retval = SetActivePwrScheme(g_ActivePwrScheme, 0, 0); - ok(retval, "Warning: failed to restore old active power scheme %d\n", (UINT)g_ActivePwrScheme); -} - -void test_GetCurrentPowerPolicies(void) -{ - GLOBAL_POWER_POLICY gpp; - POWER_POLICY pp; - BOOLEAN ret; - UINT current_scheme = 2; - - g_ActivePwrScheme=3; - ret = GetActivePwrScheme(&g_ActivePwrScheme); - - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - ret = SetActivePwrScheme(0, &gpp, 0); - - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(0, 0, &pp); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(0, &gpp, &pp); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(current_scheme, &gpp, 0); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(current_scheme, 0, &pp); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(current_scheme, &gpp, &pp); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(g_ActivePwrScheme, 0, 0); - ok(ret, "Warning: failed to restore old active power scheme %d\n", (UINT)g_ActivePwrScheme); - - ret = GetCurrentPowerPolicies(0,0); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = GetCurrentPowerPolicies(&gpp,0); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = GetCurrentPowerPolicies(0,&pp); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = GetCurrentPowerPolicies(&gpp,&pp); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - ok(gpp.mach.Revision == 1,"Global Mach Revision was expected to be 1 got %i",(UINT)gpp.mach.Revision); - ok(gpp.user.Revision == 1,"Global User Revision was expected to be 1 got %i",(UINT)gpp.mach.Revision); - ok(pp.mach.Revision == 1,"Mach Revision was expected to be 1 got %i",(UINT)gpp.mach.Revision); - ok(pp.user.Revision == 1,"User Revision was expected to be 1 got %i",(UINT)gpp.mach.Revision); - - - ret = GetActivePwrScheme(&g_ActivePwrScheme); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(0, &gpp, 0); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(0, 0, &pp); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(0, &gpp, &pp); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(current_scheme, &gpp, 0); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(current_scheme, 0, &pp); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(current_scheme, &gpp, &pp); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - - ret = SetActivePwrScheme(g_ActivePwrScheme, 0, 0); - ok(ret, "Warning: failed to restore old active power scheme %d\n", (UINT)g_ActivePwrScheme); - -} - -void test_GetPwrCapabilities(void) -{ - SYSTEM_POWER_CAPABILITIES spc; - BOOLEAN ret; - - ret = GetPwrCapabilities(0); - ok(!ret, "function was expected to fail\n"); - if (!ret) - { - ok(GetLastError() == ERROR_INVALID_PARAMETER,"function was expectet to return ERROR_INVALID_PARAMETER, but returns: %x\n",(UINT)GetLastError()); - } - ret = GetPwrCapabilities(&spc); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); -} - -void test_GetPwrDiskSpindownRange(void) -{ - DWORD retval; - UINT min = 0; - UINT max = 0; - - /* - * invalid parameter checks - */ - - retval = GetPwrDiskSpindownRange(NULL, NULL); - ok(!retval, "function was expected to fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected error ERROR_INVALID_PARAMETER but got %x\n", (UINT)GetLastError()); - - retval = GetPwrDiskSpindownRange(&max, NULL); - ok(!retval, "function was expected to fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected error ERROR_INVALID_PARAMETER but got %x\n", (UINT)GetLastError()); - - retval = GetPwrDiskSpindownRange(NULL, &min); - ok(!retval, "function was expected to fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected error ERROR_INVALID_PARAMETER but got %x\n", (UINT)GetLastError()); - - /* - * read disk spindown range - */ - - retval = GetPwrDiskSpindownRange(&max, &min); - ok(retval, "function was expected to succeed error %x\n",(UINT)GetLastError()); - ok(min <= max, "range mismatch min %d max %d\n",min, max); -} - -void test_IsAdminOverrideActive(void) -{ - ADMINISTRATOR_POWER_POLICY app; - BOOLEAN ret; - - ret = IsAdminOverrideActive(0); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - ret = IsAdminOverrideActive(&app); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - app.MinSleep = 0; - app.MaxSleep = 0; - app.MinVideoTimeout = 0; - app.MaxVideoTimeout = 0; - app.MinSpindownTimeout = 0; - app.MaxSpindownTimeout = 0; - - ret = IsAdminOverrideActive(&app); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - - app.MinSleep = 1; - app.MaxSleep = 2; - app.MinVideoTimeout = 3; - app.MaxVideoTimeout = 4; - app.MinSpindownTimeout = 5; - app.MaxSpindownTimeout = 6; - - ret = IsAdminOverrideActive(&app); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - -} - -void test_IsPwrHibernateAllowed(void) -{ -/* - BOOLEAN ret; - - ret = IsPwrHibernateAllowed(); - ok(!ret, "function was expected to fail, error %x\n",(UINT)GetLastError()); - */ -} - -void test_IsPwrShutdownAllowed(void) -{ -/* - BOOLEAN ret; - - ret = IsPwrShutdownAllowed(); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - */ -} - -void test_IsPwrSuspendAllowed(void) -{ -/* - BOOLEAN ret; - - ret = IsPwrSuspendAllowed(); - ok(ret, "function was expected to succed, error %x\n",(UINT)GetLastError()); - */ -} - -void test_ReadGlobalPwrPolicy(void) -{ - GLOBAL_POWER_POLICY gpp; - BOOLEAN ret; - - ret = ReadGlobalPwrPolicy(&gpp); - ok(ret, "function was expected to succeed, error %x\n",(UINT)GetLastError()); - ok(gpp.mach.Revision == 1,"Global Mach Revision was expected to be 1 got %i",(UINT)gpp.mach.Revision); - ok(gpp.user.Revision == 1,"Global User Revision was expected to be 1 got %i",(UINT)gpp.mach.Revision); - - - -} - -void test_ReadProcessorPwrScheme(void) -{ - MACHINE_PROCESSOR_POWER_POLICY mppp; - BOOLEAN ret; - UINT i = 0; - DWORD err; - - do - { - RtlZeroMemory(&mppp, sizeof(MACHINE_PROCESSOR_POWER_POLICY)); - ret = ReadProcessorPwrScheme(i,&mppp); - if (ret) - { - ok(mppp.Revision == 1,"Main Revision was expected to be 1 got %i",(UINT)mppp.Revision); - ok(mppp.ProcessorPolicyAc.Revision == 1,"PowerAC Revision was expected to be 1 got %i",(UINT)mppp.ProcessorPolicyAc.Revision); - ok(mppp.ProcessorPolicyDc.Revision == 1,"PowerDC Revision was expected to be 1 got %i",(UINT)mppp.ProcessorPolicyDc.Revision); - } - else - { - err = GetLastError(); - ok(err == 0,"Failed Error %x\n",(UINT)err); - return; - } - i++; - if (i == g_NumPwrSchemes) - return; - } while (TRUE); - -} - -void test_ReadPwrScheme(void) -{ - DWORD retval; - - /* - * read power scheme with null pointer -> crashs on Windows XP SP2 - */ - //retval = ReadPwrScheme(0, NULL); - //ok(!retval, "function was expected to fail\n"); - //ok(GetLastError() == STATUS_INVALID_PARAMETER, "expected error ... but got %x\n", GetLastError()); - - /* - * read a power scheme with an invalid index, leads to the creation of the key - * -> corrupts power scheme enumeration - */ - //retval = ReadPwrScheme(0xFFFFFFFF, &powerPolicy); - //ok(!retval, "function was expected to fail\n"); - //ok(GetLastError() == ERROR_ACCESS_DENIED, "expected error ERROR_ACCESS_DENIED but got %x\n", GetLastError()); - - /* - * read current active power scheme - */ - - retval = ReadPwrScheme(g_ActivePwrScheme, &g_PowerPolicy); - ok(retval, "function was expected to succeed error %x\n",(UINT)GetLastError()); - -} - -void test_SetSuspendState(void) -{ -// SetSuspendState(FALSE,FALSE,FALSE) -} - -void test_ValidatePowerPolicies(void) -{ - GLOBAL_POWER_POLICY gpp; - POWER_POLICY pp; - BOOLEAN ret; - - SetLastError(0); - ret = ValidatePowerPolicies(0,0); - ok(ret, "function was expected to succeed error %i\n",(UINT)GetLastError()); - - ret = ValidatePowerPolicies(&gpp,0); - ok(!ret, "function was expected to fail return %i\n",(UINT)ret); - ok(GetLastError() == ERROR_REVISION_MISMATCH,"function was expected to fail with ERROR_REVISION_MISMATCH(%i,%i), but error :%i\n",(UINT)gpp.user.Revision,(UINT)gpp.mach.Revision,(UINT)GetLastError()); - - ret = ValidatePowerPolicies(0,&pp); - ok(!ret, "function was expected to fail return %i\n",(UINT)ret); - ok(GetLastError() == ERROR_REVISION_MISMATCH,"function was expected to fail with ERROR_REVISION_MISMATCH, but error :%i\n",(UINT)GetLastError()); - - ret = ValidatePowerPolicies(&gpp,&pp); - ok(!ret, "function was expected to fail return %i\n",(UINT)ret); - ok(GetLastError() == ERROR_REVISION_MISMATCH,"function was expected to fail with ERROR_REVISION_MISMATCH, but error :%i\n",(UINT)GetLastError()); - - gpp.user.Revision = 1; - gpp.mach.Revision = 1; - - ret = ValidatePowerPolicies(&gpp,0); - ok(!ret, "function was expected to fail return %i\n",(UINT)ret); - ok(GetLastError() == ERROR_INVALID_DATA,"function was expected to fail with ERROR_INVALID_DATA, but error :%i\n",(UINT)GetLastError()); - - gpp.mach.LidOpenWakeAc = PowerSystemWorking; - gpp.mach.LidOpenWakeDc = PowerSystemWorking; - - ret = ValidatePowerPolicies(&gpp,0); - ok(!ret, "function was expected to fail return %i\n",(UINT)ret); - ok(GetLastError() == ERROR_INVALID_DATA,"function was expected to fail with ERROR_INVALID_DATA, but error :%i\n",(UINT)GetLastError()); - - gpp.user.PowerButtonAc.Action = PowerActionNone; - gpp.user.PowerButtonDc.Action = PowerActionNone; - gpp.user.SleepButtonAc.Action = PowerActionNone; - gpp.user.SleepButtonDc.Action = PowerActionNone; - gpp.user.LidCloseAc.Action = PowerActionNone; - gpp.user.LidCloseDc.Action = PowerActionNone; - - gpp.user.DischargePolicy[0].Enable=FALSE; - gpp.user.DischargePolicy[1].Enable=FALSE; - gpp.user.DischargePolicy[2].Enable=FALSE; - gpp.user.DischargePolicy[3].Enable=FALSE; - gpp.user.DischargePolicy[4].Enable=FALSE; - ret = ValidatePowerPolicies(&gpp,0); - ok(ret, "function was expected to succeed return %i\n",(UINT)GetLastError()); - if (!ret) - { - ok(GetLastError() == ERROR_INVALID_DATA,"function was expected to fail with ERROR_INVALID_DATA, but error :%i\n",(UINT)GetLastError()); - } - - pp.user.Revision = 1; - pp.mach.Revision = 1; - - ret = ValidatePowerPolicies(0,&pp); - ok(!ret, "function was expected to fail return %i\n",(UINT)ret); - ok(GetLastError() == ERROR_INVALID_DATA || GetLastError() == ERROR_GEN_FAILURE,"function was expected to fail with ERROR_GEN_FAILURE or ERROR_INVALID_DATA, but error :%i\n",(UINT)GetLastError()); - - pp.mach.MinSleepAc = PowerSystemWorking; - pp.mach.MinSleepDc = PowerSystemWorking; - pp.mach.ReducedLatencySleepAc = PowerSystemWorking; - pp.mach.ReducedLatencySleepDc = PowerSystemWorking; - pp.mach.OverThrottledAc.Action = PowerActionNone; - pp.mach.OverThrottledDc.Action = PowerActionNone; - - pp.user.IdleAc.Action = PowerActionWarmEject+1; - pp.user.IdleDc.Action = PowerActionNone-1; - pp.user.MaxSleepAc = PowerSystemMaximum+1; - pp.user.MaxSleepDc = PowerSystemUnspecified; - - ret = ValidatePowerPolicies(0,&pp); - ok(!ret, "function was expected to fail return %i\n",(UINT)GetLastError()); - if (!ret) - { - ok(GetLastError() == ERROR_INVALID_DATA,"function was expected to fail with ERROR_INVALID_DATA, but error :%i\n",(UINT)GetLastError()); - } - - pp.user.IdleAc.Action = PowerActionNone; - pp.user.IdleDc.Action = PowerActionNone; - pp.user.MaxSleepAc = PowerSystemWorking; - pp.user.MaxSleepDc = PowerSystemWorking; - - ret = ValidatePowerPolicies(0,&pp); - ok(ret, "function was expected to succeed, error %i\n",(UINT)GetLastError()); - if (!ret) - { - ok(GetLastError() == ERROR_GEN_FAILURE,"function was expected to fail with ERROR_GEN_FAILURE, but error :%i\n",(UINT)GetLastError()); - } - - ret = ValidatePowerPolicies(&gpp,&pp); - ok(ret, "function was expected to succeed, error %i\n",(UINT)GetLastError()); - if (!ret) - { -// ok(GetLastError() == ERROR_GEN_FAILURE,"function was expected to fail with ERROR_GEN_FAILURE, but error :%i\n",(UINT)GetLastError()); - } - - - ret = GetCurrentPowerPolicies(&gpp,&pp); - ok(ret, "function was expected to succeed error %i\n",(UINT)GetLastError()); - - ret = ValidatePowerPolicies(&gpp,0); - ok(ret, "function was expected to succeed error %i\n",(UINT)GetLastError()); - - ret = ValidatePowerPolicies(0,&pp); - ok(ret, "function was expected to succeed error %i\n",(UINT)GetLastError()); - - ret = ValidatePowerPolicies(&gpp,&pp); - ok(ret, "function was expected to succeed error %i\n",(UINT)GetLastError()); - -} - -void test_WriteGlobalPwrPolicy(void) -{ -// WriteGlobalPwrPolicy(&gpp); -} - -void test_WriteProcessorPwrScheme(void) -{ -// WriteProcessorPwrScheme(0,&mppp); -} - -void test_WritePwrScheme(void) -{ - DWORD retval; - static const WCHAR szTestSchemeName[] = {'P','o','w','r','p','r','o','f',0}; - static const WCHAR szTestSchemeDesc[] = {'P','o','w','r','p','r','o','f',' ','S','c','h','e','m','e',0}; - - /* - * create a temporarly profile, will be deleted in test_DeletePwrScheme - */ - - retval = WritePwrScheme(&g_TempPwrScheme, (LPWSTR)szTestSchemeName, (LPWSTR)szTestSchemeDesc, &g_PowerPolicy); - ok(retval, "Warning: function should have succeeded\n"); -} - -void func_power(void) -{ - test_CallNtPowerInformation(); - test_CanUserWritePwrScheme(); - test_EnumPwrSchemes(); - test_GetSetActivePwrScheme(); - test_ReadPwrScheme(); - test_WritePwrScheme(); - test_DeletePwrScheme(); - test_GetPwrDiskSpindownRange(); - - test_GetCurrentPowerPolicies(); - - test_GetPwrCapabilities(); - test_IsAdminOverrideActive(); - test_IsPwrHibernateAllowed(); - test_IsPwrShutdownAllowed(); - test_IsPwrSuspendAllowed(); - test_ReadGlobalPwrPolicy(); - test_ReadProcessorPwrScheme(); - test_SetSuspendState(); - test_ValidatePowerPolicies(); - test_WriteGlobalPwrPolicy(); - test_WriteProcessorPwrScheme(); - -} - -void func_ros_init(void) -{ - HKEY hUser, hKeyPowrCfg, hKeyGlobalPowrPol, hKeyPowerPolicies, hKeytmp; - DWORD err; - GLOBAL_USER_POWER_POLICY gupp; - GLOBAL_MACHINE_POWER_POLICY gmpp; - USER_POWER_POLICY upp; - MACHINE_POWER_POLICY mpp; - MACHINE_PROCESSOR_POWER_POLICY mppp; - GLOBAL_POWER_POLICY gpp; - POWER_POLICY pp; - - int i; - - static const WCHAR szUserPowrCfgKey[] = { 'C', 'o', 'n', 't', 'r', 'o', 'l', ' ', - 'P', 'a', 'n', 'e', 'l', '\\', 'P', 'o', 'w', 'e', 'r', 'C', 'f', 'g', 0}; - - static const WCHAR szCurrentPowerPolicy[] = {'C', 'u', 'r', 'r', 'e', 'n', 't', 'P', - 'o', 'w', 'e', 'r', 'P', 'o', 'l', 'i', 'c', 'y', 0}; - static const WCHAR szcpp[] = {'3', 0 }; - - static const WCHAR szGlobalPowerPolicy[] = { 'G', 'l', 'o', 'b', 'a', 'l', 'P', 'o', - 'w', 'e', 'r', 'P', 'o', 'l', 'i', 'c', 'y', 0}; - static const WCHAR szPolicies[] = {'P', 'o', 'l', 'i', 'c', 'i', 'e', 's', 0}; - static const WCHAR szPowerPolicies[] = { 'P', 'o', 'w', 'e', 'r', 'P', 'o', 'l', 'i', - 'c', 'i', 'e', 's', 0}; - - static const WCHAR szProcessorPolicies[] = { 'P', 'r', 'o', 'c', 'e', 's', 's', 'o', 'r', - 'P', 'o', 'l', 'i', 'c', 'i', 'e', 's', 0}; - - static const WCHAR szcName[] = {'N', 'a', 'm', 'e', 0}; - static const WCHAR szcDescription[] = {'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', 0}; - - static WCHAR szName[] = {'N', 'a', 'm', 'e', '(', '0', ')', 0}; - static WCHAR szDescription[] = {'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', '(', '0', ')', 0}; - - static const WCHAR szMachPowrCfgKey[] = {'S', 'O', 'F', 'T', 'W', 'A', 'R', 'E', '\\', 'M', 'i', - 'c', 'r', 'o', 's', 'o', 'f', 't', '\\', 'W', 'i', 'n', 'd', 'o', 'w', 's', '\\', 'C', 'u', - 'r', 'r', 'e', 'n', 't', 'V', 'e', 'r', 's', 'i', 'o', 'n', '\\', 'C', 'o', 'n', 't', 'r', - 'o', 'l', 's', ' ', 'F', 'o', 'l', 'd', 'e', 'r', '\\', 'P', 'o', 'w', 'e', 'r', 'C', 'f', 'g', 0}; - - static const WCHAR szLastID[] = {'L', 'a', 's', 't', 'I', 'D', 0}; - static const WCHAR szDiskSpinDownMax[] = {'D', 'i', 's', 'k', 'S', 'p', 'i', 'n', 'D', 'o', 'w', 'n', 'M', 'a', 'x', 0}; - static const WCHAR szDiskSpinDownMin[] = {'D', 'i', 's', 'k', 'S', 'p', 'i', 'n', 'D', 'o', 'w', 'n', 'M', 'i', 'n', 0}; - - static const WCHAR szLastIDValue[] = {'5', 0}; - static const WCHAR szDiskSpinDownMaxValue[] = {'3', '6', '0', '0', 0}; - static const WCHAR szDiskSpinDownMinValue[] = {'3', 0}; - - WCHAR tmp[20]; - /* - * Erstelle die Registry-struktur und Daten, welche dafür erforderlich ist damit diese Tests funktionieren - */ - - /* - * User - */ - err = RegOpenCurrentUser(KEY_ALL_ACCESS,&hUser); - ok(err == ERROR_SUCCESS,"Öffnen des Aktuellen Users Fehlgeschlagen\n"); - if (err == ERROR_SUCCESS) - { - err = RegCreateKey(hUser,szUserPowrCfgKey,&hKeyPowrCfg); - ok(err == ERROR_SUCCESS,"Create Key UserPowrCfg failed with error %i\n",(UINT)err); - ok(hKeyPowrCfg != NULL,"Erstellen des Eintrages Powercfg fehlgeschalgen\n"); - err = RegSetValueExW(hKeyPowrCfg,szCurrentPowerPolicy,(DWORD)NULL,REG_SZ,(CONST BYTE *)szcpp,strlenW(szcpp)*sizeof(WCHAR)); - ok(err == ERROR_SUCCESS,"Set Value CurrentPowerPolicy failed with error %i\n",(UINT)err); - err = RegCreateKey(hKeyPowrCfg,szGlobalPowerPolicy,&hKeyGlobalPowrPol); - ok(err == ERROR_SUCCESS,"Create Key GlobalPowerPolicy failed with error %i\n",(UINT)err); - gupp.Revision = 1; - gupp.PowerButtonAc.Action = PowerActionNone; - gupp.PowerButtonDc.Action = PowerActionNone; - gupp.SleepButtonAc.Action = PowerActionNone; - gupp.SleepButtonDc.Action = PowerActionNone; - gupp.LidCloseAc.Action = PowerActionNone; - gupp.LidCloseDc.Action = PowerActionNone; - for (i=0; i -#include -#include -#include "windef.h" -#include "winbase.h" - -struct test -{ - const char *name; - void (*func)(void); -}; - -extern void func_power(void); -extern void func_ros_init(void); - -const struct test winetest_testlist[] = -{ - { "power", func_power }, - { "ros_init", func_ros_init }, - { 0, 0 } -}; - -#define WINETEST_WANT_MAIN -#include "wine/test.h" diff --git a/rostests/winetests/psapi/psapi.rbuild b/rostests/winetests/psapi/psapi.rbuild deleted file mode 100644 index 9eb16472ef7..00000000000 --- a/rostests/winetests/psapi/psapi.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - - - - . - - kernel32 - ntdll - psapi - testlist.c - psapi_main.c - - diff --git a/rostests/winetests/psapi/psapi_main.c b/rostests/winetests/psapi/psapi_main.c deleted file mode 100644 index 1978fd4d787..00000000000 --- a/rostests/winetests/psapi/psapi_main.c +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Unit test suite for PSAPI - * - * Copyright (C) 2005 Felix Nawothnig - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include "windows.h" -#include "psapi.h" - -#define PSAPI_GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hpsapi, #func); \ - if(!p ## func) { \ - ok(0, "GetProcAddress(%s) failed\n", #func); \ - FreeLibrary(hpsapi); \ - return FALSE; \ - } - -/* All PSAPI functions return non-zero and call SetLastError() - * on failure so we can use some macros for convenience */ - -#define w32_suc(x) \ - (SetLastError(0xdeadbeef), \ - (x) \ - ? (ok(1, "succeeded\n"), 1) \ - : GetLastError() == 0xdeadbeef \ - ? (ok(0, "failed without error code\n"), 0) \ - : (ok(0, "failed with %d\n", GetLastError()), 0)) - -#define w32_err(x, e) \ - (SetLastError(0xdeadbeef), \ - (x) \ - ? (ok(0, "expected error=%d but succeeded\n", e), 0) \ - : GetLastError() == e \ - ? (ok(1, "failed with %d\n", e), 1) \ - : GetLastError() == 0xdeadbeef \ - ? (ok(0, "failed without error code\n"), 0) \ - : (ok(0, "expected error=%d but failed with %d\n", \ - e, GetLastError()), 0)) - -static BOOL (WINAPI *pEmptyWorkingSet)(HANDLE); -static BOOL (WINAPI *pEnumProcesses)(DWORD*, DWORD, DWORD*); -static BOOL (WINAPI *pEnumProcessModules)(HANDLE, HMODULE*, DWORD, LPDWORD); -static DWORD (WINAPI *pGetModuleBaseNameA)(HANDLE, HMODULE, LPSTR, DWORD); -static DWORD (WINAPI *pGetModuleFileNameExA)(HANDLE, HMODULE, LPSTR, DWORD); -static BOOL (WINAPI *pGetModuleInformation)(HANDLE, HMODULE, LPMODULEINFO, DWORD); -static DWORD (WINAPI *pGetMappedFileNameA)(HANDLE, LPVOID, LPSTR, DWORD); -static DWORD (WINAPI *pGetProcessImageFileNameA)(HANDLE, LPSTR, DWORD); -static BOOL (WINAPI *pGetProcessMemoryInfo)(HANDLE, PPROCESS_MEMORY_COUNTERS, DWORD); -static BOOL (WINAPI *pGetWsChanges)(HANDLE, PPSAPI_WS_WATCH_INFORMATION, DWORD); -static BOOL (WINAPI *pInitializeProcessForWsWatch)(HANDLE); -static BOOL (WINAPI *pQueryWorkingSet)(HANDLE, PVOID, DWORD); - -static BOOL InitFunctionPtrs(HMODULE hpsapi) -{ - PSAPI_GET_PROC(EmptyWorkingSet); - PSAPI_GET_PROC(EnumProcessModules); - PSAPI_GET_PROC(EnumProcesses); - PSAPI_GET_PROC(GetModuleBaseNameA); - PSAPI_GET_PROC(GetModuleFileNameExA); - PSAPI_GET_PROC(GetModuleInformation); - PSAPI_GET_PROC(GetMappedFileNameA); - PSAPI_GET_PROC(GetProcessMemoryInfo); - PSAPI_GET_PROC(GetWsChanges); - PSAPI_GET_PROC(InitializeProcessForWsWatch); - PSAPI_GET_PROC(QueryWorkingSet); - /* GetProcessImageFileName is not exported on NT4 */ - pGetProcessImageFileNameA = - (void *)GetProcAddress(hpsapi, "GetProcessImageFileNameA"); - return TRUE; -} - -static HANDLE hpSR, hpQI, hpVR, hpQV, hpAA; -static const HANDLE hBad = (HANDLE)0xdeadbeef; - -static void test_EnumProcesses(void) -{ - DWORD pid, cbUsed = 0xdeadbeef; - - if(w32_suc(pEnumProcesses(NULL, 0, &cbUsed))) - ok(cbUsed == 0, "cbUsed=%d\n", cbUsed); - if(w32_suc(pEnumProcesses(&pid, 4, &cbUsed))) - ok(cbUsed == 4, "cbUsed=%d\n", cbUsed); -} - -static void test_EnumProcessModules(void) -{ - HMODULE hMod = GetModuleHandle(NULL); - DWORD cbNeeded = 0xdeadbeef; - - w32_err(pEnumProcessModules(NULL, NULL, 0, &cbNeeded), ERROR_INVALID_HANDLE); - w32_err(pEnumProcessModules(hpQI, NULL, 0, &cbNeeded), ERROR_ACCESS_DENIED); - w32_suc(pEnumProcessModules(hpQV, NULL, 0, &cbNeeded)); - if(!w32_suc(pEnumProcessModules(hpQV, &hMod, sizeof(HMODULE), &cbNeeded))) - return; - ok(cbNeeded / sizeof(HMODULE) >= 3 && cbNeeded / sizeof(HMODULE) <= 5 * sizeof(HMODULE), - "cbNeeded=%d\n", cbNeeded); - ok(hMod == GetModuleHandle(NULL), - "hMod=%p GetModuleHandle(NULL)=%p\n", hMod, GetModuleHandle(NULL)); -} - -static void test_GetModuleInformation(void) -{ - HMODULE hMod = GetModuleHandle(NULL); - MODULEINFO info; - - w32_err(pGetModuleInformation(NULL, hMod, &info, sizeof(info)), ERROR_INVALID_HANDLE); - w32_err(pGetModuleInformation(hpQI, hMod, &info, sizeof(info)), ERROR_ACCESS_DENIED); - w32_err(pGetModuleInformation(hpQV, hBad, &info, sizeof(info)), ERROR_INVALID_HANDLE); - w32_err(pGetModuleInformation(hpQV, hMod, &info, sizeof(info)-1), ERROR_INSUFFICIENT_BUFFER); - if(w32_suc(pGetModuleInformation(hpQV, hMod, &info, sizeof(info)))) - ok(info.lpBaseOfDll == hMod, "lpBaseOfDll=%p hMod=%p\n", info.lpBaseOfDll, hMod); -} - -static void test_GetProcessMemoryInfo(void) -{ - PROCESS_MEMORY_COUNTERS pmc; - - w32_err(pGetProcessMemoryInfo(NULL, &pmc, sizeof(pmc)), ERROR_INVALID_HANDLE); - todo_wine w32_err(pGetProcessMemoryInfo(hpSR, &pmc, sizeof(pmc)), ERROR_ACCESS_DENIED); - w32_err(pGetProcessMemoryInfo(hpQI, &pmc, sizeof(pmc)-1), ERROR_INSUFFICIENT_BUFFER); - w32_suc(pGetProcessMemoryInfo(hpQI, &pmc, sizeof(pmc))); -} - -static void test_GetMappedFileName(void) -{ - HMODULE hMod = GetModuleHandle(NULL); - char szMapPath[MAX_PATH], szModPath[MAX_PATH], *szMapBaseName; - DWORD ret; - - w32_err(pGetMappedFileNameA(NULL, hMod, szMapPath, sizeof(szMapPath)), ERROR_INVALID_HANDLE); - w32_err(pGetMappedFileNameA(hpSR, hMod, szMapPath, sizeof(szMapPath)), ERROR_ACCESS_DENIED); - if(!w32_suc(ret = pGetMappedFileNameA(hpQI, hMod, szMapPath, sizeof(szMapPath)))) - return; - ok(ret == strlen(szMapPath), "szMapPath=\"%s\" ret=%d\n", szMapPath, ret); - ok(szMapPath[0] == '\\', "szMapPath=\"%s\"\n", szMapPath); - szMapBaseName = strrchr(szMapPath, '\\'); /* That's close enough for us */ - if(!szMapBaseName || !*szMapBaseName) - { - ok(0, "szMapPath=\"%s\"\n", szMapPath); - return; - } - GetModuleFileNameA(NULL, szModPath, sizeof(szModPath)); - ok(!strcmp(strrchr(szModPath, '\\'), szMapBaseName), - "szModPath=\"%s\" szMapBaseName=\"%s\"\n", szModPath, szMapBaseName); -} - -static void test_GetProcessImageFileName(void) -{ - HMODULE hMod = GetModuleHandle(NULL); - char szImgPath[MAX_PATH], szMapPath[MAX_PATH]; - DWORD ret; - - if(pGetProcessImageFileNameA == NULL) - return; - - /* This function is available on WinXP+ only */ - SetLastError(0xdeadbeef); - if(!pGetProcessImageFileNameA(hpQI, szImgPath, sizeof(szImgPath))) - { - if(GetLastError() == ERROR_INVALID_FUNCTION) - trace("GetProcessImageFileName not implemented\n"); - else if(GetLastError() == 0xdeadbeef) - ok(0, "failed without error code\n"); - else - ok(0, "failed with %d\n", GetLastError()); - - return; - } - - w32_err(pGetProcessImageFileNameA(NULL, szImgPath, sizeof(szImgPath)), ERROR_INVALID_HANDLE); - w32_err(pGetProcessImageFileNameA(hpSR, szImgPath, sizeof(szImgPath)), ERROR_ACCESS_DENIED); - w32_err(pGetProcessImageFileNameA(hpQI, szImgPath, 0), ERROR_INSUFFICIENT_BUFFER); - if(!w32_suc(ret = pGetProcessImageFileNameA(hpQI, szImgPath, sizeof(szImgPath))) || - !w32_suc(pGetMappedFileNameA(hpQV, hMod, szMapPath, sizeof(szMapPath)))) - return; - /* Windows returns 2*strlen-1 */ - ok(ret >= strlen(szImgPath), "szImgPath=\"%s\" ret=%d\n", szImgPath, ret); - ok(!strcmp(szImgPath, szMapPath), - "szImgPath=\"%s\" szMapPath=\"%s\"\n", szImgPath, szMapPath); -} - -static void test_GetModuleFileNameEx(void) -{ - HMODULE hMod = GetModuleHandle(NULL); - char szModExPath[MAX_PATH+1], szModPath[MAX_PATH+1]; - DWORD ret; - - w32_err(pGetModuleFileNameExA(NULL, hMod, szModExPath, sizeof(szModExPath)), ERROR_INVALID_HANDLE); - w32_err(pGetModuleFileNameExA(hpQI, hMod, szModExPath, sizeof(szModExPath)), ERROR_ACCESS_DENIED); - w32_err(pGetModuleFileNameExA(hpQV, hBad, szModExPath, sizeof(szModExPath)), ERROR_INVALID_HANDLE); - if(!w32_suc(ret = pGetModuleFileNameExA(hpQV, NULL, szModExPath, sizeof(szModExPath)))) - return; - ok(ret == strlen(szModExPath), "szModExPath=\"%s\" ret=%d\n", szModExPath, ret); - GetModuleFileNameA(NULL, szModPath, sizeof(szModPath)); - ok(!strncmp(szModExPath, szModPath, MAX_PATH), - "szModExPath=\"%s\" szModPath=\"%s\"\n", szModExPath, szModPath); -} - -static void test_GetModuleBaseName(void) -{ - HMODULE hMod = GetModuleHandle(NULL); - char szModPath[MAX_PATH], szModBaseName[MAX_PATH]; - DWORD ret; - - w32_err(pGetModuleBaseNameA(NULL, hMod, szModBaseName, sizeof(szModBaseName)), ERROR_INVALID_HANDLE); - w32_err(pGetModuleBaseNameA(hpQI, hMod, szModBaseName, sizeof(szModBaseName)), ERROR_ACCESS_DENIED); - w32_err(pGetModuleBaseNameA(hpQV, hBad, szModBaseName, sizeof(szModBaseName)), ERROR_INVALID_HANDLE); - if(!w32_suc(ret = pGetModuleBaseNameA(hpQV, NULL, szModBaseName, sizeof(szModBaseName)))) - return; - ok(ret == strlen(szModBaseName), "szModBaseName=\"%s\" ret=%d\n", szModBaseName, ret); - GetModuleFileNameA(NULL, szModPath, sizeof(szModPath)); - ok(!strcmp(strrchr(szModPath, '\\') + 1, szModBaseName), - "szModPath=\"%s\" szModBaseName=\"%s\"\n", szModPath, szModBaseName); -} - -static void test_ws_functions(void) -{ - PSAPI_WS_WATCH_INFORMATION wswi[4096]; - ULONG_PTR pages[4096]; - char *addr; - unsigned int i; - - todo_wine w32_err(pEmptyWorkingSet(NULL), ERROR_INVALID_HANDLE); - todo_wine w32_err(pEmptyWorkingSet(hpSR), ERROR_ACCESS_DENIED); - w32_suc(pEmptyWorkingSet(hpAA)); - - todo_wine w32_err(pInitializeProcessForWsWatch(NULL), ERROR_INVALID_HANDLE); - w32_suc(pInitializeProcessForWsWatch(hpAA)); - - if(!w32_suc(addr = VirtualAlloc(NULL, 1, MEM_COMMIT, PAGE_READWRITE))) - return; - - if(!VirtualLock(addr, 1)) - { - trace("locking failed (error=%d) - skipping test\n", GetLastError()); - goto free_page; - } - - todo_wine if(w32_suc(pQueryWorkingSet(hpQI, pages, 4096 * sizeof(ULONG_PTR)))) - { - for(i = 0; i < pages[0]; i++) - if((pages[i+1] & ~0xfffL) == (ULONG_PTR)addr) - { - ok(1, "QueryWorkingSet found our page\n"); - goto test_gwsc; - } - - ok(0, "QueryWorkingSet didn't find our page\n"); - } - -test_gwsc: - todo_wine if(w32_suc(pGetWsChanges(hpQI, wswi, sizeof(wswi)))) - { - for(i = 0; wswi[i].FaultingVa; i++) - if(((ULONG_PTR)wswi[i].FaultingVa & ~0xfffL) == (ULONG_PTR)addr) - { - ok(1, "GetWsChanges found our page\n"); - goto free_page; - } - - ok(0, "GetWsChanges didn't find our page\n"); - } - -free_page: - VirtualFree(addr, 0, MEM_RELEASE); -} - -START_TEST(psapi_main) -{ - HMODULE hpsapi = LoadLibraryA("psapi.dll"); - - if(!hpsapi) - { - trace("Could not load psapi.dll\n"); - return; - } - - if(InitFunctionPtrs(hpsapi)) - { - DWORD pid = GetCurrentProcessId(); - - w32_suc(hpSR = OpenProcess(STANDARD_RIGHTS_REQUIRED, FALSE, pid)); - w32_suc(hpQI = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid)); - w32_suc(hpVR = OpenProcess(PROCESS_VM_READ, FALSE, pid)); - w32_suc(hpQV = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid)); - w32_suc(hpAA = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid)); - if(hpSR && hpQI && hpVR && hpQV && hpAA) - { - test_EnumProcesses(); - test_EnumProcessModules(); - test_GetModuleInformation(); - test_GetProcessMemoryInfo(); - todo_wine test_GetMappedFileName(); - todo_wine test_GetProcessImageFileName(); - test_GetModuleFileNameEx(); - test_GetModuleBaseName(); - test_ws_functions(); - } - CloseHandle(hpSR); - CloseHandle(hpQI); - CloseHandle(hpVR); - CloseHandle(hpQV); - CloseHandle(hpAA); - } - - FreeLibrary(hpsapi); -} diff --git a/rostests/winetests/psapi/testlist.c b/rostests/winetests/psapi/testlist.c deleted file mode 100644 index 2ceb3610a4d..00000000000 --- a/rostests/winetests/psapi/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_psapi_main(void); - -const struct test winetest_testlist[] = -{ - { "psapi_main", func_psapi_main }, - { 0, 0 } -}; diff --git a/rostests/winetests/riched20/editor.c b/rostests/winetests/riched20/editor.c deleted file mode 100644 index 765e8e27d3f..00000000000 --- a/rostests/winetests/riched20/editor.c +++ /dev/null @@ -1,5441 +0,0 @@ -/* -* Unit test suite for rich edit control -* -* Copyright 2006 Google (Thomas Kho) -* Copyright 2007 Matt Finnicum -* Copyright 2007 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static HMODULE hmoduleRichEdit; - -static HWND new_window(LPCTSTR lpClassName, DWORD dwStyle, HWND parent) { - HWND hwnd; - hwnd = CreateWindow(lpClassName, NULL, dwStyle|WS_POPUP|WS_HSCROLL|WS_VSCROLL - |WS_VISIBLE, 0, 0, 200, 60, parent, NULL, - hmoduleRichEdit, NULL); - ok(hwnd != NULL, "class: %s, error: %d\n", lpClassName, (int) GetLastError()); - return hwnd; -} - -static HWND new_richedit(HWND parent) { - return new_window(RICHEDIT_CLASS, ES_MULTILINE, parent); -} - -static void processPendingMessages(void) -{ - MSG msg; - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } -} - -static void pressKeyWithModifier(HWND hwnd, BYTE mod_vk, BYTE vk) -{ - BYTE mod_scan_code = MapVirtualKey(mod_vk, MAPVK_VK_TO_VSC); - BYTE scan_code = MapVirtualKey(vk, MAPVK_VK_TO_VSC); - SetFocus(hwnd); - keybd_event(mod_vk, mod_scan_code, 0, 0); - keybd_event(vk, scan_code, 0, 0); - keybd_event(vk, scan_code, KEYEVENTF_KEYUP, 0); - keybd_event(mod_vk, mod_scan_code, KEYEVENTF_KEYUP, 0); - processPendingMessages(); -} - -static void simulate_typing_characters(HWND hwnd, const char* szChars) -{ - int ret; - - while (*szChars != '\0') { - SendMessageA(hwnd, WM_KEYDOWN, *szChars, 1); - ret = SendMessageA(hwnd, WM_CHAR, *szChars, 1); - ok(ret == 0, "WM_CHAR('%c') ret=%d\n", *szChars, ret); - SendMessageA(hwnd, WM_KEYUP, *szChars, 1); - szChars++; - } -} - -static const char haystack[] = "WINEWine wineWine wine WineWine"; - /* ^0 ^10 ^20 ^30 */ - -struct find_s { - int start; - int end; - const char *needle; - int flags; - int expected_loc; - int _todo_wine; -}; - - -struct find_s find_tests[] = { - /* Find in empty text */ - {0, -1, "foo", FR_DOWN, -1, 0}, - {0, -1, "foo", 0, -1, 0}, - {0, -1, "", FR_DOWN, -1, 0}, - {20, 5, "foo", FR_DOWN, -1, 0}, - {5, 20, "foo", FR_DOWN, -1, 0} -}; - -struct find_s find_tests2[] = { - /* No-result find */ - {0, -1, "foo", FR_DOWN | FR_MATCHCASE, -1, 0}, - {5, 20, "WINE", FR_DOWN | FR_MATCHCASE, -1, 0}, - - /* Subsequent finds */ - {0, -1, "Wine", FR_DOWN | FR_MATCHCASE, 4, 0}, - {5, 31, "Wine", FR_DOWN | FR_MATCHCASE, 13, 0}, - {14, 31, "Wine", FR_DOWN | FR_MATCHCASE, 23, 0}, - {24, 31, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0}, - - /* Find backwards */ - {19, 20, "Wine", FR_MATCHCASE, 13, 0}, - {10, 20, "Wine", FR_MATCHCASE, 4, 0}, - {20, 10, "Wine", FR_MATCHCASE, 13, 0}, - - /* Case-insensitive */ - {1, 31, "wInE", FR_DOWN, 4, 0}, - {1, 31, "Wine", FR_DOWN, 4, 0}, - - /* High-to-low ranges */ - {20, 5, "Wine", FR_DOWN, -1, 0}, - {2, 1, "Wine", FR_DOWN, -1, 0}, - {30, 29, "Wine", FR_DOWN, -1, 0}, - {20, 5, "Wine", 0, 13, 0}, - - /* Find nothing */ - {5, 10, "", FR_DOWN, -1, 0}, - {10, 5, "", FR_DOWN, -1, 0}, - {0, -1, "", FR_DOWN, -1, 0}, - {10, 5, "", 0, -1, 0}, - - /* Whole-word search */ - {0, -1, "wine", FR_DOWN | FR_WHOLEWORD, 18, 0}, - {0, -1, "win", FR_DOWN | FR_WHOLEWORD, -1, 0}, - {13, -1, "wine", FR_DOWN | FR_WHOLEWORD, 18, 0}, - {0, -1, "winewine", FR_DOWN | FR_WHOLEWORD, 0, 0}, - {10, -1, "winewine", FR_DOWN | FR_WHOLEWORD, 23, 0}, - {11, -1, "winewine", FR_WHOLEWORD, 0, 0}, - {31, -1, "winewine", FR_WHOLEWORD, 23, 0}, - - /* Bad ranges */ - {5, 200, "XXX", FR_DOWN, -1, 0}, - {-20, 20, "Wine", FR_DOWN, -1, 0}, - {-20, 20, "Wine", FR_DOWN, -1, 0}, - {-15, -20, "Wine", FR_DOWN, -1, 0}, - {1<<12, 1<<13, "Wine", FR_DOWN, -1, 0}, - - /* Check the case noted in bug 4479 where matches at end aren't recognized */ - {23, 31, "Wine", FR_DOWN | FR_MATCHCASE, 23, 0}, - {27, 31, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0}, - {27, 32, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0}, - {13, 31, "WineWine", FR_DOWN | FR_MATCHCASE, 23, 0}, - {13, 32, "WineWine", FR_DOWN | FR_MATCHCASE, 23, 0}, - - /* The backwards case of bug 4479; bounds look right - * Fails because backward find is wrong */ - {19, 20, "WINE", FR_MATCHCASE, 0, 0}, - {0, 20, "WINE", FR_MATCHCASE, -1, 0}, - - {0, -1, "wineWine wine", 0, -1, 0}, -}; - -static void check_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *f, int id) { - int findloc; - FINDTEXT ft; - memset(&ft, 0, sizeof(ft)); - ft.chrg.cpMin = f->start; - ft.chrg.cpMax = f->end; - ft.lpstrText = f->needle; - findloc = SendMessage(hwnd, EM_FINDTEXT, f->flags, (LPARAM) &ft); - ok(findloc == f->expected_loc, - "EM_FINDTEXT(%s,%d) '%s' in range(%d,%d), flags %08x, got start at %d, expected %d\n", - name, id, f->needle, f->start, f->end, f->flags, findloc, f->expected_loc); -} - -static void check_EM_FINDTEXTEX(HWND hwnd, const char *name, struct find_s *f, - int id) { - int findloc; - FINDTEXTEX ft; - int expected_end_loc; - - memset(&ft, 0, sizeof(ft)); - ft.chrg.cpMin = f->start; - ft.chrg.cpMax = f->end; - ft.lpstrText = f->needle; - findloc = SendMessage(hwnd, EM_FINDTEXTEX, f->flags, (LPARAM) &ft); - ok(findloc == f->expected_loc, - "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, start at %d\n", - name, id, f->needle, f->start, f->end, f->flags, findloc); - ok(ft.chrgText.cpMin == f->expected_loc, - "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, start at %d\n", - name, id, f->needle, f->start, f->end, f->flags, ft.chrgText.cpMin); - expected_end_loc = ((f->expected_loc == -1) ? -1 - : f->expected_loc + strlen(f->needle)); - ok(ft.chrgText.cpMax == expected_end_loc, - "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, end at %d, expected %d\n", - name, id, f->needle, f->start, f->end, f->flags, ft.chrgText.cpMax, expected_end_loc); -} - -static void run_tests_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *find, - int num_tests) -{ - int i; - - for (i = 0; i < num_tests; i++) { - if (find[i]._todo_wine) { - todo_wine { - check_EM_FINDTEXT(hwnd, name, &find[i], i); - check_EM_FINDTEXTEX(hwnd, name, &find[i], i); - } - } else { - check_EM_FINDTEXT(hwnd, name, &find[i], i); - check_EM_FINDTEXTEX(hwnd, name, &find[i], i); - } - } -} - -static void test_EM_FINDTEXT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - CHARFORMAT2 cf2; - - /* Empty rich edit control */ - run_tests_EM_FINDTEXT(hwndRichEdit, "1", find_tests, - sizeof(find_tests)/sizeof(struct find_s)); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) haystack); - - /* Haystack text */ - run_tests_EM_FINDTEXT(hwndRichEdit, "2", find_tests2, - sizeof(find_tests2)/sizeof(struct find_s)); - - /* Setting a format on an arbitrary range should have no effect in search - results. This tests correct offset reporting across runs. */ - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - cf2.dwMask = CFM_ITALIC | cf2.dwMask; - cf2.dwEffects = CFE_ITALIC ^ cf2.dwEffects; - SendMessage(hwndRichEdit, EM_SETSEL, 6, 20); - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - /* Haystack text, again */ - run_tests_EM_FINDTEXT(hwndRichEdit, "2-bis", find_tests2, - sizeof(find_tests2)/sizeof(struct find_s)); - - /* Yet another range */ - cf2.dwMask = CFM_BOLD | cf2.dwMask; - cf2.dwEffects = CFE_BOLD ^ cf2.dwEffects; - SendMessage(hwndRichEdit, EM_SETSEL, 11, 15); - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - /* Haystack text, again */ - run_tests_EM_FINDTEXT(hwndRichEdit, "2-bisbis", find_tests2, - sizeof(find_tests2)/sizeof(struct find_s)); - - DestroyWindow(hwndRichEdit); -} - -static const struct getline_s { - int line; - size_t buffer_len; - const char *text; -} gl[] = { - {0, 10, "foo bar\r"}, - {1, 10, "\r"}, - {2, 10, "bar\r"}, - {3, 10, "\r"}, - - /* Buffer smaller than line length */ - {0, 2, "foo bar\r"}, - {0, 1, "foo bar\r"}, - {0, 0, "foo bar\r"} -}; - -static void test_EM_GETLINE(void) -{ - int i; - HWND hwndRichEdit = new_richedit(NULL); - static const int nBuf = 1024; - char dest[1024], origdest[1024]; - const char text[] = "foo bar\n" - "\n" - "bar\n"; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - - memset(origdest, 0xBB, nBuf); - for (i = 0; i < sizeof(gl)/sizeof(struct getline_s); i++) - { - int nCopied; - int expected_nCopied = min(gl[i].buffer_len, strlen(gl[i].text)); - int expected_bytes_written = min(gl[i].buffer_len, strlen(gl[i].text) + 1); - memset(dest, 0xBB, nBuf); - *(WORD *) dest = gl[i].buffer_len; - - /* EM_GETLINE appends a "\r\0" to the end of the line - * nCopied counts up to and including the '\r' */ - nCopied = SendMessage(hwndRichEdit, EM_GETLINE, gl[i].line, (LPARAM) dest); - ok(nCopied == expected_nCopied, "%d: %d!=%d\n", i, nCopied, - expected_nCopied); - /* two special cases since a parameter is passed via dest */ - if (gl[i].buffer_len == 0) - ok(!dest[0] && !dest[1] && !strncmp(dest+2, origdest+2, nBuf-2), - "buffer_len=0\n"); - else if (gl[i].buffer_len == 1) - ok(dest[0] == gl[i].text[0] && !dest[1] && - !strncmp(dest+2, origdest+2, nBuf-2), "buffer_len=1\n"); - else - { - ok(!strncmp(dest, gl[i].text, expected_bytes_written), - "%d: expected_bytes_written=%d\n", i, expected_bytes_written); - ok(!strncmp(dest + expected_bytes_written, origdest - + expected_bytes_written, nBuf - expected_bytes_written), - "%d: expected_bytes_written=%d\n", i, expected_bytes_written); - } - } - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_LINELENGTH(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - const char * text = - "richedit1\r" - "richedit1\n" - "richedit1\r\n" - "richedit1"; - int offset_test[10][2] = { - {0, 9}, - {5, 9}, - {10, 9}, - {15, 9}, - {20, 9}, - {25, 9}, - {30, 9}, - {35, 9}, - {40, 0}, - {45, 0}, - }; - int i; - LRESULT result; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - - for (i = 0; i < 10; i++) { - result = SendMessage(hwndRichEdit, EM_LINELENGTH, offset_test[i][0], 0); - ok(result == offset_test[i][1], "Length of line at offset %d is %ld, expected %d\n", - offset_test[i][0], result, offset_test[i][1]); - } - - DestroyWindow(hwndRichEdit); -} - -static int get_scroll_pos_y(HWND hwnd) -{ - POINT p = {-1, -1}; - SendMessage(hwnd, EM_GETSCROLLPOS, 0, (LPARAM) &p); - ok(p.x != -1 && p.y != -1, "p.x:%d p.y:%d\n", p.x, p.y); - return p.y; -} - -static void move_cursor(HWND hwnd, long charindex) -{ - CHARRANGE cr; - cr.cpMax = charindex; - cr.cpMin = charindex; - SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM) &cr); -} - -static void line_scroll(HWND hwnd, int amount) -{ - SendMessage(hwnd, EM_LINESCROLL, 0, amount); -} - -static void test_EM_SCROLLCARET(void) -{ - int prevY, curY; - HWND hwndRichEdit = new_richedit(NULL); - const char text[] = "aa\n" - "this is a long line of text that should be longer than the " - "control's width\n" - "cc\n" - "dd\n" - "ee\n" - "ff\n" - "gg\n" - "hh\n"; - - /* Can't verify this */ - SendMessage(hwndRichEdit, EM_SCROLLCARET, 0, 0); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - - /* Caret above visible window */ - line_scroll(hwndRichEdit, 3); - prevY = get_scroll_pos_y(hwndRichEdit); - SendMessage(hwndRichEdit, EM_SCROLLCARET, 0, 0); - curY = get_scroll_pos_y(hwndRichEdit); - ok(prevY != curY, "%d == %d\n", prevY, curY); - - /* Caret below visible window */ - move_cursor(hwndRichEdit, sizeof(text) - 1); - line_scroll(hwndRichEdit, -3); - prevY = get_scroll_pos_y(hwndRichEdit); - SendMessage(hwndRichEdit, EM_SCROLLCARET, 0, 0); - curY = get_scroll_pos_y(hwndRichEdit); - ok(prevY != curY, "%d == %d\n", prevY, curY); - - /* Caret in visible window */ - move_cursor(hwndRichEdit, sizeof(text) - 2); - prevY = get_scroll_pos_y(hwndRichEdit); - SendMessage(hwndRichEdit, EM_SCROLLCARET, 0, 0); - curY = get_scroll_pos_y(hwndRichEdit); - ok(prevY == curY, "%d != %d\n", prevY, curY); - - /* Caret still in visible window */ - line_scroll(hwndRichEdit, -1); - prevY = get_scroll_pos_y(hwndRichEdit); - SendMessage(hwndRichEdit, EM_SCROLLCARET, 0, 0); - curY = get_scroll_pos_y(hwndRichEdit); - ok(prevY == curY, "%d != %d\n", prevY, curY); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_POSFROMCHAR(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - int i; - LRESULT result; - unsigned int height = 0; - int xpos = 0; - static const char text[] = "aa\n" - "this is a long line of text that should be longer than the " - "control's width\n" - "cc\n" - "dd\n" - "ee\n" - "ff\n" - "gg\n" - "hh\n"; - - /* Fill the control to lines to ensure that most of them are offscreen */ - for (i = 0; i < 50; i++) - { - /* Do not modify the string; it is exactly 16 characters long. */ - SendMessage(hwndRichEdit, EM_SETSEL, 0, 0); - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM)"0123456789ABCDE\n"); - } - - /* - Richedit 1.0 receives a POINTL* on wParam and character offset on lParam, returns void. - Richedit 2.0 receives character offset on wParam, ignores lParam, returns MAKELONG(x,y) - Richedit 3.0 accepts either of the above API conventions. - */ - - /* Testing Richedit 2.0 API format */ - - /* Testing start of lines. X-offset should be constant on all cases (native is 1). - Since all lines are identical and drawn with the same font, - they should have the same height... right? - */ - for (i = 0; i < 50; i++) - { - /* All the lines are 16 characters long */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, i * 16, 0); - if (i == 0) - { - ok(HIWORD(result) == 0, "EM_POSFROMCHAR reports y=%d, expected 0\n", HIWORD(result)); - todo_wine { - ok(LOWORD(result) == 1, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - } - xpos = LOWORD(result); - } - else if (i == 1) - { - ok(HIWORD(result) > 0, "EM_POSFROMCHAR reports y=%d, expected > 0\n", HIWORD(result)); - ok(LOWORD(result) == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - height = HIWORD(result); - } - else - { - ok(HIWORD(result) == i * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", HIWORD(result), i * height); - ok(LOWORD(result) == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - } - } - - /* Testing position at end of text */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, 50 * 16, 0); - ok(HIWORD(result) == 50 * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", HIWORD(result), 50 * height); - ok(LOWORD(result) == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - - /* Testing position way past end of text */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, 55 * 16, 0); - ok(HIWORD(result) == 50 * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", HIWORD(result), 50 * height); - ok(LOWORD(result) == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - - /* Testing that vertical scrolling does, in fact, have an effect on EM_POSFROMCHAR */ - SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEDOWN, 0); /* line down */ - for (i = 0; i < 50; i++) - { - /* All the lines are 16 characters long */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, i * 16, 0); - ok((signed short)(HIWORD(result)) == (i - 1) * height, - "EM_POSFROMCHAR reports y=%hd, expected %d\n", - (signed short)(HIWORD(result)), (i - 1) * height); - ok(LOWORD(result) == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - } - - /* Testing position at end of text */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, 50 * 16, 0); - ok(HIWORD(result) == (50 - 1) * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", HIWORD(result), (50 - 1) * height); - ok(LOWORD(result) == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - - /* Testing position way past end of text */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, 55 * 16, 0); - ok(HIWORD(result) == (50 - 1) * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", HIWORD(result), (50 - 1) * height); - ok(LOWORD(result) == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - - /* Testing that horizontal scrolling does, in fact, have an effect on EM_POSFROMCHAR */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEUP, 0); /* line up */ - - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, 0, 0); - ok(HIWORD(result) == 0, "EM_POSFROMCHAR reports y=%d, expected 0\n", HIWORD(result)); - todo_wine { - ok(LOWORD(result) == 1, "EM_POSFROMCHAR reports x=%d, expected 1\n", LOWORD(result)); - } - xpos = LOWORD(result); - - SendMessage(hwndRichEdit, WM_HSCROLL, SB_LINERIGHT, 0); - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, 0, 0); - ok(HIWORD(result) == 0, "EM_POSFROMCHAR reports y=%d, expected 0\n", HIWORD(result)); - todo_wine { - /* Fails on builtin because horizontal scrollbar is not being shown */ - ok((signed short)(LOWORD(result)) < xpos, - "EM_POSFROMCHAR reports x=%hd, expected value less than %d\n", - (signed short)(LOWORD(result)), xpos); - } - DestroyWindow(hwndRichEdit); -} - -static void test_EM_SETCHARFORMAT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - CHARFORMAT2 cf2; - int rc = 0; - int tested_effects[] = { - CFE_BOLD, - CFE_ITALIC, - CFE_UNDERLINE, - CFE_STRIKEOUT, - CFE_PROTECTED, - CFE_LINK, - CFE_SUBSCRIPT, - CFE_SUPERSCRIPT, - 0 - }; - int i; - CHARRANGE cr; - - /* Invalid flags, CHARFORMAT2 structure blanked out */ - memset(&cf2, 0, sizeof(cf2)); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) 0xfffffff0, - (LPARAM) &cf2); - ok(rc == 0, "EM_SETCHARFORMAT returned %d instead of 0\n", rc); - - /* A valid flag, CHARFORMAT2 structure blanked out */ - memset(&cf2, 0, sizeof(cf2)); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - ok(rc == 0, "EM_SETCHARFORMAT returned %d instead of 0\n", rc); - - /* A valid flag, CHARFORMAT2 structure blanked out */ - memset(&cf2, 0, sizeof(cf2)); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_SELECTION, - (LPARAM) &cf2); - ok(rc == 0, "EM_SETCHARFORMAT returned %d instead of 0\n", rc); - - /* A valid flag, CHARFORMAT2 structure blanked out */ - memset(&cf2, 0, sizeof(cf2)); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_WORD, - (LPARAM) &cf2); - ok(rc == 0, "EM_SETCHARFORMAT returned %d instead of 0\n", rc); - - /* A valid flag, CHARFORMAT2 structure blanked out */ - memset(&cf2, 0, sizeof(cf2)); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, - (LPARAM) &cf2); - ok(rc == 0, "EM_SETCHARFORMAT returned %d instead of 0\n", rc); - - /* Invalid flags, CHARFORMAT2 structure minimally filled */ - memset(&cf2, 0, sizeof(cf2)); - cf2.cbSize = sizeof(CHARFORMAT2); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) 0xfffffff0, - (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0); - ok(rc == FALSE, "Should not be able to undo here.\n"); - SendMessage(hwndRichEdit, EM_EMPTYUNDOBUFFER, 0, 0); - - /* A valid flag, CHARFORMAT2 structure minimally filled */ - memset(&cf2, 0, sizeof(cf2)); - cf2.cbSize = sizeof(CHARFORMAT2); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0); - ok(rc == FALSE, "Should not be able to undo here.\n"); - SendMessage(hwndRichEdit, EM_EMPTYUNDOBUFFER, 0, 0); - - /* A valid flag, CHARFORMAT2 structure minimally filled */ - memset(&cf2, 0, sizeof(cf2)); - cf2.cbSize = sizeof(CHARFORMAT2); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_SELECTION, - (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0); - ok(rc == FALSE, "Should not be able to undo here.\n"); - SendMessage(hwndRichEdit, EM_EMPTYUNDOBUFFER, 0, 0); - - /* A valid flag, CHARFORMAT2 structure minimally filled */ - memset(&cf2, 0, sizeof(cf2)); - cf2.cbSize = sizeof(CHARFORMAT2); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_WORD, - (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0); - todo_wine ok(rc == TRUE, "Should not be able to undo here.\n"); - SendMessage(hwndRichEdit, EM_EMPTYUNDOBUFFER, 0, 0); - - /* A valid flag, CHARFORMAT2 structure minimally filled */ - memset(&cf2, 0, sizeof(cf2)); - cf2.cbSize = sizeof(CHARFORMAT2); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, - (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0); - todo_wine ok(rc == TRUE, "Should not be able to undo here.\n"); - SendMessage(hwndRichEdit, EM_EMPTYUNDOBUFFER, 0, 0); - - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - - /* Test state of modify flag before and after valid EM_SETCHARFORMAT */ - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - cf2.dwMask = CFM_ITALIC | cf2.dwMask; - cf2.dwEffects = CFE_ITALIC ^ cf2.dwEffects; - - /* wParam==0 is default char format, does not set modify */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == 0, "Text marked as modified, expected not modified!\n"); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, 0, (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == 0, "Text marked as modified, expected not modified!\n"); - - /* wParam==SCF_SELECTION sets modify if nonempty selection */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == 0, "Text marked as modified, expected not modified!\n"); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == 0, "Text marked as modified, expected not modified!\n"); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"wine"); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == 0, "Text marked as modified, expected not modified!\n"); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == 0, "Text marked as modified, expected not modified!\n"); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 2); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == -1, "Text not marked as modified, expected modified! (%d)\n", rc); - - /* wParam==SCF_ALL sets modify regardless of whether text is present */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == 0, "Text marked as modified, expected not modified!\n"); - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == -1, "Text not marked as modified, expected modified! (%d)\n", rc); - - DestroyWindow(hwndRichEdit); - - /* EM_GETCHARFORMAT tests */ - for (i = 0; tested_effects[i]; i++) - { - hwndRichEdit = new_richedit(NULL); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"wine"); - - /* Need to set a TrueType font to get consistent CFM_BOLD results */ - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cf2.dwMask = CFM_FACE|CFM_WEIGHT; - cf2.dwEffects = 0; - strcpy(cf2.szFaceName, "Courier New"); - cf2.wWeight = FW_DONTCARE; - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cf2); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 4); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok ((((tested_effects[i] == CFE_SUBSCRIPT || tested_effects[i] == CFE_SUPERSCRIPT) && - (cf2.dwMask & CFM_SUPERSCRIPT) == CFM_SUPERSCRIPT) - || - (cf2.dwMask & tested_effects[i]) == tested_effects[i]), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, tested_effects[i]); - ok((cf2.dwEffects & tested_effects[i]) == 0, - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x clear\n", i, cf2.dwEffects, tested_effects[i]); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cf2.dwMask = tested_effects[i]; - if (cf2.dwMask == CFE_SUBSCRIPT || cf2.dwMask == CFE_SUPERSCRIPT) - cf2.dwMask = CFM_SUPERSCRIPT; - cf2.dwEffects = tested_effects[i]; - SendMessage(hwndRichEdit, EM_SETSEL, 0, 2); - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok ((((tested_effects[i] == CFE_SUBSCRIPT || tested_effects[i] == CFE_SUPERSCRIPT) && - (cf2.dwMask & CFM_SUPERSCRIPT) == CFM_SUPERSCRIPT) - || - (cf2.dwMask & tested_effects[i]) == tested_effects[i]), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, tested_effects[i]); - ok((cf2.dwEffects & tested_effects[i]) == tested_effects[i], - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x\n", i, cf2.dwEffects, tested_effects[i]); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 2, 4); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok ((((tested_effects[i] == CFE_SUBSCRIPT || tested_effects[i] == CFE_SUPERSCRIPT) && - (cf2.dwMask & CFM_SUPERSCRIPT) == CFM_SUPERSCRIPT) - || - (cf2.dwMask & tested_effects[i]) == tested_effects[i]), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, tested_effects[i]); - ok((cf2.dwEffects & tested_effects[i]) == 0, - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x clear\n", i, cf2.dwEffects, tested_effects[i]); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 1, 3); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok ((((tested_effects[i] == CFE_SUBSCRIPT || tested_effects[i] == CFE_SUPERSCRIPT) && - (cf2.dwMask & CFM_SUPERSCRIPT) == 0) - || - (cf2.dwMask & tested_effects[i]) == 0), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x clear\n", i, cf2.dwMask, tested_effects[i]); - - DestroyWindow(hwndRichEdit); - } - - for (i = 0; tested_effects[i]; i++) - { - hwndRichEdit = new_richedit(NULL); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"wine"); - - /* Need to set a TrueType font to get consistent CFM_BOLD results */ - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cf2.dwMask = CFM_FACE|CFM_WEIGHT; - cf2.dwEffects = 0; - strcpy(cf2.szFaceName, "Courier New"); - cf2.wWeight = FW_DONTCARE; - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cf2); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cf2.dwMask = tested_effects[i]; - if (cf2.dwMask == CFE_SUBSCRIPT || cf2.dwMask == CFE_SUPERSCRIPT) - cf2.dwMask = CFM_SUPERSCRIPT; - cf2.dwEffects = tested_effects[i]; - SendMessage(hwndRichEdit, EM_SETSEL, 2, 4); - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok ((((tested_effects[i] == CFE_SUBSCRIPT || tested_effects[i] == CFE_SUPERSCRIPT) && - (cf2.dwMask & CFM_SUPERSCRIPT) == CFM_SUPERSCRIPT) - || - (cf2.dwMask & tested_effects[i]) == tested_effects[i]), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, tested_effects[i]); - ok((cf2.dwEffects & tested_effects[i]) == 0, - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x clear\n", i, cf2.dwEffects, tested_effects[i]); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 2, 4); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok ((((tested_effects[i] == CFE_SUBSCRIPT || tested_effects[i] == CFE_SUPERSCRIPT) && - (cf2.dwMask & CFM_SUPERSCRIPT) == CFM_SUPERSCRIPT) - || - (cf2.dwMask & tested_effects[i]) == tested_effects[i]), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, tested_effects[i]); - ok((cf2.dwEffects & tested_effects[i]) == tested_effects[i], - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x\n", i, cf2.dwEffects, tested_effects[i]); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 1, 3); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - ok ((((tested_effects[i] == CFE_SUBSCRIPT || tested_effects[i] == CFE_SUPERSCRIPT) && - (cf2.dwMask & CFM_SUPERSCRIPT) == 0) - || - (cf2.dwMask & tested_effects[i]) == 0), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x clear\n", i, cf2.dwMask, tested_effects[i]); - ok((cf2.dwEffects & tested_effects[i]) == tested_effects[i], - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x set\n", i, cf2.dwEffects, tested_effects[i]); - - DestroyWindow(hwndRichEdit); - } - - /* Effects applied on an empty selection should take effect when selection is - replaced with text */ - hwndRichEdit = new_richedit(NULL); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"wine"); - SendMessage(hwndRichEdit, EM_SETSEL, 2, 2); /* Empty selection */ - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cf2.dwMask = CFM_BOLD; - cf2.dwEffects = CFE_BOLD; - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - /* Selection is now nonempty */ - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM)"newi"); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 2, 6); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - ok (((cf2.dwMask & CFM_BOLD) == CFM_BOLD), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, CFM_BOLD); - ok((cf2.dwEffects & CFE_BOLD) == CFE_BOLD, - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x\n", i, cf2.dwEffects, CFE_BOLD); - - - /* Set two effects on an empty selection */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"wine"); - SendMessage(hwndRichEdit, EM_SETSEL, 2, 2); /* Empty selection */ - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cf2.dwMask = CFM_BOLD; - cf2.dwEffects = CFE_BOLD; - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - cf2.dwMask = CFM_ITALIC; - cf2.dwEffects = CFE_ITALIC; - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - /* Selection is now nonempty */ - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM)"newi"); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 2, 6); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - ok (((cf2.dwMask & (CFM_BOLD|CFM_ITALIC)) == (CFM_BOLD|CFM_ITALIC)), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, (CFM_BOLD|CFM_ITALIC)); - ok((cf2.dwEffects & (CFE_BOLD|CFE_ITALIC)) == (CFE_BOLD|CFE_ITALIC), - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x\n", i, cf2.dwEffects, (CFE_BOLD|CFE_ITALIC)); - - /* Setting the (empty) selection to exactly the same place as before should - NOT clear the insertion style! */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"wine"); - SendMessage(hwndRichEdit, EM_SETSEL, 2, 2); /* Empty selection */ - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cf2.dwMask = CFM_BOLD; - cf2.dwEffects = CFE_BOLD; - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - /* Empty selection in same place, insert style should NOT be forgotten here. */ - SendMessage(hwndRichEdit, EM_SETSEL, 2, 2); - - /* Selection is now nonempty */ - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM)"newi"); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_SETSEL, 2, 6); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - ok (((cf2.dwMask & CFM_BOLD) == CFM_BOLD), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, CFM_BOLD); - ok((cf2.dwEffects & CFE_BOLD) == CFE_BOLD, - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x\n", i, cf2.dwEffects, CFE_BOLD); - - /* Ditto with EM_EXSETSEL */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"wine"); - cr.cpMin = 2; cr.cpMax = 2; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM)&cr); /* Empty selection */ - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cf2.dwMask = CFM_BOLD; - cf2.dwEffects = CFE_BOLD; - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - /* Empty selection in same place, insert style should NOT be forgotten here. */ - cr.cpMin = 2; cr.cpMax = 2; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM)&cr); /* Empty selection */ - - /* Selection is now nonempty */ - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM)"newi"); - - memset(&cf2, 0, sizeof(CHARFORMAT2)); - cf2.cbSize = sizeof(CHARFORMAT2); - cr.cpMin = 2; cr.cpMax = 6; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM)&cr); /* Empty selection */ - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2); - - ok (((cf2.dwMask & CFM_BOLD) == CFM_BOLD), - "%d, cf2.dwMask == 0x%08x expected mask 0x%08x\n", i, cf2.dwMask, CFM_BOLD); - ok((cf2.dwEffects & CFE_BOLD) == CFE_BOLD, - "%d, cf2.dwEffects == 0x%08x expected effect 0x%08x\n", i, cf2.dwEffects, CFE_BOLD); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_SETTEXTMODE(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - CHARFORMAT2 cf2, cf2test; - CHARRANGE cr; - int rc = 0; - - /*Test that EM_SETTEXTMODE fails if text exists within the control*/ - /*Insert text into the control*/ - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "wine"); - - /*Attempt to change the control to plain text mode*/ - rc = SendMessage(hwndRichEdit, EM_SETTEXTMODE, (WPARAM) TM_PLAINTEXT, 0); - ok(rc != 0, "EM_SETTEXTMODE: changed text mode in control containing text - returned: %d\n", rc); - - /*Test that EM_SETTEXTMODE does not allow rich edit text to be pasted. - If rich text is pasted, it should have the same formatting as the rest - of the text in the control*/ - - /*Italicize the text - *NOTE: If the default text was already italicized, the test will simply - reverse; in other words, it will copy a regular "wine" into a plain - text window that uses an italicized format*/ - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - - cf2.dwMask = CFM_ITALIC | cf2.dwMask; - cf2.dwEffects = CFE_ITALIC ^ cf2.dwEffects; - - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == 0, "Text marked as modified, expected not modified!\n"); - - /*EM_SETCHARFORMAT is not yet fully implemented for all WPARAMs in wine; - however, SCF_ALL has been implemented*/ - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - - rc = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok(rc == -1, "Text not marked as modified, expected modified! (%d)\n", rc); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "wine"); - - /*Select the string "wine"*/ - cr.cpMin = 0; - cr.cpMax = 4; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - - /*Copy the italicized "wine" to the clipboard*/ - SendMessage(hwndRichEdit, WM_COPY, 0, 0); - - /*Reset the formatting to default*/ - cf2.dwEffects = CFE_ITALIC^cf2.dwEffects; - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - - /*Clear the text in the control*/ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) ""); - - /*Switch to Plain Text Mode*/ - rc = SendMessage(hwndRichEdit, EM_SETTEXTMODE, (WPARAM) TM_PLAINTEXT, 0); - ok(rc == 0, "EM_SETTEXTMODE: unable to switch to plain text mode with empty control: returned: %d\n", rc); - - /*Input "wine" again in normal format*/ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "wine"); - - /*Paste the italicized "wine" into the control*/ - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - - /*Select a character from the first "wine" string*/ - cr.cpMin = 2; - cr.cpMax = 3; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - - /*Retrieve its formatting*/ - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_SELECTION, - (LPARAM) &cf2); - - /*Select a character from the second "wine" string*/ - cr.cpMin = 5; - cr.cpMax = 6; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - - /*Retrieve its formatting*/ - cf2test.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_SELECTION, - (LPARAM) &cf2test); - - /*Compare the two formattings*/ - ok((cf2.dwMask == cf2test.dwMask) && (cf2.dwEffects == cf2test.dwEffects), - "two formats found in plain text mode - cf2.dwEffects: %x cf2test.dwEffects: %x\n", - cf2.dwEffects, cf2test.dwEffects); - /*Test TM_RICHTEXT by: switching back to Rich Text mode - printing "wine" in the current format(normal) - pasting "wine" from the clipboard(italicized) - comparing the two formats(should differ)*/ - - /*Attempt to switch with text in control*/ - rc = SendMessage(hwndRichEdit, EM_SETTEXTMODE, (WPARAM) TM_RICHTEXT, 0); - ok(rc != 0, "EM_SETTEXTMODE: changed from plain text to rich text with text in control - returned: %d\n", rc); - - /*Clear control*/ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) ""); - - /*Switch into Rich Text mode*/ - rc = SendMessage(hwndRichEdit, EM_SETTEXTMODE, (WPARAM) TM_RICHTEXT, 0); - ok(rc == 0, "EM_SETTEXTMODE: unable to change to rich text with empty control - returned: %d\n", rc); - - /*Print "wine" in normal formatting into the control*/ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "wine"); - - /*Paste italicized "wine" into the control*/ - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - - /*Select text from the first "wine" string*/ - cr.cpMin = 1; - cr.cpMax = 3; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - - /*Retrieve its formatting*/ - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_SELECTION, - (LPARAM) &cf2); - - /*Select text from the second "wine" string*/ - cr.cpMin = 6; - cr.cpMax = 7; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - - /*Retrieve its formatting*/ - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_SELECTION, - (LPARAM) &cf2test); - - /*Test that the two formattings are not the same*/ - todo_wine ok((cf2.dwMask == cf2test.dwMask) && (cf2.dwEffects != cf2test.dwEffects), - "expected different formats - cf2.dwMask: %x, cf2test.dwMask: %x, cf2.dwEffects: %x, cf2test.dwEffects: %x\n", - cf2.dwMask, cf2test.dwMask, cf2.dwEffects, cf2test.dwEffects); - - DestroyWindow(hwndRichEdit); -} - -static void test_SETPARAFORMAT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - PARAFORMAT2 fmt; - HRESULT ret; - fmt.cbSize = sizeof(PARAFORMAT2); - fmt.dwMask = PFM_ALIGNMENT; - fmt.wAlignment = PFA_LEFT; - - ret = SendMessage(hwndRichEdit, EM_SETPARAFORMAT, 0, (LPARAM) &fmt); - ok(ret != 0, "expected non-zero got %d\n", ret); - - fmt.cbSize = sizeof(PARAFORMAT2); - fmt.dwMask = -1; - ret = SendMessage(hwndRichEdit, EM_GETPARAFORMAT, 0, (LPARAM) &fmt); - ok(ret == PFM_ALL2, "expected %x got %x\n", PFM_ALL2, ret); - ok(fmt.dwMask == PFM_ALL2, "expected %x got %x\n", PFM_ALL2, fmt.dwMask); - - DestroyWindow(hwndRichEdit); -} - -static void test_TM_PLAINTEXT(void) -{ - /*Tests plain text properties*/ - - HWND hwndRichEdit = new_richedit(NULL); - CHARFORMAT2 cf2, cf2test; - CHARRANGE cr; - int rc = 0; - - /*Switch to plain text mode*/ - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) ""); - SendMessage(hwndRichEdit, EM_SETTEXTMODE, TM_PLAINTEXT, 0); - - /*Fill control with text*/ - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "Is Wine an emulator? No it's not"); - - /*Select some text and bold it*/ - - cr.cpMin = 10; - cr.cpMax = 20; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - - cf2.dwMask = CFM_BOLD | cf2.dwMask; - cf2.dwEffects = CFE_BOLD ^ cf2.dwEffects; - - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_SELECTION, (LPARAM) &cf2); - ok(rc == 0, "EM_SETCHARFORMAT returned %d instead of 0\n", rc); - - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_WORD | SCF_SELECTION, (LPARAM) &cf2); - ok(rc == 0, "EM_SETCHARFORMAT returned %d instead of 0\n", rc); - - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, (LPARAM)&cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - - /*Get the formatting of those characters*/ - - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_SELECTION, (LPARAM) &cf2); - - /*Get the formatting of some other characters*/ - cf2test.cbSize = sizeof(CHARFORMAT2); - cr.cpMin = 21; - cr.cpMax = 30; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_SELECTION, (LPARAM) &cf2test); - - /*Test that they are the same as plain text allows only one formatting*/ - - ok((cf2.dwMask == cf2test.dwMask) && (cf2.dwEffects == cf2test.dwEffects), - "two selections' formats differ - cf2.dwMask: %x, cf2test.dwMask %x, cf2.dwEffects: %x, cf2test.dwEffects: %x\n", - cf2.dwMask, cf2test.dwMask, cf2.dwEffects, cf2test.dwEffects); - - /*Fill the control with a "wine" string, which when inserted will be bold*/ - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "wine"); - - /*Copy the bolded "wine" string*/ - - cr.cpMin = 0; - cr.cpMax = 4; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - SendMessage(hwndRichEdit, WM_COPY, 0, 0); - - /*Swap back to rich text*/ - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) ""); - SendMessage(hwndRichEdit, EM_SETTEXTMODE, (WPARAM) TM_RICHTEXT, 0); - - /*Set the default formatting to bold italics*/ - - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT, (LPARAM) &cf2); - cf2.dwMask |= CFM_ITALIC; - cf2.dwEffects ^= CFE_ITALIC; - rc = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, (LPARAM) &cf2); - ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc); - - /*Set the text in the control to "wine", which will be bold and italicized*/ - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "wine"); - - /*Paste the plain text "wine" string, which should take the insert - formatting, which at the moment is bold italics*/ - - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - - /*Select the first "wine" string and retrieve its formatting*/ - - cr.cpMin = 1; - cr.cpMax = 3; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_SELECTION, (LPARAM) &cf2); - - /*Select the second "wine" string and retrieve its formatting*/ - - cr.cpMin = 5; - cr.cpMax = 7; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_SELECTION, (LPARAM) &cf2test); - - /*Compare the two formattings. They should be the same.*/ - - ok((cf2.dwMask == cf2test.dwMask) && (cf2.dwEffects == cf2test.dwEffects), - "Copied text retained formatting - cf2.dwMask: %x, cf2test.dwMask: %x, cf2.dwEffects: %x, cf2test.dwEffects: %x\n", - cf2.dwMask, cf2test.dwMask, cf2.dwEffects, cf2test.dwEffects); - DestroyWindow(hwndRichEdit); -} - -static void test_WM_GETTEXT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - static const char text[] = "Hello. My name is RichEdit!"; - static const char text2[] = "Hello. My name is RichEdit!\r"; - static const char text2_after[] = "Hello. My name is RichEdit!\r\n"; - char buffer[1024] = {0}; - int result; - - /* Baseline test with normal-sized buffer */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(result == lstrlen(buffer), - "WM_GETTEXT returned %d, expected %d\n", result, lstrlen(buffer)); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - result = strcmp(buffer,text); - ok(result == 0, - "WM_GETTEXT: settext and gettext differ. strcmp: %d\n", result); - - /* Test for returned value of WM_GETTEXTLENGTH */ - result = SendMessage(hwndRichEdit, WM_GETTEXTLENGTH, 0, 0); - ok(result == lstrlen(text), - "WM_GETTEXTLENGTH reports incorrect length %d, expected %d\n", - result, lstrlen(text)); - - /* Test for behavior in overflow case */ - memset(buffer, 0, 1024); - result = SendMessage(hwndRichEdit, WM_GETTEXT, strlen(text), (LPARAM)buffer); - ok(result == 0 || - result == lstrlenA(text) - 1, /* XP, win2k3 */ - "WM_GETTEXT returned %d, expected 0 or %d\n", result, lstrlenA(text) - 1); - result = strcmp(buffer,text); - if (result) - result = strncmp(buffer, text, lstrlenA(text) - 1); /* XP, win2k3 */ - ok(result == 0, - "WM_GETTEXT: settext and gettext differ. strcmp: %d\n", result); - - /* Baseline test with normal-sized buffer and carriage return */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text2); - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(result == lstrlen(buffer), - "WM_GETTEXT returned %d, expected %d\n", result, lstrlen(buffer)); - result = strcmp(buffer,text2_after); - ok(result == 0, - "WM_GETTEXT: settext and gettext differ. strcmp: %d\n", result); - - /* Test for returned value of WM_GETTEXTLENGTH */ - result = SendMessage(hwndRichEdit, WM_GETTEXTLENGTH, 0, 0); - ok(result == lstrlen(text2_after), - "WM_GETTEXTLENGTH reports incorrect length %d, expected %d\n", - result, lstrlen(text2_after)); - - /* Test for behavior of CRLF conversion in case of overflow */ - memset(buffer, 0, 1024); - result = SendMessage(hwndRichEdit, WM_GETTEXT, strlen(text2), (LPARAM)buffer); - ok(result == 0 || - result == lstrlenA(text2) - 1, /* XP, win2k3 */ - "WM_GETTEXT returned %d, expected 0 or %d\n", result, lstrlenA(text2) - 1); - result = strcmp(buffer,text2); - if (result) - result = strncmp(buffer, text2, lstrlenA(text2) - 1); /* XP, win2k3 */ - ok(result == 0, - "WM_GETTEXT: settext and gettext differ. strcmp: %d\n", result); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_GETTEXTRANGE(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - const char * text1 = "foo bar\r\nfoo bar"; - const char * text2 = "foo bar\rfoo bar"; - const char * expect = "bar\rfoo"; - char buffer[1024] = {0}; - LRESULT result; - TEXTRANGEA textRange; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text1); - - textRange.lpstrText = buffer; - textRange.chrg.cpMin = 4; - textRange.chrg.cpMax = 11; - result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange); - ok(result == 7, "EM_GETTEXTRANGE returned %ld\n", result); - ok(!strcmp(expect, buffer), "EM_GETTEXTRANGE filled %s\n", buffer); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text2); - - textRange.lpstrText = buffer; - textRange.chrg.cpMin = 4; - textRange.chrg.cpMax = 11; - result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange); - ok(result == 7, "EM_GETTEXTRANGE returned %ld\n", result); - ok(!strcmp(expect, buffer), "EM_GETTEXTRANGE filled %s\n", buffer); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_GETSELTEXT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - const char * text1 = "foo bar\r\nfoo bar"; - const char * text2 = "foo bar\rfoo bar"; - const char * expect = "bar\rfoo"; - char buffer[1024] = {0}; - LRESULT result; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text1); - - SendMessage(hwndRichEdit, EM_SETSEL, 4, 11); - result = SendMessage(hwndRichEdit, EM_GETSELTEXT, 0, (LPARAM)buffer); - ok(result == 7, "EM_GETTEXTRANGE returned %ld\n", result); - ok(!strcmp(expect, buffer), "EM_GETTEXTRANGE filled %s\n", buffer); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text2); - - SendMessage(hwndRichEdit, EM_SETSEL, 4, 11); - result = SendMessage(hwndRichEdit, EM_GETSELTEXT, 0, (LPARAM)buffer); - ok(result == 7, "EM_GETTEXTRANGE returned %ld\n", result); - ok(!strcmp(expect, buffer), "EM_GETTEXTRANGE filled %s\n", buffer); - - DestroyWindow(hwndRichEdit); -} - -/* FIXME: need to test unimplemented options and robustly test wparam */ -static void test_EM_SETOPTIONS(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - static const char text[] = "Hello. My name is RichEdit!"; - char buffer[1024] = {0}; - - /* NEGATIVE TESTING - NO OPTIONS SET */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - SendMessage(hwndRichEdit, EM_SETOPTIONS, ECOOP_SET, 0); - - /* testing no readonly by sending 'a' to the control*/ - SetFocus(hwndRichEdit); - SendMessage(hwndRichEdit, WM_CHAR, 'a', 0x1E0001); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(buffer[0]=='a', - "EM_SETOPTIONS: Text not changed! s1:%s s2:%s\n", text, buffer); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - - /* READONLY - sending 'a' to the control */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - SendMessage(hwndRichEdit, EM_SETOPTIONS, ECOOP_SET, ECO_READONLY); - SetFocus(hwndRichEdit); - SendMessage(hwndRichEdit, WM_CHAR, 'a', 0x1E0001); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(buffer[0]==text[0], - "EM_SETOPTIONS: Text changed! s1:%s s2:%s\n", text, buffer); - - DestroyWindow(hwndRichEdit); -} - -static int check_CFE_LINK_selection(HWND hwnd, int sel_start, int sel_end) -{ - CHARFORMAT2W text_format; - text_format.cbSize = sizeof(text_format); - SendMessage(hwnd, EM_SETSEL, sel_start, sel_end); - SendMessage(hwnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &text_format); - return (text_format.dwEffects & CFE_LINK) ? 1 : 0; -} - -static void check_CFE_LINK_rcvd(HWND hwnd, int is_url, const char * url) -{ - int link_present = 0; - - link_present = check_CFE_LINK_selection(hwnd, 0, 1); - if (is_url) - { /* control text is url; should get CFE_LINK */ - ok(0 != link_present, "URL Case: CFE_LINK not set for [%s].\n", url); - } - else - { - ok(0 == link_present, "Non-URL Case: CFE_LINK set for [%s].\n", url); - } -} - -static HWND new_static_wnd(HWND parent) { - return new_window("Static", 0, parent); -} - -static void test_EM_AUTOURLDETECT(void) -{ - /* DO NOT change the properties of the first two elements. To shorten the - tests, all tests after WM_SETTEXT test just the first two elements - - one non-URL and one URL */ - struct urls_s { - const char *text; - int is_url; - } urls[12] = { - {"winehq.org", 0}, - {"http://www.winehq.org", 1}, - {"http//winehq.org", 0}, - {"ww.winehq.org", 0}, - {"www.winehq.org", 1}, - {"ftp://192.168.1.1", 1}, - {"ftp//192.168.1.1", 0}, - {"mailto:your@email.com", 1}, - {"prospero:prosperoserver", 1}, - {"telnet:test", 1}, - {"news:newserver", 1}, - {"wais:waisserver", 1} - }; - - int i, j; - int urlRet=-1; - HWND hwndRichEdit, parent; - - /* All of the following should cause the URL to be detected */ - const char * templates_delim[] = { - "This is some text with X on it", - "This is some text with (X) on it", - "This is some text with X\r on it", - "This is some text with ---X--- on it", - "This is some text with \"X\" on it", - "This is some text with 'X' on it", - "This is some text with 'X' on it", - "This is some text with :X: on it", - - "This text ends with X", - - "This is some text with X) on it", - "This is some text with X--- on it", - "This is some text with X\" on it", - "This is some text with X' on it", - "This is some text with X: on it", - - "This is some text with (X on it", - "This is some text with \rX on it", - "This is some text with ---X on it", - "This is some text with \"X on it", - "This is some text with 'X on it", - "This is some text with :X on it", - }; - /* None of these should cause the URL to be detected */ - const char * templates_non_delim[] = { - "This is some text with |X| on it", - "This is some text with *X* on it", - "This is some text with /X/ on it", - "This is some text with +X+ on it", - "This is some text with %X% on it", - "This is some text with #X# on it", - "This is some text with @X@ on it", - "This is some text with \\X\\ on it", - "This is some text with |X on it", - "This is some text with *X on it", - "This is some text with /X on it", - "This is some text with +X on it", - "This is some text with %X on it", - "This is some text with #X on it", - "This is some text with @X on it", - "This is some text with \\X on it", - }; - /* All of these cause the URL detection to be extended by one more byte, - thus demonstrating that the tested character is considered as part - of the URL. */ - const char * templates_xten_delim[] = { - "This is some text with X| on it", - "This is some text with X* on it", - "This is some text with X/ on it", - "This is some text with X+ on it", - "This is some text with X% on it", - "This is some text with X# on it", - "This is some text with X@ on it", - "This is some text with X\\ on it", - }; - char buffer[1024]; - - parent = new_static_wnd(NULL); - hwndRichEdit = new_richedit(parent); - /* Try and pass EM_AUTOURLDETECT some test wParam values */ - urlRet=SendMessage(hwndRichEdit, EM_AUTOURLDETECT, FALSE, 0); - ok(urlRet==0, "Good wParam: urlRet is: %d\n", urlRet); - urlRet=SendMessage(hwndRichEdit, EM_AUTOURLDETECT, 1, 0); - ok(urlRet==0, "Good wParam2: urlRet is: %d\n", urlRet); - /* Windows returns -2147024809 (0x80070057) on bad wParam values */ - urlRet=SendMessage(hwndRichEdit, EM_AUTOURLDETECT, 8, 0); - ok(urlRet==E_INVALIDARG, "Bad wParam: urlRet is: %d\n", urlRet); - urlRet=SendMessage(hwndRichEdit, EM_AUTOURLDETECT, (WPARAM)"h", (LPARAM)"h"); - ok(urlRet==E_INVALIDARG, "Bad wParam2: urlRet is: %d\n", urlRet); - /* for each url, check the text to see if CFE_LINK effect is present */ - for (i = 0; i < sizeof(urls)/sizeof(struct urls_s); i++) { - - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, FALSE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) urls[i].text); - check_CFE_LINK_rcvd(hwndRichEdit, 0, urls[i].text); - - /* Link detection should happen immediately upon WM_SETTEXT */ - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) urls[i].text); - check_CFE_LINK_rcvd(hwndRichEdit, urls[i].is_url, urls[i].text); - } - DestroyWindow(hwndRichEdit); - - /* Test detection of URLs within normal text - WM_SETTEXT case. */ - for (i = 0; i < sizeof(urls)/sizeof(struct urls_s); i++) { - hwndRichEdit = new_richedit(parent); - - for (j = 0; j < sizeof(templates_delim) / sizeof(const char *); j++) { - char * at_pos; - int at_offset; - int end_offset; - - at_pos = strchr(templates_delim[j], 'X'); - at_offset = at_pos - templates_delim[j]; - strncpy(buffer, templates_delim[j], at_offset); - buffer[at_offset] = '\0'; - strcat(buffer, urls[i].text); - strcat(buffer, templates_delim[j] + at_offset + 1); - end_offset = at_offset + strlen(urls[i].text); - - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - } - - for (j = 0; j < sizeof(templates_non_delim) / sizeof(const char *); j++) { - char * at_pos; - int at_offset; - int end_offset; - - at_pos = strchr(templates_non_delim[j], 'X'); - at_offset = at_pos - templates_non_delim[j]; - strncpy(buffer, templates_non_delim[j], at_offset); - buffer[at_offset] = '\0'; - strcat(buffer, urls[i].text); - strcat(buffer, templates_non_delim[j] + at_offset + 1); - end_offset = at_offset + strlen(urls[i].text); - - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - } - - for (j = 0; j < sizeof(templates_xten_delim) / sizeof(const char *); j++) { - char * at_pos; - int at_offset; - int end_offset; - - at_pos = strchr(templates_xten_delim[j], 'X'); - at_offset = at_pos - templates_xten_delim[j]; - strncpy(buffer, templates_xten_delim[j], at_offset); - buffer[at_offset] = '\0'; - strcat(buffer, urls[i].text); - strcat(buffer, templates_xten_delim[j] + at_offset + 1); - end_offset = at_offset + strlen(urls[i].text); - - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset, end_offset +1, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset +1, buffer); - } - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset + 2, buffer); - if (buffer[end_offset +2] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +2, end_offset +3), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +2, end_offset +3, buffer); - } - } - } - - DestroyWindow(hwndRichEdit); - hwndRichEdit = NULL; - } - - /* Test detection of URLs within normal text - WM_CHAR case. */ - /* Test only the first two URL examples for brevity */ - for (i = 0; i < 2; i++) { - hwndRichEdit = new_richedit(parent); - - /* Also for brevity, test only the first three delimiters */ - for (j = 0; j < 3; j++) { - char * at_pos; - int at_offset; - int end_offset; - int u, v; - - at_pos = strchr(templates_delim[j], 'X'); - at_offset = at_pos - templates_delim[j]; - end_offset = at_offset + strlen(urls[i].text); - - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - for (u = 0; templates_delim[j][u]; u++) { - if (templates_delim[j][u] == '\r') { - simulate_typing_characters(hwndRichEdit, "\r"); - } else if (templates_delim[j][u] != 'X') { - SendMessage(hwndRichEdit, WM_CHAR, templates_delim[j][u], 1); - } else { - for (v = 0; urls[i].text[v]; v++) { - SendMessage(hwndRichEdit, WM_CHAR, urls[i].text[v], 1); - } - } - } - SendMessage(hwndRichEdit, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - - /* The following will insert a paragraph break after the first character - of the URL candidate, thus breaking the URL. It is expected that the - CFE_LINK attribute should break across both pieces of the URL */ - SendMessage(hwndRichEdit, EM_SETSEL, at_offset+1, at_offset+1); - simulate_typing_characters(hwndRichEdit, "\r"); - SendMessage(hwndRichEdit, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - /* end_offset moved because of paragraph break */ - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset+1, buffer); - ok(buffer[end_offset], "buffer \"%s\" ended prematurely. Is it missing a newline character?\n", buffer); - if (buffer[end_offset] != 0 && buffer[end_offset+1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset+1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset+1, end_offset +2, buffer); - if (buffer[end_offset +2] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +2, end_offset +3), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +2, end_offset +3, buffer); - } - } - - /* The following will remove the just-inserted paragraph break, thus - restoring the URL */ - SendMessage(hwndRichEdit, EM_SETSEL, at_offset+2, at_offset+2); - simulate_typing_characters(hwndRichEdit, "\b"); - SendMessage(hwndRichEdit, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - } - DestroyWindow(hwndRichEdit); - hwndRichEdit = NULL; - } - - /* Test detection of URLs within normal text - EM_SETTEXTEX case. */ - /* Test just the first two URL examples for brevity */ - for (i = 0; i < 2; i++) { - SETTEXTEX st; - - hwndRichEdit = new_richedit(parent); - - /* There are at least three ways in which EM_SETTEXTEX must cause URLs to - be detected: - 1) Set entire text, a la WM_SETTEXT - 2) Set a selection of the text to the URL - 3) Set a portion of the text at a time, which eventually results in - an URL - All of them should give equivalent results - */ - - /* Set entire text in one go, like WM_SETTEXT */ - for (j = 0; j < sizeof(templates_delim) / sizeof(const char *); j++) { - char * at_pos; - int at_offset; - int end_offset; - - st.codepage = CP_ACP; - st.flags = ST_DEFAULT; - - at_pos = strchr(templates_delim[j], 'X'); - at_offset = at_pos - templates_delim[j]; - strncpy(buffer, templates_delim[j], at_offset); - buffer[at_offset] = '\0'; - strcat(buffer, urls[i].text); - strcat(buffer, templates_delim[j] + at_offset + 1); - end_offset = at_offset + strlen(urls[i].text); - - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&st, (LPARAM) buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - } - - /* Set selection with X to the URL */ - for (j = 0; j < sizeof(templates_delim) / sizeof(const char *); j++) { - char * at_pos; - int at_offset; - int end_offset; - - at_pos = strchr(templates_delim[j], 'X'); - at_offset = at_pos - templates_delim[j]; - end_offset = at_offset + strlen(urls[i].text); - - st.codepage = CP_ACP; - st.flags = ST_DEFAULT; - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&st, (LPARAM) templates_delim[j]); - st.flags = ST_SELECTION; - SendMessage(hwndRichEdit, EM_SETSEL, at_offset, at_offset+1); - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&st, (LPARAM) urls[i].text); - SendMessage(hwndRichEdit, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - } - - /* Set selection with X to the first character of the URL, then the rest */ - for (j = 0; j < sizeof(templates_delim) / sizeof(const char *); j++) { - char * at_pos; - int at_offset; - int end_offset; - - at_pos = strchr(templates_delim[j], 'X'); - at_offset = at_pos - templates_delim[j]; - end_offset = at_offset + strlen(urls[i].text); - - strcpy(buffer, "YY"); - buffer[0] = urls[i].text[0]; - - st.codepage = CP_ACP; - st.flags = ST_DEFAULT; - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&st, (LPARAM) templates_delim[j]); - st.flags = ST_SELECTION; - SendMessage(hwndRichEdit, EM_SETSEL, at_offset, at_offset+1); - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&st, (LPARAM) buffer); - SendMessage(hwndRichEdit, EM_SETSEL, at_offset+1, at_offset+2); - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&st, (LPARAM)(urls[i].text + 1)); - SendMessage(hwndRichEdit, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - } - - DestroyWindow(hwndRichEdit); - hwndRichEdit = NULL; - } - - /* Test detection of URLs within normal text - EM_REPLACESEL case. */ - /* Test just the first two URL examples for brevity */ - for (i = 0; i < 2; i++) { - hwndRichEdit = new_richedit(parent); - - /* Set selection with X to the URL */ - for (j = 0; j < sizeof(templates_delim) / sizeof(const char *); j++) { - char * at_pos; - int at_offset; - int end_offset; - - at_pos = strchr(templates_delim[j], 'X'); - at_offset = at_pos - templates_delim[j]; - end_offset = at_offset + strlen(urls[i].text); - - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) templates_delim[j]); - SendMessage(hwndRichEdit, EM_SETSEL, at_offset, at_offset+1); - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) urls[i].text); - SendMessage(hwndRichEdit, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - } - - /* Set selection with X to the first character of the URL, then the rest */ - for (j = 0; j < sizeof(templates_delim) / sizeof(const char *); j++) { - char * at_pos; - int at_offset; - int end_offset; - - at_pos = strchr(templates_delim[j], 'X'); - at_offset = at_pos - templates_delim[j]; - end_offset = at_offset + strlen(urls[i].text); - - strcpy(buffer, "YY"); - buffer[0] = urls[i].text[0]; - - SendMessage(hwndRichEdit, EM_AUTOURLDETECT, TRUE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) templates_delim[j]); - SendMessage(hwndRichEdit, EM_SETSEL, at_offset, at_offset+1); - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) buffer); - SendMessage(hwndRichEdit, EM_SETSEL, at_offset+1, at_offset+2); - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM)(urls[i].text + 1)); - SendMessage(hwndRichEdit, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - - /* This assumes no templates start with the URL itself, and that they - have at least two characters before the URL text */ - ok(!check_CFE_LINK_selection(hwndRichEdit, 0, 1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", 0, 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -2, at_offset -1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -2, at_offset -1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset -1, at_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset -1, at_offset, buffer); - - if (urls[i].is_url) - { - ok(check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK not set in (%d-%d), text: %s\n", at_offset, at_offset +1, buffer); - ok(check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK not set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - else - { - ok(!check_CFE_LINK_selection(hwndRichEdit, at_offset, at_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", at_offset, at_offset + 1, buffer); - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset -1, end_offset), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset -1, end_offset, buffer); - } - if (buffer[end_offset] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset, end_offset +1), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset, end_offset + 1, buffer); - if (buffer[end_offset +1] != '\0') - { - ok(!check_CFE_LINK_selection(hwndRichEdit, end_offset +1, end_offset +2), - "CFE_LINK incorrectly set in (%d-%d), text: %s\n", end_offset +1, end_offset +2, buffer); - } - } - } - - DestroyWindow(hwndRichEdit); - hwndRichEdit = NULL; - } - - DestroyWindow(parent); -} - -static void test_EM_SCROLL(void) -{ - int i, j; - int r; /* return value */ - int expr; /* expected return value */ - HWND hwndRichEdit = new_richedit(NULL); - int y_before, y_after; /* units of lines of text */ - - /* test a richedit box containing a single line of text */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "a");/* one line of text */ - expr = 0x00010000; - for (i = 0; i < 4; i++) { - static const int cmd[4] = { SB_PAGEDOWN, SB_PAGEUP, SB_LINEDOWN, SB_LINEUP }; - - r = SendMessage(hwndRichEdit, EM_SCROLL, cmd[i], 0); - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - ok(expr == r, "EM_SCROLL improper return value returned (i == %d). " - "Got 0x%08x, expected 0x%08x\n", i, r, expr); - ok(y_after == 0, "EM_SCROLL improper scroll. scrolled to line %d, not 1 " - "(i == %d)\n", y_after, i); - } - - /* - * test a richedit box that will scroll. There are two general - * cases: the case without any long lines and the case with a long - * line. - */ - for (i = 0; i < 2; i++) { /* iterate through different bodies of text */ - if (i == 0) - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "a\nb\nc\nd\ne"); - else - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) - "a LONG LINE LONG LINE LONG LINE LONG LINE LONG LINE " - "LONG LINE LONG LINE LONG LINE LONG LINE LONG LINE " - "LONG LINE \nb\nc\nd\ne"); - for (j = 0; j < 12; j++) /* reset scroll position to top */ - SendMessage(hwndRichEdit, EM_SCROLL, SB_PAGEUP, 0); - - /* get first visible line */ - y_before = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - r = SendMessage(hwndRichEdit, EM_SCROLL, SB_PAGEDOWN, 0); /* page down */ - - /* get new current first visible line */ - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - - ok(((r & 0xffffff00) == 0x00010000) && - ((r & 0x000000ff) != 0x00000000), - "EM_SCROLL page down didn't scroll by a small positive number of " - "lines (r == 0x%08x)\n", r); - ok(y_after > y_before, "EM_SCROLL page down not functioning " - "(line %d scrolled to line %d\n", y_before, y_after); - - y_before = y_after; - - r = SendMessage(hwndRichEdit, EM_SCROLL, SB_PAGEUP, 0); /* page up */ - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - ok(((r & 0xffffff00) == 0x0001ff00), - "EM_SCROLL page up didn't scroll by a small negative number of lines " - "(r == 0x%08x)\n", r); - ok(y_after < y_before, "EM_SCROLL page up not functioning (line " - "%d scrolled to line %d\n", y_before, y_after); - - y_before = y_after; - - r = SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEDOWN, 0); /* line down */ - - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - - ok(r == 0x00010001, "EM_SCROLL line down didn't scroll by one line " - "(r == 0x%08x)\n", r); - ok(y_after -1 == y_before, "EM_SCROLL line down didn't go down by " - "1 line (%d scrolled to %d)\n", y_before, y_after); - - y_before = y_after; - - r = SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEUP, 0); /* line up */ - - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - - ok(r == 0x0001ffff, "EM_SCROLL line up didn't scroll by one line " - "(r == 0x%08x)\n", r); - ok(y_after +1 == y_before, "EM_SCROLL line up didn't go up by 1 " - "line (%d scrolled to %d)\n", y_before, y_after); - - y_before = y_after; - - r = SendMessage(hwndRichEdit, EM_SCROLL, - SB_LINEUP, 0); /* lineup beyond top */ - - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - - ok(r == 0x00010000, - "EM_SCROLL line up returned indicating movement (0x%08x)\n", r); - ok(y_before == y_after, - "EM_SCROLL line up beyond top worked (%d)\n", y_after); - - y_before = y_after; - - r = SendMessage(hwndRichEdit, EM_SCROLL, - SB_PAGEUP, 0);/*page up beyond top */ - - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - - ok(r == 0x00010000, - "EM_SCROLL page up returned indicating movement (0x%08x)\n", r); - ok(y_before == y_after, - "EM_SCROLL page up beyond top worked (%d)\n", y_after); - - for (j = 0; j < 12; j++) /* page down all the way to the bottom */ - SendMessage(hwndRichEdit, EM_SCROLL, SB_PAGEDOWN, 0); - y_before = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - r = SendMessage(hwndRichEdit, EM_SCROLL, - SB_PAGEDOWN, 0); /* page down beyond bot */ - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - - ok(r == 0x00010000, - "EM_SCROLL page down returned indicating movement (0x%08x)\n", r); - ok(y_before == y_after, - "EM_SCROLL page down beyond bottom worked (%d -> %d)\n", - y_before, y_after); - - y_before = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - SendMessage(hwndRichEdit, EM_SCROLL, - SB_LINEDOWN, 0); /* line down beyond bot */ - y_after = SendMessage(hwndRichEdit, EM_GETFIRSTVISIBLELINE, 0, 0); - - ok(r == 0x00010000, - "EM_SCROLL line down returned indicating movement (0x%08x)\n", r); - ok(y_before == y_after, - "EM_SCROLL line down beyond bottom worked (%d -> %d)\n", - y_before, y_after); - } - DestroyWindow(hwndRichEdit); -} - -unsigned int recursionLevel = 0; -unsigned int WM_SIZE_recursionLevel = 0; -BOOL bailedOutOfRecursion = FALSE; -LRESULT WINAPI (*richeditProc)(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); - -static LRESULT WINAPI RicheditStupidOverrideProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - LRESULT r; - - if (bailedOutOfRecursion) return 0; - if (recursionLevel >= 32) { - bailedOutOfRecursion = TRUE; - return 0; - } - - recursionLevel++; - switch (message) { - case WM_SIZE: - WM_SIZE_recursionLevel++; - r = richeditProc(hwnd, message, wParam, lParam); - /* Because, uhhhh... I never heard of ES_DISABLENOSCROLL */ - ShowScrollBar(hwnd, SB_VERT, TRUE); - WM_SIZE_recursionLevel--; - break; - default: - r = richeditProc(hwnd, message, wParam, lParam); - break; - } - recursionLevel--; - return r; -} - -static void test_scrollbar_visibility(void) -{ - HWND hwndRichEdit; - const char * text="a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n"; - SCROLLINFO si; - WNDCLASSA cls; - BOOL r; - - /* These tests show that richedit should temporarily refrain from automatically - hiding or showing its scrollbars (vertical at least) when an explicit request - is made via ShowScrollBar() or similar, outside of standard richedit logic. - Some applications depend on forced showing (when otherwise richedit would - hide the vertical scrollbar) and are thrown on an endless recursive loop - if richedit auto-hides the scrollbar again. Apparently they never heard of - the ES_DISABLENOSCROLL style... */ - - hwndRichEdit = new_richedit(NULL); - - /* Test default scrollbar visibility behavior */ - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - /* Oddly, setting text to NULL does *not* reset the scrollbar range, - even though it hides the scrollbar */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - /* Setting non-scrolling text again does *not* reset scrollbar range */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)""); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - DestroyWindow(hwndRichEdit); - - /* Test again, with ES_DISABLENOSCROLL style */ - hwndRichEdit = new_window(RICHEDIT_CLASS, ES_MULTILINE|ES_DISABLENOSCROLL, NULL); - - /* Test default scrollbar visibility behavior */ - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 1, - "reported page/range is %d (%d..%d) expected 0 (0..1)\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 1, - "reported page/range is %d (%d..%d) expected 0 (0..1)\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - /* Oddly, setting text to NULL does *not* reset the scrollbar range */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - /* Setting non-scrolling text again does *not* reset scrollbar range */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)""); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - DestroyWindow(hwndRichEdit); - - /* Test behavior with explicit visibility request, using ShowScrollBar() */ - hwndRichEdit = new_richedit(NULL); - - /* Previously failed because builtin incorrectly re-hides scrollbar forced visible */ - ShowScrollBar(hwndRichEdit, SB_VERT, TRUE); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - todo_wine { - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100, - "reported page/range is %d (%d..%d) expected 0 (0..100)\n", - si.nPage, si.nMin, si.nMax); - } - - /* Ditto, see above */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - todo_wine { - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100, - "reported page/range is %d (%d..%d) expected 0 (0..100)\n", - si.nPage, si.nMin, si.nMax); - } - - /* Ditto, see above */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - todo_wine { - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100, - "reported page/range is %d (%d..%d) expected 0 (0..100)\n", - si.nPage, si.nMin, si.nMax); - } - - /* Ditto, see above */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a\na"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - todo_wine { - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100, - "reported page/range is %d (%d..%d) expected 0 (0..100)\n", - si.nPage, si.nMin, si.nMax); - } - - /* Ditto, see above */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - todo_wine { - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100, - "reported page/range is %d (%d..%d) expected 0 (0..100)\n", - si.nPage, si.nMin, si.nMax); - } - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - DestroyWindow(hwndRichEdit); - - hwndRichEdit = new_richedit(NULL); - - ShowScrollBar(hwndRichEdit, SB_VERT, FALSE); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - /* Previously, builtin incorrectly re-shows explicitly hidden scrollbar */ - ShowScrollBar(hwndRichEdit, SB_VERT, FALSE); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - /* Testing effect of EM_SCROLL on scrollbar visibility. It seems that - EM_SCROLL will make visible any forcefully invisible scrollbar */ - SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEDOWN, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - ShowScrollBar(hwndRichEdit, SB_VERT, FALSE); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - /* Again, EM_SCROLL, with SB_LINEUP */ - SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEUP, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - DestroyWindow(hwndRichEdit); - - - /* Test behavior with explicit visibility request, using SetWindowLong()() */ - hwndRichEdit = new_richedit(NULL); - -#define ENABLE_WS_VSCROLL(hwnd) \ - SetWindowLongA(hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) | WS_VSCROLL) -#define DISABLE_WS_VSCROLL(hwnd) \ - SetWindowLongA(hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) & ~WS_VSCROLL) - - /* Previously failed because builtin incorrectly re-hides scrollbar forced visible */ - ENABLE_WS_VSCROLL(hwndRichEdit); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - /* Ditto, see above */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - /* Ditto, see above */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - /* Ditto, see above */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a\na"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - /* Ditto, see above */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - DestroyWindow(hwndRichEdit); - - hwndRichEdit = new_richedit(NULL); - - DISABLE_WS_VSCROLL(hwndRichEdit); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a"); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0, - "reported page/range is %d (%d..%d) expected all 0\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - /* Previously, builtin incorrectly re-shows explicitly hidden scrollbar */ - DISABLE_WS_VSCROLL(hwndRichEdit); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n", - si.nPage, si.nMin, si.nMax); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - DISABLE_WS_VSCROLL(hwndRichEdit); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - /* Testing effect of EM_SCROLL on scrollbar visibility. It seems that - EM_SCROLL will make visible any forcefully invisible scrollbar */ - SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEDOWN, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - DISABLE_WS_VSCROLL(hwndRichEdit); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0), - "Vertical scrollbar is visible, should be invisible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - /* Again, EM_SCROLL, with SB_LINEUP */ - SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEUP, 0); - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(hwndRichEdit, SB_VERT, &si); - ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0), - "Vertical scrollbar is invisible, should be visible.\n"); - ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0, - "reported page/range is %d (%d..%d)\n", - si.nPage, si.nMin, si.nMax); - - DestroyWindow(hwndRichEdit); - - /* This window proc models what is going on with Corman Lisp 3.0. - At WM_SIZE, this proc unconditionally calls ShowScrollBar() to - force the scrollbar into visibility. Recursion should NOT happen - as a result of this action. - */ - r = GetClassInfoA(NULL, RICHEDIT_CLASS, &cls); - if (r) { - richeditProc = cls.lpfnWndProc; - cls.lpfnWndProc = RicheditStupidOverrideProcA; - cls.lpszClassName = "RicheditStupidOverride"; - if(!RegisterClassA(&cls)) assert(0); - - recursionLevel = 0; - WM_SIZE_recursionLevel = 0; - bailedOutOfRecursion = FALSE; - hwndRichEdit = new_window(cls.lpszClassName, ES_MULTILINE, NULL); - ok(!bailedOutOfRecursion, - "WM_SIZE/scrollbar mutual recursion detected, expected none!\n"); - - recursionLevel = 0; - WM_SIZE_recursionLevel = 0; - bailedOutOfRecursion = FALSE; - MoveWindow(hwndRichEdit, 0, 0, 250, 100, TRUE); - ok(!bailedOutOfRecursion, - "WM_SIZE/scrollbar mutual recursion detected, expected none!\n"); - - /* Unblock window in order to process WM_DESTROY */ - recursionLevel = 0; - bailedOutOfRecursion = FALSE; - WM_SIZE_recursionLevel = 0; - DestroyWindow(hwndRichEdit); - } -} - -static void test_EM_SETUNDOLIMIT(void) -{ - /* cases we test for: - * default behaviour - limiting at 100 undo's - * undo disabled - setting a limit of 0 - * undo limited - undo limit set to some to some number, like 2 - * bad input - sending a negative number should default to 100 undo's */ - - HWND hwndRichEdit = new_richedit(NULL); - CHARRANGE cr; - int i; - int result; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "x"); - cr.cpMin = 0; - cr.cpMax = 1; - SendMessage(hwndRichEdit, WM_COPY, 0, 0); - /*Load "x" into the clipboard. Paste is an easy, undo'able operation. - also, multiple pastes don't combine like WM_CHAR would */ - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - - /* first case - check the default */ - SendMessage(hwndRichEdit,EM_EMPTYUNDOBUFFER, 0,0); - for (i=0; i<101; i++) /* Put 101 undo's on the stack */ - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - for (i=0; i<100; i++) /* Undo 100 of them */ - SendMessage(hwndRichEdit, WM_UNDO, 0, 0); - ok(!SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0), - "EM_SETUNDOLIMIT allowed more than a hundred undo's by default.\n"); - - /* second case - cannot undo */ - SendMessage(hwndRichEdit,EM_EMPTYUNDOBUFFER, 0, 0); - SendMessage(hwndRichEdit, EM_SETUNDOLIMIT, 0, 0); - SendMessage(hwndRichEdit, - WM_PASTE, 0, 0); /* Try to put something in the undo stack */ - ok(!SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0), - "EM_SETUNDOLIMIT allowed undo with UNDOLIMIT set to 0\n"); - - /* third case - set it to an arbitrary number */ - SendMessage(hwndRichEdit,EM_EMPTYUNDOBUFFER, 0, 0); - SendMessage(hwndRichEdit, EM_SETUNDOLIMIT, 2, 0); - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - /* If SETUNDOLIMIT is working, there should only be two undo's after this */ - ok(SendMessage(hwndRichEdit, EM_CANUNDO, 0,0), - "EM_SETUNDOLIMIT didn't allow the first undo with UNDOLIMIT set to 2\n"); - SendMessage(hwndRichEdit, WM_UNDO, 0, 0); - ok(SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0), - "EM_SETUNDOLIMIT didn't allow a second undo with UNDOLIMIT set to 2\n"); - SendMessage(hwndRichEdit, WM_UNDO, 0, 0); - ok(!SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0), - "EM_SETUNDOLIMIT allowed a third undo with UNDOLIMIT set to 2\n"); - - /* fourth case - setting negative numbers should default to 100 undos */ - SendMessage(hwndRichEdit,EM_EMPTYUNDOBUFFER, 0,0); - result = SendMessage(hwndRichEdit, EM_SETUNDOLIMIT, -1, 0); - ok (result == 100, - "EM_SETUNDOLIMIT returned %d when set to -1, instead of 100\n",result); - - DestroyWindow(hwndRichEdit); -} - -static void test_ES_PASSWORD(void) -{ - /* This isn't hugely testable, so we're just going to run it through its paces */ - - HWND hwndRichEdit = new_richedit(NULL); - WCHAR result; - - /* First, check the default of a regular control */ - result = SendMessage(hwndRichEdit, EM_GETPASSWORDCHAR, 0, 0); - ok (result == 0, - "EM_GETPASSWORDCHAR returned %c by default, instead of NULL\n",result); - - /* Now, set it to something normal */ - SendMessage(hwndRichEdit, EM_SETPASSWORDCHAR, 'x', 0); - result = SendMessage(hwndRichEdit, EM_GETPASSWORDCHAR, 0, 0); - ok (result == 120, - "EM_GETPASSWORDCHAR returned %c (%d) when set to 'x', instead of x (120)\n",result,result); - - /* Now, set it to something odd */ - SendMessage(hwndRichEdit, EM_SETPASSWORDCHAR, (WCHAR)1234, 0); - result = SendMessage(hwndRichEdit, EM_GETPASSWORDCHAR, 0, 0); - ok (result == 1234, - "EM_GETPASSWORDCHAR returned %c (%d) when set to 'x', instead of x (120)\n",result,result); - DestroyWindow(hwndRichEdit); -} - -static DWORD CALLBACK test_WM_SETTEXT_esCallback(DWORD_PTR dwCookie, - LPBYTE pbBuff, - LONG cb, - LONG *pcb) -{ - char** str = (char**)dwCookie; - *pcb = cb; - if (*pcb > 0) { - memcpy(*str, pbBuff, *pcb); - *str += *pcb; - } - return 0; -} - -static void test_WM_SETTEXT() -{ - HWND hwndRichEdit = new_richedit(NULL); - const char * TestItem1 = "TestSomeText"; - const char * TestItem2 = "TestSomeText\r"; - const char * TestItem2_after = "TestSomeText\r\n"; - const char * TestItem3 = "TestSomeText\rSomeMoreText\r"; - const char * TestItem3_after = "TestSomeText\r\nSomeMoreText\r\n"; - const char * TestItem4 = "TestSomeText\n\nTestSomeText"; - const char * TestItem4_after = "TestSomeText\r\n\r\nTestSomeText"; - const char * TestItem5 = "TestSomeText\r\r\nTestSomeText"; - const char * TestItem5_after = "TestSomeText TestSomeText"; - const char * TestItem6 = "TestSomeText\r\r\n\rTestSomeText"; - const char * TestItem6_after = "TestSomeText \r\nTestSomeText"; - const char * TestItem7 = "TestSomeText\r\n\r\r\n\rTestSomeText"; - const char * TestItem7_after = "TestSomeText\r\n \r\nTestSomeText"; - - char buf[1024] = {0}; - LRESULT result; - EDITSTREAM es; - char * p; - - /* This test attempts to show that WM_SETTEXT on a riched20 control causes - any solitary \r to be converted to \r\n on return. Properly paired - \r\n are not affected. It also shows that the special sequence \r\r\n - gets converted to a single space. - */ - -#define TEST_SETTEXT(a, b) \ - result = SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) a); \ - ok (result == 1, "WM_SETTEXT returned %ld instead of 1\n", result); \ - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buf); \ - ok (result == lstrlen(buf), \ - "WM_GETTEXT returned %ld instead of expected %u\n", \ - result, lstrlen(buf)); \ - result = strcmp(b, buf); \ - ok(result == 0, \ - "WM_SETTEXT round trip: strcmp = %ld\n", result); - - TEST_SETTEXT(TestItem1, TestItem1) - TEST_SETTEXT(TestItem2, TestItem2_after) - TEST_SETTEXT(TestItem3, TestItem3_after) - TEST_SETTEXT(TestItem3_after, TestItem3_after) - TEST_SETTEXT(TestItem4, TestItem4_after) - TEST_SETTEXT(TestItem5, TestItem5_after) - TEST_SETTEXT(TestItem6, TestItem6_after) - TEST_SETTEXT(TestItem7, TestItem7_after) - - /* The following test demonstrates that WM_SETTEXT supports RTF strings */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) TestItem1); - p = buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_RTF), (LPARAM)&es); - trace("EM_STREAMOUT produced: \n%s\n", buf); - TEST_SETTEXT(buf, TestItem1) - -#undef TEST_SETTEXT - DestroyWindow(hwndRichEdit); -} - -static void test_EM_STREAMOUT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - int r; - EDITSTREAM es; - char buf[1024] = {0}; - char * p; - - const char * TestItem1 = "TestSomeText"; - const char * TestItem2 = "TestSomeText\r"; - const char * TestItem3 = "TestSomeText\r\n"; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) TestItem1); - p = buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_TEXT), (LPARAM)&es); - r = strlen(buf); - ok(r == 12, "streamed text length is %d, expecting 12\n", r); - ok(strcmp(buf, TestItem1) == 0, - "streamed text different, got %s\n", buf); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) TestItem2); - p = buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_TEXT), (LPARAM)&es); - r = strlen(buf); - /* Here again, \r gets converted to \r\n, like WM_GETTEXT */ - ok(r == 14, "streamed text length is %d, expecting 14\n", r); - ok(strcmp(buf, TestItem3) == 0, - "streamed text different from, got %s\n", buf); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) TestItem3); - p = buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_TEXT), (LPARAM)&es); - r = strlen(buf); - ok(r == 14, "streamed text length is %d, expecting 14\n", r); - ok(strcmp(buf, TestItem3) == 0, - "streamed text different, got %s\n", buf); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_SETTEXTEX(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - SETTEXTEX setText; - GETTEXTEX getText; - WCHAR TestItem1[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'T', 'e', 'x', 't', 0}; - WCHAR TestItem1alt[] = {'T', 'T', 'e', 's', - 't', 'S', 'o', 'm', - 'e', 'T', 'e', 'x', - 't', 't', 'S', 'o', - 'm', 'e', 'T', 'e', - 'x', 't', 0}; - WCHAR TestItem2[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'T', 'e', 'x', 't', - '\r', 0}; - const char * TestItem2_after = "TestSomeText\r\n"; - WCHAR TestItem3[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'T', 'e', 'x', 't', - '\r','\n','\r','\n', 0}; - WCHAR TestItem3alt[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'T', 'e', 'x', 't', - '\n','\n', 0}; - WCHAR TestItem3_after[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'T', 'e', 'x', 't', - '\r','\r', 0}; - WCHAR TestItem4[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'T', 'e', 'x', 't', - '\r','\r','\n','\r', - '\n', 0}; - WCHAR TestItem4_after[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'T', 'e', 'x', 't', - ' ','\r', 0}; -#define MAX_BUF_LEN 1024 - WCHAR buf[MAX_BUF_LEN]; - char bufACP[MAX_BUF_LEN]; - char * p; - int result; - CHARRANGE cr; - EDITSTREAM es; - - setText.codepage = 1200; /* no constant for unicode */ - getText.codepage = 1200; /* no constant for unicode */ - getText.cb = MAX_BUF_LEN; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem1); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem1) == 0, - "EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n"); - - /* Unlike WM_SETTEXT/WM_GETTEXT pair, EM_SETTEXTEX/EM_GETTEXTEX does not - convert \r to \r\n on return: !ST_SELECTION && Unicode && !\rtf - */ - setText.codepage = 1200; /* no constant for unicode */ - getText.codepage = 1200; /* no constant for unicode */ - getText.cb = MAX_BUF_LEN; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem2); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem2) == 0, - "EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n"); - - /* However, WM_GETTEXT *does* see \r\n where EM_GETTEXTEX would see \r */ - SendMessage(hwndRichEdit, WM_GETTEXT, MAX_BUF_LEN, (LPARAM)buf); - ok(strcmp((const char *)buf, TestItem2_after) == 0, - "WM_GETTEXT did *not* see \\r converted to \\r\\n pairs.\n"); - - /* Baseline test for just-enough buffer space for string */ - getText.cb = (lstrlenW(TestItem2) + 1) * sizeof(WCHAR); - getText.codepage = 1200; /* no constant for unicode */ - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - memset(buf, 0, MAX_BUF_LEN); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem2) == 0, - "EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n"); - - /* When there is enough space for one character, but not both, of the CRLF - pair at the end of the string, the CR is not copied at all. That is, - the caller must not see CRLF pairs truncated to CR at the end of the - string. - */ - getText.cb = (lstrlenW(TestItem2) + 1) * sizeof(WCHAR); - getText.codepage = 1200; /* no constant for unicode */ - getText.flags = GT_USECRLF; /* <-- asking for CR -> CRLF conversion */ - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - memset(buf, 0, MAX_BUF_LEN); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem1) == 0, - "EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n"); - - - /* \r\n pairs get changed into \r: !ST_SELECTION && Unicode && !\rtf */ - setText.codepage = 1200; /* no constant for unicode */ - getText.codepage = 1200; /* no constant for unicode */ - getText.cb = MAX_BUF_LEN; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem3); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem3_after) == 0, - "EM_SETTEXTEX did not convert properly\n"); - - /* \n also gets changed to \r: !ST_SELECTION && Unicode && !\rtf */ - setText.codepage = 1200; /* no constant for unicode */ - getText.codepage = 1200; /* no constant for unicode */ - getText.cb = MAX_BUF_LEN; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem3alt); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem3_after) == 0, - "EM_SETTEXTEX did not convert properly\n"); - - /* \r\r\n gets changed into single space: !ST_SELECTION && Unicode && !\rtf */ - setText.codepage = 1200; /* no constant for unicode */ - getText.codepage = 1200; /* no constant for unicode */ - getText.cb = MAX_BUF_LEN; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem4); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem4_after) == 0, - "EM_SETTEXTEX did not convert properly\n"); - - /* !ST_SELECTION && Unicode && !\rtf */ - result = SendMessage(hwndRichEdit, EM_SETTEXTEX, - (WPARAM)&setText, (LPARAM) NULL); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - - ok (result == 1, - "EM_SETTEXTEX returned %d, instead of 1\n",result); - ok(lstrlenW(buf) == 0, - "EM_SETTEXTEX with NULL lParam should clear rich edit.\n"); - - /* put some text back: !ST_SELECTION && Unicode && !\rtf */ - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem1); - /* select some text */ - cr.cpMax = 1; - cr.cpMin = 3; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - /* replace current selection: ST_SELECTION && Unicode && !\rtf */ - setText.flags = ST_SELECTION; - result = SendMessage(hwndRichEdit, EM_SETTEXTEX, - (WPARAM)&setText, (LPARAM) NULL); - ok(result == 0, - "EM_SETTEXTEX with NULL lParam to replace selection" - " with no text should return 0. Got %i\n", - result); - - /* put some text back: !ST_SELECTION && Unicode && !\rtf */ - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem1); - /* select some text */ - cr.cpMax = 1; - cr.cpMin = 3; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - /* replace current selection: ST_SELECTION && Unicode && !\rtf */ - setText.flags = ST_SELECTION; - result = SendMessage(hwndRichEdit, EM_SETTEXTEX, - (WPARAM)&setText, (LPARAM) TestItem1); - /* get text */ - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(result == lstrlenW(TestItem1), - "EM_SETTEXTEX with NULL lParam to replace selection" - " with no text should return 0. Got %i\n", - result); - ok(lstrlenW(buf) == 22, - "EM_SETTEXTEX to replace selection with more text failed: %i.\n", - lstrlenW(buf) ); - - /* The following test demonstrates that EM_SETTEXTEX supports RTF strings */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "TestSomeText"); /* TestItem1 */ - p = (char *)buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_RTF), (LPARAM)&es); - trace("EM_STREAMOUT produced: \n%s\n", (char *)buf); - - /* !ST_SELECTION && !Unicode && \rtf */ - setText.codepage = CP_ACP;/* EM_STREAMOUT saved as ANSI string */ - getText.codepage = 1200; /* no constant for unicode */ - getText.cb = MAX_BUF_LEN; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) buf); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem1) == 0, - "EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n"); - - /* The following test demonstrates that EM_SETTEXTEX supports RTF strings with a selection */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "TestSomeText"); /* TestItem1 */ - p = (char *)buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_RTF), (LPARAM)&es); - trace("EM_STREAMOUT produced: \n%s\n", (char *)buf); - - /* select some text */ - cr.cpMax = 1; - cr.cpMin = 3; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - - /* ST_SELECTION && !Unicode && \rtf */ - setText.codepage = CP_ACP;/* EM_STREAMOUT saved as ANSI string */ - getText.codepage = 1200; /* no constant for unicode */ - getText.cb = MAX_BUF_LEN; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - - setText.flags = ST_SELECTION; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) buf); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem1alt) == 0, - "EM_GETTEXTEX results not what was set by EM_SETTEXTEX when" - " using ST_SELECTION on an RTF string and non-Unicode\n"); - - /* The following test demonstrates that EM_SETTEXTEX replacing a selection */ - setText.codepage = 1200; /* no constant for unicode */ - getText.codepage = CP_ACP; - getText.cb = MAX_BUF_LEN; - - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem1); /* TestItem1 */ - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) bufACP); - - /* select some text */ - cr.cpMax = 1; - cr.cpMin = 3; - SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr); - - /* ST_SELECTION && !Unicode && !\rtf */ - setText.codepage = CP_ACP; - getText.codepage = 1200; /* no constant for unicode */ - getText.cb = MAX_BUF_LEN; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - - setText.flags = ST_SELECTION; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) bufACP); - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf); - ok(lstrcmpW(buf, TestItem1alt) == 0, - "EM_GETTEXTEX results not what was set by EM_SETTEXTEX when" - " using ST_SELECTION and non-Unicode\n"); - - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_LIMITTEXT(void) -{ - int ret; - - HWND hwndRichEdit = new_richedit(NULL); - - /* The main purpose of this test is to demonstrate that the nonsense in MSDN - * about setting the length to -1 for multiline edit controls doesn't happen. - */ - - /* Don't check default gettextlimit case. That's done in other tests */ - - /* Set textlimit to 100 */ - SendMessage (hwndRichEdit, EM_LIMITTEXT, 100, 0); - ret = SendMessage (hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok (ret == 100, - "EM_LIMITTEXT: set to 100, returned: %d, expected: 100\n", ret); - - /* Set textlimit to 0 */ - SendMessage (hwndRichEdit, EM_LIMITTEXT, 0, 0); - ret = SendMessage (hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok (ret == 65536, - "EM_LIMITTEXT: set to 0, returned: %d, expected: 65536\n", ret); - - /* Set textlimit to -1 */ - SendMessage (hwndRichEdit, EM_LIMITTEXT, -1, 0); - ret = SendMessage (hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok (ret == -1, - "EM_LIMITTEXT: set to -1, returned: %d, expected: -1\n", ret); - - /* Set textlimit to -2 */ - SendMessage (hwndRichEdit, EM_LIMITTEXT, -2, 0); - ret = SendMessage (hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok (ret == -2, - "EM_LIMITTEXT: set to -2, returned: %d, expected: -2\n", ret); - - DestroyWindow (hwndRichEdit); -} - - -static void test_EM_EXLIMITTEXT(void) -{ - int i, selBegin, selEnd, len1, len2; - int result; - char text[1024 + 1]; - char buffer[1024 + 1]; - int textlimit = 0; /* multiple of 100 */ - HWND hwndRichEdit = new_richedit(NULL); - - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok(32767 == i, "EM_EXLIMITTEXT: expected: %d, actual: %d\n", 32767, i); /* default */ - - textlimit = 256000; - SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, textlimit); - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - /* set higher */ - ok(textlimit == i, "EM_EXLIMITTEXT: expected: %d, actual: %d\n", textlimit, i); - - textlimit = 1000; - SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, textlimit); - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - /* set lower */ - ok(textlimit == i, "EM_EXLIMITTEXT: expected: %d, actual: %d\n", textlimit, i); - - SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, 0); - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - /* default for WParam = 0 */ - ok(65536 == i, "EM_EXLIMITTEXT: expected: %d, actual: %d\n", 65536, i); - - textlimit = sizeof(text)-1; - memset(text, 'W', textlimit); - text[sizeof(text)-1] = 0; - SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, textlimit); - /* maxed out text */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - - SendMessage(hwndRichEdit, EM_SETSEL, 0, -1); /* select everything */ - SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&selBegin, (LPARAM)&selEnd); - len1 = selEnd - selBegin; - - SendMessage(hwndRichEdit, WM_KEYDOWN, VK_BACK, 1); - SendMessage(hwndRichEdit, WM_CHAR, VK_BACK, 1); - SendMessage(hwndRichEdit, WM_KEYUP, VK_BACK, 1); - SendMessage(hwndRichEdit, EM_SETSEL, 0, -1); - SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&selBegin, (LPARAM)&selEnd); - len2 = selEnd - selBegin; - - ok(len1 != len2, - "EM_EXLIMITTEXT: Change Expected\nOld Length: %d, New Length: %d, Limit: %d\n", - len1,len2,i); - - SendMessage(hwndRichEdit, WM_KEYDOWN, 'A', 1); - SendMessage(hwndRichEdit, WM_CHAR, 'A', 1); - SendMessage(hwndRichEdit, WM_KEYUP, 'A', 1); - SendMessage(hwndRichEdit, EM_SETSEL, 0, -1); - SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&selBegin, (LPARAM)&selEnd); - len1 = selEnd - selBegin; - - ok(len1 != len2, - "EM_EXLIMITTEXT: Change Expected\nOld Length: %d, New Length: %d, Limit: %d\n", - len1,len2,i); - - SendMessage(hwndRichEdit, WM_KEYDOWN, 'A', 1); - SendMessage(hwndRichEdit, WM_CHAR, 'A', 1); - SendMessage(hwndRichEdit, WM_KEYUP, 'A', 1); /* full; should be no effect */ - SendMessage(hwndRichEdit, EM_SETSEL, 0, -1); - SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&selBegin, (LPARAM)&selEnd); - len2 = selEnd - selBegin; - - ok(len1 == len2, - "EM_EXLIMITTEXT: No Change Expected\nOld Length: %d, New Length: %d, Limit: %d\n", - len1,len2,i); - - /* set text up to the limit, select all the text, then add a char */ - textlimit = 5; - memset(text, 'W', textlimit); - text[textlimit] = 0; - SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, textlimit); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - SendMessage(hwndRichEdit, EM_SETSEL, 0, -1); - SendMessage(hwndRichEdit, WM_CHAR, 'A', 1); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - result = strcmp(buffer, "A"); - ok(0 == result, "got string = \"%s\"\n", buffer); - - /* WM_SETTEXT not limited */ - textlimit = 10; - memset(text, 'W', textlimit); - text[textlimit] = 0; - SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, textlimit-5); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - i = strlen(buffer); - ok(10 == i, "expected 10 chars\n"); - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok(10 == i, "EM_EXLIMITTEXT: expected: %d, actual: %d\n", 10, i); - - /* try inserting more text at end */ - i = SendMessage(hwndRichEdit, WM_CHAR, 'A', 0); - ok(0 == i, "WM_CHAR wasn't processed\n"); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - i = strlen(buffer); - ok(10 == i, "expected 10 chars, got %i\n", i); - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok(10 == i, "EM_EXLIMITTEXT: expected: %d, actual: %d\n", 10, i); - - /* try inserting text at beginning */ - SendMessage(hwndRichEdit, EM_SETSEL, 0, 0); - i = SendMessage(hwndRichEdit, WM_CHAR, 'A', 0); - ok(0 == i, "WM_CHAR wasn't processed\n"); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - i = strlen(buffer); - ok(10 == i, "expected 10 chars, got %i\n", i); - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok(10 == i, "EM_EXLIMITTEXT: expected: %d, actual: %d\n", 10, i); - - /* WM_CHAR is limited */ - textlimit = 1; - SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, textlimit); - SendMessage(hwndRichEdit, EM_SETSEL, 0, -1); /* select everything */ - i = SendMessage(hwndRichEdit, WM_CHAR, 'A', 0); - ok(0 == i, "WM_CHAR wasn't processed\n"); - i = SendMessage(hwndRichEdit, WM_CHAR, 'A', 0); - ok(0 == i, "WM_CHAR wasn't processed\n"); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - i = strlen(buffer); - ok(1 == i, "expected 1 chars, got %i instead\n", i); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_GETLIMITTEXT(void) -{ - int i; - HWND hwndRichEdit = new_richedit(NULL); - - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok(32767 == i, "expected: %d, actual: %d\n", 32767, i); /* default value */ - - SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, 50000); - i = SendMessage(hwndRichEdit, EM_GETLIMITTEXT, 0, 0); - ok(50000 == i, "expected: %d, actual: %d\n", 50000, i); - - DestroyWindow(hwndRichEdit); -} - -static void test_WM_SETFONT(void) -{ - /* There is no invalid input or error conditions for this function. - * NULL wParam and lParam just fall back to their default values - * It should be noted that even if you use a gibberish name for your fonts - * here, it will still work because the name is stored. They will display as - * System, but will report their name to be whatever they were created as */ - - HWND hwndRichEdit = new_richedit(NULL); - HFONT testFont1 = CreateFontA (0,0,0,0,FW_LIGHT, 0, 0, 0, ANSI_CHARSET, - OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | - FF_DONTCARE, "Marlett"); - HFONT testFont2 = CreateFontA (0,0,0,0,FW_LIGHT, 0, 0, 0, ANSI_CHARSET, - OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | - FF_DONTCARE, "MS Sans Serif"); - HFONT testFont3 = CreateFontA (0,0,0,0,FW_LIGHT, 0, 0, 0, ANSI_CHARSET, - OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | - FF_DONTCARE, "Courier"); - LOGFONTA sentLogFont; - CHARFORMAT2A returnedCF2A; - - returnedCF2A.cbSize = sizeof(returnedCF2A); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "x"); - SendMessage(hwndRichEdit, WM_SETFONT, (WPARAM)testFont1,(LPARAM) MAKELONG((WORD) TRUE, 0)); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM) &returnedCF2A); - - GetObjectA(testFont1, sizeof(LOGFONTA), &sentLogFont); - ok (!strcmp(sentLogFont.lfFaceName,returnedCF2A.szFaceName), - "EM_GETCHARFORMAT: Returned wrong font on test 1. Sent: %s, Returned: %s\n", - sentLogFont.lfFaceName,returnedCF2A.szFaceName); - - SendMessage(hwndRichEdit, WM_SETFONT, (WPARAM)testFont2,(LPARAM) MAKELONG((WORD) TRUE, 0)); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM) &returnedCF2A); - GetObjectA(testFont2, sizeof(LOGFONTA), &sentLogFont); - ok (!strcmp(sentLogFont.lfFaceName,returnedCF2A.szFaceName), - "EM_GETCHARFORMAT: Returned wrong font on test 2. Sent: %s, Returned: %s\n", - sentLogFont.lfFaceName,returnedCF2A.szFaceName); - - SendMessage(hwndRichEdit, WM_SETFONT, (WPARAM)testFont3,(LPARAM) MAKELONG((WORD) TRUE, 0)); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM) &returnedCF2A); - GetObjectA(testFont3, sizeof(LOGFONTA), &sentLogFont); - ok (!strcmp(sentLogFont.lfFaceName,returnedCF2A.szFaceName), - "EM_GETCHARFORMAT: Returned wrong font on test 3. Sent: %s, Returned: %s\n", - sentLogFont.lfFaceName,returnedCF2A.szFaceName); - - /* This last test is special since we send in NULL. We clear the variables - * and just compare to "System" instead of the sent in font name. */ - ZeroMemory(&returnedCF2A,sizeof(returnedCF2A)); - ZeroMemory(&sentLogFont,sizeof(sentLogFont)); - returnedCF2A.cbSize = sizeof(returnedCF2A); - - SendMessage(hwndRichEdit, WM_SETFONT, (WPARAM)NULL,(LPARAM) MAKELONG((WORD) TRUE, 0)); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM) &returnedCF2A); - GetObjectA(NULL, sizeof(LOGFONTA), &sentLogFont); - ok (!strcmp("System",returnedCF2A.szFaceName), - "EM_GETCHARFORMAT: Returned wrong font on test 4. Sent: NULL, Returned: %s. Expected \"System\".\n",returnedCF2A.szFaceName); - - DestroyWindow(hwndRichEdit); -} - - -static DWORD CALLBACK test_EM_GETMODIFY_esCallback(DWORD_PTR dwCookie, - LPBYTE pbBuff, - LONG cb, - LONG *pcb) -{ - const char** str = (const char**)dwCookie; - int size = strlen(*str); - if(size > 3) /* let's make it piecemeal for fun */ - size = 3; - *pcb = cb; - if (*pcb > size) { - *pcb = size; - } - if (*pcb > 0) { - memcpy(pbBuff, *str, *pcb); - *str += *pcb; - } - return 0; -} - -static void test_EM_GETMODIFY(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - LRESULT result; - SETTEXTEX setText; - WCHAR TestItem1[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'T', 'e', 'x', 't', 0}; - WCHAR TestItem2[] = {'T', 'e', 's', 't', - 'S', 'o', 'm', 'e', - 'O', 't', 'h', 'e', 'r', - 'T', 'e', 'x', 't', 0}; - const char* streamText = "hello world"; - CHARFORMAT2 cf2; - PARAFORMAT2 pf2; - EDITSTREAM es; - - HFONT testFont = CreateFontA (0,0,0,0,FW_LIGHT, 0, 0, 0, ANSI_CHARSET, - OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | - FF_DONTCARE, "Courier"); - - setText.codepage = 1200; /* no constant for unicode */ - setText.flags = ST_KEEPUNDO; - - - /* modify flag shouldn't be set when richedit is first created */ - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result == 0, - "EM_GETMODIFY returned non-zero, instead of zero on create\n"); - - /* setting modify flag should actually set it */ - SendMessage(hwndRichEdit, EM_SETMODIFY, TRUE, 0); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero on EM_SETMODIFY\n"); - - /* clearing modify flag should actually clear it */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result == 0, - "EM_GETMODIFY returned non-zero, instead of zero on EM_SETMODIFY\n"); - - /* setting font doesn't change modify flag */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, WM_SETFONT, (WPARAM)testFont,(LPARAM) MAKELONG((WORD) TRUE, 0)); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result == 0, - "EM_GETMODIFY returned non-zero, instead of zero on setting font\n"); - - /* setting text should set modify flag */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM)TestItem1); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero on setting text\n"); - - /* undo previous text doesn't reset modify flag */ - SendMessage(hwndRichEdit, WM_UNDO, 0, 0); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero on undo after setting text\n"); - - /* set text with no flag to keep undo stack should not set modify flag */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - setText.flags = 0; - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM)TestItem1); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result == 0, - "EM_GETMODIFY returned non-zero, instead of zero when setting text while not keeping undo stack\n"); - - /* WM_SETTEXT doesn't modify */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)TestItem2); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result == 0, - "EM_GETMODIFY returned non-zero for WM_SETTEXT\n"); - - /* clear the text */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, WM_CLEAR, 0, 0); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result == 0, - "EM_GETMODIFY returned non-zero, instead of zero for WM_CLEAR\n"); - - /* replace text */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM)TestItem1); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 2); - SendMessage(hwndRichEdit, EM_REPLACESEL, TRUE, (LPARAM)TestItem2); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero when replacing text\n"); - - /* copy/paste text 1 */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 2); - SendMessage(hwndRichEdit, WM_COPY, 0, 0); - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero when pasting identical text\n"); - - /* copy/paste text 2 */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 2); - SendMessage(hwndRichEdit, WM_COPY, 0, 0); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 3); - SendMessage(hwndRichEdit, WM_PASTE, 0, 0); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero when pasting different text\n"); - - /* press char */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 1); - SendMessage(hwndRichEdit, WM_CHAR, 'A', 0); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero for WM_CHAR\n"); - - /* press del */ - SendMessage(hwndRichEdit, WM_CHAR, 'A', 0); - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - SendMessage(hwndRichEdit, WM_KEYDOWN, VK_BACK, 0); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero for backspace\n"); - - /* set char format */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - cf2.dwMask = CFM_ITALIC | cf2.dwMask; - cf2.dwEffects = CFE_ITALIC ^ cf2.dwEffects; - SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, (LPARAM) &cf2); - result = SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, (LPARAM) &cf2); - ok(result == 1, "EM_SETCHARFORMAT returned %ld instead of 1\n", result); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero for EM_SETCHARFORMAT\n"); - - /* set para format */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - pf2.cbSize = sizeof(PARAFORMAT2); - SendMessage(hwndRichEdit, EM_GETPARAFORMAT, 0, - (LPARAM) &pf2); - pf2.dwMask = PFM_ALIGNMENT | pf2.dwMask; - pf2.wAlignment = PFA_RIGHT; - SendMessage(hwndRichEdit, EM_SETPARAFORMAT, 0, (LPARAM) &pf2); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result == 0, - "EM_GETMODIFY returned zero, instead of non-zero for EM_SETPARAFORMAT\n"); - - /* EM_STREAM */ - SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0); - es.dwCookie = (DWORD_PTR)&streamText; - es.dwError = 0; - es.pfnCallback = test_EM_GETMODIFY_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_TEXT), (LPARAM)&es); - result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0); - ok (result != 0, - "EM_GETMODIFY returned zero, instead of non-zero for EM_STREAM\n"); - - DestroyWindow(hwndRichEdit); -} - -struct exsetsel_s { - long min; - long max; - long expected_retval; - int expected_getsel_start; - int expected_getsel_end; - int _exsetsel_todo_wine; - int _getsel_todo_wine; -}; - -const struct exsetsel_s exsetsel_tests[] = { - /* sanity tests */ - {5, 10, 10, 5, 10, 0, 0}, - {15, 17, 17, 15, 17, 0, 0}, - /* test cpMax > strlen() */ - {0, 100, 18, 0, 18, 0, 1}, - /* test cpMin == cpMax */ - {5, 5, 5, 5, 5, 0, 0}, - /* test cpMin < 0 && cpMax >= 0 (bug 4462) */ - {-1, 0, 5, 5, 5, 0, 0}, - {-1, 17, 5, 5, 5, 0, 0}, - {-1, 18, 5, 5, 5, 0, 0}, - /* test cpMin < 0 && cpMax < 0 */ - {-1, -1, 17, 17, 17, 0, 0}, - {-4, -5, 17, 17, 17, 0, 0}, - /* test cMin >=0 && cpMax < 0 (bug 6814) */ - {0, -1, 18, 0, 18, 0, 1}, - {17, -5, 18, 17, 18, 0, 1}, - {18, -3, 17, 17, 17, 0, 0}, - /* test if cpMin > cpMax */ - {15, 19, 18, 15, 18, 0, 1}, - {19, 15, 18, 15, 18, 0, 1} -}; - -static void check_EM_EXSETSEL(HWND hwnd, const struct exsetsel_s *setsel, int id) { - CHARRANGE cr; - long result; - int start, end; - - cr.cpMin = setsel->min; - cr.cpMax = setsel->max; - result = SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM) &cr); - - if (setsel->_exsetsel_todo_wine) { - todo_wine { - ok(result == setsel->expected_retval, "EM_EXSETSEL(%d): expected: %ld actual: %ld\n", id, setsel->expected_retval, result); - } - } else { - ok(result == setsel->expected_retval, "EM_EXSETSEL(%d): expected: %ld actual: %ld\n", id, setsel->expected_retval, result); - } - - SendMessage(hwnd, EM_GETSEL, (WPARAM) &start, (LPARAM) &end); - - if (setsel->_getsel_todo_wine) { - todo_wine { - ok(start == setsel->expected_getsel_start && end == setsel->expected_getsel_end, "EM_EXSETSEL(%d): expected (%d,%d) actual:(%d,%d)\n", id, setsel->expected_getsel_start, setsel->expected_getsel_end, start, end); - } - } else { - ok(start == setsel->expected_getsel_start && end == setsel->expected_getsel_end, "EM_EXSETSEL(%d): expected (%d,%d) actual:(%d,%d)\n", id, setsel->expected_getsel_start, setsel->expected_getsel_end, start, end); - } -} - -static void test_EM_EXSETSEL(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - int i; - const int num_tests = sizeof(exsetsel_tests)/sizeof(struct exsetsel_s); - - /* sending some text to the window */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "testing selection"); - /* 01234567890123456*/ - /* 10 */ - - for (i = 0; i < num_tests; i++) { - check_EM_EXSETSEL(hwndRichEdit, &exsetsel_tests[i], i); - } - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_REPLACESEL(int redraw) -{ - HWND hwndRichEdit = new_richedit(NULL); - char buffer[1024] = {0}; - int r; - GETTEXTEX getText; - CHARRANGE cr; - - /* sending some text to the window */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "testing selection"); - /* 01234567890123456*/ - /* 10 */ - - /* FIXME add more tests */ - SendMessage(hwndRichEdit, EM_SETSEL, 7, 17); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) NULL); - ok(0 == r, "EM_REPLACESEL returned %d, expected 0\n", r); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - r = strcmp(buffer, "testing"); - ok(0 == r, "expected %d, got %d\n", 0, r); - - DestroyWindow(hwndRichEdit); - - hwndRichEdit = new_richedit(NULL); - - trace("Testing EM_REPLACESEL behavior with redraw=%d\n", redraw); - SendMessage(hwndRichEdit, WM_SETREDRAW, redraw, 0); - - /* Test behavior with carriage returns and newlines */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "RichEdit1"); - ok(9 == r, "EM_REPLACESEL returned %d, expected 9\n", r); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - r = strcmp(buffer, "RichEdit1"); - ok(0 == r, "expected %d, got %d\n", 0, r); - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, "RichEdit1") == 0, - "EM_GETTEXTEX results not what was set by EM_REPLACESEL\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 1, "EM_GETLINECOUNT returned %d, expected 1\n", r); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "RichEdit1\r"); - ok(10 == r, "EM_REPLACESEL returned %d, expected 10\n", r); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - r = strcmp(buffer, "RichEdit1\r\n"); - ok(0 == r, "expected %d, got %d\n", 0, r); - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, "RichEdit1\r") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 2, "EM_GETLINECOUNT returned %d, expected 2\n", r); - - /* Win98's riched20 and WinXP's riched20 disagree on what to return from - EM_REPLACESEL. The general rule seems to be that Win98's riched20 - returns the number of characters *inserted* into the control (after - required conversions), but WinXP's riched20 returns the number of - characters interpreted from the original lParam. Wine's builtin riched20 - implements the WinXP behavior. - */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "RichEdit1\r\n"); - ok(11 == r /* WinXP */ || 10 == r /* Win98 */, - "EM_REPLACESEL returned %d, expected 11 or 10\n", r); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 2, "EM_GETLINECOUNT returned %d, expected 2\n", r); - - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 10, "EM_EXGETSEL returned cpMin=%d, expected 10\n", cr.cpMin); - ok(cr.cpMax == 10, "EM_EXGETSEL returned cpMax=%d, expected 10\n", cr.cpMax); - - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - r = strcmp(buffer, "RichEdit1\r\n"); - ok(0 == r, "expected %d, got %d\n", 0, r); - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, "RichEdit1\r") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 10, "EM_EXGETSEL returned cpMin=%d, expected 10\n", cr.cpMin); - ok(cr.cpMax == 10, "EM_EXGETSEL returned cpMax=%d, expected 10\n", cr.cpMax); - - /* The following tests show that richedit should handle the special \r\r\n - sequence by turning it into a single space on insertion. However, - EM_REPLACESEL on WinXP returns the number of characters in the original - string. - */ - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r"); - ok(2 == r, "EM_REPLACESEL returned %d, expected 4\n", r); - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 2, "EM_EXGETSEL returned cpMin=%d, expected 2\n", cr.cpMin); - ok(cr.cpMax == 2, "EM_EXGETSEL returned cpMax=%d, expected 2\n", cr.cpMax); - - /* Test the actual string */ - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, "\r\r") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 3, "EM_GETLINECOUNT returned %d, expected 3\n", r); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r\n"); - ok(3 == r /* WinXP */ || 1 == r /* Win98 */, - "EM_REPLACESEL returned %d, expected 3 or 1\n", r); - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 1, "EM_EXGETSEL returned cpMin=%d, expected 1\n", cr.cpMin); - ok(cr.cpMax == 1, "EM_EXGETSEL returned cpMax=%d, expected 1\n", cr.cpMax); - - /* Test the actual string */ - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, " ") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 1, "EM_GETLINECOUNT returned %d, expected 1\n", r); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r\r\r\r\n\r\r\r"); - ok(9 == r /* WinXP */ || 7 == r /* Win98 */, - "EM_REPLACESEL returned %d, expected 9 or 7\n", r); - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 7, "EM_EXGETSEL returned cpMin=%d, expected 7\n", cr.cpMin); - ok(cr.cpMax == 7, "EM_EXGETSEL returned cpMax=%d, expected 7\n", cr.cpMax); - - /* Test the actual string */ - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, "\r\r\r \r\r\r") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 7, "EM_GETLINECOUNT returned %d, expected 7\n", r); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r\n\r\n"); - ok(5 == r /* WinXP */ || 2 == r /* Win98 */, - "EM_REPLACESEL returned %d, expected 5 or 2\n", r); - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 2, "EM_EXGETSEL returned cpMin=%d, expected 2\n", cr.cpMin); - ok(cr.cpMax == 2, "EM_EXGETSEL returned cpMax=%d, expected 2\n", cr.cpMax); - - /* Test the actual string */ - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, " \r") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 2, "EM_GETLINECOUNT returned %d, expected 2\n", r); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r\n\r\r"); - ok(5 == r /* WinXP */ || 3 == r /* Win98 */, - "EM_REPLACESEL returned %d, expected 5 or 3\n", r); - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 3, "EM_EXGETSEL returned cpMin=%d, expected 3\n", cr.cpMin); - ok(cr.cpMax == 3, "EM_EXGETSEL returned cpMax=%d, expected 3\n", cr.cpMax); - - /* Test the actual string */ - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, " \r\r") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 3, "EM_GETLINECOUNT returned %d, expected 3\n", r); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\rX\r\n\r\r"); - ok(6 == r /* WinXP */ || 5 == r /* Win98 */, - "EM_REPLACESEL returned %d, expected 6 or 5\n", r); - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 5, "EM_EXGETSEL returned cpMin=%d, expected 5\n", cr.cpMin); - ok(cr.cpMax == 5, "EM_EXGETSEL returned cpMax=%d, expected 5\n", cr.cpMax); - - /* Test the actual string */ - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, "\rX\r\r\r") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 5, "EM_GETLINECOUNT returned %d, expected 5\n", r); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\n\n"); - ok(2 == r, "EM_REPLACESEL returned %d, expected 2\n", r); - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 2, "EM_EXGETSEL returned cpMin=%d, expected 2\n", cr.cpMin); - ok(cr.cpMax == 2, "EM_EXGETSEL returned cpMax=%d, expected 2\n", cr.cpMax); - - /* Test the actual string */ - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, "\r\r") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 3, "EM_GETLINECOUNT returned %d, expected 3\n", r); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL); - r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\n\n\n\n\r\r\r\r\n"); - ok(9 == r /* WinXP */ || 7 == r /* Win98 */, - "EM_REPLACESEL returned %d, expected 9 or 7\n", r); - r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr); - ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r); - ok(cr.cpMin == 7, "EM_EXGETSEL returned cpMin=%d, expected 7\n", cr.cpMin); - ok(cr.cpMax == 7, "EM_EXGETSEL returned cpMax=%d, expected 7\n", cr.cpMax); - - /* Test the actual string */ - getText.cb = 1024; - getText.codepage = CP_ACP; - getText.flags = GT_DEFAULT; - getText.lpDefaultChar = NULL; - getText.lpUsedDefChar = NULL; - SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buffer); - ok(strcmp(buffer, "\r\r\r\r\r\r ") == 0, - "EM_GETTEXTEX returned incorrect string\n"); - - /* Test number of lines reported after EM_REPLACESEL */ - r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); - ok(r == 7, "EM_GETLINECOUNT returned %d, expected 7\n", r); - - if (!redraw) - /* This is needed to avoid interferring with keybd_event calls - * on other tests that simulate keyboard events. */ - SendMessage(hwndRichEdit, WM_SETREDRAW, TRUE, 0); - - DestroyWindow(hwndRichEdit); -} - -static void test_WM_PASTE(void) -{ - int result; - char buffer[1024] = {0}; - const char* text1 = "testing paste\r"; - const char* text1_step1 = "testing paste\r\ntesting paste\r\n"; - const char* text1_after = "testing paste\r\n"; - const char* text2 = "testing paste\r\rtesting paste"; - const char* text2_after = "testing paste\r\n\r\ntesting paste"; - const char* text3 = "testing paste\r\npaste\r\ntesting paste"; - HWND hwndRichEdit = new_richedit(NULL); - - /* Native riched20 won't obey WM_CHAR messages or WM_KEYDOWN/WM_KEYUP - messages, probably because it inspects the keyboard state itself. - Therefore, native requires this in order to obey Ctrl- keystrokes. - */ - -#define SEND_CTRL_C(hwnd) pressKeyWithModifier(hwnd, VK_CONTROL, 'C') -#define SEND_CTRL_X(hwnd) pressKeyWithModifier(hwnd, VK_CONTROL, 'X') -#define SEND_CTRL_V(hwnd) pressKeyWithModifier(hwnd, VK_CONTROL, 'V') -#define SEND_CTRL_Z(hwnd) pressKeyWithModifier(hwnd, VK_CONTROL, 'Z') -#define SEND_CTRL_Y(hwnd) pressKeyWithModifier(hwnd, VK_CONTROL, 'Y') - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text1); - SendMessage(hwndRichEdit, EM_SETSEL, 0, 14); - - SEND_CTRL_C(hwndRichEdit); /* Copy */ - SendMessage(hwndRichEdit, EM_SETSEL, 14, 14); - SEND_CTRL_V(hwndRichEdit); /* Paste */ - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - /* Pasted text should be visible at this step */ - result = strcmp(text1_step1, buffer); - ok(result == 0, - "test paste: strcmp = %i\n", result); - SEND_CTRL_Z(hwndRichEdit); /* Undo */ - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - /* Text should be the same as before (except for \r -> \r\n conversion) */ - result = strcmp(text1_after, buffer); - ok(result == 0, - "test paste: strcmp = %i\n", result); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text2); - SendMessage(hwndRichEdit, EM_SETSEL, 8, 13); - SEND_CTRL_C(hwndRichEdit); /* Copy */ - SendMessage(hwndRichEdit, EM_SETSEL, 14, 14); - SEND_CTRL_V(hwndRichEdit); /* Paste */ - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - /* Pasted text should be visible at this step */ - result = strcmp(text3, buffer); - ok(result == 0, - "test paste: strcmp = %i\n", result); - SEND_CTRL_Z(hwndRichEdit); /* Undo */ - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - /* Text should be the same as before (except for \r -> \r\n conversion) */ - result = strcmp(text2_after, buffer); - ok(result == 0, - "test paste: strcmp = %i\n", result); - SEND_CTRL_Y(hwndRichEdit); /* Redo */ - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - /* Text should revert to post-paste state */ - result = strcmp(buffer,text3); - ok(result == 0, - "test paste: strcmp = %i\n", result); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_FORMATRANGE(void) -{ - int r; - FORMATRANGE fr; - HDC hdc; - HWND hwndRichEdit = new_richedit(NULL); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) haystack); - - hdc = GetDC(hwndRichEdit); - ok(hdc != NULL, "Could not get HDC\n"); - - fr.hdc = fr.hdcTarget = hdc; - fr.rc.top = fr.rcPage.top = fr.rc.left = fr.rcPage.left = 0; - fr.rc.right = fr.rcPage.right = GetDeviceCaps(hdc, HORZRES); - fr.rc.bottom = fr.rcPage.bottom = GetDeviceCaps(hdc, VERTRES); - fr.chrg.cpMin = 0; - fr.chrg.cpMax = 20; - - r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) NULL); - todo_wine { - ok(r == 31, "EM_FORMATRANGE expect %d, got %d\n", 31, r); - } - - r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr); - todo_wine { - ok(r == 20, "EM_FORMATRANGE expect %d, got %d\n", 20, r); - } - - fr.chrg.cpMin = 0; - fr.chrg.cpMax = 10; - - r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr); - todo_wine { - ok(r == 10, "EM_FORMATRANGE expect %d, got %d\n", 10, r); - } - - r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) NULL); - todo_wine { - ok(r == 31, "EM_FORMATRANGE expect %d, got %d\n", 31, r); - } - - DestroyWindow(hwndRichEdit); -} - -static int nCallbackCount = 0; - -static DWORD CALLBACK EditStreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, - LONG cb, LONG* pcb) -{ - const char text[] = {'t','e','s','t'}; - - if (sizeof(text) <= cb) - { - if ((int)dwCookie != nCallbackCount) - { - *pcb = 0; - return 0; - } - - memcpy (pbBuff, text, sizeof(text)); - *pcb = sizeof(text); - - nCallbackCount++; - - return 0; - } - else - return 1; /* indicates callback failed */ -} - -static DWORD CALLBACK test_EM_STREAMIN_esCallback(DWORD_PTR dwCookie, - LPBYTE pbBuff, - LONG cb, - LONG *pcb) -{ - const char** str = (const char**)dwCookie; - int size = strlen(*str); - *pcb = cb; - if (*pcb > size) { - *pcb = size; - } - if (*pcb > 0) { - memcpy(pbBuff, *str, *pcb); - *str += *pcb; - } - return 0; -} - -struct StringWithLength { - int length; - char *buffer; -}; - -/* This callback is used to handled the null characters in a string. */ -static DWORD CALLBACK test_EM_STREAMIN_esCallback2(DWORD_PTR dwCookie, - LPBYTE pbBuff, - LONG cb, - LONG *pcb) -{ - struct StringWithLength* str = (struct StringWithLength*)dwCookie; - int size = str->length; - *pcb = cb; - if (*pcb > size) { - *pcb = size; - } - if (*pcb > 0) { - memcpy(pbBuff, str->buffer, *pcb); - str->buffer += *pcb; - str->length -= *pcb; - } - return 0; -} - -static void test_EM_STREAMIN(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - LRESULT result; - EDITSTREAM es; - char buffer[1024] = {0}; - - const char * streamText0 = "{\\rtf1 TestSomeText}"; - const char * streamText0a = "{\\rtf1 TestSomeText\\par}"; - const char * streamText0b = "{\\rtf1 TestSomeText\\par\\par}"; - - const char * streamText1 = - "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang12298{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 System;}}\r\n" \ - "\\viewkind4\\uc1\\pard\\f0\\fs17 TestSomeText\\par\r\n" \ - "}\r\n"; - - /* In richedit 2.0 mode, this should NOT be accepted, unlike 1.0 */ - const char * streamText2 = - "{{\\colortbl;\\red0\\green255\\blue102;\\red255\\green255\\blue255;" \ - "\\red170\\green255\\blue255;\\red255\\green238\\blue0;\\red51\\green255" \ - "\\blue221;\\red238\\green238\\blue238;}\\tx0 \\tx424 \\tx848 \\tx1272 " \ - "\\tx1696 \\tx2120 \\tx2544 \\tx2968 \\tx3392 \\tx3816 \\tx4240 \\tx4664 " \ - "\\tx5088 \\tx5512 \\tx5936 \\tx6360 \\tx6784 \\tx7208 \\tx7632 \\tx8056 " \ - "\\tx8480 \\tx8904 \\tx9328 \\tx9752 \\tx10176 \\tx10600 \\tx11024 " \ - "\\tx11448 \\tx11872 \\tx12296 \\tx12720 \\tx13144 \\cf2 RichEdit1\\line }"; - - const char * streamText3 = "RichEdit1"; - - struct StringWithLength cookieForStream4; - const char * streamText4 = - "This text just needs to be long enough to cause run to be split onto "\ - "two separate lines and make sure the null terminating character is "\ - "handled properly.\0"; - int length4 = strlen(streamText4) + 1; - cookieForStream4.buffer = (char *)streamText4; - cookieForStream4.length = length4; - - /* Minimal test without \par at the end */ - es.dwCookie = (DWORD_PTR)&streamText0; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 12, - "EM_STREAMIN: Test 0 returned %ld, expected 12\n", result); - result = strcmp (buffer,"TestSomeText"); - ok (result == 0, - "EM_STREAMIN: Test 0 set wrong text: Result: %s\n",buffer); - ok(es.dwError == 0, "EM_STREAMIN: Test 0 set error %d, expected %d\n", es.dwError, 0); - - /* Native richedit 2.0 ignores last \par */ - es.dwCookie = (DWORD_PTR)&streamText0a; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 12, - "EM_STREAMIN: Test 0-a returned %ld, expected 12\n", result); - result = strcmp (buffer,"TestSomeText"); - ok (result == 0, - "EM_STREAMIN: Test 0-a set wrong text: Result: %s\n",buffer); - ok(es.dwError == 0, "EM_STREAMIN: Test 0-a set error %d, expected %d\n", es.dwError, 0); - - /* Native richedit 2.0 ignores last \par, next-to-last \par appears */ - es.dwCookie = (DWORD_PTR)&streamText0b; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 14, - "EM_STREAMIN: Test 0-b returned %ld, expected 14\n", result); - result = strcmp (buffer,"TestSomeText\r\n"); - ok (result == 0, - "EM_STREAMIN: Test 0-b set wrong text: Result: %s\n",buffer); - ok(es.dwError == 0, "EM_STREAMIN: Test 0-b set error %d, expected %d\n", es.dwError, 0); - - es.dwCookie = (DWORD_PTR)&streamText1; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 12, - "EM_STREAMIN: Test 1 returned %ld, expected 12\n", result); - result = strcmp (buffer,"TestSomeText"); - ok (result == 0, - "EM_STREAMIN: Test 1 set wrong text: Result: %s\n",buffer); - ok(es.dwError == 0, "EM_STREAMIN: Test 1 set error %d, expected %d\n", es.dwError, 0); - - es.dwCookie = (DWORD_PTR)&streamText2; - es.dwError = 0; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 0, - "EM_STREAMIN: Test 2 returned %ld, expected 0\n", result); - ok (strlen(buffer) == 0, - "EM_STREAMIN: Test 2 set wrong text: Result: %s\n",buffer); - ok(es.dwError == -16, "EM_STREAMIN: Test 2 set error %d, expected %d\n", es.dwError, -16); - - es.dwCookie = (DWORD_PTR)&streamText3; - es.dwError = 0; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 0, - "EM_STREAMIN: Test 3 returned %ld, expected 0\n", result); - ok (strlen(buffer) == 0, - "EM_STREAMIN: Test 3 set wrong text: Result: %s\n",buffer); - ok(es.dwError == -16, "EM_STREAMIN: Test 3 set error %d, expected %d\n", es.dwError, -16); - - es.dwCookie = (DWORD_PTR)&cookieForStream4; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback2; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_TEXT), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == length4, - "EM_STREAMIN: Test 4 returned %ld, expected %d\n", result, length4); - ok(es.dwError == 0, "EM_STREAMIN: Test 4 set error %d, expected %d\n", es.dwError, 0); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_StreamIn_Undo(void) -{ - /* The purpose of this test is to determine when a EM_StreamIn should be - * undoable. This is important because WM_PASTE currently uses StreamIn and - * pasting should always be undoable but streaming isn't always. - * - * cases to test: - * StreamIn plain text without SFF_SELECTION. - * StreamIn plain text with SFF_SELECTION set but a zero-length selection - * StreamIn plain text with SFF_SELECTION and a valid, normal selection - * StreamIn plain text with SFF_SELECTION and a backwards-selection (from>to) - * Feel free to add tests for other text modes or StreamIn things. - */ - - - HWND hwndRichEdit = new_richedit(NULL); - LRESULT result; - EDITSTREAM es; - char buffer[1024] = {0}; - const char randomtext[] = "Some text"; - - es.pfnCallback = (EDITSTREAMCALLBACK) EditStreamCallback; - - /* StreamIn, no SFF_SELECTION */ - es.dwCookie = nCallbackCount; - SendMessage(hwndRichEdit,EM_EMPTYUNDOBUFFER, 0,0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) randomtext); - SendMessage(hwndRichEdit, EM_SETSEL,0,0); - SendMessage(hwndRichEdit, EM_STREAMIN, (WPARAM)SF_TEXT, (LPARAM)&es); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - result = strcmp (buffer,"test"); - ok (result == 0, - "EM_STREAMIN: Test 1 set wrong text: Result: %s\n",buffer); - - result = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0); - ok (result == FALSE, - "EM_STREAMIN without SFF_SELECTION wrongly allows undo\n"); - - /* StreamIn, SFF_SELECTION, but nothing selected */ - es.dwCookie = nCallbackCount; - SendMessage(hwndRichEdit,EM_EMPTYUNDOBUFFER, 0,0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) randomtext); - SendMessage(hwndRichEdit, EM_SETSEL,0,0); - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_TEXT|SFF_SELECTION), (LPARAM)&es); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - result = strcmp (buffer,"testSome text"); - ok (result == 0, - "EM_STREAMIN: Test 2 set wrong text: Result: %s\n",buffer); - - result = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0); - ok (result == TRUE, - "EM_STREAMIN with SFF_SELECTION but no selection set " - "should create an undo\n"); - - /* StreamIn, SFF_SELECTION, with a selection */ - es.dwCookie = nCallbackCount; - SendMessage(hwndRichEdit,EM_EMPTYUNDOBUFFER, 0,0); - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) randomtext); - SendMessage(hwndRichEdit, EM_SETSEL,4,5); - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_TEXT|SFF_SELECTION), (LPARAM)&es); - SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - result = strcmp (buffer,"Sometesttext"); - ok (result == 0, - "EM_STREAMIN: Test 2 set wrong text: Result: %s\n",buffer); - - result = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0); - ok (result == TRUE, - "EM_STREAMIN with SFF_SELECTION and selection set " - "should create an undo\n"); - - DestroyWindow(hwndRichEdit); -} - -static BOOL is_em_settextex_supported(HWND hwnd) -{ - SETTEXTEX stex = { ST_DEFAULT, CP_ACP }; - return SendMessageA(hwnd, EM_SETTEXTEX, (WPARAM)&stex, 0) != 0; -} - -static void test_unicode_conversions(void) -{ - static const WCHAR tW[] = {'t',0}; - static const WCHAR teW[] = {'t','e',0}; - static const WCHAR textW[] = {'t','e','s','t',0}; - static const char textA[] = "test"; - char bufA[64]; - WCHAR bufW[64]; - HWND hwnd; - int is_win9x, em_settextex_supported, ret; - - is_win9x = GetVersion() & 0x80000000; - -#define set_textA(hwnd, wm_set_text, txt) \ - do { \ - SETTEXTEX stex = { ST_DEFAULT, CP_ACP }; \ - WPARAM wparam = (wm_set_text == WM_SETTEXT) ? 0 : (WPARAM)&stex; \ - assert(wm_set_text == WM_SETTEXT || wm_set_text == EM_SETTEXTEX); \ - ret = SendMessageA(hwnd, wm_set_text, wparam, (LPARAM)txt); \ - ok(ret, "SendMessageA(%02x) error %u\n", wm_set_text, GetLastError()); \ - } while(0) -#define expect_textA(hwnd, wm_get_text, txt) \ - do { \ - GETTEXTEX gtex = { 64, GT_DEFAULT, CP_ACP, NULL, NULL }; \ - WPARAM wparam = (wm_get_text == WM_GETTEXT) ? 64 : (WPARAM)>ex; \ - assert(wm_get_text == WM_GETTEXT || wm_get_text == EM_GETTEXTEX); \ - memset(bufA, 0xAA, sizeof(bufA)); \ - ret = SendMessageA(hwnd, wm_get_text, wparam, (LPARAM)bufA); \ - ok(ret, "SendMessageA(%02x) error %u\n", wm_get_text, GetLastError()); \ - ret = lstrcmpA(bufA, txt); \ - ok(!ret, "%02x: strings do not match: expected %s got %s\n", wm_get_text, txt, bufA); \ - } while(0) - -#define set_textW(hwnd, wm_set_text, txt) \ - do { \ - SETTEXTEX stex = { ST_DEFAULT, 1200 }; \ - WPARAM wparam = (wm_set_text == WM_SETTEXT) ? 0 : (WPARAM)&stex; \ - assert(wm_set_text == WM_SETTEXT || wm_set_text == EM_SETTEXTEX); \ - ret = SendMessageW(hwnd, wm_set_text, wparam, (LPARAM)txt); \ - ok(ret, "SendMessageW(%02x) error %u\n", wm_set_text, GetLastError()); \ - } while(0) -#define expect_textW(hwnd, wm_get_text, txt) \ - do { \ - GETTEXTEX gtex = { 64, GT_DEFAULT, 1200, NULL, NULL }; \ - WPARAM wparam = (wm_get_text == WM_GETTEXT) ? 64 : (WPARAM)>ex; \ - assert(wm_get_text == WM_GETTEXT || wm_get_text == EM_GETTEXTEX); \ - memset(bufW, 0xAA, sizeof(bufW)); \ - if (is_win9x) \ - { \ - assert(wm_get_text == EM_GETTEXTEX); \ - ret = SendMessageA(hwnd, wm_get_text, wparam, (LPARAM)bufW); \ - ok(ret, "SendMessageA(%02x) error %u\n", wm_get_text, GetLastError()); \ - } \ - else \ - { \ - ret = SendMessageW(hwnd, wm_get_text, wparam, (LPARAM)bufW); \ - ok(ret, "SendMessageW(%02x) error %u\n", wm_get_text, GetLastError()); \ - } \ - ret = lstrcmpW(bufW, txt); \ - ok(!ret, "%02x: strings do not match: expected[0] %x got[0] %x\n", wm_get_text, txt[0], bufW[0]); \ - } while(0) -#define expect_empty(hwnd, wm_get_text) \ - do { \ - GETTEXTEX gtex = { 64, GT_DEFAULT, CP_ACP, NULL, NULL }; \ - WPARAM wparam = (wm_get_text == WM_GETTEXT) ? 64 : (WPARAM)>ex; \ - assert(wm_get_text == WM_GETTEXT || wm_get_text == EM_GETTEXTEX); \ - memset(bufA, 0xAA, sizeof(bufA)); \ - ret = SendMessageA(hwnd, wm_get_text, wparam, (LPARAM)bufA); \ - ok(!ret, "empty richedit should return 0, got %d\n", ret); \ - ok(!*bufA, "empty richedit should return empty string, got %s\n", bufA); \ - } while(0) - - hwnd = CreateWindowExA(0, "RichEdit20W", NULL, WS_POPUP, - 0, 0, 200, 60, 0, 0, 0, 0); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - - ret = IsWindowUnicode(hwnd); - if (is_win9x) - ok(!ret, "RichEdit20W should NOT be unicode under Win9x\n"); - else - ok(ret, "RichEdit20W should be unicode under NT\n"); - - /* EM_SETTEXTEX is supported starting from version 3.0 */ - em_settextex_supported = is_em_settextex_supported(hwnd); - trace("EM_SETTEXTEX is %ssupported on this platform\n", - em_settextex_supported ? "" : "NOT "); - - expect_empty(hwnd, WM_GETTEXT); - expect_empty(hwnd, EM_GETTEXTEX); - - ret = SendMessageA(hwnd, WM_CHAR, (WPARAM)textW[0], 0); - ok(!ret, "SendMessageA(WM_CHAR) should return 0, got %d\n", ret); - expect_textA(hwnd, WM_GETTEXT, "t"); - expect_textA(hwnd, EM_GETTEXTEX, "t"); - expect_textW(hwnd, EM_GETTEXTEX, tW); - - ret = SendMessageA(hwnd, WM_CHAR, (WPARAM)textA[1], 0); - ok(!ret, "SendMessageA(WM_CHAR) should return 0, got %d\n", ret); - expect_textA(hwnd, WM_GETTEXT, "te"); - expect_textA(hwnd, EM_GETTEXTEX, "te"); - expect_textW(hwnd, EM_GETTEXTEX, teW); - - set_textA(hwnd, WM_SETTEXT, NULL); - expect_empty(hwnd, WM_GETTEXT); - expect_empty(hwnd, EM_GETTEXTEX); - - if (is_win9x) - set_textA(hwnd, WM_SETTEXT, textW); - else - set_textA(hwnd, WM_SETTEXT, textA); - expect_textA(hwnd, WM_GETTEXT, textA); - expect_textA(hwnd, EM_GETTEXTEX, textA); - expect_textW(hwnd, EM_GETTEXTEX, textW); - - if (em_settextex_supported) - { - set_textA(hwnd, EM_SETTEXTEX, textA); - expect_textA(hwnd, WM_GETTEXT, textA); - expect_textA(hwnd, EM_GETTEXTEX, textA); - expect_textW(hwnd, EM_GETTEXTEX, textW); - } - - if (!is_win9x) - { - set_textW(hwnd, WM_SETTEXT, textW); - expect_textW(hwnd, WM_GETTEXT, textW); - expect_textA(hwnd, WM_GETTEXT, textA); - expect_textW(hwnd, EM_GETTEXTEX, textW); - expect_textA(hwnd, EM_GETTEXTEX, textA); - - if (em_settextex_supported) - { - set_textW(hwnd, EM_SETTEXTEX, textW); - expect_textW(hwnd, WM_GETTEXT, textW); - expect_textA(hwnd, WM_GETTEXT, textA); - expect_textW(hwnd, EM_GETTEXTEX, textW); - expect_textA(hwnd, EM_GETTEXTEX, textA); - } - } - DestroyWindow(hwnd); - - hwnd = CreateWindowExA(0, "RichEdit20A", NULL, WS_POPUP, - 0, 0, 200, 60, 0, 0, 0, 0); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - - ret = IsWindowUnicode(hwnd); - ok(!ret, "RichEdit20A should NOT be unicode\n"); - - set_textA(hwnd, WM_SETTEXT, textA); - expect_textA(hwnd, WM_GETTEXT, textA); - expect_textA(hwnd, EM_GETTEXTEX, textA); - expect_textW(hwnd, EM_GETTEXTEX, textW); - - if (em_settextex_supported) - { - set_textA(hwnd, EM_SETTEXTEX, textA); - expect_textA(hwnd, WM_GETTEXT, textA); - expect_textA(hwnd, EM_GETTEXTEX, textA); - expect_textW(hwnd, EM_GETTEXTEX, textW); - } - - if (!is_win9x) - { - set_textW(hwnd, WM_SETTEXT, textW); - expect_textW(hwnd, WM_GETTEXT, textW); - expect_textA(hwnd, WM_GETTEXT, textA); - expect_textW(hwnd, EM_GETTEXTEX, textW); - expect_textA(hwnd, EM_GETTEXTEX, textA); - - if (em_settextex_supported) - { - set_textW(hwnd, EM_SETTEXTEX, textW); - expect_textW(hwnd, WM_GETTEXT, textW); - expect_textA(hwnd, WM_GETTEXT, textA); - expect_textW(hwnd, EM_GETTEXTEX, textW); - expect_textA(hwnd, EM_GETTEXTEX, textA); - } - } - DestroyWindow(hwnd); -} - -static void test_WM_CHAR(void) -{ - HWND hwnd; - int ret; - const char * char_list = "abc\rabc\r"; - const char * expected_content_single = "abcabc"; - const char * expected_content_multi = "abc\r\nabc\r\n"; - char buffer[64] = {0}; - const char * p; - - /* single-line control must IGNORE carriage returns */ - hwnd = CreateWindowExA(0, "RichEdit20W", NULL, WS_POPUP, - 0, 0, 200, 60, 0, 0, 0, 0); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - - p = char_list; - while (*p != '\0') { - SendMessageA(hwnd, WM_KEYDOWN, *p, 1); - ret = SendMessageA(hwnd, WM_CHAR, *p, 1); - ok(ret == 0, "WM_CHAR('%c') ret=%d\n", *p, ret); - SendMessageA(hwnd, WM_KEYUP, *p, 1); - p++; - } - - SendMessage(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - ret = strcmp(buffer, expected_content_single); - ok(ret == 0, "WM_GETTEXT recovered incorrect string!\n"); - - DestroyWindow(hwnd); - - /* multi-line control inserts CR normally */ - hwnd = CreateWindowExA(0, "RichEdit20W", NULL, WS_POPUP|ES_MULTILINE, - 0, 0, 200, 60, 0, 0, 0, 0); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - - p = char_list; - while (*p != '\0') { - SendMessageA(hwnd, WM_KEYDOWN, *p, 1); - ret = SendMessageA(hwnd, WM_CHAR, *p, 1); - ok(ret == 0, "WM_CHAR('%c') ret=%d\n", *p, ret); - SendMessageA(hwnd, WM_KEYUP, *p, 1); - p++; - } - - SendMessage(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - ret = strcmp(buffer, expected_content_multi); - ok(ret == 0, "WM_GETTEXT recovered incorrect string!\n"); - - DestroyWindow(hwnd); -} - -static void test_EM_GETTEXTLENGTHEX(void) -{ - HWND hwnd; - GETTEXTLENGTHEX gtl; - int ret; - const char * base_string = "base string"; - const char * test_string = "a\nb\n\n\r\n"; - const char * test_string_after = "a"; - const char * test_string_2 = "a\rtest\rstring"; - char buffer[64] = {0}; - - /* single line */ - hwnd = CreateWindowExA(0, "RichEdit20W", NULL, WS_POPUP, - 0, 0, 200, 60, 0, 0, 0, 0); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == 0, "ret %d\n",ret); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == 0, "ret %d\n",ret); - - SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) base_string); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == strlen(base_string), "ret %d\n",ret); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == strlen(base_string), "ret %d\n",ret); - - SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) test_string); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == 1, "ret %d\n",ret); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == 1, "ret %d\n",ret); - - SendMessage(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - ret = strcmp(buffer, test_string_after); - ok(ret == 0, "WM_GETTEXT recovered incorrect string!\n"); - - DestroyWindow(hwnd); - - /* multi line */ - hwnd = CreateWindowExA(0, "RichEdit20W", NULL, WS_POPUP | ES_MULTILINE, - 0, 0, 200, 60, 0, 0, 0, 0); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == 0, "ret %d\n",ret); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == 0, "ret %d\n",ret); - - SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) base_string); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == strlen(base_string), "ret %d\n",ret); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == strlen(base_string), "ret %d\n",ret); - - SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) test_string_2); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == strlen(test_string_2) + 2, "ret %d\n",ret); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == strlen(test_string_2), "ret %d\n",ret); - - SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) test_string); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == 10, "ret %d\n",ret); - - gtl.flags = GTL_NUMCHARS | GTL_PRECISE; - gtl.codepage = CP_ACP; - ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); - ok(ret == 6, "ret %d\n",ret); - - DestroyWindow(hwnd); -} - - -/* globals that parent and child access when checking event masks & notifications */ -static HWND eventMaskEditHwnd = 0; -static int queriedEventMask; -static int watchForEventMask = 0; - -/* parent proc that queries the edit's event mask when it gets a WM_COMMAND */ -static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - if(message == WM_COMMAND && (watchForEventMask & (wParam >> 16))) - { - queriedEventMask = SendMessage(eventMaskEditHwnd, EM_GETEVENTMASK, 0, 0); - } - return DefWindowProcA(hwnd, message, wParam, lParam); -} - -/* test event masks in combination with WM_COMMAND */ -static void test_eventMask(void) -{ - HWND parent; - int ret; - WNDCLASSA cls; - const char text[] = "foo bar\n"; - int eventMask; - - /* register class to capture WM_COMMAND */ - cls.style = 0; - cls.lpfnWndProc = ParentMsgCheckProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "EventMaskParentClass"; - if(!RegisterClassA(&cls)) assert(0); - - parent = CreateWindow(cls.lpszClassName, NULL, WS_POPUP|WS_VISIBLE, - 0, 0, 200, 60, NULL, NULL, NULL, NULL); - ok (parent != 0, "Failed to create parent window\n"); - - eventMaskEditHwnd = new_richedit(parent); - ok(eventMaskEditHwnd != 0, "Failed to create edit window\n"); - - eventMask = ENM_CHANGE | ENM_UPDATE; - ret = SendMessage(eventMaskEditHwnd, EM_SETEVENTMASK, 0, (LPARAM) eventMask); - ok(ret == ENM_NONE, "wrong event mask\n"); - ret = SendMessage(eventMaskEditHwnd, EM_GETEVENTMASK, 0, 0); - ok(ret == eventMask, "failed to set event mask\n"); - - /* check what happens when we ask for EN_CHANGE and send WM_SETTEXT */ - queriedEventMask = 0; /* initialize to something other than we expect */ - watchForEventMask = EN_CHANGE; - ret = SendMessage(eventMaskEditHwnd, WM_SETTEXT, 0, (LPARAM) text); - ok(ret == TRUE, "failed to set text\n"); - /* richedit should mask off ENM_CHANGE when it sends an EN_CHANGE - notification in response to WM_SETTEXT */ - ok(queriedEventMask == (eventMask & ~ENM_CHANGE), - "wrong event mask (0x%x) during WM_COMMAND\n", queriedEventMask); - -} - -static int received_WM_NOTIFY = 0; -static int modify_at_WM_NOTIFY = 0; -static HWND hwndRichedit_WM_NOTIFY; - -static LRESULT WINAPI WM_NOTIFY_ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - if(message == WM_NOTIFY) - { - received_WM_NOTIFY = 1; - modify_at_WM_NOTIFY = SendMessage(hwndRichedit_WM_NOTIFY, EM_GETMODIFY, 0, 0); - } - return DefWindowProcA(hwnd, message, wParam, lParam); -} - -static void test_WM_NOTIFY(void) -{ - HWND parent; - WNDCLASSA cls; - CHARFORMAT2 cf2; - - /* register class to capture WM_NOTIFY */ - cls.style = 0; - cls.lpfnWndProc = WM_NOTIFY_ParentMsgCheckProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "WM_NOTIFY_ParentClass"; - if(!RegisterClassA(&cls)) assert(0); - - parent = CreateWindow(cls.lpszClassName, NULL, WS_POPUP|WS_VISIBLE, - 0, 0, 200, 60, NULL, NULL, NULL, NULL); - ok (parent != 0, "Failed to create parent window\n"); - - hwndRichedit_WM_NOTIFY = new_richedit(parent); - ok(hwndRichedit_WM_NOTIFY != 0, "Failed to create edit window\n"); - - SendMessage(hwndRichedit_WM_NOTIFY, EM_SETEVENTMASK, 0, ENM_SELCHANGE); - - /* Notifications for selection change should only be sent when selection - actually changes. EM_SETCHARFORMAT is one message that calls - ME_CommitUndo, which should check whether message should be sent */ - received_WM_NOTIFY = 0; - cf2.cbSize = sizeof(CHARFORMAT2); - SendMessage(hwndRichedit_WM_NOTIFY, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT, - (LPARAM) &cf2); - cf2.dwMask = CFM_ITALIC | cf2.dwMask; - cf2.dwEffects = CFE_ITALIC ^ cf2.dwEffects; - SendMessage(hwndRichedit_WM_NOTIFY, EM_SETCHARFORMAT, 0, (LPARAM) &cf2); - ok(received_WM_NOTIFY == 0, "Unexpected WM_NOTIFY was sent!\n"); - - /* WM_SETTEXT should NOT cause a WM_NOTIFY to be sent when selection is - already at 0. */ - received_WM_NOTIFY = 0; - modify_at_WM_NOTIFY = 0; - SendMessage(hwndRichedit_WM_NOTIFY, WM_SETTEXT, 0, (LPARAM)"sometext"); - ok(received_WM_NOTIFY == 0, "Unexpected WM_NOTIFY was sent!\n"); - ok(modify_at_WM_NOTIFY == 0, "WM_NOTIFY callback saw text flagged as modified!\n"); - - received_WM_NOTIFY = 0; - modify_at_WM_NOTIFY = 0; - SendMessage(hwndRichedit_WM_NOTIFY, EM_SETSEL, 4, 4); - ok(received_WM_NOTIFY == 1, "Expected WM_NOTIFY was NOT sent!\n"); - - received_WM_NOTIFY = 0; - modify_at_WM_NOTIFY = 0; - SendMessage(hwndRichedit_WM_NOTIFY, WM_SETTEXT, 0, (LPARAM)"sometext"); - ok(received_WM_NOTIFY == 1, "Expected WM_NOTIFY was NOT sent!\n"); - ok(modify_at_WM_NOTIFY == 0, "WM_NOTIFY callback saw text flagged as modified!\n"); - - DestroyWindow(hwndRichedit_WM_NOTIFY); - DestroyWindow(parent); -} - -static void test_undo_coalescing(void) -{ - HWND hwnd; - int result; - char buffer[64] = {0}; - - /* multi-line control inserts CR normally */ - hwnd = CreateWindowExA(0, "RichEdit20W", NULL, WS_POPUP|ES_MULTILINE, - 0, 0, 200, 60, 0, 0, 0, 0); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - - result = SendMessage(hwnd, EM_CANUNDO, 0, 0); - ok (result == FALSE, "Can undo after window creation.\n"); - result = SendMessage(hwnd, EM_UNDO, 0, 0); - ok (result == FALSE, "Undo operation successful with nothing to undo.\n"); - result = SendMessage(hwnd, EM_CANREDO, 0, 0); - ok (result == FALSE, "Can redo after window creation.\n"); - result = SendMessage(hwnd, EM_REDO, 0, 0); - ok (result == FALSE, "Redo operation successful with nothing undone.\n"); - - /* Test the effect of arrows keys during typing on undo transactions*/ - simulate_typing_characters(hwnd, "one two three"); - SendMessage(hwnd, WM_KEYDOWN, VK_RIGHT, 1); - SendMessage(hwnd, WM_KEYUP, VK_RIGHT, 1); - simulate_typing_characters(hwnd, " four five six"); - - result = SendMessage(hwnd, EM_CANREDO, 0, 0); - ok (result == FALSE, "Can redo before anything is undone.\n"); - result = SendMessage(hwnd, EM_CANUNDO, 0, 0); - ok (result == TRUE, "Cannot undo typed characters.\n"); - result = SendMessage(hwnd, EM_UNDO, 0, 0); - ok (result == TRUE, "EM_UNDO Failed to undo typed characters.\n"); - result = SendMessage(hwnd, EM_CANREDO, 0, 0); - ok (result == TRUE, "Cannot redo after undo.\n"); - SendMessageA(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - result = strcmp(buffer, "one two three"); - ok (result == 0, "expected '%s' but got '%s'\n", "one two three", buffer); - - result = SendMessage(hwnd, EM_CANUNDO, 0, 0); - ok (result == TRUE, "Cannot undo typed characters.\n"); - result = SendMessage(hwnd, WM_UNDO, 0, 0); - ok (result == TRUE, "Failed to undo typed characters.\n"); - SendMessageA(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - result = strcmp(buffer, ""); - ok (result == 0, "expected '%s' but got '%s'\n", "", buffer); - - /* Test the effect of focus changes during typing on undo transactions*/ - simulate_typing_characters(hwnd, "one two three"); - result = SendMessage(hwnd, EM_CANREDO, 0, 0); - ok (result == FALSE, "Redo buffer should have been cleared by typing.\n"); - SendMessage(hwnd, WM_KILLFOCUS, (WPARAM)NULL, 0); - SendMessage(hwnd, WM_SETFOCUS, (WPARAM)NULL, 0); - simulate_typing_characters(hwnd, " four five six"); - result = SendMessage(hwnd, EM_UNDO, 0, 0); - ok (result == TRUE, "Failed to undo typed characters.\n"); - SendMessageA(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - result = strcmp(buffer, "one two three"); - ok (result == 0, "expected '%s' but got '%s'\n", "one two three", buffer); - - /* Test the effect of the back key during typing on undo transactions */ - SendMessage(hwnd, EM_EMPTYUNDOBUFFER, 0, 0); - result = SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)""); - ok (result == TRUE, "Failed to clear the text.\n"); - simulate_typing_characters(hwnd, "one two threa"); - result = SendMessage(hwnd, EM_CANREDO, 0, 0); - ok (result == FALSE, "Redo buffer should have been cleared by typing.\n"); - SendMessage(hwnd, WM_KEYDOWN, VK_BACK, 1); - SendMessage(hwnd, WM_KEYUP, VK_BACK, 1); - simulate_typing_characters(hwnd, "e four five six"); - result = SendMessage(hwnd, EM_UNDO, 0, 0); - ok (result == TRUE, "Failed to undo typed characters.\n"); - SendMessageA(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - result = strcmp(buffer, ""); - ok (result == 0, "expected '%s' but got '%s'\n", "", buffer); - - /* Test the effect of the delete key during typing on undo transactions */ - SendMessage(hwnd, EM_EMPTYUNDOBUFFER, 0, 0); - result = SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)"abcd"); - ok(result == TRUE, "Failed to set the text.\n"); - SendMessage(hwnd, EM_SETSEL, (WPARAM)1, (LPARAM)1); - SendMessage(hwnd, WM_KEYDOWN, VK_DELETE, 1); - SendMessage(hwnd, WM_KEYUP, VK_DELETE, 1); - SendMessage(hwnd, WM_KEYDOWN, VK_DELETE, 1); - SendMessage(hwnd, WM_KEYUP, VK_DELETE, 1); - result = SendMessage(hwnd, EM_UNDO, 0, 0); - ok (result == TRUE, "Failed to undo typed characters.\n"); - SendMessageA(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - result = strcmp(buffer, "acd"); - ok (result == 0, "expected '%s' but got '%s'\n", "acd", buffer); - result = SendMessage(hwnd, EM_UNDO, 0, 0); - ok (result == TRUE, "Failed to undo typed characters.\n"); - SendMessageA(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - result = strcmp(buffer, "abcd"); - ok (result == 0, "expected '%s' but got '%s'\n", "abcd", buffer); - - /* Test the effect of EM_STOPGROUPTYPING on undo transactions*/ - SendMessage(hwnd, EM_EMPTYUNDOBUFFER, 0, 0); - result = SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)""); - ok (result == TRUE, "Failed to clear the text.\n"); - simulate_typing_characters(hwnd, "one two three"); - result = SendMessage(hwnd, EM_STOPGROUPTYPING, 0, 0); - ok (result == 0, "expected %d but got %d\n", 0, result); - simulate_typing_characters(hwnd, " four five six"); - result = SendMessage(hwnd, EM_UNDO, 0, 0); - ok (result == TRUE, "Failed to undo typed characters.\n"); - SendMessageA(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - result = strcmp(buffer, "one two three"); - ok (result == 0, "expected '%s' but got '%s'\n", "one two three", buffer); - result = SendMessage(hwnd, EM_UNDO, 0, 0); - ok (result == TRUE, "Failed to undo typed characters.\n"); - ok (result == TRUE, "Failed to undo typed characters.\n"); - SendMessageA(hwnd, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer); - result = strcmp(buffer, ""); - ok (result == 0, "expected '%s' but got '%s'\n", "", buffer); - - DestroyWindow(hwnd); -} - -#define SEND_CTRL_LEFT(hwnd) pressKeyWithModifier(hwnd, VK_CONTROL, VK_LEFT) -#define SEND_CTRL_RIGHT(hwnd) pressKeyWithModifier(hwnd, VK_CONTROL, VK_RIGHT) - -static void test_word_movement(void) -{ - HWND hwnd; - int result; - int sel_start, sel_end; - - /* multi-line control inserts CR normally */ - hwnd = new_richedit(NULL); - - result = SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)"one two three"); - ok (result == TRUE, "Failed to clear the text.\n"); - SendMessage(hwnd, EM_SETSEL, 0, 0); - /* |one two three */ - - SEND_CTRL_RIGHT(hwnd); - /* one |two three */ - SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); - ok(sel_start == sel_end, "Selection should be empty\n"); - ok(sel_start == 4, "Cursor is at %d instead of %d\n", sel_start, 4); - - SEND_CTRL_RIGHT(hwnd); - /* one two |three */ - SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); - ok(sel_start == sel_end, "Selection should be empty\n"); - ok(sel_start == 9, "Cursor is at %d instead of %d\n", sel_start, 9); - - SEND_CTRL_LEFT(hwnd); - /* one |two three */ - SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); - ok(sel_start == sel_end, "Selection should be empty\n"); - ok(sel_start == 4, "Cursor is at %d instead of %d\n", sel_start, 4); - - SEND_CTRL_LEFT(hwnd); - /* |one two three */ - SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); - ok(sel_start == sel_end, "Selection should be empty\n"); - ok(sel_start == 0, "Cursor is at %d instead of %d\n", sel_start, 0); - - SendMessage(hwnd, EM_SETSEL, 8, 8); - /* one two | three */ - SEND_CTRL_RIGHT(hwnd); - /* one two |three */ - SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); - ok(sel_start == sel_end, "Selection should be empty\n"); - ok(sel_start == 9, "Cursor is at %d instead of %d\n", sel_start, 9); - - SendMessage(hwnd, EM_SETSEL, 11, 11); - /* one two th|ree */ - SEND_CTRL_LEFT(hwnd); - /* one two |three */ - SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); - ok(sel_start == sel_end, "Selection should be empty\n"); - ok(sel_start == 9, "Cursor is at %d instead of %d\n", sel_start, 9); - - DestroyWindow(hwnd); -} - -static void test_EM_CHARFROMPOS(void) -{ - HWND hwnd; - int result; - POINTL point; - point.x = 0; - point.y = 50; - - /* multi-line control inserts CR normally */ - hwnd = new_richedit(NULL); - result = SendMessageA(hwnd, WM_SETTEXT, 0, - (LPARAM)"one two three four five six seven"); - - result = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM)&point); - ok(result == 0, "expected character index of 0 but got %d\n", result); - - DestroyWindow(hwnd); -} - -START_TEST( editor ) -{ - MSG msg; - time_t end; - - /* Must explicitly LoadLibrary(). The test has no references to functions in - * RICHED20.DLL, so the linker doesn't actually link to it. */ - hmoduleRichEdit = LoadLibrary("RICHED20.DLL"); - ok(hmoduleRichEdit != NULL, "error: %d\n", (int) GetLastError()); - test_WM_CHAR(); - test_EM_FINDTEXT(); - test_EM_GETLINE(); - test_EM_POSFROMCHAR(); - test_EM_SCROLLCARET(); - test_EM_SCROLL(); - test_scrollbar_visibility(); - test_WM_SETTEXT(); - test_EM_LINELENGTH(); - test_EM_SETCHARFORMAT(); - test_EM_SETTEXTMODE(); - test_TM_PLAINTEXT(); - test_EM_SETOPTIONS(); - test_WM_GETTEXT(); - test_EM_GETTEXTRANGE(); - test_EM_GETSELTEXT(); - test_EM_SETUNDOLIMIT(); - test_ES_PASSWORD(); - test_EM_SETTEXTEX(); - test_EM_LIMITTEXT(); - test_EM_EXLIMITTEXT(); - test_EM_GETLIMITTEXT(); - test_WM_SETFONT(); - test_EM_GETMODIFY(); - test_EM_EXSETSEL(); - test_WM_PASTE(); - test_EM_STREAMIN(); - test_EM_STREAMOUT(); - test_EM_StreamIn_Undo(); - test_EM_FORMATRANGE(); - test_unicode_conversions(); - test_EM_GETTEXTLENGTHEX(); - test_EM_REPLACESEL(1); - test_EM_REPLACESEL(0); - test_WM_NOTIFY(); - test_EM_AUTOURLDETECT(); - test_eventMask(); - test_undo_coalescing(); - test_word_movement(); - test_EM_CHARFROMPOS(); - test_SETPARAFORMAT(); - - /* Set the environment variable WINETEST_RICHED20 to keep windows - * responsive and open for 30 seconds. This is useful for debugging. - * - * The message pump uses PeekMessage() to empty the queue and then sleeps for - * 50ms before retrying the queue. */ - end = time(NULL) + 30; - if (getenv( "WINETEST_RICHED20" )) { - while (time(NULL) < end) { - if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } else { - Sleep(50); - } - } - } - - OleFlushClipboard(); - ok(FreeLibrary(hmoduleRichEdit) != 0, "error: %d\n", (int) GetLastError()); -} diff --git a/rostests/winetests/riched20/riched20.rbuild b/rostests/winetests/riched20/riched20.rbuild deleted file mode 100644 index 83392bc953b..00000000000 --- a/rostests/winetests/riched20/riched20.rbuild +++ /dev/null @@ -1,17 +0,0 @@ - - - - - . - editor.c - richole.c - testlist.c - wine - uuid - ole32 - user32 - gdi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/riched20/richole.c b/rostests/winetests/riched20/richole.c deleted file mode 100644 index 6eefdd0ffb5..00000000000 --- a/rostests/winetests/riched20/richole.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Tests for IRichEditOle and friends. - * - * 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 - */ - -#define COBJMACROS - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static HMODULE hmoduleRichEdit; - -static HWND new_window(LPCTSTR lpClassName, DWORD dwStyle, HWND parent) -{ - HWND hwnd - = CreateWindow(lpClassName, NULL, - dwStyle | WS_POPUP | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE, - 0, 0, 200, 60, parent, NULL, hmoduleRichEdit, NULL); - ok(hwnd != NULL, "class: %s, error: %d\n", lpClassName, (int) GetLastError()); - return hwnd; -} - -static HWND new_richedit(HWND parent) -{ - return new_window(RICHEDIT_CLASS, ES_MULTILINE, parent); -} - - -START_TEST(richole) -{ - IRichEditOle *reOle = NULL; - ITextDocument *txtDoc = NULL; - ITextSelection *txtSel = NULL; - IUnknown *punk; - HRESULT hres; - LRESULT res; - HWND w; - - /* Must explicitly LoadLibrary(). The test has no references to functions in - * RICHED20.DLL, so the linker doesn't actually link to it. */ - hmoduleRichEdit = LoadLibrary("RICHED20.DLL"); - ok(hmoduleRichEdit != NULL, "error: %d\n", (int) GetLastError()); - - w = new_richedit(NULL); - if (!w) { - skip("Couldn't create window\n"); - return; - } - - res = SendMessage(w, EM_GETOLEINTERFACE, 0, (LPARAM) &reOle); - ok(res, "SendMessage\n"); - ok(reOle != NULL, "EM_GETOLEINTERFACE\n"); - - hres = IUnknown_QueryInterface(reOle, &IID_ITextDocument, - (void **) &txtDoc); - ok(hres == S_OK, "IRichEditOle_QueryInterface\n"); - ok(txtDoc != NULL, "IRichEditOle_QueryInterface\n"); - - hres = ITextDocument_GetSelection(txtDoc, &txtSel); - ok(hres == S_OK, "ITextDocument_GetSelection\n"); - ok(txtSel != NULL, "ITextDocument_GetSelection\n"); - - punk = NULL; - hres = ITextSelection_QueryInterface(txtSel, &IID_ITextSelection, (void **) &punk); - ok(hres == S_OK, "ITextSelection_QueryInterface\n"); - ok(punk != NULL, "ITextSelection_QueryInterface\n"); - IUnknown_Release(punk); - - punk = NULL; - hres = ITextSelection_QueryInterface(txtSel, &IID_ITextRange, (void **) &punk); - ok(hres == S_OK, "ITextSelection_QueryInterface\n"); - ok(punk != NULL, "ITextSelection_QueryInterface\n"); - IUnknown_Release(punk); - - punk = NULL; - hres = ITextSelection_QueryInterface(txtSel, &IID_IDispatch, (void **) &punk); - ok(hres == S_OK, "ITextSelection_QueryInterface\n"); - ok(punk != NULL, "ITextSelection_QueryInterface\n"); - IUnknown_Release(punk); - - ITextDocument_Release(txtDoc); - IUnknown_Release(reOle); - DestroyWindow(w); - - /* Methods should return CO_E_RELEASED if the backing document has - been released. One test should suffice. */ - hres = ITextSelection_CanEdit(txtSel, NULL); - ok(hres == CO_E_RELEASED, "ITextSelection after ITextDocument destroyed\n"); - - ITextSelection_Release(txtSel); -} diff --git a/rostests/winetests/riched20/testlist.c b/rostests/winetests/riched20/testlist.c deleted file mode 100644 index 1248a7cdc6a..00000000000 --- a/rostests/winetests/riched20/testlist.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - - -const struct test winetest_testlist[] = -{ - { 0, 0 } -}; diff --git a/rostests/winetests/riched32/editor.c b/rostests/winetests/riched32/editor.c deleted file mode 100644 index 63a63f13018..00000000000 --- a/rostests/winetests/riched32/editor.c +++ /dev/null @@ -1,865 +0,0 @@ -/* -* Unit test suite for rich edit control 1.0 -* -* Copyright 2006 Google (Thomas Kho) -* Copyright 2007 Matt Finnicum -* Copyright 2007 Dmitry Timoshkov -* Copyright 2007 Alex Villacís Lasso -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or (at your option) any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* 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 -#include -#include -#include -#include -#include - -static HMODULE hmoduleRichEdit; - -static HWND new_window(LPCTSTR lpClassName, DWORD dwStyle, HWND parent) { - HWND hwnd; - hwnd = CreateWindow(lpClassName, NULL, dwStyle|WS_POPUP|WS_HSCROLL|WS_VSCROLL - |WS_VISIBLE, 0, 0, 200, 60, parent, NULL, - hmoduleRichEdit, NULL); - ok(hwnd != NULL, "class: %s, error: %d\n", lpClassName, (int) GetLastError()); - return hwnd; -} - -static HWND new_richedit(HWND parent) { - return new_window(RICHEDIT_CLASS10A, ES_MULTILINE, parent); -} - -static void test_WM_SETTEXT() -{ - HWND hwndRichEdit = new_richedit(NULL); - const char * TestItem1 = "TestSomeText"; - const char * TestItem2 = "TestSomeText\r"; - const char * TestItem3 = "TestSomeText\rSomeMoreText\r"; - const char * TestItem4 = "TestSomeText\n\nTestSomeText"; - const char * TestItem5 = "TestSomeText\r\r\nTestSomeText"; - const char * TestItem6 = "TestSomeText\r\r\n\rTestSomeText"; - const char * TestItem7 = "TestSomeText\r\n\r\r\n\rTestSomeText"; - const char * TestItem8 = "TestSomeText\r\n"; - const char * TestItem9 = "TestSomeText\r\nSomeMoreText\r\n"; - const char * TestItem10 = "TestSomeText\r\n\r\nTestSomeText"; - const char * TestItem11 = "TestSomeText TestSomeText"; - const char * TestItem12 = "TestSomeText \r\nTestSomeText"; - const char * TestItem13 = "TestSomeText\r\n \r\nTestSomeText"; - const char * TestItem14 = "TestSomeText\n"; - const char * TestItem15 = "TestSomeText\r\r\r"; - const char * TestItem16 = "TestSomeText\r\r\rSomeMoreText"; - char buf[1024] = {0}; - LRESULT result; - - /* This test attempts to show that WM_SETTEXT on a riched32 control does not - attempt to modify the text that is pasted into the control, and should - return it as is. In particular, \r\r\n is NOT converted, unlike riched20. - Currently, builtin riched32 mangles solitary \r or \n when not part of - a \r\n pair. - - For riched32, the rules for breaking lines seem to be the following: - - \r\n is one line break. This is the normal case. - - \r{0,N}\n is one line break. In particular, \n by itself is a line break. - - \n{1,N} are that many line breaks. - - \r with text or other characters (except \n) past it, is a line break. That - is, a run of \r{N} without a terminating \n is considered N line breaks - - \r at the end of the text is NOT a line break. This differs from riched20, - where \r at the end of the text is a proper line break. This causes - TestItem2 to fail its test. - */ - -#define TEST_SETTEXT(a, b, nlines, is_todo, is_todo2) \ - result = SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) a); \ - ok (result == 1, "WM_SETTEXT returned %ld instead of 1\n", result); \ - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buf); \ - ok (result == lstrlen(buf), \ - "WM_GETTEXT returned %ld instead of expected %u\n", \ - result, lstrlen(buf)); \ - result = strcmp(b, buf); \ - if (is_todo) todo_wine { \ - ok(result == 0, \ - "WM_SETTEXT round trip: strcmp = %ld\n", result); \ - } else { \ - ok(result == 0, \ - "WM_SETTEXT round trip: strcmp = %ld\n", result); \ - } \ - result = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); \ - if (is_todo2) todo_wine { \ - ok(result == nlines, "EM_GETLINECOUNT returned %ld, expected %d\n", result, nlines); \ - } else { \ - ok(result == nlines, "EM_GETLINECOUNT returned %ld, expected %d\n", result, nlines); \ - } - - TEST_SETTEXT(TestItem1, TestItem1, 1, 0, 0) - TEST_SETTEXT(TestItem2, TestItem2, 1, 0, 0) - TEST_SETTEXT(TestItem3, TestItem3, 2, 0, 0) - TEST_SETTEXT(TestItem4, TestItem4, 3, 0, 0) - TEST_SETTEXT(TestItem5, TestItem5, 2, 0, 0) - TEST_SETTEXT(TestItem6, TestItem6, 3, 0, 0) - TEST_SETTEXT(TestItem7, TestItem7, 4, 0, 0) - TEST_SETTEXT(TestItem8, TestItem8, 2, 0, 0) - TEST_SETTEXT(TestItem9, TestItem9, 3, 0, 0) - TEST_SETTEXT(TestItem10, TestItem10, 3, 0, 0) - TEST_SETTEXT(TestItem11, TestItem11, 1, 0, 0) - TEST_SETTEXT(TestItem12, TestItem12, 2, 0, 0) - TEST_SETTEXT(TestItem13, TestItem13, 3, 0, 0) - TEST_SETTEXT(TestItem14, TestItem14, 2, 0, 0) - TEST_SETTEXT(TestItem15, TestItem15, 3, 0, 0) - TEST_SETTEXT(TestItem16, TestItem16, 4, 0, 0) - -#undef TEST_SETTEXT - DestroyWindow(hwndRichEdit); -} - -static void test_WM_GETTEXTLENGTH(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - static const char text3[] = "aaa\r\nbbb\r\nccc\r\nddd\r\neee"; - static const char text4[] = "aaa\r\nbbb\r\nccc\r\nddd\r\neee\r\n"; - int result; - - /* Test for WM_GETTEXTLENGTH */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text3); - result = SendMessage(hwndRichEdit, WM_GETTEXTLENGTH, 0, 0); - ok(result == lstrlen(text3), - "WM_GETTEXTLENGTH reports incorrect length %d, expected %d\n", - result, lstrlen(text3)); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text4); - result = SendMessage(hwndRichEdit, WM_GETTEXTLENGTH, 0, 0); - ok(result == lstrlen(text4), - "WM_GETTEXTLENGTH reports incorrect length %d, expected %d\n", - result, lstrlen(text4)); - - DestroyWindow(hwndRichEdit); -} - -static DWORD CALLBACK test_EM_STREAMIN_esCallback(DWORD_PTR dwCookie, - LPBYTE pbBuff, - LONG cb, - LONG *pcb) -{ - const char** str = (const char**)dwCookie; - int size = strlen(*str); - *pcb = cb; - if (*pcb > size) { - *pcb = size; - } - if (*pcb > 0) { - memcpy(pbBuff, *str, *pcb); - *str += *pcb; - } - return 0; -} - - -static void test_EM_STREAMIN(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - LRESULT result; - EDITSTREAM es; - char buffer[1024] = {0}; - - const char * streamText0 = "{\\rtf1 TestSomeText}"; - const char * streamText0a = "{\\rtf1 TestSomeText\\par}"; - const char * streamText0b = "{\\rtf1 TestSomeText\\par\\par}"; - - const char * streamText1 = - "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang12298{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 System;}}\r\n" \ - "\\viewkind4\\uc1\\pard\\f0\\fs17 TestSomeText\\par\r\n" \ - "}\r\n"; - - /* This should be accepted in richedit 1.0 emulation. See bug #8326 */ - const char * streamText2 = - "{{\\colortbl;\\red0\\green255\\blue102;\\red255\\green255\\blue255;" \ - "\\red170\\green255\\blue255;\\red255\\green238\\blue0;\\red51\\green255" \ - "\\blue221;\\red238\\green238\\blue238;}\\tx0 \\tx424 \\tx848 \\tx1272 " \ - "\\tx1696 \\tx2120 \\tx2544 \\tx2968 \\tx3392 \\tx3816 \\tx4240 \\tx4664 " \ - "\\tx5088 \\tx5512 \\tx5936 \\tx6360 \\tx6784 \\tx7208 \\tx7632 \\tx8056 " \ - "\\tx8480 \\tx8904 \\tx9328 \\tx9752 \\tx10176 \\tx10600 \\tx11024 " \ - "\\tx11448 \\tx11872 \\tx12296 \\tx12720 \\tx13144 \\cf2 RichEdit1\\line }"; - - const char * streamText3 = "RichEdit1"; - - /* Minimal test without \par at the end */ - es.dwCookie = (DWORD_PTR)&streamText0; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 12, - "EM_STREAMIN: Test 0 returned %ld, expected 12\n", result); - result = strcmp (buffer,"TestSomeText"); - ok (result == 0, - "EM_STREAMIN: Test 0 set wrong text: Result: %s\n",buffer); - ok(es.dwError == 0, "EM_STREAMIN: Test 0 set error %d, expected %d\n", es.dwError, 0); - - /* Native richedit 2.0 ignores last \par */ - es.dwCookie = (DWORD_PTR)&streamText0a; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 12, - "EM_STREAMIN: Test 0-a returned %ld, expected 12\n", result); - result = strcmp (buffer,"TestSomeText"); - ok (result == 0, - "EM_STREAMIN: Test 0-a set wrong text: Result: %s\n",buffer); - ok(es.dwError == 0, "EM_STREAMIN: Test 0 set error %d, expected %d\n", es.dwError, 0); - - /* Native richedit 2.0 ignores last \par, next-to-last \par appears */ - es.dwCookie = (DWORD_PTR)&streamText0b; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 14, - "EM_STREAMIN: Test 0-b returned %ld, expected 14\n", result); - result = strcmp (buffer,"TestSomeText\r\n"); - ok (result == 0, - "EM_STREAMIN: Test 0-b set wrong text: Result: %s\n",buffer); - ok(es.dwError == 0, "EM_STREAMIN: Test 0 set error %d, expected %d\n", es.dwError, 0); - - es.dwCookie = (DWORD_PTR)&streamText1; - es.dwError = 0; - es.pfnCallback = test_EM_STREAMIN_esCallback; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 12, - "EM_STREAMIN: Test 1 returned %ld, expected 12\n", result); - result = strcmp (buffer,"TestSomeText"); - ok (result == 0, - "EM_STREAMIN: Test 1 set wrong text: Result: %s\n",buffer); - ok(es.dwError == 0, "EM_STREAMIN: Test 0 set error %d, expected %d\n", es.dwError, 0); - - - es.dwCookie = (DWORD_PTR)&streamText2; - es.dwError = 0; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - todo_wine { - ok (result == 9, - "EM_STREAMIN: Test 2 returned %ld, expected 9\n", result); - } - result = strcmp (buffer,"RichEdit1"); - todo_wine { - ok (result == 0, - "EM_STREAMIN: Test 2 set wrong text: Result: %s\n",buffer); - } - ok(es.dwError == 0, "EM_STREAMIN: Test 0 set error %d, expected %d\n", es.dwError, 0); - - es.dwCookie = (DWORD_PTR)&streamText3; - es.dwError = 0; - SendMessage(hwndRichEdit, EM_STREAMIN, - (WPARAM)(SF_RTF), (LPARAM)&es); - - result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok (result == 0, - "EM_STREAMIN: Test 3 returned %ld, expected 0\n", result); - ok (strlen(buffer) == 0, - "EM_STREAMIN: Test 3 set wrong text: Result: %s\n",buffer); - ok(es.dwError == -16, "EM_STREAMIN: Test 0 set error %d, expected %d\n", es.dwError, -16); - - DestroyWindow(hwndRichEdit); -} - -static DWORD CALLBACK test_WM_SETTEXT_esCallback(DWORD_PTR dwCookie, - LPBYTE pbBuff, - LONG cb, - LONG *pcb) -{ - char** str = (char**)dwCookie; - *pcb = cb; - if (*pcb > 0) { - memcpy(*str, pbBuff, *pcb); - *str += *pcb; - } - return 0; -} - -static void test_EM_STREAMOUT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - int r; - EDITSTREAM es; - char buf[1024] = {0}; - char * p; - - const char * TestItem1 = "TestSomeText"; - const char * TestItem2 = "TestSomeText\r"; - const char * TestItem3 = "TestSomeText\r\n"; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) TestItem1); - p = buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_TEXT), (LPARAM)&es); - r = strlen(buf); - ok(r == 12, "streamed text length is %d, expecting 12\n", r); - ok(strcmp(buf, TestItem1) == 0, - "streamed text different, got %s\n", buf); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) TestItem2); - p = buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_TEXT), (LPARAM)&es); - r = strlen(buf); - - ok(r == 13, "streamed text length is %d, expecting 13\n", r); - ok(strcmp(buf, TestItem2) == 0, - "streamed text different, got %s\n", buf); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) TestItem3); - p = buf; - es.dwCookie = (DWORD_PTR)&p; - es.dwError = 0; - es.pfnCallback = test_WM_SETTEXT_esCallback; - memset(buf, 0, sizeof(buf)); - SendMessage(hwndRichEdit, EM_STREAMOUT, - (WPARAM)(SF_TEXT), (LPARAM)&es); - r = strlen(buf); - ok(r == 14, "streamed text length is %d, expecting 14\n", r); - ok(strcmp(buf, TestItem3) == 0, - "streamed text different, got %s\n", buf); - - DestroyWindow(hwndRichEdit); -} - -static const struct getline_s { - int line; - size_t buffer_len; - const char *text; - int wine_todo; -} gl[] = { - {0, 10, "foo bar\r\n", 0}, - {1, 10, "\n", 0}, - {2, 10, "bar\n", 0}, - {3, 10, "\r\n", 0}, - - /* Buffer smaller than line length */ - {0, 2, "foo bar\r", 0}, - {0, 1, "foo bar\r", 0}, - {0, 0, "foo bar\r", 0} -}; - -static void test_EM_GETLINE(void) -{ - int i; - HWND hwndRichEdit = new_richedit(NULL); - static const int nBuf = 1024; - char dest[1024], origdest[1024]; - const char text[] = "foo bar\r\n" - "\n" - "bar\n"; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - - memset(origdest, 0xBB, nBuf); - for (i = 0; i < sizeof(gl)/sizeof(struct getline_s); i++) - { - int nCopied; - int expected_nCopied = min(gl[i].buffer_len, strlen(gl[i].text)); - int expected_bytes_written = min(gl[i].buffer_len, strlen(gl[i].text) + 1); - memset(dest, 0xBB, nBuf); - *(WORD *) dest = gl[i].buffer_len; - - /* EM_GETLINE appends a "\r\0" to the end of the line - * nCopied counts up to and including the '\r' */ - nCopied = SendMessage(hwndRichEdit, EM_GETLINE, gl[i].line, (LPARAM) dest); - if (gl[i].wine_todo) todo_wine { - ok(nCopied == expected_nCopied, "%d: %d!=%d\n", i, nCopied, - expected_nCopied); - } else - ok(nCopied == expected_nCopied, "%d: %d!=%d\n", i, nCopied, - expected_nCopied); - /* two special cases since a parameter is passed via dest */ - if (gl[i].buffer_len == 0) - ok(!dest[0] && !dest[1] && !strncmp(dest+2, origdest+2, nBuf-2), - "buffer_len=0\n"); - else if (gl[i].buffer_len == 1) - ok(dest[0] == gl[i].text[0] && !dest[1] && - !strncmp(dest+2, origdest+2, nBuf-2), "buffer_len=1\n"); - else - { - if (gl[i].wine_todo) todo_wine { - ok(!strncmp(dest, gl[i].text, expected_bytes_written), - "%d: expected_bytes_written=%d\n", i, expected_bytes_written); - ok(!strncmp(dest + expected_bytes_written, origdest - + expected_bytes_written, nBuf - expected_bytes_written), - "%d: expected_bytes_written=%d\n", i, expected_bytes_written); - } - else - { - ok(!strncmp(dest, gl[i].text, expected_bytes_written), - "%d: expected_bytes_written=%d\n", i, expected_bytes_written); - ok(!strncmp(dest + expected_bytes_written, origdest - + expected_bytes_written, nBuf - expected_bytes_written), - "%d: expected_bytes_written=%d\n", i, expected_bytes_written); - } - } - } - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_LINELENGTH(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - const char * text = - "richedit1\r" - "richedit1\n" - "richedit1\r\n" - "richedit1\r\r\r\r\r\n"; - int offset_test[10][2] = { - {0, 9}, - {5, 9}, - {10, 9}, - {15, 9}, - {20, 9}, - {25, 9}, - {30, 9}, - {35, 9}, - {40, 9}, /* <----- in the middle of the \r run, but run not counted */ - {45, 0}, - }; - int i; - LRESULT result; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - - for (i = 0; i < 10; i++) { - result = SendMessage(hwndRichEdit, EM_LINELENGTH, offset_test[i][0], 0); - ok(result == offset_test[i][1], "Length of line at offset %d is %ld, expected %d\n", - offset_test[i][0], result, offset_test[i][1]); - } - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_GETTEXTRANGE(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - const char * text1 = "foo bar\r\nfoo bar"; - const char * text2 = "foo bar\rfoo bar"; - const char * expect1 = "bar\r\nfoo"; - const char * expect2 = "bar\rfoo"; - char buffer[1024] = {0}; - LRESULT result; - TEXTRANGEA textRange; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text1); - - textRange.lpstrText = buffer; - textRange.chrg.cpMin = 4; - textRange.chrg.cpMax = 12; - result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange); - ok(result == 8, "EM_GETTEXTRANGE returned %ld\n", result); - ok(!strcmp(expect1, buffer), "EM_GETTEXTRANGE filled %s\n", buffer); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text2); - - textRange.lpstrText = buffer; - textRange.chrg.cpMin = 4; - textRange.chrg.cpMax = 11; - result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange); - ok(result == 7, "EM_GETTEXTRANGE returned %ld\n", result); - - ok(!strcmp(expect2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer); - - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_GETSELTEXT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - const char * text1 = "foo bar\r\nfoo bar"; - const char * text2 = "foo bar\rfoo bar"; - const char * expect1 = "bar\r\nfoo"; - const char * expect2 = "bar\rfoo"; - char buffer[1024] = {0}; - LRESULT result; - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text1); - - SendMessage(hwndRichEdit, EM_SETSEL, 4, 12); - result = SendMessage(hwndRichEdit, EM_GETSELTEXT, 0, (LPARAM)buffer); - ok(result == 8, "EM_GETTEXTRANGE returned %ld\n", result); - ok(!strcmp(expect1, buffer), "EM_GETTEXTRANGE filled %s\n", buffer); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text2); - - SendMessage(hwndRichEdit, EM_SETSEL, 4, 11); - result = SendMessage(hwndRichEdit, EM_GETSELTEXT, 0, (LPARAM)buffer); - ok(result == 7, "EM_GETTEXTRANGE returned %ld\n", result); - - ok(!strcmp(expect2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer); - - - DestroyWindow(hwndRichEdit); -} - -static const char haystack[] = "WINEWine wineWine wine WineWine"; - /* ^0 ^10 ^20 ^30 */ - -struct find_s { - int start; - int end; - const char *needle; - int flags; - int expected_loc; - int _todo_wine; -}; - - -struct find_s find_tests[] = { - /* Find in empty text */ - {0, -1, "foo", FR_DOWN, -1, 0}, - {0, -1, "foo", 0, -1, 0}, - {0, -1, "", FR_DOWN, -1, 0}, - {20, 5, "foo", FR_DOWN, -1, 0}, - {5, 20, "foo", FR_DOWN, -1, 0} -}; - -struct find_s find_tests2[] = { - /* No-result find */ - {0, -1, "foo", FR_DOWN | FR_MATCHCASE, -1, 0}, - {5, 20, "WINE", FR_DOWN | FR_MATCHCASE, -1, 0}, - - /* Subsequent finds */ - {0, -1, "Wine", FR_DOWN | FR_MATCHCASE, 4, 0}, - {5, 31, "Wine", FR_DOWN | FR_MATCHCASE, 13, 0}, - {14, 31, "Wine", FR_DOWN | FR_MATCHCASE, 23, 0}, - {24, 31, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0}, - - /* Find backwards */ - {19, 20, "Wine", FR_MATCHCASE, -1, 0}, - {10, 20, "Wine", FR_MATCHCASE, 13, 0}, - {20, 10, "Wine", FR_MATCHCASE, -1, 0}, - - /* Case-insensitive */ - {1, 31, "wInE", FR_DOWN, 4, 0}, - {1, 31, "Wine", FR_DOWN, 4, 0}, - - /* High-to-low ranges */ - {20, 5, "Wine", FR_DOWN, -1, 0}, - {2, 1, "Wine", FR_DOWN, -1, 0}, - {30, 29, "Wine", FR_DOWN, -1, 0}, - {20, 5, "Wine", 0, /*13*/ -1, 0}, - - /* Find nothing */ - {5, 10, "", FR_DOWN, -1, 0}, - {10, 5, "", FR_DOWN, -1, 0}, - {0, -1, "", FR_DOWN, -1, 0}, - {10, 5, "", 0, -1, 0}, - - /* Whole-word search */ - {0, -1, "wine", FR_DOWN | FR_WHOLEWORD, 18, 0}, - {0, -1, "win", FR_DOWN | FR_WHOLEWORD, -1, 0}, - {13, -1, "wine", FR_DOWN | FR_WHOLEWORD, 18, 0}, - {0, -1, "winewine", FR_DOWN | FR_WHOLEWORD, 0, 0}, - {10, -1, "winewine", FR_DOWN | FR_WHOLEWORD, 23, 0}, - {11, -1, "winewine", FR_WHOLEWORD, 23, 0}, - {31, -1, "winewine", FR_WHOLEWORD, -1, 0}, - - /* Bad ranges */ - {5, 200, "XXX", FR_DOWN, -1, 0}, - {-20, 20, "Wine", FR_DOWN, -1, 0}, - {-20, 20, "Wine", FR_DOWN, -1, 0}, - {-15, -20, "Wine", FR_DOWN, -1, 0}, - {1<<12, 1<<13, "Wine", FR_DOWN, -1, 0}, - - /* Check the case noted in bug 4479 where matches at end aren't recognized */ - {23, 31, "Wine", FR_DOWN | FR_MATCHCASE, 23, 0}, - {27, 31, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0}, - {27, 32, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0}, - {13, 31, "WineWine", FR_DOWN | FR_MATCHCASE, 23, 0}, - {13, 32, "WineWine", FR_DOWN | FR_MATCHCASE, 23, 0}, - - /* The backwards case of bug 4479; bounds look right - * Fails because backward find is wrong */ - {19, 20, "WINE", FR_MATCHCASE, -1, 0}, - {0, 20, "WINE", FR_MATCHCASE, 0, 0}, - - {0, -1, "wineWine wine", FR_DOWN, 0, 0}, - {0, -1, "wineWine wine", 0, 0, 0}, - {0, -1, "INEW", 0, 1, 0}, - {0, 31, "INEW", 0, 1, 0}, - {4, -1, "INEW", 0, 10, 0}, -}; - -static void check_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *f, int id) { - int findloc; - FINDTEXT ft; - memset(&ft, 0, sizeof(ft)); - ft.chrg.cpMin = f->start; - ft.chrg.cpMax = f->end; - ft.lpstrText = f->needle; - findloc = SendMessage(hwnd, EM_FINDTEXT, f->flags, (LPARAM) &ft); - ok(findloc == f->expected_loc, - "EM_FINDTEXT(%s,%d) '%s' in range(%d,%d), flags %08x, got start at %d, expected %d\n", - name, id, f->needle, f->start, f->end, f->flags, findloc, f->expected_loc); -} - -static void check_EM_FINDTEXTEX(HWND hwnd, const char *name, struct find_s *f, - int id) { - int findloc; - FINDTEXTEX ft; - int expected_end_loc; - - memset(&ft, 0, sizeof(ft)); - ft.chrg.cpMin = f->start; - ft.chrg.cpMax = f->end; - ft.lpstrText = f->needle; - findloc = SendMessage(hwnd, EM_FINDTEXTEX, f->flags, (LPARAM) &ft); - ok(findloc == f->expected_loc, - "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, start at %d\n", - name, id, f->needle, f->start, f->end, f->flags, findloc); - ok(ft.chrgText.cpMin == f->expected_loc, - "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, start at %d, expected %d\n", - name, id, f->needle, f->start, f->end, f->flags, ft.chrgText.cpMin, f->expected_loc); - expected_end_loc = ((f->expected_loc == -1) ? -1 - : f->expected_loc + strlen(f->needle)); - ok(ft.chrgText.cpMax == expected_end_loc, - "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, end at %d, expected %d\n", - name, id, f->needle, f->start, f->end, f->flags, ft.chrgText.cpMax, expected_end_loc); -} - -static void run_tests_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *find, - int num_tests) -{ - int i; - - for (i = 0; i < num_tests; i++) { - if (find[i]._todo_wine) { - todo_wine { - check_EM_FINDTEXT(hwnd, name, &find[i], i); - check_EM_FINDTEXTEX(hwnd, name, &find[i], i); - } - } else { - check_EM_FINDTEXT(hwnd, name, &find[i], i); - check_EM_FINDTEXTEX(hwnd, name, &find[i], i); - } - } -} - -static void test_EM_FINDTEXT(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - - /* Empty rich edit control */ - run_tests_EM_FINDTEXT(hwndRichEdit, "1", find_tests, - sizeof(find_tests)/sizeof(struct find_s)); - - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) haystack); - - /* Haystack text */ - run_tests_EM_FINDTEXT(hwndRichEdit, "2", find_tests2, - sizeof(find_tests2)/sizeof(struct find_s)); - - DestroyWindow(hwndRichEdit); -} - -static void test_EM_POSFROMCHAR(void) -{ - HWND hwndRichEdit = new_richedit(NULL); - int i; - POINTL pl; - LRESULT result; - unsigned int height = 0; - int xpos = 0; - static const char text[] = "aa\n" - "this is a long line of text that should be longer than the " - "control's width\n" - "cc\n" - "dd\n" - "ee\n" - "ff\n" - "gg\n" - "hh\n"; - - /* Fill the control to lines to ensure that most of them are offscreen */ - for (i = 0; i < 50; i++) - { - /* Do not modify the string; it is exactly 16 characters long. */ - SendMessage(hwndRichEdit, EM_SETSEL, 0, 0); - SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM)"0123456789ABCD\r\n"); - } - - /* - Richedit 1.0 receives a POINTL* on wParam and character offset on lParam, returns void. - Richedit 2.0 receives character offset on wParam, ignores lParam, returns MAKELONG(x,y) - Richedit 3.0 accepts either of the above API conventions. - */ - - /* Testing Richedit 1.0 API format */ - - /* Testing start of lines. X-offset should be constant on all cases (native is 1). - Since all lines are identical and drawn with the same font, - they should have the same height... right? - */ - for (i = 0; i < 50; i++) - { - /* All the lines are 16 characters long */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, i * 16); - ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result); - if (i == 0) - { - ok(pl.y == 0, "EM_POSFROMCHAR reports y=%d, expected 0\n", pl.y); - todo_wine { - ok(pl.x == 1, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - } - xpos = pl.x; - } - else if (i == 1) - { - ok(pl.y > 0, "EM_POSFROMCHAR reports y=%d, expected > 0\n", pl.y); - ok(pl.x == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - height = pl.y; - } - else - { - ok(pl.y == i * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", pl.y, i * height); - ok(pl.x == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - } - } - - /* Testing position at end of text */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, 50 * 16); - ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result); - ok(pl.y == 50 * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", pl.y, 50 * height); - ok(pl.x == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - - /* Testing position way past end of text */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, 55 * 16); - ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result); - ok(pl.y == 50 * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", pl.y, 50 * height); - ok(pl.x == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - - - /* Testing that vertical scrolling does, in fact, have an effect on EM_POSFROMCHAR */ - SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEDOWN, 0); /* line down */ - for (i = 0; i < 50; i++) - { - /* All the lines are 16 characters long */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, i * 16); - ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result); - ok(pl.y == (i - 1) * height, - "EM_POSFROMCHAR reports y=%d, expected %d\n", - pl.y, (i - 1) * height); - ok(pl.x == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - } - - /* Testing position at end of text */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, 50 * 16); - ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result); - ok(pl.y == (50 - 1) * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", pl.y, (50 - 1) * height); - ok(pl.x == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - - /* Testing position way past end of text */ - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, 55 * 16); - ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result); - ok(pl.y == (50 - 1) * height, "EM_POSFROMCHAR reports y=%d, expected %d\n", pl.y, (50 - 1) * height); - ok(pl.x == xpos, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - - /* Testing that horizontal scrolling does, in fact, have an effect on EM_POSFROMCHAR */ - SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); - SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEUP, 0); /* line up */ - - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, 0); - ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result); - ok(pl.y == 0, "EM_POSFROMCHAR reports y=%d, expected 0\n", pl.y); - todo_wine { - ok(pl.x == 1, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x); - } - xpos = pl.x; - - SendMessage(hwndRichEdit, WM_HSCROLL, SB_LINERIGHT, 0); - result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, 0); - ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result); - ok(pl.y == 0, "EM_POSFROMCHAR reports y=%d, expected 0\n", pl.y); - todo_wine { - /* Fails on builtin because horizontal scrollbar is not being shown */ - ok(pl.x < xpos, "EM_POSFROMCHAR reports x=%hd, expected value less than %d\n", pl.x, xpos); - } - DestroyWindow(hwndRichEdit); -} - - -START_TEST( editor ) -{ - MSG msg; - time_t end; - - /* Must explicitly LoadLibrary(). The test has no references to functions in - * RICHED32.DLL, so the linker doesn't actually link to it. */ - hmoduleRichEdit = LoadLibrary("RICHED32.DLL"); - ok(hmoduleRichEdit != NULL, "error: %d\n", (int) GetLastError()); - - test_WM_SETTEXT(); - test_EM_GETTEXTRANGE(); - test_EM_GETSELTEXT(); - test_WM_GETTEXTLENGTH(); - test_EM_STREAMIN(); - test_EM_STREAMOUT(); - test_EM_GETLINE(); - test_EM_LINELENGTH(); - test_EM_FINDTEXT(); - test_EM_POSFROMCHAR(); - - /* Set the environment variable WINETEST_RICHED32 to keep windows - * responsive and open for 30 seconds. This is useful for debugging. - * - * The message pump uses PeekMessage() to empty the queue and then sleeps for - * 50ms before retrying the queue. */ - end = time(NULL) + 30; - if (getenv( "WINETEST_RICHED32" )) { - while (time(NULL) < end) { - if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } else { - Sleep(50); - } - } - } - - OleFlushClipboard(); - ok(FreeLibrary(hmoduleRichEdit) != 0, "error: %d\n", (int) GetLastError()); -} diff --git a/rostests/winetests/riched32/riched32.rbuild b/rostests/winetests/riched32/riched32.rbuild deleted file mode 100644 index 995edbcbfac..00000000000 --- a/rostests/winetests/riched32/riched32.rbuild +++ /dev/null @@ -1,14 +0,0 @@ - - - - - . - editor.c - testlist.c - wine - ole32 - user32 - kernel32 - ntdll - - diff --git a/rostests/winetests/riched32/testlist.c b/rostests/winetests/riched32/testlist.c deleted file mode 100644 index 1248a7cdc6a..00000000000 --- a/rostests/winetests/riched32/testlist.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - - -const struct test winetest_testlist[] = -{ - { 0, 0 } -}; diff --git a/rostests/winetests/rpcrt4/cstub.c b/rostests/winetests/rpcrt4/cstub.c deleted file mode 100644 index 37b5985fb1e..00000000000 --- a/rostests/winetests/rpcrt4/cstub.c +++ /dev/null @@ -1,948 +0,0 @@ -/* - * Unit test suite for cstubs - * - * Copyright 2006 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 - */ - -#include - -#define PROXY_DELEGATION -#define COBJMACROS - -#include "wine/test.h" -#include -#include -#include -#include - - -#include "initguid.h" -#include "rpc.h" -#include "rpcdce.h" -#include "rpcproxy.h" - -static CStdPSFactoryBuffer PSFactoryBuffer; - -CSTDSTUBBUFFERRELEASE(&PSFactoryBuffer) -CSTDSTUBBUFFER2RELEASE(&PSFactoryBuffer) - -static GUID IID_if1 = {0x12345678, 1234, 5678, {12,34,56,78,90,0xab,0xcd,0xef}}; -static GUID IID_if2 = {0x12345679, 1234, 5678, {12,34,56,78,90,0xab,0xcd,0xef}}; -static GUID IID_if3 = {0x1234567a, 1234, 5678, {12,34,56,78,90,0xab,0xcd,0xef}}; -static GUID IID_if4 = {0x1234567b, 1234, 5678, {12,34,56,78,90,0xab,0xcd,0xef}}; - -static int my_alloc_called; -static int my_free_called; - -static void * CALLBACK my_alloc(size_t size) -{ - my_alloc_called++; - return NdrOleAllocate(size); -} - -static void CALLBACK my_free(void *ptr) -{ - my_free_called++; - NdrOleFree(ptr); -} - -typedef struct _MIDL_PROC_FORMAT_STRING -{ - short Pad; - unsigned char Format[ 2 ]; -} MIDL_PROC_FORMAT_STRING; - -typedef struct _MIDL_TYPE_FORMAT_STRING -{ - short Pad; - unsigned char Format[ 2 ]; -} MIDL_TYPE_FORMAT_STRING; - - -static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString = -{ - 0, - { - 0, 0 - } -}; - -static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString = -{ - 0, - { - 0, 0 - } -}; - -static const MIDL_STUB_DESC Object_StubDesc = - { - NULL, - my_alloc, - my_free, - { 0 }, - 0, - 0, - 0, - 0, - __MIDL_TypeFormatString.Format, - 1, /* -error bounds_check flag */ - 0x20000, /* Ndr library version */ - 0, - 0x50100a4, /* MIDL Version 5.1.164 */ - 0, - NULL, - 0, /* notify & notify_flag routine table */ - 1, /* Flags */ - 0, /* Reserved3 */ - 0, /* Reserved4 */ - 0 /* Reserved5 */ - }; - -static HRESULT WINAPI if1_fn1_Proxy(void *This) -{ - return S_OK; -} - -static void __RPC_STUB if1_fn1_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase) -{ - trace("fn1 stub\n"); -} - -static HRESULT WINAPI if1_fn2_Proxy(void *This) -{ - return S_OK; -} - -static void __RPC_STUB if1_fn2_Stub( - IRpcStubBuffer *This, - IRpcChannelBuffer *_pRpcChannelBuffer, - PRPC_MESSAGE _pRpcMessage, - DWORD *_pdwStubPhase) -{ - trace("fn2 stub\n"); -} - -static CINTERFACE_PROXY_VTABLE(5) if1_proxy_vtbl = -{ - { &IID_if1 }, - { IUnknown_QueryInterface_Proxy, - IUnknown_AddRef_Proxy, - IUnknown_Release_Proxy , - if1_fn1_Proxy, - if1_fn2_Proxy - } -}; - - -static const unsigned short if1_FormatStringOffsetTable[] = - { - 0, - 0 - }; - -static const MIDL_SERVER_INFO if1_server_info = - { - &Object_StubDesc, - 0, - __MIDL_ProcFormatString.Format, - &if1_FormatStringOffsetTable[-3], - 0, - 0, - 0, - 0}; - - -static const PRPC_STUB_FUNCTION if1_table[] = -{ - if1_fn1_Stub, - if1_fn2_Stub -}; - -static CInterfaceStubVtbl if1_stub_vtbl = -{ - { - &IID_if1, - &if1_server_info, - 5, - &if1_table[-3] - }, - { CStdStubBuffer_METHODS } -}; - -static CINTERFACE_PROXY_VTABLE(13) if2_proxy_vtbl = -{ - { &IID_if2 }, - { IUnknown_QueryInterface_Proxy, - IUnknown_AddRef_Proxy, - IUnknown_Release_Proxy , - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - } -}; - -static const unsigned short if2_FormatStringOffsetTable[] = - { - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - 0 - }; - -static const MIDL_SERVER_INFO if2_server_info = - { - &Object_StubDesc, - 0, - __MIDL_ProcFormatString.Format, - &if2_FormatStringOffsetTable[-3], - 0, - 0, - 0, - 0}; - - -static const PRPC_STUB_FUNCTION if2_table[] = -{ - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION -}; - -static CInterfaceStubVtbl if2_stub_vtbl = -{ - { - &IID_if2, - &if2_server_info, - 13, - &if2_table[-3] - }, - { CStdStubBuffer_DELEGATING_METHODS } -}; - -static CINTERFACE_PROXY_VTABLE(4) if3_proxy_vtbl = -{ - { &IID_if3 }, - { IUnknown_QueryInterface_Proxy, - IUnknown_AddRef_Proxy, - IUnknown_Release_Proxy , - if1_fn1_Proxy - } -}; - - -static const unsigned short if3_FormatStringOffsetTable[] = - { - 0, - 0 - }; - -static const MIDL_SERVER_INFO if3_server_info = - { - &Object_StubDesc, - 0, - __MIDL_ProcFormatString.Format, - &if3_FormatStringOffsetTable[-3], - 0, - 0, - 0, - 0}; - - -static const PRPC_STUB_FUNCTION if3_table[] = -{ - if1_fn1_Stub -}; - -static CInterfaceStubVtbl if3_stub_vtbl = -{ - { - &IID_if3, - &if3_server_info, - 4, - &if1_table[-3] - }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -}; - -static CINTERFACE_PROXY_VTABLE(7) if4_proxy_vtbl = -{ - { &IID_if4 }, - { IUnknown_QueryInterface_Proxy, - IUnknown_AddRef_Proxy, - IUnknown_Release_Proxy , - 0, - 0, - 0, - 0 - } -}; - -static const unsigned short if4_FormatStringOffsetTable[] = - { - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - (unsigned short) -1, - 0 - }; - -static const MIDL_SERVER_INFO if4_server_info = - { - &Object_StubDesc, - 0, - __MIDL_ProcFormatString.Format, - &if4_FormatStringOffsetTable[-3], - 0, - 0, - 0, - 0}; - - -static const PRPC_STUB_FUNCTION if4_table[] = -{ - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, - STUB_FORWARDING_FUNCTION, -}; - -static CInterfaceStubVtbl if4_stub_vtbl = -{ - { - &IID_if4, - &if4_server_info, - 7, - &if2_table[-3] - }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -}; - -static const CInterfaceProxyVtbl *cstub_ProxyVtblList[] = -{ - (const CInterfaceProxyVtbl *) &if1_proxy_vtbl, - (const CInterfaceProxyVtbl *) &if2_proxy_vtbl, - (const CInterfaceProxyVtbl *) &if3_proxy_vtbl, - (const CInterfaceProxyVtbl *) &if4_proxy_vtbl, - NULL -}; - -static const CInterfaceStubVtbl *cstub_StubVtblList[] = -{ - (const CInterfaceStubVtbl *) &if1_stub_vtbl, - (const CInterfaceStubVtbl *) &if2_stub_vtbl, - (const CInterfaceStubVtbl *) &if3_stub_vtbl, - (const CInterfaceStubVtbl *) &if4_stub_vtbl, - NULL -}; - -static PCInterfaceName const if_name_list[] = -{ - "if1", - "if2", - "if3", - "if4", - NULL -}; - -static const IID *base_iid_list[] = -{ - NULL, - &IID_ITypeLib, - NULL, - &IID_IDispatch, - NULL -}; - -#define cstub_CHECK_IID(n) IID_GENERIC_CHECK_IID( cstub, pIID, n) - -static int __stdcall iid_lookup( const IID * pIID, int * pIndex ) -{ - IID_BS_LOOKUP_SETUP - - IID_BS_LOOKUP_INITIAL_TEST( cstub, 4, 4 ) - IID_BS_LOOKUP_NEXT_TEST( cstub, 2 ) - IID_BS_LOOKUP_NEXT_TEST( cstub, 1 ) - IID_BS_LOOKUP_RETURN_RESULT( cstub, 4, *pIndex ) - -} - - -static const ExtendedProxyFileInfo my_proxy_file_info = -{ - (const PCInterfaceProxyVtblList *) &cstub_ProxyVtblList, - (const PCInterfaceStubVtblList *) &cstub_StubVtblList, - (const PCInterfaceName *) &if_name_list, - (const IID **) &base_iid_list, - &iid_lookup, - 4, - 1, - NULL, - 0, - 0, - 0 -}; - -static const ProxyFileInfo *proxy_file_list[] = { - &my_proxy_file_info, - NULL -}; - - -static IPSFactoryBuffer *test_NdrDllGetClassObject(void) -{ - IPSFactoryBuffer *ppsf = NULL; - const CLSID PSDispatch = {0x20420, 0, 0, {0xc0, 0, 0, 0, 0, 0, 0, 0x46}}; - HRESULT r; - HMODULE hmod = LoadLibraryA("rpcrt4.dll"); - void *CStd_QueryInterface = GetProcAddress(hmod, "CStdStubBuffer_QueryInterface"); - void *CStd_AddRef = GetProcAddress(hmod, "CStdStubBuffer_AddRef"); - void *CStd_Release = GetProcAddress(hmod, "NdrCStdStubBuffer_Release"); - void *CStd_Connect = GetProcAddress(hmod, "CStdStubBuffer_Connect"); - void *CStd_Disconnect = GetProcAddress(hmod, "CStdStubBuffer_Disconnect"); - void *CStd_Invoke = GetProcAddress(hmod, "CStdStubBuffer_Invoke"); - void *CStd_IsIIDSupported = GetProcAddress(hmod, "CStdStubBuffer_IsIIDSupported"); - void *CStd_CountRefs = GetProcAddress(hmod, "CStdStubBuffer_CountRefs"); - void *CStd_DebugServerQueryInterface = GetProcAddress(hmod, "CStdStubBuffer_DebugServerQueryInterface"); - void *CStd_DebugServerRelease = GetProcAddress(hmod, "CStdStubBuffer_DebugServerRelease"); - - r = NdrDllGetClassObject(&PSDispatch, &IID_IPSFactoryBuffer, (void**)&ppsf, proxy_file_list, - &PSDispatch, &PSFactoryBuffer); - - ok(r == S_OK, "ret %08x\n", r); - ok(ppsf != NULL, "ppsf == NULL\n"); - - ok(PSFactoryBuffer.pProxyFileList == proxy_file_list, "pfl not the same\n"); - ok(PSFactoryBuffer.pProxyFileList[0]->pStubVtblList == (PCInterfaceStubVtblList *) &cstub_StubVtblList, "stub vtbllist not the same\n"); - - /* if1 is non-delegating, if2 is delegating, if3 is non-delegating - but I've zero'ed the vtbl entries, similarly if4 is delegating - with zero'ed vtbl entries */ - -#define VTBL_TEST_NOT_CHANGE_TO(name, i) \ - ok(PSFactoryBuffer.pProxyFileList[0]->pStubVtblList[i]->Vtbl.name != CStd_##name, #name "vtbl %d updated %p %p\n", \ - i, PSFactoryBuffer.pProxyFileList[0]->pStubVtblList[i]->Vtbl.name, CStd_##name ); -#define VTBL_TEST_CHANGE_TO(name, i) \ - ok(PSFactoryBuffer.pProxyFileList[0]->pStubVtblList[i]->Vtbl.name == CStd_##name, #name "vtbl %d not updated %p %p\n", \ - i, PSFactoryBuffer.pProxyFileList[0]->pStubVtblList[i]->Vtbl.name, CStd_##name ); -#define VTBL_TEST_ZERO(name, i) \ - ok(PSFactoryBuffer.pProxyFileList[0]->pStubVtblList[i]->Vtbl.name == NULL, #name "vtbl %d not null %p\n", \ - i, PSFactoryBuffer.pProxyFileList[0]->pStubVtblList[i]->Vtbl.name ); - VTBL_TEST_NOT_CHANGE_TO(QueryInterface, 0); - VTBL_TEST_NOT_CHANGE_TO(AddRef, 0); - VTBL_TEST_NOT_CHANGE_TO(Release, 0); - VTBL_TEST_NOT_CHANGE_TO(Connect, 0); - VTBL_TEST_NOT_CHANGE_TO(Disconnect, 0); - VTBL_TEST_NOT_CHANGE_TO(Invoke, 0); - VTBL_TEST_NOT_CHANGE_TO(IsIIDSupported, 0); - VTBL_TEST_NOT_CHANGE_TO(CountRefs, 0); - VTBL_TEST_NOT_CHANGE_TO(DebugServerQueryInterface, 0); - VTBL_TEST_NOT_CHANGE_TO(DebugServerRelease, 0); - - VTBL_TEST_CHANGE_TO(QueryInterface, 1); - VTBL_TEST_CHANGE_TO(AddRef, 1); - VTBL_TEST_NOT_CHANGE_TO(Release, 1); - VTBL_TEST_NOT_CHANGE_TO(Connect, 1); - VTBL_TEST_NOT_CHANGE_TO(Disconnect, 1); - VTBL_TEST_CHANGE_TO(Invoke, 1); - VTBL_TEST_CHANGE_TO(IsIIDSupported, 1); - VTBL_TEST_NOT_CHANGE_TO(CountRefs, 1); - VTBL_TEST_CHANGE_TO(DebugServerQueryInterface, 1); - VTBL_TEST_CHANGE_TO(DebugServerRelease, 1); - - VTBL_TEST_CHANGE_TO(QueryInterface, 2); - VTBL_TEST_CHANGE_TO(AddRef, 2); - VTBL_TEST_ZERO(Release, 2); - VTBL_TEST_CHANGE_TO(Connect, 2); - VTBL_TEST_CHANGE_TO(Disconnect, 2); - VTBL_TEST_CHANGE_TO(Invoke, 2); - VTBL_TEST_CHANGE_TO(IsIIDSupported, 2); - VTBL_TEST_CHANGE_TO(CountRefs, 2); - VTBL_TEST_CHANGE_TO(DebugServerQueryInterface, 2); - VTBL_TEST_CHANGE_TO(DebugServerRelease, 2); - - VTBL_TEST_CHANGE_TO(QueryInterface, 3); - VTBL_TEST_CHANGE_TO(AddRef, 3); - VTBL_TEST_ZERO(Release, 3); - VTBL_TEST_NOT_CHANGE_TO(Connect, 3); - VTBL_TEST_NOT_CHANGE_TO(Disconnect, 3); - VTBL_TEST_CHANGE_TO(Invoke, 3); - VTBL_TEST_CHANGE_TO(IsIIDSupported, 3); - VTBL_TEST_NOT_CHANGE_TO(CountRefs, 3); - VTBL_TEST_CHANGE_TO(DebugServerQueryInterface, 3); - VTBL_TEST_CHANGE_TO(DebugServerRelease, 3); - - - -#undef VTBL_TEST_NOT_CHANGE_TO -#undef VTBL_TEST_CHANGE_TO -#undef VTBL_TEST_ZERO - - ok(PSFactoryBuffer.RefCount == 1, "ref count %d\n", PSFactoryBuffer.RefCount); - return ppsf; -} - -static int base_buffer_invoke_called; -static HRESULT WINAPI base_buffer_Invoke(IRpcStubBuffer *This, RPCOLEMESSAGE *msg, IRpcChannelBuffer *channel) -{ - base_buffer_invoke_called++; - ok(msg == (RPCOLEMESSAGE*)0xcafebabe, "msg ptr changed\n"); - ok(channel == (IRpcChannelBuffer*)0xdeadbeef, "channel ptr changed\n"); - return S_OK; /* returning any failure here results in an exception */ -} - -static IRpcStubBufferVtbl base_buffer_vtbl = { - (void*)0xcafebab0, - (void*)0xcafebab1, - (void*)0xcafebab2, - (void*)0xcafebab3, - (void*)0xcafebab4, - base_buffer_Invoke, - (void*)0xcafebab6, - (void*)0xcafebab7, - (void*)0xcafebab8, - (void*)0xcafebab9 -}; - -static void test_NdrStubForwardingFunction(void) -{ - void *This[5]; - void *real_this; - IRpcChannelBuffer *channel = (IRpcChannelBuffer*)0xdeadbeef; - RPC_MESSAGE *msg = (RPC_MESSAGE*)0xcafebabe; - DWORD *phase = (DWORD*)0x12345678; - IRpcStubBufferVtbl *base_buffer_vtbl_ptr = &base_buffer_vtbl; - IRpcStubBuffer *base_stub_buffer = (IRpcStubBuffer*)&base_buffer_vtbl_ptr; - - memset(This, 0xcc, sizeof(This)); - This[0] = base_stub_buffer; - real_this = &This[1]; - - NdrStubForwardingFunction( real_this, channel, msg, phase ); - ok(base_buffer_invoke_called == 1, "base_buffer_invoke called %d times\n", base_buffer_invoke_called); - -} - -static IRpcStubBuffer *create_stub(IPSFactoryBuffer *ppsf, REFIID iid, IUnknown *obj, HRESULT expected_result) -{ - IRpcStubBuffer *pstub = NULL; - HRESULT r; - - r = IPSFactoryBuffer_CreateStub(ppsf, iid, obj, &pstub); - ok(r == expected_result, "CreateStub returned %08x expected %08x\n", r, expected_result); - return pstub; -} - -static HRESULT WINAPI create_stub_test_QI(IUnknown *This, REFIID iid, void **ppv) -{ - ok(IsEqualIID(iid, &IID_if1), "incorrect iid\n"); - *ppv = (void*)0xdeadbeef; - return S_OK; -} - -static IUnknownVtbl create_stub_test_vtbl = -{ - create_stub_test_QI, - NULL, - NULL -}; - -static HRESULT WINAPI create_stub_test_fail_QI(IUnknown *This, REFIID iid, void **ppv) -{ - ok(IsEqualIID(iid, &IID_if1), "incorrect iid\n"); - *ppv = NULL; - return E_NOINTERFACE; -} - -static IUnknownVtbl create_stub_test_fail_vtbl = -{ - create_stub_test_fail_QI, - NULL, - NULL -}; - -static void test_CreateStub(IPSFactoryBuffer *ppsf) -{ - IUnknownVtbl *vtbl = &create_stub_test_vtbl; - IUnknown *obj = (IUnknown*)&vtbl; - IRpcStubBuffer *pstub = create_stub(ppsf, &IID_if1, obj, S_OK); - CStdStubBuffer *cstd_stub = (CStdStubBuffer*)pstub; - const CInterfaceStubHeader *header = ((const CInterfaceStubHeader *)cstd_stub->lpVtbl) - 1; - - ok(IsEqualIID(header->piid, &IID_if1), "header iid differs\n"); - ok(cstd_stub->RefCount == 1, "ref count %d\n", cstd_stub->RefCount); - /* 0xdeadbeef returned from create_stub_test_QI */ - ok(cstd_stub->pvServerObject == (void*)0xdeadbeef, "pvServerObject %p\n", cstd_stub->pvServerObject); - ok(cstd_stub->pPSFactory == ppsf, "pPSFactory %p\n", cstd_stub->pPSFactory); - - vtbl = &create_stub_test_fail_vtbl; - pstub = create_stub(ppsf, &IID_if1, obj, E_NOINTERFACE); - -} - -static HRESULT WINAPI connect_test_orig_QI(IUnknown *This, REFIID iid, void **ppv) -{ - ok(IsEqualIID(iid, &IID_if1) || - IsEqualIID(iid, &IID_if2), "incorrect iid\n"); - *ppv = (void*)This; - return S_OK; -} - -static int connect_test_orig_release_called; -static ULONG WINAPI connect_test_orig_release(IUnknown *This) -{ - connect_test_orig_release_called++; - return 0; -} - -static IUnknownVtbl connect_test_orig_vtbl = -{ - connect_test_orig_QI, - NULL, - connect_test_orig_release -}; - -static HRESULT WINAPI connect_test_new_QI(IUnknown *This, REFIID iid, void **ppv) -{ - ok(IsEqualIID(iid, &IID_if1) || - IsEqualIID(iid, &IID_if2), "incorrect iid\n"); - *ppv = (void*)0xcafebabe; - return S_OK; -} - -static IUnknownVtbl connect_test_new_vtbl = -{ - connect_test_new_QI, - NULL, - NULL -}; - -static HRESULT WINAPI connect_test_new_fail_QI(IUnknown *This, REFIID iid, void **ppv) -{ - ok(IsEqualIID(iid, &IID_if1), "incorrect iid\n"); - *ppv = (void*)0xdeadbeef; - return E_NOINTERFACE; -} - -static IUnknownVtbl connect_test_new_fail_vtbl = -{ - connect_test_new_fail_QI, - NULL, - NULL -}; - -static int connect_test_base_Connect_called; -static HRESULT WINAPI connect_test_base_Connect(IRpcStubBuffer *pstub, IUnknown *obj) -{ - connect_test_base_Connect_called++; - ok(*(void**)obj == (void*)0xbeefcafe, "unexpected obj %p\n", obj); - return S_OK; -} - -static IRpcStubBufferVtbl connect_test_base_stub_buffer_vtbl = -{ - (void*)0xcafebab0, - (void*)0xcafebab1, - (void*)0xcafebab2, - connect_test_base_Connect, - (void*)0xcafebab4, - (void*)0xcafebab5, - (void*)0xcafebab6, - (void*)0xcafebab7, - (void*)0xcafebab8, - (void*)0xcafebab9 -}; - -static void test_Connect(IPSFactoryBuffer *ppsf) -{ - IUnknownVtbl *orig_vtbl = &connect_test_orig_vtbl; - IUnknownVtbl *new_vtbl = &connect_test_new_vtbl; - IUnknownVtbl *new_fail_vtbl = &connect_test_new_fail_vtbl; - IUnknown *obj = (IUnknown*)&orig_vtbl; - IRpcStubBuffer *pstub = create_stub(ppsf, &IID_if1, obj, S_OK); - CStdStubBuffer *cstd_stub = (CStdStubBuffer*)pstub; - IRpcStubBufferVtbl *base_stub_buf_vtbl = &connect_test_base_stub_buffer_vtbl; - HRESULT r; - - obj = (IUnknown*)&new_vtbl; - r = IRpcStubBuffer_Connect(pstub, obj); - ok(r == S_OK, "r %08x\n", r); - ok(connect_test_orig_release_called == 1, "release called %d\n", connect_test_orig_release_called); - ok(cstd_stub->pvServerObject == (void*)0xcafebabe, "pvServerObject %p\n", cstd_stub->pvServerObject); - - cstd_stub->pvServerObject = (IUnknown*)&orig_vtbl; - obj = (IUnknown*)&new_fail_vtbl; - r = IRpcStubBuffer_Connect(pstub, obj); - ok(r == E_NOINTERFACE, "r %08x\n", r); - ok(cstd_stub->pvServerObject == (void*)0xdeadbeef, "pvServerObject %p\n", cstd_stub->pvServerObject); - ok(connect_test_orig_release_called == 2, "release called %d\n", connect_test_orig_release_called); - - /* Now use a delegated stub. - - We know from the NdrStubForwardFunction test that - (void**)pstub-1 is the base interface stub buffer. This shows - that (void**)pstub-2 contains the address of a vtable that gets - passed to the base interface's Connect method. Note that - (void**)pstub-2 itself gets passed to Connect and not - *((void**)pstub-2), so it should contain the vtable ptr and not - an interface ptr. */ - - obj = (IUnknown*)&orig_vtbl; - pstub = create_stub(ppsf, &IID_if2, obj, S_OK); - *((void**)pstub-1) = &base_stub_buf_vtbl; - *((void**)pstub-2) = (void*)0xbeefcafe; - - obj = (IUnknown*)&new_vtbl; - r = IRpcStubBuffer_Connect(pstub, obj); - ok(connect_test_base_Connect_called == 1, "connect_test_bsae_Connect called %d times\n", - connect_test_base_Connect_called); - ok(connect_test_orig_release_called == 3, "release called %d\n", connect_test_orig_release_called); - cstd_stub = (CStdStubBuffer*)pstub; - ok(cstd_stub->pvServerObject == (void*)0xcafebabe, "pvServerObject %p\n", cstd_stub->pvServerObject); -} - -static void test_Disconnect(IPSFactoryBuffer *ppsf) -{ - IUnknownVtbl *orig_vtbl = &connect_test_orig_vtbl; - IUnknown *obj = (IUnknown*)&orig_vtbl; - IRpcStubBuffer *pstub = create_stub(ppsf, &IID_if1, obj, S_OK); - CStdStubBuffer *cstd_stub = (CStdStubBuffer*)pstub; - - connect_test_orig_release_called = 0; - IRpcStubBuffer_Disconnect(pstub); - ok(connect_test_orig_release_called == 1, "release called %d\n", connect_test_orig_release_called); - ok(cstd_stub->pvServerObject == NULL, "pvServerObject %p\n", cstd_stub->pvServerObject); -} - - -static int release_test_psfacbuf_release_called; -static ULONG WINAPI release_test_pretend_psfacbuf_release(IUnknown *pUnk) -{ - release_test_psfacbuf_release_called++; - return 1; -} - -static IUnknownVtbl release_test_pretend_psfacbuf_vtbl = -{ - NULL, - NULL, - release_test_pretend_psfacbuf_release -}; - -static void test_Release(IPSFactoryBuffer *ppsf) -{ - LONG facbuf_refs; - IUnknownVtbl *orig_vtbl = &connect_test_orig_vtbl; - IUnknown *obj = (IUnknown*)&orig_vtbl; - IUnknownVtbl *pretend_psfacbuf_vtbl = &release_test_pretend_psfacbuf_vtbl; - IUnknown *pretend_psfacbuf = (IUnknown *)&pretend_psfacbuf_vtbl; - IRpcStubBuffer *pstub = create_stub(ppsf, &IID_if1, obj, S_OK); - CStdStubBuffer *cstd_stub = (CStdStubBuffer*)pstub; - - facbuf_refs = PSFactoryBuffer.RefCount; - - /* This shows that NdrCStdStubBuffer_Release doesn't call Disconnect */ - ok(cstd_stub->RefCount == 1, "ref count %d\n", cstd_stub->RefCount); - connect_test_orig_release_called = 0; - IRpcStubBuffer_Release(pstub); -todo_wine { - ok(connect_test_orig_release_called == 0, "release called %d\n", connect_test_orig_release_called); -} - ok(PSFactoryBuffer.RefCount == facbuf_refs - 1, "factory buffer refs %d orig %d\n", PSFactoryBuffer.RefCount, facbuf_refs); - - /* This shows that NdrCStdStubBuffer_Release calls Release on its 2nd arg, rather than on This->pPSFactory - (which are usually the same and indeed it's odd that _Release requires this 2nd arg). */ - pstub = create_stub(ppsf, &IID_if1, obj, S_OK); - ok(PSFactoryBuffer.RefCount == facbuf_refs, "factory buffer refs %d orig %d\n", PSFactoryBuffer.RefCount, facbuf_refs); - NdrCStdStubBuffer_Release(pstub, (IPSFactoryBuffer*)pretend_psfacbuf); - ok(release_test_psfacbuf_release_called == 1, "pretend_psfacbuf_release called %d\n", release_test_psfacbuf_release_called); - ok(PSFactoryBuffer.RefCount == facbuf_refs, "factory buffer refs %d orig %d\n", PSFactoryBuffer.RefCount, facbuf_refs); -} - -static HRESULT WINAPI delegating_invoke_test_QI(ITypeLib *pUnk, REFIID iid, void** ppv) -{ - - *ppv = pUnk; - return S_OK; -} - -static ULONG WINAPI delegating_invoke_test_addref(ITypeLib *pUnk) -{ - return 1; -} - -static ULONG WINAPI delegating_invoke_test_release(ITypeLib *pUnk) -{ - return 1; -} - -static UINT WINAPI delegating_invoke_test_get_type_info_count(ITypeLib *pUnk) -{ - return 0xabcdef; -} - -static ITypeLibVtbl delegating_invoke_test_obj_vtbl = -{ - delegating_invoke_test_QI, - delegating_invoke_test_addref, - delegating_invoke_test_release, - delegating_invoke_test_get_type_info_count, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL -}; - -static HRESULT WINAPI delegating_invoke_chan_query_interface(IRpcChannelBuffer *pchan, - REFIID iid, - void **ppv) -{ - ok(0, "call to QueryInterface not expected\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI delegating_invoke_chan_add_ref(IRpcChannelBuffer *pchan) -{ - return 2; -} - -static ULONG WINAPI delegating_invoke_chan_release(IRpcChannelBuffer *pchan) -{ - return 1; -} - -static HRESULT WINAPI delegating_invoke_chan_get_buffer(IRpcChannelBuffer *pchan, - RPCOLEMESSAGE *msg, - REFIID iid) -{ - msg->Buffer = HeapAlloc(GetProcessHeap(), 0, msg->cbBuffer); - return S_OK; -} - -static HRESULT WINAPI delegating_invoke_chan_send_receive(IRpcChannelBuffer *pchan, - RPCOLEMESSAGE *pMessage, - ULONG *pStatus) -{ - ok(0, "call to SendReceive not expected\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI delegating_invoke_chan_free_buffer(IRpcChannelBuffer *pchan, - RPCOLEMESSAGE *pMessage) -{ - ok(0, "call to FreeBuffer not expected\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI delegating_invoke_chan_get_dest_ctx(IRpcChannelBuffer *pchan, - DWORD *pdwDestContext, - void **ppvDestContext) -{ - *pdwDestContext = MSHCTX_LOCAL; - *ppvDestContext = NULL; - return S_OK; -} - -static HRESULT WINAPI delegating_invoke_chan_is_connected(IRpcChannelBuffer *pchan) -{ - ok(0, "call to IsConnected not expected\n"); - return E_NOTIMPL; -} - -static IRpcChannelBufferVtbl delegating_invoke_test_rpc_chan_vtbl = -{ - delegating_invoke_chan_query_interface, - delegating_invoke_chan_add_ref, - delegating_invoke_chan_release, - delegating_invoke_chan_get_buffer, - delegating_invoke_chan_send_receive, - delegating_invoke_chan_free_buffer, - delegating_invoke_chan_get_dest_ctx, - delegating_invoke_chan_is_connected -}; - -static void test_delegating_Invoke(IPSFactoryBuffer *ppsf) -{ - ITypeLibVtbl *obj_vtbl = &delegating_invoke_test_obj_vtbl; - IUnknown *obj = (IUnknown*)&obj_vtbl; - IRpcStubBuffer *pstub = create_stub(ppsf, &IID_if2, obj, S_OK); - IRpcChannelBufferVtbl *pchan_vtbl = &delegating_invoke_test_rpc_chan_vtbl; - IRpcChannelBuffer *pchan = (IRpcChannelBuffer *)&pchan_vtbl; - HRESULT r = E_FAIL; - RPCOLEMESSAGE msg; - - memset(&msg, 0, sizeof(msg)); - msg.dataRepresentation = NDR_LOCAL_DATA_REPRESENTATION; - msg.iMethod = 3; - r = IRpcStubBuffer_Invoke(pstub, &msg, pchan); - ok(r == S_OK, "ret %08x\n", r); - if(r == S_OK) - { - ok(*(DWORD*)msg.Buffer == 0xabcdef, "buf[0] %08x\n", *(DWORD*)msg.Buffer); - ok(*((DWORD*)msg.Buffer + 1) == S_OK, "buf[1] %08x\n", *((DWORD*)msg.Buffer + 1)); - } - /* free the buffer allocated by delegating_invoke_chan_get_buffer */ - HeapFree(GetProcessHeap(), 0, msg.Buffer); - IRpcStubBuffer_Release(pstub); -} - -START_TEST( cstub ) -{ - IPSFactoryBuffer *ppsf; - - OleInitialize(NULL); - - ppsf = test_NdrDllGetClassObject(); - test_NdrStubForwardingFunction(); - test_CreateStub(ppsf); - test_Connect(ppsf); - test_Disconnect(ppsf); - test_Release(ppsf); - test_delegating_Invoke(ppsf); - - OleUninitialize(); -} diff --git a/rostests/winetests/rpcrt4/generated.c b/rostests/winetests/rpcrt4/generated.c deleted file mode 100644 index 609e49cbf25..00000000000 --- a/rostests/winetests/rpcrt4/generated.c +++ /dev/null @@ -1,723 +0,0 @@ -/* File generated automatically from tools/winapi/test.dat; do not edit! */ -/* This file can be copied, modified and distributed without restriction. */ - -/* - * Unit tests for data structure packing - */ - -#define WINVER 0x0501 -#define _WIN32_IE 0x0501 -#define _WIN32_WINNT 0x0501 - -#define WINE_NOWINSOCK - -#include -#include "windef.h" -#include "winbase.h" -#include "rpc.h" -#include "rpcndr.h" -#include "rpcproxy.h" - -#include "wine/test.h" - -/*********************************************************************** - * Compatibility macros - */ - -#define DWORD_PTR UINT_PTR -#define LONG_PTR INT_PTR -#define ULONG_PTR UINT_PTR - -/*********************************************************************** - * Windows API extension - */ - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field) -#elif defined(__GNUC__) -# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field) -#else -/* FIXME: Not sure if is possible to do without compiler extension */ -#endif - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define _TYPE_ALIGNMENT(type) __alignof(type) -#elif defined(__GNUC__) -# define _TYPE_ALIGNMENT(type) __alignof__(type) -#else -/* - * FIXME: Not sure if is possible to do without compiler extension - * (if type is not just a name that is, if so the normal) - * TYPE_ALIGNMENT can be used) - */ -#endif - -#if defined(TYPE_ALIGNMENT) && defined(_MSC_VER) && _MSC_VER >= 800 && !defined(__cplusplus) -#pragma warning(disable:4116) -#endif - -#if !defined(TYPE_ALIGNMENT) && defined(_TYPE_ALIGNMENT) -# define TYPE_ALIGNMENT _TYPE_ALIGNMENT -#endif - -/*********************************************************************** - * Test helper macros - */ - -#ifdef FIELD_ALIGNMENT -# define TEST_FIELD_ALIGNMENT(type, field, align) \ - ok(FIELD_ALIGNMENT(type, field) == align, \ - "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \ - (int)FIELD_ALIGNMENT(type, field)) -#else -# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0) -#endif - -#define TEST_FIELD_OFFSET(type, field, offset) \ - ok(FIELD_OFFSET(type, field) == offset, \ - "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \ - (long int)FIELD_OFFSET(type, field)) - -#ifdef _TYPE_ALIGNMENT -#define TEST__TYPE_ALIGNMENT(type, align) \ - ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type)) -#else -# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#ifdef TYPE_ALIGNMENT -#define TEST_TYPE_ALIGNMENT(type, align) \ - ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type)) -#else -# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#define TEST_TYPE_SIZE(type, size) \ - ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type))) - -/*********************************************************************** - * Test macros - */ - -#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \ - TEST_TYPE_SIZE(field_type, field_size); \ - TEST_FIELD_ALIGNMENT(type, field_name, field_align); \ - TEST_FIELD_OFFSET(type, field_name, field_offset); \ - -#define TEST_TYPE(type, size, align) \ - TEST_TYPE_ALIGNMENT(type, align); \ - TEST_TYPE_SIZE(type, size) - -#define TEST_TYPE_POINTER(type, size, align) \ - TEST__TYPE_ALIGNMENT(*(type)0, align); \ - TEST_TYPE_SIZE(*(type)0, size) - -#define TEST_TYPE_SIGNED(type) \ - ok((type) -1 < 0, "(" #type ") -1 < 0\n"); - -#define TEST_TYPE_UNSIGNED(type) \ - ok((type) -1 > 0, "(" #type ") -1 > 0\n"); - -static void test_pack_I_RPC_HANDLE(void) -{ - /* I_RPC_HANDLE */ - TEST_TYPE(I_RPC_HANDLE, 4, 4); -} - -static void test_pack_RPC_STATUS(void) -{ - /* RPC_STATUS */ - TEST_TYPE(RPC_STATUS, 4, 4); - TEST_TYPE_SIGNED(RPC_STATUS); -} - -static void test_pack_PRPC_POLICY(void) -{ - /* PRPC_POLICY */ - TEST_TYPE(PRPC_POLICY, 4, 4); - TEST_TYPE_POINTER(PRPC_POLICY, 12, 4); -} - -static void test_pack_RPC_AUTH_IDENTITY_HANDLE(void) -{ - /* RPC_AUTH_IDENTITY_HANDLE */ - TEST_TYPE(RPC_AUTH_IDENTITY_HANDLE, 4, 4); -} - -static void test_pack_RPC_AUTH_KEY_RETRIEVAL_FN(void) -{ - /* RPC_AUTH_KEY_RETRIEVAL_FN */ -} - -static void test_pack_RPC_AUTHZ_HANDLE(void) -{ - /* RPC_AUTHZ_HANDLE */ - TEST_TYPE(RPC_AUTHZ_HANDLE, 4, 4); -} - -static void test_pack_RPC_BINDING_HANDLE(void) -{ - /* RPC_BINDING_HANDLE */ - TEST_TYPE(RPC_BINDING_HANDLE, 4, 4); -} - -static void test_pack_RPC_BINDING_VECTOR(void) -{ - /* RPC_BINDING_VECTOR (pack 4) */ - TEST_TYPE(RPC_BINDING_VECTOR, 8, 4); - TEST_FIELD(RPC_BINDING_VECTOR, unsigned long, Count, 0, 4, 4); - TEST_FIELD(RPC_BINDING_VECTOR, RPC_BINDING_HANDLE[1], BindingH, 4, 4, 4); -} - -static void test_pack_RPC_IF_HANDLE(void) -{ - /* RPC_IF_HANDLE */ - TEST_TYPE(RPC_IF_HANDLE, 4, 4); -} - -static void test_pack_RPC_IF_ID(void) -{ - /* RPC_IF_ID (pack 4) */ -} - -static void test_pack_RPC_POLICY(void) -{ - /* RPC_POLICY (pack 4) */ - TEST_TYPE(RPC_POLICY, 12, 4); - TEST_FIELD(RPC_POLICY, unsigned int, Length, 0, 4, 4); - TEST_FIELD(RPC_POLICY, unsigned long, EndpointFlags, 4, 4, 4); - TEST_FIELD(RPC_POLICY, unsigned long, NICFlags, 8, 4, 4); -} - -static void test_pack_UUID_VECTOR(void) -{ - /* UUID_VECTOR (pack 4) */ - TEST_TYPE(UUID_VECTOR, 8, 4); - TEST_FIELD(UUID_VECTOR, unsigned long, Count, 0, 4, 4); - TEST_FIELD(UUID_VECTOR, UUID *[1], Uuid, 4, 4, 4); -} - -static void test_pack_PRPC_CLIENT_INTERFACE(void) -{ - /* PRPC_CLIENT_INTERFACE */ - TEST_TYPE(PRPC_CLIENT_INTERFACE, 4, 4); -} - -static void test_pack_PRPC_DISPATCH_TABLE(void) -{ - /* PRPC_DISPATCH_TABLE */ - TEST_TYPE(PRPC_DISPATCH_TABLE, 4, 4); - TEST_TYPE_POINTER(PRPC_DISPATCH_TABLE, 12, 4); -} - -static void test_pack_PRPC_MESSAGE(void) -{ - /* PRPC_MESSAGE */ - TEST_TYPE(PRPC_MESSAGE, 4, 4); - TEST_TYPE_POINTER(PRPC_MESSAGE, 44, 4); -} - -static void test_pack_PRPC_PROTSEQ_ENDPOINT(void) -{ - /* PRPC_PROTSEQ_ENDPOINT */ - TEST_TYPE(PRPC_PROTSEQ_ENDPOINT, 4, 4); - TEST_TYPE_POINTER(PRPC_PROTSEQ_ENDPOINT, 8, 4); -} - -static void test_pack_PRPC_SERVER_INTERFACE(void) -{ - /* PRPC_SERVER_INTERFACE */ - TEST_TYPE(PRPC_SERVER_INTERFACE, 4, 4); -} - -static void test_pack_PRPC_SYNTAX_IDENTIFIER(void) -{ - /* PRPC_SYNTAX_IDENTIFIER */ - TEST_TYPE(PRPC_SYNTAX_IDENTIFIER, 4, 4); - TEST_TYPE_POINTER(PRPC_SYNTAX_IDENTIFIER, 20, 4); -} - -static void test_pack_RPC_CLIENT_INTERFACE(void) -{ - /* RPC_CLIENT_INTERFACE (pack 4) */ - TEST_FIELD(RPC_CLIENT_INTERFACE, unsigned int, Length, 0, 4, 4); -} - -static void test_pack_RPC_DISPATCH_FUNCTION(void) -{ - /* RPC_DISPATCH_FUNCTION */ -} - -static void test_pack_RPC_DISPATCH_TABLE(void) -{ - /* RPC_DISPATCH_TABLE (pack 4) */ - TEST_TYPE(RPC_DISPATCH_TABLE, 12, 4); - TEST_FIELD(RPC_DISPATCH_TABLE, unsigned int, DispatchTableCount, 0, 4, 4); - TEST_FIELD(RPC_DISPATCH_TABLE, RPC_DISPATCH_FUNCTION*, DispatchTable, 4, 4, 4); - TEST_FIELD(RPC_DISPATCH_TABLE, LONG_PTR, Reserved, 8, 4, 4); -} - -static void test_pack_RPC_MESSAGE(void) -{ - /* RPC_MESSAGE (pack 4) */ - TEST_TYPE(RPC_MESSAGE, 44, 4); - TEST_FIELD(RPC_MESSAGE, RPC_BINDING_HANDLE, Handle, 0, 4, 4); - TEST_FIELD(RPC_MESSAGE, unsigned long, DataRepresentation, 4, 4, 4); - TEST_FIELD(RPC_MESSAGE, void*, Buffer, 8, 4, 4); - TEST_FIELD(RPC_MESSAGE, unsigned int, BufferLength, 12, 4, 4); - TEST_FIELD(RPC_MESSAGE, unsigned int, ProcNum, 16, 4, 4); - TEST_FIELD(RPC_MESSAGE, PRPC_SYNTAX_IDENTIFIER, TransferSyntax, 20, 4, 4); - TEST_FIELD(RPC_MESSAGE, void*, RpcInterfaceInformation, 24, 4, 4); - TEST_FIELD(RPC_MESSAGE, void*, ReservedForRuntime, 28, 4, 4); - TEST_FIELD(RPC_MESSAGE, RPC_MGR_EPV*, ManagerEpv, 32, 4, 4); - TEST_FIELD(RPC_MESSAGE, void*, ImportContext, 36, 4, 4); - TEST_FIELD(RPC_MESSAGE, unsigned long, RpcFlags, 40, 4, 4); -} - -static void test_pack_RPC_PROTSEQ_ENDPOINT(void) -{ - /* RPC_PROTSEQ_ENDPOINT (pack 4) */ - TEST_TYPE(RPC_PROTSEQ_ENDPOINT, 8, 4); - TEST_FIELD(RPC_PROTSEQ_ENDPOINT, unsigned char*, RpcProtocolSequence, 0, 4, 4); - TEST_FIELD(RPC_PROTSEQ_ENDPOINT, unsigned char*, Endpoint, 4, 4, 4); -} - -static void test_pack_RPC_SERVER_INTERFACE(void) -{ - /* RPC_SERVER_INTERFACE (pack 4) */ - TEST_FIELD(RPC_SERVER_INTERFACE, unsigned int, Length, 0, 4, 4); -} - -static void test_pack_RPC_SYNTAX_IDENTIFIER(void) -{ - /* RPC_SYNTAX_IDENTIFIER (pack 4) */ - TEST_TYPE(RPC_SYNTAX_IDENTIFIER, 20, 4); - TEST_FIELD(RPC_SYNTAX_IDENTIFIER, GUID, SyntaxGUID, 0, 16, 4); - TEST_FIELD(RPC_SYNTAX_IDENTIFIER, RPC_VERSION, SyntaxVersion, 16, 4, 2); -} - -static void test_pack_RPC_VERSION(void) -{ - /* RPC_VERSION (pack 4) */ - TEST_TYPE(RPC_VERSION, 4, 2); - TEST_FIELD(RPC_VERSION, unsigned short, MajorVersion, 0, 2, 2); - TEST_FIELD(RPC_VERSION, unsigned short, MinorVersion, 2, 2, 2); -} - -static void test_pack_ARRAY_INFO(void) -{ - /* ARRAY_INFO (pack 4) */ - TEST_TYPE(ARRAY_INFO, 24, 4); - TEST_FIELD(ARRAY_INFO, LONG, Dimension, 0, 4, 4); - TEST_FIELD(ARRAY_INFO, ULONG *, BufferConformanceMark, 4, 4, 4); - TEST_FIELD(ARRAY_INFO, ULONG *, BufferVarianceMark, 8, 4, 4); - TEST_FIELD(ARRAY_INFO, ULONG *, MaxCountArray, 12, 4, 4); - TEST_FIELD(ARRAY_INFO, ULONG *, OffsetArray, 16, 4, 4); - TEST_FIELD(ARRAY_INFO, ULONG *, ActualCountArray, 20, 4, 4); -} - -static void test_pack_COMM_FAULT_OFFSETS(void) -{ - /* COMM_FAULT_OFFSETS (pack 4) */ - TEST_TYPE(COMM_FAULT_OFFSETS, 4, 2); - TEST_FIELD(COMM_FAULT_OFFSETS, short, CommOffset, 0, 2, 2); - TEST_FIELD(COMM_FAULT_OFFSETS, short, FaultOffset, 2, 2, 2); -} - -static void test_pack_CS_STUB_INFO(void) -{ - /* CS_STUB_INFO (pack 4) */ - TEST_TYPE(CS_STUB_INFO, 12, 4); - TEST_FIELD(CS_STUB_INFO, ULONG, WireCodeset, 0, 4, 4); - TEST_FIELD(CS_STUB_INFO, ULONG, DesiredReceivingCodeset, 4, 4, 4); - TEST_FIELD(CS_STUB_INFO, void *, CSArrayInfo, 8, 4, 4); -} - -static void test_pack_EXPR_EVAL(void) -{ - /* EXPR_EVAL */ -} - -static void test_pack_FULL_PTR_TO_REFID_ELEMENT(void) -{ - /* FULL_PTR_TO_REFID_ELEMENT (pack 4) */ - TEST_TYPE(FULL_PTR_TO_REFID_ELEMENT, 16, 4); - TEST_FIELD(FULL_PTR_TO_REFID_ELEMENT, struct _FULL_PTR_TO_REFID_ELEMENT *, Next, 0, 4, 4); - TEST_FIELD(FULL_PTR_TO_REFID_ELEMENT, void *, Pointer, 4, 4, 4); - TEST_FIELD(FULL_PTR_TO_REFID_ELEMENT, ULONG, RefId, 8, 4, 4); - TEST_FIELD(FULL_PTR_TO_REFID_ELEMENT, unsigned char, State, 12, 1, 1); -} - -static void test_pack_FULL_PTR_XLAT_TABLES(void) -{ - /* FULL_PTR_XLAT_TABLES (pack 4) */ -} - -static void test_pack_GENERIC_BINDING_INFO(void) -{ - /* GENERIC_BINDING_INFO (pack 4) */ - TEST_FIELD(GENERIC_BINDING_INFO, void *, pObj, 0, 4, 4); - TEST_FIELD(GENERIC_BINDING_INFO, unsigned int, Size, 4, 4, 4); -} - -static void test_pack_GENERIC_BINDING_ROUTINE_PAIR(void) -{ - /* GENERIC_BINDING_ROUTINE_PAIR (pack 4) */ -} - -static void test_pack_MALLOC_FREE_STRUCT(void) -{ - /* MALLOC_FREE_STRUCT (pack 4) */ -} - -static void test_pack_MIDL_FORMAT_STRING(void) -{ - /* MIDL_FORMAT_STRING (pack 4) */ - TEST_FIELD(MIDL_FORMAT_STRING, short, Pad, 0, 2, 2); -} - -static void test_pack_MIDL_SERVER_INFO(void) -{ - /* MIDL_SERVER_INFO (pack 4) */ - TEST_TYPE(MIDL_SERVER_INFO, 32, 4); - TEST_FIELD(MIDL_SERVER_INFO, PMIDL_STUB_DESC, pStubDesc, 0, 4, 4); - TEST_FIELD(MIDL_SERVER_INFO, SERVER_ROUTINE *, DispatchTable, 4, 4, 4); - TEST_FIELD(MIDL_SERVER_INFO, PFORMAT_STRING, ProcString, 8, 4, 4); - TEST_FIELD(MIDL_SERVER_INFO, unsigned short *, FmtStringOffset, 12, 4, 4); - TEST_FIELD(MIDL_SERVER_INFO, STUB_THUNK *, ThunkTable, 16, 4, 4); - TEST_FIELD(MIDL_SERVER_INFO, PRPC_SYNTAX_IDENTIFIER, pTransferSyntax, 20, 4, 4); - TEST_FIELD(MIDL_SERVER_INFO, ULONG_PTR, nCount, 24, 4, 4); - TEST_FIELD(MIDL_SERVER_INFO, PMIDL_SYNTAX_INFO, pSyntaxInfo, 28, 4, 4); -} - -static void test_pack_MIDL_STUB_DESC(void) -{ - /* MIDL_STUB_DESC (pack 4) */ - TEST_FIELD(MIDL_STUB_DESC, void *, RpcInterfaceInformation, 0, 4, 4); -} - -static void test_pack_MIDL_STUB_MESSAGE(void) -{ - /* MIDL_STUB_MESSAGE (pack 4) */ - TEST_FIELD(MIDL_STUB_MESSAGE, PRPC_MESSAGE, RpcMsg, 0, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, unsigned char *, Buffer, 4, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, unsigned char *, BufferStart, 8, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, unsigned char *, BufferEnd, 12, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, unsigned char *, BufferMark, 16, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, ULONG, BufferLength, 20, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, ULONG, MemorySize, 24, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, unsigned char *, Memory, 28, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, int, ReuseBuffer, 36, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, struct NDR_ALLOC_ALL_NODES_CONTEXT *, pAllocAllNodesContext, 40, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, struct NDR_POINTER_QUEUE_STATE *, pPointerQueueState, 44, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, int, IgnoreEmbeddedPointers, 48, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, unsigned char *, PointerBufferMark, 52, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, unsigned char, CorrDespIncrement, 56, 1, 1); - TEST_FIELD(MIDL_STUB_MESSAGE, unsigned char, uFlags, 57, 1, 1); - TEST_FIELD(MIDL_STUB_MESSAGE, ULONG_PTR, MaxCount, 60, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, ULONG, Offset, 64, 4, 4); - TEST_FIELD(MIDL_STUB_MESSAGE, ULONG, ActualCount, 68, 4, 4); -} - -static void test_pack_MIDL_STUBLESS_PROXY_INFO(void) -{ - /* MIDL_STUBLESS_PROXY_INFO (pack 4) */ - TEST_TYPE(MIDL_STUBLESS_PROXY_INFO, 24, 4); - TEST_FIELD(MIDL_STUBLESS_PROXY_INFO, PMIDL_STUB_DESC, pStubDesc, 0, 4, 4); - TEST_FIELD(MIDL_STUBLESS_PROXY_INFO, PFORMAT_STRING, ProcFormatString, 4, 4, 4); - TEST_FIELD(MIDL_STUBLESS_PROXY_INFO, unsigned short *, FormatStringOffset, 8, 4, 4); - TEST_FIELD(MIDL_STUBLESS_PROXY_INFO, PRPC_SYNTAX_IDENTIFIER, pTransferSyntax, 12, 4, 4); - TEST_FIELD(MIDL_STUBLESS_PROXY_INFO, ULONG_PTR, nCount, 16, 4, 4); - TEST_FIELD(MIDL_STUBLESS_PROXY_INFO, PMIDL_SYNTAX_INFO, pSyntaxInfo, 20, 4, 4); -} - -static void test_pack_MIDL_SYNTAX_INFO(void) -{ - /* MIDL_SYNTAX_INFO (pack 4) */ -} - -static void test_pack_NDR_CCONTEXT(void) -{ - /* NDR_CCONTEXT */ - TEST_TYPE(NDR_CCONTEXT, 4, 4); -} - -static void test_pack_NDR_NOTIFY_ROUTINE(void) -{ - /* NDR_NOTIFY_ROUTINE */ -} - -static void test_pack_NDR_NOTIFY2_ROUTINE(void) -{ - /* NDR_NOTIFY2_ROUTINE */ -} - -static void test_pack_NDR_RUNDOWN(void) -{ - /* NDR_RUNDOWN */ -} - -static void test_pack_NDR_SCONTEXT(void) -{ - /* NDR_SCONTEXT */ - TEST_TYPE(NDR_SCONTEXT, 4, 4); -} - -static void test_pack_NDR_USER_MARSHAL_INFO(void) -{ - /* NDR_USER_MARSHAL_INFO (pack 4) */ - TEST_FIELD(NDR_USER_MARSHAL_INFO, ULONG, InformationLevel, 0, 4, 4); -} - -static void test_pack_NDR_USER_MARSHAL_INFO_LEVEL1(void) -{ - /* NDR_USER_MARSHAL_INFO_LEVEL1 (pack 4) */ - TEST_FIELD(NDR_USER_MARSHAL_INFO_LEVEL1, void *, Buffer, 0, 4, 4); - TEST_FIELD(NDR_USER_MARSHAL_INFO_LEVEL1, ULONG, BufferSize, 4, 4, 4); -} - -static void test_pack_PARRAY_INFO(void) -{ - /* PARRAY_INFO */ - TEST_TYPE(PARRAY_INFO, 4, 4); - TEST_TYPE_POINTER(PARRAY_INFO, 24, 4); -} - -static void test_pack_PFORMAT_STRING(void) -{ - /* PFORMAT_STRING */ - TEST_TYPE(PFORMAT_STRING, 4, 4); -} - -static void test_pack_PFULL_PTR_TO_REFID_ELEMENT(void) -{ - /* PFULL_PTR_TO_REFID_ELEMENT */ - TEST_TYPE(PFULL_PTR_TO_REFID_ELEMENT, 4, 4); - TEST_TYPE_POINTER(PFULL_PTR_TO_REFID_ELEMENT, 16, 4); -} - -static void test_pack_PFULL_PTR_XLAT_TABLES(void) -{ - /* PFULL_PTR_XLAT_TABLES */ - TEST_TYPE(PFULL_PTR_XLAT_TABLES, 4, 4); -} - -static void test_pack_PGENERIC_BINDING_INFO(void) -{ - /* PGENERIC_BINDING_INFO */ - TEST_TYPE(PGENERIC_BINDING_INFO, 4, 4); -} - -static void test_pack_PGENERIC_BINDING_ROUTINE_PAIR(void) -{ - /* PGENERIC_BINDING_ROUTINE_PAIR */ - TEST_TYPE(PGENERIC_BINDING_ROUTINE_PAIR, 4, 4); -} - -static void test_pack_PMIDL_SERVER_INFO(void) -{ - /* PMIDL_SERVER_INFO */ - TEST_TYPE(PMIDL_SERVER_INFO, 4, 4); - TEST_TYPE_POINTER(PMIDL_SERVER_INFO, 32, 4); -} - -static void test_pack_PMIDL_STUB_DESC(void) -{ - /* PMIDL_STUB_DESC */ - TEST_TYPE(PMIDL_STUB_DESC, 4, 4); -} - -static void test_pack_PMIDL_STUB_MESSAGE(void) -{ - /* PMIDL_STUB_MESSAGE */ - TEST_TYPE(PMIDL_STUB_MESSAGE, 4, 4); -} - -static void test_pack_PMIDL_STUBLESS_PROXY_INFO(void) -{ - /* PMIDL_STUBLESS_PROXY_INFO */ - TEST_TYPE(PMIDL_STUBLESS_PROXY_INFO, 4, 4); - TEST_TYPE_POINTER(PMIDL_STUBLESS_PROXY_INFO, 24, 4); -} - -static void test_pack_PMIDL_SYNTAX_INFO(void) -{ - /* PMIDL_SYNTAX_INFO */ - TEST_TYPE(PMIDL_SYNTAX_INFO, 4, 4); -} - -static void test_pack_PNDR_ASYNC_MESSAGE(void) -{ - /* PNDR_ASYNC_MESSAGE */ - TEST_TYPE(PNDR_ASYNC_MESSAGE, 4, 4); -} - -static void test_pack_PNDR_CORRELATION_INFO(void) -{ - /* PNDR_CORRELATION_INFO */ - TEST_TYPE(PNDR_CORRELATION_INFO, 4, 4); -} - -static void test_pack_PSCONTEXT_QUEUE(void) -{ - /* PSCONTEXT_QUEUE */ - TEST_TYPE(PSCONTEXT_QUEUE, 4, 4); - TEST_TYPE_POINTER(PSCONTEXT_QUEUE, 8, 4); -} - -static void test_pack_PXMIT_ROUTINE_QUINTUPLE(void) -{ - /* PXMIT_ROUTINE_QUINTUPLE */ - TEST_TYPE(PXMIT_ROUTINE_QUINTUPLE, 4, 4); -} - -static void test_pack_SCONTEXT_QUEUE(void) -{ - /* SCONTEXT_QUEUE (pack 4) */ - TEST_TYPE(SCONTEXT_QUEUE, 8, 4); - TEST_FIELD(SCONTEXT_QUEUE, ULONG, NumberOfObjects, 0, 4, 4); - TEST_FIELD(SCONTEXT_QUEUE, NDR_SCONTEXT *, ArrayOfObjects, 4, 4, 4); -} - -static void test_pack_SERVER_ROUTINE(void) -{ - /* SERVER_ROUTINE */ -} - -static void test_pack_STUB_THUNK(void) -{ - /* STUB_THUNK */ -} - -static void test_pack_USER_MARSHAL_CB(void) -{ - /* USER_MARSHAL_CB (pack 4) */ - TEST_FIELD(USER_MARSHAL_CB, ULONG, Flags, 0, 4, 4); - TEST_FIELD(USER_MARSHAL_CB, PMIDL_STUB_MESSAGE, pStubMsg, 4, 4, 4); - TEST_FIELD(USER_MARSHAL_CB, PFORMAT_STRING, pReserve, 8, 4, 4); - TEST_FIELD(USER_MARSHAL_CB, ULONG, Signature, 12, 4, 4); -} - -static void test_pack_USER_MARSHAL_FREEING_ROUTINE(void) -{ - /* USER_MARSHAL_FREEING_ROUTINE */ -} - -static void test_pack_USER_MARSHAL_MARSHALLING_ROUTINE(void) -{ - /* USER_MARSHAL_MARSHALLING_ROUTINE */ -} - -static void test_pack_USER_MARSHAL_ROUTINE_QUADRUPLE(void) -{ - /* USER_MARSHAL_ROUTINE_QUADRUPLE (pack 4) */ -} - -static void test_pack_USER_MARSHAL_SIZING_ROUTINE(void) -{ - /* USER_MARSHAL_SIZING_ROUTINE */ -} - -static void test_pack_USER_MARSHAL_UNMARSHALLING_ROUTINE(void) -{ - /* USER_MARSHAL_UNMARSHALLING_ROUTINE */ -} - -static void test_pack_XMIT_HELPER_ROUTINE(void) -{ - /* XMIT_HELPER_ROUTINE */ -} - -static void test_pack_XMIT_ROUTINE_QUINTUPLE(void) -{ - /* XMIT_ROUTINE_QUINTUPLE (pack 4) */ -} - -static void test_pack_PRPC_STUB_FUNCTION(void) -{ - /* PRPC_STUB_FUNCTION */ -} - -static void test_pack(void) -{ - test_pack_ARRAY_INFO(); - test_pack_COMM_FAULT_OFFSETS(); - test_pack_CS_STUB_INFO(); - test_pack_EXPR_EVAL(); - test_pack_FULL_PTR_TO_REFID_ELEMENT(); - test_pack_FULL_PTR_XLAT_TABLES(); - test_pack_GENERIC_BINDING_INFO(); - test_pack_GENERIC_BINDING_ROUTINE_PAIR(); - test_pack_I_RPC_HANDLE(); - test_pack_MALLOC_FREE_STRUCT(); - test_pack_MIDL_FORMAT_STRING(); - test_pack_MIDL_SERVER_INFO(); - test_pack_MIDL_STUBLESS_PROXY_INFO(); - test_pack_MIDL_STUB_DESC(); - test_pack_MIDL_STUB_MESSAGE(); - test_pack_MIDL_SYNTAX_INFO(); - test_pack_NDR_CCONTEXT(); - test_pack_NDR_NOTIFY2_ROUTINE(); - test_pack_NDR_NOTIFY_ROUTINE(); - test_pack_NDR_RUNDOWN(); - test_pack_NDR_SCONTEXT(); - test_pack_NDR_USER_MARSHAL_INFO(); - test_pack_NDR_USER_MARSHAL_INFO_LEVEL1(); - test_pack_PARRAY_INFO(); - test_pack_PFORMAT_STRING(); - test_pack_PFULL_PTR_TO_REFID_ELEMENT(); - test_pack_PFULL_PTR_XLAT_TABLES(); - test_pack_PGENERIC_BINDING_INFO(); - test_pack_PGENERIC_BINDING_ROUTINE_PAIR(); - test_pack_PMIDL_SERVER_INFO(); - test_pack_PMIDL_STUBLESS_PROXY_INFO(); - test_pack_PMIDL_STUB_DESC(); - test_pack_PMIDL_STUB_MESSAGE(); - test_pack_PMIDL_SYNTAX_INFO(); - test_pack_PNDR_ASYNC_MESSAGE(); - test_pack_PNDR_CORRELATION_INFO(); - test_pack_PRPC_CLIENT_INTERFACE(); - test_pack_PRPC_DISPATCH_TABLE(); - test_pack_PRPC_MESSAGE(); - test_pack_PRPC_POLICY(); - test_pack_PRPC_PROTSEQ_ENDPOINT(); - test_pack_PRPC_SERVER_INTERFACE(); - test_pack_PRPC_STUB_FUNCTION(); - test_pack_PRPC_SYNTAX_IDENTIFIER(); - test_pack_PSCONTEXT_QUEUE(); - test_pack_PXMIT_ROUTINE_QUINTUPLE(); - test_pack_RPC_AUTHZ_HANDLE(); - test_pack_RPC_AUTH_IDENTITY_HANDLE(); - test_pack_RPC_AUTH_KEY_RETRIEVAL_FN(); - test_pack_RPC_BINDING_HANDLE(); - test_pack_RPC_BINDING_VECTOR(); - test_pack_RPC_CLIENT_INTERFACE(); - test_pack_RPC_DISPATCH_FUNCTION(); - test_pack_RPC_DISPATCH_TABLE(); - test_pack_RPC_IF_HANDLE(); - test_pack_RPC_IF_ID(); - test_pack_RPC_MESSAGE(); - test_pack_RPC_POLICY(); - test_pack_RPC_PROTSEQ_ENDPOINT(); - test_pack_RPC_SERVER_INTERFACE(); - test_pack_RPC_STATUS(); - test_pack_RPC_SYNTAX_IDENTIFIER(); - test_pack_RPC_VERSION(); - test_pack_SCONTEXT_QUEUE(); - test_pack_SERVER_ROUTINE(); - test_pack_STUB_THUNK(); - test_pack_USER_MARSHAL_CB(); - test_pack_USER_MARSHAL_FREEING_ROUTINE(); - test_pack_USER_MARSHAL_MARSHALLING_ROUTINE(); - test_pack_USER_MARSHAL_ROUTINE_QUADRUPLE(); - test_pack_USER_MARSHAL_SIZING_ROUTINE(); - test_pack_USER_MARSHAL_UNMARSHALLING_ROUTINE(); - test_pack_UUID_VECTOR(); - test_pack_XMIT_HELPER_ROUTINE(); - test_pack_XMIT_ROUTINE_QUINTUPLE(); -} - -START_TEST(generated) -{ - test_pack(); -} diff --git a/rostests/winetests/rpcrt4/ndr_marshall.c b/rostests/winetests/rpcrt4/ndr_marshall.c deleted file mode 100644 index 3cd13373acc..00000000000 --- a/rostests/winetests/rpcrt4/ndr_marshall.c +++ /dev/null @@ -1,2058 +0,0 @@ -/* - * Unit test suite for ndr marshalling functions - * - * Copyright 2006 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 - */ - -#include - -#define NTDDI_WIN2K 0x05000000 -#define NTDDI_VERSION NTDDI_WIN2K /* for some MIDL_STUB_MESSAGE fields */ - -#include "wine/test.h" -#include -#include -#include -#include - -#include "rpc.h" -#include "rpcdce.h" -#include "rpcproxy.h" - - -static int my_alloc_called; -static int my_free_called; -static void * CALLBACK my_alloc(size_t size) -{ - my_alloc_called++; - return NdrOleAllocate(size); -} - -static void CALLBACK my_free(void *ptr) -{ - my_free_called++; - NdrOleFree(ptr); -} - -static const MIDL_STUB_DESC Object_StubDesc = - { - NULL, - my_alloc, - my_free, - { 0 }, - 0, - 0, - 0, - 0, - NULL, /* format string, filled in by tests */ - 1, /* -error bounds_check flag */ - 0x20000, /* Ndr library version */ - 0, - 0x50100a4, /* MIDL Version 5.1.164 */ - 0, - NULL, - 0, /* notify & notify_flag routine table */ - 1, /* Flags */ - 0, /* Reserved3 */ - 0, /* Reserved4 */ - 0 /* Reserved5 */ - }; - -static RPC_DISPATCH_FUNCTION IFoo_table[] = -{ - 0 -}; - -static RPC_DISPATCH_TABLE IFoo_v0_0_DispatchTable = -{ - 0, - IFoo_table -}; - -static const RPC_SERVER_INTERFACE IFoo___RpcServerInterface = -{ - sizeof(RPC_SERVER_INTERFACE), - {{0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x34}},{0,0}}, - {{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}}, - &IFoo_v0_0_DispatchTable, - 0, - 0, - 0, - 0, - 0, -}; - -static RPC_IF_HANDLE IFoo_v0_0_s_ifspec = (RPC_IF_HANDLE)& IFoo___RpcServerInterface; -static BOOL use_pointer_ids = FALSE; - -static void determine_pointer_marshalling_style(void) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - char ch = 0xde; - - static const unsigned char fmtstr_up_char[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x2, /* FC_CHAR */ - 0x5c, /* FC_PAD */ - }; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = NULL; - - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 8; - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - NdrPointerMarshall(&StubMsg, (unsigned char*)&ch, fmtstr_up_char); - ok(StubMsg.Buffer == StubMsg.BufferStart + 5, "%p %p\n", StubMsg.Buffer, StubMsg.BufferStart); - - use_pointer_ids = (*(unsigned int *)StubMsg.BufferStart != (unsigned int)&ch); - trace("Pointer marshalling using %s\n", use_pointer_ids ? "pointer ids" : "pointer value"); - - HeapFree(GetProcessHeap(), 0, StubMsg.BufferStart); -} - -static void test_ndr_simple_type(void) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - long l, l2 = 0; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = NULL; - - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 16; - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - l = 0xcafebabe; - NdrSimpleTypeMarshall(&StubMsg, (unsigned char*)&l, 8 /* FC_LONG */); - ok(StubMsg.Buffer == StubMsg.BufferStart + 4, "%p %p\n", StubMsg.Buffer, StubMsg.BufferStart); - ok(*(long*)StubMsg.BufferStart == l, "%ld\n", *(long*)StubMsg.BufferStart); - - StubMsg.Buffer = StubMsg.BufferStart + 1; - NdrSimpleTypeMarshall(&StubMsg, (unsigned char*)&l, 8 /* FC_LONG */); - ok(StubMsg.Buffer == StubMsg.BufferStart + 8, "%p %p\n", StubMsg.Buffer, StubMsg.BufferStart); - ok(*(long*)(StubMsg.BufferStart + 4) == l, "%ld\n", *(long*)StubMsg.BufferStart); - - StubMsg.Buffer = StubMsg.BufferStart + 1; - NdrSimpleTypeUnmarshall(&StubMsg, (unsigned char*)&l2, 8 /* FC_LONG */); - ok(StubMsg.Buffer == StubMsg.BufferStart + 8, "%p %p\n", StubMsg.Buffer, StubMsg.BufferStart); - ok(l2 == l, "%ld\n", l2); - - HeapFree(GetProcessHeap(), 0, StubMsg.BufferStart); -} - -static void test_pointer_marshal(const unsigned char *formattypes, - void *memsrc, - long srcsize, - const void *wiredata, - ULONG wiredatalen, - int(*cmp)(const void*,const void*,size_t), - long num_additional_allocs, - const char *msgpfx) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - DWORD size; - void *ptr; - unsigned char *mem, *mem_orig; - - my_alloc_called = my_free_called = 0; - if(!cmp) - cmp = memcmp; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = formattypes; - - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 0; - NdrPointerBufferSize( &StubMsg, - memsrc, - formattypes ); - ok(StubMsg.BufferLength >= wiredatalen, "%s: length %d\n", msgpfx, StubMsg.BufferLength); - - /*NdrGetBuffer(&_StubMsg, _StubMsg.BufferLength, NULL);*/ - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - StubMsg.BufferEnd = StubMsg.BufferStart + StubMsg.BufferLength; - - memset(StubMsg.BufferStart, 0x0, StubMsg.BufferLength); /* This is a hack to clear the padding between the ptr and longlong/double */ - - ptr = NdrPointerMarshall( &StubMsg, memsrc, formattypes ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p len %d\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart, wiredatalen); - ok(!memcmp(StubMsg.BufferStart, wiredata, wiredatalen), "%s: incorrectly marshaled\n", msgpfx); - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - - if (0) - { - /* NdrPointerMemorySize crashes under Wine */ - size = NdrPointerMemorySize( &StubMsg, formattypes ); - ok(size == StubMsg.MemorySize, "%s: mem size %u size %u\n", msgpfx, StubMsg.MemorySize, size); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p len %d\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart, wiredatalen); - if(formattypes[1] & 0x10 /* FC_POINTER_DEREF */) - ok(size == srcsize + 4, "%s: mem size %u\n", msgpfx, size); - else - ok(size == srcsize, "%s: mem size %u\n", msgpfx, size); - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 16; - size = NdrPointerMemorySize( &StubMsg, formattypes ); - ok(size == StubMsg.MemorySize, "%s: mem size %u size %u\n", msgpfx, StubMsg.MemorySize, size); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p len %d\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart, wiredatalen); - if(formattypes[1] & 0x10 /* FC_POINTER_DEREF */) - ok(size == srcsize + 4 + 16, "%s: mem size %u\n", msgpfx, size); - else - ok(size == srcsize + 16, "%s: mem size %u\n", msgpfx, size); - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 1; - size = NdrPointerMemorySize( &StubMsg, formattypes ); - ok(size == StubMsg.MemorySize, "%s: mem size %u size %u\n", msgpfx, StubMsg.MemorySize, size); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p len %d\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart, wiredatalen); - if(formattypes[1] & 0x10 /* FC_POINTER_DEREF */) - ok(size == srcsize + 4 + (srcsize == 8 ? 8 : 4), "%s: mem size %u\n", msgpfx, size); - else - ok(size == srcsize + (srcsize == 8 ? 8 : 4), "%s: mem size %u\n", msgpfx, size); - } - - size = srcsize; - if(formattypes[1] & 0x10) size += 4; - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - mem_orig = mem = HeapAlloc(GetProcessHeap(), 0, size); - - if(formattypes[1] & 0x10 /* FC_POINTER_DEREF */) - *(void**)mem = NULL; - ptr = NdrPointerUnmarshall( &StubMsg, &mem, formattypes, 0 ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - ok(mem == mem_orig, "%s: mem has changed %p %p\n", msgpfx, mem, mem_orig); - ok(!cmp(mem, memsrc, srcsize), "%s: incorrectly unmarshaled\n", msgpfx); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p len %d\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart, wiredatalen); - ok(StubMsg.MemorySize == 0, "%s: memorysize %d\n", msgpfx, StubMsg.MemorySize); - ok(my_alloc_called == num_additional_allocs, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - - /* reset the buffer and call with must alloc */ - StubMsg.Buffer = StubMsg.BufferStart; - if(formattypes[1] & 0x10 /* FC_POINTER_DEREF */) - *(void**)mem = NULL; - ptr = NdrPointerUnmarshall( &StubMsg, &mem, formattypes, 1 ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - /* doesn't allocate mem in this case */ -todo_wine { - ok(mem == mem_orig, "%s: mem has changed %p %p\n", msgpfx, mem, mem_orig); - } - ok(!cmp(mem, memsrc, srcsize), "%s: incorrectly unmarshaled\n", msgpfx); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p len %d\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart, wiredatalen); - ok(StubMsg.MemorySize == 0, "%s: memorysize %d\n", msgpfx, StubMsg.MemorySize); - -todo_wine { - ok(my_alloc_called == num_additional_allocs, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); -} - my_alloc_called = 0; - if(formattypes[0] != 0x11 /* FC_RP */) - { - /* now pass the address of a NULL ptr */ - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - ptr = NdrPointerUnmarshall( &StubMsg, &mem, formattypes, 0 ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - ok(mem != StubMsg.BufferStart + wiredatalen - srcsize, "%s: mem points to buffer %p %p\n", msgpfx, mem, StubMsg.BufferStart); - ok(!cmp(mem, memsrc, size), "%s: incorrectly unmarshaled\n", msgpfx); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p len %d\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart, wiredatalen); - ok(StubMsg.MemorySize == 0, "%s: memorysize %d\n", msgpfx, StubMsg.MemorySize); - ok(my_alloc_called == num_additional_allocs + 1, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - NdrPointerFree(&StubMsg, mem, formattypes); - - /* again pass address of NULL ptr, but pretend we're a server */ - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.IsClient = 0; - ptr = NdrPointerUnmarshall( &StubMsg, &mem, formattypes, 0 ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - if (formattypes[2] == 0xd /* FC_ENUM16 */) - ok(mem != StubMsg.BufferStart + wiredatalen - srcsize, "%s: mem points to buffer %p %p\n", msgpfx, mem, StubMsg.BufferStart); - else - ok(mem == StubMsg.BufferStart + wiredatalen - srcsize, "%s: mem doesn't point to buffer %p %p\n", msgpfx, mem, StubMsg.BufferStart); - ok(!cmp(mem, memsrc, size), "%s: incorrectly unmarshaled\n", msgpfx); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p len %d\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart, wiredatalen); - ok(StubMsg.MemorySize == 0, "%s: memorysize %d\n", msgpfx, StubMsg.MemorySize); - if (formattypes[2] != 0xd /* FC_ENUM16 */) { - ok(my_alloc_called == num_additional_allocs, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - } - } - HeapFree(GetProcessHeap(), 0, mem_orig); - HeapFree(GetProcessHeap(), 0, StubMsg.BufferStart); -} - -static int deref_cmp(const void *s1, const void *s2, size_t num) -{ - return memcmp(*(const void *const *)s1, *(const void *const *)s2, num); -} - - -static void test_simple_types(void) -{ - unsigned char wiredata[16]; - unsigned char ch; - unsigned char *ch_ptr; - unsigned short s; - unsigned int i; - unsigned long l; - ULONGLONG ll; - float f; - double d; - - static const unsigned char fmtstr_up_char[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x2, /* FC_CHAR */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_byte[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x1, /* FC_BYTE */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_small[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x3, /* FC_SMALL */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_usmall[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x4, /* FC_USMALL */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_rp_char[] = - { - 0x11, 0x8, /* FC_RP [simple_pointer] */ - 0x2, /* FC_CHAR */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_rpup_char[] = - { - 0x11, 0x14, /* FC_RP [alloced_on_stack] */ - NdrFcShort( 0x2 ), /* Offset= 2 (4) */ - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x2, /* FC_CHAR */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_rpup_char2[] = - { - 0x11, 0x04, /* FC_RP [alloced_on_stack] */ - NdrFcShort( 0x2 ), /* Offset= 2 (4) */ - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x2, /* FC_CHAR */ - 0x5c, /* FC_PAD */ - }; - - static const unsigned char fmtstr_up_wchar[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x5, /* FC_WCHAR */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_short[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x6, /* FC_SHORT */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_ushort[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x7, /* FC_USHORT */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_enum16[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0xd, /* FC_ENUM16 */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_long[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x8, /* FC_LONG */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_ulong[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x9, /* FC_ULONG */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_enum32[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0xe, /* FC_ENUM32 */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_errorstatus[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x10, /* FC_ERROR_STATUS_T */ - 0x5c, /* FC_PAD */ - }; - - static const unsigned char fmtstr_up_longlong[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0xb, /* FC_HYPER */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_float[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0xa, /* FC_FLOAT */ - 0x5c, /* FC_PAD */ - }; - static const unsigned char fmtstr_up_double[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0xc, /* FC_DOUBLE */ - 0x5c, /* FC_PAD */ - }; - - ch = 0xa5; - ch_ptr = &ch; - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)ch_ptr; - wiredata[4] = ch; - - test_pointer_marshal(fmtstr_up_char, ch_ptr, 1, wiredata, 5, NULL, 0, "up_char"); - test_pointer_marshal(fmtstr_up_byte, ch_ptr, 1, wiredata, 5, NULL, 0, "up_byte"); - test_pointer_marshal(fmtstr_up_small, ch_ptr, 1, wiredata, 5, NULL, 0, "up_small"); - test_pointer_marshal(fmtstr_up_usmall, ch_ptr, 1, wiredata, 5, NULL, 0, "up_usmall"); - - test_pointer_marshal(fmtstr_rp_char, ch_ptr, 1, &ch, 1, NULL, 0, "rp_char"); - - test_pointer_marshal(fmtstr_rpup_char, &ch_ptr, 1, wiredata, 5, deref_cmp, 1, "rpup_char"); - test_pointer_marshal(fmtstr_rpup_char2, ch_ptr, 1, wiredata, 5, NULL, 0, "rpup_char2"); - - s = 0xa597; - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)&s; - *(unsigned short*)(wiredata + 4) = s; - - test_pointer_marshal(fmtstr_up_wchar, &s, 2, wiredata, 6, NULL, 0, "up_wchar"); - test_pointer_marshal(fmtstr_up_short, &s, 2, wiredata, 6, NULL, 0, "up_short"); - test_pointer_marshal(fmtstr_up_ushort, &s, 2, wiredata, 6, NULL, 0, "up_ushort"); - - i = 0x7fff; - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)&i; - *(unsigned short*)(wiredata + 4) = i; - test_pointer_marshal(fmtstr_up_enum16, &i, 2, wiredata, 6, NULL, 0, "up_enum16"); - - l = 0xcafebabe; - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)&l; - *(unsigned long*)(wiredata + 4) = l; - - test_pointer_marshal(fmtstr_up_long, &l, 4, wiredata, 8, NULL, 0, "up_long"); - test_pointer_marshal(fmtstr_up_ulong, &l, 4, wiredata, 8, NULL, 0, "up_ulong"); - test_pointer_marshal(fmtstr_up_enum32, &l, 4, wiredata, 8, NULL, 0, "up_emun32"); - test_pointer_marshal(fmtstr_up_errorstatus, &l, 4, wiredata, 8, NULL, 0, "up_errorstatus"); - - ll = ((ULONGLONG)0xcafebabe) << 32 | 0xdeadbeef; - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)≪ - *(unsigned int **)(wiredata + 4) = 0; - *(ULONGLONG*)(wiredata + 8) = ll; - test_pointer_marshal(fmtstr_up_longlong, &ll, 8, wiredata, 16, NULL, 0, "up_longlong"); - - f = 3.1415f; - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)&f; - *(float*)(wiredata + 4) = f; - test_pointer_marshal(fmtstr_up_float, &f, 4, wiredata, 8, NULL, 0, "up_float"); - - d = 3.1415; - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)&d; - *(unsigned int *)(wiredata + 4) = 0; - *(double*)(wiredata + 8) = d; - test_pointer_marshal(fmtstr_up_double, &d, 8, wiredata, 16, NULL, 0, "up_double"); - -} - -static void test_nontrivial_pointer_types(void) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - void *ptr; - char **p1; - char *p2; - char ch; - unsigned char *mem, *mem_orig; - - static const unsigned char fmtstr_ref_unique_out[] = - { - 0x12, 0x8, /* FC_UP [simple_pointer] */ - 0x2, /* FC_CHAR */ - 0x5c, /* FC_PAD */ - 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ - NdrFcShort( 0xfffffffa ), /* Offset= -6 (0) */ - }; - - p1 = &p2; - p2 = &ch; - ch = 0x22; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = fmtstr_ref_unique_out; - - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 0; - NdrPointerBufferSize( &StubMsg, - (unsigned char *)p1, - &fmtstr_ref_unique_out[4] ); - - /* Windows overestimates the buffer size */ - ok(StubMsg.BufferLength >= 5, "length %d\n", StubMsg.BufferLength); - - /*NdrGetBuffer(&_StubMsg, _StubMsg.BufferLength, NULL);*/ - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - StubMsg.BufferEnd = StubMsg.BufferStart + StubMsg.BufferLength; - - ptr = NdrPointerMarshall( &StubMsg, (unsigned char *)p1, &fmtstr_ref_unique_out[4] ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(StubMsg.Buffer - StubMsg.BufferStart == 5, "Buffer %p Start %p len %d\n", - StubMsg.Buffer, StubMsg.BufferStart, StubMsg.Buffer - StubMsg.BufferStart); - ok(*(unsigned int *)StubMsg.BufferStart != 0, "pointer ID marshalled incorrectly\n"); - ok(*(unsigned char *)(StubMsg.BufferStart + 4) == 0x22, "char data marshalled incorrectly: 0x%x\n", - *(unsigned char *)(StubMsg.BufferStart + 4)); - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - mem = NULL; - - /* Client */ - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - mem = mem_orig = HeapAlloc(GetProcessHeap(), 0, sizeof(void *)); - *(void **)mem = NULL; - NdrPointerUnmarshall( &StubMsg, &mem, &fmtstr_ref_unique_out[4], 0); - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, &fmtstr_ref_unique_out[4], 1); - todo_wine { - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - } - - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerFree( &StubMsg, mem, &fmtstr_ref_unique_out[4] ); - ok(my_free_called == 1, "free called %d\n", my_free_called); - - mem = my_alloc(sizeof(void *)); - *(void **)mem = NULL; - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerFree( &StubMsg, mem, &fmtstr_ref_unique_out[4] ); - ok(my_free_called == 0, "free called %d\n", my_free_called); - my_free(mem); - - mem = my_alloc(sizeof(void *)); - *(void **)mem = my_alloc(sizeof(char)); - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerFree( &StubMsg, mem, &fmtstr_ref_unique_out[4] ); - ok(my_free_called == 1, "free called %d\n", my_free_called); - my_free(mem); - - /* Server */ - my_alloc_called = 0; - StubMsg.IsClient = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, &fmtstr_ref_unique_out[4], 0); - ok(mem != StubMsg.BufferStart, "mem pointing at buffer\n"); - todo_wine - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - NdrPointerFree( &StubMsg, mem, &fmtstr_ref_unique_out[4] ); - - my_alloc_called = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, &fmtstr_ref_unique_out[4], 1); - ok(mem != StubMsg.BufferStart, "mem pointing at buffer\n"); - todo_wine - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - NdrPointerFree( &StubMsg, mem, &fmtstr_ref_unique_out[4] ); - - my_alloc_called = 0; - mem = mem_orig; - *(void **)mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, &fmtstr_ref_unique_out[4], 0); - todo_wine { - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - } - - my_alloc_called = 0; - mem = mem_orig; - *(void **)mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, &fmtstr_ref_unique_out[4], 1); - todo_wine { - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - } - - mem = my_alloc(sizeof(void *)); - *(void **)mem = NULL; - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerFree( &StubMsg, mem, &fmtstr_ref_unique_out[4] ); - ok(my_free_called == 0, "free called %d\n", my_free_called); - my_free(mem); - - mem = my_alloc(sizeof(void *)); - *(void **)mem = my_alloc(sizeof(char)); - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerFree( &StubMsg, mem, &fmtstr_ref_unique_out[4] ); - ok(my_free_called == 1, "free called %d\n", my_free_called); - my_free(mem); - - HeapFree(GetProcessHeap(), 0, mem_orig); - HeapFree(GetProcessHeap(), 0, StubMsg.RpcMsg->Buffer); -} - -static void test_simple_struct_marshal(const unsigned char *formattypes, - void *memsrc, - long srcsize, - const void *wiredata, - ULONG wiredatalen, - int(*cmp)(const void*,const void*,size_t), - long num_additional_allocs, - const char *msgpfx) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - DWORD size; - void *ptr; - unsigned char *mem, *mem_orig; - - my_alloc_called = my_free_called = 0; - if(!cmp) - cmp = memcmp; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = formattypes; - - NdrClientInitializeNew(&RpcMessage, &StubMsg, &StubDesc, 0); - - StubMsg.BufferLength = 0; - NdrSimpleStructBufferSize( &StubMsg, (unsigned char *)memsrc, formattypes ); - ok(StubMsg.BufferLength >= wiredatalen, "%s: length %d\n", msgpfx, StubMsg.BufferLength); - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - StubMsg.BufferEnd = StubMsg.BufferStart + StubMsg.BufferLength; - ptr = NdrSimpleStructMarshall( &StubMsg, (unsigned char*)memsrc, formattypes ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart); - ok(!memcmp(StubMsg.BufferStart, wiredata, wiredatalen), "%s: incorrectly marshaled %08x %08x %08x\n", msgpfx, *(DWORD*)StubMsg.BufferStart,*((DWORD*)StubMsg.BufferStart+1),*((DWORD*)StubMsg.BufferStart+2)); - - if (0) - { - /* FIXME: Causes Wine to crash */ - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - size = NdrSimpleStructMemorySize( &StubMsg, formattypes ); - ok(size == StubMsg.MemorySize, "%s: size != MemorySize\n", msgpfx); - ok(size == srcsize, "%s: mem size %u\n", msgpfx, size); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart); - - StubMsg.Buffer = StubMsg.BufferStart; - size = NdrSimpleStructMemorySize( &StubMsg, formattypes ); -todo_wine { - ok(size == StubMsg.MemorySize, "%s: size != MemorySize\n", msgpfx); -} - ok(StubMsg.MemorySize == ((srcsize + 3) & ~3) + srcsize, "%s: mem size %u\n", msgpfx, size); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart); - } - size = srcsize; - /*** Unmarshalling first with must_alloc false ***/ - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - mem_orig = mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, srcsize); - ptr = NdrSimpleStructUnmarshall( &StubMsg, &mem, formattypes, 0 ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - ok(StubMsg.Buffer - StubMsg.BufferStart == wiredatalen, "%s: Buffer %p Start %p\n", msgpfx, StubMsg.Buffer, StubMsg.BufferStart); - ok(mem == mem_orig, "%s: mem has changed %p %p\n", msgpfx, mem, mem_orig); - ok(!cmp(mem, memsrc, srcsize), "%s: incorrectly unmarshaled\n", msgpfx); - ok(my_alloc_called == num_additional_allocs, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - ok(StubMsg.MemorySize == 0, "%s: memorysize touched in unmarshal\n", msgpfx); - - /* If we're a server we still use the supplied memory */ - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.IsClient = 0; - ptr = NdrSimpleStructUnmarshall( &StubMsg, &mem, formattypes, 0 ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - ok(mem == mem_orig, "%s: mem has changed %p %p\n", msgpfx, mem, mem_orig); - ok(!cmp(mem, memsrc, srcsize), "%s: incorrectly unmarshaled\n", msgpfx); - ok(my_alloc_called == num_additional_allocs, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - ok(StubMsg.MemorySize == 0, "%s: memorysize touched in unmarshal\n", msgpfx); - - /* ...unless we pass a NULL ptr, then the buffer is used. - Passing a NULL ptr while we're a client && !must_alloc - crashes on Windows, so we won't do that. */ - - mem = NULL; - StubMsg.IsClient = 0; - StubMsg.Buffer = StubMsg.BufferStart; - ptr = NdrSimpleStructUnmarshall( &StubMsg, &mem, formattypes, 0 ); - ok(ptr == NULL, "%s: ret %p\n", msgpfx, ptr); - ok(mem == StubMsg.BufferStart, "%s: mem not equal buffer\n", msgpfx); - ok(!cmp(mem, memsrc, srcsize), "%s: incorrectly unmarshaled\n", msgpfx); - ok(my_alloc_called == num_additional_allocs, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - ok(StubMsg.MemorySize == 0, "%s: memorysize touched in unmarshal\n", msgpfx); - - /*** now must_alloc is true ***/ - - /* with must_alloc set we always allocate new memory whether or not we're - a server and also when passing NULL */ - mem = mem_orig; - StubMsg.IsClient = 1; - StubMsg.Buffer = StubMsg.BufferStart; - ptr = NdrSimpleStructUnmarshall( &StubMsg, &mem, formattypes, 1 ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(mem != mem_orig, "mem not changed %p %p\n", mem, mem_orig); - ok(!cmp(mem, memsrc, srcsize), "incorrectly unmarshaled\n"); - ok(my_alloc_called == num_additional_allocs + 1, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - ok(StubMsg.MemorySize == 0, "memorysize touched in unmarshal\n"); - - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - ptr = NdrSimpleStructUnmarshall( &StubMsg, &mem, formattypes, 1 ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(mem != mem_orig, "mem not changed %p %p\n", mem, mem_orig); - ok(!cmp(mem, memsrc, srcsize), "incorrectly unmarshaled\n"); - ok(my_alloc_called == num_additional_allocs + 1, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - ok(StubMsg.MemorySize == 0, "memorysize touched in unmarshal\n"); - - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.IsClient = 0; - StubMsg.ReuseBuffer = 1; - ptr = NdrSimpleStructUnmarshall( &StubMsg, &mem, formattypes, 1 ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(mem != mem_orig, "mem not changed %p %p\n", mem, mem_orig); - ok(mem != StubMsg.BufferStart, "mem is buffer mem\n"); - ok(!cmp(mem, memsrc, srcsize), "incorrectly unmarshaled\n"); - ok(my_alloc_called == num_additional_allocs + 1, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - ok(StubMsg.MemorySize == 0, "memorysize touched in unmarshal\n"); - - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.IsClient = 0; - StubMsg.ReuseBuffer = 1; - ptr = NdrSimpleStructUnmarshall( &StubMsg, &mem, formattypes, 1 ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(mem != StubMsg.BufferStart, "mem is buffer mem\n"); - ok(!cmp(mem, memsrc, srcsize), "incorrectly unmarshaled\n"); - ok(my_alloc_called == num_additional_allocs + 1, "%s: my_alloc got called %d times\n", msgpfx, my_alloc_called); - my_alloc_called = 0; - ok(StubMsg.MemorySize == 0, "memorysize touched in unmarshal\n"); - - HeapFree(GetProcessHeap(), 0, mem_orig); - HeapFree(GetProcessHeap(), 0, StubMsg.BufferStart); -} - -typedef struct -{ - long l1; - long *pl1; - char *pc1; -} ps1_t; - -static int ps1_cmp(const void *s1, const void *s2, size_t num) -{ - const ps1_t *p1, *p2; - - p1 = s1; - p2 = s2; - - if(p1->l1 != p2->l1) - return 1; - - if(p1->pl1 && p2->pl1) - { - if(*p1->pl1 != *p2->pl1) - return 1; - } - else if(p1->pl1 || p1->pl1) - return 1; - - if(p1->pc1 && p2->pc1) - { - if(*p1->pc1 != *p2->pc1) - return 1; - } - else if(p1->pc1 || p1->pc1) - return 1; - - return 0; -} - -static void test_simple_struct(void) -{ - unsigned char wiredata[28]; - unsigned long wiredatalen; - long l; - char c; - ps1_t ps1; - - static const unsigned char fmtstr_simple_struct[] = - { - 0x12, 0x0, /* FC_UP */ - NdrFcShort( 0x2 ), /* Offset=2 */ - 0x15, 0x3, /* FC_STRUCT [align 4] */ - NdrFcShort( 0x18 ), /* [size 24] */ - 0x6, /* FC_SHORT */ - 0x2, /* FC_CHAR */ - 0x38, /* FC_ALIGNM4 */ - 0x8, /* FC_LONG */ - 0x8, /* FC_LONG */ - 0x39, /* FC_ALIGNM8 */ - 0xb, /* FC_HYPER */ - 0x5b, /* FC_END */ - }; - struct { - short s; - char c; - long l1, l2; - LONGLONG ll; - } s1; - - static const unsigned char fmtstr_pointer_struct[] = - { - 0x12, 0x0, /* FC_UP */ - NdrFcShort( 0x2 ), /* Offset=2 */ - 0x16, 0x3, /* FC_PSTRUCT [align 4] */ - NdrFcShort( 0xc ), /* [size 12] */ - 0x4b, /* FC_PP */ - 0x5c, /* FC_PAD */ - 0x46, /* FC_NO_REPEAT */ - 0x5c, /* FC_PAD */ - NdrFcShort( 0x4 ), /* 4 */ - NdrFcShort( 0x4 ), /* 4 */ - 0x13, 0x8, /* FC_OP [simple_pointer] */ - 0x8, /* FC_LONG */ - 0x5c, /* FC_PAD */ - 0x46, /* FC_NO_REPEAT */ - 0x5c, /* FC_PAD */ - NdrFcShort( 0x8 ), /* 8 */ - NdrFcShort( 0x8 ), /* 8 */ - 0x13, 0x8, /* FC_OP [simple_pointer] */ - 0x2, /* FC_CHAR */ - 0x5c, /* FC_PAD */ - 0x5b, /* FC_END */ - 0x8, /* FC_LONG */ - 0x8, /* FC_LONG */ - 0x8, /* FC_LONG */ - 0x5c, /* FC_PAD */ - 0x5b, /* FC_END */ - - }; - - /* zero the entire structure, including the holes */ - memset(&s1, 0, sizeof(s1)); - - /* FC_STRUCT */ - s1.s = 0x1234; - s1.c = 0xa5; - s1.l1 = 0xdeadbeef; - s1.l2 = 0xcafebabe; - s1.ll = ((LONGLONG) 0xbadefeed << 32) | 0x2468ace0; - - wiredatalen = 24; - memcpy(wiredata, &s1, wiredatalen); - test_simple_struct_marshal(fmtstr_simple_struct + 4, &s1, 24, wiredata, 24, NULL, 0, "struct"); - - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)&s1; - memcpy(wiredata + 4, &s1, wiredatalen); - if (0) - { - /* one of the unmarshallings crashes Wine */ - test_pointer_marshal(fmtstr_simple_struct, &s1, 24, wiredata, 28, NULL, 0, "struct"); - } - - /* zero the entire structure, including the hole */ - memset(&ps1, 0, sizeof(ps1)); - - /* FC_PSTRUCT */ - ps1.l1 = 0xdeadbeef; - l = 0xcafebabe; - ps1.pl1 = &l; - c = 'a'; - ps1.pc1 = &c; - *(unsigned int *)(wiredata + 4) = 0xdeadbeef; - if (use_pointer_ids) - { - *(unsigned int *)(wiredata + 8) = 0x20000; - *(unsigned int *)(wiredata + 12) = 0x20004; - } - else - { - *(unsigned int *)(wiredata + 8) = (unsigned int)&l; - *(unsigned int *)(wiredata + 12) = (unsigned int)&c; - } - memcpy(wiredata + 16, &l, 4); - memcpy(wiredata + 20, &c, 1); - - test_simple_struct_marshal(fmtstr_pointer_struct + 4, &ps1, 17, wiredata + 4, 17, ps1_cmp, 2, "pointer_struct"); - if (use_pointer_ids) - *(unsigned int *)wiredata = 0x20000; - else - *(unsigned int *)wiredata = (unsigned int)&ps1; - if (0) - { - /* one of the unmarshallings crashes Wine */ - test_pointer_marshal(fmtstr_pointer_struct, &ps1, 17, wiredata, 21, ps1_cmp, 2, "pointer_struct"); - } -} - -static void test_fullpointer_xlat(void) -{ - PFULL_PTR_XLAT_TABLES pXlatTables; - ULONG RefId; - int ret; - void *Pointer; - - pXlatTables = NdrFullPointerXlatInit(2, XLAT_CLIENT); - - /* "marshaling" phase */ - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 1, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x1, "RefId should be 0x1 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 0, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x1, "RefId should be 0x1 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebabe, 0, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x2, "RefId should be 0x2 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xdeadbeef, 0, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, NULL, 0, &RefId); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - ok(RefId == 0, "RefId should be 0 instead of 0x%x\n", RefId); - - /* "unmarshaling" phase */ - - ret = NdrFullPointerQueryRefId(pXlatTables, 0x2, 0, &Pointer); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(Pointer == (void *)0xcafebabe, "Pointer should be 0xcafebabe instead of %p\n", Pointer); - - ret = NdrFullPointerQueryRefId(pXlatTables, 0x4, 0, &Pointer); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(Pointer == NULL, "Pointer should be NULL instead of %p\n", Pointer); - - NdrFullPointerInsertRefId(pXlatTables, 0x4, (void *)0xdeadbabe); - - ret = NdrFullPointerQueryRefId(pXlatTables, 0x4, 1, &Pointer); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(Pointer == (void *)0xdeadbabe, "Pointer should be (void *)0xdeadbabe instead of %p\n", Pointer); - - NdrFullPointerXlatFree(pXlatTables); - - pXlatTables = NdrFullPointerXlatInit(2, XLAT_SERVER); - - /* "unmarshaling" phase */ - - ret = NdrFullPointerQueryRefId(pXlatTables, 0x2, 1, &Pointer); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(Pointer == NULL, "Pointer should be NULL instead of %p\n", Pointer); - - NdrFullPointerInsertRefId(pXlatTables, 0x2, (void *)0xcafebabe); - - ret = NdrFullPointerQueryRefId(pXlatTables, 0x2, 0, &Pointer); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(Pointer == (void *)0xcafebabe, "Pointer should be (void *)0xcafebabe instead of %p\n", Pointer); - - ret = NdrFullPointerQueryRefId(pXlatTables, 0x2, 1, &Pointer); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - ok(Pointer == (void *)0xcafebabe, "Pointer should be (void *)0xcafebabe instead of %p\n", Pointer); - - /* "marshaling" phase */ - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 1, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 1, &RefId); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 0, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebabe, 0, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x2, "RefId should be 0x2 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xdeadbeef, 0, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x4, "RefId should be 0x4 instead of 0x%x\n", RefId); - - /* "freeing" phase */ - - ret = NdrFullPointerFree(pXlatTables, (void *)0xcafebeef); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 0x20, &RefId); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 1, &RefId); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%x\n", RefId); - - ret = NdrFullPointerFree(pXlatTables, (void *)0xcafebabe); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - - ret = NdrFullPointerFree(pXlatTables, (void *)0xdeadbeef); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xdeadbeef, 0x20, &RefId); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - ok(RefId == 0x4, "RefId should be 0x4 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xdeadbeef, 1, &RefId); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - ok(RefId == 0x4, "RefId should be 0x4 instead of 0x%x\n", RefId); - - ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xdeadbeef, 1, &RefId); - ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret); - ok(RefId == 0x4, "RefId should be 0x4 instead of 0x%x\n", RefId); - - ret = NdrFullPointerFree(pXlatTables, (void *)0xdeadbeef); - ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret); - - NdrFullPointerXlatFree(pXlatTables); -} - -static void test_client_init(void) -{ - MIDL_STUB_MESSAGE stubMsg; - RPC_MESSAGE rpcMsg; - - memset(&rpcMsg, 0xcc, sizeof(rpcMsg)); - memset(&stubMsg, 0xcc, sizeof(stubMsg)); - - NdrClientInitializeNew(&rpcMsg, &stubMsg, &Object_StubDesc, 1); - -#define TEST_POINTER_UNSET(field) ok(rpcMsg.field == (void *)0xcccccccc, #field " should have been unset instead of %p\n", rpcMsg.field) - - ok(rpcMsg.Handle == NULL, "rpcMsg.Handle should have been NULL instead of %p\n", rpcMsg.Handle); - TEST_POINTER_UNSET(Buffer); - ok(rpcMsg.BufferLength == 0xcccccccc, "rpcMsg.BufferLength should have been unset instead of %d\n", rpcMsg.BufferLength); - ok(rpcMsg.ProcNum == 0x8001, "rpcMsg.ProcNum should have been 0x8001 instead of 0x%x\n", rpcMsg.ProcNum); - TEST_POINTER_UNSET(TransferSyntax); - ok(rpcMsg.RpcInterfaceInformation == Object_StubDesc.RpcInterfaceInformation, - "rpcMsg.RpcInterfaceInformation should have been %p instead of %p\n", - Object_StubDesc.RpcInterfaceInformation, rpcMsg.RpcInterfaceInformation); - /* Note: ReservedForRuntime not tested */ - TEST_POINTER_UNSET(ManagerEpv); - TEST_POINTER_UNSET(ImportContext); - ok(rpcMsg.RpcFlags == 0, "rpcMsg.RpcFlags should have been 0 instead of 0x%lx\n", rpcMsg.RpcFlags); -#undef TEST_POINTER_UNSET - -#define TEST_ZERO(field, fmt) ok(stubMsg.field == 0, #field " should have been set to zero instead of " fmt "\n", stubMsg.field) -#define TEST_POINTER_UNSET(field) ok(stubMsg.field == (void *)0xcccccccc, #field " should have been unset instead of %p\n", stubMsg.field) -#define TEST_ULONG_UNSET(field) ok(stubMsg.field == 0xcccccccc, #field " should have been unset instead of 0x%x\n", stubMsg.field) -#define TEST_ULONG_PTR_UNSET(field) ok(stubMsg.field == 0xcccccccc, #field " should have been unset instead of 0x%lx\n", stubMsg.field) - - ok(stubMsg.RpcMsg == &rpcMsg, "stubMsg.RpcMsg should have been %p instead of %p\n", &rpcMsg, stubMsg.RpcMsg); - TEST_POINTER_UNSET(Buffer); - TEST_ZERO(BufferStart, "%p"); - TEST_ZERO(BufferEnd, "%p"); - TEST_POINTER_UNSET(BufferMark); - TEST_ZERO(BufferLength, "%d"); - TEST_ULONG_UNSET(MemorySize); - TEST_POINTER_UNSET(Memory); - ok(stubMsg.IsClient == 1, "stubMsg.IsClient should have been 1 instead of %u\n", stubMsg.IsClient); - TEST_ZERO(ReuseBuffer, "%d"); - TEST_ZERO(pAllocAllNodesContext, "%p"); - ok(stubMsg.pPointerQueueState == 0 || - broken(stubMsg.pPointerQueueState == (void *)0xcccccccc), /* win2k */ - "stubMsg.pPointerQueueState should have been unset instead of %p\n", stubMsg.pPointerQueueState); - TEST_ZERO(IgnoreEmbeddedPointers, "%d"); - TEST_ZERO(PointerBufferMark, "%p"); - TEST_ZERO(CorrDespIncrement, "%d"); - TEST_ZERO(uFlags, "%d"); - /* FIXME: UniquePtrCount */ - TEST_ULONG_PTR_UNSET(MaxCount); - TEST_ULONG_UNSET(Offset); - TEST_ULONG_UNSET(ActualCount); - ok(stubMsg.pfnAllocate == my_alloc, "stubMsg.pfnAllocate should have been %p instead of %p\n", my_alloc, stubMsg.pfnAllocate); - ok(stubMsg.pfnFree == my_free, "stubMsg.pfnFree should have been %p instead of %p\n", my_free, stubMsg.pfnFree); - TEST_ZERO(StackTop, "%p"); - TEST_POINTER_UNSET(pPresentedType); - TEST_POINTER_UNSET(pTransmitType); - TEST_POINTER_UNSET(SavedHandle); - ok(stubMsg.StubDesc == &Object_StubDesc, "stubMsg.StubDesc should have been %p instead of %p\n", &Object_StubDesc, stubMsg.StubDesc); - TEST_POINTER_UNSET(FullPtrXlatTables); - TEST_ZERO(FullPtrRefId, "%d"); - TEST_ZERO(PointerLength, "%d"); - TEST_ZERO(fInDontFree, "%d"); - TEST_ZERO(fDontCallFreeInst, "%d"); - ok(stubMsg.fInOnlyParam == 0 || - stubMsg.fInOnlyParam == -1, /* Vista */ - "fInOnlyParam should have been set to 0 or -1 instead of %d\n", stubMsg.fInOnlyParam); - TEST_ZERO(fHasReturn, "%d"); - TEST_ZERO(fHasExtensions, "%d"); - TEST_ZERO(fHasNewCorrDesc, "%d"); - TEST_ZERO(fIsIn, "%d"); - TEST_ZERO(fIsOut, "%d"); - TEST_ZERO(fIsOicf, "%d"); - TEST_ZERO(fBufferValid, "%d"); - TEST_ZERO(fHasMemoryValidateCallback, "%d"); - TEST_ZERO(fInFree, "%d"); - TEST_ZERO(fNeedMCCP, "%d"); - ok(stubMsg.fUnused == 0 || - stubMsg.fUnused == -2, /* Vista */ - "fUnused should have been set to 0 or -2 instead of %d\n", stubMsg.fUnused); - ok(stubMsg.fUnused2 == 0xffffcccc, "stubMsg.fUnused2 should have been 0xffffcccc instead of 0x%x\n", stubMsg.fUnused2); - ok(stubMsg.dwDestContext == MSHCTX_DIFFERENTMACHINE, "stubMsg.dwDestContext should have been MSHCTX_DIFFERENTMACHINE instead of %d\n", stubMsg.dwDestContext); - TEST_ZERO(pvDestContext, "%p"); - TEST_POINTER_UNSET(SavedContextHandles); - TEST_ULONG_UNSET(ParamNumber); - TEST_ZERO(pRpcChannelBuffer, "%p"); - TEST_ZERO(pArrayInfo, "%p"); - TEST_POINTER_UNSET(SizePtrCountArray); - TEST_POINTER_UNSET(SizePtrOffsetArray); - TEST_POINTER_UNSET(SizePtrLengthArray); - TEST_POINTER_UNSET(pArgQueue); - TEST_ZERO(dwStubPhase, "%d"); - /* FIXME: where does this value come from? */ - trace("LowStackMark is %p\n", stubMsg.LowStackMark); - TEST_ZERO(pAsyncMsg, "%p"); - TEST_ZERO(pCorrInfo, "%p"); - TEST_ZERO(pCorrMemory, "%p"); - TEST_ZERO(pMemoryList, "%p"); - TEST_POINTER_UNSET(pCSInfo); - TEST_POINTER_UNSET(ConformanceMark); - TEST_POINTER_UNSET(VarianceMark); - ok(stubMsg.Unused == 0xcccccccc, "Unused should have be unset instead of 0x%lx\n", stubMsg.Unused); - TEST_POINTER_UNSET(pContext); - TEST_POINTER_UNSET(ContextHandleHash); - TEST_POINTER_UNSET(pUserMarshalList); - TEST_ULONG_PTR_UNSET(Reserved51_3); - TEST_ULONG_PTR_UNSET(Reserved51_4); - TEST_ULONG_PTR_UNSET(Reserved51_5); -#undef TEST_ULONG_UNSET -#undef TEST_POINTER_UNSET -#undef TEST_ZERO - -} - -static void test_server_init(void) -{ - MIDL_STUB_MESSAGE stubMsg; - RPC_MESSAGE rpcMsg; - unsigned char *ret; - unsigned char buffer[256]; - - memset(&rpcMsg, 0, sizeof(rpcMsg)); - rpcMsg.Buffer = buffer; - rpcMsg.BufferLength = sizeof(buffer); - rpcMsg.RpcFlags = RPC_BUFFER_COMPLETE; - - memset(&stubMsg, 0xcc, sizeof(stubMsg)); - - ret = NdrServerInitializeNew(&rpcMsg, &stubMsg, &Object_StubDesc); - ok(ret == NULL, "NdrServerInitializeNew should have returned NULL instead of %p\n", ret); - -#define TEST_ZERO(field, fmt) ok(stubMsg.field == 0, #field " should have been set to zero instead of " fmt "\n", stubMsg.field) -#define TEST_POINTER_UNSET(field) ok(stubMsg.field == (void *)0xcccccccc, #field " should have been unset instead of %p\n", stubMsg.field) -#define TEST_ULONG_UNSET(field) ok(stubMsg.field == 0xcccccccc, #field " should have been unset instead of 0x%x\n", stubMsg.field) -#define TEST_ULONG_PTR_UNSET(field) ok(stubMsg.field == 0xcccccccc, #field " should have been unset instead of 0x%lx\n", stubMsg.field) - - ok(stubMsg.RpcMsg == &rpcMsg, "stubMsg.RpcMsg should have been %p instead of %p\n", &rpcMsg, stubMsg.RpcMsg); - ok(stubMsg.Buffer == buffer, "stubMsg.Buffer should have been %p instead of %p\n", buffer, stubMsg.Buffer); - ok(stubMsg.BufferStart == buffer, "stubMsg.BufferStart should have been %p instead of %p\n", buffer, stubMsg.BufferStart); - ok(stubMsg.BufferEnd == buffer + sizeof(buffer), "stubMsg.BufferEnd should have been %p instead of %p\n", buffer + sizeof(buffer), stubMsg.BufferEnd); - TEST_POINTER_UNSET(BufferMark); -todo_wine - TEST_ZERO(BufferLength, "%d"); - TEST_ULONG_UNSET(MemorySize); - TEST_POINTER_UNSET(Memory); - ok(stubMsg.IsClient == 0, "stubMsg.IsClient should have been 0 instead of %u\n", stubMsg.IsClient); - ok(stubMsg.ReuseBuffer == 0 || - broken(stubMsg.ReuseBuffer == 1), /* win2k */ - "stubMsg.ReuseBuffer should have been set to zero instead of %d\n", stubMsg.ReuseBuffer); - TEST_ZERO(pAllocAllNodesContext, "%p"); - ok(stubMsg.pPointerQueueState == 0 || - broken(stubMsg.pPointerQueueState == (void *)0xcccccccc), /* win2k */ - "stubMsg.pPointerQueueState should have been unset instead of %p\n", stubMsg.pPointerQueueState); - TEST_ZERO(IgnoreEmbeddedPointers, "%d"); - TEST_ZERO(PointerBufferMark, "%p"); - ok(stubMsg.CorrDespIncrement == 0xcc || - stubMsg.CorrDespIncrement == 0, - "CorrDespIncrement should have been unset instead of 0x%x\n", stubMsg.CorrDespIncrement); - TEST_ZERO(uFlags, "%d"); - /* FIXME: UniquePtrCount */ - TEST_ULONG_PTR_UNSET(MaxCount); - TEST_ULONG_UNSET(Offset); - TEST_ULONG_UNSET(ActualCount); - ok(stubMsg.pfnAllocate == my_alloc, "stubMsg.pfnAllocate should have been %p instead of %p\n", my_alloc, stubMsg.pfnAllocate); - ok(stubMsg.pfnFree == my_free, "stubMsg.pfnFree should have been %p instead of %p\n", my_free, stubMsg.pfnFree); - TEST_ZERO(StackTop, "%p"); - TEST_POINTER_UNSET(pPresentedType); - TEST_POINTER_UNSET(pTransmitType); - TEST_POINTER_UNSET(SavedHandle); - ok(stubMsg.StubDesc == &Object_StubDesc, "stubMsg.StubDesc should have been %p instead of %p\n", &Object_StubDesc, stubMsg.StubDesc); - TEST_ZERO(FullPtrXlatTables, "%p"); - TEST_ZERO(FullPtrRefId, "%d"); - TEST_ZERO(PointerLength, "%d"); - TEST_ZERO(fInDontFree, "%d"); - TEST_ZERO(fDontCallFreeInst, "%d"); - ok(stubMsg.fInOnlyParam == 0 || - stubMsg.fInOnlyParam == -1, /* Vista */ - "fInOnlyParam should have been set to 0 or -1 instead of %d\n", stubMsg.fInOnlyParam); - TEST_ZERO(fHasReturn, "%d"); - TEST_ZERO(fHasExtensions, "%d"); - TEST_ZERO(fHasNewCorrDesc, "%d"); - TEST_ZERO(fIsIn, "%d"); - TEST_ZERO(fIsOut, "%d"); - TEST_ZERO(fIsOicf, "%d"); - trace("fBufferValid = %d\n", stubMsg.fBufferValid); - TEST_ZERO(fHasMemoryValidateCallback, "%d"); - TEST_ZERO(fInFree, "%d"); - TEST_ZERO(fNeedMCCP, "%d"); - ok(stubMsg.fUnused == 0 || - stubMsg.fUnused == -2, /* Vista */ - "fUnused should have been set to 0 or -2 instead of %d\n", stubMsg.fUnused); - ok(stubMsg.fUnused2 == 0xffffcccc, "stubMsg.fUnused2 should have been 0xffffcccc instead of 0x%x\n", stubMsg.fUnused2); - ok(stubMsg.dwDestContext == MSHCTX_DIFFERENTMACHINE, "stubMsg.dwDestContext should have been MSHCTX_DIFFERENTMACHINE instead of %d\n", stubMsg.dwDestContext); - TEST_ZERO(pvDestContext, "%p"); - TEST_POINTER_UNSET(SavedContextHandles); - TEST_ULONG_UNSET(ParamNumber); - TEST_ZERO(pRpcChannelBuffer, "%p"); - TEST_ZERO(pArrayInfo, "%p"); - TEST_POINTER_UNSET(SizePtrCountArray); - TEST_POINTER_UNSET(SizePtrOffsetArray); - TEST_POINTER_UNSET(SizePtrLengthArray); - TEST_POINTER_UNSET(pArgQueue); - TEST_ZERO(dwStubPhase, "%d"); - /* FIXME: where does this value come from? */ - trace("LowStackMark is %p\n", stubMsg.LowStackMark); - TEST_ZERO(pAsyncMsg, "%p"); - TEST_ZERO(pCorrInfo, "%p"); - TEST_ZERO(pCorrMemory, "%p"); - TEST_ZERO(pMemoryList, "%p"); - TEST_POINTER_UNSET(pCSInfo); - TEST_POINTER_UNSET(ConformanceMark); - TEST_POINTER_UNSET(VarianceMark); - ok(stubMsg.Unused == 0xcccccccc, "Unused should have be unset instead of 0x%lx\n", stubMsg.Unused); - TEST_POINTER_UNSET(pContext); - TEST_POINTER_UNSET(ContextHandleHash); - TEST_POINTER_UNSET(pUserMarshalList); - TEST_ULONG_PTR_UNSET(Reserved51_3); - TEST_ULONG_PTR_UNSET(Reserved51_4); - TEST_ULONG_PTR_UNSET(Reserved51_5); -#undef TEST_ULONG_UNSET -#undef TEST_POINTER_UNSET -#undef TEST_ZERO - -} - -static void test_ndr_allocate(void) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - void *p1, *p2; - struct tag_mem_list_v1_t - { - DWORD magic; - void *ptr; - struct tag_mem_list_v1_t *next; - } *mem_list_v1; - struct tag_mem_list_v2_t - { - DWORD magic; - DWORD size; - DWORD unknown; - struct tag_mem_list_v2_t *next; - } *mem_list_v2; - const DWORD magic_MEML = 'M' << 24 | 'E' << 16 | 'M' << 8 | 'L'; - - StubDesc = Object_StubDesc; - NdrClientInitializeNew(&RpcMessage, &StubMsg, &StubDesc, 0); - - ok(StubMsg.pMemoryList == NULL, "memlist %p\n", StubMsg.pMemoryList); - my_alloc_called = my_free_called = 0; - p1 = NdrAllocate(&StubMsg, 10); - p2 = NdrAllocate(&StubMsg, 24); - ok(my_alloc_called == 2, "alloc called %d\n", my_alloc_called); - ok(StubMsg.pMemoryList != NULL, "StubMsg.pMemoryList NULL\n"); - if(StubMsg.pMemoryList) - { - mem_list_v2 = StubMsg.pMemoryList; - if (mem_list_v2->size == 24) - { - trace("v2 mem list format\n"); - ok((char *)mem_list_v2 == (char *)p2 + 24, "expected mem_list_v2 pointer %p, but got %p\n", (char *)p2 + 24, mem_list_v2); - ok(mem_list_v2->magic == magic_MEML, "magic %08x\n", mem_list_v2->magic); - ok(mem_list_v2->size == 24, "wrong size for p2 %d\n", mem_list_v2->size); - ok(mem_list_v2->unknown == 0, "wrong unknown for p2 0x%x\n", mem_list_v2->unknown); - ok(mem_list_v2->next != NULL, "next NULL\n"); - mem_list_v2 = mem_list_v2->next; - if(mem_list_v2) - { - ok((char *)mem_list_v2 == (char *)p1 + 16, "expected mem_list_v2 pointer %p, but got %p\n", (char *)p1 + 16, mem_list_v2); - ok(mem_list_v2->magic == magic_MEML, "magic %08x\n", mem_list_v2->magic); - ok(mem_list_v2->size == 16, "wrong size for p1 %d\n", mem_list_v2->size); - ok(mem_list_v2->unknown == 0, "wrong unknown for p1 0x%x\n", mem_list_v2->unknown); - ok(mem_list_v2->next == NULL, "next %p\n", mem_list_v2->next); - } - } - else - { - trace("v1 mem list format\n"); - mem_list_v1 = StubMsg.pMemoryList; - ok(mem_list_v1->magic == magic_MEML, "magic %08x\n", mem_list_v1->magic); - ok(mem_list_v1->ptr == p2, "ptr != p2\n"); - ok(mem_list_v1->next != NULL, "next NULL\n"); - mem_list_v1 = mem_list_v1->next; - if(mem_list_v1) - { - ok(mem_list_v1->magic == magic_MEML, "magic %08x\n", mem_list_v1->magic); - ok(mem_list_v1->ptr == p1, "ptr != p1\n"); - ok(mem_list_v1->next == NULL, "next %p\n", mem_list_v1->next); - } - } - } - /* NdrFree isn't exported so we can't test free'ing */ -} - -static void test_conformant_array(void) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - void *ptr; - unsigned char *mem, *mem_orig; - unsigned char memsrc[20]; - unsigned int i; - - static const unsigned char fmtstr_conf_array[] = - { - 0x1b, /* FC_CARRAY */ - 0x0, /* align */ - NdrFcShort( 0x1 ), /* elem size */ - 0x40, /* Corr desc: const */ - 0x0, - NdrFcShort(0x10), /* const = 0x10 */ - 0x1, /* FC_BYTE */ - 0x5b /* FC_END */ - }; - - for (i = 0; i < sizeof(memsrc); i++) - memsrc[i] = i * i; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = fmtstr_conf_array; - - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 0; - NdrConformantArrayBufferSize( &StubMsg, - memsrc, - fmtstr_conf_array ); - ok(StubMsg.BufferLength >= 20, "length %d\n", StubMsg.BufferLength); - - /*NdrGetBuffer(&_StubMsg, _StubMsg.BufferLength, NULL);*/ - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - StubMsg.BufferEnd = StubMsg.BufferStart + StubMsg.BufferLength; - - ptr = NdrConformantArrayMarshall( &StubMsg, memsrc, fmtstr_conf_array ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(StubMsg.Buffer - StubMsg.BufferStart == 20, "Buffer %p Start %p len %d\n", StubMsg.Buffer, StubMsg.BufferStart, 20); - ok(!memcmp(StubMsg.BufferStart + 4, memsrc, 16), "incorrectly marshaled\n"); - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - mem = NULL; - - /* Client */ - my_alloc_called = 0; - /* passing mem == NULL with must_alloc == 0 crashes under Windows */ - NdrConformantArrayUnmarshall( &StubMsg, &mem, fmtstr_conf_array, 1); - ok(mem != NULL, "mem not alloced\n"); - ok(mem != StubMsg.BufferStart + 4, "mem pointing at buffer\n"); - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - mem_orig = mem; - NdrConformantArrayUnmarshall( &StubMsg, &mem, fmtstr_conf_array, 0); - ok(mem == mem_orig, "mem alloced\n"); - ok(mem != StubMsg.BufferStart + 4, "mem pointing at buffer\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrConformantArrayUnmarshall( &StubMsg, &mem, fmtstr_conf_array, 1); - ok(mem != mem_orig, "mem not alloced\n"); - ok(mem != StubMsg.BufferStart + 4, "mem pointing at buffer\n"); - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrConformantArrayFree( &StubMsg, mem, fmtstr_conf_array ); - ok(my_free_called == 0, "free called %d\n", my_free_called); - StubMsg.pfnFree(mem); - - /* Server */ - my_alloc_called = 0; - StubMsg.IsClient = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrConformantArrayUnmarshall( &StubMsg, &mem, fmtstr_conf_array, 0); - ok(mem == StubMsg.BufferStart + 4, "mem not pointing at buffer\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - my_alloc_called = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrConformantArrayUnmarshall( &StubMsg, &mem, fmtstr_conf_array, 1); - ok(mem != StubMsg.BufferStart + 4, "mem pointing at buffer\n"); - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - StubMsg.pfnFree(mem); - - my_alloc_called = 0; - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - NdrConformantArrayUnmarshall( &StubMsg, &mem, fmtstr_conf_array, 0); - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - NdrConformantArrayUnmarshall( &StubMsg, &mem, fmtstr_conf_array, 1); - ok(mem != StubMsg.BufferStart + 4, "mem pointing at buffer\n"); - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - StubMsg.pfnFree(mem); - StubMsg.pfnFree(mem_orig); - - HeapFree(GetProcessHeap(), 0, StubMsg.RpcMsg->Buffer); -} - -static void test_conformant_string(void) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - void *ptr; - unsigned char *mem, *mem_orig; - char memsrc[] = "This is a test string"; - - static const unsigned char fmtstr_conf_str[] = - { - 0x11, 0x8, /* FC_RP [simple_pointer] */ - 0x22, /* FC_C_CSTRING */ - 0x5c, /* FC_PAD */ - }; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = fmtstr_conf_str; - - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 0; - NdrPointerBufferSize( &StubMsg, - (unsigned char *)memsrc, - fmtstr_conf_str ); - ok(StubMsg.BufferLength >= sizeof(memsrc) + 12, "length %d\n", StubMsg.BufferLength); - - /*NdrGetBuffer(&_StubMsg, _StubMsg.BufferLength, NULL);*/ - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - StubMsg.BufferEnd = StubMsg.BufferStart + StubMsg.BufferLength; - - ptr = NdrPointerMarshall( &StubMsg, (unsigned char *)memsrc, fmtstr_conf_str ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(StubMsg.Buffer - StubMsg.BufferStart == sizeof(memsrc) + 12, "Buffer %p Start %p len %d\n", - StubMsg.Buffer, StubMsg.BufferStart, StubMsg.Buffer - StubMsg.BufferStart); - ok(!memcmp(StubMsg.BufferStart + 12, memsrc, sizeof(memsrc)), "incorrectly marshaled\n"); - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - mem = NULL; - - /* Client */ - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - mem = mem_orig = HeapAlloc(GetProcessHeap(), 0, sizeof(memsrc)); - NdrPointerUnmarshall( &StubMsg, &mem, fmtstr_conf_str, 0); - ok(mem == mem_orig, "mem not alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, fmtstr_conf_str, 1); -todo_wine { - ok(mem == mem_orig, "mem not alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); -} - - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerFree( &StubMsg, mem, fmtstr_conf_str ); - ok(my_free_called == 1, "free called %d\n", my_free_called); - - mem = my_alloc(10); - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerFree( &StubMsg, mem, fmtstr_conf_str ); - ok(my_free_called == 1, "free called %d\n", my_free_called); - - /* Server */ - my_alloc_called = 0; - StubMsg.IsClient = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, fmtstr_conf_str, 0); - ok(mem == StubMsg.BufferStart + 12, "mem not pointing at buffer\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, fmtstr_conf_str, 1); -todo_wine { - ok(mem == StubMsg.BufferStart + 12, "mem not pointing at buffer\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); -} - - my_alloc_called = 0; - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, fmtstr_conf_str, 0); - ok(mem == StubMsg.BufferStart + 12, "mem not pointing at buffer\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerUnmarshall( &StubMsg, &mem, fmtstr_conf_str, 1); -todo_wine { - ok(mem == StubMsg.BufferStart + 12, "mem not pointing at buffer\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); -} - - mem = my_alloc(10); - my_free_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrPointerFree( &StubMsg, mem, fmtstr_conf_str ); - ok(my_free_called == 1, "free called %d\n", my_free_called); - - HeapFree(GetProcessHeap(), 0, mem_orig); - HeapFree(GetProcessHeap(), 0, StubMsg.RpcMsg->Buffer); -} - -static void test_nonconformant_string(void) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - void *ptr; - unsigned char *mem, *mem_orig; - unsigned char memsrc[10] = "This is"; - unsigned char memsrc2[10] = "This is a"; - - static const unsigned char fmtstr_nonconf_str[] = - { - 0x26, /* FC_CSTRING */ - 0x5c, /* FC_PAD */ - NdrFcShort( 0xa ), /* 10 */ - }; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = fmtstr_nonconf_str; - - /* length < size */ - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 0; - - NdrNonConformantStringBufferSize( &StubMsg, - (unsigned char *)memsrc, - fmtstr_nonconf_str ); - ok(StubMsg.BufferLength >= strlen((char *)memsrc) + 1 + 8, "length %d\n", StubMsg.BufferLength); - - /*NdrGetBuffer(&_StubMsg, _StubMsg.BufferLength, NULL);*/ - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - StubMsg.BufferEnd = StubMsg.BufferStart + StubMsg.BufferLength; - - ptr = NdrNonConformantStringMarshall( &StubMsg, (unsigned char *)memsrc, fmtstr_nonconf_str ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(StubMsg.Buffer - StubMsg.BufferStart == strlen((char *)memsrc) + 1 + 8, "Buffer %p Start %p len %d\n", - StubMsg.Buffer, StubMsg.BufferStart, StubMsg.Buffer - StubMsg.BufferStart); - ok(!memcmp(StubMsg.BufferStart + 8, memsrc, strlen((char *)memsrc) + 1), "incorrectly marshaled\n"); - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - mem = NULL; - - /* Client */ - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - mem = mem_orig = HeapAlloc(GetProcessHeap(), 0, sizeof(memsrc)); - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 0); - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 1); - todo_wine - ok(mem == mem_orig, "mem alloced\n"); - todo_wine - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - /* Server */ - my_alloc_called = 0; - StubMsg.IsClient = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 0); - ok(mem != mem_orig, "mem not alloced\n"); - ok(mem != StubMsg.BufferStart + 8, "mem pointing at buffer\n"); - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - NdrOleFree(mem); - - my_alloc_called = 0; - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 0); - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 1); - todo_wine - ok(mem == mem_orig, "mem alloced\n"); - todo_wine - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - HeapFree(GetProcessHeap(), 0, mem_orig); - HeapFree(GetProcessHeap(), 0, StubMsg.RpcMsg->Buffer); - - /* length = size */ - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 0; - - NdrNonConformantStringBufferSize( &StubMsg, - (unsigned char *)memsrc2, - fmtstr_nonconf_str ); - ok(StubMsg.BufferLength >= strlen((char *)memsrc2) + 1 + 8, "length %d\n", StubMsg.BufferLength); - - /*NdrGetBuffer(&_StubMsg, _StubMsg.BufferLength, NULL);*/ - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - StubMsg.BufferEnd = StubMsg.BufferStart + StubMsg.BufferLength; - - ptr = NdrNonConformantStringMarshall( &StubMsg, (unsigned char *)memsrc2, fmtstr_nonconf_str ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(StubMsg.Buffer - StubMsg.BufferStart == strlen((char *)memsrc2) + 1 + 8, "Buffer %p Start %p len %d\n", - StubMsg.Buffer, StubMsg.BufferStart, StubMsg.Buffer - StubMsg.BufferStart); - ok(!memcmp(StubMsg.BufferStart + 8, memsrc2, strlen((char *)memsrc2) + 1), "incorrectly marshaled\n"); - - StubMsg.Buffer = StubMsg.BufferStart; - StubMsg.MemorySize = 0; - mem = NULL; - - /* Client */ - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - mem = mem_orig = HeapAlloc(GetProcessHeap(), 0, sizeof(memsrc)); - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 0); - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - StubMsg.Buffer = StubMsg.BufferStart; - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 1); - todo_wine - ok(mem == mem_orig, "mem alloced\n"); - todo_wine - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - /* Server */ - my_alloc_called = 0; - StubMsg.IsClient = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 0); - ok(mem != mem_orig, "mem not alloced\n"); - ok(mem != StubMsg.BufferStart + 8, "mem pointing at buffer\n"); - ok(my_alloc_called == 1, "alloc called %d\n", my_alloc_called); - NdrOleFree(mem); - - my_alloc_called = 0; - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 0); - ok(mem == mem_orig, "mem alloced\n"); - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - my_alloc_called = 0; - mem = mem_orig; - StubMsg.Buffer = StubMsg.BufferStart; - NdrNonConformantStringUnmarshall( &StubMsg, &mem, fmtstr_nonconf_str, 1); - todo_wine - ok(mem == mem_orig, "mem alloced\n"); - todo_wine - ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called); - - HeapFree(GetProcessHeap(), 0, mem_orig); - HeapFree(GetProcessHeap(), 0, StubMsg.RpcMsg->Buffer); -} - -static void test_conf_complex_struct(void) -{ - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc; - void *ptr; - unsigned int i; - struct conf_complex - { - unsigned int size; - unsigned int *array[1]; - }; - struct conf_complex *memsrc; - struct conf_complex *mem; - - static const unsigned char fmtstr_complex_struct[] = - { -/* 0 */ - 0x1b, /* FC_CARRAY */ - 0x3, /* 3 */ -/* 2 */ NdrFcShort( 0x4 ), /* 4 */ -/* 4 */ 0x8, /* Corr desc: FC_LONG */ - 0x0, /* */ -/* 6 */ NdrFcShort( 0xfffc ), /* -4 */ -/* 8 */ - 0x4b, /* FC_PP */ - 0x5c, /* FC_PAD */ -/* 10 */ - 0x48, /* FC_VARIABLE_REPEAT */ - 0x49, /* FC_FIXED_OFFSET */ -/* 12 */ NdrFcShort( 0x4 ), /* 4 */ -/* 14 */ NdrFcShort( 0x0 ), /* 0 */ -/* 16 */ NdrFcShort( 0x1 ), /* 1 */ -/* 18 */ NdrFcShort( 0x0 ), /* 0 */ -/* 20 */ NdrFcShort( 0x0 ), /* 0 */ -/* 22 */ 0x12, 0x8, /* FC_UP [simple_pointer] */ -/* 24 */ 0x8, /* FC_LONG */ - 0x5c, /* FC_PAD */ -/* 26 */ - 0x5b, /* FC_END */ - - 0x8, /* FC_LONG */ -/* 28 */ 0x5c, /* FC_PAD */ - 0x5b, /* FC_END */ -/* 30 */ - 0x1a, /* FC_BOGUS_STRUCT */ - 0x3, /* 3 */ -/* 32 */ NdrFcShort( 0x4 ), /* 4 */ -/* 34 */ NdrFcShort( 0xffffffde ), /* Offset= -34 (0) */ -/* 36 */ NdrFcShort( 0x0 ), /* Offset= 0 (36) */ -/* 38 */ 0x8, /* FC_LONG */ - 0x5b, /* FC_END */ - }; - - memsrc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, - FIELD_OFFSET(struct conf_complex, array[20])); - memsrc->size = 20; - - StubDesc = Object_StubDesc; - StubDesc.pFormatTypes = fmtstr_complex_struct; - - NdrClientInitializeNew( - &RpcMessage, - &StubMsg, - &StubDesc, - 0); - - StubMsg.BufferLength = 0; - NdrComplexStructBufferSize( &StubMsg, - (unsigned char *)memsrc, - &fmtstr_complex_struct[30] ); - ok(StubMsg.BufferLength >= 28, "length %d\n", StubMsg.BufferLength); - - /*NdrGetBuffer(&_StubMsg, _StubMsg.BufferLength, NULL);*/ - StubMsg.RpcMsg->Buffer = StubMsg.BufferStart = StubMsg.Buffer = HeapAlloc(GetProcessHeap(), 0, StubMsg.BufferLength); - StubMsg.BufferEnd = StubMsg.BufferStart + StubMsg.BufferLength; - - ptr = NdrComplexStructMarshall( &StubMsg, (unsigned char *)memsrc, - &fmtstr_complex_struct[30] ); - ok(ptr == NULL, "ret %p\n", ptr); - ok(*(unsigned int *)StubMsg.BufferStart == 20, "Conformance should have been 20 instead of %d\n", (unsigned int)StubMsg.BufferStart); - ok(*(unsigned int *)(StubMsg.BufferStart + 4) == 20, "conf_complex.size should have been 20 instead of %d\n", (unsigned int)(StubMsg.BufferStart + 4)); - for (i = 0; i < 20; i++) - ok(*(unsigned int *)(StubMsg.BufferStart + 8 + i * 4) == 0, "pointer id for conf_complex.array[%d] should have been 0 instead of 0x%x\n", i, *(unsigned int *)(StubMsg.BufferStart + 8 + i * 4)); - - /* Server */ - my_alloc_called = 0; - StubMsg.IsClient = 0; - mem = NULL; - StubMsg.Buffer = StubMsg.BufferStart; - ptr = NdrComplexStructUnmarshall( &StubMsg, (unsigned char **)&mem, &fmtstr_complex_struct[30], 0); - ok(ptr == NULL, "ret %p\n", ptr); - ok(mem->size == 20, "mem->size wasn't unmarshalled correctly (%d)\n", mem->size); - ok(mem->array[0] == NULL, "mem->array[0] wasn't unmarshalled correctly (%p)\n", mem->array[0]); - StubMsg.pfnFree(mem); - - HeapFree(GetProcessHeap(), 0, StubMsg.RpcMsg->Buffer); -} - -static void test_ndr_buffer(void) -{ - static unsigned char ncalrpc[] = "ncalrpc"; - static unsigned char endpoint[] = "winetest:test_ndr_buffer"; - RPC_MESSAGE RpcMessage; - MIDL_STUB_MESSAGE StubMsg; - MIDL_STUB_DESC StubDesc = Object_StubDesc; - unsigned char *ret; - unsigned char *binding; - RPC_BINDING_HANDLE Handle; - RPC_STATUS status; - ULONG prev_buffer_length; - BOOL old_buffer_valid_location; - - StubDesc.RpcInterfaceInformation = (void *)&IFoo___RpcServerInterface; - - status = RpcServerUseProtseqEp(ncalrpc, 20, endpoint, NULL); - ok(RPC_S_OK == status, "RpcServerUseProtseqEp failed with status %lu\n", status); - status = RpcServerRegisterIf(IFoo_v0_0_s_ifspec, NULL, NULL); - ok(RPC_S_OK == status, "RpcServerRegisterIf failed with status %lu\n", status); - status = RpcServerListen(1, 20, TRUE); - ok(RPC_S_OK == status, "RpcServerListen failed with status %lu\n", status); - if (status != RPC_S_OK) - { - /* Failed to create a server, running client tests is useless */ - return; - } - - status = RpcStringBindingCompose(NULL, ncalrpc, NULL, endpoint, NULL, &binding); - ok(status == RPC_S_OK, "RpcStringBindingCompose failed (%lu)\n", status); - - status = RpcBindingFromStringBinding(binding, &Handle); - ok(status == RPC_S_OK, "RpcBindingFromStringBinding failed (%lu)\n", status); - RpcStringFree(&binding); - - NdrClientInitializeNew(&RpcMessage, &StubMsg, &StubDesc, 5); - - ret = NdrGetBuffer(&StubMsg, 10, Handle); - ok(ret == StubMsg.Buffer, "NdrGetBuffer should have returned the same value as StubMsg.Buffer instead of %p\n", ret); - ok(RpcMessage.Handle != NULL, "RpcMessage.Handle should not have been NULL\n"); - ok(RpcMessage.Buffer != NULL, "RpcMessage.Buffer should not have been NULL\n"); - ok(RpcMessage.BufferLength == 10 || - broken(RpcMessage.BufferLength == 12), /* win2k */ - "RpcMessage.BufferLength should have been 10 instead of %d\n", RpcMessage.BufferLength); - ok(RpcMessage.RpcFlags == 0, "RpcMessage.RpcFlags should have been 0x0 instead of 0x%lx\n", RpcMessage.RpcFlags); - ok(StubMsg.Buffer != NULL, "Buffer should not have been NULL\n"); - ok(!StubMsg.BufferStart, "BufferStart should have been NULL instead of %p\n", StubMsg.BufferStart); - ok(!StubMsg.BufferEnd, "BufferEnd should have been NULL instead of %p\n", StubMsg.BufferEnd); -todo_wine - ok(StubMsg.BufferLength == 0, "BufferLength should have left as 0 instead of being set to %d\n", StubMsg.BufferLength); - old_buffer_valid_location = !StubMsg.fBufferValid; - if (old_buffer_valid_location) - ok(broken(StubMsg.CorrDespIncrement == TRUE), "fBufferValid should have been TRUE instead of 0x%x\n", StubMsg.CorrDespIncrement); - else - ok(StubMsg.fBufferValid, "fBufferValid should have been non-zero instead of 0x%x\n", StubMsg.fBufferValid); - - prev_buffer_length = RpcMessage.BufferLength; - StubMsg.BufferLength = 1; - NdrFreeBuffer(&StubMsg); - ok(RpcMessage.Handle != NULL, "RpcMessage.Handle should not have been NULL\n"); - ok(RpcMessage.Buffer != NULL, "RpcMessage.Buffer should not have been NULL\n"); - ok(RpcMessage.BufferLength == prev_buffer_length, "RpcMessage.BufferLength should have been left as %d instead of %d\n", prev_buffer_length, RpcMessage.BufferLength); - ok(StubMsg.Buffer != NULL, "Buffer should not have been NULL\n"); - ok(StubMsg.BufferLength == 1, "BufferLength should have left as 1 instead of being set to %d\n", StubMsg.BufferLength); - if (old_buffer_valid_location) - ok(broken(StubMsg.CorrDespIncrement == FALSE), "fBufferValid should have been FALSE instead of 0x%x\n", StubMsg.CorrDespIncrement); - else - ok(!StubMsg.fBufferValid, "fBufferValid should have been FALSE instead of %d\n", StubMsg.fBufferValid); - - /* attempt double-free */ - NdrFreeBuffer(&StubMsg); - - RpcBindingFree(&Handle); - - status = RpcServerUnregisterIf(NULL, NULL, FALSE); - ok(status == RPC_S_OK, "RpcServerUnregisterIf failed (%lu)\n", status); -} - -static void test_NdrMapCommAndFaultStatus(void) -{ - RPC_STATUS rpc_status; - MIDL_STUB_MESSAGE StubMsg; - RPC_MESSAGE RpcMessage; - - NdrClientInitializeNew(&RpcMessage, &StubMsg, &Object_StubDesc, 5); - - for (rpc_status = 0; rpc_status < 10000; rpc_status++) - { - RPC_STATUS status; - ULONG comm_status = 0; - ULONG fault_status = 0; - ULONG expected_comm_status = 0; - ULONG expected_fault_status = 0; - status = NdrMapCommAndFaultStatus(&StubMsg, &comm_status, &fault_status, rpc_status); - ok(status == RPC_S_OK, "NdrMapCommAndFaultStatus failed with error %ld\n", status); - switch (rpc_status) - { - case ERROR_INVALID_HANDLE: - case RPC_S_INVALID_BINDING: - case RPC_S_UNKNOWN_IF: - case RPC_S_SERVER_UNAVAILABLE: - case RPC_S_SERVER_TOO_BUSY: - case RPC_S_CALL_FAILED_DNE: - case RPC_S_PROTOCOL_ERROR: - case RPC_S_UNSUPPORTED_TRANS_SYN: - case RPC_S_UNSUPPORTED_TYPE: - case RPC_S_PROCNUM_OUT_OF_RANGE: - case EPT_S_NOT_REGISTERED: - case RPC_S_COMM_FAILURE: - expected_comm_status = rpc_status; - break; - default: - expected_fault_status = rpc_status; - } - ok(comm_status == expected_comm_status, "NdrMapCommAndFaultStatus should have mapped %ld to comm status %d instead of %d\n", - rpc_status, expected_comm_status, comm_status); - ok(fault_status == expected_fault_status, "NdrMapCommAndFaultStatus should have mapped %ld to fault status %d instead of %d\n", - rpc_status, expected_fault_status, fault_status); - } -} - -START_TEST( ndr_marshall ) -{ - determine_pointer_marshalling_style(); - - test_ndr_simple_type(); - test_simple_types(); - test_nontrivial_pointer_types(); - test_simple_struct(); - test_fullpointer_xlat(); - test_client_init(); - test_server_init(); - test_ndr_allocate(); - test_conformant_array(); - test_conformant_string(); - test_nonconformant_string(); - test_conf_complex_struct(); - test_ndr_buffer(); - test_NdrMapCommAndFaultStatus(); -} diff --git a/rostests/winetests/rpcrt4/rpc.c b/rostests/winetests/rpcrt4/rpc.c deleted file mode 100644 index d59b5ba3dcc..00000000000 --- a/rostests/winetests/rpcrt4/rpc.c +++ /dev/null @@ -1,780 +0,0 @@ -/* - * Unit test suite for rpc functions - * - * Copyright 2002 Greg Turner - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 WIN32_NO_STATUS -#include "wine/test.h" -#include -#include -#include -#include -#include - -#include "rpc.h" -#include "rpcdce.h" - -typedef unsigned int unsigned32; -typedef struct twr_t - { - unsigned32 tower_length; - /* [size_is] */ byte tower_octet_string[ 1 ]; - } twr_t; - -RPC_STATUS WINAPI TowerExplode(const twr_t *tower, RPC_SYNTAX_IDENTIFIER *object, RPC_SYNTAX_IDENTIFIER *syntax, char **protseq, char **endpoint, char **address); -RPC_STATUS WINAPI TowerConstruct(const RPC_SYNTAX_IDENTIFIER *object, const RPC_SYNTAX_IDENTIFIER *syntax, const char *protseq, const char *endpoint, const char *address, twr_t **tower); - -static UUID Uuid_Table[10] = { - { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }, /* 0 (null) */ - { 0xdeadbeef, 0xdead, 0xbeef, {0x10, 0x21, 0x35, 0x56, 0x89, 0xa0, 0xf4, 0x8a} }, /* 1 */ - { 0xabadfeed, 0x49ff, 0xbead, {0x8a, 0xf4, 0xa0, 0x89, 0x56, 0x35, 0x21, 0x10} }, /* 2 */ - { 0x93da375c, 0x1324, 0x1355, {0x87, 0xff, 0x49, 0x44, 0x34, 0x44, 0x22, 0x19} }, /* 3 */ - { 0xdeadbeef, 0xdead, 0xbeef, {0x10, 0x21, 0x35, 0x56, 0x89, 0xa0, 0xf4, 0x8b} }, /* 4 (~1) */ - { 0x9badfeed, 0x49ff, 0xbead, {0x8a, 0xf4, 0xa0, 0x89, 0x56, 0x35, 0x21, 0x10} }, /* 5 (~2) */ - { 0x00000000, 0x0001, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }, /* 6 (~0) */ - { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01} }, /* 7 (~0) */ - { 0x12312312, 0x1231, 0x1231, {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xff} }, /* 8 */ - { 0x11111111, 0x1111, 0x1111, {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11} } /* 9 */ -}; - -/* index of "10" means "NULL" */ -static BOOL Uuid_Comparison_Grid[11][11] = { - { TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE }, - { FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE }, - { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE }, - { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE }, - { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE }, - { TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE } -}; - -static void UuidConversionAndComparison(void) { - CHAR strx[100], x; - LPSTR str = strx; - WCHAR wstrx[100], wx; - LPWSTR wstr = wstrx; - - UUID Uuid1, Uuid2, *PUuid1, *PUuid2; - RPC_STATUS rslt; - - int i1,i2; - - /* Uuid Equality */ - for (i1 = 0; i1 < 11; i1++) - for (i2 = 0; i2 < 11; i2++) { - if (i1 < 10) { - Uuid1 = Uuid_Table[i1]; - PUuid1 = &Uuid1; - } else { - PUuid1 = NULL; - } - if (i2 < 10) { - Uuid2 = Uuid_Table[i2]; - PUuid2 = &Uuid2; - } else { - PUuid2 = NULL; - } - ok( (UuidEqual(PUuid1, PUuid2, &rslt) == Uuid_Comparison_Grid[i1][i2]), "UUID Equality\n" ); - } - - /* Uuid to String to Uuid (char) */ - for (i1 = 0; i1 < 10; i1++) { - Uuid1 = Uuid_Table[i1]; - ok( (UuidToStringA(&Uuid1, (unsigned char**)&str) == RPC_S_OK), "Simple UUID->String copy\n" ); - ok( (UuidFromStringA((unsigned char*)str, &Uuid2) == RPC_S_OK), "Simple String->UUID copy from generated UUID String\n" ); - ok( UuidEqual(&Uuid1, &Uuid2, &rslt), "Uuid -> String -> Uuid transform\n" ); - /* invalid uuid tests -- size of valid UUID string=36 */ - for (i2 = 0; i2 < 36; i2++) { - x = str[i2]; - str[i2] = 'g'; /* whatever, but "g" is a good boundary condition */ - ok( (UuidFromStringA((unsigned char*)str, &Uuid1) == RPC_S_INVALID_STRING_UUID), "Invalid UUID String\n" ); - str[i2] = x; /* change it back so remaining tests are interesting. */ - } - RpcStringFree((unsigned char **)&str); - } - - /* Uuid to String to Uuid (wchar) */ - for (i1 = 0; i1 < 10; i1++) { - Uuid1 = Uuid_Table[i1]; - rslt=UuidToStringW(&Uuid1, &wstr); - if (rslt==RPC_S_CANNOT_SUPPORT) { - /* Must be Win9x (no Unicode support), skip the tests */ - break; - } - ok( (rslt == RPC_S_OK), "Simple UUID->WString copy\n" ); - ok( (UuidFromStringW(wstr, &Uuid2) == RPC_S_OK), "Simple WString->UUID copy from generated UUID String\n" ); - ok( UuidEqual(&Uuid1, &Uuid2, &rslt), "Uuid -> WString -> Uuid transform\n" ); - /* invalid uuid tests -- size of valid UUID string=36 */ - for (i2 = 0; i2 < 36; i2++) { - wx = wstr[i2]; - wstr[i2] = 'g'; /* whatever, but "g" is a good boundary condition */ - ok( (UuidFromStringW(wstr, &Uuid1) == RPC_S_INVALID_STRING_UUID), "Invalid UUID WString\n" ); - wstr[i2] = wx; /* change it back so remaining tests are interesting. */ - } - RpcStringFreeW(&wstr); - } -} - -static void TestDceErrorInqText (void) -{ - char bufferInvalid [1024]; - char buffer [1024]; /* The required size is not documented but would - * appear to be 256. - */ - DWORD dwCount; - - dwCount = FormatMessageA (FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, RPC_S_NOT_RPC_ERROR, 0, bufferInvalid, - sizeof(bufferInvalid)/sizeof(bufferInvalid[0]), NULL); - - /* A random sample of DceErrorInqText */ - /* 0 is success */ - ok ((DceErrorInqTextA (0, (unsigned char*)buffer) == RPC_S_OK), - "DceErrorInqTextA(0...)\n"); - /* A real RPC_S error */ - ok ((DceErrorInqTextA (RPC_S_INVALID_STRING_UUID, (unsigned char*)buffer) == RPC_S_OK), - "DceErrorInqTextA(valid...)\n"); - - if (dwCount) - { - /* A message for which FormatMessage should fail - * which should return RPC_S_OK and the - * fixed "not valid" message - */ - ok ((DceErrorInqTextA (35, (unsigned char*)buffer) == RPC_S_OK && - strcmp (buffer, bufferInvalid) == 0), - "DceErrorInqTextA(unformattable...)\n"); - /* One for which FormatMessage should succeed but - * DceErrorInqText should "fail" - * 3814 is generally quite a long message - */ - ok ((DceErrorInqTextA (3814, (unsigned char*)buffer) == RPC_S_OK && - strcmp (buffer, bufferInvalid) == 0), - "DceErrorInqTextA(deviation...)\n"); - } - else - ok (0, "Cannot set up for DceErrorInqText\n"); -} - -static RPC_DISPATCH_FUNCTION IFoo_table[] = -{ - 0 -}; - -static RPC_DISPATCH_TABLE IFoo_v0_0_DispatchTable = -{ - 0, - IFoo_table -}; - -static const RPC_SERVER_INTERFACE IFoo___RpcServerInterface = -{ - sizeof(RPC_SERVER_INTERFACE), - {{0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x34}},{0,0}}, - {{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}}, - &IFoo_v0_0_DispatchTable, - 0, - 0, - 0, - 0, - 0, -}; - -static RPC_IF_HANDLE IFoo_v0_0_s_ifspec = (RPC_IF_HANDLE)& IFoo___RpcServerInterface; - -static void test_rpc_ncacn_ip_tcp(void) -{ - RPC_STATUS status; - unsigned char *binding; - handle_t IFoo_IfHandle; - static unsigned char foo[] = "foo"; - static unsigned char ncacn_ip_tcp[] = "ncacn_ip_tcp"; - static unsigned char address[] = "127.0.0.1"; - static unsigned char endpoint[] = "4114"; - - status = RpcNetworkIsProtseqValid(foo); - ok(status == RPC_S_INVALID_RPC_PROTSEQ, "return wrong\n"); - - status = RpcNetworkIsProtseqValid(ncacn_ip_tcp); - ok(status == RPC_S_OK, "return wrong\n"); - - status = RpcMgmtStopServerListening(NULL); -todo_wine { - ok(status == RPC_S_NOT_LISTENING, - "wrong RpcMgmtStopServerListening error (%lu)\n", status); -} - - status = RpcMgmtWaitServerListen(); - ok(status == RPC_S_NOT_LISTENING, - "wrong RpcMgmtWaitServerListen error status (%lu)\n", status); - - status = RpcServerListen(1, 20, FALSE); - ok(status == RPC_S_NO_PROTSEQS_REGISTERED, - "wrong RpcServerListen error (%lu)\n", status); - - status = RpcServerUseProtseqEp(ncacn_ip_tcp, 20, endpoint, NULL); - ok(status == RPC_S_OK, "RpcServerUseProtseqEp failed (%lu)\n", status); - - status = RpcServerRegisterIf(IFoo_v0_0_s_ifspec, NULL, NULL); - ok(status == RPC_S_OK, "RpcServerRegisterIf failed (%lu)\n", status); - - status = RpcServerListen(1, 20, TRUE); -todo_wine { - ok(status == RPC_S_OK, "RpcServerListen failed (%lu)\n", status); -} - - status = RpcServerListen(1, 20, TRUE); -todo_wine { - ok(status == RPC_S_ALREADY_LISTENING, - "wrong RpcServerListen error (%lu)\n", status); -} - - status = RpcStringBindingCompose(NULL, ncacn_ip_tcp, address, - endpoint, NULL, &binding); - ok(status == RPC_S_OK, "RpcStringBindingCompose failed (%lu)\n", status); - - status = RpcBindingFromStringBinding(binding, &IFoo_IfHandle); - ok(status == RPC_S_OK, "RpcBindingFromStringBinding failed (%lu)\n", - status); - - status = RpcBindingSetAuthInfo(IFoo_IfHandle, NULL, RPC_C_AUTHN_LEVEL_NONE, - RPC_C_AUTHN_WINNT, NULL, RPC_C_AUTHZ_NAME); - ok(status == RPC_S_OK, "RpcBindingSetAuthInfo failed (%lu)\n", status); - - status = RpcMgmtStopServerListening(NULL); - ok(status == RPC_S_OK, "RpcMgmtStopServerListening failed (%lu)\n", - status); - - status = RpcMgmtStopServerListening(NULL); - ok(status == RPC_S_OK, "RpcMgmtStopServerListening failed (%lu)\n", - status); - - status = RpcServerUnregisterIf(NULL, NULL, FALSE); - ok(status == RPC_S_OK, "RpcServerUnregisterIf failed (%lu)\n", status); - - status = RpcMgmtWaitServerListen(); -todo_wine { - ok(status == RPC_S_OK, "RpcMgmtWaitServerListen failed (%lu)\n", status); -} - - status = RpcStringFree(&binding); - ok(status == RPC_S_OK, "RpcStringFree failed (%lu)\n", status); - - status = RpcBindingFree(&IFoo_IfHandle); - ok(status == RPC_S_OK, "RpcBindingFree failed (%lu)\n", status); -} - -/* this is what's generated with MS/RPC - it includes an extra 2 - * bytes in the protocol floor */ -static const unsigned char tower_data_tcp_ip1[] = -{ - 0x05,0x00,0x13,0x00,0x0d,0x00,0xdb,0xf1, - 0xa4,0x47,0xca,0x67,0x10,0xb3,0x1f,0x00, - 0xdd,0x01,0x06,0x62,0xda,0x00,0x00,0x02, - 0x00,0x00,0x00,0x13,0x00,0x0d,0x04,0x5d, - 0x88,0x8a,0xeb,0x1c,0xc9,0x11,0x9f,0xe8, - 0x08,0x00,0x2b,0x10,0x48,0x60,0x02,0x00, - 0x02,0x00,0x00,0x00,0x01,0x00,0x0b,0x02, - 0x00,0x00,0x00,0x01,0x00,0x07,0x02,0x00, - 0x00,0x87,0x01,0x00,0x09,0x04,0x00,0x0a, - 0x00,0x00,0x01, -}; -/* this is the optimal data that i think should be generated */ -static const unsigned char tower_data_tcp_ip2[] = -{ - 0x05,0x00,0x13,0x00,0x0d,0x00,0xdb,0xf1, - 0xa4,0x47,0xca,0x67,0x10,0xb3,0x1f,0x00, - 0xdd,0x01,0x06,0x62,0xda,0x00,0x00,0x02, - 0x00,0x00,0x00,0x13,0x00,0x0d,0x04,0x5d, - 0x88,0x8a,0xeb,0x1c,0xc9,0x11,0x9f,0xe8, - 0x08,0x00,0x2b,0x10,0x48,0x60,0x02,0x00, - 0x02,0x00,0x00,0x00,0x01,0x00,0x0b,0x00, - 0x00,0x01,0x00,0x07,0x02,0x00,0x00,0x87, - 0x01,0x00,0x09,0x04,0x00,0x0a,0x00,0x00, - 0x01, -}; - -static void test_towers(void) -{ - RPC_STATUS ret; - twr_t *tower; - static const RPC_SYNTAX_IDENTIFIER mapi_if_id = { { 0xa4f1db00, 0xca47, 0x1067, { 0xb3, 0x1f, 0x00, 0xdd, 0x01, 0x06, 0x62, 0xda } }, { 0, 0 } }; - static const RPC_SYNTAX_IDENTIFIER ndr_syntax = { { 0x8a885d04, 0x1ceb, 0x11c9, { 0x9f, 0xe8, 0x08, 0x00, 0x2b, 0x10, 0x48, 0x60 } }, { 2, 0 } }; - RPC_SYNTAX_IDENTIFIER object, syntax; - char *protseq, *endpoint, *address; - BOOL same; - - ret = TowerConstruct(&mapi_if_id, &ndr_syntax, "ncacn_ip_tcp", "135", "10.0.0.1", &tower); - ok(ret == RPC_S_OK || - broken(ret == RPC_S_INVALID_RPC_PROTSEQ), /* Vista */ - "TowerConstruct failed with error %ld\n", ret); - if (ret == RPC_S_INVALID_RPC_PROTSEQ) - { - /* Windows Vista fails with this error and crashes if we continue */ - skip("TowerConstruct failed, we are most likely on Windows Vista\n"); - return; - } - - /* first check we have the right amount of data */ - ok(tower->tower_length == sizeof(tower_data_tcp_ip1) || - tower->tower_length == sizeof(tower_data_tcp_ip2), - "Wrong size of tower %d\n", tower->tower_length); - - /* then do a byte-by-byte comparison */ - same = ((tower->tower_length == sizeof(tower_data_tcp_ip1)) && - !memcmp(&tower->tower_octet_string, tower_data_tcp_ip1, sizeof(tower_data_tcp_ip1))) || - ((tower->tower_length == sizeof(tower_data_tcp_ip2)) && - !memcmp(&tower->tower_octet_string, tower_data_tcp_ip2, sizeof(tower_data_tcp_ip2))); - - ok(same, "Tower data differs\n"); - if (!same) - { - unsigned32 i; - for (i = 0; i < tower->tower_length; i++) - { - if (i % 8 == 0) printf(" "); - printf("0x%02x,", tower->tower_octet_string[i]); - if (i % 8 == 7) printf("\n"); - } - printf("\n"); - } - - ret = TowerExplode(tower, &object, &syntax, &protseq, &endpoint, &address); - ok(ret == RPC_S_OK, "TowerExplode failed with error %ld\n", ret); - ok(!memcmp(&object, &mapi_if_id, sizeof(mapi_if_id)), "object id didn't match\n"); - ok(!memcmp(&syntax, &ndr_syntax, sizeof(syntax)), "syntax id didn't match\n"); - ok(!strcmp(protseq, "ncacn_ip_tcp"), "protseq was \"%s\" instead of \"ncacn_ip_tcp\"\n", protseq); - ok(!strcmp(endpoint, "135"), "endpoint was \"%s\" instead of \"135\"\n", endpoint); - ok(!strcmp(address, "10.0.0.1"), "address was \"%s\" instead of \"10.0.0.1\"\n", address); - - I_RpcFree(protseq); - I_RpcFree(endpoint); - I_RpcFree(address); - - ret = TowerExplode(tower, NULL, NULL, NULL, NULL, NULL); - ok(ret == RPC_S_OK, "TowerExplode failed with error %ld\n", ret); - - I_RpcFree(tower); - - /* test the behaviour for ip_tcp with name instead of dotted IP notation */ - ret = TowerConstruct(&mapi_if_id, &ndr_syntax, "ncacn_ip_tcp", "135", "localhost", &tower); - ok(ret == RPC_S_OK, "TowerConstruct failed with error %ld\n", ret); - ret = TowerExplode(tower, NULL, NULL, NULL, NULL, &address); - ok(ret == RPC_S_OK, "TowerExplode failed with error %ld\n", ret); - ok(!strcmp(address, "0.0.0.0"), "address was \"%s\" instead of \"0.0.0.0\"\n", address); - - I_RpcFree(address); - I_RpcFree(tower); - - /* test the behaviour for np with no address */ - ret = TowerConstruct(&mapi_if_id, &ndr_syntax, "ncacn_np", "\\pipe\\test", NULL, &tower); - ok(ret == RPC_S_OK, "TowerConstruct failed with error %ld\n", ret); - ret = TowerExplode(tower, NULL, NULL, NULL, NULL, &address); - ok(ret == RPC_S_OK || - broken(ret != RPC_S_OK), /* win2k, indeterminate */ - "TowerExplode failed with error %ld\n", ret); - /* Windows XP SP3 sets address to NULL */ - ok(!address || !strcmp(address, ""), "address was \"%s\" instead of \"\"\n or NULL (XP SP3)", address); - - I_RpcFree(address); - I_RpcFree(tower); -} - -static void test_I_RpcMapWin32Status(void) -{ - LONG win32status; - RPC_STATUS rpc_status; - BOOL on_win9x = FALSE; - BOOL w2k3_up = FALSE; - - /* Win9x always returns the given status */ - win32status = I_RpcMapWin32Status(ERROR_ACCESS_DENIED); - if (win32status == ERROR_ACCESS_DENIED) - on_win9x = TRUE; - - /* Windows 2003 and Vista return STATUS_UNSUCCESSFUL if given an unknown status */ - win32status = I_RpcMapWin32Status(9999); - if (win32status == STATUS_UNSUCCESSFUL) - { - trace("We are on Windows 2003 or Vista\n"); - w2k3_up = TRUE; - } - - /* On Windows XP-SP1 and below some statuses are not mapped and return - * the given status - */ - for (rpc_status = 0; rpc_status < 10000; rpc_status++) - { - LONG expected_win32status; - BOOL missing = FALSE; - - win32status = I_RpcMapWin32Status(rpc_status); - switch (rpc_status) - { - case ERROR_SUCCESS: expected_win32status = ERROR_SUCCESS; break; - case ERROR_ACCESS_DENIED: expected_win32status = STATUS_ACCESS_DENIED; break; - case ERROR_INVALID_HANDLE: expected_win32status = RPC_NT_SS_CONTEXT_MISMATCH; break; - case ERROR_OUTOFMEMORY: expected_win32status = STATUS_NO_MEMORY; break; - case ERROR_INVALID_PARAMETER: expected_win32status = STATUS_INVALID_PARAMETER; break; - case ERROR_INSUFFICIENT_BUFFER: expected_win32status = STATUS_BUFFER_TOO_SMALL; break; - case ERROR_MAX_THRDS_REACHED: expected_win32status = STATUS_NO_MEMORY; break; - case ERROR_NOACCESS: expected_win32status = STATUS_ACCESS_VIOLATION; break; - case ERROR_NOT_ENOUGH_SERVER_MEMORY: expected_win32status = STATUS_INSUFF_SERVER_RESOURCES; break; - case ERROR_WRONG_PASSWORD: expected_win32status = STATUS_WRONG_PASSWORD; missing = TRUE; break; - case ERROR_INVALID_LOGON_HOURS: expected_win32status = STATUS_INVALID_LOGON_HOURS; missing = TRUE; break; - case ERROR_PASSWORD_EXPIRED: expected_win32status = STATUS_PASSWORD_EXPIRED; missing = TRUE; break; - case ERROR_ACCOUNT_DISABLED: expected_win32status = STATUS_ACCOUNT_DISABLED; missing = TRUE; break; - case ERROR_INVALID_SECURITY_DESCR: expected_win32status = STATUS_INVALID_SECURITY_DESCR; break; - case RPC_S_INVALID_STRING_BINDING: expected_win32status = RPC_NT_INVALID_STRING_BINDING; break; - case RPC_S_WRONG_KIND_OF_BINDING: expected_win32status = RPC_NT_WRONG_KIND_OF_BINDING; break; - case RPC_S_INVALID_BINDING: expected_win32status = RPC_NT_INVALID_BINDING; break; - case RPC_S_PROTSEQ_NOT_SUPPORTED: expected_win32status = RPC_NT_PROTSEQ_NOT_SUPPORTED; break; - case RPC_S_INVALID_RPC_PROTSEQ: expected_win32status = RPC_NT_INVALID_RPC_PROTSEQ; break; - case RPC_S_INVALID_STRING_UUID: expected_win32status = RPC_NT_INVALID_STRING_UUID; break; - case RPC_S_INVALID_ENDPOINT_FORMAT: expected_win32status = RPC_NT_INVALID_ENDPOINT_FORMAT; break; - case RPC_S_INVALID_NET_ADDR: expected_win32status = RPC_NT_INVALID_NET_ADDR; break; - case RPC_S_NO_ENDPOINT_FOUND: expected_win32status = RPC_NT_NO_ENDPOINT_FOUND; break; - case RPC_S_INVALID_TIMEOUT: expected_win32status = RPC_NT_INVALID_TIMEOUT; break; - case RPC_S_OBJECT_NOT_FOUND: expected_win32status = RPC_NT_OBJECT_NOT_FOUND; break; - case RPC_S_ALREADY_REGISTERED: expected_win32status = RPC_NT_ALREADY_REGISTERED; break; - case RPC_S_TYPE_ALREADY_REGISTERED: expected_win32status = RPC_NT_TYPE_ALREADY_REGISTERED; break; - case RPC_S_ALREADY_LISTENING: expected_win32status = RPC_NT_ALREADY_LISTENING; break; - case RPC_S_NO_PROTSEQS_REGISTERED: expected_win32status = RPC_NT_NO_PROTSEQS_REGISTERED; break; - case RPC_S_NOT_LISTENING: expected_win32status = RPC_NT_NOT_LISTENING; break; - case RPC_S_UNKNOWN_MGR_TYPE: expected_win32status = RPC_NT_UNKNOWN_MGR_TYPE; break; - case RPC_S_UNKNOWN_IF: expected_win32status = RPC_NT_UNKNOWN_IF; break; - case RPC_S_NO_BINDINGS: expected_win32status = RPC_NT_NO_BINDINGS; break; - case RPC_S_NO_PROTSEQS: expected_win32status = RPC_NT_NO_PROTSEQS; break; - case RPC_S_CANT_CREATE_ENDPOINT: expected_win32status = RPC_NT_CANT_CREATE_ENDPOINT; break; - case RPC_S_OUT_OF_RESOURCES: expected_win32status = RPC_NT_OUT_OF_RESOURCES; break; - case RPC_S_SERVER_UNAVAILABLE: expected_win32status = RPC_NT_SERVER_UNAVAILABLE; break; - case RPC_S_SERVER_TOO_BUSY: expected_win32status = RPC_NT_SERVER_TOO_BUSY; break; - case RPC_S_INVALID_NETWORK_OPTIONS: expected_win32status = RPC_NT_INVALID_NETWORK_OPTIONS; break; - case RPC_S_NO_CALL_ACTIVE: expected_win32status = RPC_NT_NO_CALL_ACTIVE; break; - case RPC_S_CALL_FAILED: expected_win32status = RPC_NT_CALL_FAILED; break; - case RPC_S_CALL_FAILED_DNE: expected_win32status = RPC_NT_CALL_FAILED_DNE; break; - case RPC_S_PROTOCOL_ERROR: expected_win32status = RPC_NT_PROTOCOL_ERROR; break; - case RPC_S_UNSUPPORTED_TRANS_SYN: expected_win32status = RPC_NT_UNSUPPORTED_TRANS_SYN; break; - case RPC_S_UNSUPPORTED_TYPE: expected_win32status = RPC_NT_UNSUPPORTED_TYPE; break; - case RPC_S_INVALID_TAG: expected_win32status = RPC_NT_INVALID_TAG; break; - case RPC_S_INVALID_BOUND: expected_win32status = RPC_NT_INVALID_BOUND; break; - case RPC_S_NO_ENTRY_NAME: expected_win32status = RPC_NT_NO_ENTRY_NAME; break; - case RPC_S_INVALID_NAME_SYNTAX: expected_win32status = RPC_NT_INVALID_NAME_SYNTAX; break; - case RPC_S_UNSUPPORTED_NAME_SYNTAX: expected_win32status = RPC_NT_UNSUPPORTED_NAME_SYNTAX; break; - case RPC_S_UUID_NO_ADDRESS: expected_win32status = RPC_NT_UUID_NO_ADDRESS; break; - case RPC_S_DUPLICATE_ENDPOINT: expected_win32status = RPC_NT_DUPLICATE_ENDPOINT; break; - case RPC_S_UNKNOWN_AUTHN_TYPE: expected_win32status = RPC_NT_UNKNOWN_AUTHN_TYPE; break; - case RPC_S_MAX_CALLS_TOO_SMALL: expected_win32status = RPC_NT_MAX_CALLS_TOO_SMALL; break; - case RPC_S_STRING_TOO_LONG: expected_win32status = RPC_NT_STRING_TOO_LONG; break; - case RPC_S_PROTSEQ_NOT_FOUND: expected_win32status = RPC_NT_PROTSEQ_NOT_FOUND; break; - case RPC_S_PROCNUM_OUT_OF_RANGE: expected_win32status = RPC_NT_PROCNUM_OUT_OF_RANGE; break; - case RPC_S_BINDING_HAS_NO_AUTH: expected_win32status = RPC_NT_BINDING_HAS_NO_AUTH; break; - case RPC_S_UNKNOWN_AUTHN_SERVICE: expected_win32status = RPC_NT_UNKNOWN_AUTHN_SERVICE; break; - case RPC_S_UNKNOWN_AUTHN_LEVEL: expected_win32status = RPC_NT_UNKNOWN_AUTHN_LEVEL; break; - case RPC_S_INVALID_AUTH_IDENTITY: expected_win32status = RPC_NT_INVALID_AUTH_IDENTITY; break; - case RPC_S_UNKNOWN_AUTHZ_SERVICE: expected_win32status = RPC_NT_UNKNOWN_AUTHZ_SERVICE; break; - case EPT_S_INVALID_ENTRY: expected_win32status = EPT_NT_INVALID_ENTRY; break; - case EPT_S_CANT_PERFORM_OP: expected_win32status = EPT_NT_CANT_PERFORM_OP; break; - case EPT_S_NOT_REGISTERED: expected_win32status = EPT_NT_NOT_REGISTERED; break; - case EPT_S_CANT_CREATE: expected_win32status = EPT_NT_CANT_CREATE; break; - case RPC_S_NOTHING_TO_EXPORT: expected_win32status = RPC_NT_NOTHING_TO_EXPORT; break; - case RPC_S_INCOMPLETE_NAME: expected_win32status = RPC_NT_INCOMPLETE_NAME; break; - case RPC_S_INVALID_VERS_OPTION: expected_win32status = RPC_NT_INVALID_VERS_OPTION; break; - case RPC_S_NO_MORE_MEMBERS: expected_win32status = RPC_NT_NO_MORE_MEMBERS; break; - case RPC_S_NOT_ALL_OBJS_UNEXPORTED: expected_win32status = RPC_NT_NOT_ALL_OBJS_UNEXPORTED; break; - case RPC_S_INTERFACE_NOT_FOUND: expected_win32status = RPC_NT_INTERFACE_NOT_FOUND; break; - case RPC_S_ENTRY_ALREADY_EXISTS: expected_win32status = RPC_NT_ENTRY_ALREADY_EXISTS; break; - case RPC_S_ENTRY_NOT_FOUND: expected_win32status = RPC_NT_ENTRY_NOT_FOUND; break; - case RPC_S_NAME_SERVICE_UNAVAILABLE: expected_win32status = RPC_NT_NAME_SERVICE_UNAVAILABLE; break; - case RPC_S_INVALID_NAF_ID: expected_win32status = RPC_NT_INVALID_NAF_ID; break; - case RPC_S_CANNOT_SUPPORT: expected_win32status = RPC_NT_CANNOT_SUPPORT; break; - case RPC_S_NO_CONTEXT_AVAILABLE: expected_win32status = RPC_NT_NO_CONTEXT_AVAILABLE; break; - case RPC_S_INTERNAL_ERROR: expected_win32status = RPC_NT_INTERNAL_ERROR; break; - case RPC_S_ZERO_DIVIDE: expected_win32status = RPC_NT_ZERO_DIVIDE; break; - case RPC_S_ADDRESS_ERROR: expected_win32status = RPC_NT_ADDRESS_ERROR; break; - case RPC_S_FP_DIV_ZERO: expected_win32status = RPC_NT_FP_DIV_ZERO; break; - case RPC_S_FP_UNDERFLOW: expected_win32status = RPC_NT_FP_UNDERFLOW; break; - case RPC_S_FP_OVERFLOW: expected_win32status = RPC_NT_FP_OVERFLOW; break; - case RPC_S_CALL_IN_PROGRESS: expected_win32status = RPC_NT_CALL_IN_PROGRESS; break; - case RPC_S_NO_MORE_BINDINGS: expected_win32status = RPC_NT_NO_MORE_BINDINGS; break; - case RPC_S_CALL_CANCELLED: expected_win32status = RPC_NT_CALL_CANCELLED; missing = TRUE; break; - case RPC_S_INVALID_OBJECT: expected_win32status = RPC_NT_INVALID_OBJECT; break; - case RPC_S_INVALID_ASYNC_HANDLE: expected_win32status = RPC_NT_INVALID_ASYNC_HANDLE; missing = TRUE; break; - case RPC_S_INVALID_ASYNC_CALL: expected_win32status = RPC_NT_INVALID_ASYNC_CALL; missing = TRUE; break; - case RPC_S_GROUP_MEMBER_NOT_FOUND: expected_win32status = RPC_NT_GROUP_MEMBER_NOT_FOUND; break; - case RPC_X_NO_MORE_ENTRIES: expected_win32status = RPC_NT_NO_MORE_ENTRIES; break; - case RPC_X_SS_CHAR_TRANS_OPEN_FAIL: expected_win32status = RPC_NT_SS_CHAR_TRANS_OPEN_FAIL; break; - case RPC_X_SS_CHAR_TRANS_SHORT_FILE: expected_win32status = RPC_NT_SS_CHAR_TRANS_SHORT_FILE; break; - case RPC_X_SS_IN_NULL_CONTEXT: expected_win32status = RPC_NT_SS_IN_NULL_CONTEXT; break; - case RPC_X_SS_CONTEXT_DAMAGED: expected_win32status = RPC_NT_SS_CONTEXT_DAMAGED; break; - case RPC_X_SS_HANDLES_MISMATCH: expected_win32status = RPC_NT_SS_HANDLES_MISMATCH; break; - case RPC_X_SS_CANNOT_GET_CALL_HANDLE: expected_win32status = RPC_NT_SS_CANNOT_GET_CALL_HANDLE; break; - case RPC_X_NULL_REF_POINTER: expected_win32status = RPC_NT_NULL_REF_POINTER; break; - case RPC_X_ENUM_VALUE_OUT_OF_RANGE: expected_win32status = RPC_NT_ENUM_VALUE_OUT_OF_RANGE; break; - case RPC_X_BYTE_COUNT_TOO_SMALL: expected_win32status = RPC_NT_BYTE_COUNT_TOO_SMALL; break; - case RPC_X_BAD_STUB_DATA: expected_win32status = RPC_NT_BAD_STUB_DATA; break; - case RPC_X_PIPE_CLOSED: expected_win32status = RPC_NT_PIPE_CLOSED; missing = TRUE; break; - case RPC_X_PIPE_DISCIPLINE_ERROR: expected_win32status = RPC_NT_PIPE_DISCIPLINE_ERROR; missing = TRUE; break; - case RPC_X_PIPE_EMPTY: expected_win32status = RPC_NT_PIPE_EMPTY; missing = TRUE; break; - case ERROR_PASSWORD_MUST_CHANGE: expected_win32status = STATUS_PASSWORD_MUST_CHANGE; missing = TRUE; break; - case ERROR_ACCOUNT_LOCKED_OUT: expected_win32status = STATUS_ACCOUNT_LOCKED_OUT; missing = TRUE; break; - default: - if (w2k3_up) - expected_win32status = STATUS_UNSUCCESSFUL; - else - expected_win32status = rpc_status; - } - - if (on_win9x) - missing = TRUE; - - ok(win32status == expected_win32status || - broken(missing && win32status == rpc_status), - "I_RpcMapWin32Status(%ld) should have returned 0x%x instead of 0x%x%s\n", - rpc_status, expected_win32status, win32status, - broken(missing) ? " (or have returned with the given status)" : ""); - } -} - -static void test_RpcStringBindingParseA(void) -{ - static unsigned char valid_binding[] = "00000000-0000-0000-c000-000000000046@ncacn_np:.[endpoint=\\pipe\\test]"; - static unsigned char valid_binding2[] = "00000000-0000-0000-c000-000000000046@ncacn_np:.[\\pipe\\test]"; - static unsigned char invalid_uuid_binding[] = "{00000000-0000-0000-c000-000000000046}@ncacn_np:.[endpoint=\\pipe\\test]"; - static unsigned char invalid_ep_binding[] = "00000000-0000-0000-c000-000000000046@ncacn_np:.[endpoint=test]"; - static unsigned char invalid_binding[] = "00000000-0000-0000-c000-000000000046@ncacn_np"; - RPC_STATUS status; - unsigned char *uuid; - unsigned char *protseq; - unsigned char *network_addr; - unsigned char *endpoint; - unsigned char *options; - - /* test all parameters */ - status = RpcStringBindingParseA(valid_binding, &uuid, &protseq, &network_addr, &endpoint, &options); - ok(status == RPC_S_OK, "RpcStringBindingParseA failed with error %ld\n", status); - ok(!strcmp((char *)uuid, "00000000-0000-0000-c000-000000000046"), "uuid should have been 00000000-0000-0000-C000-000000000046 instead of %s\n", uuid); - ok(!strcmp((char *)protseq, "ncacn_np"), "protseq should have been ncacn_np instead of %s\n", protseq); - ok(!strcmp((char *)network_addr, "."), "network_addr should have been . instead of %s\n", network_addr); - ok(!strcmp((char *)endpoint, "pipetest"), "endpoint should have been pipetest instead of %s\n", endpoint); - todo_wine - ok(options && !strcmp((char *)options, ""), "options should have been \"\" of \"%s\"\n", options); - RpcStringFreeA(&uuid); - RpcStringFreeA(&protseq); - RpcStringFreeA(&network_addr); - RpcStringFreeA(&endpoint); - RpcStringFreeA(&options); - - /* test all parameters with different type of string binding */ - status = RpcStringBindingParseA(valid_binding2, &uuid, &protseq, &network_addr, &endpoint, &options); - ok(status == RPC_S_OK, "RpcStringBindingParseA failed with error %ld\n", status); - ok(!strcmp((char *)uuid, "00000000-0000-0000-c000-000000000046"), "uuid should have been 00000000-0000-0000-C000-000000000046 instead of %s\n", uuid); - ok(!strcmp((char *)protseq, "ncacn_np"), "protseq should have been ncacn_np instead of %s\n", protseq); - ok(!strcmp((char *)network_addr, "."), "network_addr should have been . instead of %s\n", network_addr); - ok(!strcmp((char *)endpoint, "pipetest"), "endpoint should have been pipetest instead of %s\n", endpoint); - todo_wine - ok(options && !strcmp((char *)options, ""), "options should have been \"\" of \"%s\"\n", options); - RpcStringFreeA(&uuid); - RpcStringFreeA(&protseq); - RpcStringFreeA(&network_addr); - RpcStringFreeA(&endpoint); - RpcStringFreeA(&options); - - /* test with as many parameters NULL as possible */ - status = RpcStringBindingParseA(valid_binding, NULL, &protseq, NULL, NULL, NULL); - ok(status == RPC_S_OK, "RpcStringBindingParseA failed with error %ld\n", status); - ok(!strcmp((char *)protseq, "ncacn_np"), "protseq should have been ncacn_np instead of %s\n", protseq); - RpcStringFreeA(&protseq); - - /* test with invalid uuid */ - status = RpcStringBindingParseA(invalid_uuid_binding, NULL, &protseq, NULL, NULL, NULL); - ok(status == RPC_S_INVALID_STRING_UUID, "RpcStringBindingParseA should have returned RPC_S_INVALID_STRING_UUID instead of %ld\n", status); - ok(protseq == NULL, "protseq was %p instead of NULL\n", protseq); - - /* test with invalid endpoint */ - status = RpcStringBindingParseA(invalid_ep_binding, NULL, &protseq, NULL, NULL, NULL); - ok(status == RPC_S_OK, "RpcStringBindingParseA failed with error %ld\n", status); - RpcStringFreeA(&protseq); - - /* test with invalid binding */ - status = RpcStringBindingParseA(invalid_binding, &uuid, &protseq, &network_addr, &endpoint, &options); - todo_wine - ok(status == RPC_S_INVALID_STRING_BINDING, "RpcStringBindingParseA should have returned RPC_S_INVALID_STRING_BINDING instead of %ld\n", status); - todo_wine - ok(uuid == NULL, "uuid was %p instead of NULL\n", uuid); - ok(protseq == NULL, "protseq was %p instead of NULL\n", protseq); - todo_wine - ok(network_addr == NULL, "network_addr was %p instead of NULL\n", network_addr); - ok(endpoint == NULL, "endpoint was %p instead of NULL\n", endpoint); - ok(options == NULL, "options was %p instead of NULL\n", options); -} - -static void test_I_RpcExceptionFilter(void) -{ - ULONG exception; - int retval; - int (WINAPI *pI_RpcExceptionFilter)(ULONG) = (void *)GetProcAddress(GetModuleHandle("rpcrt4.dll"), "I_RpcExceptionFilter"); - - if (!pI_RpcExceptionFilter) - { - skip("I_RpcExceptionFilter not exported\n"); - return; - } - - for (exception = 0; exception < STATUS_REG_NAT_CONSUMPTION; exception++) - { - /* skip over uninteresting bits of the number space */ - if (exception == 2000) exception = 0x40000000; - if (exception == 0x40000005) exception = 0x80000000; - if (exception == 0x80000005) exception = 0xc0000000; - - retval = pI_RpcExceptionFilter(exception); - switch (exception) - { - case STATUS_DATATYPE_MISALIGNMENT: - case STATUS_BREAKPOINT: - case STATUS_ACCESS_VIOLATION: - case STATUS_ILLEGAL_INSTRUCTION: - case STATUS_PRIVILEGED_INSTRUCTION: - case 0xc00000aa /* STATUS_INSTRUCTION_MISALIGNMENT */: - case STATUS_STACK_OVERFLOW: - case 0xc0000194 /* STATUS_POSSIBLE_DEADLOCK */: - ok(retval == EXCEPTION_CONTINUE_SEARCH, "I_RpcExceptionFilter(0x%x) should have returned %d instead of %d\n", - exception, EXCEPTION_CONTINUE_SEARCH, retval); - break; - case STATUS_IN_PAGE_ERROR: - case STATUS_HANDLE_NOT_CLOSABLE: - trace("I_RpcExceptionFilter(0x%x) returned %d\n", exception, retval); - break; - default: - ok(retval == EXCEPTION_EXECUTE_HANDLER, "I_RpcExceptionFilter(0x%x) should have returned %d instead of %d\n", - exception, EXCEPTION_EXECUTE_HANDLER, retval); - } - } -} - -static void test_endpoint_mapper(RPC_CSTR protseq, RPC_CSTR address, - RPC_CSTR endpoint) -{ - static unsigned char annotation[] = "Test annotation string."; - RPC_STATUS status; - RPC_BINDING_VECTOR *binding_vector; - handle_t handle; - unsigned char *binding; - - status = RpcServerUseProtseqEp(protseq, 20, endpoint, NULL); - ok(status == RPC_S_OK, "%s: RpcServerUseProtseqEp failed (%lu)\n", protseq, status); - - status = RpcServerRegisterIf(IFoo_v0_0_s_ifspec, NULL, NULL); - ok(status == RPC_S_OK, "%s: RpcServerRegisterIf failed (%lu)\n", protseq, status); - - status = RpcServerInqBindings(&binding_vector); - ok(status == RPC_S_OK, "%s: RpcServerInqBindings failed with error %lu\n", protseq, status); - - status = RpcEpRegisterA(IFoo_v0_0_s_ifspec, binding_vector, NULL, annotation); - ok(status == RPC_S_OK, "%s: RpcEpRegisterA failed with error %lu\n", protseq, status); - - status = RpcStringBindingCompose(NULL, protseq, address, - NULL, NULL, &binding); - ok(status == RPC_S_OK, "%s: RpcStringBindingCompose failed (%lu)\n", protseq, status); - - status = RpcBindingFromStringBinding(binding, &handle); - ok(status == RPC_S_OK, "%s: RpcBindingFromStringBinding failed (%lu)\n", protseq, status); - - RpcStringFree(&binding); - - status = RpcBindingReset(handle); - ok(status == RPC_S_OK, "%s: RpcBindingReset failed with error %lu\n", protseq, status); - - RpcStringFree(&binding); - - status = RpcEpResolveBinding(handle, IFoo_v0_0_s_ifspec); - ok(status == RPC_S_OK, "%s: RpcEpResolveBinding failed with error %lu\n", protseq, status); - - status = RpcBindingReset(handle); - ok(status == RPC_S_OK, "%s: RpcBindingReset failed with error %lu\n", protseq, status); - - status = RpcBindingFree(&handle); - ok(status == RPC_S_OK, "%s: RpcBindingFree failed with error %lu\n", protseq, status); - - status = RpcServerUnregisterIf(NULL, NULL, FALSE); - ok(status == RPC_S_OK, "%s: RpcServerUnregisterIf failed (%lu)\n", protseq, status); - - status = RpcEpUnregister(IFoo_v0_0_s_ifspec, binding_vector, NULL); - ok(status == RPC_S_OK, "%s: RpcEpUnregisterA failed with error %lu\n", protseq, status); - - status = RpcBindingVectorFree(&binding_vector); - ok(status == RPC_S_OK, "%s: RpcBindingVectorFree failed with error %lu\n", protseq, status); -} - -static void test_RpcStringBindingFromBinding(void) -{ - static unsigned char ncacn_np[] = "ncacn_np"; - static unsigned char address[] = "."; - static unsigned char endpoint[] = "\\pipe\\wine_rpc_test"; - RPC_STATUS status; - handle_t handle; - RPC_CSTR binding; - - status = RpcStringBindingCompose(NULL, ncacn_np, address, - endpoint, NULL, &binding); - ok(status == RPC_S_OK, "RpcStringBindingCompose failed (%lu)\n", status); - - status = RpcBindingFromStringBinding(binding, &handle); - ok(status == RPC_S_OK, "RpcBindingFromStringBinding failed (%lu)\n", status); - RpcStringFree(&binding); - - status = RpcBindingToStringBinding(handle, &binding); - ok(status == RPC_S_OK, "RpcStringBindingFromBinding failed with error %lu\n", status); - - ok(!strcmp((const char *)binding, "ncacn_np:.[\\\\pipe\\\\wine_rpc_test]"), - "binding string didn't match what was expected: \"%s\"\n", binding); - RpcStringFree(&binding); - - status = RpcBindingFree(&handle); - ok(status == RPC_S_OK, "RpcBindingFree failed with error %lu\n", status); -} - -START_TEST( rpc ) -{ - static unsigned char ncacn_np[] = "ncacn_np"; - static unsigned char ncalrpc[] = "ncalrpc"; - static unsigned char np_address[] = "."; - static unsigned char np_endpoint[] = "\\pipe\\wine_rpc_test"; - static unsigned char lrpc_endpoint[] = "wine_rpc_test"; - - UuidConversionAndComparison(); - TestDceErrorInqText(); - test_rpc_ncacn_ip_tcp(); - test_towers(); - test_I_RpcMapWin32Status(); - test_RpcStringBindingParseA(); - test_I_RpcExceptionFilter(); - test_endpoint_mapper(ncacn_np, np_address, np_endpoint); - test_endpoint_mapper(ncalrpc, NULL, lrpc_endpoint); - test_RpcStringBindingFromBinding(); -} diff --git a/rostests/winetests/rpcrt4/rpc_async.c b/rostests/winetests/rpcrt4/rpc_async.c deleted file mode 100644 index 0cc5557ce06..00000000000 --- a/rostests/winetests/rpcrt4/rpc_async.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Unit test suite for rpc functions - * - * Copyright 2008 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 - */ - -#include - -#include "wine/test.h" - -#include -#include - -RPC_STATUS (RPC_ENTRY *pRpcAsyncInitializeHandle)(PRPC_ASYNC_STATE,unsigned int); -RPC_STATUS (RPC_ENTRY *pRpcAsyncGetCallStatus)(PRPC_ASYNC_STATE); - -static void test_RpcAsyncInitializeHandle(void) -{ - char buffer[256]; - RPC_ASYNC_STATE async; - RPC_STATUS status; - int i; - - status = pRpcAsyncInitializeHandle((PRPC_ASYNC_STATE)buffer, sizeof(buffer)); - ok(status == ERROR_INVALID_PARAMETER, "RpcAsyncInitializeHandle with large Size should have returned ERROR_INVALID_PARAMETER instead of %ld\n", status); - - status = pRpcAsyncInitializeHandle(&async, sizeof(async) - 1); - ok(status == ERROR_INVALID_PARAMETER, "RpcAsyncInitializeHandle with small Size should have returned ERROR_INVALID_PARAMETER instead of %ld\n", status); - - memset(&async, 0xcc, sizeof(async)); - status = pRpcAsyncInitializeHandle(&async, sizeof(async)); - ok(status == RPC_S_OK, "RpcAsyncInitializeHandle failed with error %ld\n", status); - - ok(async.Size == sizeof(async), "async.Size wrong: %d\n", async.Size); - ok(async.Signature == 0x43595341, "async.Signature should be 0x43595341, but is 0x%x instead\n", async.Signature); - ok(async.Lock == 0, "async.Lock should be 0, but is %d instead\n", async.Lock); - ok(async.Flags == 0, "async.Flags should be 0, but is %d instead\n", async.Flags); - ok(async.StubInfo == NULL, "async.StubInfo should be NULL, not %p\n", async.StubInfo); - ok(async.UserInfo == (void *)0xcccccccc, "async.UserInfo should be unset, not %p\n", async.UserInfo); - ok(async.RuntimeInfo == NULL, "async.RuntimeInfo should be NULL, not %p\n", async.RuntimeInfo); - ok(async.Event == 0xcccccccc, "async.Event should be unset, not %d\n", async.Event); - ok(async.NotificationType == 0xcccccccc, "async.NotificationType should be unset, not %d\n", async.NotificationType); - for (i = 0; i < 4; i++) - ok(async.Reserved[i] == 0x0, "async.Reserved[%d] should be 0x0, not 0x%lx\n", i, async.Reserved[i]); -} - -static void test_RpcAsyncGetCallStatus(void) -{ - RPC_ASYNC_STATE async; - RPC_STATUS status; - - status = pRpcAsyncInitializeHandle(&async, sizeof(async)); - ok(status == RPC_S_OK, "RpcAsyncInitializeHandle failed with error %ld\n", status); - - status = pRpcAsyncGetCallStatus(&async); - todo_wine - ok(status == RPC_S_INVALID_BINDING, "RpcAsyncGetCallStatus should have returned RPC_S_INVALID_BINDING instead of %ld\n", status); - - memset(&async, 0, sizeof(async)); - status = pRpcAsyncGetCallStatus(&async); - todo_wine - ok(status == RPC_S_INVALID_BINDING, "RpcAsyncGetCallStatus should have returned RPC_S_INVALID_BINDING instead of %ld\n", status); -} - -START_TEST( rpc_async ) -{ - HMODULE hRpcRt4 = GetModuleHandle("rpcrt4.dll"); - pRpcAsyncInitializeHandle = (void *)GetProcAddress(hRpcRt4, "RpcAsyncInitializeHandle"); - pRpcAsyncGetCallStatus = (void *)GetProcAddress(hRpcRt4, "RpcAsyncGetCallStatus"); - if (!pRpcAsyncInitializeHandle || !pRpcAsyncGetCallStatus) - { - skip("asynchronous functions not available\n"); - return; - } - test_RpcAsyncInitializeHandle(); - test_RpcAsyncGetCallStatus(); -} diff --git a/rostests/winetests/rpcrt4/rpcrt4.rbuild b/rostests/winetests/rpcrt4/rpcrt4.rbuild deleted file mode 100644 index c1044b37d9a..00000000000 --- a/rostests/winetests/rpcrt4/rpcrt4.rbuild +++ /dev/null @@ -1,31 +0,0 @@ - - - - - server.idl - - - server.idl - - - . - . - - wine - pseh - ole32 - uuid - rpcrt4_winetest_server - rpcrt4_winetest_client - rpcrt4 - kernel32 - ntdll - cstub.c - generated.c - ndr_marshall.c - rpc.c - rpc_async.c - server.c - testlist.c - - \ No newline at end of file diff --git a/rostests/winetests/rpcrt4/server.c b/rostests/winetests/rpcrt4/server.c deleted file mode 100644 index a28f1c6c501..00000000000 --- a/rostests/winetests/rpcrt4/server.c +++ /dev/null @@ -1,1370 +0,0 @@ -/* - * Tests for WIDL and RPC server/clients. - * - * Copyright (C) Google 2007 (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 - */ - -#include -#include "wine/test.h" -#include "server_s.h" -#include "server_defines.h" - -#include -#include -#include - -#define PORT "4114" -#define PIPE "\\pipe\\wine_rpcrt4_test" - -#define INT_CODE 4198 - -static const char *progname; - -static HANDLE stop_event; - -static void (WINAPI *pNDRSContextMarshall2)(RPC_BINDING_HANDLE, NDR_SCONTEXT, void*, NDR_RUNDOWN, void*, ULONG); -static NDR_SCONTEXT (WINAPI *pNDRSContextUnmarshall2)(RPC_BINDING_HANDLE, void*, ULONG, void*, ULONG); - -static void InitFunctionPointers(void) -{ - HMODULE hrpcrt4 = GetModuleHandleA("rpcrt4.dll"); - - pNDRSContextMarshall2 = (void *)GetProcAddress(hrpcrt4, "NDRSContextMarshall2"); - pNDRSContextUnmarshall2 = (void *)GetProcAddress(hrpcrt4, "NDRSContextUnmarshall2"); -} - -void __RPC_FAR *__RPC_USER -midl_user_allocate(size_t n) -{ - return malloc(n); -} - -void __RPC_USER -midl_user_free(void __RPC_FAR *p) -{ - free(p); -} - -static char * -xstrdup(const char *s) -{ - char *d = HeapAlloc(GetProcessHeap(), 0, strlen(s) + 1); - strcpy(d, s); - return d; -} - -int -s_int_return(void) -{ - return INT_CODE; -} - -int -s_square(int x) -{ - return x * x; -} - -int -s_sum(int x, int y) -{ - return x + y; -} - -void -s_square_out(int x, int *y) -{ - *y = s_square(x); -} - -void -s_square_ref(int *x) -{ - *x = s_square(*x); -} - -int -s_str_length(const char *s) -{ - return strlen(s); -} - -int -s_str_t_length(str_t s) -{ - return strlen(s); -} - -int -s_cstr_length(const char *s, int n) -{ - int len = 0; - while (0 < n-- && *s++) - ++len; - return len; -} - -int -s_dot_self(vector_t *v) -{ - return s_square(v->x) + s_square(v->y) + s_square(v->z); -} - -double -s_square_half(double x, double *y) -{ - *y = x / 2.0; - return x * x; -} - -float -s_square_half_float(float x, float *y) -{ - *y = x / 2.0f; - return x * x; -} - -long -s_square_half_long(long x, long *y) -{ - *y = x / 2; - return x * x; -} - -int -s_sum_fixed_array(int a[5]) -{ - return a[0] + a[1] + a[2] + a[3] + a[4]; -} - -int -s_pints_sum(pints_t *pints) -{ - return *pints->pi + **pints->ppi + ***pints->pppi; -} - -double -s_ptypes_sum(ptypes_t *pt) -{ - return *pt->pc + *pt->ps + *pt->pl + *pt->pf + *pt->pd; -} - -int -s_dot_pvectors(pvectors_t *p) -{ - return p->pu->x * (*p->pv)->x + p->pu->y * (*p->pv)->y + p->pu->z * (*p->pv)->z; -} - -int -s_sum_sp(sp_t *sp) -{ - return sp->x + sp->s->x; -} - -double -s_square_sun(sun_t *su) -{ - switch (su->s) - { - case SUN_I: return su->u.i * su->u.i; - case SUN_F1: - case SUN_F2: return su->u.f * su->u.f; - case SUN_PI: return (*su->u.pi) * (*su->u.pi); - default: - return 0.0; - } -} - -int -s_test_list_length(test_list_t *list) -{ - return (list->t == TL_LIST - ? 1 + s_test_list_length(list->u.tail) - : 0); -} - -int -s_sum_fixed_int_3d(int m[2][3][4]) -{ - int i, j, k; - int sum = 0; - - for (i = 0; i < 2; ++i) - for (j = 0; j < 3; ++j) - for (k = 0; k < 4; ++k) - sum += m[i][j][k]; - - return sum; -} - -int -s_sum_conf_array(int x[], int n) -{ - int *p = x, *end = p + n; - int sum = 0; - - while (p < end) - sum += *p++; - - return sum; -} - -int -s_sum_unique_conf_array(int x[], int n) -{ - return s_sum_conf_array(x, n); -} - -int -s_sum_unique_conf_ptr(int *x, int n) -{ - return x ? s_sum_conf_array(x, n) : 0; -} - -int -s_sum_var_array(int x[20], int n) -{ - ok(0 <= n, "RPC sum_var_array\n"); - ok(n <= 20, "RPC sum_var_array\n"); - - return s_sum_conf_array(x, n); -} - -int -s_dot_two_vectors(vector_t vs[2]) -{ - return vs[0].x * vs[1].x + vs[0].y * vs[1].y + vs[0].z * vs[1].z; -} - -int -s_sum_cs(cs_t *cs) -{ - return s_sum_conf_array(cs->ca, cs->n); -} - -int -s_sum_cps(cps_t *cps) -{ - int sum = 0; - int i; - - for (i = 0; i < *cps->pn; ++i) - sum += cps->ca1[i]; - - for (i = 0; i < 2 * cps->n; ++i) - sum += cps->ca2[i]; - - return sum; -} - -int -s_sum_cpsc(cpsc_t *cpsc) -{ - int sum = 0; - int i; - for (i = 0; i < (cpsc->c ? cpsc->a : cpsc->b); ++i) - sum += cpsc->ca[i]; - return sum; -} - -int -s_square_puint(puint_t p) -{ - int n = atoi(p); - return n * n; -} - -int -s_sum_puints(puints_t *p) -{ - int sum = 0; - int i; - for (i = 0; i < p->n; ++i) - sum += atoi(p->ps[i]); - return sum; -} - -int -s_sum_cpuints(cpuints_t *p) -{ - int sum = 0; - int i; - for (i = 0; i < p->n; ++i) - sum += atoi(p->ps[i]); - return sum; -} - -int -s_dot_copy_vectors(vector_t u, vector_t v) -{ - return u.x * v.x + u.y * v.y + u.z * v.z; -} - -int -s_square_test_us(test_us_t *tus) -{ - int n = atoi(tus->us.x); - return n * n; -} - -double -s_square_encu(encu_t *eu) -{ - switch (eu->t) - { - case ENCU_I: return eu->tagged_union.i * eu->tagged_union.i; - case ENCU_F: return eu->tagged_union.f * eu->tagged_union.f; - default: - return 0.0; - } -} - -double -s_square_unencu(int t, unencu_t *eu) -{ - switch (t) - { - case ENCU_I: return eu->i * eu->i; - case ENCU_F: return eu->f * eu->f; - default: - return 0.0; - } -} - -void -s_check_se2(se_t *s) -{ - ok(s->f == E2, "check_se2\n"); -} - -int -s_sum_parr(int *a[3]) -{ - return s_sum_pcarr(a, 3); -} - -int -s_sum_pcarr(int *a[], int n) -{ - int i, s = 0; - for (i = 0; i < n; ++i) - s += *a[i]; - return s; -} - -int -s_enum_ord(e_t e) -{ - switch (e) - { - case E1: return 1; - case E2: return 2; - case E3: return 3; - case E4: return 4; - default: - return 0; - } -} - -double -s_square_encue(encue_t *eue) -{ - switch (eue->t) - { - case E1: return eue->tagged_union.i1 * eue->tagged_union.i1; - case E2: return eue->tagged_union.f2 * eue->tagged_union.f2; - default: - return 0.0; - } -} - -int -s_sum_toplev_conf_2n(int *x, int n) -{ - int sum = 0; - int i; - for (i = 0; i < 2 * n; ++i) - sum += x[i]; - return sum; -} - -int -s_sum_toplev_conf_cond(int *x, int a, int b, int c) -{ - int sum = 0; - int n = c ? a : b; - int i; - for (i = 0; i < n; ++i) - sum += x[i]; - return sum; -} - -double -s_sum_aligns(aligns_t *a) -{ - return a->c + a->i + a->s + a->d; -} - -int -s_sum_padded(padded_t *p) -{ - return p->i + p->c; -} - -int -s_sum_padded2(padded_t ps[2]) -{ - return s_sum_padded(&ps[0]) + s_sum_padded(&ps[1]); -} - -int -s_sum_padded_conf(padded_t *ps, int n) -{ - int sum = 0; - int i; - for (i = 0; i < n; ++i) - sum += s_sum_padded(&ps[i]); - return sum; -} - -int -s_sum_bogus(bogus_t *b) -{ - return *b->h.p1 + *b->p2 + *b->p3 + b->c; -} - -void -s_check_null(int *null) -{ - ok(!null, "RPC check_null\n"); -} - -int -s_str_struct_len(str_struct_t *s) -{ - return lstrlenA(s->s); -} - -int -s_wstr_struct_len(wstr_struct_t *s) -{ - return lstrlenW(s->s); -} - -int -s_sum_doub_carr(doub_carr_t *dc) -{ - int i, j; - int sum = 0; - for (i = 0; i < dc->n; ++i) - for (j = 0; j < dc->a[i]->n; ++j) - sum += dc->a[i]->a[j]; - return sum; -} - -void -s_make_pyramid_doub_carr(unsigned char n, doub_carr_t **dc) -{ - doub_carr_t *t; - int i, j; - t = MIDL_user_allocate(FIELD_OFFSET(doub_carr_t, a[n])); - t->n = n; - for (i = 0; i < n; ++i) - { - int v = i + 1; - t->a[i] = MIDL_user_allocate(FIELD_OFFSET(doub_carr_1_t, a[v])); - t->a[i]->n = v; - for (j = 0; j < v; ++j) - t->a[i]->a[j] = j + 1; - } - *dc = t; -} - -unsigned -s_hash_bstr(bstr_t b) -{ - short n = b[-1]; - short *s = b; - unsigned hash = 0; - short i; - for (i = 0; i < n; ++i) - hash = 5 * hash + (unsigned) s[i]; - return hash; -} - -void -s_get_name(name_t *name) -{ - const char bossman[] = "Jeremy White"; - memcpy(name->name, bossman, min(name->size, sizeof(bossman))); - /* ensure nul-termination */ - if (name->size < sizeof(bossman)) - name->name[name->size - 1] = 0; -} - -int -s_sum_pcarr2(int n, int **pa) -{ - return s_sum_conf_array(*pa, n); -} - -int -s_sum_L1_norms(int n, vector_t *vs) -{ - int i; - int sum = 0; - for (i = 0; i < n; ++i) - sum += abs(vs[i].x) + abs(vs[i].y) + abs(vs[i].z); - return sum; -} - -s123_t * -s_get_s123(void) -{ - s123_t *s = MIDL_user_allocate(sizeof *s); - s->f1 = 1; - s->f2 = 2; - s->f3 = 3; - return s; -} - -str_t -s_get_filename(void) -{ - return (char *)__FILE__; -} - -void -s_context_handle_test(void) -{ - NDR_SCONTEXT h; - RPC_BINDING_HANDLE binding; - RPC_STATUS status; - unsigned char buf[20]; - static RPC_SERVER_INTERFACE server_if = - { - sizeof(RPC_SERVER_INTERFACE), - {{0x00000000,0x4114,0x0704,{0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00}},{1,0}}, - {{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}}, - NULL, - 0, - 0, - 0, - 0, - 0, - }; - - binding = I_RpcGetCurrentCallHandle(); - ok(binding != NULL, "I_RpcGetCurrentCallHandle returned NULL\n"); - - h = pNDRSContextUnmarshall2(binding, NULL, NDR_LOCAL_DATA_REPRESENTATION, NULL, 0); - ok(h != NULL, "NDRSContextUnmarshall2 returned NULL\n"); - - /* marshal a context handle with NULL userContext */ - memset(buf, 0xcc, sizeof(buf)); - pNDRSContextMarshall2(binding, h, buf, NULL, NULL, 0); - ok(*(ULONG *)buf == 0, "attributes should have been set to 0 instead of 0x%x\n", *(ULONG *)buf); - ok(UuidIsNil((UUID *)&buf[4], &status), "uuid should have been nil\n"); - - h = pNDRSContextUnmarshall2(binding, NULL, NDR_LOCAL_DATA_REPRESENTATION, NULL, 0); - ok(h != NULL, "NDRSContextUnmarshall2 returned NULL\n"); - - /* marshal a context handle with non-NULL userContext */ - memset(buf, 0xcc, sizeof(buf)); - h->userContext = (void *)0xdeadbeef; - pNDRSContextMarshall2(binding, h, buf, NULL, NULL, 0); - ok(*(ULONG *)buf == 0, "attributes should have been set to 0 instead of 0x%x\n", *(ULONG *)buf); - ok(!UuidIsNil((UUID *)&buf[4], &status), "uuid should not have been nil\n"); - - h = pNDRSContextUnmarshall2(binding, buf, NDR_LOCAL_DATA_REPRESENTATION, NULL, 0); - ok(h != NULL, "NDRSContextUnmarshall2 returned NULL\n"); - ok(h->userContext == (void *)0xdeadbeef, "userContext of interface didn't unmarshal properly: %p\n", h->userContext); - - /* marshal a context handle with an interface specified */ - h = pNDRSContextUnmarshall2(binding, NULL, NDR_LOCAL_DATA_REPRESENTATION, &server_if.InterfaceId, 0); - ok(h != NULL, "NDRSContextUnmarshall2 returned NULL\n"); - - memset(buf, 0xcc, sizeof(buf)); - h->userContext = (void *)0xcafebabe; - pNDRSContextMarshall2(binding, h, buf, NULL, &server_if.InterfaceId, 0); - ok(*(ULONG *)buf == 0, "attributes should have been set to 0 instead of 0x%x\n", *(ULONG *)buf); - ok(!UuidIsNil((UUID *)&buf[4], &status), "uuid should not have been nil\n"); - - h = pNDRSContextUnmarshall2(binding, buf, NDR_LOCAL_DATA_REPRESENTATION, &server_if.InterfaceId, 0); - ok(h != NULL, "NDRSContextUnmarshall2 returned NULL\n"); - ok(h->userContext == (void *)0xcafebabe, "userContext of interface didn't unmarshal properly: %p\n", h->userContext); - - /* test same interface data, but different pointer */ - /* raises ERROR_INVALID_HANDLE exception */ - if (0) - { - RPC_SERVER_INTERFACE server_if_clone = server_if; - - pNDRSContextUnmarshall2(binding, buf, NDR_LOCAL_DATA_REPRESENTATION, &server_if_clone.InterfaceId, 0); - } - - /* test different interface data, but different pointer */ - /* raises ERROR_INVALID_HANDLE exception */ - if (0) - { - static RPC_SERVER_INTERFACE server_if2 = - { - sizeof(RPC_SERVER_INTERFACE), - {{0x00000000,0x4114,0x0704,{0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00}},{1,0}}, - {{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}}, - NULL, - 0, - 0, - 0, - 0, - 0, - }; - pNDRSContextMarshall2(binding, h, buf, NULL, &server_if.InterfaceId, 0); - - pNDRSContextUnmarshall2(binding, buf, NDR_LOCAL_DATA_REPRESENTATION, &server_if2.InterfaceId, 0); - } -} - -void -s_get_5numbers(int count, pints_t n[5]) -{ - int i; - for (i = 0; i < count; i++) - { - n[i].pi = midl_user_allocate(sizeof(*n[i].pi)); - *n[i].pi = i; - n[i].ppi = NULL; - n[i].pppi = NULL; - } -} - -void -s_get_numbers(int length, int size, pints_t n[]) -{ - int i; - for (i = 0; i < length; i++) - { - n[i].pi = midl_user_allocate(sizeof(*n[i].pi)); - *n[i].pi = i; - n[i].ppi = NULL; - n[i].pppi = NULL; - } -} - -void -s_get_numbers_struct(numbers_struct_t **ns) -{ - int i; - *ns = midl_user_allocate(FIELD_OFFSET(numbers_struct_t, numbers[5])); - if (!*ns) return; - (*ns)->length = 5; - (*ns)->size = 5; - for (i = 0; i < (*ns)->length; i++) - { - (*ns)->numbers[i].pi = NULL; - (*ns)->numbers[i].ppi = NULL; - (*ns)->numbers[i].pppi = NULL; - } - (*ns)->numbers[0].pi = midl_user_allocate(sizeof(*(*ns)->numbers[i].pi)); - *(*ns)->numbers[0].pi = 5; -} - -void -s_stop(void) -{ - ok(RPC_S_OK == RpcMgmtStopServerListening(NULL), "RpcMgmtStopServerListening\n"); - ok(RPC_S_OK == RpcServerUnregisterIf(NULL, NULL, FALSE), "RpcServerUnregisterIf\n"); - ok(SetEvent(stop_event), "SetEvent\n"); -} - -static void -make_cmdline(char buffer[MAX_PATH], const char *test) -{ - sprintf(buffer, "%s server %s", progname, test); -} - -static void -run_client(const char *test) -{ - char cmdline[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - - memset(&startup, 0, sizeof startup); - startup.cb = sizeof startup; - - make_cmdline(cmdline, test); - ok(CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n"); - winetest_wait_child_process( info.hProcess ); - ok(CloseHandle(info.hProcess), "CloseHandle\n"); - ok(CloseHandle(info.hThread), "CloseHandle\n"); -} - -static void -basic_tests(void) -{ - char string[] = "I am a string"; - WCHAR wstring[] = {'I',' ','a','m',' ','a',' ','w','s','t','r','i','n','g', 0}; - int f[5] = {1, 3, 0, -2, -4}; - vector_t a = {1, 3, 7}; - vector_t vec1 = {4, -2, 1}, vec2 = {-5, 2, 3}, *pvec2 = &vec2; - pvectors_t pvecs = {&vec1, &pvec2}; - sp_inner_t spi = {42}; - sp_t sp = {-13, &spi}; - aligns_t aligns; - pints_t pints; - ptypes_t ptypes; - padded_t padded; - padded_t padded2[2]; - bogus_t bogus; - int i1, i2, i3, *pi2, *pi3, **ppi3; - double u, v; - float s, t; - long q, r; - short h; - char c; - int x; - str_struct_t ss = {string}; - wstr_struct_t ws = {wstring}; - str_t str; - se_t se; - - ok(int_return() == INT_CODE, "RPC int_return\n"); - - ok(square(7) == 49, "RPC square\n"); - ok(sum(23, -4) == 19, "RPC sum\n"); - - x = 0; - square_out(11, &x); - ok(x == 121, "RPC square_out\n"); - - x = 5; - square_ref(&x); - ok(x == 25, "RPC square_ref\n"); - - ok(str_length(string) == strlen(string), "RPC str_length\n"); - ok(str_t_length(string) == strlen(string), "RPC str_length\n"); - ok(dot_self(&a) == 59, "RPC dot_self\n"); - - ok(str_struct_len(&ss) == lstrlenA(string), "RPC str_struct_len\n"); - ok(wstr_struct_len(&ws) == lstrlenW(wstring), "RPC str_struct_len\n"); - - v = 0.0; - u = square_half(3.0, &v); - ok(u == 9.0, "RPC square_half\n"); - ok(v == 1.5, "RPC square_half\n"); - - t = 0.0f; - s = square_half_float(3.0f, &t); - ok(s == 9.0f, "RPC square_half_float\n"); - ok(t == 1.5f, "RPC square_half_float\n"); - - r = 0; - q = square_half_long(3, &r); - ok(q == 9, "RPC square_half_long\n"); - ok(r == 1, "RPC square_half_long\n"); - - i1 = 19; - i2 = -3; - i3 = -29; - pi2 = &i2; - pi3 = &i3; - ppi3 = &pi3; - pints.pi = &i1; - pints.ppi = &pi2; - pints.pppi = &ppi3; - ok(pints_sum(&pints) == -13, "RPC pints_sum\n"); - - c = 10; - h = 3; - q = 14; - s = -5.0f; - u = 11.0; - ptypes.pc = &c; - ptypes.ps = &h; - ptypes.pl = &q; - ptypes.pf = &s; - ptypes.pd = &u; - ok(ptypes_sum(&ptypes) == 33.0, "RPC ptypes_sum\n"); - - ok(dot_pvectors(&pvecs) == -21, "RPC dot_pvectors\n"); - ok(dot_copy_vectors(vec1, vec2) == -21, "RPC dot_copy_vectors\n"); - ok(sum_fixed_array(f) == -2, "RPC sum_fixed_array\n"); - ok(sum_sp(&sp) == 29, "RPC sum_sp\n"); - - ok(enum_ord(E1) == 1, "RPC enum_ord\n"); - ok(enum_ord(E2) == 2, "RPC enum_ord\n"); - ok(enum_ord(E3) == 3, "RPC enum_ord\n"); - ok(enum_ord(E4) == 4, "RPC enum_ord\n"); - - se.f = E2; - check_se2(&se); - - memset(&aligns, 0, sizeof(aligns)); - aligns.c = 3; - aligns.i = 4; - aligns.s = 5; - aligns.d = 6.0; - ok(sum_aligns(&aligns) == 18.0, "RPC sum_aligns\n"); - - padded.i = -3; - padded.c = 8; - ok(sum_padded(&padded) == 5, "RPC sum_padded\n"); - padded2[0].i = -5; - padded2[0].c = 1; - padded2[1].i = 3; - padded2[1].c = 7; - ok(sum_padded2(padded2) == 6, "RPC sum_padded2\n"); - padded2[0].i = -5; - padded2[0].c = 1; - padded2[1].i = 3; - padded2[1].c = 7; - ok(sum_padded_conf(padded2, 2) == 6, "RPC sum_padded_conf\n"); - - i1 = 14; - i2 = -7; - i3 = -4; - bogus.h.p1 = &i1; - bogus.p2 = &i2; - bogus.p3 = &i3; - bogus.c = 9; - ok(sum_bogus(&bogus) == 12, "RPC sum_bogus\n"); - - check_null(NULL); - - str = get_filename(); - ok(!strcmp(str, __FILE__), "get_filename() returned %s instead of %s\n", str, __FILE__); - midl_user_free(str); -} - -static void -union_tests(void) -{ - encue_t eue; - encu_t eu; - unencu_t uneu; - sun_t su; - int i; - - su.s = SUN_I; - su.u.i = 9; - ok(square_sun(&su) == 81.0, "RPC square_sun\n"); - - su.s = SUN_F1; - su.u.f = 5.0; - ok(square_sun(&su) == 25.0, "RPC square_sun\n"); - - su.s = SUN_F2; - su.u.f = -2.0; - ok(square_sun(&su) == 4.0, "RPC square_sun\n"); - - su.s = SUN_PI; - su.u.pi = &i; - i = 11; - ok(square_sun(&su) == 121.0, "RPC square_sun\n"); - - eu.t = ENCU_I; - eu.tagged_union.i = 7; - ok(square_encu(&eu) == 49.0, "RPC square_encu\n"); - - eu.t = ENCU_F; - eu.tagged_union.f = 3.0; - ok(square_encu(&eu) == 9.0, "RPC square_encu\n"); - - uneu.i = 4; - ok(square_unencu(ENCU_I, &uneu) == 16.0, "RPC square_unencu\n"); - - uneu.f = 5.0; - ok(square_unencu(ENCU_F, &uneu) == 25.0, "RPC square_unencu\n"); - - eue.t = E1; - eue.tagged_union.i1 = 8; - ok(square_encue(&eue) == 64.0, "RPC square_encue\n"); - - eue.t = E2; - eue.tagged_union.f2 = 10.0; - ok(square_encue(&eue) == 100.0, "RPC square_encue\n"); -} - -static test_list_t * -null_list(void) -{ - test_list_t *n = HeapAlloc(GetProcessHeap(), 0, sizeof *n); - n->t = TL_NULL; - n->u.x = 0; - return n; -} - -static test_list_t * -make_list(test_list_t *tail) -{ - test_list_t *n = HeapAlloc(GetProcessHeap(), 0, sizeof *n); - n->t = TL_LIST; - n->u.tail = tail; - return n; -} - -static void -free_list(test_list_t *list) -{ - if (list->t == TL_LIST) - free_list(list->u.tail); - HeapFree(GetProcessHeap(), 0, list); -} - -ULONG __RPC_USER -puint_t_UserSize(ULONG *flags, ULONG start, puint_t *p) -{ - return start + sizeof(int); -} - -unsigned char * __RPC_USER -puint_t_UserMarshal(ULONG *flags, unsigned char *buffer, puint_t *p) -{ - int n = atoi(*p); - memcpy(buffer, &n, sizeof n); - return buffer + sizeof n; -} - -unsigned char * __RPC_USER -puint_t_UserUnmarshal(ULONG *flags, unsigned char *buffer, puint_t *p) -{ - int n; - memcpy(&n, buffer, sizeof n); - *p = HeapAlloc(GetProcessHeap(), 0, 10); - sprintf(*p, "%d", n); - return buffer + sizeof n; -} - -void __RPC_USER -puint_t_UserFree(ULONG *flags, puint_t *p) -{ - HeapFree(GetProcessHeap(), 0, *p); -} - -ULONG __RPC_USER -us_t_UserSize(ULONG *flags, ULONG start, us_t *pus) -{ - return start + sizeof(struct wire_us); -} - -unsigned char * __RPC_USER -us_t_UserMarshal(ULONG *flags, unsigned char *buffer, us_t *pus) -{ - struct wire_us wus; - wus.x = atoi(pus->x); - memcpy(buffer, &wus, sizeof wus); - return buffer + sizeof wus; -} - -unsigned char * __RPC_USER -us_t_UserUnmarshal(ULONG *flags, unsigned char *buffer, us_t *pus) -{ - struct wire_us wus; - memcpy(&wus, buffer, sizeof wus); - pus->x = HeapAlloc(GetProcessHeap(), 0, 10); - sprintf(pus->x, "%d", wus.x); - return buffer + sizeof wus; -} - -void __RPC_USER -us_t_UserFree(ULONG *flags, us_t *pus) -{ - HeapFree(GetProcessHeap(), 0, pus->x); -} - -ULONG __RPC_USER -bstr_t_UserSize(ULONG *flags, ULONG start, bstr_t *b) -{ - return start + FIELD_OFFSET(wire_bstr_t, data[(*b)[-1]]); -} - -unsigned char * __RPC_USER -bstr_t_UserMarshal(ULONG *flags, unsigned char *buffer, bstr_t *b) -{ - wire_bstr_t *wb = (wire_bstr_t *) buffer; - wb->n = (*b)[-1]; - memcpy(&wb->data, *b, wb->n * sizeof wb->data[0]); - return buffer + FIELD_OFFSET(wire_bstr_t, data[wb->n]); -} - -unsigned char * __RPC_USER -bstr_t_UserUnmarshal(ULONG *flags, unsigned char *buffer, bstr_t *b) -{ - wire_bstr_t *wb = (wire_bstr_t *) buffer; - short *data = HeapAlloc(GetProcessHeap(), 0, (wb->n + 1) * sizeof *data); - data[0] = wb->n; - memcpy(&data[1], wb->data, wb->n * sizeof data[1]); - *b = &data[1]; - return buffer + FIELD_OFFSET(wire_bstr_t, data[wb->n]); -} - -void __RPC_USER -bstr_t_UserFree(ULONG *flags, bstr_t *b) -{ - HeapFree(GetProcessHeap(), 0, &((*b)[-1])); -} - -static void -pointer_tests(void) -{ - int a[] = {1, 2, 3, 4}; - char p1[] = "11"; - test_list_t *list = make_list(make_list(make_list(null_list()))); - test_us_t tus = {{p1}}; - int *pa[4]; - puints_t pus; - cpuints_t cpus; - short bstr_data[] = { 5, 'H', 'e', 'l', 'l', 'o' }; - bstr_t bstr = &bstr_data[1]; - name_t name; - void *buffer; - int *pa2; - s123_t *s123; - - ok(test_list_length(list) == 3, "RPC test_list_length\n"); - ok(square_puint(p1) == 121, "RPC square_puint\n"); - pus.n = 4; - pus.ps = HeapAlloc(GetProcessHeap(), 0, pus.n * sizeof pus.ps[0]); - pus.ps[0] = xstrdup("5"); - pus.ps[1] = xstrdup("6"); - pus.ps[2] = xstrdup("7"); - pus.ps[3] = xstrdup("8"); - ok(sum_puints(&pus) == 26, "RPC sum_puints\n"); - HeapFree(GetProcessHeap(), 0, pus.ps[0]); - HeapFree(GetProcessHeap(), 0, pus.ps[1]); - HeapFree(GetProcessHeap(), 0, pus.ps[2]); - HeapFree(GetProcessHeap(), 0, pus.ps[3]); - HeapFree(GetProcessHeap(), 0, pus.ps); - cpus.n = 4; - cpus.ps = HeapAlloc(GetProcessHeap(), 0, cpus.n * sizeof cpus.ps[0]); - cpus.ps[0] = xstrdup("5"); - cpus.ps[1] = xstrdup("6"); - cpus.ps[2] = xstrdup("7"); - cpus.ps[3] = xstrdup("8"); - ok(sum_cpuints(&cpus) == 26, "RPC sum_puints\n"); - HeapFree(GetProcessHeap(), 0, cpus.ps[0]); - HeapFree(GetProcessHeap(), 0, cpus.ps[1]); - HeapFree(GetProcessHeap(), 0, cpus.ps[2]); - HeapFree(GetProcessHeap(), 0, cpus.ps[3]); - HeapFree(GetProcessHeap(), 0, cpus.ps); - ok(square_test_us(&tus) == 121, "RPC square_test_us\n"); - - pa[0] = &a[0]; - pa[1] = &a[1]; - pa[2] = &a[2]; - ok(sum_parr(pa) == 6, "RPC sum_parr\n"); - - pa[0] = &a[0]; - pa[1] = &a[1]; - pa[2] = &a[2]; - pa[3] = &a[3]; - ok(sum_pcarr(pa, 4) == 10, "RPC sum_pcarr\n"); - - ok(hash_bstr(bstr) == s_hash_bstr(bstr), "RPC hash_bstr_data\n"); - - free_list(list); - - name.size = 10; - name.name = buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, name.size); - get_name(&name); - ok(name.name == buffer, "[in,out] pointer should have stayed as %p but instead changed to %p\n", name.name, buffer); - ok(!strcmp(name.name, "Jeremy Wh"), "name didn't unmarshall properly, expected \"Jeremy Wh\", but got \"%s\"\n", name.name); - HeapFree(GetProcessHeap(), 0, name.name); - - pa2 = a; - ok(sum_pcarr2(4, &pa2) == 10, "RPC sum_pcarr2\n"); - - s123 = get_s123(); - ok(s123->f1 == 1 && s123->f2 == 2 && s123->f3 == 3, "RPC get_s123\n"); - MIDL_user_free(s123); -} - -static int -check_pyramid_doub_carr(doub_carr_t *dc) -{ - int i, j; - for (i = 0; i < dc->n; ++i) - for (j = 0; j < dc->a[i]->n; ++j) - if (dc->a[i]->a[j] != j + 1) - return FALSE; - return TRUE; -} - -static void -free_pyramid_doub_carr(doub_carr_t *dc) -{ - int i; - for (i = 0; i < dc->n; ++i) - MIDL_user_free(dc->a[i]); - MIDL_user_free(dc); -} - -static void -array_tests(void) -{ - const char str1[25] = "Hello"; - int m[2][3][4] = - { - {{1, 2, 3, 4}, {-1, -3, -5, -7}, {0, 2, 4, 6}}, - {{1, -2, 3, -4}, {2, 3, 5, 7}, {-4, -1, -14, 4114}} - }; - int c[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; - vector_t vs[2] = {{1, -2, 3}, {4, -5, -6}}; - cps_t cps; - cpsc_t cpsc; - cs_t *cs; - int n; - int ca[5] = {1, -2, 3, -4, 5}; - doub_carr_t *dc; - int *pi; - pints_t api[5]; - numbers_struct_t *ns; - - ok(cstr_length(str1, sizeof str1) == strlen(str1), "RPC cstr_length\n"); - - ok(sum_fixed_int_3d(m) == 4116, "RPC sum_fixed_int_3d\n"); - - ok(sum_conf_array(c, 10) == 45, "RPC sum_conf_array\n"); - ok(sum_conf_array(&c[5], 2) == 11, "RPC sum_conf_array\n"); - ok(sum_conf_array(&c[7], 1) == 7, "RPC sum_conf_array\n"); - ok(sum_conf_array(&c[2], 0) == 0, "RPC sum_conf_array\n"); - - ok(sum_unique_conf_array(ca, 4) == -2, "RPC sum_unique_conf_array\n"); - ok(sum_unique_conf_ptr(ca, 5) == 3, "RPC sum_unique_conf_array\n"); - ok(sum_unique_conf_ptr(NULL, 10) == 0, "RPC sum_unique_conf_array\n"); - - ok(sum_var_array(c, 10) == 45, "RPC sum_conf_array\n"); - ok(sum_var_array(&c[5], 2) == 11, "RPC sum_conf_array\n"); - ok(sum_var_array(&c[7], 1) == 7, "RPC sum_conf_array\n"); - ok(sum_var_array(&c[2], 0) == 0, "RPC sum_conf_array\n"); - - ok(dot_two_vectors(vs) == -4, "RPC dot_two_vectors\n"); - cs = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(cs_t, ca[5])); - cs->n = 5; - cs->ca[0] = 3; - cs->ca[1] = 5; - cs->ca[2] = -2; - cs->ca[3] = -1; - cs->ca[4] = -4; - ok(sum_cs(cs) == 1, "RPC sum_cs\n"); - HeapFree(GetProcessHeap(), 0, cs); - - n = 5; - cps.pn = &n; - cps.ca1 = &c[2]; - cps.n = 3; - cps.ca2 = &c[3]; - ok(sum_cps(&cps) == 53, "RPC sum_cps\n"); - - cpsc.a = 4; - cpsc.b = 5; - cpsc.c = 1; - cpsc.ca = c; - ok(sum_cpsc(&cpsc) == 6, "RPC sum_cpsc\n"); - cpsc.a = 4; - cpsc.b = 5; - cpsc.c = 0; - cpsc.ca = c; - ok(sum_cpsc(&cpsc) == 10, "RPC sum_cpsc\n"); - - ok(sum_toplev_conf_2n(c, 3) == 15, "RPC sum_toplev_conf_2n\n"); - ok(sum_toplev_conf_cond(c, 5, 6, 1) == 10, "RPC sum_toplev_conf_cond\n"); - ok(sum_toplev_conf_cond(c, 5, 6, 0) == 15, "RPC sum_toplev_conf_cond\n"); - - dc = malloc(FIELD_OFFSET(doub_carr_t, a[2])); - dc->n = 2; - dc->a[0] = malloc(FIELD_OFFSET(doub_carr_1_t, a[3])); - dc->a[0]->n = 3; - dc->a[0]->a[0] = 5; - dc->a[0]->a[1] = 1; - dc->a[0]->a[2] = 8; - dc->a[1] = malloc(FIELD_OFFSET(doub_carr_1_t, a[2])); - dc->a[1]->n = 2; - dc->a[1]->a[0] = 2; - dc->a[1]->a[1] = 3; - ok(sum_doub_carr(dc) == 19, "RPC sum_doub_carr\n"); - free(dc->a[0]); - free(dc->a[1]); - free(dc); - - dc = NULL; - make_pyramid_doub_carr(4, &dc); - ok(check_pyramid_doub_carr(dc), "RPC make_pyramid_doub_carr\n"); - free_pyramid_doub_carr(dc); - - ok(sum_L1_norms(2, vs) == 21, "RPC sum_L1_norms\n"); - - memset(api, 0, sizeof(api)); - pi = HeapAlloc(GetProcessHeap(), 0, sizeof(*pi)); - *pi = -1; - api[0].pi = pi; - get_5numbers(1, api); - ok(api[0].pi == pi, "RPC varying array [out] pointer changed from %p to %p\n", pi, api[0].pi); - ok(*api[0].pi == 0, "pi unmarshalled incorrectly %d\n", *api[0].pi); - - api[0].pi = pi; - get_numbers(1, 1, api); - ok(api[0].pi == pi, "RPC conformant varying array [out] pointer changed from %p to %p\n", pi, api[0].pi); - ok(*api[0].pi == 0, "pi unmarshalled incorrectly %d\n", *api[0].pi); - - ns = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, FIELD_OFFSET(numbers_struct_t, numbers[5])); - ns->length = 5; - ns->size = 5; - ns->numbers[0].pi = pi; - get_numbers_struct(&ns); - ok(ns->numbers[0].pi == pi, "RPC conformant varying struct embedded pointer changed from %p to %p\n", pi, ns->numbers[0].pi); - ok(*ns->numbers[0].pi == 5, "pi unmarshalled incorrectly %d\n", *ns->numbers[0].pi); - - HeapFree(GetProcessHeap(), 0, ns); - HeapFree(GetProcessHeap(), 0, pi); -} - -static void -run_tests(void) -{ - basic_tests(); - union_tests(); - pointer_tests(); - array_tests(); - context_handle_test(); -} - -static void -client(const char *test) -{ - if (strcmp(test, "tcp_basic") == 0) - { - static unsigned char iptcp[] = "ncacn_ip_tcp"; - static unsigned char address[] = "127.0.0.1"; - static unsigned char port[] = PORT; - unsigned char *binding; - - ok(RPC_S_OK == RpcStringBindingCompose(NULL, iptcp, address, port, NULL, &binding), "RpcStringBindingCompose\n"); - ok(RPC_S_OK == RpcBindingFromStringBinding(binding, &IServer_IfHandle), "RpcBindingFromStringBinding\n"); - - run_tests(); - - ok(RPC_S_OK == RpcStringFree(&binding), "RpcStringFree\n"); - ok(RPC_S_OK == RpcBindingFree(&IServer_IfHandle), "RpcBindingFree\n"); - } - else if (strcmp(test, "np_basic") == 0) - { - static unsigned char np[] = "ncacn_np"; - static unsigned char address[] = "\\\\."; - static unsigned char pipe[] = PIPE; - unsigned char *binding; - - ok(RPC_S_OK == RpcStringBindingCompose(NULL, np, address, pipe, NULL, &binding), "RpcStringBindingCompose\n"); - ok(RPC_S_OK == RpcBindingFromStringBinding(binding, &IServer_IfHandle), "RpcBindingFromStringBinding\n"); - - run_tests(); - stop(); - - ok(RPC_S_OK == RpcStringFree(&binding), "RpcStringFree\n"); - ok(RPC_S_OK == RpcBindingFree(&IServer_IfHandle), "RpcBindingFree\n"); - } -} - -static void -server(void) -{ - static unsigned char iptcp[] = "ncacn_ip_tcp"; - static unsigned char port[] = PORT; - static unsigned char np[] = "ncacn_np"; - static unsigned char pipe[] = PIPE; - RPC_STATUS status, iptcp_status, np_status; - RPC_STATUS (RPC_ENTRY *pRpcServerRegisterIfEx)(RPC_IF_HANDLE,UUID*, - RPC_MGR_EPV*, unsigned int,unsigned int,RPC_IF_CALLBACK_FN*); - DWORD ret; - - iptcp_status = RpcServerUseProtseqEp(iptcp, 20, port, NULL); - ok(iptcp_status == RPC_S_OK, "RpcServerUseProtseqEp(ncacn_ip_tcp) failed with status %ld\n", iptcp_status); - np_status = RpcServerUseProtseqEp(np, 0, pipe, NULL); - if (np_status == RPC_S_PROTSEQ_NOT_SUPPORTED) - skip("Protocol sequence ncacn_np is not supported\n"); - else - ok(np_status == RPC_S_OK, "RpcServerUseProtseqEp(ncacn_np) failed with status %ld\n", np_status); - - pRpcServerRegisterIfEx = (void *)GetProcAddress(GetModuleHandle("rpcrt4.dll"), "RpcServerRegisterIfEx"); - if (pRpcServerRegisterIfEx) - { - trace("Using RpcServerRegisterIfEx\n"); - status = pRpcServerRegisterIfEx(IServer_v0_0_s_ifspec, NULL, NULL, - RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH, - RPC_C_LISTEN_MAX_CALLS_DEFAULT, NULL); - } - else - status = RpcServerRegisterIf(IServer_v0_0_s_ifspec, NULL, NULL); - ok(status == RPC_S_OK, "RpcServerRegisterIf failed with status %ld\n", status); - status = RpcServerListen(1, 20, TRUE); - ok(status == RPC_S_OK, "RpcServerListen failed with status %ld\n", status); - stop_event = CreateEvent(NULL, FALSE, FALSE, NULL); - ok(stop_event != NULL, "CreateEvent failed with error %d\n", GetLastError()); - - if (iptcp_status == RPC_S_OK) - run_client("tcp_basic"); - else - skip("tcp_basic tests skipped due to earlier failure\n"); - - if (np_status == RPC_S_OK) - run_client("np_basic"); - else - { - skip("np_basic tests skipped due to earlier failure\n"); - /* np client is what signals stop_event, so bail out if we didn't run do it */ - return; - } - - ret = WaitForSingleObject(stop_event, 1000); - ok(WAIT_OBJECT_0 == ret, "WaitForSingleObject\n"); - /* if the stop event didn't fire then RpcMgmtWaitServerListen will wait - * forever, so don't bother calling it in this case */ - if (ret == WAIT_OBJECT_0) - { - status = RpcMgmtWaitServerListen(); - todo_wine { - ok(status == RPC_S_OK, "RpcMgmtWaitServerListening failed with status %ld\n", status); - } - } -} - -START_TEST(server) -{ - int argc; - char **argv; - - InitFunctionPointers(); - - argc = winetest_get_mainargs(&argv); - progname = argv[0]; - - if (argc == 3) - { - RpcTryExcept - { - client(argv[2]); - } - RpcExcept(TRUE) - { - trace("Exception %d\n", RpcExceptionCode()); - } - RpcEndExcept - } - else - server(); -} diff --git a/rostests/winetests/rpcrt4/server.idl b/rostests/winetests/rpcrt4/server.idl deleted file mode 100644 index 26d337304f9..00000000000 --- a/rostests/winetests/rpcrt4/server.idl +++ /dev/null @@ -1,343 +0,0 @@ -/* - * A simple interface to test the RPC server. - * - * Copyright (C) Google 2007 (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 - */ - -#include "server_defines.h" - -typedef struct tag_vector -{ - int x; - int y; - int z; -} vector_t; - -[ - uuid(00000000-4114-0704-2301-000000000000), -#ifndef __midl - implicit_handle(handle_t IServer_IfHandle) -#endif -] -interface IServer -{ -cpp_quote("#if 0") - typedef wchar_t WCHAR; -cpp_quote("#endif") - - typedef [string] char *str_t; - typedef [string] WCHAR *wstr_t; - - typedef struct - { - int *pi; - int **ppi; - int ***pppi; - } pints_t; - - typedef struct - { - char *pc; - short *ps; - long *pl; - float *pf; - double *pd; - } ptypes_t; - - typedef struct - { - vector_t *pu; - vector_t **pv; - } pvectors_t; - - typedef struct - { - [switch_is(s)] union - { - [case(SUN_I)] int i; - [case(SUN_F1, SUN_F2)] float f; - [case(SUN_PI)] int *pi; - } u; - - int s; - } sun_t; - - int int_return(void); - int square(int x); - int sum(int x, int y); - void square_out(int x, [out] int *y); - void square_ref([in, out] int *x); - int str_length([string] const char *s); - int str_t_length(str_t s); - int cstr_length([string, size_is(n)] const char *s, int n); - int dot_self(vector_t *v); - double square_half(double x, [out] double *y); - float square_half_float(float x, [out] float *y); - long square_half_long(long x, [out] long *y); - int sum_fixed_array(int a[5]); - int pints_sum(pints_t *pints); - double ptypes_sum(ptypes_t *ptypes); - int dot_pvectors(pvectors_t *pvectors); - - /* don't use this anywhere except in sp_t */ - typedef struct - { - int x; - } sp_inner_t; - - typedef struct - { - int x; - sp_inner_t *s; - } sp_t; - - int sum_sp(sp_t *sp); - double square_sun(sun_t *su); - - typedef struct test_list - { - int t; - [switch_is(t)] union - { - [case(TL_NULL)] char x; /* end of list */ - [case(TL_LIST)] struct test_list *tail; - } u; - } test_list_t; - - int test_list_length(test_list_t *ls); - int sum_fixed_int_3d(int m[2][3][4]); - int sum_conf_array([size_is(n)] int x[], int n); - int sum_unique_conf_array([size_is(n), unique] int x[], int n); - int sum_unique_conf_ptr([size_is(n), unique] int *x, int n); - int sum_var_array([length_is(n)] int x[20], int n); - int dot_two_vectors(vector_t vs[2]); - - typedef struct - { - int n; - [size_is(n)] int ca[]; - } cs_t; - - typedef struct - { - int *pn; - [size_is(*pn)] int *ca1; - [size_is(n * 2)] int *ca2; - int n; - } cps_t; - - typedef struct - { - [size_is(c ? a : b)] int *ca; - int a; - int b; - int c; - } cpsc_t; - - int sum_cs(cs_t *cs); - int sum_cps(cps_t *cps); - int sum_cpsc(cpsc_t *cpsc); - - typedef [wire_marshal(int)] void *puint_t; - int square_puint(puint_t p); - - typedef struct - { - [size_is(n)] puint_t *ps; - int n; - } puints_t; - - /* Same thing as puints_t, but make it complex (needs padding). */ - typedef struct - { - [size_is(n)] puint_t *ps; - char n; - } cpuints_t; - - int sum_puints(puints_t *p); - int sum_cpuints(cpuints_t *p); - int dot_copy_vectors(vector_t u, vector_t v); - - typedef struct wire_us *wire_us_t; - typedef [wire_marshal(wire_us_t)] struct us us_t; - struct us - { - void *x; - }; - struct wire_us - { - int x; - }; - typedef struct - { - us_t us; - } test_us_t; - - int square_test_us(test_us_t *tus); - - typedef union encu switch (int t) - { - case ENCU_I: int i; - case ENCU_F: float f; - } encu_t; - - typedef [switch_type(int)] union unencu - { - [case (ENCU_I)] int i; - [case (ENCU_F)] float f; - } unencu_t; - - typedef enum - { - E1 = 23, - E2 = 4, - E3 = 0, - E4 = 64 - } e_t; - - typedef union encue switch (e_t t) - { - case E1: int i1; - case E2: float f2; - } encue_t; - - typedef struct - { - e_t f; - } se_t; - - double square_encu(encu_t *eu); - double square_unencu(int t, [switch_is(t)] unencu_t *eu); - int sum_parr(int *a[3]); - int sum_pcarr([size_is(n)] int *a[], int n); - int enum_ord(e_t e); - double square_encue(encue_t *eue); - void check_se2(se_t *s); - - int sum_toplev_conf_2n([size_is(n * 2)] int *x, int n); - int sum_toplev_conf_cond([size_is(c ? a : b)] int *x, int a, int b, int c); - - typedef struct - { - char c; - int i; - short s; - double d; - } aligns_t; - - double sum_aligns(aligns_t *a); - - typedef struct - { - int i; - char c; - } padded_t; - - int sum_padded(padded_t *p); - int sum_padded2(padded_t ps[2]); - int sum_padded_conf([size_is(n)] padded_t *ps, int n); - - typedef struct - { - int *p1; - } bogus_helper_t; - - typedef struct - { - bogus_helper_t h; - int *p2; - int *p3; - char c; - } bogus_t; - - int sum_bogus(bogus_t *b); - void check_null([unique] int *null); - - typedef struct - { - str_t s; - } str_struct_t; - - typedef struct - { - wstr_t s; - } wstr_struct_t; - - int str_struct_len(str_struct_t *s); - int wstr_struct_len(wstr_struct_t *s); - - typedef struct - { - unsigned int n; - [size_is(n)] byte a[]; - } doub_carr_1_t; - - typedef struct - { - int n; - [size_is(n)] doub_carr_1_t *a[]; - } doub_carr_t; - - int sum_doub_carr(doub_carr_t *dc); - void make_pyramid_doub_carr(unsigned char n, [out] doub_carr_t **dc); - - typedef struct - { - short n; - [size_is(n)] short data[]; - } wire_bstr_t; - - typedef [wire_marshal(wire_bstr_t)] short *bstr_t; - unsigned hash_bstr(bstr_t s); - - typedef struct - { - [string, size_is(size)] char *name; - unsigned int size; - } name_t; - void get_name([in,out] name_t *name); - - int sum_pcarr2(int n, [size_is(, n)] int **pa); - int sum_L1_norms(int n, [size_is(n)] vector_t *vs); - - /* Don't use this except in the get_s123 test. */ - typedef struct - { - int f1; - int f2; - int f3; - } s123_t; - - /* Make sure WIDL generates a type format string for a previously unseen - type as a return value. */ - s123_t *get_s123(void); - - typedef struct - { - unsigned int length; - unsigned int size; - [size_is(size), length_is(length)] pints_t numbers[]; - } numbers_struct_t; - - void get_5numbers([in] int count, [out, length_is(count)] pints_t pn[5]); - void get_numbers([in] int length, [in] int size, [out, length_is(length), size_is(size)] pints_t pn[]); - void get_numbers_struct([out] numbers_struct_t **ns); - - str_t get_filename(void); - void context_handle_test(void); - void stop(void); -} diff --git a/rostests/winetests/rpcrt4/server_defines.h b/rostests/winetests/rpcrt4/server_defines.h deleted file mode 100644 index 51f934f2488..00000000000 --- a/rostests/winetests/rpcrt4/server_defines.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Constants shared between server.c and server.idl - * - * Copyright (C) Google 2007 (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 - */ - -/* sun_t case values */ -#define SUN_I 10 -#define SUN_F1 -2 -#define SUN_F2 7 -#define SUN_PI 399 - -/* test_list_t case values */ -#define TL_NULL 0 -#define TL_LIST 1 - -/* encu_t case values */ -#define ENCU_I 27 -#define ENCU_F 0 diff --git a/rostests/winetests/rpcrt4/testlist.c b/rostests/winetests/rpcrt4/testlist.c deleted file mode 100644 index 8983d699dff..00000000000 --- a/rostests/winetests/rpcrt4/testlist.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_cstub(void); -extern void func_generated(void); -extern void func_ndr_marshall(void); -extern void func_rpc(void); -extern void func_rpc_async(void); -extern void func_server(void); - -const struct test winetest_testlist[] = -{ - { "cstub", func_cstub }, - { "generated", func_generated }, - { "ndr_marshall", func_ndr_marshall }, - { "rpc", func_rpc }, - { "rpc_async", func_rpc_async }, - { "server", func_server }, - { 0, 0 } -}; diff --git a/rostests/winetests/rsabase/rsabase.c b/rostests/winetests/rsabase/rsabase.c deleted file mode 100644 index b7746b10319..00000000000 --- a/rostests/winetests/rsabase/rsabase.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Unit tests for rsabase functions - * - * Copyright (c) 2004 Michael Jung - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "wincrypt.h" - -HCRYPTPROV hProv; -static const char szContainer[] = "Wine Test Container"; -static const char szProvider[] = MS_DEF_PROV_A; - -static int init_environment(void) -{ - hProv = (HCRYPTPROV)INVALID_HANDLE_VALUE; - - if (!CryptAcquireContext(&hProv, szContainer, szProvider, PROV_RSA_FULL, 0)) - { - if (GetLastError()==NTE_BAD_KEYSET) - { - if(!CryptAcquireContext(&hProv, szContainer, szProvider, PROV_RSA_FULL, CRYPT_NEWKEYSET)) - { - trace("%08x\n", GetLastError()); - return 0; - } - } - else - { - trace("%08x\n", GetLastError()); - return 0; - } - } - - return 1; -} - -static void clean_up_environment(void) -{ - CryptAcquireContext(&hProv, szContainer, szProvider, PROV_RSA_FULL, CRYPT_DELETEKEYSET); -} - -static void test_gen_random(void) -{ - BOOL result; - BYTE rnd1[16], rnd2[16]; - - memset(rnd1, 0, sizeof(rnd1)); - memset(rnd2, 0, sizeof(rnd2)); - - result = CryptGenRandom(hProv, sizeof(rnd1), rnd1); - ok(result, "%08x\n", GetLastError()); - - result = CryptGenRandom(hProv, sizeof(rnd2), rnd2); - ok(result, "%08x\n", GetLastError()); - - ok(memcmp(rnd1, rnd2, sizeof(rnd1)), "CryptGenRandom generates non random data\n"); -} - -START_TEST(rsabase) -{ - if (!init_environment()) - return; - test_gen_random(); - clean_up_environment(); -} diff --git a/rostests/winetests/rsabase/rsabase.rbuild b/rostests/winetests/rsabase/rsabase.rbuild deleted file mode 100644 index eb9e7176591..00000000000 --- a/rostests/winetests/rsabase/rsabase.rbuild +++ /dev/null @@ -1,11 +0,0 @@ - - - - . - wine - advapi32 - kernel32 - ntdll - rsabase.c - testlist.c - diff --git a/rostests/winetests/rsabase/testlist.c b/rostests/winetests/rsabase/testlist.c deleted file mode 100644 index d55586bacd5..00000000000 --- a/rostests/winetests/rsabase/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_rsabase(void); - -const struct test winetest_testlist[] = -{ - { "rsabase", func_rsabase }, - { 0, 0 } -}; diff --git a/rostests/winetests/rsaenh/rsaenh.c b/rostests/winetests/rsaenh/rsaenh.c deleted file mode 100644 index 479b4286d46..00000000000 --- a/rostests/winetests/rsaenh/rsaenh.c +++ /dev/null @@ -1,2011 +0,0 @@ -/* - * Unit tests for rsaenh functions - * - * Copyright (c) 2004 Michael Jung - * Copyright (c) 2006 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 - */ - -#include -#include -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "wincrypt.h" -#include "winreg.h" - -static HCRYPTPROV hProv; -static const char szContainer[] = "winetest"; -static const char szProvider[] = MS_ENHANCED_PROV_A; - -typedef struct _ctdatatype { - unsigned char origstr[32]; - unsigned char decstr[32]; - int strlen; - int enclen; - int buflen; -} cryptdata; - -static const cryptdata cTestData[4] = { - {"abcdefghijkl", - {'a','b','c','d','e','f','g','h',0x2,0x2,'k','l',0}, - 12,8,16}, - {"abcdefghij", - {'a','b','c','d','e','f','g','h',0x2,0x2,0}, - 10,8,16}, - {"abcdefgh", - {'a','b','c','d','e','f','g','h',0}, - 8,8,16}, - {"abcdefghijkl", - {'a','b','c','d','e','f','g','h','i','j','k','l',0}, - 12,12,16} -}; - -/* - * 1. Take the MD5 Hash of the container name (with an extra null byte) - * 2. Turn the hash into a 4 DWORD hex value - * 3. Append a '_' - * 4. Add the MachineGuid - * - */ -static void uniquecontainer(char *unique) -{ - /* MD5 hash of "winetest\0" in 4 DWORD hex */ - static const char szContainer_md5[] = "9d20fd8d05ed2b8455d125d0bf6d6a70"; - static const char szCryptography[] = "Software\\Microsoft\\Cryptography"; - static const char szMachineGuid[] = "MachineGuid"; - HKEY hkey; - char guid[MAX_PATH]; - DWORD size = MAX_PATH; - - /* Get the MachineGUID */ - RegOpenKeyA(HKEY_LOCAL_MACHINE, szCryptography, &hkey); - RegQueryValueExA(hkey, szMachineGuid, NULL, NULL, (LPBYTE)guid, &size); - RegCloseKey(hkey); - - lstrcpy(unique, szContainer_md5); - lstrcat(unique, "_"); - lstrcat(unique, guid); -} - -static void printBytes(const char *heading, const BYTE *pb, size_t cb) -{ - size_t i; - printf("%s: ",heading); - for(i=0;i - - - - . - rsaenh.c - testlist.c - wine - advapi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/rsaenh/testlist.c b/rostests/winetests/rsaenh/testlist.c deleted file mode 100644 index 0c1563415d0..00000000000 --- a/rostests/winetests/rsaenh/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_rsaenh(void); - -const struct test winetest_testlist[] = -{ - { "rsaenh", func_rsaenh }, - { 0, 0 } -}; diff --git a/rostests/winetests/schannel/main.c b/rostests/winetests/schannel/main.c deleted file mode 100644 index 814b60a696c..00000000000 --- a/rostests/winetests/schannel/main.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Schannel tests - * - * Copyright 2006 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 - */ - -#include -#include -#include "ntstatus.h" -#define WIN32_NO_STATUS -#include -#include -#define SECURITY_WIN32 -#include -#include -#include -#include - -#include "wine/test.h" - -/* Helper macros to find the size of SECPKG_FUNCTION_TABLE */ -#define SECPKG_FUNCTION_TABLE_SIZE_1 FIELD_OFFSET(SECPKG_FUNCTION_TABLE, \ - SetContextAttributes) -#define SECPKG_FUNCTION_TABLE_SIZE_2 FIELD_OFFSET(SECPKG_FUNCTION_TABLE, \ - SetCredentialsAttributes) -#define SECPKG_FUNCTION_TABLE_SIZE_3 sizeof(SECPKG_FUNCTION_TABLE) - -static NTSTATUS (NTAPI *pSpLsaModeInitialize)(ULONG, PULONG, - PSECPKG_FUNCTION_TABLE*, PULONG); -static NTSTATUS (NTAPI *pSpUserModeInitialize)(ULONG, PULONG, - PSECPKG_USER_FUNCTION_TABLE*, PULONG); - -static void testInitialize(void) -{ - PSECPKG_USER_FUNCTION_TABLE pUserTables, pUserTables2; - PSECPKG_FUNCTION_TABLE pTables, pTables2; - ULONG cTables = 0, cUserTables = 0, Version = 0; - NTSTATUS status; - - /* Passing NULL into one of the parameters of SpLsaModeInitialize or - SpUserModeInitialize causes a crash. */ - - /* SpLsaModeInitialize does not care about the LSA version. */ - status = pSpLsaModeInitialize(0, &Version, &pTables2, &cTables); - ok(status == STATUS_SUCCESS, "status: 0x%x\n", status); - ok(cTables == 2, "cTables: %d\n", cTables); - ok(pTables2 != NULL,"pTables: %p\n", pTables2); - - /* We can call it as many times we want. */ - status = pSpLsaModeInitialize(0x10000, &Version, &pTables, &cTables); - ok(status == STATUS_SUCCESS, "status: 0x%x\n", status); - ok(cTables == 2, "cTables: %d\n", cTables); - ok(pTables != NULL, "pTables: %p\n", pTables); - /* It will always return the same pointer. */ - ok(pTables == pTables2, "pTables: %p, pTables2: %p\n", pTables, pTables2); - - status = pSpLsaModeInitialize(0x23456, &Version, &pTables, &cTables); - ok(status == STATUS_SUCCESS, "status: 0x%x\n", status); - ok(cTables == 2, "cTables: %d\n", cTables); - ok(pTables != NULL, "pTables: %p\n", pTables); - ok(pTables == pTables2, "pTables: %p, pTables2: %p\n", pTables, pTables2); - - /* Bad versions to SpUserModeInitialize. Parameters unchanged */ - Version = 0xdead; - cUserTables = 0xdead; - pUserTables = NULL; - status = pSpUserModeInitialize(0, &Version, &pUserTables, &cUserTables); - ok(status == STATUS_INVALID_PARAMETER, "status: 0x%x\n", status); - ok(Version == 0xdead, "Version: 0x%x\n", Version); - ok(cUserTables == 0xdead, "cTables: %d\n", cUserTables); - ok(pUserTables == NULL, "pUserTables: %p\n", pUserTables); - - status = pSpUserModeInitialize(0x20000, &Version, &pUserTables, - &cUserTables); - ok(status == STATUS_INVALID_PARAMETER, "status: 0x%x\n", status); - ok(Version == 0xdead, "Version: 0x%x\n", Version); - ok(cUserTables == 0xdead, "cTables: %d\n", cUserTables); - ok(pUserTables == NULL, "pUserTables: %p\n", pUserTables); - - /* Good version to SpUserModeInitialize */ - status = pSpUserModeInitialize(SECPKG_INTERFACE_VERSION, &Version, - &pUserTables, &cUserTables); - ok(status == STATUS_SUCCESS, "status: 0x%x\n", status); - ok(Version == SECPKG_INTERFACE_VERSION, "Version: 0x%x\n", Version); - ok(cUserTables == 2, "cUserTables: %d\n", cUserTables); - ok(pUserTables != NULL, "pUserTables: %p\n", pUserTables); - - /* Initializing user again */ - status = pSpUserModeInitialize(SECPKG_INTERFACE_VERSION, &Version, - &pUserTables2, &cTables); - ok(status == STATUS_SUCCESS, "status: 0x%x\n", status); - ok(pUserTables == pUserTables2, "pUserTables: %p, pUserTables2: %p\n", - pUserTables, pUserTables2); -} - -/* A helper function to find the dispatch table of the next package. - Needed because SECPKG_FUNCTION_TABLE's size depend on the version */ -static PSECPKG_FUNCTION_TABLE getNextSecPkgTable(PSECPKG_FUNCTION_TABLE pTable, - ULONG Version) -{ - size_t size; - - if (Version == SECPKG_INTERFACE_VERSION) - size = SECPKG_FUNCTION_TABLE_SIZE_1; - else if (Version == SECPKG_INTERFACE_VERSION_2) - size = SECPKG_FUNCTION_TABLE_SIZE_2; - else if (Version == SECPKG_INTERFACE_VERSION_3) - size = SECPKG_FUNCTION_TABLE_SIZE_3; - else { - ok(FALSE, "Unknown package version 0x%x\n", Version); - return NULL; - } - - return (PSECPKG_FUNCTION_TABLE)((PBYTE)pTable + size); -} - -static void testGetInfo(void) -{ - PSECPKG_FUNCTION_TABLE pTables; - SecPkgInfoW PackageInfo; - ULONG cTables, Version; - NTSTATUS status; - - /* Get the dispatch table */ - status = pSpLsaModeInitialize(0, &Version, &pTables, &cTables); - ok(status == STATUS_SUCCESS, "status: 0x%x\n", status); - - /* Passing NULL into ->GetInfo causes a crash. */ - - /* First package: Unified */ - status = pTables->GetInfo(&PackageInfo); - ok(status == STATUS_SUCCESS, "status: 0x%x\n", status); - ok(PackageInfo.fCapabilities == 0x107b3, "fCapabilities: 0x%lx\n", - PackageInfo.fCapabilities); - ok(PackageInfo.wVersion == 1, "wVersion: %d\n", PackageInfo.wVersion); - ok(PackageInfo.wRPCID == 14, "wRPCID: %d\n", PackageInfo.wRPCID); - ok(PackageInfo.cbMaxToken == 0x4000, "cbMaxToken: 0x%lx\n", - PackageInfo.cbMaxToken); - - /* Second package: SChannel */ - pTables = getNextSecPkgTable(pTables, Version); - if (!pTables) - return; - status = pTables->GetInfo(&PackageInfo); - ok(status == STATUS_SUCCESS || - status == SEC_E_UNSUPPORTED_FUNCTION, /* win2k3 */ - "status: 0x%x\n", status); - - if (status == STATUS_SUCCESS) - { - ok(PackageInfo.fCapabilities == 0x107b3, "fCapabilities: 0x%lx\n", - PackageInfo.fCapabilities); - ok(PackageInfo.wVersion == 1, "wVersion: %d\n", PackageInfo.wVersion); - ok(PackageInfo.wRPCID == 14, "wRPCID: %d\n", PackageInfo.wRPCID); - ok(PackageInfo.cbMaxToken == 0x4000, "cbMaxToken: 0x%lx\n", - PackageInfo.cbMaxToken); - } -} - -START_TEST(main) -{ - HMODULE hMod = LoadLibraryA("schannel.dll"); - if (!hMod) { - skip("schannel.dll not found.\n"); - return; - } - - pSpLsaModeInitialize = (void *)GetProcAddress(hMod, "SpLsaModeInitialize"); - pSpUserModeInitialize = (void *)GetProcAddress(hMod, "SpUserModeInitialize"); - - if (pSpLsaModeInitialize && pSpUserModeInitialize) - { - testInitialize(); - testGetInfo(); - } - else skip( "schannel functions not found\n" ); - - FreeLibrary(hMod); -} diff --git a/rostests/winetests/schannel/schannel.rbuild b/rostests/winetests/schannel/schannel.rbuild deleted file mode 100644 index a267024dc90..00000000000 --- a/rostests/winetests/schannel/schannel.rbuild +++ /dev/null @@ -1,12 +0,0 @@ - - - - - . - wine - kernel32 - ntdll - main.c - testlist.c - - diff --git a/rostests/winetests/schannel/testlist.c b/rostests/winetests/schannel/testlist.c deleted file mode 100644 index 6f0c3974819..00000000000 --- a/rostests/winetests/schannel/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_main(void); - -const struct test winetest_testlist[] = -{ - { "main", func_main }, - { 0, 0 } -}; diff --git a/rostests/winetests/setupapi/devclass.c b/rostests/winetests/setupapi/devclass.c deleted file mode 100644 index 212b0eb0bba..00000000000 --- a/rostests/winetests/setupapi/devclass.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * SetupAPI device class-related functions tests - * - * Copyright 2006 Hervé Poussineau - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public Licence as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that 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 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 "winreg.h" -#include "cfgmgr32.h" -#include "setupapi.h" - -#include "wine/test.h" - -static GUID test_class_guid = { 0x4d36e967, 0xe325, 0x11ce, { 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } }; -static char test_class_name[MAX_CLASS_NAME_LEN] = "DiskDrive"; - -static const char *debugstr_guid(const GUID *guid) -{ - static char guidSTR1[39]; - static char guidSTR2[39]; - char* guidSTR; - static BOOL index; - - if (!guid) return NULL; - - index = !index; - guidSTR = index ? guidSTR1 : guidSTR2; - - snprintf(guidSTR, sizeof(guidSTR1), - "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", - 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]); - return guidSTR; -} - -static void test_SetupDiBuildClassInfoList(void) -{ - LPGUID guid_list = NULL; - DWORD required_size, size; - - SetLastError( 0xdeadbeef ); - ok( !SetupDiBuildClassInfoList( 0, NULL, 0, NULL ), - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "Expected error %lx, got %lx", ERROR_INVALID_PARAMETER, GetLastError() ); - - SetLastError( 0xdeadbeef ); - ok( !SetupDiBuildClassInfoList( 0, NULL, 0, &required_size ), - "Fail expected" ); - ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected error %lx, got %lx", ERROR_INSUFFICIENT_BUFFER, GetLastError() ); - - guid_list = HeapAlloc( GetProcessHeap(), 0, ( required_size + 1 ) * sizeof( GUID ) ); - if ( !guid_list ) - return; - - SetLastError( 0xdeadbeef ); - ok( SetupDiBuildClassInfoList( 0, guid_list, required_size, &size ), - "Error reported %lx", GetLastError() ); - ok( size == required_size, "Expected size %lu, got %lu", required_size, size ); - SetLastError( 0xdeadbeef ); - ok( SetupDiBuildClassInfoList( 0, guid_list, required_size + 1, &size ), - "Error reported %lx", GetLastError() ); - ok( size == required_size, "Expected size %lu, got %lu", required_size, size ); - - if ( size > 0 ) - { - /* That's better to use the first class found, as we know for sure that it exists */ - memcpy(&test_class_guid, &guid_list[0], sizeof( GUID ) ); - SetupDiClassNameFromGuidA( &test_class_guid, test_class_name, sizeof( test_class_name ), NULL ); - } - HeapFree( GetProcessHeap(), 0, guid_list ); -} - -static void test_SetupDiClassGuidsFromNameA(void) -{ - LPGUID guid_list = NULL; - DWORD required_size, size; - - SetLastError( 0xdeadbeef ); - ok( !SetupDiClassGuidsFromNameA( NULL, NULL, 0, NULL ), - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "Expected error %lx, got %lx", ERROR_INVALID_PARAMETER, GetLastError() ); - - SetLastError( 0xdeadbeef ); - ok( !SetupDiClassGuidsFromNameA( NULL, NULL, 0, &required_size ), - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "Expected error %lx, got %lx", ERROR_INVALID_PARAMETER, GetLastError() ); - - SetLastError( 0xdeadbeef ); - ok( SetupDiClassGuidsFromNameA( "", NULL, 0, &required_size ), - "Error reported %lx", GetLastError() ); - ok( required_size == 0, "Expected 0, got %lu", required_size ); - - SetLastError( 0xdeadbeef ); - ok( !SetupDiClassGuidsFromNameA( test_class_name, NULL, 0, &required_size ), - "Fail expected" ); - SetLastError( 0xdeadbeef ); - ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected error %lx, got %lx", ERROR_INSUFFICIENT_BUFFER, GetLastError() ); - ok( required_size > 0, "Expected > 0, got %lu", required_size ); - - guid_list = HeapAlloc( GetProcessHeap(), 0, ( required_size + 1 ) * sizeof( GUID ) ); - if ( !guid_list ) - return; - - SetLastError( 0xdeadbeef ); - ok( SetupDiClassGuidsFromNameA( test_class_name, guid_list, required_size, &size ), - "Error reported %lx", GetLastError() ); - ok( size == required_size, "Expected size %lu, got %lu", required_size, size ); - ok( IsEqualIID( &guid_list[0], &test_class_guid ), - "Expected %s, got %s", debugstr_guid( &test_class_guid ), debugstr_guid( &guid_list[0] ) ); - SetLastError( 0xdeadbeef ); - ok( SetupDiClassGuidsFromNameA( test_class_name, guid_list, required_size + 1, &size ), - "Error reported %lx", GetLastError() ); - ok( size == required_size, "Expected size %lu, got %lu", required_size, size ); - ok( IsEqualIID( &guid_list[0], &test_class_guid ), - "Expected %s, got %s", debugstr_guid( &test_class_guid ), debugstr_guid( &guid_list[0] ) ); - - HeapFree( GetProcessHeap(), 0, guid_list ); -} - -static void test_SetupDiClassNameFromGuidA(void) -{ - CHAR* class_name = NULL; - DWORD required_size, size; - - SetLastError( 0xdeadbeef ); - ok( !SetupDiClassNameFromGuidA( NULL, NULL, 0, NULL ), - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_CLASS, - "Expected error %x, got %lx", ERROR_INVALID_CLASS, GetLastError() ); - - SetLastError( 0xdeadbeef ); - ok( !SetupDiClassNameFromGuidA( NULL, NULL, 0, &required_size ), - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_CLASS, - "Expected error %x, got %lx", ERROR_INVALID_CLASS, GetLastError() ); - - SetLastError( 0xdeadbeef ); - ok( !SetupDiClassNameFromGuidA( &test_class_guid, NULL, 0, &required_size ), - "Fail expected" ); - ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected error %lx, got %lx", ERROR_INSUFFICIENT_BUFFER, GetLastError() ); - ok( required_size > 0, "Expected > 0, got %lu", required_size ); - ok( required_size < MAX_CLASS_NAME_LEN, "Expected < %u, got %lu", MAX_CLASS_NAME_LEN, required_size ); - - class_name = HeapAlloc( GetProcessHeap(), 0, required_size ); - if ( !class_name ) - return; - - SetLastError( 0xdeadbeef ); - ok( SetupDiClassNameFromGuidA( &test_class_guid, class_name, required_size, &size ), - "Error reported %lx", GetLastError() ); - ok( size == required_size, "Expected size %lu, got %lu", required_size, size ); - ok( !strcmp( class_name, test_class_name ), - "Expected %s, got %s", test_class_name, class_name ); - SetLastError( 0xdeadbeef ); - ok( SetupDiClassNameFromGuidA( &test_class_guid, class_name, required_size + 1, &size ), - "Error reported %lx", GetLastError() ); - ok( size == required_size, "Expected size %lu, got %lu", required_size, size ); - ok( !strcmp( class_name, test_class_name ), - "Expected %s, got %s", test_class_name, class_name ); - - HeapFree( GetProcessHeap(), 0, class_name ); -} - -static void test_SetupDiGetClassDescriptionA(void) -{ - CHAR* class_desc = NULL; - DWORD required_size, size; - - SetLastError( 0xdeadbeef ); - ok( !SetupDiGetClassDescriptionA( NULL, NULL, 0, NULL ), - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "Expected error %lx, got %lx", ERROR_INVALID_PARAMETER, GetLastError() ); - - SetLastError( 0xdeadbeef ); - ok( !SetupDiGetClassDescriptionA( NULL, NULL, 0, &required_size ), - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "Expected error %lx, got %lx", ERROR_INVALID_PARAMETER, GetLastError() ); - - SetLastError( 0xdeadbeef ); - ok( !SetupDiGetClassDescriptionA( &test_class_guid, NULL, 0, &required_size ), - "Fail expected" ); - ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected error %lx, got %lx", ERROR_INSUFFICIENT_BUFFER, GetLastError() ); - ok( required_size > 0, "Expected > 0, got %lu", required_size ); - ok( required_size < LINE_LEN, "Expected < %u, got %lu", LINE_LEN, required_size ); - - class_desc = HeapAlloc( GetProcessHeap(), 0, required_size ); - if ( !class_desc ) - return; - - SetLastError( 0xdeadbeef ); - ok( SetupDiGetClassDescriptionA( &test_class_guid, class_desc, required_size, &size ), - "Error reported %lx", GetLastError() ); - ok( size == required_size, "Expected size %lu, got %lu", required_size, size ); - SetLastError( 0xdeadbeef ); - ok( SetupDiGetClassDescriptionA( &test_class_guid, class_desc, required_size + 1, &size ), - "Error reported %lx", GetLastError() ); - ok( size == required_size, "Expected size %lu, got %lu", required_size, size ); - - HeapFree( GetProcessHeap(), 0, class_desc ); -} - -static void test_SetupDiGetClassDevsA(void) -{ - HDEVINFO device_info; - - SetLastError( 0xdeadbeef ); - device_info = SetupDiGetClassDevs( NULL, NULL, NULL, 0 ); - ok( device_info == INVALID_HANDLE_VALUE, - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "Expected error %lx, got %lx", ERROR_INVALID_PARAMETER, GetLastError() ); - - SetLastError( 0xdeadbeef ); - device_info = SetupDiGetClassDevs( NULL, NULL, NULL, DIGCF_ALLCLASSES ); - ok( device_info != INVALID_HANDLE_VALUE, - "Error reported %lx", GetLastError() ); - SetLastError( 0xdeadbeef ); - ok( SetupDiDestroyDeviceInfoList( device_info ), - "Error reported %lx", GetLastError() ); - - SetLastError( 0xdeadbeef ); - device_info = SetupDiGetClassDevs( NULL, NULL, NULL, DIGCF_DEVICEINTERFACE ); - ok( device_info == INVALID_HANDLE_VALUE, - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "Expected error %lx, got %lx", ERROR_INVALID_PARAMETER, GetLastError() ); - - SetLastError( 0xdeadbeef ); - device_info = SetupDiGetClassDevs( &test_class_guid, NULL, NULL, 0 ); - ok( device_info != INVALID_HANDLE_VALUE, - "Error reported %lx", GetLastError() ); - SetLastError( 0xdeadbeef ); - ok( SetupDiDestroyDeviceInfoList( device_info ), - "Error reported %lx", GetLastError() ); - - SetLastError( 0xdeadbeef ); - device_info = SetupDiGetClassDevs( NULL, "(invalid enumerator)", NULL, DIGCF_ALLCLASSES ); - ok( device_info == INVALID_HANDLE_VALUE, - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_DATA, - "Expected error %lx, got %lx", ERROR_INVALID_DATA, GetLastError() ); - - SetLastError( 0xdeadbeef ); - device_info = SetupDiGetClassDevs( NULL, "Root", NULL, DIGCF_ALLCLASSES ); - ok( device_info != INVALID_HANDLE_VALUE, - "Error reported %lx", GetLastError() ); - SetLastError( 0xdeadbeef ); - ok( SetupDiDestroyDeviceInfoList( device_info ), - "Error reported %lx", GetLastError() ); -} - -static void test_SetupDiOpenClassRegKeyExA(void) -{ - HKEY hkey; - LONG err; - - SetLastError( 0xdeadbeef ); - hkey = SetupDiOpenClassRegKeyExA( NULL, 0, 0, NULL, NULL ); - ok( hkey == INVALID_HANDLE_VALUE, - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_FLAGS, - "Expected error %lx, got %lx", ERROR_INVALID_FLAGS, GetLastError() ); - - SetLastError( 0xdeadbeef ); - hkey = SetupDiOpenClassRegKeyExA( NULL, 0, DIOCR_INSTALLER | DIOCR_INTERFACE, NULL, NULL ); - ok( hkey == INVALID_HANDLE_VALUE, - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_FLAGS, - "Expected error %lx, got %lx", ERROR_INVALID_FLAGS, GetLastError() ); - - SetLastError( 0xdeadbeef ); - hkey = SetupDiOpenClassRegKeyExA( NULL, 0, DIOCR_INSTALLER, NULL, NULL ); - ok( hkey == INVALID_HANDLE_VALUE, - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_CLASS, - "Expected error %x, got %lx", ERROR_INVALID_CLASS, GetLastError() ); - - SetLastError( 0xdeadbeef ); - hkey = SetupDiOpenClassRegKeyExA( NULL, 0, DIOCR_INTERFACE, NULL, NULL ); - ok( hkey == INVALID_HANDLE_VALUE, - "Fail expected" ); - ok( GetLastError() == ERROR_INVALID_CLASS, - "Expected error %x, got %lx", ERROR_INVALID_CLASS, GetLastError() ); - - SetLastError( 0xdeadbeef ); - hkey = SetupDiOpenClassRegKeyExA( NULL, KEY_QUERY_VALUE, DIOCR_INSTALLER, NULL, NULL ); - ok( hkey != INVALID_HANDLE_VALUE, "Got error %lx", GetLastError() ); - err = RegCloseKey( hkey ); - ok( err == ERROR_SUCCESS, "Got error %lx", err ); - - SetLastError( 0xdeadbeef ); - hkey = SetupDiOpenClassRegKeyExA( NULL, KEY_QUERY_VALUE, DIOCR_INTERFACE, NULL, NULL ); - ok( hkey != INVALID_HANDLE_VALUE, "Got error %lx", GetLastError() ); - err = RegCloseKey( hkey ); - ok( err == ERROR_SUCCESS, "Got error %lx", err ); - - SetLastError( 0xdeadbeef ); - hkey = SetupDiOpenClassRegKeyExA( &test_class_guid, KEY_QUERY_VALUE, DIOCR_INSTALLER, NULL, NULL ); - ok( hkey != INVALID_HANDLE_VALUE, "Got error %lx", GetLastError() ); - err = RegCloseKey( hkey ); - ok( err == ERROR_SUCCESS, "Got error %lx", err ); - - err = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Control\\Class", 0, KEY_SET_VALUE, &hkey); - ok( err == ERROR_SUCCESS, "Got error %lx", err ); -} - -START_TEST(devclass) -{ - test_SetupDiBuildClassInfoList(); - test_SetupDiClassGuidsFromNameA(); - test_SetupDiClassNameFromGuidA(); - test_SetupDiGetClassDescriptionA(); - test_SetupDiGetClassDevsA(); - test_SetupDiOpenClassRegKeyExA(); -} diff --git a/rostests/winetests/setupapi/devinst.c b/rostests/winetests/setupapi/devinst.c deleted file mode 100644 index 727e4540c47..00000000000 --- a/rostests/winetests/setupapi/devinst.c +++ /dev/null @@ -1,1096 +0,0 @@ -/* - * Devinst tests - * - * Copyright 2006 Christian Gmeiner - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "winreg.h" -#include "guiddef.h" -#include "setupapi.h" - -#include "wine/test.h" - -/* function pointers */ -static HMODULE hSetupAPI; -static HDEVINFO (WINAPI *pSetupDiCreateDeviceInfoList)(GUID*,HWND); -static HDEVINFO (WINAPI *pSetupDiCreateDeviceInfoListExW)(GUID*,HWND,PCWSTR,PVOID); -static BOOL (WINAPI *pSetupDiCreateDeviceInterfaceA)(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA); -static BOOL (WINAPI *pSetupDiCallClassInstaller)(DI_FUNCTION, HDEVINFO, PSP_DEVINFO_DATA); -static BOOL (WINAPI *pSetupDiDestroyDeviceInfoList)(HDEVINFO); -static BOOL (WINAPI *pSetupDiEnumDeviceInfo)(HDEVINFO, DWORD, PSP_DEVINFO_DATA); -static BOOL (WINAPI *pSetupDiEnumDeviceInterfaces)(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, DWORD, PSP_DEVICE_INTERFACE_DATA); -static BOOL (WINAPI *pSetupDiInstallClassA)(HWND, PCSTR, DWORD, HSPFILEQ); -static HKEY (WINAPI *pSetupDiOpenClassRegKeyExA)(GUID*,REGSAM,DWORD,PCSTR,PVOID); -static HKEY (WINAPI *pSetupDiOpenDevRegKey)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM); -static HKEY (WINAPI *pSetupDiCreateDevRegKeyW)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCWSTR); -static BOOL (WINAPI *pSetupDiCreateDeviceInfoA)(HDEVINFO, PCSTR, GUID *, PCSTR, HWND, DWORD, PSP_DEVINFO_DATA); -static BOOL (WINAPI *pSetupDiCreateDeviceInfoW)(HDEVINFO, PCWSTR, GUID *, PCWSTR, HWND, DWORD, PSP_DEVINFO_DATA); -static BOOL (WINAPI *pSetupDiGetDeviceInstanceIdA)(HDEVINFO, PSP_DEVINFO_DATA, PSTR, DWORD, PDWORD); -static BOOL (WINAPI *pSetupDiGetDeviceInterfaceDetailA)(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DWORD, PDWORD, PSP_DEVINFO_DATA); -static BOOL (WINAPI *pSetupDiGetDeviceInterfaceDetailW)(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W, DWORD, PDWORD, PSP_DEVINFO_DATA); -static BOOL (WINAPI *pSetupDiRegisterDeviceInfo)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PSP_DETSIG_CMPPROC, PVOID, PSP_DEVINFO_DATA); -static HDEVINFO (WINAPI *pSetupDiGetClassDevsA)(CONST GUID *, LPCSTR, HWND, DWORD); -static HDEVINFO (WINAPI *pSetupDiGetClassDevsW)(CONST GUID *, LPCWSTR, HWND, DWORD); -static BOOL (WINAPI *pSetupDiSetDeviceRegistryPropertyA)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD); -static BOOL (WINAPI *pSetupDiSetDeviceRegistryPropertyW)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD); -static BOOL (WINAPI *pSetupDiGetDeviceRegistryPropertyA)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD); -static BOOL (WINAPI *pSetupDiGetDeviceRegistryPropertyW)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD); - -static void init_function_pointers(void) -{ - hSetupAPI = GetModuleHandleA("setupapi.dll"); - - pSetupDiCreateDeviceInfoA = (void *)GetProcAddress(hSetupAPI, "SetupDiCreateDeviceInfoA"); - pSetupDiCreateDeviceInfoW = (void *)GetProcAddress(hSetupAPI, "SetupDiCreateDeviceInfoW"); - pSetupDiCreateDeviceInfoList = (void *)GetProcAddress(hSetupAPI, "SetupDiCreateDeviceInfoList"); - pSetupDiCreateDeviceInfoListExW = (void *)GetProcAddress(hSetupAPI, "SetupDiCreateDeviceInfoListExW"); - pSetupDiCreateDeviceInterfaceA = (void *)GetProcAddress(hSetupAPI, "SetupDiCreateDeviceInterfaceA"); - pSetupDiDestroyDeviceInfoList = (void *)GetProcAddress(hSetupAPI, "SetupDiDestroyDeviceInfoList"); - pSetupDiCallClassInstaller = (void *)GetProcAddress(hSetupAPI, "SetupDiCallClassInstaller"); - pSetupDiEnumDeviceInfo = (void *)GetProcAddress(hSetupAPI, "SetupDiEnumDeviceInfo"); - pSetupDiEnumDeviceInterfaces = (void *)GetProcAddress(hSetupAPI, "SetupDiEnumDeviceInterfaces"); - pSetupDiGetDeviceInstanceIdA = (void *)GetProcAddress(hSetupAPI, "SetupDiGetDeviceInstanceIdA"); - pSetupDiGetDeviceInterfaceDetailA = (void *)GetProcAddress(hSetupAPI, "SetupDiGetDeviceInterfaceDetailA"); - pSetupDiGetDeviceInterfaceDetailW = (void *)GetProcAddress(hSetupAPI, "SetupDiGetDeviceInterfaceDetailW"); - pSetupDiInstallClassA = (void *)GetProcAddress(hSetupAPI, "SetupDiInstallClassA"); - pSetupDiOpenClassRegKeyExA = (void *)GetProcAddress(hSetupAPI, "SetupDiOpenClassRegKeyExA"); - pSetupDiOpenDevRegKey = (void *)GetProcAddress(hSetupAPI, "SetupDiOpenDevRegKey"); - pSetupDiCreateDevRegKeyW = (void *)GetProcAddress(hSetupAPI, "SetupDiCreateDevRegKeyW"); - pSetupDiRegisterDeviceInfo = (void *)GetProcAddress(hSetupAPI, "SetupDiRegisterDeviceInfo"); - pSetupDiGetClassDevsA = (void *)GetProcAddress(hSetupAPI, "SetupDiGetClassDevsA"); - pSetupDiGetClassDevsW = (void *)GetProcAddress(hSetupAPI, "SetupDiGetClassDevsW"); - pSetupDiSetDeviceRegistryPropertyA = (void *)GetProcAddress(hSetupAPI, "SetupDiSetDeviceRegistryPropertyA"); - pSetupDiSetDeviceRegistryPropertyW = (void *)GetProcAddress(hSetupAPI, "SetupDiSetDeviceRegistryPropertyW"); - pSetupDiGetDeviceRegistryPropertyA = (void *)GetProcAddress(hSetupAPI, "SetupDiGetDeviceRegistryPropertyA"); - pSetupDiGetDeviceRegistryPropertyW = (void *)GetProcAddress(hSetupAPI, "SetupDiGetDeviceRegistryPropertyW"); -} - -/* RegDeleteTreeW from dlls/advapi32/registry.c */ -LSTATUS WINAPI devinst_RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey) -{ - LONG ret; - DWORD dwMaxSubkeyLen, dwMaxValueLen; - DWORD dwMaxLen, dwSize; - WCHAR szNameBuf[MAX_PATH], *lpszName = szNameBuf; - HKEY hSubKey = hKey; - - if(lpszSubKey) - { - ret = RegOpenKeyExW(hKey, lpszSubKey, 0, KEY_READ, &hSubKey); - if (ret) return ret; - } - - /* Get highest length for keys, values */ - ret = RegQueryInfoKeyW(hSubKey, NULL, NULL, NULL, NULL, - &dwMaxSubkeyLen, NULL, NULL, &dwMaxValueLen, NULL, NULL, NULL); - if (ret) goto cleanup; - - dwMaxSubkeyLen++; - dwMaxValueLen++; - dwMaxLen = max(dwMaxSubkeyLen, dwMaxValueLen); - if (dwMaxLen > sizeof(szNameBuf)/sizeof(WCHAR)) - { - /* Name too big: alloc a buffer for it */ - if (!(lpszName = HeapAlloc( GetProcessHeap(), 0, dwMaxLen*sizeof(WCHAR)))) - { - ret = ERROR_NOT_ENOUGH_MEMORY; - goto cleanup; - } - } - - - /* Recursively delete all the subkeys */ - while (TRUE) - { - dwSize = dwMaxLen; - if (RegEnumKeyExW(hSubKey, 0, lpszName, &dwSize, NULL, - NULL, NULL, NULL)) break; - - ret = devinst_RegDeleteTreeW(hSubKey, lpszName); - if (ret) goto cleanup; - } - - if (lpszSubKey) - ret = RegDeleteKeyW(hKey, lpszSubKey); - else - while (TRUE) - { - dwSize = dwMaxLen; - if (RegEnumValueW(hKey, 0, lpszName, &dwSize, - NULL, NULL, NULL, NULL)) break; - - ret = RegDeleteValueW(hKey, lpszName); - if (ret) goto cleanup; - } - -cleanup: - /* Free buffer if allocated */ - if (lpszName != szNameBuf) - HeapFree( GetProcessHeap(), 0, lpszName); - if(lpszSubKey) - RegCloseKey(hSubKey); - return ret; -} - - -static void test_SetupDiCreateDeviceInfoListEx(void) -{ - HDEVINFO devlist; - BOOL ret; - DWORD error; - static CHAR notnull[] = "NotNull"; - static const WCHAR machine[] = { 'd','u','m','m','y',0 }; - - SetLastError(0xdeadbeef); - /* create empty DeviceInfoList, but set Reserved to a value, which is not NULL */ - devlist = pSetupDiCreateDeviceInfoListExW(NULL, NULL, NULL, notnull); - - error = GetLastError(); - if (error == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("SetupDiCreateDeviceInfoListExW is not implemented\n"); - return; - } - ok(devlist == INVALID_HANDLE_VALUE, "SetupDiCreateDeviceInfoListExW failed : %p %d (expected %p)\n", devlist, error, INVALID_HANDLE_VALUE); - ok(error == ERROR_INVALID_PARAMETER, "GetLastError returned wrong value : %d, (expected %d)\n", error, ERROR_INVALID_PARAMETER); - - SetLastError(0xdeadbeef); - /* create empty DeviceInfoList, but set MachineName to something */ - devlist = pSetupDiCreateDeviceInfoListExW(NULL, NULL, machine, NULL); - - error = GetLastError(); - ok(devlist == INVALID_HANDLE_VALUE, "SetupDiCreateDeviceInfoListExW failed : %p %d (expected %p)\n", devlist, error, INVALID_HANDLE_VALUE); - ok(error == ERROR_INVALID_MACHINENAME, "GetLastError returned wrong value : %d, (expected %d)\n", error, ERROR_INVALID_MACHINENAME); - - /* create empty DeviceInfoList */ - devlist = pSetupDiCreateDeviceInfoListExW(NULL, NULL, NULL, NULL); - ok(devlist && devlist != INVALID_HANDLE_VALUE, "SetupDiCreateDeviceInfoListExW failed : %p %d (expected != %p)\n", devlist, error, INVALID_HANDLE_VALUE); - - /* destroy DeviceInfoList */ - ret = pSetupDiDestroyDeviceInfoList(devlist); - ok(ret, "SetupDiDestroyDeviceInfoList failed : %d\n", error); -} - -static void test_SetupDiOpenClassRegKeyExA(void) -{ - /* This is a unique guid for testing purposes */ - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - static const CHAR guidString[] = "{6a55b5a4-3f65-11db-b704-0011955c2bdb}"; - HKEY hkey; - - /* Check return value for nonexistent key */ - hkey = pSetupDiOpenClassRegKeyExA(&guid, KEY_ALL_ACCESS, - DIOCR_INSTALLER, NULL, NULL); - ok(hkey == INVALID_HANDLE_VALUE, - "returned %p (expected INVALID_HANDLE_VALUE)\n", hkey); - - /* Test it for a key that exists */ - hkey = SetupDiOpenClassRegKey(NULL, KEY_ALL_ACCESS); - if (hkey != INVALID_HANDLE_VALUE) - { - HKEY classKey; - if (RegCreateKeyA(hkey, guidString, &classKey) == ERROR_SUCCESS) - { - RegCloseKey(classKey); - SetLastError(0xdeadbeef); - classKey = pSetupDiOpenClassRegKeyExA(&guid, KEY_ALL_ACCESS, - DIOCR_INSTALLER, NULL, NULL); - ok(classKey != INVALID_HANDLE_VALUE, - "opening class registry key failed with error %d\n", - GetLastError()); - if (classKey != INVALID_HANDLE_VALUE) - RegCloseKey(classKey); - RegDeleteKeyA(hkey, guidString); - } - else - trace("failed to create registry key for test\n"); - } - else - trace("failed to open classes key\n"); -} - -static void append_str(char **str, const char *data) -{ - sprintf(*str, data); - *str += strlen(*str); -} - -static void create_inf_file(LPCSTR filename) -{ - char data[1024]; - char *ptr = data; - DWORD dwNumberOfBytesWritten; - HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - append_str(&ptr, "[Version]\n"); - append_str(&ptr, "Signature=\"$Chicago$\"\n"); - append_str(&ptr, "Class=Bogus\n"); - append_str(&ptr, "ClassGUID={6a55b5a4-3f65-11db-b704-0011955c2bdb}\n"); - append_str(&ptr, "[ClassInstall32]\n"); - append_str(&ptr, "AddReg=BogusClass.NT.AddReg\n"); - append_str(&ptr, "[BogusClass.NT.AddReg]\n"); - append_str(&ptr, "HKR,,,,\"Wine test devices\"\n"); - - WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL); - CloseHandle(hf); -} - -static void get_temp_filename(LPSTR path) -{ - static char curr[MAX_PATH] = { 0 }; - char temp[MAX_PATH]; - LPSTR ptr; - - if (!*curr) - GetCurrentDirectoryA(MAX_PATH, curr); - GetTempFileNameA(curr, "set", 0, temp); - ptr = strrchr(temp, '\\'); - - lstrcpyA(path, ptr + 1); -} - -static void testInstallClass(void) -{ - static const WCHAR classKey[] = {'S','y','s','t','e','m','\\', - 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\', - 'C','o','n','t','r','o','l','\\','C','l','a','s','s','\\', - '{','6','a','5','5','b','5','a','4','-','3','f','6','5','-', - '1','1','d','b','-','b','7','0','4','-', - '0','0','1','1','9','5','5','c','2','b','d','b','}',0}; - static const CHAR classKey_win9x[] = - "System\\CurrentControlSet\\Services\\Class\\" - "{6a55b5a4-3f65-11db-b704-0011955c2bdb}"; - static const CHAR bogus_win9x[] = - "System\\CurrentControlSet\\Services\\Class\\Bogus"; - char tmpfile[MAX_PATH]; - BOOL ret; - HKEY hkey; - - if (!pSetupDiInstallClassA) - { - skip("No SetupDiInstallClassA\n"); - return; - } - tmpfile[0] = '.'; - tmpfile[1] = '\\'; - get_temp_filename(tmpfile + 2); - create_inf_file(tmpfile + 2); - - ret = pSetupDiInstallClassA(NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - ret = pSetupDiInstallClassA(NULL, NULL, DI_NOVCP, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - ret = pSetupDiInstallClassA(NULL, tmpfile + 2, DI_NOVCP, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - ret = pSetupDiInstallClassA(NULL, tmpfile + 2, 0, NULL); - ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError()); - /* The next call will succeed. Information is put into the registry but the - * location(s) is/are depending on the Windows version. - */ - ret = pSetupDiInstallClassA(NULL, tmpfile, 0, NULL); - ok(ret, "SetupDiInstallClassA failed: %08x\n", GetLastError()); - if (!RegOpenKeyA(HKEY_LOCAL_MACHINE, classKey_win9x, &hkey)) - { - /* We are on win9x */ - RegCloseKey(hkey); - ok(!RegDeleteKeyA(HKEY_LOCAL_MACHINE, classKey_win9x), - "Couldn't delete win9x classkey\n"); - ok(!RegDeleteKeyA(HKEY_LOCAL_MACHINE, bogus_win9x), - "Couldn't delete win9x bogus services class\n"); - } - else - { - /* NT4 and above */ - ok(!RegDeleteKeyW(HKEY_LOCAL_MACHINE, classKey), - "Couldn't delete NT classkey\n"); - } - DeleteFile(tmpfile); -} - -static void testCreateDeviceInfo(void) -{ - BOOL ret; - HDEVINFO set; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - - if (!pSetupDiCreateDeviceInfoList || !pSetupDiEnumDeviceInfo || - !pSetupDiDestroyDeviceInfoList || !pSetupDiCreateDeviceInfoA) - { - skip("No SetupDiCreateDeviceInfoA\n"); - return; - } - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInfoA(NULL, NULL, NULL, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_DEVINST_NAME, - "Expected ERROR_INVALID_DEVINST_NAME, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInfoA(NULL, "Root\\LEGACY_BOGUS\\0000", NULL, - NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLEHANDLE, got %08x\n", GetLastError()); - set = pSetupDiCreateDeviceInfoList(&guid, NULL); - ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %08x\n", - GetLastError()); - if (set) - { - SP_DEVINFO_DATA devInfo = { 0 }; - DWORD i; - - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", NULL, - NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - /* Finally, with all three required parameters, this succeeds: */ - ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid, - NULL, NULL, 0, NULL); - ok(ret, "pSetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - /* This fails because the device ID already exists.. */ - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid, - NULL, NULL, 0, &devInfo); - ok(!ret && GetLastError() == ERROR_DEVINST_ALREADY_EXISTS, - "Expected ERROR_DEVINST_ALREADY_EXISTS, got %08x\n", GetLastError()); - /* whereas this "fails" because cbSize is wrong.. */ - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, NULL, NULL, - DICD_GENERATE_ID, &devInfo); - ok(!ret && GetLastError() == ERROR_INVALID_USER_BUFFER, - "Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError()); - devInfo.cbSize = sizeof(devInfo); - ret = pSetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, NULL, NULL, - DICD_GENERATE_ID, &devInfo); - /* and this finally succeeds. */ - ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - /* There were three devices added, however - the second failure just - * resulted in the SP_DEVINFO_DATA not getting copied. - */ - SetLastError(0xdeadbeef); - i = 0; - while (pSetupDiEnumDeviceInfo(set, i, &devInfo)) - i++; - ok(i == 3, "Expected 3 devices, got %d\n", i); - ok(GetLastError() == ERROR_NO_MORE_ITEMS, - "SetupDiEnumDeviceInfo failed: %08x\n", GetLastError()); - pSetupDiDestroyDeviceInfoList(set); - } -} - -static void testGetDeviceInstanceId(void) -{ - BOOL ret; - HDEVINFO set; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - SP_DEVINFO_DATA devInfo = { 0 }; - - if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList || - !pSetupDiCreateDeviceInfoA || !pSetupDiGetDeviceInstanceIdA) - { - skip("No SetupDiGetDeviceInstanceIdA\n"); - return; - } - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInstanceIdA(NULL, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLEHANDLE, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInstanceIdA(NULL, &devInfo, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLEHANDLE, got %08x\n", GetLastError()); - set = pSetupDiCreateDeviceInfoList(&guid, NULL); - ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %08x\n", - GetLastError()); - if (set) - { - char instanceID[MAX_PATH]; - DWORD size; - - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInstanceIdA(set, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, NULL, 0, &size); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - devInfo.cbSize = sizeof(devInfo); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, NULL, 0, &size); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid, - NULL, NULL, 0, &devInfo); - ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, NULL, 0, &size); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %08x\n", GetLastError()); - ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, instanceID, - sizeof(instanceID), NULL); - ok(ret, "SetupDiGetDeviceInstanceIdA failed: %08x\n", GetLastError()); - ok(!lstrcmpA(instanceID, "ROOT\\LEGACY_BOGUS\\0000"), - "Unexpected instance ID %s\n", instanceID); - ret = pSetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, - NULL, NULL, DICD_GENERATE_ID, &devInfo); - ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, instanceID, - sizeof(instanceID), NULL); - ok(ret, "SetupDiGetDeviceInstanceIdA failed: %08x\n", GetLastError()); - ok(!lstrcmpA(instanceID, "ROOT\\LEGACY_BOGUS\\0001"), - "Unexpected instance ID %s\n", instanceID); - pSetupDiDestroyDeviceInfoList(set); - } -} - -static void testRegisterDeviceInfo(void) -{ - BOOL ret; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - HDEVINFO set; - - if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList || - !pSetupDiRegisterDeviceInfo) - { - skip("No SetupDiRegisterDeviceInfo\n"); - return; - } - SetLastError(0xdeadbeef); - ret = pSetupDiRegisterDeviceInfo(NULL, NULL, 0, NULL, NULL, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - ret = pSetupDiRegisterDeviceInfo(NULL, NULL, 0, NULL, NULL, NULL); - set = pSetupDiCreateDeviceInfoList(&guid, NULL); - ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %d\n", GetLastError()); - if (set) - { - SP_DEVINFO_DATA devInfo = { 0 }; - - SetLastError(0xdeadbeef); - ret = pSetupDiRegisterDeviceInfo(set, NULL, 0, NULL, NULL, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiRegisterDeviceInfo(set, &devInfo, 0, NULL, NULL, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - devInfo.cbSize = sizeof(devInfo); - SetLastError(0xdeadbeef); - ret = pSetupDiRegisterDeviceInfo(set, &devInfo, 0, NULL, NULL, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - ret = pSetupDiCreateDeviceInfoA(set, "USB\\BOGUS\\0000", &guid, - NULL, NULL, 0, &devInfo); - ok(ret || GetLastError() == ERROR_DEVINST_ALREADY_EXISTS, - "SetupDiCreateDeviceInfoA failed: %d\n", GetLastError()); - if (ret) - { - /* If it already existed, registering it again will fail */ - ret = pSetupDiRegisterDeviceInfo(set, &devInfo, 0, NULL, NULL, - NULL); - ok(ret, "SetupDiCreateDeviceInfoA failed: %d\n", GetLastError()); - } - /* FIXME: On Win2K+ systems, this is now persisted to registry in - * HKLM\System\CCS\Enum\USB\Bogus\0000. I don't check because the - * Win9x location is different. - * FIXME: the key also becomes undeletable. How to get rid of it? - */ - pSetupDiDestroyDeviceInfoList(set); - } -} - -static void testCreateDeviceInterface(void) -{ - BOOL ret; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - HDEVINFO set; - - if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList || - !pSetupDiCreateDeviceInfoA || !pSetupDiCreateDeviceInterfaceA || - !pSetupDiEnumDeviceInterfaces) - { - skip("No SetupDiCreateDeviceInterfaceA\n"); - return; - } - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInterfaceA(NULL, NULL, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInterfaceA(NULL, NULL, &guid, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - set = pSetupDiCreateDeviceInfoList(&guid, NULL); - ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %d\n", GetLastError()); - if (set) - { - SP_DEVINFO_DATA devInfo = { 0 }; - SP_DEVICE_INTERFACE_DATA interfaceData = { sizeof(interfaceData), - { 0 } }; - DWORD i; - - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInterfaceA(set, NULL, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, NULL, NULL, 0, - NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - devInfo.cbSize = sizeof(devInfo); - ret = pSetupDiCreateDeviceInfoA(set, "ROOT\\LEGACY_BOGUS\\0000", &guid, - NULL, NULL, 0, &devInfo); - ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, NULL, NULL, 0, - NULL); - ok(!ret && GetLastError() == ERROR_INVALID_USER_BUFFER, - "Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError()); - ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, &guid, NULL, 0, - NULL); - ok(ret, "SetupDiCreateDeviceInterfaceA failed: %08x\n", GetLastError()); - /* Creating the same interface a second time succeeds */ - ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, &guid, NULL, 0, - NULL); - ok(ret, "SetupDiCreateDeviceInterfaceA failed: %08x\n", GetLastError()); - ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, &guid, "Oogah", 0, - NULL); - ok(ret, "SetupDiCreateDeviceInterfaceA failed: %08x\n", GetLastError()); - ret = pSetupDiEnumDeviceInterfaces(set, &devInfo, &guid, 0, - &interfaceData); - ok(ret, "SetupDiEnumDeviceInterfaces failed: %d\n", GetLastError()); - i = 0; - while (pSetupDiEnumDeviceInterfaces(set, &devInfo, &guid, i, - &interfaceData)) - i++; - ok(i == 2, "expected 2 interfaces, got %d\n", i); - ok(GetLastError() == ERROR_NO_MORE_ITEMS, - "SetupDiEnumDeviceInterfaces failed: %08x\n", GetLastError()); - pSetupDiDestroyDeviceInfoList(set); - } -} - -static void testGetDeviceInterfaceDetail(void) -{ - BOOL ret; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - HDEVINFO set; - - if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList || - !pSetupDiCreateDeviceInfoA || !pSetupDiCreateDeviceInterfaceA || - !pSetupDiGetDeviceInterfaceDetailA) - { - skip("No SetupDiGetDeviceInterfaceDetailA\n"); - return; - } - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(NULL, NULL, NULL, 0, NULL, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - set = pSetupDiCreateDeviceInfoList(&guid, NULL); - ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %d\n", GetLastError()); - if (set) - { - SP_DEVINFO_DATA devInfo = { sizeof(devInfo), { 0 } }; - SP_DEVICE_INTERFACE_DATA interfaceData = { sizeof(interfaceData), - { 0 } }; - DWORD size = 0; - - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, NULL, NULL, 0, NULL, - NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - ret = pSetupDiCreateDeviceInfoA(set, "ROOT\\LEGACY_BOGUS\\0000", &guid, - NULL, NULL, 0, &devInfo); - ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, &guid, NULL, 0, - &interfaceData); - ok(ret, "SetupDiCreateDeviceInterfaceA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, NULL, - 0, NULL, NULL); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, NULL, - 100, NULL, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_USER_BUFFER, - "Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, NULL, - 0, &size, NULL); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - if (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER) - { - static const char path[] = - "\\\\?\\root#legacy_bogus#0000#{6a55b5a4-3f65-11db-b704-0011955c2bdb}"; - LPBYTE buf = HeapAlloc(GetProcessHeap(), 0, size); - SP_DEVICE_INTERFACE_DETAIL_DATA_A *detail = - (SP_DEVICE_INTERFACE_DETAIL_DATA_A *)buf; - DWORD expectedsize = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath) + sizeof(WCHAR)*(1 + strlen(path)); - - detail->cbSize = 0; - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, detail, - size, &size, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_USER_BUFFER, - "Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError()); - detail->cbSize = size; - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, detail, - size, &size, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_USER_BUFFER, - "Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError()); - detail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, detail, - size, &size, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_USER_BUFFER, - "Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError()); - /* Windows 2000 and up check for the exact size. Win9x returns ERROR_INVALID_PARAMETER - * on every call (so doesn't get here) and NT4 doesn't have this function. - */ - detail->cbSize = FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath[1]); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, detail, - size, &size, NULL); - ok(ret, "SetupDiGetDeviceInterfaceDetailA failed: %d\n", - GetLastError()); - ok(!lstrcmpiA(path, detail->DevicePath), "Unexpected path %s\n", - detail->DevicePath); - /* Check SetupDiGetDeviceInterfaceDetailW */ - if (pSetupDiGetDeviceInterfaceDetailW) - { - ret = pSetupDiGetDeviceInterfaceDetailW(set, &interfaceData, NULL, 0, &size, NULL); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected ERROR_INSUFFICIENT_BUFFER, got error code: %d\n", GetLastError()); - ok(expectedsize == size, "SetupDiGetDeviceInterfaceDetailW returned wrong reqsize: expected %d, got %d\n", expectedsize, size); - } - else - skip("SetupDiGetDeviceInterfaceDetailW is not available\n"); - - HeapFree(GetProcessHeap(), 0, buf); - } - pSetupDiDestroyDeviceInfoList(set); - } -} - -static void testDevRegKey(void) -{ - static const WCHAR classKey[] = {'S','y','s','t','e','m','\\', - 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\', - 'C','o','n','t','r','o','l','\\','C','l','a','s','s','\\', - '{','6','a','5','5','b','5','a','4','-','3','f','6','5','-', - '1','1','d','b','-','b','7','0','4','-', - '0','0','1','1','9','5','5','c','2','b','d','b','}',0}; - BOOL ret; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - HDEVINFO set; - - if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList || - !pSetupDiCreateDeviceInfoA || !pSetupDiOpenDevRegKey || - !pSetupDiRegisterDeviceInfo || !pSetupDiCreateDevRegKeyW || - !pSetupDiCallClassInstaller) - { - skip("No SetupDiOpenDevRegKey\n"); - return; - } - set = pSetupDiCreateDeviceInfoList(&guid, NULL); - ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %d\n", GetLastError()); - if (set) - { - SP_DEVINFO_DATA devInfo = { sizeof(devInfo), { 0 } }; - HKEY key = INVALID_HANDLE_VALUE; - - ret = pSetupDiCreateDeviceInfoA(set, "ROOT\\LEGACY_BOGUS\\0000", &guid, - NULL, NULL, 0, &devInfo); - ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(NULL, NULL, 0, 0, 0, 0); - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(set, NULL, 0, 0, 0, 0); - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(set, &devInfo, 0, 0, 0, 0); - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_INVALID_FLAGS, - "Expected ERROR_INVALID_FLAGS, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0, 0, 0); - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_INVALID_FLAGS, - "Expected ERROR_INVALID_FLAGS, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0, - DIREG_BOTH, 0); - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_INVALID_FLAGS, - "Expected ERROR_INVALID_FLAGS, got %d\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0, - DIREG_DRV, 0); - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_DEVINFO_NOT_REGISTERED, - "Expected ERROR_DEVINFO_NOT_REGISTERED, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiRegisterDeviceInfo(set, &devInfo, 0, NULL, NULL, NULL); - ok(ret, "SetupDiRegisterDeviceInfo failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0, - DIREG_DRV, 0); - /* The software key isn't created by default */ - todo_wine - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_KEY_DOES_NOT_EXIST, - "Expected ERROR_KEY_DOES_NOT_EXIST_EXIST, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0, - DIREG_DEV, 0); - todo_wine - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_KEY_DOES_NOT_EXIST, - "Expected ERROR_KEY_DOES_NOT_EXIST_EXIST, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - key = pSetupDiCreateDevRegKeyW(set, &devInfo, DICS_FLAG_GLOBAL, 0, - DIREG_DRV, NULL, NULL); - ok(key != INVALID_HANDLE_VALUE, "SetupDiCreateDevRegKey failed: %08x\n", - GetLastError()); - RegCloseKey(key); - SetLastError(0xdeadbeef); - key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0, - DIREG_DRV, 0); - todo_wine - ok(key == INVALID_HANDLE_VALUE && - GetLastError() == ERROR_INVALID_DATA, - "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError()); - key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0, - DIREG_DRV, KEY_READ); - ok(key != INVALID_HANDLE_VALUE, "SetupDiOpenDevRegKey failed: %08x\n", - GetLastError()); - ret = pSetupDiCallClassInstaller(DIF_REMOVE, set, &devInfo); - pSetupDiDestroyDeviceInfoList(set); - } - devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, classKey); -} - -static void testRegisterAndGetDetail(void) -{ - HDEVINFO set; - BOOL ret; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - SP_DEVINFO_DATA devInfo = { sizeof(SP_DEVINFO_DATA), { 0 } }; - SP_DEVICE_INTERFACE_DATA interfaceData = { sizeof(interfaceData), { 0 } }; - DWORD dwSize = 0; - - SetLastError(0xdeadbeef); - set = pSetupDiGetClassDevsA(&guid, NULL, 0, DIGCF_ALLCLASSES); - ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsA failed: %08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, NULL, 0, - DICD_GENERATE_ID, &devInfo); - ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInterfaceA(set, &devInfo, &guid, NULL, 0, &interfaceData); - ok(ret, "SetupDiCreateDeviceInterfaceA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiRegisterDeviceInfo(set, &devInfo, 0, NULL, NULL, NULL); - ok(ret, "SetupDiRegisterDeviceInfo failed: %08x\n", GetLastError()); - - pSetupDiDestroyDeviceInfoList(set); - - SetLastError(0xdeadbeef); - set = pSetupDiGetClassDevsA(&guid, NULL, 0, DIGCF_DEVICEINTERFACE); - ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsA failed: %08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - ret = pSetupDiEnumDeviceInterfaces(set, NULL, &guid, 0, &interfaceData); - ok(ret, "SetupDiEnumDeviceInterfaces failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, NULL, 0, &dwSize, NULL); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %08x\n", GetLastError()); - if (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER) - { - static const char path[] = - "\\\\?\\root#legacy_bogus#0000#{6a55b5a4-3f65-11db-b704-0011955c2bdb}"; - PSP_DEVICE_INTERFACE_DETAIL_DATA_A detail = NULL; - - detail = (PSP_DEVICE_INTERFACE_DETAIL_DATA_A)HeapAlloc(GetProcessHeap(), 0, dwSize); - if (detail) - { - detail->cbSize = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath) + sizeof(char); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, - detail, dwSize, &dwSize, NULL); - ok(ret, "SetupDiGetDeviceInterfaceDetailA failed: %08x\n", GetLastError()); - ok(!lstrcmpiA(path, detail->DevicePath), "Unexpected path %s\n", - detail->DevicePath); - HeapFree(GetProcessHeap(), 0, detail); - } - } - - pSetupDiDestroyDeviceInfoList(set); -} - -static void testDeviceRegistryPropertyA() -{ - HDEVINFO set; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - SP_DEVINFO_DATA devInfo = { sizeof(SP_DEVINFO_DATA), { 0 } }; - CHAR devName[] = "LEGACY_BOGUS"; - CHAR friendlyName[] = "Bogus"; - CHAR buf[6] = ""; - DWORD buflen = 6; - DWORD size; - DWORD regType; - BOOL ret; - - SetLastError(0xdeadbeef); - set = pSetupDiGetClassDevsA(&guid, NULL, 0, DIGCF_DEVICEINTERFACE); - ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsA failed: %08x\n", - GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInfoA(set, devName, &guid, NULL, NULL, - DICD_GENERATE_ID, &devInfo); - ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyA(NULL, NULL, -1, NULL, 0); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyA(set, NULL, -1, NULL, 0); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyA(set, &devInfo, -1, NULL, 0); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_REG_PROPERTY, - "Expected ERROR_INVALID_REG_PROPERTY, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, 0); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_DATA, - "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME, - (PBYTE)friendlyName, buflen); - ok(ret, "SetupDiSetDeviceRegistryPropertyA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyA(NULL, NULL, -1, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyA(set, NULL, -1, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyA(set, &devInfo, -1, NULL, NULL, 0, NULL); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_REG_PROPERTY, - "Expected ERROR_INVALID_REG_PROPERTY, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, NULL, buflen, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_DATA, - "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, NULL, 0, &size); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %08x\n", GetLastError()); - ok(buflen == size, "Unexpected size: %d\n", size); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, (PBYTE)buf, buflen, NULL); - ok(ret, "SetupDiGetDeviceRegistryPropertyA failed: %08x\n", GetLastError()); - ok(!lstrcmpiA(friendlyName, buf), "Unexpected property\n"); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME, - ®Type, (PBYTE)buf, buflen, NULL); - ok(ret, "SetupDiGetDeviceRegistryPropertyA failed: %08x\n", GetLastError()); - ok(!lstrcmpiA(friendlyName, buf), "Unexpected value of property\n"); - ok(regType == REG_SZ, "Unexpected type of property: %d\n", regType); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, 0); - ok(ret, "SetupDiSetDeviceRegistryPropertyA failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, (PBYTE)buf, buflen, &size); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_DATA, - "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError()); - pSetupDiDestroyDeviceInfoList(set); -} - -static void testDeviceRegistryPropertyW() -{ - HDEVINFO set; - GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04, - 0x00,0x11,0x95,0x5c,0x2b,0xdb}}; - SP_DEVINFO_DATA devInfo = { sizeof(SP_DEVINFO_DATA), { 0 } }; - WCHAR devName[] = {'L','E','G','A','C','Y','_','B','O','G','U','S',0}; - WCHAR friendlyName[] = {'B','o','g','u','s',0}; - WCHAR buf[6] = {0}; - DWORD buflen = 6 * sizeof(WCHAR); - DWORD size; - DWORD regType; - BOOL ret; - - SetLastError(0xdeadbeef); - set = pSetupDiGetClassDevsW(&guid, NULL, 0, DIGCF_DEVICEINTERFACE); - if (set == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("W-functions are not implemented\n"); - return; - } - ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsW failed: %08x\n", - GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiCreateDeviceInfoW(set, devName, &guid, NULL, NULL, - DICD_GENERATE_ID, &devInfo); - ok(ret, "SetupDiCreateDeviceInfoW failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyW(NULL, NULL, -1, NULL, 0); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyW(set, NULL, -1, NULL, 0); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyW(set, &devInfo, -1, NULL, 0); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_REG_PROPERTY, - "Expected ERROR_INVALID_REG_PROPERTY, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, 0); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_DATA, - "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME, - (PBYTE)friendlyName, buflen); - ok(ret, "SetupDiSetDeviceRegistryPropertyW failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyW(NULL, NULL, -1, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyW(set, NULL, -1, NULL, NULL, 0, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyW(set, &devInfo, -1, NULL, NULL, 0, NULL); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_REG_PROPERTY, - "Expected ERROR_INVALID_REG_PROPERTY, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, NULL, buflen, NULL); - ok(!ret && GetLastError() == ERROR_INVALID_DATA, - "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, NULL, 0, &size); - ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %08x\n", GetLastError()); - ok(buflen == size, "Unexpected size: %d\n", size); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, (PBYTE)buf, buflen, NULL); - ok(ret, "SetupDiGetDeviceRegistryPropertyW failed: %08x\n", GetLastError()); - ok(!lstrcmpiW(friendlyName, buf), "Unexpected property\n"); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME, - ®Type, (PBYTE)buf, buflen, NULL); - ok(ret, "SetupDiGetDeviceRegistryPropertyW failed: %08x\n", GetLastError()); - ok(!lstrcmpiW(friendlyName, buf), "Unexpected value of property\n"); - ok(regType == REG_SZ, "Unexpected type of property: %d\n", regType); - SetLastError(0xdeadbeef); - ret = pSetupDiSetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, 0); - ok(ret, "SetupDiSetDeviceRegistryPropertyW failed: %08x\n", GetLastError()); - SetLastError(0xdeadbeef); - ret = pSetupDiGetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME, - NULL, (PBYTE)buf, buflen, &size); - todo_wine - ok(!ret && GetLastError() == ERROR_INVALID_DATA, - "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError()); - pSetupDiDestroyDeviceInfoList(set); -} - -START_TEST(devinst) -{ - init_function_pointers(); - - if (pSetupDiCreateDeviceInfoListExW && pSetupDiDestroyDeviceInfoList) - test_SetupDiCreateDeviceInfoListEx(); - else - skip("SetupDiCreateDeviceInfoListExW and/or SetupDiDestroyDeviceInfoList not available\n"); - - if (pSetupDiOpenClassRegKeyExA) - test_SetupDiOpenClassRegKeyExA(); - else - skip("SetupDiOpenClassRegKeyExA is not available\n"); - testInstallClass(); - testCreateDeviceInfo(); - testGetDeviceInstanceId(); - testRegisterDeviceInfo(); - testCreateDeviceInterface(); - testGetDeviceInterfaceDetail(); - testDevRegKey(); - testRegisterAndGetDetail(); - testDeviceRegistryPropertyA(); - testDeviceRegistryPropertyW(); -} diff --git a/rostests/winetests/setupapi/install.c b/rostests/winetests/setupapi/install.c deleted file mode 100644 index 0044f019e4b..00000000000 --- a/rostests/winetests/setupapi/install.c +++ /dev/null @@ -1,396 +0,0 @@ -/* - * Unit test for setupapi.dll install functions - * - * Copyright 2007 Misha Koshelev - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "winnls.h" -#include "winuser.h" -#include "winreg.h" -#include "winsvc.h" -#include "setupapi.h" - -#include "wine/test.h" - -static const char inffile[] = "test.inf"; -static char CURR_DIR[MAX_PATH]; - -/* Notes on InstallHinfSectionA/W: - * - InstallHinfSectionW on Win98 and InstallHinfSectionA on WinXP seem to be stubs - they do not do anything - * and simply return without displaying any error message or setting last error. We test whether - * InstallHinfSectionA sets last error, and if it doesn't we set it to NULL and use the W version if available. - * - These functions do not return a value and do not always set last error to ERROR_SUCCESS when installation still - * occurs (e.g., unquoted inf file with spaces, registry keys are written but last error is 6). Also, on Win98 last error - * is set to ERROR_SUCCESS even if install fails (e.g., quoted inf file with spaces, no registry keys set, MessageBox with - * "Installation Error" displayed). Thus, we must use functional tests (e.g., is registry key created) to determine whether - * or not installation occurred. - * - On installation problems, a MessageBox() is displayed and a Beep() is issued. The MessageBox() is disabled with a - * CBT hook. - */ - -static void (WINAPI *pInstallHinfSectionA)(HWND, HINSTANCE, LPCSTR, INT); -static void (WINAPI *pInstallHinfSectionW)(HWND, HINSTANCE, LPCWSTR, INT); - -/* - * Helpers - */ - -static void create_inf_file(LPCSTR filename, const char *data) -{ - DWORD res; - HANDLE handle = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - assert(handle != INVALID_HANDLE_VALUE); - assert(WriteFile(handle, data, strlen(data), &res, NULL)); - CloseHandle(handle); -} - -/* CBT hook to ensure a window (e.g., MessageBox) cannot be created */ -static HHOOK hhook; -static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam) -{ - return nCode == HCBT_CREATEWND ? 1: CallNextHookEx(hhook, nCode, wParam, lParam); -} - -/* - * Tests - */ - -static const char *cmdline_inf = "[Version]\n" - "Signature=\"$Chicago$\"\n" - "[DefaultInstall]\n" - "AddReg=Add.Settings\n" - "[Add.Settings]\n" - "HKCU,Software\\Wine\\setupapitest,,\n"; - -static void run_cmdline(LPCSTR section, int mode, LPCSTR path) -{ - CHAR cmdline[MAX_PATH * 2]; - - sprintf(cmdline, "%s %d %s", section, mode, path); - if (pInstallHinfSectionA) pInstallHinfSectionA(NULL, NULL, cmdline, 0); - else - { - WCHAR cmdlinew[MAX_PATH * 2]; - MultiByteToWideChar(CP_ACP, 0, cmdline, -1, cmdlinew, MAX_PATH*2); - pInstallHinfSectionW(NULL, NULL, cmdlinew, 0); - } -} - -static void ok_registry(BOOL expectsuccess) -{ - LONG ret; - - /* Functional tests for success of install and clean up */ - ret = RegDeleteKey(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest"); - ok((expectsuccess && ret == ERROR_SUCCESS) || - (!expectsuccess && ret == ERROR_FILE_NOT_FOUND), - "Expected registry key Software\\Wine\\setupapitest to %s, RegDeleteKey returned %d\n", - expectsuccess ? "exist" : "not exist", - ret); -} - -/* Test command line processing */ -static void test_cmdline(void) -{ - static const char infwithspaces[] = "test file.inf"; - char path[MAX_PATH]; - - create_inf_file(inffile, cmdline_inf); - sprintf(path, "%s\\%s", CURR_DIR, inffile); - run_cmdline("DefaultInstall", 128, path); - ok_registry(TRUE); - ok(DeleteFile(inffile), "Expected source inf to exist, last error was %d\n", GetLastError()); - - /* Test handling of spaces in path, unquoted and quoted */ - create_inf_file(infwithspaces, cmdline_inf); - - sprintf(path, "%s\\%s", CURR_DIR, infwithspaces); - run_cmdline("DefaultInstall", 128, path); - ok_registry(TRUE); - - sprintf(path, "\"%s\\%s\"", CURR_DIR, infwithspaces); - run_cmdline("DefaultInstall", 128, path); - ok_registry(FALSE); - - ok(DeleteFile(infwithspaces), "Expected source inf to exist, last error was %d\n", GetLastError()); -} - -static void test_install_svc_from(void) -{ - char inf[2048]; - char path[MAX_PATH]; - HINF infhandle; - BOOL ret; - SC_HANDLE scm_handle, svc_handle; - - /* Bail out if we are on win98 */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - - if (!scm_handle && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("OpenSCManagerA is not implemented, we are most likely on win9x\n"); - return; - } - CloseServiceHandle(scm_handle); - - /* Basic inf file to satisfy SetupOpenInfFileA */ - strcpy(inf, "[Version]\nSignature=\"$Chicago$\"\n"); - create_inf_file(inffile, inf); - sprintf(path, "%s\\%s", CURR_DIR, inffile); - infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL); - - /* Nothing but the Version section */ - SetLastError(0xdeadbeef); - ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_SECTION_NOT_FOUND, - "Expected ERROR_SECTION_NOT_FOUND, got %08x\n", GetLastError()); - SetupCloseInfFile(infhandle); - DeleteFile(inffile); - - /* Add the section */ - strcat(inf, "[Winetest.Services]\n"); - create_inf_file(inffile, inf); - infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL); - SetLastError(0xdeadbeef); - ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_SECTION_NOT_FOUND, - "Expected ERROR_SECTION_NOT_FOUND, got %08x\n", GetLastError()); - SetupCloseInfFile(infhandle); - DeleteFile(inffile); - - /* Add a reference */ - strcat(inf, "AddService=Winetest,,Winetest.Service\n"); - create_inf_file(inffile, inf); - infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL); - SetLastError(0xdeadbeef); - ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_BAD_SERVICE_INSTALLSECT, - "Expected ERROR_BAD_SERVICE_INSTALLSECT, got %08x\n", GetLastError()); - SetupCloseInfFile(infhandle); - DeleteFile(inffile); - - /* Add the section */ - strcat(inf, "[Winetest.Service]\n"); - create_inf_file(inffile, inf); - infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL); - SetLastError(0xdeadbeef); - ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_BAD_SERVICE_INSTALLSECT, - "Expected ERROR_BAD_SERVICE_INSTALLSECT, got %08x\n", GetLastError()); - SetupCloseInfFile(infhandle); - DeleteFile(inffile); - - /* Just the ServiceBinary */ - strcat(inf, "ServiceBinary=%12%\\winetest.sys\n"); - create_inf_file(inffile, inf); - infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL); - SetLastError(0xdeadbeef); - ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_BAD_SERVICE_INSTALLSECT, - "Expected ERROR_BAD_SERVICE_INSTALLSECT, got %08x\n", GetLastError()); - SetupCloseInfFile(infhandle); - DeleteFile(inffile); - - /* Add the ServiceType */ - strcat(inf, "ServiceType=1\n"); - create_inf_file(inffile, inf); - infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL); - SetLastError(0xdeadbeef); - ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_BAD_SERVICE_INSTALLSECT, - "Expected ERROR_BAD_SERVICE_INSTALLSECT, got %08x\n", GetLastError()); - SetupCloseInfFile(infhandle); - DeleteFile(inffile); - - /* Add the StartType */ - strcat(inf, "StartType=4\n"); - create_inf_file(inffile, inf); - infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL); - SetLastError(0xdeadbeef); - ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0); - ok(!ret, "Expected failure\n"); - ok(GetLastError() == ERROR_BAD_SERVICE_INSTALLSECT, - "Expected ERROR_BAD_SERVICE_INSTALLSECT, got %08x\n", GetLastError()); - SetupCloseInfFile(infhandle); - DeleteFile(inffile); - - /* This should be it, the minimal entries to install a service */ - strcat(inf, "ErrorControl=1"); - create_inf_file(inffile, inf); - infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL); - SetLastError(0xdeadbeef); - ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0); - ok(ret, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got %08x\n", GetLastError()); - SetupCloseInfFile(infhandle); - DeleteFile(inffile); - - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - - /* Open the service to see if it's really there */ - svc_handle = OpenServiceA(scm_handle, "Winetest", DELETE); - ok(svc_handle != NULL, "Service was not created\n"); - - SetLastError(0xdeadbeef); - ret = DeleteService(svc_handle); - ok(ret, "Service could not be deleted : %d\n", GetLastError()); - - CloseServiceHandle(svc_handle); - CloseServiceHandle(scm_handle); - - /* TODO: Test the Flags */ -} - -static void test_driver_install(void) -{ - HANDLE handle; - SC_HANDLE scm_handle, svc_handle; - BOOL ret; - char path[MAX_PATH], windir[MAX_PATH], driver[MAX_PATH]; - DWORD attrs; - /* Minimal stuff needed */ - static const char *inf = - "[Version]\n" - "Signature=\"$Chicago$\"\n" - "[DestinationDirs]\n" - "Winetest.DriverFiles=12\n" - "[DefaultInstall]\n" - "CopyFiles=Winetest.DriverFiles\n" - "[DefaultInstall.Services]\n" - "AddService=Winetest,,Winetest.Service\n" - "[Winetest.Service]\n" - "ServiceBinary=%12%\\winetest.sys\n" - "ServiceType=1\n" - "StartType=4\n" - "ErrorControl=1\n" - "[Winetest.DriverFiles]\n" - "winetest.sys"; - - /* Bail out if we are on win98 */ - SetLastError(0xdeadbeef); - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - - if (!scm_handle && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) - { - skip("OpenSCManagerA is not implemented, we are most likely on win9x\n"); - return; - } - CloseServiceHandle(scm_handle); - - /* Place where we expect the driver to be installed */ - GetWindowsDirectoryA(windir, MAX_PATH); - lstrcpyA(driver, windir); - lstrcatA(driver, "\\system32\\drivers\\winetest.sys"); - - /* Create a dummy driver file */ - handle = CreateFileA("winetest.sys", GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - CloseHandle(handle); - - create_inf_file(inffile, inf); - sprintf(path, "%s\\%s", CURR_DIR, inffile); - run_cmdline("DefaultInstall", 128, path); - - /* Driver should have been installed */ - attrs = GetFileAttributes(driver); - ok(attrs != INVALID_FILE_ATTRIBUTES, "Expected driver to exist\n"); - - scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); - - /* Open the service to see if it's really there */ - svc_handle = OpenServiceA(scm_handle, "Winetest", DELETE); - ok(svc_handle != NULL, "Service was not created\n"); - - SetLastError(0xdeadbeef); - ret = DeleteService(svc_handle); - ok(ret, "Service could not be deleted : %d\n", GetLastError()); - - CloseServiceHandle(svc_handle); - CloseServiceHandle(scm_handle); - - /* File cleanup */ - DeleteFile(inffile); - DeleteFile("winetest.sys"); - DeleteFile(driver); -} - -START_TEST(install) -{ - HMODULE hsetupapi = GetModuleHandle("setupapi.dll"); - char temp_path[MAX_PATH], prev_path[MAX_PATH]; - DWORD len; - - GetCurrentDirectory(MAX_PATH, prev_path); - GetTempPath(MAX_PATH, temp_path); - SetCurrentDirectory(temp_path); - - strcpy(CURR_DIR, temp_path); - len = strlen(CURR_DIR); - if(len && (CURR_DIR[len - 1] == '\\')) - CURR_DIR[len - 1] = 0; - - pInstallHinfSectionA = (void *)GetProcAddress(hsetupapi, "InstallHinfSectionA"); - pInstallHinfSectionW = (void *)GetProcAddress(hsetupapi, "InstallHinfSectionW"); - if (pInstallHinfSectionA) - { - /* Check if pInstallHinfSectionA sets last error or is a stub (as on WinXP) */ - static const char *minimal_inf = "[Version]\nSignature=\"$Chicago$\"\n"; - char cmdline[MAX_PATH*2]; - create_inf_file(inffile, minimal_inf); - sprintf(cmdline, "DefaultInstall 128 %s\\%s", CURR_DIR, inffile); - SetLastError(0xdeadbeef); - pInstallHinfSectionA(NULL, NULL, cmdline, 0); - if (GetLastError() == 0xdeadbeef) - { - skip("InstallHinfSectionA is broken (stub)\n"); - pInstallHinfSectionA = NULL; - } - ok(DeleteFile(inffile), "Expected source inf to exist, last error was %d\n", GetLastError()); - } - if (!pInstallHinfSectionW && !pInstallHinfSectionA) - skip("InstallHinfSectionA and InstallHinfSectionW are not available\n"); - else - { - /* Set CBT hook to disallow MessageBox creation in current thread */ - hhook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, 0, GetCurrentThreadId()); - assert(hhook != 0); - - test_cmdline(); - test_install_svc_from(); - test_driver_install(); - - UnhookWindowsHookEx(hhook); - } - - SetCurrentDirectory(prev_path); -} diff --git a/rostests/winetests/setupapi/misc.c b/rostests/winetests/setupapi/misc.c deleted file mode 100644 index f8750b60154..00000000000 --- a/rostests/winetests/setupapi/misc.c +++ /dev/null @@ -1,595 +0,0 @@ -/* - * Miscellaneous tests - * - * Copyright 2007 James Hawkins - * 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 - */ - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "winnls.h" -#include "winuser.h" -#include "winreg.h" -#include "setupapi.h" - -#include "wine/test.h" - -static CHAR CURR_DIR[MAX_PATH]; - -/* test: - * - fails if not administrator - * - what if it's not a .inf file? - * - copied to %windir%/Inf - * - SourceInfFileName should be a full path - * - SourceInfFileName should be <= MAX_PATH - * - copy styles - */ - -static BOOL (WINAPI *pSetupGetFileCompressionInfoExA)(PCSTR, PSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT); -static BOOL (WINAPI *pSetupCopyOEMInfA)(PCSTR, PCSTR, DWORD, DWORD, PSTR, DWORD, PDWORD, PSTR *); -static BOOL (WINAPI *pSetupQueryInfOriginalFileInformationA)(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_A); - -static void append_str(char **str, const char *data) -{ - sprintf(*str, data); - *str += strlen(*str); -} - -static void create_inf_file(LPCSTR filename) -{ - char data[1024]; - char *ptr = data; - DWORD dwNumberOfBytesWritten; - HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - append_str(&ptr, "[Version]\n"); - append_str(&ptr, "Signature=\"$Chicago$\"\n"); - append_str(&ptr, "AdvancedINF=2.5\n"); - append_str(&ptr, "[DefaultInstall]\n"); - append_str(&ptr, "RegisterOCXs=RegisterOCXsSection\n"); - append_str(&ptr, "[RegisterOCXsSection]\n"); - append_str(&ptr, "%%11%%\\ole32.dll\n"); - - WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL); - CloseHandle(hf); -} - -static void get_temp_filename(LPSTR path) -{ - CHAR temp[MAX_PATH]; - LPSTR ptr; - - GetTempFileName(CURR_DIR, "set", 0, temp); - ptr = strrchr(temp, '\\'); - - lstrcpy(path, ptr + 1); -} - -static BOOL file_exists(LPSTR path) -{ - return GetFileAttributes(path) != INVALID_FILE_ATTRIBUTES; -} - -static BOOL check_format(LPSTR path, LPSTR inf) -{ - CHAR check[MAX_PATH]; - BOOL res; - - static const CHAR format[] = "\\INF\\oem"; - - GetWindowsDirectory(check, MAX_PATH); - lstrcat(check, format); - res = CompareString(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE, check, -1, path, lstrlen(check)) == CSTR_EQUAL && - path[lstrlen(check)] != '\\'; - - return (!inf) ? res : res && (inf == path + lstrlen(check) - 3); -} - -static void test_original_file_name(LPCSTR original, LPCSTR dest) -{ - HINF hinf; - PSP_INF_INFORMATION pspii; - SP_ORIGINAL_FILE_INFO spofi; - BOOL res; - DWORD size; - - if (!pSetupQueryInfOriginalFileInformationA) - { - skip("SetupQueryInfOriginalFileInformationA is not available\n"); - return; - } - - hinf = SetupOpenInfFileA(dest, NULL, INF_STYLE_WIN4, NULL); - ok(hinf != NULL, "SetupOpenInfFileA failed with error %d\n", GetLastError()); - - res = SetupGetInfInformation(hinf, INFINFO_INF_SPEC_IS_HINF, NULL, 0, &size); - ok(res, "SetupGetInfInformation failed with error %d\n", GetLastError()); - - pspii = HeapAlloc(GetProcessHeap(), 0, size); - - res = SetupGetInfInformation(hinf, INFINFO_INF_SPEC_IS_HINF, pspii, size, NULL); - ok(res, "SetupGetInfInformation failed with error %d\n", GetLastError()); - - spofi.cbSize = 0; - res = pSetupQueryInfOriginalFileInformationA(pspii, 0, NULL, &spofi); - ok(!res && GetLastError() == ERROR_INVALID_USER_BUFFER, - "SetupQueryInfOriginalFileInformationA should have failed with ERROR_INVALID_USER_BUFFER instead of %d\n", GetLastError()); - - spofi.cbSize = sizeof(spofi); - res = pSetupQueryInfOriginalFileInformationA(pspii, 0, NULL, &spofi); - ok(res, "SetupQueryInfOriginalFileInformationA failed with error %d\n", GetLastError()); - ok(!spofi.OriginalCatalogName[0], "spofi.OriginalCatalogName should have been \"\" instead of \"%s\"\n", spofi.OriginalCatalogName); - todo_wine - ok(!strcmp(original, spofi.OriginalInfName), "spofi.OriginalInfName of %s didn't match real original name %s\n", spofi.OriginalInfName, original); - - HeapFree(GetProcessHeap(), 0, pspii); - - SetupCloseInfFile(hinf); -} - -static void test_SetupCopyOEMInf(void) -{ - CHAR toolong[MAX_PATH * 2]; - CHAR path[MAX_PATH], dest[MAX_PATH]; - CHAR tmpfile[MAX_PATH], dest_save[MAX_PATH]; - LPSTR inf; - DWORD size; - BOOL res; - - /* try NULL SourceInfFileName */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(NULL, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* try empty SourceInfFileName */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA("", NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - - /* try a relative nonexistent SourceInfFileName */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA("nonexistent", NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - - /* try an absolute nonexistent SourceInfFileName */ - lstrcpy(path, CURR_DIR); - lstrcat(path, "\\nonexistent"); - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - - /* try a long SourceInfFileName */ - memset(toolong, 'a', MAX_PATH * 2); - toolong[MAX_PATH * 2 - 1] = '\0'; - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(toolong, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - - get_temp_filename(tmpfile); - create_inf_file(tmpfile); - - /* try a relative SourceInfFileName */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(tmpfile, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - ok(file_exists(tmpfile), "Expected tmpfile to exist\n"); - - /* try SP_COPY_REPLACEONLY, dest does not exist */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, SP_COPY_REPLACEONLY, NULL, 0, NULL, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - ok(file_exists(tmpfile), "Expected source inf to exist\n"); - - /* try an absolute SourceInfFileName, without DestinationInfFileName */ - lstrcpy(path, CURR_DIR); - lstrcat(path, "\\"); - lstrcat(path, tmpfile); - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, 0, NULL, 0, NULL, NULL); - ok(res == TRUE, "Expected TRUE, got %d\n", res); - ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - ok(file_exists(path), "Expected source inf to exist\n"); - - /* try SP_COPY_REPLACEONLY, dest exists */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, SP_COPY_REPLACEONLY, NULL, 0, NULL, NULL); - ok(res == TRUE, "Expected TRUE, got %d\n", res); - ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - ok(file_exists(path), "Expected source inf to exist\n"); - - /* try SP_COPY_NOOVERWRITE */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_FILE_EXISTS, - "Expected ERROR_FILE_EXISTS, got %d\n", GetLastError()); - - /* get the DestinationInfFileName */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, 0, dest, MAX_PATH, NULL, NULL); - ok(res == TRUE, "Expected TRUE, got %d\n", res); - ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - ok(lstrlen(dest) != 0, "Expected a non-zero length string\n"); - ok(file_exists(dest), "Expected destination inf to exist\n"); - ok(check_format(dest, NULL), "Expected %%windir%%\\inf\\OEMx.inf, got %s\n", dest); - ok(file_exists(path), "Expected source inf to exist\n"); - - lstrcpy(dest_save, dest); - DeleteFile(dest_save); - - /* get the DestinationInfFileName, DestinationInfFileNameSize is too small - * - inf is still copied - */ - lstrcpy(dest, "aaa"); - size = 0; - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, 0, dest, 5, &size, NULL); - ok(res == FALSE, "Expected FALSE, got %d\n", res); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - ok(file_exists(path), "Expected source inf to exist\n"); - ok(file_exists(dest_save), "Expected dest inf to exist\n"); - ok(!lstrcmp(dest, "aaa"), "Expected dest to be unchanged\n"); - ok(size == lstrlen(dest_save) + 1, "Expected size to be lstrlen(dest_save) + 1\n"); - - /* get the DestinationInfFileName and DestinationInfFileNameSize */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, 0, dest, MAX_PATH, &size, NULL); - ok(res == TRUE, "Expected TRUE, got %d\n", res); - ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - ok(lstrlen(dest) + 1 == size, "Expected sizes to match, got (%d, %d)\n", lstrlen(dest), size); - ok(file_exists(dest), "Expected destination inf to exist\n"); - ok(check_format(dest, NULL), "Expected %%windir%%\\inf\\OEMx.inf, got %s\n", dest); - ok(file_exists(path), "Expected source inf to exist\n"); - ok(size == lstrlen(dest_save) + 1, "Expected size to be lstrlen(dest_save) + 1\n"); - - test_original_file_name(strrchr(path, '\\') + 1, dest); - - /* get the DestinationInfFileName, DestinationInfFileNameSize, and DestinationInfFileNameComponent */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, 0, dest, MAX_PATH, &size, &inf); - ok(res == TRUE, "Expected TRUE, got %d\n", res); - ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - ok(lstrlen(dest) + 1 == size, "Expected sizes to match, got (%d, %d)\n", lstrlen(dest), size); - ok(file_exists(dest), "Expected destination inf to exist\n"); - ok(check_format(dest, inf), "Expected %%windir%%\\inf\\OEMx.inf, got %s\n", dest); - ok(file_exists(path), "Expected source inf to exist\n"); - ok(size == lstrlen(dest_save) + 1, "Expected size to be lstrlen(dest_save) + 1\n"); - - /* try SP_COPY_DELETESOURCE */ - SetLastError(0xdeadbeef); - res = pSetupCopyOEMInfA(path, NULL, SPOST_NONE, SP_COPY_DELETESOURCE, NULL, 0, NULL, NULL); - ok(res == TRUE, "Expected TRUE, got %d\n", res); - ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - ok(!file_exists(path), "Expected source inf to not exist\n"); -} - -static void create_source_file(LPSTR filename, const BYTE *data, DWORD size) -{ - HANDLE handle; - DWORD written; - - handle = CreateFileA(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - WriteFile(handle, data, size, &written, NULL); - CloseHandle(handle); -} - -static BOOL compare_file_data(LPSTR file, const BYTE *data, DWORD size) -{ - DWORD read; - HANDLE handle; - BOOL ret = FALSE; - LPBYTE buffer; - - handle = CreateFileA(file, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - buffer = HeapAlloc(GetProcessHeap(), 0, size); - if (buffer) - { - ReadFile(handle, buffer, size, &read, NULL); - if (read == size && !memcmp(data, buffer, size)) ret = TRUE; - HeapFree(GetProcessHeap(), 0, buffer); - } - CloseHandle(handle); - return ret; -} - -static const BYTE uncompressed[] = { - 'u','n','c','o','m','p','r','e','s','s','e','d','\r','\n' -}; -static const BYTE comp_lzx[] = { - 0x53, 0x5a, 0x44, 0x44, 0x88, 0xf0, 0x27, 0x33, 0x41, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xff, 0x00, - 0x00, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x3f, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64 -}; -static const BYTE comp_zip[] = { - 0x50, 0x4b, 0x03, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xae, 0x81, 0x36, 0x75, 0x11, - 0x2c, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x15, 0x00, 0x77, 0x69, - 0x6e, 0x65, 0x55, 0x54, 0x09, 0x00, 0x03, 0xd6, 0x0d, 0x10, 0x46, 0xfd, 0x0d, 0x10, 0x46, 0x55, - 0x78, 0x04, 0x00, 0xe8, 0x03, 0xe8, 0x03, 0x00, 0x00, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x50, 0x4b, 0x01, 0x02, 0x17, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xbd, 0xae, 0x81, 0x36, 0x75, 0x11, 0x2c, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x81, 0x00, - 0x00, 0x00, 0x00, 0x77, 0x69, 0x6e, 0x65, 0x55, 0x54, 0x05, 0x00, 0x03, 0xd6, 0x0d, 0x10, 0x46, - 0x55, 0x78, 0x00, 0x00, 0x50, 0x4b, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00 -}; -static const BYTE comp_cab_lzx[] = { - 0x4d, 0x53, 0x43, 0x46, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x0f, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x36, 0x86, 0x72, 0x20, 0x00, 0x77, 0x69, 0x6e, 0x65, - 0x00, 0x19, 0xd0, 0x1a, 0xe3, 0x22, 0x00, 0x0e, 0x00, 0x5b, 0x80, 0x80, 0x8d, 0x00, 0x30, 0xe0, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x6e, 0x63, - 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x0d, 0x0a -}; -static const BYTE comp_cab_zip[] = { - 0x4d, 0x53, 0x43, 0x46, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x36, 0x2f, 0xa5, 0x20, 0x00, 0x77, 0x69, 0x6e, 0x65, - 0x00, 0x7c, 0x80, 0x26, 0x2b, 0x12, 0x00, 0x0e, 0x00, 0x43, 0x4b, 0x2b, 0xcd, 0x4b, 0xce, 0xcf, - 0x2d, 0x28, 0x4a, 0x2d, 0x2e, 0x4e, 0x4d, 0xe1, 0xe5, 0x02, 0x00 -}; - -static void test_SetupGetFileCompressionInfo(void) -{ - DWORD ret, source_size, target_size; - char source[MAX_PATH], temp[MAX_PATH], *name; - UINT type; - - GetTempPathA(sizeof(temp), temp); - GetTempFileNameA(temp, "fci", 0, source); - - create_source_file(source, uncompressed, sizeof(uncompressed)); - - ret = SetupGetFileCompressionInfoA(NULL, NULL, NULL, NULL, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "SetupGetFileCompressionInfo failed unexpectedly\n"); - - ret = SetupGetFileCompressionInfoA(source, NULL, NULL, NULL, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "SetupGetFileCompressionInfo failed unexpectedly\n"); - - ret = SetupGetFileCompressionInfoA(source, &name, NULL, NULL, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "SetupGetFileCompressionInfo failed unexpectedly\n"); - - ret = SetupGetFileCompressionInfoA(source, &name, &source_size, NULL, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "SetupGetFileCompressionInfo failed unexpectedly\n"); - - ret = SetupGetFileCompressionInfoA(source, &name, &source_size, &target_size, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "SetupGetFileCompressionInfo failed unexpectedly\n"); - - name = NULL; - source_size = target_size = 0; - type = 5; - - ret = SetupGetFileCompressionInfoA(source, &name, &source_size, &target_size, &type); - ok(!ret, "SetupGetFileCompressionInfo failed unexpectedly\n"); - ok(name && !lstrcmpA(name, source), "got %s, expected %s\n", name, source); - ok(source_size == sizeof(uncompressed), "got %d\n", source_size); - ok(target_size == sizeof(uncompressed), "got %d\n", target_size); - ok(type == FILE_COMPRESSION_NONE, "got %d, expected FILE_COMPRESSION_NONE\n", type); - - DeleteFileA(source); -} - -static void test_SetupGetFileCompressionInfoEx(void) -{ - BOOL ret; - DWORD required_len, source_size, target_size; - char source[MAX_PATH], temp[MAX_PATH], name[MAX_PATH]; - UINT type; - - GetTempPathA(sizeof(temp), temp); - GetTempFileNameA(temp, "doc", 0, source); - - ret = pSetupGetFileCompressionInfoExA(NULL, NULL, 0, NULL, NULL, NULL, NULL); - ok(!ret, "SetupGetFileCompressionInfoEx succeeded unexpectedly\n"); - - ret = pSetupGetFileCompressionInfoExA(source, NULL, 0, NULL, NULL, NULL, NULL); - ok(!ret, "SetupGetFileCompressionInfoEx succeeded unexpectedly\n"); - - ret = pSetupGetFileCompressionInfoExA(source, NULL, 0, &required_len, NULL, NULL, NULL); - ok(!ret, "SetupGetFileCompressionInfoEx succeeded unexpectedly\n"); - ok(required_len == lstrlenA(source) + 1, "got %d, expected %d\n", required_len, lstrlenA(source) + 1); - - create_source_file(source, comp_lzx, sizeof(comp_lzx)); - - ret = pSetupGetFileCompressionInfoExA(source, name, sizeof(name), &required_len, &source_size, &target_size, &type); - ok(ret, "SetupGetFileCompressionInfoEx failed unexpectedly: %d\n", ret); - ok(!lstrcmpA(name, source), "got %s, expected %s\n", name, source); - ok(required_len == lstrlenA(source) + 1, "got %d, expected %d\n", required_len, lstrlenA(source) + 1); - ok(source_size == sizeof(comp_lzx), "got %d\n", source_size); - ok(target_size == sizeof(uncompressed), "got %d\n", target_size); - ok(type == FILE_COMPRESSION_WINLZA, "got %d, expected FILE_COMPRESSION_WINLZA\n", type); - DeleteFileA(source); - - create_source_file(source, comp_zip, sizeof(comp_zip)); - - ret = pSetupGetFileCompressionInfoExA(source, name, sizeof(name), &required_len, &source_size, &target_size, &type); - ok(ret, "SetupGetFileCompressionInfoEx failed unexpectedly: %d\n", ret); - ok(!lstrcmpA(name, source), "got %s, expected %s\n", name, source); - ok(required_len == lstrlenA(source) + 1, "got %d, expected %d\n", required_len, lstrlenA(source) + 1); - ok(source_size == sizeof(comp_zip), "got %d\n", source_size); - ok(target_size == sizeof(comp_zip), "got %d\n", target_size); - ok(type == FILE_COMPRESSION_NONE, "got %d, expected FILE_COMPRESSION_NONE\n", type); - DeleteFileA(source); - - create_source_file(source, comp_cab_lzx, sizeof(comp_cab_lzx)); - - ret = pSetupGetFileCompressionInfoExA(source, name, sizeof(name), &required_len, &source_size, &target_size, &type); - ok(ret, "SetupGetFileCompressionInfoEx failed unexpectedly: %d\n", ret); - ok(!lstrcmpA(name, source), "got %s, expected %s\n", name, source); - ok(required_len == lstrlenA(source) + 1, "got %d, expected %d\n", required_len, lstrlenA(source) + 1); - ok(source_size == sizeof(comp_cab_lzx), "got %d\n", source_size); - ok(target_size == sizeof(uncompressed), "got %d\n", target_size); - ok(type == FILE_COMPRESSION_MSZIP, "got %d, expected FILE_COMPRESSION_MSZIP\n", type); - DeleteFileA(source); - - create_source_file(source, comp_cab_zip, sizeof(comp_cab_zip)); - - ret = pSetupGetFileCompressionInfoExA(source, name, sizeof(name), &required_len, &source_size, &target_size, &type); - ok(ret, "SetupGetFileCompressionInfoEx failed unexpectedly: %d\n", ret); - ok(!lstrcmpA(name, source), "got %s, expected %s\n", name, source); - ok(required_len == lstrlenA(source) + 1, "got %d, expected %d\n", required_len, lstrlenA(source) + 1); - ok(source_size == sizeof(comp_cab_zip), "got %d\n", source_size); - ok(target_size == sizeof(uncompressed), "got %d\n", target_size); - ok(type == FILE_COMPRESSION_MSZIP, "got %d, expected FILE_COMPRESSION_MSZIP\n", type); - DeleteFileA(source); -} - -static void test_SetupDecompressOrCopyFile(void) -{ - DWORD ret; - char source[MAX_PATH], target[MAX_PATH], temp[MAX_PATH], *p; - UINT type; - - GetTempPathA(sizeof(temp), temp); - GetTempFileNameA(temp, "doc", 0, source); - GetTempFileNameA(temp, "doc", 0, target); - - /* parameter tests */ - - create_source_file(source, uncompressed, sizeof(uncompressed)); - - ret = SetupDecompressOrCopyFileA(NULL, NULL, NULL); - ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); - - type = FILE_COMPRESSION_NONE; - ret = SetupDecompressOrCopyFileA(NULL, target, &type); - ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); - - ret = SetupDecompressOrCopyFileA(source, NULL, &type); - ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); - - type = 5; /* try an invalid compression type */ - ret = SetupDecompressOrCopyFileA(source, target, &type); - ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); - - DeleteFileA(target); - - /* no compression tests */ - - ret = SetupDecompressOrCopyFileA(source, target, NULL); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); - - /* try overwriting existing file */ - ret = SetupDecompressOrCopyFileA(source, target, NULL); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - DeleteFileA(target); - - type = FILE_COMPRESSION_NONE; - ret = SetupDecompressOrCopyFileA(source, target, &type); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); - DeleteFileA(target); - - type = FILE_COMPRESSION_WINLZA; - ret = SetupDecompressOrCopyFileA(source, target, &type); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); - DeleteFileA(target); - - /* lz compression tests */ - - create_source_file(source, comp_lzx, sizeof(comp_lzx)); - - ret = SetupDecompressOrCopyFileA(source, target, NULL); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - DeleteFileA(target); - - /* zip compression tests */ - - create_source_file(source, comp_zip, sizeof(comp_zip)); - - ret = SetupDecompressOrCopyFileA(source, target, NULL); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - ok(compare_file_data(target, comp_zip, sizeof(comp_zip)), "incorrect target file\n"); - DeleteFileA(target); - - /* cabinet compression tests */ - - create_source_file(source, comp_cab_zip, sizeof(comp_cab_zip)); - - p = strrchr(target, '\\'); - lstrcpyA(p + 1, "wine"); - - ret = SetupDecompressOrCopyFileA(source, target, NULL); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); - - /* try overwriting existing file */ - ret = SetupDecompressOrCopyFileA(source, target, NULL); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - - /* try zip compression */ - type = FILE_COMPRESSION_MSZIP; - ret = SetupDecompressOrCopyFileA(source, target, &type); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); - - /* try no compression */ - type = FILE_COMPRESSION_NONE; - ret = SetupDecompressOrCopyFileA(source, target, &type); - ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); - ok(compare_file_data(target, comp_cab_zip, sizeof(comp_cab_zip)), "incorrect target file\n"); - - DeleteFileA(target); - DeleteFileA(source); -} - -START_TEST(misc) -{ - HMODULE hsetupapi = GetModuleHandle("setupapi.dll"); - - pSetupGetFileCompressionInfoExA = (void*)GetProcAddress(hsetupapi, "SetupGetFileCompressionInfoExA"); - pSetupCopyOEMInfA = (void*)GetProcAddress(hsetupapi, "SetupCopyOEMInfA"); - pSetupQueryInfOriginalFileInformationA = (void*)GetProcAddress(hsetupapi, "SetupQueryInfOriginalFileInformationA"); - - GetCurrentDirectoryA(MAX_PATH, CURR_DIR); - - if (pSetupCopyOEMInfA) - test_SetupCopyOEMInf(); - else - skip("SetupCopyOEMInfA is not available\n"); - - test_SetupGetFileCompressionInfo(); - - if (pSetupGetFileCompressionInfoExA) - test_SetupGetFileCompressionInfoEx(); - else - skip("SetupGetFileCompressionInfoExA is not available\n"); - - test_SetupDecompressOrCopyFile(); -} diff --git a/rostests/winetests/setupapi/parser.c b/rostests/winetests/setupapi/parser.c deleted file mode 100644 index 6341222819e..00000000000 --- a/rostests/winetests/setupapi/parser.c +++ /dev/null @@ -1,664 +0,0 @@ -/* - * INF file parsing tests - * - * Copyright 2002, 2005 Alexandre Julliard 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 "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winreg.h" -#include "setupapi.h" - -#include "wine/test.h" - -/* function pointers */ -static HMODULE hSetupAPI; -static LPCWSTR (WINAPI *pSetupGetField)(PINFCONTEXT,DWORD); - -static void init_function_pointers(void) -{ - hSetupAPI = GetModuleHandleA("setupapi.dll"); - - pSetupGetField = (void *)GetProcAddress(hSetupAPI, "pSetupGetField"); -} - -static const char tmpfilename[] = ".\\tmp.inf"; - -/* some large strings */ -#define A255 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \ - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \ - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \ - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" -#define A256 "a" A255 -#define A400 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \ - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \ - "aaaaaaaaaaaaaaaa" A256 -#define A511 A255 A256 -#define A4097 "a" A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 - -#define STD_HEADER "[Version]\r\nSignature=\"$CHICAGO$\"\r\n" - -#define STR_SECTION "[Strings]\nfoo=aaa\nbar=bbb\nloop=%loop2%\nloop2=%loop%\n" \ - "per%%cent=abcd\nper=1\ncent=2\n22=foo\n" \ - "big=" A400 "\n" \ - "mydrive=\"C:\\\"\n" \ - "verybig=" A400 A400 A400 "\n" - -/* create a new file with specified contents and open it */ -static HINF test_file_contents( const char *data, UINT *err_line ) -{ - DWORD res; - HANDLE handle = CreateFileA( tmpfilename, GENERIC_READ|GENERIC_WRITE, - FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0 ); - if (handle == INVALID_HANDLE_VALUE) return 0; - if (!WriteFile( handle, data, strlen(data), &res, NULL )) trace( "write error\n" ); - CloseHandle( handle ); - return SetupOpenInfFileA( tmpfilename, 0, INF_STYLE_WIN4, err_line ); -} - -static const char *get_string_field( INFCONTEXT *context, DWORD index ) -{ - static char buffer[MAX_INF_STRING_LENGTH+32]; - if (SetupGetStringFieldA( context, index, buffer, sizeof(buffer), NULL )) return buffer; - return NULL; -} - -static const char *get_line_text( INFCONTEXT *context ) -{ - static char buffer[MAX_INF_STRING_LENGTH+32]; - if (SetupGetLineTextA( context, 0, 0, 0, buffer, sizeof(buffer), NULL )) return buffer; - return NULL; -} - - -/* Test various valid/invalid file formats */ - -static const struct -{ - const char *data; - DWORD error; - UINT err_line; - int todo; -} invalid_files[] = -{ - /* file contents expected error (or 0) errline todo */ - { "\r\n", ERROR_WRONG_INF_STYLE, 0, 0 }, - { "abcd\r\n", ERROR_WRONG_INF_STYLE, 0, 1 }, - { "[Version]\r\n", ERROR_WRONG_INF_STYLE, 0, 0 }, - { "[Version]\nSignature=", ERROR_WRONG_INF_STYLE, 0, 0 }, - { "[Version]\nSignature=foo", ERROR_WRONG_INF_STYLE, 0, 0 }, - { "[version]\nsignature=$chicago$", 0, 0, 0 }, - { "[VERSION]\nSIGNATURE=$CHICAGO$", 0, 0, 0 }, - { "[Version]\nSignature=$chicago$,abcd", 0, 0, 0 }, - { "[Version]\nabc=def\nSignature=$chicago$", 0, 0, 0 }, - { "[Version]\nabc=def\n[Version]\nSignature=$chicago$", 0, 0, 0 }, - { STD_HEADER, 0, 0, 0 }, - { STD_HEADER "[]\r\n", 0, 0, 0 }, - { STD_HEADER "]\r\n", 0, 0, 0 }, - { STD_HEADER "[" A255 "]\r\n", 0, 0, 0 }, - { STD_HEADER "[ab\r\n", ERROR_BAD_SECTION_NAME_LINE, 3, 0 }, - { STD_HEADER "\n\n[ab\x1a]\n", ERROR_BAD_SECTION_NAME_LINE, 5, 0 }, - { STD_HEADER "[" A256 "]\r\n", ERROR_SECTION_NAME_TOO_LONG, 3, 0 }, - { "[abc]\n" STD_HEADER, 0, 0, 0 }, - { "abc\r\n" STD_HEADER, ERROR_EXPECTED_SECTION_NAME, 1, 0 }, - { ";\n;\nabc\r\n" STD_HEADER, ERROR_EXPECTED_SECTION_NAME, 3, 0 }, - { ";\n;\nab\nab\n" STD_HEADER, ERROR_EXPECTED_SECTION_NAME, 3, 0 }, - { ";aa\n;bb\n" STD_HEADER, 0, 0, 0 }, - { STD_HEADER " [TestSection\x00] \n", ERROR_BAD_SECTION_NAME_LINE, 3, 0 }, - { STD_HEADER " [Test\x00Section] \n", ERROR_BAD_SECTION_NAME_LINE, 3, 0 }, - { STD_HEADER " [TestSection\x00] \n", ERROR_BAD_SECTION_NAME_LINE, 3, 0 }, - { STD_HEADER " [Test\x00Section] \n", ERROR_BAD_SECTION_NAME_LINE, 3, 0 }, -}; - -static void test_invalid_files(void) -{ - unsigned int i; - UINT err_line; - HINF hinf; - DWORD err; - - for (i = 0; i < sizeof(invalid_files)/sizeof(invalid_files[0]); i++) - { - SetLastError( 0xdeadbeef ); - err_line = 0xdeadbeef; - hinf = test_file_contents( invalid_files[i].data, &err_line ); - err = GetLastError(); - trace( "hinf=%p err=0x%x line=%d\n", hinf, err, err_line ); - if (invalid_files[i].error) /* should fail */ - { - ok( hinf == INVALID_HANDLE_VALUE, "file %u: Open succeeded\n", i ); - if (invalid_files[i].todo) todo_wine - { - ok( err == invalid_files[i].error, "file %u: Bad error %u/%u\n", - i, err, invalid_files[i].error ); - ok( err_line == invalid_files[i].err_line, "file %u: Bad error line %d/%d\n", - i, err_line, invalid_files[i].err_line ); - } - else - { - ok( err == invalid_files[i].error, "file %u: Bad error %u/%u\n", - i, err, invalid_files[i].error ); - ok( err_line == invalid_files[i].err_line, "file %u: Bad error line %d/%d\n", - i, err_line, invalid_files[i].err_line ); - } - } - else /* should succeed */ - { - ok( hinf != INVALID_HANDLE_VALUE, "file %u: Open failed\n", i ); - ok( err == 0, "file %u: Error code set to %u\n", i, err ); - } - SetupCloseInfFile( hinf ); - } -} - - -/* Test various section names */ - -static const struct -{ - const char *data; - const char *section; - DWORD error; -} section_names[] = -{ - /* file contents section name error code */ - { STD_HEADER "[TestSection]", "TestSection", 0 }, - { STD_HEADER "[TestSection]\n", "TestSection", 0 }, - { STD_HEADER "[TESTSECTION]\r\n", "TestSection", 0 }, - { STD_HEADER "[TestSection]\n[abc]", "testsection", 0 }, - { STD_HEADER ";[TestSection]\n", "TestSection", ERROR_SECTION_NOT_FOUND }, - { STD_HEADER "[TestSection]\n", "Bad name", ERROR_SECTION_NOT_FOUND }, - /* spaces */ - { STD_HEADER "[TestSection] \r\n", "TestSection", 0 }, - { STD_HEADER " [TestSection]\r\n", "TestSection", 0 }, - { STD_HEADER " [TestSection] dummy\r\n", "TestSection", 0 }, - { STD_HEADER " [TestSection] [foo]\r\n", "TestSection", 0 }, - { STD_HEADER " [ Test Section ] dummy\r\n", " Test Section ", 0 }, - { STD_HEADER "[TestSection] \032\ndummy", "TestSection", 0 }, - { STD_HEADER "[TestSection] \n\032dummy", "TestSection", 0 }, - /* special chars in section name */ - { STD_HEADER "[Test[Section]\r\n", "Test[Section", 0 }, - { STD_HEADER "[Test[S]ection]\r\n", "Test[S", 0 }, - { STD_HEADER "[Test[[[Section]\r\n", "Test[[[Section", 0 }, - { STD_HEADER "[]\r\n", "", 0 }, - { STD_HEADER "[[[]\n", "[[", 0 }, - { STD_HEADER "[Test\"Section]\r\n", "Test\"Section", 0 }, - { STD_HEADER "[Test\\Section]\r\n", "Test\\Section", 0 }, - { STD_HEADER "[Test\\ Section]\r\n", "Test\\ Section", 0 }, - { STD_HEADER "[Test;Section]\r\n", "Test;Section", 0 }, - /* various control chars */ - { STD_HEADER " [Test\r\b\tSection] \n", "Test\r\b\tSection", 0 }, - /* nulls */ -}; - -static void test_section_names(void) -{ - unsigned int i; - UINT err_line; - HINF hinf; - DWORD err; - LONG ret; - - for (i = 0; i < sizeof(section_names)/sizeof(section_names[0]); i++) - { - SetLastError( 0xdeadbeef ); - hinf = test_file_contents( section_names[i].data, &err_line ); - ok( hinf != INVALID_HANDLE_VALUE, "line %u: open failed err %u\n", i, GetLastError() ); - if (hinf == INVALID_HANDLE_VALUE) continue; - - ret = SetupGetLineCountA( hinf, section_names[i].section ); - err = GetLastError(); - trace( "hinf=%p ret=%d err=0x%x\n", hinf, ret, err ); - if (ret != -1) - { - ok( !section_names[i].error, "line %u: section name %s found\n", - i, section_names[i].section ); - ok( !err, "line %u: bad error code %u\n", i, err ); - } - else - { - ok( section_names[i].error, "line %u: section name %s not found\n", - i, section_names[i].section ); - ok( err == section_names[i].error, "line %u: bad error %u/%u\n", - i, err, section_names[i].error ); - } - SetupCloseInfFile( hinf ); - } -} - - -/* Test various key and value names */ - -static const struct -{ - const char *data; - const char *key; - const char *fields[10]; -} key_names[] = -{ -/* file contents expected key expected fields */ - { "ab=cd", "ab", { "cd" } }, - { "ab=cd,ef,gh,ij", "ab", { "cd", "ef", "gh", "ij" } }, - { "ab", "ab", { "ab" } }, - { "ab,cd", NULL, { "ab", "cd" } }, - { "ab,cd=ef", NULL, { "ab", "cd=ef" } }, - { "=abcd,ef", "", { "abcd", "ef" } }, - /* backslashes */ - { "ba\\\ncd=ef", "bacd", { "ef" } }, - { "ab \\ \ncd=ef", "abcd", { "ef" } }, - { "ab\\\ncd,ef", NULL, { "abcd", "ef" } }, - { "ab \\ ;cc\ncd=ef", "abcd", { "ef" } }, - { "ab \\ \\ \ncd=ef", "abcd", { "ef" } }, - { "ba \\ dc=xx", "ba \\ dc", { "xx" } }, - { "ba \\\\ \nc=d", "bac", { "d" } }, - { "a=b\\\\c", "a", { "b\\\\c" } }, - { "ab=cd \\ ", "ab", { "cd" } }, - { "ba=c \\ \n \\ \n a", "ba", { "ca" } }, - { "ba=c \\ \n \\ a", "ba", { "c\\ a" } }, - { " \\ a= \\ b", "\\ a", { "\\ b" } }, - /* quotes */ - { "Ab\"Cd\"=Ef", "AbCd", { "Ef" } }, - { "Ab\"Cd=Ef\"", "AbCd=Ef", { "AbCd=Ef" } }, - { "ab\"\"\"cd,ef=gh\"", "ab\"cd,ef=gh", { "ab\"cd,ef=gh" } }, - { "ab\"\"cd=ef", "abcd", { "ef" } }, - { "ab\"\"cd=ef,gh", "abcd", { "ef", "gh" } }, - { "ab=cd\"\"ef", "ab", { "cdef" } }, - { "ab=cd\",\"ef", "ab", { "cd,ef" } }, - { "ab=cd\",ef", "ab", { "cd,ef" } }, - { "ab=cd\",ef\\\nab", "ab", { "cd,ef\\" } }, - - /* single quotes (unhandled)*/ - { "HKLM,A,B,'C',D", NULL, { "HKLM", "A","B","'C'","D" } }, - /* spaces */ - { " a b = c , d \n", "a b", { "c", "d" } }, - { " a b = c ,\" d\" \n", "a b", { "c", " d" } }, - { " a b\r = c\r\n", "a b", { "c" } }, - /* empty fields */ - { "a=b,,,c,,,d", "a", { "b", "", "", "c", "", "", "d" } }, - { "a=b,\"\",c,\" \",d", "a", { "b", "", "c", " ", "d" } }, - { "=,,b", "", { "", "", "b" } }, - { ",=,,b", NULL, { "", "=", "", "b" } }, - { "a=\n", "a", { "" } }, - { "=", "", { "" } }, - /* eof */ - { "ab=c\032d", "ab", { "c" } }, - { "ab\032=cd", "ab", { "ab" } }, - /* nulls */ - { "abcd=ef\x0gh", "abcd", { "ef" } }, - /* multiple sections with same name */ - { "[Test2]\nab\n[Test]\nee=ff\n", "ee", { "ff" } }, - /* string substitution */ - { "%foo%=%bar%\n" STR_SECTION, "aaa", { "bbb" } }, - { "%foo%xx=%bar%yy\n" STR_SECTION, "aaaxx", { "bbbyy" } }, - { "%% %foo%=%bar%\n" STR_SECTION, "% aaa", { "bbb" } }, - { "%f\"o\"o%=ccc\n" STR_SECTION, "aaa", { "ccc" } }, - { "abc=%bar;bla%\n" STR_SECTION, "abc", { "%bar" } }, - { "loop=%loop%\n" STR_SECTION, "loop", { "%loop2%" } }, - { "%per%%cent%=100\n" STR_SECTION, "12", { "100" } }, - { "a=%big%\n" STR_SECTION, "a", { A400 } }, - { "a=%verybig%\n" STR_SECTION, "a", { A511 } }, /* truncated to 511 */ - { "a=%big%%big%%big%%big%\n" STR_SECTION, "a", { A400 A400 A400 A400 } }, - { "a=%big%%big%%big%%big%%big%%big%%big%%big%%big%\n" STR_SECTION, "a", { A400 A400 A400 A400 A400 A400 A400 A400 A400 } }, - { "a=%big%%big%%big%%big%%big%%big%%big%%big%%big%%big%%big%\n" STR_SECTION, "a", { A4097 /*MAX_INF_STRING_LENGTH+1*/ } }, - - /* Prove expansion of system entries removes extra \'s and string - replacements doesn't */ - { "ab=\"%24%\"\n" STR_SECTION, "ab", { "C:\\" } }, - { "ab=\"%mydrive%\"\n" STR_SECTION, "ab", { "C:\\" } }, - { "ab=\"%24%\\fred\"\n" STR_SECTION, "ab", { "C:\\fred" } }, - { "ab=\"%mydrive%\\fred\"\n" STR_SECTION,"ab", { "C:\\\\fred" } }, - /* Confirm duplicate \'s kept */ - { "ab=\"%24%\\\\fred\"", "ab", { "C:\\\\fred" } }, - { "ab=C:\\\\FRED", "ab", { "C:\\\\FRED" } }, -}; - -/* check the key of a certain line */ -static const char *check_key( INFCONTEXT *context, const char *wanted ) -{ - const char *key = get_string_field( context, 0 ); - DWORD err = GetLastError(); - - if (!key) - { - ok( !wanted, "missing key %s\n", wanted ); - ok( err == 0 || err == ERROR_INVALID_PARAMETER, "last error set to %u\n", err ); - } - else - { - ok( !strcmp( key, wanted ), "bad key %s/%s\n", key, wanted ); - ok( err == 0, "last error set to %u\n", err ); - } - return key; -} - -static void test_key_names(void) -{ - char buffer[MAX_INF_STRING_LENGTH+32]; - const char *key, *line; - unsigned int i, index, count; - UINT err_line; - HINF hinf; - DWORD err; - BOOL ret; - INFCONTEXT context; - - for (i = 0; i < sizeof(key_names)/sizeof(key_names[0]); i++) - { - strcpy( buffer, STD_HEADER "[Test]\n" ); - strcat( buffer, key_names[i].data ); - SetLastError( 0xdeadbeef ); - hinf = test_file_contents( buffer, &err_line ); - ok( hinf != INVALID_HANDLE_VALUE, "line %u: open failed err %u\n", i, GetLastError() ); - if (hinf == INVALID_HANDLE_VALUE) continue; - - ret = SetupFindFirstLineA( hinf, "Test", 0, &context ); - assert( ret ); - - key = check_key( &context, key_names[i].key ); - - buffer[0] = buffer[1] = 0; /* build the full line */ - for (index = 0; ; index++) - { - const char *field = get_string_field( &context, index + 1 ); - err = GetLastError(); - if (field) - { - ok( err == 0, "line %u: bad error %u\n", i, err ); - if (key_names[i].fields[index]) - ok( !strcmp( field, key_names[i].fields[index] ), "line %u: bad field %s/%s\n", - i, field, key_names[i].fields[index] ); - else - ok( 0, "line %u: got extra field %s\n", i, field ); - strcat( buffer, "," ); - strcat( buffer, field ); - } - else - { - ok( err == 0 || err == ERROR_INVALID_PARAMETER, - "line %u: bad error %u\n", i, err ); - if (key_names[i].fields[index]) - ok( 0, "line %u: missing field %s\n", i, key_names[i].fields[index] ); - } - if (!key_names[i].fields[index]) break; - } - count = SetupGetFieldCount( &context ); - ok( count == index, "line %u: bad count %d/%d\n", i, index, count ); - - line = get_line_text( &context ); - ok( line != NULL, "line %u: SetupGetLineText failed\n", i ); - if (line) ok( !strcmp( line, buffer+1 ), "line %u: bad text %s/%s\n", i, line, buffer+1 ); - - SetupCloseInfFile( hinf ); - } - -} - -static void test_close_inf_file(void) -{ - SetLastError(0xdeadbeef); - SetupCloseInfFile(NULL); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %u\n", GetLastError()); - - SetLastError(0xdeadbeef); - SetupCloseInfFile(INVALID_HANDLE_VALUE); - ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %u\n", GetLastError()); - -} - -static const char *contents = "[Version]\n" - "Signature=\"$Windows NT$\"\n" - "FileVersion=5.1.1.2\n" - "[FileBranchInfo]\n" - "RTMQFE=\"%RTMGFE_NAME%\",SP1RTM,"A4097"\n" - "[Strings]\n" - "RTMQFE_NAME = \"RTMQFE\"\n"; - -static const WCHAR getfield_res[][20] = -{ - {'R','T','M','Q','F','E',0}, - {'%','R','T','M','G','F','E','_','N','A','M','E','%',0}, - {'S','P','1','R','T','M',0}, -}; - -static void test_pSetupGetField(void) -{ - UINT err; - BOOL ret; - HINF hinf; - LPCWSTR field; - INFCONTEXT context; - int i; - - hinf = test_file_contents( contents, &err ); - ok( hinf != NULL, "Expected valid INF file\n" ); - - ret = SetupFindFirstLine( hinf, "FileBranchInfo", NULL, &context ); - ok( ret, "Failed to find first line\n" ); - - /* native Windows crashes if a NULL context is sent in */ - - for ( i = 0; i < 3; i++ ) - { - field = pSetupGetField( &context, i ); - ok( field != NULL, "Failed to get field %i\n", i ); - ok( !lstrcmpW( getfield_res[i], field ), "Wrong string returned\n" ); - } - - field = pSetupGetField( &context, 3 ); - ok( field != NULL, "Failed to get field 3\n" ); - ok( lstrlenW( field ) == 511, "Expected 511, got %d\n", lstrlenW( field ) ); - - field = pSetupGetField( &context, 4 ); - ok( field == NULL, "Expected NULL, got %p\n", field ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError() ); - - SetupCloseInfFile( hinf ); -} - -static void test_SetupGetIntField(void) -{ - static const struct - { - const char *key; - const char *fields; - DWORD index; - INT value; - DWORD err; - } keys[] = - { - /* key fields index expected int errorcode */ - { "Key=", "48", 1, 48, ERROR_SUCCESS }, - { "Key=", "48", 0, -1, ERROR_INVALID_DATA }, - { "123=", "48", 0, 123, ERROR_SUCCESS }, - { "Key=", "0x4", 1, 4, ERROR_SUCCESS }, - { "Key=", "Field1", 1, -1, ERROR_INVALID_DATA }, - { "Key=", "Field1,34", 2, 34, ERROR_SUCCESS }, - { "Key=", "Field1,,Field3", 2, 0, ERROR_SUCCESS }, - { "Key=", "Field1,", 2, 0, ERROR_SUCCESS } - }; - unsigned int i; - - for (i = 0; i < sizeof(keys)/sizeof(keys[0]); i++) - { - HINF hinf; - char buffer[MAX_INF_STRING_LENGTH]; - INFCONTEXT context; - UINT err; - BOOL retb; - INT intfield; - - strcpy( buffer, STD_HEADER "[TestSection]\n" ); - strcat( buffer, keys[i].key ); - strcat( buffer, keys[i].fields ); - hinf = test_file_contents( buffer, &err); - ok( hinf != NULL, "Expected valid INF file\n" ); - - SetupFindFirstLineA( hinf, "TestSection", "Key", &context ); - SetLastError( 0xdeadbeef ); - intfield = -1; - retb = SetupGetIntField( &context, keys[i].index, &intfield ); - if ( keys[i].err == ERROR_SUCCESS ) - { - ok( retb, "Expected success\n" ); - ok( GetLastError() == ERROR_SUCCESS || - GetLastError() == 0xdeadbeef /* win9x, NT4 */, - "Expected ERROR_SUCCESS or 0xdeadbeef, got %u\n", GetLastError() ); - } - else - { - ok( !retb, "Expected failure\n" ); - ok( GetLastError() == keys[i].err, - "Expected %d, got %u\n", keys[i].err, GetLastError() ); - } - ok( intfield == keys[i].value, "Expected %d, got %d\n", keys[i].value, intfield ); - - SetupCloseInfFile( hinf ); - } -} - -static void test_GLE(void) -{ - static const char *inf = - "[Version]\n" - "Signature=\"$Windows NT$\"\n" - "[Sectionname]\n" - "Keyname1=Field1,Field2,Field3\n" - "\n" - "Keyname2=Field4,Field5\n"; - HINF hinf; - UINT err; - INFCONTEXT context; - BOOL retb; - LONG retl; - char buf[MAX_INF_STRING_LENGTH]; - int bufsize = MAX_INF_STRING_LENGTH; - DWORD retsize; - - hinf = test_file_contents( inf, &err ); - ok( hinf != NULL, "Expected valid INF file\n" ); - - SetLastError(0xdeadbeef); - retb = SetupFindFirstLineA( hinf, "ImNotThere", NULL, &context ); - ok(!retb, "Expected failure\n"); - ok(GetLastError() == ERROR_LINE_NOT_FOUND, - "Expected ERROR_LINE_NOT_FOUND, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupFindFirstLineA( hinf, "ImNotThere", "ImNotThere", &context ); - ok(!retb, "Expected failure\n"); - ok(GetLastError() == ERROR_LINE_NOT_FOUND, - "Expected ERROR_LINE_NOT_FOUND, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupFindFirstLineA( hinf, "Sectionname", NULL, &context ); - ok(retb, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupFindFirstLineA( hinf, "Sectionname", "ImNotThere", &context ); - ok(!retb, "Expected failure\n"); - ok(GetLastError() == ERROR_LINE_NOT_FOUND, - "Expected ERROR_LINE_NOT_FOUND, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupFindFirstLineA( hinf, "Sectionname", "Keyname1", &context ); - ok(retb, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupFindNextMatchLineA( &context, "ImNotThere", &context ); - ok(!retb, "Expected failure\n"); - ok(GetLastError() == ERROR_LINE_NOT_FOUND, - "Expected ERROR_LINE_NOT_FOUND, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupFindNextMatchLineA( &context, "Keyname2", &context ); - ok(retb, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retl = SetupGetLineCountA( hinf, "ImNotThere"); - ok(retl == -1, "Expected -1, got %d\n", retl); - ok(GetLastError() == ERROR_SECTION_NOT_FOUND, - "Expected ERROR_SECTION_NOT_FOUND, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retl = SetupGetLineCountA( hinf, "Sectionname"); - ok(retl == 2, "Expected 2, got %d\n", retl); - ok(GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupGetLineTextA( NULL, hinf, "ImNotThere", "ImNotThere", buf, bufsize, &retsize); - ok(!retb, "Expected failure\n"); - ok(GetLastError() == ERROR_LINE_NOT_FOUND, - "Expected ERROR_LINE_NOT_FOUND, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupGetLineTextA( NULL, hinf, "Sectionname", "ImNotThere", buf, bufsize, &retsize); - ok(!retb, "Expected failure\n"); - ok(GetLastError() == ERROR_LINE_NOT_FOUND, - "Expected ERROR_LINE_NOT_FOUND, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupGetLineTextA( NULL, hinf, "Sectionname", "Keyname1", buf, bufsize, &retsize); - ok(retb, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupGetLineByIndexA( hinf, "ImNotThere", 1, &context ); - ok(!retb, "Expected failure\n"); - ok(GetLastError() == ERROR_LINE_NOT_FOUND, - "Expected ERROR_LINE_NOT_FOUND, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupGetLineByIndexA( hinf, "Sectionname", 1, &context ); - ok(retb, "Expected success\n"); - ok(GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - retb = SetupGetLineByIndexA( hinf, "Sectionname", 3, &context ); - ok(!retb, "Expected failure\n"); - ok(GetLastError() == ERROR_LINE_NOT_FOUND, - "Expected ERROR_LINE_NOT_FOUND, got %08x\n", GetLastError()); - - SetupCloseInfFile( hinf ); -} - -START_TEST(parser) -{ - init_function_pointers(); - test_invalid_files(); - test_section_names(); - test_key_names(); - test_close_inf_file(); - test_pSetupGetField(); - test_SetupGetIntField(); - test_GLE(); - DeleteFileA( tmpfilename ); -} diff --git a/rostests/winetests/setupapi/query.c b/rostests/winetests/setupapi/query.c deleted file mode 100644 index 87f167306ca..00000000000 --- a/rostests/winetests/setupapi/query.c +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Unit tests for setupapi.dll query functions - * - * Copyright (C) 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 - */ - -#include -#include -#include -#include "wine/test.h" - -CHAR CURR_DIR[MAX_PATH]; -CHAR WIN_DIR[MAX_PATH]; - -static void get_directories(void) -{ - int len; - - GetCurrentDirectoryA(MAX_PATH, CURR_DIR); - len = lstrlenA(CURR_DIR); - - if(len && (CURR_DIR[len-1] == '\\')) - CURR_DIR[len-1] = 0; - - GetWindowsDirectoryA(WIN_DIR, MAX_PATH); - len = lstrlenA(WIN_DIR); - - if (len && (WIN_DIR[len-1] == '\\')) - WIN_DIR[len-1] = 0; -} - -static void append_str(char **str, const char *data) -{ - sprintf(*str, data); - *str += strlen(*str); -} - -static void create_inf_file(LPSTR filename) -{ - char data[1024]; - char *ptr = data; - DWORD dwNumberOfBytesWritten; - HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - append_str(&ptr, "[Version]\n"); - append_str(&ptr, "Signature=\"$Chicago$\"\n"); - append_str(&ptr, "AdvancedINF=2.5\n"); - append_str(&ptr, "[SourceDisksNames]\n"); - append_str(&ptr, "2 = %%SrcDiskName%%, LANCOM\\LANtools\\lanconf.cab\n"); - append_str(&ptr, "[SourceDisksFiles]\n"); - append_str(&ptr, "lanconf.exe = 2\n"); - append_str(&ptr, "[DestinationDirs]\n"); - append_str(&ptr, "DefaultDestDir = 24, %%DefaultDest%%\n"); - append_str(&ptr, "[Strings]\n"); - append_str(&ptr, "LangDir = english\n"); - append_str(&ptr, "DefaultDest = LANCOM\n"); - append_str(&ptr, "SrcDiskName = \"LANCOM Software CD\"\n"); - - WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL); - CloseHandle(hf); -} - -static void create_inf_file2(LPSTR filename) -{ - char data[1024]; - char *ptr = data; - DWORD dwNumberOfBytesWritten; - HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - append_str(&ptr, "[SourceFileInfo]\n"); - append_str(&ptr, "sp1qfe\\bitsinst.exe=250B3702C7CCD7C2F9E4DAA1555C933E,000600060A28062C,27136,SP1QFE\n"); - append_str(&ptr, "sp1qfe\\bitsprx2.dll=4EBEA67F4BB4EB402E725CA7CA2857AE,000600060A280621,7680,SP1QFE\n"); - append_str(&ptr, "sp1qfe\\bitsprx3.dll=C788A1D9330DA011EF25E95D3BC7BDE5,000600060A280621,7168,SP1QFE\n"); - append_str(&ptr, "sp1qfe\\qmgr.dll=696AC82FB290A03F205901442E0E9589,000600060A280621,361984,SP1QFE\n"); - append_str(&ptr, "sp1qfe\\qmgrprxy.dll=8B5848144829E1BC985EA4C3D8CA7E3F,000600060A280621,17408,SP1QFE\n"); - append_str(&ptr, "sp1qfe\\winhttp.dll=3EC6F518114606CA59D4160322077437,000500010A280615,331776,SP1QFE\n"); - append_str(&ptr, "sp1qfe\\xpob2res.dll=DB83156B9F496F20D1EA70E4ABEC0166,000500010A280622,158720,SP1QFE\n"); - - WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL); - CloseHandle(hf); -} - -static BOOL check_info_filename(PSP_INF_INFORMATION info, LPSTR test) -{ - LPSTR filename; - DWORD size; - BOOL ret = FALSE; - - if (!SetupQueryInfFileInformationA(info, 0, NULL, 0, &size)) - return FALSE; - - filename = HeapAlloc(GetProcessHeap(), 0, size); - if (!filename) - return FALSE; - - SetupQueryInfFileInformationA(info, 0, filename, size, &size); - - if (!lstrcmpiA(test, filename)) - ret = TRUE; - - HeapFree(GetProcessHeap(), 0, filename); - return ret; -} - -static PSP_INF_INFORMATION alloc_inf_info(LPCSTR filename, DWORD search, PDWORD size) -{ - PSP_INF_INFORMATION info; - BOOL ret; - - ret = SetupGetInfInformationA(filename, search, NULL, 0, size); - if (!ret) - return NULL; - - info = HeapAlloc(GetProcessHeap(), 0, *size); - return info; -} - -static void test_SetupGetInfInformation(void) -{ - PSP_INF_INFORMATION info; - CHAR inf_filename[MAX_PATH]; - CHAR inf_one[MAX_PATH], inf_two[MAX_PATH]; - DWORD size; - HINF hinf; - BOOL ret; - - lstrcpyA(inf_filename, CURR_DIR); - lstrcatA(inf_filename, "\\"); - lstrcatA(inf_filename, "test.inf"); - - /* try an invalid inf handle */ - size = 0xdeadbeef; - SetLastError(0xbeefcafe); - ret = SetupGetInfInformationA(NULL, INFINFO_INF_SPEC_IS_HINF, NULL, 0, &size); - ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - ok(size == 0xdeadbeef, "Expected size to remain unchanged\n"); - - /* try an invalid inf filename */ - size = 0xdeadbeef; - SetLastError(0xbeefcafe); - ret = SetupGetInfInformationA(NULL, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size); - ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - ok(size == 0xdeadbeef, "Expected size to remain unchanged\n"); - - create_inf_file(inf_filename); - - /* try an invalid search flag */ - size = 0xdeadbeef; - SetLastError(0xbeefcafe); - ret = SetupGetInfInformationA(inf_filename, -1, NULL, 0, &size); - ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - ok(size == 0xdeadbeef, "Expected size to remain unchanged\n"); - - /* try a nonexistent inf file */ - size = 0xdeadbeef; - SetLastError(0xbeefcafe); - ret = SetupGetInfInformationA("idontexist", INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size); - ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - ok(size == 0xdeadbeef, "Expected size to remain unchanged\n"); - - /* successfully open the inf file */ - size = 0xdeadbeef; - ret = SetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size); - ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n"); - ok(size != 0xdeadbeef, "Expected a valid size on return\n"); - - /* set ReturnBuffer to NULL and ReturnBufferSize to non-zero value 'size' */ - SetLastError(0xbeefcafe); - ret = SetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, size, &size); - ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, - "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); - - /* set ReturnBuffer to NULL and ReturnBufferSize to non-zero value 'size-1' */ - ret = SetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, size-1, &size); - ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n"); - - /* some tests for behaviour with a NULL RequiredSize pointer */ - ret = SetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, NULL); - ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n"); - ret = SetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, size - 1, NULL); - ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n"); - ret = SetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, size, NULL); - ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n"); - - info = HeapAlloc(GetProcessHeap(), 0, size); - - /* try valid ReturnBuffer but too small size */ - SetLastError(0xbeefcafe); - ret = SetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, info, size - 1, &size); - ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n"); - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, - "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); - - /* successfully get the inf information */ - ret = SetupGetInfInformationA(inf_filename, INFINFO_INF_NAME_IS_ABSOLUTE, info, size, &size); - ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n"); - ok(check_info_filename(info, inf_filename), "Expected returned filename to be equal\n"); - - HeapFree(GetProcessHeap(), 0, info); - - /* try the INFINFO_INF_SPEC_IS_HINF search flag */ - hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); - info = alloc_inf_info(hinf, INFINFO_INF_SPEC_IS_HINF, &size); - ret = SetupGetInfInformationA(hinf, INFINFO_INF_SPEC_IS_HINF, info, size, &size); - ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n"); - ok(check_info_filename(info, inf_filename), "Expected returned filename to be equal\n"); - SetupCloseInfFile(hinf); - - lstrcpyA(inf_one, WIN_DIR); - lstrcatA(inf_one, "\\inf\\"); - lstrcatA(inf_one, "test.inf"); - create_inf_file(inf_one); - - lstrcpyA(inf_two, WIN_DIR); - lstrcatA(inf_two, "\\system32\\"); - lstrcatA(inf_two, "test.inf"); - create_inf_file(inf_two); - - HeapFree(GetProcessHeap(), 0, info); - info = alloc_inf_info("test.inf", INFINFO_DEFAULT_SEARCH, &size); - - /* test the INFINFO_DEFAULT_SEARCH search flag */ - ret = SetupGetInfInformationA("test.inf", INFINFO_DEFAULT_SEARCH, info, size, &size); - ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n"); - ok(check_info_filename(info, inf_one), "Expected returned filename to be equal\n"); - - HeapFree(GetProcessHeap(), 0, info); - info = alloc_inf_info("test.inf", INFINFO_REVERSE_DEFAULT_SEARCH, &size); - - /* test the INFINFO_REVERSE_DEFAULT_SEARCH search flag */ - ret = SetupGetInfInformationA("test.inf", INFINFO_REVERSE_DEFAULT_SEARCH, info, size, &size); - ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n"); - ok(check_info_filename(info, inf_two), "Expected returned filename to be equal\n"); - - DeleteFileA(inf_filename); - DeleteFileA(inf_one); - DeleteFileA(inf_two); -} - -static void test_SetupGetSourceFileLocation(void) -{ - char buffer[MAX_PATH] = "not empty", inf_filename[MAX_PATH]; - UINT source_id; - DWORD required, error; - HINF hinf; - BOOL ret; - - lstrcpyA(inf_filename, CURR_DIR); - lstrcatA(inf_filename, "\\"); - lstrcatA(inf_filename, "test.inf"); - - create_inf_file(inf_filename); - - hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); - ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); - - required = 0; - source_id = 0; - - ret = SetupGetSourceFileLocationA(hinf, NULL, "lanconf.exe", &source_id, buffer, sizeof(buffer), &required); - ok(ret, "SetupGetSourceFileLocation failed\n"); - - ok(required == 1, "unexpected required size: %d\n", required); - ok(source_id == 2, "unexpected source id: %d\n", source_id); - ok(!lstrcmpA("", buffer), "unexpected result string: %s\n", buffer); - - SetupCloseInfFile(hinf); - DeleteFileA(inf_filename); - - create_inf_file2(inf_filename); - - SetLastError(0xdeadbeef); - hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); - error = GetLastError(); - ok(hinf == INVALID_HANDLE_VALUE, "could open inf file\n"); - ok(error == ERROR_WRONG_INF_STYLE, "got wrong error: %d\n", error); - - hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_OLDNT, NULL); - ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); - - ret = SetupGetSourceFileLocationA(hinf, NULL, "", &source_id, buffer, sizeof(buffer), &required); - ok(!ret, "SetupGetSourceFileLocation succeeded\n"); - - SetupCloseInfFile(hinf); - DeleteFileA(inf_filename); -} - -static void test_SetupGetSourceInfo(void) -{ - char buffer[MAX_PATH], inf_filename[MAX_PATH]; - DWORD required; - HINF hinf; - BOOL ret; - - lstrcpyA(inf_filename, CURR_DIR); - lstrcatA(inf_filename, "\\"); - lstrcatA(inf_filename, "test.inf"); - - create_inf_file(inf_filename); - - hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); - ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); - - required = 0; - - ret = SetupGetSourceInfoA(hinf, 2, SRCINFO_PATH, buffer, sizeof(buffer), &required); - ok(ret, "SetupGetSourceInfoA failed\n"); - - ok(required == 1, "unexpected required size: %d\n", required); - ok(!lstrcmpA("", buffer), "unexpected result string: %s\n", buffer); - - required = 0; - buffer[0] = 0; - - ret = SetupGetSourceInfoA(hinf, 2, SRCINFO_TAGFILE, buffer, sizeof(buffer), &required); - ok(ret, "SetupGetSourceInfoA failed\n"); - - ok(required == 28, "unexpected required size: %d\n", required); - ok(!lstrcmpA("LANCOM\\LANtools\\lanconf.cab", buffer), "unexpected result string: %s\n", buffer); - - required = 0; - buffer[0] = 0; - - ret = SetupGetSourceInfoA(hinf, 2, SRCINFO_DESCRIPTION, buffer, sizeof(buffer), &required); - ok(ret, "SetupGetSourceInfoA failed\n"); - - ok(required == 19, "unexpected required size: %d\n", required); - ok(!lstrcmpA("LANCOM Software CD", buffer), "unexpected result string: %s\n", buffer); - - SetupCloseInfFile(hinf); - DeleteFileA(inf_filename); -} - -static void test_SetupGetTargetPath(void) -{ - char buffer[MAX_PATH], inf_filename[MAX_PATH]; - DWORD required; - HINF hinf; - INFCONTEXT ctx; - BOOL ret; - - lstrcpyA(inf_filename, CURR_DIR); - lstrcatA(inf_filename, "\\"); - lstrcatA(inf_filename, "test.inf"); - - create_inf_file(inf_filename); - - hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL); - ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n"); - - ctx.Inf = hinf; - ctx.CurrentInf = hinf; - ctx.Section = 7; - ctx.Line = 0; - - required = 0; - - ret = SetupGetTargetPathA(hinf, &ctx, NULL, buffer, sizeof(buffer), &required); - ok(ret, "SetupGetTargetPathA failed\n"); - - ok(required == 10, "unexpected required size: %d\n", required); - ok(!lstrcmpiA("C:\\LANCOM", buffer), "unexpected result string: %s\n", buffer); - - SetupCloseInfFile(hinf); - DeleteFileA(inf_filename); -} - -START_TEST(query) -{ - get_directories(); - - test_SetupGetInfInformation(); - test_SetupGetSourceFileLocation(); - test_SetupGetSourceInfo(); - test_SetupGetTargetPath(); -} diff --git a/rostests/winetests/setupapi/setupapi.rbuild b/rostests/winetests/setupapi/setupapi.rbuild deleted file mode 100644 index 11bc062bb00..00000000000 --- a/rostests/winetests/setupapi/setupapi.rbuild +++ /dev/null @@ -1,21 +0,0 @@ - - - - - . - - ntdll - kernel32 - advapi32 - setupapi - user32 - devclass.c - devinst.c - install.c - misc.c - parser.c - query.c - stringtable.c - testlist.c - - diff --git a/rostests/winetests/setupapi/stringtable.c b/rostests/winetests/setupapi/stringtable.c deleted file mode 100644 index 4eca3318553..00000000000 --- a/rostests/winetests/setupapi/stringtable.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Unit test suite for StringTable functions - * - * Copyright 2005 Steven Edwards for ReactOS - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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: - * Add test for StringTableStringFromIdEx - */ - -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winreg.h" -#include "setupapi.h" - -#include "wine/test.h" - -/* Flags for StringTableAddString and StringTableLookUpString */ -#define ST_CASE_SENSITIVE_COMPARE 0x00000001 - -static DWORD (WINAPI *pStringTableAddString)(HSTRING_TABLE, LPWSTR, DWORD); -static VOID (WINAPI *pStringTableDestroy)(HSTRING_TABLE); -static HSTRING_TABLE (WINAPI *pStringTableDuplicate)(HSTRING_TABLE hStringTable); -static HSTRING_TABLE (WINAPI *pStringTableInitialize)(VOID); -static DWORD (WINAPI *pStringTableLookUpString)(HSTRING_TABLE, LPWSTR, DWORD); -static LPWSTR (WINAPI *pStringTableStringFromId)(HSTRING_TABLE, DWORD); -#if 0 -static BOOL (WINAPI *pStringTableStringFromIdEx)(HSTRING_TABLE, DWORD, LPWSTR, LPDWORD); -static VOID (WINAPI *pStringTableTrim)(HSTRING_TABLE); -#endif - -HMODULE hdll; -static WCHAR string[] = {'s','t','r','i','n','g',0}; -static WCHAR String[] = {'S','t','r','i','n','g',0}; -static WCHAR foo[] = {'f','o','o',0}; -DWORD hstring, hString, hfoo; /* Handles pointing to our strings */ -HANDLE table, table2; /* Handles pointing to our tables */ - -static void load_it_up(void) -{ - hdll = GetModuleHandleA("setupapi.dll"); - - pStringTableInitialize = (void*)GetProcAddress(hdll, "StringTableInitialize"); - if (!pStringTableInitialize) - pStringTableInitialize = (void*)GetProcAddress(hdll, "pSetupStringTableInitialize"); - - pStringTableAddString = (void*)GetProcAddress(hdll, "StringTableAddString"); - if (!pStringTableAddString) - pStringTableAddString = (void*)GetProcAddress(hdll, "pSetupStringTableAddString"); - - pStringTableDuplicate = (void*)GetProcAddress(hdll, "StringTableDuplicate"); - if (!pStringTableDuplicate) - pStringTableDuplicate = (void*)GetProcAddress(hdll, "pSetupStringTableDuplicate"); - - pStringTableDestroy = (void*)GetProcAddress(hdll, "StringTableDestroy"); - if (!pStringTableDestroy) - pStringTableDestroy = (void*)GetProcAddress(hdll, "pSetupStringTableDestroy"); - - pStringTableLookUpString = (void*)GetProcAddress(hdll, "StringTableLookUpString"); - if (!pStringTableLookUpString) - pStringTableLookUpString = (void*)GetProcAddress(hdll, "pSetupStringTableLookUpString"); - - pStringTableStringFromId = (void*)GetProcAddress(hdll, "StringTableStringFromId"); - if (!pStringTableStringFromId) - pStringTableStringFromId = (void*)GetProcAddress(hdll, "pSetupStringTableStringFromId"); -} - -static void test_StringTableInitialize(void) -{ - table=pStringTableInitialize(); - ok(table!=NULL,"Failed to Initialize String Table\n"); -} - -static void test_StringTableAddString(void) -{ - DWORD retval; - - /* case insensitive */ - hstring=pStringTableAddString(table,string,0); - ok(hstring!=-1,"Failed to add string to String Table\n"); - - retval=pStringTableAddString(table,String,0); - ok(retval!=-1,"Failed to add String to String Table\n"); - ok(hstring==retval,"string handle %x != String handle %x in String Table\n", hstring, retval); - - hfoo=pStringTableAddString(table,foo,0); - ok(hfoo!=-1,"Failed to add foo to String Table\n"); - ok(hfoo!=hstring,"foo and string share the same ID %x in String Table\n", hfoo); - - /* case sensitive */ - hString=pStringTableAddString(table,String,ST_CASE_SENSITIVE_COMPARE); - ok(hstring!=hString,"String handle and string share same ID %x in Table\n", hstring); -} - -static void test_StringTableDuplicate(void) -{ - table2=pStringTableDuplicate(table); - ok(table2!=NULL,"Failed to duplicate String Table\n"); -} - -static void test_StringTableLookUpString(void) -{ - DWORD retval, retval2; - - /* case insensitive */ - retval=pStringTableLookUpString(table,string,0); - ok(retval!=-1,"Failed find string in String Table 1\n"); - ok(retval==hstring, - "Lookup for string (%x) does not match previous handle (%x) in String Table 1\n", - retval, hstring); - - retval=pStringTableLookUpString(table2,string,0); - ok(retval!=-1,"Failed find string in String Table 2\n"); - - retval=pStringTableLookUpString(table,String,0); - ok(retval!=-1,"Failed find String in String Table 1\n"); - - retval=pStringTableLookUpString(table2,String,0); - ok(retval!=-1,"Failed find String in String Table 2\n"); - - retval=pStringTableLookUpString(table,foo,0); - ok(retval!=-1,"Failed find foo in String Table 1\n"); - ok(retval==hfoo, - "Lookup for foo (%x) does not match previous handle (%x) in String Table 1\n", - retval, hfoo); - - retval=pStringTableLookUpString(table2,foo,0); - ok(retval!=-1,"Failed find foo in String Table 2\n"); - - /* case sensitive */ - retval=pStringTableLookUpString(table,string,ST_CASE_SENSITIVE_COMPARE); - retval2=pStringTableLookUpString(table,String,ST_CASE_SENSITIVE_COMPARE); - ok(retval!=retval2,"Lookup of string equals String in Table 1\n"); - ok(retval2==hString, - "Lookup for String (%x) does not match previous handle (%x) in String Table 1\n", - retval, hString); -} - -static void test_StringTableStringFromId(void) -{ - WCHAR *string2, *string3; - int result; - - /* correct */ - string2=pStringTableStringFromId(table,pStringTableLookUpString(table,string,0)); - ok(string2!=NULL,"Failed to look up string by ID from String Table\n"); - - result=lstrcmpiW(string, string2); - ok(result==0,"StringID %p does not match requested StringID %p\n",string,string2); - - /* This should never work */ - string3=pStringTableStringFromId(table,0); - ok(string3!=NULL,"Failed to look up string by ID from String Table\n"); - - result=lstrcmpiW(string, string3); - ok(result!=0,"StringID %p matches requested StringID %p\n",string,string3); -} - -START_TEST(stringtable) -{ - load_it_up(); - - test_StringTableInitialize(); - test_StringTableAddString(); - test_StringTableDuplicate(); - test_StringTableLookUpString(); - test_StringTableStringFromId(); - - /* assume we can always destroy */ - pStringTableDestroy(table); - pStringTableDestroy(table2); -} diff --git a/rostests/winetests/setupapi/testlist.c b/rostests/winetests/setupapi/testlist.c deleted file mode 100644 index ae1785c428e..00000000000 --- a/rostests/winetests/setupapi/testlist.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_devclass(void); -extern void func_devinst(void); -extern void func_install(void); -extern void func_misc(void); -extern void func_parser(void); -extern void func_query(void); -extern void func_stringtable(void); - -const struct test winetest_testlist[] = -{ - { "devclass", func_devclass }, - { "devinst", func_devinst }, - { "install", func_install }, - { "misc", func_misc }, - { "parser", func_parser }, - { "query", func_query }, - { "stringtable", func_stringtable }, - { 0, 0 } -}; diff --git a/rostests/winetests/shell32/generated.c b/rostests/winetests/shell32/generated.c deleted file mode 100755 index 7e8d2811cd6..00000000000 --- a/rostests/winetests/shell32/generated.c +++ /dev/null @@ -1,1389 +0,0 @@ -/* File generated automatically from tools/winapi/test.dat; do not edit! */ -/* This file can be copied, modified and distributed without restriction. */ - -/* - * Unit tests for data structure packing - */ - -#define WINVER 0x0501 -#define _WIN32_IE 0x0501 -#define _WIN32_WINNT 0x0501 - -#define WINE_NOWINSOCK - -#include -#include "windef.h" -#include "winbase.h" -#include "wtypes.h" -#include "shellapi.h" -#include "winuser.h" -#include "wingdi.h" -#include "shlobj.h" - -#include "wine/test.h" - -/*********************************************************************** - * Compatibility macros - */ - -#define DWORD_PTR UINT_PTR -#define LONG_PTR INT_PTR -#define ULONG_PTR UINT_PTR - -/*********************************************************************** - * Windows API extension - */ - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field) -#elif defined(__GNUC__) -# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field) -#else -/* FIXME: Not sure if is possible to do without compiler extension */ -#endif - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define _TYPE_ALIGNMENT(type) __alignof(type) -#elif defined(__GNUC__) -# define _TYPE_ALIGNMENT(type) __alignof__(type) -#else -/* - * FIXME: Not sure if is possible to do without compiler extension - * (if type is not just a name that is, if so the normal) - * TYPE_ALIGNMENT can be used) - */ -#endif - -#if defined(TYPE_ALIGNMENT) && defined(_MSC_VER) && _MSC_VER >= 800 && !defined(__cplusplus) -#pragma warning(disable:4116) -#endif - -#if !defined(TYPE_ALIGNMENT) && defined(_TYPE_ALIGNMENT) -# define TYPE_ALIGNMENT _TYPE_ALIGNMENT -#endif - -/*********************************************************************** - * Test helper macros - */ - -#ifdef FIELD_ALIGNMENT -# define TEST_FIELD_ALIGNMENT(type, field, align) \ - ok(FIELD_ALIGNMENT(type, field) == align, \ - "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \ - (int)FIELD_ALIGNMENT(type, field)) -#else -# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0) -#endif - -#define TEST_FIELD_OFFSET(type, field, offset) \ - ok(FIELD_OFFSET(type, field) == offset, \ - "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \ - (long int)FIELD_OFFSET(type, field)) - -#ifdef _TYPE_ALIGNMENT -#define TEST__TYPE_ALIGNMENT(type, align) \ - ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type)) -#else -# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#ifdef TYPE_ALIGNMENT -#define TEST_TYPE_ALIGNMENT(type, align) \ - ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type)) -#else -# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#define TEST_TYPE_SIZE(type, size) \ - ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type))) - -/*********************************************************************** - * Test macros - */ - -#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \ - TEST_TYPE_SIZE(field_type, field_size); \ - TEST_FIELD_ALIGNMENT(type, field_name, field_align); \ - TEST_FIELD_OFFSET(type, field_name, field_offset); \ - -#define TEST_TYPE(type, size, align) \ - TEST_TYPE_ALIGNMENT(type, align); \ - TEST_TYPE_SIZE(type, size) - -#define TEST_TYPE_POINTER(type, size, align) \ - TEST__TYPE_ALIGNMENT(*(type)0, align); \ - TEST_TYPE_SIZE(*(type)0, size) - -#define TEST_TYPE_SIGNED(type) \ - ok((type) -1 < 0, "(" #type ") -1 < 0\n"); - -#define TEST_TYPE_UNSIGNED(type) \ - ok((type) -1 > 0, "(" #type ") -1 > 0\n"); - -static void test_pack_BLOB(void) -{ - /* BLOB (pack 4) */ - TEST_TYPE(BLOB, 8, 4); - TEST_FIELD(BLOB, ULONG, cbSize, 0, 4, 4); - TEST_FIELD(BLOB, BYTE *, pBlobData, 4, 4, 4); -} - -static void test_pack_BSTR(void) -{ - /* BSTR */ - TEST_TYPE(BSTR, 4, 4); - TEST_TYPE_POINTER(BSTR, 2, 2); -} - -static void test_pack_BSTRBLOB(void) -{ - /* BSTRBLOB (pack 4) */ - TEST_TYPE(BSTRBLOB, 8, 4); - TEST_FIELD(BSTRBLOB, ULONG, cbSize, 0, 4, 4); - TEST_FIELD(BSTRBLOB, BYTE *, pData, 4, 4, 4); -} - -static void test_pack_BYTE_BLOB(void) -{ - /* BYTE_BLOB (pack 4) */ - TEST_TYPE(BYTE_BLOB, 8, 4); - TEST_FIELD(BYTE_BLOB, unsigned long, clSize, 0, 4, 4); - TEST_FIELD(BYTE_BLOB, byte[1], abData, 4, 1, 1); -} - -static void test_pack_BYTE_SIZEDARR(void) -{ - /* BYTE_SIZEDARR (pack 4) */ - TEST_TYPE(BYTE_SIZEDARR, 8, 4); - TEST_FIELD(BYTE_SIZEDARR, unsigned long, clSize, 0, 4, 4); - TEST_FIELD(BYTE_SIZEDARR, byte *, pData, 4, 4, 4); -} - -static void test_pack_CLIPDATA(void) -{ - /* CLIPDATA (pack 4) */ - TEST_TYPE(CLIPDATA, 12, 4); - TEST_FIELD(CLIPDATA, ULONG, cbSize, 0, 4, 4); - TEST_FIELD(CLIPDATA, long, ulClipFmt, 4, 4, 4); - TEST_FIELD(CLIPDATA, BYTE *, pClipData, 8, 4, 4); -} - -static void test_pack_CLIPFORMAT(void) -{ - /* CLIPFORMAT */ - TEST_TYPE(CLIPFORMAT, 2, 2); - TEST_TYPE_UNSIGNED(CLIPFORMAT); -} - -static void test_pack_COAUTHIDENTITY(void) -{ - /* COAUTHIDENTITY (pack 4) */ - TEST_TYPE(COAUTHIDENTITY, 28, 4); - TEST_FIELD(COAUTHIDENTITY, USHORT *, User, 0, 4, 4); - TEST_FIELD(COAUTHIDENTITY, ULONG, UserLength, 4, 4, 4); - TEST_FIELD(COAUTHIDENTITY, USHORT *, Domain, 8, 4, 4); - TEST_FIELD(COAUTHIDENTITY, ULONG, DomainLength, 12, 4, 4); - TEST_FIELD(COAUTHIDENTITY, USHORT *, Password, 16, 4, 4); - TEST_FIELD(COAUTHIDENTITY, ULONG, PasswordLength, 20, 4, 4); - TEST_FIELD(COAUTHIDENTITY, ULONG, Flags, 24, 4, 4); -} - -static void test_pack_COAUTHINFO(void) -{ - /* COAUTHINFO (pack 4) */ - TEST_TYPE(COAUTHINFO, 28, 4); - TEST_FIELD(COAUTHINFO, DWORD, dwAuthnSvc, 0, 4, 4); - TEST_FIELD(COAUTHINFO, DWORD, dwAuthzSvc, 4, 4, 4); - TEST_FIELD(COAUTHINFO, LPWSTR, pwszServerPrincName, 8, 4, 4); - TEST_FIELD(COAUTHINFO, DWORD, dwAuthnLevel, 12, 4, 4); - TEST_FIELD(COAUTHINFO, DWORD, dwImpersonationLevel, 16, 4, 4); - TEST_FIELD(COAUTHINFO, COAUTHIDENTITY *, pAuthIdentityData, 20, 4, 4); - TEST_FIELD(COAUTHINFO, DWORD, dwCapabilities, 24, 4, 4); -} - -static void test_pack_DATE(void) -{ - /* DATE */ - TEST_TYPE(DATE, 8, 8); -} - -static void test_pack_DOUBLE(void) -{ - /* DOUBLE */ - TEST_TYPE(DOUBLE, 8, 8); -} - -static void test_pack_DWORD_SIZEDARR(void) -{ - /* DWORD_SIZEDARR (pack 4) */ - TEST_TYPE(DWORD_SIZEDARR, 8, 4); - TEST_FIELD(DWORD_SIZEDARR, unsigned long, clSize, 0, 4, 4); - TEST_FIELD(DWORD_SIZEDARR, unsigned long *, pData, 4, 4, 4); -} - -static void test_pack_FLAGGED_BYTE_BLOB(void) -{ - /* FLAGGED_BYTE_BLOB (pack 4) */ - TEST_TYPE(FLAGGED_BYTE_BLOB, 12, 4); - TEST_FIELD(FLAGGED_BYTE_BLOB, unsigned long, fFlags, 0, 4, 4); - TEST_FIELD(FLAGGED_BYTE_BLOB, unsigned long, clSize, 4, 4, 4); - TEST_FIELD(FLAGGED_BYTE_BLOB, byte[1], abData, 8, 1, 1); -} - -static void test_pack_FLAGGED_WORD_BLOB(void) -{ - /* FLAGGED_WORD_BLOB (pack 4) */ - TEST_TYPE(FLAGGED_WORD_BLOB, 12, 4); - TEST_FIELD(FLAGGED_WORD_BLOB, unsigned long, fFlags, 0, 4, 4); - TEST_FIELD(FLAGGED_WORD_BLOB, unsigned long, clSize, 4, 4, 4); - TEST_FIELD(FLAGGED_WORD_BLOB, unsigned short[1], asData, 8, 2, 2); -} - -static void test_pack_HMETAFILEPICT(void) -{ - /* HMETAFILEPICT */ - TEST_TYPE(HMETAFILEPICT, 4, 4); -} - -static void test_pack_HYPER_SIZEDARR(void) -{ - /* HYPER_SIZEDARR (pack 4) */ - TEST_TYPE(HYPER_SIZEDARR, 8, 4); - TEST_FIELD(HYPER_SIZEDARR, unsigned long, clSize, 0, 4, 4); - TEST_FIELD(HYPER_SIZEDARR, hyper *, pData, 4, 4, 4); -} - -static void test_pack_LPBLOB(void) -{ - /* LPBLOB */ - TEST_TYPE(LPBLOB, 4, 4); -} - -static void test_pack_LPBSTR(void) -{ - /* LPBSTR */ - TEST_TYPE(LPBSTR, 4, 4); - TEST_TYPE_POINTER(LPBSTR, 4, 4); -} - -static void test_pack_LPBSTRBLOB(void) -{ - /* LPBSTRBLOB */ - TEST_TYPE(LPBSTRBLOB, 4, 4); -} - -static void test_pack_LPCOLESTR(void) -{ - /* LPCOLESTR */ - TEST_TYPE(LPCOLESTR, 4, 4); - TEST_TYPE_POINTER(LPCOLESTR, 2, 2); -} - -static void test_pack_LPCY(void) -{ - /* LPCY */ - TEST_TYPE(LPCY, 4, 4); -} - -static void test_pack_LPDECIMAL(void) -{ - /* LPDECIMAL */ - TEST_TYPE(LPDECIMAL, 4, 4); -} - -static void test_pack_LPOLESTR(void) -{ - /* LPOLESTR */ - TEST_TYPE(LPOLESTR, 4, 4); - TEST_TYPE_POINTER(LPOLESTR, 2, 2); -} - -static void test_pack_OLECHAR(void) -{ - /* OLECHAR */ - TEST_TYPE(OLECHAR, 2, 2); -} - -static void test_pack_PROPID(void) -{ - /* PROPID */ - TEST_TYPE(PROPID, 4, 4); -} - -static void test_pack_RemHBITMAP(void) -{ - /* RemHBITMAP (pack 4) */ - TEST_TYPE(RemHBITMAP, 8, 4); - TEST_FIELD(RemHBITMAP, unsigned long, cbData, 0, 4, 4); - TEST_FIELD(RemHBITMAP, byte[1], data, 4, 1, 1); -} - -static void test_pack_RemHENHMETAFILE(void) -{ - /* RemHENHMETAFILE (pack 4) */ - TEST_TYPE(RemHENHMETAFILE, 8, 4); - TEST_FIELD(RemHENHMETAFILE, unsigned long, cbData, 0, 4, 4); - TEST_FIELD(RemHENHMETAFILE, byte[1], data, 4, 1, 1); -} - -static void test_pack_RemHGLOBAL(void) -{ - /* RemHGLOBAL (pack 4) */ - TEST_TYPE(RemHGLOBAL, 12, 4); - TEST_FIELD(RemHGLOBAL, long, fNullHGlobal, 0, 4, 4); - TEST_FIELD(RemHGLOBAL, unsigned long, cbData, 4, 4, 4); - TEST_FIELD(RemHGLOBAL, byte[1], data, 8, 1, 1); -} - -static void test_pack_RemHMETAFILEPICT(void) -{ - /* RemHMETAFILEPICT (pack 4) */ - TEST_TYPE(RemHMETAFILEPICT, 20, 4); - TEST_FIELD(RemHMETAFILEPICT, long, mm, 0, 4, 4); - TEST_FIELD(RemHMETAFILEPICT, long, xExt, 4, 4, 4); - TEST_FIELD(RemHMETAFILEPICT, long, yExt, 8, 4, 4); - TEST_FIELD(RemHMETAFILEPICT, unsigned long, cbData, 12, 4, 4); - TEST_FIELD(RemHMETAFILEPICT, byte[1], data, 16, 1, 1); -} - -static void test_pack_RemHPALETTE(void) -{ - /* RemHPALETTE (pack 4) */ - TEST_TYPE(RemHPALETTE, 8, 4); - TEST_FIELD(RemHPALETTE, unsigned long, cbData, 0, 4, 4); - TEST_FIELD(RemHPALETTE, byte[1], data, 4, 1, 1); -} - -static void test_pack_SCODE(void) -{ - /* SCODE */ - TEST_TYPE(SCODE, 4, 4); -} - -static void test_pack_UP_BYTE_BLOB(void) -{ - /* UP_BYTE_BLOB */ - TEST_TYPE(UP_BYTE_BLOB, 4, 4); - TEST_TYPE_POINTER(UP_BYTE_BLOB, 8, 4); -} - -static void test_pack_UP_FLAGGED_BYTE_BLOB(void) -{ - /* UP_FLAGGED_BYTE_BLOB */ - TEST_TYPE(UP_FLAGGED_BYTE_BLOB, 4, 4); - TEST_TYPE_POINTER(UP_FLAGGED_BYTE_BLOB, 12, 4); -} - -static void test_pack_UP_FLAGGED_WORD_BLOB(void) -{ - /* UP_FLAGGED_WORD_BLOB */ - TEST_TYPE(UP_FLAGGED_WORD_BLOB, 4, 4); - TEST_TYPE_POINTER(UP_FLAGGED_WORD_BLOB, 12, 4); -} - -static void test_pack_VARIANT_BOOL(void) -{ - /* VARIANT_BOOL */ - TEST_TYPE(VARIANT_BOOL, 2, 2); - TEST_TYPE_SIGNED(VARIANT_BOOL); -} - -static void test_pack_VARTYPE(void) -{ - /* VARTYPE */ - TEST_TYPE(VARTYPE, 2, 2); - TEST_TYPE_UNSIGNED(VARTYPE); -} - -static void test_pack_WORD_SIZEDARR(void) -{ - /* WORD_SIZEDARR (pack 4) */ - TEST_TYPE(WORD_SIZEDARR, 8, 4); - TEST_FIELD(WORD_SIZEDARR, unsigned long, clSize, 0, 4, 4); - TEST_FIELD(WORD_SIZEDARR, unsigned short *, pData, 4, 4, 4); -} - -static void test_pack_remoteMETAFILEPICT(void) -{ - /* remoteMETAFILEPICT (pack 4) */ - TEST_TYPE(remoteMETAFILEPICT, 16, 4); - TEST_FIELD(remoteMETAFILEPICT, long, mm, 0, 4, 4); - TEST_FIELD(remoteMETAFILEPICT, long, xExt, 4, 4, 4); - TEST_FIELD(remoteMETAFILEPICT, long, yExt, 8, 4, 4); - TEST_FIELD(remoteMETAFILEPICT, userHMETAFILE *, hMF, 12, 4, 4); -} - -static void test_pack_userBITMAP(void) -{ - /* userBITMAP (pack 4) */ - TEST_TYPE(userBITMAP, 28, 4); - TEST_FIELD(userBITMAP, LONG, bmType, 0, 4, 4); - TEST_FIELD(userBITMAP, LONG, bmWidth, 4, 4, 4); - TEST_FIELD(userBITMAP, LONG, bmHeight, 8, 4, 4); - TEST_FIELD(userBITMAP, LONG, bmWidthBytes, 12, 4, 4); - TEST_FIELD(userBITMAP, WORD, bmPlanes, 16, 2, 2); - TEST_FIELD(userBITMAP, WORD, bmBitsPixel, 18, 2, 2); - TEST_FIELD(userBITMAP, ULONG, cbSize, 20, 4, 4); - TEST_FIELD(userBITMAP, byte[1], pBuffer, 24, 1, 1); -} - -static void test_pack_userCLIPFORMAT(void) -{ - /* userCLIPFORMAT (pack 4) */ - TEST_FIELD(userCLIPFORMAT, long, fContext, 0, 4, 4); -} - -static void test_pack_userHBITMAP(void) -{ - /* userHBITMAP (pack 4) */ - TEST_FIELD(userHBITMAP, long, fContext, 0, 4, 4); -} - -static void test_pack_userHENHMETAFILE(void) -{ - /* userHENHMETAFILE (pack 4) */ - TEST_FIELD(userHENHMETAFILE, long, fContext, 0, 4, 4); -} - -static void test_pack_userHGLOBAL(void) -{ - /* userHGLOBAL (pack 4) */ - TEST_FIELD(userHGLOBAL, long, fContext, 0, 4, 4); -} - -static void test_pack_userHMETAFILE(void) -{ - /* userHMETAFILE (pack 4) */ - TEST_FIELD(userHMETAFILE, long, fContext, 0, 4, 4); -} - -static void test_pack_userHMETAFILEPICT(void) -{ - /* userHMETAFILEPICT (pack 4) */ - TEST_FIELD(userHMETAFILEPICT, long, fContext, 0, 4, 4); -} - -static void test_pack_userHPALETTE(void) -{ - /* userHPALETTE (pack 4) */ - TEST_FIELD(userHPALETTE, long, fContext, 0, 4, 4); -} - -static void test_pack_wireBSTR(void) -{ - /* wireBSTR */ - TEST_TYPE(wireBSTR, 4, 4); - TEST_TYPE_POINTER(wireBSTR, 12, 4); -} - -static void test_pack_wireCLIPFORMAT(void) -{ - /* wireCLIPFORMAT */ - TEST_TYPE(wireCLIPFORMAT, 4, 4); -} - -static void test_pack_wireHBITMAP(void) -{ - /* wireHBITMAP */ - TEST_TYPE(wireHBITMAP, 4, 4); -} - -static void test_pack_wireHENHMETAFILE(void) -{ - /* wireHENHMETAFILE */ - TEST_TYPE(wireHENHMETAFILE, 4, 4); -} - -static void test_pack_wireHGLOBAL(void) -{ - /* wireHGLOBAL */ - TEST_TYPE(wireHGLOBAL, 4, 4); -} - -static void test_pack_wireHMETAFILE(void) -{ - /* wireHMETAFILE */ - TEST_TYPE(wireHMETAFILE, 4, 4); -} - -static void test_pack_wireHMETAFILEPICT(void) -{ - /* wireHMETAFILEPICT */ - TEST_TYPE(wireHMETAFILEPICT, 4, 4); -} - -static void test_pack_wireHPALETTE(void) -{ - /* wireHPALETTE */ - TEST_TYPE(wireHPALETTE, 4, 4); -} - -static void test_pack_CLSID(void) -{ - /* CLSID */ - TEST_TYPE(CLSID, 16, 4); -} - -static void test_pack_FMTID(void) -{ - /* FMTID */ - TEST_TYPE(FMTID, 16, 4); -} - -static void test_pack_GUID(void) -{ - /* GUID (pack 4) */ - TEST_TYPE(GUID, 16, 4); - TEST_FIELD(GUID, unsigned long, Data1, 0, 4, 4); - TEST_FIELD(GUID, unsigned short, Data2, 4, 2, 2); - TEST_FIELD(GUID, unsigned short, Data3, 6, 2, 2); - TEST_FIELD(GUID, unsigned char[ 8 ], Data4, 8, 8, 1); -} - -static void test_pack_IID(void) -{ - /* IID */ - TEST_TYPE(IID, 16, 4); -} - -static void test_pack_LPGUID(void) -{ - /* LPGUID */ - TEST_TYPE(LPGUID, 4, 4); - TEST_TYPE_POINTER(LPGUID, 16, 4); -} - -static void test_pack_APPBARDATA(void) -{ - /* APPBARDATA (pack 1) */ - TEST_TYPE(APPBARDATA, 36, 1); - TEST_FIELD(APPBARDATA, DWORD, cbSize, 0, 4, 1); - TEST_FIELD(APPBARDATA, HWND, hWnd, 4, 4, 1); - TEST_FIELD(APPBARDATA, UINT, uCallbackMessage, 8, 4, 1); - TEST_FIELD(APPBARDATA, UINT, uEdge, 12, 4, 1); - TEST_FIELD(APPBARDATA, RECT, rc, 16, 16, 1); - TEST_FIELD(APPBARDATA, LPARAM, lParam, 32, 4, 1); -} - -static void test_pack_DRAGINFOA(void) -{ - /* DRAGINFOA (pack 1) */ - TEST_TYPE(DRAGINFOA, 24, 1); - TEST_FIELD(DRAGINFOA, UINT, uSize, 0, 4, 1); - TEST_FIELD(DRAGINFOA, POINT, pt, 4, 8, 1); - TEST_FIELD(DRAGINFOA, BOOL, fNC, 12, 4, 1); - TEST_FIELD(DRAGINFOA, LPSTR, lpFileList, 16, 4, 1); - TEST_FIELD(DRAGINFOA, DWORD, grfKeyState, 20, 4, 1); -} - -static void test_pack_DRAGINFOW(void) -{ - /* DRAGINFOW (pack 1) */ - TEST_TYPE(DRAGINFOW, 24, 1); - TEST_FIELD(DRAGINFOW, UINT, uSize, 0, 4, 1); - TEST_FIELD(DRAGINFOW, POINT, pt, 4, 8, 1); - TEST_FIELD(DRAGINFOW, BOOL, fNC, 12, 4, 1); - TEST_FIELD(DRAGINFOW, LPWSTR, lpFileList, 16, 4, 1); - TEST_FIELD(DRAGINFOW, DWORD, grfKeyState, 20, 4, 1); -} - -static void test_pack_FILEOP_FLAGS(void) -{ - /* FILEOP_FLAGS */ - TEST_TYPE(FILEOP_FLAGS, 2, 2); - TEST_TYPE_UNSIGNED(FILEOP_FLAGS); -} - -static void test_pack_LPDRAGINFOA(void) -{ - /* LPDRAGINFOA */ - TEST_TYPE(LPDRAGINFOA, 4, 4); - TEST_TYPE_POINTER(LPDRAGINFOA, 24, 1); -} - -static void test_pack_LPDRAGINFOW(void) -{ - /* LPDRAGINFOW */ - TEST_TYPE(LPDRAGINFOW, 4, 4); - TEST_TYPE_POINTER(LPDRAGINFOW, 24, 1); -} - -static void test_pack_LPSHELLEXECUTEINFOA(void) -{ - /* LPSHELLEXECUTEINFOA */ - TEST_TYPE(LPSHELLEXECUTEINFOA, 4, 4); -} - -static void test_pack_LPSHELLEXECUTEINFOW(void) -{ - /* LPSHELLEXECUTEINFOW */ - TEST_TYPE(LPSHELLEXECUTEINFOW, 4, 4); -} - -static void test_pack_LPSHFILEOPSTRUCTA(void) -{ - /* LPSHFILEOPSTRUCTA */ - TEST_TYPE(LPSHFILEOPSTRUCTA, 4, 4); - TEST_TYPE_POINTER(LPSHFILEOPSTRUCTA, 30, 1); -} - -static void test_pack_LPSHFILEOPSTRUCTW(void) -{ - /* LPSHFILEOPSTRUCTW */ - TEST_TYPE(LPSHFILEOPSTRUCTW, 4, 4); - TEST_TYPE_POINTER(LPSHFILEOPSTRUCTW, 30, 1); -} - -static void test_pack_LPSHNAMEMAPPINGA(void) -{ - /* LPSHNAMEMAPPINGA */ - TEST_TYPE(LPSHNAMEMAPPINGA, 4, 4); - TEST_TYPE_POINTER(LPSHNAMEMAPPINGA, 16, 1); -} - -static void test_pack_LPSHNAMEMAPPINGW(void) -{ - /* LPSHNAMEMAPPINGW */ - TEST_TYPE(LPSHNAMEMAPPINGW, 4, 4); - TEST_TYPE_POINTER(LPSHNAMEMAPPINGW, 16, 1); -} - -static void test_pack_NOTIFYICONDATAA(void) -{ - /* NOTIFYICONDATAA (pack 1) */ - TEST_FIELD(NOTIFYICONDATAA, DWORD, cbSize, 0, 4, 1); - TEST_FIELD(NOTIFYICONDATAA, HWND, hWnd, 4, 4, 1); - TEST_FIELD(NOTIFYICONDATAA, UINT, uID, 8, 4, 1); - TEST_FIELD(NOTIFYICONDATAA, UINT, uFlags, 12, 4, 1); - TEST_FIELD(NOTIFYICONDATAA, UINT, uCallbackMessage, 16, 4, 1); - TEST_FIELD(NOTIFYICONDATAA, HICON, hIcon, 20, 4, 1); - TEST_FIELD(NOTIFYICONDATAA, CHAR[128], szTip, 24, 128, 1); - TEST_FIELD(NOTIFYICONDATAA, DWORD, dwState, 152, 4, 1); - TEST_FIELD(NOTIFYICONDATAA, DWORD, dwStateMask, 156, 4, 1); - TEST_FIELD(NOTIFYICONDATAA, CHAR[256], szInfo, 160, 256, 1); -} - -static void test_pack_NOTIFYICONDATAW(void) -{ - /* NOTIFYICONDATAW (pack 1) */ - TEST_FIELD(NOTIFYICONDATAW, DWORD, cbSize, 0, 4, 1); - TEST_FIELD(NOTIFYICONDATAW, HWND, hWnd, 4, 4, 1); - TEST_FIELD(NOTIFYICONDATAW, UINT, uID, 8, 4, 1); - TEST_FIELD(NOTIFYICONDATAW, UINT, uFlags, 12, 4, 1); - TEST_FIELD(NOTIFYICONDATAW, UINT, uCallbackMessage, 16, 4, 1); - TEST_FIELD(NOTIFYICONDATAW, HICON, hIcon, 20, 4, 1); - TEST_FIELD(NOTIFYICONDATAW, WCHAR[128], szTip, 24, 256, 1); - TEST_FIELD(NOTIFYICONDATAW, DWORD, dwState, 280, 4, 1); - TEST_FIELD(NOTIFYICONDATAW, DWORD, dwStateMask, 284, 4, 1); - TEST_FIELD(NOTIFYICONDATAW, WCHAR[256], szInfo, 288, 512, 1); -} - -static void test_pack_PAPPBARDATA(void) -{ - /* PAPPBARDATA */ - TEST_TYPE(PAPPBARDATA, 4, 4); - TEST_TYPE_POINTER(PAPPBARDATA, 36, 1); -} - -static void test_pack_PNOTIFYICONDATAA(void) -{ - /* PNOTIFYICONDATAA */ - TEST_TYPE(PNOTIFYICONDATAA, 4, 4); -} - -static void test_pack_PNOTIFYICONDATAW(void) -{ - /* PNOTIFYICONDATAW */ - TEST_TYPE(PNOTIFYICONDATAW, 4, 4); -} - -static void test_pack_PRINTEROP_FLAGS(void) -{ - /* PRINTEROP_FLAGS */ - TEST_TYPE(PRINTEROP_FLAGS, 2, 2); - TEST_TYPE_UNSIGNED(PRINTEROP_FLAGS); -} - -static void test_pack_SHELLEXECUTEINFOA(void) -{ - /* SHELLEXECUTEINFOA (pack 1) */ - TEST_FIELD(SHELLEXECUTEINFOA, DWORD, cbSize, 0, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, ULONG, fMask, 4, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, HWND, hwnd, 8, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, LPCSTR, lpVerb, 12, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, LPCSTR, lpFile, 16, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, LPCSTR, lpParameters, 20, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, LPCSTR, lpDirectory, 24, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, INT, nShow, 28, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, HINSTANCE, hInstApp, 32, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, LPVOID, lpIDList, 36, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, LPCSTR, lpClass, 40, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, HKEY, hkeyClass, 44, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOA, DWORD, dwHotKey, 48, 4, 1); -} - -static void test_pack_SHELLEXECUTEINFOW(void) -{ - /* SHELLEXECUTEINFOW (pack 1) */ - TEST_FIELD(SHELLEXECUTEINFOW, DWORD, cbSize, 0, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, ULONG, fMask, 4, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, HWND, hwnd, 8, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, LPCWSTR, lpVerb, 12, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, LPCWSTR, lpFile, 16, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, LPCWSTR, lpParameters, 20, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, LPCWSTR, lpDirectory, 24, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, INT, nShow, 28, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, HINSTANCE, hInstApp, 32, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, LPVOID, lpIDList, 36, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, LPCWSTR, lpClass, 40, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, HKEY, hkeyClass, 44, 4, 1); - TEST_FIELD(SHELLEXECUTEINFOW, DWORD, dwHotKey, 48, 4, 1); -} - -static void test_pack_SHFILEINFOA(void) -{ - /* SHFILEINFOA (pack 1) */ - TEST_TYPE(SHFILEINFOA, 352, 1); - TEST_FIELD(SHFILEINFOA, HICON, hIcon, 0, 4, 1); - TEST_FIELD(SHFILEINFOA, int, iIcon, 4, 4, 1); - TEST_FIELD(SHFILEINFOA, DWORD, dwAttributes, 8, 4, 1); - TEST_FIELD(SHFILEINFOA, CHAR[MAX_PATH], szDisplayName, 12, 260, 1); - TEST_FIELD(SHFILEINFOA, CHAR[80], szTypeName, 272, 80, 1); -} - -static void test_pack_SHFILEINFOW(void) -{ - /* SHFILEINFOW (pack 1) */ - TEST_TYPE(SHFILEINFOW, 692, 1); - TEST_FIELD(SHFILEINFOW, HICON, hIcon, 0, 4, 1); - TEST_FIELD(SHFILEINFOW, int, iIcon, 4, 4, 1); - TEST_FIELD(SHFILEINFOW, DWORD, dwAttributes, 8, 4, 1); - TEST_FIELD(SHFILEINFOW, WCHAR[MAX_PATH], szDisplayName, 12, 520, 1); - TEST_FIELD(SHFILEINFOW, WCHAR[80], szTypeName, 532, 160, 1); -} - -static void test_pack_SHFILEOPSTRUCTA(void) -{ - /* SHFILEOPSTRUCTA (pack 1) */ - TEST_TYPE(SHFILEOPSTRUCTA, 30, 1); - TEST_FIELD(SHFILEOPSTRUCTA, HWND, hwnd, 0, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTA, UINT, wFunc, 4, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTA, LPCSTR, pFrom, 8, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTA, LPCSTR, pTo, 12, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTA, FILEOP_FLAGS, fFlags, 16, 2, 1); - TEST_FIELD(SHFILEOPSTRUCTA, BOOL, fAnyOperationsAborted, 18, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTA, LPVOID, hNameMappings, 22, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTA, LPCSTR, lpszProgressTitle, 26, 4, 1); -} - -static void test_pack_SHFILEOPSTRUCTW(void) -{ - /* SHFILEOPSTRUCTW (pack 1) */ - TEST_TYPE(SHFILEOPSTRUCTW, 30, 1); - TEST_FIELD(SHFILEOPSTRUCTW, HWND, hwnd, 0, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTW, UINT, wFunc, 4, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTW, LPCWSTR, pFrom, 8, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTW, LPCWSTR, pTo, 12, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTW, FILEOP_FLAGS, fFlags, 16, 2, 1); - TEST_FIELD(SHFILEOPSTRUCTW, BOOL, fAnyOperationsAborted, 18, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTW, LPVOID, hNameMappings, 22, 4, 1); - TEST_FIELD(SHFILEOPSTRUCTW, LPCWSTR, lpszProgressTitle, 26, 4, 1); -} - -static void test_pack_SHNAMEMAPPINGA(void) -{ - /* SHNAMEMAPPINGA (pack 1) */ - TEST_TYPE(SHNAMEMAPPINGA, 16, 1); - TEST_FIELD(SHNAMEMAPPINGA, LPSTR, pszOldPath, 0, 4, 1); - TEST_FIELD(SHNAMEMAPPINGA, LPSTR, pszNewPath, 4, 4, 1); - TEST_FIELD(SHNAMEMAPPINGA, int, cchOldPath, 8, 4, 1); - TEST_FIELD(SHNAMEMAPPINGA, int, cchNewPath, 12, 4, 1); -} - -static void test_pack_SHNAMEMAPPINGW(void) -{ - /* SHNAMEMAPPINGW (pack 1) */ - TEST_TYPE(SHNAMEMAPPINGW, 16, 1); - TEST_FIELD(SHNAMEMAPPINGW, LPWSTR, pszOldPath, 0, 4, 1); - TEST_FIELD(SHNAMEMAPPINGW, LPWSTR, pszNewPath, 4, 4, 1); - TEST_FIELD(SHNAMEMAPPINGW, int, cchOldPath, 8, 4, 1); - TEST_FIELD(SHNAMEMAPPINGW, int, cchNewPath, 12, 4, 1); -} - -static void test_pack_ITEMIDLIST(void) -{ - /* ITEMIDLIST (pack 1) */ - TEST_TYPE(ITEMIDLIST, 3, 1); - TEST_FIELD(ITEMIDLIST, SHITEMID, mkid, 0, 3, 1); -} - -static void test_pack_LPCITEMIDLIST(void) -{ - /* LPCITEMIDLIST */ - TEST_TYPE(LPCITEMIDLIST, 4, 4); - TEST_TYPE_POINTER(LPCITEMIDLIST, 3, 1); -} - -static void test_pack_LPCSHITEMID(void) -{ - /* LPCSHITEMID */ - TEST_TYPE(LPCSHITEMID, 4, 4); - TEST_TYPE_POINTER(LPCSHITEMID, 3, 1); -} - -static void test_pack_LPITEMIDLIST(void) -{ - /* LPITEMIDLIST */ - TEST_TYPE(LPITEMIDLIST, 4, 4); -} - -static void test_pack_LPSHELLDETAILS(void) -{ - /* LPSHELLDETAILS */ - TEST_TYPE(LPSHELLDETAILS, 4, 4); -} - -static void test_pack_LPSHITEMID(void) -{ - /* LPSHITEMID */ - TEST_TYPE(LPSHITEMID, 4, 4); -} - -static void test_pack_LPSTRRET(void) -{ - /* LPSTRRET */ - TEST_TYPE(LPSTRRET, 4, 4); -} - -static void test_pack_SHELLDETAILS(void) -{ - /* SHELLDETAILS (pack 1) */ - TEST_FIELD(SHELLDETAILS, int, fmt, 0, 4, 1); - TEST_FIELD(SHELLDETAILS, int, cxChar, 4, 4, 1); -} - -static void test_pack_SHITEMID(void) -{ - /* SHITEMID (pack 1) */ - TEST_TYPE(SHITEMID, 3, 1); - TEST_FIELD(SHITEMID, WORD, cb, 0, 2, 1); - TEST_FIELD(SHITEMID, BYTE[1], abID, 2, 1, 1); -} - -static void test_pack_STRRET(void) -{ - /* STRRET (pack 4) */ - TEST_FIELD(STRRET, UINT, uType, 0, 4, 4); -} - -static void test_pack_AUTO_SCROLL_DATA(void) -{ - /* AUTO_SCROLL_DATA (pack 1) */ - TEST_TYPE(AUTO_SCROLL_DATA, 48, 1); - TEST_FIELD(AUTO_SCROLL_DATA, int, iNextSample, 0, 4, 1); - TEST_FIELD(AUTO_SCROLL_DATA, DWORD, dwLastScroll, 4, 4, 1); - TEST_FIELD(AUTO_SCROLL_DATA, BOOL, bFull, 8, 4, 1); - TEST_FIELD(AUTO_SCROLL_DATA, POINT[NUM_POINTS], pts, 12, 24, 1); - TEST_FIELD(AUTO_SCROLL_DATA, DWORD[NUM_POINTS], dwTimes, 36, 12, 1); -} - -static void test_pack_BFFCALLBACK(void) -{ - /* BFFCALLBACK */ - TEST_TYPE(BFFCALLBACK, 4, 4); -} - -static void test_pack_BROWSEINFOA(void) -{ - /* BROWSEINFOA (pack 8) */ - TEST_TYPE(BROWSEINFOA, 32, 4); - TEST_FIELD(BROWSEINFOA, HWND, hwndOwner, 0, 4, 4); - TEST_FIELD(BROWSEINFOA, LPCITEMIDLIST, pidlRoot, 4, 4, 4); - TEST_FIELD(BROWSEINFOA, LPSTR, pszDisplayName, 8, 4, 4); - TEST_FIELD(BROWSEINFOA, LPCSTR, lpszTitle, 12, 4, 4); - TEST_FIELD(BROWSEINFOA, UINT, ulFlags, 16, 4, 4); - TEST_FIELD(BROWSEINFOA, BFFCALLBACK, lpfn, 20, 4, 4); - TEST_FIELD(BROWSEINFOA, LPARAM, lParam, 24, 4, 4); - TEST_FIELD(BROWSEINFOA, INT, iImage, 28, 4, 4); -} - -static void test_pack_BROWSEINFOW(void) -{ - /* BROWSEINFOW (pack 8) */ - TEST_TYPE(BROWSEINFOW, 32, 4); - TEST_FIELD(BROWSEINFOW, HWND, hwndOwner, 0, 4, 4); - TEST_FIELD(BROWSEINFOW, LPCITEMIDLIST, pidlRoot, 4, 4, 4); - TEST_FIELD(BROWSEINFOW, LPWSTR, pszDisplayName, 8, 4, 4); - TEST_FIELD(BROWSEINFOW, LPCWSTR, lpszTitle, 12, 4, 4); - TEST_FIELD(BROWSEINFOW, UINT, ulFlags, 16, 4, 4); - TEST_FIELD(BROWSEINFOW, BFFCALLBACK, lpfn, 20, 4, 4); - TEST_FIELD(BROWSEINFOW, LPARAM, lParam, 24, 4, 4); - TEST_FIELD(BROWSEINFOW, INT, iImage, 28, 4, 4); -} - -static void test_pack_CABINETSTATE(void) -{ - /* CABINETSTATE (pack 1) */ - TEST_TYPE(CABINETSTATE, 12, 1); - TEST_FIELD(CABINETSTATE, WORD, cLength, 0, 2, 1); - TEST_FIELD(CABINETSTATE, WORD, nVersion, 2, 2, 1); - TEST_FIELD(CABINETSTATE, UINT, fMenuEnumFilter, 8, 4, 1); -} - -static void test_pack_CIDA(void) -{ - /* CIDA (pack 1) */ - TEST_TYPE(CIDA, 8, 1); - TEST_FIELD(CIDA, UINT, cidl, 0, 4, 1); - TEST_FIELD(CIDA, UINT[1], aoffset, 4, 4, 1); -} - -static void test_pack_CSFV(void) -{ - /* CSFV (pack 1) */ - TEST_FIELD(CSFV, UINT, cbSize, 0, 4, 1); - TEST_FIELD(CSFV, IShellFolder*, pshf, 4, 4, 1); - TEST_FIELD(CSFV, IShellView*, psvOuter, 8, 4, 1); - TEST_FIELD(CSFV, LPCITEMIDLIST, pidl, 12, 4, 1); - TEST_FIELD(CSFV, LONG, lEvents, 16, 4, 1); - TEST_FIELD(CSFV, LPFNVIEWCALLBACK, pfnCallback, 20, 4, 1); -} - -static void test_pack_DROPFILES(void) -{ - /* DROPFILES (pack 1) */ - TEST_TYPE(DROPFILES, 20, 1); - TEST_FIELD(DROPFILES, DWORD, pFiles, 0, 4, 1); - TEST_FIELD(DROPFILES, POINT, pt, 4, 8, 1); - TEST_FIELD(DROPFILES, BOOL, fNC, 12, 4, 1); - TEST_FIELD(DROPFILES, BOOL, fWide, 16, 4, 1); -} - -static void test_pack_FILEDESCRIPTORA(void) -{ - /* FILEDESCRIPTORA (pack 1) */ - TEST_TYPE(FILEDESCRIPTORA, 332, 1); - TEST_FIELD(FILEDESCRIPTORA, DWORD, dwFlags, 0, 4, 1); - TEST_FIELD(FILEDESCRIPTORA, CLSID, clsid, 4, 16, 1); - TEST_FIELD(FILEDESCRIPTORA, SIZEL, sizel, 20, 8, 1); - TEST_FIELD(FILEDESCRIPTORA, POINTL, pointl, 28, 8, 1); - TEST_FIELD(FILEDESCRIPTORA, DWORD, dwFileAttributes, 36, 4, 1); - TEST_FIELD(FILEDESCRIPTORA, FILETIME, ftCreationTime, 40, 8, 1); - TEST_FIELD(FILEDESCRIPTORA, FILETIME, ftLastAccessTime, 48, 8, 1); - TEST_FIELD(FILEDESCRIPTORA, FILETIME, ftLastWriteTime, 56, 8, 1); - TEST_FIELD(FILEDESCRIPTORA, DWORD, nFileSizeHigh, 64, 4, 1); - TEST_FIELD(FILEDESCRIPTORA, DWORD, nFileSizeLow, 68, 4, 1); - TEST_FIELD(FILEDESCRIPTORA, CHAR[MAX_PATH], cFileName, 72, 260, 1); -} - -static void test_pack_FILEDESCRIPTORW(void) -{ - /* FILEDESCRIPTORW (pack 1) */ - TEST_TYPE(FILEDESCRIPTORW, 592, 1); - TEST_FIELD(FILEDESCRIPTORW, DWORD, dwFlags, 0, 4, 1); - TEST_FIELD(FILEDESCRIPTORW, CLSID, clsid, 4, 16, 1); - TEST_FIELD(FILEDESCRIPTORW, SIZEL, sizel, 20, 8, 1); - TEST_FIELD(FILEDESCRIPTORW, POINTL, pointl, 28, 8, 1); - TEST_FIELD(FILEDESCRIPTORW, DWORD, dwFileAttributes, 36, 4, 1); - TEST_FIELD(FILEDESCRIPTORW, FILETIME, ftCreationTime, 40, 8, 1); - TEST_FIELD(FILEDESCRIPTORW, FILETIME, ftLastAccessTime, 48, 8, 1); - TEST_FIELD(FILEDESCRIPTORW, FILETIME, ftLastWriteTime, 56, 8, 1); - TEST_FIELD(FILEDESCRIPTORW, DWORD, nFileSizeHigh, 64, 4, 1); - TEST_FIELD(FILEDESCRIPTORW, DWORD, nFileSizeLow, 68, 4, 1); - TEST_FIELD(FILEDESCRIPTORW, WCHAR[MAX_PATH], cFileName, 72, 520, 1); -} - -static void test_pack_FILEGROUPDESCRIPTORA(void) -{ - /* FILEGROUPDESCRIPTORA (pack 1) */ - TEST_TYPE(FILEGROUPDESCRIPTORA, 336, 1); - TEST_FIELD(FILEGROUPDESCRIPTORA, UINT, cItems, 0, 4, 1); - TEST_FIELD(FILEGROUPDESCRIPTORA, FILEDESCRIPTORA[1], fgd, 4, 332, 1); -} - -static void test_pack_FILEGROUPDESCRIPTORW(void) -{ - /* FILEGROUPDESCRIPTORW (pack 1) */ - TEST_TYPE(FILEGROUPDESCRIPTORW, 596, 1); - TEST_FIELD(FILEGROUPDESCRIPTORW, UINT, cItems, 0, 4, 1); - TEST_FIELD(FILEGROUPDESCRIPTORW, FILEDESCRIPTORW[1], fgd, 4, 592, 1); -} - -static void test_pack_LPBROWSEINFOA(void) -{ - /* LPBROWSEINFOA */ - TEST_TYPE(LPBROWSEINFOA, 4, 4); - TEST_TYPE_POINTER(LPBROWSEINFOA, 32, 4); -} - -static void test_pack_LPBROWSEINFOW(void) -{ - /* LPBROWSEINFOW */ - TEST_TYPE(LPBROWSEINFOW, 4, 4); - TEST_TYPE_POINTER(LPBROWSEINFOW, 32, 4); -} - -static void test_pack_LPCABINETSTATE(void) -{ - /* LPCABINETSTATE */ - TEST_TYPE(LPCABINETSTATE, 4, 4); - TEST_TYPE_POINTER(LPCABINETSTATE, 12, 1); -} - -static void test_pack_LPCSFV(void) -{ - /* LPCSFV */ - TEST_TYPE(LPCSFV, 4, 4); -} - -static void test_pack_LPDROPFILES(void) -{ - /* LPDROPFILES */ - TEST_TYPE(LPDROPFILES, 4, 4); - TEST_TYPE_POINTER(LPDROPFILES, 20, 1); -} - -static void test_pack_LPFILEDESCRIPTORA(void) -{ - /* LPFILEDESCRIPTORA */ - TEST_TYPE(LPFILEDESCRIPTORA, 4, 4); - TEST_TYPE_POINTER(LPFILEDESCRIPTORA, 332, 1); -} - -static void test_pack_LPFILEDESCRIPTORW(void) -{ - /* LPFILEDESCRIPTORW */ - TEST_TYPE(LPFILEDESCRIPTORW, 4, 4); - TEST_TYPE_POINTER(LPFILEDESCRIPTORW, 592, 1); -} - -static void test_pack_LPFILEGROUPDESCRIPTORA(void) -{ - /* LPFILEGROUPDESCRIPTORA */ - TEST_TYPE(LPFILEGROUPDESCRIPTORA, 4, 4); - TEST_TYPE_POINTER(LPFILEGROUPDESCRIPTORA, 336, 1); -} - -static void test_pack_LPFILEGROUPDESCRIPTORW(void) -{ - /* LPFILEGROUPDESCRIPTORW */ - TEST_TYPE(LPFILEGROUPDESCRIPTORW, 4, 4); - TEST_TYPE_POINTER(LPFILEGROUPDESCRIPTORW, 596, 1); -} - -static void test_pack_LPFNVIEWCALLBACK(void) -{ - /* LPFNVIEWCALLBACK */ - TEST_TYPE(LPFNVIEWCALLBACK, 4, 4); -} - -static void test_pack_LPIDA(void) -{ - /* LPIDA */ - TEST_TYPE(LPIDA, 4, 4); - TEST_TYPE_POINTER(LPIDA, 8, 1); -} - -static void test_pack_LPQCMINFO(void) -{ - /* LPQCMINFO */ - TEST_TYPE(LPQCMINFO, 4, 4); - TEST_TYPE_POINTER(LPQCMINFO, 20, 4); -} - -static void test_pack_LPSHChangeDWORDAsIDList(void) -{ - /* LPSHChangeDWORDAsIDList */ - TEST_TYPE(LPSHChangeDWORDAsIDList, 4, 4); - TEST_TYPE_POINTER(LPSHChangeDWORDAsIDList, 12, 1); -} - -static void test_pack_LPSHChangeProductKeyAsIDList(void) -{ - /* LPSHChangeProductKeyAsIDList */ - TEST_TYPE(LPSHChangeProductKeyAsIDList, 4, 4); - TEST_TYPE_POINTER(LPSHChangeProductKeyAsIDList, 82, 1); -} - -static void test_pack_LPSHDESCRIPTIONID(void) -{ - /* LPSHDESCRIPTIONID */ - TEST_TYPE(LPSHDESCRIPTIONID, 4, 4); - TEST_TYPE_POINTER(LPSHDESCRIPTIONID, 20, 4); -} - -static void test_pack_LPSHELLFLAGSTATE(void) -{ - /* LPSHELLFLAGSTATE */ - TEST_TYPE(LPSHELLFLAGSTATE, 4, 4); - TEST_TYPE_POINTER(LPSHELLFLAGSTATE, 4, 1); -} - -static void test_pack_LPSHELLSTATE(void) -{ - /* LPSHELLSTATE */ - TEST_TYPE(LPSHELLSTATE, 4, 4); - TEST_TYPE_POINTER(LPSHELLSTATE, 32, 1); -} - -static void test_pack_LPTBINFO(void) -{ - /* LPTBINFO */ - TEST_TYPE(LPTBINFO, 4, 4); - TEST_TYPE_POINTER(LPTBINFO, 8, 4); -} - -static void test_pack_PBROWSEINFOA(void) -{ - /* PBROWSEINFOA */ - TEST_TYPE(PBROWSEINFOA, 4, 4); - TEST_TYPE_POINTER(PBROWSEINFOA, 32, 4); -} - -static void test_pack_PBROWSEINFOW(void) -{ - /* PBROWSEINFOW */ - TEST_TYPE(PBROWSEINFOW, 4, 4); - TEST_TYPE_POINTER(PBROWSEINFOW, 32, 4); -} - -static void test_pack_QCMINFO(void) -{ - /* QCMINFO (pack 8) */ - TEST_TYPE(QCMINFO, 20, 4); - TEST_FIELD(QCMINFO, HMENU, hmenu, 0, 4, 4); - TEST_FIELD(QCMINFO, UINT, indexMenu, 4, 4, 4); - TEST_FIELD(QCMINFO, UINT, idCmdFirst, 8, 4, 4); - TEST_FIELD(QCMINFO, UINT, idCmdLast, 12, 4, 4); - TEST_FIELD(QCMINFO, QCMINFO_IDMAP const*, pIdMap, 16, 4, 4); -} - -static void test_pack_QCMINFO_IDMAP(void) -{ - /* QCMINFO_IDMAP (pack 8) */ - TEST_TYPE(QCMINFO_IDMAP, 12, 4); - TEST_FIELD(QCMINFO_IDMAP, UINT, nMaxIds, 0, 4, 4); - TEST_FIELD(QCMINFO_IDMAP, QCMINFO_IDMAP_PLACEMENT[1], pIdList, 4, 8, 4); -} - -static void test_pack_QCMINFO_IDMAP_PLACEMENT(void) -{ - /* QCMINFO_IDMAP_PLACEMENT (pack 8) */ - TEST_TYPE(QCMINFO_IDMAP_PLACEMENT, 8, 4); - TEST_FIELD(QCMINFO_IDMAP_PLACEMENT, UINT, id, 0, 4, 4); - TEST_FIELD(QCMINFO_IDMAP_PLACEMENT, UINT, fFlags, 4, 4, 4); -} - -static void test_pack_SHChangeDWORDAsIDList(void) -{ - /* SHChangeDWORDAsIDList (pack 1) */ - TEST_TYPE(SHChangeDWORDAsIDList, 12, 1); - TEST_FIELD(SHChangeDWORDAsIDList, USHORT, cb, 0, 2, 1); - TEST_FIELD(SHChangeDWORDAsIDList, DWORD, dwItem1, 2, 4, 1); - TEST_FIELD(SHChangeDWORDAsIDList, DWORD, dwItem2, 6, 4, 1); - TEST_FIELD(SHChangeDWORDAsIDList, USHORT, cbZero, 10, 2, 1); -} - -static void test_pack_SHChangeNotifyEntry(void) -{ - /* SHChangeNotifyEntry (pack 1) */ - TEST_TYPE(SHChangeNotifyEntry, 8, 1); - TEST_FIELD(SHChangeNotifyEntry, LPCITEMIDLIST, pidl, 0, 4, 1); - TEST_FIELD(SHChangeNotifyEntry, BOOL, fRecursive, 4, 4, 1); -} - -static void test_pack_SHChangeProductKeyAsIDList(void) -{ - /* SHChangeProductKeyAsIDList (pack 1) */ - TEST_TYPE(SHChangeProductKeyAsIDList, 82, 1); - TEST_FIELD(SHChangeProductKeyAsIDList, USHORT, cb, 0, 2, 1); - TEST_FIELD(SHChangeProductKeyAsIDList, WCHAR[39], wszProductKey, 2, 78, 1); - TEST_FIELD(SHChangeProductKeyAsIDList, USHORT, cbZero, 80, 2, 1); -} - -static void test_pack_SHDESCRIPTIONID(void) -{ - /* SHDESCRIPTIONID (pack 8) */ - TEST_TYPE(SHDESCRIPTIONID, 20, 4); - TEST_FIELD(SHDESCRIPTIONID, DWORD, dwDescriptionId, 0, 4, 4); - TEST_FIELD(SHDESCRIPTIONID, CLSID, clsid, 4, 16, 4); -} - -static void test_pack_SHELLFLAGSTATE(void) -{ - /* SHELLFLAGSTATE (pack 1) */ - TEST_TYPE(SHELLFLAGSTATE, 4, 1); -} - -static void test_pack_SHELLSTATE(void) -{ - /* SHELLSTATE (pack 1) */ - TEST_TYPE(SHELLSTATE, 32, 1); - TEST_FIELD(SHELLSTATE, DWORD, dwWin95Unused, 4, 4, 1); - TEST_FIELD(SHELLSTATE, UINT, uWin95Unused, 8, 4, 1); - TEST_FIELD(SHELLSTATE, LONG, lParamSort, 12, 4, 1); - TEST_FIELD(SHELLSTATE, int, iSortDirection, 16, 4, 1); - TEST_FIELD(SHELLSTATE, UINT, version, 20, 4, 1); - TEST_FIELD(SHELLSTATE, UINT, uNotUsed, 24, 4, 1); -} - -static void test_pack_SHELLVIEWID(void) -{ - /* SHELLVIEWID */ - TEST_TYPE(SHELLVIEWID, 16, 4); -} - -static void test_pack_TBINFO(void) -{ - /* TBINFO (pack 8) */ - TEST_TYPE(TBINFO, 8, 4); - TEST_FIELD(TBINFO, UINT, cbuttons, 0, 4, 4); - TEST_FIELD(TBINFO, UINT, uFlags, 4, 4, 4); -} - -static void test_pack(void) -{ - test_pack_APPBARDATA(); - test_pack_AUTO_SCROLL_DATA(); - test_pack_BFFCALLBACK(); - test_pack_BLOB(); - test_pack_BROWSEINFOA(); - test_pack_BROWSEINFOW(); - test_pack_BSTR(); - test_pack_BSTRBLOB(); - test_pack_BYTE_BLOB(); - test_pack_BYTE_SIZEDARR(); - test_pack_CABINETSTATE(); - test_pack_CIDA(); - test_pack_CLIPDATA(); - test_pack_CLIPFORMAT(); - test_pack_CLSID(); - test_pack_COAUTHIDENTITY(); - test_pack_COAUTHINFO(); - test_pack_CSFV(); - test_pack_DATE(); - test_pack_DOUBLE(); - test_pack_DRAGINFOA(); - test_pack_DRAGINFOW(); - test_pack_DROPFILES(); - test_pack_DWORD_SIZEDARR(); - test_pack_FILEDESCRIPTORA(); - test_pack_FILEDESCRIPTORW(); - test_pack_FILEGROUPDESCRIPTORA(); - test_pack_FILEGROUPDESCRIPTORW(); - test_pack_FILEOP_FLAGS(); - test_pack_FLAGGED_BYTE_BLOB(); - test_pack_FLAGGED_WORD_BLOB(); - test_pack_FMTID(); - test_pack_GUID(); - test_pack_HMETAFILEPICT(); - test_pack_HYPER_SIZEDARR(); - test_pack_IID(); - test_pack_ITEMIDLIST(); - test_pack_LPBLOB(); - test_pack_LPBROWSEINFOA(); - test_pack_LPBROWSEINFOW(); - test_pack_LPBSTR(); - test_pack_LPBSTRBLOB(); - test_pack_LPCABINETSTATE(); - test_pack_LPCITEMIDLIST(); - test_pack_LPCOLESTR(); - test_pack_LPCSFV(); - test_pack_LPCSHITEMID(); - test_pack_LPCY(); - test_pack_LPDECIMAL(); - test_pack_LPDRAGINFOA(); - test_pack_LPDRAGINFOW(); - test_pack_LPDROPFILES(); - test_pack_LPFILEDESCRIPTORA(); - test_pack_LPFILEDESCRIPTORW(); - test_pack_LPFILEGROUPDESCRIPTORA(); - test_pack_LPFILEGROUPDESCRIPTORW(); - test_pack_LPFNVIEWCALLBACK(); - test_pack_LPGUID(); - test_pack_LPIDA(); - test_pack_LPITEMIDLIST(); - test_pack_LPOLESTR(); - test_pack_LPQCMINFO(); - test_pack_LPSHChangeDWORDAsIDList(); - test_pack_LPSHChangeProductKeyAsIDList(); - test_pack_LPSHDESCRIPTIONID(); - test_pack_LPSHELLDETAILS(); - test_pack_LPSHELLEXECUTEINFOA(); - test_pack_LPSHELLEXECUTEINFOW(); - test_pack_LPSHELLFLAGSTATE(); - test_pack_LPSHELLSTATE(); - test_pack_LPSHFILEOPSTRUCTA(); - test_pack_LPSHFILEOPSTRUCTW(); - test_pack_LPSHITEMID(); - test_pack_LPSHNAMEMAPPINGA(); - test_pack_LPSHNAMEMAPPINGW(); - test_pack_LPSTRRET(); - test_pack_LPTBINFO(); - test_pack_NOTIFYICONDATAA(); - test_pack_NOTIFYICONDATAW(); - test_pack_OLECHAR(); - test_pack_PAPPBARDATA(); - test_pack_PBROWSEINFOA(); - test_pack_PBROWSEINFOW(); - test_pack_PNOTIFYICONDATAA(); - test_pack_PNOTIFYICONDATAW(); - test_pack_PRINTEROP_FLAGS(); - test_pack_PROPID(); - test_pack_QCMINFO(); - test_pack_QCMINFO_IDMAP(); - test_pack_QCMINFO_IDMAP_PLACEMENT(); - test_pack_RemHBITMAP(); - test_pack_RemHENHMETAFILE(); - test_pack_RemHGLOBAL(); - test_pack_RemHMETAFILEPICT(); - test_pack_RemHPALETTE(); - test_pack_SCODE(); - test_pack_SHChangeDWORDAsIDList(); - test_pack_SHChangeNotifyEntry(); - test_pack_SHChangeProductKeyAsIDList(); - test_pack_SHDESCRIPTIONID(); - test_pack_SHELLDETAILS(); - test_pack_SHELLEXECUTEINFOA(); - test_pack_SHELLEXECUTEINFOW(); - test_pack_SHELLFLAGSTATE(); - test_pack_SHELLSTATE(); - test_pack_SHELLVIEWID(); - test_pack_SHFILEINFOA(); - test_pack_SHFILEINFOW(); - test_pack_SHFILEOPSTRUCTA(); - test_pack_SHFILEOPSTRUCTW(); - test_pack_SHITEMID(); - test_pack_SHNAMEMAPPINGA(); - test_pack_SHNAMEMAPPINGW(); - test_pack_STRRET(); - test_pack_TBINFO(); - test_pack_UP_BYTE_BLOB(); - test_pack_UP_FLAGGED_BYTE_BLOB(); - test_pack_UP_FLAGGED_WORD_BLOB(); - test_pack_VARIANT_BOOL(); - test_pack_VARTYPE(); - test_pack_WORD_SIZEDARR(); - test_pack_remoteMETAFILEPICT(); - test_pack_userBITMAP(); - test_pack_userCLIPFORMAT(); - test_pack_userHBITMAP(); - test_pack_userHENHMETAFILE(); - test_pack_userHGLOBAL(); - test_pack_userHMETAFILE(); - test_pack_userHMETAFILEPICT(); - test_pack_userHPALETTE(); - test_pack_wireBSTR(); - test_pack_wireCLIPFORMAT(); - test_pack_wireHBITMAP(); - test_pack_wireHENHMETAFILE(); - test_pack_wireHGLOBAL(); - test_pack_wireHMETAFILE(); - test_pack_wireHMETAFILEPICT(); - test_pack_wireHPALETTE(); -} - -START_TEST(generated) -{ - test_pack(); -} diff --git a/rostests/winetests/shell32/shell32.rbuild b/rostests/winetests/shell32/shell32.rbuild deleted file mode 100644 index f73c51b97ea..00000000000 --- a/rostests/winetests/shell32/shell32.rbuild +++ /dev/null @@ -1,28 +0,0 @@ - - - - - . - wine - shell32 - ole32 - oleaut32 - shlwapi - user32 - gdi32 - advapi32 - kernel32 - uuid - ntdll - generated.c - shelllink.c - shellpath.c - shlexec.c - shlfileop.c - shlfolder.c - string.c - systray.c - testlist.c - shfldr_netplaces.c - - diff --git a/rostests/winetests/shell32/shell32_test.h b/rostests/winetests/shell32/shell32_test.h deleted file mode 100755 index 64a2be1ef62..00000000000 --- a/rostests/winetests/shell32/shell32_test.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Unit test suite for shell32 functions - * - * Copyright 2005 Francois Gougett 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 - */ - - -/* Helper function for creating .lnk files */ -typedef struct -{ - const char* description; - const char* workdir; - const char* path; - LPITEMIDLIST pidl; - const char* arguments; - int showcmd; - const char* icon; - int icon_id; - WORD hotkey; -} lnk_desc_t; - -#define create_lnk(a,b,c) create_lnk_(__LINE__, (a), (b), (c)) -void create_lnk_(int,const WCHAR*,lnk_desc_t*,int); diff --git a/rostests/winetests/shell32/shelllink.c b/rostests/winetests/shell32/shelllink.c deleted file mode 100755 index a331b109869..00000000000 --- a/rostests/winetests/shell32/shelllink.c +++ /dev/null @@ -1,711 +0,0 @@ -/* - * Unit tests for shelllinks - * - * 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 - * This is a test program for the SHGet{Special}Folder{Path|Location} functions - * of shell32, that get either a filesystem path or a LPITEMIDLIST (shell - * namespace) path for a given folder (CSIDL value). - * - */ - -#define COBJMACROS - -#include -#include "shlguid.h" -#include "shobjidl.h" -#include "shlobj.h" -#include "wine/test.h" - -#include "shell32_test.h" - - -typedef void (WINAPI *fnILFree)(LPITEMIDLIST); -typedef BOOL (WINAPI *fnILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST); -typedef HRESULT (WINAPI *fnSHILCreateFromPath)(LPCWSTR, LPITEMIDLIST *,DWORD*); - -static fnILFree pILFree; -static fnILIsEqual pILIsEqual; -static fnSHILCreateFromPath pSHILCreateFromPath; - -static DWORD (WINAPI *pGetLongPathNameA)(LPCSTR, LPSTR, DWORD); - -static const GUID _IID_IShellLinkDataList = { - 0x45e2b4ae, 0xb1c3, 0x11d0, - { 0xb9, 0x2f, 0x00, 0xa0, 0xc9, 0x03, 0x12, 0xe1 } -}; - -static const WCHAR lnkfile[]= { 'C',':','\\','t','e','s','t','.','l','n','k',0 }; -static const WCHAR notafile[]= { 'C',':','\\','n','o','n','e','x','i','s','t','e','n','t','\\','f','i','l','e',0 }; - - -/* For some reason SHILCreateFromPath does not work on Win98 and - * SHSimpleIDListFromPathA does not work on NT4. But if we call both we - * get what we want on all platforms. - */ -static LPITEMIDLIST (WINAPI *pSHSimpleIDListFromPathAW)(LPCVOID); - -static LPITEMIDLIST path_to_pidl(const char* path) -{ - LPITEMIDLIST pidl; - - if (!pSHSimpleIDListFromPathAW) - { - HMODULE hdll=GetModuleHandleA("shell32.dll"); - pSHSimpleIDListFromPathAW=(void*)GetProcAddress(hdll, (char*)162); - if (!pSHSimpleIDListFromPathAW) - trace("SHSimpleIDListFromPathAW not found in shell32.dll\n"); - } - - pidl=NULL; - /* pSHSimpleIDListFromPathAW maps to A on non NT platforms */ - if (pSHSimpleIDListFromPathAW && (GetVersion() & 0x80000000)) - pidl=pSHSimpleIDListFromPathAW(path); - - if (!pidl) - { - WCHAR* pathW; - HRESULT r; - int len; - - len=MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0); - pathW=HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, path, -1, pathW, len); - - r=pSHILCreateFromPath(pathW, &pidl, NULL); - todo_wine { - ok(SUCCEEDED(r), "SHILCreateFromPath failed (0x%08x)\n", r); - } - HeapFree(GetProcessHeap(), 0, pathW); - } - return pidl; -} - - -/* - * Test manipulation of an IShellLink's properties. - */ - -static void test_get_set(void) -{ - HRESULT r; - IShellLinkA *sl; - char mypath[MAX_PATH]; - char buffer[INFOTIPSIZE]; - LPITEMIDLIST pidl, tmp_pidl; - const char * str; - int i; - WORD w; - - r = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, - &IID_IShellLinkA, (LPVOID*)&sl); - ok(SUCCEEDED(r), "no IID_IShellLinkA (0x%08x)\n", r); - if (!SUCCEEDED(r)) - return; - - /* Test Getting / Setting the description */ - strcpy(buffer,"garbage"); - r = IShellLinkA_GetDescription(sl, buffer, sizeof(buffer)); - ok(SUCCEEDED(r), "GetDescription failed (0x%08x)\n", r); - ok(*buffer=='\0', "GetDescription returned '%s'\n", buffer); - - str="Some description"; - r = IShellLinkA_SetDescription(sl, str); - ok(SUCCEEDED(r), "SetDescription failed (0x%08x)\n", r); - - strcpy(buffer,"garbage"); - r = IShellLinkA_GetDescription(sl, buffer, sizeof(buffer)); - ok(SUCCEEDED(r), "GetDescription failed (0x%08x)\n", r); - ok(lstrcmp(buffer,str)==0, "GetDescription returned '%s'\n", buffer); - - /* Test Getting / Setting the work directory */ - strcpy(buffer,"garbage"); - r = IShellLinkA_GetWorkingDirectory(sl, buffer, sizeof(buffer)); - ok(SUCCEEDED(r), "GetWorkingDirectory failed (0x%08x)\n", r); - ok(*buffer=='\0', "GetWorkingDirectory returned '%s'\n", buffer); - - str="c:\\nonexistent\\directory"; - r = IShellLinkA_SetWorkingDirectory(sl, str); - ok(SUCCEEDED(r), "SetWorkingDirectory failed (0x%08x)\n", r); - - strcpy(buffer,"garbage"); - r = IShellLinkA_GetWorkingDirectory(sl, buffer, sizeof(buffer)); - ok(SUCCEEDED(r), "GetWorkingDirectory failed (0x%08x)\n", r); - ok(lstrcmpi(buffer,str)==0, "GetWorkingDirectory returned '%s'\n", buffer); - - /* Test Getting / Setting the path */ - strcpy(buffer,"garbage"); - r = IShellLinkA_GetPath(sl, buffer, sizeof(buffer), NULL, SLGP_RAWPATH); - ok(SUCCEEDED(r), "GetPath failed (0x%08x)\n", r); - ok(*buffer=='\0', "GetPath returned '%s'\n", buffer); - - r = IShellLinkA_SetPath(sl, ""); - ok(r==S_OK, "SetPath failed (0x%08x)\n", r); - - strcpy(buffer,"garbage"); - r = IShellLinkA_GetPath(sl, buffer, sizeof(buffer), NULL, SLGP_RAWPATH); - ok(SUCCEEDED(r), "GetPath failed (0x%08x)\n", r); - ok(*buffer=='\0', "GetPath returned '%s'\n", buffer); - - /* Win98 returns S_FALSE, but WinXP returns S_OK */ - str="c:\\nonexistent\\file"; - r = IShellLinkA_SetPath(sl, str); - ok(r==S_FALSE || r==S_OK, "SetPath failed (0x%08x)\n", r); - - strcpy(buffer,"garbage"); - r = IShellLinkA_GetPath(sl, buffer, sizeof(buffer), NULL, SLGP_RAWPATH); - ok(SUCCEEDED(r), "GetPath failed (0x%08x)\n", r); - ok(lstrcmpi(buffer,str)==0, "GetPath returned '%s'\n", buffer); - - /* Get some a real path to play with */ - r=GetModuleFileName(NULL, mypath, sizeof(mypath)); - ok(r>=0 && rdescription) - { - r = IShellLinkA_SetDescription(sl, desc->description); - lok(SUCCEEDED(r), "SetDescription failed (0x%08x)\n", r); - } - if (desc->workdir) - { - r = IShellLinkA_SetWorkingDirectory(sl, desc->workdir); - lok(SUCCEEDED(r), "SetWorkingDirectory failed (0x%08x)\n", r); - } - if (desc->path) - { - r = IShellLinkA_SetPath(sl, desc->path); - lok(SUCCEEDED(r), "SetPath failed (0x%08x)\n", r); - } - if (desc->pidl) - { - r = IShellLinkA_SetIDList(sl, desc->pidl); - lok(SUCCEEDED(r), "SetIDList failed (0x%08x)\n", r); - } - if (desc->arguments) - { - r = IShellLinkA_SetArguments(sl, desc->arguments); - lok(SUCCEEDED(r), "SetArguments failed (0x%08x)\n", r); - } - if (desc->showcmd) - { - r = IShellLinkA_SetShowCmd(sl, desc->showcmd); - lok(SUCCEEDED(r), "SetShowCmd failed (0x%08x)\n", r); - } - if (desc->icon) - { - r = IShellLinkA_SetIconLocation(sl, desc->icon, desc->icon_id); - lok(SUCCEEDED(r), "SetIconLocation failed (0x%08x)\n", r); - } - if (desc->hotkey) - { - r = IShellLinkA_SetHotkey(sl, desc->hotkey); - lok(SUCCEEDED(r), "SetHotkey failed (0x%08x)\n", r); - } - - r = IShellLinkW_QueryInterface(sl, &IID_IPersistFile, (LPVOID*)&pf); - lok(SUCCEEDED(r), "no IID_IPersistFile (0x%08x)\n", r); - if (SUCCEEDED(r)) - { - r = IPersistFile_Save(pf, path, TRUE); - if (save_fails) - { - todo_wine { - lok(SUCCEEDED(r), "save failed (0x%08x)\n", r); - } - } - else - { - lok(SUCCEEDED(r), "save failed (0x%08x)\n", r); - } - IPersistFile_Release(pf); - } - - IShellLinkA_Release(sl); -} - -static void check_lnk_(int line, const WCHAR* path, lnk_desc_t* desc, int todo) -{ - HRESULT r; - IShellLinkA *sl; - IPersistFile *pf; - char buffer[INFOTIPSIZE]; - - r = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, - &IID_IShellLinkA, (LPVOID*)&sl); - lok(SUCCEEDED(r), "no IID_IShellLinkA (0x%08x)\n", r); - if (!SUCCEEDED(r)) - return; - - r = IShellLinkA_QueryInterface(sl, &IID_IPersistFile, (LPVOID*)&pf); - lok(SUCCEEDED(r), "no IID_IPersistFile (0x%08x)\n", r); - if (!SUCCEEDED(r)) - { - IShellLinkA_Release(sl); - return; - } - - r = IPersistFile_Load(pf, path, STGM_READ); - lok(SUCCEEDED(r), "load failed (0x%08x)\n", r); - IPersistFile_Release(pf); - if (!SUCCEEDED(r)) - { - IShellLinkA_Release(sl); - return; - } - - if (desc->description) - { - strcpy(buffer,"garbage"); - r = IShellLinkA_GetDescription(sl, buffer, sizeof(buffer)); - lok(SUCCEEDED(r), "GetDescription failed (0x%08x)\n", r); - lok_todo_4(0x1, lstrcmp(buffer, desc->description)==0, - "GetDescription returned '%s' instead of '%s'\n", - buffer, desc->description); - } - if (desc->workdir) - { - strcpy(buffer,"garbage"); - r = IShellLinkA_GetWorkingDirectory(sl, buffer, sizeof(buffer)); - lok(SUCCEEDED(r), "GetWorkingDirectory failed (0x%08x)\n", r); - lok_todo_4(0x2, lstrcmpi(buffer, desc->workdir)==0, - "GetWorkingDirectory returned '%s' instead of '%s'\n", - buffer, desc->workdir); - } - if (desc->path) - { - strcpy(buffer,"garbage"); - r = IShellLinkA_GetPath(sl, buffer, sizeof(buffer), NULL, SLGP_RAWPATH); - lok(SUCCEEDED(r), "GetPath failed (0x%08x)\n", r); - lok_todo_4(0x4, lstrcmpi(buffer, desc->path)==0, - "GetPath returned '%s' instead of '%s'\n", - buffer, desc->path); - } - if (desc->pidl) - { - LPITEMIDLIST pidl=NULL; - r = IShellLinkA_GetIDList(sl, &pidl); - lok(SUCCEEDED(r), "GetIDList failed (0x%08x)\n", r); - lok_todo_2(0x8, pILIsEqual(pidl, desc->pidl), - "GetIDList returned an incorrect pidl\n"); - } - if (desc->showcmd) - { - int i=0xdeadbeef; - r = IShellLinkA_GetShowCmd(sl, &i); - lok(SUCCEEDED(r), "GetShowCmd failed (0x%08x)\n", r); - lok_todo_4(0x10, i==desc->showcmd, - "GetShowCmd returned 0x%0x instead of 0x%0x\n", - i, desc->showcmd); - } - if (desc->icon) - { - int i=0xdeadbeef; - strcpy(buffer,"garbage"); - r = IShellLinkA_GetIconLocation(sl, buffer, sizeof(buffer), &i); - lok(SUCCEEDED(r), "GetIconLocation failed (0x%08x)\n", r); - lok_todo_4(0x20, lstrcmpi(buffer, desc->icon)==0, - "GetIconLocation returned '%s' instead of '%s'\n", - buffer, desc->icon); - lok_todo_4(0x20, i==desc->icon_id, - "GetIconLocation returned 0x%0x instead of 0x%0x\n", - i, desc->icon_id); - } - if (desc->hotkey) - { - WORD i=0xbeef; - r = IShellLinkA_GetHotkey(sl, &i); - lok(SUCCEEDED(r), "GetHotkey failed (0x%08x)\n", r); - lok_todo_4(0x40, i==desc->hotkey, - "GetHotkey returned 0x%04x instead of 0x%04x\n", - i, desc->hotkey); - } - - IShellLinkA_Release(sl); -} - -static void test_load_save(void) -{ - lnk_desc_t desc; - char mypath[MAX_PATH]; - char mydir[MAX_PATH]; - char realpath[MAX_PATH]; - char* p; - HANDLE hf; - DWORD r; - - /* Save an empty .lnk file */ - memset(&desc, 0, sizeof(desc)); - create_lnk(lnkfile, &desc, 0); - - /* It should come back as a bunch of empty strings */ - desc.description=""; - desc.workdir=""; - desc.path=""; - desc.arguments=""; - desc.icon=""; - check_lnk(lnkfile, &desc, 0x0); - - /* Point a .lnk file to nonexistent files */ - desc.description=""; - desc.workdir="c:\\Nonexitent\\work\\directory"; - desc.path="c:\\nonexistent\\path"; - desc.pidl=NULL; - desc.arguments=""; - desc.showcmd=0; - desc.icon="c:\\nonexistent\\icon\\file"; - desc.icon_id=1234; - desc.hotkey=0; - create_lnk(lnkfile, &desc, 0); - check_lnk(lnkfile, &desc, 0x0); - - r=GetModuleFileName(NULL, mypath, sizeof(mypath)); - ok(r','p','l','T',']','j','I','{','j','f','(', - '=','1','&','L','[','-','8','1','-',']',':',':',0 }; - static const WCHAR comp[] = { - '2','6',',','!','!','g','x','s','f','(','N','g',']','q','F','`','H','{', - 'L','s','A','C','C','E','S','S','F','i','l','e','s','>','p','l','T',']', - 'j','I','{','j','f','(','=','1','&','L','[','-','8','1','-',']',0 }; - IShellLinkDataList *dl = NULL; - IShellLinkW *sl = NULL; - HRESULT r; - DWORD flags = 0; - EXP_DARWIN_LINK *dar; - - r = CoCreateInstance( &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, - &IID_IShellLinkW, (LPVOID*)&sl ); - ok( r == S_OK || r == E_NOINTERFACE, "CoCreateInstance failed (0x%08x)\n", r); - if (!sl) - { - skip("no shelllink\n"); - return; - } - - r = IShellLinkW_QueryInterface( sl, &_IID_IShellLinkDataList, (LPVOID*) &dl ); - ok(r == S_OK, "IShellLinkW_QueryInterface failed (0x%08x)\n", r); - - if (!dl) - { - skip("no datalink interface\n"); - return; - } - - flags = 0; - r = IShellLinkDataList_GetFlags( dl, &flags ); - ok( r == S_OK, "GetFlags failed\n"); - ok( flags == 0, "GetFlags returned wrong flags\n"); - - dar = (void*)-1; - r = IShellLinkDataList_CopyDataBlock( dl, EXP_DARWIN_ID_SIG, (LPVOID*) &dar ); - ok( r == E_FAIL, "CopyDataBlock failed\n"); - ok( dar == NULL, "should be null\n"); - - r = IShellLinkW_SetPath(sl, lnk); - ok(r == S_OK, "set path failed\n"); - - /* - * The following crashes: - * r = IShellLinkDataList_GetFlags( dl, NULL ); - */ - - flags = 0; - r = IShellLinkDataList_GetFlags( dl, &flags ); - ok( r == S_OK, "GetFlags failed\n"); - ok( flags == (SLDF_HAS_DARWINID|SLDF_HAS_LOGO3ID), - "GetFlags returned wrong flags\n"); - - dar = NULL; - r = IShellLinkDataList_CopyDataBlock( dl, EXP_DARWIN_ID_SIG, (LPVOID*) &dar ); - ok( r == S_OK, "CopyDataBlock failed\n"); - - ok( dar && ((DATABLOCK_HEADER*)dar)->dwSignature == EXP_DARWIN_ID_SIG, "signature wrong\n"); - ok( dar && 0==lstrcmpW(dar->szwDarwinID, comp ), "signature wrong\n"); - - LocalFree( dar ); - - IUnknown_Release( dl ); - IShellLinkW_Release( sl ); -} - -START_TEST(shelllink) -{ - HRESULT r; - HMODULE hmod = GetModuleHandleA("shell32.dll"); - HMODULE hkernel32 = GetModuleHandleA("kernel32.dll"); - - pILFree = (fnILFree) GetProcAddress(hmod, (LPSTR)155); - pILIsEqual = (fnILIsEqual) GetProcAddress(hmod, (LPSTR)21); - pSHILCreateFromPath = (fnSHILCreateFromPath) GetProcAddress(hmod, (LPSTR)28); - - pGetLongPathNameA = (void *)GetProcAddress(hkernel32, "GetLongPathNameA"); - - r = CoInitialize(NULL); - ok(SUCCEEDED(r), "CoInitialize failed (0x%08x)\n", r); - if (!SUCCEEDED(r)) - return; - - test_get_set(); - test_load_save(); - test_datalink(); - - CoUninitialize(); -} diff --git a/rostests/winetests/shell32/shellpath.c b/rostests/winetests/shell32/shellpath.c deleted file mode 100644 index a6bbcaefba7..00000000000 --- a/rostests/winetests/shell32/shellpath.c +++ /dev/null @@ -1,912 +0,0 @@ -/* - * Unit tests for shell32 SHGet{Special}Folder{Path|Location} functions. - * - * Copyright 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 - * This is a test program for the SHGet{Special}Folder{Path|Location} functions - * of shell32, that get either a filesystem path or a LPITEMIDLIST (shell - * namespace) path for a given folder (CSIDL value). - * - * FIXME: - * - Need to verify on more systems. - */ - -#define COBJMACROS - -#include -#include -#include "windef.h" -#include "winbase.h" -#include "shlguid.h" -#include "shlobj.h" -#include "shlwapi.h" -#include "wine/test.h" - -/* CSIDL_MYDOCUMENTS is now the same as CSIDL_PERSONAL, but what we want - * here is its original value. - */ -#define OLD_CSIDL_MYDOCUMENTS 0x000c - -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(x) ( sizeof(x) / sizeof((x)[0]) ) -#endif - -/* from pidl.h, not included here: */ -#ifndef PT_GUID -#define PT_GUID 0x1f /* no path */ -#endif -#ifndef PT_DRIVE -#define PT_DRIVE 0x23 /* has path */ -#endif -#ifndef PT_DRIVE2 -#define PT_DRIVE2 0x25 /* has path */ -#endif -#ifndef PT_SHELLEXT -#define PT_SHELLEXT 0x2e /* no path */ -#endif -#ifndef PT_FOLDER -#define PT_FOLDER 0x31 /* has path */ -#endif -#ifndef PT_WORKGRP -#define PT_WORKGRP 0x41 /* no path */ -#endif -#ifndef PT_YAGUID -#define PT_YAGUID 0x70 /* no path */ -#endif -/* FIXME: this is used for history/favorites folders; what's a better name? */ -#ifndef PT_IESPECIAL2 -#define PT_IESPECIAL2 0xb1 /* has path */ -#endif - -static GUID CLSID_CommonDocuments = { 0x0000000c, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x1a } }; - -struct shellExpectedValues { - int folder; - BYTE pidlType; -}; - -static HRESULT (WINAPI *pDllGetVersion)(DLLVERSIONINFO *); -static HRESULT (WINAPI *pSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR); -static HRESULT (WINAPI *pSHGetFolderLocation)(HWND, int, HANDLE, DWORD, - LPITEMIDLIST *); -static BOOL (WINAPI *pSHGetSpecialFolderPathA)(HWND, LPSTR, int, BOOL); -static HRESULT (WINAPI *pSHGetSpecialFolderLocation)(HWND, int, LPITEMIDLIST *); -static LPITEMIDLIST (WINAPI *pILFindLastID)(LPCITEMIDLIST); -static int (WINAPI *pSHFileOperationA)(LPSHFILEOPSTRUCTA); -static HRESULT (WINAPI *pSHGetMalloc)(LPMALLOC *); -static DLLVERSIONINFO shellVersion = { 0 }; -static LPMALLOC pMalloc; -static const struct shellExpectedValues requiredShellValues[] = { - { CSIDL_BITBUCKET, PT_GUID }, - { CSIDL_CONTROLS, PT_SHELLEXT }, - { CSIDL_COOKIES, PT_FOLDER }, - { CSIDL_DESKTOPDIRECTORY, PT_FOLDER }, - { CSIDL_DRIVES, PT_GUID }, - { CSIDL_FAVORITES, PT_FOLDER }, - { CSIDL_FONTS, PT_FOLDER }, -/* FIXME: the following fails in Wine, returns type PT_FOLDER - { CSIDL_HISTORY, PT_IESPECIAL2 }, - */ - { CSIDL_INTERNET, PT_GUID }, - { CSIDL_NETHOOD, PT_FOLDER }, - { CSIDL_NETWORK, PT_GUID }, - { CSIDL_PRINTERS, PT_YAGUID }, - { CSIDL_PRINTHOOD, PT_FOLDER }, - { CSIDL_PROGRAMS, PT_FOLDER }, - { CSIDL_RECENT, PT_FOLDER }, - { CSIDL_SENDTO, PT_FOLDER }, - { CSIDL_STARTMENU, PT_FOLDER }, - { CSIDL_STARTUP, PT_FOLDER }, - { CSIDL_TEMPLATES, PT_FOLDER }, -}; -static const struct shellExpectedValues optionalShellValues[] = { -/* FIXME: the following only semi-succeed; they return NULL PIDLs on XP.. hmm. - { CSIDL_ALTSTARTUP, PT_FOLDER }, - { CSIDL_COMMON_ALTSTARTUP, PT_FOLDER }, - { CSIDL_COMMON_OEM_LINKS, PT_FOLDER }, - */ -/* Windows NT-only: */ - { CSIDL_COMMON_DESKTOPDIRECTORY, PT_FOLDER }, - { CSIDL_COMMON_DOCUMENTS, PT_SHELLEXT }, - { CSIDL_COMMON_FAVORITES, PT_FOLDER }, - { CSIDL_COMMON_PROGRAMS, PT_FOLDER }, - { CSIDL_COMMON_STARTMENU, PT_FOLDER }, - { CSIDL_COMMON_STARTUP, PT_FOLDER }, - { CSIDL_COMMON_TEMPLATES, PT_FOLDER }, -/* first appearing in shell32 version 4.71: */ - { CSIDL_APPDATA, PT_FOLDER }, -/* first appearing in shell32 version 4.72: */ - { CSIDL_INTERNET_CACHE, PT_IESPECIAL2 }, -/* first appearing in shell32 version 5.0: */ - { CSIDL_ADMINTOOLS, PT_FOLDER }, - { CSIDL_COMMON_APPDATA, PT_FOLDER }, - { CSIDL_LOCAL_APPDATA, PT_FOLDER }, - { OLD_CSIDL_MYDOCUMENTS, PT_FOLDER }, - { CSIDL_MYMUSIC, PT_FOLDER }, - { CSIDL_MYPICTURES, PT_FOLDER }, - { CSIDL_MYVIDEO, PT_FOLDER }, - { CSIDL_PROFILE, PT_FOLDER }, - { CSIDL_PROGRAM_FILES, PT_FOLDER }, - { CSIDL_PROGRAM_FILESX86, PT_FOLDER }, - { CSIDL_PROGRAM_FILES_COMMON, PT_FOLDER }, - { CSIDL_PROGRAM_FILES_COMMONX86, PT_FOLDER }, - { CSIDL_SYSTEM, PT_FOLDER }, - { CSIDL_WINDOWS, PT_FOLDER }, -/* first appearing in shell32 6.0: */ - { CSIDL_CDBURN_AREA, PT_FOLDER }, - { CSIDL_COMMON_MUSIC, PT_FOLDER }, - { CSIDL_COMMON_PICTURES, PT_FOLDER }, - { CSIDL_COMMON_VIDEO, PT_FOLDER }, - { CSIDL_COMPUTERSNEARME, PT_WORKGRP }, - { CSIDL_RESOURCES, PT_FOLDER }, - { CSIDL_RESOURCES_LOCALIZED, PT_FOLDER }, -}; - -static void loadShell32(void) -{ - HMODULE hShell32 = GetModuleHandleA("shell32"); - -#define GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hShell32, #func); \ - if(!p ## func) \ - trace("GetProcAddress(%s) failed\n", #func); - - GET_PROC(DllGetVersion) - GET_PROC(SHGetFolderPathA) - GET_PROC(SHGetFolderLocation) - GET_PROC(SHGetSpecialFolderPathA) - GET_PROC(SHGetSpecialFolderLocation) - GET_PROC(ILFindLastID) - if (!pILFindLastID) - pILFindLastID = (void *)GetProcAddress(hShell32, (LPCSTR)16); - GET_PROC(SHFileOperationA) - GET_PROC(SHGetMalloc) - - ok(pSHGetMalloc != NULL, "shell32 is missing SHGetMalloc\n"); - if (pSHGetMalloc) - { - HRESULT hr = pSHGetMalloc(&pMalloc); - - ok(SUCCEEDED(hr), "SHGetMalloc failed: 0x%08x\n", hr); - ok(pMalloc != NULL, "SHGetMalloc returned a NULL IMalloc\n"); - } - - if (pDllGetVersion) - { - shellVersion.cbSize = sizeof(shellVersion); - pDllGetVersion(&shellVersion); - if (winetest_interactive) - printf("shell32 version is %d.%d\n", - shellVersion.dwMajorVersion, shellVersion.dwMinorVersion); - } -#undef GET_PROC -} - -#ifndef CSIDL_PROFILES -#define CSIDL_PROFILES 0x003e -#endif - -/* A couple utility printing functions */ -static const char *getFolderName(int folder) -{ - static char unknown[32]; - -#define CSIDL_TO_STR(x) case x: return#x; - switch (folder) - { - CSIDL_TO_STR(CSIDL_DESKTOP); - CSIDL_TO_STR(CSIDL_INTERNET); - CSIDL_TO_STR(CSIDL_PROGRAMS); - CSIDL_TO_STR(CSIDL_CONTROLS); - CSIDL_TO_STR(CSIDL_PRINTERS); - CSIDL_TO_STR(CSIDL_PERSONAL); - CSIDL_TO_STR(CSIDL_FAVORITES); - CSIDL_TO_STR(CSIDL_STARTUP); - CSIDL_TO_STR(CSIDL_RECENT); - CSIDL_TO_STR(CSIDL_SENDTO); - CSIDL_TO_STR(CSIDL_BITBUCKET); - CSIDL_TO_STR(CSIDL_STARTMENU); - CSIDL_TO_STR(OLD_CSIDL_MYDOCUMENTS); - CSIDL_TO_STR(CSIDL_MYMUSIC); - CSIDL_TO_STR(CSIDL_MYVIDEO); - CSIDL_TO_STR(CSIDL_DESKTOPDIRECTORY); - CSIDL_TO_STR(CSIDL_DRIVES); - CSIDL_TO_STR(CSIDL_NETWORK); - CSIDL_TO_STR(CSIDL_NETHOOD); - CSIDL_TO_STR(CSIDL_FONTS); - CSIDL_TO_STR(CSIDL_TEMPLATES); - CSIDL_TO_STR(CSIDL_COMMON_STARTMENU); - CSIDL_TO_STR(CSIDL_COMMON_PROGRAMS); - CSIDL_TO_STR(CSIDL_COMMON_STARTUP); - CSIDL_TO_STR(CSIDL_COMMON_DESKTOPDIRECTORY); - CSIDL_TO_STR(CSIDL_APPDATA); - CSIDL_TO_STR(CSIDL_PRINTHOOD); - CSIDL_TO_STR(CSIDL_LOCAL_APPDATA); - CSIDL_TO_STR(CSIDL_ALTSTARTUP); - CSIDL_TO_STR(CSIDL_COMMON_ALTSTARTUP); - CSIDL_TO_STR(CSIDL_COMMON_FAVORITES); - CSIDL_TO_STR(CSIDL_INTERNET_CACHE); - CSIDL_TO_STR(CSIDL_COOKIES); - CSIDL_TO_STR(CSIDL_HISTORY); - CSIDL_TO_STR(CSIDL_COMMON_APPDATA); - CSIDL_TO_STR(CSIDL_WINDOWS); - CSIDL_TO_STR(CSIDL_SYSTEM); - CSIDL_TO_STR(CSIDL_PROGRAM_FILES); - CSIDL_TO_STR(CSIDL_MYPICTURES); - CSIDL_TO_STR(CSIDL_PROFILE); - CSIDL_TO_STR(CSIDL_SYSTEMX86); - CSIDL_TO_STR(CSIDL_PROGRAM_FILESX86); - CSIDL_TO_STR(CSIDL_PROGRAM_FILES_COMMON); - CSIDL_TO_STR(CSIDL_PROGRAM_FILES_COMMONX86); - CSIDL_TO_STR(CSIDL_COMMON_TEMPLATES); - CSIDL_TO_STR(CSIDL_COMMON_DOCUMENTS); - CSIDL_TO_STR(CSIDL_COMMON_ADMINTOOLS); - CSIDL_TO_STR(CSIDL_ADMINTOOLS); - CSIDL_TO_STR(CSIDL_CONNECTIONS); - CSIDL_TO_STR(CSIDL_PROFILES); - CSIDL_TO_STR(CSIDL_COMMON_MUSIC); - CSIDL_TO_STR(CSIDL_COMMON_PICTURES); - CSIDL_TO_STR(CSIDL_COMMON_VIDEO); - CSIDL_TO_STR(CSIDL_RESOURCES); - CSIDL_TO_STR(CSIDL_RESOURCES_LOCALIZED); - CSIDL_TO_STR(CSIDL_COMMON_OEM_LINKS); - CSIDL_TO_STR(CSIDL_CDBURN_AREA); - CSIDL_TO_STR(CSIDL_COMPUTERSNEARME); -#undef CSIDL_TO_STR - default: - sprintf(unknown, "unknown (0x%04x)", folder); - return unknown; - } -} - -static const char *printGUID(const GUID *guid) -{ - static char guidSTR[39]; - - if (!guid) return NULL; - - sprintf(guidSTR, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", - 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]); - return guidSTR; -} - -static void testSHGetFolderLocationInvalidArgs(void) -{ - LPITEMIDLIST pidl; - HRESULT hr; - - if (!pSHGetFolderLocation) return; - - /* check a bogus CSIDL: */ - pidl = NULL; - hr = pSHGetFolderLocation(NULL, 0xeeee, NULL, 0, &pidl); - ok(hr == E_INVALIDARG, - "SHGetFolderLocation(NULL, 0xeeee, NULL, 0, &pidl) returned 0x%08x, expected E_INVALIDARG\n", hr); - if (SUCCEEDED(hr)) - IMalloc_Free(pMalloc, pidl); - /* check a bogus user token: */ - pidl = NULL; - hr = pSHGetFolderLocation(NULL, CSIDL_FAVORITES, (HANDLE)2, 0, &pidl); - ok(hr == E_FAIL, - "SHGetFolderLocation(NULL, CSIDL_FAVORITES, 2, 0, &pidl) returned 0x%08x, expected E_FAIL\n", hr); - if (SUCCEEDED(hr)) - IMalloc_Free(pMalloc, pidl); - /* check reserved is not zero: */ - pidl = NULL; - hr = pSHGetFolderLocation(NULL, CSIDL_DESKTOP, NULL, 1, &pidl); - ok(hr == E_INVALIDARG, - "SHGetFolderLocation(NULL, CSIDL_DESKTOP, NULL, 1, &pidl) returned 0x%08x, expected E_INVALIDARG\n", hr); - if (SUCCEEDED(hr)) - IMalloc_Free(pMalloc, pidl); - /* a NULL pidl pointer crashes, so don't test it */ -} - -static void testSHGetSpecialFolderLocationInvalidArgs(void) -{ - LPITEMIDLIST pidl = NULL; - HRESULT hr; - - if (!pSHGetSpecialFolderLocation) return; - - /* SHGetSpecialFolderLocation(NULL, 0, NULL) crashes */ - hr = pSHGetSpecialFolderLocation(NULL, 0xeeee, &pidl); - ok(hr == E_INVALIDARG, - "SHGetSpecialFolderLocation(NULL, 0xeeee, &pidl) returned 0x%08x, " - "expected E_INVALIDARG\n", hr); -} - -static void testSHGetFolderPathInvalidArgs(void) -{ - char path[MAX_PATH]; - HRESULT hr; - - if (!pSHGetFolderPathA) return; - - /* expect 2's a bogus handle, especially since we didn't open it */ - hr = pSHGetFolderPathA(NULL, CSIDL_DESKTOP, (HANDLE)2, - SHGFP_TYPE_DEFAULT, path); - ok(hr == E_FAIL, - "SHGetFolderPathA(NULL, CSIDL_DESKTOP, 2, SHGFP_TYPE_DEFAULT, path) returned 0x%08x, expected E_FAIL\n", hr); - hr = pSHGetFolderPathA(NULL, 0xeeee, NULL, SHGFP_TYPE_DEFAULT, path); - ok(hr == E_INVALIDARG, - "SHGetFolderPathA(NULL, 0xeeee, NULL, SHGFP_TYPE_DEFAULT, path) returned 0x%08x, expected E_INVALIDARG\n", hr); -} - -static void testSHGetSpecialFolderPathInvalidArgs(void) -{ - char path[MAX_PATH]; - BOOL ret; - - if (!pSHGetSpecialFolderPathA) return; - -#if 0 - ret = pSHGetSpecialFolderPathA(NULL, NULL, CSIDL_BITBUCKET, FALSE); - ok(!ret, - "SHGetSpecialFolderPathA(NULL, NULL, CSIDL_BITBUCKET, FALSE) returned TRUE, expected FALSE\n"); -#endif - /* odd but true: calling with a NULL path still succeeds if it's a real - * dir (on some windows platform). on winME it generates exception. - */ - ret = pSHGetSpecialFolderPathA(NULL, path, CSIDL_PROGRAMS, FALSE); - ok(ret, - "SHGetSpecialFolderPathA(NULL, path, CSIDL_PROGRAMS, FALSE) returned FALSE, expected TRUE\n"); - ret = pSHGetSpecialFolderPathA(NULL, path, 0xeeee, FALSE); - ok(!ret, - "SHGetSpecialFolderPathA(NULL, path, 0xeeee, FALSE) returned TRUE, expected FALSE\n"); -} - -static void testApiParameters(void) -{ - testSHGetFolderLocationInvalidArgs(); - testSHGetSpecialFolderLocationInvalidArgs(); - testSHGetFolderPathInvalidArgs(); - testSHGetSpecialFolderPathInvalidArgs(); -} - -/* Returns the folder's PIDL type, or 0xff if one can't be found. */ -static BYTE testSHGetFolderLocation(BOOL optional, int folder) -{ - LPITEMIDLIST pidl; - HRESULT hr; - BYTE ret = 0xff; - - /* treat absence of function as success */ - if (!pSHGetFolderLocation) return TRUE; - - pidl = NULL; - hr = pSHGetFolderLocation(NULL, folder, NULL, 0, &pidl); - ok(SUCCEEDED(hr) || optional, - "SHGetFolderLocation(NULL, %s, NULL, 0, &pidl) failed: 0x%08x\n", getFolderName(folder), hr); - if (SUCCEEDED(hr)) - { - ok(pidl != NULL, - "SHGetFolderLocation(NULL, %s, NULL, 0, &pidl) succeeded, but returned pidl is NULL\n", getFolderName(folder)); - if (pidl) - { - LPITEMIDLIST pidlLast = pILFindLastID(pidl); - - ok(pidlLast != NULL, "%s: ILFindLastID failed\n", - getFolderName(folder)); - if (pidlLast) - ret = pidlLast->mkid.abID[0]; - IMalloc_Free(pMalloc, pidl); - } - } - return ret; -} - -/* Returns the folder's PIDL type, or 0xff if one can't be found. */ -static BYTE testSHGetSpecialFolderLocation(BOOL optional, int folder) -{ - LPITEMIDLIST pidl; - HRESULT hr; - BYTE ret = 0xff; - - /* treat absence of function as success */ - if (!pSHGetSpecialFolderLocation) return TRUE; - - pidl = NULL; - hr = pSHGetSpecialFolderLocation(NULL, folder, &pidl); - ok(SUCCEEDED(hr) || optional, - "SHGetSpecialFolderLocation(NULL, %s, &pidl) failed: 0x%08x\n", getFolderName(folder), hr); - if (SUCCEEDED(hr)) - { - ok(pidl != NULL, - "SHGetSpecialFolderLocation(NULL, %s, &pidl) succeeded, but returned pidl is NULL\n", getFolderName(folder)); - if (pidl) - { - LPITEMIDLIST pidlLast = pILFindLastID(pidl); - - ok(pidlLast != NULL, - "%s: ILFindLastID failed\n", getFolderName(folder)); - if (pidlLast) - ret = pidlLast->mkid.abID[0]; - IMalloc_Free(pMalloc, pidl); - } - } - return ret; -} - -static void testSHGetFolderPath(BOOL optional, int folder) -{ - char path[MAX_PATH]; - HRESULT hr; - - if (!pSHGetFolderPathA) return; - - hr = pSHGetFolderPathA(NULL, folder, NULL, SHGFP_TYPE_CURRENT, path); - ok(SUCCEEDED(hr) || optional, - "SHGetFolderPathA(NULL, %s, NULL, SHGFP_TYPE_CURRENT, path) failed: 0x%08x\n", getFolderName(folder), hr); -} - -static void testSHGetSpecialFolderPath(BOOL optional, int folder) -{ - char path[MAX_PATH]; - BOOL ret; - - if (!pSHGetSpecialFolderPathA) return; - - ret = pSHGetSpecialFolderPathA(NULL, path, folder, FALSE); - if (ret && winetest_interactive) - printf("%s: %s\n", getFolderName(folder), path); - ok(ret || optional, - "SHGetSpecialFolderPathA(NULL, path, %s, FALSE) failed\n", - getFolderName(folder)); -} - -static void testShellValues(const struct shellExpectedValues testEntries[], - int numEntries, BOOL optional) -{ - int i; - - for (i = 0; i < numEntries; i++) - { - BYTE type; - - type = testSHGetFolderLocation(optional, testEntries[i].folder); - ok(type == testEntries[i].pidlType || optional, - "%s has type %d (0x%02x), expected %d (0x%02x)\n", - getFolderName(testEntries[i].folder), type, type, - testEntries[i].pidlType, testEntries[i].pidlType); - type = testSHGetSpecialFolderLocation(optional, testEntries[i].folder); - ok(type == testEntries[i].pidlType || optional, - "%s has type %d (0x%02x), expected %d (0x%02x)\n", - getFolderName(testEntries[i].folder), type, type, - testEntries[i].pidlType, testEntries[i].pidlType); - switch (type) - { - case PT_FOLDER: - case PT_DRIVE: - case PT_DRIVE2: - case PT_IESPECIAL2: - testSHGetFolderPath(optional, testEntries[i].folder); - testSHGetSpecialFolderPath(optional, testEntries[i].folder); - break; - } - } -} - -/* Attempts to verify that the folder path corresponding to the folder CSIDL - * value has the same value as the environment variable with name envVar. - * Doesn't mind if SHGetSpecialFolderPath fails for folder or if envVar isn't - * set in this environment; different OS and shell version behave differently. - * However, if both are present, fails if envVar's value is not the same - * (byte-for-byte) as what SHGetSpecialFolderPath returns. - */ -static void matchSpecialFolderPathToEnv(int folder, const char *envVar) -{ - char path[MAX_PATH]; - - if (!pSHGetSpecialFolderPathA) return; - - if (pSHGetSpecialFolderPathA(NULL, path, folder, FALSE)) - { - char *envVal = getenv(envVar); - - ok(!envVal || !lstrcmpiA(envVal, path), - "%%%s%% does not match SHGetSpecialFolderPath:\n" - "%%%s%% is %s\nSHGetSpecialFolderPath returns %s\n", - envVar, envVar, envVal, path); - } -} - -/* Attempts to match the GUID returned by SHGetFolderLocation for folder with - * GUID. Assumes the type of the returned PIDL is in fact a GUID, but doesn't - * fail if it isn't--that check should already have been done. - * Fails if the returned PIDL is a GUID whose value does not match guid. - */ -static void matchGUID(int folder, const GUID *guid) -{ - LPITEMIDLIST pidl; - HRESULT hr; - - if (!pSHGetFolderLocation) return; - if (!guid) return; - - pidl = NULL; - hr = pSHGetFolderLocation(NULL, folder, NULL, 0, &pidl); - if (SUCCEEDED(hr)) - { - LPITEMIDLIST pidlLast = pILFindLastID(pidl); - - if (pidlLast && (pidlLast->mkid.abID[0] == PT_SHELLEXT || - pidlLast->mkid.abID[0] == PT_GUID)) - { - GUID *shellGuid = (GUID *)(pidlLast->mkid.abID + 2); - - ok(IsEqualIID(shellGuid, guid), - "%s: got GUID %s, expected %s\n", getFolderName(folder), - printGUID(shellGuid), printGUID(guid)); - } - IMalloc_Free(pMalloc, pidl); - } -} - -static void testDesktop(void) -{ - testSHGetFolderPath(FALSE, CSIDL_DESKTOP); - testSHGetSpecialFolderPath(FALSE, CSIDL_DESKTOP); - /* Test the desktop; even though SHITEMID should always contain abID of at - * least one type, when cb is 0 its value is undefined. So don't check - * what the returned type is, just make sure it exists. - */ - testSHGetFolderLocation(FALSE, CSIDL_DESKTOP); - testSHGetSpecialFolderLocation(FALSE, CSIDL_DESKTOP); -} - -static void testPersonal(void) -{ - BYTE type; - - /* The pidl may be a real folder, or a virtual directory, or a drive if the - * home directory is set to the root directory of a drive. - */ - type = testSHGetFolderLocation(FALSE, CSIDL_PERSONAL); - ok(type == PT_FOLDER || type == PT_GUID || type == PT_DRIVE, - "CSIDL_PERSONAL returned invalid type 0x%02x, " - "expected PT_FOLDER or PT_GUID\n", type); - if (type == PT_FOLDER) - testSHGetFolderPath(FALSE, CSIDL_PERSONAL); - type = testSHGetSpecialFolderLocation(FALSE, CSIDL_PERSONAL); - ok(type == PT_FOLDER || type == PT_GUID || type == PT_DRIVE, - "CSIDL_PERSONAL returned invalid type 0x%02x, " - "expected PT_FOLDER or PT_GUID\n", type); - if (type == PT_FOLDER) - testSHGetSpecialFolderPath(FALSE, CSIDL_PERSONAL); -} - -/* Checks the PIDL type of all the known values. */ -static void testPidlTypes(void) -{ - testDesktop(); - testPersonal(); - testShellValues(requiredShellValues, ARRAY_SIZE(requiredShellValues), - FALSE); - testShellValues(optionalShellValues, ARRAY_SIZE(optionalShellValues), - TRUE); -} - -/* Verifies various shell virtual folders have the correct well-known GUIDs. */ -static void testGUIDs(void) -{ - matchGUID(CSIDL_BITBUCKET, &CLSID_RecycleBin); - matchGUID(CSIDL_CONTROLS, &CLSID_ControlPanel); - matchGUID(CSIDL_DRIVES, &CLSID_MyComputer); - matchGUID(CSIDL_INTERNET, &CLSID_Internet); - matchGUID(CSIDL_NETWORK, &CLSID_NetworkPlaces); - matchGUID(CSIDL_PERSONAL, &CLSID_MyDocuments); - matchGUID(CSIDL_COMMON_DOCUMENTS, &CLSID_CommonDocuments); -} - -/* Verifies various shell paths match the environment variables to which they - * correspond. - */ -static void testEnvVars(void) -{ - matchSpecialFolderPathToEnv(CSIDL_PROGRAM_FILES, "ProgramFiles"); - matchSpecialFolderPathToEnv(CSIDL_APPDATA, "APPDATA"); - matchSpecialFolderPathToEnv(CSIDL_PROFILE, "USERPROFILE"); - matchSpecialFolderPathToEnv(CSIDL_WINDOWS, "SystemRoot"); - matchSpecialFolderPathToEnv(CSIDL_WINDOWS, "windir"); - matchSpecialFolderPathToEnv(CSIDL_PROGRAM_FILES_COMMON, - "CommonProgramFiles"); - /* this is only set on Wine, but can't hurt to verify it: */ - matchSpecialFolderPathToEnv(CSIDL_SYSTEM, "winsysdir"); -} - -/* Loosely based on PathRemoveBackslashA from dlls/shlwapi/path.c */ -static BOOL myPathIsRootA(LPCSTR lpszPath) -{ - if (lpszPath && *lpszPath && - lpszPath[1] == ':' && lpszPath[2] == '\\' && lpszPath[3] == '\0') - return TRUE; /* X:\ */ - return FALSE; -} -static LPSTR myPathRemoveBackslashA( LPSTR lpszPath ) -{ - LPSTR szTemp = NULL; - - if(lpszPath) - { - szTemp = CharPrevA(lpszPath, lpszPath + strlen(lpszPath)); - if (!myPathIsRootA(lpszPath) && *szTemp == '\\') - *szTemp = '\0'; - } - return szTemp; -} - -/* Verifies the shell path for CSIDL_WINDOWS matches the return from - * GetWindowsDirectory. If SHGetSpecialFolderPath fails, no harm, no foul--not - * every shell32 version supports CSIDL_WINDOWS. - */ -static void testWinDir(void) -{ - char windowsShellPath[MAX_PATH], windowsDir[MAX_PATH] = { 0 }; - - if (!pSHGetSpecialFolderPathA) return; - - if (pSHGetSpecialFolderPathA(NULL, windowsShellPath, CSIDL_WINDOWS, FALSE)) - { - myPathRemoveBackslashA(windowsShellPath); - GetWindowsDirectoryA(windowsDir, sizeof(windowsDir)); - myPathRemoveBackslashA(windowsDir); - ok(!lstrcmpiA(windowsDir, windowsShellPath), - "GetWindowsDirectory returns %s SHGetSpecialFolderPath returns %s\n", - windowsDir, windowsShellPath); - } -} - -/* Verifies the shell path for CSIDL_SYSTEM and CSIDL_SYSTEMX86 matches the - * return from GetSystemDirectory. If SHGetSpecialFolderPath fails, no harm, - * no foul--not every shell32 version supports CSIDL_SYSTEM. - */ -static void testSystemDir(void) -{ - char systemShellPath[MAX_PATH], systemDir[MAX_PATH] = { 0 }; - - if (!pSHGetSpecialFolderPathA) return; - - GetSystemDirectoryA(systemDir, sizeof(systemDir)); - myPathRemoveBackslashA(systemDir); - if (pSHGetSpecialFolderPathA(NULL, systemShellPath, CSIDL_SYSTEM, FALSE)) - { - myPathRemoveBackslashA(systemShellPath); - ok(!lstrcmpiA(systemDir, systemShellPath), - "GetSystemDirectory returns %s SHGetSpecialFolderPath returns %s\n", - systemDir, systemShellPath); - } - /* check CSIDL_SYSTEMX86; note that this isn't always present, so don't - * worry if it fails - */ - if (pSHGetSpecialFolderPathA(NULL, systemShellPath, CSIDL_SYSTEMX86, FALSE)) - { - myPathRemoveBackslashA(systemShellPath); - ok(!lstrcmpiA(systemDir, systemShellPath), - "GetSystemDirectory returns %s SHGetSpecialFolderPath returns %s\n", - systemDir, systemShellPath); - } -} - -/* Globals used by subprocesses */ -static int myARGC; -static char **myARGV; -static char base[MAX_PATH]; -static char selfname[MAX_PATH]; - -static int init(void) -{ - myARGC = winetest_get_mainargs(&myARGV); - if (!GetCurrentDirectoryA(sizeof(base), base)) return 0; - strcpy(selfname, myARGV[0]); - return 1; -} - -/* Subprocess helper 1: test what happens when CSIDL_FAVORITES is set to a - * nonexistent directory. - */ -static void testNonExistentPath1(void) -{ - HRESULT hr; - LPITEMIDLIST pidl; - char path[MAX_PATH]; - - /* test some failure cases first: */ - hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES, NULL, - SHGFP_TYPE_CURRENT, path); - ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), - "SHGetFolderPath returned 0x%08x, expected 0x80070002\n", hr); - pidl = NULL; - hr = pSHGetFolderLocation(NULL, CSIDL_FAVORITES, NULL, 0, - &pidl); - ok(hr == E_FAIL, - "SHGetFolderLocation returned 0x%08x, expected E_FAIL\n", hr); - if (SUCCEEDED(hr) && pidl) - IMalloc_Free(pMalloc, pidl); - ok(!pSHGetSpecialFolderPathA(NULL, path, CSIDL_FAVORITES, FALSE), - "SHGetSpecialFolderPath succeeded, expected failure\n"); - pidl = NULL; - hr = pSHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &pidl); - ok(hr == E_FAIL, "SHGetFolderLocation returned 0x%08x, expected E_FAIL\n", - hr); - if (SUCCEEDED(hr) && pidl) - IMalloc_Free(pMalloc, pidl); - /* now test success: */ - hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES | CSIDL_FLAG_CREATE, NULL, - SHGFP_TYPE_CURRENT, path); - if (SUCCEEDED(hr)) - { - BOOL ret; - - if (winetest_interactive) - printf("CSIDL_FAVORITES was changed to %s\n", path); - ret = CreateDirectoryA(path, NULL); - ok(!ret, - "CreateDirectoryA succeeded but should have failed " - "with ERROR_ALREADY_EXISTS\n"); - if (!ret) - ok(GetLastError() == ERROR_ALREADY_EXISTS, - "CreateDirectoryA failed with %d, " - "expected ERROR_ALREADY_EXISTS\n", - GetLastError()); - } - ok(SUCCEEDED(hr), - "SHGetFolderPath(NULL, CSIDL_FAVORITES | CSIDL_FLAG_CREATE, " - "NULL, SHGFP_TYPE_CURRENT, path) failed: 0x%08x\n", hr); -} - -/* Subprocess helper 2: make sure SHGetFolderPath still succeeds when the - * original value of CSIDL_FAVORITES is restored. - */ -static void testNonExistentPath2(void) -{ - HRESULT hr; - char path[MAX_PATH]; - - hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES | CSIDL_FLAG_CREATE, NULL, - SHGFP_TYPE_CURRENT, path); - ok(SUCCEEDED(hr), "SHGetFolderPath failed: 0x%08x\n", hr); -} - -static void doChild(const char *arg) -{ - if (arg[0] == '1') - testNonExistentPath1(); - else if (arg[0] == '2') - testNonExistentPath2(); -} - -/* Tests the return values from the various shell functions both with and - * without the use of the CSIDL_FLAG_CREATE flag. This flag only appeared in - * version 5 of the shell, so don't test unless it's at least version 5. - * The test reads a value from the registry, modifies it, calls - * SHGetFolderPath once with the CSIDL_FLAG_CREATE flag, and immediately - * afterward without it. Then it restores the registry and deletes the folder - * that was created. - * One oddity with respect to restoration: shell32 caches somehow, so it needs - * to be reloaded in order to see the correct (restored) value. - * Some APIs unrelated to the ones under test may fail, but I expect they're - * covered by other unit tests; I just print out something about failure to - * help trace what's going on. - */ -static void testNonExistentPath(void) -{ - static const char userShellFolders[] = - "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders"; - char originalPath[MAX_PATH], modifiedPath[MAX_PATH]; - HKEY key; - - if (!pSHGetFolderPathA) return; - if (!pSHGetFolderLocation) return; - if (!pSHGetSpecialFolderPathA) return; - if (!pSHGetSpecialFolderLocation) return; - if (!pSHFileOperationA) return; - if (shellVersion.dwMajorVersion < 5) return; - - if (!RegOpenKeyExA(HKEY_CURRENT_USER, userShellFolders, 0, KEY_ALL_ACCESS, - &key)) - { - DWORD len, type; - - len = sizeof(originalPath); - if (!RegQueryValueExA(key, "Favorites", NULL, &type, - (LPBYTE)&originalPath, &len)) - { - size_t len = strlen(originalPath); - - memcpy(modifiedPath, originalPath, len); - modifiedPath[len++] = '2'; - modifiedPath[len++] = '\0'; - if (winetest_interactive) - printf("Changing CSIDL_FAVORITES to %s\n", modifiedPath); - if (!RegSetValueExA(key, "Favorites", 0, type, - (LPBYTE)modifiedPath, len)) - { - char buffer[MAX_PATH+20]; - STARTUPINFOA startup; - PROCESS_INFORMATION info; - HRESULT hr; - - sprintf(buffer, "%s tests/shellpath.c 1", selfname); - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.dwFlags = SW_SHOWNORMAL; - CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, - &startup, &info); - winetest_wait_child_process( info.hProcess ); - - /* Query the path to be able to delete it below */ - hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES, NULL, - SHGFP_TYPE_CURRENT, modifiedPath); - ok(SUCCEEDED(hr), "SHGetFolderPathA failed: 0x%08x\n", hr); - - /* restore original values: */ - if (winetest_interactive) - printf("Restoring CSIDL_FAVORITES to %s\n", originalPath); - RegSetValueExA(key, "Favorites", 0, type, (LPBYTE) originalPath, - strlen(originalPath) + 1); - RegFlushKey(key); - - sprintf(buffer, "%s tests/shellpath.c 2", selfname); - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.dwFlags = SW_SHOWNORMAL; - CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, - &startup, &info); - ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, - "child process termination\n"); - - strcpy(buffer, modifiedPath); - strcat(buffer, "\\desktop.ini"); - DeleteFileA(buffer); - RemoveDirectoryA(modifiedPath); - } - } - else if (winetest_interactive) - printf("RegQueryValueExA(key, Favorites, ...) failed\n"); - if (key) - RegCloseKey(key); - } - else if (winetest_interactive) - printf("RegOpenKeyExA(HKEY_CURRENT_USER, %s, ...) failed\n", - userShellFolders); -} - -START_TEST(shellpath) -{ - if (!init()) return; - - loadShell32(); - - if (myARGC >= 3) - doChild(myARGV[2]); - else - { - /* first test various combinations of parameters: */ - testApiParameters(); - - /* check known values: */ - testPidlTypes(); - testGUIDs(); - testEnvVars(); - testWinDir(); - testSystemDir(); - testNonExistentPath(); - } -} diff --git a/rostests/winetests/shell32/shfldr_netplaces.c b/rostests/winetests/shell32/shfldr_netplaces.c deleted file mode 100644 index a2619f0b1b3..00000000000 --- a/rostests/winetests/shell32/shfldr_netplaces.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Tests for My Network Places shell folder - * - * Copyright 2008 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 - */ - -#include -#include - -#define COBJMACROS -#define WIN32_LEAN_AND_MEAN -#include -#include "shellapi.h" -#include "shlobj.h" - -#include "wine/test.h" - -static void test_parse_for_entire_network(void) -{ - static const WCHAR entire_network_path[] = { - ':',':','{','2','0','8','D','2','C','6','0','-','3','A','E','A','-', - '1','0','6','9','-','A','2','D','7','-','0','8','0','0','2','B','3','0','3','0','9','D', - '}','\\','E','n','t','i','r','e','N','e','t','w','o','r','k',0 }; - IShellFolder *psfDesktop; - HRESULT hr; - DWORD eaten = 0xdeadbeef; - LPITEMIDLIST pidl; - DWORD attr = ~0; - DWORD expected_attr; - - hr = SHGetDesktopFolder(&psfDesktop); - ok(hr == S_OK, "SHGetDesktopFolder failed with error 0x%x\n", hr); - - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, (LPWSTR)entire_network_path, &eaten, &pidl, &attr); - ok(hr == S_OK, "IShellFolder_ParseDisplayName failed with error 0x%x\n", hr); - todo_wine - ok(eaten == 0xdeadbeef, "eaten should not have been set to %u\n", eaten); - expected_attr = SFGAO_HASSUBFOLDER|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR|SFGAO_STORAGEANCESTOR|SFGAO_HASPROPSHEET|SFGAO_CANLINK; - todo_wine - ok(attr == expected_attr, "attr should be 0x%x, not 0x%x\n", expected_attr, attr); - - ILFree(pidl); -} - - -START_TEST(shfldr_netplaces) -{ - test_parse_for_entire_network(); -} diff --git a/rostests/winetests/shell32/shlexec.c b/rostests/winetests/shell32/shlexec.c deleted file mode 100755 index 4b1bf1b6483..00000000000 --- a/rostests/winetests/shell32/shlexec.c +++ /dev/null @@ -1,1599 +0,0 @@ -/* - * Unit test of the ShellExecute function. - * - * Copyright 2005 Francois Gouget 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 - */ - -/* TODO: - * - test the default verb selection - * - test selection of an alternate class - * - try running executables in more ways - * - try passing arguments to executables - * - ShellExecute("foo.shlexec") with no path should work if foo.shlexec is - * in the PATH - * - test associations that use %l, %L or "%1" instead of %1 - * - we may want to test ShellExecuteEx() instead of ShellExecute() - * and then we could also check its return value - * - ShellExecuteEx() also calls SetLastError() with meaningful values which - * we could check - */ - -#include -#include - -/* Needed to get SEE_MASK_NOZONECHECKS with the PSDK */ -#define NTDDI_WINXPSP1 0x05010100 -#define NTDDI_VERSION NTDDI_WINXPSP1 - -#include "wtypes.h" -#include "winbase.h" -#include "windef.h" -#include "shellapi.h" -#include "shlwapi.h" -#include "wine/test.h" - -#include "shell32_test.h" - - -static char argv0[MAX_PATH]; -static int myARGC; -static char** myARGV; -static char tmpdir[MAX_PATH]; -static char child_file[MAX_PATH]; -static DLLVERSIONINFO dllver; - - -/*** - * - * ShellExecute wrappers - * - ***/ -static void dump_child(void); - -static HANDLE hEvent; -static void init_event(const char* child_file) -{ - char* event_name; - event_name=strrchr(child_file, '\\')+1; - hEvent=CreateEvent(NULL, FALSE, FALSE, event_name); -} - -static void strcat_param(char* str, const char* param) -{ - if (param!=NULL) - { - strcat(str, "\""); - strcat(str, param); - strcat(str, "\""); - } - else - { - strcat(str, "null"); - } -} - -static char shell_call[2048]=""; -static int shell_execute(LPCSTR operation, LPCSTR file, LPCSTR parameters, LPCSTR directory) -{ - int rc; - - strcpy(shell_call, "ShellExecute("); - strcat_param(shell_call, operation); - strcat(shell_call, ", "); - strcat_param(shell_call, file); - strcat(shell_call, ", "); - strcat_param(shell_call, parameters); - strcat(shell_call, ", "); - strcat_param(shell_call, directory); - strcat(shell_call, ")"); - if (winetest_debug > 1) - trace("%s\n", shell_call); - - DeleteFile(child_file); - SetLastError(0xcafebabe); - - /* FIXME: We cannot use ShellExecuteEx() here because if there is no - * association it displays the 'Open With' dialog and I could not find - * a flag to prevent this. - */ - rc=(int)ShellExecute(NULL, operation, file, parameters, directory, - SW_SHOWNORMAL); - - if (rc > 32) - { - int wait_rc; - wait_rc=WaitForSingleObject(hEvent, 5000); - ok(wait_rc==WAIT_OBJECT_0, "WaitForSingleObject returned %d\n", wait_rc); - } - /* The child process may have changed the result file, so let profile - * functions know about it - */ - WritePrivateProfileStringA(NULL, NULL, NULL, child_file); - if (rc > 32) - dump_child(); - - return rc; -} - -static int shell_execute_ex(DWORD mask, LPCSTR operation, LPCSTR file, - LPCSTR parameters, LPCSTR directory) -{ - SHELLEXECUTEINFO sei; - BOOL success; - int rc; - - strcpy(shell_call, "ShellExecuteEx("); - strcat_param(shell_call, operation); - strcat(shell_call, ", "); - strcat_param(shell_call, file); - strcat(shell_call, ", "); - strcat_param(shell_call, parameters); - strcat(shell_call, ", "); - strcat_param(shell_call, directory); - strcat(shell_call, ")"); - if (winetest_debug > 1) - trace("%s\n", shell_call); - - sei.cbSize=sizeof(sei); - sei.fMask=SEE_MASK_NOCLOSEPROCESS | mask; - sei.hwnd=NULL; - sei.lpVerb=operation; - sei.lpFile=file; - sei.lpParameters=parameters; - sei.lpDirectory=directory; - sei.nShow=SW_SHOWNORMAL; - sei.hInstApp=NULL; /* Out */ - sei.lpIDList=NULL; - sei.lpClass=NULL; - sei.hkeyClass=NULL; - sei.dwHotKey=0; - U(sei).hIcon=NULL; - sei.hProcess=NULL; /* Out */ - - DeleteFile(child_file); - SetLastError(0xcafebabe); - success=ShellExecuteEx(&sei); - rc=(int)sei.hInstApp; - ok((success && rc > 32) || (!success && rc <= 32), - "%s rc=%d and hInstApp=%d is not allowed\n", shell_call, success, rc); - - if (rc > 32) - { - int wait_rc; - if (sei.hProcess!=NULL) - { - wait_rc=WaitForSingleObject(sei.hProcess, 5000); - ok(wait_rc==WAIT_OBJECT_0, "WaitForSingleObject(hProcess) returned %d\n", wait_rc); - } - wait_rc=WaitForSingleObject(hEvent, 5000); - ok(wait_rc==WAIT_OBJECT_0, "WaitForSingleObject returned %d\n", wait_rc); - } - /* The child process may have changed the result file, so let profile - * functions know about it - */ - WritePrivateProfileStringA(NULL, NULL, NULL, child_file); - if (rc > 32) - dump_child(); - - return rc; -} - - - -/*** - * - * Functions to create / delete associations wrappers - * - ***/ - -static void create_test_association(const char* extension) -{ - HKEY hkey, hkey_shell; - char class[MAX_PATH]; - LONG rc; - - sprintf(class, "shlexec%s", extension); - rc=RegCreateKeyEx(HKEY_CLASSES_ROOT, extension, 0, NULL, 0, KEY_SET_VALUE, - NULL, &hkey, NULL); - assert(rc==ERROR_SUCCESS); - rc=RegSetValueEx(hkey, NULL, 0, REG_SZ, (LPBYTE) class, strlen(class)+1); - assert(rc==ERROR_SUCCESS); - CloseHandle(hkey); - - rc=RegCreateKeyEx(HKEY_CLASSES_ROOT, class, 0, NULL, 0, - KEY_CREATE_SUB_KEY | KEY_ENUMERATE_SUB_KEYS, NULL, &hkey, NULL); - assert(rc==ERROR_SUCCESS); - rc=RegCreateKeyEx(hkey, "shell", 0, NULL, 0, - KEY_CREATE_SUB_KEY, NULL, &hkey_shell, NULL); - assert(rc==ERROR_SUCCESS); - CloseHandle(hkey); - CloseHandle(hkey_shell); -} - -/* Based on RegDeleteTreeW from dlls/advapi32/registry.c */ -static LSTATUS myRegDeleteTreeA(HKEY hKey, LPCSTR lpszSubKey) -{ - LONG ret; - DWORD dwMaxSubkeyLen, dwMaxValueLen; - DWORD dwMaxLen, dwSize; - CHAR szNameBuf[MAX_PATH], *lpszName = szNameBuf; - HKEY hSubKey = hKey; - - if(lpszSubKey) - { - ret = RegOpenKeyExA(hKey, lpszSubKey, 0, KEY_READ, &hSubKey); - if (ret) return ret; - } - - /* Get highest length for keys, values */ - ret = RegQueryInfoKeyA(hSubKey, NULL, NULL, NULL, NULL, - &dwMaxSubkeyLen, NULL, NULL, &dwMaxValueLen, NULL, NULL, NULL); - if (ret) goto cleanup; - - dwMaxSubkeyLen++; - dwMaxValueLen++; - dwMaxLen = max(dwMaxSubkeyLen, dwMaxValueLen); - if (dwMaxLen > sizeof(szNameBuf)/sizeof(CHAR)) - { - /* Name too big: alloc a buffer for it */ - if (!(lpszName = HeapAlloc( GetProcessHeap(), 0, dwMaxLen*sizeof(CHAR)))) - { - ret = ERROR_NOT_ENOUGH_MEMORY; - goto cleanup; - } - } - - - /* Recursively delete all the subkeys */ - while (TRUE) - { - dwSize = dwMaxLen; - if (RegEnumKeyExA(hSubKey, 0, lpszName, &dwSize, NULL, - NULL, NULL, NULL)) break; - - ret = myRegDeleteTreeA(hSubKey, lpszName); - if (ret) goto cleanup; - } - - if (lpszSubKey) - ret = RegDeleteKeyA(hKey, lpszSubKey); - else - while (TRUE) - { - dwSize = dwMaxLen; - if (RegEnumValueA(hKey, 0, lpszName, &dwSize, - NULL, NULL, NULL, NULL)) break; - - ret = RegDeleteValueA(hKey, lpszName); - if (ret) goto cleanup; - } - -cleanup: - /* Free buffer if allocated */ - if (lpszName != szNameBuf) - HeapFree( GetProcessHeap(), 0, lpszName); - if(lpszSubKey) - RegCloseKey(hSubKey); - return ret; -} - -static void delete_test_association(const char* extension) -{ - char class[MAX_PATH]; - - sprintf(class, "shlexec%s", extension); - myRegDeleteTreeA(HKEY_CLASSES_ROOT, class); - myRegDeleteTreeA(HKEY_CLASSES_ROOT, extension); -} - -static void create_test_verb_dde(const char* extension, const char* verb, - int rawcmd, const char* cmdtail, const char *ddeexec, - const char *application, const char *topic, - const char *ifexec) -{ - HKEY hkey_shell, hkey_verb, hkey_cmd; - char shell[MAX_PATH]; - char* cmd; - LONG rc; - - sprintf(shell, "shlexec%s\\shell", extension); - rc=RegOpenKeyEx(HKEY_CLASSES_ROOT, shell, 0, - KEY_CREATE_SUB_KEY, &hkey_shell); - assert(rc==ERROR_SUCCESS); - rc=RegCreateKeyEx(hkey_shell, verb, 0, NULL, 0, KEY_CREATE_SUB_KEY, - NULL, &hkey_verb, NULL); - assert(rc==ERROR_SUCCESS); - rc=RegCreateKeyEx(hkey_verb, "command", 0, NULL, 0, KEY_SET_VALUE, - NULL, &hkey_cmd, NULL); - assert(rc==ERROR_SUCCESS); - - if (rawcmd) - { - rc=RegSetValueEx(hkey_cmd, NULL, 0, REG_SZ, (LPBYTE)cmdtail, strlen(cmdtail)+1); - } - else - { - cmd=malloc(strlen(argv0)+10+strlen(child_file)+2+strlen(cmdtail)+1); - sprintf(cmd,"%s shlexec \"%s\" %s", argv0, child_file, cmdtail); - rc=RegSetValueEx(hkey_cmd, NULL, 0, REG_SZ, (LPBYTE)cmd, strlen(cmd)+1); - assert(rc==ERROR_SUCCESS); - free(cmd); - } - - if (ddeexec) - { - HKEY hkey_ddeexec, hkey_application, hkey_topic, hkey_ifexec; - - rc=RegCreateKeyEx(hkey_verb, "ddeexec", 0, NULL, 0, KEY_SET_VALUE | - KEY_CREATE_SUB_KEY, NULL, &hkey_ddeexec, NULL); - assert(rc==ERROR_SUCCESS); - rc=RegSetValueEx(hkey_ddeexec, NULL, 0, REG_SZ, (LPBYTE)ddeexec, - strlen(ddeexec)+1); - assert(rc==ERROR_SUCCESS); - if (application) - { - rc=RegCreateKeyEx(hkey_ddeexec, "application", 0, NULL, 0, KEY_SET_VALUE, - NULL, &hkey_application, NULL); - assert(rc==ERROR_SUCCESS); - rc=RegSetValueEx(hkey_application, NULL, 0, REG_SZ, (LPBYTE)application, - strlen(application)+1); - assert(rc==ERROR_SUCCESS); - CloseHandle(hkey_application); - } - if (topic) - { - rc=RegCreateKeyEx(hkey_ddeexec, "topic", 0, NULL, 0, KEY_SET_VALUE, - NULL, &hkey_topic, NULL); - assert(rc==ERROR_SUCCESS); - rc=RegSetValueEx(hkey_topic, NULL, 0, REG_SZ, (LPBYTE)topic, - strlen(topic)+1); - assert(rc==ERROR_SUCCESS); - CloseHandle(hkey_topic); - } - if (ifexec) - { - rc=RegCreateKeyEx(hkey_ddeexec, "ifexec", 0, NULL, 0, KEY_SET_VALUE, - NULL, &hkey_ifexec, NULL); - assert(rc==ERROR_SUCCESS); - rc=RegSetValueEx(hkey_ifexec, NULL, 0, REG_SZ, (LPBYTE)ifexec, - strlen(ifexec)+1); - assert(rc==ERROR_SUCCESS); - CloseHandle(hkey_ifexec); - } - CloseHandle(hkey_ddeexec); - } - - CloseHandle(hkey_shell); - CloseHandle(hkey_verb); - CloseHandle(hkey_cmd); -} - -static void create_test_verb(const char* extension, const char* verb, - int rawcmd, const char* cmdtail) -{ - create_test_verb_dde(extension, verb, rawcmd, cmdtail, NULL, NULL, - NULL, NULL); -} - -/*** - * - * Functions to check that the child process was started just right - * (borrowed from dlls/kernel32/tests/process.c) - * - ***/ - -static const char* encodeA(const char* str) -{ - static char encoded[2*1024+1]; - char* ptr; - size_t len,i; - - if (!str) return ""; - len = strlen(str) + 1; - if (len >= sizeof(encoded)/2) - { - fprintf(stderr, "string is too long!\n"); - assert(0); - } - ptr = encoded; - for (i = 0; i < len; i++) - sprintf(&ptr[i * 2], "%02x", (unsigned char)str[i]); - ptr[2 * len] = '\0'; - return ptr; -} - -static unsigned decode_char(char c) -{ - if (c >= '0' && c <= '9') return c - '0'; - if (c >= 'a' && c <= 'f') return c - 'a' + 10; - assert(c >= 'A' && c <= 'F'); - return c - 'A' + 10; -} - -static char* decodeA(const char* str) -{ - static char decoded[1024]; - char* ptr; - size_t len,i; - - len = strlen(str) / 2; - if (!len--) return NULL; - if (len >= sizeof(decoded)) - { - fprintf(stderr, "string is too long!\n"); - assert(0); - } - ptr = decoded; - for (i = 0; i < len; i++) - ptr[i] = (decode_char(str[2 * i]) << 4) | decode_char(str[2 * i + 1]); - ptr[len] = '\0'; - return ptr; -} - -static void childPrintf(HANDLE h, const char* fmt, ...) -{ - va_list valist; - char buffer[1024]; - DWORD w; - - va_start(valist, fmt); - vsprintf(buffer, fmt, valist); - va_end(valist); - WriteFile(h, buffer, strlen(buffer), &w, NULL); -} - -static void doChild(int argc, char** argv) -{ - char* filename; - HANDLE hFile; - int i; - - filename=argv[2]; - hFile=CreateFileA(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); - if (hFile == INVALID_HANDLE_VALUE) - return; - - /* Arguments */ - childPrintf(hFile, "[Arguments]\r\n"); - if (winetest_debug > 2) - trace("argcA=%d\n", argc); - childPrintf(hFile, "argcA=%d\r\n", argc); - for (i = 0; i < argc; i++) - { - if (winetest_debug > 2) - trace("argvA%d=%s\n", i, argv[i]); - childPrintf(hFile, "argvA%d=%s\r\n", i, encodeA(argv[i])); - } - CloseHandle(hFile); - - init_event(filename); - SetEvent(hEvent); - CloseHandle(hEvent); -} - -static char* getChildString(const char* sect, const char* key) -{ - char buf[1024]; - char* ret; - - GetPrivateProfileStringA(sect, key, "-", buf, sizeof(buf), child_file); - if (buf[0] == '\0' || (buf[0] == '-' && buf[1] == '\0')) return NULL; - assert(!(strlen(buf) & 1)); - ret = decodeA(buf); - return ret; -} - -static void dump_child(void) -{ - if (winetest_debug > 1) - { - char key[18]; - char* str; - int i, c; - - c=GetPrivateProfileIntA("Arguments", "argcA", -1, child_file); - trace("argcA=%d\n",c); - for (i=0;ibasename) - { - sprintf(filename, test->basename, tmpdir); - if (strchr(filename, '/')) - { - c=filename; - while (*c) - { - if (*c=='\\') - *c='/'; - c++; - } - } - if ((test->todo & 0x40)==0) - { - rc=shell_execute(test->verb, filename, NULL, NULL); - } - else - { - char quoted[MAX_PATH + 2]; - sprintf(quoted, "\"%s\"", filename); - rc=shell_execute(test->verb, quoted, NULL, NULL); - } - if (rc > 32) - rc=33; - if ((test->todo & 0x1)==0) - { - ok(rc==test->rc, "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - else todo_wine - { - ok(rc==test->rc, "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - if (rc == 33) - { - const char* verb; - if ((test->todo & 0x2)==0) - { - okChildInt("argcA", 5); - } - else todo_wine - { - okChildInt("argcA", 5); - } - verb=(test->verb ? test->verb : "Open"); - if ((test->todo & 0x4)==0) - { - okChildString("argvA3", verb); - } - else todo_wine - { - okChildString("argvA3", verb); - } - if ((test->todo & 0x8)==0) - { - okChildPath("argvA4", filename); - } - else todo_wine - { - okChildPath("argvA4", filename); - } - } - test++; - } - - test=noquotes_tests; - while (test->basename) - { - sprintf(filename, test->basename, tmpdir); - rc=shell_execute(test->verb, filename, NULL, NULL); - if (rc > 32) - rc=33; - if ((test->todo & 0x1)==0) - { - ok(rc==test->rc, "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - else todo_wine - { - ok(rc==test->rc, "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - if (rc==0) - { - int count; - const char* verb; - char* str; - - verb=(test->verb ? test->verb : "Open"); - if ((test->todo & 0x4)==0) - { - okChildString("argvA3", verb); - } - else todo_wine - { - okChildString("argvA3", verb); - } - - count=4; - str=filename; - while (1) - { - char attrib[18]; - char* space; - space=strchr(str, ' '); - if (space) - *space='\0'; - sprintf(attrib, "argvA%d", count); - if ((test->todo & 0x8)==0) - { - okChildPath(attrib, str); - } - else todo_wine - { - okChildPath(attrib, str); - } - count++; - if (!space) - break; - str=space+1; - } - if ((test->todo & 0x2)==0) - { - okChildInt("argcA", count); - } - else todo_wine - { - okChildInt("argcA", count); - } - } - test++; - } - - if (dllver.dwMajorVersion != 0) - { - /* The more recent versions of shell32.dll accept quoted filenames - * while older ones (e.g. 4.00) don't. Still we want to test this - * because IE 6 depends on the new behavior. - * One day we may need to check the exact version of the dll but for - * now making sure DllGetVersion() is present is sufficient. - */ - sprintf(filename, "\"%s\\test file.shlexec\"", tmpdir); - rc=shell_execute(NULL, filename, NULL, NULL); - ok(rc > 32, "%s failed: rc=%d err=%d\n", shell_call, rc, - GetLastError()); - okChildInt("argcA", 5); - okChildString("argvA3", "Open"); - sprintf(filename, "%s\\test file.shlexec", tmpdir); - okChildPath("argvA4", filename); - } -} - -static void test_find_executable(void) -{ - char filename[MAX_PATH]; - char command[MAX_PATH]; - const filename_tests_t* test; - int rc; - - create_test_association(".sfe"); - create_test_verb(".sfe", "Open", 1, "%1"); - - /* Don't test FindExecutable(..., NULL), it always crashes */ - - strcpy(command, "your word"); - rc=(int)FindExecutableA(NULL, NULL, command); - ok(rc == SE_ERR_FNF || rc > 32 /* nt4 */, "FindExecutable(NULL) returned %d\n", rc); - ok(strcmp(command, "your word") != 0, "FindExecutable(NULL) returned command=[%s]\n", command); - - strcpy(command, "your word"); - rc=(int)FindExecutableA(tmpdir, NULL, command); - ok(rc == SE_ERR_NOASSOC /* >= win2000 */ || rc > 32 /* win98, nt4 */, "FindExecutable(NULL) returned %d\n", rc); - ok(strcmp(command, "your word") != 0, "FindExecutable(NULL) returned command=[%s]\n", command); - - sprintf(filename, "%s\\test file.sfe", tmpdir); - rc=(int)FindExecutableA(filename, NULL, command); - ok(rc > 32, "FindExecutable(%s) returned %d\n", filename, rc); - /* Depending on the platform, command could be '%1' or 'test file.sfe' */ - - rc=(int)FindExecutableA("test file.sfe", tmpdir, command); - ok(rc > 32, "FindExecutable(%s) returned %d\n", filename, rc); - - rc=(int)FindExecutableA("test file.sfe", NULL, command); - todo_wine ok(rc == SE_ERR_FNF, "FindExecutable(%s) returned %d\n", filename, rc); - - delete_test_association(".sfe"); - - create_test_association(".shl"); - create_test_verb(".shl", "Open", 0, "Open"); - - sprintf(filename, "%s\\test file.shl", tmpdir); - rc=(int)FindExecutableA(filename, NULL, command); - ok(rc == SE_ERR_FNF /* NT4 */ || rc > 32, "FindExecutable(%s) returned %d\n", filename, rc); - - sprintf(filename, "%s\\test file.shlfoo", tmpdir); - rc=(int)FindExecutableA(filename, NULL, command); - - delete_test_association(".shl"); - - if (rc > 32) - { - /* On Windows XP and 2003 FindExecutable() is completely broken. - * Probably what it does is convert the filename to 8.3 format, - * which as a side effect converts the '.shlfoo' extension to '.shl', - * and then tries to find an association for '.shl'. This means it - * will normally fail on most extensions with more than 3 characters, - * like '.mpeg', etc. - * Also it means we cannot do any other test. - */ - trace("FindExecutable() is broken -> skipping 4+ character extension tests\n"); - return; - } - - test=filename_tests; - while (test->basename) - { - sprintf(filename, test->basename, tmpdir); - if (strchr(filename, '/')) - { - char* c; - c=filename; - while (*c) - { - if (*c=='\\') - *c='/'; - c++; - } - } - /* Win98 does not '\0'-terminate command! */ - memset(command, '\0', sizeof(command)); - rc=(int)FindExecutableA(filename, NULL, command); - if (rc > 32) - rc=33; - if ((test->todo & 0x10)==0) - { - ok(rc==test->rc, "FindExecutable(%s) failed: rc=%d\n", filename, rc); - } - else todo_wine - { - ok(rc==test->rc, "FindExecutable(%s) failed: rc=%d\n", filename, rc); - } - if (rc > 32) - { - int equal; - equal=strcmp(command, argv0) == 0 || - /* NT4 returns an extra 0x8 character! */ - (strlen(command) == strlen(argv0)+1 && strncmp(command, argv0, strlen(argv0)) == 0); - if ((test->todo & 0x20)==0) - { - ok(equal, "FindExecutable(%s) returned command='%s' instead of '%s'\n", - filename, command, argv0); - } - else todo_wine - { - ok(equal, "FindExecutable(%s) returned command='%s' instead of '%s'\n", - filename, command, argv0); - } - } - test++; - } -} - - -static filename_tests_t lnk_tests[]= -{ - /* Pass bad / nonexistent filenames as a parameter */ - {NULL, "%s\\nonexistent.shlexec", 0xa, 33}, - {NULL, "%s\\nonexistent.noassoc", 0xa, 33}, - - /* Pass regular paths as a parameter */ - {NULL, "%s\\test file.shlexec", 0xa, 33}, - {NULL, "%s/%%nasty%% $file.shlexec", 0xa, 33}, - - /* Pass filenames with no association as a parameter */ - {NULL, "%s\\test file.noassoc", 0xa, 33}, - - {NULL, NULL, 0} -}; - -static void test_lnks(void) -{ - char filename[MAX_PATH]; - char params[MAX_PATH]; - const filename_tests_t* test; - int rc; - - sprintf(filename, "%s\\test_shortcut_shlexec.lnk", tmpdir); - rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, filename, NULL, NULL); - ok(rc > 32, "%s failed: rc=%d err=%d\n", shell_call, rc, - GetLastError()); - okChildInt("argcA", 5); - okChildString("argvA3", "Open"); - sprintf(filename, "%s\\test file.shlexec", tmpdir); - okChildPath("argvA4", filename); - - sprintf(filename, "%s\\test_shortcut_exe.lnk", tmpdir); - rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, filename, NULL, NULL); - ok(rc > 32, "%s failed: rc=%d err=%d\n", shell_call, rc, - GetLastError()); - okChildInt("argcA", 4); - okChildString("argvA3", "Lnk"); - - if (dllver.dwMajorVersion>=6) - { - char* c; - /* Recent versions of shell32.dll accept '/'s in shortcut paths. - * Older versions don't or are quite buggy in this regard. - */ - sprintf(filename, "%s\\test_shortcut_exe.lnk", tmpdir); - c=filename; - while (*c) - { - if (*c=='\\') - *c='/'; - c++; - } - rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, filename, NULL, NULL); - ok(rc > 32, "%s failed: rc=%d err=%d\n", shell_call, rc, - GetLastError()); - okChildInt("argcA", 4); - okChildString("argvA3", "Lnk"); - } - - sprintf(filename, "%s\\test_shortcut_exe.lnk", tmpdir); - test=lnk_tests; - while (test->basename) - { - params[0]='\"'; - sprintf(params+1, test->basename, tmpdir); - strcat(params,"\""); - rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, filename, params, - NULL); - if (rc > 32) - rc=33; - if ((test->todo & 0x1)==0) - { - ok(rc==test->rc, "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - else todo_wine - { - ok(rc==test->rc, "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - if (rc==0) - { - if ((test->todo & 0x2)==0) - { - okChildInt("argcA", 5); - } - else - { - okChildInt("argcA", 5); - } - if ((test->todo & 0x4)==0) - { - okChildString("argvA3", "Lnk"); - } - else todo_wine - { - okChildString("argvA3", "Lnk"); - } - sprintf(params, test->basename, tmpdir); - if ((test->todo & 0x8)==0) - { - okChildPath("argvA4", params); - } - else - { - okChildPath("argvA4", params); - } - } - test++; - } -} - - -static void test_exes(void) -{ - char filename[MAX_PATH]; - char params[1024]; - int rc; - - sprintf(params, "shlexec \"%s\" Exec", child_file); - - /* We need NOZONECHECKS on Win2003 to block a dialog */ - rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, argv0, params, - NULL); - ok(rc > 32, "%s returned %d\n", shell_call, rc); - okChildInt("argcA", 4); - okChildString("argvA3", "Exec"); - - sprintf(filename, "%s\\test file.noassoc", tmpdir); - if (CopyFile(argv0, filename, FALSE)) - { - rc=shell_execute(NULL, filename, params, NULL); - todo_wine { - ok(rc==SE_ERR_NOASSOC, "%s succeeded: rc=%d\n", shell_call, rc); - } - } -} - -static void test_exes_long(void) -{ - char filename[MAX_PATH]; - char params[2024]; - char longparam[MAX_PATH]; - int rc; - - for (rc = 0; rc < MAX_PATH; rc++) - longparam[rc]='a'+rc%26; - longparam[MAX_PATH-1]=0; - - - sprintf(params, "shlexec \"%s\" %s", child_file,longparam); - - /* We need NOZONECHECKS on Win2003 to block a dialog */ - rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, argv0, params, - NULL); - ok(rc > 32, "%s returned %d\n", shell_call, rc); - okChildInt("argcA", 4); - okChildString("argvA3", longparam); - - sprintf(filename, "%s\\test file.noassoc", tmpdir); - if (CopyFile(argv0, filename, FALSE)) - { - rc=shell_execute(NULL, filename, params, NULL); - todo_wine { - ok(rc==SE_ERR_NOASSOC, "%s succeeded: rc=%d\n", shell_call, rc); - } - } -} - -typedef struct -{ - const char* command; - const char* ddeexec; - const char* application; - const char* topic; - const char* ifexec; - int expectedArgs; - const char* expectedDdeExec; - int todo; - int rc; -} dde_tests_t; - -static dde_tests_t dde_tests[] = -{ - /* Test passing and not passing command-line - * argument, no DDE */ - {"", NULL, NULL, NULL, NULL, FALSE, "", 0x0, 33}, - {"\"%1\"", NULL, NULL, NULL, NULL, TRUE, "", 0x0, 33}, - - /* Test passing and not passing command-line - * argument, with DDE */ - {"", "[open(\"%1\")]", "shlexec", "dde", NULL, FALSE, "[open(\"%s\")]", 0x0, 33}, - {"\"%1\"", "[open(\"%1\")]", "shlexec", "dde", NULL, TRUE, "[open(\"%s\")]", 0x0, 33}, - - /* Test unquoted %1 in command and ddeexec - * (test filename has space) */ - {"%1", "[open(%1)]", "shlexec", "dde", NULL, 2, "[open(%s)]", 0x0, 33}, - - /* Test ifexec precedence over ddeexec */ - {"", "[open(\"%1\")]", "shlexec", "dde", "[ifexec(\"%1\")]", FALSE, "[ifexec(\"%s\")]", 0x0, 33}, - - /* Test default DDE topic */ - {"", "[open(\"%1\")]", "shlexec", NULL, NULL, FALSE, "[open(\"%s\")]", 0x0, 33}, - - /* Test default DDE application */ - {"", "[open(\"%1\")]", NULL, "dde", NULL, FALSE, "[open(\"%s\")]", 0x0, 33}, - - {NULL, NULL, NULL, NULL, NULL, 0, 0x0, 0} -}; - -static DWORD ddeInst; -static HSZ hszTopic; -static char ddeExec[MAX_PATH], ddeApplication[MAX_PATH]; -static BOOL denyNextConnection; - -static HDDEDATA CALLBACK ddeCb(UINT uType, UINT uFmt, HCONV hConv, - HSZ hsz1, HSZ hsz2, HDDEDATA hData, - ULONG_PTR dwData1, ULONG_PTR dwData2) -{ - DWORD size = 0; - - if (winetest_debug > 2) - trace("dde_cb: %04x, %04x, %p, %p, %p, %p, %08lx, %08lx\n", - uType, uFmt, hConv, hsz1, hsz2, hData, dwData1, dwData2); - - switch (uType) - { - case XTYP_CONNECT: - if (!DdeCmpStringHandles(hsz1, hszTopic)) - { - if (denyNextConnection) - denyNextConnection = FALSE; - else - { - size = DdeQueryString(ddeInst, hsz2, ddeApplication, MAX_PATH, CP_WINANSI); - assert(size < MAX_PATH); - return (HDDEDATA)TRUE; - } - } - return (HDDEDATA)FALSE; - - case XTYP_EXECUTE: - size = DdeGetData(hData, (LPBYTE)ddeExec, MAX_PATH, 0L); - assert(size < MAX_PATH); - DdeFreeDataHandle(hData); - return (HDDEDATA)DDE_FACK; - - default: - return NULL; - } -} - -typedef struct -{ - char *filename; - DWORD threadIdParent; -} dde_thread_info_t; - -static DWORD CALLBACK ddeThread(LPVOID arg) -{ - dde_thread_info_t *info = (dde_thread_info_t *)arg; - assert(info && info->filename); - PostThreadMessage(info->threadIdParent, - WM_QUIT, - shell_execute_ex(SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI, NULL, info->filename, NULL, NULL), - 0L); - ExitThread(0); -} - -/* ShellExecute won't successfully send DDE commands to console applications after starting them, - * so we run a DDE server in this application, deny the first connection request to make - * ShellExecute start the application, and then process the next DDE connection in this application - * to see the execute command that is sent. */ -static void test_dde(void) -{ - char filename[MAX_PATH], defApplication[MAX_PATH]; - HSZ hszApplication; - dde_thread_info_t info = { filename, GetCurrentThreadId() }; - const dde_tests_t* test; - char params[1024]; - DWORD threadId; - MSG msg; - int rc; - - ddeInst = 0; - rc = DdeInitializeA(&ddeInst, ddeCb, CBF_SKIP_ALLNOTIFICATIONS | CBF_FAIL_ADVISES | - CBF_FAIL_POKES | CBF_FAIL_REQUESTS, 0L); - assert(rc == DMLERR_NO_ERROR); - - sprintf(filename, "%s\\test file.sde", tmpdir); - - /* Default service is application name minus path and extension */ - strcpy(defApplication, strrchr(argv0, '\\')+1); - *strchr(defApplication, '.') = 0; - - test = dde_tests; - while (test->command) - { - create_test_association(".sde"); - create_test_verb_dde(".sde", "Open", 0, test->command, test->ddeexec, - test->application, test->topic, test->ifexec); - hszApplication = DdeCreateStringHandleA(ddeInst, test->application ? - test->application : defApplication, CP_WINANSI); - hszTopic = DdeCreateStringHandleA(ddeInst, test->topic ? test->topic : SZDDESYS_TOPIC, - CP_WINANSI); - assert(hszApplication && hszTopic); - assert(DdeNameService(ddeInst, hszApplication, 0L, DNS_REGISTER)); - denyNextConnection = TRUE; - ddeExec[0] = 0; - - assert(CreateThread(NULL, 0, ddeThread, (LPVOID)&info, 0, &threadId)); - while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg); - rc = msg.wParam > 32 ? 33 : msg.wParam; - if ((test->todo & 0x1)==0) - { - ok(rc==test->rc, "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - else todo_wine - { - ok(rc==test->rc, "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - if (rc == 33) - { - if ((test->todo & 0x2)==0) - { - okChildInt("argcA", test->expectedArgs + 3); - } - else todo_wine - { - okChildInt("argcA", test->expectedArgs + 3); - } - if (test->expectedArgs == 1) - { - if ((test->todo & 0x4) == 0) - { - okChildPath("argvA3", filename); - } - else todo_wine - { - okChildPath("argvA3", filename); - } - } - if ((test->todo & 0x8) == 0) - { - sprintf(params, test->expectedDdeExec, filename); - ok(StrCmpPath(params, ddeExec) == 0, - "ddeexec expected '%s', got '%s'\n", params, ddeExec); - } - else todo_wine - { - sprintf(params, test->expectedDdeExec, filename); - ok(StrCmpPath(params, ddeExec) == 0, - "ddeexec expected '%s', got '%s'\n", params, ddeExec); - } - } - - assert(DdeNameService(ddeInst, hszApplication, 0L, DNS_UNREGISTER)); - assert(DdeFreeStringHandle(ddeInst, hszTopic)); - assert(DdeFreeStringHandle(ddeInst, hszApplication)); - delete_test_association(".sde"); - test++; - } - - assert(DdeUninitialize(ddeInst)); -} - -#define DDE_DEFAULT_APP_VARIANTS 2 -typedef struct -{ - const char* command; - const char* expectedDdeApplication[DDE_DEFAULT_APP_VARIANTS]; - int todo; - int rc[DDE_DEFAULT_APP_VARIANTS]; -} dde_default_app_tests_t; - -static dde_default_app_tests_t dde_default_app_tests[] = -{ - /* Windows XP and 98 handle default DDE app names in different ways. - * The application name we see in the first test determines the pattern - * of application names and return codes we will look for. */ - - /* Test unquoted existing filename with a space */ - {"%s\\test file.exe", {"test file", "test"}, 0x0, {33, 33}}, - {"%s\\test file.exe param", {"test file", "test"}, 0x0, {33, 33}}, - - /* Test quoted existing filename with a space */ - {"\"%s\\test file.exe\"", {"test file", "test file"}, 0x0, {33, 33}}, - {"\"%s\\test file.exe\" param", {"test file", "test file"}, 0x0, {33, 33}}, - - /* Test unquoted filename with a space that doesn't exist, but - * test2.exe does */ - {"%s\\test2 file.exe", {"test2", "test2"}, 0x0, {33, 33}}, - {"%s\\test2 file.exe param", {"test2", "test2"}, 0x0, {33, 33}}, - - /* Test quoted filename with a space that does not exist */ - {"\"%s\\test2 file.exe\"", {"", "test2 file"}, 0x0, {5, 33}}, - {"\"%s\\test2 file.exe\" param", {"", "test2 file"}, 0x0, {5, 33}}, - - /* Test filename supplied without the extension */ - {"%s\\test2", {"test2", "test2"}, 0x0, {33, 33}}, - {"%s\\test2 param", {"test2", "test2"}, 0x0, {33, 33}}, - - /* Test an unquoted nonexistent filename */ - {"%s\\notexist.exe", {"", "notexist"}, 0x0, {5, 33}}, - {"%s\\notexist.exe param", {"", "notexist"}, 0x0, {5, 33}}, - - /* Test an application that will be found on the path */ - {"cmd", {"cmd", "cmd"}, 0x0, {33, 33}}, - {"cmd param", {"cmd", "cmd"}, 0x0, {33, 33}}, - - /* Test an application that will not be found on the path */ - {"xyzwxyzwxyz", {"", "xyzwxyzwxyz"}, 0x0, {5, 33}}, - {"xyzwxyzwxyz param", {"", "xyzwxyzwxyz"}, 0x0, {5, 33}}, - - {NULL, {NULL}, 0, {0}} -}; - -static void test_dde_default_app(void) -{ - char filename[MAX_PATH]; - HSZ hszApplication; - dde_thread_info_t info = { filename, GetCurrentThreadId() }; - const dde_default_app_tests_t* test; - char params[1024]; - DWORD threadId; - MSG msg; - int rc, which = 0; - - ddeInst = 0; - rc = DdeInitializeA(&ddeInst, ddeCb, CBF_SKIP_ALLNOTIFICATIONS | CBF_FAIL_ADVISES | - CBF_FAIL_POKES | CBF_FAIL_REQUESTS, 0L); - assert(rc == DMLERR_NO_ERROR); - - sprintf(filename, "%s\\test file.sde", tmpdir); - - /* It is strictly not necessary to register an application name here, but wine's - * DdeNameService implementation complains if 0L is passed instead of - * hszApplication with DNS_FILTEROFF */ - hszApplication = DdeCreateStringHandleA(ddeInst, "shlexec", CP_WINANSI); - hszTopic = DdeCreateStringHandleA(ddeInst, "shlexec", CP_WINANSI); - assert(hszApplication && hszTopic); - assert(DdeNameService(ddeInst, hszApplication, 0L, DNS_REGISTER | DNS_FILTEROFF)); - - test = dde_default_app_tests; - while (test->command) - { - create_test_association(".sde"); - sprintf(params, test->command, tmpdir); - create_test_verb_dde(".sde", "Open", 1, params, "[test]", NULL, - "shlexec", NULL); - denyNextConnection = FALSE; - ddeApplication[0] = 0; - - /* No application will be run as we will respond to the first DDE event, - * so don't wait for it */ - SetEvent(hEvent); - - assert(CreateThread(NULL, 0, ddeThread, (LPVOID)&info, 0, &threadId)); - while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg); - rc = msg.wParam > 32 ? 33 : msg.wParam; - - /* First test, find which set of test data we expect to see */ - if (test == dde_default_app_tests) - { - int i; - for (i=0; iexpectedDdeApplication[i])) - { - which = i; - break; - } - } - if (i == DDE_DEFAULT_APP_VARIANTS) - skip("Default DDE application test does not match any available results, using first expected data set.\n"); - } - - if ((test->todo & 0x1)==0) - { - ok(rc==test->rc[which], "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - else todo_wine - { - ok(rc==test->rc[which], "%s failed: rc=%d err=%d\n", shell_call, - rc, GetLastError()); - } - if (rc == 33) - { - if ((test->todo & 0x2)==0) - { - ok(!strcmp(ddeApplication, test->expectedDdeApplication[which]), - "Expected application '%s', got '%s'\n", - test->expectedDdeApplication[which], ddeApplication); - } - else todo_wine - { - ok(!strcmp(ddeApplication, test->expectedDdeApplication[which]), - "Expected application '%s', got '%s'\n", - test->expectedDdeApplication[which], ddeApplication); - } - } - - delete_test_association(".sde"); - test++; - } - - assert(DdeNameService(ddeInst, hszApplication, 0L, DNS_UNREGISTER)); - assert(DdeFreeStringHandle(ddeInst, hszTopic)); - assert(DdeFreeStringHandle(ddeInst, hszApplication)); - assert(DdeUninitialize(ddeInst)); -} - -static void init_test(void) -{ - HMODULE hdll; - HRESULT (WINAPI *pDllGetVersion)(DLLVERSIONINFO*); - char filename[MAX_PATH]; - WCHAR lnkfile[MAX_PATH]; - char params[1024]; - const char* const * testfile; - lnk_desc_t desc; - DWORD rc; - HRESULT r; - - hdll=GetModuleHandleA("shell32.dll"); - pDllGetVersion=(void*)GetProcAddress(hdll, "DllGetVersion"); - if (pDllGetVersion) - { - dllver.cbSize=sizeof(dllver); - pDllGetVersion(&dllver); - trace("major=%d minor=%d build=%d platform=%d\n", - dllver.dwMajorVersion, dllver.dwMinorVersion, - dllver.dwBuildNumber, dllver.dwPlatformID); - } - else - { - memset(&dllver, 0, sizeof(dllver)); - } - - r = CoInitialize(NULL); - ok(SUCCEEDED(r), "CoInitialize failed (0x%08x)\n", r); - if (!SUCCEEDED(r)) - exit(1); - - rc=GetModuleFileName(NULL, argv0, sizeof(argv0)); - assert(rc!=0 && rc= 3) - { - doChild(myARGC, myARGV); - exit(0); - } - - init_test(); - - test_filename(); - test_find_executable(); - test_lnks(); - test_exes(); - test_exes_long(); - test_dde(); - test_dde_default_app(); - - cleanup_test(); -} diff --git a/rostests/winetests/shell32/shlfileop.c b/rostests/winetests/shell32/shlfileop.c deleted file mode 100644 index df4bd411d1e..00000000000 --- a/rostests/winetests/shell32/shlfileop.c +++ /dev/null @@ -1,1452 +0,0 @@ -/* - * Unit test of the SHFileOperation function. - * - * 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 - */ - -#include -#include - -#define WINE_NOWINSOCK -#include -#include "shellapi.h" -#include "shlobj.h" - -#include "wine/test.h" - -#ifndef FOF_NORECURSION -#define FOF_NORECURSION 0x1000 -#endif - -static CHAR CURR_DIR[MAX_PATH]; -static const WCHAR UNICODE_PATH[] = {'c',':','\\',0x00c4,'\0','\0'}; - /* "c:\Ä", or "c:\A" with diaeresis */ - /* Double-null termination needed for pFrom field of SHFILEOPSTRUCT */ - -static HMODULE hshell32; -static int (WINAPI *pSHCreateDirectoryExA)(HWND, LPCSTR, LPSECURITY_ATTRIBUTES); -static int (WINAPI *pSHCreateDirectoryExW)(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES); -static int (WINAPI *pSHFileOperationW)(LPSHFILEOPSTRUCTW); -static int (WINAPI *pSHPathPrepareForWriteA)(HWND, IUnknown*, LPCSTR, DWORD); -static int (WINAPI *pSHPathPrepareForWriteW)(HWND, IUnknown*, LPCWSTR, DWORD); - -static void InitFunctionPointers(void) -{ - hshell32 = GetModuleHandleA("shell32.dll"); - pSHCreateDirectoryExA = (void*)GetProcAddress(hshell32, "SHCreateDirectoryExA"); - pSHCreateDirectoryExW = (void*)GetProcAddress(hshell32, "SHCreateDirectoryExW"); - pSHFileOperationW = (void*)GetProcAddress(hshell32, "SHFileOperationW"); - pSHPathPrepareForWriteA = (void*)GetProcAddress(hshell32, "SHPathPrepareForWriteA"); - pSHPathPrepareForWriteW = (void*)GetProcAddress(hshell32, "SHPathPrepareForWriteW"); -} - -/* creates a file with the specified name for tests */ -static void createTestFile(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); -} - -static void createTestFileW(const WCHAR *name) -{ - HANDLE file; - - file = CreateFileW(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file\n"); - CloseHandle(file); -} - -static BOOL file_exists(const CHAR *name) -{ - return GetFileAttributesA(name) != INVALID_FILE_ATTRIBUTES; -} - -static BOOL file_existsW(LPCWSTR name) -{ - return GetFileAttributesW(name) != INVALID_FILE_ATTRIBUTES; -} - -static BOOL file_has_content(const CHAR *name, const CHAR *content) -{ - CHAR buf[MAX_PATH]; - HANDLE file; - DWORD read; - - file = CreateFileA(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); - if (file == INVALID_HANDLE_VALUE) - return FALSE; - ReadFile(file, buf, MAX_PATH - 1, &read, NULL); - buf[read] = 0; - CloseHandle(file); - return strcmp(buf, content)==0; -} - -/* initializes the tests */ -static void init_shfo_tests(void) -{ - int len; - - GetCurrentDirectoryA(MAX_PATH, CURR_DIR); - len = lstrlenA(CURR_DIR); - - if(len && (CURR_DIR[len-1] == '\\')) - CURR_DIR[len-1] = 0; - - createTestFile("test1.txt"); - createTestFile("test2.txt"); - createTestFile("test3.txt"); - createTestFile("test_5.txt"); - CreateDirectoryA("test4.txt", NULL); - CreateDirectoryA("testdir2", NULL); - CreateDirectoryA("testdir2\\nested", NULL); - createTestFile("testdir2\\one.txt"); - createTestFile("testdir2\\nested\\two.txt"); -} - -/* cleans after tests */ -static void clean_after_shfo_tests(void) -{ - DeleteFileA("test1.txt"); - DeleteFileA("test2.txt"); - DeleteFileA("test3.txt"); - DeleteFileA("test_5.txt"); - DeleteFileA("one.txt"); - DeleteFileA("test4.txt\\test1.txt"); - DeleteFileA("test4.txt\\test2.txt"); - DeleteFileA("test4.txt\\test3.txt"); - RemoveDirectoryA("test4.txt"); - DeleteFileA("testdir2\\one.txt"); - DeleteFileA("testdir2\\test1.txt"); - DeleteFileA("testdir2\\test2.txt"); - DeleteFileA("testdir2\\test3.txt"); - DeleteFileA("testdir2\\test4.txt\\test1.txt"); - DeleteFileA("testdir2\\nested\\two.txt"); - RemoveDirectoryA("testdir2\\test4.txt"); - RemoveDirectoryA("testdir2\\nested"); - RemoveDirectoryA("testdir2"); - RemoveDirectoryA("c:\\testdir3"); - DeleteFileA("nonexistent\\notreal\\test2.txt"); - RemoveDirectoryA("nonexistent\\notreal"); - RemoveDirectoryA("nonexistent"); -} - - -static void test_get_file_info(void) -{ - DWORD rc, rc2; - SHFILEINFO shfi, shfi2; - char notepad[MAX_PATH]; - - /* Test some flag combinations that MSDN claims are not allowed, - * but which work anyway - */ - shfi.dwAttributes=0xdeadbeef; - rc=SHGetFileInfoA("c:\\nonexistent", FILE_ATTRIBUTE_DIRECTORY, - &shfi, sizeof(shfi), - SHGFI_ATTRIBUTES | SHGFI_USEFILEATTRIBUTES); - todo_wine ok(rc, "SHGetFileInfoA(c:\\nonexistent | SHGFI_ATTRIBUTES) failed\n"); - if (rc) - ok(shfi.dwAttributes != 0xdeadbeef, "dwFileAttributes is not set\n"); - - rc=SHGetFileInfoA("c:\\nonexistent", FILE_ATTRIBUTE_DIRECTORY, - &shfi, sizeof(shfi), - SHGFI_EXETYPE | SHGFI_USEFILEATTRIBUTES); - todo_wine ok(rc == 1, "SHGetFileInfoA(c:\\nonexistent | SHGFI_EXETYPE) returned %d\n", rc); - - /* Test SHGFI_USEFILEATTRIBUTES support */ - strcpy(shfi.szDisplayName, "dummy"); - shfi.iIcon=0xdeadbeef; - rc=SHGetFileInfoA("c:\\nonexistent", FILE_ATTRIBUTE_DIRECTORY, - &shfi, sizeof(shfi), - SHGFI_ICONLOCATION | SHGFI_USEFILEATTRIBUTES); - ok(rc, "SHGetFileInfoA(c:\\nonexistent) failed\n"); - if (rc) - { - ok(strcpy(shfi.szDisplayName, "dummy") != 0, "SHGetFileInfoA(c:\\nonexistent) displayname is not set\n"); - ok(shfi.iIcon != 0xdeadbeef, "SHGetFileInfoA(c:\\nonexistent) iIcon is not set\n"); - } - - /* Wine does not have a default icon for text files, and Windows 98 fails - * if we give it an empty executable. So use notepad.exe as the test - */ - if (SearchPath(NULL, "notepad.exe", NULL, sizeof(notepad), notepad, NULL)) - { - strcpy(shfi.szDisplayName, "dummy"); - shfi.iIcon=0xdeadbeef; - rc=SHGetFileInfoA(notepad, GetFileAttributes(notepad), - &shfi, sizeof(shfi), - SHGFI_ICONLOCATION | SHGFI_USEFILEATTRIBUTES); - ok(rc, "SHGetFileInfoA(%s, SHGFI_USEFILEATTRIBUTES) failed\n", notepad); - strcpy(shfi2.szDisplayName, "dummy"); - shfi2.iIcon=0xdeadbeef; - rc2=SHGetFileInfoA(notepad, 0, - &shfi2, sizeof(shfi2), - SHGFI_ICONLOCATION); - ok(rc2, "SHGetFileInfoA(%s) failed\n", notepad); - if (rc && rc2) - { - ok(lstrcmpi(shfi2.szDisplayName, shfi.szDisplayName) == 0, "wrong display name %s != %s\n", shfi.szDisplayName, shfi2.szDisplayName); - ok(shfi2.iIcon == shfi.iIcon, "wrong icon index %d != %d\n", shfi.iIcon, shfi2.iIcon); - } - } - - /* with a directory now */ - strcpy(shfi.szDisplayName, "dummy"); - shfi.iIcon=0xdeadbeef; - rc=SHGetFileInfoA("test4.txt", GetFileAttributes("test4.txt"), - &shfi, sizeof(shfi), - SHGFI_ICONLOCATION | SHGFI_USEFILEATTRIBUTES); - ok(rc, "SHGetFileInfoA(test4.txt/, SHGFI_USEFILEATTRIBUTES) failed\n"); - strcpy(shfi2.szDisplayName, "dummy"); - shfi2.iIcon=0xdeadbeef; - rc2=SHGetFileInfoA("test4.txt", 0, - &shfi2, sizeof(shfi2), - SHGFI_ICONLOCATION); - ok(rc2, "SHGetFileInfoA(test4.txt/) failed\n"); - if (rc && rc2) - { - ok(lstrcmpi(shfi2.szDisplayName, shfi.szDisplayName) == 0, "wrong display name %s != %s\n", shfi.szDisplayName, shfi2.szDisplayName); - ok(shfi2.iIcon == shfi.iIcon, "wrong icon index %d != %d\n", shfi.iIcon, shfi2.iIcon); - } -} - - -/* - puts into the specified buffer file names with current directory. - files - string with file names, separated by null characters. Ends on a double - null characters -*/ -static void set_curr_dir_path(CHAR *buf, const CHAR* files) -{ - buf[0] = 0; - while (files[0]) - { - strcpy(buf, CURR_DIR); - buf += strlen(buf); - buf[0] = '\\'; - buf++; - strcpy(buf, files); - buf += strlen(buf) + 1; - files += strlen(files) + 1; - } - buf[0] = 0; -} - - -/* tests the FO_DELETE action */ -static void test_delete(void) -{ - SHFILEOPSTRUCTA shfo; - DWORD ret; - CHAR buf[sizeof(CURR_DIR)+sizeof("/test?.txt")+1]; - - sprintf(buf, "%s\\%s", CURR_DIR, "test?.txt"); - buf[strlen(buf) + 1] = '\0'; - - shfo.hwnd = NULL; - shfo.wFunc = FO_DELETE; - shfo.pFrom = buf; - shfo.pTo = "\0"; - shfo.fFlags = FOF_FILESONLY | FOF_NOCONFIRMATION | FOF_SILENT; - shfo.hNameMappings = NULL; - shfo.lpszProgressTitle = NULL; - - ok(!SHFileOperationA(&shfo), "Deletion was not successful\n"); - ok(file_exists("test4.txt"), "Directory should not have been removed\n"); - ok(!file_exists("test1.txt"), "File should have been removed\n"); - - ret = SHFileOperationA(&shfo); - ok(!ret, "Directory exists, but is not removed, ret=%d\n", ret); - ok(file_exists("test4.txt"), "Directory should not have been removed\n"); - - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - - ok(!SHFileOperationA(&shfo), "Directory is not removed\n"); - ok(!file_exists("test4.txt"), "Directory should have been removed\n"); - - ret = SHFileOperationA(&shfo); - ok(!ret, "The requested file does not exist, ret=%d\n", ret); - - init_shfo_tests(); - sprintf(buf, "%s\\%s", CURR_DIR, "test4.txt"); - buf[strlen(buf) + 1] = '\0'; - ok(MoveFileA("test1.txt", "test4.txt\\test1.txt"), "Filling the subdirectory failed\n"); - ok(!SHFileOperationA(&shfo), "Directory is not removed\n"); - ok(!file_exists("test4.txt"), "Directory is not removed\n"); - - init_shfo_tests(); - shfo.pFrom = "test1.txt\0test4.txt\0"; - ok(!SHFileOperationA(&shfo), "Directory and a file are not removed\n"); - ok(!file_exists("test1.txt"), "The file should have been removed\n"); - ok(!file_exists("test4.txt"), "Directory should have been removed\n"); - ok(file_exists("test2.txt"), "This file should not have been removed\n"); - - /* FOF_FILESONLY does not delete a dir matching a wildcard */ - init_shfo_tests(); - shfo.fFlags |= FOF_FILESONLY; - shfo.pFrom = "*.txt\0"; - ok(!SHFileOperation(&shfo), "Failed to delete files\n"); - ok(!file_exists("test1.txt"), "test1.txt should have been removed\n"); - ok(!file_exists("test_5.txt"), "test_5.txt should have been removed\n"); - ok(file_exists("test4.txt"), "test4.txt should not have been removed\n"); - - /* FOF_FILESONLY only deletes a dir if explicitly specified */ - init_shfo_tests(); - shfo.pFrom = "test_?.txt\0test4.txt\0"; - ok(!SHFileOperation(&shfo), "Failed to delete files and directory\n"); - ok(!file_exists("test4.txt"), "test4.txt should have been removed\n"); - ok(!file_exists("test_5.txt"), "test_5.txt should have been removed\n"); - ok(file_exists("test1.txt"), "test1.txt should not have been removed\n"); - - /* try to delete an invalid filename */ - init_shfo_tests(); - shfo.pFrom = "\0"; - shfo.fFlags &= ~FOF_FILESONLY; - shfo.fAnyOperationsAborted = FALSE; - ret = SHFileOperation(&shfo); - ok(ret == ERROR_ACCESS_DENIED, "Expected ERROR_ACCESS_DENIED, got %d\n", ret); - ok(!shfo.fAnyOperationsAborted, "Expected no aborted operations\n"); - ok(file_exists("test1.txt"), "Expected test1.txt to exist\n"); - - /* try an invalid function */ - init_shfo_tests(); - shfo.pFrom = "test1.txt\0"; - shfo.wFunc = 0; - ret = SHFileOperation(&shfo); - ok(ret == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", ret); - ok(file_exists("test1.txt"), "Expected test1.txt to exist\n"); - - /* try an invalid list, only one null terminator */ - init_shfo_tests(); - shfo.pFrom = ""; - shfo.wFunc = FO_DELETE; - ret = SHFileOperation(&shfo); - ok(ret == ERROR_ACCESS_DENIED, "Expected ERROR_ACCESS_DENIED, got %d\n", ret); - ok(file_exists("test1.txt"), "Expected test1.txt to exist\n"); - - /* delete a dir, and then a file inside the dir, same as - * deleting a nonexistent file - */ - init_shfo_tests(); - shfo.pFrom = "testdir2\0testdir2\\one.txt\0"; - ret = SHFileOperation(&shfo); - ok(ret == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, got %d\n", ret); - ok(!file_exists("testdir2"), "Expected testdir2 to not exist\n"); - ok(!file_exists("testdir2\\one.txt"), "Expected testdir2\\one.txt to not exist\n"); - - /* try the FOF_NORECURSION flag, continues deleting subdirs */ - init_shfo_tests(); - shfo.pFrom = "testdir2\0"; - shfo.fFlags |= FOF_NORECURSION; - ret = SHFileOperation(&shfo); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - ok(!file_exists("testdir2\\one.txt"), "Expected testdir2\\one.txt to not exist\n"); - ok(!file_exists("testdir2\\nested"), "Expected testdir2\\nested to exist\n"); -} - -/* tests the FO_RENAME action */ -static void test_rename(void) -{ - SHFILEOPSTRUCTA shfo, shfo2; - CHAR from[5*MAX_PATH]; - CHAR to[5*MAX_PATH]; - DWORD retval; - - shfo.hwnd = NULL; - shfo.wFunc = FO_RENAME; - shfo.pFrom = from; - shfo.pTo = to; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - shfo.hNameMappings = NULL; - shfo.lpszProgressTitle = NULL; - - set_curr_dir_path(from, "test1.txt\0"); - set_curr_dir_path(to, "test4.txt\0"); - ok(SHFileOperationA(&shfo), "File is not renamed moving to other directory " - "when specifying directory name only\n"); - ok(file_exists("test1.txt"), "The file is removed\n"); - - set_curr_dir_path(from, "test3.txt\0"); - set_curr_dir_path(to, "test4.txt\\test1.txt\0"); - ok(!SHFileOperationA(&shfo), "File is renamed moving to other directory\n"); - ok(file_exists("test4.txt\\test1.txt"), "The file is not renamed\n"); - - set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0"); - retval = SHFileOperationA(&shfo); /* W98 returns 0, W2K and newer returns ERROR_GEN_FAILURE, both do nothing */ - ok(!retval || retval == ERROR_GEN_FAILURE || retval == ERROR_INVALID_TARGET_HANDLE, - "Can't rename many files, retval = %d\n", retval); - ok(file_exists("test1.txt"), "The file is renamed - many files are specified\n"); - - memcpy(&shfo2, &shfo, sizeof(SHFILEOPSTRUCTA)); - shfo2.fFlags |= FOF_MULTIDESTFILES; - - set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0"); - retval = SHFileOperationA(&shfo2); /* W98 returns 0, W2K and newer returns ERROR_GEN_FAILURE, both do nothing */ - ok(!retval || retval == ERROR_GEN_FAILURE || retval == ERROR_INVALID_TARGET_HANDLE, - "Can't rename many files, retval = %d\n", retval); - ok(file_exists("test1.txt"), "The file is not renamed - many files are specified\n"); - - set_curr_dir_path(from, "test1.txt\0"); - set_curr_dir_path(to, "test6.txt\0"); - retval = SHFileOperationA(&shfo); - ok(!retval, "Rename file failed, retval = %d\n", retval); - ok(!file_exists("test1.txt"), "The file is not renamed\n"); - ok(file_exists("test6.txt"), "The file is not renamed\n"); - - set_curr_dir_path(from, "test6.txt\0"); - set_curr_dir_path(to, "test1.txt\0"); - retval = SHFileOperationA(&shfo); - ok(!retval, "Rename file back failed, retval = %d\n", retval); - - set_curr_dir_path(from, "test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0"); - retval = SHFileOperationA(&shfo); - ok(!retval, "Rename dir failed, retval = %d\n", retval); - ok(!file_exists("test4.txt"), "The dir is not renamed\n"); - ok(file_exists("test6.txt"), "The dir is not renamed\n"); - - set_curr_dir_path(from, "test6.txt\0"); - set_curr_dir_path(to, "test4.txt\0"); - retval = SHFileOperationA(&shfo); - ok(!retval, "Rename dir back failed, retval = %d\n", retval); - - /* try to rename more than one file to a single file */ - shfo.pFrom = "test1.txt\0test2.txt\0"; - shfo.pTo = "a.txt\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_GEN_FAILURE, "Expected ERROR_GEN_FAILURE, got %d\n", retval); - ok(file_exists("test1.txt"), "Expected test1.txt to exist\n"); - ok(file_exists("test2.txt"), "Expected test2.txt to exist\n"); - - /* pFrom doesn't exist */ - shfo.pFrom = "idontexist\0"; - shfo.pTo = "newfile\0"; - retval = SHFileOperationA(&shfo); - ok(retval == 1026, "Expected 1026, got %d\n", retval); - ok(!file_exists("newfile"), "Expected newfile to not exist\n"); - - /* pTo already exist */ - shfo.pFrom = "test1.txt\0"; - shfo.pTo = "test2.txt\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_ALREADY_EXISTS, "Expected ERROR_ALREADY_EXISTS, got %d\n", retval); - - /* pFrom is valid, but pTo is empty */ - shfo.pFrom = "test1.txt\0"; - shfo.pTo = "\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(file_exists("test1.txt"), "Expected test1.txt to exist\n"); - - /* pFrom is empty */ - shfo.pFrom = "\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_ACCESS_DENIED, "Expected ERROR_ACCESS_DENIED, got %d\n", retval); - - /* pFrom is NULL, commented out because it crashes on nt 4.0 */ -#if 0 - shfo.pFrom = NULL; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", retval); -#endif -} - -/* tests the FO_COPY action */ -static void test_copy(void) -{ - SHFILEOPSTRUCTA shfo, shfo2; - CHAR from[5*MAX_PATH]; - CHAR to[5*MAX_PATH]; - FILEOP_FLAGS tmp_flags; - DWORD retval; - LPSTR ptr; - - shfo.hwnd = NULL; - shfo.wFunc = FO_COPY; - shfo.pFrom = from; - shfo.pTo = to; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - shfo.hNameMappings = NULL; - shfo.lpszProgressTitle = NULL; - - set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0"); - ok(SHFileOperationA(&shfo), "Can't copy many files\n"); - ok(!file_exists("test6.txt"), "The file is not copied - many files are " - "specified as a target\n"); - - memcpy(&shfo2, &shfo, sizeof(SHFILEOPSTRUCTA)); - shfo2.fFlags |= FOF_MULTIDESTFILES; - - set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0"); - ok(!SHFileOperationA(&shfo2), "Can't copy many files\n"); - ok(file_exists("test6.txt"), "The file is copied - many files are " - "specified as a target\n"); - DeleteFileA("test6.txt"); - DeleteFileA("test7.txt"); - RemoveDirectoryA("test8.txt"); - - /* number of sources do not correspond to number of targets */ - set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0test7.txt\0"); - ok(SHFileOperationA(&shfo2), "Can't copy many files\n"); - ok(!file_exists("test6.txt"), "The file is not copied - many files are " - "specified as a target\n"); - - set_curr_dir_path(from, "test1.txt\0"); - set_curr_dir_path(to, "test4.txt\0"); - ok(!SHFileOperationA(&shfo), "Prepare test to check how directories are copied recursively\n"); - ok(file_exists("test4.txt\\test1.txt"), "The file is copied\n"); - - set_curr_dir_path(from, "test?.txt\0"); - set_curr_dir_path(to, "testdir2\0"); - ok(!file_exists("testdir2\\test1.txt"), "The file is not copied yet\n"); - ok(!file_exists("testdir2\\test4.txt"), "The directory is not copied yet\n"); - ok(!SHFileOperationA(&shfo), "Files and directories are copied to directory\n"); - ok(file_exists("testdir2\\test1.txt"), "The file is copied\n"); - ok(file_exists("testdir2\\test4.txt"), "The directory is copied\n"); - ok(file_exists("testdir2\\test4.txt\\test1.txt"), "The file in subdirectory is copied\n"); - clean_after_shfo_tests(); - - init_shfo_tests(); - shfo.fFlags |= FOF_FILESONLY; - ok(!file_exists("testdir2\\test1.txt"), "The file is not copied yet\n"); - ok(!file_exists("testdir2\\test4.txt"), "The directory is not copied yet\n"); - ok(!SHFileOperationA(&shfo), "Files are copied to other directory\n"); - ok(file_exists("testdir2\\test1.txt"), "The file is copied\n"); - ok(!file_exists("testdir2\\test4.txt"), "The directory is copied\n"); - clean_after_shfo_tests(); - - init_shfo_tests(); - set_curr_dir_path(from, "test1.txt\0test2.txt\0"); - ok(!file_exists("testdir2\\test1.txt"), "The file is not copied yet\n"); - ok(!file_exists("testdir2\\test2.txt"), "The file is not copied yet\n"); - ok(!SHFileOperationA(&shfo), "Files are copied to other directory\n"); - ok(file_exists("testdir2\\test1.txt"), "The file is copied\n"); - ok(file_exists("testdir2\\test2.txt"), "The file is copied\n"); - clean_after_shfo_tests(); - - /* Copying multiple files with one not existing as source, fails the - entire operation in Win98/ME/2K/XP, but not in 95/NT */ - init_shfo_tests(); - tmp_flags = shfo.fFlags; - set_curr_dir_path(from, "test1.txt\0test10.txt\0test2.txt\0"); - ok(!file_exists("testdir2\\test1.txt"), "The file is not copied yet\n"); - ok(!file_exists("testdir2\\test2.txt"), "The file is not copied yet\n"); - retval = SHFileOperationA(&shfo); - if (!retval) - /* Win 95/NT returns success but copies only the files up to the nonexistent source */ - ok(file_exists("testdir2\\test1.txt"), "The file is not copied\n"); - else - { - /* Win 98/ME/2K/XP fail the entire operation with return code 1026 if one source file does not exist */ - ok(retval == 1026, "Files are copied to other directory\n"); - ok(!file_exists("testdir2\\test1.txt"), "The file is copied\n"); - } - ok(!file_exists("testdir2\\test2.txt"), "The file is copied\n"); - shfo.fFlags = tmp_flags; - - /* copy into a nonexistent directory */ - init_shfo_tests(); - shfo.fFlags = FOF_NOCONFIRMMKDIR; - set_curr_dir_path(from, "test1.txt\0"); - set_curr_dir_path(to, "nonexistent\\notreal\\test2.txt\0"); - retval= SHFileOperation(&shfo); - ok(!retval, "Error copying into nonexistent directory\n"); - ok(file_exists("nonexistent"), "nonexistent not created\n"); - ok(file_exists("nonexistent\\notreal"), "nonexistent\\notreal not created\n"); - ok(file_exists("nonexistent\\notreal\\test2.txt"), "Directory not created\n"); - ok(!file_exists("nonexistent\\notreal\\test1.txt"), "test1.txt should not exist\n"); - - /* a relative dest directory is OK */ - clean_after_shfo_tests(); - init_shfo_tests(); - shfo.pFrom = "test1.txt\0test2.txt\0test3.txt\0"; - shfo.pTo = "testdir2\0"; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(file_exists("testdir2\\test1.txt"), "Expected testdir2\\test1 to exist\n"); - - /* try to copy files to a file */ - clean_after_shfo_tests(); - init_shfo_tests(); - shfo.pFrom = from; - shfo.pTo = to; - set_curr_dir_path(from, "test1.txt\0test2.txt\0"); - set_curr_dir_path(to, "test3.txt\0"); - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(shfo.fAnyOperationsAborted, "Expected aborted operations\n"); - ok(!file_exists("test3.txt\\test2.txt"), "Expected test3.txt\\test2.txt to not exist\n"); - - /* try to copy many files to nonexistent directory */ - DeleteFile(to); - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFile("test3.txt\\test1.txt"), "Expected test3.txt\\test1.txt to exist\n"); - ok(DeleteFile("test3.txt\\test2.txt"), "Expected test3.txt\\test1.txt to exist\n"); - ok(RemoveDirectory(to), "Expected test3.txt to exist\n"); - - /* send in FOF_MULTIDESTFILES with too many destination files */ - init_shfo_tests(); - shfo.pFrom = "test1.txt\0test2.txt\0test3.txt\0"; - shfo.pTo = "testdir2\\a.txt\0testdir2\\b.txt\0testdir2\\c.txt\0testdir2\\d.txt\0"; - shfo.fFlags |= FOF_NOERRORUI | FOF_MULTIDESTFILES; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(shfo.fAnyOperationsAborted, "Expected aborted operations\n"); - ok(!file_exists("testdir2\\a.txt"), "Expected testdir2\\a.txt to not exist\n"); - - /* send in FOF_MULTIDESTFILES with too many destination files */ - shfo.pFrom = "test1.txt\0test2.txt\0test3.txt\0"; - shfo.pTo = "e.txt\0f.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(shfo.fAnyOperationsAborted, "Expected aborted operations\n"); - ok(!file_exists("e.txt"), "Expected e.txt to not exist\n"); - - /* use FOF_MULTIDESTFILES with files and a source directory */ - shfo.pFrom = "test1.txt\0test2.txt\0test4.txt\0"; - shfo.pTo = "testdir2\\a.txt\0testdir2\\b.txt\0testdir2\\c.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFile("testdir2\\a.txt"), "Expected testdir2\\a.txt to exist\n"); - ok(DeleteFile("testdir2\\b.txt"), "Expected testdir2\\b.txt to exist\n"); - ok(RemoveDirectory("testdir2\\c.txt"), "Expected testdir2\\c.txt to exist\n"); - - /* try many dest files without FOF_MULTIDESTFILES flag */ - shfo.pFrom = "test1.txt\0test2.txt\0test3.txt\0"; - shfo.pTo = "a.txt\0b.txt\0c.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - shfo.fFlags &= ~FOF_MULTIDESTFILES; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(!file_exists("a.txt"), "Expected a.txt to not exist\n"); - - /* try a glob */ - shfo.pFrom = "test?.txt\0"; - shfo.pTo = "testdir2\0"; - shfo.fFlags &= ~FOF_MULTIDESTFILES; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(file_exists("testdir2\\test1.txt"), "Expected testdir2\\test1.txt to exist\n"); - - /* try a glob with FOF_FILESONLY */ - clean_after_shfo_tests(); - init_shfo_tests(); - shfo.pFrom = "test?.txt\0"; - shfo.fFlags |= FOF_FILESONLY; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(file_exists("testdir2\\test1.txt"), "Expected testdir2\\test1.txt to exist\n"); - ok(!file_exists("testdir2\\test4.txt"), "Expected testdir2\\test4.txt to not exist\n"); - - /* try a glob with FOF_MULTIDESTFILES and the same number - * of dest files that we would expect - */ - clean_after_shfo_tests(); - init_shfo_tests(); - shfo.pTo = "testdir2\\a.txt\0testdir2\\b.txt\0testdir2\\c.txt\0testdir2\\d.txt\0"; - shfo.fFlags &= ~FOF_FILESONLY; - shfo.fFlags |= FOF_MULTIDESTFILES; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(shfo.fAnyOperationsAborted, "Expected aborted operations\n"); - ok(!file_exists("testdir2\\a.txt"), "Expected testdir2\\test1.txt to not exist\n"); - ok(!RemoveDirectory("b.txt"), "b.txt should not exist\n"); - - /* copy one file to two others, second is ignored */ - clean_after_shfo_tests(); - init_shfo_tests(); - shfo.pFrom = "test1.txt\0"; - shfo.pTo = "b.txt\0c.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFile("b.txt"), "Expected b.txt to exist\n"); - ok(!DeleteFile("c.txt"), "Expected c.txt to not exist\n"); - - /* copy two file to three others, all fail */ - shfo.pFrom = "test1.txt\0test2.txt\0"; - shfo.pTo = "b.txt\0c.txt\0d.txt\0"; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(shfo.fAnyOperationsAborted, "Expected operations to be aborted\n"); - ok(!DeleteFile("b.txt"), "Expected b.txt to not exist\n"); - - /* copy one file and one directory to three others */ - shfo.pFrom = "test1.txt\0test4.txt\0"; - shfo.pTo = "b.txt\0c.txt\0d.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(shfo.fAnyOperationsAborted, "Expected operations to be aborted\n"); - ok(!DeleteFile("b.txt"), "Expected b.txt to not exist\n"); - ok(!DeleteFile("c.txt"), "Expected c.txt to not exist\n"); - - /* copy a directory with a file beneath it, plus some files */ - createTestFile("test4.txt\\a.txt"); - shfo.pFrom = "test4.txt\0test1.txt\0"; - shfo.pTo = "testdir2\0"; - shfo.fFlags &= ~FOF_MULTIDESTFILES; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFile("testdir2\\test1.txt"), "Expected newdir\\test1.txt to exist\n"); - ok(DeleteFile("testdir2\\test4.txt\\a.txt"), "Expected a.txt to exist\n"); - ok(RemoveDirectory("testdir2\\test4.txt"), "Expected testdir2\\test4.txt to exist\n"); - - /* copy one directory and a file in that dir to another dir */ - shfo.pFrom = "test4.txt\0test4.txt\\a.txt\0"; - shfo.pTo = "testdir2\0"; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFile("testdir2\\test4.txt\\a.txt"), "Expected a.txt to exist\n"); - ok(DeleteFile("testdir2\\a.txt"), "Expected testdir2\\a.txt to exist\n"); - - /* copy a file in a directory first, and then the directory to a nonexistent dir */ - shfo.pFrom = "test4.txt\\a.txt\0test4.txt\0"; - shfo.pTo = "nonexistent\0"; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(shfo.fAnyOperationsAborted, "Expected operations to be aborted\n"); - ok(!file_exists("nonexistent\\test4.txt"), "Expected nonexistent\\test4.txt to not exist\n"); - DeleteFile("test4.txt\\a.txt"); - - /* destination is same as source file */ - shfo.pFrom = "test1.txt\0test2.txt\0test3.txt\0"; - shfo.pTo = "b.txt\0test2.txt\0c.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - shfo.fFlags = FOF_NOERRORUI | FOF_MULTIDESTFILES; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_NO_MORE_SEARCH_HANDLES, - "Expected ERROR_NO_MORE_SEARCH_HANDLES, got %d\n", retval); - ok(!shfo.fAnyOperationsAborted, "Expected no operations to be aborted\n"); - ok(DeleteFile("b.txt"), "Expected b.txt to exist\n"); - ok(!file_exists("c.txt"), "Expected c.txt to not exist\n"); - - /* destination is same as source directory */ - shfo.pFrom = "test1.txt\0test4.txt\0test3.txt\0"; - shfo.pTo = "b.txt\0test4.txt\0c.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFile("b.txt"), "Expected b.txt to exist\n"); - ok(!file_exists("c.txt"), "Expected c.txt to not exist\n"); - - /* copy a directory into itself, error displayed in UI */ - shfo.pFrom = "test4.txt\0"; - shfo.pTo = "test4.txt\\newdir\0"; - shfo.fFlags &= ~FOF_MULTIDESTFILES; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(!RemoveDirectory("test4.txt\\newdir"), "Expected test4.txt\\newdir to not exist\n"); - - /* copy a directory to itself, error displayed in UI */ - shfo.pFrom = "test4.txt\0"; - shfo.pTo = "test4.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - - /* copy a file into a directory, and the directory into itself */ - shfo.pFrom = "test1.txt\0test4.txt\0"; - shfo.pTo = "test4.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - shfo.fFlags |= FOF_NOCONFIRMATION; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFile("test4.txt\\test1.txt"), "Expected test4.txt\\test1.txt to exist\n"); - - /* copy a file to a file, and the directory into itself */ - shfo.pFrom = "test1.txt\0test4.txt\0"; - shfo.pTo = "test4.txt\\a.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(!file_exists("test4.txt\\a.txt"), "Expected test4.txt\\a.txt to not exist\n"); - - /* copy a nonexistent file to a nonexistent directory */ - shfo.pFrom = "e.txt\0"; - shfo.pTo = "nonexistent\0"; - shfo.fAnyOperationsAborted = FALSE; - retval = SHFileOperation(&shfo); - ok(retval == 1026, "Expected 1026, got %d\n", retval); - ok(!file_exists("nonexistent\\e.txt"), "Expected nonexistent\\e.txt to not exist\n"); - ok(!file_exists("nonexistent"), "Expected nonexistent to not exist\n"); - - /* Overwrite tests */ - clean_after_shfo_tests(); - init_shfo_tests(); - shfo.fFlags = FOF_NOCONFIRMATION; - shfo.pFrom = "test1.txt\0"; - shfo.pTo = "test2.txt\0"; - shfo.fAnyOperationsAborted = FALSE; - /* without FOF_NOCONFIRMATION the confirmation is Yes/No */ - retval = SHFileOperation(&shfo); - ok(retval == 0, "Expected 0, got %d\n", retval); - ok(file_has_content("test2.txt", "test1.txt\n"), "The file was not copied\n"); - - shfo.pFrom = "test3.txt\0test1.txt\0"; - shfo.pTo = "test2.txt\0one.txt\0"; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_MULTIDESTFILES; - /* without FOF_NOCONFIRMATION the confirmation is Yes/Yes to All/No/Cancel */ - retval = SHFileOperation(&shfo); - ok(retval == 0, "Expected 0, got %d\n", retval); - ok(file_has_content("test2.txt", "test3.txt\n"), "The file was not copied\n"); - - shfo.pFrom = "one.txt\0"; - shfo.pTo = "testdir2\0"; - shfo.fFlags = FOF_NOCONFIRMATION; - /* without FOF_NOCONFIRMATION the confirmation is Yes/No */ - retval = SHFileOperation(&shfo); - ok(retval == 0, "Expected 0, got %d\n", retval); - ok(file_has_content("testdir2\\one.txt", "test1.txt\n"), "The file was not copied\n"); - - createTestFile("test4.txt\\test1.txt"); - shfo.pFrom = "test4.txt\0"; - shfo.pTo = "testdir2\0"; - shfo.fFlags = FOF_NOCONFIRMATION; - ok(!SHFileOperation(&shfo), "First SHFileOperation failed\n"); - createTestFile("test4.txt\\.\\test1.txt"); /* modify the content of the file */ - /* without FOF_NOCONFIRMATION the confirmation is "This folder already contains a folder named ..." */ - retval = SHFileOperation(&shfo); - ok(retval == 0, "Expected 0, got %d\n", retval); - ok(file_has_content("testdir2\\test4.txt\\test1.txt", "test4.txt\\.\\test1.txt\n"), "The file was not copied\n"); - - createTestFile("one.txt"); - - /* no double-NULL terminator for pFrom */ - memset(from, 'a', MAX_PATH); - lstrcpyA(from, "one.txt"); - shfo.pFrom = from; - shfo.pTo = "two.txt\0"; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == 1148 || retval == 1026, "Expected 1148 or 1026, got %d\n", retval); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(!DeleteFileA("two.txt"), "Expected file to not exist\n"); - - createTestFile("one.txt"); - - /* no double-NULL terminator for pTo */ - memset(to, 'a', MAX_PATH); - lstrcpyA(to, "two.txt"); - shfo.pFrom = "one.txt\0"; - shfo.pTo = to; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - - createTestFile("one.txt"); - - /* no FOF_MULTIDESTFILES, two files in pTo */ - shfo.pFrom = "one.txt\0"; - shfo.pTo = "two.txt\0three.txt\0"; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - - createTestFile("one.txt"); - - /* no double-NULL terminator for pFrom and pTo */ - memset(from, 'a', MAX_PATH); - memset(to, 'a', MAX_PATH); - lstrcpyA(from, "one.txt"); - lstrcpyA(to, "two.txt"); - shfo.pFrom = from; - shfo.pTo = to; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == 1148 || retval == 1026, "Expected 1148 or 1026, got %d\n", retval); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(!DeleteFileA("two.txt"), "Expected file to not exist\n"); - - createTestFile("one.txt"); - - /* no double-NULL terminator for pTo, FOF_MULTIDESTFILES */ - memset(to, 'a', MAX_PATH); - lstrcpyA(to, "two.txt"); - shfo.pFrom = "one.txt\0"; - shfo.pTo = to; - shfo.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | - FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - - createTestFile("one.txt"); - createTestFile("two.txt"); - - /* no double-NULL terminator for pTo, - * multiple source files, - * dest directory does not exist - */ - memset(to, 'a', 2 * MAX_PATH); - lstrcpyA(to, "threedir"); - shfo.pFrom = "one.txt\0two.txt\0"; - shfo.pTo = to; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(!DeleteFileA("threedir\\one.txt"), "Expected file to not exist\n"); - ok(!DeleteFileA("threedir\\two.txt"), "Expected file to not exist\n"); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - ok(!DeleteFileA("threedir"), "Expected file to not exist\n"); - ok(!RemoveDirectoryA("threedir"), "Expected dir to not exist\n"); - - createTestFile("one.txt"); - createTestFile("two.txt"); - CreateDirectoryA("threedir", NULL); - - /* no double-NULL terminator for pTo, - * multiple source files, - * dest directory does exist - */ - memset(to, 'a', 2 * MAX_PATH); - lstrcpyA(to, "threedir"); - shfo.pFrom = "one.txt\0two.txt\0"; - shfo.pTo = to; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFileA("threedir\\one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("threedir\\two.txt"), "Expected file to exist\n"); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - ok(RemoveDirectoryA("threedir"), "Expected dir to exist\n"); - - createTestFile("one.txt"); - createTestFile("two.txt"); - - /* no double-NULL terminator for pTo, - * multiple source files, FOF_MULTIDESTFILES - * dest dir does not exist - */ - memset(to, 'a', 2 * MAX_PATH); - lstrcpyA(to, "threedir"); - shfo.pFrom = "one.txt\0two.txt\0"; - shfo.pTo = to; - shfo.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | - FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED || - retval == ERROR_SUCCESS, /* win2k3 */ - "Expected ERROR_CANCELLED or ERROR_SUCCESS, got %d\n", retval); - ok(!DeleteFileA("threedir\\one.txt"), "Expected file to not exist\n"); - ok(!DeleteFileA("threedir\\two.txt"), "Expected file to not exist\n"); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - ok(!RemoveDirectoryA("threedir"), "Expected dir to not exist\n"); - - /* file exists in win2k */ - DeleteFileA("threedir"); - - createTestFile("one.txt"); - createTestFile("two.txt"); - CreateDirectoryA("threedir", NULL); - - /* no double-NULL terminator for pTo, - * multiple source files, FOF_MULTIDESTFILES - * dest dir does exist - */ - memset(to, 'a', 2 * MAX_PATH); - lstrcpyA(to, "threedir"); - ptr = to + lstrlenA(to) + 1; - lstrcpyA(ptr, "fourdir"); - shfo.pFrom = "one.txt\0two.txt\0"; - shfo.pTo = to; - shfo.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | - FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFileA("threedir\\one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("threedir\\two.txt"), "Expected file to exist\n"); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - ok(RemoveDirectoryA("threedir"), "Expected dir to exist\n"); - ok(!DeleteFileA("fourdir"), "Expected file to not exist\n"); - ok(!RemoveDirectoryA("fourdir"), "Expected dir to not exist\n"); - - createTestFile("one.txt"); - createTestFile("two.txt"); - CreateDirectoryA("threedir", NULL); - - /* multiple source files, FOF_MULTIDESTFILES - * multiple dest files, but first dest dir exists - * num files in lists is equal - */ - shfo.pFrom = "one.txt\0two.txt\0"; - shfo.pTo = "threedir\0fourdir\0"; - shfo.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | - FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(!DeleteFileA("threedir\\one.txt"), "Expected file to not exist\n"); - ok(!DeleteFileA("threedir\\two.txt"), "Expected file to not exist\n"); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - ok(RemoveDirectoryA("threedir"), "Expected dir to exist\n"); - ok(!DeleteFileA("fourdir"), "Expected file to not exist\n"); - ok(!RemoveDirectoryA("fourdir"), "Expected dit to not exist\n"); - - createTestFile("one.txt"); - createTestFile("two.txt"); - CreateDirectoryA("threedir", NULL); - - /* multiple source files, FOF_MULTIDESTFILES - * multiple dest files, but first dest dir exists - * num files in lists is not equal - */ - shfo.pFrom = "one.txt\0two.txt\0"; - shfo.pTo = "threedir\0fourdir\0five\0"; - shfo.fFlags = FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | - FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFileA("threedir\\one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("threedir\\two.txt"), "Expected file to exist\n"); - ok(DeleteFileA("one.txt"), "Expected file to exist\n"); - ok(DeleteFileA("two.txt"), "Expected file to exist\n"); - ok(RemoveDirectoryA("threedir"), "Expected dir to exist\n"); - ok(!DeleteFileA("fourdir"), "Expected file to not exist\n"); - ok(!RemoveDirectoryA("fourdir"), "Expected dit to not exist\n"); - ok(!DeleteFileA("five"), "Expected file to not exist\n"); - ok(!RemoveDirectoryA("five"), "Expected dit to not exist\n"); - - createTestFile("aa.txt"); - createTestFile("ab.txt"); - CreateDirectoryA("one", NULL); - CreateDirectoryA("two", NULL); - - /* pFrom has a glob, pTo has more than one dest */ - shfo.pFrom = "a*.txt\0"; - shfo.pTo = "one\0two\0"; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - retval = SHFileOperation(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(DeleteFileA("one\\aa.txt"), "Expected file to exist\n"); - ok(DeleteFileA("one\\ab.txt"), "Expected file to exist\n"); - ok(!DeleteFileA("two\\aa.txt"), "Expected file to not exist\n"); - ok(!DeleteFileA("two\\ab.txt"), "Expected file to not exist\n"); - ok(DeleteFileA("aa.txt"), "Expected file to exist\n"); - ok(DeleteFileA("ab.txt"), "Expected file to exist\n"); - ok(RemoveDirectoryA("one"), "Expected dir to exist\n"); - ok(RemoveDirectoryA("two"), "Expected dir to exist\n"); -} - -/* tests the FO_MOVE action */ -static void test_move(void) -{ - SHFILEOPSTRUCTA shfo, shfo2; - CHAR from[5*MAX_PATH]; - CHAR to[5*MAX_PATH]; - DWORD retval; - - shfo.hwnd = NULL; - shfo.wFunc = FO_MOVE; - shfo.pFrom = from; - shfo.pTo = to; - shfo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - shfo.hNameMappings = NULL; - shfo.lpszProgressTitle = NULL; - - set_curr_dir_path(from, "test1.txt\0"); - set_curr_dir_path(to, "test4.txt\0"); - ok(!SHFileOperationA(&shfo), "Prepare test to check how directories are moved recursively\n"); - ok(!file_exists("test1.txt"), "test1.txt should not exist\n"); - ok(file_exists("test4.txt\\test1.txt"), "The file is not moved\n"); - - set_curr_dir_path(from, "test?.txt\0"); - set_curr_dir_path(to, "testdir2\0"); - ok(!file_exists("testdir2\\test2.txt"), "The file is not moved yet\n"); - ok(!file_exists("testdir2\\test4.txt"), "The directory is not moved yet\n"); - ok(!SHFileOperationA(&shfo), "Files and directories are moved to directory\n"); - ok(file_exists("testdir2\\test2.txt"), "The file is moved\n"); - ok(file_exists("testdir2\\test4.txt"), "The directory is moved\n"); - ok(file_exists("testdir2\\test4.txt\\test1.txt"), "The file in subdirectory is moved\n"); - - clean_after_shfo_tests(); - init_shfo_tests(); - - memcpy(&shfo2, &shfo, sizeof(SHFILEOPSTRUCTA)); - shfo2.fFlags |= FOF_MULTIDESTFILES; - - set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0"); - ok(!SHFileOperationA(&shfo2), "Move many files\n"); - ok(file_exists("test6.txt"), "The file is moved - many files are " - "specified as a target\n"); - DeleteFileA("test6.txt"); - DeleteFileA("test7.txt"); - RemoveDirectoryA("test8.txt"); - - init_shfo_tests(); - - /* number of sources do not correspond to number of targets */ - set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0test7.txt\0"); - ok(SHFileOperationA(&shfo2), "Can't move many files\n"); - ok(!file_exists("test6.txt"), "The file is not moved - many files are " - "specified as a target\n"); - - init_shfo_tests(); - - set_curr_dir_path(from, "test3.txt\0"); - set_curr_dir_path(to, "test4.txt\\test1.txt\0"); - ok(!SHFileOperationA(&shfo), "File is moved moving to other directory\n"); - ok(file_exists("test4.txt\\test1.txt"), "The file is moved\n"); - - set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0"); - ok(SHFileOperationA(&shfo), "Cannot move many files\n"); - ok(file_exists("test1.txt"), "The file is not moved. Many files are specified\n"); - ok(file_exists("test4.txt"), "The directory is not moved. Many files are specified\n"); - - set_curr_dir_path(from, "test1.txt\0"); - set_curr_dir_path(to, "test6.txt\0"); - ok(!SHFileOperationA(&shfo), "Move file\n"); - ok(!file_exists("test1.txt"), "The file is moved\n"); - ok(file_exists("test6.txt"), "The file is moved\n"); - set_curr_dir_path(from, "test6.txt\0"); - set_curr_dir_path(to, "test1.txt\0"); - ok(!SHFileOperationA(&shfo), "Move file back\n"); - - set_curr_dir_path(from, "test4.txt\0"); - set_curr_dir_path(to, "test6.txt\0"); - ok(!SHFileOperationA(&shfo), "Move dir\n"); - ok(!file_exists("test4.txt"), "The dir is moved\n"); - ok(file_exists("test6.txt"), "The dir is moved\n"); - set_curr_dir_path(from, "test6.txt\0"); - set_curr_dir_path(to, "test4.txt\0"); - ok(!SHFileOperationA(&shfo), "Move dir back\n"); - - /* move one file to two others */ - init_shfo_tests(); - shfo.pFrom = "test1.txt\0"; - shfo.pTo = "a.txt\0b.txt\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(!file_exists("test1.txt"), "Expected test1.txt to not exist\n"); - ok(DeleteFile("a.txt"), "Expected a.txt to exist\n"); - ok(!file_exists("b.txt"), "Expected b.txt to not exist\n"); - - /* move two files to one other */ - shfo.pFrom = "test2.txt\0test3.txt\0"; - shfo.pTo = "test1.txt\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(!file_exists("test1.txt"), "Expected test1.txt to not exist\n"); - ok(file_exists("test2.txt"), "Expected test2.txt to exist\n"); - ok(file_exists("test3.txt"), "Expected test3.txt to exist\n"); - - /* move a directory into itself */ - shfo.pFrom = "test4.txt\0"; - shfo.pTo = "test4.txt\\b.txt\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(!RemoveDirectory("test4.txt\\b.txt"), "Expected test4.txt\\b.txt to not exist\n"); - ok(file_exists("test4.txt"), "Expected test4.txt to exist\n"); - - /* move many files without FOF_MULTIDESTFILES */ - shfo.pFrom = "test2.txt\0test3.txt\0"; - shfo.pTo = "d.txt\0e.txt\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(!DeleteFile("d.txt"), "Expected d.txt to not exist\n"); - ok(!DeleteFile("e.txt"), "Expected e.txt to not exist\n"); - - /* number of sources != number of targets */ - shfo.pTo = "d.txt\0"; - shfo.fFlags |= FOF_MULTIDESTFILES; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(!DeleteFile("d.txt"), "Expected d.txt to not exist\n"); - - /* FO_MOVE does not create dest directories */ - shfo.pFrom = "test2.txt\0"; - shfo.pTo = "dir1\\dir2\\test2.txt\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_CANCELLED, "Expected ERROR_CANCELLED, got %d\n", retval); - ok(!file_exists("dir1"), "Expected dir1 to not exist\n"); - - /* try to overwrite an existing file */ - shfo.pTo = "test3.txt\0"; - retval = SHFileOperationA(&shfo); - ok(retval == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", retval); - ok(!file_exists("test2.txt"), "Expected test2.txt to not exist\n"); - ok(file_exists("test3.txt"), "Expected test3.txt to exist\n"); -} - -static void test_sh_create_dir(void) -{ - CHAR path[MAX_PATH]; - int ret; - - if(!pSHCreateDirectoryExA) - { - trace("skipping SHCreateDirectoryExA tests\n"); - return; - } - - set_curr_dir_path(path, "testdir2\\test4.txt\0"); - ret = pSHCreateDirectoryExA(NULL, path, NULL); - ok(ERROR_SUCCESS == ret, "SHCreateDirectoryEx failed to create directory recursively, ret = %d\n", ret); - ok(file_exists("testdir2"), "The first directory is not created\n"); - ok(file_exists("testdir2\\test4.txt"), "The second directory is not created\n"); - - ret = pSHCreateDirectoryExA(NULL, path, NULL); - ok(ERROR_ALREADY_EXISTS == ret, "SHCreateDirectoryEx should fail to create existing directory, ret = %d\n", ret); - - ret = pSHCreateDirectoryExA(NULL, "c:\\testdir3", NULL); - ok(file_exists("c:\\testdir3"), "The directory is not created\n"); -} - -static void test_sh_path_prepare(void) -{ - HRESULT res; - CHAR path[MAX_PATH]; - - if(!pSHPathPrepareForWriteA) - { - trace("skipping SHPathPrepareForWriteA tests\n"); - return; - } - - /* directory exists, SHPPFW_NONE */ - set_curr_dir_path(path, "testdir2\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_NONE); - ok(res == S_OK, "res == 0x%08x, expected S_OK\n", res); - - /* directory exists, SHPPFW_IGNOREFILENAME */ - set_curr_dir_path(path, "testdir2\\test4.txt\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_IGNOREFILENAME); - ok(res == S_OK, "res == 0x%08x, expected S_OK\n", res); - - /* directory exists, SHPPFW_DIRCREATE */ - set_curr_dir_path(path, "testdir2\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_DIRCREATE); - ok(res == S_OK, "res == 0x%08x, expected S_OK\n", res); - - /* directory exists, SHPPFW_IGNOREFILENAME|SHPPFW_DIRCREATE */ - set_curr_dir_path(path, "testdir2\\test4.txt\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_IGNOREFILENAME|SHPPFW_DIRCREATE); - ok(res == S_OK, "res == 0x%08x, expected S_OK\n", res); - ok(!file_exists("nonexistent\\"), "nonexistent\\ exists but shouldn't\n"); - - /* file exists, SHPPFW_NONE */ - set_curr_dir_path(path, "test1.txt\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_NONE); - ok(res == HRESULT_FROM_WIN32(ERROR_DIRECTORY), "res == 0x%08x, expected HRESULT_FROM_WIN32(ERROR_DIRECTORY)\n", res); - - /* file exists, SHPPFW_DIRCREATE */ - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_DIRCREATE); - ok(res == HRESULT_FROM_WIN32(ERROR_DIRECTORY), "res == 0x%08x, expected HRESULT_FROM_WIN32(ERROR_DIRECTORY)\n", res); - - /* file exists, SHPPFW_NONE, trailing \ */ - set_curr_dir_path(path, "test1.txt\\\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_NONE); - ok(res == HRESULT_FROM_WIN32(ERROR_DIRECTORY), "res == 0x%08x, expected HRESULT_FROM_WIN32(ERROR_DIRECTORY)\n", res); - - /* relative path exists, SHPPFW_DIRCREATE */ - res = pSHPathPrepareForWriteA(0, 0, ".\\testdir2", SHPPFW_DIRCREATE); - ok(res == S_OK, "res == 0x%08x, expected S_OK\n", res); - - /* relative path doesn't exist, SHPPFW_DIRCREATE -- Windows does not create the directory in this case */ - res = pSHPathPrepareForWriteA(0, 0, ".\\testdir2\\test4.txt", SHPPFW_DIRCREATE); - ok(res == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), "res == 0x%08x, expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)\n", res); - ok(!file_exists(".\\testdir2\\test4.txt\\"), ".\\testdir2\\test4.txt\\ exists but shouldn't\n"); - - /* directory doesn't exist, SHPPFW_NONE */ - set_curr_dir_path(path, "nonexistent\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_NONE); - ok(res == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), "res == 0x%08x, expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)\n", res); - - /* directory doesn't exist, SHPPFW_IGNOREFILENAME */ - set_curr_dir_path(path, "nonexistent\\notreal\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_IGNOREFILENAME); - ok(res == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), "res == 0x%08x, expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)\n", res); - ok(!file_exists("nonexistent\\notreal"), "nonexistent\\notreal exists but shouldn't\n"); - ok(!file_exists("nonexistent\\"), "nonexistent\\ exists but shouldn't\n"); - - /* directory doesn't exist, SHPPFW_IGNOREFILENAME|SHPPFW_DIRCREATE */ - set_curr_dir_path(path, "testdir2\\test4.txt\\\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_IGNOREFILENAME|SHPPFW_DIRCREATE); - ok(res == S_OK, "res == 0x%08x, expected S_OK\n", res); - ok(file_exists("testdir2\\test4.txt\\"), "testdir2\\test4.txt doesn't exist but should\n"); - - /* nested directory doesn't exist, SHPPFW_DIRCREATE */ - set_curr_dir_path(path, "nonexistent\\notreal\0"); - res = pSHPathPrepareForWriteA(0, 0, path, SHPPFW_DIRCREATE); - ok(res == S_OK, "res == 0x%08x, expected S_OK\n", res); - ok(file_exists("nonexistent\\notreal"), "nonexistent\\notreal doesn't exist but should\n"); - - /* SHPPFW_ASKDIRCREATE, SHPPFW_NOWRITECHECK, and SHPPFW_MEDIACHECKONLY are untested */ - - if(!pSHPathPrepareForWriteW) - { - skip("Skipping SHPathPrepareForWriteW tests\n"); - return; - } - /* unicode directory doesn't exist, SHPPFW_NONE */ - res = pSHPathPrepareForWriteW(0, 0, UNICODE_PATH, SHPPFW_NONE); - ok(res == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), "res == %08x, expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)\n", res); - ok(!file_existsW(UNICODE_PATH), "unicode path was created but shouldn't be\n"); - RemoveDirectoryW(UNICODE_PATH); - - /* unicode directory doesn't exist, SHPPFW_DIRCREATE */ - res = pSHPathPrepareForWriteW(0, 0, UNICODE_PATH, SHPPFW_DIRCREATE); - ok(res == S_OK, "res == %08x, expected S_OK\n", res); - ok(file_existsW(UNICODE_PATH), "unicode path should've been created\n"); - - /* unicode directory exists, SHPPFW_NONE */ - res = pSHPathPrepareForWriteW(0, 0, UNICODE_PATH, SHPPFW_NONE); - ok(res == S_OK, "ret == %08x, expected S_OK\n", res); - - /* unicode directory exists, SHPPFW_DIRCREATE */ - res = pSHPathPrepareForWriteW(0, 0, UNICODE_PATH, SHPPFW_DIRCREATE); - ok(res == S_OK, "ret == %08x, expected S_OK\n", res); - RemoveDirectoryW(UNICODE_PATH); -} - -static void test_unicode(void) -{ - SHFILEOPSTRUCTW shfoW; - int ret; - HANDLE file; - - if (!pSHFileOperationW) - { - skip("SHFileOperationW() is missing\n"); - return; - } - - shfoW.hwnd = NULL; - shfoW.wFunc = FO_DELETE; - shfoW.pFrom = UNICODE_PATH; - shfoW.pTo = '\0'; - shfoW.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI; - shfoW.hNameMappings = NULL; - shfoW.lpszProgressTitle = NULL; - - /* Clean up before start test */ - DeleteFileW(UNICODE_PATH); - RemoveDirectoryW(UNICODE_PATH); - - /* Make sure we are on a system that supports unicode */ - SetLastError(0xdeadbeef); - file = CreateFileW(UNICODE_PATH, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - skip("Unicode tests skipped on non-unicode system\n"); - return; - } - CloseHandle(file); - - /* Try to delete a file with unicode filename */ - ok(file_existsW(UNICODE_PATH), "The file does not exist\n"); - ret = pSHFileOperationW(&shfoW); - ok(!ret, "File is not removed, ErrorCode: %d\n", ret); - ok(!file_existsW(UNICODE_PATH), "The file should have been removed\n"); - - /* Try to trash a file with unicode filename */ - createTestFileW(UNICODE_PATH); - shfoW.fFlags |= FOF_ALLOWUNDO; - ok(file_existsW(UNICODE_PATH), "The file does not exist\n"); - ret = pSHFileOperationW(&shfoW); - ok(!ret, "File is not removed, ErrorCode: %d\n", ret); - ok(!file_existsW(UNICODE_PATH), "The file should have been removed\n"); - - if(!pSHCreateDirectoryExW) - { - skip("Skipping SHCreateDirectoryExW tests\n"); - return; - } - - /* Try to delete a directory with unicode filename */ - ret = pSHCreateDirectoryExW(NULL, UNICODE_PATH, NULL); - ok(!ret, "SHCreateDirectoryExW returned %d\n", ret); - ok(file_existsW(UNICODE_PATH), "The directory is not created\n"); - shfoW.fFlags &= ~FOF_ALLOWUNDO; - ret = pSHFileOperationW(&shfoW); - ok(!ret, "Directory is not removed, ErrorCode: %d\n", ret); - ok(!file_existsW(UNICODE_PATH), "The directory should have been removed\n"); - - /* Try to trash a directory with unicode filename */ - ret = pSHCreateDirectoryExW(NULL, UNICODE_PATH, NULL); - ok(!ret, "SHCreateDirectoryExW returned %d\n", ret); - ok(file_existsW(UNICODE_PATH), "The directory was not created\n"); - shfoW.fFlags |= FOF_ALLOWUNDO; - ret = pSHFileOperationW(&shfoW); - ok(!ret, "Directory is not removed, ErrorCode: %d\n", ret); - ok(!file_existsW(UNICODE_PATH), "The directory should have been removed\n"); -} - -START_TEST(shlfileop) -{ - InitFunctionPointers(); - - clean_after_shfo_tests(); - - init_shfo_tests(); - test_get_file_info(); - clean_after_shfo_tests(); - - init_shfo_tests(); - test_delete(); - clean_after_shfo_tests(); - - init_shfo_tests(); - test_rename(); - clean_after_shfo_tests(); - - init_shfo_tests(); - test_copy(); - clean_after_shfo_tests(); - - init_shfo_tests(); - test_move(); - clean_after_shfo_tests(); - - test_sh_create_dir(); - clean_after_shfo_tests(); - - init_shfo_tests(); - test_sh_path_prepare(); - clean_after_shfo_tests(); - - test_unicode(); -} diff --git a/rostests/winetests/shell32/shlfolder.c b/rostests/winetests/shell32/shlfolder.c deleted file mode 100644 index 5c43d3820c0..00000000000 --- a/rostests/winetests/shell32/shlfolder.c +++ /dev/null @@ -1,1501 +0,0 @@ -/* - * Unit test of the IShellFolder functions. - * - * Copyright 2004 Vitaliy Margolen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 COBJMACROS -#define CONST_VTABLE - -#include "windef.h" -#include "winbase.h" -#include "wtypes.h" -#include "shellapi.h" - - -#include "shlguid.h" -#include "shlobj.h" -#include "shobjidl.h" -#include "shlwapi.h" -#include "ocidl.h" -#include "oleauto.h" - -#include "wine/test.h" - - -static IMalloc *ppM; - -static HRESULT (WINAPI *pSHBindToParent)(LPCITEMIDLIST, REFIID, LPVOID*, LPCITEMIDLIST*); -static HRESULT (WINAPI *pSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR); -static HRESULT (WINAPI *pSHGetFolderPathAndSubDirA)(HWND, int, HANDLE, DWORD, LPCSTR, LPSTR); -static BOOL (WINAPI *pSHGetPathFromIDListW)(LPCITEMIDLIST,LPWSTR); -static BOOL (WINAPI *pSHGetSpecialFolderPathW)(HWND, LPWSTR, int, BOOL); -static HRESULT (WINAPI *pStrRetToBufW)(STRRET*,LPCITEMIDLIST,LPWSTR,UINT); -static LPITEMIDLIST (WINAPI *pILFindLastID)(LPCITEMIDLIST); -static void (WINAPI *pILFree)(LPITEMIDLIST); -static BOOL (WINAPI *pILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST); - -static void init_function_pointers(void) -{ - HMODULE hmod; - HRESULT hr; - - hmod = GetModuleHandleA("shell32.dll"); - pSHBindToParent = (void*)GetProcAddress(hmod, "SHBindToParent"); - pSHGetFolderPathA = (void*)GetProcAddress(hmod, "SHGetFolderPathA"); - pSHGetFolderPathAndSubDirA = (void*)GetProcAddress(hmod, "SHGetFolderPathAndSubDirA"); - pSHGetPathFromIDListW = (void*)GetProcAddress(hmod, "SHGetPathFromIDListW"); - pSHGetSpecialFolderPathW = (void*)GetProcAddress(hmod, "SHGetSpecialFolderPathW"); - pILFindLastID = (void *)GetProcAddress(hmod, (LPCSTR)16); - pILFree = (void*)GetProcAddress(hmod, (LPSTR)155); - pILIsEqual = (void*)GetProcAddress(hmod, (LPSTR)21); - - hmod = GetModuleHandleA("shlwapi.dll"); - pStrRetToBufW = (void*)GetProcAddress(hmod, "StrRetToBufW"); - - hr = SHGetMalloc(&ppM); - ok(hr == S_OK, "SHGetMalloc failed %08x\n", hr); -} - -static void test_ParseDisplayName(void) -{ - HRESULT hr; - IShellFolder *IDesktopFolder; - static const char *cNonExistDir1A = "c:\\nonexist_subdir"; - static const char *cNonExistDir2A = "c:\\\\nonexist_subdir"; - DWORD res; - WCHAR cTestDirW [MAX_PATH] = {0}; - ITEMIDLIST *newPIDL; - BOOL bRes; - - hr = SHGetDesktopFolder(&IDesktopFolder); - if(hr != S_OK) return; - - res = GetFileAttributesA(cNonExistDir1A); - if(res != INVALID_FILE_ATTRIBUTES) return; - - MultiByteToWideChar(CP_ACP, 0, cNonExistDir1A, -1, cTestDirW, MAX_PATH); - hr = IShellFolder_ParseDisplayName(IDesktopFolder, - NULL, NULL, cTestDirW, NULL, &newPIDL, 0); - ok((hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) || (hr == E_FAIL), - "ParseDisplayName returned %08x, expected 80070002 or E_FAIL\n", hr); - - res = GetFileAttributesA(cNonExistDir2A); - if(res != INVALID_FILE_ATTRIBUTES) return; - - MultiByteToWideChar(CP_ACP, 0, cNonExistDir2A, -1, cTestDirW, MAX_PATH); - hr = IShellFolder_ParseDisplayName(IDesktopFolder, - NULL, NULL, cTestDirW, NULL, &newPIDL, 0); - ok((hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) || (hr == E_FAIL) || (hr == E_INVALIDARG), - "ParseDisplayName returned %08x, expected 80070002, E_FAIL or E_INVALIDARG\n", hr); - - /* I thought that perhaps the DesktopFolder's ParseDisplayName would recognize the - * path corresponding to CSIDL_PERSONAL and return a CLSID_MyDocuments PIDL. Turns - * out it doesn't. The magic seems to happen in the file dialogs, then. */ - if (!pSHGetSpecialFolderPathW || !pILFindLastID) goto finished; - - bRes = pSHGetSpecialFolderPathW(NULL, cTestDirW, CSIDL_PERSONAL, FALSE); - ok(bRes, "SHGetSpecialFolderPath(CSIDL_PERSONAL) failed! %u\n", GetLastError()); - if (!bRes) goto finished; - - hr = IShellFolder_ParseDisplayName(IDesktopFolder, NULL, NULL, cTestDirW, NULL, &newPIDL, 0); - ok(SUCCEEDED(hr), "DesktopFolder->ParseDisplayName failed. hr = %08x.\n", hr); - if (FAILED(hr)) goto finished; - - ok(pILFindLastID(newPIDL)->mkid.abID[0] == 0x31, "Last pidl should be of type " - "PT_FOLDER, but is: %02x\n", pILFindLastID(newPIDL)->mkid.abID[0]); - IMalloc_Free(ppM, newPIDL); - -finished: - IShellFolder_Release(IDesktopFolder); -} - -/* creates a file with the specified name for tests */ -static void CreateTestFile(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - if (file != INVALID_HANDLE_VALUE) - { - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); - } -} - - -/* initializes the tests */ -static void CreateFilesFolders(void) -{ - CreateDirectoryA(".\\testdir", NULL); - CreateDirectoryA(".\\testdir\\test.txt", NULL); - CreateTestFile (".\\testdir\\test1.txt "); - CreateTestFile (".\\testdir\\test2.txt "); - CreateTestFile (".\\testdir\\test3.txt "); - CreateDirectoryA(".\\testdir\\testdir2 ", NULL); - CreateDirectoryA(".\\testdir\\testdir2\\subdir", NULL); -} - -/* cleans after tests */ -static void Cleanup(void) -{ - DeleteFileA(".\\testdir\\test1.txt"); - DeleteFileA(".\\testdir\\test2.txt"); - DeleteFileA(".\\testdir\\test3.txt"); - RemoveDirectoryA(".\\testdir\\test.txt"); - RemoveDirectoryA(".\\testdir\\testdir2\\subdir"); - RemoveDirectoryA(".\\testdir\\testdir2"); - RemoveDirectoryA(".\\testdir"); -} - - -/* perform test */ -static void test_EnumObjects(IShellFolder *iFolder) -{ - IEnumIDList *iEnumList; - LPITEMIDLIST newPIDL, idlArr[10]; - ULONG NumPIDLs; - int i=0, j; - HRESULT hr; - - static const WORD iResults [5][5] = - { - { 0,-1,-1,-1,-1}, - { 1, 0,-1,-1,-1}, - { 1, 1, 0,-1,-1}, - { 1, 1, 1, 0,-1}, - { 1, 1, 1, 1, 0} - }; - -#define SFGAO_testfor SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR | SFGAO_CAPABILITYMASK - /* Don't test for SFGAO_HASSUBFOLDER since we return real state and native cached */ - static const ULONG attrs[5] = - { - SFGAO_CAPABILITYMASK | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR, - SFGAO_CAPABILITYMASK | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR, - SFGAO_CAPABILITYMASK | SFGAO_FILESYSTEM, - SFGAO_CAPABILITYMASK | SFGAO_FILESYSTEM, - SFGAO_CAPABILITYMASK | SFGAO_FILESYSTEM, - }; - - hr = IShellFolder_EnumObjects(iFolder, NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &iEnumList); - ok(hr == S_OK, "EnumObjects failed %08x\n", hr); - - /* This is to show that, contrary to what is said on MSDN, on IEnumIDList::Next, - * the filesystem shellfolders return S_OK even if less than 'celt' items are - * returned (in contrast to S_FALSE). We have to do it in a loop since WinXP - * only ever returns a single entry per call. */ - while (IEnumIDList_Next(iEnumList, 10-i, &idlArr[i], &NumPIDLs) == S_OK) - i += NumPIDLs; - ok (i == 5, "i: %d\n", i); - - hr = IEnumIDList_Release(iEnumList); - ok(hr == S_OK, "IEnumIDList_Release failed %08x\n", hr); - - /* Sort them first in case of wrong order from system */ - for (i=0;i<5;i++) for (j=0;j<5;j++) - if ((SHORT)IShellFolder_CompareIDs(iFolder, 0, idlArr[i], idlArr[j]) < 0) - { - newPIDL = idlArr[i]; - idlArr[i] = idlArr[j]; - idlArr[j] = newPIDL; - } - - for (i=0;i<5;i++) for (j=0;j<5;j++) - { - hr = IShellFolder_CompareIDs(iFolder, 0, idlArr[i], idlArr[j]); - ok(hr == iResults[i][j], "Got %x expected [%d]-[%d]=%x\n", hr, i, j, iResults[i][j]); - } - - - for (i = 0; i < 5; i++) - { - SFGAOF flags; - /* Native returns all flags no matter what we ask for */ - flags = SFGAO_CANCOPY; - hr = IShellFolder_GetAttributesOf(iFolder, 1, (LPCITEMIDLIST*)(idlArr + i), &flags); - flags &= SFGAO_testfor; - ok(hr == S_OK, "GetAttributesOf returns %08x\n", hr); - ok(flags == (attrs[i]), "GetAttributesOf[%i] got %08x, expected %08x\n", i, flags, attrs[i]); - - flags = SFGAO_testfor; - hr = IShellFolder_GetAttributesOf(iFolder, 1, (LPCITEMIDLIST*)(idlArr + i), &flags); - flags &= SFGAO_testfor; - ok(hr == S_OK, "GetAttributesOf returns %08x\n", hr); - ok(flags == attrs[i], "GetAttributesOf[%i] got %08x, expected %08x\n", i, flags, attrs[i]); - } - - for (i=0;i<5;i++) - IMalloc_Free(ppM, idlArr[i]); -} - -static void test_BindToObject(void) -{ - HRESULT hr; - UINT cChars; - IShellFolder *psfDesktop, *psfChild, *psfMyComputer, *psfSystemDir; - SHITEMID emptyitem = { 0, { 0 } }; - LPITEMIDLIST pidlMyComputer, pidlSystemDir, pidlEmpty = (LPITEMIDLIST)&emptyitem; - WCHAR wszSystemDir[MAX_PATH]; - char szSystemDir[MAX_PATH]; - WCHAR wszMyComputer[] = { - ':',':','{','2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-', - 'A','2','D','8','-','0','8','0','0','2','B','3','0','3','0','9','D','}',0 }; - - /* The following tests shows that BindToObject should fail with E_INVALIDARG if called - * with an empty pidl. This is tested for Desktop, MyComputer and the FS ShellFolder - */ - hr = SHGetDesktopFolder(&psfDesktop); - ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - hr = IShellFolder_BindToObject(psfDesktop, pidlEmpty, NULL, &IID_IShellFolder, (LPVOID*)&psfChild); - ok (hr == E_INVALIDARG, "Desktop's BindToObject should fail, when called with empty pidl! hr = %08x\n", hr); - - hr = IShellFolder_BindToObject(psfDesktop, NULL, NULL, &IID_IShellFolder, (LPVOID*)&psfChild); - ok (hr == E_INVALIDARG, "Desktop's BindToObject should fail, when called with NULL pidl! hr = %08x\n", hr); - - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszMyComputer, NULL, &pidlMyComputer, NULL); - ok (SUCCEEDED(hr), "Desktop's ParseDisplayName failed to parse MyComputer's CLSID! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - return; - } - - hr = IShellFolder_BindToObject(psfDesktop, pidlMyComputer, NULL, &IID_IShellFolder, (LPVOID*)&psfMyComputer); - ok (SUCCEEDED(hr), "Desktop failed to bind to MyComputer object! hr = %08x\n", hr); - IShellFolder_Release(psfDesktop); - IMalloc_Free(ppM, pidlMyComputer); - if (FAILED(hr)) return; - - hr = IShellFolder_BindToObject(psfMyComputer, pidlEmpty, NULL, &IID_IShellFolder, (LPVOID*)&psfChild); - ok (hr == E_INVALIDARG, "MyComputers's BindToObject should fail, when called with empty pidl! hr = %08x\n", hr); - -#if 0 - /* this call segfaults on 98SE */ - hr = IShellFolder_BindToObject(psfMyComputer, NULL, NULL, &IID_IShellFolder, (LPVOID*)&psfChild); - ok (hr == E_INVALIDARG, "MyComputers's BindToObject should fail, when called with NULL pidl! hr = %08x\n", hr); -#endif - - cChars = GetSystemDirectoryA(szSystemDir, MAX_PATH); - ok (cChars > 0 && cChars < MAX_PATH, "GetSystemDirectoryA failed! LastError: %u\n", GetLastError()); - if (cChars == 0 || cChars >= MAX_PATH) { - IShellFolder_Release(psfMyComputer); - return; - } - MultiByteToWideChar(CP_ACP, 0, szSystemDir, -1, wszSystemDir, MAX_PATH); - - hr = IShellFolder_ParseDisplayName(psfMyComputer, NULL, NULL, wszSystemDir, NULL, &pidlSystemDir, NULL); - ok (SUCCEEDED(hr), "MyComputers's ParseDisplayName failed to parse the SystemDirectory! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfMyComputer); - return; - } - - hr = IShellFolder_BindToObject(psfMyComputer, pidlSystemDir, NULL, &IID_IShellFolder, (LPVOID*)&psfSystemDir); - ok (SUCCEEDED(hr), "MyComputer failed to bind to a FileSystem ShellFolder! hr = %08x\n", hr); - IShellFolder_Release(psfMyComputer); - IMalloc_Free(ppM, pidlSystemDir); - if (FAILED(hr)) return; - - hr = IShellFolder_BindToObject(psfSystemDir, pidlEmpty, NULL, &IID_IShellFolder, (LPVOID*)&psfChild); - ok (hr == E_INVALIDARG, - "FileSystem ShellFolder's BindToObject should fail, when called with empty pidl! hr = %08x\n", hr); - -#if 0 - /* this call segfaults on 98SE */ - hr = IShellFolder_BindToObject(psfSystemDir, NULL, NULL, &IID_IShellFolder, (LPVOID*)&psfChild); - ok (hr == E_INVALIDARG, - "FileSystem ShellFolder's BindToObject should fail, when called with NULL pidl! hr = %08x\n", hr); -#endif - - IShellFolder_Release(psfSystemDir); -} - -/* Based on PathAddBackslashW from dlls/shlwapi/path.c */ -static LPWSTR myPathAddBackslashW( LPWSTR lpszPath ) -{ - size_t iLen; - - if (!lpszPath || (iLen = lstrlenW(lpszPath)) >= MAX_PATH) - return NULL; - - if (iLen) - { - lpszPath += iLen; - if (lpszPath[-1] != '\\') - { - *lpszPath++ = '\\'; - *lpszPath = '\0'; - } - } - return lpszPath; -} - -static void test_GetDisplayName(void) -{ - BOOL result; - HRESULT hr; - HANDLE hTestFile; - WCHAR wszTestFile[MAX_PATH], wszTestFile2[MAX_PATH], wszTestDir[MAX_PATH]; - char szTestFile[MAX_PATH], szTestDir[MAX_PATH]; - DWORD attr; - STRRET strret; - LPSHELLFOLDER psfDesktop, psfPersonal; - IUnknown *psfFile; - SHITEMID emptyitem = { 0, { 0 } }; - LPITEMIDLIST pidlTestFile, pidlEmpty = (LPITEMIDLIST)&emptyitem; - LPCITEMIDLIST pidlLast; - static const WCHAR wszFileName[] = { 'w','i','n','e','t','e','s','t','.','f','o','o',0 }; - static const WCHAR wszDirName[] = { 'w','i','n','e','t','e','s','t',0 }; - - /* I'm trying to figure if there is a functional difference between calling - * SHGetPathFromIDListW and calling GetDisplayNameOf(SHGDN_FORPARSING) after - * binding to the shellfolder. One thing I thought of was that perhaps - * SHGetPathFromIDListW would be able to get the path to a file, which does - * not exist anymore, while the other method wouldn't. It turns out there's - * no functional difference in this respect. - */ - - if(!pSHGetSpecialFolderPathW) return; - - /* First creating a directory in MyDocuments and a file in this directory. */ - result = pSHGetSpecialFolderPathW(NULL, wszTestDir, CSIDL_PERSONAL, FALSE); - ok(result, "SHGetSpecialFolderPathW failed! Last error: %u\n", GetLastError()); - if (!result) return; - - myPathAddBackslashW(wszTestDir); - lstrcatW(wszTestDir, wszDirName); - /* Use ANSI file functions so this works on Windows 9x */ - WideCharToMultiByte(CP_ACP, 0, wszTestDir, -1, szTestDir, MAX_PATH, 0, 0); - CreateDirectoryA(szTestDir, NULL); - attr=GetFileAttributesA(szTestDir); - if (attr == INVALID_FILE_ATTRIBUTES || !(attr & FILE_ATTRIBUTE_DIRECTORY)) - { - ok(0, "unable to create the '%s' directory\n", szTestDir); - return; - } - - lstrcpyW(wszTestFile, wszTestDir); - myPathAddBackslashW(wszTestFile); - lstrcatW(wszTestFile, wszFileName); - WideCharToMultiByte(CP_ACP, 0, wszTestFile, -1, szTestFile, MAX_PATH, 0, 0); - - hTestFile = CreateFileA(szTestFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok((hTestFile != INVALID_HANDLE_VALUE), "CreateFileA failed! Last error: %u\n", GetLastError()); - if (hTestFile == INVALID_HANDLE_VALUE) return; - CloseHandle(hTestFile); - - /* Getting an itemidlist for the file. */ - hr = SHGetDesktopFolder(&psfDesktop); - ok(SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszTestFile, NULL, &pidlTestFile, NULL); - ok(SUCCEEDED(hr), "Desktop->ParseDisplayName failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - return; - } - - /* WinXP stores the filenames as both ANSI and UNICODE in the pidls */ - pidlLast = pILFindLastID(pidlTestFile); - ok(pidlLast->mkid.cb >=76, "Expected pidl length of at least 76, got %d.\n", pidlLast->mkid.cb); - if (pidlLast->mkid.cb >= 76) { - ok(!lstrcmpW((WCHAR*)&pidlLast->mkid.abID[46], wszFileName), - "WinXP stores the filename as a wchar-string at this position!\n"); - } - - /* It seems as if we cannot bind to regular files on windows, but only directories. - */ - hr = IShellFolder_BindToObject(psfDesktop, pidlTestFile, NULL, &IID_IUnknown, (VOID**)&psfFile); - todo_wine { ok (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "hr = %08x\n", hr); } - if (SUCCEEDED(hr)) { - IShellFolder_Release(psfFile); - } - - /* Some tests for IShellFolder::SetNameOf */ - hr = pSHBindToParent(pidlTestFile, &IID_IShellFolder, (VOID**)&psfPersonal, &pidlLast); - ok(SUCCEEDED(hr), "SHBindToParent failed! hr = %08x\n", hr); - if (SUCCEEDED(hr)) { - /* It's ok to use this fixed path. Call will fail anyway. */ - WCHAR wszAbsoluteFilename[] = { 'C',':','\\','w','i','n','e','t','e','s','t', 0 }; - LPITEMIDLIST pidlNew; - - /* The pidl returned through the last parameter of SetNameOf is a simple one. */ - hr = IShellFolder_SetNameOf(psfPersonal, NULL, pidlLast, wszDirName, SHGDN_NORMAL, &pidlNew); - ok (SUCCEEDED(hr), "SetNameOf failed! hr = %08x\n", hr); - ok (((LPITEMIDLIST)((LPBYTE)pidlNew+pidlNew->mkid.cb))->mkid.cb == 0, - "pidl returned from SetNameOf should be simple!\n"); - - /* Passing an absolute path to SetNameOf fails. The HRESULT code indicates that SetNameOf - * is implemented on top of SHFileOperation in WinXP. */ - hr = IShellFolder_SetNameOf(psfPersonal, NULL, pidlNew, wszAbsoluteFilename, - SHGDN_FORPARSING, NULL); - ok (hr == HRESULT_FROM_WIN32(ERROR_CANCELLED), "SetNameOf succeeded! hr = %08x\n", hr); - - /* Rename the file back to its original name. SetNameOf ignores the fact, that the - * SHGDN flags specify an absolute path. */ - hr = IShellFolder_SetNameOf(psfPersonal, NULL, pidlNew, wszFileName, SHGDN_FORPARSING, NULL); - ok (SUCCEEDED(hr), "SetNameOf failed! hr = %08x\n", hr); - - pILFree(pidlNew); - IShellFolder_Release(psfPersonal); - } - - /* Deleting the file and the directory */ - DeleteFileA(szTestFile); - RemoveDirectoryA(szTestDir); - - /* SHGetPathFromIDListW still works, although the file is not present anymore. */ - if (pSHGetPathFromIDListW) - { - result = pSHGetPathFromIDListW(pidlTestFile, wszTestFile2); - ok (result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError()); - ok (!lstrcmpiW(wszTestFile, wszTestFile2), "SHGetPathFromIDListW returns incorrect path!\n"); - } - - if(!pSHBindToParent) return; - - /* SHBindToParent fails, if called with a NULL PIDL. */ - hr = pSHBindToParent(NULL, &IID_IShellFolder, (VOID**)&psfPersonal, &pidlLast); - ok (FAILED(hr), "SHBindToParent(NULL) should fail!\n"); - - /* But it succeeds with an empty PIDL. */ - hr = pSHBindToParent(pidlEmpty, &IID_IShellFolder, (VOID**)&psfPersonal, &pidlLast); - ok (SUCCEEDED(hr), "SHBindToParent(empty PIDL) should succeed! hr = %08x\n", hr); - ok (pidlLast == pidlEmpty, "The last element of an empty PIDL should be the PIDL itself!\n"); - if (SUCCEEDED(hr)) - IShellFolder_Release(psfPersonal); - - /* Binding to the folder and querying the display name of the file also works. */ - hr = pSHBindToParent(pidlTestFile, &IID_IShellFolder, (VOID**)&psfPersonal, &pidlLast); - ok (SUCCEEDED(hr), "SHBindToParent failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - return; - } - - /* This test shows that Windows doesn't allocate a new pidlLast, but returns a pointer into - * pidlTestFile (In accordance with MSDN). */ - ok (pILFindLastID(pidlTestFile) == pidlLast, - "SHBindToParent doesn't return the last id of the pidl param!\n"); - - hr = IShellFolder_GetDisplayNameOf(psfPersonal, pidlLast, SHGDN_FORPARSING, &strret); - ok (SUCCEEDED(hr), "Personal->GetDisplayNameOf failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - IShellFolder_Release(psfPersonal); - return; - } - - if (pStrRetToBufW) - { - hr = pStrRetToBufW(&strret, pidlLast, wszTestFile2, MAX_PATH); - ok (SUCCEEDED(hr), "StrRetToBufW failed! hr = %08x\n", hr); - ok (!lstrcmpiW(wszTestFile, wszTestFile2), "GetDisplayNameOf returns incorrect path!\n"); - } - - IShellFolder_Release(psfDesktop); - IShellFolder_Release(psfPersonal); -} - -static void test_CallForAttributes(void) -{ - HKEY hKey; - LONG lResult; - HRESULT hr; - DWORD dwSize; - LPSHELLFOLDER psfDesktop; - LPITEMIDLIST pidlMyDocuments; - DWORD dwAttributes, dwCallForAttributes, dwOrigAttributes, dwOrigCallForAttributes; - static const WCHAR wszAttributes[] = { 'A','t','t','r','i','b','u','t','e','s',0 }; - static const WCHAR wszCallForAttributes[] = { - 'C','a','l','l','F','o','r','A','t','t','r','i','b','u','t','e','s',0 }; - static const WCHAR wszMyDocumentsKey[] = { - 'C','L','S','I','D','\\','{','4','5','0','D','8','F','B','A','-','A','D','2','5','-', - '1','1','D','0','-','9','8','A','8','-','0','8','0','0','3','6','1','B','1','1','0','3','}', - '\\','S','h','e','l','l','F','o','l','d','e','r',0 }; - WCHAR wszMyDocuments[] = { - ':',':','{','4','5','0','D','8','F','B','A','-','A','D','2','5','-','1','1','D','0','-', - '9','8','A','8','-','0','8','0','0','3','6','1','B','1','1','0','3','}',0 }; - - /* For the root of a namespace extension, the attributes are not queried by binding - * to the object and calling GetAttributesOf. Instead, the attributes are read from - * the registry value HKCR/CLSID/{...}/ShellFolder/Attributes. This is documented on MSDN. - * - * The MyDocuments shellfolder on WinXP has a HKCR/CLSID/{...}/ShellFolder/CallForAttributes - * value. It seems that if the folder is queried for one of the flags set in CallForAttributes, - * the shell does bind to the folder object and calls GetAttributesOf. This is not documented - * on MSDN. This test is meant to document the observed behaviour on WinXP SP2. - */ - hr = SHGetDesktopFolder(&psfDesktop); - ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszMyDocuments, NULL, - &pidlMyDocuments, NULL); - ok (SUCCEEDED(hr), - "Desktop's ParseDisplayName failed to parse MyDocuments's CLSID! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - return; - } - - dwAttributes = 0xffffffff; - hr = IShellFolder_GetAttributesOf(psfDesktop, 1, - (LPCITEMIDLIST*)&pidlMyDocuments, &dwAttributes); - ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(MyDocuments) failed! hr = %08x\n", hr); - - /* We need the following setup (as observed on WinXP SP2), for the tests to make sense. */ - ok (dwAttributes & SFGAO_FILESYSTEM, "SFGAO_FILESYSTEM attribute is not set for MyDocuments!\n"); - ok (!(dwAttributes & SFGAO_ISSLOW), "SFGAO_ISSLOW attribute is set for MyDocuments!\n"); - ok (!(dwAttributes & SFGAO_GHOSTED), "SFGAO_GHOSTED attribute is set for MyDocuments!\n"); - - /* We don't have the MyDocuments shellfolder in wine yet, and thus we don't have the registry - * key. So the test will return at this point, if run on wine. - */ - lResult = RegOpenKeyExW(HKEY_CLASSES_ROOT, wszMyDocumentsKey, 0, KEY_WRITE|KEY_READ, &hKey); - ok (lResult == ERROR_SUCCESS, "RegOpenKeyEx failed! result: %08x\n", lResult); - if (lResult != ERROR_SUCCESS) { - IMalloc_Free(ppM, pidlMyDocuments); - IShellFolder_Release(psfDesktop); - return; - } - - /* Query MyDocuments' Attributes value, to be able to restore it later. */ - dwSize = sizeof(DWORD); - lResult = RegQueryValueExW(hKey, wszAttributes, NULL, NULL, (LPBYTE)&dwOrigAttributes, &dwSize); - ok (lResult == ERROR_SUCCESS, "RegQueryValueEx failed! result: %08x\n", lResult); - if (lResult != ERROR_SUCCESS) { - RegCloseKey(hKey); - IMalloc_Free(ppM, pidlMyDocuments); - IShellFolder_Release(psfDesktop); - return; - } - - /* Query MyDocuments' CallForAttributes value, to be able to restore it later. */ - dwSize = sizeof(DWORD); - lResult = RegQueryValueExW(hKey, wszCallForAttributes, NULL, NULL, - (LPBYTE)&dwOrigCallForAttributes, &dwSize); - ok (lResult == ERROR_SUCCESS, "RegQueryValueEx failed! result: %08x\n", lResult); - if (lResult != ERROR_SUCCESS) { - RegCloseKey(hKey); - IMalloc_Free(ppM, pidlMyDocuments); - IShellFolder_Release(psfDesktop); - return; - } - - /* Define via the Attributes value that MyDocuments attributes are SFGAO_ISSLOW and - * SFGAO_GHOSTED and that MyDocuments should be called for the SFGAO_ISSLOW and - * SFGAO_FILESYSTEM attributes. */ - dwAttributes = SFGAO_ISSLOW|SFGAO_GHOSTED; - RegSetValueExW(hKey, wszAttributes, 0, REG_DWORD, (LPBYTE)&dwAttributes, sizeof(DWORD)); - dwCallForAttributes = SFGAO_ISSLOW|SFGAO_FILESYSTEM; - RegSetValueExW(hKey, wszCallForAttributes, 0, REG_DWORD, - (LPBYTE)&dwCallForAttributes, sizeof(DWORD)); - - /* Although it is not set in CallForAttributes, the SFGAO_GHOSTED flag is reset by - * GetAttributesOf. It seems that once there is a single attribute queried, for which - * CallForAttributes is set, all flags are taken from the GetAttributesOf call and - * the flags in Attributes are ignored. - */ - dwAttributes = SFGAO_ISSLOW|SFGAO_GHOSTED|SFGAO_FILESYSTEM; - hr = IShellFolder_GetAttributesOf(psfDesktop, 1, - (LPCITEMIDLIST*)&pidlMyDocuments, &dwAttributes); - ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(MyDocuments) failed! hr = %08x\n", hr); - if (SUCCEEDED(hr)) - ok (dwAttributes == SFGAO_FILESYSTEM, - "Desktop->GetAttributes(MyDocuments) returned unexpected attributes: %08x\n", - dwAttributes); - - /* Restore MyDocuments' original Attributes and CallForAttributes registry values */ - RegSetValueExW(hKey, wszAttributes, 0, REG_DWORD, (LPBYTE)&dwOrigAttributes, sizeof(DWORD)); - RegSetValueExW(hKey, wszCallForAttributes, 0, REG_DWORD, - (LPBYTE)&dwOrigCallForAttributes, sizeof(DWORD)); - RegCloseKey(hKey); - IMalloc_Free(ppM, pidlMyDocuments); - IShellFolder_Release(psfDesktop); -} - -static void test_GetAttributesOf(void) -{ - HRESULT hr; - LPSHELLFOLDER psfDesktop, psfMyComputer; - SHITEMID emptyitem = { 0, { 0 } }; - LPCITEMIDLIST pidlEmpty = (LPCITEMIDLIST)&emptyitem; - LPITEMIDLIST pidlMyComputer; - DWORD dwFlags; - static const DWORD dwDesktopFlags = /* As observed on WinXP SP2 */ - SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | - SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER; - static const DWORD dwMyComputerFlags = /* As observed on WinXP SP2 */ - SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | - SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER; - WCHAR wszMyComputer[] = { - ':',':','{','2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-', - 'A','2','D','8','-','0','8','0','0','2','B','3','0','3','0','9','D','}',0 }; - char cCurrDirA [MAX_PATH] = {0}; - WCHAR cCurrDirW [MAX_PATH]; - static WCHAR cTestDirW[] = {'t','e','s','t','d','i','r',0}; - static const WCHAR cBackSlash[] = {'\\',0}; - IShellFolder *IDesktopFolder, *testIShellFolder; - ITEMIDLIST *newPIDL; - int len; - - hr = SHGetDesktopFolder(&psfDesktop); - ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - /* The Desktop attributes can be queried with a single empty itemidlist, .. */ - dwFlags = 0xffffffff; - hr = IShellFolder_GetAttributesOf(psfDesktop, 1, &pidlEmpty, &dwFlags); - ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(empty pidl) failed! hr = %08x\n", hr); - ok (dwFlags == dwDesktopFlags, "Wrong Desktop attributes: %08x, expected: %08x\n", - dwFlags, dwDesktopFlags); - - /* .. or with no itemidlist at all. */ - dwFlags = 0xffffffff; - hr = IShellFolder_GetAttributesOf(psfDesktop, 0, NULL, &dwFlags); - ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(NULL) failed! hr = %08x\n", hr); - ok (dwFlags == dwDesktopFlags, "Wrong Desktop attributes: %08x, expected: %08x\n", - dwFlags, dwDesktopFlags); - - /* Testing the attributes of the MyComputer shellfolder */ - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszMyComputer, NULL, &pidlMyComputer, NULL); - ok (SUCCEEDED(hr), "Desktop's ParseDisplayName failed to parse MyComputer's CLSID! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - return; - } - - /* WinXP SP2 sets the SFGAO_CANLINK flag, when MyComputer is queried via the Desktop - * folder object. It doesn't do this, if MyComputer is queried directly (see below). - * SFGAO_CANLINK is the same as DROPEFFECT_LINK, which MSDN says means: "Drag source - * should create a link to the original data". You can't create links on MyComputer on - * Windows, so this flag shouldn't be set. Seems like a bug in Windows. As long as nobody - * depends on this bug, we probably shouldn't imitate it. - */ - dwFlags = 0xffffffff; - hr = IShellFolder_GetAttributesOf(psfDesktop, 1, (LPCITEMIDLIST*)&pidlMyComputer, &dwFlags); - ok (SUCCEEDED(hr), "Desktop->GetAttributesOf(MyComputer) failed! hr = %08x\n", hr); - ok ((dwFlags & ~(DWORD)SFGAO_CANLINK) == dwMyComputerFlags, - "Wrong MyComputer attributes: %08x, expected: %08x\n", dwFlags, dwMyComputerFlags); - - hr = IShellFolder_BindToObject(psfDesktop, pidlMyComputer, NULL, &IID_IShellFolder, (LPVOID*)&psfMyComputer); - ok (SUCCEEDED(hr), "Desktop failed to bind to MyComputer object! hr = %08x\n", hr); - IShellFolder_Release(psfDesktop); - IMalloc_Free(ppM, pidlMyComputer); - if (FAILED(hr)) return; - - hr = IShellFolder_GetAttributesOf(psfMyComputer, 1, &pidlEmpty, &dwFlags); - todo_wine {ok (hr == E_INVALIDARG, "MyComputer->GetAttributesOf(emtpy pidl) should fail! hr = %08x\n", hr); } - - dwFlags = 0xffffffff; - hr = IShellFolder_GetAttributesOf(psfMyComputer, 0, NULL, &dwFlags); - ok (SUCCEEDED(hr), "MyComputer->GetAttributesOf(NULL) failed! hr = %08x\n", hr); - todo_wine { ok (dwFlags == dwMyComputerFlags, - "Wrong MyComputer attributes: %08x, expected: %08x\n", dwFlags, dwMyComputerFlags); } - - IShellFolder_Release(psfMyComputer); - - /* create test directory */ - CreateFilesFolders(); - - GetCurrentDirectoryA(MAX_PATH, cCurrDirA); - len = lstrlenA(cCurrDirA); - - if (len == 0) { - trace("GetCurrentDirectoryA returned empty string. Skipping test_EnumObjects_and_CompareIDs\n"); - return; - } - if(cCurrDirA[len-1] == '\\') - cCurrDirA[len-1] = 0; - - MultiByteToWideChar(CP_ACP, 0, cCurrDirA, -1, cCurrDirW, MAX_PATH); - - hr = SHGetDesktopFolder(&IDesktopFolder); - ok(hr == S_OK, "SHGetDesktopfolder failed %08x\n", hr); - - hr = IShellFolder_ParseDisplayName(IDesktopFolder, NULL, NULL, cCurrDirW, NULL, &newPIDL, 0); - ok(hr == S_OK, "ParseDisplayName failed %08x\n", hr); - - hr = IShellFolder_BindToObject(IDesktopFolder, newPIDL, NULL, (REFIID)&IID_IShellFolder, (LPVOID *)&testIShellFolder); - ok(hr == S_OK, "BindToObject failed %08x\n", hr); - - IMalloc_Free(ppM, newPIDL); - - /* get relative PIDL */ - hr = IShellFolder_ParseDisplayName(testIShellFolder, NULL, NULL, cTestDirW, NULL, &newPIDL, 0); - ok(hr == S_OK, "ParseDisplayName failed %08x\n", hr); - - /* test the shell attributes of the test directory using the relative PIDL */ - dwFlags = SFGAO_FOLDER; - hr = IShellFolder_GetAttributesOf(testIShellFolder, 1, (LPCITEMIDLIST*)&newPIDL, &dwFlags); - ok (SUCCEEDED(hr), "Desktop->GetAttributesOf() failed! hr = %08x\n", hr); - ok ((dwFlags&SFGAO_FOLDER), "Wrong directory attribute for relative PIDL: %08x\n", dwFlags); - - /* free memory */ - IMalloc_Free(ppM, newPIDL); - - /* append testdirectory name to path */ - lstrcatW(cCurrDirW, cBackSlash); - lstrcatW(cCurrDirW, cTestDirW); - - hr = IShellFolder_ParseDisplayName(IDesktopFolder, NULL, NULL, cCurrDirW, NULL, &newPIDL, 0); - ok(hr == S_OK, "ParseDisplayName failed %08x\n", hr); - - /* test the shell attributes of the test directory using the absolute PIDL */ - dwFlags = SFGAO_FOLDER; - hr = IShellFolder_GetAttributesOf(IDesktopFolder, 1, (LPCITEMIDLIST*)&newPIDL, &dwFlags); - ok (SUCCEEDED(hr), "Desktop->GetAttributesOf() failed! hr = %08x\n", hr); - ok ((dwFlags&SFGAO_FOLDER), "Wrong directory attribute for absolute PIDL: %08x\n", dwFlags); - - /* free memory */ - IMalloc_Free(ppM, newPIDL); - - IShellFolder_Release(testIShellFolder); - - Cleanup(); - - IShellFolder_Release(IDesktopFolder); -} - -static void test_SHGetPathFromIDList(void) -{ - SHITEMID emptyitem = { 0, { 0 } }; - LPCITEMIDLIST pidlEmpty = (LPCITEMIDLIST)&emptyitem; - LPITEMIDLIST pidlMyComputer; - WCHAR wszPath[MAX_PATH], wszDesktop[MAX_PATH]; - BOOL result; - HRESULT hr; - LPSHELLFOLDER psfDesktop; - WCHAR wszMyComputer[] = { - ':',':','{','2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-', - 'A','2','D','8','-','0','8','0','0','2','B','3','0','3','0','9','D','}',0 }; - WCHAR wszFileName[MAX_PATH]; - LPITEMIDLIST pidlTestFile; - HANDLE hTestFile; - STRRET strret; - static WCHAR wszTestFile[] = { - 'w','i','n','e','t','e','s','t','.','f','o','o',0 }; - HRESULT (WINAPI *pSHGetSpecialFolderLocation)(HWND, int, LPITEMIDLIST *); - HMODULE hShell32; - LPITEMIDLIST pidlPrograms; - - if(!pSHGetPathFromIDListW || !pSHGetSpecialFolderPathW) - { - skip("SHGetPathFromIDListW() or SHGetSpecialFolderPathW() is missing\n"); - return; - } - - /* Calling SHGetPathFromIDListW with no pidl should return the empty string */ - wszPath[0] = 'a'; - wszPath[1] = '\0'; - result = pSHGetPathFromIDListW(NULL, wszPath); - ok(!result, "Expected failure\n"); - ok(!wszPath[0], "Expected empty string\n"); - - /* Calling SHGetPathFromIDListW with an empty pidl should return the desktop folder's path. */ - result = pSHGetSpecialFolderPathW(NULL, wszDesktop, CSIDL_DESKTOP, FALSE); - ok(result, "SHGetSpecialFolderPathW(CSIDL_DESKTOP) failed! Last error: %u\n", GetLastError()); - if (!result) return; - - result = pSHGetPathFromIDListW(pidlEmpty, wszPath); - ok(result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError()); - if (!result) return; - ok(!lstrcmpiW(wszDesktop, wszPath), "SHGetPathFromIDListW didn't return desktop path for empty pidl!\n"); - - /* MyComputer does not map to a filesystem path. SHGetPathFromIDListW should fail. */ - hr = SHGetDesktopFolder(&psfDesktop); - ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszMyComputer, NULL, &pidlMyComputer, NULL); - ok (SUCCEEDED(hr), "Desktop's ParseDisplayName failed to parse MyComputer's CLSID! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - return; - } - - SetLastError(0xdeadbeef); - wszPath[0] = 'a'; - wszPath[1] = '\0'; - result = pSHGetPathFromIDListW(pidlMyComputer, wszPath); - ok (!result, "SHGetPathFromIDListW succeeded where it shouldn't!\n"); - ok (GetLastError()==0xdeadbeef, "SHGetPathFromIDListW shouldn't set last error! Last error: %u\n", GetLastError()); - ok (!wszPath[0], "Expected empty path\n"); - if (result) { - IShellFolder_Release(psfDesktop); - return; - } - - IMalloc_Free(ppM, pidlMyComputer); - - result = pSHGetSpecialFolderPathW(NULL, wszFileName, CSIDL_DESKTOPDIRECTORY, FALSE); - ok(result, "SHGetSpecialFolderPathW failed! Last error: %u\n", GetLastError()); - if (!result) { - IShellFolder_Release(psfDesktop); - return; - } - myPathAddBackslashW(wszFileName); - lstrcatW(wszFileName, wszTestFile); - hTestFile = CreateFileW(wszFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL); - ok(hTestFile != INVALID_HANDLE_VALUE, "CreateFileW failed! Last error: %u\n", GetLastError()); - if (hTestFile == INVALID_HANDLE_VALUE) { - IShellFolder_Release(psfDesktop); - return; - } - CloseHandle(hTestFile); - - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszTestFile, NULL, &pidlTestFile, NULL); - ok (SUCCEEDED(hr), "Desktop's ParseDisplayName failed to parse filename hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - DeleteFileW(wszFileName); - IMalloc_Free(ppM, pidlTestFile); - return; - } - - /* This test is to show that the Desktop shellfolder prepends the CSIDL_DESKTOPDIRECTORY - * path for files placed on the desktop, if called with SHGDN_FORPARSING. */ - hr = IShellFolder_GetDisplayNameOf(psfDesktop, pidlTestFile, SHGDN_FORPARSING, &strret); - ok (SUCCEEDED(hr), "Desktop's GetDisplayNamfOf failed! hr = %08x\n", hr); - IShellFolder_Release(psfDesktop); - DeleteFileW(wszFileName); - if (FAILED(hr)) { - IMalloc_Free(ppM, pidlTestFile); - return; - } - if (pStrRetToBufW) - { - pStrRetToBufW(&strret, pidlTestFile, wszPath, MAX_PATH); - ok(0 == lstrcmpW(wszFileName, wszPath), - "Desktop->GetDisplayNameOf(pidlTestFile, SHGDN_FORPARSING) " - "returned incorrect path for file placed on desktop\n"); - } - - result = pSHGetPathFromIDListW(pidlTestFile, wszPath); - ok(result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError()); - IMalloc_Free(ppM, pidlTestFile); - if (!result) return; - ok(0 == lstrcmpW(wszFileName, wszPath), "SHGetPathFromIDListW returned incorrect path for file placed on desktop\n"); - - - /* Test if we can get the path from the start menu "program files" PIDL. */ - hShell32 = GetModuleHandleA("shell32"); - pSHGetSpecialFolderLocation = (void *)GetProcAddress(hShell32, "SHGetSpecialFolderLocation"); - - hr = pSHGetSpecialFolderLocation(NULL, CSIDL_PROGRAM_FILES, &pidlPrograms); - ok(SUCCEEDED(hr), "SHGetFolderLocation failed: 0x%08x\n", hr); - - SetLastError(0xdeadbeef); - result = pSHGetPathFromIDListW(pidlPrograms, wszPath); - IMalloc_Free(ppM, pidlPrograms); - ok(result, "SHGetPathFromIDListW failed\n"); -} - -static void test_EnumObjects_and_CompareIDs(void) -{ - ITEMIDLIST *newPIDL; - IShellFolder *IDesktopFolder, *testIShellFolder; - char cCurrDirA [MAX_PATH] = {0}; - WCHAR cCurrDirW [MAX_PATH]; - static const WCHAR cTestDirW[] = {'\\','t','e','s','t','d','i','r',0}; - int len; - HRESULT hr; - - GetCurrentDirectoryA(MAX_PATH, cCurrDirA); - len = lstrlenA(cCurrDirA); - - if(len == 0) { - trace("GetCurrentDirectoryA returned empty string. Skipping test_EnumObjects_and_CompareIDs\n"); - return; - } - if(cCurrDirA[len-1] == '\\') - cCurrDirA[len-1] = 0; - - MultiByteToWideChar(CP_ACP, 0, cCurrDirA, -1, cCurrDirW, MAX_PATH); - lstrcatW(cCurrDirW, cTestDirW); - - hr = SHGetDesktopFolder(&IDesktopFolder); - ok(hr == S_OK, "SHGetDesktopfolder failed %08x\n", hr); - - CreateFilesFolders(); - - hr = IShellFolder_ParseDisplayName(IDesktopFolder, NULL, NULL, cCurrDirW, NULL, &newPIDL, 0); - ok(hr == S_OK, "ParseDisplayName failed %08x\n", hr); - - hr = IShellFolder_BindToObject(IDesktopFolder, newPIDL, NULL, (REFIID)&IID_IShellFolder, (LPVOID *)&testIShellFolder); - ok(hr == S_OK, "BindToObject failed %08x\n", hr); - - test_EnumObjects(testIShellFolder); - - IShellFolder_Release(testIShellFolder); - - Cleanup(); - - IMalloc_Free(ppM, newPIDL); - - IShellFolder_Release(IDesktopFolder); -} - -/* A simple implementation of an IPropertyBag, which returns fixed values for - * 'Target' and 'Attributes' properties. - */ -static HRESULT WINAPI InitPropertyBag_IPropertyBag_QueryInterface(IPropertyBag *iface, REFIID riid, - void **ppvObject) -{ - if (!ppvObject) - return E_INVALIDARG; - - if (IsEqualIID(&IID_IUnknown, riid) || IsEqualIID(&IID_IPropertyBag, riid)) { - *ppvObject = iface; - } else { - ok (FALSE, "InitPropertyBag asked for unknown interface!\n"); - return E_NOINTERFACE; - } - - IPropertyBag_AddRef(iface); - return S_OK; -} - -static ULONG WINAPI InitPropertyBag_IPropertyBag_AddRef(IPropertyBag *iface) { - return 2; -} - -static ULONG WINAPI InitPropertyBag_IPropertyBag_Release(IPropertyBag *iface) { - return 1; -} - -static HRESULT WINAPI InitPropertyBag_IPropertyBag_Read(IPropertyBag *iface, LPCOLESTR pszPropName, - VARIANT *pVar, IErrorLog *pErrorLog) -{ - static const WCHAR wszTargetSpecialFolder[] = { - 'T','a','r','g','e','t','S','p','e','c','i','a','l','F','o','l','d','e','r',0 }; - static const WCHAR wszTarget[] = { - 'T','a','r','g','e','t',0 }; - static const WCHAR wszAttributes[] = { - 'A','t','t','r','i','b','u','t','e','s',0 }; - static const WCHAR wszResolveLinkFlags[] = { - 'R','e','s','o','l','v','e','L','i','n','k','F','l','a','g','s',0 }; - - if (!lstrcmpW(pszPropName, wszTargetSpecialFolder)) { - ok(V_VT(pVar) == VT_I4, "Wrong variant type for 'TargetSpecialFolder' property!\n"); - return E_INVALIDARG; - } - - if (!lstrcmpW(pszPropName, wszResolveLinkFlags)) - { - ok(V_VT(pVar) == VT_UI4, "Wrong variant type for 'ResolveLinkFlags' property!\n"); - return E_INVALIDARG; - } - - if (!lstrcmpW(pszPropName, wszTarget)) { - WCHAR wszPath[MAX_PATH]; - BOOL result; - - ok(V_VT(pVar) == VT_BSTR, "Wrong variant type for 'Target' property!\n"); - if (V_VT(pVar) != VT_BSTR) return E_INVALIDARG; - - result = pSHGetSpecialFolderPathW(NULL, wszPath, CSIDL_DESKTOPDIRECTORY, FALSE); - ok(result, "SHGetSpecialFolderPathW(DESKTOPDIRECTORY) failed! %u\n", GetLastError()); - if (!result) return E_INVALIDARG; - - V_BSTR(pVar) = SysAllocString(wszPath); - return S_OK; - } - - if (!lstrcmpW(pszPropName, wszAttributes)) { - ok(V_VT(pVar) == VT_UI4, "Wrong variant type for 'Attributes' property!\n"); - if (V_VT(pVar) != VT_UI4) return E_INVALIDARG; - V_UI4(pVar) = SFGAO_FOLDER|SFGAO_HASSUBFOLDER|SFGAO_FILESYSANCESTOR| - SFGAO_CANRENAME|SFGAO_FILESYSTEM; - return S_OK; - } - - ok(FALSE, "PropertyBag was asked for unknown property (vt=%d)!\n", V_VT(pVar)); - return E_INVALIDARG; -} - -static HRESULT WINAPI InitPropertyBag_IPropertyBag_Write(IPropertyBag *iface, LPCOLESTR pszPropName, - VARIANT *pVar) -{ - ok(FALSE, "Unexpected call to IPropertyBag_Write\n"); - return E_NOTIMPL; -} - -static const IPropertyBagVtbl InitPropertyBag_IPropertyBagVtbl = { - InitPropertyBag_IPropertyBag_QueryInterface, - InitPropertyBag_IPropertyBag_AddRef, - InitPropertyBag_IPropertyBag_Release, - InitPropertyBag_IPropertyBag_Read, - InitPropertyBag_IPropertyBag_Write -}; - -static struct IPropertyBag InitPropertyBag = { - &InitPropertyBag_IPropertyBagVtbl -}; - -static void test_FolderShortcut(void) { - IPersistPropertyBag *pPersistPropertyBag; - IShellFolder *pShellFolder, *pDesktopFolder; - IPersistFolder3 *pPersistFolder3; - HRESULT hr; - STRRET strret; - WCHAR wszDesktopPath[MAX_PATH], wszBuffer[MAX_PATH]; - BOOL result; - CLSID clsid; - LPITEMIDLIST pidlCurrentFolder, pidlWineTestFolder, pidlSubFolder; - HKEY hShellExtKey; - WCHAR wszWineTestFolder[] = { - ':',':','{','9','B','3','5','2','E','B','F','-','2','7','6','5','-','4','5','C','1','-', - 'B','4','C','6','-','8','5','C','C','7','F','7','A','B','C','6','4','}',0 }; - WCHAR wszShellExtKey[] = { 'S','o','f','t','w','a','r','e','\\', - 'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\', - 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\', - 'E','x','p','l','o','r','e','r','\\','D','e','s','k','t','o','p','\\', - 'N','a','m','e','S','p','a','c','e','\\', - '{','9','b','3','5','2','e','b','f','-','2','7','6','5','-','4','5','c','1','-', - 'b','4','c','6','-','8','5','c','c','7','f','7','a','b','c','6','4','}',0 }; - - WCHAR wszSomeSubFolder[] = { 'S','u','b','F','o','l','d','e','r', 0}; - static const GUID CLSID_UnixDosFolder = - {0x9d20aae8, 0x0625, 0x44b0, {0x9c, 0xa7, 0x71, 0x88, 0x9c, 0x22, 0x54, 0xd9}}; - - if (!pSHGetSpecialFolderPathW || !pStrRetToBufW) return; - - /* These tests basically show, that CLSID_FolderShortcuts are initialized - * via their IPersistPropertyBag interface. And that the target folder - * is taken from the IPropertyBag's 'Target' property. - */ - hr = CoCreateInstance(&CLSID_FolderShortcut, NULL, CLSCTX_INPROC_SERVER, - &IID_IPersistPropertyBag, (LPVOID*)&pPersistPropertyBag); - ok (SUCCEEDED(hr), "CoCreateInstance failed! hr = 0x%08x\n", hr); - if (FAILED(hr)) return; - - hr = IPersistPropertyBag_Load(pPersistPropertyBag, &InitPropertyBag, NULL); - ok(SUCCEEDED(hr), "IPersistPropertyBag_Load failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IPersistPropertyBag_Release(pPersistPropertyBag); - return; - } - - hr = IPersistPropertyBag_QueryInterface(pPersistPropertyBag, &IID_IShellFolder, - (LPVOID*)&pShellFolder); - IPersistPropertyBag_Release(pPersistPropertyBag); - ok(SUCCEEDED(hr), "IPersistPropertyBag_QueryInterface(IShellFolder) failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - hr = IShellFolder_GetDisplayNameOf(pShellFolder, NULL, SHGDN_FORPARSING, &strret); - ok(SUCCEEDED(hr), "IShellFolder_GetDisplayNameOf(NULL) failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(pShellFolder); - return; - } - - result = pSHGetSpecialFolderPathW(NULL, wszDesktopPath, CSIDL_DESKTOPDIRECTORY, FALSE); - ok(result, "SHGetSpecialFolderPathW(CSIDL_DESKTOPDIRECTORY) failed! %u\n", GetLastError()); - if (!result) return; - - pStrRetToBufW(&strret, NULL, wszBuffer, MAX_PATH); - ok(!lstrcmpiW(wszDesktopPath, wszBuffer), "FolderShortcut returned incorrect folder!\n"); - - hr = IShellFolder_QueryInterface(pShellFolder, &IID_IPersistFolder3, (LPVOID*)&pPersistFolder3); - IShellFolder_Release(pShellFolder); - ok(SUCCEEDED(hr), "IShellFolder_QueryInterface(IID_IPersistFolder3 failed! hr = 0x%08x\n", hr); - if (FAILED(hr)) return; - - hr = IPersistFolder3_GetClassID(pPersistFolder3, &clsid); - ok(SUCCEEDED(hr), "IPersistFolder3_GetClassID failed! hr=0x%08x\n", hr); - ok(IsEqualCLSID(&clsid, &CLSID_FolderShortcut), "Unexpected CLSID!\n"); - - hr = IPersistFolder3_GetCurFolder(pPersistFolder3, &pidlCurrentFolder); - ok(SUCCEEDED(hr), "IPersistFolder3_GetCurFolder failed! hr=0x%08x\n", hr); - ok(!pidlCurrentFolder, "IPersistFolder3_GetCurFolder should return a NULL pidl!\n"); - - /* For FolderShortcut objects, the Initialize method initialized the folder's position in the - * shell namespace. The target folder, read from the property bag above, remains untouched. - * The following tests show this: The itemidlist for some imaginary shellfolder object - * is created and the FolderShortcut is initialized with it. GetCurFolder now returns this - * itemidlist, but GetDisplayNameOf still returns the path from above. - */ - hr = SHGetDesktopFolder(&pDesktopFolder); - ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - /* Temporarily register WineTestFolder as a shell namespace extension at the Desktop. - * Otherwise ParseDisplayName fails on WinXP with E_INVALIDARG */ - RegCreateKeyW(HKEY_CURRENT_USER, wszShellExtKey, &hShellExtKey); - RegCloseKey(hShellExtKey); - hr = IShellFolder_ParseDisplayName(pDesktopFolder, NULL, NULL, wszWineTestFolder, NULL, - &pidlWineTestFolder, NULL); - RegDeleteKeyW(HKEY_CURRENT_USER, wszShellExtKey); - IShellFolder_Release(pDesktopFolder); - ok (SUCCEEDED(hr), "IShellFolder::ParseDisplayName failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - hr = IPersistFolder3_Initialize(pPersistFolder3, pidlWineTestFolder); - ok (SUCCEEDED(hr), "IPersistFolder3::Initialize failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IPersistFolder3_Release(pPersistFolder3); - pILFree(pidlWineTestFolder); - return; - } - - hr = IPersistFolder3_GetCurFolder(pPersistFolder3, &pidlCurrentFolder); - ok(SUCCEEDED(hr), "IPersistFolder3_GetCurFolder failed! hr=0x%08x\n", hr); - ok(pILIsEqual(pidlCurrentFolder, pidlWineTestFolder), - "IPersistFolder3_GetCurFolder should return pidlWineTestFolder!\n"); - pILFree(pidlCurrentFolder); - pILFree(pidlWineTestFolder); - - hr = IPersistFolder3_QueryInterface(pPersistFolder3, &IID_IShellFolder, (LPVOID*)&pShellFolder); - IPersistFolder3_Release(pPersistFolder3); - ok(SUCCEEDED(hr), "IPersistFolder3_QueryInterface(IShellFolder) failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - hr = IShellFolder_GetDisplayNameOf(pShellFolder, NULL, SHGDN_FORPARSING, &strret); - ok(SUCCEEDED(hr), "IShellFolder_GetDisplayNameOf(NULL) failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(pShellFolder); - return; - } - - pStrRetToBufW(&strret, NULL, wszBuffer, MAX_PATH); - ok(!lstrcmpiW(wszDesktopPath, wszBuffer), "FolderShortcut returned incorrect folder!\n"); - - /* Next few lines are meant to show that children of FolderShortcuts are not FolderShortcuts, - * but ShellFSFolders. */ - myPathAddBackslashW(wszDesktopPath); - lstrcatW(wszDesktopPath, wszSomeSubFolder); - if (!CreateDirectoryW(wszDesktopPath, NULL)) { - IShellFolder_Release(pShellFolder); - return; - } - - hr = IShellFolder_ParseDisplayName(pShellFolder, NULL, NULL, wszSomeSubFolder, NULL, - &pidlSubFolder, NULL); - RemoveDirectoryW(wszDesktopPath); - ok (SUCCEEDED(hr), "IShellFolder::ParseDisplayName failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(pShellFolder); - return; - } - - hr = IShellFolder_BindToObject(pShellFolder, pidlSubFolder, NULL, &IID_IPersistFolder3, - (LPVOID*)&pPersistFolder3); - IShellFolder_Release(pShellFolder); - pILFree(pidlSubFolder); - ok (SUCCEEDED(hr), "IShellFolder::BindToObject failed! hr = %08x\n", hr); - if (FAILED(hr)) - return; - - /* On windows, we expect CLSID_ShellFSFolder. On wine we relax this constraint - * a little bit and also allow CLSID_UnixDosFolder. */ - hr = IPersistFolder3_GetClassID(pPersistFolder3, &clsid); - ok(SUCCEEDED(hr), "IPersistFolder3_GetClassID failed! hr=0x%08x\n", hr); - ok(IsEqualCLSID(&clsid, &CLSID_ShellFSFolder) || IsEqualCLSID(&clsid, &CLSID_UnixDosFolder), - "IPersistFolder3::GetClassID returned unexpected CLSID!\n"); - - IPersistFolder3_Release(pPersistFolder3); -} - -#include "pshpack1.h" -struct FileStructA { - BYTE type; - BYTE dummy; - DWORD dwFileSize; - WORD uFileDate; /* In our current implementation this is */ - WORD uFileTime; /* FileTimeToDosDate(WIN32_FIND_DATA->ftLastWriteTime) */ - WORD uFileAttribs; - CHAR szName[1]; -}; - -struct FileStructW { - WORD cbLen; /* Length of this element. */ - BYTE abFooBar1[6]; /* Beyond any recognition. */ - WORD uDate; /* FileTimeToDosDate(WIN32_FIND_DATA->ftCreationTime)? */ - WORD uTime; /* (this is currently speculation) */ - WORD uDate2; /* FileTimeToDosDate(WIN32_FIND_DATA->ftLastAccessTime)? */ - WORD uTime2; /* (this is currently speculation) */ - BYTE abFooBar2[4]; /* Beyond any recognition. */ - WCHAR wszName[1]; /* The long filename in unicode. */ - /* Just for documentation: Right after the unicode string: */ - WORD cbOffset; /* FileStructW's offset from the beginning of the SHITMEID. - * SHITEMID->cb == uOffset + cbLen */ -}; -#include "poppack.h" - -static void test_ITEMIDLIST_format(void) { - WCHAR wszPersonal[MAX_PATH]; - LPSHELLFOLDER psfDesktop, psfPersonal; - LPITEMIDLIST pidlPersonal, pidlFile; - HANDLE hFile; - HRESULT hr; - BOOL bResult; - WCHAR wszFile[3][17] = { { 'e','v','e','n','_',0 }, { 'o','d','d','_',0 }, - { 'l','o','n','g','e','r','_','t','h','a','n','.','8','_','3',0 } }; - int i; - - if(!pSHGetSpecialFolderPathW) return; - - bResult = pSHGetSpecialFolderPathW(NULL, wszPersonal, CSIDL_PERSONAL, FALSE); - ok(bResult, "SHGetSpecialFolderPathW failed! Last error: %u\n", GetLastError()); - if (!bResult) return; - - bResult = SetCurrentDirectoryW(wszPersonal); - ok(bResult, "SetCurrentDirectory failed! Last error: %u\n", GetLastError()); - if (!bResult) return; - - hr = SHGetDesktopFolder(&psfDesktop); - ok(SUCCEEDED(hr), "SHGetDesktopFolder failed! hr: %08x\n", hr); - if (FAILED(hr)) return; - - hr = IShellFolder_ParseDisplayName(psfDesktop, NULL, NULL, wszPersonal, NULL, &pidlPersonal, NULL); - ok(SUCCEEDED(hr), "psfDesktop->ParseDisplayName failed! hr = %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfDesktop); - return; - } - - hr = IShellFolder_BindToObject(psfDesktop, pidlPersonal, NULL, &IID_IShellFolder, - (LPVOID*)&psfPersonal); - IShellFolder_Release(psfDesktop); - pILFree(pidlPersonal); - ok(SUCCEEDED(hr), "psfDesktop->BindToObject failed! hr = %08x\n", hr); - if (FAILED(hr)) return; - - for (i=0; i<3; i++) { - CHAR szFile[MAX_PATH]; - struct FileStructA *pFileStructA; - WORD cbOffset; - - WideCharToMultiByte(CP_ACP, 0, wszFile[i], -1, szFile, MAX_PATH, NULL, NULL); - - hFile = CreateFileW(wszFile[i], GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_FLAG_WRITE_THROUGH, NULL); - ok(hFile != INVALID_HANDLE_VALUE, "CreateFile failed! (%u)\n", GetLastError()); - if (hFile == INVALID_HANDLE_VALUE) { - IShellFolder_Release(psfPersonal); - return; - } - CloseHandle(hFile); - - hr = IShellFolder_ParseDisplayName(psfPersonal, NULL, NULL, wszFile[i], NULL, &pidlFile, NULL); - DeleteFileW(wszFile[i]); - ok(SUCCEEDED(hr), "psfPersonal->ParseDisplayName failed! hr: %08x\n", hr); - if (FAILED(hr)) { - IShellFolder_Release(psfPersonal); - return; - } - - pFileStructA = (struct FileStructA *)pidlFile->mkid.abID; - ok(pFileStructA->type == 0x32, "PIDLTYPE should be 0x32!\n"); - ok(pFileStructA->dummy == 0x00, "Dummy Byte should be 0x00!\n"); - ok(pFileStructA->dwFileSize == 0, "Filesize should be zero!\n"); - - if (i < 2) /* First two file names are already in valid 8.3 format */ - ok(!strcmp(szFile, (CHAR*)&pidlFile->mkid.abID[12]), "Wrong file name!\n"); - else - /* WinXP stores a derived 8.3 dos name (LONGER~1.8_3) here. We probably - * can't implement this correctly, since unix filesystems don't support - * this nasty short/long filename stuff. So we'll probably stay with our - * current habbit of storing the long filename here, which seems to work - * just fine. */ - todo_wine { ok(pidlFile->mkid.abID[18] == '~', "Should be derived 8.3 name!\n"); } - - if (i == 0) /* First file name has an even number of chars. No need for alignment. */ - ok(pidlFile->mkid.abID[12 + strlen(szFile) + 1] != '\0', - "Alignment byte, where there shouldn't be!\n"); - - if (i == 1) /* Second file name has an uneven number of chars => alignment byte */ - ok(pidlFile->mkid.abID[12 + strlen(szFile) + 1] == '\0', - "There should be an alignment byte, but isn't!\n"); - - /* The offset of the FileStructW member is stored as a WORD at the end of the pidl. */ - cbOffset = *(WORD*)(((LPBYTE)pidlFile)+pidlFile->mkid.cb-sizeof(WORD)); - ok (cbOffset >= sizeof(struct FileStructA) && - cbOffset <= pidlFile->mkid.cb - sizeof(struct FileStructW), - "Wrong offset value (%d) stored at the end of the PIDL\n", cbOffset); - - if (cbOffset >= sizeof(struct FileStructA) && - cbOffset <= pidlFile->mkid.cb - sizeof(struct FileStructW)) - { - struct FileStructW *pFileStructW = (struct FileStructW *)(((LPBYTE)pidlFile)+cbOffset); - - ok(pidlFile->mkid.cb == cbOffset + pFileStructW->cbLen, - "FileStructW's offset and length should add up to the PIDL's length!\n"); - - if (pidlFile->mkid.cb == cbOffset + pFileStructW->cbLen) { - /* Since we just created the file, time of creation, - * time of last access and time of last write access just be the same. - * These tests seem to fail sometimes (on WinXP), if the test is run again shortly - * after the first run. I do remember something with NTFS keeping the creation time - * if a file is deleted and then created again within a couple of seconds or so. - * Might be the reason. */ - ok (pFileStructA->uFileDate == pFileStructW->uDate && - pFileStructA->uFileTime == pFileStructW->uTime, - "Last write time should match creation time!\n"); - - ok (pFileStructA->uFileDate == pFileStructW->uDate2 && - pFileStructA->uFileTime == pFileStructW->uTime2, - "Last write time should match last access time!\n"); - - ok (!lstrcmpW(wszFile[i], pFileStructW->wszName), - "The filename should be stored in unicode at this position!\n"); - } - } - - pILFree(pidlFile); - } -} - -static void testSHGetFolderPathAndSubDirA(void) -{ - HRESULT ret; - BOOL delret; - DWORD dwret; - int i; - static char wine[] = "wine"; - static char winetemp[] = "wine\\temp"; - static char appdata[MAX_PATH]; - static char testpath[MAX_PATH]; - static char toolongpath[MAX_PATH+1]; - - if(!pSHGetFolderPathA) { - skip("SHGetFolderPathA not present!\n"); - return; - } - if(!SUCCEEDED(pSHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appdata))) - { - skip("SHGetFolderPathA failed for CSIDL_LOCAL_APPDATA!\n"); - return; - } - - sprintf(testpath, "%s\\%s", appdata, winetemp); - delret = RemoveDirectoryA(testpath); - if(!delret && (ERROR_PATH_NOT_FOUND != GetLastError()) ) { - skip("RemoveDirectoryA(%s) failed with error %u\n", testpath, GetLastError()); - return; - } - - sprintf(testpath, "%s\\%s", appdata, wine); - delret = RemoveDirectoryA(testpath); - if(!delret && (ERROR_PATH_NOT_FOUND != GetLastError()) && (ERROR_FILE_NOT_FOUND != GetLastError())) { - skip("RemoveDirectoryA(%s) failed with error %u\n", testpath, GetLastError()); - return; - } - for(i=0; i< MAX_PATH; i++) - toolongpath[i] = '0' + i % 10; - toolongpath[MAX_PATH] = '\0'; - - /* test invalid second parameter */ - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | 0xff, NULL, SHGFP_TYPE_CURRENT, wine, testpath); - ok(E_INVALIDARG == ret, "expected E_INVALIDARG, got %x\n", ret); - - /* test invalid forth parameter */ - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, 2, wine, testpath); - switch(ret) { - case S_OK: /* winvista */ - ok(!strncmp(appdata, testpath, strlen(appdata)), - "expected %s to start with %s\n", testpath, appdata); - ok(!lstrcmpA(&testpath[1 + strlen(appdata)], winetemp), - "expected %s to end with %s\n", testpath, winetemp); - break; - case E_INVALIDARG: /* winxp, win2k3 */ - break; - default: - ok(0, "expected S_OK or E_INVALIDARG, got %x\n", ret); - } - - /* test fifth parameter */ - testpath[0] = '\0'; - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, NULL, testpath); - ok(S_OK == ret, "expected S_OK, got %x\n", ret); - ok(!lstrcmpA(appdata, testpath), "expected %s, got %s\n", appdata, testpath); - - testpath[0] = '\0'; - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, "", testpath); - ok(S_OK == ret, "expected S_OK, got %x\n", ret); - ok(!lstrcmpA(appdata, testpath), "expected %s, got %s\n", appdata, testpath); - - testpath[0] = '\0'; - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, "\\", testpath); - ok(S_OK == ret, "expected S_OK, got %x\n", ret); - ok(!lstrcmpA(appdata, testpath), "expected %s, got %s\n", appdata, testpath); - - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, toolongpath, testpath); - ok(HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE) == ret, - "expected %x, got %x\n", HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE), ret); - - testpath[0] = '\0'; - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, wine, NULL); - ok((S_OK == ret) || (E_INVALIDARG == ret), "expected S_OK or E_INVALIDARG, got %x\n", ret); - - /* test a not existing path */ - testpath[0] = '\0'; - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, winetemp, testpath); - ok(HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == ret, - "expected %x, got %x\n", HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), ret); - - /* create a directory inside a not existing directory */ - testpath[0] = '\0'; - ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_CREATE | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, winetemp, testpath); - ok(S_OK == ret, "expected S_OK, got %x\n", ret); - ok(!strncmp(appdata, testpath, strlen(appdata)), - "expected %s to start with %s\n", testpath, appdata); - ok(!lstrcmpA(&testpath[1 + strlen(appdata)], winetemp), - "expected %s to end with %s\n", testpath, winetemp); - dwret = GetFileAttributes(testpath); - ok(FILE_ATTRIBUTE_DIRECTORY | dwret, "expected %x to contain FILE_ATTRIBUTE_DIRECTORY\n", dwret); - - /* cleanup */ - sprintf(testpath, "%s\\%s", appdata, winetemp); - RemoveDirectoryA(testpath); - sprintf(testpath, "%s\\%s", appdata, wine); - RemoveDirectoryA(testpath); -} - - -START_TEST(shlfolder) -{ - init_function_pointers(); - /* if OleInitialize doesn't get called, ParseDisplayName returns - CO_E_NOTINITIALIZED for malformed directory names on win2k. */ - OleInitialize(NULL); - - test_ParseDisplayName(); - test_BindToObject(); - test_EnumObjects_and_CompareIDs(); - test_GetDisplayName(); - test_GetAttributesOf(); - test_SHGetPathFromIDList(); - test_CallForAttributes(); - test_FolderShortcut(); - test_ITEMIDLIST_format(); - if(pSHGetFolderPathAndSubDirA) - testSHGetFolderPathAndSubDirA(); - else - skip("SHGetFolderPathAndSubDirA not present\n"); - - OleUninitialize(); -} diff --git a/rostests/winetests/shell32/string.c b/rostests/winetests/shell32/string.c deleted file mode 100755 index c748f350e95..00000000000 --- a/rostests/winetests/shell32/string.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Unit tests for shell32 string operations - * - * 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 - */ - -#include -#include - -#define WINE_NOWINSOCK -#include "windef.h" -#include "winbase.h" -#include "wtypes.h" -#include "shellapi.h" -#include "shtypes.h" -#include "objbase.h" - -#include "wine/test.h" - -static HMODULE hShell32; -static HRESULT (WINAPI *pStrRetToStrNAW)(LPVOID,DWORD,LPSTRRET,const ITEMIDLIST *); - -static WCHAR *CoDupStrW(const char* src) -{ - INT len = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0); - WCHAR* szTemp = (WCHAR*)CoTaskMemAlloc(len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, src, -1, szTemp, len); - return szTemp; -} - -static inline int strcmpW(const WCHAR *str1, const WCHAR *str2) -{ - while (*str1 && (*str1 == *str2)) { str1++; str2++; } - return *str1 - *str2; -} - -static void test_StrRetToStringNA(void) -{ - trace("StrRetToStringNAW is Ascii\n"); - /* FIXME */ -} - -static void test_StrRetToStringNW(void) -{ - static const WCHAR szTestW[] = { 'T','e','s','t','\0' }; - ITEMIDLIST iidl[10]; - WCHAR buff[128]; - STRRET strret; - BOOL ret; - - trace("StrRetToStringNAW is Unicode\n"); - - strret.uType = STRRET_WSTR; - U(strret).pOleStr = CoDupStrW("Test"); - memset(buff, 0xff, sizeof(buff)); - ret = pStrRetToStrNAW(buff, sizeof(buff)/sizeof(WCHAR), &strret, NULL); - ok(ret == TRUE && !strcmpW(buff, szTestW), - "STRRET_WSTR: dup failed, ret=%d\n", ret); - - strret.uType = STRRET_CSTR; - lstrcpyA(U(strret).cStr, "Test"); - memset(buff, 0xff, sizeof(buff)); - ret = pStrRetToStrNAW(buff, sizeof(buff)/sizeof(WCHAR), &strret, NULL); - ok(ret == TRUE && !strcmpW(buff, szTestW), - "STRRET_CSTR: dup failed, ret=%d\n", ret); - - strret.uType = STRRET_OFFSET; - U(strret).uOffset = 1; - strcpy((char*)&iidl, " Test"); - memset(buff, 0xff, sizeof(buff)); - ret = pStrRetToStrNAW(buff, sizeof(buff)/sizeof(WCHAR), &strret, iidl); - ok(ret == TRUE && !strcmpW(buff, szTestW), - "STRRET_OFFSET: dup failed, ret=%d\n", ret); - - /* The next test crashes on W2K, WinXP and W2K3, so we don't test. */ -#if 0 - /* Invalid dest - should return FALSE, except NT4 does not, so we don't check. */ - strret.uType = STRRET_WSTR; - U(strret).pOleStr = CoDupStrW("Test"); - pStrRetToStrNAW(NULL, sizeof(buff)/sizeof(WCHAR), &strret, NULL); - trace("NULL dest: ret=%d\n", ret); -#endif -} - -START_TEST(string) -{ - CoInitialize(0); - - hShell32 = GetModuleHandleA("shell32.dll"); - - pStrRetToStrNAW = (void*)GetProcAddress(hShell32, (LPSTR)96); - if (pStrRetToStrNAW) - { - if (!(GetVersion() & 0x80000000)) - test_StrRetToStringNW(); - else - test_StrRetToStringNA(); - } -} diff --git a/rostests/winetests/shell32/systray.c b/rostests/winetests/shell32/systray.c deleted file mode 100644 index c672d671b59..00000000000 --- a/rostests/winetests/shell32/systray.c +++ /dev/null @@ -1,174 +0,0 @@ -/* Unit tests for systray - * - * Copyright 2007 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 - */ -#define _WIN32_IE 0x600 -#include -#include - -#include - -#include "wine/test.h" - - -static HWND hMainWnd; -static BOOL (WINAPI *pShell_NotifyIconW)(DWORD,PNOTIFYICONDATAW); -static HMONITOR (WINAPI *pMonitorFromWindow)(HWND, DWORD); - -void test_cbsize(void) -{ - NOTIFYICONDATAA nidA; - - if (pShell_NotifyIconW) - { - NOTIFYICONDATAW nidW; - - ZeroMemory(&nidW, sizeof(nidW)); - nidW.cbSize = NOTIFYICONDATAW_V1_SIZE; - nidW.hWnd = hMainWnd; - nidW.uID = 1; - nidW.uFlags = NIF_ICON|NIF_MESSAGE; - nidW.hIcon = LoadIcon(NULL, IDI_APPLICATION); - nidW.uCallbackMessage = WM_USER+17; - ok(pShell_NotifyIconW(NIM_ADD, &nidW), "NIM_ADD failed!\n"); - - /* using an invalid cbSize does work */ - nidW.cbSize = 3; - nidW.hWnd = hMainWnd; - nidW.uID = 1; - ok(pShell_NotifyIconW(NIM_DELETE, &nidW), "NIM_DELETE failed!\n"); - /* as icon doesn't exist anymore - now there will be an error */ - nidW.cbSize = sizeof(nidW); - ok(!pShell_NotifyIconW(NIM_DELETE, &nidW), "The icon was not deleted\n"); - } - - /* same for Shell_NotifyIconA */ - ZeroMemory(&nidA, sizeof(nidA)); - nidA.cbSize = NOTIFYICONDATAA_V1_SIZE; - nidA.hWnd = hMainWnd; - nidA.uID = 1; - nidA.uFlags = NIF_ICON|NIF_MESSAGE; - nidA.hIcon = LoadIcon(NULL, IDI_APPLICATION); - nidA.uCallbackMessage = WM_USER+17; - ok(Shell_NotifyIconA(NIM_ADD, &nidA), "NIM_ADD failed!\n"); - - /* using an invalid cbSize does work */ - nidA.cbSize = 3; - nidA.hWnd = hMainWnd; - nidA.uID = 1; - ok(Shell_NotifyIconA(NIM_DELETE, &nidA), "NIM_DELETE failed!\n"); - /* as icon doesn't exist anymore - now there will be an error */ - nidA.cbSize = sizeof(nidA); - ok(!Shell_NotifyIconA(NIM_DELETE, &nidA), "The icon was not deleted\n"); -} - -static void test_SHAppBarMessage(void) -{ - APPBARDATA abd; - HWND hwnd, foregnd; - UINT_PTR ret; - - memset(&abd, 0xcc, sizeof(abd)); - abd.cbSize = sizeof(abd); - abd.uEdge = ABE_BOTTOM; - - hwnd = (HWND)SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd); - ok(hwnd == NULL || IsWindow(hwnd), "ret %p which is not a window\n", hwnd); - ok(abd.hWnd == (HWND)0xcccccccc, "hWnd overwritten\n"); - - if (!pMonitorFromWindow) - { - skip("MonitorFromWindow is not available\n"); - } - else - { - /* Presumably one can pass a hwnd with ABM_GETAUTOHIDEBAR to specify a monitor. - Pass the foreground window and check */ - foregnd = GetForegroundWindow(); - if(foregnd) - { - abd.hWnd = foregnd; - hwnd = (HWND)SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd); - ok(hwnd == NULL || IsWindow(hwnd), "ret %p which is not a window\n", hwnd); - ok(abd.hWnd == foregnd, "hWnd overwritten\n"); - if(hwnd) - { - HMONITOR appbar_mon, foregnd_mon; - appbar_mon = pMonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); - foregnd_mon = pMonitorFromWindow(foregnd, MONITOR_DEFAULTTONEAREST); - ok(appbar_mon == foregnd_mon, "Windows on different monitors\n"); - } - } - } - - memset(&abd, 0xcc, sizeof(abd)); - abd.cbSize = sizeof(abd); - ret = SHAppBarMessage(ABM_GETTASKBARPOS, &abd); - if(ret) - { - ok(abd.hWnd == (HWND)0xcccccccc, "hWnd overwritten\n"); -todo_wine -{ - ok(abd.uEdge >= ABE_LEFT && abd.uEdge <= ABE_BOTTOM, "uEdge not returned\n"); - ok(abd.rc.left != 0xcccccccc, "rc not updated\n"); -} - } - - return; -} - -START_TEST(systray) -{ - WNDCLASSA wc; - MSG msg; - RECT rc; - HMODULE huser32, hshell32; - - hshell32 = GetModuleHandleA("shell32.dll"); - pShell_NotifyIconW = (void*)GetProcAddress(hshell32, "Shell_NotifyIconW"); - - huser32 = GetModuleHandleA("user32.dll"); - pMonitorFromWindow = (void*)GetProcAddress(huser32, "MonitorFromWindow"); - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_IBEAM); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = "MyTestWnd"; - wc.lpfnWndProc = DefWindowProc; - RegisterClassA(&wc); - - hMainWnd = CreateWindowExA(0, "MyTestWnd", "Blah", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, GetModuleHandleA(NULL), 0); - GetClientRect(hMainWnd, &rc); - ShowWindow(hMainWnd, SW_SHOW); - - test_cbsize(); - - PostQuitMessage(0); - while(GetMessageA(&msg,0,0,0)) { - TranslateMessage(&msg); - DispatchMessageA(&msg); - } - DestroyWindow(hMainWnd); - - test_SHAppBarMessage(); -} diff --git a/rostests/winetests/shell32/testlist.c b/rostests/winetests/shell32/testlist.c deleted file mode 100644 index 7de794d42cf..00000000000 --- a/rostests/winetests/shell32/testlist.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_generated(void); -extern void func_shelllink(void); -extern void func_shellpath(void); -extern void func_shfldr_netplaces(void); -extern void func_shlexec(void); -extern void func_shlfileop(void); -extern void func_shlfolder(void); -extern void func_string(void); -extern void func_systray(void); - -const struct test winetest_testlist[] = -{ - { "generated", func_generated }, - { "shelllink", func_shelllink }, - { "shellpath", func_shellpath }, - { "shfldr_netplaces", func_shfldr_netplaces }, - { "shlexec", func_shlexec }, - { "shlfileop", func_shlfileop }, - { "shlfolder", func_shlfolder }, - { "string", func_string }, - { "systray", func_systray }, - { 0, 0 } -}; diff --git a/rostests/winetests/shlwapi/clist.c b/rostests/winetests/shlwapi/clist.c deleted file mode 100755 index 5f94b4ff6cc..00000000000 --- a/rostests/winetests/shlwapi/clist.c +++ /dev/null @@ -1,637 +0,0 @@ -/* Unit test suite for SHLWAPI Compact List and IStream ordinal functions - * - * Copyright 2002 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 "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "objbase.h" - -typedef struct tagSHLWAPI_CLIST -{ - ULONG ulSize; - ULONG ulId; -} SHLWAPI_CLIST, *LPSHLWAPI_CLIST; - -typedef const SHLWAPI_CLIST* LPCSHLWAPI_CLIST; - -/* Items to add */ -static const SHLWAPI_CLIST SHLWAPI_CLIST_items[] = -{ - {4, 1}, - {8, 3}, - {12, 2}, - {16, 8}, - {20, 9}, - {3, 11}, - {9, 82}, - {33, 16}, - {32, 55}, - {24, 100}, - {39, 116}, - { 0, 0} -}; - -/* Dummy IStream object for testing calls */ -typedef struct -{ - void* lpVtbl; - LONG ref; - int readcalls; - BOOL failreadcall; - BOOL failreadsize; - BOOL readbeyondend; - BOOL readreturnlarge; - int writecalls; - BOOL failwritecall; - BOOL failwritesize; - int seekcalls; - int statcalls; - BOOL failstatcall; - LPCSHLWAPI_CLIST item; - ULARGE_INTEGER pos; -} _IDummyStream; - -static -HRESULT WINAPI QueryInterface(_IDummyStream *This,REFIID riid, LPVOID *ppvObj) -{ - return S_OK; -} - -static ULONG WINAPI AddRef(_IDummyStream *This) -{ - return InterlockedIncrement(&This->ref); -} - -static ULONG WINAPI Release(_IDummyStream *This) -{ - return InterlockedDecrement(&This->ref); -} - -static HRESULT WINAPI Read(_IDummyStream* This, LPVOID lpMem, ULONG ulSize, - PULONG lpRead) -{ - HRESULT hRet = S_OK; - ++This->readcalls; - - if (This->failreadcall) - { - return STG_E_ACCESSDENIED; - } - else if (This->failreadsize) - { - *lpRead = ulSize + 8; - return S_OK; - } - else if (This->readreturnlarge) - { - *((ULONG*)lpMem) = 0xffff01; - *lpRead = ulSize; - This->readreturnlarge = FALSE; - return S_OK; - } - if (ulSize == sizeof(ULONG)) - { - /* Read size of item */ - *((ULONG*)lpMem) = This->item->ulSize ? This->item->ulSize + sizeof(SHLWAPI_CLIST) : 0; - *lpRead = ulSize; - } - else - { - unsigned int i; - char* buff = (char*)lpMem; - - /* Read item data */ - if (!This->item->ulSize) - { - This->readbeyondend = TRUE; - *lpRead = 0; - return E_FAIL; /* Should never happen */ - } - *((ULONG*)lpMem) = This->item->ulId; - *lpRead = ulSize; - - for (i = 0; i < This->item->ulSize; i++) - buff[4+i] = i*2; - - This->item++; - } - return hRet; -} - -static HRESULT WINAPI Write(_IDummyStream* This, LPVOID lpMem, ULONG ulSize, - PULONG lpWritten) -{ - HRESULT hRet = S_OK; - - ++This->writecalls; - if (This->failwritecall) - { - return STG_E_ACCESSDENIED; - } - else if (This->failwritesize) - { - *lpWritten = 0; - } - else - *lpWritten = ulSize; - return hRet; -} - -static HRESULT WINAPI Seek(_IDummyStream* This, LARGE_INTEGER dlibMove, - DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition) -{ - ++This->seekcalls; - This->pos.QuadPart = dlibMove.QuadPart; - if (plibNewPosition) - plibNewPosition->QuadPart = dlibMove.QuadPart; - return S_OK; -} - -static HRESULT WINAPI Stat(_IDummyStream* This, STATSTG* pstatstg, - DWORD grfStatFlag) -{ - ++This->statcalls; - if (This->failstatcall) - return E_FAIL; - if (pstatstg) - pstatstg->cbSize.QuadPart = This->pos.QuadPart; - return S_OK; -} - -/* VTable */ -static void* iclvt[] = -{ - QueryInterface, - AddRef, - Release, - Read, - Write, - Seek, - NULL, /* SetSize */ - NULL, /* CopyTo */ - NULL, /* Commit */ - NULL, /* Revert */ - NULL, /* LockRegion */ - NULL, /* UnlockRegion */ - Stat, - NULL /* Clone */ -}; - -/* Function ptrs for ordinal calls */ -static HMODULE SHLWAPI_hshlwapi = 0; - -static VOID (WINAPI *pSHLWAPI_19)(LPSHLWAPI_CLIST); -static HRESULT (WINAPI *pSHLWAPI_20)(LPSHLWAPI_CLIST*,LPCSHLWAPI_CLIST); -static BOOL (WINAPI *pSHLWAPI_21)(LPSHLWAPI_CLIST*,ULONG); -static LPSHLWAPI_CLIST (WINAPI *pSHLWAPI_22)(LPSHLWAPI_CLIST,ULONG); -static HRESULT (WINAPI *pSHLWAPI_17)(_IDummyStream*,LPSHLWAPI_CLIST); -static HRESULT (WINAPI *pSHLWAPI_18)(_IDummyStream*,LPSHLWAPI_CLIST*); - -static BOOL (WINAPI *pSHLWAPI_166)(_IDummyStream*); -static HRESULT (WINAPI *pSHLWAPI_184)(_IDummyStream*,LPVOID,ULONG); -static HRESULT (WINAPI *pSHLWAPI_212)(_IDummyStream*,LPCVOID,ULONG); -static HRESULT (WINAPI *pSHLWAPI_213)(_IDummyStream*); -static HRESULT (WINAPI *pSHLWAPI_214)(_IDummyStream*,ULARGE_INTEGER*); - - -static void InitFunctionPtrs(void) -{ - SHLWAPI_hshlwapi = GetModuleHandleA("shlwapi.dll"); - - pSHLWAPI_17 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)17); - ok(pSHLWAPI_17 != 0, "No Ordinal 17\n"); - pSHLWAPI_18 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)18); - ok(pSHLWAPI_18 != 0, "No Ordinal 18\n"); - pSHLWAPI_19 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)19); - ok(pSHLWAPI_19 != 0, "No Ordinal 19\n"); - pSHLWAPI_20 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)20); - ok(pSHLWAPI_20 != 0, "No Ordinal 20\n"); - pSHLWAPI_21 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)21); - ok(pSHLWAPI_21 != 0, "No Ordinal 21\n"); - pSHLWAPI_22 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)22); - ok(pSHLWAPI_22 != 0, "No Ordinal 22\n"); - pSHLWAPI_166 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)166); - ok(pSHLWAPI_166 != 0, "No Ordinal 166\n"); - pSHLWAPI_184 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)184); - ok(pSHLWAPI_184 != 0, "No Ordinal 184\n"); - pSHLWAPI_212 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)212); - ok(pSHLWAPI_212 != 0, "No Ordinal 212\n"); - pSHLWAPI_213 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)213); - ok(pSHLWAPI_213 != 0, "No Ordinal 213\n"); - pSHLWAPI_214 = (void *)GetProcAddress( SHLWAPI_hshlwapi, (LPSTR)214); - ok(pSHLWAPI_214 != 0, "No Ordinal 214\n"); -} - -static void InitDummyStream(_IDummyStream* iface) -{ - iface->lpVtbl = (void*)iclvt; - iface->ref = 1; - iface->readcalls = 0; - iface->failreadcall = FALSE; - iface->failreadsize = FALSE; - iface->readbeyondend = FALSE; - iface->readreturnlarge = FALSE; - iface->writecalls = 0; - iface->failwritecall = FALSE; - iface->failwritesize = FALSE; - iface->seekcalls = 0; - iface->statcalls = 0; - iface->failstatcall = FALSE; - iface->item = SHLWAPI_CLIST_items; - iface->pos.QuadPart = 0; -} - - -static void test_CList(void) -{ - _IDummyStream streamobj; - LPSHLWAPI_CLIST list = NULL; - LPCSHLWAPI_CLIST item = SHLWAPI_CLIST_items; - HRESULT hRet; - LPSHLWAPI_CLIST inserted; - BYTE buff[64]; - unsigned int i; - - if (!pSHLWAPI_17 || !pSHLWAPI_18 || !pSHLWAPI_19 || !pSHLWAPI_20 || - !pSHLWAPI_21 || !pSHLWAPI_22) - return; - - /* Populate a list and test the items are added correctly */ - while (item->ulSize) - { - /* Create item and fill with data */ - inserted = (LPSHLWAPI_CLIST)buff; - inserted->ulSize = item->ulSize + sizeof(SHLWAPI_CLIST); - inserted->ulId = item->ulId; - for (i = 0; i < item->ulSize; i++) - buff[sizeof(SHLWAPI_CLIST)+i] = i*2; - - /* Add it */ - hRet = pSHLWAPI_20(&list, inserted); - ok(hRet > S_OK, "failed list add\n"); - - if (hRet > S_OK) - { - ok(list && list->ulSize, "item not added\n"); - - /* Find it */ - inserted = pSHLWAPI_22(list, item->ulId); - ok(inserted != NULL, "lost after adding\n"); - - ok(!inserted || inserted->ulId != ~0U, "find returned a container\n"); - - /* Check size */ - if (inserted && inserted->ulSize & 0x3) - { - /* Contained */ - ok(inserted[-1].ulId == ~0U, "invalid size is not countained\n"); - ok(inserted[-1].ulSize > inserted->ulSize+sizeof(SHLWAPI_CLIST), - "container too small\n"); - } - else if (inserted) - { - ok(inserted->ulSize==item->ulSize+sizeof(SHLWAPI_CLIST), - "id %d wrong size %d\n", inserted->ulId, inserted->ulSize); - } - if (inserted) - { - BOOL bDataOK = TRUE; - LPBYTE bufftest = (LPBYTE)inserted; - - for (i = 0; i < inserted->ulSize - sizeof(SHLWAPI_CLIST); i++) - if (bufftest[sizeof(SHLWAPI_CLIST)+i] != i*2) - bDataOK = FALSE; - - ok(bDataOK == TRUE, "data corrupted on insert\n"); - } - ok(!inserted || inserted->ulId==item->ulId, "find got wrong item\n"); - } - item++; - } - - /* Write the list */ - InitDummyStream(&streamobj); - - hRet = pSHLWAPI_17(&streamobj, list); - ok(hRet == S_OK, "write failed\n"); - if (hRet == S_OK) - { - /* 1 call for each element, + 1 for OK (use our null element for this) */ - ok(streamobj.writecalls == sizeof(SHLWAPI_CLIST_items)/sizeof(SHLWAPI_CLIST), - "wrong call count\n"); - ok(streamobj.readcalls == 0,"called Read() in write\n"); - ok(streamobj.seekcalls == 0,"called Seek() in write\n"); - } - - /* Failure cases for writing */ - InitDummyStream(&streamobj); - streamobj.failwritecall = TRUE; - hRet = pSHLWAPI_17(&streamobj, list); - ok(hRet == STG_E_ACCESSDENIED, "changed object failure return\n"); - ok(streamobj.writecalls == 1, "called object after failure\n"); - ok(streamobj.readcalls == 0,"called Read() after failure\n"); - ok(streamobj.seekcalls == 0,"called Seek() after failure\n"); - - InitDummyStream(&streamobj); - streamobj.failwritesize = TRUE; - hRet = pSHLWAPI_17(&streamobj, list); - ok(hRet == STG_E_MEDIUMFULL, "changed size failure return\n"); - ok(streamobj.writecalls == 1, "called object after size failure\n"); - ok(streamobj.readcalls == 0,"called Read() after failure\n"); - ok(streamobj.seekcalls == 0,"called Seek() after failure\n"); - - /* Invalid inputs for adding */ - inserted = (LPSHLWAPI_CLIST)buff; - inserted->ulSize = sizeof(SHLWAPI_CLIST) -1; - inserted->ulId = 33; - hRet = pSHLWAPI_20(&list, inserted); - /* The call succeeds but the item is not inserted, except on some early - * versions which return failure. Wine behaves like later versions. - */ - if (0) - { - ok(hRet == S_OK, "failed bad element size\n"); - } - inserted = pSHLWAPI_22(list, 33); - ok(inserted == NULL, "inserted bad element size\n"); - - inserted = (LPSHLWAPI_CLIST)buff; - inserted->ulSize = 44; - inserted->ulId = ~0U; - hRet = pSHLWAPI_20(&list, inserted); - /* See comment above, some early versions fail this call */ - if (0) - { - ok(hRet == S_OK, "failed adding a container\n"); - } - item = SHLWAPI_CLIST_items; - - /* Look for nonexistent item in populated list */ - inserted = pSHLWAPI_22(list, 99999999); - ok(inserted == NULL, "found a nonexistent item\n"); - - while (item->ulSize) - { - /* Delete items */ - BOOL bRet = pSHLWAPI_21(&list, item->ulId); - ok(bRet == TRUE, "couldn't find item to delete\n"); - item++; - } - - /* Look for nonexistent item in empty list */ - inserted = pSHLWAPI_22(list, 99999999); - ok(inserted == NULL, "found an item in empty list\n"); - - /* Create a list by reading in data */ - InitDummyStream(&streamobj); - - hRet = pSHLWAPI_18(&streamobj, &list); - ok(hRet == S_OK, "failed create from Read()\n"); - if (hRet == S_OK) - { - ok(streamobj.readbeyondend == FALSE, "read beyond end\n"); - /* 2 calls per item, but only 1 for the terminator */ - ok(streamobj.readcalls == sizeof(SHLWAPI_CLIST_items)/sizeof(SHLWAPI_CLIST)*2-1, - "wrong call count\n"); - ok(streamobj.writecalls == 0, "called Write() from create\n"); - ok(streamobj.seekcalls == 0,"called Seek() from create\n"); - - item = SHLWAPI_CLIST_items; - - /* Check the items were added correctly */ - while (item->ulSize) - { - inserted = pSHLWAPI_22(list, item->ulId); - ok(inserted != NULL, "lost after adding\n"); - - ok(!inserted || inserted->ulId != ~0U, "find returned a container\n"); - - /* Check size */ - if (inserted && inserted->ulSize & 0x3) - { - /* Contained */ - ok(inserted[-1].ulId == ~0U, "invalid size is not countained\n"); - ok(inserted[-1].ulSize > inserted->ulSize+sizeof(SHLWAPI_CLIST), - "container too small\n"); - } - else if (inserted) - { - ok(inserted->ulSize==item->ulSize+sizeof(SHLWAPI_CLIST), - "id %d wrong size %d\n", inserted->ulId, inserted->ulSize); - } - ok(!inserted || inserted->ulId==item->ulId, "find got wrong item\n"); - if (inserted) - { - BOOL bDataOK = TRUE; - LPBYTE bufftest = (LPBYTE)inserted; - - for (i = 0; i < inserted->ulSize - sizeof(SHLWAPI_CLIST); i++) - if (bufftest[sizeof(SHLWAPI_CLIST)+i] != i*2) - bDataOK = FALSE; - - ok(bDataOK == TRUE, "data corrupted on insert\n"); - } - item++; - } - } - - /* Failure cases for reading */ - InitDummyStream(&streamobj); - streamobj.failreadcall = TRUE; - hRet = pSHLWAPI_18(&streamobj, &list); - ok(hRet == STG_E_ACCESSDENIED, "changed object failure return\n"); - ok(streamobj.readbeyondend == FALSE, "read beyond end\n"); - ok(streamobj.readcalls == 1, "called object after read failure\n"); - ok(streamobj.writecalls == 0,"called Write() after read failure\n"); - ok(streamobj.seekcalls == 0,"called Seek() after read failure\n"); - - /* Read returns large object */ - InitDummyStream(&streamobj); - streamobj.readreturnlarge = TRUE; - hRet = pSHLWAPI_18(&streamobj, &list); - ok(hRet == S_OK, "failed create from Read() with large item\n"); - ok(streamobj.readbeyondend == FALSE, "read beyond end\n"); - ok(streamobj.readcalls == 1,"wrong call count\n"); - ok(streamobj.writecalls == 0,"called Write() after read failure\n"); - ok(streamobj.seekcalls == 2,"wrong Seek() call count (%d)\n", streamobj.seekcalls); - - pSHLWAPI_19(list); -} - -static BOOL test_SHLWAPI_166(void) -{ - _IDummyStream streamobj; - BOOL bRet; - - if (!pSHLWAPI_166) - return FALSE; - - InitDummyStream(&streamobj); - bRet = pSHLWAPI_166(&streamobj); - - if (bRet != TRUE) - return FALSE; /* This version doesn't support stream ops on clists */ - - ok(streamobj.readcalls == 0, "called Read()\n"); - ok(streamobj.writecalls == 0, "called Write()\n"); - ok(streamobj.seekcalls == 0, "called Seek()\n"); - ok(streamobj.statcalls == 1, "wrong call count\n"); - - streamobj.statcalls = 0; - streamobj.pos.QuadPart = 50001; - - bRet = pSHLWAPI_166(&streamobj); - - ok(bRet == FALSE, "failed after seek adjusted\n"); - ok(streamobj.readcalls == 0, "called Read()\n"); - ok(streamobj.writecalls == 0, "called Write()\n"); - ok(streamobj.seekcalls == 0, "called Seek()\n"); - ok(streamobj.statcalls == 1, "wrong call count\n"); - - /* Failure cases */ - InitDummyStream(&streamobj); - streamobj.pos.QuadPart = 50001; - streamobj.failstatcall = TRUE; /* 1: Stat() Bad, Read() OK */ - bRet = pSHLWAPI_166(&streamobj); - ok(bRet == FALSE, "should be FALSE after read is OK\n"); - ok(streamobj.readcalls == 1, "wrong call count\n"); - ok(streamobj.writecalls == 0, "called Write()\n"); - ok(streamobj.seekcalls == 1, "wrong call count\n"); - ok(streamobj.statcalls == 1, "wrong call count\n"); - ok(streamobj.pos.QuadPart == 0, "Didn't seek to start\n"); - - InitDummyStream(&streamobj); - streamobj.pos.QuadPart = 50001; - streamobj.failstatcall = TRUE; - streamobj.failreadcall = TRUE; /* 2: Stat() Bad, Read() Bad Also */ - bRet = pSHLWAPI_166(&streamobj); - ok(bRet == TRUE, "Should be true after read fails\n"); - ok(streamobj.readcalls == 1, "wrong call count\n"); - ok(streamobj.writecalls == 0, "called Write()\n"); - ok(streamobj.seekcalls == 0, "Called Seek()\n"); - ok(streamobj.statcalls == 1, "wrong call count\n"); - ok(streamobj.pos.QuadPart == 50001, "called Seek() after read failed\n"); - return TRUE; -} - -static void test_SHLWAPI_184(void) -{ - _IDummyStream streamobj; - char buff[256]; - HRESULT hRet; - - if (!pSHLWAPI_184) - return; - - InitDummyStream(&streamobj); - hRet = pSHLWAPI_184(&streamobj, buff, sizeof(buff)); - - ok(hRet == S_OK, "failed Read()\n"); - ok(streamobj.readcalls == 1, "wrong call count\n"); - ok(streamobj.writecalls == 0, "called Write()\n"); - ok(streamobj.seekcalls == 0, "called Seek()\n"); -} - -static void test_SHLWAPI_212(void) -{ - _IDummyStream streamobj; - char buff[256]; - HRESULT hRet; - - if (!pSHLWAPI_212) - return; - - InitDummyStream(&streamobj); - hRet = pSHLWAPI_212(&streamobj, buff, sizeof(buff)); - - ok(hRet == S_OK, "failed Write()\n"); - ok(streamobj.readcalls == 0, "called Read()\n"); - ok(streamobj.writecalls == 1, "wrong call count\n"); - ok(streamobj.seekcalls == 0, "called Seek()\n"); -} - -static void test_SHLWAPI_213(void) -{ - _IDummyStream streamobj; - ULARGE_INTEGER ul; - LARGE_INTEGER ll; - HRESULT hRet; - - if (!pSHLWAPI_213 || !pSHLWAPI_214) - return; - - InitDummyStream(&streamobj); - ll.QuadPart = 5000l; - Seek(&streamobj, ll, 0, NULL); /* Seek to 5000l */ - - streamobj.seekcalls = 0; - pSHLWAPI_213(&streamobj); /* Should rewind */ - ok(streamobj.statcalls == 0, "called Stat()\n"); - ok(streamobj.readcalls == 0, "called Read()\n"); - ok(streamobj.writecalls == 0, "called Write()\n"); - ok(streamobj.seekcalls == 1, "wrong call count\n"); - - ul.QuadPart = 50001; - hRet = pSHLWAPI_214(&streamobj, &ul); - ok(hRet == S_OK, "failed Stat()\n"); - ok(ul.QuadPart == 0, "213 didn't rewind stream\n"); -} - -static void test_SHLWAPI_214(void) -{ - _IDummyStream streamobj; - ULARGE_INTEGER ul; - LARGE_INTEGER ll; - HRESULT hRet; - - if (!pSHLWAPI_214) - return; - - InitDummyStream(&streamobj); - ll.QuadPart = 5000l; - Seek(&streamobj, ll, 0, NULL); - ul.QuadPart = 0; - streamobj.seekcalls = 0; - hRet = pSHLWAPI_214(&streamobj, &ul); - - ok(hRet == S_OK, "failed Stat()\n"); - ok(streamobj.statcalls == 1, "wrong call count\n"); - ok(streamobj.readcalls == 0, "called Read()\n"); - ok(streamobj.writecalls == 0, "called Write()\n"); - ok(streamobj.seekcalls == 0, "called Seek()\n"); - ok(ul.QuadPart == 5000l, "Stat gave wrong size\n"); -} - -START_TEST(clist) -{ - InitFunctionPtrs(); - - test_CList(); - - /* Test streaming if this version supports it */ - if (test_SHLWAPI_166()) - { - test_SHLWAPI_184(); - test_SHLWAPI_212(); - test_SHLWAPI_213(); - test_SHLWAPI_214(); - } -} diff --git a/rostests/winetests/shlwapi/clsid.c b/rostests/winetests/shlwapi/clsid.c deleted file mode 100755 index 74ad6e50b87..00000000000 --- a/rostests/winetests/shlwapi/clsid.c +++ /dev/null @@ -1,191 +0,0 @@ -/* Unit test suite for SHLWAPI Class ID 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 - */ - -#include - -#include "wine/test.h" -#include "winbase.h" -#include "winerror.h" -#include "winnls.h" -#include "winuser.h" -#include "shlguid.h" -#include "shobjidl.h" -#include "olectl.h" - -#define INITGUID -#include "initguid.h" - -/* This GUID has been removed from the PSDK */ -DEFINE_OLEGUID(WINE_IID_IDelayedRelease, 0x000214EDL, 0, 0); - -/* Function ptrs for ordinal calls */ -static HMODULE hShlwapi = 0; -static BOOL (WINAPI *pSHLWAPI_269)(LPCSTR, CLSID *) = 0; -static DWORD (WINAPI *pSHLWAPI_23)(REFGUID, LPSTR, INT) = 0; - -/* GUIDs to test */ -const GUID * TEST_guids[] = { - &CLSID_ShellDesktop, - &CLSID_ShellLink, - &CATID_BrowsableShellExt, - &CATID_BrowseInPlace, - &CATID_DeskBand, - &CATID_InfoBand, - &CATID_CommBand, - &FMTID_Intshcut, - &FMTID_InternetSite, - &CGID_Explorer, - &CGID_ShellDocView, - &CGID_ShellServiceObject, - &CGID_ExplorerBarDoc, - &IID_INewShortcutHookA, - &IID_IShellIcon, - &IID_IShellFolder, - &IID_IShellExtInit, - &IID_IShellPropSheetExt, - &IID_IPersistFolder, - &IID_IExtractIconA, - &IID_IShellDetails, - &WINE_IID_IDelayedRelease, - &IID_IShellLinkA, - &IID_IShellCopyHookA, - &IID_IFileViewerA, - &IID_ICommDlgBrowser, - &IID_IEnumIDList, - &IID_IFileViewerSite, - &IID_IContextMenu2, - &IID_IShellExecuteHookA, - &IID_IPropSheetPage, - &IID_INewShortcutHookW, - &IID_IFileViewerW, - &IID_IShellLinkW, - &IID_IExtractIconW, - &IID_IShellExecuteHookW, - &IID_IShellCopyHookW, - &IID_IRemoteComputer, - &IID_IQueryInfo, - &IID_IDockingWindow, - &IID_IDockingWindowSite, - &CLSID_NetworkPlaces, - &CLSID_NetworkDomain, - &CLSID_NetworkServer, - &CLSID_NetworkShare, - &CLSID_MyComputer, - &CLSID_Internet, - &CLSID_ShellFSFolder, - &CLSID_RecycleBin, - &CLSID_ControlPanel, - &CLSID_Printers, - &CLSID_MyDocuments, - NULL -}; - -DEFINE_GUID(IID_Endianess, 0x01020304, 0x0506, 0x0708, 0x09, 0x0A, 0x0B, - 0x0C, 0x0D, 0x0E, 0x0F, 0x0A); - -static void test_ClassIDs(void) -{ - const GUID **guids = TEST_guids; - char szBuff[256]; - GUID guid; - DWORD dwLen; - BOOL bRet; - int i = 0; - - if (!pSHLWAPI_269 || !pSHLWAPI_23) - return; - - while (*guids) - { - dwLen = pSHLWAPI_23(*guids, szBuff, 256); - ok(dwLen == 39, "wrong size for id %d\n", i); - - bRet = pSHLWAPI_269(szBuff, &guid); - ok(bRet != FALSE, "created invalid string '%s'\n", szBuff); - - if (bRet) - ok(IsEqualGUID(*guids, &guid), "GUID created wrong %d\n", i); - - guids++; - i++; - } - - /* Test endianess */ - dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 256); - ok(dwLen == 39, "wrong size for IID_Endianess\n"); - - ok(!strcmp(szBuff, "{01020304-0506-0708-090A-0B0C0D0E0F0A}"), - "Endianess Broken, got '%s'\n", szBuff); - - /* test lengths */ - szBuff[0] = ':'; - dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 0); - ok(dwLen == 0, "accepted bad length\n"); - ok(szBuff[0] == ':', "wrote to buffer with no length\n"); - - szBuff[0] = ':'; - dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 38); - ok(dwLen == 0, "accepted bad length\n"); - ok(szBuff[0] == ':', "wrote to buffer with no length\n"); - - szBuff[0] = ':'; - dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 39); - ok(dwLen == 39, "rejected ok length\n"); - ok(szBuff[0] == '{', "Didn't write to buffer with ok length\n"); - - /* Test string */ - strcpy(szBuff, "{xxx-"); - bRet = pSHLWAPI_269(szBuff, &guid); - ok(bRet == FALSE, "accepted invalid string\n"); - - dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 39); - ok(dwLen == 39, "rejected ok length\n"); - ok(szBuff[0] == '{', "Didn't write to buffer with ok length\n"); -} - -static void test_CLSIDFromProgIDWrap(void) -{ - HRESULT (WINAPI *pCLSIDFromProgIDWrap)(LPCOLESTR,LPCLSID); - CLSID clsid = IID_NULL; - HRESULT hres; - - static const WCHAR wszStdPicture[] = {'S','t','d','P','i','c','t','u','r','e',0}; - - pCLSIDFromProgIDWrap = (void*)GetProcAddress(hShlwapi,(char*)435); - - hres = pCLSIDFromProgIDWrap(wszStdPicture, &clsid); - ok(hres == S_OK, "CLSIDFromProgIDWrap failed: %08x\n", hres); - ok(IsEqualGUID(&CLSID_StdPicture, &clsid), "wrong clsid\n"); - - hres = pCLSIDFromProgIDWrap(NULL, &clsid); - ok(hres == E_INVALIDARG, "CLSIDFromProgIDWrap failed: %08x, expected E_INVALIDARG\n", hres); - - hres = pCLSIDFromProgIDWrap(wszStdPicture, NULL); - ok(hres == E_INVALIDARG, "CLSIDFromProgIDWrap failed: %08x, expected E_INVALIDARG\n", hres); -} - -START_TEST(clsid) -{ - hShlwapi = GetModuleHandleA("shlwapi.dll"); - pSHLWAPI_269 = (void*)GetProcAddress(hShlwapi, (LPSTR)269); - pSHLWAPI_23 = (void*)GetProcAddress(hShlwapi, (LPSTR)23); - - test_ClassIDs(); - test_CLSIDFromProgIDWrap(); -} diff --git a/rostests/winetests/shlwapi/generated.c b/rostests/winetests/shlwapi/generated.c deleted file mode 100755 index 6d50fbcf32e..00000000000 --- a/rostests/winetests/shlwapi/generated.c +++ /dev/null @@ -1,180 +0,0 @@ -/* File generated automatically from tools/winapi/test.dat; do not edit! */ -/* This file can be copied, modified and distributed without restriction. */ - -/* - * Unit tests for data structure packing - */ - -#define WINVER 0x0501 -#define _WIN32_IE 0x0501 -#define _WIN32_WINNT 0x0501 - -#define WINE_NOWINSOCK - -#include -#include "windef.h" -#include "winbase.h" -#include "wtypes.h" -#include "winreg.h" -#include "shlwapi.h" - -#include "wine/test.h" - -/*********************************************************************** - * Compatibility macros - */ - -#define DWORD_PTR UINT_PTR -#define LONG_PTR INT_PTR -#define ULONG_PTR UINT_PTR - -/*********************************************************************** - * Windows API extension - */ - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field) -#elif defined(__GNUC__) -# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field) -#else -/* FIXME: Not sure if is possible to do without compiler extension */ -#endif - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define _TYPE_ALIGNMENT(type) __alignof(type) -#elif defined(__GNUC__) -# define _TYPE_ALIGNMENT(type) __alignof__(type) -#else -/* - * FIXME: Not sure if is possible to do without compiler extension - * (if type is not just a name that is, if so the normal) - * TYPE_ALIGNMENT can be used) - */ -#endif - -#if defined(TYPE_ALIGNMENT) && defined(_MSC_VER) && _MSC_VER >= 800 && !defined(__cplusplus) -#pragma warning(disable:4116) -#endif - -#if !defined(TYPE_ALIGNMENT) && defined(_TYPE_ALIGNMENT) -# define TYPE_ALIGNMENT _TYPE_ALIGNMENT -#endif - -/*********************************************************************** - * Test helper macros - */ - -#ifdef FIELD_ALIGNMENT -# define TEST_FIELD_ALIGNMENT(type, field, align) \ - ok(FIELD_ALIGNMENT(type, field) == align, \ - "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \ - (int)FIELD_ALIGNMENT(type, field)) -#else -# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0) -#endif - -#define TEST_FIELD_OFFSET(type, field, offset) \ - ok(FIELD_OFFSET(type, field) == offset, \ - "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \ - (long int)FIELD_OFFSET(type, field)) - -#ifdef _TYPE_ALIGNMENT -#define TEST__TYPE_ALIGNMENT(type, align) \ - ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type)) -#else -# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#ifdef TYPE_ALIGNMENT -#define TEST_TYPE_ALIGNMENT(type, align) \ - ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type)) -#else -# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#define TEST_TYPE_SIZE(type, size) \ - ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type))) - -/*********************************************************************** - * Test macros - */ - -#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \ - TEST_TYPE_SIZE(field_type, field_size); \ - TEST_FIELD_ALIGNMENT(type, field_name, field_align); \ - TEST_FIELD_OFFSET(type, field_name, field_offset); \ - -#define TEST_TYPE(type, size, align) \ - TEST_TYPE_ALIGNMENT(type, align); \ - TEST_TYPE_SIZE(type, size) - -#define TEST_TYPE_POINTER(type, size, align) \ - TEST__TYPE_ALIGNMENT(*(type)0, align); \ - TEST_TYPE_SIZE(*(type)0, size) - -#define TEST_TYPE_SIGNED(type) \ - ok((type) -1 < 0, "(" #type ") -1 < 0\n"); - -#define TEST_TYPE_UNSIGNED(type) \ - ok((type) -1 > 0, "(" #type ") -1 > 0\n"); - -static void test_pack_ASSOCF(void) -{ - /* ASSOCF */ - TEST_TYPE(ASSOCF, 4, 4); - TEST_TYPE_UNSIGNED(ASSOCF); -} - -static void test_pack_DLLGETVERSIONPROC(void) -{ - /* DLLGETVERSIONPROC */ - TEST_TYPE(DLLGETVERSIONPROC, 4, 4); -} - -static void test_pack_DLLVERSIONINFO(void) -{ - /* DLLVERSIONINFO (pack 8) */ - TEST_TYPE(DLLVERSIONINFO, 20, 4); - TEST_FIELD(DLLVERSIONINFO, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(DLLVERSIONINFO, DWORD, dwMajorVersion, 4, 4, 4); - TEST_FIELD(DLLVERSIONINFO, DWORD, dwMinorVersion, 8, 4, 4); - TEST_FIELD(DLLVERSIONINFO, DWORD, dwBuildNumber, 12, 4, 4); - TEST_FIELD(DLLVERSIONINFO, DWORD, dwPlatformID, 16, 4, 4); -} - -static void test_pack_DLLVERSIONINFO2(void) -{ - /* DLLVERSIONINFO2 (pack 8) */ - TEST_TYPE(DLLVERSIONINFO2, 32, 8); - TEST_FIELD(DLLVERSIONINFO2, DLLVERSIONINFO, info1, 0, 20, 4); - TEST_FIELD(DLLVERSIONINFO2, DWORD, dwFlags, 20, 4, 4); - TEST_FIELD(DLLVERSIONINFO2, ULONGLONG, ullVersion, 24, 8, 8); -} - -static void test_pack_HUSKEY(void) -{ - /* HUSKEY */ - TEST_TYPE(HUSKEY, 4, 4); -} - -static void test_pack_PHUSKEY(void) -{ - /* PHUSKEY */ - TEST_TYPE(PHUSKEY, 4, 4); - TEST_TYPE_POINTER(PHUSKEY, 4, 4); -} - -static void test_pack(void) -{ - test_pack_ASSOCF(); - test_pack_DLLGETVERSIONPROC(); - test_pack_DLLVERSIONINFO(); - test_pack_DLLVERSIONINFO2(); - test_pack_HUSKEY(); - test_pack_PHUSKEY(); -} - -START_TEST(generated) -{ - test_pack(); -} diff --git a/rostests/winetests/shlwapi/istream.c b/rostests/winetests/shlwapi/istream.c deleted file mode 100644 index 05a0e5a4a50..00000000000 --- a/rostests/winetests/shlwapi/istream.c +++ /dev/null @@ -1,578 +0,0 @@ -/* Unit test suite for SHLWAPI ShCreateStreamOnFile functions. - * - * Copyright 2008 Reece H. Dunn - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 - -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "objbase.h" -#include "shlwapi.h" - - -/* Function pointers for the SHCreateStreamOnFile functions */ -static HMODULE hShlwapi; -static HRESULT (WINAPI *pSHCreateStreamOnFileA)(LPCSTR file, DWORD mode, IStream **stream); -static HRESULT (WINAPI *pSHCreateStreamOnFileW)(LPCWSTR file, DWORD mode, IStream **stream); -static HRESULT (WINAPI *pSHCreateStreamOnFileEx)(LPCWSTR file, DWORD mode, DWORD attributes, BOOL create, IStream *template, IStream **stream); - - -static void test_IStream_invalid_operations(IStream * stream, DWORD mode) -{ - HRESULT ret; - IStream * clone; - ULONG refcount; - ULARGE_INTEGER uzero; - ULARGE_INTEGER uret; - LARGE_INTEGER zero; - ULONG count; - char data[256]; - - U(uzero).HighPart = 0; - U(uzero).LowPart = 0; - U(uret).HighPart = 0; - U(uret).LowPart = 0; - U(zero).HighPart = 0; - U(zero).LowPart = 0; - - /* IStream::Read */ - - /* IStream_Read from the COBJMACROS is undefined by shlwapi.h, replaced by the IStream_Read helper function. */ - - ret = stream->lpVtbl->Read(stream, NULL, 0, &count); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - ret = stream->lpVtbl->Read(stream, data, 5, NULL); - ok(ret == S_FALSE || ret == S_OK, "expected S_FALSE or S_OK, got 0x%08x\n", ret); - - ret = stream->lpVtbl->Read(stream, data, 0, NULL); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - ret = stream->lpVtbl->Read(stream, data, 3, &count); - ok(ret == S_FALSE || ret == S_OK, "expected S_FALSE or S_OK, got 0x%08x\n", ret); - - /* IStream::Write */ - - /* IStream_Write from the COBJMACROS is undefined by shlwapi.h, replaced by the IStream_Write helper function. */ - - ret = stream->lpVtbl->Write(stream, NULL, 0, &count); - if (mode == STGM_READ) - ok(ret == STG_E_ACCESSDENIED /* XP */ || ret == S_OK /* 2000 */, - "expected STG_E_ACCESSDENIED or S_OK, got 0x%08x\n", ret); - else - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - strcpy(data, "Hello"); - ret = stream->lpVtbl->Write(stream, data, 5, NULL); - if (mode == STGM_READ) - ok(ret == STG_E_ACCESSDENIED /* XP */ || ret == S_OK /* 2000 */, - "expected STG_E_ACCESSDENIED or S_OK, got 0x%08x\n", ret); - else - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - strcpy(data, "Hello"); - ret = stream->lpVtbl->Write(stream, data, 0, NULL); - if (mode == STGM_READ) - ok(ret == STG_E_ACCESSDENIED /* XP */ || ret == S_OK /* 2000 */, - "expected STG_E_ACCESSDENIED or S_OK, got 0x%08x\n", ret); - else - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - strcpy(data, "Hello"); - ret = stream->lpVtbl->Write(stream, data, 0, &count); - if (mode == STGM_READ) - ok(ret == STG_E_ACCESSDENIED /* XP */ || ret == S_OK /* 2000 */, - "expected STG_E_ACCESSDENIED or S_OK, got 0x%08x\n", ret); - else - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - strcpy(data, "Hello"); - ret = stream->lpVtbl->Write(stream, data, 3, &count); - if (mode == STGM_READ) - ok(ret == STG_E_ACCESSDENIED /* XP */ || ret == S_OK /* 2000 */, - "expected STG_E_ACCESSDENIED or S_OK, got 0x%08x\n", ret); - else - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - /* IStream::Seek */ - - ret = IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - ret = IStream_Seek(stream, zero, 20, NULL); - ok(ret == E_INVALIDARG /* XP */ || ret == S_OK /* 2000 */, - "expected E_INVALIDARG or S_OK, got 0x%08x\n", ret); - - /* IStream::CopyTo */ - - ret = IStream_CopyTo(stream, NULL, uzero, &uret, &uret); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - clone = NULL; - ret = IStream_CopyTo(stream, clone, uzero, &uret, &uret); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - ret = IStream_CopyTo(stream, stream, uzero, &uret, &uret); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - ret = IStream_CopyTo(stream, stream, uzero, &uret, NULL); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - ret = IStream_CopyTo(stream, stream, uzero, NULL, &uret); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - /* IStream::Commit */ - - ret = IStream_Commit(stream, STGC_DEFAULT); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - /* IStream::Revert */ - - ret = IStream_Revert(stream); - ok(ret == E_NOTIMPL, "expected E_NOTIMPL, got 0x%08x\n", ret); - - /* IStream::LockRegion */ - - ret = IStream_LockRegion(stream, uzero, uzero, 0); - ok(ret == E_NOTIMPL /* XP */ || ret == S_OK /* Vista */, - "expected E_NOTIMPL or S_OK, got 0x%08x\n", ret); - - /* IStream::UnlockRegion */ - - if (ret == E_NOTIMPL) /* XP */ { - ret = IStream_UnlockRegion(stream, uzero, uzero, 0); - ok(ret == E_NOTIMPL, "expected E_NOTIMPL, got 0x%08x\n", ret); - } else /* Vista */ { - ret = IStream_UnlockRegion(stream, uzero, uzero, 0); - ok(ret == S_OK, "expected S_OK, got 0x%08x\n", ret); - - ret = IStream_UnlockRegion(stream, uzero, uzero, 0); - ok(ret == STG_E_LOCKVIOLATION, "expected STG_E_LOCKVIOLATION, got 0x%08x\n", ret); - } - - /* IStream::Stat */ - - ret = IStream_Stat(stream, NULL, 0); - ok(ret == STG_E_INVALIDPOINTER /* XP */ || ret == E_NOTIMPL /* 2000 */, - "expected STG_E_INVALIDPOINTER or E_NOTIMPL, got 0x%08x\n", ret); - - /* IStream::Clone */ - - ret = IStream_Clone(stream, NULL); - ok(ret == E_NOTIMPL, "expected E_NOTIMPL, got 0x%08x\n", ret); - - clone = NULL; - ret = IStream_Clone(stream, &clone); - ok(ret == E_NOTIMPL, "expected E_NOTIMPL, got 0x%08x\n", ret); - ok(clone == NULL, "expected a NULL IStream object, got %p\n", stream); - - if (clone) { - refcount = IStream_Release(clone); - ok(refcount == 0, "expected 0, got %d\n", refcount); - } -} - - -static void test_SHCreateStreamOnFileA(DWORD mode, DWORD stgm) -{ - IStream * stream; - HRESULT ret; - ULONG refcount; - char test_file[MAX_PATH]; - static const CHAR testA_txt[] = "\\testA.txt"; - - trace("SHCreateStreamOnFileA: testing mode %d, STGM flags %08x\n", mode, stgm); - - /* Don't used a fixed path for the testA.txt file */ - GetTempPathA(MAX_PATH, test_file); - lstrcatA(test_file, testA_txt); - - /* invalid arguments */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileA)(NULL, mode | stgm, &stream); - ok(ret == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), "SHCreateStreamOnFileA: expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileA: expected a NULL IStream object, got %p\n", stream); - -#if 0 /* This test crashes on WinXP SP2 */ - ret = (*pSHCreateStreamOnFileA)(test_file, mode | stgm, NULL); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileA: expected E_INVALIDARG, got 0x%08x\n", ret); -#endif - - stream = NULL; - ret = (*pSHCreateStreamOnFileA)(test_file, mode | STGM_CONVERT | stgm, &stream); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileA: expected E_INVALIDARG, got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileA: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileA)(test_file, mode | STGM_DELETEONRELEASE | stgm, &stream); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileA: expected E_INVALIDARG, got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileA: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileA)(test_file, mode | STGM_TRANSACTED | stgm, &stream); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileA: expected E_INVALIDARG, got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileA: expected a NULL IStream object, got %p\n", stream); - - /* file does not exist */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileA)(test_file, mode | STGM_FAILIFTHERE | stgm, &stream); - ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "SHCreateStreamOnFileA: expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileA: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileA)(test_file, mode | STGM_CREATE | stgm, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileA: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileA: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileA: expected 0, got %d\n", refcount); - } - - /* NOTE: don't delete the file, as it will be used for the file exists tests. */ - - /* file exists */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileA)(test_file, mode | STGM_FAILIFTHERE | stgm, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileA: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileA: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileA: expected 0, got %d\n", refcount); - } - - stream = NULL; - ret = (*pSHCreateStreamOnFileA)(test_file, mode | STGM_CREATE | stgm, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileA: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileA: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileA: expected 0, got %d\n", refcount); - - ok(DeleteFileA(test_file), "SHCreateStreamOnFileA: could not delete file '%s', got error %d\n", test_file, GetLastError()); - } -} - - -static void test_SHCreateStreamOnFileW(DWORD mode, DWORD stgm) -{ - IStream * stream; - HRESULT ret; - ULONG refcount; - WCHAR test_file[MAX_PATH]; - static const WCHAR testW_txt[] = { '\\', 't', 'e', 's', 't', 'W', '.', 't', 'x', 't', '\0' }; - - trace("SHCreateStreamOnFileW: testing mode %d, STGM flags %08x\n", mode, stgm); - - /* Don't used a fixed path for the testW.txt file */ - GetTempPathW(MAX_PATH, test_file); - lstrcatW(test_file, testW_txt); - - /* invalid arguments */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileW)(NULL, mode | stgm, &stream); - ok(ret == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) || /* XP */ - ret == E_INVALIDARG /* Vista */, - "SHCreateStreamOnFileW: expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) or E_INVALIDARG, got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); - -#if 0 /* This test crashes on WinXP SP2 */ - ret = (*pSHCreateStreamOnFileW)(test_file, mode | stgm, NULL); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileW: expected E_INVALIDARG, got 0x%08x\n", ret); -#endif - - stream = NULL; - ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_CONVERT | stgm, &stream); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileW: expected E_INVALIDARG, got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_DELETEONRELEASE | stgm, &stream); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileW: expected E_INVALIDARG, got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_TRANSACTED | stgm, &stream); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileW: expected E_INVALIDARG, got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); - - /* file does not exist */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_FAILIFTHERE | stgm, &stream); - ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "SHCreateStreamOnFileW: expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileW: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_CREATE | stgm, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileW: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileW: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileW: expected 0, got %d\n", refcount); - } - - /* NOTE: don't delete the file, as it will be used for the file exists tests. */ - - /* file exists */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_FAILIFTHERE | stgm, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileW: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileW: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileW: expected 0, got %d\n", refcount); - } - - stream = NULL; - ret = (*pSHCreateStreamOnFileW)(test_file, mode | STGM_CREATE | stgm, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileW: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileW: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileW: expected 0, got %d\n", refcount); - - ok(DeleteFileW(test_file), "SHCreateStreamOnFileW: could not delete the test file, got error %d\n", GetLastError()); - } -} - - -static void test_SHCreateStreamOnFileEx(DWORD mode, DWORD stgm) -{ - IStream * stream; - IStream * template = NULL; - HRESULT ret; - ULONG refcount; - WCHAR test_file[MAX_PATH]; - static const WCHAR testEx_txt[] = { '\\', 't', 'e', 's', 't', 'E','x', '.', 't', 'x', 't', '\0' }; - - trace("SHCreateStreamOnFileEx: testing mode %d, STGM flags %08x\n", mode, stgm); - - /* Don't used a fixed path for the testEx.txt file */ - GetTempPathW(MAX_PATH, test_file); - lstrcatW(test_file, testEx_txt); - - /* invalid arguments */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(NULL, mode, 0, FALSE, NULL, &stream); - ok(ret == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) || /* XP */ - ret == E_INVALIDARG /* Vista */, - "SHCreateStreamOnFileEx: expected HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) or E_INVALIDARG, got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileEx: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode, 0, FALSE, template, &stream); - ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "SHCreateStreamOnFileEx: expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileEx: expected a NULL IStream object, got %p\n", stream); - -#if 0 /* This test crashes on WinXP SP2 */ - ret = (*pSHCreateStreamOnFileEx)(test_file, mode, 0, FALSE, NULL, NULL); - ok(ret == E_INVALIDARG, "SHCreateStreamOnFileEx: expected E_INVALIDARG, got 0x%08x\n", ret); -#endif - - /* file does not exist */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_FAILIFTHERE | stgm, 0, FALSE, NULL, &stream); - if ((stgm & STGM_TRANSACTED) == STGM_TRANSACTED && mode == STGM_READ) { - ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) /* XP */ || ret == E_INVALIDARG /* Vista */, - "SHCreateStreamOnFileEx: expected E_INVALIDARG or HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got 0x%08x\n", ret); - - if (ret == E_INVALIDARG) { - skip("SHCreateStreamOnFileEx: STGM_TRANSACTED not supported in this configuration.\n"); - return; - } - } else { - ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "SHCreateStreamOnFileEx: expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got 0x%08x\n", ret); - } - ok(stream == NULL, "SHCreateStreamOnFileEx: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_FAILIFTHERE | stgm, 0, TRUE, NULL, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileEx: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileEx: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileEx: expected 0, got %d\n", refcount); - - ok(DeleteFileW(test_file), "SHCreateStreamOnFileEx: could not delete the test file, got error %d\n", GetLastError()); - } - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_CREATE | stgm, 0, FALSE, NULL, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileEx: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileEx: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileEx: expected 0, got %d\n", refcount); - - ok(DeleteFileW(test_file), "SHCreateStreamOnFileEx: could not delete the test file, got error %d\n", GetLastError()); - } - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_CREATE | stgm, 0, TRUE, NULL, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileEx: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileEx: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileEx: expected 0, got %d\n", refcount); - } - - /* NOTE: don't delete the file, as it will be used for the file exists tests. */ - - /* file exists */ - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_FAILIFTHERE | stgm, 0, FALSE, NULL, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileEx: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileEx: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileEx: expected 0, got %d\n", refcount); - } - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_FAILIFTHERE | stgm, 0, TRUE, NULL, &stream); - ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_EXISTS), "SHCreateStreamOnFileEx: expected HRESULT_FROM_WIN32(ERROR_FILE_EXISTS), got 0x%08x\n", ret); - ok(stream == NULL, "SHCreateStreamOnFileEx: expected a NULL IStream object, got %p\n", stream); - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_CREATE | stgm, 0, FALSE, NULL, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileEx: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileEx: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileEx: expected 0, got %d\n", refcount); - } - - stream = NULL; - ret = (*pSHCreateStreamOnFileEx)(test_file, mode | STGM_CREATE | stgm, 0, TRUE, NULL, &stream); - ok(ret == S_OK, "SHCreateStreamOnFileEx: expected S_OK, got 0x%08x\n", ret); - ok(stream != NULL, "SHCreateStreamOnFileEx: expected a valid IStream object, got NULL\n"); - - if (stream) { - test_IStream_invalid_operations(stream, mode); - - refcount = IStream_Release(stream); - ok(refcount == 0, "SHCreateStreamOnFileEx: expected 0, got %d\n", refcount); - } - - ok(DeleteFileW(test_file), "SHCreateStreamOnFileEx: could not delete the test file, got error %d\n", GetLastError()); -} - - -START_TEST(istream) -{ - static const DWORD stgm_access[] = { - STGM_READ, - STGM_WRITE, - STGM_READWRITE - }; - - static const DWORD stgm_sharing[] = { - 0, - STGM_SHARE_DENY_NONE, - STGM_SHARE_DENY_READ, - STGM_SHARE_DENY_WRITE, - STGM_SHARE_EXCLUSIVE - }; - - static const DWORD stgm_flags[] = { - 0, - STGM_CONVERT, - STGM_DELETEONRELEASE, - STGM_CONVERT | STGM_DELETEONRELEASE, - STGM_TRANSACTED | STGM_CONVERT, - STGM_TRANSACTED | STGM_DELETEONRELEASE, - STGM_TRANSACTED | STGM_CONVERT | STGM_DELETEONRELEASE - }; - - int i, j, k; - - hShlwapi = GetModuleHandleA("shlwapi.dll"); - - pSHCreateStreamOnFileA = (void*)GetProcAddress(hShlwapi, "SHCreateStreamOnFileA"); - pSHCreateStreamOnFileW = (void*)GetProcAddress(hShlwapi, "SHCreateStreamOnFileW"); - pSHCreateStreamOnFileEx = (void*)GetProcAddress(hShlwapi, "SHCreateStreamOnFileEx"); - - if (!pSHCreateStreamOnFileA) - skip("SHCreateStreamOnFileA not found.\n"); - - if (!pSHCreateStreamOnFileW) - skip("SHCreateStreamOnFileW not found.\n"); - - if (!pSHCreateStreamOnFileEx) - skip("SHCreateStreamOnFileEx not found.\n"); - - for (i = 0; i != sizeof(stgm_access)/sizeof(stgm_access[0]); i++) { - for (j = 0; j != sizeof(stgm_sharing)/sizeof(stgm_sharing[0]); j ++) { - if (pSHCreateStreamOnFileA) - test_SHCreateStreamOnFileA(stgm_access[i], stgm_sharing[j]); - - if (pSHCreateStreamOnFileW) - test_SHCreateStreamOnFileW(stgm_access[i], stgm_sharing[j]); - - if (pSHCreateStreamOnFileEx) { - for (k = 0; k != sizeof(stgm_flags)/sizeof(stgm_flags[0]); k++) - test_SHCreateStreamOnFileEx(stgm_access[i], stgm_sharing[j] | stgm_flags[k]); - } - } - } -} diff --git a/rostests/winetests/shlwapi/ordinal.c b/rostests/winetests/shlwapi/ordinal.c deleted file mode 100755 index f5286f02f45..00000000000 --- a/rostests/winetests/shlwapi/ordinal.c +++ /dev/null @@ -1,502 +0,0 @@ -/* Unit test suite for SHLWAPI ordinal functions - * - * 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 - */ - -#include - -#include "wine/test.h" -#include "winbase.h" -#include "winerror.h" -#include "winuser.h" -#include "ole2.h" -#include "oaidl.h" - -/* Function ptrs for ordinal calls */ -static HMODULE hShlwapi; -static int (WINAPI *pSHSearchMapInt)(const int*,const int*,int,int); -static HRESULT (WINAPI *pGetAcceptLanguagesA)(LPSTR,LPDWORD); - -static HANDLE (WINAPI *pSHAllocShared)(LPCVOID,DWORD,DWORD); -static LPVOID (WINAPI *pSHLockShared)(HANDLE,DWORD); -static BOOL (WINAPI *pSHUnlockShared)(LPVOID); -static BOOL (WINAPI *pSHFreeShared)(HANDLE,DWORD); -static HRESULT(WINAPIV *pSHPackDispParams)(DISPPARAMS*,VARIANTARG*,UINT,...); - -static void test_GetAcceptLanguagesA(void) -{ HRESULT retval; - DWORD buffersize, buffersize2, exactsize; - char buffer[100]; - - if (!pGetAcceptLanguagesA) - return; - - buffersize = sizeof(buffer); - memset(buffer, 0, sizeof(buffer)); - SetLastError(ERROR_SUCCESS); - retval = pGetAcceptLanguagesA( buffer, &buffersize); - trace("GetAcceptLanguagesA: retval %08x, size %08x, buffer (%s)," - " last error %u\n", retval, buffersize, buffer, GetLastError()); - if(retval != S_OK) { - trace("GetAcceptLanguagesA: skipping tests\n"); - return; - } - ok( (ERROR_NO_IMPERSONATION_TOKEN == GetLastError()) || - (ERROR_CLASS_DOES_NOT_EXIST == GetLastError()) || - (ERROR_PROC_NOT_FOUND == GetLastError()) || - (ERROR_CALL_NOT_IMPLEMENTED == GetLastError()) || - (ERROR_SUCCESS == GetLastError()), "last error set to %u\n", GetLastError()); - exactsize = strlen(buffer); - - SetLastError(ERROR_SUCCESS); - retval = pGetAcceptLanguagesA( NULL, NULL); - ok(retval == E_FAIL, - "function result wrong: got %08x; expected E_FAIL\n", retval); - ok(ERROR_SUCCESS == GetLastError(), "last error set to %u\n", GetLastError()); - - buffersize = sizeof(buffer); - SetLastError(ERROR_SUCCESS); - retval = pGetAcceptLanguagesA( NULL, &buffersize); - ok(retval == E_FAIL, - "function result wrong: got %08x; expected E_FAIL\n", retval); - ok(buffersize == sizeof(buffer), - "buffersize was changed (2nd parameter; not on Win2k)\n"); - ok(ERROR_SUCCESS == GetLastError(), "last error set to %u\n", GetLastError()); - - SetLastError(ERROR_SUCCESS); - retval = pGetAcceptLanguagesA( buffer, NULL); - ok(retval == E_FAIL, - "function result wrong: got %08x; expected E_FAIL\n", retval); - ok(ERROR_SUCCESS == GetLastError(), "last error set to %u\n", GetLastError()); - - buffersize = 0; - memset(buffer, 0, sizeof(buffer)); - SetLastError(ERROR_SUCCESS); - retval = pGetAcceptLanguagesA( buffer, &buffersize); - ok(retval == E_FAIL, - "function result wrong: got %08x; expected E_FAIL\n", retval); - ok(buffersize == 0, - "buffersize wrong(changed) got %08x; expected 0 (2nd parameter; not on Win2k)\n", buffersize); - ok(ERROR_SUCCESS == GetLastError(), "last error set to %u\n", GetLastError()); - - buffersize = buffersize2 = 1; - memset(buffer, 0, sizeof(buffer)); - SetLastError(ERROR_SUCCESS); - retval = pGetAcceptLanguagesA( buffer, &buffersize); - switch(retval) { - case 0L: - if(buffersize == exactsize) { - ok( (ERROR_SUCCESS == GetLastError()) || (ERROR_CALL_NOT_IMPLEMENTED == GetLastError()) || - (ERROR_PROC_NOT_FOUND == GetLastError()) || (ERROR_NO_IMPERSONATION_TOKEN == GetLastError()), - "last error wrong: got %u; expected ERROR_SUCCESS(NT4)/ERROR_CALL_NOT_IMPLEMENTED(98/ME)/" - "ERROR_PROC_NOT_FOUND(NT4)/ERROR_NO_IMPERSONATION_TOKEN(XP)\n", GetLastError()); - ok(exactsize == strlen(buffer), - "buffer content (length) wrong: got %08x, expected %08x\n", lstrlenA(buffer), exactsize); - } else if((buffersize +1) == buffersize2) { - ok(ERROR_SUCCESS == GetLastError(), - "last error wrong: got %u; expected ERROR_SUCCESS\n", GetLastError()); - ok(buffersize == strlen(buffer), - "buffer content (length) wrong: got %08x, expected %08x\n", lstrlenA(buffer), buffersize); - } else - ok( 0, "retval %08x, size %08x, buffer (%s), last error %u\n", - retval, buffersize, buffer, GetLastError()); - break; - case E_INVALIDARG: - ok(buffersize == 0, - "buffersize wrong: got %08x, expected 0 (2nd parameter;Win2k)\n", buffersize); - ok(ERROR_INSUFFICIENT_BUFFER == GetLastError(), - "last error wrong: got %u; expected ERROR_INSUFFICIENT_BUFFER\n", GetLastError()); - ok(buffersize2 == strlen(buffer), - "buffer content (length) wrong: got %08x, expected %08x\n", lstrlenA(buffer), buffersize2); - break; - default: - ok( 0, "retval %08x, size %08x, buffer (%s), last error %u\n", - retval, buffersize, buffer, GetLastError()); - break; - } - - buffersize = buffersize2 = exactsize; - memset(buffer, 0, sizeof(buffer)); - SetLastError(ERROR_SUCCESS); - retval = pGetAcceptLanguagesA( buffer, &buffersize); - switch(retval) { - case 0L: - ok(ERROR_SUCCESS == GetLastError(), - "last error wrong: got %u; expected ERROR_SUCCESS\n", GetLastError()); - if((buffersize == exactsize) /* XP */ || - ((buffersize +1)== exactsize) /* 98 */) - ok(buffersize == strlen(buffer), - "buffer content (length) wrong: got %08x, expected %08x\n", lstrlenA(buffer), buffersize); - else - ok( 0, "retval %08x, size %08x, buffer (%s), last error %u\n", - retval, buffersize, buffer, GetLastError()); - break; - case E_INVALIDARG: - ok(buffersize == 0, - "buffersize wrong: got %08x, expected 0 (2nd parameter;Win2k)\n", buffersize); - ok(ERROR_INSUFFICIENT_BUFFER == GetLastError(), - "last error wrong: got %u; expected ERROR_INSUFFICIENT_BUFFER\n", GetLastError()); - ok(buffersize2 == strlen(buffer), - "buffer content (length) wrong: got %08x, expected %08x\n", lstrlenA(buffer), buffersize2); - break; - default: - ok( 0, "retval %08x, size %08x, buffer (%s), last error %u\n", - retval, buffersize, buffer, GetLastError()); - break; - } -} - -static void test_SHSearchMapInt(void) -{ - int keys[8], values[8]; - int i = 0; - - if (!pSHSearchMapInt) - return; - - memset(keys, 0, sizeof(keys)); - memset(values, 0, sizeof(values)); - keys[0] = 99; values[0] = 101; - - /* NULL key/value lists crash native, so skip testing them */ - - /* 1 element */ - i = pSHSearchMapInt(keys, values, 1, keys[0]); - ok(i == values[0], "Len 1, expected %d, got %d\n", values[0], i); - - /* Key doesn't exist */ - i = pSHSearchMapInt(keys, values, 1, 100); - ok(i == -1, "Len 1 - bad key, expected -1, got %d\n", i); - - /* Len = 0 => not found */ - i = pSHSearchMapInt(keys, values, 0, keys[0]); - ok(i == -1, "Len 1 - passed len 0, expected -1, got %d\n", i); - - /* 2 elements, len = 1 */ - keys[1] = 98; values[1] = 102; - i = pSHSearchMapInt(keys, values, 1, keys[1]); - ok(i == -1, "Len 1 - array len 2, expected -1, got %d\n", i); - - /* 2 elements, len = 2 */ - i = pSHSearchMapInt(keys, values, 2, keys[1]); - ok(i == values[1], "Len 2, expected %d, got %d\n", values[1], i); - - /* Searches forward */ - keys[2] = 99; values[2] = 103; - i = pSHSearchMapInt(keys, values, 3, keys[0]); - ok(i == values[0], "Len 3, expected %d, got %d\n", values[0], i); -} - -static void test_alloc_shared(void) -{ - DWORD procid; - HANDLE hmem; - int val; - int* p; - BOOL ret; - - procid=GetCurrentProcessId(); - hmem=pSHAllocShared(NULL,10,procid); - ok(hmem!=NULL,"SHAllocShared(NULL...) failed: %u\n", GetLastError()); - ret = pSHFreeShared(hmem, procid); - ok( ret, "SHFreeShared failed: %u\n", GetLastError()); - - val=0x12345678; - hmem=pSHAllocShared(&val,4,procid); - ok(hmem!=NULL,"SHAllocShared(NULL...) failed: %u\n", GetLastError()); - - p=(int*)pSHLockShared(hmem,procid); - ok(p!=NULL,"SHLockShared failed: %u\n", GetLastError()); - if (p!=NULL) - ok(*p==val,"Wrong value in shared memory: %d instead of %d\n",*p,val); - ret = pSHUnlockShared(p); - ok( ret, "SHUnlockShared failed: %u\n", GetLastError()); - - ret = pSHFreeShared(hmem, procid); - ok( ret, "SHFreeShared failed: %u\n", GetLastError()); -} - -static void test_fdsa(void) -{ - typedef struct - { - DWORD num_items; /* Number of elements inserted */ - void *mem; /* Ptr to array */ - DWORD blocks_alloced; /* Number of elements allocated */ - BYTE inc; /* Number of elements to grow by when we need to expand */ - BYTE block_size; /* Size in bytes of an element */ - BYTE flags; /* Flags */ - } FDSA_info; - - BOOL (WINAPI *pFDSA_Initialize)(DWORD block_size, DWORD inc, FDSA_info *info, void *mem, - DWORD init_blocks); - BOOL (WINAPI *pFDSA_Destroy)(FDSA_info *info); - DWORD (WINAPI *pFDSA_InsertItem)(FDSA_info *info, DWORD where, const void *block); - BOOL (WINAPI *pFDSA_DeleteItem)(FDSA_info *info, DWORD where); - - FDSA_info info; - int block_size = 10, init_blocks = 4, inc = 2; - DWORD ret; - char *mem; - - pFDSA_Initialize = (void *)GetProcAddress(hShlwapi, (LPSTR)208); - pFDSA_Destroy = (void *)GetProcAddress(hShlwapi, (LPSTR)209); - pFDSA_InsertItem = (void *)GetProcAddress(hShlwapi, (LPSTR)210); - pFDSA_DeleteItem = (void *)GetProcAddress(hShlwapi, (LPSTR)211); - - mem = HeapAlloc(GetProcessHeap(), 0, block_size * init_blocks); - memset(&info, 0, sizeof(info)); - - ok(pFDSA_Initialize(block_size, inc, &info, mem, init_blocks), "FDSA_Initialize rets FALSE\n"); - ok(info.num_items == 0, "num_items = %d\n", info.num_items); - ok(info.mem == mem, "mem = %p\n", info.mem); - ok(info.blocks_alloced == init_blocks, "blocks_alloced = %d\n", info.blocks_alloced); - ok(info.inc == inc, "inc = %d\n", info.inc); - ok(info.block_size == block_size, "block_size = %d\n", info.block_size); - ok(info.flags == 0, "flags = %d\n", info.flags); - - ret = pFDSA_InsertItem(&info, 1234, "1234567890"); - ok(ret == 0, "ret = %d\n", ret); - ok(info.num_items == 1, "num_items = %d\n", info.num_items); - ok(info.mem == mem, "mem = %p\n", info.mem); - ok(info.blocks_alloced == init_blocks, "blocks_alloced = %d\n", info.blocks_alloced); - ok(info.inc == inc, "inc = %d\n", info.inc); - ok(info.block_size == block_size, "block_size = %d\n", info.block_size); - ok(info.flags == 0, "flags = %d\n", info.flags); - - ret = pFDSA_InsertItem(&info, 1234, "abcdefghij"); - ok(ret == 1, "ret = %d\n", ret); - - ret = pFDSA_InsertItem(&info, 1, "klmnopqrst"); - ok(ret == 1, "ret = %d\n", ret); - - ret = pFDSA_InsertItem(&info, 0, "uvwxyzABCD"); - ok(ret == 0, "ret = %d\n", ret); - ok(info.mem == mem, "mem = %p\n", info.mem); - ok(info.flags == 0, "flags = %d\n", info.flags); - - /* This next InsertItem will cause shlwapi to allocate its own mem buffer */ - ret = pFDSA_InsertItem(&info, 0, "EFGHIJKLMN"); - ok(ret == 0, "ret = %d\n", ret); - ok(info.mem != mem, "mem = %p\n", info.mem); - ok(info.blocks_alloced == init_blocks + inc, "blocks_alloced = %d\n", info.blocks_alloced); - ok(info.flags == 0x1, "flags = %d\n", info.flags); - - ok(!memcmp(info.mem, "EFGHIJKLMNuvwxyzABCD1234567890klmnopqrstabcdefghij", 50), "mem %s\n", (char*)info.mem); - - ok(pFDSA_DeleteItem(&info, 2), "rets FALSE\n"); - ok(info.mem != mem, "mem = %p\n", info.mem); - ok(info.blocks_alloced == init_blocks + inc, "blocks_alloced = %d\n", info.blocks_alloced); - ok(info.flags == 0x1, "flags = %d\n", info.flags); - - ok(!memcmp(info.mem, "EFGHIJKLMNuvwxyzABCDklmnopqrstabcdefghij", 40), "mem %s\n", (char*)info.mem); - - ok(pFDSA_DeleteItem(&info, 3), "rets FALSE\n"); - ok(info.mem != mem, "mem = %p\n", info.mem); - ok(info.blocks_alloced == init_blocks + inc, "blocks_alloced = %d\n", info.blocks_alloced); - ok(info.flags == 0x1, "flags = %d\n", info.flags); - - ok(!memcmp(info.mem, "EFGHIJKLMNuvwxyzABCDklmnopqrst", 30), "mem %s\n", (char*)info.mem); - - ok(!pFDSA_DeleteItem(&info, 4), "does not ret FALSE\n"); - - /* As shlwapi has allocated memory internally, Destroy will ret FALSE */ - ok(!pFDSA_Destroy(&info), "FDSA_Destroy does not ret FALSE\n"); - - - /* When Initialize is called with inc = 0, set it to 1 */ - ok(pFDSA_Initialize(block_size, 0, &info, mem, init_blocks), "FDSA_Initialize rets FALSE\n"); - ok(info.inc == 1, "inc = %d\n", info.inc); - - /* This time, because shlwapi hasn't had to allocate memory - internally, Destroy rets non-zero */ - ok(pFDSA_Destroy(&info), "FDSA_Destroy rets FALSE\n"); - - - HeapFree(GetProcessHeap(), 0, mem); -} - - -typedef struct SHELL_USER_SID { - SID_IDENTIFIER_AUTHORITY sidAuthority; - DWORD dwUserGroupID; - DWORD dwUserID; -} SHELL_USER_SID, *PSHELL_USER_SID; -typedef struct SHELL_USER_PERMISSION { - SHELL_USER_SID susID; - DWORD dwAccessType; - BOOL fInherit; - DWORD dwAccessMask; - DWORD dwInheritMask; - DWORD dwInheritAccessMask; -} SHELL_USER_PERMISSION, *PSHELL_USER_PERMISSION; -static void test_GetShellSecurityDescriptor(void) -{ - SHELL_USER_PERMISSION supCurrentUserFull = { - { {SECURITY_NULL_SID_AUTHORITY}, 0, 0 }, - ACCESS_ALLOWED_ACE_TYPE, FALSE, - GENERIC_ALL, 0, 0 }; -#define MY_INHERITANCE 0xBE /* invalid value to proof behavior */ - SHELL_USER_PERMISSION supEveryoneDenied = { - { {SECURITY_WORLD_SID_AUTHORITY}, SECURITY_WORLD_RID, 0 }, - ACCESS_DENIED_ACE_TYPE, TRUE, - GENERIC_WRITE, MY_INHERITANCE | 0xDEADBA00, GENERIC_READ }; - PSHELL_USER_PERMISSION rgsup[2] = { - &supCurrentUserFull, &supEveryoneDenied, - }; - SECURITY_DESCRIPTOR* psd; - SECURITY_DESCRIPTOR* (WINAPI*pGetShellSecurityDescriptor)(PSHELL_USER_PERMISSION*,int); - - pGetShellSecurityDescriptor=(void*)GetProcAddress(hShlwapi,(char*)475); - - psd = pGetShellSecurityDescriptor(NULL, 2); - ok(psd==NULL, "GetShellSecurityDescriptor should fail\n"); - psd = pGetShellSecurityDescriptor(rgsup, 0); - ok(psd==NULL, "GetShellSecurityDescriptor should fail\n"); - - psd = pGetShellSecurityDescriptor(rgsup, 2); - ok(psd!=NULL, "GetShellSecurityDescriptor failed\n"); - if (psd!=NULL) - { - BOOL bHasDacl = FALSE, bDefaulted; - PACL pAcl; - DWORD dwRev; - SECURITY_DESCRIPTOR_CONTROL control; - - ok(IsValidSecurityDescriptor(psd), "returned value is not valid SD\n"); - - ok(GetSecurityDescriptorControl(psd, &control, &dwRev), - "GetSecurityDescriptorControl failed with error %u\n", GetLastError()); - ok(0 == (control & SE_SELF_RELATIVE), "SD should be absolute\n"); - - ok(GetSecurityDescriptorDacl(psd, &bHasDacl, &pAcl, &bDefaulted), - "GetSecurityDescriptorDacl failed with error %u\n", GetLastError()); - - ok(bHasDacl, "SD has no DACL\n"); - if (bHasDacl) - { - ok(!bDefaulted, "DACL should not be defaulted\n"); - - ok(pAcl != NULL, "NULL DACL!\n"); - if (pAcl != NULL) - { - ACL_SIZE_INFORMATION asiSize; - - ok(IsValidAcl(pAcl), "DACL is not valid\n"); - - ok(GetAclInformation(pAcl, &asiSize, sizeof(asiSize), AclSizeInformation), - "GetAclInformation failed with error %u\n", GetLastError()); - - ok(asiSize.AceCount == 3, "Incorrect number of ACEs: %d entries\n", asiSize.AceCount); - if (asiSize.AceCount == 3) - { - ACCESS_ALLOWED_ACE *paaa; /* will use for DENIED too */ - - ok(GetAce(pAcl, 0, (LPVOID*)&paaa), "GetAce failed with error %u\n", GetLastError()); - ok(paaa->Header.AceType == ACCESS_ALLOWED_ACE_TYPE, - "Invalid ACE type %d\n", paaa->Header.AceType); - ok(paaa->Header.AceFlags == 0, "Invalid ACE flags %x\n", paaa->Header.AceFlags); - ok(paaa->Mask == GENERIC_ALL, "Invalid ACE mask %x\n", paaa->Mask); - - ok(GetAce(pAcl, 1, (LPVOID*)&paaa), "GetAce failed with error %u\n", GetLastError()); - ok(paaa->Header.AceType == ACCESS_DENIED_ACE_TYPE, - "Invalid ACE type %d\n", paaa->Header.AceType); - /* first one of two ACEs generated from inheritable entry - without inheritance */ - ok(paaa->Header.AceFlags == 0, "Invalid ACE flags %x\n", paaa->Header.AceFlags); - ok(paaa->Mask == GENERIC_WRITE, "Invalid ACE mask %x\n", paaa->Mask); - - ok(GetAce(pAcl, 2, (LPVOID*)&paaa), "GetAce failed with error %u\n", GetLastError()); - ok(paaa->Header.AceType == ACCESS_DENIED_ACE_TYPE, - "Invalid ACE type %d\n", paaa->Header.AceType); - /* second ACE - with inheritance */ - ok(paaa->Header.AceFlags == MY_INHERITANCE, - "Invalid ACE flags %x\n", paaa->Header.AceFlags); - ok(paaa->Mask == GENERIC_READ, "Invalid ACE mask %x\n", paaa->Mask); - } - } - } - - LocalFree(psd); - } -} - -static void test_SHPackDispParams(void) -{ - DISPPARAMS params; - VARIANT vars[10]; - HRESULT hres; - - if(!pSHPackDispParams) - skip("SHPackSidpParams not available\n"); - - memset(¶ms, 0xc0, sizeof(params)); - memset(vars, 0xc0, sizeof(vars)); - hres = pSHPackDispParams(¶ms, vars, 1, VT_I4, 0xdeadbeef); - ok(hres == S_OK, "SHPackDispParams failed: %08x\n", hres); - ok(params.cArgs == 1, "params.cArgs = %d\n", params.cArgs); - ok(params.cNamedArgs == 0, "params.cNamedArgs = %d\n", params.cArgs); - ok(params.rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", params.rgdispidNamedArgs); - ok(params.rgvarg == vars, "params.rgvarg = %p\n", params.rgvarg); - ok(V_VT(vars) == VT_I4, "V_VT(var) = %d\n", V_VT(vars)); - ok(V_DISPATCH(vars) == (void*)0xdeadbeef, "failed\n"); - - memset(¶ms, 0xc0, sizeof(params)); - hres = pSHPackDispParams(¶ms, NULL, 0, 0); - ok(hres == S_OK, "SHPackDispParams failed: %08x\n", hres); - ok(params.cArgs == 0, "params.cArgs = %d\n", params.cArgs); - ok(params.cNamedArgs == 0, "params.cNamedArgs = %d\n", params.cArgs); - ok(params.rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", params.rgdispidNamedArgs); - ok(params.rgvarg == NULL, "params.rgvarg = %p\n", params.rgvarg); - - memset(vars, 0xc0, sizeof(vars)); - memset(¶ms, 0xc0, sizeof(params)); - hres = pSHPackDispParams(¶ms, vars, 4, VT_BSTR, (void*)0xdeadbeef, VT_EMPTY, 10, - VT_I4, 100, VT_DISPATCH, (void*)0xdeadbeef); - ok(hres == S_OK, "SHPackDispParams failed: %08x\n", hres); - ok(params.cArgs == 4, "params.cArgs = %d\n", params.cArgs); - ok(params.cNamedArgs == 0, "params.cNamedArgs = %d\n", params.cArgs); - ok(params.rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", params.rgdispidNamedArgs); - ok(params.rgvarg == vars, "params.rgvarg = %p\n", params.rgvarg); - ok(V_VT(vars) == VT_DISPATCH, "V_VT(vars[0]) = %x\n", V_VT(vars)); - ok(V_I4(vars) == 0xdeadbeef, "V_I4(vars[0]) = %x\n", V_I4(vars)); - ok(V_VT(vars+1) == VT_I4, "V_VT(vars[1]) = %d\n", V_VT(vars+1)); - ok(V_I4(vars+1) == 100, "V_I4(vars[1]) = %x\n", V_I4(vars+1)); - ok(V_VT(vars+2) == VT_I4, "V_VT(vars[2]) = %d\n", V_VT(vars+2)); - ok(V_I4(vars+2) == 10, "V_I4(vars[2]) = %x\n", V_I4(vars+2)); - ok(V_VT(vars+3) == VT_BSTR, "V_VT(vars[3]) = %d\n", V_VT(vars+3)); - ok(V_BSTR(vars+3) == (void*)0xdeadbeef, "V_BSTR(vars[3]) = %p\n", V_BSTR(vars+3)); -} - -START_TEST(ordinal) -{ - hShlwapi = GetModuleHandleA("shlwapi.dll"); - - pGetAcceptLanguagesA = (void*)GetProcAddress(hShlwapi, (LPSTR)14); - pSHSearchMapInt = (void*)GetProcAddress(hShlwapi, (LPSTR)198); - pSHAllocShared=(void*)GetProcAddress(hShlwapi,(char*)7); - pSHLockShared=(void*)GetProcAddress(hShlwapi,(char*)8); - pSHUnlockShared=(void*)GetProcAddress(hShlwapi,(char*)9); - pSHFreeShared=(void*)GetProcAddress(hShlwapi,(char*)10); - pSHPackDispParams=(void*)GetProcAddress(hShlwapi,(char*)282); - - test_GetAcceptLanguagesA(); - test_SHSearchMapInt(); - test_alloc_shared(); - test_fdsa(); - test_GetShellSecurityDescriptor(); - test_SHPackDispParams(); -} diff --git a/rostests/winetests/shlwapi/path.c b/rostests/winetests/shlwapi/path.c deleted file mode 100755 index e6b6548247d..00000000000 --- a/rostests/winetests/shlwapi/path.c +++ /dev/null @@ -1,1312 +0,0 @@ -/* Unit test suite for Path functions - * - * Copyright 2002 Matthew Mastracci - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "shlwapi.h" -#include "wininet.h" - -static HMODULE hShlwapi; -static HRESULT (WINAPI *pPathIsValidCharA)(char,DWORD); -static HRESULT (WINAPI *pPathIsValidCharW)(WCHAR,DWORD); -static LPWSTR (WINAPI *pPathCombineW)(LPWSTR, LPCWSTR, LPCWSTR); - -/* ################ */ - -struct { - const char *url; - const char *path; - DWORD ret; -} TEST_PATHFROMURL[] = { - {"file:///c:/foo/ba%5Cr", "c:\\foo\\ba\\r", S_OK}, - {"file:///c:/foo/../ba%5Cr", "c:\\foo\\..\\ba\\r", S_OK}, - {"file:///host/c:/foo/bar", "\\host\\c:\\foo\\bar", S_OK}, - {"file://host/c:/foo/bar", "\\\\hostc:\\foo\\bar", S_OK}, - {"file://host/c:/foo/bar", "\\\\hostc:\\foo\\bar", S_OK}, - {"file:\\\\host\\c:\\foo\\bar", "\\\\hostc:\\foo\\bar", S_OK}, - {"file:\\\\host\\ca\\foo\\bar", "\\\\host\\ca\\foo\\bar", S_OK}, - {"file:\\\\host\\c|\\foo\\bar", "\\\\hostc|\\foo\\bar", S_OK}, - {"file:\\%5Chost\\c:\\foo\\bar", "\\\\host\\c:\\foo\\bar", S_OK}, - {"file:\\\\host\\cx:\\foo\\bar", "\\\\host\\cx:\\foo\\bar", S_OK}, - {"file://c:/foo/bar", "c:\\foo\\bar", S_OK}, - {"file://c:/d:/foo/bar", "c:\\d:\\foo\\bar", S_OK}, - {"file://c|/d|/foo/bar", "c:\\d|\\foo\\bar", S_OK}, - {"file://host/foo/bar", "\\\\host\\foo\\bar", S_OK}, - {"file:/foo/bar", "\\foo\\bar", S_OK}, - {"file:/foo/bar/", "\\foo\\bar\\", S_OK}, - {"file:foo/bar", "foo\\bar", S_OK}, - {"file:c:/foo/bar", "c:\\foo\\bar", S_OK}, - {"file:c|/foo/bar", "c:\\foo\\bar", S_OK}, - {"file:cx|/foo/bar", "cx|\\foo\\bar", S_OK}, - {"file:////c:/foo/bar", "c:\\foo\\bar", S_OK}, -/* {"file:////c:/foo/foo%20bar", "c:\\foo\\foo%20bar", S_OK},*/ - - {"c:\\foo\\bar", NULL, E_INVALIDARG}, - {"foo/bar", NULL, E_INVALIDARG}, - {"http://foo/bar", NULL, E_INVALIDARG}, - -}; - - -static struct { - const char *path; - BOOL expect; -} TEST_PATH_IS_URL[] = { - {"http://foo/bar", TRUE}, - {"c:\\foo\\bar", FALSE}, - {"c:/foo/bar", FALSE}, - {"foo://foo/bar", TRUE}, - {"foo\\bar", FALSE}, - {"foo.bar", FALSE}, - {"bogusscheme:", TRUE}, - {"http:partial", TRUE}, - {"www.winehq.org", FALSE} -}; - -struct { - const char *path; - const char *result; -} TEST_PATH_UNQUOTE_SPACES[] = { - { "abcdef", "abcdef" }, - { "\"abcdef\"", "abcdef" }, - { "\"abcdef", "\"abcdef" }, - { "abcdef\"", "abcdef\"" }, - { "\"\"abcdef\"\"", "\"abcdef\"" }, - { "abc\"def", "abc\"def" }, - { "\"abc\"def", "\"abc\"def" }, - { "\"abc\"def\"", "abc\"def" }, - { "\'abcdef\'", "\'abcdef\'" }, - { "\"\"", "" }, - { "\"", "" } -}; - -/* ################ */ - -static LPWSTR GetWideString(const char* szString) -{ - LPWSTR wszString = HeapAlloc(GetProcessHeap(), 0, (2*INTERNET_MAX_URL_LENGTH) * sizeof(WCHAR)); - - MultiByteToWideChar(0, 0, szString, -1, wszString, INTERNET_MAX_URL_LENGTH); - - return wszString; -} - -static void FreeWideString(LPWSTR wszString) -{ - HeapFree(GetProcessHeap(), 0, wszString); -} - -static LPSTR strdupA(LPCSTR p) -{ - LPSTR ret; - DWORD len = (strlen(p) + 1); - ret = HeapAlloc(GetProcessHeap(), 0, len); - memcpy(ret, p, len); - return ret; -} - -/* ################ */ - -static void test_PathSearchAndQualify(void) -{ - WCHAR path1[] = {'c',':','\\','f','o','o',0}; - WCHAR expect1[] = {'c',':','\\','f','o','o',0}; - WCHAR path2[] = {'c',':','f','o','o',0}; - WCHAR c_drive[] = {'c',':',0}; - WCHAR foo[] = {'f','o','o',0}; - WCHAR path3[] = {'\\','f','o','o',0}; - WCHAR winini[] = {'w','i','n','.','i','n','i',0}; - WCHAR out[MAX_PATH]; - WCHAR cur_dir[MAX_PATH]; - WCHAR dot[] = {'.',0}; - - /* c:\foo */ - ok(PathSearchAndQualifyW(path1, out, MAX_PATH) != 0, - "PathSearchAndQualify rets 0\n"); - ok(!lstrcmpiW(out, expect1), "strings don't match\n"); - - /* c:foo */ - ok(PathSearchAndQualifyW(path2, out, MAX_PATH) != 0, - "PathSearchAndQualify rets 0\n"); - GetFullPathNameW(c_drive, MAX_PATH, cur_dir, NULL); - PathAddBackslashW(cur_dir); - lstrcatW(cur_dir, foo); - ok(!lstrcmpiW(out, cur_dir), "strings don't match\n"); - - /* foo */ - ok(PathSearchAndQualifyW(foo, out, MAX_PATH) != 0, - "PathSearchAndQualify rets 0\n"); - GetFullPathNameW(dot, MAX_PATH, cur_dir, NULL); - PathAddBackslashW(cur_dir); - lstrcatW(cur_dir, foo); - ok(!lstrcmpiW(out, cur_dir), "strings don't match\n"); - - /* \foo */ - ok(PathSearchAndQualifyW(path3, out, MAX_PATH) != 0, - "PathSearchAndQualify rets 0\n"); - GetFullPathNameW(dot, MAX_PATH, cur_dir, NULL); - lstrcpyW(cur_dir + 2, path3); - ok(!lstrcmpiW(out, cur_dir), "strings don't match\n"); - - /* win.ini */ - ok(PathSearchAndQualifyW(winini, out, MAX_PATH) != 0, - "PathSearchAndQualify rets 0\n"); - if(!SearchPathW(NULL, winini, NULL, MAX_PATH, cur_dir, NULL)) - GetFullPathNameW(winini, MAX_PATH, cur_dir, NULL); - ok(!lstrcmpiW(out, cur_dir), "strings don't match\n"); - -} - -static void test_PathCreateFromUrl(void) -{ - size_t i; - char ret_path[INTERNET_MAX_URL_LENGTH]; - DWORD len, ret; - WCHAR ret_pathW[INTERNET_MAX_URL_LENGTH]; - WCHAR *pathW, *urlW; - static const char url[] = "http://www.winehq.org"; - - /* Check ret_path = NULL */ - len = sizeof(url); - ret = PathCreateFromUrlA(url, NULL, &len, 0); - ok ( ret == E_INVALIDARG, "got 0x%08x expected E_INVALIDARG\n", ret); - - for(i = 0; i < sizeof(TEST_PATHFROMURL) / sizeof(TEST_PATHFROMURL[0]); i++) { - len = INTERNET_MAX_URL_LENGTH; - ret = PathCreateFromUrlA(TEST_PATHFROMURL[i].url, ret_path, &len, 0); - ok(ret == TEST_PATHFROMURL[i].ret, "ret %08x from url %s\n", ret, TEST_PATHFROMURL[i].url); - if(TEST_PATHFROMURL[i].path) { - ok(!lstrcmpi(ret_path, TEST_PATHFROMURL[i].path), "got %s expected %s from url %s\n", ret_path, TEST_PATHFROMURL[i].path, TEST_PATHFROMURL[i].url); - ok(len == strlen(ret_path), "ret len %d from url %s\n", len, TEST_PATHFROMURL[i].url); - } - len = INTERNET_MAX_URL_LENGTH; - pathW = GetWideString(TEST_PATHFROMURL[i].path); - urlW = GetWideString(TEST_PATHFROMURL[i].url); - ret = PathCreateFromUrlW(urlW, ret_pathW, &len, 0); - WideCharToMultiByte(CP_ACP, 0, ret_pathW, -1, ret_path, sizeof(ret_path),0,0); - ok(ret == TEST_PATHFROMURL[i].ret, "ret %08x from url L\"%s\"\n", ret, TEST_PATHFROMURL[i].url); - if(TEST_PATHFROMURL[i].path) { - ok(!lstrcmpiW(ret_pathW, pathW), "got %s expected %s from url L\"%s\"\n", ret_path, TEST_PATHFROMURL[i].path, TEST_PATHFROMURL[i].url); - ok(len == lstrlenW(ret_pathW), "ret len %d from url L\"%s\"\n", len, TEST_PATHFROMURL[i].url); - } - FreeWideString(urlW); - FreeWideString(pathW); - } -} - - -static void test_PathIsUrl(void) -{ - size_t i; - BOOL ret; - - for(i = 0; i < sizeof(TEST_PATH_IS_URL)/sizeof(TEST_PATH_IS_URL[0]); i++) { - ret = PathIsURLA(TEST_PATH_IS_URL[i].path); - ok(ret == TEST_PATH_IS_URL[i].expect, - "returned %d from path %s, expected %d\n", ret, TEST_PATH_IS_URL[i].path, - TEST_PATH_IS_URL[i].expect); - } -} - -static const DWORD SHELL_charclass[] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000080, 0x00000100, 0x00000200, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000002, 0x00000100, - 0x00000040, 0x00000100, 0x00000004, 0x00000000, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0x00000100, 0x00000010, 0x00000020, - 0x00000000, 0x00000100, 0x00000000, 0x00000001, - 0x00000100, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x00000100, - 0x00000008, 0x00000100, 0x00000100, 0x00000100, - 0x00000100, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x00000100, - 0x00000000, 0x00000100, 0x00000100 -}; - -static void test_PathIsValidCharA(void) -{ - BOOL ret; - unsigned int c; - - ret = pPathIsValidCharA( 0x7f, 0 ); - ok ( !ret, "PathIsValidCharA succeeded: 0x%08x\n", (DWORD)ret ); - - ret = pPathIsValidCharA( 0x7f, 1 ); - ok ( !ret, "PathIsValidCharA succeeded: 0x%08x\n", (DWORD)ret ); - - for (c = 0; c < 0x7f; c++) - { - ret = pPathIsValidCharA( c, ~0U ); - ok ( ret == SHELL_charclass[c] || (ret == 1 && SHELL_charclass[c] == 0xffffffff), - "PathIsValidCharA failed: 0x%02x got 0x%08x expected 0x%08x\n", - c, (DWORD)ret, SHELL_charclass[c] ); - } - - for (c = 0x7f; c <= 0xff; c++) - { - ret = pPathIsValidCharA( c, ~0U ); - ok ( ret == 0x00000100, - "PathIsValidCharA failed: 0x%02x got 0x%08x expected 0x00000100\n", - c, (DWORD)ret ); - } -} - -static void test_PathIsValidCharW(void) -{ - BOOL ret; - unsigned int c, err_count = 0; - - ret = pPathIsValidCharW( 0x7f, 0 ); - ok ( !ret, "PathIsValidCharW succeeded: 0x%08x\n", (DWORD)ret ); - - ret = pPathIsValidCharW( 0x7f, 1 ); - ok ( !ret, "PathIsValidCharW succeeded: 0x%08x\n", (DWORD)ret ); - - for (c = 0; c < 0x7f; c++) - { - ret = pPathIsValidCharW( c, ~0U ); - ok ( ret == SHELL_charclass[c] || (ret == 1 && SHELL_charclass[c] == 0xffffffff), - "PathIsValidCharW failed: 0x%02x got 0x%08x expected 0x%08x\n", - c, (DWORD)ret, SHELL_charclass[c] ); - } - - for (c = 0x007f; c <= 0xffff; c++) - { - ret = pPathIsValidCharW( c, ~0U ); - ok ( ret == 0x00000100, - "PathIsValidCharW failed: 0x%02x got 0x%08x expected 0x00000100\n", - c, (DWORD)ret ); - if (ret != 0x00000100) - { - if(++err_count > 100 ) { - trace("skipping rest of PathIsValidCharW tests " - "because of the current number of errors\n"); - break; - } - } - } -} - -static void test_PathMakePretty(void) -{ - char buff[MAX_PATH]; - - ok (PathMakePrettyA(NULL) == FALSE, "PathMakePretty: NULL path succeeded\n"); - buff[0] = '\0'; - ok (PathMakePrettyA(buff) == TRUE, "PathMakePretty: Empty path failed\n"); - - strcpy(buff, "C:\\A LONG FILE NAME WITH \\SPACES.TXT"); - ok (PathMakePrettyA(buff) == TRUE, "PathMakePretty: Long UC name failed\n"); - ok (strcmp(buff, "C:\\a long file name with \\spaces.txt") == 0, - "PathMakePretty: Long UC name not changed\n"); - - strcpy(buff, "C:\\A LONG FILE NAME WITH \\MixedCase.TXT"); - ok (PathMakePrettyA(buff) == FALSE, "PathMakePretty: Long MC name succeeded\n"); - ok (strcmp(buff, "C:\\A LONG FILE NAME WITH \\MixedCase.TXT") == 0, - "PathMakePretty: Failed but modified path\n"); - - strcpy(buff, "TEST"); - ok (PathMakePrettyA(buff) == TRUE, "PathMakePretty: Short name failed\n"); - ok (strcmp(buff, "Test") == 0, "PathMakePretty: 1st char lowercased %s\n", buff); -} - -static void test_PathMatchSpec(void) -{ - static const char file[] = "c:\\foo\\bar\\filename.ext"; - static const char spec1[] = ".ext"; - static const char spec2[] = "*.ext"; - static const char spec3[] = "*.ext "; - static const char spec4[] = " *.ext"; - static const char spec5[] = "* .ext"; - static const char spec6[] = "*. ext"; - static const char spec7[] = "* . ext"; - static const char spec8[] = "*.e?t"; - static const char spec9[] = "filename.ext"; - static const char spec10[] = "*bar\\filename.ext"; - static const char spec11[] = " foo; *.ext"; - static const char spec12[] = "*.ext;*.bar"; - static const char spec13[] = "*bar*"; - - ok (PathMatchSpecA(file, spec1) == FALSE, "PathMatchSpec: Spec1 failed\n"); - ok (PathMatchSpecA(file, spec2) == TRUE, "PathMatchSpec: Spec2 failed\n"); - ok (PathMatchSpecA(file, spec3) == FALSE, "PathMatchSpec: Spec3 failed\n"); - ok (PathMatchSpecA(file, spec4) == TRUE, "PathMatchSpec: Spec4 failed\n"); - todo_wine ok (PathMatchSpecA(file, spec5) == TRUE, "PathMatchSpec: Spec5 failed\n"); - todo_wine ok (PathMatchSpecA(file, spec6) == TRUE, "PathMatchSpec: Spec6 failed\n"); - ok (PathMatchSpecA(file, spec7) == FALSE, "PathMatchSpec: Spec7 failed\n"); - ok (PathMatchSpecA(file, spec8) == TRUE, "PathMatchSpec: Spec8 failed\n"); - ok (PathMatchSpecA(file, spec9) == FALSE, "PathMatchSpec: Spec9 failed\n"); - ok (PathMatchSpecA(file, spec10) == TRUE, "PathMatchSpec: Spec10 failed\n"); - ok (PathMatchSpecA(file, spec11) == TRUE, "PathMatchSpec: Spec11 failed\n"); - ok (PathMatchSpecA(file, spec12) == TRUE, "PathMatchSpec: Spec12 failed\n"); - ok (PathMatchSpecA(file, spec13) == TRUE, "PathMatchSpec: Spec13 failed\n"); -} - -static void test_PathCombineW(void) -{ - LPWSTR wszString, wszString2; - WCHAR wbuf[MAX_PATH+1], wstr1[MAX_PATH] = {'C',':','\\',0}, wstr2[MAX_PATH]; - static const WCHAR expout[] = {'C',':','\\','A','A',0}; - int i; - - wszString2 = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); - - /* NULL test */ - wszString = pPathCombineW(NULL, NULL, NULL); - ok (wszString == NULL, "Expected a NULL return\n"); - - /* Some NULL */ - wszString2[0] = 'a'; - wszString = pPathCombineW(wszString2, NULL, NULL); - ok (wszString == NULL, "Expected a NULL return\n"); - ok (wszString2[0] == 0, "Destination string not empty\n"); - - HeapFree(GetProcessHeap(), 0, wszString2); - - /* overflow test */ - wstr2[0] = wstr2[1] = wstr2[2] = 'A'; - for (i=3; i - - - - . - clist.c - clsid.c - generated.c - istream.c - ordinal.c - path.c - shreg.c - string.c - url.c - testlist.c - wine - uuid - shlwapi - advapi32 - ole32 - oleaut32 - kernel32 - ntdll - - diff --git a/rostests/winetests/shlwapi/shreg.c b/rostests/winetests/shlwapi/shreg.c deleted file mode 100755 index 77a47e2240c..00000000000 --- a/rostests/winetests/shlwapi/shreg.c +++ /dev/null @@ -1,394 +0,0 @@ -/* Unit test suite for SHReg* functions - * - * Copyright 2002 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 - */ - -#include -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "winreg.h" -#include "winuser.h" -#include "shlwapi.h" - -/* Keys used for testing */ -#define REG_TEST_KEY "Software\\Wine\\Test" -#define REG_CURRENT_VERSION "Software\\Microsoft\\Windows\\CurrentVersion" - -static HMODULE hshlwapi; -typedef DWORD (WINAPI *SHCopyKeyA_func)(HKEY,LPCSTR,HKEY,DWORD); -static SHCopyKeyA_func pSHCopyKeyA; -typedef DWORD (WINAPI *SHRegGetPathA_func)(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD); -static SHRegGetPathA_func pSHRegGetPathA; - -static char sTestpath1[] = "%LONGSYSTEMVAR%\\subdir1"; -static char sTestpath2[] = "%FOO%\\subdir1"; - -static const char * sEnvvar1 = "bar"; -static const char * sEnvvar2 = "ImARatherLongButIndeedNeededString"; - -static char sExpTestpath1[MAX_PATH]; -static char sExpTestpath2[MAX_PATH]; -static DWORD nExpLen1; -static DWORD nExpLen2; - -static const char * sEmptyBuffer ="0123456789"; - -/* delete key and all its subkeys */ -static DWORD delete_key( HKEY hkey, LPCSTR parent, LPCSTR keyname ) -{ - HKEY parentKey; - DWORD ret; - - RegCloseKey(hkey); - - /* open the parent of the key to close */ - ret = RegOpenKeyExA( HKEY_CURRENT_USER, parent, 0, KEY_ALL_ACCESS, &parentKey); - if (ret != ERROR_SUCCESS) - return ret; - - ret = SHDeleteKeyA( parentKey, keyname ); - RegCloseKey(parentKey); - - return ret; -} - -static HKEY create_test_entries(void) -{ - HKEY hKey; - DWORD ret; - DWORD nExpectedLen1, nExpectedLen2; - - SetEnvironmentVariableA("LONGSYSTEMVAR", sEnvvar1); - SetEnvironmentVariableA("FOO", sEnvvar2); - - ret = RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_KEY, &hKey); - ok( ERROR_SUCCESS == ret, "RegCreateKeyA failed, ret=%u\n", ret); - - if (hKey) - { - ok(!RegSetValueExA(hKey,"Test1",0,REG_EXPAND_SZ, (LPBYTE) sTestpath1, strlen(sTestpath1)+1), "RegSetValueExA failed\n"); - ok(!RegSetValueExA(hKey,"Test2",0,REG_SZ, (LPBYTE) sTestpath1, strlen(sTestpath1)+1), "RegSetValueExA failed\n"); - ok(!RegSetValueExA(hKey,"Test3",0,REG_EXPAND_SZ, (LPBYTE) sTestpath2, strlen(sTestpath2)+1), "RegSetValueExA failed\n"); - } - - nExpLen1 = ExpandEnvironmentStringsA(sTestpath1, sExpTestpath1, sizeof(sExpTestpath1)); - nExpLen2 = ExpandEnvironmentStringsA(sTestpath2, sExpTestpath2, sizeof(sExpTestpath2)); - - nExpectedLen1 = strlen(sTestpath1) - strlen("%LONGSYSTEMVAR%") + strlen(sEnvvar1) + 1; - nExpectedLen2 = strlen(sTestpath2) - strlen("%FOO%") + strlen(sEnvvar2) + 1; - /* ExpandEnvironmentStringsA on NT4 returns 2x the correct result */ - trace("sExplen1 = (%d)\n", nExpLen1); - if (nExpectedLen1 != nExpLen1) - trace( "Expanding %s failed (expected %d) - known bug in NT4\n", sTestpath1, nExpectedLen1 ); - - trace("sExplen2 = (%d)\n", nExpLen2); - if (nExpectedLen2 != nExpLen2) - trace( "Expanding %s failed (expected %d) - known bug in NT4\n", sTestpath2, nExpectedLen2 ); - - /* Make sure we carry on with correct values */ - nExpLen1 = nExpectedLen1; - nExpLen2 = nExpectedLen2; - return hKey; -} - -static void test_SHGetValue(void) -{ - DWORD dwSize; - DWORD dwType; - DWORD dwRet; - char buf[MAX_PATH]; - - strcpy(buf, sEmptyBuffer); - dwSize = MAX_PATH; - dwType = -1; - dwRet = SHGetValueA(HKEY_CURRENT_USER, REG_TEST_KEY, "Test1", &dwType, buf, &dwSize); - ok( ERROR_SUCCESS == dwRet, "SHGetValueA failed, ret=%u\n", dwRet); - ok( 0 == strcmp(sExpTestpath1, buf), "Comparing of (%s) with (%s) failed\n", buf, sExpTestpath1); - ok( REG_SZ == dwType, "Expected REG_SZ, got (%u)\n", dwType); - - strcpy(buf, sEmptyBuffer); - dwSize = MAX_PATH; - dwType = -1; - dwRet = SHGetValueA(HKEY_CURRENT_USER, REG_TEST_KEY, "Test2", &dwType, buf, &dwSize); - ok( ERROR_SUCCESS == dwRet, "SHGetValueA failed, ret=%u\n", dwRet); - ok( 0 == strcmp(sTestpath1, buf) , "Comparing of (%s) with (%s) failed\n", buf, sTestpath1); - ok( REG_SZ == dwType , "Expected REG_SZ, got (%u)\n", dwType); -} - -static void test_SHGetRegPath(void) -{ - char buf[MAX_PATH]; - DWORD dwRet; - - if (!pSHRegGetPathA) - return; - - strcpy(buf, sEmptyBuffer); - dwRet = (*pSHRegGetPathA)(HKEY_CURRENT_USER, REG_TEST_KEY, "Test1", buf, 0); - ok( ERROR_SUCCESS == dwRet, "SHRegGetPathA failed, ret=%u\n", dwRet); - ok( 0 == strcmp(sExpTestpath1, buf) , "Comparing (%s) with (%s) failed\n", buf, sExpTestpath1); -} - -static void test_SHQUeryValueEx(void) -{ - HKEY hKey; - DWORD dwSize; - DWORD dwType; - char buf[MAX_PATH]; - DWORD dwRet; - const char * sTestedFunction = ""; - DWORD nUsedBuffer1,nUsedBuffer2; - - sTestedFunction = "RegOpenKeyExA"; - dwRet = RegOpenKeyExA(HKEY_CURRENT_USER, REG_TEST_KEY, 0, KEY_QUERY_VALUE, &hKey); - ok( ERROR_SUCCESS == dwRet, "%s failed, ret=%u\n", sTestedFunction, dwRet); - - /****** SHQueryValueExA ******/ - - sTestedFunction = "SHQueryValueExA"; - nUsedBuffer1 = max(strlen(sExpTestpath1)+1, strlen(sTestpath1)+1); - nUsedBuffer2 = max(strlen(sExpTestpath2)+1, strlen(sTestpath2)+1); - /* - * Case 1.1 All arguments are NULL - */ - dwRet = SHQueryValueExA( hKey, "Test1", NULL, NULL, NULL, NULL); - ok( ERROR_SUCCESS == dwRet, "%s failed, ret=%u\n", sTestedFunction, dwRet); - - /* - * Case 1.2 dwType is set - */ - dwType = -1; - dwRet = SHQueryValueExA( hKey, "Test1", NULL, &dwType, NULL, NULL); - ok( ERROR_SUCCESS == dwRet, "%s failed, ret=%u\n", sTestedFunction, dwRet); - ok( REG_SZ == dwType , "Expected REG_SZ, got (%u)\n", dwType); - - /* - * dwSize is set - * dwExpanded < dwUnExpanded - */ - dwSize = 6; - dwRet = SHQueryValueExA( hKey, "Test1", NULL, NULL, NULL, &dwSize); - ok( ERROR_SUCCESS == dwRet, "%s failed, ret=%u\n", sTestedFunction, dwRet); - ok( dwSize == nUsedBuffer1, "Buffer sizes (%u) and (%u) are not equal\n", dwSize, nUsedBuffer1); - - /* - * dwExpanded > dwUnExpanded - */ - dwSize = 6; - dwRet = SHQueryValueExA( hKey, "Test3", NULL, NULL, NULL, &dwSize); - ok( ERROR_SUCCESS == dwRet, "%s failed, ret=%u\n", sTestedFunction, dwRet); - ok( dwSize >= nUsedBuffer2, "Buffer size (%u) should be >= (%u)\n", dwSize, nUsedBuffer2); - - /* - * Case 1 string shrinks during expanding - */ - strcpy(buf, sEmptyBuffer); - dwSize = 6; - dwType = -1; - dwRet = SHQueryValueExA( hKey, "Test1", NULL, &dwType, buf, &dwSize); - ok( ERROR_MORE_DATA == dwRet, "Expected ERROR_MORE_DATA, got (%u)\n", dwRet); - ok( 0 == strcmp(sEmptyBuffer, buf) , "Comparing (%s) with (%s) failed\n", buf, sEmptyBuffer); - ok( dwSize == nUsedBuffer1, "Buffer sizes (%u) and (%u) are not equal\n", dwSize, nUsedBuffer1); - ok( REG_SZ == dwType , "Expected REG_SZ, got (%u)\n", dwType); - - /* - * string grows during expanding - * dwSize is smaller than the size of the unexpanded string - */ - strcpy(buf, sEmptyBuffer); - dwSize = 6; - dwType = -1; - dwRet = SHQueryValueExA( hKey, "Test3", NULL, &dwType, buf, &dwSize); - ok( ERROR_MORE_DATA == dwRet, "Expected ERROR_MORE_DATA, got (%u)\n", dwRet); - ok( 0 == strcmp(sEmptyBuffer, buf) , "Comparing (%s) with (%s) failed\n", buf, sEmptyBuffer); - ok( dwSize >= nUsedBuffer2, "Buffer size (%u) should be >= (%u)\n", dwSize, nUsedBuffer2); - ok( REG_SZ == dwType , "Expected REG_SZ, got (%u)\n", dwType); - - /* - * string grows during expanding - * dwSize is larger than the size of the unexpanded string, but - * smaller than the part before the backslash. If the unexpanded - * string fits into the buffer, it can get cut when expanded. - */ - strcpy(buf, sEmptyBuffer); - dwSize = strlen(sEnvvar2) - 2; - dwType = -1; - dwRet = SHQueryValueExA( hKey, "Test3", NULL, &dwType, buf, &dwSize); - ok( ERROR_MORE_DATA == dwRet, "Expected ERROR_MORE_DATA, got (%u)\n", dwRet); - - todo_wine - { - ok( (0 == strcmp("", buf)) || (0 == strcmp(sTestpath2, buf)), - "Expected empty or unexpanded string (win98), got (%s)\n", buf); - } - - ok( dwSize >= nUsedBuffer2, "Buffer size (%u) should be >= (%u)\n", dwSize, nUsedBuffer2); - ok( REG_SZ == dwType , "Expected REG_SZ, got (%u)\n", dwType); - - /* - * string grows during expanding - * dwSize is larger than the size of the part before the backslash, - * but smaller than the expanded string. If the unexpanded string fits - * into the buffer, it can get cut when expanded. - */ - strcpy(buf, sEmptyBuffer); - dwSize = nExpLen2 - 4; - dwType = -1; - dwRet = SHQueryValueExA( hKey, "Test3", NULL, &dwType, buf, &dwSize); - ok( ERROR_MORE_DATA == dwRet, "Expected ERROR_MORE_DATA, got (%u)\n", dwRet); - - todo_wine - { - ok( (0 == strcmp("", buf)) || (0 == strcmp(sEnvvar2, buf)), - "Expected empty or first part of the string \"%s\", got \"%s\"\n", sEnvvar2, buf); - } - - ok( dwSize >= nUsedBuffer2, "Buffer size (%u) should be >= (%u)\n", dwSize, nUsedBuffer2); - ok( REG_SZ == dwType , "Expected REG_SZ, got (%u)\n", dwType); - - /* - * The buffer is NULL but the size is set - */ - strcpy(buf, sEmptyBuffer); - dwSize = 6; - dwType = -1; - dwRet = SHQueryValueExA( hKey, "Test3", NULL, &dwType, NULL, &dwSize); - ok( ERROR_SUCCESS == dwRet, "%s failed, ret=%u\n", sTestedFunction, dwRet); - ok( dwSize >= nUsedBuffer2, "Buffer size (%u) should be >= (%u)\n", dwSize, nUsedBuffer2); - ok( REG_SZ == dwType , "Expected REG_SZ, got (%u)\n", dwType); - - RegCloseKey(hKey); -} - -static void test_SHCopyKey(void) -{ - HKEY hKeySrc, hKeyDst; - DWORD dwRet; - - /* Delete existing destination sub keys */ - hKeyDst = NULL; - if (!RegOpenKeyA(HKEY_CURRENT_USER, REG_TEST_KEY "\\CopyDestination", &hKeyDst) && hKeyDst) - { - SHDeleteKeyA(hKeyDst, NULL); - RegCloseKey(hKeyDst); - } - - hKeyDst = NULL; - dwRet = RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_KEY "\\CopyDestination", &hKeyDst); - if (dwRet || !hKeyDst) - { - ok( 0, "Destination couldn't be created, RegCreateKeyA returned (%u)\n", dwRet); - return; - } - - hKeySrc = NULL; - dwRet = RegOpenKeyA(HKEY_LOCAL_MACHINE, REG_CURRENT_VERSION, &hKeySrc); - if (dwRet || !hKeySrc) - { - ok( 0, "Source couldn't be opened, RegOpenKeyA returned (%u)\n", dwRet); - return; - } - - - if (pSHCopyKeyA) - { - dwRet = (*pSHCopyKeyA)(hKeySrc, NULL, hKeyDst, 0); - ok ( ERROR_SUCCESS == dwRet, "Copy failed, ret=(%u)\n", dwRet); - } - - RegCloseKey(hKeySrc); - RegCloseKey(hKeyDst); - - /* Check we copied the sub keys, i.e. something that's on every windows system (including Wine) */ - hKeyDst = NULL; - dwRet = RegOpenKeyA(HKEY_CURRENT_USER, REG_TEST_KEY "\\CopyDestination\\Setup", &hKeyDst); - if (dwRet || !hKeyDst) - { - ok ( 0, "Copy couldn't be opened, RegOpenKeyA returned (%u)\n", dwRet); - return; - } - - /* And the we copied the values too */ - ok(!SHQueryValueExA(hKeyDst, "BootDir", NULL, NULL, NULL, NULL), "SHQueryValueExA failed\n"); - - RegCloseKey(hKeyDst); -} - -static void test_SHDeleteKey(void) -{ - HKEY hKeyTest, hKeyS; - DWORD dwRet; - int sysfail = 1; - - if (!RegOpenKeyA(HKEY_CURRENT_USER, REG_TEST_KEY, &hKeyTest)) - { - if (!RegCreateKey(hKeyTest, "ODBC", &hKeyS)) - { - HKEY hKeyO; - - if (!RegCreateKey(hKeyS, "ODBC.INI", &hKeyO)) - { - RegCloseKey (hKeyO); - - if (!RegCreateKey(hKeyS, "ODBCINST.INI", &hKeyO)) - { - RegCloseKey (hKeyO); - sysfail = 0; - } - } - RegCloseKey (hKeyS); - } - RegCloseKey (hKeyTest); - } - - if (!sysfail) - { - - dwRet = SHDeleteKeyA(HKEY_CURRENT_USER, REG_TEST_KEY "\\ODBC"); - ok ( ERROR_SUCCESS == dwRet, "SHDeleteKey failed, ret=(%u)\n", dwRet); - - dwRet = RegOpenKeyA(HKEY_CURRENT_USER, REG_TEST_KEY "\\ODBC", &hKeyS); - ok ( ERROR_FILE_NOT_FOUND == dwRet, "SHDeleteKey did not delete\n"); - - if (dwRet == ERROR_SUCCESS) - RegCloseKey (hKeyS); - } - else - ok( 0, "Could not set up SHDeleteKey test\n"); -} - -START_TEST(shreg) -{ - HKEY hkey = create_test_entries(); - - if (!hkey) return; - - hshlwapi = GetModuleHandleA("shlwapi.dll"); - pSHCopyKeyA=(SHCopyKeyA_func)GetProcAddress(hshlwapi,"SHCopyKeyA"); - pSHRegGetPathA=(SHRegGetPathA_func)GetProcAddress(hshlwapi,"SHRegGetPathA"); - test_SHGetValue(); - test_SHQUeryValueEx(); - test_SHGetRegPath(); - test_SHCopyKey(); - test_SHDeleteKey(); - delete_key( hkey, "Software\\Wine", "Test" ); -} diff --git a/rostests/winetests/shlwapi/string.c b/rostests/winetests/shlwapi/string.c deleted file mode 100755 index 79a645c2e71..00000000000 --- a/rostests/winetests/shlwapi/string.c +++ /dev/null @@ -1,962 +0,0 @@ -/* Unit test suite for SHLWAPI string 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 - */ - -#include - -#include "wine/test.h" -#include "winbase.h" -#include "winerror.h" -#include "winnls.h" -#define NO_SHLWAPI_REG -#define NO_SHLWAPI_PATH -#define NO_SHLWAPI_GDI -#define NO_SHLWAPI_STREAM -#include "shlwapi.h" -#include "shtypes.h" - -#define expect_eq(expr, val, type, fmt) do { \ - type ret = expr; \ - ok(ret == val, "Unexpected value of '" #expr "': " #fmt " instead of " #val "\n", ret); \ -} while (0); - -static BOOL (WINAPI *pIntlStrEqWorkerA)(BOOL,LPCSTR,LPCSTR,int); -static BOOL (WINAPI *pIntlStrEqWorkerW)(BOOL,LPCWSTR,LPCWSTR,int); -static DWORD (WINAPI *pSHAnsiToAnsi)(LPCSTR,LPSTR,int); -static DWORD (WINAPI *pSHUnicodeToUnicode)(LPCWSTR,LPWSTR,int); -static LPSTR (WINAPI *pStrCatBuffA)(LPSTR,LPCSTR,INT); -static LPWSTR (WINAPI *pStrCatBuffW)(LPWSTR,LPCWSTR,INT); -static LPSTR (WINAPI *pStrCpyNXA)(LPSTR,LPCSTR,int); -static LPWSTR (WINAPI *pStrCpyNXW)(LPWSTR,LPCWSTR,int); -static LPSTR (WINAPI *pStrFormatByteSize64A)(LONGLONG,LPSTR,UINT); -static LPSTR (WINAPI *pStrFormatKBSizeA)(LONGLONG,LPSTR,UINT); -static LPWSTR (WINAPI *pStrFormatKBSizeW)(LONGLONG,LPWSTR,UINT); -static BOOL (WINAPI *pStrIsIntlEqualA)(BOOL,LPCSTR,LPCSTR,int); -static BOOL (WINAPI *pStrIsIntlEqualW)(BOOL,LPCWSTR,LPCWSTR,int); -static HRESULT (WINAPI *pStrRetToBSTR)(STRRET*,void*,BSTR*); -static HRESULT (WINAPI *pStrRetToBufA)(STRRET*,LPCITEMIDLIST,LPSTR,UINT); -static HRESULT (WINAPI *pStrRetToBufW)(STRRET*,LPCITEMIDLIST,LPWSTR,UINT); -static INT (WINAPIV *pwnsprintfA)(LPSTR,INT,LPCSTR, ...); -static INT (WINAPIV *pwnsprintfW)(LPWSTR,INT,LPCWSTR, ...); - -static int strcmpW(const WCHAR *str1, const WCHAR *str2) -{ - while (*str1 && (*str1 == *str2)) { str1++; str2++; } - return *str1 - *str2; -} - -/* StrToInt/StrToIntEx results */ -typedef struct tagStrToIntResult -{ - const char* string; - int str_to_int; - int str_to_int_ex; - int str_to_int_hex; -} StrToIntResult; - -static const StrToIntResult StrToInt_results[] = { - { "1099", 1099, 1099, 1099 }, - { "+88987", 0, 88987, 88987 }, - { "012", 12, 12, 12 }, - { "-55", -55, -55, -55 }, - { "-0", 0, 0, 0 }, - { "0x44ff", 0, 0, 0x44ff }, - { "+0x44f4", 0, 0, 0x44f4 }, - { "-0x44fd", 0, 0, 0x44fd }, - { "+ 88987", 0, 0, 0 }, - { "- 55", 0, 0, 0 }, - { "- 0", 0, 0, 0 }, - { "+ 0x44f4", 0, 0, 0 }, - { "--0x44fd", 0, 0, 0 }, - { " 1999", 0, 1999, 1999 }, - { " +88987", 0, 88987, 88987 }, - { " 012", 0, 12, 12 }, - { " -55", 0, -55, -55 }, - { " 0x44ff", 0, 0, 0x44ff }, - { " +0x44f4", 0, 0, 0x44f4 }, - { " -0x44fd", 0, 0, 0x44fd }, - { NULL, 0, 0, 0 } -}; - -/* pStrFormatByteSize64/StrFormatKBSize results */ -typedef struct tagStrFormatSizeResult -{ - LONGLONG value; - const char* byte_size_64; - const char* kb_size; -} StrFormatSizeResult; - - -static const StrFormatSizeResult StrFormatSize_results[] = { - { -1023, "-1023 bytes", "0 KB"}, - { -24, "-24 bytes", "0 KB"}, - { 309, "309 bytes", "1 KB"}, - { 10191, "9.95 KB", "10 KB"}, - { 100353, "98.0 KB", "99 KB"}, - { 1022286, "998 KB", "999 KB"}, - { 1046862, "0.99 MB", "1,023 KB"}, - { 1048574619, "999 MB", "1,023,999 KB"}, - { 1073741775, "0.99 GB", "1,048,576 KB"}, - { ((LONGLONG)0x000000f9 << 32) | 0xfffff94e, "999 GB", "1,048,575,999 KB"}, - { ((LONGLONG)0x000000ff << 32) | 0xfffffa9b, "0.99 TB", "1,073,741,823 KB"}, - { ((LONGLONG)0x0003e7ff << 32) | 0xfffffa9b, "999 TB", "1,073,741,823,999 KB"}, - { ((LONGLONG)0x0003ffff << 32) | 0xfffffbe8, "0.99 PB", "1,099,511,627,775 KB"}, - { ((LONGLONG)0x0f9fffff << 32) | 0xfffffd35, "999 PB", "1,099,511,627,776,000 KB"}, - { ((LONGLONG)0x0fffffff << 32) | 0xfffffa9b, "0.99 EB", "1,125,899,906,842,623 KB"}, - { 0, NULL, NULL } -}; - -/* StrFormatByteSize64/StrFormatKBSize results */ -typedef struct tagStrFromTimeIntervalResult -{ - DWORD ms; - int digits; - const char* time_interval; -} StrFromTimeIntervalResult; - - -static const StrFromTimeIntervalResult StrFromTimeInterval_results[] = { - { 1, 1, " 0 sec" }, - { 1, 2, " 0 sec" }, - { 1, 3, " 0 sec" }, - { 1, 4, " 0 sec" }, - { 1, 5, " 0 sec" }, - { 1, 6, " 0 sec" }, - { 1, 7, " 0 sec" }, - - { 1000000, 1, " 10 min" }, - { 1000000, 2, " 16 min" }, - { 1000000, 3, " 16 min 40 sec" }, - { 1000000, 4, " 16 min 40 sec" }, - { 1000000, 5, " 16 min 40 sec" }, - { 1000000, 6, " 16 min 40 sec" }, - { 1000000, 7, " 16 min 40 sec" }, - - { 1999999, 1, " 30 min" }, - { 1999999, 2, " 33 min" }, - { 1999999, 3, " 33 min 20 sec" }, - { 1999999, 4, " 33 min 20 sec" }, - { 1999999, 5, " 33 min 20 sec" }, - { 1999999, 6, " 33 min 20 sec" }, - { 1999999, 7, " 33 min 20 sec" }, - - { 3999997, 1, " 1 hr" }, - { 3999997, 2, " 1 hr 6 min" }, - { 3999997, 3, " 1 hr 6 min 40 sec" }, - { 3999997, 4, " 1 hr 6 min 40 sec" }, - { 3999997, 5, " 1 hr 6 min 40 sec" }, - { 3999997, 6, " 1 hr 6 min 40 sec" }, - { 3999997, 7, " 1 hr 6 min 40 sec" }, - - { 149999851, 7, " 41 hr 40 min 0 sec" }, - { 150999850, 1, " 40 hr" }, - { 150999850, 2, " 41 hr" }, - { 150999850, 3, " 41 hr 50 min" }, - { 150999850, 4, " 41 hr 56 min" }, - { 150999850, 5, " 41 hr 56 min 40 sec" }, - { 150999850, 6, " 41 hr 56 min 40 sec" }, - { 150999850, 7, " 41 hr 56 min 40 sec" }, - - { 493999507, 1, " 100 hr" }, - { 493999507, 2, " 130 hr" }, - { 493999507, 3, " 137 hr" }, - { 493999507, 4, " 137 hr 10 min" }, - { 493999507, 5, " 137 hr 13 min" }, - { 493999507, 6, " 137 hr 13 min 20 sec" }, - { 493999507, 7, " 137 hr 13 min 20 sec" }, - - { 0, 0, NULL } -}; - -static void test_StrChrA(void) -{ - char string[129]; - WORD count; - - /* this test crashes on win2k SP4 */ - /*ok(!StrChrA(NULL,'\0'), "found a character in a NULL string!\n");*/ - - for (count = 32; count < 128; count++) - string[count] = (char)count; - string[128] = '\0'; - - for (count = 32; count < 128; count++) - { - LPSTR result = StrChrA(string+32, count); - ok(result - string == count, - "found char '%c' in wrong place: got %d, expected %d\n", - count, result - string, count); - } - - for (count = 32; count < 128; count++) - { - LPSTR result = StrChrA(string+count+1, count); - ok(!result, "found char '%c' not in the string\n", count); - } -} - -static void test_StrChrW(void) -{ - WCHAR string[16385]; - WORD count; - - /* this test crashes on win2k SP4 */ - /*ok(!StrChrW(NULL,'\0'), "found a character in a NULL string!\n");*/ - - for (count = 32; count < 16384; count++) - string[count] = count; - string[16384] = '\0'; - - for (count = 32; count < 16384; count++) - { - LPWSTR result = StrChrW(string+32, count); - ok((result - string) == count, "found char %d in wrong place\n", count); - } - - for (count = 32; count < 16384; count++) - { - LPWSTR result = StrChrW(string+count+1, count); - ok(!result, "found char not in the string\n"); - } -} - -static void test_StrChrIA(void) -{ - char string[129]; - WORD count; - - /* this test crashes on win2k SP4 */ - /*ok(!StrChrIA(NULL,'\0'), "found a character in a NULL string!\n");*/ - - for (count = 32; count < 128; count++) - string[count] = (char)count; - string[128] = '\0'; - - for (count = 'A'; count <= 'X'; count++) - { - LPSTR result = StrChrIA(string+32, count); - - ok(result - string == count, "found char '%c' in wrong place\n", count); - ok(StrChrIA(result, count)!=NULL, "didn't find lowercase '%c'\n", count); - } - - for (count = 'a'; count < 'z'; count++) - { - LPSTR result = StrChrIA(string+count+1, count); - ok(!result, "found char not in the string\n"); - } -} - -static void test_StrChrIW(void) -{ - WCHAR string[129]; - WORD count; - - /* this test crashes on win2k SP4 */ - /*ok(!StrChrIA(NULL,'\0'), "found a character in a NULL string!\n");*/ - - for (count = 32; count < 128; count++) - string[count] = count; - string[128] = '\0'; - - for (count = 'A'; count <= 'X'; count++) - { - LPWSTR result = StrChrIW(string+32, count); - - ok(result - string == count, "found char '%c' in wrong place\n", count); - ok(StrChrIW(result, count)!=NULL, "didn't find lowercase '%c'\n", count); - } - - for (count = 'a'; count < 'z'; count++) - { - LPWSTR result = StrChrIW(string+count+1, count); - ok(!result, "found char not in the string\n"); - } -} - -static void test_StrRChrA(void) -{ - char string[129]; - WORD count; - - /* this test crashes on win2k SP4 */ - /*ok(!StrRChrA(NULL, NULL,'\0'), "found a character in a NULL string!\n");*/ - - for (count = 32; count < 128; count++) - string[count] = (char)count; - string[128] = '\0'; - - for (count = 32; count < 128; count++) - { - LPSTR result = StrRChrA(string+32, NULL, count); - ok(result - string == count, "found char %d in wrong place\n", count); - } - - for (count = 32; count < 128; count++) - { - LPSTR result = StrRChrA(string+count+1, NULL, count); - ok(!result, "found char not in the string\n"); - } - - for (count = 32; count < 128; count++) - { - LPSTR result = StrRChrA(string+count+1, string + 127, count); - ok(!result, "found char not in the string\n"); - } -} - -static void test_StrRChrW(void) -{ - WCHAR string[129]; - WORD count; - - /* this test crashes on win2k SP4 */ - /*ok(!StrRChrW(NULL, NULL,'\0'), "found a character in a NULL string!\n");*/ - - for (count = 32; count < 128; count++) - string[count] = count; - string[128] = '\0'; - - for (count = 32; count < 128; count++) - { - LPWSTR result = StrRChrW(string+32, NULL, count); - ok(result - string == count, - "found char %d in wrong place: got %d, expected %d\n", - count, result - string, count); - } - - for (count = 32; count < 128; count++) - { - LPWSTR result = StrRChrW(string+count+1, NULL, count); - ok(!result, "found char %d not in the string\n", count); - } - - for (count = 32; count < 128; count++) - { - LPWSTR result = StrRChrW(string+count+1, string + 127, count); - ok(!result, "found char %d not in the string\n", count); - } -} - -static void test_StrCpyW(void) -{ - WCHAR szSrc[256]; - WCHAR szBuff[256]; - const StrFormatSizeResult* result = StrFormatSize_results; - - - while(result->value) - { - MultiByteToWideChar(0,0,result->byte_size_64,-1,szSrc,sizeof(szSrc)/sizeof(WCHAR)); - - StrCpyW(szBuff, szSrc); - ok(!StrCmpW(szSrc, szBuff), "Copied string %s wrong\n", result->byte_size_64); - result++; - } -} - - -static void test_StrToIntA(void) -{ - const StrToIntResult *result = StrToInt_results; - int return_val; - - while (result->string) - { - return_val = StrToIntA(result->string); - ok(return_val == result->str_to_int, "converted '%s' wrong (%d)\n", - result->string, return_val); - result++; - } -} - -static void test_StrToIntW(void) -{ - WCHAR szBuff[256]; - const StrToIntResult *result = StrToInt_results; - int return_val; - - while (result->string) - { - MultiByteToWideChar(0,0,result->string,-1,szBuff,sizeof(szBuff)/sizeof(WCHAR)); - return_val = StrToIntW(szBuff); - ok(return_val == result->str_to_int, "converted '%s' wrong (%d)\n", - result->string, return_val); - result++; - } -} - -static void test_StrToIntExA(void) -{ - const StrToIntResult *result = StrToInt_results; - int return_val; - BOOL bRet; - - while (result->string) - { - return_val = -1; - bRet = StrToIntExA(result->string,0,&return_val); - ok(!bRet || return_val != -1, "No result returned from '%s'\n", - result->string); - if (bRet) - ok(return_val == result->str_to_int_ex, "converted '%s' wrong (%d)\n", - result->string, return_val); - result++; - } - - result = StrToInt_results; - while (result->string) - { - return_val = -1; - bRet = StrToIntExA(result->string,STIF_SUPPORT_HEX,&return_val); - ok(!bRet || return_val != -1, "No result returned from '%s'\n", - result->string); - if (bRet) - ok(return_val == result->str_to_int_hex, "converted '%s' wrong (%d)\n", - result->string, return_val); - result++; - } -} - -static void test_StrToIntExW(void) -{ - WCHAR szBuff[256]; - const StrToIntResult *result = StrToInt_results; - int return_val; - BOOL bRet; - - while (result->string) - { - return_val = -1; - MultiByteToWideChar(0,0,result->string,-1,szBuff,sizeof(szBuff)/sizeof(WCHAR)); - bRet = StrToIntExW(szBuff, 0, &return_val); - ok(!bRet || return_val != -1, "No result returned from '%s'\n", - result->string); - if (bRet) - ok(return_val == result->str_to_int_ex, "converted '%s' wrong (%d)\n", - result->string, return_val); - result++; - } - - result = StrToInt_results; - while (result->string) - { - return_val = -1; - MultiByteToWideChar(0,0,result->string,-1,szBuff,sizeof(szBuff)/sizeof(WCHAR)); - bRet = StrToIntExW(szBuff, STIF_SUPPORT_HEX, &return_val); - ok(!bRet || return_val != -1, "No result returned from '%s'\n", - result->string); - if (bRet) - ok(return_val == result->str_to_int_hex, "converted '%s' wrong (%d)\n", - result->string, return_val); - result++; - } -} - -static void test_StrDupA(void) -{ - LPSTR lpszStr; - const StrFormatSizeResult* result = StrFormatSize_results; - - while(result->value) - { - lpszStr = StrDupA(result->byte_size_64); - - ok(lpszStr != NULL, "Dup failed\n"); - if (lpszStr) - { - ok(!strcmp(result->byte_size_64, lpszStr), "Copied string wrong\n"); - LocalFree((HLOCAL)lpszStr); - } - result++; - } - - /* Later versions of shlwapi return NULL for this, but earlier versions - * returned an empty string (as Wine does). - */ - lpszStr = StrDupA(NULL); - ok(lpszStr == NULL || *lpszStr == '\0', "NULL string returned %p\n", lpszStr); - LocalFree((HLOCAL)lpszStr); -} - -static void test_StrFormatByteSize64A(void) -{ - char szBuff[256]; - const StrFormatSizeResult* result = StrFormatSize_results; - - if (!pStrFormatByteSize64A) - { - skip("StrFormatByteSize64A() is not available. Tests skipped\n"); - return; - } - - while(result->value) - { - pStrFormatByteSize64A(result->value, szBuff, 256); - - ok(!strcmp(result->byte_size_64, szBuff), - "Formatted %x%08x wrong: got %s, expected %s\n", - (LONG)(result->value >> 32), (LONG)result->value, szBuff, result->byte_size_64); - - result++; - } -} - -static void test_StrFormatKBSizeW(void) -{ - WCHAR szBuffW[256]; - char szBuff[256]; - const StrFormatSizeResult* result = StrFormatSize_results; - - if (!pStrFormatKBSizeW) - { - skip("StrFormatKBSizeW() is not available. Tests skipped\n"); - return; - } - - while(result->value) - { - pStrFormatKBSizeW(result->value, szBuffW, 256); - WideCharToMultiByte(0,0,szBuffW,-1,szBuff,sizeof(szBuff)/sizeof(WCHAR),0,0); - ok(!strcmp(result->kb_size, szBuff), - "Formatted %x%08x wrong: got %s, expected %s\n", - (LONG)(result->value >> 32), (LONG)result->value, szBuff, result->kb_size); - result++; - } -} - -static void test_StrFormatKBSizeA(void) -{ - char szBuff[256]; - const StrFormatSizeResult* result = StrFormatSize_results; - - if (!pStrFormatKBSizeA) - { - skip("StrFormatKBSizeA() is not available. Tests skipped\n"); - return; - } - - while(result->value) - { - pStrFormatKBSizeA(result->value, szBuff, 256); - - ok(!strcmp(result->kb_size, szBuff), - "Formatted %x%08x wrong: got %s, expected %s\n", - (LONG)(result->value >> 32), (LONG)result->value, szBuff, result->kb_size); - result++; - } -} - -static void test_StrFromTimeIntervalA(void) -{ - char szBuff[256]; - const StrFromTimeIntervalResult* result = StrFromTimeInterval_results; - - while(result->ms) - { - StrFromTimeIntervalA(szBuff, 256, result->ms, result->digits); - - ok(!strcmp(result->time_interval, szBuff), "Formatted %d %d wrong\n", - result->ms, result->digits); - result++; - } -} - -static void test_StrCmpA(void) -{ - static const char str1[] = {'a','b','c','d','e','f'}; - static const char str2[] = {'a','B','c','d','e','f'}; - ok(0 != StrCmpNA(str1, str2, 6), "StrCmpNA is case-insensitive\n"); - ok(0 == StrCmpNIA(str1, str2, 6), "StrCmpNIA is case-sensitive\n"); - ok(!ChrCmpIA('a', 'a'), "ChrCmpIA doesn't work at all!\n"); - ok(!ChrCmpIA('b', 'B'), "ChrCmpIA is not case-insensitive\n"); - ok(ChrCmpIA('a', 'z'), "ChrCmpIA believes that a == z!\n"); - - if (pStrIsIntlEqualA) - { - ok(pStrIsIntlEqualA(FALSE, str1, str2, 5), "StrIsIntlEqualA(FALSE,...) isn't case-insensitive\n"); - ok(!pStrIsIntlEqualA(TRUE, str1, str2, 5), "StrIsIntlEqualA(TRUE,...) isn't case-sensitive\n"); - } - else - skip("StrIsIntlEqualA() is not available. Tests skipped\n"); - - if (pIntlStrEqWorkerA) - { - ok(pIntlStrEqWorkerA(FALSE, str1, str2, 5), "IntlStrEqWorkerA(FALSE,...) isn't case-insensitive\n"); - ok(!pIntlStrEqWorkerA(TRUE, str1, str2, 5), "pIntlStrEqWorkerA(TRUE,...) isn't case-sensitive\n"); - } - else - skip("IntlStrEqWorkerA() is not available. Tests skipped\n"); -} - -static void test_StrCmpW(void) -{ - static const WCHAR str1[] = {'a','b','c','d','e','f'}; - static const WCHAR str2[] = {'a','B','c','d','e','f'}; - ok(0 != StrCmpNW(str1, str2, 5), "StrCmpNW is case-insensitive\n"); - ok(0 == StrCmpNIW(str1, str2, 5), "StrCmpNIW is case-sensitive\n"); - ok(!ChrCmpIW('a', 'a'), "ChrCmpIW doesn't work at all!\n"); - ok(!ChrCmpIW('b', 'B'), "ChrCmpIW is not case-insensitive\n"); - ok(ChrCmpIW('a', 'z'), "ChrCmpIW believes that a == z!\n"); - - if (pStrIsIntlEqualW) - { - ok(pStrIsIntlEqualW(FALSE, str1, str2, 5), "StrIsIntlEqualW(FALSE,...) isn't case-insensitive\n"); - ok(!pStrIsIntlEqualW(TRUE, str1, str2, 5), "StrIsIntlEqualW(TRUE,...) isn't case-sensitive\n"); - } - else - skip("StrIsIntlEqualW() is not available. Tests skipped\n"); - - if (pIntlStrEqWorkerW) - { - ok(pIntlStrEqWorkerW(FALSE, str1, str2, 5), "IntlStrEqWorkerW(FALSE,...) isn't case-insensitive\n"); - ok(!pIntlStrEqWorkerW(TRUE, str1, str2, 5), "IntlStrEqWorkerW(TRUE,...) isn't case-sensitive\n"); - } - else - skip("IntlStrEqWorkerW() is not available. Tests skipped\n"); -} - -static WCHAR *CoDupStrW(const char* src) -{ - INT len = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0); - WCHAR* szTemp = CoTaskMemAlloc(len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, src, -1, szTemp, len); - return szTemp; -} - -static void test_StrRetToBSTR(void) -{ - static const WCHAR szTestW[] = { 'T','e','s','t','\0' }; - ITEMIDLIST iidl[10]; - BSTR bstr; - STRRET strret; - HRESULT ret; - - if (!pStrRetToBSTR) - { - skip("StrRetToBSTR() is not available. Tests skipped\n"); - return; - } - - strret.uType = STRRET_WSTR; - U(strret).pOleStr = CoDupStrW("Test"); - bstr = 0; - ret = pStrRetToBSTR(&strret, NULL, &bstr); - ok(ret == S_OK && bstr && !strcmpW(bstr, szTestW), - "STRRET_WSTR: dup failed, ret=0x%08x, bstr %p\n", ret, bstr); - if (bstr) - SysFreeString(bstr); - - strret.uType = STRRET_CSTR; - lstrcpyA(U(strret).cStr, "Test"); - ret = pStrRetToBSTR(&strret, NULL, &bstr); - ok(ret == S_OK && bstr && !strcmpW(bstr, szTestW), - "STRRET_CSTR: dup failed, ret=0x%08x, bstr %p\n", ret, bstr); - if (bstr) - SysFreeString(bstr); - - strret.uType = STRRET_OFFSET; - U(strret).uOffset = 1; - strcpy((char*)&iidl, " Test"); - ret = pStrRetToBSTR(&strret, iidl, &bstr); - ok(ret == S_OK && bstr && !strcmpW(bstr, szTestW), - "STRRET_OFFSET: dup failed, ret=0x%08x, bstr %p\n", ret, bstr); - if (bstr) - SysFreeString(bstr); - - /* Native crashes if str is NULL */ -} - -static void test_StrCpyNXA(void) -{ - LPCSTR lpSrc = "hello"; - LPSTR lpszRes; - char dest[8]; - - if (!pStrCpyNXA) - { - skip("StrCpyNXA() is not available. Tests skipped\n"); - return; - } - - memset(dest, '\n', sizeof(dest)); - lpszRes = pStrCpyNXA(dest, lpSrc, sizeof(dest)/sizeof(dest[0])); - ok(lpszRes == dest + 5 && !memcmp(dest, "hello\0\n\n", sizeof(dest)), - "StrCpyNXA: expected %p, \"hello\\0\\n\\n\", got %p, \"%d,%d,%d,%d,%d,%d,%d,%d\"\n", - dest + 5, lpszRes, dest[0], dest[1], dest[2], dest[3], dest[4], dest[5], dest[6], dest[7]); -} - -static void test_StrCpyNXW(void) -{ - static const WCHAR lpInit[] = { '\n','\n','\n','\n','\n','\n','\n','\n' }; - static const WCHAR lpSrc[] = { 'h','e','l','l','o','\0' }; - static const WCHAR lpRes[] = { 'h','e','l','l','o','\0','\n','\n' }; - LPWSTR lpszRes; - WCHAR dest[8]; - - if (!pStrCpyNXW) - { - skip("StrCpyNXW() is not available. Tests skipped\n"); - return; - } - - memcpy(dest, lpInit, sizeof(lpInit)); - lpszRes = pStrCpyNXW(dest, lpSrc, sizeof(dest)/sizeof(dest[0])); - ok(lpszRes == dest + 5 && !memcmp(dest, lpRes, sizeof(dest)), - "StrCpyNXW: expected %p, \"hello\\0\\n\\n\", got %p, \"%d,%d,%d,%d,%d,%d,%d,%d\"\n", - dest + 5, lpszRes, dest[0], dest[1], dest[2], dest[3], dest[4], dest[5], dest[6], dest[7]); -} - -#define check_strrstri(type, str, pos, needle, exp) \ - ret##type = StrRStrI##type(str, str+pos, needle); \ - ok(ret##type == (exp), "Type " #type ", expected %p but got %p (string base %p)\n", \ - (exp), ret##type, str); - -static void test_StrRStrI(void) -{ - static const CHAR szTest[] = "yAxxxxAy"; - static const CHAR szTest2[] = "ABABABAB"; - static const WCHAR wszTest[] = {'y','A','x','x','x','x','A','y',0}; - static const WCHAR wszTest2[] = {'A','B','A','B','A','B','A','B',0}; - - static const WCHAR wszPattern1[] = {'A',0}; - static const WCHAR wszPattern2[] = {'a','X',0}; - static const WCHAR wszPattern3[] = {'A','y',0}; - static const WCHAR wszPattern4[] = {'a','b',0}; - LPWSTR retW; - LPSTR retA; - - check_strrstri(A, szTest, 4, "A", szTest+1); - check_strrstri(A, szTest, 4, "aX", szTest+1); - check_strrstri(A, szTest, 4, "Ay", NULL); - check_strrstri(W, wszTest, 4, wszPattern1, wszTest+1); - check_strrstri(W, wszTest, 4, wszPattern2, wszTest+1); - check_strrstri(W, wszTest, 4, wszPattern3, NULL); - - check_strrstri(A, szTest2, 4, "ab", szTest2+2); - check_strrstri(A, szTest2, 3, "ab", szTest2+2); - check_strrstri(A, szTest2, 2, "ab", szTest2); - check_strrstri(A, szTest2, 1, "ab", szTest2); - check_strrstri(A, szTest2, 0, "ab", NULL); - check_strrstri(W, wszTest2, 4, wszPattern4, wszTest2+2); - check_strrstri(W, wszTest2, 3, wszPattern4, wszTest2+2); - check_strrstri(W, wszTest2, 2, wszPattern4, wszTest2); - check_strrstri(W, wszTest2, 1, wszPattern4, wszTest2); - check_strrstri(W, wszTest2, 0, wszPattern4, NULL); - -} - -static void test_SHAnsiToAnsi(void) -{ - char dest[8]; - DWORD dwRet; - - if (!pSHAnsiToAnsi) - { - skip("SHAnsiToAnsi() is not available. Tests skipped\n"); - return; - } - - memset(dest, '\n', sizeof(dest)); - dwRet = pSHAnsiToAnsi("hello", dest, sizeof(dest)/sizeof(dest[0])); - ok(dwRet == 6 && !memcmp(dest, "hello\0\n\n", sizeof(dest)), - "SHAnsiToAnsi: expected 6, \"hello\\0\\n\\n\", got %d, \"%d,%d,%d,%d,%d,%d,%d,%d\"\n", - dwRet, dest[0], dest[1], dest[2], dest[3], dest[4], dest[5], dest[6], dest[7]); -} - -static void test_SHUnicodeToUnicode(void) -{ - static const WCHAR lpInit[] = { '\n','\n','\n','\n','\n','\n','\n','\n' }; - static const WCHAR lpSrc[] = { 'h','e','l','l','o','\0' }; - static const WCHAR lpRes[] = { 'h','e','l','l','o','\0','\n','\n' }; - WCHAR dest[8]; - DWORD dwRet; - - if (!pSHUnicodeToUnicode) - { - skip("SHUnicodeToUnicode() is not available. Tests skipped\n"); - return; - } - - memcpy(dest, lpInit, sizeof(lpInit)); - dwRet = pSHUnicodeToUnicode(lpSrc, dest, sizeof(dest)/sizeof(dest[0])); - ok(dwRet == 6 && !memcmp(dest, lpRes, sizeof(dest)), - "SHUnicodeToUnicode: expected 6, \"hello\\0\\n\\n\", got %d, \"%d,%d,%d,%d,%d,%d,%d,%d\"\n", - dwRet, dest[0], dest[1], dest[2], dest[3], dest[4], dest[5], dest[6], dest[7]); -} - -static void test_StrXXX_overflows(void) -{ - CHAR str1[2*MAX_PATH+1], buf[2*MAX_PATH]; - WCHAR wstr1[2*MAX_PATH+1], wbuf[2*MAX_PATH]; - const WCHAR fmt[] = {'%','s',0}; - STRRET strret; - int ret; - int i; - - for (i=0; i<2*MAX_PATH; i++) - { - str1[i] = '0'+(i%10); - wstr1[i] = '0'+(i%10); - } - str1[2*MAX_PATH] = 0; - wstr1[2*MAX_PATH] = 0; - - memset(buf, 0xbf, sizeof(buf)); - expect_eq(StrCpyNA(buf, str1, 10), buf, PCHAR, "%p"); - expect_eq(buf[9], 0, CHAR, "%x"); - expect_eq(buf[10], '\xbf', CHAR, "%x"); - - if (pStrCatBuffA) - { - expect_eq(pStrCatBuffA(buf, str1, 100), buf, PCHAR, "%p"); - expect_eq(buf[99], 0, CHAR, "%x"); - expect_eq(buf[100], '\xbf', CHAR, "%x"); - } - else - skip("StrCatBuffA() is not available. Tests skipped\n"); - - memset(wbuf, 0xbf, sizeof(wbuf)); - expect_eq(StrCpyNW(wbuf, wstr1, 10), wbuf, PWCHAR, "%p"); - expect_eq(wbuf[9], 0, WCHAR, "%x"); - expect_eq(wbuf[10], (WCHAR)0xbfbf, WCHAR, "%x"); - - if (pStrCatBuffW) - { - expect_eq(pStrCatBuffW(wbuf, wstr1, 100), wbuf, PWCHAR, "%p"); - expect_eq(wbuf[99], 0, WCHAR, "%x"); - expect_eq(wbuf[100], (WCHAR)0xbfbf, WCHAR, "%x"); - } - else - skip("StrCatBuffW() is not available. Tests skipped\n"); - - if (pStrRetToBufW) - { - memset(wbuf, 0xbf, sizeof(wbuf)); - strret.uType = STRRET_WSTR; - U(strret).pOleStr = StrDupW(wstr1); - expect_eq(pStrRetToBufW(&strret, NULL, wbuf, 10), S_OK, HRESULT, "%x"); - expect_eq(wbuf[9], 0, WCHAR, "%x"); - expect_eq(wbuf[10], (WCHAR)0xbfbf, WCHAR, "%x"); - } - else - skip("StrRetToBufW() is not available. Tests skipped\n"); - - if (pStrRetToBufA) - { - memset(buf, 0xbf, sizeof(buf)); - strret.uType = STRRET_CSTR; - StrCpyN(U(strret).cStr, str1, MAX_PATH); - expect_eq(pStrRetToBufA(&strret, NULL, buf, 10), S_OK, HRESULT, "%x"); - expect_eq(buf[9], 0, CHAR, "%x"); - expect_eq(buf[10], (CHAR)0xbf, CHAR, "%x"); - } - else - skip("StrRetToBufA() is not available. Tests skipped\n"); - - if (pwnsprintfA) - { - memset(buf, 0xbf, sizeof(buf)); - ret = pwnsprintfA(buf, 10, "%s", str1); - todo_wine ok(ret == 9, "Unexpected wsnprintfA return %d, expected 9\n", ret); - expect_eq(buf[9], 0, CHAR, "%x"); - expect_eq(buf[10], (CHAR)0xbf, CHAR, "%x"); - } - else - skip("wnsprintfA() is not available. Tests skipped\n"); - - if (pwnsprintfW) - { - memset(wbuf, 0xbf, sizeof(wbuf)); - ret = pwnsprintfW(wbuf, 10, fmt, wstr1); - todo_wine ok(ret == 9, "Unexpected wsnprintfW return %d, expected 9\n", ret); - expect_eq(wbuf[9], 0, WCHAR, "%x"); - expect_eq(wbuf[10], (WCHAR)0xbfbf, WCHAR, "%x"); - } - else - skip("wnsprintfW() is not available. Tests skipped\n"); -} - -START_TEST(string) -{ - HMODULE hShlwapi; - TCHAR thousandDelim[8]; - TCHAR decimalDelim[8]; - CoInitialize(0); - - GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, thousandDelim, 8); - GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, decimalDelim, 8); - - hShlwapi = GetModuleHandleA("shlwapi"); - pIntlStrEqWorkerA = (void *)GetProcAddress(hShlwapi, "IntlStrEqWorkerA"); - pIntlStrEqWorkerW = (void *)GetProcAddress(hShlwapi, "IntlStrEqWorkerW"); - pSHAnsiToAnsi = (void *)GetProcAddress(hShlwapi, (LPSTR)345); - pSHUnicodeToUnicode = (void *)GetProcAddress(hShlwapi, (LPSTR)346); - pStrCatBuffA = (void *)GetProcAddress(hShlwapi, "StrCatBuffA"); - pStrCatBuffW = (void *)GetProcAddress(hShlwapi, "StrCatBuffW"); - pStrCpyNXA = (void *)GetProcAddress(hShlwapi, (LPSTR)399); - pStrCpyNXW = (void *)GetProcAddress(hShlwapi, (LPSTR)400); - pStrFormatByteSize64A = (void *)GetProcAddress(hShlwapi, "StrFormatByteSize64A"); - pStrFormatKBSizeA = (void *)GetProcAddress(hShlwapi, "StrFormatKBSizeA"); - pStrFormatKBSizeW = (void *)GetProcAddress(hShlwapi, "StrFormatKBSizeW"); - pStrIsIntlEqualA = (void *)GetProcAddress(hShlwapi, "StrIsIntlEqualA"); - pStrIsIntlEqualW = (void *)GetProcAddress(hShlwapi, "StrIsIntlEqualW"); - pStrRetToBSTR = (void *)GetProcAddress(hShlwapi, "StrRetToBSTR"); - pStrRetToBufA = (void *)GetProcAddress(hShlwapi, "StrRetToBufA"); - pStrRetToBufW = (void *)GetProcAddress(hShlwapi, "StrRetToBufW"); - pwnsprintfA = (void *)GetProcAddress(hShlwapi, "wnsprintfA"); - pwnsprintfW = (void *)GetProcAddress(hShlwapi, "wnsprintfW"); - - test_StrChrA(); - test_StrChrW(); - test_StrChrIA(); - test_StrChrIW(); - test_StrRChrA(); - test_StrRChrW(); - test_StrCpyW(); - test_StrToIntA(); - test_StrToIntW(); - test_StrToIntExA(); - test_StrToIntExW(); - test_StrDupA(); - if (lstrcmp(thousandDelim, ",")==0 && lstrcmp(decimalDelim, ".")==0) - { - /* these tests are locale-dependent */ - test_StrFormatByteSize64A(); - test_StrFormatKBSizeA(); - test_StrFormatKBSizeW(); - } - - /* language-dependent test */ - if (PRIMARYLANGID(GetUserDefaultLangID()) != LANG_ENGLISH) - trace("Skipping StrFromTimeInterval test for non English language\n"); - else - test_StrFromTimeIntervalA(); - - test_StrCmpA(); - test_StrCmpW(); - test_StrRetToBSTR(); - test_StrCpyNXA(); - test_StrCpyNXW(); - test_StrRStrI(); - test_SHAnsiToAnsi(); - test_SHUnicodeToUnicode(); - test_StrXXX_overflows(); - - CoUninitialize(); -} diff --git a/rostests/winetests/shlwapi/testlist.c b/rostests/winetests/shlwapi/testlist.c deleted file mode 100755 index dec5a258ff7..00000000000 --- a/rostests/winetests/shlwapi/testlist.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_clist(void); -extern void func_clsid(void); -extern void func_generated(void); -extern void func_istream(void); -extern void func_ordinal(void); -extern void func_path(void); -extern void func_shreg(void); -extern void func_string(void); -extern void func_url(void); - -const struct test winetest_testlist[] = -{ - { "clist", func_clist }, - { "clsid", func_clsid }, - { "generated", func_generated }, - { "istream", func_istream }, - { "ordinal", func_ordinal }, - { "path", func_path }, - { "shreg", func_shreg }, - { "string", func_string }, - { "url", func_url }, - { 0, 0 } -}; diff --git a/rostests/winetests/shlwapi/url.c b/rostests/winetests/shlwapi/url.c deleted file mode 100644 index 3b0633aa9bb..00000000000 --- a/rostests/winetests/shlwapi/url.c +++ /dev/null @@ -1,850 +0,0 @@ -/* Unit test suite for Path functions - * - * Copyright 2002 Matthew Mastracci - * Copyright 2007 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 - */ - -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "shlwapi.h" -#include "wininet.h" - -/* ################ */ -static HMODULE hShlwapi; -static HRESULT (WINAPI *pUrlCanonicalizeW)(LPCWSTR, LPWSTR, LPDWORD, DWORD); - -static const char* TEST_URL_1 = "http://www.winehq.org/tests?date=10/10/1923"; -static const char* TEST_URL_2 = "http://localhost:8080/tests%2e.html?date=Mon%2010/10/1923"; -static const char* TEST_URL_3 = "http://foo:bar@localhost:21/internal.php?query=x&return=y"; -static const WCHAR winehqW[] = {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/',0}; -static const CHAR winehqA[] = {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/',0}; - -/* ################ */ - -typedef struct _TEST_URL_CANONICALIZE { - const char *url; - DWORD flags; - HRESULT expectret; - const char *expecturl; - BOOL todo; -} TEST_URL_CANONICALIZE; - -static const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = { - {"http://www.winehq.org/tests/../tests/../..", 0, S_OK, "http://www.winehq.org/", TRUE}, - {"http://www.winehq.org/tests/../tests", 0, S_OK, "http://www.winehq.org/tests", FALSE}, - {"http://www.winehq.org/tests\n", URL_WININET_COMPATIBILITY|URL_ESCAPE_SPACES_ONLY|URL_ESCAPE_UNSAFE, S_OK, "http://www.winehq.org/tests", FALSE}, - {"http://www.winehq.org/tests\r", URL_WININET_COMPATIBILITY|URL_ESCAPE_SPACES_ONLY|URL_ESCAPE_UNSAFE, S_OK, "http://www.winehq.org/tests", FALSE}, - {"http://www.winehq.org/tests\r", 0, S_OK, "http://www.winehq.org/tests", FALSE}, - {"http://www.winehq.org/tests\r", URL_DONT_SIMPLIFY, S_OK, "http://www.winehq.org/tests", FALSE}, - {"http://www.winehq.org/tests/../tests/", 0, S_OK, "http://www.winehq.org/tests/", FALSE}, - {"http://www.winehq.org/tests/../tests/..", 0, S_OK, "http://www.winehq.org/", FALSE}, - {"http://www.winehq.org/tests/../tests/../", 0, S_OK, "http://www.winehq.org/", FALSE}, - {"http://www.winehq.org/tests/..", 0, S_OK, "http://www.winehq.org/", FALSE}, - {"http://www.winehq.org/tests/../", 0, S_OK, "http://www.winehq.org/", FALSE}, - {"http://www.winehq.org/tests/..?query=x&return=y", 0, S_OK, "http://www.winehq.org/?query=x&return=y", FALSE}, - {"http://www.winehq.org/tests/../?query=x&return=y", 0, S_OK, "http://www.winehq.org/?query=x&return=y", FALSE}, - {"http://www.winehq.org/tests/..#example", 0, S_OK, "http://www.winehq.org/#example", FALSE}, - {"http://www.winehq.org/tests/../#example", 0, S_OK, "http://www.winehq.org/#example", FALSE}, - {"http://www.winehq.org/tests\\../#example", 0, S_OK, "http://www.winehq.org/#example", FALSE}, - {"http://www.winehq.org/tests/..\\#example", 0, S_OK, "http://www.winehq.org/#example", FALSE}, - {"http://www.winehq.org\\tests/../#example", 0, S_OK, "http://www.winehq.org/#example", FALSE}, - {"http://www.winehq.org/tests/../#example", URL_DONT_SIMPLIFY, S_OK, "http://www.winehq.org/tests/../#example", FALSE}, - {"http://www.winehq.org/tests/foo bar", URL_ESCAPE_SPACES_ONLY| URL_DONT_ESCAPE_EXTRA_INFO , S_OK, "http://www.winehq.org/tests/foo%20bar", FALSE}, - {"http://www.winehq.org/tests/foo%20bar", URL_UNESCAPE , S_OK, "http://www.winehq.org/tests/foo bar", FALSE}, - {"file:///c:/tests/foo%20bar", URL_UNESCAPE , S_OK, "file:///c:/tests/foo bar", FALSE}, - {"file:///c:/tests\\foo%20bar", URL_UNESCAPE , S_OK, "file:///c:/tests/foo bar", FALSE}, - {"file:///c:/tests/foo%20bar", 0, S_OK, "file:///c:/tests/foo%20bar", FALSE}, - {"file:///c:/tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"file://localhost/c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"file://localhost\\c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"file://localhost\\\\c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"file://localhost\\c:\\tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"file://c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"file://c:/tests\\../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"file://c:/tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"file:///c://tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\\\tests\\foo bar", FALSE}, - {"file:///c:\\tests\\foo bar", 0, S_OK, "file:///c:/tests/foo bar", FALSE}, - {"file:///c:\\tests\\foo bar", URL_DONT_SIMPLIFY, S_OK, "file:///c:/tests/foo bar", FALSE}, - {"http://www.winehq.org/site/about", URL_FILE_USE_PATHURL, S_OK, "http://www.winehq.org/site/about", FALSE}, - {"file_://www.winehq.org/site/about", URL_FILE_USE_PATHURL, S_OK, "file_://www.winehq.org/site/about", FALSE}, - {"c:\\dir\\file", 0, S_OK, "file:///c:/dir/file", FALSE}, - {"file:///c:\\dir\\file", 0, S_OK, "file:///c:/dir/file", FALSE}, - {"c:dir\\file", 0, S_OK, "file:///c:dir/file", FALSE}, - {"c:\\tests\\foo bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE}, - {"c:\\tests\\foo bar", 0, S_OK, "file:///c:/tests/foo%20bar", FALSE}, - {"res:///c:/tests/foo%20bar", URL_UNESCAPE , S_OK, "res:///c:/tests/foo bar", FALSE}, - {"res:///c:/tests\\foo%20bar", URL_UNESCAPE , S_OK, "res:///c:/tests\\foo bar", TRUE}, - {"res:///c:/tests/foo%20bar", 0, S_OK, "res:///c:/tests/foo%20bar", FALSE}, - {"res:///c:/tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "res:///c:/tests/foo%20bar", TRUE}, - {"res://c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "res://c:/tests/foo%20bar", TRUE}, - {"res://c:/tests\\../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "res://c:/tests/foo%20bar", TRUE}, - {"res://c:/tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "res://c:/tests/foo%20bar", TRUE}, - {"res:///c://tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "res:///c://tests/foo%20bar", TRUE}, - {"res:///c:\\tests\\foo bar", 0, S_OK, "res:///c:\\tests\\foo bar", TRUE}, - {"res:///c:\\tests\\foo bar", URL_DONT_SIMPLIFY, S_OK, "res:///c:\\tests\\foo bar", TRUE}, - {"A", 0, S_OK, "A", FALSE}, - {"/uri-res/N2R?urn:sha1:B3K", URL_DONT_ESCAPE_EXTRA_INFO | URL_WININET_COMPATIBILITY /*0x82000000*/, S_OK, "/uri-res/N2R?urn:sha1:B3K", TRUE} /*LimeWire online installer calls this*/, - {"", 0, S_OK, "", FALSE} -}; - -/* ################ */ - -typedef struct _TEST_URL_ESCAPE { - const char *url; - DWORD flags; - DWORD expectescaped; - HRESULT expectret; - const char *expecturl; -} TEST_URL_ESCAPE; - -static const TEST_URL_ESCAPE TEST_ESCAPE[] = { - {"http://www.winehq.org/tests0", 0, 0, S_OK, "http://www.winehq.org/tests0"}, - {"http://www.winehq.org/tests1\n", 0, 0, S_OK, "http://www.winehq.org/tests1%0A"}, - {"http://www.winehq.org/tests2\r", 0, 0, S_OK, "http://www.winehq.org/tests2%0D"}, - {"http://www.winehq.org/tests3\r", URL_ESCAPE_SPACES_ONLY|URL_ESCAPE_UNSAFE, 0, S_OK, "http://www.winehq.org/tests3\r"}, - {"http://www.winehq.org/tests4\r", URL_ESCAPE_SPACES_ONLY, 0, S_OK, "http://www.winehq.org/tests4\r"}, - {"http://www.winehq.org/tests5\r", URL_WININET_COMPATIBILITY|URL_ESCAPE_SPACES_ONLY, 0, S_OK, "http://www.winehq.org/tests5\r"}, - {"/direct/swhelp/series6/6.2i_latestservicepack.dat\r", URL_ESCAPE_SPACES_ONLY, 0, S_OK, "/direct/swhelp/series6/6.2i_latestservicepack.dat\r"}, - - {"file://////foo/bar\\baz", 0, 0, S_OK, "file://foo/bar/baz"}, - {"file://///foo/bar\\baz", 0, 0, S_OK, "file://foo/bar/baz"}, - {"file:////foo/bar\\baz", 0, 0, S_OK, "file://foo/bar/baz"}, - {"file:///localhost/foo/bar\\baz", 0, 0, S_OK, "file:///localhost/foo/bar/baz"}, - {"file:///foo/bar\\baz", 0, 0, S_OK, "file:///foo/bar/baz"}, - {"file://loCalHost/foo/bar\\baz", 0, 0, S_OK, "file:///foo/bar/baz"}, - {"file://foo/bar\\baz", 0, 0, S_OK, "file://foo/bar/baz"}, - {"file:/localhost/foo/bar\\baz", 0, 0, S_OK, "file:///localhost/foo/bar/baz"}, - {"file:/foo/bar\\baz", 0, 0, S_OK, "file:///foo/bar/baz"}, - {"file:foo/bar\\baz", 0, 0, S_OK, "file:foo/bar/baz"}, - {"file:\\foo/bar\\baz", 0, 0, S_OK, "file:///foo/bar/baz"}, - {"file:\\\\foo/bar\\baz", 0, 0, S_OK, "file://foo/bar/baz"}, - {"file:\\\\\\foo/bar\\baz", 0, 0, S_OK, "file:///foo/bar/baz"}, - {"file:\\\\localhost\\foo/bar\\baz", 0, 0, S_OK, "file:///foo/bar/baz"}, - {"file:///f oo/b?a r\\baz", 0, 0, S_OK, "file:///f%20oo/b?a r\\baz"}, - {"file:///foo/b#a r\\baz", 0, 0, S_OK, "file:///foo/b%23a%20r/baz"}, - {"file:///f o^&`{}|][\"<>\\%o/b#a r\\baz", 0, 0, S_OK, "file:///f%20o%5E%26%60%7B%7D%7C%5D%5B%22%3C%3E/%o/b%23a%20r/baz"}, - {"file:///f o%o/b?a r\\b%az", URL_ESCAPE_PERCENT, 0, S_OK, "file:///f%20o%25o/b?a r\\b%az"}, - {"file:/foo/bar\\baz", URL_ESCAPE_SEGMENT_ONLY, 0, S_OK, "file:%2Ffoo%2Fbar%5Cbaz"}, - - {"foo/b%ar\\ba?z\\", URL_ESCAPE_SEGMENT_ONLY, 0, S_OK, "foo%2Fb%ar%5Cba%3Fz%5C"}, - {"foo/b%ar\\ba?z\\", URL_ESCAPE_PERCENT | URL_ESCAPE_SEGMENT_ONLY, 0, S_OK, "foo%2Fb%25ar%5Cba%3Fz%5C"}, - {"foo/bar\\ba?z\\", 0, 0, S_OK, "foo/bar%5Cba?z\\"}, - {"/foo/bar\\ba?z\\", 0, 0, S_OK, "/foo/bar%5Cba?z\\"}, - {"/foo/bar\\ba#z\\", 0, 0, S_OK, "/foo/bar%5Cba#z\\"}, - {"/foo/%5C", 0, 0, S_OK, "/foo/%5C"}, - {"/foo/%5C", URL_ESCAPE_PERCENT, 0, S_OK, "/foo/%255C"}, - - {"http://////foo/bar\\baz", 0, 0, S_OK, "http://////foo/bar/baz"}, - {"http://///foo/bar\\baz", 0, 0, S_OK, "http://///foo/bar/baz"}, - {"http:////foo/bar\\baz", 0, 0, S_OK, "http:////foo/bar/baz"}, - {"http:///foo/bar\\baz", 0, 0, S_OK, "http:///foo/bar/baz"}, - {"http://localhost/foo/bar\\baz", 0, 0, S_OK, "http://localhost/foo/bar/baz"}, - {"http://foo/bar\\baz", 0, 0, S_OK, "http://foo/bar/baz"}, - {"http:/foo/bar\\baz", 0, 0, S_OK, "http:/foo/bar/baz"}, - {"http:foo/bar\\ba?z\\", 0, 0, S_OK, "http:foo%2Fbar%2Fba?z\\"}, - {"http:foo/bar\\ba#z\\", 0, 0, S_OK, "http:foo%2Fbar%2Fba#z\\"}, - {"http:\\foo/bar\\baz", 0, 0, S_OK, "http:/foo/bar/baz"}, - {"http:\\\\foo/bar\\baz", 0, 0, S_OK, "http://foo/bar/baz"}, - {"http:\\\\\\foo/bar\\baz", 0, 0, S_OK, "http:///foo/bar/baz"}, - {"http:\\\\\\\\foo/bar\\baz", 0, 0, S_OK, "http:////foo/bar/baz"}, - {"http:/fo ?o/b ar\\baz", 0, 0, S_OK, "http:/fo%20?o/b ar\\baz"}, - {"http:fo ?o/b ar\\baz", 0, 0, S_OK, "http:fo%20?o/b ar\\baz"}, - {"http:/foo/bar\\baz", URL_ESCAPE_SEGMENT_ONLY, 0, S_OK, "http:%2Ffoo%2Fbar%5Cbaz"}, - - {"https://foo/bar\\baz", 0, 0, S_OK, "https://foo/bar/baz"}, - {"https:/foo/bar\\baz", 0, 0, S_OK, "https:/foo/bar/baz"}, - {"https:\\foo/bar\\baz", 0, 0, S_OK, "https:/foo/bar/baz"}, - - {"foo:////foo/bar\\baz", 0, 0, S_OK, "foo:////foo/bar%5Cbaz"}, - {"foo:///foo/bar\\baz", 0, 0, S_OK, "foo:///foo/bar%5Cbaz"}, - {"foo://localhost/foo/bar\\baz", 0, 0, S_OK, "foo://localhost/foo/bar%5Cbaz"}, - {"foo://foo/bar\\baz", 0, 0, S_OK, "foo://foo/bar%5Cbaz"}, - {"foo:/foo/bar\\baz", 0, 0, S_OK, "foo:/foo/bar%5Cbaz"}, - {"foo:foo/bar\\baz", 0, 0, S_OK, "foo:foo%2Fbar%5Cbaz"}, - {"foo:\\foo/bar\\baz", 0, 0, S_OK, "foo:%5Cfoo%2Fbar%5Cbaz"}, - {"foo:/foo/bar\\ba?\\z", 0, 0, S_OK, "foo:/foo/bar%5Cba?\\z"}, - {"foo:/foo/bar\\ba#\\z", 0, 0, S_OK, "foo:/foo/bar%5Cba#\\z"}, - - {"mailto:/fo/o@b\\%a?\\r.b#\\az", 0, 0, S_OK, "mailto:%2Ffo%2Fo@b%5C%a%3F%5Cr.b%23%5Caz"}, - {"mailto:fo/o@b\\%a?\\r.b#\\az", 0, 0, S_OK, "mailto:fo%2Fo@b%5C%a%3F%5Cr.b%23%5Caz"}, - {"mailto:fo/o@b\\%a?\\r.b#\\az", URL_ESCAPE_PERCENT, 0, S_OK, "mailto:fo%2Fo@b%5C%25a%3F%5Cr.b%23%5Caz"}, - - {"ftp:fo/o@bar.baz/foo/bar", 0, 0, S_OK, "ftp:fo%2Fo@bar.baz%2Ffoo%2Fbar"}, - {"ftp:/fo/o@bar.baz/foo/bar", 0, 0, S_OK, "ftp:/fo/o@bar.baz/foo/bar"}, - {"ftp://fo/o@bar.baz/fo?o\\bar", 0, 0, S_OK, "ftp://fo/o@bar.baz/fo?o\\bar"}, - {"ftp://fo/o@bar.baz/fo#o\\bar", 0, 0, S_OK, "ftp://fo/o@bar.baz/fo#o\\bar"}, - {"ftp://localhost/o@bar.baz/fo#o\\bar", 0, 0, S_OK, "ftp://localhost/o@bar.baz/fo#o\\bar"}, - {"ftp:///fo/o@bar.baz/foo/bar", 0, 0, S_OK, "ftp:///fo/o@bar.baz/foo/bar"}, - {"ftp:////fo/o@bar.baz/foo/bar", 0, 0, S_OK, "ftp:////fo/o@bar.baz/foo/bar"} -}; - -/* ################ */ - -typedef struct _TEST_URL_COMBINE { - const char *url1; - const char *url2; - DWORD flags; - HRESULT expectret; - const char *expecturl; -} TEST_URL_COMBINE; - -static const TEST_URL_COMBINE TEST_COMBINE[] = { - {"http://www.winehq.org/tests", "tests1", 0, S_OK, "http://www.winehq.org/tests1"}, - {"http://www.%77inehq.org/tests", "tests1", 0, S_OK, "http://www.%77inehq.org/tests1"}, - /*FIXME {"http://www.winehq.org/tests", "../tests2", 0, S_OK, "http://www.winehq.org/tests2"},*/ - {"http://www.winehq.org/tests/", "../tests3", 0, S_OK, "http://www.winehq.org/tests3"}, - {"http://www.winehq.org/tests/test1", "test2", 0, S_OK, "http://www.winehq.org/tests/test2"}, - {"http://www.winehq.org/tests/../tests", "tests4", 0, S_OK, "http://www.winehq.org/tests4"}, - {"http://www.winehq.org/tests/../tests/", "tests5", 0, S_OK, "http://www.winehq.org/tests/tests5"}, - {"http://www.winehq.org/tests/../tests/", "/tests6/..", 0, S_OK, "http://www.winehq.org/"}, - {"http://www.winehq.org/tests/../tests/..", "tests7/..", 0, S_OK, "http://www.winehq.org/"}, - {"http://www.winehq.org/tests/?query=x&return=y", "tests8", 0, S_OK, "http://www.winehq.org/tests/tests8"}, - {"http://www.winehq.org/tests/#example", "tests9", 0, S_OK, "http://www.winehq.org/tests/tests9"}, - {"http://www.winehq.org/tests/../tests/", "/tests10/..", URL_DONT_SIMPLIFY, S_OK, "http://www.winehq.org/tests10/.."}, - {"http://www.winehq.org/tests/../", "tests11", URL_DONT_SIMPLIFY, S_OK, "http://www.winehq.org/tests/../tests11"}, - {"file:///C:\\dir\\file.txt", "test.txt", 0, S_OK, "file:///C:/dir/test.txt"}, - {"C:\\winehq\\winehq.txt", "C:\\Test\\test.txt", 0, S_OK, "file:///C:/Test/test.txt"}, - {"http://www.winehq.org/test/", "test%20file.txt", 0, S_OK, "http://www.winehq.org/test/test%20file.txt"}, - {"http://www.winehq.org/test/", "test%20file.txt", URL_FILE_USE_PATHURL, S_OK, "http://www.winehq.org/test/test%20file.txt"}, - {"http://www.winehq.org%2ftest/", "test%20file.txt", URL_FILE_USE_PATHURL, S_OK, "http://www.winehq.org%2ftest/test%20file.txt"}, - {"xxx:@MSITStore:file.chm/file.html", "dir/file", 0, S_OK, "xxx:dir/file"}, - {"mk:@MSITStore:file.chm::/file.html", "/dir/file", 0, S_OK, "mk:@MSITStore:file.chm::/dir/file"}, - {"mk:@MSITStore:file.chm::/file.html", "mk:@MSITStore:file.chm::/dir/file", 0, S_OK, "mk:@MSITStore:file.chm::/dir/file"}, - {"foo:today", "foo:calendar", 0, S_OK, "foo:calendar"}, - {"foo:today", "bar:calendar", 0, S_OK, "bar:calendar"}, - {"foo:/today", "foo:calendar", 0, S_OK, "foo:/calendar"}, - {"foo:/today/", "foo:calendar", 0, S_OK, "foo:/today/calendar"}, -}; - -/* ################ */ - -static const struct { - const char *path; - const char *url; - DWORD ret; -} TEST_URLFROMPATH [] = { - {"foo", "file:foo", S_OK}, - {"foo\\bar", "file:foo/bar", S_OK}, - {"\\foo\\bar", "file:///foo/bar", S_OK}, - {"c:\\foo\\bar", "file:///c:/foo/bar", S_OK}, - {"c:foo\\bar", "file:///c:foo/bar", S_OK}, - {"c:\\foo/b a%r", "file:///c:/foo/b%20a%25r", S_OK}, - {"c:\\foo\\foo bar", "file:///c:/foo/foo%20bar", S_OK}, -#if 0 - /* The following test fails on native shlwapi as distributed with Win95/98. - * Wine matches the behaviour of later versions. - */ - {"xx:c:\\foo\\bar", "xx:c:\\foo\\bar", S_FALSE} -#endif -}; - -/* ################ */ - -static struct { - char url[30]; - const char *expect; -} TEST_URL_UNESCAPE[] = { - {"file://foo/bar", "file://foo/bar"}, - {"file://fo%20o%5Ca/bar", "file://fo o\\a/bar"} -}; - -/* ################ */ - -static const struct { - const char *path; - BOOL expect; -} TEST_PATH_IS_URL[] = { - {"http://foo/bar", TRUE}, - {"c:\\foo\\bar", FALSE}, - {"foo://foo/bar", TRUE}, - {"foo\\bar", FALSE}, - {"foo.bar", FALSE}, - {"bogusscheme:", TRUE}, - {"http:partial", TRUE} -}; - -/* ################ */ - -static const struct { - const char *url; - BOOL expectOpaque; - BOOL expectFile; -} TEST_URLIS_ATTRIBS[] = { - { "ftp:", FALSE, FALSE }, - { "http:", FALSE, FALSE }, - { "gopher:", FALSE, FALSE }, - { "mailto:", TRUE, FALSE }, - { "news:", FALSE, FALSE }, - { "nntp:", FALSE, FALSE }, - { "telnet:", FALSE, FALSE }, - { "wais:", FALSE, FALSE }, - { "file:", FALSE, TRUE }, - { "mk:", FALSE, FALSE }, - { "https:", FALSE, FALSE }, - { "shell:", TRUE, FALSE }, - { "https:", FALSE, FALSE }, - { "snews:", FALSE, FALSE }, - { "local:", FALSE, FALSE }, - { "javascript:", TRUE, FALSE }, - { "vbscript:", TRUE, FALSE }, - { "about:", TRUE, FALSE }, - { "res:", FALSE, FALSE }, - { "bogusscheme:", FALSE, FALSE }, - { "file:\\\\e:\\b\\c", FALSE, TRUE }, - { "file://e:/b/c", FALSE, TRUE }, - { "http:partial", FALSE, FALSE }, - { "mailto://www.winehq.org/test.html", TRUE, FALSE }, - { "file:partial", FALSE, TRUE } -}; - -/* ########################### */ - -static LPWSTR GetWideString(const char* szString) -{ - LPWSTR wszString = HeapAlloc(GetProcessHeap(), 0, (2*INTERNET_MAX_URL_LENGTH) * sizeof(WCHAR)); - - MultiByteToWideChar(0, 0, szString, -1, wszString, INTERNET_MAX_URL_LENGTH); - - return wszString; -} - - -static void FreeWideString(LPWSTR wszString) -{ - HeapFree(GetProcessHeap(), 0, wszString); -} - -/* ########################### */ - -static void hash_url(const char* szUrl) -{ - LPCSTR szTestUrl = szUrl; - LPWSTR wszTestUrl = GetWideString(szTestUrl); - - DWORD cbSize = sizeof(DWORD); - DWORD dwHash1, dwHash2; - ok(UrlHashA(szTestUrl, (LPBYTE)&dwHash1, cbSize) == S_OK, "UrlHashA didn't return S_OK\n"); - ok(UrlHashW(wszTestUrl, (LPBYTE)&dwHash2, cbSize) == S_OK, "UrlHashW didn't return S_OK\n"); - - FreeWideString(wszTestUrl); - - ok(dwHash1 == dwHash2, "Hashes didn't compare\n"); -} - -static void test_UrlHash(void) -{ - hash_url(TEST_URL_1); - hash_url(TEST_URL_2); - hash_url(TEST_URL_3); -} - -/* ########################### */ - -static void test_url_part(const char* szUrl, DWORD dwPart, DWORD dwFlags, const char* szExpected) -{ - CHAR szPart[INTERNET_MAX_URL_LENGTH]; - WCHAR wszPart[INTERNET_MAX_URL_LENGTH]; - LPWSTR wszUrl = GetWideString(szUrl); - LPWSTR wszConvertedPart; - - DWORD dwSize; - - dwSize = INTERNET_MAX_URL_LENGTH; - ok( UrlGetPartA(szUrl, szPart, &dwSize, dwPart, dwFlags) == S_OK, "UrlGetPartA for \"%s\" part 0x%08x didn't return S_OK but \"%s\"\n", szUrl, dwPart, szPart); - dwSize = INTERNET_MAX_URL_LENGTH; - ok( UrlGetPartW(wszUrl, wszPart, &dwSize, dwPart, dwFlags) == S_OK, "UrlGetPartW didn't return S_OK\n" ); - - wszConvertedPart = GetWideString(szPart); - - ok(lstrcmpW(wszPart,wszConvertedPart)==0, "Strings didn't match between ascii and unicode UrlGetPart!\n"); - - FreeWideString(wszUrl); - FreeWideString(wszConvertedPart); - - /* Note that v6.0 and later don't return '?' with the query */ - ok(strcmp(szPart,szExpected)==0 || - (*szExpected=='?' && !strcmp(szPart,szExpected+1)), - "Expected %s, but got %s\n", szExpected, szPart); -} - -/* ########################### */ - -static void test_UrlGetPart(void) -{ - CHAR szPart[INTERNET_MAX_URL_LENGTH]; - DWORD dwSize; - HRESULT res; - - dwSize = sizeof szPart; - szPart[0]='x'; szPart[1]=0; - res = UrlGetPartA("hi", szPart, &dwSize, URL_PART_SCHEME, 0); - todo_wine { - ok (res==S_FALSE, "UrlGetPartA(\"hi\") returned %08X\n", res); - ok(szPart[0]==0, "UrlGetPartA(\"hi\") return \"%s\" instead of \"\"\n", szPart); - } - dwSize = sizeof szPart; - szPart[0]='x'; szPart[1]=0; - res = UrlGetPartA("hi", szPart, &dwSize, URL_PART_QUERY, 0); - todo_wine { - ok (res==S_FALSE, "UrlGetPartA(\"hi\") returned %08X\n", res); - ok(szPart[0]==0, "UrlGetPartA(\"hi\") return \"%s\" instead of \"\"\n", szPart); - } - - test_url_part(TEST_URL_3, URL_PART_HOSTNAME, 0, "localhost"); - test_url_part(TEST_URL_3, URL_PART_PORT, 0, "21"); - test_url_part(TEST_URL_3, URL_PART_USERNAME, 0, "foo"); - test_url_part(TEST_URL_3, URL_PART_PASSWORD, 0, "bar"); - test_url_part(TEST_URL_3, URL_PART_SCHEME, 0, "http"); - test_url_part(TEST_URL_3, URL_PART_QUERY, 0, "?query=x&return=y"); -} - -/* ########################### */ - -static void test_url_escape(const char *szUrl, DWORD dwFlags, HRESULT dwExpectReturn, const char *szExpectUrl) -{ - CHAR szReturnUrl[INTERNET_MAX_URL_LENGTH]; - DWORD dwEscaped; - WCHAR ret_urlW[INTERNET_MAX_URL_LENGTH]; - WCHAR *urlW, *expected_urlW; - dwEscaped=INTERNET_MAX_URL_LENGTH; - - ok(UrlEscapeA(szUrl, szReturnUrl, &dwEscaped, dwFlags) == dwExpectReturn, "UrlEscapeA didn't return 0x%08x from \"%s\"\n", dwExpectReturn, szUrl); - ok(strcmp(szReturnUrl,szExpectUrl)==0, "Expected \"%s\", but got \"%s\" from \"%s\"\n", szExpectUrl, szReturnUrl, szUrl); - - dwEscaped = INTERNET_MAX_URL_LENGTH; - urlW = GetWideString(szUrl); - expected_urlW = GetWideString(szExpectUrl); - ok(UrlEscapeW(urlW, ret_urlW, &dwEscaped, dwFlags) == dwExpectReturn, "UrlEscapeW didn't return 0x%08x from \"%s\"\n", dwExpectReturn, szUrl); - WideCharToMultiByte(CP_ACP,0,ret_urlW,-1,szReturnUrl,INTERNET_MAX_URL_LENGTH,0,0); - ok(lstrcmpW(ret_urlW, expected_urlW)==0, "Expected \"%s\", but got \"%s\" from \"%s\" flags %08x\n", szExpectUrl, szReturnUrl, szUrl, dwFlags); - FreeWideString(urlW); - FreeWideString(expected_urlW); - -} - -static void test_url_canonicalize(int index, const char *szUrl, DWORD dwFlags, HRESULT dwExpectReturn, const char *szExpectUrl, BOOL todo) -{ - CHAR szReturnUrl[INTERNET_MAX_URL_LENGTH]; - WCHAR wszReturnUrl[INTERNET_MAX_URL_LENGTH]; - LPWSTR wszUrl = GetWideString(szUrl); - LPWSTR wszExpectUrl = GetWideString(szExpectUrl); - LPWSTR wszConvertedUrl; - - DWORD dwSize; - - dwSize = INTERNET_MAX_URL_LENGTH; - ok(UrlCanonicalizeA(szUrl, NULL, &dwSize, dwFlags) != dwExpectReturn, "Unexpected return for NULL buffer, index %d\n", index); - ok(UrlCanonicalizeA(szUrl, szReturnUrl, &dwSize, dwFlags) == dwExpectReturn, "UrlCanonicalizeA didn't return 0x%08x, index %d\n", dwExpectReturn, index); - if (todo) - todo_wine - ok(strcmp(szReturnUrl,szExpectUrl)==0, "UrlCanonicalizeA dwFlags 0x%08x url '%s' Expected \"%s\", but got \"%s\", index %d\n", dwFlags, szUrl, szExpectUrl, szReturnUrl, index); - else - ok(strcmp(szReturnUrl,szExpectUrl)==0, "UrlCanonicalizeA dwFlags 0x%08x url '%s' Expected \"%s\", but got \"%s\", index %d\n", dwFlags, szUrl, szExpectUrl, szReturnUrl, index); - - dwSize = INTERNET_MAX_URL_LENGTH; - ok(UrlCanonicalizeW(wszUrl, NULL, &dwSize, dwFlags) != dwExpectReturn, "Unexpected return for NULL buffer, index %d\n", index); - ok(UrlCanonicalizeW(wszUrl, wszReturnUrl, &dwSize, dwFlags) == dwExpectReturn, "UrlCanonicalizeW didn't return 0x%08x, index %d\n", dwExpectReturn, index); - wszConvertedUrl = GetWideString(szReturnUrl); - ok(lstrcmpW(wszReturnUrl, wszConvertedUrl)==0, "Strings didn't match between ascii and unicode UrlCanonicalize, index %d!\n", index); - FreeWideString(wszConvertedUrl); - - - FreeWideString(wszUrl); - FreeWideString(wszExpectUrl); -} - - -static void test_UrlEscape(void) -{ - DWORD size = 0; - HRESULT ret; - unsigned int i; - char empty_string[] = ""; - - ret = UrlEscapeA("/woningplan/woonkamer basis.swf", NULL, &size, URL_ESCAPE_SPACES_ONLY); - ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG); - ok(size == 0, "got %d, expected %d\n", size, 0); - - size = 0; - ret = UrlEscapeA("/woningplan/woonkamer basis.swf", empty_string, &size, URL_ESCAPE_SPACES_ONLY); - ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG); - ok(size == 0, "got %d, expected %d\n", size, 0); - - size = 1; - ret = UrlEscapeA("/woningplan/woonkamer basis.swf", NULL, &size, URL_ESCAPE_SPACES_ONLY); - ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG); - ok(size == 1, "got %d, expected %d\n", size, 1); - - size = 1; - ret = UrlEscapeA("/woningplan/woonkamer basis.swf", empty_string, NULL, URL_ESCAPE_SPACES_ONLY); - ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG); - ok(size == 1, "got %d, expected %d\n", size, 1); - - size = 1; - ret = UrlEscapeA("/woningplan/woonkamer basis.swf", empty_string, &size, URL_ESCAPE_SPACES_ONLY); - ok(ret == E_POINTER, "got %x, expected %x\n", ret, E_POINTER); - ok(size == 34, "got %d, expected %d\n", size, 34); - - for(i=0; i -#include "windef.h" -#include "winbase.h" -#include "urlmon.h" - -#include "wine/test.h" - -/*********************************************************************** - * Compatibility macros - */ - -#define DWORD_PTR UINT_PTR -#define LONG_PTR INT_PTR -#define ULONG_PTR UINT_PTR - -/*********************************************************************** - * Windows API extension - */ - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field) -#elif defined(__GNUC__) -# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field) -#else -/* FIXME: Not sure if is possible to do without compiler extension */ -#endif - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define _TYPE_ALIGNMENT(type) __alignof(type) -#elif defined(__GNUC__) -# define _TYPE_ALIGNMENT(type) __alignof__(type) -#else -/* - * FIXME: Not sure if is possible to do without compiler extension - * (if type is not just a name that is, if so the normal) - * TYPE_ALIGNMENT can be used) - */ -#endif - -#if defined(TYPE_ALIGNMENT) && defined(_MSC_VER) && _MSC_VER >= 800 && !defined(__cplusplus) -#pragma warning(disable:4116) -#endif - -#if !defined(TYPE_ALIGNMENT) && defined(_TYPE_ALIGNMENT) -# define TYPE_ALIGNMENT _TYPE_ALIGNMENT -#endif - -/*********************************************************************** - * Test helper macros - */ - -#ifdef FIELD_ALIGNMENT -# define TEST_FIELD_ALIGNMENT(type, field, align) \ - ok(FIELD_ALIGNMENT(type, field) == align, \ - "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \ - (int)FIELD_ALIGNMENT(type, field)) -#else -# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0) -#endif - -#define TEST_FIELD_OFFSET(type, field, offset) \ - ok(FIELD_OFFSET(type, field) == offset, \ - "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \ - (long int)FIELD_OFFSET(type, field)) - -#ifdef _TYPE_ALIGNMENT -#define TEST__TYPE_ALIGNMENT(type, align) \ - ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type)) -#else -# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#ifdef TYPE_ALIGNMENT -#define TEST_TYPE_ALIGNMENT(type, align) \ - ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type)) -#else -# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#define TEST_TYPE_SIZE(type, size) \ - ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type))) - -/*********************************************************************** - * Test macros - */ - -#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \ - TEST_TYPE_SIZE(field_type, field_size); \ - TEST_FIELD_ALIGNMENT(type, field_name, field_align); \ - TEST_FIELD_OFFSET(type, field_name, field_offset); \ - -#define TEST_TYPE(type, size, align) \ - TEST_TYPE_ALIGNMENT(type, align); \ - TEST_TYPE_SIZE(type, size) - -#define TEST_TYPE_POINTER(type, size, align) \ - TEST__TYPE_ALIGNMENT(*(type)0, align); \ - TEST_TYPE_SIZE(*(type)0, size) - -#define TEST_TYPE_SIGNED(type) \ - ok((type) -1 < 0, "(" #type ") -1 < 0\n"); - -#define TEST_TYPE_UNSIGNED(type) \ - ok((type) -1 > 0, "(" #type ") -1 > 0\n"); - -static void test_pack_BINDINFO(void) -{ - /* BINDINFO (pack 4) */ - TEST_FIELD(BINDINFO, ULONG, cbSize, 0, 4, 4); - TEST_FIELD(BINDINFO, LPWSTR, szExtraInfo, 4, 4, 4); -} - -static void test_pack_IBindHost(void) -{ - /* IBindHost */ -} - -static void test_pack_IBindHostVtbl(void) -{ - /* IBindHostVtbl (pack 4) */ -} - -static void test_pack_IBindStatusCallback(void) -{ - /* IBindStatusCallback */ -} - -static void test_pack_IBindStatusCallbackVtbl(void) -{ - /* IBindStatusCallbackVtbl (pack 4) */ -} - -static void test_pack_IBinding(void) -{ - /* IBinding */ -} - -static void test_pack_IBindingVtbl(void) -{ - /* IBindingVtbl (pack 4) */ -} - -static void test_pack_IInternetProtocolInfo(void) -{ - /* IInternetProtocolInfo */ -} - -static void test_pack_IInternetProtocolInfoVtbl(void) -{ - /* IInternetProtocolInfoVtbl (pack 4) */ -} - -static void test_pack_IInternetSession(void) -{ - /* IInternetSession */ -} - -static void test_pack_IInternetSessionVtbl(void) -{ - /* IInternetSessionVtbl (pack 4) */ -} - -static void test_pack_IPersistMoniker(void) -{ - /* IPersistMoniker */ -} - -static void test_pack_IPersistMonikerVtbl(void) -{ - /* IPersistMonikerVtbl (pack 4) */ -} - -static void test_pack_IWinInetHttpInfo(void) -{ - /* IWinInetHttpInfo */ -} - -static void test_pack_IWinInetHttpInfoVtbl(void) -{ - /* IWinInetHttpInfoVtbl (pack 4) */ -} - -static void test_pack_IWinInetInfo(void) -{ - /* IWinInetInfo */ -} - -static void test_pack_IWinInetInfoVtbl(void) -{ - /* IWinInetInfoVtbl (pack 4) */ -} - -static void test_pack_LPBINDHOST(void) -{ - /* LPBINDHOST */ - TEST_TYPE(LPBINDHOST, 4, 4); -} - -static void test_pack_LPBINDING(void) -{ - /* LPBINDING */ - TEST_TYPE(LPBINDING, 4, 4); -} - -static void test_pack_LPBINDSTATUSCALLBACK(void) -{ - /* LPBINDSTATUSCALLBACK */ - TEST_TYPE(LPBINDSTATUSCALLBACK, 4, 4); -} - -static void test_pack_LPIINTERNETPROTOCOLINFO(void) -{ - /* LPIINTERNETPROTOCOLINFO */ - TEST_TYPE(LPIINTERNETPROTOCOLINFO, 4, 4); -} - -static void test_pack_LPIINTERNETSESSION(void) -{ - /* LPIINTERNETSESSION */ - TEST_TYPE(LPIINTERNETSESSION, 4, 4); -} - -static void test_pack_LPPERSISTMONIKER(void) -{ - /* LPPERSISTMONIKER */ - TEST_TYPE(LPPERSISTMONIKER, 4, 4); -} - -static void test_pack_LPREMFORMATETC(void) -{ - /* LPREMFORMATETC */ - TEST_TYPE(LPREMFORMATETC, 4, 4); -} - -static void test_pack_LPREMSECURITY_ATTRIBUTES(void) -{ - /* LPREMSECURITY_ATTRIBUTES */ - TEST_TYPE(LPREMSECURITY_ATTRIBUTES, 4, 4); -} - -static void test_pack_LPWININETHTTPINFO(void) -{ - /* LPWININETHTTPINFO */ - TEST_TYPE(LPWININETHTTPINFO, 4, 4); -} - -static void test_pack_LPWININETINFO(void) -{ - /* LPWININETINFO */ - TEST_TYPE(LPWININETINFO, 4, 4); -} - -static void test_pack_PREMSECURITY_ATTRIBUTES(void) -{ - /* PREMSECURITY_ATTRIBUTES */ - TEST_TYPE(PREMSECURITY_ATTRIBUTES, 4, 4); -} - -static void test_pack_REMSECURITY_ATTRIBUTES(void) -{ - /* REMSECURITY_ATTRIBUTES (pack 4) */ - TEST_TYPE(REMSECURITY_ATTRIBUTES, 12, 4); - TEST_FIELD(REMSECURITY_ATTRIBUTES, DWORD, nLength, 0, 4, 4); - TEST_FIELD(REMSECURITY_ATTRIBUTES, DWORD, lpSecurityDescriptor, 4, 4, 4); - TEST_FIELD(REMSECURITY_ATTRIBUTES, BOOL, bInheritHandle, 8, 4, 4); -} - -static void test_pack_RemBINDINFO(void) -{ - /* RemBINDINFO (pack 4) */ - TEST_TYPE(RemBINDINFO, 72, 4); - TEST_FIELD(RemBINDINFO, ULONG, cbSize, 0, 4, 4); - TEST_FIELD(RemBINDINFO, LPWSTR, szExtraInfo, 4, 4, 4); - TEST_FIELD(RemBINDINFO, DWORD, grfBindInfoF, 8, 4, 4); - TEST_FIELD(RemBINDINFO, DWORD, dwBindVerb, 12, 4, 4); - TEST_FIELD(RemBINDINFO, LPWSTR, szCustomVerb, 16, 4, 4); - TEST_FIELD(RemBINDINFO, DWORD, cbstgmedData, 20, 4, 4); - TEST_FIELD(RemBINDINFO, DWORD, dwOptions, 24, 4, 4); - TEST_FIELD(RemBINDINFO, DWORD, dwOptionsFlags, 28, 4, 4); - TEST_FIELD(RemBINDINFO, DWORD, dwCodePage, 32, 4, 4); - TEST_FIELD(RemBINDINFO, REMSECURITY_ATTRIBUTES, securityAttributes, 36, 12, 4); - TEST_FIELD(RemBINDINFO, IID, iid, 48, 16, 4); - TEST_FIELD(RemBINDINFO, IUnknown *, pUnk, 64, 4, 4); - TEST_FIELD(RemBINDINFO, DWORD, dwReserved, 68, 4, 4); -} - -static void test_pack_RemFORMATETC(void) -{ - /* RemFORMATETC (pack 4) */ - TEST_TYPE(RemFORMATETC, 20, 4); - TEST_FIELD(RemFORMATETC, DWORD, cfFormat, 0, 4, 4); - TEST_FIELD(RemFORMATETC, DWORD, ptd, 4, 4, 4); - TEST_FIELD(RemFORMATETC, DWORD, dwAspect, 8, 4, 4); - TEST_FIELD(RemFORMATETC, LONG, lindex, 12, 4, 4); - TEST_FIELD(RemFORMATETC, DWORD, tymed, 16, 4, 4); -} - -static void test_pack(void) -{ - test_pack_BINDINFO(); - test_pack_IBindHost(); - test_pack_IBindHostVtbl(); - test_pack_IBindStatusCallback(); - test_pack_IBindStatusCallbackVtbl(); - test_pack_IBinding(); - test_pack_IBindingVtbl(); - test_pack_IInternetProtocolInfo(); - test_pack_IInternetProtocolInfoVtbl(); - test_pack_IInternetSession(); - test_pack_IInternetSessionVtbl(); - test_pack_IPersistMoniker(); - test_pack_IPersistMonikerVtbl(); - test_pack_IWinInetHttpInfo(); - test_pack_IWinInetHttpInfoVtbl(); - test_pack_IWinInetInfo(); - test_pack_IWinInetInfoVtbl(); - test_pack_LPBINDHOST(); - test_pack_LPBINDING(); - test_pack_LPBINDSTATUSCALLBACK(); - test_pack_LPIINTERNETPROTOCOLINFO(); - test_pack_LPIINTERNETSESSION(); - test_pack_LPPERSISTMONIKER(); - test_pack_LPREMFORMATETC(); - test_pack_LPREMSECURITY_ATTRIBUTES(); - test_pack_LPWININETHTTPINFO(); - test_pack_LPWININETINFO(); - test_pack_PREMSECURITY_ATTRIBUTES(); - test_pack_REMSECURITY_ATTRIBUTES(); - test_pack_RemBINDINFO(); - test_pack_RemFORMATETC(); -} - -START_TEST(generated) -{ - test_pack(); -} diff --git a/rostests/winetests/urlmon/misc.c b/rostests/winetests/urlmon/misc.c deleted file mode 100644 index 6d3305e5752..00000000000 --- a/rostests/winetests/urlmon/misc.c +++ /dev/null @@ -1,1518 +0,0 @@ -/* - * Copyright 2005-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 - */ - -#define COBJMACROS -#define CONST_VTABLE -#define NONAMELESSUNION - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "ole2.h" -#include "urlmon.h" - -#include "initguid.h" - -DEFINE_GUID(CLSID_AboutProtocol, 0x3050F406, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); - -#define DEFINE_EXPECT(func) \ - static BOOL expect_ ## func = FALSE, called_ ## func = FALSE - -#define SET_EXPECT(func) \ - expect_ ## func = TRUE - -#define CHECK_EXPECT(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - expect_ ## func = FALSE; \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_EXPECT2(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_CALLED(func) \ - do { \ - ok(called_ ## func, "expected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -DEFINE_EXPECT(ParseUrl); -DEFINE_EXPECT(QI_IInternetProtocolInfo); -DEFINE_EXPECT(CreateInstance); -DEFINE_EXPECT(unk_Release); - -static const char *debugstr_w(LPCWSTR str) -{ - static char buf[1024]; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - -static void test_CreateFormatEnum(void) -{ - IEnumFORMATETC *fenum = NULL, *fenum2 = NULL; - FORMATETC fetc[5]; - ULONG ul; - HRESULT hres; - - static DVTARGETDEVICE dev = {sizeof(dev),0,0,0,0,{0}}; - static FORMATETC formatetc[] = { - {0,&dev,0,0,0}, - {0,&dev,0,1,0}, - {0,NULL,0,2,0}, - {0,NULL,0,3,0}, - {0,NULL,0,4,0} - }; - - hres = CreateFormatEnumerator(0, formatetc, &fenum); - ok(hres == E_FAIL, "CreateFormatEnumerator failed: %08x, expected E_FAIL\n", hres); - hres = CreateFormatEnumerator(0, formatetc, NULL); - ok(hres == E_INVALIDARG, "CreateFormatEnumerator failed: %08x, expected E_INVALIDARG\n", hres); - hres = CreateFormatEnumerator(5, formatetc, NULL); - ok(hres == E_INVALIDARG, "CreateFormatEnumerator failed: %08x, expected E_INVALIDARG\n", hres); - - - hres = CreateFormatEnumerator(5, formatetc, &fenum); - ok(hres == S_OK, "CreateFormatEnumerator failed: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = IEnumFORMATETC_Next(fenum, 2, NULL, &ul); - ok(hres == E_INVALIDARG, "Next failed: %08x, expected E_INVALIDARG\n", hres); - ul = 100; - hres = IEnumFORMATETC_Next(fenum, 0, fetc, &ul); - ok(hres == S_OK, "Next failed: %08x\n", hres); - ok(ul == 0, "ul=%d, expected 0\n", ul); - - hres = IEnumFORMATETC_Next(fenum, 2, fetc, &ul); - ok(hres == S_OK, "Next failed: %08x\n", hres); - ok(fetc[0].lindex == 0, "fetc[0].lindex=%d, expected 0\n", fetc[0].lindex); - ok(fetc[1].lindex == 1, "fetc[1].lindex=%d, expected 1\n", fetc[1].lindex); - ok(fetc[0].ptd == &dev, "fetc[0].ptd=%p, expected %p\n", fetc[0].ptd, &dev); - ok(ul == 2, "ul=%d, expected 2\n", ul); - - hres = IEnumFORMATETC_Skip(fenum, 1); - ok(hres == S_OK, "Skip failed: %08x\n", hres); - - hres = IEnumFORMATETC_Next(fenum, 4, fetc, &ul); - ok(hres == S_FALSE, "Next failed: %08x, expected S_FALSE\n", hres); - ok(fetc[0].lindex == 3, "fetc[0].lindex=%d, expected 3\n", fetc[0].lindex); - ok(fetc[1].lindex == 4, "fetc[1].lindex=%d, expected 4\n", fetc[1].lindex); - ok(fetc[0].ptd == NULL, "fetc[0].ptd=%p, expected NULL\n", fetc[0].ptd); - ok(ul == 2, "ul=%d, expected 2\n", ul); - - hres = IEnumFORMATETC_Next(fenum, 4, fetc, &ul); - ok(hres == S_FALSE, "Next failed: %08x, expected S_FALSE\n", hres); - ok(ul == 0, "ul=%d, expected 0\n", ul); - ul = 100; - hres = IEnumFORMATETC_Next(fenum, 0, fetc, &ul); - ok(hres == S_OK, "Next failed: %08x\n", hres); - ok(ul == 0, "ul=%d, expected 0\n", ul); - - hres = IEnumFORMATETC_Skip(fenum, 3); - ok(hres == S_FALSE, "Skip failed: %08x, expected S_FALSE\n", hres); - - hres = IEnumFORMATETC_Reset(fenum); - ok(hres == S_OK, "Reset failed: %08x\n", hres); - - hres = IEnumFORMATETC_Next(fenum, 5, fetc, NULL); - ok(hres == S_OK, "Next failed: %08x\n", hres); - ok(fetc[0].lindex == 0, "fetc[0].lindex=%d, expected 0\n", fetc[0].lindex); - - hres = IEnumFORMATETC_Reset(fenum); - ok(hres == S_OK, "Reset failed: %08x\n", hres); - - hres = IEnumFORMATETC_Skip(fenum, 2); - ok(hres == S_OK, "Skip failed: %08x\n", hres); - - hres = IEnumFORMATETC_Clone(fenum, NULL); - ok(hres == E_INVALIDARG, "Clone failed: %08x, expected E_INVALIDARG\n", hres); - - hres = IEnumFORMATETC_Clone(fenum, &fenum2); - ok(hres == S_OK, "Clone failed: %08x\n", hres); - - if(SUCCEEDED(hres)) { - ok(fenum != fenum2, "fenum == fenum2\n"); - - hres = IEnumFORMATETC_Next(fenum2, 2, fetc, &ul); - ok(hres == S_OK, "Next failed: %08x\n", hres); - ok(fetc[0].lindex == 2, "fetc[0].lindex=%d, expected 2\n", fetc[0].lindex); - - IEnumFORMATETC_Release(fenum2); - } - - hres = IEnumFORMATETC_Next(fenum, 2, fetc, &ul); - ok(hres == S_OK, "Next failed: %08x\n", hres); - ok(fetc[0].lindex == 2, "fetc[0].lindex=%d, expected 2\n", fetc[0].lindex); - - hres = IEnumFORMATETC_Skip(fenum, 1); - ok(hres == S_OK, "Skip failed: %08x\n", hres); - - IEnumFORMATETC_Release(fenum); -} - -static void test_RegisterFormatEnumerator(void) -{ - IBindCtx *bctx = NULL; - IEnumFORMATETC *format = NULL, *format2 = NULL; - IUnknown *unk = NULL; - HRESULT hres; - - static FORMATETC formatetc = {0,NULL,0,0,0}; - static WCHAR wszEnumFORMATETC[] = - {'_','E','n','u','m','F','O','R','M','A','T','E','T','C','_',0}; - - CreateBindCtx(0, &bctx); - - hres = CreateFormatEnumerator(1, &formatetc, &format); - ok(hres == S_OK, "CreateFormatEnumerator failed: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = RegisterFormatEnumerator(NULL, format, 0); - ok(hres == E_INVALIDARG, - "RegisterFormatEnumerator failed: %08x, expected E_INVALIDARG\n", hres); - hres = RegisterFormatEnumerator(bctx, NULL, 0); - ok(hres == E_INVALIDARG, - "RegisterFormatEnumerator failed: %08x, expected E_INVALIDARG\n", hres); - - hres = RegisterFormatEnumerator(bctx, format, 0); - ok(hres == S_OK, "RegisterFormatEnumerator failed: %08x\n", hres); - - hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk); - ok(hres == S_OK, "GetObjectParam failed: %08x\n", hres); - ok(unk == (IUnknown*)format, "unk != format\n"); - - hres = RevokeFormatEnumerator(NULL, format); - ok(hres == E_INVALIDARG, - "RevokeFormatEnumerator failed: %08x, expected E_INVALIDARG\n", hres); - - hres = RevokeFormatEnumerator(bctx, format); - ok(hres == S_OK, "RevokeFormatEnumerator failed: %08x\n", hres); - - hres = RevokeFormatEnumerator(bctx, format); - ok(hres == E_FAIL, "RevokeFormatEnumerator failed: %08x, expected E_FAIL\n", hres); - - hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk); - ok(hres == E_FAIL, "GetObjectParam failed: %08x, expected E_FAIL\n", hres); - - hres = RegisterFormatEnumerator(bctx, format, 0); - ok(hres == S_OK, "RegisterFormatEnumerator failed: %08x\n", hres); - - hres = CreateFormatEnumerator(1, &formatetc, &format2); - ok(hres == S_OK, "CreateFormatEnumerator failed: %08x\n", hres); - - if(SUCCEEDED(hres)) { - hres = RevokeFormatEnumerator(bctx, format); - ok(hres == S_OK, "RevokeFormatEnumerator failed: %08x\n", hres); - - IEnumFORMATETC_Release(format2); - } - - hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk); - ok(hres == E_FAIL, "GetObjectParam failed: %08x, expected E_FAIL\n", hres); - - IEnumFORMATETC_Release(format); - - hres = RegisterFormatEnumerator(bctx, format, 0); - ok(hres == S_OK, "RegisterFormatEnumerator failed: %08x\n", hres); - hres = RevokeFormatEnumerator(bctx, NULL); - ok(hres == S_OK, "RevokeFormatEnumerator failed: %08x\n", hres); - hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk); - ok(hres == E_FAIL, "GetObjectParam failed: %08x, expected E_FAIL\n", hres); - - IEnumFORMATETC_Release(format); - IBindCtx_Release(bctx); -} - -static const WCHAR url1[] = {'r','e','s',':','/','/','m','s','h','t','m','l','.','d','l','l', - '/','b','l','a','n','k','.','h','t','m',0}; -static const WCHAR url2[] = {'i','n','d','e','x','.','h','t','m',0}; -static const WCHAR url3[] = {'f','i','l','e',':','/','/','c',':','\\','I','n','d','e','x','.','h','t','m',0}; -static const WCHAR url4[] = {'f','i','l','e',':','s','o','m','e','%','2','0','f','i','l','e', - '%','2','e','j','p','g',0}; -static const WCHAR url5[] = {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q', - '.','o','r','g',0}; -static const WCHAR url6[] = {'a','b','o','u','t',':','b','l','a','n','k',0}; -static const WCHAR url7[] = {'f','t','p',':','/','/','w','i','n','e','h','q','.','o','r','g','/', - 'f','i','l','e','.','t','e','s','t',0}; -static const WCHAR url8[] = {'t','e','s','t',':','1','2','3','a','b','c',0}; -static const WCHAR url9[] = - {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g', - '/','s','i','t','e','/','a','b','o','u','t',0}; -static const WCHAR url10[] = {'f','i','l','e',':','/','/','s','o','m','e','%','2','0','f','i','l','e', - '.','j','p','g',0}; - -static const WCHAR url4e[] = {'f','i','l','e',':','s','o','m','e',' ','f','i','l','e', - '.','j','p','g',0}; - -static const WCHAR path3[] = {'c',':','\\','I','n','d','e','x','.','h','t','m',0}; -static const WCHAR path4[] = {'s','o','m','e',' ','f','i','l','e','.','j','p','g',0}; - -static const WCHAR wszRes[] = {'r','e','s',0}; -static const WCHAR wszFile[] = {'f','i','l','e',0}; -static const WCHAR wszHttp[] = {'h','t','t','p',0}; -static const WCHAR wszAbout[] = {'a','b','o','u','t',0}; -static const WCHAR wszEmpty[] = {0}; - -struct parse_test { - LPCWSTR url; - HRESULT secur_hres; - LPCWSTR encoded_url; - HRESULT path_hres; - LPCWSTR path; - LPCWSTR schema; -}; - -static const struct parse_test parse_tests[] = { - {url1, S_OK, url1, E_INVALIDARG, NULL, wszRes}, - {url2, E_FAIL, url2, E_INVALIDARG, NULL, wszEmpty}, - {url3, E_FAIL, url3, S_OK, path3, wszFile}, - {url4, E_FAIL, url4e, S_OK, path4, wszFile}, - {url5, E_FAIL, url5, E_INVALIDARG, NULL, wszHttp}, - {url6, S_OK, url6, E_INVALIDARG, NULL, wszAbout} -}; - -static void test_CoInternetParseUrl(void) -{ - HRESULT hres; - DWORD size; - int i; - - static WCHAR buf[4096]; - - memset(buf, 0xf0, sizeof(buf)); - hres = CoInternetParseUrl(parse_tests[0].url, PARSE_SCHEMA, 0, buf, - 3, &size, 0); - ok(hres == E_POINTER, "schema failed: %08x, expected E_POINTER\n", hres); - - for(i=0; i < sizeof(parse_tests)/sizeof(parse_tests[0]); i++) { - memset(buf, 0xf0, sizeof(buf)); - hres = CoInternetParseUrl(parse_tests[i].url, PARSE_SECURITY_URL, 0, buf, - sizeof(buf)/sizeof(WCHAR), &size, 0); - ok(hres == parse_tests[i].secur_hres, "[%d] security url failed: %08x, expected %08x\n", - i, hres, parse_tests[i].secur_hres); - - memset(buf, 0xf0, sizeof(buf)); - hres = CoInternetParseUrl(parse_tests[i].url, PARSE_ENCODE, 0, buf, - sizeof(buf)/sizeof(WCHAR), &size, 0); - ok(hres == S_OK, "[%d] encoding failed: %08x\n", i, hres); - ok(size == lstrlenW(parse_tests[i].encoded_url), "[%d] wrong size\n", i); - ok(!lstrcmpW(parse_tests[i].encoded_url, buf), "[%d] wrong encoded url\n", i); - - memset(buf, 0xf0, sizeof(buf)); - hres = CoInternetParseUrl(parse_tests[i].url, PARSE_PATH_FROM_URL, 0, buf, - sizeof(buf)/sizeof(WCHAR), &size, 0); - ok(hres == parse_tests[i].path_hres, "[%d] path failed: %08x, expected %08x\n", - i, hres, parse_tests[i].path_hres); - if(parse_tests[i].path) { - ok(size == lstrlenW(parse_tests[i].path), "[%d] wrong size\n", i); - ok(!lstrcmpW(parse_tests[i].path, buf), "[%d] wrong path\n", i); - } - - memset(buf, 0xf0, sizeof(buf)); - hres = CoInternetParseUrl(parse_tests[i].url, PARSE_SCHEMA, 0, buf, - sizeof(buf)/sizeof(WCHAR), &size, 0); - ok(hres == S_OK, "[%d] schema failed: %08x\n", i, hres); - ok(size == lstrlenW(parse_tests[i].schema), "[%d] wrong size\n", i); - ok(!lstrcmpW(parse_tests[i].schema, buf), "[%d] wrong schema\n", i); - } -} - -static void test_CoInternetCompareUrl(void) -{ - HRESULT hres; - - hres = CoInternetCompareUrl(url1, url1, 0); - ok(hres == S_OK, "CoInternetParseUrl failed: %08x\n", hres); - - hres = CoInternetCompareUrl(url1, url3, 0); - ok(hres == S_FALSE, "CoInternetParseUrl failed: %08x\n", hres); - - hres = CoInternetCompareUrl(url3, url1, 0); - ok(hres == S_FALSE, "CoInternetParseUrl failed: %08x\n", hres); -} - -static const struct { - LPCWSTR url; - DWORD uses_net; -} query_info_tests[] = { - {url1, 0}, - {url2, 0}, - {url3, 0}, - {url4, 0}, - {url5, 0}, - {url6, 0}, - {url7, 0}, - {url8, 0} -}; - -static void test_CoInternetQueryInfo(void) -{ - BYTE buf[100]; - DWORD cb, i; - HRESULT hres; - - for(i=0; i < sizeof(query_info_tests)/sizeof(query_info_tests[0]); i++) { - cb = 0xdeadbeef; - memset(buf, '?', sizeof(buf)); - hres = CoInternetQueryInfo(query_info_tests[0].url, QUERY_USES_NETWORK, 0, buf, sizeof(buf), &cb, 0); - ok(hres == S_OK, "[%d] CoInternetQueryInfo failed: %08x\n", i, hres); - ok(cb == sizeof(DWORD), "[%d] cb = %d\n", i, cb); - ok(*(DWORD*)buf == query_info_tests[i].uses_net, "[%d] ret %x, expected %x\n", - i, *(DWORD*)buf, query_info_tests[i].uses_net); - - hres = CoInternetQueryInfo(query_info_tests[0].url, QUERY_USES_NETWORK, 0, buf, 3, &cb, 0); - ok(hres == E_FAIL, "[%d] CoInternetQueryInfo failed: %08x, expected E_FAIL\n", i, hres); - hres = CoInternetQueryInfo(query_info_tests[0].url, QUERY_USES_NETWORK, 0, NULL, sizeof(buf), &cb, 0); - ok(hres == E_FAIL, "[%d] CoInternetQueryInfo failed: %08x, expected E_FAIL\n", i, hres); - - memset(buf, '?', sizeof(buf)); - hres = CoInternetQueryInfo(query_info_tests[0].url, QUERY_USES_NETWORK, 0, buf, sizeof(buf), NULL, 0); - ok(hres == S_OK, "[%d] CoInternetQueryInfo failed: %08x\n", i, hres); - ok(*(DWORD*)buf == query_info_tests[i].uses_net, "[%d] ret %x, expected %x\n", - i, *(DWORD*)buf, query_info_tests[i].uses_net); - } -} - -static const WCHAR mimeTextHtml[] = {'t','e','x','t','/','h','t','m','l',0}; -static const WCHAR mimeTextPlain[] = {'t','e','x','t','/','p','l','a','i','n',0}; -static const WCHAR mimeTextRichtext[] = {'t','e','x','t','/','r','i','c','h','t','e','x','t',0}; -static const WCHAR mimeAppOctetStream[] = {'a','p','p','l','i','c','a','t','i','o','n','/', - 'o','c','t','e','t','-','s','t','r','e','a','m',0}; -static const WCHAR mimeImagePjpeg[] = {'i','m','a','g','e','/','p','j','p','e','g',0}; -static const WCHAR mimeImageGif[] = {'i','m','a','g','e','/','g','i','f',0}; -static const WCHAR mimeImageBmp[] = {'i','m','a','g','e','/','b','m','p',0}; -static const WCHAR mimeImageXPng[] = {'i','m','a','g','e','/','x','-','p','n','g',0}; -static const WCHAR mimeImageTiff[] = {'i','m','a','g','e','/','t','i','f','f',0}; -static const WCHAR mimeVideoAvi[] = {'v','i','d','e','o','/','a','v','i',0}; -static const WCHAR mimeVideoMpeg[] = {'v','i','d','e','o','/','m','p','e','g',0}; -static const WCHAR mimeAppPostscript[] = - {'a','p','p','l','i','c','a','t','i','o','n','/','p','o','s','t','s','c','r','i','p','t',0}; -static const WCHAR mimeAppXCompressed[] = {'a','p','p','l','i','c','a','t','i','o','n','/', - 'x','-','c','o','m','p','r','e','s','s','e','d',0}; -static const WCHAR mimeAppXZip[] = {'a','p','p','l','i','c','a','t','i','o','n','/', - 'x','-','z','i','p','-','c','o','m','p','r','e','s','s','e','d',0}; -static const WCHAR mimeAppXGzip[] = {'a','p','p','l','i','c','a','t','i','o','n','/', - 'x','-','g','z','i','p','-','c','o','m','p','r','e','s','s','e','d',0}; -static const WCHAR mimeAppJava[] = {'a','p','p','l','i','c','a','t','i','o','n','/','j','a','v','a',0}; -static const WCHAR mimeAppPdf[] = {'a','p','p','l','i','c','a','t','i','o','n','/','p','d','f',0}; -static const WCHAR mimeAppXMSDownload[] = - {'a','p','p','l','i','c','a','t','i','o','n','/','x','-','m','s','d','o','w','n','l','o','a','d',0}; -static const WCHAR mimeAudioWav[] = {'a','u','d','i','o','/','w','a','v',0}; -static const WCHAR mimeAudioBasic[] = {'a','u','d','i','o','/','b','a','s','i','c',0}; - -static const struct { - LPCWSTR url; - LPCWSTR mime; - HRESULT hres; -} mime_tests[] = { - {url1, mimeTextHtml, S_OK}, - {url2, mimeTextHtml, S_OK}, - {url3, mimeTextHtml, S_OK}, - {url4, NULL, E_FAIL}, - {url5, NULL, __HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)}, - {url6, NULL, E_FAIL}, - {url7, NULL, __HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)} -}; - -static BYTE data1[] = "test data\n"; -static BYTE data2[] = {31,'t','e','s',0xfa,'t',' ','d','a','t','a','\n',0}; -static BYTE data3[] = {0,0,0}; -static BYTE data4[] = {'t','e','s',0xfa,'t',' ','d','a','t','a','\n',0,0}; -static BYTE data5[] = {0xa,0xa,0xa,'x',32,'x',0}; -static BYTE data6[] = {0xfa,0xfa,0xfa,0xfa,'\n','\r','\t','x','x','x',1}; -static BYTE data7[] = "blahblah"; -static BYTE data8[] = {'t','e','s',0xfa,'t',' ','<','h','t','m','l','>','d','a','t','a','\n',0,0}; -static BYTE data9[] = {'t','e',0,'s',0xfa,'t',' ','<','h','t','m','l','>','d','a','t','a','\n',0,0}; -static BYTE data10[] = "blahblah"; -static BYTE data11[] = "blahblahblah"; -static BYTE data12[] = "blah'}; -static BYTE data19[] = {'G','I','F','8','7','a'}; -static BYTE data20[] = {'G','I','F','8','9','a'}; -static BYTE data21[] = {'G','I','F','8','7'}; -static BYTE data22[] = {'G','i','F','8','7','a'}; -static BYTE data23[] = {'G','i','F','8','8','a'}; -static BYTE data24[] = {'g','i','f','8','7','a'}; -static BYTE data25[] = {'G','i','F','8','7','A'}; -static BYTE data26[] = {'G','i','F','8','7','a','<','h','t','m','l','>'}; -static BYTE data27[] = {0x30,'G','i','F','8','7','A'}; -static BYTE data28[] = {0x42,0x4d,0x6e,0x42,0x1c,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00}; -static BYTE data29[] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x','x'}; -static BYTE data30[] = {0x42,0x4d,'x','x','x','x',0x00,0x01,0x00,0x00,'x','x','x','x'}; -static BYTE data31[] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'<','h','t','m','l','>'}; -static BYTE data32[] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x'}; -static BYTE data33[] = {0x00,0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x'}; -static BYTE data34[] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x'}; -static BYTE data35[] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x','x','x','x',0}; -static BYTE data36[] = {0x89,'P','N','G',0x0d,0x0a,0x1a,'x','x'}; -static BYTE data37[] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'<','h','t','m','l','>'}; -static BYTE data38[] = {0x00,0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x'}; -static BYTE data39[] = {0x4d,0x4d,0x00,0x2a}; -static BYTE data40[] = {0x4d,0x4d,0x00,0x2a,'<','h','t','m','l','>',0}; -static BYTE data41[] = {0x4d,0x4d,0xff}; -static BYTE data42[] = {0x4d,0x4d}; -static BYTE data43[] = {0x00,0x4d,0x4d,0x00}; -static BYTE data44[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20,0xff}; -static BYTE data45[] = {'R','I','F','f',0xff,0xff,0xff,0xff,'A','V','I',0x20,0xff}; -static BYTE data46[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20}; -static BYTE data47[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x21,0xff}; -static BYTE data48[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20,'<','h','t','m','l','>'}; -static BYTE data49[] = {'R','I','F','F',0x0f,0x0f,0xf0,0xf0,'A','V','I',0x20,0xf0,0x00}; -static BYTE data50[] = {0x00,0x00,0x01,0xb3,0xff}; -static BYTE data51[] = {0x00,0x00,0x01,0xba,0xff}; -static BYTE data52[] = {0x00,0x00,0x01,0xb8,0xff}; -static BYTE data53[] = {0x00,0x00,0x01,0xba}; -static BYTE data54[] = {0x00,0x00,0x01,0xba,'<','h','t','m','l','>'}; -static BYTE data55[] = {0x1f,0x8b,'x'}; -static BYTE data56[] = {0x1f}; -static BYTE data57[] = {0x1f,0x8b,'<','h','t','m','l','>','t','e','s','t',0}; -static BYTE data58[] = {0x1f,0x8b}; -static BYTE data59[] = {0x50,0x4b,'x'}; -static BYTE data60[] = {0x50,0x4b}; -static BYTE data61[] = {0x50,0x4b,'<','h','t','m','l','>',0}; -static BYTE data62[] = {0xca,0xfe,0xba,0xbe,'x'}; -static BYTE data63[] = {0xca,0xfe,0xba,0xbe}; -static BYTE data64[] = {0xca,0xfe,0xba,0xbe,'<','h','t','m','l','>',0}; -static BYTE data65[] = {0x25,0x50,0x44,0x46,'x'}; -static BYTE data66[] = {0x25,0x50,0x44,0x46}; -static BYTE data67[] = {0x25,0x50,0x44,0x46,'x','<','h','t','m','l','>'}; -static BYTE data68[] = {'M','Z','x'}; -static BYTE data69[] = {'M','Z'}; -static BYTE data70[] = {'M','Z','<','h','t','m','l','>',0xff}; -static BYTE data71[] = {'{','\\','r','t','f',0}; -static BYTE data72[] = {'{','\\','r','t','f'}; -static BYTE data73[] = {' ','{','\\','r','t','f',' '}; -static BYTE data74[] = {'{','\\','r','t','f','<','h','t','m','l','>',' '}; -static BYTE data75[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V','E',0xff}; -static BYTE data76[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V','E'}; -static BYTE data77[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V',0xff,0xff}; -static BYTE data78[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'<','h','t','m','l','>',0xff}; -static BYTE data79[] = {'%','!',0xff}; -static BYTE data80[] = {'%','!'}; -static BYTE data81[] = {'%','!','P','S','<','h','t','m','l','>'}; -static BYTE data82[] = {'.','s','n','d',0}; -static BYTE data83[] = {'.','s','n','d'}; -static BYTE data84[] = {'.','s','n','d',0,'<','h','t','m','l','>',1,1}; -static BYTE data85[] = {'.','S','N','D',0}; - -static const struct { - BYTE *data; - DWORD size; - LPCWSTR mime; -} mime_tests2[] = { - {data1, sizeof(data1), mimeTextPlain}, - {data2, sizeof(data2), mimeAppOctetStream}, - {data3, sizeof(data3), mimeAppOctetStream}, - {data4, sizeof(data4), mimeAppOctetStream}, - {data5, sizeof(data5), mimeTextPlain}, - {data6, sizeof(data6), mimeTextPlain}, - {data7, sizeof(data7), mimeTextHtml}, - {data8, sizeof(data8), mimeTextHtml}, - {data9, sizeof(data9), mimeTextHtml}, - {data10, sizeof(data10), mimeTextHtml}, - {data11, sizeof(data11), mimeTextHtml}, - {data12, sizeof(data12), mimeTextHtml}, - {data13, sizeof(data13), mimeTextPlain}, - {data14, sizeof(data14), mimeTextPlain}, - {data15, sizeof(data15), mimeTextPlain}, - {data16, sizeof(data16), mimeImagePjpeg}, - {data17, sizeof(data17), mimeAppOctetStream}, - {data18, sizeof(data18), mimeTextHtml}, - {data19, sizeof(data19), mimeImageGif}, - {data20, sizeof(data20), mimeImageGif}, - {data21, sizeof(data21), mimeTextPlain}, - {data22, sizeof(data22), mimeImageGif}, - {data23, sizeof(data23), mimeTextPlain}, - {data24, sizeof(data24), mimeImageGif}, - {data25, sizeof(data25), mimeImageGif}, - {data26, sizeof(data26), mimeTextHtml}, - {data27, sizeof(data27), mimeTextPlain}, - {data28, sizeof(data28), mimeImageBmp}, - {data29, sizeof(data29), mimeImageBmp}, - {data30, sizeof(data30), mimeAppOctetStream}, - {data31, sizeof(data31), mimeTextHtml}, - {data32, sizeof(data32), mimeAppOctetStream}, - {data33, sizeof(data33), mimeAppOctetStream}, - {data34, sizeof(data34), mimeImageXPng}, - {data35, sizeof(data35), mimeImageXPng}, - {data36, sizeof(data36), mimeAppOctetStream}, - {data37, sizeof(data37), mimeTextHtml}, - {data38, sizeof(data38), mimeAppOctetStream}, - {data39, sizeof(data39), mimeImageTiff}, - {data40, sizeof(data40), mimeTextHtml}, - {data41, sizeof(data41), mimeImageTiff}, - {data42, sizeof(data42), mimeTextPlain}, - {data43, sizeof(data43), mimeAppOctetStream}, - {data44, sizeof(data44), mimeVideoAvi}, - {data45, sizeof(data45), mimeTextPlain}, - {data46, sizeof(data46), mimeTextPlain}, - {data47, sizeof(data47), mimeTextPlain}, - {data48, sizeof(data48), mimeTextHtml}, - {data49, sizeof(data49), mimeVideoAvi}, - {data50, sizeof(data50), mimeVideoMpeg}, - {data51, sizeof(data51), mimeVideoMpeg}, - {data52, sizeof(data52), mimeAppOctetStream}, - {data53, sizeof(data53), mimeAppOctetStream}, - {data54, sizeof(data54), mimeTextHtml}, - {data55, sizeof(data55), mimeAppXGzip}, - {data56, sizeof(data56), mimeTextPlain}, - {data57, sizeof(data57), mimeTextHtml}, - {data58, sizeof(data58), mimeAppOctetStream}, - {data59, sizeof(data59), mimeAppXZip}, - {data60, sizeof(data60), mimeTextPlain}, - {data61, sizeof(data61), mimeTextHtml}, - {data62, sizeof(data62), mimeAppJava}, - {data63, sizeof(data63), mimeTextPlain}, - {data64, sizeof(data64), mimeTextHtml}, - {data65, sizeof(data65), mimeAppPdf}, - {data66, sizeof(data66), mimeTextPlain}, - {data67, sizeof(data67), mimeTextHtml}, - {data68, sizeof(data68), mimeAppXMSDownload}, - {data69, sizeof(data69), mimeTextPlain}, - {data70, sizeof(data70), mimeTextHtml}, - {data71, sizeof(data71), mimeTextRichtext}, - {data72, sizeof(data72), mimeTextPlain}, - {data73, sizeof(data73), mimeTextPlain}, - {data74, sizeof(data74), mimeTextHtml}, - {data75, sizeof(data75), mimeAudioWav}, - {data76, sizeof(data76), mimeTextPlain}, - {data77, sizeof(data77), mimeTextPlain}, - {data78, sizeof(data78), mimeTextHtml}, - {data79, sizeof(data79), mimeAppPostscript}, - {data80, sizeof(data80), mimeTextPlain}, - {data81, sizeof(data81), mimeTextHtml}, - {data82, sizeof(data82), mimeAudioBasic}, - {data83, sizeof(data83), mimeTextPlain}, - {data84, sizeof(data84), mimeTextHtml}, - {data85, sizeof(data85), mimeTextPlain} -}; - -static void test_FindMimeFromData(void) -{ - HRESULT hres; - LPWSTR mime; - int i; - - for(i=0; i 0, "size=%d, expected non-zero\n", size); - - size = 2; - str[0] = 'a'; - hres = ObtainUserAgentString(0, str, &size); - ok(hres == E_OUTOFMEMORY, "ObtainUserAgentString failed: %08x\n", hres); - ok(size > 0, "size=%d, expected non-zero\n", size); - ok(str[0] == 'a', "str[0]=%c, expected 'a'\n", str[0]); - - size = 0; - hres = ObtainUserAgentString(1, str, &size); - ok(hres == E_OUTOFMEMORY, "ObtainUserAgentString failed: %08x\n", hres); - ok(size > 0, "size=%d, expected non-zero\n", size); - - str2 = HeapAlloc(GetProcessHeap(), 0, (size+20)*sizeof(CHAR)); - if (!str2) - { - skip("skipping rest of ObtainUserAgent tests, out of memory\n"); - } - else - { - saved = size; - hres = ObtainUserAgentString(0, str2, &size); - ok(hres == S_OK, "ObtainUserAgentString failed: %08x\n", hres); - ok(size == saved, "size=%d, expected %d\n", size, saved); - ok(strlen(expected) <= strlen(str2) && - !memcmp(expected, str2, strlen(expected)*sizeof(CHAR)), - "user agent was \"%s\", expected to start with \"%s\"\n", - str2, expected); - - size = saved+10; - hres = ObtainUserAgentString(0, str2, &size); - ok(hres == S_OK, "ObtainUserAgentString failed: %08x\n", hres); - ok(size == saved, "size=%d, expected %d\n", size, saved); - } - HeapFree(GetProcessHeap(), 0, str2); -} - -static void test_MkParseDisplayNameEx(void) -{ - IMoniker *mon = NULL; - LPWSTR name; - DWORD issys; - ULONG eaten = 0; - IBindCtx *bctx; - HRESULT hres; - - static const WCHAR clsid_nameW[] = {'c','l','s','i','d',':', - '2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-','A','2','D','8', - '-','0','8','0','0','2','B','3','0','3','0','9','D',':',0}; - - CreateBindCtx(0, &bctx); - - hres = MkParseDisplayNameEx(bctx, url9, &eaten, &mon); - ok(hres == S_OK, "MkParseDisplayNameEx failed: %08x\n", hres); - ok(eaten == sizeof(url9)/sizeof(WCHAR)-1, "eaten=%d\n", eaten); - ok(mon != NULL, "mon == NULL\n"); - - hres = IMoniker_GetDisplayName(mon, NULL, 0, &name); - ok(hres == S_OK, "GetDiasplayName failed: %08x\n", hres); - ok(!lstrcmpW(name, url9), "wrong display name %s\n", debugstr_w(name)); - CoTaskMemFree(name); - - hres = IMoniker_IsSystemMoniker(mon, &issys); - ok(hres == S_OK, "IsSystemMoniker failed: %08x\n", hres); - ok(issys == MKSYS_URLMONIKER, "issys=%x\n", issys); - - IMoniker_Release(mon); - - hres = MkParseDisplayNameEx(bctx, clsid_nameW, &eaten, &mon); - ok(hres == S_OK, "MkParseDisplayNameEx failed: %08x\n", hres); - ok(eaten == sizeof(clsid_nameW)/sizeof(WCHAR)-1, "eaten=%d\n", eaten); - ok(mon != NULL, "mon == NULL\n"); - - hres = IMoniker_IsSystemMoniker(mon, &issys); - ok(hres == S_OK, "IsSystemMoniker failed: %08x\n", hres); - ok(issys == MKSYS_CLASSMONIKER, "issys=%x\n", issys); - - IMoniker_Release(mon); - - hres = MkParseDisplayNameEx(bctx, url8, &eaten, &mon); - ok(FAILED(hres), "MkParseDisplayNameEx succeeded: %08x\n", hres); - - IBindCtx_Release(bctx); -} - -START_TEST(misc) -{ - OleInitialize(NULL); - - register_protocols(); - - test_CreateFormatEnum(); - test_RegisterFormatEnumerator(); - test_CoInternetParseUrl(); - test_CoInternetCompareUrl(); - test_CoInternetQueryInfo(); - test_FindMimeFromData(); - test_SecurityManager(); - test_polices(); - test_ZoneManager(); - test_NameSpace(); - test_MimeFilter(); - test_ReleaseBindInfo(); - test_CopyStgMedium(); - test_UrlMkGetSessionOption(); - test_ObtainUserAgentString(); - test_MkParseDisplayNameEx(); - - OleUninitialize(); -} diff --git a/rostests/winetests/urlmon/protocol.c b/rostests/winetests/urlmon/protocol.c deleted file mode 100644 index 638a0d79f3d..00000000000 --- a/rostests/winetests/urlmon/protocol.c +++ /dev/null @@ -1,1970 +0,0 @@ -/* - * Copyright 2005-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 - */ - -#define COBJMACROS -#define CONST_VTABLE - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "ole2.h" -#include "urlmon.h" -#include "wininet.h" - -#define DEFINE_EXPECT(func) \ - static BOOL expect_ ## func = FALSE, called_ ## func = FALSE - -#define SET_EXPECT(func) \ - expect_ ## func = TRUE - -#define CHECK_EXPECT2(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_EXPECT(func) \ - do { \ - CHECK_EXPECT2(func); \ - expect_ ## func = FALSE; \ - }while(0) - -#define CHECK_CALLED(func) \ - do { \ - ok(called_ ## func, "expected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -#define CHECK_NOT_CALLED(func) \ - do { \ - ok(!called_ ## func, "unexpected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -#define CLEAR_CALLED(func) \ - expect_ ## func = called_ ## func = FALSE - -DEFINE_EXPECT(GetBindInfo); -DEFINE_EXPECT(ReportProgress_MIMETYPEAVAILABLE); -DEFINE_EXPECT(ReportProgress_DIRECTBIND); -DEFINE_EXPECT(ReportProgress_RAWMIMETYPE); -DEFINE_EXPECT(ReportProgress_FINDINGRESOURCE); -DEFINE_EXPECT(ReportProgress_CONNECTING); -DEFINE_EXPECT(ReportProgress_SENDINGREQUEST); -DEFINE_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE); -DEFINE_EXPECT(ReportProgress_VERIFIEDMIMETYPEAVAILABLE); -DEFINE_EXPECT(ReportProgress_PROTOCOLCLASSID); -DEFINE_EXPECT(ReportProgress_COOKIE_SENT); -DEFINE_EXPECT(ReportProgress_REDIRECTING); -DEFINE_EXPECT(ReportData); -DEFINE_EXPECT(ReportResult); -DEFINE_EXPECT(GetBindString_ACCEPT_MIMES); -DEFINE_EXPECT(GetBindString_USER_AGENT); -DEFINE_EXPECT(GetBindString_POST_COOKIE); -DEFINE_EXPECT(QueryService_HttpNegotiate); -DEFINE_EXPECT(QueryService_InternetProtocol); -DEFINE_EXPECT(BeginningTransaction); -DEFINE_EXPECT(GetRootSecurityId); -DEFINE_EXPECT(OnResponse); -DEFINE_EXPECT(Switch); -DEFINE_EXPECT(Continue); -DEFINE_EXPECT(CreateInstance); -DEFINE_EXPECT(Start); -DEFINE_EXPECT(Terminate); -DEFINE_EXPECT(Read); -DEFINE_EXPECT(SetPriority); -DEFINE_EXPECT(LockRequest); -DEFINE_EXPECT(UnlockRequest); - -static const WCHAR wszIndexHtml[] = {'i','n','d','e','x','.','h','t','m','l',0}; -static const WCHAR index_url[] = - {'f','i','l','e',':','i','n','d','e','x','.','h','t','m','l',0}; - -static const WCHAR acc_mimeW[] = {'*','/','*',0}; -static const WCHAR user_agentW[] = {'W','i','n','e',0}; -static const WCHAR text_htmlW[] = {'t','e','x','t','/','h','t','m','l',0}; -static const WCHAR hostW[] = {'w','w','w','.','w','i','n','e','h','q','.','o','r','g',0}; -static const WCHAR winehq_ipW[] = {'2','0','9','.','4','6','.','2','5','.','1','3','4',0}; -static const WCHAR emptyW[] = {0}; - -static HRESULT expect_hrResult; -static LPCWSTR file_name, http_url, expect_wsz; -static IInternetProtocol *http_protocol = NULL; -static BOOL first_data_notif = FALSE, http_is_first = FALSE, - http_post_test = FALSE; -static int state = 0, prot_state; -static DWORD bindf = 0, ex_priority = 0; -static IInternetProtocol *binding_protocol; -static IInternetBindInfo *prot_bind_info; -static IInternetProtocolSink *binding_sink; -static void *expect_pv; -static HANDLE event_complete, event_complete2; -static BOOL binding_test; -static PROTOCOLDATA protocoldata, *pdata; -static DWORD prot_read; - -static enum { - FILE_TEST, - HTTP_TEST, - MK_TEST, - BIND_TEST -} tested_protocol; - -static const WCHAR protocol_names[][10] = { - {'f','i','l','e',0}, - {'h','t','t','p',0}, - {'m','k',0}, - {'t','e','s','t',0} -}; - -static const WCHAR binding_urls[][30] = { - {'f','i','l','e',':','t','e','s','t','.','h','t','m','l',0}, - {'h','t','t','p',':','/','/','t','e','s','t','/','t','e','s','t','.','h','t','m','l',0}, - {'m','k',':','t','e','s','t',0}, - {'t','e','s','t',':','/','/','f','i','l','e','.','h','t','m','l',0} -}; - -static const char *debugstr_w(LPCWSTR str) -{ - static char buf[512]; - if(!str) - return "(null)"; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - -static const char *debugstr_guid(REFIID riid) -{ - static char buf[50]; - - sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], - riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], - riid->Data4[5], riid->Data4[6], riid->Data4[7]); - - return buf; -} - -static HRESULT WINAPI HttpNegotiate_QueryInterface(IHttpNegotiate2 *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IUnknown, riid) - || IsEqualGUID(&IID_IHttpNegotiate, riid) - || IsEqualGUID(&IID_IHttpNegotiate2, riid)) { - *ppv = iface; - return S_OK; - } - - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI HttpNegotiate_AddRef(IHttpNegotiate2 *iface) -{ - return 2; -} - -static ULONG WINAPI HttpNegotiate_Release(IHttpNegotiate2 *iface) -{ - return 1; -} - -static HRESULT WINAPI HttpNegotiate_BeginningTransaction(IHttpNegotiate2 *iface, LPCWSTR szURL, - LPCWSTR szHeaders, DWORD dwReserved, LPWSTR *pszAdditionalHeaders) -{ - LPWSTR addl_headers; - - static const WCHAR wszHeaders[] = - {'C','o','n','t','e','n','t','-','T','y','p','e',':',' ','a','p','p','l','i','c','a','t', - 'i','o','n','/','x','-','w','w','w','-','f','o','r','m','-','u','r','l','e','n','c','o', - 'd','e','d','\r','\n',0}; - - CHECK_EXPECT(BeginningTransaction); - - if(binding_test) - ok(!lstrcmpW(szURL, binding_urls[tested_protocol]), "szURL != http_url\n"); - else - ok(!lstrcmpW(szURL, http_url), "szURL != http_url\n"); - ok(!dwReserved, "dwReserved=%d, expected 0\n", dwReserved); - ok(pszAdditionalHeaders != NULL, "pszAdditionalHeaders == NULL\n"); - if(pszAdditionalHeaders) - { - ok(*pszAdditionalHeaders == NULL, "*pszAdditionalHeaders != NULL\n"); - if (http_post_test) - { - addl_headers = CoTaskMemAlloc(sizeof(wszHeaders)); - if (!addl_headers) - { - http_post_test = FALSE; - skip("Out of memory\n"); - return E_OUTOFMEMORY; - } - lstrcpyW(addl_headers, wszHeaders); - *pszAdditionalHeaders = addl_headers; - } - } - - return S_OK; -} - -static HRESULT WINAPI HttpNegotiate_OnResponse(IHttpNegotiate2 *iface, DWORD dwResponseCode, - LPCWSTR szResponseHeaders, LPCWSTR szRequestHeaders, LPWSTR *pszAdditionalRequestHeaders) -{ - CHECK_EXPECT(OnResponse); - - ok(dwResponseCode == 200, "dwResponseCode=%d, expected 200\n", dwResponseCode); - ok(szResponseHeaders != NULL, "szResponseHeaders == NULL\n"); - ok(szRequestHeaders == NULL, "szRequestHeaders != NULL\n"); - ok(pszAdditionalRequestHeaders == NULL, "pszAdditionalHeaders != NULL\n"); - - return S_OK; -} - -static HRESULT WINAPI HttpNegotiate_GetRootSecurityId(IHttpNegotiate2 *iface, - BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved) -{ - static const BYTE sec_id[] = {'h','t','t','p',':','t','e','s','t',1,0,0,0}; - - CHECK_EXPECT(GetRootSecurityId); - - ok(!dwReserved, "dwReserved=%ld, expected 0\n", dwReserved); - ok(pbSecurityId != NULL, "pbSecurityId == NULL\n"); - ok(pcbSecurityId != NULL, "pcbSecurityId == NULL\n"); - - if(pcbSecurityId) { - ok(*pcbSecurityId == 512, "*pcbSecurityId=%d, expected 512\n", *pcbSecurityId); - *pcbSecurityId = sizeof(sec_id); - } - - if(pbSecurityId) - memcpy(pbSecurityId, sec_id, sizeof(sec_id)); - - return E_FAIL; -} - -static IHttpNegotiate2Vtbl HttpNegotiateVtbl = { - HttpNegotiate_QueryInterface, - HttpNegotiate_AddRef, - HttpNegotiate_Release, - HttpNegotiate_BeginningTransaction, - HttpNegotiate_OnResponse, - HttpNegotiate_GetRootSecurityId -}; - -static IHttpNegotiate2 http_negotiate = { &HttpNegotiateVtbl }; - -static HRESULT QueryInterface(REFIID,void**); - -static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface) -{ - return 2; -} - -static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface) -{ - return 1; -} - -static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, - REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IHttpNegotiate, guidService) || IsEqualGUID(&IID_IHttpNegotiate2, riid)) { - CHECK_EXPECT2(QueryService_HttpNegotiate); - return IHttpNegotiate2_QueryInterface(&http_negotiate, riid, ppv); - } - - if(IsEqualGUID(&IID_IInternetProtocol, guidService)) { - ok(IsEqualGUID(&IID_IInternetProtocol, riid), "unexpected riid\n"); - CHECK_EXPECT(QueryService_InternetProtocol); - return E_NOINTERFACE; - } - - ok(0, "unexpected service %s\n", debugstr_guid(guidService)); - return E_FAIL; -} - -static const IServiceProviderVtbl ServiceProviderVtbl = { - ServiceProvider_QueryInterface, - ServiceProvider_AddRef, - ServiceProvider_Release, - ServiceProvider_QueryService -}; - -static IServiceProvider service_provider = { &ServiceProviderVtbl }; - -static HRESULT WINAPI ProtocolSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv) -{ - return QueryInterface(riid, ppv); -} - -static ULONG WINAPI ProtocolSink_AddRef(IInternetProtocolSink *iface) -{ - return 2; -} - -static ULONG WINAPI ProtocolSink_Release(IInternetProtocolSink *iface) -{ - return 1; -} - -static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOLDATA *pProtocolData) -{ - HRESULT hres; - - CHECK_EXPECT(Switch); - ok(pProtocolData != NULL, "pProtocolData == NULL\n"); - - pdata = pProtocolData; - - if(binding_test) { - SetEvent(event_complete); - WaitForSingleObject(event_complete2, INFINITE); - return S_OK; - } - - if (!state) { - if (http_is_first) { - CHECK_CALLED(ReportProgress_FINDINGRESOURCE); - CHECK_CALLED(ReportProgress_CONNECTING); - } else todo_wine { - CHECK_NOT_CALLED(ReportProgress_FINDINGRESOURCE); - CHECK_NOT_CALLED(ReportProgress_CONNECTING); - } - CHECK_CALLED(ReportProgress_SENDINGREQUEST); - SET_EXPECT(OnResponse); - SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); - if(bindf & BINDF_NEEDFILE) - SET_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE); - } - - SET_EXPECT(ReportData); - hres = IInternetProtocol_Continue(http_protocol, pProtocolData); - ok(hres == S_OK, "Continue failed: %08x\n", hres); - CHECK_CALLED(ReportData); - - if (!state) { - state = 1; - CHECK_CALLED(OnResponse); - CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); - if(bindf & BINDF_NEEDFILE) - CHECK_CALLED(ReportProgress_CACHEFILENAMEAVAILABLE); - } - - SetEvent(event_complete); - - return S_OK; -} - -static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface, ULONG ulStatusCode, - LPCWSTR szStatusText) -{ - static const WCHAR null_guid[] = {'{','0','0','0','0','0','0','0','0','-','0','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 WCHAR text_plain[] = {'t','e','x','t','/','p','l','a','i','n',0}; - static const WCHAR post_host[] = - {'c','r','o','s','s','o','v','e','r','.','c','o','d','e', - 'w','e','a','v','e','r','s','.','c','o','m',0}; - static const WCHAR wszCrossoverIP[] = - {'2','0','9','.','4','6','.','2','5','.','1','3','2',0}; - /* I'm not sure if it's a good idea to hardcode here the IP address... */ - - switch(ulStatusCode) { - case BINDSTATUS_MIMETYPEAVAILABLE: - CHECK_EXPECT(ReportProgress_MIMETYPEAVAILABLE); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) { - if(tested_protocol == BIND_TEST) - ok(szStatusText == expect_wsz, "unexpected szStatusText\n"); - else if (http_post_test) - ok(lstrlenW(text_plain) <= lstrlenW(szStatusText) && - !memcmp(szStatusText, text_plain, lstrlenW(text_plain)*sizeof(WCHAR)), - "szStatusText != text/plain\n"); - else - ok(lstrlenW(text_htmlW) <= lstrlenW(szStatusText) && - !memcmp(szStatusText, text_htmlW, lstrlenW(text_htmlW)*sizeof(WCHAR)), - "szStatusText != text/html\n"); - } - break; - case BINDSTATUS_DIRECTBIND: - CHECK_EXPECT2(ReportProgress_DIRECTBIND); - ok(szStatusText == NULL, "szStatusText != NULL\n"); - break; - case BINDSTATUS_RAWMIMETYPE: - CHECK_EXPECT2(ReportProgress_RAWMIMETYPE); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) - ok(lstrlenW(szStatusText) < lstrlenW(text_htmlW) || - !memcmp(szStatusText, text_htmlW, lstrlenW(text_htmlW)*sizeof(WCHAR)), - "szStatusText != text/html\n"); - break; - case BINDSTATUS_CACHEFILENAMEAVAILABLE: - CHECK_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) { - if(binding_test) - ok(!lstrcmpW(szStatusText, expect_wsz), "unexpected szStatusText\n"); - else if(tested_protocol == FILE_TEST) - ok(!lstrcmpW(szStatusText, file_name), "szStatusText = \"%s\"\n", debugstr_w(szStatusText)); - else - ok(szStatusText != NULL, "szStatusText == NULL\n"); - } - break; - case BINDSTATUS_FINDINGRESOURCE: - CHECK_EXPECT(ReportProgress_FINDINGRESOURCE); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) - { - if (!http_post_test) - ok(!lstrcmpW(szStatusText, hostW), - "szStatustext != \"www.winehq.org\"\n"); - else - ok(!lstrcmpW(szStatusText, post_host), - "szStatustext != \"crossover.codeweavers.com\"\n"); - } - break; - case BINDSTATUS_CONNECTING: - CHECK_EXPECT(ReportProgress_CONNECTING); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) - ok(!lstrcmpW(szStatusText, http_post_test ? - wszCrossoverIP : winehq_ipW), - "Unexpected szStatusText\n"); - break; - case BINDSTATUS_SENDINGREQUEST: - CHECK_EXPECT(ReportProgress_SENDINGREQUEST); - if(tested_protocol == FILE_TEST) { - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) - ok(!*szStatusText, "wrong szStatusText\n"); - } - break; - case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE: - CHECK_EXPECT(ReportProgress_VERIFIEDMIMETYPEAVAILABLE); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) - ok(!lstrcmpW(szStatusText, text_htmlW), "szStatusText != text/html\n"); - break; - case BINDSTATUS_PROTOCOLCLASSID: - CHECK_EXPECT(ReportProgress_PROTOCOLCLASSID); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - ok(!lstrcmpW(szStatusText, null_guid), "unexpected szStatusText\n"); - break; - case BINDSTATUS_COOKIE_SENT: - CHECK_EXPECT(ReportProgress_COOKIE_SENT); - ok(szStatusText == NULL, "szStatusText != NULL\n"); - break; - case BINDSTATUS_REDIRECTING: - CHECK_EXPECT(ReportProgress_REDIRECTING); - ok(szStatusText == NULL, "szStatusText != NULL\n"); - break; - default: - ok(0, "Unexpected status %d\n", ulStatusCode); - }; - - return S_OK; -} - -static HRESULT WINAPI ProtocolSink_ReportData(IInternetProtocolSink *iface, DWORD grfBSCF, - ULONG ulProgress, ULONG ulProgressMax) -{ - if(tested_protocol == FILE_TEST) { - CHECK_EXPECT2(ReportData); - - ok(ulProgress == ulProgressMax, "ulProgress (%d) != ulProgressMax (%d)\n", - ulProgress, ulProgressMax); - ok(ulProgressMax == 13, "ulProgressMax=%d, expected 13\n", ulProgressMax); - ok(grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION), - "grcfBSCF = %08x\n", grfBSCF); - }else if(!binding_test && tested_protocol == HTTP_TEST) { - if(!(grfBSCF & BSCF_LASTDATANOTIFICATION)) - CHECK_EXPECT(ReportData); - else if (http_post_test) - ok(ulProgress == 13, "Read %u bytes instead of 13\n", ulProgress); - - ok(ulProgress, "ulProgress == 0\n"); - - if(first_data_notif) { - ok(grfBSCF == BSCF_FIRSTDATANOTIFICATION, "grcfBSCF = %08x\n", grfBSCF); - first_data_notif = FALSE; - } else { - ok(grfBSCF == BSCF_INTERMEDIATEDATANOTIFICATION - || grfBSCF == (BSCF_LASTDATANOTIFICATION|BSCF_INTERMEDIATEDATANOTIFICATION), - "grcfBSCF = %08x\n", grfBSCF); - } - - if(!(bindf & BINDF_FROMURLMON) && - !(grfBSCF & BSCF_LASTDATANOTIFICATION)) { - if(!state) { - state = 1; - if(http_is_first) { - CHECK_CALLED(ReportProgress_FINDINGRESOURCE); - CHECK_CALLED(ReportProgress_CONNECTING); - } else todo_wine { - CHECK_NOT_CALLED(ReportProgress_FINDINGRESOURCE); - CHECK_NOT_CALLED(ReportProgress_CONNECTING); - } - CHECK_CALLED(ReportProgress_SENDINGREQUEST); - CHECK_CALLED(OnResponse); - CHECK_CALLED(ReportProgress_RAWMIMETYPE); - } - SetEvent(event_complete); - } - }else { - BYTE buf[1000]; - ULONG read; - HRESULT hres; - - CHECK_EXPECT(ReportData); - - if(tested_protocol == BIND_TEST) - return S_OK; - - do { - SET_EXPECT(Read); - hres = IInternetProtocol_Read(binding_protocol, expect_pv=buf, sizeof(buf), &read); - CHECK_CALLED(Read); - }while(hres == S_OK); - } - - return S_OK; -} - -static HRESULT WINAPI ProtocolSink_ReportResult(IInternetProtocolSink *iface, HRESULT hrResult, - DWORD dwError, LPCWSTR szResult) -{ - CHECK_EXPECT(ReportResult); - - ok(hrResult == expect_hrResult, "hrResult = %08x, expected: %08x\n", - hrResult, expect_hrResult); - if(SUCCEEDED(hrResult)) - ok(dwError == ERROR_SUCCESS, "dwError = %d, expected ERROR_SUCCESS\n", dwError); - else - ok(dwError != ERROR_SUCCESS, "dwError == ERROR_SUCCESS\n"); - ok(!szResult, "szResult != NULL\n"); - - return S_OK; -} - -static IInternetProtocolSinkVtbl protocol_sink_vtbl = { - ProtocolSink_QueryInterface, - ProtocolSink_AddRef, - ProtocolSink_Release, - ProtocolSink_Switch, - ProtocolSink_ReportProgress, - ProtocolSink_ReportData, - ProtocolSink_ReportResult -}; - -static IInternetProtocolSink protocol_sink = { &protocol_sink_vtbl }; - -static HRESULT QueryInterface(REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocolSink, riid)) - *ppv = &protocol_sink; - if(IsEqualGUID(&IID_IServiceProvider, riid)) - *ppv = &service_provider; - - if(*ppv) - return S_OK; - - return E_NOINTERFACE; -} - -static HRESULT WINAPI BindInfo_QueryInterface(IInternetBindInfo *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetBindInfo, riid)) { - *ppv = iface; - return S_OK; - } - return E_NOINTERFACE; -} - -static ULONG WINAPI BindInfo_AddRef(IInternetBindInfo *iface) -{ - return 2; -} - -static ULONG WINAPI BindInfo_Release(IInternetBindInfo *iface) -{ - return 1; -} - -static HRESULT WINAPI BindInfo_GetBindInfo(IInternetBindInfo *iface, DWORD *grfBINDF, BINDINFO *pbindinfo) -{ - DWORD cbSize; - - static const CHAR szPostData[] = "mode=Test"; - - CHECK_EXPECT(GetBindInfo); - - ok(grfBINDF != NULL, "grfBINDF == NULL\n"); - ok(pbindinfo != NULL, "pbindinfo == NULL\n"); - ok(pbindinfo->cbSize == sizeof(BINDINFO), "wrong size of pbindinfo: %d\n", pbindinfo->cbSize); - - *grfBINDF = bindf; - if(binding_test) - *grfBINDF |= BINDF_FROMURLMON; - cbSize = pbindinfo->cbSize; - memset(pbindinfo, 0, cbSize); - pbindinfo->cbSize = cbSize; - - if (http_post_test) - { - /* Must be GMEM_FIXED, GMEM_MOVABLE does not work properly - * with urlmon on native (Win98 and WinXP) */ - U(pbindinfo->stgmedData).hGlobal = GlobalAlloc(GPTR, sizeof(szPostData)); - if (!U(pbindinfo->stgmedData).hGlobal) - { - http_post_test = FALSE; - skip("Out of memory\n"); - return E_OUTOFMEMORY; - } - lstrcpy((LPSTR)U(pbindinfo->stgmedData).hGlobal, szPostData); - pbindinfo->cbstgmedData = sizeof(szPostData)-1; - pbindinfo->dwBindVerb = BINDVERB_POST; - pbindinfo->stgmedData.tymed = TYMED_HGLOBAL; - } - - return S_OK; -} - -static HRESULT WINAPI BindInfo_GetBindString(IInternetBindInfo *iface, ULONG ulStringType, - LPOLESTR *ppwzStr, ULONG cEl, ULONG *pcElFetched) -{ - ok(ppwzStr != NULL, "ppwzStr == NULL\n"); - ok(pcElFetched != NULL, "pcElFetched == NULL\n"); - - switch(ulStringType) { - case BINDSTRING_ACCEPT_MIMES: - CHECK_EXPECT(GetBindString_ACCEPT_MIMES); - ok(cEl == 256, "cEl=%d, expected 256\n", cEl); - if(pcElFetched) { - ok(*pcElFetched == 256, "*pcElFetched=%d, expected 256\n", *pcElFetched); - *pcElFetched = 1; - } - if(ppwzStr) { - *ppwzStr = CoTaskMemAlloc(sizeof(acc_mimeW)); - memcpy(*ppwzStr, acc_mimeW, sizeof(acc_mimeW)); - } - return S_OK; - case BINDSTRING_USER_AGENT: - CHECK_EXPECT(GetBindString_USER_AGENT); - ok(cEl == 1, "cEl=%d, expected 1\n", cEl); - if(pcElFetched) { - ok(*pcElFetched == 0, "*pcElFetch=%d, expectd 0\n", *pcElFetched); - *pcElFetched = 1; - } - if(ppwzStr) { - *ppwzStr = CoTaskMemAlloc(sizeof(user_agentW)); - memcpy(*ppwzStr, user_agentW, sizeof(user_agentW)); - } - return S_OK; - case BINDSTRING_POST_COOKIE: - CHECK_EXPECT(GetBindString_POST_COOKIE); - ok(cEl == 1, "cEl=%d, expected 1\n", cEl); - if(pcElFetched) - ok(*pcElFetched == 0, "*pcElFetch=%d, expectd 0\n", *pcElFetched); - return S_OK; - default: - ok(0, "unexpected call\n"); - } - - return E_NOTIMPL; -} - -static IInternetBindInfoVtbl bind_info_vtbl = { - BindInfo_QueryInterface, - BindInfo_AddRef, - BindInfo_Release, - BindInfo_GetBindInfo, - BindInfo_GetBindString -}; - -static IInternetBindInfo bind_info = { &bind_info_vtbl }; - -static HRESULT WINAPI InternetPriority_QueryInterface(IInternetPriority *iface, - REFIID riid, void **ppv) -{ - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI InternetPriority_AddRef(IInternetPriority *iface) -{ - return 2; -} - -static ULONG WINAPI InternetPriority_Release(IInternetPriority *iface) -{ - return 1; -} - -static HRESULT WINAPI InternetPriority_SetPriority(IInternetPriority *iface, LONG nPriority) -{ - CHECK_EXPECT(SetPriority); - ok(nPriority == ex_priority, "nPriority=%d\n", nPriority); - return S_OK; -} - -static HRESULT WINAPI InternetPriority_GetPriority(IInternetPriority *iface, LONG *pnPriority) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - - -static const IInternetPriorityVtbl InternetPriorityVtbl = { - InternetPriority_QueryInterface, - InternetPriority_AddRef, - InternetPriority_Release, - InternetPriority_SetPriority, - InternetPriority_GetPriority -}; - -static IInternetPriority InternetPriority = { &InternetPriorityVtbl }; - -static HRESULT WINAPI Protocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocol, riid)) { - *ppv = iface; - return S_OK; - } - - if(IsEqualGUID(&IID_IInternetPriority, riid)) { - *ppv = &InternetPriority; - return S_OK; - } - - ok(0, "unexpected riid %s\n", debugstr_guid(riid)); - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Protocol_AddRef(IInternetProtocol *iface) -{ - return 2; -} - -static ULONG WINAPI Protocol_Release(IInternetProtocol *iface) -{ - return 1; -} - -static DWORD WINAPI thread_proc(PVOID arg) -{ - HRESULT hres; - - memset(&protocoldata, -1, sizeof(protocoldata)); - - prot_state = 0; - - SET_EXPECT(ReportProgress_FINDINGRESOURCE); - hres = IInternetProtocolSink_ReportProgress(binding_sink, - BINDSTATUS_FINDINGRESOURCE, hostW); - CHECK_CALLED(ReportProgress_FINDINGRESOURCE); - ok(hres == S_OK, "ReportProgress failed: %08x\n", hres); - - SET_EXPECT(ReportProgress_CONNECTING); - hres = IInternetProtocolSink_ReportProgress(binding_sink, - BINDSTATUS_CONNECTING, winehq_ipW); - CHECK_CALLED(ReportProgress_CONNECTING); - ok(hres == S_OK, "ReportProgress failed: %08x\n", hres); - - SET_EXPECT(ReportProgress_SENDINGREQUEST); - hres = IInternetProtocolSink_ReportProgress(binding_sink, - BINDSTATUS_SENDINGREQUEST, NULL); - CHECK_CALLED(ReportProgress_SENDINGREQUEST); - ok(hres == S_OK, "ReportProgress failed: %08x\n", hres); - - prot_state = 1; - SET_EXPECT(Switch); - hres = IInternetProtocolSink_Switch(binding_sink, &protocoldata); - CHECK_CALLED(Switch); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - - prot_state = 2; - SET_EXPECT(Switch); - hres = IInternetProtocolSink_Switch(binding_sink, &protocoldata); - CHECK_CALLED(Switch); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - - prot_state = 2; - SET_EXPECT(Switch); - hres = IInternetProtocolSink_Switch(binding_sink, &protocoldata); - CHECK_CALLED(Switch); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - - prot_state = 3; - SET_EXPECT(Switch); - hres = IInternetProtocolSink_Switch(binding_sink, &protocoldata); - CHECK_CALLED(Switch); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - - SetEvent(event_complete); - - return 0; -} - -static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, - IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, - DWORD grfPI, DWORD dwReserved) -{ - BINDINFO bindinfo, exp_bindinfo; - DWORD cbindf = 0; - HRESULT hres; - - CHECK_EXPECT(Start); - - ok(pOIProtSink != NULL, "pOIProtSink == NULL\n"); - ok(pOIBindInfo != NULL, "pOIBindInfo == NULL\n"); - ok(pOIProtSink != &protocol_sink, "unexpected pOIProtSink\n"); - ok(pOIBindInfo != &bind_info, "unexpected pOIBindInfo\n"); - ok(!grfPI, "grfPI = %x\n", grfPI); - ok(!dwReserved, "dwReserved = %d\n", dwReserved); - - memset(&bindinfo, 0, sizeof(bindinfo)); - bindinfo.cbSize = sizeof(bindinfo); - memcpy(&exp_bindinfo, &bindinfo, sizeof(bindinfo)); - SET_EXPECT(GetBindInfo); - hres = IInternetBindInfo_GetBindInfo(pOIBindInfo, &cbindf, &bindinfo); - ok(hres == S_OK, "GetBindInfo failed: %08x\n", hres); - CHECK_CALLED(GetBindInfo); - ok(cbindf == (bindf|BINDF_FROMURLMON), "bindf = %x, expected %x\n", - cbindf, (bindf|BINDF_FROMURLMON)); - ok(!memcmp(&exp_bindinfo, &bindinfo, sizeof(bindinfo)), "unexpected bindinfo\n"); - ReleaseBindInfo(&bindinfo); - - SET_EXPECT(ReportProgress_SENDINGREQUEST); - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_SENDINGREQUEST, emptyW); - ok(hres == S_OK, "ReportProgress(BINDSTATUS_SENDINGREQUEST) failed: %08x\n", hres); - CHECK_CALLED(ReportProgress_SENDINGREQUEST); - - if(tested_protocol == HTTP_TEST) { - IServiceProvider *service_provider; - IHttpNegotiate *http_negotiate; - IHttpNegotiate2 *http_negotiate2; - LPWSTR ua = (LPWSTR)0xdeadbeef, accept_mimes[256]; - LPWSTR additional_headers = NULL; - BYTE sec_id[100]; - DWORD fetched = 0, size = 100; - - SET_EXPECT(GetBindString_USER_AGENT); - hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_USER_AGENT, - &ua, 1, &fetched); - CHECK_CALLED(GetBindString_USER_AGENT); - ok(hres == S_OK, "GetBindString(BINDSTRING_USER_AGETNT) failed: %08x\n", hres); - ok(fetched == 1, "fetched = %d, expected 254\n", fetched); - ok(ua != NULL, "ua = %p\n", ua); - ok(!lstrcmpW(ua, user_agentW), "unexpected user agent %s\n", debugstr_w(ua)); - CoTaskMemFree(ua); - - fetched = 256; - SET_EXPECT(GetBindString_ACCEPT_MIMES); - hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_ACCEPT_MIMES, - accept_mimes, 256, &fetched); - CHECK_CALLED(GetBindString_ACCEPT_MIMES); - - ok(hres == S_OK, - "GetBindString(BINDSTRING_ACCEPT_MIMES) failed: %08x\n", hres); - ok(fetched == 1, "fetched = %d, expected 1\n", fetched); - ok(!lstrcmpW(acc_mimeW, accept_mimes[0]), "unexpected mimes %s\n", debugstr_w(accept_mimes[0])); - - hres = IInternetBindInfo_QueryInterface(pOIBindInfo, &IID_IServiceProvider, - (void**)&service_provider); - ok(hres == S_OK, "QueryInterface failed: %08x\n", hres); - - SET_EXPECT(QueryService_HttpNegotiate); - hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate, - &IID_IHttpNegotiate, (void**)&http_negotiate); - CHECK_CALLED(QueryService_HttpNegotiate); - ok(hres == S_OK, "QueryService failed: %08x\n", hres); - - SET_EXPECT(BeginningTransaction); - hres = IHttpNegotiate_BeginningTransaction(http_negotiate, binding_urls[tested_protocol], - NULL, 0, &additional_headers); - CHECK_CALLED(BeginningTransaction); - IHttpNegotiate_Release(http_negotiate); - ok(hres == S_OK, "BeginningTransction failed: %08x\n", hres); - ok(additional_headers == NULL, "additional_headers=%p\n", additional_headers); - - SET_EXPECT(QueryService_HttpNegotiate); - hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate2, - &IID_IHttpNegotiate2, (void**)&http_negotiate2); - CHECK_CALLED(QueryService_HttpNegotiate); - ok(hres == S_OK, "QueryService failed: %08x\n", hres); - - size = 512; - SET_EXPECT(GetRootSecurityId); - hres = IHttpNegotiate2_GetRootSecurityId(http_negotiate2, sec_id, &size, 0); - CHECK_CALLED(GetRootSecurityId); - IHttpNegotiate2_Release(http_negotiate2); - ok(hres == E_FAIL, "GetRootSecurityId failed: %08x, expected E_FAIL\n", hres); - ok(size == 13, "size=%d\n", size); - - IServiceProvider_Release(service_provider); - - CreateThread(NULL, 0, thread_proc, NULL, 0, NULL); - - return S_OK; - } - - SET_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE); - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, - BINDSTATUS_CACHEFILENAMEAVAILABLE, expect_wsz = emptyW); - ok(hres == S_OK, "ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE) failed: %08x\n", hres); - CHECK_CALLED(ReportProgress_CACHEFILENAMEAVAILABLE); - - SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, - expect_wsz = text_htmlW); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE) failed: %08x\n", hres); - CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); - - SET_EXPECT(ReportData); - hres = IInternetProtocolSink_ReportData(pOIProtSink, - BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION, 13, 13); - ok(hres == S_OK, "ReportData failed: %08x\n", hres); - CHECK_CALLED(ReportData); - - if(tested_protocol == BIND_TEST) { - hres = IInternetProtocol_Terminate(binding_protocol, 0); - ok(hres == E_FAIL, "Termiante failed: %08x\n", hres); - } - - SET_EXPECT(ReportResult); - hres = IInternetProtocolSink_ReportResult(pOIProtSink, S_OK, 0, NULL); - ok(hres == S_OK, "ReportResult failed: %08x\n", hres); - CHECK_CALLED(ReportResult); - - return S_OK; -} - -static HRESULT WINAPI Protocol_Continue(IInternetProtocol *iface, - PROTOCOLDATA *pProtocolData) -{ - DWORD bscf = 0; - HRESULT hres; - - CHECK_EXPECT(Continue); - - ok(pProtocolData != NULL, "pProtocolData == NULL\n"); - if(!pProtocolData || tested_protocol == BIND_TEST) - return S_OK; - - switch(prot_state) { - case 1: { - IServiceProvider *service_provider; - IHttpNegotiate *http_negotiate; - static WCHAR header[] = {'?',0}; - - hres = IInternetProtocolSink_QueryInterface(binding_sink, &IID_IServiceProvider, - (void**)&service_provider); - ok(hres == S_OK, "Could not get IServiceProvicder\n"); - - SET_EXPECT(QueryService_HttpNegotiate); - hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate, - &IID_IHttpNegotiate, (void**)&http_negotiate); - IServiceProvider_Release(service_provider); - CHECK_CALLED(QueryService_HttpNegotiate); - ok(hres == S_OK, "Could not get IHttpNegotiate\n"); - - SET_EXPECT(OnResponse); - hres = IHttpNegotiate_OnResponse(http_negotiate, 200, header, NULL, NULL); - IHttpNegotiate_Release(http_negotiate); - CHECK_CALLED(OnResponse); - IHttpNegotiate_Release(http_negotiate); - ok(hres == S_OK, "OnResponse failed: %08x\n", hres); - - SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); - hres = IInternetProtocolSink_ReportProgress(binding_sink, - BINDSTATUS_MIMETYPEAVAILABLE, text_htmlW); - CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08x\n", hres); - - bscf |= BSCF_FIRSTDATANOTIFICATION; - break; - } - case 2: - case 3: - bscf = BSCF_INTERMEDIATEDATANOTIFICATION; - break; - } - - SET_EXPECT(ReportData); - hres = IInternetProtocolSink_ReportData(binding_sink, bscf, 100, 400); - CHECK_CALLED(ReportData); - ok(hres == S_OK, "ReportData failed: %08x\n", hres); - - if(prot_state == 3) - prot_state = 4; - - return S_OK; -} - -static HRESULT WINAPI Protocol_Abort(IInternetProtocol *iface, HRESULT hrReason, - DWORD dwOptions) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Terminate(IInternetProtocol *iface, DWORD dwOptions) -{ - CHECK_EXPECT(Terminate); - ok(!dwOptions, "dwOptions=%d\n", dwOptions); - return S_OK; -} - -static HRESULT WINAPI Protocol_Suspend(IInternetProtocol *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Resume(IInternetProtocol *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv, - ULONG cb, ULONG *pcbRead) -{ - static BOOL b = TRUE; - - CHECK_EXPECT(Read); - - ok(pv == expect_pv, "pv != expect_pv\n"); - ok(cb == 1000, "cb=%d\n", cb); - ok(pcbRead != NULL, "pcbRead == NULL\n"); - ok(!*pcbRead, "*pcbRead = %d\n", *pcbRead); - - if(prot_state == 3) { - HRESULT hres; - - SET_EXPECT(ReportResult); - hres = IInternetProtocolSink_ReportResult(binding_sink, S_OK, ERROR_SUCCESS, NULL); - CHECK_CALLED(ReportResult); - - return S_FALSE; - } - - if((b = !b)) - return tested_protocol == HTTP_TEST ? E_PENDING : S_FALSE; - - memset(pv, 'x', 100); - prot_read += *pcbRead = 100; - return S_OK; -} - -static HRESULT WINAPI Protocol_Seek(IInternetProtocol *iface, - LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions) -{ - CHECK_EXPECT(LockRequest); - ok(dwOptions == 0, "dwOptions=%x\n", dwOptions); - return S_OK; -} - -static HRESULT WINAPI Protocol_UnlockRequest(IInternetProtocol *iface) -{ - CHECK_EXPECT(UnlockRequest); - return S_OK; -} - -static const IInternetProtocolVtbl ProtocolVtbl = { - Protocol_QueryInterface, - Protocol_AddRef, - Protocol_Release, - Protocol_Start, - Protocol_Continue, - Protocol_Abort, - Protocol_Terminate, - Protocol_Suspend, - Protocol_Resume, - Protocol_Read, - Protocol_Seek, - Protocol_LockRequest, - Protocol_UnlockRequest -}; - -static IInternetProtocol Protocol = { &ProtocolVtbl }; - -static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) -{ - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) -{ - return 2; -} - -static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) -{ - return 1; -} - -static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *pOuter, - REFIID riid, void **ppv) -{ - CHECK_EXPECT(CreateInstance); - - ok(pOuter == (IUnknown*)prot_bind_info, "pOuter != protocol_unk\n"); - ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", debugstr_guid(riid)); - ok(ppv != NULL, "ppv == NULL\n"); - - *ppv = &Protocol; - return S_OK; -} - -static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock) -{ - ok(0, "unexpected call\n"); - return S_OK; -} - -static const IClassFactoryVtbl ClassFactoryVtbl = { - ClassFactory_QueryInterface, - ClassFactory_AddRef, - ClassFactory_Release, - ClassFactory_CreateInstance, - ClassFactory_LockServer -}; - -static IClassFactory ClassFactory = { &ClassFactoryVtbl }; - -static void test_priority(IInternetProtocol *protocol) -{ - IInternetPriority *priority; - LONG pr; - HRESULT hres; - - hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, - (void**)&priority); - ok(hres == S_OK, "QueryInterface(IID_IInternetPriority) failed: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = IInternetPriority_GetPriority(priority, &pr); - ok(hres == S_OK, "GetPriority failed: %08x\n", hres); - ok(pr == 0, "pr=%d, expected 0\n", pr); - - hres = IInternetPriority_SetPriority(priority, 1); - ok(hres == S_OK, "SetPriority failed: %08x\n", hres); - - hres = IInternetPriority_GetPriority(priority, &pr); - ok(hres == S_OK, "GetPriority failed: %08x\n", hres); - ok(pr == 1, "pr=%d, expected 1\n", pr); - - IInternetPriority_Release(priority); -} - -static void file_protocol_start(IInternetProtocol *protocol, LPCWSTR url, BOOL is_first) -{ - HRESULT hres; - - SET_EXPECT(GetBindInfo); - if(!(bindf & BINDF_FROMURLMON)) - SET_EXPECT(ReportProgress_DIRECTBIND); - if(is_first) { - SET_EXPECT(ReportProgress_SENDINGREQUEST); - SET_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE); - if(bindf & BINDF_FROMURLMON) - SET_EXPECT(ReportProgress_VERIFIEDMIMETYPEAVAILABLE); - else - SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); - } - SET_EXPECT(ReportData); - if(is_first) - SET_EXPECT(ReportResult); - - expect_hrResult = S_OK; - - hres = IInternetProtocol_Start(protocol, url, &protocol_sink, &bind_info, 0, 0); - ok(hres == S_OK, "Start failed: %08x\n", hres); - - CHECK_CALLED(GetBindInfo); - if(!(bindf & BINDF_FROMURLMON)) - CHECK_CALLED(ReportProgress_DIRECTBIND); - if(is_first) { - CHECK_CALLED(ReportProgress_SENDINGREQUEST); - CHECK_CALLED(ReportProgress_CACHEFILENAMEAVAILABLE); - if(bindf & BINDF_FROMURLMON) - CHECK_CALLED(ReportProgress_VERIFIEDMIMETYPEAVAILABLE); - else - CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); - } - CHECK_CALLED(ReportData); - if(is_first) - CHECK_CALLED(ReportResult); -} - -static void test_file_protocol_url(LPCWSTR url) -{ - IInternetProtocolInfo *protocol_info; - IUnknown *unk; - IClassFactory *factory; - HRESULT hres; - - hres = CoGetClassObject(&CLSID_FileProtocol, CLSCTX_INPROC_SERVER, NULL, - &IID_IUnknown, (void**)&unk); - ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres); - if(!SUCCEEDED(hres)) - return; - - hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&protocol_info); - ok(hres == E_NOINTERFACE, - "Could not get IInternetProtocolInfo interface: %08x, expected E_NOINTERFACE\n", hres); - - hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&factory); - ok(hres == S_OK, "Could not get IClassFactory interface\n"); - if(SUCCEEDED(hres)) { - IInternetProtocol *protocol; - BYTE buf[512]; - ULONG cb; - hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol, (void**)&protocol); - ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres); - - if(SUCCEEDED(hres)) { - file_protocol_start(protocol, url, TRUE); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - ok(cb == 2, "cb=%u expected 2\n", cb); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_FALSE, "Read failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, sizeof(buf), &cb); - ok(hres == S_FALSE, "Read failed: %08x expected S_FALSE\n", hres); - ok(cb == 0, "cb=%u expected 0\n", cb); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - - file_protocol_start(protocol, url, FALSE); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_FALSE, "Read failed: %08x\n", hres); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - - IInternetProtocol_Release(protocol); - } - - hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol, (void**)&protocol); - ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres); - - if(SUCCEEDED(hres)) { - file_protocol_start(protocol, url, TRUE); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Terminate(protocol, 0); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n\n", hres); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - hres = IInternetProtocol_Terminate(protocol, 0); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - - IInternetProtocol_Release(protocol); - } - - hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol, (void**)&protocol); - ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres); - - if(SUCCEEDED(hres)) { - file_protocol_start(protocol, url, TRUE); - hres = IInternetProtocol_Terminate(protocol, 0); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - hres = IInternetProtocol_Read(protocol, buf, 2, &cb); - ok(hres == S_OK, "Read failed: %08x\n", hres); - ok(cb == 2, "cb=%u expected 2\n", cb); - - IInternetProtocol_Release(protocol); - } - - IClassFactory_Release(factory); - } - - IUnknown_Release(unk); -} - -static void test_file_protocol_fail(void) -{ - IInternetProtocol *protocol; - HRESULT hres; - - static const WCHAR index_url2[] = - {'f','i','l','e',':','/','/','i','n','d','e','x','.','h','t','m','l',0}; - - hres = CoCreateInstance(&CLSID_FileProtocol, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, - &IID_IInternetProtocol, (void**)&protocol); - ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres); - if(FAILED(hres)) - return; - - SET_EXPECT(GetBindInfo); - expect_hrResult = MK_E_SYNTAX; - hres = IInternetProtocol_Start(protocol, wszIndexHtml, &protocol_sink, &bind_info, 0, 0); - ok(hres == MK_E_SYNTAX || - hres == E_INVALIDARG, - "Start failed: %08x, expected MK_E_SYNTAX or E_INVALIDARG\n", hres); - CLEAR_CALLED(GetBindInfo); /* GetBindInfo not called in IE7 */ - - SET_EXPECT(GetBindInfo); - if(!(bindf & BINDF_FROMURLMON)) - SET_EXPECT(ReportProgress_DIRECTBIND); - SET_EXPECT(ReportProgress_SENDINGREQUEST); - SET_EXPECT(ReportResult); - expect_hrResult = INET_E_RESOURCE_NOT_FOUND; - hres = IInternetProtocol_Start(protocol, index_url, &protocol_sink, &bind_info, 0, 0); - ok(hres == INET_E_RESOURCE_NOT_FOUND, - "Start failed: %08x expected INET_E_RESOURCE_NOT_FOUND\n", hres); - CHECK_CALLED(GetBindInfo); - if(!(bindf & BINDF_FROMURLMON)) - CHECK_CALLED(ReportProgress_DIRECTBIND); - CHECK_CALLED(ReportProgress_SENDINGREQUEST); - CHECK_CALLED(ReportResult); - - IInternetProtocol_Release(protocol); - - hres = CoCreateInstance(&CLSID_FileProtocol, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, - &IID_IInternetProtocol, (void**)&protocol); - ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres); - if(FAILED(hres)) - return; - - SET_EXPECT(GetBindInfo); - if(!(bindf & BINDF_FROMURLMON)) - SET_EXPECT(ReportProgress_DIRECTBIND); - SET_EXPECT(ReportProgress_SENDINGREQUEST); - SET_EXPECT(ReportResult); - expect_hrResult = INET_E_RESOURCE_NOT_FOUND; - - hres = IInternetProtocol_Start(protocol, index_url2, &protocol_sink, &bind_info, 0, 0); - ok(hres == INET_E_RESOURCE_NOT_FOUND, - "Start failed: %08x, expected INET_E_RESOURCE_NOT_FOUND\n", hres); - CHECK_CALLED(GetBindInfo); - if(!(bindf & BINDF_FROMURLMON)) - CHECK_CALLED(ReportProgress_DIRECTBIND); - CHECK_CALLED(ReportProgress_SENDINGREQUEST); - CHECK_CALLED(ReportResult); - - SET_EXPECT(GetBindInfo); - hres = IInternetProtocol_Start(protocol, NULL, &protocol_sink, &bind_info, 0, 0); - ok(hres == E_INVALIDARG, "Start failed: %08x, expected E_INVALIDARG\n", hres); - CLEAR_CALLED(GetBindInfo); /* GetBindInfo not called in IE7 */ - - SET_EXPECT(GetBindInfo); - hres = IInternetProtocol_Start(protocol, emptyW, &protocol_sink, &bind_info, 0, 0); - ok(hres == E_INVALIDARG, "Start failed: %08x, expected E_INVALIDARG\n", hres); - CLEAR_CALLED(GetBindInfo); /* GetBindInfo not called in IE7 */ - - IInternetProtocol_Release(protocol); -} - -static void test_file_protocol(void) { - WCHAR buf[INTERNET_MAX_URL_LENGTH], file_name_buf[MAX_PATH]; - DWORD size; - ULONG len; - HANDLE file; - - static const WCHAR wszFile[] = {'f','i','l','e',':',0}; - static const WCHAR wszFile2[] = {'f','i','l','e',':','/','/',0}; - static const WCHAR wszFile3[] = {'f','i','l','e',':','/','/','/',0}; - static const char html_doc[] = ""; - - trace("Testing file protocol...\n"); - tested_protocol = FILE_TEST; - - file = CreateFileW(wszIndexHtml, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - ok(file != INVALID_HANDLE_VALUE, "CreateFile failed\n"); - if(file == INVALID_HANDLE_VALUE) - return; - WriteFile(file, html_doc, sizeof(html_doc)-1, &size, NULL); - CloseHandle(file); - - file_name = wszIndexHtml; - bindf = 0; - test_file_protocol_url(index_url); - bindf = BINDF_FROMURLMON; - test_file_protocol_url(index_url); - bindf = BINDF_FROMURLMON | BINDF_NEEDFILE; - test_file_protocol_url(index_url); - - memcpy(buf, wszFile, sizeof(wszFile)); - len = sizeof(wszFile)/sizeof(WCHAR)-1; - len += GetCurrentDirectoryW(sizeof(buf)/sizeof(WCHAR)-len, buf+len); - buf[len++] = '\\'; - memcpy(buf+len, wszIndexHtml, sizeof(wszIndexHtml)); - - file_name = buf + sizeof(wszFile)/sizeof(WCHAR)-1; - bindf = 0; - test_file_protocol_url(buf); - bindf = BINDF_FROMURLMON; - test_file_protocol_url(buf); - - memcpy(buf, wszFile2, sizeof(wszFile2)); - len = GetCurrentDirectoryW(sizeof(file_name_buf)/sizeof(WCHAR), file_name_buf); - file_name_buf[len++] = '\\'; - memcpy(file_name_buf+len, wszIndexHtml, sizeof(wszIndexHtml)); - lstrcpyW(buf+sizeof(wszFile2)/sizeof(WCHAR)-1, file_name_buf); - file_name = file_name_buf; - bindf = 0; - test_file_protocol_url(buf); - bindf = BINDF_FROMURLMON; - test_file_protocol_url(buf); - - buf[sizeof(wszFile2)/sizeof(WCHAR)] = '|'; - test_file_protocol_url(buf); - - memcpy(buf, wszFile3, sizeof(wszFile3)); - len = sizeof(wszFile3)/sizeof(WCHAR)-1; - len += GetCurrentDirectoryW(sizeof(buf)/sizeof(WCHAR)-len, buf+len); - buf[len++] = '\\'; - memcpy(buf+len, wszIndexHtml, sizeof(wszIndexHtml)); - - file_name = buf + sizeof(wszFile3)/sizeof(WCHAR)-1; - bindf = 0; - test_file_protocol_url(buf); - bindf = BINDF_FROMURLMON; - test_file_protocol_url(buf); - - DeleteFileW(wszIndexHtml); - - bindf = 0; - test_file_protocol_fail(); - bindf = BINDF_FROMURLMON; - test_file_protocol_fail(); -} - -static BOOL http_protocol_start(LPCWSTR url, BOOL is_first) -{ - static BOOL got_user_agent = FALSE; - HRESULT hres; - - first_data_notif = TRUE; - state = 0; - - SET_EXPECT(GetBindInfo); - if (!(bindf & BINDF_FROMURLMON)) - SET_EXPECT(ReportProgress_DIRECTBIND); - SET_EXPECT(GetBindString_USER_AGENT); - SET_EXPECT(GetBindString_ACCEPT_MIMES); - SET_EXPECT(QueryService_HttpNegotiate); - SET_EXPECT(BeginningTransaction); - SET_EXPECT(GetRootSecurityId); - if (http_post_test) - SET_EXPECT(GetBindString_POST_COOKIE); - - hres = IInternetProtocol_Start(http_protocol, url, &protocol_sink, &bind_info, 0, 0); - ok(hres == S_OK, "Start failed: %08x\n", hres); - if(FAILED(hres)) - return FALSE; - - CHECK_CALLED(GetBindInfo); - if (!(bindf & BINDF_FROMURLMON)) - CHECK_CALLED(ReportProgress_DIRECTBIND); - if (!got_user_agent) - { - CHECK_CALLED(GetBindString_USER_AGENT); - got_user_agent = TRUE; - } - else todo_wine - { - /* user agent only retrieved once, even with different URLs */ - CHECK_NOT_CALLED(GetBindString_USER_AGENT); - } - CHECK_CALLED(GetBindString_ACCEPT_MIMES); - CHECK_CALLED(QueryService_HttpNegotiate); - CHECK_CALLED(BeginningTransaction); - /* GetRootSecurityId called on WinXP but not on Win98 */ - CLEAR_CALLED(GetRootSecurityId); - if (http_post_test) - CHECK_CALLED(GetBindString_POST_COOKIE); - - return TRUE; -} - -/* is_first refers to whether this is the first call to this function - * _for this url_ */ -static void test_http_protocol_url(LPCWSTR url, BOOL is_first) -{ - IInternetProtocolInfo *protocol_info; - IClassFactory *factory; - IUnknown *unk; - HRESULT hres; - - http_url = url; - http_is_first = is_first; - - hres = CoGetClassObject(&CLSID_HttpProtocol, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk); - ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres); - if(!SUCCEEDED(hres)) - return; - - hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&protocol_info); - ok(hres == E_NOINTERFACE, - "Could not get IInternetProtocolInfo interface: %08x, expected E_NOINTERFACE\n", - hres); - - hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&factory); - ok(hres == S_OK, "Could not get IClassFactory interface\n"); - IUnknown_Release(unk); - if(FAILED(hres)) - return; - - hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol, - (void**)&http_protocol); - ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres); - if(SUCCEEDED(hres)) { - BYTE buf[3600]; - DWORD cb; - int *called = (bindf & BINDF_FROMURLMON) ? &called_Switch : &called_ReportData; - - test_priority(http_protocol); - - SET_EXPECT(ReportProgress_FINDINGRESOURCE); - SET_EXPECT(ReportProgress_CONNECTING); - SET_EXPECT(ReportProgress_SENDINGREQUEST); - if(!(bindf & BINDF_FROMURLMON)) { - SET_EXPECT(OnResponse); - SET_EXPECT(ReportProgress_RAWMIMETYPE); - SET_EXPECT(ReportData); - } else { - SET_EXPECT(Switch); - } - - if(!http_protocol_start(url, is_first)) - return; - - SET_EXPECT(ReportResult); - expect_hrResult = S_OK; - - hres = IInternetProtocol_Read(http_protocol, buf, 1, &cb); - ok((!*called && hres == E_PENDING && cb==0) || - (*called && hres == S_OK && cb==1), "Read failed: %08x (%d bytes)\n", hres, cb); - - WaitForSingleObject(event_complete, INFINITE); - if(bindf & BINDF_FROMURLMON) - CHECK_CALLED(Switch); - else - CHECK_CALLED(ReportData); - - while(1) { - if(bindf & BINDF_FROMURLMON) - SET_EXPECT(Switch); - else - SET_EXPECT(ReportData); - hres = IInternetProtocol_Read(http_protocol, buf, sizeof(buf), &cb); - if(hres == E_PENDING) { - hres = IInternetProtocol_Read(http_protocol, buf, 1, &cb); - ok((!*called && hres == E_PENDING && cb==0) || - (*called && hres == S_OK && cb==1), "Read failed: %08x (%d bytes)\n", hres, cb); - WaitForSingleObject(event_complete, INFINITE); - if(bindf & BINDF_FROMURLMON) - CHECK_CALLED(Switch); - else - CHECK_CALLED(ReportData); - } else { - if(bindf & BINDF_FROMURLMON) - CHECK_NOT_CALLED(Switch); - else - CHECK_NOT_CALLED(ReportData); - if(cb == 0) break; - } - } - ok(hres == S_FALSE, "Read failed: %08x\n", hres); - CHECK_CALLED(ReportResult); - - hres = IInternetProtocol_LockRequest(http_protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - - hres = IInternetProtocol_Read(http_protocol, buf, 1, &cb); - ok(hres == S_FALSE, "Read failed: %08x\n", hres); - - hres = IInternetProtocol_Terminate(http_protocol, 0); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - - /* This wait is to give the internet handles being freed in Terminate - * enough time to actually terminate in all cases. Internet handles - * terminate asynchronously and native reuses the main InternetOpen - * handle. The only case in which this seems to be necessary is on - * wine with native wininet and urlmon, resulting in the next time - * test_http_protocol_url being called the first data notification actually - * being an extra last data notification from the previous connection - * about once out of every ten times. */ - Sleep(100); - - hres = IInternetProtocol_UnlockRequest(http_protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - - IInternetProtocol_Release(http_protocol); - } - - IClassFactory_Release(factory); -} - -static void test_http_protocol(void) -{ - static const WCHAR winehq_url[] = - {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.', - 'o','r','g','/','s','i','t','e','/','a','b','o','u','t',0}; - static const WCHAR posttest_url[] = - {'h','t','t','p',':','/','/','c','r','o','s','s','o','v','e','r','.', - 'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m','/', - 'p','o','s','t','t','e','s','t','.','p','h','p',0}; - - trace("Testing http protocol (not from urlmon)...\n"); - tested_protocol = HTTP_TEST; - bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA; - test_http_protocol_url(winehq_url, TRUE); - - trace("Testing http protocol (from urlmon)...\n"); - bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON; - test_http_protocol_url(winehq_url, FALSE); - - trace("Testing http protocol (to file)...\n"); - bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NEEDFILE; - test_http_protocol_url(winehq_url, FALSE); - - trace("Testing http protocol (post data)...\n"); - http_post_test = TRUE; - /* Without this flag we get a ReportProgress_CACHEFILENAMEAVAILABLE - * notification with BINDVERB_POST */ - bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NOWRITECACHE; - test_http_protocol_url(posttest_url, TRUE); - http_post_test = FALSE; -} - -static void test_mk_protocol(void) -{ - IInternetProtocolInfo *protocol_info; - IInternetProtocol *protocol; - IClassFactory *factory; - IUnknown *unk; - HRESULT hres; - - static const WCHAR wrong_url1[] = {'t','e','s','t',':','@','M','S','I','T','S','t','o','r','e', - ':',':','/','t','e','s','t','.','h','t','m','l',0}; - static const WCHAR wrong_url2[] = {'m','k',':','/','t','e','s','t','.','h','t','m','l',0}; - - trace("Testing mk protocol...\n"); - tested_protocol = MK_TEST; - - hres = CoGetClassObject(&CLSID_MkProtocol, CLSCTX_INPROC_SERVER, NULL, - &IID_IUnknown, (void**)&unk); - ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres); - - hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&protocol_info); - ok(hres == E_NOINTERFACE, - "Could not get IInternetProtocolInfo interface: %08x, expected E_NOINTERFACE\n", - hres); - - hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&factory); - ok(hres == S_OK, "Could not get IClassFactory interface\n"); - IUnknown_Release(unk); - if(FAILED(hres)) - return; - - hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol, - (void**)&protocol); - IClassFactory_Release(factory); - ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres); - - SET_EXPECT(GetBindInfo); - hres = IInternetProtocol_Start(protocol, wrong_url1, &protocol_sink, &bind_info, 0, 0); - ok(hres == MK_E_SYNTAX || hres == INET_E_INVALID_URL, - "Start failed: %08x, expected MK_E_SYNTAX or INET_E_INVALID_URL\n", hres); - CLEAR_CALLED(GetBindInfo); - - SET_EXPECT(GetBindInfo); - SET_EXPECT(ReportProgress_DIRECTBIND); - SET_EXPECT(ReportProgress_SENDINGREQUEST); - SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); - SET_EXPECT(ReportResult); - expect_hrResult = INET_E_RESOURCE_NOT_FOUND; - - hres = IInternetProtocol_Start(protocol, wrong_url2, &protocol_sink, &bind_info, 0, 0); - ok(hres == INET_E_RESOURCE_NOT_FOUND || - hres == INET_E_INVALID_URL, /* win2k3 */ - "Start failed: %08x, expected INET_E_RESOURCE_NOT_FOUND or INET_E_INVALID_URL\n", hres); - - if (hres == INET_E_RESOURCE_NOT_FOUND) { - CHECK_CALLED(GetBindInfo); - CLEAR_CALLED(ReportProgress_DIRECTBIND); - CHECK_CALLED(ReportProgress_SENDINGREQUEST); - CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(ReportResult); - }else { - CLEAR_CALLED(GetBindInfo); - CLEAR_CALLED(ReportProgress_DIRECTBIND); - CLEAR_CALLED(ReportProgress_SENDINGREQUEST); - CLEAR_CALLED(ReportProgress_MIMETYPEAVAILABLE); - CLEAR_CALLED(ReportResult); - } - - IInternetProtocol_Release(protocol); -} - -static void test_CreateBinding(void) -{ - IInternetProtocolSink *sink; - IInternetProtocol *protocol; - IInternetPriority *priority; - IInternetSession *session; - LONG p; - BYTE buf[1000]; - DWORD read; - HRESULT hres; - - static const WCHAR test_url[] = - {'t','e','s','t',':','/','/','f','i','l','e','.','h','t','m','l',0}; - static const WCHAR wsz_test[] = {'t','e','s','t',0}; - - trace("Testing CreateBinding...\n"); - tested_protocol = BIND_TEST; - binding_test = TRUE; - - hres = CoInternetGetSession(0, &session, 0); - ok(hres == S_OK, "CoInternetGetSession failed: %08x\n", hres); - - hres = IInternetSession_RegisterNameSpace(session, &ClassFactory, &IID_NULL, wsz_test, 0, NULL, 0); - ok(hres == S_OK, "RegisterNameSpace failed: %08x\n", hres); - - hres = IInternetSession_CreateBinding(session, NULL, test_url, NULL, NULL, &protocol, 0); - binding_protocol = protocol; - ok(hres == S_OK, "CreateBinding failed: %08x\n", hres); - ok(protocol != NULL, "protocol == NULL\n"); - - hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetBindInfo, (void**)&prot_bind_info); - ok(hres == S_OK, "QueryInterface(IID_IInternetBindInfo) failed: %08x\n", hres); - - hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetProtocolSink, (void**)&sink); - ok(hres == S_OK, "Could not get IInternetProtocolSink: %08x\n", hres); - - hres = IInternetProtocol_Start(protocol, test_url, NULL, &bind_info, 0, 0); - ok(hres == E_INVALIDARG, "Start failed: %08x, expected E_INVALIDARG\n", hres); - hres = IInternetProtocol_Start(protocol, test_url, &protocol_sink, NULL, 0, 0); - ok(hres == E_INVALIDARG, "Start failed: %08x, expected E_INVALIDARG\n", hres); - hres = IInternetProtocol_Start(protocol, NULL, &protocol_sink, &bind_info, 0, 0); - ok(hres == E_INVALIDARG, "Start failed: %08x, expected E_INVALIDARG\n", hres); - - hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetPriority, (void**)&priority); - ok(hres == S_OK, "QueryInterface(IID_IInternetPriority) failed: %08x\n", hres); - - p = 0xdeadbeef; - hres = IInternetPriority_GetPriority(priority, &p); - ok(hres == S_OK, "GetPriority failed: %08x\n", hres); - ok(!p, "p=%d\n", p); - - ex_priority = 100; - hres = IInternetPriority_SetPriority(priority, 100); - ok(hres == S_OK, "SetPriority failed: %08x\n", hres); - - p = 0xdeadbeef; - hres = IInternetPriority_GetPriority(priority, &p); - ok(hres == S_OK, "GetPriority failed: %08x\n", hres); - ok(p == 100, "p=%d\n", p); - - SET_EXPECT(QueryService_InternetProtocol); - SET_EXPECT(CreateInstance); - SET_EXPECT(ReportProgress_PROTOCOLCLASSID); - SET_EXPECT(SetPriority); - SET_EXPECT(Start); - - expect_hrResult = S_OK; - hres = IInternetProtocol_Start(protocol, test_url, &protocol_sink, &bind_info, 0, 0); - ok(hres == S_OK, "Start failed: %08x\n", hres); - - CHECK_CALLED(QueryService_InternetProtocol); - CHECK_CALLED(CreateInstance); - CHECK_CALLED(ReportProgress_PROTOCOLCLASSID); - CHECK_CALLED(SetPriority); - CHECK_CALLED(Start); - - SET_EXPECT(Read); - read = 0xdeadbeef; - hres = IInternetProtocol_Read(protocol, expect_pv = buf, sizeof(buf), &read); - ok(hres == S_OK, "Read failed: %08x\n", hres); - ok(read == 100, "read = %d\n", read); - CHECK_CALLED(Read); - - SET_EXPECT(Read); - read = 0xdeadbeef; - hres = IInternetProtocol_Read(protocol, expect_pv = buf, sizeof(buf), &read); - ok(hres == S_FALSE, "Read failed: %08x\n", hres); - ok(!read, "read = %d\n", read); - CHECK_CALLED(Read); - - p = 0xdeadbeef; - hres = IInternetPriority_GetPriority(priority, &p); - ok(hres == S_OK, "GetPriority failed: %08x\n", hres); - ok(p == 100, "p=%d\n", p); - - hres = IInternetPriority_SetPriority(priority, 101); - ok(hres == S_OK, "SetPriority failed: %08x\n", hres); - - SET_EXPECT(Terminate); - hres = IInternetProtocol_Terminate(protocol, 0xdeadbeef); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - CHECK_CALLED(Terminate); - - SET_EXPECT(Continue); - hres = IInternetProtocolSink_Switch(sink, &protocoldata); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - CHECK_CALLED(Continue); - - hres = IInternetProtocolSink_ReportProgress(sink, - BINDSTATUS_CACHEFILENAMEAVAILABLE, expect_wsz = emptyW); - ok(hres == S_OK, "ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE) failed: %08x\n", hres); - - hres = IInternetProtocolSink_ReportResult(sink, S_OK, ERROR_SUCCESS, NULL); - ok(hres == E_FAIL, "ReportResult failed: %08x, expected E_FAIL\n", hres); - - hres = IInternetProtocolSink_ReportData(sink, 0, 0, 0); - ok(hres == S_OK, "ReportData failed: %08x\n", hres); - - IInternetProtocolSink_Release(sink); - IInternetPriority_Release(priority); - IInternetBindInfo_Release(prot_bind_info); - IInternetProtocol_Release(protocol); - IInternetSession_Release(session); -} - -static void test_binding(int prot) -{ - IInternetProtocol *protocol; - IInternetSession *session; - ULONG ref; - HRESULT hres; - - trace("Testing %s binding...\n", debugstr_w(protocol_names[prot])); - - tested_protocol = prot; - binding_test = TRUE; - first_data_notif = TRUE; - prot_read = 0; - - hres = CoInternetGetSession(0, &session, 0); - ok(hres == S_OK, "CoInternetGetSession failed: %08x\n", hres); - - hres = IInternetSession_RegisterNameSpace(session, &ClassFactory, &IID_NULL, protocol_names[prot], 0, NULL, 0); - ok(hres == S_OK, "RegisterNameSpace failed: %08x\n", hres); - - hres = IInternetSession_CreateBinding(session, NULL, binding_urls[prot], NULL, NULL, &protocol, 0); - binding_protocol = protocol; - IInternetSession_Release(session); - ok(hres == S_OK, "CreateBinding failed: %08x\n", hres); - ok(protocol != NULL, "protocol == NULL\n"); - - hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetBindInfo, (void**)&prot_bind_info); - ok(hres == S_OK, "QueryInterface(IID_IInternetBindInfo) failed: %08x\n", hres); - - hres = IInternetProtocol_QueryInterface(protocol, &IID_IInternetProtocolSink, (void**)&binding_sink); - ok(hres == S_OK, "QueryInterface(IID_IInternetProtocolSink) failed: %08x\n", hres); - - ex_priority = 0; - SET_EXPECT(QueryService_InternetProtocol); - SET_EXPECT(CreateInstance); - SET_EXPECT(ReportProgress_PROTOCOLCLASSID); - SET_EXPECT(SetPriority); - SET_EXPECT(Start); - - expect_hrResult = S_OK; - hres = IInternetProtocol_Start(protocol, binding_urls[prot], &protocol_sink, &bind_info, 0, 0); - ok(hres == S_OK, "Start failed: %08x\n", hres); - - CHECK_CALLED(QueryService_InternetProtocol); - CHECK_CALLED(CreateInstance); - CHECK_CALLED(ReportProgress_PROTOCOLCLASSID); - CHECK_CALLED(SetPriority); - CHECK_CALLED(Start); - - if(prot == HTTP_TEST) { - while(prot_state < 4) { - WaitForSingleObject(event_complete, INFINITE); - SET_EXPECT(Continue); - IInternetProtocol_Continue(protocol, pdata); - CHECK_CALLED(Continue); - SetEvent(event_complete2); - } - - WaitForSingleObject(event_complete, INFINITE); - }else { - SET_EXPECT(LockRequest); - hres = IInternetProtocol_LockRequest(protocol, 0); - ok(hres == S_OK, "LockRequest failed: %08x\n", hres); - CHECK_CALLED(LockRequest); - - SET_EXPECT(UnlockRequest); - hres = IInternetProtocol_UnlockRequest(protocol); - ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres); - CHECK_CALLED(UnlockRequest); - } - - SET_EXPECT(Terminate); - hres = IInternetProtocol_Terminate(protocol, 0); - ok(hres == S_OK, "Terminate failed: %08x\n", hres); - CHECK_CALLED(Terminate); - - IInternetBindInfo_Release(prot_bind_info); - IInternetProtocolSink_Release(binding_sink); - ref = IInternetProtocol_Release(protocol); - ok(!ref, "ref=%u, expected 0\n", ref); -} - -START_TEST(protocol) -{ - OleInitialize(NULL); - - event_complete = CreateEvent(NULL, FALSE, FALSE, NULL); - event_complete2 = CreateEvent(NULL, FALSE, FALSE, NULL); - - test_file_protocol(); - test_http_protocol(); - test_mk_protocol(); - test_CreateBinding(); - test_binding(FILE_TEST); - test_binding(HTTP_TEST); - - CloseHandle(event_complete); - CloseHandle(event_complete2); - - OleUninitialize(); -} diff --git a/rostests/winetests/urlmon/stream.c b/rostests/winetests/urlmon/stream.c deleted file mode 100644 index 6b25e2d2d0c..00000000000 --- a/rostests/winetests/urlmon/stream.c +++ /dev/null @@ -1,374 +0,0 @@ -/* - * 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 - */ - -#define COBJMACROS -#define CONST_VTABLE - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "ole2.h" -#include "urlmon.h" -#include "wininet.h" - -#define DEFINE_EXPECT(func) \ - static BOOL expect_ ## func = FALSE, called_ ## func = FALSE - -#define SET_EXPECT(func) \ - expect_ ## func = TRUE - -#define CHECK_EXPECT(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - expect_ ## func = FALSE; \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_EXPECT2(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_CALLED(func) \ - do { \ - ok(called_ ## func, "expected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -#define CHECK_NOT_CALLED(func) \ - do { \ - ok(!called_ ## func, "unexpected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -#define CLEAR_CALLED(func) \ - expect_ ## func = called_ ## func = FALSE - -DEFINE_EXPECT(QueryInterface_IServiceProvider); -DEFINE_EXPECT(OnStartBinding); -DEFINE_EXPECT(OnProgress_FINDINGRESOURCE); -DEFINE_EXPECT(OnProgress_CONNECTING); -DEFINE_EXPECT(OnProgress_SENDINGREQUEST); -DEFINE_EXPECT(OnProgress_MIMETYPEAVAILABLE); -DEFINE_EXPECT(OnProgress_BEGINDOWNLOADDATA); -DEFINE_EXPECT(OnProgress_DOWNLOADINGDATA); -DEFINE_EXPECT(OnProgress_ENDDOWNLOADDATA); -DEFINE_EXPECT(OnStopBinding); -DEFINE_EXPECT(OnDataAvailable); -DEFINE_EXPECT(GetBindInfo); - -static const CHAR wszIndexHtmlA[] = "index.html"; -static const WCHAR wszIndexHtml[] = {'i','n','d','e','x','.','h','t','m','l',0}; -static WCHAR INDEX_HTML[MAX_PATH]; -static const char szHtmlDoc[] = ""; - -static HRESULT WINAPI statusclb_QueryInterface(IBindStatusCallback *iface, REFIID riid, void **ppv) -{ - if (IsEqualGUID(&IID_IBindStatusCallback, riid) || - IsEqualGUID(&IID_IUnknown, riid)) - { - *ppv = iface; - return S_OK; - } - else if (IsEqualGUID(&IID_IServiceProvider, riid)) - { - CHECK_EXPECT(QueryInterface_IServiceProvider); - } - - return E_NOINTERFACE; -} - -static ULONG WINAPI statusclb_AddRef(IBindStatusCallback *iface) -{ - return 2; -} - -static ULONG WINAPI statusclb_Release(IBindStatusCallback *iface) -{ - return 1; -} - -static HRESULT WINAPI statusclb_OnStartBinding(IBindStatusCallback *iface, DWORD dwReserved, - IBinding *pib) -{ - HRESULT hres; - IMoniker *mon; - - CHECK_EXPECT(OnStartBinding); - - ok(pib != NULL, "pib should not be NULL\n"); - - hres = IBinding_QueryInterface(pib, &IID_IMoniker, (void**)&mon); - ok(hres == E_NOINTERFACE, "IBinding should not have IMoniker interface\n"); - if(SUCCEEDED(hres)) - IMoniker_Release(mon); - - return S_OK; -} - -static HRESULT WINAPI statusclb_GetPriority(IBindStatusCallback *iface, LONG *pnPriority) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI statusclb_OnLowResource(IBindStatusCallback *iface, DWORD reserved) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulProgress, - ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) -{ - switch(ulStatusCode) { - case BINDSTATUS_FINDINGRESOURCE: - CHECK_EXPECT(OnProgress_FINDINGRESOURCE); - break; - case BINDSTATUS_CONNECTING: - CHECK_EXPECT(OnProgress_CONNECTING); - break; - case BINDSTATUS_SENDINGREQUEST: - CHECK_EXPECT(OnProgress_SENDINGREQUEST); - break; - case BINDSTATUS_MIMETYPEAVAILABLE: - CHECK_EXPECT(OnProgress_MIMETYPEAVAILABLE); - break; - case BINDSTATUS_BEGINDOWNLOADDATA: - CHECK_EXPECT(OnProgress_BEGINDOWNLOADDATA); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - break; - case BINDSTATUS_DOWNLOADINGDATA: - CHECK_EXPECT2(OnProgress_DOWNLOADINGDATA); - break; - case BINDSTATUS_ENDDOWNLOADDATA: - CHECK_EXPECT(OnProgress_ENDDOWNLOADDATA); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - break; - case BINDSTATUS_CACHEFILENAMEAVAILABLE: - ok(szStatusText != NULL, "szStatusText == NULL\n"); - break; - default: - todo_wine { ok(0, "unexpected code %d\n", ulStatusCode); } - }; - return S_OK; -} - -static HRESULT WINAPI statusclb_OnStopBinding(IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError) -{ - CHECK_EXPECT(OnStopBinding); - - /* ignore DNS failure */ - if (hresult != HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED)) - { - ok(SUCCEEDED(hresult), "Download failed: %08x\n", hresult); - ok(szError == NULL, "szError should be NULL\n"); - } - - return S_OK; -} - -static HRESULT WINAPI statusclb_GetBindInfo(IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo) -{ - DWORD cbSize; - - CHECK_EXPECT(GetBindInfo); - - *grfBINDF = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA; - cbSize = pbindinfo->cbSize; - memset(pbindinfo, 0, cbSize); - pbindinfo->cbSize = cbSize; - - return S_OK; -} - -static HRESULT WINAPI statusclb_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF, - DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed) -{ - HRESULT hres; - DWORD readed; - BYTE buf[512]; - - CHECK_EXPECT2(OnDataAvailable); - - if (0) - { - /* FIXME: Uncomment after removing BindToStorage hack. */ - ok(pformatetc != NULL, "pformatetx == NULL\n"); - if(pformatetc) { - ok(pformatetc->cfFormat == 0xc02d, "clipformat=%x\n", pformatetc->cfFormat); - ok(pformatetc->ptd == NULL, "ptd = %p\n", pformatetc->ptd); - ok(pformatetc->dwAspect == 1, "dwAspect=%u\n", pformatetc->dwAspect); - ok(pformatetc->lindex == -1, "lindex=%d\n", pformatetc->lindex); - ok(pformatetc->tymed == TYMED_ISTREAM, "tymed=%u\n", pformatetc->tymed); - } - - ok(pstgmed != NULL, "stgmeg == NULL\n"); - if(pstgmed) { - ok(pstgmed->tymed == TYMED_ISTREAM, "tymed=%u\n", pstgmed->tymed); - ok(U(*pstgmed).pstm != NULL, "pstm == NULL\n"); - ok(pstgmed->pUnkForRelease != NULL, "pUnkForRelease == NULL\n"); - } - } - - if(U(*pstgmed).pstm) { - do hres = IStream_Read(U(*pstgmed).pstm, buf, 512, &readed); - while(hres == S_OK); - ok(hres == S_FALSE || hres == E_PENDING, "IStream_Read returned %08x\n", hres); - } - - return S_OK; -} - -static HRESULT WINAPI statusclb_OnObjectAvailable(IBindStatusCallback *iface, REFIID riid, IUnknown *punk) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IBindStatusCallbackVtbl BindStatusCallbackVtbl = { - statusclb_QueryInterface, - statusclb_AddRef, - statusclb_Release, - statusclb_OnStartBinding, - statusclb_GetPriority, - statusclb_OnLowResource, - statusclb_OnProgress, - statusclb_OnStopBinding, - statusclb_GetBindInfo, - statusclb_OnDataAvailable, - statusclb_OnObjectAvailable -}; - -static IBindStatusCallback BindStatusCallback = { &BindStatusCallbackVtbl }; - -static void set_file_url(char *path) -{ - char INDEX_HTML_A[MAX_PATH]; - - lstrcpyA(INDEX_HTML_A, "file:///"); - lstrcatA(INDEX_HTML_A, path); - MultiByteToWideChar(CP_ACP, 0, INDEX_HTML_A, -1, INDEX_HTML, MAX_PATH); -} - -static void create_file(void) -{ - HANDLE file; - DWORD size; - CHAR path[MAX_PATH]; - - file = CreateFileA(wszIndexHtmlA, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - ok(file != INVALID_HANDLE_VALUE, "CreateFile failed\n"); - if(file == INVALID_HANDLE_VALUE) - return; - - WriteFile(file, szHtmlDoc, sizeof(szHtmlDoc)-1, &size, NULL); - CloseHandle(file); - - GetCurrentDirectoryA(MAX_PATH, path); - lstrcatA(path, "\\"); - lstrcatA(path, wszIndexHtmlA); - set_file_url(path); -} - -static void test_URLOpenBlockingStreamW(void) -{ - HRESULT hr; - IStream *pStream = NULL; - char buffer[256]; - - hr = URLOpenBlockingStreamW(NULL, NULL, &pStream, 0, &BindStatusCallback); - ok(hr == E_INVALIDARG, "URLOpenBlockingStreamW should have failed with E_INVALIDARG instead of 0x%08x\n", hr); - hr = URLOpenBlockingStreamW(NULL, INDEX_HTML, NULL, 0, &BindStatusCallback); - ok(hr == E_INVALIDARG, "URLOpenBlockingStreamW should have failed with E_INVALIDARG instead of 0x%08x\n", hr); - - SET_EXPECT(GetBindInfo); - SET_EXPECT(QueryInterface_IServiceProvider); - SET_EXPECT(OnStartBinding); - SET_EXPECT(OnProgress_SENDINGREQUEST); - SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); - SET_EXPECT(OnProgress_ENDDOWNLOADDATA); - SET_EXPECT(OnStopBinding); - - hr = URLOpenBlockingStreamW(NULL, INDEX_HTML, &pStream, 0, &BindStatusCallback); - ok(hr == S_OK, "URLOpenBlockingStreamW failed with error 0x%08x\n", hr); - - CHECK_CALLED(GetBindInfo); - todo_wine CHECK_CALLED(QueryInterface_IServiceProvider); - CHECK_CALLED(OnStartBinding); - CHECK_CALLED(OnProgress_SENDINGREQUEST); - CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); - CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); - CHECK_CALLED(OnStopBinding); - - ok(pStream != NULL, "pStream is NULL\n"); - if(pStream) - { - hr = IStream_Read(pStream, buffer, sizeof(buffer), NULL); - ok(hr == S_OK, "IStream_Read failed with error 0x%08x\n", hr); - ok(!memcmp(buffer, szHtmlDoc, sizeof(szHtmlDoc)-1), "read data differs from file\n"); - - IStream_Release(pStream); - } -} - -static void test_URLOpenStreamW(void) -{ - HRESULT hr; - - hr = URLOpenStreamW(NULL, NULL, 0, &BindStatusCallback); - ok(hr == E_INVALIDARG, "URLOpenStreamW should have failed with E_INVALIDARG instead of 0x%08x\n", hr); - - SET_EXPECT(GetBindInfo); - SET_EXPECT(QueryInterface_IServiceProvider); - SET_EXPECT(OnStartBinding); - SET_EXPECT(OnProgress_SENDINGREQUEST); - SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); - SET_EXPECT(OnProgress_ENDDOWNLOADDATA); - SET_EXPECT(OnDataAvailable); - SET_EXPECT(OnStopBinding); - - hr = URLOpenStreamW(NULL, INDEX_HTML, 0, &BindStatusCallback); - ok(hr == S_OK, "URLOpenStreamW failed with error 0x%08x\n", hr); - - CHECK_CALLED(GetBindInfo); - todo_wine CHECK_CALLED(QueryInterface_IServiceProvider); - CHECK_CALLED(OnStartBinding); - CHECK_CALLED(OnProgress_SENDINGREQUEST); - CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); - CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); - CHECK_CALLED(OnDataAvailable); - CHECK_CALLED(OnStopBinding); -} - -START_TEST(stream) -{ - create_file(); - test_URLOpenBlockingStreamW(); - test_URLOpenStreamW(); - DeleteFileA(wszIndexHtmlA); -} diff --git a/rostests/winetests/urlmon/testlist.c b/rostests/winetests/urlmon/testlist.c deleted file mode 100644 index 1248a7cdc6a..00000000000 --- a/rostests/winetests/urlmon/testlist.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - - -const struct test winetest_testlist[] = -{ - { 0, 0 } -}; diff --git a/rostests/winetests/urlmon/url.c b/rostests/winetests/urlmon/url.c deleted file mode 100644 index f315070bb81..00000000000 --- a/rostests/winetests/urlmon/url.c +++ /dev/null @@ -1,2670 +0,0 @@ -/* - * UrlMon URL tests - * - * Copyright 2004 Kevin Koltzau - * Copyright 2004-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 - */ - -#include -#include - -#define COBJMACROS -#define NONAMELESSUNION -#define CONST_VTABLE - -#include "windef.h" -#include "winbase.h" -#include "initguid.h" -#include "urlmon.h" -#include "wininet.h" -#include "mshtml.h" - -#include "wine/test.h" - -DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); -DEFINE_GUID(CLSID_IdentityUnmarshal,0x0000001b,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(IID_IBindStatusCallbackHolder,0x79eac9cc,0xbaf9,0x11ce,0x8c,0x82,0x00,0xaa,0x00,0x4b,0xa9,0x0b); - -#define DEFINE_EXPECT(func) \ - static BOOL expect_ ## func = FALSE, called_ ## func = FALSE - -#define SET_EXPECT(func) \ - do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0) - -#define CHECK_EXPECT2(func) \ - do { \ - ok(expect_ ##func, "unexpected call " #func "\n"); \ - called_ ## func = TRUE; \ - }while(0) - -#define CHECK_EXPECT(func) \ - do { \ - CHECK_EXPECT2(func); \ - expect_ ## func = FALSE; \ - }while(0) - -#define CHECK_CALLED(func) \ - do { \ - ok(called_ ## func, "expected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -#define CHECK_NOT_CALLED(func) \ - do { \ - ok(!called_ ## func, "unexpected " #func "\n"); \ - expect_ ## func = called_ ## func = FALSE; \ - }while(0) - -#define CLEAR_CALLED(func) \ - expect_ ## func = called_ ## func = FALSE - -DEFINE_EXPECT(QueryInterface_IServiceProvider); -DEFINE_EXPECT(QueryInterface_IHttpNegotiate); -DEFINE_EXPECT(QueryInterface_IBindStatusCallback); -DEFINE_EXPECT(QueryInterface_IBindStatusCallbackHolder); -DEFINE_EXPECT(QueryInterface_IInternetBindInfo); -DEFINE_EXPECT(QueryInterface_IAuthenticate); -DEFINE_EXPECT(QueryInterface_IInternetProtocol); -DEFINE_EXPECT(QueryService_IAuthenticate); -DEFINE_EXPECT(QueryService_IInternetProtocol); -DEFINE_EXPECT(QueryService_IInternetBindInfo); -DEFINE_EXPECT(BeginningTransaction); -DEFINE_EXPECT(OnResponse); -DEFINE_EXPECT(QueryInterface_IHttpNegotiate2); -DEFINE_EXPECT(GetRootSecurityId); -DEFINE_EXPECT(GetBindInfo); -DEFINE_EXPECT(OnStartBinding); -DEFINE_EXPECT(OnProgress_FINDINGRESOURCE); -DEFINE_EXPECT(OnProgress_CONNECTING); -DEFINE_EXPECT(OnProgress_SENDINGREQUEST); -DEFINE_EXPECT(OnProgress_MIMETYPEAVAILABLE); -DEFINE_EXPECT(OnProgress_BEGINDOWNLOADDATA); -DEFINE_EXPECT(OnProgress_DOWNLOADINGDATA); -DEFINE_EXPECT(OnProgress_ENDDOWNLOADDATA); -DEFINE_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE); -DEFINE_EXPECT(OnStopBinding); -DEFINE_EXPECT(OnDataAvailable); -DEFINE_EXPECT(OnObjectAvailable); -DEFINE_EXPECT(Obj_OnStartBinding); -DEFINE_EXPECT(Obj_OnStopBinding); -DEFINE_EXPECT(Obj_GetBindInfo); -DEFINE_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA); -DEFINE_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA); -DEFINE_EXPECT(Obj_OnProgress_SENDINGREQUEST); -DEFINE_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE); -DEFINE_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE); -DEFINE_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION); -DEFINE_EXPECT(Obj_OnProgress_ENDSYNCOPERATION); -DEFINE_EXPECT(Obj_OnProgress_FINDINGRESOURCE); -DEFINE_EXPECT(Obj_OnProgress_CONNECTING); -DEFINE_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE); -DEFINE_EXPECT(Start); -DEFINE_EXPECT(Read); -DEFINE_EXPECT(LockRequest); -DEFINE_EXPECT(Terminate); -DEFINE_EXPECT(UnlockRequest); -DEFINE_EXPECT(Continue); -DEFINE_EXPECT(CreateInstance); -DEFINE_EXPECT(Load); -DEFINE_EXPECT(PutProperty_MIMETYPEPROP); -DEFINE_EXPECT(PutProperty_CLASSIDPROP); - -static const WCHAR TEST_URL_1[] = {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/','\0'}; -static const WCHAR TEST_PART_URL_1[] = {'/','t','e','s','t','/','\0'}; - -static const WCHAR WINE_ABOUT_URL[] = {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.', - 'o','r','g','/','s','i','t','e','/','a','b','o','u','t',0}; -static const WCHAR SHORT_RESPONSE_URL[] = - {'h','t','t','p',':','/','/','c','r','o','s','s','o','v','e','r','.', - 'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m','/', - 'p','o','s','t','t','e','s','t','.','p','h','p',0}; -static const WCHAR ABOUT_BLANK[] = {'a','b','o','u','t',':','b','l','a','n','k',0}; -static WCHAR INDEX_HTML[MAX_PATH]; -static const WCHAR ITS_URL[] = - {'i','t','s',':','t','e','s','t','.','c','h','m',':',':','/','b','l','a','n','k','.','h','t','m','l',0}; -static const WCHAR MK_URL[] = {'m','k',':','@','M','S','I','T','S','t','o','r','e',':', - 't','e','s','t','.','c','h','m',':',':','/','b','l','a','n','k','.','h','t','m','l',0}; - -static const WCHAR wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0}; - -static WCHAR BSCBHolder[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 }; - -static const WCHAR wszWineHQSite[] = - {'w','w','w','.','w','i','n','e','h','q','.','o','r','g',0}; -static const WCHAR wszWineHQIP[] = - {'2','0','9','.','3','2','.','1','4','1','.','3',0}; -static const WCHAR wszIndexHtml[] = {'i','n','d','e','x','.','h','t','m','l',0}; -static const WCHAR cache_fileW[] = {'c',':','\\','c','a','c','h','e','.','h','t','m',0}; -static const WCHAR dwl_htmlW[] = {'d','w','l','.','h','t','m','l',0}; -static const WCHAR emptyW[] = {0}; - -static BOOL stopped_binding = FALSE, stopped_obj_binding = FALSE, emulate_protocol = FALSE, - data_available = FALSE, http_is_first = TRUE, bind_to_object = FALSE, filedwl_api; -static DWORD read = 0, bindf = 0, prot_state = 0, thread_id, tymed; -static CHAR mime_type[512]; -static IInternetProtocolSink *protocol_sink = NULL; -static HANDLE complete_event, complete_event2; -static HRESULT binding_hres; - -static LPCWSTR urls[] = { - WINE_ABOUT_URL, - ABOUT_BLANK, - INDEX_HTML, - ITS_URL, - MK_URL -}; - -static WCHAR file_url[INTERNET_MAX_URL_LENGTH]; - -static enum { - HTTP_TEST, - ABOUT_TEST, - FILE_TEST, - ITS_TEST, - MK_TEST -} test_protocol; - -static enum { - BEFORE_DOWNLOAD, - DOWNLOADING, - END_DOWNLOAD -} download_state; - -static const char *debugstr_w(LPCWSTR str) -{ - static char buf[1024]; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - -static const char *debugstr_guid(REFIID riid) -{ - static char buf[50]; - - sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], - riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], - riid->Data4[5], riid->Data4[6], riid->Data4[7]); - - return buf; -} - -static void test_CreateURLMoniker(LPCWSTR url1, LPCWSTR url2) -{ - HRESULT hr; - IMoniker *mon1 = NULL; - IMoniker *mon2 = NULL; - - hr = CreateURLMoniker(NULL, url1, &mon1); - ok(SUCCEEDED(hr), "failed to create moniker: 0x%08x\n", hr); - if(SUCCEEDED(hr)) { - hr = CreateURLMoniker(mon1, url2, &mon2); - ok(SUCCEEDED(hr), "failed to create moniker: 0x%08x\n", hr); - } - if(mon1) IMoniker_Release(mon1); - if(mon2) IMoniker_Release(mon2); -} - -static void test_create(void) -{ - test_CreateURLMoniker(TEST_URL_1, TEST_PART_URL_1); -} - -static HRESULT WINAPI Protocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocol, riid)) { - *ppv = iface; - return S_OK; - } - - *ppv = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Protocol_AddRef(IInternetProtocol *iface) -{ - return 2; -} - -static ULONG WINAPI Protocol_Release(IInternetProtocol *iface) -{ - return 1; -} - -static DWORD WINAPI thread_proc(PVOID arg) -{ - PROTOCOLDATA protocoldata; - HRESULT hres; - - if(bind_to_object) - SET_EXPECT(Obj_OnProgress_FINDINGRESOURCE); - else - SET_EXPECT(OnProgress_FINDINGRESOURCE); - hres = IInternetProtocolSink_ReportProgress(protocol_sink, - BINDSTATUS_FINDINGRESOURCE, wszWineHQSite); - ok(hres == S_OK, "ReportProgress failed: %08x\n", hres); - WaitForSingleObject(complete_event, INFINITE); - if(bind_to_object) - CHECK_CALLED(Obj_OnProgress_FINDINGRESOURCE); - else - CHECK_CALLED(OnProgress_FINDINGRESOURCE); - - if(bind_to_object) - SET_EXPECT(Obj_OnProgress_CONNECTING); - else - SET_EXPECT(OnProgress_CONNECTING); - hres = IInternetProtocolSink_ReportProgress(protocol_sink, - BINDSTATUS_CONNECTING, wszWineHQIP); - ok(hres == S_OK, "ReportProgress failed: %08x\n", hres); - WaitForSingleObject(complete_event, INFINITE); - if(bind_to_object) - CHECK_CALLED(Obj_OnProgress_CONNECTING); - else - CHECK_CALLED(OnProgress_CONNECTING); - - if(bind_to_object) - SET_EXPECT(Obj_OnProgress_SENDINGREQUEST); - else - SET_EXPECT(OnProgress_SENDINGREQUEST); - hres = IInternetProtocolSink_ReportProgress(protocol_sink, - BINDSTATUS_SENDINGREQUEST, NULL); - ok(hres == S_OK, "ReportProxgress failed: %08x\n", hres); - WaitForSingleObject(complete_event, INFINITE); - if(bind_to_object) - CHECK_CALLED(Obj_OnProgress_SENDINGREQUEST); - else - CHECK_CALLED(OnProgress_SENDINGREQUEST); - - SET_EXPECT(Continue); - prot_state = 1; - hres = IInternetProtocolSink_Switch(protocol_sink, &protocoldata); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - WaitForSingleObject(complete_event, INFINITE); - - CHECK_CALLED(Continue); - CHECK_CALLED(Read); - if(bind_to_object) { - CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(Obj_OnProgress_BEGINDOWNLOADDATA); - CHECK_CALLED(Obj_OnProgress_CLASSIDAVAILABLE); - CHECK_CALLED(Obj_OnProgress_BEGINSYNCOPERATION); - CHECK_CALLED(CreateInstance); - CHECK_CALLED(PutProperty_MIMETYPEPROP); - CLEAR_CALLED(PutProperty_CLASSIDPROP); - CHECK_CALLED(Load); - CHECK_CALLED(Obj_OnProgress_ENDSYNCOPERATION); - CHECK_CALLED(OnObjectAvailable); - CHECK_CALLED(Obj_OnStopBinding); - }else { - CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); - CHECK_CALLED(LockRequest); - CHECK_CALLED(OnDataAvailable); - } - - SET_EXPECT(Continue); - prot_state = 2; - hres = IInternetProtocolSink_Switch(protocol_sink, &protocoldata); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - WaitForSingleObject(complete_event, INFINITE); - CHECK_CALLED(Continue); - CHECK_CALLED(Read); - CHECK_CALLED(OnProgress_DOWNLOADINGDATA); - CHECK_CALLED(OnDataAvailable); - - SET_EXPECT(Continue); - prot_state = 2; - hres = IInternetProtocolSink_Switch(protocol_sink, &protocoldata); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - WaitForSingleObject(complete_event, INFINITE); - CHECK_CALLED(Continue); - CHECK_CALLED(Read); - CHECK_CALLED(OnProgress_DOWNLOADINGDATA); - CHECK_CALLED(OnDataAvailable); - - SET_EXPECT(Continue); - prot_state = 3; - hres = IInternetProtocolSink_Switch(protocol_sink, &protocoldata); - ok(hres == S_OK, "Switch failed: %08x\n", hres); - WaitForSingleObject(complete_event, INFINITE); - CHECK_CALLED(Continue); - CHECK_CALLED(Read); - CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); - CHECK_CALLED(OnDataAvailable); - CHECK_CALLED(OnStopBinding); - - SET_EXPECT(Read); - - SetEvent(complete_event2); - return 0; -} - -static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, - IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, - DWORD grfPI, DWORD dwReserved) -{ - BINDINFO bindinfo; - DWORD bindf, bscf = BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION; - HRESULT hres; - - static const STGMEDIUM stgmed_zero = {0}; - static const SECURITY_ATTRIBUTES sa_zero = {0}; - - CHECK_EXPECT(Start); - - read = 0; - - if(!filedwl_api) /* FIXME */ - ok(szUrl && !lstrcmpW(szUrl, urls[test_protocol]), "wrong url %s\n", debugstr_w(szUrl)); - ok(pOIProtSink != NULL, "pOIProtSink == NULL\n"); - ok(pOIBindInfo != NULL, "pOIBindInfo == NULL\n"); - ok(grfPI == 0, "grfPI=%d, expected 0\n", grfPI); - ok(dwReserved == 0, "dwReserved=%d, expected 0\n", dwReserved); - - if(!filedwl_api && binding_hres != S_OK) { - SET_EXPECT(OnStopBinding); - SET_EXPECT(Terminate); - hres = IInternetProtocolSink_ReportResult(pOIProtSink, binding_hres, 0, NULL); - ok(hres == S_OK, "ReportResult failed: %08x\n", hres); - CHECK_CALLED(OnStopBinding); - CHECK_CALLED(Terminate); - - return S_OK; - } - - memset(&bindinfo, 0, sizeof(bindinfo)); - bindinfo.cbSize = sizeof(bindinfo); - hres = IInternetBindInfo_GetBindInfo(pOIBindInfo, &bindf, &bindinfo); - ok(hres == S_OK, "GetBindInfo failed: %08x\n", hres); - - if(filedwl_api) { - ok(bindf == (BINDF_PULLDATA|BINDF_FROMURLMON|BINDF_NEEDFILE), "bindf=%08x\n", bindf); - }else if(tymed == TYMED_ISTREAM - && (test_protocol == FILE_TEST || test_protocol == MK_TEST || test_protocol == HTTP_TEST)) { - ok(bindf == (BINDF_ASYNCHRONOUS|BINDF_ASYNCSTORAGE|BINDF_PULLDATA - |BINDF_FROMURLMON), - "bindf=%08x\n", bindf); - }else { - ok(bindf == (BINDF_ASYNCHRONOUS|BINDF_ASYNCSTORAGE|BINDF_PULLDATA - |BINDF_FROMURLMON|BINDF_NEEDFILE), - "bindf=%08x\n", bindf); - } - - ok(bindinfo.cbSize == sizeof(bindinfo), "bindinfo.cbSize = %d\n", bindinfo.cbSize); - ok(!bindinfo.szExtraInfo, "bindinfo.szExtraInfo = %p\n", bindinfo.szExtraInfo); - ok(!memcmp(&bindinfo.stgmedData, &stgmed_zero, sizeof(STGMEDIUM)), "wrong stgmedData\n"); - ok(!bindinfo.grfBindInfoF, "bindinfo.grfBindInfoF = %d\n", bindinfo.grfBindInfoF); - ok(!bindinfo.dwBindVerb, "bindinfo.dwBindVerb = %d\n", bindinfo.dwBindVerb); - ok(!bindinfo.szCustomVerb, "bindinfo.szCustomVerb = %p\n", bindinfo.szCustomVerb); - ok(!bindinfo.cbstgmedData, "bindinfo.cbstgmedData = %d\n", bindinfo.cbstgmedData); - ok(bindinfo.dwOptions == (bind_to_object ? 0x100000 : 0), "bindinfo.dwOptions = %x\n", bindinfo.dwOptions); - ok(!bindinfo.dwOptionsFlags, "bindinfo.dwOptionsFlags = %d\n", bindinfo.dwOptionsFlags); - ok(!bindinfo.dwCodePage, "bindinfo.dwCodePage = %d\n", bindinfo.dwCodePage); - ok(!memcmp(&bindinfo.securityAttributes, &sa_zero, sizeof(sa_zero)), "wrong bindinfo.securityAttributes\n"); - ok(IsEqualGUID(&bindinfo.iid, &IID_NULL), "wrong bindinfo.iid\n"); - ok(!bindinfo.pUnk, "bindinfo.pUnk = %p\n", bindinfo.pUnk); - ok(!bindinfo.dwReserved, "bindinfo.dwReserved = %d\n", bindinfo.dwReserved); - - switch(test_protocol) { - case MK_TEST: - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, - BINDSTATUS_DIRECTBIND, NULL); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_SENDINGREQUEST) failed: %08x\n", hres); - - case FILE_TEST: - case ITS_TEST: - if(bind_to_object) - SET_EXPECT(Obj_OnProgress_SENDINGREQUEST); - else - SET_EXPECT(OnProgress_SENDINGREQUEST); - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, - BINDSTATUS_SENDINGREQUEST, emptyW); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_SENDINGREQUEST) failed: %08x\n", hres); - if(bind_to_object) - CHECK_CALLED(Obj_OnProgress_SENDINGREQUEST); - else - CHECK_CALLED(OnProgress_SENDINGREQUEST); - default: - break; - } - - if(test_protocol == HTTP_TEST) { - IServiceProvider *service_provider; - IHttpNegotiate *http_negotiate; - IHttpNegotiate2 *http_negotiate2; - LPWSTR ua = (LPWSTR)0xdeadbeef, accept_mimes[256]; - LPWSTR additional_headers = (LPWSTR)0xdeadbeef; - BYTE sec_id[100]; - DWORD fetched = 256, size = 100; - DWORD tid; - - static const WCHAR wszMimes[] = {'*','/','*',0}; - - SET_EXPECT(QueryInterface_IInternetBindInfo); - SET_EXPECT(QueryService_IInternetBindInfo); - hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_USER_AGENT, - &ua, 1, &fetched); - todo_wine { - CHECK_CALLED(QueryInterface_IInternetBindInfo); - CHECK_CALLED(QueryService_IInternetBindInfo); - } - ok(hres == E_NOINTERFACE, - "GetBindString(BINDSTRING_USER_AGETNT) failed: %08x\n", hres); - ok(fetched == 256, "fetched = %d, expected 254\n", fetched); - ok(ua == (LPWSTR)0xdeadbeef, "ua = %p\n", ua); - - hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_ACCEPT_MIMES, - accept_mimes, 256, &fetched); - ok(hres == S_OK, - "GetBindString(BINDSTRING_ACCEPT_MIMES) failed: %08x\n", hres); - ok(fetched == 1, "fetched = %d, expected 1\n", fetched); - ok(!lstrcmpW(wszMimes, accept_mimes[0]), "unexpected mimes\n"); - - hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_ACCEPT_MIMES, - NULL, 256, &fetched); - ok(hres == E_INVALIDARG, - "GetBindString(BINDSTRING_ACCEPT_MIMES) failed: %08x\n", hres); - - hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_ACCEPT_MIMES, - accept_mimes, 256, NULL); - ok(hres == E_INVALIDARG, - "GetBindString(BINDSTRING_ACCEPT_MIMES) failed: %08x\n", hres); - - hres = IInternetBindInfo_QueryInterface(pOIBindInfo, &IID_IServiceProvider, - (void**)&service_provider); - ok(hres == S_OK, "QueryInterface failed: %08x\n", hres); - - SET_EXPECT(QueryInterface_IHttpNegotiate); - hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate, - &IID_IHttpNegotiate, (void**)&http_negotiate); - CHECK_CALLED(QueryInterface_IHttpNegotiate); - ok(hres == S_OK, "QueryService failed: %08x\n", hres); - - SET_EXPECT(BeginningTransaction); - hres = IHttpNegotiate_BeginningTransaction(http_negotiate, urls[test_protocol], - NULL, 0, &additional_headers); - CHECK_CALLED(BeginningTransaction); - IHttpNegotiate_Release(http_negotiate); - ok(hres == S_OK, "BeginningTransction failed: %08x\n", hres); - ok(additional_headers == NULL, "additional_headers=%p\n", additional_headers); - - SET_EXPECT(QueryInterface_IHttpNegotiate2); - hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate2, - &IID_IHttpNegotiate2, (void**)&http_negotiate2); - CHECK_CALLED(QueryInterface_IHttpNegotiate2); - ok(hres == S_OK, "QueryService failed: %08x\n", hres); - - size = 512; - SET_EXPECT(GetRootSecurityId); - hres = IHttpNegotiate2_GetRootSecurityId(http_negotiate2, sec_id, &size, 0); - CHECK_CALLED(GetRootSecurityId); - IHttpNegotiate2_Release(http_negotiate2); - ok(hres == E_FAIL, "GetRootSecurityId failed: %08x, expected E_FAIL\n", hres); - ok(size == 13, "size=%d\n", size); - - IServiceProvider_Release(service_provider); - - IInternetProtocolSink_AddRef(pOIProtSink); - protocol_sink = pOIProtSink; - CreateThread(NULL, 0, thread_proc, NULL, 0, &tid); - - return S_OK; - } - - if(test_protocol == FILE_TEST) { - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, - BINDSTATUS_CACHEFILENAMEAVAILABLE, file_url+8); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE) failed: %08x\n", hres); - - if(bind_to_object) - SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE); - else - SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, - BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, wszTextHtml); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE) failed: %08x\n", hres); - if(bind_to_object) - CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE); - else - CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); - }else { - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, - BINDSTATUS_MIMETYPEAVAILABLE, wszTextHtml); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08x\n", hres); - } - - if(test_protocol == ABOUT_TEST) - bscf |= BSCF_DATAFULLYAVAILABLE; - if(test_protocol == ITS_TEST) - bscf = BSCF_FIRSTDATANOTIFICATION|BSCF_DATAFULLYAVAILABLE; - - SET_EXPECT(Read); - if(bind_to_object) { - if(test_protocol != FILE_TEST && test_protocol != MK_TEST) - SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - SET_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE); - SET_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA); - SET_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE); - SET_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION); - SET_EXPECT(CreateInstance); - SET_EXPECT(PutProperty_MIMETYPEPROP); - SET_EXPECT(PutProperty_CLASSIDPROP); - SET_EXPECT(Load); - SET_EXPECT(Obj_OnProgress_ENDSYNCOPERATION); - SET_EXPECT(OnObjectAvailable); - SET_EXPECT(Obj_OnStopBinding); - }else { - if(test_protocol != FILE_TEST && test_protocol != MK_TEST) - SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE); - SET_EXPECT(OnProgress_ENDDOWNLOADDATA); - SET_EXPECT(LockRequest); - if(!filedwl_api) - SET_EXPECT(OnDataAvailable); - SET_EXPECT(OnStopBinding); - } - - hres = IInternetProtocolSink_ReportData(pOIProtSink, bscf, 13, 13); - ok(hres == S_OK, "ReportData failed: %08x\n", hres); - - CHECK_CALLED(Read); - if(bind_to_object) { - if(test_protocol != FILE_TEST && test_protocol != MK_TEST) - CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(Obj_OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - CHECK_CALLED(Obj_OnProgress_CACHEFILENAMEAVAILABLE); - CHECK_CALLED(Obj_OnProgress_ENDDOWNLOADDATA); - CHECK_CALLED(Obj_OnProgress_CLASSIDAVAILABLE); - CHECK_CALLED(Obj_OnProgress_BEGINSYNCOPERATION); - CHECK_CALLED(CreateInstance); - CHECK_CALLED(PutProperty_MIMETYPEPROP); - CLEAR_CALLED(PutProperty_CLASSIDPROP); - CHECK_CALLED(Load); - CHECK_CALLED(Obj_OnProgress_ENDSYNCOPERATION); - CHECK_CALLED(OnObjectAvailable); - CHECK_CALLED(Obj_OnStopBinding); - }else { - if(test_protocol != FILE_TEST && test_protocol != MK_TEST) - CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE); - CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); - CHECK_CALLED(LockRequest); - if(!filedwl_api) - CHECK_CALLED(OnDataAvailable); - CHECK_CALLED(OnStopBinding); - } - - if(test_protocol == ITS_TEST) { - SET_EXPECT(Read); - hres = IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_BEGINDOWNLOADDATA, NULL); - ok(hres == S_OK, "ReportProgress(BINDSTATUS_BEGINDOWNLOADDATA) failed: %08x\n", hres); - CHECK_CALLED(Read); - } - - SET_EXPECT(Terminate); - hres = IInternetProtocolSink_ReportResult(pOIProtSink, S_OK, 0, NULL); - ok(hres == S_OK, "ReportResult failed: %08x\n", hres); - CHECK_CALLED(Terminate); - - return S_OK; -} - -static HRESULT WINAPI Protocol_Continue(IInternetProtocol *iface, - PROTOCOLDATA *pProtocolData) -{ - DWORD bscf = 0; - HRESULT hres; - - CHECK_EXPECT(Continue); - - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - ok(pProtocolData != NULL, "pProtocolData == NULL\n"); - if(!pProtocolData) - return S_OK; - - switch(prot_state) { - case 1: { - IServiceProvider *service_provider; - IHttpNegotiate *http_negotiate; - static WCHAR header[] = {'?',0}; - - hres = IInternetProtocolSink_QueryInterface(protocol_sink, &IID_IServiceProvider, - (void**)&service_provider); - ok(hres == S_OK, "Could not get IServiceProvicder\n"); - - hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate, - &IID_IHttpNegotiate, (void**)&http_negotiate); - ok(hres == S_OK, "Could not get IHttpNegotiate\n"); - - SET_EXPECT(OnResponse); - hres = IHttpNegotiate_OnResponse(http_negotiate, 200, header, NULL, NULL); - CHECK_CALLED(OnResponse); - IHttpNegotiate_Release(http_negotiate); - ok(hres == S_OK, "OnResponse failed: %08x\n", hres); - - hres = IInternetProtocolSink_ReportProgress(protocol_sink, - BINDSTATUS_MIMETYPEAVAILABLE, wszTextHtml); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08x\n", hres); - - if(tymed == TYMED_FILE) { - hres = IInternetProtocolSink_ReportProgress(protocol_sink, - BINDSTATUS_CACHEFILENAMEAVAILABLE, cache_fileW); - ok(hres == S_OK, - "ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE) failed: %08x\n", hres); - } - - bscf |= BSCF_FIRSTDATANOTIFICATION; - break; - } - case 2: - case 3: - bscf = BSCF_INTERMEDIATEDATANOTIFICATION; - break; - } - - hres = IInternetProtocolSink_ReportData(protocol_sink, bscf, 100, 400); - ok(hres == S_OK, "ReportData failed: %08x\n", hres); - - SET_EXPECT(Read); - switch(prot_state) { - case 1: - if(bind_to_object) { - SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA); - SET_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE); - SET_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION); - SET_EXPECT(CreateInstance); - SET_EXPECT(PutProperty_MIMETYPEPROP); - SET_EXPECT(PutProperty_CLASSIDPROP); - SET_EXPECT(Load); - SET_EXPECT(Obj_OnProgress_ENDSYNCOPERATION); - SET_EXPECT(OnObjectAvailable); - SET_EXPECT(Obj_OnStopBinding); - }else { - SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); - SET_EXPECT(LockRequest); - } - break; - case 2: - SET_EXPECT(OnProgress_DOWNLOADINGDATA); - break; - case 3: - SET_EXPECT(OnProgress_DOWNLOADINGDATA); - SET_EXPECT(OnProgress_ENDDOWNLOADDATA); - } - if(!bind_to_object || prot_state >= 2) - SET_EXPECT(OnDataAvailable); - if(prot_state == 3) - SET_EXPECT(OnStopBinding); - - return S_OK; -} - -static HRESULT WINAPI Protocol_Abort(IInternetProtocol *iface, HRESULT hrReason, - DWORD dwOptions) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Terminate(IInternetProtocol *iface, DWORD dwOptions) -{ - CHECK_EXPECT(Terminate); - - ok(dwOptions == 0, "dwOptions=%d, expected 0\n", dwOptions); - - if(protocol_sink) { - IInternetProtocolSink_Release(protocol_sink); - protocol_sink = NULL; - } - - return S_OK; -} - -static HRESULT WINAPI Protocol_Suspend(IInternetProtocol *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Resume(IInternetProtocol *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv, - ULONG cb, ULONG *pcbRead) -{ - static const char data[] = ""; - - CHECK_EXPECT2(Read); - - if(test_protocol == HTTP_TEST) { - HRESULT hres; - - static BOOL pending = TRUE; - - pending = !pending; - - switch(prot_state) { - case 1: - case 2: - if(pending) { - *pcbRead = 10; - memset(pv, '?', 10); - return E_PENDING; - }else { - memset(pv, '?', cb); - *pcbRead = cb; - read++; - return S_OK; - } - case 3: - prot_state++; - - *pcbRead = 0; - - hres = IInternetProtocolSink_ReportData(protocol_sink, - BSCF_LASTDATANOTIFICATION|BSCF_INTERMEDIATEDATANOTIFICATION, 2000, 2000); - ok(hres == S_OK, "ReportData failed: %08x\n", hres); - - hres = IInternetProtocolSink_ReportResult(protocol_sink, S_OK, 0, NULL); - ok(hres == S_OK, "ReportResult failed: %08x\n", hres); - - return S_FALSE; - case 4: - *pcbRead = 0; - return S_FALSE; - } - } - - if(read) { - *pcbRead = 0; - return S_FALSE; - } - - ok(pv != NULL, "pv == NULL\n"); - ok(cb != 0, "cb == 0\n"); - ok(pcbRead != NULL, "pcbRead == NULL\n"); - if(pcbRead) { - ok(*pcbRead == 0, "*pcbRead=%d, expected 0\n", *pcbRead); - read += *pcbRead = sizeof(data)-1; - } - if(pv) - memcpy(pv, data, sizeof(data)); - - return S_OK; -} - -static HRESULT WINAPI Protocol_Seek(IInternetProtocol *iface, - LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI Protocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions) -{ - CHECK_EXPECT(LockRequest); - return S_OK; -} - -static HRESULT WINAPI Protocol_UnlockRequest(IInternetProtocol *iface) -{ - CHECK_EXPECT(UnlockRequest); - return S_OK; -} - -static const IInternetProtocolVtbl ProtocolVtbl = { - Protocol_QueryInterface, - Protocol_AddRef, - Protocol_Release, - Protocol_Start, - Protocol_Continue, - Protocol_Abort, - Protocol_Terminate, - Protocol_Suspend, - Protocol_Resume, - Protocol_Read, - Protocol_Seek, - Protocol_LockRequest, - Protocol_UnlockRequest -}; - -static IInternetProtocol Protocol = { &ProtocolVtbl }; - -static HRESULT WINAPI HttpNegotiate_QueryInterface(IHttpNegotiate2 *iface, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IUnknown, riid) - || IsEqualGUID(&IID_IHttpNegotiate, riid) - || IsEqualGUID(&IID_IHttpNegotiate2, riid)) { - *ppv = iface; - return S_OK; - } - - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI HttpNegotiate_AddRef(IHttpNegotiate2 *iface) -{ - return 2; -} - -static ULONG WINAPI HttpNegotiate_Release(IHttpNegotiate2 *iface) -{ - return 1; -} - -static HRESULT WINAPI HttpNegotiate_BeginningTransaction(IHttpNegotiate2 *iface, LPCWSTR szURL, - LPCWSTR szHeaders, DWORD dwReserved, LPWSTR *pszAdditionalHeaders) -{ - CHECK_EXPECT(BeginningTransaction); - - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - ok(!lstrcmpW(szURL, urls[test_protocol]), "szURL != urls[test_protocol]\n"); - ok(!dwReserved, "dwReserved=%d, expected 0\n", dwReserved); - ok(pszAdditionalHeaders != NULL, "pszAdditionalHeaders == NULL\n"); - if(pszAdditionalHeaders) - ok(*pszAdditionalHeaders == NULL, "*pszAdditionalHeaders != NULL\n"); - - return S_OK; -} - -static HRESULT WINAPI HttpNegotiate_OnResponse(IHttpNegotiate2 *iface, DWORD dwResponseCode, - LPCWSTR szResponseHeaders, LPCWSTR szRequestHeaders, LPWSTR *pszAdditionalRequestHeaders) -{ - CHECK_EXPECT(OnResponse); - - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - ok(dwResponseCode == 200, "dwResponseCode=%d, expected 200\n", dwResponseCode); - ok(szResponseHeaders != NULL, "szResponseHeaders == NULL\n"); - ok(szRequestHeaders == NULL, "szRequestHeaders != NULL\n"); - /* Note: in protocol.c tests, OnResponse pszAdditionalRequestHeaders _is_ NULL */ - ok(pszAdditionalRequestHeaders != NULL, "pszAdditionalHeaders == NULL\n"); - if(pszAdditionalRequestHeaders) - ok(*pszAdditionalRequestHeaders == NULL, "*pszAdditionalHeaders != NULL\n"); - - return S_OK; -} - -static HRESULT WINAPI HttpNegotiate_GetRootSecurityId(IHttpNegotiate2 *iface, - BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved) -{ - static const BYTE sec_id[] = {'h','t','t','p',':','t','e','s','t',1,0,0,0}; - - CHECK_EXPECT(GetRootSecurityId); - - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - ok(!dwReserved, "dwReserved=%ld, expected 0\n", dwReserved); - ok(pbSecurityId != NULL, "pbSecurityId == NULL\n"); - ok(pcbSecurityId != NULL, "pcbSecurityId == NULL\n"); - - if(pbSecurityId == (void*)0xdeadbeef) - return E_NOTIMPL; - - if(pcbSecurityId) { - ok(*pcbSecurityId == 512, "*pcbSecurityId=%d, expected 512\n", *pcbSecurityId); - *pcbSecurityId = sizeof(sec_id); - } - - if(pbSecurityId) - memcpy(pbSecurityId, sec_id, sizeof(sec_id)); - - return E_FAIL; -} - -static IHttpNegotiate2Vtbl HttpNegotiateVtbl = { - HttpNegotiate_QueryInterface, - HttpNegotiate_AddRef, - HttpNegotiate_Release, - HttpNegotiate_BeginningTransaction, - HttpNegotiate_OnResponse, - HttpNegotiate_GetRootSecurityId -}; - -static IHttpNegotiate2 HttpNegotiate = { &HttpNegotiateVtbl }; - -static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv) -{ - ok(0, "unexpected call\n"); - return E_NOINTERFACE; -} - -static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface) -{ - return 2; -} - -static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface) -{ - return 1; -} - -static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, - REFGUID guidService, REFIID riid, void **ppv) -{ - if(IsEqualGUID(&IID_IAuthenticate, guidService)) { - CHECK_EXPECT(QueryService_IAuthenticate); - return E_NOTIMPL; - } - - if(IsEqualGUID(&IID_IInternetProtocol, guidService)) { - CHECK_EXPECT2(QueryService_IInternetProtocol); - return E_NOTIMPL; - } - - if(IsEqualGUID(&IID_IInternetBindInfo, guidService)) { - CHECK_EXPECT(QueryService_IInternetBindInfo); - return E_NOTIMPL; - } - - ok(0, "unexpected service %s\n", debugstr_guid(guidService)); - return E_NOINTERFACE; -} - -static IServiceProviderVtbl ServiceProviderVtbl = { - ServiceProvider_QueryInterface, - ServiceProvider_AddRef, - ServiceProvider_Release, - ServiceProvider_QueryService -}; - -static IServiceProvider ServiceProvider = { &ServiceProviderVtbl }; - -static IBindStatusCallback objbsc; - -static HRESULT WINAPI statusclb_QueryInterface(IBindStatusCallback *iface, REFIID riid, void **ppv) -{ - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - if(IsEqualGUID(&IID_IInternetProtocol, riid)) { - CHECK_EXPECT2(QueryInterface_IInternetProtocol); - if(emulate_protocol) { - *ppv = &Protocol; - return S_OK; - }else { - return E_NOINTERFACE; - } - } - else if (IsEqualGUID(&IID_IServiceProvider, riid)) - { - CHECK_EXPECT2(QueryInterface_IServiceProvider); - *ppv = &ServiceProvider; - return S_OK; - } - else if (IsEqualGUID(&IID_IHttpNegotiate, riid)) - { - CHECK_EXPECT(QueryInterface_IHttpNegotiate); - *ppv = &HttpNegotiate; - return S_OK; - } - else if (IsEqualGUID(&IID_IHttpNegotiate2, riid)) - { - CHECK_EXPECT(QueryInterface_IHttpNegotiate2); - *ppv = &HttpNegotiate; - return S_OK; - } - else if (IsEqualGUID(&IID_IAuthenticate, riid)) - { - CHECK_EXPECT(QueryInterface_IAuthenticate); - return E_NOINTERFACE; - } - else if(IsEqualGUID(&IID_IBindStatusCallback, riid)) - { - CHECK_EXPECT2(QueryInterface_IBindStatusCallback); - *ppv = iface; - return S_OK; - } - else if(IsEqualGUID(&IID_IBindStatusCallbackHolder, riid)) - { - CHECK_EXPECT2(QueryInterface_IBindStatusCallbackHolder); - return E_NOINTERFACE; - } - else if(IsEqualGUID(&IID_IInternetBindInfo, riid)) - { - /* TODO */ - CHECK_EXPECT2(QueryInterface_IInternetBindInfo); - } - else - { - ok(0, "unexpected interface %s\n", debugstr_guid(riid)); - } - - return E_NOINTERFACE; -} - -static ULONG WINAPI statusclb_AddRef(IBindStatusCallback *iface) -{ - return 2; -} - -static ULONG WINAPI statusclb_Release(IBindStatusCallback *iface) -{ - return 1; -} - -static HRESULT WINAPI statusclb_OnStartBinding(IBindStatusCallback *iface, DWORD dwReserved, - IBinding *pib) -{ - IWinInetHttpInfo *http_info; - HRESULT hres; - IMoniker *mon; - - if(iface == &objbsc) - CHECK_EXPECT(Obj_OnStartBinding); - else - CHECK_EXPECT(OnStartBinding); - - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - ok(pib != NULL, "pib should not be NULL\n"); - ok(dwReserved == 0xff, "dwReserved=%x\n", dwReserved); - - if(pib == (void*)0xdeadbeef) - return S_OK; - - hres = IBinding_QueryInterface(pib, &IID_IMoniker, (void**)&mon); - ok(hres == E_NOINTERFACE, "IBinding should not have IMoniker interface\n"); - if(SUCCEEDED(hres)) - IMoniker_Release(mon); - - hres = IBinding_QueryInterface(pib, &IID_IWinInetHttpInfo, (void**)&http_info); - ok(hres == E_NOINTERFACE, "Could not get IID_IWinInetHttpInfo: %08x\n", hres); - - return S_OK; -} - -static HRESULT WINAPI statusclb_GetPriority(IBindStatusCallback *iface, LONG *pnPriority) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI statusclb_OnLowResource(IBindStatusCallback *iface, DWORD reserved) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulProgress, - ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) -{ - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - switch(ulStatusCode) { - case BINDSTATUS_FINDINGRESOURCE: - if(iface == &objbsc) - CHECK_EXPECT(Obj_OnProgress_FINDINGRESOURCE); - else - CHECK_EXPECT(OnProgress_FINDINGRESOURCE); - if((bindf & BINDF_ASYNCHRONOUS) && emulate_protocol) - SetEvent(complete_event); - break; - case BINDSTATUS_CONNECTING: - if(iface == &objbsc) - CHECK_EXPECT(Obj_OnProgress_CONNECTING); - else - CHECK_EXPECT(OnProgress_CONNECTING); - if((bindf & BINDF_ASYNCHRONOUS) && emulate_protocol) - SetEvent(complete_event); - break; - case BINDSTATUS_SENDINGREQUEST: - if(iface == &objbsc) - CHECK_EXPECT(Obj_OnProgress_SENDINGREQUEST); - else - CHECK_EXPECT(OnProgress_SENDINGREQUEST); - if((bindf & BINDF_ASYNCHRONOUS) && emulate_protocol) - SetEvent(complete_event); - break; - case BINDSTATUS_MIMETYPEAVAILABLE: - if(iface == &objbsc) - CHECK_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE); - else - CHECK_EXPECT(OnProgress_MIMETYPEAVAILABLE); - if(!bind_to_object) - ok(download_state == BEFORE_DOWNLOAD, "Download state was %d, expected BEFORE_DOWNLOAD\n", - download_state); - WideCharToMultiByte(CP_ACP, 0, szStatusText, -1, mime_type, sizeof(mime_type)-1, NULL, NULL); - break; - case BINDSTATUS_BEGINDOWNLOADDATA: - if(iface == &objbsc) - CHECK_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA); - else - CHECK_EXPECT(OnProgress_BEGINDOWNLOADDATA); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) { - if(filedwl_api) { - /* FIXME */ - }else { - ok(!lstrcmpW(szStatusText, urls[test_protocol]), "wrong szStatusText %s\n", debugstr_w(szStatusText)); - } - } - if(!bind_to_object) - ok(download_state == BEFORE_DOWNLOAD, "Download state was %d, expected BEFORE_DOWNLOAD\n", - download_state); - download_state = DOWNLOADING; - break; - case BINDSTATUS_DOWNLOADINGDATA: - CHECK_EXPECT2(OnProgress_DOWNLOADINGDATA); - if(iface == &objbsc) - todo_wine ok(0, "unexpected call\n"); - ok(download_state == DOWNLOADING, "Download state was %d, expected DOWNLOADING\n", - download_state); - break; - case BINDSTATUS_ENDDOWNLOADDATA: - if(iface == &objbsc) - CHECK_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA); - else - CHECK_EXPECT(OnProgress_ENDDOWNLOADDATA); - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText) { - if(filedwl_api) { - /* FIXME */ - }else { - ok(!lstrcmpW(szStatusText, urls[test_protocol]), "wrong szStatusText %s\n", debugstr_w(szStatusText)); - } - } - ok(download_state == DOWNLOADING, "Download state was %d, expected DOWNLOADING\n", - download_state); - download_state = END_DOWNLOAD; - break; - case BINDSTATUS_CACHEFILENAMEAVAILABLE: - if(test_protocol != HTTP_TEST) { - if(iface == &objbsc) - CHECK_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE); - else - CHECK_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE); - }else { /* FIXME */ - CLEAR_CALLED(OnProgress_CACHEFILENAMEAVAILABLE); - CLEAR_CALLED(Obj_OnProgress_CACHEFILENAMEAVAILABLE); - } - - ok(szStatusText != NULL, "szStatusText == NULL\n"); - if(szStatusText && test_protocol == FILE_TEST) - ok(!lstrcmpW(file_url+8, szStatusText), "wrong szStatusText %s\n", debugstr_w(szStatusText)); - break; - case BINDSTATUS_CLASSIDAVAILABLE: - { - CLSID clsid; - HRESULT hr; - if(iface != &objbsc) - ok(0, "unexpected call\n"); - else if(1||emulate_protocol) - CHECK_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE); - else - todo_wine CHECK_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE); - hr = CLSIDFromString((LPOLESTR)szStatusText, &clsid); - ok(hr == S_OK, "CLSIDFromString failed with error 0x%08x\n", hr); - ok(IsEqualCLSID(&clsid, &CLSID_HTMLDocument), - "Expected clsid to be CLSID_HTMLDocument instead of %s\n", debugstr_guid(&clsid)); - break; - } - case BINDSTATUS_BEGINSYNCOPERATION: - CHECK_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION); - if(iface != &objbsc) - ok(0, "unexpected call\n"); - ok(szStatusText == NULL, "Expected szStatusText to be NULL\n"); - break; - case BINDSTATUS_ENDSYNCOPERATION: - CHECK_EXPECT(Obj_OnProgress_ENDSYNCOPERATION); - if(iface != &objbsc) - ok(0, "unexpected call\n"); - ok(szStatusText == NULL, "Expected szStatusText to be NULL\n"); - break; - default: - ok(0, "unexpected code %d\n", ulStatusCode); - }; - return S_OK; -} - -static HRESULT WINAPI statusclb_OnStopBinding(IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError) -{ - if(iface == &objbsc) { - CHECK_EXPECT(Obj_OnStopBinding); - stopped_obj_binding = TRUE; - }else { - CHECK_EXPECT(OnStopBinding); - stopped_binding = TRUE; - } - - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - /* ignore DNS failure */ - if (hresult == HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED)) - return S_OK; - - if(filedwl_api) - ok(SUCCEEDED(hresult), "binding failed: %08x\n", hresult); - else - ok(hresult == binding_hres, "binding failed: %08x, expected %08x\n", hresult, binding_hres); - ok(szError == NULL, "szError should be NULL\n"); - - if(test_protocol == HTTP_TEST && emulate_protocol) { - SetEvent(complete_event); - if(iface != &objbsc) - WaitForSingleObject(complete_event2, INFINITE); - } - - return S_OK; -} - -static HRESULT WINAPI statusclb_GetBindInfo(IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo) -{ - DWORD cbSize; - - if(iface == &objbsc) - CHECK_EXPECT(Obj_GetBindInfo); - else - CHECK_EXPECT(GetBindInfo); - - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - *grfBINDF = bindf; - cbSize = pbindinfo->cbSize; - memset(pbindinfo, 0, cbSize); - pbindinfo->cbSize = cbSize; - - return S_OK; -} - -static HRESULT WINAPI statusclb_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF, - DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed) -{ - HRESULT hres; - DWORD readed; - BYTE buf[512]; - CHAR clipfmt[512]; - - if(iface == &objbsc) - ok(0, "unexpected call\n"); - - CHECK_EXPECT2(OnDataAvailable); - - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - ok(download_state == DOWNLOADING || download_state == END_DOWNLOAD, - "Download state was %d, expected DOWNLOADING or END_DOWNLOAD\n", - download_state); - data_available = TRUE; - - ok(pformatetc != NULL, "pformatetx == NULL\n"); - if(pformatetc) { - if (mime_type[0]) { - clipfmt[0] = 0; - ok(GetClipboardFormatName(pformatetc->cfFormat, clipfmt, sizeof(clipfmt)-1), - "GetClipboardFormatName failed, error %d\n", GetLastError()); - ok(!lstrcmp(clipfmt, mime_type), "clipformat %x != mime_type, \"%s\" != \"%s\"\n", - pformatetc->cfFormat, clipfmt, mime_type); - } else { - ok(pformatetc->cfFormat == 0, "clipformat=%x\n", pformatetc->cfFormat); - } - ok(pformatetc->ptd == NULL, "ptd = %p\n", pformatetc->ptd); - ok(pformatetc->dwAspect == 1, "dwAspect=%u\n", pformatetc->dwAspect); - ok(pformatetc->lindex == -1, "lindex=%d\n", pformatetc->lindex); - ok(pformatetc->tymed == tymed, "tymed=%u, expected %u\n", pformatetc->tymed, tymed); - } - - ok(pstgmed != NULL, "stgmeg == NULL\n"); - ok(pstgmed->tymed == tymed, "tymed=%u, expected %u\n", pstgmed->tymed, tymed); - ok(pstgmed->pUnkForRelease != NULL, "pUnkForRelease == NULL\n"); - - switch(pstgmed->tymed) { - case TYMED_ISTREAM: - if(grfBSCF & BSCF_FIRSTDATANOTIFICATION) { - hres = IStream_Write(U(*pstgmed).pstm, buf, 10, NULL); - ok(hres == STG_E_ACCESSDENIED, - "Write failed: %08x, expected STG_E_ACCESSDENIED\n", hres); - - hres = IStream_Commit(U(*pstgmed).pstm, 0); - ok(hres == E_NOTIMPL, "Commit failed: %08x, expected E_NOTIMPL\n", hres); - - hres = IStream_Revert(U(*pstgmed).pstm); - ok(hres == E_NOTIMPL, "Revert failed: %08x, expected E_NOTIMPL\n", hres); - } - - ok(U(*pstgmed).pstm != NULL, "U(*pstgmed).pstm == NULL\n"); - do hres = IStream_Read(U(*pstgmed).pstm, buf, 512, &readed); - while(hres == S_OK); - ok(hres == S_FALSE || hres == E_PENDING, "IStream_Read returned %08x\n", hres); - break; - - case TYMED_FILE: - if(test_protocol == FILE_TEST) - ok(!lstrcmpW(pstgmed->u.lpszFileName, INDEX_HTML+7), - "unexpected file name %s\n", debugstr_w(pstgmed->u.lpszFileName)); - else if(emulate_protocol) - ok(!lstrcmpW(pstgmed->u.lpszFileName, cache_fileW), - "unexpected file name %s\n", debugstr_w(pstgmed->u.lpszFileName)); - else - ok(pstgmed->u.lpszFileName != NULL, "lpszFileName == NULL\n"); - } - - if(test_protocol == HTTP_TEST && emulate_protocol && prot_state < 4 && (!bind_to_object || prot_state > 1)) - SetEvent(complete_event); - - return S_OK; -} - -static HRESULT WINAPI statusclb_OnObjectAvailable(IBindStatusCallback *iface, REFIID riid, IUnknown *punk) -{ - CHECK_EXPECT(OnObjectAvailable); - - if(iface != &objbsc) - ok(0, "unexpected call\n"); - - ok(IsEqualGUID(&IID_IUnknown, riid), "riid = %s\n", debugstr_guid(riid)); - ok(punk != NULL, "punk == NULL\n"); - - return S_OK; -} - -static const IBindStatusCallbackVtbl BindStatusCallbackVtbl = { - statusclb_QueryInterface, - statusclb_AddRef, - statusclb_Release, - statusclb_OnStartBinding, - statusclb_GetPriority, - statusclb_OnLowResource, - statusclb_OnProgress, - statusclb_OnStopBinding, - statusclb_GetBindInfo, - statusclb_OnDataAvailable, - statusclb_OnObjectAvailable -}; - -static IBindStatusCallback bsc = { &BindStatusCallbackVtbl }; -static IBindStatusCallback objbsc = { &BindStatusCallbackVtbl }; - -static HRESULT WINAPI MonikerProp_QueryInterface(IMonikerProp *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - ok(0, "unexpected riid %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -static ULONG WINAPI MonikerProp_AddRef(IMonikerProp *iface) -{ - return 2; -} - -static ULONG WINAPI MonikerProp_Release(IMonikerProp *iface) -{ - return 1; -} - -static HRESULT WINAPI MonikerProp_PutProperty(IMonikerProp *iface, MONIKERPROPERTY mkp, LPCWSTR val) -{ - switch(mkp) { - case MIMETYPEPROP: - CHECK_EXPECT(PutProperty_MIMETYPEPROP); - ok(!lstrcmpW(val, wszTextHtml), "val = %s\n", debugstr_w(val)); - break; - case CLASSIDPROP: - CHECK_EXPECT(PutProperty_CLASSIDPROP); - break; - default: - break; - } - - return S_OK; -} - -static const IMonikerPropVtbl MonikerPropVtbl = { - MonikerProp_QueryInterface, - MonikerProp_AddRef, - MonikerProp_Release, - MonikerProp_PutProperty -}; - -static IMonikerProp MonikerProp = { &MonikerPropVtbl }; - -static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IPersistMoniker, riid)) - *ppv = iface; - else if(IsEqualGUID(&IID_IMonikerProp, riid)) - *ppv = &MonikerProp; - - if(*ppv) - return S_OK; - - ok(0, "unexpected riid %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface) -{ - return 2; -} - -static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface) -{ - return 1; -} - -static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable, - IMoniker *pimkName, LPBC pibc, DWORD grfMode) -{ - IUnknown *unk; - HRESULT hres; - - static WCHAR cbinding_contextW[] = - {'C','B','i','n','d','i','n','g',' ','C','o','n','t','e','x','t',0}; - - CHECK_EXPECT(Load); - ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId()); - - if(test_protocol == HTTP_TEST) - ok(!fFullyAvailable, "fFulyAvailable = %x\n", fFullyAvailable); - else - ok(fFullyAvailable, "fFulyAvailable = %x\n", fFullyAvailable); - ok(pimkName != NULL, "pimkName == NULL\n"); - ok(pibc != NULL, "pibc == NULL\n"); - ok(grfMode == 0x12, "grfMode = %x\n", grfMode); - - hres = IBindCtx_GetObjectParam(pibc, cbinding_contextW, &unk); - ok(hres == S_OK, "GetObjectParam(CBinding Context) failed: %08x\n", hres); - if(SUCCEEDED(hres)) { - IBinding *binding; - - hres = IUnknown_QueryInterface(unk, &IID_IBinding, (void**)&binding); - ok(hres == S_OK, "Could not get IBinding: %08x\n", hres); - - IBinding_Release(binding); - IUnknown_Release(unk); - } - - SET_EXPECT(QueryInterface_IServiceProvider); - hres = RegisterBindStatusCallback(pibc, &bsc, NULL, 0); - ok(hres == S_OK, "RegisterBindStatusCallback failed: %08x\n", hres); - CHECK_CALLED(QueryInterface_IServiceProvider); - - SET_EXPECT(GetBindInfo); - SET_EXPECT(OnStartBinding); - SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE); - if(test_protocol != HTTP_TEST) - SET_EXPECT(OnProgress_ENDDOWNLOADDATA); - SET_EXPECT(LockRequest); - SET_EXPECT(OnDataAvailable); - if(test_protocol != HTTP_TEST) - SET_EXPECT(OnStopBinding); - - hres = IMoniker_BindToStorage(pimkName, pibc, NULL, &IID_IStream, (void**)&unk); - ok(hres == S_OK, "Load failed: %08x\n", hres); - - CHECK_CALLED(GetBindInfo); - CHECK_CALLED(OnStartBinding); - CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE); - if(test_protocol != HTTP_TEST) - CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); - CHECK_CALLED(LockRequest); - CHECK_CALLED(OnDataAvailable); - if(test_protocol != HTTP_TEST) - CHECK_CALLED(OnStopBinding); - - if(unk) - IUnknown_Release(unk); - - return S_OK; -} - -static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName, LPBC pbc, BOOL fRemember) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI PersistMoniker_SaveCompleted(IPersistMoniker *iface, IMoniker *pimkName, LPBC pibc) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI PersistMoniker_GetCurMoniker(IPersistMoniker *iface, IMoniker **pimkName) -{ - ok(0, "unexpected call\n"); - return E_NOTIMPL; -} - -static const IPersistMonikerVtbl PersistMonikerVtbl = { - PersistMoniker_QueryInterface, - PersistMoniker_AddRef, - PersistMoniker_Release, - PersistMoniker_GetClassID, - PersistMoniker_IsDirty, - PersistMoniker_Load, - PersistMoniker_Save, - PersistMoniker_SaveCompleted, - PersistMoniker_GetCurMoniker -}; - -static IPersistMoniker PersistMoniker = { &PersistMonikerVtbl }; - -static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - - if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IClassFactory, riid)) { - *ppv = iface; - return S_OK; - } - - if(IsEqualGUID(&IID_IMarshal, riid)) - return E_NOINTERFACE; - if(IsEqualGUID(&CLSID_IdentityUnmarshal, riid)) - return E_NOINTERFACE; - - ok(0, "unexpected riid %s\n", debugstr_guid(riid)); - return E_NOTIMPL; -} - -static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) -{ - return 2; -} - -static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) -{ - return 1; -} - -static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) -{ - CHECK_EXPECT(CreateInstance); - ok(!outer, "outer = %p\n", outer); - ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", debugstr_guid(riid)); - *ppv = &PersistMoniker; - return S_OK; -} - -static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock) -{ - ok(0, "unexpected call\n"); - return S_OK; -} - -static const IClassFactoryVtbl ClassFactoryVtbl = { - ClassFactory_QueryInterface, - ClassFactory_AddRef, - ClassFactory_Release, - ClassFactory_CreateInstance, - ClassFactory_LockServer -}; - -static IClassFactory mime_cf = { &ClassFactoryVtbl }; - -static void test_CreateAsyncBindCtx(void) -{ - IBindCtx *bctx = (IBindCtx*)0x0ff00ff0; - IUnknown *unk; - HRESULT hres; - ULONG ref; - BIND_OPTS bindopts; - - hres = CreateAsyncBindCtx(0, NULL, NULL, &bctx); - ok(hres == E_INVALIDARG, "CreateAsyncBindCtx failed. expected: E_INVALIDARG, got: %08x\n", hres); - ok(bctx == (IBindCtx*)0x0ff00ff0, "bctx should not be changed\n"); - - hres = CreateAsyncBindCtx(0, NULL, NULL, NULL); - ok(hres == E_INVALIDARG, "CreateAsyncBindCtx failed. expected: E_INVALIDARG, got: %08x\n", hres); - - SET_EXPECT(QueryInterface_IServiceProvider); - hres = CreateAsyncBindCtx(0, &bsc, NULL, &bctx); - ok(hres == S_OK, "CreateAsyncBindCtx failed: %08x\n", hres); - CHECK_CALLED(QueryInterface_IServiceProvider); - - bindopts.cbStruct = sizeof(bindopts); - hres = IBindCtx_GetBindOptions(bctx, &bindopts); - ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08x\n", hres); - ok(bindopts.grfFlags == BIND_MAYBOTHERUSER, - "bindopts.grfFlags = %08x, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags); - ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE), - "bindopts.grfMode = %08x, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n", - bindopts.grfMode); - ok(bindopts.dwTickCountDeadline == 0, - "bindopts.dwTickCountDeadline = %08x, expected: 0\n", bindopts.dwTickCountDeadline); - - hres = IBindCtx_QueryInterface(bctx, &IID_IAsyncBindCtx, (void**)&unk); - ok(hres == E_NOINTERFACE, "QueryInterface(IID_IAsyncBindCtx) failed: %08x, expected E_NOINTERFACE\n", hres); - if(SUCCEEDED(hres)) - IUnknown_Release(unk); - - ref = IBindCtx_Release(bctx); - ok(ref == 0, "bctx should be destroyed here\n"); -} - -static void test_CreateAsyncBindCtxEx(void) -{ - IBindCtx *bctx = NULL, *bctx2 = NULL, *bctx_arg = NULL; - IUnknown *unk; - BIND_OPTS bindopts; - HRESULT hres; - - static WCHAR testW[] = {'t','e','s','t',0}; - - hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, NULL, 0); - ok(hres == E_INVALIDARG, "CreateAsyncBindCtx failed: %08x, expected E_INVALIDARG\n", hres); - - hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0); - ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08x\n", hres); - - if(SUCCEEDED(hres)) { - bindopts.cbStruct = sizeof(bindopts); - hres = IBindCtx_GetBindOptions(bctx, &bindopts); - ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08x\n", hres); - ok(bindopts.grfFlags == BIND_MAYBOTHERUSER, - "bindopts.grfFlags = %08x, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags); - ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE), - "bindopts.grfMode = %08x, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n", - bindopts.grfMode); - ok(bindopts.dwTickCountDeadline == 0, - "bindopts.dwTickCountDeadline = %08x, expected: 0\n", bindopts.dwTickCountDeadline); - - IBindCtx_Release(bctx); - } - - CreateBindCtx(0, &bctx_arg); - hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0); - ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08x\n", hres); - - if(SUCCEEDED(hres)) { - bindopts.cbStruct = sizeof(bindopts); - hres = IBindCtx_GetBindOptions(bctx, &bindopts); - ok(SUCCEEDED(hres), "IBindCtx_GetBindOptions failed: %08x\n", hres); - ok(bindopts.grfFlags == BIND_MAYBOTHERUSER, - "bindopts.grfFlags = %08x, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags); - ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE), - "bindopts.grfMode = %08x, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n", - bindopts.grfMode); - ok(bindopts.dwTickCountDeadline == 0, - "bindopts.dwTickCountDeadline = %08x, expected: 0\n", bindopts.dwTickCountDeadline); - - IBindCtx_Release(bctx); - } - - IBindCtx_Release(bctx_arg); - - SET_EXPECT(QueryInterface_IServiceProvider); - hres = CreateAsyncBindCtxEx(NULL, 0, &bsc, NULL, &bctx, 0); - ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08x\n", hres); - CHECK_CALLED(QueryInterface_IServiceProvider); - - hres = IBindCtx_QueryInterface(bctx, &IID_IAsyncBindCtx, (void**)&unk); - ok(hres == S_OK, "QueryInterface(IID_IAsyncBindCtx) failed: %08x\n", hres); - if(SUCCEEDED(hres)) - IUnknown_Release(unk); - - IBindCtx_Release(bctx); - - hres = CreateBindCtx(0, &bctx2); - ok(hres == S_OK, "CreateBindCtx failed: %08x\n", hres); - - hres = CreateAsyncBindCtxEx(bctx2, 0, NULL, NULL, &bctx, 0); - ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08x\n", hres); - - hres = IBindCtx_RegisterObjectParam(bctx2, testW, (IUnknown*)&Protocol); - ok(hres == S_OK, "RegisterObjectParam failed: %08x\n", hres); - - hres = IBindCtx_GetObjectParam(bctx, testW, &unk); - ok(hres == S_OK, "GetObjectParam failed: %08x\n", hres); - ok(unk == (IUnknown*)&Protocol, "unexpected unk %p\n", unk); - - IBindCtx_Release(bctx); - IBindCtx_Release(bctx2); -} - -static void test_bscholder(IBindStatusCallback *holder) -{ - IServiceProvider *serv_prov; - IHttpNegotiate *http_negotiate, *http_negotiate_serv; - IHttpNegotiate2 *http_negotiate2, *http_negotiate2_serv; - IAuthenticate *authenticate, *authenticate_serv; - IInternetProtocol *protocol; - BINDINFO bindinfo = {sizeof(bindinfo)}; - LPWSTR wstr; - DWORD dw; - HRESULT hres; - - hres = IBindStatusCallback_QueryInterface(holder, &IID_IServiceProvider, (void**)&serv_prov); - ok(hres == S_OK, "Could not get IServiceProvider interface: %08x\n", hres); - - dw = 0xdeadbeef; - SET_EXPECT(GetBindInfo); - hres = IBindStatusCallback_GetBindInfo(holder, &dw, &bindinfo); - ok(hres == S_OK, "GetBindInfo failed: %08x\n", hres); - CHECK_CALLED(GetBindInfo); - - SET_EXPECT(OnStartBinding); - hres = IBindStatusCallback_OnStartBinding(holder, 0, (void*)0xdeadbeef); - ok(hres == S_OK, "OnStartBinding failed: %08x\n", hres); - CHECK_CALLED(OnStartBinding); - - hres = IBindStatusCallback_QueryInterface(holder, &IID_IHttpNegotiate, (void**)&http_negotiate); - ok(hres == S_OK, "Could not get IHttpNegotiate interface: %08x\n", hres); - - wstr = (void*)0xdeadbeef; - hres = IHttpNegotiate_BeginningTransaction(http_negotiate, urls[test_protocol], (void*)0xdeadbeef, 0xff, &wstr); - ok(hres == S_OK, "BeginningTransaction failed: %08x\n", hres); - ok(wstr == NULL, "wstr = %p\n", wstr); - - SET_EXPECT(QueryInterface_IHttpNegotiate); - hres = IServiceProvider_QueryService(serv_prov, &IID_IHttpNegotiate, &IID_IHttpNegotiate, - (void**)&http_negotiate_serv); - ok(hres == S_OK, "Could not get IHttpNegotiate service: %08x\n", hres); - CHECK_CALLED(QueryInterface_IHttpNegotiate); - - ok(http_negotiate == http_negotiate_serv, "http_negotiate != http_negotiate_serv\n"); - - wstr = (void*)0xdeadbeef; - SET_EXPECT(BeginningTransaction); - hres = IHttpNegotiate_BeginningTransaction(http_negotiate_serv, urls[test_protocol], emptyW, 0, &wstr); - CHECK_CALLED(BeginningTransaction); - ok(hres == S_OK, "BeginningTransaction failed: %08x\n", hres); - ok(wstr == NULL, "wstr = %p\n", wstr); - - IHttpNegotiate_Release(http_negotiate_serv); - - hres = IServiceProvider_QueryService(serv_prov, &IID_IHttpNegotiate, &IID_IHttpNegotiate, - (void**)&http_negotiate_serv); - ok(hres == S_OK, "Could not get IHttpNegotiate service: %08x\n", hres); - ok(http_negotiate == http_negotiate_serv, "http_negotiate != http_negotiate_serv\n"); - IHttpNegotiate_Release(http_negotiate_serv); - - hres = IBindStatusCallback_QueryInterface(holder, &IID_IHttpNegotiate2, (void**)&http_negotiate2); - if(SUCCEEDED(hres)) { - hres = IHttpNegotiate2_GetRootSecurityId(http_negotiate2, (void*)0xdeadbeef, (void*)0xdeadbeef, 0); - ok(hres == E_FAIL, "GetRootSecurityId failed: %08x\n", hres); - - SET_EXPECT(QueryInterface_IHttpNegotiate2); - hres = IServiceProvider_QueryService(serv_prov, &IID_IHttpNegotiate2, &IID_IHttpNegotiate2, - (void**)&http_negotiate2_serv); - ok(hres == S_OK, "Could not get IHttpNegotiate2 service: %08x\n", hres); - CHECK_CALLED(QueryInterface_IHttpNegotiate2); - ok(http_negotiate2 == http_negotiate2_serv, "http_negotiate != http_negotiate_serv\n"); - - SET_EXPECT(GetRootSecurityId); - hres = IHttpNegotiate2_GetRootSecurityId(http_negotiate2, (void*)0xdeadbeef, (void*)0xdeadbeef, 0); - ok(hres == E_NOTIMPL, "GetRootSecurityId failed: %08x\n", hres); - CHECK_CALLED(GetRootSecurityId); - - IHttpNegotiate_Release(http_negotiate2_serv); - IHttpNegotiate_Release(http_negotiate2); - }else { - skip("Could not get IHttpNegotiate2\n"); - } - - SET_EXPECT(OnProgress_FINDINGRESOURCE); - hres = IBindStatusCallback_OnProgress(holder, 0, 0, BINDSTATUS_FINDINGRESOURCE, NULL); - ok(hres == S_OK, "OnProgress failed: %08x\n", hres); - CHECK_CALLED(OnProgress_FINDINGRESOURCE); - - SET_EXPECT(OnResponse); - wstr = (void*)0xdeadbeef; - hres = IHttpNegotiate_OnResponse(http_negotiate, 200, emptyW, NULL, NULL); - ok(hres == S_OK, "OnResponse failed: %08x\n", hres); - CHECK_CALLED(OnResponse); - - IHttpNegotiate_Release(http_negotiate); - - hres = IBindStatusCallback_QueryInterface(holder, &IID_IAuthenticate, (void**)&authenticate); - ok(hres == S_OK, "Could not get IAuthenticate interface: %08x\n", hres); - - SET_EXPECT(QueryInterface_IAuthenticate); - SET_EXPECT(QueryService_IAuthenticate); - hres = IServiceProvider_QueryService(serv_prov, &IID_IAuthenticate, &IID_IAuthenticate, - (void**)&authenticate_serv); - ok(hres == S_OK, "Could not get IAuthenticate service: %08x\n", hres); - CHECK_CALLED(QueryInterface_IAuthenticate); - CHECK_CALLED(QueryService_IAuthenticate); - ok(authenticate == authenticate_serv, "authenticate != authenticate_serv\n"); - IAuthenticate_Release(authenticate_serv); - - hres = IServiceProvider_QueryService(serv_prov, &IID_IAuthenticate, &IID_IAuthenticate, - (void**)&authenticate_serv); - ok(hres == S_OK, "Could not get IAuthenticate service: %08x\n", hres); - ok(authenticate == authenticate_serv, "authenticate != authenticate_serv\n"); - - IAuthenticate_Release(authenticate); - IAuthenticate_Release(authenticate_serv); - - SET_EXPECT(OnStopBinding); - hres = IBindStatusCallback_OnStopBinding(holder, S_OK, NULL); - ok(hres == S_OK, "OnStopBinding failed: %08x\n", hres); - CHECK_CALLED(OnStopBinding); - - SET_EXPECT(QueryInterface_IInternetProtocol); - SET_EXPECT(QueryService_IInternetProtocol); - hres = IServiceProvider_QueryService(serv_prov, &IID_IInternetProtocol, &IID_IInternetProtocol, - (void**)&protocol); - ok(hres == E_NOINTERFACE, "QueryService(IInternetProtocol) failed: %08x\n", hres); - CHECK_CALLED(QueryInterface_IInternetProtocol); - CHECK_CALLED(QueryService_IInternetProtocol); - - IServiceProvider_Release(serv_prov); -} - -static void test_RegisterBindStatusCallback(void) -{ - IBindStatusCallback *prevbsc, *clb; - IBindCtx *bindctx; - IUnknown *unk; - HRESULT hres; - - hres = CreateBindCtx(0, &bindctx); - ok(hres == S_OK, "BindCtx failed: %08x\n", hres); - - SET_EXPECT(QueryInterface_IServiceProvider); - - hres = IBindCtx_RegisterObjectParam(bindctx, BSCBHolder, (IUnknown*)&bsc); - ok(hres == S_OK, "RegisterObjectParam failed: %08x\n", hres); - - SET_EXPECT(QueryInterface_IBindStatusCallback); - SET_EXPECT(QueryInterface_IBindStatusCallbackHolder); - prevbsc = (void*)0xdeadbeef; - hres = RegisterBindStatusCallback(bindctx, &bsc, &prevbsc, 0); - ok(hres == S_OK, "RegisterBindStatusCallback failed: %08x\n", hres); - ok(prevbsc == &bsc, "prevbsc=%p\n", prevbsc); - CHECK_CALLED(QueryInterface_IBindStatusCallback); - CHECK_CALLED(QueryInterface_IBindStatusCallbackHolder); - - CHECK_CALLED(QueryInterface_IServiceProvider); - - hres = IBindCtx_GetObjectParam(bindctx, BSCBHolder, &unk); - ok(hres == S_OK, "GetObjectParam failed: %08x\n", hres); - - hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&clb); - IUnknown_Release(unk); - ok(hres == S_OK, "QueryInterface(IID_IBindStatusCallback) failed: %08x\n", hres); - ok(clb != &bsc, "bsc == clb\n"); - - test_bscholder(clb); - - IBindStatusCallback_Release(clb); - - hres = RevokeBindStatusCallback(bindctx, &bsc); - ok(hres == S_OK, "RevokeBindStatusCallback failed: %08x\n", hres); - - unk = (void*)0xdeadbeef; - hres = IBindCtx_GetObjectParam(bindctx, BSCBHolder, &unk); - ok(hres == E_FAIL, "GetObjectParam failed: %08x\n", hres); - ok(unk == NULL, "unk != NULL\n"); - - if(unk) - IUnknown_Release(unk); - - hres = RevokeBindStatusCallback(bindctx, (void*)0xdeadbeef); - ok(hres == S_OK, "RevokeBindStatusCallback failed: %08x\n", hres); - - hres = RevokeBindStatusCallback(NULL, (void*)0xdeadbeef); - ok(hres == E_INVALIDARG, "RevokeBindStatusCallback failed: %08x\n", hres); - - hres = RevokeBindStatusCallback(bindctx, NULL); - ok(hres == E_INVALIDARG, "RevokeBindStatusCallback failed: %08x\n", hres); - - IBindCtx_Release(bindctx); -} - -#define BINDTEST_EMULATE 1 -#define BINDTEST_TOOBJECT 2 -#define BINDTEST_FILEDWLAPI 4 - -static void init_bind_test(int protocol, DWORD flags, DWORD t) -{ - test_protocol = protocol; - emulate_protocol = (flags & BINDTEST_EMULATE) != 0; - download_state = BEFORE_DOWNLOAD; - stopped_binding = FALSE; - stopped_obj_binding = FALSE; - data_available = FALSE; - mime_type[0] = 0; - binding_hres = S_OK; - bind_to_object = (flags & BINDTEST_TOOBJECT) != 0; - tymed = t; - filedwl_api = (flags & BINDTEST_FILEDWLAPI) != 0; -} - -static void test_BindToStorage(int protocol, BOOL emul, DWORD t) -{ - IMoniker *mon; - HRESULT hres; - LPOLESTR display_name; - IBindCtx *bctx; - MSG msg; - IBindStatusCallback *previousclb; - IUnknown *unk = (IUnknown*)0x00ff00ff; - IBinding *bind; - - init_bind_test(protocol, emul ? BINDTEST_EMULATE : 0, t); - - SET_EXPECT(QueryInterface_IServiceProvider); - hres = CreateAsyncBindCtx(0, &bsc, NULL, &bctx); - ok(hres == S_OK, "CreateAsyncBindCtx failed: %08x\n\n", hres); - CHECK_CALLED(QueryInterface_IServiceProvider); - if(FAILED(hres)) - return; - - SET_EXPECT(QueryInterface_IServiceProvider); - hres = RegisterBindStatusCallback(bctx, &bsc, &previousclb, 0); - ok(hres == S_OK, "RegisterBindStatusCallback failed: %08x\n", hres); - ok(previousclb == &bsc, "previousclb(%p) != sclb(%p)\n", previousclb, &bsc); - CHECK_CALLED(QueryInterface_IServiceProvider); - if(previousclb) - IBindStatusCallback_Release(previousclb); - - hres = CreateURLMoniker(NULL, test_protocol == FILE_TEST ? file_url : urls[test_protocol], &mon); - ok(SUCCEEDED(hres), "failed to create moniker: %08x\n", hres); - if(FAILED(hres)) { - IBindCtx_Release(bctx); - return; - } - - hres = IMoniker_QueryInterface(mon, &IID_IBinding, (void**)&bind); - ok(hres == E_NOINTERFACE, "IMoniker should not have IBinding interface\n"); - if(SUCCEEDED(hres)) - IBinding_Release(bind); - - hres = IMoniker_GetDisplayName(mon, bctx, NULL, &display_name); - ok(hres == S_OK, "GetDisplayName failed %08x\n", hres); - ok(!lstrcmpW(display_name, urls[test_protocol]), - "GetDisplayName got wrong name %s\n", debugstr_w(display_name)); - CoTaskMemFree(display_name); - - if(tymed == TYMED_FILE && (test_protocol == ABOUT_TEST || test_protocol == ITS_TEST)) - binding_hres = INET_E_DATA_NOT_AVAILABLE; - - SET_EXPECT(GetBindInfo); - SET_EXPECT(QueryInterface_IInternetProtocol); - if(!emulate_protocol) - SET_EXPECT(QueryService_IInternetProtocol); - SET_EXPECT(OnStartBinding); - if(emulate_protocol) { - SET_EXPECT(Start); - if(test_protocol == HTTP_TEST) - SET_EXPECT(Terminate); - if(tymed != TYMED_FILE || (test_protocol != ABOUT_TEST && test_protocol != ITS_TEST)) - SET_EXPECT(UnlockRequest); - }else { - if(test_protocol == HTTP_TEST) { - SET_EXPECT(QueryInterface_IInternetBindInfo); - SET_EXPECT(QueryService_IInternetBindInfo); - SET_EXPECT(QueryInterface_IHttpNegotiate); - SET_EXPECT(BeginningTransaction); - SET_EXPECT(QueryInterface_IHttpNegotiate2); - SET_EXPECT(GetRootSecurityId); - SET_EXPECT(OnProgress_FINDINGRESOURCE); - SET_EXPECT(OnProgress_CONNECTING); - } - if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST) - SET_EXPECT(OnProgress_SENDINGREQUEST); - if(test_protocol == HTTP_TEST) - SET_EXPECT(OnResponse); - SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE); - if(test_protocol == HTTP_TEST) - SET_EXPECT(OnProgress_DOWNLOADINGDATA); - SET_EXPECT(OnProgress_ENDDOWNLOADDATA); - if(tymed != TYMED_FILE || test_protocol != ABOUT_TEST) - SET_EXPECT(OnDataAvailable); - SET_EXPECT(OnStopBinding); - } - - hres = IMoniker_BindToStorage(mon, bctx, NULL, tymed == TYMED_ISTREAM ? &IID_IStream : &IID_IUnknown, (void**)&unk); - if (test_protocol == HTTP_TEST && hres == HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED)) - { - skip("Network unreachable, skipping tests\n"); - return; - } - - if(((bindf & BINDF_ASYNCHRONOUS) && !data_available) - || (tymed == TYMED_FILE && test_protocol == FILE_TEST)) { - ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToStorage failed: %08x\n", hres); - ok(unk == NULL, "istr should be NULL\n"); - }else if(tymed == TYMED_FILE && test_protocol == ABOUT_TEST) { - ok(hres == INET_E_DATA_NOT_AVAILABLE, - "IMoniker_BindToStorage failed: %08x, expected INET_E_DATA_NOT_AVAILABLE\n", hres); - ok(unk == NULL, "istr should be NULL\n"); - }else { - ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres); - ok(unk != NULL, "unk == NULL\n"); - } - if(unk) - IUnknown_Release(unk); - - if(FAILED(hres)) - return; - - while((bindf & BINDF_ASYNCHRONOUS) && - !stopped_binding && GetMessage(&msg,NULL,0,0)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - CHECK_CALLED(GetBindInfo); - CHECK_CALLED(QueryInterface_IInternetProtocol); - if(!emulate_protocol) - CHECK_CALLED(QueryService_IInternetProtocol); - CHECK_CALLED(OnStartBinding); - if(emulate_protocol) { - CHECK_CALLED(Start); - if(test_protocol == HTTP_TEST) { - if(tymed == TYMED_FILE) - CLEAR_CALLED(Read); - CHECK_CALLED(Terminate); - } - if(tymed != TYMED_FILE || (test_protocol != ABOUT_TEST && test_protocol != ITS_TEST)) - CHECK_CALLED(UnlockRequest); - }else { - if(test_protocol == HTTP_TEST) { - CLEAR_CALLED(QueryInterface_IInternetBindInfo); - CLEAR_CALLED(QueryService_IInternetBindInfo); - CHECK_CALLED(QueryInterface_IHttpNegotiate); - CHECK_CALLED(BeginningTransaction); - /* QueryInterface_IHttpNegotiate2 and GetRootSecurityId - * called on WinXP but not on Win98 */ - CLEAR_CALLED(QueryInterface_IHttpNegotiate2); - CLEAR_CALLED(GetRootSecurityId); - if(http_is_first) { - CHECK_CALLED(OnProgress_FINDINGRESOURCE); - CHECK_CALLED(OnProgress_CONNECTING); - }else todo_wine { - CHECK_NOT_CALLED(OnProgress_FINDINGRESOURCE); - CHECK_NOT_CALLED(OnProgress_CONNECTING); - } - } - if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST) - CHECK_CALLED(OnProgress_SENDINGREQUEST); - if(test_protocol == HTTP_TEST) - CHECK_CALLED(OnResponse); - CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE); - if(test_protocol == HTTP_TEST) - CLEAR_CALLED(OnProgress_DOWNLOADINGDATA); - CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); - if(tymed != TYMED_FILE || test_protocol != ABOUT_TEST) - CHECK_CALLED(OnDataAvailable); - CHECK_CALLED(OnStopBinding); - } - - ok(IMoniker_Release(mon) == 0, "mon should be destroyed here\n"); - ok(IBindCtx_Release(bctx) == 0, "bctx should be destroyed here\n"); - - if(test_protocol == HTTP_TEST) - http_is_first = FALSE; -} - -static void test_BindToObject(int protocol, BOOL emul) -{ - IMoniker *mon; - HRESULT hres; - LPOLESTR display_name; - IBindCtx *bctx; - DWORD regid; - MSG msg; - IUnknown *unk = (IUnknown*)0x00ff00ff; - IBinding *bind; - - init_bind_test(protocol, BINDTEST_TOOBJECT | (emul ? BINDTEST_EMULATE : 0), TYMED_ISTREAM); - - if(emul) - CoRegisterClassObject(&CLSID_HTMLDocument, (IUnknown *)&mime_cf, - CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®id); - - SET_EXPECT(QueryInterface_IServiceProvider); - hres = CreateAsyncBindCtx(0, &objbsc, NULL, &bctx); - ok(SUCCEEDED(hres), "CreateAsyncBindCtx failed: %08x\n\n", hres); - CHECK_CALLED(QueryInterface_IServiceProvider); - if(FAILED(hres)) - return; - - hres = CreateURLMoniker(NULL, test_protocol == FILE_TEST ? file_url : urls[test_protocol], &mon); - ok(SUCCEEDED(hres), "failed to create moniker: %08x\n", hres); - if(FAILED(hres)) { - IBindCtx_Release(bctx); - return; - } - - hres = IMoniker_QueryInterface(mon, &IID_IBinding, (void**)&bind); - ok(hres == E_NOINTERFACE, "IMoniker should not have IBinding interface\n"); - if(SUCCEEDED(hres)) - IBinding_Release(bind); - - hres = IMoniker_GetDisplayName(mon, bctx, NULL, &display_name); - ok(hres == S_OK, "GetDisplayName failed %08x\n", hres); - ok(!lstrcmpW(display_name, urls[test_protocol]), "GetDisplayName got wrong name\n"); - - SET_EXPECT(Obj_GetBindInfo); - SET_EXPECT(QueryInterface_IInternetProtocol); - if(!emulate_protocol) - SET_EXPECT(QueryService_IInternetProtocol); - SET_EXPECT(Obj_OnStartBinding); - if(emulate_protocol) { - SET_EXPECT(Start); - if(test_protocol == HTTP_TEST) - SET_EXPECT(Terminate); - if(test_protocol == FILE_TEST) - SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(UnlockRequest); - }else { - if(test_protocol == HTTP_TEST) { - SET_EXPECT(QueryInterface_IHttpNegotiate); - SET_EXPECT(BeginningTransaction); - SET_EXPECT(QueryInterface_IHttpNegotiate2); - SET_EXPECT(GetRootSecurityId); - SET_EXPECT(Obj_OnProgress_FINDINGRESOURCE); - SET_EXPECT(Obj_OnProgress_CONNECTING); - } - if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST) - SET_EXPECT(Obj_OnProgress_SENDINGREQUEST); - if(test_protocol == HTTP_TEST) - SET_EXPECT(OnResponse); - SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - SET_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE); - if(test_protocol == HTTP_TEST) - SET_EXPECT(OnProgress_DOWNLOADINGDATA); - SET_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA); - SET_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE); - SET_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION); - SET_EXPECT(Obj_OnProgress_ENDSYNCOPERATION); - SET_EXPECT(OnObjectAvailable); - SET_EXPECT(Obj_OnStopBinding); - } - - hres = IMoniker_BindToObject(mon, bctx, NULL, &IID_IUnknown, (void**)&unk); - - if (test_protocol == HTTP_TEST && hres == HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED)) - { - skip( "Network unreachable, skipping tests\n" ); - return; - } - - /* no point testing the calls if binding didn't even work */ - if (FAILED(hres)) return; - - if(bindf & BINDF_ASYNCHRONOUS) { - ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToObject failed: %08x\n", hres); - ok(unk == NULL, "istr should be NULL\n"); - }else { - ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres); - ok(unk != NULL, "unk == NULL\n"); - if(emul) - ok(unk == (IUnknown*)&PersistMoniker, "unk != PersistMoniker\n"); - } - if(unk) - IUnknown_Release(unk); - - while((bindf & BINDF_ASYNCHRONOUS) && - !((!emul || stopped_binding) && stopped_obj_binding) && GetMessage(&msg,NULL,0,0)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - CHECK_CALLED(Obj_GetBindInfo); - CHECK_CALLED(QueryInterface_IInternetProtocol); - if(!emulate_protocol) - CHECK_CALLED(QueryService_IInternetProtocol); - CHECK_CALLED(Obj_OnStartBinding); - if(emulate_protocol) { - CHECK_CALLED(Start); - if(test_protocol == HTTP_TEST) - CHECK_CALLED(Terminate); - if(test_protocol == FILE_TEST) - CLEAR_CALLED(OnProgress_MIMETYPEAVAILABLE); /* not called in IE7 */ - CHECK_CALLED(UnlockRequest); - }else { - if(test_protocol == HTTP_TEST) { - CHECK_CALLED(QueryInterface_IHttpNegotiate); - CHECK_CALLED(BeginningTransaction); - /* QueryInterface_IHttpNegotiate2 and GetRootSecurityId - * called on WinXP but not on Win98 */ - CLEAR_CALLED(QueryInterface_IHttpNegotiate2); - CLEAR_CALLED(GetRootSecurityId); - if(http_is_first) { - CHECK_CALLED(Obj_OnProgress_FINDINGRESOURCE); - CHECK_CALLED(Obj_OnProgress_CONNECTING); - }else todo_wine { - CHECK_NOT_CALLED(Obj_OnProgress_FINDINGRESOURCE); - CHECK_NOT_CALLED(Obj_OnProgress_CONNECTING); - } - } - if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST) { - if(urls[test_protocol] == SHORT_RESPONSE_URL) - CLEAR_CALLED(Obj_OnProgress_SENDINGREQUEST); - else - CHECK_CALLED(Obj_OnProgress_SENDINGREQUEST); - } - if(test_protocol == HTTP_TEST) - CHECK_CALLED(OnResponse); - CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(Obj_OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - CHECK_CALLED(Obj_OnProgress_CACHEFILENAMEAVAILABLE); - if(test_protocol == HTTP_TEST) - CLEAR_CALLED(OnProgress_DOWNLOADINGDATA); - CLEAR_CALLED(Obj_OnProgress_ENDDOWNLOADDATA); - CHECK_CALLED(Obj_OnProgress_CLASSIDAVAILABLE); - CHECK_CALLED(Obj_OnProgress_BEGINSYNCOPERATION); - CHECK_CALLED(Obj_OnProgress_ENDSYNCOPERATION); - CHECK_CALLED(OnObjectAvailable); - CHECK_CALLED(Obj_OnStopBinding); - } - - if(test_protocol != HTTP_TEST || emul || urls[test_protocol] == SHORT_RESPONSE_URL) { - ok(IMoniker_Release(mon) == 0, "mon should be destroyed here\n"); - ok(IBindCtx_Release(bctx) == 0, "bctx should be destroyed here\n"); - }else { - todo_wine ok(IMoniker_Release(mon) == 0, "mon should be destroyed here\n"); - - if(bindf & BINDF_ASYNCHRONOUS) - ok(IBindCtx_Release(bctx) != 0, "bctx should not be destroyed here\n"); - else - todo_wine ok(IBindCtx_Release(bctx) == 0, "bctx should be destroyed here\n"); - } - - if(emul) - CoRevokeClassObject(regid); - - if(test_protocol == HTTP_TEST) - http_is_first = FALSE; -} - -static void test_URLDownloadToFile(DWORD prot, BOOL emul) -{ - BOOL res; - HRESULT hres; - - init_bind_test(prot, BINDTEST_FILEDWLAPI | (emul ? BINDTEST_EMULATE : 0), TYMED_FILE); - - SET_EXPECT(GetBindInfo); - SET_EXPECT(QueryInterface_IInternetProtocol); - if(!emulate_protocol) { - SET_EXPECT(QueryInterface_IServiceProvider); - SET_EXPECT(QueryService_IInternetProtocol); - } - SET_EXPECT(OnStartBinding); - if(emulate_protocol) { - SET_EXPECT(Start); - SET_EXPECT(UnlockRequest); - }else { - if(test_protocol == HTTP_TEST) { - SET_EXPECT(QueryInterface_IHttpNegotiate); - SET_EXPECT(BeginningTransaction); - SET_EXPECT(QueryInterface_IHttpNegotiate2); - SET_EXPECT(GetRootSecurityId); - } - if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST) - SET_EXPECT(OnProgress_SENDINGREQUEST); - if(test_protocol == HTTP_TEST) - SET_EXPECT(OnResponse); - SET_EXPECT(OnProgress_MIMETYPEAVAILABLE); - SET_EXPECT(OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE); - if(test_protocol == HTTP_TEST) - SET_EXPECT(OnProgress_DOWNLOADINGDATA); - SET_EXPECT(OnProgress_ENDDOWNLOADDATA); - SET_EXPECT(OnStopBinding); - } - - hres = URLDownloadToFileW(NULL, test_protocol == FILE_TEST ? file_url : urls[test_protocol], dwl_htmlW, 0, &bsc); - ok(hres == S_OK, "URLDownloadToFile failed: %08x\n", hres); - - CHECK_CALLED(GetBindInfo); - CHECK_CALLED(QueryInterface_IInternetProtocol); - if(!emulate_protocol) { - CHECK_CALLED(QueryInterface_IServiceProvider); - CHECK_CALLED(QueryService_IInternetProtocol); - } - CHECK_CALLED(OnStartBinding); - if(emulate_protocol) { - CHECK_CALLED(Start); - CHECK_CALLED(UnlockRequest); - }else { - if(test_protocol == HTTP_TEST) { - CHECK_CALLED(QueryInterface_IHttpNegotiate); - CHECK_CALLED(BeginningTransaction); - CHECK_CALLED(QueryInterface_IHttpNegotiate2); - CHECK_CALLED(GetRootSecurityId); - } - if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST) - CHECK_CALLED(OnProgress_SENDINGREQUEST); - if(test_protocol == HTTP_TEST) - CHECK_CALLED(OnResponse); - CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE); - CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA); - if(test_protocol == FILE_TEST) - CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE); - if(test_protocol == HTTP_TEST) - CLEAR_CALLED(OnProgress_DOWNLOADINGDATA); - CHECK_CALLED(OnProgress_ENDDOWNLOADDATA); - CHECK_CALLED(OnStopBinding); - } - - res = DeleteFileW(dwl_htmlW); - ok(res, "DeleteFile failed: %u\n", GetLastError()); - - if(prot != FILE_TEST || emul) - return; - - hres = URLDownloadToFileW(NULL, urls[test_protocol], dwl_htmlW, 0, NULL); - ok(hres == S_OK, "URLDownloadToFile failed: %08x\n", hres); - - res = DeleteFileW(dwl_htmlW); - ok(res, "DeleteFile failed: %u\n", GetLastError()); -} - -static void set_file_url(void) -{ - int len; - - static const WCHAR wszFile[] = {'f','i','l','e',':','/','/'}; - - memcpy(file_url, wszFile, sizeof(wszFile)); - len = sizeof(wszFile)/sizeof(WCHAR); - file_url[len++] = '/'; - len += GetCurrentDirectoryW(sizeof(file_url)/sizeof(WCHAR)-len, file_url+len); - file_url[len++] = '\\'; - memcpy(file_url+len, wszIndexHtml, sizeof(wszIndexHtml)); - - memcpy(INDEX_HTML, wszFile, sizeof(wszIndexHtml)); - memmove(INDEX_HTML+7, file_url+8, (lstrlenW(file_url+8)+1)*sizeof(WCHAR)); -} - -static void create_file(void) -{ - HANDLE file; - DWORD size; - - static const char html_doc[] = ""; - - file = CreateFileW(wszIndexHtml, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - ok(file != INVALID_HANDLE_VALUE, "CreateFile failed\n"); - if(file == INVALID_HANDLE_VALUE) - return; - - WriteFile(file, html_doc, sizeof(html_doc)-1, &size, NULL); - CloseHandle(file); - - set_file_url(); -} - -static void test_ReportResult(HRESULT exhres) -{ - IMoniker *mon = NULL; - IBindCtx *bctx = NULL; - IUnknown *unk = (void*)0xdeadbeef; - HRESULT hres; - - init_bind_test(ABOUT_TEST, BINDTEST_EMULATE, TYMED_ISTREAM); - binding_hres = exhres; - - hres = CreateURLMoniker(NULL, ABOUT_BLANK, &mon); - ok(hres == S_OK, "CreateURLMoniker failed: %08x\n", hres); - - SET_EXPECT(QueryInterface_IServiceProvider); - hres = CreateAsyncBindCtx(0, &bsc, NULL, &bctx); - ok(hres == S_OK, "CreateAsyncBindCtx failed: %08x\n\n", hres); - CHECK_CALLED(QueryInterface_IServiceProvider); - - SET_EXPECT(GetBindInfo); - SET_EXPECT(QueryInterface_IInternetProtocol); - SET_EXPECT(OnStartBinding); - SET_EXPECT(Start); - - hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&unk); - if(SUCCEEDED(exhres)) - ok(hres == S_OK || hres == MK_S_ASYNCHRONOUS, "BindToStorage failed: %08x\n", hres); - else - ok(hres == exhres || hres == MK_S_ASYNCHRONOUS, - "BindToStorage failed: %08x, expected %08x or MK_S_ASYNCHRONOUS\n", hres, exhres); - - CHECK_CALLED(GetBindInfo); - CHECK_CALLED(QueryInterface_IInternetProtocol); - CHECK_CALLED(OnStartBinding); - CHECK_CALLED(Start); - - ok(unk == NULL, "unk=%p\n", unk); - - IBindCtx_Release(bctx); - IMoniker_Release(mon); -} - -static void test_BindToStorage_fail(void) -{ - IMoniker *mon = NULL; - IBindCtx *bctx = NULL; - IUnknown *unk; - HRESULT hres; - - hres = CreateURLMoniker(NULL, ABOUT_BLANK, &mon); - ok(hres == S_OK, "CreateURLMoniker failed: %08x\n", hres); - if(FAILED(hres)) - return; - - hres = CreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0); - ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08x\n", hres); - - hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&unk); - ok(hres == MK_E_SYNTAX || hres == INET_E_DATA_NOT_AVAILABLE, - "hres=%08x, expected MK_E_SYNTAX or INET_E_DATA_NOT_AVAILABLE\n", hres); - - IBindCtx_Release(bctx); - - IMoniker_Release(mon); - - test_ReportResult(E_NOTIMPL); - test_ReportResult(S_FALSE); -} - -static void gecko_installer_workaround(BOOL disable) -{ - HKEY hkey; - DWORD res; - - static BOOL has_url = FALSE; - static char url[2048]; - - if(!disable && !has_url) - return; - - res = RegOpenKey(HKEY_CURRENT_USER, "Software\\Wine\\MSHTML", &hkey); - if(res != ERROR_SUCCESS) - return; - - if(disable) { - DWORD type, size = sizeof(url); - - res = RegQueryValueEx(hkey, "GeckoUrl", NULL, &type, (PVOID)url, &size); - if(res == ERROR_SUCCESS && type == REG_SZ) - has_url = TRUE; - - RegDeleteValue(hkey, "GeckoUrl"); - }else { - RegSetValueEx(hkey, "GeckoUrl", 0, REG_SZ, (PVOID)url, lstrlenA(url)+1); - } - - RegCloseKey(hkey); -} - -START_TEST(url) -{ - gecko_installer_workaround(TRUE); - - complete_event = CreateEvent(NULL, FALSE, FALSE, NULL); - complete_event2 = CreateEvent(NULL, FALSE, FALSE, NULL); - thread_id = GetCurrentThreadId(); - create_file(); - - test_create(); - test_CreateAsyncBindCtx(); - test_CreateAsyncBindCtxEx(); - test_RegisterBindStatusCallback(); - test_BindToStorage_fail(); - - trace("synchronous http test (COM not initialised)...\n"); - test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM); - - CoInitialize(NULL); - - trace("synchronous http test...\n"); - test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM); - - trace("synchronous http test (to object)...\n"); - test_BindToObject(HTTP_TEST, FALSE); - - trace("synchronous file test...\n"); - test_BindToStorage(FILE_TEST, FALSE, TYMED_ISTREAM); - - trace("synchronous file test (to object)...\n"); - test_BindToObject(FILE_TEST, FALSE); - - bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA; - - trace("http test...\n"); - test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM); - - trace("http test (to file)...\n"); - test_BindToStorage(HTTP_TEST, FALSE, TYMED_FILE); - - trace("http test (to object)...\n"); - test_BindToObject(HTTP_TEST, FALSE); - - trace("http test (short response)...\n"); - http_is_first = TRUE; - urls[HTTP_TEST] = SHORT_RESPONSE_URL; - test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM); - - trace("http test (short response, to object)...\n"); - test_BindToObject(HTTP_TEST, FALSE); - - trace("emulated http test...\n"); - test_BindToStorage(HTTP_TEST, TRUE, TYMED_ISTREAM); - - trace("emulated http test (to object)...\n"); - test_BindToObject(HTTP_TEST, TRUE); - - trace("emulated http test (to file)...\n"); - test_BindToStorage(HTTP_TEST, TRUE, TYMED_FILE); - - trace("about test...\n"); - test_BindToStorage(ABOUT_TEST, FALSE, TYMED_ISTREAM); - - trace("about test (to file)...\n"); - test_BindToStorage(ABOUT_TEST, FALSE, TYMED_FILE); - - trace("about test (to object)...\n"); - test_BindToObject(ABOUT_TEST, FALSE); - - trace("emulated about test...\n"); - test_BindToStorage(ABOUT_TEST, TRUE, TYMED_ISTREAM); - - trace("emulated about test (to file)...\n"); - test_BindToStorage(ABOUT_TEST, TRUE, TYMED_FILE); - - trace("emulated about test (to object)...\n"); - test_BindToObject(ABOUT_TEST, TRUE); - - trace("file test...\n"); - test_BindToStorage(FILE_TEST, FALSE, TYMED_ISTREAM); - - trace("file test (to file)...\n"); - test_BindToStorage(FILE_TEST, FALSE, TYMED_FILE); - - trace("file test (to object)...\n"); - test_BindToObject(FILE_TEST, FALSE); - - trace("emulated file test...\n"); - test_BindToStorage(FILE_TEST, TRUE, TYMED_ISTREAM); - - trace("emulated file test (to file)...\n"); - test_BindToStorage(FILE_TEST, TRUE, TYMED_FILE); - - trace("emulated file test (to object)...\n"); - test_BindToObject(FILE_TEST, TRUE); - - trace("emulated its test...\n"); - test_BindToStorage(ITS_TEST, TRUE, TYMED_ISTREAM); - - trace("emulated its test (to file)...\n"); - test_BindToStorage(ITS_TEST, TRUE, TYMED_FILE); - - trace("emulated mk test...\n"); - test_BindToStorage(MK_TEST, TRUE, TYMED_ISTREAM); - - trace("test URLDownloadToFile for file protocol...\n"); - test_URLDownloadToFile(FILE_TEST, FALSE); - - trace("test URLDownloadToFile for emulated file protocol...\n"); - test_URLDownloadToFile(FILE_TEST, TRUE); - - trace("test URLDownloadToFile for http protocol...\n"); - test_URLDownloadToFile(HTTP_TEST, FALSE); - - trace("test failures...\n"); - test_BindToStorage_fail(); - - DeleteFileW(wszIndexHtml); - CloseHandle(complete_event); - CloseHandle(complete_event2); - CoUninitialize(); - - gecko_installer_workaround(FALSE); -} diff --git a/rostests/winetests/urlmon/urlmon.rbuild b/rostests/winetests/urlmon/urlmon.rbuild deleted file mode 100644 index b2d98630d8f..00000000000 --- a/rostests/winetests/urlmon/urlmon.rbuild +++ /dev/null @@ -1,21 +0,0 @@ - - - - - . - generated.c - misc.c - protocol.c - stream.c - url.c - testlist.c - wine - uuid - urlmon - ole32 - user32 - advapi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/user32/broadcast.c b/rostests/winetests/user32/broadcast.c deleted file mode 100644 index 786df7d698a..00000000000 --- a/rostests/winetests/user32/broadcast.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Unit tests for BroadcastSystemMessage - * - * 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 - */ - -#include -#include -#include - -#define _WIN32_WINNT 0x0501 - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winnls.h" - -#include "wine/test.h" - -typedef LONG (WINAPI *PBROADCAST)( DWORD,LPDWORD,UINT,WPARAM,LPARAM ); -typedef LONG (WINAPI *PBROADCASTEX)( DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO ); -static PBROADCAST pBroadcastA; -static PBROADCAST pBroadcastW; -static PBROADCASTEX pBroadcastExA; -static PBROADCASTEX pBroadcastExW; -static HANDLE hevent; - -static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - if (msg == WM_NULL) - { - trace("main_window_procA: Sleeping for %lu ms\n", wparam); - if (wparam) - { - if (WaitForSingleObject(hevent, wparam) == WAIT_TIMEOUT) - SetEvent(hevent); - } - trace("main_window_procA: Returning WM_NULL with parameter %08lx\n", lparam); - return lparam; - } - - return DefWindowProcA(hwnd, msg, wparam, lparam); -} - -static BOOL init_procs(void) -{ - WNDCLASSA cls; - HANDLE user32 = GetModuleHandle("user32"); - pBroadcastA = (PBROADCAST)GetProcAddress(user32, "BroadcastSystemMessageA"); - if (!pBroadcastA) - pBroadcastA = (PBROADCAST)GetProcAddress(user32, "BroadcastSystemMessage"); - ok(pBroadcastA != NULL, "No BroadcastSystemMessage found\n"); - if (!pBroadcastA) - return FALSE; - - pBroadcastW = (PBROADCAST)GetProcAddress(user32, "BroadcastSystemMessageW"); - pBroadcastExA = (PBROADCASTEX)GetProcAddress(user32, "BroadcastSystemMessageExA"); - pBroadcastExW = (PBROADCASTEX)GetProcAddress(user32, "BroadcastSystemMessageExW"); - - hevent = CreateEventA(NULL, TRUE, FALSE, "Asynchronous checking event"); - - cls.style = CS_DBLCLKS; - cls.lpfnWndProc = main_window_procA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "MainWindowClass"; - - if (!RegisterClassA(&cls)) - return 0; - - if (!CreateWindowExA(0, "MainWindowClass", "Main window", WS_CAPTION | WS_SYSMENU | - WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP, 100, 100, 200, - 200, 0, 0, GetModuleHandle(0), NULL)) - return FALSE; - return TRUE; -} - -static void test_parameters(PBROADCAST broadcast, const char *functionname) -{ - LONG ret; - DWORD recips; - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( 0x80000000, &recips, WM_NULL, 0, 0 ); - if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("%s is not implemented\n", functionname); - return; - } - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Last error: %08x\n", GetLastError()); - ok(!ret, "Returned: %d\n", ret); - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( 0x80000000, &recips, WM_NULL, 0, 0 ); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Last error: %08x\n", GetLastError()); - ok(!ret, "Returned: %d\n", ret); - -#if 0 /* TODO: Check the hang flags */ - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_QUERY|(BSF_NOHANG|BSF_FORCEIFHUNG), &recips, WM_NULL, 30000, 0 ); - ok(0, "Last error: %08x\n", GetLastError()); - ok(0, "Returned: %d\n", ret); - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_QUERY|(BSF_NOHANG|BSF_NOTIMEOUTIFNOTHUNG), &recips, WM_NULL, 30000, 0 ); - ok(0, "Last error: %08x\n", GetLastError()); - ok(0, "Returned: %d\n", ret); - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_QUERY|(BSF_NOTIMEOUTIFNOTHUNG|BSF_FORCEIFHUNG), &recips, WM_NULL, 30000, 0 ); - ok(0, "Last error: %08x\n", GetLastError()); - ok(0, "Returned: %d\n", ret); - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_POSTMESSAGE|(BSF_NOTIMEOUTIFNOTHUNG|BSF_FORCEIFHUNG), &recips, WM_NULL, 30000, 0 ); - ok(0, "Last error: %08x\n", GetLastError()); - ok(0, "Returned: %d\n", ret); -#endif - - recips = BSM_APPLICATIONS; - ResetEvent(hevent); - ret = broadcast( BSF_POSTMESSAGE|BSF_QUERY, &recips, WM_NULL, 100, 0 ); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - PulseEvent(hevent); - - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_POSTMESSAGE|BSF_SENDNOTIFYMESSAGE, &recips, WM_NULL, 100, 0 ); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_OBJECT_0, "Synchronous message sent instead\n"); - PulseEvent(hevent); - - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_SENDNOTIFYMESSAGE, &recips, WM_NULL, 100, BROADCAST_QUERY_DENY ); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - PulseEvent(hevent); - - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_SENDNOTIFYMESSAGE|BSF_QUERY, &recips, WM_NULL, 100, BROADCAST_QUERY_DENY ); - ok(!ret, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - PulseEvent(hevent); - - recips = BSM_APPLICATIONS; - ret = broadcast( 0, &recips, WM_NULL, 100, 0 ); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - PulseEvent(hevent); -} - -/* BSF_SENDNOTIFYMESSAGE and BSF_QUERY are both synchronous within the same process - * However you should be able to distinguish them by sending the BROADCAST_QUERY_DENY flag - */ - -static void test_parametersEx(PBROADCASTEX broadcastex) -{ - LONG ret; - DWORD recips; - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcastex( 0x80000000, &recips, WM_NULL, 0, 0, NULL ); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Last error: %08x\n", GetLastError()); - ok(!ret, "Returned: %d\n", ret); - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcastex( 0x80000000, &recips, WM_NULL, 0, 0, NULL ); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "Last error: %08x\n", GetLastError()); - ok(!ret, "Returned: %d\n", ret); - -#if 0 /* TODO: Check the hang flags */ - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_QUERY|(BSF_NOHANG|BSF_FORCEIFHUNG), &recips, WM_NULL, 30000, 0, NULL ); - ok(0, "Last error: %08x\n", GetLastError()); - ok(0, "Returned: %d\n", ret); - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_QUERY|(BSF_NOHANG|BSF_NOTIMEOUTIFNOTHUNG), &recips, WM_NULL, 30000, 0, NULL ); - ok(0, "Last error: %08x\n", GetLastError()); - ok(0, "Returned: %d\n", ret); - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_QUERY|(BSF_NOTIMEOUTIFNOTHUNG|BSF_FORCEIFHUNG), &recips, WM_NULL, 30000, 0, NULL ); - ok(0, "Last error: %08x\n", GetLastError()); - ok(0, "Returned: %d\n", ret); - - SetLastError(0xcafebabe); - recips = BSM_APPLICATIONS; - ret = broadcast( BSF_POSTMESSAGE|(BSF_NOTIMEOUTIFNOTHUNG|BSF_FORCEIFHUNG), &recips, WM_NULL, 30000, 0, NULL ); - ok(0, "Last error: %08x\n", GetLastError()); - ok(0, "Returned: %d\n", ret); -#endif - - recips = BSM_APPLICATIONS; - ResetEvent(hevent); - ret = broadcastex( BSF_POSTMESSAGE|BSF_QUERY, &recips, WM_NULL, 100, 0, NULL ); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - PulseEvent(hevent); - - recips = BSM_APPLICATIONS; - ret = broadcastex( BSF_POSTMESSAGE|BSF_SENDNOTIFYMESSAGE, &recips, WM_NULL, 100, 0, NULL ); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_OBJECT_0, "Synchronous message sent instead\n"); - PulseEvent(hevent); - - recips = BSM_APPLICATIONS; - ret = broadcastex( BSF_SENDNOTIFYMESSAGE, &recips, WM_NULL, 100, BROADCAST_QUERY_DENY, NULL ); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - PulseEvent(hevent); - - recips = BSM_APPLICATIONS; - ret = broadcastex( BSF_SENDNOTIFYMESSAGE|BSF_QUERY, &recips, WM_NULL, 100, BROADCAST_QUERY_DENY, NULL ); - ok(!ret, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - PulseEvent(hevent); - - recips = BSM_APPLICATIONS; - ret = broadcastex( 0, &recips, WM_NULL, 100, 0, NULL ); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - PulseEvent(hevent); -} - -static BOOL (WINAPI *pOpenProcessToken)(HANDLE, DWORD, HANDLE*); -static BOOL (WINAPI *pAdjustTokenPrivileges)(HANDLE, BOOL, PTOKEN_PRIVILEGES, DWORD, PTOKEN_PRIVILEGES, PDWORD); - -static void test_noprivileges(void) -{ - HANDLE advapi32 = GetModuleHandleA("advapi32"); - HANDLE token; - DWORD recips; - BOOL ret; - - pOpenProcessToken = (void *)GetProcAddress(advapi32, "OpenProcessToken"); - pAdjustTokenPrivileges = (void *)GetProcAddress(advapi32, "AdjustTokenPrivileges"); - if (!pOpenProcessToken || !pAdjustTokenPrivileges || !pOpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) - { - skip("Can't open security token for process\n"); - return; - } - if (!pAdjustTokenPrivileges(token, TRUE, NULL, 0, NULL, NULL)) - { - skip("Can't adjust security token for process\n"); - return; - } - - trace("Trying privileged edition!\n"); - SetLastError(0xcafebabe); - recips = BSM_ALLDESKTOPS; - ResetEvent(hevent); - ret = pBroadcastExW( BSF_QUERY, &recips, WM_NULL, 100, 0, NULL ); - todo_wine ok(GetLastError() == ERROR_PRIVILEGE_NOT_HELD, "Last error: %08x\n", GetLastError()); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - ok(recips == BSM_ALLDESKTOPS, "Received by: %08x\n", recips); - PulseEvent(hevent); - - /* Wine sets last error to 0, so just use that one as token here so it doesn't fail */ - SetLastError(0); - recips = BSM_ALLCOMPONENTS; - ResetEvent(hevent); - ret = pBroadcastExW( BSF_QUERY, &recips, WM_NULL, 100, 0, NULL ); - ok(!GetLastError(), "Last error: %08x\n", GetLastError()); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - ok(recips == BSM_ALLCOMPONENTS, "Received by: %08x\n", recips); - PulseEvent(hevent); - - SetLastError(0xcafebabe); - recips = BSM_ALLDESKTOPS|BSM_APPLICATIONS; - ResetEvent(hevent); - ret = pBroadcastExW( BSF_QUERY, &recips, WM_NULL, 100, 0, NULL ); - todo_wine ok(GetLastError() == ERROR_PRIVILEGE_NOT_HELD, "Last error: %08x\n", GetLastError()); - ok(ret==1, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - ok(recips == (BSM_ALLDESKTOPS|BSM_APPLICATIONS), "Received by: %08x\n", recips); - PulseEvent(hevent); - - SetLastError(0xcafebabe); - recips = BSM_ALLDESKTOPS|BSM_APPLICATIONS; - ResetEvent(hevent); - ret = pBroadcastExW( BSF_QUERY, &recips, WM_NULL, 100, BROADCAST_QUERY_DENY, NULL ); - todo_wine ok(GetLastError() == ERROR_PRIVILEGE_NOT_HELD, "Last error: %08x\n", GetLastError()); - ok(!ret, "Returned: %d\n", ret); - ok(WaitForSingleObject(hevent, 0) != WAIT_TIMEOUT, "Asynchronous message sent instead\n"); - ok(recips == (BSM_ALLDESKTOPS|BSM_APPLICATIONS), "Received by: %08x\n", recips); - PulseEvent(hevent); -} - -START_TEST(broadcast) -{ - if (!init_procs()) - return; - - trace("Running BroadcastSystemMessageA tests\n"); - test_parameters(pBroadcastA, "BroadcastSystemMessageA"); - if (pBroadcastW) - { - trace("Running BroadcastSystemMessageW tests\n"); - test_parameters(pBroadcastW, "BroadcastSystemMessageW"); - } - else - skip("No BroadcastSystemMessageW, skipping\n"); - if (pBroadcastExA) - { - trace("Running BroadcastSystemMessageExA tests\n"); - test_parametersEx(pBroadcastExA); - } - else - skip("No BroadcastSystemMessageExA, skipping\n"); - if (pBroadcastExW) - { - trace("Running BroadcastSystemMessageExW tests\n"); - test_parametersEx(pBroadcastExW); - trace("Attempting privileges checking tests\n"); - test_noprivileges(); - } - else - skip("No BroadcastSystemMessageExW, skipping\n"); -} diff --git a/rostests/winetests/user32/class.c b/rostests/winetests/user32/class.c deleted file mode 100755 index 486e227be1a..00000000000 --- a/rostests/winetests/user32/class.c +++ /dev/null @@ -1,847 +0,0 @@ -/* Unit test suite for window classes. - * - * Copyright 2002 Mike McCormack - * 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 - */ - -/* To get CS_DROPSHADOW with the MSVC headers */ -#define _WIN32_WINNT 0x0501 - -#include -#include -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "wingdi.h" -#include "winuser.h" - -/* we don't want to include commctrl.h: */ -static const CHAR WC_EDITA[] = "Edit"; -static const WCHAR WC_EDITW[] = {'E','d','i','t',0}; - -#define NUMCLASSWORDS 4 - -#define IS_WNDPROC_HANDLE(x) (((ULONG_PTR)(x) >> 16) == (~((ULONG_PTR)0) >> 16)) - -static LRESULT WINAPI ClassTest_WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - return DefWindowProcW (hWnd, msg, wParam, lParam); -} - -static LRESULT WINAPI ClassTest_WndProc2 (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - return DefWindowProcA (hWnd, msg, wParam, lParam); -} - -/*********************************************************************** - */ -static void ClassTest(HINSTANCE hInstance, BOOL global) -{ - WNDCLASSW cls, wc; - static const WCHAR className[] = {'T','e','s','t','C','l','a','s','s',0}; - static const WCHAR winName[] = {'W','i','n','C','l','a','s','s','T','e','s','t',0}; - ATOM test_atom; - HWND hTestWnd; - LONG i; - WCHAR str[20]; - ATOM classatom; - - cls.style = CS_HREDRAW | CS_VREDRAW | (global?CS_GLOBALCLASS:0); - cls.lpfnWndProc = ClassTest_WndProc; - cls.cbClsExtra = NUMCLASSWORDS*sizeof(DWORD); - cls.cbWndExtra = 12; - cls.hInstance = hInstance; - cls.hIcon = LoadIconW (0, (LPWSTR)IDI_APPLICATION); - cls.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject (WHITE_BRUSH); - cls.lpszMenuName = 0; - cls.lpszClassName = className; - - classatom=RegisterClassW(&cls); - if (!classatom && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - return; - ok(classatom, "failed to register class\n"); - - ok(!RegisterClassW (&cls), - "RegisterClass of the same class should fail for the second time\n"); - - /* Setup windows */ - hTestWnd = CreateWindowW (className, winName, - WS_OVERLAPPEDWINDOW + WS_HSCROLL + WS_VSCROLL, - CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, - 0, hInstance, 0); - - ok(hTestWnd!=0, "Failed to create window\n"); - - /* test initial values of valid classwords */ - for(i=0; iname, class_info->inst, class_info->info_inst, class_info->gcl_inst); - - return 0; -} - -static void check_thread_instance( const char *name, HINSTANCE inst, HINSTANCE info_inst, HINSTANCE gcl_inst ) -{ - HANDLE hThread; - DWORD tid; - struct class_info class_info; - - class_info.name = name; - class_info.inst = inst; - class_info.info_inst = info_inst; - class_info.gcl_inst = gcl_inst; - - hThread = CreateThread(NULL, 0, thread_proc, &class_info, 0, &tid); - ok(hThread != NULL, "CreateThread failed, error %d\n", GetLastError()); - ok(WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - CloseHandle(hThread); -} - -/* test various instance parameters */ -static void test_instances(void) -{ - WNDCLASSA cls, wc; - HWND hwnd, hwnd2; - const char *name = "__test__"; - HINSTANCE kernel32 = GetModuleHandleA("kernel32"); - HINSTANCE user32 = GetModuleHandleA("user32"); - HINSTANCE main_module = GetModuleHandleA(NULL); - DWORD r; - char buffer[0x10]; - - memset( &cls, 0, sizeof(cls) ); - cls.style = CS_HREDRAW | CS_VREDRAW; - cls.lpfnWndProc = ClassTest_WndProc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.lpszClassName = name; - - cls.lpszMenuName = "main_module"; - cls.hInstance = main_module; - - ok( RegisterClassA( &cls ), "Failed to register local class for main module\n" ); - check_class( main_module, name, "main_module" ); - check_instance( name, main_module, main_module, main_module ); - check_thread_instance( name, main_module, main_module, main_module ); - - cls.lpszMenuName = "kernel32"; - cls.hInstance = kernel32; - ok( RegisterClassA( &cls ), "Failed to register local class for kernel32\n" ); - check_class( kernel32, name, "kernel32" ); - check_class( main_module, name, "main_module" ); - check_instance( name, kernel32, kernel32, kernel32 ); - check_thread_instance( name, kernel32, kernel32, kernel32 ); - ok( UnregisterClassA( name, kernel32 ), "Unregister failed for kernel32\n" ); - - /* Bug 2631 - Supplying an invalid number of bytes fails */ - cls.cbClsExtra = 0; - cls.cbWndExtra = -1; - SetLastError(0xdeadbeef); - ok( ((RegisterClassA( &cls ) == 0) && (GetLastError() == ERROR_INVALID_PARAMETER)), - "Failed with invalid number of WndExtra bytes\n"); - - cls.cbClsExtra = -1; - cls.cbWndExtra = 0; - SetLastError(0xdeadbeef); - ok( ((RegisterClassA( &cls ) == 0) && (GetLastError() == ERROR_INVALID_PARAMETER)), - "Failed with invalid number of ClsExtra bytes\n"); - - cls.cbClsExtra = -1; - cls.cbWndExtra = -1; - SetLastError(0xdeadbeef); - ok( ((RegisterClassA( &cls ) == 0) && (GetLastError() == ERROR_INVALID_PARAMETER)), - "Failed with invalid number of ClsExtra and cbWndExtra bytes\n"); - - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - SetLastError(0xdeadbeef); - - /* setting global flag doesn't change status of class */ - hwnd = CreateWindowExA( 0, name, "test", 0, 0, 0, 0, 0, 0, 0, main_module, 0 ); - SetClassLongA( hwnd, GCL_STYLE, CS_GLOBALCLASS ); - cls.lpszMenuName = "kernel32"; - cls.hInstance = kernel32; - ok( RegisterClassA( &cls ), "Failed to register local class for kernel32\n" ); - check_class( kernel32, name, "kernel32" ); - check_class( main_module, name, "main_module" ); - check_instance( name, kernel32, kernel32, kernel32 ); - check_instance( name, main_module, main_module, main_module ); - check_thread_instance( name, kernel32, kernel32, kernel32 ); - check_thread_instance( name, main_module, main_module, main_module ); - ok( UnregisterClassA( name, kernel32 ), "Unregister failed for kernel32\n" ); - - /* changing the instance doesn't make it global */ - SetClassLongPtrA( hwnd, GCLP_HMODULE, 0 ); - ok( RegisterClassA( &cls ), "Failed to register local class for kernel32\n" ); - check_class( kernel32, name, "kernel32" ); - check_instance( name, kernel32, kernel32, kernel32 ); - check_thread_instance( name, kernel32, kernel32, kernel32 ); - ok( !GetClassInfo( 0, name, &wc ), "Class found with null instance\n" ); - ok( UnregisterClassA( name, kernel32 ), "Unregister failed for kernel32\n" ); - - /* GetClassInfo with instance 0 finds user32 instance */ - SetClassLongPtrA( hwnd, GCLP_HMODULE, (LONG_PTR)user32 ); - ok( RegisterClassA( &cls ), "Failed to register local class for kernel32\n" ); - check_class( kernel32, name, "kernel32" ); - check_class( user32, name, "main_module" ); - check_class( 0, name, "main_module" ); - check_instance( name, kernel32, kernel32, kernel32 ); - check_instance( name, user32, 0, user32 ); - check_instance( name, 0, 0, kernel32 ); - check_thread_instance( name, kernel32, kernel32, kernel32 ); - check_thread_instance( name, user32, 0, user32 ); - check_thread_instance( name, 0, 0, kernel32 ); - ok( UnregisterClassA( name, kernel32 ), "Unregister failed for kernel32\n" ); - - SetClassLongPtrA( hwnd, GCLP_HMODULE, 0x12345678 ); - ok( RegisterClassA( &cls ), "Failed to register local class for kernel32\n" ); - check_class( kernel32, name, "kernel32" ); - check_class( (HINSTANCE)0x12345678, name, "main_module" ); - check_instance( name, kernel32, kernel32, kernel32 ); - check_instance( name, (HINSTANCE)0x12345678, (HINSTANCE)0x12345678, (HINSTANCE)0x12345678 ); - check_thread_instance( name, kernel32, kernel32, kernel32 ); - check_thread_instance( name, (HINSTANCE)0x12345678, (HINSTANCE)0x12345678, (HINSTANCE)0x12345678 ); - ok( !GetClassInfo( 0, name, &wc ), "Class found with null instance\n" ); - - /* creating a window with instance 0 uses the first class found */ - cls.hInstance = (HINSTANCE)0xdeadbeef; - cls.lpszMenuName = "deadbeef"; - cls.style = 3; - ok( RegisterClassA( &cls ), "Failed to register local class for deadbeef\n" ); - hwnd2 = CreateWindowExA( 0, name, "test_window", 0, 0, 0, 0, 0, 0, 0, NULL, 0 ); - ok( (HINSTANCE)GetClassLongPtrA( hwnd2, GCLP_HMODULE ) == (HINSTANCE)0xdeadbeef, - "Didn't get deadbeef class for null instance\n" ); - DestroyWindow( hwnd2 ); - ok( UnregisterClassA( name, (HINSTANCE)0xdeadbeef ), "Unregister failed for deadbeef\n" ); - - hwnd2 = CreateWindowExA( 0, name, "test_window", 0, 0, 0, 0, 0, 0, 0, NULL, 0 ); - ok( (HINSTANCE)GetClassLongPtrA( hwnd2, GCLP_HMODULE ) == kernel32, - "Didn't get kernel32 class for null instance\n" ); - DestroyWindow( hwnd2 ); - - r = GetClassName( hwnd, buffer, 4 ); - ok( r == 3, "expected 3, got %d\n", r ); - ok( !strcmp( buffer, "__t"), "name wrong: %s\n", buffer ); - - ok( UnregisterClassA( name, kernel32 ), "Unregister failed for kernel32\n" ); - - hwnd2 = CreateWindowExA( 0, name, "test_window", 0, 0, 0, 0, 0, 0, 0, NULL, 0 ); - ok( GetClassLongPtrA( hwnd2, GCLP_HMODULE ) == 0x12345678, - "Didn't get 12345678 class for null instance\n" ); - DestroyWindow( hwnd2 ); - - SetClassLongPtrA( hwnd, GCLP_HMODULE, (LONG_PTR)main_module ); - DestroyWindow( hwnd ); - - /* null handle means the same thing as main module */ - cls.lpszMenuName = "null"; - cls.hInstance = 0; - ok( !RegisterClassA( &cls ), "Succeeded registering local class for null instance\n" ); - ok( GetLastError() == ERROR_CLASS_ALREADY_EXISTS, "Wrong error code %d\n", GetLastError() ); - ok( UnregisterClassA( name, main_module ), "Unregister failed for main module\n" ); - - ok( RegisterClassA( &cls ), "Failed to register local class for null instance\n" ); - /* must be found with main module handle */ - check_class( main_module, name, "null" ); - check_instance( name, main_module, main_module, main_module ); - check_thread_instance( name, main_module, main_module, main_module ); - ok( !GetClassInfo( 0, name, &wc ), "Class found with null instance\n" ); - ok( GetLastError() == ERROR_CLASS_DOES_NOT_EXIST, "Wrong error code %d\n", GetLastError() ); - ok( UnregisterClassA( name, 0 ), "Unregister failed for null instance\n" ); - - /* registering for user32 always fails */ - cls.lpszMenuName = "user32"; - cls.hInstance = user32; - ok( !RegisterClassA( &cls ), "Succeeded registering local class for user32\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error code %d\n", GetLastError() ); - cls.style |= CS_GLOBALCLASS; - ok( !RegisterClassA( &cls ), "Succeeded registering global class for user32\n" ); - ok( GetLastError() == ERROR_INVALID_PARAMETER, "Wrong error code %d\n", GetLastError() ); - - /* unregister is OK though */ - cls.hInstance = main_module; - ok( RegisterClassA( &cls ), "Failed to register global class for main module\n" ); - ok( UnregisterClassA( name, user32 ), "Unregister failed for user32\n" ); - - /* instance doesn't matter for global class */ - cls.style |= CS_GLOBALCLASS; - cls.lpszMenuName = "main_module"; - cls.hInstance = main_module; - ok( RegisterClassA( &cls ), "Failed to register global class for main module\n" ); - cls.lpszMenuName = "kernel32"; - cls.hInstance = kernel32; - ok( !RegisterClassA( &cls ), "Succeeded registering local class for kernel32\n" ); - ok( GetLastError() == ERROR_CLASS_ALREADY_EXISTS, "Wrong error code %d\n", GetLastError() ); - /* even if global flag is cleared */ - hwnd = CreateWindowExA( 0, name, "test", 0, 0, 0, 0, 0, 0, 0, main_module, 0 ); - SetClassLongA( hwnd, GCL_STYLE, 0 ); - ok( !RegisterClassA( &cls ), "Succeeded registering local class for kernel32\n" ); - ok( GetLastError() == ERROR_CLASS_ALREADY_EXISTS, "Wrong error code %d\n", GetLastError() ); - - check_class( main_module, name, "main_module" ); - check_class( kernel32, name, "main_module" ); - check_class( 0, name, "main_module" ); - check_class( (HINSTANCE)0x12345678, name, "main_module" ); - check_instance( name, main_module, main_module, main_module ); - check_instance( name, (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, main_module ); - check_thread_instance( name, main_module, main_module, main_module ); - check_thread_instance( name, (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, main_module ); - - /* changing the instance for global class doesn't make much difference */ - SetClassLongPtrA( hwnd, GCLP_HMODULE, 0xdeadbeef ); - check_instance( name, main_module, main_module, (HINSTANCE)0xdeadbeef ); - check_instance( name, (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef ); - check_thread_instance( name, main_module, main_module, (HINSTANCE)0xdeadbeef ); - check_thread_instance( name, (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef ); - - DestroyWindow( hwnd ); - ok( UnregisterClassA( name, (HINSTANCE)0x87654321 ), "Unregister failed for main module global\n" ); - ok( !UnregisterClassA( name, (HINSTANCE)0x87654321 ), "Unregister succeeded the second time\n" ); - ok( GetLastError() == ERROR_CLASS_DOES_NOT_EXIST, "Wrong error code %d\n", GetLastError() ); - - cls.hInstance = (HINSTANCE)0x12345678; - ok( RegisterClassA( &cls ), "Failed to register global class for dummy instance\n" ); - check_instance( name, main_module, main_module, (HINSTANCE)0x12345678 ); - check_instance( name, (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, (HINSTANCE)0x12345678 ); - check_thread_instance( name, main_module, main_module, (HINSTANCE)0x12345678 ); - check_thread_instance( name, (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, (HINSTANCE)0x12345678 ); - ok( UnregisterClassA( name, (HINSTANCE)0x87654321 ), "Unregister failed for main module global\n" ); - - /* check system classes */ - - /* we cannot register a global class with the name of a system class */ - cls.style |= CS_GLOBALCLASS; - cls.lpszMenuName = "button_main_module"; - cls.lpszClassName = "BUTTON"; - cls.hInstance = main_module; - ok( !RegisterClassA( &cls ), "Succeeded registering global button class for main module\n" ); - ok( GetLastError() == ERROR_CLASS_ALREADY_EXISTS, "Wrong error code %d\n", GetLastError() ); - cls.hInstance = kernel32; - ok( !RegisterClassA( &cls ), "Succeeded registering global button class for kernel32\n" ); - ok( GetLastError() == ERROR_CLASS_ALREADY_EXISTS, "Wrong error code %d\n", GetLastError() ); - - /* local class is OK however */ - cls.style &= ~CS_GLOBALCLASS; - cls.lpszMenuName = "button_main_module"; - cls.hInstance = main_module; - ok( RegisterClassA( &cls ), "Failed to register local button class for main module\n" ); - check_class( main_module, "BUTTON", "button_main_module" ); - cls.lpszMenuName = "button_kernel32"; - cls.hInstance = kernel32; - ok( RegisterClassA( &cls ), "Failed to register local button class for kernel32\n" ); - check_class( kernel32, "BUTTON", "button_kernel32" ); - check_class( main_module, "BUTTON", "button_main_module" ); - ok( UnregisterClassA( "BUTTON", kernel32 ), "Unregister failed for kernel32 button\n" ); - ok( UnregisterClassA( "BUTTON", main_module ), "Unregister failed for main module button\n" ); - /* GetClassInfo sets instance to passed value for global classes */ - check_instance( "BUTTON", 0, 0, user32 ); - check_instance( "BUTTON", (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, user32 ); - check_instance( "BUTTON", user32, 0, user32 ); - check_thread_instance( "BUTTON", 0, 0, user32 ); - check_thread_instance( "BUTTON", (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, user32 ); - check_thread_instance( "BUTTON", user32, 0, user32 ); - - /* we can unregister system classes */ - ok( GetClassInfo( 0, "BUTTON", &wc ), "Button class not found with null instance\n" ); - ok( GetClassInfo( kernel32, "BUTTON", &wc ), "Button class not found with kernel32\n" ); - ok( UnregisterClass( "BUTTON", (HINSTANCE)0x12345678 ), "Failed to unregister button\n" ); - ok( !UnregisterClass( "BUTTON", (HINSTANCE)0x87654321 ), "Unregistered button a second time\n" ); - ok( GetLastError() == ERROR_CLASS_DOES_NOT_EXIST, "Wrong error code %d\n", GetLastError() ); - ok( !GetClassInfo( 0, "BUTTON", &wc ), "Button still exists\n" ); - ok( GetLastError() == ERROR_CLASS_DOES_NOT_EXIST || - GetLastError() == ERROR_INVALID_PARAMETER || /* W2K3 */ - GetLastError() == ERROR_SUCCESS /* Vista */, - "Wrong error code %d\n", GetLastError() ); - - /* we can change the instance of a system class */ - check_instance( "EDIT", (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, user32 ); - check_thread_instance( "EDIT", (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, user32 ); - hwnd = CreateWindowExA( 0, "EDIT", "test", 0, 0, 0, 0, 0, 0, 0, main_module, 0 ); - SetClassLongPtrA( hwnd, GCLP_HMODULE, 0xdeadbeef ); - check_instance( "EDIT", (HINSTANCE)0x12345678, (HINSTANCE)0x12345678, (HINSTANCE)0xdeadbeef ); - check_thread_instance( "EDIT", (HINSTANCE)0x12345678, (HINSTANCE)0x12345678, (HINSTANCE)0xdeadbeef ); -} - -static void test_builtinproc(void) -{ - /* Edit behaves differently. ScrollBar have currently only a Unicode winproc */ - static const CHAR NORMAL_CLASSES[][10] = { - "Button", - "Static", - "ComboBox", - "ComboLBox", - "ListBox", - "#32770", /* dialog */ - }; - static const int NUM_NORMAL_CLASSES = (sizeof(NORMAL_CLASSES)/sizeof(NORMAL_CLASSES[0])); - static const char classA[] = "deftest"; - static const WCHAR classW[] = {'d','e','f','t','e','s','t',0}; - WCHAR unistring[] = {0x142, 0x40e, 0x3b4, 0}; /* a string that would be destroyed by a W->A->W conversion */ - WNDPROC pDefWindowProcA, pDefWindowProcW; - WNDPROC oldproc; - WNDCLASSEXA cls; /* the memory layout of WNDCLASSEXA and WNDCLASSEXW is the same */ - WCHAR buf[128]; - ATOM atom; - HWND hwnd; - int i; - - pDefWindowProcA = (void *)GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcA"); - pDefWindowProcW = (void *)GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW"); - - for (i = 0; i < 4; i++) - { - ZeroMemory(&cls, sizeof(cls)); - cls.cbSize = sizeof(cls); - cls.hInstance = GetModuleHandle(NULL); - cls.hbrBackground = GetStockObject (WHITE_BRUSH); - if (i & 1) - cls.lpfnWndProc = pDefWindowProcA; - else - cls.lpfnWndProc = pDefWindowProcW; - - if (i & 2) - { - cls.lpszClassName = classA; - atom = RegisterClassExA(&cls); - } - else - { - cls.lpszClassName = (LPCSTR)classW; - atom = RegisterClassExW((WNDCLASSEXW *)&cls); - } - ok(atom != 0, "Couldn't register class, i=%d, %d\n", i, GetLastError()); - - hwnd = CreateWindowA(classA, NULL, 0, 0, 0, 100, 100, NULL, NULL, GetModuleHandle(NULL), NULL); - ok(hwnd != NULL, "Couldn't create window i=%d\n", i); - - ok(GetWindowLongPtrA(hwnd, GWLP_WNDPROC) == (LONG_PTR)pDefWindowProcA, "Wrong ANSI wndproc: %p vs %p\n", - (void *)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), pDefWindowProcA); - ok(GetClassLongPtrA(hwnd, GCLP_WNDPROC) == (ULONG_PTR)pDefWindowProcA, "Wrong ANSI wndproc: %p vs %p\n", - (void *)GetClassLongPtrA(hwnd, GCLP_WNDPROC), pDefWindowProcA); - - ok(GetWindowLongPtrW(hwnd, GWLP_WNDPROC) == (LONG_PTR)pDefWindowProcW, "Wrong Unicode wndproc: %p vs %p\n", - (void *)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), pDefWindowProcW); - ok(GetClassLongPtrW(hwnd, GCLP_WNDPROC) == (ULONG_PTR)pDefWindowProcW, "Wrong Unicode wndproc: %p vs %p\n", - (void *)GetClassLongPtrW(hwnd, GCLP_WNDPROC), pDefWindowProcW); - - DestroyWindow(hwnd); - UnregisterClass((LPSTR)(DWORD_PTR)atom, GetModuleHandle(NULL)); - } - - /* built-in winproc - window A/W type automatically detected */ - ZeroMemory(&cls, sizeof(cls)); - cls.cbSize = sizeof(cls); - cls.hInstance = GetModuleHandle(NULL); - cls.hbrBackground = GetStockObject (WHITE_BRUSH); - cls.lpszClassName = classA; - cls.lpfnWndProc = pDefWindowProcW; - atom = RegisterClassExA(&cls); - - hwnd = CreateWindowExW(0, classW, NULL, WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, GetModuleHandleA(NULL), 0); - ok(IsWindowUnicode(hwnd), "Windows should be Unicode\n"); - SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (LONG_PTR)pDefWindowProcA); - ok(IsWindowUnicode(hwnd), "Windows should have remained Unicode\n"); - ok(GetWindowLongPtrW(hwnd, GWLP_WNDPROC) == (LONG_PTR)pDefWindowProcW, "Invalid ANSI winproc\n"); - ok(GetWindowLongPtrA(hwnd, GWLP_WNDPROC) == (LONG_PTR)pDefWindowProcA, "Invalid Unicode winproc\n"); - SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (LONG_PTR)ClassTest_WndProc); - ok(IsWindowUnicode(hwnd) == FALSE, "SetWindowLongPtrA should have switched window to ANSI\n"); - - DestroyWindow(hwnd); - UnregisterClass((LPSTR)(DWORD_PTR)atom, GetModuleHandle(NULL)); - - /* custom winproc - the same function can be used as both A and W*/ - ZeroMemory(&cls, sizeof(cls)); - cls.cbSize = sizeof(cls); - cls.hInstance = GetModuleHandle(NULL); - cls.hbrBackground = GetStockObject (WHITE_BRUSH); - cls.lpszClassName = classA; - cls.lpfnWndProc = ClassTest_WndProc2; - atom = RegisterClassExA(&cls); - - hwnd = CreateWindowExW(0, classW, NULL, WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, GetModuleHandleA(NULL), 0); - ok(IsWindowUnicode(hwnd) == FALSE, "Window should be ANSI\n"); - SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (LONG_PTR)ClassTest_WndProc); - ok(IsWindowUnicode(hwnd), "SetWindowLongPtrW should have changed window to Unicode\n"); - SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (LONG_PTR)ClassTest_WndProc); - ok(IsWindowUnicode(hwnd) == FALSE, "SetWindowLongPtrA should have changed window to ANSI\n"); - - DestroyWindow(hwnd); - UnregisterClass((LPSTR)(DWORD_PTR)atom, GetModuleHandle(NULL)); - - /* For most of the builtin controls both GetWindowLongPtrA and W returns a pointer that is executed directly - * by CallWindowProcA/W */ - for (i = 0; i < NUM_NORMAL_CLASSES; i++) - { - WNDPROC procA, procW; - hwnd = CreateWindowExA(0, NORMAL_CLASSES[i], classA, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, - NULL, NULL, NULL, 0); - ok(hwnd != NULL, "Couldn't create window of class %s\n", NORMAL_CLASSES[i]); - SetWindowText(hwnd, classA); /* ComboBox needs this */ - procA = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC); - procW = (WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC); - ok(!IS_WNDPROC_HANDLE(procA), "procA should not be a handle for %s (%p)\n", NORMAL_CLASSES[i], procA); - ok(!IS_WNDPROC_HANDLE(procW), "procW should not be a handle for %s (%p)\n", NORMAL_CLASSES[i], procW); - CallWindowProcA(procA, hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT A/A invalid return for class %s\n", NORMAL_CLASSES[i]); - CallWindowProcA(procW, hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classW, sizeof(classW)) == 0, "WM_GETTEXT A/W invalid return for class %s\n", NORMAL_CLASSES[i]); - CallWindowProcW(procA, hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT W/A invalid return for class %s\n", NORMAL_CLASSES[i]); - CallWindowProcW(procW, hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classW, sizeof(classW)) == 0, "WM_GETTEXT W/W invalid return for class %s\n", NORMAL_CLASSES[i]); - - oldproc = (WNDPROC)SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (LONG_PTR)ClassTest_WndProc); - ok(IS_WNDPROC_HANDLE(oldproc) == FALSE, "Class %s shouldn't return a handle\n", NORMAL_CLASSES[i]); - DestroyWindow(hwnd); - } - - /* Edit controls are special - they return a wndproc handle when GetWindowLongPtr is called with a different A/W. - * On the other hand there is no W->A->W conversion so this control is treated specially. */ - hwnd = CreateWindowW(WC_EDITW, unistring, WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, NULL, 0); - /* GetClassLongPtr returns that both the Unicode and ANSI wndproc */ - ok(IS_WNDPROC_HANDLE(GetClassLongPtrA(hwnd, GCLP_WNDPROC)) == FALSE, "Edit control class should have a Unicode wndproc\n"); - ok(IS_WNDPROC_HANDLE(GetClassLongPtrW(hwnd, GCLP_WNDPROC)) == FALSE, "Edit control class should have a ANSI wndproc\n"); - /* But GetWindowLongPtr returns only a handle for the ANSI one */ - ok(IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd, GWLP_WNDPROC)), "Edit control should return a wndproc handle\n"); - ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd, GWLP_WNDPROC)), "Edit control shouldn't return a W wndproc handle\n"); - CallWindowProcW((WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, unistring, sizeof(unistring)) == 0, "WM_GETTEXT invalid return\n"); - CallWindowProcA((WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, unistring, sizeof(unistring)) == 0, "WM_GETTEXT invalid return\n"); - CallWindowProcW((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, unistring, sizeof(unistring)) == 0, "WM_GETTEXT invalid return\n"); - - SetWindowTextW(hwnd, classW); - CallWindowProcA((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n"); - - oldproc = (WNDPROC)SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (LONG_PTR)ClassTest_WndProc2); - /* SetWindowLongPtr returns a wndproc handle - like GetWindowLongPtr */ - ok(IS_WNDPROC_HANDLE(oldproc), "Edit control should return a wndproc handle\n"); - ok(IsWindowUnicode(hwnd) == FALSE, "SetWindowLongPtrA should have changed window to ANSI\n"); - SetWindowTextA(hwnd, classA); /* Windows resets the title to WideStringToMultiByte(unistring) */ - memset(buf, 0, sizeof(buf)); - CallWindowProcA((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n"); - CallWindowProcA((WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n"); - CallWindowProcW((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n"); - - CallWindowProcW((WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classW, sizeof(classW)) == 0, "WM_GETTEXT invalid return\n"); - - DestroyWindow(hwnd); - - hwnd = CreateWindowA(WC_EDITA, classA, WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, NULL, 0); - - /* GetClassLongPtr returns that both the Unicode and ANSI wndproc */ - ok(!IS_WNDPROC_HANDLE(GetClassLongPtrA(hwnd, GCLP_WNDPROC)), "Edit control class should have a Unicode wndproc\n"); - ok(!IS_WNDPROC_HANDLE(GetClassLongPtrW(hwnd, GCLP_WNDPROC)), "Edit control class should have a ANSI wndproc\n"); - /* But GetWindowLongPtr returns only a handle for the Unicode one */ - ok(!IS_WNDPROC_HANDLE(GetWindowLongPtrA(hwnd, GWLP_WNDPROC)), "Edit control shouldn't return an A wndproc handle\n"); - ok(IS_WNDPROC_HANDLE(GetWindowLongPtrW(hwnd, GWLP_WNDPROC)), "Edit control should return a wndproc handle\n"); - CallWindowProcA((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n"); - CallWindowProcA((WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n"); - CallWindowProcW((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n"); - - CallWindowProcW((WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classW, sizeof(classW)) == 0, "WM_GETTEXT invalid return\n"); - - SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (LONG_PTR)ClassTest_WndProc); - SetWindowTextW(hwnd, unistring); - CallWindowProcW((WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, unistring, sizeof(unistring)) == 0, "WM_GETTEXT invalid return\n"); - CallWindowProcA((WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, unistring, sizeof(unistring)) == 0, "WM_GETTEXT invalid return\n"); - CallWindowProcW((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, unistring, sizeof(unistring)) == 0, "WM_GETTEXT invalid return\n"); - - SetWindowTextW(hwnd, classW); - CallWindowProcA((WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC), hwnd, WM_GETTEXT, 120, (LPARAM)buf); - ok(memcmp(buf, classA, sizeof(classA)) == 0, "WM_GETTEXT invalid return\n"); - - DestroyWindow(hwnd); -} - - -static LRESULT WINAPI TestDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - return DefWindowProc(hWnd, uMsg, wParam, lParam); -} - -static BOOL RegisterTestDialog(HINSTANCE hInstance) -{ - WNDCLASSEX wcx; - ATOM atom = 0; - - ZeroMemory(&wcx, sizeof(WNDCLASSEX)); - wcx.cbSize = sizeof(wcx); - wcx.lpfnWndProc = TestDlgProc; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = DLGWINDOWEXTRA; - wcx.hInstance = hInstance; - wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); - wcx.hCursor = LoadCursor(NULL, IDC_ARROW); - wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); - wcx.lpszClassName = "TestDialog"; - wcx.lpszMenuName = "TestDialog"; - wcx.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(5), - IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), - GetSystemMetrics(SM_CYSMICON), - LR_DEFAULTCOLOR); - - atom = RegisterClassEx(&wcx); - ok(atom != 0, "RegisterClassEx returned 0\n"); - - return atom; -} - -/* test registering a dialog box created by using the CLASS directive in a - resource file, then test creating the dialog using CreateDialogParam. */ -static void WINAPI CreateDialogParamTest(HINSTANCE hInstance) -{ - HWND hWndMain; - - if (RegisterTestDialog(hInstance)) - { - hWndMain = CreateDialogParam(hInstance, "CLASS_TEST_DIALOG", NULL, 0, 0); - ok(hWndMain != NULL, "CreateDialogParam returned NULL\n"); - ShowWindow(hWndMain, SW_SHOW); - DestroyWindow(hWndMain); - } -} - -START_TEST(class) -{ - HANDLE hInstance = GetModuleHandleA( NULL ); - - if (!GetModuleHandleW(0)) - { - trace("Class test is incompatible with Win9x implementation, skipping\n"); - return; - } - - ClassTest(hInstance,FALSE); - ClassTest(hInstance,TRUE); - CreateDialogParamTest(hInstance); - test_styles(); - test_builtinproc(); - - /* this test unregisters the Button class so it should be executed at the end */ - test_instances(); -} diff --git a/rostests/winetests/user32/clipboard.c b/rostests/winetests/user32/clipboard.c deleted file mode 100755 index 30b170759a2..00000000000 --- a/rostests/winetests/user32/clipboard.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Unit test suite for clipboard functions. - * - * Copyright 2002 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/test.h" -#include "winbase.h" -#include "winerror.h" -#include "winuser.h" - -static BOOL is_win9x = FALSE; - -#define test_last_error(expected_error) \ - do \ - { \ - if (!is_win9x) \ - ok(GetLastError() == expected_error, \ - "Last error should be set to %d, not %d\n", \ - expected_error, GetLastError()); \ - } while (0) - -static void test_ClipboardOwner(void) -{ - HWND hWnd1, hWnd2; - BOOL ret; - - SetLastError(0xdeadbeef); - ok(!GetClipboardOwner() && GetLastError() == 0xdeadbeef, - "could not perform clipboard test: clipboard already owned\n"); - - hWnd1 = CreateWindowExA(0, "static", NULL, WS_POPUP, - 0, 0, 10, 10, 0, 0, 0, NULL); - ok(hWnd1 != 0, "CreateWindowExA error %d\n", GetLastError()); - trace("hWnd1 = %p\n", hWnd1); - - hWnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP, - 0, 0, 10, 10, 0, 0, 0, NULL); - ok(hWnd2 != 0, "CreateWindowExA error %d\n", GetLastError()); - trace("hWnd2 = %p\n", hWnd2); - - SetLastError(0xdeadbeef); - ok(!CloseClipboard(), "CloseClipboard should fail if clipboard wasn't open\n"); - test_last_error(ERROR_CLIPBOARD_NOT_OPEN); - - ok(OpenClipboard(0), "OpenClipboard failed\n"); - ok(!GetClipboardOwner(), "clipboard should still be not owned\n"); - ok(!OpenClipboard(hWnd1), "OpenClipboard should fail since clipboard already opened\n"); - ret = CloseClipboard(); - ok( ret, "CloseClipboard error %d\n", GetLastError()); - - ok(OpenClipboard(hWnd1), "OpenClipboard failed\n"); - - SetLastError(0xdeadbeef); - ok(!OpenClipboard(hWnd2) && - (GetLastError() == 0xdeadbeef || GetLastError() == ERROR_ACCESS_DENIED), - "OpenClipboard should fail without setting last error value, or with ERROR_ACCESS_DENIED, got error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ok(!GetClipboardOwner() && GetLastError() == 0xdeadbeef, "clipboard should still be not owned\n"); - ret = EmptyClipboard(); - ok( ret, "EmptyClipboard error %d\n", GetLastError()); - ok(GetClipboardOwner() == hWnd1, "clipboard should be owned by %p, not by %p\n", hWnd1, GetClipboardOwner()); - - SetLastError(0xdeadbeef); - ok(!OpenClipboard(hWnd2) && - (GetLastError() == 0xdeadbeef || GetLastError() == ERROR_ACCESS_DENIED), - "OpenClipboard should fail without setting last error valuei, or with ERROR_ACCESS_DENIED, got error %d\n", GetLastError()); - - ret = CloseClipboard(); - ok( ret, "CloseClipboard error %d\n", GetLastError()); - ok(GetClipboardOwner() == hWnd1, "clipboard should still be owned\n"); - - ret = DestroyWindow(hWnd1); - ok( ret, "DestroyWindow error %d\n", GetLastError()); - ret = DestroyWindow(hWnd2); - ok( ret, "DestroyWindow error %d\n", GetLastError()); - SetLastError(0xdeadbeef); - ok(!GetClipboardOwner() && GetLastError() == 0xdeadbeef, "clipboard should not be owned\n"); -} - -static void test_RegisterClipboardFormatA(void) -{ - ATOM atom_id; - UINT format_id, format_id2; - char buf[256]; - int len; - BOOL ret; - - format_id = RegisterClipboardFormatA("my_cool_clipboard_format"); - ok(format_id > 0xc000 && format_id < 0xffff, "invalid clipboard format id %04x\n", format_id); - - format_id2 = RegisterClipboardFormatA("MY_COOL_CLIPBOARD_FORMAT"); - ok(format_id2 == format_id, "invalid clipboard format id %04x\n", format_id2); - - len = GetClipboardFormatNameA(format_id, buf, 256); - ok(len == lstrlenA("my_cool_clipboard_format"), "wrong format name length %d\n", len); - ok(!lstrcmpA(buf, "my_cool_clipboard_format"), "wrong format name \"%s\"\n", buf); - - lstrcpyA(buf, "foo"); - SetLastError(0xdeadbeef); - len = GetAtomNameA((ATOM)format_id, buf, 256); - ok(len == 0, "GetAtomNameA should fail\n"); - test_last_error(ERROR_INVALID_HANDLE); - -todo_wine -{ - lstrcpyA(buf, "foo"); - SetLastError(0xdeadbeef); - len = GlobalGetAtomNameA((ATOM)format_id, buf, 256); - ok(len == 0, "GlobalGetAtomNameA should fail\n"); - test_last_error(ERROR_INVALID_HANDLE); -} - - SetLastError(0xdeadbeef); - atom_id = FindAtomA("my_cool_clipboard_format"); - ok(atom_id == 0, "FindAtomA should fail\n"); - test_last_error(ERROR_FILE_NOT_FOUND); - - if (0) - { - /* this relies on the clipboard and global atom table being different */ - SetLastError(0xdeadbeef); - atom_id = GlobalFindAtomA("my_cool_clipboard_format"); - ok(atom_id == 0, "GlobalFindAtomA should fail\n"); - test_last_error(ERROR_FILE_NOT_FOUND); - - for (format_id = 0; format_id < 0xffff; format_id++) - { - SetLastError(0xdeadbeef); - len = GetClipboardFormatNameA(format_id, buf, 256); - - if (format_id < 0xc000) - { - ok(!len, "GetClipboardFormatNameA should fail, but it returned %d (%s)\n", len, buf); - test_last_error(ERROR_INVALID_PARAMETER); - } - else - { - if (len) - trace("%04x: %s\n", format_id, len ? buf : ""); - else - test_last_error(ERROR_INVALID_HANDLE); - } - } - } - - ret = OpenClipboard(0); - ok( ret, "OpenClipboard error %d\n", GetLastError()); - - trace("# of formats available: %d\n", CountClipboardFormats()); - - format_id = 0; - while ((format_id = EnumClipboardFormats(format_id))) - { - ok(IsClipboardFormatAvailable(format_id), "format %04x was listed as available\n", format_id); - len = GetClipboardFormatNameA(format_id, buf, 256); - trace("%04x: %s\n", format_id, len ? buf : ""); - } - - ret = EmptyClipboard(); - ok( ret, "EmptyClipboard error %d\n", GetLastError()); - ret =CloseClipboard(); - ok( ret, "CloseClipboard error %d\n", GetLastError()); - - if (CountClipboardFormats()) - { - SetLastError(0xdeadbeef); - ok(!EnumClipboardFormats(0), "EnumClipboardFormats should fail if clipboard wasn't open\n"); - ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN, - "Last error should be set to ERROR_CLIPBOARD_NOT_OPEN, not %d\n", GetLastError()); - } - - SetLastError(0xdeadbeef); - ok(!EmptyClipboard(), "EmptyClipboard should fail if clipboard wasn't open\n"); - test_last_error(ERROR_CLIPBOARD_NOT_OPEN); -} - -START_TEST(clipboard) -{ - SetLastError(0xdeadbeef); - FindAtomW(NULL); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) is_win9x = TRUE; - - test_RegisterClipboardFormatA(); - test_ClipboardOwner(); -} diff --git a/rostests/winetests/user32/combo.c b/rostests/winetests/user32/combo.c deleted file mode 100644 index 34d8c7ab304..00000000000 --- a/rostests/winetests/user32/combo.c +++ /dev/null @@ -1,280 +0,0 @@ -/* Unit test suite for combo boxes. - * - * Copyright 2007 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 - */ - -#include -#include -#include - -#define STRICT -#define WIN32_LEAN_AND_MEAN -#include - -#include "wine/test.h" - -#define COMBO_ID 1995 - -static HWND hMainWnd; - -#define expect_eq(expr, value, type, fmt); { type val = expr; ok(val == (value), #expr " expected " #fmt " got " #fmt "\n", (value), val); } -#define expect_rect(r, _left, _top, _right, _bottom) ok(r.left == _left && r.top == _top && \ - r.bottom == _bottom && r.right == _right, "Invalid rect (%d,%d) (%d,%d) vs (%d,%d) (%d,%d)\n", \ - r.left, r.top, r.right, r.bottom, _left, _top, _right, _bottom); - -static HWND build_combo(DWORD style) -{ - return CreateWindow("ComboBox", "Combo", WS_VISIBLE|WS_CHILD|style, 5, 5, 100, 100, hMainWnd, (HMENU)COMBO_ID, NULL, 0); -} - -static int font_height(HFONT hFont) -{ - TEXTMETRIC tm; - HFONT hFontOld; - HDC hDC; - - hDC = CreateCompatibleDC(NULL); - hFontOld = SelectObject(hDC, hFont); - GetTextMetrics(hDC, &tm); - SelectObject(hDC, hFontOld); - DeleteDC(hDC); - - return tm.tmHeight; -} - -static INT CALLBACK is_font_installed_proc(const LOGFONT *elf, const TEXTMETRIC *tm, DWORD type, LPARAM lParam) -{ - return 0; -} - -static int is_font_installed(const char *name) -{ - HDC hdc = GetDC(NULL); - BOOL ret = !EnumFontFamilies(hdc, name, is_font_installed_proc, 0); - ReleaseDC(NULL, hdc); - return ret; -} - -static void test_setitemheight(DWORD style) -{ - HWND hCombo = build_combo(style); - RECT r; - int i; - - trace("Style %x\n", style); - GetClientRect(hCombo, &r); - expect_rect(r, 0, 0, 100, 24); - SendMessageA(hCombo, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&r); - MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2); - todo_wine expect_rect(r, 5, 5, 105, 105); - - for (i = 1; i < 30; i++) - { - SendMessage(hCombo, CB_SETITEMHEIGHT, -1, i); - GetClientRect(hCombo, &r); - expect_eq(r.bottom - r.top, i + 6, int, "%d"); - } - - DestroyWindow(hCombo); -} - -static void test_setfont(DWORD style) -{ - HWND hCombo = build_combo(style); - HFONT hFont1 = CreateFont(10, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, "Marlett"); - HFONT hFont2 = CreateFont(8, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, "Marlett"); - RECT r; - int i; - - trace("Style %x\n", style); - GetClientRect(hCombo, &r); - expect_rect(r, 0, 0, 100, 24); - SendMessageA(hCombo, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&r); - MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2); - todo_wine expect_rect(r, 5, 5, 105, 105); - - if (!is_font_installed("Marlett")) - { - skip("Marlett font not available\n"); - DestroyWindow(hCombo); - DeleteObject(hFont1); - DeleteObject(hFont2); - return; - } - - if (font_height(hFont1) == 10 && font_height(hFont2) == 8) - { - SendMessage(hCombo, WM_SETFONT, (WPARAM)hFont1, FALSE); - GetClientRect(hCombo, &r); - expect_rect(r, 0, 0, 100, 18); - SendMessageA(hCombo, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&r); - MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2); - todo_wine expect_rect(r, 5, 5, 105, 99); - - SendMessage(hCombo, WM_SETFONT, (WPARAM)hFont2, FALSE); - GetClientRect(hCombo, &r); - expect_rect(r, 0, 0, 100, 16); - SendMessageA(hCombo, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&r); - MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2); - todo_wine expect_rect(r, 5, 5, 105, 97); - - SendMessage(hCombo, WM_SETFONT, (WPARAM)hFont1, FALSE); - GetClientRect(hCombo, &r); - expect_rect(r, 0, 0, 100, 18); - SendMessageA(hCombo, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&r); - MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2); - todo_wine expect_rect(r, 5, 5, 105, 99); - } - else - skip("Invalid Marlett font heights\n"); - - for (i = 1; i < 30; i++) - { - HFONT hFont = CreateFont(i, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, "Marlett"); - int height = font_height(hFont); - - SendMessage(hCombo, WM_SETFONT, (WPARAM)hFont, FALSE); - GetClientRect(hCombo, &r); - expect_eq(r.bottom - r.top, height + 8, int, "%d"); - SendMessage(hCombo, WM_SETFONT, 0, FALSE); - DeleteObject(hFont); - } - - DestroyWindow(hCombo); - DeleteObject(hFont1); - DeleteObject(hFont2); -} - -static LRESULT (CALLBACK *old_parent_proc)(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); -static LPCSTR expected_edit_text; -static LPCSTR expected_list_text; -static BOOL selchange_fired; - -static LRESULT CALLBACK parent_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_COMMAND: - switch (wparam) - { - case MAKEWPARAM(COMBO_ID, CBN_SELCHANGE): - { - HWND hCombo = (HWND)lparam; - int idx; - char list[20], edit[20]; - - memset(list, 0, sizeof(list)); - memset(edit, 0, sizeof(edit)); - - idx = SendMessage(hCombo, CB_GETCURSEL, 0, 0); - SendMessage(hCombo, CB_GETLBTEXT, idx, (LPARAM)list); - SendMessage(hCombo, WM_GETTEXT, sizeof(edit), (LPARAM)edit); - - ok(!strcmp(edit, expected_edit_text), "edit: got %s, expected %s\n", - edit, expected_edit_text); - ok(!strcmp(list, expected_list_text), "list: got %s, expected %s\n", - list, expected_list_text); - - selchange_fired = TRUE; - } - break; - } - break; - } - - return CallWindowProc(old_parent_proc, hwnd, msg, wparam, lparam); -} - -static void test_selection(DWORD style, const char * const text[], - const int *edit, const int *list) -{ - INT idx; - HWND hCombo; - - hCombo = build_combo(style); - - SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)text[0]); - SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)text[1]); - SendMessage(hCombo, CB_SETCURSEL, -1, 0); - - old_parent_proc = (void *)SetWindowLongPtr(hMainWnd, GWLP_WNDPROC, (ULONG_PTR)parent_wnd_proc); - - idx = SendMessage(hCombo, CB_GETCURSEL, 0, 0); - ok(idx == -1, "expected selection -1, got %d\n", idx); - - /* keyboard navigation */ - - expected_list_text = text[list[0]]; - expected_edit_text = text[edit[0]]; - selchange_fired = FALSE; - SendMessage(hCombo, WM_KEYDOWN, VK_DOWN, 0); - ok(selchange_fired, "CBN_SELCHANGE not sent!\n"); - - expected_list_text = text[list[1]]; - expected_edit_text = text[edit[1]]; - selchange_fired = FALSE; - SendMessage(hCombo, WM_KEYDOWN, VK_DOWN, 0); - ok(selchange_fired, "CBN_SELCHANGE not sent!\n"); - - expected_list_text = text[list[2]]; - expected_edit_text = text[edit[2]]; - selchange_fired = FALSE; - SendMessage(hCombo, WM_KEYDOWN, VK_UP, 0); - ok(selchange_fired, "CBN_SELCHANGE not sent!\n"); - - /* programmatic navigation */ - - expected_list_text = text[list[3]]; - expected_edit_text = text[edit[3]]; - selchange_fired = FALSE; - SendMessage(hCombo, CB_SETCURSEL, list[3], 0); - ok(!selchange_fired, "CBN_SELCHANGE sent!\n"); - - expected_list_text = text[list[4]]; - expected_edit_text = text[edit[4]]; - selchange_fired = FALSE; - SendMessage(hCombo, CB_SETCURSEL, list[4], 0); - ok(!selchange_fired, "CBN_SELCHANGE sent!\n"); - - SetWindowLongPtr(hMainWnd, GWLP_WNDPROC, (ULONG_PTR)old_parent_proc); - DestroyWindow(hCombo); -} - -static void test_CBN_SELCHANGE(void) -{ - static const char * const text[] = { "alpha", "beta", "" }; - static const int sel_1[] = { 2, 0, 1, 0, 1 }; - static const int sel_2[] = { 0, 1, 0, 0, 1 }; - - test_selection(CBS_SIMPLE, text, sel_1, sel_2); - test_selection(CBS_DROPDOWN, text, sel_1, sel_2); - test_selection(CBS_DROPDOWNLIST, text, sel_2, sel_2); -} - -START_TEST(combo) -{ - hMainWnd = CreateWindow("static", "Test", WS_OVERLAPPEDWINDOW, 10, 10, 300, 300, NULL, NULL, NULL, 0); - ShowWindow(hMainWnd, SW_SHOW); - - test_setfont(CBS_DROPDOWN); - test_setfont(CBS_DROPDOWNLIST); - test_setitemheight(CBS_DROPDOWN); - test_setitemheight(CBS_DROPDOWNLIST); - test_CBN_SELCHANGE(); - - DestroyWindow(hMainWnd); -} diff --git a/rostests/winetests/user32/cursoricon.c b/rostests/winetests/user32/cursoricon.c deleted file mode 100644 index 40f3a1413f2..00000000000 --- a/rostests/winetests/user32/cursoricon.c +++ /dev/null @@ -1,892 +0,0 @@ -/* - * Unit test suite for cursors and icons. - * - * Copyright 2006 Michael Kaufmann - * Copyright 2007 Dmitry Timoshkov - * Copyright 2007-2008 Andrew Riedi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "wingdi.h" -#include "winuser.h" - -#include "pshpack1.h" - -typedef struct -{ - BYTE bWidth; - BYTE bHeight; - BYTE bColorCount; - BYTE bReserved; - WORD xHotspot; - WORD yHotspot; - DWORD dwDIBSize; - DWORD dwDIBOffset; -} CURSORICONFILEDIRENTRY; - -typedef struct -{ - WORD idReserved; - WORD idType; - WORD idCount; - CURSORICONFILEDIRENTRY idEntries[1]; -} CURSORICONFILEDIR; - -#include "poppack.h" - -static char **test_argv; -static int test_argc; -static HWND child = 0; -static HWND parent = 0; -static HANDLE child_process; - -#define PROC_INIT (WM_USER+1) - -static LRESULT CALLBACK callback_child(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - BOOL ret; - DWORD error; - - switch (msg) - { - /* Destroy the cursor. */ - case WM_USER+1: - SetLastError(0xdeadbeef); - ret = DestroyCursor((HCURSOR) lParam); - error = GetLastError(); - todo_wine { - ok(!ret, "DestroyCursor on the active cursor succeeded.\n"); - ok(error == ERROR_DESTROY_OBJECT_OF_OTHER_THREAD, - "Last error: %u\n", error); - } - return TRUE; - case WM_DESTROY: - PostQuitMessage(0); - return 0; - } - - return DefWindowProc(hwnd, msg, wParam, lParam); -} - -static LRESULT CALLBACK callback_parent(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (msg == PROC_INIT) - { - child = (HWND) wParam; - return TRUE; - } - - return DefWindowProc(hwnd, msg, wParam, lParam); -} - -static void do_child(void) -{ - WNDCLASS class; - MSG msg; - BOOL ret; - - /* Register a new class. */ - class.style = CS_GLOBALCLASS; - class.lpfnWndProc = callback_child; - class.cbClsExtra = 0; - class.cbWndExtra = 0; - class.hInstance = GetModuleHandle(NULL); - class.hIcon = NULL; - class.hCursor = NULL; - class.hbrBackground = NULL; - class.lpszMenuName = NULL; - class.lpszClassName = "cursor_child"; - - SetLastError(0xdeadbeef); - ret = RegisterClass(&class); - ok(ret, "Failed to register window class. Error: %u\n", GetLastError()); - - /* Create a window. */ - child = CreateWindowA("cursor_child", "cursor_child", WS_POPUP | WS_VISIBLE, - 0, 0, 200, 200, 0, 0, 0, NULL); - ok(child != 0, "CreateWindowA failed. Error: %u\n", GetLastError()); - - /* Let the parent know our HWND. */ - PostMessage(parent, PROC_INIT, (WPARAM) child, 0); - - /* Receive messages. */ - while ((ret = GetMessage(&msg, child, 0, 0))) - { - ok(ret != -1, "GetMessage failed. Error: %u\n", GetLastError()); - TranslateMessage(&msg); - DispatchMessage(&msg); - } -} - -static void do_parent(void) -{ - char path_name[MAX_PATH]; - PROCESS_INFORMATION info; - STARTUPINFOA startup; - WNDCLASS class; - MSG msg; - BOOL ret; - - /* Register a new class. */ - class.style = CS_GLOBALCLASS; - class.lpfnWndProc = callback_parent; - class.cbClsExtra = 0; - class.cbWndExtra = 0; - class.hInstance = GetModuleHandle(NULL); - class.hIcon = NULL; - class.hCursor = NULL; - class.hbrBackground = NULL; - class.lpszMenuName = NULL; - class.lpszClassName = "cursor_parent"; - - SetLastError(0xdeadbeef); - ret = RegisterClass(&class); - ok(ret, "Failed to register window class. Error: %u\n", GetLastError()); - - /* Create a window. */ - parent = CreateWindowA("cursor_parent", "cursor_parent", WS_POPUP | WS_VISIBLE, - 0, 0, 200, 200, 0, 0, 0, NULL); - ok(parent != 0, "CreateWindowA failed. Error: %u\n", GetLastError()); - - /* Start child process. */ - memset(&startup, 0, sizeof(startup)); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - sprintf(path_name, "%s cursoricon %x", test_argv[0], (unsigned int) parent); - ok(CreateProcessA(NULL, path_name, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess failed.\n"); - child_process = info.hProcess; - - /* Wait for child window handle. */ - while ((child == 0) && (ret = GetMessage(&msg, parent, 0, 0))) - { - ok(ret != -1, "GetMessage failed. Error: %u\n", GetLastError()); - TranslateMessage(&msg); - DispatchMessage(&msg); - } -} - -static void finish_child_process(void) -{ - SendMessage(child, WM_CLOSE, 0, 0); - winetest_wait_child_process( child_process ); - CloseHandle(child_process); -} - -static void test_child_process(void) -{ - static const BYTE bmp_bits[4096]; - HCURSOR cursor; - ICONINFO cursorInfo; - UINT display_bpp; - HDC hdc; - - /* Create and set a dummy cursor. */ - hdc = GetDC(0); - display_bpp = GetDeviceCaps(hdc, BITSPIXEL); - ReleaseDC(0, hdc); - - cursorInfo.fIcon = FALSE; - cursorInfo.xHotspot = 0; - cursorInfo.yHotspot = 0; - cursorInfo.hbmMask = CreateBitmap(32, 32, 1, 1, bmp_bits); - cursorInfo.hbmColor = CreateBitmap(32, 32, 1, display_bpp, bmp_bits); - - cursor = CreateIconIndirect(&cursorInfo); - ok(cursor != NULL, "CreateIconIndirect returned %p.\n", cursor); - - SetCursor(cursor); - - /* Destroy the cursor. */ - SendMessage(child, WM_USER+1, 0, (LPARAM) cursor); -} - -static void test_CopyImage_Check(HBITMAP bitmap, UINT flags, INT copyWidth, INT copyHeight, - INT expectedWidth, INT expectedHeight, WORD expectedDepth, BOOL dibExpected) -{ - HBITMAP copy; - BITMAP origBitmap; - BITMAP copyBitmap; - BOOL orig_is_dib; - BOOL copy_is_dib; - - copy = (HBITMAP) CopyImage(bitmap, IMAGE_BITMAP, copyWidth, copyHeight, flags); - ok(copy != NULL, "CopyImage() failed\n"); - if (copy != NULL) - { - GetObject(bitmap, sizeof(origBitmap), &origBitmap); - GetObject(copy, sizeof(copyBitmap), ©Bitmap); - orig_is_dib = (origBitmap.bmBits != NULL); - copy_is_dib = (copyBitmap.bmBits != NULL); - - if (copy_is_dib && dibExpected - && copyBitmap.bmBitsPixel == 24 - && (expectedDepth == 16 || expectedDepth == 32)) - { - /* Windows 95 doesn't create DIBs with a depth of 16 or 32 bit */ - if (GetVersion() & 0x80000000) - { - expectedDepth = 24; - } - } - - if (copy_is_dib && !dibExpected && !(flags & LR_CREATEDIBSECTION)) - { - /* It's not forbidden to create a DIB section if the flag - LR_CREATEDIBSECTION is absent. - Windows 9x does this if the bitmap has a depth that doesn't - match the screen depth, Windows NT doesn't */ - dibExpected = TRUE; - expectedDepth = origBitmap.bmBitsPixel; - } - - ok((!(dibExpected ^ copy_is_dib) - && (copyBitmap.bmWidth == expectedWidth) - && (copyBitmap.bmHeight == expectedHeight) - && (copyBitmap.bmBitsPixel == expectedDepth)), - "CopyImage ((%s, %dx%d, %u bpp), %d, %d, %#x): Expected (%s, %dx%d, %u bpp), got (%s, %dx%d, %u bpp)\n", - orig_is_dib ? "DIB" : "DDB", origBitmap.bmWidth, origBitmap.bmHeight, origBitmap.bmBitsPixel, - copyWidth, copyHeight, flags, - dibExpected ? "DIB" : "DDB", expectedWidth, expectedHeight, expectedDepth, - copy_is_dib ? "DIB" : "DDB", copyBitmap.bmWidth, copyBitmap.bmHeight, copyBitmap.bmBitsPixel); - - DeleteObject(copy); - } -} - -static void test_CopyImage_Bitmap(int depth) -{ - HBITMAP ddb, dib; - HDC screenDC; - BITMAPINFO * info; - VOID * bits; - int screen_depth; - unsigned int i; - - /* Create a device-independent bitmap (DIB) */ - info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); - info->bmiHeader.biSize = sizeof(info->bmiHeader); - info->bmiHeader.biWidth = 2; - info->bmiHeader.biHeight = 2; - info->bmiHeader.biPlanes = 1; - info->bmiHeader.biBitCount = depth; - info->bmiHeader.biCompression = BI_RGB; - - for (i=0; i < 256; i++) - { - info->bmiColors[i].rgbRed = i; - info->bmiColors[i].rgbGreen = i; - info->bmiColors[i].rgbBlue = 255 - i; - info->bmiColors[i].rgbReserved = 0; - } - - dib = CreateDIBSection(NULL, info, DIB_RGB_COLORS, &bits, NULL, 0); - - /* Create a device-dependent bitmap (DDB) */ - screenDC = GetDC(NULL); - screen_depth = GetDeviceCaps(screenDC, BITSPIXEL); - if (depth == 1 || depth == screen_depth) - { - ddb = CreateBitmap(2, 2, 1, depth, NULL); - } - else - { - ddb = NULL; - } - ReleaseDC(NULL, screenDC); - - if (ddb != NULL) - { - test_CopyImage_Check(ddb, 0, 0, 0, 2, 2, depth == 1 ? 1 : screen_depth, FALSE); - test_CopyImage_Check(ddb, 0, 0, 5, 2, 5, depth == 1 ? 1 : screen_depth, FALSE); - test_CopyImage_Check(ddb, 0, 5, 0, 5, 2, depth == 1 ? 1 : screen_depth, FALSE); - test_CopyImage_Check(ddb, 0, 5, 5, 5, 5, depth == 1 ? 1 : screen_depth, FALSE); - - test_CopyImage_Check(ddb, LR_MONOCHROME, 0, 0, 2, 2, 1, FALSE); - test_CopyImage_Check(ddb, LR_MONOCHROME, 5, 0, 5, 2, 1, FALSE); - test_CopyImage_Check(ddb, LR_MONOCHROME, 0, 5, 2, 5, 1, FALSE); - test_CopyImage_Check(ddb, LR_MONOCHROME, 5, 5, 5, 5, 1, FALSE); - - test_CopyImage_Check(ddb, LR_CREATEDIBSECTION, 0, 0, 2, 2, depth, TRUE); - test_CopyImage_Check(ddb, LR_CREATEDIBSECTION, 5, 0, 5, 2, depth, TRUE); - test_CopyImage_Check(ddb, LR_CREATEDIBSECTION, 0, 5, 2, 5, depth, TRUE); - test_CopyImage_Check(ddb, LR_CREATEDIBSECTION, 5, 5, 5, 5, depth, TRUE); - - /* LR_MONOCHROME is ignored if LR_CREATEDIBSECTION is present */ - test_CopyImage_Check(ddb, LR_MONOCHROME | LR_CREATEDIBSECTION, 0, 0, 2, 2, depth, TRUE); - test_CopyImage_Check(ddb, LR_MONOCHROME | LR_CREATEDIBSECTION, 5, 0, 5, 2, depth, TRUE); - test_CopyImage_Check(ddb, LR_MONOCHROME | LR_CREATEDIBSECTION, 0, 5, 2, 5, depth, TRUE); - test_CopyImage_Check(ddb, LR_MONOCHROME | LR_CREATEDIBSECTION, 5, 5, 5, 5, depth, TRUE); - - DeleteObject(ddb); - } - - if (depth != 1) - { - test_CopyImage_Check(dib, 0, 0, 0, 2, 2, screen_depth, FALSE); - test_CopyImage_Check(dib, 0, 5, 0, 5, 2, screen_depth, FALSE); - test_CopyImage_Check(dib, 0, 0, 5, 2, 5, screen_depth, FALSE); - test_CopyImage_Check(dib, 0, 5, 5, 5, 5, screen_depth, FALSE); - } - - test_CopyImage_Check(dib, LR_MONOCHROME, 0, 0, 2, 2, 1, FALSE); - test_CopyImage_Check(dib, LR_MONOCHROME, 5, 0, 5, 2, 1, FALSE); - test_CopyImage_Check(dib, LR_MONOCHROME, 0, 5, 2, 5, 1, FALSE); - test_CopyImage_Check(dib, LR_MONOCHROME, 5, 5, 5, 5, 1, FALSE); - - test_CopyImage_Check(dib, LR_CREATEDIBSECTION, 0, 0, 2, 2, depth, TRUE); - test_CopyImage_Check(dib, LR_CREATEDIBSECTION, 5, 0, 5, 2, depth, TRUE); - test_CopyImage_Check(dib, LR_CREATEDIBSECTION, 0, 5, 2, 5, depth, TRUE); - test_CopyImage_Check(dib, LR_CREATEDIBSECTION, 5, 5, 5, 5, depth, TRUE); - - /* LR_MONOCHROME is ignored if LR_CREATEDIBSECTION is present */ - test_CopyImage_Check(dib, LR_MONOCHROME | LR_CREATEDIBSECTION, 0, 0, 2, 2, depth, TRUE); - test_CopyImage_Check(dib, LR_MONOCHROME | LR_CREATEDIBSECTION, 5, 0, 5, 2, depth, TRUE); - test_CopyImage_Check(dib, LR_MONOCHROME | LR_CREATEDIBSECTION, 0, 5, 2, 5, depth, TRUE); - test_CopyImage_Check(dib, LR_MONOCHROME | LR_CREATEDIBSECTION, 5, 5, 5, 5, depth, TRUE); - - DeleteObject(dib); - - if (depth == 1) - { - /* Special case: A monochrome DIB is converted to a monochrome DDB if - the colors in the color table are black and white. - - Skip this test on Windows 95, it always creates a monochrome DDB - in this case */ - - if (!(GetVersion() & 0x80000000)) - { - info->bmiHeader.biBitCount = 1; - info->bmiColors[0].rgbRed = 0xFF; - info->bmiColors[0].rgbGreen = 0; - info->bmiColors[0].rgbBlue = 0; - info->bmiColors[1].rgbRed = 0; - info->bmiColors[1].rgbGreen = 0xFF; - info->bmiColors[1].rgbBlue = 0; - - dib = CreateDIBSection(NULL, info, DIB_RGB_COLORS, &bits, NULL, 0); - test_CopyImage_Check(dib, 0, 0, 0, 2, 2, screen_depth, FALSE); - test_CopyImage_Check(dib, 0, 5, 0, 5, 2, screen_depth, FALSE); - test_CopyImage_Check(dib, 0, 0, 5, 2, 5, screen_depth, FALSE); - test_CopyImage_Check(dib, 0, 5, 5, 5, 5, screen_depth, FALSE); - DeleteObject(dib); - - info->bmiHeader.biBitCount = 1; - info->bmiColors[0].rgbRed = 0; - info->bmiColors[0].rgbGreen = 0; - info->bmiColors[0].rgbBlue = 0; - info->bmiColors[1].rgbRed = 0xFF; - info->bmiColors[1].rgbGreen = 0xFF; - info->bmiColors[1].rgbBlue = 0xFF; - - dib = CreateDIBSection(NULL, info, DIB_RGB_COLORS, &bits, NULL, 0); - test_CopyImage_Check(dib, 0, 0, 0, 2, 2, 1, FALSE); - test_CopyImage_Check(dib, 0, 5, 0, 5, 2, 1, FALSE); - test_CopyImage_Check(dib, 0, 0, 5, 2, 5, 1, FALSE); - test_CopyImage_Check(dib, 0, 5, 5, 5, 5, 1, FALSE); - DeleteObject(dib); - - info->bmiHeader.biBitCount = 1; - info->bmiColors[0].rgbRed = 0xFF; - info->bmiColors[0].rgbGreen = 0xFF; - info->bmiColors[0].rgbBlue = 0xFF; - info->bmiColors[1].rgbRed = 0; - info->bmiColors[1].rgbGreen = 0; - info->bmiColors[1].rgbBlue = 0; - - dib = CreateDIBSection(NULL, info, DIB_RGB_COLORS, &bits, NULL, 0); - test_CopyImage_Check(dib, 0, 0, 0, 2, 2, 1, FALSE); - test_CopyImage_Check(dib, 0, 5, 0, 5, 2, 1, FALSE); - test_CopyImage_Check(dib, 0, 0, 5, 2, 5, 1, FALSE); - test_CopyImage_Check(dib, 0, 5, 5, 5, 5, 1, FALSE); - DeleteObject(dib); - } - } - - HeapFree(GetProcessHeap(), 0, info); -} - -static void test_initial_cursor(void) -{ - HCURSOR cursor, cursor2; - DWORD error; - - cursor = GetCursor(); - - /* Check what handle GetCursor() returns if a cursor is not set yet. */ - SetLastError(0xdeadbeef); - cursor2 = LoadCursor(NULL, IDC_WAIT); - todo_wine { - ok(cursor == cursor2, "cursor (%p) is not IDC_WAIT (%p).\n", cursor, cursor2); - } - error = GetLastError(); - ok(error == 0xdeadbeef, "Last error: 0x%08x\n", error); -} - -static void test_icon_info_dbg(HICON hIcon, UINT exp_cx, UINT exp_cy, UINT exp_bpp, int line) -{ - ICONINFO info; - DWORD ret; - BITMAP bmMask, bmColor; - - ret = GetIconInfo(hIcon, &info); - ok_(__FILE__, line)(ret, "GetIconInfo failed\n"); - - /* CreateIcon under XP causes info.fIcon to be 0 */ - ok_(__FILE__, line)(info.xHotspot == exp_cx/2, "info.xHotspot = %u\n", info.xHotspot); - ok_(__FILE__, line)(info.yHotspot == exp_cy/2, "info.yHotspot = %u\n", info.yHotspot); - ok_(__FILE__, line)(info.hbmMask != 0, "info.hbmMask is NULL\n"); - - ret = GetObject(info.hbmMask, sizeof(bmMask), &bmMask); - ok_(__FILE__, line)(ret == sizeof(bmMask), "GetObject(info.hbmMask) failed, ret %u\n", ret); - - if (exp_bpp == 1) - ok_(__FILE__, line)(info.hbmColor == 0, "info.hbmColor should be NULL\n"); - - if (info.hbmColor) - { - HDC hdc; - UINT display_bpp; - - hdc = GetDC(0); - display_bpp = GetDeviceCaps(hdc, BITSPIXEL); - ReleaseDC(0, hdc); - - ret = GetObject(info.hbmColor, sizeof(bmColor), &bmColor); - ok_(__FILE__, line)(ret == sizeof(bmColor), "GetObject(info.hbmColor) failed, ret %u\n", ret); - - ok_(__FILE__, line)(bmColor.bmBitsPixel == display_bpp /* XP */ || - bmColor.bmBitsPixel == exp_bpp /* Win98 */, - "bmColor.bmBitsPixel = %d\n", bmColor.bmBitsPixel); - ok_(__FILE__, line)(bmColor.bmWidth == exp_cx, "bmColor.bmWidth = %d\n", bmColor.bmWidth); - ok_(__FILE__, line)(bmColor.bmHeight == exp_cy, "bmColor.bmHeight = %d\n", bmColor.bmHeight); - - ok_(__FILE__, line)(bmMask.bmBitsPixel == 1, "bmMask.bmBitsPixel = %d\n", bmMask.bmBitsPixel); - ok_(__FILE__, line)(bmMask.bmWidth == exp_cx, "bmMask.bmWidth = %d\n", bmMask.bmWidth); - ok_(__FILE__, line)(bmMask.bmHeight == exp_cy, "bmMask.bmHeight = %d\n", bmMask.bmHeight); - } - else - { - ok_(__FILE__, line)(bmMask.bmBitsPixel == 1, "bmMask.bmBitsPixel = %d\n", bmMask.bmBitsPixel); - ok_(__FILE__, line)(bmMask.bmWidth == exp_cx, "bmMask.bmWidth = %d\n", bmMask.bmWidth); - ok_(__FILE__, line)(bmMask.bmHeight == exp_cy * 2, "bmMask.bmHeight = %d\n", bmMask.bmHeight); - } -} - -#define test_icon_info(a,b,c,d) test_icon_info_dbg((a),(b),(c),(d),__LINE__) - -static void test_CreateIcon(void) -{ - static const BYTE bmp_bits[1024]; - HICON hIcon; - HBITMAP hbmMask, hbmColor; - ICONINFO info; - HDC hdc; - UINT display_bpp; - - hdc = GetDC(0); - display_bpp = GetDeviceCaps(hdc, BITSPIXEL); - ReleaseDC(0, hdc); - - /* these crash under XP - hIcon = CreateIcon(0, 16, 16, 1, 1, bmp_bits, NULL); - hIcon = CreateIcon(0, 16, 16, 1, 1, NULL, bmp_bits); - */ - - hIcon = CreateIcon(0, 16, 16, 1, 1, bmp_bits, bmp_bits); - ok(hIcon != 0, "CreateIcon failed\n"); - test_icon_info(hIcon, 16, 16, 1); - DestroyIcon(hIcon); - - hIcon = CreateIcon(0, 16, 16, 1, display_bpp, bmp_bits, bmp_bits); - ok(hIcon != 0, "CreateIcon failed\n"); - test_icon_info(hIcon, 16, 16, display_bpp); - DestroyIcon(hIcon); - - hbmMask = CreateBitmap(16, 16, 1, 1, bmp_bits); - ok(hbmMask != 0, "CreateBitmap failed\n"); - hbmColor = CreateBitmap(16, 16, 1, display_bpp, bmp_bits); - ok(hbmColor != 0, "CreateBitmap failed\n"); - - info.fIcon = TRUE; - info.xHotspot = 8; - info.yHotspot = 8; - info.hbmMask = 0; - info.hbmColor = 0; - SetLastError(0xdeadbeaf); - hIcon = CreateIconIndirect(&info); - ok(!hIcon, "CreateIconIndirect should fail\n"); - ok(GetLastError() == 0xdeadbeaf, "wrong error %u\n", GetLastError()); - - info.fIcon = TRUE; - info.xHotspot = 8; - info.yHotspot = 8; - info.hbmMask = 0; - info.hbmColor = hbmColor; - SetLastError(0xdeadbeaf); - hIcon = CreateIconIndirect(&info); - ok(!hIcon, "CreateIconIndirect should fail\n"); - ok(GetLastError() == 0xdeadbeaf, "wrong error %u\n", GetLastError()); - - info.fIcon = TRUE; - info.xHotspot = 8; - info.yHotspot = 8; - info.hbmMask = hbmMask; - info.hbmColor = hbmColor; - hIcon = CreateIconIndirect(&info); - ok(hIcon != 0, "CreateIconIndirect failed\n"); - test_icon_info(hIcon, 16, 16, display_bpp); - DestroyIcon(hIcon); - - DeleteObject(hbmMask); - DeleteObject(hbmColor); - - hbmMask = CreateBitmap(16, 32, 1, 1, bmp_bits); - ok(hbmMask != 0, "CreateBitmap failed\n"); - - info.fIcon = TRUE; - info.xHotspot = 8; - info.yHotspot = 8; - info.hbmMask = hbmMask; - info.hbmColor = 0; - SetLastError(0xdeadbeaf); - hIcon = CreateIconIndirect(&info); - ok(hIcon != 0, "CreateIconIndirect failed\n"); - test_icon_info(hIcon, 16, 16, 1); - DestroyIcon(hIcon); - - DeleteObject(hbmMask); - DeleteObject(hbmColor); -} - -/* Shamelessly ripped from dlls/oleaut32/tests/olepicture.c */ -/* 1x1 pixel gif */ -static const unsigned char gifimage[35] = { -0x47,0x49,0x46,0x38,0x37,0x61,0x01,0x00,0x01,0x00,0x80,0x00,0x00,0xff,0xff,0xff, -0xff,0xff,0xff,0x2c,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x02,0x02,0x44, -0x01,0x00,0x3b -}; - -/* 1x1 pixel jpg */ -static const unsigned char jpgimage[285] = { -0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01,0x01,0x01,0x01,0x2c, -0x01,0x2c,0x00,0x00,0xff,0xdb,0x00,0x43,0x00,0x05,0x03,0x04,0x04,0x04,0x03,0x05, -0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x07,0x0c,0x08,0x07,0x07,0x07,0x07,0x0f,0x0b, -0x0b,0x09,0x0c,0x11,0x0f,0x12,0x12,0x11,0x0f,0x11,0x11,0x13,0x16,0x1c,0x17,0x13, -0x14,0x1a,0x15,0x11,0x11,0x18,0x21,0x18,0x1a,0x1d,0x1d,0x1f,0x1f,0x1f,0x13,0x17, -0x22,0x24,0x22,0x1e,0x24,0x1c,0x1e,0x1f,0x1e,0xff,0xdb,0x00,0x43,0x01,0x05,0x05, -0x05,0x07,0x06,0x07,0x0e,0x08,0x08,0x0e,0x1e,0x14,0x11,0x14,0x1e,0x1e,0x1e,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0xff,0xc0, -0x00,0x11,0x08,0x00,0x01,0x00,0x01,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11, -0x01,0xff,0xc4,0x00,0x15,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xff,0xc4,0x00,0x14,0x10,0x01,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xc4, -0x00,0x14,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xff,0xc4,0x00,0x14,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xda,0x00,0x0c,0x03,0x01, -0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xb2,0xc0,0x07,0xff,0xd9 -}; - -/* 1x1 pixel png */ -static const unsigned char pngimage[285] = { -0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52, -0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x08,0x02,0x00,0x00,0x00,0x90,0x77,0x53, -0xde,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b, -0x13,0x01,0x00,0x9a,0x9c,0x18,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd5, -0x06,0x03,0x0f,0x07,0x2d,0x12,0x10,0xf0,0xfd,0x00,0x00,0x00,0x0c,0x49,0x44,0x41, -0x54,0x08,0xd7,0x63,0xf8,0xff,0xff,0x3f,0x00,0x05,0xfe,0x02,0xfe,0xdc,0xcc,0x59, -0xe7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; - -/* 1x1 pixel bmp */ -static const unsigned char bmpimage[66] = { -0x42,0x4d,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x28,0x00, -0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x04,0x00,0x00,0x00,0x12,0x0b,0x00,0x00,0x12,0x0b,0x00,0x00,0x02,0x00, -0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0x00,0x00, -0x00,0x00 -}; - -/* 2x2 pixel gif */ -static const unsigned char gif4pixel[42] = { -0x47,0x49,0x46,0x38,0x37,0x61,0x02,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,0x00,0x00, -0x39,0x62,0xfc,0xff,0x1a,0xe5,0xff,0xff,0xff,0x2c,0x00,0x00,0x00,0x00,0x02,0x00, -0x02,0x00,0x00,0x02,0x03,0x14,0x16,0x05,0x00,0x3b -}; - -static void test_LoadImageFile(const unsigned char * image_data, - unsigned int image_size, const char * ext, BOOL expect_success) -{ - HANDLE handle; - BOOL ret; - DWORD error, bytes_written; - char filename[64]; - - strcpy(filename, "test."); - strcat(filename, ext); - - /* Create the test image. */ - handle = CreateFileA(filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, NULL); - ok(handle != INVALID_HANDLE_VALUE, "CreateFileA failed. %u\n", GetLastError()); - ret = WriteFile(handle, image_data, image_size, &bytes_written, NULL); - ok(bytes_written == image_size, "test file created improperly.\n"); - CloseHandle(handle); - - /* Load as cursor. For all tested formats, this should fail */ - SetLastError(0xdeadbeef); - handle = LoadImageA(NULL, filename, IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE); - ok(handle == NULL, "LoadImage(%s) as IMAGE_CURSOR succeeded incorrectly.\n", ext); - error = GetLastError(); - ok(error == 0, "Last error: %u\n", error); - if (handle != NULL) DestroyCursor(handle); - - /* Load as icon. For all tested formats, this should fail */ - SetLastError(0xdeadbeef); - handle = LoadImageA(NULL, filename, IMAGE_ICON, 0, 0, LR_LOADFROMFILE); - ok(handle == NULL, "LoadImage(%s) as IMAGE_ICON succeeded incorrectly.\n", ext); - error = GetLastError(); - ok(error == 0, "Last error: %u\n", error); - if (handle != NULL) DestroyIcon(handle); - - /* Load as bitmap. Should succeed if bmp, fail for everything else */ - SetLastError(0xdeadbeef); - handle = LoadImageA(NULL, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); - if (expect_success) - ok(handle != NULL, "LoadImage(%s) as IMAGE_BITMAP failed.\n", ext); - else ok(handle == NULL, "LoadImage(%s) as IMAGE_BITMAP succeeded incorrectly.\n", ext); - error = GetLastError(); - ok(error == 0, "Last error: %u\n", error); - if (handle != NULL) DeleteObject(handle); - - DeleteFileA(filename); -} - -static void test_LoadImage(void) -{ - HANDLE handle; - BOOL ret; - DWORD error, bytes_written; - CURSORICONFILEDIR *icon_data; - CURSORICONFILEDIRENTRY *icon_entry; - BITMAPINFOHEADER *icon_header; - ICONINFO icon_info; - -#define ICON_WIDTH 32 -#define ICON_HEIGHT 32 -#define ICON_AND_SIZE (ICON_WIDTH*ICON_HEIGHT/8) -#define ICON_BPP 32 -#define ICON_SIZE \ - (sizeof(CURSORICONFILEDIR) + sizeof(BITMAPINFOHEADER) \ - + ICON_AND_SIZE + ICON_AND_SIZE*ICON_BPP) - - /* Set icon data. */ - icon_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ICON_SIZE); - icon_data->idReserved = 0; - icon_data->idType = 1; - icon_data->idCount = 1; - - icon_entry = icon_data->idEntries; - icon_entry->bWidth = ICON_WIDTH; - icon_entry->bHeight = ICON_HEIGHT; - icon_entry->bColorCount = 0; - icon_entry->bReserved = 0; - icon_entry->xHotspot = 1; - icon_entry->yHotspot = 1; - icon_entry->dwDIBSize = ICON_SIZE - sizeof(CURSORICONFILEDIR); - icon_entry->dwDIBOffset = sizeof(CURSORICONFILEDIR); - - icon_header = (BITMAPINFOHEADER *) ((BYTE *) icon_data + icon_entry->dwDIBOffset); - icon_header->biSize = sizeof(BITMAPINFOHEADER); - icon_header->biWidth = ICON_WIDTH; - icon_header->biHeight = ICON_HEIGHT*2; - icon_header->biPlanes = 1; - icon_header->biBitCount = ICON_BPP; - icon_header->biSizeImage = 0; /* Uncompressed bitmap. */ - - /* Create the icon. */ - handle = CreateFileA("icon.ico", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, NULL); - ok(handle != INVALID_HANDLE_VALUE, "CreateFileA failed. %u\n", GetLastError()); - ret = WriteFile(handle, icon_data, ICON_SIZE, &bytes_written, NULL); - ok(bytes_written == ICON_SIZE, "icon.ico created improperly.\n"); - CloseHandle(handle); - - /* Test loading an icon as a cursor. */ - SetLastError(0xdeadbeef); - handle = LoadImageA(NULL, "icon.ico", IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE); - todo_wine - ok(handle != NULL, "LoadImage() failed.\n"); - error = GetLastError(); - ok(error == 0, "Last error: %u\n", error); - - /* Test the icon information. */ - SetLastError(0xdeadbeef); - ret = GetIconInfo(handle, &icon_info); - todo_wine - ok(ret, "GetIconInfo() failed.\n"); - error = GetLastError(); - ok(error == 0xdeadbeef, "Last error: %u\n", error); - - if (ret) - { - ok(icon_info.fIcon == FALSE, "fIcon != FALSE.\n"); - ok(icon_info.xHotspot == 1, "xHotspot is %u.\n", icon_info.xHotspot); - ok(icon_info.yHotspot == 1, "yHotspot is %u.\n", icon_info.yHotspot); - ok(icon_info.hbmColor != NULL, "No hbmColor!\n"); - ok(icon_info.hbmMask != NULL, "No hbmMask!\n"); - } - - /* Clean up. */ - SetLastError(0xdeadbeef); - ret = DestroyCursor(handle); - todo_wine - ok(ret, "DestroyCursor() failed.\n"); - error = GetLastError(); - ok(error == 0xdeadbeef, "Last error: %u\n", error); - - HeapFree(GetProcessHeap(), 0, icon_data); - DeleteFileA("icon.ico"); - - test_LoadImageFile(bmpimage, sizeof(bmpimage), "bmp", 1); - test_LoadImageFile(gifimage, sizeof(gifimage), "gif", 0); - test_LoadImageFile(gif4pixel, sizeof(gif4pixel), "gif", 0); - test_LoadImageFile(jpgimage, sizeof(jpgimage), "jpg", 0); - test_LoadImageFile(pngimage, sizeof(pngimage), "png", 0); -} - -static void test_DestroyCursor(void) -{ - static const BYTE bmp_bits[4096]; - ICONINFO cursorInfo; - HCURSOR cursor, cursor2; - BOOL ret; - DWORD error; - UINT display_bpp; - HDC hdc; - - hdc = GetDC(0); - display_bpp = GetDeviceCaps(hdc, BITSPIXEL); - ReleaseDC(0, hdc); - - cursorInfo.fIcon = FALSE; - cursorInfo.xHotspot = 0; - cursorInfo.yHotspot = 0; - cursorInfo.hbmMask = CreateBitmap(32, 32, 1, 1, bmp_bits); - cursorInfo.hbmColor = CreateBitmap(32, 32, 1, display_bpp, bmp_bits); - - cursor = CreateIconIndirect(&cursorInfo); - ok(cursor != NULL, "CreateIconIndirect returned %p\n", cursor); - if(!cursor) { - return; - } - SetCursor(cursor); - - SetLastError(0xdeadbeef); - ret = DestroyCursor(cursor); - ok(!ret, "DestroyCursor on the active cursor succeeded\n"); - error = GetLastError(); - ok(error == 0xdeadbeef, "Last error: %u\n", error); - - cursor2 = GetCursor(); - ok(cursor2 == cursor, "Active was set to %p when trying to destroy it\n", cursor2); - - SetCursor(NULL); - - /* Trying to destroy the cursor properly fails now with - * ERROR_INVALID_CURSOR_HANDLE. This happens because we called - * DestroyCursor() 2+ times after calling SetCursor(). The calls to - * GetCursor() and SetCursor(NULL) in between make no difference. */ - ret = DestroyCursor(cursor); - todo_wine { - ok(!ret, "DestroyCursor succeeded.\n"); - error = GetLastError(); - ok(error == ERROR_INVALID_CURSOR_HANDLE, "Last error: 0x%08x\n", error); - } - - DeleteObject(cursorInfo.hbmMask); - DeleteObject(cursorInfo.hbmColor); - - /* Try testing DestroyCursor() now using LoadCursor() cursors. */ - cursor = LoadCursor(NULL, IDC_ARROW); - - SetLastError(0xdeadbeef); - ret = DestroyCursor(cursor); - ok(ret, "DestroyCursor on the active cursor failed.\n"); - error = GetLastError(); - ok(error == 0xdeadbeef, "Last error: 0x%08x\n", error); - - /* Try setting the cursor to a destroyed OEM cursor. */ - SetLastError(0xdeadbeef); - SetCursor(cursor); - error = GetLastError(); - todo_wine { - ok(error == 0xdeadbeef, "Last error: 0x%08x\n", error); - } - - /* Check if LoadCursor() returns the same handle with the same icon. */ - cursor2 = LoadCursor(NULL, IDC_ARROW); - ok(cursor2 == cursor, "cursor == %p, cursor2 == %p\n", cursor, cursor2); - - /* Check if LoadCursor() returns the same handle with a different icon. */ - cursor2 = LoadCursor(NULL, IDC_WAIT); - ok(cursor2 != cursor, "cursor == %p, cursor2 == %p\n", cursor, cursor2); -} - -START_TEST(cursoricon) -{ - test_argc = winetest_get_mainargs(&test_argv); - - if (test_argc >= 3) - { - /* Child process. */ - sscanf (test_argv[2], "%x", (unsigned int *) &parent); - - ok(parent != NULL, "Parent not found.\n"); - if (parent == NULL) - ExitProcess(1); - - do_child(); - return; - } - - test_CopyImage_Bitmap(1); - test_CopyImage_Bitmap(4); - test_CopyImage_Bitmap(8); - test_CopyImage_Bitmap(16); - test_CopyImage_Bitmap(24); - test_CopyImage_Bitmap(32); - test_initial_cursor(); - test_CreateIcon(); - test_LoadImage(); - test_DestroyCursor(); - do_parent(); - test_child_process(); - finish_child_process(); -} diff --git a/rostests/winetests/user32/dce.c b/rostests/winetests/user32/dce.c deleted file mode 100755 index fead3850a9c..00000000000 --- a/rostests/winetests/user32/dce.c +++ /dev/null @@ -1,434 +0,0 @@ -/* - * Unit tests for DCE 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 -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" - -#include "wine/test.h" - -#ifndef DCX_USESTYLE -#define DCX_USESTYLE 0x00010000 -#endif - -static HWND hwnd_cache, hwnd_owndc, hwnd_classdc, hwnd_classdc2; - -/* test behavior of DC attributes with various GetDC/ReleaseDC combinations */ -static void test_dc_attributes(void) -{ - HDC hdc, old_hdc; - INT rop, def_rop; - - /* test cache DC */ - - hdc = GetDC( hwnd_cache ); - def_rop = GetROP2( hdc ); - - SetROP2( hdc, R2_WHITE ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d\n", rop ); - - ReleaseDC( hwnd_cache, hdc ); - hdc = GetDC( hwnd_cache ); - rop = GetROP2( hdc ); - ok( rop == def_rop, "wrong ROP2 %d after release\n", rop ); - SetROP2( hdc, R2_WHITE ); - ReleaseDC( hwnd_cache, hdc ); - - hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS ); - rop = GetROP2( hdc ); - /* Win9x seems to silently ignore DCX_NORESETATTRS */ - ok( rop == def_rop || rop == R2_WHITE, "wrong ROP2 %d\n", rop ); - - SetROP2( hdc, R2_WHITE ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d\n", rop ); - - ReleaseDC( hwnd_cache, hdc ); - hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS ); - rop = GetROP2( hdc ); - ok( rop == def_rop || rop == R2_WHITE, "wrong ROP2 %d after release\n", rop ); - ReleaseDC( hwnd_cache, hdc ); - - hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE ); - rop = GetROP2( hdc ); - ok( rop == def_rop, "wrong ROP2 %d after release\n", rop ); - ReleaseDC( hwnd_cache, hdc ); - - /* test own DC */ - - hdc = GetDC( hwnd_owndc ); - SetROP2( hdc, R2_WHITE ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d\n", rop ); - - old_hdc = hdc; - ReleaseDC( hwnd_owndc, hdc ); - hdc = GetDC( hwnd_owndc ); - ok( old_hdc == hdc, "didn't get same DC %p/%p\n", old_hdc, hdc ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d after release\n", rop ); - ReleaseDC( hwnd_owndc, hdc ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d after second release\n", rop ); - - /* test class DC */ - - hdc = GetDC( hwnd_classdc ); - SetROP2( hdc, R2_WHITE ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d\n", rop ); - - old_hdc = hdc; - ReleaseDC( hwnd_classdc, hdc ); - hdc = GetDC( hwnd_classdc ); - ok( old_hdc == hdc, "didn't get same DC %p/%p\n", old_hdc, hdc ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d after release\n", rop ); - ReleaseDC( hwnd_classdc, hdc ); - rop = GetROP2( hdc ); - ok( rop == R2_WHITE, "wrong ROP2 %d after second release\n", rop ); - - /* test class DC with 2 windows */ - - old_hdc = GetDC( hwnd_classdc ); - SetROP2( old_hdc, R2_BLACK ); - hdc = GetDC( hwnd_classdc2 ); - ok( old_hdc == hdc, "didn't get same DC %p/%p\n", old_hdc, hdc ); - rop = GetROP2( hdc ); - ok( rop == R2_BLACK, "wrong ROP2 %d for other window\n", rop ); - ReleaseDC( hwnd_classdc, old_hdc ); - ReleaseDC( hwnd_classdc, hdc ); - rop = GetROP2( hdc ); - ok( rop == R2_BLACK, "wrong ROP2 %d after release\n", rop ); -} - - -/* test behavior with various invalid parameters */ -static void test_parameters(void) -{ - HDC hdc; - - hdc = GetDC( hwnd_cache ); - ok( ReleaseDC( hwnd_owndc, hdc ), "ReleaseDC with wrong window should succeed\n" ); - - hdc = GetDC( hwnd_cache ); - ok( !ReleaseDC( hwnd_cache, 0 ), "ReleaseDC with wrong HDC should fail\n" ); - ok( ReleaseDC( hwnd_cache, hdc ), "correct ReleaseDC should succeed\n" ); - ok( !ReleaseDC( hwnd_cache, hdc ), "second ReleaseDC should fail\n" ); - - hdc = GetDC( hwnd_owndc ); - ok( ReleaseDC( hwnd_cache, hdc ), "ReleaseDC with wrong window should succeed\n" ); - hdc = GetDC( hwnd_owndc ); - ok( ReleaseDC( hwnd_owndc, hdc ), "correct ReleaseDC should succeed\n" ); - ok( ReleaseDC( hwnd_owndc, hdc ), "second ReleaseDC should succeed\n" ); - - hdc = GetDC( hwnd_classdc ); - ok( ReleaseDC( hwnd_cache, hdc ), "ReleaseDC with wrong window should succeed\n" ); - hdc = GetDC( hwnd_classdc ); - ok( ReleaseDC( hwnd_classdc, hdc ), "correct ReleaseDC should succeed\n" ); - ok( ReleaseDC( hwnd_classdc, hdc ), "second ReleaseDC should succeed\n" ); -} - - -static void test_dc_visrgn(void) -{ - HDC old_hdc, hdc; - HRGN hrgn, hrgn2; - RECT rect; - - /* cache DC */ - - SetRect( &rect, 10, 10, 20, 20 ); - MapWindowPoints( hwnd_cache, 0, (POINT *)&rect, 2 ); - hrgn = CreateRectRgnIndirect( &rect ); - hdc = GetDCEx( hwnd_cache, hrgn, DCX_INTERSECTRGN | DCX_USESTYLE ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - ReleaseDC( hwnd_cache, hdc ); - ok( GetRgnBox( hrgn, &rect ) == ERROR, "region must no longer be valid\n" ); - - /* cache DC with NORESETATTRS */ - - SetRect( &rect, 10, 10, 20, 20 ); - MapWindowPoints( hwnd_cache, 0, (POINT *)&rect, 2 ); - hrgn = CreateRectRgnIndirect( &rect ); - hdc = GetDCEx( hwnd_cache, hrgn, DCX_INTERSECTRGN | DCX_USESTYLE | DCX_NORESETATTRS ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - ReleaseDC( hwnd_cache, hdc ); - ok( GetRgnBox( hrgn, &rect ) == ERROR, "region must no longer be valid\n" ); - hdc = GetDCEx( hwnd_cache, 0, DCX_USESTYLE | DCX_NORESETATTRS ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( !(rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20), - "clip box sould have been reset %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ReleaseDC( hwnd_cache, hdc ); - - /* window DC */ - - SetRect( &rect, 10, 10, 20, 20 ); - MapWindowPoints( hwnd_owndc, 0, (POINT *)&rect, 2 ); - hrgn = CreateRectRgnIndirect( &rect ); - hdc = GetDCEx( hwnd_owndc, hrgn, DCX_INTERSECTRGN | DCX_USESTYLE ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - ReleaseDC( hwnd_owndc, hdc ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - hdc = GetDCEx( hwnd_owndc, 0, DCX_USESTYLE ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - ReleaseDC( hwnd_owndc, hdc ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - - SetRect( &rect, 20, 20, 30, 30 ); - MapWindowPoints( hwnd_owndc, 0, (POINT *)&rect, 2 ); - hrgn2 = CreateRectRgnIndirect( &rect ); - hdc = GetDCEx( hwnd_owndc, hrgn2, DCX_INTERSECTRGN | DCX_USESTYLE ); - ok( GetRgnBox( hrgn, &rect ) == ERROR, "region must no longer be valid\n" ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 20 && rect.top >= 20 && rect.right <= 30 && rect.bottom <= 30, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetRgnBox( hrgn2, &rect ) != ERROR, "region2 must still be valid\n" ); - ReleaseDC( hwnd_owndc, hdc ); - ok( GetRgnBox( hrgn2, &rect ) != ERROR, "region2 must still be valid\n" ); - hdc = GetDCEx( hwnd_owndc, 0, DCX_EXCLUDERGN | DCX_USESTYLE ); - ok( GetRgnBox( hrgn2, &rect ) == ERROR, "region must no longer be valid\n" ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( !(rect.left >= 20 && rect.top >= 20 && rect.right <= 30 && rect.bottom <= 30), - "clip box should have been reset %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ReleaseDC( hwnd_owndc, hdc ); - - /* class DC */ - - SetRect( &rect, 10, 10, 20, 20 ); - MapWindowPoints( hwnd_classdc, 0, (POINT *)&rect, 2 ); - hrgn = CreateRectRgnIndirect( &rect ); - hdc = GetDCEx( hwnd_classdc, hrgn, DCX_INTERSECTRGN | DCX_USESTYLE ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - ReleaseDC( hwnd_classdc, hdc ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - - hdc = GetDCEx( hwnd_classdc, 0, DCX_USESTYLE ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - ReleaseDC( hwnd_classdc, hdc ); - ok( GetRgnBox( hrgn, &rect ) != ERROR, "region must still be valid\n" ); - - SetRect( &rect, 20, 20, 30, 30 ); - MapWindowPoints( hwnd_classdc, 0, (POINT *)&rect, 2 ); - hrgn2 = CreateRectRgnIndirect( &rect ); - hdc = GetDCEx( hwnd_classdc, hrgn2, DCX_INTERSECTRGN | DCX_USESTYLE ); - ok( GetRgnBox( hrgn, &rect ) == ERROR, "region must no longer be valid\n" ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 20 && rect.top >= 20 && rect.right <= 30 && rect.bottom <= 30, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetRgnBox( hrgn2, &rect ) != ERROR, "region2 must still be valid\n" ); - - old_hdc = hdc; - hdc = GetDCEx( hwnd_classdc2, 0, DCX_USESTYLE ); - ok( old_hdc == hdc, "did not get the same hdc %p/%p\n", old_hdc, hdc ); - ok( GetRgnBox( hrgn2, &rect ) != ERROR, "region2 must still be valid\n" ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( !(rect.left >= 20 && rect.top >= 20 && rect.right <= 30 && rect.bottom <= 30), - "clip box should have been reset %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ReleaseDC( hwnd_classdc2, hdc ); - ok( GetRgnBox( hrgn2, &rect ) != ERROR, "region2 must still be valid\n" ); - hdc = GetDCEx( hwnd_classdc2, 0, DCX_EXCLUDERGN | DCX_USESTYLE ); - ok( GetRgnBox( hrgn2, &rect ) != ERROR, "region2 must still be valid\n" ); - ok( !(rect.left >= 20 && rect.top >= 20 && rect.right <= 30 && rect.bottom <= 30), - "clip box must have been reset %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ReleaseDC( hwnd_classdc2, hdc ); -} - - -/* test various BeginPaint/EndPaint behaviors */ -static void test_begin_paint(void) -{ - HDC old_hdc, hdc; - RECT rect; - PAINTSTRUCT ps; - - /* cache DC */ - - /* clear update region */ - RedrawWindow( hwnd_cache, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE ); - SetRect( &rect, 10, 10, 20, 20 ); - RedrawWindow( hwnd_cache, &rect, 0, RDW_INVALIDATE ); - hdc = BeginPaint( hwnd_cache, &ps ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - EndPaint( hwnd_cache, &ps ); - - /* window DC */ - - RedrawWindow( hwnd_owndc, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE ); - SetRect( &rect, 10, 10, 20, 20 ); - RedrawWindow( hwnd_owndc, &rect, 0, RDW_INVALIDATE ); - hdc = BeginPaint( hwnd_owndc, &ps ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ReleaseDC( hwnd_owndc, hdc ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - ok( GetDC( hwnd_owndc ) == hdc, "got different hdc\n" ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - EndPaint( hwnd_owndc, &ps ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( !(rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20), - "clip box should have been reset %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - RedrawWindow( hwnd_owndc, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE ); - SetRect( &rect, 10, 10, 20, 20 ); - RedrawWindow( hwnd_owndc, &rect, 0, RDW_INVALIDATE|RDW_ERASE ); - ok( GetDC( hwnd_owndc ) == hdc, "got different hdc\n" ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( !(rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20), - "clip box should be the whole window %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - RedrawWindow( hwnd_owndc, NULL, 0, RDW_ERASENOW ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( !(rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20), - "clip box should still be the whole window %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - - /* class DC */ - - RedrawWindow( hwnd_classdc, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE ); - SetRect( &rect, 10, 10, 20, 20 ); - RedrawWindow( hwnd_classdc, &rect, 0, RDW_INVALIDATE ); - hdc = BeginPaint( hwnd_classdc, &ps ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20, - "invalid clip box %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - - old_hdc = hdc; - hdc = GetDC( hwnd_classdc2 ); - ok( old_hdc == hdc, "did not get the same hdc %p/%p\n", old_hdc, hdc ); - SetRectEmpty( &rect ); - GetClipBox( hdc, &rect ); - ok( !(rect.left >= 10 && rect.top >= 10 && rect.right <= 20 && rect.bottom <= 20), - "clip box should have been reset %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); -} - -static void test_invisible_create(void) -{ - HWND hwnd_owndc = CreateWindowA("owndc_class", NULL, WS_OVERLAPPED, - 0, 200, 100, 100, - 0, 0, GetModuleHandleA(0), NULL ); - HDC dc1, dc2; - - dc1 = GetDC(hwnd_owndc); - dc2 = GetDC(hwnd_owndc); - - ok(dc1 == dc2, "expected owndc dcs to match\n"); - - ReleaseDC(hwnd_owndc, dc2); - ReleaseDC(hwnd_owndc, dc1); - DestroyWindow(hwnd_owndc); -} - -START_TEST(dce) -{ - WNDCLASSA cls; - - cls.style = CS_DBLCLKS; - cls.lpfnWndProc = DefWindowProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "cache_class"; - RegisterClassA(&cls); - cls.style = CS_DBLCLKS | CS_OWNDC; - cls.lpszClassName = "owndc_class"; - RegisterClassA(&cls); - cls.style = CS_DBLCLKS | CS_CLASSDC; - cls.lpszClassName = "classdc_class"; - RegisterClassA(&cls); - - hwnd_cache = CreateWindowA("cache_class", NULL, WS_OVERLAPPED | WS_VISIBLE, - 0, 0, 100, 100, - 0, 0, GetModuleHandleA(0), NULL ); - hwnd_owndc = CreateWindowA("owndc_class", NULL, WS_OVERLAPPED | WS_VISIBLE, - 0, 200, 100, 100, - 0, 0, GetModuleHandleA(0), NULL ); - hwnd_classdc = CreateWindowA("classdc_class", NULL, WS_OVERLAPPED | WS_VISIBLE, - 200, 0, 100, 100, - 0, 0, GetModuleHandleA(0), NULL ); - hwnd_classdc2 = CreateWindowA("classdc_class", NULL, WS_OVERLAPPED | WS_VISIBLE, - 200, 200, 100, 100, - 0, 0, GetModuleHandleA(0), NULL ); - test_dc_attributes(); - test_parameters(); - test_dc_visrgn(); - test_begin_paint(); - test_invisible_create(); -} diff --git a/rostests/winetests/user32/dde.c b/rostests/winetests/user32/dde.c deleted file mode 100755 index eb875e3dc45..00000000000 --- a/rostests/winetests/user32/dde.c +++ /dev/null @@ -1,2111 +0,0 @@ -/* - * Unit tests for DDE functions - * - * Copyright (c) 2004 Dmitry Timoshkov - * 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 - */ - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "dde.h" -#include "ddeml.h" -#include "winerror.h" - -#include "wine/test.h" - -static const WCHAR TEST_DDE_SERVICE[] = {'T','e','s','t','D','D','E','S','e','r','v','i','c','e',0}; - -static char exec_cmdA[] = "ANSI dde command"; -static WCHAR exec_cmdW[] = {'u','n','i','c','o','d','e',' ','d','d','e',' ','c','o','m','m','a','n','d',0}; - -static WNDPROC old_dde_client_wndproc; - -static const DWORD default_timeout = 200; - -static void flush_events(void) -{ - MSG msg; - int diff = default_timeout; - int min_timeout = 50; - DWORD time = GetTickCount() + diff; - - while (diff > 0) - { - if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min_timeout, QS_ALLINPUT ) == WAIT_TIMEOUT) break; - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - diff = time - GetTickCount(); - min_timeout = 10; - } -} - -static void create_dde_window(HWND *hwnd, LPCSTR name, WNDPROC wndproc) -{ - WNDCLASSA wcA; - - memset(&wcA, 0, sizeof(wcA)); - wcA.lpfnWndProc = wndproc; - wcA.lpszClassName = name; - wcA.hInstance = GetModuleHandleA(0); - assert(RegisterClassA(&wcA)); - - *hwnd = CreateWindowExA(0, name, NULL, WS_POPUP, - 500, 500, CW_USEDEFAULT, CW_USEDEFAULT, - GetDesktopWindow(), 0, GetModuleHandleA(0), NULL); - assert(*hwnd); -} - -static LRESULT WINAPI dde_server_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - UINT_PTR lo, hi; - char str[MAX_PATH], *ptr; - HGLOBAL hglobal; - DDEDATA *data; - DDEPOKE *poke; - DWORD size; - - static int msg_index = 0; - static HWND client = 0; - static BOOL executed = FALSE; - - if (msg < WM_DDE_FIRST || msg > WM_DDE_LAST) - return DefWindowProcA(hwnd, msg, wparam, lparam); - - msg_index++; - - switch (msg) - { - case WM_DDE_INITIATE: - { - client = (HWND)wparam; - ok(msg_index == 1, "Expected 1, got %d\n", msg_index); - - GlobalGetAtomNameA(LOWORD(lparam), str, MAX_PATH); - ok(!lstrcmpA(str, "TestDDEService"), "Expected TestDDEService, got %s\n", str); - - GlobalGetAtomNameA(HIWORD(lparam), str, MAX_PATH); - ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str); - - SendMessageA(client, WM_DDE_ACK, (WPARAM)hwnd, lparam); - - break; - } - - case WM_DDE_REQUEST: - { - ok((msg_index >= 2 && msg_index <= 4) || - (msg_index >= 7 && msg_index <= 8), - "Expected 2, 3, 4, 7 or 8, got %d\n", msg_index); - ok(wparam == (WPARAM)client, "Expected client hwnd, got %08lx\n", wparam); - ok(LOWORD(lparam) == CF_TEXT, "Expected CF_TEXT, got %d\n", LOWORD(lparam)); - - GlobalGetAtomNameA(HIWORD(lparam), str, MAX_PATH); - if (msg_index < 8) - ok(!lstrcmpA(str, "request"), "Expected request, got %s\n", str); - else - ok(!lstrcmpA(str, "executed"), "Expected executed, got %s\n", str); - - if (msg_index == 8) - { - if (executed) - lstrcpyA(str, "command executed\r\n"); - else - lstrcpyA(str, "command not executed\r\n"); - } - else - lstrcpyA(str, "requested data\r\n"); - - size = sizeof(DDEDATA) + lstrlenA(str) + 1; - hglobal = GlobalAlloc(GMEM_MOVEABLE, size); - ok(hglobal != NULL, "Expected non-NULL hglobal\n"); - - data = GlobalLock(hglobal); - ZeroMemory(data, size); - - /* setting fResponse to FALSE at this point destroys - * the internal messaging state of native dde - */ - data->fResponse = TRUE; - - if (msg_index == 2) - data->fRelease = TRUE; - else if (msg_index == 3) - data->fAckReq = TRUE; - - data->cfFormat = CF_TEXT; - lstrcpyA((LPSTR)data->Value, str); - GlobalUnlock(hglobal); - - lparam = PackDDElParam(WM_DDE_ACK, (UINT)hglobal, HIWORD(lparam)); - PostMessageA(client, WM_DDE_DATA, (WPARAM)hwnd, lparam); - - break; - } - - case WM_DDE_POKE: - { - ok(msg_index == 5 || msg_index == 6, "Expected 5 or 6, got %d\n", msg_index); - ok(wparam == (WPARAM)client, "Expected client hwnd, got %08lx\n", wparam); - - UnpackDDElParam(WM_DDE_POKE, lparam, &lo, &hi); - - GlobalGetAtomNameA(hi, str, MAX_PATH); - ok(!lstrcmpA(str, "poker"), "Expected poker, got %s\n", str); - - poke = GlobalLock((HGLOBAL)lo); - ok(poke != NULL, "Expected non-NULL poke\n"); - ok(poke->fReserved == 0, "Expected 0, got %d\n", poke->fReserved); - ok(poke->unused == 0, "Expected 0, got %d\n", poke->unused); - ok(poke->fRelease == TRUE, "Expected TRUE, got %d\n", poke->fRelease); - ok(poke->cfFormat == CF_TEXT, "Expected CF_TEXT, got %d\n", poke->cfFormat); - - if (msg_index == 5) - ok(lstrcmpA((LPSTR)poke->Value, "poke data\r\n"), - "Expected 'poke data\\r\\n', got %s\n", poke->Value); - else - ok(!lstrcmpA((LPSTR)poke->Value, "poke data\r\n"), - "Expected 'poke data\\r\\n', got %s\n", poke->Value); - - GlobalUnlock((HGLOBAL)lo); - - lparam = PackDDElParam(WM_DDE_ACK, DDE_FACK, hi); - PostMessageA(client, WM_DDE_ACK, (WPARAM)hwnd, lparam); - - break; - } - - case WM_DDE_EXECUTE: - { - ok(msg_index == 7, "Expected 7, got %d\n", msg_index); - ok(wparam == (WPARAM)client, "Expected client hwnd, got %08lx\n", wparam); - - ptr = GlobalLock((HGLOBAL)lparam); - ok(!lstrcmpA(ptr, "[Command(Var)]"), "Expected [Command(Var)], got %s\n", ptr); - GlobalUnlock((HGLOBAL)lparam); - - executed = TRUE; - - lparam = ReuseDDElParam(lparam, WM_DDE_EXECUTE, WM_DDE_ACK, DDE_FACK, HIWORD(lparam)); - PostMessageA(client, WM_DDE_ACK, (WPARAM)hwnd, lparam); - - break; - } - - case WM_DDE_TERMINATE: - { - ok(msg_index == 9, "Expected 9, got %d\n", msg_index); - ok(wparam == (WPARAM)client, "Expected client hwnd, got %08lx\n", wparam); - ok(lparam == 0, "Expected 0, got %08lx\n", lparam); - - PostMessageA(client, WM_DDE_TERMINATE, (WPARAM)hwnd, 0); - - break; - } - - default: - ok(FALSE, "Unhandled msg: %08x\n", msg); - } - - return DefWindowProcA(hwnd, msg, wparam, lparam); -} - -static void test_msg_server(HANDLE hproc) -{ - MSG msg; - HWND hwnd; - DWORD res; - - create_dde_window(&hwnd, "dde_server", dde_server_wndproc); - - while (MsgWaitForMultipleObjects( 1, &hproc, FALSE, INFINITE, QS_ALLINPUT ) != 0) - { - while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); - } - - DestroyWindow(hwnd); - GetExitCodeProcess( hproc, &res ); - ok( !res, "client failed with %u error(s)\n", res ); -} - -static HDDEDATA CALLBACK client_ddeml_callback(UINT uType, UINT uFmt, HCONV hconv, - HSZ hsz1, HSZ hsz2, HDDEDATA hdata, - ULONG_PTR dwData1, ULONG_PTR dwData2) -{ - ok(FALSE, "Unhandled msg: %08x\n", uType); - return 0; -} - -static void test_ddeml_client(void) -{ - UINT ret; - char buffer[32]; - LPSTR str; - DWORD size, res; - HDDEDATA hdata, op; - HSZ server, topic, item; - DWORD client_pid; - HCONV conversation; - - client_pid = 0; - ret = DdeInitializeA(&client_pid, client_ddeml_callback, APPCMD_CLIENTONLY, 0); - ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret); - - /* FIXME: make these atoms global and check them in the server */ - - server = DdeCreateStringHandleA(client_pid, "TestDDEService", CP_WINANSI); - topic = DdeCreateStringHandleA(client_pid, "TestDDETopic", CP_WINANSI); - - DdeGetLastError(client_pid); - conversation = DdeConnect(client_pid, server, topic, NULL); - ok(conversation != NULL, "Expected non-NULL conversation\n"); - ret = DdeGetLastError(client_pid); - ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret); - - DdeFreeStringHandle(client_pid, server); - - item = DdeCreateStringHandleA(client_pid, "request", CP_WINANSI); - - /* XTYP_REQUEST, fRelease = TRUE */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - hdata = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REQUEST, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret); - todo_wine - { - ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %08x\n", res); - } - if (hdata == NULL) - ok(FALSE, "hdata is NULL\n"); - else - { - str = (LPSTR)DdeAccessData(hdata, &size); - ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str); - ok(size == 19, "Expected 19, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - } - - /* XTYP_REQUEST, fAckReq = TRUE */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - hdata = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REQUEST, default_timeout, &res); - ret = DdeGetLastError(client_pid); - todo_wine - { - ok(res == DDE_FNOTPROCESSED, "Expected DDE_FNOTPROCESSED, got %d\n", res); - ok(ret == DMLERR_MEMORY_ERROR, "Expected DMLERR_MEMORY_ERROR, got %d\n", ret); - } - if (hdata == NULL) - ok(FALSE, "hdata is NULL\n"); - else - { - str = (LPSTR)DdeAccessData(hdata, &size); - ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str); - ok(size == 19, "Expected 19, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - } - - /* XTYP_REQUEST, all params normal */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - hdata = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REQUEST, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret); - todo_wine - { - ok(res == DDE_FNOTPROCESSED, "Expected DDE_FNOTPROCESSED, got %d\n", res); - } - if (hdata == NULL) - ok(FALSE, "hdata is NULL\n"); - else - { - str = (LPSTR)DdeAccessData(hdata, &size); - ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str); - ok(size == 19, "Expected 19, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - } - - /* XTYP_REQUEST, no item */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - hdata = DdeClientTransaction(NULL, 0, conversation, 0, CF_TEXT, XTYP_REQUEST, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(hdata == NULL, "Expected NULL hdata, got %p\n", hdata); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %08x\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - DdeFreeStringHandle(client_pid, item); - - item = DdeCreateStringHandleA(client_pid, "poker", CP_WINANSI); - - lstrcpyA(buffer, "poke data\r\n"); - hdata = DdeCreateDataHandle(client_pid, (LPBYTE)buffer, lstrlenA(buffer) + 1, - 0, item, CF_TEXT, 0); - ok(hdata != NULL, "Expected non-NULL hdata\n"); - - /* XTYP_POKE, no item */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction((LPBYTE)hdata, -1, conversation, 0, CF_TEXT, XTYP_POKE, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - /* XTYP_POKE, no data */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, 0, CF_TEXT, XTYP_POKE, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - /* XTYP_POKE, wrong size */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction((LPBYTE)hdata, 0, conversation, item, CF_TEXT, XTYP_POKE, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == (HDDEDATA)TRUE, "Expected TRUE, got %p\n", op); - ok(res == DDE_FACK, "Expected DDE_FACK, got %d\n", res); - ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret); - - /* XTYP_POKE, correct params */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction((LPBYTE)hdata, -1, conversation, item, CF_TEXT, XTYP_POKE, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == (HDDEDATA)TRUE, "Expected TRUE, got %p\n", op); - ok(res == DDE_FACK, "Expected DDE_FACK, got %d\n", res); - ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret); - - DdeFreeDataHandle(hdata); - - lstrcpyA(buffer, "[Command(Var)]"); - hdata = DdeCreateDataHandle(client_pid, (LPBYTE)buffer, lstrlenA(buffer) + 1, - 0, NULL, CF_TEXT, 0); - ok(hdata != NULL, "Expected non-NULL hdata\n"); - - /* XTYP_EXECUTE, correct params */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction((LPBYTE)hdata, -1, conversation, NULL, 0, XTYP_EXECUTE, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret); - ok(op == (HDDEDATA)TRUE, "Expected TRUE, got %p\n", op); - ok(res == DDE_FACK, "Expected DDE_FACK, got %d\n", res); - - /* XTYP_EXECUTE, no data */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, NULL, 0, XTYP_EXECUTE, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - todo_wine - { - ok(ret == DMLERR_MEMORY_ERROR, "Expected DMLERR_MEMORY_ERROR, got %d\n", ret); - } - - /* XTYP_EXECUTE, no data, -1 size */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, -1, conversation, NULL, 0, XTYP_EXECUTE, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - todo_wine - { - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - } - - DdeFreeStringHandle(client_pid, topic); - DdeFreeDataHandle(hdata); - - item = DdeCreateStringHandleA(client_pid, "executed", CP_WINANSI); - - /* verify the execute */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - hdata = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REQUEST, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret); - todo_wine - { - ok(res == DDE_FNOTPROCESSED, "Expected DDE_FNOTPROCESSED, got %d\n", res); - } - if (hdata == NULL) - ok(FALSE, "hdata is NULL\n"); - else - { - str = (LPSTR)DdeAccessData(hdata, &size); - ok(!lstrcmpA(str, "command executed\r\n"), "Expected 'command executed\\r\\n', got %s\n", str); - ok(size == 21, "Expected 21, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - } - - /* invalid transactions */ - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_ADVREQ, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_CONNECT, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_CONNECT_CONFIRM, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_DISCONNECT, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_ERROR, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_MONITOR, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REGISTER, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_UNREGISTER, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_WILDCONNECT, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - res = 0xdeadbeef; - DdeGetLastError(client_pid); - op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_XACT_COMPLETE, default_timeout, &res); - ret = DdeGetLastError(client_pid); - ok(op == NULL, "Expected NULL, got %p\n", op); - ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res); - ok(ret == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", ret); - - DdeFreeStringHandle(client_pid, item); - - ret = DdeDisconnect(conversation); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - ret = DdeUninitialize(client_pid); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); -} - -static DWORD server_pid; - -static HDDEDATA CALLBACK server_ddeml_callback(UINT uType, UINT uFmt, HCONV hconv, - HSZ hsz1, HSZ hsz2, HDDEDATA hdata, - ULONG_PTR dwData1, ULONG_PTR dwData2) -{ - char str[MAX_PATH], *ptr; - HDDEDATA ret; - DWORD size; - - static int msg_index = 0; - static HCONV conversation = 0; - - msg_index++; - - switch (uType) - { - case XTYP_REGISTER: - { - ok(msg_index == 1, "Expected 1, got %d\n", msg_index); - ok(uFmt == 0, "Expected 0, got %d\n", uFmt); - ok(hconv == 0, "Expected 0, got %p\n", hconv); - ok(hdata == 0, "Expected 0, got %p\n", hdata); - ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1); - ok(dwData2 == 0, "Expected 0, got %08lx\n", dwData2); - - size = DdeQueryStringA(server_pid, hsz1, str, MAX_PATH, CP_WINANSI); - ok(!lstrcmpA(str, "TestDDEServer"), "Expected TestDDEServer, got %s\n", str); - ok(size == 13, "Expected 13, got %d\n", size); - - size = DdeQueryStringA(server_pid, hsz2, str, MAX_PATH, CP_WINANSI); - ok(!strncmp(str, "TestDDEServer(", 14), "Expected TestDDEServer(, got %s\n", str); - ok(str[size - 1] == ')', "Expected ')', got %c\n", str[size - 1]); - ok(size == 25, "Expected 25, got %d\n", size); - - return (HDDEDATA)TRUE; - } - - case XTYP_CONNECT: - { - ok(msg_index == 2, "Expected 2, got %d\n", msg_index); - ok(uFmt == 0, "Expected 0, got %d\n", uFmt); - ok(hconv == 0, "Expected 0, got %p\n", hconv); - ok(hdata == 0, "Expected 0, got %p\n", hdata); - ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1); - ok(dwData2 == FALSE, "Expected FALSE, got %08lx\n", dwData2); - - size = DdeQueryStringA(server_pid, hsz1, str, MAX_PATH, CP_WINANSI); - ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str); - ok(size == 12, "Expected 12, got %d\n", size); - - size = DdeQueryStringA(server_pid, hsz2, str, MAX_PATH, CP_WINANSI); - ok(!lstrcmpA(str, "TestDDEServer"), "Expected TestDDEServer, got %s\n", str); - ok(size == 13, "Expected 13, got %d\n", size); - - return (HDDEDATA)TRUE; - } - - case XTYP_CONNECT_CONFIRM: - { - conversation = hconv; - - ok(msg_index == 3, "Expected 3, got %d\n", msg_index); - ok(uFmt == 0, "Expected 0, got %d\n", uFmt); - ok(hconv != NULL, "Expected non-NULL hconv\n"); - ok(hdata == 0, "Expected 0, got %p\n", hdata); - ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1); - ok(dwData2 == FALSE, "Expected FALSE, got %08lx\n", dwData2); - - size = DdeQueryStringA(server_pid, hsz1, str, MAX_PATH, CP_WINANSI); - ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str); - ok(size == 12, "Expected 12, got %d\n", size); - - size = DdeQueryStringA(server_pid, hsz2, str, MAX_PATH, CP_WINANSI); - ok(!lstrcmpA(str, "TestDDEServer"), "Expected TestDDEServer, got %s\n", str); - ok(size == 13, "Expected 13, got %d\n", size); - - return (HDDEDATA)TRUE; - } - - case XTYP_REQUEST: - { - ok(msg_index == 4 || msg_index == 5 || msg_index == 6, - "Expected 4, 5 or 6, got %d\n", msg_index); - ok(hconv == conversation, "Expected conversation handle, got %p\n", hconv); - ok(hdata == 0, "Expected 0, got %p\n", hdata); - ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1); - ok(dwData2 == 0, "Expected 0, got %08lx\n", dwData2); - - if (msg_index == 4) - ok(uFmt == 0xbeef, "Expected 0xbeef, got %08x\n", uFmt); - else - ok(uFmt == CF_TEXT, "Expected CF_TEXT, got %08x\n", uFmt); - - size = DdeQueryStringA(server_pid, hsz1, str, MAX_PATH, CP_WINANSI); - ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str); - ok(size == 12, "Expected 12, got %d\n", size); - - size = DdeQueryStringA(server_pid, hsz2, str, MAX_PATH, CP_WINANSI); - - if (msg_index == 5) - { - todo_wine - { - ok(!lstrcmpA(str, ""), "Expected empty string, got %s\n", str); - ok(size == 1, "Expected 1, got %d\n", size); - } - } - else if (msg_index == 6) - { - ok(!lstrcmpA(str, "request"), "Expected request, got %s\n", str); - ok(size == 7, "Expected 7, got %d\n", size); - } - - if (msg_index == 6) - { - lstrcpyA(str, "requested data\r\n"); - return DdeCreateDataHandle(server_pid, (LPBYTE)str, lstrlenA(str) + 1, - 0, hsz2, CF_TEXT, 0); - } - - return NULL; - } - - case XTYP_POKE: - { - ok(msg_index == 7 || msg_index == 8, "Expected 7 or 8, got %d\n", msg_index); - ok(uFmt == CF_TEXT, "Expected CF_TEXT, got %d\n", uFmt); - ok(hconv == conversation, "Expected conversation handle, got %p\n", hconv); - ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1); - ok(dwData2 == 0, "Expected 0, got %08lx\n", dwData2); - - size = DdeQueryStringA(server_pid, hsz1, str, MAX_PATH, CP_WINANSI); - ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str); - ok(size == 12, "Expected 12, got %d\n", size); - - ptr = (LPSTR)DdeAccessData(hdata, &size); - ok(!lstrcmpA(ptr, "poke data\r\n"), "Expected 'poke data\\r\\n', got %s\n", ptr); - todo_wine - { - ok(size == 14, "Expected 14, got %d\n", size); - } - DdeUnaccessData(hdata); - - size = DdeQueryStringA(server_pid, hsz2, str, MAX_PATH, CP_WINANSI); - if (msg_index == 7) - { - todo_wine - { - ok(!lstrcmpA(str, ""), "Expected empty string, got %s\n", str); - ok(size == 1, "Expected 1, got %d\n", size); - } - } - else - { - ok(!lstrcmpA(str, "poke"), "Expected poke, got %s\n", str); - ok(size == 4, "Expected 4, got %d\n", size); - } - - return (HDDEDATA)DDE_FACK; - } - - case XTYP_EXECUTE: - { - ok(msg_index == 9 || msg_index == 10, "Expected 9 or 10, got %d\n", msg_index); - ok(uFmt == 0, "Expected 0, got %d\n", uFmt); - ok(hconv == conversation, "Expected conversation handle, got %p\n", hconv); - ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1); - ok(dwData2 == 0, "Expected 0, got %08lx\n", dwData2); - ok(hsz2 == 0, "Expected 0, got %p\n", hsz2); - - size = DdeQueryStringA(server_pid, hsz1, str, MAX_PATH, CP_WINANSI); - ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str); - ok(size == 12, "Expected 12, got %d\n", size); - - ptr = (LPSTR)DdeAccessData(hdata, &size); - - if (msg_index == 9) - { - ok(!lstrcmpA(ptr, "[Command(Var)]"), "Expected '[Command(Var)]', got %s\n", ptr); - ok(size == 15, "Expected 15, got %d\n", size); - ret = (HDDEDATA)DDE_FACK; - } - else - { - ok(!lstrcmpA(ptr, "[BadCommand(Var)]"), "Expected '[BadCommand(Var)]', got %s\n", ptr); - ok(size == 18, "Expected 18, got %d\n", size); - ret = (HDDEDATA)DDE_FNOTPROCESSED; - } - - DdeUnaccessData(hdata); - - return ret; - } - - case XTYP_DISCONNECT: - { - ok(msg_index == 11, "Expected 11, got %d\n", msg_index); - ok(uFmt == 0, "Expected 0, got %d\n", uFmt); - ok(hconv == conversation, "Expected conversation handle, got %p\n", hconv); - ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1); - ok(dwData2 == 0, "Expected 0, got %08lx\n", dwData2); - ok(hsz1 == 0, "Expected 0, got %p\n", hsz2); - ok(hsz2 == 0, "Expected 0, got %p\n", hsz2); - - return 0; - } - - default: - ok(FALSE, "Unhandled msg: %08x\n", uType); - } - - return 0; -} - -static void test_ddeml_server(HANDLE hproc) -{ - MSG msg; - UINT res; - BOOL ret; - HSZ server; - HDDEDATA hdata; - - /* set up DDE server */ - server_pid = 0; - res = DdeInitialize(&server_pid, server_ddeml_callback, APPCLASS_STANDARD, 0); - ok(res == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", res); - - server = DdeCreateStringHandle(server_pid, "TestDDEServer", CP_WINANSI); - ok(server != NULL, "Expected non-NULL string handle\n"); - - hdata = DdeNameService(server_pid, server, 0, DNS_REGISTER); - ok(hdata == (HDDEDATA)TRUE, "Expected TRUE, got %p\n", hdata); - - while (MsgWaitForMultipleObjects( 1, &hproc, FALSE, INFINITE, QS_ALLINPUT ) != 0) - { - while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); - } - ret = DdeUninitialize(server_pid); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - GetExitCodeProcess( hproc, &res ); - ok( !res, "client failed with %u error(s)\n", res ); -} - -static HWND client_hwnd, server_hwnd; -static ATOM server, topic, item; -static HGLOBAL execute_hglobal; - -static LRESULT WINAPI dde_msg_client_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - char str[MAX_PATH]; - UINT_PTR lo, hi; - DDEDATA *data; - DDEACK *ack; - DWORD size; - LPSTR ptr; - - static int msg_index = 0; - - if (msg < WM_DDE_FIRST || msg > WM_DDE_LAST) - return DefWindowProcA(hwnd, msg, wparam, lparam); - - msg_index++; - - switch (msg) - { - case WM_DDE_INITIATE: - { - ok(msg_index == 1, "Expected 1, got %d\n", msg_index); - ok(wparam == (WPARAM)client_hwnd, "Expected client hwnd, got %08lx\n", wparam); - - size = GlobalGetAtomNameA(LOWORD(lparam), str, MAX_PATH); - ok(LOWORD(lparam) == server, "Expected server atom, got %08x\n", LOWORD(lparam)); - ok(!lstrcmpA(str, "TestDDEServer"), "Expected TestDDEServer, got %s\n", str); - ok(size == 13, "Expected 13, got %d\n", size); - - size = GlobalGetAtomNameA(HIWORD(lparam), str, MAX_PATH); - ok(HIWORD(lparam) == topic, "Expected topic atom, got %08x\n", HIWORD(lparam)); - ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str); - ok(size == 12, "Expected 12, got %d\n", size); - - break; - } - - case WM_DDE_ACK: - { - ok((msg_index >= 2 && msg_index <= 4) || (msg_index >= 6 && msg_index <= 10), - "Expected 2, 3, 4, 6, 7, 8, 9 or 10, got %d\n", msg_index); - - if (msg_index == 2) - { - server_hwnd = (HWND)wparam; - ok(wparam != 0, "Expected non-NULL wparam, got %08lx\n", wparam); - - size = GlobalGetAtomNameA(LOWORD(lparam), str, MAX_PATH); - ok(LOWORD(lparam) == server, "Expected server atom, got %08x\n", LOWORD(lparam)); - ok(!lstrcmpA(str, "TestDDEServer"), "Expected TestDDEServer, got %s\n", str); - ok(size == 13, "Expected 13, got %d\n", size); - - size = GlobalGetAtomNameA(HIWORD(lparam), str, MAX_PATH); - ok(HIWORD(lparam) == topic, "Expected topic atom, got %08x\n", HIWORD(lparam)); - ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str); - ok(size == 12, "Expected 12, got %d\n", size); - } - else if (msg_index == 9 || msg_index == 10) - { - ok(wparam == (WPARAM)server_hwnd, "Expected server hwnd, got %08lx\n", wparam); - - UnpackDDElParam(WM_DDE_ACK, lparam, &lo, &hi); - - ack = (DDEACK *)&lo; - ok(ack->bAppReturnCode == 0, "Expected 0, got %d\n", ack->bAppReturnCode); - ok(ack->reserved == 0, "Expected 0, got %d\n", ack->reserved); - ok(ack->fBusy == FALSE, "Expected FALSE, got %d\n", ack->fBusy); - - ok(hi == (UINT_PTR)execute_hglobal, "Execpted execute hglobal, got %08lx\n", hi); - ptr = GlobalLock((HGLOBAL)hi); - - if (msg_index == 9) - { - ok(ack->fAck == TRUE, "Expected TRUE, got %d\n", ack->fAck); - ok(!lstrcmpA(ptr, "[Command(Var)]"), "Expected '[Command(Var)]', got %s\n", ptr); - } - else - { - ok(ack->fAck == FALSE, "Expected FALSE, got %d\n", ack->fAck); - ok(!lstrcmpA(ptr, "[BadCommand(Var)]"), "Expected '[BadCommand(Var)]', got %s\n", ptr); - } - - GlobalUnlock((HGLOBAL)hi); - } - else - { - ok(wparam == (WPARAM)server_hwnd, "Expected server hwnd, got %08lx\n", wparam); - - UnpackDDElParam(WM_DDE_ACK, lparam, &lo, &hi); - - ack = (DDEACK *)&lo; - ok(ack->bAppReturnCode == 0, "Expected 0, got %d\n", ack->bAppReturnCode); - ok(ack->reserved == 0, "Expected 0, got %d\n", ack->reserved); - ok(ack->fBusy == FALSE, "Expected FALSE, got %d\n", ack->fBusy); - - if (msg_index >= 7) - ok(ack->fAck == TRUE, "Expected TRUE, got %d\n", ack->fAck); - else - { - if (msg_index == 6) todo_wine - ok(ack->fAck == FALSE, "Expected FALSE, got %d\n", ack->fAck); - } - - size = GlobalGetAtomNameA(hi, str, MAX_PATH); - if (msg_index == 3) - { - ok(hi == item, "Expected item atom, got %08lx\n", hi); - ok(!lstrcmpA(str, "request"), "Expected request, got %s\n", str); - ok(size == 7, "Expected 7, got %d\n", size); - } - else if (msg_index == 4 || msg_index == 7) - { - ok(hi == 0, "Expected 0, got %08lx\n", hi); - ok(size == 0, "Expected empty string, got %d\n", size); - } - else - { - ok(hi == item, "Expected item atom, got %08lx\n", hi); - if (msg_index == 6) todo_wine - { - ok(!lstrcmpA(str, "poke"), "Expected poke, got %s\n", str); - ok(size == 4, "Expected 4, got %d\n", size); - } - } - } - - break; - } - - case WM_DDE_DATA: - { - ok(msg_index == 5, "Expected 5, got %d\n", msg_index); - ok(wparam == (WPARAM)server_hwnd, "Expected server hwnd, got %08lx\n", wparam); - - UnpackDDElParam(WM_DDE_DATA, lparam, &lo, &hi); - - data = GlobalLock((HGLOBAL)lo); - ok(data->unused == 0, "Expected 0, got %d\n", data->unused); - ok(data->fResponse == TRUE, "Expected TRUE, got %d\n", data->fResponse); - todo_wine - { - ok(data->fRelease == TRUE, "Expected TRUE, got %d\n", data->fRelease); - } - ok(data->fAckReq == 0, "Expected 0, got %d\n", data->fAckReq); - ok(data->cfFormat == CF_TEXT, "Expected CF_TEXT, got %d\n", data->cfFormat); - ok(!lstrcmpA((LPSTR)data->Value, "requested data\r\n"), - "Expeted 'requested data\\r\\n', got %s\n", data->Value); - GlobalUnlock((HGLOBAL)lo); - - size = GlobalGetAtomNameA(hi, str, MAX_PATH); - ok(hi == item, "Expected item atom, got %08x\n", HIWORD(lparam)); - ok(!lstrcmpA(str, "request"), "Expected request, got %s\n", str); - ok(size == 7, "Expected 7, got %d\n", size); - - GlobalFree((HGLOBAL)lo); - GlobalDeleteAtom(hi); - - break; - } - - default: - ok(FALSE, "Unhandled msg: %08x\n", msg); - } - - return DefWindowProcA(hwnd, msg, wparam, lparam); -} - -static HGLOBAL create_poke() -{ - HGLOBAL hglobal; - DDEPOKE *poke; - DWORD size; - - size = sizeof(DDEPOKE) + lstrlenA("poke data\r\n") + 1; - hglobal = GlobalAlloc(GMEM_DDESHARE, size); - ok(hglobal != 0, "Expected non-NULL hglobal\n"); - - poke = GlobalLock(hglobal); - poke->unused = 0; - poke->fRelease = TRUE; - poke->fReserved = TRUE; - poke->cfFormat = CF_TEXT; - lstrcpyA((LPSTR)poke->Value, "poke data\r\n"); - GlobalUnlock(hglobal); - - return hglobal; -} - -static HGLOBAL create_execute(LPCSTR command) -{ - HGLOBAL hglobal; - LPSTR ptr; - - hglobal = GlobalAlloc(GMEM_DDESHARE, lstrlenA(command) + 1); - ok(hglobal != 0, "Expected non-NULL hglobal\n"); - - ptr = GlobalLock(hglobal); - lstrcpyA(ptr, command); - GlobalUnlock(hglobal); - - return hglobal; -} - -static void test_msg_client() -{ - HGLOBAL hglobal; - LPARAM lparam; - - create_dde_window(&client_hwnd, "dde_client", dde_msg_client_wndproc); - - server = GlobalAddAtomA("TestDDEServer"); - ok(server != 0, "Expected non-NULL server\n"); - - topic = GlobalAddAtomA("TestDDETopic"); - ok(topic != 0, "Expected non-NULL topic\n"); - - SendMessageA(HWND_BROADCAST, WM_DDE_INITIATE, (WPARAM)client_hwnd, MAKELONG(server, topic)); - - GlobalDeleteAtom(server); - GlobalDeleteAtom(topic); - - flush_events(); - - item = GlobalAddAtom("request"); - ok(item != 0, "Expected non-NULL item\n"); - - /* WM_DDE_REQUEST, bad clipboard format */ - lparam = PackDDElParam(WM_DDE_REQUEST, 0xdeadbeef, item); - PostMessageA(server_hwnd, WM_DDE_REQUEST, (WPARAM)client_hwnd, lparam); - - flush_events(); - - /* WM_DDE_REQUEST, no item */ - lparam = PackDDElParam(WM_DDE_REQUEST, CF_TEXT, 0); - PostMessageA(server_hwnd, WM_DDE_REQUEST, (WPARAM)client_hwnd, lparam); - - flush_events(); - - /* WM_DDE_REQUEST, no client hwnd */ - lparam = PackDDElParam(WM_DDE_REQUEST, CF_TEXT, item); - PostMessageA(server_hwnd, WM_DDE_REQUEST, 0, lparam); - - flush_events(); - - /* WM_DDE_REQUEST, correct params */ - lparam = PackDDElParam(WM_DDE_REQUEST, CF_TEXT, item); - PostMessageA(server_hwnd, WM_DDE_REQUEST, (WPARAM)client_hwnd, lparam); - - flush_events(); - - GlobalDeleteAtom(item); - item = GlobalAddAtomA("poke"); - ok(item != 0, "Expected non-NULL item\n"); - - hglobal = create_poke(); - - /* WM_DDE_POKE, no ddepoke */ - lparam = PackDDElParam(WM_DDE_POKE, 0, item); - PostMessageA(server_hwnd, WM_DDE_POKE, (WPARAM)client_hwnd, lparam); - - flush_events(); - - /* WM_DDE_POKE, no item */ - lparam = PackDDElParam(WM_DDE_POKE, (UINT_PTR)hglobal, 0); - PostMessageA(server_hwnd, WM_DDE_POKE, (WPARAM)client_hwnd, lparam); - - flush_events(); - - hglobal = create_poke(); - - /* WM_DDE_POKE, no client hwnd */ - lparam = PackDDElParam(WM_DDE_POKE, (UINT_PTR)hglobal, item); - PostMessageA(server_hwnd, WM_DDE_POKE, 0, lparam); - - flush_events(); - - /* WM_DDE_POKE, all params correct */ - lparam = PackDDElParam(WM_DDE_POKE, (UINT_PTR)hglobal, item); - PostMessageA(server_hwnd, WM_DDE_POKE, (WPARAM)client_hwnd, lparam); - - flush_events(); - - execute_hglobal = create_execute("[Command(Var)]"); - - /* WM_DDE_EXECUTE, no lparam */ - PostMessageA(server_hwnd, WM_DDE_EXECUTE, (WPARAM)client_hwnd, 0); - - flush_events(); - - /* WM_DDE_EXECUTE, no hglobal */ - lparam = PackDDElParam(WM_DDE_EXECUTE, 0, 0); - PostMessageA(server_hwnd, WM_DDE_EXECUTE, (WPARAM)client_hwnd, lparam); - - flush_events(); - - /* WM_DDE_EXECUTE, no client hwnd */ - lparam = PackDDElParam(WM_DDE_EXECUTE, 0, (UINT_PTR)execute_hglobal); - PostMessageA(server_hwnd, WM_DDE_EXECUTE, 0, lparam); - - flush_events(); - - /* WM_DDE_EXECUTE, all params correct */ - lparam = PackDDElParam(WM_DDE_EXECUTE, 0, (UINT_PTR)execute_hglobal); - PostMessageA(server_hwnd, WM_DDE_EXECUTE, (WPARAM)client_hwnd, lparam); - - flush_events(); - - GlobalFree(execute_hglobal); - execute_hglobal = create_execute("[BadCommand(Var)]"); - - /* WM_DDE_EXECUTE that will get rejected */ - lparam = PackDDElParam(WM_DDE_EXECUTE, 0, (UINT_PTR)execute_hglobal); - PostMessageA(server_hwnd, WM_DDE_EXECUTE, (WPARAM)client_hwnd, lparam); - - flush_events(); - - DestroyWindow(client_hwnd); -} - -static LRESULT WINAPI hook_dde_client_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - UINT_PTR lo, hi; - - trace("hook_dde_client_wndproc: %p %04x %08lx %08lx\n", hwnd, msg, wparam, lparam); - - switch (msg) - { - case WM_DDE_ACK: - UnpackDDElParam(WM_DDE_ACK, lparam, &lo, &hi); - trace("WM_DDE_ACK: status %04lx hglobal %p\n", lo, (HGLOBAL)hi); - break; - - default: - break; - } - return CallWindowProcA(old_dde_client_wndproc, hwnd, msg, wparam, lparam); -} - -static LRESULT WINAPI dde_server_wndprocW(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - trace("dde_server_wndprocW: %p %04x %08lx %08lx\n", hwnd, msg, wparam, lparam); - - switch (msg) - { - case WM_DDE_INITIATE: - { - ATOM aService = GlobalAddAtomW(TEST_DDE_SERVICE); - - trace("server: got WM_DDE_INITIATE from %p with %08lx\n", (HWND)wparam, lparam); - - if (LOWORD(lparam) == aService) - { - ok(!IsWindowUnicode((HWND)wparam), "client should be an ANSI window\n"); - old_dde_client_wndproc = (WNDPROC)SetWindowLongPtrA((HWND)wparam, GWLP_WNDPROC, (ULONG_PTR)hook_dde_client_wndproc); - trace("server: sending WM_DDE_ACK to %p\n", (HWND)wparam); - SendMessageW((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, MAKELPARAM(aService, 0)); - } - else - GlobalDeleteAtom(aService); - return 0; - } - - case WM_DDE_EXECUTE: - { - DDEACK ack; - WORD status; - LPCSTR cmd; - UINT_PTR lo, hi; - - trace("server: got WM_DDE_EXECUTE from %p with %08lx\n", (HWND)wparam, lparam); - - UnpackDDElParam(WM_DDE_EXECUTE, lparam, &lo, &hi); - trace("%08lx => lo %04lx hi %04lx\n", lparam, lo, hi); - - ack.bAppReturnCode = 0; - ack.reserved = 0; - ack.fBusy = 0; - - cmd = GlobalLock((HGLOBAL)hi); - - if (!cmd || (lstrcmpA(cmd, exec_cmdA) && lstrcmpW((LPCWSTR)cmd, exec_cmdW))) - { - trace("ignoring unknown WM_DDE_EXECUTE command\n"); - /* We have to send a negative acknowledge even if we don't - * accept the command, otherwise Windows goes mad and next time - * we send an acknowledge DDEML drops the connection. - * Not sure how to call it: a bug or a feature. - */ - ack.fAck = 0; - } - else - ack.fAck = 1; - GlobalUnlock((HGLOBAL)hi); - - trace("server: posting %s WM_DDE_ACK to %p\n", ack.fAck ? "POSITIVE" : "NEGATIVE", (HWND)wparam); - - status = *((WORD *)&ack); - lparam = ReuseDDElParam(lparam, WM_DDE_EXECUTE, WM_DDE_ACK, status, hi); - - PostMessageW((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, lparam); - return 0; - } - - case WM_DDE_TERMINATE: - { - DDEACK ack; - WORD status; - - trace("server: got WM_DDE_TERMINATE from %p with %08lx\n", (HWND)wparam, lparam); - - ack.bAppReturnCode = 0; - ack.reserved = 0; - ack.fBusy = 0; - ack.fAck = 1; - - trace("server: posting %s WM_DDE_ACK to %p\n", ack.fAck ? "POSITIVE" : "NEGATIVE", (HWND)wparam); - - status = *((WORD *)&ack); - lparam = PackDDElParam(WM_DDE_ACK, status, 0); - - PostMessageW((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, lparam); - return 0; - } - - default: - break; - } - - return DefWindowProcW(hwnd, msg, wparam, lparam); -} - -static LRESULT WINAPI dde_client_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - return DefWindowProcA(hwnd, msg, wparam, lparam); -} - -static BOOL create_dde_windows(HWND *client, HWND *server) -{ - WNDCLASSA wcA; - WNDCLASSW wcW; - static const WCHAR server_class_name[] = {'d','d','e','_','s','e','r','v','e','r','_','w','i','n','d','o','w',0}; - static const char client_class_name[] = "dde_client_window"; - - memset(&wcW, 0, sizeof(wcW)); - wcW.lpfnWndProc = dde_server_wndprocW; - wcW.lpszClassName = server_class_name; - wcW.hInstance = GetModuleHandleA(0); - if (!RegisterClassW(&wcW)) return FALSE; - - memset(&wcA, 0, sizeof(wcA)); - wcA.lpfnWndProc = dde_client_wndproc; - wcA.lpszClassName = client_class_name; - wcA.hInstance = GetModuleHandleA(0); - assert(RegisterClassA(&wcA)); - - *server = CreateWindowExW(0, server_class_name, NULL, - WS_POPUP, - 100, 100, CW_USEDEFAULT, CW_USEDEFAULT, - GetDesktopWindow(), 0, - GetModuleHandleA(0), NULL); - assert(*server); - - *client = CreateWindowExA(0, client_class_name, NULL, - WS_POPUP, - 100, 100, CW_USEDEFAULT, CW_USEDEFAULT, - GetDesktopWindow(), 0, - GetModuleHandleA(0), NULL); - assert(*client); - - trace("server hwnd %p, client hwnd %p\n", *server, *client); - - ok(IsWindowUnicode(*server), "server has to be a unicode window\n"); - ok(!IsWindowUnicode(*client), "client has to be an ANSI window\n"); - - return TRUE; -} - -static HDDEDATA CALLBACK client_dde_callback(UINT uType, UINT uFmt, HCONV hconv, - HSZ hsz1, HSZ hsz2, HDDEDATA hdata, - ULONG_PTR dwData1, ULONG_PTR dwData2) -{ - static const char * const cmd_type[15] = { - "XTYP_ERROR", "XTYP_ADVDATA", "XTYP_ADVREQ", "XTYP_ADVSTART", - "XTYP_ADVSTOP", "XTYP_EXECUTE", "XTYP_CONNECT", "XTYP_CONNECT_CONFIRM", - "XTYP_XACT_COMPLETE", "XTYP_POKE", "XTYP_REGISTER", "XTYP_REQUEST", - "XTYP_DISCONNECT", "XTYP_UNREGISTER", "XTYP_WILDCONNECT" }; - UINT type; - const char *cmd_name; - - type = (uType & XTYP_MASK) >> XTYP_SHIFT; - cmd_name = (type <= 14) ? cmd_type[type] : "unknown"; - - trace("client_dde_callback: %04x (%s) %d %p %p %p %p %08lx %08lx\n", - uType, cmd_name, uFmt, hconv, hsz1, hsz2, hdata, dwData1, dwData2); - return 0; -} - -static void test_dde_aw_transaction(void) -{ - HSZ hsz_server; - DWORD dde_inst, ret, err; - HCONV hconv; - HWND hwnd_client, hwnd_server; - CONVINFO info; - HDDEDATA hdata; - static char test_cmd[] = "test dde command"; - - /* server: unicode, client: ansi */ - if (!create_dde_windows(&hwnd_client, &hwnd_server)) return; - - dde_inst = 0; - ret = DdeInitializeA(&dde_inst, client_dde_callback, APPCMD_CLIENTONLY, 0); - ok(ret == DMLERR_NO_ERROR, "DdeInitializeW failed with error %04x (%x)\n", - ret, DdeGetLastError(dde_inst)); - - hsz_server = DdeCreateStringHandleW(dde_inst, TEST_DDE_SERVICE, CP_WINUNICODE); - - hconv = DdeConnect(dde_inst, hsz_server, 0, NULL); - ok(hconv != 0, "DdeConnect error %x\n", DdeGetLastError(dde_inst)); - err = DdeGetLastError(dde_inst); - ok(err == DMLERR_NO_ERROR, "wrong dde error %x\n", err); - - info.cb = sizeof(info); - ret = DdeQueryConvInfo(hconv, QID_SYNC, &info); - ok(ret, "wrong info size %d, DdeQueryConvInfo error %x\n", ret, DdeGetLastError(dde_inst)); - /* should be CP_WINANSI since we used DdeInitializeA */ - ok(info.ConvCtxt.iCodePage == CP_WINANSI, "wrong iCodePage %d\n", info.ConvCtxt.iCodePage); - ok(!info.hConvPartner, "unexpected info.hConvPartner: %p\n", info.hConvPartner); -todo_wine { - ok((info.wStatus & DDE_FACK), "unexpected info.wStatus: %04x\n", info.wStatus); -} - ok((info.wStatus & (ST_CONNECTED | ST_CLIENT)) == (ST_CONNECTED | ST_CLIENT), "unexpected info.wStatus: %04x\n", info.wStatus); - ok(info.wConvst == XST_CONNECTED, "unexpected info.wConvst: %04x\n", info.wConvst); - ok(info.wType == 0, "unexpected info.wType: %04x\n", info.wType); - - trace("hwnd %p, hwndPartner %p\n", info.hwnd, info.hwndPartner); - - trace("sending test client transaction command\n"); - ret = 0xdeadbeef; - hdata = DdeClientTransaction((LPBYTE)test_cmd, strlen(test_cmd) + 1, hconv, (HSZ)0xdead, 0xbeef, XTYP_EXECUTE, 1000, &ret); - ok(!hdata, "DdeClientTransaction succeeded\n"); - ok(ret == DDE_FNOTPROCESSED, "wrong status code %04x\n", ret); - err = DdeGetLastError(dde_inst); - ok(err == DMLERR_NOTPROCESSED, "wrong dde error %x\n", err); - - trace("sending ANSI client transaction command\n"); - ret = 0xdeadbeef; - hdata = DdeClientTransaction((LPBYTE)exec_cmdA, lstrlenA(exec_cmdA) + 1, hconv, 0, 0, XTYP_EXECUTE, 1000, &ret); - ok(hdata != 0, "DdeClientTransaction returned %p, error %x\n", hdata, DdeGetLastError(dde_inst)); - ok(ret == DDE_FACK, "wrong status code %04x\n", ret); - - err = DdeGetLastError(dde_inst); - ok(err == DMLERR_NO_ERROR, "wrong dde error %x\n", err); - - trace("sending unicode client transaction command\n"); - ret = 0xdeadbeef; - hdata = DdeClientTransaction((LPBYTE)exec_cmdW, (lstrlenW(exec_cmdW) + 1) * sizeof(WCHAR), hconv, 0, 0, XTYP_EXECUTE, 1000, &ret); - ok(hdata != 0, "DdeClientTransaction returned %p, error %x\n", hdata, DdeGetLastError(dde_inst)); - ok(ret == DDE_FACK, "wrong status code %04x\n", ret); - err = DdeGetLastError(dde_inst); - ok(err == DMLERR_NO_ERROR, "wrong dde error %x\n", err); - - ok(DdeDisconnect(hconv), "DdeDisconnect error %x\n", DdeGetLastError(dde_inst)); - - info.cb = sizeof(info); - ret = DdeQueryConvInfo(hconv, QID_SYNC, &info); - ok(!ret, "DdeQueryConvInfo should fail\n"); - err = DdeGetLastError(dde_inst); -todo_wine { - ok(err == DMLERR_INVALIDPARAMETER, "wrong dde error %x\n", err); -} - - ok(DdeFreeStringHandle(dde_inst, hsz_server), "DdeFreeStringHandle error %x\n", DdeGetLastError(dde_inst)); - - /* This call hangs on win2k SP4 and XP SP1. - DdeUninitialize(dde_inst);*/ - - DestroyWindow(hwnd_client); - DestroyWindow(hwnd_server); -} - -static void test_DdeCreateStringHandleW(DWORD dde_inst, int codepage) -{ - static const WCHAR dde_string[] = {'D','D','E',' ','S','t','r','i','n','g',0}; - HSZ str_handle; - WCHAR bufW[256]; - char buf[256]; - ATOM atom; - int ret; - - str_handle = DdeCreateStringHandleW(dde_inst, dde_string, codepage); - ok(str_handle != 0, "DdeCreateStringHandleW failed with error %08x\n", - DdeGetLastError(dde_inst)); - - ret = DdeQueryStringW(dde_inst, str_handle, NULL, 0, codepage); - if (codepage == CP_WINANSI) - ok(ret == 1, "DdeQueryStringW returned wrong length %d\n", ret); - else - ok(ret == lstrlenW(dde_string), "DdeQueryStringW returned wrong length %d\n", ret); - - ret = DdeQueryStringW(dde_inst, str_handle, bufW, 256, codepage); - if (codepage == CP_WINANSI) - { - ok(ret == 1, "DdeQueryStringW returned wrong length %d\n", ret); - ok(!lstrcmpA("D", (LPCSTR)bufW), "DdeQueryStringW returned wrong string\n"); - } - else - { - ok(ret == lstrlenW(dde_string), "DdeQueryStringW returned wrong length %d\n", ret); - ok(!lstrcmpW(dde_string, bufW), "DdeQueryStringW returned wrong string\n"); - } - - ret = DdeQueryStringA(dde_inst, str_handle, buf, 256, CP_WINANSI); - if (codepage == CP_WINANSI) - { - ok(ret == 1, "DdeQueryStringA returned wrong length %d\n", ret); - ok(!lstrcmpA("D", buf), "DdeQueryStringW returned wrong string\n"); - } - else - { - ok(ret == lstrlenA("DDE String"), "DdeQueryStringA returned wrong length %d\n", ret); - ok(!lstrcmpA("DDE String", buf), "DdeQueryStringA returned wrong string %s\n", buf); - } - - ret = DdeQueryStringA(dde_inst, str_handle, buf, 256, CP_WINUNICODE); - if (codepage == CP_WINANSI) - { - ok(ret == 1, "DdeQueryStringA returned wrong length %d\n", ret); - ok(!lstrcmpA("D", buf), "DdeQueryStringA returned wrong string %s\n", buf); - } - else - { - ok(ret == lstrlenA("DDE String"), "DdeQueryStringA returned wrong length %d\n", ret); - ok(!lstrcmpW(dde_string, (LPCWSTR)buf), "DdeQueryStringW returned wrong string\n"); - } - - if (codepage == CP_WINANSI) - { - atom = FindAtomA((LPSTR)dde_string); - ok(atom != 0, "Expected a valid atom\n"); - - SetLastError(0xdeadbeef); - atom = GlobalFindAtomA((LPSTR)dde_string); - ok(atom == 0, "Expected 0, got %d\n", atom); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - } - else - { - atom = FindAtomW(dde_string); - ok(atom != 0, "Expected a valid atom\n"); - - SetLastError(0xdeadbeef); - atom = GlobalFindAtomW(dde_string); - ok(atom == 0, "Expected 0, got %d\n", atom); - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - } - - ok(DdeFreeStringHandle(dde_inst, str_handle), "DdeFreeStringHandle failed\n"); -} - -static void test_DdeCreateDataHandle(void) -{ - HDDEDATA hdata; - DWORD dde_inst; - DWORD size; - UINT res, err; - BOOL ret; - HSZ item; - LPBYTE ptr; - - dde_inst = 0; - res = DdeInitializeA(&dde_inst, client_ddeml_callback, APPCMD_CLIENTONLY, 0); - ok(res == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", res); - - item = DdeCreateStringHandleA(dde_inst, "item", CP_WINANSI); - ok(item != NULL, "Expected non-NULL hsz\n"); - - /* invalid instance id */ - DdeGetLastError(dde_inst); - hdata = DdeCreateDataHandle(0xdeadbeef, (LPBYTE)"data", MAX_PATH, 0, item, CF_TEXT, 0); - err = DdeGetLastError(dde_inst); - todo_wine - { - ok(hdata == NULL, "Expected NULL, got %p\n", hdata); - ok(err == DMLERR_INVALIDPARAMETER, - "Expected DMLERR_INVALIDPARAMETER, got %d\n", err); - } - - /* 0 instance id */ - DdeGetLastError(dde_inst); - hdata = DdeCreateDataHandle(0, (LPBYTE)"data", MAX_PATH, 0, item, CF_TEXT, 0); - err = DdeGetLastError(dde_inst); - todo_wine - { - ok(hdata == NULL, "Expected NULL, got %p\n", hdata); - ok(err == DMLERR_INVALIDPARAMETER, - "Expected DMLERR_INVALIDPARAMETER, got %d\n", err); - } - - /* NULL pSrc */ - DdeGetLastError(dde_inst); - hdata = DdeCreateDataHandle(dde_inst, NULL, MAX_PATH, 0, item, CF_TEXT, 0); - err = DdeGetLastError(dde_inst); - ok(hdata != NULL, "Expected non-NULL hdata\n"); - ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err); - - ptr = GlobalLock(hdata); - todo_wine - { - ok(ptr == NULL, "Expected NULL, got %p\n", ptr); - } - - ptr = DdeAccessData(hdata, &size); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(size == 260, "Expected 260, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - ret = DdeFreeDataHandle(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - /* cb is zero */ - DdeGetLastError(dde_inst); - hdata = DdeCreateDataHandle(dde_inst, (LPBYTE)"data", 0, 0, item, CF_TEXT, 0); - err = DdeGetLastError(dde_inst); - ok(hdata != NULL, "Expected non-NULL hdata\n"); - ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err); - - ptr = GlobalLock(hdata); - todo_wine - { - ok(ptr == NULL, "Expected NULL, got %p\n", ptr); - } - - ptr = DdeAccessData(hdata, &size); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(size == 0, "Expected 0, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - ret = DdeFreeDataHandle(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - /* cbOff is non-zero */ - DdeGetLastError(dde_inst); - hdata = DdeCreateDataHandle(dde_inst, (LPBYTE)"data", MAX_PATH, 2, item, CF_TEXT, 0); - err = DdeGetLastError(dde_inst); - ok(hdata != NULL, "Expected non-NULL hdata\n"); - ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err); - - ptr = GlobalLock(hdata); - todo_wine - { - ok(ptr == NULL, "Expected NULL, got %p\n", ptr); - } - - ptr = DdeAccessData(hdata, &size); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(size == 262, "Expected 262, got %d\n", size); - todo_wine - { - ok(lstrlenA((LPSTR)ptr) == 0, "Expected 0, got %d\n", lstrlenA((LPSTR)ptr)); - } - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - ret = DdeFreeDataHandle(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - /* NULL item */ - DdeGetLastError(dde_inst); - hdata = DdeCreateDataHandle(dde_inst, (LPBYTE)"data", MAX_PATH, 0, 0, CF_TEXT, 0); - err = DdeGetLastError(dde_inst); - ok(hdata != NULL, "Expected non-NULL hdata\n"); - ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err); - - ptr = GlobalLock(hdata); - todo_wine - { - ok(ptr == NULL, "Expected NULL, got %p\n", ptr); - } - - ptr = DdeAccessData(hdata, &size); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(!lstrcmpA((LPSTR)ptr, "data"), "Expected data, got %s\n", ptr); - ok(size == 260, "Expected 260, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - ret = DdeFreeDataHandle(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - /* NULL item */ - DdeGetLastError(dde_inst); - hdata = DdeCreateDataHandle(dde_inst, (LPBYTE)"data", MAX_PATH, 0, (HSZ)0xdeadbeef, CF_TEXT, 0); - err = DdeGetLastError(dde_inst); - ok(hdata != NULL, "Expected non-NULL hdata\n"); - ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err); - - ptr = GlobalLock(hdata); - todo_wine - { - ok(ptr == NULL, "Expected NULL, got %p\n", ptr); - } - - ptr = DdeAccessData(hdata, &size); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(!lstrcmpA((LPSTR)ptr, "data"), "Expected data, got %s\n", ptr); - ok(size == 260, "Expected 260, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - ret = DdeFreeDataHandle(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - /* invalid clipboard format */ - DdeGetLastError(dde_inst); - hdata = DdeCreateDataHandle(dde_inst, (LPBYTE)"data", MAX_PATH, 0, item, 0xdeadbeef, 0); - err = DdeGetLastError(dde_inst); - ok(hdata != NULL, "Expected non-NULL hdata\n"); - ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err); - - ptr = GlobalLock(hdata); - todo_wine - { - ok(ptr == NULL, "Expected NULL, got %p\n", ptr); - } - - ptr = DdeAccessData(hdata, &size); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(!lstrcmpA((LPSTR)ptr, "data"), "Expected data, got %s\n", ptr); - ok(size == 260, "Expected 260, got %d\n", size); - - ret = DdeUnaccessData(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - ret = DdeFreeDataHandle(hdata); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - ret = DdeUninitialize(dde_inst); - ok(res == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", res); -} - -static void test_DdeCreateStringHandle(void) -{ - DWORD dde_inst, ret; - - dde_inst = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = DdeInitializeW(&dde_inst, client_ddeml_callback, APPCMD_CLIENTONLY, 0); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - trace("Skipping the DDE test on a Win9x platform\n"); - return; - } - - ok(ret == DMLERR_INVALIDPARAMETER, "DdeInitializeW should fail, but got %04x instead\n", ret); - ok(DdeGetLastError(dde_inst) == DMLERR_INVALIDPARAMETER, "expected DMLERR_INVALIDPARAMETER\n"); - - dde_inst = 0; - ret = DdeInitializeW(&dde_inst, client_ddeml_callback, APPCMD_CLIENTONLY, 0); - ok(ret == DMLERR_NO_ERROR, "DdeInitializeW failed with error %04x (%08x)\n", - ret, DdeGetLastError(dde_inst)); - - test_DdeCreateStringHandleW(dde_inst, 0); - test_DdeCreateStringHandleW(dde_inst, CP_WINUNICODE); - test_DdeCreateStringHandleW(dde_inst, CP_WINANSI); - - ok(DdeUninitialize(dde_inst), "DdeUninitialize failed\n"); -} - -static void test_FreeDDElParam(void) -{ - HGLOBAL val, hglobal; - BOOL ret; - - ret = FreeDDElParam(WM_DDE_INITIATE, (LPARAM)NULL); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 100); - ret = FreeDDElParam(WM_DDE_INITIATE, (LPARAM)hglobal); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - val = GlobalFree(hglobal); - ok(val == NULL, "Expected NULL, got %p\n", val); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 100); - ret = FreeDDElParam(WM_DDE_ADVISE, (LPARAM)hglobal); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - val = GlobalFree(hglobal); - ok(val == hglobal, "Expected hglobal, got %p\n", val); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 100); - ret = FreeDDElParam(WM_DDE_UNADVISE, (LPARAM)hglobal); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - val = GlobalFree(hglobal); - ok(val == NULL, "Expected NULL, got %p\n", val); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 100); - ret = FreeDDElParam(WM_DDE_ACK, (LPARAM)hglobal); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - val = GlobalFree(hglobal); - ok(val == hglobal, "Expected hglobal, got %p\n", val); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 100); - ret = FreeDDElParam(WM_DDE_DATA, (LPARAM)hglobal); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - val = GlobalFree(hglobal); - ok(val == hglobal, "Expected hglobal, got %p\n", val); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 100); - ret = FreeDDElParam(WM_DDE_REQUEST, (LPARAM)hglobal); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - val = GlobalFree(hglobal); - ok(val == NULL, "Expected NULL, got %p\n", val); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 100); - ret = FreeDDElParam(WM_DDE_POKE, (LPARAM)hglobal); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - val = GlobalFree(hglobal); - ok(val == hglobal, "Expected hglobal, got %p\n", val); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 100); - ret = FreeDDElParam(WM_DDE_EXECUTE, (LPARAM)hglobal); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - val = GlobalFree(hglobal); - ok(val == NULL, "Expected NULL, got %p\n", val); -} - -static void test_PackDDElParam(void) -{ - UINT_PTR lo, hi, *ptr; - HGLOBAL hglobal; - LPARAM lparam; - BOOL ret; - - lparam = PackDDElParam(WM_DDE_INITIATE, 0xcafe, 0xbeef); - ok(lparam == 0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam); - ok(GlobalLock((HGLOBAL)lparam) == NULL, - "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam)); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_INITIATE, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafe, "Expected 0xcafe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_INITIATE, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - lparam = PackDDElParam(WM_DDE_TERMINATE, 0xcafe, 0xbeef); - ok(lparam == 0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam); - ok(GlobalLock((HGLOBAL)lparam) == NULL, - "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam)); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_TERMINATE, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafe, "Expected 0xcafe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_TERMINATE, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - lparam = PackDDElParam(WM_DDE_ADVISE, 0xcafe, 0xbeef); - ptr = GlobalLock((HGLOBAL)lparam); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(ptr[0] == 0xcafe, "Expected 0xcafe, got %08lx\n", ptr[0]); - ok(ptr[1] == 0xbeef, "Expected 0xbeef, got %08lx\n", ptr[1]); - - ret = GlobalUnlock((HGLOBAL)lparam); - ok(ret == 1, "Expected 1, got %d\n", ret); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_ADVISE, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafe, "Expected 0xcafe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_ADVISE, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - hglobal = GlobalFree((HGLOBAL)lparam); - ok(hglobal == (HGLOBAL)lparam, "Expected lparam, got %d\n", ret); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lparam = PackDDElParam(WM_DDE_UNADVISE, 0xcafe, 0xbeef); - ok(lparam == 0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam); - ok(GlobalLock((HGLOBAL)lparam) == NULL, - "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam)); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_UNADVISE, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafe, "Expected 0xcafe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_UNADVISE, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - lparam = PackDDElParam(WM_DDE_ACK, 0xcafe, 0xbeef); - ptr = GlobalLock((HGLOBAL)lparam); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(ptr[0] == 0xcafe, "Expected 0xcafe, got %08lx\n", ptr[0]); - ok(ptr[1] == 0xbeef, "Expected 0xbeef, got %08lx\n", ptr[1]); - - ret = GlobalUnlock((HGLOBAL)lparam); - ok(ret == 1, "Expected 1, got %d\n", ret); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_ACK, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafe, "Expected 0xcafe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_ACK, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - hglobal = GlobalFree((HGLOBAL)lparam); - ok(hglobal == (HGLOBAL)lparam, "Expected lparam, got %d\n", ret); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lparam = PackDDElParam(WM_DDE_DATA, 0xcafe, 0xbeef); - ptr = GlobalLock((HGLOBAL)lparam); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(ptr[0] == 0xcafe, "Expected 0xcafe, got %08lx\n", ptr[0]); - ok(ptr[1] == 0xbeef, "Expected 0xbeef, got %08lx\n", ptr[1]); - - ret = GlobalUnlock((HGLOBAL)lparam); - ok(ret == 1, "Expected 1, got %d\n", ret); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_DATA, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafe, "Expected 0xcafe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_DATA, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - hglobal = GlobalFree((HGLOBAL)lparam); - ok(hglobal == (HGLOBAL)lparam, "Expected lparam, got %d\n", ret); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lparam = PackDDElParam(WM_DDE_REQUEST, 0xcafe, 0xbeef); - ok(lparam == 0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam); - ok(GlobalLock((HGLOBAL)lparam) == NULL, - "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam)); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_REQUEST, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafe, "Expected 0xcafe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_REQUEST, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - lparam = PackDDElParam(WM_DDE_POKE, 0xcafe, 0xbeef); - ptr = GlobalLock((HGLOBAL)lparam); - ok(ptr != NULL, "Expected non-NULL ptr\n"); - ok(ptr[0] == 0xcafe, "Expected 0xcafe, got %08lx\n", ptr[0]); - ok(ptr[1] == 0xbeef, "Expected 0xbeef, got %08lx\n", ptr[1]); - - ret = GlobalUnlock((HGLOBAL)lparam); - ok(ret == 1, "Expected 1, got %d\n", ret); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_POKE, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafe, "Expected 0xcafe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_POKE, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - - hglobal = GlobalFree((HGLOBAL)lparam); - ok(hglobal == (HGLOBAL)lparam, "Expected lparam, got %d\n", ret); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lparam = PackDDElParam(WM_DDE_EXECUTE, 0xcafe, 0xbeef); - ok(lparam == 0xbeef, "Expected 0xbeef, got %08lx\n", lparam); - ok(GlobalLock((HGLOBAL)lparam) == NULL, - "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam)); - ok(GetLastError() == ERROR_INVALID_HANDLE, - "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError()); - - lo = hi = 0; - ret = UnpackDDElParam(WM_DDE_EXECUTE, lparam, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0, "Expected 0, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - ret = FreeDDElParam(WM_DDE_EXECUTE, lparam); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); -} - -static void test_UnpackDDElParam(void) -{ - UINT_PTR lo, hi, *ptr; - HGLOBAL hglobal; - BOOL ret; - - /* NULL lParam */ - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_INITIATE, (LPARAM)NULL, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0, "Expected 0, got %08lx\n", lo); - ok(hi == 0, "Expected 0, got %08lx\n", hi); - - /* NULL lo */ - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_INITIATE, 0xcafebabe, NULL, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xdead, "Expected 0xdead, got %08lx\n", lo); - ok(hi == 0xcafe, "Expected 0xcafe, got %08lx\n", hi); - - /* NULL hi */ - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_INITIATE, 0xcafebabe, &lo, NULL); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xbabe, "Expected 0xbabe, got %08lx\n", lo); - ok(hi == 0xbeef, "Expected 0xbeef, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_INITIATE, 0xcafebabe, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xbabe, "Expected 0xbabe, got %08lx\n", lo); - ok(hi == 0xcafe, "Expected 0xcafe, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_TERMINATE, 0xcafebabe, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xbabe, "Expected 0xbabe, got %08lx\n", lo); - ok(hi == 0xcafe, "Expected 0xcafe, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_ADVISE, (LPARAM)NULL, &lo, &hi); - ok(ret == FALSE, "Expected FALSE, got %d\n", ret); - ok(lo == 0, "Expected 0, got %08lx\n", lo); - ok(hi == 0, "Expected 0, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_ADVISE, 0xcafebabe, &lo, &hi); - ok(ret == FALSE, "Expected FALSE, got %d\n", ret); - ok(lo == 0, "Expected 0, got %08lx\n", lo); - ok(hi == 0, "Expected 0, got %08lx\n", hi); - - hglobal = GlobalAlloc(GMEM_DDESHARE, 2); - ptr = GlobalLock(hglobal); - ptr[0] = 0xcafebabe; - ptr[1] = 0xdeadbeef; - GlobalUnlock(hglobal); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_ADVISE, (LPARAM)hglobal, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafebabe, "Expected 0xcafebabe, got %08lx\n", lo); - ok(hi == 0xdeadbeef, "Expected 0xdeadbeef, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_UNADVISE, 0xcafebabe, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xbabe, "Expected 0xbabe, got %08lx\n", lo); - ok(hi == 0xcafe, "Expected 0xcafe, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_ACK, 0xcafebabe, &lo, &hi); - ok(ret == FALSE, "Expected FALSE, got %d\n", ret); - ok(lo == 0, "Expected 0, got %08lx\n", lo); - ok(hi == 0, "Expected 0, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_ACK, (LPARAM)hglobal, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafebabe, "Expected 0xcafebabe, got %08lx\n", lo); - ok(hi == 0xdeadbeef, "Expected 0xdeadbeef, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_DATA, 0xcafebabe, &lo, &hi); - ok(ret == FALSE, "Expected FALSE, got %d\n", ret); - ok(lo == 0, "Expected 0, got %08lx\n", lo); - ok(hi == 0, "Expected 0, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_DATA, (LPARAM)hglobal, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafebabe, "Expected 0xcafebabe, got %08lx\n", lo); - ok(hi == 0xdeadbeef, "Expected 0xdeadbeef, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_REQUEST, 0xcafebabe, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xbabe, "Expected 0xbabe, got %08lx\n", lo); - ok(hi == 0xcafe, "Expected 0xcafe, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_POKE, 0xcafebabe, &lo, &hi); - ok(ret == FALSE, "Expected FALSE, got %d\n", ret); - ok(lo == 0, "Expected 0, got %08lx\n", lo); - ok(hi == 0, "Expected 0, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_POKE, (LPARAM)hglobal, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0xcafebabe, "Expected 0xcafebabe, got %08lx\n", lo); - ok(hi == 0xdeadbeef, "Expected 0xdeadbeef, got %08lx\n", hi); - - lo = 0xdead; - hi = 0xbeef; - ret = UnpackDDElParam(WM_DDE_EXECUTE, 0xcafebabe, &lo, &hi); - ok(ret == TRUE, "Expected TRUE, got %d\n", ret); - ok(lo == 0, "Expected 0, got %08lx\n", lo); - ok(hi == 0xcafebabe, "Expected 0xcafebabe, got %08lx\n", hi); -} - -START_TEST(dde) -{ - int argc; - char **argv; - char buffer[MAX_PATH]; - STARTUPINFO startup; - PROCESS_INFORMATION proc; - - argc = winetest_get_mainargs(&argv); - if (argc == 3) - { - if (!lstrcmpA(argv[2], "ddeml")) - test_ddeml_client(); - else if (!lstrcmpA(argv[2], "msg")) - test_msg_client(); - - return; - } - - ZeroMemory(&startup, sizeof(STARTUPINFO)); - sprintf(buffer, "%s dde ddeml", argv[0]); - startup.cb = sizeof(startup); - startup.dwFlags = STARTF_USESHOWWINDOW; - startup.wShowWindow = SW_SHOWNORMAL; - - CreateProcessA(NULL, buffer, NULL, NULL, FALSE, - 0, NULL, NULL, &startup, &proc); - - test_msg_server(proc.hProcess); - - sprintf(buffer, "%s dde msg", argv[0]); - CreateProcessA(NULL, buffer, NULL, NULL, FALSE, - 0, NULL, NULL, &startup, &proc); - - test_ddeml_server(proc.hProcess); - - test_dde_aw_transaction(); - - test_DdeCreateDataHandle(); - test_DdeCreateStringHandle(); - test_FreeDDElParam(); - test_PackDDElParam(); - test_UnpackDDElParam(); -} diff --git a/rostests/winetests/user32/dialog.c b/rostests/winetests/user32/dialog.c deleted file mode 100755 index 8bf3c290b95..00000000000 --- a/rostests/winetests/user32/dialog.c +++ /dev/null @@ -1,937 +0,0 @@ -/* Unit test suite for the dialog functions. - * - * Copyright 2004 Bill Medland - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 test suite currently works by building a quite complex hierarchy of - * objects in a variety of styles and then performs a limited number of tests - * for the previous and next dialog group or tab items. - * - * The test specifically does not test all possibilities at this time since - * there are several cases where the Windows behaviour is rather strange and - * significant work would be required to get the Wine code to duplicate the - * strangeness, especially since most are in situations that would not - * normally be met. - */ - -#include -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winuser.h" - -#define MAXHWNDS 1024 -static HWND hwnd [MAXHWNDS]; -static unsigned int numwnds=1; /* 0 is reserved for null */ - -/* Global handles */ -static HINSTANCE g_hinst; /* This application's HINSTANCE */ -static HWND g_hwndMain, g_hwndButton1, g_hwndButton2, g_hwndButtonCancel; -static HWND g_hwndTestDlg, g_hwndTestDlgBut1, g_hwndTestDlgBut2, g_hwndTestDlgEdit; -static HWND g_hwndInitialFocusT1, g_hwndInitialFocusT2, g_hwndInitialFocusGroupBox; - -static LONG g_styleInitialFocusT1, g_styleInitialFocusT2; -static BOOL g_bInitialFocusInitDlgResult; - -static int g_terminated; - -typedef struct { - unsigned int id; - int parent; - DWORD style; - DWORD exstyle; -} h_entry; - -static const h_entry hierarchy [] = { - /* 0 is reserved for the null window */ - { 1, 0, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE}, - { 20, 1, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 2, 1, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT}, - { 60, 2, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - /* What happens with groups when the parent is disabled */ - { 8, 2, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, WS_EX_CONTROLPARENT}, - { 85, 8, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_GROUP, 0}, - { 9, 8, WS_CHILD, WS_EX_CONTROLPARENT}, - { 86, 9, WS_CHILD | WS_VISIBLE, 0}, - { 87, 9, WS_CHILD | WS_VISIBLE, 0}, - { 31, 8, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 10, 2, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT}, - { 88, 10, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 11, 10, WS_CHILD, WS_EX_CONTROLPARENT}, - { 89, 11, WS_CHILD | WS_VISIBLE, 0}, - { 32, 11, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 90, 11, WS_CHILD | WS_VISIBLE, 0}, - { 33, 10, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 21, 2, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 61, 2, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - { 3, 1, WS_CHILD | WS_VISIBLE | DS_CONTROL, 0}, - { 22, 3, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 62, 3, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - { 7, 3, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT}, - { 4, 7, WS_CHILD | WS_VISIBLE | DS_CONTROL, 0}, - { 83, 4, WS_CHILD | WS_VISIBLE, 0}, - { 5, 4, WS_CHILD | WS_VISIBLE | DS_CONTROL, 0}, - /* A couple of controls around the main dialog */ - { 29, 5, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 81, 5, WS_CHILD | WS_VISIBLE, 0}, - /* The main dialog with lots of controls */ - { 6, 5, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT}, - /* At the start of a dialog */ - /* Disabled controls are skipped */ - { 63, 6, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 0}, - /* Invisible controls are skipped */ - { 64, 6, WS_CHILD | WS_TABSTOP, 0}, - /* Invisible disabled controls are skipped */ - { 65, 6, WS_CHILD | WS_DISABLED | WS_TABSTOP, 0}, - /* Non-tabstop controls are skipped for tabs but not for groups */ - { 66, 6, WS_CHILD | WS_VISIBLE, 0}, - /* End of first group, with no tabstops in it */ - { 23, 6, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - /* At last a tabstop */ - { 67, 6, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - /* A group that is totally disabled or invisible */ - { 24, 6, WS_CHILD | WS_DISABLED | WS_GROUP, 0}, - { 68, 6, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 0}, - { 69, 6, WS_CHILD | WS_TABSTOP, 0}, - /* A valid group in the middle of the dialog (not the first nor last group*/ - { 25, 6, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - /* A non-tabstop item will be skipped for tabs */ - { 70, 6, WS_CHILD | WS_VISIBLE, 0}, - /* A disabled item will be skipped for tabs and groups */ - { 71, 6, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 0}, - /* A valid item will be found for tabs and groups */ - { 72, 6, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - /* A disabled item to skip when looking for the next group item */ - { 73, 6, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 0}, - /* The next group begins with an enabled visible label */ - { 26, 6, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - { 74, 6, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - { 75, 6, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - /* That group is terminated by a disabled label */ - { 27, 6, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_GROUP, 0}, - { 76, 6, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - { 77, 6, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - /* That group is terminated by an invisible label */ - { 28, 6, WS_CHILD | WS_GROUP, 0}, - /* The end of the dialog with item for loop and recursion testing */ - { 78, 6, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - /* No tabstop so skipped for prev tab, but found for prev group */ - { 79, 6, WS_CHILD | WS_VISIBLE, 0}, - { 80, 6, WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 0}, - /* A couple of controls after the main dialog */ - { 82, 5, WS_CHILD | WS_VISIBLE, 0}, - { 30, 5, WS_CHILD | WS_VISIBLE | WS_GROUP, 0}, - /* And around them */ - { 84, 4, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0}, - {0, 0, 0, 0} -}; - -static BOOL CreateWindows (HINSTANCE hinst) -{ - const h_entry *p = hierarchy; - - while (p->id != 0) - { - DWORD style, exstyle; - char ctrlname[9]; - - /* Basically assert that the hierarchy is valid and track the - * maximum control number - */ - if (p->id >= numwnds) - { - if (p->id >= sizeof(hwnd)/sizeof(hwnd[0])) - { - trace ("Control %d is out of range\n", p->id); - return FALSE; - } - else - numwnds = p->id+1; - } - if (p->id <= 0) - { - trace ("Control %d is out of range\n", p->id); - return FALSE; - } - if (hwnd[p->id] != 0) - { - trace ("Control %d is used more than once\n", p->id); - return FALSE; - } - - /* Create the control */ - sprintf (ctrlname, "ctrl%4.4d", p->id); - hwnd[p->id] = CreateWindowEx (p->exstyle, TEXT(p->parent ? "static" : "GetNextDlgItemWindowClass"), TEXT(ctrlname), p->style, 10, 10, 10, 10, hwnd[p->parent], p->parent ? (HMENU) (2000 + p->id) : 0, hinst, 0); - if (!hwnd[p->id]) - { - trace ("Failed to create control %d\n", p->id); - return FALSE; - } - - /* Check that the styles are as we specified (except the main one - * which is quite frequently messed up). If this keeps breaking then - * we could mask out the bits that don't concern us. - */ - if (p->parent) - { - style = GetWindowLong (hwnd[p->id], GWL_STYLE); - exstyle = GetWindowLong (hwnd[p->id], GWL_EXSTYLE); - if (style != p->style || exstyle != p->exstyle) - { - trace ("Style mismatch at %d: %8.8x %8.8x cf %8.8x %8.8x\n", p->id, style, exstyle, p->style, p->exstyle); - } - } - p++; - } - - return TRUE; -} - -/* Form the lParam of a WM_KEYDOWN message */ -static DWORD KeyDownData (int repeat, int scancode, int extended, int wasdown) -{ - return ((repeat & 0x0000FFFF) | ((scancode & 0x00FF) >> 16) | - (extended ? 0x01000000 : 0) | (wasdown ? 0x40000000 : 0)); -} - -/* Form a WM_KEYDOWN VK_TAB message to the specified window */ -static void FormTabMsg (MSG *pMsg, HWND hwnd) -{ - pMsg->hwnd = hwnd; - pMsg->message = WM_KEYDOWN; - pMsg->wParam = VK_TAB; - pMsg->lParam = KeyDownData (1, 0x0F, 0, 0); - /* pMsg->time is not set. It shouldn't be needed */ - /* pMsg->pt is ignored */ -} - -/* Form a WM_KEYDOWN VK_RETURN message to the specified window */ -static void FormEnterMsg (MSG *pMsg, HWND hwnd) -{ - pMsg->hwnd = hwnd; - pMsg->message = WM_KEYDOWN; - pMsg->wParam = VK_RETURN; - pMsg->lParam = KeyDownData (1, 0x1C, 0, 0); - /* pMsg->time is not set. It shouldn't be needed */ - /* pMsg->pt is ignored */ -} - -/*********************************************************************** - * - * The actual tests - */ - -typedef struct -{ - int isok; /* or is it todo */ - int test; - int dlg; - int ctl; - int tab; - int prev; - int res; -} test_record; - -static int id (HWND h) -{ - unsigned int i; - for (i = 0; i < numwnds; i++) - if (hwnd[i] == h) - return i; - return -1; -} - -/* Tests - * - * Tests 1-8 test the hCtl argument of null or the dialog itself. - * - * 1. Prev Group of null is null - * 2. Prev Tab of null is null - * 3. Prev Group of hDlg in hDlg is null - * 4. Prev Tab of hDlg in hDlg is null - * 5. Next Group of null is first visible enabled child - * Check it skips invisible, disabled and both. - * 6. Next Tab of null is first visible enabled tabstop - * Check it skips invisible, disabled, nontabstop, and in combination. - * 7. Next Group of hDlg in hDlg is as of null - * 8. Next Tab of hDlg in hDlg is as of null - * - * Tests 9-14 test descent - * - * 9. DS_CONTROL does not result in descending the hierarchy for Tab Next - * 10. DS_CONTROL does not result in descending the hierarchy for Group Next - * 11. WS_EX_CONTROLPARENT results in descending the hierarchy for Tab Next - * 12. WS_EX_CONTROLPARENT results in descending the hierarchy for Group Next - * 13. WS_EX_CONTROLPARENT results in descending the hierarchy for Tab Prev - * 14. WS_EX_CONTROLPARENT results in descending the hierarchy for Group Prev - * - * Tests 15-24 are the basic Prev/Next Group tests - * - * 15. Next Group of a visible enabled non-group control is the next visible - * enabled non-group control, if there is one before the next group - * 16. Next Group of a visible enabled non-group control wraps around to the - * beginning of the group on finding a control that starts another group. - * Note that the group is in the middle of the dialog. - * 17. As 16 except note that the next group is started with a disabled - * visible control. - * 18. As 16 except note that the next group is started with an invisible - * enabled control. - * 19. Next Group wraps around the controls of the dialog - * 20. Next Group is the same even if the initial control is disabled. - * 21. Next Group is the same even if the initial control is invisible. - * 22. Next Group is the same even if the initial control has the group style - * 23. Next Group returns the initial control if there is no visible enabled - * control in the group. (Initial control disabled and not group style). - * 24. Prev version of test 16. - * Prev Group of a visible enabled non-group control wraps around to the - * beginning of the group on finding a control that starts the group. - * Note that the group is in the middle of the dialog. - * - * In tests 25 to 28 the control is sitting under dialogs which do not have - * the WS_EX_CONTROLPARENT style and so cannot be reached from the top of - * the dialog. - * - * 25. Next Group of an inaccessible control is as if it were accessible - * 26. Prev Group of an inaccessible control begins searching at the highest - * level ancestor that did not permit recursion down the hierarchy - * 27. Next Tab of an inaccessible control is as if it were accessible - * 28. Prev Tab of an inaccessible control begins searching at the highest - * level ancestor that did not permit recursion down the hierarchy. - * - * Tests 29- are the basic Tab tests - * - * 29. Next Tab of a control is the next visible enabled control with the - * Tabstop style (N.B. skips disabled, invisible and non-tabstop) - * 30. Prev Tab of a control is the previous visible enabled control with the - * Tabstop style (N.B. skips disabled, invisible and non-tabstop) - * 31. Next Tab test with at least two layers of descent and finding the - * result not at the first control. - * 32. Next Tab test with at least two layers of descent with the descent and - * control at the start of each level. - * 33. Prev Tab test with at least two layers of descent and finding the - * result not at the last control. - * 34. Prev Tab test with at least two layers of descent with the descent and - * control at the end of each level. - * - * 35. Passing NULL may result in the first child being the one returned. - * (group test) - * 36. Passing NULL may result in the first child being the one returned. - * (tab test) - */ - -static void GetNextDlgItemTest (void) -{ - static test_record test [] = - { - /* isok test dlg ctl tab prev res */ - - { 1, 1, 6, 0, 0, 1, 0}, - { 1, 2, 6, 0, 1, 1, 0}, - { 1, 3, 6, 6, 0, 1, 0}, - { 1, 4, 6, 6, 1, 1, 0}, - { 1, 5, 6, 0, 0, 0, 66}, - { 1, 6, 6, 0, 1, 0, 67}, - { 1, 7, 6, 6, 0, 0, 66}, - { 1, 8, 6, 6, 1, 0, 67}, - - { 1, 9, 4, 83, 1, 0, 84}, - { 1, 10, 4, 83, 0, 0, 5}, - { 1, 11, 5, 81, 1, 0, 67}, - { 1, 12, 5, 81, 0, 0, 66}, - { 1, 13, 5, 82, 1, 1, 78}, - - { 1, 14, 5, 82, 0, 1, 79}, - { 1, 15, 6, 70, 0, 0, 72}, - { 1, 16, 6, 72, 0, 0, 25}, - { 1, 17, 6, 75, 0, 0, 26}, - { 1, 18, 6, 77, 0, 0, 76}, - { 1, 19, 6, 79, 0, 0, 66}, - { 1, 20, 6, 71, 0, 0, 72}, - { 1, 21, 6, 64, 0, 0, 66}, - - { 1, 22, 6, 25, 0, 0, 70}, - { 1, 23, 6, 68, 0, 0, 68}, - { 1, 24, 6, 25, 0, 1, 72}, - { 1, 25, 1, 70, 0, 0, 72}, - /*{ 0, 26, 1, 70, 0, 1, 3}, Crashes Win95*/ - { 1, 27, 1, 70, 1, 0, 72}, - /*{ 0, 28, 1, 70, 1, 1, 61}, Crashes Win95*/ - - { 1, 29, 6, 67, 1, 0, 72}, - { 1, 30, 6, 72, 1, 1, 67}, - - { 1, 35, 2, 0, 0, 0, 60}, - { 1, 36, 2, 0, 1, 0, 60}, - - { 0, 0, 0, 0, 0, 0, 0} /* End of test */ - }; - const test_record *p = test; - - ok (CreateWindows (g_hinst), "Could not create test windows\n"); - - while (p->dlg) - { - HWND a; - a = (p->tab ? GetNextDlgTabItem : GetNextDlgGroupItem) (hwnd[p->dlg], hwnd[p->ctl], p->prev); - if (p->isok) - { - ok (a == hwnd[p->res], "Test %d: %s %s item of %d in %d was %d instead of %d\n", p->test, p->prev ? "Prev" : "Next", p->tab ? "Tab" : "Group", p->ctl, p->dlg, id(a), p->res); - } - else - { - todo_wine - { - ok (a == hwnd[p->res], "Test %d: %s %s item of %d in %d was actually %d matching expected %d\n", p->test, p->prev ? "Prev" : "Next", p->tab ? "Tab" : "Group", p->ctl, p->dlg, id(a), p->res); - } - } - p++; - } -} - -/* - * OnMainWindowCreate - */ -static BOOL OnMainWindowCreate (HWND hwnd, LPCREATESTRUCT lpcs) -{ - g_hwndButton1 = CreateWindow (TEXT("button"), TEXT("Button &1"), - WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON | BS_TEXT, - 10, 10, 80, 80, hwnd, (HMENU)100, g_hinst, 0); - if (!g_hwndButton1) return FALSE; - - g_hwndButton2 = CreateWindow (TEXT("button"), TEXT("Button &2"), - WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_TEXT, - 110, 10, 80, 80, hwnd, (HMENU)200, g_hinst, 0); - if (!g_hwndButton2) return FALSE; - - g_hwndButtonCancel = CreateWindow (TEXT("button"), TEXT("Cancel"), - WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_TEXT, - 210, 10, 80, 80, hwnd, (HMENU)IDCANCEL, g_hinst, 0); - if (!g_hwndButtonCancel) return FALSE; - - return TRUE; -} - - -/* - * OnTestDlgCreate - */ - -static BOOL OnTestDlgCreate (HWND hwnd, LPCREATESTRUCT lpcs) -{ - g_hwndTestDlgEdit = CreateWindowEx ( WS_EX_LEFT | WS_EX_LTRREADING | - WS_EX_RIGHTSCROLLBAR | WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE, - TEXT("Edit"), TEXT("Edit"), - WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_LEFT | ES_AUTOHSCROLL, - 16,33,184,24, hwnd, (HMENU)101, g_hinst, 0); - if (!g_hwndTestDlgEdit) return FALSE; - - g_hwndTestDlgBut1 = CreateWindowEx ( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR - | WS_EX_NOPARENTNOTIFY, - TEXT("button"), TEXT("Button &1"), - WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_TEXT, - 204,33,30,24, hwnd, (HMENU)201, g_hinst, 0); - if (!g_hwndTestDlgBut1) return FALSE; - - g_hwndTestDlgBut2 = CreateWindowEx ( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR - | WS_EX_NOPARENTNOTIFY, TEXT("button"), - TEXT("Button &2"), - WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | BS_TEXT, - 90,102,80,24, hwnd, (HMENU)IDCANCEL, g_hinst, 0); - if (!g_hwndTestDlgBut2) return FALSE; - - return TRUE; -} - -static LRESULT CALLBACK main_window_procA (HWND hwnd, UINT uiMsg, WPARAM wParam, - LPARAM lParam) -{ - LRESULT result; - switch (uiMsg) - { - /* Add blank case statements for these to ensure we don't use them - * by mistake. - */ - case DM_GETDEFID: break; - case DM_SETDEFID: break; - - case WM_CREATE: - return (OnMainWindowCreate (hwnd, - (LPCREATESTRUCTA) lParam) ? 0 : (LRESULT) -1); - case WM_COMMAND: - if (wParam == IDCANCEL) - { - g_terminated = TRUE; - return 0; - } - break; - } - - result=DefWindowProcA (hwnd, uiMsg, wParam, lParam); - return result; -} - -static LRESULT CALLBACK disabled_test_proc (HWND hwnd, UINT uiMsg, - WPARAM wParam, LPARAM lParam) -{ - LRESULT result; - DWORD dw; - HWND hwndOk; - - switch (uiMsg) - { - case WM_INITDIALOG: - dw = SendMessage(hwnd, DM_GETDEFID, 0, 0); - assert(DC_HASDEFID == HIWORD(dw)); - hwndOk = GetDlgItem(hwnd, LOWORD(dw)); - assert(hwndOk); - EnableWindow(hwndOk, FALSE); - - PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0); - PostMessage(hwnd, WM_COMMAND, IDCANCEL, 0); - break; - case WM_COMMAND: - if (wParam == IDOK) - { - g_terminated = TRUE; - EndDialog(hwnd, 0); - return 0; - } - else if (wParam == IDCANCEL) - { - EndDialog(hwnd, 0); - return 0; - } - break; - } - - result=DefWindowProcA (hwnd, uiMsg, wParam, lParam); - return result; -} - -static LRESULT CALLBACK testDlgWinProc (HWND hwnd, UINT uiMsg, WPARAM wParam, - LPARAM lParam) -{ - LRESULT result; - switch (uiMsg) - { - /* Add blank case statements for these to ensure we don't use them - * by mistake. - */ - case DM_GETDEFID: break; - case DM_SETDEFID: break; - - case WM_CREATE: - return (OnTestDlgCreate (hwnd, - (LPCREATESTRUCTA) lParam) ? 0 : (LRESULT) -1); - } - - result=DefWindowProcA (hwnd, uiMsg, wParam, lParam); - return result; -} - -static BOOL RegisterWindowClasses (void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = DefWindowProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = g_hinst; - cls.hIcon = NULL; - cls.hCursor = LoadCursorA (NULL, IDC_ARROW); - cls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); - cls.lpszMenuName = NULL; - cls.lpszClassName = "GetNextDlgItemWindowClass"; - - if (!RegisterClassA (&cls)) return FALSE; - - cls.lpfnWndProc = main_window_procA; - cls.lpszClassName = "IsDialogMessageWindowClass"; - - if (!RegisterClassA (&cls)) return FALSE; - - GetClassInfoA(0, "#32770", &cls); - cls.lpfnWndProc = testDlgWinProc; - cls.lpszClassName = "WM_NEXTDLGCTLWndClass"; - if (!RegisterClassA (&cls)) return FALSE; - - return TRUE; -} - -static void WM_NEXTDLGCTLTest(void) -{ - DWORD dwVal; - - g_hwndTestDlg = CreateWindowEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR - | WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT | WS_EX_APPWINDOW, - "WM_NEXTDLGCTLWndClass", - "WM_NEXTDLGCTL Message test window", - WS_POPUPWINDOW | WS_CLIPSIBLINGS | WS_DLGFRAME | WS_OVERLAPPED | - WS_MINIMIZEBOX | WS_MAXIMIZEBOX | DS_3DLOOK | DS_SETFONT | DS_MODALFRAME, - 0, 0, 235, 135, - NULL, NULL, g_hinst, 0); - - assert (g_hwndTestDlg); - assert (g_hwndTestDlgBut1); - assert (g_hwndTestDlgBut2); - assert (g_hwndTestDlgEdit); - - /* - * Test message DM_SETDEFID - */ - - DefDlgProcA( g_hwndTestDlg, DM_SETDEFID, IDCANCEL, 0 ); - DefDlgProcA( g_hwndTestDlgBut1, BM_SETSTYLE, BS_DEFPUSHBUTTON, FALSE ); - dwVal = DefDlgProcA(g_hwndTestDlg, DM_GETDEFID, 0, 0); - - ok ( IDCANCEL == (LOWORD(dwVal)), "Did not set default ID\n" ); - - /* - * Check whether message WM_NEXTDLGCTL is changing the focus to next control and if - * the destination control is a button, style of the button should be changed to - * BS_DEFPUSHBUTTON with out making it default. - */ - - /* - * Keep the focus on Edit control. - */ - - if ( SetFocus( g_hwndTestDlgEdit ) ) - { - ok ((GetFocus() == g_hwndTestDlgEdit), "Focus didn't set on Edit control\n"); - - /* - * Test message WM_NEXTDLGCTL - */ - DefDlgProcA( g_hwndTestDlg, WM_NEXTDLGCTL, 0, 0 ); - ok ((GetFocus() == g_hwndTestDlgBut1), "Focus didn't move to first button\n"); - - /* - * Check whether the default button ID got changed by sending message "WM_NEXTDLGCTL" - */ - dwVal = DefDlgProcA(g_hwndTestDlg, DM_GETDEFID, 0, 0); - ok ( IDCANCEL == (LOWORD(dwVal)), "WM_NEXTDLGCTL changed default button\n"); - - /* - * Check whether the style of the button which got the focus, changed to BS_DEFPUSHBUTTON and - * the style of default button changed to BS_PUSHBUTTON. - */ - if ( IDCANCEL == (LOWORD(dwVal)) ) - { - ok ( ((GetWindowLong( g_hwndTestDlgBut1, GWL_STYLE)) & BS_DEFPUSHBUTTON), - "Button1 style not set to BS_DEFPUSHBUTTON\n" ); - - ok ( !((GetWindowLong( g_hwndTestDlgBut2, GWL_STYLE)) & BS_DEFPUSHBUTTON), - "Button2's style not chaged to BS_PUSHBUTTON\n" ); - } - - /* - * Move focus to Button2 using "WM_NEXTDLGCTL" - */ - DefDlgProcA( g_hwndTestDlg, WM_NEXTDLGCTL, 0, 0 ); - ok ((GetFocus() == g_hwndTestDlgBut2), "Focus didn't move to second button\n"); - - /* - * Check whether the default button ID got changed by sending message "WM_NEXTDLGCTL" - */ - dwVal = DefDlgProcA(g_hwndTestDlg, DM_GETDEFID, 0, 0); - ok ( IDCANCEL == (LOWORD(dwVal)), "WM_NEXTDLGCTL changed default button\n"); - - /* - * Check whether the style of the button which got the focus, changed to BS_DEFPUSHBUTTON and - * the style of button which lost the focus changed to BS_PUSHBUTTON. - */ - if ( IDCANCEL == (LOWORD(dwVal)) ) - { - ok ( ((GetWindowLong( g_hwndTestDlgBut2, GWL_STYLE)) & BS_DEFPUSHBUTTON), - "Button2 style not set to BS_DEFPUSHBUTTON\n" ); - - ok ( !((GetWindowLong( g_hwndTestDlgBut1, GWL_STYLE)) & BS_DEFPUSHBUTTON), - "Button1's style not chaged to BS_PUSHBUTTON\n" ); - } - - /* - * Move focus to Edit control using "WM_NEXTDLGCTL" - */ - DefDlgProcA( g_hwndTestDlg, WM_NEXTDLGCTL, 0, 0 ); - ok ((GetFocus() == g_hwndTestDlgEdit), "Focus didn't move to Edit control\n"); - - /* - * Check whether the default button ID got changed by sending message "WM_NEXTDLGCTL" - */ - dwVal = DefDlgProcA(g_hwndTestDlg, DM_GETDEFID, 0, 0); - ok ( IDCANCEL == (LOWORD(dwVal)), "WM_NEXTDLGCTL changed default button\n"); - } - DestroyWindow(g_hwndTestDlg); -} - -static void IsDialogMessageWTest (void) -{ - MSG msg; - - g_hwndMain = CreateWindow ("IsDialogMessageWindowClass", "IsDialogMessageWindowClass", - WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - NULL, NULL, g_hinst, 0); - - assert (g_hwndMain); - assert (g_hwndButton1); - assert (g_hwndButtonCancel); - - /* The focus should initially be nowhere. The first TAB should take it - * to the first button. The second TAB should take it to the Cancel - * button. - */ - FormTabMsg (&msg, g_hwndMain); - ok (IsDialogMessage (g_hwndMain, &msg), "Did not handle first TAB\n"); - ok ((GetFocus() == g_hwndButton1), "Focus did not move to first button\n"); - FormTabMsg (&msg, g_hwndButton1); - ok (IsDialogMessage (g_hwndMain, &msg), "Did not handle second TAB\n"); - ok ((GetFocus() == g_hwndButtonCancel), - "Focus did not move to cancel button\n"); - FormEnterMsg (&msg, g_hwndButtonCancel); - ok (IsDialogMessage (g_hwndMain, &msg), "Did not handle the ENTER\n"); - ok (g_terminated, "ENTER did not terminate\n"); -} - - -static INT_PTR CALLBACK delayFocusDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wParam, - LPARAM lParam) -{ - switch (uiMsg) - { - case WM_INITDIALOG: - g_hwndMain = hDlg; - g_hwndInitialFocusGroupBox = GetDlgItem(hDlg,100); - g_hwndButton1 = GetDlgItem(hDlg,200); - g_hwndButton2 = GetDlgItem(hDlg,201); - g_hwndButtonCancel = GetDlgItem(hDlg,IDCANCEL); - g_styleInitialFocusT1 = GetWindowLong(g_hwndInitialFocusGroupBox, GWL_STYLE); - - /* Initially check the second radio button */ - SendMessage(g_hwndButton1, BM_SETCHECK, BST_UNCHECKED, 0); - SendMessage(g_hwndButton2, BM_SETCHECK, BST_CHECKED , 0); - /* Continue testing after dialog initialization */ - PostMessage(hDlg, WM_USER, 0, 0); - return g_bInitialFocusInitDlgResult; - - case WM_COMMAND: - if (LOWORD(wParam) == IDCANCEL) - { - EndDialog(hDlg, LOWORD(wParam)); - return TRUE; - } - return FALSE; - - case WM_USER: - g_styleInitialFocusT2 = GetWindowLong(hDlg, GWL_STYLE); - g_hwndInitialFocusT1 = GetFocus(); - SetFocus(hDlg); - g_hwndInitialFocusT2 = GetFocus(); - PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0); - return TRUE; - } - - return FALSE; -} - -static INT_PTR CALLBACK focusDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wParam, - LPARAM lParam) -{ - switch (uiMsg) - { - case WM_INITDIALOG: - return TRUE; - - case WM_COMMAND: - if (LOWORD(wParam) == IDCANCEL) - { - EndDialog(hDlg, LOWORD(wParam)); - return TRUE; - } - else if (LOWORD(wParam) == 200) - { - if (HIWORD(wParam) == EN_SETFOCUS) - g_hwndInitialFocusT1 = (HWND)lParam; - } - return FALSE; - } - - return FALSE; -} - -/* Helper for InitialFocusTest */ -static const char * GetHwndString(HWND hw) -{ - if (hw == NULL) - return "a null handle"; - if (hw == g_hwndMain) - return "the dialog handle"; - if (hw == g_hwndInitialFocusGroupBox) - return "the group box control"; - if (hw == g_hwndButton1) - return "the first button"; - if (hw == g_hwndButton2) - return "the second button"; - if (hw == g_hwndButtonCancel) - return "the cancel button"; - - return "unknown handle"; -} - -static void InitialFocusTest (void) -{ - /* Test 1: - * This test intentionally returns FALSE in response to WM_INITDIALOG - * without setting focus to a control. This is not allowed according to - * MSDN, but it is exactly what MFC's CFormView does. - * - * Since the WM_INITDIALOG handler returns FALSE without setting the focus, - * the focus should initially be NULL. Later, when we manually set focus to - * the dialog, the default handler should set focus to the first control that - * is "visible, not disabled, and has the WS_TABSTOP style" (MSDN). Because the - * second radio button has been checked, it should be the first control - * that meets these criteria and should receive the focus. - */ - - g_bInitialFocusInitDlgResult = FALSE; - g_hwndInitialFocusT1 = (HWND) -1; - g_hwndInitialFocusT2 = (HWND) -1; - g_styleInitialFocusT1 = -1; - g_styleInitialFocusT2 = -1; - - DialogBoxA(g_hinst, "RADIO_TEST_DIALOG", NULL, delayFocusDlgWinProc); - - ok (((g_styleInitialFocusT1 & WS_TABSTOP) == 0), - "Error in wrc - Detected WS_TABSTOP as default style for GROUPBOX\n"); - - ok (((g_styleInitialFocusT2 & WS_VISIBLE) == 0), - "Modal dialogs should not be shown until the message queue first goes empty\n"); - - ok ((g_hwndInitialFocusT1 == NULL), - "Error in initial focus when WM_INITDIALOG returned FALSE: " - "Expected NULL focus, got %s (%p).\n", - GetHwndString(g_hwndInitialFocusT1), g_hwndInitialFocusT1); - - ok ((g_hwndInitialFocusT2 == g_hwndButton2), - "Error after first SetFocus() when WM_INITDIALOG returned FALSE: " - "Expected the second button (%p), got %s (%p).\n", - g_hwndButton2, GetHwndString(g_hwndInitialFocusT2), - g_hwndInitialFocusT2); - - /* Test 2: - * This is the same as above, except WM_INITDIALOG is made to return TRUE. - * This should cause the focus to go to the second radio button right away - * and stay there (until the user indicates otherwise). - */ - - g_bInitialFocusInitDlgResult = TRUE; - g_hwndInitialFocusT1 = (HWND) -1; - g_hwndInitialFocusT2 = (HWND) -1; - g_styleInitialFocusT1 = -1; - g_styleInitialFocusT2 = -1; - - DialogBoxA(g_hinst, "RADIO_TEST_DIALOG", NULL, delayFocusDlgWinProc); - - ok ((g_hwndInitialFocusT1 == g_hwndButton2), - "Error in initial focus when WM_INITDIALOG returned TRUE: " - "Expected the second button (%p), got %s (%p).\n", - g_hwndButton2, GetHwndString(g_hwndInitialFocusT2), - g_hwndInitialFocusT2); - - ok ((g_hwndInitialFocusT2 == g_hwndButton2), - "Error after first SetFocus() when WM_INITDIALOG returned TRUE: " - "Expected the second button (%p), got %s (%p).\n", - g_hwndButton2, GetHwndString(g_hwndInitialFocusT2), - g_hwndInitialFocusT2); - - /* Test 3: - * If the dialog has DS_CONTROL and it's not visible then we shouldn't change focus */ - { - HWND hDlg; - HRSRC hResource; - HANDLE hTemplate; - DLGTEMPLATE* pTemplate; - - hResource = FindResourceA(g_hinst,"FOCUS_TEST_DIALOG", (LPSTR)RT_DIALOG); - hTemplate = LoadResource(g_hinst, hResource); - pTemplate = (LPDLGTEMPLATEA)LockResource(hTemplate); - - g_hwndInitialFocusT1 = 0; - hDlg = CreateDialogIndirectParamA(g_hinst, pTemplate, NULL, focusDlgWinProc, 0); - ok (hDlg != 0, "Failed to create test dialog.\n"); - - ok ((g_hwndInitialFocusT1 == 0), - "Focus should not be set for an invisible DS_CONTROL dialog %p.\n", g_hwndInitialFocusT1); - - DestroyWindow(hDlg); - } -} - -static void test_GetDlgItemText(void) -{ - char string[64]; - BOOL ret; - - strcpy(string, "Overwrite Me"); - ret = GetDlgItemTextA(NULL, 0, string, sizeof(string)/sizeof(string[0])); - ok(!ret, "GetDlgItemText(NULL) shouldn't have succeeded\n"); - - ok(string[0] == '\0', "string retrieved using GetDlgItemText should have been NULL terminated\n"); -} - -static void test_DialogBoxParamA(void) -{ - int ret; - HWND hwnd_invalid = (HWND)0x4444; - - SetLastError(0xdeadbeef); - ret = DialogBoxParamA(GetModuleHandle(NULL), "IDD_DIALOG" , hwnd_invalid, 0 , 0); - ok(0 == ret, "DialogBoxParamA returned %d, expected 0\n", ret); - ok(ERROR_INVALID_WINDOW_HANDLE == GetLastError(),"got %d, expected ERROR_INVALID_WINDOW_HANDLE\n",GetLastError()); - SetLastError(0xdeadbeef); - ret = DialogBoxParamA(GetModuleHandle(NULL), "RESOURCE_INVALID" , 0, 0, 0); - ok(-1 == ret, "DialogBoxParamA returned %d, expected -1\n", ret); - ok(ERROR_RESOURCE_NAME_NOT_FOUND == GetLastError(),"got %d, expected ERROR_RESOURCE_NAME_NOT_FOUND\n",GetLastError()); -} - -static void test_DisabledDialogTest(void) -{ - g_terminated = FALSE; - DialogBoxParam(g_hinst, "IDD_DIALOG", NULL, (DLGPROC)disabled_test_proc, 0); - ok(FALSE == g_terminated, "dialog with disabled ok button has been terminated\n"); -} - -START_TEST(dialog) -{ - g_hinst = GetModuleHandleA (0); - - if (!RegisterWindowClasses()) assert(0); - - GetNextDlgItemTest(); - IsDialogMessageWTest(); - WM_NEXTDLGCTLTest(); - InitialFocusTest(); - test_GetDlgItemText(); - test_DialogBoxParamA(); - test_DisabledDialogTest(); -} diff --git a/rostests/winetests/user32/edit.c b/rostests/winetests/user32/edit.c deleted file mode 100755 index 0c5a6786188..00000000000 --- a/rostests/winetests/user32/edit.c +++ /dev/null @@ -1,2017 +0,0 @@ -/* Unit test suite for edit control. - * - * Copyright 2004 Vitaliy Margolen - * Copyright 2005 C. Scott Ananian - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "wine/test.h" - -#ifndef ES_COMBO -#define ES_COMBO 0x200 -#endif - -#define ID_EDITTEST2 99 -#define MAXLEN 200 - -struct edit_notify { - int en_change, en_maxtext, en_update; -}; - -static struct edit_notify notifications; - -static INT_PTR CALLBACK multi_edit_dialog_proc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam) -{ - static int num_ok_commands = 0; - switch (msg) - { - case WM_INITDIALOG: - { - HWND hedit = GetDlgItem(hdlg, 1000); - SetFocus(hedit); - switch (lparam) - { - /* test cases related to bug 12319 */ - case 0: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 1: - PostMessage(hedit, WM_CHAR, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 2: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hedit, WM_CHAR, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - - /* test cases for pressing enter */ - case 3: - num_ok_commands = 0; - PostMessage(hedit, WM_KEYDOWN, VK_RETURN, 0x1c0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 1); - break; - - default: - break; - } - break; - } - - case WM_COMMAND: - if (HIWORD(wparam) != BN_CLICKED) - break; - - switch (LOWORD(wparam)) - { - case IDOK: - num_ok_commands++; - break; - - default: - break; - } - break; - - case WM_USER: - { - HWND hfocus = GetFocus(); - HWND hedit = GetDlgItem(hdlg, 1000); - HWND hedit2 = GetDlgItem(hdlg, 1001); - HWND hedit3 = GetDlgItem(hdlg, 1002); - - if (wparam != 0xdeadbeef) - break; - - switch (lparam) - { - case 0: - if (hfocus == hedit) - EndDialog(hdlg, 1111); - else if (hfocus == hedit2) - EndDialog(hdlg, 2222); - else if (hfocus == hedit3) - EndDialog(hdlg, 3333); - else - EndDialog(hdlg, 4444); - break; - case 1: - if ((hfocus == hedit) && (num_ok_commands == 0)) - EndDialog(hdlg, 11); - else - EndDialog(hdlg, 22); - break; - default: - EndDialog(hdlg, 5555); - } - break; - } - - case WM_CLOSE: - EndDialog(hdlg, 333); - break; - - default: - break; - } - - return FALSE; -} - -static INT_PTR CALLBACK edit_dialog_proc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_INITDIALOG: - { - HWND hedit = GetDlgItem(hdlg, 1000); - SetFocus(hedit); - switch (lparam) - { - /* from bug 11841 */ - case 0: - PostMessage(hedit, WM_KEYDOWN, VK_ESCAPE, 0x10001); - break; - case 1: - PostMessage(hedit, WM_KEYDOWN, VK_RETURN, 0x1c0001); - break; - case 2: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 1); - break; - - /* more test cases for WM_CHAR */ - case 3: - PostMessage(hedit, WM_CHAR, VK_ESCAPE, 0x10001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 4: - PostMessage(hedit, WM_CHAR, VK_RETURN, 0x1c0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 5: - PostMessage(hedit, WM_CHAR, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - - /* more test cases for WM_KEYDOWN + WM_CHAR */ - case 6: - PostMessage(hedit, WM_KEYDOWN, VK_ESCAPE, 0x10001); - PostMessage(hedit, WM_CHAR, VK_ESCAPE, 0x10001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 7: - PostMessage(hedit, WM_KEYDOWN, VK_RETURN, 0x1c0001); - PostMessage(hedit, WM_CHAR, VK_RETURN, 0x1c0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 1); - break; - case 8: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hedit, WM_CHAR, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 1); - break; - - /* multiple tab tests */ - case 9: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 2); - break; - case 10: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 2); - break; - - default: - break; - } - break; - } - - case WM_COMMAND: - if (HIWORD(wparam) != BN_CLICKED) - break; - - switch (LOWORD(wparam)) - { - case IDOK: - EndDialog(hdlg, 111); - break; - - case IDCANCEL: - EndDialog(hdlg, 222); - break; - - default: - break; - } - break; - - case WM_USER: - { - int len; - HWND hok = GetDlgItem(hdlg, IDOK); - HWND hcancel = GetDlgItem(hdlg, IDCANCEL); - HWND hedit = GetDlgItem(hdlg, 1000); - HWND hfocus = GetFocus(); - - if (wparam != 0xdeadbeef) - break; - - switch (lparam) - { - case 0: - len = SendMessage(hedit, WM_GETTEXTLENGTH, 0, 0); - if (len == 0) - EndDialog(hdlg, 444); - else - EndDialog(hdlg, 555); - break; - - case 1: - len = SendMessage(hedit, WM_GETTEXTLENGTH, 0, 0); - if ((hfocus == hok) && len == 0) - EndDialog(hdlg, 444); - else - EndDialog(hdlg, 555); - break; - - case 2: - if (hfocus == hok) - EndDialog(hdlg, 11); - else if (hfocus == hcancel) - EndDialog(hdlg, 22); - else if (hfocus == hedit) - EndDialog(hdlg, 33); - else - EndDialog(hdlg, 44); - break; - - default: - EndDialog(hdlg, 555); - } - break; - } - - case WM_CLOSE: - EndDialog(hdlg, 333); - break; - - default: - break; - } - - return FALSE; -} - -static INT_PTR CALLBACK edit_singleline_dialog_proc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_INITDIALOG: - { - HWND hedit = GetDlgItem(hdlg, 1000); - SetFocus(hedit); - switch (lparam) - { - /* test cases for WM_KEYDOWN */ - case 0: - PostMessage(hedit, WM_KEYDOWN, VK_ESCAPE, 0x10001); - break; - case 1: - PostMessage(hedit, WM_KEYDOWN, VK_RETURN, 0x1c0001); - break; - case 2: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 1); - break; - - /* test cases for WM_CHAR */ - case 3: - PostMessage(hedit, WM_CHAR, VK_ESCAPE, 0x10001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 4: - PostMessage(hedit, WM_CHAR, VK_RETURN, 0x1c0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 5: - PostMessage(hedit, WM_CHAR, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - - /* test cases for WM_KEYDOWN + WM_CHAR */ - case 6: - PostMessage(hedit, WM_KEYDOWN, VK_ESCAPE, 0x10001); - PostMessage(hedit, WM_CHAR, VK_ESCAPE, 0x10001); - break; - case 7: - PostMessage(hedit, WM_KEYDOWN, VK_RETURN, 0x1c0001); - PostMessage(hedit, WM_CHAR, VK_RETURN, 0x1c0001); - break; - case 8: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hedit, WM_CHAR, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 1); - break; - - default: - break; - } - break; - } - - case WM_COMMAND: - if (HIWORD(wparam) != BN_CLICKED) - break; - - switch (LOWORD(wparam)) - { - case IDOK: - EndDialog(hdlg, 111); - break; - - case IDCANCEL: - EndDialog(hdlg, 222); - break; - - default: - break; - } - break; - - case WM_USER: - { - HWND hok = GetDlgItem(hdlg, IDOK); - HWND hedit = GetDlgItem(hdlg, 1000); - HWND hfocus = GetFocus(); - int len = SendMessage(hedit, WM_GETTEXTLENGTH, 0, 0); - - if (wparam != 0xdeadbeef) - break; - - switch (lparam) - { - case 0: - if ((hfocus == hedit) && len == 0) - EndDialog(hdlg, 444); - else - EndDialog(hdlg, 555); - break; - - case 1: - if ((hfocus == hok) && len == 0) - EndDialog(hdlg, 444); - else - EndDialog(hdlg, 555); - break; - - default: - EndDialog(hdlg, 55); - } - break; - } - - case WM_CLOSE: - EndDialog(hdlg, 333); - break; - - default: - break; - } - - return FALSE; -} - -static INT_PTR CALLBACK edit_wantreturn_dialog_proc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_INITDIALOG: - { - HWND hedit = GetDlgItem(hdlg, 1000); - SetFocus(hedit); - switch (lparam) - { - /* test cases for WM_KEYDOWN */ - case 0: - PostMessage(hedit, WM_KEYDOWN, VK_ESCAPE, 0x10001); - break; - case 1: - PostMessage(hedit, WM_KEYDOWN, VK_RETURN, 0x1c0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 2: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 1); - break; - - /* test cases for WM_CHAR */ - case 3: - PostMessage(hedit, WM_CHAR, VK_ESCAPE, 0x10001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 4: - PostMessage(hedit, WM_CHAR, VK_RETURN, 0x1c0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 2); - break; - case 5: - PostMessage(hedit, WM_CHAR, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - - /* test cases for WM_KEYDOWN + WM_CHAR */ - case 6: - PostMessage(hedit, WM_KEYDOWN, VK_ESCAPE, 0x10001); - PostMessage(hedit, WM_CHAR, VK_ESCAPE, 0x10001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 0); - break; - case 7: - PostMessage(hedit, WM_KEYDOWN, VK_RETURN, 0x1c0001); - PostMessage(hedit, WM_CHAR, VK_RETURN, 0x1c0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 2); - break; - case 8: - PostMessage(hedit, WM_KEYDOWN, VK_TAB, 0xf0001); - PostMessage(hedit, WM_CHAR, VK_TAB, 0xf0001); - PostMessage(hdlg, WM_USER, 0xdeadbeef, 1); - break; - - default: - break; - } - break; - } - - case WM_COMMAND: - if (HIWORD(wparam) != BN_CLICKED) - break; - - switch (LOWORD(wparam)) - { - case IDOK: - EndDialog(hdlg, 111); - break; - - case IDCANCEL: - EndDialog(hdlg, 222); - break; - - default: - break; - } - break; - - case WM_USER: - { - HWND hok = GetDlgItem(hdlg, IDOK); - HWND hedit = GetDlgItem(hdlg, 1000); - HWND hfocus = GetFocus(); - int len = SendMessage(hedit, WM_GETTEXTLENGTH, 0, 0); - - if (wparam != 0xdeadbeef) - break; - - switch (lparam) - { - case 0: - if ((hfocus == hedit) && len == 0) - EndDialog(hdlg, 444); - else - EndDialog(hdlg, 555); - break; - - case 1: - if ((hfocus == hok) && len == 0) - EndDialog(hdlg, 444); - else - EndDialog(hdlg, 555); - break; - - case 2: - if ((hfocus == hedit) && len == 2) - EndDialog(hdlg, 444); - else - EndDialog(hdlg, 555); - break; - - default: - EndDialog(hdlg, 55); - } - break; - } - - case WM_CLOSE: - EndDialog(hdlg, 333); - break; - - default: - break; - } - - return FALSE; -} - -static HINSTANCE hinst; -static HWND hwndET2; -static const char szEditTest2Class[] = "EditTest2Class"; -static const char szEditTest3Class[] = "EditTest3Class"; -static const char szEditTextPositionClass[] = "EditTextPositionWindowClass"; - -static HWND create_editcontrol (DWORD style, DWORD exstyle) -{ - HWND handle; - - handle = CreateWindowEx(exstyle, - "EDIT", - "Test Text", - style, - 10, 10, 300, 300, - NULL, NULL, hinst, NULL); - assert (handle); - if (winetest_interactive) - ShowWindow (handle, SW_SHOW); - return handle; -} - -static HWND create_child_editcontrol (DWORD style, DWORD exstyle) -{ - HWND parentWnd; - HWND editWnd; - RECT rect; - - rect.left = 0; - rect.top = 0; - rect.right = 300; - rect.bottom = 300; - assert(AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE)); - - parentWnd = CreateWindowEx(0, - szEditTextPositionClass, - "Edit Test", - WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, - rect.right - rect.left, rect.bottom - rect.top, - NULL, NULL, hinst, NULL); - assert(parentWnd); - - editWnd = CreateWindowEx(exstyle, - "EDIT", - "Test Text", - WS_CHILD | style, - 0, 0, 300, 300, - parentWnd, NULL, hinst, NULL); - assert(editWnd); - if (winetest_interactive) - ShowWindow (parentWnd, SW_SHOW); - return editWnd; -} - -static void destroy_child_editcontrol (HWND hwndEdit) -{ - if (GetParent(hwndEdit)) - DestroyWindow(GetParent(hwndEdit)); - else { - trace("Edit control has no parent!\n"); - DestroyWindow(hwndEdit); - } -} - -static LONG get_edit_style (HWND hwnd) -{ - return GetWindowLongA( hwnd, GWL_STYLE ) & ( - ES_LEFT | -/* FIXME: not implemented - ES_CENTER | - ES_RIGHT | - ES_OEMCONVERT | -*/ - ES_MULTILINE | - ES_UPPERCASE | - ES_LOWERCASE | - ES_PASSWORD | - ES_AUTOVSCROLL | - ES_AUTOHSCROLL | - ES_NOHIDESEL | - ES_COMBO | - ES_READONLY | - ES_WANTRETURN | - ES_NUMBER - ); -} - -static void set_client_height(HWND Wnd, unsigned Height) -{ - RECT ClientRect, WindowRect; - - GetWindowRect(Wnd, &WindowRect); - GetClientRect(Wnd, &ClientRect); - SetWindowPos(Wnd, NULL, 0, 0, - WindowRect.right - WindowRect.left, - Height + (WindowRect.bottom - WindowRect.top) - - (ClientRect.bottom - ClientRect.top), - SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); - - /* Workaround for a bug in Windows' edit control - (multi-line mode) */ - GetWindowRect(Wnd, &WindowRect); - SetWindowPos(Wnd, NULL, 0, 0, - WindowRect.right - WindowRect.left + 1, - WindowRect.bottom - WindowRect.top + 1, - SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); - SetWindowPos(Wnd, NULL, 0, 0, - WindowRect.right - WindowRect.left, - WindowRect.bottom - WindowRect.top, - SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); - - GetClientRect(Wnd, &ClientRect); - ok(ClientRect.bottom - ClientRect.top == Height, - "The client height should be %ld, but is %ld\n", - (long)Height, (long)(ClientRect.bottom - ClientRect.top)); -} - -static void test_edit_control_1(void) -{ - HWND hwEdit; - MSG msMessage; - int i; - LONG r; - - msMessage.message = WM_KEYDOWN; - - trace("EDIT: Single line\n"); - hwEdit = create_editcontrol(ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - r = get_edit_style(hwEdit); - ok(r == (ES_AUTOVSCROLL | ES_AUTOHSCROLL), "Wrong style expected 0xc0 got: 0x%x\n", r); - for (i=0;i<65535;i++) - { - msMessage.wParam = i; - r = SendMessage(hwEdit, WM_GETDLGCODE, 0, (LPARAM) &msMessage); - ok(r == (DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS), - "Expected DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS got %x\n", r); - } - DestroyWindow (hwEdit); - - trace("EDIT: Single line want returns\n"); - hwEdit = create_editcontrol(ES_WANTRETURN | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - r = get_edit_style(hwEdit); - ok(r == (ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN), "Wrong style expected 0x10c0 got: 0x%x\n", r); - for (i=0;i<65535;i++) - { - msMessage.wParam = i; - r = SendMessage(hwEdit, WM_GETDLGCODE, 0, (LPARAM) &msMessage); - ok(r == (DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS), - "Expected DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS got %x\n", r); - } - DestroyWindow (hwEdit); - - trace("EDIT: Multiline line\n"); - hwEdit = create_editcontrol(ES_MULTILINE | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - r = get_edit_style(hwEdit); - ok(r == (ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE), "Wrong style expected 0xc4 got: 0x%x\n", r); - for (i=0;i<65535;i++) - { - msMessage.wParam = i; - r = SendMessage(hwEdit, WM_GETDLGCODE, 0, (LPARAM) &msMessage); - ok(r == (DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTALLKEYS | DLGC_WANTARROWS), - "Expected DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTALLKEYS | DLGC_WANTARROWS got %x\n", r); - } - DestroyWindow (hwEdit); - - trace("EDIT: Multi line want returns\n"); - hwEdit = create_editcontrol(ES_MULTILINE | WS_VSCROLL | ES_WANTRETURN | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - r = get_edit_style(hwEdit); - ok(r == (ES_WANTRETURN | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE), "Wrong style expected 0x10c4 got: 0x%x\n", r); - for (i=0;i<65535;i++) - { - msMessage.wParam = i; - r = SendMessage(hwEdit, WM_GETDLGCODE, 0, (LPARAM) &msMessage); - ok(r == (DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTALLKEYS | DLGC_WANTARROWS), - "Expected DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTALLKEYS | DLGC_WANTARROWS got %x\n", r); - } - DestroyWindow (hwEdit); -} - -/* WM_SETTEXT is implemented by selecting all text, and then replacing the - * selection. This test checks that the first 'select all' doesn't generate - * an UPDATE message which can escape and (via a handler) change the - * selection, which would cause WM_SETTEXT to break. This old bug - * was fixed 18-Mar-2005; we check here to ensure it doesn't regress. - */ -static void test_edit_control_2(void) -{ - HWND hwndMain; - char szLocalString[MAXLEN]; - LONG r; - - /* Create main and edit windows. */ - hwndMain = CreateWindow(szEditTest2Class, "ET2", WS_OVERLAPPEDWINDOW, - 0, 0, 200, 200, NULL, NULL, hinst, NULL); - assert(hwndMain); - if (winetest_interactive) - ShowWindow (hwndMain, SW_SHOW); - - hwndET2 = CreateWindow("EDIT", NULL, - WS_CHILD|WS_BORDER|ES_LEFT|ES_AUTOHSCROLL, - 0, 0, 150, 50, /* important this not be 0 size. */ - hwndMain, (HMENU) ID_EDITTEST2, hinst, NULL); - assert(hwndET2); - if (winetest_interactive) - ShowWindow (hwndET2, SW_SHOW); - - trace("EDIT: SETTEXT atomicity\n"); - /* Send messages to "type" in the word 'foo'. */ - r = SendMessage(hwndET2, WM_CHAR, 'f', 1); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - r = SendMessage(hwndET2, WM_CHAR, 'o', 1); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - r = SendMessage(hwndET2, WM_CHAR, 'o', 1); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - /* 'foo' should have been changed to 'bar' by the UPDATE handler. */ - GetWindowText(hwndET2, szLocalString, MAXLEN); - ok(lstrcmp(szLocalString, "bar")==0, - "Wrong contents of edit: %s\n", szLocalString); - - /* OK, done! */ - DestroyWindow (hwndET2); - DestroyWindow (hwndMain); -} - -static void ET2_check_change(void) { - char szLocalString[MAXLEN]; - /* This EN_UPDATE handler changes any 'foo' to 'bar'. */ - GetWindowText(hwndET2, szLocalString, MAXLEN); - if (lstrcmp(szLocalString, "foo")==0) { - lstrcpy(szLocalString, "bar"); - SendMessage(hwndET2, WM_SETTEXT, 0, (LPARAM) szLocalString); - } - /* always leave the cursor at the end. */ - SendMessage(hwndET2, EM_SETSEL, MAXLEN - 1, MAXLEN - 1); -} -static void ET2_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) -{ - if (id==ID_EDITTEST2 && codeNotify == EN_UPDATE) - ET2_check_change(); -} -static LRESULT CALLBACK ET2_WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) -{ - switch (iMsg) { - case WM_COMMAND: - ET2_OnCommand(hwnd, LOWORD(wParam), (HWND)lParam, HIWORD(wParam)); - break; - } - return DefWindowProc(hwnd, iMsg, wParam, lParam); -} - -static void zero_notify(void) -{ - notifications.en_change = 0; - notifications.en_maxtext = 0; - notifications.en_update = 0; -} - -#define test_notify(enchange, enmaxtext, enupdate) \ - ok(notifications.en_change == enchange, "expected %d EN_CHANGE notifications, " \ - "got %d\n", enchange, notifications.en_change); \ - ok(notifications.en_maxtext == enmaxtext, "expected %d EN_MAXTEXT notifications, " \ - "got %d\n", enmaxtext, notifications.en_maxtext); \ - ok(notifications.en_update == enupdate, "expected %d EN_UPDATE notifications, " \ - "got %d\n", enupdate, notifications.en_update) - - -static LRESULT CALLBACK edit3_wnd_procA(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_COMMAND: - switch (HIWORD(wParam)) { - case EN_MAXTEXT: - notifications.en_maxtext++; - break; - case EN_UPDATE: - notifications.en_update++; - break; - case EN_CHANGE: - notifications.en_change++; - break; - } - break; - } - return DefWindowProcA(hWnd, msg, wParam, lParam); -} - -/* Test behaviour of WM_SETTEXT, WM_REPLACESEL and notificatisons sent in response - * to these messages. - */ -static void test_edit_control_3(void) -{ - HWND hWnd; - HWND hParent; - int len; - static const char *str = "this is a long string."; - static const char *str2 = "this is a long string.\r\nthis is a long string.\r\nthis is a long string.\r\nthis is a long string."; - - trace("EDIT: Test notifications\n"); - - hParent = CreateWindowExA(0, - szEditTest3Class, - NULL, - 0, - CW_USEDEFAULT, CW_USEDEFAULT, 10, 10, - NULL, NULL, NULL, NULL); - assert(hParent); - - trace("EDIT: Single line, no ES_AUTOHSCROLL\n"); - hWnd = CreateWindowExA(0, - "EDIT", - NULL, - 0, - 10, 10, 50, 50, - hParent, NULL, NULL, NULL); - assert(hWnd); - - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) > len, "text should have been truncated\n"); - test_notify(1, 1, 1); - - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)""); - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)"a"); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(1 == len, "wrong text length, expected 1, got %d\n", len); - test_notify(1, 0, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - test_notify(1, 0, 1); - - SendMessageA(hWnd, EM_SETLIMITTEXT, 5, 0); - - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)""); - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(5 == len, "text should have been truncated to limit, expected 5, got %d\n", len); - test_notify(1, 1, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - test_notify(1, 0, 1); - - DestroyWindow(hWnd); - - trace("EDIT: Single line, ES_AUTOHSCROLL\n"); - hWnd = CreateWindowExA(0, - "EDIT", - NULL, - ES_AUTOHSCROLL, - 10, 10, 50, 50, - hParent, NULL, NULL, NULL); - assert(hWnd); - - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - test_notify(1, 0, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - test_notify(1, 0, 1); - - SendMessageA(hWnd, EM_SETLIMITTEXT, 5, 0); - - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)""); - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(5 == len, "text should have been truncated to limit, expected 5, got %d\n", len); - test_notify(1, 1, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - test_notify(1, 0, 1); - - DestroyWindow(hWnd); - - trace("EDIT: Multline, no ES_AUTOHSCROLL, no ES_AUTOVSCROLL\n"); - hWnd = CreateWindowExA(0, - "EDIT", - NULL, - ES_MULTILINE, - 10, 10, 50, 50, - hParent, NULL, NULL, NULL); - assert(hWnd); - - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(0 == len, "text should have been truncated, expected 0, got %d\n", len); - test_notify(1, 1, 1); - - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)""); - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)"a"); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(1 == SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0), "wrong text length, expected 1, got %d\n", len); - test_notify(1, 0, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - test_notify(0, 0, 0); - - SendMessageA(hWnd, EM_SETLIMITTEXT, 5, 0); - - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)""); - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(5 == len, "text should have been truncated to limit, expected 5, got %d\n", len); - test_notify(1, 1, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - test_notify(0, 0, 0); - - DestroyWindow(hWnd); - - trace("EDIT: Multline, ES_AUTOHSCROLL, no ES_AUTOVSCROLL\n"); - hWnd = CreateWindowExA(0, - "EDIT", - NULL, - ES_MULTILINE | ES_AUTOHSCROLL, - 10, 10, 50, 50, - hParent, NULL, NULL, NULL); - assert(hWnd); - - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str2); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(0 == len, "text should have been truncated, expected 0, got %d\n", len); - test_notify(1, 1, 1); - - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)""); - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)"a"); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(1 == SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0), "wrong text length, expected 1, got %d\n", len); - test_notify(1, 0, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str2); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str2) == len, "text shouldn't have been truncated\n"); - test_notify(0, 0, 0); - - SendMessageA(hWnd, EM_SETLIMITTEXT, 5, 0); - - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)""); - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str2); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(5 == len, "text should have been truncated to limit, expected 5, got %d\n", len); - test_notify(1, 1, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str2); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str2) == len, "text shouldn't have been truncated\n"); - test_notify(0, 0, 0); - - DestroyWindow(hWnd); - - trace("EDIT: Multline, ES_AUTOHSCROLL and ES_AUTOVSCROLL\n"); - hWnd = CreateWindowExA(0, - "EDIT", - NULL, - ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, - 10, 10, 50, 50, - hParent, NULL, NULL, NULL); - assert(hWnd); - - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str2); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str2) == len, "text shouldn't have been truncated\n"); - test_notify(1, 0, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str2); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str2) == len, "text shouldn't have been truncated\n"); - test_notify(0, 0, 0); - - SendMessageA(hWnd, EM_SETLIMITTEXT, 5, 0); - - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)""); - zero_notify(); - SendMessageA(hWnd, EM_REPLACESEL, 0, (LPARAM)str2); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(5 == len, "text should have been truncated to limit, expected 5, got %d\n", len); - test_notify(1, 1, 1); - - zero_notify(); - SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)str2); - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str2) == len, "text shouldn't have been truncated\n"); - test_notify(0, 0, 0); - - DestroyWindow(hWnd); -} - -/* Test EM_CHARFROMPOS and EM_POSFROMCHAR - */ -static void test_edit_control_4(void) -{ - HWND hwEdit; - int lo, hi, mid; - int ret; - int i; - - trace("EDIT: Test EM_CHARFROMPOS and EM_POSFROMCHAR\n"); - hwEdit = create_editcontrol(ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - SendMessage(hwEdit, WM_SETTEXT, 0, (LPARAM) "aa"); - lo = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 0, 0)); - hi = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 1, 0)); - mid = lo + (hi - lo) / 2; - - for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(0 == ret, "expected 0 got %d\n", ret); - } - for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(1 == ret, "expected 1 got %d\n", ret); - } - ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); - ok(-1 == ret, "expected -1 got %d\n", ret); - DestroyWindow(hwEdit); - - hwEdit = create_editcontrol(ES_RIGHT | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - SendMessage(hwEdit, WM_SETTEXT, 0, (LPARAM) "aa"); - lo = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 0, 0)); - hi = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 1, 0)); - mid = lo + (hi - lo) / 2; - - for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(0 == ret, "expected 0 got %d\n", ret); - } - for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(1 == ret, "expected 1 got %d\n", ret); - } - ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); - ok(-1 == ret, "expected -1 got %d\n", ret); - DestroyWindow(hwEdit); - - hwEdit = create_editcontrol(ES_CENTER | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - SendMessage(hwEdit, WM_SETTEXT, 0, (LPARAM) "aa"); - lo = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 0, 0)); - hi = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 1, 0)); - mid = lo + (hi - lo) / 2; - - for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(0 == ret, "expected 0 got %d\n", ret); - } - for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(1 == ret, "expected 1 got %d\n", ret); - } - ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); - ok(-1 == ret, "expected -1 got %d\n", ret); - DestroyWindow(hwEdit); - - hwEdit = create_editcontrol(ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - SendMessage(hwEdit, WM_SETTEXT, 0, (LPARAM) "aa"); - lo = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 0, 0)); - hi = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 1, 0)); - mid = lo + (hi - lo) / 2 +1; - - for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret); - } - for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(1 == ret, "expected 1 got %d\n", ret); - } - ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); - ok(-1 == ret, "expected -1 got %d\n", ret); - DestroyWindow(hwEdit); - - hwEdit = create_editcontrol(ES_MULTILINE | ES_RIGHT | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - SendMessage(hwEdit, WM_SETTEXT, 0, (LPARAM) "aa"); - lo = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 0, 0)); - hi = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 1, 0)); - mid = lo + (hi - lo) / 2 +1; - - for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret); - } - for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(1 == ret, "expected 1 got %d\n", ret); - } - ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); - ok(-1 == ret, "expected -1 got %d\n", ret); - DestroyWindow(hwEdit); - - hwEdit = create_editcontrol(ES_MULTILINE | ES_CENTER | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - SendMessage(hwEdit, WM_SETTEXT, 0, (LPARAM) "aa"); - lo = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 0, 0)); - hi = LOWORD(SendMessage(hwEdit, EM_POSFROMCHAR, 1, 0)); - mid = lo + (hi - lo) / 2 +1; - - for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret); - } - for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); - ok(1 == ret, "expected 1 got %d\n", ret); - } - ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); - ok(-1 == ret, "expected -1 got %d\n", ret); - DestroyWindow(hwEdit); -} - -/* Test if creating edit control without ES_AUTOHSCROLL and ES_AUTOVSCROLL - * truncates text that doesn't fit. - */ -static void test_edit_control_5(void) -{ - static const char *str = "test\r\ntest"; - HWND hWnd; - int len; - - hWnd = CreateWindowEx(0, - "EDIT", - str, - 0, - 10, 10, 1, 1, - NULL, NULL, NULL, NULL); - assert(hWnd); - - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - DestroyWindow(hWnd); - - hWnd = CreateWindowEx(0, - "EDIT", - str, - ES_MULTILINE, - 10, 10, 1, 1, - NULL, NULL, NULL, NULL); - assert(hWnd); - - len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0); - ok(lstrlenA(str) == len, "text shouldn't have been truncated\n"); - DestroyWindow(hWnd); -} - -static void test_edit_control_limittext(void) -{ - HWND hwEdit; - DWORD r; - - /* Test default limit for single-line control */ - trace("EDIT: buffer limit for single-line\n"); - hwEdit = create_editcontrol(ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - r = SendMessage(hwEdit, EM_GETLIMITTEXT, 0, 0); - ok(r == 30000, "Incorrect default text limit, expected 30000 got %u\n", r); - SendMessage(hwEdit, EM_SETLIMITTEXT, 0, 0); - r = SendMessage(hwEdit, EM_GETLIMITTEXT, 0, 0); - /* Win9x+ME: 32766; WinNT: 2147483646UL */ - ok( (r == 32766) || (r == 2147483646UL), - "got limit %u (expected 32766 or 2147483646)\n", r); - DestroyWindow(hwEdit); - - /* Test default limit for multi-line control */ - trace("EDIT: buffer limit for multi-line\n"); - hwEdit = create_editcontrol(ES_MULTILINE | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - r = SendMessage(hwEdit, EM_GETLIMITTEXT, 0, 0); - ok(r == 30000, "Incorrect default text limit, expected 30000 got %u\n", r); - SendMessage(hwEdit, EM_SETLIMITTEXT, 0, 0); - r = SendMessage(hwEdit, EM_GETLIMITTEXT, 0, 0); - /* Win9x+ME: 65535; WinNT: 4294967295UL */ - ok( (r == 65535) || (r == 4294967295UL), - "got limit %u (expected 65535 or 4294967295)\n", r); - DestroyWindow(hwEdit); -} - -static void test_margins(void) -{ - HWND hwEdit; - RECT old_rect, new_rect; - INT old_left_margin, old_right_margin; - DWORD old_margins, new_margins; - - hwEdit = create_editcontrol(WS_BORDER | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); - - old_margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - old_left_margin = LOWORD(old_margins); - old_right_margin = HIWORD(old_margins); - - /* Check if setting the margins works */ - - SendMessage(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN, MAKELONG(10, 0)); - new_margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(new_margins) == 10, "Wrong left margin: %d\n", LOWORD(new_margins)); - ok(HIWORD(new_margins) == old_right_margin, "Wrong right margin: %d\n", HIWORD(new_margins)); - - SendMessage(hwEdit, EM_SETMARGINS, EC_RIGHTMARGIN, MAKELONG(0, 10)); - new_margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(new_margins) == 10, "Wrong left margin: %d\n", LOWORD(new_margins)); - ok(HIWORD(new_margins) == 10, "Wrong right margin: %d\n", HIWORD(new_margins)); - - - /* The size of the rectangle must decrease if we increase the margin */ - - SendMessage(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(5, 5)); - SendMessage(hwEdit, EM_GETRECT, 0, (LPARAM)&old_rect); - SendMessage(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(15, 20)); - SendMessage(hwEdit, EM_GETRECT, 0, (LPARAM)&new_rect); - ok(new_rect.left == old_rect.left + 10, "The left border of the rectangle is wrong\n"); - ok(new_rect.right == old_rect.right - 15, "The right border of the rectangle is wrong\n"); - ok(new_rect.top == old_rect.top, "The top border of the rectangle must not change\n"); - ok(new_rect.bottom == old_rect.bottom, "The bottom border of the rectangle must not change\n"); - - - /* If we set the margin to same value as the current margin, - the rectangle must not change */ - - SendMessage(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(10, 10)); - old_rect.left = 1; - old_rect.right = 99; - old_rect.top = 1; - old_rect.bottom = 99; - SendMessage(hwEdit, EM_SETRECT, 0, (LPARAM)&old_rect); - SendMessage(hwEdit, EM_GETRECT, 0, (LPARAM)&old_rect); - SendMessage(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(10, 10)); - SendMessage(hwEdit, EM_GETRECT, 0, (LPARAM)&new_rect); - ok(new_rect.left == old_rect.left, "The left border of the rectangle has changed\n"); - ok(new_rect.right == old_rect.right, "The right border of the rectangle has changed\n"); - ok(new_rect.top == old_rect.top, "The top border of the rectangle has changed\n"); - ok(new_rect.bottom == old_rect.bottom, "The bottom border of the rectangle has changed\n"); - - DestroyWindow (hwEdit); -} - -static INT CALLBACK find_font_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lParam) -{ - return 0; -} - -static void test_margins_font_change(void) -{ - HWND hwEdit; - DWORD margins, font_margins; - LOGFONT lf; - HFONT hfont, hfont2; - HDC hdc = GetDC(0); - - if(EnumFontFamiliesA(hdc, "Arial", find_font_proc, 0)) - { - trace("Arial not found - skipping font change margin tests\n"); - ReleaseDC(0, hdc); - return; - } - ReleaseDC(0, hdc); - - hwEdit = create_child_editcontrol(0, 0); - - SetWindowPos(hwEdit, NULL, 10, 10, 1000, 100, SWP_NOZORDER | SWP_NOACTIVATE); - - memset(&lf, 0, sizeof(lf)); - strcpy(lf.lfFaceName, "Arial"); - lf.lfHeight = 16; - lf.lfCharSet = DEFAULT_CHARSET; - hfont = CreateFontIndirectA(&lf); - lf.lfHeight = 30; - hfont2 = CreateFontIndirectA(&lf); - - SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont, 0); - font_margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(font_margins) != 0, "got %d\n", LOWORD(font_margins)); - ok(HIWORD(font_margins) != 0, "got %d\n", HIWORD(font_margins)); - - /* With 'small' edit controls, test that the margin doesn't get set */ - SetWindowPos(hwEdit, NULL, 10, 10, 16, 100, SWP_NOZORDER | SWP_NOACTIVATE); - SendMessageA(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(0,0)); - SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont, 0); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) == 0, "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) == 0, "got %d\n", HIWORD(margins)); - - SendMessageA(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(1,0)); - SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont, 0); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) == 1, "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) == 0, "got %d\n", HIWORD(margins)); - - SendMessageA(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(1,1)); - SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont, 0); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) == 1, "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) == 1, "got %d\n", HIWORD(margins)); - - SendMessageA(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(EC_USEFONTINFO,EC_USEFONTINFO)); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) == 1, "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) == 1, "got %d\n", HIWORD(margins)); - SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont2, 0); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) == 1, "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) == 1, "got %d\n", HIWORD(margins)); - - /* Above a certain size threshold then the margin is updated */ - SetWindowPos(hwEdit, NULL, 10, 10, 1000, 100, SWP_NOZORDER | SWP_NOACTIVATE); - SendMessageA(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(1,0)); - SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont, 0); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) == LOWORD(font_margins), "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) == HIWORD(font_margins), "got %d\n", HIWORD(margins)); - - SendMessageA(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(1,1)); - SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont, 0); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) == LOWORD(font_margins), "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) == HIWORD(font_margins), "got %d\n", HIWORD(margins)); - - SendMessageA(hwEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(EC_USEFONTINFO,EC_USEFONTINFO)); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) == LOWORD(font_margins), "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) == HIWORD(font_margins), "got %d\n", HIWORD(margins)); - SendMessageA(hwEdit, WM_SETFONT, (WPARAM)hfont2, 0); - margins = SendMessage(hwEdit, EM_GETMARGINS, 0, 0); - ok(LOWORD(margins) != LOWORD(font_margins), "got %d\n", LOWORD(margins)); - ok(HIWORD(margins) != HIWORD(font_margins), "got %d\n", HIWORD(margins)); - - SendMessageA(hwEdit, WM_SETFONT, 0, 0); - - DeleteObject(hfont2); - DeleteObject(hfont); - destroy_child_editcontrol(hwEdit); - -} - -#define edit_pos_ok(exp, got, txt) \ - ok(exp == got, "wrong " #txt " expected %d got %d\n", exp, got); - -#define check_pos(hwEdit, set_height, test_top, test_height, test_left) \ -do { \ - RECT format_rect; \ - int left_margin; \ - set_client_height(hwEdit, set_height); \ - SendMessage(hwEdit, EM_GETRECT, 0, (LPARAM) &format_rect); \ - left_margin = LOWORD(SendMessage(hwEdit, EM_GETMARGINS, 0, 0)); \ - edit_pos_ok(test_top, format_rect.top, vertical position); \ - edit_pos_ok((int)test_height, format_rect.bottom - format_rect.top, height); \ - edit_pos_ok(test_left, format_rect.left - left_margin, left); \ -} while(0) - -static void test_text_position_style(DWORD style) -{ - HWND hwEdit; - HFONT font, oldFont; - HDC dc; - TEXTMETRIC metrics; - INT b, bm, b2, b3; - BOOL single_line = !(style & ES_MULTILINE); - - b = GetSystemMetrics(SM_CYBORDER) + 1; - b2 = 2 * b; - b3 = 3 * b; - bm = b2 - 1; - - /* Get a stock font for which we can determine the metrics */ - assert(font = GetStockObject(SYSTEM_FONT)); - assert(dc = GetDC(NULL)); - oldFont = SelectObject(dc, font); - assert(GetTextMetrics(dc, &metrics)); - SelectObject(dc, oldFont); - ReleaseDC(NULL, dc); - - /* Windows' edit control has some bugs in multi-line mode: - * - Sometimes the format rectangle doesn't get updated - * (see workaround in set_client_height()) - * - If the height of the control is smaller than the height of a text - * line, the format rectangle is still as high as a text line - * (higher than the client rectangle) and the caret is not shown - */ - - /* Edit controls that are in a parent window */ - - hwEdit = create_child_editcontrol(style | WS_VISIBLE, 0); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); - if (single_line) - check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 0); - check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 0); - check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 0); - check_pos(hwEdit, metrics.tmHeight + 2, 0, metrics.tmHeight , 0); - check_pos(hwEdit, metrics.tmHeight + 10, 0, metrics.tmHeight , 0); - destroy_child_editcontrol(hwEdit); - - hwEdit = create_child_editcontrol(style | WS_BORDER | WS_VISIBLE, 0); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); - if (single_line) - check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, b); - check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , b); - check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , b); - check_pos(hwEdit, metrics.tmHeight + bm, 0, metrics.tmHeight , b); - check_pos(hwEdit, metrics.tmHeight + b2, b, metrics.tmHeight , b); - check_pos(hwEdit, metrics.tmHeight + b3, b, metrics.tmHeight , b); - destroy_child_editcontrol(hwEdit); - - hwEdit = create_child_editcontrol(style | WS_VISIBLE, WS_EX_CLIENTEDGE); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); - if (single_line) - check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1); - check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 2, 1, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 10, 1, metrics.tmHeight , 1); - destroy_child_editcontrol(hwEdit); - - hwEdit = create_child_editcontrol(style | WS_BORDER | WS_VISIBLE, WS_EX_CLIENTEDGE); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); - if (single_line) - check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1); - check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 2, 1, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 10, 1, metrics.tmHeight , 1); - destroy_child_editcontrol(hwEdit); - - - /* Edit controls that are popup windows */ - - hwEdit = create_editcontrol(style | WS_POPUP, 0); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); - if (single_line) - check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 0); - check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 0); - check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 0); - check_pos(hwEdit, metrics.tmHeight + 2, 0, metrics.tmHeight , 0); - check_pos(hwEdit, metrics.tmHeight + 10, 0, metrics.tmHeight , 0); - DestroyWindow(hwEdit); - - hwEdit = create_editcontrol(style | WS_POPUP | WS_BORDER, 0); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); - if (single_line) - check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, b); - check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , b); - check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , b); - check_pos(hwEdit, metrics.tmHeight + bm, 0, metrics.tmHeight , b); - check_pos(hwEdit, metrics.tmHeight + b2, b, metrics.tmHeight , b); - check_pos(hwEdit, metrics.tmHeight + b3, b, metrics.tmHeight , b); - DestroyWindow(hwEdit); - - hwEdit = create_editcontrol(style | WS_POPUP, WS_EX_CLIENTEDGE); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); - if (single_line) - check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1); - check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 2, 1, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 10, 1, metrics.tmHeight , 1); - DestroyWindow(hwEdit); - - hwEdit = create_editcontrol(style | WS_POPUP | WS_BORDER, WS_EX_CLIENTEDGE); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); - if (single_line) - check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1); - check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 1, 0, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 2, 1, metrics.tmHeight , 1); - check_pos(hwEdit, metrics.tmHeight + 10, 1, metrics.tmHeight , 1); - DestroyWindow(hwEdit); -} - -static void test_text_position(void) -{ - trace("EDIT: Text position (Single line)\n"); - test_text_position_style(ES_AUTOHSCROLL | ES_AUTOVSCROLL); - trace("EDIT: Text position (Multi line)\n"); - test_text_position_style(ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL); -} - -static void test_espassword(void) -{ - HWND hwEdit; - LONG r; - char buffer[1024]; - const char* password = "secret"; - - hwEdit = create_editcontrol(ES_PASSWORD, 0); - r = get_edit_style(hwEdit); - ok(r == ES_PASSWORD, "Wrong style expected 0x%x got: 0x%x\n", ES_PASSWORD, r); - /* set text */ - r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) password); - ok(r == TRUE, "Expected: %d, got: %d\n", TRUE, r); - - /* select all, cut (ctrl-x) */ - SendMessage(hwEdit, EM_SETSEL, 0, -1); - r = SendMessage(hwEdit, WM_CHAR, 24, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(r == strlen(password), "Expected: %s, got len %d\n", password, r); - ok(strcmp(buffer, password) == 0, "expected %s, got %s\n", password, buffer); - - r = OpenClipboard(hwEdit); - ok(r == TRUE, "expected %d, got %d\n", TRUE, r); - r = EmptyClipboard(); - ok(r == TRUE, "expected %d, got %d\n", TRUE, r); - r = CloseClipboard(); - ok(r == TRUE, "expected %d, got %d\n", TRUE, r); - - /* select all, copy (ctrl-c) and paste (ctrl-v) */ - SendMessage(hwEdit, EM_SETSEL, 0, -1); - r = SendMessage(hwEdit, WM_CHAR, 3, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - r = SendMessage(hwEdit, WM_CHAR, 22, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(r == 0, "Expected: 0, got: %d\n", r); - ok(strcmp(buffer, "") == 0, "expected empty string, got %s\n", buffer); - - DestroyWindow (hwEdit); -} - -static void test_undo(void) -{ - HWND hwEdit; - LONG r; - DWORD cpMin, cpMax; - char buffer[1024]; - const char* text = "undo this"; - - hwEdit = create_editcontrol(0, 0); - r = get_edit_style(hwEdit); - ok(0 == r, "Wrong style expected 0x%x got: 0x%x\n", 0, r); - - /* set text */ - r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) text); - ok(TRUE == r, "Expected: %d, got: %d\n", TRUE, r); - - /* select all, */ - cpMin = cpMax = 0xdeadbeef; - SendMessage(hwEdit, EM_SETSEL, 0, -1); - r = SendMessage(hwEdit, EM_GETSEL, (WPARAM) &cpMin, (LPARAM) &cpMax); - ok((strlen(text) << 16) == r, "Unexpected length %d\n", r); - ok(0 == cpMin, "Expected: %d, got %d\n", 0, cpMin); - ok(9 == cpMax, "Expected: %d, got %d\n", 9, cpMax); - - /* cut (ctrl-x) */ - r = SendMessage(hwEdit, WM_CHAR, 24, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(0 == r, "Expected: %d, got len %d\n", 0, r); - ok(0 == strcmp(buffer, ""), "expected %s, got %s\n", "", buffer); - - /* undo (ctrl-z) */ - r = SendMessage(hwEdit, WM_CHAR, 26, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(strlen(text) == r, "Unexpected length %d\n", r); - ok(0 == strcmp(buffer, text), "expected %s, got %s\n", text, buffer); - - /* undo again (ctrl-z) */ - r = SendMessage(hwEdit, WM_CHAR, 26, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(r == 0, "Expected: %d, got len %d\n", 0, r); - ok(0 == strcmp(buffer, ""), "expected %s, got %s\n", "", buffer); - - DestroyWindow (hwEdit); -} - -static void test_enter(void) -{ - HWND hwEdit; - LONG r; - char buffer[16]; - - /* multiline */ - hwEdit = create_editcontrol(ES_MULTILINE, 0); - r = get_edit_style(hwEdit); - ok(ES_MULTILINE == r, "Wrong style expected 0x%x got: 0x%x\n", ES_MULTILINE, r); - - /* set text */ - r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) ""); - ok(TRUE == r, "Expected: %d, got: %d\n", TRUE, r); - - r = SendMessage(hwEdit, WM_CHAR, VK_RETURN, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 16, (LPARAM) buffer); - ok(2 == r, "Expected: %d, got len %d\n", 2, r); - ok(0 == strcmp(buffer, "\r\n"), "expected \"\\r\\n\", got \"%s\"\n", buffer); - - DestroyWindow (hwEdit); - - /* single line */ - hwEdit = create_editcontrol(0, 0); - r = get_edit_style(hwEdit); - ok(0 == r, "Wrong style expected 0x%x got: 0x%x\n", 0, r); - - /* set text */ - r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) ""); - ok(TRUE == r, "Expected: %d, got: %d\n", TRUE, r); - - r = SendMessage(hwEdit, WM_CHAR, VK_RETURN, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 16, (LPARAM) buffer); - ok(0 == r, "Expected: %d, got len %d\n", 0, r); - ok(0 == strcmp(buffer, ""), "expected \"\", got \"%s\"\n", buffer); - - DestroyWindow (hwEdit); - - /* single line with ES_WANTRETURN */ - hwEdit = create_editcontrol(ES_WANTRETURN, 0); - r = get_edit_style(hwEdit); - ok(ES_WANTRETURN == r, "Wrong style expected 0x%x got: 0x%x\n", ES_WANTRETURN, r); - - /* set text */ - r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) ""); - ok(TRUE == r, "Expected: %d, got: %d\n", TRUE, r); - - r = SendMessage(hwEdit, WM_CHAR, VK_RETURN, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 16, (LPARAM) buffer); - ok(0 == r, "Expected: %d, got len %d\n", 0, r); - ok(0 == strcmp(buffer, ""), "expected \"\", got \"%s\"\n", buffer); - - DestroyWindow (hwEdit); -} - -static void test_tab(void) -{ - HWND hwEdit; - LONG r; - char buffer[16]; - - /* multiline */ - hwEdit = create_editcontrol(ES_MULTILINE, 0); - r = get_edit_style(hwEdit); - ok(ES_MULTILINE == r, "Wrong style expected 0x%x got: 0x%x\n", ES_MULTILINE, r); - - /* set text */ - r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) ""); - ok(TRUE == r, "Expected: %d, got: %d\n", TRUE, r); - - r = SendMessage(hwEdit, WM_CHAR, VK_TAB, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 16, (LPARAM) buffer); - ok(1 == r, "Expected: %d, got len %d\n", 1, r); - ok(0 == strcmp(buffer, "\t"), "expected \"\\t\", got \"%s\"\n", buffer); - - DestroyWindow (hwEdit); - - /* single line */ - hwEdit = create_editcontrol(0, 0); - r = get_edit_style(hwEdit); - ok(0 == r, "Wrong style expected 0x%x got: 0x%x\n", 0, r); - - /* set text */ - r = SendMessage(hwEdit , WM_SETTEXT, 0, (LPARAM) ""); - ok(TRUE == r, "Expected: %d, got: %d\n", TRUE, r); - - r = SendMessage(hwEdit, WM_CHAR, VK_TAB, 0); - ok(1 == r, "Expected: %d, got: %d\n", 1, r); - - /* get text */ - buffer[0] = 0; - r = SendMessage(hwEdit, WM_GETTEXT, 16, (LPARAM) buffer); - ok(0 == r, "Expected: %d, got len %d\n", 0, r); - ok(0 == strcmp(buffer, ""), "expected \"\", got \"%s\"\n", buffer); - - DestroyWindow (hwEdit); -} - -static void test_edit_dialog(void) -{ - int r; - - /* from bug 11841 */ - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 0); - ok(333 == r, "Expected %d, got %d\n", 333, r); - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 1); - ok(111 == r, "Expected %d, got %d\n", 111, r); - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 2); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* more tests for WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 3); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 4); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 5); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* more tests for WM_KEYDOWN + WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 6); - todo_wine ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 7); - todo_wine ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_READONLY_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 8); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests with an editable edit control */ - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 0); - ok(333 == r, "Expected %d, got %d\n", 333, r); - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 1); - ok(111 == r, "Expected %d, got %d\n", 111, r); - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 2); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 3); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 4); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 5); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_KEYDOWN + WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 6); - todo_wine ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 7); - todo_wine ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 8); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* multiple tab tests */ - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 9); - ok(22 == r, "Expected %d, got %d\n", 22, r); - r = DialogBoxParam(hinst, "EDIT_DIALOG", NULL, (DLGPROC)edit_dialog_proc, 10); - ok(33 == r, "Expected %d, got %d\n", 33, r); -} - -static void test_multi_edit_dialog(void) -{ - int r; - - /* test for multiple edit dialogs (bug 12319) */ - r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, (DLGPROC)multi_edit_dialog_proc, 0); - ok(2222 == r, "Expected %d, got %d\n", 2222, r); - r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, (DLGPROC)multi_edit_dialog_proc, 1); - ok(1111 == r, "Expected %d, got %d\n", 1111, r); - r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, (DLGPROC)multi_edit_dialog_proc, 2); - ok(2222 == r, "Expected %d, got %d\n", 2222, r); - r = DialogBoxParam(hinst, "MULTI_EDIT_DIALOG", NULL, (DLGPROC)multi_edit_dialog_proc, 3); - ok(11 == r, "Expected %d, got %d\n", 11, r); -} - -static void test_wantreturn_edit_dialog(void) -{ - int r; - - /* tests for WM_KEYDOWN */ - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 0); - ok(333 == r, "Expected %d, got %d\n", 333, r); - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 1); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 2); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 3); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 4); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 5); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_KEYDOWN + WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 6); - todo_wine ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 7); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_wantreturn_dialog_proc, 8); - ok(444 == r, "Expected %d, got %d\n", 444, r); -} - -static void test_singleline_wantreturn_edit_dialog(void) -{ - int r; - - /* tests for WM_KEYDOWN */ - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 0); - ok(222 == r, "Expected %d, got %d\n", 222, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 1); - ok(111 == r, "Expected %d, got %d\n", 111, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 2); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 3); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 4); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 5); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_KEYDOWN + WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 6); - ok(222 == r, "Expected %d, got %d\n", 222, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 7); - ok(111 == r, "Expected %d, got %d\n", 111, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 8); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_KEYDOWN */ - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 0); - ok(222 == r, "Expected %d, got %d\n", 222, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 1); - ok(111 == r, "Expected %d, got %d\n", 111, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 2); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 3); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 4); - ok(444 == r, "Expected %d, got %d\n", 444, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 5); - ok(444 == r, "Expected %d, got %d\n", 444, r); - - /* tests for WM_KEYDOWN + WM_CHAR */ - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 6); - ok(222 == r, "Expected %d, got %d\n", 222, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 7); - ok(111 == r, "Expected %d, got %d\n", 111, r); - r = DialogBoxParam(hinst, "EDIT_SINGLELINE_WANTRETURN_DIALOG", NULL, (DLGPROC)edit_singleline_dialog_proc, 8); - ok(444 == r, "Expected %d, got %d\n", 444, r); -} - -static int child_edit_wmkeydown_num_messages = 0; -static INT_PTR CALLBACK child_edit_wmkeydown_proc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_DESTROY: - case WM_NCDESTROY: - break; - - default: - child_edit_wmkeydown_num_messages++; - break; - } - - return FALSE; -} - -static void test_child_edit_wmkeydown(void) -{ - HWND hwEdit, hwParent; - int r; - - hwEdit = create_child_editcontrol(0, 0); - hwParent = GetParent(hwEdit); - SetWindowLongPtr(hwParent, GWLP_WNDPROC, (LONG_PTR)child_edit_wmkeydown_proc); - r = SendMessage(hwEdit, WM_KEYDOWN, VK_RETURN, 0x1c0001); - ok(1 == r, "expected 1, got %d\n", r); - ok(0 == child_edit_wmkeydown_num_messages, "expected 0, got %d\n", child_edit_wmkeydown_num_messages); - destroy_child_editcontrol(hwEdit); -} - -static BOOL RegisterWindowClasses (void) -{ - WNDCLASSA test2; - WNDCLASSA test3; - WNDCLASSA text_position; - - test2.style = 0; - test2.lpfnWndProc = ET2_WndProc; - test2.cbClsExtra = 0; - test2.cbWndExtra = 0; - test2.hInstance = hinst; - test2.hIcon = NULL; - test2.hCursor = LoadCursorA (NULL, IDC_ARROW); - test2.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); - test2.lpszMenuName = NULL; - test2.lpszClassName = szEditTest2Class; - if (!RegisterClassA(&test2)) return FALSE; - - test3.style = 0; - test3.lpfnWndProc = edit3_wnd_procA; - test3.cbClsExtra = 0; - test3.cbWndExtra = 0; - test3.hInstance = hinst; - test3.hIcon = 0; - test3.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - test3.hbrBackground = GetStockObject(WHITE_BRUSH); - test3.lpszMenuName = NULL; - test3.lpszClassName = szEditTest3Class; - if (!RegisterClassA(&test3)) return FALSE; - - text_position.style = CS_HREDRAW | CS_VREDRAW; - text_position.cbClsExtra = 0; - text_position.cbWndExtra = 0; - text_position.hInstance = hinst; - text_position.hIcon = NULL; - text_position.hCursor = LoadCursorA(NULL, IDC_ARROW); - text_position.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - text_position.lpszMenuName = NULL; - text_position.lpszClassName = szEditTextPositionClass; - text_position.lpfnWndProc = DefWindowProc; - if (!RegisterClassA(&text_position)) return FALSE; - - return TRUE; -} - -static void UnregisterWindowClasses (void) -{ - UnregisterClassA(szEditTest2Class, hinst); - UnregisterClassA(szEditTest3Class, hinst); - UnregisterClassA(szEditTextPositionClass, hinst); -} - -START_TEST(edit) -{ - hinst = GetModuleHandleA(NULL); - assert(RegisterWindowClasses()); - - test_edit_control_1(); - test_edit_control_2(); - test_edit_control_3(); - test_edit_control_4(); - test_edit_control_5(); - test_edit_control_limittext(); - test_margins(); - test_margins_font_change(); - test_text_position(); - test_espassword(); - test_undo(); - test_enter(); - test_tab(); - test_edit_dialog(); - test_multi_edit_dialog(); - test_wantreturn_edit_dialog(); - test_singleline_wantreturn_edit_dialog(); - test_child_edit_wmkeydown(); - - UnregisterWindowClasses(); -} diff --git a/rostests/winetests/user32/generated.c b/rostests/winetests/user32/generated.c deleted file mode 100644 index c2d24f913ff..00000000000 --- a/rostests/winetests/user32/generated.c +++ /dev/null @@ -1,2481 +0,0 @@ -/* File generated automatically from tools/winapi/test.dat; do not edit! */ -/* This file can be copied, modified and distributed without restriction. */ - -/* - * Unit tests for data structure packing - */ - -#define WINVER 0x0501 -#define _WIN32_IE 0x0501 -#define _WIN32_WINNT 0x0501 - -#define WINE_NOWINSOCK - -#include "windows.h" - -#include "wine/test.h" - -/*********************************************************************** - * Compatibility macros - */ - -#define DWORD_PTR UINT_PTR -#define LONG_PTR INT_PTR -#define ULONG_PTR UINT_PTR - -/*********************************************************************** - * Windows API extension - */ - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field) -#elif defined(__GNUC__) -# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field) -#else -/* FIXME: Not sure if is possible to do without compiler extension */ -#endif - -#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus) -# define _TYPE_ALIGNMENT(type) __alignof(type) -#elif defined(__GNUC__) -# define _TYPE_ALIGNMENT(type) __alignof__(type) -#else -/* - * FIXME: Not sure if is possible to do without compiler extension - * (if type is not just a name that is, if so the normal) - * TYPE_ALIGNMENT can be used) - */ -#endif - -#if defined(TYPE_ALIGNMENT) && defined(_MSC_VER) && _MSC_VER >= 800 && !defined(__cplusplus) -#pragma warning(disable:4116) -#endif - -#if !defined(TYPE_ALIGNMENT) && defined(_TYPE_ALIGNMENT) -# define TYPE_ALIGNMENT _TYPE_ALIGNMENT -#endif - -/*********************************************************************** - * Test helper macros - */ - -#ifdef FIELD_ALIGNMENT -# define TEST_FIELD_ALIGNMENT(type, field, align) \ - ok(FIELD_ALIGNMENT(type, field) == align, \ - "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \ - (int)FIELD_ALIGNMENT(type, field)) -#else -# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0) -#endif - -#define TEST_FIELD_OFFSET(type, field, offset) \ - ok(FIELD_OFFSET(type, field) == offset, \ - "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \ - (long int)FIELD_OFFSET(type, field)) - -#ifdef _TYPE_ALIGNMENT -#define TEST__TYPE_ALIGNMENT(type, align) \ - ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type)) -#else -# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#ifdef TYPE_ALIGNMENT -#define TEST_TYPE_ALIGNMENT(type, align) \ - ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type)) -#else -# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0) -#endif - -#define TEST_TYPE_SIZE(type, size) \ - ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type))) - -/*********************************************************************** - * Test macros - */ - -#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \ - TEST_TYPE_SIZE(field_type, field_size); \ - TEST_FIELD_ALIGNMENT(type, field_name, field_align); \ - TEST_FIELD_OFFSET(type, field_name, field_offset); \ - -#define TEST_TYPE(type, size, align) \ - TEST_TYPE_ALIGNMENT(type, align); \ - TEST_TYPE_SIZE(type, size) - -#define TEST_TYPE_POINTER(type, size, align) \ - TEST__TYPE_ALIGNMENT(*(type)0, align); \ - TEST_TYPE_SIZE(*(type)0, size) - -#define TEST_TYPE_SIGNED(type) \ - ok((type) -1 < 0, "(" #type ") -1 < 0\n"); - -#define TEST_TYPE_UNSIGNED(type) \ - ok((type) -1 > 0, "(" #type ") -1 > 0\n"); - -static void test_pack_ACCESSTIMEOUT(void) -{ - /* ACCESSTIMEOUT (pack 4) */ - TEST_TYPE(ACCESSTIMEOUT, 12, 4); - TEST_FIELD(ACCESSTIMEOUT, UINT, cbSize, 0, 4, 4); - TEST_FIELD(ACCESSTIMEOUT, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(ACCESSTIMEOUT, DWORD, iTimeOutMSec, 8, 4, 4); -} - -static void test_pack_ANIMATIONINFO(void) -{ - /* ANIMATIONINFO (pack 4) */ - TEST_TYPE(ANIMATIONINFO, 8, 4); - TEST_FIELD(ANIMATIONINFO, UINT, cbSize, 0, 4, 4); - TEST_FIELD(ANIMATIONINFO, INT, iMinAnimate, 4, 4, 4); -} - -static void test_pack_CBTACTIVATESTRUCT(void) -{ - /* CBTACTIVATESTRUCT (pack 4) */ - TEST_TYPE(CBTACTIVATESTRUCT, 8, 4); - TEST_FIELD(CBTACTIVATESTRUCT, BOOL, fMouse, 0, 4, 4); - TEST_FIELD(CBTACTIVATESTRUCT, HWND, hWndActive, 4, 4, 4); -} - -static void test_pack_CBT_CREATEWNDA(void) -{ - /* CBT_CREATEWNDA (pack 4) */ - TEST_TYPE(CBT_CREATEWNDA, 8, 4); - TEST_FIELD(CBT_CREATEWNDA, CREATESTRUCTA *, lpcs, 0, 4, 4); - TEST_FIELD(CBT_CREATEWNDA, HWND, hwndInsertAfter, 4, 4, 4); -} - -static void test_pack_CBT_CREATEWNDW(void) -{ - /* CBT_CREATEWNDW (pack 4) */ - TEST_TYPE(CBT_CREATEWNDW, 8, 4); - TEST_FIELD(CBT_CREATEWNDW, CREATESTRUCTW *, lpcs, 0, 4, 4); - TEST_FIELD(CBT_CREATEWNDW, HWND, hwndInsertAfter, 4, 4, 4); -} - -static void test_pack_CLIENTCREATESTRUCT(void) -{ - /* CLIENTCREATESTRUCT (pack 4) */ - TEST_TYPE(CLIENTCREATESTRUCT, 8, 4); - TEST_FIELD(CLIENTCREATESTRUCT, HMENU, hWindowMenu, 0, 4, 4); - TEST_FIELD(CLIENTCREATESTRUCT, UINT, idFirstChild, 4, 4, 4); -} - -static void test_pack_COMBOBOXINFO(void) -{ - /* COMBOBOXINFO (pack 4) */ - TEST_TYPE(COMBOBOXINFO, 52, 4); - TEST_FIELD(COMBOBOXINFO, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(COMBOBOXINFO, RECT, rcItem, 4, 16, 4); - TEST_FIELD(COMBOBOXINFO, RECT, rcButton, 20, 16, 4); - TEST_FIELD(COMBOBOXINFO, DWORD, stateButton, 36, 4, 4); - TEST_FIELD(COMBOBOXINFO, HWND, hwndCombo, 40, 4, 4); - TEST_FIELD(COMBOBOXINFO, HWND, hwndItem, 44, 4, 4); - TEST_FIELD(COMBOBOXINFO, HWND, hwndList, 48, 4, 4); -} - -static void test_pack_COMPAREITEMSTRUCT(void) -{ - /* COMPAREITEMSTRUCT (pack 4) */ - TEST_TYPE(COMPAREITEMSTRUCT, 32, 4); - TEST_FIELD(COMPAREITEMSTRUCT, UINT, CtlType, 0, 4, 4); - TEST_FIELD(COMPAREITEMSTRUCT, UINT, CtlID, 4, 4, 4); - TEST_FIELD(COMPAREITEMSTRUCT, HWND, hwndItem, 8, 4, 4); - TEST_FIELD(COMPAREITEMSTRUCT, UINT, itemID1, 12, 4, 4); - TEST_FIELD(COMPAREITEMSTRUCT, ULONG_PTR, itemData1, 16, 4, 4); - TEST_FIELD(COMPAREITEMSTRUCT, UINT, itemID2, 20, 4, 4); - TEST_FIELD(COMPAREITEMSTRUCT, ULONG_PTR, itemData2, 24, 4, 4); - TEST_FIELD(COMPAREITEMSTRUCT, DWORD, dwLocaleId, 28, 4, 4); -} - -static void test_pack_COPYDATASTRUCT(void) -{ - /* COPYDATASTRUCT (pack 4) */ - TEST_TYPE(COPYDATASTRUCT, 12, 4); - TEST_FIELD(COPYDATASTRUCT, ULONG_PTR, dwData, 0, 4, 4); - TEST_FIELD(COPYDATASTRUCT, DWORD, cbData, 4, 4, 4); - TEST_FIELD(COPYDATASTRUCT, PVOID, lpData, 8, 4, 4); -} - -static void test_pack_CREATESTRUCTA(void) -{ - /* CREATESTRUCTA (pack 4) */ - TEST_TYPE(CREATESTRUCTA, 48, 4); - TEST_FIELD(CREATESTRUCTA, LPVOID, lpCreateParams, 0, 4, 4); - TEST_FIELD(CREATESTRUCTA, HINSTANCE, hInstance, 4, 4, 4); - TEST_FIELD(CREATESTRUCTA, HMENU, hMenu, 8, 4, 4); - TEST_FIELD(CREATESTRUCTA, HWND, hwndParent, 12, 4, 4); - TEST_FIELD(CREATESTRUCTA, INT, cy, 16, 4, 4); - TEST_FIELD(CREATESTRUCTA, INT, cx, 20, 4, 4); - TEST_FIELD(CREATESTRUCTA, INT, y, 24, 4, 4); - TEST_FIELD(CREATESTRUCTA, INT, x, 28, 4, 4); - TEST_FIELD(CREATESTRUCTA, LONG, style, 32, 4, 4); - TEST_FIELD(CREATESTRUCTA, LPCSTR, lpszName, 36, 4, 4); - TEST_FIELD(CREATESTRUCTA, LPCSTR, lpszClass, 40, 4, 4); - TEST_FIELD(CREATESTRUCTA, DWORD, dwExStyle, 44, 4, 4); -} - -static void test_pack_CREATESTRUCTW(void) -{ - /* CREATESTRUCTW (pack 4) */ - TEST_TYPE(CREATESTRUCTW, 48, 4); - TEST_FIELD(CREATESTRUCTW, LPVOID, lpCreateParams, 0, 4, 4); - TEST_FIELD(CREATESTRUCTW, HINSTANCE, hInstance, 4, 4, 4); - TEST_FIELD(CREATESTRUCTW, HMENU, hMenu, 8, 4, 4); - TEST_FIELD(CREATESTRUCTW, HWND, hwndParent, 12, 4, 4); - TEST_FIELD(CREATESTRUCTW, INT, cy, 16, 4, 4); - TEST_FIELD(CREATESTRUCTW, INT, cx, 20, 4, 4); - TEST_FIELD(CREATESTRUCTW, INT, y, 24, 4, 4); - TEST_FIELD(CREATESTRUCTW, INT, x, 28, 4, 4); - TEST_FIELD(CREATESTRUCTW, LONG, style, 32, 4, 4); - TEST_FIELD(CREATESTRUCTW, LPCWSTR, lpszName, 36, 4, 4); - TEST_FIELD(CREATESTRUCTW, LPCWSTR, lpszClass, 40, 4, 4); - TEST_FIELD(CREATESTRUCTW, DWORD, dwExStyle, 44, 4, 4); -} - -static void test_pack_CURSORINFO(void) -{ - /* CURSORINFO (pack 4) */ - TEST_TYPE(CURSORINFO, 20, 4); - TEST_FIELD(CURSORINFO, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(CURSORINFO, DWORD, flags, 4, 4, 4); - TEST_FIELD(CURSORINFO, HCURSOR, hCursor, 8, 4, 4); - TEST_FIELD(CURSORINFO, POINT, ptScreenPos, 12, 8, 4); -} - -static void test_pack_CWPRETSTRUCT(void) -{ - /* CWPRETSTRUCT (pack 4) */ - TEST_TYPE(CWPRETSTRUCT, 20, 4); - TEST_FIELD(CWPRETSTRUCT, LRESULT, lResult, 0, 4, 4); - TEST_FIELD(CWPRETSTRUCT, LPARAM, lParam, 4, 4, 4); - TEST_FIELD(CWPRETSTRUCT, WPARAM, wParam, 8, 4, 4); - TEST_FIELD(CWPRETSTRUCT, DWORD, message, 12, 4, 4); - TEST_FIELD(CWPRETSTRUCT, HWND, hwnd, 16, 4, 4); -} - -static void test_pack_CWPSTRUCT(void) -{ - /* CWPSTRUCT (pack 4) */ - TEST_TYPE(CWPSTRUCT, 16, 4); - TEST_FIELD(CWPSTRUCT, LPARAM, lParam, 0, 4, 4); - TEST_FIELD(CWPSTRUCT, WPARAM, wParam, 4, 4, 4); - TEST_FIELD(CWPSTRUCT, UINT, message, 8, 4, 4); - TEST_FIELD(CWPSTRUCT, HWND, hwnd, 12, 4, 4); -} - -static void test_pack_DEBUGHOOKINFO(void) -{ - /* DEBUGHOOKINFO (pack 4) */ - TEST_TYPE(DEBUGHOOKINFO, 20, 4); - TEST_FIELD(DEBUGHOOKINFO, DWORD, idThread, 0, 4, 4); - TEST_FIELD(DEBUGHOOKINFO, DWORD, idThreadInstaller, 4, 4, 4); - TEST_FIELD(DEBUGHOOKINFO, LPARAM, lParam, 8, 4, 4); - TEST_FIELD(DEBUGHOOKINFO, WPARAM, wParam, 12, 4, 4); - TEST_FIELD(DEBUGHOOKINFO, INT, code, 16, 4, 4); -} - -static void test_pack_DELETEITEMSTRUCT(void) -{ - /* DELETEITEMSTRUCT (pack 4) */ - TEST_TYPE(DELETEITEMSTRUCT, 20, 4); - TEST_FIELD(DELETEITEMSTRUCT, UINT, CtlType, 0, 4, 4); - TEST_FIELD(DELETEITEMSTRUCT, UINT, CtlID, 4, 4, 4); - TEST_FIELD(DELETEITEMSTRUCT, UINT, itemID, 8, 4, 4); - TEST_FIELD(DELETEITEMSTRUCT, HWND, hwndItem, 12, 4, 4); - TEST_FIELD(DELETEITEMSTRUCT, ULONG_PTR, itemData, 16, 4, 4); -} - -static void test_pack_DESKTOPENUMPROCA(void) -{ - /* DESKTOPENUMPROCA */ - TEST_TYPE(DESKTOPENUMPROCA, 4, 4); -} - -static void test_pack_DESKTOPENUMPROCW(void) -{ - /* DESKTOPENUMPROCW */ - TEST_TYPE(DESKTOPENUMPROCW, 4, 4); -} - -static void test_pack_DLGITEMTEMPLATE(void) -{ - /* DLGITEMTEMPLATE (pack 2) */ - TEST_TYPE(DLGITEMTEMPLATE, 18, 2); - TEST_FIELD(DLGITEMTEMPLATE, DWORD, style, 0, 4, 2); - TEST_FIELD(DLGITEMTEMPLATE, DWORD, dwExtendedStyle, 4, 4, 2); - TEST_FIELD(DLGITEMTEMPLATE, short, x, 8, 2, 2); - TEST_FIELD(DLGITEMTEMPLATE, short, y, 10, 2, 2); - TEST_FIELD(DLGITEMTEMPLATE, short, cx, 12, 2, 2); - TEST_FIELD(DLGITEMTEMPLATE, short, cy, 14, 2, 2); - TEST_FIELD(DLGITEMTEMPLATE, WORD, id, 16, 2, 2); -} - -static void test_pack_DLGPROC(void) -{ - /* DLGPROC */ - TEST_TYPE(DLGPROC, 4, 4); -} - -static void test_pack_DLGTEMPLATE(void) -{ - /* DLGTEMPLATE (pack 2) */ - TEST_TYPE(DLGTEMPLATE, 18, 2); - TEST_FIELD(DLGTEMPLATE, DWORD, style, 0, 4, 2); - TEST_FIELD(DLGTEMPLATE, DWORD, dwExtendedStyle, 4, 4, 2); - TEST_FIELD(DLGTEMPLATE, WORD, cdit, 8, 2, 2); - TEST_FIELD(DLGTEMPLATE, short, x, 10, 2, 2); - TEST_FIELD(DLGTEMPLATE, short, y, 12, 2, 2); - TEST_FIELD(DLGTEMPLATE, short, cx, 14, 2, 2); - TEST_FIELD(DLGTEMPLATE, short, cy, 16, 2, 2); -} - -static void test_pack_DRAWITEMSTRUCT(void) -{ - /* DRAWITEMSTRUCT (pack 4) */ - TEST_TYPE(DRAWITEMSTRUCT, 48, 4); - TEST_FIELD(DRAWITEMSTRUCT, UINT, CtlType, 0, 4, 4); - TEST_FIELD(DRAWITEMSTRUCT, UINT, CtlID, 4, 4, 4); - TEST_FIELD(DRAWITEMSTRUCT, UINT, itemID, 8, 4, 4); - TEST_FIELD(DRAWITEMSTRUCT, UINT, itemAction, 12, 4, 4); - TEST_FIELD(DRAWITEMSTRUCT, UINT, itemState, 16, 4, 4); - TEST_FIELD(DRAWITEMSTRUCT, HWND, hwndItem, 20, 4, 4); - TEST_FIELD(DRAWITEMSTRUCT, HDC, hDC, 24, 4, 4); - TEST_FIELD(DRAWITEMSTRUCT, RECT, rcItem, 28, 16, 4); - TEST_FIELD(DRAWITEMSTRUCT, ULONG_PTR, itemData, 44, 4, 4); -} - -static void test_pack_DRAWSTATEPROC(void) -{ - /* DRAWSTATEPROC */ - TEST_TYPE(DRAWSTATEPROC, 4, 4); -} - -static void test_pack_DRAWTEXTPARAMS(void) -{ - /* DRAWTEXTPARAMS (pack 4) */ - TEST_TYPE(DRAWTEXTPARAMS, 20, 4); - TEST_FIELD(DRAWTEXTPARAMS, UINT, cbSize, 0, 4, 4); - TEST_FIELD(DRAWTEXTPARAMS, INT, iTabLength, 4, 4, 4); - TEST_FIELD(DRAWTEXTPARAMS, INT, iLeftMargin, 8, 4, 4); - TEST_FIELD(DRAWTEXTPARAMS, INT, iRightMargin, 12, 4, 4); - TEST_FIELD(DRAWTEXTPARAMS, UINT, uiLengthDrawn, 16, 4, 4); -} - -static void test_pack_EDITWORDBREAKPROCA(void) -{ - /* EDITWORDBREAKPROCA */ - TEST_TYPE(EDITWORDBREAKPROCA, 4, 4); -} - -static void test_pack_EDITWORDBREAKPROCW(void) -{ - /* EDITWORDBREAKPROCW */ - TEST_TYPE(EDITWORDBREAKPROCW, 4, 4); -} - -static void test_pack_EVENTMSG(void) -{ - /* EVENTMSG (pack 4) */ - TEST_TYPE(EVENTMSG, 20, 4); - TEST_FIELD(EVENTMSG, UINT, message, 0, 4, 4); - TEST_FIELD(EVENTMSG, UINT, paramL, 4, 4, 4); - TEST_FIELD(EVENTMSG, UINT, paramH, 8, 4, 4); - TEST_FIELD(EVENTMSG, DWORD, time, 12, 4, 4); - TEST_FIELD(EVENTMSG, HWND, hwnd, 16, 4, 4); -} - -static void test_pack_FILTERKEYS(void) -{ - /* FILTERKEYS (pack 4) */ - TEST_TYPE(FILTERKEYS, 24, 4); - TEST_FIELD(FILTERKEYS, UINT, cbSize, 0, 4, 4); - TEST_FIELD(FILTERKEYS, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(FILTERKEYS, DWORD, iWaitMSec, 8, 4, 4); - TEST_FIELD(FILTERKEYS, DWORD, iDelayMSec, 12, 4, 4); - TEST_FIELD(FILTERKEYS, DWORD, iRepeatMSec, 16, 4, 4); - TEST_FIELD(FILTERKEYS, DWORD, iBounceMSec, 20, 4, 4); -} - -static void test_pack_FLASHWINFO(void) -{ - /* FLASHWINFO (pack 4) */ - TEST_TYPE(FLASHWINFO, 20, 4); - TEST_FIELD(FLASHWINFO, UINT, cbSize, 0, 4, 4); - TEST_FIELD(FLASHWINFO, HWND, hwnd, 4, 4, 4); - TEST_FIELD(FLASHWINFO, DWORD, dwFlags, 8, 4, 4); - TEST_FIELD(FLASHWINFO, UINT, uCount, 12, 4, 4); - TEST_FIELD(FLASHWINFO, DWORD, dwTimeout, 16, 4, 4); -} - -static void test_pack_GRAYSTRINGPROC(void) -{ - /* GRAYSTRINGPROC */ - TEST_TYPE(GRAYSTRINGPROC, 4, 4); -} - -static void test_pack_GUITHREADINFO(void) -{ - /* GUITHREADINFO (pack 4) */ - TEST_TYPE(GUITHREADINFO, 48, 4); - TEST_FIELD(GUITHREADINFO, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(GUITHREADINFO, DWORD, flags, 4, 4, 4); - TEST_FIELD(GUITHREADINFO, HWND, hwndActive, 8, 4, 4); - TEST_FIELD(GUITHREADINFO, HWND, hwndFocus, 12, 4, 4); - TEST_FIELD(GUITHREADINFO, HWND, hwndCapture, 16, 4, 4); - TEST_FIELD(GUITHREADINFO, HWND, hwndMenuOwner, 20, 4, 4); - TEST_FIELD(GUITHREADINFO, HWND, hwndMoveSize, 24, 4, 4); - TEST_FIELD(GUITHREADINFO, HWND, hwndCaret, 28, 4, 4); - TEST_FIELD(GUITHREADINFO, RECT, rcCaret, 32, 16, 4); -} - -static void test_pack_HARDWAREHOOKSTRUCT(void) -{ - /* HARDWAREHOOKSTRUCT (pack 4) */ - TEST_TYPE(HARDWAREHOOKSTRUCT, 16, 4); - TEST_FIELD(HARDWAREHOOKSTRUCT, HWND, hwnd, 0, 4, 4); - TEST_FIELD(HARDWAREHOOKSTRUCT, UINT, message, 4, 4, 4); - TEST_FIELD(HARDWAREHOOKSTRUCT, WPARAM, wParam, 8, 4, 4); - TEST_FIELD(HARDWAREHOOKSTRUCT, LPARAM, lParam, 12, 4, 4); -} - -static void test_pack_HARDWAREINPUT(void) -{ - /* HARDWAREINPUT (pack 4) */ - TEST_TYPE(HARDWAREINPUT, 8, 4); - TEST_FIELD(HARDWAREINPUT, DWORD, uMsg, 0, 4, 4); - TEST_FIELD(HARDWAREINPUT, WORD, wParamL, 4, 2, 2); - TEST_FIELD(HARDWAREINPUT, WORD, wParamH, 6, 2, 2); -} - -static void test_pack_HDEVNOTIFY(void) -{ - /* HDEVNOTIFY */ - TEST_TYPE(HDEVNOTIFY, 4, 4); -} - -static void test_pack_HDWP(void) -{ - /* HDWP */ - TEST_TYPE(HDWP, 4, 4); -} - -static void test_pack_HELPINFO(void) -{ - /* HELPINFO (pack 4) */ - TEST_TYPE(HELPINFO, 28, 4); - TEST_FIELD(HELPINFO, UINT, cbSize, 0, 4, 4); - TEST_FIELD(HELPINFO, INT, iContextType, 4, 4, 4); - TEST_FIELD(HELPINFO, INT, iCtrlId, 8, 4, 4); - TEST_FIELD(HELPINFO, HANDLE, hItemHandle, 12, 4, 4); - TEST_FIELD(HELPINFO, DWORD_PTR, dwContextId, 16, 4, 4); - TEST_FIELD(HELPINFO, POINT, MousePos, 20, 8, 4); -} - -static void test_pack_HELPWININFOA(void) -{ - /* HELPWININFOA (pack 4) */ - TEST_TYPE(HELPWININFOA, 28, 4); - TEST_FIELD(HELPWININFOA, int, wStructSize, 0, 4, 4); - TEST_FIELD(HELPWININFOA, int, x, 4, 4, 4); - TEST_FIELD(HELPWININFOA, int, y, 8, 4, 4); - TEST_FIELD(HELPWININFOA, int, dx, 12, 4, 4); - TEST_FIELD(HELPWININFOA, int, dy, 16, 4, 4); - TEST_FIELD(HELPWININFOA, int, wMax, 20, 4, 4); - TEST_FIELD(HELPWININFOA, CHAR[2], rgchMember, 24, 2, 1); -} - -static void test_pack_HELPWININFOW(void) -{ - /* HELPWININFOW (pack 4) */ - TEST_TYPE(HELPWININFOW, 28, 4); - TEST_FIELD(HELPWININFOW, int, wStructSize, 0, 4, 4); - TEST_FIELD(HELPWININFOW, int, x, 4, 4, 4); - TEST_FIELD(HELPWININFOW, int, y, 8, 4, 4); - TEST_FIELD(HELPWININFOW, int, dx, 12, 4, 4); - TEST_FIELD(HELPWININFOW, int, dy, 16, 4, 4); - TEST_FIELD(HELPWININFOW, int, wMax, 20, 4, 4); - TEST_FIELD(HELPWININFOW, WCHAR[2], rgchMember, 24, 4, 2); -} - -static void test_pack_HIGHCONTRASTA(void) -{ - /* HIGHCONTRASTA (pack 4) */ - TEST_TYPE(HIGHCONTRASTA, 12, 4); - TEST_FIELD(HIGHCONTRASTA, UINT, cbSize, 0, 4, 4); - TEST_FIELD(HIGHCONTRASTA, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(HIGHCONTRASTA, LPSTR, lpszDefaultScheme, 8, 4, 4); -} - -static void test_pack_HIGHCONTRASTW(void) -{ - /* HIGHCONTRASTW (pack 4) */ - TEST_TYPE(HIGHCONTRASTW, 12, 4); - TEST_FIELD(HIGHCONTRASTW, UINT, cbSize, 0, 4, 4); - TEST_FIELD(HIGHCONTRASTW, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(HIGHCONTRASTW, LPWSTR, lpszDefaultScheme, 8, 4, 4); -} - -static void test_pack_HOOKPROC(void) -{ - /* HOOKPROC */ - TEST_TYPE(HOOKPROC, 4, 4); -} - -static void test_pack_ICONINFO(void) -{ - /* ICONINFO (pack 4) */ - TEST_TYPE(ICONINFO, 20, 4); - TEST_FIELD(ICONINFO, BOOL, fIcon, 0, 4, 4); - TEST_FIELD(ICONINFO, DWORD, xHotspot, 4, 4, 4); - TEST_FIELD(ICONINFO, DWORD, yHotspot, 8, 4, 4); - TEST_FIELD(ICONINFO, HBITMAP, hbmMask, 12, 4, 4); - TEST_FIELD(ICONINFO, HBITMAP, hbmColor, 16, 4, 4); -} - -static void test_pack_ICONMETRICSA(void) -{ - /* ICONMETRICSA (pack 4) */ - TEST_TYPE(ICONMETRICSA, 76, 4); - TEST_FIELD(ICONMETRICSA, UINT, cbSize, 0, 4, 4); - TEST_FIELD(ICONMETRICSA, int, iHorzSpacing, 4, 4, 4); - TEST_FIELD(ICONMETRICSA, int, iVertSpacing, 8, 4, 4); - TEST_FIELD(ICONMETRICSA, int, iTitleWrap, 12, 4, 4); - TEST_FIELD(ICONMETRICSA, LOGFONTA, lfFont, 16, 60, 4); -} - -static void test_pack_ICONMETRICSW(void) -{ - /* ICONMETRICSW (pack 4) */ - TEST_TYPE(ICONMETRICSW, 108, 4); - TEST_FIELD(ICONMETRICSW, UINT, cbSize, 0, 4, 4); - TEST_FIELD(ICONMETRICSW, int, iHorzSpacing, 4, 4, 4); - TEST_FIELD(ICONMETRICSW, int, iVertSpacing, 8, 4, 4); - TEST_FIELD(ICONMETRICSW, int, iTitleWrap, 12, 4, 4); - TEST_FIELD(ICONMETRICSW, LOGFONTW, lfFont, 16, 92, 4); -} - -static void test_pack_INPUT(void) -{ - /* INPUT (pack 4) */ - TEST_FIELD(INPUT, DWORD, type, 0, 4, 4); -} - -static void test_pack_KBDLLHOOKSTRUCT(void) -{ - /* KBDLLHOOKSTRUCT (pack 4) */ - TEST_TYPE(KBDLLHOOKSTRUCT, 20, 4); - TEST_FIELD(KBDLLHOOKSTRUCT, DWORD, vkCode, 0, 4, 4); - TEST_FIELD(KBDLLHOOKSTRUCT, DWORD, scanCode, 4, 4, 4); - TEST_FIELD(KBDLLHOOKSTRUCT, DWORD, flags, 8, 4, 4); - TEST_FIELD(KBDLLHOOKSTRUCT, DWORD, time, 12, 4, 4); - TEST_FIELD(KBDLLHOOKSTRUCT, ULONG_PTR, dwExtraInfo, 16, 4, 4); -} - -static void test_pack_KEYBDINPUT(void) -{ - /* KEYBDINPUT (pack 4) */ - TEST_TYPE(KEYBDINPUT, 16, 4); - TEST_FIELD(KEYBDINPUT, WORD, wVk, 0, 2, 2); - TEST_FIELD(KEYBDINPUT, WORD, wScan, 2, 2, 2); - TEST_FIELD(KEYBDINPUT, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(KEYBDINPUT, DWORD, time, 8, 4, 4); - TEST_FIELD(KEYBDINPUT, ULONG_PTR, dwExtraInfo, 12, 4, 4); -} - -static void test_pack_LPACCESSTIMEOUT(void) -{ - /* LPACCESSTIMEOUT */ - TEST_TYPE(LPACCESSTIMEOUT, 4, 4); - TEST_TYPE_POINTER(LPACCESSTIMEOUT, 12, 4); -} - -static void test_pack_LPANIMATIONINFO(void) -{ - /* LPANIMATIONINFO */ - TEST_TYPE(LPANIMATIONINFO, 4, 4); - TEST_TYPE_POINTER(LPANIMATIONINFO, 8, 4); -} - -static void test_pack_LPCBTACTIVATESTRUCT(void) -{ - /* LPCBTACTIVATESTRUCT */ - TEST_TYPE(LPCBTACTIVATESTRUCT, 4, 4); - TEST_TYPE_POINTER(LPCBTACTIVATESTRUCT, 8, 4); -} - -static void test_pack_LPCBT_CREATEWNDA(void) -{ - /* LPCBT_CREATEWNDA */ - TEST_TYPE(LPCBT_CREATEWNDA, 4, 4); - TEST_TYPE_POINTER(LPCBT_CREATEWNDA, 8, 4); -} - -static void test_pack_LPCBT_CREATEWNDW(void) -{ - /* LPCBT_CREATEWNDW */ - TEST_TYPE(LPCBT_CREATEWNDW, 4, 4); - TEST_TYPE_POINTER(LPCBT_CREATEWNDW, 8, 4); -} - -static void test_pack_LPCDLGTEMPLATEA(void) -{ - /* LPCDLGTEMPLATEA */ - TEST_TYPE(LPCDLGTEMPLATEA, 4, 4); - TEST_TYPE_POINTER(LPCDLGTEMPLATEA, 18, 2); -} - -static void test_pack_LPCDLGTEMPLATEW(void) -{ - /* LPCDLGTEMPLATEW */ - TEST_TYPE(LPCDLGTEMPLATEW, 4, 4); - TEST_TYPE_POINTER(LPCDLGTEMPLATEW, 18, 2); -} - -static void test_pack_LPCLIENTCREATESTRUCT(void) -{ - /* LPCLIENTCREATESTRUCT */ - TEST_TYPE(LPCLIENTCREATESTRUCT, 4, 4); - TEST_TYPE_POINTER(LPCLIENTCREATESTRUCT, 8, 4); -} - -static void test_pack_LPCMENUINFO(void) -{ - /* LPCMENUINFO */ - TEST_TYPE(LPCMENUINFO, 4, 4); - TEST_TYPE_POINTER(LPCMENUINFO, 28, 4); -} - -static void test_pack_LPCMENUITEMINFOA(void) -{ - /* LPCMENUITEMINFOA */ - TEST_TYPE(LPCMENUITEMINFOA, 4, 4); - TEST_TYPE_POINTER(LPCMENUITEMINFOA, 48, 4); -} - -static void test_pack_LPCMENUITEMINFOW(void) -{ - /* LPCMENUITEMINFOW */ - TEST_TYPE(LPCMENUITEMINFOW, 4, 4); - TEST_TYPE_POINTER(LPCMENUITEMINFOW, 48, 4); -} - -static void test_pack_LPCOMBOBOXINFO(void) -{ - /* LPCOMBOBOXINFO */ - TEST_TYPE(LPCOMBOBOXINFO, 4, 4); - TEST_TYPE_POINTER(LPCOMBOBOXINFO, 52, 4); -} - -static void test_pack_LPCOMPAREITEMSTRUCT(void) -{ - /* LPCOMPAREITEMSTRUCT */ - TEST_TYPE(LPCOMPAREITEMSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPCOMPAREITEMSTRUCT, 32, 4); -} - -static void test_pack_LPCREATESTRUCTA(void) -{ - /* LPCREATESTRUCTA */ - TEST_TYPE(LPCREATESTRUCTA, 4, 4); - TEST_TYPE_POINTER(LPCREATESTRUCTA, 48, 4); -} - -static void test_pack_LPCREATESTRUCTW(void) -{ - /* LPCREATESTRUCTW */ - TEST_TYPE(LPCREATESTRUCTW, 4, 4); - TEST_TYPE_POINTER(LPCREATESTRUCTW, 48, 4); -} - -static void test_pack_LPCSCROLLINFO(void) -{ - /* LPCSCROLLINFO */ - TEST_TYPE(LPCSCROLLINFO, 4, 4); - TEST_TYPE_POINTER(LPCSCROLLINFO, 28, 4); -} - -static void test_pack_LPCURSORINFO(void) -{ - /* LPCURSORINFO */ - TEST_TYPE(LPCURSORINFO, 4, 4); - TEST_TYPE_POINTER(LPCURSORINFO, 20, 4); -} - -static void test_pack_LPCWPRETSTRUCT(void) -{ - /* LPCWPRETSTRUCT */ - TEST_TYPE(LPCWPRETSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPCWPRETSTRUCT, 20, 4); -} - -static void test_pack_LPCWPSTRUCT(void) -{ - /* LPCWPSTRUCT */ - TEST_TYPE(LPCWPSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPCWPSTRUCT, 16, 4); -} - -static void test_pack_LPDEBUGHOOKINFO(void) -{ - /* LPDEBUGHOOKINFO */ - TEST_TYPE(LPDEBUGHOOKINFO, 4, 4); - TEST_TYPE_POINTER(LPDEBUGHOOKINFO, 20, 4); -} - -static void test_pack_LPDELETEITEMSTRUCT(void) -{ - /* LPDELETEITEMSTRUCT */ - TEST_TYPE(LPDELETEITEMSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPDELETEITEMSTRUCT, 20, 4); -} - -static void test_pack_LPDLGITEMTEMPLATEA(void) -{ - /* LPDLGITEMTEMPLATEA */ - TEST_TYPE(LPDLGITEMTEMPLATEA, 4, 4); - TEST_TYPE_POINTER(LPDLGITEMTEMPLATEA, 18, 2); -} - -static void test_pack_LPDLGITEMTEMPLATEW(void) -{ - /* LPDLGITEMTEMPLATEW */ - TEST_TYPE(LPDLGITEMTEMPLATEW, 4, 4); - TEST_TYPE_POINTER(LPDLGITEMTEMPLATEW, 18, 2); -} - -static void test_pack_LPDLGTEMPLATEA(void) -{ - /* LPDLGTEMPLATEA */ - TEST_TYPE(LPDLGTEMPLATEA, 4, 4); - TEST_TYPE_POINTER(LPDLGTEMPLATEA, 18, 2); -} - -static void test_pack_LPDLGTEMPLATEW(void) -{ - /* LPDLGTEMPLATEW */ - TEST_TYPE(LPDLGTEMPLATEW, 4, 4); - TEST_TYPE_POINTER(LPDLGTEMPLATEW, 18, 2); -} - -static void test_pack_LPDRAWITEMSTRUCT(void) -{ - /* LPDRAWITEMSTRUCT */ - TEST_TYPE(LPDRAWITEMSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPDRAWITEMSTRUCT, 48, 4); -} - -static void test_pack_LPDRAWTEXTPARAMS(void) -{ - /* LPDRAWTEXTPARAMS */ - TEST_TYPE(LPDRAWTEXTPARAMS, 4, 4); - TEST_TYPE_POINTER(LPDRAWTEXTPARAMS, 20, 4); -} - -static void test_pack_LPEVENTMSG(void) -{ - /* LPEVENTMSG */ - TEST_TYPE(LPEVENTMSG, 4, 4); - TEST_TYPE_POINTER(LPEVENTMSG, 20, 4); -} - -static void test_pack_LPFILTERKEYS(void) -{ - /* LPFILTERKEYS */ - TEST_TYPE(LPFILTERKEYS, 4, 4); - TEST_TYPE_POINTER(LPFILTERKEYS, 24, 4); -} - -static void test_pack_LPGUITHREADINFO(void) -{ - /* LPGUITHREADINFO */ - TEST_TYPE(LPGUITHREADINFO, 4, 4); - TEST_TYPE_POINTER(LPGUITHREADINFO, 48, 4); -} - -static void test_pack_LPHARDWAREHOOKSTRUCT(void) -{ - /* LPHARDWAREHOOKSTRUCT */ - TEST_TYPE(LPHARDWAREHOOKSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPHARDWAREHOOKSTRUCT, 16, 4); -} - -static void test_pack_LPHARDWAREINPUT(void) -{ - /* LPHARDWAREINPUT */ - TEST_TYPE(LPHARDWAREINPUT, 4, 4); - TEST_TYPE_POINTER(LPHARDWAREINPUT, 8, 4); -} - -static void test_pack_LPHELPINFO(void) -{ - /* LPHELPINFO */ - TEST_TYPE(LPHELPINFO, 4, 4); - TEST_TYPE_POINTER(LPHELPINFO, 28, 4); -} - -static void test_pack_LPHELPWININFOA(void) -{ - /* LPHELPWININFOA */ - TEST_TYPE(LPHELPWININFOA, 4, 4); - TEST_TYPE_POINTER(LPHELPWININFOA, 28, 4); -} - -static void test_pack_LPHELPWININFOW(void) -{ - /* LPHELPWININFOW */ - TEST_TYPE(LPHELPWININFOW, 4, 4); - TEST_TYPE_POINTER(LPHELPWININFOW, 28, 4); -} - -static void test_pack_LPHIGHCONTRASTA(void) -{ - /* LPHIGHCONTRASTA */ - TEST_TYPE(LPHIGHCONTRASTA, 4, 4); - TEST_TYPE_POINTER(LPHIGHCONTRASTA, 12, 4); -} - -static void test_pack_LPHIGHCONTRASTW(void) -{ - /* LPHIGHCONTRASTW */ - TEST_TYPE(LPHIGHCONTRASTW, 4, 4); - TEST_TYPE_POINTER(LPHIGHCONTRASTW, 12, 4); -} - -static void test_pack_LPICONMETRICSA(void) -{ - /* LPICONMETRICSA */ - TEST_TYPE(LPICONMETRICSA, 4, 4); - TEST_TYPE_POINTER(LPICONMETRICSA, 76, 4); -} - -static void test_pack_LPICONMETRICSW(void) -{ - /* LPICONMETRICSW */ - TEST_TYPE(LPICONMETRICSW, 4, 4); - TEST_TYPE_POINTER(LPICONMETRICSW, 108, 4); -} - -static void test_pack_LPINPUT(void) -{ - /* LPINPUT */ - TEST_TYPE(LPINPUT, 4, 4); -} - -static void test_pack_LPKBDLLHOOKSTRUCT(void) -{ - /* LPKBDLLHOOKSTRUCT */ - TEST_TYPE(LPKBDLLHOOKSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPKBDLLHOOKSTRUCT, 20, 4); -} - -static void test_pack_LPKEYBDINPUT(void) -{ - /* LPKEYBDINPUT */ - TEST_TYPE(LPKEYBDINPUT, 4, 4); - TEST_TYPE_POINTER(LPKEYBDINPUT, 16, 4); -} - -static void test_pack_LPMDICREATESTRUCTA(void) -{ - /* LPMDICREATESTRUCTA */ - TEST_TYPE(LPMDICREATESTRUCTA, 4, 4); - TEST_TYPE_POINTER(LPMDICREATESTRUCTA, 36, 4); -} - -static void test_pack_LPMDICREATESTRUCTW(void) -{ - /* LPMDICREATESTRUCTW */ - TEST_TYPE(LPMDICREATESTRUCTW, 4, 4); - TEST_TYPE_POINTER(LPMDICREATESTRUCTW, 36, 4); -} - -static void test_pack_LPMDINEXTMENU(void) -{ - /* LPMDINEXTMENU */ - TEST_TYPE(LPMDINEXTMENU, 4, 4); - TEST_TYPE_POINTER(LPMDINEXTMENU, 12, 4); -} - -static void test_pack_LPMEASUREITEMSTRUCT(void) -{ - /* LPMEASUREITEMSTRUCT */ - TEST_TYPE(LPMEASUREITEMSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPMEASUREITEMSTRUCT, 24, 4); -} - -static void test_pack_LPMENUINFO(void) -{ - /* LPMENUINFO */ - TEST_TYPE(LPMENUINFO, 4, 4); - TEST_TYPE_POINTER(LPMENUINFO, 28, 4); -} - -static void test_pack_LPMENUITEMINFOA(void) -{ - /* LPMENUITEMINFOA */ - TEST_TYPE(LPMENUITEMINFOA, 4, 4); - TEST_TYPE_POINTER(LPMENUITEMINFOA, 48, 4); -} - -static void test_pack_LPMENUITEMINFOW(void) -{ - /* LPMENUITEMINFOW */ - TEST_TYPE(LPMENUITEMINFOW, 4, 4); - TEST_TYPE_POINTER(LPMENUITEMINFOW, 48, 4); -} - -static void test_pack_LPMINIMIZEDMETRICS(void) -{ - /* LPMINIMIZEDMETRICS */ - TEST_TYPE(LPMINIMIZEDMETRICS, 4, 4); - TEST_TYPE_POINTER(LPMINIMIZEDMETRICS, 20, 4); -} - -static void test_pack_LPMINMAXINFO(void) -{ - /* LPMINMAXINFO */ - TEST_TYPE(LPMINMAXINFO, 4, 4); - TEST_TYPE_POINTER(LPMINMAXINFO, 40, 4); -} - -static void test_pack_LPMONITORINFO(void) -{ - /* LPMONITORINFO */ - TEST_TYPE(LPMONITORINFO, 4, 4); - TEST_TYPE_POINTER(LPMONITORINFO, 40, 4); -} - -static void test_pack_LPMONITORINFOEXA(void) -{ - /* LPMONITORINFOEXA */ - TEST_TYPE(LPMONITORINFOEXA, 4, 4); - TEST_TYPE_POINTER(LPMONITORINFOEXA, 72, 4); -} - -static void test_pack_LPMONITORINFOEXW(void) -{ - /* LPMONITORINFOEXW */ - TEST_TYPE(LPMONITORINFOEXW, 4, 4); - TEST_TYPE_POINTER(LPMONITORINFOEXW, 104, 4); -} - -static void test_pack_LPMOUSEHOOKSTRUCT(void) -{ - /* LPMOUSEHOOKSTRUCT */ - TEST_TYPE(LPMOUSEHOOKSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPMOUSEHOOKSTRUCT, 20, 4); -} - -static void test_pack_LPMOUSEINPUT(void) -{ - /* LPMOUSEINPUT */ - TEST_TYPE(LPMOUSEINPUT, 4, 4); - TEST_TYPE_POINTER(LPMOUSEINPUT, 24, 4); -} - -static void test_pack_LPMOUSEKEYS(void) -{ - /* LPMOUSEKEYS */ - TEST_TYPE(LPMOUSEKEYS, 4, 4); - TEST_TYPE_POINTER(LPMOUSEKEYS, 28, 4); -} - -static void test_pack_LPMSG(void) -{ - /* LPMSG */ - TEST_TYPE(LPMSG, 4, 4); - TEST_TYPE_POINTER(LPMSG, 28, 4); -} - -static void test_pack_LPMSGBOXPARAMSA(void) -{ - /* LPMSGBOXPARAMSA */ - TEST_TYPE(LPMSGBOXPARAMSA, 4, 4); - TEST_TYPE_POINTER(LPMSGBOXPARAMSA, 40, 4); -} - -static void test_pack_LPMSGBOXPARAMSW(void) -{ - /* LPMSGBOXPARAMSW */ - TEST_TYPE(LPMSGBOXPARAMSW, 4, 4); - TEST_TYPE_POINTER(LPMSGBOXPARAMSW, 40, 4); -} - -static void test_pack_LPMSLLHOOKSTRUCT(void) -{ - /* LPMSLLHOOKSTRUCT */ - TEST_TYPE(LPMSLLHOOKSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPMSLLHOOKSTRUCT, 24, 4); -} - -static void test_pack_LPMULTIKEYHELPA(void) -{ - /* LPMULTIKEYHELPA */ - TEST_TYPE(LPMULTIKEYHELPA, 4, 4); - TEST_TYPE_POINTER(LPMULTIKEYHELPA, 8, 4); -} - -static void test_pack_LPMULTIKEYHELPW(void) -{ - /* LPMULTIKEYHELPW */ - TEST_TYPE(LPMULTIKEYHELPW, 4, 4); - TEST_TYPE_POINTER(LPMULTIKEYHELPW, 8, 4); -} - -static void test_pack_LPNCCALCSIZE_PARAMS(void) -{ - /* LPNCCALCSIZE_PARAMS */ - TEST_TYPE(LPNCCALCSIZE_PARAMS, 4, 4); - TEST_TYPE_POINTER(LPNCCALCSIZE_PARAMS, 52, 4); -} - -static void test_pack_LPNMHDR(void) -{ - /* LPNMHDR */ - TEST_TYPE(LPNMHDR, 4, 4); - TEST_TYPE_POINTER(LPNMHDR, 12, 4); -} - -static void test_pack_LPNONCLIENTMETRICSA(void) -{ - /* LPNONCLIENTMETRICSA */ - TEST_TYPE(LPNONCLIENTMETRICSA, 4, 4); - TEST_TYPE_POINTER(LPNONCLIENTMETRICSA, 340, 4); -} - -static void test_pack_LPNONCLIENTMETRICSW(void) -{ - /* LPNONCLIENTMETRICSW */ - TEST_TYPE(LPNONCLIENTMETRICSW, 4, 4); - TEST_TYPE_POINTER(LPNONCLIENTMETRICSW, 500, 4); -} - -static void test_pack_LPPAINTSTRUCT(void) -{ - /* LPPAINTSTRUCT */ - TEST_TYPE(LPPAINTSTRUCT, 4, 4); - TEST_TYPE_POINTER(LPPAINTSTRUCT, 64, 4); -} - -static void test_pack_LPSCROLLINFO(void) -{ - /* LPSCROLLINFO */ - TEST_TYPE(LPSCROLLINFO, 4, 4); - TEST_TYPE_POINTER(LPSCROLLINFO, 28, 4); -} - -static void test_pack_LPSERIALKEYSA(void) -{ - /* LPSERIALKEYSA */ - TEST_TYPE(LPSERIALKEYSA, 4, 4); - TEST_TYPE_POINTER(LPSERIALKEYSA, 28, 4); -} - -static void test_pack_LPSERIALKEYSW(void) -{ - /* LPSERIALKEYSW */ - TEST_TYPE(LPSERIALKEYSW, 4, 4); - TEST_TYPE_POINTER(LPSERIALKEYSW, 28, 4); -} - -static void test_pack_LPSOUNDSENTRYA(void) -{ - /* LPSOUNDSENTRYA */ - TEST_TYPE(LPSOUNDSENTRYA, 4, 4); - TEST_TYPE_POINTER(LPSOUNDSENTRYA, 48, 4); -} - -static void test_pack_LPSOUNDSENTRYW(void) -{ - /* LPSOUNDSENTRYW */ - TEST_TYPE(LPSOUNDSENTRYW, 4, 4); - TEST_TYPE_POINTER(LPSOUNDSENTRYW, 48, 4); -} - -static void test_pack_LPSTICKYKEYS(void) -{ - /* LPSTICKYKEYS */ - TEST_TYPE(LPSTICKYKEYS, 4, 4); - TEST_TYPE_POINTER(LPSTICKYKEYS, 8, 4); -} - -static void test_pack_LPSTYLESTRUCT(void) -{ - /* LPSTYLESTRUCT */ - TEST_TYPE(LPSTYLESTRUCT, 4, 4); - TEST_TYPE_POINTER(LPSTYLESTRUCT, 8, 4); -} - -static void test_pack_LPTITLEBARINFO(void) -{ - /* LPTITLEBARINFO */ - TEST_TYPE(LPTITLEBARINFO, 4, 4); - TEST_TYPE_POINTER(LPTITLEBARINFO, 44, 4); -} - -static void test_pack_LPTOGGLEKEYS(void) -{ - /* LPTOGGLEKEYS */ - TEST_TYPE(LPTOGGLEKEYS, 4, 4); - TEST_TYPE_POINTER(LPTOGGLEKEYS, 8, 4); -} - -static void test_pack_LPTPMPARAMS(void) -{ - /* LPTPMPARAMS */ - TEST_TYPE(LPTPMPARAMS, 4, 4); - TEST_TYPE_POINTER(LPTPMPARAMS, 20, 4); -} - -static void test_pack_LPTRACKMOUSEEVENT(void) -{ - /* LPTRACKMOUSEEVENT */ - TEST_TYPE(LPTRACKMOUSEEVENT, 4, 4); - TEST_TYPE_POINTER(LPTRACKMOUSEEVENT, 16, 4); -} - -static void test_pack_LPWINDOWINFO(void) -{ - /* LPWINDOWINFO */ - TEST_TYPE(LPWINDOWINFO, 4, 4); - TEST_TYPE_POINTER(LPWINDOWINFO, 60, 4); -} - -static void test_pack_LPWINDOWPLACEMENT(void) -{ - /* LPWINDOWPLACEMENT */ - TEST_TYPE(LPWINDOWPLACEMENT, 4, 4); - TEST_TYPE_POINTER(LPWINDOWPLACEMENT, 44, 4); -} - -static void test_pack_LPWINDOWPOS(void) -{ - /* LPWINDOWPOS */ - TEST_TYPE(LPWINDOWPOS, 4, 4); - TEST_TYPE_POINTER(LPWINDOWPOS, 28, 4); -} - -static void test_pack_LPWNDCLASSA(void) -{ - /* LPWNDCLASSA */ - TEST_TYPE(LPWNDCLASSA, 4, 4); - TEST_TYPE_POINTER(LPWNDCLASSA, 40, 4); -} - -static void test_pack_LPWNDCLASSEXA(void) -{ - /* LPWNDCLASSEXA */ - TEST_TYPE(LPWNDCLASSEXA, 4, 4); - TEST_TYPE_POINTER(LPWNDCLASSEXA, 48, 4); -} - -static void test_pack_LPWNDCLASSEXW(void) -{ - /* LPWNDCLASSEXW */ - TEST_TYPE(LPWNDCLASSEXW, 4, 4); - TEST_TYPE_POINTER(LPWNDCLASSEXW, 48, 4); -} - -static void test_pack_LPWNDCLASSW(void) -{ - /* LPWNDCLASSW */ - TEST_TYPE(LPWNDCLASSW, 4, 4); - TEST_TYPE_POINTER(LPWNDCLASSW, 40, 4); -} - -static void test_pack_MDICREATESTRUCTA(void) -{ - /* MDICREATESTRUCTA (pack 4) */ - TEST_TYPE(MDICREATESTRUCTA, 36, 4); - TEST_FIELD(MDICREATESTRUCTA, LPCSTR, szClass, 0, 4, 4); - TEST_FIELD(MDICREATESTRUCTA, LPCSTR, szTitle, 4, 4, 4); - TEST_FIELD(MDICREATESTRUCTA, HINSTANCE, hOwner, 8, 4, 4); - TEST_FIELD(MDICREATESTRUCTA, INT, x, 12, 4, 4); - TEST_FIELD(MDICREATESTRUCTA, INT, y, 16, 4, 4); - TEST_FIELD(MDICREATESTRUCTA, INT, cx, 20, 4, 4); - TEST_FIELD(MDICREATESTRUCTA, INT, cy, 24, 4, 4); - TEST_FIELD(MDICREATESTRUCTA, DWORD, style, 28, 4, 4); - TEST_FIELD(MDICREATESTRUCTA, LPARAM, lParam, 32, 4, 4); -} - -static void test_pack_MDICREATESTRUCTW(void) -{ - /* MDICREATESTRUCTW (pack 4) */ - TEST_TYPE(MDICREATESTRUCTW, 36, 4); - TEST_FIELD(MDICREATESTRUCTW, LPCWSTR, szClass, 0, 4, 4); - TEST_FIELD(MDICREATESTRUCTW, LPCWSTR, szTitle, 4, 4, 4); - TEST_FIELD(MDICREATESTRUCTW, HINSTANCE, hOwner, 8, 4, 4); - TEST_FIELD(MDICREATESTRUCTW, INT, x, 12, 4, 4); - TEST_FIELD(MDICREATESTRUCTW, INT, y, 16, 4, 4); - TEST_FIELD(MDICREATESTRUCTW, INT, cx, 20, 4, 4); - TEST_FIELD(MDICREATESTRUCTW, INT, cy, 24, 4, 4); - TEST_FIELD(MDICREATESTRUCTW, DWORD, style, 28, 4, 4); - TEST_FIELD(MDICREATESTRUCTW, LPARAM, lParam, 32, 4, 4); -} - -static void test_pack_MDINEXTMENU(void) -{ - /* MDINEXTMENU (pack 4) */ - TEST_TYPE(MDINEXTMENU, 12, 4); - TEST_FIELD(MDINEXTMENU, HMENU, hmenuIn, 0, 4, 4); - TEST_FIELD(MDINEXTMENU, HMENU, hmenuNext, 4, 4, 4); - TEST_FIELD(MDINEXTMENU, HWND, hwndNext, 8, 4, 4); -} - -static void test_pack_MEASUREITEMSTRUCT(void) -{ - /* MEASUREITEMSTRUCT (pack 4) */ - TEST_TYPE(MEASUREITEMSTRUCT, 24, 4); - TEST_FIELD(MEASUREITEMSTRUCT, UINT, CtlType, 0, 4, 4); - TEST_FIELD(MEASUREITEMSTRUCT, UINT, CtlID, 4, 4, 4); - TEST_FIELD(MEASUREITEMSTRUCT, UINT, itemID, 8, 4, 4); - TEST_FIELD(MEASUREITEMSTRUCT, UINT, itemWidth, 12, 4, 4); - TEST_FIELD(MEASUREITEMSTRUCT, UINT, itemHeight, 16, 4, 4); - TEST_FIELD(MEASUREITEMSTRUCT, ULONG_PTR, itemData, 20, 4, 4); -} - -static void test_pack_MENUINFO(void) -{ - /* MENUINFO (pack 4) */ - TEST_TYPE(MENUINFO, 28, 4); - TEST_FIELD(MENUINFO, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(MENUINFO, DWORD, fMask, 4, 4, 4); - TEST_FIELD(MENUINFO, DWORD, dwStyle, 8, 4, 4); - TEST_FIELD(MENUINFO, UINT, cyMax, 12, 4, 4); - TEST_FIELD(MENUINFO, HBRUSH, hbrBack, 16, 4, 4); - TEST_FIELD(MENUINFO, DWORD, dwContextHelpID, 20, 4, 4); - TEST_FIELD(MENUINFO, ULONG_PTR, dwMenuData, 24, 4, 4); -} - -static void test_pack_MENUITEMINFOA(void) -{ - /* MENUITEMINFOA (pack 4) */ - TEST_TYPE(MENUITEMINFOA, 48, 4); - TEST_FIELD(MENUITEMINFOA, UINT, cbSize, 0, 4, 4); - TEST_FIELD(MENUITEMINFOA, UINT, fMask, 4, 4, 4); - TEST_FIELD(MENUITEMINFOA, UINT, fType, 8, 4, 4); - TEST_FIELD(MENUITEMINFOA, UINT, fState, 12, 4, 4); - TEST_FIELD(MENUITEMINFOA, UINT, wID, 16, 4, 4); - TEST_FIELD(MENUITEMINFOA, HMENU, hSubMenu, 20, 4, 4); - TEST_FIELD(MENUITEMINFOA, HBITMAP, hbmpChecked, 24, 4, 4); - TEST_FIELD(MENUITEMINFOA, HBITMAP, hbmpUnchecked, 28, 4, 4); - TEST_FIELD(MENUITEMINFOA, ULONG_PTR, dwItemData, 32, 4, 4); - TEST_FIELD(MENUITEMINFOA, LPSTR, dwTypeData, 36, 4, 4); - TEST_FIELD(MENUITEMINFOA, UINT, cch, 40, 4, 4); - TEST_FIELD(MENUITEMINFOA, HBITMAP, hbmpItem, 44, 4, 4); -} - -static void test_pack_MENUITEMINFOW(void) -{ - /* MENUITEMINFOW (pack 4) */ - TEST_TYPE(MENUITEMINFOW, 48, 4); - TEST_FIELD(MENUITEMINFOW, UINT, cbSize, 0, 4, 4); - TEST_FIELD(MENUITEMINFOW, UINT, fMask, 4, 4, 4); - TEST_FIELD(MENUITEMINFOW, UINT, fType, 8, 4, 4); - TEST_FIELD(MENUITEMINFOW, UINT, fState, 12, 4, 4); - TEST_FIELD(MENUITEMINFOW, UINT, wID, 16, 4, 4); - TEST_FIELD(MENUITEMINFOW, HMENU, hSubMenu, 20, 4, 4); - TEST_FIELD(MENUITEMINFOW, HBITMAP, hbmpChecked, 24, 4, 4); - TEST_FIELD(MENUITEMINFOW, HBITMAP, hbmpUnchecked, 28, 4, 4); - TEST_FIELD(MENUITEMINFOW, ULONG_PTR, dwItemData, 32, 4, 4); - TEST_FIELD(MENUITEMINFOW, LPWSTR, dwTypeData, 36, 4, 4); - TEST_FIELD(MENUITEMINFOW, UINT, cch, 40, 4, 4); - TEST_FIELD(MENUITEMINFOW, HBITMAP, hbmpItem, 44, 4, 4); -} - -static void test_pack_MENUITEMTEMPLATE(void) -{ - /* MENUITEMTEMPLATE (pack 4) */ - TEST_TYPE(MENUITEMTEMPLATE, 6, 2); - TEST_FIELD(MENUITEMTEMPLATE, WORD, mtOption, 0, 2, 2); - TEST_FIELD(MENUITEMTEMPLATE, WORD, mtID, 2, 2, 2); - TEST_FIELD(MENUITEMTEMPLATE, WCHAR[1], mtString, 4, 2, 2); -} - -static void test_pack_MENUITEMTEMPLATEHEADER(void) -{ - /* MENUITEMTEMPLATEHEADER (pack 4) */ - TEST_TYPE(MENUITEMTEMPLATEHEADER, 4, 2); - TEST_FIELD(MENUITEMTEMPLATEHEADER, WORD, versionNumber, 0, 2, 2); - TEST_FIELD(MENUITEMTEMPLATEHEADER, WORD, offset, 2, 2, 2); -} - -static void test_pack_MINIMIZEDMETRICS(void) -{ - /* MINIMIZEDMETRICS (pack 4) */ - TEST_TYPE(MINIMIZEDMETRICS, 20, 4); - TEST_FIELD(MINIMIZEDMETRICS, UINT, cbSize, 0, 4, 4); - TEST_FIELD(MINIMIZEDMETRICS, int, iWidth, 4, 4, 4); - TEST_FIELD(MINIMIZEDMETRICS, int, iHorzGap, 8, 4, 4); - TEST_FIELD(MINIMIZEDMETRICS, int, iVertGap, 12, 4, 4); - TEST_FIELD(MINIMIZEDMETRICS, int, iArrange, 16, 4, 4); -} - -static void test_pack_MINMAXINFO(void) -{ - /* MINMAXINFO (pack 4) */ - TEST_TYPE(MINMAXINFO, 40, 4); - TEST_FIELD(MINMAXINFO, POINT, ptReserved, 0, 8, 4); - TEST_FIELD(MINMAXINFO, POINT, ptMaxSize, 8, 8, 4); - TEST_FIELD(MINMAXINFO, POINT, ptMaxPosition, 16, 8, 4); - TEST_FIELD(MINMAXINFO, POINT, ptMinTrackSize, 24, 8, 4); - TEST_FIELD(MINMAXINFO, POINT, ptMaxTrackSize, 32, 8, 4); -} - -static void test_pack_MONITORENUMPROC(void) -{ - /* MONITORENUMPROC */ - TEST_TYPE(MONITORENUMPROC, 4, 4); -} - -static void test_pack_MONITORINFO(void) -{ - /* MONITORINFO (pack 4) */ - TEST_TYPE(MONITORINFO, 40, 4); - TEST_FIELD(MONITORINFO, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(MONITORINFO, RECT, rcMonitor, 4, 16, 4); - TEST_FIELD(MONITORINFO, RECT, rcWork, 20, 16, 4); - TEST_FIELD(MONITORINFO, DWORD, dwFlags, 36, 4, 4); -} - -static void test_pack_MONITORINFOEXA(void) -{ - /* MONITORINFOEXA (pack 4) */ - TEST_TYPE(MONITORINFOEXA, 72, 4); - TEST_FIELD(MONITORINFOEXA, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(MONITORINFOEXA, RECT, rcMonitor, 4, 16, 4); - TEST_FIELD(MONITORINFOEXA, RECT, rcWork, 20, 16, 4); - TEST_FIELD(MONITORINFOEXA, DWORD, dwFlags, 36, 4, 4); - TEST_FIELD(MONITORINFOEXA, CHAR[CCHDEVICENAME], szDevice, 40, 32, 1); -} - -static void test_pack_MONITORINFOEXW(void) -{ - /* MONITORINFOEXW (pack 4) */ - TEST_TYPE(MONITORINFOEXW, 104, 4); - TEST_FIELD(MONITORINFOEXW, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(MONITORINFOEXW, RECT, rcMonitor, 4, 16, 4); - TEST_FIELD(MONITORINFOEXW, RECT, rcWork, 20, 16, 4); - TEST_FIELD(MONITORINFOEXW, DWORD, dwFlags, 36, 4, 4); - TEST_FIELD(MONITORINFOEXW, WCHAR[CCHDEVICENAME], szDevice, 40, 64, 2); -} - -static void test_pack_MOUSEHOOKSTRUCT(void) -{ - /* MOUSEHOOKSTRUCT (pack 4) */ - TEST_TYPE(MOUSEHOOKSTRUCT, 20, 4); - TEST_FIELD(MOUSEHOOKSTRUCT, POINT, pt, 0, 8, 4); - TEST_FIELD(MOUSEHOOKSTRUCT, HWND, hwnd, 8, 4, 4); - TEST_FIELD(MOUSEHOOKSTRUCT, UINT, wHitTestCode, 12, 4, 4); - TEST_FIELD(MOUSEHOOKSTRUCT, ULONG_PTR, dwExtraInfo, 16, 4, 4); -} - -static void test_pack_MOUSEINPUT(void) -{ - /* MOUSEINPUT (pack 4) */ - TEST_TYPE(MOUSEINPUT, 24, 4); - TEST_FIELD(MOUSEINPUT, LONG, dx, 0, 4, 4); - TEST_FIELD(MOUSEINPUT, LONG, dy, 4, 4, 4); - TEST_FIELD(MOUSEINPUT, DWORD, mouseData, 8, 4, 4); - TEST_FIELD(MOUSEINPUT, DWORD, dwFlags, 12, 4, 4); - TEST_FIELD(MOUSEINPUT, DWORD, time, 16, 4, 4); - TEST_FIELD(MOUSEINPUT, ULONG_PTR, dwExtraInfo, 20, 4, 4); -} - -static void test_pack_MOUSEKEYS(void) -{ - /* MOUSEKEYS (pack 4) */ - TEST_TYPE(MOUSEKEYS, 28, 4); - TEST_FIELD(MOUSEKEYS, UINT, cbSize, 0, 4, 4); - TEST_FIELD(MOUSEKEYS, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(MOUSEKEYS, DWORD, iMaxSpeed, 8, 4, 4); - TEST_FIELD(MOUSEKEYS, DWORD, iTimeToMaxSpeed, 12, 4, 4); - TEST_FIELD(MOUSEKEYS, DWORD, iCtrlSpeed, 16, 4, 4); - TEST_FIELD(MOUSEKEYS, DWORD, dwReserved1, 20, 4, 4); - TEST_FIELD(MOUSEKEYS, DWORD, dwReserved2, 24, 4, 4); -} - -static void test_pack_MSG(void) -{ - /* MSG (pack 4) */ - TEST_TYPE(MSG, 28, 4); - TEST_FIELD(MSG, HWND, hwnd, 0, 4, 4); - TEST_FIELD(MSG, UINT, message, 4, 4, 4); - TEST_FIELD(MSG, WPARAM, wParam, 8, 4, 4); - TEST_FIELD(MSG, LPARAM, lParam, 12, 4, 4); - TEST_FIELD(MSG, DWORD, time, 16, 4, 4); - TEST_FIELD(MSG, POINT, pt, 20, 8, 4); -} - -static void test_pack_MSGBOXCALLBACK(void) -{ - /* MSGBOXCALLBACK */ - TEST_TYPE(MSGBOXCALLBACK, 4, 4); -} - -static void test_pack_MSGBOXPARAMSA(void) -{ - /* MSGBOXPARAMSA (pack 4) */ - TEST_TYPE(MSGBOXPARAMSA, 40, 4); - TEST_FIELD(MSGBOXPARAMSA, UINT, cbSize, 0, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, HWND, hwndOwner, 4, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, HINSTANCE, hInstance, 8, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, LPCSTR, lpszText, 12, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, LPCSTR, lpszCaption, 16, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, DWORD, dwStyle, 20, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, LPCSTR, lpszIcon, 24, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, DWORD_PTR, dwContextHelpId, 28, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, MSGBOXCALLBACK, lpfnMsgBoxCallback, 32, 4, 4); - TEST_FIELD(MSGBOXPARAMSA, DWORD, dwLanguageId, 36, 4, 4); -} - -static void test_pack_MSGBOXPARAMSW(void) -{ - /* MSGBOXPARAMSW (pack 4) */ - TEST_TYPE(MSGBOXPARAMSW, 40, 4); - TEST_FIELD(MSGBOXPARAMSW, UINT, cbSize, 0, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, HWND, hwndOwner, 4, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, HINSTANCE, hInstance, 8, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, LPCWSTR, lpszText, 12, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, LPCWSTR, lpszCaption, 16, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, DWORD, dwStyle, 20, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, LPCWSTR, lpszIcon, 24, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, DWORD_PTR, dwContextHelpId, 28, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, MSGBOXCALLBACK, lpfnMsgBoxCallback, 32, 4, 4); - TEST_FIELD(MSGBOXPARAMSW, DWORD, dwLanguageId, 36, 4, 4); -} - -static void test_pack_MSLLHOOKSTRUCT(void) -{ - /* MSLLHOOKSTRUCT (pack 4) */ - TEST_TYPE(MSLLHOOKSTRUCT, 24, 4); - TEST_FIELD(MSLLHOOKSTRUCT, POINT, pt, 0, 8, 4); - TEST_FIELD(MSLLHOOKSTRUCT, DWORD, mouseData, 8, 4, 4); - TEST_FIELD(MSLLHOOKSTRUCT, DWORD, flags, 12, 4, 4); - TEST_FIELD(MSLLHOOKSTRUCT, DWORD, time, 16, 4, 4); - TEST_FIELD(MSLLHOOKSTRUCT, ULONG_PTR, dwExtraInfo, 20, 4, 4); -} - -static void test_pack_MULTIKEYHELPA(void) -{ - /* MULTIKEYHELPA (pack 4) */ - TEST_TYPE(MULTIKEYHELPA, 8, 4); - TEST_FIELD(MULTIKEYHELPA, DWORD, mkSize, 0, 4, 4); - TEST_FIELD(MULTIKEYHELPA, CHAR, mkKeylist, 4, 1, 1); - TEST_FIELD(MULTIKEYHELPA, CHAR[1], szKeyphrase, 5, 1, 1); -} - -static void test_pack_MULTIKEYHELPW(void) -{ - /* MULTIKEYHELPW (pack 4) */ - TEST_TYPE(MULTIKEYHELPW, 8, 4); - TEST_FIELD(MULTIKEYHELPW, DWORD, mkSize, 0, 4, 4); - TEST_FIELD(MULTIKEYHELPW, WCHAR, mkKeylist, 4, 2, 2); - TEST_FIELD(MULTIKEYHELPW, WCHAR[1], szKeyphrase, 6, 2, 2); -} - -static void test_pack_NAMEENUMPROCA(void) -{ - /* NAMEENUMPROCA */ - TEST_TYPE(NAMEENUMPROCA, 4, 4); -} - -static void test_pack_NAMEENUMPROCW(void) -{ - /* NAMEENUMPROCW */ - TEST_TYPE(NAMEENUMPROCW, 4, 4); -} - -static void test_pack_NCCALCSIZE_PARAMS(void) -{ - /* NCCALCSIZE_PARAMS (pack 4) */ - TEST_TYPE(NCCALCSIZE_PARAMS, 52, 4); - TEST_FIELD(NCCALCSIZE_PARAMS, RECT[3], rgrc, 0, 48, 4); - TEST_FIELD(NCCALCSIZE_PARAMS, WINDOWPOS *, lppos, 48, 4, 4); -} - -static void test_pack_NMHDR(void) -{ - /* NMHDR (pack 4) */ - TEST_TYPE(NMHDR, 12, 4); - TEST_FIELD(NMHDR, HWND, hwndFrom, 0, 4, 4); - TEST_FIELD(NMHDR, UINT_PTR, idFrom, 4, 4, 4); - TEST_FIELD(NMHDR, UINT, code, 8, 4, 4); -} - -static void test_pack_NONCLIENTMETRICSA(void) -{ - /* NONCLIENTMETRICSA (pack 4) */ - TEST_TYPE(NONCLIENTMETRICSA, 340, 4); - TEST_FIELD(NONCLIENTMETRICSA, UINT, cbSize, 0, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iBorderWidth, 4, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iScrollWidth, 8, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iScrollHeight, 12, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iCaptionWidth, 16, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iCaptionHeight, 20, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfCaptionFont, 24, 60, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iSmCaptionWidth, 84, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iSmCaptionHeight, 88, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfSmCaptionFont, 92, 60, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iMenuWidth, 152, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, INT, iMenuHeight, 156, 4, 4); - TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfMenuFont, 160, 60, 4); - TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfStatusFont, 220, 60, 4); - TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfMessageFont, 280, 60, 4); -} - -static void test_pack_NONCLIENTMETRICSW(void) -{ - /* NONCLIENTMETRICSW (pack 4) */ - TEST_TYPE(NONCLIENTMETRICSW, 500, 4); - TEST_FIELD(NONCLIENTMETRICSW, UINT, cbSize, 0, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iBorderWidth, 4, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iScrollWidth, 8, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iScrollHeight, 12, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iCaptionWidth, 16, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iCaptionHeight, 20, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfCaptionFont, 24, 92, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iSmCaptionWidth, 116, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iSmCaptionHeight, 120, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfSmCaptionFont, 124, 92, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iMenuWidth, 216, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, INT, iMenuHeight, 220, 4, 4); - TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfMenuFont, 224, 92, 4); - TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfStatusFont, 316, 92, 4); - TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfMessageFont, 408, 92, 4); -} - -static void test_pack_PAINTSTRUCT(void) -{ - /* PAINTSTRUCT (pack 4) */ - TEST_TYPE(PAINTSTRUCT, 64, 4); - TEST_FIELD(PAINTSTRUCT, HDC, hdc, 0, 4, 4); - TEST_FIELD(PAINTSTRUCT, BOOL, fErase, 4, 4, 4); - TEST_FIELD(PAINTSTRUCT, RECT, rcPaint, 8, 16, 4); - TEST_FIELD(PAINTSTRUCT, BOOL, fRestore, 24, 4, 4); - TEST_FIELD(PAINTSTRUCT, BOOL, fIncUpdate, 28, 4, 4); - TEST_FIELD(PAINTSTRUCT, BYTE[32], rgbReserved, 32, 32, 1); -} - -static void test_pack_PCOMBOBOXINFO(void) -{ - /* PCOMBOBOXINFO */ - TEST_TYPE(PCOMBOBOXINFO, 4, 4); - TEST_TYPE_POINTER(PCOMBOBOXINFO, 52, 4); -} - -static void test_pack_PCOMPAREITEMSTRUCT(void) -{ - /* PCOMPAREITEMSTRUCT */ - TEST_TYPE(PCOMPAREITEMSTRUCT, 4, 4); - TEST_TYPE_POINTER(PCOMPAREITEMSTRUCT, 32, 4); -} - -static void test_pack_PCOPYDATASTRUCT(void) -{ - /* PCOPYDATASTRUCT */ - TEST_TYPE(PCOPYDATASTRUCT, 4, 4); - TEST_TYPE_POINTER(PCOPYDATASTRUCT, 12, 4); -} - -static void test_pack_PCURSORINFO(void) -{ - /* PCURSORINFO */ - TEST_TYPE(PCURSORINFO, 4, 4); - TEST_TYPE_POINTER(PCURSORINFO, 20, 4); -} - -static void test_pack_PCWPRETSTRUCT(void) -{ - /* PCWPRETSTRUCT */ - TEST_TYPE(PCWPRETSTRUCT, 4, 4); - TEST_TYPE_POINTER(PCWPRETSTRUCT, 20, 4); -} - -static void test_pack_PCWPSTRUCT(void) -{ - /* PCWPSTRUCT */ - TEST_TYPE(PCWPSTRUCT, 4, 4); - TEST_TYPE_POINTER(PCWPSTRUCT, 16, 4); -} - -static void test_pack_PDEBUGHOOKINFO(void) -{ - /* PDEBUGHOOKINFO */ - TEST_TYPE(PDEBUGHOOKINFO, 4, 4); - TEST_TYPE_POINTER(PDEBUGHOOKINFO, 20, 4); -} - -static void test_pack_PDELETEITEMSTRUCT(void) -{ - /* PDELETEITEMSTRUCT */ - TEST_TYPE(PDELETEITEMSTRUCT, 4, 4); - TEST_TYPE_POINTER(PDELETEITEMSTRUCT, 20, 4); -} - -static void test_pack_PDLGITEMTEMPLATEA(void) -{ - /* PDLGITEMTEMPLATEA */ - TEST_TYPE(PDLGITEMTEMPLATEA, 4, 4); - TEST_TYPE_POINTER(PDLGITEMTEMPLATEA, 18, 2); -} - -static void test_pack_PDLGITEMTEMPLATEW(void) -{ - /* PDLGITEMTEMPLATEW */ - TEST_TYPE(PDLGITEMTEMPLATEW, 4, 4); - TEST_TYPE_POINTER(PDLGITEMTEMPLATEW, 18, 2); -} - -static void test_pack_PDRAWITEMSTRUCT(void) -{ - /* PDRAWITEMSTRUCT */ - TEST_TYPE(PDRAWITEMSTRUCT, 4, 4); - TEST_TYPE_POINTER(PDRAWITEMSTRUCT, 48, 4); -} - -static void test_pack_PEVENTMSG(void) -{ - /* PEVENTMSG */ - TEST_TYPE(PEVENTMSG, 4, 4); - TEST_TYPE_POINTER(PEVENTMSG, 20, 4); -} - -static void test_pack_PFLASHWINFO(void) -{ - /* PFLASHWINFO */ - TEST_TYPE(PFLASHWINFO, 4, 4); - TEST_TYPE_POINTER(PFLASHWINFO, 20, 4); -} - -static void test_pack_PGUITHREADINFO(void) -{ - /* PGUITHREADINFO */ - TEST_TYPE(PGUITHREADINFO, 4, 4); - TEST_TYPE_POINTER(PGUITHREADINFO, 48, 4); -} - -static void test_pack_PHARDWAREHOOKSTRUCT(void) -{ - /* PHARDWAREHOOKSTRUCT */ - TEST_TYPE(PHARDWAREHOOKSTRUCT, 4, 4); - TEST_TYPE_POINTER(PHARDWAREHOOKSTRUCT, 16, 4); -} - -static void test_pack_PHARDWAREINPUT(void) -{ - /* PHARDWAREINPUT */ - TEST_TYPE(PHARDWAREINPUT, 4, 4); - TEST_TYPE_POINTER(PHARDWAREINPUT, 8, 4); -} - -static void test_pack_PHDEVNOTIFY(void) -{ - /* PHDEVNOTIFY */ - TEST_TYPE(PHDEVNOTIFY, 4, 4); - TEST_TYPE_POINTER(PHDEVNOTIFY, 4, 4); -} - -static void test_pack_PHELPWININFOA(void) -{ - /* PHELPWININFOA */ - TEST_TYPE(PHELPWININFOA, 4, 4); - TEST_TYPE_POINTER(PHELPWININFOA, 28, 4); -} - -static void test_pack_PHELPWININFOW(void) -{ - /* PHELPWININFOW */ - TEST_TYPE(PHELPWININFOW, 4, 4); - TEST_TYPE_POINTER(PHELPWININFOW, 28, 4); -} - -static void test_pack_PICONINFO(void) -{ - /* PICONINFO */ - TEST_TYPE(PICONINFO, 4, 4); - TEST_TYPE_POINTER(PICONINFO, 20, 4); -} - -static void test_pack_PICONMETRICSA(void) -{ - /* PICONMETRICSA */ - TEST_TYPE(PICONMETRICSA, 4, 4); - TEST_TYPE_POINTER(PICONMETRICSA, 76, 4); -} - -static void test_pack_PICONMETRICSW(void) -{ - /* PICONMETRICSW */ - TEST_TYPE(PICONMETRICSW, 4, 4); - TEST_TYPE_POINTER(PICONMETRICSW, 108, 4); -} - -static void test_pack_PINPUT(void) -{ - /* PINPUT */ - TEST_TYPE(PINPUT, 4, 4); -} - -static void test_pack_PKBDLLHOOKSTRUCT(void) -{ - /* PKBDLLHOOKSTRUCT */ - TEST_TYPE(PKBDLLHOOKSTRUCT, 4, 4); - TEST_TYPE_POINTER(PKBDLLHOOKSTRUCT, 20, 4); -} - -static void test_pack_PKEYBDINPUT(void) -{ - /* PKEYBDINPUT */ - TEST_TYPE(PKEYBDINPUT, 4, 4); - TEST_TYPE_POINTER(PKEYBDINPUT, 16, 4); -} - -static void test_pack_PMDINEXTMENU(void) -{ - /* PMDINEXTMENU */ - TEST_TYPE(PMDINEXTMENU, 4, 4); - TEST_TYPE_POINTER(PMDINEXTMENU, 12, 4); -} - -static void test_pack_PMEASUREITEMSTRUCT(void) -{ - /* PMEASUREITEMSTRUCT */ - TEST_TYPE(PMEASUREITEMSTRUCT, 4, 4); - TEST_TYPE_POINTER(PMEASUREITEMSTRUCT, 24, 4); -} - -static void test_pack_PMENUITEMTEMPLATE(void) -{ - /* PMENUITEMTEMPLATE */ - TEST_TYPE(PMENUITEMTEMPLATE, 4, 4); - TEST_TYPE_POINTER(PMENUITEMTEMPLATE, 6, 2); -} - -static void test_pack_PMENUITEMTEMPLATEHEADER(void) -{ - /* PMENUITEMTEMPLATEHEADER */ - TEST_TYPE(PMENUITEMTEMPLATEHEADER, 4, 4); - TEST_TYPE_POINTER(PMENUITEMTEMPLATEHEADER, 4, 2); -} - -static void test_pack_PMINIMIZEDMETRICS(void) -{ - /* PMINIMIZEDMETRICS */ - TEST_TYPE(PMINIMIZEDMETRICS, 4, 4); - TEST_TYPE_POINTER(PMINIMIZEDMETRICS, 20, 4); -} - -static void test_pack_PMINMAXINFO(void) -{ - /* PMINMAXINFO */ - TEST_TYPE(PMINMAXINFO, 4, 4); - TEST_TYPE_POINTER(PMINMAXINFO, 40, 4); -} - -static void test_pack_PMOUSEHOOKSTRUCT(void) -{ - /* PMOUSEHOOKSTRUCT */ - TEST_TYPE(PMOUSEHOOKSTRUCT, 4, 4); - TEST_TYPE_POINTER(PMOUSEHOOKSTRUCT, 20, 4); -} - -static void test_pack_PMOUSEINPUT(void) -{ - /* PMOUSEINPUT */ - TEST_TYPE(PMOUSEINPUT, 4, 4); - TEST_TYPE_POINTER(PMOUSEINPUT, 24, 4); -} - -static void test_pack_PMSG(void) -{ - /* PMSG */ - TEST_TYPE(PMSG, 4, 4); - TEST_TYPE_POINTER(PMSG, 28, 4); -} - -static void test_pack_PMSGBOXPARAMSA(void) -{ - /* PMSGBOXPARAMSA */ - TEST_TYPE(PMSGBOXPARAMSA, 4, 4); - TEST_TYPE_POINTER(PMSGBOXPARAMSA, 40, 4); -} - -static void test_pack_PMSGBOXPARAMSW(void) -{ - /* PMSGBOXPARAMSW */ - TEST_TYPE(PMSGBOXPARAMSW, 4, 4); - TEST_TYPE_POINTER(PMSGBOXPARAMSW, 40, 4); -} - -static void test_pack_PMSLLHOOKSTRUCT(void) -{ - /* PMSLLHOOKSTRUCT */ - TEST_TYPE(PMSLLHOOKSTRUCT, 4, 4); - TEST_TYPE_POINTER(PMSLLHOOKSTRUCT, 24, 4); -} - -static void test_pack_PMULTIKEYHELPA(void) -{ - /* PMULTIKEYHELPA */ - TEST_TYPE(PMULTIKEYHELPA, 4, 4); - TEST_TYPE_POINTER(PMULTIKEYHELPA, 8, 4); -} - -static void test_pack_PMULTIKEYHELPW(void) -{ - /* PMULTIKEYHELPW */ - TEST_TYPE(PMULTIKEYHELPW, 4, 4); - TEST_TYPE_POINTER(PMULTIKEYHELPW, 8, 4); -} - -static void test_pack_PNONCLIENTMETRICSA(void) -{ - /* PNONCLIENTMETRICSA */ - TEST_TYPE(PNONCLIENTMETRICSA, 4, 4); - TEST_TYPE_POINTER(PNONCLIENTMETRICSA, 340, 4); -} - -static void test_pack_PNONCLIENTMETRICSW(void) -{ - /* PNONCLIENTMETRICSW */ - TEST_TYPE(PNONCLIENTMETRICSW, 4, 4); - TEST_TYPE_POINTER(PNONCLIENTMETRICSW, 500, 4); -} - -static void test_pack_PPAINTSTRUCT(void) -{ - /* PPAINTSTRUCT */ - TEST_TYPE(PPAINTSTRUCT, 4, 4); - TEST_TYPE_POINTER(PPAINTSTRUCT, 64, 4); -} - -static void test_pack_PROPENUMPROCA(void) -{ - /* PROPENUMPROCA */ - TEST_TYPE(PROPENUMPROCA, 4, 4); -} - -static void test_pack_PROPENUMPROCEXA(void) -{ - /* PROPENUMPROCEXA */ - TEST_TYPE(PROPENUMPROCEXA, 4, 4); -} - -static void test_pack_PROPENUMPROCEXW(void) -{ - /* PROPENUMPROCEXW */ - TEST_TYPE(PROPENUMPROCEXW, 4, 4); -} - -static void test_pack_PROPENUMPROCW(void) -{ - /* PROPENUMPROCW */ - TEST_TYPE(PROPENUMPROCW, 4, 4); -} - -static void test_pack_PTITLEBARINFO(void) -{ - /* PTITLEBARINFO */ - TEST_TYPE(PTITLEBARINFO, 4, 4); - TEST_TYPE_POINTER(PTITLEBARINFO, 44, 4); -} - -static void test_pack_PUSEROBJECTFLAGS(void) -{ - /* PUSEROBJECTFLAGS */ - TEST_TYPE(PUSEROBJECTFLAGS, 4, 4); - TEST_TYPE_POINTER(PUSEROBJECTFLAGS, 12, 4); -} - -static void test_pack_PWINDOWINFO(void) -{ - /* PWINDOWINFO */ - TEST_TYPE(PWINDOWINFO, 4, 4); - TEST_TYPE_POINTER(PWINDOWINFO, 60, 4); -} - -static void test_pack_PWINDOWPLACEMENT(void) -{ - /* PWINDOWPLACEMENT */ - TEST_TYPE(PWINDOWPLACEMENT, 4, 4); - TEST_TYPE_POINTER(PWINDOWPLACEMENT, 44, 4); -} - -static void test_pack_PWINDOWPOS(void) -{ - /* PWINDOWPOS */ - TEST_TYPE(PWINDOWPOS, 4, 4); - TEST_TYPE_POINTER(PWINDOWPOS, 28, 4); -} - -static void test_pack_PWNDCLASSA(void) -{ - /* PWNDCLASSA */ - TEST_TYPE(PWNDCLASSA, 4, 4); - TEST_TYPE_POINTER(PWNDCLASSA, 40, 4); -} - -static void test_pack_PWNDCLASSEXA(void) -{ - /* PWNDCLASSEXA */ - TEST_TYPE(PWNDCLASSEXA, 4, 4); - TEST_TYPE_POINTER(PWNDCLASSEXA, 48, 4); -} - -static void test_pack_PWNDCLASSEXW(void) -{ - /* PWNDCLASSEXW */ - TEST_TYPE(PWNDCLASSEXW, 4, 4); - TEST_TYPE_POINTER(PWNDCLASSEXW, 48, 4); -} - -static void test_pack_PWNDCLASSW(void) -{ - /* PWNDCLASSW */ - TEST_TYPE(PWNDCLASSW, 4, 4); - TEST_TYPE_POINTER(PWNDCLASSW, 40, 4); -} - -static void test_pack_SCROLLINFO(void) -{ - /* SCROLLINFO (pack 4) */ - TEST_TYPE(SCROLLINFO, 28, 4); - TEST_FIELD(SCROLLINFO, UINT, cbSize, 0, 4, 4); - TEST_FIELD(SCROLLINFO, UINT, fMask, 4, 4, 4); - TEST_FIELD(SCROLLINFO, INT, nMin, 8, 4, 4); - TEST_FIELD(SCROLLINFO, INT, nMax, 12, 4, 4); - TEST_FIELD(SCROLLINFO, UINT, nPage, 16, 4, 4); - TEST_FIELD(SCROLLINFO, INT, nPos, 20, 4, 4); - TEST_FIELD(SCROLLINFO, INT, nTrackPos, 24, 4, 4); -} - -static void test_pack_SENDASYNCPROC(void) -{ - /* SENDASYNCPROC */ - TEST_TYPE(SENDASYNCPROC, 4, 4); -} - -static void test_pack_SERIALKEYSA(void) -{ - /* SERIALKEYSA (pack 4) */ - TEST_TYPE(SERIALKEYSA, 28, 4); - TEST_FIELD(SERIALKEYSA, UINT, cbSize, 0, 4, 4); - TEST_FIELD(SERIALKEYSA, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(SERIALKEYSA, LPSTR, lpszActivePort, 8, 4, 4); - TEST_FIELD(SERIALKEYSA, LPSTR, lpszPort, 12, 4, 4); - TEST_FIELD(SERIALKEYSA, UINT, iBaudRate, 16, 4, 4); - TEST_FIELD(SERIALKEYSA, UINT, iPortState, 20, 4, 4); - TEST_FIELD(SERIALKEYSA, UINT, iActive, 24, 4, 4); -} - -static void test_pack_SERIALKEYSW(void) -{ - /* SERIALKEYSW (pack 4) */ - TEST_TYPE(SERIALKEYSW, 28, 4); - TEST_FIELD(SERIALKEYSW, UINT, cbSize, 0, 4, 4); - TEST_FIELD(SERIALKEYSW, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(SERIALKEYSW, LPWSTR, lpszActivePort, 8, 4, 4); - TEST_FIELD(SERIALKEYSW, LPWSTR, lpszPort, 12, 4, 4); - TEST_FIELD(SERIALKEYSW, UINT, iBaudRate, 16, 4, 4); - TEST_FIELD(SERIALKEYSW, UINT, iPortState, 20, 4, 4); - TEST_FIELD(SERIALKEYSW, UINT, iActive, 24, 4, 4); -} - -static void test_pack_SOUNDSENTRYA(void) -{ - /* SOUNDSENTRYA (pack 4) */ - TEST_TYPE(SOUNDSENTRYA, 48, 4); - TEST_FIELD(SOUNDSENTRYA, UINT, cbSize, 0, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iFSTextEffect, 8, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iFSTextEffectMSec, 12, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iFSTextEffectColorBits, 16, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iFSGrafEffect, 20, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iFSGrafEffectMSec, 24, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iFSGrafEffectColor, 28, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iWindowsEffect, 32, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iWindowsEffectMSec, 36, 4, 4); - TEST_FIELD(SOUNDSENTRYA, LPSTR, lpszWindowsEffectDLL, 40, 4, 4); - TEST_FIELD(SOUNDSENTRYA, DWORD, iWindowsEffectOrdinal, 44, 4, 4); -} - -static void test_pack_SOUNDSENTRYW(void) -{ - /* SOUNDSENTRYW (pack 4) */ - TEST_TYPE(SOUNDSENTRYW, 48, 4); - TEST_FIELD(SOUNDSENTRYW, UINT, cbSize, 0, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iFSTextEffect, 8, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iFSTextEffectMSec, 12, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iFSTextEffectColorBits, 16, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iFSGrafEffect, 20, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iFSGrafEffectMSec, 24, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iFSGrafEffectColor, 28, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iWindowsEffect, 32, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iWindowsEffectMSec, 36, 4, 4); - TEST_FIELD(SOUNDSENTRYW, LPWSTR, lpszWindowsEffectDLL, 40, 4, 4); - TEST_FIELD(SOUNDSENTRYW, DWORD, iWindowsEffectOrdinal, 44, 4, 4); -} - -static void test_pack_STICKYKEYS(void) -{ - /* STICKYKEYS (pack 4) */ - TEST_TYPE(STICKYKEYS, 8, 4); - TEST_FIELD(STICKYKEYS, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(STICKYKEYS, DWORD, dwFlags, 4, 4, 4); -} - -static void test_pack_STYLESTRUCT(void) -{ - /* STYLESTRUCT (pack 4) */ - TEST_TYPE(STYLESTRUCT, 8, 4); - TEST_FIELD(STYLESTRUCT, DWORD, styleOld, 0, 4, 4); - TEST_FIELD(STYLESTRUCT, DWORD, styleNew, 4, 4, 4); -} - -static void test_pack_TIMERPROC(void) -{ - /* TIMERPROC */ - TEST_TYPE(TIMERPROC, 4, 4); -} - -static void test_pack_TITLEBARINFO(void) -{ - /* TITLEBARINFO (pack 4) */ - TEST_TYPE(TITLEBARINFO, 44, 4); - TEST_FIELD(TITLEBARINFO, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(TITLEBARINFO, RECT, rcTitleBar, 4, 16, 4); - TEST_FIELD(TITLEBARINFO, DWORD[CCHILDREN_TITLEBAR+1], rgstate, 20, 24, 4); -} - -static void test_pack_TOGGLEKEYS(void) -{ - /* TOGGLEKEYS (pack 4) */ - TEST_TYPE(TOGGLEKEYS, 8, 4); - TEST_FIELD(TOGGLEKEYS, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(TOGGLEKEYS, DWORD, dwFlags, 4, 4, 4); -} - -static void test_pack_TPMPARAMS(void) -{ - /* TPMPARAMS (pack 4) */ - TEST_TYPE(TPMPARAMS, 20, 4); - TEST_FIELD(TPMPARAMS, UINT, cbSize, 0, 4, 4); - TEST_FIELD(TPMPARAMS, RECT, rcExclude, 4, 16, 4); -} - -static void test_pack_TRACKMOUSEEVENT(void) -{ - /* TRACKMOUSEEVENT (pack 4) */ - TEST_TYPE(TRACKMOUSEEVENT, 16, 4); - TEST_FIELD(TRACKMOUSEEVENT, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(TRACKMOUSEEVENT, DWORD, dwFlags, 4, 4, 4); - TEST_FIELD(TRACKMOUSEEVENT, HWND, hwndTrack, 8, 4, 4); - TEST_FIELD(TRACKMOUSEEVENT, DWORD, dwHoverTime, 12, 4, 4); -} - -static void test_pack_USEROBJECTFLAGS(void) -{ - /* USEROBJECTFLAGS (pack 4) */ - TEST_TYPE(USEROBJECTFLAGS, 12, 4); - TEST_FIELD(USEROBJECTFLAGS, BOOL, fInherit, 0, 4, 4); - TEST_FIELD(USEROBJECTFLAGS, BOOL, fReserved, 4, 4, 4); - TEST_FIELD(USEROBJECTFLAGS, DWORD, dwFlags, 8, 4, 4); -} - -static void test_pack_WINDOWINFO(void) -{ - /* WINDOWINFO (pack 4) */ - TEST_TYPE(WINDOWINFO, 60, 4); - TEST_FIELD(WINDOWINFO, DWORD, cbSize, 0, 4, 4); - TEST_FIELD(WINDOWINFO, RECT, rcWindow, 4, 16, 4); - TEST_FIELD(WINDOWINFO, RECT, rcClient, 20, 16, 4); - TEST_FIELD(WINDOWINFO, DWORD, dwStyle, 36, 4, 4); - TEST_FIELD(WINDOWINFO, DWORD, dwExStyle, 40, 4, 4); - TEST_FIELD(WINDOWINFO, DWORD, dwWindowStatus, 44, 4, 4); - TEST_FIELD(WINDOWINFO, UINT, cxWindowBorders, 48, 4, 4); - TEST_FIELD(WINDOWINFO, UINT, cyWindowBorders, 52, 4, 4); - TEST_FIELD(WINDOWINFO, ATOM, atomWindowType, 56, 2, 2); - TEST_FIELD(WINDOWINFO, WORD, wCreatorVersion, 58, 2, 2); -} - -static void test_pack_WINDOWPLACEMENT(void) -{ - /* WINDOWPLACEMENT (pack 4) */ - TEST_TYPE(WINDOWPLACEMENT, 44, 4); - TEST_FIELD(WINDOWPLACEMENT, UINT, length, 0, 4, 4); - TEST_FIELD(WINDOWPLACEMENT, UINT, flags, 4, 4, 4); - TEST_FIELD(WINDOWPLACEMENT, UINT, showCmd, 8, 4, 4); - TEST_FIELD(WINDOWPLACEMENT, POINT, ptMinPosition, 12, 8, 4); - TEST_FIELD(WINDOWPLACEMENT, POINT, ptMaxPosition, 20, 8, 4); - TEST_FIELD(WINDOWPLACEMENT, RECT, rcNormalPosition, 28, 16, 4); -} - -static void test_pack_WINDOWPOS(void) -{ - /* WINDOWPOS (pack 4) */ - TEST_TYPE(WINDOWPOS, 28, 4); - TEST_FIELD(WINDOWPOS, HWND, hwnd, 0, 4, 4); - TEST_FIELD(WINDOWPOS, HWND, hwndInsertAfter, 4, 4, 4); - TEST_FIELD(WINDOWPOS, INT, x, 8, 4, 4); - TEST_FIELD(WINDOWPOS, INT, y, 12, 4, 4); - TEST_FIELD(WINDOWPOS, INT, cx, 16, 4, 4); - TEST_FIELD(WINDOWPOS, INT, cy, 20, 4, 4); - TEST_FIELD(WINDOWPOS, UINT, flags, 24, 4, 4); -} - -static void test_pack_WINEVENTPROC(void) -{ - /* WINEVENTPROC */ - TEST_TYPE(WINEVENTPROC, 4, 4); -} - -static void test_pack_WINSTAENUMPROCA(void) -{ - /* WINSTAENUMPROCA */ - TEST_TYPE(WINSTAENUMPROCA, 4, 4); -} - -static void test_pack_WINSTAENUMPROCW(void) -{ - /* WINSTAENUMPROCW */ - TEST_TYPE(WINSTAENUMPROCW, 4, 4); -} - -static void test_pack_WNDCLASSA(void) -{ - /* WNDCLASSA (pack 4) */ - TEST_TYPE(WNDCLASSA, 40, 4); - TEST_FIELD(WNDCLASSA, UINT, style, 0, 4, 4); - TEST_FIELD(WNDCLASSA, WNDPROC, lpfnWndProc, 4, 4, 4); - TEST_FIELD(WNDCLASSA, INT, cbClsExtra, 8, 4, 4); - TEST_FIELD(WNDCLASSA, INT, cbWndExtra, 12, 4, 4); - TEST_FIELD(WNDCLASSA, HINSTANCE, hInstance, 16, 4, 4); - TEST_FIELD(WNDCLASSA, HICON, hIcon, 20, 4, 4); - TEST_FIELD(WNDCLASSA, HCURSOR, hCursor, 24, 4, 4); - TEST_FIELD(WNDCLASSA, HBRUSH, hbrBackground, 28, 4, 4); - TEST_FIELD(WNDCLASSA, LPCSTR, lpszMenuName, 32, 4, 4); - TEST_FIELD(WNDCLASSA, LPCSTR, lpszClassName, 36, 4, 4); -} - -static void test_pack_WNDCLASSEXA(void) -{ - /* WNDCLASSEXA (pack 4) */ - TEST_TYPE(WNDCLASSEXA, 48, 4); - TEST_FIELD(WNDCLASSEXA, UINT, cbSize, 0, 4, 4); - TEST_FIELD(WNDCLASSEXA, UINT, style, 4, 4, 4); - TEST_FIELD(WNDCLASSEXA, WNDPROC, lpfnWndProc, 8, 4, 4); - TEST_FIELD(WNDCLASSEXA, INT, cbClsExtra, 12, 4, 4); - TEST_FIELD(WNDCLASSEXA, INT, cbWndExtra, 16, 4, 4); - TEST_FIELD(WNDCLASSEXA, HINSTANCE, hInstance, 20, 4, 4); - TEST_FIELD(WNDCLASSEXA, HICON, hIcon, 24, 4, 4); - TEST_FIELD(WNDCLASSEXA, HCURSOR, hCursor, 28, 4, 4); - TEST_FIELD(WNDCLASSEXA, HBRUSH, hbrBackground, 32, 4, 4); - TEST_FIELD(WNDCLASSEXA, LPCSTR, lpszMenuName, 36, 4, 4); - TEST_FIELD(WNDCLASSEXA, LPCSTR, lpszClassName, 40, 4, 4); - TEST_FIELD(WNDCLASSEXA, HICON, hIconSm, 44, 4, 4); -} - -static void test_pack_WNDCLASSEXW(void) -{ - /* WNDCLASSEXW (pack 4) */ - TEST_TYPE(WNDCLASSEXW, 48, 4); - TEST_FIELD(WNDCLASSEXW, UINT, cbSize, 0, 4, 4); - TEST_FIELD(WNDCLASSEXW, UINT, style, 4, 4, 4); - TEST_FIELD(WNDCLASSEXW, WNDPROC, lpfnWndProc, 8, 4, 4); - TEST_FIELD(WNDCLASSEXW, INT, cbClsExtra, 12, 4, 4); - TEST_FIELD(WNDCLASSEXW, INT, cbWndExtra, 16, 4, 4); - TEST_FIELD(WNDCLASSEXW, HINSTANCE, hInstance, 20, 4, 4); - TEST_FIELD(WNDCLASSEXW, HICON, hIcon, 24, 4, 4); - TEST_FIELD(WNDCLASSEXW, HCURSOR, hCursor, 28, 4, 4); - TEST_FIELD(WNDCLASSEXW, HBRUSH, hbrBackground, 32, 4, 4); - TEST_FIELD(WNDCLASSEXW, LPCWSTR, lpszMenuName, 36, 4, 4); - TEST_FIELD(WNDCLASSEXW, LPCWSTR, lpszClassName, 40, 4, 4); - TEST_FIELD(WNDCLASSEXW, HICON, hIconSm, 44, 4, 4); -} - -static void test_pack_WNDCLASSW(void) -{ - /* WNDCLASSW (pack 4) */ - TEST_TYPE(WNDCLASSW, 40, 4); - TEST_FIELD(WNDCLASSW, UINT, style, 0, 4, 4); - TEST_FIELD(WNDCLASSW, WNDPROC, lpfnWndProc, 4, 4, 4); - TEST_FIELD(WNDCLASSW, INT, cbClsExtra, 8, 4, 4); - TEST_FIELD(WNDCLASSW, INT, cbWndExtra, 12, 4, 4); - TEST_FIELD(WNDCLASSW, HINSTANCE, hInstance, 16, 4, 4); - TEST_FIELD(WNDCLASSW, HICON, hIcon, 20, 4, 4); - TEST_FIELD(WNDCLASSW, HCURSOR, hCursor, 24, 4, 4); - TEST_FIELD(WNDCLASSW, HBRUSH, hbrBackground, 28, 4, 4); - TEST_FIELD(WNDCLASSW, LPCWSTR, lpszMenuName, 32, 4, 4); - TEST_FIELD(WNDCLASSW, LPCWSTR, lpszClassName, 36, 4, 4); -} - -static void test_pack_WNDENUMPROC(void) -{ - /* WNDENUMPROC */ - TEST_TYPE(WNDENUMPROC, 4, 4); -} - -static void test_pack_WNDPROC(void) -{ - /* WNDPROC */ - TEST_TYPE(WNDPROC, 4, 4); -} - -static void test_pack(void) -{ - test_pack_ACCESSTIMEOUT(); - test_pack_ANIMATIONINFO(); - test_pack_CBTACTIVATESTRUCT(); - test_pack_CBT_CREATEWNDA(); - test_pack_CBT_CREATEWNDW(); - test_pack_CLIENTCREATESTRUCT(); - test_pack_COMBOBOXINFO(); - test_pack_COMPAREITEMSTRUCT(); - test_pack_COPYDATASTRUCT(); - test_pack_CREATESTRUCTA(); - test_pack_CREATESTRUCTW(); - test_pack_CURSORINFO(); - test_pack_CWPRETSTRUCT(); - test_pack_CWPSTRUCT(); - test_pack_DEBUGHOOKINFO(); - test_pack_DELETEITEMSTRUCT(); - test_pack_DESKTOPENUMPROCA(); - test_pack_DESKTOPENUMPROCW(); - test_pack_DLGITEMTEMPLATE(); - test_pack_DLGPROC(); - test_pack_DLGTEMPLATE(); - test_pack_DRAWITEMSTRUCT(); - test_pack_DRAWSTATEPROC(); - test_pack_DRAWTEXTPARAMS(); - test_pack_EDITWORDBREAKPROCA(); - test_pack_EDITWORDBREAKPROCW(); - test_pack_EVENTMSG(); - test_pack_FILTERKEYS(); - test_pack_FLASHWINFO(); - test_pack_GRAYSTRINGPROC(); - test_pack_GUITHREADINFO(); - test_pack_HARDWAREHOOKSTRUCT(); - test_pack_HARDWAREINPUT(); - test_pack_HDEVNOTIFY(); - test_pack_HDWP(); - test_pack_HELPINFO(); - test_pack_HELPWININFOA(); - test_pack_HELPWININFOW(); - test_pack_HIGHCONTRASTA(); - test_pack_HIGHCONTRASTW(); - test_pack_HOOKPROC(); - test_pack_ICONINFO(); - test_pack_ICONMETRICSA(); - test_pack_ICONMETRICSW(); - test_pack_INPUT(); - test_pack_KBDLLHOOKSTRUCT(); - test_pack_KEYBDINPUT(); - test_pack_LPACCESSTIMEOUT(); - test_pack_LPANIMATIONINFO(); - test_pack_LPCBTACTIVATESTRUCT(); - test_pack_LPCBT_CREATEWNDA(); - test_pack_LPCBT_CREATEWNDW(); - test_pack_LPCDLGTEMPLATEA(); - test_pack_LPCDLGTEMPLATEW(); - test_pack_LPCLIENTCREATESTRUCT(); - test_pack_LPCMENUINFO(); - test_pack_LPCMENUITEMINFOA(); - test_pack_LPCMENUITEMINFOW(); - test_pack_LPCOMBOBOXINFO(); - test_pack_LPCOMPAREITEMSTRUCT(); - test_pack_LPCREATESTRUCTA(); - test_pack_LPCREATESTRUCTW(); - test_pack_LPCSCROLLINFO(); - test_pack_LPCURSORINFO(); - test_pack_LPCWPRETSTRUCT(); - test_pack_LPCWPSTRUCT(); - test_pack_LPDEBUGHOOKINFO(); - test_pack_LPDELETEITEMSTRUCT(); - test_pack_LPDLGITEMTEMPLATEA(); - test_pack_LPDLGITEMTEMPLATEW(); - test_pack_LPDLGTEMPLATEA(); - test_pack_LPDLGTEMPLATEW(); - test_pack_LPDRAWITEMSTRUCT(); - test_pack_LPDRAWTEXTPARAMS(); - test_pack_LPEVENTMSG(); - test_pack_LPFILTERKEYS(); - test_pack_LPGUITHREADINFO(); - test_pack_LPHARDWAREHOOKSTRUCT(); - test_pack_LPHARDWAREINPUT(); - test_pack_LPHELPINFO(); - test_pack_LPHELPWININFOA(); - test_pack_LPHELPWININFOW(); - test_pack_LPHIGHCONTRASTA(); - test_pack_LPHIGHCONTRASTW(); - test_pack_LPICONMETRICSA(); - test_pack_LPICONMETRICSW(); - test_pack_LPINPUT(); - test_pack_LPKBDLLHOOKSTRUCT(); - test_pack_LPKEYBDINPUT(); - test_pack_LPMDICREATESTRUCTA(); - test_pack_LPMDICREATESTRUCTW(); - test_pack_LPMDINEXTMENU(); - test_pack_LPMEASUREITEMSTRUCT(); - test_pack_LPMENUINFO(); - test_pack_LPMENUITEMINFOA(); - test_pack_LPMENUITEMINFOW(); - test_pack_LPMINIMIZEDMETRICS(); - test_pack_LPMINMAXINFO(); - test_pack_LPMONITORINFO(); - test_pack_LPMONITORINFOEXA(); - test_pack_LPMONITORINFOEXW(); - test_pack_LPMOUSEHOOKSTRUCT(); - test_pack_LPMOUSEINPUT(); - test_pack_LPMOUSEKEYS(); - test_pack_LPMSG(); - test_pack_LPMSGBOXPARAMSA(); - test_pack_LPMSGBOXPARAMSW(); - test_pack_LPMSLLHOOKSTRUCT(); - test_pack_LPMULTIKEYHELPA(); - test_pack_LPMULTIKEYHELPW(); - test_pack_LPNCCALCSIZE_PARAMS(); - test_pack_LPNMHDR(); - test_pack_LPNONCLIENTMETRICSA(); - test_pack_LPNONCLIENTMETRICSW(); - test_pack_LPPAINTSTRUCT(); - test_pack_LPSCROLLINFO(); - test_pack_LPSERIALKEYSA(); - test_pack_LPSERIALKEYSW(); - test_pack_LPSOUNDSENTRYA(); - test_pack_LPSOUNDSENTRYW(); - test_pack_LPSTICKYKEYS(); - test_pack_LPSTYLESTRUCT(); - test_pack_LPTITLEBARINFO(); - test_pack_LPTOGGLEKEYS(); - test_pack_LPTPMPARAMS(); - test_pack_LPTRACKMOUSEEVENT(); - test_pack_LPWINDOWINFO(); - test_pack_LPWINDOWPLACEMENT(); - test_pack_LPWINDOWPOS(); - test_pack_LPWNDCLASSA(); - test_pack_LPWNDCLASSEXA(); - test_pack_LPWNDCLASSEXW(); - test_pack_LPWNDCLASSW(); - test_pack_MDICREATESTRUCTA(); - test_pack_MDICREATESTRUCTW(); - test_pack_MDINEXTMENU(); - test_pack_MEASUREITEMSTRUCT(); - test_pack_MENUINFO(); - test_pack_MENUITEMINFOA(); - test_pack_MENUITEMINFOW(); - test_pack_MENUITEMTEMPLATE(); - test_pack_MENUITEMTEMPLATEHEADER(); - test_pack_MINIMIZEDMETRICS(); - test_pack_MINMAXINFO(); - test_pack_MONITORENUMPROC(); - test_pack_MONITORINFO(); - test_pack_MONITORINFOEXA(); - test_pack_MONITORINFOEXW(); - test_pack_MOUSEHOOKSTRUCT(); - test_pack_MOUSEINPUT(); - test_pack_MOUSEKEYS(); - test_pack_MSG(); - test_pack_MSGBOXCALLBACK(); - test_pack_MSGBOXPARAMSA(); - test_pack_MSGBOXPARAMSW(); - test_pack_MSLLHOOKSTRUCT(); - test_pack_MULTIKEYHELPA(); - test_pack_MULTIKEYHELPW(); - test_pack_NAMEENUMPROCA(); - test_pack_NAMEENUMPROCW(); - test_pack_NCCALCSIZE_PARAMS(); - test_pack_NMHDR(); - test_pack_NONCLIENTMETRICSA(); - test_pack_NONCLIENTMETRICSW(); - test_pack_PAINTSTRUCT(); - test_pack_PCOMBOBOXINFO(); - test_pack_PCOMPAREITEMSTRUCT(); - test_pack_PCOPYDATASTRUCT(); - test_pack_PCURSORINFO(); - test_pack_PCWPRETSTRUCT(); - test_pack_PCWPSTRUCT(); - test_pack_PDEBUGHOOKINFO(); - test_pack_PDELETEITEMSTRUCT(); - test_pack_PDLGITEMTEMPLATEA(); - test_pack_PDLGITEMTEMPLATEW(); - test_pack_PDRAWITEMSTRUCT(); - test_pack_PEVENTMSG(); - test_pack_PFLASHWINFO(); - test_pack_PGUITHREADINFO(); - test_pack_PHARDWAREHOOKSTRUCT(); - test_pack_PHARDWAREINPUT(); - test_pack_PHDEVNOTIFY(); - test_pack_PHELPWININFOA(); - test_pack_PHELPWININFOW(); - test_pack_PICONINFO(); - test_pack_PICONMETRICSA(); - test_pack_PICONMETRICSW(); - test_pack_PINPUT(); - test_pack_PKBDLLHOOKSTRUCT(); - test_pack_PKEYBDINPUT(); - test_pack_PMDINEXTMENU(); - test_pack_PMEASUREITEMSTRUCT(); - test_pack_PMENUITEMTEMPLATE(); - test_pack_PMENUITEMTEMPLATEHEADER(); - test_pack_PMINIMIZEDMETRICS(); - test_pack_PMINMAXINFO(); - test_pack_PMOUSEHOOKSTRUCT(); - test_pack_PMOUSEINPUT(); - test_pack_PMSG(); - test_pack_PMSGBOXPARAMSA(); - test_pack_PMSGBOXPARAMSW(); - test_pack_PMSLLHOOKSTRUCT(); - test_pack_PMULTIKEYHELPA(); - test_pack_PMULTIKEYHELPW(); - test_pack_PNONCLIENTMETRICSA(); - test_pack_PNONCLIENTMETRICSW(); - test_pack_PPAINTSTRUCT(); - test_pack_PROPENUMPROCA(); - test_pack_PROPENUMPROCEXA(); - test_pack_PROPENUMPROCEXW(); - test_pack_PROPENUMPROCW(); - test_pack_PTITLEBARINFO(); - test_pack_PUSEROBJECTFLAGS(); - test_pack_PWINDOWINFO(); - test_pack_PWINDOWPLACEMENT(); - test_pack_PWINDOWPOS(); - test_pack_PWNDCLASSA(); - test_pack_PWNDCLASSEXA(); - test_pack_PWNDCLASSEXW(); - test_pack_PWNDCLASSW(); - test_pack_SCROLLINFO(); - test_pack_SENDASYNCPROC(); - test_pack_SERIALKEYSA(); - test_pack_SERIALKEYSW(); - test_pack_SOUNDSENTRYA(); - test_pack_SOUNDSENTRYW(); - test_pack_STICKYKEYS(); - test_pack_STYLESTRUCT(); - test_pack_TIMERPROC(); - test_pack_TITLEBARINFO(); - test_pack_TOGGLEKEYS(); - test_pack_TPMPARAMS(); - test_pack_TRACKMOUSEEVENT(); - test_pack_USEROBJECTFLAGS(); - test_pack_WINDOWINFO(); - test_pack_WINDOWPLACEMENT(); - test_pack_WINDOWPOS(); - test_pack_WINEVENTPROC(); - test_pack_WINSTAENUMPROCA(); - test_pack_WINSTAENUMPROCW(); - test_pack_WNDCLASSA(); - test_pack_WNDCLASSEXA(); - test_pack_WNDCLASSEXW(); - test_pack_WNDCLASSW(); - test_pack_WNDENUMPROC(); - test_pack_WNDPROC(); -} - -START_TEST(generated) -{ - test_pack(); -} diff --git a/rostests/winetests/user32/input.c b/rostests/winetests/user32/input.c deleted file mode 100755 index 0876709f77a..00000000000 --- a/rostests/winetests/user32/input.c +++ /dev/null @@ -1,1151 +0,0 @@ -/* Test Key event to Key message translation - * - * Copyright 2003 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 - */ - -/* test whether the right type of messages: - * WM_KEYUP/DOWN vs WM_SYSKEYUP/DOWN are sent in case of combined - * keystrokes. - * - * For instance -X can be accomplished by - * the sequence ALT-KEY-DOWN, X-KEY-DOWN, ALT-KEY-UP, X-KEY-UP - * but also X-KEY-DOWN, ALT-KEY-DOWN, X-KEY-UP, ALT-KEY-UP - * Whether a KEY or a SYSKEY message is sent is not always clear, it is - * also not the same in WINNT as in WIN9X */ - -/* NOTE that there will be test failures under WIN9X - * No applications are known to me that rely on this - * so I don't fix it */ - -/* TODO: - * 1. extend it to the wm_command and wm_syscommand notifications - * 2. add some more tests with special cases like dead keys or right (alt) key - * 3. there is some adapted code from input.c in here. Should really - * make that code exactly the same. - * 4. resolve the win9x case when there is a need or the testing frame work - * offers a nice way. - * 5. The test app creates a window, the user should not take the focus - * away during its short existence. I could do something to prevent that - * if it is a problem. - * - */ - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "winuser.h" - -#include "wine/test.h" - -/* globals */ -static HWND hWndTest; -static long timetag = 0x10000000; - -static UINT (WINAPI *pSendInput) (UINT, INPUT*, size_t); -static int (WINAPI *pGetMouseMovePointsEx) (UINT, LPMOUSEMOVEPOINT, LPMOUSEMOVEPOINT, int, DWORD); - -#define MAXKEYEVENTS 6 -#define MAXKEYMESSAGES MAXKEYEVENTS /* assuming a key event generates one - and only one message */ - -/* keyboard message names, sorted as their value */ -static const char *MSGNAME[]={"WM_KEYDOWN", "WM_KEYUP", "WM_CHAR","WM_DEADCHAR", - "WM_SYSKEYDOWN", "WM_SYSKEYUP", "WM_SYSCHAR", "WM_SYSDEADCHAR" ,"WM_KEYLAST"}; - -/* keyevents, add more as needed */ -typedef enum KEVtag -{ ALTDOWN = 1, ALTUP, XDOWN, XUP, SHIFTDOWN, SHIFTUP, CTRLDOWN, CTRLUP } KEV; -/* matching VK's */ -static const int GETVKEY[]={0, VK_MENU, VK_MENU, 'X', 'X', VK_SHIFT, VK_SHIFT, VK_CONTROL, VK_CONTROL}; -/* matching scan codes */ -static const int GETSCAN[]={0, 0x38, 0x38, 0x2D, 0x2D, 0x2A, 0x2A, 0x1D, 0x1D }; -/* matching updown events */ -static const int GETFLAGS[]={0, 0, KEYEVENTF_KEYUP, 0, KEYEVENTF_KEYUP, 0, KEYEVENTF_KEYUP, 0, KEYEVENTF_KEYUP}; -/* matching descriptions */ -static const char *getdesc[]={"", "+alt","-alt","+X","-X","+shift","-shift","+ctrl","-ctrl"}; - -/* The MSVC headers ignore our NONAMELESSUNION requests so we have to define our own type */ -typedef struct -{ - DWORD type; - union - { - MOUSEINPUT mi; - KEYBDINPUT ki; - HARDWAREINPUT hi; - } u; -} TEST_INPUT; - -#define ADDTOINPUTS(kev) \ -inputs[evtctr].type = INPUT_KEYBOARD; \ - ((TEST_INPUT*)inputs)[evtctr].u.ki.wVk = GETVKEY[ kev]; \ - ((TEST_INPUT*)inputs)[evtctr].u.ki.wScan = GETSCAN[ kev]; \ - ((TEST_INPUT*)inputs)[evtctr].u.ki.dwFlags = GETFLAGS[ kev]; \ - ((TEST_INPUT*)inputs)[evtctr].u.ki.dwExtraInfo = 0; \ - ((TEST_INPUT*)inputs)[evtctr].u.ki.time = ++timetag; \ - if( kev) evtctr++; - -typedef struct { - UINT message; - WPARAM wParam; - LPARAM lParam; -} KMSG; - -/******************************************* - * add new test sets here - * the software will make all combinations of the - * keyevent defined here - */ -static const struct { - int nrkev; - KEV keydwn[MAXKEYEVENTS]; - KEV keyup[MAXKEYEVENTS]; -} testkeyset[]= { - { 2, { ALTDOWN, XDOWN }, { ALTUP, XUP}}, - { 3, { ALTDOWN, XDOWN , SHIFTDOWN}, { ALTUP, XUP, SHIFTUP}}, - { 3, { ALTDOWN, XDOWN , CTRLDOWN}, { ALTUP, XUP, CTRLUP}}, - { 3, { SHIFTDOWN, XDOWN , CTRLDOWN}, { SHIFTUP, XUP, CTRLUP}}, - { 0 } /* mark the end */ -}; - -/**********************adapted from input.c **********************************/ - -static BYTE InputKeyStateTable[256]; -static BYTE AsyncKeyStateTable[256]; -static BYTE TrackSysKey = 0; /* determine whether ALT key up will cause a WM_SYSKEYUP - or a WM_KEYUP message */ - -static void init_function_pointers(void) -{ - HMODULE hdll = GetModuleHandleA("user32"); - -#define GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hdll, #func); \ - if(!p ## func) \ - trace("GetProcAddress(%s) failed\n", #func); - - GET_PROC(SendInput) - GET_PROC(GetMouseMovePointsEx) - -#undef GET_PROC -} - -static int KbdMessage( KEV kev, WPARAM *pwParam, LPARAM *plParam ) -{ - UINT message; - int VKey = GETVKEY[kev]; - WORD flags; - - flags = LOBYTE(GETSCAN[kev]); - if (GETFLAGS[kev] & KEYEVENTF_EXTENDEDKEY) flags |= KF_EXTENDED; - - if (GETFLAGS[kev] & KEYEVENTF_KEYUP ) - { - message = WM_KEYUP; - if( (InputKeyStateTable[VK_MENU] & 0x80) && ( - (VKey == VK_MENU) || (VKey == VK_CONTROL) || - !(InputKeyStateTable[VK_CONTROL] & 0x80))) { - if( TrackSysKey == VK_MENU || /* -down/-up sequence */ - (VKey != VK_MENU)) /* -down...-up */ - message = WM_SYSKEYUP; - TrackSysKey = 0; - } - InputKeyStateTable[VKey] &= ~0x80; - flags |= KF_REPEAT | KF_UP; - } - else - { - if (InputKeyStateTable[VKey] & 0x80) flags |= KF_REPEAT; - if (!(InputKeyStateTable[VKey] & 0x80)) InputKeyStateTable[VKey] ^= 0x01; - InputKeyStateTable[VKey] |= 0x80; - AsyncKeyStateTable[VKey] |= 0x80; - - message = WM_KEYDOWN; - if( (InputKeyStateTable[VK_MENU] & 0x80) && - !(InputKeyStateTable[VK_CONTROL] & 0x80)) { - message = WM_SYSKEYDOWN; - TrackSysKey = VKey; - } - } - - if (InputKeyStateTable[VK_MENU] & 0x80) flags |= KF_ALTDOWN; - - if( plParam) *plParam = MAKELPARAM( 1, flags ); - if( pwParam) *pwParam = VKey; - return message; -} - -/****************************** end copy input.c ****************************/ - -/* - * . prepare the keyevents for SendInputs - * . calculate the "expected" messages - * . Send the events to our window - * . retrieve the messages from the input queue - * . verify - */ -static void do_test( HWND hwnd, int seqnr, const KEV td[] ) -{ - INPUT inputs[MAXKEYEVENTS]; - KMSG expmsg[MAXKEYEVENTS]; - MSG msg; - char buf[100]; - UINT evtctr=0; - int kmctr, i; - - buf[0]='\0'; - TrackSysKey=0; /* see input.c */ - for( i = 0; i < MAXKEYEVENTS; i++) { - ADDTOINPUTS(td[i]) - strcat(buf, getdesc[td[i]]); - if(td[i]) - expmsg[i].message = KbdMessage(td[i], &(expmsg[i].wParam), &(expmsg[i].lParam)); /* see queue_kbd_event() */ - else - expmsg[i].message = 0; - } - for( kmctr = 0; kmctr < MAXKEYEVENTS && expmsg[kmctr].message; kmctr++) - ; - assert( evtctr <= MAXKEYEVENTS ); - assert( evtctr == pSendInput(evtctr, &inputs[0], sizeof(INPUT))); - i = 0; - if (winetest_debug > 1) - trace("======== key stroke sequence #%d: %s =============\n", - seqnr + 1, buf); - while( PeekMessage(&msg,hwnd,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE) ) { - if (winetest_debug > 1) - trace("message[%d] %-15s wParam %04lx lParam %08lx time %x\n", i, - MSGNAME[msg.message - WM_KEYFIRST], msg.wParam, msg.lParam, msg.time); - if( i < kmctr ) { - ok( msg.message == expmsg[i].message && - msg.wParam == expmsg[i].wParam && - msg.lParam == expmsg[i].lParam, - "wrong message! expected:\n" - "message[%d] %-15s wParam %04lx lParam %08lx\n",i, - MSGNAME[(expmsg[i]).message - WM_KEYFIRST], - expmsg[i].wParam, expmsg[i].lParam ); - } - i++; - } - if (winetest_debug > 1) - trace("%d messages retrieved\n", i); - ok( i == kmctr, "message count is wrong: got %d expected: %d\n", i, kmctr); -} - -/* test all combinations of the specified key events */ -static void TestASet( HWND hWnd, int nrkev, const KEV kevdwn[], const KEV kevup[] ) -{ - int i,j,k,l,m,n; - static int count=0; - KEV kbuf[MAXKEYEVENTS]; - assert( nrkev==2 || nrkev==3); - for(i=0;iexpected_transitions; - UINT actual_cnt = 0; - const struct message *expected = test->expected_messages; - - while (t->wVk) { - int matched = ((ks1[t->wVk]&0x80) == (t->before_state&0x80) - && (ks2[t->wVk]&0x80) == (~t->before_state&0x80)); - - if (!matched && test->_todo_wine) - { - failcount++; - todo_wine { - ok(matched, "%02d: %02x from %02x -> %02x " - "instead of %02x -> %02x\n", id, t->wVk, - ks1[t->wVk]&0x80, ks2[t->wVk]&0x80, t->before_state, - ~t->before_state&0x80); - } - } else { - ok(matched, "%02d: %02x from %02x -> %02x " - "instead of %02x -> %02x\n", id, t->wVk, - ks1[t->wVk]&0x80, ks2[t->wVk]&0x80, t->before_state, - ~t->before_state&0x80); - } - ks2[t->wVk] = ks1[t->wVk]; /* clear the match */ - t++; - } - for (i = 0; i < 256; i++) - if (ks2[i] != ks1[i] && test->_todo_wine) - { - failcount++; - todo_wine - ok(FALSE, "%02d: %02x from %02x -> %02x unexpected\n", id, i, ks1[i], ks2[i]); - } - else - ok(ks2[i] == ks1[i], "%02d: %02x from %02x -> %02x unexpected\n", - id, i, ks1[i], ks2[i]); - - while (expected->message && actual_cnt < sent_messages_cnt) - { - const struct message *actual = &sent_messages[actual_cnt]; - - if (expected->message == actual->message) - { - ok((expected->flags & hook) == (actual->flags & hook), - "%x/%x: the msg 0x%04x should have been sent by a hook\n", - test->wVk, test->dwFlags, expected->message); - - if (expected->flags & wparam) - { - if (expected->wParam != actual->wParam && test->_todo_wine) - { - failcount++; - todo_wine - ok(FALSE, "%x/%x: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n", - test->wVk, test->dwFlags, expected->message, expected->wParam, actual->wParam); - } - else - ok(expected->wParam == actual->wParam, - "%x/%x: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n", - test->wVk, test->dwFlags, expected->message, expected->wParam, actual->wParam); - } - if (expected->flags & lparam) - { - if (expected->lParam != actual->lParam && test->_todo_wine) - { - failcount++; - todo_wine - ok(FALSE, "%x/%x: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n", - test->wVk, test->dwFlags, expected->message, expected->lParam, actual->lParam); - } - else - ok(expected->lParam == actual->lParam, - "%x/%x: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n", - test->wVk, test->dwFlags, expected->message, expected->lParam, actual->lParam); - } - } - else if (expected->flags & optional) - { - expected++; - continue; - } - else if (test->_todo_wine) - { - failcount++; - todo_wine - ok(FALSE, - "%x/%x: the msg 0x%04x was expected, but got msg 0x%04x instead\n", - test->wVk, test->dwFlags, expected->message, actual->message); - } - else - ok(FALSE, - "%x/%x: the msg 0x%04x was expected, but got msg 0x%04x instead\n", - test->wVk, test->dwFlags, expected->message, actual->message); - - actual_cnt++; - expected++; - } - /* skip all optional trailing messages */ - while (expected->message && (expected->flags & optional)) - expected++; - - - if (expected->message || actual_cnt < sent_messages_cnt) - { - if (test->_todo_wine) - { - failcount++; - todo_wine - ok(FALSE, "%x/%x: the msg sequence is not complete: expected %04x - actual %04x\n", - test->wVk, test->dwFlags, expected->message, sent_messages[actual_cnt].message); - } - else - ok(FALSE, "%x/%x: the msg sequence is not complete: expected %04x - actual %04x\n", - test->wVk, test->dwFlags, expected->message, sent_messages[actual_cnt].message); - } - - if( test->_todo_wine && !failcount) /* succeeded yet marked todo */ - todo_wine - ok(TRUE, "%x/%x: marked \"todo_wine\" but succeeds\n", test->wVk, test->dwFlags); - - sent_messages_cnt = 0; -} - -/* WndProc2 checks that we get at least the messages specified */ -static LRESULT CALLBACK WndProc2(HWND hWnd, UINT Msg, WPARAM wParam, - LPARAM lParam) -{ - if (winetest_debug > 1) trace("MSG: %8x W:%8lx L:%8lx\n", Msg, wParam, lParam); - - if (Msg != WM_PAINT && - Msg != WM_NCPAINT && - Msg != WM_SYNCPAINT && - Msg != WM_ERASEBKGND && - Msg != WM_NCHITTEST && - Msg != WM_GETTEXT && - Msg != WM_GETICON && - Msg != WM_DEVICECHANGE) - { - sent_messages[sent_messages_cnt].message = Msg; - sent_messages[sent_messages_cnt].flags = 0; - sent_messages[sent_messages_cnt].wParam = wParam; - sent_messages[sent_messages_cnt++].lParam = HIWORD(lParam) & (KF_UP|KF_EXTENDED); - } - return DefWindowProc(hWnd, Msg, wParam, lParam); -} - -static LRESULT CALLBACK hook_proc(int code, WPARAM wparam, LPARAM lparam) -{ - KBDLLHOOKSTRUCT *hook_info = (KBDLLHOOKSTRUCT *)lparam; - - if (code == HC_ACTION) - { - sent_messages[sent_messages_cnt].message = wparam; - sent_messages[sent_messages_cnt].flags = hook; - sent_messages[sent_messages_cnt].wParam = hook_info->vkCode; - sent_messages[sent_messages_cnt++].lParam = hook_info->flags & (LLKHF_UP|LLKHF_EXTENDED); - -if(0) /* For some reason not stable on Wine */ -{ - if (wparam == WM_KEYDOWN || wparam == WM_SYSKEYDOWN) - ok(!(GetAsyncKeyState(hook_info->vkCode) & 0x8000), "key %x should be up\n", hook_info->vkCode); - else if (wparam == WM_KEYUP || wparam == WM_SYSKEYUP) - ok(GetAsyncKeyState(hook_info->vkCode) & 0x8000, "key %x should be down\n", hook_info->vkCode); -} - - if (winetest_debug > 1) - trace("Hook: w=%lx vk:%8x sc:%8x fl:%8x %lx\n", wparam, - hook_info->vkCode, hook_info->scanCode, hook_info->flags, hook_info->dwExtraInfo); - } - return CallNextHookEx( 0, code, wparam, lparam ); -} -static void test_Input_blackbox(void) -{ - TEST_INPUT i; - int ii; - BYTE ks1[256], ks2[256]; - LONG_PTR prevWndProc; - HWND window; - HHOOK hook; - - if (!pSendInput) - { - skip("SendInput is not available\n"); - return; - } - - window = CreateWindow("Static", NULL, WS_POPUP|WS_HSCROLL|WS_VSCROLL - |WS_VISIBLE, 0, 0, 200, 60, NULL, NULL, - NULL, NULL); - ok(window != NULL, "error: %d\n", (int) GetLastError()); - - hook = SetWindowsHookExA(WH_KEYBOARD_LL, hook_proc, GetModuleHandleA( NULL ), 0); - - /* must process all initial messages, otherwise X11DRV_KeymapNotify unsets - * key state set by SendInput(). */ - empty_message_queue(); - - prevWndProc = SetWindowLongPtr(window, GWLP_WNDPROC, (LONG_PTR) WndProc2); - ok(prevWndProc != 0 || (prevWndProc == 0 && GetLastError() == 0), - "error: %d\n", (int) GetLastError()); - - i.type = INPUT_KEYBOARD; - i.u.ki.time = 0; - i.u.ki.dwExtraInfo = 0; - - for (ii = 0; ii < sizeof(sendinput_test)/sizeof(struct sendinput_test_s)-1; - ii++) { - GetKeyboardState(ks1); - i.u.ki.wScan = ii+1 /* useful for debugging */; - i.u.ki.dwFlags = sendinput_test[ii].dwFlags; - i.u.ki.wVk = sendinput_test[ii].wVk; - pSendInput(1, (INPUT*)&i, sizeof(TEST_INPUT)); - empty_message_queue(); - GetKeyboardState(ks2); - compare_and_check(ii, ks1, ks2, &sendinput_test[ii]); - } - - empty_message_queue(); - DestroyWindow(window); - UnhookWindowsHookEx(hook); -} - -static void test_keynames(void) -{ - int i, len; - char buff[256]; - - for (i = 0; i < 512; i++) - { - strcpy(buff, "----"); - len = GetKeyNameTextA(i << 16, buff, sizeof(buff)); - ok(len || !buff[0], "%d: Buffer is not zeroed\n", i); - } -} - -static POINT pt_old, pt_new; -static BOOL clipped; -#define STEP 20 - -static LRESULT CALLBACK hook_proc1( int code, WPARAM wparam, LPARAM lparam ) -{ - MSLLHOOKSTRUCT *hook = (MSLLHOOKSTRUCT *)lparam; - POINT pt, pt1; - - if (code == HC_ACTION) - { - /* This is our new cursor position */ - pt_new = hook->pt; - /* Should return previous position */ - GetCursorPos(&pt); - ok(pt.x == pt_old.x && pt.y == pt_old.y, "GetCursorPos: (%d,%d)\n", pt.x, pt.y); - - /* Should set new position until hook chain is finished. */ - pt.x = pt_old.x + STEP; - pt.y = pt_old.y + STEP; - SetCursorPos(pt.x, pt.y); - GetCursorPos(&pt1); - if (clipped) - ok(pt1.x == pt_old.x && pt1.y == pt_old.y, "Wrong set pos: (%d,%d)\n", pt1.x, pt1.y); - else - ok(pt1.x == pt.x && pt1.y == pt.y, "Wrong set pos: (%d,%d)\n", pt1.x, pt1.y); - } - return CallNextHookEx( 0, code, wparam, lparam ); -} - -static LRESULT CALLBACK hook_proc2( int code, WPARAM wparam, LPARAM lparam ) -{ - MSLLHOOKSTRUCT *hook = (MSLLHOOKSTRUCT *)lparam; - POINT pt; - - if (code == HC_ACTION) - { - ok(hook->pt.x == pt_new.x && hook->pt.y == pt_new.y, - "Wrong hook coords: (%d %d) != (%d,%d)\n", hook->pt.x, hook->pt.y, pt_new.x, pt_new.y); - - /* Should match position set above */ - GetCursorPos(&pt); - if (clipped) - ok(pt.x == pt_old.x && pt.y == pt_old.y, "GetCursorPos: (%d,%d)\n", pt.x, pt.y); - else - ok(pt.x == pt_old.x +STEP && pt.y == pt_old.y +STEP, "GetCursorPos: (%d,%d)\n", pt.x, pt.y); - } - return CallNextHookEx( 0, code, wparam, lparam ); -} - -static void test_mouse_ll_hook(void) -{ - HWND hwnd; - HHOOK hook1, hook2; - POINT pt_org, pt; - RECT rc; - - GetCursorPos(&pt_org); - hwnd = CreateWindow("static", "Title", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 10, 10, 200, 200, NULL, NULL, NULL, NULL); - SetCursorPos(100, 100); - - hook2 = SetWindowsHookExA(WH_MOUSE_LL, hook_proc2, GetModuleHandleA(0), 0); - hook1 = SetWindowsHookExA(WH_MOUSE_LL, hook_proc1, GetModuleHandleA(0), 0); - - GetCursorPos(&pt_old); - mouse_event(MOUSEEVENTF_MOVE, -STEP, 0, 0, 0); - GetCursorPos(&pt_old); - ok(pt_old.x == pt_new.x && pt_old.y == pt_new.y, "Wrong new pos: (%d,%d)\n", pt_old.x, pt_old.y); - mouse_event(MOUSEEVENTF_MOVE, +STEP, 0, 0, 0); - GetCursorPos(&pt_old); - ok(pt_old.x == pt_new.x && pt_old.y == pt_new.y, "Wrong new pos: (%d,%d)\n", pt_old.x, pt_old.y); - mouse_event(MOUSEEVENTF_MOVE, 0, -STEP, 0, 0); - GetCursorPos(&pt_old); - ok(pt_old.x == pt_new.x && pt_old.y == pt_new.y, "Wrong new pos: (%d,%d)\n", pt_old.x, pt_old.y); - mouse_event(MOUSEEVENTF_MOVE, 0, +STEP, 0, 0); - GetCursorPos(&pt_old); - ok(pt_old.x == pt_new.x && pt_old.y == pt_new.y, "Wrong new pos: (%d,%d)\n", pt_old.x, pt_old.y); - - SetRect(&rc, 50, 50, 151, 151); - ClipCursor(&rc); - clipped = TRUE; - - SetCursorPos(40, 40); - GetCursorPos(&pt_old); - ok(pt_old.x == 50 && pt_old.y == 50, "Wrong new pos: (%d,%d)\n", pt_new.x, pt_new.y); - SetCursorPos(160, 160); - GetCursorPos(&pt_old); - ok(pt_old.x == 150 && pt_old.y == 150, "Wrong new pos: (%d,%d)\n", pt_new.x, pt_new.y); - mouse_event(MOUSEEVENTF_MOVE, +STEP, +STEP, 0, 0); - GetCursorPos(&pt_old); - ok(pt_old.x == 150 && pt_old.y == 150, "Wrong new pos: (%d,%d)\n", pt_new.x, pt_new.y); - - clipped = FALSE; - pt_new.x = pt_new.y = 150; - ClipCursor(NULL); - UnhookWindowsHookEx(hook1); - - /* Now check that mouse buttons do not change mouse position - if we don't have MOUSEEVENTF_MOVE flag specified. */ - - /* We reusing the same hook callback, so make it happy */ - pt_old.x = pt_new.x - STEP; - pt_old.y = pt_new.y - STEP; - mouse_event(MOUSEEVENTF_LEFTUP, 123, 456, 0, 0); - GetCursorPos(&pt); - ok(pt.x == pt_new.x && pt.y == pt_new.y, "Position changed: (%d,%d)\n", pt.x, pt.y); - mouse_event(MOUSEEVENTF_RIGHTUP, 456, 123, 0, 0); - GetCursorPos(&pt); - ok(pt.x == pt_new.x && pt.y == pt_new.y, "Position changed: (%d,%d)\n", pt.x, pt.y); - - mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE, 123, 456, 0, 0); - GetCursorPos(&pt); - ok(pt.x == pt_new.x && pt.y == pt_new.y, "Position changed: (%d,%d)\n", pt.x, pt.y); - mouse_event(MOUSEEVENTF_RIGHTUP | MOUSEEVENTF_ABSOLUTE, 456, 123, 0, 0); - GetCursorPos(&pt); - ok(pt.x == pt_new.x && pt.y == pt_new.y, "Position changed: (%d,%d)\n", pt.x, pt.y); - - UnhookWindowsHookEx(hook2); - DestroyWindow(hwnd); - SetCursorPos(pt_org.x, pt_org.y); -} - -static void test_GetMouseMovePointsEx(void) -{ -#define BUFLIM 64 -#define MYERROR 0xdeadbeef - int count, retval; - MOUSEMOVEPOINT in; - MOUSEMOVEPOINT out[200]; - POINT point; - - /* Get a valid content for the input struct */ - if(!GetCursorPos(&point)) { - skip("GetCursorPos() failed with error %u\n", GetLastError()); - return; - } - memset(&in, 0, sizeof(MOUSEMOVEPOINT)); - in.x = point.x; - in.y = point.y; - - /* test first parameter - * everything different than sizeof(MOUSEMOVEPOINT) - * is expected to fail with ERROR_INVALID_PARAMETER - */ - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(0, &in, out, BUFLIM, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT)-1, &in, out, BUFLIM, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT)+1, &in, out, BUFLIM, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - /* test second and third parameter - */ - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), NULL, out, BUFLIM, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_NOACCESS == GetLastError(), - "expected error ERROR_NOACCESS, got %u\n", GetLastError()); - - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, NULL, BUFLIM, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_NOACCESS == GetLastError(), - "expected error ERROR_NOACCESS, got %u\n", GetLastError()); - - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), NULL, NULL, BUFLIM, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_NOACCESS == GetLastError(), - "expected error ERROR_NOACCESS, got %u\n", GetLastError()); - - SetLastError(MYERROR); - count = 0; - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, NULL, count, GMMP_USE_DISPLAY_POINTS); - todo_wine { - ok(retval == count, "expected GetMouseMovePointsEx to succeed, got %d\n", retval); - ok(MYERROR == GetLastError(), - "expected error %d, got %u\n", MYERROR, GetLastError()); - } - - /* test fourth parameter - * a value higher than 64 is expected to fail with ERROR_INVALID_PARAMETER - */ - SetLastError(MYERROR); - count = -1; - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, out, count, GMMP_USE_DISPLAY_POINTS); - ok(retval == count, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - SetLastError(MYERROR); - count = 0; - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, out, count, GMMP_USE_DISPLAY_POINTS); - todo_wine { - ok(retval == count, "expected GetMouseMovePointsEx to succeed, got %d\n", retval); - ok(MYERROR == GetLastError(), - "expected error %d, got %u\n", MYERROR, GetLastError()); - } - - SetLastError(MYERROR); - count = BUFLIM; - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, out, count, GMMP_USE_DISPLAY_POINTS); - todo_wine { - ok((0 <= retval) && (retval <= count), "expected GetMouseMovePointsEx to succeed, got %d\n", retval); - ok(MYERROR == GetLastError(), - "expected error %d, got %u\n", MYERROR, GetLastError()); - } - - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, out, BUFLIM+1, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - /* it was not possible to force an error with the fifth parameter on win2k */ - - /* test combinations of wrong parameters to see which error wins */ - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT)-1, NULL, out, BUFLIM, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT)-1, &in, NULL, BUFLIM, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), NULL, out, BUFLIM+1, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - - SetLastError(MYERROR); - retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, NULL, BUFLIM+1, GMMP_USE_DISPLAY_POINTS); - ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval); - ok(ERROR_INVALID_PARAMETER == GetLastError(), - "expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); - -#undef BUFLIM -#undef MYERROR -} - -static void test_key_map(void) -{ - HKL kl = GetKeyboardLayout(0); - UINT kL, kR, s, sL; - - s = MapVirtualKeyEx(VK_SHIFT, MAPVK_VK_TO_VSC, kl); - ok(s != 0, "MapVirtualKeyEx(VK_SHIFT) should return non-zero\n"); - sL = MapVirtualKeyEx(VK_LSHIFT, MAPVK_VK_TO_VSC, kl); - ok(s == sL, "%x != %x\n", s, sL); - - kL = MapVirtualKeyEx(0x2a, MAPVK_VSC_TO_VK, kl); - ok(kL == VK_SHIFT, "Scan code -> vKey = %x (not VK_SHIFT)\n", kL); - kR = MapVirtualKeyEx(0x36, MAPVK_VSC_TO_VK, kl); - ok(kR == VK_SHIFT, "Scan code -> vKey = %x (not VK_SHIFT)\n", kR); - - kL = MapVirtualKeyEx(0x2a, MAPVK_VSC_TO_VK_EX, kl); - ok(kL == VK_LSHIFT, "Scan code -> vKey = %x (not VK_LSHIFT)\n", kL); - kR = MapVirtualKeyEx(0x36, MAPVK_VSC_TO_VK_EX, kl); - ok(kR == VK_RSHIFT, "Scan code -> vKey = %x (not VK_RSHIFT)\n", kR); -} - -START_TEST(input) -{ - init_function_pointers(); - - if (!pSendInput) - skip("SendInput is not available\n"); - else - test_Input_whitebox(); - - test_Input_blackbox(); - test_keynames(); - test_mouse_ll_hook(); - test_key_map(); - - if(pGetMouseMovePointsEx) - test_GetMouseMovePointsEx(); - else - skip("GetMouseMovePointsEx is not available\n"); -} diff --git a/rostests/winetests/user32/listbox.c b/rostests/winetests/user32/listbox.c deleted file mode 100644 index 5e650e089bc..00000000000 --- a/rostests/winetests/user32/listbox.c +++ /dev/null @@ -1,1535 +0,0 @@ -/* Unit test suite for list boxes. - * - * Copyright 2003 Ferenc Wagner - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "winnls.h" - -#include "wine/test.h" - -#ifdef VISIBLE -#define WAIT Sleep (1000) -#define REDRAW RedrawWindow (handle, NULL, 0, RDW_UPDATENOW) -#else -#define WAIT -#define REDRAW -#endif - -static const char * const strings[4] = { - "First added", - "Second added", - "Third added", - "Fourth added which is very long because at some time we only had a 256 byte character buffer and that was overflowing in one of those applications that had a common dialog file open box and tried to add a 300 characters long custom filter string which of course the code did not like and crashed. Just make sure this string is longer than 256 characters." -}; - -static const char BAD_EXTENSION[] = "*.txtbad"; - -static HWND -create_listbox (DWORD add_style, HWND parent) -{ - HWND handle; - int ctl_id=0; - if (parent) - ctl_id=1; - handle=CreateWindow ("LISTBOX", "TestList", - (LBS_STANDARD & ~LBS_SORT) | add_style, - 0, 0, 100, 100, - parent, (HMENU)ctl_id, NULL, 0); - - assert (handle); - SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strings[0]); - SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strings[1]); - SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strings[2]); - SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strings[3]); - -#ifdef VISIBLE - ShowWindow (handle, SW_SHOW); -#endif - REDRAW; - - return handle; -} - -struct listbox_prop { - DWORD add_style; -}; - -struct listbox_stat { - int selected, anchor, caret, selcount; -}; - -struct listbox_test { - struct listbox_prop prop; - struct listbox_stat init, init_todo; - struct listbox_stat click, click_todo; - struct listbox_stat step, step_todo; - struct listbox_stat sel, sel_todo; -}; - -static void -listbox_query (HWND handle, struct listbox_stat *results) -{ - results->selected = SendMessage (handle, LB_GETCURSEL, 0, 0); - results->anchor = SendMessage (handle, LB_GETANCHORINDEX, 0, 0); - results->caret = SendMessage (handle, LB_GETCARETINDEX, 0, 0); - results->selcount = SendMessage (handle, LB_GETSELCOUNT, 0, 0); -} - -static void -buttonpress (HWND handle, WORD x, WORD y) -{ - LPARAM lp=x+(y<<16); - - WAIT; - SendMessage (handle, WM_LBUTTONDOWN, (WPARAM) MK_LBUTTON, lp); - SendMessage (handle, WM_LBUTTONUP , (WPARAM) 0 , lp); - REDRAW; -} - -static void -keypress (HWND handle, WPARAM keycode, BYTE scancode, BOOL extended) -{ - LPARAM lp=1+(scancode<<16)+(extended?KEYEVENTF_EXTENDEDKEY:0); - - WAIT; - SendMessage (handle, WM_KEYDOWN, keycode, lp); - SendMessage (handle, WM_KEYUP , keycode, lp | 0xc000000); - REDRAW; -} - -#define listbox_field_ok(t, s, f, got) \ - ok (t.s.f==got.f, "style %#x, step " #s ", field " #f \ - ": expected %d, got %d\n", (unsigned int)t.prop.add_style, \ - t.s.f, got.f) - -#define listbox_todo_field_ok(t, s, f, got) \ - if (t.s##_todo.f) todo_wine { listbox_field_ok(t, s, f, got); } \ - else listbox_field_ok(t, s, f, got) - -#define listbox_ok(t, s, got) \ - listbox_todo_field_ok(t, s, selected, got); \ - listbox_todo_field_ok(t, s, anchor, got); \ - listbox_todo_field_ok(t, s, caret, got); \ - listbox_todo_field_ok(t, s, selcount, got) - -static void -check (const struct listbox_test test) -{ - struct listbox_stat answer; - HWND hLB=create_listbox (test.prop.add_style, 0); - RECT second_item; - int i; - int res; - - listbox_query (hLB, &answer); - listbox_ok (test, init, answer); - - SendMessage (hLB, LB_GETITEMRECT, (WPARAM) 1, (LPARAM) &second_item); - buttonpress(hLB, (WORD)second_item.left, (WORD)second_item.top); - - listbox_query (hLB, &answer); - listbox_ok (test, click, answer); - - keypress (hLB, VK_DOWN, 0x50, TRUE); - - listbox_query (hLB, &answer); - listbox_ok (test, step, answer); - - DestroyWindow (hLB); - hLB=create_listbox (test.prop.add_style, 0); - - SendMessage (hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(1, 2)); - listbox_query (hLB, &answer); - listbox_ok (test, sel, answer); - - for (i=0;i<4;i++) { - DWORD size = SendMessage (hLB, LB_GETTEXTLEN, i, 0); - CHAR *txt; - WCHAR *txtw; - int resA, resW; - - txt = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, size+1); - resA=SendMessageA(hLB, LB_GETTEXT, i, (LPARAM)txt); - ok(!strcmp (txt, strings[i]), "returned string for item %d does not match %s vs %s\n", i, txt, strings[i]); - - txtw = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, 2*size+2); - resW=SendMessageW(hLB, LB_GETTEXT, i, (LPARAM)txtw); - if (resA != resW) { - trace("SendMessageW(LB_GETTEXT) not supported on this platform (resA=%d resW=%d), skipping...\n", - resA, resW); - } else { - WideCharToMultiByte( CP_ACP, 0, txtw, -1, txt, size, NULL, NULL ); - ok(!strcmp (txt, strings[i]), "returned string for item %d does not match %s vs %s\n", i, txt, strings[i]); - } - - HeapFree (GetProcessHeap(), 0, txtw); - HeapFree (GetProcessHeap(), 0, txt); - } - - /* Confirm the count of items, and that an invalid delete does not remove anything */ - res = SendMessage (hLB, LB_GETCOUNT, 0, 0); - ok((res==4), "Expected 4 items, got %d\n", res); - res = SendMessage (hLB, LB_DELETESTRING, -1, 0); - ok((res==LB_ERR), "Expected LB_ERR items, got %d\n", res); - res = SendMessage (hLB, LB_DELETESTRING, 4, 0); - ok((res==LB_ERR), "Expected LB_ERR items, got %d\n", res); - res = SendMessage (hLB, LB_GETCOUNT, 0, 0); - ok((res==4), "Expected 4 items, got %d\n", res); - - WAIT; - DestroyWindow (hLB); -} - -static void check_item_height(void) -{ - HWND hLB; - HDC hdc; - HFONT font; - TEXTMETRIC tm; - INT itemHeight; - - hLB = create_listbox (0, 0); - ok ((hdc = GetDCEx( hLB, 0, DCX_CACHE )) != 0, "Can't get hdc\n"); - ok ((font = GetCurrentObject(hdc, OBJ_FONT)) != 0, "Can't get the current font\n"); - ok (GetTextMetrics( hdc, &tm ), "Can't read font metrics\n"); - ReleaseDC( hLB, hdc); - - ok (SendMessage(hLB, WM_SETFONT, (WPARAM)font, 0) == 0, "Can't set font\n"); - - itemHeight = SendMessage(hLB, LB_GETITEMHEIGHT, 0, 0); - ok (itemHeight == tm.tmHeight, "Item height wrong, got %d, expecting %d\n", itemHeight, tm.tmHeight); - - DestroyWindow (hLB); - - hLB = CreateWindow ("LISTBOX", "TestList", LBS_OWNERDRAWVARIABLE, - 0, 0, 100, 100, NULL, NULL, NULL, 0); - itemHeight = SendMessage(hLB, LB_GETITEMHEIGHT, 0, 0); - ok(itemHeight == tm.tmHeight, "itemHeight %d\n", itemHeight); - itemHeight = SendMessage(hLB, LB_GETITEMHEIGHT, 5, 0); - ok(itemHeight == tm.tmHeight, "itemHeight %d\n", itemHeight); - itemHeight = SendMessage(hLB, LB_GETITEMHEIGHT, -5, 0); - ok(itemHeight == tm.tmHeight, "itemHeight %d\n", itemHeight); - DestroyWindow (hLB); -} - -static LRESULT WINAPI main_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_DRAWITEM: - { - RECT rc_item, rc_client, rc_clip; - DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lparam; - - trace("%p WM_DRAWITEM %08lx %08lx\n", hwnd, wparam, lparam); - - ok(wparam == dis->CtlID, "got wParam=%08lx instead of %08x\n", - wparam, dis->CtlID); - ok(dis->CtlType == ODT_LISTBOX, "wrong CtlType %04x\n", dis->CtlType); - - GetClientRect(dis->hwndItem, &rc_client); - trace("hwndItem %p client rect (%d,%d-%d,%d)\n", dis->hwndItem, - rc_client.left, rc_client.top, rc_client.right, rc_client.bottom); - GetClipBox(dis->hDC, &rc_clip); - trace("clip rect (%d,%d-%d,%d)\n", rc_clip.left, rc_clip.top, rc_clip.right, rc_clip.bottom); - ok(EqualRect(&rc_client, &rc_clip), "client rect of the listbox should be equal to the clip box\n"); - - trace("rcItem (%d,%d-%d,%d)\n", dis->rcItem.left, dis->rcItem.top, - dis->rcItem.right, dis->rcItem.bottom); - SendMessage(dis->hwndItem, LB_GETITEMRECT, dis->itemID, (LPARAM)&rc_item); - trace("item rect (%d,%d-%d,%d)\n", rc_item.left, rc_item.top, rc_item.right, rc_item.bottom); - ok(EqualRect(&dis->rcItem, &rc_item), "item rects are not equal\n"); - - break; - } - - default: - break; - } - - return DefWindowProc(hwnd, msg, wparam, lparam); -} - -static void test_ownerdraw(void) -{ - WNDCLASS cls; - HWND parent, hLB; - INT ret; - RECT rc; - - cls.style = 0; - cls.lpfnWndProc = main_window_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandle(0); - cls.hIcon = 0; - cls.hCursor = LoadCursor(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "main_window_class"; - assert(RegisterClass(&cls)); - - parent = CreateWindowEx(0, "main_window_class", NULL, - WS_POPUP | WS_VISIBLE, - 100, 100, 400, 400, - GetDesktopWindow(), 0, - GetModuleHandle(0), NULL); - assert(parent); - - hLB = create_listbox(LBS_OWNERDRAWFIXED | WS_CHILD | WS_VISIBLE, parent); - assert(hLB); - - UpdateWindow(hLB); - - /* make height short enough */ - SendMessage(hLB, LB_GETITEMRECT, 0, (LPARAM)&rc); - SetWindowPos(hLB, 0, 0, 0, 100, rc.bottom - rc.top + 1, - SWP_NOZORDER | SWP_NOMOVE); - - /* make 0 item invisible */ - SendMessage(hLB, LB_SETTOPINDEX, 1, 0); - ret = SendMessage(hLB, LB_GETTOPINDEX, 0, 0); - ok(ret == 1, "wrong top index %d\n", ret); - - SendMessage(hLB, LB_GETITEMRECT, 0, (LPARAM)&rc); - trace("item 0 rect (%d,%d-%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); - ok(!IsRectEmpty(&rc), "empty item rect\n"); - ok(rc.top < 0, "rc.top is not negative (%d)\n", rc.top); - - DestroyWindow(hLB); - DestroyWindow(parent); -} - -#define listbox_test_query(exp, got) \ - ok(exp.selected == got.selected, "expected selected %d, got %d\n", exp.selected, got.selected); \ - ok(exp.anchor == got.anchor, "expected anchor %d, got %d\n", exp.anchor, got.anchor); \ - ok(exp.caret == got.caret, "expected caret %d, got %d\n", exp.caret, got.caret); \ - ok(exp.selcount == got.selcount, "expected selcount %d, got %d\n", exp.selcount, got.selcount); - -static void test_selection(void) -{ - static const struct listbox_stat test_nosel = { 0, LB_ERR, 0, 0 }; - static const struct listbox_stat test_1 = { 0, LB_ERR, 0, 2 }; - static const struct listbox_stat test_2 = { 0, LB_ERR, 0, 3 }; - static const struct listbox_stat test_3 = { 0, LB_ERR, 0, 4 }; - HWND hLB; - struct listbox_stat answer; - INT ret; - - trace("testing LB_SELITEMRANGE\n"); - - hLB = create_listbox(LBS_EXTENDEDSEL, 0); - assert(hLB); - - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - ret = SendMessage(hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(1, 2)); - ok(ret == LB_OKAY, "LB_SELITEMRANGE returned %d instead of LB_OKAY\n", ret); - listbox_query(hLB, &answer); - listbox_test_query(test_1, answer); - - SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - ret = SendMessage(hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(0, 4)); - ok(ret == LB_OKAY, "LB_SELITEMRANGE returned %d instead of LB_OKAY\n", ret); - listbox_query(hLB, &answer); - listbox_test_query(test_3, answer); - - SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - ret = SendMessage(hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(-5, 5)); - ok(ret == LB_OKAY, "LB_SELITEMRANGE returned %d instead of LB_OKAY\n", ret); - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - ret = SendMessage(hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(2, 10)); - ok(ret == LB_OKAY, "LB_SELITEMRANGE returned %d instead of LB_OKAY\n", ret); - listbox_query(hLB, &answer); - listbox_test_query(test_1, answer); - - SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - ret = SendMessage(hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(4, 10)); - ok(ret == LB_OKAY, "LB_SELITEMRANGE returned %d instead of LB_OKAY\n", ret); - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - ret = SendMessage(hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(10, 1)); - ok(ret == LB_OKAY, "LB_SELITEMRANGE returned %d instead of LB_OKAY\n", ret); - listbox_query(hLB, &answer); - listbox_test_query(test_2, answer); - - SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); - listbox_query(hLB, &answer); - listbox_test_query(test_nosel, answer); - - ret = SendMessage(hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(1, -1)); - ok(ret == LB_OKAY, "LB_SELITEMRANGE returned %d instead of LB_OKAY\n", ret); - listbox_query(hLB, &answer); - listbox_test_query(test_2, answer); - - DestroyWindow(hLB); -} - -static void test_listbox_height(void) -{ - HWND hList; - int r, id; - - hList = CreateWindow( "ListBox", "list test", 0, - 1, 1, 600, 100, NULL, NULL, NULL, NULL ); - ok( hList != NULL, "failed to create listbox\n"); - - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi"); - ok( id == 0, "item id wrong\n"); - - r = SendMessage( hList, LB_SETITEMHEIGHT, 0, MAKELPARAM( 20, 0 )); - ok( r == 0, "send message failed\n"); - - r = SendMessage(hList, LB_GETITEMHEIGHT, 0, 0 ); - ok( r == 20, "height wrong\n"); - - r = SendMessage( hList, LB_SETITEMHEIGHT, 0, MAKELPARAM( 0, 30 )); - ok( r == -1, "send message failed\n"); - - r = SendMessage(hList, LB_GETITEMHEIGHT, 0, 0 ); - ok( r == 20, "height wrong\n"); - - r = SendMessage( hList, LB_SETITEMHEIGHT, 0, MAKELPARAM( 0x100, 0 )); - ok( r == -1, "send message failed\n"); - - r = SendMessage(hList, LB_GETITEMHEIGHT, 0, 0 ); - ok( r == 20, "height wrong\n"); - - r = SendMessage( hList, LB_SETITEMHEIGHT, 0, MAKELPARAM( 0xff, 0 )); - ok( r == 0, "send message failed\n"); - - r = SendMessage(hList, LB_GETITEMHEIGHT, 0, 0 ); - ok( r == 0xff, "height wrong\n"); - - DestroyWindow( hList ); -} - -static void test_itemfrompoint(void) -{ - /* WS_POPUP is required in order to have a more accurate size calculation ( - without caption). LBS_NOINTEGRALHEIGHT is required in order to test - behavior of partially-displayed item. - */ - HWND hList = CreateWindow( "ListBox", "list test", - WS_VISIBLE|WS_POPUP|LBS_NOINTEGRALHEIGHT, - 1, 1, 600, 100, NULL, NULL, NULL, NULL ); - LONG r, id; - RECT rc; - - /* For an empty listbox win2k returns 0x1ffff, win98 returns 0x10000 */ - r = SendMessage(hList, LB_ITEMFROMPOINT, 0, MAKELPARAM( /* x */ 30, /* y */ 30 )); - ok( r == 0x1ffff || r == 0x10000, "ret %x\n", r ); - - r = SendMessage(hList, LB_ITEMFROMPOINT, 0, MAKELPARAM( 700, 30 )); - ok( r == 0x1ffff || r == 0x10000, "ret %x\n", r ); - - r = SendMessage(hList, LB_ITEMFROMPOINT, 0, MAKELPARAM( 30, 300 )); - ok( r == 0x1ffff || r == 0x10000, "ret %x\n", r ); - - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi"); - ok( id == 0, "item id wrong\n"); - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi1"); - ok( id == 1, "item id wrong\n"); - - r = SendMessage(hList, LB_ITEMFROMPOINT, 0, MAKELPARAM( /* x */ 30, /* y */ 30 )); - ok( r == 0x1, "ret %x\n", r ); - - r = SendMessage(hList, LB_ITEMFROMPOINT, 0, MAKELPARAM( /* x */ 30, /* y */ 601 )); - ok( r == 0x10001, "ret %x\n", r ); - - /* Resize control so that below assertions about sizes are valid */ - r = SendMessage( hList, LB_GETITEMRECT, 0, (LPARAM)&rc); - ok( r == 1, "ret %x\n", r); - r = MoveWindow(hList, 1, 1, 600, (rc.bottom - rc.top + 1) * 9 / 2, TRUE); - ok( r != 0, "ret %x\n", r); - - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi2"); - ok( id == 2, "item id wrong\n"); - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi3"); - ok( id == 3, "item id wrong\n"); - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi4"); - ok( id == 4, "item id wrong\n"); - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi5"); - ok( id == 5, "item id wrong\n"); - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi6"); - ok( id == 6, "item id wrong\n"); - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi7"); - ok( id == 7, "item id wrong\n"); - - /* Set the listbox up so that id 1 is at the top, this leaves 5 - partially visible at the bottom and 6, 7 are invisible */ - - SendMessage( hList, LB_SETTOPINDEX, 1, 0); - r = SendMessage( hList, LB_GETTOPINDEX, 0, 0); - ok( r == 1, "top %d\n", r); - - r = SendMessage( hList, LB_GETITEMRECT, 5, (LPARAM)&rc); - ok( r == 1, "ret %x\n", r); - r = SendMessage( hList, LB_GETITEMRECT, 6, (LPARAM)&rc); - ok( r == 0, "ret %x\n", r); - - r = SendMessage( hList, LB_ITEMFROMPOINT, 0, MAKELPARAM(/* x */ 10, /* y */ 10) ); - ok( r == 1, "ret %x\n", r); - - r = SendMessage( hList, LB_ITEMFROMPOINT, 0, MAKELPARAM(1000, 10) ); - ok( r == 0x10001, "ret %x\n", r ); - - r = SendMessage( hList, LB_ITEMFROMPOINT, 0, MAKELPARAM(10, -10) ); - ok( r == 0x10001, "ret %x\n", r ); - - r = SendMessage( hList, LB_ITEMFROMPOINT, 0, MAKELPARAM(10, 100) ); - ok( r == 0x10005, "item %x\n", r ); - - r = SendMessage( hList, LB_ITEMFROMPOINT, 0, MAKELPARAM(10, 200) ); - ok( r == 0x10005, "item %x\n", r ); - - DestroyWindow( hList ); -} - -static void test_listbox_item_data(void) -{ - HWND hList; - int r, id; - - hList = CreateWindow( "ListBox", "list test", 0, - 1, 1, 600, 100, NULL, NULL, NULL, NULL ); - ok( hList != NULL, "failed to create listbox\n"); - - id = SendMessage( hList, LB_ADDSTRING, 0, (LPARAM) "hi"); - ok( id == 0, "item id wrong\n"); - - r = SendMessage( hList, LB_SETITEMDATA, 0, MAKELPARAM( 20, 0 )); - ok(r == TRUE, "LB_SETITEMDATA returned %d instead of TRUE\n", r); - - r = SendMessage( hList, LB_GETITEMDATA, 0, 0); - ok( r == 20, "get item data failed\n"); - - DestroyWindow( hList ); -} - -static void test_listbox_LB_DIR() -{ - HWND hList; - int res, itemCount; - int itemCount_justFiles; - int itemCount_justDrives; - int itemCount_allFiles; - int i; - char pathBuffer[MAX_PATH]; - char * p; - char driveletter; - HANDLE file; - - file = CreateFileA( "wtest1.tmp.c", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL ); - ok(file != INVALID_HANDLE_VALUE, "Error creating the test file: %d\n", GetLastError()); - CloseHandle( file ); - - /* NOTE: for this test to succeed, there must be no subdirectories - under the current directory. In addition, there must be at least - one file that fits the wildcard w*.c . Normally, the test - directory itself satisfies both conditions. - */ - hList = CreateWindow( "ListBox", "list test", WS_VISIBLE|WS_POPUP, - 1, 1, 600, 100, NULL, NULL, NULL, NULL ); - assert(hList); - - /* Test for standard usage */ - - /* This should list all the files in the test directory. */ - strcpy(pathBuffer, "*"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, 0, (LPARAM)pathBuffer); - ok (res >= 0, "SendMessage(LB_DIR, 0, *) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount > 0, "SendMessage(LB_DIR) did NOT fill the listbox!\n"); - itemCount_allFiles = itemCount; - ok(res + 1 == itemCount, - "SendMessage(LB_DIR, 0, *) returned incorrect index (expected %d got %d)!\n", - itemCount - 1, res); - - /* This tests behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, 0, (LPARAM)pathBuffer); - ok (res == -1, "SendMessage(LB_DIR, 0, %s) returned %d, expected -1\n", BAD_EXTENSION, res); - - /* There should be NO content in the listbox */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == 0, "SendMessage(LB_DIR) DID fill the listbox!\n"); - - - /* This should list all the w*.c files in the test directory - * As of this writing, this includes win.c, winstation.c, wsprintf.c - */ - strcpy(pathBuffer, "w*.c"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, 0, (LPARAM)pathBuffer); - ok (res >= 0, "SendMessage(LB_DIR, 0, w*.c) failed - 0x%08x\n", GetLastError()); - - /* Path specification does NOT converted to uppercase */ - ok (!strcmp(pathBuffer, "w*.c"), - "expected no change to pathBuffer, got %s\n", pathBuffer); - - /* There should be some content in the listbox */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount > 0, "SendMessage(LB_DIR) did NOT fill the listbox!\n"); - itemCount_justFiles = itemCount; - ok(res + 1 == itemCount, - "SendMessage(LB_DIR, 0, w*.c) returned incorrect index (expected %d got %d)!\n", - itemCount - 1, res); - - /* Every single item in the control should start with a w and end in .c */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - SendMessage(hList, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - ok(((pathBuffer[0] == 'w' || pathBuffer[0] == 'W') && - (*(p-1) == 'c' || *(p-1) == 'C') && - (*(p-2) == '.')), "Element %d (%s) does not fit requested w*.c\n", i, pathBuffer); - } - - /* Test DDL_DIRECTORY */ - strcpy(pathBuffer, "*"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY, (LPARAM)pathBuffer); - ok (res > 0, "SendMessage(LB_DIR, DDL_DIRECTORY, *) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. - * All files plus "[..]" - */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_allFiles + 1, - "SendMessage(LB_DIR, DDL_DIRECTORY, *) filled with %d entries, expected %d\n", - itemCount, itemCount_allFiles + 1); - ok(res + 1 == itemCount, - "SendMessage(LB_DIR, DDL_DIRECTORY, *) returned incorrect index (expected %d got %d)!\n", - itemCount - 1, res); - - /* This tests behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY, (LPARAM)pathBuffer); - ok (res == -1, "SendMessage(LB_DIR, DDL_DIRECTORY, %s) returned %d, expected -1\n", BAD_EXTENSION, res); - - /* There should be NO content in the listbox */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == 0, "SendMessage(LB_DIR) DID fill the listbox!\n"); - - - /* Test DDL_DIRECTORY */ - strcpy(pathBuffer, "w*.c"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY, (LPARAM)pathBuffer); - ok (res >= 0, "SendMessage(LB_DIR, DDL_DIRECTORY, w*.c) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. Since the parent directory does not - * fit w*.c, there should be exactly the same number of items as without DDL_DIRECTORY - */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justFiles, - "SendMessage(LB_DIR, DDL_DIRECTORY, w*.c) filled with %d entries, expected %d\n", - itemCount, itemCount_justFiles); - ok(res + 1 == itemCount, - "SendMessage(LB_DIR, DDL_DIRECTORY, w*.c) returned incorrect index (expected %d got %d)!\n", - itemCount - 1, res); - - /* Every single item in the control should start with a w and end in .c. */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - SendMessage(hList, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - ok( - ((pathBuffer[0] == 'w' || pathBuffer[0] == 'W') && - (*(p-1) == 'c' || *(p-1) == 'C') && - (*(p-2) == '.')), "Element %d (%s) does not fit requested w*.c\n", i, pathBuffer); - } - - - /* Test DDL_DRIVES|DDL_EXCLUSIVE */ - strcpy(pathBuffer, "*"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DRIVES|DDL_EXCLUSIVE, (LPARAM)pathBuffer); - ok (res > 0, "SendMessage(LB_DIR, DDL_DRIVES|DDL_EXCLUSIVE, *) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. In particular, there should - * be at least one element before, since the string "[-c-]" should - * have been added. Depending on the user setting, more drives might have - * been added. - */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount >= 1, - "SendMessage(LB_DIR, DDL_DRIVES|DDL_EXCLUSIVE, *) filled with %d entries, expected at least %d\n", - itemCount, 1); - itemCount_justDrives = itemCount; - ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DRIVES|DDL_EXCLUSIVE, *) returned incorrect index!\n"); - - /* Every single item in the control should fit the format [-c-] */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(hList, LB_GETTEXT, i, (LPARAM)pathBuffer); - ok( strlen(pathBuffer) == 5, "Length of drive string is not 5\n" ); - ok( sscanf(pathBuffer, "[-%c-]", &driveletter) == 1, "Element %d (%s) does not fit [-X-]\n", i, pathBuffer); - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - if (!(driveletter >= 'a' && driveletter <= 'z')) { - /* Correct after invalid entry is found */ - trace("removing count of invalid entry %s\n", pathBuffer); - itemCount_justDrives--; - } - } - - /* This tests behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DRIVES|DDL_EXCLUSIVE, (LPARAM)pathBuffer); - ok (res == itemCount_justDrives -1, "SendMessage(LB_DIR, DDL_DRIVES|DDL_EXCLUSIVE, %s) returned %d, expected %d\n", - BAD_EXTENSION, res, itemCount_justDrives -1); - - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives, "SendMessage(LB_DIR) returned %d expected %d\n", - itemCount, itemCount_justDrives); - - trace("Files with w*.c: %d Mapped drives: %d Directories: 1\n", - itemCount_justFiles, itemCount_justDrives); - - /* Test DDL_DRIVES. */ - strcpy(pathBuffer, "*"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DRIVES, (LPARAM)pathBuffer); - ok (res > 0, "SendMessage(LB_DIR, DDL_DRIVES, *) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. In particular, there should - * be at least one element before, since the string "[-c-]" should - * have been added. Depending on the user setting, more drives might have - * been added. - */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives + itemCount_allFiles, - "SendMessage(LB_DIR, DDL_DRIVES, w*.c) filled with %d entries, expected %d\n", - itemCount, itemCount_justDrives + itemCount_allFiles); - ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DRIVES, w*.c) returned incorrect index!\n"); - - /* This tests behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DRIVES, (LPARAM)pathBuffer); - ok (res == itemCount_justDrives -1, "SendMessage(LB_DIR, DDL_DRIVES, %s) returned %d, expected %d\n", - BAD_EXTENSION, res, itemCount_justDrives -1); - - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == res + 1, "SendMessage(LB_DIR) returned %d expected %d\n", itemCount, res + 1); - - - /* Test DDL_DRIVES. */ - strcpy(pathBuffer, "w*.c"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DRIVES, (LPARAM)pathBuffer); - ok (res > 0, "SendMessage(LB_DIR, DDL_DRIVES, w*.c) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. In particular, there should - * be at least one element before, since the string "[-c-]" should - * have been added. Depending on the user setting, more drives might have - * been added. - */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives + itemCount_justFiles, - "SendMessage(LB_DIR, DDL_DRIVES, w*.c) filled with %d entries, expected %d\n", - itemCount, itemCount_justDrives + itemCount_justFiles); - ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DRIVES, w*.c) returned incorrect index!\n"); - - /* Every single item in the control should fit the format [-c-], or w*.c */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(hList, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - if (sscanf(pathBuffer, "[-%c-]", &driveletter) == 1) { - ok( strlen(pathBuffer) == 5, "Length of drive string is not 5\n" ); - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - } else { - ok( - ((pathBuffer[0] == 'w' || pathBuffer[0] == 'W') && - (*(p-1) == 'c' || *(p-1) == 'C') && - (*(p-2) == '.')), "Element %d (%s) does not fit requested w*.c\n", i, pathBuffer); - } - } - - - /* Test DDL_DIRECTORY|DDL_DRIVES. This does *not* imply DDL_EXCLUSIVE */ - strcpy(pathBuffer, "*"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_DRIVES, (LPARAM)pathBuffer); - ok (res > 0, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES, *) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. In particular, there should - * be exactly the number of plain files, plus the number of mapped drives. - */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_allFiles + itemCount_justDrives + 1, - "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES) filled with %d entries, expected %d\n", - itemCount, itemCount_allFiles + itemCount_justDrives + 1); - ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES, w*.c) returned incorrect index!\n"); - - /* Every single item in the control should start with a w and end in .c, - * except for the "[..]" string, which should appear exactly as it is, - * and the mapped drives in the format "[-X-]". - */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(hList, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - if (sscanf(pathBuffer, "[-%c-]", &driveletter) == 1) { - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - } - } - - /* This tests behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_DRIVES, (LPARAM)pathBuffer); - ok (res == itemCount_justDrives -1, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES, %s) returned %d, expected %d\n", - BAD_EXTENSION, res, itemCount_justDrives -1); - - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == res + 1, "SendMessage(LB_DIR) returned %d expected %d\n", itemCount, res + 1); - - - - /* Test DDL_DIRECTORY|DDL_DRIVES. */ - strcpy(pathBuffer, "w*.c"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_DRIVES, (LPARAM)pathBuffer); - ok (res > 0, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES, w*.c) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. In particular, there should - * be exactly the number of plain files, plus the number of mapped drives. - */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justFiles + itemCount_justDrives, - "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES) filled with %d entries, expected %d\n", - itemCount, itemCount_justFiles + itemCount_justDrives); - ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES, w*.c) returned incorrect index!\n"); - - /* Every single item in the control should start with a w and end in .c, - * except the mapped drives in the format "[-X-]". The "[..]" directory - * should not appear. - */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(hList, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - if (sscanf(pathBuffer, "[-%c-]", &driveletter) == 1) { - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - } else { - ok( - ((pathBuffer[0] == 'w' || pathBuffer[0] == 'W') && - (*(p-1) == 'c' || *(p-1) == 'C') && - (*(p-2) == '.')), "Element %d (%s) does not fit requested w*.c\n", i, pathBuffer); - } - } - - /* Test DDL_DIRECTORY|DDL_EXCLUSIVE. */ - strcpy(pathBuffer, "*"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, (LPARAM)pathBuffer); - ok (res == 0, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, *) failed - 0x%08x\n", GetLastError()); - - /* There should be exactly one element: "[..]" */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == 1, - "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE) filled with %d entries, expected %d\n", - itemCount, 1); - ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, *) returned incorrect index!\n"); - - memset(pathBuffer, 0, MAX_PATH); - SendMessage(hList, LB_GETTEXT, 0, (LPARAM)pathBuffer); - ok( !strcmp(pathBuffer, "[..]"), "First (and only) element is not [..]\n"); - - /* This tests behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, (LPARAM)pathBuffer); - ok (res == -1, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, %s) returned %d, expected %d\n", - BAD_EXTENSION, res, -1); - - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == res + 1, "SendMessage(LB_DIR) returned %d expected %d\n", itemCount, res + 1); - - - /* Test DDL_DIRECTORY|DDL_EXCLUSIVE. */ - strcpy(pathBuffer, "w*.c"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, (LPARAM)pathBuffer); - ok (res == LB_ERR, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, w*.c) returned %d expected %d\n", res, LB_ERR); - - /* There should be no elements, since "[..]" does not fit w*.c */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == 0, - "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE) filled with %d entries, expected %d\n", - itemCount, 0); - - /* Test DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE. */ - strcpy(pathBuffer, "*"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, (LPARAM)pathBuffer); - ok (res > 0, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, w*.c,) failed - 0x%08x\n", GetLastError()); - - /* There should be no plain files on the listbox */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives + 1, - "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE) filled with %d entries, expected %d\n", - itemCount, itemCount_justDrives + 1); - ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, w*.c) returned incorrect index!\n"); - - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(hList, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - if (sscanf(pathBuffer, "[-%c-]", &driveletter) == 1) { - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - } else { - ok( !strcmp(pathBuffer, "[..]"), "Element %d (%s) does not fit expected [..]\n", i, pathBuffer); - } - } - - /* This tests behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, (LPARAM)pathBuffer); - ok (res == itemCount_justDrives -1, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, %s) returned %d, expected %d\n", - BAD_EXTENSION, res, itemCount_justDrives -1); - - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == res + 1, "SendMessage(LB_DIR) returned %d expected %d\n", itemCount, res + 1); - - /* Test DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE. */ - strcpy(pathBuffer, "w*.c"); - SendMessage(hList, LB_RESETCONTENT, 0, 0); - res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, (LPARAM)pathBuffer); - ok (res > 0, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, w*.c,) failed - 0x%08x\n", GetLastError()); - - /* There should be no plain files on the listbox, and no [..], since it does not fit w*.c */ - itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives, - "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE) filled with %d entries, expected %d\n", - itemCount, itemCount_justDrives); - ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, w*.c) returned incorrect index!\n"); - - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(hList, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - ok (sscanf(pathBuffer, "[-%c-]", &driveletter) == 1, "Element %d (%s) does not fit [-X-]\n", i, pathBuffer); - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - } - DestroyWindow(hList); - - DeleteFileA( "wtest1.tmp.c" ); -} - -HWND g_listBox; -HWND g_label; - -#define ID_TEST_LABEL 1001 -#define ID_TEST_LISTBOX 1002 - -static BOOL on_listbox_container_create (HWND hwnd, LPCREATESTRUCT lpcs) -{ - g_label = CreateWindow( - "Static", - "Contents of static control before DlgDirList.", - WS_CHILD | WS_VISIBLE, - 10, 10, 512, 32, - hwnd, (HMENU)ID_TEST_LABEL, NULL, 0); - if (!g_label) return FALSE; - g_listBox = CreateWindow( - "ListBox", - "DlgDirList test", - WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | WS_VSCROLL, - 10, 60, 256, 256, - hwnd, (HMENU)ID_TEST_LISTBOX, NULL, 0); - if (!g_listBox) return FALSE; - - return TRUE; -} - -static LRESULT CALLBACK listbox_container_window_procA ( - HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) -{ - LRESULT result = 0; - - switch (uiMsg) { - case WM_DESTROY: - PostQuitMessage(0); - break; - case WM_CREATE: - result = on_listbox_container_create(hwnd, (LPCREATESTRUCTA) lParam) - ? 0 : (LRESULT)-1; - break; - default: - result = DefWindowProcA (hwnd, uiMsg, wParam, lParam); - break; - } - return result; -} - -static BOOL RegisterListboxWindowClass(HINSTANCE hInst) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = hInst; - cls.hIcon = NULL; - cls.hCursor = LoadCursorA (NULL, IDC_ARROW); - cls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); - cls.lpszMenuName = NULL; - cls.lpfnWndProc = listbox_container_window_procA; - cls.lpszClassName = "ListboxContainerClass"; - if (!RegisterClassA (&cls)) return FALSE; - - return TRUE; -} - -static void test_listbox_dlgdir(void) -{ - HINSTANCE hInst; - HWND hWnd; - int res, itemCount; - int itemCount_justFiles; - int itemCount_justDrives; - int i; - char pathBuffer[MAX_PATH]; - char itemBuffer[MAX_PATH]; - char tempBuffer[MAX_PATH]; - char * p; - char driveletter; - HANDLE file; - - file = CreateFileA( "wtest1.tmp.c", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL ); - ok(file != INVALID_HANDLE_VALUE, "Error creating the test file: %d\n", GetLastError()); - CloseHandle( file ); - - /* NOTE: for this test to succeed, there must be no subdirectories - under the current directory. In addition, there must be at least - one file that fits the wildcard w*.c . Normally, the test - directory itself satisfies both conditions. - */ - - hInst = GetModuleHandleA(0); - if (!RegisterListboxWindowClass(hInst)) assert(0); - hWnd = CreateWindow("ListboxContainerClass", "ListboxContainerClass", - WS_OVERLAPPEDWINDOW | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - NULL, NULL, hInst, 0); - assert(hWnd); - - /* Test for standard usage */ - - /* The following should be overwritten by the directory path */ - SendMessage(g_label, WM_SETTEXT, 0, (LPARAM)"default contents"); - - /* This should list all the w*.c files in the test directory - * As of this writing, this includes win.c, winstation.c, wsprintf.c - */ - strcpy(pathBuffer, "w*.c"); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, 0); - ok (res == 1, "DlgDirList(*.c, 0) returned %d - expected 1 - 0x%08x\n", res, GetLastError()); - - /* Path specification gets converted to uppercase */ - ok (!strcmp(pathBuffer, "W*.C"), - "expected conversion to uppercase, got %s\n", pathBuffer); - - /* Loaded path should have overwritten the label text */ - SendMessage(g_label, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)pathBuffer); - trace("Static control after DlgDirList: %s\n", pathBuffer); - ok (strcmp("default contents", pathBuffer), "DlgDirList() did not modify static control!\n"); - - /* There should be some content in the listbox */ - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount > 0, "DlgDirList() did NOT fill the listbox!\n"); - itemCount_justFiles = itemCount; - - /* Every single item in the control should start with a w and end in .c */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - SendMessage(g_listBox, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - ok(((pathBuffer[0] == 'w' || pathBuffer[0] == 'W') && - (*(p-1) == 'c' || *(p-1) == 'C') && - (*(p-2) == '.')), "Element %d (%s) does not fit requested w*.c\n", i, pathBuffer); - } - - /* Test behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, 0); - ok (res == 1, "DlgDirList(%s, 0) returned %d expected 1\n", BAD_EXTENSION, res); - - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == 0, "DlgDirList() DID fill the listbox!\n"); - - /* Test DDL_DIRECTORY */ - strcpy(pathBuffer, "w*.c"); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY); - ok (res == 1, "DlgDirList(*.c, DDL_DIRECTORY) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. In particular, there should - * be exactly one more element than before, since the string "[..]" should - * have been added. - */ - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justFiles + 1, - "DlgDirList(DDL_DIRECTORY) filled with %d entries, expected %d\n", - itemCount, itemCount_justFiles + 1); - - /* Every single item in the control should start with a w and end in .c, - * except for the "[..]" string, which should appear exactly as it is. - */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - SendMessage(g_listBox, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - ok( !strcmp(pathBuffer, "[..]") || - ((pathBuffer[0] == 'w' || pathBuffer[0] == 'W') && - (*(p-1) == 'c' || *(p-1) == 'C') && - (*(p-2) == '.')), "Element %d (%s) does not fit requested w*.c\n", i, pathBuffer); - } - - /* Test behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY); - ok (res == 1, "DlgDirList(%s, DDL_DIRECTORY) returned %d expected 1\n", BAD_EXTENSION, res); - - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == 1, "DlgDirList() incorrectly filled the listbox! (expected 1 got %d)\n", - itemCount); - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - SendMessage(g_listBox, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - ok( !strcmp(pathBuffer, "[..]"), "Element %d (%s) does not fit requested [..]\n", i, pathBuffer); - } - - - /* Test DDL_DRIVES. At least on WinXP-SP2, this implies DDL_EXCLUSIVE */ - strcpy(pathBuffer, "w*.c"); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DRIVES); - ok (res == 1, "DlgDirList(*.c, DDL_DRIVES) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. In particular, there should - * be at least one element before, since the string "[-c-]" should - * have been added. Depending on the user setting, more drives might have - * been added. - */ - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount >= 1, - "DlgDirList(DDL_DRIVES) filled with %d entries, expected at least %d\n", - itemCount, 1); - itemCount_justDrives = itemCount; - - /* Every single item in the control should fit the format [-c-] */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(g_listBox, LB_GETTEXT, i, (LPARAM)pathBuffer); - ok( strlen(pathBuffer) == 5, "Length of drive string is not 5\n" ); - ok( sscanf(pathBuffer, "[-%c-]", &driveletter) == 1, "Element %d (%s) does not fit [-X-]\n", i, pathBuffer); - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - if (!(driveletter >= 'a' && driveletter <= 'z')) { - /* Correct after invalid entry is found */ - trace("removing count of invalid entry %s\n", pathBuffer); - itemCount_justDrives--; - } - } - - /* Test behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DRIVES); - ok (res == 1, "DlgDirList(%s, DDL_DRIVES) returned %d expected 1\n", BAD_EXTENSION, res); - - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives, "DlgDirList() incorrectly filled the listbox!\n"); - - - /* Test DDL_DIRECTORY|DDL_DRIVES. This does *not* imply DDL_EXCLUSIVE */ - strcpy(pathBuffer, "w*.c"); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY|DDL_DRIVES); - ok (res == 1, "DlgDirList(*.c, DDL_DIRECTORY|DDL_DRIVES) failed - 0x%08x\n", GetLastError()); - - /* There should be some content in the listbox. In particular, there should - * be exactly the number of plain files, plus the number of mapped drives, - * plus one "[..]" - */ - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justFiles + itemCount_justDrives + 1, - "DlgDirList(DDL_DIRECTORY|DDL_DRIVES) filled with %d entries, expected %d\n", - itemCount, itemCount_justFiles + itemCount_justDrives + 1); - - /* Every single item in the control should start with a w and end in .c, - * except for the "[..]" string, which should appear exactly as it is, - * and the mapped drives in the format "[-X-]". - */ - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(g_listBox, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - if (sscanf(pathBuffer, "[-%c-]", &driveletter) == 1) { - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - } else { - ok( !strcmp(pathBuffer, "[..]") || - ((pathBuffer[0] == 'w' || pathBuffer[0] == 'W') && - (*(p-1) == 'c' || *(p-1) == 'C') && - (*(p-2) == '.')), "Element %d (%s) does not fit requested w*.c\n", i, pathBuffer); - } - } - - /* Test behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY|DDL_DRIVES); - ok (res == 1, "DlgDirList(%s, DDL_DIRECTORY|DDL_DRIVES) returned %d expected 1\n", BAD_EXTENSION, res); - - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives + 1, - "DlgDirList() incorrectly filled the listbox! (expected %d got %d)\n", - itemCount_justDrives + 1, itemCount); - - - - /* Test DDL_DIRECTORY|DDL_EXCLUSIVE. */ - strcpy(pathBuffer, "w*.c"); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY|DDL_EXCLUSIVE); - ok (res == 1, "DlgDirList(*.c, DDL_DIRECTORY|DDL_EXCLUSIVE) failed - 0x%08x\n", GetLastError()); - - /* There should be exactly one element: "[..]" */ - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == 1, - "DlgDirList(DDL_DIRECTORY|DDL_EXCLUSIVE) filled with %d entries, expected %d\n", - itemCount, 1); - - memset(pathBuffer, 0, MAX_PATH); - SendMessage(g_listBox, LB_GETTEXT, 0, (LPARAM)pathBuffer); - ok( !strcmp(pathBuffer, "[..]"), "First (and only) element is not [..]\n"); - - - /* Test behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY|DDL_EXCLUSIVE); - ok (res == 1, "DlgDirList(%s, DDL_DIRECTORY|DDL_EXCLUSIVE) returned %d expected 1\n", BAD_EXTENSION, res); - - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == 1, "DlgDirList() incorrectly filled the listbox!\n"); - - - /* Test DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE. */ - strcpy(pathBuffer, "w*.c"); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE); - ok (res == 1, "DlgDirList(*.c, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE) failed - 0x%08x\n", GetLastError()); - - /* There should be no plain files on the listbox */ - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives + 1, - "DlgDirList(DDL_DIRECTORY|DDL_EXCLUSIVE) filled with %d entries, expected %d\n", - itemCount, itemCount_justDrives + 1); - - for (i = 0; i < itemCount; i++) { - memset(pathBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(g_listBox, LB_GETTEXT, i, (LPARAM)pathBuffer); - p = pathBuffer + strlen(pathBuffer); - if (sscanf(pathBuffer, "[-%c-]", &driveletter) == 1) { - ok( driveletter >= 'a' && driveletter <= 'z', "Drive letter not in range a..z, got ascii %d\n", driveletter); - } else { - ok( !strcmp(pathBuffer, "[..]"), "Element %d (%s) does not fit expected [..]\n", i, pathBuffer); - } - } - - /* Test behavior when no files match the wildcard */ - strcpy(pathBuffer, BAD_EXTENSION); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE); - ok (res == 1, "DlgDirList(%s, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE) returned %d expected 1\n", BAD_EXTENSION, res); - - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - ok (itemCount == itemCount_justDrives + 1, "DlgDirList() incorrectly filled the listbox!\n"); - - - /* Now test DlgDirSelectEx() in normal operation */ - /* Fill with everything - drives, directory and all plain files. */ - strcpy(pathBuffer, "*"); - res = DlgDirList(hWnd, pathBuffer, ID_TEST_LISTBOX, ID_TEST_LABEL, - DDL_DIRECTORY|DDL_DRIVES); - ok (res != 0, "DlgDirList(*, DDL_DIRECTORY|DDL_DRIVES) failed - 0x%08x\n", GetLastError()); - - SendMessage(g_listBox, LB_SETCURSEL, -1, 0); /* Unselect any current selection */ - memset(pathBuffer, 0, MAX_PATH); - SetLastError(0xdeadbeef); - res = DlgDirSelectEx(hWnd, pathBuffer, MAX_PATH, ID_TEST_LISTBOX); - ok (GetLastError() == 0xdeadbeef, - "DlgDirSelectEx() with no selection modified last error code from 0xdeadbeef to 0x%08x\n", - GetLastError()); - ok (res == 0, "DlgDirSelectEx() with no selection returned %d, expected 0\n", res); - /* WinXP-SP2 leaves pathBuffer untouched, but Win98 fills it with garbage. */ - /* - ok (strlen(pathBuffer) == 0, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer); - */ - /* Test proper drive/dir/file recognition */ - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - for (i = 0; i < itemCount; i++) { - memset(itemBuffer, 0, MAX_PATH); - memset(pathBuffer, 0, MAX_PATH); - memset(tempBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(g_listBox, LB_GETTEXT, i, (LPARAM)itemBuffer); - res = SendMessage(g_listBox, LB_SETCURSEL, i, 0); - ok (res == i, "SendMessage(LB_SETCURSEL, %d) failed\n", i); - if (sscanf(itemBuffer, "[-%c-]", &driveletter) == 1) { - /* Current item is a drive letter */ - SetLastError(0xdeadbeef); - res = DlgDirSelectEx(hWnd, pathBuffer, MAX_PATH, ID_TEST_LISTBOX); - ok (GetLastError() == 0xdeadbeef, - "DlgDirSelectEx() with selection at %d modified last error code from 0xdeadbeef to 0x%08x\n", - i, GetLastError()); - ok(res == 1, "DlgDirSelectEx() thinks %s (%s) is not a drive/directory!\n", itemBuffer, pathBuffer); - - /* For drive letters, DlgDirSelectEx tacks on a colon */ - ok (pathBuffer[0] == driveletter && pathBuffer[1] == ':' && pathBuffer[2] == '\0', - "%d: got \"%s\" expected \"%c:\"\n", i, pathBuffer, driveletter); - } else if (itemBuffer[0] == '[') { - /* Current item is the parent directory */ - SetLastError(0xdeadbeef); - res = DlgDirSelectEx(hWnd, pathBuffer, MAX_PATH, ID_TEST_LISTBOX); - ok (GetLastError() == 0xdeadbeef, - "DlgDirSelectEx() with selection at %d modified last error code from 0xdeadbeef to 0x%08x\n", - i, GetLastError()); - ok(res == 1, "DlgDirSelectEx() thinks %s (%s) is not a drive/directory!\n", itemBuffer, pathBuffer); - - /* For directories, DlgDirSelectEx tacks on a backslash */ - p = pathBuffer + strlen(pathBuffer); - ok (*(p-1) == '\\', "DlgDirSelectEx did NOT tack on a backslash to dir, got %s\n", pathBuffer); - - tempBuffer[0] = '['; - strncpy(tempBuffer + 1, pathBuffer, strlen(pathBuffer) - 1); - strcat(tempBuffer, "]"); - ok (!strcmp(tempBuffer, itemBuffer), "Formatted directory should be %s, got %s\n", tempBuffer, itemBuffer); - } else { - /* Current item is a plain file */ - SetLastError(0xdeadbeef); - res = DlgDirSelectEx(hWnd, pathBuffer, MAX_PATH, ID_TEST_LISTBOX); - ok (GetLastError() == 0xdeadbeef, - "DlgDirSelectEx() with selection at %d modified last error code from 0xdeadbeef to 0x%08x\n", - i, GetLastError()); - ok(res == 0, "DlgDirSelectEx() thinks %s (%s) is a drive/directory!\n", itemBuffer, pathBuffer); - - /* NOTE: WinXP tacks a period on all files that lack an extension. This affects - * for example, "Makefile", which gets reported as "Makefile." - */ - strcpy(tempBuffer, itemBuffer); - if (strchr(tempBuffer, '.') == NULL) strcat(tempBuffer, "."); - ok (!strcmp(pathBuffer, tempBuffer), "Formatted file should be %s, got %s\n", tempBuffer, pathBuffer); - } - } - - /* Now test DlgDirSelectEx() in abnormal operation */ - /* Fill list with bogus entries, that look somewhat valid */ - SendMessage(g_listBox, LB_RESETCONTENT, 0, 0); - SendMessage(g_listBox, LB_ADDSTRING, 0, (LPARAM)"[notexist.dir]"); - SendMessage(g_listBox, LB_ADDSTRING, 0, (LPARAM)"notexist.fil"); - itemCount = SendMessage(g_listBox, LB_GETCOUNT, 0, 0); - for (i = 0; i < itemCount; i++) { - memset(itemBuffer, 0, MAX_PATH); - memset(pathBuffer, 0, MAX_PATH); - memset(tempBuffer, 0, MAX_PATH); - driveletter = '\0'; - SendMessage(g_listBox, LB_GETTEXT, i, (LPARAM)itemBuffer); - res = SendMessage(g_listBox, LB_SETCURSEL, i, 0); - ok (res == i, "SendMessage(LB_SETCURSEL, %d) failed\n", i); - if (sscanf(itemBuffer, "[-%c-]", &driveletter) == 1) { - /* Current item is a drive letter */ - SetLastError(0xdeadbeef); - res = DlgDirSelectEx(hWnd, pathBuffer, MAX_PATH, ID_TEST_LISTBOX); - ok (GetLastError() == 0xdeadbeef, - "DlgDirSelectEx() with selection at %d modified last error code from 0xdeadbeef to 0x%08x\n", - i, GetLastError()); - ok(res == 1, "DlgDirSelectEx() thinks %s (%s) is not a drive/directory!\n", itemBuffer, pathBuffer); - - /* For drive letters, DlgDirSelectEx tacks on a colon */ - ok (pathBuffer[0] == driveletter && pathBuffer[1] == ':' && pathBuffer[2] == '\0', - "%d: got \"%s\" expected \"%c:\"\n", i, pathBuffer, driveletter); - } else if (itemBuffer[0] == '[') { - /* Current item is the parent directory */ - SetLastError(0xdeadbeef); - res = DlgDirSelectEx(hWnd, pathBuffer, MAX_PATH, ID_TEST_LISTBOX); - ok (GetLastError() == 0xdeadbeef, - "DlgDirSelectEx() with selection at %d modified last error code from 0xdeadbeef to 0x%08x\n", - i, GetLastError()); - ok(res == 1, "DlgDirSelectEx() thinks %s (%s) is not a drive/directory!\n", itemBuffer, pathBuffer); - - /* For directories, DlgDirSelectEx tacks on a backslash */ - p = pathBuffer + strlen(pathBuffer); - ok (*(p-1) == '\\', "DlgDirSelectEx did NOT tack on a backslash to dir, got %s\n", pathBuffer); - - tempBuffer[0] = '['; - strncpy(tempBuffer + 1, pathBuffer, strlen(pathBuffer) - 1); - strcat(tempBuffer, "]"); - ok (!strcmp(tempBuffer, itemBuffer), "Formatted directory should be %s, got %s\n", tempBuffer, itemBuffer); - } else { - /* Current item is a plain file */ - SetLastError(0xdeadbeef); - res = DlgDirSelectEx(hWnd, pathBuffer, MAX_PATH, ID_TEST_LISTBOX); - ok (GetLastError() == 0xdeadbeef, - "DlgDirSelectEx() with selection at %d modified last error code from 0xdeadbeef to 0x%08x\n", - i, GetLastError()); - ok(res == 0, "DlgDirSelectEx() thinks %s (%s) is a drive/directory!\n", itemBuffer, pathBuffer); - - /* NOTE: WinXP and Win98 tack a period on all files that lack an extension. - * This affects for example, "Makefile", which gets reported as "Makefile." - */ - strcpy(tempBuffer, itemBuffer); - if (strchr(tempBuffer, '.') == NULL) strcat(tempBuffer, "."); - ok (!strcmp(pathBuffer, tempBuffer), "Formatted file should be %s, got %s\n", tempBuffer, pathBuffer); - } - } - DestroyWindow(hWnd); - - DeleteFileA( "wtest1.tmp.c" ); -} - -START_TEST(listbox) -{ - const struct listbox_test SS = -/* {add_style} */ - {{0}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}, - { 1, 1, 1, LB_ERR}, {0,0,0,0}, - { 2, 2, 2, LB_ERR}, {0,0,0,0}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}}; -/* {selected, anchor, caret, selcount}{TODO fields} */ - const struct listbox_test SS_NS = - {{LBS_NOSEL}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}, - { 1, 1, 1, LB_ERR}, {0,0,0,0}, - { 2, 2, 2, LB_ERR}, {0,0,0,0}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}}; - const struct listbox_test MS = - {{LBS_MULTIPLESEL}, - { 0, LB_ERR, 0, 0}, {0,0,0,0}, - { 1, 1, 1, 1}, {0,0,0,0}, - { 2, 1, 2, 1}, {0,0,0,0}, - { 0, LB_ERR, 0, 2}, {0,0,0,0}}; - const struct listbox_test MS_NS = - {{LBS_MULTIPLESEL | LBS_NOSEL}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}, - { 1, 1, 1, LB_ERR}, {0,0,0,0}, - { 2, 2, 2, LB_ERR}, {0,0,0,0}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}}; - const struct listbox_test ES = - {{LBS_EXTENDEDSEL}, - { 0, LB_ERR, 0, 0}, {0,0,0,0}, - { 1, 1, 1, 1}, {0,0,0,0}, - { 2, 2, 2, 1}, {0,0,0,0}, - { 0, LB_ERR, 0, 2}, {0,0,0,0}}; - const struct listbox_test ES_NS = - {{LBS_EXTENDEDSEL | LBS_NOSEL}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}, - { 1, 1, 1, LB_ERR}, {0,0,0,0}, - { 2, 2, 2, LB_ERR}, {0,0,0,0}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}}; - const struct listbox_test EMS = - {{LBS_EXTENDEDSEL | LBS_MULTIPLESEL}, - { 0, LB_ERR, 0, 0}, {0,0,0,0}, - { 1, 1, 1, 1}, {0,0,0,0}, - { 2, 2, 2, 1}, {0,0,0,0}, - { 0, LB_ERR, 0, 2}, {0,0,0,0}}; - const struct listbox_test EMS_NS = - {{LBS_EXTENDEDSEL | LBS_MULTIPLESEL | LBS_NOSEL}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}, - { 1, 1, 1, LB_ERR}, {0,0,0,0}, - { 2, 2, 2, LB_ERR}, {0,0,0,0}, - {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0}}; - - trace (" Testing single selection...\n"); - check (SS); - trace (" ... with NOSEL\n"); - check (SS_NS); - trace (" Testing multiple selection...\n"); - check (MS); - trace (" ... with NOSEL\n"); - check (MS_NS); - trace (" Testing extended selection...\n"); - check (ES); - trace (" ... with NOSEL\n"); - check (ES_NS); - trace (" Testing extended and multiple selection...\n"); - check (EMS); - trace (" ... with NOSEL\n"); - check (EMS_NS); - - check_item_height(); - test_ownerdraw(); - test_selection(); - test_listbox_height(); - test_itemfrompoint(); - test_listbox_item_data(); - test_listbox_LB_DIR(); - test_listbox_dlgdir(); -} diff --git a/rostests/winetests/user32/menu.c b/rostests/winetests/user32/menu.c deleted file mode 100755 index 1aa2eb6688c..00000000000 --- a/rostests/winetests/user32/menu.c +++ /dev/null @@ -1,2364 +0,0 @@ -/* - * Unit tests for menus - * - * Copyright 2005 Robert Shearman - * Copyright 2007 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 _WIN32_WINNT 0x0501 - -#include -#include -#include -#include - -#define OEMRESOURCE /* For OBM_MNARROW */ - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" - -#include "wine/test.h" - -static ATOM atomMenuCheckClass; - -static BOOL (WINAPI *pGetMenuInfo)(HMENU,LPCMENUINFO); -static UINT (WINAPI *pSendInput)(UINT, INPUT*, size_t); -static BOOL (WINAPI *pSetMenuInfo)(HMENU,LPCMENUINFO); - -static void init_function_pointers(void) -{ - HMODULE hdll = GetModuleHandleA("user32"); - -#define GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hdll, #func); \ - if(!p ## func) \ - trace("GetProcAddress(%s) failed\n", #func); - - GET_PROC(GetMenuInfo) - GET_PROC(SendInput) - GET_PROC(SetMenuInfo) - -#undef GET_PROC -} - -static LRESULT WINAPI menu_check_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_ENTERMENULOOP: - /* mark window as having entered menu loop */ - SetWindowLongPtr(hwnd, GWLP_USERDATA, TRUE); - /* exit menu modal loop - * ( A SendMessage does not work on NT3.51 here ) */ - return PostMessage(hwnd, WM_CANCELMODE, 0, 0); - } - return DefWindowProc(hwnd, msg, wparam, lparam); -} - -/* The MSVC headers ignore our NONAMELESSUNION requests so we have to define - * our own type */ -typedef struct -{ - DWORD type; - union - { - MOUSEINPUT mi; - KEYBDINPUT ki; - HARDWAREINPUT hi; - } u; -} TEST_INPUT; - -/* globals to communicate between test and wndproc */ - -static BOOL bMenuVisible; -static HMENU hMenus[4]; - -#define MOD_SIZE 10 -#define MOD_NRMENUS 8 - - /* menu texts with their sizes */ -static struct { - LPCSTR text; - SIZE size; /* size of text up to any \t */ - SIZE sc_size; /* size of the short-cut */ -} MOD_txtsizes[] = { - { "Pinot &Noir" }, - { "&Merlot\bF4" }, - { "Shira&z\tAlt+S" }, - { "" }, - { NULL } -}; - -static unsigned int MOD_maxid; -static RECT MOD_rc[MOD_NRMENUS]; -static int MOD_avec, MOD_hic; -static int MOD_odheight; -static SIZE MODsizes[MOD_NRMENUS]= { {MOD_SIZE, MOD_SIZE},{MOD_SIZE, MOD_SIZE}, - {MOD_SIZE, MOD_SIZE},{MOD_SIZE, MOD_SIZE}}; -static int MOD_GotDrawItemMsg = FALSE; -/* wndproc used by test_menu_ownerdraw() */ -static LRESULT WINAPI menu_ownerdraw_wnd_proc(HWND hwnd, UINT msg, - WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_MEASUREITEM: - { - MEASUREITEMSTRUCT* pmis = (MEASUREITEMSTRUCT*)lparam; - if( winetest_debug) - trace("WM_MEASUREITEM received data %lx size %dx%d\n", - pmis->itemData, pmis->itemWidth, pmis->itemHeight); - MOD_odheight = pmis->itemHeight; - pmis->itemWidth = MODsizes[pmis->itemData].cx; - pmis->itemHeight = MODsizes[pmis->itemData].cy; - return TRUE; - } - case WM_DRAWITEM: - { - DRAWITEMSTRUCT * pdis; - TEXTMETRIC tm; - HPEN oldpen; - char chrs[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - SIZE sz; - int i; - pdis = (DRAWITEMSTRUCT *) lparam; - if( winetest_debug) { - RECT rc; - GetMenuItemRect( hwnd, (HMENU)pdis->hwndItem, pdis->itemData ,&rc); - trace("WM_DRAWITEM received hwnd %p hmenu %p itemdata %ld item %d rc %d,%d-%d,%d itemrc: %d,%d-%d,%d\n", - hwnd, (HMENU)pdis->hwndItem, pdis->itemData, - pdis->itemID, pdis->rcItem.left, pdis->rcItem.top, - pdis->rcItem.right,pdis->rcItem.bottom, - rc.left,rc.top,rc.right,rc.bottom); - oldpen=SelectObject( pdis->hDC, GetStockObject( - pdis->itemState & ODS_SELECTED ? WHITE_PEN :BLACK_PEN)); - Rectangle( pdis->hDC, pdis->rcItem.left,pdis->rcItem.top, - pdis->rcItem.right,pdis->rcItem.bottom ); - SelectObject( pdis->hDC, oldpen); - } - /* calculate widths of some menu texts */ - if( ! MOD_txtsizes[0].size.cx) - for(i = 0; MOD_txtsizes[i].text; i++) { - char buf[100], *p; - RECT rc={0,0,0,0}; - strcpy( buf, MOD_txtsizes[i].text); - if( ( p = strchr( buf, '\t'))) { - *p = '\0'; - DrawText( pdis->hDC, p + 1, -1, &rc, - DT_SINGLELINE|DT_CALCRECT); - MOD_txtsizes[i].sc_size.cx= rc.right - rc.left; - MOD_txtsizes[i].sc_size.cy= rc.bottom - rc.top; - } - DrawText( pdis->hDC, buf, -1, &rc, - DT_SINGLELINE|DT_CALCRECT); - MOD_txtsizes[i].size.cx= rc.right - rc.left; - MOD_txtsizes[i].size.cy= rc.bottom - rc.top; - } - - if( pdis->itemData > MOD_maxid) return TRUE; - /* store the rectangl */ - MOD_rc[pdis->itemData] = pdis->rcItem; - /* calculate average character width */ - GetTextExtentPoint( pdis->hDC, chrs, 52, &sz ); - MOD_avec = (sz.cx + 26)/52; - GetTextMetrics( pdis->hDC, &tm); - MOD_hic = tm.tmHeight; - MOD_GotDrawItemMsg = TRUE; - return TRUE; - } - case WM_ENTERIDLE: - { - PostMessage(hwnd, WM_CANCELMODE, 0, 0); - return TRUE; - } - - } - return DefWindowProc(hwnd, msg, wparam, lparam); -} - -static void register_menu_check_class(void) -{ - WNDCLASS wc = - { - 0, - menu_check_wnd_proc, - 0, - 0, - GetModuleHandle(NULL), - NULL, - LoadCursor(NULL, IDC_ARROW), - (HBRUSH)(COLOR_BTNFACE+1), - NULL, - TEXT("WineMenuCheck"), - }; - - atomMenuCheckClass = RegisterClass(&wc); -} - -/* demonstrates that windows locks the menu object so that it is still valid - * even after a client calls DestroyMenu on it */ -static void test_menu_locked_by_window(void) -{ - BOOL ret; - HMENU hmenu; - HWND hwnd = CreateWindowEx(0, MAKEINTATOM(atomMenuCheckClass), NULL, - WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, - NULL, NULL, NULL, NULL); - ok(hwnd != NULL, "CreateWindowEx failed with error %d\n", GetLastError()); - hmenu = CreateMenu(); - ok(hmenu != NULL, "CreateMenu failed with error %d\n", GetLastError()); - ret = InsertMenu(hmenu, 0, MF_STRING, 0, TEXT("&Test")); - ok(ret, "InsertMenu failed with error %d\n", GetLastError()); - ret = SetMenu(hwnd, hmenu); - ok(ret, "SetMenu failed with error %d\n", GetLastError()); - ret = DestroyMenu(hmenu); - ok(ret, "DestroyMenu failed with error %d\n", GetLastError()); - - ret = DrawMenuBar(hwnd); - todo_wine { - ok(ret, "DrawMenuBar failed with error %d\n", GetLastError()); - } - ret = IsMenu(GetMenu(hwnd)); - ok(!ret, "Menu handle should have been destroyed\n"); - - SendMessage(hwnd, WM_SYSCOMMAND, SC_KEYMENU, 0); - /* did we process the WM_INITMENU message? */ - ret = GetWindowLongPtr(hwnd, GWLP_USERDATA); - todo_wine { - ok(ret, "WM_INITMENU should have been sent\n"); - } - - DestroyWindow(hwnd); -} - -static void test_menu_ownerdraw(void) -{ - int i,j,k; - BOOL ret; - HMENU hmenu; - LONG leftcol; - HWND hwnd = CreateWindowEx(0, MAKEINTATOM(atomMenuCheckClass), NULL, - WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, - NULL, NULL, NULL, NULL); - ok(hwnd != NULL, "CreateWindowEx failed with error %d\n", GetLastError()); - if( !hwnd) return; - SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG)menu_ownerdraw_wnd_proc); - hmenu = CreatePopupMenu(); - ok(hmenu != NULL, "CreateMenu failed with error %d\n", GetLastError()); - if( !hmenu) { DestroyWindow(hwnd);return;} - k=0; - for( j=0;j<2;j++) /* create columns */ - for(i=0;i<2;i++) { /* create rows */ - ret = AppendMenu( hmenu, MF_OWNERDRAW | - (i==0 ? MF_MENUBREAK : 0), k, (LPCTSTR) k); - k++; - ok( ret, "AppendMenu failed for %d\n", k-1); - } - MOD_maxid = k-1; - assert( k <= sizeof(MOD_rc)/sizeof(RECT)); - /* display the menu */ - ret = TrackPopupMenu( hmenu, 0x100, 100,100, 0, hwnd, NULL); - - /* columns have a 4 pixel gap between them */ - ok( MOD_rc[0].right + 4 == MOD_rc[2].left, - "item rectangles are not separated by 4 pixels space\n"); - /* height should be what the MEASUREITEM message has returned */ - ok( MOD_rc[0].bottom - MOD_rc[0].top == MOD_SIZE, - "menu item has wrong height: %d should be %d\n", - MOD_rc[0].bottom - MOD_rc[0].top, MOD_SIZE); - /* no gaps between the rows */ - ok( MOD_rc[0].bottom - MOD_rc[1].top == 0, - "There should not be a space between the rows, gap is %d\n", - MOD_rc[0].bottom - MOD_rc[1].top); - /* test the correct value of the item height that was sent - * by the WM_MEASUREITEM message */ - ok( MOD_odheight == HIWORD( GetDialogBaseUnits()) || /* WinNT,2k,XP */ - MOD_odheight == MOD_hic, /* Win95,98,ME */ - "Wrong height field in MEASUREITEMSTRUCT, expected %d or %d actual %d\n", - HIWORD( GetDialogBaseUnits()), MOD_hic, MOD_odheight); - /* test what MF_MENUBREAK did at the first position. Also show - * that an MF_SEPARATOR is ignored in the height calculation. */ - leftcol= MOD_rc[0].left; - ModifyMenu( hmenu, 0, MF_BYCOMMAND| MF_OWNERDRAW| MF_SEPARATOR, 0, 0); - /* display the menu */ - ret = TrackPopupMenu( hmenu, 0x100, 100,100, 0, hwnd, NULL); - /* left should be 4 pixels less now */ - ok( leftcol == MOD_rc[0].left + 4, - "columns should be 4 pixels to the left (actual %d).\n", - leftcol - MOD_rc[0].left); - /* test width */ - ok( MOD_rc[0].right - MOD_rc[0].left == 2 * MOD_avec + MOD_SIZE, - "width of owner drawn menu item is wrong. Got %d expected %d\n", - MOD_rc[0].right - MOD_rc[0].left , 2*MOD_avec + MOD_SIZE); - /* and height */ - ok( MOD_rc[0].bottom - MOD_rc[0].top == MOD_SIZE, - "Height is incorrect. Got %d expected %d\n", - MOD_rc[0].bottom - MOD_rc[0].top, MOD_SIZE); - - /* test width/height of an ownerdraw menu bar as well */ - ret = DestroyMenu(hmenu); - ok(ret, "DestroyMenu failed with error %d\n", GetLastError()); - hmenu = CreateMenu(); - ok(hmenu != NULL, "CreateMenu failed with error %d\n", GetLastError()); - if( !hmenu) { DestroyWindow(hwnd);return;} - MOD_maxid=1; - for(i=0;i<2;i++) { - ret = AppendMenu( hmenu, MF_OWNERDRAW , i, 0); - ok( ret, "AppendMenu failed for %d\n", i); - } - ret = SetMenu( hwnd, hmenu); - UpdateWindow( hwnd); /* hack for wine to draw the window + menu */ - ok(ret, "SetMenu failed with error %d\n", GetLastError()); - /* test width */ - ok( MOD_rc[0].right - MOD_rc[0].left == 2 * MOD_avec + MOD_SIZE, - "width of owner drawn menu item is wrong. Got %d expected %d\n", - MOD_rc[0].right - MOD_rc[0].left , 2*MOD_avec + MOD_SIZE); - /* test hight */ - ok( MOD_rc[0].bottom - MOD_rc[0].top == GetSystemMetrics( SM_CYMENU) - 1, - "Height of owner drawn menu item is wrong. Got %d expected %d\n", - MOD_rc[0].bottom - MOD_rc[0].top, GetSystemMetrics( SM_CYMENU) - 1); - - /* clean up */ - ret = DestroyMenu(hmenu); - ok(ret, "DestroyMenu failed with error %d\n", GetLastError()); - DestroyWindow(hwnd); -} - -/* helper for test_menu_bmp_and_string() */ -static void test_mbs_help( int ispop, int hassub, int mnuopt, - HWND hwnd, int arrowwidth, int count, HBITMAP hbmp, - SIZE bmpsize, LPCSTR text, SIZE size, SIZE sc_size) -{ - BOOL ret; - HMENU hmenu, submenu; - MENUITEMINFO mii={ sizeof( MENUITEMINFO )}; - MENUINFO mi; - RECT rc; - CHAR text_copy[16]; - int hastab, expect; - int failed = 0; - - MOD_GotDrawItemMsg = FALSE; - mii.fMask = MIIM_FTYPE | MIIM_DATA | MIIM_STATE; - mii.fType = 0; - mii.fState = MF_CHECKED; - mii.dwItemData =0; - MODsizes[0] = bmpsize; - hastab = 0; - if( text ) { - char *p; - mii.fMask |= MIIM_STRING; - strcpy(text_copy, text); - mii.dwTypeData = text_copy; /* structure member declared non-const */ - if( ( p = strchr( text, '\t'))) { - hastab = *(p + 1) ? 2 : 1; - } - } - /* tabs don't make sense in menubars */ - if(hastab && !ispop) return; - if( hbmp) { - mii.fMask |= MIIM_BITMAP; - mii.hbmpItem = hbmp; - } - submenu = CreateMenu(); - ok( submenu != 0, "CreateMenu failed with error %d\n", GetLastError()); - if( ispop) - hmenu = CreatePopupMenu(); - else - hmenu = CreateMenu(); - ok( hmenu != 0, "Create{Popup}Menu failed with error %d\n", GetLastError()); - if( hassub) { - mii.fMask |= MIIM_SUBMENU; - mii.hSubMenu = submenu; - } - if( mnuopt) { - mi.cbSize = sizeof(mi); - mi.fMask = MIM_STYLE; - pGetMenuInfo( hmenu, &mi); - mi.dwStyle |= mnuopt == 1 ? MNS_NOCHECK : MNS_CHECKORBMP; - ret = pSetMenuInfo( hmenu, &mi); - ok( ret, "SetMenuInfo failed with error %d\n", GetLastError()); - } - ret = InsertMenuItem( hmenu, 0, FALSE, &mii); - ok( ret, "InsertMenuItem failed with error %d\n", GetLastError()); - failed = !ret; - if( winetest_debug) { - HDC hdc=GetDC(hwnd); - RECT rc = {100, 50, 400, 70}; - char buf[100]; - - sprintf( buf,"%d text \"%s\" mnuopt %d", count, text ? text: "(nil)", mnuopt); - FillRect( hdc, &rc, (HBRUSH) COLOR_WINDOW); - TextOut( hdc, 100, 50, buf, strlen( buf)); - ReleaseDC( hwnd, hdc); - } - if(ispop) - ret = TrackPopupMenu( hmenu, 0x100, 100,100, 0, hwnd, NULL); - else { - ret = SetMenu( hwnd, hmenu); - ok(ret, "SetMenu failed with error %d\n", GetLastError()); - DrawMenuBar( hwnd); - } - ret = GetMenuItemRect( hwnd, hmenu, 0, &rc); - /* check menu width */ - if( ispop) - expect = ( text || hbmp ? - 4 + (mnuopt != 1 ? GetSystemMetrics(SM_CXMENUCHECK) : 0) - : 0) + - arrowwidth + MOD_avec + (hbmp ? bmpsize.cx + 2 : 0) + - (text && hastab ? /* TAB space */ - MOD_avec + ( hastab==2 ? sc_size.cx : 0) : 0) + - (text ? 2 + (text[0] ? size.cx :0): 0) ; - else - expect = !(text || hbmp) ? 0 : - ( hbmp ? (text ? 2:0) + bmpsize.cx : 0 ) + - (text ? 2 * MOD_avec + (text[0] ? size.cx :0): 0) ; - ok( rc.right - rc.left == expect, - "menu width wrong, got %d expected %d\n", rc.right - rc.left, expect); - failed = failed || !(rc.right - rc.left == expect); - /* check menu height */ - if( ispop) - expect = max( ( !(text || hbmp) ? GetSystemMetrics( SM_CYMENUSIZE)/2 : 0), - max( (text ? max( 2 + size.cy, MOD_hic + 4) : 0), - (hbmp ? bmpsize.cy + 2 : 0))); - else - expect = ( !(text || hbmp) ? GetSystemMetrics( SM_CYMENUSIZE)/2 : - max( GetSystemMetrics( SM_CYMENU) - 1, (hbmp ? bmpsize.cy : 0))); - ok( rc.bottom - rc.top == expect, - "menu height wrong, got %d expected %d (%d)\n", - rc.bottom - rc.top, expect, GetSystemMetrics( SM_CYMENU)); - failed = failed || !(rc.bottom - rc.top == expect); - if( hbmp == HBMMENU_CALLBACK && MOD_GotDrawItemMsg) { - /* check the position of the bitmap */ - /* horizontal */ - expect = ispop ? (4 + ( mnuopt ? 0 : GetSystemMetrics(SM_CXMENUCHECK))) - : 3; - ok( expect == MOD_rc[0].left, - "bitmap left is %d expected %d\n", MOD_rc[0].left, expect); - failed = failed || !(expect == MOD_rc[0].left); - /* vertical */ - expect = (rc.bottom - rc.top - MOD_rc[0].bottom + MOD_rc[0].top) / 2; - ok( expect == MOD_rc[0].top, - "bitmap top is %d expected %d\n", MOD_rc[0].top, expect); - failed = failed || !(expect == MOD_rc[0].top); - } - /* if there was a failure, report details */ - if( failed) { - trace("*** count %d text \"%s\" bitmap %p bmsize %d,%d textsize %d+%d,%d mnuopt %d hastab %d\n", - count, text ? text: "(nil)", hbmp, bmpsize.cx, bmpsize.cy, - size.cx, size.cy, sc_size.cx, mnuopt, hastab); - trace(" check %d,%d arrow %d avechar %d\n", - GetSystemMetrics(SM_CXMENUCHECK ), - GetSystemMetrics(SM_CYMENUCHECK ),arrowwidth, MOD_avec); - if( hbmp == HBMMENU_CALLBACK) - trace( " rc %d,%d-%d,%d bmp.rc %d,%d-%d,%d\n", - rc.left, rc.top, rc.top, rc.bottom, MOD_rc[0].left, - MOD_rc[0].top,MOD_rc[0].right, MOD_rc[0].bottom); - } - /* clean up */ - ret = DestroyMenu(submenu); - ok(ret, "DestroyMenu failed with error %d\n", GetLastError()); - ret = DestroyMenu(hmenu); - ok(ret, "DestroyMenu failed with error %d\n", GetLastError()); -} - - -static void test_menu_bmp_and_string(void) -{ - BYTE bmfill[300]; - HBITMAP hbm_arrow; - BITMAP bm; - INT arrowwidth; - HWND hwnd; - int count, szidx, txtidx, bmpidx, hassub, mnuopt, ispop; - - if( !pGetMenuInfo) - { - skip("GetMenuInfo is not available\n"); - return; - } - - memset( bmfill, 0xcc, sizeof( bmfill)); - hwnd = CreateWindowEx(0, MAKEINTATOM(atomMenuCheckClass), NULL, - WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, - NULL, NULL, NULL, NULL); - hbm_arrow=LoadBitmap( 0, (CHAR*)OBM_MNARROW); - GetObject( hbm_arrow, sizeof(bm), &bm); - arrowwidth = bm.bmWidth; - - ok(hwnd != NULL, "CreateWindowEx failed with error %d\n", GetLastError()); - if( !hwnd) return; - SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG)menu_ownerdraw_wnd_proc); - - if( winetest_debug) - trace(" check %d,%d arrow %d avechar %d\n", - GetSystemMetrics(SM_CXMENUCHECK ), - GetSystemMetrics(SM_CYMENUCHECK ),arrowwidth, MOD_avec); - count = 0; - MOD_maxid = 0; - for( ispop=1; ispop >= 0; ispop--){ - static SIZE bmsizes[]= { - {10,10},{38,38},{1,30},{55,5}}; - for( szidx=0; szidx < sizeof( bmsizes) / sizeof( SIZE); szidx++) { - HBITMAP hbm = CreateBitmap( bmsizes[szidx].cx, bmsizes[szidx].cy,1,1,bmfill); - HBITMAP bitmaps[] = { HBMMENU_CALLBACK, hbm, NULL }; - ok( (int)hbm, "CreateBitmap failed err %d\n", GetLastError()); - for( txtidx = 0; txtidx < sizeof(MOD_txtsizes)/sizeof(MOD_txtsizes[0]); txtidx++) { - for( hassub = 0; hassub < 2 ; hassub++) { /* add submenu item */ - for( mnuopt = 0; mnuopt < 3 ; mnuopt++){ /* test MNS_NOCHECK/MNS_CHECKORBMP */ - for( bmpidx = 0; bmpidx 0) continue; - if( !ispop && hassub) continue; - test_mbs_help( ispop, hassub, mnuopt, - hwnd, arrowwidth, ++count, - bitmaps[bmpidx], - bmsizes[szidx], - MOD_txtsizes[txtidx].text, - MOD_txtsizes[txtidx].size, - MOD_txtsizes[txtidx].sc_size); - } - } - } - } - DeleteObject( hbm); - } - } - /* clean up */ - DestroyWindow(hwnd); -} - -static void test_menu_add_string( void ) -{ - HMENU hmenu; - MENUITEMINFO info; - BOOL rc; - int ret; - - char string[0x80]; - char string2[0x80]; - - char strback[0x80]; - WCHAR strbackW[0x80]; - static CHAR blah[] = "blah"; - static const WCHAR expectedString[] = {'D','u','m','m','y',' ','s','t','r','i','n','g', 0}; - - hmenu = CreateMenu(); - - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE | MIIM_ID; - info.dwTypeData = blah; - info.cch = 6; - info.dwItemData = 0; - info.wID = 1; - info.fState = 0; - InsertMenuItem(hmenu, 0, TRUE, &info ); - - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE | MIIM_DATA | MIIM_ID; - info.dwTypeData = string; - info.cch = sizeof string; - string[0] = 0; - GetMenuItemInfo( hmenu, 0, TRUE, &info ); - - ok( !strcmp( string, "blah" ), "menu item name differed\n"); - - /* Test combination of ownerdraw and strings with GetMenuItemString(A/W) */ - strcpy(string, "Dummy string"); - memset(&info, 0x00, sizeof(info)); - info.cbSize= sizeof(MENUITEMINFO); - info.fMask= MIIM_FTYPE | MIIM_STRING; /* Set OwnerDraw + typeData */ - info.fType= MFT_OWNERDRAW; - info.dwTypeData= string; - rc = InsertMenuItem( hmenu, 0, TRUE, &info ); - ok (rc, "InsertMenuItem failed\n"); - - strcpy(string,"Garbage"); - ok (GetMenuString( hmenu, 0, strback, 99, MF_BYPOSITION), "GetMenuString on ownerdraw entry failed\n"); - ok (!strcmp( strback, "Dummy string" ), "Menu text from Ansi version incorrect\n"); - - SetLastError(0xdeadbeef); - ret = GetMenuStringW( hmenu, 0, (WCHAR *)strbackW, 99, MF_BYPOSITION); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - skip("GetMenuStringW is not implemented\n"); - else - { - ok (ret, "GetMenuStringW on ownerdraw entry failed\n"); - ok (!lstrcmpW( strbackW, expectedString ), "Menu text from Unicode version incorrect\n"); - } - - /* Just change ftype to string and see what text is stored */ - memset(&info, 0x00, sizeof(info)); - info.cbSize= sizeof(MENUITEMINFO); - info.fMask= MIIM_FTYPE; /* Set string type */ - info.fType= MFT_STRING; - info.dwTypeData= (char *)0xdeadbeef; - rc = SetMenuItemInfo( hmenu, 0, TRUE, &info ); - ok (rc, "SetMenuItemInfo failed\n"); - - /* Did we keep the old dwTypeData? */ - ok (GetMenuString( hmenu, 0, strback, 99, MF_BYPOSITION), "GetMenuString on ownerdraw entry failed\n"); - ok (!strcmp( strback, "Dummy string" ), "Menu text from Ansi version incorrect\n"); - - /* Ensure change to bitmap type fails */ - memset(&info, 0x00, sizeof(info)); - info.cbSize= sizeof(MENUITEMINFO); - info.fMask= MIIM_FTYPE; /* Set as bitmap type */ - info.fType= MFT_BITMAP; - info.dwTypeData= (char *)0xdeadbee2; - rc = SetMenuItemInfo( hmenu, 0, TRUE, &info ); - ok (!rc, "SetMenuItemInfo unexpectedly worked\n"); - - /* Just change ftype back and ensure data hasn't been freed */ - info.fType= MFT_OWNERDRAW; /* Set as ownerdraw type */ - info.dwTypeData= (char *)0xdeadbee3; - rc = SetMenuItemInfo( hmenu, 0, TRUE, &info ); - ok (rc, "SetMenuItemInfo failed\n"); - - /* Did we keep the old dwTypeData? */ - ok (GetMenuString( hmenu, 0, strback, 99, MF_BYPOSITION), "GetMenuString on ownerdraw entry failed\n"); - ok (!strcmp( strback, "Dummy string" ), "Menu text from Ansi version incorrect\n"); - - /* Just change string value (not type) */ - memset(&info, 0x00, sizeof(info)); - info.cbSize= sizeof(MENUITEMINFO); - info.fMask= MIIM_STRING; /* Set typeData */ - strcpy(string2, "string2"); - info.dwTypeData= string2; - rc = SetMenuItemInfo( hmenu, 0, TRUE, &info ); - ok (rc, "SetMenuItemInfo failed\n"); - - ok (GetMenuString( hmenu, 0, strback, 99, MF_BYPOSITION), "GetMenuString on ownerdraw entry failed\n"); - ok (!strcmp( strback, "string2" ), "Menu text from Ansi version incorrect\n"); - - /* crashes with wine 0.9.5 */ - memset(&info, 0x00, sizeof(info)); - info.cbSize= sizeof(MENUITEMINFO); - info.fMask= MIIM_FTYPE | MIIM_STRING; /* Set OwnerDraw + typeData */ - info.fType= MFT_OWNERDRAW; - rc = InsertMenuItem( hmenu, 0, TRUE, &info ); - ok (rc, "InsertMenuItem failed\n"); - ok (!GetMenuString( hmenu, 0, NULL, 0, MF_BYPOSITION), - "GetMenuString on ownerdraw entry succeeded.\n"); - SetLastError(0xdeadbeef); - ret = GetMenuStringW( hmenu, 0, NULL, 0, MF_BYPOSITION); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - skip("GetMenuStringW is not implemented\n"); - else - ok (!ret, "GetMenuStringW on ownerdraw entry succeeded.\n"); - - DestroyMenu( hmenu ); -} - -/* define building blocks for the menu item info tests */ -static 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; -} - -static WCHAR *strcpyW( WCHAR *dst, const WCHAR *src ) -{ - WCHAR *p = dst; - while ((*p++ = *src++)); - return dst; -} - - -#define DMIINFF( i, e, field)\ - ok((int)((i)->field)==(int)((e)->field) || (int)((i)->field)==(0xffff & (int)((e)->field)), \ - "%s got 0x%x expected 0x%x\n", #field, (int)((i)->field), (int)((e)->field)); - -#define DUMPMIINF(s,i,e)\ -{\ - DMIINFF( i, e, fMask)\ - DMIINFF( i, e, fType)\ - DMIINFF( i, e, fState)\ - DMIINFF( i, e, wID)\ - DMIINFF( i, e, hSubMenu)\ - DMIINFF( i, e, hbmpChecked)\ - DMIINFF( i, e, hbmpUnchecked)\ - DMIINFF( i, e, dwItemData)\ - DMIINFF( i, e, dwTypeData)\ - DMIINFF( i, e, cch)\ - if( s==sizeof(MENUITEMINFOA)) DMIINFF( i, e, hbmpItem)\ -} - -/* insert menu item */ -#define TMII_INSMI( a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,\ - eret1)\ -{\ - MENUITEMINFOA info1=a1 b1,c1,d1,e1,f1,(void*)g1,(void*)h1,(void*)i1,j1,(void*)k1,l1,(void*)m1 n1;\ - HMENU hmenu = CreateMenu();\ - BOOL ret, stop = FALSE;\ - SetLastError( 0xdeadbeef);\ - if(ansi)strcpy( string, init);\ - else strcpyW( (WCHAR*)string, (WCHAR*)init);\ - if( ansi) ret = InsertMenuItemA(hmenu, 0, TRUE, &info1 );\ - else ret = InsertMenuItemW(hmenu, 0, TRUE, (MENUITEMINFOW*)&info1 );\ - if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)\ - {\ - skip("InsertMenuItem%s not implemented\n", ansi ? "A" : "W");\ - break;\ - }\ - if( !(eret1)) { ok( (eret1)==ret,"InsertMenuItem should have failed.\n");\ - stop = TRUE;\ - } else ok( (eret1)==ret,"InsertMenuItem failed, err %d\n",GetLastError());\ - - -/* GetMenuItemInfo + GetMenuString */ -#define TMII_GMII( a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,\ - a3,b3,c3,d3,e3,f3,g3,h3,i3,j3,k3,l3,m3,n3,\ - expname, eret2, eret3)\ -{\ - MENUITEMINFOA info2A=a2 b2,c2,d2,e2,f2,(void*)g2,(void*)h2,(void*)i2,j2,(void*)k2,l2,(void*)m2 n2;\ - MENUITEMINFOA einfoA=a3 b3,c3,d3,e3,f3,(void*)g3,(void*)h3,(void*)i3,j3,(void*)k3,l3,(void*)m3 n3;\ - MENUITEMINFOA *info2 = &info2A;\ - MENUITEMINFOA *einfo = &einfoA;\ - MENUITEMINFOW *info2W = (MENUITEMINFOW *)&info2A;\ - if( !stop) {\ - SetLastError( 0xdeadbeef);\ - ret = ansi ? GetMenuItemInfoA( hmenu, 0, TRUE, info2 ) :\ - GetMenuItemInfoW( hmenu, 0, TRUE, info2W );\ - if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)\ - {\ - skip("GetMenuItemInfo%s not implemented\n", ansi ? "A" : "W");\ - break;\ - }\ - if( !(eret2)) ok( (eret2)==ret,"GetMenuItemInfo should have failed.\n");\ - else { \ - ok( (eret2)==ret,"GetMenuItemInfo failed, err %d\n",GetLastError());\ - ret = memcmp( info2, einfo, sizeof einfoA);\ - /* ok( ret==0, "Got wrong menu item info data\n");*/\ - if( ret) DUMPMIINF(info2A.cbSize, &info2A, &einfoA)\ - if( einfo->dwTypeData == string) {\ - if(ansi) ok( !strncmp( expname, info2->dwTypeData, einfo->cch ), "menu item name differed \"%s\"\n",\ - einfo->dwTypeData ? einfo->dwTypeData: "");\ - else ok( !strncmpW( (WCHAR*)expname, (WCHAR*)info2->dwTypeData, einfo->cch ), "menu item name differed \"%s\"\n",\ - einfo->dwTypeData ? einfo->dwTypeData: "");\ - ret = ansi ? GetMenuStringA( hmenu, 0, string, 80, MF_BYPOSITION) :\ - GetMenuStringW( hmenu, 0, string, 80, MF_BYPOSITION);\ - if( (eret3)){\ - ok( ret, "GetMenuString failed, err %d\n",GetLastError());\ - }else\ - ok( !ret, "GetMenuString should have failed\n");\ - }\ - }\ - }\ -} - -#define TMII_DONE \ - RemoveMenu(hmenu, 0, TRUE );\ - DestroyMenu( hmenu );\ - DestroyMenu( submenu );\ -submenu = CreateMenu();\ -} -/* modify menu */ -#define TMII_MODM( flags, id, data, eret )\ -if( !stop) {\ - SetLastError( 0xdeadbeef);\ - if(ansi)ret = ModifyMenuA( hmenu, 0, flags, (UINT_PTR)id, (char*)data);\ - else ret = ModifyMenuW( hmenu, 0, flags, (UINT_PTR)id, (WCHAR*)data);\ - if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)\ - {\ - skip("ModifyMenu%s not implemented\n", ansi ? "A" : "W");\ - break;\ - }\ - if( !(eret)) ok( (eret)==ret,"ModifyMenuA should have failed.\n");\ - else ok( (eret)==ret,"ModifyMenuA failed, err %d\n",GetLastError());\ -} - -/* SetMenuItemInfo */ -#define TMII_SMII( a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,\ - eret1)\ -if( !stop) {\ - MENUITEMINFOA info1=a1 b1,c1,d1,e1,f1,(void*)g1,(void*)h1,(void*)i1,j1,(void*)k1,l1,(void*)m1 n1;\ - SetLastError( 0xdeadbeef);\ - if(ansi)strcpy( string, init);\ - else strcpyW( (WCHAR*)string, (WCHAR*)init);\ - if( ansi) ret = SetMenuItemInfoA(hmenu, 0, TRUE, &info1 );\ - else ret = SetMenuItemInfoW(hmenu, 0, TRUE, (MENUITEMINFOW*)&info1 );\ - if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)\ - {\ - skip("SetMenuItemInfo%s not implemented\n", ansi ? "A" : "W");\ - break;\ - }\ - if( !(eret1)) { ok( (eret1)==ret,"InsertMenuItem should have failed.\n");\ - stop = TRUE;\ - } else ok( (eret1)==ret,"InsertMenuItem failed, err %d\n",GetLastError());\ -} - - - -#define OK 1 -#define ER 0 - - -static void test_menu_iteminfo( void ) -{ - int S=sizeof( MENUITEMINFOA); - int ansi = TRUE; - char txtA[]="wine"; - char initA[]="XYZ"; - char emptyA[]=""; - WCHAR txtW[]={'W','i','n','e',0}; - WCHAR initW[]={'X','Y','Z',0}; - WCHAR emptyW[]={0}; - void *txt, *init, *empty, *string; - HBITMAP hbm = CreateBitmap(1,1,1,1,NULL); - char stringA[0x80]; - HMENU submenu=CreateMenu(); - - do { - if( ansi) {txt=txtA;init=initA;empty=emptyA;string=stringA;} - else {txt=txtW;init=initW;empty=emptyW;string=stringA;} - trace( "%s string %p hbm %p txt %p\n", ansi ? "ANSI tests: " : "Unicode tests:", string, hbm, txt); - /* test all combinations of MFT_STRING, MFT_OWNERDRAW and MFT_BITMAP */ - /* (since MFT_STRING is zero, there are four of them) */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, 0, 0, 0, 0, 0, 0, txt, 0, 0, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, 0, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, 0, 0, 0, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, hbm, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, }, - empty, OK, ER ) - TMII_DONE - /* not enough space for name*/ - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, NULL, 0, -9, }, - {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, NULL, 4, 0, }, - empty, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 5, -9, }, - {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, 0, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 4, -9, }, - {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 3, 0, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, NULL, 0, -9, }, - {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 0, 0, }, - empty, OK, ER ) - TMII_DONE - /* cannot combine MIIM_TYPE with some other flags */ - TMII_INSMI( {, S, MIIM_TYPE|MIIM_STRING, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, ER) - TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - empty, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE|MIIM_STRING, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - empty, ER, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE|MIIM_FTYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, ER) - TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - empty, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - empty, ER, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE|MIIM_BITMAP, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, 6, hbm, }, ER) - TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - empty, OK, OK ) - TMII_DONE - /* but succeeds with some others */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE|MIIM_SUBMENU, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE|MIIM_SUBMENU, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, 0, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE|MIIM_STATE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE|MIIM_STATE, MFT_STRING, 0, -9, 0, -9, -9, -9, string, 4, 0, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE|MIIM_ID, MFT_STRING, -1, 888, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE|MIIM_ID, MFT_STRING, -9, 888, 0, -9, -9, -9, string, 4, 0, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING, -1, -1, -1, -1, -1, 999, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING, -9, -9, 0, -9, -9, 999, string, 4, 0, }, - txt, OK, OK ) - TMII_DONE - /* to be continued */ - /* set text with MIIM_TYPE and retrieve with MIIM_STRING */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, -9, }, - txt, OK, OK ) - TMII_DONE - /* set text with MIIM_TYPE and retrieve with MIIM_STRING; MFT_OWNERDRAW causes an empty string */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 0, -9, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 0, -9, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 80, -9, }, - init, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK) - TMII_GMII ( {, S, 0, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, 0, -9, -9, -9, 0, -9, -9, -9, string, 80, -9, }, - init, OK, OK ) - TMII_DONE - /* contrary to MIIM_TYPE,you can set the text for an owner draw menu */ - TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 4, -9, }, - txt, OK, OK ) - TMII_DONE - /* same but retrieve with MIIM_TYPE */ - TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 0, -9, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 0, -9, }, - empty, OK, ER ) - TMII_DONE - - /* How is that with bitmaps? */ - TMII_INSMI( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_GMII ( {, S, MIIM_BITMAP|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_BITMAP|MIIM_FTYPE, 0, -9, -9, 0, -9, -9, -9, string, 80, hbm, }, - init, OK, ER ) - TMII_DONE - /* MIIM_BITMAP does not like MFT_BITMAP */ - TMII_INSMI( {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, ER) - TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - init, OK, OK ) - TMII_DONE - /* no problem with OWNERDRAWN */ - TMII_INSMI( {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_GMII ( {, S, MIIM_BITMAP|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 80, hbm, }, - init, OK, ER ) - TMII_DONE - /* setting MFT_BITMAP with MFT_FTYPE fails anyway */ - TMII_INSMI( {, S, MIIM_FTYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, ER) - TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - empty, OK, OK ) - TMII_DONE - - /* menu with submenu */ - TMII_INSMI( {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, -1, -1, -1, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_SUBMENU, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_SUBMENU, -9, -9, -9, submenu, -9, -9, -9, string, 80, -9, }, - init, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, -1, -1, -1, empty, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_SUBMENU, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_SUBMENU, -9, -9, -9, submenu, -9, -9, -9, string, 80, -9, }, - init, OK, ER ) - TMII_DONE - /* menu with submenu, without MIIM_SUBMENU the submenufield is cleared */ - TMII_INSMI( {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, -1, -1, -1, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 0, -9, }, - empty, OK, ER ) - TMII_GMII ( {, S, MIIM_SUBMENU|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, submenu, -9, -9, -9, string, 80, -9, }, - empty, OK, ER ) - TMII_DONE - /* menu with invalid submenu */ - TMII_INSMI( {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, 999, -1, -1, -1, txt, 0, -1, }, ER) - TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, - init, OK, ER ) - TMII_DONE - /* Separator */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, txt, 0, 0, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, 0, 0, 0, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP|MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, hbm, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP|MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, }, - empty, OK, ER ) - TMII_DONE - /* SEPARATOR and STRING go well together */ - /* BITMAP and STRING go well together */ - TMII_INSMI( {, S, MIIM_STRING|MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, hbm, }, - txt, OK, OK ) - TMII_DONE - /* BITMAP, SEPARATOR and STRING go well together */ - TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 4, hbm, }, - txt, OK, OK ) - TMII_DONE - /* last two tests, but use MIIM_TYPE to retrieve info */ - TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_STRING|MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP, -9, -9, 0, -9, -9, -9, hbm, 4, hbm, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_SEPARATOR|MFT_BITMAP, -9, -9, 0, -9, -9, -9, hbm, 4, hbm, }, - txt, OK, OK ) - TMII_DONE - /* same three with MFT_OWNERDRAW */ - TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_SEPARATOR|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 4, hbm, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_SEPARATOR|MFT_BITMAP|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 4, hbm, }, - txt, OK, OK ) - TMII_DONE - - TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE|MIIM_ID, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, }, - txt, OK, OK ) - TMII_DONE - /* test with modifymenu: string is preserved after setting OWNERDRAW */ - TMII_INSMI( {, S, MIIM_STRING, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK) - TMII_MODM( MFT_OWNERDRAW, -1, 787, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_DATA, MFT_OWNERDRAW, -9, -9, 0, -9, -9, 787, string, 4, -9, }, - txt, OK, OK ) - TMII_DONE - /* same with bitmap: now the text is cleared */ - TMII_INSMI( {, S, MIIM_STRING, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK) - TMII_MODM( MFT_BITMAP, 545, hbm, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_BITMAP, -9, 545, 0, -9, -9, -9, string, 0, hbm, }, - empty, OK, ER ) - TMII_DONE - /* start with bitmap: now setting text clears it (though he flag is raised) */ - TMII_INSMI( {, S, MIIM_BITMAP, MFT_STRING, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_STRING, -9, 0, 0, -9, -9, -9, string, 0, hbm, }, - empty, OK, ER ) - TMII_MODM( MFT_STRING, 545, txt, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_STRING, -9, 545, 0, -9, -9, -9, string, 4, 0, }, - txt, OK, OK ) - TMII_DONE - /*repeat with text NULL */ - TMII_INSMI( {, S, MIIM_BITMAP, MFT_STRING, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_MODM( MFT_STRING, 545, NULL, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_SEPARATOR, -9, 545, 0, -9, -9, -9, string, 0, 0, }, - empty, OK, ER ) - TMII_DONE - /* repeat with text "" */ - TMII_INSMI( {, S, MIIM_BITMAP, -1 , -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_MODM( MFT_STRING, 545, empty, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_STRING, -9, 545, 0, -9, -9, -9, string, 0, 0, }, - empty, OK, ER ) - TMII_DONE - /* start with bitmap: set ownerdraw */ - TMII_INSMI( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_MODM( MFT_OWNERDRAW, -1, 232, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_DATA, MFT_OWNERDRAW, -9, -9, 0, -9, -9, 232, string, 0, hbm, }, - empty, OK, ER ) - TMII_DONE - /* ask nothing */ - TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, 0, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, 0, -9, -9, -9, 0, -9, -9, -9, string, 80, -9, }, - init, OK, OK ) - TMII_DONE - /* some tests with small cbSize: the hbmpItem is to be ignored */ - TMII_INSMI( {, S - 4, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, NULL, 0, NULL, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S - 4, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_GMII ( {, S, MIIM_BITMAP|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 80, NULL, }, - init, OK, ER ) - TMII_DONE - TMII_INSMI( {, S - 4, MIIM_STRING|MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, NULL, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S - 4, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S - 4, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, }, - txt, OK, OK ) - TMII_DONE - TMII_INSMI( {, S - 4, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_SEPARATOR|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, }, - txt, OK, OK ) - TMII_DONE - /* MIIM_TYPE by itself does not get/set the dwItemData for OwnerDrawn menus */ - TMII_INSMI( {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, 343, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, 343, 0, 0, 0, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, 343, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, 0, 0, 0, }, - empty, OK, ER ) - TMII_DONE - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, 343, txt, 0, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, 0, 0, 0, 0, }, - empty, OK, ER ) - TMII_DONE - /* set a string menu to ownerdraw with MIIM_TYPE */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -2, -2, -2, -2, -2, -2, txt, -2, -2, }, OK) - TMII_SMII( {, S, MIIM_TYPE, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 4, -9, }, - txt, OK, OK ) - TMII_DONE - /* test with modifymenu add submenu */ - TMII_INSMI( {, S, MIIM_STRING, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK) - TMII_MODM( MF_POPUP, submenu, txt, OK) - TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_SUBMENU, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_FTYPE|MIIM_STRING|MIIM_SUBMENU, MFT_STRING, -9, -9, submenu, -9, -9, -9, string, 4, -9, }, - txt, OK, OK ) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, 0, }, - txt, OK, OK ) - TMII_DONE - /* MFT_SEPARATOR bit is kept when the text is added */ - TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK) - TMII_SMII( {, S, MIIM_STRING, -1, -1, -1, -1, -1, -1, -1, txt, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_STRING|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 4, -9, }, - txt, OK, OK ) - TMII_DONE - /* MFT_SEPARATOR bit is kept when bitmap is added */ - TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK) - TMII_SMII( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK) - TMII_GMII ( {, S, MIIM_BITMAP|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, }, - {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 80, hbm, }, - init, OK, ER ) - TMII_DONE - /* Bitmaps inserted with MIIM_TYPE and MFT_BITMAP: - Only the low word of the dwTypeData is used. - Use a magic bitmap here (Word 95 uses this to create its MDI menu buttons) */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -1, -1, -1, -1, -1, -1, MAKELONG(HBMMENU_MBAR_CLOSE, 0x1234), -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -9, -9, 0, -9, -9, -9, HBMMENU_MBAR_CLOSE, 0, HBMMENU_MBAR_CLOSE, }, - empty, OK, OK ) - TMII_DONE - /* Type flags */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, }, - empty, OK, OK ) - TMII_DONE - /* State flags */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK) - TMII_SMII( {, S, MIIM_STATE, -1, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, -1, -1, -1, -1, -1, -1, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_STATE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_STATE, -9, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, -9, 0, -9, -9, -9, -9, -9, -9, }, - empty, OK, OK ) - TMII_DONE - /* The style MFT_RADIOCHECK cannot be set with MIIM_CHECKMARKS only */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK) - TMII_SMII( {, S, MIIM_CHECKMARKS, MFT_RADIOCHECK, -1, -1, -1, hbm, hbm, -1, -1, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_CHECKMARKS | MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_CHECKMARKS | MIIM_TYPE, MFT_BITMAP, -9, -9, 0, hbm, hbm, -9, hbm, 0, hbm, }, - empty, OK, OK ) - TMII_DONE - /* MFT_BITMAP is added automatically by GetMenuItemInfo() for MIIM_TYPE */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK) - TMII_SMII( {, S, MIIM_FTYPE, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, 0x1234, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, -9, -9, -9, }, - empty, OK, OK ) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP | MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, }, - empty, OK, OK ) - TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, -9, -9, -9, }, - empty, OK, OK ) - TMII_SMII( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, NULL, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 0, NULL, }, - empty, OK, OK ) - TMII_DONE - /* Bitmaps inserted with MIIM_TYPE and MFT_BITMAP: - Only the low word of the dwTypeData is used. - Use a magic bitmap here (Word 95 uses this to create its MDI menu buttons) */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -1, -1, -1, -1, -1, -1, MAKELONG(HBMMENU_MBAR_CLOSE, 0x1234), -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -9, -9, 0, -9, -9, -9, HBMMENU_MBAR_CLOSE, 0, HBMMENU_MBAR_CLOSE, }, - empty, OK, OK ) - TMII_DONE - /* Type flags */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, }, - empty, OK, OK ) - TMII_DONE - /* State flags */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK) - TMII_SMII( {, S, MIIM_STATE, -1, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, -1, -1, -1, -1, -1, -1, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_STATE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_STATE, -9, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, -9, 0, -9, -9, -9, -9, -9, -9, }, - empty, OK, OK ) - TMII_DONE - /* The style MFT_RADIOCHECK cannot be set with MIIM_CHECKMARKS only */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK) - TMII_SMII( {, S, MIIM_CHECKMARKS, MFT_RADIOCHECK, -1, -1, -1, hbm, hbm, -1, -1, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_CHECKMARKS | MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_CHECKMARKS | MIIM_TYPE, MFT_BITMAP, -9, -9, 0, hbm, hbm, -9, hbm, 0, hbm, }, - empty, OK, OK ) - TMII_DONE - /* MFT_BITMAP is added automatically by GetMenuItemInfo() for MIIM_TYPE */ - TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK) - TMII_SMII( {, S, MIIM_FTYPE, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, 0x1234, -1, -1, }, OK) - TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, -9, -9, -9, }, - empty, OK, OK ) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_TYPE, MFT_BITMAP | MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, }, - empty, OK, OK ) - TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, -9, -9, -9, }, - empty, OK, OK ) - TMII_SMII( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, NULL, }, OK) - TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, }, - {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 0, NULL, }, - empty, OK, OK ) - TMII_DONE - } while( !(ansi = !ansi) ); - DeleteObject( hbm); -} - -/* - The following tests try to confirm the algorithm used to return the menu items - when there is a collision between a menu item and a popup menu - */ -static void test_menu_search_bycommand( void ) -{ - HMENU hmenu, hmenuSub, hmenuSub2; - MENUITEMINFO info; - BOOL rc; - UINT id; - char strback[0x80]; - char strIn[0x80]; - static CHAR menuitem[] = "MenuItem", - menuitem2[] = "MenuItem 2"; - - /* Case 1: Menu containing a menu item */ - hmenu = CreateMenu(); - - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - info.fType = MFT_STRING; - strcpy(strIn, "Case 1 MenuItem"); - info.dwTypeData = strIn; - info.wID = (UINT) 0x1234; - - rc = InsertMenuItem(hmenu, 0, TRUE, &info ); - ok (rc, "Inserting the menuitem failed\n"); - - id = GetMenuItemID(hmenu, 0); - ok (id == 0x1234, "Getting the menuitem id failed(gave %x)\n", id); - - /* Confirm the menuitem was given the id supplied (getting by position) */ - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING; - info.dwTypeData = strback; - info.cch = sizeof(strback); - - rc = GetMenuItemInfo(hmenu, 0, TRUE, &info); /* Get by position */ - ok (rc, "Getting the menu items info failed\n"); - ok (info.wID == 0x1234, "IDs differ for the menuitem\n"); - ok (!strcmp(info.dwTypeData, "Case 1 MenuItem"), "Returned item has wrong label\n"); - - /* Search by id - Should return the item */ - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING; - info.dwTypeData = strback; - info.cch = sizeof(strback); - rc = GetMenuItemInfo(hmenu, 0x1234, FALSE, &info); /* Get by ID */ - - ok (rc, "Getting the menu items info failed\n"); - ok (info.wID == 0x1234, "IDs differ for the menuitem\n"); - ok (!strcmp(info.dwTypeData, "Case 1 MenuItem"), "Returned item has wrong label\n"); - - DestroyMenu( hmenu ); - - /* Case 2: Menu containing a popup menu */ - hmenu = CreateMenu(); - hmenuSub = CreateMenu(); - - strcpy(strIn, "Case 2 SubMenu"); - rc = InsertMenu(hmenu, 0, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT_PTR)hmenuSub, strIn); - ok (rc, "Inserting the popup menu into the main menu failed\n"); - - id = GetMenuItemID(hmenu, 0); - ok (id == -1, "Getting the menuitem id unexpectedly worked (gave %x)\n", id); - - /* Confirm the menuitem itself was given an id the same as the HMENU, (getting by position) */ - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING; - info.dwTypeData = strback; - info.cch = sizeof(strback); - info.wID = 0xdeadbeef; - - rc = GetMenuItemInfo(hmenu, 0, TRUE, &info); /* Get by position */ - ok (rc, "Getting the menu items info failed\n"); - ok (info.wID == (UINT_PTR)hmenuSub, "IDs differ for the menuitem\n"); - ok (!strcmp(info.dwTypeData, "Case 2 SubMenu"), "Returned item has wrong label\n"); - - /* Search by id - returns the popup menu itself */ - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING; - info.dwTypeData = strback; - info.cch = sizeof(strback); - rc = GetMenuItemInfo(hmenu, (UINT_PTR)hmenuSub, FALSE, &info); /* Get by ID */ - - ok (rc, "Getting the menu items info failed\n"); - ok (info.wID == (UINT_PTR)hmenuSub, "IDs differ for the popup menu\n"); - ok (!strcmp(info.dwTypeData, "Case 2 SubMenu"), "Returned item has wrong label\n"); - - /* - Now add an item after it with the same id - */ - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - info.fType = MFT_STRING; - strcpy(strIn, "Case 2 MenuItem 1"); - info.dwTypeData = strIn; - info.wID = (UINT_PTR) hmenuSub; - rc = InsertMenuItem(hmenu, -1, TRUE, &info ); - ok (rc, "Inserting the menuitem failed\n"); - - /* Search by id - returns the item which follows the popup menu */ - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING; - info.dwTypeData = strback; - info.cch = sizeof(strback); - rc = GetMenuItemInfo(hmenu, (UINT_PTR)hmenuSub, FALSE, &info); /* Get by ID */ - - ok (rc, "Getting the menu items info failed\n"); - ok (info.wID == (UINT_PTR)hmenuSub, "IDs differ for the popup menu\n"); - ok (!strcmp(info.dwTypeData, "Case 2 MenuItem 1"), "Returned item has wrong label (%s)\n", info.dwTypeData); - - /* - Now add an item before the popup (with the same id) - */ - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - info.fType = MFT_STRING; - strcpy(strIn, "Case 2 MenuItem 2"); - info.dwTypeData = strIn; - info.wID = (UINT_PTR) hmenuSub; - rc = InsertMenuItem(hmenu, 0, TRUE, &info ); - ok (rc, "Inserting the menuitem failed\n"); - - /* Search by id - returns the item which precedes the popup menu */ - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING; - info.dwTypeData = strback; - info.cch = sizeof(strback); - rc = GetMenuItemInfo(hmenu, (UINT_PTR)hmenuSub, FALSE, &info); /* Get by ID */ - - ok (rc, "Getting the menu items info failed\n"); - ok (info.wID == (UINT_PTR)hmenuSub, "IDs differ for the popup menu\n"); - ok (!strcmp(info.dwTypeData, "Case 2 MenuItem 2"), "Returned item has wrong label (%s)\n", info.dwTypeData); - - DestroyMenu( hmenu ); - DestroyMenu( hmenuSub ); - - /* - Case 3: Menu containing a popup menu which in turn - contains 2 items with the same id as the popup itself - */ - - hmenu = CreateMenu(); - hmenuSub = CreateMenu(); - - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - info.fType = MFT_STRING; - info.dwTypeData = menuitem; - info.wID = (UINT_PTR) hmenuSub; /* Enforce id collisions with the hmenu of the popup submenu*/ - - rc = InsertMenu(hmenu, 0, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT_PTR)hmenuSub, "Submenu"); - ok (rc, "Inserting the popup menu into the main menu failed\n"); - - rc = InsertMenuItem(hmenuSub, 0, TRUE, &info ); - ok (rc, "Inserting the sub menu menuitem failed\n"); - - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - info.fType = MFT_STRING; - info.dwTypeData = menuitem2; - info.wID = (UINT_PTR) hmenuSub; /* Enforce id collisions with the hmenu of the popup submenu*/ - - rc = InsertMenuItem(hmenuSub, 1, TRUE, &info ); - ok (rc, "Inserting the sub menu menuitem 2 failed\n"); - - /* Prove that you can't query the id of a popup directly (By position) */ - id = GetMenuItemID(hmenu, 0); - ok (id == -1, "Getting the sub menu id should have failed because its a popup (gave %x)\n", id); - - /* Prove getting the item info via ID returns the first item (not the popup or 2nd item)*/ - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_STRING | MIIM_ID; - info.dwTypeData = strback; - info.cch = sizeof(strback); - - rc = GetMenuItemInfo(hmenu, (UINT_PTR)hmenuSub, FALSE, &info); - ok (rc, "Getting the menus info failed\n"); - ok (info.wID == (UINT_PTR)hmenuSub, "IDs differ for popup menu\n"); - ok (!strcmp(info.dwTypeData, "MenuItem"), "Returned item has wrong label (%s)\n", info.dwTypeData); - DestroyMenu( hmenu ); - DestroyMenu( hmenuSub ); - - /* - Case 4: Menu containing 2 popup menus, the second - contains 2 items with the same id as the first popup menu - */ - hmenu = CreateMenu(); - hmenuSub = CreateMenu(); - hmenuSub2 = CreateMenu(); - - rc = InsertMenu(hmenu, 0, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT_PTR)hmenuSub, "Submenu"); - ok (rc, "Inserting the popup menu into the main menu failed\n"); - - rc = InsertMenu(hmenu, 1, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT_PTR)hmenuSub2, "Submenu2"); - ok (rc, "Inserting the popup menu into the main menu failed\n"); - - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - info.fType = MFT_STRING; - info.dwTypeData = menuitem; - info.wID = (UINT_PTR) hmenuSub; /* Enforce id collisions with the hmenu of the popup submenu*/ - - rc = InsertMenuItem(hmenuSub2, 0, TRUE, &info ); - ok (rc, "Inserting the sub menu menuitem failed\n"); - - memset( &info, 0, sizeof info ); - info.cbSize = sizeof info; - info.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - info.fType = MFT_STRING; - info.dwTypeData = menuitem2; - info.wID = (UINT_PTR) hmenuSub; /* Enforce id collisions with the hmenu of the popup submenu*/ - - rc = InsertMenuItem(hmenuSub2, 1, TRUE, &info ); - ok (rc, "Inserting the sub menu menuitem 2 failed\n"); - - /* Prove getting the item info via ID returns the first item (not the popup or 2nd item)*/ - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_STRING | MIIM_ID; - info.dwTypeData = strback; - info.cch = sizeof(strback); - - rc = GetMenuItemInfo(hmenu, (UINT_PTR)hmenuSub, FALSE, &info); - ok (rc, "Getting the menus info failed\n"); - ok (info.wID == (UINT_PTR)hmenuSub, "IDs differ for popup menu\n"); - ok (!strcmp(info.dwTypeData, "MenuItem"), "Returned item has wrong label (%s)\n", info.dwTypeData); - - memset( &info, 0, sizeof info ); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_STRING | MIIM_ID; - info.dwTypeData = strback; - info.cch = sizeof(strback); - - rc = GetMenuItemInfo(hmenu, (UINT_PTR)hmenuSub2, FALSE, &info); - ok (rc, "Getting the menus info failed\n"); - ok (info.wID == (UINT)hmenuSub2, "IDs differ for popup menu\n"); - ok (!strcmp(info.dwTypeData, "Submenu2"), "Returned item has wrong label (%s)\n", info.dwTypeData); - - DestroyMenu( hmenu ); - DestroyMenu( hmenuSub ); - DestroyMenu( hmenuSub2 ); - - - /* - Case 5: Menu containing a popup menu which in turn - contains an item with a different id than the popup menu. - This tests the fallback to a popup menu ID. - */ - - hmenu = CreateMenu(); - hmenuSub = CreateMenu(); - - rc = AppendMenu(hmenu, MF_POPUP | MF_STRING, (UINT_PTR)hmenuSub, "Submenu"); - ok (rc, "Appending the popup menu to the main menu failed\n"); - - rc = AppendMenu(hmenuSub, MF_STRING, 102, "Item"); - ok (rc, "Appending the item to the popup menu failed\n"); - - /* Set the ID for hmenuSub */ - info.cbSize = sizeof(info); - info.fMask = MIIM_ID; - info.wID = 101; - - rc = SetMenuItemInfo(hmenu, 0, TRUE, &info); - ok(rc, "Setting the ID for the popup menu failed\n"); - - /* Check if the ID has been set */ - info.wID = 0; - rc = GetMenuItemInfo(hmenu, 0, TRUE, &info); - ok(rc, "Getting the ID for the popup menu failed\n"); - ok(info.wID == 101, "The ID for the popup menu has not been set\n"); - - /* Prove getting the item info via ID returns the popup menu */ - memset( &info, 0, sizeof(info)); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_STRING | MIIM_ID; - info.dwTypeData = strback; - info.cch = sizeof(strback); - - rc = GetMenuItemInfo(hmenu, 101, FALSE, &info); - ok (rc, "Getting the menu info failed\n"); - ok (info.wID == 101, "IDs differ\n"); - ok (!strcmp(info.dwTypeData, "Submenu"), "Returned item has wrong label (%s)\n", info.dwTypeData); - - /* Also look for the menu item */ - memset( &info, 0, sizeof(info)); - strback[0] = 0x00; - info.cbSize = sizeof(MENUITEMINFO); - info.fMask = MIIM_STRING | MIIM_ID; - info.dwTypeData = strback; - info.cch = sizeof(strback); - - rc = GetMenuItemInfo(hmenu, 102, FALSE, &info); - ok (rc, "Getting the menu info failed\n"); - ok (info.wID == 102, "IDs differ\n"); - ok (!strcmp(info.dwTypeData, "Item"), "Returned item has wrong label (%s)\n", info.dwTypeData); - - DestroyMenu(hmenu); - DestroyMenu(hmenuSub); -} - -struct menu_item_pair_s { - UINT uMenu; /* 1 - top level menu, [0-Menu 1-Enabled 2-Disabled] - * 2 - 2nd level menu, [0-Popup 1-Enabled 2-Disabled] - * 3 - 3rd level menu, [0-Enabled 1-Disabled] */ - UINT uItem; -}; - -static struct menu_mouse_tests_s { - DWORD type; - struct menu_item_pair_s menu_item_pairs[5]; /* for mousing */ - WORD wVk[5]; /* keys */ - BOOL bMenuVisible; - BOOL _todo_wine; -} menu_tests[] = { - /* for each test, send keys or clicks and check for menu visibility */ - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, /* test 0 */ - { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, - - { INPUT_MOUSE, {{1, 2}, {0}}, {0}, TRUE, TRUE }, /* test 18 */ - { INPUT_MOUSE, {{1, 1}, {0}}, {0}, FALSE, FALSE }, - { INPUT_MOUSE, {{1, 0}, {0}}, {0}, TRUE, TRUE }, - { INPUT_MOUSE, {{1, 1}, {0}}, {0}, FALSE, FALSE }, - { INPUT_MOUSE, {{1, 0}, {2, 2}, {0}}, {0}, TRUE, TRUE }, - { INPUT_MOUSE, {{2, 1}, {0}}, {0}, FALSE, FALSE }, - { INPUT_MOUSE, {{1, 0}, {2, 0}, {0}}, {0}, TRUE, TRUE }, - { INPUT_MOUSE, {{3, 0}, {0}}, {0}, FALSE, FALSE }, - { INPUT_MOUSE, {{1, 0}, {2, 0}, {0}}, {0}, TRUE, TRUE }, - { INPUT_MOUSE, {{3, 1}, {0}}, {0}, TRUE, TRUE }, - { INPUT_MOUSE, {{1, 1}, {0}}, {0}, FALSE, FALSE }, - { -1 } -}; - -static void send_key(WORD wVk) -{ - TEST_INPUT i[2]; - memset(&i, 0, 2*sizeof(INPUT)); - i[0].type = i[1].type = INPUT_KEYBOARD; - i[0].u.ki.wVk = i[1].u.ki.wVk = wVk; - i[1].u.ki.dwFlags = KEYEVENTF_KEYUP; - pSendInput(2, (INPUT *) i, sizeof(INPUT)); -} - -static void click_menu(HANDLE hWnd, struct menu_item_pair_s *mi) -{ - HMENU hMenu = hMenus[mi->uMenu]; - TEST_INPUT i[3]; - MSG msg; - RECT r; - int screen_w = GetSystemMetrics(SM_CXSCREEN); - int screen_h = GetSystemMetrics(SM_CYSCREEN); - - GetMenuItemRect(mi->uMenu > 2 ? NULL : hWnd, hMenu, mi->uItem, &r); - - memset(&i, 0, 3*sizeof(INPUT)); - i[0].type = i[1].type = i[2].type = INPUT_MOUSE; - i[0].u.mi.dx = i[1].u.mi.dx = i[2].u.mi.dx - = ((r.left + 5) * 65535) / screen_w; - i[0].u.mi.dy = i[1].u.mi.dy = i[2].u.mi.dy - = ((r.top + 5) * 65535) / screen_h; - i[0].u.mi.dwFlags = i[1].u.mi.dwFlags = i[2].u.mi.dwFlags - = MOUSEEVENTF_ABSOLUTE; - i[0].u.mi.dwFlags |= MOUSEEVENTF_MOVE; - i[1].u.mi.dwFlags |= MOUSEEVENTF_LEFTDOWN; - i[2].u.mi.dwFlags |= MOUSEEVENTF_LEFTUP; - pSendInput(3, (INPUT *) i, sizeof(INPUT)); - - /* hack to prevent mouse message buildup in Wine */ - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg ); -} - -static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter) -{ - int i, j; - HANDLE hWnd = lpParameter; - - Sleep(500); - /* mixed keyboard/mouse test */ - for (i = 0; menu_tests[i].type != -1; i++) - { - int elapsed = 0; - - if (menu_tests[i].type == INPUT_KEYBOARD) - for (j = 0; menu_tests[i].wVk[j] != 0; j++) - send_key(menu_tests[i].wVk[j]); - else - for (j = 0; menu_tests[i].menu_item_pairs[j].uMenu != 0; j++) - click_menu(hWnd, &menu_tests[i].menu_item_pairs[j]); - - while (menu_tests[i].bMenuVisible != bMenuVisible) - { - if (elapsed > 200) - break; - elapsed += 20; - Sleep(20); - } - - if (menu_tests[i]._todo_wine) - { - todo_wine { - ok(menu_tests[i].bMenuVisible == bMenuVisible, "test %d\n", i); - } - } - else - ok(menu_tests[i].bMenuVisible == bMenuVisible, "test %d\n", i); - } - return 0; -} - -static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, - LPARAM lParam) -{ - switch (msg) { - case WM_ENTERMENULOOP: - bMenuVisible = TRUE; - break; - case WM_EXITMENULOOP: - bMenuVisible = FALSE; - break; - default: - return( DefWindowProcA( hWnd, msg, wParam, lParam ) ); - } - return 0; -} - -static void test_menu_input(void) { - MSG msg; - WNDCLASSA wclass; - HINSTANCE hInstance = GetModuleHandleA( NULL ); - HANDLE hThread, hWnd; - - wclass.lpszClassName = "MenuTestClass"; - wclass.style = CS_HREDRAW | CS_VREDRAW; - wclass.lpfnWndProc = WndProc; - wclass.hInstance = hInstance; - wclass.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION ); - wclass.hCursor = LoadCursorA( NULL, (LPSTR)IDC_ARROW); - wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1); - wclass.lpszMenuName = 0; - wclass.cbClsExtra = 0; - wclass.cbWndExtra = 0; - assert (RegisterClassA( &wclass )); - assert (hWnd = CreateWindowA( wclass.lpszClassName, "MenuTest", - WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, - 400, 200, NULL, NULL, hInstance, NULL) ); - - /* fixed menus */ - hMenus[3] = CreatePopupMenu(); - AppendMenu(hMenus[3], MF_STRING, 0, "&Enabled"); - AppendMenu(hMenus[3], MF_STRING|MF_DISABLED, 0, "&Disabled"); - - hMenus[2] = CreatePopupMenu(); - AppendMenu(hMenus[2], MF_STRING|MF_POPUP, (UINT_PTR) hMenus[3], "&Popup"); - AppendMenu(hMenus[2], MF_STRING, 0, "&Enabled"); - AppendMenu(hMenus[2], MF_STRING|MF_DISABLED, 0, "&Disabled"); - - hMenus[1] = CreateMenu(); - AppendMenu(hMenus[1], MF_STRING|MF_POPUP, (UINT_PTR) hMenus[2], "&Menu"); - AppendMenu(hMenus[1], MF_STRING, 0, "&Enabled"); - AppendMenu(hMenus[1], MF_STRING|MF_DISABLED, 0, "&Disabled"); - - SetMenu(hWnd, hMenus[1]); - ShowWindow(hWnd, SW_SHOW); - UpdateWindow(hWnd); - - hThread = CreateThread(NULL, 0, test_menu_input_thread, hWnd, 0, NULL); - while(1) - { - if (WAIT_TIMEOUT != WaitForSingleObject(hThread, 50)) - break; - while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); - } - DestroyWindow(hWnd); -} - -static void test_menu_flags( void ) -{ - HMENU hMenu, hPopupMenu; - - hMenu = CreateMenu(); - hPopupMenu = CreatePopupMenu(); - - AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT)hPopupMenu, "Popup"); - - AppendMenu(hPopupMenu, MF_STRING | MF_HILITE | MF_DEFAULT, 101, "Item 1"); - InsertMenu(hPopupMenu, 1, MF_BYPOSITION | MF_STRING | MF_HILITE | MF_DEFAULT, 102, "Item 2"); - AppendMenu(hPopupMenu, MF_STRING, 103, "Item 3"); - ModifyMenu(hPopupMenu, 2, MF_BYPOSITION | MF_STRING | MF_HILITE | MF_DEFAULT, 103, "Item 3"); - - ok(GetMenuState(hPopupMenu, 0, MF_BYPOSITION) & MF_HILITE, - "AppendMenu should accept MF_HILITE\n"); - ok(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE, - "InsertMenu should accept MF_HILITE\n"); - ok(GetMenuState(hPopupMenu, 2, MF_BYPOSITION) & MF_HILITE, - "ModifyMenu should accept MF_HILITE\n"); - - ok(!(GetMenuState(hPopupMenu, 0, MF_BYPOSITION) & MF_DEFAULT), - "AppendMenu must not accept MF_DEFAULT\n"); - ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_DEFAULT), - "InsertMenu must not accept MF_DEFAULT\n"); - ok(!(GetMenuState(hPopupMenu, 2, MF_BYPOSITION) & MF_DEFAULT), - "ModifyMenu must not accept MF_DEFAULT\n"); - - DestroyMenu(hMenu); -} - -static void test_menu_hilitemenuitem( void ) -{ - HMENU hMenu, hPopupMenu; - WNDCLASSA wclass; - HWND hWnd; - - wclass.lpszClassName = "HiliteMenuTestClass"; - wclass.style = CS_HREDRAW | CS_VREDRAW; - wclass.lpfnWndProc = WndProc; - wclass.hInstance = GetModuleHandleA( NULL ); - wclass.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION ); - wclass.hCursor = LoadCursorA( NULL, (LPSTR)IDC_ARROW); - wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1); - wclass.lpszMenuName = 0; - wclass.cbClsExtra = 0; - wclass.cbWndExtra = 0; - assert (RegisterClassA( &wclass )); - assert (hWnd = CreateWindowA( wclass.lpszClassName, "HiliteMenuTest", - WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, - 400, 200, NULL, NULL, wclass.hInstance, NULL) ); - - hMenu = CreateMenu(); - hPopupMenu = CreatePopupMenu(); - - AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT)hPopupMenu, "Popup"); - - AppendMenu(hPopupMenu, MF_STRING, 101, "Item 1"); - AppendMenu(hPopupMenu, MF_STRING, 102, "Item 2"); - AppendMenu(hPopupMenu, MF_STRING, 103, "Item 3"); - - SetMenu(hWnd, hMenu); - - /* test invalid arguments */ - - ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE), - "HiliteMenuItem: Item 2 is hilited\n"); - - SetLastError(0xdeadbeef); - todo_wine - { - ok(!HiliteMenuItem(NULL, hPopupMenu, 1, MF_HILITE | MF_BYPOSITION), - "HiliteMenuItem: call should have failed.\n"); - } - ok(GetLastError() == 0xdeadbeef || /* 9x */ - GetLastError() == ERROR_INVALID_WINDOW_HANDLE /* NT */, - "HiliteMenuItem: expected error ERROR_INVALID_WINDOW_HANDLE, got: %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ok(!HiliteMenuItem(hWnd, NULL, 1, MF_HILITE | MF_BYPOSITION), - "HiliteMenuItem: call should have failed.\n"); - ok(GetLastError() == 0xdeadbeef || /* 9x */ - GetLastError() == ERROR_INVALID_MENU_HANDLE /* NT */, - "HiliteMenuItem: expected error ERROR_INVALID_MENU_HANDLE, got: %d\n", GetLastError()); - - ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE), - "HiliteMenuItem: Item 2 is hilited\n"); - - /* either MF_HILITE or MF_UNHILITE *and* MF_BYCOMMAND or MF_BYPOSITION need to be set */ - - SetLastError(0xdeadbeef); - ok(HiliteMenuItem(hWnd, hPopupMenu, 1, MF_BYPOSITION), - "HiliteMenuItem: call should have succeeded.\n"); - ok(GetLastError() == 0xdeadbeef, - "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError()); - - ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE), - "HiliteMenuItem: Item 2 is hilited\n"); - - SetLastError(0xdeadbeef); - todo_wine - { - ok(HiliteMenuItem(hWnd, hPopupMenu, 1, MF_HILITE), - "HiliteMenuItem: call should have succeeded.\n"); - } - ok(GetLastError() == 0xdeadbeef, - "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError()); - - ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE), - "HiliteMenuItem: Item 2 is hilited\n"); - - /* hilite a menu item (by position) */ - - SetLastError(0xdeadbeef); - ok(HiliteMenuItem(hWnd, hPopupMenu, 1, MF_HILITE | MF_BYPOSITION), - "HiliteMenuItem: call should not have failed.\n"); - ok(GetLastError() == 0xdeadbeef, - "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError()); - - todo_wine - { - ok(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE, - "HiliteMenuItem: Item 2 is not hilited\n"); - } - - /* unhilite a menu item (by position) */ - - SetLastError(0xdeadbeef); - ok(HiliteMenuItem(hWnd, hPopupMenu, 1, MF_UNHILITE | MF_BYPOSITION), - "HiliteMenuItem: call should not have failed.\n"); - ok(GetLastError() == 0xdeadbeef, - "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError()); - - ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE), - "HiliteMenuItem: Item 2 is hilited\n"); - - /* hilite a menu item (by command) */ - - SetLastError(0xdeadbeef); - ok(HiliteMenuItem(hWnd, hPopupMenu, 103, MF_HILITE | MF_BYCOMMAND), - "HiliteMenuItem: call should not have failed.\n"); - ok(GetLastError() == 0xdeadbeef, - "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError()); - - todo_wine - { - ok(GetMenuState(hPopupMenu, 2, MF_BYPOSITION) & MF_HILITE, - "HiliteMenuItem: Item 3 is not hilited\n"); - } - - /* unhilite a menu item (by command) */ - - SetLastError(0xdeadbeef); - ok(HiliteMenuItem(hWnd, hPopupMenu, 103, MF_UNHILITE | MF_BYCOMMAND), - "HiliteMenuItem: call should not have failed.\n"); - ok(GetLastError() == 0xdeadbeef, - "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError()); - - ok(!(GetMenuState(hPopupMenu, 2, MF_BYPOSITION) & MF_HILITE), - "HiliteMenuItem: Item 3 is hilited\n"); - - DestroyWindow(hWnd); -} - -static void check_menu_items(HMENU hmenu, UINT checked_cmd, UINT checked_type, - UINT checked_state) -{ - UINT i, count; - - count = GetMenuItemCount(hmenu); - - for (i = 0; i < count; i++) - { - BOOL ret; - MENUITEMINFO mii; - - memset(&mii, 0, sizeof(mii)); - mii.cbSize = sizeof(mii); - mii.fMask = MIIM_FTYPE | MIIM_STATE | MIIM_ID | MIIM_SUBMENU; - ret = GetMenuItemInfo(hmenu, i, TRUE, &mii); - ok(ret, "GetMenuItemInfo(%u) failed\n", i); -#if 0 - trace("item #%u: fType %04x, fState %04x, wID %u, hSubMenu %p\n", - i, mii.fType, mii.fState, mii.wID, mii.hSubMenu); -#endif - if (mii.hSubMenu) - { - ok((HMENU)mii.wID == mii.hSubMenu, "id %u: wID should be equal to hSubMenu\n", checked_cmd); - check_menu_items(mii.hSubMenu, checked_cmd, checked_type, checked_state); - } - else - { - if (mii.wID == checked_cmd) - { - ok(mii.fType == checked_type, "id %u: expected fType %04x, got %04x\n", checked_cmd, checked_type, mii.fType); - ok(mii.fState == checked_state, "id %u: expected fState %04x, got %04x\n", checked_cmd, checked_state, mii.fState); - ok(mii.wID != 0, "id %u: not expected wID 0\n", checked_cmd); - } - else - { - ok(mii.fType != MFT_RADIOCHECK, "id %u: not expected fType MFT_RADIOCHECK on cmd %u\n", checked_cmd, mii.wID); - - if (mii.fType == MFT_SEPARATOR) - { - ok(mii.fState == MFS_GRAYED, "id %u: expected fState MFS_GRAYED, got %04x\n", checked_cmd, mii.fState); - ok(mii.wID == 0, "id %u: expected wID 0, got %u\n", checked_cmd, mii.wID); - } - else - { - ok(mii.fState == 0, "id %u: expected fState 0, got %04x\n", checked_cmd, mii.fState); - ok(mii.wID != 0, "id %u: not expected wID 0\n", checked_cmd); - } - } - } - } -} - -static void clear_ftype_and_state(HMENU hmenu, UINT id, UINT flags) -{ - BOOL ret; - MENUITEMINFO mii; - - memset(&mii, 0, sizeof(mii)); - mii.cbSize = sizeof(mii); - mii.fMask = MIIM_FTYPE | MIIM_STATE; - ret = SetMenuItemInfo(hmenu, id, (flags & MF_BYPOSITION) != 0, &mii); - ok(ret, "SetMenuItemInfo(%u) failed\n", id); -} - -static void test_CheckMenuRadioItem(void) -{ - BOOL ret; - HMENU hmenu; - - hmenu = LoadMenu(GetModuleHandle(0), MAKEINTRESOURCE(1)); - assert(hmenu != 0); - - check_menu_items(hmenu, -1, 0, 0); - - ret = CheckMenuRadioItem(hmenu, 100, 100, 100, MF_BYCOMMAND); - ok(ret, "CheckMenuRadioItem failed\n"); - check_menu_items(hmenu, 100, MFT_RADIOCHECK, MFS_CHECKED); - - /* MSDN is wrong, Windows does not remove MFT_RADIOCHECK */ - ret = CheckMenuRadioItem(hmenu, 100, 100, -1, MF_BYCOMMAND); - ok(!ret, "CheckMenuRadioItem should return FALSE\n"); - check_menu_items(hmenu, 100, MFT_RADIOCHECK, 0); - - /* clear check */ - clear_ftype_and_state(hmenu, 100, MF_BYCOMMAND); - check_menu_items(hmenu, -1, 0, 0); - - /* first and checked items are on different menus */ - ret = CheckMenuRadioItem(hmenu, 0, 300, 202, MF_BYCOMMAND); - ok(!ret, "CheckMenuRadioItem should return FALSE\n"); - check_menu_items(hmenu, -1, 0, 0); - - ret = CheckMenuRadioItem(hmenu, 200, 300, 202, MF_BYCOMMAND); - ok(ret, "CheckMenuRadioItem failed\n"); - check_menu_items(hmenu, 202, MFT_RADIOCHECK, MFS_CHECKED); - - /* MSDN is wrong, Windows does not remove MFT_RADIOCHECK */ - ret = CheckMenuRadioItem(hmenu, 202, 202, -1, MF_BYCOMMAND); - ok(!ret, "CheckMenuRadioItem should return FALSE\n"); - check_menu_items(hmenu, 202, MFT_RADIOCHECK, 0); - - /* clear check */ - clear_ftype_and_state(hmenu, 202, MF_BYCOMMAND); - check_menu_items(hmenu, -1, 0, 0); - - /* just for fun, try to check separator */ - ret = CheckMenuRadioItem(hmenu, 0, 300, 0, MF_BYCOMMAND); - ok(!ret, "CheckMenuRadioItem should return FALSE\n"); - check_menu_items(hmenu, -1, 0, 0); -} - -static void test_menu_resource_layout(void) -{ - static const struct - { - MENUITEMTEMPLATEHEADER mith; - WORD data[14]; - } menu_template = - { - { 0, 0 }, /* versionNumber, offset */ - { - /* mtOption, mtID, mtString[] '\0' terminated */ - MF_STRING, 1, 'F', 0, - MF_STRING, 2, 0, - MF_SEPARATOR, 3, 0, - /* MF_SEPARATOR, 4, 'S', 0, FIXME: Wine ignores 'S' */ - MF_STRING|MF_GRAYED|MF_END, 5, 'E', 0 - } - }; - static const struct - { - UINT type, state, id; - const char *str; - } menu_data[] = - { - { MF_STRING, MF_ENABLED, 1, "F" }, - { MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 2, "" }, - { MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 3, "" }, - /*{ MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 4, "S" }, FIXME: Wine ignores 'S'*/ - { MF_STRING, MF_GRAYED, 5, "E" }, - { MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 6, "" }, - { MF_STRING, MF_ENABLED, 7, "" }, - { MF_SEPARATOR, MF_GRAYED|MF_DISABLED, 8, "" } - }; - HMENU hmenu; - UINT count, i; - BOOL ret; - - hmenu = LoadMenuIndirect(&menu_template); - ok(hmenu != 0, "LoadMenuIndirect error %u\n", GetLastError()); - - ret = AppendMenu(hmenu, MF_STRING, 6, NULL); - ok(ret, "AppendMenu failed\n"); - ret = AppendMenu(hmenu, MF_STRING, 7, "\0"); - ok(ret, "AppendMenu failed\n"); - ret = AppendMenu(hmenu, MF_SEPARATOR, 8, "separator"); - ok(ret, "AppendMenu failed\n"); - - count = GetMenuItemCount(hmenu); - ok(count == sizeof(menu_data)/sizeof(menu_data[0]), - "expected %u menu items, got %u\n", - (UINT)(sizeof(menu_data)/sizeof(menu_data[0])), count); - - for (i = 0; i < count; i++) - { - char buf[20]; - MENUITEMINFO mii; - - memset(&mii, 0, sizeof(mii)); - mii.cbSize = sizeof(mii); - mii.dwTypeData = buf; - mii.cch = sizeof(buf); - mii.fMask = MIIM_FTYPE | MIIM_STATE | MIIM_ID | MIIM_STRING; - ret = GetMenuItemInfo(hmenu, i, TRUE, &mii); - ok(ret, "GetMenuItemInfo(%u) failed\n", i); -#if 0 - trace("item #%u: fType %04x, fState %04x, wID %u, dwTypeData %s\n", - i, mii.fType, mii.fState, mii.wID, (LPCSTR)mii.dwTypeData); -#endif - ok(mii.fType == menu_data[i].type, - "%u: expected fType %04x, got %04x\n", i, menu_data[i].type, mii.fType); - ok(mii.fState == menu_data[i].state, - "%u: expected fState %04x, got %04x\n", i, menu_data[i].state, mii.fState); - ok(mii.wID == menu_data[i].id, - "%u: expected wID %04x, got %04x\n", i, menu_data[i].id, mii.wID); - ok(mii.cch == strlen(menu_data[i].str), - "%u: expected cch %u, got %u\n", i, (UINT)strlen(menu_data[i].str), mii.cch); - ok(!strcmp((LPCSTR)mii.dwTypeData, menu_data[i].str), - "%u: expected dwTypeData %s, got %s\n", i, menu_data[i].str, (LPCSTR)mii.dwTypeData); - } - - DestroyMenu(hmenu); -} - -struct menu_data -{ - UINT type, id; - const char *str; -}; - -static HMENU create_menu_from_data(const struct menu_data *item, INT item_count) -{ - HMENU hmenu; - INT i; - BOOL ret; - - hmenu = CreateMenu(); - assert(hmenu != 0); - - for (i = 0; i < item_count; i++) - { - SetLastError(0xdeadbeef); - ret = AppendMenu(hmenu, item[i].type, item[i].id, item[i].str); - ok(ret, "%d: AppendMenu(%04x, %04x, %p) error %u\n", - i, item[i].type, item[i].id, item[i].str, GetLastError()); - } - return hmenu; -} - -static void compare_menu_data(HMENU hmenu, const struct menu_data *item, INT item_count) -{ - INT count, i; - BOOL ret; - - count = GetMenuItemCount(hmenu); - ok(count == item_count, "expected %d, got %d menu items\n", count, item_count); - - for (i = 0; i < count; i++) - { - char buf[20]; - MENUITEMINFO mii; - - memset(&mii, 0, sizeof(mii)); - mii.cbSize = sizeof(mii); - mii.dwTypeData = buf; - mii.cch = sizeof(buf); - mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING | MIIM_BITMAP; - ret = GetMenuItemInfo(hmenu, i, TRUE, &mii); - ok(ret, "GetMenuItemInfo(%u) failed\n", i); -#if 0 - trace("item #%u: fType %04x, fState %04x, wID %04x, hbmp %p\n", - i, mii.fType, mii.fState, mii.wID, mii.hbmpItem); -#endif - ok(mii.fType == item[i].type, - "%u: expected fType %04x, got %04x\n", i, item[i].type, mii.fType); - ok(mii.wID == item[i].id, - "%u: expected wID %04x, got %04x\n", i, item[i].id, mii.wID); - if (item[i].type & (MF_BITMAP | MF_SEPARATOR)) - { - /* For some reason Windows sets high word to not 0 for - * not "magic" ids. - */ - ok(LOWORD(mii.hbmpItem) == LOWORD(item[i].str), - "%u: expected hbmpItem %p, got %p\n", i, item[i].str, mii.hbmpItem); - } - else - { - ok(mii.cch == strlen(item[i].str), - "%u: expected cch %u, got %u\n", i, (UINT)strlen(item[i].str), mii.cch); - ok(!strcmp((LPCSTR)mii.dwTypeData, item[i].str), - "%u: expected dwTypeData %s, got %s\n", i, item[i].str, (LPCSTR)mii.dwTypeData); - } - } -} - -static void test_InsertMenu(void) -{ - /* Note: XP treats only bitmap handles 1 - 6 as "magic" ones - * regardless of their id. - */ - static const struct menu_data in1[] = - { - { MF_STRING, 1, "File" }, - { MF_BITMAP|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(1) }, - { MF_STRING|MF_HELP, 2, "Help" } - }; - static const struct menu_data out1[] = - { - { MF_STRING, 1, "File" }, - { MF_STRING|MF_HELP, 2, "Help" }, - { MF_BITMAP|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(1) } - }; - static const struct menu_data in2[] = - { - { MF_STRING, 1, "File" }, - { MF_BITMAP|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(100) }, - { MF_STRING|MF_HELP, 2, "Help" } - }; - static const struct menu_data out2[] = - { - { MF_STRING, 1, "File" }, - { MF_BITMAP|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(100) }, - { MF_STRING|MF_HELP, 2, "Help" } - }; - static const struct menu_data in3[] = - { - { MF_STRING, 1, "File" }, - { MF_SEPARATOR|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(1) }, - { MF_STRING|MF_HELP, 2, "Help" } - }; - static const struct menu_data out3[] = - { - { MF_STRING, 1, "File" }, - { MF_SEPARATOR|MF_HELP, SC_CLOSE, MAKEINTRESOURCE(0) }, - { MF_STRING|MF_HELP, 2, "Help" }, - }; - static const struct menu_data in4[] = - { - { MF_STRING, 1, "File" }, - { MF_BITMAP|MF_HELP, 1, MAKEINTRESOURCE(1) }, - { MF_STRING|MF_HELP, 2, "Help" } - }; - static const struct menu_data out4[] = - { - { MF_STRING, 1, "File" }, - { MF_STRING|MF_HELP, 2, "Help" }, - { MF_BITMAP|MF_HELP, 1, MAKEINTRESOURCE(1) } - }; - HMENU hmenu; - -#define create_menu(a) create_menu_from_data((a), sizeof(a)/sizeof((a)[0])) -#define compare_menu(h, a) compare_menu_data((h), (a), sizeof(a)/sizeof((a)[0])) - - hmenu = create_menu(in1); - compare_menu(hmenu, out1); - DestroyMenu(hmenu); - - hmenu = create_menu(in2); - compare_menu(hmenu, out2); - DestroyMenu(hmenu); - - hmenu = create_menu(in3); - compare_menu(hmenu, out3); - DestroyMenu(hmenu); - - hmenu = create_menu(in4); - compare_menu(hmenu, out4); - DestroyMenu(hmenu); - -#undef create_menu -#undef compare_menu -} - -START_TEST(menu) -{ - init_function_pointers(); - - register_menu_check_class(); - - test_menu_locked_by_window(); - test_menu_ownerdraw(); - test_menu_add_string(); - test_menu_iteminfo(); - test_menu_search_bycommand(); - test_menu_bmp_and_string(); - - if( !pSendInput) - skip("SendInput is not available\n"); - else - test_menu_input(); - test_menu_flags(); - - test_menu_hilitemenuitem(); - test_CheckMenuRadioItem(); - test_menu_resource_layout(); - test_InsertMenu(); -} diff --git a/rostests/winetests/user32/monitor.c b/rostests/winetests/user32/monitor.c deleted file mode 100644 index a723dd1d610..00000000000 --- a/rostests/winetests/user32/monitor.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Unit tests for monitor APIs - * - * 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 - */ - -#include "wine/test.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" - -static HMODULE hdll; -static LONG (WINAPI *pChangeDisplaySettingsExA)(LPCSTR, LPDEVMODEA, HWND, DWORD, LPVOID); -static LONG (WINAPI *pChangeDisplaySettingsExW)(LPCWSTR, LPDEVMODEW, HWND, DWORD, LPVOID); -static BOOL (WINAPI *pEnumDisplayDevicesA)(LPCSTR,DWORD,LPDISPLAY_DEVICEA,DWORD); -static BOOL (WINAPI *pEnumDisplayMonitors)(HDC,LPRECT,MONITORENUMPROC,LPARAM); -static BOOL (WINAPI *pGetMonitorInfoA)(HMONITOR,LPMONITORINFO); -static HMONITOR (WINAPI *pMonitorFromPoint)(POINT,DWORD); -static HMONITOR (WINAPI *pMonitorFromWindow)(HWND,DWORD); - -static void init_function_pointers(void) -{ - hdll = GetModuleHandleA("user32.dll"); - -#define GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hdll, #func); \ - if(!p ## func) \ - trace("GetProcAddress(%s) failed\n", #func); - - GET_PROC(ChangeDisplaySettingsExA) - GET_PROC(ChangeDisplaySettingsExW) - GET_PROC(EnumDisplayDevicesA) - GET_PROC(EnumDisplayMonitors) - GET_PROC(GetMonitorInfoA) - GET_PROC(MonitorFromPoint) - GET_PROC(MonitorFromWindow) - -#undef GET_PROC -} - -static BOOL CALLBACK monitor_enum_proc(HMONITOR hmon, HDC hdc, LPRECT lprc, - LPARAM lparam) -{ - MONITORINFOEXA mi; - char *primary = (char *)lparam; - - mi.cbSize = sizeof(mi); - - ok(pGetMonitorInfoA(hmon, (MONITORINFO*)&mi), "GetMonitorInfo failed\n"); - if(mi.dwFlags == MONITORINFOF_PRIMARY) - strcpy(primary, mi.szDevice); - - return TRUE; -} - -static void test_enumdisplaydevices(void) -{ - DISPLAY_DEVICEA dd; - char primary_device_name[32]; - char primary_monitor_device_name[32]; - DWORD primary_num = -1, num = 0; - - dd.cb = sizeof(dd); - if(pEnumDisplayDevicesA == NULL) return; - while(1) - { - BOOL ret; - HDC dc; - ret = pEnumDisplayDevicesA(NULL, num, &dd, 0); - ok(ret || num != 0, "EnumDisplayDevices fails with num == 0\n"); - if(!ret) break; - if(dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) - { - strcpy(primary_device_name, dd.DeviceName); - primary_num = num; - } - if(dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) - { - /* test creating DC */ - dc = CreateDCA(dd.DeviceName, NULL, NULL, NULL); - ok(dc != NULL, "Failed to CreateDC(\"%s\") err=%d\n", dd.DeviceName, GetLastError()); - DeleteDC(dc); - } - num++; - } - ok(primary_num != -1, "Didn't get the primary device\n"); - - if(pEnumDisplayMonitors && pGetMonitorInfoA) { - ok(pEnumDisplayMonitors(NULL, NULL, monitor_enum_proc, (LPARAM)primary_monitor_device_name), - "EnumDisplayMonitors failed\n"); - - ok(!strcmp(primary_monitor_device_name, primary_device_name), - "monitor device name %s, device name %s\n", primary_monitor_device_name, - primary_device_name); - } -} - -struct vid_mode -{ - DWORD w, h, bpp, freq, fields; - LONG success; -}; - -static const struct vid_mode vid_modes_test[] = { - {640, 480, 0, 0, DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY, 1}, - {640, 480, 0, 0, DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY, 1}, - {640, 480, 0, 0, DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL , 1}, - {640, 480, 0, 0, DM_PELSWIDTH | DM_PELSHEIGHT , 1}, - {640, 480, 0, 0, DM_BITSPERPEL , 1}, - {640, 480, 0, 0, DM_DISPLAYFREQUENCY, 1}, - - {0, 0, 0, 0, DM_PELSWIDTH, 1}, - {0, 0, 0, 0, DM_PELSHEIGHT, 1}, - - {640, 480, 0, 0, DM_PELSWIDTH, 0}, - {640, 480, 0, 0, DM_PELSHEIGHT, 0}, - { 0, 480, 0, 0, DM_PELSWIDTH | DM_PELSHEIGHT, 0}, - {640, 0, 0, 0, DM_PELSWIDTH | DM_PELSHEIGHT, 0}, - - {0, 0, 0, 0, DM_DISPLAYFREQUENCY, 0}, -}; -#define vid_modes_cnt (sizeof(vid_modes_test) / sizeof(vid_modes_test[0])) - -static void test_ChangeDisplaySettingsEx(void) -{ - DEVMODEA dm; - DEVMODEW dmW; - DWORD width; - LONG res; - int i; - - if (!pChangeDisplaySettingsExA) - { - skip("ChangeDisplaySettingsExA is not available\n"); - return; - } - - SetLastError(0xdeadbeef); - res = EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm); - ok(res, "EnumDisplaySettings error %u\n", GetLastError()); - - width = dm.dmPelsWidth; - - /* the following 2 tests show that dm.dmSize being 0 is invalid, but - * ChangeDisplaySettingsExA still reports success. - */ - memset(&dm, 0, sizeof(dm)); - dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; - dm.dmPelsWidth = width; - res = pChangeDisplaySettingsExA(NULL, &dm, NULL, CDS_TEST, NULL); - ok(res == DISP_CHANGE_SUCCESSFUL, - "ChangeDisplaySettingsExA returned %d, expected DISP_CHANGE_SUCCESSFUL\n", res); - - memset(&dmW, 0, sizeof(dmW)); - dmW.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; - dmW.dmPelsWidth = width; - SetLastError(0xdeadbeef); - res = pChangeDisplaySettingsExW(NULL, &dmW, NULL, CDS_TEST, NULL); - if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - ok(res == DISP_CHANGE_FAILED, - "ChangeDisplaySettingsExW returned %d, expected DISP_CHANGE_FAILED\n", res); - - memset(&dm, 0, sizeof(dm)); - dm.dmSize = sizeof(dm); - - for (i = 0; i < vid_modes_cnt; i++) - { - dm.dmPelsWidth = vid_modes_test[i].w; - dm.dmPelsHeight = vid_modes_test[i].h; - dm.dmBitsPerPel = vid_modes_test[i].bpp; - dm.dmDisplayFrequency = vid_modes_test[i].freq; - dm.dmFields = vid_modes_test[i].fields; - res = pChangeDisplaySettingsExA(NULL, &dm, NULL, CDS_FULLSCREEN, NULL); - ok(vid_modes_test[i].success ? - (res == DISP_CHANGE_SUCCESSFUL) : - (res == DISP_CHANGE_BADMODE || res == DISP_CHANGE_BADPARAM), - "Unexpected ChangeDisplaySettingsEx() return code for resolution[%d]: %d\n", i, res); - - if (res == DISP_CHANGE_SUCCESSFUL) - { - RECT r, r1, virt; - - SetRect(&virt, 0, 0, GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN)); - OffsetRect(&virt, GetSystemMetrics(SM_XVIRTUALSCREEN), GetSystemMetrics(SM_YVIRTUALSCREEN)); - - /* Resolution change resets clip rect */ - ok(GetClipCursor(&r), "GetClipCursor() failed\n"); - ok(EqualRect(&r, &virt), "Invalid clip rect: (%d %d) x (%d %d)\n", r.left, r.top, r.right, r.bottom); - - ok(ClipCursor(NULL), "ClipCursor() failed\n"); - ok(GetClipCursor(&r), "GetClipCursor() failed\n"); - ok(EqualRect(&r, &virt), "Invalid clip rect: (%d %d) x (%d %d)\n", r.left, r.top, r.right, r.bottom); - - /* This should always work. Primary monitor is at (0,0) */ - SetRect(&r1, 10, 10, 20, 20); - ok(ClipCursor(&r1), "ClipCursor() failed\n"); - ok(GetClipCursor(&r), "GetClipCursor() failed\n"); - ok(EqualRect(&r, &r1), "Invalid clip rect: (%d %d) x (%d %d)\n", r.left, r.top, r.right, r.bottom); - - SetRect(&r1, virt.left - 10, virt.top - 10, virt.right + 20, virt.bottom + 20); - ok(ClipCursor(&r1), "ClipCursor() failed\n"); - ok(GetClipCursor(&r), "GetClipCursor() failed\n"); - ok(EqualRect(&r, &virt), "Invalid clip rect: (%d %d) x (%d %d)\n", r.left, r.top, r.right, r.bottom); - } - } - res = pChangeDisplaySettingsExA(NULL, NULL, NULL, CDS_RESET, NULL); - ok(res == DISP_CHANGE_SUCCESSFUL, "Failed to reset default resolution: %d\n", res); -} - -static void test_monitors(void) -{ - HMONITOR monitor, primary; - POINT pt; - - pt.x = pt.y = 0; - primary = pMonitorFromPoint( pt, MONITOR_DEFAULTTOPRIMARY ); - ok( primary != 0, "couldn't get primary monitor\n" ); - - monitor = pMonitorFromWindow( 0, MONITOR_DEFAULTTONULL ); - ok( !monitor, "got %p, should not get a monitor for an invalid window\n", monitor ); - monitor = pMonitorFromWindow( 0, MONITOR_DEFAULTTOPRIMARY ); - ok( monitor == primary, "got %p, should get primary %p for MONITOR_DEFAULTTOPRIMARY\n", monitor, primary ); - monitor = pMonitorFromWindow( 0, MONITOR_DEFAULTTONEAREST ); - ok( monitor == primary, "got %p, should get primary %p for MONITOR_DEFAULTTONEAREST\n", monitor, primary ); -} - - -START_TEST(monitor) -{ - init_function_pointers(); - test_enumdisplaydevices(); - if (winetest_interactive) - test_ChangeDisplaySettingsEx(); - if (pMonitorFromPoint && pMonitorFromWindow) - test_monitors(); - else - skip("MonitorFromPoint and/or MonitorFromWindow are not available\n"); -} diff --git a/rostests/winetests/user32/msg.c b/rostests/winetests/user32/msg.c deleted file mode 100755 index 5c66f0c5a07..00000000000 --- a/rostests/winetests/user32/msg.c +++ /dev/null @@ -1,10463 +0,0 @@ -/* - * Unit tests for window message handling - * - * Copyright 1999 Ove Kaaven - * Copyright 2003 Dimitrie O. Paun - * Copyright 2004, 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 - */ - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winnls.h" - -#include "wine/test.h" - -#define MDI_FIRST_CHILD_ID 2004 - -/* undocumented SWP flags - from SDK 3.1 */ -#define SWP_NOCLIENTSIZE 0x0800 -#define SWP_NOCLIENTMOVE 0x1000 -#define SWP_STATECHANGED 0x8000 - -#define SW_NORMALNA 0xCC /* undoc. flag in MinMaximize */ - -#ifndef WM_KEYF1 -#define WM_KEYF1 0x004d -#endif - -#ifndef WM_SYSTIMER -#define WM_SYSTIMER 0x0118 -#endif - -#define WND_PARENT_ID 1 -#define WND_POPUP_ID 2 -#define WND_CHILD_ID 3 - -#ifndef WM_LBTRACKPOINT -#define WM_LBTRACKPOINT 0x0131 -#endif - -/* encoded DRAWITEMSTRUCT into an LPARAM */ -typedef struct -{ - union - { - struct - { - UINT type : 4; /* ODT_* flags */ - UINT ctl_id : 4; /* Control ID */ - UINT item_id : 4; /* Menu item ID */ - UINT action : 4; /* ODA_* flags */ - UINT state : 16; /* ODS_* flags */ - } item; - LPARAM lp; - } u; -} DRAW_ITEM_STRUCT; - -static BOOL test_DestroyWindow_flag; -static HWINEVENTHOOK hEvent_hook; - -static void dump_winpos_flags(UINT flags); - -static const WCHAR testWindowClassW[] = -{ 'T','e','s','t','W','i','n','d','o','w','C','l','a','s','s','W',0 }; - -/* -FIXME: add tests for these -Window Edge Styles (Win31/Win95/98 look), in order of precedence: - WS_EX_DLGMODALFRAME: double border, WS_CAPTION allowed - WS_THICKFRAME: thick border - WS_DLGFRAME: double border, WS_CAPTION not allowed (but possibly shown anyway) - WS_BORDER (default for overlapped windows): single black border - none (default for child (and popup?) windows): no border -*/ - -typedef enum { - sent=0x1, - posted=0x2, - parent=0x4, - wparam=0x8, - lparam=0x10, - defwinproc=0x20, - beginpaint=0x40, - optional=0x80, - hook=0x100, - winevent_hook=0x200 -} msg_flags_t; - -struct message { - UINT message; /* the WM_* code */ - msg_flags_t flags; /* message props */ - WPARAM wParam; /* expected value of wParam */ - LPARAM lParam; /* expected value of lParam */ -}; - -/* Empty message sequence */ -static const struct message WmEmptySeq[] = -{ - { 0 } -}; -/* CreateWindow (for overlapped window, not initially visible) (16/32) */ -static const struct message WmCreateOverlappedSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { 0x0093, sent|defwinproc|optional }, - { 0x0094, sent|defwinproc|optional }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* SetWindowPos(SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE) - * for a not visible overlapped window. - */ -static const struct message WmSWP_ShowOverlappedSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* Win9x: SWP_NOSENDCHANGING */ - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ACTIVATE, sent|wparam, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ERASEBKGND, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* SetWindowPos(SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE) - * for a visible overlapped window. - */ -static const struct message WmSWP_HideOverlappedSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; - -/* SetWindowPos(SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOMOVE) - * for a visible overlapped window. - */ -static const struct message WmSWP_ResizeSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { WM_NCPAINT, sent|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { WM_NCCALCSIZE, sent|wparam|optional, TRUE }, - { WM_NCPAINT, sent|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* XP sends a duplicate */ - { 0 } -}; - -/* SetWindowPos(SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOMOVE) - * for a visible popup window. - */ -static const struct message WmSWP_ResizePopupSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE }, - { WM_GETMINMAXINFO, sent|defwinproc|optional }, /* Win9x */ - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { WM_NCPAINT, sent|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { WM_NCCALCSIZE, sent|wparam|optional, TRUE }, - { WM_NCPAINT, sent|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; - -/* SetWindowPos(SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE) - * for a visible overlapped window. - */ -static const struct message WmSWP_MoveSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_NOSIZE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCLIENTSIZE }, - { WM_MOVE, sent|defwinproc|wparam, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* Resize with SetWindowPos(SWP_NOZORDER) - * for a visible overlapped window - * SWP_NOZORDER is stripped by the logging code - */ -static const struct message WmSWP_ResizeNoZOrder[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, 0/*SWP_NOZORDER*/ }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, /* FIXME: remove optional once Wine is fixed */ - { WM_WINDOWPOSCHANGED, sent|wparam, /*SWP_NOZORDER|*/SWP_NOMOVE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* Win9x doesn't send it */ - { WM_NCPAINT, sent|optional }, /* Win9x doesn't send it */ - { WM_GETTEXT, sent|defwinproc|optional }, /* Win9x doesn't send it */ - { WM_ERASEBKGND, sent|optional }, /* Win9x doesn't send it */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; - -/* Switch visible mdi children */ -static const struct message WmSwitchChild[] = { - /* Switch MDI child */ - { WM_MDIACTIVATE, sent },/* in the MDI client */ - { WM_WINDOWPOSCHANGING, sent|wparam,SWP_NOSIZE|SWP_NOMOVE },/* in the 1st MDI child */ - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_CHILDACTIVATE, sent },/* in the 1st MDI child */ - /* Deactivate 2nd MDI child */ - { WM_NCACTIVATE, sent|wparam|defwinproc, 0 }, /* in the 2nd MDI child */ - { WM_MDIACTIVATE, sent|defwinproc }, /* in the 2nd MDI child */ - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - /* Preparing for maximize and maximaze the 1st MDI child */ - { WM_GETMINMAXINFO, sent|defwinproc }, /* in the 1st MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_STATECHANGED }, /* in the 1st MDI child */ - { WM_NCCALCSIZE, sent|wparam|defwinproc, 1 }, /* in the 1st MDI child */ - { WM_CHILDACTIVATE, sent|defwinproc }, /* in the 1st MDI child */ - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, /* in the 1st MDI child */ - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, /* in the 1st MDI child */ - /* Lock redraw 2nd MDI child */ - { WM_SETREDRAW, sent|wparam|defwinproc, 0 }, /* in the 2nd MDI child */ - { HCBT_MINMAX, hook|lparam, 0, SW_NORMALNA }, - /* Restore 2nd MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_STATECHANGED },/* in the 2nd MDI child */ - { WM_NCCALCSIZE, sent|wparam|defwinproc, 1 },/* in the 2nd MDI child */ - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, /* in the 2nd MDI child */ - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, /* in the 2nd MDI child */ - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, /* in the 2nd MDI child */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* in the 2nd MDI child */ - /* Redraw 2nd MDI child */ - { WM_SETREDRAW, sent|wparam|defwinproc, 1 },/* in the 2nd MDI child */ - /* Redraw MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE },/* in MDI frame */ - { WM_NCCALCSIZE, sent|wparam, 1 },/* in MDI frame */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE}, /* in MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* in MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* in the 1st MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, /* in the 1st MDI child */ - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, /* in the 1st MDI child */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent|defwinproc }, /* in the 2nd MDI child */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 0 },/* in the 1st MDI child */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent },/* in the MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent },/* in the MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, /* in the 1st MDI child */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, /* in the 1st MDI child */ - { WM_MDIACTIVATE, sent|defwinproc },/* in the 1st MDI child */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, /* in the 1st MDI child */ - { 0 } -}; - -/* Switch visible not maximized mdi children */ -static const struct message WmSwitchNotMaximizedChild[] = { - /* Switch not maximized MDI child */ - { WM_MDIACTIVATE, sent },/* in the MDI client */ - { WM_WINDOWPOSCHANGING, sent|wparam,SWP_NOSIZE|SWP_NOMOVE },/* in the 2nd MDI child */ - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_CHILDACTIVATE, sent },/* in the 2nd MDI child */ - /* Deactivate 1st MDI child */ - { WM_NCACTIVATE, sent|wparam|defwinproc, 0 }, /* in the 1st MDI child */ - { WM_MDIACTIVATE, sent|defwinproc }, /* in the 1st MDI child */ - /* Activate 2nd MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE}, /* in the 2nd MDI child */ - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, /* in the 2nd MDI child */ - { WM_SETVISIBLE, hook }, /* in the 1st MDI child */ - { WM_KILLFOCUS, sent|defwinproc }, /* in the 1st MDI child */ - { WM_IME_SETCONTEXT, sent|defwinproc|optional }, /* in the 1st MDI child */ - { WM_IME_SETCONTEXT, sent|optional }, /* in the MDI client */ - { WM_SETFOCUS, sent, 0 }, /* in the MDI client */ - { WM_SETVISIBLE, hook }, - { WM_KILLFOCUS, sent }, /* in the MDI client */ - { WM_IME_SETCONTEXT, sent|optional }, /* in the MDI client */ - { WM_IME_SETCONTEXT, sent|defwinproc|optional }, /* in the 1st MDI child */ - { WM_SETFOCUS, sent|defwinproc }, /* in the 2nd MDI child */ - { WM_MDIACTIVATE, sent|defwinproc }, /* in the 2nd MDI child */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE}, /* in the 2nd MDI child */ - { 0 } -}; - - -/* SetWindowPos(SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE| - SWP_NOZORDER|SWP_FRAMECHANGED) - * for a visible overlapped window with WS_CLIPCHILDREN style set. - */ -static const struct message WmSWP_FrameChanged_clip[] = { - { WM_WINDOWPOSCHANGING, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED }, - { WM_NCCALCSIZE, sent|wparam|parent, 1 }, - { WM_NCPAINT, sent|parent }, /* wparam != 1 */ - { WM_GETTEXT, sent|parent|defwinproc|optional }, - { WM_ERASEBKGND, sent|parent|optional }, /* FIXME: remove optional once Wine is fixed */ - { WM_NCPAINT, sent }, /* wparam != 1 */ - { WM_ERASEBKGND, sent }, - { WM_WINDOWPOSCHANGED, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_PAINT, sent }, - { 0 } -}; -/* SetWindowPos(SWP_NOSIZE|SWP_NOMOVE|SWP_DEFERERASE|SWP_NOACTIVATE| - SWP_NOZORDER|SWP_FRAMECHANGED) - * for a visible overlapped window. - */ -static const struct message WmSWP_FrameChangedDeferErase[] = { - { WM_WINDOWPOSCHANGING, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_DEFERERASE|SWP_NOACTIVATE|SWP_FRAMECHANGED }, - { WM_NCCALCSIZE, sent|wparam|parent, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_DEFERERASE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_PAINT, sent|parent }, - { WM_NCPAINT, sent|beginpaint|parent }, /* wparam != 1 */ - { WM_GETTEXT, sent|beginpaint|parent|defwinproc|optional }, - { WM_PAINT, sent }, - { WM_NCPAINT, sent|beginpaint }, /* wparam != 1 */ - { WM_ERASEBKGND, sent|beginpaint }, - { 0 } -}; - -/* SetWindowPos(SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE| - SWP_NOZORDER|SWP_FRAMECHANGED) - * for a visible overlapped window without WS_CLIPCHILDREN style set. - */ -static const struct message WmSWP_FrameChanged_noclip[] = { - { WM_WINDOWPOSCHANGING, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED }, - { WM_NCCALCSIZE, sent|wparam|parent, 1 }, - { WM_NCPAINT, sent|parent }, /* wparam != 1 */ - { WM_GETTEXT, sent|parent|defwinproc|optional }, - { WM_ERASEBKGND, sent|parent|optional }, /* FIXME: remove optional once Wine is fixed */ - { WM_WINDOWPOSCHANGED, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_PAINT, sent }, - { WM_NCPAINT, sent|beginpaint }, /* wparam != 1 */ - { WM_ERASEBKGND, sent|beginpaint }, - { 0 } -}; - -/* ShowWindow(SW_SHOW) for a not visible overlapped window */ -static const struct message WmShowOverlappedSeq[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ACTIVATE, sent|wparam, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCCALCSIZE, sent|optional }, - { WM_NCPAINT, sent|optional }, - { WM_ERASEBKGND, sent|optional }, -#if 0 /* CreateWindow/ShowWindow(SW_SHOW) also generates WM_SIZE/WM_MOVE - * messages. Does that mean that CreateWindow doesn't set initial - * window dimensions for overlapped windows? - */ - { WM_SIZE, sent }, - { WM_MOVE, sent }, -#endif - { 0 } -}; -/* ShowWindow(SW_SHOWMAXIMIZED) for a not visible overlapped window */ -static const struct message WmShowMaxOverlappedSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ACTIVATE, sent|wparam, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { WM_NCCALCSIZE, sent|optional }, - { WM_NCPAINT, sent|optional }, - { WM_ERASEBKGND, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* ShowWindow(SW_SHOWMINIMIZED) for a not visible overlapped window */ -static const struct message WmShowMinOverlappedSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE }, - { HCBT_SETFOCUS, hook }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_NOTIFY, sent|wparam|optional|defwinproc, 1 }, - { WM_GETTEXT, sent|optional }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOCOPYBITS|SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_STATECHANGED }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_WINDOWPOSCHANGED, sent }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MINIMIZED }, - { WM_NCCALCSIZE, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_MINIMIZESTART, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCACTIVATE, sent|wparam, 0 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ACTIVATE, sent }, - { WM_ACTIVATEAPP, sent|wparam, 0 }, - { 0 } -}; -/* ShowWindow(SW_HIDE) for a visible overlapped window */ -static const struct message WmHideOverlappedSeq[] = { - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|optional }, /* XP doesn't send it */ - { WM_MOVE, sent|optional }, /* XP doesn't send it */ - { WM_NCACTIVATE, sent|wparam, 0 }, - { WM_ACTIVATE, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 0 }, - { WM_KILLFOCUS, sent|wparam, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_NOTIFY, sent|wparam|optional|defwinproc, 1 }, - { 0 } -}; -/* DestroyWindow for a visible overlapped window */ -static const struct message WmDestroyOverlappedSeq[] = { - { HCBT_DESTROYWND, hook }, - { 0x0090, sent|optional }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { 0x0090, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCACTIVATE, sent|wparam, 0 }, - { WM_ACTIVATE, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 0 }, - { WM_KILLFOCUS, sent|wparam, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_NOTIFY, sent|wparam|optional|defwinproc, 1 }, - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent }, - { WM_NCDESTROY, sent }, - { 0 } -}; -/* CreateWindow(WS_MAXIMIZE|WS_VISIBLE) for popup window */ -static const struct message WmCreateMaxPopupSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOREDRAW|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_SYNCPAINT, sent|wparam|optional, 4 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTMOVE|SWP_NOCLIENTSIZE|SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE }, - { 0 } -}; -/* CreateWindow(WS_MAXIMIZE) for popup window, not initially visible */ -static const struct message WmCreateInvisibleMaxPopupSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOREDRAW|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* ShowWindow(SW_SHOWMAXIMIZED) for a resized not visible popup window */ -static const struct message WmShowMaxPopupResizedSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTMOVE|SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOMOVE }, - /* WinNT4.0 sends WM_MOVE */ - { WM_MOVE, sent|defwinproc|optional }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* ShowWindow(SW_SHOWMAXIMIZED) for a not visible popup window */ -static const struct message WmShowMaxPopupSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_SYNCPAINT, sent|wparam|optional, 4 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOSIZE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* CreateWindow(WS_VISIBLE) for popup window */ -static const struct message WmCreatePopupSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ERASEBKGND, sent|optional }, - { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_SYNCPAINT, sent|wparam|optional, 4 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTMOVE|SWP_NOCLIENTSIZE|SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE }, - { 0 } -}; -/* ShowWindow(SW_SHOWMAXIMIZED) for a visible popup window */ -static const struct message WmShowVisMaxPopupSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_GETTEXT, sent|optional }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, TRUE }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* CreateWindow (for a child popup window, not initially visible) */ -static const struct message WmCreateChildPopupSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { 0 } -}; -/* CreateWindow (for a popup window, not initially visible, - * which sets WS_VISIBLE in WM_CREATE handler) - */ -static const struct message WmCreateInvisiblePopupSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { WM_STYLECHANGING, sent }, - { WM_STYLECHANGED, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { 0 } -}; -/* SetWindowPos(SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER) - * for a popup window with WS_VISIBLE style set - */ -static const struct message WmShowVisiblePopupSeq_2[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { 0 } -}; -/* SetWindowPos(SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE) - * for a popup window with WS_VISIBLE style set - */ -static const struct message WmShowVisiblePopupSeq_3[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent|parent }, - { WM_IME_SETCONTEXT, sent|parent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - { 0 } -}; -/* CreateWindow (for child window, not initially visible) */ -static const struct message WmCreateChildSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - /* child is inserted into parent's child list after WM_NCCREATE returns */ - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { WM_PARENTNOTIFY, sent|parent|wparam, WM_CREATE }, - { 0 } -}; -/* CreateWindow (for maximized child window, not initially visible) */ -static const struct message WmCreateMaximizedChildSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_PARENTNOTIFY, sent|parent|wparam, WM_CREATE }, - { 0 } -}; -/* CreateWindow (for a child window, initially visible) */ -static const struct message WmCreateVisibleChildSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - /* child is inserted into parent's child list after WM_NCCREATE returns */ - { WM_NCCALCSIZE, sent|wparam, 0 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { WM_PARENTNOTIFY, sent|parent|wparam, WM_CREATE }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* WinXP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* ShowWindow(SW_SHOW) for a not visible child window */ -static const struct message WmShowChildSeq[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* ShowWindow(SW_HIDE) for a visible child window */ -static const struct message WmHideChildSeq[] = { - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* ShowWindow(SW_HIDE) for a visible child window checking all parent events*/ -static const struct message WmHideChildSeq2[] = { - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* SetWindowPos(SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE) - * for a not visible child window - */ -static const struct message WmShowChildSeq_2[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CHILDACTIVATE, sent }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* SetWindowPos(SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE) - * for a not visible child window - */ -static const struct message WmShowChildSeq_3[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* SetWindowPos(SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE) - * for a visible child window with a caption - */ -static const struct message WmShowChildSeq_4[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { WM_CHILDACTIVATE, sent }, - { 0 } -}; -/* ShowWindow(SW_MINIMIZE) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_1[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MINIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_MINIMIZESTART, winevent_hook|wparam|lparam, 0, 0 }, - /* FIXME: Wine creates an icon/title window while Windows doesn't */ - { WM_PARENTNOTIFY, sent|parent|wparam|optional, WM_CREATE }, - { WM_GETTEXT, sent|optional }, - { 0 } -}; -/* repeated ShowWindow(SW_MINIMIZE) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_1r[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE }, - { 0 } -}; -/* ShowWindow(SW_MAXIMIZE) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_2[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CHILDACTIVATE, sent }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* repeated ShowWindow(SW_MAXIMIZE) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_2r[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { 0 } -}; -/* ShowWindow(SW_SHOWMINIMIZED) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_3[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINIMIZED }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CHILDACTIVATE, sent }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOREDRAW|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MINIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_MINIMIZESTART, winevent_hook|wparam|lparam, 0, 0 }, - /* FIXME: Wine creates an icon/title window while Windows doesn't */ - { WM_PARENTNOTIFY, sent|parent|wparam|optional, WM_CREATE }, - { WM_GETTEXT, sent|optional }, - { 0 } -}; -/* repeated ShowWindow(SW_SHOWMINIMIZED) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_3r[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINIMIZED }, - { 0 } -}; -/* ShowWindow(SW_SHOWMINNOACTIVE) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_4[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINNOACTIVE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MINIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_MINIMIZESTART, winevent_hook|wparam|lparam, 0, 0 }, - /* FIXME: Wine creates an icon/title window while Windows doesn't */ - { WM_PARENTNOTIFY, sent|parent|wparam|optional, WM_CREATE }, - { WM_GETTEXT, sent|optional }, - { 0 } -}; -/* repeated ShowWindow(SW_SHOWMINNOACTIVE) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_4r[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINNOACTIVE }, - { 0 } -}; -/* ShowWindow(SW_SHOW) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_5[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { 0 } -}; -/* ShowWindow(SW_HIDE) for child with invisible parent */ -static const struct message WmHideChildInvisibleParentSeq[] = { - { WM_SHOWWINDOW, sent|wparam, 0 }, - { 0 } -}; -/* SetWindowPos(SWP_SHOWWINDOW) for child with invisible parent */ -static const struct message WmShowChildInvisibleParentSeq_6[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* SetWindowPos(SWP_HIDEWINDOW) for child with invisible parent */ -static const struct message WmHideChildInvisibleParentSeq_2[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* DestroyWindow for a visible child window */ -static const struct message WmDestroyChildSeq[] = { - { HCBT_DESTROYWND, hook }, - { 0x0090, sent|optional }, - { WM_PARENTNOTIFY, sent|parent|wparam, WM_DESTROY }, - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { HCBT_SETFOCUS, hook }, /* set focus to a parent */ - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|parent|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|parent }, - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent }, - { WM_DESTROY, sent|optional }, /* some other (IME?) window */ - { WM_NCDESTROY, sent|optional }, /* some other (IME?) window */ - { WM_NCDESTROY, sent }, - { 0 } -}; -/* DestroyWindow for a visible child window with invisible parent */ -static const struct message WmDestroyInvisibleChildSeq[] = { - { HCBT_DESTROYWND, hook }, - { 0x0090, sent|optional }, - { WM_PARENTNOTIFY, sent|parent|wparam, WM_DESTROY }, - { WM_SHOWWINDOW, sent|wparam, 0 }, - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent }, - { WM_NCDESTROY, sent }, - { 0 } -}; -/* Moving the mouse in nonclient area */ -static const struct message WmMouseMoveInNonClientAreaSeq[] = { /* FIXME: add */ - { WM_NCHITTEST, sent }, - { WM_SETCURSOR, sent }, - { WM_NCMOUSEMOVE, posted }, - { 0 } -}; -/* Moving the mouse in client area */ -static const struct message WmMouseMoveInClientAreaSeq[] = { /* FIXME: add */ - { WM_NCHITTEST, sent }, - { WM_SETCURSOR, sent }, - { WM_MOUSEMOVE, posted }, - { 0 } -}; -/* Moving by dragging the title bar (after WM_NCHITTEST and WM_SETCURSOR) (outline move) */ -static const struct message WmDragTitleBarSeq[] = { /* FIXME: add */ - { WM_NCLBUTTONDOWN, sent|wparam, HTCAPTION }, - { WM_SYSCOMMAND, sent|defwinproc|wparam, SC_MOVE+2 }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_ENTERSIZEMOVE, sent|defwinproc }, - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, 0 }, - { WM_MOVE, sent|defwinproc }, - { WM_EXITSIZEMOVE, sent|defwinproc }, - { 0 } -}; -/* Sizing by dragging the thick borders (after WM_NCHITTEST and WM_SETCURSOR) (outline move) */ -static const struct message WmDragThickBordersBarSeq[] = { /* FIXME: add */ - { WM_NCLBUTTONDOWN, sent|wparam, 0xd }, - { WM_SYSCOMMAND, sent|defwinproc|wparam, 0xf004 }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_ENTERSIZEMOVE, sent|defwinproc }, - { WM_SIZING, sent|defwinproc|wparam, 4}, /* one for each mouse movement */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, 0 }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|defwinproc|wparam, 1 }, - { WM_NCPAINT, sent|defwinproc|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc }, - { WM_ERASEBKGND, sent|defwinproc }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, 0 }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { WM_EXITSIZEMOVE, sent|defwinproc }, - { 0 } -}; -/* Resizing child window with MoveWindow (32) */ -static const struct message WmResizingChildWithMoveWindowSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* Clicking on inactive button */ -static const struct message WmClickInactiveButtonSeq[] = { /* FIXME: add */ - { WM_NCHITTEST, sent }, - { WM_PARENTNOTIFY, sent|parent|wparam, WM_LBUTTONDOWN }, - { WM_MOUSEACTIVATE, sent }, - { WM_MOUSEACTIVATE, sent|parent|defwinproc }, - { WM_SETCURSOR, sent }, - { WM_SETCURSOR, sent|parent|defwinproc }, - { WM_LBUTTONDOWN, posted }, - { WM_KILLFOCUS, posted|parent }, - { WM_SETFOCUS, posted }, - { WM_CTLCOLORBTN, posted|parent }, - { BM_SETSTATE, posted }, - { WM_CTLCOLORBTN, posted|parent }, - { WM_LBUTTONUP, posted }, - { BM_SETSTATE, posted }, - { WM_CTLCOLORBTN, posted|parent }, - { WM_COMMAND, posted|parent }, - { 0 } -}; -/* Reparenting a button (16/32) */ -/* The last child (button) reparented gets topmost for its new parent. */ -static const struct message WmReparentButtonSeq[] = { /* FIXME: add */ - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE }, - { WM_CHILDACTIVATE, sent }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOSIZE|SWP_NOREDRAW }, - { WM_MOVE, sent|defwinproc }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { 0 } -}; -/* Creation of a custom dialog (32) */ -static const struct message WmCreateCustomDialogSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - - - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE }, - - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_GETTEXT, sent|optional|defwinproc }, - { WM_GETTEXT, sent|optional|defwinproc }, - { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_KILLFOCUS, sent|parent }, - { WM_IME_SETCONTEXT, sent|parent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, - { WM_GETDLGCODE, sent|defwinproc|wparam, 0 }, - { WM_NCPAINT, sent|wparam, 1 }, - { WM_GETTEXT, sent|optional|defwinproc }, - { WM_GETTEXT, sent|optional|defwinproc }, - { WM_ERASEBKGND, sent }, - { WM_CTLCOLORDLG, sent|defwinproc }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_GETTEXT, sent|optional }, - { WM_GETTEXT, sent|optional }, - { WM_NCCALCSIZE, sent|optional }, - { WM_NCPAINT, sent|optional }, - { WM_GETTEXT, sent|optional|defwinproc }, - { WM_GETTEXT, sent|optional|defwinproc }, - { WM_ERASEBKGND, sent|optional }, - { WM_CTLCOLORDLG, sent|optional|defwinproc }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { 0 } -}; -/* Calling EndDialog for a custom dialog (32) */ -static const struct message WmEndCustomDialogSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_GETTEXT, sent|optional }, - { HCBT_ACTIVATE, hook }, - { WM_NCACTIVATE, sent|wparam, 0 }, - { WM_GETTEXT, sent|optional|defwinproc }, - { WM_GETTEXT, sent|optional|defwinproc }, - { WM_ACTIVATE, sent|wparam, 0 }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|parent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|parent|defwinproc }, - { 0 } -}; -/* ShowWindow(SW_SHOW) for a custom dialog (initially invisible) */ -static const struct message WmShowCustomDialogSeq[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE }, - { WM_ACTIVATEAPP, sent|wparam|optional, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - - { WM_KILLFOCUS, sent|parent }, - { WM_IME_SETCONTEXT, sent|parent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, - { WM_GETDLGCODE, sent|defwinproc|wparam, 0 }, - { WM_NCPAINT, sent|wparam, 1 }, - { WM_ERASEBKGND, sent }, - { WM_CTLCOLORDLG, sent|defwinproc }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* Creation and destruction of a modal dialog (32) */ -static const struct message WmModalDialogSeq[] = { - { WM_CANCELMODE, sent|parent }, - { HCBT_SETFOCUS, hook }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_KILLFOCUS, sent|parent }, - { WM_IME_SETCONTEXT, sent|parent|wparam|optional, 0 }, - { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ENABLE, sent|parent|wparam, 0 }, - { HCBT_CREATEWND, hook }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SETFONT, sent }, - { WM_INITDIALOG, sent }, - { WM_CHANGEUISTATE, sent|optional }, - { WM_UPDATEUISTATE, sent|optional }, - { WM_SHOWWINDOW, sent }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_GETTEXT, sent|optional }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|optional }, - { WM_ERASEBKGND, sent }, - { WM_CTLCOLORDLG, sent }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_GETTEXT, sent|optional }, - { WM_NCCALCSIZE, sent|optional }, - { WM_NCPAINT, sent|optional }, - { WM_GETTEXT, sent|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_CTLCOLORDLG, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_PAINT, sent|optional }, - { WM_CTLCOLORBTN, sent }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_ENTERIDLE, sent|parent|optional }, - { WM_TIMER, sent }, - { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ENABLE, sent|parent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_GETTEXT, sent|optional }, - { HCBT_ACTIVATE, hook }, - { WM_NCACTIVATE, sent|wparam, 0 }, - { WM_GETTEXT, sent|optional }, - { WM_ACTIVATE, sent|wparam, 0 }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|optional }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|parent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|parent|defwinproc }, - { EVENT_SYSTEM_DIALOGEND, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_DESTROYWND, hook }, - { 0x0090, sent|optional }, - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent }, - { WM_NCDESTROY, sent }, - { 0 } -}; -/* Creation of a modal dialog that is resized inside WM_INITDIALOG (32) */ -static const struct message WmCreateModalDialogResizeSeq[] = { /* FIXME: add */ - /* (inside dialog proc, handling WM_INITDIALOG) */ - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_NCCALCSIZE, sent }, - { WM_NCACTIVATE, sent|parent|wparam, 0 }, - { WM_GETTEXT, sent|defwinproc }, - { WM_ACTIVATE, sent|parent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|parent }, - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, 0 }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - /* (setting focus) */ - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, 0 }, - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|defwinproc }, - { WM_ERASEBKGND, sent }, - { WM_CTLCOLORDLG, sent|defwinproc }, - { WM_WINDOWPOSCHANGED, sent|wparam, 0 }, - { WM_PAINT, sent }, - /* (bunch of WM_CTLCOLOR* for each control) */ - { WM_PAINT, sent|parent }, - { WM_ENTERIDLE, sent|parent|wparam, 0 }, - { WM_SETCURSOR, sent|parent }, - { 0 } -}; -/* SetMenu for NonVisible windows with size change*/ -static const struct message WmSetMenuNonVisibleSizeChangeSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { WM_NCCALCSIZE,sent|wparam|optional, 1 }, /* XP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* XP sends a duplicate */ - { WM_GETTEXT, sent|optional }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { 0 } -}; -/* SetMenu for NonVisible windows with no size change */ -static const struct message WmSetMenuNonVisibleNoSizeChangeSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* SetMenu for Visible windows with size change */ -static const struct message WmSetMenuVisibleSizeChangeSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { 0x0093, sent|defwinproc|optional }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCPAINT, sent }, /* wparam != 1 */ - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0091, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_ACTIVATE, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { 0x0093, sent|optional }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { 0x0093, sent|defwinproc|optional }, - { WM_NCPAINT, sent|optional }, /* wparam != 1 */ - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0091, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* XP sends a duplicate */ - { 0 } -}; -/* SetMenu for Visible windows with no size change */ -static const struct message WmSetMenuVisibleNoSizeChangeSeq[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_NCPAINT, sent }, /* wparam != 1 */ - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_ACTIVATE, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -/* DrawMenuBar for a visible window */ -static const struct message WmDrawMenuBarSeq[] = -{ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { 0x0093, sent|defwinproc|optional }, - { WM_NCPAINT, sent }, /* wparam != 1 */ - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0091, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0x0093, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message WmSetRedrawFalseSeq[] = -{ - { WM_SETREDRAW, sent|wparam, 0 }, - { 0 } -}; - -static const struct message WmSetRedrawTrueSeq[] = -{ - { WM_SETREDRAW, sent|wparam, 1 }, - { 0 } -}; - -static const struct message WmEnableWindowSeq_1[] = -{ - { WM_CANCELMODE, sent|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ENABLE, sent|wparam|lparam, FALSE, 0 }, - { 0 } -}; - -static const struct message WmEnableWindowSeq_2[] = -{ - { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ENABLE, sent|wparam|lparam, TRUE, 0 }, - { 0 } -}; - -static const struct message WmGetScrollRangeSeq[] = -{ - { SBM_GETRANGE, sent }, - { 0 } -}; -static const struct message WmGetScrollInfoSeq[] = -{ - { SBM_GETSCROLLINFO, sent }, - { 0 } -}; -static const struct message WmSetScrollRangeSeq[] = -{ - /* MSDN claims that Windows sends SBM_SETRANGE message, but win2k SP4 - sends SBM_SETSCROLLINFO. - */ - { SBM_SETSCROLLINFO, sent }, - { 0 } -}; -/* SetScrollRange for a window without a non-client area */ -static const struct message WmSetScrollRangeHSeq_empty[] = -{ - { EVENT_OBJECT_VALUECHANGE, winevent_hook|wparam|lparam, OBJID_HSCROLL, 0 }, - { 0 } -}; -static const struct message WmSetScrollRangeVSeq_empty[] = -{ - { EVENT_OBJECT_VALUECHANGE, winevent_hook|wparam|lparam, OBJID_VSCROLL, 0 }, - { 0 } -}; -static const struct message WmSetScrollRangeHVSeq[] = -{ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_VALUECHANGE, winevent_hook|lparam|optional, 0/*OBJID_HSCROLL or OBJID_VSCROLL*/, 0 }, - { 0 } -}; -/* SetScrollRange for a window with a non-client area */ -static const struct message WmSetScrollRangeHV_NC_Seq[] = -{ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCPAINT, sent|optional }, - { WM_STYLECHANGING, sent|defwinproc|optional }, - { WM_STYLECHANGED, sent|defwinproc|optional }, - { WM_STYLECHANGING, sent|defwinproc|optional }, - { WM_STYLECHANGED, sent|defwinproc|optional }, - { WM_STYLECHANGING, sent|defwinproc|optional }, - { WM_STYLECHANGED, sent|defwinproc|optional }, - { WM_STYLECHANGING, sent|defwinproc|optional }, - { WM_STYLECHANGED, sent|defwinproc|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_CTLCOLORDLG, sent|defwinproc|optional }, /* sent to a parent of the dialog */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_VALUECHANGE, winevent_hook|lparam|optional, 0/*OBJID_HSCROLL or OBJID_VSCROLL*/, 0 }, - { WM_GETTEXT, sent|optional }, - { WM_GETTEXT, sent|optional }, - { WM_GETTEXT, sent|optional }, - { WM_GETTEXT, sent|optional }, - { 0 } -}; -/* test if we receive the right sequence of messages */ -/* after calling ShowWindow( SW_SHOWNA) */ -static const struct message WmSHOWNAChildInvisParInvis[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { 0 } -}; -static const struct message WmSHOWNAChildVisParInvis[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { 0 } -}; -static const struct message WmSHOWNAChildVisParVis[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE }, - { 0 } -}; -static const struct message WmSHOWNAChildInvisParVis[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOACTIVATE|SWP_NOCLIENTMOVE }, - { 0 } -}; -static const struct message WmSHOWNATopVisible[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE }, - { 0 } -}; -static const struct message WmSHOWNATopInvisible[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCPAINT, sent|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { WM_NCPAINT, sent|wparam|optional, 1 }, - { WM_ERASEBKGND, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { 0 } -}; - -static int after_end_dialog, test_def_id; -static int sequence_cnt, sequence_size; -static struct message* sequence; -static int log_all_parent_messages; - -/* user32 functions */ -static HWND (WINAPI *pGetAncestor)(HWND,UINT); -static void (WINAPI *pNotifyWinEvent)(DWORD, HWND, LONG, LONG); -static HWINEVENTHOOK (WINAPI *pSetWinEventHook)(DWORD, DWORD, HMODULE, WINEVENTPROC, DWORD, DWORD, DWORD); -static BOOL (WINAPI *pTrackMouseEvent)(TRACKMOUSEEVENT*); -static BOOL (WINAPI *pUnhookWinEvent)(HWINEVENTHOOK); -/* kernel32 functions */ -static BOOL (WINAPI *pGetCPInfoExA)(UINT, DWORD, LPCPINFOEXA); - -static void init_procs(void) -{ - HMODULE user32 = GetModuleHandleA("user32.dll"); - HMODULE kernel32 = GetModuleHandleA("kernel32.dll"); - -#define GET_PROC(dll, func) \ - p ## func = (void*)GetProcAddress(dll, #func); \ - if(!p ## func) { \ - trace("GetProcAddress(%s) failed\n", #func); \ - } - - GET_PROC(user32, GetAncestor) - GET_PROC(user32, NotifyWinEvent) - GET_PROC(user32, SetWinEventHook) - GET_PROC(user32, TrackMouseEvent) - GET_PROC(user32, UnhookWinEvent) - - GET_PROC(kernel32, GetCPInfoExA) - -#undef GET_PROC -} - -static void add_message(const struct message *msg) -{ - if (!sequence) - { - sequence_size = 10; - sequence = HeapAlloc( GetProcessHeap(), 0, sequence_size * sizeof (struct message) ); - } - if (sequence_cnt == sequence_size) - { - sequence_size *= 2; - sequence = HeapReAlloc( GetProcessHeap(), 0, sequence, sequence_size * sizeof (struct message) ); - } - assert(sequence); - - sequence[sequence_cnt].message = msg->message; - sequence[sequence_cnt].flags = msg->flags; - sequence[sequence_cnt].wParam = msg->wParam; - sequence[sequence_cnt].lParam = msg->lParam; - - sequence_cnt++; -} - -/* try to make sure pending X events have been processed before continuing */ -static void flush_events(void) -{ - MSG msg; - int diff = 200; - int min_timeout = 50; - DWORD time = GetTickCount() + diff; - - while (diff > 0) - { - if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min_timeout, QS_ALLINPUT ) == WAIT_TIMEOUT) break; - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - diff = time - GetTickCount(); - min_timeout = 10; - } -} - -static void flush_sequence(void) -{ - HeapFree(GetProcessHeap(), 0, sequence); - sequence = 0; - sequence_cnt = sequence_size = 0; -} - -#define ok_sequence( exp, contx, todo) \ - ok_sequence_( (exp), (contx), (todo), __FILE__, __LINE__) - - -static void ok_sequence_(const struct message *expected, const char *context, int todo, - const char *file, int line) -{ - static const struct message end_of_sequence = { 0, 0, 0, 0 }; - const struct message *actual; - int failcount = 0; - - add_message(&end_of_sequence); - - actual = sequence; - - while (expected->message && actual->message) - { - trace_( file, line)("expected %04x - actual %04x\n", expected->message, actual->message); - - if (expected->message == actual->message) - { - if (expected->flags & wparam) - { - if (expected->wParam != actual->wParam && todo) - { - todo_wine { - failcount ++; - ok_( file, line) (FALSE, - "%s: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n", - context, expected->message, expected->wParam, actual->wParam); - } - } - else - ok_( file, line) (expected->wParam == actual->wParam, - "%s: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n", - context, expected->message, expected->wParam, actual->wParam); - } - if (expected->flags & lparam) - { - if (expected->lParam != actual->lParam && todo) - { - todo_wine { - failcount ++; - ok_( file, line) (FALSE, - "%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n", - context, expected->message, expected->lParam, actual->lParam); - } - } - else - ok_( file, line) (expected->lParam == actual->lParam, - "%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n", - context, expected->message, expected->lParam, actual->lParam); - } - if ((expected->flags & defwinproc) != (actual->flags & defwinproc) && todo) - { - todo_wine { - failcount ++; - ok_( file, line) (FALSE, - "%s: the msg 0x%04x should %shave been sent by DefWindowProc\n", - context, expected->message, (expected->flags & defwinproc) ? "" : "NOT "); - } - } - else - ok_( file, line) ((expected->flags & defwinproc) == (actual->flags & defwinproc), - "%s: the msg 0x%04x should %shave been sent by DefWindowProc\n", - context, expected->message, (expected->flags & defwinproc) ? "" : "NOT "); - ok_( file, line) ((expected->flags & beginpaint) == (actual->flags & beginpaint), - "%s: the msg 0x%04x should %shave been sent by BeginPaint\n", - context, expected->message, (expected->flags & beginpaint) ? "" : "NOT "); - ok_( file, line) ((expected->flags & (sent|posted)) == (actual->flags & (sent|posted)), - "%s: the msg 0x%04x should have been %s\n", - context, expected->message, (expected->flags & posted) ? "posted" : "sent"); - ok_( file, line) ((expected->flags & parent) == (actual->flags & parent), - "%s: the msg 0x%04x was expected in %s\n", - context, expected->message, (expected->flags & parent) ? "parent" : "child"); - ok_( file, line) ((expected->flags & hook) == (actual->flags & hook), - "%s: the msg 0x%04x should have been sent by a hook\n", - context, expected->message); - ok_( file, line) ((expected->flags & winevent_hook) == (actual->flags & winevent_hook), - "%s: the msg 0x%04x should have been sent by a winevent hook\n", - context, expected->message); - expected++; - actual++; - } - /* silently drop winevent messages if there is no support for them */ - else if ((expected->flags & optional) || ((expected->flags & winevent_hook) && !hEvent_hook)) - expected++; - else if (todo) - { - failcount++; - todo_wine { - ok_( file, line) (FALSE, "%s: the msg 0x%04x was expected, but got msg 0x%04x instead\n", - context, expected->message, actual->message); - } - flush_sequence(); - return; - } - else - { - ok_( file, line) (FALSE, "%s: the msg 0x%04x was expected, but got msg 0x%04x instead\n", - context, expected->message, actual->message); - expected++; - actual++; - } - } - - /* skip all optional trailing messages */ - while (expected->message && ((expected->flags & optional) || - ((expected->flags & winevent_hook) && !hEvent_hook))) - expected++; - - if (todo) - { - todo_wine { - if (expected->message || actual->message) { - failcount++; - ok_( file, line) (FALSE, "%s: the msg sequence is not complete: expected %04x - actual %04x\n", - context, expected->message, actual->message); - } - } - } - else - { - if (expected->message || actual->message) - ok_( file, line) (FALSE, "%s: the msg sequence is not complete: expected %04x - actual %04x\n", - context, expected->message, actual->message); - } - if( todo && !failcount) /* succeeded yet marked todo */ - todo_wine { - ok_( file, line)( TRUE, "%s: marked \"todo_wine\" but succeeds\n", context); - } - - flush_sequence(); -} - -/******************************** MDI test **********************************/ - -/* CreateWindow for MDI frame window, initially visible */ -static const struct message WmCreateMDIframeSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_ACTIVATE, hook }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* XP */ - { WM_ACTIVATEAPP, sent|wparam|optional, 1 }, /* Win9x doesn't send it */ - { WM_NCACTIVATE, sent|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ACTIVATE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* Win9x */ - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - /* Win9x adds SWP_NOZORDER below */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* XP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { 0 } -}; -/* DestroyWindow for MDI frame window, initially visible */ -static const struct message WmDestroyMDIframeSeq[] = { - { HCBT_DESTROYWND, hook }, - { 0x0090, sent|optional }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_NCACTIVATE, sent|wparam|optional, 0 }, /* Win9x */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCACTIVATE, sent|wparam|optional, 0 }, /* XP */ - { WM_ACTIVATE, sent|wparam|optional, 0 }, /* Win9x */ - { WM_ACTIVATEAPP, sent|wparam|optional, 0 }, /* Win9x */ - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent }, - { WM_NCDESTROY, sent }, - { 0 } -}; -/* CreateWindow for MDI client window, initially visible */ -static const struct message WmCreateMDIclientSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam|optional, 0, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam|optional, 0, 0 }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { WM_PARENTNOTIFY, sent|wparam, WM_CREATE }, /* in MDI frame */ - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* ShowWindow(SW_SHOW) for MDI client window */ -static const struct message WmShowMDIclientSeq[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* ShowWindow(SW_HIDE) for MDI client window */ -static const struct message WmHideMDIclientSeq[] = { - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam|optional, 0, 0 }, /* win2000 */ - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* XP */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -/* DestroyWindow for MDI client window, initially visible */ -static const struct message WmDestroyMDIclientSeq[] = { - { HCBT_DESTROYWND, hook }, - { 0x0090, sent|optional }, - { WM_PARENTNOTIFY, sent|wparam, WM_DESTROY }, /* in MDI frame */ - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent }, - { WM_NCDESTROY, sent }, - { 0 } -}; -/* CreateWindow for MDI child window, initially visible */ -static const struct message WmCreateMDIchildVisibleSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - /* Win2k sends wparam set to - * MAKEWPARAM(WM_CREATE, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */ - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_MDIREFRESHMENU, sent/*|wparam|lparam, 0, 0*/ }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - - /* Win9x: message sequence terminates here. */ - - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, - { HCBT_SETFOCUS, hook }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { WM_IME_NOTIFY, sent|wparam|optional, 2 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - { WM_MDIACTIVATE, sent|defwinproc }, - { 0 } -}; -/* CreateWindow for MDI child window with invisible parent */ -static const struct message WmCreateMDIchildInvisibleParentSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam|optional, 0, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */ - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_MDIREFRESHMENU, sent }, /* in MDI client */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - - /* Win9x: message sequence terminates here. */ - - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, - { HCBT_SETFOCUS, hook }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { WM_IME_NOTIFY, sent|wparam|optional, 2 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - { WM_MDIACTIVATE, sent|defwinproc }, - { 0 } -}; -/* DestroyWindow for MDI child window, initially visible */ -static const struct message WmDestroyMDIchildVisibleSeq[] = { - { HCBT_DESTROYWND, hook }, - /* Win2k sends wparam set to - * MAKEWPARAM(WM_DESTROY, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { 0x0090, sent|optional }, - { WM_PARENTNOTIFY, sent /*|wparam, WM_DESTROY*/ }, /* in MDI client */ - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - - /* { WM_DESTROY, sent } - * Win9x: message sequence terminates here. - */ - - { HCBT_SETFOCUS, hook }, /* set focus to MDI client */ - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - - { HCBT_SETFOCUS, hook }, /* MDI client sets focus back to MDI child */ - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - - { HCBT_SETFOCUS, hook }, /* set focus to MDI client */ - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - - { HCBT_SETFOCUS, hook }, /* MDI client sets focus back to MDI child */ - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - - { WM_DESTROY, sent }, - - { HCBT_SETFOCUS, hook }, /* set focus to MDI client */ - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - - { HCBT_SETFOCUS, hook }, /* MDI client sets focus back to MDI child */ - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - - { WM_NCDESTROY, sent }, - { 0 } -}; -/* CreateWindow for MDI child window, initially invisible */ -static const struct message WmCreateMDIchildInvisibleSeq[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - /* Win2k sends wparam set to - * MAKEWPARAM(WM_CREATE, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */ - { 0 } -}; -/* DestroyWindow for MDI child window, initially invisible */ -static const struct message WmDestroyMDIchildInvisibleSeq[] = { - { HCBT_DESTROYWND, hook }, - /* Win2k sends wparam set to - * MAKEWPARAM(WM_DESTROY, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { 0x0090, sent|optional }, - { WM_PARENTNOTIFY, sent /*|wparam, WM_DESTROY*/ }, /* in MDI client */ - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent }, - { WM_NCDESTROY, sent }, - /* FIXME: Wine destroys an icon/title window while Windows doesn't */ - { WM_PARENTNOTIFY, sent|wparam|optional, WM_DESTROY }, /* MDI client */ - { 0 } -}; -/* CreateWindow for the 1st MDI child window, initially visible and maximized */ -static const struct message WmCreateMDIchildVisibleMaxSeq1[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - /* Win2k sends wparam set to - * MAKEWPARAM(WM_CREATE, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */ - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_MDIREFRESHMENU, sent/*|wparam|lparam, 0, 0*/ }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - - /* Win9x: message sequence terminates here. */ - - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, - { HCBT_SETFOCUS, hook }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { WM_IME_NOTIFY, sent|wparam|optional, 2 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - { WM_MDIACTIVATE, sent|defwinproc }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { 0 } -}; -/* CreateWindow for the 2nd MDI child window, initially visible and maximized */ -static const struct message WmCreateMDIchildVisibleMaxSeq2[] = { - /* restore the 1st MDI child */ - { WM_SETREDRAW, sent|wparam, 0 }, - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWNORMAL }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { WM_SETREDRAW, sent|wparam, 1 }, /* in the 1st MDI child */ - /* create the 2nd MDI child */ - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - /* Win2k sends wparam set to - * MAKEWPARAM(WM_CREATE, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */ - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_MDIREFRESHMENU, sent/*|wparam|lparam, 0, 0*/ }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - - { WM_NCACTIVATE, sent|wparam|defwinproc, 0 }, /* in the 1st MDI child */ - { WM_MDIACTIVATE, sent|defwinproc }, /* in the 1st MDI child */ - - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - - /* Win9x: message sequence terminates here. */ - - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent|defwinproc }, /* in the 1st MDI child */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 0 }, /* in the 1st MDI child */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - - { WM_MDIACTIVATE, sent|defwinproc }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { 0 } -}; -/* WM_MDICREATE MDI child window, initially visible and maximized */ -static const struct message WmCreateMDIchildVisibleMaxSeq3[] = { - { WM_MDICREATE, sent }, - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - - /* Win2k sends wparam set to - * MAKEWPARAM(WM_CREATE, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */ - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_MDIREFRESHMENU, sent/*|wparam|lparam, 0, 0*/ }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - - /* Win9x: message sequence terminates here. */ - - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, - { WM_SETFOCUS, sent|optional }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { WM_IME_NOTIFY, sent|wparam|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|optional }, /* in MDI client */ - { HCBT_SETFOCUS, hook|optional }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - - { WM_MDIACTIVATE, sent|defwinproc }, - - /* in MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - - /* in MDI client */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - - /* in MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { 0x0093, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - - { 0x0093, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI client */ - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* XP sends it to MDI frame */ - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* XP sends a duplicate */ - - { 0 } -}; -/* CreateWindow for the 1st MDI child window, initially invisible and maximized */ -static const struct message WmCreateMDIchildInvisibleMaxSeq4[] = { - { HCBT_CREATEWND, hook }, - { WM_GETMINMAXINFO, sent }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_STATECHANGED }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* MDI child */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - /* Win2k sends wparam set to - * MAKEWPARAM(WM_CREATE, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */ - { 0 } -}; -/* WM_SYSCOMMAND/SC_CLOSE for the 2nd MDI child window, initially visible and maximized */ -static const struct message WmDestroyMDIchildVisibleMaxSeq2[] = { - { WM_SYSCOMMAND, sent|wparam, SC_CLOSE }, - { HCBT_SYSCOMMAND, hook }, - { WM_CLOSE, sent|defwinproc }, - { WM_MDIDESTROY, sent }, /* in MDI client */ - - /* bring the 1st MDI child to top */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOSIZE|SWP_NOMOVE }, /* in the 1st MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, /* in the 2nd MDI child */ - - { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - - { WM_CHILDACTIVATE, sent|defwinproc|wparam|lparam, 0, 0 }, /* in the 1st MDI child */ - { WM_NCACTIVATE, sent|wparam|defwinproc, 0 }, /* in the 1st MDI child */ - { WM_MDIACTIVATE, sent|defwinproc }, /* in the 1st MDI child */ - - /* maximize the 1st MDI child */ - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|defwinproc|wparam, 1 }, - { WM_CHILDACTIVATE, sent|defwinproc|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - - /* restore the 2nd MDI child */ - { WM_SETREDRAW, sent|defwinproc|wparam, 0 }, - { HCBT_MINMAX, hook|lparam, 0, SW_NORMALNA }, - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_SHOWWINDOW|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|defwinproc|wparam, 1 }, - - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - - { WM_SETREDRAW, sent|defwinproc|wparam, 1 }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - - /* bring the 1st MDI child to top */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent|defwinproc }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - { WM_MDIACTIVATE, sent|defwinproc }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - - /* apparently ShowWindow(SW_SHOW) on an MDI client */ - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_MDIREFRESHMENU, sent }, - - { HCBT_DESTROYWND, hook }, - /* Win2k sends wparam set to - * MAKEWPARAM(WM_DESTROY, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { 0x0090, sent|defwinproc|optional }, - { WM_PARENTNOTIFY, sent /*|wparam, WM_DESTROY*/ }, /* in MDI client */ - { WM_SHOWWINDOW, sent|defwinproc|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent|defwinproc }, - { WM_NCDESTROY, sent|defwinproc }, - { 0 } -}; -/* WM_MDIDESTROY for the single MDI child window, initially visible and maximized */ -static const struct message WmDestroyMDIchildVisibleMaxSeq1[] = { - { WM_MDIDESTROY, sent }, /* in MDI client */ - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, - - /* in MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - - /* in MDI client */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - - /* in MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - - /* in MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 1 }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - - /* in MDI client */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - - /* in MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI client */ - - { 0x0093, sent|defwinproc|optional }, - { WM_NCCALCSIZE, sent|wparam|defwinproc|optional, 1 }, /* XP sends it to MDI frame */ - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|optional }, - - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI client */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* XP sends a duplicate */ - - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { 0x0093, sent|optional }, - - { WM_NCACTIVATE, sent|wparam, 0 }, - { WM_MDIACTIVATE, sent }, - - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWNORMAL }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_SHOWWINDOW|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - - /* in MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - - /* in MDI client */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* XP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI client */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* XP sends a duplicate */ - - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - - { WM_MDIREFRESHMENU, sent }, /* in MDI client */ - - { HCBT_DESTROYWND, hook }, - /* Win2k sends wparam set to - * MAKEWPARAM(WM_DESTROY, MDI_FIRST_CHILD_ID + nTotalCreated), - * while Win9x doesn't bother to set child window id according to - * CLIENTCREATESTRUCT.idFirstChild - */ - { 0x0090, sent|optional }, - { WM_PARENTNOTIFY, sent /*|wparam, WM_DESTROY*/ }, /* in MDI client */ - - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_ERASEBKGND, sent|parent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, - { WM_DESTROY, sent }, - { WM_NCDESTROY, sent }, - { 0 } -}; -/* ShowWindow(SW_MAXIMIZE) for a not visible MDI child window */ -static const struct message WmMaximizeMDIchildInvisibleSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - { WM_MDIACTIVATE, sent|defwinproc }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { 0 } -}; -/* ShowWindow(SW_MAXIMIZE) for a not visible maximized MDI child window */ -static const struct message WmMaximizeMDIchildInvisibleSeq2[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCACTIVATE, sent|wparam|defwinproc, 1 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, /* in MDI client */ - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */ - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - { WM_MDIACTIVATE, sent|defwinproc }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { 0 } -}; -/* WM_MDIMAXIMIZE for an MDI child window with invisible parent */ -static const struct message WmMaximizeMDIchildInvisibleParentSeq[] = { - { WM_MDIMAXIMIZE, sent }, /* in MDI client */ - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam|optional, 0, 0 }, /* XP doesn't send it */ - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOREDRAW|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCCALCSIZE, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI child XP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI client XP */ - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { 0x0093, sent|defwinproc|optional }, - { 0x0094, sent|defwinproc|optional }, - { 0x0094, sent|defwinproc|optional }, - { 0x0094, sent|defwinproc|optional }, - { 0x0094, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0091, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI frame win2000 */ - /* in MDI client */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - /* in MDI child */ - { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE }, - { WM_GETMINMAXINFO, sent|defwinproc }, - { WM_NCCALCSIZE, sent|wparam|defwinproc, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTMOVE }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI child win2000 */ - { WM_NCCALCSIZE, sent|wparam|defwinproc|optional, 1 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI child XP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI child XP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI client XP */ - /* in MDI frame */ - { 0x0093, sent|optional }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0093, sent|defwinproc|optional }, - { 0x0091, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { 0x0092, sent|defwinproc|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI frame XP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI frame XP */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam|optional, 0, 0 }, /* MDI child XP */ - { 0 } -}; -/* ShowWindow(SW_MAXIMIZE) for a visible MDI child window */ -static const struct message WmMaximizeMDIchildVisibleSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MAXIMIZED }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { 0 } -}; -/* ShowWindow(SW_RESTORE) for a visible maximized MDI child window */ -static const struct message WmRestoreMDIchildVisibleSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_RESTORE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { 0 } -}; -/* ShowWindow(SW_RESTORE) for a visible minimized MDI child window */ -static const struct message WmRestoreMDIchildVisibleSeq_2[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_RESTORE }, - { WM_QUERYOPEN, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_NOCLIENTSIZE|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { EVENT_SYSTEM_MINIMIZEEND, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent }, - { 0 } -}; -/* ShowWindow(SW_MINIMIZE) for a visible restored MDI child window */ -static const struct message WmMinimizeMDIchildVisibleSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOCLIENTSIZE|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_MINIMIZED }, - { WM_CHILDACTIVATE, sent|wparam|lparam|defwinproc, 0, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { EVENT_SYSTEM_MINIMIZESTART, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - /* FIXME: Wine creates an icon/title window while Windows doesn't */ - { WM_PARENTNOTIFY, sent|parent|wparam|optional, WM_CREATE }, /* MDI client */ - { 0 } -}; -/* ShowWindow(SW_RESTORE) for a not visible MDI child window */ -static const struct message WmRestoreMDIchildInisibleSeq[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_RESTORE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_STATECHANGED }, - { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED }, - /* in MDI frame */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI frame */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, /* MDI child */ - { 0 } -}; - -static HWND mdi_client; -static WNDPROC old_mdi_client_proc; - -static LRESULT WINAPI mdi_client_hook_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_NCPAINT && - message != WM_SYNCPAINT && - message != WM_ERASEBKGND && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_MDIGETACTIVE && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("mdi client: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - switch (message) - { - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - } - - msg.message = message; - msg.flags = sent|wparam|lparam; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - } - - return CallWindowProcA(old_mdi_client_proc, hwnd, message, wParam, lParam); -} - -static LRESULT WINAPI mdi_child_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_NCPAINT && - message != WM_SYNCPAINT && - message != WM_ERASEBKGND && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("mdi child: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - switch (message) - { - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - - case WM_MDIACTIVATE: - { - HWND active, client = GetParent(hwnd); - - active = (HWND)SendMessageA(client, WM_MDIGETACTIVE, 0, 0); - - if (hwnd == (HWND)lParam) /* if we are being activated */ - ok (active == (HWND)lParam, "new active %p != active %p\n", (HWND)lParam, active); - else - ok (active == (HWND)wParam, "old active %p != active %p\n", (HWND)wParam, active); - break; - } - } - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - } - - defwndproc_counter++; - ret = DefMDIChildProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static LRESULT WINAPI mdi_frame_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_NCPAINT && - message != WM_SYNCPAINT && - message != WM_ERASEBKGND && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("mdi frame: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - switch (message) - { - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - } - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - } - - defwndproc_counter++; - ret = DefFrameProcA(hwnd, mdi_client, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static BOOL mdi_RegisterWindowClasses(void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = mdi_frame_wnd_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "MDI_frame_class"; - if (!RegisterClassA(&cls)) return FALSE; - - cls.lpfnWndProc = mdi_child_wnd_proc; - cls.lpszClassName = "MDI_child_class"; - if (!RegisterClassA(&cls)) return FALSE; - - if (!GetClassInfoA(0, "MDIClient", &cls)) assert(0); - old_mdi_client_proc = cls.lpfnWndProc; - cls.hInstance = GetModuleHandleA(0); - cls.lpfnWndProc = mdi_client_hook_proc; - cls.lpszClassName = "MDI_client_class"; - if (!RegisterClassA(&cls)) assert(0); - - return TRUE; -} - -static void test_mdi_messages(void) -{ - MDICREATESTRUCTA mdi_cs; - CLIENTCREATESTRUCT client_cs; - HWND mdi_frame, mdi_child, mdi_child2, active_child; - BOOL zoomed; - HMENU hMenu = CreateMenu(); - - assert(mdi_RegisterWindowClasses()); - - flush_sequence(); - - trace("creating MDI frame window\n"); - mdi_frame = CreateWindowExA(0, "MDI_frame_class", "MDI frame window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_VISIBLE, - 100, 100, CW_USEDEFAULT, CW_USEDEFAULT, - GetDesktopWindow(), hMenu, - GetModuleHandleA(0), NULL); - assert(mdi_frame); - ok_sequence(WmCreateMDIframeSeq, "Create MDI frame window", FALSE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_frame, "wrong focus window %p\n", GetFocus()); - - trace("creating MDI client window\n"); - client_cs.hWindowMenu = 0; - client_cs.idFirstChild = MDI_FIRST_CHILD_ID; - mdi_client = CreateWindowExA(0, "MDI_client_class", - NULL, - WS_CHILD | WS_VISIBLE | MDIS_ALLCHILDSTYLES, - 0, 0, 0, 0, - mdi_frame, 0, GetModuleHandleA(0), &client_cs); - assert(mdi_client); - ok_sequence(WmCreateMDIclientSeq, "Create visible MDI client window", FALSE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_frame, "input focus should be on MDI frame not on %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(!active_child, "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - - SetFocus(0); - flush_sequence(); - - trace("creating invisible MDI child window\n"); - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child); - - flush_sequence(); - ShowWindow(mdi_child, SW_SHOWNORMAL); - ok_sequence(WmShowChildSeq, "ShowWindow(SW_SHOWNORMAL) MDI child window", FALSE); - - ok(GetWindowLongA(mdi_child, GWL_STYLE) & WS_VISIBLE, "MDI child should be visible\n"); - ok(IsWindowVisible(mdi_child), "MDI child should be visible\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(!active_child, "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - - ShowWindow(mdi_child, SW_HIDE); - ok_sequence(WmHideChildSeq, "ShowWindow(SW_HIDE) MDI child window", FALSE); - flush_sequence(); - - ShowWindow(mdi_child, SW_SHOW); - ok_sequence(WmShowChildSeq, "ShowWindow(SW_SHOW) MDI child window", FALSE); - - ok(GetWindowLongA(mdi_child, GWL_STYLE) & WS_VISIBLE, "MDI child should be visible\n"); - ok(IsWindowVisible(mdi_child), "MDI child should be visible\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(!active_child, "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - - DestroyWindow(mdi_child); - flush_sequence(); - - trace("creating visible MDI child window\n"); - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD | WS_VISIBLE, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child); - ok_sequence(WmCreateMDIchildVisibleSeq, "Create visible MDI child window", FALSE); - - ok(GetWindowLongA(mdi_child, GWL_STYLE) & WS_VISIBLE, "MDI child should be visible\n"); - ok(IsWindowVisible(mdi_child), "MDI child should be visible\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child, "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - DestroyWindow(mdi_child); - ok_sequence(WmDestroyMDIchildVisibleSeq, "Destroy visible MDI child window", TRUE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - /* Win2k: MDI client still returns a just destroyed child as active - * Win9x: MDI client returns 0 - */ - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child || /* win2k */ - !active_child, /* win9x */ - "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - - flush_sequence(); - - trace("creating invisible MDI child window\n"); - mdi_child2 = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child2); - ok_sequence(WmCreateMDIchildInvisibleSeq, "Create invisible MDI child window", FALSE); - - ok(!(GetWindowLongA(mdi_child2, GWL_STYLE) & WS_VISIBLE), "MDI child should not be visible\n"); - ok(!IsWindowVisible(mdi_child2), "MDI child should not be visible\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - /* Win2k: MDI client still returns a just destroyed child as active - * Win9x: MDI client returns mdi_child2 - */ - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child || /* win2k */ - active_child == mdi_child2, /* win9x */ - "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - ShowWindow(mdi_child2, SW_MAXIMIZE); - ok_sequence(WmMaximizeMDIchildInvisibleSeq, "ShowWindow(SW_MAXIMIZE):invisible MDI child", FALSE); - - ok(GetWindowLongA(mdi_child2, GWL_STYLE) & WS_VISIBLE, "MDI child should be visible\n"); - ok(IsWindowVisible(mdi_child2), "MDI child should be visible\n"); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child); - ok(zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child2 || /* win2k */ - GetFocus() == 0, /* win9x */ - "wrong focus window %p\n", GetFocus()); - - SetFocus(0); - flush_sequence(); - - ShowWindow(mdi_child2, SW_HIDE); - ok_sequence(WmHideChildSeq, "ShowWindow(SW_HIDE):MDI child", FALSE); - - ShowWindow(mdi_child2, SW_RESTORE); - ok_sequence(WmRestoreMDIchildInisibleSeq, "ShowWindow(SW_RESTORE):invisible MDI child", FALSE); - flush_sequence(); - - ok(GetWindowLongA(mdi_child2, GWL_STYLE) & WS_VISIBLE, "MDI child should be visible\n"); - ok(IsWindowVisible(mdi_child2), "MDI child should be visible\n"); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - SetFocus(0); - flush_sequence(); - - ShowWindow(mdi_child2, SW_HIDE); - ok_sequence(WmHideChildSeq, "ShowWindow(SW_HIDE):MDI child", FALSE); - - ShowWindow(mdi_child2, SW_SHOW); - ok_sequence(WmShowChildSeq, "ShowWindow(SW_SHOW):MDI child", FALSE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - ShowWindow(mdi_child2, SW_MAXIMIZE); - ok_sequence(WmMaximizeMDIchildVisibleSeq, "ShowWindow(SW_MAXIMIZE):MDI child", FALSE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - ShowWindow(mdi_child2, SW_RESTORE); - ok_sequence(WmRestoreMDIchildVisibleSeq, "ShowWindow(SW_RESTORE):maximized MDI child", FALSE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - ShowWindow(mdi_child2, SW_MINIMIZE); - ok_sequence(WmMinimizeMDIchildVisibleSeq, "ShowWindow(SW_MINIMIZE):MDI child", TRUE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - ShowWindow(mdi_child2, SW_RESTORE); - ok_sequence(WmRestoreMDIchildVisibleSeq_2, "ShowWindow(SW_RESTORE):minimized MDI child", TRUE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child2, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child); - ok(!zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - SetFocus(0); - flush_sequence(); - - ShowWindow(mdi_child2, SW_HIDE); - ok_sequence(WmHideChildSeq, "ShowWindow(SW_HIDE):MDI child", FALSE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - DestroyWindow(mdi_child2); - ok_sequence(WmDestroyMDIchildInvisibleSeq, "Destroy invisible MDI child window", FALSE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - /* test for maximized MDI children */ - trace("creating maximized visible MDI child window 1\n"); - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child); - ok_sequence(WmCreateMDIchildVisibleMaxSeq1, "Create maximized visible 1st MDI child window", TRUE); - ok(IsZoomed(mdi_child), "1st MDI child should be maximized\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child || /* win2k */ - GetFocus() == 0, /* win9x */ - "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child, "wrong active MDI child %p\n", active_child); - ok(zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - trace("creating maximized visible MDI child window 2\n"); - mdi_child2 = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child2); - ok_sequence(WmCreateMDIchildVisibleMaxSeq2, "Create maximized visible 2nd MDI child 2 window", TRUE); - ok(IsZoomed(mdi_child2), "2nd MDI child should be maximized\n"); - ok(!IsZoomed(mdi_child), "1st MDI child should NOT be maximized\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child2, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child); - ok(zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - trace("destroying maximized visible MDI child window 2\n"); - DestroyWindow(mdi_child2); - ok_sequence(WmDestroyMDIchildVisibleSeq, "Destroy visible MDI child window", TRUE); - - ok(!IsZoomed(mdi_child), "1st MDI child should NOT be maximized\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - /* Win2k: MDI client still returns a just destroyed child as active - * Win9x: MDI client returns 0 - */ - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2 || /* win2k */ - !active_child, /* win9x */ - "wrong active MDI child %p\n", active_child); - flush_sequence(); - - ShowWindow(mdi_child, SW_MAXIMIZE); - ok(IsZoomed(mdi_child), "1st MDI child should be maximized\n"); - flush_sequence(); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child, "wrong focus window %p\n", GetFocus()); - - trace("re-creating maximized visible MDI child window 2\n"); - mdi_child2 = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child2); - ok_sequence(WmCreateMDIchildVisibleMaxSeq2, "Create maximized visible 2nd MDI child 2 window", TRUE); - ok(IsZoomed(mdi_child2), "2nd MDI child should be maximized\n"); - ok(!IsZoomed(mdi_child), "1st MDI child should NOT be maximized\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child2, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child); - ok(zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - SendMessageA(mdi_child2, WM_SYSCOMMAND, SC_CLOSE, 0); - ok_sequence(WmDestroyMDIchildVisibleMaxSeq2, "WM_SYSCOMMAND/SC_CLOSE on a visible maximized MDI child window", TRUE); - ok(!IsWindow(mdi_child2), "MDI child 2 should be destroyed\n"); - - ok(IsZoomed(mdi_child), "1st MDI child should be maximized\n"); - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child, "wrong active MDI child %p\n", active_child); - ok(zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - DestroyWindow(mdi_child); - ok_sequence(WmDestroyMDIchildVisibleSeq, "Destroy visible MDI child window", TRUE); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - /* Win2k: MDI client still returns a just destroyed child as active - * Win9x: MDI client returns 0 - */ - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child || /* win2k */ - !active_child, /* win9x */ - "wrong active MDI child %p\n", active_child); - flush_sequence(); - - trace("creating maximized invisible MDI child window\n"); - mdi_child2 = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD | WS_MAXIMIZE | WS_CAPTION | WS_THICKFRAME, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child2); - ok_sequence(WmCreateMDIchildInvisibleMaxSeq4, "Create maximized invisible MDI child window", TRUE); - ok(IsZoomed(mdi_child2), "MDI child should be maximized\n"); - ok(!(GetWindowLongA(mdi_child2, GWL_STYLE) & WS_VISIBLE), "MDI child should be not visible\n"); - ok(!IsWindowVisible(mdi_child2), "MDI child should be not visible\n"); - - /* Win2k: MDI client still returns a just destroyed child as active - * Win9x: MDI client returns 0 - */ - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child || /* win2k */ - !active_child, /* win9x */ - "wrong active MDI child %p\n", active_child); - flush_sequence(); - - trace("call ShowWindow(mdi_child, SW_MAXIMIZE)\n"); - ShowWindow(mdi_child2, SW_MAXIMIZE); - ok_sequence(WmMaximizeMDIchildInvisibleSeq2, "ShowWindow(SW_MAXIMIZE):invisible maximized MDI child", FALSE); - ok(IsZoomed(mdi_child2), "MDI child should be maximized\n"); - ok(GetWindowLongA(mdi_child2, GWL_STYLE) & WS_VISIBLE, "MDI child should be visible\n"); - ok(IsWindowVisible(mdi_child2), "MDI child should be visible\n"); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child); - ok(zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child2, 0); - flush_sequence(); - - /* end of test for maximized MDI children */ - SetFocus(0); - flush_sequence(); - trace("creating maximized visible MDI child window 1(Switch test)\n"); - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child); - ok_sequence(WmCreateMDIchildVisibleMaxSeq1, "Create maximized visible 1st MDI child window(Switch test)", TRUE); - ok(IsZoomed(mdi_child), "1st MDI child should be maximized(Switch test)\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p(Switch test)\n", GetActiveWindow()); - ok(GetFocus() == mdi_child || /* win2k */ - GetFocus() == 0, /* win9x */ - "wrong focus window %p(Switch test)\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child, "wrong active MDI child %p(Switch test)\n", active_child); - ok(zoomed, "wrong zoomed state %d(Switch test)\n", zoomed); - flush_sequence(); - - trace("creating maximized visible MDI child window 2(Switch test)\n"); - mdi_child2 = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE, - 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandleA(0), NULL); - assert(mdi_child2); - ok_sequence(WmCreateMDIchildVisibleMaxSeq2, "Create maximized visible 2nd MDI child window (Switch test)", TRUE); - - ok(IsZoomed(mdi_child2), "2nd MDI child should be maximized(Switch test)\n"); - ok(!IsZoomed(mdi_child), "1st MDI child should NOT be maximized(Switch test)\n"); - - ok(GetActiveWindow() == mdi_frame, "wrong active window %p(Switch test)\n", GetActiveWindow()); - ok(GetFocus() == mdi_child2, "wrong focus window %p(Switch test)\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child2, "wrong active MDI child %p(Switch test)\n", active_child); - ok(zoomed, "wrong zoomed state %d(Switch test)\n", zoomed); - flush_sequence(); - - trace("Switch child window.\n"); - SendMessageA(mdi_client, WM_MDIACTIVATE, (WPARAM)mdi_child, 0); - ok_sequence(WmSwitchChild, "Child did not switch correctly", TRUE); - trace("end of test for switch maximized MDI children\n"); - flush_sequence(); - - /* Prepare for switching test of not maximized MDI children */ - ShowWindow( mdi_child, SW_NORMAL ); - ok(!IsZoomed(mdi_child), "wrong zoomed state for %p(Switch test)\n", mdi_child); - ok(!IsZoomed(mdi_child2), "wrong zoomed state for %p(Switch test)\n", mdi_child2); - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, 0); - ok(active_child == mdi_child, "wrong active MDI child %p(Switch test)\n", active_child); - flush_sequence(); - - SendMessageA(mdi_client, WM_MDIACTIVATE, (WPARAM)mdi_child2, 0); - ok_sequence(WmSwitchNotMaximizedChild, "Not maximized child did not switch correctly", FALSE); - trace("end of test for switch not maximized MDI children\n"); - flush_sequence(); - - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - flush_sequence(); - - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child2, 0); - flush_sequence(); - - SetFocus(0); - flush_sequence(); - /* end of tests for switch maximized/not maximized MDI children */ - - mdi_cs.szClass = "MDI_child_Class"; - mdi_cs.szTitle = "MDI child"; - mdi_cs.hOwner = GetModuleHandleA(0); - mdi_cs.x = 0; - mdi_cs.y = 0; - mdi_cs.cx = CW_USEDEFAULT; - mdi_cs.cy = CW_USEDEFAULT; - mdi_cs.style = WS_CHILD | WS_SYSMENU | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE; - mdi_cs.lParam = 0; - mdi_child = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&mdi_cs); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok_sequence(WmCreateMDIchildVisibleMaxSeq3, "WM_MDICREATE for maximized visible MDI child window", TRUE); - - ok(GetMenuItemID(hMenu, GetMenuItemCount(hMenu) - 1) == SC_CLOSE, "SC_CLOSE menu item not found\n"); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child, "wrong active MDI child %p\n", active_child); - - ok(IsZoomed(mdi_child), "MDI child should be maximized\n"); - ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n", GetActiveWindow()); - ok(GetFocus() == mdi_child, "wrong focus window %p\n", GetFocus()); - - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(active_child == mdi_child, "wrong active MDI child %p\n", active_child); - ok(zoomed, "wrong zoomed state %d\n", zoomed); - flush_sequence(); - - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok_sequence(WmDestroyMDIchildVisibleMaxSeq1, "Destroy visible maximized MDI child window", TRUE); - - ok(!IsWindow(mdi_child), "MDI child should be destroyed\n"); - active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed); - ok(!active_child, "wrong active MDI child %p\n", active_child); - - SetFocus(0); - flush_sequence(); - - DestroyWindow(mdi_client); - ok_sequence(WmDestroyMDIclientSeq, "Destroy MDI client window", FALSE); - - /* test maximization of MDI child with invisible parent */ - client_cs.hWindowMenu = 0; - mdi_client = CreateWindow("MDI_client_class", - NULL, - WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE, - 0, 0, 660, 430, - mdi_frame, 0, GetModuleHandleA(0), &client_cs); - ok_sequence(WmCreateMDIclientSeq, "Create MDI client window", FALSE); - - ShowWindow(mdi_client, SW_HIDE); - ok_sequence(WmHideMDIclientSeq, "Hide MDI client window", FALSE); - - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child", - WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, - 0, 0, 650, 440, - mdi_client, 0, GetModuleHandleA(0), NULL); - ok_sequence(WmCreateMDIchildInvisibleParentSeq, "Create MDI child window with invisible parent", FALSE); - - SendMessage(mdi_client, WM_MDIMAXIMIZE, (WPARAM) mdi_child, 0); - ok_sequence(WmMaximizeMDIchildInvisibleParentSeq, "Maximize MDI child window with invisible parent", TRUE); - zoomed = IsZoomed(mdi_child); - ok(zoomed, "wrong zoomed state %d\n", zoomed); - - ShowWindow(mdi_client, SW_SHOW); - ok_sequence(WmShowMDIclientSeq, "Show MDI client window", FALSE); - - DestroyWindow(mdi_child); - ok_sequence(WmDestroyMDIchildVisibleSeq, "Destroy visible maximized MDI child window", TRUE); - - /* end of test for maximization of MDI child with invisible parent */ - - DestroyWindow(mdi_client); - ok_sequence(WmDestroyMDIclientSeq, "Destroy MDI client window", FALSE); - - DestroyWindow(mdi_frame); - ok_sequence(WmDestroyMDIframeSeq, "Destroy MDI frame window", FALSE); -} -/************************* End of MDI test **********************************/ - -static void test_WM_SETREDRAW(HWND hwnd) -{ - DWORD style = GetWindowLongA(hwnd, GWL_STYLE); - - flush_sequence(); - - SendMessageA(hwnd, WM_SETREDRAW, FALSE, 0); - ok_sequence(WmSetRedrawFalseSeq, "SetRedraw:FALSE", FALSE); - - ok(!(GetWindowLongA(hwnd, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should NOT be set\n"); - ok(!IsWindowVisible(hwnd), "IsWindowVisible() should return FALSE\n"); - - flush_sequence(); - SendMessageA(hwnd, WM_SETREDRAW, TRUE, 0); - ok_sequence(WmSetRedrawTrueSeq, "SetRedraw:TRUE", FALSE); - - ok(GetWindowLongA(hwnd, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(IsWindowVisible(hwnd), "IsWindowVisible() should return TRUE\n"); - - /* restore original WS_VISIBLE state */ - SetWindowLongA(hwnd, GWL_STYLE, style); - - flush_sequence(); -} - -static INT_PTR CALLBACK TestModalDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct message msg; - - trace("dialog: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - /* explicitly ignore WM_GETICON message */ - if (message == WM_GETICON) return 0; - - switch (message) - { - /* ignore */ - case WM_MOUSEMOVE: - case WM_SETCURSOR: - case WM_DEVICECHANGE: - return 0; - case WM_NCHITTEST: - return HTCLIENT; - - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - } - - msg.message = message; - msg.flags = sent|wparam|lparam; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - if (message == WM_INITDIALOG) SetTimer( hwnd, 1, 100, NULL ); - if (message == WM_TIMER) EndDialog( hwnd, 0 ); - return 0; -} - -static void test_hv_scroll_1(HWND hwnd, INT ctl, DWORD clear, DWORD set, INT min, INT max) -{ - DWORD style, exstyle; - INT xmin, xmax; - BOOL ret; - - exstyle = GetWindowLongA(hwnd, GWL_EXSTYLE); - style = GetWindowLongA(hwnd, GWL_STYLE); - /* do not be confused by WS_DLGFRAME set */ - if ((style & WS_CAPTION) == WS_CAPTION) style &= ~WS_CAPTION; - - if (clear) ok(style & clear, "style %08x should be set\n", clear); - if (set) ok(!(style & set), "style %08x should not be set\n", set); - - ret = SetScrollRange(hwnd, ctl, min, max, FALSE); - ok( ret, "SetScrollRange(%d) error %d\n", ctl, GetLastError()); - if ((style & (WS_DLGFRAME | WS_BORDER | WS_THICKFRAME)) || (exstyle & WS_EX_DLGMODALFRAME)) - ok_sequence(WmSetScrollRangeHV_NC_Seq, "SetScrollRange(SB_HORZ/SB_VERT) NC", FALSE); - else - ok_sequence(WmSetScrollRangeHVSeq, "SetScrollRange(SB_HORZ/SB_VERT)", FALSE); - - style = GetWindowLongA(hwnd, GWL_STYLE); - if (set) ok(style & set, "style %08x should be set\n", set); - if (clear) ok(!(style & clear), "style %08x should not be set\n", clear); - - /* a subsequent call should do nothing */ - ret = SetScrollRange(hwnd, ctl, min, max, FALSE); - ok( ret, "SetScrollRange(%d) error %d\n", ctl, GetLastError()); - ok_sequence(WmEmptySeq, "SetScrollRange(SB_HORZ/SB_VERT) empty sequence", FALSE); - - xmin = 0xdeadbeef; - xmax = 0xdeadbeef; - trace("Ignore GetScrollRange error below if you are on Win9x\n"); - ret = GetScrollRange(hwnd, ctl, &xmin, &xmax); - ok( ret, "GetScrollRange(%d) error %d\n", ctl, GetLastError()); - ok_sequence(WmEmptySeq, "GetScrollRange(SB_HORZ/SB_VERT) empty sequence", FALSE); - ok(xmin == min, "unexpected min scroll value %d\n", xmin); - ok(xmax == max, "unexpected max scroll value %d\n", xmax); -} - -static void test_hv_scroll_2(HWND hwnd, INT ctl, DWORD clear, DWORD set, INT min, INT max) -{ - DWORD style, exstyle; - SCROLLINFO si; - BOOL ret; - - exstyle = GetWindowLongA(hwnd, GWL_EXSTYLE); - style = GetWindowLongA(hwnd, GWL_STYLE); - /* do not be confused by WS_DLGFRAME set */ - if ((style & WS_CAPTION) == WS_CAPTION) style &= ~WS_CAPTION; - - if (clear) ok(style & clear, "style %08x should be set\n", clear); - if (set) ok(!(style & set), "style %08x should not be set\n", set); - - si.cbSize = sizeof(si); - si.fMask = SIF_RANGE; - si.nMin = min; - si.nMax = max; - SetScrollInfo(hwnd, ctl, &si, TRUE); - if ((style & (WS_DLGFRAME | WS_BORDER | WS_THICKFRAME)) || (exstyle & WS_EX_DLGMODALFRAME)) - ok_sequence(WmSetScrollRangeHV_NC_Seq, "SetScrollInfo(SB_HORZ/SB_VERT) NC", FALSE); - else - ok_sequence(WmSetScrollRangeHVSeq, "SetScrollInfo(SB_HORZ/SB_VERT)", FALSE); - - style = GetWindowLongA(hwnd, GWL_STYLE); - if (set) ok(style & set, "style %08x should be set\n", set); - if (clear) ok(!(style & clear), "style %08x should not be set\n", clear); - - /* a subsequent call should do nothing */ - SetScrollInfo(hwnd, ctl, &si, TRUE); - if (style & WS_HSCROLL) - ok_sequence(WmSetScrollRangeHSeq_empty, "SetScrollInfo(SB_HORZ/SB_VERT) empty sequence", FALSE); - else if (style & WS_VSCROLL) - ok_sequence(WmSetScrollRangeVSeq_empty, "SetScrollInfo(SB_HORZ/SB_VERT) empty sequence", FALSE); - else - ok_sequence(WmEmptySeq, "SetScrollInfo(SB_HORZ/SB_VERT) empty sequence", FALSE); - - si.fMask = SIF_PAGE; - si.nPage = 5; - SetScrollInfo(hwnd, ctl, &si, FALSE); - ok_sequence(WmEmptySeq, "SetScrollInfo(SB_HORZ/SB_VERT) empty sequence", FALSE); - - si.fMask = SIF_POS; - si.nPos = max - 1; - SetScrollInfo(hwnd, ctl, &si, FALSE); - ok_sequence(WmEmptySeq, "SetScrollInfo(SB_HORZ/SB_VERT) empty sequence", FALSE); - - si.fMask = SIF_RANGE; - si.nMin = 0xdeadbeef; - si.nMax = 0xdeadbeef; - ret = GetScrollInfo(hwnd, ctl, &si); - ok( ret, "GetScrollInfo error %d\n", GetLastError()); - ok_sequence(WmEmptySeq, "GetScrollRange(SB_HORZ/SB_VERT) empty sequence", FALSE); - ok(si.nMin == min, "unexpected min scroll value %d\n", si.nMin); - ok(si.nMax == max, "unexpected max scroll value %d\n", si.nMax); -} - -/* Win9x sends WM_USER+xxx while and NT versions send SBM_xxx messages */ -static void test_scroll_messages(HWND hwnd) -{ - SCROLLINFO si; - INT min, max; - BOOL ret; - - min = 0xdeadbeef; - max = 0xdeadbeef; - ret = GetScrollRange(hwnd, SB_CTL, &min, &max); - ok( ret, "GetScrollRange error %d\n", GetLastError()); - if (sequence->message != WmGetScrollRangeSeq[0].message) - trace("GetScrollRange(SB_CTL) generated unknown message %04x\n", sequence->message); - /* values of min and max are undefined */ - flush_sequence(); - - ret = SetScrollRange(hwnd, SB_CTL, 10, 150, FALSE); - ok( ret, "SetScrollRange error %d\n", GetLastError()); - if (sequence->message != WmSetScrollRangeSeq[0].message) - trace("SetScrollRange(SB_CTL) generated unknown message %04x\n", sequence->message); - flush_sequence(); - - min = 0xdeadbeef; - max = 0xdeadbeef; - ret = GetScrollRange(hwnd, SB_CTL, &min, &max); - ok( ret, "GetScrollRange error %d\n", GetLastError()); - if (sequence->message != WmGetScrollRangeSeq[0].message) - trace("GetScrollRange(SB_CTL) generated unknown message %04x\n", sequence->message); - /* values of min and max are undefined */ - flush_sequence(); - - si.cbSize = sizeof(si); - si.fMask = SIF_RANGE; - si.nMin = 20; - si.nMax = 160; - SetScrollInfo(hwnd, SB_CTL, &si, FALSE); - if (sequence->message != WmSetScrollRangeSeq[0].message) - trace("SetScrollInfo(SB_CTL) generated unknown message %04x\n", sequence->message); - flush_sequence(); - - si.fMask = SIF_PAGE; - si.nPage = 10; - SetScrollInfo(hwnd, SB_CTL, &si, FALSE); - if (sequence->message != WmSetScrollRangeSeq[0].message) - trace("SetScrollInfo(SB_CTL) generated unknown message %04x\n", sequence->message); - flush_sequence(); - - si.fMask = SIF_POS; - si.nPos = 20; - SetScrollInfo(hwnd, SB_CTL, &si, FALSE); - if (sequence->message != WmSetScrollRangeSeq[0].message) - trace("SetScrollInfo(SB_CTL) generated unknown message %04x\n", sequence->message); - flush_sequence(); - - si.fMask = SIF_RANGE; - si.nMin = 0xdeadbeef; - si.nMax = 0xdeadbeef; - ret = GetScrollInfo(hwnd, SB_CTL, &si); - ok( ret, "GetScrollInfo error %d\n", GetLastError()); - if (sequence->message != WmGetScrollInfoSeq[0].message) - trace("GetScrollInfo(SB_CTL) generated unknown message %04x\n", sequence->message); - /* values of min and max are undefined */ - flush_sequence(); - - /* set WS_HSCROLL */ - test_hv_scroll_1(hwnd, SB_HORZ, 0, WS_HSCROLL, 10, 150); - /* clear WS_HSCROLL */ - test_hv_scroll_1(hwnd, SB_HORZ, WS_HSCROLL, 0, 0, 0); - - /* set WS_HSCROLL */ - test_hv_scroll_2(hwnd, SB_HORZ, 0, WS_HSCROLL, 10, 150); - /* clear WS_HSCROLL */ - test_hv_scroll_2(hwnd, SB_HORZ, WS_HSCROLL, 0, 0, 0); - - /* set WS_VSCROLL */ - test_hv_scroll_1(hwnd, SB_VERT, 0, WS_VSCROLL, 10, 150); - /* clear WS_VSCROLL */ - test_hv_scroll_1(hwnd, SB_VERT, WS_VSCROLL, 0, 0, 0); - - /* set WS_VSCROLL */ - test_hv_scroll_2(hwnd, SB_VERT, 0, WS_VSCROLL, 10, 150); - /* clear WS_VSCROLL */ - test_hv_scroll_2(hwnd, SB_VERT, WS_VSCROLL, 0, 0, 0); -} - -static void test_showwindow(void) -{ - HWND hwnd, hchild; - RECT rc; - - hwnd = CreateWindowExA(0, "TestWindowClass", "Test overlapped", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hwnd, 0, 0, NULL); - ok (hchild != 0, "Failed to create child\n"); - flush_sequence(); - - /* ShowWindow( SW_SHOWNA) for invisible top level window */ - trace("calling ShowWindow( SW_SHOWNA) for invisible top level window\n"); - ok( ShowWindow(hwnd, SW_SHOWNA) == FALSE, "ShowWindow: window was visible\n" ); - ok_sequence(WmSHOWNATopInvisible, "ShowWindow(SW_SHOWNA) on invisible top level window", TRUE); - trace("done\n"); - - /* ShowWindow( SW_SHOWNA) for now visible top level window */ - trace("calling ShowWindow( SW_SHOWNA) for now visible top level window\n"); - ok( ShowWindow(hwnd, SW_SHOWNA) != FALSE, "ShowWindow: window was invisible\n" ); - ok_sequence(WmSHOWNATopVisible, "ShowWindow(SW_SHOWNA) on visible top level window", FALSE); - trace("done\n"); - /* back to invisible */ - ShowWindow(hchild, SW_HIDE); - ShowWindow(hwnd, SW_HIDE); - flush_sequence(); - /* ShowWindow(SW_SHOWNA) with child and parent invisible */ - trace("calling ShowWindow( SW_SHOWNA) for invisible child with invisible parent\n"); - ok( ShowWindow(hchild, SW_SHOWNA) == FALSE, "ShowWindow: window was visible\n" ); - ok_sequence(WmSHOWNAChildInvisParInvis, "ShowWindow(SW_SHOWNA) invisible child and parent", FALSE); - trace("done\n"); - /* ShowWindow(SW_SHOWNA) with child visible and parent invisible */ - ok( ShowWindow(hchild, SW_SHOW) != FALSE, "ShowWindow: window was invisible\n" ); - flush_sequence(); - trace("calling ShowWindow( SW_SHOWNA) for the visible child and invisible parent\n"); - ok( ShowWindow(hchild, SW_SHOWNA) != FALSE, "ShowWindow: window was invisible\n" ); - ok_sequence(WmSHOWNAChildVisParInvis, "ShowWindow(SW_SHOWNA) visible child and invisible parent", FALSE); - trace("done\n"); - /* ShowWindow(SW_SHOWNA) with child visible and parent visible */ - ShowWindow( hwnd, SW_SHOW); - flush_sequence(); - trace("calling ShowWindow( SW_SHOWNA) for the visible child and parent\n"); - ok( ShowWindow(hchild, SW_SHOWNA) != FALSE, "ShowWindow: window was invisible\n" ); - ok_sequence(WmSHOWNAChildVisParVis, "ShowWindow(SW_SHOWNA) for the visible child and parent", FALSE); - trace("done\n"); - - /* ShowWindow(SW_SHOWNA) with child invisible and parent visible */ - ShowWindow( hchild, SW_HIDE); - flush_sequence(); - trace("calling ShowWindow( SW_SHOWNA) for the invisible child and visible parent\n"); - ok( ShowWindow(hchild, SW_SHOWNA) == FALSE, "ShowWindow: window was visible\n" ); - ok_sequence(WmSHOWNAChildInvisParVis, "ShowWindow(SW_SHOWNA) for the invisible child and visible parent", FALSE); - trace("done\n"); - - SetCapture(hchild); - ok(GetCapture() == hchild, "wrong capture window %p\n", GetCapture()); - DestroyWindow(hchild); - ok(!GetCapture(), "wrong capture window %p\n", GetCapture()); - - DestroyWindow(hwnd); - flush_sequence(); - - /* Popup windows */ - /* Test 1: - * 1. Create invisible maximized popup window. - * 2. Move and resize it. - * 3. Show it maximized. - */ - trace("calling CreateWindowExA( WS_MAXIMIZE ) for invisible maximized popup window\n"); - hwnd = CreateWindowExA(0, "TestWindowClass", "Test popup", WS_POPUP | WS_MAXIMIZE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create popup window\n"); - ok(IsZoomed(hwnd), "window should be maximized\n"); - ok_sequence(WmCreateInvisibleMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", FALSE); - trace("done\n"); - - GetWindowRect(hwnd, &rc); - ok( rc.right-rc.left == GetSystemMetrics(SM_CXSCREEN) && - rc.bottom-rc.top == GetSystemMetrics(SM_CYSCREEN), - "Invalid maximized size before ShowWindow (%d,%d)-(%d,%d)\n", - rc.left, rc.top, rc.right, rc.bottom); - /* Reset window's size & position */ - SetWindowPos(hwnd, 0, 10, 10, 200, 200, SWP_NOZORDER | SWP_NOACTIVATE); - ok(IsZoomed(hwnd), "window should be maximized\n"); - flush_sequence(); - - trace("calling ShowWindow( SW_SHOWMAXIMIZE ) for invisible maximized popup window\n"); - ShowWindow(hwnd, SW_SHOWMAXIMIZED); - ok(IsZoomed(hwnd), "window should be maximized\n"); - ok_sequence(WmShowMaxPopupResizedSeq, "ShowWindow(SW_SHOWMAXIMIZED):invisible maximized and resized popup", FALSE); - trace("done\n"); - - GetWindowRect(hwnd, &rc); - ok( rc.right-rc.left == GetSystemMetrics(SM_CXSCREEN) && - rc.bottom-rc.top == GetSystemMetrics(SM_CYSCREEN), - "Invalid maximized size after ShowWindow (%d,%d)-(%d,%d)\n", - rc.left, rc.top, rc.right, rc.bottom); - DestroyWindow(hwnd); - flush_sequence(); - - /* Test 2: - * 1. Create invisible maximized popup window. - * 2. Show it maximized. - */ - trace("calling CreateWindowExA( WS_MAXIMIZE ) for invisible maximized popup window\n"); - hwnd = CreateWindowExA(0, "TestWindowClass", "Test popup", WS_POPUP | WS_MAXIMIZE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create popup window\n"); - ok(IsZoomed(hwnd), "window should be maximized\n"); - ok_sequence(WmCreateInvisibleMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", FALSE); - trace("done\n"); - - trace("calling ShowWindow( SW_SHOWMAXIMIZE ) for invisible maximized popup window\n"); - ShowWindow(hwnd, SW_SHOWMAXIMIZED); - ok(IsZoomed(hwnd), "window should be maximized\n"); - ok_sequence(WmShowMaxPopupSeq, "ShowWindow(SW_SHOWMAXIMIZED):invisible maximized popup", FALSE); - trace("done\n"); - DestroyWindow(hwnd); - flush_sequence(); - - /* Test 3: - * 1. Create visible maximized popup window. - */ - trace("calling CreateWindowExA( WS_MAXIMIZE ) for maximized popup window\n"); - hwnd = CreateWindowExA(0, "TestWindowClass", "Test popup", WS_POPUP | WS_MAXIMIZE | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create popup window\n"); - ok(IsZoomed(hwnd), "window should be maximized\n"); - ok_sequence(WmCreateMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", FALSE); - trace("done\n"); - DestroyWindow(hwnd); - flush_sequence(); - - /* Test 4: - * 1. Create visible popup window. - * 2. Maximize it. - */ - trace("calling CreateWindowExA( WS_VISIBLE ) for popup window\n"); - hwnd = CreateWindowExA(0, "TestWindowClass", "Test popup", WS_POPUP | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create popup window\n"); - ok(!IsZoomed(hwnd), "window should NOT be maximized\n"); - ok_sequence(WmCreatePopupSeq, "CreateWindow(WS_VISIBLE):popup", FALSE); - trace("done\n"); - - trace("calling ShowWindow( SW_SHOWMAXIMIZE ) for visible popup window\n"); - ShowWindow(hwnd, SW_SHOWMAXIMIZED); - ok(IsZoomed(hwnd), "window should be maximized\n"); - ok_sequence(WmShowVisMaxPopupSeq, "ShowWindow(SW_SHOWMAXIMIZED):popup", FALSE); - trace("done\n"); - DestroyWindow(hwnd); - flush_sequence(); -} - -static void test_sys_menu(void) -{ - HWND hwnd; - HMENU hmenu; - UINT state; - - hwnd = CreateWindowExA(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - - flush_sequence(); - - /* test existing window without CS_NOCLOSE style */ - hmenu = GetSystemMenu(hwnd, FALSE); - ok(hmenu != 0, "GetSystemMenu error %d\n", GetLastError()); - - state = GetMenuState(hmenu, SC_CLOSE, MF_BYCOMMAND); - ok(state != 0xffffffff, "wrong SC_CLOSE state %x\n", state); - ok(!(state & (MF_DISABLED | MF_GRAYED)), "wrong SC_CLOSE state %x\n", state); - - EnableMenuItem(hmenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); - ok_sequence(WmEmptySeq, "WmEnableMenuItem", FALSE); - - state = GetMenuState(hmenu, SC_CLOSE, MF_BYCOMMAND); - ok(state != 0xffffffff, "wrong SC_CLOSE state %x\n", state); - ok((state & (MF_DISABLED | MF_GRAYED)) == MF_GRAYED, "wrong SC_CLOSE state %x\n", state); - - EnableMenuItem(hmenu, SC_CLOSE, 0); - ok_sequence(WmEmptySeq, "WmEnableMenuItem", FALSE); - - state = GetMenuState(hmenu, SC_CLOSE, MF_BYCOMMAND); - ok(state != 0xffffffff, "wrong SC_CLOSE state %x\n", state); - ok(!(state & (MF_DISABLED | MF_GRAYED)), "wrong SC_CLOSE state %x\n", state); - - /* test whether removing WS_SYSMENU destroys a system menu */ - SetWindowLongW(hwnd, GWL_STYLE, WS_POPUP); - SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED); - flush_sequence(); - hmenu = GetSystemMenu(hwnd, FALSE); - ok(hmenu != 0, "GetSystemMenu error %d\n", GetLastError()); - - DestroyWindow(hwnd); - - /* test new window with CS_NOCLOSE style */ - hwnd = CreateWindowExA(0, "NoCloseWindowClass", NULL, WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - - hmenu = GetSystemMenu(hwnd, FALSE); - ok(hmenu != 0, "GetSystemMenu error %d\n", GetLastError()); - - state = GetMenuState(hmenu, SC_CLOSE, MF_BYCOMMAND); - ok(state == 0xffffffff, "wrong SC_CLOSE state %x\n", state); - - DestroyWindow(hwnd); - - /* test new window without WS_SYSMENU style */ - hwnd = CreateWindowExA(0, "NoCloseWindowClass", NULL, WS_OVERLAPPEDWINDOW & ~WS_SYSMENU, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok(hwnd != 0, "Failed to create overlapped window\n"); - - hmenu = GetSystemMenu(hwnd, FALSE); - ok(!hmenu, "GetSystemMenu error %d\n", GetLastError()); - - DestroyWindow(hwnd); -} - -/* For shown WS_OVERLAPPEDWINDOW */ -static const struct message WmSetIcon_1[] = { - { WM_SETICON, sent }, - { 0x00AE, sent|defwinproc|optional }, /* XP */ - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, /* XP sends a duplicate */ - { 0 } -}; - -/* For WS_POPUP and hidden WS_OVERLAPPEDWINDOW */ -static const struct message WmSetIcon_2[] = { - { WM_SETICON, sent }, - { 0 } -}; - -/* Sending undocumented 0x3B message with wparam = 0x8000000b */ -static const struct message WmInitEndSession[] = { - { 0x003B, sent }, - { WM_QUERYENDSESSION, sent|defwinproc|wparam|lparam, 0, ENDSESSION_LOGOFF }, - { 0 } -}; - -/* Sending undocumented 0x3B message with wparam = 0x0000000b */ -static const struct message WmInitEndSession_2[] = { - { 0x003B, sent }, - { WM_QUERYENDSESSION, sent|defwinproc|wparam|lparam, 0, 0 }, - { 0 } -}; - -/* Sending undocumented 0x3B message with wparam = 0x80000008 */ -static const struct message WmInitEndSession_3[] = { - { 0x003B, sent }, - { WM_ENDSESSION, sent|defwinproc|wparam|lparam, 0, ENDSESSION_LOGOFF }, - { 0 } -}; - -/* Sending undocumented 0x3B message with wparam = 0x00000008 */ -static const struct message WmInitEndSession_4[] = { - { 0x003B, sent }, - { WM_ENDSESSION, sent|defwinproc|wparam|lparam, 0, 0 }, - { 0 } -}; - -/* Sending undocumented 0x3B message with wparam = 0x80000001 */ -static const struct message WmInitEndSession_5[] = { - { 0x003B, sent }, - { WM_ENDSESSION, sent|defwinproc|wparam|lparam, 1, ENDSESSION_LOGOFF }, - { 0 } -}; - -static void test_MsgWaitForMultipleObjects(HWND hwnd) -{ - DWORD ret; - MSG msg; - - ret = MsgWaitForMultipleObjects(0, NULL, FALSE, 0, QS_POSTMESSAGE); - ok(ret == WAIT_TIMEOUT, "MsgWaitForMultipleObjects returned %x\n", ret); - - PostMessageA(hwnd, WM_USER, 0, 0); - - ret = MsgWaitForMultipleObjects(0, NULL, FALSE, 0, QS_POSTMESSAGE); - ok(ret == WAIT_OBJECT_0, "MsgWaitForMultipleObjects returned %x\n", ret); - - ok(PeekMessageW( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n"); - ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message); - - ret = MsgWaitForMultipleObjects(0, NULL, FALSE, 0, QS_POSTMESSAGE); - ok(ret == WAIT_TIMEOUT, "MsgWaitForMultipleObjects returned %x\n", ret); - - PostMessageA(hwnd, WM_USER, 0, 0); - - ret = MsgWaitForMultipleObjects(0, NULL, FALSE, 0, QS_POSTMESSAGE); - ok(ret == WAIT_OBJECT_0, "MsgWaitForMultipleObjects returned %x\n", ret); - - ok(PeekMessageW( &msg, 0, 0, 0, PM_NOREMOVE ), "PeekMessage should succeed\n"); - ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message); - - /* shows QS_POSTMESSAGE flag is cleared in the PeekMessage call */ - ret = MsgWaitForMultipleObjects(0, NULL, FALSE, 0, QS_POSTMESSAGE); - ok(ret == WAIT_TIMEOUT, "MsgWaitForMultipleObjects returned %x\n", ret); - - PostMessageA(hwnd, WM_USER, 0, 0); - - /* new incoming message causes it to become signaled again */ - ret = MsgWaitForMultipleObjects(0, NULL, FALSE, 0, QS_POSTMESSAGE); - ok(ret == WAIT_OBJECT_0, "MsgWaitForMultipleObjects returned %x\n", ret); - - ok(PeekMessageW( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n"); - ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message); - ok(PeekMessageW( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n"); - ok(msg.message == WM_USER, "got %04x instead of WM_USER\n", msg.message); -} - -/* test if we receive the right sequence of messages */ -static void test_messages(void) -{ - HWND hwnd, hparent, hchild; - HWND hchild2, hbutton; - HMENU hmenu; - MSG msg; - LRESULT res; - - flush_sequence(); - - hwnd = CreateWindowExA(0, "TestWindowClass", "Test overlapped", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - ok_sequence(WmCreateOverlappedSeq, "CreateWindow:overlapped", FALSE); - - /* test ShowWindow(SW_HIDE) on a newly created invisible window */ - ok( ShowWindow(hwnd, SW_HIDE) == FALSE, "ShowWindow: window was visible\n" ); - ok_sequence(WmEmptySeq, "ShowWindow(SW_HIDE):overlapped, invisible", FALSE); - - /* test WM_SETREDRAW on a not visible top level window */ - test_WM_SETREDRAW(hwnd); - - SetWindowPos(hwnd, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE); - ok_sequence(WmSWP_ShowOverlappedSeq, "SetWindowPos:SWP_SHOWWINDOW:overlapped", FALSE); - ok(IsWindowVisible(hwnd), "window should be visible at this point\n"); - - ok(GetActiveWindow() == hwnd, "window should be active\n"); - ok(GetFocus() == hwnd, "window should have input focus\n"); - ShowWindow(hwnd, SW_HIDE); - ok_sequence(WmHideOverlappedSeq, "ShowWindow(SW_HIDE):overlapped", TRUE); - - ShowWindow(hwnd, SW_SHOW); - ok_sequence(WmShowOverlappedSeq, "ShowWindow(SW_SHOW):overlapped", TRUE); - - ShowWindow(hwnd, SW_HIDE); - ok_sequence(WmHideOverlappedSeq, "ShowWindow(SW_HIDE):overlapped", FALSE); - - ShowWindow(hwnd, SW_SHOWMAXIMIZED); - ok_sequence(WmShowMaxOverlappedSeq, "ShowWindow(SW_SHOWMAXIMIZED):overlapped", TRUE); - - ShowWindow(hwnd, SW_RESTORE); - /* FIXME: add ok_sequence() here */ - flush_sequence(); - - ShowWindow(hwnd, SW_MINIMIZE); - ok_sequence(WmShowMinOverlappedSeq, "ShowWindow(SW_SHOWMINIMIZED):overlapped", TRUE); - flush_sequence(); - - ShowWindow(hwnd, SW_RESTORE); - /* FIXME: add ok_sequence() here */ - flush_sequence(); - - ShowWindow(hwnd, SW_SHOW); - ok_sequence(WmEmptySeq, "ShowWindow(SW_SHOW):overlapped already visible", FALSE); - - ok(GetActiveWindow() == hwnd, "window should be active\n"); - ok(GetFocus() == hwnd, "window should have input focus\n"); - SetWindowPos(hwnd, 0,0,0,0,0, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE); - ok_sequence(WmSWP_HideOverlappedSeq, "SetWindowPos:SWP_HIDEWINDOW:overlapped", FALSE); - ok(!IsWindowVisible(hwnd), "window should not be visible at this point\n"); - ok(GetActiveWindow() == hwnd, "window should still be active\n"); - - /* test WM_SETREDRAW on a visible top level window */ - ShowWindow(hwnd, SW_SHOW); - test_WM_SETREDRAW(hwnd); - - trace("testing scroll APIs on a visible top level window %p\n", hwnd); - test_scroll_messages(hwnd); - - /* test resizing and moving */ - SetWindowPos( hwnd, 0, 0, 0, 300, 300, SWP_NOMOVE|SWP_NOACTIVATE ); - ok_sequence(WmSWP_ResizeSeq, "SetWindowPos:Resize", FALSE ); - flush_events(); - flush_sequence(); - SetWindowPos( hwnd, 0, 200, 200, 0, 0, SWP_NOSIZE|SWP_NOACTIVATE ); - ok_sequence(WmSWP_MoveSeq, "SetWindowPos:Move", FALSE ); - flush_events(); - flush_sequence(); - SetWindowPos( hwnd, 0, 200, 200, 250, 250, SWP_NOZORDER ); - ok_sequence(WmSWP_ResizeNoZOrder, "SetWindowPos:WmSWP_ResizeNoZOrder", FALSE ); - flush_events(); - flush_sequence(); - - /* popups don't get WM_GETMINMAXINFO */ - SetWindowLongW( hwnd, GWL_STYLE, WS_VISIBLE|WS_POPUP ); - SetWindowPos( hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED); - flush_sequence(); - SetWindowPos( hwnd, 0, 0, 0, 200, 200, SWP_NOMOVE|SWP_NOACTIVATE ); - ok_sequence(WmSWP_ResizePopupSeq, "SetWindowPos:ResizePopup", FALSE ); - - DestroyWindow(hwnd); - ok_sequence(WmDestroyOverlappedSeq, "DestroyWindow:overlapped", FALSE); - - hparent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hparent != 0, "Failed to create parent window\n"); - flush_sequence(); - - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD | WS_MAXIMIZE, - 0, 0, 10, 10, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create child window\n"); - ok_sequence(WmCreateMaximizedChildSeq, "CreateWindow:maximized child", FALSE); - DestroyWindow(hchild); - flush_sequence(); - - /* visible child window with a caption */ - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", - WS_CHILD | WS_VISIBLE | WS_CAPTION, - 0, 0, 10, 10, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create child window\n"); - ok_sequence(WmCreateVisibleChildSeq, "CreateWindow:visible child", FALSE); - - trace("testing scroll APIs on a visible child window %p\n", hchild); - test_scroll_messages(hchild); - - SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE); - ok_sequence(WmShowChildSeq_4, "SetWindowPos(SWP_SHOWWINDOW):child with a caption", FALSE); - - DestroyWindow(hchild); - flush_sequence(); - - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create child window\n"); - ok_sequence(WmCreateChildSeq, "CreateWindow:child", FALSE); - - hchild2 = CreateWindowExA(0, "SimpleWindowClass", "Test child2", WS_CHILD, - 100, 100, 50, 50, hparent, 0, 0, NULL); - ok (hchild2 != 0, "Failed to create child2 window\n"); - flush_sequence(); - - hbutton = CreateWindowExA(0, "TestWindowClass", "Test button", WS_CHILD, - 0, 100, 50, 50, hchild, 0, 0, NULL); - ok (hbutton != 0, "Failed to create button window\n"); - - /* test WM_SETREDRAW on a not visible child window */ - test_WM_SETREDRAW(hchild); - - ShowWindow(hchild, SW_SHOW); - ok_sequence(WmShowChildSeq, "ShowWindow(SW_SHOW):child", FALSE); - - /* check parent messages too */ - log_all_parent_messages++; - ShowWindow(hchild, SW_HIDE); - ok_sequence(WmHideChildSeq2, "ShowWindow(SW_HIDE):child", FALSE); - log_all_parent_messages--; - - ShowWindow(hchild, SW_SHOW); - ok_sequence(WmShowChildSeq, "ShowWindow(SW_SHOW):child", FALSE); - - ShowWindow(hchild, SW_HIDE); - ok_sequence(WmHideChildSeq, "ShowWindow(SW_HIDE):child", FALSE); - - ShowWindow(hchild, SW_SHOW); - ok_sequence(WmShowChildSeq, "ShowWindow(SW_SHOW):child", FALSE); - - /* test WM_SETREDRAW on a visible child window */ - test_WM_SETREDRAW(hchild); - - log_all_parent_messages++; - MoveWindow(hchild, 10, 10, 20, 20, TRUE); - ok_sequence(WmResizingChildWithMoveWindowSeq, "MoveWindow:child", FALSE); - log_all_parent_messages--; - - ShowWindow(hchild, SW_HIDE); - flush_sequence(); - SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE); - ok_sequence(WmShowChildSeq_2, "SetWindowPos:show_child_2", FALSE); - - ShowWindow(hchild, SW_HIDE); - flush_sequence(); - SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE); - ok_sequence(WmShowChildSeq_3, "SetWindowPos:show_child_3", FALSE); - - /* DestroyWindow sequence below expects that a child has focus */ - SetFocus(hchild); - flush_sequence(); - - DestroyWindow(hchild); - ok_sequence(WmDestroyChildSeq, "DestroyWindow:child", FALSE); - DestroyWindow(hchild2); - DestroyWindow(hbutton); - - flush_sequence(); - hchild = CreateWindowExA(0, "TestWindowClass", "Test Child Popup", WS_CHILD | WS_POPUP, - 0, 0, 100, 100, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create child popup window\n"); - ok_sequence(WmCreateChildPopupSeq, "CreateWindow:child_popup", FALSE); - DestroyWindow(hchild); - - /* test what happens to a window which sets WS_VISIBLE in WM_CREATE */ - flush_sequence(); - hchild = CreateWindowExA(0, "TestPopupClass", "Test Popup", WS_POPUP, - 0, 0, 100, 100, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create popup window\n"); - ok_sequence(WmCreateInvisiblePopupSeq, "CreateWindow:invisible_popup", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(IsWindowVisible(hchild), "IsWindowVisible() should return TRUE\n"); - flush_sequence(); - ShowWindow(hchild, SW_SHOW); - ok_sequence(WmEmptySeq, "ShowWindow:show_visible_popup", FALSE); - flush_sequence(); - SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER); - ok_sequence(WmShowVisiblePopupSeq_2, "SetWindowPos:show_visible_popup_2", FALSE); - flush_sequence(); - SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE); - ok_sequence(WmShowVisiblePopupSeq_3, "SetWindowPos:show_visible_popup_3", TRUE); - DestroyWindow(hchild); - - /* this time add WS_VISIBLE for CreateWindowEx, but this fact actually - * changes nothing in message sequences. - */ - flush_sequence(); - hchild = CreateWindowExA(0, "TestPopupClass", "Test Popup", WS_POPUP | WS_VISIBLE, - 0, 0, 100, 100, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create popup window\n"); - ok_sequence(WmCreateInvisiblePopupSeq, "CreateWindow:invisible_popup", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(IsWindowVisible(hchild), "IsWindowVisible() should return TRUE\n"); - flush_sequence(); - ShowWindow(hchild, SW_SHOW); - ok_sequence(WmEmptySeq, "ShowWindow:show_visible_popup", FALSE); - flush_sequence(); - SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER); - ok_sequence(WmShowVisiblePopupSeq_2, "SetWindowPos:show_visible_popup_2", FALSE); - DestroyWindow(hchild); - - flush_sequence(); - hwnd = CreateWindowExA(WS_EX_DLGMODALFRAME, "TestDialogClass", NULL, WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_DLGFRAME, - 0, 0, 100, 100, hparent, 0, 0, NULL); - ok(hwnd != 0, "Failed to create custom dialog window\n"); - ok_sequence(WmCreateCustomDialogSeq, "CreateCustomDialog", TRUE); - - /* - trace("testing scroll APIs on a visible dialog %p\n", hwnd); - test_scroll_messages(hwnd); - */ - - flush_sequence(); - - test_def_id = 1; - SendMessage(hwnd, WM_NULL, 0, 0); - - flush_sequence(); - after_end_dialog = 1; - EndDialog( hwnd, 0 ); - ok_sequence(WmEndCustomDialogSeq, "EndCustomDialog", FALSE); - - DestroyWindow(hwnd); - after_end_dialog = 0; - test_def_id = 0; - - hwnd = CreateWindowExA(0, "TestDialogClass", NULL, WS_POPUP, - 0, 0, 100, 100, 0, 0, GetModuleHandleA(0), NULL); - ok(hwnd != 0, "Failed to create custom dialog window\n"); - flush_sequence(); - trace("call ShowWindow(%p, SW_SHOW)\n", hwnd); - ShowWindow(hwnd, SW_SHOW); - ok_sequence(WmShowCustomDialogSeq, "ShowCustomDialog", TRUE); - DestroyWindow(hwnd); - - flush_sequence(); - DialogBoxA( 0, "TEST_DIALOG", hparent, TestModalDlgProcA ); - ok_sequence(WmModalDialogSeq, "ModalDialog", TRUE); - - DestroyWindow(hparent); - flush_sequence(); - - /* Message sequence for SetMenu */ - ok(!DrawMenuBar(hwnd), "DrawMenuBar should return FALSE for a window without a menu\n"); - ok_sequence(WmEmptySeq, "DrawMenuBar for a window without a menu", FALSE); - - hmenu = CreateMenu(); - ok (hmenu != 0, "Failed to create menu\n"); - ok (InsertMenuA(hmenu, -1, MF_BYPOSITION, 0x1000, "foo"), "InsertMenu failed\n"); - hwnd = CreateWindowExA(0, "TestWindowClass", "Test overlapped", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, hmenu, 0, NULL); - ok_sequence(WmCreateOverlappedSeq, "CreateWindow:overlapped", FALSE); - ok (SetMenu(hwnd, 0), "SetMenu\n"); - ok_sequence(WmSetMenuNonVisibleSizeChangeSeq, "SetMenu:NonVisibleSizeChange", FALSE); - ok (SetMenu(hwnd, 0), "SetMenu\n"); - ok_sequence(WmSetMenuNonVisibleNoSizeChangeSeq, "SetMenu:NonVisibleNoSizeChange", FALSE); - ShowWindow(hwnd, SW_SHOW); - UpdateWindow( hwnd ); - flush_events(); - flush_sequence(); - ok (SetMenu(hwnd, 0), "SetMenu\n"); - ok_sequence(WmSetMenuVisibleNoSizeChangeSeq, "SetMenu:VisibleNoSizeChange", FALSE); - ok (SetMenu(hwnd, hmenu), "SetMenu\n"); - ok_sequence(WmSetMenuVisibleSizeChangeSeq, "SetMenu:VisibleSizeChange", FALSE); - - UpdateWindow( hwnd ); - flush_events(); - flush_sequence(); - ok(DrawMenuBar(hwnd), "DrawMenuBar\n"); - flush_events(); - ok_sequence(WmDrawMenuBarSeq, "DrawMenuBar", FALSE); - - DestroyWindow(hwnd); - flush_sequence(); - - /* Message sequence for EnableWindow */ - hparent = CreateWindowExA(0, "TestWindowClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hparent != 0, "Failed to create parent window\n"); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD | WS_VISIBLE, - 0, 0, 10, 10, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create child window\n"); - - SetFocus(hchild); - flush_events(); - flush_sequence(); - - EnableWindow(hparent, FALSE); - ok_sequence(WmEnableWindowSeq_1, "EnableWindow(FALSE)", FALSE); - - EnableWindow(hparent, TRUE); - ok_sequence(WmEnableWindowSeq_2, "EnableWindow(TRUE)", FALSE); - - flush_events(); - flush_sequence(); - - test_MsgWaitForMultipleObjects(hparent); - - /* the following test causes an exception in user.exe under win9x */ - if (!PostMessageW( hparent, WM_USER, 0, 0 )) - { - DestroyWindow(hparent); - flush_sequence(); - return; - } - PostMessageW( hparent, WM_USER+1, 0, 0 ); - /* PeekMessage(NULL) fails, but still removes the message */ - SetLastError(0xdeadbeef); - ok( !PeekMessageW( NULL, 0, 0, 0, PM_REMOVE ), "PeekMessage(NULL) should fail\n" ); - ok( GetLastError() == ERROR_NOACCESS || /* Win2k */ - GetLastError() == 0xdeadbeef, /* NT4 */ - "last error is %d\n", GetLastError() ); - ok( PeekMessageW( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n" ); - ok( msg.message == WM_USER+1, "got %x instead of WM_USER+1\n", msg.message ); - - DestroyWindow(hchild); - DestroyWindow(hparent); - flush_sequence(); - - /* Message sequences for WM_SETICON */ - trace("testing WM_SETICON\n"); - hwnd = CreateWindowExA(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0, - NULL, NULL, 0); - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - flush_events(); - flush_sequence(); - SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(0, IDI_APPLICATION)); - ok_sequence(WmSetIcon_1, "WM_SETICON for shown window with caption", FALSE); - - ShowWindow(hwnd, SW_HIDE); - flush_events(); - flush_sequence(); - SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(0, IDI_APPLICATION)); - ok_sequence(WmSetIcon_2, "WM_SETICON for hidden window with caption", FALSE); - DestroyWindow(hwnd); - flush_sequence(); - - hwnd = CreateWindowExA(0, "TestPopupClass", NULL, WS_POPUP, - CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0, - NULL, NULL, 0); - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - flush_events(); - flush_sequence(); - SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(0, IDI_APPLICATION)); - ok_sequence(WmSetIcon_2, "WM_SETICON for shown window without caption", FALSE); - - ShowWindow(hwnd, SW_HIDE); - flush_events(); - flush_sequence(); - SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(0, IDI_APPLICATION)); - ok_sequence(WmSetIcon_2, "WM_SETICON for hidden window without caption", FALSE); - - flush_sequence(); - res = SendMessage(hwnd, 0x3B, 0x8000000b, 0); - ok_sequence(WmInitEndSession, "Handling of undocumented 0x3B message by DefWindowProc wparam=0x8000000b", TRUE); - todo_wine - ok(res == 1, "SendMessage(hwnd, 0x3B, 0x8000000b, 0) should have returned 1 instead of %ld\n", res); - res = SendMessage(hwnd, 0x3B, 0x0000000b, 0); - ok_sequence(WmInitEndSession_2, "Handling of undocumented 0x3B message by DefWindowProc wparam=0x0000000b", TRUE); - todo_wine - ok(res == 1, "SendMessage(hwnd, 0x3B, 0x0000000b, 0) should have returned 1 instead of %ld\n", res); - res = SendMessage(hwnd, 0x3B, 0x0000000f, 0); - ok_sequence(WmInitEndSession_2, "Handling of undocumented 0x3B message by DefWindowProc wparam=0x0000000f", TRUE); - todo_wine - ok(res == 1, "SendMessage(hwnd, 0x3B, 0x0000000f, 0) should have returned 1 instead of %ld\n", res); - - flush_sequence(); - res = SendMessage(hwnd, 0x3B, 0x80000008, 0); - ok_sequence(WmInitEndSession_3, "Handling of undocumented 0x3B message by DefWindowProc wparam=0x80000008", TRUE); - todo_wine - ok(res == 2, "SendMessage(hwnd, 0x3B, 0x80000008, 0) should have returned 2 instead of %ld\n", res); - res = SendMessage(hwnd, 0x3B, 0x00000008, 0); - ok_sequence(WmInitEndSession_4, "Handling of undocumented 0x3B message by DefWindowProc wparam=0x00000008", TRUE); - todo_wine - ok(res == 2, "SendMessage(hwnd, 0x3B, 0x00000008, 0) should have returned 2 instead of %ld\n", res); - - res = SendMessage(hwnd, 0x3B, 0x80000004, 0); - ok_sequence(WmInitEndSession_3, "Handling of undocumented 0x3B message by DefWindowProc wparam=0x80000004", TRUE); - todo_wine - ok(res == 2, "SendMessage(hwnd, 0x3B, 0x80000004, 0) should have returned 2 instead of %ld\n", res); - - res = SendMessage(hwnd, 0x3B, 0x80000001, 0); - ok_sequence(WmInitEndSession_5, "Handling of undocumented 0x3B message by DefWindowProc wparam=0x80000001", TRUE); - todo_wine - ok(res == 2, "SendMessage(hwnd, 0x3B, 0x80000001, 0) should have returned 2 instead of %ld\n", res); - - DestroyWindow(hwnd); - flush_sequence(); -} - -static void invisible_parent_tests(void) -{ - HWND hparent, hchild; - - hparent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hparent != 0, "Failed to create parent window\n"); - flush_sequence(); - - /* test showing child with hidden parent */ - - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create child window\n"); - ok_sequence(WmCreateChildSeq, "CreateWindow:child", FALSE); - - ShowWindow( hchild, SW_MINIMIZE ); - ok_sequence(WmShowChildInvisibleParentSeq_1, "ShowWindow(SW_MINIMIZE) child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - /* repeat */ - flush_events(); - flush_sequence(); - ShowWindow( hchild, SW_MINIMIZE ); - ok_sequence(WmShowChildInvisibleParentSeq_1r, "ShowWindow(SW_MINIMIZE) child with invisible parent", FALSE); - - DestroyWindow(hchild); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - flush_sequence(); - - ShowWindow( hchild, SW_MAXIMIZE ); - ok_sequence(WmShowChildInvisibleParentSeq_2, "ShowWindow(SW_MAXIMIZE) child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - /* repeat */ - flush_events(); - flush_sequence(); - ShowWindow( hchild, SW_MAXIMIZE ); - ok_sequence(WmShowChildInvisibleParentSeq_2r, "ShowWindow(SW_MAXIMIZE) child with invisible parent", FALSE); - - DestroyWindow(hchild); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - flush_sequence(); - - ShowWindow( hchild, SW_RESTORE ); - ok_sequence(WmShowChildInvisibleParentSeq_5, "ShowWindow(SW_RESTORE) child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - DestroyWindow(hchild); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - flush_sequence(); - - ShowWindow( hchild, SW_SHOWMINIMIZED ); - ok_sequence(WmShowChildInvisibleParentSeq_3, "ShowWindow(SW_SHOWMINIMIZED) child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - /* repeat */ - flush_events(); - flush_sequence(); - ShowWindow( hchild, SW_SHOWMINIMIZED ); - ok_sequence(WmShowChildInvisibleParentSeq_3r, "ShowWindow(SW_SHOWMINIMIZED) child with invisible parent", FALSE); - - DestroyWindow(hchild); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - flush_sequence(); - - /* same as ShowWindow( hchild, SW_MAXIMIZE ); */ - ShowWindow( hchild, SW_SHOWMAXIMIZED ); - ok_sequence(WmShowChildInvisibleParentSeq_2, "ShowWindow(SW_SHOWMAXIMIZED) child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - DestroyWindow(hchild); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - flush_sequence(); - - ShowWindow( hchild, SW_SHOWMINNOACTIVE ); - ok_sequence(WmShowChildInvisibleParentSeq_4, "ShowWindow(SW_SHOWMINNOACTIVE) child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - /* repeat */ - flush_events(); - flush_sequence(); - ShowWindow( hchild, SW_SHOWMINNOACTIVE ); - ok_sequence(WmShowChildInvisibleParentSeq_4r, "ShowWindow(SW_SHOWMINNOACTIVE) child with invisible parent", FALSE); - - DestroyWindow(hchild); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - flush_sequence(); - - /* FIXME: looks like XP SP2 doesn't know about SW_FORCEMINIMIZE at all */ - ShowWindow( hchild, SW_FORCEMINIMIZE ); - ok_sequence(WmEmptySeq, "ShowWindow(SW_FORCEMINIMIZE) child with invisible parent", TRUE); -todo_wine { - ok(!(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should be not set\n"); -} - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - DestroyWindow(hchild); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - flush_sequence(); - - ShowWindow( hchild, SW_SHOWNA ); - ok_sequence(WmShowChildInvisibleParentSeq_5, "ShowWindow(SW_SHOWNA) child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - /* repeat */ - flush_events(); - flush_sequence(); - ShowWindow( hchild, SW_SHOWNA ); - ok_sequence(WmShowChildInvisibleParentSeq_5, "ShowWindow(SW_SHOWNA) child with invisible parent", FALSE); - - DestroyWindow(hchild); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD, - 0, 0, 10, 10, hparent, 0, 0, NULL); - flush_sequence(); - - ShowWindow( hchild, SW_SHOW ); - ok_sequence(WmShowChildInvisibleParentSeq_5, "ShowWindow(SW_SHOW) child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - /* repeat */ - flush_events(); - flush_sequence(); - ShowWindow( hchild, SW_SHOW ); - ok_sequence(WmEmptySeq, "ShowWindow(SW_SHOW) child with invisible parent", FALSE); - - ShowWindow( hchild, SW_HIDE ); - ok_sequence(WmHideChildInvisibleParentSeq, "ShowWindow:hide child with invisible parent", FALSE); - ok(!(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should be not set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER); - ok_sequence(WmShowChildInvisibleParentSeq_6, "SetWindowPos:show child with invisible parent", FALSE); - ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - SetWindowPos(hchild, 0,0,0,0,0, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER); - ok_sequence(WmHideChildInvisibleParentSeq_2, "SetWindowPos:hide child with invisible parent", FALSE); - ok(!(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should not be set\n"); - ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n"); - - SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER); - flush_sequence(); - DestroyWindow(hchild); - ok_sequence(WmDestroyInvisibleChildSeq, "DestroyInvisibleChildSeq", FALSE); - - DestroyWindow(hparent); - flush_sequence(); -} - -/****************** button message test *************************/ -static const struct message WmSetFocusButtonSeq[] = -{ - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam, 0 }, - { WM_CTLCOLORBTN, sent|defwinproc }, - { 0 } -}; -static const struct message WmKillFocusButtonSeq[] = -{ - { HCBT_SETFOCUS, hook }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_KILLFOCUS, sent|wparam, 0 }, - { WM_CTLCOLORBTN, sent|defwinproc }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 1 }, - { 0 } -}; -static const struct message WmSetFocusStaticSeq[] = -{ - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam, 0 }, - { WM_CTLCOLORSTATIC, sent|defwinproc }, - { 0 } -}; -static const struct message WmKillFocusStaticSeq[] = -{ - { HCBT_SETFOCUS, hook }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_KILLFOCUS, sent|wparam, 0 }, - { WM_CTLCOLORSTATIC, sent|defwinproc }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 1 }, - { 0 } -}; -static const struct message WmLButtonDownSeq[] = -{ - { WM_LBUTTONDOWN, sent|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_CTLCOLORBTN, sent|defwinproc }, - { BM_SETSTATE, sent|wparam|defwinproc, TRUE }, - { WM_CTLCOLORBTN, sent|defwinproc }, - { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { 0 } -}; -static const struct message WmLButtonUpSeq[] = -{ - { WM_LBUTTONUP, sent|wparam|lparam, 0, 0 }, - { BM_SETSTATE, sent|wparam|defwinproc, FALSE }, - { WM_CTLCOLORBTN, sent|defwinproc }, - { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { EVENT_SYSTEM_CAPTUREEND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CAPTURECHANGED, sent|wparam|defwinproc, 0 }, - { 0 } -}; -static const struct message WmSetFontButtonSeq[] = -{ - { WM_SETFONT, sent }, - { WM_PAINT, sent }, - { WM_ERASEBKGND, sent|defwinproc|optional }, - { WM_CTLCOLORBTN, sent|defwinproc }, - { 0 } -}; - -static WNDPROC old_button_proc; - -static LRESULT CALLBACK button_hook_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("button: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - /* explicitly ignore WM_GETICON message */ - if (message == WM_GETICON) return 0; - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - if (message == BM_SETSTATE) - ok(GetCapture() == hwnd, "GetCapture() = %p\n", GetCapture()); - - defwndproc_counter++; - ret = CallWindowProcA(old_button_proc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static void subclass_button(void) -{ - WNDCLASSA cls; - - if (!GetClassInfoA(0, "button", &cls)) assert(0); - - old_button_proc = cls.lpfnWndProc; - - cls.hInstance = GetModuleHandle(0); - cls.lpfnWndProc = button_hook_proc; - cls.lpszClassName = "my_button_class"; - UnregisterClass(cls.lpszClassName, cls.hInstance); - if (!RegisterClassA(&cls)) assert(0); -} - -static void test_button_messages(void) -{ - static const struct - { - DWORD style; - DWORD dlg_code; - const struct message *setfocus; - const struct message *killfocus; - } button[] = { - { BS_PUSHBUTTON, DLGC_BUTTON | DLGC_UNDEFPUSHBUTTON, - WmSetFocusButtonSeq, WmKillFocusButtonSeq }, - { BS_DEFPUSHBUTTON, DLGC_BUTTON | DLGC_DEFPUSHBUTTON, - WmSetFocusButtonSeq, WmKillFocusButtonSeq }, - { BS_CHECKBOX, DLGC_BUTTON, - WmSetFocusStaticSeq, WmKillFocusStaticSeq }, - { BS_AUTOCHECKBOX, DLGC_BUTTON, - WmSetFocusStaticSeq, WmKillFocusStaticSeq }, - { BS_RADIOBUTTON, DLGC_BUTTON | DLGC_RADIOBUTTON, - WmSetFocusStaticSeq, WmKillFocusStaticSeq }, - { BS_3STATE, DLGC_BUTTON, - WmSetFocusStaticSeq, WmKillFocusStaticSeq }, - { BS_AUTO3STATE, DLGC_BUTTON, - WmSetFocusStaticSeq, WmKillFocusStaticSeq }, - { BS_GROUPBOX, DLGC_STATIC, - WmSetFocusStaticSeq, WmKillFocusStaticSeq }, - { BS_USERBUTTON, DLGC_BUTTON | DLGC_UNDEFPUSHBUTTON, - WmSetFocusButtonSeq, WmKillFocusButtonSeq }, - { BS_AUTORADIOBUTTON, DLGC_BUTTON | DLGC_RADIOBUTTON, - WmSetFocusStaticSeq, WmKillFocusStaticSeq }, - { BS_OWNERDRAW, DLGC_BUTTON, - WmSetFocusButtonSeq, WmKillFocusButtonSeq } - }; - unsigned int i; - HWND hwnd; - DWORD dlg_code; - HFONT zfont; - - subclass_button(); - - for (i = 0; i < sizeof(button)/sizeof(button[0]); i++) - { - hwnd = CreateWindowExA(0, "my_button_class", "test", button[i].style | WS_POPUP, - 0, 0, 50, 14, 0, 0, 0, NULL); - ok(hwnd != 0, "Failed to create button window\n"); - - dlg_code = SendMessageA(hwnd, WM_GETDLGCODE, 0, 0); - ok(dlg_code == button[i].dlg_code, "%u: wrong dlg_code %08x\n", i, dlg_code); - - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - SetFocus(0); - flush_sequence(); - - trace("button style %08x\n", button[i].style); - SetFocus(hwnd); - ok_sequence(button[i].setfocus, "SetFocus(hwnd) on a button", FALSE); - - SetFocus(0); - ok_sequence(button[i].killfocus, "SetFocus(0) on a button", FALSE); - - DestroyWindow(hwnd); - } - - hwnd = CreateWindowExA(0, "my_button_class", "test", BS_PUSHBUTTON | WS_POPUP | WS_VISIBLE, - 0, 0, 50, 14, 0, 0, 0, NULL); - ok(hwnd != 0, "Failed to create button window\n"); - - SetFocus(0); - flush_events(); - flush_sequence(); - - SendMessageA(hwnd, WM_LBUTTONDOWN, 0, 0); - ok_sequence(WmLButtonDownSeq, "WM_LBUTTONDOWN on a button", FALSE); - - SendMessageA(hwnd, WM_LBUTTONUP, 0, 0); - ok_sequence(WmLButtonUpSeq, "WM_LBUTTONUP on a button", FALSE); - - flush_sequence(); - zfont = (HFONT)GetStockObject(SYSTEM_FONT); - SendMessageA(hwnd, WM_SETFONT, (WPARAM)zfont, TRUE); - UpdateWindow(hwnd); - ok_sequence(WmSetFontButtonSeq, "WM_SETFONT on a button", FALSE); - - DestroyWindow(hwnd); -} - -/****************** static message test *************************/ -static const struct message WmSetFontStaticSeq[] = -{ - { WM_SETFONT, sent }, - { WM_PAINT, sent|defwinproc }, - { WM_ERASEBKGND, sent|defwinproc|optional }, - { WM_CTLCOLORSTATIC, sent|defwinproc }, - { 0 } -}; - -static WNDPROC old_static_proc; - -static LRESULT CALLBACK static_hook_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("static: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - /* explicitly ignore WM_GETICON message */ - if (message == WM_GETICON) return 0; - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - defwndproc_counter++; - ret = CallWindowProcA(old_static_proc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static void subclass_static(void) -{ - WNDCLASSA cls; - - if (!GetClassInfoA(0, "static", &cls)) assert(0); - - old_static_proc = cls.lpfnWndProc; - - cls.hInstance = GetModuleHandle(0); - cls.lpfnWndProc = static_hook_proc; - cls.lpszClassName = "my_static_class"; - UnregisterClass(cls.lpszClassName, cls.hInstance); - if (!RegisterClassA(&cls)) assert(0); -} - -static void test_static_messages(void) -{ - /* FIXME: make as comprehensive as the button message test */ - static const struct - { - DWORD style; - DWORD dlg_code; - const struct message *setfont; - } static_ctrl[] = { - { SS_LEFT, DLGC_STATIC, - WmSetFontStaticSeq } - }; - unsigned int i; - HWND hwnd; - DWORD dlg_code; - - subclass_static(); - - for (i = 0; i < sizeof(static_ctrl)/sizeof(static_ctrl[0]); i++) - { - hwnd = CreateWindowExA(0, "my_static_class", "test", static_ctrl[i].style | WS_POPUP, - 0, 0, 50, 14, 0, 0, 0, NULL); - ok(hwnd != 0, "Failed to create static window\n"); - - dlg_code = SendMessageA(hwnd, WM_GETDLGCODE, 0, 0); - ok(dlg_code == static_ctrl[i].dlg_code, "%u: wrong dlg_code %08x\n", i, dlg_code); - - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - SetFocus(0); - flush_sequence(); - - trace("static style %08x\n", static_ctrl[i].style); - SendMessage(hwnd, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE); - ok_sequence(static_ctrl[i].setfont, "WM_SETFONT on a static", FALSE); - - DestroyWindow(hwnd); - } -} - -/****************** ComboBox message test *************************/ -#define ID_COMBOBOX 0x000f - -static const struct message WmKeyDownComboSeq[] = -{ - { WM_KEYDOWN, sent|wparam|lparam, VK_DOWN, 0 }, - { WM_COMMAND, sent|wparam|defwinproc, MAKEWPARAM(1000, LBN_SELCHANGE) }, - { WM_COMMAND, sent|wparam|parent, MAKEWPARAM(ID_COMBOBOX, CBN_SELENDOK) }, - { WM_COMMAND, sent|wparam|parent, MAKEWPARAM(ID_COMBOBOX, CBN_SELCHANGE) }, - { WM_CTLCOLOREDIT, sent|parent }, - { WM_KEYUP, sent|wparam|lparam, VK_DOWN, 0 }, - { 0 } -}; - -static WNDPROC old_combobox_proc; - -static LRESULT CALLBACK combobox_hook_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_NCPAINT && - message != WM_SYNCPAINT && - message != WM_ERASEBKGND && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("combo: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - } - - defwndproc_counter++; - ret = CallWindowProcA(old_combobox_proc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static void subclass_combobox(void) -{ - WNDCLASSA cls; - - if (!GetClassInfoA(0, "ComboBox", &cls)) assert(0); - - old_combobox_proc = cls.lpfnWndProc; - - cls.hInstance = GetModuleHandle(0); - cls.lpfnWndProc = combobox_hook_proc; - cls.lpszClassName = "my_combobox_class"; - UnregisterClass(cls.lpszClassName, cls.hInstance); - if (!RegisterClassA(&cls)) assert(0); -} - -static void test_combobox_messages(void) -{ - HWND parent, combo; - LRESULT ret; - - subclass_combobox(); - - parent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok(parent != 0, "Failed to create parent window\n"); - flush_sequence(); - - combo = CreateWindowEx(0, "my_combobox_class", "test", WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | CBS_HASSTRINGS, - 0, 0, 100, 150, parent, (HMENU)ID_COMBOBOX, 0, NULL); - ok(combo != 0, "Failed to create combobox window\n"); - - UpdateWindow(combo); - - ret = SendMessage(combo, WM_GETDLGCODE, 0, 0); - ok(ret == (DLGC_WANTCHARS | DLGC_WANTARROWS), "wrong dlg_code %08lx\n", ret); - - ret = SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)"item 0"); - ok(ret == 0, "expected 0, got %ld\n", ret); - ret = SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)"item 1"); - ok(ret == 1, "expected 1, got %ld\n", ret); - ret = SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)"item 2"); - ok(ret == 2, "expected 2, got %ld\n", ret); - - SendMessage(combo, CB_SETCURSEL, 0, 0); - SetFocus(combo); - flush_sequence(); - - log_all_parent_messages++; - SendMessage(combo, WM_KEYDOWN, VK_DOWN, 0); - SendMessage(combo, WM_KEYUP, VK_DOWN, 0); - log_all_parent_messages--; - ok_sequence(WmKeyDownComboSeq, "WM_KEYDOWN/VK_DOWN on a ComboBox", FALSE); - - DestroyWindow(combo); - DestroyWindow(parent); -} - -/****************** WM_IME_KEYDOWN message test *******************/ - -static const struct message WmImeKeydownMsgSeq_0[] = -{ - { WM_IME_KEYDOWN, wparam, VK_RETURN }, - { WM_CHAR, wparam, 'A' }, - { 0 } -}; - -static const struct message WmImeKeydownMsgSeq_1[] = -{ - { WM_KEYDOWN, wparam, VK_RETURN }, - { WM_CHAR, wparam, VK_RETURN }, - { 0 } -}; - -static LRESULT WINAPI wmime_keydown_procA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct message msg; - - trace("wmime_keydown_procA: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - msg.message = message; - msg.flags = wparam|lparam; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - return DefWindowProcA(hwnd, message, wParam, lParam); -} - -static void register_wmime_keydown_class(void) -{ - WNDCLASSA cls; - - ZeroMemory(&cls, sizeof(WNDCLASSA)); - cls.lpfnWndProc = wmime_keydown_procA; - cls.hInstance = GetModuleHandleA(0); - cls.lpszClassName = "wmime_keydown_class"; - if (!RegisterClassA(&cls)) assert(0); -} - -void test_wmime_keydown_message(void) -{ - HWND hwnd; - MSG msg; - - trace("Message sequences by WM_IME_KEYDOWN\n"); - - register_wmime_keydown_class(); - hwnd = CreateWindowExA(0, "wmime_keydown_class", NULL, WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0, - NULL, NULL, 0); - flush_events(); - flush_sequence(); - - SendMessage(hwnd, WM_IME_KEYDOWN, VK_RETURN, 0x1c0001); - SendMessage(hwnd, WM_CHAR, 'A', 1); - ok_sequence(WmImeKeydownMsgSeq_0, "WM_IME_KEYDOWN 0", FALSE); - - while ( PeekMessage(&msg, 0, 0, 0, PM_REMOVE) ) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - ok_sequence(WmImeKeydownMsgSeq_1, "WM_IME_KEYDOWN 1", FALSE); - - DestroyWindow(hwnd); -} - -/************* painting message test ********************/ - -void dump_region(HRGN hrgn) -{ - DWORD i, size; - RGNDATA *data = NULL; - RECT *rect; - - if (!hrgn) - { - printf( "null region\n" ); - return; - } - if (!(size = GetRegionData( hrgn, 0, NULL ))) return; - if (!(data = HeapAlloc( GetProcessHeap(), 0, size ))) return; - GetRegionData( hrgn, size, data ); - printf("%d rects:", data->rdh.nCount ); - for (i = 0, rect = (RECT *)data->Buffer; i < data->rdh.nCount; i++, rect++) - printf( " (%d,%d)-(%d,%d)", rect->left, rect->top, rect->right, rect->bottom ); - printf("\n"); - HeapFree( GetProcessHeap(), 0, data ); -} - -static void check_update_rgn( HWND hwnd, HRGN hrgn ) -{ - INT ret; - RECT r1, r2; - HRGN tmp = CreateRectRgn( 0, 0, 0, 0 ); - HRGN update = CreateRectRgn( 0, 0, 0, 0 ); - - ret = GetUpdateRgn( hwnd, update, FALSE ); - ok( ret != ERROR, "GetUpdateRgn failed\n" ); - if (ret == NULLREGION) - { - ok( !hrgn, "Update region shouldn't be empty\n" ); - } - else - { - if (CombineRgn( tmp, hrgn, update, RGN_XOR ) != NULLREGION) - { - ok( 0, "Regions are different\n" ); - if (winetest_debug > 0) - { - printf( "Update region: " ); - dump_region( update ); - printf( "Wanted region: " ); - dump_region( hrgn ); - } - } - } - GetRgnBox( update, &r1 ); - GetUpdateRect( hwnd, &r2, FALSE ); - ok( r1.left == r2.left && r1.top == r2.top && r1.right == r2.right && r1.bottom == r2.bottom, - "Rectangles are different: %d,%d-%d,%d / %d,%d-%d,%d\n", - r1.left, r1.top, r1.right, r1.bottom, r2.left, r2.top, r2.right, r2.bottom ); - - DeleteObject( tmp ); - DeleteObject( update ); -} - -static const struct message WmInvalidateRgn[] = { - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|defwinproc|optional }, - { 0 } -}; - -static const struct message WmGetUpdateRect[] = { - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_PAINT, sent }, - { 0 } -}; - -static const struct message WmInvalidateFull[] = { - { WM_NCPAINT, sent|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { 0 } -}; - -static const struct message WmInvalidateErase[] = { - { WM_NCPAINT, sent|wparam, 1 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent }, - { 0 } -}; - -static const struct message WmInvalidatePaint[] = { - { WM_PAINT, sent }, - { WM_NCPAINT, sent|wparam|beginpaint, 1 }, - { WM_GETTEXT, sent|beginpaint|defwinproc|optional }, - { 0 } -}; - -static const struct message WmInvalidateErasePaint[] = { - { WM_PAINT, sent }, - { WM_NCPAINT, sent|wparam|beginpaint, 1 }, - { WM_GETTEXT, sent|beginpaint|defwinproc|optional }, - { WM_ERASEBKGND, sent|beginpaint }, - { 0 } -}; - -static const struct message WmInvalidateErasePaint2[] = { - { WM_PAINT, sent }, - { WM_NCPAINT, sent|beginpaint }, - { WM_GETTEXT, sent|beginpaint|defwinproc|optional }, - { WM_ERASEBKGND, sent|beginpaint }, - { 0 } -}; - -static const struct message WmErase[] = { - { WM_ERASEBKGND, sent }, - { 0 } -}; - -static const struct message WmPaint[] = { - { WM_PAINT, sent }, - { 0 } -}; - -static const struct message WmParentOnlyPaint[] = { - { WM_PAINT, sent|parent }, - { 0 } -}; - -static const struct message WmInvalidateParent[] = { - { WM_NCPAINT, sent|parent }, - { WM_GETTEXT, sent|defwinproc|parent|optional }, - { WM_ERASEBKGND, sent|parent }, - { 0 } -}; - -static const struct message WmInvalidateParentChild[] = { - { WM_NCPAINT, sent|parent }, - { WM_GETTEXT, sent|defwinproc|parent|optional }, - { WM_ERASEBKGND, sent|parent }, - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent }, - { 0 } -}; - -static const struct message WmInvalidateParentChild2[] = { - { WM_ERASEBKGND, sent|parent }, - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent }, - { 0 } -}; - -static const struct message WmParentPaint[] = { - { WM_PAINT, sent|parent }, - { WM_PAINT, sent }, - { 0 } -}; - -static const struct message WmParentPaintNc[] = { - { WM_PAINT, sent|parent }, - { WM_PAINT, sent }, - { WM_NCPAINT, sent|beginpaint }, - { WM_GETTEXT, sent|beginpaint|defwinproc|optional }, - { WM_ERASEBKGND, sent|beginpaint }, - { 0 } -}; - -static const struct message WmChildPaintNc[] = { - { WM_PAINT, sent }, - { WM_NCPAINT, sent|beginpaint }, - { WM_GETTEXT, sent|beginpaint|defwinproc|optional }, - { WM_ERASEBKGND, sent|beginpaint }, - { 0 } -}; - -static const struct message WmParentErasePaint[] = { - { WM_PAINT, sent|parent }, - { WM_NCPAINT, sent|parent|beginpaint }, - { WM_GETTEXT, sent|parent|beginpaint|defwinproc|optional }, - { WM_ERASEBKGND, sent|parent|beginpaint }, - { WM_PAINT, sent }, - { WM_NCPAINT, sent|beginpaint }, - { WM_GETTEXT, sent|beginpaint|defwinproc|optional }, - { WM_ERASEBKGND, sent|beginpaint }, - { 0 } -}; - -static const struct message WmParentOnlyNcPaint[] = { - { WM_PAINT, sent|parent }, - { WM_NCPAINT, sent|parent|beginpaint }, - { WM_GETTEXT, sent|parent|beginpaint|defwinproc|optional }, - { 0 } -}; - -static const struct message WmSetParentStyle[] = { - { WM_STYLECHANGING, sent|parent }, - { WM_STYLECHANGED, sent|parent }, - { 0 } -}; - -static void test_paint_messages(void) -{ - BOOL ret; - RECT rect; - POINT pt; - MSG msg; - HWND hparent, hchild; - HRGN hrgn = CreateRectRgn( 0, 0, 0, 0 ); - HRGN hrgn2 = CreateRectRgn( 0, 0, 0, 0 ); - HWND hwnd = CreateWindowExA(0, "TestWindowClass", "Test overlapped", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - - ShowWindow( hwnd, SW_SHOW ); - UpdateWindow( hwnd ); - flush_events(); - flush_sequence(); - - check_update_rgn( hwnd, 0 ); - SetRectRgn( hrgn, 10, 10, 20, 20 ); - ret = RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE ); - ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret); - check_update_rgn( hwnd, hrgn ); - SetRectRgn( hrgn2, 20, 20, 30, 30 ); - ret = RedrawWindow( hwnd, NULL, hrgn2, RDW_INVALIDATE ); - ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret); - CombineRgn( hrgn, hrgn, hrgn2, RGN_OR ); - check_update_rgn( hwnd, hrgn ); - /* validate everything */ - ret = RedrawWindow( hwnd, NULL, NULL, RDW_VALIDATE ); - ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret); - check_update_rgn( hwnd, 0 ); - - /* test empty region */ - SetRectRgn( hrgn, 10, 10, 10, 15 ); - ret = RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE ); - ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret); - check_update_rgn( hwnd, 0 ); - /* test empty rect */ - SetRect( &rect, 10, 10, 10, 15 ); - ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE ); - ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret); - check_update_rgn( hwnd, 0 ); - - /* flush pending messages */ - flush_events(); - flush_sequence(); - - GetClientRect( hwnd, &rect ); - SetRectRgn( hrgn, 0, 0, rect.right - rect.left, rect.bottom - rect.top ); - /* MSDN: if hwnd parameter is NULL, InvalidateRect invalidates and redraws - * all windows and sends WM_ERASEBKGND and WM_NCPAINT. - */ - trace("testing InvalidateRect(0, NULL, FALSE)\n"); - SetRectEmpty( &rect ); - ok(InvalidateRect(0, &rect, FALSE), "InvalidateRect(0, &rc, FALSE) should fail\n"); - check_update_rgn( hwnd, hrgn ); - ok_sequence( WmInvalidateErase, "InvalidateErase", FALSE ); - flush_events(); - ok_sequence( WmPaint, "Paint", FALSE ); - RedrawWindow( hwnd, NULL, NULL, RDW_VALIDATE ); - check_update_rgn( hwnd, 0 ); - - /* MSDN: if hwnd parameter is NULL, ValidateRect invalidates and redraws - * all windows and sends WM_ERASEBKGND and WM_NCPAINT. - */ - trace("testing ValidateRect(0, NULL)\n"); - SetRectEmpty( &rect ); - ok(ValidateRect(0, &rect), "ValidateRect(0, &rc) should not fail\n"); - check_update_rgn( hwnd, hrgn ); - ok_sequence( WmInvalidateErase, "InvalidateErase", FALSE ); - flush_events(); - ok_sequence( WmPaint, "Paint", FALSE ); - RedrawWindow( hwnd, NULL, NULL, RDW_VALIDATE ); - check_update_rgn( hwnd, 0 ); - - trace("testing InvalidateRgn(0, NULL, FALSE)\n"); - SetLastError(0xdeadbeef); - ok(!InvalidateRgn(0, NULL, FALSE), "InvalidateRgn(0, NULL, FALSE) should fail\n"); - ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE || GetLastError() == 0xdeadbeef, - "wrong error code %d\n", GetLastError()); - check_update_rgn( hwnd, 0 ); - flush_events(); - ok_sequence( WmEmptySeq, "WmEmptySeq", FALSE ); - - trace("testing ValidateRgn(0, NULL)\n"); - SetLastError(0xdeadbeef); - ok(!ValidateRgn(0, NULL), "ValidateRgn(0, NULL) should fail\n"); - ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "wrong error code %d\n", GetLastError()); - check_update_rgn( hwnd, 0 ); - flush_events(); - ok_sequence( WmEmptySeq, "WmEmptySeq", FALSE ); - - /* now with frame */ - SetRectRgn( hrgn, -5, -5, 20, 20 ); - - /* flush pending messages */ - flush_events(); - flush_sequence(); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_FRAME ); - ok_sequence( WmEmptySeq, "EmptySeq", FALSE ); - - SetRectRgn( hrgn, 0, 0, 20, 20 ); /* GetUpdateRgn clips to client area */ - check_update_rgn( hwnd, hrgn ); - - flush_sequence(); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_FRAME | RDW_ERASENOW ); - ok_sequence( WmInvalidateRgn, "InvalidateRgn", FALSE ); - - flush_sequence(); - RedrawWindow( hwnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASENOW ); - ok_sequence( WmInvalidateFull, "InvalidateFull", FALSE ); - - GetClientRect( hwnd, &rect ); - SetRectRgn( hrgn, rect.left, rect.top, rect.right, rect.bottom ); - check_update_rgn( hwnd, hrgn ); - - flush_sequence(); - RedrawWindow( hwnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE | RDW_ERASENOW ); - ok_sequence( WmInvalidateErase, "InvalidateErase", FALSE ); - - flush_sequence(); - RedrawWindow( hwnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASENOW | RDW_UPDATENOW ); - ok_sequence( WmInvalidatePaint, "InvalidatePaint", FALSE ); - check_update_rgn( hwnd, 0 ); - - flush_sequence(); - RedrawWindow( hwnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE | RDW_UPDATENOW ); - ok_sequence( WmInvalidateErasePaint, "InvalidateErasePaint", FALSE ); - check_update_rgn( hwnd, 0 ); - - flush_sequence(); - SetRectRgn( hrgn, 0, 0, 100, 100 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE ); - SetRectRgn( hrgn, 0, 0, 50, 100 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_VALIDATE ); - SetRectRgn( hrgn, 50, 0, 100, 100 ); - check_update_rgn( hwnd, hrgn ); - RedrawWindow( hwnd, NULL, hrgn, RDW_VALIDATE | RDW_ERASENOW ); - ok_sequence( WmEmptySeq, "EmptySeq", FALSE ); /* must not generate messages, everything is valid */ - check_update_rgn( hwnd, 0 ); - - flush_sequence(); - SetRectRgn( hrgn, 0, 0, 100, 100 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_ERASE ); - SetRectRgn( hrgn, 0, 0, 100, 50 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_VALIDATE | RDW_ERASENOW ); - ok_sequence( WmErase, "Erase", FALSE ); - SetRectRgn( hrgn, 0, 50, 100, 100 ); - check_update_rgn( hwnd, hrgn ); - - flush_sequence(); - SetRectRgn( hrgn, 0, 0, 100, 100 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_ERASE ); - SetRectRgn( hrgn, 0, 0, 50, 50 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_VALIDATE | RDW_NOERASE | RDW_UPDATENOW ); - ok_sequence( WmPaint, "Paint", FALSE ); - - flush_sequence(); - SetRectRgn( hrgn, -4, -4, -2, -2 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_FRAME ); - SetRectRgn( hrgn, -200, -200, -198, -198 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_VALIDATE | RDW_NOFRAME | RDW_ERASENOW ); - ok_sequence( WmEmptySeq, "EmptySeq", FALSE ); - - flush_sequence(); - SetRectRgn( hrgn, -4, -4, -2, -2 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_FRAME ); - SetRectRgn( hrgn, -4, -4, -3, -3 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_VALIDATE | RDW_NOFRAME ); - SetRectRgn( hrgn, 0, 0, 1, 1 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_UPDATENOW ); - ok_sequence( WmPaint, "Paint", FALSE ); - - flush_sequence(); - SetRectRgn( hrgn, -4, -4, -1, -1 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_FRAME ); - RedrawWindow( hwnd, NULL, 0, RDW_ERASENOW ); - /* make sure no WM_PAINT was generated */ - flush_events(); - ok_sequence( WmInvalidateRgn, "InvalidateRgn", FALSE ); - - flush_sequence(); - SetRectRgn( hrgn, -4, -4, -1, -1 ); - RedrawWindow( hwnd, NULL, hrgn, RDW_INVALIDATE | RDW_FRAME ); - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) - { - if (msg.hwnd == hwnd && msg.message == WM_PAINT) - { - /* GetUpdateRgn must return empty region since only nonclient area is invalidated */ - INT ret = GetUpdateRgn( hwnd, hrgn, FALSE ); - ok( ret == NULLREGION, "Invalid GetUpdateRgn result %d\n", ret ); - ret = GetUpdateRect( hwnd, &rect, FALSE ); - ok( ret, "Invalid GetUpdateRect result %d\n", ret ); - /* this will send WM_NCPAINT and validate the non client area */ - ret = GetUpdateRect( hwnd, &rect, TRUE ); - ok( !ret, "Invalid GetUpdateRect result %d\n", ret ); - } - DispatchMessage( &msg ); - } - ok_sequence( WmGetUpdateRect, "GetUpdateRect", FALSE ); - - DestroyWindow( hwnd ); - - /* now test with a child window */ - - hparent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hparent != 0, "Failed to create parent window\n"); - - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD | WS_VISIBLE | WS_BORDER, - 10, 10, 100, 100, hparent, 0, 0, NULL); - ok (hchild != 0, "Failed to create child window\n"); - - ShowWindow( hparent, SW_SHOW ); - UpdateWindow( hparent ); - UpdateWindow( hchild ); - flush_events(); - flush_sequence(); - log_all_parent_messages++; - - SetRect( &rect, 0, 0, 50, 50 ); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - RedrawWindow( hparent, NULL, 0, RDW_ERASENOW | RDW_ALLCHILDREN ); - ok_sequence( WmInvalidateParentChild, "InvalidateParentChild", FALSE ); - - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - pt.x = pt.y = 0; - MapWindowPoints( hchild, hparent, &pt, 1 ); - SetRectRgn( hrgn, 0, 0, 50 - pt.x, 50 - pt.y ); - check_update_rgn( hchild, hrgn ); - SetRectRgn( hrgn, 0, 0, 50, 50 ); - check_update_rgn( hparent, hrgn ); - RedrawWindow( hparent, NULL, 0, RDW_ERASENOW ); - ok_sequence( WmInvalidateParent, "InvalidateParent", FALSE ); - RedrawWindow( hchild, NULL, 0, RDW_ERASENOW ); - ok_sequence( WmEmptySeq, "EraseNow child", FALSE ); - - flush_events(); - ok_sequence( WmParentPaintNc, "WmParentPaintNc", FALSE ); - - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); - RedrawWindow( hparent, NULL, 0, RDW_ERASENOW ); - ok_sequence( WmInvalidateParent, "InvalidateParent2", FALSE ); - RedrawWindow( hchild, NULL, 0, RDW_ERASENOW ); - ok_sequence( WmEmptySeq, "EraseNow child", FALSE ); - - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE ); - RedrawWindow( hparent, NULL, 0, RDW_ERASENOW | RDW_ALLCHILDREN ); - ok_sequence( WmInvalidateParentChild2, "InvalidateParentChild2", FALSE ); - - SetWindowLong( hparent, GWL_STYLE, GetWindowLong(hparent,GWL_STYLE) | WS_CLIPCHILDREN ); - flush_sequence(); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); - RedrawWindow( hparent, NULL, 0, RDW_ERASENOW ); - ok_sequence( WmInvalidateParentChild, "InvalidateParentChild3", FALSE ); - - /* flush all paint messages */ - flush_events(); - flush_sequence(); - - /* RDW_UPDATENOW on child with WS_CLIPCHILDREN doesn't change corresponding parent area */ - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); - SetRectRgn( hrgn, 0, 0, 50, 50 ); - check_update_rgn( hparent, hrgn ); - RedrawWindow( hchild, NULL, 0, RDW_UPDATENOW ); - ok_sequence( WmInvalidateErasePaint2, "WmInvalidateErasePaint2", FALSE ); - SetRectRgn( hrgn, 0, 0, 50, 50 ); - check_update_rgn( hparent, hrgn ); - - /* flush all paint messages */ - flush_events(); - SetWindowLong( hparent, GWL_STYLE, GetWindowLong(hparent,GWL_STYLE) & ~WS_CLIPCHILDREN ); - flush_sequence(); - - /* RDW_UPDATENOW on child without WS_CLIPCHILDREN will validate corresponding parent area */ - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - SetRectRgn( hrgn, 0, 0, 50, 50 ); - check_update_rgn( hparent, hrgn ); - RedrawWindow( hchild, NULL, 0, RDW_UPDATENOW ); - ok_sequence( WmInvalidateErasePaint2, "WmInvalidateErasePaint2", FALSE ); - SetRectRgn( hrgn2, 10, 10, 50, 50 ); - CombineRgn( hrgn, hrgn, hrgn2, RGN_DIFF ); - check_update_rgn( hparent, hrgn ); - /* flush all paint messages */ - flush_events(); - flush_sequence(); - - /* same as above but parent gets completely validated */ - SetRect( &rect, 20, 20, 30, 30 ); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - SetRectRgn( hrgn, 20, 20, 30, 30 ); - check_update_rgn( hparent, hrgn ); - RedrawWindow( hchild, NULL, 0, RDW_UPDATENOW ); - ok_sequence( WmInvalidateErasePaint2, "WmInvalidateErasePaint2", FALSE ); - check_update_rgn( hparent, 0 ); /* no update region */ - flush_events(); - ok_sequence( WmEmptySeq, "WmEmpty", FALSE ); /* and no paint messages */ - - /* make sure RDW_VALIDATE on child doesn't have the same effect */ - flush_sequence(); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - SetRectRgn( hrgn, 20, 20, 30, 30 ); - check_update_rgn( hparent, hrgn ); - RedrawWindow( hchild, NULL, 0, RDW_VALIDATE | RDW_NOERASE ); - SetRectRgn( hrgn, 20, 20, 30, 30 ); - check_update_rgn( hparent, hrgn ); - - /* same as above but normal WM_PAINT doesn't validate parent */ - flush_sequence(); - SetRect( &rect, 20, 20, 30, 30 ); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - SetRectRgn( hrgn, 20, 20, 30, 30 ); - check_update_rgn( hparent, hrgn ); - /* no WM_PAINT in child while parent still pending */ - while (PeekMessage( &msg, hchild, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - ok_sequence( WmEmptySeq, "No WM_PAINT", FALSE ); - while (PeekMessage( &msg, hparent, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - ok_sequence( WmParentErasePaint, "WmParentErasePaint", FALSE ); - - flush_sequence(); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - /* no WM_PAINT in child while parent still pending */ - while (PeekMessage( &msg, hchild, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - ok_sequence( WmEmptySeq, "No WM_PAINT", FALSE ); - RedrawWindow( hparent, &rect, 0, RDW_VALIDATE | RDW_NOERASE | RDW_NOCHILDREN ); - /* now that parent is valid child should get WM_PAINT */ - while (PeekMessage( &msg, hchild, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - ok_sequence( WmInvalidateErasePaint2, "WmInvalidateErasePaint2", FALSE ); - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - ok_sequence( WmEmptySeq, "No other message", FALSE ); - - /* same thing with WS_CLIPCHILDREN in parent */ - flush_sequence(); - SetWindowLong( hparent, GWL_STYLE, GetWindowLong(hparent,GWL_STYLE) | WS_CLIPCHILDREN ); - ok_sequence( WmSetParentStyle, "WmSetParentStyle", FALSE ); - /* changing style invalidates non client area, but we need to invalidate something else to see it */ - RedrawWindow( hparent, &rect, 0, RDW_UPDATENOW ); - ok_sequence( WmEmptySeq, "No message", FALSE ); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_UPDATENOW ); - ok_sequence( WmParentOnlyNcPaint, "WmParentOnlyNcPaint", FALSE ); - - flush_sequence(); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN ); - SetRectRgn( hrgn, 20, 20, 30, 30 ); - check_update_rgn( hparent, hrgn ); - /* no WM_PAINT in child while parent still pending */ - while (PeekMessage( &msg, hchild, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - ok_sequence( WmEmptySeq, "No WM_PAINT", FALSE ); - /* WM_PAINT in parent first */ - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - ok_sequence( WmParentPaintNc, "WmParentPaintNc2", FALSE ); - - /* no RDW_ERASE in parent still causes RDW_ERASE and RDW_FRAME in child */ - flush_sequence(); - SetRect( &rect, 0, 0, 30, 30 ); - RedrawWindow( hparent, &rect, 0, RDW_INVALIDATE | RDW_ALLCHILDREN ); - SetRectRgn( hrgn, 0, 0, 30, 30 ); - check_update_rgn( hparent, hrgn ); - flush_events(); - ok_sequence( WmParentPaintNc, "WmParentPaintNc3", FALSE ); - - /* validate doesn't cause RDW_NOERASE or RDW_NOFRAME in child */ - flush_sequence(); - SetRect( &rect, -10, 0, 30, 30 ); - RedrawWindow( hchild, &rect, 0, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE ); - SetRect( &rect, 0, 0, 20, 20 ); - RedrawWindow( hparent, &rect, 0, RDW_VALIDATE | RDW_ALLCHILDREN ); - RedrawWindow( hparent, NULL, 0, RDW_UPDATENOW ); - ok_sequence( WmChildPaintNc, "WmChildPaintNc", FALSE ); - - /* validate doesn't cause RDW_NOERASE or RDW_NOFRAME in child */ - flush_sequence(); - SetRect( &rect, -10, 0, 30, 30 ); - RedrawWindow( hchild, &rect, 0, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE ); - SetRect( &rect, 0, 0, 100, 100 ); - RedrawWindow( hparent, &rect, 0, RDW_VALIDATE | RDW_ALLCHILDREN ); - RedrawWindow( hparent, NULL, 0, RDW_UPDATENOW ); - ok_sequence( WmEmptySeq, "WmChildPaintNc2", FALSE ); - RedrawWindow( hparent, NULL, 0, RDW_ERASENOW ); - ok_sequence( WmEmptySeq, "WmChildPaintNc3", FALSE ); - - /* test RDW_INTERNALPAINT behavior */ - - flush_sequence(); - RedrawWindow( hparent, NULL, 0, RDW_INTERNALPAINT | RDW_NOCHILDREN ); - flush_events(); - ok_sequence( WmParentOnlyPaint, "WmParentOnlyPaint", FALSE ); - - RedrawWindow( hparent, NULL, 0, RDW_INTERNALPAINT | RDW_ALLCHILDREN ); - flush_events(); - ok_sequence( WmParentPaint, "WmParentPaint", FALSE ); - - RedrawWindow( hparent, NULL, 0, RDW_INTERNALPAINT ); - flush_events(); - ok_sequence( WmParentOnlyPaint, "WmParentOnlyPaint", FALSE ); - - assert( GetWindowLong(hparent, GWL_STYLE) & WS_CLIPCHILDREN ); - UpdateWindow( hparent ); - flush_events(); - flush_sequence(); - trace("testing SWP_FRAMECHANGED on parent with WS_CLIPCHILDREN\n"); - RedrawWindow( hchild, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - SetWindowPos( hparent, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | - SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED ); - flush_events(); - ok_sequence(WmSWP_FrameChanged_clip, "SetWindowPos:FrameChanged_clip", FALSE ); - - UpdateWindow( hparent ); - flush_events(); - flush_sequence(); - trace("testing SWP_FRAMECHANGED|SWP_DEFERERASE on parent with WS_CLIPCHILDREN\n"); - RedrawWindow( hchild, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - SetWindowPos( hparent, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_DEFERERASE | - SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED ); - flush_events(); - ok_sequence(WmSWP_FrameChangedDeferErase, "SetWindowPos:FrameChangedDeferErase", FALSE ); - - SetWindowLong( hparent, GWL_STYLE, GetWindowLong(hparent,GWL_STYLE) & ~WS_CLIPCHILDREN ); - ok_sequence( WmSetParentStyle, "WmSetParentStyle", FALSE ); - RedrawWindow( hparent, NULL, 0, RDW_INTERNALPAINT ); - flush_events(); - ok_sequence( WmParentPaint, "WmParentPaint", FALSE ); - - assert( !(GetWindowLong(hparent, GWL_STYLE) & WS_CLIPCHILDREN) ); - UpdateWindow( hparent ); - flush_events(); - flush_sequence(); - trace("testing SWP_FRAMECHANGED on parent without WS_CLIPCHILDREN\n"); - RedrawWindow( hchild, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - SetWindowPos( hparent, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | - SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED ); - flush_events(); - ok_sequence(WmSWP_FrameChanged_noclip, "SetWindowPos:FrameChanged_noclip", FALSE ); - - UpdateWindow( hparent ); - flush_events(); - flush_sequence(); - trace("testing SWP_FRAMECHANGED|SWP_DEFERERASE on parent without WS_CLIPCHILDREN\n"); - RedrawWindow( hchild, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); - SetWindowPos( hparent, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_DEFERERASE | - SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED ); - flush_events(); - ok_sequence(WmSWP_FrameChangedDeferErase, "SetWindowPos:FrameChangedDeferErase", FALSE ); - - log_all_parent_messages--; - DestroyWindow( hparent ); - ok(!IsWindow(hchild), "child must be destroyed with its parent\n"); - - DeleteObject( hrgn ); - DeleteObject( hrgn2 ); -} - -struct wnd_event -{ - HWND hwnd; - HANDLE event; -}; - -static DWORD WINAPI thread_proc(void *param) -{ - MSG msg; - struct wnd_event *wnd_event = (struct wnd_event *)param; - - wnd_event->hwnd = CreateWindowExA(0, "TestWindowClass", "window caption text", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok(wnd_event->hwnd != 0, "Failed to create overlapped window\n"); - - SetEvent(wnd_event->event); - - while (GetMessage(&msg, 0, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - ok(IsWindow(wnd_event->hwnd), "window should still exist\n"); - - return 0; -} - -static void test_interthread_messages(void) -{ - HANDLE hThread; - DWORD tid; - WNDPROC proc; - MSG msg; - char buf[256]; - int len, expected_len; - struct wnd_event wnd_event; - BOOL ret; - - wnd_event.event = CreateEventW(NULL, 0, 0, NULL); - if (!wnd_event.event) - { - trace("skipping interthread message test under win9x\n"); - return; - } - - hThread = CreateThread(NULL, 0, thread_proc, &wnd_event, 0, &tid); - ok(hThread != NULL, "CreateThread failed, error %d\n", GetLastError()); - - ok(WaitForSingleObject(wnd_event.event, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - - CloseHandle(wnd_event.event); - - SetLastError(0xdeadbeef); - ok(!DestroyWindow(wnd_event.hwnd), "DestroyWindow succeded\n"); - ok(GetLastError() == ERROR_ACCESS_DENIED || GetLastError() == 0xdeadbeef, - "wrong error code %d\n", GetLastError()); - - proc = (WNDPROC)GetWindowLongPtrA(wnd_event.hwnd, GWLP_WNDPROC); - ok(proc != NULL, "GetWindowLongPtrA(GWLP_WNDPROC) error %d\n", GetLastError()); - - expected_len = lstrlenA("window caption text"); - memset(buf, 0, sizeof(buf)); - SetLastError(0xdeadbeef); - len = CallWindowProcA(proc, wnd_event.hwnd, WM_GETTEXT, sizeof(buf), (LPARAM)buf); - ok(len == expected_len, "CallWindowProcA(WM_GETTEXT) error %d, len %d, expected len %d\n", GetLastError(), len, expected_len); - ok(!lstrcmpA(buf, "window caption text"), "window text mismatch\n"); - - msg.hwnd = wnd_event.hwnd; - msg.message = WM_GETTEXT; - msg.wParam = sizeof(buf); - msg.lParam = (LPARAM)buf; - memset(buf, 0, sizeof(buf)); - SetLastError(0xdeadbeef); - len = DispatchMessageA(&msg); - ok(!len && GetLastError() == ERROR_MESSAGE_SYNC_ONLY, - "DispatchMessageA(WM_GETTEXT) succeded on another thread window: ret %d, error %d\n", len, GetLastError()); - - /* the following test causes an exception in user.exe under win9x */ - msg.hwnd = wnd_event.hwnd; - msg.message = WM_TIMER; - msg.wParam = 0; - msg.lParam = GetWindowLongPtrA(wnd_event.hwnd, GWLP_WNDPROC); - SetLastError(0xdeadbeef); - len = DispatchMessageA(&msg); - ok(!len && GetLastError() == 0xdeadbeef, - "DispatchMessageA(WM_TIMER) failed on another thread window: ret %d, error %d\n", len, GetLastError()); - - ret = PostMessageA(wnd_event.hwnd, WM_QUIT, 0, 0); - ok( ret, "PostMessageA(WM_QUIT) error %d\n", GetLastError()); - - ok(WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - CloseHandle(hThread); - - ok(!IsWindow(wnd_event.hwnd), "window should be destroyed on thread exit\n"); -} - - -static const struct message WmVkN[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, 'N', 1 }, - { WM_KEYDOWN, sent|wparam|lparam, 'N', 1 }, - { WM_CHAR, wparam|lparam, 'n', 1 }, - { WM_COMMAND, sent|wparam|lparam, MAKEWPARAM(1002,1), 0 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, 'N', 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, 'N', 0xc0000001 }, - { 0 } -}; -static const struct message WmShiftVkN[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_SHIFT, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_SHIFT, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_SHIFT, 1 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, 'N', 1 }, - { WM_KEYDOWN, sent|wparam|lparam, 'N', 1 }, - { WM_CHAR, wparam|lparam, 'N', 1 }, - { WM_COMMAND, sent|wparam|lparam, MAKEWPARAM(1001,1), 0 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, 'N', 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, 'N', 0xc0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_SHIFT, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_SHIFT, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_SHIFT, 0xc0000001 }, - { 0 } -}; -static const struct message WmCtrlVkN[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_CONTROL, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_CONTROL, 1 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, 'N', 1 }, - { WM_KEYDOWN, sent|wparam|lparam, 'N', 1 }, - { WM_CHAR, wparam|lparam, 0x000e, 1 }, - { WM_COMMAND, sent|wparam|lparam, MAKEWPARAM(1000,1), 0 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, 'N', 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, 'N', 0xc0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_CONTROL, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_CONTROL, 0xc0000001 }, - { 0 } -}; -static const struct message WmCtrlVkN_2[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_CONTROL, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_CONTROL, 1 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, 'N', 1 }, - { WM_COMMAND, sent|wparam|lparam, MAKEWPARAM(1000,1), 0 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, 'N', 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, 'N', 0xc0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_CONTROL, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_CONTROL, 0xc0000001 }, - { 0 } -}; -static const struct message WmAltVkN[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0x20000001 }, /* XP */ - { WM_SYSKEYDOWN, wparam|lparam, VK_MENU, 0x20000001 }, - { WM_SYSKEYDOWN, sent|wparam|lparam, VK_MENU, 0x20000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0x20000001 }, /* XP */ - { WM_SYSKEYDOWN, wparam|lparam, 'N', 0x20000001 }, - { WM_SYSKEYDOWN, sent|wparam|lparam, 'N', 0x20000001 }, - { WM_SYSCHAR, wparam|lparam, 'n', 0x20000001 }, - { WM_SYSCHAR, sent|wparam|lparam, 'n', 0x20000001 }, - { WM_SYSCOMMAND, sent|defwinproc|wparam|lparam, SC_KEYMENU, 'n' }, - { HCBT_SYSCOMMAND, hook }, - { WM_ENTERMENULOOP, sent|defwinproc|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, - { 0x00AE, sent|defwinproc|optional }, /* XP */ - { WM_GETTEXT, sent|defwinproc|optional }, /* XP */ - { WM_INITMENU, sent|defwinproc }, - { EVENT_SYSTEM_MENUSTART, winevent_hook|wparam|lparam, OBJID_SYSMENU, 0 }, - { WM_MENUCHAR, sent|defwinproc|wparam, MAKEWPARAM('n',MF_SYSMENU) }, - { EVENT_SYSTEM_CAPTUREEND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CAPTURECHANGED, sent|defwinproc }, - { WM_MENUSELECT, sent|defwinproc|wparam, MAKEWPARAM(0,0xffff) }, - { EVENT_SYSTEM_MENUEND, winevent_hook|wparam|lparam, OBJID_SYSMENU, 0 }, - { WM_EXITMENULOOP, sent|defwinproc }, - { WM_MENUSELECT, sent|defwinproc|wparam|optional, MAKEWPARAM(0,0xffff) }, /* Win95 bug */ - { WM_EXITMENULOOP, sent|defwinproc|optional }, /* Win95 bug */ - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xe0000001 }, /* XP */ - { WM_SYSKEYUP, wparam|lparam, 'N', 0xe0000001 }, - { WM_SYSKEYUP, sent|wparam|lparam, 'N', 0xe0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_MENU, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 }, - { 0 } -}; -static const struct message WmAltVkN_2[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0x20000001 }, /* XP */ - { WM_SYSKEYDOWN, wparam|lparam, VK_MENU, 0x20000001 }, - { WM_SYSKEYDOWN, sent|wparam|lparam, VK_MENU, 0x20000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0x20000001 }, /* XP */ - { WM_SYSKEYDOWN, wparam|lparam, 'N', 0x20000001 }, - { WM_COMMAND, sent|wparam|lparam, MAKEWPARAM(1003,1), 0 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xe0000001 }, /* XP */ - { WM_SYSKEYUP, wparam|lparam, 'N', 0xe0000001 }, - { WM_SYSKEYUP, sent|wparam|lparam, 'N', 0xe0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_MENU, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 }, - { 0 } -}; -static const struct message WmCtrlAltVkN[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_CONTROL, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_CONTROL, 1 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0x20000001 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_MENU, 0x20000001 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_MENU, 0x20000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0x20000001 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, 'N', 0x20000001 }, - { WM_KEYDOWN, sent|wparam|lparam, 'N', 0x20000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xe0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, 'N', 0xe0000001 }, - { WM_KEYUP, sent|wparam|lparam, 'N', 0xe0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_MENU, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_CONTROL, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_CONTROL, 0xc0000001 }, - { 0 } -}; -static const struct message WmCtrlShiftVkN[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_CONTROL, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_CONTROL, 1 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_SHIFT, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_SHIFT, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_SHIFT, 1 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, 'N', 1 }, - { WM_COMMAND, sent|wparam|lparam, MAKEWPARAM(1004,1), 0 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, 'N', 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, 'N', 0xc0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_SHIFT, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_SHIFT, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_SHIFT, 0xc0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_CONTROL, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_CONTROL, 0xc0000001 }, - { 0 } -}; -static const struct message WmCtrlAltShiftVkN[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_CONTROL, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_CONTROL, 1 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0x20000001 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_MENU, 0x20000001 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_MENU, 0x20000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_SHIFT, 0x20000001 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_SHIFT, 0x20000001 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_SHIFT, 0x20000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0x20000001 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, 'N', 0x20000001 }, - { WM_COMMAND, sent|wparam|lparam, MAKEWPARAM(1005,1), 0 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xe0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, 'N', 0xe0000001 }, - { WM_KEYUP, sent|wparam|lparam, 'N', 0xe0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_SHIFT, 0xe0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_SHIFT, 0xe0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_SHIFT, 0xe0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_MENU, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_CONTROL, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_CONTROL, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_CONTROL, 0xc0000001 }, - { 0 } -}; -static const struct message WmAltPressRelease[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0x20000001 }, /* XP */ - { WM_SYSKEYDOWN, wparam|lparam, VK_MENU, 0x20000001 }, - { WM_SYSKEYDOWN, sent|wparam|lparam, VK_MENU, 0x20000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0xc0000001 }, /* XP */ - { WM_SYSKEYUP, wparam|lparam, VK_MENU, 0xc0000001 }, - { WM_SYSKEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 }, - { WM_SYSCOMMAND, sent|defwinproc|wparam|lparam, SC_KEYMENU, 0 }, - { HCBT_SYSCOMMAND, hook }, - { WM_ENTERMENULOOP, sent|defwinproc|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, - { WM_INITMENU, sent|defwinproc }, - { EVENT_SYSTEM_MENUSTART, winevent_hook|wparam|lparam, OBJID_SYSMENU, 0 }, - { WM_MENUSELECT, sent|defwinproc|wparam, MAKEWPARAM(0,MF_SYSMENU|MF_POPUP|MF_HILITE) }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_SYSMENU, 1 }, - - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0x30000001 }, /* XP */ - - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_SYSMENU, 0 }, - { EVENT_SYSTEM_CAPTUREEND, winevent_hook|wparam|lparam, 0, 0, }, - { WM_CAPTURECHANGED, sent|defwinproc }, - { WM_MENUSELECT, sent|defwinproc|wparam|optional, MAKEWPARAM(0,0xffff) }, - { EVENT_SYSTEM_MENUEND, winevent_hook|wparam|lparam, OBJID_SYSMENU, 0 }, - { WM_EXITMENULOOP, sent|defwinproc }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0xc0000001 }, /* XP */ - { WM_SYSKEYUP, wparam|lparam, VK_MENU, 0xc0000001 }, - { WM_SYSKEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 }, - { 0 } -}; -static const struct message WmAltMouseButton[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0x20000001 }, /* XP */ - { WM_SYSKEYDOWN, wparam|lparam, VK_MENU, 0x20000001 }, - { WM_SYSKEYDOWN, sent|wparam|lparam, VK_MENU, 0x20000001 }, - { WM_MOUSEMOVE, wparam|optional, 0, 0 }, - { WM_MOUSEMOVE, sent|wparam|optional, 0, 0 }, - { WM_LBUTTONDOWN, wparam, MK_LBUTTON, 0 }, - { WM_LBUTTONDOWN, sent|wparam, MK_LBUTTON, 0 }, - { WM_LBUTTONUP, wparam, 0, 0 }, - { WM_LBUTTONUP, sent|wparam, 0, 0 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0xc0000001 }, /* XP */ - { WM_SYSKEYUP, wparam|lparam, VK_MENU, 0xc0000001 }, - { WM_SYSKEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 }, - { 0 } -}; -static const struct message WmF1Seq[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_F1, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_F1, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_F1, 0x00000001 }, - { WM_KEYF1, wparam|lparam, 0, 0 }, - { WM_KEYF1, sent|wparam|lparam, 0, 0 }, - { WM_HELP, sent|defwinproc }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_F1, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_F1, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_F1, 0xc0000001 }, - { 0 } -}; -static const struct message WmVkAppsSeq[] = { - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_APPS, 1 }, /* XP */ - { WM_KEYDOWN, wparam|lparam, VK_APPS, 1 }, - { WM_KEYDOWN, sent|wparam|lparam, VK_APPS, 0x00000001 }, - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_APPS, 0xc0000001 }, /* XP */ - { WM_KEYUP, wparam|lparam, VK_APPS, 0xc0000001 }, - { WM_KEYUP, sent|wparam|lparam, VK_APPS, 0xc0000001 }, - { WM_CONTEXTMENU, lparam, /*hwnd*/0, (LPARAM)-1 }, - { WM_CONTEXTMENU, sent|lparam, /*hwnd*/0, (LPARAM)-1 }, - { 0 } -}; - -static void pump_msg_loop(HWND hwnd, HACCEL hAccel) -{ - MSG msg; - - while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) - { - struct message log_msg; - - trace("accel: %p, %04x, %08lx, %08lx\n", msg.hwnd, msg.message, msg.wParam, msg.lParam); - - /* ignore some unwanted messages */ - if (msg.message == WM_MOUSEMOVE || - msg.message == WM_GETICON || - msg.message == WM_DEVICECHANGE) - continue; - - log_msg.message = msg.message; - log_msg.flags = wparam|lparam; - log_msg.wParam = msg.wParam; - log_msg.lParam = msg.lParam; - add_message(&log_msg); - - if (!hAccel || !TranslateAccelerator(hwnd, hAccel, &msg)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } -} - -static void test_accelerators(void) -{ - RECT rc; - SHORT state; - HACCEL hAccel; - HWND hwnd = CreateWindowExA(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - BOOL ret; - - assert(hwnd != 0); - UpdateWindow(hwnd); - flush_events(); - flush_sequence(); - - SetFocus(hwnd); - ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus()); - - state = GetKeyState(VK_SHIFT); - ok(!(state & 0x8000), "wrong Shift state %04x\n", state); - state = GetKeyState(VK_CAPITAL); - ok(state == 0, "wrong CapsLock state %04x\n", state); - - hAccel = LoadAccelerators(GetModuleHandleA(0), MAKEINTRESOURCE(1)); - assert(hAccel != 0); - - pump_msg_loop(hwnd, 0); - flush_sequence(); - - trace("testing VK_N press/release\n"); - flush_sequence(); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmVkN, "VK_N press/release", FALSE); - - trace("testing Shift+VK_N press/release\n"); - flush_sequence(); - keybd_event(VK_SHIFT, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmShiftVkN, "Shift+VK_N press/release", FALSE); - - trace("testing Ctrl+VK_N press/release\n"); - flush_sequence(); - keybd_event(VK_CONTROL, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmCtrlVkN, "Ctrl+VK_N press/release", FALSE); - - trace("testing Alt+VK_N press/release\n"); - flush_sequence(); - keybd_event(VK_MENU, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmAltVkN, "Alt+VK_N press/release", FALSE); - - trace("testing Ctrl+Alt+VK_N press/release 1\n"); - flush_sequence(); - keybd_event(VK_CONTROL, 0, 0, 0); - keybd_event(VK_MENU, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmCtrlAltVkN, "Ctrl+Alt+VK_N press/release 1", FALSE); - - ret = DestroyAcceleratorTable(hAccel); - ok( ret, "DestroyAcceleratorTable error %d\n", GetLastError()); - - hAccel = LoadAccelerators(GetModuleHandleA(0), MAKEINTRESOURCE(2)); - assert(hAccel != 0); - - trace("testing VK_N press/release\n"); - flush_sequence(); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmVkN, "VK_N press/release", FALSE); - - trace("testing Shift+VK_N press/release\n"); - flush_sequence(); - keybd_event(VK_SHIFT, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmShiftVkN, "Shift+VK_N press/release", FALSE); - - trace("testing Ctrl+VK_N press/release 2\n"); - flush_sequence(); - keybd_event(VK_CONTROL, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmCtrlVkN_2, "Ctrl+VK_N press/release 2", FALSE); - - trace("testing Alt+VK_N press/release 2\n"); - flush_sequence(); - keybd_event(VK_MENU, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmAltVkN_2, "Alt+VK_N press/release 2", FALSE); - - trace("testing Ctrl+Alt+VK_N press/release 2\n"); - flush_sequence(); - keybd_event(VK_CONTROL, 0, 0, 0); - keybd_event(VK_MENU, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmCtrlAltVkN, "Ctrl+Alt+VK_N press/release 2", FALSE); - - trace("testing Ctrl+Shift+VK_N press/release\n"); - flush_sequence(); - keybd_event(VK_CONTROL, 0, 0, 0); - keybd_event(VK_SHIFT, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmCtrlShiftVkN, "Ctrl+Shift+VK_N press/release", FALSE); - - trace("testing Ctrl+Alt+Shift+VK_N press/release\n"); - flush_sequence(); - keybd_event(VK_CONTROL, 0, 0, 0); - keybd_event(VK_MENU, 0, 0, 0); - keybd_event(VK_SHIFT, 0, 0, 0); - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, hAccel); - ok_sequence(WmCtrlAltShiftVkN, "Ctrl+Alt+Shift+VK_N press/release", FALSE); - - ret = DestroyAcceleratorTable(hAccel); - ok( ret, "DestroyAcceleratorTable error %d\n", GetLastError()); - - trace("testing Alt press/release\n"); - flush_sequence(); - keybd_event(VK_MENU, 0, 0, 0); - keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); - keybd_event(VK_MENU, 0, 0, 0); - keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, 0); - /* this test doesn't pass in Wine for managed windows */ - ok_sequence(WmAltPressRelease, "Alt press/release", TRUE); - - trace("testing Alt+MouseButton press/release\n"); - /* first, move mouse pointer inside of the window client area */ - GetClientRect(hwnd, &rc); - MapWindowPoints(hwnd, 0, (LPPOINT)&rc, 2); - rc.left += (rc.right - rc.left)/2; - rc.top += (rc.bottom - rc.top)/2; - SetCursorPos(rc.left, rc.top); - - flush_events(); - flush_sequence(); - keybd_event(VK_MENU, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, 0); - ok_sequence(WmAltMouseButton, "Alt+MouseButton press/release", FALSE); - - trace("testing VK_F1 press/release\n"); - keybd_event(VK_F1, 0, 0, 0); - keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, 0); - ok_sequence(WmF1Seq, "F1 press/release", FALSE); - - trace("testing VK_APPS press/release\n"); - keybd_event(VK_APPS, 0, 0, 0); - keybd_event(VK_APPS, 0, KEYEVENTF_KEYUP, 0); - pump_msg_loop(hwnd, 0); - ok_sequence(WmVkAppsSeq, "VK_APPS press/release", FALSE); - - DestroyWindow(hwnd); -} - -/************* window procedures ********************/ - -static LRESULT MsgCheckProc (BOOL unicode, HWND hwnd, UINT message, - WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - static long beginpaint_counter = 0; - LRESULT ret; - struct message msg; - - trace("%p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - /* explicitly ignore WM_GETICON message */ - if (message == WM_GETICON) return 0; - - switch (message) - { - case WM_ENABLE: - { - LONG style = GetWindowLongA(hwnd, GWL_STYLE); - ok((BOOL)wParam == !(style & WS_DISABLED), - "wrong WS_DISABLED state: %ld != %d\n", wParam, !(style & WS_DISABLED)); - break; - } - - case WM_CAPTURECHANGED: - if (test_DestroyWindow_flag) - { - DWORD style = GetWindowLongA(hwnd, GWL_STYLE); - if (style & WS_CHILD) - lParam = GetWindowLongPtrA(hwnd, GWLP_ID); - else if (style & WS_POPUP) - lParam = WND_POPUP_ID; - else - lParam = WND_PARENT_ID; - } - break; - - case WM_NCDESTROY: - { - HWND capture; - - ok(!GetWindow(hwnd, GW_CHILD), "children should be unlinked at this point\n"); - capture = GetCapture(); - if (capture) - { - ok(capture == hwnd, "capture should NOT be released at this point (capture %p)\n", capture); - trace("current capture %p, releasing...\n", capture); - ReleaseCapture(); - } - } - /* fall through */ - case WM_DESTROY: - if (pGetAncestor) - ok(pGetAncestor(hwnd, GA_PARENT) != 0, "parent should NOT be unlinked at this point\n"); - if (test_DestroyWindow_flag) - { - DWORD style = GetWindowLongA(hwnd, GWL_STYLE); - if (style & WS_CHILD) - lParam = GetWindowLongPtrA(hwnd, GWLP_ID); - else if (style & WS_POPUP) - lParam = WND_POPUP_ID; - else - lParam = WND_PARENT_ID; - } - break; - - /* test_accelerators() depends on this */ - case WM_NCHITTEST: - return HTCLIENT; - - /* ignore */ - case WM_MOUSEMOVE: - case WM_SETCURSOR: - case WM_DEVICECHANGE: - return 0; - - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - } - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - if (beginpaint_counter) msg.flags |= beginpaint; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - if (message == WM_GETMINMAXINFO && (GetWindowLongA(hwnd, GWL_STYLE) & WS_CHILD)) - { - HWND parent = GetParent(hwnd); - RECT rc; - MINMAXINFO *minmax = (MINMAXINFO *)lParam; - - GetClientRect(parent, &rc); - trace("parent %p client size = (%d x %d)\n", parent, rc.right, rc.bottom); - - trace("ptReserved = (%d,%d)\n" - "ptMaxSize = (%d,%d)\n" - "ptMaxPosition = (%d,%d)\n" - "ptMinTrackSize = (%d,%d)\n" - "ptMaxTrackSize = (%d,%d)\n", - minmax->ptReserved.x, minmax->ptReserved.y, - minmax->ptMaxSize.x, minmax->ptMaxSize.y, - minmax->ptMaxPosition.x, minmax->ptMaxPosition.y, - minmax->ptMinTrackSize.x, minmax->ptMinTrackSize.y, - minmax->ptMaxTrackSize.x, minmax->ptMaxTrackSize.y); - - ok(minmax->ptMaxSize.x == rc.right, "default width of maximized child %d != %d\n", - minmax->ptMaxSize.x, rc.right); - ok(minmax->ptMaxSize.y == rc.bottom, "default height of maximized child %d != %d\n", - minmax->ptMaxSize.y, rc.bottom); - } - - if (message == WM_PAINT) - { - PAINTSTRUCT ps; - beginpaint_counter++; - BeginPaint( hwnd, &ps ); - beginpaint_counter--; - EndPaint( hwnd, &ps ); - return 0; - } - - defwndproc_counter++; - ret = unicode ? DefWindowProcW(hwnd, message, wParam, lParam) - : DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static LRESULT WINAPI MsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - return MsgCheckProc (FALSE, hwnd, message, wParam, lParam); -} - -static LRESULT WINAPI MsgCheckProcW(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - return MsgCheckProc (TRUE, hwnd, message, wParam, lParam); -} - -static LRESULT WINAPI PopupMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("popup: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - /* explicitly ignore WM_GETICON message */ - if (message == WM_GETICON) return 0; - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - if (message == WM_CREATE) - { - DWORD style = GetWindowLongA(hwnd, GWL_STYLE) | WS_VISIBLE; - SetWindowLongA(hwnd, GWL_STYLE, style); - } - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - static long beginpaint_counter = 0; - LRESULT ret; - struct message msg; - LPARAM logged_lParam; - - trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - /* explicitly ignore WM_GETICON message */ - if (message == WM_GETICON) return 0; - - logged_lParam=lParam; - if (log_all_parent_messages || - message == WM_PARENTNOTIFY || message == WM_CANCELMODE || - message == WM_SETFOCUS || message == WM_KILLFOCUS || - message == WM_ENABLE || message == WM_ENTERIDLE || - message == WM_DRAWITEM || - message == WM_IME_SETCONTEXT) - { - switch (message) - { - /* ignore */ - case WM_NCHITTEST: - return HTCLIENT; - case WM_SETCURSOR: - case WM_MOUSEMOVE: - return 0; - - case WM_ERASEBKGND: - { - RECT rc; - INT ret = GetClipBox((HDC)wParam, &rc); - - trace("WM_ERASEBKGND: GetClipBox()=%d, (%d,%d-%d,%d)\n", - ret, rc.left, rc.top, rc.right, rc.bottom); - break; - } - - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - - case WM_DRAWITEM: - { - /* encode DRAWITEMSTRUCT into an LPARAM */ - DRAW_ITEM_STRUCT di; - DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam; - - trace("WM_DRAWITEM: type %x, ctl_id %x, item_id %x, action %x, state %x\n", - dis->CtlType, dis->CtlID, dis->itemID, dis->itemAction, dis->itemState); - - di.u.item.type = dis->CtlType; - di.u.item.ctl_id = dis->CtlID; - di.u.item.item_id = dis->itemID; - di.u.item.action = dis->itemAction; - di.u.item.state = dis->itemState; - - logged_lParam = di.u.lp; - break; - } - } - - msg.message = message; - msg.flags = sent|parent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - if (beginpaint_counter) msg.flags |= beginpaint; - msg.wParam = wParam; - msg.lParam = logged_lParam; - add_message(&msg); - } - - if (message == WM_PAINT) - { - PAINTSTRUCT ps; - beginpaint_counter++; - BeginPaint( hwnd, &ps ); - beginpaint_counter--; - EndPaint( hwnd, &ps ); - return 0; - } - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static LRESULT WINAPI TestDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("dialog: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - /* explicitly ignore WM_GETICON message */ - if (message == WM_GETICON) return 0; - - if (test_def_id) - { - DefDlgProcA(hwnd, DM_SETDEFID, 1, 0); - ret = DefDlgProcA(hwnd, DM_GETDEFID, 0, 0); - if (after_end_dialog) - ok( ret == 0, "DM_GETDEFID should return 0 after EndDialog, got %lx\n", ret ); - else - ok(HIWORD(ret) == DC_HASDEFID, "DM_GETDEFID should return DC_HASDEFID, got %lx\n", ret); - } - - switch (message) - { - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - } - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - defwndproc_counter++; - ret = DefDlgProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static void dump_winpos_flags(UINT flags) -{ - if (!winetest_debug) return; - - if (flags & SWP_SHOWWINDOW) printf("|SWP_SHOWWINDOW"); - if (flags & SWP_HIDEWINDOW) printf("|SWP_HIDEWINDOW"); - if (flags & SWP_NOACTIVATE) printf("|SWP_NOACTIVATE"); - if (flags & SWP_FRAMECHANGED) printf("|SWP_FRAMECHANGED"); - if (flags & SWP_NOCOPYBITS) printf("|SWP_NOCOPYBITS"); - if (flags & SWP_NOOWNERZORDER) printf("|SWP_NOOWNERZORDER"); - if (flags & SWP_NOSENDCHANGING) printf("|SWP_NOSENDCHANGING"); - if (flags & SWP_DEFERERASE) printf("|SWP_DEFERERASE"); - if (flags & SWP_ASYNCWINDOWPOS) printf("|SWP_ASYNCWINDOWPOS"); - if (flags & SWP_NOZORDER) printf("|SWP_NOZORDER"); - if (flags & SWP_NOREDRAW) printf("|SWP_NOREDRAW"); - if (flags & SWP_NOSIZE) printf("|SWP_NOSIZE"); - if (flags & SWP_NOMOVE) printf("|SWP_NOMOVE"); - if (flags & SWP_NOCLIENTSIZE) printf("|SWP_NOCLIENTSIZE"); - if (flags & SWP_NOCLIENTMOVE) printf("|SWP_NOCLIENTMOVE"); - -#define DUMPED_FLAGS \ - (SWP_NOSIZE | \ - SWP_NOMOVE | \ - SWP_NOZORDER | \ - SWP_NOREDRAW | \ - SWP_NOACTIVATE | \ - SWP_FRAMECHANGED | \ - SWP_SHOWWINDOW | \ - SWP_HIDEWINDOW | \ - SWP_NOCOPYBITS | \ - SWP_NOOWNERZORDER | \ - SWP_NOSENDCHANGING | \ - SWP_DEFERERASE | \ - SWP_ASYNCWINDOWPOS | \ - SWP_NOCLIENTSIZE | \ - SWP_NOCLIENTMOVE) - - if(flags & ~DUMPED_FLAGS) printf("|0x%04x", flags & ~DUMPED_FLAGS); - printf("\n"); -#undef DUMPED_FLAGS -} - -static LRESULT WINAPI ShowWindowProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* log only specific messages we are interested in */ - switch (message) - { -#if 0 /* probably log these as well */ - case WM_ACTIVATE: - case WM_SETFOCUS: - case WM_KILLFOCUS: -#endif - case WM_SHOWWINDOW: - trace("WM_SHOWWINDOW %ld\n", wParam); - break; - case WM_SIZE: - trace("WM_SIZE %ld\n", wParam); - break; - case WM_MOVE: - trace("WM_MOVE\n"); - break; - case WM_GETMINMAXINFO: - trace("WM_GETMINMAXINFO\n"); - break; - - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - trace("flags: "); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - - default: /* ignore */ - /*trace("showwindow: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);*/ - return DefWindowProcA(hwnd, message, wParam, lParam); - } - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - defwndproc_counter++; - ret = DefWindowProcA(hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static BOOL RegisterWindowClasses(void) -{ - WNDCLASSA cls; - WNDCLASSW clsW; - - cls.style = 0; - cls.lpfnWndProc = MsgCheckProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "TestWindowClass"; - if(!RegisterClassA(&cls)) return FALSE; - - cls.lpfnWndProc = ShowWindowProcA; - cls.lpszClassName = "ShowWindowClass"; - if(!RegisterClassA(&cls)) return FALSE; - - cls.lpfnWndProc = PopupMsgCheckProcA; - cls.lpszClassName = "TestPopupClass"; - if(!RegisterClassA(&cls)) return FALSE; - - cls.lpfnWndProc = ParentMsgCheckProcA; - cls.lpszClassName = "TestParentClass"; - if(!RegisterClassA(&cls)) return FALSE; - - cls.lpfnWndProc = DefWindowProcA; - cls.lpszClassName = "SimpleWindowClass"; - if(!RegisterClassA(&cls)) return FALSE; - - cls.style = CS_NOCLOSE; - cls.lpszClassName = "NoCloseWindowClass"; - if(!RegisterClassA(&cls)) return FALSE; - - ok(GetClassInfoA(0, "#32770", &cls), "GetClassInfo failed\n"); - cls.style = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hbrBackground = 0; - cls.lpfnWndProc = TestDlgProcA; - cls.lpszClassName = "TestDialogClass"; - if(!RegisterClassA(&cls)) return FALSE; - - clsW.style = 0; - clsW.lpfnWndProc = MsgCheckProcW; - clsW.cbClsExtra = 0; - clsW.cbWndExtra = 0; - clsW.hInstance = GetModuleHandleW(0); - clsW.hIcon = 0; - clsW.hCursor = LoadCursorW(0, (LPWSTR)IDC_ARROW); - clsW.hbrBackground = GetStockObject(WHITE_BRUSH); - clsW.lpszMenuName = NULL; - clsW.lpszClassName = testWindowClassW; - RegisterClassW(&clsW); /* ignore error, this fails on Win9x */ - - return TRUE; -} - -static HHOOK hCBT_hook; -static DWORD cbt_hook_thread_id; - -static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam) -{ - static const char * const CBT_code_name[10] = { - "HCBT_MOVESIZE", - "HCBT_MINMAX", - "HCBT_QS", - "HCBT_CREATEWND", - "HCBT_DESTROYWND", - "HCBT_ACTIVATE", - "HCBT_CLICKSKIPPED", - "HCBT_KEYSKIPPED", - "HCBT_SYSCOMMAND", - "HCBT_SETFOCUS" }; - const char *code_name = (nCode >= 0 && nCode <= HCBT_SETFOCUS) ? CBT_code_name[nCode] : "Unknown"; - HWND hwnd; - char buf[256]; - - trace("CBT: %d (%s), %08lx, %08lx\n", nCode, code_name, wParam, lParam); - - ok(cbt_hook_thread_id == GetCurrentThreadId(), "we didn't ask for events from other threads\n"); - - if (nCode == HCBT_CLICKSKIPPED) - { - /* ignore this event, XP sends it a lot when switching focus between windows */ - return CallNextHookEx(hCBT_hook, nCode, wParam, lParam); - } - - if (nCode == HCBT_SYSCOMMAND || nCode == HCBT_KEYSKIPPED) - { - struct message msg; - - msg.message = nCode; - msg.flags = hook|wparam|lparam; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - return CallNextHookEx(hCBT_hook, nCode, wParam, lParam); - } - - if (nCode == HCBT_DESTROYWND) - { - if (test_DestroyWindow_flag) - { - DWORD style = GetWindowLongA((HWND)wParam, GWL_STYLE); - if (style & WS_CHILD) - lParam = GetWindowLongPtrA((HWND)wParam, GWLP_ID); - else if (style & WS_POPUP) - lParam = WND_POPUP_ID; - else - lParam = WND_PARENT_ID; - } - } - - /* Log also SetFocus(0) calls */ - hwnd = wParam ? (HWND)wParam : (HWND)lParam; - - if (GetClassNameA(hwnd, buf, sizeof(buf))) - { - if (!lstrcmpiA(buf, "TestWindowClass") || - !lstrcmpiA(buf, "ShowWindowClass") || - !lstrcmpiA(buf, "TestParentClass") || - !lstrcmpiA(buf, "TestPopupClass") || - !lstrcmpiA(buf, "SimpleWindowClass") || - !lstrcmpiA(buf, "TestDialogClass") || - !lstrcmpiA(buf, "MDI_frame_class") || - !lstrcmpiA(buf, "MDI_client_class") || - !lstrcmpiA(buf, "MDI_child_class") || - !lstrcmpiA(buf, "my_button_class") || - !lstrcmpiA(buf, "my_edit_class") || - !lstrcmpiA(buf, "static") || - !lstrcmpiA(buf, "ListBox") || - !lstrcmpiA(buf, "ComboBox") || - !lstrcmpiA(buf, "MyDialogClass") || - !lstrcmpiA(buf, "#32770")) - { - struct message msg; - - msg.message = nCode; - msg.flags = hook|wparam|lparam; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - } - } - return CallNextHookEx(hCBT_hook, nCode, wParam, lParam); -} - -static void CALLBACK win_event_proc(HWINEVENTHOOK hevent, - DWORD event, - HWND hwnd, - LONG object_id, - LONG child_id, - DWORD thread_id, - DWORD event_time) -{ - char buf[256]; - - trace("WEH:%p,event %08x,hwnd %p,obj %08x,id %08x,thread %08x,time %08x\n", - hevent, event, hwnd, object_id, child_id, thread_id, event_time); - - ok(thread_id == GetCurrentThreadId(), "we didn't ask for events from other threads\n"); - - /* ignore mouse cursor events */ - if (object_id == OBJID_CURSOR) return; - - if (!hwnd || GetClassNameA(hwnd, buf, sizeof(buf))) - { - if (!hwnd || - !lstrcmpiA(buf, "TestWindowClass") || - !lstrcmpiA(buf, "TestParentClass") || - !lstrcmpiA(buf, "TestPopupClass") || - !lstrcmpiA(buf, "SimpleWindowClass") || - !lstrcmpiA(buf, "TestDialogClass") || - !lstrcmpiA(buf, "MDI_frame_class") || - !lstrcmpiA(buf, "MDI_client_class") || - !lstrcmpiA(buf, "MDI_child_class") || - !lstrcmpiA(buf, "my_button_class") || - !lstrcmpiA(buf, "my_edit_class") || - !lstrcmpiA(buf, "static") || - !lstrcmpiA(buf, "ListBox") || - !lstrcmpiA(buf, "ComboBox") || - !lstrcmpiA(buf, "MyDialogClass") || - !lstrcmpiA(buf, "#32770")) - { - struct message msg; - - msg.message = event; - msg.flags = winevent_hook|wparam|lparam; - msg.wParam = object_id; - msg.lParam = child_id; - add_message(&msg); - } - } -} - -static const WCHAR wszUnicode[] = {'U','n','i','c','o','d','e',0}; -static const WCHAR wszAnsi[] = {'U',0}; - -static LRESULT CALLBACK MsgConversionProcW(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - switch (uMsg) - { - case CB_FINDSTRINGEXACT: - trace("String: %p\n", (LPCWSTR)lParam); - if (!lstrcmpW((LPCWSTR)lParam, wszUnicode)) - return 1; - if (!lstrcmpW((LPCWSTR)lParam, wszAnsi)) - return 0; - return -1; - } - return DefWindowProcW(hwnd, uMsg, wParam, lParam); -} - -static const struct message WmGetTextLengthAfromW[] = { - { WM_GETTEXTLENGTH, sent }, - { WM_GETTEXT, sent }, - { 0 } -}; - -static const WCHAR dummy_window_text[] = {'d','u','m','m','y',' ','t','e','x','t',0}; - -/* dummy window proc for WM_GETTEXTLENGTH test */ -static LRESULT CALLBACK get_text_len_proc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) -{ - switch(msg) - { - case WM_GETTEXTLENGTH: - return lstrlenW(dummy_window_text) + 37; /* some random length */ - case WM_GETTEXT: - lstrcpynW( (LPWSTR)lp, dummy_window_text, wp ); - return lstrlenW( (LPWSTR)lp ); - default: - return DefWindowProcW( hwnd, msg, wp, lp ); - } -} - -static void test_message_conversion(void) -{ - static const WCHAR wszMsgConversionClass[] = - {'M','s','g','C','o','n','v','e','r','s','i','o','n','C','l','a','s','s',0}; - WNDCLASSW cls; - LRESULT lRes; - HWND hwnd; - WNDPROC wndproc, newproc; - BOOL ret; - - cls.style = 0; - cls.lpfnWndProc = MsgConversionProcW; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleW(NULL); - cls.hIcon = NULL; - cls.hCursor = LoadCursorW(NULL, (LPWSTR)IDC_ARROW); - cls.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); - cls.lpszMenuName = NULL; - cls.lpszClassName = wszMsgConversionClass; - /* this call will fail on Win9x, but that doesn't matter as this test is - * meaningless on those platforms */ - if(!RegisterClassW(&cls)) return; - - hwnd = CreateWindowExW(0, wszMsgConversionClass, NULL, WS_OVERLAPPED, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok(hwnd != NULL, "Window creation failed\n"); - - /* {W, A} -> A */ - - wndproc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC); - lRes = CallWindowProcA(wndproc, hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 0, "String should have been converted\n"); - lRes = CallWindowProcW(wndproc, hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 1, "String shouldn't have been converted\n"); - - /* {W, A} -> W */ - - wndproc = (WNDPROC)GetWindowLongPtrW(hwnd, GWLP_WNDPROC); - lRes = CallWindowProcA(wndproc, hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 1, "String shouldn't have been converted\n"); - lRes = CallWindowProcW(wndproc, hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 1, "String shouldn't have been converted\n"); - - /* Synchronous messages */ - - lRes = SendMessageA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 0, "String should have been converted\n"); - lRes = SendMessageW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 1, "String shouldn't have been converted\n"); - - /* Asynchronous messages */ - - SetLastError(0); - lRes = PostMessageA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER), - "PostMessage on sync only message returned %ld, last error %d\n", lRes, GetLastError()); - SetLastError(0); - lRes = PostMessageW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER), - "PostMessage on sync only message returned %ld, last error %d\n", lRes, GetLastError()); - SetLastError(0); - lRes = PostThreadMessageA(GetCurrentThreadId(), CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER), - "PosThreadtMessage on sync only message returned %ld, last error %d\n", lRes, GetLastError()); - SetLastError(0); - lRes = PostThreadMessageW(GetCurrentThreadId(), CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER), - "PosThreadtMessage on sync only message returned %ld, last error %d\n", lRes, GetLastError()); - SetLastError(0); - lRes = SendNotifyMessageA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER), - "SendNotifyMessage on sync only message returned %ld, last error %d\n", lRes, GetLastError()); - SetLastError(0); - lRes = SendNotifyMessageW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode); - ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER), - "SendNotifyMessage on sync only message returned %ld, last error %d\n", lRes, GetLastError()); - SetLastError(0); - lRes = SendMessageCallbackA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode, NULL, 0); - ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER), - "SendMessageCallback on sync only message returned %ld, last error %d\n", lRes, GetLastError()); - SetLastError(0); - lRes = SendMessageCallbackW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode, NULL, 0); - ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER), - "SendMessageCallback on sync only message returned %ld, last error %d\n", lRes, GetLastError()); - - /* Check WM_GETTEXTLENGTH A->W behaviour, whether WM_GETTEXT is also sent or not */ - - hwnd = CreateWindowW (testWindowClassW, wszUnicode, - WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - assert(hwnd); - flush_sequence(); - lRes = SendMessageA (hwnd, WM_GETTEXTLENGTH, 0, 0); - ok_sequence(WmGetTextLengthAfromW, "ANSI WM_GETTEXTLENGTH to Unicode window", FALSE); - ok( lRes == WideCharToMultiByte( CP_ACP, 0, wszUnicode, lstrlenW(wszUnicode), NULL, 0, NULL, NULL ), - "got bad length %ld\n", lRes ); - - flush_sequence(); - lRes = CallWindowProcA( (WNDPROC)GetWindowLongPtrA( hwnd, GWLP_WNDPROC ), - hwnd, WM_GETTEXTLENGTH, 0, 0); - ok_sequence(WmGetTextLengthAfromW, "ANSI WM_GETTEXTLENGTH to Unicode window", FALSE); - ok( lRes == WideCharToMultiByte( CP_ACP, 0, wszUnicode, lstrlenW(wszUnicode), NULL, 0, NULL, NULL ), - "got bad length %ld\n", lRes ); - - wndproc = (WNDPROC)SetWindowLongPtrW( hwnd, GWLP_WNDPROC, (LONG_PTR)get_text_len_proc ); - newproc = (WNDPROC)GetWindowLongPtrA( hwnd, GWLP_WNDPROC ); - lRes = CallWindowProcA( newproc, hwnd, WM_GETTEXTLENGTH, 0, 0 ); - ok( lRes == WideCharToMultiByte( CP_ACP, 0, dummy_window_text, lstrlenW(dummy_window_text), - NULL, 0, NULL, NULL ), - "got bad length %ld\n", lRes ); - - SetWindowLongPtrW( hwnd, GWLP_WNDPROC, (LONG_PTR)wndproc ); /* restore old wnd proc */ - lRes = CallWindowProcA( newproc, hwnd, WM_GETTEXTLENGTH, 0, 0 ); - ok( lRes == WideCharToMultiByte( CP_ACP, 0, dummy_window_text, lstrlenW(dummy_window_text), - NULL, 0, NULL, NULL ), - "got bad length %ld\n", lRes ); - - ret = DestroyWindow(hwnd); - ok( ret, "DestroyWindow() error %d\n", GetLastError()); -} - -struct timer_info -{ - HWND hWnd; - HANDLE handles[2]; - DWORD id; -}; - -static VOID CALLBACK tfunc(HWND hwnd, UINT uMsg, UINT_PTR id, DWORD dwTime) -{ -} - -#define TIMER_ID 0x19 - -static DWORD WINAPI timer_thread_proc(LPVOID x) -{ - struct timer_info *info = x; - DWORD r; - - r = KillTimer(info->hWnd, 0x19); - ok(r,"KillTimer failed in thread\n"); - r = SetTimer(info->hWnd,TIMER_ID,10000,tfunc); - ok(r,"SetTimer failed in thread\n"); - ok(r==TIMER_ID,"SetTimer id different\n"); - r = SetEvent(info->handles[0]); - ok(r,"SetEvent failed in thread\n"); - return 0; -} - -static void test_timers(void) -{ - struct timer_info info; - DWORD id; - - info.hWnd = CreateWindow ("TestWindowClass", NULL, - WS_OVERLAPPEDWINDOW , - CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0, - NULL, NULL, 0); - - info.id = SetTimer(info.hWnd,TIMER_ID,10000,tfunc); - ok(info.id, "SetTimer failed\n"); - ok(info.id==TIMER_ID, "SetTimer timer ID different\n"); - info.handles[0] = CreateEvent(NULL,0,0,NULL); - info.handles[1] = CreateThread(NULL,0,timer_thread_proc,&info,0,&id); - - WaitForMultipleObjects(2, info.handles, FALSE, INFINITE); - - WaitForSingleObject(info.handles[1], INFINITE); - - CloseHandle(info.handles[0]); - CloseHandle(info.handles[1]); - - ok( KillTimer(info.hWnd, TIMER_ID), "KillTimer failed\n"); - - ok(DestroyWindow(info.hWnd), "failed to destroy window\n"); -} - -static int count = 0; -static VOID CALLBACK callback_count( - HWND hwnd, - UINT uMsg, - UINT_PTR idEvent, - DWORD dwTime -) -{ - count++; -} - -static void test_timers_no_wnd(void) -{ - UINT_PTR id, id2; - MSG msg; - - count = 0; - id = SetTimer(NULL, 0, 100, callback_count); - ok(id != 0, "did not get id from SetTimer.\n"); - id2 = SetTimer(NULL, id, 200, callback_count); - ok(id2 == id, "did not get same id from SetTimer when replacing (%li expected %li).\n", id2, id); - Sleep(150); - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg); - ok(count == 0, "did not get zero count as expected (%i).\n", count); - Sleep(150); - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg); - ok(count == 1, "did not get one count as expected (%i).\n", count); - KillTimer(NULL, id); - Sleep(250); - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg); - ok(count == 1, "killing replaced timer did not work (%i).\n", count); -} - -/* Various win events with arbitrary parameters */ -static const struct message WmWinEventsSeq[] = { - { EVENT_SYSTEM_SOUND, winevent_hook|wparam|lparam, OBJID_WINDOW, 0 }, - { EVENT_SYSTEM_ALERT, winevent_hook|wparam|lparam, OBJID_SYSMENU, 1 }, - { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, OBJID_TITLEBAR, 2 }, - { EVENT_SYSTEM_MENUSTART, winevent_hook|wparam|lparam, OBJID_MENU, 3 }, - { EVENT_SYSTEM_MENUEND, winevent_hook|wparam|lparam, OBJID_CLIENT, 4 }, - { EVENT_SYSTEM_MENUPOPUPSTART, winevent_hook|wparam|lparam, OBJID_VSCROLL, 5 }, - { EVENT_SYSTEM_MENUPOPUPEND, winevent_hook|wparam|lparam, OBJID_HSCROLL, 6 }, - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, OBJID_SIZEGRIP, 7 }, - { EVENT_SYSTEM_CAPTUREEND, winevent_hook|wparam|lparam, OBJID_CARET, 8 }, - /* our win event hook ignores OBJID_CURSOR events */ - /*{ EVENT_SYSTEM_MOVESIZESTART, winevent_hook|wparam|lparam, OBJID_CURSOR, 9 },*/ - { EVENT_SYSTEM_MOVESIZEEND, winevent_hook|wparam|lparam, OBJID_ALERT, 10 }, - { EVENT_SYSTEM_CONTEXTHELPSTART, winevent_hook|wparam|lparam, OBJID_SOUND, 11 }, - { EVENT_SYSTEM_CONTEXTHELPEND, winevent_hook|wparam|lparam, OBJID_QUERYCLASSNAMEIDX, 12 }, - { EVENT_SYSTEM_DRAGDROPSTART, winevent_hook|wparam|lparam, OBJID_NATIVEOM, 13 }, - { EVENT_SYSTEM_DRAGDROPEND, winevent_hook|wparam|lparam, OBJID_WINDOW, 0 }, - { EVENT_SYSTEM_DIALOGSTART, winevent_hook|wparam|lparam, OBJID_SYSMENU, 1 }, - { EVENT_SYSTEM_DIALOGEND, winevent_hook|wparam|lparam, OBJID_TITLEBAR, 2 }, - { EVENT_SYSTEM_SCROLLINGSTART, winevent_hook|wparam|lparam, OBJID_MENU, 3 }, - { EVENT_SYSTEM_SCROLLINGEND, winevent_hook|wparam|lparam, OBJID_CLIENT, 4 }, - { EVENT_SYSTEM_SWITCHSTART, winevent_hook|wparam|lparam, OBJID_VSCROLL, 5 }, - { EVENT_SYSTEM_SWITCHEND, winevent_hook|wparam|lparam, OBJID_HSCROLL, 6 }, - { EVENT_SYSTEM_MINIMIZESTART, winevent_hook|wparam|lparam, OBJID_SIZEGRIP, 7 }, - { EVENT_SYSTEM_MINIMIZEEND, winevent_hook|wparam|lparam, OBJID_CARET, 8 }, - { 0 } -}; -static const struct message WmWinEventCaretSeq[] = { - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, /* hook 1 */ - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, /* hook 1 */ - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, /* hook 2 */ - { EVENT_OBJECT_NAMECHANGE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, /* hook 1 */ - { 0 } -}; -static const struct message WmWinEventCaretSeq_2[] = { - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, /* hook 1/2 */ - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, /* hook 1/2 */ - { EVENT_OBJECT_NAMECHANGE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, /* hook 1/2 */ - { 0 } -}; -static const struct message WmWinEventAlertSeq[] = { - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, OBJID_ALERT, 0 }, - { 0 } -}; -static const struct message WmWinEventAlertSeq_2[] = { - /* create window in the thread proc */ - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, OBJID_WINDOW, 2 }, - /* our test event */ - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, OBJID_ALERT, 2 }, - { 0 } -}; -static const struct message WmGlobalHookSeq_1[] = { - /* create window in the thread proc */ - { HCBT_CREATEWND, hook|lparam, 0, 2 }, - /* our test events */ - { HCBT_SYSCOMMAND, hook|wparam|lparam, SC_PREVWINDOW, 2 }, - { HCBT_SYSCOMMAND, hook|wparam|lparam, SC_NEXTWINDOW, 2 }, - { 0 } -}; -static const struct message WmGlobalHookSeq_2[] = { - { HCBT_SYSCOMMAND, hook|wparam|lparam, SC_NEXTWINDOW, 0 }, /* old local hook */ - { HCBT_SYSCOMMAND, hook|wparam|lparam, SC_NEXTWINDOW, 2 }, /* new global hook */ - { HCBT_SYSCOMMAND, hook|wparam|lparam, SC_PREVWINDOW, 0 }, /* old local hook */ - { HCBT_SYSCOMMAND, hook|wparam|lparam, SC_PREVWINDOW, 2 }, /* new global hook */ - { 0 } -}; - -static const struct message WmMouseLLHookSeq[] = { - { WM_MOUSEMOVE, hook }, - { WM_LBUTTONUP, hook }, - { WM_MOUSEMOVE, hook }, - { 0 } -}; - -static void CALLBACK win_event_global_hook_proc(HWINEVENTHOOK hevent, - DWORD event, - HWND hwnd, - LONG object_id, - LONG child_id, - DWORD thread_id, - DWORD event_time) -{ - char buf[256]; - - trace("WEH_2:%p,event %08x,hwnd %p,obj %08x,id %08x,thread %08x,time %08x\n", - hevent, event, hwnd, object_id, child_id, thread_id, event_time); - - if (GetClassNameA(hwnd, buf, sizeof(buf))) - { - if (!lstrcmpiA(buf, "TestWindowClass") || - !lstrcmpiA(buf, "static")) - { - struct message msg; - - msg.message = event; - msg.flags = winevent_hook|wparam|lparam; - msg.wParam = object_id; - msg.lParam = (thread_id == GetCurrentThreadId()) ? child_id : (child_id + 2); - add_message(&msg); - } - } -} - -static HHOOK hCBT_global_hook; -static DWORD cbt_global_hook_thread_id; - -static LRESULT CALLBACK cbt_global_hook_proc(int nCode, WPARAM wParam, LPARAM lParam) -{ - HWND hwnd; - char buf[256]; - - trace("CBT_2: %d, %08lx, %08lx\n", nCode, wParam, lParam); - - if (nCode == HCBT_SYSCOMMAND) - { - struct message msg; - - msg.message = nCode; - msg.flags = hook|wparam|lparam; - msg.wParam = wParam; - msg.lParam = (cbt_global_hook_thread_id == GetCurrentThreadId()) ? 1 : 2; - add_message(&msg); - - return CallNextHookEx(hCBT_global_hook, nCode, wParam, lParam); - } - /* WH_MOUSE_LL hook */ - if (nCode == HC_ACTION) - { - MSLLHOOKSTRUCT *mhll = (MSLLHOOKSTRUCT *)lParam; - - /* we can't test for real mouse events */ - if (mhll->flags & LLMHF_INJECTED) - { - struct message msg; - - memset (&msg, 0, sizeof (msg)); - msg.message = wParam; - msg.flags = hook; - add_message(&msg); - } - return CallNextHookEx(hCBT_global_hook, nCode, wParam, lParam); - } - - /* Log also SetFocus(0) calls */ - hwnd = wParam ? (HWND)wParam : (HWND)lParam; - - if (GetClassNameA(hwnd, buf, sizeof(buf))) - { - if (!lstrcmpiA(buf, "TestWindowClass") || - !lstrcmpiA(buf, "static")) - { - struct message msg; - - msg.message = nCode; - msg.flags = hook|wparam|lparam; - msg.wParam = wParam; - msg.lParam = (cbt_global_hook_thread_id == GetCurrentThreadId()) ? 1 : 2; - add_message(&msg); - } - } - return CallNextHookEx(hCBT_global_hook, nCode, wParam, lParam); -} - -static DWORD WINAPI win_event_global_thread_proc(void *param) -{ - HWND hwnd; - MSG msg; - HANDLE hevent = *(HANDLE *)param; - - assert(pNotifyWinEvent); - - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, 0,0,0,0,0,0,0, NULL); - assert(hwnd); - trace("created thread window %p\n", hwnd); - - *(HWND *)param = hwnd; - - flush_sequence(); - /* this event should be received only by our new hook proc, - * an old one does not expect an event from another thread. - */ - pNotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, hwnd, OBJID_ALERT, 0); - SetEvent(hevent); - - while (GetMessage(&msg, 0, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - return 0; -} - -static DWORD WINAPI cbt_global_hook_thread_proc(void *param) -{ - HWND hwnd; - MSG msg; - HANDLE hevent = *(HANDLE *)param; - - flush_sequence(); - /* these events should be received only by our new hook proc, - * an old one does not expect an event from another thread. - */ - - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, 0,0,0,0,0,0,0, NULL); - assert(hwnd); - trace("created thread window %p\n", hwnd); - - *(HWND *)param = hwnd; - - /* Windows doesn't like when a thread plays games with the focus, - that leads to all kinds of misbehaviours and failures to activate - a window. So, better keep next lines commented out. - SetFocus(0); - SetFocus(hwnd);*/ - - DefWindowProcA(hwnd, WM_SYSCOMMAND, SC_PREVWINDOW, 0); - DefWindowProcA(hwnd, WM_SYSCOMMAND, SC_NEXTWINDOW, 0); - - SetEvent(hevent); - - while (GetMessage(&msg, 0, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - return 0; -} - -static DWORD WINAPI mouse_ll_global_thread_proc(void *param) -{ - HWND hwnd; - MSG msg; - HANDLE hevent = *(HANDLE *)param; - - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, 0,0,0,0,0,0,0, NULL); - assert(hwnd); - trace("created thread window %p\n", hwnd); - - *(HWND *)param = hwnd; - - flush_sequence(); - - /* Windows doesn't like when a thread plays games with the focus, - * that leads to all kinds of misbehaviours and failures to activate - * a window. So, better don't generate a mouse click message below. - */ - mouse_event(MOUSEEVENTF_MOVE, -1, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_MOVE, 1, 0, 0, 0); - - SetEvent(hevent); - while (GetMessage(&msg, 0, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - return 0; -} - -static void test_winevents(void) -{ - BOOL ret; - MSG msg; - HWND hwnd, hwnd2; - UINT i; - HANDLE hthread, hevent; - DWORD tid; - HWINEVENTHOOK hhook; - const struct message *events = WmWinEventsSeq; - - hwnd = CreateWindowExA(0, "TestWindowClass", NULL, - WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0, - NULL, NULL, 0); - assert(hwnd); - - /****** start of global hook test *************/ - hCBT_global_hook = SetWindowsHookExA(WH_CBT, cbt_global_hook_proc, GetModuleHandleA(0), 0); - if (!hCBT_global_hook) - { - ok(DestroyWindow(hwnd), "failed to destroy window\n"); - skip( "cannot set global hook\n" ); - return; - } - - hevent = CreateEventA(NULL, 0, 0, NULL); - assert(hevent); - hwnd2 = (HWND)hevent; - - hthread = CreateThread(NULL, 0, cbt_global_hook_thread_proc, &hwnd2, 0, &tid); - ok(hthread != NULL, "CreateThread failed, error %d\n", GetLastError()); - - ok(WaitForSingleObject(hevent, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - - ok_sequence(WmGlobalHookSeq_1, "global hook 1", FALSE); - - flush_sequence(); - /* this one should be received only by old hook proc */ - DefWindowProcA(hwnd, WM_SYSCOMMAND, SC_NEXTWINDOW, 0); - /* this one should be received only by old hook proc */ - DefWindowProcA(hwnd, WM_SYSCOMMAND, SC_PREVWINDOW, 0); - - ok_sequence(WmGlobalHookSeq_2, "global hook 2", FALSE); - - ret = UnhookWindowsHookEx(hCBT_global_hook); - ok( ret, "UnhookWindowsHookEx error %d\n", GetLastError()); - - PostThreadMessageA(tid, WM_QUIT, 0, 0); - ok(WaitForSingleObject(hthread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - CloseHandle(hthread); - CloseHandle(hevent); - ok(!IsWindow(hwnd2), "window should be destroyed on thread exit\n"); - /****** end of global hook test *************/ - - if (!pSetWinEventHook || !pNotifyWinEvent || !pUnhookWinEvent) - { - ok(DestroyWindow(hwnd), "failed to destroy window\n"); - return; - } - - flush_sequence(); - - if (0) - { - /* this test doesn't pass under Win9x */ - /* win2k ignores events with hwnd == 0 */ - SetLastError(0xdeadbeef); - pNotifyWinEvent(events[0].message, 0, events[0].wParam, events[0].lParam); - ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE || /* Win2k */ - GetLastError() == 0xdeadbeef, /* Win9x */ - "unexpected error %d\n", GetLastError()); - ok_sequence(WmEmptySeq, "empty notify winevents", FALSE); - } - - for (i = 0; i < sizeof(WmWinEventsSeq)/sizeof(WmWinEventsSeq[0]); i++) - pNotifyWinEvent(events[i].message, hwnd, events[i].wParam, events[i].lParam); - - ok_sequence(WmWinEventsSeq, "notify winevents", FALSE); - - /****** start of event filtering test *************/ - hhook = (HWINEVENTHOOK)pSetWinEventHook( - EVENT_OBJECT_SHOW, /* 0x8002 */ - EVENT_OBJECT_LOCATIONCHANGE, /* 0x800B */ - GetModuleHandleA(0), win_event_global_hook_proc, - GetCurrentProcessId(), 0, - WINEVENT_INCONTEXT); - ok(hhook != 0, "SetWinEventHook error %d\n", GetLastError()); - - hevent = CreateEventA(NULL, 0, 0, NULL); - assert(hevent); - hwnd2 = (HWND)hevent; - - hthread = CreateThread(NULL, 0, win_event_global_thread_proc, &hwnd2, 0, &tid); - ok(hthread != NULL, "CreateThread failed, error %d\n", GetLastError()); - - ok(WaitForSingleObject(hevent, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - - ok_sequence(WmWinEventAlertSeq, "alert winevent", FALSE); - - flush_sequence(); - /* this one should be received only by old hook proc */ - pNotifyWinEvent(EVENT_OBJECT_CREATE, hwnd, OBJID_CARET, 0); /* 0x8000 */ - pNotifyWinEvent(EVENT_OBJECT_SHOW, hwnd, OBJID_CARET, 0); /* 0x8002 */ - /* this one should be received only by old hook proc */ - pNotifyWinEvent(EVENT_OBJECT_NAMECHANGE, hwnd, OBJID_CARET, 0); /* 0x800C */ - - ok_sequence(WmWinEventCaretSeq, "caret winevent", FALSE); - - ret = pUnhookWinEvent(hhook); - ok( ret, "UnhookWinEvent error %d\n", GetLastError()); - - PostThreadMessageA(tid, WM_QUIT, 0, 0); - ok(WaitForSingleObject(hthread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - CloseHandle(hthread); - CloseHandle(hevent); - ok(!IsWindow(hwnd2), "window should be destroyed on thread exit\n"); - /****** end of event filtering test *************/ - - /****** start of out of context event test *************/ - hhook = (HWINEVENTHOOK)pSetWinEventHook( - EVENT_MIN, EVENT_MAX, - 0, win_event_global_hook_proc, - GetCurrentProcessId(), 0, - WINEVENT_OUTOFCONTEXT); - ok(hhook != 0, "SetWinEventHook error %d\n", GetLastError()); - - hevent = CreateEventA(NULL, 0, 0, NULL); - assert(hevent); - hwnd2 = (HWND)hevent; - - flush_sequence(); - - hthread = CreateThread(NULL, 0, win_event_global_thread_proc, &hwnd2, 0, &tid); - ok(hthread != NULL, "CreateThread failed, error %d\n", GetLastError()); - - ok(WaitForSingleObject(hevent, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - - ok_sequence(WmEmptySeq, "empty notify winevents", FALSE); - /* process pending winevent messages */ - ok(!PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE), "msg queue should be empty\n"); - ok_sequence(WmWinEventAlertSeq_2, "alert winevent for out of context proc", FALSE); - - flush_sequence(); - /* this one should be received only by old hook proc */ - pNotifyWinEvent(EVENT_OBJECT_CREATE, hwnd, OBJID_CARET, 0); /* 0x8000 */ - pNotifyWinEvent(EVENT_OBJECT_SHOW, hwnd, OBJID_CARET, 0); /* 0x8002 */ - /* this one should be received only by old hook proc */ - pNotifyWinEvent(EVENT_OBJECT_NAMECHANGE, hwnd, OBJID_CARET, 0); /* 0x800C */ - - ok_sequence(WmWinEventCaretSeq_2, "caret winevent for incontext proc", FALSE); - /* process pending winevent messages */ - ok(!PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE), "msg queue should be empty\n"); - ok_sequence(WmWinEventCaretSeq_2, "caret winevent for out of context proc", FALSE); - - ret = pUnhookWinEvent(hhook); - ok( ret, "UnhookWinEvent error %d\n", GetLastError()); - - PostThreadMessageA(tid, WM_QUIT, 0, 0); - ok(WaitForSingleObject(hthread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - CloseHandle(hthread); - CloseHandle(hevent); - ok(!IsWindow(hwnd2), "window should be destroyed on thread exit\n"); - /****** end of out of context event test *************/ - - /****** start of MOUSE_LL hook test *************/ - hCBT_global_hook = SetWindowsHookExA(WH_MOUSE_LL, cbt_global_hook_proc, GetModuleHandleA(0), 0); - /* WH_MOUSE_LL is not supported on Win9x platforms */ - if (!hCBT_global_hook) - { - trace("Skipping WH_MOUSE_LL test on this platform\n"); - goto skip_mouse_ll_hook_test; - } - - hevent = CreateEventA(NULL, 0, 0, NULL); - assert(hevent); - hwnd2 = (HWND)hevent; - - hthread = CreateThread(NULL, 0, mouse_ll_global_thread_proc, &hwnd2, 0, &tid); - ok(hthread != NULL, "CreateThread failed, error %d\n", GetLastError()); - - while (WaitForSingleObject(hevent, 100) == WAIT_TIMEOUT) - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - - ok_sequence(WmMouseLLHookSeq, "MOUSE_LL hook other thread", FALSE); - flush_sequence(); - - mouse_event(MOUSEEVENTF_MOVE, -1, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_MOVE, 1, 0, 0, 0); - - ok_sequence(WmMouseLLHookSeq, "MOUSE_LL hook same thread", FALSE); - - ret = UnhookWindowsHookEx(hCBT_global_hook); - ok( ret, "UnhookWindowsHookEx error %d\n", GetLastError()); - - PostThreadMessageA(tid, WM_QUIT, 0, 0); - ok(WaitForSingleObject(hthread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); - CloseHandle(hthread); - CloseHandle(hevent); - ok(!IsWindow(hwnd2), "window should be destroyed on thread exit\n"); - /****** end of MOUSE_LL hook test *************/ -skip_mouse_ll_hook_test: - - ok(DestroyWindow(hwnd), "failed to destroy window\n"); -} - -static void test_set_hook(void) -{ - BOOL ret; - HHOOK hhook; - HWINEVENTHOOK hwinevent_hook; - - hhook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, GetModuleHandleA(0), GetCurrentThreadId()); - ok(hhook != 0, "local hook does not require hModule set to 0\n"); - UnhookWindowsHookEx(hhook); - - if (0) - { - /* this test doesn't pass under Win9x: BUG! */ - SetLastError(0xdeadbeef); - hhook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, 0, 0); - ok(!hhook, "global hook requires hModule != 0\n"); - ok(GetLastError() == ERROR_HOOK_NEEDS_HMOD, "unexpected error %d\n", GetLastError()); - } - - SetLastError(0xdeadbeef); - hhook = SetWindowsHookExA(WH_CBT, 0, GetModuleHandleA(0), GetCurrentThreadId()); - ok(!hhook, "SetWinEventHook with invalid proc should fail\n"); - ok(GetLastError() == ERROR_INVALID_FILTER_PROC || /* Win2k */ - GetLastError() == 0xdeadbeef, /* Win9x */ - "unexpected error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - ok(!UnhookWindowsHookEx((HHOOK)0xdeadbeef), "UnhookWindowsHookEx succeeded\n"); - ok(GetLastError() == ERROR_INVALID_HOOK_HANDLE || /* Win2k */ - GetLastError() == 0xdeadbeef, /* Win9x */ - "unexpected error %d\n", GetLastError()); - - if (!pSetWinEventHook || !pUnhookWinEvent) return; - - /* even process local incontext hooks require hmodule */ - SetLastError(0xdeadbeef); - hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX, - 0, win_event_proc, GetCurrentProcessId(), 0, WINEVENT_INCONTEXT); - ok(!hwinevent_hook, "WINEVENT_INCONTEXT requires hModule != 0\n"); - ok(GetLastError() == ERROR_HOOK_NEEDS_HMOD || /* Win2k */ - GetLastError() == 0xdeadbeef, /* Win9x */ - "unexpected error %d\n", GetLastError()); - - /* even thread local incontext hooks require hmodule */ - SetLastError(0xdeadbeef); - hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX, - 0, win_event_proc, GetCurrentProcessId(), GetCurrentThreadId(), WINEVENT_INCONTEXT); - ok(!hwinevent_hook, "WINEVENT_INCONTEXT requires hModule != 0\n"); - ok(GetLastError() == ERROR_HOOK_NEEDS_HMOD || /* Win2k */ - GetLastError() == 0xdeadbeef, /* Win9x */ - "unexpected error %d\n", GetLastError()); - - if (0) - { - /* these 3 tests don't pass under Win9x */ - SetLastError(0xdeadbeef); - hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(1, 0, - 0, win_event_proc, GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT); - ok(!hwinevent_hook, "SetWinEventHook with invalid event range should fail\n"); - ok(GetLastError() == ERROR_INVALID_HOOK_FILTER, "unexpected error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(-1, 1, - 0, win_event_proc, GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT); - ok(!hwinevent_hook, "SetWinEventHook with invalid event range should fail\n"); - ok(GetLastError() == ERROR_INVALID_HOOK_FILTER, "unexpected error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX, - 0, win_event_proc, 0, 0xdeadbeef, WINEVENT_OUTOFCONTEXT); - ok(!hwinevent_hook, "SetWinEventHook with invalid tid should fail\n"); - ok(GetLastError() == ERROR_INVALID_THREAD_ID, "unexpected error %d\n", GetLastError()); - } - - SetLastError(0xdeadbeef); - hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(0, 0, - 0, win_event_proc, GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT); - ok(hwinevent_hook != 0, "SetWinEventHook error %d\n", GetLastError()); - ok(GetLastError() == 0xdeadbeef, "unexpected error %d\n", GetLastError()); - ret = pUnhookWinEvent(hwinevent_hook); - ok( ret, "UnhookWinEvent error %d\n", GetLastError()); - -todo_wine { - /* This call succeeds under win2k SP4, but fails under Wine. - Does win2k test/use passed process id? */ - SetLastError(0xdeadbeef); - hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX, - 0, win_event_proc, 0xdeadbeef, 0, WINEVENT_OUTOFCONTEXT); - ok(hwinevent_hook != 0, "SetWinEventHook error %d\n", GetLastError()); - ok(GetLastError() == 0xdeadbeef, "unexpected error %d\n", GetLastError()); - ret = pUnhookWinEvent(hwinevent_hook); - ok( ret, "UnhookWinEvent error %d\n", GetLastError()); -} - - SetLastError(0xdeadbeef); - ok(!pUnhookWinEvent((HWINEVENTHOOK)0xdeadbeef), "UnhookWinEvent succeeded\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE || /* Win2k */ - GetLastError() == 0xdeadbeef, /* Win9x */ - "unexpected error %d\n", GetLastError()); -} - -static const struct message ScrollWindowPaint1[] = { - { WM_PAINT, sent }, - { WM_ERASEBKGND, sent|beginpaint }, - { 0 } -}; - -static const struct message ScrollWindowPaint2[] = { - { WM_PAINT, sent }, - { 0 } -}; - -static void test_scrollwindowex(void) -{ - HWND hwnd, hchild; - RECT rect={0,0,130,130}; - - hwnd = CreateWindowExA(0, "TestWindowClass", "Test Scroll", - WS_VISIBLE|WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - hchild = CreateWindowExA(0, "TestWindowClass", "Test child", - WS_VISIBLE|WS_CAPTION|WS_CHILD, - 10, 10, 150, 150, hwnd, 0, 0, NULL); - ok (hchild != 0, "Failed to create child\n"); - UpdateWindow(hwnd); - flush_events(); - flush_sequence(); - - /* scroll without the child window */ - trace("start scroll\n"); - ScrollWindowEx( hwnd, 10, 10, &rect, NULL, NULL, NULL, - SW_ERASE|SW_INVALIDATE); - ok_sequence(WmEmptySeq, "ScrollWindowEx", 0); - trace("end scroll\n"); - flush_sequence(); - flush_events(); - ok_sequence(ScrollWindowPaint1, "ScrollWindowEx", 0); - flush_events(); - flush_sequence(); - - /* Now without the SW_ERASE flag */ - trace("start scroll\n"); - ScrollWindowEx( hwnd, 10, 10, &rect, NULL, NULL, NULL, SW_INVALIDATE); - ok_sequence(WmEmptySeq, "ScrollWindowEx", 0); - trace("end scroll\n"); - flush_sequence(); - flush_events(); - ok_sequence(ScrollWindowPaint2, "ScrollWindowEx", 0); - flush_events(); - flush_sequence(); - - /* now scroll the child window as well */ - trace("start scroll\n"); - ScrollWindowEx( hwnd, 10, 10, &rect, NULL, NULL, NULL, - SW_SCROLLCHILDREN|SW_ERASE|SW_INVALIDATE); - todo_wine { /* wine sends WM_POSCHANGING, WM_POSCHANGED messages */ - /* windows sometimes a WM_MOVE */ - ok_sequence(WmEmptySeq, "ScrollWindowEx", 0); - } - trace("end scroll\n"); - flush_sequence(); - flush_events(); - ok_sequence(ScrollWindowPaint1, "ScrollWindowEx", 0); - flush_events(); - flush_sequence(); - - /* now scroll with ScrollWindow() */ - trace("start scroll with ScrollWindow\n"); - ScrollWindow( hwnd, 5, 5, NULL, NULL); - trace("end scroll\n"); - flush_sequence(); - flush_events(); - ok_sequence(ScrollWindowPaint1, "ScrollWindow", 0); - - ok(DestroyWindow(hchild), "failed to destroy window\n"); - ok(DestroyWindow(hwnd), "failed to destroy window\n"); - flush_sequence(); -} - -static const struct message destroy_window_with_children[] = { - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, /* popup */ - { HCBT_DESTROYWND, hook|lparam, 0, WND_PARENT_ID }, /* parent */ - { 0x0090, sent|optional }, - { HCBT_DESTROYWND, hook|lparam, 0, WND_POPUP_ID }, /* popup */ - { 0x0090, sent|optional }, - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, /* popup */ - { WM_DESTROY, sent|wparam|lparam, 0, WND_POPUP_ID }, /* popup */ - { WM_CAPTURECHANGED, sent|wparam|lparam, 0, WND_POPUP_ID }, /* popup */ - { WM_NCDESTROY, sent|wparam|lparam, 0, WND_POPUP_ID }, /* popup */ - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, 0, 0 }, /* parent */ - { WM_DESTROY, sent|wparam|lparam, 0, WND_PARENT_ID }, /* parent */ - { WM_DESTROY, sent|wparam|lparam, 0, WND_CHILD_ID + 2 }, /* child2 */ - { WM_DESTROY, sent|wparam|lparam, 0, WND_CHILD_ID + 1 }, /* child1 */ - { WM_DESTROY, sent|wparam|lparam, 0, WND_CHILD_ID + 3 }, /* child3 */ - { WM_NCDESTROY, sent|wparam|lparam, 0, WND_CHILD_ID + 2 }, /* child2 */ - { WM_NCDESTROY, sent|wparam|lparam, 0, WND_CHILD_ID + 3 }, /* child3 */ - { WM_NCDESTROY, sent|wparam|lparam, 0, WND_CHILD_ID + 1 }, /* child1 */ - { WM_NCDESTROY, sent|wparam|lparam, 0, WND_PARENT_ID }, /* parent */ - { 0 } -}; - -static void test_DestroyWindow(void) -{ - BOOL ret; - HWND parent, child1, child2, child3, child4, test; - UINT child_id = WND_CHILD_ID + 1; - - parent = CreateWindowExA(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - assert(parent != 0); - child1 = CreateWindowExA(0, "TestWindowClass", NULL, WS_CHILD, - 0, 0, 50, 50, parent, (HMENU)child_id++, 0, NULL); - assert(child1 != 0); - child2 = CreateWindowExA(0, "TestWindowClass", NULL, WS_CHILD, - 0, 0, 50, 50, GetDesktopWindow(), (HMENU)child_id++, 0, NULL); - assert(child2 != 0); - child3 = CreateWindowExA(0, "TestWindowClass", NULL, WS_CHILD, - 0, 0, 50, 50, child1, (HMENU)child_id++, 0, NULL); - assert(child3 != 0); - child4 = CreateWindowExA(0, "TestWindowClass", NULL, WS_POPUP, - 0, 0, 50, 50, parent, 0, 0, NULL); - assert(child4 != 0); - - /* test owner/parent of child2 */ - test = GetParent(child2); - ok(test == GetDesktopWindow(), "wrong parent %p\n", test); - ok(!IsChild(parent, child2), "wrong parent/child %p/%p\n", parent, child2); - if(pGetAncestor) { - test = pGetAncestor(child2, GA_PARENT); - ok(test == GetDesktopWindow(), "wrong parent %p\n", test); - } - test = GetWindow(child2, GW_OWNER); - ok(!test, "wrong owner %p\n", test); - - test = SetParent(child2, parent); - ok(test == GetDesktopWindow(), "wrong old parent %p\n", test); - - /* test owner/parent of the parent */ - test = GetParent(parent); - ok(!test, "wrong parent %p\n", test); - ok(!IsChild(GetDesktopWindow(), parent), "wrong parent/child %p/%p\n", GetDesktopWindow(), parent); - if(pGetAncestor) { - test = pGetAncestor(parent, GA_PARENT); - ok(test == GetDesktopWindow(), "wrong parent %p\n", test); - } - test = GetWindow(parent, GW_OWNER); - ok(!test, "wrong owner %p\n", test); - - /* test owner/parent of child1 */ - test = GetParent(child1); - ok(test == parent, "wrong parent %p\n", test); - ok(IsChild(parent, child1), "wrong parent/child %p/%p\n", parent, child1); - if(pGetAncestor) { - test = pGetAncestor(child1, GA_PARENT); - ok(test == parent, "wrong parent %p\n", test); - } - test = GetWindow(child1, GW_OWNER); - ok(!test, "wrong owner %p\n", test); - - /* test owner/parent of child2 */ - test = GetParent(child2); - ok(test == parent, "wrong parent %p\n", test); - ok(IsChild(parent, child2), "wrong parent/child %p/%p\n", parent, child2); - if(pGetAncestor) { - test = pGetAncestor(child2, GA_PARENT); - ok(test == parent, "wrong parent %p\n", test); - } - test = GetWindow(child2, GW_OWNER); - ok(!test, "wrong owner %p\n", test); - - /* test owner/parent of child3 */ - test = GetParent(child3); - ok(test == child1, "wrong parent %p\n", test); - ok(IsChild(parent, child3), "wrong parent/child %p/%p\n", parent, child3); - if(pGetAncestor) { - test = pGetAncestor(child3, GA_PARENT); - ok(test == child1, "wrong parent %p\n", test); - } - test = GetWindow(child3, GW_OWNER); - ok(!test, "wrong owner %p\n", test); - - /* test owner/parent of child4 */ - test = GetParent(child4); - ok(test == parent, "wrong parent %p\n", test); - ok(!IsChild(parent, child4), "wrong parent/child %p/%p\n", parent, child4); - if(pGetAncestor) { - test = pGetAncestor(child4, GA_PARENT); - ok(test == GetDesktopWindow(), "wrong parent %p\n", test); - } - test = GetWindow(child4, GW_OWNER); - ok(test == parent, "wrong owner %p\n", test); - - flush_sequence(); - - trace("parent %p, child1 %p, child2 %p, child3 %p, child4 %p\n", - parent, child1, child2, child3, child4); - - SetCapture(child4); - test = GetCapture(); - ok(test == child4, "wrong capture window %p\n", test); - - test_DestroyWindow_flag = TRUE; - ret = DestroyWindow(parent); - ok( ret, "DestroyWindow() error %d\n", GetLastError()); - test_DestroyWindow_flag = FALSE; - ok_sequence(destroy_window_with_children, "destroy window with children", 0); - - ok(!IsWindow(parent), "parent still exists\n"); - ok(!IsWindow(child1), "child1 still exists\n"); - ok(!IsWindow(child2), "child2 still exists\n"); - ok(!IsWindow(child3), "child3 still exists\n"); - ok(!IsWindow(child4), "child4 still exists\n"); - - test = GetCapture(); - ok(!test, "wrong capture window %p\n", test); -} - - -static const struct message WmDispatchPaint[] = { - { WM_NCPAINT, sent }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent }, - { 0 } -}; - -static LRESULT WINAPI DispatchMessageCheckProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - if (message == WM_PAINT) return 0; - return MsgCheckProcA( hwnd, message, wParam, lParam ); -} - -static void test_DispatchMessage(void) -{ - RECT rect; - MSG msg; - int count; - HWND hwnd = CreateWindowA( "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ShowWindow( hwnd, SW_SHOW ); - UpdateWindow( hwnd ); - flush_events(); - flush_sequence(); - SetWindowLongPtrA( hwnd, GWLP_WNDPROC, (LONG_PTR)DispatchMessageCheckProc ); - - SetRect( &rect, -5, -5, 5, 5 ); - RedrawWindow( hwnd, &rect, 0, RDW_INVALIDATE|RDW_ERASE|RDW_FRAME ); - count = 0; - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) - { - if (msg.message != WM_PAINT) DispatchMessage( &msg ); - else - { - flush_sequence(); - DispatchMessage( &msg ); - /* DispatchMessage will send WM_NCPAINT if non client area is still invalid after WM_PAINT */ - if (!count) ok_sequence( WmDispatchPaint, "WmDispatchPaint", FALSE ); - else ok_sequence( WmEmptySeq, "WmEmpty", FALSE ); - if (++count > 10) break; - } - } - ok( msg.message == WM_PAINT && count > 10, "WM_PAINT messages stopped\n" ); - - trace("now without DispatchMessage\n"); - flush_sequence(); - RedrawWindow( hwnd, &rect, 0, RDW_INVALIDATE|RDW_ERASE|RDW_FRAME ); - count = 0; - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) - { - if (msg.message != WM_PAINT) DispatchMessage( &msg ); - else - { - HRGN hrgn = CreateRectRgn( 0, 0, 0, 0 ); - flush_sequence(); - /* this will send WM_NCCPAINT just like DispatchMessage does */ - GetUpdateRgn( hwnd, hrgn, TRUE ); - ok_sequence( WmDispatchPaint, "WmDispatchPaint", FALSE ); - DeleteObject( hrgn ); - GetClientRect( hwnd, &rect ); - ValidateRect( hwnd, &rect ); /* this will stop WM_PAINTs */ - ok( !count, "Got multiple WM_PAINTs\n" ); - if (++count > 10) break; - } - } - DestroyWindow(hwnd); -} - - -static const struct message WmUser[] = { - { WM_USER, sent }, - { 0 } -}; - -struct sendmsg_info -{ - HWND hwnd; - DWORD timeout; - DWORD ret; -}; - -static DWORD CALLBACK send_msg_thread( LPVOID arg ) -{ - struct sendmsg_info *info = arg; - info->ret = SendMessageTimeoutA( info->hwnd, WM_USER, 0, 0, 0, info->timeout, NULL ); - if (!info->ret) ok( GetLastError() == ERROR_TIMEOUT, "unexpected error %d\n", GetLastError()); - return 0; -} - -static void wait_for_thread( HANDLE thread ) -{ - while (MsgWaitForMultipleObjects(1, &thread, FALSE, INFINITE, QS_SENDMESSAGE) != WAIT_OBJECT_0) - { - MSG msg; - while (PeekMessageA( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage(&msg); - } -} - -static LRESULT WINAPI send_msg_delay_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - if (message == WM_USER) Sleep(200); - return MsgCheckProcA( hwnd, message, wParam, lParam ); -} - -static void test_SendMessageTimeout(void) -{ - HANDLE thread; - struct sendmsg_info info; - DWORD tid; - - info.hwnd = CreateWindowA( "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - flush_events(); - flush_sequence(); - - info.timeout = 1000; - info.ret = 0xdeadbeef; - thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid ); - wait_for_thread( thread ); - CloseHandle( thread ); - ok( info.ret == 1, "SendMessageTimeout failed\n" ); - ok_sequence( WmUser, "WmUser", FALSE ); - - info.timeout = 1; - info.ret = 0xdeadbeef; - thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid ); - Sleep(100); /* SendMessageTimeout should time out here */ - wait_for_thread( thread ); - CloseHandle( thread ); - ok( info.ret == 0, "SendMessageTimeout succeeded\n" ); - ok_sequence( WmEmptySeq, "WmEmptySeq", FALSE ); - - /* 0 means infinite timeout */ - info.timeout = 0; - info.ret = 0xdeadbeef; - thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid ); - Sleep(100); - wait_for_thread( thread ); - CloseHandle( thread ); - ok( info.ret == 1, "SendMessageTimeout failed\n" ); - ok_sequence( WmUser, "WmUser", FALSE ); - - /* timeout is treated as signed despite the prototype */ - info.timeout = 0x7fffffff; - info.ret = 0xdeadbeef; - thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid ); - Sleep(100); - wait_for_thread( thread ); - CloseHandle( thread ); - ok( info.ret == 1, "SendMessageTimeout failed\n" ); - ok_sequence( WmUser, "WmUser", FALSE ); - - info.timeout = 0x80000000; - info.ret = 0xdeadbeef; - thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid ); - Sleep(100); - wait_for_thread( thread ); - CloseHandle( thread ); - ok( info.ret == 0, "SendMessageTimeout succeeded\n" ); - ok_sequence( WmEmptySeq, "WmEmptySeq", FALSE ); - - /* now check for timeout during message processing */ - SetWindowLongPtrA( info.hwnd, GWLP_WNDPROC, (LONG_PTR)send_msg_delay_proc ); - info.timeout = 100; - info.ret = 0xdeadbeef; - thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid ); - wait_for_thread( thread ); - CloseHandle( thread ); - /* we should time out but still get the message */ - ok( info.ret == 0, "SendMessageTimeout failed\n" ); - ok_sequence( WmUser, "WmUser", FALSE ); - - DestroyWindow( info.hwnd ); -} - - -/****************** edit message test *************************/ -#define ID_EDIT 0x1234 -static const struct message sl_edit_setfocus[] = -{ - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam, 0 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 10 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 15 }, - { WM_CTLCOLOREDIT, sent|parent }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 11 }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { WM_COMMAND, sent|parent|wparam, MAKEWPARAM(ID_EDIT, EN_SETFOCUS) }, - { 0 } -}; -static const struct message ml_edit_setfocus[] = -{ - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam, 0 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 10 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 11 }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { WM_COMMAND, sent|parent|wparam, MAKEWPARAM(ID_EDIT, EN_SETFOCUS) }, - { 0 } -}; -static const struct message sl_edit_killfocus[] = -{ - { HCBT_SETFOCUS, hook }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_KILLFOCUS, sent|wparam, 0 }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_DESTROY, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { WM_COMMAND, sent|parent|wparam, MAKEWPARAM(ID_EDIT, EN_KILLFOCUS) }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 1 }, - { 0 } -}; -static const struct message sl_edit_lbutton_dblclk[] = -{ - { WM_LBUTTONDBLCLK, sent }, - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; -static const struct message sl_edit_lbutton_down[] = -{ - { WM_LBUTTONDOWN, sent|wparam|lparam, 0, 0 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 10 }, - { WM_CTLCOLOREDIT, sent|parent }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 11 }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { WM_COMMAND, sent|parent|wparam, MAKEWPARAM(ID_EDIT, EN_SETFOCUS) }, - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { WM_CTLCOLOREDIT, sent|parent|optional }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 11 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { 0 } -}; -static const struct message ml_edit_lbutton_down[] = -{ - { WM_LBUTTONDOWN, sent|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam|defwinproc, 0 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 10 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 11 }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { WM_COMMAND, sent|parent|wparam, MAKEWPARAM(ID_EDIT, EN_SETFOCUS) }, - { 0 } -}; -static const struct message sl_edit_lbutton_up[] = -{ - { WM_LBUTTONUP, sent|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_SYSTEM_CAPTUREEND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CAPTURECHANGED, sent|defwinproc }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { 0 } -}; -static const struct message ml_edit_lbutton_up[] = -{ - { WM_LBUTTONUP, sent|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_CAPTUREEND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CAPTURECHANGED, sent|defwinproc }, - { 0 } -}; - -static WNDPROC old_edit_proc; - -static LRESULT CALLBACK edit_hook_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - trace("edit: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - /* explicitly ignore WM_GETICON message */ - if (message == WM_GETICON) return 0; - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - defwndproc_counter++; - ret = CallWindowProcA(old_edit_proc, hwnd, message, wParam, lParam); - defwndproc_counter--; - - return ret; -} - -static void subclass_edit(void) -{ - WNDCLASSA cls; - - if (!GetClassInfoA(0, "edit", &cls)) assert(0); - - old_edit_proc = cls.lpfnWndProc; - - cls.hInstance = GetModuleHandle(0); - cls.lpfnWndProc = edit_hook_proc; - cls.lpszClassName = "my_edit_class"; - UnregisterClass(cls.lpszClassName, cls.hInstance); - if (!RegisterClassA(&cls)) assert(0); -} - -static void test_edit_messages(void) -{ - HWND hwnd, parent; - DWORD dlg_code; - - subclass_edit(); - log_all_parent_messages++; - - parent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (parent != 0, "Failed to create parent window\n"); - - /* test single line edit */ - hwnd = CreateWindowExA(0, "my_edit_class", "test", WS_CHILD, - 0, 0, 80, 20, parent, (HMENU)ID_EDIT, 0, NULL); - ok(hwnd != 0, "Failed to create edit window\n"); - - dlg_code = SendMessageA(hwnd, WM_GETDLGCODE, 0, 0); - ok(dlg_code == (DLGC_WANTCHARS|DLGC_HASSETSEL|DLGC_WANTARROWS), "wrong dlg_code %08x\n", dlg_code); - - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - SetFocus(0); - flush_sequence(); - - SetFocus(hwnd); - ok_sequence(sl_edit_setfocus, "SetFocus(hwnd) on an edit", FALSE); - - SetFocus(0); - ok_sequence(sl_edit_killfocus, "SetFocus(0) on an edit", FALSE); - - SetFocus(0); - ReleaseCapture(); - flush_sequence(); - - SendMessageA(hwnd, WM_LBUTTONDBLCLK, 0, 0); - ok_sequence(sl_edit_lbutton_dblclk, "WM_LBUTTONDBLCLK on an edit", FALSE); - - SetFocus(0); - ReleaseCapture(); - flush_sequence(); - - SendMessageA(hwnd, WM_LBUTTONDOWN, 0, 0); - ok_sequence(sl_edit_lbutton_down, "WM_LBUTTONDOWN on an edit", FALSE); - - SendMessageA(hwnd, WM_LBUTTONUP, 0, 0); - ok_sequence(sl_edit_lbutton_up, "WM_LBUTTONUP on an edit", FALSE); - - DestroyWindow(hwnd); - - /* test multiline edit */ - hwnd = CreateWindowExA(0, "my_edit_class", "test", WS_CHILD | ES_MULTILINE, - 0, 0, 80, 20, parent, (HMENU)ID_EDIT, 0, NULL); - ok(hwnd != 0, "Failed to create edit window\n"); - - dlg_code = SendMessageA(hwnd, WM_GETDLGCODE, 0, 0); - ok(dlg_code == (DLGC_WANTCHARS|DLGC_HASSETSEL|DLGC_WANTARROWS|DLGC_WANTALLKEYS), - "wrong dlg_code %08x\n", dlg_code); - - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - SetFocus(0); - flush_sequence(); - - SetFocus(hwnd); - ok_sequence(ml_edit_setfocus, "SetFocus(hwnd) on multiline edit", FALSE); - - SetFocus(0); - ok_sequence(sl_edit_killfocus, "SetFocus(0) on multiline edit", FALSE); - - SetFocus(0); - ReleaseCapture(); - flush_sequence(); - - SendMessageA(hwnd, WM_LBUTTONDBLCLK, 0, 0); - ok_sequence(sl_edit_lbutton_dblclk, "WM_LBUTTONDBLCLK on multiline edit", FALSE); - - SetFocus(0); - ReleaseCapture(); - flush_sequence(); - - SendMessageA(hwnd, WM_LBUTTONDOWN, 0, 0); - ok_sequence(ml_edit_lbutton_down, "WM_LBUTTONDOWN on multiline edit", FALSE); - - SendMessageA(hwnd, WM_LBUTTONUP, 0, 0); - ok_sequence(ml_edit_lbutton_up, "WM_LBUTTONUP on multiline edit", FALSE); - - DestroyWindow(hwnd); - DestroyWindow(parent); - - log_all_parent_messages--; -} - -/**************************** End of Edit test ******************************/ - -static const struct message WmKeyDownSkippedSeq[] = -{ - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 1 }, /* XP */ - { 0 } -}; -static const struct message WmKeyUpSkippedSeq[] = -{ - { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xc0000001 }, /* XP */ - { 0 } -}; - -#define EV_START_STOP 0 -#define EV_SENDMSG 1 -#define EV_ACK 2 - -struct peekmsg_info -{ - HWND hwnd; - HANDLE hevent[3]; /* 0 - start/stop, 1 - SendMessage, 2 - ack */ -}; - -static DWORD CALLBACK send_msg_thread_2(void *param) -{ - DWORD ret; - struct peekmsg_info *info = param; - - trace("thread: waiting for start\n"); - WaitForSingleObject(info->hevent[EV_START_STOP], INFINITE); - trace("thread: looping\n"); - - while (1) - { - ret = WaitForMultipleObjects(2, info->hevent, FALSE, INFINITE); - - switch (ret) - { - case WAIT_OBJECT_0 + EV_START_STOP: - trace("thread: exiting\n"); - return 0; - - case WAIT_OBJECT_0 + EV_SENDMSG: - trace("thread: sending message\n"); - SendNotifyMessageA(info->hwnd, WM_USER, 0, 0); - SetEvent(info->hevent[EV_ACK]); - break; - - default: - trace("unexpected return: %04x\n", ret); - assert(0); - break; - } - } - return 0; -} - -static void test_PeekMessage(void) -{ - MSG msg; - HANDLE hthread; - DWORD tid, qstatus; - UINT qs_all_input = QS_ALLINPUT; - UINT qs_input = QS_INPUT; - BOOL ret; - struct peekmsg_info info; - - info.hwnd = CreateWindowA("TestWindowClass", NULL, WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - assert(info.hwnd); - ShowWindow(info.hwnd, SW_SHOW); - UpdateWindow(info.hwnd); - SetFocus(info.hwnd); - - info.hevent[EV_START_STOP] = CreateEventA(NULL, 0, 0, NULL); - info.hevent[EV_SENDMSG] = CreateEventA(NULL, 0, 0, NULL); - info.hevent[EV_ACK] = CreateEventA(NULL, 0, 0, NULL); - - hthread = CreateThread(NULL, 0, send_msg_thread_2, &info, 0, &tid); - Sleep(100); - - trace("signalling to start looping\n"); - SetEvent(info.hevent[EV_START_STOP]); - - flush_events(); - flush_sequence(); - - SetLastError(0xdeadbeef); - qstatus = GetQueueStatus(qs_all_input); - if (GetLastError() == ERROR_INVALID_FLAGS) - { - trace("QS_RAWINPUT not supported on this platform\n"); - qs_all_input &= ~QS_RAWINPUT; - qs_input &= ~QS_RAWINPUT; - } - ok(qstatus == 0, "wrong qstatus %08x\n", qstatus); - - trace("signalling to send message\n"); - SetEvent(info.hevent[EV_SENDMSG]); - WaitForSingleObject(info.hevent[EV_ACK], INFINITE); - - /* pass invalid QS_xxxx flags */ - SetLastError(0xdeadbeef); - qstatus = GetQueueStatus(0xffffffff); - ok(qstatus == 0, "GetQueueStatus should fail: %08x\n", qstatus); - ok(GetLastError() == ERROR_INVALID_FLAGS, "wrong error %d\n", GetLastError()); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_SENDMESSAGE, QS_SENDMESSAGE), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmUser, "WmUser", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == 0, "wrong qstatus %08x\n", qstatus); - - keybd_event('N', 0, 0, 0); - keybd_event('N', 0, KEYEVENTF_KEYUP, 0); - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_KEY, QS_KEY), - "wrong qstatus %08x\n", qstatus); - - PostMessageA(info.hwnd, WM_CHAR, 'z', 0); - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - InvalidateRect(info.hwnd, NULL, FALSE); - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_PAINT, QS_PAINT|QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - trace("signalling to send message\n"); - SetEvent(info.hevent[EV_SENDMSG]); - WaitForSingleObject(info.hevent[EV_ACK], INFINITE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_SENDMESSAGE, QS_SENDMESSAGE|QS_PAINT|QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | (qs_input << 16)); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmUser, "WmUser", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_PAINT|QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - trace("signalling to send message\n"); - SetEvent(info.hevent[EV_SENDMSG]); - WaitForSingleObject(info.hevent[EV_ACK], INFINITE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_SENDMESSAGE, QS_SENDMESSAGE|QS_PAINT|QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | PM_QS_POSTMESSAGE); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmUser, "WmUser", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_PAINT|QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | PM_QS_POSTMESSAGE); - ok(ret && msg.message == WM_CHAR && msg.wParam == 'z', - "got %d and %04x wParam %08lx instead of TRUE and WM_CHAR wParam 'z'\n", - ret, msg.message, msg.wParam); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_PAINT|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | PM_QS_POSTMESSAGE); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_PAINT|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | PM_QS_PAINT); - ok(ret && msg.message == WM_PAINT, - "got %d and %04x instead of TRUE and WM_PAINT\n", ret, msg.message); - DispatchMessageA(&msg); - ok_sequence(WmPaint, "WmPaint", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | PM_QS_PAINT); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_KEY), - "wrong qstatus %08x\n", qstatus); - - trace("signalling to send message\n"); - SetEvent(info.hevent[EV_SENDMSG]); - WaitForSingleObject(info.hevent[EV_ACK], INFINITE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_SENDMESSAGE, QS_SENDMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - PostMessageA(info.hwnd, WM_CHAR, 'z', 0); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_SENDMESSAGE|QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE); - ok(ret && msg.message == WM_CHAR && msg.wParam == 'z', - "got %d and %04x wParam %08lx instead of TRUE and WM_CHAR wParam 'z'\n", - ret, msg.message, msg.wParam); - ok_sequence(WmUser, "WmUser", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_KEY), - "wrong qstatus %08x\n", qstatus); - - PostMessageA(info.hwnd, WM_CHAR, 'z', 0); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - trace("signalling to send message\n"); - SetEvent(info.hevent[EV_SENDMSG]); - WaitForSingleObject(info.hevent[EV_ACK], INFINITE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_SENDMESSAGE, QS_SENDMESSAGE|QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | (QS_KEY << 16)); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmUser, "WmUser", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - if (qs_all_input & QS_RAWINPUT) /* use QS_RAWINPUT only if supported */ - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | (QS_RAWINPUT << 16)); - else /* workaround for a missing QS_RAWINPUT support */ - ret = PeekMessageA(&msg, 0, WM_KEYDOWN, WM_KEYDOWN, PM_REMOVE); - ok(ret && msg.message == WM_KEYDOWN && msg.wParam == 'N', - "got %d and %04x wParam %08lx instead of TRUE and WM_KEYDOWN wParam 'N'\n", - ret, msg.message, msg.wParam); - ok_sequence(WmKeyDownSkippedSeq, "WmKeyDownSkippedSeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_POSTMESSAGE|QS_KEY), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - if (qs_all_input & QS_RAWINPUT) /* use QS_RAWINPUT only if supported */ - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | (QS_RAWINPUT << 16)); - else /* workaround for a missing QS_RAWINPUT support */ - ret = PeekMessageA(&msg, 0, WM_KEYUP, WM_KEYUP, PM_REMOVE); - ok(ret && msg.message == WM_KEYUP && msg.wParam == 'N', - "got %d and %04x wParam %08lx instead of TRUE and WM_KEYUP wParam 'N'\n", - ret, msg.message, msg.wParam); - ok_sequence(WmKeyUpSkippedSeq, "WmKeyUpSkippedSeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_POSTMESSAGE), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_POSTMESSAGE), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok(ret && msg.message == WM_CHAR && msg.wParam == 'z', - "got %d and %04x wParam %08lx instead of TRUE and WM_CHAR wParam 'z'\n", - ret, msg.message, msg.wParam); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == 0, - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == 0, - "wrong qstatus %08x\n", qstatus); - - /* test whether presence of the quit flag in the queue affects - * the queue state - */ - PostQuitMessage(0x1234abcd); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE), - "wrong qstatus %08x\n", qstatus); - - PostMessageA(info.hwnd, WM_USER, 0, 0); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok(ret && msg.message == WM_USER, - "got %d and %04x instead of TRUE and WM_USER\n", ret, msg.message); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(0, QS_POSTMESSAGE), - "wrong qstatus %08x\n", qstatus); - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok(ret && msg.message == WM_QUIT, - "got %d and %04x instead of TRUE and WM_QUIT\n", ret, msg.message); - ok(msg.wParam == 0x1234abcd, "got wParam %08lx instead of 0x1234abcd\n", msg.wParam); - ok(msg.lParam == 0, "got lParam %08lx instead of 0\n", msg.lParam); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); -todo_wine { - ok(qstatus == MAKELONG(0, QS_POSTMESSAGE), - "wrong qstatus %08x\n", qstatus); -} - - msg.message = 0; - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok(!ret, - "PeekMessageA should have returned FALSE instead of msg %04x\n", - msg.message); - ok_sequence(WmEmptySeq, "WmEmptySeq", FALSE); - - qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == 0, - "wrong qstatus %08x\n", qstatus); - - trace("signalling to exit\n"); - SetEvent(info.hevent[EV_START_STOP]); - - WaitForSingleObject(hthread, INFINITE); - - CloseHandle(hthread); - CloseHandle(info.hevent[0]); - CloseHandle(info.hevent[1]); - CloseHandle(info.hevent[2]); - - DestroyWindow(info.hwnd); -} - -static void wait_move_event(HWND hwnd, int x, int y) -{ - MSG msg; - DWORD time; - BOOL ret; - int go = 0; - - time = GetTickCount(); - while (GetTickCount() - time < 200 && !go) { - ret = PeekMessageA(&msg, hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_NOREMOVE); - go = ret && msg.pt.x > x && msg.pt.y > y; - } -} - -#define STEP 20 -static void test_PeekMessage2(void) -{ - HWND hwnd; - BOOL ret; - MSG msg; - UINT message; - DWORD time1, time2, time3; - int x1, y1, x2, y2, x3, y3; - POINT pos; - - time1 = time2 = time3 = 0; - x1 = y1 = x2 = y2 = x3 = y3 = 0; - - /* Initialise window and make sure it is ready for events */ - hwnd = CreateWindow("TestWindowClass", "PeekMessage2", WS_OVERLAPPEDWINDOW, - 10, 10, 800, 800, NULL, NULL, NULL, NULL); - assert(hwnd); - trace("Window for test_PeekMessage2 %p\n", hwnd); - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - SetFocus(hwnd); - GetCursorPos(&pos); - SetCursorPos(100, 100); - mouse_event(MOUSEEVENTF_MOVE, -STEP, -STEP, 0, 0); - flush_events(); - - /* Do initial mousemove, wait until we can see it - and then do our test peek with PM_NOREMOVE. */ - mouse_event(MOUSEEVENTF_MOVE, STEP, STEP, 0, 0); - wait_move_event(hwnd, 80, 80); - - ret = PeekMessageA(&msg, hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_NOREMOVE); - ok(ret, "no message available\n"); - if (ret) { - trace("1st move event: %04x %x %d %d\n", msg.message, msg.time, msg.pt.x, msg.pt.y); - message = msg.message; - time1 = msg.time; - x1 = msg.pt.x; - y1 = msg.pt.y; - ok(message == WM_MOUSEMOVE, "message not WM_MOUSEMOVE, %04x instead\n", message); - } - - /* Allow time to advance a bit, and then simulate the user moving their - * mouse around. After that we peek again with PM_NOREMOVE. - * Although the previous mousemove message was never removed, the - * mousemove we now peek should reflect the recent mouse movements - * because the input queue will merge the move events. */ - Sleep(2); - mouse_event(MOUSEEVENTF_MOVE, STEP, STEP, 0, 0); - wait_move_event(hwnd, x1, y1); - - ret = PeekMessageA(&msg, hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_NOREMOVE); - ok(ret, "no message available\n"); - if (ret) { - trace("2nd move event: %04x %x %d %d\n", msg.message, msg.time, msg.pt.x, msg.pt.y); - message = msg.message; - time2 = msg.time; - x2 = msg.pt.x; - y2 = msg.pt.y; - ok(message == WM_MOUSEMOVE, "message not WM_MOUSEMOVE, %04x instead\n", message); - ok(time2 > time1, "message time not advanced: %x %x\n", time1, time2); - ok(x2 != x1 && y2 != y1, "coords not changed: (%d %d) (%d %d)\n", x1, y1, x2, y2); - } - - /* Have another go, to drive the point home */ - Sleep(2); - mouse_event(MOUSEEVENTF_MOVE, STEP, STEP, 0, 0); - wait_move_event(hwnd, x2, y2); - - ret = PeekMessageA(&msg, hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_NOREMOVE); - ok(ret, "no message available\n"); - if (ret) { - trace("3rd move event: %04x %x %d %d\n", msg.message, msg.time, msg.pt.x, msg.pt.y); - message = msg.message; - time3 = msg.time; - x3 = msg.pt.x; - y3 = msg.pt.y; - ok(message == WM_MOUSEMOVE, "message not WM_MOUSEMOVE, %04x instead\n", message); - ok(time3 > time2, "message time not advanced: %x %x\n", time2, time3); - ok(x3 != x2 && y3 != y2, "coords not changed: (%d %d) (%d %d)\n", x2, y2, x3, y3); - } - - DestroyWindow(hwnd); - SetCursorPos(pos.x, pos.y); - flush_events(); -} - -static void test_quit_message(void) -{ - MSG msg; - BOOL ret; - - /* test using PostQuitMessage */ - PostQuitMessage(0xbeef); - - ret = PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); - ok(ret, "PeekMessage failed with error %d\n", GetLastError()); - ok(msg.message == WM_QUIT, "Received message 0x%04x instead of WM_QUIT\n", msg.message); - ok(msg.wParam == 0xbeef, "wParam was 0x%lx instead of 0xbeef\n", msg.wParam); - - ret = PostThreadMessage(GetCurrentThreadId(), WM_USER, 0, 0); - ok(ret, "PostMessage failed with error %d\n", GetLastError()); - - ret = GetMessage(&msg, NULL, 0, 0); - ok(ret > 0, "GetMessage failed with error %d\n", GetLastError()); - ok(msg.message == WM_USER, "Received message 0x%04x instead of WM_USER\n", msg.message); - - /* note: WM_QUIT message received after WM_USER message */ - ret = GetMessage(&msg, NULL, 0, 0); - ok(!ret, "GetMessage return %d with error %d instead of FALSE\n", ret, GetLastError()); - ok(msg.message == WM_QUIT, "Received message 0x%04x instead of WM_QUIT\n", msg.message); - ok(msg.wParam == 0xbeef, "wParam was 0x%lx instead of 0xbeef\n", msg.wParam); - - ret = PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); - ok( !ret || msg.message != WM_QUIT, "Received WM_QUIT again\n" ); - - /* now test with PostThreadMessage - different behaviour! */ - PostThreadMessage(GetCurrentThreadId(), WM_QUIT, 0xdead, 0); - - ret = PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); - ok(ret, "PeekMessage failed with error %d\n", GetLastError()); - ok(msg.message == WM_QUIT, "Received message 0x%04x instead of WM_QUIT\n", msg.message); - ok(msg.wParam == 0xdead, "wParam was 0x%lx instead of 0xdead\n", msg.wParam); - - ret = PostThreadMessage(GetCurrentThreadId(), WM_USER, 0, 0); - ok(ret, "PostMessage failed with error %d\n", GetLastError()); - - /* note: we receive the WM_QUIT message first this time */ - ret = GetMessage(&msg, NULL, 0, 0); - ok(!ret, "GetMessage return %d with error %d instead of FALSE\n", ret, GetLastError()); - ok(msg.message == WM_QUIT, "Received message 0x%04x instead of WM_QUIT\n", msg.message); - ok(msg.wParam == 0xdead, "wParam was 0x%lx instead of 0xdead\n", msg.wParam); - - ret = GetMessage(&msg, NULL, 0, 0); - ok(ret > 0, "GetMessage failed with error %d\n", GetLastError()); - ok(msg.message == WM_USER, "Received message 0x%04x instead of WM_USER\n", msg.message); -} - -static const struct message WmMouseHoverSeq[] = { - { WM_MOUSEACTIVATE, sent|optional }, /* we can get those when moving the mouse in focus-follow-mouse mode under X11 */ - { WM_MOUSEACTIVATE, sent|optional }, - { WM_TIMER, sent|optional }, /* XP sends it */ - { WM_SYSTIMER, sent }, - { WM_MOUSEHOVER, sent|wparam, 0 }, - { 0 } -}; - -static void pump_msg_loop_timeout(DWORD timeout, BOOL inject_mouse_move) -{ - MSG msg; - DWORD start_ticks, end_ticks; - - start_ticks = GetTickCount(); - /* add some deviation (5%) to cover not expected delays */ - start_ticks += timeout / 20; - - do - { - while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) - { - /* Timer proc messages are not dispatched to the window proc, - * and therefore not logged. - */ - if (msg.message == WM_TIMER || msg.message == WM_SYSTIMER) - { - struct message s_msg; - - s_msg.message = msg.message; - s_msg.flags = sent|wparam|lparam; - s_msg.wParam = msg.wParam; - s_msg.lParam = msg.lParam; - add_message(&s_msg); - } - DispatchMessage(&msg); - } - - end_ticks = GetTickCount(); - - /* inject WM_MOUSEMOVE to see how it changes tracking */ - if (inject_mouse_move && start_ticks + timeout / 2 >= end_ticks) - { - mouse_event(MOUSEEVENTF_MOVE, -1, 0, 0, 0); - mouse_event(MOUSEEVENTF_MOVE, 1, 0, 0, 0); - - inject_mouse_move = FALSE; - } - } while (start_ticks + timeout >= end_ticks); -} - -static void test_TrackMouseEvent(void) -{ - TRACKMOUSEEVENT tme; - BOOL ret; - HWND hwnd, hchild; - RECT rc_parent, rc_child; - UINT default_hover_time, hover_width = 0, hover_height = 0; - -#define track_hover(track_hwnd, track_hover_time) \ - tme.cbSize = sizeof(tme); \ - tme.dwFlags = TME_HOVER; \ - tme.hwndTrack = track_hwnd; \ - tme.dwHoverTime = track_hover_time; \ - SetLastError(0xdeadbeef); \ - ret = pTrackMouseEvent(&tme); \ - ok(ret, "TrackMouseEvent(TME_HOVER) error %d\n", GetLastError()) - -#define track_query(expected_track_flags, expected_track_hwnd, expected_hover_time) \ - tme.cbSize = sizeof(tme); \ - tme.dwFlags = TME_QUERY; \ - tme.hwndTrack = (HWND)0xdeadbeef; \ - tme.dwHoverTime = 0xdeadbeef; \ - SetLastError(0xdeadbeef); \ - ret = pTrackMouseEvent(&tme); \ - ok(ret, "TrackMouseEvent(TME_QUERY) error %d\n", GetLastError());\ - ok(tme.cbSize == sizeof(tme), "wrong tme.cbSize %u\n", tme.cbSize); \ - ok(tme.dwFlags == (expected_track_flags), \ - "wrong tme.dwFlags %08x, expected %08x\n", tme.dwFlags, (expected_track_flags)); \ - ok(tme.hwndTrack == (expected_track_hwnd), \ - "wrong tme.hwndTrack %p, expected %p\n", tme.hwndTrack, (expected_track_hwnd)); \ - ok(tme.dwHoverTime == (expected_hover_time), \ - "wrong tme.dwHoverTime %u, expected %u\n", tme.dwHoverTime, (expected_hover_time)) - -#define track_hover_cancel(track_hwnd) \ - tme.cbSize = sizeof(tme); \ - tme.dwFlags = TME_HOVER | TME_CANCEL; \ - tme.hwndTrack = track_hwnd; \ - tme.dwHoverTime = 0xdeadbeef; \ - SetLastError(0xdeadbeef); \ - ret = pTrackMouseEvent(&tme); \ - ok(ret, "TrackMouseEvent(TME_HOVER | TME_CANCEL) error %d\n", GetLastError()) - - default_hover_time = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = SystemParametersInfo(SPI_GETMOUSEHOVERTIME, 0, &default_hover_time, 0); - ok(ret, "SystemParametersInfo(SPI_GETMOUSEHOVERTIME) error %u\n", GetLastError()); - if (!ret) default_hover_time = 400; - trace("SPI_GETMOUSEHOVERTIME returned %u ms\n", default_hover_time); - - SetLastError(0xdeadbeef); - ret = SystemParametersInfo(SPI_GETMOUSEHOVERWIDTH, 0, &hover_width, 0); - ok(ret, "SystemParametersInfo(SPI_GETMOUSEHOVERWIDTH) error %u\n", GetLastError()); - if (!ret) hover_width = 4; - SetLastError(0xdeadbeef); - ret = SystemParametersInfo(SPI_GETMOUSEHOVERHEIGHT, 0, &hover_height, 0); - ok(ret, "SystemParametersInfo(SPI_GETMOUSEHOVERHEIGHT) error %u\n", GetLastError()); - if (!ret) hover_height = 4; - trace("hover rect is %u x %d\n", hover_width, hover_height); - - hwnd = CreateWindowEx(0, "TestWindowClass", NULL, - WS_OVERLAPPEDWINDOW | WS_VISIBLE, - CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0, - NULL, NULL, 0); - assert(hwnd); - - hchild = CreateWindowEx(0, "TestWindowClass", NULL, - WS_CHILD | WS_BORDER | WS_VISIBLE, - 50, 50, 200, 200, hwnd, - NULL, NULL, 0); - assert(hchild); - - flush_events(); - flush_sequence(); - - tme.cbSize = 0; - tme.dwFlags = TME_QUERY; - tme.hwndTrack = (HWND)0xdeadbeef; - tme.dwHoverTime = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pTrackMouseEvent(&tme); - ok(!ret, "TrackMouseEvent should fail\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "not expected error %d\n", GetLastError()); - - tme.cbSize = sizeof(tme); - tme.dwFlags = TME_HOVER; - tme.hwndTrack = (HWND)0xdeadbeef; - tme.dwHoverTime = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pTrackMouseEvent(&tme); - ok(!ret, "TrackMouseEvent should fail\n"); - ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "not expected error %d\n", GetLastError()); - - tme.cbSize = sizeof(tme); - tme.dwFlags = TME_HOVER | TME_CANCEL; - tme.hwndTrack = (HWND)0xdeadbeef; - tme.dwHoverTime = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = pTrackMouseEvent(&tme); - ok(!ret, "TrackMouseEvent should fail\n"); - ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "not expected error %d\n", GetLastError()); - - GetWindowRect(hwnd, &rc_parent); - GetWindowRect(hchild, &rc_child); - SetCursorPos(rc_child.left - 10, rc_child.top - 10); - - /* Process messages so that the system updates its internal current - * window and hittest, otherwise TrackMouseEvent calls don't have any - * effect. - */ - flush_events(); - flush_sequence(); - - track_query(0, NULL, 0); - track_hover(hchild, 0); - track_query(0, NULL, 0); - - flush_events(); - flush_sequence(); - - track_hover(hwnd, 0); - track_query(TME_HOVER, hwnd, default_hover_time); - - pump_msg_loop_timeout(default_hover_time, FALSE); - ok_sequence(WmMouseHoverSeq, "WmMouseHoverSeq", FALSE); - - track_query(0, NULL, 0); - - track_hover(hwnd, HOVER_DEFAULT); - track_query(TME_HOVER, hwnd, default_hover_time); - - Sleep(default_hover_time / 2); - mouse_event(MOUSEEVENTF_MOVE, -1, 0, 0, 0); - mouse_event(MOUSEEVENTF_MOVE, 1, 0, 0, 0); - - track_query(TME_HOVER, hwnd, default_hover_time); - - pump_msg_loop_timeout(default_hover_time / 2, FALSE); - ok_sequence(WmMouseHoverSeq, "WmMouseHoverSeq", FALSE); - - track_query(0, NULL, 0); - - track_hover(hwnd, HOVER_DEFAULT); - track_query(TME_HOVER, hwnd, default_hover_time); - - pump_msg_loop_timeout(default_hover_time, TRUE); - ok_sequence(WmMouseHoverSeq, "WmMouseHoverSeq", FALSE); - - track_query(0, NULL, 0); - - track_hover(hwnd, HOVER_DEFAULT); - track_query(TME_HOVER, hwnd, default_hover_time); - track_hover_cancel(hwnd); - - DestroyWindow(hwnd); - -#undef track_hover -#undef track_query -#undef track_hover_cancel -} - - -static const struct message WmSetWindowRgn[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_NCPAINT, sent }, /* wparam != 1 */ - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, /* FIXME: remove optional once Wine is fixed */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message WmSetWindowRgn_no_redraw[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; - -static const struct message WmSetWindowRgn_clear[] = { - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_NCCALCSIZE, sent|wparam, 1 }, - { WM_NCPAINT, sent }, /* wparam != 1 */ - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, /* FIXME: remove optional once Wine is fixed */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE }, - { WM_NCCALCSIZE, sent|wparam|optional, 1 }, - { WM_NCPAINT, sent|optional }, /* wparam != 1 */ - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ERASEBKGND, sent|optional }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, - { 0 } -}; - -static void test_SetWindowRgn(void) -{ - HRGN hrgn; - HWND hwnd = CreateWindowExA(0, "TestWindowClass", "Test overlapped", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok( hwnd != 0, "Failed to create overlapped window\n" ); - - ShowWindow( hwnd, SW_SHOW ); - UpdateWindow( hwnd ); - flush_events(); - flush_sequence(); - - trace("testing SetWindowRgn\n"); - hrgn = CreateRectRgn( 0, 0, 150, 150 ); - SetWindowRgn( hwnd, hrgn, TRUE ); - ok_sequence( WmSetWindowRgn, "WmSetWindowRgn", FALSE ); - - hrgn = CreateRectRgn( 30, 30, 160, 160 ); - SetWindowRgn( hwnd, hrgn, FALSE ); - ok_sequence( WmSetWindowRgn_no_redraw, "WmSetWindowRgn_no_redraw", FALSE ); - - hrgn = CreateRectRgn( 0, 0, 180, 180 ); - SetWindowRgn( hwnd, hrgn, TRUE ); - ok_sequence( WmSetWindowRgn, "WmSetWindowRgn2", FALSE ); - - SetWindowRgn( hwnd, 0, TRUE ); - ok_sequence( WmSetWindowRgn_clear, "WmSetWindowRgn_clear", FALSE ); - - DestroyWindow( hwnd ); -} - -/*************************** ShowWindow() test ******************************/ -static const struct message WmShowNormal[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { HCBT_ACTIVATE, hook }, - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2003 doesn't send it */ - { HCBT_SETFOCUS, hook }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -static const struct message WmShow[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { HCBT_ACTIVATE, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2000 doesn't send it */ - { HCBT_SETFOCUS, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -static const struct message WmShowNoActivate_1[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWNOACTIVATE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED }, - { 0 } -}; -static const struct message WmShowNoActivate_2[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWNOACTIVATE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED }, - { HCBT_SETFOCUS, hook|optional }, - { HCBT_ACTIVATE, hook|optional }, /* win2003 doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2003 doesn't send it */ - { HCBT_SETFOCUS, hook|optional }, /* win2003 doesn't send it */ - { 0 } -}; -static const struct message WmShowNA_1[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -static const struct message WmShowNA_2[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { 0 } -}; -static const struct message WmRestore_1[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_RESTORE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { HCBT_ACTIVATE, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2000 doesn't send it */ - { HCBT_SETFOCUS, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED }, - { HCBT_SETFOCUS, hook|optional }, /* win2000 sends it */ - { 0 } -}; -static const struct message WmRestore_2[] = { - { WM_SHOWWINDOW, sent|wparam, 1 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { HCBT_ACTIVATE, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2000 doesn't send it */ - { HCBT_SETFOCUS, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -static const struct message WmRestore_3[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_RESTORE }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { HCBT_ACTIVATE, hook|optional }, /* win2003 doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2003 doesn't send it */ - { HCBT_SETFOCUS, hook|optional }, /* win2003 doesn't send it */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_MAXIMIZED }, - { HCBT_SETFOCUS, hook|optional }, /* win2003 sends it */ - { 0 } -}; -static const struct message WmRestore_4[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_RESTORE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED }, - { 0 } -}; -static const struct message WmRestore_5[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWNORMAL }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED }, - { 0 } -}; -static const struct message WmHide_1[] = { - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { HCBT_SETFOCUS, hook|optional }, /* win2000 sends it */ - { 0 } -}; -static const struct message WmHide_2[] = { - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent /*|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE*/ }, /* win2000 doesn't add SWP_NOACTIVATE */ - { WM_WINDOWPOSCHANGED, sent /*|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE*/ }, /* win2000 doesn't add SWP_NOACTIVATE */ - { 0 } -}; -static const struct message WmHide_3[] = { - { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { HCBT_SETFOCUS, hook }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { 0 } -}; -static const struct message WmShowMinimized_1[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINIMIZED }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { HCBT_ACTIVATE, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_MINIMIZED }, - { 0 } -}; -static const struct message WmMinimize_1[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE }, - { HCBT_SETFOCUS, hook|optional }, /* win2000 doesn't send it */ - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_MINIMIZED }, - { 0 } -}; -static const struct message WmMinimize_2[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_MINIMIZED }, - { 0 } -}; -static const struct message WmMinimize_3[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_MINIMIZED }, - { 0 } -}; -static const struct message WmShowMinNoActivate[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINNOACTIVE }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { 0 } -}; -static const struct message WmMinMax_1[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINIMIZED }, - { 0 } -}; -static const struct message WmMinMax_2[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMAXIMIZED }, - { 0 } -}; -static const struct message WmMinMax_3[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE }, - { 0 } -}; -static const struct message WmMinMax_4[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINNOACTIVE }, - { 0 } -}; -static const struct message WmShowMaximized_1[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMAXIMIZED }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { HCBT_ACTIVATE, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2000 doesn't send it */ - { HCBT_SETFOCUS, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_MAXIMIZED }, - { HCBT_SETFOCUS, hook|optional }, /* win2003 sends it */ - { 0 } -}; -static const struct message WmShowMaximized_2[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMAXIMIZED }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, - { WM_MOVE, sent|optional }, /* Win9x doesn't send it */ - { WM_SIZE, sent|wparam|optional, SIZE_MAXIMIZED }, /* Win9x doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_MAXIMIZED }, - { HCBT_SETFOCUS, hook }, - { 0 } -}; -static const struct message WmShowMaximized_3[] = { - { HCBT_MINMAX, hook|lparam, 0, SW_SHOWMAXIMIZED }, - { WM_GETMINMAXINFO, sent }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { HCBT_ACTIVATE, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2000 doesn't send it */ - { HCBT_SETFOCUS, hook|optional }, /* win2000 doesn't send it */ - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED }, - { WM_MOVE, sent|defwinproc }, - { WM_SIZE, sent|wparam|defwinproc, SIZE_MAXIMIZED }, - { 0 } -}; - -static void test_ShowWindow(void) -{ - /* ShowWindow commands in random order */ - static const struct - { - INT cmd; /* ShowWindow command */ - LPARAM ret; /* ShowWindow return value */ - DWORD style; /* window style after the command */ - const struct message *msg; /* message sequence the command produces */ - BOOL todo_msg; /* message sequence doesn't match what Wine does */ - } sw[] = - { -/* 1 */ { SW_SHOWNORMAL, FALSE, WS_VISIBLE, WmShowNormal, FALSE }, -/* 2 */ { SW_SHOWNORMAL, TRUE, WS_VISIBLE, WmEmptySeq, FALSE }, -/* 3 */ { SW_HIDE, TRUE, 0, WmHide_1, FALSE }, -/* 4 */ { SW_HIDE, FALSE, 0, WmEmptySeq, FALSE }, -/* 5 */ { SW_SHOWMINIMIZED, FALSE, WS_VISIBLE|WS_MINIMIZE, WmShowMinimized_1, FALSE }, -/* 6 */ { SW_SHOWMINIMIZED, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinMax_1, FALSE }, -/* 7 */ { SW_HIDE, TRUE, WS_MINIMIZE, WmHide_1, FALSE }, -/* 8 */ { SW_HIDE, FALSE, WS_MINIMIZE, WmEmptySeq, FALSE }, -/* 9 */ { SW_SHOWMAXIMIZED, FALSE, WS_VISIBLE|WS_MAXIMIZE, WmShowMaximized_1, FALSE }, -/* 10 */ { SW_SHOWMAXIMIZED, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmMinMax_2, FALSE }, -/* 11 */ { SW_HIDE, TRUE, WS_MAXIMIZE, WmHide_1, FALSE }, -/* 12 */ { SW_HIDE, FALSE, WS_MAXIMIZE, WmEmptySeq, FALSE }, -/* 13 */ { SW_SHOWNOACTIVATE, FALSE, WS_VISIBLE, WmShowNoActivate_1, FALSE }, -/* 14 */ { SW_SHOWNOACTIVATE, TRUE, WS_VISIBLE, WmEmptySeq, FALSE }, -/* 15 */ { SW_HIDE, TRUE, 0, WmHide_2, FALSE }, -/* 16 */ { SW_HIDE, FALSE, 0, WmEmptySeq, FALSE }, -/* 17 */ { SW_SHOW, FALSE, WS_VISIBLE, WmShow, FALSE }, -/* 18 */ { SW_SHOW, TRUE, WS_VISIBLE, WmEmptySeq, FALSE }, -/* 19 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinimize_1, FALSE }, -/* 20 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinMax_3, FALSE }, -/* 21 */ { SW_HIDE, TRUE, WS_MINIMIZE, WmHide_2, FALSE }, -/* 22 */ { SW_SHOWMINNOACTIVE, FALSE, WS_VISIBLE|WS_MINIMIZE, WmShowMinNoActivate, TRUE }, -/* 23 */ { SW_SHOWMINNOACTIVE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinMax_4, FALSE }, -/* 24 */ { SW_HIDE, TRUE, WS_MINIMIZE, WmHide_2, FALSE }, -/* 25 */ { SW_HIDE, FALSE, WS_MINIMIZE, WmEmptySeq, FALSE }, -/* 26 */ { SW_SHOWNA, FALSE, WS_VISIBLE|WS_MINIMIZE, WmShowNA_1, FALSE }, -/* 27 */ { SW_SHOWNA, TRUE, WS_VISIBLE|WS_MINIMIZE, WmShowNA_2, FALSE }, -/* 28 */ { SW_HIDE, TRUE, WS_MINIMIZE, WmHide_2, FALSE }, -/* 29 */ { SW_HIDE, FALSE, WS_MINIMIZE, WmEmptySeq, FALSE }, -/* 30 */ { SW_RESTORE, FALSE, WS_VISIBLE, WmRestore_1, FALSE }, -/* 31 */ { SW_RESTORE, TRUE, WS_VISIBLE, WmEmptySeq, FALSE }, -/* 32 */ { SW_HIDE, TRUE, 0, WmHide_3, TRUE }, -/* 33 */ { SW_HIDE, FALSE, 0, WmEmptySeq, FALSE }, -/* 34 */ { SW_NORMALNA, FALSE, 0, WmEmptySeq, FALSE }, /* what does this mean?! */ -/* 35 */ { SW_NORMALNA, FALSE, 0, WmEmptySeq, FALSE }, -/* 36 */ { SW_HIDE, FALSE, 0, WmEmptySeq, FALSE }, -/* 37 */ { SW_RESTORE, FALSE, WS_VISIBLE, WmRestore_2, FALSE }, -/* 38 */ { SW_RESTORE, TRUE, WS_VISIBLE, WmEmptySeq, FALSE }, -/* 39 */ { SW_SHOWNOACTIVATE, TRUE, WS_VISIBLE, WmEmptySeq, FALSE }, -/* 40 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinimize_2, FALSE }, -/* 41 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinMax_3, FALSE }, -/* 42 */ { SW_SHOWMAXIMIZED, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmShowMaximized_2, TRUE }, -/* 43 */ { SW_SHOWMAXIMIZED, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmMinMax_2, FALSE }, -/* 44 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinimize_1, FALSE }, -/* 45 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinMax_3, FALSE }, -/* 46 */ { SW_RESTORE, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmRestore_3, FALSE }, -/* 47 */ { SW_RESTORE, TRUE, WS_VISIBLE, WmRestore_4, FALSE }, -/* 48 */ { SW_SHOWMAXIMIZED, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmShowMaximized_3, FALSE }, -/* 49 */ { SW_SHOW, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmEmptySeq, FALSE }, -/* 50 */ { SW_SHOWNORMAL, TRUE, WS_VISIBLE, WmRestore_5, FALSE }, -/* 51 */ { SW_SHOWNORMAL, TRUE, WS_VISIBLE, WmEmptySeq, FALSE }, -/* 52 */ { SW_HIDE, TRUE, 0, WmHide_1, FALSE }, -/* 53 */ { SW_HIDE, FALSE, 0, WmEmptySeq, FALSE }, -/* 54 */ { SW_MINIMIZE, FALSE, WS_VISIBLE|WS_MINIMIZE, WmMinimize_3, FALSE }, -/* 55 */ { SW_HIDE, TRUE, WS_MINIMIZE, WmHide_2, FALSE }, -/* 56 */ { SW_SHOWNOACTIVATE, FALSE, WS_VISIBLE, WmShowNoActivate_2, FALSE }, -/* 57 */ { SW_SHOW, TRUE, WS_VISIBLE, WmEmptySeq, FALSE } - }; - HWND hwnd; - DWORD style; - LPARAM ret; - INT i; - -#define WS_BASE (WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_POPUP|WS_CLIPSIBLINGS) - hwnd = CreateWindowEx(0, "ShowWindowClass", NULL, WS_BASE, - 120, 120, 90, 90, - 0, 0, 0, NULL); - assert(hwnd); - - style = GetWindowLong(hwnd, GWL_STYLE) & ~WS_BASE; - ok(style == 0, "expected style 0, got %08x\n", style); - - flush_events(); - flush_sequence(); - - for (i = 0; i < sizeof(sw)/sizeof(sw[0]); i++) - { - static const char * const sw_cmd_name[13] = - { - "SW_HIDE", "SW_SHOWNORMAL", "SW_SHOWMINIMIZED", "SW_SHOWMAXIMIZED", - "SW_SHOWNOACTIVATE", "SW_SHOW", "SW_MINIMIZE", "SW_SHOWMINNOACTIVE", - "SW_SHOWNA", "SW_RESTORE", "SW_SHOWDEFAULT", "SW_FORCEMINIMIZE", - "SW_NORMALNA" /* 0xCC */ - }; - char comment[64]; - INT idx; /* index into the above array of names */ - - idx = (sw[i].cmd == SW_NORMALNA) ? 12 : sw[i].cmd; - - style = GetWindowLong(hwnd, GWL_STYLE); - trace("%d: sending %s, current window style %08x\n", i+1, sw_cmd_name[idx], style); - ret = ShowWindow(hwnd, sw[i].cmd); - ok(!ret == !sw[i].ret, "%d: cmd %s: expected ret %lu, got %lu\n", i+1, sw_cmd_name[idx], sw[i].ret, ret); - style = GetWindowLong(hwnd, GWL_STYLE) & ~WS_BASE; - ok(style == sw[i].style, "%d: expected style %08x, got %08x\n", i+1, sw[i].style, style); - - sprintf(comment, "%d: ShowWindow(%s)", i+1, sw_cmd_name[idx]); - ok_sequence(sw[i].msg, comment, sw[i].todo_msg); - - flush_events(); - flush_sequence(); - } - - DestroyWindow(hwnd); -} - -static INT_PTR WINAPI test_dlg_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - struct message msg; - - trace("dialog: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); - - switch (message) - { - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lParam; - - trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - dump_winpos_flags(winpos->flags); - - /* Log only documented flags, win2k uses 0x1000 and 0x2000 - * in the high word for internal purposes - */ - wParam = winpos->flags & 0xffff; - /* We are not interested in the flags that don't match under XP and Win9x */ - wParam &= ~(SWP_NOZORDER); - break; - } - - /* explicitly ignore WM_GETICON message */ - case WM_GETICON: - return 0; - } - - msg.message = message; - msg.flags = sent|wparam|lparam; - msg.wParam = wParam; - msg.lParam = lParam; - add_message(&msg); - - /* calling DefDlgProc leads to a recursion under XP */ - - switch (message) - { - case WM_INITDIALOG: - case WM_GETDLGCODE: - return 0; - } - return 1; -} - -static const struct message WmDefDlgSetFocus_1[] = { - { WM_GETDLGCODE, sent|wparam|lparam, 0, 0 }, - { WM_GETTEXTLENGTH, sent|wparam|lparam|optional, 0, 0 }, /* XP */ - { WM_GETTEXT, sent|wparam|optional, 6 }, /* XP */ - { WM_GETTEXT, sent|wparam|optional, 12 }, /* XP */ - { EM_SETSEL, sent|wparam, 0 }, /* XP sets lparam to text length, Win9x to -2 */ - { HCBT_SETFOCUS, hook }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|wparam, 0 }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 10 }, - { WM_CTLCOLOREDIT, sent }, - { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 11 }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { WM_COMMAND, sent|wparam, MAKEWPARAM(1, EN_SETFOCUS) }, - { 0 } -}; -static const struct message WmDefDlgSetFocus_2[] = { - { WM_GETDLGCODE, sent|wparam|lparam, 0, 0 }, - { WM_GETTEXTLENGTH, sent|wparam|lparam|optional, 0, 0 }, /* XP */ - { WM_GETTEXT, sent|wparam|optional, 6 }, /* XP */ - { WM_GETTEXT, sent|wparam|optional, 12 }, /* XP */ - { EM_SETSEL, sent|wparam, 0 }, /* XP sets lparam to text length, Win9x to -2 */ - { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { WM_CTLCOLOREDIT, sent|optional }, /* XP */ - { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, OBJID_CARET, 0 }, - { 0 } -}; -/* Creation of a dialog */ -static const struct message WmCreateDialogParamSeq_1[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { WM_SETFONT, sent }, - { WM_INITDIALOG, sent }, - { WM_CHANGEUISTATE, sent|optional }, - { 0 } -}; -/* Creation of a dialog */ -static const struct message WmCreateDialogParamSeq_2[] = { - { HCBT_CREATEWND, hook }, - { WM_NCCREATE, sent }, - { WM_NCCALCSIZE, sent|wparam, 0 }, - { WM_CREATE, sent }, - { EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 }, - { WM_SIZE, sent|wparam, SIZE_RESTORED }, - { WM_MOVE, sent }, - { WM_CHANGEUISTATE, sent|optional }, - { 0 } -}; - -static void test_dialog_messages(void) -{ - WNDCLASS cls; - HWND hdlg, hedit1, hedit2, hfocus; - LRESULT ret; - -#define set_selection(hctl, start, end) \ - ret = SendMessage(hctl, EM_SETSEL, start, end); \ - ok(ret == 1, "EM_SETSEL returned %ld\n", ret); - -#define check_selection(hctl, start, end) \ - ret = SendMessage(hctl, EM_GETSEL, 0, 0); \ - ok(ret == MAKELRESULT(start, end), "wrong selection (%d - %d)\n", LOWORD(ret), HIWORD(ret)); - - subclass_edit(); - - hdlg = CreateWindowEx(WS_EX_DLGMODALFRAME, "TestDialogClass", NULL, - WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_DLGFRAME, - 0, 0, 100, 100, 0, 0, 0, NULL); - ok(hdlg != 0, "Failed to create custom dialog window\n"); - - hedit1 = CreateWindowEx(0, "my_edit_class", NULL, - WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP, - 0, 0, 80, 20, hdlg, (HMENU)1, 0, NULL); - ok(hedit1 != 0, "Failed to create edit control\n"); - hedit2 = CreateWindowEx(0, "my_edit_class", NULL, - WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP, - 0, 40, 80, 20, hdlg, (HMENU)2, 0, NULL); - ok(hedit2 != 0, "Failed to create edit control\n"); - - SendMessage(hedit1, WM_SETTEXT, 0, (LPARAM)"hello"); - SendMessage(hedit2, WM_SETTEXT, 0, (LPARAM)"bye"); - - hfocus = GetFocus(); - ok(hfocus == hdlg, "wrong focus %p\n", hfocus); - - SetFocus(hedit2); - hfocus = GetFocus(); - ok(hfocus == hedit2, "wrong focus %p\n", hfocus); - - check_selection(hedit1, 0, 0); - check_selection(hedit2, 0, 0); - - set_selection(hedit2, 0, -1); - check_selection(hedit2, 0, 3); - - SetFocus(0); - hfocus = GetFocus(); - ok(hfocus == 0, "wrong focus %p\n", hfocus); - - flush_sequence(); - ret = DefDlgProc(hdlg, WM_SETFOCUS, 0, 0); - ok(ret == 0, "WM_SETFOCUS returned %ld\n", ret); - ok_sequence(WmDefDlgSetFocus_1, "DefDlgProc(WM_SETFOCUS) 1", FALSE); - - hfocus = GetFocus(); - ok(hfocus == hedit1, "wrong focus %p\n", hfocus); - - check_selection(hedit1, 0, 5); - check_selection(hedit2, 0, 3); - - flush_sequence(); - ret = DefDlgProc(hdlg, WM_SETFOCUS, 0, 0); - ok(ret == 0, "WM_SETFOCUS returned %ld\n", ret); - ok_sequence(WmDefDlgSetFocus_2, "DefDlgProc(WM_SETFOCUS) 2", FALSE); - - hfocus = GetFocus(); - ok(hfocus == hedit1, "wrong focus %p\n", hfocus); - - check_selection(hedit1, 0, 5); - check_selection(hedit2, 0, 3); - - EndDialog(hdlg, 0); - DestroyWindow(hedit1); - DestroyWindow(hedit2); - DestroyWindow(hdlg); - flush_sequence(); - -#undef set_selection -#undef check_selection - - ok(GetClassInfo(0, "#32770", &cls), "GetClassInfo failed\n"); - cls.lpszClassName = "MyDialogClass"; - cls.hInstance = GetModuleHandle(0); - /* need a cast since a dlgproc is used as a wndproc */ - cls.lpfnWndProc = (WNDPROC)test_dlg_proc; - if (!RegisterClass(&cls)) assert(0); - - hdlg = CreateDialogParam(0, "CLASS_TEST_DIALOG_2", 0, test_dlg_proc, 0); - ok(IsWindow(hdlg), "CreateDialogParam failed\n"); - ok_sequence(WmCreateDialogParamSeq_1, "CreateDialogParam_1", FALSE); - EndDialog(hdlg, 0); - DestroyWindow(hdlg); - flush_sequence(); - - hdlg = CreateDialogParam(0, "CLASS_TEST_DIALOG_2", 0, NULL, 0); - ok(IsWindow(hdlg), "CreateDialogParam failed\n"); - ok_sequence(WmCreateDialogParamSeq_2, "CreateDialogParam_2", FALSE); - EndDialog(hdlg, 0); - DestroyWindow(hdlg); - flush_sequence(); - - UnregisterClass(cls.lpszClassName, cls.hInstance); -} - -static void test_nullCallback(void) -{ - HWND hwnd; - - hwnd = CreateWindowExA(0, "TestWindowClass", "Test overlapped", WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - - SendMessageCallbackA(hwnd,WM_NULL,0,0,NULL,0); - flush_events(); - DestroyWindow(hwnd); -} - -static const struct message SetForegroundWindowSeq[] = -{ - { WM_NCACTIVATE, sent|wparam, 0 }, - { WM_GETTEXT, sent|defwinproc|optional }, - { WM_ACTIVATE, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 0 }, - { WM_KILLFOCUS, sent }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, - { WM_IME_NOTIFY, sent|wparam|optional|defwinproc, 1 }, - { 0 } -}; - -static void test_SetForegroundWindow(void) -{ - HWND hwnd; - - hwnd = CreateWindowExA(0, "TestWindowClass", "Test SetForegroundWindow", - WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - flush_sequence(); - - trace("SetForegroundWindow( 0 )\n"); - SetForegroundWindow( 0 ); - ok_sequence(WmEmptySeq, "SetForegroundWindow( 0 ) away from foreground top level window", FALSE); - trace("SetForegroundWindow( GetDesktopWindow() )\n"); - SetForegroundWindow( GetDesktopWindow() ); - ok_sequence(SetForegroundWindowSeq, "SetForegroundWindow( desktop ) away from " - "foreground top level window", FALSE); - trace("done\n"); - - DestroyWindow(hwnd); -} - -static void test_dbcs_wm_char(void) -{ - BYTE dbch[2]; - WCHAR wch, bad_wch; - HWND hwnd, hwnd2; - MSG msg; - DWORD time; - POINT pt; - DWORD_PTR res; - CPINFOEXA cpinfo; - UINT i, j, k; - struct message wmCharSeq[2]; - - if (!pGetCPInfoExA) - { - skip("GetCPInfoExA is not available\n"); - return; - } - - pGetCPInfoExA( CP_ACP, 0, &cpinfo ); - if (cpinfo.MaxCharSize != 2) - { - skip( "Skipping DBCS WM_CHAR test in SBCS codepage '%s'\n", cpinfo.CodePageName ); - return; - } - - dbch[0] = dbch[1] = 0; - wch = 0; - bad_wch = cpinfo.UnicodeDefaultChar; - for (i = 0; !wch && i < MAX_LEADBYTES && cpinfo.LeadByte[i]; i += 2) - for (j = cpinfo.LeadByte[i]; !wch && j <= cpinfo.LeadByte[i+1]; j++) - for (k = 128; k <= 255; k++) - { - char str[2]; - WCHAR wstr[2]; - str[0] = j; - str[1] = k; - if (MultiByteToWideChar( CP_ACP, 0, str, 2, wstr, 2 ) == 1 && - WideCharToMultiByte( CP_ACP, 0, wstr, 1, str, 2, NULL, NULL ) == 2 && - (BYTE)str[0] == j && (BYTE)str[1] == k && - HIBYTE(wstr[0]) && HIBYTE(wstr[0]) != 0xff) - { - dbch[0] = j; - dbch[1] = k; - wch = wstr[0]; - break; - } - } - - if (!wch) - { - skip( "Skipping DBCS WM_CHAR test, no appropriate char found\n" ); - return; - } - trace( "using dbcs char %02x,%02x wchar %04x bad wchar %04x codepage '%s'\n", - dbch[0], dbch[1], wch, bad_wch, cpinfo.CodePageName ); - - hwnd = CreateWindowExW(0, testWindowClassW, NULL, - WS_OVERLAPPEDWINDOW, 100, 100, 200, 200, 0, 0, 0, NULL); - hwnd2 = CreateWindowExW(0, testWindowClassW, NULL, - WS_OVERLAPPEDWINDOW, 100, 100, 200, 200, 0, 0, 0, NULL); - ok (hwnd != 0, "Failed to create overlapped window\n"); - ok (hwnd2 != 0, "Failed to create overlapped window\n"); - flush_sequence(); - - memset( wmCharSeq, 0, sizeof(wmCharSeq) ); - wmCharSeq[0].message = WM_CHAR; - wmCharSeq[0].flags = sent|wparam; - wmCharSeq[0].wParam = wch; - - /* posted message */ - PostMessageA( hwnd, WM_CHAR, dbch[0], 0 ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - PostMessageA( hwnd, WM_CHAR, dbch[1], 0 ); - ok( PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == wch, "bad wparam %lx/%x\n", msg.wParam, wch ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* posted thread message */ - PostThreadMessageA( GetCurrentThreadId(), WM_CHAR, dbch[0], 0 ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - PostMessageA( hwnd, WM_CHAR, dbch[1], 0 ); - ok( PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == wch, "bad wparam %lx/%x\n", msg.wParam, wch ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* sent message */ - flush_sequence(); - SendMessageA( hwnd, WM_CHAR, dbch[0], 0 ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - SendMessageA( hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* sent message with timeout */ - flush_sequence(); - SendMessageTimeoutA( hwnd, WM_CHAR, dbch[0], 0, SMTO_NORMAL, 0, &res ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - SendMessageTimeoutA( hwnd, WM_CHAR, dbch[1], 0, SMTO_NORMAL, 0, &res ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* sent message with timeout and callback */ - flush_sequence(); - SendMessageTimeoutA( hwnd, WM_CHAR, dbch[0], 0, SMTO_NORMAL, 0, &res ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - SendMessageCallbackA( hwnd, WM_CHAR, dbch[1], 0, NULL, 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* sent message with callback */ - flush_sequence(); - SendNotifyMessageA( hwnd, WM_CHAR, dbch[0], 0 ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - SendMessageCallbackA( hwnd, WM_CHAR, dbch[1], 0, NULL, 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* direct window proc call */ - flush_sequence(); - CallWindowProcA( (WNDPROC)GetWindowLongPtrA( hwnd, GWLP_WNDPROC ), hwnd, WM_CHAR, dbch[0], 0 ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - CallWindowProcA( (WNDPROC)GetWindowLongPtrA( hwnd, GWLP_WNDPROC ), hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - - /* dispatch message */ - msg.hwnd = hwnd; - msg.message = WM_CHAR; - msg.wParam = dbch[0]; - msg.lParam = 0; - DispatchMessageA( &msg ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - msg.wParam = dbch[1]; - DispatchMessageA( &msg ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - - /* window handle is irrelevant */ - flush_sequence(); - SendMessageA( hwnd2, WM_CHAR, dbch[0], 0 ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - SendMessageA( hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* interleaved post and send */ - flush_sequence(); - PostMessageA( hwnd2, WM_CHAR, dbch[0], 0 ); - SendMessageA( hwnd2, WM_CHAR, dbch[0], 0 ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - PostMessageA( hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - ok( PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == wch, "bad wparam %lx/%x\n", msg.wParam, wch ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - SendMessageA( hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* interleaved sent message and winproc */ - flush_sequence(); - SendMessageA( hwnd, WM_CHAR, dbch[0], 0 ); - CallWindowProcA( (WNDPROC)GetWindowLongPtrA( hwnd, GWLP_WNDPROC ), hwnd, WM_CHAR, dbch[0], 0 ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - SendMessageA( hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - CallWindowProcA( (WNDPROC)GetWindowLongPtrA( hwnd, GWLP_WNDPROC ), hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - - /* interleaved winproc and dispatch */ - msg.hwnd = hwnd; - msg.message = WM_CHAR; - msg.wParam = dbch[0]; - msg.lParam = 0; - CallWindowProcA( (WNDPROC)GetWindowLongPtrA( hwnd, GWLP_WNDPROC ), hwnd, WM_CHAR, dbch[0], 0 ); - DispatchMessageA( &msg ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - msg.wParam = dbch[1]; - DispatchMessageA( &msg ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - CallWindowProcA( (WNDPROC)GetWindowLongPtrA( hwnd, GWLP_WNDPROC ), hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - - /* interleaved sends */ - flush_sequence(); - SendMessageA( hwnd, WM_CHAR, dbch[0], 0 ); - SendMessageCallbackA( hwnd, WM_CHAR, dbch[0], 0, NULL, 0 ); - ok_sequence( WmEmptySeq, "no messages", FALSE ); - SendMessageTimeoutA( hwnd, WM_CHAR, dbch[1], 0, SMTO_NORMAL, 0, &res ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - SendMessageA( hwnd, WM_CHAR, dbch[1], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - - /* dbcs WM_CHAR */ - flush_sequence(); - SendMessageA( hwnd2, WM_CHAR, (dbch[1] << 8) | dbch[0], 0 ); - ok_sequence( wmCharSeq, "Unicode WM_CHAR", FALSE ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* other char messages are not magic */ - PostMessageA( hwnd, WM_SYSCHAR, dbch[0], 0 ); - ok( PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.message == WM_SYSCHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == bad_wch, "bad wparam %lx/%x\n", msg.wParam, bad_wch ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - PostMessageA( hwnd, WM_DEADCHAR, dbch[0], 0 ); - ok( PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.message == WM_DEADCHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == bad_wch, "bad wparam %lx/%x\n", msg.wParam, bad_wch ); - ok( !PeekMessageW( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* test retrieving messages */ - - PostMessageW( hwnd, WM_CHAR, wch, 0 ); - ok( PeekMessageA( &msg, hwnd, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[0], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( PeekMessageA( &msg, hwnd, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[1], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( !PeekMessageA( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* message filters */ - PostMessageW( hwnd, WM_CHAR, wch, 0 ); - ok( PeekMessageA( &msg, hwnd, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[0], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - /* message id is filtered, hwnd is not */ - ok( !PeekMessageA( &msg, hwnd, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE ), "no message\n" ); - ok( PeekMessageA( &msg, hwnd2, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[1], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( !PeekMessageA( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* mixing GetMessage and PostMessage */ - PostMessageW( hwnd, WM_CHAR, wch, 0xbeef ); - ok( GetMessageA( &msg, hwnd, 0, 0 ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[0], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( msg.lParam == 0xbeef, "bad lparam %lx\n", msg.lParam ); - time = msg.time; - pt = msg.pt; - ok( time - GetTickCount() <= 100, "bad time %x\n", msg.time ); - ok( PeekMessageA( &msg, 0, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[1], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( msg.lParam == 0xbeef, "bad lparam %lx\n", msg.lParam ); - ok( msg.time == time, "bad time %x/%x\n", msg.time, time ); - ok( msg.pt.x == pt.x && msg.pt.y == pt.y, "bad point %u,%u/%u,%u\n", msg.pt.x, msg.pt.y, pt.x, pt.y ); - ok( !PeekMessageA( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - /* without PM_REMOVE */ - PostMessageW( hwnd, WM_CHAR, wch, 0 ); - ok( PeekMessageA( &msg, 0, 0, 0, PM_NOREMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[0], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( PeekMessageA( &msg, 0, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[0], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( PeekMessageA( &msg, 0, 0, 0, PM_NOREMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[1], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( PeekMessageA( &msg, 0, 0, 0, PM_REMOVE ), "no message\n" ); - ok( msg.hwnd == hwnd, "unexpected hwnd %p\n", msg.hwnd ); - ok( msg.message == WM_CHAR, "unexpected message %x\n", msg.message ); - ok( msg.wParam == dbch[1], "bad wparam %lx/%x\n", msg.wParam, dbch[0] ); - ok( !PeekMessageA( &msg, hwnd, 0, 0, PM_REMOVE ), "got message %x\n", msg.message ); - - DestroyWindow(hwnd); -} - -#define ID_LISTBOX 0x000f - -static const struct message wm_lb_setcursel_0[] = -{ - { LB_SETCURSEL, sent|wparam|lparam, 0, 0 }, - { WM_CTLCOLORLISTBOX, sent|parent }, - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x000120f2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 1 }, - { EVENT_OBJECT_SELECTION, winevent_hook|wparam|lparam, OBJID_CLIENT, 1 }, - { 0 } -}; -static const struct message wm_lb_setcursel_1[] = -{ - { LB_SETCURSEL, sent|wparam|lparam, 1, 0 }, - { WM_CTLCOLORLISTBOX, sent|parent }, - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x000020f2 }, - { WM_CTLCOLORLISTBOX, sent|parent }, - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x000121f2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 2 }, - { EVENT_OBJECT_SELECTION, winevent_hook|wparam|lparam, OBJID_CLIENT, 2 }, - { 0 } -}; -static const struct message wm_lb_setcursel_2[] = -{ - { LB_SETCURSEL, sent|wparam|lparam, 2, 0 }, - { WM_CTLCOLORLISTBOX, sent|parent }, - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x000021f2 }, - { WM_CTLCOLORLISTBOX, sent|parent }, - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x000122f2 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 3 }, - { EVENT_OBJECT_SELECTION, winevent_hook|wparam|lparam, OBJID_CLIENT, 3 }, - { 0 } -}; -static const struct message wm_lb_click_0[] = -{ - { WM_LBUTTONDOWN, sent|wparam|lparam, 0, MAKELPARAM(1,1) }, - { HCBT_SETFOCUS, hook }, - { WM_KILLFOCUS, sent|parent }, - { WM_IME_SETCONTEXT, sent|wparam|optional|parent, 0 }, - { WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 }, - { WM_SETFOCUS, sent|defwinproc }, - - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x001142f2 }, - { WM_COMMAND, sent|wparam|parent, MAKEWPARAM(ID_LISTBOX, LBN_SETFOCUS) }, - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 3 }, - { WM_LBTRACKPOINT, sent|wparam|lparam|parent, 0, MAKELPARAM(1,1) }, - { EVENT_SYSTEM_CAPTURESTART, winevent_hook|wparam|lparam, 0, 0 }, - - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x000142f2 }, - { WM_CTLCOLORLISTBOX, sent|parent }, - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x000022f2 }, - { WM_CTLCOLORLISTBOX, sent|parent }, - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x000120f2 }, - { WM_DRAWITEM, sent|wparam|lparam|parent, ID_LISTBOX, 0x001140f2 }, - - { EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 1 }, - { EVENT_OBJECT_SELECTION, winevent_hook|wparam|lparam, OBJID_CLIENT, 1 }, - - { WM_LBUTTONUP, sent|wparam|lparam, 0, 0 }, - { EVENT_SYSTEM_CAPTUREEND, winevent_hook|wparam|lparam, 0, 0 }, - { WM_CAPTURECHANGED, sent|wparam|lparam|defwinproc, 0, 0 }, - { WM_COMMAND, sent|wparam|parent, MAKEWPARAM(ID_LISTBOX, LBN_SELCHANGE) }, - { 0 } -}; - -#define check_lb_state(a1, a2, a3, a4, a5) check_lb_state_dbg(a1, a2, a3, a4, a5, __LINE__) - -static LRESULT (WINAPI *listbox_orig_proc)(HWND, UINT, WPARAM, LPARAM); - -static LRESULT WINAPI listbox_hook_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp) -{ - static long defwndproc_counter = 0; - LRESULT ret; - struct message msg; - - /* do not log painting messages */ - if (message != WM_PAINT && - message != WM_NCPAINT && - message != WM_SYNCPAINT && - message != WM_ERASEBKGND && - message != WM_NCHITTEST && - message != WM_GETTEXT && - message != WM_GETICON && - message != WM_DEVICECHANGE) - { - trace("listbox: %p, %04x, %08lx, %08lx\n", hwnd, message, wp, lp); - - msg.message = message; - msg.flags = sent|wparam|lparam; - if (defwndproc_counter) msg.flags |= defwinproc; - msg.wParam = wp; - msg.lParam = lp; - add_message(&msg); - } - - defwndproc_counter++; - ret = CallWindowProcA(listbox_orig_proc, hwnd, message, wp, lp); - defwndproc_counter--; - - return ret; -} - -static void check_lb_state_dbg(HWND listbox, int count, int cur_sel, - int caret_index, int top_index, int line) -{ - LRESULT ret; - - /* calling an orig proc helps to avoid unnecessary message logging */ - ret = CallWindowProcA(listbox_orig_proc, listbox, LB_GETCOUNT, 0, 0); - ok_(__FILE__, line)(ret == count, "expected count %d, got %ld\n", count, ret); - ret = CallWindowProcA(listbox_orig_proc, listbox, LB_GETCURSEL, 0, 0); - ok_(__FILE__, line)(ret == cur_sel, "expected cur sel %d, got %ld\n", cur_sel, ret); - ret = CallWindowProcA(listbox_orig_proc, listbox, LB_GETCARETINDEX, 0, 0); - ok_(__FILE__, line)(ret == caret_index, "expected caret index %d, got %ld\n", caret_index, ret); - ret = CallWindowProcA(listbox_orig_proc, listbox, LB_GETTOPINDEX, 0, 0); - ok_(__FILE__, line)(ret == top_index, "expected top index %d, got %ld\n", top_index, ret); -} - -static void test_listbox_messages(void) -{ - HWND parent, listbox; - LRESULT ret; - - parent = CreateWindowExA(0, "TestParentClass", NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, - 100, 100, 200, 200, 0, 0, 0, NULL); - listbox = CreateWindowExA(WS_EX_NOPARENTNOTIFY, "ListBox", NULL, - WS_CHILD | LBS_NOTIFY | LBS_OWNERDRAWVARIABLE | LBS_HASSTRINGS | WS_VISIBLE, - 10, 10, 80, 80, parent, (HMENU)ID_LISTBOX, 0, NULL); - listbox_orig_proc = (WNDPROC)SetWindowLongPtrA(listbox, GWLP_WNDPROC, (ULONG_PTR)listbox_hook_proc); - - check_lb_state(listbox, 0, LB_ERR, 0, 0); - - ret = SendMessage(listbox, LB_ADDSTRING, 0, (LPARAM)"item 0"); - ok(ret == 0, "expected 0, got %ld\n", ret); - ret = SendMessage(listbox, LB_ADDSTRING, 0, (LPARAM)"item 1"); - ok(ret == 1, "expected 1, got %ld\n", ret); - ret = SendMessage(listbox, LB_ADDSTRING, 0, (LPARAM)"item 2"); - ok(ret == 2, "expected 2, got %ld\n", ret); - - check_lb_state(listbox, 3, LB_ERR, 0, 0); - - flush_sequence(); - - log_all_parent_messages++; - - trace("selecting item 0\n"); - ret = SendMessage(listbox, LB_SETCURSEL, 0, 0); - ok(ret == 0, "expected 0, got %ld\n", ret); - ok_sequence(wm_lb_setcursel_0, "LB_SETCURSEL 0", FALSE ); - check_lb_state(listbox, 3, 0, 0, 0); - flush_sequence(); - - trace("selecting item 1\n"); - ret = SendMessage(listbox, LB_SETCURSEL, 1, 0); - ok(ret == 1, "expected 1, got %ld\n", ret); - ok_sequence(wm_lb_setcursel_1, "LB_SETCURSEL 1", FALSE ); - check_lb_state(listbox, 3, 1, 1, 0); - - trace("selecting item 2\n"); - ret = SendMessage(listbox, LB_SETCURSEL, 2, 0); - ok(ret == 2, "expected 2, got %ld\n", ret); - ok_sequence(wm_lb_setcursel_2, "LB_SETCURSEL 2", FALSE ); - check_lb_state(listbox, 3, 2, 2, 0); - - trace("clicking on item 0\n"); - ret = SendMessage(listbox, WM_LBUTTONDOWN, 0, MAKELPARAM(1, 1)); - ok(ret == LB_OKAY, "expected LB_OKAY, got %ld\n", ret); - ret = SendMessage(listbox, WM_LBUTTONUP, 0, 0); - ok(ret == LB_OKAY, "expected LB_OKAY, got %ld\n", ret); - ok_sequence(wm_lb_click_0, "WM_LBUTTONDOWN 0", FALSE ); - check_lb_state(listbox, 3, 0, 0, 0); - flush_sequence(); - - log_all_parent_messages--; - - DestroyWindow(listbox); - DestroyWindow(parent); -} - -START_TEST(msg) -{ - BOOL ret; - FARPROC pIsWinEventHookInstalled = 0;/*GetProcAddress(user32, "IsWinEventHookInstalled");*/ - - init_procs(); - - if (!RegisterWindowClasses()) assert(0); - - if (pSetWinEventHook) - { - hEvent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX, - GetModuleHandleA(0), - win_event_proc, - 0, - GetCurrentThreadId(), - WINEVENT_INCONTEXT); - assert(hEvent_hook); - - if (pIsWinEventHookInstalled) - { - UINT event; - for (event = EVENT_MIN; event <= EVENT_MAX; event++) - ok(pIsWinEventHookInstalled(event), "IsWinEventHookInstalled(%u) failed\n", event); - } - } - - cbt_hook_thread_id = GetCurrentThreadId(); - hCBT_hook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, 0, GetCurrentThreadId()); - assert(hCBT_hook); - - test_winevents(); - - /* Fix message sequences before removing 4 lines below */ -#if 1 - if (pUnhookWinEvent && hEvent_hook) - { - ret = pUnhookWinEvent(hEvent_hook); - ok( ret, "UnhookWinEvent error %d\n", GetLastError()); - pUnhookWinEvent = 0; - } - hEvent_hook = 0; -#endif - - test_ShowWindow(); - test_PeekMessage(); - test_PeekMessage2(); - test_scrollwindowex(); - test_messages(); - test_showwindow(); - invisible_parent_tests(); - test_mdi_messages(); - test_button_messages(); - test_static_messages(); - test_listbox_messages(); - test_combobox_messages(); - test_wmime_keydown_message(); - test_paint_messages(); - test_interthread_messages(); - test_message_conversion(); - test_accelerators(); - test_timers(); - test_timers_no_wnd(); - test_set_hook(); - test_DestroyWindow(); - test_DispatchMessage(); - test_SendMessageTimeout(); - test_edit_messages(); - test_quit_message(); - - if (!pTrackMouseEvent) - skip("TrackMouseEvent is not available\n"); - else - test_TrackMouseEvent(); - - test_SetWindowRgn(); - test_sys_menu(); - test_dialog_messages(); - test_nullCallback(); - test_SetForegroundWindow(); - test_dbcs_wm_char(); - - UnhookWindowsHookEx(hCBT_hook); - if (pUnhookWinEvent) - { - ret = pUnhookWinEvent(hEvent_hook); - ok( ret, "UnhookWinEvent error %d\n", GetLastError()); - SetLastError(0xdeadbeef); - ok(!pUnhookWinEvent(hEvent_hook), "UnhookWinEvent succeeded\n"); - ok(GetLastError() == ERROR_INVALID_HANDLE || /* Win2k */ - GetLastError() == 0xdeadbeef, /* Win9x */ - "unexpected error %d\n", GetLastError()); - } - else - skip("UnhookWinEvent is not available\n"); -} diff --git a/rostests/winetests/user32/resource.c b/rostests/winetests/user32/resource.c deleted file mode 100755 index a8b6c08f3f6..00000000000 --- a/rostests/winetests/user32/resource.c +++ /dev/null @@ -1,367 +0,0 @@ -/* Unit test suite for resources. - * - * Copyright 2004 Ferenc Wagner - * Copyright 2003, 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 -#include - -#include "wine/test.h" - -static UINT (WINAPI *pPrivateExtractIconsA)(LPCTSTR, int, int, int, HICON *, UINT *, UINT, UINT) = NULL; - -static void init_function_pointers(void) -{ - HMODULE hmod = GetModuleHandleA("user32.dll"); - pPrivateExtractIconsA = (void*)GetProcAddress(hmod, "PrivateExtractIconsA"); -} - -static void test_LoadStringW(void) -{ - HINSTANCE hInst = GetModuleHandle(NULL); - WCHAR copiedstringw[128], returnedstringw[128], *resourcepointer = NULL; - char copiedstring[128], returnedstring[128]; - int length1, length2, retvalue; - - /* Check that the string which is returned by LoadStringW matches - the string at the pointer returned by LoadStringW when called with buflen = 0 */ - length1 = LoadStringW(hInst, 2, (WCHAR *) &resourcepointer, 0); /* get pointer to resource. */ - length2 = LoadStringW(hInst, 2, returnedstringw, sizeof(returnedstringw) /sizeof(WCHAR)); /* get resource string */ - ok(length2 > 0, "LoadStringW failed to load resource 2, ret %d, err %d\n", length2, GetLastError()); - ok(length1 == length2, "LoadStringW returned different values dependent on buflen. ret1 %d, ret2 %d\n", - length1, length2); - ok(length1 > 0 && resourcepointer != NULL, "LoadStringW failed to get pointer to resource 2, ret %d, err %d\n", - length1, GetLastError()); - - /* Copy the resource since it is not '\0' terminated, and add '\0' to the end */ - if(resourcepointer != NULL) /* Check that the resource pointer was loaded to avoid access violation */ - { - memcpy(copiedstringw, resourcepointer, length1 * sizeof(WCHAR)); - copiedstringw[length1] = '\0'; - /* check that strings match */ - WideCharToMultiByte( CP_ACP, 0, returnedstringw, -1, returnedstring, 128, NULL, NULL ); - WideCharToMultiByte( CP_ACP, 0, copiedstringw, -1, copiedstring, 128, NULL, NULL ); - ok(!memcmp(copiedstringw, returnedstringw, (length2 + 1)*sizeof(WCHAR)), - "strings don't match: returnedstring = %s, copiedstring = %s\n", returnedstring, copiedstring); - } - - /* check that calling LoadStringW with buffer = NULL returns zero */ - retvalue = LoadStringW(hInst, 2, NULL, 0); - ok(!retvalue, "LoadStringW returned a non-zero value when called with buffer = NULL, retvalue = %d\n", retvalue); - /* check again, with a different buflen value, that calling LoadStringW with buffer = NULL returns zero */ - retvalue = LoadStringW(hInst, 2, NULL, 128); - ok(!retvalue, "LoadStringW returned a non-zero value when called with buffer = NULL, retvalue = %d\n", retvalue); -} - -static void test_LoadStringA (void) -{ - HINSTANCE hInst = GetModuleHandle (NULL); - static const char str[] = "String resource"; /* same in resource.rc */ - char buf[128]; - struct string_test { - unsigned int bufsiz; - unsigned int expected; - }; - struct string_test tests[] = {{sizeof buf, sizeof str - 1}, - {sizeof str, sizeof str - 1}, - {sizeof str - 1, sizeof str - 2}}; - unsigned int i; - int ret; - - assert (sizeof str < sizeof buf); - for (i = 0; i < sizeof tests / sizeof tests[0]; i++) { - const unsigned int bufsiz = tests[i].bufsiz; - const unsigned int expected = tests[i].expected; - const int len = LoadStringA (hInst, 0, buf, bufsiz); - - ok (len == expected, "bufsiz=%d: got %d, expected %d\n", - bufsiz, len, expected); - if (len != expected) continue; - ok (!memcmp (buf, str, len), - "bufsiz=%d: got '%s', expected '%.*s'\n", - bufsiz, buf, len, str); - ok (buf[len] == 0, "bufsiz=%d: NUL termination missing\n", - bufsiz); - } - - ret = LoadStringA(hInst, 1, buf, sizeof(buf) ); - ok( ret > 0, "LoadString failed: ret %d err %d\n", ret, GetLastError()); - ok( LoadStringA( hInst, MAKELONG( 1, 0x8000 ), buf, sizeof(buf)) == ret, - "LoadString failed: ret %d err %d\n", ret, GetLastError()); - ok( LoadStringA( hInst, MAKELONG( 1, 0xffff ), buf, sizeof(buf)) == ret, - "LoadString failed: ret %d err %d\n", ret, GetLastError()); - - ret = LoadStringA(hInst, 65534, buf, sizeof(buf) ); - ok( ret > 0, "LoadString failed: ret %d err %d\n", ret, GetLastError()); - ok( LoadStringA( hInst, MAKELONG( 65534, 0x8000 ), buf, sizeof(buf)) == ret, - "LoadString failed: ret %d err %d\n", ret, GetLastError()); - ok( LoadStringA( hInst, MAKELONG( 65534, 0xffff ), buf, sizeof(buf)) == ret, - "LoadString failed: ret %d err %d\n", ret, GetLastError()); - - ret = LoadStringA(hInst, 0, buf, 0); - ok( ret == -1, "LoadStringA did not return -1 when called with buflen = 0, got %d, err %d\n", - ret, GetLastError()); -} - -static void test_accel1(void) -{ - UINT r, n; - HACCEL hAccel; - ACCEL ac[10]; - - /* now create our own valid accelerator table */ - n = 0; - ac[n].cmd = 1000; - ac[n].key = 'A'; - ac[n++].fVirt = FVIRTKEY | FNOINVERT; - - ac[n].cmd = 1001; - ac[n].key = 'B'; - ac[n++].fVirt = FNOINVERT; - - ac[n].cmd = 0; - ac[n].key = 0; - ac[n++].fVirt = 0; - - hAccel = CreateAcceleratorTable( &ac[0], n ); - ok( hAccel != NULL, "create accelerator table\n"); - - r = DestroyAcceleratorTable( hAccel ); - ok( r, "destroy accelerator table\n"); - - /* now try create an invalid one */ - n = 0; - ac[n].cmd = 1000; - ac[n].key = 'A'; - ac[n++].fVirt = FVIRTKEY | FNOINVERT; - - ac[n].cmd = 0xffff; - ac[n].key = 0xffff; - ac[n++].fVirt = (SHORT) 0xffff; - - ac[n].cmd = 0xfff0; - ac[n].key = 0xffff; - ac[n++].fVirt = (SHORT) 0xfff0; - - ac[n].cmd = 0xfff0; - ac[n].key = 0xffff; - ac[n++].fVirt = (SHORT) 0x0000; - - ac[n].cmd = 0xfff0; - ac[n].key = 0xffff; - ac[n++].fVirt = (SHORT) 0x0001; - - hAccel = CreateAcceleratorTable( &ac[0], n ); - ok( hAccel != NULL, "create accelerator table\n"); - - r = CopyAcceleratorTable( hAccel, NULL, 0 ); - ok( r == n, "two entries in table\n"); - - r = CopyAcceleratorTable( hAccel, &ac[0], r ); - ok( r == n, "still should be two entries in table\n"); - - n=0; - ok( ac[n].cmd == 1000, "cmd 0 not preserved\n"); - ok( ac[n].key == 'A', "key 0 not preserved\n"); - ok( ac[n].fVirt == (FVIRTKEY | FNOINVERT), "fVirt 0 not preserved\n"); - - n++; - ok( ac[n].cmd == 0xffff, "cmd 1 not preserved\n"); - ok( ac[n].key == 0xffff, "key 1 not preserved\n"); - ok( ac[n].fVirt == 0x007f, "fVirt 1 not changed\n"); - - n++; - ok( ac[n].cmd == 0xfff0, "cmd 2 not preserved\n"); - ok( ac[n].key == 0x00ff, "key 2 not preserved\n"); - ok( ac[n].fVirt == 0x0070, "fVirt 2 not changed\n"); - - n++; - ok( ac[n].cmd == 0xfff0, "cmd 3 not preserved\n"); - ok( ac[n].key == 0x00ff, "key 3 not preserved\n"); - ok( ac[n].fVirt == 0x0000, "fVirt 3 not changed\n"); - - n++; - ok( ac[n].cmd == 0xfff0, "cmd 4 not preserved\n"); - ok( ac[n].key == 0xffff, "key 4 not preserved\n"); - ok( ac[n].fVirt == 0x0001, "fVirt 4 not changed\n"); - - r = DestroyAcceleratorTable( hAccel ); - ok( r, "destroy accelerator table\n"); - - hAccel = CreateAcceleratorTable( &ac[0], 0 ); - ok( !hAccel, "zero elements should fail\n"); - - /* these will on crash win2k - hAccel = CreateAcceleratorTable( NULL, 1 ); - hAccel = CreateAcceleratorTable( &ac[0], -1 ); - */ -} - -/* - * memcmp on the tables works in Windows, but does not work in wine, as - * there is an extra undefined and unused byte between fVirt and the key - */ -static void test_accel2(void) -{ - ACCEL ac[2], out[2]; - HACCEL hac; - - ac[0].cmd = 0; - ac[0].fVirt = 0; - ac[0].key = 0; - - ac[1].cmd = 0; - ac[1].fVirt = 0; - ac[1].key = 0; - - /* - * crashes on win2k - * hac = CreateAcceleratorTable( NULL, 1 ); - */ - - /* try a zero count */ - hac = CreateAcceleratorTable( &ac[0], 0 ); - ok( !hac , "fail\n"); - ok( !DestroyAcceleratorTable( hac ), "destroy failed\n"); - - /* creating one accelerator should work */ - hac = CreateAcceleratorTable( &ac[0], 1 ); - ok( hac != NULL , "fail\n"); - ok( 1 == CopyAcceleratorTable( hac, out, 1 ), "copy failed\n"); - ok( DestroyAcceleratorTable( hac ), "destroy failed\n"); - - /* how about two of the same type? */ - hac = CreateAcceleratorTable( &ac[0], 2); - ok( hac != NULL , "fail\n"); - ok( 2 == CopyAcceleratorTable( hac, NULL, 100 ), "copy null failed\n"); - ok( 2 == CopyAcceleratorTable( hac, NULL, 0 ), "copy null failed\n"); - ok( 2 == CopyAcceleratorTable( hac, NULL, 1 ), "copy null failed\n"); - ok( 1 == CopyAcceleratorTable( hac, out, 1 ), "copy 1 failed\n"); - ok( 2 == CopyAcceleratorTable( hac, out, 2 ), "copy 2 failed\n"); - ok( DestroyAcceleratorTable( hac ), "destroy failed\n"); - /* ok( !memcmp( ac, out, sizeof ac ), "tables different\n"); */ - - /* how about two of the same type with a non-zero key? */ - ac[0].key = 0x20; - ac[1].key = 0x20; - hac = CreateAcceleratorTable( &ac[0], 2); - ok( hac != NULL , "fail\n"); - ok( 2 == CopyAcceleratorTable( hac, out, 2 ), "copy 2 failed\n"); - ok( DestroyAcceleratorTable( hac ), "destroy failed\n"); - /* ok( !memcmp( ac, out, sizeof ac ), "tables different\n"); */ - - /* how about two of the same type with a non-zero virtual key? */ - ac[0].fVirt = FVIRTKEY; - ac[0].key = 0x40; - ac[1].fVirt = FVIRTKEY; - ac[1].key = 0x40; - hac = CreateAcceleratorTable( &ac[0], 2); - ok( hac != NULL , "fail\n"); - ok( 2 == CopyAcceleratorTable( hac, out, 2 ), "copy 2 failed\n"); - /* ok( !memcmp( ac, out, sizeof ac ), "tables different\n"); */ - ok( DestroyAcceleratorTable( hac ), "destroy failed\n"); - - /* how virtual key codes */ - ac[0].fVirt = FVIRTKEY; - hac = CreateAcceleratorTable( &ac[0], 1); - ok( hac != NULL , "fail\n"); - ok( 1 == CopyAcceleratorTable( hac, out, 2 ), "copy 2 failed\n"); - /* ok( !memcmp( ac, out, sizeof ac/2 ), "tables different\n"); */ - ok( DestroyAcceleratorTable( hac ), "destroy failed\n"); - - /* how turning on all bits? */ - ac[0].cmd = 0xffff; - ac[0].fVirt = 0xff; - ac[0].key = 0xffff; - hac = CreateAcceleratorTable( &ac[0], 1); - ok( hac != NULL , "fail\n"); - ok( 1 == CopyAcceleratorTable( hac, out, 1 ), "copy 1 failed\n"); - /* ok( memcmp( ac, out, sizeof ac/2 ), "tables not different\n"); */ - ok( out[0].cmd == ac[0].cmd, "cmd modified\n"); - ok( out[0].fVirt == (ac[0].fVirt&0x7f), "fVirt not modified\n"); - ok( out[0].key == ac[0].key, "key modified\n"); - ok( DestroyAcceleratorTable( hac ), "destroy failed\n"); - - /* how turning on all bits? */ - memset( ac, 0xff, sizeof ac ); - hac = CreateAcceleratorTable( &ac[0], 2); - ok( hac != NULL , "fail\n"); - ok( 2 == CopyAcceleratorTable( hac, out, 2 ), "copy 2 failed\n"); - /* ok( memcmp( ac, out, sizeof ac ), "tables not different\n"); */ - ok( out[0].cmd == ac[0].cmd, "cmd modified\n"); - ok( out[0].fVirt == (ac[0].fVirt&0x7f), "fVirt not modified\n"); - ok( out[0].key == ac[0].key, "key modified\n"); - ok( out[1].cmd == ac[1].cmd, "cmd modified\n"); - ok( out[1].fVirt == (ac[1].fVirt&0x7f), "fVirt not modified\n"); - ok( out[1].key == ac[1].key, "key modified\n"); - ok( DestroyAcceleratorTable( hac ), "destroy failed\n"); -} - -static void test_PrivateExtractIcons(void) { - CONST CHAR szShell32Dll[] = "shell32.dll"; - HICON ahIcon[256]; - UINT aIconId[256]; - UINT cIcons, cIcons2; - - if (!pPrivateExtractIconsA) return; - - cIcons = pPrivateExtractIconsA(szShell32Dll, 0, 16, 16, NULL, NULL, 0, 0); - cIcons2 = pPrivateExtractIconsA(szShell32Dll, 4, MAKELONG(32,16), MAKELONG(32,16), - NULL, NULL, 256, 0); - ok((cIcons == cIcons2) && (cIcons > 0), - "Icon count should be independent of requested icon sizes and base icon index! " - "(cIcons=%d, cIcons2=%d)\n", cIcons, cIcons2); - - cIcons = pPrivateExtractIconsA(szShell32Dll, 0, 16, 16, ahIcon, aIconId, 0, 0); - ok(cIcons == 0, "Zero icons requested, got cIcons=%d\n", cIcons); - - cIcons = pPrivateExtractIconsA(szShell32Dll, 0, 16, 16, ahIcon, aIconId, 3, 0); - ok(cIcons == 3, "Three icons requested got cIcons=%d\n", cIcons); - - cIcons = pPrivateExtractIconsA(szShell32Dll, 0, MAKELONG(32,16), MAKELONG(32,16), - ahIcon, aIconId, 3, 0); - ok(cIcons == 4, "Three icons requested, four expected, got cIcons=%d\n", cIcons); -} - -static void test_LoadImage(void) -{ - HBITMAP bmp; - HRSRC hres; - - bmp = LoadBitmapA(GetModuleHandle(NULL), MAKEINTRESOURCE(100)); - ok(bmp != NULL, "Could not load a bitmap resource\n"); - if (bmp) DeleteObject(bmp); - - hres = FindResource(GetModuleHandle(NULL), "#100", RT_BITMAP); - ok(hres != NULL, "Could not find a bitmap resource with a numeric string\n"); - - bmp = LoadBitmapA(GetModuleHandle(NULL), "#100"); - ok(bmp != NULL, "Could not load a bitmap resource with a numeric string\n"); - if (bmp) DeleteObject(bmp); -} - -START_TEST(resource) -{ - init_function_pointers(); - test_LoadStringA(); - test_LoadStringW(); - test_accel1(); - test_accel2(); - test_PrivateExtractIcons(); - test_LoadImage(); -} diff --git a/rostests/winetests/user32/resource.rc b/rostests/winetests/user32/resource.rc deleted file mode 100755 index 7da8a6c2d79..00000000000 --- a/rostests/winetests/user32/resource.rc +++ /dev/null @@ -1,183 +0,0 @@ -/* Unit test suite for resources. - * - * Copyright 2004 Ferenc Wagner - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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 "winuser.h" - -1 ACCELERATORS -{ - "^N", 1000 /* Ctrl+'N' */ - "N", 1001 /* Shift+'n' */ - "n", 1002 /* 'n' */ -} - -2 ACCELERATORS -{ - 78, 1000, VIRTKEY, CONTROL /* Ctrl+'N' */ - 78, 1001, ASCII /* 'N' */ - 110, 1002, ASCII /* 'n' */ - 78, 1003, VIRTKEY, ALT /* Alt+'N' */ - 78, 1004, VIRTKEY, CONTROL, SHIFT /* Ctrl+Shift+'N' */ - 78, 1005, VIRTKEY, CONTROL, ALT, SHIFT /* Ctrl+Alt+Shift+'N' */ -} - -STRINGTABLE -{ - 0 "String resource" - 1 "Another string resource" - 2 L"This is a wide string resource" - 65534 "Test high id" -} - -TEST_DIALOG DIALOG DISCARDABLE 0, 0, 60, 30 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "Test dialog" -FONT 8, "MS Shell Dlg" -{ - DEFPUSHBUTTON "OK", IDOK,4,4,50,14, WS_TABSTOP | WS_GROUP -} - -RADIO_TEST_DIALOG DIALOGEX 0, 0, 160, 80 -STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Radio Button Test Dialog" -FONT 8, "MS Shell Dlg" -{ - GROUPBOX "Static", 100,6,5,92,70 - CONTROL "Radio1", 200,"Button",BS_AUTORADIOBUTTON | - WS_GROUP | WS_TABSTOP,17,27,39,10 - CONTROL "Radio2", 201,"Button",BS_AUTORADIOBUTTON,17,40,39,10 - PUSHBUTTON "Cancel", IDCANCEL,109,20,50,14, WS_TABSTOP | WS_GROUP -} - -CLASS_TEST_DIALOG DIALOG DISCARDABLE 0, 0, 91, 28 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "CreateDialogParams Test" -CLASS "TestDialog" -FONT 8, "MS Shell Dlg" -{ -} - -CLASS_TEST_DIALOG_2 DIALOG DISCARDABLE 0, 0, 100, 100 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "CreateDialogParams Test" -CLASS "MyDialogClass" -FONT 8, "MS Shell Dlg" -{ -} - -FOCUS_TEST_DIALOG DIALOG DISCARDABLE 0, 0, 60, 30 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CONTROL -CAPTION "Test dialog" -FONT 8, "MS Shell Dlg" -{ - EDITTEXT 200,4,4,50,14 -} - -IDD_DIALOG DIALOG DISCARDABLE 0, 0, 186, 95 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Dialog" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,129,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 -END - -MULTI_EDIT_DIALOG DIALOG DISCARDABLE 0, 0, 160, 75 -STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER -CAPTION "Multiple Edit Test" -FONT 8, "MS Shell Dlg" -{ - EDITTEXT 1000, 5, 5, 150, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | ES_WANTRETURN - EDITTEXT 1001, 5, 25, 150, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - EDITTEXT 1002, 5, 45, 150, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP -} - -EDIT_DIALOG DIALOG DISCARDABLE 0, 0, 160, 80 -STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER -CAPTION "Edit Test" -FONT 8, "MS Shell Dlg" -{ - PUSHBUTTON "Ok", IDOK, 20, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 100, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - EDITTEXT 1000, 5, 5, 150, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL -} - -EDIT_SINGLELINE_DIALOG DIALOG DISCARDABLE 0, 0, 160, 80 -STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER -CAPTION "Edit Test" -FONT 8, "MS Shell Dlg" -{ - PUSHBUTTON "Ok", IDOK, 20, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 100, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - EDITTEXT 1000, 5, 5, 150, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | ES_AUTOVSCROLL -} - -EDIT_SINGLELINE_WANTRETURN_DIALOG DIALOG DISCARDABLE 0, 0, 160, 80 -STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER -CAPTION "Edit Test" -FONT 8, "MS Shell Dlg" -{ - PUSHBUTTON "Ok", IDOK, 20, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 100, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - EDITTEXT 1000, 5, 5, 150, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | ES_AUTOVSCROLL | ES_WANTRETURN -} - -EDIT_WANTRETURN_DIALOG DIALOG DISCARDABLE 0, 0, 160, 80 -STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER -CAPTION "Edit Test" -FONT 8, "MS Shell Dlg" -{ - PUSHBUTTON "Ok", IDOK, 20, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 100, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - EDITTEXT 1000, 5, 5, 150, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL | ES_WANTRETURN -} - -EDIT_READONLY_DIALOG DIALOG DISCARDABLE 0, 0, 160, 80 -STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER -CAPTION "Edit Readonly Test" -FONT 8, "MS Shell Dlg" -{ - PUSHBUTTON "Ok", IDOK, 20, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 100, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP - EDITTEXT 1000, 5, 5, 150, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL | ES_READONLY -} - -/* @makedep: test_mono.bmp */ -100 BITMAP test_mono.bmp - -1 MENU -{ - POPUP "&File" - { - MENUITEM "&New", 100 - MENUITEM "&Open", 101 - MENUITEM "&Save", 102 - MENUITEM SEPARATOR - MENUITEM "E&xit", 103 - } - POPUP "Edit" - { - MENUITEM "&Undo", 200 - MENUITEM SEPARATOR - MENUITEM "Cu&t", 201 - MENUITEM "&Copy", 202 - MENUITEM "&Paste", 203 - MENUITEM "&Delete", 204 - } -} diff --git a/rostests/winetests/user32/scroll.c b/rostests/winetests/user32/scroll.c deleted file mode 100644 index 3bc407a8641..00000000000 --- a/rostests/winetests/user32/scroll.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Unit tests for scrollbar - * - * Copyright 2008 Lyutin Anatoly (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 -#include - -#include "wine/test.h" - -static HWND hScroll, hMainWnd; - -static LRESULT CALLBACK MyWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) -{ - switch(msg) - { - - case WM_CREATE: - { - hScroll = CreateWindowA( "SCROLLBAR", "", WS_CHILD | WS_VISIBLE, 0, 0, 120, 100, hWnd, (HMENU)100, GetModuleHandleA(0), 0 ); - - return 0; - } - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProcA(hWnd, msg, wParam, lParam); - } - return 0; -} - -static void scrollbar_test1(void) -{ - BOOL ret; - - ret = EnableScrollBar( hScroll, SB_CTL, ESB_DISABLE_BOTH ); - ok( ret, "The scrollbar should be disabled.\n" ); - todo_wine - { - ok( !IsWindowEnabled( hScroll ), "The scrollbar window should be disabled.\n" ); - } - - ret = EnableScrollBar( hScroll, SB_CTL, ESB_ENABLE_BOTH ); - ok( ret, "The scrollbar should be enabled.\n" ); - ok( IsWindowEnabled( hScroll ), "The scrollbar window should be enabled.\n" ); - -} - -static void scrollbar_test2(void) -{ - int ret; - - trace("The scrollbar is disabled.\n"); - - EnableWindow( hScroll, FALSE ); - ok( !IsWindowEnabled( hScroll ), "The scroll should be disabled.\n" ); - - ret = SetScrollPos( hScroll, SB_CTL, 30, TRUE); - ok( !ret, "The position should not be set.\n" ); - - ret = GetScrollPos( hScroll, SB_CTL); - ok( !ret, "The position should be equal to zero\n"); - - ret = SetScrollRange( hScroll, SB_CTL, 0, 100, TRUE ); - ok( ret, "The range should be set.\n" ); - - ret = SetScrollPos( hScroll, SB_CTL, 30, TRUE); - ok( !ret , "The position should not be set.\n" ); - - ret = GetScrollPos( hScroll, SB_CTL); - ok( ret == 30, "The position should be set!!!\n"); - - trace("The scrollbar is enabled.\n"); - - EnableWindow( hScroll, TRUE ); - ok( IsWindowEnabled( hScroll ), "The scroll should be enabled.\n" ); - - ret = SetScrollPos( hScroll, SB_CTL, 30, TRUE); - ok( ret == 30, "The position should be set.\n" ); - - ret = GetScrollPos( hScroll, SB_CTL); - ok( ret == 30, "The position should not be equal to zero\n"); - - ret = SetScrollRange( hScroll, SB_CTL, 0, 100, TRUE ); - ok( ret, "The range should be set.\n" ); - - ret = SetScrollPos( hScroll, SB_CTL, 30, TRUE); - ok( ret == 30, "The position should be set.\n" ); - - ret = GetScrollPos( hScroll, SB_CTL); - ok( ret == 30, "The position should not be equal to zero\n"); -} - -static void scrollbar_test3(void) -{ - BOOL ret; - - ret = ShowScrollBar( hScroll, SB_CTL, FALSE ); - ok( ret, "The ShowScrollBar() should not failed.\n" ); - ok( !IsWindowVisible( hScroll ), "The scrollbar window should not be visible\n" ); - - ret = ShowScrollBar( hScroll, SB_CTL, TRUE ); - ok( ret, "The ShowScrollBar() should not failed.\n" ); - ok( !IsWindowVisible( hScroll ), "The scrollbar window should be visible\n" ); - - ret = ShowScrollBar( NULL, SB_CTL, TRUE ); - ok( !ret, "The ShowScrollBar() should failed.\n" ); - -} - -START_TEST ( scroll ) -{ - WNDCLASSA wc; - - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = GetModuleHandleA(NULL); - wc.hIcon = NULL; - wc.hCursor = LoadCursorA(NULL, IDC_IBEAM); - wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); - wc.lpszMenuName = NULL; - wc.lpszClassName = "MyTestWnd"; - wc.lpfnWndProc = MyWndProc; - RegisterClassA(&wc); - - hMainWnd = CreateWindowExA( 0, "MyTestWnd", "Scroll", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0 ); - - if ( !ok( hMainWnd != NULL, "Failed to create parent window. Tests aborted.\n" ) ) - return; - - assert( hScroll ); - - scrollbar_test1(); - scrollbar_test2(); - scrollbar_test3(); - - DestroyWindow(hScroll); - DestroyWindow(hMainWnd); -} diff --git a/rostests/winetests/user32/static.c b/rostests/winetests/user32/static.c deleted file mode 100644 index 7810db4e399..00000000000 --- a/rostests/winetests/user32/static.c +++ /dev/null @@ -1,130 +0,0 @@ -/* Unit test suite for static controls. - * - * 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 - */ - -#include -#include -#include - -#define STRICT -#define WIN32_LEAN_AND_MEAN -#include - -#include "wine/test.h" - -#define TODO_COUNT 1 - -#define CTRL_ID 1995 - -static HWND hMainWnd; - -#define expect_eq(expr, value, type, fmt) { type val = expr; ok(val == (value), #expr " expected " #fmt " got " #fmt "\n", (value), val); } -#define expect_rect(r, _left, _top, _right, _bottom) ok(r.left == _left && r.top == _top && \ - r.bottom == _bottom && r.right == _right, "Invalid rect (%d,%d) (%d,%d) vs (%d,%d) (%d,%d)\n", \ - r.left, r.top, r.right, r.bottom, _left, _top, _right, _bottom); - -int g_nReceivedColorStatic = 0; - -static HWND build_static(DWORD style) -{ - return CreateWindow("static", "Test", WS_VISIBLE|WS_CHILD|style, 5, 5, 100, 100, hMainWnd, (HMENU)CTRL_ID, NULL, 0); -} - -static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_CTLCOLORSTATIC: - { - HDC hdc = (HDC)wparam; - HRGN hrgn = CreateRectRgn(0, 0, 1, 1); - ok(GetClipRgn(hdc, hrgn) == 1, "Static controls during a WM_CTLCOLORSTATIC must have a clipping region\n"); - DeleteObject(hrgn); - g_nReceivedColorStatic++; - } - break; - } - - return DefWindowProc(hwnd, msg, wparam, lparam); -} - -void test_updates(int style, int flags) -{ - RECT r1 = {20, 20, 30, 30}; - HWND hStatic = build_static(style); - int exp; - - trace("Testing style 0x%x\n", style); - g_nReceivedColorStatic = 0; - /* during each update parent WndProc will test the WM_CTLCOLORSTATIC message */ - InvalidateRect(hMainWnd, NULL, FALSE); - UpdateWindow(hMainWnd); - InvalidateRect(hMainWnd, &r1, FALSE); - UpdateWindow(hMainWnd); - InvalidateRect(hStatic, &r1, FALSE); - UpdateWindow(hStatic); - InvalidateRect(hStatic, NULL, FALSE); - UpdateWindow(hStatic); - - - if (style != SS_ETCHEDHORZ && style != SS_ETCHEDVERT) - exp = 4; - else - exp = 1; /* SS_ETCHED* seems to send WM_CTLCOLORSTATIC only sometimes */ - - if (flags & TODO_COUNT) - todo_wine { expect_eq(g_nReceivedColorStatic, exp, int, "%d"); } - else - expect_eq(g_nReceivedColorStatic, exp, int, "%d"); - DestroyWindow(hStatic); -} - -START_TEST(static) -{ - static char szClassName[] = "testclass"; - WNDCLASSEX wndclass; - - wndclass.cbSize = sizeof(wndclass); - wndclass.style = CS_HREDRAW | CS_VREDRAW; - wndclass.lpfnWndProc = WndProc; - wndclass.cbClsExtra = 0; - wndclass.cbWndExtra = 0; - wndclass.hInstance = GetModuleHandle(NULL); - wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); - wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); - wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); - wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); - wndclass.lpszClassName = szClassName; - wndclass.lpszMenuName = NULL; - RegisterClassEx(&wndclass); - - hMainWnd = CreateWindow(szClassName, "Test", WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, GetModuleHandle(NULL), NULL); - ShowWindow(hMainWnd, SW_SHOW); - UpdateWindow(hMainWnd); - - test_updates(0, 0); - test_updates(SS_SIMPLE, 0); - test_updates(SS_ICON, 0); - test_updates(SS_BITMAP, 0); - test_updates(SS_BLACKRECT, TODO_COUNT); - test_updates(SS_WHITERECT, TODO_COUNT); - test_updates(SS_ETCHEDHORZ, TODO_COUNT); - test_updates(SS_ETCHEDVERT, TODO_COUNT); - - DestroyWindow(hMainWnd); -} diff --git a/rostests/winetests/user32/sysparams.c b/rostests/winetests/user32/sysparams.c deleted file mode 100755 index 8e95ffd7da3..00000000000 --- a/rostests/winetests/user32/sysparams.c +++ /dev/null @@ -1,2628 +0,0 @@ -/* Unit test suite for functions SystemParametersInfo and GetSystemMetrics. - * - * 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 - */ - -#include -#include -#include -#include - -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0500 /* For SPI_GETMOUSEHOVERWIDTH and more */ - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winreg.h" -#include "winuser.h" -#include "winnls.h" - -#ifndef SPI_GETDESKWALLPAPER -# define SPI_GETDESKWALLPAPER 0x0073 -#endif - -static LONG (WINAPI *pChangeDisplaySettingsExA)(LPCSTR, LPDEVMODEA, HWND, DWORD, LPVOID); - -static int strict; -static int dpi; -static int iswin9x; -static HDC hdc; - -#define eq(received, expected, label, type) \ - ok((received) == (expected), "%s: got " type " instead of " type "\n", (label),(received),(expected)) - - -#define SPI_SETBEEP_REGKEY "Control Panel\\Sound" -#define SPI_SETBEEP_VALNAME "Beep" -#define SPI_SETMOUSE_REGKEY "Control Panel\\Mouse" -#define SPI_SETMOUSE_VALNAME1 "MouseThreshold1" -#define SPI_SETMOUSE_VALNAME2 "MouseThreshold2" -#define SPI_SETMOUSE_VALNAME3 "MouseSpeed" -#define SPI_SETBORDER_REGKEY "Control Panel\\Desktop\\WindowMetrics" -#define SPI_SETBORDER_REGKEY2 "Control Panel\\Desktop" -#define SPI_SETBORDER_VALNAME "BorderWidth" -#define SPI_METRIC_REGKEY "Control Panel\\Desktop\\WindowMetrics" -#define SPI_SCROLLWIDTH_VALNAME "ScrollWidth" -#define SPI_SCROLLHEIGHT_VALNAME "ScrollHeight" -#define SPI_CAPTIONWIDTH_VALNAME "CaptionWidth" -#define SPI_CAPTIONHEIGHT_VALNAME "CaptionHeight" -#define SPI_CAPTIONFONT_VALNAME "CaptionFont" -#define SPI_SMCAPTIONWIDTH_VALNAME "SmCaptionWidth" -#define SPI_SMCAPTIONHEIGHT_VALNAME "SmCaptionHeight" -#define SPI_SMCAPTIONFONT_VALNAME "SmCaptionFont" -#define SPI_MENUWIDTH_VALNAME "MenuWidth" -#define SPI_MENUHEIGHT_VALNAME "MenuHeight" -#define SPI_MENUFONT_VALNAME "MenuFont" -#define SPI_STATUSFONT_VALNAME "StatusFont" -#define SPI_MESSAGEFONT_VALNAME "MessageFont" - -#define SPI_SETKEYBOARDSPEED_REGKEY "Control Panel\\Keyboard" -#define SPI_SETKEYBOARDSPEED_VALNAME "KeyboardSpeed" -#define SPI_ICONHORIZONTALSPACING_REGKEY "Control Panel\\Desktop\\WindowMetrics" -#define SPI_ICONHORIZONTALSPACING_REGKEY2 "Control Panel\\Desktop" -#define SPI_ICONHORIZONTALSPACING_VALNAME "IconSpacing" -#define SPI_ICONVERTICALSPACING_REGKEY "Control Panel\\Desktop\\WindowMetrics" -#define SPI_ICONVERTICALSPACING_REGKEY2 "Control Panel\\Desktop" -#define SPI_ICONVERTICALSPACING_VALNAME "IconVerticalSpacing" -#define SPI_MINIMIZEDMETRICS_REGKEY "Control Panel\\Desktop\\WindowMetrics" -#define SPI_MINWIDTH_VALNAME "MinWidth" -#define SPI_MINHORZGAP_VALNAME "MinHorzGap" -#define SPI_MINVERTGAP_VALNAME "MinVertGap" -#define SPI_MINARRANGE_VALNAME "MinArrange" -#define SPI_SETSCREENSAVETIMEOUT_REGKEY "Control Panel\\Desktop" -#define SPI_SETSCREENSAVETIMEOUT_VALNAME "ScreenSaveTimeOut" -#define SPI_SETSCREENSAVEACTIVE_REGKEY "Control Panel\\Desktop" -#define SPI_SETSCREENSAVEACTIVE_VALNAME "ScreenSaveActive" -#define SPI_SETGRIDGRANULARITY_REGKEY "Control Panel\\Desktop" -#define SPI_SETGRIDGRANULARITY_VALNAME "GridGranularity" -#define SPI_SETKEYBOARDDELAY_REGKEY "Control Panel\\Keyboard" -#define SPI_SETKEYBOARDDELAY_VALNAME "KeyboardDelay" -#define SPI_SETICONTITLEWRAP_REGKEY1 "Control Panel\\Desktop\\WindowMetrics" -#define SPI_SETICONTITLEWRAP_REGKEY2 "Control Panel\\Desktop" -#define SPI_SETICONTITLEWRAP_VALNAME "IconTitleWrap" -#define SPI_SETMENUDROPALIGNMENT_REGKEY1 "Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows" -#define SPI_SETMENUDROPALIGNMENT_REGKEY2 "Control Panel\\Desktop" -#define SPI_SETMENUDROPALIGNMENT_VALNAME "MenuDropAlignment" -#define SPI_SETDOUBLECLKWIDTH_REGKEY1 "Control Panel\\Mouse" -#define SPI_SETDOUBLECLKWIDTH_REGKEY2 "Control Panel\\Desktop" -#define SPI_SETDOUBLECLKWIDTH_VALNAME "DoubleClickWidth" -#define SPI_SETDOUBLECLKHEIGHT_REGKEY1 "Control Panel\\Mouse" -#define SPI_SETDOUBLECLKHEIGHT_REGKEY2 "Control Panel\\Desktop" -#define SPI_SETDOUBLECLKHEIGHT_VALNAME "DoubleClickHeight" -#define SPI_SETDOUBLECLICKTIME_REGKEY "Control Panel\\Mouse" -#define SPI_SETDOUBLECLICKTIME_VALNAME "DoubleClickSpeed" -#define SPI_SETMOUSEBUTTONSWAP_REGKEY "Control Panel\\Mouse" -#define SPI_SETMOUSEBUTTONSWAP_VALNAME "SwapMouseButtons" -#define SPI_SETWORKAREA_REGKEY "Control Panel\\Desktop" -#define SPI_SETWORKAREA_VALNAME "WINE_WorkArea" -#define SPI_SETSHOWSOUNDS_REGKEY "Control Panel\\Accessibility\\ShowSounds" -#define SPI_SETSHOWSOUNDS_VALNAME "On" -#define SPI_SETKEYBOARDPREF_REGKEY "Control Panel\\Accessibility\\Keyboard Preference" -#define SPI_SETKEYBOARDPREF_VALNAME "On" -#define SPI_SETKEYBOARDPREF_REGKEY_LEGACY "Control Panel\\Accessibility" -#define SPI_SETKEYBOARDPREF_VALNAME_LEGACY "Keyboard Preference" -#define SPI_SETSCREENREADER_REGKEY "Control Panel\\Accessibility\\Blind Access" -#define SPI_SETSCREENREADER_VALNAME "On" -#define SPI_SETSCREENREADER_REGKEY_LEGACY "Control Panel\\Accessibility" -#define SPI_SETSCREENREADER_VALNAME_LEGACY "Blind Access" -#define SPI_SETFONTSMOOTHING_REGKEY "Control Panel\\Desktop" -#define SPI_SETFONTSMOOTHING_VALNAME "FontSmoothing" -#define SPI_SETLOWPOWERACTIVE_REGKEY "Control Panel\\Desktop" -#define SPI_SETLOWPOWERACTIVE_VALNAME "LowPowerActive" -#define SPI_SETPOWEROFFACTIVE_REGKEY "Control Panel\\Desktop" -#define SPI_SETPOWEROFFACTIVE_VALNAME "PowerOffActive" -#define SPI_SETDRAGFULLWINDOWS_REGKEY "Control Panel\\Desktop" -#define SPI_SETDRAGFULLWINDOWS_VALNAME "DragFullWindows" -#define SPI_SETMOUSEHOVERWIDTH_REGKEY "Control Panel\\Mouse" -#define SPI_SETMOUSEHOVERWIDTH_VALNAME "MouseHoverWidth" -#define SPI_SETMOUSEHOVERHEIGHT_REGKEY "Control Panel\\Mouse" -#define SPI_SETMOUSEHOVERHEIGHT_VALNAME "MouseHoverHeight" -#define SPI_SETMOUSEHOVERTIME_REGKEY "Control Panel\\Mouse" -#define SPI_SETMOUSEHOVERTIME_VALNAME "MouseHoverTime" -#define SPI_SETMOUSESCROLLLINES_REGKEY "Control Panel\\Desktop" -#define SPI_SETMOUSESCROLLLINES_VALNAME "WheelScrollLines" -#define SPI_SETMENUSHOWDELAY_REGKEY "Control Panel\\Desktop" -#define SPI_SETMENUSHOWDELAY_VALNAME "MenuShowDelay" -#define SPI_SETDESKWALLPAPER_REGKEY "Control Panel\\Desktop" -#define SPI_SETDESKWALLPAPER_VALNAME "Wallpaper" - -/* volatile registry branch under CURRENT_USER_REGKEY for temporary values storage */ -#define WINE_CURRENT_USER_REGKEY "Wine" - -static HWND ghTestWnd; - -static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam ); -static LRESULT CALLBACK SysParamsTestWndProc( HWND hWnd, UINT msg, WPARAM wParam, - LPARAM lParam ); -static int change_counter; -static int change_last_param; -static int last_bpp; -static BOOL displaychange_ok = FALSE, displaychange_test_active = FALSE; -static HANDLE displaychange_sem = 0; - -static LRESULT CALLBACK SysParamsTestWndProc( HWND hWnd, UINT msg, WPARAM wParam, - LPARAM lParam ) -{ - switch (msg) { - - case WM_DISPLAYCHANGE: - ok(displaychange_ok, "Unexpected WM_DISPLAYCHANGE message\n"); - last_bpp = wParam; - displaychange_ok = FALSE; - ReleaseSemaphore(displaychange_sem, 1, 0); - break; - - case WM_SETTINGCHANGE: - if (change_counter>0) { - /* ignore these messages caused by resizing of toolbars */ - if( wParam == SPI_SETWORKAREA || displaychange_test_active) break; - if( change_last_param == SPI_SETWORKAREA) { - change_last_param = wParam; - break; - } - ok(0,"too many changes counter=%d last change=%d\n", - change_counter,change_last_param); - } - change_counter++; - change_last_param = wParam; - break; - - case WM_DESTROY: - PostQuitMessage( 0 ); - break; - - /* drop through */ - default: - return( DefWindowProcA( hWnd, msg, wParam, lParam ) ); - } - - return 0; -} - -/* -Performs testing for system parameters messages -params: - - system parameter id - - supposed value of the registry key -*/ -static void test_change_message( int action, int optional ) -{ - if (change_counter==0 && optional==1) - return; - ok( 1 == change_counter, - "Missed a message: change_counter=%d\n", change_counter ); - change_counter = 0; - ok( action == change_last_param, - "Wrong action got %d expected %d\n", change_last_param, action ); - change_last_param = 0; -} - -static BOOL test_error_msg ( int rc, const char *name ) -{ - DWORD last_error = GetLastError(); - - if (rc==0) - { - if (last_error==0xdeadbeef || last_error==ERROR_INVALID_SPI_VALUE) - { - trace("%s not supported on this platform. Skipping test\n", name); - } - else if (last_error==ERROR_ACCESS_DENIED) - { - trace("%s does not have privileges to run. Skipping test\n", name); - } - else - { - trace("%s failed for reason: %d. Indicating test failure and skipping remainder of test\n",name,last_error); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,last_error); - } - return FALSE; - } - else - { - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,last_error); - return TRUE; - } -} - -/* - * Tests the HKEY_CURRENT_USER subkey value. - * The value should contain string value. - * - * Params: - * lpsSubKey - subkey name - * lpsRegName - registry entry name - * lpsTestValue - value to test - */ -static void _test_reg_key( LPCSTR subKey1, LPCSTR subKey2, LPCSTR valName1, LPCSTR valName2, LPCSTR testValue ) -{ - CHAR value[MAX_PATH]; - DWORD valueLen; - DWORD type; - HKEY hKey; - LONG rc; - int found=0; - - *value='\0'; - valueLen=sizeof(value); - RegOpenKeyA( HKEY_CURRENT_USER, subKey1, &hKey ); - rc=RegQueryValueExA( hKey, valName1, NULL, &type, (LPBYTE)value, &valueLen ); - RegCloseKey( hKey ); - if (rc==ERROR_SUCCESS) - { - ok( !strcmp( testValue, value ), - "Wrong value in registry: subKey=%s, valName=%s, testValue=%s, value=%s\n", - subKey1, valName1, testValue, value ); - found++; - } - else if (strict) - { - ok(0,"Missing registry entry: subKey=%s, valName=%s\n", - subKey1, valName1); - } - if (valName2) - { - *value='\0'; - valueLen=sizeof(value); - RegOpenKeyA( HKEY_CURRENT_USER, subKey1, &hKey ); - rc=RegQueryValueExA( hKey, valName2, NULL, &type, (LPBYTE)value, &valueLen ); - RegCloseKey( hKey ); - if (rc==ERROR_SUCCESS) - { - ok( !strcmp( testValue, value ), - "Wrong value in registry: subKey=%s, valName=%s, testValue=%s, value=%s\n", - subKey1, valName2, testValue, value ); - found++; - } - else if (strict) - { - ok( 0,"Missing registry entry: subKey=%s, valName=%s\n", - subKey1, valName2 ); - } - } - if (subKey2 && !strict) - { - *value='\0'; - valueLen=sizeof(value); - RegOpenKeyA( HKEY_CURRENT_USER, subKey2, &hKey ); - rc=RegQueryValueExA( hKey, valName1, NULL, &type, (LPBYTE)value, &valueLen ); - RegCloseKey( hKey ); - if (rc==ERROR_SUCCESS) - { - ok( !strcmp( testValue, value ), - "Wrong value in registry: subKey=%s, valName=%s, testValue=%s, value=%s\n", - subKey2, valName1, testValue, value ); - found++; - } - else if (strict) - { - ok( 0,"Missing registry entry: subKey=%s, valName=%s\n", - subKey2, valName1 ); - } - if (valName2) - { - *value='\0'; - valueLen=sizeof(value); - RegOpenKeyA( HKEY_CURRENT_USER, subKey2, &hKey ); - rc=RegQueryValueExA( hKey, valName2, NULL, &type, (LPBYTE)value, &valueLen ); - RegCloseKey( hKey ); - if (rc==ERROR_SUCCESS) - { - ok( !strcmp( testValue, value ), - "Wrong value in registry: subKey=%s, valName=%s, testValue=%s, value=%s\n", - subKey2, valName2, testValue, value ); - found++; - } - else if (strict) - { - ok( 0,"Missing registry entry: subKey=%s, valName=%s\n", - subKey2, valName2 ); - } - } - } - ok(found,"Missing registry values: %s or %s in keys: %s or %s\n", - valName1, (valName2?valName2:""), subKey1, (subKey2?subKey2:"") ); -} - -#define test_reg_key( subKey, valName, testValue ) \ - _test_reg_key( subKey, NULL, valName, NULL, testValue ) -#define test_reg_key_ex( subKey1, subKey2, valName, testValue ) \ - _test_reg_key( subKey1, subKey2, valName, NULL, testValue ) -#define test_reg_key_ex2( subKey1, subKey2, valName1, valName2, testValue ) \ - _test_reg_key( subKey1, subKey2, valName1, valName2, testValue ) - -/* get a metric from the registry. If the value is negative - * it is assumed to be in twips and converted to pixels */ -static UINT metricfromreg( const char *keyname, const char *valname, int dpi) -{ - HKEY hkey; - char buf[64]; - DWORD ret; - DWORD size, type; - int value; - - RegOpenKeyA( HKEY_CURRENT_USER, keyname, &hkey ); - size = sizeof(buf); - ret=RegQueryValueExA( hkey, valname, NULL, &type, (LPBYTE)buf, &size ); - RegCloseKey( hkey ); - if( ret != ERROR_SUCCESS) return -1; - value = atoi( buf); - if( value < 0) - value = ( -value * dpi + 720) / 1440; - return value; -} - -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; - -/* get logfont from the registry */ -static int lffromreg( const char *keyname, const char *valname, LOGFONTA *plf) -{ - HKEY hkey; - LOGFONTW lfw; - DWORD ret, size, type; - - RegOpenKeyA( HKEY_CURRENT_USER, keyname, &hkey ); - size = sizeof( lfw); - ret=RegQueryValueExA( hkey, valname, NULL, &type, (LPBYTE)&lfw, &size ); - RegCloseKey( hkey ); - ok( ret == ERROR_SUCCESS, "Key \"%s\" value \"%s\" not found\n", keyname, valname); - if( ret != ERROR_SUCCESS) - return FALSE; - if( size <= sizeof( LOGFONT16)) { - LOGFONT16 *plf16 = (LOGFONT16*) &lfw; - plf->lfHeight = plf16->lfHeight; - plf->lfWidth = plf16->lfWidth; - plf->lfEscapement = plf16->lfEscapement; - plf->lfOrientation = plf16->lfOrientation; - plf->lfWeight = plf16->lfWeight; - plf->lfItalic = plf16->lfItalic; - plf->lfUnderline = plf16->lfUnderline; - plf->lfStrikeOut = plf16->lfStrikeOut; - plf->lfCharSet = plf16->lfCharSet; - plf->lfOutPrecision = plf16->lfOutPrecision; - plf->lfClipPrecision = plf16->lfClipPrecision; - plf->lfQuality = plf16->lfQuality; - plf->lfPitchAndFamily = plf16->lfPitchAndFamily; - memcpy( plf->lfFaceName, plf16->lfFaceName, LF_FACESIZE ); - } else if( size <= sizeof( LOGFONTA)) { - plf = (LOGFONTA*) &lfw; - } else { - plf->lfHeight = lfw.lfHeight; - plf->lfWidth = lfw.lfWidth; - plf->lfEscapement = lfw.lfEscapement; - plf->lfOrientation = lfw.lfOrientation; - plf->lfWeight = lfw.lfWeight; - plf->lfItalic = lfw.lfItalic; - plf->lfUnderline = lfw.lfUnderline; - plf->lfStrikeOut = lfw.lfStrikeOut; - plf->lfCharSet = lfw.lfCharSet; - plf->lfOutPrecision = lfw.lfOutPrecision; - plf->lfClipPrecision = lfw.lfClipPrecision; - plf->lfQuality = lfw.lfQuality; - plf->lfPitchAndFamily = lfw.lfPitchAndFamily; - WideCharToMultiByte( CP_ACP, 0, lfw.lfFaceName, -1, plf->lfFaceName, - LF_FACESIZE, NULL, NULL); - - } - return TRUE; -} - -static void test_SPI_SETBEEP( void ) /* 2 */ -{ - BOOL rc; - BOOL old_b; - BOOL b; - BOOL curr_val; - - trace("testing SPI_{GET,SET}BEEP\n"); - SetLastError(0xdeadbeef); - rc=SystemParametersInfoA( SPI_GETBEEP, 0, &old_b, 0 ); - if (!test_error_msg(rc,"SPI_{GET,SET}BEEP")) - return; - - curr_val = TRUE; - rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - test_change_message( SPI_SETBEEP, 0 ); - test_reg_key( SPI_SETBEEP_REGKEY, - SPI_SETBEEP_VALNAME, - curr_val ? "Yes" : "No" ); - rc=SystemParametersInfoA( SPI_GETBEEP, 0, &b, 0 ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - eq( b, curr_val, "SPI_{GET,SET}BEEP", "%d" ); - rc=SystemParametersInfoW( SPI_GETBEEP, 0, &b, 0 ); - if (rc!=0 || GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED) - { - ok(rc!=0,"SystemParametersInfoW: rc=%d err=%d\n",rc,GetLastError()); - eq( b, curr_val, "SystemParametersInfoW", "%d" ); - } - - /* is a message sent for the second change? */ - rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - test_change_message( SPI_SETBEEP, 0 ); - - curr_val = FALSE; - rc=SystemParametersInfoW( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - ok(rc!=0,"SystemParametersInfo: rc=%d err=%d\n",rc,GetLastError()); - test_change_message( SPI_SETBEEP, 0 ); - test_reg_key( SPI_SETBEEP_REGKEY, - SPI_SETBEEP_VALNAME, - curr_val ? "Yes" : "No" ); - rc=SystemParametersInfoA( SPI_GETBEEP, 0, &b, 0 ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - eq( b, curr_val, "SPI_{GET,SET}BEEP", "%d" ); - rc=SystemParametersInfoW( SPI_GETBEEP, 0, &b, 0 ); - if (rc!=0 || GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED) - { - ok(rc!=0,"SystemParametersInfoW: rc=%d err=%d\n",rc,GetLastError()); - eq( b, curr_val, "SystemParametersInfoW", "%d" ); - } - ok( MessageBeep( MB_OK ), "Return value of MessageBeep when sound is disabled\n" ); - - rc=SystemParametersInfoA( SPI_SETBEEP, old_b, 0, SPIF_UPDATEINIFILE ); - ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n",rc,GetLastError()); -} - -static const char *setmouse_valuenames[3] = { - SPI_SETMOUSE_VALNAME1, - SPI_SETMOUSE_VALNAME2, - SPI_SETMOUSE_VALNAME3 -}; - -/* - * Runs check for one setting of spi_setmouse. - */ -static void run_spi_setmouse_test( int curr_val[], POINT *req_change, POINT *proj_change, - int nchange ) -{ - BOOL rc; - INT mi[3]; - static int aw_turn = 0; - static BOOL w_implemented = 1; - - char buf[20]; - int i; - - aw_turn++; - rc=0; - if ((aw_turn % 2!=0) && (w_implemented)) - { - /* call unicode on odd (non even) calls */ - SetLastError(0xdeadbeef); - rc=SystemParametersInfoW( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - w_implemented = 0; - trace("SystemParametersInfoW not supported on this platform\n"); - } - } - - if ((aw_turn % 2==0) || (!w_implemented)) - { - /* call ascii version on even calls or if unicode is not available */ - rc=SystemParametersInfoA( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - } - - ok(rc!=0,"SystemParametersInfo: rc=%d err=%d\n",rc,GetLastError()); - test_change_message( SPI_SETMOUSE, 0 ); - for (i = 0; i < 3; i++) - { - sprintf( buf, "%d", curr_val[i] ); - test_reg_key( SPI_SETMOUSE_REGKEY, setmouse_valuenames[i], buf ); - } - - rc=SystemParametersInfoA( SPI_GETMOUSE, 0, mi, 0 ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - for (i = 0; i < 3; i++) - { - ok(mi[i] == curr_val[i], - "incorrect value for %d: %d != %d\n", i, mi[i], curr_val[i]); - } - - if (w_implemented) - { - rc=SystemParametersInfoW( SPI_GETMOUSE, 0, mi, 0 ); - ok(rc!=0,"SystemParametersInfoW: rc=%d err=%d\n",rc,GetLastError()); - for (i = 0; i < 3; i++) - { - ok(mi[i] == curr_val[i], - "incorrect value for %d: %d != %d\n", i, mi[i], curr_val[i]); - } - } - - if (0) - { - /* FIXME: this always fails for me - AJ */ - for (i = 0; i < nchange; i++) - { - POINT mv; - mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 0, 0, 0, 0 ); - mouse_event( MOUSEEVENTF_MOVE, req_change[i].x, req_change[i].y, 0, 0 ); - GetCursorPos( &mv ); - ok( proj_change[i].x == mv.x, "Projected dx and real dx comparison. May fail under high load.\n" ); - ok( proj_change[i].y == mv.y, "Projected dy equals real dy. May fail under high load.\n" ); - } - } -} - -static void test_SPI_SETMOUSE( void ) /* 4 */ -{ - BOOL rc; - INT old_mi[3]; - - /* win nt default values - 6, 10, 1 */ - INT curr_val[3] = {6, 10, 1}; - - /* requested and projected mouse movements */ - POINT req_change[] = { {6, 6}, { 7, 6}, { 8, 6}, {10, 10}, {11, 10}, {100, 100} }; - POINT proj_change1[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} }; - POINT proj_change2[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {44, 20}, {400, 400} }; - POINT proj_change3[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} }; - POINT proj_change4[] = { {6, 6}, { 7, 6}, { 8, 6}, {10, 10}, {11, 10}, {100, 100} }; - POINT proj_change5[] = { {6, 6}, { 7, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} }; - POINT proj_change6[] = { {6, 6}, {28, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} }; - POINT proj_change7[] = { {6, 6}, {14, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} }; - POINT proj_change8[] = { {6, 6}, {28, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} }; - - int nchange = sizeof( req_change ) / sizeof( POINT ); - - trace("testing SPI_{GET,SET}MOUSE\n"); - SetLastError(0xdeadbeef); - rc=SystemParametersInfoA( SPI_GETMOUSE, 0, old_mi, 0 ); - if (!test_error_msg(rc,"SPI_{GET,SET}MOUSE")) - return; - - run_spi_setmouse_test( curr_val, req_change, proj_change1, nchange ); - - /* acceleration change */ - curr_val[2] = 2; - run_spi_setmouse_test( curr_val, req_change, proj_change2, nchange ); - - /* acceleration change */ - curr_val[2] = 3; - run_spi_setmouse_test( curr_val, req_change, proj_change3, nchange ); - - /* acceleration change */ - curr_val[2] = 0; - run_spi_setmouse_test( curr_val, req_change, proj_change4, nchange ); - - /* threshold change */ - curr_val[2] = 1; - curr_val[0] = 7; - run_spi_setmouse_test( curr_val, req_change, proj_change5, nchange ); - - /* threshold change */ - curr_val[2] = 2; - curr_val[0] = 6; - curr_val[1] = 6; - run_spi_setmouse_test( curr_val, req_change, proj_change6, nchange ); - - /* threshold change */ - curr_val[1] = 7; - run_spi_setmouse_test( curr_val, req_change, proj_change7, nchange ); - - /* threshold change */ - curr_val[1] = 5; - run_spi_setmouse_test( curr_val, req_change, proj_change8, nchange ); - - rc=SystemParametersInfoA( SPI_SETMOUSE, 0, old_mi, SPIF_UPDATEINIFILE ); - ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n",rc,GetLastError()); -} - -static void test_setborder(UINT curr_val, int usesetborder, int dpi) -{ - BOOL rc; - UINT border, regval; - INT frame; - NONCLIENTMETRICSA ncm; - - ncm.cbSize = sizeof( ncm); - rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - if( usesetborder) { - rc=SystemParametersInfoA( SPI_SETBORDER, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - test_change_message( SPI_SETBORDER, 1 ); - } else { /* set non client metrics */ - ncm.iBorderWidth = curr_val; - rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, 0, &ncm, SPIF_UPDATEINIFILE| - SPIF_SENDCHANGE); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - test_change_message( SPI_SETNONCLIENTMETRICS, 1 ); - } - if( curr_val) { /* skip if 0, some windows versions return 0 others 1 */ - regval = metricfromreg( SPI_SETBORDER_REGKEY2, SPI_SETBORDER_VALNAME, dpi); - if( regval != curr_val) - regval = metricfromreg( SPI_SETBORDER_REGKEY, SPI_SETBORDER_VALNAME, dpi); - ok( regval==curr_val, "wrong value in registry %d, expected %d\n", regval, curr_val); - } - /* minimum border width is 1 */ - if (curr_val == 0) curr_val = 1; - /* should be the same as the non client metrics */ - rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - eq( (UINT)ncm.iBorderWidth, curr_val, "NonClientMetric.iBorderWidth", "%d"); - /* and from SPI_GETBORDER */ - rc=SystemParametersInfoA( SPI_GETBORDER, 0, &border, 0 ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - eq( border, curr_val, "SPI_{GET,SET}BORDER", "%d"); - /* test some SystemMetrics */ - frame = curr_val + GetSystemMetrics( SM_CXDLGFRAME ); - eq( frame, GetSystemMetrics( SM_CXFRAME ), "SM_CXFRAME", "%d" ); - eq( frame, GetSystemMetrics( SM_CYFRAME ), "SM_CYFRAME", "%d" ); - eq( frame, GetSystemMetrics( SM_CXSIZEFRAME ), "SM_CXSIZEFRAME", "%d" ); - eq( frame, GetSystemMetrics( SM_CYSIZEFRAME ), "SM_CYSIZEFRAME", "%d" ); -} - -static void test_SPI_SETBORDER( void ) /* 6 */ -{ - BOOL rc; - UINT old_border; - NONCLIENTMETRICSA ncmsave; - INT CaptionWidth; - - ncmsave.cbSize = sizeof( ncmsave); - rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncmsave, 0); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - /* CaptionWidth from the registry may have different value of iCaptionWidth - * from the non client metrics (observed on WinXP). - * Fix this so we can safely restore settings with the nonclientmetrics */ - CaptionWidth = metricfromreg( - "Control Panel\\Desktop\\WindowMetrics","CaptionWidth", dpi); - ncmsave.iCaptionWidth = CaptionWidth; - - /* These tests hang when XFree86 4.0 for Windows is running (tested on - * WinNT, SP2, Cygwin/XFree 4.1.0. Skip the test when XFree86 is - * running. - */ - if (FindWindowA( NULL, "Cygwin/XFree86" )) - return; - - trace("testing SPI_{GET,SET}BORDER\n"); - - SetLastError(0xdeadbeef); - rc=SystemParametersInfoA( SPI_GETBORDER, 0, &old_border, 0 ); - if (!test_error_msg(rc,"SPI_{GET,SET}BORDER")) - return; - /* This will restore sane values if the test hang previous run. */ - if ( old_border == 7 || old_border == 20 ) - old_border = 1; - - /* The SPI_SETBORDER seems to be buggy on Win9x/ME (looks like you need to - * do it twice to make the intended change). So skip parts of the tests on - * those platforms */ - if( !iswin9x) { - /* win2k3 fails if you set the same border twice, or if size is 0 */ - test_setborder(2, 1, dpi); - test_setborder(1, 1, dpi); - test_setborder(3, 1, dpi); - } - test_setborder(1, 0, dpi); - test_setborder(0, 0, dpi); - test_setborder(3, 0, dpi); - - rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, 0, &ncmsave, - SPIF_UPDATEINIFILE| SPIF_SENDCHANGE); - test_change_message( SPI_SETNONCLIENTMETRICS, 1 ); - ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n", - rc,GetLastError()); -} - -static void test_SPI_SETKEYBOARDSPEED( void ) /* 10 */ -{ - BOOL rc; - UINT old_speed; - const UINT vals[]={0,20,31}; - unsigned int i; - - trace("testing SPI_{GET,SET}KEYBOARDSPEED\n"); - SetLastError(0xdeadbeef); - rc=SystemParametersInfoA( SPI_GETKEYBOARDSPEED, 0, &old_speed, 0 ); - if (!test_error_msg(rc,"SPI_{GET,SET}KEYBOARDSPEED")) - return; - - for (i=0;i 100 ? 1 : 314; - im_cur.lfFont.lfItalic = !im_cur.lfFont.lfItalic; - im_cur.lfFont.lfStrikeOut = !im_cur.lfFont.lfStrikeOut; - im_cur.lfFont.lfUnderline = !im_cur.lfFont.lfUnderline; - im_cur.lfFont.lfCharSet = im_cur.lfFont.lfCharSet ? 0 : 1; - im_cur.lfFont.lfOutPrecision = im_cur.lfFont.lfOutPrecision == OUT_DEFAULT_PRECIS ? - OUT_TT_PRECIS : OUT_DEFAULT_PRECIS; - im_cur.lfFont.lfClipPrecision ^= CLIP_LH_ANGLES; - im_cur.lfFont.lfPitchAndFamily = im_cur.lfFont.lfPitchAndFamily ? 0 : 1; - im_cur.lfFont.lfQuality = im_cur.lfFont.lfQuality == DEFAULT_QUALITY ? - DRAFT_QUALITY : DEFAULT_QUALITY; - if( strcmp( im_cur.lfFont.lfFaceName, "MS Serif")) - strcpy( im_cur.lfFont.lfFaceName, "MS Serif"); - else - strcpy( im_cur.lfFont.lfFaceName, "MS Sans Serif"); - - rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_cur, SPIF_UPDATEINIFILE ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - - rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - /* test GET <-> SETICONMETRICS */ - eq( im_new.iHorzSpacing, im_cur.iHorzSpacing, "iHorzSpacing", "%d" ); - eq( im_new.iVertSpacing, im_cur.iVertSpacing, "iVertSpacing", "%d" ); - eq( im_new.iTitleWrap, im_cur.iTitleWrap, "iTitleWrap", "%d" ); - eq( im_new.lfFont.lfHeight, im_cur.lfFont.lfHeight, "lfHeight", "%d" ); - eq( im_new.lfFont.lfWidth, im_cur.lfFont.lfWidth, "lfWidth", "%d" ); - eq( im_new.lfFont.lfEscapement, im_cur.lfFont.lfEscapement, "lfEscapement", "%d" ); - eq( im_new.lfFont.lfWeight, im_cur.lfFont.lfWeight, "lfWeight", "%d" ); - eq( im_new.lfFont.lfItalic, im_cur.lfFont.lfItalic, "lfItalic", "%d" ); - eq( im_new.lfFont.lfStrikeOut, im_cur.lfFont.lfStrikeOut, "lfStrikeOut", "%d" ); - eq( im_new.lfFont.lfUnderline, im_cur.lfFont.lfUnderline, "lfUnderline", "%d" ); - eq( im_new.lfFont.lfCharSet, im_cur.lfFont.lfCharSet, "lfCharSet", "%d" ); - eq( im_new.lfFont.lfOutPrecision, im_cur.lfFont.lfOutPrecision, "lfOutPrecision", "%d" ); - eq( im_new.lfFont.lfClipPrecision, im_cur.lfFont.lfClipPrecision, "lfClipPrecision", "%d" ); - eq( im_new.lfFont.lfPitchAndFamily, im_cur.lfFont.lfPitchAndFamily, "lfPitchAndFamily", "%d" ); - eq( im_new.lfFont.lfQuality, im_cur.lfFont.lfQuality, "lfQuality", "%d" ); - ok( !strcmp( im_new.lfFont.lfFaceName, im_cur.lfFont.lfFaceName), - "wrong facename \"%s\", should be \"%s\"\n", im_new.lfFont.lfFaceName, - im_cur.lfFont.lfFaceName); - /* test some system metrics */ - eq( GetSystemMetrics( SM_CXICONSPACING ), - im_new.iHorzSpacing, "iHorzSpacing", "%d" ); - eq( GetSystemMetrics( SM_CYICONSPACING ), - im_new.iVertSpacing, "iVertSpacing", "%d" ); - /* check some registry values */ - regval = metricfromreg( SPI_ICONHORIZONTALSPACING_REGKEY, SPI_ICONHORIZONTALSPACING_VALNAME, dpi); - ok( regval==im_cur.iHorzSpacing, "wrong value in registry %d, expected %d\n", regval, im_cur.iHorzSpacing); - regval = metricfromreg( SPI_ICONVERTICALSPACING_REGKEY, SPI_ICONVERTICALSPACING_VALNAME, dpi); - ok( regval==im_cur.iVertSpacing, "wrong value in registry %d, expected %d\n", regval, im_cur.iVertSpacing); - regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY2, SPI_SETICONTITLEWRAP_VALNAME, dpi); - if( regval != im_cur.iTitleWrap) - regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY1, SPI_SETICONTITLEWRAP_VALNAME, dpi); - ok( regval==im_cur.iTitleWrap, "wrong value in registry %d, expected %d\n", regval, im_cur.iTitleWrap); - /* test some values from other SPI_GETxxx calls */ - rc = SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &spacing, 0 ); - ok( rc && spacing == im_cur.iHorzSpacing, - "SystemParametersInfoA( SPI_ICONHORIZONTALSPACING...) failed or returns wrong value %d instead of %d\n", - spacing, im_cur.iHorzSpacing); - rc = SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &spacing, 0 ); - ok( rc && spacing == im_cur.iVertSpacing, - "SystemParametersInfoA( SPI_ICONVERTICALSPACING...) failed or returns wrong value %d instead of %d\n", - spacing, im_cur.iVertSpacing); - rc = SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0, &wrap, 0 ); - ok( rc && wrap == im_cur.iTitleWrap, - "SystemParametersInfoA( SPI_GETICONTITLEWRAP...) failed or returns wrong value %d instead of %d\n", - wrap, im_cur.iTitleWrap); - /* restore old values */ - rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_orig,SPIF_UPDATEINIFILE ); - ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n",rc,GetLastError()); - - rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - - eq( im_new.iHorzSpacing, im_orig.iHorzSpacing, "iHorzSpacing", "%d" ); - eq( im_new.iVertSpacing, im_orig.iVertSpacing, "iVertSpacing", "%d" ); - eq( im_new.iTitleWrap, im_orig.iTitleWrap, "iTitleWrap", "%d" ); -} - -static void test_SPI_SETWORKAREA( void ) /* 47 */ -{ - BOOL rc; - RECT old_area; - RECT area; - RECT curr_val; - - trace("testing SPI_{GET,SET}WORKAREA\n"); - SetLastError(0xdeadbeef); - rc=SystemParametersInfoA(SPI_GETWORKAREA, 0, &old_area, 0); - if (!test_error_msg(rc,"SPI_{GET,SET}WORKAREA")) - return; - - /* Modify the work area only minimally as this causes the icons that - * fall outside it to be moved around thus requiring the user to - * reposition them manually one by one. - * Changing the work area by just one pixel should make this occurrence - * reasonably unlikely. - */ - curr_val.left = old_area.left; - curr_val.top = old_area.top; - curr_val.right = old_area.right-1; - curr_val.bottom = old_area.bottom-1; - rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &curr_val, - SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - test_change_message( SPI_SETWORKAREA, 0 ); - rc=SystemParametersInfoA( SPI_GETWORKAREA, 0, &area, 0 ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - eq( area.left, curr_val.left, "left", "%d" ); - eq( area.top, curr_val.top, "top", "%d" ); - eq( area.right, curr_val.right, "right", "%d" ); - eq( area.bottom, curr_val.bottom, "bottom", "%d" ); - - rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &old_area, - SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ); - ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n",rc,GetLastError()); - test_change_message( SPI_SETWORKAREA, 0 ); - rc=SystemParametersInfoA( SPI_GETWORKAREA, 0, &area, 0 ); - ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError()); - eq( area.left, old_area.left, "left", "%d" ); - eq( area.top, old_area.top, "top", "%d" ); - eq( area.right, old_area.right, "right", "%d" ); - eq( area.bottom, old_area.bottom, "bottom", "%d" ); -} - -static void test_SPI_SETSHOWSOUNDS( void ) /* 57 */ -{ - BOOL rc; - BOOL old_b; - const UINT vals[]={TRUE,FALSE}; - unsigned int i; - - trace("testing SPI_{GET,SET}SHOWSOUNDS\n"); - SetLastError(0xdeadbeef); - rc=SystemParametersInfoA( SPI_GETSHOWSOUNDS, 0, &old_b, 0 ); - /* SPI_{GET,SET}SHOWSOUNDS is completely broken on Win9x */ - if (!test_error_msg(rc,"SPI_{GET,SET}SHOWSOUNDS")) - return; - - for (i=0;itmHeight = -1; - if( psz) *psz = 10; - if( hfont) DeleteObject( hfont); - return; - } - GetTextMetricsA( hdc, ptm); - if( psz) - if( !(*psz = _GdiGetCharDimensions( hdc, ptm, NULL))) - *psz = 10; - SelectObject( hdc, hfontsav); - DeleteObject( hfont); -} - -static int gsm_error_ctr; -static UINT smcxsmsize = 999999999; - -#define ok_gsm( i, e)\ -{\ - int exp = (e);\ - int act = GetSystemMetrics( (i));\ - if( exp != act) gsm_error_ctr++;\ - ok( !( exp != act),"GetSystemMetrics(%s): expected %d actual %d\n", #i, exp,act);\ -} -#define ok_gsm_2( i, e1, e2)\ -{\ - int exp1 = (e1);\ - int exp2 = (e2);\ - int act = GetSystemMetrics( (i));\ - if( exp1 != act && exp2 != act) gsm_error_ctr++;\ - ok( !( exp1 != act && exp2 != act), "GetSystemMetrics(%s): expected %d or %d actual %d\n", #i, exp1, exp2, act);\ -} -#define ok_gsm_3( i, e1, e2, e3)\ -{\ - int exp1 = (e1);\ - int exp2 = (e2);\ - int exp3 = (e3);\ - int act = GetSystemMetrics( (i));\ - if( exp1 != act && exp2 != act && exp3 != act) gsm_error_ctr++;\ - ok( !( exp1 != act && exp2 != act && exp3 != act),"GetSystemMetrics(%s): expected %d or %d or %d actual %d\n", #i, exp1, exp2, exp3, act);\ -} - -static void test_GetSystemMetrics( void) -{ - TEXTMETRICA tmMenuFont; - UINT IconSpacing, IconVerticalSpacing; - - HDC hdc = CreateIC( "Display", 0, 0, 0); - UINT avcwCaption; - INT CaptionWidth; - MINIMIZEDMETRICS minim; - NONCLIENTMETRICS ncm; - minim.cbSize = sizeof( minim); - ncm.cbSize = sizeof( ncm); - SystemParametersInfo( SPI_GETMINIMIZEDMETRICS, 0, &minim, 0); - SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); - - /* CaptionWidth from the registry may have different value of iCaptionWidth - * from the non client metrics (observed on WinXP) */ - CaptionWidth = metricfromreg( - "Control Panel\\Desktop\\WindowMetrics","CaptionWidth", dpi); - get_text_metr_size( hdc, &ncm.lfMenuFont, &tmMenuFont, NULL); - get_text_metr_size( hdc, &ncm.lfCaptionFont, NULL, &avcwCaption); - /* FIXME: use icon metric */ - if( !SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &IconVerticalSpacing, 0)) - IconVerticalSpacing = 0; - if( !SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &IconSpacing, 0 )) - IconSpacing = 0; - /* reset error counters */ - gsm_error_ctr = 0; - - /* the tests: */ - - /* SM_CXSCREEN, cannot test these two */ - /* SM_CYSCREEN */ - ok_gsm( SM_CXVSCROLL, ncm.iScrollWidth); - ok_gsm( SM_CYHSCROLL, ncm.iScrollWidth); - ok_gsm( SM_CYCAPTION, ncm.iCaptionHeight+1); - ok_gsm( SM_CXBORDER, 1); - ok_gsm( SM_CYBORDER, 1); - ok_gsm( SM_CXDLGFRAME, 3); - ok_gsm( SM_CYDLGFRAME, 3); - ok_gsm( SM_CYVTHUMB, ncm.iScrollHeight); - ok_gsm( SM_CXHTHUMB, ncm.iScrollHeight); - /* SM_CXICON */ - /* SM_CYICON */ - /* SM_CXCURSOR */ - /* SM_CYCURSOR */ - ok_gsm( SM_CYMENU, ncm.iMenuHeight + 1); - ok_gsm( SM_CXFULLSCREEN, - GetSystemMetrics( SM_CXMAXIMIZED) - 2 * GetSystemMetrics( SM_CXFRAME)); - ok_gsm( SM_CYFULLSCREEN, - GetSystemMetrics( SM_CYMAXIMIZED) - GetSystemMetrics( SM_CYMIN)); - /* SM_CYKANJIWINDOW */ - /* SM_MOUSEPRESENT */ - ok_gsm( SM_CYVSCROLL, ncm.iScrollHeight); - ok_gsm( SM_CXHSCROLL, ncm.iScrollHeight); - /* SM_DEBUG */ - /* SM_SWAPBUTTON */ - /* SM_RESERVED1 */ - /* SM_RESERVED2 */ - /* SM_RESERVED3 */ - /* SM_RESERVED4 */ - ok_gsm( SM_CXMIN, 3 * max( CaptionWidth, 8) + GetSystemMetrics( SM_CYSIZE) + - 4 + 4 * avcwCaption + 2 * GetSystemMetrics( SM_CXFRAME)); - ok_gsm( SM_CYMIN, GetSystemMetrics( SM_CYCAPTION) + - 2 * GetSystemMetrics( SM_CYFRAME)); - ok_gsm_2( SM_CXSIZE, - ncm.iCaptionWidth, /* classic/standard windows style */ - GetSystemMetrics( SM_CYCAPTION) - 1 /* WinXP style */ - ); - ok_gsm( SM_CYSIZE, ncm.iCaptionHeight); - ok_gsm( SM_CXFRAME, ncm.iBorderWidth + 3); - ok_gsm( SM_CYFRAME, ncm.iBorderWidth + 3); - ok_gsm( SM_CXMINTRACK, GetSystemMetrics( SM_CXMIN)); - ok_gsm( SM_CYMINTRACK, GetSystemMetrics( SM_CYMIN)); - /* SM_CXDOUBLECLK */ - /* SM_CYDOUBLECLK */ - if( IconSpacing) ok_gsm( SM_CXICONSPACING, IconSpacing); - if( IconVerticalSpacing) ok_gsm( SM_CYICONSPACING, IconVerticalSpacing); - /* SM_MENUDROPALIGNMENT */ - /* SM_PENWINDOWS */ - /* SM_DBCSENABLED */ - /* SM_CMOUSEBUTTONS */ - /* SM_SECURE */ - ok_gsm( SM_CXEDGE, 2); - ok_gsm( SM_CYEDGE, 2); - ok_gsm( SM_CXMINSPACING, GetSystemMetrics( SM_CXMINIMIZED) + minim.iHorzGap ); - ok_gsm( SM_CYMINSPACING, GetSystemMetrics( SM_CYMINIMIZED) + minim.iVertGap ); - /* SM_CXSMICON */ - /* SM_CYSMICON */ - ok_gsm( SM_CYSMCAPTION, ncm.iSmCaptionHeight + 1); - ok_gsm_3( SM_CXSMSIZE, - ncm.iSmCaptionWidth, /* classic/standard windows style */ - GetSystemMetrics( SM_CYSMCAPTION) - 1, /* WinXP style */ - smcxsmsize /* winXP seems to cache this value: setnonclientmetric - does not change it */ - ); - ok_gsm( SM_CYSMSIZE, GetSystemMetrics( SM_CYSMCAPTION) - 1); - ok_gsm( SM_CXMENUSIZE, ncm.iMenuWidth); - ok_gsm( SM_CYMENUSIZE, ncm.iMenuHeight); - /* SM_ARRANGE */ - ok_gsm( SM_CXMINIMIZED, minim.iWidth + 6); - ok_gsm( SM_CYMINIMIZED, GetSystemMetrics( SM_CYCAPTION) + 5); - ok_gsm( SM_CXMAXTRACK, GetSystemMetrics( SM_CXVIRTUALSCREEN) + - 4 + 2 * GetSystemMetrics( SM_CXFRAME)); - ok_gsm( SM_CYMAXTRACK, GetSystemMetrics( SM_CYVIRTUALSCREEN) + - 4 + 2 * GetSystemMetrics( SM_CYFRAME)); - /* the next two cannot really be tested as they depend on (application) - * toolbars */ - /* SM_CXMAXIMIZED */ - /* SM_CYMAXIMIZED */ - /* SM_NETWORK */ - /* */ - /* */ - /* */ - /* SM_CLEANBOOT */ - /* SM_CXDRAG */ - /* SM_CYDRAG */ - /* SM_SHOWSOUNDS */ - ok_gsm( SM_CXMENUCHECK, - ((tmMenuFont.tmHeight + tmMenuFont.tmExternalLeading+1)/2)*2-1); - ok_gsm( SM_CYMENUCHECK, - ((tmMenuFont.tmHeight + tmMenuFont.tmExternalLeading+1)/2)*2-1); - /* SM_SLOWMACHINE */ - /* SM_MIDEASTENABLED */ - /* SM_MOUSEWHEELPRESENT */ - /* SM_XVIRTUALSCREEN */ - /* SM_YVIRTUALSCREEN */ - /* SM_CXVIRTUALSCREEN */ - /* SM_CYVIRTUALSCREEN */ - /* SM_CMONITORS */ - /* SM_SAMEDISPLAYFORMAT */ - /* SM_IMMENABLED */ - /* SM_CXFOCUSBORDER */ - /* SM_CYFOCUSBORDER */ - /* SM_TABLETPC */ - /* SM_MEDIACENTER */ - /* SM_CMETRICS */ - /* end of tests */ - if( gsm_error_ctr ) { /* if any errors where found */ - trace( "BorderWidth %d CaptionWidth %d CaptionHeight %d IconSpacing %d IconVerticalSpacing %d\n", - ncm.iBorderWidth, ncm.iCaptionWidth, ncm.iCaptionHeight, IconSpacing, IconVerticalSpacing); - trace( "MenuHeight %d MenuWidth %d ScrollHeight %d ScrollWidth %d SmCaptionHeight %d SmCaptionWidth %d\n", - ncm.iMenuHeight, ncm.iMenuWidth, ncm.iScrollHeight, ncm.iScrollWidth, ncm.iSmCaptionHeight, ncm.iSmCaptionWidth); - trace( "Captionfontchar width %d MenuFont %d,%d CaptionWidth from registry: %d\n", - avcwCaption, tmMenuFont.tmHeight, tmMenuFont.tmExternalLeading, CaptionWidth); - } - ReleaseDC( 0, hdc); -} - -static void test_EnumDisplaySettings(void) -{ - DEVMODE devmode; - DWORD val; - HDC hdc; - DWORD num; - - memset(&devmode, 0, sizeof(devmode)); - devmode.dmSize = sizeof(devmode); - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode); - - hdc = GetDC(0); - val = GetDeviceCaps(hdc, BITSPIXEL); - ok(devmode.dmBitsPerPel == val, "GetDeviceCaps(BITSPIXEL) returned %d, EnumDisplaySettings returned %d\n", - val, devmode.dmBitsPerPel); - - val = GetDeviceCaps(hdc, NUMCOLORS); - if(devmode.dmBitsPerPel <= 8) { - ok(val == 256, "Screen bpp is %d, NUMCOLORS returned %d\n", devmode.dmBitsPerPel, val); - } else { - ok(val == -1, "Screen bpp is %d, NUMCOLORS returned %d\n", devmode.dmBitsPerPel, val); - } - - ReleaseDC(0, hdc); - - num = 1; - while (1) { - SetLastError (0xdeadbeef); - if (!EnumDisplaySettings(NULL, num++, &devmode)) { - DWORD le = GetLastError(); - ok(le == ERROR_NO_MORE_FILES || - le == 0xdeadbeef, /* XP, 2003 */ - "Expected ERROR_NO_MORE_FILES or 0xdeadbeef, got %d\n", le); - break; - } - } -} - -START_TEST(sysparams) -{ - int argc; - char** argv; - WNDCLASSA wc; - MSG msg; - HANDLE hThread; - DWORD dwThreadId; - HANDLE hInstance, hdll; - - hdll = GetModuleHandleA("user32.dll"); - pChangeDisplaySettingsExA=(void*)GetProcAddress(hdll, "ChangeDisplaySettingsExA"); - - hInstance = GetModuleHandleA( NULL ); - hdc = GetDC(0); - dpi = GetDeviceCaps( hdc, LOGPIXELSY); - iswin9x = GetVersion() & 0x80000000; - - /* This test requires interactivity, if we don't have it, give up */ - if (!SystemParametersInfoA( SPI_SETBEEP, TRUE, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ) && - GetLastError()==ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION) return; - - argc = winetest_get_mainargs(&argv); - strict=(argc >= 3 && strcmp(argv[2],"strict")==0); - trace("strict=%d\n",strict); - - trace("testing GetSystemMetrics with your current desktop settings\n"); - test_GetSystemMetrics( ); - trace("testing EnumDisplaySettings vs GetDeviceCaps\n"); - test_EnumDisplaySettings( ); - - change_counter = 0; - change_last_param = 0; - - wc.lpszClassName = "SysParamsTestClass"; - wc.lpfnWndProc = SysParamsTestWndProc; - wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW; - wc.hInstance = hInstance; - wc.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION ); - wc.hCursor = LoadCursorA( 0, (LPSTR)IDC_ARROW ); - wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1 ); - wc.lpszMenuName = 0; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - RegisterClassA( &wc ); - - ghTestWnd = CreateWindowA( "SysParamsTestClass", "Test System Parameters Application", - WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, 0, 0, hInstance, NULL ); - - hThread = CreateThread( NULL, 0, SysParamsThreadFunc, 0, 0, &dwThreadId ); - assert( hThread ); - CloseHandle( hThread ); - - while( GetMessageA( &msg, 0, 0, 0 )) { - TranslateMessage( &msg ); - DispatchMessageA( &msg ); - } - ReleaseDC( 0, hdc); - -} diff --git a/rostests/winetests/user32/test_mono.bmp b/rostests/winetests/user32/test_mono.bmp deleted file mode 100644 index 0db4d8111292094e7ef0d90ced8a9acc8b8599db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66 mcmZ?rbz*=3J0PV2#7scU2*x0ifq?}~ViN!V|7UOj3IhOQNCbWW diff --git a/rostests/winetests/user32/testlist.c b/rostests/winetests/user32/testlist.c deleted file mode 100644 index 5438664e35f..00000000000 --- a/rostests/winetests/user32/testlist.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_broadcast(void); -extern void func_class(void); -extern void func_clipboard(void); -extern void func_combo(void); -extern void func_cursoricon(void); -extern void func_dce(void); -extern void func_dde(void); -extern void func_dialog(void); -extern void func_edit(void); -extern void func_generated(void); -extern void func_input(void); -extern void func_listbox(void); -extern void func_menu(void); -extern void func_monitor(void); -extern void func_msg(void); -extern void func_resource(void); -extern void func_scroll(void); -extern void func_static(void); -extern void func_sysparams(void); -extern void func_text(void); -extern void func_win(void); -extern void func_winstation(void); -extern void func_wsprintf(void); - -const struct test winetest_testlist[] = -{ - { "broadcast", func_broadcast }, - { "class", func_class }, - { "clipboard", func_clipboard }, - { "combo", func_combo }, - { "cursoricon", func_cursoricon }, - { "dce", func_dce }, - { "dde", func_dde }, - { "dialog", func_dialog }, - { "edit", func_edit }, -// { "generated", func_generated }, - { "input", func_input }, - { "listbox", func_listbox }, - { "menu", func_menu }, - { "monitor", func_monitor }, - { "msg", func_msg }, - { "resource", func_resource }, - { "scroll", func_scroll }, - { "static", func_static }, - { "sysparams", func_sysparams }, - { "text", func_text }, - { "win", func_win }, - { "winstation", func_winstation }, - { "wsprintf", func_wsprintf }, - { 0, 0 } -}; diff --git a/rostests/winetests/user32/text.c b/rostests/winetests/user32/text.c deleted file mode 100755 index 1e096501640..00000000000 --- a/rostests/winetests/user32/text.c +++ /dev/null @@ -1,313 +0,0 @@ -/* - * DrawText tests - * - * Copyright (c) 2004 Zach Gorman - * Copyright 2007 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 - -#include "wine/test.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" - - -static void test_DrawTextCalcRect(void) -{ - HWND hwnd; - HDC hdc; - HFONT hFont, hOldFont; - LOGFONTA lf; - static CHAR text[] = "Example text for testing DrawText in " - "MM_HIENGLISH mode"; - static WCHAR textW[] = {'W','i','d','e',' ','c','h','a','r',' ', - 's','t','r','i','n','g','\0'}; - static CHAR emptystring[] = ""; - static WCHAR emptystringW[] = { 0 }; - INT textlen, textheight; - RECT rect = { 0, 0, 100, 0 }; - BOOL ret; - - /* Initialization */ - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, - 0, 0, 200, 200, 0, 0, 0, NULL); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - hdc = GetDC(hwnd); - ok(hdc != 0, "GetDC error %u\n", GetLastError()); - trace("hdc %p\n", hdc); - textlen = lstrlenA(text); - - /* LOGFONT initialization */ - memset(&lf, 0, sizeof(lf)); - lf.lfCharSet = ANSI_CHARSET; - lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; - lf.lfWeight = FW_DONTCARE; - lf.lfHeight = 0; /* mapping mode dependent */ - lf.lfQuality = DEFAULT_QUALITY; - lstrcpyA(lf.lfFaceName, "Arial"); - - /* DrawText in MM_HIENGLISH with DT_CALCRECT */ - SetMapMode(hdc, MM_HIENGLISH); - lf.lfHeight = 100 * 9 / 72; /* 9 point */ - hFont = CreateFontIndirectA(&lf); - ok(hFont != 0, "CreateFontIndirectA error %u\n", - GetLastError()); - hOldFont = SelectObject(hdc, hFont); - - textheight = DrawTextA(hdc, text, textlen, &rect, DT_CALCRECT | - DT_EXTERNALLEADING | DT_WORDBREAK | DT_NOCLIP | DT_LEFT | - DT_NOPREFIX); - ok( textheight, "DrawTextA error %u\n", GetLastError()); - - trace("MM_HIENGLISH rect.bottom %d\n", rect.bottom); - todo_wine ok(rect.bottom < 0, "In MM_HIENGLISH, DrawText with " - "DT_CALCRECT should return a negative rectangle bottom. " - "(bot=%d)\n", rect.bottom); - - SelectObject(hdc, hOldFont); - ret = DeleteObject(hFont); - ok( ret, "DeleteObject error %u\n", GetLastError()); - - - /* DrawText in MM_TEXT with DT_CALCRECT */ - SetMapMode(hdc, MM_TEXT); - lf.lfHeight = -MulDiv(9, GetDeviceCaps(hdc, - LOGPIXELSY), 72); /* 9 point */ - hFont = CreateFontIndirectA(&lf); - ok(hFont != 0, "CreateFontIndirectA error %u\n", - GetLastError()); - hOldFont = SelectObject(hdc, hFont); - - textheight = DrawTextA(hdc, text, textlen, &rect, DT_CALCRECT | - DT_EXTERNALLEADING | DT_WORDBREAK | DT_NOCLIP | DT_LEFT | - DT_NOPREFIX); - ok( textheight, "DrawTextA error %u\n", GetLastError()); - - trace("MM_TEXT rect.bottom %d\n", rect.bottom); - ok(rect.bottom > 0, "In MM_TEXT, DrawText with DT_CALCRECT " - "should return a positive rectangle bottom. (bot=%d)\n", - rect.bottom); - - /* empty or null text should in some cases calc an empty rectangle */ - /* note: testing the function's return value is useless, it differs - * ( 0 or 1) on every Windows version I tried */ - SetRect( &rect, 10,10, 100, 100); - textheight = DrawTextExA(hdc, text, 0, &rect, DT_CALCRECT, NULL ); - ok( !(rect.left == rect.right && rect.bottom == rect.top), - "rectangle should NOT be empty.\n"); - SetRect( &rect, 10,10, 100, 100); - SetLastError( 0); - textheight = DrawTextExA(hdc, emptystring, -1, &rect, DT_CALCRECT, NULL ); - ok( (rect.left == rect.right && rect.bottom == rect.top), - "rectangle should be empty.\n"); - SetRect( &rect, 10,10, 100, 100); - SetLastError( 0); - textheight = DrawTextExA(hdc, NULL, -1, &rect, DT_CALCRECT, NULL ); - ok( (rect.left == rect.right && rect.bottom == rect.top), - "rectangle should be empty.\n"); - SetRect( &rect, 10,10, 100, 100); - textheight = DrawTextExA(hdc, NULL, 0, &rect, DT_CALCRECT, NULL ); - ok( !(rect.left == rect.right && rect.bottom == rect.top), - "rectangle should NOT be empty.\n"); - - /* Wide char versions */ - SetRect( &rect, 10,10, 100, 100); - SetLastError( 0); - textheight = DrawTextExW(hdc, textW, 0, &rect, DT_CALCRECT, NULL ); - if( GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) { - ok( !(rect.left == rect.right && rect.bottom == rect.top), - "rectangle should NOT be empty.\n"); - SetRect( &rect, 10,10, 100, 100); - textheight = DrawTextExW(hdc, emptystringW, -1, &rect, DT_CALCRECT, NULL ); - ok( (rect.left == rect.right && rect.bottom == rect.top), - "rectangle should be empty.\n"); - SetRect( &rect, 10,10, 100, 100); - textheight = DrawTextExW(hdc, NULL, -1, &rect, DT_CALCRECT, NULL ); - ok( !(rect.left == rect.right && rect.bottom == rect.top), - "rectangle should NOT be empty.\n"); - SetRect( &rect, 10,10, 100, 100); - textheight = DrawTextExW(hdc, NULL, 0, &rect, DT_CALCRECT, NULL ); - ok( !(rect.left == rect.right && rect.bottom == rect.top), - "rectangle should NOT be empty.\n"); - } - - /* More test cases from bug 12226 */ - SetRect(&rect, 0, 0, 0, 0); - textheight = DrawTextA(hdc, emptystring, -1, &rect, DT_CALCRECT | DT_LEFT | DT_SINGLELINE); - todo_wine ok(textheight, "DrawTextA error %u\n", GetLastError()); - ok(0 == rect.left, "expected 0, got %d\n", rect.left); - ok(0 == rect.right, "expected 0, got %d\n", rect.right); - ok(0 == rect.top, "expected 0, got %d\n", rect.top); - todo_wine ok(rect.bottom, "rect.bottom should not be 0\n"); - - SetRect(&rect, 0, 0, 0, 0); - textheight = DrawTextW(hdc, emptystringW, -1, &rect, DT_CALCRECT | DT_LEFT | DT_SINGLELINE); - todo_wine ok(textheight, "DrawTextW error %u\n", GetLastError()); - ok(0 == rect.left, "expected 0, got %d\n", rect.left); - ok(0 == rect.right, "expected 0, got %d\n", rect.right); - ok(0 == rect.top, "expected 0, got %d\n", rect.top); - todo_wine ok(rect.bottom, "rect.bottom should not be 0\n"); - - SelectObject(hdc, hOldFont); - ret = DeleteObject(hFont); - ok( ret, "DeleteObject error %u\n", GetLastError()); - - /* Clean up */ - ret = ReleaseDC(hwnd, hdc); - ok( ret, "ReleaseDC error %u\n", GetLastError()); - ret = DestroyWindow(hwnd); - ok( ret, "DestroyWindow error %u\n", GetLastError()); -} - -/* replace tabs by \t */ -static void strfmt( const char *str, char *strout) -{ - unsigned int i,j ; - for(i=0,j=0;i<=strlen(str);i++,j++) - if((strout[j]=str[i])=='\t') { - strout[j++]='\\'; - strout[j]='t'; - } -} - - -#define TABTEST( tabval, tabcount, string, _exp) \ -{ int i,x_act, x_exp; char strdisp[64];\ - for(i=0;i<8;i++) tabs[i]=(i+1)*(tabval); \ - extent = GetTabbedTextExtentA( hdc, string, strlen( string), (tabcount), tabs); \ - strfmt( string, strdisp); \ - /* trace( "Extent is %08lx\n", extent); */\ - x_act = LOWORD( extent); \ - x_exp = (_exp); \ - ok( x_act == x_exp, "Test case \"%s\". Text extent is %d, expected %d tab %d tabcount %d\n", \ - strdisp, x_act, x_exp, tabval, tabcount); \ -} \ - - -static void test_TabbedText(void) -{ - HWND hwnd; - HDC hdc; - BOOL ret; - TEXTMETRICA tm; - DWORD extent; - INT tabs[8], cx, cy, tab, tabcount,t,align; - - /* Initialization */ - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, - 0, 0, 200, 200, 0, 0, 0, NULL); - ok(hwnd != 0, "CreateWindowExA error %u\n", GetLastError()); - hdc = GetDC(hwnd); - ok(hdc != 0, "GetDC error %u\n", GetLastError()); - - ret = GetTextMetricsA( hdc, &tm); - ok( ret, "GetTextMetrics error %u\n", GetLastError()); - - extent = GetTabbedTextExtentA( hdc, "x", 1, 1, tabs); - cx = LOWORD( extent); - cy = HIWORD( extent); - trace( "cx is %d cy is %d\n", cx, cy); - - align=1; - for( t=-1; t<=1; t++) { /* slightly adjust the 4 char tabstop, to - catch the one off errors */ - tab = (cx *4 + t); - /* test the special case tabcount =1 and the general array (80 of tabs */ - for( tabcount = 1; tabcount <= 8; tabcount +=7) { - TABTEST( align * tab, tabcount, "\t", tab) - TABTEST( align * tab, tabcount, "xxx\t", tab) - TABTEST( align * tab, tabcount, "\tx", tab+cx) - TABTEST( align * tab, tabcount, "\t\t", tab*2) - TABTEST( align * tab, tabcount, "\tx\t", tab*2) - TABTEST( align * tab, tabcount, "x\tx", tab+cx) - TABTEST( align * tab, tabcount, "xx\tx", tab+cx) - TABTEST( align * tab, tabcount, "xxx\tx", tab+cx) - TABTEST( align * tab, tabcount, "xxxx\tx", t>0 ? tab + cx : 2*tab+cx) - TABTEST( align * tab, tabcount, "xxxxx\tx", 2*tab+cx) - } - } - align=-1; - for( t=-1; t<=1; t++) { /* slightly adjust the 4 char tabstop, to - catch the one off errors */ - tab = (cx *4 + t); - /* test the special case tabcount =1 and the general array (8) of tabs */ - for( tabcount = 1; tabcount <= 8; tabcount +=7) { - TABTEST( align * tab, tabcount, "\t", tab) - TABTEST( align * tab, tabcount, "xxx\t", tab) - TABTEST( align * tab, tabcount, "\tx", tab) - TABTEST( align * tab, tabcount, "\t\t", tab*2) - TABTEST( align * tab, tabcount, "\tx\t", tab*2) - TABTEST( align * tab, tabcount, "x\tx", tab) - TABTEST( align * tab, tabcount, "xx\tx", tab) - TABTEST( align * tab, tabcount, "xxx\tx", 4 * cx >= tab ? 2*tab :tab) - TABTEST( align * tab, tabcount, "xxxx\tx", 2*tab) - TABTEST( align * tab, tabcount, "xxxxx\tx", 2*tab) - } - } - - ReleaseDC( hwnd, hdc ); - DestroyWindow( hwnd ); -} - -static void test_DrawState(void) -{ - static const char text[] = "Sample text string"; - HWND hwnd; - HDC hdc; - BOOL ret; - - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, - 0, 0, 200, 200, 0, 0, 0, NULL); - assert(hwnd); - - hdc = GetDC(hwnd); - assert(hdc); - - SetLastError(0xdeadbeef); - ret = DrawState(hdc, GetStockObject(DKGRAY_BRUSH), NULL, (LPARAM)text, strlen(text), - 0, 0, 10, 10, DST_TEXT); - ok(ret, "DrawState error %u\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = DrawState(hdc, GetStockObject(DKGRAY_BRUSH), NULL, (LPARAM)text, 0, - 0, 0, 10, 10, DST_TEXT); - ok(ret, "DrawState error %u\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = DrawState(hdc, GetStockObject(DKGRAY_BRUSH), NULL, 0, strlen(text), - 0, 0, 10, 10, DST_TEXT); - ok(!ret, "DrawState succeeded\n"); - ok(GetLastError() == 0xdeadbeef, "not expected error %u\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = DrawState(hdc, GetStockObject(DKGRAY_BRUSH), NULL, 0, 0, - 0, 0, 10, 10, DST_TEXT); - ok(!ret, "DrawState succeeded\n"); - ok(GetLastError() == 0xdeadbeef, "not expected error %u\n", GetLastError()); - - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); -} - -START_TEST(text) -{ - test_TabbedText(); - test_DrawTextCalcRect(); - test_DrawState(); -} diff --git a/rostests/winetests/user32/user32.rbuild b/rostests/winetests/user32/user32.rbuild deleted file mode 100644 index e8805e08a9d..00000000000 --- a/rostests/winetests/user32/user32.rbuild +++ /dev/null @@ -1,39 +0,0 @@ - - - - - . - include/reactos/wine - - ntdll - user32 - gdi32 - advapi32 - kernel32 - broadcast.c - class.c - clipboard.c - combo.c - cursoricon.c - dce.c - dde.c - dialog.c - edit.c - - input.c - listbox.c - menu.c - monitor.c - msg.c - resource.c - scroll.c - static.c - sysparams.c - text.c - win.c - winstation.c - wsprintf.c - testlist.c - resource.rc - - diff --git a/rostests/winetests/user32/win.c b/rostests/winetests/user32/win.c deleted file mode 100644 index 5b391eb4e19..00000000000 --- a/rostests/winetests/user32/win.c +++ /dev/null @@ -1,4720 +0,0 @@ -/* - * Unit tests for window handling - * - * Copyright 2002 Bill Medland - * Copyright 2002 Alexandre Julliard - * Copyright 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 - */ - -/* To get ICON_SMALL2 with the MSVC headers */ -#define _WIN32_WINNT 0x0501 - -#include -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" - -#include "wine/test.h" - -#ifndef SPI_GETDESKWALLPAPER -#define SPI_GETDESKWALLPAPER 0x0073 -#endif - -#define LONG_PTR INT_PTR -#define ULONG_PTR UINT_PTR - -void dump_region(HRGN hrgn); - -static HWND (WINAPI *pGetAncestor)(HWND,UINT); -static BOOL (WINAPI *pGetWindowInfo)(HWND,WINDOWINFO*); - -static BOOL test_lbuttondown_flag; -static HWND hwndMessage; -static HWND hwndMain, hwndMain2; -static HHOOK hhook; - -static const char* szAWRClass = "Winsize"; -static HMENU hmenu; -static DWORD our_pid; - -#define COUNTOF(arr) (sizeof(arr)/sizeof(arr[0])) - -/* try to make sure pending X events have been processed before continuing */ -static void flush_events( BOOL remove_messages ) -{ - MSG msg; - int diff = 200; - int min_timeout = 50; - DWORD time = GetTickCount() + diff; - - while (diff > 0) - { - if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min_timeout, QS_ALLINPUT ) == WAIT_TIMEOUT) break; - if (remove_messages) - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); - diff = time - GetTickCount(); - min_timeout = 10; - } -} - -/* check the values returned by the various parent/owner functions on a given window */ -static void check_parents( HWND hwnd, HWND ga_parent, HWND gwl_parent, HWND get_parent, - HWND gw_owner, HWND ga_root, HWND ga_root_owner ) -{ - HWND res; - - if (pGetAncestor) - { - res = pGetAncestor( hwnd, GA_PARENT ); - ok( res == ga_parent, "Wrong result for GA_PARENT %p expected %p\n", res, ga_parent ); - } - res = (HWND)GetWindowLongPtrA( hwnd, GWLP_HWNDPARENT ); - ok( res == gwl_parent, "Wrong result for GWL_HWNDPARENT %p expected %p\n", res, gwl_parent ); - res = GetParent( hwnd ); - ok( res == get_parent, "Wrong result for GetParent %p expected %p\n", res, get_parent ); - res = GetWindow( hwnd, GW_OWNER ); - ok( res == gw_owner, "Wrong result for GW_OWNER %p expected %p\n", res, gw_owner ); - if (pGetAncestor) - { - res = pGetAncestor( hwnd, GA_ROOT ); - ok( res == ga_root, "Wrong result for GA_ROOT %p expected %p\n", res, ga_root ); - res = pGetAncestor( hwnd, GA_ROOTOWNER ); - ok( res == ga_root_owner, "Wrong result for GA_ROOTOWNER %p expected %p\n", res, ga_root_owner ); - } -} - -static BOOL CALLBACK EnumChildProc( HWND hwndChild, LPARAM lParam) -{ - (*(LPINT)lParam)++; - trace("EnumChildProc on %p\n", hwndChild); - if (*(LPINT)lParam > 1) return FALSE; - return TRUE; -} - -/* will search for the given window */ -static BOOL CALLBACK EnumChildProc1( HWND hwndChild, LPARAM lParam) -{ - trace("EnumChildProc1 on %p\n", hwndChild); - if ((HWND)lParam == hwndChild) return FALSE; - return TRUE; -} - -static HWND create_tool_window( LONG style, HWND parent ) -{ - HWND ret = CreateWindowExA(0, "ToolWindowClass", "Tool window 1", style, - 0, 0, 100, 100, parent, 0, 0, NULL ); - ok( ret != 0, "Creation failed\n" ); - return ret; -} - -/* test parent and owner values for various combinations */ -static void test_parent_owner(void) -{ - LONG style; - HWND test, owner, ret; - HWND desktop = GetDesktopWindow(); - HWND child = create_tool_window( WS_CHILD, hwndMain ); - INT numChildren; - - trace( "main window %p main2 %p desktop %p child %p\n", hwndMain, hwndMain2, desktop, child ); - - /* child without parent, should fail */ - SetLastError(0xdeadbeef); - test = CreateWindowExA(0, "ToolWindowClass", "Tool window 1", - WS_CHILD, 0, 0, 100, 100, 0, 0, 0, NULL ); - ok( GetLastError() == ERROR_TLW_WITH_WSCHILD, "CreateWindowExA should call SetLastError\n" ); - ok( !test, "WS_CHILD without parent created\n" ); - - /* desktop window */ - check_parents( desktop, 0, 0, 0, 0, 0, 0 ); - style = GetWindowLongA( desktop, GWL_STYLE ); - ok( !SetWindowLongA( desktop, GWL_STYLE, WS_POPUP ), "Set GWL_STYLE on desktop succeeded\n" ); - ok( !SetWindowLongA( desktop, GWL_STYLE, 0 ), "Set GWL_STYLE on desktop succeeded\n" ); - ok( GetWindowLongA( desktop, GWL_STYLE ) == style, "Desktop style changed\n" ); - - /* normal child window */ - test = create_tool_window( WS_CHILD, hwndMain ); - trace( "created child %p\n", test ); - check_parents( test, hwndMain, hwndMain, hwndMain, 0, hwndMain, hwndMain ); - SetWindowLongA( test, GWL_STYLE, 0 ); - check_parents( test, hwndMain, hwndMain, 0, 0, hwndMain, test ); - SetWindowLongA( test, GWL_STYLE, WS_POPUP ); - check_parents( test, hwndMain, hwndMain, 0, 0, hwndMain, test ); - SetWindowLongA( test, GWL_STYLE, WS_POPUP|WS_CHILD ); - check_parents( test, hwndMain, hwndMain, 0, 0, hwndMain, test ); - SetWindowLongA( test, GWL_STYLE, WS_CHILD ); - DestroyWindow( test ); - - /* normal child window with WS_MAXIMIZE */ - test = create_tool_window( WS_CHILD | WS_MAXIMIZE, hwndMain ); - DestroyWindow( test ); - - /* normal child window with WS_THICKFRAME */ - test = create_tool_window( WS_CHILD | WS_THICKFRAME, hwndMain ); - DestroyWindow( test ); - - /* popup window with WS_THICKFRAME */ - test = create_tool_window( WS_POPUP | WS_THICKFRAME, hwndMain ); - DestroyWindow( test ); - - /* child of desktop */ - test = create_tool_window( WS_CHILD, desktop ); - trace( "created child of desktop %p\n", test ); - check_parents( test, desktop, 0, desktop, 0, test, desktop ); - SetWindowLongA( test, GWL_STYLE, WS_POPUP ); - check_parents( test, desktop, 0, 0, 0, test, test ); - SetWindowLongA( test, GWL_STYLE, 0 ); - check_parents( test, desktop, 0, 0, 0, test, test ); - DestroyWindow( test ); - - /* child of desktop with WS_MAXIMIZE */ - test = create_tool_window( WS_CHILD | WS_MAXIMIZE, desktop ); - DestroyWindow( test ); - - /* child of desktop with WS_MINIMIZE */ - test = create_tool_window( WS_CHILD | WS_MINIMIZE, desktop ); - DestroyWindow( test ); - - /* child of child */ - test = create_tool_window( WS_CHILD, child ); - trace( "created child of child %p\n", test ); - check_parents( test, child, child, child, 0, hwndMain, hwndMain ); - SetWindowLongA( test, GWL_STYLE, 0 ); - check_parents( test, child, child, 0, 0, hwndMain, test ); - SetWindowLongA( test, GWL_STYLE, WS_POPUP ); - check_parents( test, child, child, 0, 0, hwndMain, test ); - DestroyWindow( test ); - - /* child of child with WS_MAXIMIZE */ - test = create_tool_window( WS_CHILD | WS_MAXIMIZE, child ); - DestroyWindow( test ); - - /* child of child with WS_MINIMIZE */ - test = create_tool_window( WS_CHILD | WS_MINIMIZE, child ); - DestroyWindow( test ); - - /* not owned top-level window */ - test = create_tool_window( 0, 0 ); - trace( "created top-level %p\n", test ); - check_parents( test, desktop, 0, 0, 0, test, test ); - SetWindowLongA( test, GWL_STYLE, WS_POPUP ); - check_parents( test, desktop, 0, 0, 0, test, test ); - SetWindowLongA( test, GWL_STYLE, WS_CHILD ); - check_parents( test, desktop, 0, desktop, 0, test, desktop ); - DestroyWindow( test ); - - /* not owned top-level window with WS_MAXIMIZE */ - test = create_tool_window( WS_MAXIMIZE, 0 ); - DestroyWindow( test ); - - /* owned top-level window */ - test = create_tool_window( 0, hwndMain ); - trace( "created owned top-level %p\n", test ); - check_parents( test, desktop, hwndMain, 0, hwndMain, test, test ); - SetWindowLongA( test, GWL_STYLE, WS_POPUP ); - check_parents( test, desktop, hwndMain, hwndMain, hwndMain, test, hwndMain ); - SetWindowLongA( test, GWL_STYLE, WS_CHILD ); - check_parents( test, desktop, hwndMain, desktop, hwndMain, test, desktop ); - DestroyWindow( test ); - - /* owned top-level window with WS_MAXIMIZE */ - test = create_tool_window( WS_MAXIMIZE, hwndMain ); - DestroyWindow( test ); - - /* not owned popup */ - test = create_tool_window( WS_POPUP, 0 ); - trace( "created popup %p\n", test ); - check_parents( test, desktop, 0, 0, 0, test, test ); - SetWindowLongA( test, GWL_STYLE, WS_CHILD ); - check_parents( test, desktop, 0, desktop, 0, test, desktop ); - SetWindowLongA( test, GWL_STYLE, 0 ); - check_parents( test, desktop, 0, 0, 0, test, test ); - DestroyWindow( test ); - - /* not owned popup with WS_MAXIMIZE */ - test = create_tool_window( WS_POPUP | WS_MAXIMIZE, 0 ); - DestroyWindow( test ); - - /* owned popup */ - test = create_tool_window( WS_POPUP, hwndMain ); - trace( "created owned popup %p\n", test ); - check_parents( test, desktop, hwndMain, hwndMain, hwndMain, test, hwndMain ); - SetWindowLongA( test, GWL_STYLE, WS_CHILD ); - check_parents( test, desktop, hwndMain, desktop, hwndMain, test, desktop ); - SetWindowLongA( test, GWL_STYLE, 0 ); - check_parents( test, desktop, hwndMain, 0, hwndMain, test, test ); - DestroyWindow( test ); - - /* owned popup with WS_MAXIMIZE */ - test = create_tool_window( WS_POPUP | WS_MAXIMIZE, hwndMain ); - DestroyWindow( test ); - - /* top-level window owned by child (same as owned by top-level) */ - test = create_tool_window( 0, child ); - trace( "created top-level owned by child %p\n", test ); - check_parents( test, desktop, hwndMain, 0, hwndMain, test, test ); - DestroyWindow( test ); - - /* top-level window owned by child (same as owned by top-level) with WS_MAXIMIZE */ - test = create_tool_window( WS_MAXIMIZE, child ); - DestroyWindow( test ); - - /* popup owned by desktop (same as not owned) */ - test = create_tool_window( WS_POPUP, desktop ); - trace( "created popup owned by desktop %p\n", test ); - check_parents( test, desktop, 0, 0, 0, test, test ); - DestroyWindow( test ); - - /* popup owned by desktop (same as not owned) with WS_MAXIMIZE */ - test = create_tool_window( WS_POPUP | WS_MAXIMIZE, desktop ); - DestroyWindow( test ); - - /* popup owned by child (same as owned by top-level) */ - test = create_tool_window( WS_POPUP, child ); - trace( "created popup owned by child %p\n", test ); - check_parents( test, desktop, hwndMain, hwndMain, hwndMain, test, hwndMain ); - DestroyWindow( test ); - - /* popup owned by child (same as owned by top-level) with WS_MAXIMIZE */ - test = create_tool_window( WS_POPUP | WS_MAXIMIZE, child ); - DestroyWindow( test ); - - /* not owned popup with WS_CHILD (same as WS_POPUP only) */ - test = create_tool_window( WS_POPUP | WS_CHILD, 0 ); - trace( "created WS_CHILD popup %p\n", test ); - check_parents( test, desktop, 0, 0, 0, test, test ); - DestroyWindow( test ); - - /* not owned popup with WS_CHILD | WS_MAXIMIZE (same as WS_POPUP only) */ - test = create_tool_window( WS_POPUP | WS_CHILD | WS_MAXIMIZE, 0 ); - DestroyWindow( test ); - - /* owned popup with WS_CHILD (same as WS_POPUP only) */ - test = create_tool_window( WS_POPUP | WS_CHILD, hwndMain ); - trace( "created owned WS_CHILD popup %p\n", test ); - check_parents( test, desktop, hwndMain, hwndMain, hwndMain, test, hwndMain ); - DestroyWindow( test ); - - /* owned popup with WS_CHILD (same as WS_POPUP only) with WS_MAXIMIZE */ - test = create_tool_window( WS_POPUP | WS_CHILD | WS_MAXIMIZE, hwndMain ); - DestroyWindow( test ); - - /******************** parent changes *************************/ - trace( "testing parent changes\n" ); - - /* desktop window */ - check_parents( desktop, 0, 0, 0, 0, 0, 0 ); - if (0) - { - /* this test succeeds on NT but crashes on win9x systems */ - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)hwndMain2 ); - ok( !ret, "Set GWL_HWNDPARENT succeeded on desktop\n" ); - check_parents( desktop, 0, 0, 0, 0, 0, 0 ); - ok( !SetParent( desktop, hwndMain ), "SetParent succeeded on desktop\n" ); - check_parents( desktop, 0, 0, 0, 0, 0, 0 ); - } - /* normal child window */ - test = create_tool_window( WS_CHILD, hwndMain ); - trace( "created child %p\n", test ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)hwndMain2 ); - ok( ret == hwndMain, "GWL_HWNDPARENT return value %p expected %p\n", ret, hwndMain ); - check_parents( test, hwndMain2, hwndMain2, hwndMain2, 0, hwndMain2, hwndMain2 ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)child ); - ok( ret == hwndMain2, "GWL_HWNDPARENT return value %p expected %p\n", ret, hwndMain2 ); - check_parents( test, child, child, child, 0, hwndMain, hwndMain ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)desktop ); - ok( ret == child, "GWL_HWNDPARENT return value %p expected %p\n", ret, child ); - check_parents( test, desktop, 0, desktop, 0, test, desktop ); - - /* window is now child of desktop so GWLP_HWNDPARENT changes owner from now on */ - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)child ); - ok( ret == 0, "GWL_HWNDPARENT return value %p expected 0\n", ret ); - check_parents( test, desktop, child, desktop, child, test, desktop ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, 0 ); - ok( ret == child, "GWL_HWNDPARENT return value %p expected %p\n", ret, child ); - check_parents( test, desktop, 0, desktop, 0, test, desktop ); - DestroyWindow( test ); - - /* not owned top-level window */ - test = create_tool_window( 0, 0 ); - trace( "created top-level %p\n", test ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)hwndMain2 ); - ok( ret == 0, "GWL_HWNDPARENT return value %p expected 0\n", ret ); - check_parents( test, desktop, hwndMain2, 0, hwndMain2, test, test ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)child ); - ok( ret == hwndMain2, "GWL_HWNDPARENT return value %p expected %p\n", ret, hwndMain2 ); - check_parents( test, desktop, child, 0, child, test, test ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, 0 ); - ok( ret == child, "GWL_HWNDPARENT return value %p expected %p\n", ret, child ); - check_parents( test, desktop, 0, 0, 0, test, test ); - DestroyWindow( test ); - - /* not owned popup */ - test = create_tool_window( WS_POPUP, 0 ); - trace( "created popup %p\n", test ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)hwndMain2 ); - ok( ret == 0, "GWL_HWNDPARENT return value %p expected 0\n", ret ); - check_parents( test, desktop, hwndMain2, hwndMain2, hwndMain2, test, hwndMain2 ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (LONG_PTR)child ); - ok( ret == hwndMain2, "GWL_HWNDPARENT return value %p expected %p\n", ret, hwndMain2 ); - check_parents( test, desktop, child, child, child, test, hwndMain ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, 0 ); - ok( ret == child, "GWL_HWNDPARENT return value %p expected %p\n", ret, child ); - check_parents( test, desktop, 0, 0, 0, test, test ); - DestroyWindow( test ); - - /* normal child window */ - test = create_tool_window( WS_CHILD, hwndMain ); - trace( "created child %p\n", test ); - - ret = SetParent( test, desktop ); - ok( ret == hwndMain, "SetParent return value %p expected %p\n", ret, hwndMain ); - check_parents( test, desktop, 0, desktop, 0, test, desktop ); - - ret = SetParent( test, child ); - ok( ret == desktop, "SetParent return value %p expected %p\n", ret, desktop ); - check_parents( test, child, child, child, 0, hwndMain, hwndMain ); - - ret = SetParent( test, hwndMain2 ); - ok( ret == child, "SetParent return value %p expected %p\n", ret, child ); - check_parents( test, hwndMain2, hwndMain2, hwndMain2, 0, hwndMain2, hwndMain2 ); - DestroyWindow( test ); - - /* not owned top-level window */ - test = create_tool_window( 0, 0 ); - trace( "created top-level %p\n", test ); - - ret = SetParent( test, child ); - ok( ret == desktop, "SetParent return value %p expected %p\n", ret, desktop ); - check_parents( test, child, child, 0, 0, hwndMain, test ); - DestroyWindow( test ); - - /* owned popup */ - test = create_tool_window( WS_POPUP, hwndMain2 ); - trace( "created owned popup %p\n", test ); - - ret = SetParent( test, child ); - ok( ret == desktop, "SetParent return value %p expected %p\n", ret, desktop ); - check_parents( test, child, child, hwndMain2, hwndMain2, hwndMain, hwndMain2 ); - - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (ULONG_PTR)hwndMain ); - ok( ret == child, "GWL_HWNDPARENT return value %p expected %p\n", ret, child ); - check_parents( test, hwndMain, hwndMain, hwndMain2, hwndMain2, hwndMain, hwndMain2 ); - DestroyWindow( test ); - - /**************** test owner destruction *******************/ - - /* owned child popup */ - owner = create_tool_window( 0, 0 ); - test = create_tool_window( WS_POPUP, owner ); - trace( "created owner %p and popup %p\n", owner, test ); - ret = SetParent( test, child ); - ok( ret == desktop, "SetParent return value %p expected %p\n", ret, desktop ); - check_parents( test, child, child, owner, owner, hwndMain, owner ); - /* window is now child of 'child' but owned by 'owner' */ - DestroyWindow( owner ); - ok( IsWindow(test), "Window %p destroyed by owner destruction\n", test ); - /* Win98 doesn't pass this test. It doesn't allow a destroyed owner, - * while Win95, Win2k, WinXP do. - */ - /*check_parents( test, child, child, owner, owner, hwndMain, owner );*/ - ok( !IsWindow(owner), "Owner %p not destroyed\n", owner ); - DestroyWindow(test); - - /* owned top-level popup */ - owner = create_tool_window( 0, 0 ); - test = create_tool_window( WS_POPUP, owner ); - trace( "created owner %p and popup %p\n", owner, test ); - check_parents( test, desktop, owner, owner, owner, test, owner ); - DestroyWindow( owner ); - ok( !IsWindow(test), "Window %p not destroyed by owner destruction\n", test ); - - /* top-level popup owned by child */ - owner = create_tool_window( WS_CHILD, hwndMain2 ); - test = create_tool_window( WS_POPUP, 0 ); - trace( "created owner %p and popup %p\n", owner, test ); - ret = (HWND)SetWindowLongPtrA( test, GWLP_HWNDPARENT, (ULONG_PTR)owner ); - ok( ret == 0, "GWL_HWNDPARENT return value %p expected 0\n", ret ); - check_parents( test, desktop, owner, owner, owner, test, hwndMain2 ); - DestroyWindow( owner ); - ok( IsWindow(test), "Window %p destroyed by owner destruction\n", test ); - ok( !IsWindow(owner), "Owner %p not destroyed\n", owner ); - /* Win98 doesn't pass this test. It doesn't allow a destroyed owner, - * while Win95, Win2k, WinXP do. - */ - /*check_parents( test, desktop, owner, owner, owner, test, owner );*/ - DestroyWindow(test); - - /* final cleanup */ - DestroyWindow(child); - - - owner = create_tool_window( WS_OVERLAPPED, 0 ); - test = create_tool_window( WS_POPUP, desktop ); - - ok( !GetWindow( test, GW_OWNER ), "Wrong owner window\n" ); - numChildren = 0; - ok( !EnumChildWindows( owner, EnumChildProc, (LPARAM)&numChildren ), - "EnumChildWindows should have returned FALSE\n" ); - ok( numChildren == 0, "numChildren should be 0 got %d\n", numChildren ); - - SetWindowLongA( test, GWL_STYLE, (GetWindowLongA( test, GWL_STYLE ) & ~WS_POPUP) | WS_CHILD ); - ret = SetParent( test, owner ); - ok( ret == desktop, "SetParent return value %p expected %p\n", ret, desktop ); - - numChildren = 0; - ok( EnumChildWindows( owner, EnumChildProc, (LPARAM)&numChildren ), - "EnumChildWindows should have returned TRUE\n" ); - ok( numChildren == 1, "numChildren should be 1 got %d\n", numChildren ); - - child = create_tool_window( WS_CHILD, owner ); - numChildren = 0; - ok( !EnumChildWindows( owner, EnumChildProc, (LPARAM)&numChildren ), - "EnumChildWindows should have returned FALSE\n" ); - ok( numChildren == 2, "numChildren should be 2 got %d\n", numChildren ); - DestroyWindow( child ); - - child = create_tool_window( WS_VISIBLE | WS_OVERLAPPEDWINDOW, owner ); - ok( GetWindow( child, GW_OWNER ) == owner, "Wrong owner window\n" ); - numChildren = 0; - ok( EnumChildWindows( owner, EnumChildProc, (LPARAM)&numChildren ), - "EnumChildWindows should have returned TRUE\n" ); - ok( numChildren == 1, "numChildren should be 1 got %d\n", numChildren ); - - ret = SetParent( child, owner ); - ok( GetWindow( child, GW_OWNER ) == owner, "Wrong owner window\n" ); - ok( ret == desktop, "SetParent return value %p expected %p\n", ret, desktop ); - numChildren = 0; - ok( !EnumChildWindows( owner, EnumChildProc, (LPARAM)&numChildren ), - "EnumChildWindows should have returned FALSE\n" ); - ok( numChildren == 2, "numChildren should be 2 got %d\n", numChildren ); - - ret = SetParent( child, NULL ); - ok( GetWindow( child, GW_OWNER ) == owner, "Wrong owner window\n" ); - ok( ret == owner, "SetParent return value %p expected %p\n", ret, owner ); - numChildren = 0; - ok( EnumChildWindows( owner, EnumChildProc, (LPARAM)&numChildren ), - "EnumChildWindows should have returned TRUE\n" ); - ok( numChildren == 1, "numChildren should be 1 got %d\n", numChildren ); - - /* even GW_OWNER == owner it's still a desktop's child */ - ok( !EnumChildWindows( desktop, EnumChildProc1, (LPARAM)child ), - "EnumChildWindows should have found %p and returned FALSE\n", child ); - - DestroyWindow( child ); - child = create_tool_window( WS_VISIBLE | WS_OVERLAPPEDWINDOW, NULL ); - - ok( !EnumChildWindows( desktop, EnumChildProc1, (LPARAM)child ), - "EnumChildWindows should have found %p and returned FALSE\n", child ); - - DestroyWindow( child ); - DestroyWindow( test ); - DestroyWindow( owner ); -} - - -static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_GETMINMAXINFO: - { - MINMAXINFO* minmax = (MINMAXINFO *)lparam; - - trace("hwnd %p, WM_GETMINMAXINFO, %08lx, %08lx\n", hwnd, wparam, lparam); - trace("ptReserved (%d,%d), ptMaxSize (%d,%d), ptMaxPosition (%d,%d)\n" - " ptMinTrackSize (%d,%d), ptMaxTrackSize (%d,%d)\n", - minmax->ptReserved.x, minmax->ptReserved.y, - minmax->ptMaxSize.x, minmax->ptMaxSize.y, - minmax->ptMaxPosition.x, minmax->ptMaxPosition.y, - minmax->ptMinTrackSize.x, minmax->ptMinTrackSize.y, - minmax->ptMaxTrackSize.x, minmax->ptMaxTrackSize.y); - SetWindowLongPtrA(hwnd, GWLP_USERDATA, 0x20031021); - break; - } - case WM_WINDOWPOSCHANGING: - { - BOOL is_win9x = GetWindowLongPtrW(hwnd, GWLP_WNDPROC) == 0; - WINDOWPOS *winpos = (WINDOWPOS *)lparam; - trace("main: WM_WINDOWPOSCHANGING\n"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - if (!(winpos->flags & SWP_NOMOVE)) - { - ok(winpos->x >= -32768 && winpos->x <= 32767, "bad winpos->x %d\n", winpos->x); - ok(winpos->y >= -32768 && winpos->y <= 32767, "bad winpos->y %d\n", winpos->y); - } - /* Win9x does not fixup cx/xy for WM_WINDOWPOSCHANGING */ - if (!(winpos->flags & SWP_NOSIZE) && !is_win9x) - { - ok(winpos->cx >= 0 && winpos->cx <= 32767, "bad winpos->cx %d\n", winpos->cx); - ok(winpos->cy >= 0 && winpos->cy <= 32767, "bad winpos->cy %d\n", winpos->cy); - } - break; - } - case WM_WINDOWPOSCHANGED: - { - RECT rc1, rc2; - WINDOWPOS *winpos = (WINDOWPOS *)lparam; - trace("main: WM_WINDOWPOSCHANGED\n"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - ok(winpos->x >= -32768 && winpos->x <= 32767, "bad winpos->x %d\n", winpos->x); - ok(winpos->y >= -32768 && winpos->y <= 32767, "bad winpos->y %d\n", winpos->y); - - ok(winpos->cx >= 0 && winpos->cx <= 32767, "bad winpos->cx %d\n", winpos->cx); - ok(winpos->cy >= 0 && winpos->cy <= 32767, "bad winpos->cy %d\n", winpos->cy); - - GetWindowRect(hwnd, &rc1); - trace("window: (%d,%d)-(%d,%d)\n", rc1.left, rc1.top, rc1.right, rc1.bottom); - SetRect(&rc2, winpos->x, winpos->y, winpos->x + winpos->cx, winpos->y + winpos->cy); - /* note: winpos coordinates are relative to parent */ - MapWindowPoints(GetParent(hwnd), 0, (LPPOINT)&rc2, 2); - trace("pos: (%d,%d)-(%d,%d)\n", rc2.left, rc2.top, rc2.right, rc2.bottom); - if (0) - { - /* Uncomment this once the test succeeds in all cases */ - ok(EqualRect(&rc1, &rc2), "rects do not match\n"); - } - - GetClientRect(hwnd, &rc2); - DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc1); - MapWindowPoints(0, hwnd, (LPPOINT)&rc1, 2); - ok(EqualRect(&rc1, &rc2), "rects do not match (%d,%d-%d,%d) / (%d,%d-%d,%d)\n", - rc1.left, rc1.top, rc1.right, rc1.bottom, rc2.left, rc2.top, rc2.right, rc2.bottom ); - break; - } - case WM_NCCREATE: - { - BOOL got_getminmaxinfo = GetWindowLongPtrA(hwnd, GWLP_USERDATA) == 0x20031021; - CREATESTRUCTA *cs = (CREATESTRUCTA *)lparam; - - trace("WM_NCCREATE: hwnd %p, parent %p, style %08x\n", hwnd, cs->hwndParent, cs->style); - if (got_getminmaxinfo) - trace("%p got WM_GETMINMAXINFO\n", hwnd); - - if ((cs->style & WS_THICKFRAME) || !(cs->style & (WS_POPUP | WS_CHILD))) - ok(got_getminmaxinfo, "main: WM_GETMINMAXINFO should have been received before WM_NCCREATE\n"); - else - ok(!got_getminmaxinfo, "main: WM_GETMINMAXINFO should NOT have been received before WM_NCCREATE\n"); - break; - } - case WM_COMMAND: - if (test_lbuttondown_flag) - { - ShowWindow((HWND)wparam, SW_SHOW); - flush_events( FALSE ); - } - break; - } - - return DefWindowProcA(hwnd, msg, wparam, lparam); -} - -static LRESULT WINAPI tool_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_GETMINMAXINFO: - { - MINMAXINFO* minmax = (MINMAXINFO *)lparam; - - trace("hwnd %p, WM_GETMINMAXINFO, %08lx, %08lx\n", hwnd, wparam, lparam); - trace("ptReserved (%d,%d), ptMaxSize (%d,%d), ptMaxPosition (%d,%d)\n" - " ptMinTrackSize (%d,%d), ptMaxTrackSize (%d,%d)\n", - minmax->ptReserved.x, minmax->ptReserved.y, - minmax->ptMaxSize.x, minmax->ptMaxSize.y, - minmax->ptMaxPosition.x, minmax->ptMaxPosition.y, - minmax->ptMinTrackSize.x, minmax->ptMinTrackSize.y, - minmax->ptMaxTrackSize.x, minmax->ptMaxTrackSize.y); - SetWindowLongPtrA(hwnd, GWLP_USERDATA, 0x20031021); - break; - } - case WM_NCCREATE: - { - BOOL got_getminmaxinfo = GetWindowLongPtrA(hwnd, GWLP_USERDATA) == 0x20031021; - CREATESTRUCTA *cs = (CREATESTRUCTA *)lparam; - - trace("WM_NCCREATE: hwnd %p, parent %p, style %08x\n", hwnd, cs->hwndParent, cs->style); - if (got_getminmaxinfo) - trace("%p got WM_GETMINMAXINFO\n", hwnd); - - if ((cs->style & WS_THICKFRAME) || !(cs->style & (WS_POPUP | WS_CHILD))) - ok(got_getminmaxinfo, "tool: WM_GETMINMAXINFO should have been received before WM_NCCREATE\n"); - else - ok(!got_getminmaxinfo, "tool: WM_GETMINMAXINFO should NOT have been received before WM_NCCREATE\n"); - break; - } - } - - return DefWindowProcA(hwnd, msg, wparam, lparam); -} - -static BOOL RegisterWindowClasses(void) -{ - WNDCLASSA cls; - - cls.style = CS_DBLCLKS; - cls.lpfnWndProc = main_window_procA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "MainWindowClass"; - - if(!RegisterClassA(&cls)) return FALSE; - - cls.style = 0; - cls.lpfnWndProc = tool_window_procA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "ToolWindowClass"; - - if(!RegisterClassA(&cls)) return FALSE; - - return TRUE; -} - -static void verify_window_info(HWND hwnd, const WINDOWINFO *info) -{ - RECT rcWindow, rcClient; - DWORD status; - - ok(IsWindow(hwnd), "bad window handle\n"); - - GetWindowRect(hwnd, &rcWindow); - ok(EqualRect(&rcWindow, &info->rcWindow), "wrong rcWindow\n"); - - GetClientRect(hwnd, &rcClient); - /* translate to screen coordinates */ - MapWindowPoints(hwnd, 0, (LPPOINT)&rcClient, 2); - ok(EqualRect(&rcClient, &info->rcClient), "wrong rcClient\n"); - - ok(info->dwStyle == (DWORD)GetWindowLongA(hwnd, GWL_STYLE), - "wrong dwStyle: %08x != %08x\n", info->dwStyle, GetWindowLongA(hwnd, GWL_STYLE)); - /* Windows reports a not documented exstyle 0x800 in WINDOWINFO, but - * doesn't return it in GetWindowLong(hwnd, GWL_EXSTYLE). - */ - ok((info->dwExStyle & ~0x800) == (DWORD)GetWindowLongA(hwnd, GWL_EXSTYLE), - "wrong dwExStyle: %08x != %08x\n", info->dwExStyle, GetWindowLongA(hwnd, GWL_EXSTYLE)); - status = (GetActiveWindow() == hwnd) ? WS_ACTIVECAPTION : 0; - ok(info->dwWindowStatus == status, "wrong dwWindowStatus: %04x != %04x\n", - info->dwWindowStatus, status); - - trace("rcWindow: %d,%d - %d,%d\n", rcWindow.left, rcWindow.top, rcWindow.right, rcWindow.bottom); - trace("rcClient: %d,%d - %d,%d\n", rcClient.left, rcClient.top, rcClient.right, rcClient.bottom); - - /* win2k and XP return broken border info in GetWindowInfo most of - * the time, so there is no point in testing it. - */ -#if 0 - UINT border; - ok(info->cxWindowBorders == (unsigned)(rcClient.left - rcWindow.left), - "wrong cxWindowBorders %d != %d\n", info->cxWindowBorders, rcClient.left - rcWindow.left); - border = min(rcWindow.bottom - rcClient.bottom, rcClient.top - rcWindow.top); - ok(info->cyWindowBorders == border, - "wrong cyWindowBorders %d != %d\n", info->cyWindowBorders, border); -#endif - ok(info->atomWindowType == GetClassLongA(hwnd, GCW_ATOM), "wrong atomWindowType\n"); - ok(info->wCreatorVersion == 0x0400 /* NT4, Win2000, XP, Win2003 */ || - info->wCreatorVersion == 0x0500 /* Vista */, - "wrong wCreatorVersion %04x\n", info->wCreatorVersion); -} - -static void FixedAdjustWindowRectEx(RECT* rc, LONG style, BOOL menu, LONG exstyle) -{ - AdjustWindowRectEx(rc, style, menu, exstyle); - /* AdjustWindowRectEx does not include scroll bars */ - if (style & WS_VSCROLL) - { - if(exstyle & WS_EX_LEFTSCROLLBAR) - rc->left -= GetSystemMetrics(SM_CXVSCROLL); - else - rc->right += GetSystemMetrics(SM_CXVSCROLL); - } - if (style & WS_HSCROLL) - rc->bottom += GetSystemMetrics(SM_CYHSCROLL); -} - -static void test_nonclient_area(HWND hwnd) -{ - DWORD style, exstyle; - RECT rc_window, rc_client, rc; - BOOL menu; - BOOL is_win9x = GetWindowLongPtrW(hwnd, GWLP_WNDPROC) == 0; - - style = GetWindowLongA(hwnd, GWL_STYLE); - exstyle = GetWindowLongA(hwnd, GWL_EXSTYLE); - menu = !(style & WS_CHILD) && GetMenu(hwnd) != 0; - - GetWindowRect(hwnd, &rc_window); - trace("window: (%d,%d)-(%d,%d)\n", rc_window.left, rc_window.top, rc_window.right, rc_window.bottom); - GetClientRect(hwnd, &rc_client); - trace("client: (%d,%d)-(%d,%d)\n", rc_client.left, rc_client.top, rc_client.right, rc_client.bottom); - - /* avoid some cases when things go wrong */ - if (IsRectEmpty(&rc_window) || IsRectEmpty(&rc_client) || - rc_window.right > 32768 || rc_window.bottom > 32768) return; - - CopyRect(&rc, &rc_client); - MapWindowPoints(hwnd, 0, (LPPOINT)&rc, 2); - FixedAdjustWindowRectEx(&rc, style, menu, exstyle); - - trace("calc window: (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); - ok(EqualRect(&rc, &rc_window), "window rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d\n", style, exstyle, menu); - - - CopyRect(&rc, &rc_window); - DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc); - MapWindowPoints(0, hwnd, (LPPOINT)&rc, 2); - trace("calc client: (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); - ok(EqualRect(&rc, &rc_client), "client rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d\n", style, exstyle, menu); - - /* Win9x doesn't like WM_NCCALCSIZE with synthetic data and crashes */; - if (is_win9x) - return; - - /* and now test AdjustWindowRectEx and WM_NCCALCSIZE on synthetic data */ - SetRect(&rc_client, 0, 0, 250, 150); - CopyRect(&rc_window, &rc_client); - MapWindowPoints(hwnd, 0, (LPPOINT)&rc_window, 2); - FixedAdjustWindowRectEx(&rc_window, style, menu, exstyle); - trace("calc window: (%d,%d)-(%d,%d)\n", - rc_window.left, rc_window.top, rc_window.right, rc_window.bottom); - - CopyRect(&rc, &rc_window); - DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc); - MapWindowPoints(0, hwnd, (LPPOINT)&rc, 2); - trace("calc client: (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); - ok(EqualRect(&rc, &rc_client), "synthetic rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d\n", style, exstyle, menu); -} - -static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam) -{ - static const char *CBT_code_name[10] = { - "HCBT_MOVESIZE", - "HCBT_MINMAX", - "HCBT_QS", - "HCBT_CREATEWND", - "HCBT_DESTROYWND", - "HCBT_ACTIVATE", - "HCBT_CLICKSKIPPED", - "HCBT_KEYSKIPPED", - "HCBT_SYSCOMMAND", - "HCBT_SETFOCUS" }; - const char *code_name = (nCode >= 0 && nCode <= HCBT_SETFOCUS) ? CBT_code_name[nCode] : "Unknown"; - - trace("CBT: %d (%s), %08lx, %08lx\n", nCode, code_name, wParam, lParam); - - /* on HCBT_DESTROYWND window state is undefined */ - if (nCode != HCBT_DESTROYWND && IsWindow((HWND)wParam)) - { - if (pGetWindowInfo) - { - WINDOWINFO info; - - /* Win98 actually does check the info.cbSize and doesn't allow - * it to be anything except sizeof(WINDOWINFO), while Win95, Win2k, - * WinXP do not check it at all. - */ - info.cbSize = sizeof(WINDOWINFO); - ok(pGetWindowInfo((HWND)wParam, &info), "GetWindowInfo should not fail\n"); - verify_window_info((HWND)wParam, &info); - } - } - - switch (nCode) - { - case HCBT_CREATEWND: - { - static const RECT rc_null; - RECT rc; - LONG style; - CBT_CREATEWNDA *createwnd = (CBT_CREATEWNDA *)lParam; - trace("HCBT_CREATEWND: hwnd %p, parent %p, style %08x\n", - (HWND)wParam, createwnd->lpcs->hwndParent, createwnd->lpcs->style); - ok(createwnd->hwndInsertAfter == HWND_TOP, "hwndInsertAfter should be always HWND_TOP\n"); - - /* WS_VISIBLE should be turned off yet */ - style = createwnd->lpcs->style & ~WS_VISIBLE; - ok(style == GetWindowLongA((HWND)wParam, GWL_STYLE), - "style of hwnd and style in the CREATESTRUCT do not match: %08x != %08x\n", - GetWindowLongA((HWND)wParam, GWL_STYLE), style); - - if (0) - { - /* Uncomment this once the test succeeds in all cases */ - if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD) - { - ok(GetParent((HWND)wParam) == hwndMessage, - "wrong result from GetParent %p: message window %p\n", - GetParent((HWND)wParam), hwndMessage); - } - else - ok(!GetParent((HWND)wParam), "GetParent should return 0 at this point\n"); - - ok(!GetWindow((HWND)wParam, GW_OWNER), "GW_OWNER should be set to 0 at this point\n"); - } - if (0) - { - /* while NT assigns GW_HWNDFIRST/LAST some values at this point, - * Win9x still has them set to 0. - */ - ok(GetWindow((HWND)wParam, GW_HWNDFIRST) != 0, "GW_HWNDFIRST should not be set to 0 at this point\n"); - ok(GetWindow((HWND)wParam, GW_HWNDLAST) != 0, "GW_HWNDLAST should not be set to 0 at this point\n"); - } - ok(!GetWindow((HWND)wParam, GW_HWNDPREV), "GW_HWNDPREV should be set to 0 at this point\n"); - ok(!GetWindow((HWND)wParam, GW_HWNDNEXT), "GW_HWNDNEXT should be set to 0 at this point\n"); - - if (0) - { - /* Uncomment this once the test succeeds in all cases */ - if (pGetAncestor) - { - ok(pGetAncestor((HWND)wParam, GA_PARENT) == hwndMessage, "GA_PARENT should be set to hwndMessage at this point\n"); - ok(pGetAncestor((HWND)wParam, GA_ROOT) == (HWND)wParam, - "GA_ROOT is set to %p, expected %p\n", pGetAncestor((HWND)wParam, GA_ROOT), (HWND)wParam); - - if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD) - ok(pGetAncestor((HWND)wParam, GA_ROOTOWNER) == hwndMessage, - "GA_ROOTOWNER should be set to hwndMessage at this point\n"); - else - ok(pGetAncestor((HWND)wParam, GA_ROOTOWNER) == (HWND)wParam, - "GA_ROOTOWNER is set to %p, expected %p\n", pGetAncestor((HWND)wParam, GA_ROOTOWNER), (HWND)wParam); - } - - ok(GetWindowRect((HWND)wParam, &rc), "GetWindowRect failed\n"); - ok(EqualRect(&rc, &rc_null), "window rect should be set to 0 HCBT_CREATEWND\n"); - ok(GetClientRect((HWND)wParam, &rc), "GetClientRect failed\n"); - ok(EqualRect(&rc, &rc_null), "client rect should be set to 0 on HCBT_CREATEWND\n"); - } - break; - } - } - - return CallNextHookEx(hhook, nCode, wParam, lParam); -} - -static void test_shell_window(void) -{ - BOOL ret; - DWORD error; - HMODULE hinst, hUser32; - BOOL (WINAPI*SetShellWindow)(HWND); - BOOL (WINAPI*SetShellWindowEx)(HWND, HWND); - HWND hwnd1, hwnd2, hwnd3, hwnd4, hwnd5; - HWND shellWindow, nextWnd; - - if (!GetWindowLongW(GetDesktopWindow(), GWL_STYLE)) - { - trace("Skipping shell window test on Win9x\n"); - return; - } - - shellWindow = GetShellWindow(); - hinst = GetModuleHandle(0); - hUser32 = GetModuleHandleA("user32"); - - SetShellWindow = (void *)GetProcAddress(hUser32, "SetShellWindow"); - SetShellWindowEx = (void *)GetProcAddress(hUser32, "SetShellWindowEx"); - - trace("previous shell window: %p\n", shellWindow); - - if (shellWindow) { - DWORD pid; - HANDLE hProcess; - - ret = DestroyWindow(shellWindow); - error = GetLastError(); - - ok(!ret, "DestroyWindow(shellWindow)\n"); - /* passes on Win XP, but not on Win98 */ - ok(error==ERROR_ACCESS_DENIED, "ERROR_ACCESS_DENIED after DestroyWindow(shellWindow)\n"); - - /* close old shell instance */ - GetWindowThreadProcessId(shellWindow, &pid); - hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); - ret = TerminateProcess(hProcess, 0); - ok(ret, "termination of previous shell process failed: GetLastError()=%d\n", GetLastError()); - WaitForSingleObject(hProcess, INFINITE); /* wait for termination */ - CloseHandle(hProcess); - } - - hwnd1 = CreateWindowEx(0, TEXT("#32770"), TEXT("TEST1"), WS_OVERLAPPEDWINDOW/*|WS_VISIBLE*/, 100, 100, 300, 200, 0, 0, hinst, 0); - trace("created window 1: %p\n", hwnd1); - - ret = SetShellWindow(hwnd1); - ok(ret, "first call to SetShellWindow(hwnd1)\n"); - shellWindow = GetShellWindow(); - ok(shellWindow==hwnd1, "wrong shell window: %p\n", shellWindow); - - ret = SetShellWindow(hwnd1); - ok(!ret, "second call to SetShellWindow(hwnd1)\n"); - - ret = SetShellWindow(0); - error = GetLastError(); - /* passes on Win XP, but not on Win98 - ok(!ret, "reset shell window by SetShellWindow(0)\n"); - ok(error==ERROR_INVALID_WINDOW_HANDLE, "ERROR_INVALID_WINDOW_HANDLE after SetShellWindow(0)\n"); */ - - ret = SetShellWindow(hwnd1); - /* passes on Win XP, but not on Win98 - ok(!ret, "third call to SetShellWindow(hwnd1)\n"); */ - - SetWindowLong(hwnd1, GWL_EXSTYLE, GetWindowLong(hwnd1,GWL_EXSTYLE)|WS_EX_TOPMOST); - ret = GetWindowLong(hwnd1,GWL_EXSTYLE)&WS_EX_TOPMOST? TRUE: FALSE; - ok(!ret, "SetWindowExStyle(hwnd1, WS_EX_TOPMOST)\n"); - - ret = DestroyWindow(hwnd1); - ok(ret, "DestroyWindow(hwnd1)\n"); - - hwnd2 = CreateWindowEx(WS_EX_TOPMOST, TEXT("#32770"), TEXT("TEST2"), WS_OVERLAPPEDWINDOW/*|WS_VISIBLE*/, 150, 250, 300, 200, 0, 0, hinst, 0); - trace("created window 2: %p\n", hwnd2); - ret = SetShellWindow(hwnd2); - ok(!ret, "SetShellWindow(hwnd2) with WS_EX_TOPMOST\n"); - - hwnd3 = CreateWindowEx(0, TEXT("#32770"), TEXT("TEST3"), WS_OVERLAPPEDWINDOW/*|WS_VISIBLE*/, 200, 400, 300, 200, 0, 0, hinst, 0); - trace("created window 3: %p\n", hwnd3); - - hwnd4 = CreateWindowEx(0, TEXT("#32770"), TEXT("TEST4"), WS_OVERLAPPEDWINDOW/*|WS_VISIBLE*/, 250, 500, 300, 200, 0, 0, hinst, 0); - trace("created window 4: %p\n", hwnd4); - - nextWnd = GetWindow(hwnd4, GW_HWNDNEXT); - ok(nextWnd==hwnd3, "wrong next window for hwnd4: %p - expected hwnd3\n", nextWnd); - - ret = SetShellWindow(hwnd4); - ok(ret, "SetShellWindow(hwnd4)\n"); - shellWindow = GetShellWindow(); - ok(shellWindow==hwnd4, "wrong shell window: %p - expected hwnd4\n", shellWindow); - - nextWnd = GetWindow(hwnd4, GW_HWNDNEXT); - ok(nextWnd==0, "wrong next window for hwnd4: %p - expected 0\n", nextWnd); - - ret = SetWindowPos(hwnd4, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); - ok(ret, "SetWindowPos(hwnd4, HWND_TOPMOST)\n"); - - ret = SetWindowPos(hwnd4, hwnd3, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); - ok(ret, "SetWindowPos(hwnd4, hwnd3\n"); - - ret = SetShellWindow(hwnd3); - ok(!ret, "SetShellWindow(hwnd3)\n"); - shellWindow = GetShellWindow(); - ok(shellWindow==hwnd4, "wrong shell window: %p - expected hwnd4\n", shellWindow); - - hwnd5 = CreateWindowEx(0, TEXT("#32770"), TEXT("TEST5"), WS_OVERLAPPEDWINDOW/*|WS_VISIBLE*/, 300, 600, 300, 200, 0, 0, hinst, 0); - trace("created window 5: %p\n", hwnd5); - ret = SetWindowPos(hwnd4, hwnd5, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); - ok(ret, "SetWindowPos(hwnd4, hwnd5)\n"); - - todo_wine - { - nextWnd = GetWindow(hwnd4, GW_HWNDNEXT); - ok(nextWnd==0, "wrong next window for hwnd4 after SetWindowPos(): %p - expected 0\n", nextWnd); - } - - /* destroy test windows */ - DestroyWindow(hwnd2); - DestroyWindow(hwnd3); - DestroyWindow(hwnd4); - DestroyWindow(hwnd5); -} - -/************** MDI test ****************/ - -static char mdi_lParam_test_message[] = "just a test string"; - -static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id) -{ - MDICREATESTRUCTA mdi_cs; - HWND mdi_child; - static const WCHAR classW[] = {'M','D','I','_','c','h','i','l','d','_','C','l','a','s','s','_','1',0}; - static const WCHAR titleW[] = {'M','D','I',' ','c','h','i','l','d',0}; - BOOL isWin9x = FALSE; - - mdi_cs.szClass = "MDI_child_Class_1"; - mdi_cs.szTitle = "MDI child"; - mdi_cs.hOwner = GetModuleHandle(0); - mdi_cs.x = CW_USEDEFAULT; - mdi_cs.y = CW_USEDEFAULT; - mdi_cs.cx = CW_USEDEFAULT; - mdi_cs.cy = CW_USEDEFAULT; - mdi_cs.style = 0; - mdi_cs.lParam = (LPARAM)mdi_lParam_test_message; - mdi_child = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&mdi_cs); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - - mdi_cs.style = 0x7fffffff; /* without WS_POPUP */ - mdi_child = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&mdi_cs); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - - mdi_cs.style = 0xffffffff; /* with WS_POPUP */ - mdi_child = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&mdi_cs); - if (GetWindowLongA(mdi_client, GWL_STYLE) & MDIS_ALLCHILDSTYLES) - { - ok(!mdi_child, "MDI child with WS_POPUP and with MDIS_ALLCHILDSTYLES should fail\n"); - } - else - { - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - } - - /* test MDICREATESTRUCT A<->W mapping */ - /* MDICREATESTRUCTA and MDICREATESTRUCTW have the same layout */ - mdi_cs.style = 0; - mdi_cs.szClass = (LPCSTR)classW; - mdi_cs.szTitle = (LPCSTR)titleW; - SetLastError(0xdeadbeef); - mdi_child = (HWND)SendMessageW(mdi_client, WM_MDICREATE, 0, (LPARAM)&mdi_cs); - if (!mdi_child) - { - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - isWin9x = TRUE; - else - ok(mdi_child != 0, "MDI child creation failed\n"); - } - else - { - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - } - - mdi_child = CreateMDIWindowA("MDI_child_Class_1", "MDI child", - 0, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, GetModuleHandle(0), - (LPARAM)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - - mdi_child = CreateMDIWindowA("MDI_child_Class_1", "MDI child", - 0x7fffffff, /* without WS_POPUP */ - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, GetModuleHandle(0), - (LPARAM)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - - mdi_child = CreateMDIWindowA("MDI_child_Class_1", "MDI child", - 0xffffffff, /* with WS_POPUP */ - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, GetModuleHandle(0), - (LPARAM)mdi_lParam_test_message); - if (GetWindowLongA(mdi_client, GWL_STYLE) & MDIS_ALLCHILDSTYLES) - { - ok(!mdi_child, "MDI child with WS_POPUP and with MDIS_ALLCHILDSTYLES should fail\n"); - } - else - { - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - } - - /* test MDICREATESTRUCT A<->W mapping */ - SetLastError(0xdeadbeef); - mdi_child = CreateMDIWindowW(classW, titleW, - 0, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, GetModuleHandle(0), - (LPARAM)mdi_lParam_test_message); - if (!mdi_child) - { - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - isWin9x = TRUE; - else - ok(mdi_child != 0, "MDI child creation failed\n"); - } - else - { - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - } - - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_Class_1", "MDI child", - 0, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_Class_1", "MDI child", - 0x7fffffff, /* without WS_POPUP */ - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_Class_1", "MDI child", - 0xffffffff, /* with WS_POPUP */ - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - if (GetWindowLongA(mdi_client, GWL_STYLE) & MDIS_ALLCHILDSTYLES) - { - ok(!mdi_child, "MDI child with WS_POPUP and with MDIS_ALLCHILDSTYLES should fail\n"); - } - else - { - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - } - - /* test MDICREATESTRUCT A<->W mapping */ - SetLastError(0xdeadbeef); - mdi_child = CreateWindowExW(WS_EX_MDICHILD, classW, titleW, - 0, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - if (!mdi_child) - { - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - isWin9x = TRUE; - else - ok(mdi_child != 0, "MDI child creation failed\n"); - } - else - { - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0); - ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n"); - } - - /* This test fails on Win9x */ - if (!isWin9x) - { - mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_Class_2", "MDI child", - WS_CHILD, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - parent, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - ok(!mdi_child, "WS_EX_MDICHILD with a not MDIClient parent should fail\n"); - } - - mdi_child = CreateWindowExA(0, "MDI_child_Class_2", "MDI child", - WS_CHILD, /* without WS_POPUP */ - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - DestroyWindow(mdi_child); - - mdi_child = CreateWindowExA(0, "MDI_child_Class_2", "MDI child", - WS_CHILD | WS_POPUP, /* with WS_POPUP */ - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - DestroyWindow(mdi_child); - - /* maximized child */ - mdi_child = CreateWindowExA(0, "MDI_child_Class_2", "MDI child", - WS_CHILD | WS_MAXIMIZE, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - DestroyWindow(mdi_child); - - trace("Creating maximized child with a caption\n"); - mdi_child = CreateWindowExA(0, "MDI_child_Class_2", "MDI child", - WS_CHILD | WS_MAXIMIZE | WS_CAPTION, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - DestroyWindow(mdi_child); - - trace("Creating maximized child with a caption and a thick frame\n"); - mdi_child = CreateWindowExA(0, "MDI_child_Class_2", "MDI child", - WS_CHILD | WS_MAXIMIZE | WS_CAPTION | WS_THICKFRAME, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - mdi_client, 0, GetModuleHandle(0), - (LPVOID)mdi_lParam_test_message); - ok(mdi_child != 0, "MDI child creation failed\n"); - ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID)); - DestroyWindow(mdi_child); -} - -/********************************************************************** - * MDI_ChildGetMinMaxInfo (copied from windows/mdi.c) - * - * Note: The rule here is that client rect of the maximized MDI child - * is equal to the client rect of the MDI client window. - */ -static void MDI_ChildGetMinMaxInfo( HWND client, HWND hwnd, MINMAXINFO* lpMinMax ) -{ - RECT rect; - - GetClientRect( client, &rect ); - AdjustWindowRectEx( &rect, GetWindowLongA( hwnd, GWL_STYLE ), - 0, GetWindowLongA( hwnd, GWL_EXSTYLE )); - - rect.right -= rect.left; - rect.bottom -= rect.top; - lpMinMax->ptMaxSize.x = rect.right; - lpMinMax->ptMaxSize.y = rect.bottom; - - lpMinMax->ptMaxPosition.x = rect.left; - lpMinMax->ptMaxPosition.y = rect.top; - - trace("max rect (%d,%d - %d, %d)\n", - rect.left, rect.top, rect.right, rect.bottom); -} - -static LRESULT WINAPI mdi_child_wnd_proc_1(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_NCCREATE: - case WM_CREATE: - { - CREATESTRUCTA *cs = (CREATESTRUCTA *)lparam; - MDICREATESTRUCTA *mdi_cs = (MDICREATESTRUCTA *)cs->lpCreateParams; - - ok(cs->dwExStyle & WS_EX_MDICHILD, "WS_EX_MDICHILD should be set\n"); - ok(mdi_cs->lParam == (LPARAM)mdi_lParam_test_message, "wrong mdi_cs->lParam\n"); - - ok(!lstrcmpA(cs->lpszClass, "MDI_child_Class_1"), "wrong class name\n"); - ok(!lstrcmpA(cs->lpszClass, mdi_cs->szClass), "class name does not match\n"); - ok(!lstrcmpA(cs->lpszName, "MDI child"), "wrong title\n"); - ok(!lstrcmpA(cs->lpszName, mdi_cs->szTitle), "title does not match\n"); - ok(cs->hInstance == mdi_cs->hOwner, "%p != %p\n", cs->hInstance, mdi_cs->hOwner); - - /* MDICREATESTRUCT should have original values */ - ok(mdi_cs->style == 0 || mdi_cs->style == 0x7fffffff || mdi_cs->style == 0xffffffff, - "mdi_cs->style does not match (%08x)\n", mdi_cs->style); - ok(mdi_cs->x == CW_USEDEFAULT, "%d != CW_USEDEFAULT\n", mdi_cs->x); - ok(mdi_cs->y == CW_USEDEFAULT, "%d != CW_USEDEFAULT\n", mdi_cs->y); - ok(mdi_cs->cx == CW_USEDEFAULT, "%d != CW_USEDEFAULT\n", mdi_cs->cx); - ok(mdi_cs->cy == CW_USEDEFAULT, "%d != CW_USEDEFAULT\n", mdi_cs->cy); - - /* CREATESTRUCT should have fixed values */ - ok(cs->x != CW_USEDEFAULT, "%d == CW_USEDEFAULT\n", cs->x); - ok(cs->y != CW_USEDEFAULT, "%d == CW_USEDEFAULT\n", cs->y); - - /* cx/cy == CW_USEDEFAULT are translated to NOT zero values */ - ok(cs->cx != CW_USEDEFAULT && cs->cx != 0, "%d == CW_USEDEFAULT\n", cs->cx); - ok(cs->cy != CW_USEDEFAULT && cs->cy != 0, "%d == CW_USEDEFAULT\n", cs->cy); - - ok(!(cs->style & WS_POPUP), "WS_POPUP is not allowed\n"); - - if (GetWindowLongA(cs->hwndParent, GWL_STYLE) & MDIS_ALLCHILDSTYLES) - { - LONG style = mdi_cs->style | WS_CHILD | WS_CLIPSIBLINGS; - ok(cs->style == style, - "cs->style does not match (%08x)\n", cs->style); - } - else - { - LONG style = mdi_cs->style; - style &= ~WS_POPUP; - style |= WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION | - WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; - ok(cs->style == style, - "cs->style does not match (%08x)\n", cs->style); - } - break; - } - - case WM_GETMINMAXINFO: - { - HWND client = GetParent(hwnd); - RECT rc; - MINMAXINFO *minmax = (MINMAXINFO *)lparam; - MINMAXINFO my_minmax; - LONG style, exstyle; - - style = GetWindowLongA(hwnd, GWL_STYLE); - exstyle = GetWindowLongA(hwnd, GWL_EXSTYLE); - - GetWindowRect(client, &rc); - trace("MDI client %p window size = (%d x %d)\n", client, rc.right-rc.left, rc.bottom-rc.top); - GetClientRect(client, &rc); - trace("MDI client %p client size = (%d x %d)\n", client, rc.right, rc.bottom); - trace("screen size: %d x %d\n", GetSystemMetrics(SM_CXSCREEN), - GetSystemMetrics(SM_CYSCREEN)); - - GetClientRect(client, &rc); - if ((style & WS_CAPTION) == WS_CAPTION) - style &= ~WS_BORDER; /* WS_CAPTION = WS_DLGFRAME | WS_BORDER */ - AdjustWindowRectEx(&rc, style, 0, exstyle); - trace("MDI child: calculated max window size = (%d x %d)\n", rc.right-rc.left, rc.bottom-rc.top); - - trace("ptReserved = (%d,%d)\n" - "ptMaxSize = (%d,%d)\n" - "ptMaxPosition = (%d,%d)\n" - "ptMinTrackSize = (%d,%d)\n" - "ptMaxTrackSize = (%d,%d)\n", - minmax->ptReserved.x, minmax->ptReserved.y, - minmax->ptMaxSize.x, minmax->ptMaxSize.y, - minmax->ptMaxPosition.x, minmax->ptMaxPosition.y, - minmax->ptMinTrackSize.x, minmax->ptMinTrackSize.y, - minmax->ptMaxTrackSize.x, minmax->ptMaxTrackSize.y); - - ok(minmax->ptMaxSize.x == rc.right - rc.left, "default width of maximized child %d != %d\n", - minmax->ptMaxSize.x, rc.right - rc.left); - ok(minmax->ptMaxSize.y == rc.bottom - rc.top, "default height of maximized child %d != %d\n", - minmax->ptMaxSize.y, rc.bottom - rc.top); - - DefMDIChildProcA(hwnd, msg, wparam, lparam); - - trace("DefMDIChildProc returned:\n" - "ptReserved = (%d,%d)\n" - "ptMaxSize = (%d,%d)\n" - "ptMaxPosition = (%d,%d)\n" - "ptMinTrackSize = (%d,%d)\n" - "ptMaxTrackSize = (%d,%d)\n", - minmax->ptReserved.x, minmax->ptReserved.y, - minmax->ptMaxSize.x, minmax->ptMaxSize.y, - minmax->ptMaxPosition.x, minmax->ptMaxPosition.y, - minmax->ptMinTrackSize.x, minmax->ptMinTrackSize.y, - minmax->ptMaxTrackSize.x, minmax->ptMaxTrackSize.y); - - MDI_ChildGetMinMaxInfo(client, hwnd, &my_minmax); - ok(minmax->ptMaxSize.x == my_minmax.ptMaxSize.x, "default width of maximized child %d != %d\n", - minmax->ptMaxSize.x, my_minmax.ptMaxSize.x); - ok(minmax->ptMaxSize.y == my_minmax.ptMaxSize.y, "default height of maximized child %d != %d\n", - minmax->ptMaxSize.y, my_minmax.ptMaxSize.y); - - return 1; - } - - case WM_MDIACTIVATE: - { - HWND active, client = GetParent(hwnd); - /*trace("%p WM_MDIACTIVATE %08x %08lx\n", hwnd, wparam, lparam);*/ - active = (HWND)SendMessageA(client, WM_MDIGETACTIVE, 0, 0); - if (hwnd == (HWND)lparam) /* if we are being activated */ - ok (active == (HWND)lparam, "new active %p != active %p\n", (HWND)lparam, active); - else - ok (active == (HWND)wparam, "old active %p != active %p\n", (HWND)wparam, active); - break; - } - } - return DefMDIChildProcA(hwnd, msg, wparam, lparam); -} - -static LRESULT WINAPI mdi_child_wnd_proc_2(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_NCCREATE: - case WM_CREATE: - { - CREATESTRUCTA *cs = (CREATESTRUCTA *)lparam; - - trace("%s\n", (msg == WM_NCCREATE) ? "WM_NCCREATE" : "WM_CREATE"); - trace("x %d, y %d, cx %d, cy %d\n", cs->x, cs->y, cs->cx, cs->cy); - - ok(!(cs->dwExStyle & WS_EX_MDICHILD), "WS_EX_MDICHILD should not be set\n"); - ok(cs->lpCreateParams == mdi_lParam_test_message, "wrong cs->lpCreateParams\n"); - - ok(!lstrcmpA(cs->lpszClass, "MDI_child_Class_2"), "wrong class name\n"); - ok(!lstrcmpA(cs->lpszName, "MDI child"), "wrong title\n"); - - /* CREATESTRUCT should have fixed values */ - /* For some reason Win9x doesn't translate cs->x from CW_USEDEFAULT, - while NT does. */ - /*ok(cs->x != CW_USEDEFAULT, "%d == CW_USEDEFAULT\n", cs->x);*/ - ok(cs->y != CW_USEDEFAULT, "%d == CW_USEDEFAULT\n", cs->y); - - /* cx/cy == CW_USEDEFAULT are translated to 0 */ - /* For some reason Win98 doesn't translate cs->cx from CW_USEDEFAULT, - while Win95, Win2k, WinXP do. */ - /*ok(cs->cx == 0, "%d != 0\n", cs->cx);*/ - ok(cs->cy == 0, "%d != 0\n", cs->cy); - break; - } - - case WM_GETMINMAXINFO: - { - HWND parent = GetParent(hwnd); - RECT rc; - MINMAXINFO *minmax = (MINMAXINFO *)lparam; - LONG style, exstyle; - - trace("WM_GETMINMAXINFO\n"); - - style = GetWindowLongA(hwnd, GWL_STYLE); - exstyle = GetWindowLongA(hwnd, GWL_EXSTYLE); - - GetClientRect(parent, &rc); - trace("parent %p client size = (%d x %d)\n", parent, rc.right, rc.bottom); - - GetClientRect(parent, &rc); - if ((style & WS_CAPTION) == WS_CAPTION) - style &= ~WS_BORDER; /* WS_CAPTION = WS_DLGFRAME | WS_BORDER */ - AdjustWindowRectEx(&rc, style, 0, exstyle); - trace("calculated max child window size = (%d x %d)\n", rc.right-rc.left, rc.bottom-rc.top); - - trace("ptReserved = (%d,%d)\n" - "ptMaxSize = (%d,%d)\n" - "ptMaxPosition = (%d,%d)\n" - "ptMinTrackSize = (%d,%d)\n" - "ptMaxTrackSize = (%d,%d)\n", - minmax->ptReserved.x, minmax->ptReserved.y, - minmax->ptMaxSize.x, minmax->ptMaxSize.y, - minmax->ptMaxPosition.x, minmax->ptMaxPosition.y, - minmax->ptMinTrackSize.x, minmax->ptMinTrackSize.y, - minmax->ptMaxTrackSize.x, minmax->ptMaxTrackSize.y); - - ok(minmax->ptMaxSize.x == rc.right - rc.left, "default width of maximized child %d != %d\n", - minmax->ptMaxSize.x, rc.right - rc.left); - ok(minmax->ptMaxSize.y == rc.bottom - rc.top, "default height of maximized child %d != %d\n", - minmax->ptMaxSize.y, rc.bottom - rc.top); - break; - } - - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lparam; - RECT rc1, rc2; - - GetWindowRect(hwnd, &rc1); - trace("window: (%d,%d)-(%d,%d)\n", rc1.left, rc1.top, rc1.right, rc1.bottom); - SetRect(&rc2, winpos->x, winpos->y, winpos->x + winpos->cx, winpos->y + winpos->cy); - /* note: winpos coordinates are relative to parent */ - MapWindowPoints(GetParent(hwnd), 0, (LPPOINT)&rc2, 2); - trace("pos: (%d,%d)-(%d,%d)\n", rc2.left, rc2.top, rc2.right, rc2.bottom); - ok(EqualRect(&rc1, &rc2), "rects do not match\n"); - - GetWindowRect(hwnd, &rc1); - GetClientRect(hwnd, &rc2); - DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc1); - MapWindowPoints(0, hwnd, (LPPOINT)&rc1, 2); - ok(EqualRect(&rc1, &rc2), "rects do not match\n"); - } - /* fall through */ - case WM_WINDOWPOSCHANGING: - { - WINDOWPOS *winpos = (WINDOWPOS *)lparam; - WINDOWPOS my_winpos = *winpos; - - trace("%s\n", (msg == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - - DefWindowProcA(hwnd, msg, wparam, lparam); - - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - - ok(!memcmp(&my_winpos, winpos, sizeof(WINDOWPOS)), - "DefWindowProc should not change WINDOWPOS values\n"); - - return 1; - } - } - return DefWindowProcA(hwnd, msg, wparam, lparam); -} - -static LRESULT WINAPI mdi_main_wnd_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - static HWND mdi_client; - - switch (msg) - { - case WM_CREATE: - { - CLIENTCREATESTRUCT client_cs; - RECT rc; - - GetClientRect(hwnd, &rc); - - client_cs.hWindowMenu = 0; - client_cs.idFirstChild = 1; - - /* MDIClient without MDIS_ALLCHILDSTYLES */ - mdi_client = CreateWindowExA(0, "mdiclient", - NULL, - WS_CHILD /*| WS_VISIBLE*/, - /* tests depend on a not zero MDIClient size */ - 0, 0, rc.right, rc.bottom, - hwnd, 0, GetModuleHandle(0), - (LPVOID)&client_cs); - assert(mdi_client); - test_MDI_create(hwnd, mdi_client, client_cs.idFirstChild); - DestroyWindow(mdi_client); - - /* MDIClient with MDIS_ALLCHILDSTYLES */ - mdi_client = CreateWindowExA(0, "mdiclient", - NULL, - WS_CHILD | MDIS_ALLCHILDSTYLES /*| WS_VISIBLE*/, - /* tests depend on a not zero MDIClient size */ - 0, 0, rc.right, rc.bottom, - hwnd, 0, GetModuleHandle(0), - (LPVOID)&client_cs); - assert(mdi_client); - test_MDI_create(hwnd, mdi_client, client_cs.idFirstChild); - DestroyWindow(mdi_client); - break; - } - - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS *winpos = (WINDOWPOS *)lparam; - RECT rc1, rc2; - - GetWindowRect(hwnd, &rc1); - trace("window: (%d,%d)-(%d,%d)\n", rc1.left, rc1.top, rc1.right, rc1.bottom); - SetRect(&rc2, winpos->x, winpos->y, winpos->x + winpos->cx, winpos->y + winpos->cy); - /* note: winpos coordinates are relative to parent */ - MapWindowPoints(GetParent(hwnd), 0, (LPPOINT)&rc2, 2); - trace("pos: (%d,%d)-(%d,%d)\n", rc2.left, rc2.top, rc2.right, rc2.bottom); - ok(EqualRect(&rc1, &rc2), "rects do not match\n"); - - GetWindowRect(hwnd, &rc1); - GetClientRect(hwnd, &rc2); - DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc1); - MapWindowPoints(0, hwnd, (LPPOINT)&rc1, 2); - ok(EqualRect(&rc1, &rc2), "rects do not match\n"); - } - /* fall through */ - case WM_WINDOWPOSCHANGING: - { - WINDOWPOS *winpos = (WINDOWPOS *)lparam; - WINDOWPOS my_winpos = *winpos; - - trace("%s\n", (msg == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED"); - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - - DefWindowProcA(hwnd, msg, wparam, lparam); - - trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n", - winpos->hwnd, winpos->hwndInsertAfter, - winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags); - - ok(!memcmp(&my_winpos, winpos, sizeof(WINDOWPOS)), - "DefWindowProc should not change WINDOWPOS values\n"); - - return 1; - } - - case WM_CLOSE: - PostQuitMessage(0); - break; - } - return DefFrameProcA(hwnd, mdi_client, msg, wparam, lparam); -} - -static BOOL mdi_RegisterWindowClasses(void) -{ - WNDCLASSA cls; - - cls.style = 0; - cls.lpfnWndProc = mdi_main_wnd_procA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "MDI_parent_Class"; - if(!RegisterClassA(&cls)) return FALSE; - - cls.lpfnWndProc = mdi_child_wnd_proc_1; - cls.lpszClassName = "MDI_child_Class_1"; - if(!RegisterClassA(&cls)) return FALSE; - - cls.lpfnWndProc = mdi_child_wnd_proc_2; - cls.lpszClassName = "MDI_child_Class_2"; - if(!RegisterClassA(&cls)) return FALSE; - - return TRUE; -} - -static void test_mdi(void) -{ - HWND mdi_hwndMain; - /*MSG msg;*/ - - if (!mdi_RegisterWindowClasses()) assert(0); - - mdi_hwndMain = CreateWindowExA(0, "MDI_parent_Class", "MDI parent window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX /*| WS_VISIBLE*/, - 100, 100, CW_USEDEFAULT, CW_USEDEFAULT, - GetDesktopWindow(), 0, - GetModuleHandle(0), NULL); - assert(mdi_hwndMain); -/* - while(GetMessage(&msg, 0, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } -*/ - DestroyWindow(mdi_hwndMain); -} - -static void test_icons(void) -{ - WNDCLASSEXA cls; - HWND hwnd; - HICON icon = LoadIconA(0, (LPSTR)IDI_APPLICATION); - HICON icon2 = LoadIconA(0, (LPSTR)IDI_QUESTION); - HICON small_icon = LoadImageA(0, (LPSTR)IDI_APPLICATION, IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED ); - HICON res; - - cls.cbSize = sizeof(cls); - cls.style = 0; - cls.lpfnWndProc = DefWindowProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = 0; - cls.hIcon = LoadIconA(0, (LPSTR)IDI_HAND); - cls.hIconSm = small_icon; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "IconWindowClass"; - - RegisterClassExA(&cls); - - hwnd = CreateWindowExA(0, "IconWindowClass", "icon test", 0, - 100, 100, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL); - assert( hwnd ); - - res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_BIG, 0 ); - ok( res == 0, "wrong big icon %p/0\n", res ); - res = (HICON)SendMessageA( hwnd, WM_SETICON, ICON_BIG, (LPARAM)icon ); - ok( res == 0, "wrong previous big icon %p/0\n", res ); - res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_BIG, 0 ); - ok( res == icon, "wrong big icon after set %p/%p\n", res, icon ); - res = (HICON)SendMessageA( hwnd, WM_SETICON, ICON_BIG, (LPARAM)icon2 ); - ok( res == icon, "wrong previous big icon %p/%p\n", res, icon ); - res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_BIG, 0 ); - ok( res == icon2, "wrong big icon after set %p/%p\n", res, icon2 ); - - res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_SMALL, 0 ); - ok( res == 0, "wrong small icon %p/0\n", res ); - /* this test is XP specific */ - /*res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_SMALL2, 0 ); - ok( res != 0, "wrong small icon %p\n", res );*/ - res = (HICON)SendMessageA( hwnd, WM_SETICON, ICON_SMALL, (LPARAM)icon ); - ok( res == 0, "wrong previous small icon %p/0\n", res ); - res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_SMALL, 0 ); - ok( res == icon, "wrong small icon after set %p/%p\n", res, icon ); - /* this test is XP specific */ - /*res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_SMALL2, 0 ); - ok( res == icon, "wrong small icon after set %p/%p\n", res, icon );*/ - res = (HICON)SendMessageA( hwnd, WM_SETICON, ICON_SMALL, (LPARAM)small_icon ); - ok( res == icon, "wrong previous small icon %p/%p\n", res, icon ); - res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_SMALL, 0 ); - ok( res == small_icon, "wrong small icon after set %p/%p\n", res, small_icon ); - /* this test is XP specific */ - /*res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_SMALL2, 0 ); - ok( res == small_icon, "wrong small icon after set %p/%p\n", res, small_icon );*/ - - /* make sure the big icon hasn't changed */ - res = (HICON)SendMessageA( hwnd, WM_GETICON, ICON_BIG, 0 ); - ok( res == icon2, "wrong big icon after set %p/%p\n", res, icon2 ); - - DestroyWindow( hwnd ); -} - -static LRESULT WINAPI nccalcsize_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - if (msg == WM_NCCALCSIZE) - { - RECT *rect = (RECT *)lparam; - /* first time around increase the rectangle, next time decrease it */ - if (rect->left == 100) InflateRect( rect, 10, 10 ); - else InflateRect( rect, -10, -10 ); - return 0; - } - return DefWindowProc( hwnd, msg, wparam, lparam ); -} - -static void test_SetWindowPos(HWND hwnd) -{ - RECT orig_win_rc, rect; - LONG_PTR old_proc; - BOOL is_win9x = GetWindowLongPtrW(hwnd, GWLP_WNDPROC) == 0; - - SetRect(&rect, 111, 222, 333, 444); - ok(!GetWindowRect(0, &rect), "GetWindowRect succeeded\n"); - ok(rect.left == 111 && rect.top == 222 && rect.right == 333 && rect.bottom == 444, - "wrong window rect %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - - SetRect(&rect, 111, 222, 333, 444); - ok(!GetClientRect(0, &rect), "GetClientRect succeeded\n"); - ok(rect.left == 111 && rect.top == 222 && rect.right == 333 && rect.bottom == 444, - "wrong window rect %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - - GetWindowRect(hwnd, &orig_win_rc); - - old_proc = SetWindowLongPtr( hwnd, GWLP_WNDPROC, (ULONG_PTR)nccalcsize_proc ); - SetWindowPos(hwnd, 0, 100, 100, 0, 0, SWP_NOZORDER|SWP_FRAMECHANGED); - GetWindowRect( hwnd, &rect ); - ok( rect.left == 100 && rect.top == 100 && rect.right == 100 && rect.bottom == 100, - "invalid window rect %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - GetClientRect( hwnd, &rect ); - MapWindowPoints( hwnd, 0, (POINT *)&rect, 2 ); - ok( rect.left == 90 && rect.top == 90 && rect.right == 110 && rect.bottom == 110, - "invalid client rect %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - - SetWindowPos(hwnd, 0, 200, 200, 0, 0, SWP_NOZORDER|SWP_FRAMECHANGED); - GetWindowRect( hwnd, &rect ); - ok( rect.left == 200 && rect.top == 200 && rect.right == 200 && rect.bottom == 200, - "invalid window rect %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - GetClientRect( hwnd, &rect ); - MapWindowPoints( hwnd, 0, (POINT *)&rect, 2 ); - ok( rect.left == 210 && rect.top == 210 && rect.right == 190 && rect.bottom == 190, - "invalid client rect %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - - SetWindowPos(hwnd, 0, orig_win_rc.left, orig_win_rc.top, - orig_win_rc.right, orig_win_rc.bottom, 0); - SetWindowLongPtr( hwnd, GWLP_WNDPROC, old_proc ); - - /* Win9x truncates coordinates to 16-bit irrespectively */ - if (!is_win9x) - { - SetWindowPos(hwnd, 0, -32769, -40000, -32769, -90000, SWP_NOMOVE); - SetWindowPos(hwnd, 0, 32768, 40000, 32768, 40000, SWP_NOMOVE); - - SetWindowPos(hwnd, 0, -32769, -40000, -32769, -90000, SWP_NOSIZE); - SetWindowPos(hwnd, 0, 32768, 40000, 32768, 40000, SWP_NOSIZE); - } - - SetWindowPos(hwnd, 0, orig_win_rc.left, orig_win_rc.top, - orig_win_rc.right, orig_win_rc.bottom, 0); - - ok(!(GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST), "WS_EX_TOPMOST should not be set\n"); - SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); - ok(GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST, "WS_EX_TOPMOST should be set\n"); - SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); - ok(GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST, "WS_EX_TOPMOST should be set\n"); - SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); - ok(!(GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST), "WS_EX_TOPMOST should not be set\n"); -} - -static void test_SetMenu(HWND parent) -{ - HWND child; - HMENU hMenu, ret; - BOOL is_win9x = GetWindowLongPtrW(parent, GWLP_WNDPROC) == 0; - BOOL retok; - DWORD style; - - hMenu = CreateMenu(); - assert(hMenu); - - ok(SetMenu(parent, hMenu), "SetMenu on a top level window should not fail\n"); - if (0) - { - /* fails on (at least) Wine, NT4, XP SP2 */ - test_nonclient_area(parent); - } - ret = GetMenu(parent); - ok(ret == hMenu, "unexpected menu id %p\n", ret); - /* test whether we can destroy a menu assigned to a window */ - retok = DestroyMenu(hMenu); - ok( retok, "DestroyMenu error %d\n", GetLastError()); - ok(!IsMenu(hMenu), "menu handle should be not valid after DestroyMenu\n"); - ret = GetMenu(parent); - /* This test fails on Win9x */ - if (!is_win9x) - ok(ret == hMenu, "unexpected menu id %p\n", ret); - ok(SetMenu(parent, 0), "SetMenu(0) on a top level window should not fail\n"); - test_nonclient_area(parent); - - hMenu = CreateMenu(); - assert(hMenu); - - /* parent */ - ret = GetMenu(parent); - ok(ret == 0, "unexpected menu id %p\n", ret); - - ok(!SetMenu(parent, (HMENU)20), "SetMenu with invalid menu handle should fail\n"); - test_nonclient_area(parent); - ret = GetMenu(parent); - ok(ret == 0, "unexpected menu id %p\n", ret); - - ok(SetMenu(parent, hMenu), "SetMenu on a top level window should not fail\n"); - if (0) - { - /* fails on (at least) Wine, NT4, XP SP2 */ - test_nonclient_area(parent); - } - ret = GetMenu(parent); - ok(ret == hMenu, "unexpected menu id %p\n", ret); - - ok(SetMenu(parent, 0), "SetMenu(0) on a top level window should not fail\n"); - test_nonclient_area(parent); - ret = GetMenu(parent); - ok(ret == 0, "unexpected menu id %p\n", ret); - - /* child */ - child = CreateWindowExA(0, "static", NULL, WS_CHILD, 0, 0, 0, 0, parent, (HMENU)10, 0, NULL); - assert(child); - - ret = GetMenu(child); - ok(ret == (HMENU)10, "unexpected menu id %p\n", ret); - - ok(!SetMenu(child, (HMENU)20), "SetMenu with invalid menu handle should fail\n"); - test_nonclient_area(child); - ret = GetMenu(child); - ok(ret == (HMENU)10, "unexpected menu id %p\n", ret); - - ok(!SetMenu(child, hMenu), "SetMenu on a child window should fail\n"); - test_nonclient_area(child); - ret = GetMenu(child); - ok(ret == (HMENU)10, "unexpected menu id %p\n", ret); - - ok(!SetMenu(child, 0), "SetMenu(0) on a child window should fail\n"); - test_nonclient_area(child); - ret = GetMenu(child); - ok(ret == (HMENU)10, "unexpected menu id %p\n", ret); - - style = GetWindowLong(child, GWL_STYLE); - SetWindowLong(child, GWL_STYLE, style | WS_POPUP); - ok(SetMenu(child, hMenu), "SetMenu on a popup child window should not fail\n"); - ok(SetMenu(child, 0), "SetMenu on a popup child window should not fail\n"); - SetWindowLong(child, GWL_STYLE, style); - - SetWindowLong(child, GWL_STYLE, style | WS_OVERLAPPED); - ok(!SetMenu(child, hMenu), "SetMenu on a overlapped child window should fail\n"); - SetWindowLong(child, GWL_STYLE, style); - - DestroyWindow(child); - DestroyMenu(hMenu); -} - -static void test_window_tree(HWND parent, const DWORD *style, const int *order, int total) -{ - HWND child[5], hwnd; - int i; - - assert(total <= 5); - - hwnd = GetWindow(parent, GW_CHILD); - ok(!hwnd, "have to start without children to perform the test\n"); - - for (i = 0; i < total; i++) - { - if (style[i] & DS_CONTROL) - { - child[i] = CreateWindowExA(0, MAKEINTATOM(32770), "", style[i] & ~WS_VISIBLE, - 0,0,0,0, parent, (HMENU)i, 0, NULL); - if (style[i] & WS_VISIBLE) - ShowWindow(child[i], SW_SHOW); - - SetWindowPos(child[i], HWND_BOTTOM, 0,0,10,10, SWP_NOACTIVATE); - } - else - child[i] = CreateWindowExA(0, "static", "", style[i], 0,0,10,10, - parent, (HMENU)i, 0, NULL); - trace("child[%d] = %p\n", i, child[i]); - ok(child[i] != 0, "CreateWindowEx failed to create child window\n"); - } - - hwnd = GetWindow(parent, GW_CHILD); - ok(hwnd != 0, "GetWindow(GW_CHILD) failed\n"); - ok(hwnd == GetWindow(child[total - 1], GW_HWNDFIRST), "GW_HWNDFIRST is wrong\n"); - ok(child[order[total - 1]] == GetWindow(child[0], GW_HWNDLAST), "GW_HWNDLAST is wrong\n"); - - for (i = 0; i < total; i++) - { - trace("hwnd[%d] = %p\n", i, hwnd); - ok(child[order[i]] == hwnd, "Z order of child #%d is wrong\n", i); - - hwnd = GetWindow(hwnd, GW_HWNDNEXT); - } - - for (i = 0; i < total; i++) - ok(DestroyWindow(child[i]), "DestroyWindow failed\n"); -} - -static void test_children_zorder(HWND parent) -{ - const DWORD simple_style[5] = { WS_CHILD, WS_CHILD, WS_CHILD, WS_CHILD, - WS_CHILD }; - const int simple_order[5] = { 0, 1, 2, 3, 4 }; - - const DWORD complex_style[5] = { WS_CHILD, WS_CHILD | WS_MAXIMIZE, - WS_CHILD | WS_VISIBLE, WS_CHILD, - WS_CHILD | WS_MAXIMIZE | WS_VISIBLE }; - const int complex_order_1[1] = { 0 }; - const int complex_order_2[2] = { 1, 0 }; - const int complex_order_3[3] = { 1, 0, 2 }; - const int complex_order_4[4] = { 1, 0, 2, 3 }; - const int complex_order_5[5] = { 4, 1, 0, 2, 3 }; - const DWORD complex_style_6[3] = { WS_CHILD | WS_VISIBLE, - WS_CHILD | WS_CLIPSIBLINGS | DS_CONTROL | WS_VISIBLE, - WS_CHILD | WS_VISIBLE }; - const int complex_order_6[3] = { 0, 1, 2 }; - - /* simple WS_CHILD */ - test_window_tree(parent, simple_style, simple_order, 5); - - /* complex children styles */ - test_window_tree(parent, complex_style, complex_order_1, 1); - test_window_tree(parent, complex_style, complex_order_2, 2); - test_window_tree(parent, complex_style, complex_order_3, 3); - test_window_tree(parent, complex_style, complex_order_4, 4); - test_window_tree(parent, complex_style, complex_order_5, 5); - - /* another set of complex children styles */ - test_window_tree(parent, complex_style_6, complex_order_6, 3); -} - -#define check_z_order(hwnd, next, prev, owner, topmost) \ - check_z_order_debug((hwnd), (next), (prev), (owner), (topmost), \ - __FILE__, __LINE__) - -static void check_z_order_debug(HWND hwnd, HWND next, HWND prev, HWND owner, - BOOL topmost, const char *file, int line) -{ - HWND test; - DWORD ex_style; - - test = GetWindow(hwnd, GW_HWNDNEXT); - /* skip foreign windows */ - while (test && (GetWindowThreadProcessId(test, NULL) != our_pid || - ULongToHandle(GetWindowLongPtr(test, GWLP_HINSTANCE)) != GetModuleHandle(0))) - { - /*trace("skipping next %p (%p)\n", test, UlongToHandle(GetWindowLongPtr(test, GWLP_HINSTANCE)));*/ - test = GetWindow(test, GW_HWNDNEXT); - } - ok_(file, line)(next == test, "expected next %p, got %p\n", next, test); - - test = GetWindow(hwnd, GW_HWNDPREV); - /* skip foreign windows */ - while (test && (GetWindowThreadProcessId(test, NULL) != our_pid || - ULongToHandle(GetWindowLongPtr(test, GWLP_HINSTANCE)) != GetModuleHandle(0))) - { - /*trace("skipping prev %p (%p)\n", test, UlongToHandle(GetWindowLongPtr(test, GWLP_HINSTANCE)));*/ - test = GetWindow(test, GW_HWNDPREV); - } - ok_(file, line)(prev == test, "expected prev %p, got %p\n", prev, test); - - test = GetWindow(hwnd, GW_OWNER); - ok_(file, line)(owner == test, "expected owner %p, got %p\n", owner, test); - - ex_style = GetWindowLong(hwnd, GWL_EXSTYLE); - ok_(file, line)(!(ex_style & WS_EX_TOPMOST) == !topmost, "expected %stopmost\n", topmost ? "" : "NOT "); -} - -static void test_popup_zorder(HWND hwnd_D, HWND hwnd_E) -{ - HWND hwnd_A, hwnd_B, hwnd_C, hwnd_F; - - trace("hwnd_D %p, hwnd_E %p\n", hwnd_D, hwnd_E); - - SetWindowPos(hwnd_E, hwnd_D, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE); - - check_z_order(hwnd_D, hwnd_E, 0, 0, FALSE); - check_z_order(hwnd_E, 0, hwnd_D, 0, FALSE); - - hwnd_F = CreateWindowEx(0, "MainWindowClass", "Owner window", - WS_OVERLAPPED | WS_CAPTION, - 100, 100, 100, 100, - 0, 0, GetModuleHandle(0), NULL); - trace("hwnd_F %p\n", hwnd_F); - check_z_order(hwnd_F, hwnd_D, 0, 0, FALSE); - - SetWindowPos(hwnd_F, hwnd_E, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE); - check_z_order(hwnd_F, 0, hwnd_E, 0, FALSE); - check_z_order(hwnd_E, hwnd_F, hwnd_D, 0, FALSE); - check_z_order(hwnd_D, hwnd_E, 0, 0, FALSE); - - hwnd_C = CreateWindowEx(0, "MainWindowClass", NULL, - WS_POPUP, - 100, 100, 100, 100, - hwnd_F, 0, GetModuleHandle(0), NULL); - trace("hwnd_C %p\n", hwnd_C); - check_z_order(hwnd_F, 0, hwnd_E, 0, FALSE); - check_z_order(hwnd_E, hwnd_F, hwnd_D, 0, FALSE); - check_z_order(hwnd_D, hwnd_E, hwnd_C, 0, FALSE); - check_z_order(hwnd_C, hwnd_D, 0, hwnd_F, FALSE); - - hwnd_B = CreateWindowEx(WS_EX_TOPMOST, "MainWindowClass", NULL, - WS_POPUP, - 100, 100, 100, 100, - hwnd_F, 0, GetModuleHandle(0), NULL); - trace("hwnd_B %p\n", hwnd_B); - check_z_order(hwnd_F, 0, hwnd_E, 0, FALSE); - check_z_order(hwnd_E, hwnd_F, hwnd_D, 0, FALSE); - check_z_order(hwnd_D, hwnd_E, hwnd_C, 0, FALSE); - check_z_order(hwnd_C, hwnd_D, hwnd_B, hwnd_F, FALSE); - check_z_order(hwnd_B, hwnd_C, 0, hwnd_F, TRUE); - - hwnd_A = CreateWindowEx(WS_EX_TOPMOST, "MainWindowClass", NULL, - WS_POPUP, - 100, 100, 100, 100, - 0, 0, GetModuleHandle(0), NULL); - trace("hwnd_A %p\n", hwnd_A); - check_z_order(hwnd_F, 0, hwnd_E, 0, FALSE); - check_z_order(hwnd_E, hwnd_F, hwnd_D, 0, FALSE); - check_z_order(hwnd_D, hwnd_E, hwnd_C, 0, FALSE); - check_z_order(hwnd_C, hwnd_D, hwnd_B, hwnd_F, FALSE); - check_z_order(hwnd_B, hwnd_C, hwnd_A, hwnd_F, TRUE); - check_z_order(hwnd_A, hwnd_B, 0, 0, TRUE); - - trace("A %p B %p C %p D %p E %p F %p\n", hwnd_A, hwnd_B, hwnd_C, hwnd_D, hwnd_E, hwnd_F); - - /* move hwnd_F and its popups up */ - SetWindowPos(hwnd_F, HWND_TOP, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE); - check_z_order(hwnd_E, 0, hwnd_D, 0, FALSE); - check_z_order(hwnd_D, hwnd_E, hwnd_F, 0, FALSE); - check_z_order(hwnd_F, hwnd_D, hwnd_C, 0, FALSE); - check_z_order(hwnd_C, hwnd_F, hwnd_B, hwnd_F, FALSE); - check_z_order(hwnd_B, hwnd_C, hwnd_A, hwnd_F, TRUE); - check_z_order(hwnd_A, hwnd_B, 0, 0, TRUE); - - /* move hwnd_F and its popups down */ -#if 0 /* enable once Wine is fixed to pass this test */ - SetWindowPos(hwnd_F, HWND_BOTTOM, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE); - check_z_order(hwnd_F, 0, hwnd_C, 0, FALSE); - check_z_order(hwnd_C, hwnd_F, hwnd_B, hwnd_F, FALSE); - check_z_order(hwnd_B, hwnd_C, hwnd_E, hwnd_F, FALSE); - check_z_order(hwnd_E, hwnd_B, hwnd_D, 0, FALSE); - check_z_order(hwnd_D, hwnd_E, hwnd_A, 0, FALSE); - check_z_order(hwnd_A, hwnd_D, 0, 0, TRUE); -#endif - - DestroyWindow(hwnd_A); - DestroyWindow(hwnd_B); - DestroyWindow(hwnd_C); - DestroyWindow(hwnd_F); -} - -static void test_vis_rgn( HWND hwnd ) -{ - RECT win_rect, rgn_rect; - HRGN hrgn = CreateRectRgn( 0, 0, 0, 0 ); - HDC hdc; - - ShowWindow(hwnd,SW_SHOW); - hdc = GetDC( hwnd ); - ok( GetRandomRgn( hdc, hrgn, SYSRGN ) != 0, "GetRandomRgn failed\n" ); - GetWindowRect( hwnd, &win_rect ); - GetRgnBox( hrgn, &rgn_rect ); - if (GetVersion() & 0x80000000) - { - trace("win9x, mapping to screen coords\n"); - MapWindowPoints( hwnd, 0, (POINT *)&rgn_rect, 2 ); - } - trace("win: %d,%d-%d,%d\n", win_rect.left, win_rect.top, win_rect.right, win_rect.bottom ); - trace("rgn: %d,%d-%d,%d\n", rgn_rect.left, rgn_rect.top, rgn_rect.right, rgn_rect.bottom ); - ok( win_rect.left <= rgn_rect.left, "rgn left %d not inside win rect %d\n", - rgn_rect.left, win_rect.left ); - ok( win_rect.top <= rgn_rect.top, "rgn top %d not inside win rect %d\n", - rgn_rect.top, win_rect.top ); - ok( win_rect.right >= rgn_rect.right, "rgn right %d not inside win rect %d\n", - rgn_rect.right, win_rect.right ); - ok( win_rect.bottom >= rgn_rect.bottom, "rgn bottom %d not inside win rect %d\n", - rgn_rect.bottom, win_rect.bottom ); - ReleaseDC( hwnd, hdc ); -} - -static void test_SetFocus(HWND hwnd) -{ - HWND child; - - /* check if we can set focus to non-visible windows */ - - ShowWindow(hwnd, SW_SHOW); - SetFocus(0); - SetFocus(hwnd); - ok( GetFocus() == hwnd, "Failed to set focus to visible window %p\n", hwnd ); - ok( GetWindowLong(hwnd,GWL_STYLE) & WS_VISIBLE, "Window %p not visible\n", hwnd ); - ShowWindow(hwnd, SW_HIDE); - SetFocus(0); - SetFocus(hwnd); - ok( GetFocus() == hwnd, "Failed to set focus to invisible window %p\n", hwnd ); - ok( !(GetWindowLong(hwnd,GWL_STYLE) & WS_VISIBLE), "Window %p still visible\n", hwnd ); - child = CreateWindowExA(0, "static", NULL, WS_CHILD, 0, 0, 0, 0, hwnd, 0, 0, NULL); - assert(child); - SetFocus(child); - ok( GetFocus() == child, "Failed to set focus to invisible child %p\n", child ); - ok( !(GetWindowLong(child,GWL_STYLE) & WS_VISIBLE), "Child %p is visible\n", child ); - ShowWindow(child, SW_SHOW); - ok( GetWindowLong(child,GWL_STYLE) & WS_VISIBLE, "Child %p is not visible\n", child ); - ok( GetFocus() == child, "Focus no longer on child %p\n", child ); - ShowWindow(child, SW_HIDE); - ok( !(GetWindowLong(child,GWL_STYLE) & WS_VISIBLE), "Child %p is visible\n", child ); - ok( GetFocus() == hwnd, "Focus should be on parent %p, not %p\n", hwnd, GetFocus() ); - ShowWindow(child, SW_SHOW); - SetFocus(child); - ok( GetFocus() == child, "Focus should be on child %p\n", child ); - SetWindowPos(child,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_HIDEWINDOW); - ok( GetFocus() == child, "Focus should still be on child %p\n", child ); - - ShowWindow(child, SW_HIDE); - SetFocus(hwnd); - ok( GetFocus() == hwnd, "Focus should be on parent %p, not %p\n", hwnd, GetFocus() ); - SetWindowPos(child,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW); - ok( GetFocus() == hwnd, "Focus should still be on parent %p, not %p\n", hwnd, GetFocus() ); - ShowWindow(child, SW_HIDE); - ok( GetFocus() == hwnd, "Focus should still be on parent %p, not %p\n", hwnd, GetFocus() ); - - ShowWindow(hwnd, SW_SHOW); - ShowWindow(child, SW_SHOW); - SetFocus(child); - ok( GetFocus() == child, "Focus should be on child %p\n", child ); - EnableWindow(hwnd, FALSE); - ok( GetFocus() == child, "Focus should still be on child %p\n", child ); - EnableWindow(hwnd, TRUE); - - DestroyWindow( child ); -} - -static void check_wnd_state(HWND active, HWND foreground, HWND focus, HWND capture) -{ - ok(active == GetActiveWindow(), "GetActiveWindow() = %p\n", GetActiveWindow()); - if (foreground) - ok(foreground == GetForegroundWindow(), "GetForegroundWindow() = %p\n", GetForegroundWindow()); - ok(focus == GetFocus(), "GetFocus() = %p\n", GetFocus()); - ok(capture == GetCapture(), "GetCapture() = %p\n", GetCapture()); -} - -static void test_SetActiveWindow(HWND hwnd) -{ - HWND hwnd2; - - ShowWindow(hwnd, SW_HIDE); - SetFocus(0); - SetActiveWindow(0); - check_wnd_state(0, 0, 0, 0); - - /*trace("testing SetActiveWindow %p\n", hwnd);*/ - - ShowWindow(hwnd, SW_SHOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - hwnd2 = SetActiveWindow(0); - ok(hwnd2 == hwnd, "SetActiveWindow returned %p instead of %p\n", hwnd2, hwnd); - check_wnd_state(0, 0, 0, 0); - - hwnd2 = SetActiveWindow(hwnd); - ok(hwnd2 == 0, "SetActiveWindow returned %p instead of 0\n", hwnd2); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_SHOWWINDOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - ShowWindow(hwnd, SW_HIDE); - check_wnd_state(0, 0, 0, 0); - - /*trace("testing SetActiveWindow on an invisible window %p\n", hwnd);*/ - SetActiveWindow(hwnd); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - ShowWindow(hwnd, SW_SHOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL); - check_wnd_state(hwnd2, hwnd2, hwnd2, 0); - - DestroyWindow(hwnd2); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL); - check_wnd_state(hwnd2, hwnd2, hwnd2, 0); - - SetWindowPos(hwnd2,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW); - check_wnd_state(hwnd2, hwnd2, hwnd2, 0); - - DestroyWindow(hwnd2); - check_wnd_state(hwnd, hwnd, hwnd, 0); -} - -static void test_SetForegroundWindow(HWND hwnd) -{ - BOOL ret; - HWND hwnd2; - - ShowWindow(hwnd, SW_HIDE); - SetFocus(0); - SetActiveWindow(0); - check_wnd_state(0, 0, 0, 0); - - /*trace("testing SetForegroundWindow %p\n", hwnd);*/ - - ShowWindow(hwnd, SW_SHOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - hwnd2 = SetActiveWindow(0); - ok(hwnd2 == hwnd, "SetActiveWindow(0) returned %p instead of %p\n", hwnd2, hwnd); - check_wnd_state(0, 0, 0, 0); - - ret = SetForegroundWindow(hwnd); - ok(ret, "SetForegroundWindow returned FALSE instead of TRUE\n"); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - SetLastError(0xdeadbeef); - ret = SetForegroundWindow(0); - ok(!ret, "SetForegroundWindow returned TRUE instead of FALSE\n"); - ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "got error %d expected ERROR_INVALID_WINDOW_HANDLE\n", GetLastError()); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_SHOWWINDOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - hwnd2 = GetForegroundWindow(); - ok(hwnd2 == hwnd, "Wrong foreground window %p\n", hwnd2); - ok(SetForegroundWindow( GetDesktopWindow() ), "SetForegroundWindow(desktop) error: %d\n", GetLastError()); - hwnd2 = GetForegroundWindow(); - ok(hwnd2 != hwnd, "Wrong foreground window %p\n", hwnd2); - - ShowWindow(hwnd, SW_HIDE); - check_wnd_state(0, 0, 0, 0); - - /*trace("testing SetForegroundWindow on an invisible window %p\n", hwnd);*/ - ret = SetForegroundWindow(hwnd); - ok(ret, "SetForegroundWindow returned FALSE instead of TRUE\n"); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - ShowWindow(hwnd, SW_SHOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL); - check_wnd_state(hwnd2, hwnd2, hwnd2, 0); - - DestroyWindow(hwnd2); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL); - check_wnd_state(hwnd2, hwnd2, hwnd2, 0); - - SetWindowPos(hwnd2,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW); - check_wnd_state(hwnd2, hwnd2, hwnd2, 0); - - DestroyWindow(hwnd2); - check_wnd_state(hwnd, hwnd, hwnd, 0); -} - -static WNDPROC old_button_proc; - -static LRESULT WINAPI button_hook_proc(HWND button, UINT msg, WPARAM wparam, LPARAM lparam) -{ - LRESULT ret; - USHORT key_state; - - key_state = GetKeyState(VK_LBUTTON); - ok(!(key_state & 0x8000), "VK_LBUTTON should not be pressed, state %04x\n", key_state); - - ret = CallWindowProcA(old_button_proc, button, msg, wparam, lparam); - - if (msg == WM_LBUTTONDOWN) - { - HWND hwnd, capture; - - check_wnd_state(button, button, button, button); - - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, 0, 0, 10, 10, 0, 0, 0, NULL); - assert(hwnd); - trace("hwnd %p\n", hwnd); - - check_wnd_state(button, button, button, button); - - ShowWindow(hwnd, SW_SHOWNOACTIVATE); - - check_wnd_state(button, button, button, button); - - DestroyWindow(hwnd); - - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, 0, 0, 10, 10, 0, 0, 0, NULL); - assert(hwnd); - trace("hwnd %p\n", hwnd); - - check_wnd_state(button, button, button, button); - - /* button wnd proc should release capture on WM_KILLFOCUS if it does - * match internal button state. - */ - SendMessage(button, WM_KILLFOCUS, 0, 0); - check_wnd_state(button, button, button, 0); - - ShowWindow(hwnd, SW_SHOW); - check_wnd_state(hwnd, hwnd, hwnd, 0); - - capture = SetCapture(hwnd); - ok(capture == 0, "SetCapture() = %p\n", capture); - - check_wnd_state(hwnd, hwnd, hwnd, hwnd); - - DestroyWindow(hwnd); - - check_wnd_state(button, 0, button, 0); - } - - return ret; -} - -static void test_capture_1(void) -{ - HWND button, capture; - - capture = GetCapture(); - ok(capture == 0, "GetCapture() = %p\n", capture); - - button = CreateWindowExA(0, "button", NULL, WS_POPUP | WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL); - assert(button); - trace("button %p\n", button); - - old_button_proc = (WNDPROC)SetWindowLongPtrA(button, GWLP_WNDPROC, (LONG_PTR)button_hook_proc); - - SendMessageA(button, WM_LBUTTONDOWN, 0, 0); - - capture = SetCapture(button); - ok(capture == 0, "SetCapture() = %p\n", capture); - check_wnd_state(button, 0, button, button); - - DestroyWindow(button); - check_wnd_state(0, 0, 0, 0); -} - -static void test_capture_2(void) -{ - HWND button, hwnd, capture; - - check_wnd_state(0, 0, 0, 0); - - button = CreateWindowExA(0, "button", NULL, WS_POPUP | WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL); - assert(button); - trace("button %p\n", button); - - check_wnd_state(button, button, button, 0); - - capture = SetCapture(button); - ok(capture == 0, "SetCapture() = %p\n", capture); - - check_wnd_state(button, button, button, button); - - /* button wnd proc should ignore WM_KILLFOCUS if it doesn't match - * internal button state. - */ - SendMessage(button, WM_KILLFOCUS, 0, 0); - check_wnd_state(button, button, button, button); - - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, 0, 0, 10, 10, 0, 0, 0, NULL); - assert(hwnd); - trace("hwnd %p\n", hwnd); - - check_wnd_state(button, button, button, button); - - ShowWindow(hwnd, SW_SHOWNOACTIVATE); - - check_wnd_state(button, button, button, button); - - DestroyWindow(hwnd); - - hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP, 0, 0, 10, 10, 0, 0, 0, NULL); - assert(hwnd); - trace("hwnd %p\n", hwnd); - - check_wnd_state(button, button, button, button); - - ShowWindow(hwnd, SW_SHOW); - - check_wnd_state(hwnd, hwnd, hwnd, button); - - capture = SetCapture(hwnd); - ok(capture == button, "SetCapture() = %p\n", capture); - - check_wnd_state(hwnd, hwnd, hwnd, hwnd); - - DestroyWindow(hwnd); - check_wnd_state(button, button, button, 0); - - DestroyWindow(button); - check_wnd_state(0, 0, 0, 0); -} - -static void test_capture_3(HWND hwnd1, HWND hwnd2) -{ - BOOL ret; - - ShowWindow(hwnd1, SW_HIDE); - ShowWindow(hwnd2, SW_HIDE); - - ok(!IsWindowVisible(hwnd1), "%p should be invisible\n", hwnd1); - ok(!IsWindowVisible(hwnd2), "%p should be invisible\n", hwnd2); - - SetCapture(hwnd1); - check_wnd_state(0, 0, 0, hwnd1); - - SetCapture(hwnd2); - check_wnd_state(0, 0, 0, hwnd2); - - ShowWindow(hwnd1, SW_SHOW); - check_wnd_state(hwnd1, hwnd1, hwnd1, hwnd2); - - ret = ReleaseCapture(); - ok (ret, "releasecapture did not return TRUE.\n"); - ret = ReleaseCapture(); - ok (ret, "releasecapture did not return TRUE after second try.\n"); -} - -static void test_keyboard_input(HWND hwnd) -{ - MSG msg; - BOOL ret; - - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - flush_events( TRUE ); - - ok(GetActiveWindow() == hwnd, "wrong active window %p\n", GetActiveWindow()); - - SetFocus(hwnd); - ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus()); - - flush_events( TRUE ); - - PostMessageA(hwnd, WM_KEYDOWN, 0, 0); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message); - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok( !ret, "message %04x available\n", msg.message); - - ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus()); - - PostThreadMessageA(GetCurrentThreadId(), WM_KEYDOWN, 0, 0); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(!msg.hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message); - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok( !ret, "message %04x available\n", msg.message); - - ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus()); - - keybd_event(VK_SPACE, 0, 0, 0); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message); - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok( !ret, "message %04x available\n", msg.message); - - SetFocus(0); - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - flush_events( TRUE ); - - PostMessageA(hwnd, WM_KEYDOWN, 0, 0); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message); - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok( !ret, "message %04x available\n", msg.message); - - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - PostThreadMessageA(GetCurrentThreadId(), WM_KEYDOWN, 0, 0); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(!msg.hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message); - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok( !ret, "message %04x available\n", msg.message); - - ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus()); - - keybd_event(VK_SPACE, 0, 0, 0); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == hwnd && msg.message == WM_SYSKEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message); - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok( !ret, "message %04x available\n", msg.message); -} - -static void test_mouse_input(HWND hwnd) -{ - RECT rc; - POINT pt; - int x, y; - HWND popup; - MSG msg; - BOOL ret; - LRESULT res; - - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - - GetWindowRect(hwnd, &rc); - trace("main window %p: (%d,%d)-(%d,%d)\n", hwnd, rc.left, rc.top, rc.right, rc.bottom); - - popup = CreateWindowExA(0, "MainWindowClass", NULL, WS_POPUP, - rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, - hwnd, 0, 0, NULL); - assert(popup != 0); - ShowWindow(popup, SW_SHOW); - UpdateWindow(popup); - - GetWindowRect(popup, &rc); - trace("popup window %p: (%d,%d)-(%d,%d)\n", popup, rc.left, rc.top, rc.right, rc.bottom); - - x = rc.left + (rc.right - rc.left) / 2; - y = rc.top + (rc.bottom - rc.top) / 2; - trace("setting cursor to (%d,%d)\n", x, y); - - SetCursorPos(x, y); - GetCursorPos(&pt); - ok(x == pt.x && y == pt.y, "wrong cursor pos (%d,%d), expected (%d,%d)\n", pt.x, pt.y, x, y); - - flush_events( TRUE ); - - /* Check that setting the same position will generate WM_MOUSEMOVE */ - SetCursorPos(x, y); - msg.message = 0; - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n", msg.hwnd, msg.message); - ok(msg.pt.x == x && msg.pt.y == y, "wrong message coords (%d,%d)/(%d,%d)\n", x, y, msg.pt.x, msg.pt.y); - - /* force the system to update its internal queue mouse position, - * otherwise it won't generate relative mouse movements below. - */ - mouse_event(MOUSEEVENTF_MOVE, -1, -1, 0, 0); - flush_events( TRUE ); - - msg.message = 0; - mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n", msg.hwnd, msg.message); - /* FIXME: SetCursorPos in Wine generates additional WM_MOUSEMOVE message */ - if (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) - ok(msg.hwnd == popup && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n", msg.hwnd, msg.message); - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok( !ret, "message %04x available\n", msg.message); - - mouse_event(MOUSEEVENTF_MOVE, -1, -1, 0, 0); - ShowWindow(popup, SW_HIDE); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == hwnd && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n", msg.hwnd, msg.message); - flush_events( TRUE ); - - mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0); - ShowWindow(hwnd, SW_HIDE); - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok( !ret, "message %04x available\n", msg.message); - flush_events( TRUE ); - - /* test mouse clicks */ - - ShowWindow(hwnd, SW_SHOW); - flush_events( TRUE ); - ShowWindow(popup, SW_SHOW); - flush_events( TRUE ); - - mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - - ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - - ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - - ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONDBLCLK, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONDBLCLK, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - - ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - - ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); - ok(!ret, "message %04x available\n", msg.message); - - ShowWindow(popup, SW_HIDE); - flush_events( TRUE ); - - mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); - mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); - - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == hwnd && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n", - msg.hwnd, hwnd, msg.message); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == hwnd && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n", - msg.hwnd, hwnd, msg.message); - - test_lbuttondown_flag = TRUE; - SendMessageA(hwnd, WM_COMMAND, (WPARAM)popup, 0); - test_lbuttondown_flag = FALSE; - - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n", - msg.hwnd, popup, msg.message); - ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n"); - - /* Test WM_MOUSEACTIVATE */ -#define TEST_MOUSEACTIVATE(A,B) \ - res = SendMessageA(hwnd, WM_MOUSEACTIVATE, (WPARAM)hwnd, (LPARAM)MAKELRESULT(A,0)); \ - ok(res == B, "WM_MOUSEACTIVATE for %s returned %ld\n", #A, res); - - TEST_MOUSEACTIVATE(HTERROR,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTTRANSPARENT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTNOWHERE,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTCLIENT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTCAPTION,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTSYSMENU,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTSIZE,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTMENU,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTHSCROLL,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTVSCROLL,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTMINBUTTON,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTMAXBUTTON,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTLEFT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTRIGHT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTTOP,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTTOPLEFT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTTOPRIGHT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTBOTTOM,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTBOTTOMLEFT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTBOTTOMRIGHT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTBORDER,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTOBJECT,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTCLOSE,MA_ACTIVATE); - TEST_MOUSEACTIVATE(HTHELP,MA_ACTIVATE); - - /* Clear any messages left behind by WM_MOUSEACTIVATE tests */ - flush_events( TRUE ); - - DestroyWindow(popup); -} - -static void test_validatergn(HWND hwnd) -{ - HWND child; - RECT rc, rc2; - HRGN rgn; - int ret; - child = CreateWindowExA(0, "static", NULL, WS_CHILD| WS_VISIBLE, 10, 10, 10, 10, hwnd, 0, 0, NULL); - ShowWindow(hwnd, SW_SHOW); - UpdateWindow( hwnd); - /* test that ValidateRect validates children*/ - InvalidateRect( child, NULL, 1); - GetWindowRect( child, &rc); - MapWindowPoints( NULL, hwnd, (POINT*) &rc, 2); - ret = GetUpdateRect( child, &rc2, 0); - ok( rc2.right > rc2.left && rc2.bottom > rc2.top, - "Update rectangle is empty!\n"); - ValidateRect( hwnd, &rc); - ret = GetUpdateRect( child, &rc2, 0); - ok( rc2.left == 0 && rc2.top == 0 && rc2.right == 0 && rc2.bottom == 0, - "Update rectangle %d,%d-%d,%d is not empty!\n", rc2.left, rc2.top, - rc2.right, rc2.bottom); - - /* now test ValidateRgn */ - InvalidateRect( child, NULL, 1); - GetWindowRect( child, &rc); - MapWindowPoints( NULL, hwnd, (POINT*) &rc, 2); - rgn = CreateRectRgnIndirect( &rc); - ValidateRgn( hwnd, rgn); - ret = GetUpdateRect( child, &rc2, 0); - ok( rc2.left == 0 && rc2.top == 0 && rc2.right == 0 && rc2.bottom == 0, - "Update rectangle %d,%d-%d,%d is not empty!\n", rc2.left, rc2.top, - rc2.right, rc2.bottom); - - DeleteObject( rgn); - DestroyWindow( child ); -} - -static void nccalchelper(HWND hwnd, INT x, INT y, RECT *prc) -{ - MoveWindow( hwnd, 0, 0, x, y, 0); - GetWindowRect( hwnd, prc); - trace("window rect is %d,%d - %d,%d\n", - prc->left,prc->top,prc->right,prc->bottom); - DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)prc); - trace("nccalc rect is %d,%d - %d,%d\n", - prc->left,prc->top,prc->right,prc->bottom); -} - -static void test_nccalcscroll(HWND parent) -{ - RECT rc1; - INT sbheight = GetSystemMetrics( SM_CYHSCROLL); - INT sbwidth = GetSystemMetrics( SM_CXVSCROLL); - HWND hwnd = CreateWindowExA(0, "static", NULL, - WS_CHILD| WS_VISIBLE | WS_VSCROLL | WS_HSCROLL , - 10, 10, 200, 200, parent, 0, 0, NULL); - ShowWindow( parent, SW_SHOW); - UpdateWindow( parent); - - /* test window too low for a horizontal scroll bar */ - nccalchelper( hwnd, 100, sbheight, &rc1); - ok( rc1.bottom - rc1.top == sbheight, "Height should be %d size is %d,%d - %d,%d\n", - sbheight, rc1.left, rc1.top, rc1.right, rc1.bottom); - - /* test window just high enough for a horizontal scroll bar */ - nccalchelper( hwnd, 100, sbheight + 1, &rc1); - ok( rc1.bottom - rc1.top == 1, "Height should be %d size is %d,%d - %d,%d\n", - 1, rc1.left, rc1.top, rc1.right, rc1.bottom); - - /* test window too narrow for a vertical scroll bar */ - nccalchelper( hwnd, sbwidth - 1, 100, &rc1); - ok( rc1.right - rc1.left == sbwidth - 1 , "Width should be %d size is %d,%d - %d,%d\n", - sbwidth - 1, rc1.left, rc1.top, rc1.right, rc1.bottom); - - /* test window just wide enough for a vertical scroll bar */ - nccalchelper( hwnd, sbwidth, 100, &rc1); - ok( rc1.right - rc1.left == 0, "Width should be %d size is %d,%d - %d,%d\n", - 0, rc1.left, rc1.top, rc1.right, rc1.bottom); - - /* same test, but with client edge: not enough width */ - SetWindowLong( hwnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE | GetWindowLong( hwnd, GWL_EXSTYLE)); - nccalchelper( hwnd, sbwidth, 100, &rc1); - ok( rc1.right - rc1.left == sbwidth - 2 * GetSystemMetrics(SM_CXEDGE), - "Width should be %d size is %d,%d - %d,%d\n", - sbwidth - 2 * GetSystemMetrics(SM_CXEDGE), rc1.left, rc1.top, rc1.right, rc1.bottom); - - DestroyWindow( hwnd); -} - -static void test_SetParent(void) -{ - BOOL ret; - HWND desktop = GetDesktopWindow(); - HMENU hMenu; - BOOL is_win9x = GetWindowLongPtrW(desktop, GWLP_WNDPROC) == 0; - HWND parent, child1, child2, child3, child4, sibling; - - parent = CreateWindowExA(0, "static", NULL, WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, 0, 0, NULL); - assert(parent != 0); - child1 = CreateWindowExA(0, "static", NULL, WS_CHILD, - 0, 0, 50, 50, parent, 0, 0, NULL); - assert(child1 != 0); - child2 = CreateWindowExA(0, "static", NULL, WS_POPUP, - 0, 0, 50, 50, child1, 0, 0, NULL); - assert(child2 != 0); - child3 = CreateWindowExA(0, "static", NULL, WS_CHILD, - 0, 0, 50, 50, child2, 0, 0, NULL); - assert(child3 != 0); - child4 = CreateWindowExA(0, "static", NULL, WS_POPUP, - 0, 0, 50, 50, child3, 0, 0, NULL); - assert(child4 != 0); - - trace("parent %p, child1 %p, child2 %p, child3 %p, child4 %p\n", - parent, child1, child2, child3, child4); - - check_parents(parent, desktop, 0, 0, 0, parent, parent); - check_parents(child1, parent, parent, parent, 0, parent, parent); - check_parents(child2, desktop, parent, parent, parent, child2, parent); - check_parents(child3, child2, child2, child2, 0, child2, parent); - check_parents(child4, desktop, child2, child2, child2, child4, parent); - - ok(!IsChild(desktop, parent), "wrong parent/child %p/%p\n", desktop, parent); - ok(!IsChild(desktop, child1), "wrong parent/child %p/%p\n", desktop, child1); - ok(!IsChild(desktop, child2), "wrong parent/child %p/%p\n", desktop, child2); - ok(!IsChild(desktop, child3), "wrong parent/child %p/%p\n", desktop, child3); - ok(!IsChild(desktop, child4), "wrong parent/child %p/%p\n", desktop, child4); - - ok(IsChild(parent, child1), "wrong parent/child %p/%p\n", parent, child1); - ok(!IsChild(desktop, child2), "wrong parent/child %p/%p\n", desktop, child2); - ok(!IsChild(parent, child2), "wrong parent/child %p/%p\n", parent, child2); - ok(!IsChild(child1, child2), "wrong parent/child %p/%p\n", child1, child2); - ok(!IsChild(parent, child3), "wrong parent/child %p/%p\n", parent, child3); - ok(IsChild(child2, child3), "wrong parent/child %p/%p\n", child2, child3); - ok(!IsChild(parent, child4), "wrong parent/child %p/%p\n", parent, child4); - ok(!IsChild(child3, child4), "wrong parent/child %p/%p\n", child3, child4); - ok(!IsChild(desktop, child4), "wrong parent/child %p/%p\n", desktop, child4); - - if (!is_win9x) /* Win9x doesn't survive this test */ - { - ok(!SetParent(parent, child1), "SetParent should fail\n"); - ok(!SetParent(child2, child3), "SetParent should fail\n"); - ok(SetParent(child1, parent) != 0, "SetParent should not fail\n"); - ok(SetParent(parent, child2) != 0, "SetParent should not fail\n"); - ok(SetParent(parent, child3) != 0, "SetParent should not fail\n"); - ok(!SetParent(child2, parent), "SetParent should fail\n"); - ok(SetParent(parent, child4) != 0, "SetParent should not fail\n"); - - check_parents(parent, child4, child4, 0, 0, child4, parent); - check_parents(child1, parent, parent, parent, 0, child4, parent); - check_parents(child2, desktop, parent, parent, parent, child2, parent); - check_parents(child3, child2, child2, child2, 0, child2, parent); - check_parents(child4, desktop, child2, child2, child2, child4, parent); - } - - hMenu = CreateMenu(); - sibling = CreateWindowExA(0, "static", NULL, WS_OVERLAPPEDWINDOW, - 100, 100, 200, 200, 0, hMenu, 0, NULL); - assert(sibling != 0); - - ok(SetParent(sibling, parent) != 0, "SetParent should not fail\n"); - ok(GetMenu(sibling) == hMenu, "SetParent should not remove menu\n"); - - ret = DestroyWindow(parent); - ok( ret, "DestroyWindow() error %d\n", GetLastError()); - - ok(!IsWindow(parent), "parent still exists\n"); - ok(!IsWindow(sibling), "sibling still exists\n"); - ok(!IsWindow(child1), "child1 still exists\n"); - ok(!IsWindow(child2), "child2 still exists\n"); - ok(!IsWindow(child3), "child3 still exists\n"); - ok(!IsWindow(child4), "child4 still exists\n"); -} - -static LRESULT WINAPI StyleCheckProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - LPCREATESTRUCT lpcs; - LPSTYLESTRUCT lpss; - - switch (msg) - { - case WM_NCCREATE: - case WM_CREATE: - lpcs = (LPCREATESTRUCT)lparam; - lpss = (LPSTYLESTRUCT)lpcs->lpCreateParams; - if (lpss) - { - if ((lpcs->dwExStyle & WS_EX_DLGMODALFRAME) || - ((!(lpcs->dwExStyle & WS_EX_STATICEDGE)) && - (lpcs->style & (WS_DLGFRAME | WS_THICKFRAME)))) - ok(lpcs->dwExStyle & WS_EX_WINDOWEDGE, "Window should have WS_EX_WINDOWEDGE style\n"); - else - ok(!(lpcs->dwExStyle & WS_EX_WINDOWEDGE), "Window shouldn't have WS_EX_WINDOWEDGE style\n"); - - ok((lpss->styleOld & ~WS_EX_WINDOWEDGE) == (lpcs->dwExStyle & ~WS_EX_WINDOWEDGE), - "Ex style (0x%08lx) should match what the caller passed to CreateWindowEx (0x%08lx)\n", - (lpss->styleOld & ~WS_EX_WINDOWEDGE), (lpcs->dwExStyle & ~WS_EX_WINDOWEDGE)); - - ok(lpss->styleNew == lpcs->style, - "Style (0x%08x) should match what the caller passed to CreateWindowEx (0x%08x)\n", - lpss->styleNew, lpcs->style); - } - break; - } - return DefWindowProc(hwnd, msg, wparam, lparam); -} - -static ATOM atomStyleCheckClass; - -static void register_style_check_class(void) -{ - WNDCLASS wc = - { - 0, - StyleCheckProc, - 0, - 0, - GetModuleHandle(NULL), - NULL, - LoadCursor(NULL, IDC_ARROW), - (HBRUSH)(COLOR_BTNFACE+1), - NULL, - TEXT("WineStyleCheck"), - }; - - atomStyleCheckClass = RegisterClass(&wc); -} - -static void check_window_style(DWORD dwStyleIn, DWORD dwExStyleIn, DWORD dwStyleOut, DWORD dwExStyleOut) -{ - DWORD dwActualStyle; - DWORD dwActualExStyle; - STYLESTRUCT ss; - HWND hwnd; - HWND hwndParent = NULL; - - ss.styleNew = dwStyleIn; - ss.styleOld = dwExStyleIn; - - if (dwStyleIn & WS_CHILD) - { - hwndParent = CreateWindowEx(0, MAKEINTATOM(atomStyleCheckClass), NULL, - WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, NULL, NULL, NULL, NULL); - } - - hwnd = CreateWindowEx(dwExStyleIn, MAKEINTATOM(atomStyleCheckClass), NULL, - dwStyleIn, 0, 0, 0, 0, hwndParent, NULL, NULL, &ss); - assert(hwnd); - - flush_events( TRUE ); - - dwActualStyle = GetWindowLong(hwnd, GWL_STYLE); - dwActualExStyle = GetWindowLong(hwnd, GWL_EXSTYLE); - ok((dwActualStyle == dwStyleOut) && (dwActualExStyle == dwExStyleOut), - "Style (0x%08x) should really be 0x%08x and/or Ex style (0x%08x) should really be 0x%08x\n", - dwActualStyle, dwStyleOut, dwActualExStyle, dwExStyleOut); - - DestroyWindow(hwnd); - if (hwndParent) DestroyWindow(hwndParent); -} - -/* tests what window styles the window manager automatically adds */ -static void test_window_styles(void) -{ - register_style_check_class(); - - check_window_style(0, 0, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE); - check_window_style(WS_OVERLAPPEDWINDOW, 0, WS_CLIPSIBLINGS|WS_OVERLAPPEDWINDOW, WS_EX_WINDOWEDGE); - check_window_style(WS_CHILD, 0, WS_CHILD, 0); - check_window_style(WS_CHILD, WS_EX_WINDOWEDGE, WS_CHILD, 0); - check_window_style(0, WS_EX_TOOLWINDOW, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_WINDOWEDGE|WS_EX_TOOLWINDOW); - check_window_style(WS_POPUP, 0, WS_POPUP|WS_CLIPSIBLINGS, 0); - check_window_style(WS_POPUP, WS_EX_WINDOWEDGE, WS_POPUP|WS_CLIPSIBLINGS, 0); - check_window_style(WS_CHILD, WS_EX_DLGMODALFRAME, WS_CHILD, WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME); - check_window_style(WS_CHILD, WS_EX_DLGMODALFRAME|WS_EX_STATICEDGE, WS_CHILD, WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME); - check_window_style(WS_CAPTION, WS_EX_STATICEDGE, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_STATICEDGE|WS_EX_WINDOWEDGE); - check_window_style(0, WS_EX_APPWINDOW, WS_CLIPSIBLINGS|WS_CAPTION, WS_EX_APPWINDOW|WS_EX_WINDOWEDGE); -} - -static void test_scrollvalidate( HWND parent) -{ - HDC hdc; - HRGN hrgn=CreateRectRgn(0,0,0,0); - HRGN exprgn, tmprgn, clipping; - RECT rc, rcu, cliprc; - /* create two overlapping child windows. The visual region - * of hwnd1 is clipped by the overlapping part of - * hwnd2 because of the WS_CLIPSIBLING style */ - HWND hwnd1, hwnd2; - - clipping = CreateRectRgn(0,0,0,0); - tmprgn = CreateRectRgn(0,0,0,0); - exprgn = CreateRectRgn(0,0,0,0); - hwnd2 = CreateWindowExA(0, "static", NULL, - WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER , - 75, 30, 100, 100, parent, 0, 0, NULL); - hwnd1 = CreateWindowExA(0, "static", NULL, - WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER , - 25, 50, 100, 100, parent, 0, 0, NULL); - ShowWindow( parent, SW_SHOW); - UpdateWindow( parent); - GetClientRect( hwnd1, &rc); - cliprc=rc; - SetRectRgn( clipping, 10, 10, 90, 90); - hdc = GetDC( hwnd1); - /* for a visual touch */ - TextOut( hdc, 0,10, "0123456789", 10); - ScrollDC( hdc, -10, -5, &rc, &cliprc, hrgn, &rcu); - if (winetest_debug > 0) dump_region(hrgn); - /* create a region with what is expected */ - SetRectRgn( exprgn, 39,0,49,74); - SetRectRgn( tmprgn, 88,79,98,93); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - SetRectRgn( tmprgn, 0,93,98,98); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - ok( EqualRgn( exprgn, hrgn), "wrong update region\n"); - trace("update rect is %d,%d - %d,%d\n", - rcu.left,rcu.top,rcu.right,rcu.bottom); - /* now with clipping region */ - SelectClipRgn( hdc, clipping); - ScrollDC( hdc, -10, -5, &rc, &cliprc, hrgn, &rcu); - if (winetest_debug > 0) dump_region(hrgn); - /* create a region with what is expected */ - SetRectRgn( exprgn, 39,10,49,74); - SetRectRgn( tmprgn, 80,79,90,85); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - SetRectRgn( tmprgn, 10,85,90,90); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - ok( EqualRgn( exprgn, hrgn), "wrong update region\n"); - trace("update rect is %d,%d - %d,%d\n", - rcu.left,rcu.top,rcu.right,rcu.bottom); - ReleaseDC( hwnd1, hdc); - - /* test scrolling a window with an update region */ - DestroyWindow( hwnd2); - ValidateRect( hwnd1, NULL); - SetRect( &rc, 40,40, 50,50); - InvalidateRect( hwnd1, &rc, 1); - GetClientRect( hwnd1, &rc); - cliprc=rc; - ScrollWindowEx( hwnd1, -10, 0, &rc, &cliprc, hrgn, &rcu, - SW_SCROLLCHILDREN | SW_INVALIDATE); - if (winetest_debug > 0) dump_region(hrgn); - SetRectRgn( exprgn, 88,0,98,98); - SetRectRgn( tmprgn, 30, 40, 50, 50); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - ok( EqualRgn( exprgn, hrgn), "wrong update region\n"); - - /* clear an update region */ - UpdateWindow( hwnd1 ); - - SetRect( &rc, 0,40, 100,60); - SetRect( &cliprc, 0,0, 100,100); - ScrollWindowEx( hwnd1, 0, -25, &rc, &cliprc, hrgn, &rcu, SW_INVALIDATE); - if (winetest_debug > 0) dump_region( hrgn ); - SetRectRgn( exprgn, 0, 40, 98, 60 ); - ok( EqualRgn( exprgn, hrgn), "wrong update region in excessive scroll\n"); - - /* now test ScrollWindowEx with a combination of - * WS_CLIPCHILDREN style and SW_SCROLLCHILDREN flag */ - /* make hwnd2 the child of hwnd1 */ - hwnd2 = CreateWindowExA(0, "static", NULL, - WS_CHILD| WS_VISIBLE | WS_BORDER , - 50, 50, 100, 100, hwnd1, 0, 0, NULL); - SetWindowLong( hwnd1, GWL_STYLE, GetWindowLong( hwnd1, GWL_STYLE) & ~WS_CLIPSIBLINGS); - GetClientRect( hwnd1, &rc); - cliprc=rc; - - /* WS_CLIPCHILDREN and SW_SCROLLCHILDREN */ - SetWindowLong( hwnd1, GWL_STYLE, GetWindowLong( hwnd1, GWL_STYLE) | WS_CLIPCHILDREN ); - ValidateRect( hwnd1, NULL); - ValidateRect( hwnd2, NULL); - ScrollWindowEx( hwnd1, -10, -10, &rc, &cliprc, hrgn, &rcu, - SW_SCROLLCHILDREN | SW_INVALIDATE); - if (winetest_debug > 0) dump_region(hrgn); - SetRectRgn( exprgn, 88,0,98,88); - SetRectRgn( tmprgn, 0,88,98,98); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - ok( EqualRgn( exprgn, hrgn), "wrong update region\n"); - - /* SW_SCROLLCHILDREN */ - SetWindowLong( hwnd1, GWL_STYLE, GetWindowLong( hwnd1, GWL_STYLE) & ~WS_CLIPCHILDREN ); - ValidateRect( hwnd1, NULL); - ValidateRect( hwnd2, NULL); - ScrollWindowEx( hwnd1, -10, -10, &rc, &cliprc, hrgn, &rcu, SW_SCROLLCHILDREN | SW_INVALIDATE); - if (winetest_debug > 0) dump_region(hrgn); - /* expected region is the same as in previous test */ - ok( EqualRgn( exprgn, hrgn), "wrong update region\n"); - - /* no SW_SCROLLCHILDREN */ - SetWindowLong( hwnd1, GWL_STYLE, GetWindowLong( hwnd1, GWL_STYLE) & ~WS_CLIPCHILDREN ); - ValidateRect( hwnd1, NULL); - ValidateRect( hwnd2, NULL); - ScrollWindowEx( hwnd1, -10, -10, &rc, &cliprc, hrgn, &rcu, SW_INVALIDATE); - if (winetest_debug > 0) dump_region(hrgn); - /* expected region is the same as in previous test */ - ok( EqualRgn( exprgn, hrgn), "wrong update region\n"); - - /* WS_CLIPCHILDREN and no SW_SCROLLCHILDREN */ - SetWindowLong( hwnd1, GWL_STYLE, GetWindowLong( hwnd1, GWL_STYLE) | WS_CLIPCHILDREN ); - ValidateRect( hwnd1, NULL); - ValidateRect( hwnd2, NULL); - ScrollWindowEx( hwnd1, -10, -10, &rc, &cliprc, hrgn, &rcu, SW_INVALIDATE); - if (winetest_debug > 0) dump_region(hrgn); - SetRectRgn( exprgn, 88,0,98,20); - SetRectRgn( tmprgn, 20,20,98,30); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - SetRectRgn( tmprgn, 20,30,30,88); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - SetRectRgn( tmprgn, 0,88,30,98); - CombineRgn( exprgn, exprgn, tmprgn, RGN_OR); - ok( EqualRgn( exprgn, hrgn), "wrong update region\n"); - - /* clean up */ - DeleteObject( hrgn); - DeleteObject( exprgn); - DeleteObject( tmprgn); - DestroyWindow( hwnd1); - DestroyWindow( hwnd2); -} - -/* couple of tests of return values of scrollbar functions - * called on a scrollbarless window */ -static void test_scroll(void) -{ - BOOL ret; - INT min, max; - SCROLLINFO si; - HWND hwnd = CreateWindowExA(0, "Static", "Wine test window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP, - 100, 100, 200, 200, 0, 0, 0, NULL); - /* horizontal */ - ret = GetScrollRange( hwnd, SB_HORZ, &min, &max); - ok( ret, "GetScrollRange returns FALSE\n"); - ok( min == 0, "minimum scroll pos is %d (should be zero)\n", min); - ok( max == 0, "maximum scroll pos is %d (should be zero)\n", min); - si.cbSize = sizeof( si); - si.fMask = SIF_PAGE; - si.nPage = 0xdeadbeef; - ret = GetScrollInfo( hwnd, SB_HORZ, &si); - ok( !ret, "GetScrollInfo returns %d (should be zero)\n", ret); - ok( si.nPage == 0xdeadbeef, "unexpected value for nPage is %d\n", si.nPage); - /* vertical */ - ret = GetScrollRange( hwnd, SB_VERT, &min, &max); - ok( ret, "GetScrollRange returns FALSE\n"); - ok( min == 0, "minimum scroll pos is %d (should be zero)\n", min); - ok( max == 0, "maximum scroll pos is %d (should be zero)\n", min); - si.cbSize = sizeof( si); - si.fMask = SIF_PAGE; - si.nPage = 0xdeadbeef; - ret = GetScrollInfo( hwnd, SB_VERT, &si); - ok( !ret, "GetScrollInfo returns %d (should be zero)\n", ret); - ok( si.nPage == 0xdeadbeef, "unexpected value for nPage is %d\n", si.nPage); - /* clean up */ - DestroyWindow( hwnd); -} - -static void test_scrolldc( HWND parent) -{ - HDC hdc; - HRGN exprgn, tmprgn, hrgn; - RECT rc, rc2, rcu, cliprc; - HWND hwnd1; - COLORREF colr; - - hrgn = CreateRectRgn(0,0,0,0); - tmprgn = CreateRectRgn(0,0,0,0); - exprgn = CreateRectRgn(0,0,0,0); - - hwnd1 = CreateWindowExA(0, "static", NULL, - WS_CHILD| WS_VISIBLE, - 25, 50, 100, 100, parent, 0, 0, NULL); - ShowWindow( parent, SW_SHOW); - UpdateWindow( parent); - flush_events( TRUE ); - GetClientRect( hwnd1, &rc); - hdc = GetDC( hwnd1); - /* paint the upper half of the window black */ - rc2 = rc; - rc2.bottom = ( rc.top + rc.bottom) /2; - FillRect( hdc, &rc2, GetStockObject(BLACK_BRUSH)); - /* clip region is the lower half */ - cliprc=rc; - cliprc.top = (rc.top + rc.bottom) /2; - /* test whether scrolled pixels are properly clipped */ - colr = GetPixel( hdc, (rc.left+rc.right)/2, ( rc.top + rc.bottom) /2 - 1); - ok ( colr == 0, "pixel should be black, color is %08x\n", colr); - /* this scroll should not cause any visible changes */ - ScrollDC( hdc, 5, -20, &rc, &cliprc, hrgn, &rcu); - colr = GetPixel( hdc, (rc.left+rc.right)/2, ( rc.top + rc.bottom) /2 - 1); - ok ( colr == 0, "pixel should be black, color is %08x\n", colr); - /* test with NULL clip rect */ - ScrollDC( hdc, 20, -20, &rc, NULL, hrgn, &rcu); - /*FillRgn(hdc, hrgn, GetStockObject(WHITE_BRUSH));*/ - trace("update rect: %d,%d - %d,%d\n", - rcu.left, rcu.top, rcu.right, rcu.bottom); - if (winetest_debug > 0) dump_region(hrgn); - SetRect(&rc2, 0, 0, 100, 100); - ok(EqualRect(&rcu, &rc2), "rects do not match (%d,%d-%d,%d) / (%d,%d-%d,%d)\n", - rcu.left, rcu.top, rcu.right, rcu.bottom, rc2.left, rc2.top, rc2.right, rc2.bottom); - - SetRectRgn( exprgn, 0, 0, 20, 80); - SetRectRgn( tmprgn, 0, 80, 100, 100); - CombineRgn(exprgn, exprgn, tmprgn, RGN_OR); - if (winetest_debug > 0) dump_region(exprgn); - ok(EqualRgn(exprgn, hrgn), "wrong update region\n"); - /* test clip rect > scroll rect */ - FillRect( hdc, &rc, GetStockObject(WHITE_BRUSH)); - rc2=rc; - InflateRect( &rc2, -(rc.right-rc.left)/4, -(rc.bottom-rc.top)/4); - FillRect( hdc, &rc2, GetStockObject(BLACK_BRUSH)); - ScrollDC( hdc, 10, 10, &rc2, &rc, hrgn, &rcu); - SetRectRgn( exprgn, 25, 25, 75, 35); - SetRectRgn( tmprgn, 25, 35, 35, 75); - CombineRgn(exprgn, exprgn, tmprgn, RGN_OR); - ok(EqualRgn(exprgn, hrgn), "wrong update region\n"); - colr = GetPixel( hdc, 80, 80); - ok ( colr == 0, "pixel should be black, color is %08x\n", colr); - trace("update rect: %d,%d - %d,%d\n", - rcu.left, rcu.top, rcu.right, rcu.bottom); - if (winetest_debug > 0) dump_region(hrgn); - - /* clean up */ - DeleteObject(hrgn); - DeleteObject(exprgn); - DeleteObject(tmprgn); - DestroyWindow(hwnd1); -} - -static void test_params(void) -{ - HWND hwnd; - INT rc; - - /* Just a param check */ - SetLastError(0xdeadbeef); - rc = GetWindowText(hwndMain2, NULL, 1024); - ok( rc==0, "GetWindowText: rc=%d err=%d\n",rc,GetLastError()); - - SetLastError(0xdeadbeef); - hwnd=CreateWindow("LISTBOX", "TestList", - (LBS_STANDARD & ~LBS_SORT), - 0, 0, 100, 100, - NULL, (HMENU)1, NULL, 0); - - ok(!hwnd, "CreateWindow with invalid menu handle should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE || /* NT */ - GetLastError() == 0xdeadbeef, /* Win9x */ - "wrong last error value %d\n", GetLastError()); -} - -static void test_AWRwindow(LPCSTR class, LONG style, LONG exStyle, BOOL menu) -{ - HWND hwnd = 0; - - hwnd = CreateWindowEx(exStyle, class, class, style, - 110, 100, - 225, 200, - 0, - menu ? hmenu : 0, - 0, 0); - if (!hwnd) { - trace("Failed to create window class=%s, style=0x%08x, exStyle=0x%08x\n", class, style, exStyle); - return; - } - ShowWindow(hwnd, SW_SHOW); - - test_nonclient_area(hwnd); - - SetMenu(hwnd, 0); - DestroyWindow(hwnd); -} - -static BOOL AWR_init(void) -{ - WNDCLASS class; - - class.style = CS_HREDRAW | CS_VREDRAW; - class.lpfnWndProc = DefWindowProcA; - class.cbClsExtra = 0; - class.cbWndExtra = 0; - class.hInstance = 0; - class.hIcon = LoadIcon (0, IDI_APPLICATION); - class.hCursor = LoadCursor (0, IDC_ARROW); - class.hbrBackground = 0; - class.lpszMenuName = 0; - class.lpszClassName = szAWRClass; - - if (!RegisterClass (&class)) { - ok(FALSE, "RegisterClass failed\n"); - return FALSE; - } - - hmenu = CreateMenu(); - if (!hmenu) - return FALSE; - ok(hmenu != 0, "Failed to create menu\n"); - ok(AppendMenu(hmenu, MF_STRING, 1, "Test!"), "Failed to create menu item\n"); - - return TRUE; -} - - -static void test_AWR_window_size(BOOL menu) -{ - LONG styles[] = { - WS_POPUP, - WS_MAXIMIZE, WS_BORDER, WS_DLGFRAME, - WS_SYSMENU, - WS_THICKFRAME, - WS_MINIMIZEBOX, WS_MAXIMIZEBOX, - WS_HSCROLL, WS_VSCROLL - }; - LONG exStyles[] = { - WS_EX_CLIENTEDGE, - WS_EX_TOOLWINDOW, WS_EX_WINDOWEDGE, - WS_EX_APPWINDOW, -#if 0 - /* These styles have problems on (at least) WinXP (SP2) and Wine */ - WS_EX_DLGMODALFRAME, - WS_EX_STATICEDGE, -#endif - }; - - int i; - - /* A exhaustive check of all the styles takes too long - * so just do a (hopefully representative) sample - */ - for (i = 0; i < COUNTOF(styles); ++i) - test_AWRwindow(szAWRClass, styles[i], 0, menu); - for (i = 0; i < COUNTOF(exStyles); ++i) { - test_AWRwindow(szAWRClass, WS_POPUP, exStyles[i], menu); - test_AWRwindow(szAWRClass, WS_THICKFRAME, exStyles[i], menu); - } -} -#undef COUNTOF - -#define SHOWSYSMETRIC(SM) trace(#SM "=%d\n", GetSystemMetrics(SM)) - -static void test_AdjustWindowRect(void) -{ - if (!AWR_init()) - return; - - SHOWSYSMETRIC(SM_CYCAPTION); - SHOWSYSMETRIC(SM_CYSMCAPTION); - SHOWSYSMETRIC(SM_CYMENU); - SHOWSYSMETRIC(SM_CXEDGE); - SHOWSYSMETRIC(SM_CYEDGE); - SHOWSYSMETRIC(SM_CXVSCROLL); - SHOWSYSMETRIC(SM_CYHSCROLL); - SHOWSYSMETRIC(SM_CXFRAME); - SHOWSYSMETRIC(SM_CYFRAME); - SHOWSYSMETRIC(SM_CXDLGFRAME); - SHOWSYSMETRIC(SM_CYDLGFRAME); - SHOWSYSMETRIC(SM_CXBORDER); - SHOWSYSMETRIC(SM_CYBORDER); - - test_AWR_window_size(FALSE); - test_AWR_window_size(TRUE); - - DestroyMenu(hmenu); -} -#undef SHOWSYSMETRIC - - -/* Global variables to trigger exit from loop */ -static int redrawComplete, WMPAINT_count; - -static LRESULT WINAPI redraw_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - switch (msg) - { - case WM_PAINT: - trace("doing WM_PAINT %d\n", WMPAINT_count); - WMPAINT_count++; - if (WMPAINT_count > 10 && redrawComplete == 0) { - PAINTSTRUCT ps; - BeginPaint(hwnd, &ps); - EndPaint(hwnd, &ps); - return 1; - } - return 0; - } - return DefWindowProc(hwnd, msg, wparam, lparam); -} - -/* Ensure we exit from RedrawNow regardless of invalidated area */ -static void test_redrawnow(void) -{ - WNDCLASSA cls; - HWND hwndMain; - - cls.style = CS_DBLCLKS; - cls.lpfnWndProc = redraw_window_procA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "RedrawWindowClass"; - - if(!RegisterClassA(&cls)) { - trace("Register failed %d\n", GetLastError()); - return; - } - - hwndMain = CreateWindowA("RedrawWindowClass", "Main Window", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, 0, 100, 100, NULL, NULL, 0, NULL); - - ok( WMPAINT_count == 0, "Multiple unexpected WM_PAINT calls %d\n", WMPAINT_count); - ShowWindow(hwndMain, SW_SHOW); - ok( WMPAINT_count == 0, "Multiple unexpected WM_PAINT calls %d\n", WMPAINT_count); - RedrawWindow(hwndMain, NULL,NULL,RDW_UPDATENOW | RDW_ALLCHILDREN); - ok( WMPAINT_count == 1, "Multiple unexpected WM_PAINT calls %d\n", WMPAINT_count); - redrawComplete = TRUE; - ok( WMPAINT_count < 10, "RedrawWindow (RDW_UPDATENOW) never completed (%d)\n", WMPAINT_count); - - /* clean up */ - DestroyWindow( hwndMain); -} - -struct parentdc_stat { - RECT client; - RECT clip; - RECT paint; -}; - -struct parentdc_test { - struct parentdc_stat main, main_todo; - struct parentdc_stat child1, child1_todo; - struct parentdc_stat child2, child2_todo; -}; - -static LRESULT WINAPI parentdc_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - RECT rc; - PAINTSTRUCT ps; - - struct parentdc_stat *t = (struct parentdc_stat *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); - - switch (msg) - { - case WM_PAINT: - trace("doing WM_PAINT on %p\n", hwnd); - GetClientRect(hwnd, &rc); - CopyRect(&t->client, &rc); - trace("client rect (%d, %d)-(%d, %d)\n", rc.left, rc.top, rc.right, rc.bottom); - GetWindowRect(hwnd, &rc); - trace("window rect (%d, %d)-(%d, %d)\n", rc.left, rc.top, rc.right, rc.bottom); - BeginPaint(hwnd, &ps); - CopyRect(&t->paint, &ps.rcPaint); - GetClipBox(ps.hdc, &rc); - CopyRect(&t->clip, &rc); - trace("clip rect (%d, %d)-(%d, %d)\n", rc.left, rc.top, rc.right, rc.bottom); - trace("paint rect (%d, %d)-(%d, %d)\n", ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom); - EndPaint(hwnd, &ps); - return 0; - } - return DefWindowProc(hwnd, msg, wparam, lparam); -} - -static void zero_parentdc_stat(struct parentdc_stat *t) -{ - SetRectEmpty(&t->client); - SetRectEmpty(&t->clip); - SetRectEmpty(&t->paint); -} - -static void zero_parentdc_test(struct parentdc_test *t) -{ - zero_parentdc_stat(&t->main); - zero_parentdc_stat(&t->child1); - zero_parentdc_stat(&t->child2); -} - -#define parentdc_field_ok(t, w, r, f, got) \ - ok (t.w.r.f==got.w.r.f, "window " #w ", rect " #r ", field " #f \ - ": expected %d, got %d\n", \ - t.w.r.f, got.w.r.f) - -#define parentdc_todo_field_ok(t, w, r, f, got) \ - if (t.w##_todo.r.f) todo_wine { parentdc_field_ok(t, w, r, f, got); } \ - else parentdc_field_ok(t, w, r, f, got) - -#define parentdc_rect_ok(t, w, r, got) \ - parentdc_todo_field_ok(t, w, r, left, got); \ - parentdc_todo_field_ok(t, w, r, top, got); \ - parentdc_todo_field_ok(t, w, r, right, got); \ - parentdc_todo_field_ok(t, w, r, bottom, got); - -#define parentdc_win_ok(t, w, got) \ - parentdc_rect_ok(t, w, client, got); \ - parentdc_rect_ok(t, w, clip, got); \ - parentdc_rect_ok(t, w, paint, got); - -#define parentdc_ok(t, got) \ - parentdc_win_ok(t, main, got); \ - parentdc_win_ok(t, child1, got); \ - parentdc_win_ok(t, child2, got); - -static void test_csparentdc(void) -{ - WNDCLASSA clsMain, cls; - HWND hwndMain, hwnd1, hwnd2; - RECT rc; - - struct parentdc_test test_answer; - -#define nothing_todo {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}} - const struct parentdc_test test1 = - { - {{0, 0, 150, 150}, {0, 0, 150, 150}, {0, 0, 150, 150}}, nothing_todo, - {{0, 0, 40, 40}, {-20, -20, 130, 130}, {0, 0, 40, 40}}, {{0, 0, 0, 0}, {1, 1, 1, 1}, {0, 0, 0, 0}}, - {{0, 0, 40, 40}, {-40, -40, 110, 110}, {0, 0, 40, 40}}, {{0, 0, 0, 0}, {1, 1, 1, 1}, {0, 0, 0, 0}}, - }; - - const struct parentdc_test test2 = - { - {{0, 0, 150, 150}, {0, 0, 50, 50}, {0, 0, 50, 50}}, nothing_todo, - {{0, 0, 40, 40}, {-20, -20, 30, 30}, {0, 0, 30, 30}}, {{0, 0, 0, 0}, {1, 1, 0, 0}, {0, 0, 0, 0}}, - {{0, 0, 40, 40}, {-40, -40, 10, 10}, {0, 0, 10, 10}}, {{0, 0, 0, 0}, {1, 1, 0, 0}, {0, 0, 0, 0}}, - }; - - const struct parentdc_test test3 = - { - {{0, 0, 150, 150}, {0, 0, 10, 10}, {0, 0, 10, 10}}, nothing_todo, - {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, nothing_todo, - {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, nothing_todo, - }; - - const struct parentdc_test test4 = - { - {{0, 0, 150, 150}, {40, 40, 50, 50}, {40, 40, 50, 50}}, nothing_todo, - {{0, 0, 40, 40}, {20, 20, 30, 30}, {20, 20, 30, 30}}, nothing_todo, - {{0, 0, 40, 40}, {0, 0, 10, 10}, {0, 0, 10, 10}}, nothing_todo, - }; - - const struct parentdc_test test5 = - { - {{0, 0, 150, 150}, {20, 20, 60, 60}, {20, 20, 60, 60}}, nothing_todo, - {{0, 0, 40, 40}, {-20, -20, 130, 130}, {0, 0, 40, 40}}, {{0, 0, 0, 0}, {1, 1, 1, 1}, {0, 0, 0, 0}}, - {{0, 0, 40, 40}, {-20, -20, 20, 20}, {0, 0, 20, 20}}, {{0, 0, 0, 0}, {1, 1, 0, 0}, {0, 0, 0, 0}}, - }; - - const struct parentdc_test test6 = - { - {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, nothing_todo, - {{0, 0, 40, 40}, {0, 0, 10, 10}, {0, 0, 10, 10}}, nothing_todo, - {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, nothing_todo, - }; - - const struct parentdc_test test7 = - { - {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, nothing_todo, - {{0, 0, 40, 40}, {-20, -20, 130, 130}, {0, 0, 40, 40}}, {{0, 0, 0, 0}, {1, 1, 1, 1}, {0, 0, 0, 0}}, - {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, nothing_todo, - }; -#undef nothing_todo - - clsMain.style = CS_DBLCLKS; - clsMain.lpfnWndProc = parentdc_window_procA; - clsMain.cbClsExtra = 0; - clsMain.cbWndExtra = 0; - clsMain.hInstance = GetModuleHandleA(0); - clsMain.hIcon = 0; - clsMain.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - clsMain.hbrBackground = GetStockObject(WHITE_BRUSH); - clsMain.lpszMenuName = NULL; - clsMain.lpszClassName = "ParentDcMainWindowClass"; - - if(!RegisterClassA(&clsMain)) { - trace("Register failed %d\n", GetLastError()); - return; - } - - cls.style = CS_DBLCLKS | CS_PARENTDC; - cls.lpfnWndProc = parentdc_window_procA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "ParentDcWindowClass"; - - if(!RegisterClassA(&cls)) { - trace("Register failed %d\n", GetLastError()); - return; - } - - SetRect(&rc, 0, 0, 150, 150); - AdjustWindowRectEx(&rc, WS_OVERLAPPEDWINDOW, FALSE, 0); - hwndMain = CreateWindowA("ParentDcMainWindowClass", "Main Window", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, 0, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, 0, NULL); - SetWindowLongPtrA(hwndMain, GWLP_USERDATA, (DWORD_PTR)&test_answer.main); - hwnd1 = CreateWindowA("ParentDcWindowClass", "Child Window 1", WS_CHILD, - 20, 20, 40, 40, hwndMain, NULL, 0, NULL); - SetWindowLongPtrA(hwnd1, GWLP_USERDATA, (DWORD_PTR)&test_answer.child1); - hwnd2 = CreateWindowA("ParentDcWindowClass", "Child Window 2", WS_CHILD, - 40, 40, 40, 40, hwndMain, NULL, 0, NULL); - SetWindowLongPtrA(hwnd2, GWLP_USERDATA, (DWORD_PTR)&test_answer.child2); - ShowWindow(hwndMain, SW_SHOW); - ShowWindow(hwnd1, SW_SHOW); - ShowWindow(hwnd2, SW_SHOW); - flush_events( TRUE ); - - zero_parentdc_test(&test_answer); - InvalidateRect(hwndMain, NULL, TRUE); - flush_events( TRUE ); - parentdc_ok(test1, test_answer); - - zero_parentdc_test(&test_answer); - SetRect(&rc, 0, 0, 50, 50); - InvalidateRect(hwndMain, &rc, TRUE); - flush_events( TRUE ); - parentdc_ok(test2, test_answer); - - zero_parentdc_test(&test_answer); - SetRect(&rc, 0, 0, 10, 10); - InvalidateRect(hwndMain, &rc, TRUE); - flush_events( TRUE ); - parentdc_ok(test3, test_answer); - - zero_parentdc_test(&test_answer); - SetRect(&rc, 40, 40, 50, 50); - InvalidateRect(hwndMain, &rc, TRUE); - flush_events( TRUE ); - parentdc_ok(test4, test_answer); - - zero_parentdc_test(&test_answer); - SetRect(&rc, 20, 20, 60, 60); - InvalidateRect(hwndMain, &rc, TRUE); - flush_events( TRUE ); - parentdc_ok(test5, test_answer); - - zero_parentdc_test(&test_answer); - SetRect(&rc, 0, 0, 10, 10); - InvalidateRect(hwnd1, &rc, TRUE); - flush_events( TRUE ); - parentdc_ok(test6, test_answer); - - zero_parentdc_test(&test_answer); - SetRect(&rc, -5, -5, 65, 65); - InvalidateRect(hwnd1, &rc, TRUE); - flush_events( TRUE ); - parentdc_ok(test7, test_answer); - - DestroyWindow(hwndMain); - DestroyWindow(hwnd1); - DestroyWindow(hwnd2); -} - -static LRESULT WINAPI def_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - return DefWindowProcA(hwnd, msg, wparam, lparam); -} - -static LRESULT WINAPI def_window_procW(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -{ - return DefWindowProcW(hwnd, msg, wparam, lparam); -} - -static void test_IsWindowUnicode(void) -{ - static const char ansi_class_nameA[] = "ansi class name"; - static const WCHAR ansi_class_nameW[] = {'a','n','s','i',' ','c','l','a','s','s',' ','n','a','m','e',0}; - static const char unicode_class_nameA[] = "unicode class name"; - static const WCHAR unicode_class_nameW[] = {'u','n','i','c','o','d','e',' ','c','l','a','s','s',' ','n','a','m','e',0}; - WNDCLASSA classA; - WNDCLASSW classW; - HWND hwnd; - - memset(&classW, 0, sizeof(classW)); - classW.hInstance = GetModuleHandleA(0); - classW.lpfnWndProc = def_window_procW; - classW.lpszClassName = unicode_class_nameW; - if (!RegisterClassW(&classW)) return; /* this catches Win9x as well */ - - memset(&classA, 0, sizeof(classA)); - classA.hInstance = GetModuleHandleA(0); - classA.lpfnWndProc = def_window_procA; - classA.lpszClassName = ansi_class_nameA; - assert(RegisterClassA(&classA)); - - /* unicode class: window proc */ - hwnd = CreateWindowExW(0, unicode_class_nameW, NULL, WS_POPUP, - 0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL); - assert(hwnd); - - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procA); - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procW); - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - - DestroyWindow(hwnd); - - hwnd = CreateWindowExA(0, unicode_class_nameA, NULL, WS_POPUP, - 0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL); - assert(hwnd); - - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procA); - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procW); - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - - DestroyWindow(hwnd); - - /* ansi class: window proc */ - hwnd = CreateWindowExW(0, ansi_class_nameW, NULL, WS_POPUP, - 0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL); - assert(hwnd); - - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procW); - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procA); - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - - DestroyWindow(hwnd); - - hwnd = CreateWindowExA(0, ansi_class_nameA, NULL, WS_POPUP, - 0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL); - assert(hwnd); - - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procW); - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procA); - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - - DestroyWindow(hwnd); - - /* unicode class: class proc */ - hwnd = CreateWindowExW(0, unicode_class_nameW, NULL, WS_POPUP, - 0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL); - assert(hwnd); - - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - SetClassLongPtrA(hwnd, GCLP_WNDPROC, (ULONG_PTR)def_window_procA); - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - /* do not restore class window proc back to unicode */ - - DestroyWindow(hwnd); - - hwnd = CreateWindowExA(0, unicode_class_nameA, NULL, WS_POPUP, - 0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL); - assert(hwnd); - - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - SetClassLongPtrW(hwnd, GCLP_WNDPROC, (ULONG_PTR)def_window_procW); - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - - DestroyWindow(hwnd); - - /* ansi class: class proc */ - hwnd = CreateWindowExW(0, ansi_class_nameW, NULL, WS_POPUP, - 0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL); - assert(hwnd); - - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - SetClassLongPtrW(hwnd, GCLP_WNDPROC, (ULONG_PTR)def_window_procW); - ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n"); - /* do not restore class window proc back to ansi */ - - DestroyWindow(hwnd); - - hwnd = CreateWindowExA(0, ansi_class_nameA, NULL, WS_POPUP, - 0, 0, 100, 100, GetDesktopWindow(), 0, 0, NULL); - assert(hwnd); - - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - SetClassLongPtrA(hwnd, GCLP_WNDPROC, (ULONG_PTR)def_window_procA); - ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n"); - - DestroyWindow(hwnd); -} - -static LRESULT CALLBACK minmax_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) -{ - MINMAXINFO *minmax; - - if (msg != WM_GETMINMAXINFO) - return DefWindowProc(hwnd, msg, wp, lp); - - minmax = (MINMAXINFO *)lp; - - if ((GetWindowLong(hwnd, GWL_STYLE) & WS_CHILD)) - { - minmax->ptReserved.x = 0; - minmax->ptReserved.y = 0; - minmax->ptMaxSize.x = 400; - minmax->ptMaxSize.y = 400; - minmax->ptMaxPosition.x = 300; - minmax->ptMaxPosition.y = 300; - minmax->ptMaxTrackSize.x = 200; - minmax->ptMaxTrackSize.y = 200; - minmax->ptMinTrackSize.x = 100; - minmax->ptMinTrackSize.y = 100; - } - else - DefWindowProc(hwnd, msg, wp, lp); - return 1; -} - -static int expected_cx, expected_cy; -static RECT expected_rect; - -static LRESULT CALLBACK winsizes_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) -{ - switch(msg) - { - case WM_GETMINMAXINFO: - { - RECT rect; - GetWindowRect( hwnd, &rect ); - ok( !rect.left && !rect.top && !rect.right && !rect.bottom, - "wrong rect %d,%d-%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); - return DefWindowProc(hwnd, msg, wp, lp); - } - case WM_NCCREATE: - case WM_CREATE: - { - CREATESTRUCTA *cs = (CREATESTRUCTA *)lp; - RECT rect; - GetWindowRect( hwnd, &rect ); - trace( "hwnd %p msg %x size %dx%d rect %d,%d-%d,%d\n", - hwnd, msg, cs->cx, cs->cy, rect.left, rect.top, rect.right, rect.bottom ); - ok( cs->cx == expected_cx, "wrong x size %d/%d\n", cs->cx, expected_cx ); - ok( cs->cy == expected_cy, "wrong y size %d/%d\n", cs->cy, expected_cy ); - ok( rect.right - rect.left == expected_rect.right - expected_rect.left && - rect.bottom - rect.top == expected_rect.bottom - expected_rect.top, - "wrong rect %d,%d-%d,%d / %d,%d-%d,%d\n", - rect.left, rect.top, rect.right, rect.bottom, - expected_rect.left, expected_rect.top, expected_rect.right, expected_rect.bottom ); - return DefWindowProc(hwnd, msg, wp, lp); - } - case WM_NCCALCSIZE: - { - RECT rect, *r = (RECT *)lp; - GetWindowRect( hwnd, &rect ); - ok( !memcmp( &rect, r, sizeof(rect) ), - "passed rect %d,%d-%d,%d doesn't match window rect %d,%d-%d,%d\n", - r->left, r->top, r->right, r->bottom, rect.left, rect.top, rect.right, rect.bottom ); - return DefWindowProc(hwnd, msg, wp, lp); - } - default: - return DefWindowProc(hwnd, msg, wp, lp); - } -} - -static void test_CreateWindow(void) -{ - WNDCLASS cls; - HWND hwnd, parent; - HMENU hmenu; - RECT rc, rc_minmax; - MINMAXINFO minmax; - -#define expect_menu(window, menu) \ - SetLastError(0xdeadbeef); \ - ok(GetMenu(window) == (HMENU)menu, "GetMenu error %d\n", GetLastError()) - -#define expect_style(window, style)\ - ok(GetWindowLong(window, GWL_STYLE) == (style), "expected style %x != %x\n", (LONG)(style), GetWindowLong(window, GWL_STYLE)) - -#define expect_ex_style(window, ex_style)\ - ok(GetWindowLong(window, GWL_EXSTYLE) == (ex_style), "expected ex_style %x != %x\n", (LONG)(ex_style), GetWindowLong(window, GWL_EXSTYLE)) - - hmenu = CreateMenu(); - assert(hmenu != 0); - parent = GetDesktopWindow(); - assert(parent != 0); - - SetLastError(0xdeadbeef); - ok(IsMenu(hmenu), "IsMenu error %d\n", GetLastError()); - - /* WS_CHILD */ - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_CHILD, - 0, 0, 100, 100, parent, (HMENU)1, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, 1); - expect_style(hwnd, WS_CHILD); - expect_ex_style(hwnd, WS_EX_APPWINDOW); - DestroyWindow(hwnd); - - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_CHILD | WS_CAPTION, - 0, 0, 100, 100, parent, (HMENU)1, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, 1); - expect_style(hwnd, WS_CHILD | WS_CAPTION); - expect_ex_style(hwnd, WS_EX_APPWINDOW | WS_EX_WINDOWEDGE); - DestroyWindow(hwnd); - - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "static", NULL, WS_CHILD, - 0, 0, 100, 100, parent, (HMENU)1, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, 1); - expect_style(hwnd, WS_CHILD); - expect_ex_style(hwnd, 0); - DestroyWindow(hwnd); - - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "static", NULL, WS_CHILD | WS_CAPTION, - 0, 0, 100, 100, parent, (HMENU)1, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, 1); - expect_style(hwnd, WS_CHILD | WS_CAPTION); - expect_ex_style(hwnd, WS_EX_WINDOWEDGE); - DestroyWindow(hwnd); - - /* WS_POPUP */ - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_POPUP, - 0, 0, 100, 100, parent, hmenu, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, hmenu); - expect_style(hwnd, WS_POPUP | WS_CLIPSIBLINGS); - expect_ex_style(hwnd, WS_EX_APPWINDOW); - DestroyWindow(hwnd); - SetLastError(0xdeadbeef); - ok(!IsMenu(hmenu), "IsMenu should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - hmenu = CreateMenu(); - assert(hmenu != 0); - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_POPUP | WS_CAPTION, - 0, 0, 100, 100, parent, hmenu, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, hmenu); - expect_style(hwnd, WS_POPUP | WS_CAPTION | WS_CLIPSIBLINGS); - expect_ex_style(hwnd, WS_EX_APPWINDOW | WS_EX_WINDOWEDGE); - DestroyWindow(hwnd); - SetLastError(0xdeadbeef); - ok(!IsMenu(hmenu), "IsMenu should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - hmenu = CreateMenu(); - assert(hmenu != 0); - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "static", NULL, WS_POPUP, - 0, 0, 100, 100, parent, hmenu, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, hmenu); - expect_style(hwnd, WS_POPUP | WS_CLIPSIBLINGS); - expect_ex_style(hwnd, 0); - DestroyWindow(hwnd); - SetLastError(0xdeadbeef); - ok(!IsMenu(hmenu), "IsMenu should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - hmenu = CreateMenu(); - assert(hmenu != 0); - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "static", NULL, WS_POPUP | WS_CAPTION, - 0, 0, 100, 100, parent, hmenu, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, hmenu); - expect_style(hwnd, WS_POPUP | WS_CAPTION | WS_CLIPSIBLINGS); - expect_ex_style(hwnd, WS_EX_WINDOWEDGE); - DestroyWindow(hwnd); - SetLastError(0xdeadbeef); - ok(!IsMenu(hmenu), "IsMenu should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - /* WS_CHILD | WS_POPUP */ - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_CHILD | WS_POPUP, - 0, 0, 100, 100, parent, (HMENU)1, 0, NULL); - ok(!hwnd, "CreateWindowEx should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - hmenu = CreateMenu(); - assert(hmenu != 0); - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_CHILD | WS_POPUP, - 0, 0, 100, 100, parent, hmenu, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, hmenu); - expect_style(hwnd, WS_CHILD | WS_POPUP | WS_CLIPSIBLINGS); - expect_ex_style(hwnd, WS_EX_APPWINDOW); - DestroyWindow(hwnd); - SetLastError(0xdeadbeef); - ok(!IsMenu(hmenu), "IsMenu should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_CHILD | WS_POPUP | WS_CAPTION, - 0, 0, 100, 100, parent, (HMENU)1, 0, NULL); - ok(!hwnd, "CreateWindowEx should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - hmenu = CreateMenu(); - assert(hmenu != 0); - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(WS_EX_APPWINDOW, "static", NULL, WS_CHILD | WS_POPUP | WS_CAPTION, - 0, 0, 100, 100, parent, hmenu, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, hmenu); - expect_style(hwnd, WS_CHILD | WS_POPUP | WS_CAPTION | WS_CLIPSIBLINGS); - expect_ex_style(hwnd, WS_EX_APPWINDOW | WS_EX_WINDOWEDGE); - DestroyWindow(hwnd); - SetLastError(0xdeadbeef); - ok(!IsMenu(hmenu), "IsMenu should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "static", NULL, WS_CHILD | WS_POPUP, - 0, 0, 100, 100, parent, (HMENU)1, 0, NULL); - ok(!hwnd, "CreateWindowEx should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - hmenu = CreateMenu(); - assert(hmenu != 0); - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "static", NULL, WS_CHILD | WS_POPUP, - 0, 0, 100, 100, parent, hmenu, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, hmenu); - expect_style(hwnd, WS_CHILD | WS_POPUP | WS_CLIPSIBLINGS); - expect_ex_style(hwnd, 0); - DestroyWindow(hwnd); - SetLastError(0xdeadbeef); - ok(!IsMenu(hmenu), "IsMenu should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "static", NULL, WS_CHILD | WS_POPUP | WS_CAPTION, - 0, 0, 100, 100, parent, (HMENU)1, 0, NULL); - ok(!hwnd, "CreateWindowEx should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - hmenu = CreateMenu(); - assert(hmenu != 0); - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "static", NULL, WS_CHILD | WS_POPUP | WS_CAPTION, - 0, 0, 100, 100, parent, hmenu, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, hmenu); - expect_style(hwnd, WS_CHILD | WS_POPUP | WS_CAPTION | WS_CLIPSIBLINGS); - expect_ex_style(hwnd, WS_EX_WINDOWEDGE); - DestroyWindow(hwnd); - SetLastError(0xdeadbeef); - ok(!IsMenu(hmenu), "IsMenu should fail\n"); - ok(GetLastError() == ERROR_INVALID_MENU_HANDLE, "IsMenu set error %d\n", GetLastError()); - - /* test child window sizing */ - cls.style = 0; - cls.lpfnWndProc = minmax_wnd_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandle(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "MinMax_WndClass"; - RegisterClass(&cls); - - SetLastError(0xdeadbeef); - parent = CreateWindowEx(0, "MinMax_WndClass", NULL, WS_CAPTION | WS_SYSMENU | WS_THICKFRAME, - 0, 0, 100, 100, 0, 0, 0, NULL); - ok(parent != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(parent, 0); - expect_style(parent, WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_CLIPSIBLINGS); - expect_ex_style(parent, WS_EX_WINDOWEDGE); - - memset(&minmax, 0, sizeof(minmax)); - SendMessage(parent, WM_GETMINMAXINFO, 0, (LPARAM)&minmax); - SetRect(&rc_minmax, 0, 0, minmax.ptMaxSize.x, minmax.ptMaxSize.y); - ok(IsRectEmpty(&rc_minmax), "ptMaxSize is not empty\n"); - SetRect(&rc_minmax, 0, 0, minmax.ptMaxTrackSize.x, minmax.ptMaxTrackSize.y); - ok(IsRectEmpty(&rc_minmax), "ptMaxTrackSize is not empty\n"); - - GetWindowRect(parent, &rc); - ok(!IsRectEmpty(&rc), "parent window rect is empty\n"); - GetClientRect(parent, &rc); - ok(!IsRectEmpty(&rc), "parent client rect is empty\n"); - - InflateRect(&rc, 200, 200); - trace("creating child with rect (%d,%d-%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); - - SetLastError(0xdeadbeef); - hwnd = CreateWindowEx(0, "MinMax_WndClass", NULL, WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME, - rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, - parent, (HMENU)1, 0, NULL); - ok(hwnd != 0, "CreateWindowEx error %d\n", GetLastError()); - expect_menu(hwnd, 1); - expect_style(hwnd, WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME); - expect_ex_style(hwnd, WS_EX_WINDOWEDGE); - - memset(&minmax, 0, sizeof(minmax)); - SendMessage(hwnd, WM_GETMINMAXINFO, 0, (LPARAM)&minmax); - SetRect(&rc_minmax, 0, 0, minmax.ptMaxTrackSize.x, minmax.ptMaxTrackSize.y); - - GetWindowRect(hwnd, &rc); - OffsetRect(&rc, -rc.left, -rc.top); - ok(EqualRect(&rc, &rc_minmax), "rects don't match: (%d,%d-%d,%d) and (%d,%d-%d,%d)\n", - rc.left, rc.top, rc.right, rc.bottom, - rc_minmax.left, rc_minmax.top, rc_minmax.right, rc_minmax.bottom); - DestroyWindow(hwnd); - - cls.lpfnWndProc = winsizes_wnd_proc; - cls.lpszClassName = "Sizes_WndClass"; - RegisterClass(&cls); - - expected_cx = expected_cy = 200000; - SetRect( &expected_rect, 0, 0, 200000, 200000 ); - hwnd = CreateWindowExA(0, "Sizes_WndClass", NULL, WS_CHILD, 300000, 300000, 200000, 200000, parent, 0, 0, NULL); - ok( hwnd != 0, "creation failed err %u\n", GetLastError()); - GetClientRect( hwnd, &rc ); - ok( rc.right == 200000, "invalid rect right %u\n", rc.right ); - ok( rc.bottom == 200000, "invalid rect bottom %u\n", rc.bottom ); - DestroyWindow(hwnd); - - expected_cx = expected_cy = -10; - SetRect( &expected_rect, 0, 0, 0, 0 ); - hwnd = CreateWindowExA(0, "Sizes_WndClass", NULL, WS_CHILD, -20, -20, -10, -10, parent, 0, 0, NULL); - ok( hwnd != 0, "creation failed err %u\n", GetLastError()); - GetClientRect( hwnd, &rc ); - ok( rc.right == 0, "invalid rect right %u\n", rc.right ); - ok( rc.bottom == 0, "invalid rect bottom %u\n", rc.bottom ); - DestroyWindow(hwnd); - - expected_cx = expected_cy = -200000; - SetRect( &expected_rect, 0, 0, 0, 0 ); - hwnd = CreateWindowExA(0, "Sizes_WndClass", NULL, WS_CHILD, -300000, -300000, -200000, -200000, parent, 0, 0, NULL); - ok( hwnd != 0, "creation failed err %u\n", GetLastError()); - GetClientRect( hwnd, &rc ); - ok( rc.right == 0, "invalid rect right %u\n", rc.right ); - ok( rc.bottom == 0, "invalid rect bottom %u\n", rc.bottom ); - DestroyWindow(hwnd); - - /* top level window */ - expected_cx = expected_cy = 200000; - SetRect( &expected_rect, 0, 0, GetSystemMetrics(SM_CXMAXTRACK), GetSystemMetrics(SM_CYMAXTRACK) ); - hwnd = CreateWindowExA(0, "Sizes_WndClass", NULL, WS_OVERLAPPEDWINDOW, 300000, 300000, 200000, 200000, 0, 0, 0, NULL); - ok( hwnd != 0, "creation failed err %u\n", GetLastError()); - GetClientRect( hwnd, &rc ); - ok( rc.right <= expected_cx, "invalid rect right %u\n", rc.right ); - ok( rc.bottom <= expected_cy, "invalid rect bottom %u\n", rc.bottom ); - DestroyWindow(hwnd); - - DestroyWindow(parent); - - UnregisterClass("MinMax_WndClass", GetModuleHandle(0)); - UnregisterClass("Sizes_WndClass", GetModuleHandle(0)); - -#undef expect_menu -#undef expect_style -#undef expect_ex_style -} - -/* function that remembers whether the system the test is running on sets the - * last error for user32 functions to make the tests stricter */ -static int check_error(DWORD actual, DWORD expected) -{ - static int sets_last_error = -1; - if (sets_last_error == -1) - sets_last_error = (actual != 0xdeadbeef); - return (!sets_last_error && (actual == 0xdeadbeef)) || (actual == expected); -} - -static void test_SetWindowLong(void) -{ - LONG_PTR retval; - WNDPROC old_window_procW; - - SetLastError(0xdeadbeef); - retval = SetWindowLongPtr(NULL, GWLP_WNDPROC, 0); - ok(!retval, "SetWindowLongPtr on invalid window handle should have returned 0 instead of 0x%lx\n", retval); - ok(check_error(GetLastError(), ERROR_INVALID_WINDOW_HANDLE), - "SetWindowLongPtr should have set error to ERROR_INVALID_WINDOW_HANDLE instad of %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - retval = SetWindowLongPtr(hwndMain, 0xdeadbeef, 0); - ok(!retval, "SetWindowLongPtr on invalid index should have returned 0 instead of 0x%lx\n", retval); - ok(check_error(GetLastError(), ERROR_INVALID_INDEX), - "SetWindowLongPtr should have set error to ERROR_INVALID_INDEX instad of %d\n", GetLastError()); - - SetLastError(0xdeadbeef); - retval = SetWindowLongPtr(hwndMain, GWLP_WNDPROC, 0); - ok((WNDPROC)retval == main_window_procA, - "SetWindowLongPtr on invalid window proc should have returned address of main_window_procA instead of 0x%lx\n", retval); - ok(GetLastError() == 0xdeadbeef, "SetWindowLongPtr shouldn't have set the last error, instead of setting it to %d\n", GetLastError()); - retval = GetWindowLongPtr(hwndMain, GWLP_WNDPROC); - ok((WNDPROC)retval == main_window_procA, - "SetWindowLongPtr on invalid window proc shouldn't have changed the value returned by GetWindowLongPtr, instead of changing it to 0x%lx\n", retval); - ok(!IsWindowUnicode(hwndMain), "hwndMain shouldn't be Unicode\n"); - - old_window_procW = (WNDPROC)GetWindowLongPtrW(hwndMain, GWLP_WNDPROC); - SetLastError(0xdeadbeef); - retval = SetWindowLongPtrW(hwndMain, GWLP_WNDPROC, 0); - if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - { - ok(GetLastError() == 0xdeadbeef, "SetWindowLongPtr shouldn't have set the last error, instead of setting it to %d\n", GetLastError()); - ok(retval != 0, "SetWindowLongPtr error %d\n", GetLastError()); - ok((WNDPROC)retval == old_window_procW, - "SetWindowLongPtr on invalid window proc shouldn't have changed the value returned by GetWindowLongPtr, instead of changing it to 0x%lx\n", retval); - ok(IsWindowUnicode(hwndMain), "hwndMain should now be Unicode\n"); - - /* set it back to ANSI */ - SetWindowLongPtr(hwndMain, GWLP_WNDPROC, 0); - } -} - -static void test_ShowWindow(void) -{ - HWND hwnd; - DWORD style; - RECT rcMain, rc; - LPARAM ret; - - SetRect(&rcMain, 120, 120, 210, 210); - - hwnd = CreateWindowEx(0, "MainWindowClass", NULL, - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_POPUP, - rcMain.left, rcMain.top, - rcMain.right - rcMain.left, rcMain.bottom - rcMain.top, - 0, 0, 0, NULL); - assert(hwnd); - - style = GetWindowLong(hwnd, GWL_STYLE); - ok(!(style & WS_DISABLED), "window should not be disabled\n"); - ok(!(style & WS_VISIBLE), "window should not be visible\n"); - ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(EqualRect(&rcMain, &rc), "rects should match\n"); - - ret = ShowWindow(hwnd, SW_SHOW); - ok(!ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(!(style & WS_DISABLED), "window should not be disabled\n"); - ok(style & WS_VISIBLE, "window should be visible\n"); - ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(EqualRect(&rcMain, &rc), "rects should match\n"); - - ret = ShowWindow(hwnd, SW_MINIMIZE); - ok(ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(!(style & WS_DISABLED), "window should not be disabled\n"); - ok(style & WS_VISIBLE, "window should be visible\n"); - ok(style & WS_MINIMIZE, "window should be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(!EqualRect(&rcMain, &rc), "rects shouldn't match\n"); - - ShowWindow(hwnd, SW_RESTORE); - ok(ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(!(style & WS_DISABLED), "window should not be disabled\n"); - ok(style & WS_VISIBLE, "window should be visible\n"); - ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(EqualRect(&rcMain, &rc), "rects should match\n"); - - ret = EnableWindow(hwnd, FALSE); - ok(!ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(style & WS_DISABLED, "window should be disabled\n"); - - ret = DefWindowProc(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); - ok(!ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(style & WS_DISABLED, "window should be disabled\n"); - ok(style & WS_VISIBLE, "window should be visible\n"); - ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(EqualRect(&rcMain, &rc), "rects should match\n"); - - ret = DefWindowProc(hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0); - ok(!ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(style & WS_DISABLED, "window should be disabled\n"); - ok(style & WS_VISIBLE, "window should be visible\n"); - ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(EqualRect(&rcMain, &rc), "rects should match\n"); - - ret = ShowWindow(hwnd, SW_MINIMIZE); - ok(ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(style & WS_DISABLED, "window should be disabled\n"); - ok(style & WS_VISIBLE, "window should be visible\n"); - ok(style & WS_MINIMIZE, "window should be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(!EqualRect(&rcMain, &rc), "rects shouldn't match\n"); - - ret = DefWindowProc(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0); - ok(!ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(style & WS_DISABLED, "window should be disabled\n"); - ok(style & WS_VISIBLE, "window should be visible\n"); - ok(style & WS_MINIMIZE, "window should be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(!EqualRect(&rcMain, &rc), "rects shouldn't match\n"); - - ret = ShowWindow(hwnd, SW_RESTORE); - ok(ret, "not expected ret: %lu\n", ret); - style = GetWindowLong(hwnd, GWL_STYLE); - ok(style & WS_DISABLED, "window should be disabled\n"); - ok(style & WS_VISIBLE, "window should be visible\n"); - ok(!(style & WS_MINIMIZE), "window should not be minimized\n"); - ok(!(style & WS_MAXIMIZE), "window should not be maximized\n"); - GetWindowRect(hwnd, &rc); - ok(EqualRect(&rcMain, &rc), "rects should match\n"); - - ret = DefWindowProc(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0); - ok(!ret, "not expected ret: %lu\n", ret); - ok(IsWindow(hwnd), "window should exist\n"); - - ret = EnableWindow(hwnd, TRUE); - ok(ret, "not expected ret: %lu\n", ret); - - ret = DefWindowProc(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0); - ok(!ret, "not expected ret: %lu\n", ret); - ok(!IsWindow(hwnd), "window should not exist\n"); -} - -static void test_gettext(void) -{ - WNDCLASS cls; - LPCSTR clsname = "gettexttest"; - HWND hwnd; - LRESULT r; - - memset( &cls, 0, sizeof cls ); - cls.lpfnWndProc = DefWindowProc; - cls.lpszClassName = clsname; - cls.hInstance = GetModuleHandle(NULL); - - if (!RegisterClass( &cls )) return; - - hwnd = CreateWindow( clsname, "test text", WS_OVERLAPPED, 0, 0, 10, 10, 0, NULL, NULL, NULL); - ok( hwnd != NULL, "window was null\n"); - - r = SendMessage( hwnd, WM_GETTEXT, 0x10, 0x1000); - ok( r == 0, "settext should return zero\n"); - - r = SendMessage( hwnd, WM_GETTEXT, 0x10000, 0); - ok( r == 0, "settext should return zero (%ld)\n", r); - - r = SendMessage( hwnd, WM_GETTEXT, 0xff000000, 0x1000); - ok( r == 0, "settext should return zero (%ld)\n", r); - - r = SendMessage( hwnd, WM_GETTEXT, 0x1000, 0xff000000); - ok( r == 0, "settext should return zero (%ld)\n", r); - - DestroyWindow(hwnd); - UnregisterClass( clsname, NULL ); -} - - -static void test_GetUpdateRect(void) -{ - MSG msg; - BOOL ret, parent_wm_paint, grandparent_wm_paint; - RECT rc1, rc2; - HWND hgrandparent, hparent, hchild; - WNDCLASSA cls; - static const char classNameA[] = "GetUpdateRectClass"; - - hgrandparent = CreateWindowA("static", "grandparent", WS_OVERLAPPEDWINDOW, - 0, 0, 100, 100, NULL, NULL, 0, NULL); - - hparent = CreateWindowA("static", "parent", WS_CHILD|WS_VISIBLE, - 0, 0, 100, 100, hgrandparent, NULL, 0, NULL); - - hchild = CreateWindowA("static", "child", WS_CHILD|WS_VISIBLE, - 10, 10, 30, 30, hparent, NULL, 0, NULL); - - ShowWindow(hgrandparent, SW_SHOW); - UpdateWindow(hgrandparent); - flush_events( TRUE ); - - ShowWindow(hchild, SW_HIDE); - SetRect(&rc2, 0, 0, 0, 0); - ret = GetUpdateRect(hgrandparent, &rc1, FALSE); - ok(!ret, "GetUpdateRect returned not empty region\n"); - ok(EqualRect(&rc1, &rc2), "rects do not match (%d,%d,%d,%d) / (%d,%d,%d,%d)\n", - rc1.left, rc1.top, rc1.right, rc1.bottom, - rc2.left, rc2.top, rc2.right, rc2.bottom); - - SetRect(&rc2, 10, 10, 40, 40); - ret = GetUpdateRect(hparent, &rc1, FALSE); - ok(ret, "GetUpdateRect returned empty region\n"); - ok(EqualRect(&rc1, &rc2), "rects do not match (%d,%d,%d,%d) / (%d,%d,%d,%d)\n", - rc1.left, rc1.top, rc1.right, rc1.bottom, - rc2.left, rc2.top, rc2.right, rc2.bottom); - - parent_wm_paint = FALSE; - grandparent_wm_paint = FALSE; - while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) - { - if (msg.message == WM_PAINT) - { - if (msg.hwnd == hgrandparent) grandparent_wm_paint = TRUE; - if (msg.hwnd == hparent) parent_wm_paint = TRUE; - } - DispatchMessage(&msg); - } - ok(parent_wm_paint, "WM_PAINT should have been received in parent\n"); - ok(!grandparent_wm_paint, "WM_PAINT should NOT have been received in grandparent\n"); - - DestroyWindow(hgrandparent); - - cls.style = 0; - cls.lpfnWndProc = DefWindowProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = classNameA; - - if(!RegisterClassA(&cls)) { - trace("Register failed %d\n", GetLastError()); - return; - } - - hgrandparent = CreateWindowA(classNameA, "grandparent", WS_OVERLAPPEDWINDOW, - 0, 0, 100, 100, NULL, NULL, 0, NULL); - - hparent = CreateWindowA(classNameA, "parent", WS_CHILD|WS_VISIBLE, - 0, 0, 100, 100, hgrandparent, NULL, 0, NULL); - - hchild = CreateWindowA(classNameA, "child", WS_CHILD|WS_VISIBLE, - 10, 10, 30, 30, hparent, NULL, 0, NULL); - - ShowWindow(hgrandparent, SW_SHOW); - UpdateWindow(hgrandparent); - flush_events( TRUE ); - - ret = GetUpdateRect(hgrandparent, &rc1, FALSE); - ok(!ret, "GetUpdateRect returned not empty region\n"); - - ShowWindow(hchild, SW_HIDE); - - SetRect(&rc2, 0, 0, 0, 0); - ret = GetUpdateRect(hgrandparent, &rc1, FALSE); - ok(!ret, "GetUpdateRect returned not empty region\n"); - ok(EqualRect(&rc1, &rc2), "rects do not match (%d,%d,%d,%d) / (%d,%d,%d,%d)\n", - rc1.left, rc1.top, rc1.right, rc1.bottom, - rc2.left, rc2.top, rc2.right, rc2.bottom); - - SetRect(&rc2, 10, 10, 40, 40); - ret = GetUpdateRect(hparent, &rc1, FALSE); - ok(ret, "GetUpdateRect returned empty region\n"); - ok(EqualRect(&rc1, &rc2), "rects do not match (%d,%d,%d,%d) / (%d,%d,%d,%d)\n", - rc1.left, rc1.top, rc1.right, rc1.bottom, - rc2.left, rc2.top, rc2.right, rc2.bottom); - - parent_wm_paint = FALSE; - grandparent_wm_paint = FALSE; - while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) - { - if (msg.message == WM_PAINT) - { - if (msg.hwnd == hgrandparent) grandparent_wm_paint = TRUE; - if (msg.hwnd == hparent) parent_wm_paint = TRUE; - } - DispatchMessage(&msg); - } - ok(parent_wm_paint, "WM_PAINT should have been received in parent\n"); - ok(!grandparent_wm_paint, "WM_PAINT should NOT have been received in grandparent\n"); - - DestroyWindow(hgrandparent); -} - - -static LRESULT CALLBACK TestExposedRegion_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - if(msg == WM_PAINT) - { - PAINTSTRUCT ps; - RECT updateRect; - DWORD waitResult; - HWND win; - const int waitTime = 2000; - - BeginPaint(hwnd, &ps); - - /* create and destroy window to create an exposed region on this window */ - win = CreateWindowA("static", "win", WS_VISIBLE, - 10,10,50,50, NULL, NULL, 0, NULL); - DestroyWindow(win); - - waitResult = MsgWaitForMultipleObjects( 0, NULL, FALSE, waitTime, QS_PAINT ); - - ValidateRect(hwnd, NULL); - EndPaint(hwnd, &ps); - - if(waitResult != WAIT_TIMEOUT) - { - GetUpdateRect(hwnd, &updateRect, FALSE); -todo_wine -{ - ok(!IsRectEmpty(&updateRect), "Exposed rect should not be empty\n"); -} - } - - return 1; - } - return DefWindowProc(hwnd, msg, wParam, lParam); -} - -static void test_Expose(void) -{ - ATOM atom; - WNDCLASSA cls; - HWND mw; - memset(&cls, 0, sizeof(WNDCLASSA)); - cls.lpfnWndProc = TestExposedRegion_WndProc; - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszClassName = "TestExposeClass"; - atom = RegisterClassA(&cls); - - mw = CreateWindowA("TestExposeClass", "MainWindow", WS_VISIBLE|WS_OVERLAPPEDWINDOW, - 0, 0, 200, 100, NULL, NULL, 0, NULL); - - UpdateWindow(mw); - DestroyWindow(mw); -} - -START_TEST(win) -{ - pGetAncestor = (void *)GetProcAddress( GetModuleHandleA("user32.dll"), "GetAncestor" ); - pGetWindowInfo = (void *)GetProcAddress( GetModuleHandleA("user32.dll"), "GetWindowInfo" ); - - hwndMain = CreateWindowExA(0, "static", NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, NULL); - if (hwndMain) - { - ok(!GetParent(hwndMain), "GetParent should return 0 for message only windows\n"); - if (pGetAncestor) - { - hwndMessage = pGetAncestor(hwndMain, GA_PARENT); - ok(hwndMessage != 0, "GetAncestor(GA_PARENT) should not return 0 for message only windows\n"); - trace("hwndMessage %p\n", hwndMessage); - } - DestroyWindow(hwndMain); - } - else - trace("CreateWindowExA with parent HWND_MESSAGE failed\n"); - - if (!RegisterWindowClasses()) assert(0); - - hhook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, 0, GetCurrentThreadId()); - assert(hhook); - - hwndMain = CreateWindowExA(/*WS_EX_TOOLWINDOW*/ 0, "MainWindowClass", "Main window", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_POPUP, - 100, 100, 200, 200, - 0, 0, GetModuleHandle(0), NULL); - test_nonclient_area(hwndMain); - - hwndMain2 = CreateWindowExA(/*WS_EX_TOOLWINDOW*/ 0, "MainWindowClass", "Main window 2", - WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_POPUP, - 100, 100, 200, 200, - 0, 0, GetModuleHandle(0), NULL); - assert( hwndMain ); - assert( hwndMain2 ); - - our_pid = GetWindowThreadProcessId(hwndMain, NULL); - - /* Add the tests below this line */ - test_params(); - - test_capture_1(); - test_capture_2(); - test_capture_3(hwndMain, hwndMain2); - - test_CreateWindow(); - test_parent_owner(); - test_SetParent(); - test_shell_window(); - - test_mdi(); - test_icons(); - test_SetWindowPos(hwndMain); - test_SetMenu(hwndMain); - test_SetFocus(hwndMain); - test_SetActiveWindow(hwndMain); - test_SetForegroundWindow(hwndMain); - - test_children_zorder(hwndMain); - test_popup_zorder(hwndMain2, hwndMain); - test_keyboard_input(hwndMain); - test_mouse_input(hwndMain); - test_validatergn(hwndMain); - test_nccalcscroll( hwndMain); - test_scrollvalidate( hwndMain); - test_scrolldc( hwndMain); - test_scroll(); - test_IsWindowUnicode(); - test_vis_rgn(hwndMain); - - test_AdjustWindowRect(); - test_window_styles(); - test_redrawnow(); - test_csparentdc(); - test_SetWindowLong(); - test_ShowWindow(); - test_gettext(); - test_GetUpdateRect(); - test_Expose(); - - /* add the tests above this line */ - UnhookWindowsHookEx(hhook); -} diff --git a/rostests/winetests/user32/winstation.c b/rostests/winetests/user32/winstation.c deleted file mode 100755 index 42f2644b295..00000000000 --- a/rostests/winetests/user32/winstation.c +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Unit tests for window stations and desktops - * - * 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 "wine/test.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winnls.h" - -#define DESKTOP_ALL_ACCESS 0x01ff - -static void print_object( HANDLE obj ) -{ - char buffer[100]; - DWORD size; - - strcpy( buffer, "foobar" ); - if (!GetUserObjectInformationA( obj, UOI_NAME, buffer, sizeof(buffer), &size )) - trace( "could not get info for %p\n", obj ); - else - trace( "obj %p name '%s'\n", obj, buffer ); - strcpy( buffer, "foobar" ); - if (!GetUserObjectInformationA( obj, UOI_TYPE, buffer, sizeof(buffer), &size )) - trace( "could not get type for %p\n", obj ); - else - trace( "obj %p type '%s'\n", obj, buffer ); -} - -static void register_class(void) -{ - WNDCLASSA cls; - - cls.style = CS_DBLCLKS; - cls.lpfnWndProc = DefWindowProcA; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandleA(0); - cls.hIcon = 0; - cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "WinStationClass"; - RegisterClassA(&cls); -} - -static HDESK initial_desktop; - -static DWORD CALLBACK thread( LPVOID arg ) -{ - HDESK d1, d2; - HWND hwnd = CreateWindowExA(0,"WinStationClass","test",WS_POPUP,0,0,100,100,GetDesktopWindow(),0,0,0); - ok( hwnd != 0, "CreateWindow failed\n" ); - d1 = GetThreadDesktop(GetCurrentThreadId()); - trace( "thread %p desktop: %p\n", arg, d1 ); - ok( d1 == initial_desktop, "thread %p doesn't use initial desktop\n", arg ); - - SetLastError( 0xdeadbeef ); - ok( !CloseHandle( d1 ), "CloseHandle succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() ); - SetLastError( 0xdeadbeef ); - ok( !CloseDesktop( d1 ), "CloseDesktop succeeded\n" ); - ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() ); - print_object( d1 ); - d2 = CreateDesktop( "foobar2", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL ); - trace( "created desktop %p\n", d2 ); - ok( d2 != 0, "CreateDesktop failed\n" ); - - SetLastError( 0xdeadbeef ); - ok( !SetThreadDesktop( d2 ), "set thread desktop succeeded with existing window\n" ); - ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() ); - - DestroyWindow( hwnd ); - ok( SetThreadDesktop( d2 ), "set thread desktop failed\n" ); - d1 = GetThreadDesktop(GetCurrentThreadId()); - ok( d1 == d2, "GetThreadDesktop did not return set desktop %p/%p\n", d1, d2 ); - print_object( d2 ); - if (arg < (LPVOID)5) - { - HANDLE hthread = CreateThread( NULL, 0, thread, (char *)arg + 1, 0, NULL ); - Sleep(1000); - WaitForSingleObject( hthread, INFINITE ); - CloseHandle( hthread ); - } - return 0; -} - -static void test_handles(void) -{ - HWINSTA w1, w2, w3; - HDESK d1, d2, d3; - HANDLE hthread; - DWORD id, flags; - ATOM atom; - char buffer[20]; - - /* win stations */ - - w1 = GetProcessWindowStation(); - ok( GetProcessWindowStation() == w1, "GetProcessWindowStation returned different handles\n" ); - ok( !CloseWindowStation(w1), "closing process win station succeeded\n" ); - SetLastError( 0xdeadbeef ); - ok( !CloseHandle(w1), "closing process win station handle succeeded\n" ); - ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() ); - print_object( w1 ); - - flags = 0; - ok( GetHandleInformation( w1, &flags ), "GetHandleInformation failed\n" ); - ok( !(flags & HANDLE_FLAG_PROTECT_FROM_CLOSE), "handle %p PROTECT_FROM_CLOSE set\n", w1 ); - - ok( DuplicateHandle( GetCurrentProcess(), w1, GetCurrentProcess(), (PHANDLE)&w2, 0, - TRUE, DUPLICATE_SAME_ACCESS ), "DuplicateHandle failed\n" ); - ok( CloseWindowStation(w2), "closing dup win station failed\n" ); - - ok( DuplicateHandle( GetCurrentProcess(), w1, GetCurrentProcess(), (PHANDLE)&w2, 0, - TRUE, DUPLICATE_SAME_ACCESS ), "DuplicateHandle failed\n" ); - ok( CloseHandle(w2), "closing dup win station handle failed\n" ); - - w2 = CreateWindowStation("WinSta0", 0, WINSTA_ALL_ACCESS, NULL ); - ok( w2 != 0, "CreateWindowStation failed\n" ); - ok( w2 != w1, "CreateWindowStation returned default handle\n" ); - SetLastError( 0xdeadbeef ); - ok( !CloseDesktop( (HDESK)w2 ), "CloseDesktop succeeded on win station\n" ); - ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() ); - ok( CloseWindowStation( w2 ), "CloseWindowStation failed\n" ); - - w2 = CreateWindowStation("WinSta0", 0, WINSTA_ALL_ACCESS, NULL ); - ok( CloseHandle( w2 ), "CloseHandle failed\n" ); - - w2 = OpenWindowStation("winsta0", TRUE, WINSTA_ALL_ACCESS ); - ok( w2 != 0, "OpenWindowStation failed\n" ); - ok( w2 != w1, "OpenWindowStation returned default handle\n" ); - ok( CloseWindowStation( w2 ), "CloseWindowStation failed\n" ); - - w2 = OpenWindowStation("dummy name", TRUE, WINSTA_ALL_ACCESS ); - ok( !w2, "open dummy win station succeeded\n" ); - - CreateMutexA( NULL, 0, "foobar" ); - w2 = CreateWindowStation("foobar", 0, WINSTA_ALL_ACCESS, NULL ); - ok( w2 != 0, "create foobar station failed\n" ); - - w3 = OpenWindowStation("foobar", TRUE, WINSTA_ALL_ACCESS ); - ok( w3 != 0, "open foobar station failed\n" ); - ok( w3 != w2, "open foobar station returned same handle\n" ); - ok( CloseWindowStation( w2 ), "CloseWindowStation failed\n" ); - ok( CloseWindowStation( w3 ), "CloseWindowStation failed\n" ); - - w3 = OpenWindowStation("foobar", TRUE, WINSTA_ALL_ACCESS ); - ok( !w3, "open foobar station succeeded\n" ); - - w2 = CreateWindowStation("foobar1", 0, WINSTA_ALL_ACCESS, NULL ); - ok( w2 != 0, "create foobar station failed\n" ); - w3 = CreateWindowStation("foobar2", 0, WINSTA_ALL_ACCESS, NULL ); - ok( w3 != 0, "create foobar station failed\n" ); - ok( GetHandleInformation( w2, &flags ), "GetHandleInformation failed\n" ); - ok( GetHandleInformation( w3, &flags ), "GetHandleInformation failed\n" ); - - SetProcessWindowStation( w2 ); - register_class(); - atom = GlobalAddAtomA("foo"); - ok( GlobalGetAtomNameA( atom, buffer, sizeof(buffer) ) == 3, "GlobalGetAtomName failed\n" ); - ok( !lstrcmpiA( buffer, "foo" ), "bad atom value %s\n", buffer ); - - ok( !CloseWindowStation( w2 ), "CloseWindowStation succeeded\n" ); - ok( GetHandleInformation( w2, &flags ), "GetHandleInformation failed\n" ); - - SetProcessWindowStation( w3 ); - ok( GetHandleInformation( w2, &flags ), "GetHandleInformation failed\n" ); - ok( CloseWindowStation( w2 ), "CloseWindowStation failed\n" ); - ok( GlobalGetAtomNameA( atom, buffer, sizeof(buffer) ) == 3, "GlobalGetAtomName failed\n" ); - ok( !lstrcmpiA( buffer, "foo" ), "bad atom value %s\n", buffer ); - - /* desktops */ - d1 = GetThreadDesktop(GetCurrentThreadId()); - initial_desktop = d1; - ok( GetThreadDesktop(GetCurrentThreadId()) == d1, - "GetThreadDesktop returned different handles\n" ); - - flags = 0; - ok( GetHandleInformation( d1, &flags ), "GetHandleInformation failed\n" ); - ok( !(flags & HANDLE_FLAG_PROTECT_FROM_CLOSE), "handle %p PROTECT_FROM_CLOSE set\n", d1 ); - - SetLastError( 0xdeadbeef ); - ok( !CloseDesktop(d1), "closing thread desktop succeeded\n" ); - ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() ); - - SetLastError( 0xdeadbeef ); - ok( !CloseHandle(d1), "closing thread desktop handle failed\n" ); - ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() ); - - ok( DuplicateHandle( GetCurrentProcess(), d1, GetCurrentProcess(), (PHANDLE)&d2, 0, - TRUE, DUPLICATE_SAME_ACCESS ), "DuplicateHandle failed\n" ); - ok( CloseDesktop(d2), "closing dup desktop failed\n" ); - - ok( DuplicateHandle( GetCurrentProcess(), d1, GetCurrentProcess(), (PHANDLE)&d2, 0, - TRUE, DUPLICATE_SAME_ACCESS ), "DuplicateHandle failed\n" ); - ok( CloseHandle(d2), "closing dup desktop handle failed\n" ); - - d2 = OpenDesktop( "dummy name", 0, TRUE, DESKTOP_ALL_ACCESS ); - ok( !d2, "open dummy desktop succeeded\n" ); - - d2 = CreateDesktop( "foobar", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL ); - ok( d2 != 0, "create foobar desktop failed\n" ); - SetLastError( 0xdeadbeef ); - ok( !CloseWindowStation( (HWINSTA)d2 ), "CloseWindowStation succeeded on desktop\n" ); - ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() ); - - SetLastError( 0xdeadbeef ); - d3 = CreateDesktop( "foobar", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL ); - ok( d3 != 0, "create foobar desktop again failed\n" ); - ok( GetLastError() == 0xdeadbeef, "bad last error %d\n", GetLastError() ); - ok( CloseDesktop( d3 ), "CloseDesktop failed\n" ); - - d3 = OpenDesktop( "foobar", 0, TRUE, DESKTOP_ALL_ACCESS ); - ok( d3 != 0, "open foobar desktop failed\n" ); - ok( d3 != d2, "open foobar desktop returned same handle\n" ); - ok( CloseDesktop( d2 ), "CloseDesktop failed\n" ); - ok( CloseDesktop( d3 ), "CloseDesktop failed\n" ); - - d3 = OpenDesktop( "foobar", 0, TRUE, DESKTOP_ALL_ACCESS ); - ok( !d3, "open foobar desktop succeeded\n" ); - - ok( !CloseHandle(d1), "closing thread desktop handle succeeded\n" ); - d2 = GetThreadDesktop(GetCurrentThreadId()); - ok( d1 == d2, "got different handles after close\n" ); - - trace( "thread 1 desktop: %p\n", d1 ); - print_object( d1 ); - hthread = CreateThread( NULL, 0, thread, (LPVOID)2, 0, &id ); - Sleep(1000); - trace( "get other thread desktop: %p\n", GetThreadDesktop(id) ); - WaitForSingleObject( hthread, INFINITE ); - CloseHandle( hthread ); -} - -/* Enumeration tests */ - -static BOOL CALLBACK window_station_callbackA(LPSTR winsta, LPARAM lp) -{ - trace("window_station_callbackA called with argument %s\n", winsta); - return lp; -} - -static BOOL CALLBACK open_window_station_callbackA(LPSTR winsta, LPARAM lp) -{ - HWINSTA hwinsta; - - trace("open_window_station_callbackA called with argument %s\n", winsta); - hwinsta = OpenWindowStationA(winsta, FALSE, WINSTA_ENUMERATE); - ok(hwinsta != NULL, "Could not open desktop %s!\n", winsta); - if (hwinsta) - CloseWindowStation(hwinsta); - return lp; -} - -static void test_enumstations(void) -{ - BOOL ret; - - if (0) /* Crashes instead */ - { - SetLastError(0xbabefeed); - ret = EnumWindowStationsA(NULL, 0); - ok(!ret, "EnumWindowStationsA returned successfully!\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "LastError is set to %08x\n", GetLastError()); - } - - SetLastError(0xdeadbeef); - ret = EnumWindowStationsA(open_window_station_callbackA, 0x12345); - ok(ret == 0x12345, "EnumWindowStationsA returned %x\n", ret); - ok(GetLastError() == 0xdeadbeef, "LastError is set to %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = EnumWindowStationsA(window_station_callbackA, 0); - ok(!ret, "EnumWindowStationsA returned %x\n", ret); - ok(GetLastError() == 0xdeadbeef, "LastError is set to %08x\n", GetLastError()); -} - -static BOOL CALLBACK desktop_callbackA(LPSTR desktop, LPARAM lp) -{ - trace("desktop_callbackA called with argument %s\n", desktop); - return lp; -} - -static BOOL CALLBACK open_desktop_callbackA(LPSTR desktop, LPARAM lp) -{ - HDESK hdesk; - static int once; - - trace("open_desktop_callbackA called with argument %s\n", desktop); - /* Only try to open one desktop */ - if (once++) - return lp; - - hdesk = OpenDesktopA(desktop, 0, FALSE, DESKTOP_ENUMERATE); - ok(hdesk != NULL, "Could not open desktop %s!\n", desktop); - if (hdesk) - CloseDesktop(hdesk); - return lp; -} - -static void test_enumdesktops(void) -{ - BOOL ret; - - if (0) /* Crashes instead */ - { - SetLastError(0xbabefeed); - ret = EnumDesktopsA(GetProcessWindowStation(), NULL, 0); - ok(!ret, "EnumDesktopsA returned successfully!\n"); - ok(GetLastError() == ERROR_INVALID_PARAMETER, "LastError is set to %08x\n", GetLastError()); - } - - SetLastError(0xdeadbeef); - ret = EnumDesktopsA(NULL, desktop_callbackA, 0x12345); - ok(ret == 0x12345, "EnumDesktopsA returned %x\n", ret); - ok(GetLastError() == 0xdeadbeef, "LastError is set to %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = EnumDesktopsA(GetProcessWindowStation(), open_desktop_callbackA, 0x12345); - ok(ret == 0x12345, "EnumDesktopsA returned %x\n", ret); - ok(GetLastError() == 0xdeadbeef, "LastError is set to %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = EnumDesktopsA(INVALID_HANDLE_VALUE, desktop_callbackA, 0x12345); - ok(!ret, "EnumDesktopsA returned %x\n", ret); - ok(GetLastError() == ERROR_INVALID_HANDLE, "LastError is set to %08x\n", GetLastError()); - - SetLastError(0xdeadbeef); - ret = EnumDesktopsA(GetProcessWindowStation(), desktop_callbackA, 0); - ok(!ret, "EnumDesktopsA returned %x\n", ret); - ok(GetLastError() == 0xdeadbeef, "LastError is set to %08x\n", GetLastError()); -} - -START_TEST(winstation) -{ - /* Check whether this platform supports WindowStation calls */ - - SetLastError( 0xdeadbeef ); - GetProcessWindowStation(); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - skip("WindowStation calls not supported on this platform\n"); - return; - } - - test_enumstations(); - test_enumdesktops(); - test_handles(); -} diff --git a/rostests/winetests/user32/wsprintf.c b/rostests/winetests/user32/wsprintf.c deleted file mode 100755 index c0ca1c6703a..00000000000 --- a/rostests/winetests/user32/wsprintf.c +++ /dev/null @@ -1,103 +0,0 @@ - /* Unit test suite for the wsprintf functions - * - * Copyright 2002 Bill Medland - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * 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/test.h" -#include "windef.h" -#include "winbase.h" -#include "winuser.h" - -static void wsprintfATest(void) -{ - char buf[25]; - int rc; - - rc=wsprintfA(buf, "%010ld", -1); - ok(rc == 10, "wsPrintfA length failure: rc=%d error=%d\n",rc,GetLastError()); - ok((lstrcmpA(buf, "-000000001") == 0), - "wsprintfA zero padded negative value failure: buf=[%s]\n",buf); -} - -static void wsprintfWTest(void) -{ - static const WCHAR fmt[] = {'%','0','1','0','l','d','\0'}; - static const WCHAR target[] = {'-','0','0','0','0','0','0','0','0','1', '\0'}; - WCHAR buf[25]; - int rc; - - rc=wsprintfW(buf, fmt, -1); - if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) - { - skip("wsprintfW is not implemented\n"); - return; - } - ok(rc == 10, "wsPrintfW length failure: rc=%d error=%d\n",rc,GetLastError()); - ok((lstrcmpW(buf, target) == 0), - "wsprintfW zero padded negative value failure\n"); -} - -/* Test if the CharUpper / CharLower functions return true 16 bit results, - if the input is a 16 bit input value. Up to Wine 11-2003 the input value - 0xff returns 0xffffffff. */ - -static void CharUpperTest(void) -{ - int i,out,failed; - - failed = 0; - for (i=0;i<256;i++) - { - out = (int) CharUpper((LPTSTR)i); - /* printf("%0x ",out); */ - if ((out >> 16) != 0) - { - failed = 1; - break; - } - } - ok(!failed,"CharUpper failed - 16bit input (0x%0x) returned 32bit result (0x%0x)\n",i,out); -} - -static void CharLowerTest(void) -{ - int i,out,failed; - - failed = 0; - for (i=0;i<256;i++) - { - out = (int) CharLower((LPTSTR)i); - /* printf("%0x ",out); */ - if ((out >> 16) != 0) - { - failed = 1; - break; - } - } - ok(!failed,"CharLower failed - 16bit input (0x%0x) returned 32bit result (0x%0x)\n",i,out); -} - - -START_TEST(wsprintf) -{ - wsprintfATest(); - wsprintfWTest(); - CharUpperTest(); - CharLowerTest(); -} diff --git a/rostests/winetests/usp10/testlist.c b/rostests/winetests/usp10/testlist.c deleted file mode 100644 index 84d72c0a176..00000000000 --- a/rostests/winetests/usp10/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_usp10(void); - -const struct test winetest_testlist[] = -{ - { "usp10", func_usp10 }, - { 0, 0 } -}; diff --git a/rostests/winetests/usp10/usp10.c b/rostests/winetests/usp10/usp10.c deleted file mode 100644 index 070590468eb..00000000000 --- a/rostests/winetests/usp10/usp10.c +++ /dev/null @@ -1,1419 +0,0 @@ -/* - * Tests for usp10 dll - * - * Copyright 2006 Jeff Latimer - * Copyright 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 - * - * Notes: - * Uniscribe allows for processing of complex scripts such as joining - * and filtering characters and bi-directional text with custom line breaks. - */ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -static void test_ScriptShape(HDC hdc) -{ - static const WCHAR test1[] = {'t', 'e', 's', 't',0}; - BOOL ret; - HRESULT hr; - SCRIPT_CACHE sc = NULL; - WORD glyphs[4]; - SCRIPT_VISATTR attrs[4]; - SCRIPT_ITEM items[2]; - int nb, widths[4]; - - hr = ScriptItemize(NULL, 4, 2, NULL, NULL, items, NULL); - ok(hr == E_INVALIDARG, "ScriptItemize should return E_INVALIDARG not %08x\n", hr); - - hr = ScriptItemize(test1, 4, 2, NULL, NULL, NULL, NULL); - ok(hr == E_INVALIDARG, "ScriptItemize should return E_INVALIDARG not %08x\n", hr); - - hr = ScriptItemize(test1, 4, 2, NULL, NULL, items, NULL); - ok(!hr, "ScriptItemize should return S_OK not %08x\n", hr); - ok(items[0].a.fNoGlyphIndex == FALSE, "fNoGlyphIndex TRUE\n"); - - hr = ScriptShape(hdc, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, NULL, &nb); - ok(hr == E_INVALIDARG, "ScriptShape should return E_INVALIDARG not %08x\n", hr); - - hr = ScriptShape(hdc, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, attrs, NULL); - ok(hr == E_INVALIDARG, "ScriptShape should return E_INVALIDARG not %08x\n", hr); - - hr = ScriptShape(hdc, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, attrs, &nb); - ok(!hr, "ScriptShape should return S_OK not %08x\n", hr); - ok(items[0].a.fNoGlyphIndex == FALSE, "fNoGlyphIndex TRUE\n"); - - hr = ScriptPlace(hdc, &sc, glyphs, 4, NULL, &items[0].a, widths, NULL, NULL); - ok(hr == E_INVALIDARG, "ScriptPlace should return E_INVALIDARG not %08x\n", hr); - - hr = ScriptPlace(hdc, &sc, glyphs, 4, attrs, &items[0].a, widths, NULL, NULL); - ok(!hr, "ScriptPlace should return S_OK not %08x\n", hr); - ok(items[0].a.fNoGlyphIndex == FALSE, "fNoGlyphIndex TRUE\n"); - - ret = ExtTextOutW(hdc, 1, 1, 0, NULL, glyphs, 4, widths); - ok(ret, "ExtTextOutW should return TRUE\n"); - - ScriptFreeCache(&sc); -} - -static void test_ScriptItemIzeShapePlace(HDC hdc, unsigned short pwOutGlyphs[256]) -{ - HRESULT hr; - int iMaxProps; - const SCRIPT_PROPERTIES **ppSp; - - int cInChars; - int cMaxItems; - SCRIPT_ITEM pItem[255]; - int pcItems; - WCHAR TestItem1[] = {'T', 'e', 's', 't', 'a', 0}; - WCHAR TestItem2[] = {'T', 'e', 's', 't', 'b', 0}; - WCHAR TestItem3[] = {'T', 'e', 's', 't', 'c',' ','1','2','3',' ',' ','e','n','d',0}; - WCHAR TestItem4[] = {'T', 'e', 's', 't', 'c',' ',0x0684,0x0694,0x06a4,' ',' ','e','n','d',0}; - WCHAR TestItem5[] = {0x0684,'T','e','s','t','c',' ',0x0684,0x0694,0x06a4,' ',' ','e','n','d',0}; - - SCRIPT_CACHE psc; - int cChars; - int cMaxGlyphs; - unsigned short pwOutGlyphs1[256]; - unsigned short pwOutGlyphs2[256]; - unsigned short pwLogClust[256]; - SCRIPT_VISATTR psva[256]; - int pcGlyphs; - int piAdvance[256]; - GOFFSET pGoffset[256]; - ABC pABC[256]; - int cnt; - - /* Start testing usp10 functions */ - /* This test determines that the pointer returned by ScriptGetProperties is valid - * by checking a known value in the table */ - hr = ScriptGetProperties(&ppSp, &iMaxProps); - trace("number of script properties %d\n", iMaxProps); - ok (iMaxProps > 0, "Number of scripts returned should not be 0\n"); - if (iMaxProps > 0) - ok( ppSp[5]->langid == 9, "Langid[5] not = to 9\n"); /* Check a known value to ensure */ - /* ptrs work */ - - - /* This set of tests are to check that the various edits in ScriptIemize work */ - cInChars = 5; /* Length of test without NULL */ - cMaxItems = 1; /* Check threshold value */ - hr = ScriptItemize(TestItem1, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == E_INVALIDARG, "ScriptItemize should return E_INVALIDARG if cMaxItems < 2. Was %d\n", - cMaxItems); - cInChars = 5; - cMaxItems = 255; - hr = ScriptItemize(NULL, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == E_INVALIDARG, "ScriptItemize should return E_INVALIDARG if pwcInChars is NULL\n"); - - cInChars = 5; - cMaxItems = 255; - hr = ScriptItemize(TestItem1, 0, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == E_INVALIDARG, "ScriptItemize should return E_INVALIDARG if cInChars is 0\n"); - - cInChars = 5; - cMaxItems = 255; - hr = ScriptItemize(TestItem1, cInChars, cMaxItems, NULL, NULL, NULL, &pcItems); - ok (hr == E_INVALIDARG, "ScriptItemize should return E_INVALIDARG if pItems is NULL\n"); - - /* This is a valid test that will cause parsing to take place */ - cInChars = 5; - cMaxItems = 255; - hr = ScriptItemize(TestItem1, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == 0, "ScriptItemize should return 0, returned %08x\n", hr); - /* This test is for the interim operation of ScriptItemize where only one SCRIPT_ITEM is * - * returned. */ - ok (pcItems > 0, "The number of SCRIPT_ITEMS should be greater than 0\n"); - if (pcItems > 0) - ok (pItem[0].iCharPos == 0 && pItem[1].iCharPos == cInChars, - "Start pos not = 0 (%d) or end pos not = %d (%d)\n", - pItem[0].iCharPos, cInChars, pItem[1].iCharPos); - - /* It would appear that we have a valid SCRIPT_ANALYSIS and can continue - * ie. ScriptItemize has succeeded and that pItem has been set */ - cInChars = 5; - cMaxItems = 255; - if (hr == 0) { - psc = NULL; /* must be null on first call */ - cChars = cInChars; - cMaxGlyphs = cInChars; - hr = ScriptShape(NULL, &psc, TestItem1, cChars, - cMaxGlyphs, &pItem[0].a, - pwOutGlyphs1, pwLogClust, psva, &pcGlyphs); - ok (hr == E_PENDING, "If psc is NULL (%08x) the E_PENDING should be returned\n", hr); - cMaxGlyphs = 4; - hr = ScriptShape(hdc, &psc, TestItem1, cChars, - cMaxGlyphs, &pItem[0].a, - pwOutGlyphs1, pwLogClust, psva, &pcGlyphs); - ok (hr == E_OUTOFMEMORY, "If not enough output area cChars (%d) is > than CMaxGlyphs " - "(%d) but not E_OUTOFMEMORY\n", - cChars, cMaxGlyphs); - cMaxGlyphs = 256; - hr = ScriptShape(hdc, &psc, TestItem1, cChars, - cMaxGlyphs, &pItem[0].a, - pwOutGlyphs1, pwLogClust, psva, &pcGlyphs); - ok (hr == 0, "ScriptShape should return 0 not (%08x)\n", hr); - ok (psc != NULL, "psc should not be null and have SCRIPT_CACHE buffer address\n"); - ok (pcGlyphs == cChars, "Chars in (%d) should equal Glyphs out (%d)\n", cChars, pcGlyphs); - if (hr ==0) { - hr = ScriptPlace(hdc, &psc, pwOutGlyphs1, pcGlyphs, psva, &pItem[0].a, piAdvance, - pGoffset, pABC); - ok (hr == 0, "ScriptPlace should return 0 not (%08x)\n", hr); - hr = ScriptPlace(NULL, &psc, pwOutGlyphs1, pcGlyphs, psva, &pItem[0].a, piAdvance, - pGoffset, pABC); - ok (hr == 0, "ScriptPlace should return 0 not (%08x)\n", hr); - for (cnt=0; cnt < pcGlyphs; cnt++) - pwOutGlyphs[cnt] = pwOutGlyphs1[cnt]; /* Send to next function */ - } - - /* This test will check to make sure that SCRIPT_CACHE is reused and that not translation * - * takes place if fNoGlyphIndex is set. */ - - cInChars = 5; - cMaxItems = 255; - hr = ScriptItemize(TestItem2, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == 0, "ScriptItemize should return 0, returned %08x\n", hr); - /* This test is for the interim operation of ScriptItemize where only one SCRIPT_ITEM is * - * returned. */ - ok (pItem[0].iCharPos == 0 && pItem[1].iCharPos == cInChars, - "Start pos not = 0 (%d) or end pos not = %d (%d)\n", - pItem[0].iCharPos, cInChars, pItem[1].iCharPos); - /* It would appear that we have a valid SCRIPT_ANALYSIS and can continue */ - if (hr == 0) { - cChars = cInChars; - cMaxGlyphs = 256; - pItem[0].a.fNoGlyphIndex = 1; /* say no translate */ - hr = ScriptShape(NULL, &psc, TestItem2, cChars, - cMaxGlyphs, &pItem[0].a, - pwOutGlyphs2, pwLogClust, psva, &pcGlyphs); - ok (hr != E_PENDING, "If psc should not be NULL (%08x) and the E_PENDING should be returned\n", hr); - ok (hr == 0, "ScriptShape should return 0 not (%08x)\n", hr); - ok (psc != NULL, "psc should not be null and have SCRIPT_CACHE buffer address\n"); - ok (pcGlyphs == cChars, "Chars in (%d) should equal Glyphs out (%d)\n", cChars, pcGlyphs); - for (cnt=0; cnt < cChars && TestItem2[cnt] == pwOutGlyphs2[cnt]; cnt++) {} - ok (cnt == cChars, "Translation to place when told not to. WCHAR %d - %04x != %04x\n", - cnt, TestItem2[cnt], pwOutGlyphs2[cnt]); - if (hr ==0) { - hr = ScriptPlace(hdc, &psc, pwOutGlyphs2, pcGlyphs, psva, &pItem[0].a, piAdvance, - pGoffset, pABC); - ok (hr == 0, "ScriptPlace should return 0 not (%08x)\n", hr); - } - } - hr = ScriptFreeCache( &psc); - ok (!psc, "psc is not null after ScriptFreeCache\n"); - - } - - /* This is a valid test that will cause parsing to take place and create 3 script_items */ - cInChars = (sizeof(TestItem3)/2)-1; - cMaxItems = 255; - hr = ScriptItemize(TestItem3, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == 0, "ScriptItemize should return 0, returned %08x\n", hr); - if (hr == 0) - { - ok (pcItems == 3, "The number of SCRIPT_ITEMS should be 3 not %d\n", pcItems); - if (pcItems > 2) - { - ok (pItem[0].iCharPos == 0 && pItem[1].iCharPos == 6, - "Start pos [0] not = 0 (%d) or end pos [1] not = %d\n", - pItem[0].iCharPos, pItem[1].iCharPos); - ok (pItem[1].iCharPos == 6 && pItem[2].iCharPos == 11, - "Start pos [1] not = 6 (%d) or end pos [2] not = 11 (%d)\n", - pItem[1].iCharPos, pItem[2].iCharPos); - ok (pItem[2].iCharPos == 11 && pItem[3].iCharPos == cInChars, - "Start pos [2] not = 11 (%d) or end [3] pos not = 14 (%d), cInChars = %d\n", - pItem[2].iCharPos, pItem[3].iCharPos, cInChars); - } - hr = ScriptFreeCache( &psc); - ok (!psc, "psc is not null after ScriptFreeCache\n"); - } - - /* This is a valid test that will cause parsing to take place and create 3 script_items */ - cInChars = (sizeof(TestItem4)/2)-1; - cMaxItems = 255; - hr = ScriptItemize(TestItem4, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == 0, "ScriptItemize should return 0, returned %08x\n", hr); - if (hr == 0) - { - ok (pcItems == 3, "The number of SCRIPT_ITEMS should be 3 not %d\n", pcItems); - if (pcItems > 2) - { - ok (pItem[0].iCharPos == 0 && pItem[1].iCharPos == 6, - "Start pos [0] not = 0 (%d) or end pos [1] not = %d\n", - pItem[0].iCharPos, pItem[1].iCharPos); - ok (pItem[1].iCharPos == 6 && pItem[2].iCharPos == 11, - "Start pos [1] not = 6 (%d) or end pos [2] not = 11 (%d)\n", - pItem[1].iCharPos, pItem[2].iCharPos); - ok (pItem[2].iCharPos == 11 && pItem[3].iCharPos == cInChars, - "Start pos [2] not = 11 (%d) or end [3] pos not = 14 (%d), cInChars = %d\n", - pItem[2].iCharPos, pItem[3].iCharPos, cInChars); - } - hr = ScriptFreeCache( &psc); - ok (!psc, "psc is not null after ScriptFreeCache\n"); - } - - /* - * This test is for when the first unicode character requires bidi support - */ - cInChars = (sizeof(TestItem5)-1)/sizeof(WCHAR); - hr = ScriptItemize(TestItem5, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == 0, "ScriptItemize should return 0, returned %08x\n", hr); - ok (pcItems == 4, "There should have been 4 items, found %d\n", pcItems); - ok (pItem[0].a.s.uBidiLevel == 1, "The first character should have been bidi=1 not %d\n", - pItem[0].a.s.uBidiLevel); -} - -static void test_ScriptGetCMap(HDC hdc, unsigned short pwOutGlyphs[256]) -{ - HRESULT hr; - SCRIPT_CACHE psc = NULL; - int cInChars; - int cChars; - unsigned short pwOutGlyphs3[256]; - WCHAR TestItem1[] = {'T', 'e', 's', 't', 'a', 0}; - DWORD dwFlags; - int cnt; - - /* Check to make sure that SCRIPT_CACHE gets allocated ok */ - dwFlags = 0; - cInChars = cChars = 5; - /* Some sanity checks for ScriptGetCMap */ - - hr = ScriptGetCMap(NULL, NULL, NULL, 0, 0, NULL); - ok( hr == E_INVALIDARG, "(NULL,NULL,NULL,0,0,NULL), " - "expected E_INVALIDARG, got %08x\n", hr); - - hr = ScriptGetCMap(NULL, NULL, TestItem1, cInChars, dwFlags, pwOutGlyphs3); - ok( hr == E_INVALIDARG, "(NULL,NULL,TestItem1, cInChars, dwFlags, pwOutGlyphs3), " - "expected E_INVALIDARG, got %08x\n", hr); - - /* Set psc to NULL, to be able to check if a pointer is returned in psc */ - psc = NULL; - hr = ScriptGetCMap(NULL, &psc, NULL, 0, 0, NULL); - ok( hr == E_PENDING, "(NULL,&psc,NULL,0,0NULL), expected E_PENDING, " - "got %08x\n", hr); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - - /* Set psc to NULL but add hdc, to be able to check if a pointer is returned in psc */ - psc = NULL; - hr = ScriptGetCMap(hdc, &psc, NULL, 0, 0, NULL); - ok( hr == S_OK, "ScriptGetCMap(NULL,&psc,NULL,0,0,NULL), expected S_OK, " - "got %08x\n", hr); - ok( psc != NULL, "ScritpGetCMap expected psc to be not NULL\n"); - ScriptFreeCache( &psc); - - /* Set psc to NULL, to be able to check if a pointer is returned in psc */ - psc = NULL; - hr = ScriptGetCMap(NULL, &psc, TestItem1, cInChars, dwFlags, pwOutGlyphs3); - ok( hr == E_PENDING, "(NULL,&psc,), expected E_PENDING, got %08x\n", hr); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - /* Check to see if the results are the same as those returned by ScriptShape */ - hr = ScriptGetCMap(hdc, &psc, TestItem1, cInChars, dwFlags, pwOutGlyphs3); - ok (hr == 0, "ScriptGetCMap should return 0 not (%08x)\n", hr); - ok (psc != NULL, "psc should not be null and have SCRIPT_CACHE buffer address\n"); - for (cnt=0; cnt < cChars && pwOutGlyphs[cnt] == pwOutGlyphs3[cnt]; cnt++) {} - ok (cnt == cInChars, "Translation not correct. WCHAR %d - %04x != %04x\n", - cnt, pwOutGlyphs[cnt], pwOutGlyphs3[cnt]); - - hr = ScriptFreeCache( &psc); - ok (!psc, "psc is not null after ScriptFreeCache\n"); - -} - -static void test_ScriptGetFontProperties(HDC hdc) -{ - HRESULT hr; - SCRIPT_CACHE psc,old_psc; - SCRIPT_FONTPROPERTIES sfp; - - /* Some sanity checks for ScriptGetFontProperties */ - - hr = ScriptGetFontProperties(NULL,NULL,NULL); - ok( hr == E_INVALIDARG, "(NULL,NULL,NULL), expected E_INVALIDARG, got %08x\n", hr); - - hr = ScriptGetFontProperties(NULL,NULL,&sfp); - ok( hr == E_INVALIDARG, "(NULL,NULL,&sfp), expected E_INVALIDARG, got %08x\n", hr); - - /* Set psc to NULL, to be able to check if a pointer is returned in psc */ - psc = NULL; - hr = ScriptGetFontProperties(NULL,&psc,NULL); - ok( hr == E_INVALIDARG, "(NULL,&psc,NULL), expected E_INVALIDARG, got %08x\n", hr); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - - /* Set psc to NULL, to be able to check if a pointer is returned in psc */ - psc = NULL; - hr = ScriptGetFontProperties(NULL,&psc,&sfp); - ok( hr == E_PENDING, "(NULL,&psc,&sfp), expected E_PENDING, got %08x\n", hr); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - - hr = ScriptGetFontProperties(hdc,NULL,NULL); - ok( hr == E_INVALIDARG, "(hdc,NULL,NULL), expected E_INVALIDARG, got %08x\n", hr); - - hr = ScriptGetFontProperties(hdc,NULL,&sfp); - ok( hr == E_INVALIDARG, "(hdc,NULL,&sfp), expected E_INVALIDARG, got %08x\n", hr); - - /* Set psc to NULL, to be able to check if a pointer is returned in psc */ - psc = NULL; - hr = ScriptGetFontProperties(hdc,&psc,NULL); - ok( hr == E_INVALIDARG, "(hdc,&psc,NULL), expected E_INVALIDARG, got %08x\n", hr); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - - /* Pass an invalid sfp */ - psc = NULL; - sfp.cBytes = sizeof(SCRIPT_FONTPROPERTIES) - 1; - hr = ScriptGetFontProperties(hdc,&psc,&sfp); - ok( hr == E_INVALIDARG, "(hdc,&psc,&sfp) invalid, expected E_INVALIDARG, got %08x\n", hr); - ok( psc != NULL, "Expected a pointer in psc, got NULL\n"); - ScriptFreeCache(&psc); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - - /* Give it the correct cBytes, we don't care about what's coming back */ - sfp.cBytes = sizeof(SCRIPT_FONTPROPERTIES); - psc = NULL; - hr = ScriptGetFontProperties(hdc,&psc,&sfp); - ok( hr == S_OK, "(hdc,&psc,&sfp) partly initialized, expected S_OK, got %08x\n", hr); - ok( psc != NULL, "Expected a pointer in psc, got NULL\n"); - - /* Save the psc pointer */ - old_psc = psc; - /* Now a NULL hdc again */ - hr = ScriptGetFontProperties(NULL,&psc,&sfp); - ok( hr == S_OK, "(NULL,&psc,&sfp), expected S_OK, got %08x\n", hr); - ok( psc == old_psc, "Expected psc not to be changed, was %p is now %p\n", old_psc, psc); - ScriptFreeCache(&psc); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); -} - -static void test_ScriptTextOut(HDC hdc) -{ - HRESULT hr; - - int cInChars; - int cMaxItems; - SCRIPT_ITEM pItem[255]; - int pcItems; - WCHAR TestItem1[] = {'T', 'e', 's', 't', 'a', 0}; - - SCRIPT_CACHE psc; - int cChars; - int cMaxGlyphs; - unsigned short pwOutGlyphs1[256]; - WORD pwLogClust[256]; - SCRIPT_VISATTR psva[256]; - int pcGlyphs; - int piAdvance[256]; - GOFFSET pGoffset[256]; - ABC pABC[256]; - RECT rect; - int piX; - int iCP = 1; - BOOL fTrailing = FALSE; - SCRIPT_LOGATTR *psla; - SCRIPT_LOGATTR sla[256]; - - /* This is a valid test that will cause parsing to take place */ - cInChars = 5; - cMaxItems = 255; - hr = ScriptItemize(TestItem1, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == 0, "ScriptItemize should return 0, returned %08x\n", hr); - /* This test is for the interim operation of ScriptItemize where only one SCRIPT_ITEM is * - * returned. */ - ok (pcItems > 0, "The number of SCRIPT_ITEMS should be greater than 0\n"); - if (pcItems > 0) - ok (pItem[0].iCharPos == 0 && pItem[1].iCharPos == cInChars, - "Start pos not = 0 (%d) or end pos not = %d (%d)\n", - pItem[0].iCharPos, cInChars, pItem[1].iCharPos); - - /* It would appear that we have a valid SCRIPT_ANALYSIS and can continue - * ie. ScriptItemize has succeeded and that pItem has been set */ - cInChars = 5; - cMaxItems = 255; - if (hr == 0) { - psc = NULL; /* must be null on first call */ - cChars = cInChars; - cMaxGlyphs = cInChars; - cMaxGlyphs = 256; - hr = ScriptShape(hdc, &psc, TestItem1, cChars, - cMaxGlyphs, &pItem[0].a, - pwOutGlyphs1, pwLogClust, psva, &pcGlyphs); - ok (hr == 0, "ScriptShape should return 0 not (%08x)\n", hr); - ok (psc != NULL, "psc should not be null and have SCRIPT_CACHE buffer address\n"); - ok (pcGlyphs == cChars, "Chars in (%d) should equal Glyphs out (%d)\n", cChars, pcGlyphs); - if (hr ==0) { - /* Note hdc is needed as glyph info is not yet in psc */ - hr = ScriptPlace(hdc, &psc, pwOutGlyphs1, pcGlyphs, psva, &pItem[0].a, piAdvance, - pGoffset, pABC); - ok (hr == 0, "Should return 0 not (%08x)\n", hr); - ScriptFreeCache(&psc); /* Get rid of psc for next test set */ - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - - hr = ScriptTextOut(NULL, NULL, 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0, NULL, NULL, NULL); - ok (hr == E_INVALIDARG, "Should return 0 not (%08x)\n", hr); - - hr = ScriptTextOut(NULL, NULL, 0, 0, 0, NULL, &pItem[0].a, NULL, 0, pwOutGlyphs1, pcGlyphs, - piAdvance, NULL, pGoffset); - ok( hr == E_INVALIDARG, "(NULL,NULL,TestItem1, cInChars, dwFlags, pwOutGlyphs3), " - "expected E_INVALIDARG, got %08x\n", hr); - - /* Set psc to NULL, to be able to check if a pointer is returned in psc */ - psc = NULL; - hr = ScriptTextOut(NULL, &psc, 0, 0, 0, NULL, NULL, NULL, 0, NULL, 0, - NULL, NULL, NULL); - ok( hr == E_INVALIDARG, "(NULL,&psc,NULL,0,0,0,NULL,), expected E_INVALIDARG, " - "got %08x\n", hr); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - - /* hdc is required for this one rather than the usual optional */ - psc = NULL; - hr = ScriptTextOut(NULL, &psc, 0, 0, 0, NULL, &pItem[0].a, NULL, 0, pwOutGlyphs1, pcGlyphs, - piAdvance, NULL, pGoffset); - ok( hr == E_INVALIDARG, "(NULL,&psc,), expected E_INVALIDARG, got %08x\n", hr); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - - /* Set that it returns 0 status */ - hr = ScriptTextOut(hdc, &psc, 0, 0, 0, NULL, &pItem[0].a, NULL, 0, pwOutGlyphs1, pcGlyphs, - piAdvance, NULL, pGoffset); - ok (hr == 0, "ScriptTextOut should return 0 not (%08x)\n", hr); - - /* Test Rect Rgn is acceptable */ - rect.top = 10; - rect.bottom = 20; - rect.left = 10; - rect.right = 40; - hr = ScriptTextOut(hdc, &psc, 0, 0, 0, &rect, &pItem[0].a, NULL, 0, pwOutGlyphs1, pcGlyphs, - piAdvance, NULL, pGoffset); - ok (hr == 0, "ScriptTextOut should return 0 not (%08x)\n", hr); - - iCP = 1; - hr = ScriptCPtoX(iCP, fTrailing, cChars, pcGlyphs, (const WORD *) &pwLogClust, - (const SCRIPT_VISATTR *) &psva, (const int *)&piAdvance, &pItem[0].a, &piX); - ok(hr == S_OK, "ScriptCPtoX Stub should return S_OK not %08x\n", hr); - - psla = (SCRIPT_LOGATTR *)&sla; - hr = ScriptBreak(TestItem1, cChars, &pItem[0].a, psla); - ok(hr == S_OK, "ScriptBreak Stub should return S_OK not %08x\n", hr); - - /* Clean up and go */ - ScriptFreeCache(&psc); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - } - } -} - -static void test_ScriptTextOut2(HDC hdc) -{ -/* Intent is to validate that the HDC passed into ScriptTextOut is - * used instead of the (possibly) invalid cached one - */ - HRESULT hr; - - HDC hdc1, hdc2; - int cInChars; - int cMaxItems; - SCRIPT_ITEM pItem[255]; - int pcItems; - WCHAR TestItem1[] = {'T', 'e', 's', 't', 'a', 0}; - - SCRIPT_CACHE psc; - int cChars; - int cMaxGlyphs; - unsigned short pwOutGlyphs1[256]; - WORD pwLogClust[256]; - SCRIPT_VISATTR psva[256]; - int pcGlyphs; - int piAdvance[256]; - GOFFSET pGoffset[256]; - ABC pABC[256]; - - /* Create an extra DC that will be used until the ScriptTextOut */ - hdc1 = CreateCompatibleDC(hdc); - ok (hdc1 != 0, "CreateCompatibleDC failed to create a DC\n"); - hdc2 = CreateCompatibleDC(hdc); - ok (hdc2 != 0, "CreateCompatibleDC failed to create a DC\n"); - - /* This is a valid test that will cause parsing to take place */ - cInChars = 5; - cMaxItems = 255; - hr = ScriptItemize(TestItem1, cInChars, cMaxItems, NULL, NULL, pItem, &pcItems); - ok (hr == 0, "ScriptItemize should return 0, returned %08x\n", hr); - /* This test is for the interim operation of ScriptItemize where only one SCRIPT_ITEM is * - * returned. */ - ok (pcItems > 0, "The number of SCRIPT_ITEMS should be greater than 0\n"); - if (pcItems > 0) - ok (pItem[0].iCharPos == 0 && pItem[1].iCharPos == cInChars, - "Start pos not = 0 (%d) or end pos not = %d (%d)\n", - pItem[0].iCharPos, cInChars, pItem[1].iCharPos); - - /* It would appear that we have a valid SCRIPT_ANALYSIS and can continue - * ie. ScriptItemize has succeeded and that pItem has been set */ - cInChars = 5; - cMaxItems = 255; - if (hr == 0) { - psc = NULL; /* must be null on first call */ - cChars = cInChars; - cMaxGlyphs = cInChars; - cMaxGlyphs = 256; - hr = ScriptShape(hdc2, &psc, TestItem1, cChars, - cMaxGlyphs, &pItem[0].a, - pwOutGlyphs1, pwLogClust, psva, &pcGlyphs); - ok (hr == 0, "ScriptShape should return 0 not (%08x)\n", hr); - ok (psc != NULL, "psc should not be null and have SCRIPT_CACHE buffer address\n"); - ok (pcGlyphs == cChars, "Chars in (%d) should equal Glyphs out (%d)\n", cChars, pcGlyphs); - if (hr ==0) { - /* Note hdc is needed as glyph info is not yet in psc */ - hr = ScriptPlace(hdc2, &psc, pwOutGlyphs1, pcGlyphs, psva, &pItem[0].a, piAdvance, - pGoffset, pABC); - ok (hr == 0, "Should return 0 not (%08x)\n", hr); - - /* key part!!! cached dc is being deleted */ - hr = DeleteDC(hdc2); - ok(hr == 1, "DeleteDC should return 1 not %08x\n", hr); - - /* At this point the cached hdc (hdc2) has been destroyed, - * however, we are passing in a *real* hdc (the original hdc). - * The text should be written to that DC - */ - hr = ScriptTextOut(hdc1, &psc, 0, 0, 0, NULL, &pItem[0].a, NULL, 0, pwOutGlyphs1, pcGlyphs, - piAdvance, NULL, pGoffset); - ok (hr == 0, "ScriptTextOut should return 0 not (%08x)\n", hr); - ok (psc != NULL, "psc should not be null and have SCRIPT_CACHE buffer address\n"); - - DeleteDC(hdc1); - - /* Clean up and go */ - ScriptFreeCache(&psc); - ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); - } - } -} - -static void test_ScriptXtoX(void) -/**************************************************************************************** - * This routine tests the ScriptXtoCP and ScriptCPtoX functions using static variables * - ****************************************************************************************/ -{ - int iX, iCP; - int cChars; - int cGlyphs; - WORD pwLogClust[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - SCRIPT_VISATTR psva[10]; - int piAdvance[10] = {200, 190, 210, 180, 170, 204, 189, 195, 212, 203}; - SCRIPT_ANALYSIS psa; - int piCP, piX; - int piTrailing; - BOOL fTrailing; - HRESULT hr; - - iX = -1; - cChars = 10; - cGlyphs = 10; - hr = ScriptXtoCP(iX, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piCP, &piTrailing); - ok(hr == S_OK, "ScriptXtoCP should return S_OK not %08x\n", hr); - if (piTrailing) - ok(piCP == -1, "Negative iX should return piCP=-1 not %d\n", piCP); - else /* win2k3 */ - ok(piCP == 10, "Negative iX should return piCP=10 not %d\n", piCP); - - iX = 1954; - cChars = 10; - cGlyphs = 10; - hr = ScriptXtoCP(iX, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piCP, &piTrailing); - ok(hr == S_OK, "ScriptXtoCP should return S_OK not %08x\n", hr); - if (piTrailing) /* win2k3 */ - ok(piCP == -1, "Negative iX should return piCP=-1 not %d\n", piCP); - else - ok(piCP == 10, "Negative iX should return piCP=10 not %d\n", piCP); - - iX = 779; - cChars = 10; - cGlyphs = 10; - hr = ScriptXtoCP(iX, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piCP, &piTrailing); - ok(hr == S_OK, "ScriptXtoCP should return S_OK not %08x\n", hr); - ok(piCP == 3 || - piCP == -1, /* win2k3 */ - "iX=%d should return piCP=3 or piCP=-1 not %d\n", iX, piCP); - ok(piTrailing == 1, "iX=%d should return piTrailing=1 not %d\n", iX, piTrailing); - - iX = 780; - cChars = 10; - cGlyphs = 10; - hr = ScriptXtoCP(iX, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piCP, &piTrailing); - ok(hr == S_OK, "ScriptXtoCP should return S_OK not %08x\n", hr); - ok(piCP == 3 || - piCP == -1, /* win2k3 */ - "iX=%d should return piCP=3 or piCP=-1 not %d\n", iX, piCP); - ok(piTrailing == 1, "iX=%d should return piTrailing=1 not %d\n", iX, piTrailing); - - iX = 868; - cChars = 10; - cGlyphs = 10; - hr = ScriptXtoCP(iX, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piCP, &piTrailing); - ok(hr == S_OK, "ScriptXtoCP should return S_OK not %08x\n", hr); - ok(piCP == 4 || - piCP == -1, /* win2k3 */ - "iX=%d should return piCP=4 or piCP=-1 not %d\n", iX, piCP); - - iX = 0; - cChars = 10; - cGlyphs = 10; - hr = ScriptXtoCP(iX, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piCP, &piTrailing); - ok(hr == S_OK, "ScriptXtoCP should return S_OK not %08x\n", hr); - ok(piCP == 0 || - piCP == 10, /* win2k3 */ - "iX=%d should return piCP=0 piCP=10 not %d\n", iX, piCP); - - iX = 195; - cChars = 10; - cGlyphs = 10; - hr = ScriptXtoCP(iX, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piCP, &piTrailing); - ok(hr == S_OK, "ScriptXtoCP should return S_OK not %08x\n", hr); - ok(piCP == 0, "iX=%d should return piCP=0 not %d\n", iX, piCP); - - iX = 196; - cChars = 10; - cGlyphs = 10; - hr = ScriptXtoCP(iX, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piCP, &piTrailing); - ok(hr == S_OK, "ScriptXtoCP should return S_OK not %08x\n", hr); - ok(piCP == 1 || - piCP == 0, /* win2k3 */ - "iX=%d should return piCP=1 or piCP=0 not %d\n", iX, piCP); - - iCP=5; - fTrailing = FALSE; - cChars = 10; - cGlyphs = 10; - hr = ScriptCPtoX(iCP, fTrailing, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piX); - ok(hr == S_OK, "ScriptCPtoX should return S_OK not %08x\n", hr); - ok(piX == 976 || - piX == 100, /* win2k3 */ - "iCP=%d should return piX=976 or piX=100 not %d\n", iCP, piX); - - iCP=5; - fTrailing = TRUE; - cChars = 10; - cGlyphs = 10; - hr = ScriptCPtoX(iCP, fTrailing, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piX); - ok(hr == S_OK, "ScriptCPtoX should return S_OK not %08x\n", hr); - ok(piX == 1171 || - piX == 80, /* win2k3 */ - "iCP=%d should return piX=1171 or piX=80 not %d\n", iCP, piX); - - iCP=6; - fTrailing = FALSE; - cChars = 10; - cGlyphs = 10; - hr = ScriptCPtoX(iCP, fTrailing, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piX); - ok(hr == S_OK, "ScriptCPtoX should return S_OK not %08x\n", hr); - ok(piX == 1171 || - piX == 80, /* win2k3 */ - "iCP=%d should return piX=1171 or piX=80 not %d\n", iCP, piX); - - iCP=11; - fTrailing = FALSE; - cChars = 10; - cGlyphs = 10; - hr = ScriptCPtoX(iCP, fTrailing, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piX); - ok(hr == S_OK, "ScriptCPtoX should return S_OK not %08x\n", hr); - ok(piX == 1953 || - piX == 0, /* win2k3 */ - "iCP=%d should return piX=1953 or piX=0 not %d\n", iCP, piX); - - iCP=11; - fTrailing = TRUE; - cChars = 10; - cGlyphs = 10; - hr = ScriptCPtoX(iCP, fTrailing, cChars, cGlyphs, pwLogClust, psva, piAdvance, &psa, &piX); - ok(hr == S_OK, "ScriptCPtoX should return S_OK not %08x\n", hr); - ok(piX == 1953 || - piX == 0, /* win2k3 */ - "iCP=%d should return piX=1953 or piX=0 not %d\n", iCP, piX); -} - -static void test_ScriptString(HDC hdc) -{ -/******************************************************************************************* - * - * This set of tests are for the string functions of uniscribe. The ScriptStringAnalyse - * function allocates memory pointed to by the SCRIPT_STRING_ANALYSIS ssa pointer. This - * memory if freed by ScriptStringFree. There needs to be a valid hdc for this as - * ScriptStringAnalyse calls ScriptSItemize, ScriptShape and ScriptPlace which require it. - * - */ - - HRESULT hr; - WCHAR teststr[] = {'T','e','s','t','1',' ','a','2','b','3', '\0'}; - int len = (sizeof(teststr) / sizeof(WCHAR)) - 1; - int Glyphs = len * 2 + 16; - int Charset; - DWORD Flags = SSA_GLYPHS; - int ReqWidth = 100; - SCRIPT_CONTROL Control; - SCRIPT_STATE State; - const int Dx[5] = {10, 10, 10, 10, 10}; - SCRIPT_TABDEF Tabdef; - const BYTE InClass = 0; - SCRIPT_STRING_ANALYSIS ssa = NULL; - - int X = 10; - int Y = 100; - UINT Options = 0; - const RECT rc = {0, 50, 100, 100}; - int MinSel = 0; - int MaxSel = 0; - BOOL Disabled = FALSE; - const int *clip_len; - int i; - UINT *order; - - - Charset = -1; /* this flag indicates unicode input */ - /* Test without hdc to get E_PENDING */ - hr = ScriptStringAnalyse( NULL, teststr, len, Glyphs, Charset, Flags, - ReqWidth, &Control, &State, Dx, &Tabdef, - &InClass, &ssa); - ok(hr == E_PENDING, "ScriptStringAnalyse Stub should return E_PENDING not %08x\n", hr); - - /* test with hdc, this should be a valid test */ - hr = ScriptStringAnalyse( hdc, teststr, len, Glyphs, Charset, Flags, - ReqWidth, &Control, &State, Dx, &Tabdef, - &InClass, &ssa); - ok(hr == S_OK, "ScriptStringAnalyse should return S_OK not %08x\n", hr); - ScriptStringFree(&ssa); - - /* test makes sure that a call with a valid pssa still works */ - hr = ScriptStringAnalyse( hdc, teststr, len, Glyphs, Charset, Flags, - ReqWidth, &Control, &State, Dx, &Tabdef, - &InClass, &ssa); - ok(hr == S_OK, "ScriptStringAnalyse should return S_OK not %08x\n", hr); - ok(ssa != NULL, "ScriptStringAnalyse pssa should not be NULL\n"); - - if (hr == S_OK) - { - hr = ScriptStringOut(ssa, X, Y, Options, &rc, MinSel, MaxSel, Disabled); - ok(hr == S_OK, "ScriptStringOut should return S_OK not %08x\n", hr); - } - - clip_len = ScriptString_pcOutChars(ssa); - ok(*clip_len == len, "ScriptString_pcOutChars failed, got %d, expected %d\n", *clip_len, len); - - order = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *clip_len * sizeof(UINT)); - hr = ScriptStringGetOrder(ssa, order); - ok(hr == S_OK, "ScriptStringGetOrder failed, got %08x, expected S_OK\n", hr); - - for (i = 0; i < *clip_len; i++) ok(order[i] == i, "%d: got %d expected %d\n", i, order[i], i); - HeapFree(GetProcessHeap(), 0, order); - - hr = ScriptStringFree(&ssa); - ok(hr == S_OK, "ScriptStringFree should return S_OK not %08x\n", hr); -} - -static void test_ScriptStringXtoCP_CPtoX(HDC hdc) -{ -/***************************************************************************************** - * - * This test is for the ScriptStringXtoCP and ScriptStringXtoCP functions. Due to the - * nature of the fonts between Windows and Wine, the test is implemented by generating - * values using one one function then checking the output of the second. In this way - * the validity of the functions is established using Windows as a base and confirming - * similar behaviour in wine. - */ - - HRESULT hr; - WCHAR teststr1[] = {'T', 'e', 's', 't', 'e', '1', '2', ' ', 'a', '\0'}; - void *String = (WCHAR *) &teststr1; /* ScriptStringAnalysis needs void */ - int String_len = (sizeof(teststr1)/sizeof(WCHAR))-1; - int Glyphs = String_len * 2 + 16; /* size of buffer as recommended */ - int Charset = -1; /* unicode */ - DWORD Flags = SSA_GLYPHS; - int ReqWidth = 100; - SCRIPT_CONTROL Control; - SCRIPT_STATE State; - SCRIPT_TABDEF Tabdef; - const BYTE InClass = 0; - SCRIPT_STRING_ANALYSIS ssa = NULL; - - int Ch; /* Character position in string */ - int iTrailing; - int Cp; /* Character position in string */ - int X; - BOOL fTrailing; - - /* Test with hdc, this should be a valid test - * Here we generate an SCRIPT_STRING_ANALYSIS that will be used as input to the - * following character positions to X and X to character position functions. - */ - hr = ScriptStringAnalyse( hdc, String, String_len, Glyphs, Charset, Flags, - ReqWidth, &Control, &State, NULL, &Tabdef, - &InClass, &ssa); - ok(hr == S_OK || - hr == E_INVALIDARG, /* NT */ - "ScriptStringAnalyse should return S_OK or E_INVALIDARG not %08x\n", hr); - - if (hr == S_OK) - { - ok(ssa != NULL, "ScriptStringAnalyse ssa should not be NULL\n"); - - /* - * Loop to generate character positions to provide starting positions for the - * ScriptStringCPtoX and ScriptStringXtoCP functions - */ - for (Cp = 0; Cp < String_len; Cp++) - { - /* The fTrailing flag is used to indicate whether the X being returned is at - * the beginning or the end of the character. What happens here is that if - * fTrailing indicates the end of the character, ie. FALSE, then ScriptStringXtoCP - * returns the beginning of the next character and iTrailing is FALSE. So for this - * loop iTrailing will be FALSE in both cases. - */ - fTrailing = FALSE; - hr = ScriptStringCPtoX(ssa, Cp, fTrailing, &X); - ok(hr == S_OK, "ScriptStringCPtoX should return S_OK not %08x\n", hr); - hr = ScriptStringXtoCP(ssa, X, &Ch, &iTrailing); - ok(hr == S_OK, "ScriptStringXtoCP should return S_OK not %08x\n", hr); - ok(Cp == Ch, "ScriptStringXtoCP should return Ch = %d not %d for X = %d\n", Cp, Ch, X); - ok(iTrailing == FALSE, "ScriptStringXtoCP should return iTrailing = 0 not %d for X = %d\n", - iTrailing, X); - fTrailing = TRUE; - hr = ScriptStringCPtoX(ssa, Cp, fTrailing, &X); - ok(hr == S_OK, "ScriptStringCPtoX should return S_OK not %08x\n", hr); - hr = ScriptStringXtoCP(ssa, X, &Ch, &iTrailing); - ok(hr == S_OK, "ScriptStringXtoCP should return S_OK not %08x\n", hr); - - /* - * Check that character position returned by ScriptStringXtoCP in Ch matches the - * one input to ScriptStringCPtoX. This means that the Cp to X position and back - * again works - */ - ok(Cp + 1 == Ch, "ScriptStringXtoCP should return Ch = %d not %d for X = %d\n", Cp + 1, Ch, X); - ok(iTrailing == FALSE, "ScriptStringXtoCP should return iTrailing = 0 not %d for X = %d\n", - iTrailing, X); - } - /* - * This test is to check that if the X position is just inside the trailing edge of the - * character then iTrailing will indicate the trailing edge, ie. TRUE - */ - fTrailing = TRUE; - Cp = 3; - hr = ScriptStringCPtoX(ssa, Cp, fTrailing, &X); - ok(hr == S_OK, "ScriptStringCPtoX should return S_OK not %08x\n", hr); - X--; /* put X just inside the trailing edge */ - hr = ScriptStringXtoCP(ssa, X, &Ch, &iTrailing); - ok(hr == S_OK, "ScriptStringXtoCP should return S_OK not %08x\n", hr); - ok(Cp == Ch, "ScriptStringXtoCP should return Ch = %d not %d for X = %d\n", Cp, Ch, X); - ok(iTrailing == TRUE, "ScriptStringXtoCP should return iTrailing = 1 not %d for X = %d\n", - iTrailing, X); - - /* - * This test is to check that if the X position is just outside the trailing edge of the - * character then iTrailing will indicate the leading edge, ie. FALSE, and Ch will indicate - * the next character, ie. Cp + 1 - */ - fTrailing = TRUE; - Cp = 3; - hr = ScriptStringCPtoX(ssa, Cp, fTrailing, &X); - ok(hr == S_OK, "ScriptStringCPtoX should return S_OK not %08x\n", hr); - X++; /* put X just outside the trailing edge */ - hr = ScriptStringXtoCP(ssa, X, &Ch, &iTrailing); - ok(hr == S_OK, "ScriptStringXtoCP should return S_OK not %08x\n", hr); - ok(Cp + 1 == Ch, "ScriptStringXtoCP should return Ch = %d not %d for X = %d\n", Cp + 1, Ch, X); - ok(iTrailing == FALSE, "ScriptStringXtoCP should return iTrailing = 0 not %d for X = %d\n", - iTrailing, X); - - /* - * This test is to check that if the X position is just outside the leading edge of the - * character then iTrailing will indicate the trailing edge, ie. TRUE, and Ch will indicate - * the next character down , ie. Cp - 1 - */ - fTrailing = FALSE; - Cp = 3; - hr = ScriptStringCPtoX(ssa, Cp, fTrailing, &X); - ok(hr == S_OK, "ScriptStringCPtoX should return S_OK not %08x\n", hr); - X--; /* put X just outside the leading edge */ - hr = ScriptStringXtoCP(ssa, X, &Ch, &iTrailing); - ok(hr == S_OK, "ScriptStringXtoCP should return S_OK not %08x\n", hr); - ok(Cp - 1 == Ch, "ScriptStringXtoCP should return Ch = %d not %d for X = %d\n", Cp - 1, Ch, X); - ok(iTrailing == TRUE, "ScriptStringXtoCP should return iTrailing = 1 not %d for X = %d\n", - iTrailing, X); - - /* - * Cleanup the SSA for the next round of tests - */ - hr = ScriptStringFree(&ssa); - ok(hr == S_OK, "ScriptStringFree should return S_OK not %08x\n", hr); - - /* - * Test to see that exceeding the number of chars returns E_INVALIDARG. First - * generate an SSA for the subsequent tests. - */ - hr = ScriptStringAnalyse( hdc, String, String_len, Glyphs, Charset, Flags, - ReqWidth, &Control, &State, NULL, &Tabdef, - &InClass, &ssa); - ok(hr == S_OK, "ScriptStringAnalyse should return S_OK not %08x\n", hr); - - /* - * When ScriptStringCPtoX is called with a character position Cp that exceeds the - * string length, return E_INVALIDARG. This also invalidates the ssa so a - * ScriptStringFree should also fail. - */ - fTrailing = FALSE; - Cp = String_len + 1; - hr = ScriptStringCPtoX(ssa, Cp, fTrailing, &X); - ok(hr == E_INVALIDARG, "ScriptStringCPtoX should return E_INVALIDARG not %08x\n", hr); - - hr = ScriptStringFree(&ssa); - /* - * ScriptStringCPtoX should free ssa, hence ScriptStringFree should fail - */ - ok(hr == E_INVALIDARG || - hr == E_FAIL, /* win2k3 */ - "ScriptStringFree should return E_INVALIDARG or E_FAIL not %08x\n", hr); - } -} - -static void test_ScriptCacheGetHeight(HDC hdc) -{ - HRESULT hr; - SCRIPT_CACHE sc = NULL; - LONG height; - - hr = ScriptCacheGetHeight(NULL, NULL, NULL); - ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got 0x%08x\n", hr); - - hr = ScriptCacheGetHeight(NULL, &sc, NULL); - ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got 0x%08x\n", hr); - - hr = ScriptCacheGetHeight(NULL, &sc, &height); - ok(hr == E_PENDING, "expected E_PENDING, got 0x%08x\n", hr); - - height = 0; - - hr = ScriptCacheGetHeight(hdc, &sc, &height); - ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr); - ok(height > 0, "expected height > 0\n"); - - ScriptFreeCache(&sc); -} - -static void test_ScriptGetGlyphABCWidth(HDC hdc) -{ - HRESULT hr; - SCRIPT_CACHE sc = NULL; - ABC abc; - - hr = ScriptGetGlyphABCWidth(NULL, NULL, 'a', NULL); - ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got 0x%08x\n", hr); - - hr = ScriptGetGlyphABCWidth(NULL, &sc, 'a', NULL); - ok(hr == E_PENDING, "expected E_PENDING, got 0x%08x\n", hr); - - if (0) { /* crashes on WinXP */ - hr = ScriptGetGlyphABCWidth(hdc, &sc, 'a', NULL); - ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got 0x%08x\n", hr); - } - - hr = ScriptGetGlyphABCWidth(hdc, &sc, 'a', &abc); - ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr); - - ScriptFreeCache(&sc); -} - -static void test_ScriptLayout(void) -{ - HRESULT hr; - static const BYTE levels[][5] = - { - { 0, 0, 0, 0, 0 }, - { 1, 1, 1, 1, 1 }, - { 2, 2, 2, 2, 2 }, - { 3, 3, 3, 3, 3 }, - }; - static const int expect[][5] = - { - { 0, 1, 2, 3, 4 }, - { 4, 3, 2, 1, 0 }, - { 0, 1, 2, 3, 4 }, - { 4, 3, 2, 1, 0 } - }; - int i, j, vistolog[sizeof(levels[0])], logtovis[sizeof(levels[0])]; - - hr = ScriptLayout(sizeof(levels[0]), NULL, vistolog, logtovis); - ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got 0x%08x\n", hr); - - hr = ScriptLayout(sizeof(levels[0]), levels[0], NULL, NULL); - ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got 0x%08x\n", hr); - - for (i = 0; i < sizeof(levels)/sizeof(levels[0]); i++) - { - hr = ScriptLayout(sizeof(levels[0]), levels[i], vistolog, logtovis); - ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr); - - for (j = 0; j < sizeof(levels[i]); j++) - { - ok(expect[i][j] == vistolog[j], - "failure: levels[%d][%d] = %d, vistolog[%d] = %d\n", - i, j, levels[i][j], j, vistolog[j] ); - } - - for (j = 0; j < sizeof(levels[i]); j++) - { - ok(expect[i][j] == logtovis[j], - "failure: levels[%d][%d] = %d, logtovis[%d] = %d\n", - i, j, levels[i][j], j, logtovis[j] ); - } - } -} - -static const struct -{ - LGRPID group; - LCID lcid; - SCRIPT_DIGITSUBSTITUTE sds; - DWORD uDefaultLanguage; - DWORD fContextDigits; - WORD fDigitSubstitute; -} -subst_data[] = -{ - { 0x01, 0x00403, { 9, 3, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00406, { 9, 6, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00407, { 9, 7, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00409, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0040a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0040b, { 9, 11, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0040c, { 9, 12, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0040f, { 9, 15, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00410, { 9, 16, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00413, { 9, 19, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00414, { 9, 20, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00416, { 9, 22, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0041d, { 9, 29, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00421, { 9, 33, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0042d, { 9, 45, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00432, { 9, 50, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00434, { 9, 52, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00435, { 9, 53, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00436, { 9, 54, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00438, { 9, 56, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0043a, { 9, 58, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0043b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0043e, { 9, 62, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00441, { 9, 65, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00452, { 9, 82, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00456, { 9, 86, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0046b, { 9, 107, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0046c, { 9, 108, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00481, { 9, 129, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00807, { 9, 7, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00809, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0080a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0080c, { 9, 12, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00810, { 9, 16, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00813, { 9, 19, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00814, { 9, 20, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00816, { 9, 22, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0081d, { 9, 29, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0083b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0083e, { 9, 62, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0086b, { 9, 107, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00c07, { 9, 7, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00c09, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00c0a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00c0c, { 9, 12, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00c3b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x00c6b, { 9, 107, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x01007, { 9, 7, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x01009, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0100a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0100c, { 9, 12, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0103b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x01407, { 9, 7, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x01409, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0140a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0140c, { 9, 12, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0143b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x01809, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0180a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0180c, { 9, 12, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0183b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x01c09, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x01c0a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x01c3b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x02009, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0200a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0203b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x02409, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0240a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0243b, { 9, 59, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x02809, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0280a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x02c09, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x02c0a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x03009, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0300a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x03409, { 9, 9, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0340a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0380a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x03c0a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0400a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0440a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0480a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x04c0a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x0500a, { 9, 10, 1, 0 }, 9, 0, 0 }, - { 0x01, 0x10407, { 9, 7, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x00405, { 9, 5, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x0040e, { 9, 14, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x00415, { 9, 21, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x00418, { 9, 24, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x0041a, { 9, 26, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x0041b, { 9, 27, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x0041c, { 9, 28, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x00424, { 9, 36, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x0081a, { 9, 26, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x0101a, { 9, 26, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x0141a, { 9, 26, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x0181a, { 9, 26, 1, 0 }, 9, 0, 0 }, - { 0x02, 0x1040e, { 9, 14, 1, 0 }, 9, 0, 0 }, - { 0x03, 0x00425, { 9, 37, 1, 0 }, 9, 0, 0 }, - { 0x03, 0x00426, { 9, 38, 1, 0 }, 9, 0, 0 }, - { 0x03, 0x00427, { 9, 39, 1, 0 }, 9, 0, 0 }, - { 0x04, 0x00408, { 9, 8, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00402, { 9, 2, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00419, { 9, 25, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00422, { 9, 34, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00423, { 9, 35, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x0042f, { 9, 47, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x0043f, { 9, 63, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00440, { 9, 64, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00444, { 9, 68, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00450, { 9, 80, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x0082c, { 9, 44, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00843, { 9, 67, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x00c1a, { 9, 26, 1, 0 }, 9, 0, 0 }, - { 0x05, 0x01c1a, { 9, 26, 1, 0 }, 9, 0, 0 }, - { 0x06, 0x0041f, { 9, 31, 1, 0 }, 9, 0, 0 }, - { 0x06, 0x0042c, { 9, 44, 1, 0 }, 9, 0, 0 }, - { 0x06, 0x00443, { 9, 67, 1, 0 }, 9, 0, 0 }, - { 0x07, 0x00411, { 9, 17, 1, 0 }, 9, 0, 0 }, - { 0x08, 0x00412, { 9, 18, 1, 0 }, 9, 0, 0 }, - { 0x09, 0x00404, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x09, 0x00c04, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x09, 0x01404, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x09, 0x21404, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x09, 0x30404, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x0a, 0x00804, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x0a, 0x01004, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x0a, 0x20804, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x0a, 0x21004, { 9, 4, 1, 0 }, 9, 0, 0 }, - { 0x0b, 0x0041e, { 9, 30, 1, 0 }, 9, 0, 0 }, - { 0x0c, 0x0040d, { 9, 13, 1, 0 }, 9, 0, 0 }, - { 0x0d, 0x00401, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x00420, { 9, 32, 1, 0 }, 9, 0, 0 }, - { 0x0d, 0x00429, { 41, 41, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x0045a, { 9, 90, 1, 0 }, 9, 0, 0 }, - { 0x0d, 0x00465, { 9, 101, 1, 0 }, 9, 0, 0 }, - { 0x0d, 0x00801, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x00c01, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x01001, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x01401, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x01801, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x01c01, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x02001, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x02401, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x02801, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x02c01, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x03001, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x03401, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x03801, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x03c01, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0d, 0x04001, { 1, 1, 0, 0 }, 9, 0, 0 }, - { 0x0e, 0x0042a, { 9, 42, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x00439, { 9, 57, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x00446, { 9, 70, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x00447, { 9, 71, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x00449, { 9, 73, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x0044a, { 9, 74, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x0044b, { 9, 75, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x0044e, { 9, 78, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x0044f, { 9, 79, 1, 0 }, 9, 0, 0 }, - { 0x0f, 0x00457, { 9, 87, 1, 0 }, 9, 0, 0 }, - { 0x10, 0x00437, { 9, 55, 1, 0 }, 9, 0, 0 }, - { 0x10, 0x10437, { 9, 55, 1, 0 }, 9, 0, 0 }, - { 0x11, 0x0042b, { 9, 43, 1, 0 }, 9, 0, 0 } -}; - -static BOOL CALLBACK enum_proc(LGRPID group, LCID lcid, LPSTR locale, LONG_PTR lparam) -{ - HRESULT hr; - SCRIPT_DIGITSUBSTITUTE sds; - SCRIPT_CONTROL sc; - SCRIPT_STATE ss; - LCID lcid_old; - unsigned int i; - - if (!IsValidLocale(lcid, LCID_INSTALLED)) return TRUE; - - memset(&sds, 0, sizeof(sds)); - memset(&sc, 0, sizeof(sc)); - memset(&ss, 0, sizeof(ss)); - - lcid_old = GetThreadLocale(); - if (!SetThreadLocale(lcid)) return TRUE; - - hr = ScriptRecordDigitSubstitution(lcid, &sds); - ok(hr == S_OK, "ScriptRecordDigitSubstitution failed: 0x%08x\n", hr); - - hr = ScriptApplyDigitSubstitution(&sds, &sc, &ss); - ok(hr == S_OK, "ScriptApplyDigitSubstitution failed: 0x%08x\n", hr); - - for (i = 0; i < sizeof(subst_data)/sizeof(subst_data[0]); i++) - { - if (group == subst_data[i].group && lcid == subst_data[i].lcid) - { - ok(!memcmp(&sds, &subst_data[i].sds, sizeof(sds)), - "substitution data does not match\n"); - - ok(sc.uDefaultLanguage == subst_data[i].uDefaultLanguage, - "sc.uDefaultLanguage does not match\n"); - ok(sc.fContextDigits == subst_data[i].fContextDigits, - "sc.fContextDigits does not match\n"); - ok(ss.fDigitSubstitute == subst_data[i].fDigitSubstitute, - "ss.fDigitSubstitute does not match\n"); - } - } - SetThreadLocale(lcid_old); - return TRUE; -} - -static void test_digit_substitution(void) -{ - BOOL ret; - unsigned int i; - static const LGRPID groups[] = - { - LGRPID_WESTERN_EUROPE, - LGRPID_CENTRAL_EUROPE, - LGRPID_BALTIC, - LGRPID_GREEK, - LGRPID_CYRILLIC, - LGRPID_TURKISH, - LGRPID_JAPANESE, - LGRPID_KOREAN, - LGRPID_TRADITIONAL_CHINESE, - LGRPID_SIMPLIFIED_CHINESE, - LGRPID_THAI, - LGRPID_HEBREW, - LGRPID_ARABIC, - LGRPID_VIETNAMESE, - LGRPID_INDIC, - LGRPID_GEORGIAN, - LGRPID_ARMENIAN - }; - HMODULE hKernel32; - static BOOL (WINAPI * pEnumLanguageGroupLocalesA)(LANGGROUPLOCALE_ENUMPROC,LGRPID,DWORD,LONG_PTR); - - hKernel32 = GetModuleHandleA("kernel32.dll"); - pEnumLanguageGroupLocalesA = (void*)GetProcAddress(hKernel32, "EnumLanguageGroupLocalesA"); - - if (!pEnumLanguageGroupLocalesA) - { - trace("EnumLanguageGroupLocalesA not available on this platform\n"); - return; - } - - for (i = 0; i < sizeof(groups)/sizeof(groups[0]); i++) - { - ret = pEnumLanguageGroupLocalesA(enum_proc, groups[i], 0, 0); - ok(ret, "EnumLanguageGroupLocalesA failed unexpectedly: %u\n", GetLastError()); - } -} - -static void test_ScriptGetProperties(void) -{ - const SCRIPT_PROPERTIES **props; - HRESULT hr; - int num; - - hr = ScriptGetProperties(NULL, NULL); - ok(hr == E_INVALIDARG, "ScriptGetProperties succeeded\n"); - - hr = ScriptGetProperties(NULL, &num); - ok(hr == S_OK, "ScriptGetProperties failed: 0x%08x\n", hr); - - hr = ScriptGetProperties(&props, NULL); - ok(hr == S_OK, "ScriptGetProperties failed: 0x%08x\n", hr); - - hr = ScriptGetProperties(&props, &num); - ok(hr == S_OK, "ScriptGetProperties failed: 0x%08x\n", hr); -} - -START_TEST(usp10) -{ - HWND hwnd; - HDC hdc; - LOGFONTA lf; - HFONT hfont; - - unsigned short pwOutGlyphs[256]; - - /* We need a valid HDC to drive a lot of Script functions which requires the following * - * to set up for the tests. */ - hwnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100, - 0, 0, 0, NULL); - assert(hwnd != 0); - ShowWindow(hwnd, SW_SHOW); - UpdateWindow(hwnd); - - hdc = GetDC(hwnd); /* We now have a hdc */ - ok( hdc != NULL, "HDC failed to be created %p\n", hdc); - - memset(&lf, 0, sizeof(LOGFONTA)); - lstrcpyA(lf.lfFaceName, "Symbol"); - lf.lfHeight = 10; - lf.lfWeight = 3; - lf.lfWidth = 10; - - hfont = SelectObject(hdc, CreateFontIndirectA(&lf)); - - test_ScriptItemIzeShapePlace(hdc,pwOutGlyphs); - test_ScriptGetCMap(hdc, pwOutGlyphs); - test_ScriptCacheGetHeight(hdc); - test_ScriptGetGlyphABCWidth(hdc); - test_ScriptShape(hdc); - - test_ScriptGetFontProperties(hdc); - test_ScriptTextOut(hdc); - test_ScriptTextOut2(hdc); - test_ScriptXtoX(); - test_ScriptString(hdc); - test_ScriptStringXtoCP_CPtoX(hdc); - - test_ScriptLayout(); - test_digit_substitution(); - test_ScriptGetProperties(); - - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); -} diff --git a/rostests/winetests/usp10/usp10.rbuild b/rostests/winetests/usp10/usp10.rbuild deleted file mode 100644 index e49feb25b6c..00000000000 --- a/rostests/winetests/usp10/usp10.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - - . - usp10.c - testlist.c - wine - usp10 - user32 - gdi32 - kernel32 - ntdll - - diff --git a/rostests/winetests/uxtheme/system.c b/rostests/winetests/uxtheme/system.c deleted file mode 100644 index ef9c08a2522..00000000000 --- a/rostests/winetests/uxtheme/system.c +++ /dev/null @@ -1,515 +0,0 @@ -/* Unit test suite for uxtheme API functions - * - * Copyright 2006 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 - * - */ - -#include - -#include "windows.h" -#include "vfwmsgs.h" -#include "uxtheme.h" - -#include "wine/test.h" - -static HRESULT (WINAPI * pCloseThemeData)(HTHEME); -static HRESULT (WINAPI * pGetCurrentThemeName)(LPWSTR, int, LPWSTR, int, LPWSTR, int); -static HTHEME (WINAPI * pGetWindowTheme)(HWND); -static BOOL (WINAPI * pIsAppThemed)(VOID); -static BOOL (WINAPI * pIsThemeActive)(VOID); -static BOOL (WINAPI * pIsThemePartDefined)(HTHEME, int, int); -static HTHEME (WINAPI * pOpenThemeData)(HWND, LPCWSTR); -static HRESULT (WINAPI * pSetWindowTheme)(HWND, LPCWSTR, LPCWSTR); - -static HMODULE hUxtheme = 0; - -#define UXTHEME_GET_PROC(func) \ - p ## func = (void*)GetProcAddress(hUxtheme, #func); \ - if(!p ## func) { \ - trace("GetProcAddress(%s) failed\n", #func); \ - FreeLibrary(hUxtheme); \ - return FALSE; \ - } - -static BOOL InitFunctionPtrs(void) -{ - hUxtheme = LoadLibraryA("uxtheme.dll"); - if(!hUxtheme) { - trace("Could not load uxtheme.dll\n"); - return FALSE; - } - if (hUxtheme) - { - UXTHEME_GET_PROC(CloseThemeData) - UXTHEME_GET_PROC(GetCurrentThemeName) - UXTHEME_GET_PROC(GetWindowTheme) - UXTHEME_GET_PROC(IsAppThemed) - UXTHEME_GET_PROC(IsThemeActive) - UXTHEME_GET_PROC(IsThemePartDefined) - UXTHEME_GET_PROC(OpenThemeData) - UXTHEME_GET_PROC(SetWindowTheme) - } - /* The following functions should be available, if not return FALSE. The Vista functions will - * be checked (at some point in time) within the single tests if needed. All used functions for - * now are present on WinXP, W2K3 and Wine. - */ - if (!pCloseThemeData || !pGetCurrentThemeName || - !pGetWindowTheme || !pIsAppThemed || - !pIsThemeActive || !pIsThemePartDefined || - !pOpenThemeData || !pSetWindowTheme) - return FALSE; - - return TRUE; -} - -static void test_IsThemed(void) -{ - BOOL bThemeActive; - BOOL bAppThemed; - BOOL bTPDefined; - - SetLastError(0xdeadbeef); - bThemeActive = pIsThemeActive(); - trace("Theming is %s\n", (bThemeActive) ? "active" : "inactive"); - todo_wine - ok( GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got 0x%08x\n", - GetLastError()); - - /* This test is not themed */ - SetLastError(0xdeadbeef); - bAppThemed = pIsAppThemed(); - - if (bThemeActive) - todo_wine - ok( bAppThemed == FALSE, "Expected FALSE as this test executable is not (yet) themed.\n"); - else - /* Although Wine currently returns FALSE, the logic behind it is wrong. It is not a todo_wine though in the testing sense */ - ok( bAppThemed == FALSE, "Expected FALSE as this test executable is not (yet) themed.\n"); - - todo_wine - ok( GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got 0x%08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - bTPDefined = pIsThemePartDefined(NULL, 0 , 0); - ok( bTPDefined == FALSE, "Expected FALSE\n"); - ok( GetLastError() == E_HANDLE, - "Expected E_HANDLE, got 0x%08x\n", - GetLastError()); -} - -static void test_GetWindowTheme(void) -{ - HTHEME hTheme; - HWND hWnd; - BOOL bDestroyed; - - SetLastError(0xdeadbeef); - hTheme = pGetWindowTheme(NULL); - ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_HANDLE, - "Expected E_HANDLE, got 0x%08x\n", - GetLastError()); - - /* Only do the bare minimum to get a valid hwnd */ - hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL); - if (!hWnd) return; - - SetLastError(0xdeadbeef); - hTheme = pGetWindowTheme(hWnd); - ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - bDestroyed = DestroyWindow(hWnd); - if (!bDestroyed) - trace("Window %p couldn't be destroyed : 0x%08x\n", - hWnd, GetLastError()); -} - -static void test_SetWindowTheme(void) -{ - HRESULT hRes; - HWND hWnd; - BOOL bDestroyed; - - SetLastError(0xdeadbeef); - hRes = pSetWindowTheme(NULL, NULL, NULL); - todo_wine - { - ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - } - - /* Only do the bare minimum to get a valid hwnd */ - hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL); - if (!hWnd) return; - - SetLastError(0xdeadbeef); - hRes = pSetWindowTheme(hWnd, NULL, NULL); - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - bDestroyed = DestroyWindow(hWnd); - if (!bDestroyed) - trace("Window %p couldn't be destroyed : 0x%08x\n", - hWnd, GetLastError()); -} - -static void test_OpenThemeData(void) -{ - HTHEME hTheme, hTheme2; - HWND hWnd; - BOOL bThemeActive; - HRESULT hRes; - BOOL bDestroyed; - BOOL bTPDefined; - - WCHAR szInvalidClassList[] = {'D','E','A','D','B','E','E','F', 0 }; - WCHAR szButtonClassList[] = {'B','u','t','t','o','n', 0 }; - WCHAR szButtonClassList2[] = {'b','U','t','T','o','N', 0 }; - WCHAR szClassList[] = {'B','u','t','t','o','n',';','L','i','s','t','B','o','x', 0 }; - - bThemeActive = pIsThemeActive(); - - /* All NULL */ - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(NULL, NULL); - ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_POINTER, - "Expected GLE() to be E_POINTER, got 0x%08x\n", - GetLastError()); - - /* A NULL hWnd and an invalid classlist */ - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(NULL, szInvalidClassList); - ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_PROP_ID_UNSUPPORTED, - "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(NULL, szClassList); - if (bThemeActive) - { - ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); - todo_wine - ok( GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got 0x%08x\n", - GetLastError()); - } - else - { - ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_PROP_ID_UNSUPPORTED, - "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", - GetLastError()); - } - - /* Only do the bare minimum to get a valid hdc */ - hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL); - if (!hWnd) return; - - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(hWnd, NULL); - ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_POINTER, - "Expected GLE() to be E_POINTER, got 0x%08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(hWnd, szInvalidClassList); - ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_PROP_ID_UNSUPPORTED, - "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", - GetLastError()); - - if (!bThemeActive) - { - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(hWnd, szButtonClassList); - ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme); - todo_wine - ok( GetLastError() == E_PROP_ID_UNSUPPORTED, - "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", - GetLastError()); - trace("No active theme, skipping rest of OpenThemeData tests\n"); - return; - } - - /* Only do the next checks if we have an active theme */ - - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(hWnd, szButtonClassList); - ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); - todo_wine - ok( GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got 0x%08x\n", - GetLastError()); - - /* Test with bUtToN instead of Button */ - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(hWnd, szButtonClassList2); - ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); - todo_wine - ok( GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got 0x%08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - hTheme = pOpenThemeData(hWnd, szClassList); - ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n"); - todo_wine - ok( GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got 0x%08x\n", - GetLastError()); - - /* GetWindowTheme should return the last handle opened by OpenThemeData */ - SetLastError(0xdeadbeef); - hTheme2 = pGetWindowTheme(hWnd); - ok( hTheme == hTheme2, "Expected the same HTHEME handle (%p<->%p)\n", - hTheme, hTheme2); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - hRes = pCloseThemeData(hTheme); - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* Close a second time */ - SetLastError(0xdeadbeef); - hRes = pCloseThemeData(hTheme); - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* See if closing makes a difference for GetWindowTheme */ - SetLastError(0xdeadbeef); - hTheme2 = NULL; - hTheme2 = pGetWindowTheme(hWnd); - ok( hTheme == hTheme2, "Expected the same HTHEME handle (%p<->%p)\n", - hTheme, hTheme2); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - bTPDefined = pIsThemePartDefined(hTheme, 0 , 0); - todo_wine - { - ok( bTPDefined == FALSE, "Expected FALSE\n"); - ok( GetLastError() == ERROR_SUCCESS, - "Expected ERROR_SUCCESS, got 0x%08x\n", - GetLastError()); - } - - bDestroyed = DestroyWindow(hWnd); - if (!bDestroyed) - trace("Window %p couldn't be destroyed : 0x%08x\n", - hWnd, GetLastError()); -} - -static void test_GetCurrentThemeName(void) -{ - BOOL bThemeActive; - HRESULT hRes; - WCHAR currentTheme[MAX_PATH]; - WCHAR currentColor[MAX_PATH]; - WCHAR currentSize[MAX_PATH]; - - bThemeActive = pIsThemeActive(); - - /* All NULLs */ - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(NULL, 0, NULL, 0, NULL, 0); - if (bThemeActive) - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* Number of characters given is 0 */ - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(currentTheme, 0, NULL, 0, NULL, 0); - if (bThemeActive) - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* When the number of characters given is too small (not 0, see above), GetCurrentThemeName returns 0x8007007a. - * The only definition I found was in strsafe.h: - * - * #define STRSAFE_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007AL) // 0x7A = 122L = ERROR_INSUFFICIENT_BUFFER - */ - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(currentTheme, 2, NULL, 0, NULL, 0); - if (bThemeActive) - todo_wine - ok( LOWORD(hRes) == ERROR_INSUFFICIENT_BUFFER, "Expected 0x8007007A, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* The same is true if the number of characters is too small for Color and/or Size */ - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR), - currentColor, 2, - currentSize, sizeof(currentSize) / sizeof(WCHAR)); - if (bThemeActive) - todo_wine - ok( LOWORD(hRes) == ERROR_INSUFFICIENT_BUFFER, "Expected 0x8007007A, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* Given number of characters is correct */ - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR), NULL, 0, NULL, 0); - if (bThemeActive) - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* Given number of characters for the theme name is too large */ - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme), NULL, 0, NULL, 0); - if (bThemeActive) - ok( hRes == E_POINTER || hRes == S_OK, "Expected E_POINTER or S_OK, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED || - hRes == E_POINTER, /* win2k3 */ - "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* The too large case is only for the theme name, not for color name or size name */ - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR), - currentColor, sizeof(currentTheme), - currentSize, sizeof(currentSize) / sizeof(WCHAR)); - if (bThemeActive) - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR), - currentColor, sizeof(currentTheme) / sizeof(WCHAR), - currentSize, sizeof(currentSize)); - if (bThemeActive) - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - - /* Correct call */ - SetLastError(0xdeadbeef); - hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR), - currentColor, sizeof(currentColor) / sizeof(WCHAR), - currentSize, sizeof(currentSize) / sizeof(WCHAR)); - if (bThemeActive) - ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes); - else - ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); -} - -static void test_CloseThemeData(void) -{ - HRESULT hRes; - - SetLastError(0xdeadbeef); - hRes = pCloseThemeData(NULL); - ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); -} - -START_TEST(system) -{ - if(!InitFunctionPtrs()) - return; - - /* No real functional tests will be done (yet). The current tests - * only show input/return behaviour - */ - - /* IsThemeActive, IsAppThemed and IsThemePartDefined*/ - trace("Starting test_IsThemed()\n"); - test_IsThemed(); - - /* GetWindowTheme */ - trace("Starting test_GetWindowTheme()\n"); - test_GetWindowTheme(); - - /* SetWindowTheme */ - trace("Starting test_SetWindowTheme()\n"); - test_SetWindowTheme(); - - /* OpenThemeData, a bit more functional now */ - trace("Starting test_OpenThemeData()\n"); - test_OpenThemeData(); - - /* GetCurrentThemeName */ - trace("Starting test_GetCurrentThemeName()\n"); - test_GetCurrentThemeName(); - - /* CloseThemeData */ - trace("Starting test_CloseThemeData()\n"); - test_CloseThemeData(); - - FreeLibrary(hUxtheme); -} diff --git a/rostests/winetests/uxtheme/testlist.c b/rostests/winetests/uxtheme/testlist.c deleted file mode 100644 index 1b651a6f1f7..00000000000 --- a/rostests/winetests/uxtheme/testlist.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_system(void); - -const struct test winetest_testlist[] = -{ - { "system", func_system }, - { 0, 0 } -}; diff --git a/rostests/winetests/uxtheme/uxtheme.rbuild b/rostests/winetests/uxtheme/uxtheme.rbuild deleted file mode 100644 index f1c3708ca27..00000000000 --- a/rostests/winetests/uxtheme/uxtheme.rbuild +++ /dev/null @@ -1,13 +0,0 @@ - - - - - . - system.c - testlist.c - wine - user32 - kernel32 - ntdll - - diff --git a/rostests/winetests/version/info.c b/rostests/winetests/version/info.c deleted file mode 100644 index 9a6bcf4c932..00000000000 --- a/rostests/winetests/version/info.c +++ /dev/null @@ -1,571 +0,0 @@ -/* - * Copyright (C) 2004 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 - */ - -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "winver.h" -#include "wine/test.h" - -#define MY_LAST_ERROR ((DWORD)-1) -#define EXPECT_BAD_PATH__NOT_FOUND \ - ok( (ERROR_PATH_NOT_FOUND == GetLastError()) || \ - (ERROR_RESOURCE_DATA_NOT_FOUND == GetLastError()) || \ - (ERROR_FILE_NOT_FOUND == GetLastError()) || \ - (ERROR_BAD_PATHNAME == GetLastError()) || \ - (ERROR_SUCCESS == GetLastError()), \ - "Last error wrong! ERROR_RESOURCE_DATA_NOT_FOUND/ERROR_BAD_PATHNAME (98)/" \ - "ERROR_PATH_NOT_FOUND (NT4)/ERROR_FILE_NOT_FOUND (2k3) " \ - "ERROR_SUCCESS (2k) expected, got %u\n", GetLastError()); -#define EXPECT_INVALID__NOT_FOUND \ - ok( (ERROR_PATH_NOT_FOUND == GetLastError()) || \ - (ERROR_RESOURCE_DATA_NOT_FOUND == GetLastError()) || \ - (ERROR_FILE_NOT_FOUND == GetLastError()) || \ - (ERROR_INVALID_PARAMETER == GetLastError()) || \ - (ERROR_SUCCESS == GetLastError()), \ - "Last error wrong! ERROR_RESOURCE_DATA_NOT_FOUND/ERROR_INVALID_PARAMETER (98)/" \ - "ERROR_PATH_NOT_FOUND (NT4)/ERROR_FILE_NOT_FOUND (2k3) " \ - "ERROR_SUCCESS (2k) expected, got %u\n", GetLastError()); - -static void create_file(const CHAR *name) -{ - HANDLE file; - DWORD written; - - file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - ok(file != INVALID_HANDLE_VALUE, "Failure to open file %s\n", name); - WriteFile(file, name, strlen(name), &written, NULL); - WriteFile(file, "\n", strlen("\n"), &written, NULL); - CloseHandle(file); -} - -static void test_info_size(void) -{ DWORD hdl, retval; - char mypath[MAX_PATH] = ""; - - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( NULL, NULL); - ok( !retval, - "GetFileVersionInfoSizeA result wrong! 0L expected, got 0x%08x\n", - retval); - EXPECT_INVALID__NOT_FOUND; - - hdl = 0x55555555; - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( NULL, &hdl); - ok( !retval, - "GetFileVersionInfoSizeA result wrong! 0L expected, got 0x%08x\n", - retval); - EXPECT_INVALID__NOT_FOUND; - ok( hdl == 0L, - "Handle wrong! 0L expected, got 0x%08x\n", hdl); - - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( "", NULL); - ok( !retval, - "GetFileVersionInfoSizeA result wrong! 0L expected, got 0x%08x\n", - retval); - EXPECT_BAD_PATH__NOT_FOUND; - - hdl = 0x55555555; - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( "", &hdl); - ok( !retval, - "GetFileVersionInfoSizeA result wrong! 0L expected, got 0x%08x\n", - retval); - EXPECT_BAD_PATH__NOT_FOUND; - ok( hdl == 0L, - "Handle wrong! 0L expected, got 0x%08x\n", hdl); - - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( "kernel32.dll", NULL); - ok( retval, - "GetFileVersionInfoSizeA result wrong! <> 0L expected, got 0x%08x\n", - retval); - ok((NO_ERROR == GetLastError()) || (MY_LAST_ERROR == GetLastError()), - "Last error wrong! NO_ERROR/0x%08x (NT4) expected, got %u\n", - MY_LAST_ERROR, GetLastError()); - - hdl = 0x55555555; - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( "kernel32.dll", &hdl); - ok( retval, - "GetFileVersionInfoSizeA result wrong! <> 0L expected, got 0x%08x\n", - retval); - ok((NO_ERROR == GetLastError()) || (MY_LAST_ERROR == GetLastError()), - "Last error wrong! NO_ERROR/0x%08x (NT4) expected, got %u\n", - MY_LAST_ERROR, GetLastError()); - ok( hdl == 0L, - "Handle wrong! 0L expected, got 0x%08x\n", hdl); - - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( "notexist.dll", NULL); - ok( !retval, - "GetFileVersionInfoSizeA result wrong! 0L expected, got 0x%08x\n", - retval); - ok( (ERROR_FILE_NOT_FOUND == GetLastError()) || - (ERROR_RESOURCE_DATA_NOT_FOUND == GetLastError()) || - (MY_LAST_ERROR == GetLastError()) || - (ERROR_SUCCESS == GetLastError()), /* win2k */ - "Last error wrong! ERROR_FILE_NOT_FOUND/ERROR_RESOURCE_DATA_NOT_FOUND " - "(XP)/0x%08x (NT4) expected, got %u\n", MY_LAST_ERROR, GetLastError()); - - /* test a currently loaded executable */ - if(GetModuleFileNameA(NULL, mypath, MAX_PATH)) { - hdl = 0x55555555; - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( mypath, &hdl); - ok( retval, - "GetFileVersionInfoSizeA result wrong! <> 0L expected, got 0x%08x\n", - retval); - ok((NO_ERROR == GetLastError()) || (MY_LAST_ERROR == GetLastError()), - "Last error wrong! NO_ERROR/0x%08x (NT4) expected, got %u\n", - MY_LAST_ERROR, GetLastError()); - ok( hdl == 0L, - "Handle wrong! 0L expected, got 0x%08x\n", hdl); - } - else - trace("skipping GetModuleFileNameA(NULL,..) failed\n"); - - /* test a not loaded executable */ - if(GetSystemDirectoryA(mypath, MAX_PATH)) { - lstrcatA(mypath, "\\regsvr32.exe"); - - if(INVALID_FILE_ATTRIBUTES == GetFileAttributesA(mypath)) - trace("GetFileAttributesA(%s) failed\n", mypath); - else { - hdl = 0x55555555; - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( mypath, &hdl); - ok( retval, - "GetFileVersionInfoSizeA result wrong! <> 0L expected, got 0x%08x\n", - retval); - ok((NO_ERROR == GetLastError()) || (MY_LAST_ERROR == GetLastError()), - "Last error wrong! NO_ERROR/0x%08x (NT4) expected, got %u\n", - MY_LAST_ERROR, GetLastError()); - ok( hdl == 0L, - "Handle wrong! 0L expected, got 0x%08x\n", hdl); - } - } - else - trace("skipping GetModuleFileNameA(NULL,..) failed\n"); - - create_file("test.txt"); - - /* no version info */ - SetLastError(0xdeadbeef); - hdl = 0xcafe; - retval = GetFileVersionInfoSizeA("test.txt", &hdl); - ok(retval == 0, "Expected 0, got %d\n", retval); - ok(hdl == 0, "Expected 0, got %d\n", hdl); - ok(GetLastError() == ERROR_RESOURCE_DATA_NOT_FOUND || - GetLastError() == ERROR_BAD_FORMAT || /* win9x */ - GetLastError() == ERROR_SUCCESS, /* win2k */ - "Expected ERROR_RESOURCE_DATA_NOT_FOUND, got %d\n", GetLastError()); - - DeleteFileA("test.txt"); -} - -static void VersionDwordLong2String(DWORDLONG Version, LPSTR lpszVerString) -{ - WORD a, b, c, d; - - a = (WORD)(Version >> 48); - b = (WORD)((Version >> 32) & 0xffff); - c = (WORD)((Version >> 16) & 0xffff); - d = (WORD)(Version & 0xffff); - - sprintf(lpszVerString, "%d.%d.%d.%d", a, b, c, d); - - return; -} - -static void test_info(void) -{ - DWORD hdl, retval; - PVOID pVersionInfo = NULL; - BOOL boolret; - VS_FIXEDFILEINFO *pFixedVersionInfo; - UINT uiLength; - char VersionString[MAX_PATH]; - static CHAR backslash[] = "\\"; - DWORDLONG dwlVersion; - - hdl = 0x55555555; - SetLastError(MY_LAST_ERROR); - retval = GetFileVersionInfoSizeA( "kernel32.dll", &hdl); - ok( retval, - "GetFileVersionInfoSizeA result wrong! <> 0L expected, got 0x%08x\n", - retval); - ok((NO_ERROR == GetLastError()) || (MY_LAST_ERROR == GetLastError()), - "Last error wrong! NO_ERROR/0x%08x (NT4) expected, got %u\n", - MY_LAST_ERROR, GetLastError()); - ok( hdl == 0L, - "Handle wrong! 0L expected, got 0x%08x\n", hdl); - - if ( retval == 0 || hdl != 0) - return; - - pVersionInfo = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, retval ); - ok(pVersionInfo != 0, "HeapAlloc failed\n" ); - if (pVersionInfo == 0) - return; - - if (0) - { - /* this test crashes on WinNT4 - */ - boolret = GetFileVersionInfoA( "kernel32.dll", 0, retval, 0); - ok (!boolret, "GetFileVersionInfoA should have failed: GetLastError = %u\n", GetLastError()); - ok ((GetLastError() == ERROR_INVALID_DATA) || (GetLastError() == ERROR_BAD_PATHNAME) || - (GetLastError() == NO_ERROR), - "Last error wrong! ERROR_INVALID_DATA/ERROR_BAD_PATHNAME (ME)/" - "NO_ERROR (95) expected, got %u\n", - GetLastError()); - } - - boolret = GetFileVersionInfoA( "kernel32.dll", 0, retval, pVersionInfo ); - ok (boolret, "GetFileVersionInfoA failed: GetLastError = %u\n", GetLastError()); - if (!boolret) - goto cleanup; - - boolret = VerQueryValueA( pVersionInfo, backslash, (LPVOID *)&pFixedVersionInfo, &uiLength ); - ok (boolret, "VerQueryValueA failed: GetLastError = %u\n", GetLastError()); - if (!boolret) - goto cleanup; - - dwlVersion = (((DWORDLONG)pFixedVersionInfo->dwFileVersionMS) << 32) + - pFixedVersionInfo->dwFileVersionLS; - - VersionDwordLong2String(dwlVersion, VersionString); - - trace("kernel32.dll version: %s\n", VersionString); - - if (0) - { - /* this test crashes on WinNT4 - */ - boolret = VerQueryValueA( pVersionInfo, backslash, (LPVOID *)&pFixedVersionInfo, 0); - ok (boolret, "VerQueryValue failed: GetLastError = %u\n", GetLastError()); - } - -cleanup: - HeapFree( GetProcessHeap(), 0, pVersionInfo); -} - -static void test_32bit_win(void) -{ - DWORD hdlA, retvalA; - DWORD hdlW, retvalW = 0; - BOOL retA,retW; - PVOID pVersionInfoA = NULL; - PVOID pVersionInfoW = NULL; - char *pBufA; - WCHAR *pBufW; - UINT uiLengthA, uiLengthW; - char mypathA[MAX_PATH]; - WCHAR mypathW[MAX_PATH]; - char rootA[] = "\\"; - WCHAR rootW[] = { '\\', 0 }; - char varfileinfoA[] = "\\VarFileInfo\\Translation"; - WCHAR varfileinfoW[] = { '\\','V','a','r','F','i','l','e','I','n','f','o', - '\\','T','r','a','n','s','l','a','t','i','o','n', 0 }; - char WineVarFileInfoA[] = { 0x09, 0x04, 0xE4, 0x04 }; - char FileDescriptionA[] = "\\StringFileInfo\\040904E4\\FileDescription"; - WCHAR FileDescriptionW[] = { '\\','S','t','r','i','n','g','F','i','l','e','I','n','f','o', - '\\','0','4','0','9','0','4','E','4', - '\\','F','i','l','e','D','e','s','c','r','i','p','t','i','o','n', 0 }; - char WineFileDescriptionA[] = "FileDescription"; - WCHAR WineFileDescriptionW[] = { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n', 0 }; - BOOL is_unicode_enabled = TRUE; - - /* A copy from dlls/version/info.c */ - typedef struct - { - WORD wLength; - WORD wValueLength; - WORD wType; - WCHAR szKey[1]; -#if 0 /* variable length structure */ - /* DWORD aligned */ - BYTE Value[]; - /* DWORD aligned */ - VS_VERSION_INFO_STRUCT32 Children[]; -#endif - } VS_VERSION_INFO_STRUCT32; - - /* If we call GetFileVersionInfoA on a system that supports Unicode, NT/W2K/XP/W2K3 (by default) and Wine, - * the versioninfo will contain Unicode strings. - * Part of the test is to call both the A and W versions, which should have the same Version Information - * for some requests, on systems that support both calls. - */ - - /* First get the versioninfo via the W versions */ - SetLastError(0xdeadbeef); - GetModuleFileNameW(NULL, mypathW, MAX_PATH); - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - trace("GetModuleFileNameW not existing on this platform, skipping comparison between A- and W-calls\n"); - is_unicode_enabled = FALSE; - } - - if (is_unicode_enabled) - { - retvalW = GetFileVersionInfoSizeW( mypathW, &hdlW); - pVersionInfoW = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, retvalW ); - retW = GetFileVersionInfoW( mypathW, 0, retvalW, pVersionInfoW ); - } - - GetModuleFileNameA(NULL, mypathA, MAX_PATH); - retvalA = GetFileVersionInfoSizeA( mypathA, &hdlA); - pVersionInfoA = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, retvalA ); - retA = GetFileVersionInfoA( mypathA, 0, retvalA, pVersionInfoA ); - - if (is_unicode_enabled) - { - ok( retvalA == retvalW, "The size of the struct should be the same for both A/W calls, it is (%d) vs. (%d)\n", - retvalA, retvalW); - ok( !memcmp(pVersionInfoA, pVersionInfoW, retvalA), "Both structs should be the same, they aren't\n"); - } - - /* The structs on Windows are bigger than just the struct for the basic information. The total struct - * contains also an empty part, which is used for converted strings. The converted strings are a result - * of calling VerQueryValueA on a 32bit resource and calling VerQueryValueW on a 16bit resource. - * The first WORD of the structure (wLength) shows the size of the base struct. The total struct size depends - * on the Windows version: - * - * 16bits resource (numbers are from a sample app): - * - * Windows Version Retrieved with A/W wLength StructSize - * ==================================================================================== - * Win98 A 0x01B4 (436) 436 - * NT4 A/W 0x01B4 (436) 2048 ??? - * W2K/XP/W2K3 A/W 0x01B4 (436) 1536 which is (436 - sizeof(VS_FIXEDFILEINFO)) * 4 - * - * 32bits resource (numbers are from this test executable version_crosstest.exe): - * Windows Version Retrieved with A/W wLength StructSize - * ============================================================= - * Win98 A 0x01E0 (480) 848 (structure data doesn't seem correct) - * NT4 A/W 0x0350 (848) 1272 (848 * 1.5) - * W2K/XP/W2K3 A/W 0x0350 (848) 1700 which is (848 * 2) + 4 - * - * Wine will follow the implementation (eventually) of W2K/XP/W2K3 - */ - - /* Now some tests for the above (only if we are unicode enabled) */ - - if (is_unicode_enabled) - { - VS_VERSION_INFO_STRUCT32 *vvis = (VS_VERSION_INFO_STRUCT32 *)pVersionInfoW; - ok ( retvalW == ((vvis->wLength * 2) + 4) || retvalW == (vvis->wLength * 1.5), - "Structure is not of the correct size\n"); - } - - /* Although the 32bit resource structures contain Unicode strings, VerQueryValueA will always return normal strings, - * VerQueryValueW will always return Unicode ones. (That means everything returned for StringFileInfo requests). - */ - - /* Get the VS_FIXEDFILEINFO information, this must be the same for both A- and W-Calls */ - - retA = VerQueryValueA( pVersionInfoA, rootA, (LPVOID *)&pBufA, &uiLengthA ); - ok (retA, "VerQueryValueA failed: GetLastError = %u\n", GetLastError()); - ok ( uiLengthA == sizeof(VS_FIXEDFILEINFO), "Size (%d) doesn't match the size of the VS_FIXEDFILEINFO struct\n", uiLengthA); - - if (is_unicode_enabled) - { - retW = VerQueryValueW( pVersionInfoW, rootW, (LPVOID *)&pBufW, &uiLengthW ); - ok (retW, "VerQueryValueW failed: GetLastError = %u\n", GetLastError()); - ok ( uiLengthA == sizeof(VS_FIXEDFILEINFO), "Size (%d) doesn't match the size of the VS_FIXEDFILEINFO struct\n", uiLengthA); - - ok( uiLengthA == uiLengthW, "The size of VS_FIXEDFILEINFO should be the same for both A/W calls, it is (%d) vs. (%d)\n", - uiLengthA, uiLengthW); - ok( !memcmp(pBufA, pBufW, uiLengthA), "Both values should be the same, they aren't\n"); - } - - /* Get some VarFileInfo information, this must be the same for both A- and W-Calls */ - - retA = VerQueryValueA( pVersionInfoA, varfileinfoA, (LPVOID *)&pBufA, &uiLengthA ); - ok (retA, "VerQueryValueA failed: GetLastError = %u\n", GetLastError()); - ok( !memcmp(pBufA, WineVarFileInfoA, uiLengthA), "The VarFileInfo should have matched 0904e404 (non case sensitive)\n"); - - if (is_unicode_enabled) - { - retW = VerQueryValueW( pVersionInfoW, varfileinfoW, (LPVOID *)&pBufW, &uiLengthW ); - ok (retW, "VerQueryValueW failed: GetLastError = %u\n", GetLastError()); - ok( uiLengthA == uiLengthW, "The size of the VarFileInfo information should be the same for both A/W calls, it is (%d) vs. (%d)\n", - uiLengthA, uiLengthW); - ok( !memcmp(pBufA, pBufW, uiLengthA), "Both values should be the same, they aren't\n"); - } - - /* Get some StringFileInfo information, this will be ANSI for A-Calls and Unicode for W-Calls */ - - retA = VerQueryValueA( pVersionInfoA, FileDescriptionA, (LPVOID *)&pBufA, &uiLengthA ); - ok (retA, "VerQueryValueA failed: GetLastError = %u\n", GetLastError()); - ok( !lstrcmpA(WineFileDescriptionA, pBufA), "expected '%s' got '%s'\n", - WineFileDescriptionA, pBufA); - - /* Test a second time */ - retA = VerQueryValueA( pVersionInfoA, FileDescriptionA, (LPVOID *)&pBufA, &uiLengthA ); - ok (retA, "VerQueryValueA failed: GetLastError = %u\n", GetLastError()); - ok( !lstrcmpA(WineFileDescriptionA, pBufA), "expected '%s' got '%s'\n", - WineFileDescriptionA, pBufA); - - if (is_unicode_enabled) - { - retW = VerQueryValueW( pVersionInfoW, FileDescriptionW, (LPVOID *)&pBufW, &uiLengthW ); - ok (retW, "VerQueryValueW failed: GetLastError = %u\n", GetLastError()); - ok( !lstrcmpW(WineFileDescriptionW, pBufW), "FileDescription should have been '%s'\n", WineFileDescriptionA); - } - - HeapFree( GetProcessHeap(), 0, pVersionInfoA); - if (is_unicode_enabled) - HeapFree( GetProcessHeap(), 0, pVersionInfoW); -} - -static void test_VerQueryValue(void) -{ - static const char * const value_name[] = { - "Product", "CompanyName", "FileDescription", "Internal", - "ProductVersion", "InternalName", "File", "LegalCopyright", - "FileVersion", "Legal", "OriginalFilename", "ProductName", - "Company", "Original" }; - char *ver, *p; - UINT len, ret, translation, i; - char buf[MAX_PATH]; - - ret = GetModuleFileName(NULL, buf, sizeof(buf)); - assert(ret); - - SetLastError(0xdeadbeef); - len = GetFileVersionInfoSize(buf, NULL); - ok(len, "GetFileVersionInfoSize(%s) error %u\n", buf, GetLastError()); - - ver = HeapAlloc(GetProcessHeap(), 0, len); - assert(ver); - - SetLastError(0xdeadbeef); - ret = GetFileVersionInfo(buf, 0, len, ver); - ok(ret, "GetFileVersionInfo error %u\n", GetLastError()); - - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, "\\VarFileInfo\\Translation", (LPVOID*)&p, &len); - ok(ret, "VerQueryValue error %u\n", GetLastError()); - ok(len == 4, "VerQueryValue returned %u, expected 4\n", len); - - translation = *(UINT *)p; - translation = MAKELONG(HIWORD(translation), LOWORD(translation)); - - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, "String", (LPVOID*)&p, &len); - ok(!ret, "VerQueryValue should fail\n"); - ok(GetLastError() == ERROR_RESOURCE_TYPE_NOT_FOUND || - GetLastError() == 0xdeadbeef /* Win9x, NT4, W2K */, - "VerQueryValue returned %u\n", GetLastError()); - ok(p == (char *)0xdeadbeef, "expected 0xdeadbeef got %p\n", p); - ok(len == 0 || - len == 0xbeef, /* win9x */ - "expected 0 got %x\n", len); - - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, "StringFileInfo", (LPVOID*)&p, &len); - ok(ret, "VerQueryValue error %u\n", GetLastError()); -todo_wine ok(len == 0, "VerQueryValue returned %u, expected 0\n", len); - ok(p != (char *)0xdeadbeef, "not expected 0xdeadbeef\n"); - - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, "\\StringFileInfo", (LPVOID*)&p, &len); - ok(ret, "VerQueryValue error %u\n", GetLastError()); -todo_wine ok(len == 0, "VerQueryValue returned %u, expected 0\n", len); - ok(p != (char *)0xdeadbeef, "not expected 0xdeadbeef\n"); - - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, "\\\\StringFileInfo", (LPVOID*)&p, &len); - ok(ret, "VerQueryValue error %u\n", GetLastError()); -todo_wine ok(len == 0, "VerQueryValue returned %u, expected 0\n", len); - ok(p != (char *)0xdeadbeef, "not expected 0xdeadbeef\n"); - - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, "\\StringFileInfo\\\\", (LPVOID*)&p, &len); - ok(ret, "VerQueryValue error %u\n", GetLastError()); -todo_wine ok(len == 0, "VerQueryValue returned %u, expected 0\n", len); - ok(p != (char *)0xdeadbeef, "not expected 0xdeadbeef\n"); - - sprintf(buf, "\\StringFileInfo\\%08x", translation); - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, buf, (LPVOID*)&p, &len); - ok(ret, "VerQueryValue error %u\n", GetLastError()); -todo_wine ok(len == 0, "VerQueryValue returned %u, expected 0\n", len); - ok(p != (char *)0xdeadbeef, "not expected 0xdeadbeef\n"); - - for (i = 0; i < sizeof(value_name)/sizeof(value_name[0]); i++) - { - sprintf(buf, "\\StringFileInfo\\%08x\\%s", translation, value_name[i]); - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, buf, (LPVOID*)&p, &len); - ok(ret, "VerQueryValue(%s) error %u\n", buf, GetLastError()); - ok(len == strlen(value_name[i]) + 1, "VerQueryValue returned %u\n", len); - ok(!strcmp(value_name[i], p), "expected \"%s\", got \"%s\"\n", - value_name[i], p); - - /* test partial value names */ - len = lstrlen(buf); - buf[len - 2] = 0; - p = (char *)0xdeadbeef; - len = 0xdeadbeef; - SetLastError(0xdeadbeef); - ret = VerQueryValue(ver, buf, (LPVOID*)&p, &len); - ok(!ret, "VerQueryValue(%s) succeeded\n", buf); - ok(GetLastError() == ERROR_RESOURCE_TYPE_NOT_FOUND || - GetLastError() == 0xdeadbeef /* Win9x, NT4, W2K */, - "VerQueryValue returned %u\n", GetLastError()); - ok(p == (char *)0xdeadbeef, "expected 0xdeadbeef got %p\n", p); - ok(len == 0 || - len == 0xbeef, /* win9x */ - "expected 0 or 0xbeef, got %x\n", len); - } - - HeapFree(GetProcessHeap(), 0, ver); -} - -START_TEST(info) -{ - test_info_size(); - test_info(); - test_32bit_win(); - test_VerQueryValue(); -} diff --git a/rostests/winetests/version/install.c b/rostests/winetests/version/install.c deleted file mode 100644 index ada860ca4cf..00000000000 --- a/rostests/winetests/version/install.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2005 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 - */ - -#include -#include - -#include "wine/test.h" -#include "windef.h" -#include "winbase.h" -#include "winerror.h" -#include "winver.h" - -static void test_find_file(void) -{ - DWORD ret; - UINT dwCur, dwOut ; - char appdir[MAX_PATH]; - char curdir[MAX_PATH]; - char filename[MAX_PATH]; - char outBuf[MAX_PATH]; - char windir[MAX_PATH]; - static CHAR empty[] = "", - regedit[] = "regedit", - regedit_exe[] = "regedit.exe"; - - memset(appdir, 0, MAX_PATH); - memset(windir, 0, MAX_PATH); - - dwCur=MAX_PATH; - dwOut=MAX_PATH; - memset(curdir, 0, MAX_PATH); - memset(outBuf, 0, MAX_PATH); - ret = VerFindFileA(0, regedit, empty, empty, curdir, &dwCur, outBuf, &dwOut); - switch(ret) { - case 0L: - ok(dwCur == 1, "Wrong length of buffer for current location: " - "got %d(%s) expected 1\n", dwCur, curdir); - ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " - "got %d(%s) expected 1\n", dwOut, outBuf); - break; - case VFF_BUFFTOOSMALL: - ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " - "got %d(%s) expected MAX_PATH\n", dwCur, curdir); - ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " - "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); - break; - default: - ok(0, "Got unexpected return value %x\n", ret); - } - - if(!GetWindowsDirectoryA(windir, MAX_PATH)) - trace("GetWindowsDirectoryA failed\n"); - else { - sprintf(appdir, "%s\\regedit.exe", windir); - if(INVALID_FILE_ATTRIBUTES == GetFileAttributesA(appdir)) - trace("GetFileAttributesA(%s) failed\n", appdir); - else { - dwCur=MAX_PATH; - dwOut=MAX_PATH; - memset(curdir, 0, MAX_PATH); - memset(outBuf, 0, MAX_PATH); - ret = VerFindFileA(0, regedit_exe, empty, empty, curdir, &dwCur, outBuf, &dwOut); - switch(ret) { - case VFF_CURNEDEST: - ok(dwCur == 1 + strlen(windir), "Wrong length of buffer for current location: " - "got %d(%s) expected %d\n", dwCur, curdir, lstrlenA(windir)+1); - ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " - "got %d(%s) expected 1\n", dwOut, outBuf); - break; - case VFF_BUFFTOOSMALL: - ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " - "got %d(%s) expected MAX_PATH\n", dwCur, curdir); - ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " - "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); - break; - default: - todo_wine ok(0, "Got unexpected return value %x\n", ret); - } - - dwCur=MAX_PATH; - dwOut=MAX_PATH; - memset(curdir, 0, MAX_PATH); - memset(outBuf, 0, MAX_PATH); - ret = VerFindFileA(0, regedit_exe, NULL, NULL, curdir, &dwCur, outBuf, &dwOut); - switch(ret) { - case VFF_CURNEDEST: - ok(dwCur == 1 + strlen(windir), "Wrong length of buffer for current location: " - "got %d(%s) expected %d\n", dwCur, curdir, lstrlenA(windir)+1); - ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: " - "got %d(%s) expected 1\n", dwOut, outBuf); - break; - case VFF_BUFFTOOSMALL: - ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: " - "got %d(%s) expected MAX_PATH\n", dwCur, curdir); - ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: " - "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); - break; - default: - todo_wine ok(0, "Got unexpected return value %x\n", ret); - } - } - } - if(!GetModuleFileNameA(NULL, filename, MAX_PATH) || - !GetSystemDirectoryA(windir, MAX_PATH) || - !GetTempPathA(MAX_PATH, appdir)) - trace("GetModuleFileNameA, GetSystemDirectoryA or GetTempPathA failed\n"); - else { - char *p = strrchr(filename, '\\'); - if(p) { - *(p++) ='\0'; - SetCurrentDirectoryA(filename); - memmove(filename, p, 1 + strlen(p)); - } - - dwCur=MAX_PATH; - dwOut=MAX_PATH; - memset(outBuf, 0, MAX_PATH); - memset(curdir, 0, MAX_PATH); - ret = VerFindFileA(0, filename, NULL, NULL, curdir, &dwCur, outBuf, &dwOut); - switch(ret) { - case VFF_CURNEDEST: - ok(dwOut == 1, "Wrong length of buffer for the recommended installation location" - "got %d(%s) expected 1\n", dwOut, outBuf); - break; - case VFF_BUFFTOOSMALL: - ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location" - "got %d(%s) expected MAX_PATH\n", dwOut, outBuf); - break; - default: - todo_wine ok(0, "Got unexpected return value %x\n", ret); - } - - dwCur=MAX_PATH; - dwOut=MAX_PATH; - memset(outBuf, 0, MAX_PATH); - memset(curdir, 0, MAX_PATH); - ret = VerFindFileA(VFFF_ISSHAREDFILE, filename, NULL, appdir, curdir, &dwCur, outBuf, &dwOut); - todo_wine ok(VFF_CURNEDEST == ret, "Wrong return value got %x expected VFF_CURNEDEST\n", ret); - ok(dwOut == 1 + strlen(windir), "Wrong length of buffer for current location: " - "got %d(%s) expected %d\n", dwOut, outBuf, lstrlenA(windir)+1); - - dwCur=MAX_PATH; - dwOut=MAX_PATH; - memset(outBuf, 0, MAX_PATH); - memset(curdir, 0, MAX_PATH); - ret = VerFindFileA(0, filename, NULL, appdir, curdir, &dwCur, outBuf, &dwOut); - todo_wine ok(VFF_CURNEDEST == ret, "Wrong return value got %x expected VFF_CURNEDEST\n", ret); - ok(dwOut == 1 + strlen(appdir), "Wrong length of buffer for current location: " - "got %d(%s) expected %d\n", dwOut, outBuf, lstrlenA(appdir)+1); - } -} - -START_TEST(install) -{ - test_find_file(); -} diff --git a/rostests/winetests/version/testlist.c b/rostests/winetests/version/testlist.c deleted file mode 100644 index c73df287383..00000000000 --- a/rostests/winetests/version/testlist.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Automatically generated file; DO NOT EDIT!! */ - -#define WIN32_LEAN_AND_MEAN -#include - -#define STANDALONE -#include "wine/test.h" - -extern void func_info(void); -extern void func_install(void); - -const struct test winetest_testlist[] = -{ - { "info", func_info }, - { "install", func_install }, - { 0, 0 } -}; diff --git a/rostests/winetests/version/version.rbuild b/rostests/winetests/version/version.rbuild deleted file mode 100644 index f3d0b69e94a..00000000000 --- a/rostests/winetests/version/version.rbuild +++ /dev/null @@ -1,15 +0,0 @@ - - - - - . - info.c - install.c - version.rc - testlist.c - wine - version - kernel32 - ntdll - - diff --git a/rostests/winetests/version/version.rc b/rostests/winetests/version/version.rc deleted file mode 100644 index c754e0c35a7..00000000000 --- a/rostests/winetests/version/version.rc +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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 - */ - -#include "windef.h" -#include "winbase.h" -#include "winver.h" - -VS_VERSION_INFO VERSIONINFO -FILEVERSION 1,0,0,0 -PRODUCTVERSION 1,0,0,0 -FILEFLAGSMASK 63 -FILEFLAGS 0 -FILEOS VOS_UNKNOWN -FILETYPE VFT_APP -FILESUBTYPE VFT2_UNKNOWN -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" /* LANG_ENGLISH/SUBLANG_DEFAULT, CP1252 */ - { - /* list of strings that partially match in arbitrary order */ - VALUE "Product", "Product" - VALUE "CompanyName", "CompanyName" - VALUE "FileDescription", "FileDescription" - VALUE "Internal", "Internal" - VALUE "ProductVersion", "ProductVersion" - VALUE "InternalName", "InternalName" - VALUE "File", "File" - VALUE "LegalCopyright", "LegalCopyright" - VALUE "FileVersion", "FileVersion" - VALUE "Legal", "Legal" - VALUE "OriginalFilename", "OriginalFilename" - VALUE "ProductName", "ProductName" - VALUE "Company", "Company" - VALUE "Original", "Original" - } - } - BLOCK "VarFileInfo" - { - VALUE "Translation", 0x0409,1252 /* LANG_ENGLISH/SUBLANG_DEFAULT, CP1252 */ - } -} diff --git a/rostests/winetests/winetest/config.h b/rostests/winetests/winetest/config.h deleted file mode 100644 index 949acf8a401..00000000000 --- a/rostests/winetests/winetest/config.h +++ /dev/null @@ -1,949 +0,0 @@ -/* include/config.h. Generated by configure. */ -/* include/config.h.in. Generated from configure.ac by autoheader. */ - -#define __WINE_CONFIG_H - -/* Specifies the compiler flag that forces a short wchar_t */ -#define CC_FLAG_SHORT_WCHAR "-fshort-wchar" - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -/* #undef CRAY_STACKSEG_END */ - -/* Define to 1 if using `alloca.c'. */ -/* #undef C_ALLOCA */ - -/* Define to 1 if you have `alloca', as a function or macro. */ -#define HAVE_ALLOCA 1 - -/* Define to 1 if you have and it should be used (not on Ultrix). - */ -/* #undef HAVE_ALLOCA_H */ - -/* Define if you have ALSA 1.x including devel headers */ -/* #undef HAVE_ALSA */ - -/* 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_ARPA_INET_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ARPA_NAMESER_H */ - -/* Define if you have ARTS sound server */ -/* #undef HAVE_ARTS */ - -/* Define if the assembler keyword .size is accepted */ -/* #undef HAVE_ASM_DOT_SIZE */ - -/* Define to 1 if you have the